[
  {
    "path": ".editorconfig",
    "content": "# top-most EditorConfig file\nroot = true\n\n# Code files\n[*.cs]\nindent_style = space\nindent_size = 3\n\n\n"
  },
  {
    "path": ".gitattributes",
    "content": "*.zip filter=lfs diff=lfs merge=lfs -text\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/ENHANCEMENT-REQUEST-FORM.yml",
    "content": "name: Enhancement Request\r\ndescription: File an Enhancement Request\r\ntitle: \"ENH: \"\r\nlabels: [\"enhancement\", \"triage\"]\r\nbody:\r\n  - type: markdown\r\n    attributes:\r\n      value: |\r\n        An Enhancement Request is a proposed change to improve functionality, user interface (UI), and/or experience (UX). Please describe the request (may include images) and post the smallest possible sample files (RVT and IFC), zipped. If you cannot post a file to this public forum, please email files to ifc-github-support@autodesk.com. They will be used internally only and kept confidential.\r\n  - type: textarea\r\n    id: Enhancementtext\r\n    attributes:\r\n      label: Enhancement Description\r\n      description: What would you prefer to happen?\r\n      placeholder: Enhancement description including images and zipped RVT/IFC files\r\n      value: \"... \"\r\n    validations:\r\n      required: true\r\n  - type: dropdown\r\n    id: Revitversion\r\n    attributes:\r\n      label: Revit Version\r\n      description: What version of Revit are you using?\r\n      options:\r\n        - 2027.0.x\r\n        - 2026.4.x\r\n        - 2026.3.x\r\n        - 2026.2.x\r\n        - 2026.1.x\r\n        - 2026.0.x\r\n        - 2025.4.x\r\n        - 2025.3.x\r\n        - 2025.2.x\r\n        - 2025.1.x\r\n        - 2025.0.x\r\n        - 2024.3.x\r\n        - 2024.2.x\r\n        - 2024.1.x\r\n        - 2024.0.x\r\n        - 2023.1.x\r\n        - 2023.0.x\r\n        - 2022.1.x\r\n        - 2022.0.x\r\n        - pre 2022\r\n    validations:\r\n      required: true\r\n  - type: dropdown\r\n    id: IFCAddonversion\r\n    attributes:\r\n      label: IFC for Revit Addon Version\r\n      description: What version of the IFC for Revit addon are you using?\r\n      options: \r\n        - 26.4.1\r\n        - 26.4.0\r\n        - 26.1.0\r\n        - 25.4.40\r\n        - 25.4.4\r\n        - 25.4.3\r\n        - 25.4.0\r\n        - 25.2.0\r\n        - 24.3.40\r\n        - 24.3.20\r\n        - 24.2.20\r\n        - 24.2.0\r\n        - 24.1.1\r\n        - 24.1.0\r\n        - 23.4.1\r\n        - 23.4.0\r\n        - 23.3.1\r\n        - 23.3.0\r\n        - 23.2.5\r\n        - 23.2.4\r\n        - 23.2.3\r\n        - 23.1.1\r\n        - 23.1.0\r\n        - 22.7.0\r\n        - 22.6.2\r\n        - 22.6.1\r\n        - 22.6.0\r\n        - 22.5.2\r\n        - 22.5.1\r\n        - 22.5.0\r\n        - pre 2022\r\n        - Other / None\r\n    validations:\r\n      required: true\r\n  - type: dropdown\r\n    id: Windowsversion\r\n    attributes:\r\n      label: Windows Version\r\n      description: What version of Windows are you using?\r\n      options:\r\n        - 11 25H2\r\n        - 11 24H2\r\n        - 11 23H2\r\n        - 11 22H2\r\n        - 11 21H2\r\n        - 10 22H2\r\n        - 10 21H2\r\n        - 10 21H1\r\n        - 10 20H2\r\n        - 10 2004\r\n    validations:\r\n      required: true      \r\n  - type: markdown\r\n    attributes:\r\n      value: |\r\n        Thank you for taking the time to fill out this Enhancement Request.\r\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/INQUIRY-FORM.yml",
    "content": "name: Inquiry\r\ndescription: File an Inquiry\r\ntitle: \"INQ: \"\r\nlabels: [\"inquiry\", \"triage\"]\r\nbody:\r\n  - type: markdown\r\n    attributes:\r\n      value: |\r\n        An Inquiry is a question about IFC functionality and/or UI/UX (but not a Problem Report or an Enhancement Request), where the user needs further assistance or guidance in its usage. Please describe the inquiry (may include images) and post the smallest possible sample files (RVT and IFC), zipped. If you cannot post a file to this public forum, please email files to ifc-github-support@autodesk.com. They will be used internally only and kept confidential.\r\n  - type: textarea\r\n    id: Inquirytext\r\n    attributes:\r\n      label: Inquiry description\r\n      description: What are you trying to accomplish?\r\n      placeholder: Inquiry description including images and zipped RVT/IFC files\r\n      value: \"... \"\r\n    validations:\r\n      required: true\r\n  - type: dropdown\r\n    id: Revitversion\r\n    attributes:\r\n      label: Revit Version\r\n      description: What version of Revit are you using?\r\n      options:\r\n        - 2027.0.x\r\n        - 2026.4.x\r\n        - 2026.3.x\r\n        - 2026.2.x\r\n        - 2026.1.x\r\n        - 2026.0.x\r\n        - 2025.4.x\r\n        - 2025.3.x\r\n        - 2025.2.x\r\n        - 2025.1.x\r\n        - 2025.0.x\r\n        - 2024.3.x\r\n        - 2024.2.x\r\n        - 2024.1.x\r\n        - 2024.0.x\r\n        - 2023.1.x\r\n        - 2023.0.x\r\n        - 2022.1.x\r\n        - 2022.0.x\r\n        - pre 2022\r\n    validations:\r\n      required: true\r\n  - type: dropdown\r\n    id: IFCAddonversion\r\n    attributes:\r\n      label: IFC for Revit Addon Version\r\n      description: What version of the IFC for Revit addon are you using?\r\n      options: \r\n        - 26.4.1\r\n        - 26.4.0\r\n        - 26.1.0\r\n        - 25.4.40\r\n        - 25.4.4\r\n        - 25.4.3\r\n        - 25.4.0\r\n        - 25.2.0\r\n        - 24.3.40\r\n        - 24.3.20\r\n        - 24.2.20\r\n        - 24.2.0\r\n        - 24.1.1\r\n        - 24.1.0\r\n        - 23.4.1\r\n        - 23.4.0\r\n        - 23.3.1\r\n        - 23.3.0\r\n        - 23.2.5\r\n        - 23.2.4\r\n        - 23.2.3\r\n        - 23.1.1\r\n        - 23.1.0\r\n        - 22.7.0\r\n        - 22.6.2\r\n        - 22.6.1\r\n        - 22.6.0\r\n        - 22.5.2\r\n        - 22.5.1\r\n        - 22.5.0\r\n        - pre 2022\r\n        - Other / None\r\n    validations:\r\n      required: true\r\n  - type: dropdown\r\n    id: Windowsversion\r\n    attributes:\r\n      label: Windows Version\r\n      description: What version of Windows are you using?\r\n      options:\r\n        - 11 25H2\r\n        - 11 24H2\r\n        - 11 23H2\r\n        - 11 22H2\r\n        - 11 21H2\r\n        - 10 22H2\r\n        - 10 21H2\r\n        - 10 21H1\r\n        - 10 20H2\r\n        - 10 2004\r\n    validations:\r\n      required: true      \r\n  - type: markdown\r\n    attributes:\r\n      value: |\r\n        Thank you for taking the time to fill out this Inquiry.\r\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/PROBLEM-REPORT-FORM.yml",
    "content": "name: Problem Report\r\ndescription: File a Problem Report\r\ntitle: \"PR: \"\r\nlabels: [\"problem\", \"triage\"]\r\nbody:\r\n  - type: markdown\r\n    attributes:\r\n      value: |\r\n        A Problem Report is a \"bug\", error, or issue found during the use of any aspect of the IFC functionality. Please describe the issue, including steps to recreate the error (may include images), and post the smallest possible sample files (RVT and IFC), zipped. If you cannot post a file to this public forum, please email files to ifc-github-support@autodesk.com. They will be used internally only and kept confidential.\r\n  - type: textarea\r\n    id: Reporttext\r\n    attributes:\r\n      label: Problem Description\r\n      description: What did you expect to happen and what was the propblem?\r\n      placeholder: Problem description including images and zipped RVT/IFC files\r\n      value: \"... \"\r\n    validations:\r\n      required: true\r\n  - type: dropdown\r\n    id: Revitversion\r\n    attributes:\r\n      label: Revit Version\r\n      description: What version of Revit are you using?\r\n      options:\r\n        - 2027.0.x\r\n        - 2026.4.x\r\n        - 2026.3.x\r\n        - 2026.2.x\r\n        - 2026.1.x\r\n        - 2026.0.x\r\n        - 2025.4.x\r\n        - 2025.3.x\r\n        - 2025.2.x\r\n        - 2025.1.x\r\n        - 2025.0.x\r\n        - 2024.3.x\r\n        - 2024.2.x\r\n        - 2024.1.x\r\n        - 2024.0.x\r\n        - 2023.1.x\r\n        - 2023.0.x\r\n        - 2022.1.x\r\n        - 2022.0.x\r\n        - pre 2022\r\n    validations:\r\n      required: true\r\n  - type: dropdown\r\n    id: IFCAddonversion\r\n    attributes:\r\n      label: IFC for Revit Addon Version\r\n      description: What version of the IFC for Revit addon are you using?\r\n      options: \r\n        - 26.4.1\r\n        - 26.4.0\r\n        - 26.1.0\r\n        - 25.4.40\r\n        - 25.4.4\r\n        - 25.4.3\r\n        - 25.4.0\r\n        - 25.2.0\r\n        - 24.3.40\r\n        - 24.3.20\r\n        - 24.2.20\r\n        - 24.2.0\r\n        - 24.1.1\r\n        - 24.1.0\r\n        - 23.4.1\r\n        - 23.4.0\r\n        - 23.3.1\r\n        - 23.3.0\r\n        - 23.2.5\r\n        - 23.2.4\r\n        - 23.2.3\r\n        - 23.1.1\r\n        - 23.1.0\r\n        - 22.7.0\r\n        - 22.6.2\r\n        - 22.6.1\r\n        - 22.6.0\r\n        - 22.5.2\r\n        - 22.5.1\r\n        - 22.5.0\r\n        - pre 2022\r\n        - Other / None\r\n    validations:\r\n      required: true\r\n  - type: dropdown\r\n    id: Windowsversion\r\n    attributes:\r\n      label: Windows Version\r\n      description: What version of Windows are you using?\r\n      options:\r\n        - 11 25H2\r\n        - 11 24H2\r\n        - 11 23H2\r\n        - 11 22H2\r\n        - 11 21H2\r\n        - 10 22H2\r\n        - 10 21H2\r\n        - 10 21H1\r\n        - 10 20H2\r\n        - 10 2004\r\n    validations:\r\n      required: true      \r\n  - type: markdown\r\n    attributes:\r\n      value: |\r\n        Thank you for taking the time to submit this Problem Report.\r\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\n"
  },
  {
    "path": ".gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n.DS_Store\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\nbuild/\nbld/\n[Bb]in/\n[Oo]bj/\n[Ii]ntermediate/\n\n# Roslyn cache directories\n*.ide/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n#NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.mdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n*.ide\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opensdf\n*.sdf\n*.cachefile\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding addin-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# TODO: Comment the next line if you want to checkin your web deploy settings \n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# NuGet Packages\n*.nupkg\n# The packages folder can be ignored because of Package Restore\n**/packages/*\n# except build/, which is used as an MSBuild target.\n!**/packages/build/\n# If using the old MSBuild-Integrated Package Restore, uncomment this:\n#!**/packages/repositories.config\n\n# Windows Azure Build Output\ncsx/\n*.build.csdef\n\n# Windows Store app package directory\nAppPackages/\n\n# Others\nsql/\n*.Cache\nClientBin/\n[Ss]tyle[Cc]op.*\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.pfx\n*.publishsettings\nnode_modules/\n*.msi\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\n*.mdf\n*.ldf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# Rhino\n*.rui_bak\n.vs/Revit.IFC/v15/Server/sqlite3/db.lock\n*.ide-shm\n*.ide-wal\n.vs/\n*.sig\n"
  },
  {
    "path": "Install/Program Files to Install/DefaultUserDefinedParameterSets.txt",
    "content": "#\r\n# User Defined PropertySet Definition File\r\n#\r\n# Format:\r\n#    PropertySet:\t<Pset Name>\tI[nstance]/T[ype]\t<element list separated by ','>\r\n#\t<Property Name 1>\t<Data type>\t<[opt] Revit parameter name, if different from IFC>\r\n#\t<Property Name 2>\t<Data type>\t<[opt] Revit parameter name, if different from IFC>\r\n#\t...\r\n#\r\n#\tData types supported: Acceleration, AngularVelocity, Area, AreaDensity, Boolean, ClassificationReference, ColorTemperature, Count, Currency,\r\n#\tDynamicViscosity, ElectricCurrent, ElectricVoltage, Energy, ElectricalEfficacy, Force, Frequency, HeatFluxDensity, \r\n#\tHeatingValue, Identifier, Illuminance, Integer, IonConcentration, IsothermalMoistureCapacity, Label, Length,\r\n#\tLinearForce, LinearMoment, LinearStiffness, LinearVelocity, Logical, LuminousFlux, LuminousIntensity, Mass, MassDensity, MassFlowRate, MassPerLength\r\n#\tModulusOfElasticity, MoistureDiffusivity, MomentOfInertia, NormalisedRatio, Numeric, PlanarForce, PlaneAngle,\r\n#\tPositiveLength, PositivePlaneAngle,PositiveRatio, Power, Pressure, Ratio, Real, RotationalFrequency,\r\n#\tSoundPower, SoundPressure, SpecificHeatCapacity, Text, ThermalConductivity, ThermalExpansionCoefficient, ThermalResistance\r\n#\tThermalTransmittance, ThermodynamicTemperature, Time, Torque, VaporPermeability, Volume, VolumetricFlowRate, WarpingConstant\r\n# \r\n# Since 24.1.0, type properties are not exported in case they are not specified in the user-defined property sets file.\r\n#\tTo export type properties for the IFCElement, for example, \r\n#\ta user should include \"IFCElementType\" in the proper .txt file.\r\n#\r\n# Example property set definition for COBie:\r\n#\r\n#PropertySet:\tCOBie_Specification\tT\tIfcElementType\r\n#\tNominalLength\tReal\tCOBie.Type.NominalLength\r\n#\tNominalWidth\tReal\tCOBie.Type.NominalWidth\r\n#\tNominalHeight\tReal\tCOBie.Type.NominalHeight\r\n#\tShape\t\tText\tCOBie.Type.Shape\r\n#\tSize\t\tText\tCOBie.Type.Size\r\n#\tColor\t\tText\tCOBie.Type.Color\r\n#\tFinish\t\tText\tCOBie.Type.Finish\r\n#\tGrade\t\tText\tCOBie.Type.Grade\r\n#\tMaterial\tText\tCOBie.Type.Material\r\n#\tConstituents\tText\tCOBie.Type.Constituents\r\n#\tFeatures\tText\tCobie.Type.Features\r\n#\tAccessibilityPerformance\tText\tCOBie.Type.AccessibilityPerformance\r\n#\tCodePerformance\tText\tCOBie.Type.CodePerformance\r\n#\tSustainabilityPerformance\tText\tCOBie.Type.SustainabilityPerformance\r\n# \r\n"
  },
  {
    "path": "Install/Program Files to Install/IFC Shared Parameters-RevitIFCBuiltIn-Type_ALL.txt",
    "content": "# This is a Revit shared parameter file.\n# Do not edit manually.\n*META\tVERSION\tMINVERSION\nMETA\t2\t1\n*GROUP\tID\tNAME\n#\nGROUP\t3\tIfcDoorLiningProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t92f9b046-b15e-42bd-baea-369a015b9156\tIfcDoorLiningProperties.CasingDepth[Type]\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb135fe15-c89f-47e6-a590-16701b7f1d45\tIfcDoorLiningProperties.CasingThickness[Type]\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5b3062b1-0ad1-44ee-ae39-bebc572a9cf4\tIfcDoorLiningProperties.LiningDepth[Type]\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0ad13bdd-a89a-4f20-8609-8fc17c3477e4\tIfcDoorLiningProperties.LiningOffset[Type]\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\t8aa4ffe3-5e5c-495a-817d-7979fdd4d5e7\tIfcDoorLiningProperties.LiningThickness[Type]\tLENGTH\t\t3\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tf1565685-f68c-4b36-9803-041b31c7ae80\tIfcDoorLiningProperties.LiningToPanelOffsetX[Type]\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\t3156d749-4efe-434b-84d6-748788f161b5\tIfcDoorLiningProperties.LiningToPanelOffsetY[Type]\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\td25dfef4-d7d2-4790-87e3-acdccc364c3e\tIfcDoorLiningProperties.ThresholdDepth[Type]\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t517d7a2f-2552-4512-b54e-97c58f6d61dc\tIfcDoorLiningProperties.ThresholdOffset[Type]\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\tebc31023-08de-4dcf-ba62-a89f16983cff\tIfcDoorLiningProperties.ThresholdThickness[Type]\tLENGTH\t\t3\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t47ac05fc-2ff6-420e-b3bb-cdcd4e0a5f26\tIfcDoorLiningProperties.TransomOffset[Type]\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\t9d4e7783-2e14-4b54-9674-5b1f51e4e557\tIfcDoorLiningProperties.TransomThickness[Type]\tLENGTH\t\t3\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t4\tIfcDoorPanelProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t25f566ef-a0d2-4784-88dc-69821dcbb591\tIfcDoorPanelProperties.PanelDepth[Type]\tLENGTH\t\t4\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8dec2ef0-b531-4a8e-a003-2402019d7c72\tIfcDoorPanelProperties.PanelOperation[Type]\tTEXT\t\t4\t1\tIfcLabel\t1\nPARAM\tc8444bb5-6eec-4b71-97e3-b65271233de0\tIfcDoorPanelProperties.PanelPosition[Type]\tTEXT\t\t4\t1\tIfcLabel\t1\nPARAM\t6a48a5e8-2e46-4f8e-b4af-a48c49e48964\tIfcDoorPanelProperties.PanelWidth[Type]\tNUMBER\t\t4\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t5\tIfcFuelProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t37031346-c7ab-4032-aa3f-bd95d01757c7\tIfcFuelProperties.CarbonContent[Type]\tNUMBER\t\t5\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tef703772-4618-43a3-8639-58048fe9f3af\tIfcFuelProperties.CombustionTemperature[Type]\tNUMBER\t\t5\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t66bbb418-6906-4083-ba31-f256beb35439\tIfcFuelProperties.HigherHeatingValue[Type]\tNUMBER\t\t5\t1\tIfcHeatingValueMeasure\t1\nPARAM\t0f2986d3-a8dd-4aed-a7db-f169b958ebc6\tIfcFuelProperties.LowerHeatingValue[Type]\tNUMBER\t\t5\t1\tIfcHeatingValueMeasure\t1\n#\nGROUP\t6\tIfcGeneralMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t08485ab0-3052-472a-a66d-125d732478ec\tIfcGeneralMaterialProperties.MassDensity[Type]\tMASS_DENSITY\t\t6\t1\tIfcMassDensityMeasure\t1\nPARAM\tf78bbd9e-9023-460e-be67-b74ffebe7c55\tIfcGeneralMaterialProperties.MolecularWeight[Type]\tNUMBER\t\t6\t1\tIfcMolecularWeightMeasure\t1\nPARAM\t3b48dd4b-c349-41ef-bc94-c6b834d06af5\tIfcGeneralMaterialProperties.Porosity[Type]\tNUMBER\t\t6\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t7\tIfcHygroscopicMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tce2d6709-22b1-4f7d-a3fa-9f9e9cc45972\tIfcHygroscopicMaterialProperties.IsothermalMoistureCapacity[Type]\tNUMBER\t\t7\t1\tIfcIsothermalMoistureCapacityMeasure\t1\nPARAM\t5f6a7c0c-af71-4afc-9f16-bee7b2b2c296\tIfcHygroscopicMaterialProperties.LowerVaporResistanceFactor[Type]\tNUMBER\t\t7\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t59004aba-cc6a-4cb8-b46e-ad4ab6785cba\tIfcHygroscopicMaterialProperties.MoistureDiffusivity[Type]\tNUMBER\t\t7\t1\tIfcMoistureDiffusivityMeasure\t1\nPARAM\t8e17b1e2-ddb9-4367-aea7-85e9f2660a87\tIfcHygroscopicMaterialProperties.UpperVaporResistanceFactor[Type]\tNUMBER\t\t7\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td31e7f81-8a5f-4956-9d05-0889d047325c\tIfcHygroscopicMaterialProperties.VaporPermeability[Type]\tNUMBER\t\t7\t1\tIfcVaporPermeabilityMeasure\t1\n#\nGROUP\t8\tIfcMechanicalConcreteMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4253ac21-27ae-4e09-b395-5a6aeedf9f3f\tIfcMechanicalConcreteMaterialProperties.AdmixturesDescription[Type]\tTEXT\t\t8\t1\tIfcText\t1\nPARAM\t64f1b7bf-8c63-40dd-95ac-44a214ddee4a\tIfcMechanicalConcreteMaterialProperties.CompressiveStrength[Type]\tNUMBER\t\t8\t1\tIfcPressureMeasure\t1\nPARAM\t38087230-ac60-455d-840f-40215d445e53\tIfcMechanicalConcreteMaterialProperties.MaxAggregateSize[Type]\tLENGTH\t\t8\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t00cb9dde-78b3-4678-b473-f532f2eebbb0\tIfcMechanicalConcreteMaterialProperties.ProtectivePoreRatio[Type]\tNUMBER\t\t8\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\ta1888bfd-8dab-4311-b129-dc2552d932dd\tIfcMechanicalConcreteMaterialProperties.WaterImpermeability[Type]\tTEXT\t\t8\t1\tIfcText\t1\nPARAM\t6f4dd356-fa8b-4af7-8898-3394325bf48a\tIfcMechanicalConcreteMaterialProperties.Workability[Type]\tTEXT\t\t8\t1\tIfcText\t1\n#\nGROUP\t9\tIfcMechanicalMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta38fcbae-9c8c-45c0-9390-43fa2a9a9349\tIfcMechanicalMaterialProperties.DynamicViscosity[Type]\tNUMBER\t\t9\t1\tIfcDynamicViscosityMeasure\t1\nPARAM\t24f1eedc-7357-4bcb-bd0d-4d6172ea0ab6\tIfcMechanicalMaterialProperties.PoissonRatio[Type]\tNUMBER\t\t9\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t159af2ad-daa9-4570-83eb-ba54e53f951a\tIfcMechanicalMaterialProperties.ShearModulus[Type]\tNUMBER\t\t9\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tddb278c4-28bf-42e8-892e-d122898da67f\tIfcMechanicalMaterialProperties.ThermalExpansionCoefficient[Type]\tNUMBER\t\t9\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\t42b125e7-513e-4877-a18a-f4a4c7b022c6\tIfcMechanicalMaterialProperties.YoungModulus[Type]\tNUMBER\t\t9\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t10\tIfcMechanicalSteelMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t85a15c1a-ed8e-4c25-ac6f-1b89401d26da\tIfcMechanicalSteelMaterialProperties.HardeningModule[Type]\tNUMBER\t\t10\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tef0475eb-7478-4534-9a6e-5d302e31f688\tIfcMechanicalSteelMaterialProperties.PlasticStrain[Type]\tNUMBER\t\t10\t1\tIfcPositiveRatioMeasure\t1\nPARAM\te95ce7b4-7eee-4993-9b98-e44a43621e8b\tIfcMechanicalSteelMaterialProperties.ProportionalStress[Type]\tNUMBER\t\t10\t1\tIfcPressureMeasure\t1\nPARAM\t55301e07-c365-4143-8376-04a9d9d535cf\tIfcMechanicalSteelMaterialProperties.Relaxations[Type]\tNUMBER\t\t10\t1\tIfcRelaxation\t1\nPARAM\t5b79b2e5-8035-4361-8d73-334d905dfcf0\tIfcMechanicalSteelMaterialProperties.UltimateStrain[Type]\tNUMBER\t\t10\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t171a9421-eb50-4711-91d2-63c4ed74bca3\tIfcMechanicalSteelMaterialProperties.UltimateStress[Type]\tNUMBER\t\t10\t1\tIfcPressureMeasure\t1\nPARAM\t0f7fd825-6b69-41bf-a1f5-18430f35c300\tIfcMechanicalSteelMaterialProperties.YieldStress[Type]\tNUMBER\t\t10\t1\tIfcPressureMeasure\t1\n#\nGROUP\t11\tIfcOpticalMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2ea9790f-dae5-4767-b393-33181660131a\tIfcOpticalMaterialProperties.SolarReflectanceBack[Type]\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t84d2baa5-87da-4a22-ba2e-f476ebdf65fd\tIfcOpticalMaterialProperties.SolarReflectanceFront[Type]\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tb15ebfd3-06ce-489e-b489-4e6136104278\tIfcOpticalMaterialProperties.SolarTransmittance[Type]\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7dc7cae9-2b08-4fd6-aa1c-0831f02c4241\tIfcOpticalMaterialProperties.ThermalIrEmissivityBack[Type]\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t2f69cfd2-4447-42a9-bdca-af00afd91d30\tIfcOpticalMaterialProperties.ThermalIrEmissivityFront[Type]\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t61cf4c99-8e9c-4a2a-a053-54646f6a69ab\tIfcOpticalMaterialProperties.ThermalIrTransmittance[Type]\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tdb18b563-49ef-4ea0-ae6e-0d94d0ae0450\tIfcOpticalMaterialProperties.VisibleReflectanceBack[Type]\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t20817d84-ed31-4dde-b6b0-e4066f070273\tIfcOpticalMaterialProperties.VisibleReflectanceFront[Type]\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t2ab16d65-ae92-488f-9fa3-790b80708349\tIfcOpticalMaterialProperties.VisibleTransmittance[Type]\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t12\tIfcPermeableCoveringProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48a13c2f-be12-4b7d-8e0e-31590b982136\tIfcPermeableCoveringProperties.FrameDepth[Type]\tLENGTH\t\t12\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t220fe02d-3d97-49ed-a286-9c28d4e7d18d\tIfcPermeableCoveringProperties.FrameThickness[Type]\tLENGTH\t\t12\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t21330fea-14da-443d-9087-a2e1a1604186\tIfcPermeableCoveringProperties.OperationType[Type]\tTEXT\t\t12\t1\tIfcLabel\t1\nPARAM\t92c93d7d-9ac2-4e72-b141-fa1c6b8c9a64\tIfcPermeableCoveringProperties.PanelPosition[Type]\tTEXT\t\t12\t1\tIfcLabel\t1\n#\nGROUP\t13\tIfcProductsOfCombustionProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4840f7b4-9e75-4f10-8d43-30757473bc51\tIfcProductsOfCombustionProperties.CO2Content[Type]\tNUMBER\t\t13\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7965f901-8fe5-4c9c-9d73-a3f3d9df89b9\tIfcProductsOfCombustionProperties.COContent[Type]\tNUMBER\t\t13\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tb2185af1-2685-4c6c-8e45-22d6cb4bb1db\tIfcProductsOfCombustionProperties.N20Content[Type]\tNUMBER\t\t13\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7b021f1d-0315-42c6-b685-df43df0a9c30\tIfcProductsOfCombustionProperties.SpecificHeatCapacity[Type]\tNUMBER\t\t13\t1\tIfcSpecificHeatCapacityMeasure\t1\n#\nGROUP\t14\tIfcReinforcementDefinitionProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb0a49d0f-ca11-4294-99a6-9cf87fbf66d5\tIfcReinforcementDefinitionProperties.DefinitionType[Type]\tTEXT\t\t14\t1\tIfcLabel\t1\nPARAM\ta654d1c7-f3fa-44e2-884d-1f25bd47986c\tIfcReinforcementDefinitionProperties.ReinforcementSectionDefinitions[Type]\tTEXT\t\t14\t1\tIfcLabel\t1\n#\nGROUP\t15\tIfcThermalMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t68ff35e6-dd40-4a79-a435-4030d2af984b\tIfcThermalMaterialProperties.BoilingPoint[Type]\tNUMBER\t\t15\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t8174d672-67b7-4622-b43a-fba25dbc0d7e\tIfcThermalMaterialProperties.FreezingPoint[Type]\tNUMBER\t\t15\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tbfa331db-620f-4b08-834c-1e360306ff1b\tIfcThermalMaterialProperties.SpecificHeatCapacity[Type]\tNUMBER\t\t15\t1\tIfcSpecificHeatCapacityMeasure\t1\nPARAM\tb7677629-48cd-4d31-8616-f0a10901b290\tIfcThermalMaterialProperties.ThermalConductivity[Type]\tNUMBER\t\t15\t1\tIfcThermalConductivityMeasure\t1\n#\nGROUP\t16\tIfcWaterProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a9fce38-b04c-40c8-9b44-71b6fe99eb5d\tIfcWaterProperties.AcidityConcentration[Type]\tNUMBER\t\t16\t1\tIfcIonConcentrationMeasure\t1\nPARAM\t1b0e7743-ef87-4b25-a6ba-3fbc4e82622a\tIfcWaterProperties.AlkalinityConcentration[Type]\tNUMBER\t\t16\t1\tIfcIonConcentrationMeasure\t1\nPARAM\tfc99d3dc-b85d-4ed2-9482-0db1c6be987c\tIfcWaterProperties.DissolvedSolidsContent[Type]\tNUMBER\t\t16\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tc6665072-8deb-4204-b074-2dfa0dcb03cc\tIfcWaterProperties.Hardness[Type]\tNUMBER\t\t16\t1\tIfcIonConcentrationMeasure\t1\nPARAM\t957b39e4-0d66-448b-9a57-0126124e823d\tIfcWaterProperties.ImpuritiesContent[Type]\tNUMBER\t\t16\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tfef2853c-2c83-4f47-812f-537bee376e19\tIfcWaterProperties.IsPotable[Type]\tNUMBER\t\t16\t1\tBoolean\t1\nPARAM\tb2b02569-a1a4-4d1e-85d3-7077cfebb6a7\tIfcWaterProperties.PHLevel[Type]\tNUMBER\t\t16\t1\tIfcPHMeasure\t1\n#\nGROUP\t17\tIfcWindowLiningProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td7498563-1114-4445-b602-e7a1e86c020c\tIfcWindowLiningProperties.FirstMullionOffset[Type]\tNUMBER\t\t17\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t491217ac-605b-44c0-9222-8db84fde541d\tIfcWindowLiningProperties.FirstTransomOffset[Type]\tNUMBER\t\t17\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tfac29451-1e72-4361-9174-bc4532410632\tIfcWindowLiningProperties.LiningDepth[Type]\tLENGTH\t\t17\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t106eaf02-86f3-46ec-82bd-fc3f355e74ce\tIfcWindowLiningProperties.LiningOffset[Type]\tLENGTH\t\t17\t1\tIfcLengthMeasure\t1\nPARAM\t833c86f9-c51b-4368-a24d-caef640cbc1a\tIfcWindowLiningProperties.LiningThickness[Type]\tLENGTH\t\t17\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tf1a36a64-1d9c-4900-a49e-b9e04d3503c8\tIfcWindowLiningProperties.LiningToPanelOffsetX[Type]\tLENGTH\t\t17\t1\tIfcLengthMeasure\t1\nPARAM\tf31c5a1f-ed7e-480a-b3b7-b6005035115d\tIfcWindowLiningProperties.LiningToPanelOffsetY[Type]\tLENGTH\t\t17\t1\tIfcLengthMeasure\t1\nPARAM\tcc559ca1-ae0d-4f96-93e5-079113802312\tIfcWindowLiningProperties.MullionThickness[Type]\tLENGTH\t\t17\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t5e4a6e16-f61a-4da2-8fa0-0bb32f9ca2d8\tIfcWindowLiningProperties.SecondMullionOffset[Type]\tNUMBER\t\t17\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\taaa4666e-80a6-4fc5-9b24-297e390b2794\tIfcWindowLiningProperties.SecondTransomOffset[Type]\tNUMBER\t\t17\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t15ad8885-bd95-4663-b119-54ce0c3212fb\tIfcWindowLiningProperties.TransomThickness[Type]\tLENGTH\t\t17\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t18\tIfcWindowPanelProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfe3f45d7-304a-4483-9023-3e3b224c71cb\tIfcWindowPanelProperties.FrameDepth[Type]\tLENGTH\t\t18\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td3af107d-7f9e-4e6f-a726-f9aae706b11a\tIfcWindowPanelProperties.FrameThickness[Type]\tLENGTH\t\t18\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc7984296-5ee2-42d3-94ab-312df9b4e9d6\tIfcWindowPanelProperties.OperationType[Type]\tTEXT\t\t18\t1\tIfcLabel\t1\nPARAM\tb7e38a0c-098e-4d8b-873a-82eb643051c6\tIfcWindowPanelProperties.PanelPosition[Type]\tTEXT\t\t18\t1\tIfcLabel\t1\n#\nGROUP\t19\tPset_ActionRequest\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf9570f6f-4c83-4914-83af-7ca58d36bb2a\tPset_ActionRequest.RequestComments[Type]\tTEXT\t\t19\t1\tIfcText\t1\nPARAM\t1816931d-d252-40b0-9711-52369b261e21\tPset_ActionRequest.RequestDescription[Type]\tTEXT\t\t19\t1\tIfcText\t1\nPARAM\t5748e5d9-f3c8-484f-9803-2bb4ce6ea1b2\tPset_ActionRequest.RequestSourceLabel[Type]\tTEXT\t\t19\t1\tIfcLabel\t1\nPARAM\t443cc994-617c-46b9-80b7-e64d5df929dd\tPset_ActionRequest.RequestSourceName[Type]\tMULTILINETEXT\t\t19\t1\tIfcPerson\t1\nPARAM\t15d2334d-8baf-4087-af9a-da19b81bfc66\tPset_ActionRequest.RequestSourceType[Type]\tTEXT\t\t19\t1\tPEnum_RequestSourceType\t1\nPARAM\t9a2da861-95a2-4699-88b7-9ab5308f0cf0\tPset_ActionRequest.Status[Type]\tTEXT\t\t19\t1\tPEnum_RequestStatus\t1\n#\nGROUP\t20\tPset_ActorCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8b629d57-4f17-4ebe-9f46-d6d0c790139e\tPset_ActorCommon.ActorCategory[Type]\tTEXT\t\t20\t1\tIfcLabel\t1\nPARAM\t9fdfc0fb-762f-4977-b246-723f3676f1e9\tPset_ActorCommon.Category[Type]\tTEXT\t\t20\t1\tIfcLabel\t1\nPARAM\td561cc0d-b78e-46dd-bbfe-d431d5d116e7\tPset_ActorCommon.NumberOfActors[Type]\tINTEGER\t\t20\t1\tIfcCountMeasure\t1\nPARAM\t864f4214-8a81-4a36-b233-23a0bfdbb7b2\tPset_ActorCommon.SkillLevel[Type]\tTEXT\t\t20\t1\tIfcLabel\t1\n#\nGROUP\t21\tPset_ActuatorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tefa57a20-38b6-4279-b274-e31e78ea3679\tPset_ActuatorPHistory.Position[Type]\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\nPARAM\t661d9b70-f1e4-4c50-aa1e-eb8601153a70\tPset_ActuatorPHistory.PositionHistory[Type]\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\nPARAM\t90734c34-34e0-4d19-8606-e1fb49a90b9a\tPset_ActuatorPHistory.Quality[Type]\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\nPARAM\tadcaa6a2-3249-4786-9741-d827528243fa\tPset_ActuatorPHistory.QualityHistory[Type]\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\nPARAM\tb70fbfc6-036c-4679-a612-a39322ef3117\tPset_ActuatorPHistory.Status[Type]\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\nPARAM\t6552af10-cb4d-4ed7-9732-d15c27dfc11a\tPset_ActuatorPHistory.StatusHistory[Type]\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\n#\nGROUP\t22\tPset_ActuatorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t567d886a-48da-4dbd-81fe-30db01d1aef8\tPset_ActuatorTypeCommon.ActuatorApplication[Type]\tTEXT\t\t22\t1\tPEnum_ActuatorApplication\t1\nPARAM\tde4488bd-cfc7-4c88-a903-fd07d6fd59fe\tPset_ActuatorTypeCommon.ActuatorStatus[Type]\tTEXT\t\t22\t1\tPEnum_ElementStatus\t1\nPARAM\t5df7283f-6fe5-4a95-85d9-bd285bf64ed0\tPset_ActuatorTypeCommon.Application[Type]\tTEXT\t\t22\t1\tPEnum_ActuatorApplication\t1\nPARAM\tc0290bdb-4fa5-442d-b90b-9898b1a3c4e9\tPset_ActuatorTypeCommon.FailPosition[Type]\tTEXT\t\t22\t1\tPEnum_FailPosition\t1\nPARAM\t4b124d18-e511-4c3e-932f-9be83ef2877b\tPset_ActuatorTypeCommon.ManualOverride[Type]\tYESNO\t\t22\t1\tIfcBoolean\t1\nPARAM\tc62a2632-ec58-4984-9199-bdda161e0e5e\tPset_ActuatorTypeCommon.Reference[Type]\tTEXT\t\t22\t1\tIfcIdentifier\t1\nPARAM\ta9f89daa-42ad-43ae-8e1f-2994c625b8bf\tPset_ActuatorTypeCommon.Status[Type]\tTEXT\t\t22\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t23\tPset_ActuatorTypeElectricActuator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t79ed14c6-8417-4a61-b549-e361511c4c16\tPset_ActuatorTypeElectricActuator.ActuatorInputPower[Type]\tNUMBER\t\t23\t1\tIfcPowerMeasure\t1\nPARAM\t0fa5f3a4-5e43-4db6-b246-4a237d145d3e\tPset_ActuatorTypeElectricActuator.ControlPulseCurrent[Type]\tNUMBER\t\t23\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tbaa21f83-fd78-4412-8da7-c53380d2253a\tPset_ActuatorTypeElectricActuator.ElectricActuatorType[Type]\tTEXT\t\t23\t1\tPEnum_ElectricActuatorType\t1\n#\nGROUP\t24\tPset_ActuatorTypeHydraulicActuator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td813b66d-e6f0-46fd-bf72-605cacc1215e\tPset_ActuatorTypeHydraulicActuator.InputFlowrate[Type]\tNUMBER\t\t24\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t1e2d09a9-42a9-43fe-8100-55c068a4bbbb\tPset_ActuatorTypeHydraulicActuator.InputPressure[Type]\tNUMBER\t\t24\t1\tIfcPressureMeasure\t1\n#\nGROUP\t25\tPset_ActuatorTypeLinearActuation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1168baf7-1580-43e4-9b6c-8b7fe2d465fd\tPset_ActuatorTypeLinearActuation.Force[Type]\tNUMBER\t\t25\t1\tIfcForceMeasure\t1\nPARAM\t5410c333-280e-4e47-a593-a2c910920ab3\tPset_ActuatorTypeLinearActuation.Stroke[Type]\tLENGTH\t\t25\t1\tIfcLengthMeasure\t1\n#\nGROUP\t26\tPset_ActuatorTypePneumaticActuator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc7c58c17-759b-426a-a87f-4c450addc7bc\tPset_ActuatorTypePneumaticActuator.InputFlowrate[Type]\tNUMBER\t\t26\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tab07c83e-40e1-42a0-9f15-1dcb5d8a1ea1\tPset_ActuatorTypePneumaticActuator.InputPressure[Type]\tNUMBER\t\t26\t1\tIfcPressureMeasure\t1\n#\nGROUP\t27\tPset_ActuatorTypeRotationalActuation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcf2d78d6-6651-4c54-9f5b-1c9b088a886a\tPset_ActuatorTypeRotationalActuation.RangeAngle[Type]\tNUMBER\t\t27\t1\tIfcPlaneAngleMeasure\t1\nPARAM\te2eedbea-adf2-44be-b95c-0c23ddea716a\tPset_ActuatorTypeRotationalActuation.Torque[Type]\tNUMBER\t\t27\t1\tIfcTorqueMeasure\t1\n#\nGROUP\t28\tPset_Address\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8cba13ec-dbd4-4e0c-afe9-3fbc9407a857\tPset_Address.AddressLines[Type]\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\nPARAM\t40408af5-dba6-4edf-9d04-5537c87add65\tPset_Address.Country[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\tdb20ae73-236f-4000-8b48-3f244ae9c997\tPset_Address.Description[Type]\tTEXT\t\t28\t1\tIfcText\t1\nPARAM\t6face93f-d2e1-4bbb-ab83-4a7a712d5f0f\tPset_Address.ElectronicMailAddresses[Type]\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\nPARAM\ta85f3688-3b46-437d-aa3e-69deebcd240b\tPset_Address.FacsimileNumbers[Type]\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\nPARAM\t80cf2ac7-5bc8-458e-848d-99d7be0c4373\tPset_Address.InternalLocation[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\tff33441c-4db5-48e8-b38b-7e38a60a60bf\tPset_Address.MessagingIDs[Type]\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\nPARAM\t7921f5f8-d33d-4f4b-8405-e0416b3ef971\tPset_Address.PagerNumber[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\tbe3b7676-e58b-4e46-b802-47654999277f\tPset_Address.PostalBox[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t5b5e7a3e-43f7-4e7d-8909-72d39170edad\tPset_Address.PostalCode[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\tff230598-b451-420a-ad27-277adbb2f834\tPset_Address.Purpose[Type]\tTEXT\t\t28\t1\tPEnum_AddressType\t1\nPARAM\t9034cde4-d98b-4978-8269-7f707eb60c11\tPset_Address.Region[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t128f12c9-b6bc-453c-812c-4ed6813d3eed\tPset_Address.TelephoneNumbers[Type]\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\nPARAM\t5c11d229-0a35-470c-9238-2eec6bc1ed68\tPset_Address.Town[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\teea1dc09-4ed0-4a5a-ad2c-173ce4abd1db\tPset_Address.UserDefinedPurpose[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t62052ea0-cb10-45e6-a3fb-d7bc46811420\tPset_Address.WWWHomePageURL[Type]\tURL\t\t28\t1\tIfcURIReference\t1\n#\nGROUP\t29\tPset_AirSideSystemInformation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t44f8c41e-6d56-4881-b069-4bf03adc27e3\tPset_AirSideSystemInformation.AirflowSensible[Type]\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t3b8993d5-1e26-4812-a30c-36f0163d0495\tPset_AirSideSystemInformation.AirFlowSensible[Type]\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\te4817490-12be-4937-8530-62bdd645b2e9\tPset_AirSideSystemInformation.AirSideSystemDistributionType[Type]\tTEXT\t\t29\t1\tPEnum_AirSideSystemDistributionType\t1\nPARAM\tee014a2c-046d-405d-9ddd-a49c50ca7562\tPset_AirSideSystemInformation.AirSideSystemType[Type]\tTEXT\t\t29\t1\tPEnum_AirSideSystemType\t1\nPARAM\t2edbc3b1-23eb-41ef-b0e7-55ed60c39328\tPset_AirSideSystemInformation.ApplianceDiversity[Type]\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7b6aabde-fac3-4d9f-902b-255005aada36\tPset_AirSideSystemInformation.CoolingTemperatureDelta[Type]\tNUMBER\t\t29\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t6c0a12aa-34fd-419f-aa9c-a423917fe4aa\tPset_AirSideSystemInformation.Description[Type]\tTEXT\t\t29\t1\tIfcText\t1\nPARAM\tda071818-c124-4256-a0eb-e3255c0cf23d\tPset_AirSideSystemInformation.EnergyGainSensible[Type]\tNUMBER\t\t29\t1\tIfcPowerMeasure\t1\nPARAM\t436f82a6-cfd2-4b18-9dee-444dfa21a9ca\tPset_AirSideSystemInformation.EnergyGainTotal[Type]\tNUMBER\t\t29\t1\tIfcPowerMeasure\t1\nPARAM\tf86e1881-4195-4d07-bf30-f0634284fa6a\tPset_AirSideSystemInformation.EnergyLoss[Type]\tNUMBER\t\t29\t1\tIfcPowerMeasure\t1\nPARAM\te1a07ee9-9377-455c-baf2-77d8929c7a2d\tPset_AirSideSystemInformation.FanPower[Type]\tNUMBER\t\t29\t1\tIfcPowerMeasure\t1\nPARAM\t7fbad3f5-e05b-4b9e-a922-c296c30f3c10\tPset_AirSideSystemInformation.HeatingTemperatureDelta[Type]\tNUMBER\t\t29\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t17f2f2bf-2113-4630-8ee6-a741129ae5e0\tPset_AirSideSystemInformation.InfiltrationDiversitySummer[Type]\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf08eaa70-78fb-4ebe-8c86-21567ef76ae8\tPset_AirSideSystemInformation.InfiltrationDiversityWinter[Type]\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\nPARAM\te3a740df-64b2-45eb-af71-ba7ff1c425c9\tPset_AirSideSystemInformation.LightingDiversity[Type]\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t9209f69b-9915-4f75-8b90-7da0dd35b18c\tPset_AirSideSystemInformation.LoadSafetyFactor[Type]\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tad787104-63c4-4cf0-81a7-022a2b13d49d\tPset_AirSideSystemInformation.Name[Type]\tTEXT\t\t29\t1\tIfcLabel\t1\nPARAM\t96c821c9-e636-4a7a-8d95-57ba36924af4\tPset_AirSideSystemInformation.TotalAirflow[Type]\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tb1de67f4-86f6-4071-8d9b-cb3364ec1380\tPset_AirSideSystemInformation.TotalAirFlow[Type]\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t8bbf3471-fcac-42f3-8543-9ef3f22ce0df\tPset_AirSideSystemInformation.Ventilation[Type]\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t30\tPset_AirTerminalBoxPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf8f9f9f7-61c1-4901-bfaa-e3d73205b77b\tPset_AirTerminalBoxPHistory.AirflowCurve[Type]\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\nPARAM\t12df41fa-3929-4ad2-8c70-ab2f73763c7a\tPset_AirTerminalBoxPHistory.AirFlowCurve[Type]\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\nPARAM\t624e5cf6-9e3b-4dbc-b313-f1aa432dab38\tPset_AirTerminalBoxPHistory.AtmosphericPressure[Type]\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\nPARAM\t5eae72de-e913-4243-9eb8-5d1523b1dc73\tPset_AirTerminalBoxPHistory.DamperPosition[Type]\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\nPARAM\ta3bbd32f-b874-4694-8c7d-63c06a81afcb\tPset_AirTerminalBoxPHistory.Sound[Type]\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\n#\nGROUP\t31\tPset_AirTerminalBoxTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc83dafa4-d37b-40da-aadd-abcb9c662f37\tPset_AirTerminalBoxTypeCommon.AirflowRateRange[Type]\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\nPARAM\tce04d8dc-5025-4c69-b220-fe3d07bf9d24\tPset_AirTerminalBoxTypeCommon.AirFlowRateRange[Type]\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\nPARAM\t252a8c5b-08c4-461e-a63f-39b57f79931c\tPset_AirTerminalBoxTypeCommon.AirPressureRange[Type]\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\nPARAM\td7501967-5ed6-4da7-b3d7-97ddc66725e7\tPset_AirTerminalBoxTypeCommon.ArrangementType[Type]\tTEXT\t\t31\t1\tPEnum_AirTerminalBoxArrangementType\t1\nPARAM\te46e37b2-2fab-4f66-9262-9e19eba7fdd6\tPset_AirTerminalBoxTypeCommon.HasFan[Type]\tYESNO\t\t31\t1\tIfcBoolean\t1\nPARAM\t8e484efc-7f40-4abf-81d4-efcc84e3d122\tPset_AirTerminalBoxTypeCommon.HasReturnAir[Type]\tYESNO\t\t31\t1\tIfcBoolean\t1\nPARAM\tf6a7800e-23a7-4430-8e99-e17e3ce2d138\tPset_AirTerminalBoxTypeCommon.HasSoundAttenuator[Type]\tYESNO\t\t31\t1\tIfcBoolean\t1\nPARAM\t3f070853-6d8e-4c3b-a848-d0dcf24c9101\tPset_AirTerminalBoxTypeCommon.HousingThickness[Type]\tLENGTH\t\t31\t1\tIfcLengthMeasure\t1\nPARAM\t41905e8d-1ecd-447c-9689-fe3ccce0a4c6\tPset_AirTerminalBoxTypeCommon.Material[Type]\tMULTILINETEXT\t\t31\t1\tIfcMaterial\t1\nPARAM\t5c8d8af7-4b51-4e7a-9c96-a93cf6fb3bc1\tPset_AirTerminalBoxTypeCommon.NominalAirFlowRate[Type]\tNUMBER\t\t31\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tf10e739b-aa9b-4dc4-a4dd-532acf51d38a\tPset_AirTerminalBoxTypeCommon.NominalDamperDiameter[Type]\tLENGTH\t\t31\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t18950155-5c13-48cb-966e-3c53a1145c07\tPset_AirTerminalBoxTypeCommon.NominalInletAirPressure[Type]\tNUMBER\t\t31\t1\tIfcPressureMeasure\t1\nPARAM\tf9179136-8554-4b20-8451-c3e1ae374f47\tPset_AirTerminalBoxTypeCommon.OperationTemperatureRange[Type]\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\nPARAM\t6820a22f-8f93-44d8-a37a-000019c61efd\tPset_AirTerminalBoxTypeCommon.Reference[Type]\tTEXT\t\t31\t1\tIfcIdentifier\t1\nPARAM\t92dc896f-c203-4d2f-b54f-b4734a404870\tPset_AirTerminalBoxTypeCommon.ReheatType[Type]\tTEXT\t\t31\t1\tPEnum_AirTerminalBoxReheatType\t1\nPARAM\te6a2da12-9c60-4248-a286-8a698c36bb5c\tPset_AirTerminalBoxTypeCommon.ReturnAirFractionRange[Type]\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\nPARAM\tacafa01f-d523-453d-97b8-9901ad2fb0f8\tPset_AirTerminalBoxTypeCommon.Status[Type]\tTEXT\t\t31\t1\tPEnum_ElementStatus\t1\nPARAM\td3bc555c-0c79-46b0-8dbc-41a27f61affd\tPset_AirTerminalBoxTypeCommon.Weight[Type]\tNUMBER\t\t31\t1\tIfcMassMeasure\t1\n#\nGROUP\t32\tPset_AirTerminalOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td6f9816d-caf4-469d-a08b-054c0c0b24dd\tPset_AirTerminalOccurrence.AirFlowRate[Type]\tNUMBER\t\t32\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t8d58635c-7e8c-4976-97cd-ad88f3ac4788\tPset_AirTerminalOccurrence.AirflowType[Type]\tTEXT\t\t32\t1\tPEnum_AirTerminalAirflowType\t1\nPARAM\t218d4a1e-eb78-4cbc-8026-cd9cfa41aacd\tPset_AirTerminalOccurrence.AirFlowType[Type]\tTEXT\t\t32\t1\tPEnum_AirTerminalAirFlowType\t1\nPARAM\t2158d5a4-84ab-447c-900d-431684567d1c\tPset_AirTerminalOccurrence.AirTerminalLocation[Type]\tTEXT\t\t32\t1\tPEnum_AirTerminalLocation\t1\nPARAM\t8a86a30a-ee3d-4d13-a7ef-eb9aa8871119\tPset_AirTerminalOccurrence.Location[Type]\tTEXT\t\t32\t1\tPEnum_AirTerminalLocation\t1\n#\nGROUP\t33\tPset_AirTerminalPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t96873d0a-e8a0-4091-b031-bdc9c590a580\tPset_AirTerminalPHistory.AirFlowRate[Type]\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\nPARAM\t95f55789-b833-4147-bcf6-f610c8474ed4\tPset_AirTerminalPHistory.AirFlowRateHistory[Type]\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\nPARAM\ta040aa73-8a36-4011-84bb-b1bbda93d4af\tPset_AirTerminalPHistory.CenterlineAirVelocity[Type]\tMULTILINETEXT\t\t33\t1\tPropertyTableValue\t1\nPARAM\t7407bb35-acb6-4e3e-b99a-c476ff213573\tPset_AirTerminalPHistory.InductionRatio[Type]\tMULTILINETEXT\t\t33\t1\tPropertyTableValue\t1\nPARAM\t796af4b7-6cb4-4d3d-95e8-b8350e6b289d\tPset_AirTerminalPHistory.NeckAirVelocity[Type]\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\nPARAM\t82a0aa1c-e38e-492a-81c9-53500d5d5f08\tPset_AirTerminalPHistory.PressureDrop[Type]\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\nPARAM\tc3661b7b-3d74-4db1-b5b1-ed54891d7227\tPset_AirTerminalPHistory.SupplyAirTemperatureCooling[Type]\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\nPARAM\taa30a366-f53d-4b34-9e19-eb2f450c8e97\tPset_AirTerminalPHistory.SupplyAirTemperatureHeating[Type]\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\n#\nGROUP\t34\tPset_AirTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3c7aba14-24ef-4ad9-8e7b-7a354ddff00a\tPset_AirTerminalTypeCommon.AirDiffusionPerformanceIndex[Type]\tNUMBER\t\t34\t1\tIfcReal\t1\nPARAM\tc6152384-8858-48f3-a2b2-e839b4439547\tPset_AirTerminalTypeCommon.AirFlowrateRange[Type]\tMULTILINETEXT\t\t34\t1\tPropertyBoundedValue\t1\nPARAM\t78ae5ae4-29a7-4fc9-acd8-b2ff258ed0a5\tPset_AirTerminalTypeCommon.AirFlowRateRange[Type]\tMULTILINETEXT\t\t34\t1\tPropertyBoundedValue\t1\nPARAM\t4ace4150-53c0-4168-bc74-a8df13410677\tPset_AirTerminalTypeCommon.AirFlowrateVersusFlowControlElement[Type]\tMULTILINETEXT\t\t34\t1\tPropertyTableValue\t1\nPARAM\t357e81c2-88b7-422d-85da-b7abbcad1863\tPset_AirTerminalTypeCommon.AirTerminalMountingType[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalMountingType\t1\nPARAM\ta534ab45-04ca-4fcd-a3ec-9837d4276626\tPset_AirTerminalTypeCommon.AirTerminalShape[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalShape\t1\nPARAM\t27ff26fb-4a86-4184-a6d9-8f8f23d08d10\tPset_AirTerminalTypeCommon.CoreSetHorizontal[Type]\tNUMBER\t\t34\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tae33193d-8a2a-4518-9820-ada0f2a2124f\tPset_AirTerminalTypeCommon.CoreSetVertical[Type]\tNUMBER\t\t34\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tadb942fa-20e4-4db3-8aac-922f19c2524e\tPset_AirTerminalTypeCommon.CoreType[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalCoreType\t1\nPARAM\tfe39a623-278d-4657-8b56-6679a48d82b1\tPset_AirTerminalTypeCommon.DischargeDirection[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalDischargeDirection\t1\nPARAM\t93cd3c65-71ce-4f31-9de6-d67fe6720924\tPset_AirTerminalTypeCommon.EffectiveArea[Type]\tAREA\t\t34\t1\tIfcAreaMeasure\t1\nPARAM\td5cf28bd-263b-49fd-b13a-e9ac8bb0029d\tPset_AirTerminalTypeCommon.FaceType[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalFaceType\t1\nPARAM\tbddbd6d3-2e34-4736-b43c-f13794bc8894\tPset_AirTerminalTypeCommon.FinishColor[Type]\tTEXT\t\t34\t1\tIfcLabel\t1\nPARAM\t720dd8e1-ce10-40b1-b08d-31b0257bd10d\tPset_AirTerminalTypeCommon.FinishColour[Type]\tTEXT\t\t34\t1\tIfcLabel\t1\nPARAM\t3bbdd398-e370-470f-a8cd-f6fb4ddac935\tPset_AirTerminalTypeCommon.FinishType[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalFinishType\t1\nPARAM\tf938b371-37e1-4fb1-a2af-1b29e0cf9683\tPset_AirTerminalTypeCommon.FlowControlType[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalFlowControlType\t1\nPARAM\te7697610-cc43-4737-a202-35753fbef94f\tPset_AirTerminalTypeCommon.FlowPattern[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalFlowPattern\t1\nPARAM\td3cbccca-95c2-4a72-9ba9-ffd3f57c6abb\tPset_AirTerminalTypeCommon.HasIntegralControl[Type]\tYESNO\t\t34\t1\tIfcBoolean\t1\nPARAM\t1f078267-97f0-46ba-b4fb-a5fede25df05\tPset_AirTerminalTypeCommon.HasSoundAttenuator[Type]\tYESNO\t\t34\t1\tIfcBoolean\t1\nPARAM\t19361705-422b-4a50-ae0b-69c9ff5d744e\tPset_AirTerminalTypeCommon.HasThermalInsulation[Type]\tYESNO\t\t34\t1\tIfcBoolean\t1\nPARAM\t6764fccb-37c8-4168-b8f4-a99a510bbabd\tPset_AirTerminalTypeCommon.Material[Type]\tMULTILINETEXT\t\t34\t1\tIfcMaterial\t1\nPARAM\taf7beac6-2d79-4640-98da-aea9cfbc89fb\tPset_AirTerminalTypeCommon.MountingType[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalMountingType\t1\nPARAM\tcb66e834-e26f-42ce-8be9-f89394084ce5\tPset_AirTerminalTypeCommon.NeckArea[Type]\tAREA\t\t34\t1\tIfcAreaMeasure\t1\nPARAM\ta5a123a8-fb18-49a0-a02c-3389e1fa36d4\tPset_AirTerminalTypeCommon.NumberOfSlots[Type]\tINTEGER\t\t34\t1\tIfcCountMeasure\t1\nPARAM\tde2c40a1-542e-4071-a17b-db141e31624c\tPset_AirTerminalTypeCommon.Reference[Type]\tTEXT\t\t34\t1\tIfcIdentifier\t1\nPARAM\tacc86224-5ccc-45ce-930e-3a7a2d8544a1\tPset_AirTerminalTypeCommon.Shape[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalShape\t1\nPARAM\t87f5f290-4de3-4ab6-95ed-b98b36733c0e\tPset_AirTerminalTypeCommon.SlotLength[Type]\tLENGTH\t\t34\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t42139f78-48c5-419f-be71-d48051c78220\tPset_AirTerminalTypeCommon.SlotWidth[Type]\tLENGTH\t\t34\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf2010b8f-1638-44fc-8493-3a355691d6ba\tPset_AirTerminalTypeCommon.Status[Type]\tTEXT\t\t34\t1\tPEnum_ElementStatus\t1\nPARAM\tae507bca-9855-4fa1-aa8d-1d9fb7d962cf\tPset_AirTerminalTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t34\t1\tPropertyBoundedValue\t1\nPARAM\t955e3887-f5b2-47c4-ac39-4ef54fa619c4\tPset_AirTerminalTypeCommon.ThrowLength[Type]\tLENGTH\t\t34\t1\tIfcLengthMeasure\t1\nPARAM\tf479cac6-e91a-4e6b-80b8-d55038bb97ac\tPset_AirTerminalTypeCommon.Weight[Type]\tNUMBER\t\t34\t1\tIfcMassMeasure\t1\n#\nGROUP\t35\tPset_AirTerminalTypeRectangular\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1d8773e4-a33a-4361-a5ad-2b79a94cb46c\tPset_AirTerminalTypeRectangular.FaceType[Type]\tTEXT\t\t35\t1\tPEnum_AirTerminalFaceType\t1\n#\nGROUP\t36\tPset_AirTerminalTypeRound\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t66ffdc05-eccb-497a-89ae-c4d263ffa291\tPset_AirTerminalTypeRound.FaceType[Type]\tTEXT\t\t36\t1\tPEnum_AirTerminalFaceType\t1\n#\nGROUP\t37\tPset_AirTerminalTypeSlot\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48174d95-bfd1-4491-b3a0-ff13581297e9\tPset_AirTerminalTypeSlot.NumberOfSlots[Type]\tINTEGER\t\t37\t1\tIfcInteger\t1\nPARAM\ta618647e-08e7-4675-ba6c-fb23fce5b364\tPset_AirTerminalTypeSlot.SlotLength[Type]\tLENGTH\t\t37\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t260bfd8b-29a5-4814-9adf-63b06a688b74\tPset_AirTerminalTypeSlot.SlotWidth[Type]\tLENGTH\t\t37\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t38\tPset_AirTerminalTypeSquare\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teea4aeb3-24d7-4cea-ae4e-d296a0c62024\tPset_AirTerminalTypeSquare.FaceType[Type]\tTEXT\t\t38\t1\tPEnum_AirTerminalFaceType\t1\n#\nGROUP\t39\tPset_AirToAirHeatRecoveryPHist\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8cba2199-8c92-4dd2-93c3-57d97197eb07\tPset_AirToAirHeatRecoveryPHist.AirPressureDropCurves[Type]\tNUMBER\t\t39\t1\tIfcReal\t1\nPARAM\t600d125d-50a1-472d-8626-919f15b89cd7\tPset_AirToAirHeatRecoveryPHist.DefrostTemperatureEffectiveness[Type]\tNUMBER\t\t39\t1\tIfcReal\t1\nPARAM\t2f35f662-7550-4d11-952c-9becd4ae574e\tPset_AirToAirHeatRecoveryPHist.HumidityEffectiveness[Type]\tTEXT\t\t39\t1\tIfcLabel\t1\nPARAM\t8f55995f-df74-4c2e-81f9-c96b7794eac7\tPset_AirToAirHeatRecoveryPHist.LatentHeatTransferRate[Type]\tNUMBER\t\t39\t1\tIfcReal\t1\nPARAM\t4353bfa7-35b3-442c-8f48-8f445e6c242a\tPset_AirToAirHeatRecoveryPHist.SensibleEffectiveness[Type]\tTEXT\t\t39\t1\tIfcLabel\t1\nPARAM\t88335db1-a70a-4678-9b2e-0cbcd4d71542\tPset_AirToAirHeatRecoveryPHist.SensibleEffectivenessTable[Type]\tTEXT\t\t39\t1\tIfcLabel\t1\nPARAM\t86fd60fb-0d8a-40c8-8e29-ef7b17e62431\tPset_AirToAirHeatRecoveryPHist.SensibleHeatTransferRate[Type]\tNUMBER\t\t39\t1\tIfcReal\t1\nPARAM\t061b4776-5c5c-42d4-b9ca-ca909f4bf2a4\tPset_AirToAirHeatRecoveryPHist.TemperatureEffectiveness[Type]\tNUMBER\t\t39\t1\tIfcReal\t1\nPARAM\tffdce9d8-6e77-4c31-917b-d6db73f8fdaa\tPset_AirToAirHeatRecoveryPHist.TotalEffectiveness[Type]\tTEXT\t\t39\t1\tIfcLabel\t1\nPARAM\t8e95525a-9b61-4f88-8f5f-dafa5d9c7910\tPset_AirToAirHeatRecoveryPHist.TotalEffectivenessTable[Type]\tTEXT\t\t39\t1\tIfcLabel\t1\nPARAM\t32bccf57-0080-4bfe-ac09-b5661facaa61\tPset_AirToAirHeatRecoveryPHist.TotalHeatTransferRate[Type]\tNUMBER\t\t39\t1\tIfcReal\t1\n#\nGROUP\t40\tPset_AirToAirHeatRecoveryPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td2ac0291-b82d-4ab9-a8c2-7106b915b98d\tPset_AirToAirHeatRecoveryPHistory.AirPressureDropCurves[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t5c5efbae-9037-4f3e-a230-0262a05da488\tPset_AirToAirHeatRecoveryPHistory.DefrostTemperatureEffectiveness[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t25184252-932b-4e63-9c93-f0a78b06dffd\tPset_AirToAirHeatRecoveryPHistory.HumidityEffectiveness[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t04422297-c70a-436a-9364-d963dd04b243\tPset_AirToAirHeatRecoveryPHistory.LatentHeatTransferRate[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t3c6c3923-b5b7-494d-9b85-cb76fe0bb56d\tPset_AirToAirHeatRecoveryPHistory.SensibleEffectiveness[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t82799c04-44c9-42fc-8bc8-4bf9221f9cb8\tPset_AirToAirHeatRecoveryPHistory.SensibleEffectivenessTable[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t3b0f4ae1-b15d-4960-98d2-d9610702bfab\tPset_AirToAirHeatRecoveryPHistory.SensibleHeatTransferRate[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t70f834ad-1855-402b-bfb2-531b1459c631\tPset_AirToAirHeatRecoveryPHistory.TemperatureEffectiveness[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t288a85ff-427d-4e09-baad-b65dbd46e896\tPset_AirToAirHeatRecoveryPHistory.TotalEffectiveness[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\tfa28b5b3-6948-4036-bafe-2fae4fbf9725\tPset_AirToAirHeatRecoveryPHistory.TotalEffectivenessTable[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\tacf548a5-dd9b-4612-a9a3-bcaa90d3efa9\tPset_AirToAirHeatRecoveryPHistory.TotalHeatTransferRate[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\n#\nGROUP\t41\tPset_AirToAirHeatRecoveryTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tde3220cc-2922-4656-b8f8-87c32607d53c\tPset_AirToAirHeatRecoveryTypeCommon.HasDefrost[Type]\tYESNO\t\t41\t1\tIfcBoolean\t1\nPARAM\tb7c78c55-7e45-4210-a22d-ca0b1aebfbed\tPset_AirToAirHeatRecoveryTypeCommon.HeatTransferType[Type]\tTEXT\t\t41\t1\tPEnum_HeatTransferType\t1\nPARAM\tb5b319d0-80f4-48ba-91fc-881934dd4416\tPset_AirToAirHeatRecoveryTypeCommon.HeatTransferTypeEnum[Type]\tTEXT\t\t41\t1\tPEnum_AirToAirHeatTransferHeatTransferType\t1\nPARAM\tb14878e5-eb17-48f0-94c4-8e0b96d56643\tPset_AirToAirHeatRecoveryTypeCommon.MediaMaterial[Type]\tMULTILINETEXT\t\t41\t1\tIfcMaterial\t1\nPARAM\t721f0cd2-18de-4be7-893d-4f6fdd936d6a\tPset_AirToAirHeatRecoveryTypeCommon.OperationalTemperatureRange[Type]\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\tc01e0944-44e3-49a2-8b2a-cfe923958d43\tPset_AirToAirHeatRecoveryTypeCommon.PrimaryAirflowRateRange[Type]\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\tf2986d96-9467-48d3-baa4-ac46e4c5cb43\tPset_AirToAirHeatRecoveryTypeCommon.PrimaryAirFlowRateRange[Type]\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\t920acd0c-ba24-46fd-b593-096e76f6406b\tPset_AirToAirHeatRecoveryTypeCommon.Reference[Type]\tTEXT\t\t41\t1\tIfcIdentifier\t1\nPARAM\td58ef931-1a5d-4414-9b85-68a424b961b1\tPset_AirToAirHeatRecoveryTypeCommon.SecondaryAirflowRateRange[Type]\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\t1f933ecb-1471-4bdb-8f0a-11e020025e33\tPset_AirToAirHeatRecoveryTypeCommon.SecondaryAirFlowRateRange[Type]\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\tf075d02b-86c0-43bb-918e-1e372a75633f\tPset_AirToAirHeatRecoveryTypeCommon.Status[Type]\tTEXT\t\t41\t1\tPEnum_ElementStatus\t1\nPARAM\tba439d64-63ee-4f8d-8146-61dc8f2f9763\tPset_AirToAirHeatRecoveryTypeCommon.Weight[Type]\tNUMBER\t\t41\t1\tIfcMassMeasure\t1\n#\nGROUP\t42\tPset_AlarmPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t789b27cf-2fa8-4947-965b-b5771913fc93\tPset_AlarmPHistory.Acknowledge[Type]\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\nPARAM\te1bb3cb5-2531-44d4-96d5-3aac407d9185\tPset_AlarmPHistory.Condition[Type]\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\nPARAM\td020b3b1-9f13-451e-a91b-f8ed68cf8f2d\tPset_AlarmPHistory.ConditionHistory[Type]\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\nPARAM\t97b563c4-73f2-40ae-9825-c270e87eff76\tPset_AlarmPHistory.Enabled[Type]\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\nPARAM\t6cd150b9-dacd-49e0-9dcd-6937df6a18c8\tPset_AlarmPHistory.Severity[Type]\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\nPARAM\tf0d66cb0-c887-4f6c-9a57-2292764338ea\tPset_AlarmPHistory.User[Type]\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\nPARAM\t9eaa11ac-57d2-4432-9959-2e38e35451f6\tPset_AlarmPHistory.UserHistory[Type]\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\n#\nGROUP\t43\tPset_AlarmTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td009220e-8f35-4d2a-90da-23c3d0639e68\tPset_AlarmTypeCommon.AlarmCondition[Type]\tMULTILINETEXT\t\t43\t1\tPropertyTableValue\t1\nPARAM\tb6408bb5-527f-4887-adf5-d874a6907716\tPset_AlarmTypeCommon.Condition[Type]\tMULTILINETEXT\t\t43\t1\tPropertyTableValue\t1\nPARAM\tc2f8a834-e8df-46c6-b487-4a9e9db61b75\tPset_AlarmTypeCommon.Reference[Type]\tTEXT\t\t43\t1\tIfcIdentifier\t1\nPARAM\t889efce2-7ad6-430c-993c-2c28084215ba\tPset_AlarmTypeCommon.Status[Type]\tTEXT\t\t43\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t44\tPset_AlignmentCantSegmentCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6ae61cf6-a68a-4a3a-9aec-80b119af8d48\tPset_AlignmentCantSegmentCommon.CantDeficiency[Type]\tLENGTH\t\t44\t1\tIfcLengthMeasure\t1\nPARAM\t8831cf50-7d1f-4a2d-bc51-b1603396ec7e\tPset_AlignmentCantSegmentCommon.CantEquilibrium[Type]\tLENGTH\t\t44\t1\tIfcLengthMeasure\t1\nPARAM\tc0ea5c24-f90c-4ad1-925f-4df880aae38c\tPset_AlignmentCantSegmentCommon.EndSmoothingLength[Type]\tLENGTH\t\t44\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4f4bc7b1-b867-4aee-ac46-6b364b3e2578\tPset_AlignmentCantSegmentCommon.StartSmoothingLength[Type]\tLENGTH\t\t44\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t45\tPset_AlignmentVerticalSegmentCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8f5b3fb1-42a2-4f1b-9a6b-1cef5fe52e16\tPset_AlignmentVerticalSegmentCommon.EndElevation[Type]\tLENGTH\t\t45\t1\tIfcLengthMeasure\t1\nPARAM\td9d2308e-9d99-44cf-a3da-2593213e829c\tPset_AlignmentVerticalSegmentCommon.StartElevation[Type]\tLENGTH\t\t45\t1\tIfcLengthMeasure\t1\n#\nGROUP\t46\tPset_AnalogInput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3e04ef6a-b79b-45ec-943f-cb3f4b1b0666\tPset_AnalogInput.Deadband[Type]\tNUMBER\t\t46\t1\tIfcReal\t1\nPARAM\tba478363-cd40-43cf-a278-7ef5bb7d5540\tPset_AnalogInput.EventEnable[Type]\tTEXT\t\t46\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\td25b0046-fc6f-4f3b-9e9b-7e2774ac74c5\tPset_AnalogInput.HighLimit[Type]\tNUMBER\t\t46\t1\tIfcReal\t1\nPARAM\t59d7538a-00e1-448f-8f7f-8fc56333b63f\tPset_AnalogInput.HighLimitEnable[Type]\tYESNO\t\t46\t1\tIfcBoolean\t1\nPARAM\t1673563b-4d4f-4560-a59a-7d843cd90578\tPset_AnalogInput.LowLimit[Type]\tNUMBER\t\t46\t1\tIfcReal\t1\nPARAM\t1777499f-4f75-45e9-bce0-7fe5b5c320bf\tPset_AnalogInput.LowLimitEnable[Type]\tYESNO\t\t46\t1\tIfcBoolean\t1\nPARAM\t006574aa-5e08-458d-b828-2dbd4eb97228\tPset_AnalogInput.NotifyType[Type]\tTEXT\t\t46\t1\tPEnum_BACnetNotifyType\t1\n#\nGROUP\t47\tPset_AnalogOutput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9c8d4a93-d1d1-4415-be73-1ef8d873025e\tPset_AnalogOutput.Deadband[Type]\tNUMBER\t\t47\t1\tIfcReal\t1\nPARAM\t0536c797-e67d-4d8f-9327-9bab586f3b9e\tPset_AnalogOutput.EventEnable[Type]\tTEXT\t\t47\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\tdb78b964-e67e-4d2b-920c-319bf8fbb21f\tPset_AnalogOutput.HighLimit[Type]\tNUMBER\t\t47\t1\tIfcReal\t1\nPARAM\t881779b8-6c09-42ec-8086-992e7a839719\tPset_AnalogOutput.HighLimitEnable[Type]\tYESNO\t\t47\t1\tIfcBoolean\t1\nPARAM\t794577c4-ace4-44dc-b5ec-21bab28e9c67\tPset_AnalogOutput.LowLimit[Type]\tNUMBER\t\t47\t1\tIfcReal\t1\nPARAM\t98a381b9-ea0a-4920-a3e4-778ef8fbd345\tPset_AnalogOutput.LowLimitEnable[Type]\tYESNO\t\t47\t1\tIfcBoolean\t1\nPARAM\tfd953dab-a76e-4984-b704-632ed2a3cfba\tPset_AnalogOutput.NotifyType[Type]\tTEXT\t\t47\t1\tPEnum_BACnetNotifyType\t1\n#\nGROUP\t48\tPset_AnnotationContourLine\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t21281718-05f9-4bf8-8ffe-fdb63d34e960\tPset_AnnotationContourLine.ContourValue[Type]\tLENGTH\t\t48\t1\tIfcLengthMeasure\t1\n#\nGROUP\t49\tPset_AnnotationLineOfSight\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te9f3da97-b3a2-491e-8f99-61016d82d273\tPset_AnnotationLineOfSight.RoadVisibleDistanceLeft[Type]\tLENGTH\t\t49\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t43418ec5-bfc0-4e10-936d-6aac75c875c8\tPset_AnnotationLineOfSight.RoadVisibleDistanceRight[Type]\tLENGTH\t\t49\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3796ca2e-23ba-49be-af9f-a42cbd1ec5af\tPset_AnnotationLineOfSight.SetbackDistance[Type]\tLENGTH\t\t49\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tacd9a825-e4f9-4ea1-8452-a5c25706cb66\tPset_AnnotationLineOfSight.VisibleAngleLeft[Type]\tANGLE\t\t49\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t58d646f6-286e-476a-96d6-1cfeba9a0612\tPset_AnnotationLineOfSight.VisibleAngleRight[Type]\tANGLE\t\t49\t1\tIfcPositivePlaneAngleMeasure\t1\n#\nGROUP\t50\tPset_AnnotationSurveyArea\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t861e3692-3b61-4c12-81e1-cdf63af42cad\tPset_AnnotationSurveyArea.AccuracyQualityExpected[Type]\tNUMBER\t\t50\t1\tIfcRatioMeasure\t1\nPARAM\t12596c82-b583-412a-af64-caac717788fc\tPset_AnnotationSurveyArea.AccuracyQualityObtained[Type]\tNUMBER\t\t50\t1\tIfcRatioMeasure\t1\nPARAM\t955996e8-8175-4482-9443-6f4fc7f55cd2\tPset_AnnotationSurveyArea.AcquisitionMethod[Type]\tTEXT\t\t50\t1\tPEnum_AcquisitionMethod\t1\n#\nGROUP\t51\tPset_Asset\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t66f9348e-ee32-4764-9444-e1d1747d476a\tPset_Asset.AssetAccountingType[Type]\tTEXT\t\t51\t1\tPEnum_AssetAccountingType\t1\nPARAM\tf45b8f2e-7417-4c53-8a6a-19723397231b\tPset_Asset.AssetInsuranceType[Type]\tTEXT\t\t51\t1\tPEnum_AssetInsuranceType\t1\nPARAM\t66548469-f5b6-45e4-890e-6864ea47984a\tPset_Asset.AssetStatus[Type]\tTEXT\t\t51\t1\tIfcLabel\t1\nPARAM\tb24b1ae6-1d61-4c46-bcdd-878a3ee624db\tPset_Asset.AssetTaxType[Type]\tTEXT\t\t51\t1\tPEnum_AssetTaxType\t1\nPARAM\t63a4b23f-8223-4c99-b427-a78d007ff526\tPset_Asset.AssetUse[Type]\tTEXT\t\t51\t1\tIfcLabel\t1\n#\nGROUP\t52\tPset_AudioVisualAppliancePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t24682d22-8293-4d93-8e3b-cb3b6c73237a\tPset_AudioVisualAppliancePHistory.AudioVolume[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t834a7688-a0d9-4191-a35a-223ebf9b4a29\tPset_AudioVisualAppliancePHistory.AudioVolumeHistory[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t9ec71786-0b16-4122-b8a5-7acdc930c5ef\tPset_AudioVisualAppliancePHistory.MediaContent[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t0b836957-7e1b-487e-b2df-501accbe7274\tPset_AudioVisualAppliancePHistory.MediaSource[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t4aeef646-4a5d-4b1a-84b0-e80b8c8590bb\tPset_AudioVisualAppliancePHistory.MediaSourceHistory[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\tb077dddb-0c77-403c-b0b1-994958f60e03\tPset_AudioVisualAppliancePHistory.PowerState[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\n#\nGROUP\t53\tPset_AudioVisualApplianceTypeAmplifier\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td9505b8b-d7a3-446d-8376-73e37eebfbc5\tPset_AudioVisualApplianceTypeAmplifier.AmplifierType[Type]\tTEXT\t\t53\t1\tPEnum_AudioVisualAmplifierType\t1\nPARAM\t72c94b43-2ea6-494e-969e-c38ee28dac45\tPset_AudioVisualApplianceTypeAmplifier.AudioAmplification[Type]\tMULTILINETEXT\t\t53\t1\tPropertyTableValue\t1\nPARAM\td102d2c2-dcec-45bf-a494-5be0315a6b8d\tPset_AudioVisualApplianceTypeAmplifier.AudioMode[Type]\tMULTILINETEXT\t\t53\t1\tPropertyTableValue\t1\n#\nGROUP\t54\tPset_AudioVisualApplianceTypeCamera\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t206e41e0-1901-49d4-b250-460487744b4b\tPset_AudioVisualApplianceTypeCamera.CameraType[Type]\tTEXT\t\t54\t1\tPEnum_AudioVisualCameraType\t1\nPARAM\t913e19c8-008e-4625-a5f5-6df2f212dc34\tPset_AudioVisualApplianceTypeCamera.IsOutdoors[Type]\tYESNO\t\t54\t1\tIfcBoolean\t1\nPARAM\t1c9464f8-775e-4023-b53e-9c114a8790dc\tPset_AudioVisualApplianceTypeCamera.PanHorizontal[Type]\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\nPARAM\t897edb15-d3de-4067-b10c-170ef59b14e1\tPset_AudioVisualApplianceTypeCamera.PanTiltZoomPreset[Type]\tMULTILINETEXT\t\t54\t1\tPropertyTableValue\t1\nPARAM\tc1326dfa-1f0d-408d-8c90-ef9bdd34a386\tPset_AudioVisualApplianceTypeCamera.PanVertical[Type]\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\nPARAM\t298aae41-cd5b-499a-bae1-9caf05f22ff1\tPset_AudioVisualApplianceTypeCamera.TiltHorizontal[Type]\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\nPARAM\tc781dc2b-a4e7-49fb-8022-4c46943f4bd9\tPset_AudioVisualApplianceTypeCamera.TiltVertical[Type]\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\nPARAM\t03bf1b96-9f5c-4753-bebc-108ce8681486\tPset_AudioVisualApplianceTypeCamera.VideoCaptureInterval[Type]\tMULTILINETEXT\t\t54\t1\tPropertyTableValue\t1\nPARAM\t982fec31-f43e-4a38-b0c0-58b2d0403a12\tPset_AudioVisualApplianceTypeCamera.VideoResolutionHeight[Type]\tINTEGER\t\t54\t1\tIfcInteger\t1\nPARAM\t0e3a6bfb-468c-4998-9061-508407122b1f\tPset_AudioVisualApplianceTypeCamera.VideoResolutionMode[Type]\tMULTILINETEXT\t\t54\t1\tPropertyTableValue\t1\nPARAM\t5dc4c02a-e657-41af-884b-b5fa76bc3106\tPset_AudioVisualApplianceTypeCamera.VideoResolutionWidth[Type]\tINTEGER\t\t54\t1\tIfcInteger\t1\nPARAM\te902a7a2-aaa0-41ac-afe5-4131f8583344\tPset_AudioVisualApplianceTypeCamera.Zoom[Type]\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\n#\nGROUP\t55\tPset_AudioVisualApplianceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t24d212eb-ea9b-4756-8add-c350bf8f5cb2\tPset_AudioVisualApplianceTypeCommon.AudioVolume[Type]\tMULTILINETEXT\t\t55\t1\tPropertyTableValue\t1\nPARAM\t73a1e745-a550-4067-9db4-c49da2970925\tPset_AudioVisualApplianceTypeCommon.MediaSource[Type]\tMULTILINETEXT\t\t55\t1\tPropertyTableValue\t1\nPARAM\t58a9fa26-cb9d-4c01-9df7-3093975974d9\tPset_AudioVisualApplianceTypeCommon.Reference[Type]\tTEXT\t\t55\t1\tIfcIdentifier\t1\nPARAM\t8cec422a-b6b0-4286-852a-8ed7d37d1b82\tPset_AudioVisualApplianceTypeCommon.Status[Type]\tTEXT\t\t55\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t56\tPset_AudioVisualApplianceTypeDisplay\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td7c85f80-c3fa-4bc6-beac-89c3af0ccde3\tPset_AudioVisualApplianceTypeDisplay.AudioMode[Type]\tMULTILINETEXT\t\t56\t1\tPropertyTableValue\t1\nPARAM\tc28712ca-ba18-4286-bc1d-70694e204e52\tPset_AudioVisualApplianceTypeDisplay.Brightness[Type]\tNUMBER\t\t56\t1\tIfcIlluminanceMeasure\t1\nPARAM\t126943c1-67d6-47a0-ae8c-2776cf8b0792\tPset_AudioVisualApplianceTypeDisplay.ContrastRatio[Type]\tNUMBER\t\t56\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t65726703-3a31-4862-bd05-c01669fd5883\tPset_AudioVisualApplianceTypeDisplay.DisplayHeight[Type]\tLENGTH\t\t56\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta2563dbe-f528-47b0-a306-d191682bd87a\tPset_AudioVisualApplianceTypeDisplay.DisplayType[Type]\tTEXT\t\t56\t1\tPEnum_AudioVisualDisplayType\t1\nPARAM\tc14f2677-cdea-4cfb-97a4-e6a1a8e00e87\tPset_AudioVisualApplianceTypeDisplay.DisplayWidth[Type]\tLENGTH\t\t56\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t659bcdca-edd8-4e44-9167-6a96fe8c10b0\tPset_AudioVisualApplianceTypeDisplay.NominalSize[Type]\tLENGTH\t\t56\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2c9d65c2-0518-42d5-86aa-dfc8174b1d13\tPset_AudioVisualApplianceTypeDisplay.RefreshRate[Type]\tNUMBER\t\t56\t1\tIfcFrequencyMeasure\t1\nPARAM\t987e1f91-9b66-4f33-81d4-e0e017c5b5bb\tPset_AudioVisualApplianceTypeDisplay.TouchScreen[Type]\tTEXT\t\t56\t1\tPEnum_AudioVisualDisplayTouchScreen\t1\nPARAM\t28a79c4f-5a40-4a24-8a6a-da24e854ae32\tPset_AudioVisualApplianceTypeDisplay.VideoCaptionMode[Type]\tMULTILINETEXT\t\t56\t1\tPropertyTableValue\t1\nPARAM\t034ade4d-eb42-4e8c-a302-c44b4f6172c7\tPset_AudioVisualApplianceTypeDisplay.VideoResolutionHeight[Type]\tINTEGER\t\t56\t1\tIfcInteger\t1\nPARAM\tad208ae0-2673-4850-857c-d9863e8b6783\tPset_AudioVisualApplianceTypeDisplay.VideoResolutionMode[Type]\tMULTILINETEXT\t\t56\t1\tPropertyTableValue\t1\nPARAM\t4594952e-72af-4903-b8f3-c9befc7b30f8\tPset_AudioVisualApplianceTypeDisplay.VideoResolutionWidth[Type]\tINTEGER\t\t56\t1\tIfcInteger\t1\nPARAM\t8f8932ed-a7b6-49d2-9294-aa1f205fdac9\tPset_AudioVisualApplianceTypeDisplay.VideoScaleMode[Type]\tMULTILINETEXT\t\t56\t1\tPropertyTableValue\t1\n#\nGROUP\t57\tPset_AudioVisualApplianceTypePlayer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6f7cc8a8-a845-4ca5-9064-de3e57061e3b\tPset_AudioVisualApplianceTypePlayer.PlayerMediaEject[Type]\tYESNO\t\t57\t1\tIfcBoolean\t1\nPARAM\t529417b7-4f4e-4bf6-b067-0a3efe5226ca\tPset_AudioVisualApplianceTypePlayer.PlayerMediaFormat[Type]\tMULTILINETEXT\t\t57\t1\tPropertyTableValue\t1\nPARAM\tf3fa1a7f-9c11-4f9d-840e-cf4ab77bfcbb\tPset_AudioVisualApplianceTypePlayer.PlayerType[Type]\tTEXT\t\t57\t1\tPEnum_AudioVisualPlayerType\t1\n#\nGROUP\t58\tPset_AudioVisualApplianceTypeProjector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tad44fb75-0097-411d-8a30-08a80b7da698\tPset_AudioVisualApplianceTypeProjector.ProjectorType[Type]\tTEXT\t\t58\t1\tPEnum_AudioVisualProjectorType\t1\nPARAM\t5f611f00-c006-4191-9342-d9e85f46fe83\tPset_AudioVisualApplianceTypeProjector.VideoCaptionMode[Type]\tMULTILINETEXT\t\t58\t1\tPropertyTableValue\t1\nPARAM\t616e57bf-ca27-46dd-a8f3-6cb203094d25\tPset_AudioVisualApplianceTypeProjector.VideoResolutionHeight[Type]\tINTEGER\t\t58\t1\tIfcInteger\t1\nPARAM\t541a5d83-9aed-4ffb-bc0b-b8b175a39736\tPset_AudioVisualApplianceTypeProjector.VideoResolutionMode[Type]\tMULTILINETEXT\t\t58\t1\tPropertyTableValue\t1\nPARAM\t6aa36305-e7ba-4313-9376-ebd1f04655e2\tPset_AudioVisualApplianceTypeProjector.VideoResolutionWidth[Type]\tINTEGER\t\t58\t1\tIfcInteger\t1\nPARAM\t7e963f85-40a8-4174-bef9-89efd8871666\tPset_AudioVisualApplianceTypeProjector.VideoScaleMode[Type]\tMULTILINETEXT\t\t58\t1\tPropertyTableValue\t1\n#\nGROUP\t59\tPset_AudioVisualApplianceTypeRailwayCommunicationTerminal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8f9a2f24-f37a-4ec7-be6f-8876c7c08958\tPset_AudioVisualApplianceTypeRailwayCommunicationTerminal.RailwayCommunicationTerminalType[Type]\tTEXT\t\t59\t1\tPEnum_RailwayCommunicationTerminalType\t1\n#\nGROUP\t60\tPset_AudioVisualApplianceTypeReceiver\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcd36ed47-12ad-4e39-84ab-f64717efc4cc\tPset_AudioVisualApplianceTypeReceiver.AudioAmplification[Type]\tMULTILINETEXT\t\t60\t1\tPropertyTableValue\t1\nPARAM\td1e98c89-7fd8-4c81-8622-4a467296c8f7\tPset_AudioVisualApplianceTypeReceiver.AudioMode[Type]\tMULTILINETEXT\t\t60\t1\tPropertyTableValue\t1\nPARAM\t2f0a87b5-281f-425f-8f6b-0d4cd0059188\tPset_AudioVisualApplianceTypeReceiver.ReceiverType[Type]\tTEXT\t\t60\t1\tPEnum_AudioVisualReceiverType\t1\n#\nGROUP\t61\tPset_AudioVisualApplianceTypeRecordingEquipment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdf518b4b-fc22-495d-9edf-ded007190026\tPset_AudioVisualApplianceTypeRecordingEquipment.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t61\t1\tPropertyTableValue\t1\nPARAM\t803d78ca-d8dc-4288-808e-53ddf9feb4a4\tPset_AudioVisualApplianceTypeRecordingEquipment.StorageCapacity[Type]\tINTEGER\t\t61\t1\tIfcInteger\t1\n#\nGROUP\t62\tPset_AudioVisualApplianceTypeSpeaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3ff899a6-50cc-4b2a-866a-f64f76195633\tPset_AudioVisualApplianceTypeSpeaker.FrequencyResponse[Type]\tMULTILINETEXT\t\t62\t1\tPropertyTableValue\t1\nPARAM\ta7d0fa4c-b251-46a2-9900-3f59cbf71e3d\tPset_AudioVisualApplianceTypeSpeaker.Impedence[Type]\tNUMBER\t\t62\t1\tIfcFrequencyMeasure\t1\nPARAM\t89dc8226-e45e-4593-9884-aa8b5594e81c\tPset_AudioVisualApplianceTypeSpeaker.SpeakerDriverSize[Type]\tMULTILINETEXT\t\t62\t1\tPropertyTableValue\t1\nPARAM\tdd023905-5ce1-4b42-8c9b-2d690136ec1b\tPset_AudioVisualApplianceTypeSpeaker.SpeakerMounting[Type]\tTEXT\t\t62\t1\tPEnum_AudioVisualSpeakerMounting\t1\nPARAM\t3451f201-add2-418f-9fbd-18fcf9856c9e\tPset_AudioVisualApplianceTypeSpeaker.SpeakerType[Type]\tTEXT\t\t62\t1\tPEnum_AudioVisualSpeakerType\t1\n#\nGROUP\t63\tPset_AudioVisualApplianceTypeTuner\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t08c93275-e034-4f9b-aabc-129abf11b8be\tPset_AudioVisualApplianceTypeTuner.TunerChannel[Type]\tMULTILINETEXT\t\t63\t1\tPropertyTableValue\t1\nPARAM\tb33adf42-bd0f-4aa8-a2d9-903d575667b7\tPset_AudioVisualApplianceTypeTuner.TunerFrequency[Type]\tMULTILINETEXT\t\t63\t1\tPropertyBoundedValue\t1\nPARAM\tddf8a6f3-05ad-4f27-92b0-0f2f5a09b641\tPset_AudioVisualApplianceTypeTuner.TunerMode[Type]\tMULTILINETEXT\t\t63\t1\tPropertyTableValue\t1\nPARAM\t93ba48bf-8272-4f3b-9adc-4c0b70da58b6\tPset_AudioVisualApplianceTypeTuner.TunerType[Type]\tTEXT\t\t63\t1\tPEnum_AudioVisualTunerType\t1\n#\nGROUP\t64\tPset_AxleCountingEquipment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tff633d88-cc82-4584-af51-638fe4b0b70e\tPset_AxleCountingEquipment.AxleCounterResponseTime[Type]\tNUMBER\t\t64\t1\tIfcTimeMeasure\t1\nPARAM\tfe06abfd-f5d6-484f-aefc-df0d89d5ba71\tPset_AxleCountingEquipment.AxleCountingEquipmentType[Type]\tTEXT\t\t64\t1\tPEnum_AxleCountingEquipmentType\t1\nPARAM\t27e630fa-5a0e-425a-a73d-fc2482dc552e\tPset_AxleCountingEquipment.DetectionRange[Type]\tLENGTH\t\t64\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6a228019-d821-4a92-a96c-11b754ff870e\tPset_AxleCountingEquipment.FailureInformation[Type]\tTEXT\t\t64\t1\tIfcText\t1\nPARAM\t33de0c09-a6dc-4eec-b8b8-28b840e4c70c\tPset_AxleCountingEquipment.ImpactParameter[Type]\tNUMBER\t\t64\t1\tIfcAccelerationMeasure\t1\nPARAM\t6405cd04-4be8-4450-a2d6-f63e83ff11a0\tPset_AxleCountingEquipment.InsulationResistance[Type]\tNUMBER\t\t64\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t22139853-beea-44ce-acda-77e3d5a866f7\tPset_AxleCountingEquipment.MaximumVibration[Type]\tNUMBER\t\t64\t1\tIfcFrequencyMeasure\t1\nPARAM\t9ccd42ee-2e79-4d7e-9f77-cd1ca066fe41\tPset_AxleCountingEquipment.NominalWeight[Type]\tNUMBER\t\t64\t1\tIfcMassMeasure\t1\nPARAM\t0d1098af-4ab2-4da9-a1c6-daf68cd443e3\tPset_AxleCountingEquipment.OperationalTemperatureRange[Type]\tMULTILINETEXT\t\t64\t1\tPropertyBoundedValue\t1\nPARAM\t1825c81f-35de-4034-a35d-a64243d11b9e\tPset_AxleCountingEquipment.RatedVoltage[Type]\tMULTILINETEXT\t\t64\t1\tPropertyBoundedValue\t1\n#\nGROUP\t65\tPset_BalanceWeightTensionerDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t22584f2a-5427-49cf-b16f-9ebb93883ef3\tPset_BalanceWeightTensionerDesignCriteria.ReferenceDistanceRopeToPulley[Type]\tMULTILINETEXT\t\t65\t1\tPropertyTableValue\t1\nPARAM\t396e8830-4deb-4916-ae1d-76ee71888dc7\tPset_BalanceWeightTensionerDesignCriteria.ReferenceDistanceTensionerToGround[Type]\tMULTILINETEXT\t\t65\t1\tPropertyTableValue\t1\n#\nGROUP\t66\tPset_BeamCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1b42160f-533f-49cc-b5d0-b6d78cc3acf6\tPset_BeamCommon.FireRating[Type]\tTEXT\t\t66\t1\tIfcLabel\t1\nPARAM\tf0ffce37-da13-4760-8b22-50c4f563d8c5\tPset_BeamCommon.IsExternal[Type]\tYESNO\t\t66\t1\tIfcBoolean\t1\nPARAM\t4005b556-c0ce-47a2-b039-581663e74e83\tPset_BeamCommon.LoadBearing[Type]\tYESNO\t\t66\t1\tIfcBoolean\t1\nPARAM\t5fb543c4-766a-41a8-8004-ad58a52ce0d9\tPset_BeamCommon.Reference[Type]\tTEXT\t\t66\t1\tIfcIdentifier\t1\nPARAM\t830f615a-b959-4990-9fa8-eb684e692a80\tPset_BeamCommon.Roll[Type]\tNUMBER\t\t66\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t6f2fde58-270e-483e-81e1-d55f886cb934\tPset_BeamCommon.Slope[Type]\tNUMBER\t\t66\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tae025be8-bd74-4ac4-8cb5-b736f8b25d78\tPset_BeamCommon.Span[Type]\tLENGTH\t\t66\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc9e4d67d-c2be-439b-8d41-33618302a894\tPset_BeamCommon.Status[Type]\tTEXT\t\t66\t1\tPEnum_ElementStatus\t1\nPARAM\tc27fd2dc-24ef-4500-9f2f-3e9222a27460\tPset_BeamCommon.ThermalTransmittance[Type]\tNUMBER\t\t66\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t67\tPset_BearingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t97ee46cf-ddbb-4ec2-ac52-684aa8de4f1e\tPset_BearingCommon.DisplacementAccommodated[Type]\tMULTILINETEXT\t\t67\t1\tPropertyListValue\t1\nPARAM\t75ae84a8-37ba-4969-8bb6-5b928620f881\tPset_BearingCommon.RotationAccommodated[Type]\tMULTILINETEXT\t\t67\t1\tPropertyListValue\t1\n#\nGROUP\t68\tPset_BerthCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t95b8a5fc-b643-4067-ab09-4fd61e2ba20a\tPset_BerthCommon.AbnormalBerthingFactor[Type]\tNUMBER\t\t68\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t898f6fc3-dd3c-49f2-947b-d41c25f03ba7\tPset_BerthCommon.BerthApproach[Type]\tTEXT\t\t68\t1\tPEnum_BerthApproach\t1\nPARAM\t770872bd-a391-4672-b557-f982935fa0ec\tPset_BerthCommon.BerthingAngle[Type]\tNUMBER\t\t68\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tf3e33ebd-148f-47ba-a96a-0442b8696919\tPset_BerthCommon.BerthingVelocity[Type]\tNUMBER\t\t68\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t884de9ec-f443-4378-807b-b46f03770c4e\tPset_BerthCommon.BerthMode[Type]\tTEXT\t\t68\t1\tPEnum_BerthMode\t1\n#\nGROUP\t69\tPset_BinaryInput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t196165c0-6178-418c-88bf-8f73cd732ae8\tPset_BinaryInput.AckedTransitions[Type]\tTEXT\t\t69\t1\tPEnum_BACnetAckedTransitionsType\t1\nPARAM\tbff42dfe-34ad-4183-bc45-e9423b805768\tPset_BinaryInput.ActiveText[Type]\tTEXT\t\t69\t1\tIfcText\t1\nPARAM\t128fd4e8-ecc7-4fa8-86fe-e1b7456b1ddc\tPset_BinaryInput.EventEnable[Type]\tTEXT\t\t69\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\t982deb6c-439c-41aa-871c-f42b5187f6d0\tPset_BinaryInput.FeedbackValue[Type]\tTEXT\t\t69\t1\tPEnum_BACnetFeedbackValueType\t1\nPARAM\tbf32fb49-e742-4bea-8814-cbc5bbaf2f99\tPset_BinaryInput.InactiveText[Type]\tTEXT\t\t69\t1\tIfcText\t1\nPARAM\tf502e97f-9f51-4133-aa09-1d5f64c967ac\tPset_BinaryInput.MinimumOffTime[Type]\tMULTILINETEXT\t\t69\t1\tIfcLocalTime\t1\nPARAM\t2c29d5c6-6a4f-470e-93ce-277dc60b71b8\tPset_BinaryInput.MinimumOnTime[Type]\tMULTILINETEXT\t\t69\t1\tIfcLocalTime\t1\nPARAM\tca09d749-7262-480f-9213-372ebb97a44d\tPset_BinaryInput.Polarity[Type]\tTEXT\t\t69\t1\tPEnum_PolarityEnum\t1\n#\nGROUP\t70\tPset_BinaryOutput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0ec86560-1870-49d1-92c2-c5445ca5f879\tPset_BinaryOutput.AckedTransitions[Type]\tTEXT\t\t70\t1\tPEnum_BACnetAckedTransitionsType\t1\nPARAM\t7c67aae3-a325-45a9-904f-d6ec732d7fb4\tPset_BinaryOutput.ActiveText[Type]\tTEXT\t\t70\t1\tIfcText\t1\nPARAM\t335416f0-b2e3-4d32-bebc-661c154e5934\tPset_BinaryOutput.AlarmValue[Type]\tTEXT\t\t70\t1\tPEnum_BACnetAlarmValueType\t1\nPARAM\ta56c491d-2220-4999-819b-5a42a3d5dea8\tPset_BinaryOutput.EventEnable[Type]\tTEXT\t\t70\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\td10e485c-efbe-46ec-9259-f9e1ae922811\tPset_BinaryOutput.InactiveText[Type]\tTEXT\t\t70\t1\tIfcText\t1\nPARAM\t7b0f613a-0055-4577-a4ec-47a6256228aa\tPset_BinaryOutput.Polarity[Type]\tTEXT\t\t70\t1\tPEnum_PolarityEnum\t1\n#\nGROUP\t71\tPset_BoilerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc731b9db-a554-4eca-97e4-e5a90b094c00\tPset_BoilerPHistory.AuxiliaryEnergyConsumption[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\t16feae6b-5179-47a2-91a9-0ae29294551a\tPset_BoilerPHistory.CombustionChamberTemperature[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\tac2737fa-d539-4603-be81-f049b7f958c2\tPset_BoilerPHistory.CombustionEfficiency[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\tcaab0eb4-44db-48cd-8269-16ef977ec804\tPset_BoilerPHistory.CombustionTemperature[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\t44000485-feeb-4e83-82a1-c9b577251a9a\tPset_BoilerPHistory.EnergySourceConsumption[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\td1b302dd-69c3-46e5-a047-19e9d93ff821\tPset_BoilerPHistory.Load[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\td1793c3f-5aed-4ff4-9e8a-20d29f5d5ddc\tPset_BoilerPHistory.OperationalEfficiency[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\t56c8eab8-d321-4b44-ae83-8e07d742ad34\tPset_BoilerPHistory.PartLoadRatio[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\t40bbc244-7e7d-4dc5-a4d5-3827d16b54b7\tPset_BoilerPHistory.PrimaryEnergyConsumption[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\tf9c5e53d-d24e-4c48-9a20-a6099df794e5\tPset_BoilerPHistory.WorkingPressure[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\tff9d6017-187b-4dcd-9fa9-7ab21cf4eb29\tPset_BoilerPHistory.WorkingPressureHistory[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\n#\nGROUP\t72\tPset_BoilerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4e7ee0fe-49e7-49ae-a285-7551f427cf55\tPset_BoilerTypeCommon.EnergySource[Type]\tTEXT\t\t72\t1\tPEnum_EnergySource\t1\nPARAM\t17e7b290-2fc3-4cf2-bd3c-28b44c6dc22b\tPset_BoilerTypeCommon.HeatOutput[Type]\tMULTILINETEXT\t\t72\t1\tPropertyListValue\t1\nPARAM\t07a0e22d-5029-4417-bcd9-efd313bacf83\tPset_BoilerTypeCommon.HeatTransferSurfaceArea[Type]\tAREA\t\t72\t1\tIfcAreaMeasure\t1\nPARAM\t00223468-6803-476d-bdee-8771a33a1a35\tPset_BoilerTypeCommon.IsWaterStorageHeater[Type]\tYESNO\t\t72\t1\tIfcBoolean\t1\nPARAM\t68293f88-7942-4662-a76c-83f977391594\tPset_BoilerTypeCommon.Material[Type]\tMULTILINETEXT\t\t72\t1\tIfcMaterial\t1\nPARAM\t05f9fa43-cc17-47d5-87b8-8e9568b6fa6f\tPset_BoilerTypeCommon.NominalEfficiency[Type]\tMULTILINETEXT\t\t72\t1\tPropertyListValue\t1\nPARAM\t10b17e6b-c08e-468e-a1da-09ff51db7e7f\tPset_BoilerTypeCommon.NominalEnergyConsumption[Type]\tNUMBER\t\t72\t1\tIfcPowerMeasure\t1\nPARAM\t8420b0ec-f2cc-4813-b8b6-c59bc05bce72\tPset_BoilerTypeCommon.NominalPartLoadRatio[Type]\tMULTILINETEXT\t\t72\t1\tPropertyBoundedValue\t1\nPARAM\t0cafc4ce-9783-4693-a095-e901f89865fd\tPset_BoilerTypeCommon.OperatingMode[Type]\tTEXT\t\t72\t1\tPEnum_BoilerOperatingMode\t1\nPARAM\ta6d69999-2690-451b-bc2d-e5b7b8b44954\tPset_BoilerTypeCommon.OutletTemperatureRange[Type]\tMULTILINETEXT\t\t72\t1\tPropertyBoundedValue\t1\nPARAM\t14b49da2-fa4a-4ffc-aed1-076daa46066f\tPset_BoilerTypeCommon.PartialLoadEfficiencyCurves[Type]\tMULTILINETEXT\t\t72\t1\tPropertyTableValue\t1\nPARAM\te107239b-357c-446c-b830-a485f94e382d\tPset_BoilerTypeCommon.PressureRating[Type]\tNUMBER\t\t72\t1\tIfcPressureMeasure\t1\nPARAM\t0615fe40-a9a3-40dc-87f4-d960cd2ed599\tPset_BoilerTypeCommon.Reference[Type]\tTEXT\t\t72\t1\tIfcIdentifier\t1\nPARAM\t0cd8fc41-59c9-449e-9efb-5f3a55db4b6f\tPset_BoilerTypeCommon.Status[Type]\tTEXT\t\t72\t1\tPEnum_ElementStatus\t1\nPARAM\t792eae9e-f1af-4d93-8528-bb0cb629b7d1\tPset_BoilerTypeCommon.WaterInletTemperatureRange[Type]\tMULTILINETEXT\t\t72\t1\tPropertyBoundedValue\t1\nPARAM\ta02adb6e-bc1e-4d4b-8604-6f728715390f\tPset_BoilerTypeCommon.WaterStorageCapacity[Type]\tVOLUME\t\t72\t1\tIfcVolumeMeasure\t1\nPARAM\t2dafc90a-bd35-447f-86fd-0612e3e6da95\tPset_BoilerTypeCommon.Weight[Type]\tNUMBER\t\t72\t1\tIfcMassMeasure\t1\n#\nGROUP\t73\tPset_BoilerTypeSteam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7cc309bc-1d97-4d70-a604-b6034a9eea70\tPset_BoilerTypeSteam.HeatOutput[Type]\tMULTILINETEXT\t\t73\t1\tPropertyTableValue\t1\nPARAM\t09616851-5a6b-4740-9b03-e2c555051106\tPset_BoilerTypeSteam.MaximumOutletPressure[Type]\tTEXT\t\t73\t1\tIfcLabel\t1\nPARAM\t8678fec1-d7d6-442c-a32a-653c341cd70e\tPset_BoilerTypeSteam.NominalEfficiency[Type]\tMULTILINETEXT\t\t73\t1\tPropertyTableValue\t1\nPARAM\t784b19a8-bafb-4347-b78d-b4f2d47ad70a\tPset_BoilerTypeSteam.NominalEfficiencyTable[Type]\tMULTILINETEXT\t\t73\t1\tPropertyTableValue\t1\n#\nGROUP\t74\tPset_BoilerTypeWater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t060fc468-8dd7-45de-9f72-99c37b7de46d\tPset_BoilerTypeWater.HeatOutput[Type]\tMULTILINETEXT\t\t74\t1\tPropertyTableValue\t1\nPARAM\tcc538db3-a102-4f74-a8b3-863792d5fd04\tPset_BoilerTypeWater.NominalEfficiency[Type]\tMULTILINETEXT\t\t74\t1\tPropertyTableValue\t1\n#\nGROUP\t75\tPset_BoreholeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1fac041c-6408-4057-8d18-3b865f802d89\tPset_BoreholeCommon.BoreholeState[Type]\tTEXT\t\t75\t1\tPEnum_BoreholeState\t1\nPARAM\ta140c315-f1d3-4f54-8d1a-3ce39945fcf8\tPset_BoreholeCommon.CapDepth[Type]\tLENGTH\t\t75\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0bc0c3cc-4017-4495-8aa8-b41b2bb1fe07\tPset_BoreholeCommon.CapMaterial[Type]\tTEXT\t\t75\t1\tIfcLabel\t1\nPARAM\t29f52f68-82fc-4647-bffb-e4f43c6f58b8\tPset_BoreholeCommon.FillingDepth[Type]\tLENGTH\t\t75\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6c6148cc-a326-4c38-b9a5-888214d5524b\tPset_BoreholeCommon.FillingMaterial[Type]\tTEXT\t\t75\t1\tIfcLabel\t1\nPARAM\t9b9425b9-08e7-4639-a649-c5ef2a33a7cd\tPset_BoreholeCommon.GroundwaterDepth[Type]\tLENGTH\t\t75\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta5bea209-b9a8-4607-942a-c177f7adc5aa\tPset_BoreholeCommon.LiningMaterial[Type]\tTEXT\t\t75\t1\tIfcLabel\t1\nPARAM\t182f693f-f7d1-483c-bfea-6c186219fe62\tPset_BoreholeCommon.LiningThickness[Type]\tLENGTH\t\t75\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t76\tPset_BoundedCourseCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te94b84de-4cd6-4f11-a2b3-b12566bf52db\tPset_BoundedCourseCommon.SpreadingRate[Type]\tNUMBER\t\t76\t1\tIfcNumericMeasure\t1\n#\nGROUP\t77\tPset_BreakwaterCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t663859f4-cb36-4345-b5a3-4772cdff547c\tPset_BreakwaterCommon.Elevation[Type]\tLENGTH\t\t77\t1\tIfcLengthMeasure\t1\nPARAM\tfa417172-5597-4954-9fa5-e708f94cc378\tPset_BreakwaterCommon.StructuralStyle[Type]\tTEXT\t\t77\t1\tIfcLabel\t1\n#\nGROUP\t78\tPset_BridgeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc0290c9f-ebe0-458e-bd4d-ec1b5f0457bc\tPset_BridgeCommon.StructureIndicator[Type]\tTEXT\t\t78\t1\tPEnum_StructureIndicator\t1\n#\nGROUP\t79\tPset_BuildingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te55584f1-325c-41bd-ae12-4e01200bc15e\tPset_BuildingCommon.AncillaryFireUse[Type]\tTEXT\t\t79\t1\tIfcLabel\t1\nPARAM\t50cd0a23-eecc-4544-916f-5099d3d7f9be\tPset_BuildingCommon.BuildingID[Type]\tTEXT\t\t79\t1\tIfcIdentifier\t1\nPARAM\t4e5bb594-6e76-4d37-8743-57536a79fc44\tPset_BuildingCommon.ConstructionMethod[Type]\tTEXT\t\t79\t1\tIfcLabel\t1\nPARAM\t2f767d5b-f2fa-4828-bdf3-a745c1053ba9\tPset_BuildingCommon.FireProtectionClass[Type]\tTEXT\t\t79\t1\tIfcLabel\t1\nPARAM\ta3657df0-3def-4fa6-8fde-7f20f655e1ea\tPset_BuildingCommon.GrossAreaPlanned[Type]\tAREA\t\t79\t1\tIfcAreaMeasure\t1\nPARAM\t17177d15-bafb-4eb8-84b5-76369599ce93\tPset_BuildingCommon.GrossPlannedArea[Type]\tAREA\t\t79\t1\tIfcAreaMeasure\t1\nPARAM\t227c295b-b984-4e85-9e61-41634a935a40\tPset_BuildingCommon.IsLandmarked[Type]\tYESNO\t\t79\t1\tIfcLogical\t1\nPARAM\tf8d69b6d-0bb6-470c-9f34-9097b130cff2\tPset_BuildingCommon.IsPermanentID[Type]\tYESNO\t\t79\t1\tIfcBoolean\t1\nPARAM\t6fbe288c-6522-4e1b-ae8c-652c828e8f4d\tPset_BuildingCommon.MainFireUse[Type]\tTEXT\t\t79\t1\tIfcLabel\t1\nPARAM\te774616b-80ef-45ef-9ca9-641f4d8c96da\tPset_BuildingCommon.NetPlannedArea[Type]\tAREA\t\t79\t1\tIfcAreaMeasure\t1\nPARAM\t80ca501b-c7a6-4648-89d1-b08f92659b5e\tPset_BuildingCommon.NumberOfStoreys[Type]\tINTEGER\t\t79\t1\tIfcCountMeasure\t1\nPARAM\t4609f5af-7106-47b5-936b-264cb2249e69\tPset_BuildingCommon.OccupancyType[Type]\tTEXT\t\t79\t1\tIfcLabel\t1\nPARAM\t980db421-47bb-479b-9371-6620856568e7\tPset_BuildingCommon.Reference[Type]\tTEXT\t\t79\t1\tIfcIdentifier\t1\nPARAM\t0e9d4b20-ea69-4d22-8381-4b154d8fcd32\tPset_BuildingCommon.SprinklerProtection[Type]\tYESNO\t\t79\t1\tIfcBoolean\t1\nPARAM\t87508413-7241-4a69-8f84-65b5ac41b367\tPset_BuildingCommon.SprinklerProtectionAutomatic[Type]\tYESNO\t\t79\t1\tIfcBoolean\t1\nPARAM\tfafb885e-125e-4d33-86c2-7d134d948148\tPset_BuildingCommon.YearOfConstruction[Type]\tTEXT\t\t79\t1\tIfcLabel\t1\nPARAM\t4f6cf9ae-bb41-482d-a507-f74c16a0c381\tPset_BuildingCommon.YearOfLastRefurbishment[Type]\tTEXT\t\t79\t1\tIfcLabel\t1\n#\nGROUP\t80\tPset_BuildingElementProxyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t139a5d38-2534-4558-982b-afacf18bee06\tPset_BuildingElementProxyCommon.FireRating[Type]\tTEXT\t\t80\t1\tIfcLabel\t1\nPARAM\ta4995f86-0382-4c07-a5b2-44f8718b9342\tPset_BuildingElementProxyCommon.IsExternal[Type]\tYESNO\t\t80\t1\tIfcBoolean\t1\nPARAM\t7884b9d5-9f0d-4836-93c1-01e493a4b2d5\tPset_BuildingElementProxyCommon.LoadBearing[Type]\tYESNO\t\t80\t1\tIfcBoolean\t1\nPARAM\tb51681ee-5817-4e01-9068-69d0103bf375\tPset_BuildingElementProxyCommon.Reference[Type]\tTEXT\t\t80\t1\tIfcIdentifier\t1\nPARAM\tbc59e591-a230-463d-af46-5dd8c97eb9b0\tPset_BuildingElementProxyCommon.Status[Type]\tTEXT\t\t80\t1\tPEnum_ElementStatus\t1\nPARAM\t24f7fefb-a1e2-41ca-b013-6321fb4ef785\tPset_BuildingElementProxyCommon.ThermalTransmittance[Type]\tNUMBER\t\t80\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t81\tPset_BuildingElementProxyProvisionForVoid\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48a80664-169a-4449-b086-119016c5d090\tPset_BuildingElementProxyProvisionForVoid.Depth[Type]\tLENGTH\t\t81\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t59202f8f-4301-457f-ba75-aa9529930f5d\tPset_BuildingElementProxyProvisionForVoid.Diameter[Type]\tLENGTH\t\t81\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0417c50e-b70e-4092-9163-a18a5526e6a6\tPset_BuildingElementProxyProvisionForVoid.Height[Type]\tLENGTH\t\t81\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc28bc8f1-56af-4a8c-b424-e67fdb7488e6\tPset_BuildingElementProxyProvisionForVoid.Shape[Type]\tTEXT\t\t81\t1\tIfcLabel\t1\nPARAM\t89557a4a-4656-490f-b529-b113dbde7372\tPset_BuildingElementProxyProvisionForVoid.System[Type]\tTEXT\t\t81\t1\tIfcLabel\t1\nPARAM\td4fba4e8-a7ab-4869-bc6c-5f1524a2d6b6\tPset_BuildingElementProxyProvisionForVoid.Width[Type]\tLENGTH\t\t81\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t82\tPset_BuildingStoreyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teb2ce09f-1184-431c-9713-bc459189ea02\tPset_BuildingStoreyCommon.AboveGround[Type]\tYESNO\t\t82\t1\tIfcLogical\t1\nPARAM\t67076e25-d3d9-4f2b-83b2-7fe3f3920365\tPset_BuildingStoreyCommon.ElevationOfFFLRelative[Type]\tLENGTH\t\t82\t1\tIfcLengthMeasure\t1\nPARAM\t0cb4c6f6-7bbd-4f72-8b85-f773b5da507c\tPset_BuildingStoreyCommon.ElevationOfSSLRelative[Type]\tLENGTH\t\t82\t1\tIfcLengthMeasure\t1\nPARAM\t3a602985-9b93-4123-97e8-92a4359494a3\tPset_BuildingStoreyCommon.EntranceLevel[Type]\tYESNO\t\t82\t1\tIfcBoolean\t1\nPARAM\t5ae7fa2b-d22e-42cf-8540-1a7a8644b992\tPset_BuildingStoreyCommon.GrossAreaPlanned[Type]\tAREA\t\t82\t1\tIfcAreaMeasure\t1\nPARAM\tc0a0347d-85f9-4437-a727-a0a7da77341a\tPset_BuildingStoreyCommon.GrossPlannedArea[Type]\tAREA\t\t82\t1\tIfcAreaMeasure\t1\nPARAM\t27dcd7da-24a2-4d57-adf5-7ab870994b90\tPset_BuildingStoreyCommon.LoadBearingCapacity[Type]\tNUMBER\t\t82\t1\tIfcPlanarForceMeasure\t1\nPARAM\tba72d71e-df74-4745-a011-d5c441074b84\tPset_BuildingStoreyCommon.NetAreaPlanned[Type]\tAREA\t\t82\t1\tIfcAreaMeasure\t1\nPARAM\t1ef9f7d5-e3ad-4425-8ea2-ff1e005a3c27\tPset_BuildingStoreyCommon.NetPlannedArea[Type]\tAREA\t\t82\t1\tIfcAreaMeasure\t1\nPARAM\t3221479f-0be8-4b3b-bed2-a5869a167f3b\tPset_BuildingStoreyCommon.Reference[Type]\tTEXT\t\t82\t1\tIfcIdentifier\t1\nPARAM\t6ffaf186-f421-4912-a567-22e4c47ba285\tPset_BuildingStoreyCommon.SprinklerProtection[Type]\tYESNO\t\t82\t1\tIfcBoolean\t1\nPARAM\t9ee0a8df-1db5-407c-875c-ad90c13c8078\tPset_BuildingStoreyCommon.SprinklerProtectionAutomatic[Type]\tYESNO\t\t82\t1\tIfcBoolean\t1\n#\nGROUP\t83\tPset_BuildingSystemCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a256f3b-1395-4d3c-91eb-88945489b812\tPset_BuildingSystemCommon.Reference[Type]\tTEXT\t\t83\t1\tIfcIdentifier\t1\n#\nGROUP\t84\tPset_BuildingUse\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td3d112aa-cf9f-4d5f-96e5-8a5d0bcbf4a5\tPset_BuildingUse.MarketCategory[Type]\tTEXT\t\t84\t1\tIfcLabel\t1\nPARAM\t5ac6b455-31b3-4f15-8bca-5e4116776aa7\tPset_BuildingUse.MarketSubCategoriesAvailableFuture[Type]\tMULTILINETEXT\t\t84\t1\tPropertyListValue\t1\nPARAM\tbf34cb99-5dfc-4c19-acf7-012dfbc43e39\tPset_BuildingUse.MarketSubCategoriesAvailableNow[Type]\tMULTILINETEXT\t\t84\t1\tPropertyListValue\t1\nPARAM\t3e0e50fd-cdf4-4e34-90c1-fa5617e7d6ea\tPset_BuildingUse.MarketSubCategory[Type]\tTEXT\t\t84\t1\tIfcLabel\t1\nPARAM\t23e6f432-c9f2-49d1-b6be-10a96347b72e\tPset_BuildingUse.NarrativeText[Type]\tTEXT\t\t84\t1\tIfcText\t1\nPARAM\t1fb6b646-48d6-498c-afed-0861b075d51b\tPset_BuildingUse.PlanningControlStatus[Type]\tTEXT\t\t84\t1\tIfcLabel\t1\nPARAM\tee02336d-1f6c-42d5-af73-7960a6dd1dbb\tPset_BuildingUse.RentalRatesInCategoryFuture[Type]\tMULTILINETEXT\t\t84\t1\tPropertyBoundedValue\t1\nPARAM\t1f7bedbc-da2d-4eb2-936d-12103dfeada0\tPset_BuildingUse.RentalRatesInCategoryNow[Type]\tMULTILINETEXT\t\t84\t1\tPropertyBoundedValue\t1\nPARAM\tbcacf575-50e0-4445-a73b-b9bc4889d0d3\tPset_BuildingUse.TenureModesAvailableFuture[Type]\tMULTILINETEXT\t\t84\t1\tPropertyListValue\t1\nPARAM\t26bb563e-f368-486b-979f-08f508a12815\tPset_BuildingUse.TenureModesAvailableNow[Type]\tMULTILINETEXT\t\t84\t1\tPropertyListValue\t1\nPARAM\t8a0fc85d-1810-408f-8cf8-be1500118de5\tPset_BuildingUse.VacancyRateInCategoryFuture[Type]\tNUMBER\t\t84\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta3baf2d8-d221-4bd3-bd26-51dda3028ed9\tPset_BuildingUse.VacancyRateInCategoryNow[Type]\tNUMBER\t\t84\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t85\tPset_BuildingUseAdjacent\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t768892e1-b40a-4848-9b99-d13bc56b36ac\tPset_BuildingUseAdjacent.MarketCategory[Type]\tTEXT\t\t85\t1\tIfcLabel\t1\nPARAM\t09db3dab-7163-4cca-97a1-584db4e913da\tPset_BuildingUseAdjacent.MarketSubCategory[Type]\tTEXT\t\t85\t1\tIfcLabel\t1\nPARAM\t194665c1-d805-4fab-9075-fabd9ef524d8\tPset_BuildingUseAdjacent.NarrativeText[Type]\tTEXT\t\t85\t1\tIfcText\t1\nPARAM\tc7eea947-ae1a-4c18-9678-efa4a9107bd7\tPset_BuildingUseAdjacent.PlanningControlStatus[Type]\tTEXT\t\t85\t1\tIfcLabel\t1\n#\nGROUP\t86\tPset_BuildingWaterStorage\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t864133f9-ce3f-4613-b9c4-760ddc6093ad\tPset_BuildingWaterStorage.OneDayCoolingTowerMakeupWater[Type]\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\nPARAM\t4f550641-5478-4555-96f2-b54c3d0f0b4e\tPset_BuildingWaterStorage.OneDayEssentialWater[Type]\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\nPARAM\t192e28e9-1ead-4208-a167-d823e07aa268\tPset_BuildingWaterStorage.OneDayPotableWater[Type]\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\nPARAM\tefa8d948-485d-49b2-a5a1-8ef50e307ab6\tPset_BuildingWaterStorage.OneDayProcessOrProductionWater[Type]\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\nPARAM\t55099d26-167a-4f86-9851-5c4eba5dae3d\tPset_BuildingWaterStorage.WaterStorageRatePerPerson[Type]\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t87\tPset_BuiltSystemRailwayLine\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tef74fece-3e9f-44cd-bb3d-7259917dad3c\tPset_BuiltSystemRailwayLine.IsElectrified[Type]\tYESNO\t\t87\t1\tIfcBoolean\t1\nPARAM\t798df79d-f4ca-4a3b-a7c1-199708030e1e\tPset_BuiltSystemRailwayLine.LineCharacteristic[Type]\tTEXT\t\t87\t1\tPEnum_LineCharacteristic\t1\nPARAM\t7eaada14-e4fd-42ea-9150-9437ba361468\tPset_BuiltSystemRailwayLine.LineID[Type]\tTEXT\t\t87\t1\tIfcIdentifier\t1\n#\nGROUP\t88\tPset_BuiltSystemRailwayTrack\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6d1b324d-89ad-4f41-a4fb-445fe31d323c\tPset_BuiltSystemRailwayTrack.TrackCharacteristic[Type]\tTEXT\t\t88\t1\tPEnum_TrackCharacteristic\t1\nPARAM\tc7b43b6a-b63c-4f34-8258-b71f575c4681\tPset_BuiltSystemRailwayTrack.TrackID[Type]\tTEXT\t\t88\t1\tIfcIdentifier\t1\nPARAM\ta59d1c50-eada-4be2-b75a-ed47c39e5a92\tPset_BuiltSystemRailwayTrack.TrackNumber[Type]\tTEXT\t\t88\t1\tIfcIdentifier\t1\nPARAM\t0de6d30b-24a7-456c-a8c0-323dd806bfa1\tPset_BuiltSystemRailwayTrack.TrackUsage[Type]\tTEXT\t\t88\t1\tPEnum_TrackUsage\t1\n#\nGROUP\t89\tPset_BurnerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbcaa019f-e18d-46d3-8f5a-0cc199182f91\tPset_BurnerTypeCommon.EnergySource[Type]\tTEXT\t\t89\t1\tPEnum_EnergySource\t1\nPARAM\tb21fa232-644f-4400-b448-3e9d34338262\tPset_BurnerTypeCommon.Reference[Type]\tTEXT\t\t89\t1\tIfcIdentifier\t1\nPARAM\t0fddd35b-059c-4315-b887-df1b5fc434b7\tPset_BurnerTypeCommon.Status[Type]\tTEXT\t\t89\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t90\tPset_CableCarrierFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9cbe5a9b-4a6f-4d80-866d-308f4180e235\tPset_CableCarrierFittingTypeCommon.Reference[Type]\tTEXT\t\t90\t1\tIfcIdentifier\t1\nPARAM\t160b02e5-5b41-4d52-9af5-87d05c817c38\tPset_CableCarrierFittingTypeCommon.Status[Type]\tTEXT\t\t90\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t91\tPset_CableCarrierSegmentTypeCableLadderSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taac8c03f-95a3-4f6f-8dec-71f3b33c2ee6\tPset_CableCarrierSegmentTypeCableLadderSegment.LadderConfiguration[Type]\tTEXT\t\t91\t1\tIfcText\t1\nPARAM\t22dc51b7-9e86-4587-beb2-d652ea9d0f00\tPset_CableCarrierSegmentTypeCableLadderSegment.NominalHeight[Type]\tLENGTH\t\t91\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t742ffca9-bc98-4c16-befa-a817b2206342\tPset_CableCarrierSegmentTypeCableLadderSegment.NominalLength[Type]\tLENGTH\t\t91\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taca286fc-7f43-4ea4-85ce-af884283550d\tPset_CableCarrierSegmentTypeCableLadderSegment.NominalWidth[Type]\tLENGTH\t\t91\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t92\tPset_CableCarrierSegmentTypeCableTraySegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6d4766cb-2d83-44b2-96fe-4e0f8395d65e\tPset_CableCarrierSegmentTypeCableTraySegment.HasCover[Type]\tYESNO\t\t92\t1\tIfcBoolean\t1\nPARAM\t96cbbdd3-85ad-4395-979f-16ca0e56d5a6\tPset_CableCarrierSegmentTypeCableTraySegment.NominalHeight[Type]\tLENGTH\t\t92\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t65f5a20e-e828-4b1f-bf5f-2b0ac829ab40\tPset_CableCarrierSegmentTypeCableTraySegment.NominalLength[Type]\tLENGTH\t\t92\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2d7f1464-e09b-45a8-8129-b48bd34635b9\tPset_CableCarrierSegmentTypeCableTraySegment.NominalWidth[Type]\tLENGTH\t\t92\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t93\tPset_CableCarrierSegmentTypeCableTrunkingSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4f7ff295-5a95-4193-9699-da06c586fac0\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NominalHeight[Type]\tLENGTH\t\t93\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb797e6a5-f3db-4d02-aa5d-408eaa14a73e\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NominalLength[Type]\tLENGTH\t\t93\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te2d79fce-4e8e-44a4-8202-770c5df61898\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NominalWidth[Type]\tLENGTH\t\t93\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfbff76cd-9e20-48e5-a664-191f9d9c3240\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NumberOfCompartments[Type]\tINTEGER\t\t93\t1\tIfcCountMeasure\t1\n#\nGROUP\t94\tPset_CableCarrierSegmentTypeCatenaryWire\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfd6fb4b9-f6c7-45fb-ae37-3e9169f181f9\tPset_CableCarrierSegmentTypeCatenaryWire.ACResistance[Type]\tNUMBER\t\t94\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t8454e853-caa3-40a9-9fcd-99a7dbb8b1a9\tPset_CableCarrierSegmentTypeCatenaryWire.CatenaryWireType[Type]\tTEXT\t\t94\t1\tIfcLabel\t1\nPARAM\td11c4201-1d12-467d-89b7-ecfabfbb9bc9\tPset_CableCarrierSegmentTypeCatenaryWire.CurrentCarryingCapacity[Type]\tNUMBER\t\t94\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t943da812-0db4-4393-b161-9e0ac16d6921\tPset_CableCarrierSegmentTypeCatenaryWire.DCResistance[Type]\tNUMBER\t\t94\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t41916026-2a7b-434f-b436-b30c684158ab\tPset_CableCarrierSegmentTypeCatenaryWire.LayRatio[Type]\tNUMBER\t\t94\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t50abb522-6f46-4a2e-bb4c-0018d4ec29c7\tPset_CableCarrierSegmentTypeCatenaryWire.MassPerLength[Type]\tNUMBER\t\t94\t1\tIfcMassPerLengthMeasure\t1\nPARAM\te33fb8a3-91bc-48e4-a4d1-8452547beebb\tPset_CableCarrierSegmentTypeCatenaryWire.MechanicalTension[Type]\tNUMBER\t\t94\t1\tIfcForceMeasure\t1\nPARAM\te26fe79d-6570-43cf-b9f7-2d53ee3afa25\tPset_CableCarrierSegmentTypeCatenaryWire.PhysicalDescriptionReference[Type]\tMULTILINETEXT\t\t94\t1\tIfcExternalReference\t1\nPARAM\t2bb1dfd5-c2c6-4890-b962-b5a8d7415a0a\tPset_CableCarrierSegmentTypeCatenaryWire.StrandingMethod[Type]\tTEXT\t\t94\t1\tIfcLabel\t1\nPARAM\t6bd2fa9c-6dfd-430b-949e-3e00e7e92775\tPset_CableCarrierSegmentTypeCatenaryWire.TensileStrength[Type]\tNUMBER\t\t94\t1\tIfcPressureMeasure\t1\nPARAM\t699389ab-91f9-4204-bc54-d9bc2a599e5a\tPset_CableCarrierSegmentTypeCatenaryWire.ThermalExpansionCoefficient[Type]\tNUMBER\t\t94\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\t0c1e500a-5e6b-41e3-9953-df7d0e886323\tPset_CableCarrierSegmentTypeCatenaryWire.UltimateTensileStrength[Type]\tNUMBER\t\t94\t1\tIfcForceMeasure\t1\nPARAM\t2200d3c6-68d7-4755-818b-bf3a414b83a7\tPset_CableCarrierSegmentTypeCatenaryWire.YoungModulus[Type]\tNUMBER\t\t94\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t95\tPset_CableCarrierSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcabca114-2329-46e7-935a-0f54a4d0f15c\tPset_CableCarrierSegmentTypeCommon.Reference[Type]\tTEXT\t\t95\t1\tIfcIdentifier\t1\nPARAM\t41f256d1-ce87-4c5c-bec4-e8d46bd1620a\tPset_CableCarrierSegmentTypeCommon.Status[Type]\tTEXT\t\t95\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t96\tPset_CableCarrierSegmentTypeConduitSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83194735-e827-41ad-b539-3cb016bffcf0\tPset_CableCarrierSegmentTypeConduitSegment.ConduitShapeType[Type]\tTEXT\t\t96\t1\tPEnum_ConduitShapeType\t1\nPARAM\t90d84926-0b03-4cb5-b996-b4101e72ae0b\tPset_CableCarrierSegmentTypeConduitSegment.IsRigid[Type]\tYESNO\t\t96\t1\tIfcBoolean\t1\nPARAM\t089110c0-63b6-48a8-9603-60362c2126b1\tPset_CableCarrierSegmentTypeConduitSegment.NominalDiameter[Type]\tLENGTH\t\t96\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te295efce-8914-41fa-8ca8-8f1583ced6ad\tPset_CableCarrierSegmentTypeConduitSegment.NominalHeight[Type]\tLENGTH\t\t96\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta239a368-1cd4-4a2c-87e3-451ddfbd72a5\tPset_CableCarrierSegmentTypeConduitSegment.NominalLength[Type]\tLENGTH\t\t96\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3fd4c79b-bd83-4db7-81f2-06e79a8c557f\tPset_CableCarrierSegmentTypeConduitSegment.NominalWidth[Type]\tLENGTH\t\t96\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t97\tPset_CableCarrierSegmentTypeDropper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb39dc3cd-6b0b-4eb7-ba4f-fea199f8ed3e\tPset_CableCarrierSegmentTypeDropper.AssemblyInstruction[Type]\tMULTILINETEXT\t\t97\t1\tIfcExternalReference\t1\nPARAM\t4e80e506-4db3-4ef6-bfe9-abcff001c289\tPset_CableCarrierSegmentTypeDropper.CurrentCarryingCapacity[Type]\tNUMBER\t\t97\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t7170b8a4-7b1b-4974-81b9-e8aa377dd667\tPset_CableCarrierSegmentTypeDropper.IsAdjustable[Type]\tYESNO\t\t97\t1\tIfcBoolean\t1\nPARAM\te3041aec-3aa9-43ac-b5ad-9080f763b7e0\tPset_CableCarrierSegmentTypeDropper.IsCurrentCarrying[Type]\tYESNO\t\t97\t1\tIfcBoolean\t1\nPARAM\ta0fae53f-f439-4ce1-94d5-31673f461afc\tPset_CableCarrierSegmentTypeDropper.IsRigid[Type]\tYESNO\t\t97\t1\tIfcBoolean\t1\nPARAM\t89487ccf-dc66-421f-bf99-93a1a0669bba\tPset_CableCarrierSegmentTypeDropper.NominalLoad[Type]\tNUMBER\t\t97\t1\tIfcForceMeasure\t1\nPARAM\tc3a8aee2-265c-445e-b10d-e0fda1b565c3\tPset_CableCarrierSegmentTypeDropper.TensileStrength[Type]\tNUMBER\t\t97\t1\tIfcPressureMeasure\t1\nPARAM\te52c3584-f1d4-4b6f-bd8f-68d1ff1c3ff7\tPset_CableCarrierSegmentTypeDropper.UltimateTensileStrength[Type]\tNUMBER\t\t97\t1\tIfcForceMeasure\t1\n#\nGROUP\t98\tPset_CableFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td3167094-d0a5-44ab-96c8-f66a4979aca2\tPset_CableFittingTypeCommon.Reference[Type]\tTEXT\t\t98\t1\tIfcIdentifier\t1\nPARAM\t38d1b35f-eb54-43dd-b74a-e1ff89fe0c72\tPset_CableFittingTypeCommon.Status[Type]\tTEXT\t\t98\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t99\tPset_CableFittingTypeExit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t39077cd9-30ed-4acc-92ea-d16dba26c73d\tPset_CableFittingTypeExit.GroundResistance[Type]\tNUMBER\t\t99\t1\tIfcElectricResistanceMeasure\t1\n#\nGROUP\t100\tPset_CableFittingTypeFanout\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta7e326a7-a70a-4410-8d5c-d16901c8bb1b\tPset_CableFittingTypeFanout.NumberOfTubes[Type]\tINTEGER\t\t100\t1\tIfcCountMeasure\t1\nPARAM\tdc7a6e08-3e89-487b-a3de-32420a94f0fa\tPset_CableFittingTypeFanout.TubeDiameter[Type]\tLENGTH\t\t100\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t101\tPset_CableSegmentConnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t80d2a851-a406-4d9d-a98c-7372f066edd1\tPset_CableSegmentConnector.ConnectorAColour[Type]\tTEXT\t\t101\t1\tIfcLabel\t1\nPARAM\t87f27319-834a-4ac0-8f2e-b7b6cb6ed2eb\tPset_CableSegmentConnector.ConnectorAGender[Type]\tTEXT\t\t101\t1\tPEnum_DistributionPortGender\t1\nPARAM\t54df81ee-1696-4e99-b2f0-65cfee946ff9\tPset_CableSegmentConnector.ConnectorAType[Type]\tTEXT\t\t101\t1\tIfcLabel\t1\nPARAM\t3720361f-4bab-49d0-b910-2636ad568ea5\tPset_CableSegmentConnector.ConnectorBColour[Type]\tTEXT\t\t101\t1\tIfcLabel\t1\nPARAM\t51648216-a4e1-4cd8-b3b3-ec5024eeb65d\tPset_CableSegmentConnector.ConnectorBGender[Type]\tTEXT\t\t101\t1\tPEnum_DistributionPortGender\t1\nPARAM\t5991a38b-1565-42ae-90ea-1d3e43eb2603\tPset_CableSegmentConnector.ConnectorBType[Type]\tTEXT\t\t101\t1\tIfcLabel\t1\n#\nGROUP\t102\tPset_CableSegmentOccurenceFiberSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t10b52c8d-c57f-4415-8581-0d4213831fc7\tPset_CableSegmentOccurenceFiberSegment.InUse[Type]\tYESNO\t\t102\t1\tIfcBoolean\t1\n#\nGROUP\t103\tPset_CableSegmentOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4b914814-5278-4c94-b075-3013ba2a4383\tPset_CableSegmentOccurrence.CarrierStackNumber[Type]\tINTEGER\t\t103\t1\tIfcInteger\t1\nPARAM\tc9a2fcef-415e-41c4-bf41-85057682f5af\tPset_CableSegmentOccurrence.CurrentCarryingCapacity[Type]\tNUMBER\t\t103\t1\tIfcElectricCurrentMeasure\t1\nPARAM\ta64b3442-09a0-4257-a67a-1d5140ac3040\tPset_CableSegmentOccurrence.CurrentCarryingCapasity[Type]\tNUMBER\t\t103\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t4a31f754-8340-4ef9-b0ea-a7752d2cceb3\tPset_CableSegmentOccurrence.DesignAmbientTemperature[Type]\tMULTILINETEXT\t\t103\t1\tPropertyBoundedValue\t1\nPARAM\t906442d9-dbbe-440f-84de-0021c0a30914\tPset_CableSegmentOccurrence.DistanceBetweenParallelCircuits[Type]\tLENGTH\t\t103\t1\tIfcLengthMeasure\t1\nPARAM\t525487e2-c58a-4fa1-b84e-b55e6e41d807\tPset_CableSegmentOccurrence.InstallationMethod[Type]\tTEXT\t\t103\t1\tIfcLabel\t1\nPARAM\t17a7ab30-e903-43c3-8152-c51bae235dcd\tPset_CableSegmentOccurrence.InstallationMethodFlagEnum[Type]\tTEXT\t\t103\t1\tPEnum_InstallationMethodFlagEnum\t1\nPARAM\t63b47c0c-d1f0-493f-a355-1e6393a7d35f\tPset_CableSegmentOccurrence.IsHorizontalCable[Type]\tYESNO\t\t103\t1\tIfcBoolean\t1\nPARAM\t2055318a-b501-41e0-8fc7-36000b267392\tPset_CableSegmentOccurrence.IsMountedFlatCable[Type]\tYESNO\t\t103\t1\tIfcBoolean\t1\nPARAM\t25a21846-013d-4296-ba24-9686ed7bc2a6\tPset_CableSegmentOccurrence.MaximumCableLength[Type]\tLENGTH\t\t103\t1\tIfcLengthMeasure\t1\nPARAM\t4907b222-01df-48c6-b0b6-511375dd2239\tPset_CableSegmentOccurrence.MountingMethod[Type]\tTEXT\t\t103\t1\tPEnum_MountingMethodEnum\t1\nPARAM\t44944d32-241a-46f9-85cb-8754ae9363eb\tPset_CableSegmentOccurrence.NumberOfParallelCircuits[Type]\tINTEGER\t\t103\t1\tIfcCountMeasure\t1\nPARAM\t3614d66c-4df0-4a6a-8667-2a3c486b915c\tPset_CableSegmentOccurrence.PowerLoss[Type]\tNUMBER\t\t103\t1\tIfcPowerMeasure\t1\nPARAM\t2ff8a748-b7a7-468e-b2e0-f8091fb67264\tPset_CableSegmentOccurrence.SequentialCode[Type]\tTEXT\t\t103\t1\tIfcLabel\t1\nPARAM\t3b0ace50-bc7e-4759-9bdb-39ab9a1e9cb8\tPset_CableSegmentOccurrence.SoilConductivity[Type]\tNUMBER\t\t103\t1\tIfcThermalConductivityMeasure\t1\nPARAM\te033ae23-c152-4d62-a215-3b0645e52f4d\tPset_CableSegmentOccurrence.UserCorrectionFactor[Type]\tNUMBER\t\t103\t1\tIfcReal\t1\n#\nGROUP\t104\tPset_CableSegmentTypeBusBarSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t26bd2714-d599-4b28-bc97-41632c312e89\tPset_CableSegmentTypeBusBarSegment.ACResistance[Type]\tNUMBER\t\t104\t1\tIfcElectricResistanceMeasure\t1\nPARAM\tf0a88d7d-1d66-4c13-a7c5-04898adf4ddf\tPset_CableSegmentTypeBusBarSegment.CrossSectionalArea[Type]\tAREA\t\t104\t1\tIfcAreaMeasure\t1\nPARAM\t5bbb33ec-9b04-4803-ba3e-5652d78c02d5\tPset_CableSegmentTypeBusBarSegment.CurrentCarryingCapacity[Type]\tNUMBER\t\t104\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t9e95ef42-c29b-414d-953e-7b47660a02d5\tPset_CableSegmentTypeBusBarSegment.DCResistance[Type]\tNUMBER\t\t104\t1\tIfcElectricResistanceMeasure\t1\nPARAM\tb7c95f44-1b8b-42db-adde-78e975b27ac2\tPset_CableSegmentTypeBusBarSegment.InsulationMethod[Type]\tTEXT\t\t104\t1\tPEnum_InsulatorType\t1\nPARAM\tf93a68c1-93be-4b93-9f29-e5187ae18187\tPset_CableSegmentTypeBusBarSegment.IsHorizontalBusbar[Type]\tYESNO\t\t104\t1\tIfcBoolean\t1\nPARAM\tdb581764-85f9-401c-bbaa-97f27d6dc3b0\tPset_CableSegmentTypeBusBarSegment.MassPerLength[Type]\tNUMBER\t\t104\t1\tIfcMassPerLengthMeasure\t1\nPARAM\t32141a9a-b8f0-410c-a8f7-aa5c91157c40\tPset_CableSegmentTypeBusBarSegment.NominalCurrent[Type]\tNUMBER\t\t104\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tcabd9ec6-904f-4650-8408-68e9024568cc\tPset_CableSegmentTypeBusBarSegment.OperationalTemperatureRange[Type]\tMULTILINETEXT\t\t104\t1\tPropertyBoundedValue\t1\nPARAM\t1421accb-83b9-4f1c-a09a-e3041cbadb35\tPset_CableSegmentTypeBusBarSegment.OverallDiameter[Type]\tLENGTH\t\t104\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8e30ce11-f3b8-48dc-9d29-24360cdfa0ea\tPset_CableSegmentTypeBusBarSegment.RatedVoltage[Type]\tMULTILINETEXT\t\t104\t1\tPropertyBoundedValue\t1\nPARAM\t1caf68b4-865e-44eb-9707-3807f7d0d29e\tPset_CableSegmentTypeBusBarSegment.TensileStrength[Type]\tNUMBER\t\t104\t1\tIfcPressureMeasure\t1\nPARAM\tf700bb6d-7ba2-482e-bd3a-9b0ed4e32778\tPset_CableSegmentTypeBusBarSegment.ThermalExpansionCoefficient[Type]\tNUMBER\t\t104\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\t0a51b926-afbb-4d31-9e8d-7d5754819ec0\tPset_CableSegmentTypeBusBarSegment.UltimateTensileStrength[Type]\tNUMBER\t\t104\t1\tIfcForceMeasure\t1\nPARAM\t2a41ec51-afd3-4e3b-b383-e3030f6b1180\tPset_CableSegmentTypeBusBarSegment.YoungModulus[Type]\tNUMBER\t\t104\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t105\tPset_CableSegmentTypeCableSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf93ed16e-5fc0-4e74-a579-e17758d80b98\tPset_CableSegmentTypeCableSegment.ACResistance[Type]\tNUMBER\t\t105\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t206e381d-716d-4b78-a4c8-8808688ad740\tPset_CableSegmentTypeCableSegment.CableInsulationMaterial[Type]\tMULTILINETEXT\t\t105\t1\tIfcMaterial\t1\nPARAM\t4262915b-f846-42f9-bb75-ca4a8bc3916f\tPset_CableSegmentTypeCableSegment.CrossSectionalArea[Type]\tAREA\t\t105\t1\tIfcAreaMeasure\t1\nPARAM\t6a4ef4c3-3bd0-412c-9928-45275ec09c41\tPset_CableSegmentTypeCableSegment.CurrentCarryingCapacity[Type]\tNUMBER\t\t105\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t1b2d1133-2f16-4e98-a312-ef31fb22f4a9\tPset_CableSegmentTypeCableSegment.DCResistance[Type]\tNUMBER\t\t105\t1\tIfcElectricResistanceMeasure\t1\nPARAM\te98a3bc5-4ad7-4aa6-9bcb-c55e0430fa66\tPset_CableSegmentTypeCableSegment.FunctionReliable[Type]\tYESNO\t\t105\t1\tIfcBoolean\t1\nPARAM\t4d102ed2-1f49-4df1-8f67-0566f5e8e7d0\tPset_CableSegmentTypeCableSegment.HalogenProof[Type]\tYESNO\t\t105\t1\tIfcBoolean\t1\nPARAM\t083bda98-9282-4029-b3b5-769d4bd4e5e2\tPset_CableSegmentTypeCableSegment.HasProtectiveEarth[Type]\tYESNO\t\t105\t1\tIfcBoolean\t1\nPARAM\t460ae770-1d68-4bcf-b435-d3ffa3a77e17\tPset_CableSegmentTypeCableSegment.InsulationVoltage[Type]\tNUMBER\t\t105\t1\tIfcElectricVoltageMeasure\t1\nPARAM\tb0b93e29-24ee-489c-8a74-a6aadcfc4d2d\tPset_CableSegmentTypeCableSegment.MassPerLength[Type]\tNUMBER\t\t105\t1\tIfcMassPerLengthMeasure\t1\nPARAM\t3ffb2c5a-b934-4781-8356-5cb4b5f73c0c\tPset_CableSegmentTypeCableSegment.MaximumBendingRadius[Type]\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1e56cf62-1037-473c-9267-3f60afa4d3b4\tPset_CableSegmentTypeCableSegment.MaximumCurrent[Type]\tNUMBER\t\t105\t1\tIfcElectricCurrentMeasure\t1\nPARAM\te10321eb-1494-4479-9e61-76a3f6081c9e\tPset_CableSegmentTypeCableSegment.MaximumOperatingTemperature[Type]\tNUMBER\t\t105\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t79772734-9732-4e62-a3aa-a4746ea70096\tPset_CableSegmentTypeCableSegment.MaximumShortCircuitTemperature[Type]\tNUMBER\t\t105\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t1e506cf1-3119-4ce4-bc35-7ec34c99ea1f\tPset_CableSegmentTypeCableSegment.MaxOperatingTemperature[Type]\tNUMBER\t\t105\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\ta83fcaf2-2d12-4791-9304-e7922f12c1f9\tPset_CableSegmentTypeCableSegment.NominalHeight[Type]\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4788440c-3b7c-45a2-98cf-8a33205aac13\tPset_CableSegmentTypeCableSegment.NominalLength[Type]\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbababf34-b0db-408e-8413-7728de2b193d\tPset_CableSegmentTypeCableSegment.NominalWidthOrDiameter[Type]\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf6d9e29d-45ed-4bf9-a676-7d21a38043dc\tPset_CableSegmentTypeCableSegment.NormalOperatingTemperature[Type]\tNUMBER\t\t105\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\ta02e4471-60e2-43ff-85c1-342aea6930c6\tPset_CableSegmentTypeCableSegment.NumberOfCores[Type]\tINTEGER\t\t105\t1\tIfcCountMeasure\t1\nPARAM\te285fb9d-9e5d-46f6-89ef-1c80962c2d1a\tPset_CableSegmentTypeCableSegment.NumberOfWires[Type]\tINTEGER\t\t105\t1\tIfcCountMeasure\t1\nPARAM\tcf63377e-b067-4268-ae68-db862a7eee8b\tPset_CableSegmentTypeCableSegment.OverallDiameter[Type]\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf81d010b-f9fa-4595-a141-82f336cb7974\tPset_CableSegmentTypeCableSegment.RatedTemperature[Type]\tMULTILINETEXT\t\t105\t1\tPropertyBoundedValue\t1\nPARAM\tb2204776-d1ac-4543-9ed3-8fe6a1bd3a77\tPset_CableSegmentTypeCableSegment.RatedVoltage[Type]\tMULTILINETEXT\t\t105\t1\tPropertyBoundedValue\t1\nPARAM\t56abb2a1-c1fb-43ad-b466-27877eead373\tPset_CableSegmentTypeCableSegment.ScreenDiameter[Type]\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9ff3af05-690a-48a9-8978-8c7ce9e86c58\tPset_CableSegmentTypeCableSegment.SelfExtinguishing60332_1[Type]\tYESNO\t\t105\t1\tIfcBoolean\t1\nPARAM\t2e2beb43-e354-4d7b-810c-c64948bb3a5a\tPset_CableSegmentTypeCableSegment.SelfExtinguishing60332_3[Type]\tYESNO\t\t105\t1\tIfcBoolean\t1\nPARAM\t67264753-5964-4e9e-88c4-05819b46c884\tPset_CableSegmentTypeCableSegment.SheathColor[Type]\tTEXT\t\t105\t1\tIfcLabel\t1\nPARAM\t40546bf4-4e3d-4f35-b0c9-087f7e7b6157\tPset_CableSegmentTypeCableSegment.SpecialConstruction[Type]\tTEXT\t\t105\t1\tIfcLabel\t1\nPARAM\tca75f457-c596-4090-a541-a65a20b3e0c9\tPset_CableSegmentTypeCableSegment.Standard[Type]\tTEXT\t\t105\t1\tIfcLabel\t1\nPARAM\t6067a219-72dc-4734-beab-e2c8ee43a285\tPset_CableSegmentTypeCableSegment.Weight[Type]\tNUMBER\t\t105\t1\tIfcMassMeasure\t1\n#\nGROUP\t106\tPset_CableSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t533b9572-29e1-47c7-aabf-5b68acb8d662\tPset_CableSegmentTypeCommon.Reference[Type]\tTEXT\t\t106\t1\tIfcIdentifier\t1\nPARAM\t36eac336-2177-4d9c-9ad5-7680d591f574\tPset_CableSegmentTypeCommon.Status[Type]\tTEXT\t\t106\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t107\tPset_CableSegmentTypeConductorSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc81c2092-ef5b-4b1c-b722-9cb393c6e967\tPset_CableSegmentTypeConductorSegment.ACResistance[Type]\tNUMBER\t\t107\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t40c0e6b7-e962-40a5-8a0b-ca6bf4b6da12\tPset_CableSegmentTypeConductorSegment.ConductorMaterial[Type]\tTEXT\t\t107\t1\tPEnum_MaterialEnum\t1\nPARAM\tbac32df1-39aa-4b5d-b1e6-714e5f5b4c59\tPset_CableSegmentTypeConductorSegment.ConductorShape[Type]\tTEXT\t\t107\t1\tPEnum_ShapeEnum\t1\nPARAM\t82c37888-84e1-4ff6-8ca1-0d7a044cbc32\tPset_CableSegmentTypeConductorSegment.ConductorSheathMaterial[Type]\tMULTILINETEXT\t\t107\t1\tIfcMaterial\t1\nPARAM\t7e6dad12-ceab-4975-baaf-0e7f9fb7c397\tPset_CableSegmentTypeConductorSegment.Construction[Type]\tTEXT\t\t107\t1\tPEnum_ConstructionEnum\t1\nPARAM\t92bf6aea-c0be-4ec2-bd5a-2472e0fe00ab\tPset_CableSegmentTypeConductorSegment.CrossSectionalArea[Type]\tAREA\t\t107\t1\tIfcAreaMeasure\t1\nPARAM\t3f0e198a-95e0-489a-a503-a377e3a95074\tPset_CableSegmentTypeConductorSegment.CurrentCarryingCapacity[Type]\tNUMBER\t\t107\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t2c5308ba-9502-4906-a006-3450445e541e\tPset_CableSegmentTypeConductorSegment.DCResistance[Type]\tNUMBER\t\t107\t1\tIfcElectricResistanceMeasure\t1\nPARAM\ta0fe938e-59e8-4a54-8a6e-89773f96888e\tPset_CableSegmentTypeConductorSegment.ElectricalConductorFunction[Type]\tTEXT\t\t107\t1\tPEnum_ConductorFunction\t1\nPARAM\te5992a2a-93f0-42d7-a3a6-3c09b71f5a98\tPset_CableSegmentTypeConductorSegment.Function[Type]\tTEXT\t\t107\t1\tPEnum_FunctionEnum\t1\nPARAM\tb3c4b884-0e33-48e3-bc2f-4650e2eac040\tPset_CableSegmentTypeConductorSegment.IsFireResistant[Type]\tYESNO\t\t107\t1\tIfcBoolean\t1\nPARAM\t3bcfc5e2-3b64-41ca-b3b1-639d9436d902\tPset_CableSegmentTypeConductorSegment.MassPerLength[Type]\tNUMBER\t\t107\t1\tIfcMassPerLengthMeasure\t1\nPARAM\tfb414e09-4e67-48b3-9745-dfa60be36146\tPset_CableSegmentTypeConductorSegment.Material[Type]\tTEXT\t\t107\t1\tPEnum_MaterialEnum\t1\nPARAM\tde31ae19-dc2d-4d55-918d-e73ed5599b1f\tPset_CableSegmentTypeConductorSegment.MaximumOperatingTemperature[Type]\tNUMBER\t\t107\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tccdacd63-4eef-40a2-811d-d3ce785212b5\tPset_CableSegmentTypeConductorSegment.NominalCurrent[Type]\tNUMBER\t\t107\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t0bea2118-ed55-4142-80bb-be95a33ec0a1\tPset_CableSegmentTypeConductorSegment.NominalLength[Type]\tLENGTH\t\t107\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t44a92854-b874-4515-a514-8886a038d1ea\tPset_CableSegmentTypeConductorSegment.NumberOfCores[Type]\tINTEGER\t\t107\t1\tIfcCountMeasure\t1\nPARAM\tfbcef155-092e-4707-b17a-72f1c99559de\tPset_CableSegmentTypeConductorSegment.OverallDiameter[Type]\tLENGTH\t\t107\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t787f7ffb-8b7b-4dab-8bdc-9a79adf5bf91\tPset_CableSegmentTypeConductorSegment.PhaseReference[Type]\tTEXT\t\t107\t1\tIfcIdentifier\t1\nPARAM\t55389c36-1aea-4bf6-ad17-26a3cba2d812\tPset_CableSegmentTypeConductorSegment.RatedVoltage[Type]\tMULTILINETEXT\t\t107\t1\tPropertyBoundedValue\t1\nPARAM\t097a40b9-f0cb-4464-a6a0-52d1dfc131d0\tPset_CableSegmentTypeConductorSegment.Shape[Type]\tTEXT\t\t107\t1\tPEnum_ShapeEnum\t1\nPARAM\tfffe0a67-54c1-425b-930c-7dba160e8db9\tPset_CableSegmentTypeConductorSegment.SheathColor[Type]\tTEXT\t\t107\t1\tIfcLabel\t1\nPARAM\t582fe614-7f76-4255-8ead-1a25f1ea9190\tPset_CableSegmentTypeConductorSegment.TensileStrength[Type]\tNUMBER\t\t107\t1\tIfcPressureMeasure\t1\nPARAM\t51d2b87b-cc5a-4a6a-8fc7-6c46254125e5\tPset_CableSegmentTypeConductorSegment.ThermalExpansionCoefficient[Type]\tNUMBER\t\t107\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\te10eb007-45a2-457f-9cd0-5392fa023c0b\tPset_CableSegmentTypeConductorSegment.UltimateTensileStrength[Type]\tNUMBER\t\t107\t1\tIfcForceMeasure\t1\nPARAM\t25c08b85-a54b-4cb2-ad83-f7eff11832b9\tPset_CableSegmentTypeConductorSegment.YoungModulus[Type]\tNUMBER\t\t107\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t108\tPset_CableSegmentTypeContactWire\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t50a8a19f-4b3d-4ab3-a5fe-5f6621d13159\tPset_CableSegmentTypeContactWire.ACResistance[Type]\tNUMBER\t\t108\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t95e9057a-0fe4-4c9f-9296-343be99b4eb6\tPset_CableSegmentTypeContactWire.CrossSectionalArea[Type]\tAREA\t\t108\t1\tIfcAreaMeasure\t1\nPARAM\t360449bc-7132-403b-8caf-6cbe5d5ab07c\tPset_CableSegmentTypeContactWire.CurrentCarryingCapacity[Type]\tNUMBER\t\t108\t1\tIfcElectricCurrentMeasure\t1\nPARAM\te6025e48-8288-47cd-91d3-0501dbc60f32\tPset_CableSegmentTypeContactWire.DCResistance[Type]\tNUMBER\t\t108\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t72cf4297-9739-49ec-8a3d-300c830fa813\tPset_CableSegmentTypeContactWire.MassPerLength[Type]\tNUMBER\t\t108\t1\tIfcMassPerLengthMeasure\t1\nPARAM\tb0c75d38-afa1-4534-9bb0-476a8bad156e\tPset_CableSegmentTypeContactWire.TensileStrength[Type]\tNUMBER\t\t108\t1\tIfcPressureMeasure\t1\nPARAM\tcc2e3082-098a-489e-83be-cecd8d2338d5\tPset_CableSegmentTypeContactWire.ThermalExpansionCoefficient[Type]\tNUMBER\t\t108\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\tde83da6f-db80-438f-b46d-392e3fc3b3b9\tPset_CableSegmentTypeContactWire.TorsionalStrength[Type]\tNUMBER\t\t108\t1\tIfcPressureMeasure\t1\nPARAM\t47f7d3d0-3806-4cd5-bf57-859a5de7523f\tPset_CableSegmentTypeContactWire.YoungModulus[Type]\tNUMBER\t\t108\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t109\tPset_CableSegmentTypeCoreSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t346d6abb-aef4-415f-a40d-453b14541389\tPset_CableSegmentTypeCoreSegment.ACResistance[Type]\tNUMBER\t\t109\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t5fc162d1-ebe5-4888-ac77-7e6548a90da4\tPset_CableSegmentTypeCoreSegment.CoreIdentifier[Type]\tTEXT\t\t109\t1\tIfcIdentifier\t1\nPARAM\ta8643fc9-56cd-4ec9-aa72-6435ad5e3867\tPset_CableSegmentTypeCoreSegment.CurrentCarryingCapacity[Type]\tNUMBER\t\t109\t1\tIfcElectricCurrentMeasure\t1\nPARAM\td44988b3-0504-4812-9c34-cb2fe3dd55c7\tPset_CableSegmentTypeCoreSegment.DCResistance[Type]\tNUMBER\t\t109\t1\tIfcElectricResistanceMeasure\t1\nPARAM\ta26fa956-e672-4b73-bd9a-f6e7bbe2739c\tPset_CableSegmentTypeCoreSegment.FunctionReliable[Type]\tYESNO\t\t109\t1\tIfcBoolean\t1\nPARAM\t1a7f1c7f-52dd-45e2-bb87-ef3282cee66e\tPset_CableSegmentTypeCoreSegment.HalogenProof[Type]\tYESNO\t\t109\t1\tIfcBoolean\t1\nPARAM\tade3d66f-41c4-4808-a7ff-ff30e00d44d9\tPset_CableSegmentTypeCoreSegment.LayRatio[Type]\tNUMBER\t\t109\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tcac096ea-e707-4ff3-999d-080830a7990f\tPset_CableSegmentTypeCoreSegment.MassPerLength[Type]\tNUMBER\t\t109\t1\tIfcMassPerLengthMeasure\t1\nPARAM\tc03ea4ad-b53a-4083-8880-ab1c94b468e8\tPset_CableSegmentTypeCoreSegment.OverallDiameter[Type]\tLENGTH\t\t109\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3669b6ce-dae9-4c1a-ba9b-5107717d976b\tPset_CableSegmentTypeCoreSegment.RatedTemperature[Type]\tMULTILINETEXT\t\t109\t1\tPropertyBoundedValue\t1\nPARAM\tcefb75ad-dfd3-4c58-89cc-4f7c2263f552\tPset_CableSegmentTypeCoreSegment.RatedVoltage[Type]\tMULTILINETEXT\t\t109\t1\tPropertyBoundedValue\t1\nPARAM\t5aa54bf2-63bf-4988-abad-af205b95a32c\tPset_CableSegmentTypeCoreSegment.ScreenDiameter[Type]\tLENGTH\t\t109\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t84c472c0-e340-4f68-adeb-98ed942a9fd3\tPset_CableSegmentTypeCoreSegment.SelfExtinguishing60332_1[Type]\tYESNO\t\t109\t1\tIfcBoolean\t1\nPARAM\t09ef60f8-5fba-4075-a085-2d1f86d7ee6d\tPset_CableSegmentTypeCoreSegment.SelfExtinguishing60332_3[Type]\tYESNO\t\t109\t1\tIfcBoolean\t1\nPARAM\t079e84ae-d1d9-4090-b7cd-c4c1832c3dac\tPset_CableSegmentTypeCoreSegment.SheathColors[Type]\tTEXT\t\t109\t1\tPEnum_CoreColorsEnum\t1\nPARAM\taf4ce3c2-efa2-4ad7-b8a7-d8245912b3b5\tPset_CableSegmentTypeCoreSegment.SheathColours[Type]\tTEXT\t\t109\t1\tPEnum_CoreColoursEnum\t1\nPARAM\tba407d22-ee32-4fde-a2ef-50a149b3f206\tPset_CableSegmentTypeCoreSegment.Standard[Type]\tTEXT\t\t109\t1\tIfcLabel\t1\nPARAM\t514f7dd4-0322-4e27-9ba2-afa7a22833ae\tPset_CableSegmentTypeCoreSegment.StrandingMethod[Type]\tTEXT\t\t109\t1\tIfcLabel\t1\nPARAM\t1d30766c-78db-4e12-a3f6-9a8743e7d782\tPset_CableSegmentTypeCoreSegment.TensileStrength[Type]\tNUMBER\t\t109\t1\tIfcPressureMeasure\t1\nPARAM\tda83cffe-7b0e-430e-a82d-9b0d38877bc6\tPset_CableSegmentTypeCoreSegment.ThermalExpansionCoefficient[Type]\tNUMBER\t\t109\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\t91dd4905-ed28-4599-9204-511604c1b8c2\tPset_CableSegmentTypeCoreSegment.UltimateTensileStrength[Type]\tNUMBER\t\t109\t1\tIfcForceMeasure\t1\nPARAM\t5af16f07-ae9d-4ef9-8a03-0d95cdf31e75\tPset_CableSegmentTypeCoreSegment.Weight[Type]\tNUMBER\t\t109\t1\tIfcMassMeasure\t1\nPARAM\t617f5953-1034-49a8-a5a7-bf1454a87163\tPset_CableSegmentTypeCoreSegment.YoungModulus[Type]\tNUMBER\t\t109\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t110\tPset_CableSegmentTypeEarthingConductor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2caced9e-6bc5-4cba-a468-beb157df0877\tPset_CableSegmentTypeEarthingConductor.ResistanceToGround[Type]\tNUMBER\t\t110\t1\tIfcElectricResistanceMeasure\t1\n#\nGROUP\t111\tPset_CableSegmentTypeFiberSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t28ebeea1-86cb-4bdc-adca-8ca82c242eb8\tPset_CableSegmentTypeFiberSegment.FiberColour[Type]\tTEXT\t\t111\t1\tPEnum_FiberColour\t1\nPARAM\tc82cf807-4be6-4b5c-8c08-e51705ee365c\tPset_CableSegmentTypeFiberSegment.FiberType[Type]\tTEXT\t\t111\t1\tPEnum_FiberType\t1\nPARAM\tae2582da-0391-47a1-afe2-0b7944b39c14\tPset_CableSegmentTypeFiberSegment.HasTightJacket[Type]\tYESNO\t\t111\t1\tIfcBoolean\t1\n#\nGROUP\t112\tPset_CableSegmentTypeFiberTubeSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t543b4230-4bca-44b3-8d5d-18c3a79f3954\tPset_CableSegmentTypeFiberTubeSegment.FiberTubeColour[Type]\tTEXT\t\t112\t1\tPEnum_FiberColour\t1\nPARAM\t28d8c8e3-9668-4aa1-88cc-518a60c46c94\tPset_CableSegmentTypeFiberTubeSegment.NumberOfFibers[Type]\tINTEGER\t\t112\t1\tIfcCountMeasure\t1\n#\nGROUP\t113\tPset_CableSegmentTypeOpticalCableSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t01484f1f-a136-4060-9911-f0aee4a8c71a\tPset_CableSegmentTypeOpticalCableSegment.FiberMode[Type]\tTEXT\t\t113\t1\tPEnum_FiberMode\t1\nPARAM\t2f4ad4c4-0de1-4ca2-811e-336164e79f32\tPset_CableSegmentTypeOpticalCableSegment.NumberOfFibers[Type]\tINTEGER\t\t113\t1\tIfcCountMeasure\t1\nPARAM\teba615f8-8988-44c3-af23-69190be2edcf\tPset_CableSegmentTypeOpticalCableSegment.NumberOfMultiModeFibers[Type]\tINTEGER\t\t113\t1\tIfcCountMeasure\t1\nPARAM\teab7dcaf-1922-432f-9c3a-bb2b3b3911ce\tPset_CableSegmentTypeOpticalCableSegment.NumberOfSingleModeFibers[Type]\tINTEGER\t\t113\t1\tIfcCountMeasure\t1\nPARAM\td76635ff-dce5-4ad9-9774-aad09afa8a09\tPset_CableSegmentTypeOpticalCableSegment.NumberOfTubes[Type]\tINTEGER\t\t113\t1\tIfcCountMeasure\t1\nPARAM\te8e7cb34-04e2-4fbe-8e05-a10108358458\tPset_CableSegmentTypeOpticalCableSegment.OpticalCableStructure[Type]\tTEXT\t\t113\t1\tPEnum_OpticalCableStructureType\t1\n#\nGROUP\t114\tPset_CableSegmentTypeStitchWire\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t491afd84-7830-41d7-9b6f-09aee55ac665\tPset_CableSegmentTypeStitchWire.AssemblyInstruction[Type]\tMULTILINETEXT\t\t114\t1\tIfcExternalReference\t1\nPARAM\td1b40ef8-7a84-4ad5-bd35-600b5ca3cfe5\tPset_CableSegmentTypeStitchWire.MechanicalTension[Type]\tNUMBER\t\t114\t1\tIfcForceMeasure\t1\nPARAM\tcb84bffb-6835-43bb-9aa7-b1f5ca16398f\tPset_CableSegmentTypeStitchWire.NominalLength[Type]\tLENGTH\t\t114\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\td68391f6-fb96-41b7-ad88-b45420b0dfed\tPset_CableSegmentTypeStitchWire.TensileStrength[Type]\tNUMBER\t\t114\t1\tIfcPressureMeasure\t1\nPARAM\t508277d4-22e1-49b5-8fda-12a20e14647f\tPset_CableSegmentTypeStitchWire.UltimateTensileStrength[Type]\tNUMBER\t\t114\t1\tIfcForceMeasure\t1\n#\nGROUP\t115\tPset_CableSegmentTypeWirePairSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t18279a6f-b741-4144-8209-33550ea32465\tPset_CableSegmentTypeWirePairSegment.CharacteristicImpedance[Type]\tNUMBER\t\t115\t1\tIfcElectricResistanceMeasure\t1\nPARAM\tc93b9b5d-8760-44ff-912c-c6b15c4a29a2\tPset_CableSegmentTypeWirePairSegment.ConductorDiameter[Type]\tLENGTH\t\t115\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8f427f5f-1435-4690-9190-09d04d76aa4a\tPset_CableSegmentTypeWirePairSegment.CoreConductorDiameter[Type]\tLENGTH\t\t115\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0e79f29a-b0b1-4ffd-a0d8-d778bbbe9d9c\tPset_CableSegmentTypeWirePairSegment.JacketColour[Type]\tTEXT\t\t115\t1\tIfcLabel\t1\nPARAM\t308aac0e-bcda-478d-a0eb-0e62d1082fd1\tPset_CableSegmentTypeWirePairSegment.ShieldConductorDiameter[Type]\tLENGTH\t\t115\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0efb8ddc-0b59-42c2-95af-2c1a0c9f3887\tPset_CableSegmentTypeWirePairSegment.WirePairType[Type]\tTEXT\t\t115\t1\tPEnum_WirePairType\t1\n#\nGROUP\t116\tPset_CargoCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbb161050-48df-46d6-af02-55dbe1aef284\tPset_CargoCommon.AdditionalProcessing[Type]\tTEXT\t\t116\t1\tPEnum_AdditionalProcessing\t1\nPARAM\t1ada08b6-9c7e-4331-aa7a-7ba50d59ee3f\tPset_CargoCommon.ProcessDirection[Type]\tTEXT\t\t116\t1\tPEnum_ProcessDirection\t1\nPARAM\td8b5be01-79e0-4682-884d-75aa02231922\tPset_CargoCommon.ProcessItem[Type]\tTEXT\t\t116\t1\tPEnum_ProcessItem\t1\n#\nGROUP\t117\tPset_CessBetweenRails\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf337e8a4-e3b8-4a06-846e-24a2ba848af8\tPset_CessBetweenRails.CheckRailType[Type]\tTEXT\t\t117\t1\tPEnum_CheckRailType\t1\nPARAM\tb385fdad-8c47-4025-9b7c-bbe73c623793\tPset_CessBetweenRails.JointRelativePosition[Type]\tTEXT\t\t117\t1\tPEnum_RelativePosition\t1\nPARAM\t5f80dcda-a454-4294-9529-e438d7f5f62e\tPset_CessBetweenRails.LoadCapacity[Type]\tNUMBER\t\t117\t1\tIfcForceMeasure\t1\nPARAM\teb09dac5-96b4-40d7-a7b4-c977a4c47a47\tPset_CessBetweenRails.UsagePurpose[Type]\tTEXT\t\t117\t1\tPEnum_UsagePurpose\t1\n#\nGROUP\t118\tPset_ChillerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t19af0aac-55f2-49c9-99ea-768a9f5ac1ab\tPset_ChillerPHistory.Capacity[Type]\tMULTILINETEXT\t\t118\t1\tIfcTimeSeries\t1\nPARAM\t32ecc4fb-73f0-4558-b37d-9958f9315e7c\tPset_ChillerPHistory.CapacityCurve[Type]\tNUMBER\t\t118\t1\tIfcReal\t1\nPARAM\t0c940597-155c-4ce9-8891-8033cb8c5147\tPset_ChillerPHistory.CoefficientOfPerformance[Type]\tMULTILINETEXT\t\t118\t1\tIfcTimeSeries\t1\nPARAM\t0e0130d9-945c-4199-99cd-6fd761f69bc3\tPset_ChillerPHistory.CoefficientOfPerformanceCurve[Type]\tNUMBER\t\t118\t1\tIfcReal\t1\nPARAM\t81e5f6c3-495a-494d-a0ae-9c765b94e89e\tPset_ChillerPHistory.EnergyEfficiencyRatio[Type]\tMULTILINETEXT\t\t118\t1\tIfcTimeSeries\t1\nPARAM\t07cdaed3-5a01-4f6a-9c74-f9451bc5a573\tPset_ChillerPHistory.FullLoadRatioCurve[Type]\tNUMBER\t\t118\t1\tIfcReal\t1\n#\nGROUP\t119\tPset_ChillerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2ea03e0c-48c2-46a8-b69e-7844a23066ad\tPset_ChillerTypeCommon.CapacityCurve[Type]\tMULTILINETEXT\t\t119\t1\tPropertyTableValue\t1\nPARAM\t69054931-9804-4d4c-ba96-e4ea7370c6e5\tPset_ChillerTypeCommon.ChillerCapacity[Type]\tNUMBER\t\t119\t1\tIfcPowerMeasure\t1\nPARAM\t585d32fc-f619-4c31-8888-f012596a79d7\tPset_ChillerTypeCommon.CoefficientOfPerformanceCurve[Type]\tMULTILINETEXT\t\t119\t1\tPropertyTableValue\t1\nPARAM\tb3913624-6f02-4822-959c-51c53bbd90e5\tPset_ChillerTypeCommon.FullLoadRatioCurve[Type]\tMULTILINETEXT\t\t119\t1\tPropertyTableValue\t1\nPARAM\t83387dc5-0cda-47cc-8539-176f18fda11f\tPset_ChillerTypeCommon.NominalCapacity[Type]\tNUMBER\t\t119\t1\tIfcPowerMeasure\t1\nPARAM\t95d871c6-2951-4133-a6ba-f4faf517c27a\tPset_ChillerTypeCommon.NominalCondensingTemperature[Type]\tNUMBER\t\t119\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tac817bcf-cfdd-4b71-bd80-26c365392bfd\tPset_ChillerTypeCommon.NominalEfficiency[Type]\tNUMBER\t\t119\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tfbb2dc23-9428-4243-b22e-71ee24f96bd8\tPset_ChillerTypeCommon.NominalEvaporatingTemperature[Type]\tNUMBER\t\t119\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t66046c2a-d606-483b-8e71-bbecbd6bf902\tPset_ChillerTypeCommon.NominalHeatRejectionRate[Type]\tNUMBER\t\t119\t1\tIfcPowerMeasure\t1\nPARAM\t5562b1dc-65b0-40d8-9f6a-59ec392aed87\tPset_ChillerTypeCommon.NominalPowerConsumption[Type]\tNUMBER\t\t119\t1\tIfcPowerMeasure\t1\nPARAM\t326d4989-6538-4eae-86c7-b18d560ce621\tPset_ChillerTypeCommon.Reference[Type]\tTEXT\t\t119\t1\tIfcIdentifier\t1\nPARAM\t840bbc00-82fb-41ec-afc0-ab8cc11591fa\tPset_ChillerTypeCommon.Status[Type]\tTEXT\t\t119\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t120\tPset_ChimneyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83ecf212-f6b3-4146-99be-3631e5d31c59\tPset_ChimneyCommon.FireRating[Type]\tTEXT\t\t120\t1\tIfcLabel\t1\nPARAM\t52bf429b-f8df-42a1-89c9-d4cdfd9a0be6\tPset_ChimneyCommon.IsExternal[Type]\tYESNO\t\t120\t1\tIfcBoolean\t1\nPARAM\te87b483c-fc25-491c-8b57-7abaa9885a24\tPset_ChimneyCommon.LoadBearing[Type]\tYESNO\t\t120\t1\tIfcBoolean\t1\nPARAM\ta6505bf2-e9ab-48ee-b03a-989e71421333\tPset_ChimneyCommon.NumberOfDrafts[Type]\tINTEGER\t\t120\t1\tIfcCountMeasure\t1\nPARAM\t01b94145-1a97-41ec-b5f3-e68552e7a484\tPset_ChimneyCommon.Reference[Type]\tTEXT\t\t120\t1\tIfcIdentifier\t1\nPARAM\te5fc2abf-1b76-4131-8736-983960c56acd\tPset_ChimneyCommon.Status[Type]\tTEXT\t\t120\t1\tPEnum_ElementStatus\t1\nPARAM\t258b033a-d9bc-47f5-af75-35962dd7f1a6\tPset_ChimneyCommon.ThermalTransmittance[Type]\tNUMBER\t\t120\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t121\tPset_CivilElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t707ec0cc-70ef-4071-a209-2d288048375b\tPset_CivilElementCommon.Reference[Type]\tTEXT\t\t121\t1\tIfcIdentifier\t1\nPARAM\tf3f03b57-93b4-4071-8340-5211a6636d03\tPset_CivilElementCommon.Status[Type]\tTEXT\t\t121\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t122\tPset_CoaxialCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t191afc01-0473-484c-9155-4d53e1072aac\tPset_CoaxialCable.CharacteristicImpedance[Type]\tNUMBER\t\t122\t1\tIfcElectricResistanceMeasure\t1\nPARAM\tf8db506f-8d12-4b80-b862-0350c7fbc58a\tPset_CoaxialCable.CouplingLoss[Type]\tNUMBER\t\t122\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t40f0dbee-b9f2-433f-895e-699394568c57\tPset_CoaxialCable.MaximumTransmissionAttenuation[Type]\tNUMBER\t\t122\t1\tIfcSoundPowerLevelMeasure\t1\nPARAM\t4698a393-4206-4a6c-b7b7-22e586ab3b0e\tPset_CoaxialCable.NumberOfCoaxialPairs[Type]\tINTEGER\t\t122\t1\tIfcCountMeasure\t1\nPARAM\td063b355-2b07-4b2a-93c1-61c31d29441c\tPset_CoaxialCable.PropagationSpeedCoefficient[Type]\tNUMBER\t\t122\t1\tIfcRatioMeasure\t1\nPARAM\tb61f9dad-1e43-44bd-a5a7-ac171bb230ed\tPset_CoaxialCable.RadiantFrequency[Type]\tNUMBER\t\t122\t1\tIfcFrequencyMeasure\t1\nPARAM\t10aa2ebd-b9a1-4d30-906e-de64a07afe53\tPset_CoaxialCable.TransmissionLoss[Type]\tNUMBER\t\t122\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t123\tPset_CoilOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t485e1be9-3b7d-416b-a875-bde1a61942ea\tPset_CoilOccurrence.HasSoundAttenuation[Type]\tYESNO\t\t123\t1\tIfcBoolean\t1\n#\nGROUP\t124\tPset_CoilPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t55bb76a6-1520-4260-9187-1f784448a95b\tPset_CoilPHistory.AirPressureDropCurve[Type]\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\nPARAM\t9ae19df8-4baf-4468-8e32-88e4b5f3625f\tPset_CoilPHistory.AirPressureDropCurveHistory[Type]\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\nPARAM\t691aef37-0ef6-42f7-a6ef-6e025d9a14c6\tPset_CoilPHistory.AtmosphericPressure[Type]\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\nPARAM\t27b9099c-60c8-4836-97b5-8f6cd2b0d68a\tPset_CoilPHistory.FaceVelocity[Type]\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\nPARAM\tdbfca991-4555-400e-97dc-0744b3cf30d4\tPset_CoilPHistory.SoundCurve[Type]\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\nPARAM\t0f22d58d-13aa-48f2-9c00-01b421b14840\tPset_CoilPHistory.SoundCurveHistory[Type]\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\n#\nGROUP\t125\tPset_CoilTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2ec10189-e24a-42c5-ab0d-7c626ea47bc5\tPset_CoilTypeCommon.AirflowRateRange[Type]\tMULTILINETEXT\t\t125\t1\tPropertyBoundedValue\t1\nPARAM\t7fbb36e8-04c7-429a-a2f1-1a81686fb6c1\tPset_CoilTypeCommon.AirFlowRateRange[Type]\tMULTILINETEXT\t\t125\t1\tPropertyBoundedValue\t1\nPARAM\t2fcc799d-9046-47ab-aee3-bd4099374712\tPset_CoilTypeCommon.CoilPlacement[Type]\tTEXT\t\t125\t1\tPEnum_CoilPlacementType\t1\nPARAM\t8611061e-6a7e-47ba-84a0-579f4c982b75\tPset_CoilTypeCommon.NominalLatentCapacity[Type]\tNUMBER\t\t125\t1\tIfcPowerMeasure\t1\nPARAM\tc25848f9-2011-48ab-9518-58d573a5c510\tPset_CoilTypeCommon.NominalSensibleCapacity[Type]\tNUMBER\t\t125\t1\tIfcPowerMeasure\t1\nPARAM\t9532a90f-bbf3-4017-a23d-908c78364cae\tPset_CoilTypeCommon.NominalUA[Type]\tNUMBER\t\t125\t1\tIfcReal\t1\nPARAM\t2456a8c7-8dcd-44e8-bdba-ef5b9b79fb89\tPset_CoilTypeCommon.OperationalTemperatureRange[Type]\tMULTILINETEXT\t\t125\t1\tPropertyBoundedValue\t1\nPARAM\t6d3b1212-bbd3-48e1-9ac9-51852365829d\tPset_CoilTypeCommon.PlacementType[Type]\tTEXT\t\t125\t1\tPEnum_CoilPlacementType\t1\nPARAM\tf70977ba-856c-4dc1-a42b-245d8ef89619\tPset_CoilTypeCommon.Reference[Type]\tTEXT\t\t125\t1\tIfcIdentifier\t1\nPARAM\tc859324b-e9c1-4956-8e5b-5d92015e6c7b\tPset_CoilTypeCommon.Status[Type]\tTEXT\t\t125\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t126\tPset_CoilTypeHydronic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t253627e2-3c64-4c7b-a3bb-8e8c652bec04\tPset_CoilTypeHydronic.BypassFactor[Type]\tNUMBER\t\t126\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t07b74403-460f-4850-bb08-9b03637249bf\tPset_CoilTypeHydronic.CoilConnectionDirection[Type]\tTEXT\t\t126\t1\tPEnum_CoilConnectionDirection\t1\nPARAM\tcd327ebc-3cf6-4e36-be81-303b9efa1b57\tPset_CoilTypeHydronic.CoilCoolant[Type]\tTEXT\t\t126\t1\tPEnum_CoilCoolant\t1\nPARAM\t4612ab8e-a4e7-4f95-b4ac-e28128dc3f5c\tPset_CoilTypeHydronic.CoilFaceArea[Type]\tAREA\t\t126\t1\tIfcAreaMeasure\t1\nPARAM\t0e73b0cb-de18-4361-9bef-1a68095cfc3b\tPset_CoilTypeHydronic.CoilFluidArrangement[Type]\tTEXT\t\t126\t1\tPEnum_CoilFluidArrangement\t1\nPARAM\tce75b6e8-a87a-4e84-9c66-30c564c0582c\tPset_CoilTypeHydronic.Fluid[Type]\tMULTILINETEXT\t\t126\t1\tIfcMaterial\t1\nPARAM\tebb3fa2d-6c7a-4d6c-afca-2b0ae1e821ee\tPset_CoilTypeHydronic.FluidPressureRange[Type]\tMULTILINETEXT\t\t126\t1\tPropertyBoundedValue\t1\nPARAM\tfadfaae8-2b13-4eb1-8a30-f496eff565b4\tPset_CoilTypeHydronic.HeatExchangeSurfaceArea[Type]\tAREA\t\t126\t1\tIfcAreaMeasure\t1\nPARAM\tc2dd5c14-be51-4699-924b-a45d29732c4c\tPset_CoilTypeHydronic.PrimarySurfaceArea[Type]\tAREA\t\t126\t1\tIfcAreaMeasure\t1\nPARAM\t06bfab75-ad53-4999-8da5-f9941fa2780c\tPset_CoilTypeHydronic.SecondarySurfaceArea[Type]\tAREA\t\t126\t1\tIfcAreaMeasure\t1\nPARAM\tf0dc62fa-a7bd-4148-adc1-f20bab40a14f\tPset_CoilTypeHydronic.SensibleHeatRatio[Type]\tNUMBER\t\t126\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tcf95cbec-b3d3-40b1-8b7e-426c93ba402d\tPset_CoilTypeHydronic.TotalUACurves[Type]\tMULTILINETEXT\t\t126\t1\tPropertyTableValue\t1\nPARAM\tdb457664-306a-491e-bd6e-88f47027332f\tPset_CoilTypeHydronic.WaterPressureDropCurve[Type]\tMULTILINETEXT\t\t126\t1\tPropertyTableValue\t1\nPARAM\t97b1726b-cdc8-4f83-8e8d-a77a72508818\tPset_CoilTypeHydronic.WetCoilFraction[Type]\tNUMBER\t\t126\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t127\tPset_ColumnCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb3fd9772-d8cb-4634-8482-16f007eb827a\tPset_ColumnCommon.FireRating[Type]\tTEXT\t\t127\t1\tIfcLabel\t1\nPARAM\t7adefff2-a8c1-45dc-9f29-bbc9579a4c42\tPset_ColumnCommon.IsExternal[Type]\tYESNO\t\t127\t1\tIfcBoolean\t1\nPARAM\tb2552d99-40a8-46cd-b6c7-d4b7f88baa8a\tPset_ColumnCommon.LoadBearing[Type]\tYESNO\t\t127\t1\tIfcBoolean\t1\nPARAM\tadab403c-4011-4501-bae9-4a0034671c5d\tPset_ColumnCommon.Reference[Type]\tTEXT\t\t127\t1\tIfcIdentifier\t1\nPARAM\tc2ad7792-dc1c-4fe0-bcc9-738a583ad40a\tPset_ColumnCommon.Roll[Type]\tNUMBER\t\t127\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t831ea20e-cc16-4258-a5ea-39e28029c637\tPset_ColumnCommon.Slope[Type]\tNUMBER\t\t127\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t1ec80792-d7b5-4e3a-b4ed-aa29a5186221\tPset_ColumnCommon.Status[Type]\tTEXT\t\t127\t1\tPEnum_ElementStatus\t1\nPARAM\tdb4bbcb6-99f2-464e-b370-3afdbe484b7b\tPset_ColumnCommon.ThermalTransmittance[Type]\tNUMBER\t\t127\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t128\tPset_CommunicationsAppliancePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8864325a-a0f7-4c79-be55-b84bc4f88785\tPset_CommunicationsAppliancePHistory.PowerState[Type]\tMULTILINETEXT\t\t128\t1\tIfcTimeSeries\t1\n#\nGROUP\t129\tPset_CommunicationsApplianceTypeAntenna\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6f6fabbb-23b7-4e1e-8d14-cc9feb5b603f\tPset_CommunicationsApplianceTypeAntenna.AntennaGain[Type]\tNUMBER\t\t129\t1\tIfcRatioMeasure\t1\nPARAM\t8ec02605-eb6d-44c3-9182-de427c32ec83\tPset_CommunicationsApplianceTypeAntenna.AntennaType[Type]\tTEXT\t\t129\t1\tPEnum_AntennaType\t1\nPARAM\tf5abf505-bc74-4066-90c7-405aa363c658\tPset_CommunicationsApplianceTypeAntenna.PolarizationMode[Type]\tTEXT\t\t129\t1\tPEnum_PolarizationMode\t1\nPARAM\t03b225c0-eeca-48ff-b64e-56e047363cf6\tPset_CommunicationsApplianceTypeAntenna.RadiationPattern[Type]\tTEXT\t\t129\t1\tPEnum_RadiationPattern\t1\n#\nGROUP\t130\tPset_CommunicationsApplianceTypeAutomaton\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t63eff004-b048-46c5-a888-5b8d69dff834\tPset_CommunicationsApplianceTypeAutomaton.InputSignalType[Type]\tTEXT\t\t130\t1\tPEnum_InputOutputSignalType\t1\nPARAM\tce6c57a2-6b50-4f90-b2a6-acd16cdbb474\tPset_CommunicationsApplianceTypeAutomaton.OutputSignalType[Type]\tTEXT\t\t130\t1\tPEnum_InputOutputSignalType\t1\n#\nGROUP\t131\tPset_CommunicationsApplianceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t128efd8f-939b-45b4-9751-e5fea674a54b\tPset_CommunicationsApplianceTypeCommon.Reference[Type]\tTEXT\t\t131\t1\tIfcIdentifier\t1\nPARAM\t2382dbf9-2cd2-4c72-aabe-49f12d8e46c8\tPset_CommunicationsApplianceTypeCommon.Status[Type]\tTEXT\t\t131\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t132\tPset_CommunicationsApplianceTypeComputer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7dcbc023-3f6c-4047-93e5-a59373c16de6\tPset_CommunicationsApplianceTypeComputer.StorageCapacity[Type]\tINTEGER\t\t132\t1\tIfcInteger\t1\nPARAM\ta4442ad0-f20c-4a47-8882-e70c26ba256b\tPset_CommunicationsApplianceTypeComputer.UserInterfaceType[Type]\tTEXT\t\t132\t1\tPEnum_ComputerUIType\t1\n#\nGROUP\t133\tPset_CommunicationsApplianceTypeGateway\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2f20be0a-78fb-48ac-a27a-469df03a5925\tPset_CommunicationsApplianceTypeGateway.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t133\t1\tPropertyTableValue\t1\n#\nGROUP\t134\tPset_CommunicationsApplianceTypeIntelligentPeripheral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8de1e5f3-fbb9-4ba3-8b35-6f15cbef779a\tPset_CommunicationsApplianceTypeIntelligentPeripheral.UserCapacity[Type]\tINTEGER\t\t134\t1\tIfcInteger\t1\n#\nGROUP\t135\tPset_CommunicationsApplianceTypeIpNetworkEquipment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3d6fc826-5ecb-4011-9548-75b1ff71efd8\tPset_CommunicationsApplianceTypeIpNetworkEquipment.EquipmentCapacity[Type]\tINTEGER\t\t135\t1\tIfcIntegerCountRateMeasure\t1\nPARAM\tf64d2d68-b433-487e-8fb3-2232b70c3f18\tPset_CommunicationsApplianceTypeIpNetworkEquipment.ManagingSoftware[Type]\tTEXT\t\t135\t1\tIfcLabel\t1\nPARAM\t446bff8f-57da-4fd5-9c37-c6cd5ae14426\tPset_CommunicationsApplianceTypeIpNetworkEquipment.NumberOfCoolingFans[Type]\tINTEGER\t\t135\t1\tIfcCountMeasure\t1\nPARAM\tdd32f7d7-ab82-4a3f-8889-19e0066c6abe\tPset_CommunicationsApplianceTypeIpNetworkEquipment.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t135\t1\tPropertyTableValue\t1\nPARAM\t073456c4-f3e9-4365-b477-ce3f1dcb183e\tPset_CommunicationsApplianceTypeIpNetworkEquipment.NumberOfSlots[Type]\tINTEGER\t\t135\t1\tIfcCountMeasure\t1\nPARAM\t23e47660-13ad-4384-b2f8-f7c0ced6b199\tPset_CommunicationsApplianceTypeIpNetworkEquipment.SupportedProtocol[Type]\tTEXT\t\t135\t1\tIfcLabel\t1\n#\nGROUP\t136\tPset_CommunicationsApplianceTypeModem\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tabc2683f-71af-4564-8c22-2feaac8d26d9\tPset_CommunicationsApplianceTypeModem.CommonInterfaceType[Type]\tTEXT\t\t136\t1\tPEnum_CommonInterfaceType\t1\nPARAM\tddf3cd5f-5d98-42e9-baf9-3a48436bd34d\tPset_CommunicationsApplianceTypeModem.NumberOfCommonInterfaces[Type]\tMULTILINETEXT\t\t136\t1\tPropertyTableValue\t1\nPARAM\t1b7875a8-adfe-48b0-be89-09be80d6d0ae\tPset_CommunicationsApplianceTypeModem.NumberOfTrafficInterfaces[Type]\tMULTILINETEXT\t\t136\t1\tPropertyTableValue\t1\nPARAM\ta0467c65-a212-42b6-bda2-17d1e490596f\tPset_CommunicationsApplianceTypeModem.TrafficInterfaceType[Type]\tTEXT\t\t136\t1\tPEnum_ModemTrafficInterfaceType\t1\n#\nGROUP\t137\tPset_CommunicationsApplianceTypeOpticalLineTerminal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td78057b5-108f-4f69-89cb-0974af687ded\tPset_CommunicationsApplianceTypeOpticalLineTerminal.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t137\t1\tPropertyTableValue\t1\nPARAM\t9c7f5173-4b6d-4414-902f-54c726d17aa5\tPset_CommunicationsApplianceTypeOpticalLineTerminal.NumberOfSlots[Type]\tINTEGER\t\t137\t1\tIfcCountMeasure\t1\n#\nGROUP\t138\tPset_CommunicationsApplianceTypeOpticalNetworkUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t95f25a95-aea2-4d7b-b7d5-3e4ec1854a4e\tPset_CommunicationsApplianceTypeOpticalNetworkUnit.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t138\t1\tPropertyTableValue\t1\nPARAM\t185dc899-d1cf-49c5-939d-f9b0b7f8cfc3\tPset_CommunicationsApplianceTypeOpticalNetworkUnit.OpticalNetworkUnitType[Type]\tTEXT\t\t138\t1\tPEnum_OpticalNetworkUnitType\t1\n#\nGROUP\t139\tPset_CommunicationsApplianceTypeTelecommand\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t866171f1-e481-49e0-9db4-5f867928e74c\tPset_CommunicationsApplianceTypeTelecommand.NumberOfCPUs[Type]\tINTEGER\t\t139\t1\tIfcCountMeasure\t1\nPARAM\t2a01584c-8823-49b4-8838-9cdf90dee3c0\tPset_CommunicationsApplianceTypeTelecommand.NumberOfWorkstations[Type]\tMULTILINETEXT\t\t139\t1\tPropertyTableValue\t1\n#\nGROUP\t140\tPset_CommunicationsApplianceTypeTelephonyExchange\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2a420ea2-bae8-4b2a-a863-bdfe455bedde\tPset_CommunicationsApplianceTypeTelephonyExchange.UserCapacity[Type]\tINTEGER\t\t140\t1\tIfcInteger\t1\n#\nGROUP\t141\tPset_CommunicationsApplianceTypeTransportEquipment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t705fae9c-9225-45a4-870a-6b01a73ce7d4\tPset_CommunicationsApplianceTypeTransportEquipment.ElectricalCrossCapacity[Type]\tTEXT\t\t141\t1\tIfcLabel\t1\nPARAM\tc831208c-d10e-45de-a594-5db85e25f42c\tPset_CommunicationsApplianceTypeTransportEquipment.IsUpgradable[Type]\tYESNO\t\t141\t1\tIfcBoolean\t1\nPARAM\t8c12c428-87df-41c5-9f24-9e4a6638e09e\tPset_CommunicationsApplianceTypeTransportEquipment.NumberOfSlots[Type]\tINTEGER\t\t141\t1\tIfcCountMeasure\t1\nPARAM\tcfcb9ce2-d6d2-47bd-9e1b-ada998c44b3d\tPset_CommunicationsApplianceTypeTransportEquipment.TransportEquipmentAssemblyType[Type]\tTEXT\t\t141\t1\tPEnum_TransportEquipmentAssemblyType\t1\nPARAM\tdeb44c1d-259a-4593-aae4-bf3bb25b6a40\tPset_CommunicationsApplianceTypeTransportEquipment.TransportEquipmentType[Type]\tTEXT\t\t141\t1\tPEnum_TransportEquipmentType\t1\n#\nGROUP\t142\tPset_CompressorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td708edb6-c5d5-46f7-bfe5-797b4d461d94\tPset_CompressorPHistory.CoefficientOfPerformance[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\tb0fd50dd-b619-4404-82ba-f8c5c59a1f41\tPset_CompressorPHistory.CompressionEfficiency[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\t0993af81-9af2-4f87-a1ef-8c046d3bcbf1\tPset_CompressorPHistory.CompressorCapacity[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\t8f43ef1d-b361-437c-9264-ad86a41b676c\tPset_CompressorPHistory.CompressorTotalEfficiency[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\t0e366728-4898-4591-80b0-8a2639252d1b\tPset_CompressorPHistory.CompressorTotalHeatGain[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\t20c4a0d2-4282-49b5-972c-d9236e971670\tPset_CompressorPHistory.EnergyEfficiencyRatio[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\tfd7204fc-708f-4c79-88b5-9fbf56862fb5\tPset_CompressorPHistory.FrictionHeatGain[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\tc5a9053e-361e-4381-a8ad-83e30a90d76a\tPset_CompressorPHistory.FullLoadRatio[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\te0047163-f1c9-4317-9a81-b40d06d440fe\tPset_CompressorPHistory.FullLoadRatioCurve[Type]\tMULTILINETEXT\t\t142\t1\tPropertyListValue\t1\nPARAM\t3ae03352-d4a1-44dd-b14b-ea03fa29449c\tPset_CompressorPHistory.InputPower[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\t1f9f1189-cbab-4230-a636-69b356848f3e\tPset_CompressorPHistory.IsentropicEfficiency[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\t8d19e3bb-1db1-403b-aae1-b2752cb72c04\tPset_CompressorPHistory.LubricantPumpHeatGain[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\t70625587-256a-47dc-ad05-1d1d24d50a4c\tPset_CompressorPHistory.MechanicalEfficiency[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\tfe51ca33-8629-466c-a78d-d224ed2e4187\tPset_CompressorPHistory.ShaftPower[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\tfb4e7b5c-029b-4a3c-b341-5567c3968508\tPset_CompressorPHistory.VolumetricEfficiency[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\n#\nGROUP\t143\tPset_CompressorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf9089c79-40ac-4cb0-b591-003a55a7df29\tPset_CompressorTypeCommon.CompressorSpeed[Type]\tNUMBER\t\t143\t1\tIfcRotationalFrequencyMeasure\t1\nPARAM\t7375421f-ee58-4141-9f08-179a2064721d\tPset_CompressorTypeCommon.HasHotGasBypass[Type]\tYESNO\t\t143\t1\tIfcBoolean\t1\nPARAM\t9514dca5-df4b-4833-bbb6-2c8d8e379d16\tPset_CompressorTypeCommon.IdealCapacity[Type]\tNUMBER\t\t143\t1\tIfcPowerMeasure\t1\nPARAM\t5c865b26-7fc4-4f04-868d-17b26c263529\tPset_CompressorTypeCommon.IdealShaftPower[Type]\tNUMBER\t\t143\t1\tIfcPowerMeasure\t1\nPARAM\t477563bf-3422-4726-80d4-6b738e60bca7\tPset_CompressorTypeCommon.ImpellerDiameter[Type]\tLENGTH\t\t143\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2b537ba4-a010-4feb-93d7-836469fa0c2c\tPset_CompressorTypeCommon.MaximumPartLoadRatio[Type]\tNUMBER\t\t143\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t19fbdf94-d334-409c-b2ee-5ddb0e147b29\tPset_CompressorTypeCommon.MinimumPartLoadRatio[Type]\tNUMBER\t\t143\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4b5b9f0f-ee40-4605-ad2b-a995b3ad9422\tPset_CompressorTypeCommon.NominalCapacity[Type]\tNUMBER\t\t143\t1\tIfcPowerMeasure\t1\nPARAM\t5cd29ad4-03a9-446c-9b12-9d53d507ac32\tPset_CompressorTypeCommon.PowerSource[Type]\tTEXT\t\t143\t1\tPEnum_CompressorTypePowerSource\t1\nPARAM\td9590fb6-9e97-4c09-890d-be8cf35f500a\tPset_CompressorTypeCommon.Reference[Type]\tTEXT\t\t143\t1\tIfcIdentifier\t1\nPARAM\t96597411-e00e-4af2-ae28-10e9afb86e0e\tPset_CompressorTypeCommon.RefrigerantClass[Type]\tTEXT\t\t143\t1\tPEnum_RefrigerantClass\t1\nPARAM\t4260c56c-4990-4d09-948b-80b55623bfed\tPset_CompressorTypeCommon.RefrigerantType[Type]\tMULTILINETEXT\t\t143\t1\tIfcMaterial\t1\nPARAM\td4adeba0-bbdd-4bbc-8728-ac837a5bca26\tPset_CompressorTypeCommon.Status[Type]\tTEXT\t\t143\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t144\tPset_ConcreteElementGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0b835309-a80b-4bd2-b926-5dba3e8911b9\tPset_ConcreteElementGeneral.AssemblyPlace[Type]\tTEXT\t\t144\t1\tPEnum_AssemblyPlace\t1\nPARAM\t5ec998ab-c415-4005-85bb-79282d4e3a4c\tPset_ConcreteElementGeneral.CastingMethod[Type]\tTEXT\t\t144\t1\tPEnum_ConcreteCastingMethod\t1\nPARAM\tfdc0c592-8117-4fea-8710-16a7dbaeaf43\tPset_ConcreteElementGeneral.ConcreteCover[Type]\tLENGTH\t\t144\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t09048132-e559-4ade-ba1f-1319b0c087ee\tPset_ConcreteElementGeneral.ConcreteCoverAtLinks[Type]\tLENGTH\t\t144\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7a7c529f-cad2-4a9c-9c9a-462cc945d184\tPset_ConcreteElementGeneral.ConcreteCoverAtMainBars[Type]\tLENGTH\t\t144\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t25b94066-5aff-448e-8b14-44d62748688c\tPset_ConcreteElementGeneral.ConstructionMethod[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\t9b41d444-d01e-4348-897a-5d399a90f6d9\tPset_ConcreteElementGeneral.ConstructionToleranceClass[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\t3482a8d9-30b4-4a69-9c19-a2a94737577a\tPset_ConcreteElementGeneral.ConstructionType[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\t9bdc4bf3-571f-4634-8cd8-2b05bb215dbe\tPset_ConcreteElementGeneral.DimensionalAccuracyClass[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\tced4016f-8195-4d45-a558-f109a87372f7\tPset_ConcreteElementGeneral.EnvironmentalClass[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\t0845730a-55f9-43e6-886d-e25a53aa8b5e\tPset_ConcreteElementGeneral.ExposureClass[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\t26b5a51e-960d-4ec6-9e65-003fb3c4816c\tPset_ConcreteElementGeneral.FireRating[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\tb0fdc655-bf18-4fdf-b6a9-1d4bf78fdaae\tPset_ConcreteElementGeneral.LifeCycleEnvironmentalLoad[Type]\tTEXT\t\t144\t1\tIfcText\t1\nPARAM\t2e3c8e1a-67b5-4ee0-966d-224d79c6449e\tPset_ConcreteElementGeneral.ReinforcementAreaRatio[Type]\tNUMBER\t\t144\t1\tIfcAreaDensityMeasure\t1\nPARAM\t013d7467-0788-426a-942b-f0b2942a3f0d\tPset_ConcreteElementGeneral.ReinforcementStrengthClass[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\tcbb12e13-7a0d-4d00-9dd2-2db62806d106\tPset_ConcreteElementGeneral.ReinforcementVolumeRatio[Type]\tMASS_DENSITY\t\t144\t1\tIfcMassDensityMeasure\t1\nPARAM\tf415fc7a-1d99-4a28-94f9-c694105df498\tPset_ConcreteElementGeneral.ServiceLife[Type]\tNUMBER\t\t144\t1\tIfcTimeMeasure\t1\nPARAM\tdf767ec3-4038-4c9e-bfcc-df0765ff4b27\tPset_ConcreteElementGeneral.StrengthClass[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\taab7b612-60d7-4ae9-8e91-a4bed643222e\tPset_ConcreteElementGeneral.StructuralClass[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\n#\nGROUP\t145\tPset_ConcreteElementQuantityGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc0550cab-f105-4fb3-a432-1fd54028f791\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryDescription[Type]\tTEXT\t\t145\t1\tIfcLabel\t1\nPARAM\td23b5193-a9ca-4e6d-a27d-769cd6d48aac\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryGroupCode[Type]\tTEXT\t\t145\t1\tIfcLabel\t1\nPARAM\td930c73c-9d55-4312-81b5-22fb3e2ee739\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryMaterial[Type]\tTEXT\t\t145\t1\tIfcLabel\t1\nPARAM\t2e2cca24-e418-49c4-8828-9e31d6d3c59e\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryMaterialSpecificationReference[Type]\tMULTILINETEXT\t\t145\t1\tIfcExternalReference\t1\nPARAM\ta0e4f567-fd3d-49f7-85ee-3d4aa78abc3f\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryQuantityByNumberOfItems[Type]\tINTEGER\t\t145\t1\tIfcCountMeasure\t1\nPARAM\tb86f8a68-50aa-4a16-8fda-7a0851589c9a\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryQuantityByWeight[Type]\tNUMBER\t\t145\t1\tIfcMassMeasure\t1\nPARAM\tcc9b2e24-2456-42ae-bf9b-248bb211728d\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessorySize[Type]\tTEXT\t\t145\t1\tIfcLabel\t1\nPARAM\tc6c94c41-1230-4fdf-9f44-6f454094e0b4\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryType[Type]\tTEXT\t\t145\t1\tIfcLabel\t1\nPARAM\t0c9b39f1-cb05-40f3-8724-1ab1ab33760f\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryTypeSpecificationReference[Type]\tMULTILINETEXT\t\t145\t1\tIfcExternalReference\t1\nPARAM\tab2fcd46-5e83-4763-ac69-33e42b1d3033\tPset_ConcreteElementQuantityGeneral.TotalConcreteQuantity[Type]\tVOLUME\t\t145\t1\tIfcVolumeMeasure\t1\nPARAM\t1bb3abe2-f082-41e3-be4d-2ce47e859f4a\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarDiameter[Type]\tLENGTH\t\t145\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7f16854c-248c-4be4-9455-438b7f50f457\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarQuantity[Type]\tNUMBER\t\t145\t1\tIfcMassMeasure\t1\nPARAM\t379f840b-a1ee-4cc5-b8a1-b219a4774dcc\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarSteelGrade[Type]\tTEXT\t\t145\t1\tIfcLabel\t1\nPARAM\tc1ec8668-1742-4c8c-bb9c-392cda5d6414\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarSteelGradeSpecificationReference[Type]\tMULTILINETEXT\t\t145\t1\tIfcExternalReference\t1\n#\nGROUP\t146\tPset_ConcreteElementSurfaceFinishQuantityGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb0bfe41a-f8f6-4c5b-a4a7-d381e5f5febc\tPset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceArea[Type]\tAREA\t\t146\t1\tIfcAreaMeasure\t1\nPARAM\tbd8f0cf2-be3e-4e52-894e-67a00d7b6ef2\tPset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceClass[Type]\tTEXT\t\t146\t1\tIfcLabel\t1\nPARAM\t28e8a6ba-cb00-496d-a8d9-264c7d49b189\tPset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceType[Type]\tTEXT\t\t146\t1\tIfcLabel\t1\nPARAM\t70642b13-2541-4b08-83d4-48cdde9ce902\tPset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceArea[Type]\tAREA\t\t146\t1\tIfcAreaMeasure\t1\nPARAM\t67627a1c-ba52-4452-8df8-b2d67b4cecb2\tPset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceClass[Type]\tTEXT\t\t146\t1\tIfcLabel\t1\nPARAM\t39cddf51-d2c8-4544-90a3-3e974257a52c\tPset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceTextureDescription[Type]\tTEXT\t\t146\t1\tIfcText\t1\nPARAM\tfe2143f4-8355-4962-9c9d-d8a21927dd52\tPset_ConcreteElementSurfaceFinishQuantityGeneral.SurfaceDescriptionDocReference[Type]\tMULTILINETEXT\t\t146\t1\tIfcExternalReference\t1\n#\nGROUP\t147\tPset_CondenserPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t06d1585f-bd41-493b-a062-c7e2f650abca\tPset_CondenserPHistory.CompressorCondenserHeatGain[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\ta672a52a-015e-4d22-9f31-b8b4814f5ca6\tPset_CondenserPHistory.CompressorCondenserPressureDrop[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\tf078075c-5741-40fc-90f2-a63fa39de744\tPset_CondenserPHistory.CondenserMeanVoidFraction[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\t8aeec34b-67a7-4e32-a364-18c01ae4a3ae\tPset_CondenserPHistory.CondensingTemperature[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\te1cace10-c9a4-4afa-bb02-61b77b96e561\tPset_CondenserPHistory.ExteriorHeatTransferCoefficient[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\t2212335d-1e37-4199-aea1-85b3817065bf\tPset_CondenserPHistory.HeatRejectionRate[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\t1825f3ae-1f14-4b8a-85b5-ec68bbe89c61\tPset_CondenserPHistory.InteriorHeatTransferCoefficient[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\t58ccf0d8-ad4d-4dc1-abe3-78acf4049814\tPset_CondenserPHistory.LogarithmicMeanTemperatureDifference[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\tad7512e0-968e-4861-9fa2-b18ea927fd42\tPset_CondenserPHistory.RefrigerantFoulingResistance[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\tffc706b2-cd01-4ab7-b04c-c92edf3765ff\tPset_CondenserPHistory.UAcurves[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\tf923daf7-21ee-4f19-b802-128160444ec3\tPset_CondenserPHistory.WaterFoulingResistance[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\n#\nGROUP\t148\tPset_CondenserTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t59add430-52ed-45e3-bcef-49a324be4c39\tPset_CondenserTypeCommon.ExternalSurfaceArea[Type]\tAREA\t\t148\t1\tIfcAreaMeasure\t1\nPARAM\tdc5768a4-f478-487c-9002-9254279dbf10\tPset_CondenserTypeCommon.InternalRefrigerantVolume[Type]\tVOLUME\t\t148\t1\tIfcVolumeMeasure\t1\nPARAM\t08d774d4-0dc4-4088-9505-5ac4e917de0f\tPset_CondenserTypeCommon.InternalSurfaceArea[Type]\tAREA\t\t148\t1\tIfcAreaMeasure\t1\nPARAM\t063d9000-bba4-452c-9c1b-fbfa625adf81\tPset_CondenserTypeCommon.InternalWaterVolume[Type]\tVOLUME\t\t148\t1\tIfcVolumeMeasure\t1\nPARAM\t9566a6fa-3730-4cdf-a2f5-9ff42c12916f\tPset_CondenserTypeCommon.NominalHeatTransferArea[Type]\tAREA\t\t148\t1\tIfcAreaMeasure\t1\nPARAM\t2c2202ab-e853-46b0-854c-ac469f88b616\tPset_CondenserTypeCommon.NominalHeatTransferCoefficient[Type]\tNUMBER\t\t148\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\ta9691c3e-ae1d-4fb4-842a-1a95d5d7ed56\tPset_CondenserTypeCommon.Reference[Type]\tTEXT\t\t148\t1\tIfcIdentifier\t1\nPARAM\t8a0e0212-9167-4e5c-ad6a-0a7263b3ab21\tPset_CondenserTypeCommon.RefrigerantClass[Type]\tTEXT\t\t148\t1\tPEnum_RefrigerantClass\t1\nPARAM\t76a44ffd-00a6-448f-8b20-7e41523e40d3\tPset_CondenserTypeCommon.RefrigerantType[Type]\tMULTILINETEXT\t\t148\t1\tIfcMaterial\t1\nPARAM\ta3df8019-23d1-433a-a795-51812fb92b6b\tPset_CondenserTypeCommon.Status[Type]\tTEXT\t\t148\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t149\tPset_Condition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5ce0e535-10bb-4044-be13-85318ad417ce\tPset_Condition.AssessmentCondition[Type]\tTEXT\t\t149\t1\tIfcLabel\t1\nPARAM\tac769934-43d2-4811-ac3f-5f62eac81a96\tPset_Condition.AssessmentDate[Type]\tTEXT\t\t149\t1\tIfcDate\t1\nPARAM\t741dd2f6-f1d5-4f73-9459-c14ad4cfe95d\tPset_Condition.AssessmentDescription[Type]\tTEXT\t\t149\t1\tIfcText\t1\nPARAM\t2050d3a6-3b5d-4ad9-b9e4-49bc4ead1d8e\tPset_Condition.AssessmentFrequency[Type]\tNUMBER\t\t149\t1\tIfcTimeMeasure\t1\nPARAM\t7f11a73d-57ce-49ed-a3b8-b29b0a7603aa\tPset_Condition.AssessmentMethod[Type]\tMULTILINETEXT\t\t149\t1\tIfcDocumentReference\t1\nPARAM\t77d89a7e-b4a0-455d-8a44-d7d0f2b86cc7\tPset_Condition.AssessmentType[Type]\tTEXT\t\t149\t1\tIfcLabel\t1\nPARAM\tb4ff4054-1d89-4520-a977-76f0943d4829\tPset_Condition.LastAssessmentReport[Type]\tTEXT\t\t149\t1\tIfcLabel\t1\nPARAM\te11b0457-3bb6-4cd4-bf18-3f38927114b0\tPset_Condition.NextAssessmentDate[Type]\tTEXT\t\t149\t1\tIfcDate\t1\n#\nGROUP\t150\tPset_ConstructionAdministration\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7333d9b7-56bf-4d2b-b995-d80a660feaf4\tPset_ConstructionAdministration.ProcurementMethod[Type]\tTEXT\t\t150\t1\tIfcLabel\t1\nPARAM\t457d6b73-c35f-4a98-8d89-415b73684ebd\tPset_ConstructionAdministration.SpecificationSectionNumber[Type]\tTEXT\t\t150\t1\tIfcLabel\t1\nPARAM\t9e3c0dfa-597a-4d84-8619-a54dcac3f8de\tPset_ConstructionAdministration.SubmittalIdentifer[Type]\tTEXT\t\t150\t1\tIfcLabel\t1\n#\nGROUP\t151\tPset_ConstructionOccurence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8fab0258-a573-4ae7-bc6a-184dc4cc4fa6\tPset_ConstructionOccurence.AssetIdentifier[Type]\tTEXT\t\t151\t1\tIfcLabel\t1\nPARAM\t7ea55c98-72a9-41a2-9f93-8bcb7ed8b186\tPset_ConstructionOccurence.InstallationDate[Type]\tTEXT\t\t151\t1\tIfcDate\t1\nPARAM\tff935ad6-00c7-438f-9945-287c4e26e215\tPset_ConstructionOccurence.ModelNumber[Type]\tTEXT\t\t151\t1\tIfcLabel\t1\nPARAM\ta532099a-562a-4a6a-acc9-8a37396c843b\tPset_ConstructionOccurence.TagNumber[Type]\tTEXT\t\t151\t1\tIfcLabel\t1\n#\nGROUP\t152\tPset_ConstructionResource\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t775acf9a-22e3-47c4-9ef4-c43611740340\tPset_ConstructionResource.ActualCompletion[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\tc1142b8d-5ab4-46bb-a93d-1794fd773140\tPset_ConstructionResource.ActualCost[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\tdf47696f-d7b0-4b85-aa94-dd2753f39503\tPset_ConstructionResource.ActualWork[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\td15a5882-4bf7-4c85-bfda-7100a8c20a1a\tPset_ConstructionResource.ActualWorkTime[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\t12a66427-1567-4781-8627-90d1df0c2622\tPset_ConstructionResource.RemainingCost[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\tae62c7c1-015b-4529-ae1e-ec996d7bfd23\tPset_ConstructionResource.RemainingWork[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\tae3783a7-bdab-4182-bdeb-422e7abcb701\tPset_ConstructionResource.RemainingWorkProgression[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\t8d60610c-0682-4bc2-99b8-ced1c79cff86\tPset_ConstructionResource.ScheduleCompletion[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\t6eec7cd7-e9bd-421e-9324-cadeac449d8b\tPset_ConstructionResource.ScheduleCost[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\taa6f5a38-9c94-41d8-974e-139cd9ceae1c\tPset_ConstructionResource.ScheduleWork[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\t7103efd1-3477-445e-b400-6308a2e6ded7\tPset_ConstructionResource.ScheduleWorkProgression[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\n#\nGROUP\t153\tPset_ControllerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t793313b3-0e5a-4d43-973f-007619a00e3f\tPset_ControllerPHistory.Quality[Type]\tMULTILINETEXT\t\t153\t1\tIfcTimeSeries\t1\nPARAM\t1c43ca2b-5016-4c11-8c4f-78016833efc5\tPset_ControllerPHistory.Status[Type]\tMULTILINETEXT\t\t153\t1\tIfcTimeSeries\t1\nPARAM\tde11a58b-eb3d-46f6-bf2f-55477c1b8769\tPset_ControllerPHistory.Value[Type]\tMULTILINETEXT\t\t153\t1\tIfcTimeSeries\t1\nPARAM\t759c3c33-35ee-44c0-962f-e518468d8960\tPset_ControllerPHistory.ValueHistory[Type]\tMULTILINETEXT\t\t153\t1\tIfcTimeSeries\t1\n#\nGROUP\t154\tPset_ControllerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf21f44e9-2053-4152-9e89-c438cc96ce67\tPset_ControllerTypeCommon.ControlType[Type]\tTEXT\t\t154\t1\tPEnum_ControlType\t1\nPARAM\td16f87d4-8c1c-4d4a-80b7-c69a33535c3c\tPset_ControllerTypeCommon.Reference[Type]\tTEXT\t\t154\t1\tIfcIdentifier\t1\nPARAM\t6c525004-4860-4d9f-aa14-26cc21cff732\tPset_ControllerTypeCommon.SignalFactor[Type]\tNUMBER\t\t154\t1\tIfcReal\t1\nPARAM\teca28b18-efbc-4648-ae51-441480868ceb\tPset_ControllerTypeCommon.SignalOffset[Type]\tNUMBER\t\t154\t1\tIfcReal\t1\nPARAM\t3d231c3d-8989-48a8-8ad6-40f5ce28e442\tPset_ControllerTypeCommon.SignalTime[Type]\tNUMBER\t\t154\t1\tIfcTimeMeasure\t1\nPARAM\tb62593f8-9389-4090-b699-91dcf760603e\tPset_ControllerTypeCommon.Status[Type]\tTEXT\t\t154\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t155\tPset_ControllerTypeFloating\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tea02948a-d450-47ac-940f-de4636355173\tPset_ControllerTypeFloating.ControlType[Type]\tTEXT\t\t155\t1\tPEnum_ControllerTypeFloating\t1\nPARAM\t3adae4b7-42aa-48f4-aa7b-d746a6625645\tPset_ControllerTypeFloating.Labels[Type]\tMULTILINETEXT\t\t155\t1\tPropertyTableValue\t1\nPARAM\t9ef1cd32-ef01-432e-8b31-c3f12ff8849e\tPset_ControllerTypeFloating.Range[Type]\tMULTILINETEXT\t\t155\t1\tPropertyBoundedValue\t1\nPARAM\td1de92ff-ac25-4af9-9bc2-c5b6e47f3abb\tPset_ControllerTypeFloating.SignalFactor[Type]\tNUMBER\t\t155\t1\tIfcReal\t1\nPARAM\t1f21274c-ac92-4cf2-b182-1c4240b72fdf\tPset_ControllerTypeFloating.SignalOffset[Type]\tNUMBER\t\t155\t1\tIfcReal\t1\nPARAM\tf0044d4d-c491-4788-8760-9fbce60107ba\tPset_ControllerTypeFloating.SignalTime[Type]\tNUMBER\t\t155\t1\tIfcTimeMeasure\t1\nPARAM\t8548eb94-0a50-40d3-ab5d-98a792e46ed0\tPset_ControllerTypeFloating.Value[Type]\tMULTILINETEXT\t\t155\t1\tPropertyBoundedValue\t1\n#\nGROUP\t156\tPset_ControllerTypeMultiPosition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf941a45e-e6b5-442f-9c39-ba25b8accd52\tPset_ControllerTypeMultiPosition.ControlType[Type]\tTEXT\t\t156\t1\tPEnum_ControllerMultiPositionType\t1\nPARAM\ta3eb3fc7-093a-4307-9527-b68455cc1b40\tPset_ControllerTypeMultiPosition.IntegerRange[Type]\tMULTILINETEXT\t\t156\t1\tPropertyBoundedValue\t1\nPARAM\t405ee6ba-8e20-483e-adce-2bb3ad967c72\tPset_ControllerTypeMultiPosition.Labels[Type]\tMULTILINETEXT\t\t156\t1\tPropertyTableValue\t1\nPARAM\tccaa5da4-45c7-4f36-8d12-09a6bd362ab7\tPset_ControllerTypeMultiPosition.Range[Type]\tMULTILINETEXT\t\t156\t1\tPropertyBoundedValue\t1\nPARAM\td57c39cb-fb8b-4d61-817f-131127bfc0d2\tPset_ControllerTypeMultiPosition.Value[Type]\tMULTILINETEXT\t\t156\t1\tPropertyBoundedValue\t1\n#\nGROUP\t157\tPset_ControllerTypeProgrammable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6910ef7a-1893-4887-a62e-40e789cae1ca\tPset_ControllerTypeProgrammable.Application[Type]\tTEXT\t\t157\t1\tPEnum_ControllerApplication\t1\nPARAM\t0c1e8e85-25fc-49a4-bd51-2daf8f7ac70d\tPset_ControllerTypeProgrammable.ControlType[Type]\tTEXT\t\t157\t1\tPEnum_ControllerTypeProgrammable\t1\nPARAM\tad2e7140-98c5-4e21-bc6b-d39659a4f8ad\tPset_ControllerTypeProgrammable.FirmwareVersion[Type]\tTEXT\t\t157\t1\tIfcLabel\t1\nPARAM\t5a8acf8b-578f-4502-b268-2e790a62d75b\tPset_ControllerTypeProgrammable.SoftwareVersion[Type]\tTEXT\t\t157\t1\tIfcLabel\t1\n#\nGROUP\t158\tPset_ControllerTypeProportional\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4d931a44-6be4-4903-a441-a52cd9c985c4\tPset_ControllerTypeProportional.ControlType[Type]\tTEXT\t\t158\t1\tPEnum_ControllerProportionalType\t1\nPARAM\tc1e67567-f0b6-414e-a844-6d31a13034d4\tPset_ControllerTypeProportional.DerivativeConstant[Type]\tNUMBER\t\t158\t1\tIfcReal\t1\nPARAM\t0b0eddbf-4a25-4546-a4b1-9431811da0df\tPset_ControllerTypeProportional.IntegralConstant[Type]\tNUMBER\t\t158\t1\tIfcReal\t1\nPARAM\tef00002d-f57a-4599-ac21-e28feea3bcc6\tPset_ControllerTypeProportional.Labels[Type]\tMULTILINETEXT\t\t158\t1\tPropertyTableValue\t1\nPARAM\tb8066893-bdb1-4c0a-a9e0-794cbcfbb92c\tPset_ControllerTypeProportional.ProportionalConstant[Type]\tNUMBER\t\t158\t1\tIfcReal\t1\nPARAM\t78c0de2b-3c36-4991-8670-6d7221fe9d4a\tPset_ControllerTypeProportional.Range[Type]\tMULTILINETEXT\t\t158\t1\tPropertyBoundedValue\t1\nPARAM\td70bdce0-0cef-4389-935c-50122116b8f2\tPset_ControllerTypeProportional.SignalFactor1[Type]\tNUMBER\t\t158\t1\tIfcReal\t1\nPARAM\t494b85f3-fd0d-435a-82bf-e9cf88fc6663\tPset_ControllerTypeProportional.SignalFactor2[Type]\tNUMBER\t\t158\t1\tIfcReal\t1\nPARAM\ta08b68f0-69aa-4b0d-be34-e82d938bbc1a\tPset_ControllerTypeProportional.SignalTime1[Type]\tNUMBER\t\t158\t1\tIfcTimeMeasure\t1\nPARAM\t396fe37e-e2bb-4548-82b6-9cf2148169da\tPset_ControllerTypeProportional.SignalTime2[Type]\tNUMBER\t\t158\t1\tIfcTimeMeasure\t1\nPARAM\t4bd7b409-5f1d-460b-8d94-53174824c9aa\tPset_ControllerTypeProportional.SignalTimeDecrease[Type]\tNUMBER\t\t158\t1\tIfcTimeMeasure\t1\nPARAM\tdcb5a8c8-8825-42ae-9772-bc1882404640\tPset_ControllerTypeProportional.SignalTimeIncrease[Type]\tNUMBER\t\t158\t1\tIfcTimeMeasure\t1\nPARAM\te75d6b69-7605-47ac-b840-bcf1ff4100b2\tPset_ControllerTypeProportional.Value[Type]\tMULTILINETEXT\t\t158\t1\tPropertyBoundedValue\t1\n#\nGROUP\t159\tPset_ControllerTypeTwoPosition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8a0096a6-4cfb-47b5-96bb-9a41121f278c\tPset_ControllerTypeTwoPosition.BandWidth[Type]\tNUMBER\t\t159\t1\tIfcReal\t1\nPARAM\t15685b7d-a1d9-44a4-8ed7-8c0ddd19468e\tPset_ControllerTypeTwoPosition.ControlType[Type]\tTEXT\t\t159\t1\tPEnum_ControllerTwoPositionType\t1\nPARAM\t10460b58-bd72-4b42-b313-27dc5c1b4135\tPset_ControllerTypeTwoPosition.Labels[Type]\tMULTILINETEXT\t\t159\t1\tPropertyTableValue\t1\nPARAM\t35198438-134e-4976-9944-54f2e652a81f\tPset_ControllerTypeTwoPosition.Polarity[Type]\tYESNO\t\t159\t1\tIfcBoolean\t1\nPARAM\t931bc595-754e-47dd-a9b2-354bbb799a58\tPset_ControllerTypeTwoPosition.Value[Type]\tYESNO\t\t159\t1\tIfcBoolean\t1\n#\nGROUP\t160\tPset_CooledBeamPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7ff6572b-330c-4fa7-9d75-f6e41bcc3a4c\tPset_CooledBeamPHistory.BeamCoolingCapacity[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t09e21a1f-4cd8-49c5-aeef-395ea8cdae33\tPset_CooledBeamPHistory.BeamHeatingCapacity[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\tdff88f8d-8a76-4d0b-bee8-95594f4e25c8\tPset_CooledBeamPHistory.CoolingWaterFlowRate[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\td57d8241-d056-4a78-867b-11cb47c94a18\tPset_CooledBeamPHistory.CorrectionFactorForCooling[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t0fc9ecf1-328b-403c-8faa-1bd407704600\tPset_CooledBeamPHistory.CorrectionFactorForHeating[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\taff2e65a-2c88-426b-9b96-30020f40a495\tPset_CooledBeamPHistory.HeatingWaterFlowRate[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t7b81b37f-2495-4430-8abf-777227a810ca\tPset_CooledBeamPHistory.ReturnWaterTemperatureCooling[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\td0d667da-d4f8-4b02-99b3-65b521c2cd0b\tPset_CooledBeamPHistory.ReturnWaterTemperatureHeating[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t3ee98a29-9431-4bbb-bc82-e069d6502697\tPset_CooledBeamPHistory.SupplyWaterTemperatureCooling[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t5bf39402-2ff6-47ec-803f-df81e068def3\tPset_CooledBeamPHistory.SupplyWaterTemperatureHeating[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t6136d047-ea8f-44c4-871c-a5d342d7db2a\tPset_CooledBeamPHistory.TotalCoolingCapacity[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t0b28ddbe-0965-44b2-91f8-60add852a983\tPset_CooledBeamPHistory.TotalHeatingCapacity[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t9f104ed3-9ac2-4dad-a42e-0315e6519456\tPset_CooledBeamPHistory.WaterPressureDropCurves[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\n#\nGROUP\t161\tPset_CooledBeamPHistoryActive\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3fbdb793-dbca-4616-92c0-9209c026f9d2\tPset_CooledBeamPHistoryActive.AirFlowRate[Type]\tMULTILINETEXT\t\t161\t1\tIfcTimeSeries\t1\nPARAM\t48fdd621-dd04-4c53-9472-a856f21279ba\tPset_CooledBeamPHistoryActive.AirPressureDropCurves[Type]\tMULTILINETEXT\t\t161\t1\tIfcTimeSeries\t1\nPARAM\te7f876c1-b8cf-4bd9-a217-a3b60c4b4490\tPset_CooledBeamPHistoryActive.Throw[Type]\tMULTILINETEXT\t\t161\t1\tIfcTimeSeries\t1\n#\nGROUP\t162\tPset_CooledBeamTypeActive\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t47f1f631-ebb3-4c0c-bd69-b08a7009f1da\tPset_CooledBeamTypeActive.AirFlowConfiguration[Type]\tTEXT\t\t162\t1\tPEnum_CooledBeamActiveAirFlowConfigurationType\t1\nPARAM\t6c5035b8-5adb-4195-80d7-5770a20e19c9\tPset_CooledBeamTypeActive.AirflowRateRange[Type]\tMULTILINETEXT\t\t162\t1\tPropertyBoundedValue\t1\nPARAM\t3c776144-a070-4877-9836-3988fb9965ba\tPset_CooledBeamTypeActive.AirFlowRateRange[Type]\tMULTILINETEXT\t\t162\t1\tPropertyBoundedValue\t1\nPARAM\t73c4a53a-2fda-44ce-99f1-624d82217bf0\tPset_CooledBeamTypeActive.ConnectionSize[Type]\tLENGTH\t\t162\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td47be093-00c4-41d9-a90c-e646dc80f466\tPset_CooledBeamTypeActive.SupplyAirConnectionType[Type]\tTEXT\t\t162\t1\tPEnum_CooledBeamSupplyAirConnectionType\t1\n#\nGROUP\t163\tPset_CooledBeamTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2c67bd08-ce72-4837-956c-5445bb0b43e9\tPset_CooledBeamTypeCommon.CoilLength[Type]\tLENGTH\t\t163\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tca54be34-536c-4378-916e-734338894093\tPset_CooledBeamTypeCommon.CoilWidth[Type]\tLENGTH\t\t163\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1345aaf6-1fd7-45f0-8ddd-301ba2270756\tPset_CooledBeamTypeCommon.ConnectionSize[Type]\tLENGTH\t\t163\t1\tIfcLengthMeasure\t1\nPARAM\t1bcd2022-39b7-49a2-883e-e53f32a6e660\tPset_CooledBeamTypeCommon.FinishColor[Type]\tTEXT\t\t163\t1\tIfcLabel\t1\nPARAM\t7e834c84-cb8d-4343-8b35-26c01a63ef78\tPset_CooledBeamTypeCommon.FinishColour[Type]\tTEXT\t\t163\t1\tIfcLabel\t1\nPARAM\t55bfed40-0f45-460a-a5ce-3572421b36e9\tPset_CooledBeamTypeCommon.IntegratedLightingType[Type]\tTEXT\t\t163\t1\tPEnum_CooledBeamIntegratedLightingType\t1\nPARAM\t25459baa-f391-457b-b394-9604578215a9\tPset_CooledBeamTypeCommon.IsFreeHanging[Type]\tYESNO\t\t163\t1\tIfcBoolean\t1\nPARAM\te4beadda-9b98-4781-9cc0-bc11cff03480\tPset_CooledBeamTypeCommon.Material[Type]\tMULTILINETEXT\t\t163\t1\tIfcMaterial\t1\nPARAM\tf7e0030f-face-41c5-bf0a-dcb2ce28dc43\tPset_CooledBeamTypeCommon.NominalCoolingCapacity[Type]\tNUMBER\t\t163\t1\tIfcPowerMeasure\t1\nPARAM\te8e6ea35-fada-48e3-9e62-04b24370b001\tPset_CooledBeamTypeCommon.NominalHeatingCapacity[Type]\tNUMBER\t\t163\t1\tIfcPowerMeasure\t1\nPARAM\td85f3c57-955d-4fd6-ba30-03b0487a63bd\tPset_CooledBeamTypeCommon.NominalReturnWaterTemperatureCooling[Type]\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t0170bc05-c02d-4ed4-a752-4a11659da82d\tPset_CooledBeamTypeCommon.NominalReturnWaterTemperatureHeating[Type]\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t50bdac1e-c2f8-4e4f-b7f9-d7208d47e45d\tPset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureCooling[Type]\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\ted383c56-6dc2-4db4-86cd-f86923704b83\tPset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureHeating[Type]\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t4fbaaaaf-4c83-456f-9f85-a4a1f817cc95\tPset_CooledBeamTypeCommon.NominalSurroundingHumidityCooling[Type]\tNUMBER\t\t163\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t3cfcbe66-62f1-4130-aeb4-db314686bcf5\tPset_CooledBeamTypeCommon.NominalSurroundingTemperatureCooling[Type]\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t5349059c-a136-4d25-b6a5-eeeacd94bc4d\tPset_CooledBeamTypeCommon.NominalSurroundingTemperatureHeating[Type]\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\te49b6bdc-cdae-4745-83c0-1c04d9a917be\tPset_CooledBeamTypeCommon.NominalWaterFlowCooling[Type]\tNUMBER\t\t163\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tf37878ba-f55e-4a7a-b9e0-c00b861cfc73\tPset_CooledBeamTypeCommon.NominalWaterFlowHeating[Type]\tNUMBER\t\t163\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t45458ab1-1251-4445-adc0-b3352ac4103d\tPset_CooledBeamTypeCommon.PipeConnection[Type]\tTEXT\t\t163\t1\tPEnum_CooledBeamPipeConnection\t1\nPARAM\ta39a088d-62af-4ccd-874c-eac44c076d43\tPset_CooledBeamTypeCommon.PipeConnectionEnum[Type]\tTEXT\t\t163\t1\tPEnum_CooledBeamPipeConnection\t1\nPARAM\taf3488c0-1523-4722-87aa-4e0acb7109ea\tPset_CooledBeamTypeCommon.Reference[Type]\tTEXT\t\t163\t1\tIfcIdentifier\t1\nPARAM\tda946551-9044-4d81-9d06-e7d6afb50c3b\tPset_CooledBeamTypeCommon.Status[Type]\tTEXT\t\t163\t1\tPEnum_ElementStatus\t1\nPARAM\tde72db4a-55b7-4805-bdf4-11212a721ea6\tPset_CooledBeamTypeCommon.WaterFlowControlSystemType[Type]\tTEXT\t\t163\t1\tPEnum_CooledBeamWaterFlowControlSystemType\t1\nPARAM\t3f5b9b14-574b-409e-980b-a892321fc3c7\tPset_CooledBeamTypeCommon.WaterPressureRange[Type]\tMULTILINETEXT\t\t163\t1\tPropertyBoundedValue\t1\nPARAM\t917d349a-8868-4d89-9238-9ddbd9c586df\tPset_CooledBeamTypeCommon.Weight[Type]\tNUMBER\t\t163\t1\tIfcMassMeasure\t1\n#\nGROUP\t164\tPset_CoolingTowerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t38933f42-aefe-4b3b-8d69-a52501ce1225\tPset_CoolingTowerPHistory.Capacity[Type]\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\nPARAM\t873c6998-abcb-4ad4-b455-a9f030aa4958\tPset_CoolingTowerPHistory.HeatTransferCoefficient[Type]\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\nPARAM\t9b33f29d-2eea-4903-b17a-37809cd21f25\tPset_CoolingTowerPHistory.Performance[Type]\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\nPARAM\t7b09ea9b-64f0-46cb-aa35-e4ab8a875928\tPset_CoolingTowerPHistory.SumpHeaterPower[Type]\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\nPARAM\t0130e918-aeda-4ac6-ab8e-11bc5e144407\tPset_CoolingTowerPHistory.UACurve[Type]\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\n#\nGROUP\t165\tPset_CoolingTowerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t838d4a70-117f-4b4b-8747-87fbb93f4196\tPset_CoolingTowerTypeCommon.AmbientDesignDryBulbTemperature[Type]\tNUMBER\t\t165\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t1884bc86-96ca-4b57-a705-130c0f8eda10\tPset_CoolingTowerTypeCommon.AmbientDesignWetBulbTemperature[Type]\tNUMBER\t\t165\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t8b62dc66-b0e1-4e8d-8715-1cfc2dd17257\tPset_CoolingTowerTypeCommon.BasinReserveVolume[Type]\tVOLUME\t\t165\t1\tIfcVolumeMeasure\t1\nPARAM\t70c93324-14fb-49de-87e1-843556a61937\tPset_CoolingTowerTypeCommon.CapacityControl[Type]\tTEXT\t\t165\t1\tPEnum_CoolingTowerCapacityControl\t1\nPARAM\tbf2a689e-28f3-4ca7-9426-13330e0ed94b\tPset_CoolingTowerTypeCommon.CasingMaterial[Type]\tMULTILINETEXT\t\t165\t1\tIfcMaterial\t1\nPARAM\t5d1e5c96-233d-46d6-a71b-64d462ea7e1b\tPset_CoolingTowerTypeCommon.CircuitType[Type]\tTEXT\t\t165\t1\tPEnum_CoolingTowerCircuitType\t1\nPARAM\t947fdeae-7fa4-441e-bd7d-3e8aacf25f49\tPset_CoolingTowerTypeCommon.ControlStrategy[Type]\tTEXT\t\t165\t1\tPEnum_CoolingTowerControlStrategy\t1\nPARAM\tc920b70c-5ea8-466c-ab72-f74f2aaf3e86\tPset_CoolingTowerTypeCommon.FillMaterial[Type]\tMULTILINETEXT\t\t165\t1\tIfcMaterial\t1\nPARAM\t75167223-2017-4588-9ca6-428f127fec70\tPset_CoolingTowerTypeCommon.FlowArrangement[Type]\tTEXT\t\t165\t1\tPEnum_CoolingTowerFlowArrangement\t1\nPARAM\td4e42c6e-a911-4f88-a337-2cd52b73f019\tPset_CoolingTowerTypeCommon.LiftElevationDifference[Type]\tLENGTH\t\t165\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t87d3e3e0-2ad1-41a7-9dbb-9cd60bd4b826\tPset_CoolingTowerTypeCommon.NominalCapacity[Type]\tNUMBER\t\t165\t1\tIfcPowerMeasure\t1\nPARAM\tff72317b-d186-4660-b6eb-d9e3cc9727c3\tPset_CoolingTowerTypeCommon.NumberOfCells[Type]\tINTEGER\t\t165\t1\tIfcCountMeasure\t1\nPARAM\tc220a41f-886b-4de1-8944-8015fb4d23c8\tPset_CoolingTowerTypeCommon.OperationTemperatureRange[Type]\tNUMBER\t\t165\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\td679a2c0-16af-4d07-9337-456f85c7cfdd\tPset_CoolingTowerTypeCommon.Reference[Type]\tTEXT\t\t165\t1\tIfcIdentifier\t1\nPARAM\t1530e590-7861-4787-8ce5-e4f25ac1fb99\tPset_CoolingTowerTypeCommon.SprayType[Type]\tTEXT\t\t165\t1\tPEnum_CoolingTowerSprayType\t1\nPARAM\t9f8e684c-5ee2-4fc4-966b-9a4e8501d54e\tPset_CoolingTowerTypeCommon.Status[Type]\tTEXT\t\t165\t1\tPEnum_ElementStatus\t1\nPARAM\t9d722b05-4ee7-436f-81f1-1b0dd6393406\tPset_CoolingTowerTypeCommon.WaterRequirement[Type]\tNUMBER\t\t165\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t3ecdee4e-bb4e-4e8b-952d-86c530cb2fcb\tPset_CoolingTowerTypeCommon.Weight[Type]\tNUMBER\t\t165\t1\tIfcMassMeasure\t1\n#\nGROUP\t166\tPset_CourseApplicationConditions\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta7b4c818-49d8-45d8-bd7e-9f9b6bc79a6d\tPset_CourseApplicationConditions.ApplicationTemperature[Type]\tNUMBER\t\t166\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t80cb5cdf-ce28-4220-b11c-bebadf4a8885\tPset_CourseApplicationConditions.WeatherConditions[Type]\tTEXT\t\t166\t1\tIfcText\t1\n#\nGROUP\t167\tPset_CourseCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t74bb9be7-8c29-4d50-b341-9e72c27cc4d7\tPset_CourseCommon.NominalLength[Type]\tLENGTH\t\t167\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\td0c39e7b-bc1d-44e9-97f0-dc82745ff690\tPset_CourseCommon.NominalThickness[Type]\tLENGTH\t\t167\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\ta851f2af-a964-44b4-a754-967aee54ce4d\tPset_CourseCommon.NominalWidth[Type]\tLENGTH\t\t167\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t168\tPset_CoveringCeiling\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t74318a74-7855-4010-8150-3fcedea8c566\tPset_CoveringCeiling.FragilityRating[Type]\tTEXT\t\t168\t1\tIfcLabel\t1\nPARAM\t21b0af2e-1099-4890-9bdd-1ce30027c75a\tPset_CoveringCeiling.Permeability[Type]\tNUMBER\t\t168\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t51a54828-6a34-4a52-8e42-a416256ec9a4\tPset_CoveringCeiling.TileLength[Type]\tLENGTH\t\t168\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t53b89ada-46fe-41bd-a7db-8484cba0d557\tPset_CoveringCeiling.TileWidth[Type]\tLENGTH\t\t168\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t169\tPset_CoveringCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tba10dcf9-ceaf-483b-bebf-06ddaa6417b6\tPset_CoveringCommon.AcousticRating[Type]\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\tb0dfc39d-f66f-4d1a-81d0-ca3ec3c59d89\tPset_CoveringCommon.Combustible[Type]\tYESNO\t\t169\t1\tIfcBoolean\t1\nPARAM\tf41e96ec-8600-430a-8e64-c010a8e31590\tPset_CoveringCommon.Finish[Type]\tTEXT\t\t169\t1\tIfcText\t1\nPARAM\t8a43a414-683c-439d-8888-60d6662df839\tPset_CoveringCommon.FireRating[Type]\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\t1ac6a7f4-ba48-4401-9a48-e6322467f344\tPset_CoveringCommon.FlammabilityRating[Type]\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\t89f4542d-6c73-470f-b215-8f7d44e77edb\tPset_CoveringCommon.Fragility[Type]\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\t02896e79-d4a4-4c76-8381-00c6504581d9\tPset_CoveringCommon.FragilityRating[Type]\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\t0895ff4d-fe80-47bf-ae21-9b282d814b91\tPset_CoveringCommon.IsExternal[Type]\tYESNO\t\t169\t1\tIfcBoolean\t1\nPARAM\tc020aece-614a-4a59-a056-b24fdfacf6ae\tPset_CoveringCommon.Material[Type]\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\t319e75b6-bc45-4947-a926-5df68da83409\tPset_CoveringCommon.Reference[Type]\tTEXT\t\t169\t1\tIfcIdentifier\t1\nPARAM\t76c286ab-0d5b-4a3f-991e-731a42120310\tPset_CoveringCommon.Status[Type]\tTEXT\t\t169\t1\tPEnum_ElementStatus\t1\nPARAM\ta07e6599-1360-4266-8602-2e806980150c\tPset_CoveringCommon.SurfaceSpreadOfFlame[Type]\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\tdb96843b-d055-42bb-9dfb-abbf5ec656c5\tPset_CoveringCommon.ThermalTransmittance[Type]\tNUMBER\t\t169\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t90a4b463-418f-4483-ade8-567e6e7bc2dc\tPset_CoveringCommon.Thickness[Type]\tLENGTH\t\t169\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0f0b9392-1942-4a87-aca3-b63dbcdd4ebb\tPset_CoveringCommon.TotalThickness[Type]\tLENGTH\t\t169\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t170\tPset_CoveringFlooring\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tff5ee02f-9a7d-4654-93c4-9316f5636359\tPset_CoveringFlooring.HasAntiStaticSurface[Type]\tYESNO\t\t170\t1\tIfcBoolean\t1\nPARAM\tdd5d4147-4cda-4b47-829b-65075973264e\tPset_CoveringFlooring.HasNonSkidSurface[Type]\tYESNO\t\t170\t1\tIfcBoolean\t1\n#\nGROUP\t171\tPset_CoveringTypeMembrane\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tea859473-dd6a-414c-8598-0c08153d4421\tPset_CoveringTypeMembrane.NominalInstallationDepth[Type]\tLENGTH\t\t171\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t91290c97-4d9e-4501-abaa-b01130781417\tPset_CoveringTypeMembrane.NominalTransverseInclination[Type]\tNUMBER\t\t171\t1\tIfcPlaneAngleMeasure\t1\n#\nGROUP\t172\tPset_CurrentInstrumentTransformer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5b6b829a-d220-41d9-a56a-90746b1055b4\tPset_CurrentInstrumentTransformer.AccuracyClass[Type]\tNUMBER\t\t172\t1\tIfcRatioMeasure\t1\nPARAM\t52772677-2b26-44d1-8fb6-040c87cc17fe\tPset_CurrentInstrumentTransformer.AccuracyGrade[Type]\tTEXT\t\t172\t1\tIfcLabel\t1\nPARAM\t35b72b20-38b4-4475-8ead-0377c41b2177\tPset_CurrentInstrumentTransformer.NominalCurrent[Type]\tNUMBER\t\t172\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t9a2aa844-4a2a-4d86-991c-6ece66cf46bb\tPset_CurrentInstrumentTransformer.NominalPower[Type]\tNUMBER\t\t172\t1\tIfcPowerMeasure\t1\nPARAM\t0631541e-98ba-4c29-b1eb-f40dc8270f0e\tPset_CurrentInstrumentTransformer.NumberOfPhases[Type]\tINTEGER\t\t172\t1\tIfcCountMeasure\t1\nPARAM\t98d07115-4e85-4055-aa3f-15f5246a765c\tPset_CurrentInstrumentTransformer.PrimaryCurrent[Type]\tNUMBER\t\t172\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tfa94e2e2-094f-4073-8d27-4449d1cc908e\tPset_CurrentInstrumentTransformer.PrimaryFrequency[Type]\tNUMBER\t\t172\t1\tIfcFrequencyMeasure\t1\nPARAM\tfe587fc6-76a8-47c3-bd1d-fe2c40ff75cd\tPset_CurrentInstrumentTransformer.RatedVoltage[Type]\tMULTILINETEXT\t\t172\t1\tPropertyBoundedValue\t1\nPARAM\tb162c71b-7046-47db-8e86-27dfe6718de2\tPset_CurrentInstrumentTransformer.SecondaryCurrent[Type]\tNUMBER\t\t172\t1\tIfcElectricCurrentMeasure\t1\nPARAM\te9ffb49e-9b33-4cd8-8ffa-4ec99bdad299\tPset_CurrentInstrumentTransformer.SecondaryFrequency[Type]\tNUMBER\t\t172\t1\tIfcFrequencyMeasure\t1\n#\nGROUP\t173\tPset_CurtainWallCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tee6bf7dc-2c1b-4618-813d-5131911f4aa9\tPset_CurtainWallCommon.AcousticRating[Type]\tTEXT\t\t173\t1\tIfcLabel\t1\nPARAM\t7dc4281c-2b3a-48d0-83b8-c588f0d5f46f\tPset_CurtainWallCommon.Combustible[Type]\tYESNO\t\t173\t1\tIfcBoolean\t1\nPARAM\td41f26e1-01c8-40a6-af71-1f8c7103c284\tPset_CurtainWallCommon.FireRating[Type]\tTEXT\t\t173\t1\tIfcLabel\t1\nPARAM\t84f7731d-95af-44a3-8123-9457050f99ca\tPset_CurtainWallCommon.IsExternal[Type]\tYESNO\t\t173\t1\tIfcBoolean\t1\nPARAM\tb66a1670-3c8d-4191-9d71-f2d8953f1e25\tPset_CurtainWallCommon.Reference[Type]\tTEXT\t\t173\t1\tIfcIdentifier\t1\nPARAM\tb598eb0c-4476-4b57-a45a-7382d0272874\tPset_CurtainWallCommon.Status[Type]\tTEXT\t\t173\t1\tPEnum_ElementStatus\t1\nPARAM\t39702f34-8d0f-44e0-bfa7-8f3479ee0ce3\tPset_CurtainWallCommon.SurfaceSpreadOfFlame[Type]\tTEXT\t\t173\t1\tIfcLabel\t1\nPARAM\t8f08ee4e-b34d-458c-b203-513386375d90\tPset_CurtainWallCommon.ThermalTransmittance[Type]\tNUMBER\t\t173\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t174\tPset_DamperOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c7bd0b1-59e6-4002-8ac4-dbb8477f8b16\tPset_DamperOccurrence.SizingMethod[Type]\tTEXT\t\t174\t1\tPEnum_DamperSizingMethod\t1\n#\nGROUP\t175\tPset_DamperPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6079387f-ec91-4adf-a5b5-05e167bdb872\tPset_DamperPHistory.AirFlowRate[Type]\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\nPARAM\te760b2fa-8bd4-4e01-90f3-c857f6987743\tPset_DamperPHistory.BladePositionAngle[Type]\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\nPARAM\t6c191236-b569-4b9d-b357-9ef27c7f94b3\tPset_DamperPHistory.DamperPosition[Type]\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\nPARAM\tab4bca77-8cd7-4394-b638-272133d413be\tPset_DamperPHistory.Leakage[Type]\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\nPARAM\tc6e1ebab-28c8-4400-9e33-d9f9acc3bf3b\tPset_DamperPHistory.PressureDrop[Type]\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\nPARAM\t37582803-e4ff-453d-a186-1453f50d8f06\tPset_DamperPHistory.PressureLossCoefficient[Type]\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\n#\nGROUP\t176\tPset_DamperTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7de2b45-5c6b-4a4c-9293-5350e3c86a16\tPset_DamperTypeCommon.BladeAction[Type]\tTEXT\t\t176\t1\tPEnum_DamperBladeAction\t1\nPARAM\tc8ca0da7-87f7-46b5-b962-99014d43b11f\tPset_DamperTypeCommon.BladeEdge[Type]\tTEXT\t\t176\t1\tPEnum_DamperBladeEdge\t1\nPARAM\t8b39a53d-08fb-4a11-932f-e2539c471678\tPset_DamperTypeCommon.BladeMaterial[Type]\tMULTILINETEXT\t\t176\t1\tIfcMaterial\t1\nPARAM\tcce5480b-7246-4fbe-a0a9-bc7a69fd84d2\tPset_DamperTypeCommon.BladeShape[Type]\tTEXT\t\t176\t1\tPEnum_DamperBladeShape\t1\nPARAM\t576fafde-8c47-4695-b7b2-eddc537928e2\tPset_DamperTypeCommon.BladeThickness[Type]\tLENGTH\t\t176\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te182daa4-7e65-451e-aa4d-6f50cc0ce3be\tPset_DamperTypeCommon.CloseOffRating[Type]\tNUMBER\t\t176\t1\tIfcPressureMeasure\t1\nPARAM\t670ff535-6a9f-465a-9f58-e4ea641aba19\tPset_DamperTypeCommon.FaceArea[Type]\tAREA\t\t176\t1\tIfcAreaMeasure\t1\nPARAM\t968d9d7a-1778-4124-8d64-8ee6bf96dcdd\tPset_DamperTypeCommon.FrameDepth[Type]\tLENGTH\t\t176\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t642b8a87-3319-4a68-89b6-f85df7fcce59\tPset_DamperTypeCommon.FrameMaterial[Type]\tMULTILINETEXT\t\t176\t1\tIfcMaterial\t1\nPARAM\t34014747-c646-4291-bb26-ebbda11117dc\tPset_DamperTypeCommon.FrameThickness[Type]\tLENGTH\t\t176\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf1441756-2756-4e4d-b2b9-fd192e0e119c\tPset_DamperTypeCommon.FrameType[Type]\tTEXT\t\t176\t1\tIfcLabel\t1\nPARAM\t35b4de8d-0c63-47be-8724-4ce255f0cacd\tPset_DamperTypeCommon.LeakageCurve[Type]\tMULTILINETEXT\t\t176\t1\tPropertyTableValue\t1\nPARAM\tdda11036-dec8-49d1-b8db-cdb616ae2e39\tPset_DamperTypeCommon.LeakageFullyClosed[Type]\tNUMBER\t\t176\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t6526e048-1d26-45c6-98f9-9abd6173cfb9\tPset_DamperTypeCommon.LossCoefficentCurve[Type]\tMULTILINETEXT\t\t176\t1\tPropertyTableValue\t1\nPARAM\t8a16d3e9-bc6a-41ca-9c91-f40ce345ba85\tPset_DamperTypeCommon.MaximumAirFlowRate[Type]\tNUMBER\t\t176\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\te1a06733-76de-4cce-b3cf-cb09d132340a\tPset_DamperTypeCommon.MaximumWorkingPressure[Type]\tNUMBER\t\t176\t1\tIfcPressureMeasure\t1\nPARAM\tf8035248-77d6-4a89-984f-1c2c9e0713e9\tPset_DamperTypeCommon.NominalAirFlowRate[Type]\tNUMBER\t\t176\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t070cfae0-1be3-4bba-8819-2fb2aab9566a\tPset_DamperTypeCommon.NumberofBlades[Type]\tINTEGER\t\t176\t1\tIfcInteger\t1\nPARAM\t6685bbec-6ea4-4d8c-aceb-cf3be9b087a8\tPset_DamperTypeCommon.OpenPressureDrop[Type]\tNUMBER\t\t176\t1\tIfcPressureMeasure\t1\nPARAM\tefc881c0-8e2c-484e-8a75-3ea5c6dc7269\tPset_DamperTypeCommon.Operation[Type]\tTEXT\t\t176\t1\tPEnum_DamperOperation\t1\nPARAM\tfb8667db-40e9-485f-ae1c-578c694f4e93\tPset_DamperTypeCommon.Orientation[Type]\tTEXT\t\t176\t1\tPEnum_DamperOrientation\t1\nPARAM\t9f5d1bdf-2793-4eb8-a187-1a3f1169674f\tPset_DamperTypeCommon.Reference[Type]\tTEXT\t\t176\t1\tIfcIdentifier\t1\nPARAM\t12df9dee-551d-4a4c-9d47-6dd4c4d70340\tPset_DamperTypeCommon.RegeneratedSoundCurve[Type]\tMULTILINETEXT\t\t176\t1\tPropertyTableValue\t1\nPARAM\te7742cb8-3da6-4506-b256-de367e59d3b5\tPset_DamperTypeCommon.SealMaterial[Type]\tMULTILINETEXT\t\t176\t1\tIfcMaterial\t1\nPARAM\tc3447631-1f0e-4ac7-ae34-0c151f1d05a8\tPset_DamperTypeCommon.Status[Type]\tTEXT\t\t176\t1\tPEnum_ElementStatus\t1\nPARAM\tb34c1224-623c-425f-b419-cf85e2db862f\tPset_DamperTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t176\t1\tPropertyBoundedValue\t1\nPARAM\t6b3fb26b-a894-4abd-af3c-b1bc812ab674\tPset_DamperTypeCommon.TemperatureRating[Type]\tNUMBER\t\t176\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t2fc7104b-ed10-4afd-9f00-72c4a920635f\tPset_DamperTypeCommon.TorqueRange[Type]\tMULTILINETEXT\t\t176\t1\tPropertyBoundedValue\t1\n#\nGROUP\t177\tPset_DamperTypeControlDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tddeada2e-80bd-447f-bce7-080931556374\tPset_DamperTypeControlDamper.ControlDamperOperation[Type]\tTEXT\t\t177\t1\tPEnum_ControlDamperOperation\t1\nPARAM\t45228df6-a854-4df7-9130-9f4acf400ccd\tPset_DamperTypeControlDamper.TorqueRange[Type]\tMULTILINETEXT\t\t177\t1\tPropertyBoundedValue\t1\n#\nGROUP\t178\tPset_DamperTypeFireDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta9ea1bc6-4918-4601-bdca-b509453c7e59\tPset_DamperTypeFireDamper.ActuationType[Type]\tTEXT\t\t178\t1\tPEnum_FireDamperActuationType\t1\nPARAM\t25600cfb-cb04-400b-9b69-034ca2d85845\tPset_DamperTypeFireDamper.ClosureRatingEnum[Type]\tTEXT\t\t178\t1\tPEnum_FireDamperClosureRating\t1\nPARAM\tcfb4892c-3de8-4bc1-bb7a-4ad0442bab4b\tPset_DamperTypeFireDamper.FireResistanceRating[Type]\tTEXT\t\t178\t1\tIfcLabel\t1\nPARAM\tb1443815-8a9e-4981-a58b-2dc739fce5c9\tPset_DamperTypeFireDamper.FusibleLinkTemperature[Type]\tNUMBER\t\t178\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t179\tPset_DamperTypeFireSmokeDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5289d633-4599-4980-81c2-d0ec999a08d4\tPset_DamperTypeFireSmokeDamper.ActuationType[Type]\tTEXT\t\t179\t1\tPEnum_FireDamperActuationType\t1\nPARAM\t85f89d16-5d9b-4495-aa40-cbcd6c48a35c\tPset_DamperTypeFireSmokeDamper.ClosureRatingEnum[Type]\tTEXT\t\t179\t1\tPEnum_FireDamperClosureRating\t1\nPARAM\te82038f5-132c-41e8-81d0-b174765b3b55\tPset_DamperTypeFireSmokeDamper.ControlType[Type]\tTEXT\t\t179\t1\tIfcLabel\t1\nPARAM\ta545d44b-0eaa-4301-8f13-eafbd656cef4\tPset_DamperTypeFireSmokeDamper.DamperControlType[Type]\tTEXT\t\t179\t1\tIfcLabel\t1\nPARAM\t7ed263c5-1b63-4b08-8dd1-a8e8f8720e7f\tPset_DamperTypeFireSmokeDamper.FireResistanceRating[Type]\tTEXT\t\t179\t1\tIfcLabel\t1\nPARAM\t273d5f58-147f-4a63-84b9-79ff8d6a5c34\tPset_DamperTypeFireSmokeDamper.FusibleLinkTemperature[Type]\tNUMBER\t\t179\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t180\tPset_DamperTypeSmokeDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7737712d-0d7b-4b2c-8bf1-ea13366f4d93\tPset_DamperTypeSmokeDamper.ControlType[Type]\tTEXT\t\t180\t1\tIfcLabel\t1\n#\nGROUP\t181\tPset_DataTransmissionUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t15fde150-6320-44c8-9e6b-e39dd936a328\tPset_DataTransmissionUnit.DataTransmissionUnitUsage[Type]\tTEXT\t\t181\t1\tPEnum_DataTransmissionUnitUsage\t1\nPARAM\t9d758a18-c1d9-4c2b-ab45-5af482dee8b5\tPset_DataTransmissionUnit.SerialInterfaceType[Type]\tTEXT\t\t181\t1\tPEnum_SerialInterfaceType\t1\nPARAM\tbafb18df-62fc-46f3-bbee-a981f448e909\tPset_DataTransmissionUnit.WorkingState[Type]\tTEXT\t\t181\t1\tIfcLabel\t1\n#\nGROUP\t182\tPset_DesignPoint\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t077898df-2c96-42c7-beef-432c66e81055\tPset_DesignPoint.IsDesignPoint[Type]\tYESNO\t\t182\t1\tIfcBoolean\t1\n#\nGROUP\t183\tPset_DiscreteAccessoryAnchorBolt\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc7002279-2123-4604-9086-fecebbf54357\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltDiameter[Type]\tLENGTH\t\t183\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5c34f38b-aa31-4d67-b87f-9ca9b15351ef\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltLength[Type]\tLENGTH\t\t183\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t85f61c4c-2be5-4fa0-a029-a832bf01d8be\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltProtrusionLength[Type]\tLENGTH\t\t183\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb448305d-577d-40b0-bf34-c104850e4e4d\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltThreadLength[Type]\tLENGTH\t\t183\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t184\tPset_DiscreteAccessoryColumnShoe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0aebbdab-77bf-4dbb-bd7f-ca10096b2f2b\tPset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateDepth[Type]\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t92eee213-953b-49a6-848c-7255bcdab023\tPset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateThickness[Type]\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3975044e-9e4e-4b51-8321-35c0f2171b74\tPset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateWidth[Type]\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t91a97ec7-0dd2-4af5-ad90-80716b46ffb1\tPset_DiscreteAccessoryColumnShoe.ColumnShoeCasingDepth[Type]\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td266b84c-0da3-479f-b2e2-8f66ba457aec\tPset_DiscreteAccessoryColumnShoe.ColumnShoeCasingHeight[Type]\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcd959c31-9111-4636-9aac-004c1c3aec21\tPset_DiscreteAccessoryColumnShoe.ColumnShoeCasingWidth[Type]\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t185\tPset_DiscreteAccessoryCornerFixingPlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1258fcb9-fc48-46ad-83f6-c55b3ce52cba\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneX[Type]\tLENGTH\t\t185\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te540f6f9-aa54-4903-8830-b6fa77bdc79e\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneZ[Type]\tLENGTH\t\t185\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t549bfe9c-32c1-422e-b475-11b43e66eda9\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateLength[Type]\tLENGTH\t\t185\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb6ce0c8b-1d6d-44bc-94f1-39056d7dbfae\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateThickness[Type]\tLENGTH\t\t185\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t186\tPset_DiscreteAccessoryDiagonalTrussConnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3fb7472c-489c-4142-b832-8fd1b6d4dbcb\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussBaseBarDiameter[Type]\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc19bb52c-37d3-49ba-8f64-767d5d05501c\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarDiameter[Type]\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5d56d3b5-093f-41ea-a395-f35e5b79a872\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarSpacing[Type]\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2879f131-7556-444d-910b-ff886e53616d\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussHeight[Type]\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t409b40be-a35f-4eca-a75a-8319bbcd18ae\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussLength[Type]\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t07f35153-add9-4c36-8a49-42e08a563269\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussSecondaryBarDiameter[Type]\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t187\tPset_DiscreteAccessoryEdgeFixingPlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td14c0077-2937-4411-8f9a-bcf48988a6c0\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneX[Type]\tLENGTH\t\t187\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6b8080c2-0175-4cef-9cb9-9a87310c342e\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneZ[Type]\tLENGTH\t\t187\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4b5a2427-c3ae-4c8c-a35a-49cbea5e40d7\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateLength[Type]\tLENGTH\t\t187\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7f65d3b2-5bc2-400d-8186-234d70ec9499\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateThickness[Type]\tLENGTH\t\t187\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t188\tPset_DiscreteAccessoryFixingSocket\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tde7d547a-a227-4ec0-a06d-742592ae6a63\tPset_DiscreteAccessoryFixingSocket.FixingSocketHeight[Type]\tLENGTH\t\t188\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t54afac7d-ab95-4089-9697-014ec1b13406\tPset_DiscreteAccessoryFixingSocket.FixingSocketThreadDiameter[Type]\tLENGTH\t\t188\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t14fdb4b3-7bdd-4ed3-9fce-ab9e25904334\tPset_DiscreteAccessoryFixingSocket.FixingSocketThreadLength[Type]\tLENGTH\t\t188\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8dc25762-370f-4462-8f84-653a2fcdc88c\tPset_DiscreteAccessoryFixingSocket.FixingSocketTypeReference[Type]\tMULTILINETEXT\t\t188\t1\tIfcExternalReference\t1\n#\nGROUP\t189\tPset_DiscreteAccessoryLadderTrussConnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td37fc4d3-fa62-4407-b790-b4ed74779e22\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussBaseBarDiameter[Type]\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7457085f-043a-4844-8491-fcd6498300db\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarDiameter[Type]\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tce6fd7f7-4a7b-4fd8-988b-9865fc54e98e\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarSpacing[Type]\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbaa09d83-0ccb-436c-9345-f0af2b3343d7\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussHeight[Type]\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc6fa26e5-1a5d-4f05-9491-c97c1645bf26\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussLength[Type]\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tda7e0ceb-b2cb-48a2-90ca-c867bb9a73e2\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussSecondaryBarDiameter[Type]\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t190\tPset_DiscreteAccessoryStandardFixingPlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4e359bf4-813d-4711-a69f-c7f44105629c\tPset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateDepth[Type]\tLENGTH\t\t190\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta5944b7d-390e-4f4e-99ae-2c180e746cd7\tPset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateThickness[Type]\tLENGTH\t\t190\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t742353a6-0eca-40c7-890e-b76aa4593d6d\tPset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateWidth[Type]\tLENGTH\t\t190\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t191\tPset_DiscreteAccessoryTypeBracket\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t27d2c3b0-9c69-434e-a05d-6c42b212cf74\tPset_DiscreteAccessoryTypeBracket.IsInsulated[Type]\tYESNO\t\t191\t1\tIfcBoolean\t1\n#\nGROUP\t192\tPset_DiscreteAccessoryTypeCableArranger\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2581c8b9-c0b9-4e6c-953d-a6a26da7e093\tPset_DiscreteAccessoryTypeCableArranger.CableArrangerPosition[Type]\tTEXT\t\t192\t1\tPEnum_ArrangerPositionEnum\t1\n#\nGROUP\t193\tPset_DiscreteAccessoryTypeInsulator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta14628a2-e0a7-4846-80a9-4fc7d5d04fe7\tPset_DiscreteAccessoryTypeInsulator.BendingStrength[Type]\tNUMBER\t\t193\t1\tIfcPressureMeasure\t1\nPARAM\t8c5a3fde-1b69-484e-af19-ae4ca6c080da\tPset_DiscreteAccessoryTypeInsulator.BreakdownVoltageTolerance[Type]\tNUMBER\t\t193\t1\tIfcElectricVoltageMeasure\t1\nPARAM\tfcca0987-1ab7-4bb9-ab3f-5a46d2571aff\tPset_DiscreteAccessoryTypeInsulator.CreepageDistance[Type]\tLENGTH\t\t193\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tefe306e1-1996-470e-a8c7-d1c1a85a7a7c\tPset_DiscreteAccessoryTypeInsulator.InstallationMethod[Type]\tTEXT\t\t193\t1\tIfcLabel\t1\nPARAM\tbb31987b-9bd7-4c75-ae64-b01222773063\tPset_DiscreteAccessoryTypeInsulator.InsulationMethod[Type]\tTEXT\t\t193\t1\tPEnum_InsulatorType\t1\nPARAM\t14abf1bc-2d52-4e49-99ea-994fdacc69a3\tPset_DiscreteAccessoryTypeInsulator.InsulationVoltage[Type]\tNUMBER\t\t193\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t8c2dacbd-aaaf-4776-85c2-af6565b39403\tPset_DiscreteAccessoryTypeInsulator.LightningPeakVoltage[Type]\tNUMBER\t\t193\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t97cbd5c1-b036-40b6-8955-454194dbd655\tPset_DiscreteAccessoryTypeInsulator.OperationalTemperatureRange[Type]\tMULTILINETEXT\t\t193\t1\tPropertyBoundedValue\t1\nPARAM\t88838672-11c4-42f0-8d93-19aa03e28c77\tPset_DiscreteAccessoryTypeInsulator.RatedCurrent[Type]\tMULTILINETEXT\t\t193\t1\tPropertyBoundedValue\t1\nPARAM\t232a90f3-e067-400f-b46d-4f84292fe573\tPset_DiscreteAccessoryTypeInsulator.RatedVoltage[Type]\tMULTILINETEXT\t\t193\t1\tPropertyBoundedValue\t1\nPARAM\tf065df44-bb21-4000-ab24-042693db8eff\tPset_DiscreteAccessoryTypeInsulator.RMSWithstandVoltage[Type]\tNUMBER\t\t193\t1\tIfcElectricVoltageMeasure\t1\nPARAM\tafe371bb-6be5-4fb7-a9bd-5bebef0cd962\tPset_DiscreteAccessoryTypeInsulator.Voltage[Type]\tMULTILINETEXT\t\t193\t1\tPropertyBoundedValue\t1\n#\nGROUP\t194\tPset_DiscreteAccessoryTypeLock\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5220d679-69ac-4d3d-aeae-ac19bb9c5fdf\tPset_DiscreteAccessoryTypeLock.InstallationPlan[Type]\tMULTILINETEXT\t\t194\t1\tIfcExternalReference\t1\nPARAM\t730e874c-0afb-43fc-a9cd-4f4a2280a887\tPset_DiscreteAccessoryTypeLock.RequiredClosureSpacing[Type]\tLENGTH\t\t194\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t195\tPset_DiscreteAccessoryTypeRailBrace\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7263c6ce-78d0-49e2-9741-c79bc8a120af\tPset_DiscreteAccessoryTypeRailBrace.IsTemporary[Type]\tYESNO\t\t195\t1\tIfcBoolean\t1\n#\nGROUP\t196\tPset_DiscreteAccessoryTypeRailLubrication\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t81c5c93f-09ac-46d2-9221-eb3cd8abbc8c\tPset_DiscreteAccessoryTypeRailLubrication.LubricationPowerSupplyType[Type]\tTEXT\t\t196\t1\tPEnum_LubricationPowerSupply\t1\nPARAM\tfef45088-6015-49ad-8428-76364a1db47f\tPset_DiscreteAccessoryTypeRailLubrication.LubricationSystemType[Type]\tTEXT\t\t196\t1\tPEnum_LubricationSystemType\t1\nPARAM\tfac70805-330f-4f91-a072-c0569f519992\tPset_DiscreteAccessoryTypeRailLubrication.MaximumNoiseEmissions[Type]\tNUMBER\t\t196\t1\tIfcSoundPowerLevelMeasure\t1\nPARAM\t234dca2b-80e7-4baf-8840-6bafe1a0e872\tPset_DiscreteAccessoryTypeRailLubrication.PositionInTrack[Type]\tTEXT\t\t196\t1\tPEnum_RelativePosition\t1\n#\nGROUP\t197\tPset_DiscreteAccessoryTypeRailPad\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3b07e6a5-1b08-4d76-9e07-b6b4605be52a\tPset_DiscreteAccessoryTypeRailPad.RailPadStiffness[Type]\tTEXT\t\t197\t1\tPEnum_RailPadStiffness\t1\n#\nGROUP\t198\tPset_DiscreteAccessoryTypeSlidingChair\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t72196550-3e26-4d0c-bd2d-824e2e9bb55b\tPset_DiscreteAccessoryTypeSlidingChair.IsSelfLubricated[Type]\tYESNO\t\t198\t1\tIfcBoolean\t1\n#\nGROUP\t199\tPset_DiscreteAccessoryTypeSoundAbsorption\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta270c420-6f82-4a32-9d02-2e1bd04bd26e\tPset_DiscreteAccessoryTypeSoundAbsorption.SoundAbsorptionLimit[Type]\tNUMBER\t\t199\t1\tIfcSoundPowerLevelMeasure\t1\n#\nGROUP\t200\tPset_DiscreteAccessoryTypeTensioningEquipment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1f9654ba-782a-424c-9039-3489e60f4262\tPset_DiscreteAccessoryTypeTensioningEquipment.AssemblyInstruction[Type]\tMULTILINETEXT\t\t200\t1\tIfcExternalReference\t1\nPARAM\tcde216d2-af50-419d-9a1a-9afe0fbc5ab6\tPset_DiscreteAccessoryTypeTensioningEquipment.HasBreakLineLock[Type]\tYESNO\t\t200\t1\tIfcBoolean\t1\nPARAM\t2542f05e-72ca-4710-9a3e-aebcb412df1b\tPset_DiscreteAccessoryTypeTensioningEquipment.RatioOfWireTension[Type]\tNUMBER\t\t200\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td034f492-4843-497d-ad32-22dc02f290e7\tPset_DiscreteAccessoryTypeTensioningEquipment.ReferenceEnvironmentTemperature[Type]\tMULTILINETEXT\t\t200\t1\tPropertyBoundedValue\t1\nPARAM\tc04a1715-4e43-4f20-b05c-2d946550412b\tPset_DiscreteAccessoryTypeTensioningEquipment.TensileStrength[Type]\tNUMBER\t\t200\t1\tIfcPressureMeasure\t1\nPARAM\tfee52eaf-6fce-4900-a688-872e664606ec\tPset_DiscreteAccessoryTypeTensioningEquipment.TransmissionEfficiency[Type]\tNUMBER\t\t200\t1\tIfcRatioMeasure\t1\n#\nGROUP\t201\tPset_DiscreteAccessoryWireLoop\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t29e76998-1630-41e7-ba8f-103fdda8cef6\tPset_DiscreteAccessoryWireLoop.WireDiameter[Type]\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t885c6bab-d4ca-4367-ad58-dff9b7f9ad4c\tPset_DiscreteAccessoryWireLoop.WireEmbeddingLength[Type]\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf1f4e36b-f70f-43b0-bfc2-2a4ba541d8dd\tPset_DiscreteAccessoryWireLoop.WireLoopBasePlateLength[Type]\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfdc96e98-9ddf-4b76-b81a-65e7dfa036d8\tPset_DiscreteAccessoryWireLoop.WireLoopBasePlateThickness[Type]\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5c6d63c1-5293-492d-b404-e4458bec2724\tPset_DiscreteAccessoryWireLoop.WireLoopBasePlateWidth[Type]\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tccd009f2-142c-4909-b63e-8d382ed9dd07\tPset_DiscreteAccessoryWireLoop.WireLoopLength[Type]\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t202\tPset_DistributionBoardOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t69daeacb-ea31-4bae-a2ac-7696893d1043\tPset_DistributionBoardOccurrence.IsMain[Type]\tYESNO\t\t202\t1\tIfcBoolean\t1\nPARAM\t6729af6a-2cf8-4777-b1b8-d057b88040fa\tPset_DistributionBoardOccurrence.IsSkilledOperator[Type]\tYESNO\t\t202\t1\tIfcBoolean\t1\n#\nGROUP\t203\tPset_DistributionBoardTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t080336e3-a0ee-4713-86a3-1d76edf9371a\tPset_DistributionBoardTypeCommon.Reference[Type]\tTEXT\t\t203\t1\tIfcIdentifier\t1\nPARAM\tafbb6801-d2dc-4374-b92f-65bfbab14aa7\tPset_DistributionBoardTypeCommon.Status[Type]\tTEXT\t\t203\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t204\tPset_DistributionBoardTypeDispatchingBoard\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t96622c5c-389b-49e2-8863-b2e1b0d1e368\tPset_DistributionBoardTypeDispatchingBoard.DispatchingBoardType[Type]\tTEXT\t\t204\t1\tPEnum_DispatchingBoardType\t1\nPARAM\t56948e51-8caa-49c1-ab71-0c623a92e556\tPset_DistributionBoardTypeDispatchingBoard.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t204\t1\tPropertyTableValue\t1\n#\nGROUP\t205\tPset_DistributionBoardTypeDistributionFrame\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t30c3f3ec-8391-488a-9b34-9dccdb711610\tPset_DistributionBoardTypeDistributionFrame.PortCapacity[Type]\tINTEGER\t\t205\t1\tIfcInteger\t1\n#\nGROUP\t206\tPset_DistributionChamberElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9148c3d0-f1e1-4d72-8ed2-01b02a87c4cd\tPset_DistributionChamberElementCommon.Reference[Type]\tTEXT\t\t206\t1\tIfcIdentifier\t1\nPARAM\tcc0fb29c-1b83-4852-84fe-8763981d39d5\tPset_DistributionChamberElementCommon.Status[Type]\tTEXT\t\t206\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t207\tPset_DistributionChamberElementTypeFormedDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb0d98606-7dd1-429a-b39f-16104329a3aa\tPset_DistributionChamberElementTypeFormedDuct.AccessCoverLoadRating[Type]\tTEXT\t\t207\t1\tIfcText\t1\nPARAM\t99bcc75a-2d80-47d6-ab30-5928eef89405\tPset_DistributionChamberElementTypeFormedDuct.AccessCoverMaterial[Type]\tMULTILINETEXT\t\t207\t1\tIfcMaterial\t1\nPARAM\t83549367-b305-4d9d-bcb1-ac69b7a33c26\tPset_DistributionChamberElementTypeFormedDuct.BaseMaterial[Type]\tMULTILINETEXT\t\t207\t1\tIfcMaterial\t1\nPARAM\tb01853c3-449c-472b-878d-d3f648b5dbdd\tPset_DistributionChamberElementTypeFormedDuct.BaseThickness[Type]\tLENGTH\t\t207\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5e80f154-a6b1-4d8d-97af-6deea42b120d\tPset_DistributionChamberElementTypeFormedDuct.CableDuctOccupancyRatio[Type]\tNUMBER\t\t207\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tb77fb473-2963-4490-9928-7d975775efd2\tPset_DistributionChamberElementTypeFormedDuct.ClearDepth[Type]\tLENGTH\t\t207\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t48c8da5a-6d42-4332-b428-5c0eb82f8f36\tPset_DistributionChamberElementTypeFormedDuct.ClearWidth[Type]\tLENGTH\t\t207\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9406dbf1-4bc7-4096-b819-8e294acb2c89\tPset_DistributionChamberElementTypeFormedDuct.FillMaterial[Type]\tMULTILINETEXT\t\t207\t1\tIfcMaterial\t1\nPARAM\tfde71a93-a6ba-41ec-85ba-aedcd692adfe\tPset_DistributionChamberElementTypeFormedDuct.WallMaterial[Type]\tMULTILINETEXT\t\t207\t1\tIfcMaterial\t1\nPARAM\t7ec24108-734d-4557-9f6c-9e573ea3cbdb\tPset_DistributionChamberElementTypeFormedDuct.WallThickness[Type]\tLENGTH\t\t207\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t208\tPset_DistributionChamberElementTypeInspectionChamber\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb533b8b2-a3e1-47d5-91a1-827e11d1727e\tPset_DistributionChamberElementTypeInspectionChamber.AccessCoverLoadRating[Type]\tTEXT\t\t208\t1\tIfcText\t1\nPARAM\te7af183a-fa13-4c63-84ea-0f596061b2c1\tPset_DistributionChamberElementTypeInspectionChamber.AccessCoverMaterial[Type]\tMULTILINETEXT\t\t208\t1\tIfcMaterialDefinition\t1\nPARAM\ta24b7fa1-e447-404c-85de-78ada7e9ad49\tPset_DistributionChamberElementTypeInspectionChamber.AccessLengthOrRadius[Type]\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3ec70e2b-fe83-4d32-8e48-8cf3828cb813\tPset_DistributionChamberElementTypeInspectionChamber.AccessWidth[Type]\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta419a033-3265-42ae-98db-d2a740594bba\tPset_DistributionChamberElementTypeInspectionChamber.BaseMaterial[Type]\tMULTILINETEXT\t\t208\t1\tIfcMaterialDefinition\t1\nPARAM\t55e26eaf-4fd4-4d88-ab64-49c832affef5\tPset_DistributionChamberElementTypeInspectionChamber.BaseThickness[Type]\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8a9baf98-711d-4e4d-ab4e-ca5027e067f9\tPset_DistributionChamberElementTypeInspectionChamber.ChamberLengthOrRadius[Type]\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb56952e6-b030-4ab1-acb2-e0ea871454e7\tPset_DistributionChamberElementTypeInspectionChamber.ChamberWidth[Type]\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfd45b1bb-eeb5-4a08-ac03-1c62e43dc8ce\tPset_DistributionChamberElementTypeInspectionChamber.InspectionChamberInvertLevel[Type]\tLENGTH\t\t208\t1\tIfcLengthMeasure\t1\nPARAM\t84f9c748-b131-4852-a71d-18c7ee7533c2\tPset_DistributionChamberElementTypeInspectionChamber.InvertLevel[Type]\tLENGTH\t\t208\t1\tIfcLengthMeasure\t1\nPARAM\te9b7ee54-bd19-4099-a0e6-e2351707f810\tPset_DistributionChamberElementTypeInspectionChamber.SoffitLevel[Type]\tLENGTH\t\t208\t1\tIfcLengthMeasure\t1\nPARAM\t5ff6395d-86ff-4f82-9b11-b3813684bb57\tPset_DistributionChamberElementTypeInspectionChamber.WallMaterial[Type]\tMULTILINETEXT\t\t208\t1\tIfcMaterialDefinition\t1\nPARAM\td24d6e2c-7904-41df-adf9-60b692a54453\tPset_DistributionChamberElementTypeInspectionChamber.WallThickness[Type]\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9551e8dd-5dc4-49c0-88e7-43be39bca685\tPset_DistributionChamberElementTypeInspectionChamber.WithBackdrop[Type]\tYESNO\t\t208\t1\tIfcBoolean\t1\n#\nGROUP\t209\tPset_DistributionChamberElementTypeInspectionPit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t62354e78-f090-424a-b8c4-7a4b1cc92228\tPset_DistributionChamberElementTypeInspectionPit.Depth[Type]\tLENGTH\t\t209\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1cec024d-f759-4c73-aecb-5f3a9e4e28b7\tPset_DistributionChamberElementTypeInspectionPit.Length[Type]\tLENGTH\t\t209\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdbaccebf-a9dc-41af-9109-d42fa4d9700c\tPset_DistributionChamberElementTypeInspectionPit.Width[Type]\tLENGTH\t\t209\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t210\tPset_DistributionChamberElementTypeManhole\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t10d284f7-5e61-415b-9845-53d02edca75e\tPset_DistributionChamberElementTypeManhole.AccessCoverLoadRating[Type]\tTEXT\t\t210\t1\tIfcText\t1\nPARAM\t4d93d457-73b4-4c9e-b1ba-db22f1fcfde6\tPset_DistributionChamberElementTypeManhole.AccessCoverMaterial[Type]\tMULTILINETEXT\t\t210\t1\tIfcMaterialDefinition\t1\nPARAM\t170d8776-3855-4631-ad75-1dc123404d1c\tPset_DistributionChamberElementTypeManhole.AccessLengthOrRadius[Type]\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0db792af-1d04-4b10-89ef-afdbbe12bfec\tPset_DistributionChamberElementTypeManhole.AccessWidth[Type]\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t24d4319e-70f7-4bd9-a7df-06aa6b053fa2\tPset_DistributionChamberElementTypeManhole.BaseMaterial[Type]\tMULTILINETEXT\t\t210\t1\tIfcMaterialDefinition\t1\nPARAM\t7068d4c1-0d0a-4932-9008-bd7a501cda90\tPset_DistributionChamberElementTypeManhole.BaseThickness[Type]\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8f54d3b6-0fb9-4c8f-8eac-38a04cd2666c\tPset_DistributionChamberElementTypeManhole.HasSteps[Type]\tYESNO\t\t210\t1\tIfcBoolean\t1\nPARAM\t242c650d-ebb2-41bc-829d-fccf259847ea\tPset_DistributionChamberElementTypeManhole.InvertLevel[Type]\tLENGTH\t\t210\t1\tIfcLengthMeasure\t1\nPARAM\t5c9669c5-f65d-4551-87e2-13a37950bca1\tPset_DistributionChamberElementTypeManhole.IsAccessibleOnFoot[Type]\tYESNO\t\t210\t1\tIfcBoolean\t1\nPARAM\t0c80f83f-b24b-4f6b-b379-c2c8b6446525\tPset_DistributionChamberElementTypeManhole.IsLocked[Type]\tYESNO\t\t210\t1\tIfcBoolean\t1\nPARAM\tf566044f-2b6a-492a-b119-1956a0628e60\tPset_DistributionChamberElementTypeManhole.IsShallow[Type]\tYESNO\t\t210\t1\tIfcBoolean\t1\nPARAM\t3fe351cc-eedd-44d1-b846-6c9e0b030571\tPset_DistributionChamberElementTypeManhole.NumberOfCableEntries[Type]\tINTEGER\t\t210\t1\tIfcCountMeasure\t1\nPARAM\tad6ee361-df0d-4be6-a610-a493303cd68f\tPset_DistributionChamberElementTypeManhole.NumberOfManholeCovers[Type]\tINTEGER\t\t210\t1\tIfcCountMeasure\t1\nPARAM\t02edc0ed-6457-4803-b2ad-d8cdd37a416b\tPset_DistributionChamberElementTypeManhole.SoffitLevel[Type]\tLENGTH\t\t210\t1\tIfcLengthMeasure\t1\nPARAM\t74d7f6c2-11a7-49f4-8649-fbcd057e0528\tPset_DistributionChamberElementTypeManhole.TypeOfShaft[Type]\tTEXT\t\t210\t1\tPEnum_TypeOfShaft\t1\nPARAM\t651f0061-5e43-43fe-8f91-d328d6f20587\tPset_DistributionChamberElementTypeManhole.WallMaterial[Type]\tMULTILINETEXT\t\t210\t1\tIfcMaterialDefinition\t1\nPARAM\t3e25578c-4b86-459c-8997-6e21f8058bd3\tPset_DistributionChamberElementTypeManhole.WallThickness[Type]\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9e7ee5d4-31f4-4e85-befe-822d25179d93\tPset_DistributionChamberElementTypeManhole.WithBackdrop[Type]\tYESNO\t\t210\t1\tIfcBoolean\t1\n#\nGROUP\t211\tPset_DistributionChamberElementTypeMeterChamber\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6ae860db-c1a0-4ad4-b798-3a3eb65a0816\tPset_DistributionChamberElementTypeMeterChamber.AccessCoverMaterial[Type]\tMULTILINETEXT\t\t211\t1\tIfcMaterialDefinition\t1\nPARAM\t9b0b1cb8-283f-4fa5-b76e-3f89965f99af\tPset_DistributionChamberElementTypeMeterChamber.BaseMaterial[Type]\tMULTILINETEXT\t\t211\t1\tIfcMaterialDefinition\t1\nPARAM\tb69c06ee-24c6-4bd3-a458-c342e205da0d\tPset_DistributionChamberElementTypeMeterChamber.BaseThickness[Type]\tLENGTH\t\t211\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta949a17d-701e-4d68-bf0c-da2fa721017d\tPset_DistributionChamberElementTypeMeterChamber.ChamberLengthOrRadius[Type]\tLENGTH\t\t211\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6249991a-d3fe-40c7-b818-c0097dede054\tPset_DistributionChamberElementTypeMeterChamber.ChamberWidth[Type]\tLENGTH\t\t211\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tab71c12b-c98b-445c-8174-24067b76d731\tPset_DistributionChamberElementTypeMeterChamber.WallMaterial[Type]\tMULTILINETEXT\t\t211\t1\tIfcMaterialDefinition\t1\nPARAM\tf11022f8-5c78-471e-991b-f9bda4109d75\tPset_DistributionChamberElementTypeMeterChamber.WallThickness[Type]\tLENGTH\t\t211\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t212\tPset_DistributionChamberElementTypeSump\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a2a9e70-2c99-44a7-bf86-0821e418d778\tPset_DistributionChamberElementTypeSump.InvertLevel[Type]\tLENGTH\t\t212\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t424cc8ad-301a-4b25-939f-e087baff3301\tPset_DistributionChamberElementTypeSump.Length[Type]\tLENGTH\t\t212\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc8c50465-8c0e-410a-8b6c-849d725a5f74\tPset_DistributionChamberElementTypeSump.SumpInvertLevel[Type]\tLENGTH\t\t212\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3447bdb0-2f59-41da-aa0b-a9dfad6a9008\tPset_DistributionChamberElementTypeSump.Width[Type]\tLENGTH\t\t212\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t213\tPset_DistributionChamberElementTypeTrench\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t857d0e00-bda7-4d55-89ef-7d9006f54158\tPset_DistributionChamberElementTypeTrench.Depth[Type]\tLENGTH\t\t213\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t866b954b-d05f-4ef7-b0af-2d3075dfe1e5\tPset_DistributionChamberElementTypeTrench.InvertLevel[Type]\tLENGTH\t\t213\t1\tIfcLengthMeasure\t1\nPARAM\tb5b3fe4e-f29a-4d10-bec3-33f20997756c\tPset_DistributionChamberElementTypeTrench.Width[Type]\tLENGTH\t\t213\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t214\tPset_DistributionChamberElementTypeValveChamber\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc3539453-466b-4572-b703-214e2b8a7e56\tPset_DistributionChamberElementTypeValveChamber.AccessCoverMaterial[Type]\tMULTILINETEXT\t\t214\t1\tIfcMaterialDefinition\t1\nPARAM\tc91fa953-d072-47f8-9a52-b9821632f1fc\tPset_DistributionChamberElementTypeValveChamber.BaseMaterial[Type]\tMULTILINETEXT\t\t214\t1\tIfcMaterialDefinition\t1\nPARAM\t5da08cfe-3e7b-4387-9cbc-56c9cc3f6ca7\tPset_DistributionChamberElementTypeValveChamber.BaseThickness[Type]\tLENGTH\t\t214\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9207e0b0-45ec-479f-a73c-214fdd482e3d\tPset_DistributionChamberElementTypeValveChamber.ChamberLengthOrRadius[Type]\tLENGTH\t\t214\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc88cbade-d3ff-4efb-b0c4-e3474542d7a6\tPset_DistributionChamberElementTypeValveChamber.ChamberWidth[Type]\tLENGTH\t\t214\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8ecc6bba-2abe-4d2e-9d45-c40af0b2df2b\tPset_DistributionChamberElementTypeValveChamber.WallMaterial[Type]\tMULTILINETEXT\t\t214\t1\tIfcMaterialDefinition\t1\nPARAM\t7dc6e615-b3df-48e1-966d-250ac43542eb\tPset_DistributionChamberElementTypeValveChamber.WallThickness[Type]\tLENGTH\t\t214\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t215\tPset_DistributionFlowElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t57013d45-6177-4726-a03d-bc1d5f0f4dde\tPset_DistributionFlowElementCommon.Reference[Type]\tTEXT\t\t215\t1\tIfcIdentifier\t1\n#\nGROUP\t216\tPset_DistributionPortCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0fb5d1b3-8009-4300-ab87-aeca3a2a380c\tPset_DistributionPortCommon.ColorCode[Type]\tTEXT\t\t216\t1\tIfcLabel\t1\nPARAM\tba44f29a-9c4f-4ec4-8870-7ab4ca683d17\tPset_DistributionPortCommon.ColourCode[Type]\tTEXT\t\t216\t1\tIfcLabel\t1\nPARAM\t08c219ca-a8ee-46d1-82b1-a6567f666121\tPset_DistributionPortCommon.PortNumber[Type]\tINTEGER\t\t216\t1\tIfcInteger\t1\n#\nGROUP\t217\tPset_DistributionPortDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td3a37456-81b8-4d22-ac49-4fbbd99bf7d1\tPset_DistributionPortDuct.ConnectionType[Type]\tTEXT\t\t217\t1\tPEnum_DuctConnectionType\t1\nPARAM\t6039502e-a7ae-46d3-b294-21e85e295cc4\tPset_DistributionPortDuct.PortNumber[Type]\tINTEGER\t\t217\t1\tIfcInteger\t1\n#\nGROUP\t218\tPset_DistributionPortPHistoryCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf0bac08a-24fa-418a-922f-89b2fea4ae87\tPset_DistributionPortPHistoryCable.ApparentPower[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\tcfac59db-0df3-4fc7-a2fb-e2ae36047243\tPset_DistributionPortPHistoryCable.Current[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\te3ab23b7-4fe1-4763-a065-a78e5bb38c95\tPset_DistributionPortPHistoryCable.CurrentHistory[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\t3a3842e5-edfb-4143-91df-102f7add699a\tPset_DistributionPortPHistoryCable.DataReceived[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\t44b0938f-534a-476b-a406-88dd128deb92\tPset_DistributionPortPHistoryCable.DataTransmitted[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\tb0ebbcac-1952-492f-84c2-226367cb9aa5\tPset_DistributionPortPHistoryCable.PowerFactor[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\tebaa7492-1142-469f-9ff6-108c77741ce9\tPset_DistributionPortPHistoryCable.PowerFactorHistory[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\t55631007-91a8-4edd-941d-dd9e36ef893e\tPset_DistributionPortPHistoryCable.ReactivePower[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\te928309d-546a-455a-9e02-0453706ccac5\tPset_DistributionPortPHistoryCable.RealPower[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\t4833d673-8c3f-4433-afd3-a54c01c4bd9c\tPset_DistributionPortPHistoryCable.Voltage[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\td4b46a16-3c3d-49e1-8b1a-0f7bc9432c91\tPset_DistributionPortPHistoryCable.VoltageHistory[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\n#\nGROUP\t219\tPset_DistributionPortPHistoryDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbe90bd2d-108e-466e-92a0-a7cc962b9340\tPset_DistributionPortPHistoryDuct.FlowCondition[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\tb286ae94-e43a-4044-a2b5-fc7d0c2e782f\tPset_DistributionPortPHistoryDuct.FlowConditionHistory[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\tcee8b8d0-9e2f-4ab4-bc4e-609bc3717a96\tPset_DistributionPortPHistoryDuct.MassFlowRate[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\tefe6db87-ab73-4d3d-9dcb-c4230851678e\tPset_DistributionPortPHistoryDuct.MassFlowRateHistory[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t28b65c01-d098-4403-8a1c-97cd63fd0f71\tPset_DistributionPortPHistoryDuct.Pressure[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t73859108-3e72-4a41-ab86-54c968b84a89\tPset_DistributionPortPHistoryDuct.PressureHisotry[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t65a574d8-a5bb-484e-89e6-ed3d573269d0\tPset_DistributionPortPHistoryDuct.Temperature[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t77728140-029b-418b-8947-97b462bbd7d1\tPset_DistributionPortPHistoryDuct.TemperatureHistory[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t93b06102-3541-4b65-8da6-335c500778a3\tPset_DistributionPortPHistoryDuct.Velocity[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\tcbae79f7-8c96-4ed1-8a24-4c3058ad77fd\tPset_DistributionPortPHistoryDuct.VelocityHistory[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\te1f37d89-2b0e-4ec0-ad99-2be710d02b14\tPset_DistributionPortPHistoryDuct.VolumetricFlowRate[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\td17ff301-809a-4dfe-8bda-cedf902ec6ce\tPset_DistributionPortPHistoryDuct.VolumetricFlowRateHistory[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\te47963a0-9f72-49af-96e6-74baae23372a\tPset_DistributionPortPHistoryDuct.WetBulbTemperature[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t18086b37-c7ab-4b70-9dc9-02901ca59d65\tPset_DistributionPortPHistoryDuct.WetBulbTemperatureHistory[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\n#\nGROUP\t220\tPset_DistributionPortPHistoryPipe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5cefa330-874c-41e1-a598-f2850f3e0b6f\tPset_DistributionPortPHistoryPipe.Flowrate[Type]\tMULTILINETEXT\t\t220\t1\tIfcTimeSeries\t1\nPARAM\tee9479eb-c314-4aea-8b7c-73f57e80e385\tPset_DistributionPortPHistoryPipe.Pressure[Type]\tMULTILINETEXT\t\t220\t1\tIfcTimeSeries\t1\nPARAM\t89f0e25c-364d-45b8-b8b0-ae24ffe80ad3\tPset_DistributionPortPHistoryPipe.Temperature[Type]\tMULTILINETEXT\t\t220\t1\tIfcTimeSeries\t1\n#\nGROUP\t221\tPset_DistributionPortPipe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te78fecda-1389-4584-86b5-154d7ba951dc\tPset_DistributionPortPipe.ConnectionType[Type]\tTEXT\t\t221\t1\tPEnum_PipeEndStyleTreatment\t1\nPARAM\tfaf60ebb-0172-4ace-a754-bf94be5de6c8\tPset_DistributionPortPipe.EndStyleTreatment[Type]\tTEXT\t\t221\t1\tPEnum_PipeEndStyleTreatment\t1\nPARAM\td9c6fc08-e5a1-41e7-8c0e-47f126e03127\tPset_DistributionPortPipe.PortNumber[Type]\tINTEGER\t\t221\t1\tIfcInteger\t1\n#\nGROUP\t222\tPset_DistributionPortTypeCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7f5a8ec4-00c8-4399-a082-b17a7d0bff12\tPset_DistributionPortTypeCable.ConductorFunction[Type]\tTEXT\t\t222\t1\tPEnum_ConductorFunctionEnum\t1\nPARAM\t39fd67c1-bc73-4097-a622-93697c4bbaa9\tPset_DistributionPortTypeCable.ConnectionGender[Type]\tTEXT\t\t222\t1\tPEnum_DistributionPortGender\t1\nPARAM\t396f13a9-9cfb-475d-915d-f931e5d7ad77\tPset_DistributionPortTypeCable.ConnectionSubtype[Type]\tTEXT\t\t222\t1\tIfcLabel\t1\nPARAM\t33479869-1283-4131-bc49-d562c5ce2ef9\tPset_DistributionPortTypeCable.ConnectionType[Type]\tTEXT\t\t222\t1\tPEnum_DistributionPortElectricalType\t1\nPARAM\te3fe803c-a371-4e2e-838a-3202240acbba\tPset_DistributionPortTypeCable.Current[Type]\tMULTILINETEXT\t\t222\t1\tPropertyBoundedValue\t1\nPARAM\tea33278d-f60b-43e3-9154-132493740b7a\tPset_DistributionPortTypeCable.CurrentContent3rdHarmonic[Type]\tNUMBER\t\t222\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tddbe5449-2b74-4a9d-b666-cdadc1c5195b\tPset_DistributionPortTypeCable.ElectricalConnectionType[Type]\tTEXT\t\t222\t1\tPEnum_DistributionPortElectricalType\t1\nPARAM\t06198aa8-43cf-4b69-ae29-5da622d848e4\tPset_DistributionPortTypeCable.HasConnector[Type]\tYESNO\t\t222\t1\tIfcBoolean\t1\nPARAM\t25604e76-a512-4b1a-9118-f175c20e84a5\tPset_DistributionPortTypeCable.IsWelded[Type]\tYESNO\t\t222\t1\tIfcBoolean\t1\nPARAM\t2c81ce5a-8442-4156-873a-80fb3a9151c7\tPset_DistributionPortTypeCable.Power[Type]\tMULTILINETEXT\t\t222\t1\tPropertyBoundedValue\t1\nPARAM\td63099bd-6c30-48d9-a8c0-5ff03c725f9b\tPset_DistributionPortTypeCable.Protocols[Type]\tMULTILINETEXT\t\t222\t1\tPropertyListValue\t1\nPARAM\t1861522f-30b5-468d-8a69-02e3f4e9342c\tPset_DistributionPortTypeCable.Voltage[Type]\tMULTILINETEXT\t\t222\t1\tPropertyBoundedValue\t1\n#\nGROUP\t223\tPset_DistributionPortTypeDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t75636ef6-a665-43ea-8ed4-016116b8ba34\tPset_DistributionPortTypeDuct.ConnectionSubtype[Type]\tTEXT\t\t223\t1\tIfcLabel\t1\nPARAM\t9c0ef7ac-4ade-4baa-a08c-fe08b2556309\tPset_DistributionPortTypeDuct.ConnectionSubType[Type]\tTEXT\t\t223\t1\tIfcLabel\t1\nPARAM\t20f8b2d2-a41f-49b1-a023-9a725c45403c\tPset_DistributionPortTypeDuct.ConnectionType[Type]\tTEXT\t\t223\t1\tPEnum_DuctConnectionType\t1\nPARAM\t53fd2786-cf81-46cb-9be3-2126e2310fe6\tPset_DistributionPortTypeDuct.DryBulbTemperature[Type]\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\nPARAM\t3adbc835-1671-4bb5-bdce-33a40045f934\tPset_DistributionPortTypeDuct.NominalHeight[Type]\tLENGTH\t\t223\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2f08b9bc-af5c-4138-b80a-f3ca52fa9658\tPset_DistributionPortTypeDuct.NominalThickness[Type]\tLENGTH\t\t223\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t545ee1a8-6f4a-474c-a493-ebaa14ece977\tPset_DistributionPortTypeDuct.NominalWidth[Type]\tLENGTH\t\t223\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t5e803a97-37d5-4c51-b46a-47c8389fc5d1\tPset_DistributionPortTypeDuct.Pressure[Type]\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\nPARAM\t369c06fb-6a3b-41d4-8cff-3c694a2c403f\tPset_DistributionPortTypeDuct.Velocity[Type]\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\nPARAM\t56b2e6fc-bdaf-411a-a65b-22d0e2dac283\tPset_DistributionPortTypeDuct.VolumetricFlowRate[Type]\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\nPARAM\t931b348a-45fb-4e3a-8fb9-588bfc7d8e52\tPset_DistributionPortTypeDuct.WetBulbTemperature[Type]\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\n#\nGROUP\t224\tPset_DistributionPortTypePipe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t25680a15-02b7-4e5e-bbab-0b96f33bcb7d\tPset_DistributionPortTypePipe.ConnectionSubtype[Type]\tTEXT\t\t224\t1\tIfcLabel\t1\nPARAM\tef756caf-c299-49ee-9117-a1efc7e0c222\tPset_DistributionPortTypePipe.ConnectionSubType[Type]\tTEXT\t\t224\t1\tIfcLabel\t1\nPARAM\t6b056e4f-8189-46e4-bad5-afe778777e7f\tPset_DistributionPortTypePipe.ConnectionType[Type]\tTEXT\t\t224\t1\tPEnum_PipeEndStyleTreatment\t1\nPARAM\t075ef00f-cdfb-4f52-a888-6b7426f9c50c\tPset_DistributionPortTypePipe.FlowCondition[Type]\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\nPARAM\tf28386d6-5913-45f5-af79-623ed16030c2\tPset_DistributionPortTypePipe.InnerDiameter[Type]\tLENGTH\t\t224\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t25682114-5290-4d5a-a2dc-4bcdfcaa9841\tPset_DistributionPortTypePipe.MassFlowRate[Type]\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\nPARAM\td1aa4ae2-bd9c-4293-b6cb-e9073fb8e269\tPset_DistributionPortTypePipe.NominalDiameter[Type]\tLENGTH\t\t224\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta8e221f8-8965-4cb2-95b1-38f0e52cb805\tPset_DistributionPortTypePipe.OuterDiameter[Type]\tLENGTH\t\t224\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t70fcb981-199a-4971-99d1-9b41edd7f364\tPset_DistributionPortTypePipe.Pressure[Type]\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\nPARAM\t36694a66-8529-404a-b7c2-62143d3c082c\tPset_DistributionPortTypePipe.Temperature[Type]\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\nPARAM\t23086cd6-61d3-45a6-a1fb-63ad97a9e91b\tPset_DistributionPortTypePipe.Velocity[Type]\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\nPARAM\te767f60f-5758-46b5-8c00-5cb9d3feec7c\tPset_DistributionPortTypePipe.VolumetricFlowRate[Type]\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\n#\nGROUP\t225\tPset_DistributionSystemCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta5df59f2-6b5c-4250-894a-76428ca64b68\tPset_DistributionSystemCommon.Reference[Type]\tTEXT\t\t225\t1\tIfcIdentifier\t1\n#\nGROUP\t226\tPset_DistributionSystemTypeElectrical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t066c1e77-8ec0-4d00-94a9-2f00ab621689\tPset_DistributionSystemTypeElectrical.Diversity[Type]\tNUMBER\t\t226\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6eeaa5b8-42e4-4dbe-b965-29b6cbf35be6\tPset_DistributionSystemTypeElectrical.ElectricalSystemCategory[Type]\tTEXT\t\t226\t1\tPEnum_DistributionSystemElectricalCategory\t1\nPARAM\ta3946934-fdca-4644-917a-28250bd1a3c3\tPset_DistributionSystemTypeElectrical.ElectricalSystemType[Type]\tTEXT\t\t226\t1\tPEnum_DistributionSystemElectricalType\t1\nPARAM\t52fc5d10-4466-4c6b-8b75-7c470a55438c\tPset_DistributionSystemTypeElectrical.MaximumAllowedVoltageDrop[Type]\tNUMBER\t\t226\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t61012002-c898-46ca-847d-1fed8b277e1e\tPset_DistributionSystemTypeElectrical.NetImpedance[Type]\tNUMBER\t\t226\t1\tIfcElectricResistanceMeasure\t1\nPARAM\tc64ca073-5787-4608-896f-f1cb866a711b\tPset_DistributionSystemTypeElectrical.NumberOfLiveConductors[Type]\tINTEGER\t\t226\t1\tIfcCountMeasure\t1\nPARAM\t0e9faea9-b338-48c5-ab36-aa4812d4c19a\tPset_DistributionSystemTypeElectrical.RatedVoltageRange[Type]\tMULTILINETEXT\t\t226\t1\tPropertyBoundedValue\t1\n#\nGROUP\t227\tPset_DistributionSystemTypeOverheadContactlineSystem\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3c8d4a59-7562-4017-9b2f-387184de5b9e\tPset_DistributionSystemTypeOverheadContactlineSystem.ContactWireNominalDrop[Type]\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t30b945c5-4e49-426c-bfeb-ea897e1eee81\tPset_DistributionSystemTypeOverheadContactlineSystem.ContactWireNominalHeight[Type]\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4b8b0ec6-4cc9-4c40-99d2-087f5d9b8a75\tPset_DistributionSystemTypeOverheadContactlineSystem.ContactWireStagger[Type]\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfff4a909-6a07-49ba-a380-4910fb2d361c\tPset_DistributionSystemTypeOverheadContactlineSystem.ContactWireUplift[Type]\tLENGTH\t\t227\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t5f9fa328-5f0c-497d-b0e3-f9c1ed73f7bf\tPset_DistributionSystemTypeOverheadContactlineSystem.ElectricalClearance[Type]\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t350524c4-e4b7-4113-9103-6e2521630e16\tPset_DistributionSystemTypeOverheadContactlineSystem.NumberOfOverlappingSpans[Type]\tINTEGER\t\t227\t1\tIfcCountMeasure\t1\nPARAM\tcf027a50-ac48-4e36-b8a2-78cd785aa003\tPset_DistributionSystemTypeOverheadContactlineSystem.OCSType[Type]\tTEXT\t\t227\t1\tPEnum_OverheadContactLineType\t1\nPARAM\t78d9ea3b-6389-48d6-913c-d0f2a474ca35\tPset_DistributionSystemTypeOverheadContactlineSystem.PantographType[Type]\tTEXT\t\t227\t1\tIfcLabel\t1\nPARAM\tb87f0ccd-df6f-490b-8bf2-596eea12bf4e\tPset_DistributionSystemTypeOverheadContactlineSystem.PressureRange[Type]\tMULTILINETEXT\t\t227\t1\tPropertyBoundedValue\t1\nPARAM\t447a7d60-b05c-4b6e-90ef-f05d811c1006\tPset_DistributionSystemTypeOverheadContactlineSystem.SpanNominalLength[Type]\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc1968c43-5304-4224-aeed-6b7cb185f84a\tPset_DistributionSystemTypeOverheadContactlineSystem.TensionLength[Type]\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t228\tPset_DistributionSystemTypeVentilation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2e96fd82-0587-4325-a6cc-d1a11e0015ee\tPset_DistributionSystemTypeVentilation.AspectRatio[Type]\tNUMBER\t\t228\t1\tIfcReal\t1\nPARAM\t331cea9f-8f1a-4837-be14-f5b2daf93974\tPset_DistributionSystemTypeVentilation.DesignName[Type]\tTEXT\t\t228\t1\tIfcLabel\t1\nPARAM\t79b5fb0c-5581-41a2-87d2-c16588f6cc76\tPset_DistributionSystemTypeVentilation.DuctSealant[Type]\tMULTILINETEXT\t\t228\t1\tIfcMaterialDefinition\t1\nPARAM\t0a8f9307-4c9a-4a74-bf9d-8a0b69f4fdc3\tPset_DistributionSystemTypeVentilation.DuctSizingMethod[Type]\tTEXT\t\t228\t1\tPEnum_DuctSizingMethod\t1\nPARAM\tbe55af03-a24f-442a-98e8-a48fcbd23b7d\tPset_DistributionSystemTypeVentilation.FrictionLoss[Type]\tNUMBER\t\t228\t1\tIfcReal\t1\nPARAM\t91b45e1d-0158-4c40-98ac-237d2523ac03\tPset_DistributionSystemTypeVentilation.LeakageClass[Type]\tNUMBER\t\t228\t1\tIfcPressureMeasure\t1\nPARAM\t95d5a2bb-673c-42d7-8061-36a0f0ef1462\tPset_DistributionSystemTypeVentilation.MaximumVelocity[Type]\tNUMBER\t\t228\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t62c5a9a3-07c0-4597-bbc2-990121a93faf\tPset_DistributionSystemTypeVentilation.MinimumHeight[Type]\tLENGTH\t\t228\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t20fecf23-5139-4960-966d-8d815dc89385\tPset_DistributionSystemTypeVentilation.MinimumWidth[Type]\tLENGTH\t\t228\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4d0be929-35fa-4805-9138-d6aed3a03e83\tPset_DistributionSystemTypeVentilation.PressureClass[Type]\tNUMBER\t\t228\t1\tIfcPressureMeasure\t1\nPARAM\t37084618-6b98-45b3-85a4-8e999d8b4c30\tPset_DistributionSystemTypeVentilation.ScrapFactor[Type]\tNUMBER\t\t228\t1\tIfcReal\t1\n#\nGROUP\t229\tPset_DoorCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9c6ec881-67d5-450c-aeed-a0a631cdec7d\tPset_DoorCommon.AcousticRating[Type]\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\t72102582-da77-44fb-8fef-20402bbf100f\tPset_DoorCommon.DurabilityRating[Type]\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\tbf2ef3f8-780c-4e67-b4d2-4cee7c8f9d40\tPset_DoorCommon.FireExit[Type]\tYESNO\t\t229\t1\tIfcBoolean\t1\nPARAM\t77233658-6c3c-4a87-b870-08adb8c0c2d9\tPset_DoorCommon.FireRating[Type]\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\t6b26c5ab-f480-4a41-a7d3-3bee223f2119\tPset_DoorCommon.GlazingAreaFraction[Type]\tNUMBER\t\t229\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0f164b4b-3709-4c2c-83c4-1afeccd88a74\tPset_DoorCommon.HandicapAccessible[Type]\tYESNO\t\t229\t1\tIfcBoolean\t1\nPARAM\t9a83003b-653d-49b2-babf-003fbfc65fad\tPset_DoorCommon.HasDrive[Type]\tYESNO\t\t229\t1\tIfcBoolean\t1\nPARAM\t0cde6445-82e5-463e-82f5-64f784aa55b8\tPset_DoorCommon.HygrothermalRating[Type]\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\t2274c6a0-71bb-41a3-96d6-228d9dfeb9bc\tPset_DoorCommon.Infiltration[Type]\tNUMBER\t\t229\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\ta12ea2b0-e569-493c-a392-36f16ac0eee3\tPset_DoorCommon.IsExternal[Type]\tYESNO\t\t229\t1\tIfcBoolean\t1\nPARAM\t892200c0-d7a0-405f-9578-9d71d244d28d\tPset_DoorCommon.MechanicalLoadRating[Type]\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\tb9ee9b4a-5dd5-4e8c-ae58-50106167fcd1\tPset_DoorCommon.Reference[Type]\tTEXT\t\t229\t1\tIfcIdentifier\t1\nPARAM\taabb272a-ad9a-4d0b-bec9-d3864d964751\tPset_DoorCommon.SecurityRating[Type]\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\t73681fca-871d-4d6f-a41f-407c06ee84e2\tPset_DoorCommon.SelfClosing[Type]\tYESNO\t\t229\t1\tIfcBoolean\t1\nPARAM\t235db9e0-ffb9-4a8a-9fa6-7fd644900a12\tPset_DoorCommon.SmokeStop[Type]\tYESNO\t\t229\t1\tIfcBoolean\t1\nPARAM\tb3fa161c-5076-4b98-a6ee-c9cd271cf9c5\tPset_DoorCommon.Status[Type]\tTEXT\t\t229\t1\tPEnum_ElementStatus\t1\nPARAM\te029776f-c69c-486e-a946-f1eb1851e6b2\tPset_DoorCommon.ThermalTransmittance[Type]\tNUMBER\t\t229\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\tb38e2262-4207-4dba-89ab-f47a2bcb3d44\tPset_DoorCommon.WaterTightnessRating[Type]\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\t4ce07d1c-93f1-4415-a530-0d137a521b83\tPset_DoorCommon.WindLoadRating[Type]\tTEXT\t\t229\t1\tIfcLabel\t1\n#\nGROUP\t230\tPset_DoorTypeTurnstile\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5c281b21-01e6-4c23-b2e7-2da9c5f82d1d\tPset_DoorTypeTurnstile.IsBidirectional[Type]\tYESNO\t\t230\t1\tIfcBoolean\t1\nPARAM\t08a6eccc-8d7e-40b1-962b-abfcece8d2fe\tPset_DoorTypeTurnstile.NarrowChannelWidth[Type]\tLENGTH\t\t230\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfa229dec-273b-46fb-90cb-c86044866007\tPset_DoorTypeTurnstile.TurnstileType[Type]\tTEXT\t\t230\t1\tPEnum_TurnstileType\t1\nPARAM\t3276e4ab-119b-49e5-9f3a-f94a355519e2\tPset_DoorTypeTurnstile.WideChannelWidth[Type]\tLENGTH\t\t230\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t231\tPset_DoorWindowGlazingType\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcac9e658-704b-443d-a360-4c9cb07c85b9\tPset_DoorWindowGlazingType.BeamRadiationTransmittance[Type]\tNUMBER\t\t231\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t1a15c3d5-2c15-4819-a7cd-5c90c2256303\tPset_DoorWindowGlazingType.FillGas[Type]\tTEXT\t\t231\t1\tIfcLabel\t1\nPARAM\t7b3c4bf5-f414-4bd1-968f-a6c99aea7d9c\tPset_DoorWindowGlazingType.GlassColor[Type]\tTEXT\t\t231\t1\tIfcLabel\t1\nPARAM\tebdd8feb-5d99-4e69-89c1-d3e4911bbfd1\tPset_DoorWindowGlazingType.GlassColour[Type]\tTEXT\t\t231\t1\tIfcLabel\t1\nPARAM\tb7a01d6f-92c4-4763-9abe-e87d687c7041\tPset_DoorWindowGlazingType.GlassLayers[Type]\tINTEGER\t\t231\t1\tIfcCountMeasure\t1\nPARAM\t06c760b4-4828-4bfb-a4c7-8268089421d5\tPset_DoorWindowGlazingType.GlassThickness1[Type]\tLENGTH\t\t231\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3b844e97-0f6f-4d32-a46d-e8c42ee2498a\tPset_DoorWindowGlazingType.GlassThickness2[Type]\tLENGTH\t\t231\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9aecbdc7-9990-4b34-ba23-778981b830d0\tPset_DoorWindowGlazingType.GlassThickness3[Type]\tLENGTH\t\t231\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t65e7e39d-7147-4cbc-ab8c-f1b3a7145454\tPset_DoorWindowGlazingType.IsCoated[Type]\tYESNO\t\t231\t1\tIfcBoolean\t1\nPARAM\t329bddb9-cf88-40b2-9166-1a908c42e15e\tPset_DoorWindowGlazingType.IsLaminated[Type]\tYESNO\t\t231\t1\tIfcBoolean\t1\nPARAM\t06282f88-fc40-415c-9c7a-67db0ad71ee0\tPset_DoorWindowGlazingType.IsTempered[Type]\tYESNO\t\t231\t1\tIfcBoolean\t1\nPARAM\t08fdad02-298d-4267-bee4-96457cf45a75\tPset_DoorWindowGlazingType.IsWired[Type]\tYESNO\t\t231\t1\tIfcBoolean\t1\nPARAM\t46193292-8594-4bef-8f70-f4035add576e\tPset_DoorWindowGlazingType.Reflectivity[Type]\tNUMBER\t\t231\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t5ad9a3da-fa60-4c7d-b4bf-09d8cf9605fb\tPset_DoorWindowGlazingType.ShadingCoefficient[Type]\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t054fde42-346f-4ffc-a021-0685830ff228\tPset_DoorWindowGlazingType.SolarAbsorption[Type]\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tde74293e-e947-4d55-8faf-d68adfa959cc\tPset_DoorWindowGlazingType.SolarHeatGainTransmittance[Type]\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t4f8f7888-53e0-438e-8460-63b061068541\tPset_DoorWindowGlazingType.SolarReflectance[Type]\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t224f3e17-9789-46be-b0cf-680d9eed75a8\tPset_DoorWindowGlazingType.SolarTransmittance[Type]\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tb6ce38b7-e7fc-4d42-a5ed-0500cbc12a32\tPset_DoorWindowGlazingType.ThermalTransmittanceSummer[Type]\tNUMBER\t\t231\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t78170c44-2b3e-48ce-95c5-3a02ff3bfc1a\tPset_DoorWindowGlazingType.ThermalTransmittanceWinter[Type]\tNUMBER\t\t231\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t0398825b-7eca-4f4e-8c72-37996c2e18a9\tPset_DoorWindowGlazingType.Translucency[Type]\tNUMBER\t\t231\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t48c3a2b3-0187-4678-8757-09e4b5f46222\tPset_DoorWindowGlazingType.VisibleLightReflectance[Type]\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\ta456b04e-7bbf-4b7e-a830-9530c4a4c020\tPset_DoorWindowGlazingType.VisibleLightTransmittance[Type]\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t232\tPset_DoorWindowShadingType\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td666a15d-01c4-490c-9720-06c511968ade\tPset_DoorWindowShadingType.ExternalShadingCoefficient[Type]\tNUMBER\t\t232\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t209015ae-e6a2-486f-8a52-3a2f3258c6cd\tPset_DoorWindowShadingType.InsetShadingCoefficient[Type]\tNUMBER\t\t232\t1\tIfcPositiveRatioMeasure \t1\nPARAM\ta71471cd-8db7-4a34-9091-6a4f71d4529d\tPset_DoorWindowShadingType.InternalShadingCoefficient[Type]\tNUMBER\t\t232\t1\tIfcPositiveRatioMeasure \t1\n#\nGROUP\t233\tPset_DrainageCatchment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ted208dbc-df96-41e5-b844-1381cf41559c\tPset_DrainageCatchment.AreaDrained[Type]\tAREA\t\t233\t1\tIfcAreaMeasure\t1\n#\nGROUP\t234\tPset_DrainageCulvert\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te84f03f9-4d90-454f-b98f-63e155248fcc\tPset_DrainageCulvert.ClearDepth[Type]\tLENGTH\t\t234\t1\tIfcLengthMeasure\t1\nPARAM\tb5d9b6e2-b182-4279-a289-860167d3c8c3\tPset_DrainageCulvert.InternalWidth[Type]\tLENGTH\t\t234\t1\tIfcLengthMeasure\t1\n#\nGROUP\t235\tPset_DrainageOutfall\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48d0cf1c-896b-4968-a003-9e5b00fb6b9d\tPset_DrainageOutfall.InvertLevel[Type]\tLENGTH\t\t235\t1\tIfcLengthMeasure\t1\n#\nGROUP\t236\tPset_DrainageReserve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9b006f31-84e1-4112-bcd2-dd5d71ab98f9\tPset_DrainageReserve.Width[Type]\tLENGTH\t\t236\t1\tIfcLengthMeasure\t1\n#\nGROUP\t237\tPset_Draughting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tde13aae4-0fe5-42b5-bc4a-fb7e86f70e18\tPset_Draughting.Colour.Blue[Type]\tINTEGER\t\t237\t1\tIfcInteger\t1\nPARAM\tac554318-e9ea-4694-b740-5b1c4cdbfd0f\tPset_Draughting.Colour.Green[Type]\tINTEGER\t\t237\t1\tIfcInteger\t1\nPARAM\t614e039e-e0e6-417a-bdf0-d42821f6ccf1\tPset_Draughting.Colour.Red[Type]\tINTEGER\t\t237\t1\tIfcInteger\t1\nPARAM\t0a6675d3-5c90-4987-8704-bb082acfc17a\tPset_Draughting.LayerName[Type]\tTEXT\t\t237\t1\tIfcIdentifier\t1\n#\nGROUP\t238\tPset_DuctConnection\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4177439d-4563-477a-899f-85470befb52e\tPset_DuctConnection.ConnectionType[Type]\tMULTILINETEXT\t\t238\t1\tPropertyListValue\t1\n#\nGROUP\t239\tPset_DuctDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t97f994ce-9a6d-4d48-ae7c-c7677a98d701\tPset_DuctDesignCriteria.AspectRatio[Type]\tNUMBER\t\t239\t1\tIfcReal \t1\nPARAM\t59281beb-945f-4cf3-98ff-b9fa031ed4e4\tPset_DuctDesignCriteria.DesignName[Type]\tTEXT\t\t239\t1\tIfcText\t1\nPARAM\t66b2b938-347c-43b5-bb61-b8bc10a5aa85\tPset_DuctDesignCriteria.DuctSealant[Type]\tMULTILINETEXT\t\t239\t1\tIfcMaterial\t1\nPARAM\t9c847acb-6aef-4953-83e9-1ff489298746\tPset_DuctDesignCriteria.DuctSizingMethod[Type]\tTEXT\t\t239\t1\tPEnum_DuctSizingMethod\t1\nPARAM\t78bc71d2-20bb-4c67-8708-bc3c6e50d59b\tPset_DuctDesignCriteria.FrictionLoss[Type]\tNUMBER\t\t239\t1\tIfcReal\t1\nPARAM\tdcb32230-42e2-4b18-9e6d-89621e594cb1\tPset_DuctDesignCriteria.LeakageClass[Type]\tNUMBER\t\t239\t1\tIfcPressureMeasure\t1\nPARAM\t63b04d74-d840-4bf8-a7fe-c0818bc91c89\tPset_DuctDesignCriteria.MaximumVelocity[Type]\tNUMBER\t\t239\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t043ae98f-7e33-4e96-8e48-8d646fc8da4e\tPset_DuctDesignCriteria.MinimumHeight[Type]\tNUMBER\t\t239\t1\tIfcPositiveLengthMeasure \t1\nPARAM\t16407c22-d572-4537-98fd-2f807b59384c\tPset_DuctDesignCriteria.MinimumWidth[Type]\tNUMBER\t\t239\t1\tIfcPositiveLengthMeasure \t1\nPARAM\t1a24842f-d2c0-42ae-bec9-eec1b142428c\tPset_DuctDesignCriteria.PressureClass[Type]\tNUMBER\t\t239\t1\tIfcPressureMeasure\t1\nPARAM\t43218fba-b064-4aee-b8b6-a6a7984a7031\tPset_DuctDesignCriteria.ScrapFactor[Type]\tNUMBER\t\t239\t1\tIfcReal \t1\n#\nGROUP\t240\tPset_DuctFittingOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t51ade7ee-0c3a-4a58-b3eb-b43034ae5b00\tPset_DuctFittingOccurrence.Color[Type]\tTEXT\t\t240\t1\tIfcLabel\t1\nPARAM\t9a1f7f7d-3cf3-4063-a717-ab717cc00d65\tPset_DuctFittingOccurrence.Colour[Type]\tTEXT\t\t240\t1\tIfcLabel\t1\nPARAM\t4b74fe48-7d8f-45f5-9f11-ba6785a75250\tPset_DuctFittingOccurrence.HasLiner[Type]\tYESNO\t\t240\t1\tIfcBoolean\t1\nPARAM\tf9d22678-246e-4407-a435-4de320baf5a8\tPset_DuctFittingOccurrence.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t240\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t241\tPset_DuctFittingPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1de7c5fe-35a5-470c-a52b-13b0339e3282\tPset_DuctFittingPHistory.AirFlowLeakage[Type]\tMULTILINETEXT\t\t241\t1\tIfcTimeSeries\t1\nPARAM\t3281689e-acc6-4448-bf6a-06ad0f72ffae\tPset_DuctFittingPHistory.AtmosphericPressure[Type]\tMULTILINETEXT\t\t241\t1\tIfcTimeSeries\t1\nPARAM\t3bf66679-bb6b-4579-aa70-010f30fa0ac7\tPset_DuctFittingPHistory.LossCoefficient[Type]\tMULTILINETEXT\t\t241\t1\tIfcTimeSeries\t1\n#\nGROUP\t242\tPset_DuctFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0a55b928-19cd-4ffc-805d-cd6f8baa9e11\tPset_DuctFittingTypeCommon.EndStyleTreatment[Type]\tMULTILINETEXT\t\t242\t1\tPropertyListValue\t1\nPARAM\t623a1f68-63e2-4303-a8b4-079aa7f08e30\tPset_DuctFittingTypeCommon.Material[Type]\tMULTILINETEXT\t\t242\t1\tIfcMaterial\t1\nPARAM\tad85c676-22b7-49dc-b143-9fb11c6c7aff\tPset_DuctFittingTypeCommon.MaterialThickness[Type]\tLENGTH\t\t242\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t675dbcaa-e276-458c-93b8-12ab1b02d242\tPset_DuctFittingTypeCommon.NominalDiameterOrWidth[Type]\tMULTILINETEXT\t\t242\t1\tPropertyListValue\t1\nPARAM\t2f4c7ba4-e057-40d2-8d68-58851c6c5ab1\tPset_DuctFittingTypeCommon.NominalHeight[Type]\tMULTILINETEXT\t\t242\t1\tPropertyListValue\t1\nPARAM\t090b1cb2-8e72-4e02-8e9a-8609658aa210\tPset_DuctFittingTypeCommon.PressureClass[Type]\tNUMBER\t\t242\t1\tIfcPressureMeasure\t1\nPARAM\t2ef1ec00-0038-408f-947a-f84aa8321d6f\tPset_DuctFittingTypeCommon.PressureRange[Type]\tMULTILINETEXT\t\t242\t1\tPropertyBoundedValue\t1\nPARAM\tcef58ffd-b676-4402-b505-c81cce3891ea\tPset_DuctFittingTypeCommon.Reference[Type]\tTEXT\t\t242\t1\tIfcIdentifier\t1\nPARAM\t0bec96c1-cca7-49e1-94af-fabc2aa08b97\tPset_DuctFittingTypeCommon.Status[Type]\tTEXT\t\t242\t1\tPEnum_ElementStatus\t1\nPARAM\t826e14c0-1d15-4415-9061-fafcb9a4b59b\tPset_DuctFittingTypeCommon.SubType[Type]\tTEXT\t\t242\t1\tIfcText\t1\nPARAM\t29faf7c0-6de7-48ca-95b2-f723fd2e59dd\tPset_DuctFittingTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t242\t1\tPropertyBoundedValue\t1\nPARAM\t48a0fa3f-c90c-4bf9-9040-d5dcf2d7006d\tPset_DuctFittingTypeCommon.UnitWeight[Type]\tNUMBER\t\t242\t1\tIfcMassPerLengthMeasure\t1\n#\nGROUP\t243\tPset_DuctSegmentOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcb8e6bd8-3d62-49fa-874d-b771878cba5e\tPset_DuctSegmentOccurrence.Color[Type]\tTEXT\t\t243\t1\tIfcLabel\t1\nPARAM\t406c63a2-da41-4af0-84f6-59be714ce6cb\tPset_DuctSegmentOccurrence.Colour[Type]\tTEXT\t\t243\t1\tIfcLabel\t1\nPARAM\t0054d948-13dc-4d0f-8306-d9dffa4d17e0\tPset_DuctSegmentOccurrence.HasLiner[Type]\tYESNO\t\t243\t1\tIfcBoolean\t1\nPARAM\t302017e4-f14c-48bc-b569-f1a17635d0bf\tPset_DuctSegmentOccurrence.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t243\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t244\tPset_DuctSegmentPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbf99cb6d-294d-49f3-a9f5-c74f975025e9\tPset_DuctSegmentPHistory.AtmosphericPressure[Type]\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\nPARAM\t3e2b6c43-b8e9-470b-8f80-fe822b1acd17\tPset_DuctSegmentPHistory.FluidFlowLeakage[Type]\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\nPARAM\ta92aed7f-93fc-4518-be2f-8a0fe6554b9c\tPset_DuctSegmentPHistory.LeakageCurve[Type]\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\nPARAM\t294cc4bb-a17c-4912-8c4b-e45c7e32ba1c\tPset_DuctSegmentPHistory.LeakageCurveHistory[Type]\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\nPARAM\teaf9d949-73da-4bea-b964-f0eb89104ce8\tPset_DuctSegmentPHistory.LossCoefficient[Type]\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\n#\nGROUP\t245\tPset_DuctSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t772961f5-0111-4b5b-bcb1-ee1962db939a\tPset_DuctSegmentTypeCommon.CrossSectionShape[Type]\tTEXT\t\t245\t1\tPEnum_DuctSegmentShape\t1\nPARAM\tbca6ed33-5dbf-4411-a004-8a1ea148caf3\tPset_DuctSegmentTypeCommon.EndStyleTreatment[Type]\tMULTILINETEXT\t\t245\t1\tPropertyListValue\t1\nPARAM\ta73ce048-9628-4394-a914-a524625c941b\tPset_DuctSegmentTypeCommon.Length[Type]\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta51f094f-354c-41ca-8d77-474fa5ca6994\tPset_DuctSegmentTypeCommon.LongitudinalSeam[Type]\tTEXT\t\t245\t1\tIfcText\t1\nPARAM\tf4307065-eade-4f10-813a-f50efbc1e91b\tPset_DuctSegmentTypeCommon.Material[Type]\tMULTILINETEXT\t\t245\t1\tIfcMaterial\t1\nPARAM\t2c843d3f-2927-4e36-aa5c-1226aa831b8e\tPset_DuctSegmentTypeCommon.MaterialThickness[Type]\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t92281afb-8cb6-4a01-a1e0-4e4521a4d878\tPset_DuctSegmentTypeCommon.NominalDiameterOrWidth[Type]\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0974a646-91a7-4344-bfda-46a06bd866f6\tPset_DuctSegmentTypeCommon.NominalHeight[Type]\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8e8b4a77-1e6a-4d2e-a8cd-d88d44e09ca8\tPset_DuctSegmentTypeCommon.PressureRange[Type]\tMULTILINETEXT\t\t245\t1\tPropertyBoundedValue\t1\nPARAM\td5f4a4dc-487f-4270-9ac0-88e6b3ee694f\tPset_DuctSegmentTypeCommon.Reference[Type]\tTEXT\t\t245\t1\tIfcIdentifier\t1\nPARAM\t10d02871-06b0-434e-b1f7-e3401eee59a7\tPset_DuctSegmentTypeCommon.Reinforcement[Type]\tTEXT\t\t245\t1\tIfcLabel\t1\nPARAM\ta6a948aa-9d94-4957-bd58-2e90a448c1d3\tPset_DuctSegmentTypeCommon.ReinforcementSpacing[Type]\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf962c860-77cd-4191-9f30-aebc7de4b0ae\tPset_DuctSegmentTypeCommon.Shape[Type]\tTEXT\t\t245\t1\tPEnum_DuctSegmentShape\t1\nPARAM\taf14ad5f-4060-442b-bc7d-b343128bcd7d\tPset_DuctSegmentTypeCommon.Status[Type]\tTEXT\t\t245\t1\tPEnum_ElementStatus\t1\nPARAM\t5aadb4da-6232-4b4c-8e92-3d1aaaba982a\tPset_DuctSegmentTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t245\t1\tPropertyBoundedValue\t1\nPARAM\tb485b6ff-097c-4c87-a966-3a5818f55041\tPset_DuctSegmentTypeCommon.UnitWeight[Type]\tNUMBER\t\t245\t1\tIfcMassMeasure\t1\nPARAM\t38ff81be-8a77-4035-9fdf-144985a021b7\tPset_DuctSegmentTypeCommon.WorkingPressure[Type]\tNUMBER\t\t245\t1\tIfcPressureMeasure\t1\n#\nGROUP\t246\tPset_DuctSilencerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8e67ed69-5ce2-412d-a288-a21f493299f5\tPset_DuctSilencerPHistory.AirFlowRate[Type]\tMULTILINETEXT\t\t246\t1\tIfcTimeSeries\t1\nPARAM\t3f85f47c-4af6-422c-bb9d-ab1663c146f1\tPset_DuctSilencerPHistory.AirPressureDropCurve[Type]\tMULTILINETEXT\t\t246\t1\tIfcTimeSeries\t1\n#\nGROUP\t247\tPset_DuctSilencerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t13662dd5-e6a6-4338-bb7d-af7fef6dde63\tPset_DuctSilencerTypeCommon.AirFlowrateRange[Type]\tMULTILINETEXT\t\t247\t1\tPropertyBoundedValue\t1\nPARAM\ta9e88480-d8d6-4434-afc1-ee3b336a7938\tPset_DuctSilencerTypeCommon.AirFlowRateRange[Type]\tMULTILINETEXT\t\t247\t1\tPropertyBoundedValue\t1\nPARAM\t9f7aec43-b66f-4838-a251-ce2d958555e9\tPset_DuctSilencerTypeCommon.HasExteriorInsulation[Type]\tYESNO\t\t247\t1\tIfcBoolean\t1\nPARAM\t7a73ba7f-45b5-49fb-a6fa-8c28a0edd4d1\tPset_DuctSilencerTypeCommon.HydraulicDiameter[Type]\tLENGTH\t\t247\t1\tIfcLengthMeasure\t1\nPARAM\t8bc57567-11bb-443e-abc7-5f7bed1dd39b\tPset_DuctSilencerTypeCommon.Length[Type]\tLENGTH\t\t247\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t56f215d1-0501-4031-8048-26cf07dd2e84\tPset_DuctSilencerTypeCommon.Reference[Type]\tTEXT\t\t247\t1\tIfcIdentifier\t1\nPARAM\t58444257-450f-43a2-b7e9-9ace26941724\tPset_DuctSilencerTypeCommon.Shape[Type]\tTEXT\t\t247\t1\tPEnum_DuctSilencerShape\t1\nPARAM\ta0beeb23-6c9c-4327-bc7e-acff60e50626\tPset_DuctSilencerTypeCommon.Status[Type]\tTEXT\t\t247\t1\tPEnum_ElementStatus\t1\nPARAM\t24a4866e-461e-43ad-9d0b-4896c75aba00\tPset_DuctSilencerTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t247\t1\tPropertyBoundedValue\t1\nPARAM\t120aeb07-17bd-4e4f-a029-f463283d152d\tPset_DuctSilencerTypeCommon.Weight[Type]\tNUMBER\t\t247\t1\tIfcMassMeasure\t1\nPARAM\t4ff244eb-5b06-4f38-b1d5-41a10742876e\tPset_DuctSilencerTypeCommon.WorkingPressureRange[Type]\tMULTILINETEXT\t\t247\t1\tPropertyBoundedValue\t1\n#\nGROUP\t248\tPset_ElectricalCircuit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb9b5bd0c-72f4-470f-a649-64ee34946486\tPset_ElectricalCircuit.Diversity[Type]\tNUMBER\t\t248\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7736fc93-e2ce-46f0-9d1d-f840b65a87a2\tPset_ElectricalCircuit.MaximumAllowedVoltageDrop[Type]\tNUMBER\t\t248\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t89e21b4a-6898-4a83-ada6-ad49ea75ca24\tPset_ElectricalCircuit.NetImpedance[Type]\tNUMBER\t\t248\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t349089b4-cba7-410d-944f-d9648a29a1b0\tPset_ElectricalCircuit.NumberOfPhases[Type]\tINTEGER\t\t248\t1\tIfcInteger\t1\n#\nGROUP\t249\tPset_ElectricalDeviceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te44cf191-98f4-416c-b0db-2de33810c150\tPset_ElectricalDeviceCommon.ConductorFunction[Type]\tTEXT\t\t249\t1\tPEnum_ConductorFunctionEnum\t1\nPARAM\t1e8844ea-58c5-49c7-8163-fb2ebe0ee34a\tPset_ElectricalDeviceCommon.EarthingStyle[Type]\tTEXT\t\t249\t1\tIfcLabel\t1\nPARAM\t2e2c9740-944e-46c2-8883-565e4ab9ea58\tPset_ElectricalDeviceCommon.ElectricalDeviceNominalPower[Type]\tNUMBER\t\t249\t1\tIfcPowerMeasure\t1\nPARAM\tbc91d4c2-50a5-4209-a040-a4f13818654b\tPset_ElectricalDeviceCommon.HasProtectiveEarth[Type]\tYESNO\t\t249\t1\tIfcBoolean\t1\nPARAM\t6d70319f-9720-4c68-bc87-c417ad232fa4\tPset_ElectricalDeviceCommon.HeatDissipation[Type]\tNUMBER\t\t249\t1\tIfcPowerMeasure\t1\nPARAM\t98dd37c6-3724-42d3-98b2-0313fd26d151\tPset_ElectricalDeviceCommon.IK_Code[Type]\tTEXT\t\t249\t1\tIfcLabel\t1\nPARAM\t1bab2ec2-e9a3-4480-a4c2-b03c507c39fa\tPset_ElectricalDeviceCommon.InsulationStandardClass[Type]\tTEXT\t\t249\t1\tPEnum_InsulationStandardClass\t1\nPARAM\t73c07f4c-af83-4062-8738-32dfa5a95260\tPset_ElectricalDeviceCommon.IP_Code[Type]\tTEXT\t\t249\t1\tIfcLabel\t1\nPARAM\tf427c18d-3556-4535-80b0-662dd05a317c\tPset_ElectricalDeviceCommon.NominalCurrent[Type]\tNUMBER\t\t249\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tb27127bf-944c-4f8a-abdc-8471489b6a71\tPset_ElectricalDeviceCommon.NominalFrequencyRange[Type]\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\nPARAM\tf88093d4-80d1-4065-b128-e43bdc833535\tPset_ElectricalDeviceCommon.NominalPowerConsumption[Type]\tNUMBER\t\t249\t1\tIfcPowerMeasure\t1\nPARAM\t2e4f72e8-860d-4ab1-8094-46409296bb55\tPset_ElectricalDeviceCommon.NominalVoltage[Type]\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\nPARAM\t0eec9b71-cb7a-4009-8c8b-aa8c592fd624\tPset_ElectricalDeviceCommon.NumberOfPoles[Type]\tINTEGER\t\t249\t1\tIfcCountMeasure\t1\nPARAM\t720970d6-3198-4098-b6ec-5592ec14999b\tPset_ElectricalDeviceCommon.NumberOfPowerSupplyPorts[Type]\tMULTILINETEXT\t\t249\t1\tPropertyTableValue\t1\nPARAM\t44b6a914-475c-4014-b57c-2ce23e96a005\tPset_ElectricalDeviceCommon.PhaseAngle[Type]\tANGLE\t\t249\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\tdff2fe23-9642-4f64-ae0f-74cb3aa0220f\tPset_ElectricalDeviceCommon.PhaseReference[Type]\tTEXT\t\t249\t1\tIfcIdentifier\t1\nPARAM\t0163dccb-2f07-42ed-989a-ecf794099bbd\tPset_ElectricalDeviceCommon.Power[Type]\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\nPARAM\tbd4cfc39-9814-4e82-ba33-7760f25139e0\tPset_ElectricalDeviceCommon.PowerFactor[Type]\tNUMBER\t\t249\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\te9bbaedd-38ff-4dea-aa3f-747f3885a053\tPset_ElectricalDeviceCommon.RatedCurrent[Type]\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\nPARAM\t7d337ad8-ee76-4353-af61-b2c598881b8b\tPset_ElectricalDeviceCommon.RatedVoltage[Type]\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\nPARAM\tbad4baad-3be2-4269-a5db-11a016ce7493\tPset_ElectricalDeviceCommon.UsageCurrent[Type]\tNUMBER\t\t249\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t250\tPset_ElectricalDeviceCompliance\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t55c784af-5f76-410d-bd09-ee9a5a7766b3\tPset_ElectricalDeviceCompliance.ElectroMagneticStandardsCompliance[Type]\tMULTILINETEXT\t\t250\t1\tPropertyTableValue\t1\nPARAM\teec2ff89-f993-434a-8f8c-e29f599e40b4\tPset_ElectricalDeviceCompliance.ExplosiveAtmosphereStandardsCompliance[Type]\tMULTILINETEXT\t\t250\t1\tPropertyTableValue\t1\nPARAM\t725eaac3-d342-48ea-8a6a-f8d31598d320\tPset_ElectricalDeviceCompliance.FireProofingStandardsCompliance[Type]\tMULTILINETEXT\t\t250\t1\tPropertyTableValue\t1\nPARAM\t30203fb7-3960-4ad3-b2ab-568235b54286\tPset_ElectricalDeviceCompliance.LightningProtectionStandardsCompliance[Type]\tMULTILINETEXT\t\t250\t1\tPropertyTableValue\t1\n#\nGROUP\t251\tPset_ElectricalFeederLine\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcbfe3a98-6afe-4d74-8395-1f7ceccdc800\tPset_ElectricalFeederLine.CurrentCarryingCapacity[Type]\tNUMBER\t\t251\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t53dbabd7-0fb5-4f47-b157-f9e3f4aae9e7\tPset_ElectricalFeederLine.DesignAmbientTemperature[Type]\tMULTILINETEXT\t\t251\t1\tPropertyBoundedValue\t1\nPARAM\tebf19807-4a9f-40ed-a0bb-2979de39def9\tPset_ElectricalFeederLine.ElectricalClearanceDistance[Type]\tLENGTH\t\t251\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdff7b2af-bd20-44a0-bf55-558e68949dc6\tPset_ElectricalFeederLine.ElectricalFeederType[Type]\tTEXT\t\t251\t1\tPEnum_ElectricalFeederType\t1\n#\nGROUP\t252\tPset_ElectricAppliancePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9682862a-3105-492f-8a6a-1f66d53413ae\tPset_ElectricAppliancePHistory.PowerState[Type]\tMULTILINETEXT\t\t252\t1\tIfcTimeSeries\t1\n#\nGROUP\t253\tPset_ElectricApplianceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7b07423f-c1a4-4d56-8ccd-10a816471db9\tPset_ElectricApplianceTypeCommon.Reference[Type]\tTEXT\t\t253\t1\tIfcIdentifier\t1\nPARAM\tf62664b9-c44a-4521-ae51-8c57e6505e75\tPset_ElectricApplianceTypeCommon.Status[Type]\tTEXT\t\t253\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t254\tPset_ElectricApplianceTypeDishwasher\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tce6d3bf8-4679-48f0-8ab0-2465fa0fe989\tPset_ElectricApplianceTypeDishwasher.DishwasherType[Type]\tTEXT\t\t254\t1\tPEnum_ElectricApplianceDishwasherType\t1\n#\nGROUP\t255\tPset_ElectricApplianceTypeElectricCooker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td0f77eb3-7b10-4601-ab28-b9dc4b3485fb\tPset_ElectricApplianceTypeElectricCooker.ElectricCookerType[Type]\tTEXT\t\t255\t1\tPEnum_ElectricApplianceElectricCookerType\t1\n#\nGROUP\t256\tPset_ElectricDistributionBoardOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9a124d78-5d9c-4ec3-b468-06a70861d6f4\tPset_ElectricDistributionBoardOccurrence.IsMain[Type]\tYESNO\t\t256\t1\tIfcBoolean\t1\nPARAM\tb8621298-f362-45df-b3ae-443960a5bdd6\tPset_ElectricDistributionBoardOccurrence.IsSkilledOperator[Type]\tYESNO\t\t256\t1\tIfcBoolean\t1\n#\nGROUP\t257\tPset_ElectricDistributionBoardTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcdd9960e-ead4-4dc3-95eb-2116f77e64f2\tPset_ElectricDistributionBoardTypeCommon.Reference[Type]\tTEXT\t\t257\t1\tIfcIdentifier\t1\nPARAM\ta4d6fd9a-5ef2-47e1-8529-e48358eab8d7\tPset_ElectricDistributionBoardTypeCommon.Status[Type]\tTEXT\t\t257\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t258\tPset_ElectricDistributionPointCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t40cf0a71-b990-44c2-93df-8cd99b652352\tPset_ElectricDistributionPointCommon.CaseMaterial[Type]\tMULTILINETEXT\t\t258\t1\tIfcMaterial\t1\nPARAM\t7d4f3d7f-f37c-4431-8900-cbd26692b8a9\tPset_ElectricDistributionPointCommon.CaseWeight[Type]\tNUMBER\t\t258\t1\tIfcMassMeasure\t1\nPARAM\t7603f11f-4b5f-492a-bb08-c805831f6a10\tPset_ElectricDistributionPointCommon.IsMain[Type]\tYESNO\t\t258\t1\tIfcBoolean\t1\nPARAM\t3fc095cd-385a-47bb-8a2a-c9c8ba17df00\tPset_ElectricDistributionPointCommon.NumberOfDoors[Type]\tINTEGER\t\t258\t1\tIfcInteger\t1\nPARAM\tfb77d61e-0ac1-45b2-9b79-202d24bdc188\tPset_ElectricDistributionPointCommon.NumberOfOpenings[Type]\tINTEGER\t\t258\t1\tIfcInteger\t1\n#\nGROUP\t259\tPset_ElectricFlowStorageDevicePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3462db45-9e45-4add-93c5-46c644d64c63\tPset_ElectricFlowStorageDevicePHistory.Level[Type]\tNUMBER\t\t259\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t260\tPset_ElectricFlowStorageDeviceTypeBattery\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6ac04dc2-490a-47c1-8034-2426dad0915c\tPset_ElectricFlowStorageDeviceTypeBattery.AssemblyInstruction[Type]\tMULTILINETEXT\t\t260\t1\tIfcExternalReference\t1\nPARAM\t1eaa6613-4127-418e-98b3-01251465f131\tPset_ElectricFlowStorageDeviceTypeBattery.BatteryChargingType[Type]\tTEXT\t\t260\t1\tPEnum_BatteryChargingType\t1\nPARAM\t3f5a5045-25c6-4efb-9104-32c717a6da65\tPset_ElectricFlowStorageDeviceTypeBattery.CurrentRegulationRate[Type]\tNUMBER\t\t260\t1\tIfcRatioMeasure\t1\nPARAM\tcbc55b93-4d6d-4aa9-a427-1acb02a36053\tPset_ElectricFlowStorageDeviceTypeBattery.EncapsulationTechnologyCode[Type]\tTEXT\t\t260\t1\tIfcIdentifier\t1\nPARAM\t7844c5e7-f948-4876-a724-87ef573b3981\tPset_ElectricFlowStorageDeviceTypeBattery.NominalSupplyCurrent[Type]\tNUMBER\t\t260\t1\tIfcElectricCurrentMeasure\t1\nPARAM\te8a5255a-c0c0-4605-b7d4-d3cb3c8723be\tPset_ElectricFlowStorageDeviceTypeBattery.OpenCircuitVoltage[Type]\tNUMBER\t\t260\t1\tIfcElectricVoltageMeasure\t1\nPARAM\tdba88581-3610-4b09-a5e6-fd0b73f3d6b6\tPset_ElectricFlowStorageDeviceTypeBattery.VoltageRegulationRate[Type]\tNUMBER\t\t260\t1\tIfcRatioMeasure\t1\n#\nGROUP\t261\tPset_ElectricFlowStorageDeviceTypeCapacitor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb92e6320-fc5d-47a7-84ad-75252c3022a4\tPset_ElectricFlowStorageDeviceTypeCapacitor.NumberOfPhases[Type]\tINTEGER\t\t261\t1\tIfcCountMeasure\t1\n#\nGROUP\t262\tPset_ElectricFlowStorageDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t04d555a0-ab2c-4431-95fe-ad902b74dbd9\tPset_ElectricFlowStorageDeviceTypeCommon.ConnectedConductorFunction[Type]\tTEXT\t\t262\t1\tPEnum_ConductorFunctionEnum\t1\nPARAM\t31c7da45-fea5-48aa-b7da-4d6a9a052dfc\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PoleMaximumState[Type]\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t052e943d-41cd-4a80-808f-8ecb635540a9\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PoleMinimumState[Type]\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t295be0a0-9b95-4dc9-9b29-3865aff67ddc\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PolePowerFactorMaximumState[Type]\tNUMBER\t\t262\t1\tIfcReal\t1\nPARAM\ta0b861cd-2f2d-4eb1-8ae6-f222ca0aba47\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PolePowerFactorMinimumState[Type]\tNUMBER\t\t262\t1\tIfcReal\t1\nPARAM\t4a486daf-0fea-4fc2-bfcc-9494168e8a49\tPset_ElectricFlowStorageDeviceTypeCommon.MaximumInsulatedVoltage[Type]\tNUMBER\t\t262\t1\tIfcElectricVoltageMeasure\t1\nPARAM\tfc972fe9-4363-4974-a8ea-f11134ae3075\tPset_ElectricFlowStorageDeviceTypeCommon.ModuleCapacity[Type]\tNUMBER\t\t262\t1\tIfcElectricCapacitanceMeasure\t1\nPARAM\tfc691c01-4e09-4be8-aa2a-9c7296b7ec9f\tPset_ElectricFlowStorageDeviceTypeCommon.ModulesInParallel[Type]\tINTEGER\t\t262\t1\tIfcInteger\t1\nPARAM\t9bbc0b63-cccf-456c-bad4-8c448f34faeb\tPset_ElectricFlowStorageDeviceTypeCommon.ModulesInSeries[Type]\tINTEGER\t\t262\t1\tIfcInteger\t1\nPARAM\t5b81e277-1c89-4206-80e0-406f375de800\tPset_ElectricFlowStorageDeviceTypeCommon.NominalFrequency[Type]\tNUMBER\t\t262\t1\tIfcFrequencyMeasure\t1\nPARAM\t9e721675-3e74-4302-b28f-0e4d3de07c82\tPset_ElectricFlowStorageDeviceTypeCommon.NominalSupplyVoltage[Type]\tNUMBER\t\t262\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t1e836369-bb30-4b34-9e74-b9b9277fe08b\tPset_ElectricFlowStorageDeviceTypeCommon.NominalSupplyVoltageOffset[Type]\tMULTILINETEXT\t\t262\t1\tPropertyBoundedValue\t1\nPARAM\t6526155a-70a5-4a1e-8c5a-d6cc7d3f9f49\tPset_ElectricFlowStorageDeviceTypeCommon.PowerCapacity[Type]\tNUMBER\t\t262\t1\tIfcElectricChargeMeasure\t1\nPARAM\td384c59f-0609-441b-aa92-8c18e671d11e\tPset_ElectricFlowStorageDeviceTypeCommon.RadiativeFraction[Type]\tNUMBER\t\t262\t1\tIfcRatioMeasure\t1\nPARAM\t30ba38e0-792e-47dc-9d6b-b649a51bbaa9\tPset_ElectricFlowStorageDeviceTypeCommon.RatedCapacitance[Type]\tNUMBER\t\t262\t1\tIfcElectricCapacitanceMeasure\t1\nPARAM\tbdb08450-89cb-46c0-a8d5-f28f5e775612\tPset_ElectricFlowStorageDeviceTypeCommon.Reference[Type]\tTEXT\t\t262\t1\tIfcIdentifier\t1\nPARAM\tfe141333-82b0-4b01-a6df-84d1245316d7\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PoleMaximumState[Type]\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tbc558d22-5595-4522-bd27-97f51cb4be61\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PoleMinimumState[Type]\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t6cc288da-79b2-41a2-8a50-7095617bf8b9\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PolePowerFactorMaximumState[Type]\tNUMBER\t\t262\t1\tIfcReal\t1\nPARAM\t9bce1ed3-6156-47db-8335-8b5bc899feba\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PolePowerFactorMinimumState[Type]\tNUMBER\t\t262\t1\tIfcReal\t1\nPARAM\tc460d017-42ba-42f8-a6e0-9188747de49e\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit2PoleMinimumState[Type]\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t6c475af8-16dd-4a04-9ef6-1061834039c7\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit2PolePowerFactorMinimumState[Type]\tNUMBER\t\t262\t1\tIfcReal\t1\nPARAM\t8cfd7de0-f4a7-48a6-b412-d4a56f139fc1\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit3PoleMaximumState[Type]\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t0ad2067d-0c2e-41e3-931d-d9db0e4db0cc\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit3PolePowerFactorMaximumState[Type]\tNUMBER\t\t262\t1\tIfcReal\t1\nPARAM\t391dfdf3-e795-4d3b-bb47-1e25fa6a99da\tPset_ElectricFlowStorageDeviceTypeCommon.Status[Type]\tTEXT\t\t262\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t263\tPset_ElectricFlowStorageDeviceTypeInductor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t088f16ac-6eab-4b94-bd17-a90d5868915a\tPset_ElectricFlowStorageDeviceTypeInductor.Inductance[Type]\tNUMBER\t\t263\t1\tIfcInductanceMeasure\t1\nPARAM\te140b196-e606-4065-8dd2-f5537b0323ef\tPset_ElectricFlowStorageDeviceTypeInductor.NumberOfPhases[Type]\tINTEGER\t\t263\t1\tIfcCountMeasure\t1\n#\nGROUP\t264\tPset_ElectricFlowStorageDeviceTypeRecharger\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t002de6c5-8610-4c40-8a4a-848106bfea1d\tPset_ElectricFlowStorageDeviceTypeRecharger.NominalSupplyCurrent[Type]\tNUMBER\t\t264\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t265\tPset_ElectricFlowStorageDeviceTypeUPS\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tccff1891-a28e-4551-9055-43dcebfee51c\tPset_ElectricFlowStorageDeviceTypeUPS.AssemblyInstruction[Type]\tMULTILINETEXT\t\t265\t1\tIfcExternalReference\t1\nPARAM\tb98de123-0ea2-4048-aa81-d1bf17ebf882\tPset_ElectricFlowStorageDeviceTypeUPS.CurrentRegulationRate[Type]\tNUMBER\t\t265\t1\tIfcRatioMeasure\t1\nPARAM\t8cf4ff10-ff7c-4548-849d-dc7c4777e873\tPset_ElectricFlowStorageDeviceTypeUPS.NominalSupplyCurrent[Type]\tNUMBER\t\t265\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tf0d270e3-d311-40b0-9449-01934d4d39d3\tPset_ElectricFlowStorageDeviceTypeUPS.VoltageRegulationRate[Type]\tNUMBER\t\t265\t1\tIfcRatioMeasure\t1\n#\nGROUP\t266\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8bfa2c2c-96e5-43d5-85e8-7472eca8fe2b\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.ElectronicFilterType[Type]\tTEXT\t\t266\t1\tPEnum_ElectronicFilterType\t1\nPARAM\t8de08521-6fc7-42e5-a882-97185d26e7cd\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.NominalCurrent[Type]\tNUMBER\t\t266\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t723331f9-b489-48d2-9683-1c5b478c73a1\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.NominalPower[Type]\tNUMBER\t\t266\t1\tIfcPowerMeasure\t1\nPARAM\tc531a07c-0e7c-4ba2-99fc-413ecbb77f97\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.PrimaryFrequency[Type]\tNUMBER\t\t266\t1\tIfcFrequencyMeasure\t1\nPARAM\t0d4150f0-9943-4c50-bc7c-28e3d52f08af\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.RatedVoltage[Type]\tMULTILINETEXT\t\t266\t1\tPropertyBoundedValue\t1\nPARAM\t48ceabab-5f8c-47b0-9ea1-35ade0d6f0eb\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.SecondaryFrequency[Type]\tNUMBER\t\t266\t1\tIfcFrequencyMeasure\t1\n#\nGROUP\t267\tPset_ElectricGeneratorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tea6f1cc9-a98c-4d5a-94fb-bacf52a47cab\tPset_ElectricGeneratorTypeCommon.ElectricGeneratorEfficiency[Type]\tNUMBER\t\t267\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tfbddac21-2c2b-416f-b406-63d7845082d0\tPset_ElectricGeneratorTypeCommon.MaximumPowerOutput[Type]\tNUMBER\t\t267\t1\tIfcPowerMeasure\t1\nPARAM\t64d3987d-dc36-4d98-a086-04eff53dc764\tPset_ElectricGeneratorTypeCommon.Reference[Type]\tTEXT\t\t267\t1\tIfcIdentifier\t1\nPARAM\t25c344db-7c3a-4abf-8531-b1f2d3976e15\tPset_ElectricGeneratorTypeCommon.StartCurrentFactor[Type]\tNUMBER\t\t267\t1\tIfcReal\t1\nPARAM\t2f5676b4-0f91-49e3-bfa7-5e0466de4919\tPset_ElectricGeneratorTypeCommon.Status[Type]\tTEXT\t\t267\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t268\tPset_ElectricHeaterTypeElectricalCableHeater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t007eff40-d688-4158-8435-646cf2079ff0\tPset_ElectricHeaterTypeElectricalCableHeater.HeatOutputPerUnitLength[Type]\tNUMBER\t\t268\t1\t IfcPowerMeasure\t1\n#\nGROUP\t269\tPset_ElectricHeaterTypeElectricalMatHeater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td4831623-7ee6-4cf3-9df8-6ce75bebd423\tPset_ElectricHeaterTypeElectricalMatHeater.HeatOutputPerUnitArea[Type]\tNUMBER\t\t269\t1\t IfcPowerMeasure\t1\n#\nGROUP\t270\tPset_ElectricHeaterTypeElectricalPointHeater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t08858449-67a8-4f40-b2a5-486cd84fee04\tPset_ElectricHeaterTypeElectricalPointHeater.HeatOutput[Type]\tNUMBER\t\t270\t1\t IfcPowerMeasure\t1\n#\nGROUP\t271\tPset_ElectricMotorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbcfc9b86-8817-4f51-984c-00f099033daf\tPset_ElectricMotorTypeCommon.ElectricMotorEfficiency[Type]\tNUMBER\t\t271\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t145ddac3-f4df-4710-bdae-0a6d4261f52a\tPset_ElectricMotorTypeCommon.FrameSize[Type]\tTEXT\t\t271\t1\tIfcLabel\t1\nPARAM\t75c66f27-fd5d-43ca-8a4b-be6d9ea7bfb1\tPset_ElectricMotorTypeCommon.HasPartWinding[Type]\tYESNO\t\t271\t1\tIfcBoolean\t1\nPARAM\t546f2f1c-aa61-4fd5-9491-7e2c08547e45\tPset_ElectricMotorTypeCommon.IsGuarded[Type]\tYESNO\t\t271\t1\tIfcBoolean\t1\nPARAM\teb4b0328-d93f-43b3-9354-b04803d55caf\tPset_ElectricMotorTypeCommon.LockedRotorCurrent[Type]\tNUMBER\t\t271\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t126c8a63-627e-407f-83b0-92da11229964\tPset_ElectricMotorTypeCommon.MaximumPowerOutput[Type]\tNUMBER\t\t271\t1\tIfcPowerMeasure\t1\nPARAM\t6ebf61aa-bf6f-4150-baae-b4f631fface3\tPset_ElectricMotorTypeCommon.MotorEnclosureType[Type]\tTEXT\t\t271\t1\tPEnum_MotorEnclosureType\t1\nPARAM\t0c593b8a-c51a-42e7-ab1e-87ae1dc52b3e\tPset_ElectricMotorTypeCommon.Reference[Type]\tTEXT\t\t271\t1\tIfcIdentifier\t1\nPARAM\t2b61ddf2-05b2-42f2-9ff5-f45229296847\tPset_ElectricMotorTypeCommon.StartCurrentFactor[Type]\tNUMBER\t\t271\t1\tIfcReal\t1\nPARAM\t3b4bd756-7b09-43ff-b3d9-c8d768a35426\tPset_ElectricMotorTypeCommon.StartingTime[Type]\tNUMBER\t\t271\t1\tIfcTimeMeasure\t1\nPARAM\t1bf73ae1-f3ff-4437-b5a7-92859677aa34\tPset_ElectricMotorTypeCommon.Status[Type]\tTEXT\t\t271\t1\tPEnum_ElementStatus\t1\nPARAM\t3280b040-7ee3-430d-93b0-5be0049dfdcf\tPset_ElectricMotorTypeCommon.TeTime[Type]\tNUMBER\t\t271\t1\tIfcTimeMeasure\t1\n#\nGROUP\t272\tPset_ElectricTimeControlTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfe5c9822-f9f6-4e87-bcab-728b34373a1c\tPset_ElectricTimeControlTypeCommon.Reference[Type]\tTEXT\t\t272\t1\tIfcIdentifier\t1\nPARAM\t7895e832-dab4-4767-8eff-3cab37bf0396\tPset_ElectricTimeControlTypeCommon.Status[Type]\tTEXT\t\t272\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t273\tPset_ElementAssemblyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf0e00097-e118-42eb-820c-f73ae030885b\tPset_ElementAssemblyCommon.Reference[Type]\tTEXT\t\t273\t1\tIfcIdentifier\t1\nPARAM\t672d584f-cd8d-4e78-820e-dbf7cfa3d99a\tPset_ElementAssemblyCommon.Status[Type]\tTEXT\t\t273\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t274\tPset_ElementAssemblyTypeCantilever\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t165da3bb-7c99-40d9-a0fb-e70259ff13d2\tPset_ElementAssemblyTypeCantilever.AssemblyInstruction[Type]\tMULTILINETEXT\t\t274\t1\tIfcExternalReference\t1\nPARAM\tdb5a70e7-f0db-4890-85bf-410d837f697d\tPset_ElementAssemblyTypeCantilever.CantileverType[Type]\tTEXT\t\t274\t1\tPEnum_CantileverAssemblyType\t1\nPARAM\tde5bc2b4-ce93-40f7-9737-10c4f60673d5\tPset_ElementAssemblyTypeCantilever.ContactWireStagger[Type]\tLENGTH\t\t274\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t43de49f7-c3eb-4e72-a779-225fe4b5b276\tPset_ElementAssemblyTypeCantilever.SystemHeight[Type]\tLENGTH\t\t274\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t275\tPset_ElementAssemblyTypeDilatationPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8f1304bb-432b-43ab-9667-b3d2fead44bf\tPset_ElementAssemblyTypeDilatationPanel.BladesOrientation[Type]\tTEXT\t\t275\t1\tPEnum_BladesOrientation\t1\nPARAM\t90f313df-4fd6-4815-8eef-967790bd0bad\tPset_ElementAssemblyTypeDilatationPanel.DilatationLength[Type]\tLENGTH\t\t275\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t597873be-9f65-496a-a61e-fcec165892da\tPset_ElementAssemblyTypeDilatationPanel.ExpansionDirection[Type]\tTEXT\t\t275\t1\tPEnum_ExpansionDirection\t1\nPARAM\tec128c2c-be9e-4dde-99b5-46011863189e\tPset_ElementAssemblyTypeDilatationPanel.InstallationPlan[Type]\tMULTILINETEXT\t\t275\t1\tIfcDocumentReference\t1\nPARAM\tcc87b99e-00c5-4f60-b528-ef16755bb3ec\tPset_ElementAssemblyTypeDilatationPanel.TechnicalStandard[Type]\tMULTILINETEXT\t\t275\t1\tIfcExternalReference\t1\n#\nGROUP\t276\tPset_ElementAssemblyTypeHeadSpan\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t96dd1768-9e87-4856-a381-10c9286abbb5\tPset_ElementAssemblyTypeHeadSpan.AssemblyInstruction[Type]\tMULTILINETEXT\t\t276\t1\tIfcExternalReference\t1\nPARAM\t0b225bef-aeb3-4a81-baae-d3513419d09e\tPset_ElementAssemblyTypeHeadSpan.NumberOfTracksCrossed[Type]\tINTEGER\t\t276\t1\tIfcCountMeasure\t1\nPARAM\tacb44835-6255-4fc0-b873-6898f92c4ede\tPset_ElementAssemblyTypeHeadSpan.Span[Type]\tLENGTH\t\t276\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t277\tPset_ElementAssemblyTypeMast\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5f8eeb9b-24d9-4a30-8992-e2ab7bfde4c7\tPset_ElementAssemblyTypeMast.WithLightningRod[Type]\tYESNO\t\t277\t1\tIfcBoolean\t1\n#\nGROUP\t278\tPset_ElementAssemblyTypeOCSSuspension\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83175b84-63eb-445b-a93d-8029639d8f42\tPset_ElementAssemblyTypeOCSSuspension.ContactWireHeight[Type]\tLENGTH\t\t278\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t342ef3b1-c0c5-4a71-883e-b95a87b835fd\tPset_ElementAssemblyTypeOCSSuspension.ContactWireStagger[Type]\tLENGTH\t\t278\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t279\tPset_ElementAssemblyTypeRigidFrame\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t751b1ffe-c659-40cf-88bd-bd1cfc12e02c\tPset_ElementAssemblyTypeRigidFrame.AssemblyInstruction[Type]\tMULTILINETEXT\t\t279\t1\tIfcExternalReference\t1\nPARAM\t623e0401-7a83-45b6-b058-4164a4e94996\tPset_ElementAssemblyTypeRigidFrame.LoadCapacity[Type]\tNUMBER\t\t279\t1\tIfcForceMeasure\t1\nPARAM\t4bb5463d-c1fd-49d9-9621-8bcccff20a85\tPset_ElementAssemblyTypeRigidFrame.NumberOfTracksCrossed[Type]\tINTEGER\t\t279\t1\tIfcCountMeasure\t1\nPARAM\t68a8e6a8-94ec-4630-9b54-ae6df4d05f16\tPset_ElementAssemblyTypeRigidFrame.Span[Type]\tLENGTH\t\t279\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t280\tPset_ElementAssemblyTypeSteadyDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf268183b-596c-4cfd-bfd4-9ad57ac8decd\tPset_ElementAssemblyTypeSteadyDevice.AssemblyInstruction[Type]\tMULTILINETEXT\t\t280\t1\tIfcExternalReference\t1\nPARAM\t54ec0518-8e5d-4c5d-9d9c-44c6ce7d670a\tPset_ElementAssemblyTypeSteadyDevice.ContactWireStagger[Type]\tLENGTH\t\t280\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2dd7d373-8bf2-4d3c-b284-265c67fbf781\tPset_ElementAssemblyTypeSteadyDevice.IsSetOnWorkingWire[Type]\tYESNO\t\t280\t1\tIfcBoolean\t1\nPARAM\t059ce154-69bf-4fe0-a159-d3f290d53348\tPset_ElementAssemblyTypeSteadyDevice.SteadyDeviceType[Type]\tTEXT\t\t280\t1\tPEnum_SteadyDeviceType\t1\n#\nGROUP\t281\tPset_ElementAssemblyTypeSupportingAssembly\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc852a00e-3869-4c41-a9bb-585fb9414c6b\tPset_ElementAssemblyTypeSupportingAssembly.NumberOfCantilevers[Type]\tINTEGER\t\t281\t1\tIfcCountMeasure\t1\nPARAM\t99e77d01-c3d0-4dc8-ac25-5d9e50822b09\tPset_ElementAssemblyTypeSupportingAssembly.TypeOfSupportingSystem[Type]\tTEXT\t\t281\t1\tPEnum_SupportingSystemType\t1\n#\nGROUP\t282\tPset_ElementAssemblyTypeTrackPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf5251da5-901a-4598-9955-6b69715684bb\tPset_ElementAssemblyTypeTrackPanel.InstallationPlan[Type]\tMULTILINETEXT\t\t282\t1\tIfcDocumentReference\t1\nPARAM\t5d1cc289-128c-4f50-8b3f-110d96bea7a8\tPset_ElementAssemblyTypeTrackPanel.IsAccessibleByVehicle[Type]\tYESNO\t\t282\t1\tIfcBoolean\t1\nPARAM\t5ba9bfc7-b357-4c90-969d-608331c72d51\tPset_ElementAssemblyTypeTrackPanel.TrackExpansion[Type]\tMULTILINETEXT\t\t282\t1\tPropertyBoundedValue\t1\n#\nGROUP\t283\tPset_ElementAssemblyTypeTractionSwitchingAssembly\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teda01348-ef7c-4195-8ab2-c25ac910b4fc\tPset_ElementAssemblyTypeTractionSwitchingAssembly.DesignAmbientTemperature[Type]\tMULTILINETEXT\t\t283\t1\tPropertyBoundedValue\t1\nPARAM\t2eb115d4-11fe-479a-aec3-7611e1d43297\tPset_ElementAssemblyTypeTractionSwitchingAssembly.NominalCurrent[Type]\tNUMBER\t\t283\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t774bbabc-8d91-4a6e-90c0-3c6605e99e2a\tPset_ElementAssemblyTypeTractionSwitchingAssembly.NominalPower[Type]\tNUMBER\t\t283\t1\tIfcPowerMeasure\t1\nPARAM\t0f8a5a87-c684-443b-8a76-7673ccae8d56\tPset_ElementAssemblyTypeTractionSwitchingAssembly.RatedVoltage[Type]\tMULTILINETEXT\t\t283\t1\tPropertyBoundedValue\t1\n#\nGROUP\t284\tPset_ElementAssemblyTypeTurnoutPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8e147b6b-6550-4599-808e-70a6b5136dc2\tPset_ElementAssemblyTypeTurnoutPanel.BranchLineDirection[Type]\tTEXT\t\t284\t1\tPEnum_BranchLineDirection\t1\nPARAM\taea149fd-bb95-4e7e-addb-ef60e0822046\tPset_ElementAssemblyTypeTurnoutPanel.InstallationPlan[Type]\tMULTILINETEXT\t\t284\t1\tIfcDocumentReference\t1\nPARAM\t217ab683-83f1-42a1-977a-6a9582611b6b\tPset_ElementAssemblyTypeTurnoutPanel.IsAccessibleByVehicle[Type]\tYESNO\t\t284\t1\tIfcBoolean\t1\nPARAM\ta41cc2dd-00e9-46e8-ad38-f32c6f6ddf37\tPset_ElementAssemblyTypeTurnoutPanel.IsSharedTurnout[Type]\tYESNO\t\t284\t1\tIfcBoolean\t1\nPARAM\t5187419b-4bc4-4c73-980d-b3ba285557aa\tPset_ElementAssemblyTypeTurnoutPanel.MaximumSpeedLimitOfDivergingLine[Type]\tNUMBER\t\t284\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t767fec84-9abc-4d4e-ad60-1ff5a1c9771a\tPset_ElementAssemblyTypeTurnoutPanel.PercentShared[Type]\tNUMBER\t\t284\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t83d8cb33-20ab-4c40-b704-7ded00205ab4\tPset_ElementAssemblyTypeTurnoutPanel.TrackElementOrientation[Type]\tTEXT\t\t284\t1\tPEnum_TurnoutPanelOrientation\t1\nPARAM\td265ea2e-a58e-4346-9b05-17816190acff\tPset_ElementAssemblyTypeTurnoutPanel.TrackExpansion[Type]\tMULTILINETEXT\t\t284\t1\tPropertyBoundedValue\t1\nPARAM\t74e59432-1c88-4135-8336-904fbd219e2d\tPset_ElementAssemblyTypeTurnoutPanel.TrackGaugeLength[Type]\tLENGTH\t\t284\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta3a03cc9-6159-41ae-a7fa-d559efa7296f\tPset_ElementAssemblyTypeTurnoutPanel.TurnoutCurvedRadius[Type]\tLENGTH\t\t284\t1\tIfcLengthMeasure\t1\nPARAM\t9aae88cf-2ef7-4217-8539-2895f8aeffce\tPset_ElementAssemblyTypeTurnoutPanel.TurnoutHeaterType[Type]\tTEXT\t\t284\t1\tPEnum_TurnoutHeaterType\t1\nPARAM\t929af38b-a16b-42fd-bb68-6f73d9b5a8c8\tPset_ElementAssemblyTypeTurnoutPanel.TurnoutPointMachineCount[Type]\tINTEGER\t\t284\t1\tIfcCountMeasure\t1\nPARAM\t8193ca31-c0a6-4c04-94a2-0f4aa8a51ada\tPset_ElementAssemblyTypeTurnoutPanel.TypeOfCurvedTurnout[Type]\tTEXT\t\t284\t1\tPEnum_TypeOfCurvedTurnout\t1\nPARAM\t28330ea6-19b8-4552-b637-1b05cee7a7b4\tPset_ElementAssemblyTypeTurnoutPanel.TypeOfDrivingDevice[Type]\tTEXT\t\t284\t1\tPEnum_TypeOfDrivingDevice\t1\nPARAM\t9ff406b1-dfed-4614-b7c1-ec118d03cfff\tPset_ElementAssemblyTypeTurnoutPanel.TypeOfJunction[Type]\tTEXT\t\t284\t1\tPEnum_TypeOfJunction\t1\nPARAM\t3e5a3103-f2be-4a78-91dd-61aaf6ba57ea\tPset_ElementAssemblyTypeTurnoutPanel.TypeOfTurnout[Type]\tTEXT\t\t284\t1\tPEnum_TypeOfTurnout\t1\n#\nGROUP\t285\tPset_ElementComponentCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb51b6251-b0d2-4334-8802-60cd7303f3c4\tPset_ElementComponentCommon.CorrosionTreatment[Type]\tTEXT\t\t285\t1\tPEnum_ElementComponentCorrosionTreatment\t1\nPARAM\tb23cde0a-0f9e-4164-b2ca-4102c57dea7c\tPset_ElementComponentCommon.DeliveryType[Type]\tTEXT\t\t285\t1\tPEnum_ElementComponentDeliveryType\t1\nPARAM\t2687f13e-1866-4d7e-ad87-4e59e84818ab\tPset_ElementComponentCommon.Reference[Type]\tTEXT\t\t285\t1\tIfcIdentifier\t1\nPARAM\t5bd0c41f-24d5-4b60-a9bd-f15f91d4be41\tPset_ElementComponentCommon.Status[Type]\tTEXT\t\t285\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t286\tPset_ElementKinematics\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tab211fe4-28fd-4223-ba68-88773c12eef0\tPset_ElementKinematics.CyclicPath[Type]\tMULTILINETEXT\t\t286\t1\tPropertyTableValue\t1\nPARAM\t80fb336b-9ba6-49d9-8fd4-2a65a76e42f0\tPset_ElementKinematics.CyclicRange[Type]\tNUMBER\t\t286\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tc77c94c0-eb91-4ff3-b553-d5263a1dd82f\tPset_ElementKinematics.LinearPath[Type]\tMULTILINETEXT\t\t286\t1\tPropertyTableValue\t1\nPARAM\tbc1e38e3-09ff-452a-8b82-fd83a1d10181\tPset_ElementKinematics.LinearRange[Type]\tLENGTH\t\t286\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5052ca7e-8ee6-4841-bf50-d9a7913348fa\tPset_ElementKinematics.MaximumAngularVelocity[Type]\tNUMBER\t\t286\t1\tIfcAngularVelocityMeasure\t1\nPARAM\tbee9957e-13dc-413d-8d66-948809a8a2db\tPset_ElementKinematics.MaximumConstantSpeed[Type]\tNUMBER\t\t286\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t3893a360-31c2-4929-a293-42ad1746ce5e\tPset_ElementKinematics.MinimumTime[Type]\tNUMBER\t\t286\t1\tIfcTimeMeasure\t1\n#\nGROUP\t287\tPset_ElementShading\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t193e801f-c05a-4431-9b03-72750d167dbc\tPset_ElementShading.AverageSolarTransmittance[Type]\tNUMBER\t\t287\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1a592a34-b301-49c7-a14a-b0fbfe963d28\tPset_ElementShading.AverageVisibleTransmittance[Type]\tNUMBER\t\t287\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t99074339-15d8-4783-94ce-455160b626b3\tPset_ElementShading.Azimuth[Type]\tNUMBER\t\t287\t1\tIfcPositivePlaneAngleMeasure \t1\nPARAM\tcb037310-270e-468c-8430-5068780cd030\tPset_ElementShading.Color[Type]\tTEXT\t\t287\t1\tIfcLabel\t1\nPARAM\t08518dcd-d1bd-47ed-a8d2-37a536175a35\tPset_ElementShading.Inclination[Type]\tNUMBER\t\t287\t1\tIfcPositivePlaneAngleMeasure \t1\nPARAM\tbab0c12b-b225-4b38-ba32-1de59399a873\tPset_ElementShading.Reflectance[Type]\tNUMBER\t\t287\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t72deb207-587a-43c9-8a0a-f4546b8dac32\tPset_ElementShading.Roughness[Type]\tLENGTH\t\t287\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32482893-341d-4b19-ae70-0e116a0058cf\tPset_ElementShading.ShadingDeviceType[Type]\tTEXT\t\t287\t1\tPEnum_ElementShading\t1\nPARAM\tf54648cb-7213-4416-8bed-2ba2a84f2df0\tPset_ElementShading.TiltRange[Type]\tMULTILINETEXT\t\t287\t1\tPropertyBoundedValue\t1\n#\nGROUP\t288\tPset_ElementSize\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbd06a180-7c75-4e83-9763-e8f02afb8040\tPset_ElementSize.NominalHeight[Type]\tLENGTH\t\t288\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta735aab4-e242-458f-bfde-5faedb93b01e\tPset_ElementSize.NominalLength[Type]\tLENGTH\t\t288\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t59aacc7d-e194-404b-8927-f4add26a1e5f\tPset_ElementSize.NominalWidth[Type]\tLENGTH\t\t288\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t289\tPset_EmbeddedTrack\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6f014eab-cf6f-42c4-a824-eb9f2e158633\tPset_EmbeddedTrack.HasDrainage[Type]\tYESNO\t\t289\t1\tIfcBoolean\t1\nPARAM\tca6d5d61-fafa-421a-9dfe-ee895b693c25\tPset_EmbeddedTrack.IsAccessibleByVehicle[Type]\tYESNO\t\t289\t1\tIfcBoolean\t1\nPARAM\te408e566-78a2-4c0e-a4a7-87e67c9d3b87\tPset_EmbeddedTrack.PermissibleRoadLoad[Type]\tNUMBER\t\t289\t1\tIfcMassMeasure\t1\n#\nGROUP\t290\tPset_EnergyConsumptionPHistoryElectricity\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3d28c9b5-72a7-422d-8a47-c9e4d2664377\tPset_EnergyConsumptionPHistoryElectricity.ApparentPower[Type]\tNUMBER\t\t290\t1\tIfcReal\t1\nPARAM\t9042ed2f-4a44-428b-a0a5-a3f8ae0b7773\tPset_EnergyConsumptionPHistoryElectricity.Current[Type]\tTEXT\t\t290\t1\tIfcLabel\t1\nPARAM\t27c90246-3c96-4b65-95a8-e9d68e54bbe0\tPset_EnergyConsumptionPHistoryElectricity.PowerFactor[Type]\tNUMBER\t\t290\t1\tIfcReal\t1\nPARAM\tfc2ccf60-c5d1-4c09-b42e-dc9e1c0cab74\tPset_EnergyConsumptionPHistoryElectricity.ReactivePower[Type]\tNUMBER\t\t290\t1\tIfcReal\t1\nPARAM\tfa64c1f1-d4aa-4d01-bfc3-2d0daa9d9817\tPset_EnergyConsumptionPHistoryElectricity.RealPower[Type]\tNUMBER\t\t290\t1\tIfcReal\t1\nPARAM\taf592070-7632-4727-8974-d372b3b161d3\tPset_EnergyConsumptionPHistoryElectricity.Voltage[Type]\tTEXT\t\t290\t1\tIfcLabel\t1\n#\nGROUP\t291\tPset_EnergyConsumptionPHistoryFuel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t74694aaf-4128-4d7c-86fb-5a8b11f8a6e3\tPset_EnergyConsumptionPHistoryFuel.Flowrate[Type]\tNUMBER\t\t291\t1\tIfcReal\t1\nPARAM\t8bfac637-27c8-41ad-b84e-2ee80e856c83\tPset_EnergyConsumptionPHistoryFuel.Pressure[Type]\tNUMBER\t\t291\t1\tIfcReal\t1\nPARAM\t11cb0e19-3ad9-4b57-99a3-b9e62d95ab88\tPset_EnergyConsumptionPHistoryFuel.Temperature[Type]\tNUMBER\t\t291\t1\tIfcReal\t1\n#\nGROUP\t292\tPset_EnergyConsumptionPHistorySteam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb354304c-8e0d-4f91-8cb4-1ba5e90fc349\tPset_EnergyConsumptionPHistorySteam.Flowrate[Type]\tNUMBER\t\t292\t1\tIfcReal\t1\nPARAM\tcf8606fe-d648-4cc9-b63a-7c862b9569a6\tPset_EnergyConsumptionPHistorySteam.Pressure[Type]\tNUMBER\t\t292\t1\tIfcReal\t1\nPARAM\t9ad97d3a-48c4-41a0-b10e-bf5b49484100\tPset_EnergyConsumptionPHistorySteam.Quality[Type]\tTEXT\t\t292\t1\tIfcLabel\t1\nPARAM\t7f4b70bc-b59a-4631-bf97-29c7348a7b6d\tPset_EnergyConsumptionPHistorySteam.Temperature[Type]\tNUMBER\t\t292\t1\tIfcReal\t1\n#\nGROUP\t293\tPset_EnergyConversionDeviceCoil\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td04bf527-a9f8-426c-8b76-897e2e4f6d2c\tPset_EnergyConversionDeviceCoil.HasSoundAttentuation[Type]\tYESNO\t\t293\t1\tIfcBoolean\t1\n#\nGROUP\t294\tPset_EnergyConversionDeviceSpaceHeaterPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t512705a1-4e28-4091-8f5f-a2caabc33d27\tPset_EnergyConversionDeviceSpaceHeaterPanel.NumberOfPanels[Type]\tINTEGER\t\t294\t1\tIfcInteger\t1\n#\nGROUP\t295\tPset_EnergyConversionDeviceSpaceHeaterSectional\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb1a8cde5-64e7-4a63-af9a-6242daf977f1\tPset_EnergyConversionDeviceSpaceHeaterSectional.NumberOfSections[Type]\tINTEGER\t\t295\t1\tIfcInteger\t1\n#\nGROUP\t296\tPset_EnergyRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8f63981b-a230-4065-97cf-28c5519bb7e3\tPset_EnergyRequirements.EnergyConsumption[Type]\tNUMBER\t\t296\t1\tIfcEnergyMeasure\t1\nPARAM\t55f80cff-4133-4fe2-8470-8e1af8af2318\tPset_EnergyRequirements.EnergyConversionEfficiency[Type]\tNUMBER\t\t296\t1\tIfcRatioMeasure\t1\nPARAM\t533a07c3-463e-47ac-9f1f-82b7a7ab6267\tPset_EnergyRequirements.EnergySourceLabel[Type]\tTEXT\t\t296\t1\tIfcLabel\t1\nPARAM\t6d5aeaa9-f0a7-479f-b49d-240b923faf99\tPset_EnergyRequirements.PowerDemand[Type]\tNUMBER\t\t296\t1\tIfcPowerMeasure\t1\n#\nGROUP\t297\tPset_EngineTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta072d78d-8f5f-4d58-9f20-dc8b59b42c72\tPset_EngineTypeCommon.EnergySource[Type]\tTEXT\t\t297\t1\tPEnum_EngineEnergySource\t1\nPARAM\t19b2514c-4e93-4089-b0fb-6c85f9a4677a\tPset_EngineTypeCommon.Reference[Type]\tTEXT\t\t297\t1\tIfcIdentifier\t1\nPARAM\t5e48ba36-8abf-409f-a35c-110c9f691c62\tPset_EngineTypeCommon.Status[Type]\tTEXT\t\t297\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t298\tPset_EnvironmentalCondition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7bc2b377-2663-41b6-bc4c-7769e784c65b\tPset_EnvironmentalCondition.MaximumAtmosphericPressure[Type]\tNUMBER\t\t298\t1\tIfcPressureMeasure\t1\nPARAM\t7458f0b8-b558-4ed7-b924-c9c666f0a009\tPset_EnvironmentalCondition.MaximumRainIntensity[Type]\tNUMBER\t\t298\t1\tIfcReal\t1\nPARAM\tc4b74a7e-b91d-40c5-a918-daee0a6fd2cd\tPset_EnvironmentalCondition.MaximumSolarRadiation[Type]\tNUMBER\t\t298\t1\tIfcReal\t1\nPARAM\tc4e87289-6328-46bb-b912-4d94b01566c9\tPset_EnvironmentalCondition.MaximumWindSpeed[Type]\tNUMBER\t\t298\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t34cd4029-42c3-4301-9ed3-0bdc307d7c99\tPset_EnvironmentalCondition.OperationalTemperatureRange[Type]\tMULTILINETEXT\t\t298\t1\tPropertyBoundedValue\t1\nPARAM\tc471cfbe-b63a-44c1-bbe6-204f7e8a14c8\tPset_EnvironmentalCondition.ReferenceAirRelativeHumidity[Type]\tMULTILINETEXT\t\t298\t1\tPropertyBoundedValue\t1\nPARAM\t4fd5ff4d-e144-4d8c-b026-91d848fea6e5\tPset_EnvironmentalCondition.ReferenceEnvironmentTemperature[Type]\tMULTILINETEXT\t\t298\t1\tPropertyBoundedValue\t1\nPARAM\t1a997e53-7d9e-4788-ac66-42e1c85e61b7\tPset_EnvironmentalCondition.SaltMistLevel[Type]\tTEXT\t\t298\t1\tIfcLabel\t1\nPARAM\t8d8214f0-6afc-46a3-8599-d501cbf04c03\tPset_EnvironmentalCondition.SeismicResistance[Type]\tNUMBER\t\t298\t1\tIfcReal\t1\nPARAM\ta610796e-6cd6-4fbc-900c-2a717052f11b\tPset_EnvironmentalCondition.SmokeLevel[Type]\tTEXT\t\t298\t1\tIfcLabel\t1\nPARAM\tb06b1a80-35c6-4d8a-abd1-056d53ba8fcd\tPset_EnvironmentalCondition.StorageTemperatureRange[Type]\tMULTILINETEXT\t\t298\t1\tPropertyBoundedValue\t1\n#\nGROUP\t299\tPset_EnvironmentalEmissions\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tced102a0-dc7b-4d43-a373-69c5598c92eb\tPset_EnvironmentalEmissions.CarbonDioxideEmissions[Type]\tNUMBER\t\t299\t1\tIfcMassFlowRateMeasure\t1\nPARAM\ta336d232-5a89-4232-8d72-c1707f8276d2\tPset_EnvironmentalEmissions.NitrogenOxidesEmissions[Type]\tNUMBER\t\t299\t1\tIfcMassFlowRateMeasure\t1\nPARAM\t243f51f8-ac22-482f-8256-578bc68ec73f\tPset_EnvironmentalEmissions.NoiseEmissions[Type]\tNUMBER\t\t299\t1\tIfcSoundPowerLevelMeasure\t1\nPARAM\tdf99ebbd-b296-40df-b1b1-870a9ed007ad\tPset_EnvironmentalEmissions.ParticulateMatterEmissions[Type]\tNUMBER\t\t299\t1\tIfcMassFlowRateMeasure\t1\nPARAM\tb441cafd-45dc-4ece-ab1d-2bbfc4d046f9\tPset_EnvironmentalEmissions.SulphurDioxideEmissions[Type]\tNUMBER\t\t299\t1\tIfcMassFlowRateMeasure\t1\n#\nGROUP\t300\tPset_EnvironmentalImpactIndicators\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t193d0481-188c-4ed7-9323-fa8dd72128e1\tPset_EnvironmentalImpactIndicators.AtmosphericAcidificationPerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\t154ca6d1-6a3b-4ab3-9aed-cae6e7480363\tPset_EnvironmentalImpactIndicators.ClimateChangePerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\t86b1aa33-cb2e-4fdb-a381-437b029a9d96\tPset_EnvironmentalImpactIndicators.EutrophicationPerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\t817f69b1-81a8-497f-94da-e1c36c59aabb\tPset_EnvironmentalImpactIndicators.ExpectedServiceLife[Type]\tNUMBER\t\t300\t1\tIfcTimeMeasure\t1\nPARAM\td037f0fe-9b1e-4d13-baec-9db86edc3df7\tPset_EnvironmentalImpactIndicators.FunctionalUnitReference[Type]\tTEXT\t\t300\t1\tIfcLabel\t1\nPARAM\tf0caa374-a266-4ece-aa47-7feff2f7f48a\tPset_EnvironmentalImpactIndicators.HazardousWastePerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\tc4b5350a-036a-45b2-96d9-d99e56386601\tPset_EnvironmentalImpactIndicators.IndicatorsUnit[Type]\tTEXT\t\t300\t1\tIfcText\t1\nPARAM\tdeee4245-0861-46e7-8d73-a81c24066957\tPset_EnvironmentalImpactIndicators.InertWastePerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\tdaa94867-2cc9-477f-b1e9-ebb4e71d6f37\tPset_EnvironmentalImpactIndicators.LifeCyclePhase[Type]\tTEXT\t\t300\t1\tPEnum_LifeCyclePhase\t1\nPARAM\t2ece8d5a-4d15-48a1-b510-77e665fa0749\tPset_EnvironmentalImpactIndicators.NonHazardousWastePerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\t31fa257c-1370-47b8-9c62-653300ed931c\tPset_EnvironmentalImpactIndicators.NonRenewableEnergyConsumptionPerUnit[Type]\tNUMBER\t\t300\t1\tIfcEnergyMeasure\t1\nPARAM\t7bc2480c-da7e-4d40-8860-d882c271f976\tPset_EnvironmentalImpactIndicators.PhotochemicalOzoneFormationPerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\taeaa7f5d-922f-408b-9b47-28fb37b6a4e8\tPset_EnvironmentalImpactIndicators.RadioactiveWastePerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\tdea8caf5-57ee-49de-8ad0-d3a4d584dfa7\tPset_EnvironmentalImpactIndicators.Reference[Type]\tTEXT\t\t300\t1\tIfcIdentifier\t1\nPARAM\tb9abcd98-3b29-4a80-9bdb-56ca4492ba38\tPset_EnvironmentalImpactIndicators.RenewableEnergyConsumptionPerUnit[Type]\tNUMBER\t\t300\t1\tIfcEnergyMeasure\t1\nPARAM\tf45c77d0-f58f-497b-af58-1fda207bc557\tPset_EnvironmentalImpactIndicators.ResourceDepletionPerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\tc85fb7e4-403a-41e2-b2a1-72caf299a056\tPset_EnvironmentalImpactIndicators.StratosphericOzoneLayerDestructionPerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\tc9c82999-b2ff-493a-8afb-ff91a2086013\tPset_EnvironmentalImpactIndicators.TotalPrimaryEnergyConsumptionPerUnit[Type]\tNUMBER\t\t300\t1\tIfcEnergyMeasure\t1\nPARAM\t1a5dd29a-ad7c-41e7-a134-64e5915305f6\tPset_EnvironmentalImpactIndicators.Unit[Type]\tTEXT\t\t300\t1\tIfcText\t1\nPARAM\tcb3113b4-b5e9-4162-a159-fd784c268ab2\tPset_EnvironmentalImpactIndicators.WaterConsumptionPerUnit[Type]\tVOLUME\t\t300\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t301\tPset_EnvironmentalImpactValues\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfacaa2b8-860d-4cf5-bed4-dc0f78e4e670\tPset_EnvironmentalImpactValues.AtmosphericAcidification[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t8ae93962-3332-45f8-9d44-d478b646a0fa\tPset_EnvironmentalImpactValues.ClimateChange[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t8aae7f49-14a0-4f3d-8616-4685f9bd9400\tPset_EnvironmentalImpactValues.Duration[Type]\tTEXT\t\t301\t1\tIfcDuration\t1\nPARAM\tefd5f2fb-78bd-49a1-a175-1b60d16daca6\tPset_EnvironmentalImpactValues.Eutrophication[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t6a3675c7-8295-4edc-86c2-7684d0297089\tPset_EnvironmentalImpactValues.HazardousWaste[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t82255ec4-9b19-4215-9d6a-835deedd61f3\tPset_EnvironmentalImpactValues.InertWaste[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\te4549a76-c69d-4eb1-b9a6-a02cfbf9ff53\tPset_EnvironmentalImpactValues.LeadInTime[Type]\tTEXT\t\t301\t1\tIfcDuration\t1\nPARAM\t768696be-5d13-495f-a7e5-2f664fb2dfd5\tPset_EnvironmentalImpactValues.LeadOutTime[Type]\tTEXT\t\t301\t1\tIfcDuration\t1\nPARAM\t7c894a43-a1f4-47b6-b0b3-c699c81e9f29\tPset_EnvironmentalImpactValues.NonHazardousWaste[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t1e57f1e9-53af-4ed6-a984-75d8638e1cf2\tPset_EnvironmentalImpactValues.NonRenewableEnergyConsumption[Type]\tNUMBER\t\t301\t1\tIfcEnergyMeasure\t1\nPARAM\tf9ab6bdb-7110-4f76-98f3-911e94e474e6\tPset_EnvironmentalImpactValues.PhotochemicalOzoneFormation[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t6865a0ee-8c20-4a3f-bf92-c507d52ec6a7\tPset_EnvironmentalImpactValues.RadioactiveWaste[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\taee6a30c-8fee-4f14-9fb1-3bd962c91b97\tPset_EnvironmentalImpactValues.RenewableEnergyConsumption[Type]\tNUMBER\t\t301\t1\tIfcEnergyMeasure\t1\nPARAM\t7760c3b7-6602-4099-9c15-739a0bcc3c80\tPset_EnvironmentalImpactValues.ResourceDepletion[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t76937367-c37e-4811-80ec-e0f4bb5aae9c\tPset_EnvironmentalImpactValues.StratosphericOzoneLayerDestruction[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\tbe11b9d0-0bcb-4893-aa9b-3fc738c00de1\tPset_EnvironmentalImpactValues.TotalPrimaryEnergyConsumption[Type]\tNUMBER\t\t301\t1\tIfcEnergyMeasure\t1\nPARAM\t4314f3b1-306b-4e89-ab27-d52c0b1b0741\tPset_EnvironmentalImpactValues.WaterConsumption[Type]\tVOLUME\t\t301\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t302\tPset_EvaporativeCoolerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb6971c07-50d2-4539-8485-84b979c9f748\tPset_EvaporativeCoolerPHistory.AirPressureDropCurve[Type]\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\nPARAM\te1ae9e6e-7c36-46d5-89a9-208fe7fd32ee\tPset_EvaporativeCoolerPHistory.Effectiveness[Type]\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\nPARAM\t69f3f737-1b05-4085-aec4-011a2f40d185\tPset_EvaporativeCoolerPHistory.EffectivenessTable[Type]\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\nPARAM\t5fd3f9c2-ffbe-4a5b-838a-53aed287054e\tPset_EvaporativeCoolerPHistory.LatentHeatTransferRate[Type]\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\nPARAM\t1897793a-37c7-412f-869c-936bb487a9c0\tPset_EvaporativeCoolerPHistory.SensibleHeatTransferRate[Type]\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\nPARAM\t7f6d3dae-4a6e-4e55-b87f-749db54b6d66\tPset_EvaporativeCoolerPHistory.TotalHeatTransferRate[Type]\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\nPARAM\t83fcdcdc-a984-49ad-9513-e70447df5a63\tPset_EvaporativeCoolerPHistory.WaterPressDropCurve[Type]\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\nPARAM\tde3b7ce1-6188-4b9a-add8-dbb77822117a\tPset_EvaporativeCoolerPHistory.WaterSumpTemperature[Type]\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\n#\nGROUP\t303\tPset_EvaporativeCoolerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7dac8738-a984-440d-9960-5a8cfaaa07d4\tPset_EvaporativeCoolerTypeCommon.AirPressureDropCurve[Type]\tMULTILINETEXT\t\t303\t1\tPropertyTableValue\t1\nPARAM\t304478c7-f437-4cea-99ca-c512078c452a\tPset_EvaporativeCoolerTypeCommon.EffectivenessTable[Type]\tMULTILINETEXT\t\t303\t1\tPropertyTableValue\t1\nPARAM\tdda00dc0-8d68-4742-b110-bf86b1038ed5\tPset_EvaporativeCoolerTypeCommon.FlowArrangement[Type]\tTEXT\t\t303\t1\tPEnum_EvaporativeCoolerFlowArrangement\t1\nPARAM\td3097cf7-f04e-4d3b-8730-7af7047595f2\tPset_EvaporativeCoolerTypeCommon.HeatExchangeArea[Type]\tAREA\t\t303\t1\tIfcAreaMeasure\t1\nPARAM\t96fa0ddd-5f71-4389-a4a3-086201abb07d\tPset_EvaporativeCoolerTypeCommon.HeatExchangerMediaMaterials[Type]\tMULTILINETEXT\t\t303\t1\tIfcMaterial\t1\nPARAM\t221b314b-7d49-4412-8593-d1bfa6c4d2f3\tPset_EvaporativeCoolerTypeCommon.OperationTemperatureRange[Type]\tMULTILINETEXT\t\t303\t1\tPropertyBoundedValue\t1\nPARAM\te74c8458-eb2b-4261-b92a-644709ab549d\tPset_EvaporativeCoolerTypeCommon.Reference[Type]\tTEXT\t\t303\t1\tIfcIdentifier\t1\nPARAM\tb519cf7e-4a4f-488e-92d2-177324247de3\tPset_EvaporativeCoolerTypeCommon.Status[Type]\tTEXT\t\t303\t1\tPEnum_ElementStatus\t1\nPARAM\t7728d7b4-8380-49e5-aa4c-7a0140cce8f4\tPset_EvaporativeCoolerTypeCommon.WaterPressDropCurve[Type]\tMULTILINETEXT\t\t303\t1\tPropertyTableValue\t1\nPARAM\te6f45d0a-4643-4702-9ed2-a97f8e68730f\tPset_EvaporativeCoolerTypeCommon.WaterRequirement[Type]\tNUMBER\t\t303\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t2359bf75-2493-4338-8312-3818655d3194\tPset_EvaporativeCoolerTypeCommon.Weight[Type]\tNUMBER\t\t303\t1\tIfcMassMeasure\t1\n#\nGROUP\t304\tPset_EvaporatorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t543b972c-6226-4ecd-b656-d61a08cb3e15\tPset_EvaporatorPHistory.CompressorEvaporatorHeatGain[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\t255c4db4-c934-4ecb-93b6-2fe39036546a\tPset_EvaporatorPHistory.CompressorEvaporatorPressureDrop[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\t7dff761e-7186-4c45-9873-676e8cfdbca3\tPset_EvaporatorPHistory.EvaporatingTemperature[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\t82df70a6-ba35-46c8-aa9c-9e64ab154391\tPset_EvaporatorPHistory.EvaporatorMeanVoidFraction[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\t6e50589e-a3fa-46e5-a5af-66f79b13f030\tPset_EvaporatorPHistory.ExteriorHeatTransferCoefficient[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\t1df5c552-4518-43fe-a83b-ff23fd9c394a\tPset_EvaporatorPHistory.HeatRejectionRate[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\taa6ee048-0b94-4508-abbb-46dd28a89a27\tPset_EvaporatorPHistory.InteriorHeatTransferCoefficient[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\t6c6a856d-5059-442c-bb9a-a611b44b42d6\tPset_EvaporatorPHistory.LogarithmicMeanTemperatureDifference[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\t48444ca9-479d-446d-a5e3-74790d390d49\tPset_EvaporatorPHistory.RefrigerantFoulingResistance[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\ta102893f-b722-432c-abf8-2cecb604b7ce\tPset_EvaporatorPHistory.RefrigrerantFoulingResistance[Type]\tNUMBER\t\t304\t1\tIfcReal\t1\nPARAM\t8c18f955-b228-4fdc-b3c6-dd6f508cde70\tPset_EvaporatorPHistory.UAcurves[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\te9601450-bb16-4e5b-9b55-c908b1fdfb7e\tPset_EvaporatorPHistory.WaterFoulingResistance[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\n#\nGROUP\t305\tPset_EvaporatorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t252f7b79-b22f-41b2-a6d9-0afbd757e196\tPset_EvaporatorTypeCommon.EvaporatorCoolant[Type]\tTEXT\t\t305\t1\tPEnum_EvaporatorCoolant\t1\nPARAM\t50a63a97-458d-404e-b0bb-d666331bab7a\tPset_EvaporatorTypeCommon.EvaporatorMediumType[Type]\tTEXT\t\t305\t1\tPEnum_EvaporatorMediumType\t1\nPARAM\t4cbf26bb-7b19-4d77-af28-9fa2ea73dc50\tPset_EvaporatorTypeCommon.ExternalSurfaceArea[Type]\tAREA\t\t305\t1\tIfcAreaMeasure\t1\nPARAM\ta60c360e-eb26-4187-8402-91bc94183baf\tPset_EvaporatorTypeCommon.InternalRefrigerantVolume[Type]\tVOLUME\t\t305\t1\tIfcVolumeMeasure\t1\nPARAM\tfae07707-46dd-4238-a319-7cb7d5b550cf\tPset_EvaporatorTypeCommon.InternalSurfaceArea[Type]\tAREA\t\t305\t1\tIfcAreaMeasure\t1\nPARAM\t5c480298-e221-42be-9b9f-efb5b6b22358\tPset_EvaporatorTypeCommon.InternalWaterVolume[Type]\tVOLUME\t\t305\t1\tIfcVolumeMeasure\t1\nPARAM\tfe416e1c-52ba-4a5f-a846-88d6f064e7ed\tPset_EvaporatorTypeCommon.NominalHeatTransferArea[Type]\tAREA\t\t305\t1\tIfcAreaMeasure\t1\nPARAM\t3c290506-1c2e-4600-9786-5f7e459bc832\tPset_EvaporatorTypeCommon.NominalHeatTransferCoefficient[Type]\tNUMBER\t\t305\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t9ac7cb3f-0b84-4196-adfd-ce5efab6d09e\tPset_EvaporatorTypeCommon.Reference[Type]\tTEXT\t\t305\t1\tIfcIdentifier\t1\nPARAM\t50de116a-7888-4eeb-bac7-693faea52036\tPset_EvaporatorTypeCommon.RefrigerantClass[Type]\tTEXT\t\t305\t1\tPEnum_RefrigerantClass\t1\nPARAM\t68332a8a-9ba3-4bee-bb09-209909b44de7\tPset_EvaporatorTypeCommon.RefrigerantType[Type]\tMULTILINETEXT\t\t305\t1\tIfcMaterial\t1\nPARAM\t37b93835-5ce4-4aba-8924-c9439562c06b\tPset_EvaporatorTypeCommon.Status[Type]\tTEXT\t\t305\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t306\tPset_FanCentrifugal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t90f9396f-78e0-4736-8c8c-b623d6e72e8c\tPset_FanCentrifugal.Arrangement[Type]\tTEXT\t\t306\t1\tPEnum_CentrifugalFanArrangement\t1\nPARAM\t5aa2f8d1-8844-4efe-a2e7-bac835ca7843\tPset_FanCentrifugal.DirectionOfRotation[Type]\tTEXT\t\t306\t1\tPEnum_CentrifugalFanRotation\t1\nPARAM\t5ba0dfd5-7c8a-4863-88e3-41101b3b45b8\tPset_FanCentrifugal.DischargePosition[Type]\tTEXT\t\t306\t1\tPEnum_CentrifugalFanDischargePosition\t1\nPARAM\t8d4ccf98-875f-4952-b3f1-ee50e4394eca\tPset_FanCentrifugal.FanArrangement[Type]\tTEXT\t\t306\t1\tPEnum_CentrifugalFanArrangement\t1\n#\nGROUP\t307\tPset_FanOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t78c95df0-f2d5-4b53-a897-86a6b8d08c2b\tPset_FanOccurrence.ApplicationOfFan[Type]\tTEXT\t\t307\t1\tPEnum_FanApplicationType\t1\nPARAM\t3c3d323d-20b2-4080-983a-fba3cad59b97\tPset_FanOccurrence.CoilPosition[Type]\tTEXT\t\t307\t1\tPEnum_FanCoilPosition\t1\nPARAM\tefd72789-15ed-46c9-b4e6-1e9604862e15\tPset_FanOccurrence.DischargeType[Type]\tTEXT\t\t307\t1\tPEnum_FanDischargeType\t1\nPARAM\tfdc964df-8a35-4e0e-8787-653416bdd1c8\tPset_FanOccurrence.FanMountingType[Type]\tTEXT\t\t307\t1\tPEnum_FanMountingType\t1\nPARAM\tec836df0-89f0-4171-ae51-0182f68244ce\tPset_FanOccurrence.FractionOfMotorHeatToAirStream[Type]\tNUMBER\t\t307\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\te0813554-6a2e-4aa3-99b1-e5c61e40e278\tPset_FanOccurrence.ImpellerDiameter[Type]\tLENGTH\t\t307\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9251940c-8840-4f88-a125-f60fc8ba1fc0\tPset_FanOccurrence.MotorPosition[Type]\tTEXT\t\t307\t1\tPEnum_FanMotorPosition\t1\n#\nGROUP\t308\tPset_FanPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6aa3fce9-fae3-4186-8d09-0411897af2db\tPset_FanPHistory.DischargePressureLoss[Type]\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\tb6c6e214-7589-434b-8b9e-7e70d53fa3c3\tPset_FanPHistory.DischargeVelocity[Type]\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\taccafe6b-14a3-4267-93e9-6fddc2847f80\tPset_FanPHistory.DrivePowerLoss[Type]\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\tb4a94c4f-5cda-46c8-a536-86ab783b0dc5\tPset_FanPHistory.EfficiencyCurve[Type]\tMULTILINETEXT\t\t308\t1\tPropertyTableValue\t1\nPARAM\tf7bb7d6c-3aff-4e9b-a022-7756f5be6f12\tPset_FanPHistory.FanEfficiency[Type]\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\tab8ce112-0772-4900-b94f-78d9d09448d1\tPset_FanPHistory.FanPowerRate[Type]\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\ta01a4573-9eea-47f3-b263-533d790ce992\tPset_FanPHistory.FanRotationSpeed[Type]\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\tb133b690-7c6c-4a21-9df0-adae97179009\tPset_FanPHistory.OverallEfficiency[Type]\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\tf4bec7e0-51f6-492d-ad44-67f62662661c\tPset_FanPHistory.PressureCurve[Type]\tMULTILINETEXT\t\t308\t1\tPropertyTableValue\t1\nPARAM\t2012f034-f651-412d-ac3c-0b4fd2f72033\tPset_FanPHistory.ShaftPowerRate[Type]\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\t77684b85-0fa9-4f8e-9aa6-396da5957ae1\tPset_FanPHistory.WheelTipSpeed[Type]\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\n#\nGROUP\t309\tPset_FanTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t898192cb-9c5e-4148-8ed8-a7b917d05aca\tPset_FanTypeCommon.CapacityControlType[Type]\tTEXT\t\t309\t1\tPEnum_FanCapacityControlType\t1\nPARAM\te70cb649-1903-4d32-ad7f-4b2edb739ad9\tPset_FanTypeCommon.EfficiencyCurve[Type]\tMULTILINETEXT\t\t309\t1\tPropertyTableValue\t1\nPARAM\te513b780-22d1-44fb-9e39-e36a531ed9bf\tPset_FanTypeCommon.HousingMaterial[Type]\tMULTILINETEXT\t\t309\t1\tIfcMaterial\t1\nPARAM\t4a498388-eedf-4543-b93d-901f07182743\tPset_FanTypeCommon.MotorDriveType[Type]\tTEXT\t\t309\t1\tPEnum_FanMotorConnectionType\t1\nPARAM\t0afec59b-cafe-4d88-8761-6aa4826733e2\tPset_FanTypeCommon.NominalAirFlowRate[Type]\tNUMBER\t\t309\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tb17202de-4ebf-44ee-bc03-41fc1763f9d0\tPset_FanTypeCommon.NominalPowerRate[Type]\tNUMBER\t\t309\t1\tIfcPowerMeasure\t1\nPARAM\ta8c6c86e-73bf-4372-b4ae-c0aa9d55e540\tPset_FanTypeCommon.NominalRotationSpeed[Type]\tNUMBER\t\t309\t1\tIfcRotationalFrequencyMeasure\t1\nPARAM\tdaadde6b-ca10-4546-bef5-9be68203cb7a\tPset_FanTypeCommon.NominalStaticPressure[Type]\tNUMBER\t\t309\t1\tIfcPressureMeasure\t1\nPARAM\t81737135-efef-4844-9aff-4d78d069725c\tPset_FanTypeCommon.NominalTotalPressure[Type]\tNUMBER\t\t309\t1\tIfcPressureMeasure\t1\nPARAM\t6918da5a-7cfb-4038-b912-59b6194cd72a\tPset_FanTypeCommon.OperationalCriteria[Type]\tNUMBER\t\t309\t1\tIfcTimeMeasure\t1\nPARAM\t8ae70db8-a3e5-4d12-8e33-6b72948c7af5\tPset_FanTypeCommon.OperationTemperatureRange[Type]\tMULTILINETEXT\t\t309\t1\tPropertyBoundedValue\t1\nPARAM\t9625c23d-2848-43f6-800e-33610ce68495\tPset_FanTypeCommon.PressureCurve[Type]\tMULTILINETEXT\t\t309\t1\tPropertyTableValue\t1\nPARAM\t27fec5cf-a11d-4ec2-b8ce-f075ffd4bb66\tPset_FanTypeCommon.Reference[Type]\tTEXT\t\t309\t1\tIfcIdentifier\t1\nPARAM\t7406e870-1603-4468-9075-a1fb8006eba3\tPset_FanTypeCommon.Status[Type]\tTEXT\t\t309\t1\tPEnum_ElementStatus\t1\nPARAM\tc8fdf253-a95e-412a-8f7f-cb140d3f2bf1\tPset_FanTypeCommon.Weight[Type]\tNUMBER\t\t309\t1\tIfcMassMeasure\t1\nPARAM\t45aebad3-b118-48ec-bbd1-9f5a5ff3cd33\tPset_FanTypeCommon.WheelMaterial[Type]\tMULTILINETEXT\t\t309\t1\tIfcMaterial\t1\n#\nGROUP\t310\tPset_FanTypeSmokeControl\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdd6bcef2-caf2-48c1-9f7a-366465df8176\tPset_FanTypeSmokeControl.MaximumDesignTemperature[Type]\tNUMBER\t\t310\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t0b4f51ce-8e2a-46d2-8709-d7f0b39f967f\tPset_FanTypeSmokeControl.OperationalCriteria[Type]\tNUMBER\t\t310\t1\tIfcTimeMeasure\t1\nPARAM\td7ee2dc5-b342-4a22-801f-d20acce722b6\tPset_FanTypeSmokeControl.SmokeControlFlowrate[Type]\tNUMBER\t\t310\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t311\tPset_FastenerRailWeld\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1693d6b3-ddd8-4bab-b599-592dd112de7b\tPset_FastenerRailWeld.AssemblyPlace[Type]\tTEXT\t\t311\t1\tPEnum_AssemblyPlace\t1\nPARAM\tc4665d91-1788-43b2-9311-998df4d901b0\tPset_FastenerRailWeld.IsLiftingBracket[Type]\tYESNO\t\t311\t1\tIfcBoolean\t1\nPARAM\t0bc66d39-030f-480b-8ff2-efb73855cb8c\tPset_FastenerRailWeld.JointRelativePosition[Type]\tTEXT\t\t311\t1\tPEnum_RelativePosition\t1\nPARAM\td7098bcb-5faf-40c6-98d2-0f0d192e1913\tPset_FastenerRailWeld.TemperatureDuringInstallation[Type]\tNUMBER\t\t311\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t312\tPset_FastenerWeld\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb41aa474-6bb7-4964-9dda-c153eaa946b3\tPset_FastenerWeld.a[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf01f0922-2428-4ec5-ba5c-d9473807e182\tPset_FastenerWeld.c[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t866b9f65-e30e-482a-9006-2ab9b73ea111\tPset_FastenerWeld.d[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9e961fa0-cdb0-4e33-9627-78eb7a6b2433\tPset_FastenerWeld.DeepPenetrationThroatThickness[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2eed70b9-d512-491a-930e-bcdff312a7c4\tPset_FastenerWeld.e[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4b137546-bca2-4212-a8a7-e6af3a2afcd7\tPset_FastenerWeld.Intermittent[Type]\tYESNO\t\t312\t1\tIfcBoolean\t1\nPARAM\teaaf51d4-5289-4471-b0e1-9602e4330aed\tPset_FastenerWeld.l[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t65f1a2b6-4cad-4057-bd2b-e66571648390\tPset_FastenerWeld.n[Type]\tINTEGER\t\t312\t1\tIfcCountMeasure\t1\nPARAM\tc614c797-5ba5-4e33-b124-4fac880dbdc1\tPset_FastenerWeld.NominalThroatThickness[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t73c970be-293c-4748-96f1-af61ae81a3e6\tPset_FastenerWeld.NumberOfWeldElements[Type]\tINTEGER\t\t312\t1\tIfcCountMeasure\t1\nPARAM\t310caa61-2b3f-4edf-bb4c-684243890437\tPset_FastenerWeld.Process[Type]\tINTEGER\t\t312\t1\tIfcInteger\t1\nPARAM\t8aaac216-4078-4865-aa0d-1919fc81c7c2\tPset_FastenerWeld.ProcessName[Type]\tTEXT\t\t312\t1\tIfcLabel\t1\nPARAM\t0731d4e4-fa58-4076-a92a-fbae9ab7f848\tPset_FastenerWeld.s[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t510b3c43-753c-4d19-96f3-40ccde8fe538\tPset_FastenerWeld.Staggered[Type]\tYESNO\t\t312\t1\tIfcBoolean\t1\nPARAM\ta5055df2-e085-4f9c-9704-c2f03bf019f5\tPset_FastenerWeld.Surface1[Type]\tTEXT\t\t312\t1\tIfcLabel\t1\nPARAM\t2fc7d7b3-336c-4fec-a9c8-1ad9efb063ce\tPset_FastenerWeld.Surface2[Type]\tTEXT\t\t312\t1\tIfcLabel\t1\nPARAM\tb2c8ca5f-df63-442b-9659-93fb2c6f6801\tPset_FastenerWeld.Type1[Type]\tTEXT\t\t312\t1\tIfcLabel\t1\nPARAM\t78489e20-3138-4886-876b-1104af47fdf4\tPset_FastenerWeld.Type2[Type]\tTEXT\t\t312\t1\tIfcLabel\t1\nPARAM\t1fe1622d-8151-4fef-8e3e-1d56e85c31b2\tPset_FastenerWeld.WeldDiameter[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t68dcea85-e8e5-4e47-b08c-688dd5a581e1\tPset_FastenerWeld.WeldElementLength[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t63e86cdb-4cbe-41ec-aabe-10957e9203e0\tPset_FastenerWeld.WeldElementSpacing[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6d7a6c67-d9fc-4223-9566-9c1b72c02041\tPset_FastenerWeld.WeldLegLength[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6c9feefc-a1ba-4814-b773-28724cba968d\tPset_FastenerWeld.WeldWidth[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0709adc8-3d27-4ed4-b7af-9cef4cebddde\tPset_FastenerWeld.z[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t313\tPset_FenderCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tccfd1a8a-1231-4a16-80aa-cd65c3c5824f\tPset_FenderCommon.CoefficientOfFriction[Type]\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t10c12eb1-f99e-4202-ab37-1629aa0e7092\tPset_FenderCommon.EnergyAbsorption[Type]\tNUMBER\t\t313\t1\tIfcEnergyMeasure\t1\nPARAM\t3d86ea78-5dd8-4290-9f13-b8a692e2b29c\tPset_FenderCommon.EnergyAbsorptionTolerance[Type]\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7992bae3-ba24-4f66-967f-28ee780917a6\tPset_FenderCommon.FenderType[Type]\tTEXT\t\t313\t1\tPEnum_FenderType\t1\nPARAM\ta28f23b7-019e-4e8b-b711-80dbc345f2d4\tPset_FenderCommon.MaximumTemperatureFactor[Type]\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0e8ae3ec-67f7-4f39-abc2-a29cb5b27770\tPset_FenderCommon.MaxReaction[Type]\tNUMBER\t\t313\t1\tIfcForceMeasure\t1\nPARAM\t24f0b8ea-5dd2-418c-8d94-83fa84d91d88\tPset_FenderCommon.MaxReactionTolerance[Type]\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4b9e0e09-6ee7-442e-88b1-63834d7a48b7\tPset_FenderCommon.MinimumTemperatureFactor[Type]\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4642bef7-57f9-4f95-a7d0-8cbd19231fd6\tPset_FenderCommon.VelocityFactorEnergy[Type]\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta90a29bc-a437-4acb-936f-4f7d44588d17\tPset_FenderCommon.VelocityFactorReaction[Type]\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t314\tPset_FenderDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4e81e08a-2a23-4b67-a7fd-030e120a6031\tPset_FenderDesignCriteria.AddedMassCoefficientMethod[Type]\tTEXT\t\t314\t1\tPEnum_AddedMassCoefficientMethod\t1\nPARAM\t326fb3ff-2039-4a40-b6a9-ad98a7a0cc0f\tPset_FenderDesignCriteria.CoefficientOfFriction[Type]\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t727a5d92-8419-47b7-8fc5-4825f8de3b3c\tPset_FenderDesignCriteria.EnergyAbsorption[Type]\tNUMBER\t\t314\t1\tIfcEnergyMeasure\t1\nPARAM\tfd54088d-832d-4164-9d21-f1810a83ca7e\tPset_FenderDesignCriteria.EnergyAbsorptionTolerance[Type]\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td92e4c3b-8512-46f3-a2f0-406f9d83efca\tPset_FenderDesignCriteria.MaximumTemperatureFactor[Type]\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc80f2457-08eb-4c89-b234-26463f7ea67f\tPset_FenderDesignCriteria.MaxReaction[Type]\tNUMBER\t\t314\t1\tIfcForceMeasure\t1\nPARAM\t4b1e3a13-ce5c-43bd-8fc5-81343c55cba4\tPset_FenderDesignCriteria.MaxReactionTolerance[Type]\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf8607a49-9fa9-4bbe-8a9d-fc6634add7b8\tPset_FenderDesignCriteria.MinCompressedFenderHeight[Type]\tLENGTH\t\t314\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td82d34e7-135c-47c4-abb5-e74493256c6e\tPset_FenderDesignCriteria.MinimumTemperatureFactor[Type]\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4ab23e75-9547-4e7c-8208-e075e52cf49c\tPset_FenderDesignCriteria.VelocityFactorEnergy[Type]\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t26efe113-6ef9-486e-9d5d-02c9b24d5c46\tPset_FenderDesignCriteria.VelocityFactorReaction[Type]\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t315\tPset_FilterPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t028b583c-0227-4e49-bf3b-3db51dc708aa\tPset_FilterPHistory.CountedEfficiency[Type]\tMULTILINETEXT\t\t315\t1\tIfcTimeSeries\t1\nPARAM\t4b229224-4762-42cc-864b-750e07af4455\tPset_FilterPHistory.ParticleMassHolding[Type]\tMULTILINETEXT\t\t315\t1\tIfcTimeSeries\t1\nPARAM\t9c238c11-f206-4994-ba98-c7b48768425d\tPset_FilterPHistory.WeightedEfficiency[Type]\tMULTILINETEXT\t\t315\t1\tIfcTimeSeries\t1\n#\nGROUP\t316\tPset_FilterTypeAirParticleFilter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta121e93d-c2a8-49be-92d8-d6e40438d057\tPset_FilterTypeAirParticleFilter.AirParticleFilterType[Type]\tTEXT\t\t316\t1\tPEnum_FilterAirParticleFilterType\t1\nPARAM\tb5d0e27f-2450-4141-b8fd-673617aa7e62\tPset_FilterTypeAirParticleFilter.CountedEfficiencyCurve[Type]\tMULTILINETEXT\t\t316\t1\tPropertyTableValue\t1\nPARAM\t713fa641-34c5-4a37-ac6f-16b6460b675e\tPset_FilterTypeAirParticleFilter.DustHoldingCapacity[Type]\tNUMBER\t\t316\t1\tIfcMassMeasure\t1\nPARAM\t5cb0dcda-e21f-4a4c-8fd6-bf6784cdde33\tPset_FilterTypeAirParticleFilter.FaceSurfaceArea[Type]\tAREA\t\t316\t1\tIfcAreaMeasure\t1\nPARAM\tf41877ab-4e93-439b-970c-913d9271f072\tPset_FilterTypeAirParticleFilter.FrameMaterial[Type]\tMULTILINETEXT\t\t316\t1\tIfcMaterialDefinition\t1\nPARAM\t1f8582ea-f0c0-4b22-b7e5-50e4a1818730\tPset_FilterTypeAirParticleFilter.MediaExtendedArea[Type]\tAREA\t\t316\t1\tIfcAreaMeasure\t1\nPARAM\tc4bcfc71-7428-4385-a0de-b388349e6ae3\tPset_FilterTypeAirParticleFilter.MediaMaterial[Type]\tMULTILINETEXT\t\t316\t1\tIfcMaterial\t1\nPARAM\te845d8e9-f681-498c-86e9-f6265eeefaad\tPset_FilterTypeAirParticleFilter.NominalCountedEfficiency[Type]\tNUMBER\t\t316\t1\tIfcReal\t1\nPARAM\t1d801f9e-c688-46ed-bd41-840b57fed416\tPset_FilterTypeAirParticleFilter.NominalWeightedEfficiency[Type]\tNUMBER\t\t316\t1\tIfcReal\t1\nPARAM\te58593e2-aef1-4acf-aa01-ebe84fefe9e3\tPset_FilterTypeAirParticleFilter.PressureDropCurve[Type]\tMULTILINETEXT\t\t316\t1\tPropertyTableValue\t1\nPARAM\tec4cb485-76bc-4901-b2e6-848dd40b464a\tPset_FilterTypeAirParticleFilter.SeparationType[Type]\tTEXT\t\t316\t1\tPEnum_FilterAirParticleFilterSeparationType\t1\nPARAM\t6248357d-939d-4993-926e-1000651d2830\tPset_FilterTypeAirParticleFilter.WeightedEfficiencyCurve[Type]\tMULTILINETEXT\t\t316\t1\tPropertyTableValue\t1\n#\nGROUP\t317\tPset_FilterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t27ea7232-cdc3-4ebd-bb95-5e8ffe8ae802\tPset_FilterTypeCommon.FinalResistance[Type]\tNUMBER\t\t317\t1\tIfcPressureMeasure\t1\nPARAM\t16108c78-346c-41ec-af08-c69766acd7c5\tPset_FilterTypeCommon.FlowRateRange[Type]\tMULTILINETEXT\t\t317\t1\tPropertyBoundedValue\t1\nPARAM\t2df85bca-a274-401e-919f-1cbcdf5c2b08\tPset_FilterTypeCommon.InitialResistance[Type]\tNUMBER\t\t317\t1\tIfcPressureMeasure\t1\nPARAM\tcfbdeab1-1239-4e35-b67d-d1665dc53414\tPset_FilterTypeCommon.MediaMaterial[Type]\tMULTILINETEXT\t\t317\t1\tIfcMaterial\t1\nPARAM\t28d9acfa-acdb-4f8c-bc55-299b60d6becf\tPset_FilterTypeCommon.NominalFilterFaceVelocity[Type]\tNUMBER\t\t317\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t010bd9a9-99ca-44a2-84ae-165c756ea885\tPset_FilterTypeCommon.NominalFlowrate[Type]\tNUMBER\t\t317\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t1f9d172e-0cc6-44d9-8f29-8da41139e99a\tPset_FilterTypeCommon.NominalMediaSurfaceVelocity[Type]\tNUMBER\t\t317\t1\tIfcLinearVelocityMeasure\t1\nPARAM\ta09ddf90-65ea-4b6b-b254-1edadb23eff8\tPset_FilterTypeCommon.NominalParticleGeometricMeanDiameter[Type]\tLENGTH\t\t317\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7bc8b394-6b07-465f-92bd-5cf3d1d6133f\tPset_FilterTypeCommon.NominalParticleGeometricStandardDeviation[Type]\tNUMBER\t\t317\t1\tIfcReal\t1\nPARAM\tff1be252-6ecd-4e1b-861b-030c9fcad7ea\tPset_FilterTypeCommon.NominalPressureDrop[Type]\tNUMBER\t\t317\t1\tIfcPressureMeasure\t1\nPARAM\t047d467c-089d-4781-9d99-cb463fc685e5\tPset_FilterTypeCommon.OperationTemperatureRange[Type]\tMULTILINETEXT\t\t317\t1\tPropertyBoundedValue\t1\nPARAM\t3dd76bc5-69e1-4e83-87ac-e2539c80f285\tPset_FilterTypeCommon.Reference[Type]\tTEXT\t\t317\t1\tIfcIdentifier\t1\nPARAM\t858abe79-a5f4-4f4d-bf77-0e5b8b371af7\tPset_FilterTypeCommon.Status[Type]\tTEXT\t\t317\t1\tPEnum_ElementStatus\t1\nPARAM\t843d4057-d8bd-4ea5-93d3-3488cd40dfa8\tPset_FilterTypeCommon.Weight[Type]\tNUMBER\t\t317\t1\tIfcMassMeasure\t1\n#\nGROUP\t318\tPset_FilterTypeCompressedAirFilter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a16f104-3d2a-4522-9e2a-ec3fc00436aa\tPset_FilterTypeCompressedAirFilter.AutomaticCondensateDischarge[Type]\tYESNO\t\t318\t1\tIfcBoolean\t1\nPARAM\tcf240f17-7daa-4f14-ae85-dee7fc8e8faf\tPset_FilterTypeCompressedAirFilter.CloggingIndicator[Type]\tYESNO\t\t318\t1\tIfcBoolean\t1\nPARAM\t052ddd96-7478-457f-9315-9c07215b5efc\tPset_FilterTypeCompressedAirFilter.CompressedAirFilterType[Type]\tTEXT\t\t318\t1\tPEnum_CompressedAirFilterType\t1\nPARAM\t4f542a5d-7403-4db1-b703-08b3d9fdfdde\tPset_FilterTypeCompressedAirFilter.OperationPressureMax[Type]\tNUMBER\t\t318\t1\tIfcPressureMeasure\t1\nPARAM\t29fef582-6a27-46e7-88c0-cbe8ba473414\tPset_FilterTypeCompressedAirFilter.ParticleAbsorptionCurve[Type]\tMULTILINETEXT\t\t318\t1\tPropertyTableValue\t1\n#\nGROUP\t319\tPset_FilterTypeWaterFilter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t232753e8-26e6-429a-8e00-7591d518dc9e\tPset_FilterTypeWaterFilter.WaterFilterType[Type]\tTEXT\t\t319\t1\tPEnum_FilterWaterFilterType\t1\n#\nGROUP\t320\tPset_FireRatingProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t107b35cc-c3ee-46ee-b3bd-5a6212c6ec33\tPset_FireRatingProperties.FireResistanceRating[Type]\tTEXT\t\t320\t1\tIfcLabel\t1\nPARAM\t00d8d8a1-f432-4d5b-9f25-32233096ba87\tPset_FireRatingProperties.IsCombustible[Type]\tYESNO\t\t320\t1\tIfcBoolean\t1\nPARAM\t4cd8886a-bb49-4fda-a493-946155d39c1f\tPset_FireRatingProperties.SurfaceSpreadOfFlame[Type]\tTEXT\t\t320\t1\tIfcLabel\t1\n#\nGROUP\t321\tPset_FireSuppressionTerminalTypeBreechingInlet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a0ccf59-58ab-4bbc-ae02-68bf9903eb5c\tPset_FireSuppressionTerminalTypeBreechingInlet.BreechingInletType[Type]\tTEXT\t\t321\t1\tPEnum_BreechingInletType\t1\nPARAM\tf4d7719a-2307-4d9e-821f-5d5bfb013227\tPset_FireSuppressionTerminalTypeBreechingInlet.CouplingType[Type]\tTEXT\t\t321\t1\tPEnum_BreechingInletCouplingType\t1\nPARAM\t0aeb71b0-cfe3-4017-ac43-6073b40f16c4\tPset_FireSuppressionTerminalTypeBreechingInlet.HasCaps[Type]\tYESNO\t\t321\t1\tIfcBoolean\t1\nPARAM\t8bffa8ca-8c0b-4052-a089-ffc85323ef40\tPset_FireSuppressionTerminalTypeBreechingInlet.InletDiameter[Type]\tLENGTH\t\t321\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5cd92a52-6bde-40a1-93d3-439e1babe954\tPset_FireSuppressionTerminalTypeBreechingInlet.Material[Type]\tMULTILINETEXT\t\t321\t1\tIfcMaterial\t1\nPARAM\t2f333449-fdb8-4563-b719-b6640c466286\tPset_FireSuppressionTerminalTypeBreechingInlet.OutletDiameter[Type]\tLENGTH\t\t321\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t322\tPset_FireSuppressionTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7786ed73-50f2-456e-8409-cf0d252c486f\tPset_FireSuppressionTerminalTypeCommon.Reference[Type]\tTEXT\t\t322\t1\tIfcIdentifier\t1\nPARAM\t1a515565-8a06-4b07-bc07-0afc3389b5cd\tPset_FireSuppressionTerminalTypeCommon.Status[Type]\tTEXT\t\t322\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t323\tPset_FireSuppressionTerminalTypeFireHydrant\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8db8d979-5673-40e5-939f-a10ce0bb29e4\tPset_FireSuppressionTerminalTypeFireHydrant.BodyColor[Type]\tTEXT\t\t323\t1\tIfcText\t1\nPARAM\t38477045-427f-49bf-b5d0-f4f3c421a80e\tPset_FireSuppressionTerminalTypeFireHydrant.BodyColour[Type]\tTEXT\t\t323\t1\tIfcText\t1\nPARAM\t91b786b5-710e-46d6-8875-699dc0de51d2\tPset_FireSuppressionTerminalTypeFireHydrant.CapColor[Type]\tTEXT\t\t323\t1\tIfcText\t1\nPARAM\tc2456b6e-a9a7-42e9-8cd2-837c1e14e0cc\tPset_FireSuppressionTerminalTypeFireHydrant.CapColour[Type]\tTEXT\t\t323\t1\tIfcText\t1\nPARAM\t0bbbc746-6b85-4cfc-a2d7-b3282fcee527\tPset_FireSuppressionTerminalTypeFireHydrant.DischargeFlowRate[Type]\tNUMBER\t\t323\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t2e846988-0c84-4c76-b44c-ee027561ce70\tPset_FireSuppressionTerminalTypeFireHydrant.FireHydrantType[Type]\tTEXT\t\t323\t1\tPEnum_FireHydrantType\t1\nPARAM\t1aa15724-5d83-4e2e-8338-e7a3fd13597f\tPset_FireSuppressionTerminalTypeFireHydrant.FlowClass[Type]\tTEXT\t\t323\t1\tIfcLabel\t1\nPARAM\tff3500c7-f551-42f9-909e-c5da70cc00c7\tPset_FireSuppressionTerminalTypeFireHydrant.HoseConnectionSize[Type]\tLENGTH\t\t323\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t589a47d3-8498-4a6a-8ce3-be217ab9514b\tPset_FireSuppressionTerminalTypeFireHydrant.NumberOfHoseConnections[Type]\tINTEGER\t\t323\t1\tIfcCountMeasure\t1\nPARAM\tc499f2fe-4d9d-4450-a01c-3645b72dbf8e\tPset_FireSuppressionTerminalTypeFireHydrant.PressureRating[Type]\tNUMBER\t\t323\t1\tIfcPressureMeasure\t1\nPARAM\t03e4a769-12f7-44b1-94da-875cd9a86307\tPset_FireSuppressionTerminalTypeFireHydrant.PumperConnectionSize[Type]\tLENGTH\t\t323\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tba9a3c4d-1c1f-445e-b2c4-a6fc2be10a1a\tPset_FireSuppressionTerminalTypeFireHydrant.WaterIsPotable[Type]\tYESNO\t\t323\t1\tIfcBoolean\t1\n#\nGROUP\t324\tPset_FireSuppressionTerminalTypeHoseReel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc61631af-0dd8-4cd0-8046-6972fbb3870b\tPset_FireSuppressionTerminalTypeHoseReel.ClassificationAuthority[Type]\tTEXT\t\t324\t1\tIfcLabel\t1\nPARAM\te7fff2bb-7295-44bc-8d93-e8a016f3808b\tPset_FireSuppressionTerminalTypeHoseReel.ClassOfService[Type]\tTEXT\t\t324\t1\tIfcLabel\t1\nPARAM\td327b5cc-e325-4924-a3b6-71d822e34f14\tPset_FireSuppressionTerminalTypeHoseReel.HoseDiameter[Type]\tLENGTH\t\t324\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td6e7c7f2-2581-4da7-bd0c-226d133ee210\tPset_FireSuppressionTerminalTypeHoseReel.HoseLength[Type]\tLENGTH\t\t324\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taac645e3-72a5-45fa-8af6-d31f341b9fb1\tPset_FireSuppressionTerminalTypeHoseReel.HoseNozzleType[Type]\tTEXT\t\t324\t1\tPEnum_HoseNozzleType\t1\nPARAM\tb6eed0bf-32e1-4915-8122-acf1b2ef2961\tPset_FireSuppressionTerminalTypeHoseReel.HoseReelMountingType[Type]\tTEXT\t\t324\t1\tPEnum_HoseReelMountingType\t1\nPARAM\tf51ccfff-31e8-4499-b930-0a1be4432a22\tPset_FireSuppressionTerminalTypeHoseReel.HoseReelType[Type]\tTEXT\t\t324\t1\tPEnum_HoseReelType\t1\nPARAM\t2188bf3d-f376-491a-806b-a89fe45bb3dd\tPset_FireSuppressionTerminalTypeHoseReel.InletConnectionSize[Type]\tLENGTH\t\t324\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t325\tPset_FireSuppressionTerminalTypeSprinkler\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb2920afb-cc34-4058-80dc-3dff758cb220\tPset_FireSuppressionTerminalTypeSprinkler.Activation[Type]\tTEXT\t\t325\t1\tPEnum_SprinklerActivation\t1\nPARAM\t78501c38-29a0-4a1d-aa11-31fcec8f0746\tPset_FireSuppressionTerminalTypeSprinkler.ActivationTemperature[Type]\tNUMBER\t\t325\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tc747036d-3b3d-4638-8bda-1e472cfe6363\tPset_FireSuppressionTerminalTypeSprinkler.BulbLiquidColor[Type]\tTEXT\t\t325\t1\tPEnum_SprinklerBulbLiquidColor\t1\nPARAM\t6de8a689-f906-4f2a-b65c-0af85c946c22\tPset_FireSuppressionTerminalTypeSprinkler.BulbLiquidColour[Type]\tTEXT\t\t325\t1\tPEnum_SprinklerBulbLiquidColour\t1\nPARAM\t682c3307-f2cc-4a2d-b357-650f0d95194c\tPset_FireSuppressionTerminalTypeSprinkler.ConnectionSize[Type]\tLENGTH\t\t325\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8b3285cf-d876-4821-8d88-b26e5cbd1fa2\tPset_FireSuppressionTerminalTypeSprinkler.CoverageArea[Type]\tAREA\t\t325\t1\tIfcAreaMeasure\t1\nPARAM\ta912fc57-7893-4e77-ab3f-a08f9ac8cb83\tPset_FireSuppressionTerminalTypeSprinkler.DeflectorMaterial[Type]\tMULTILINETEXT\t\t325\t1\tIfcMaterial\t1\nPARAM\t7fb3fffd-c391-4fe9-82e1-ed67ea195359\tPset_FireSuppressionTerminalTypeSprinkler.DischargeCoefficient[Type]\tNUMBER\t\t325\t1\tIfcReal\t1\nPARAM\t4eb20c3d-15e0-4c6c-9cb2-9e849f74e328\tPset_FireSuppressionTerminalTypeSprinkler.DischargeFlowRate[Type]\tNUMBER\t\t325\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t7fb76701-e0ef-4b3f-8d84-52a6ae6d533b\tPset_FireSuppressionTerminalTypeSprinkler.FrameMaterial[Type]\tMULTILINETEXT\t\t325\t1\tIfcMaterial\t1\nPARAM\t8e86bc7b-8d99-44d2-90a5-a25630e326c6\tPset_FireSuppressionTerminalTypeSprinkler.HasDeflector[Type]\tYESNO\t\t325\t1\tIfcBoolean\t1\nPARAM\t825e0f64-b577-43af-892b-edda11334add\tPset_FireSuppressionTerminalTypeSprinkler.MaximumWorkingPressure[Type]\tNUMBER\t\t325\t1\tIfcPressureMeasure\t1\nPARAM\t8675077d-a06a-4def-86ce-e2bd2cb0137b\tPset_FireSuppressionTerminalTypeSprinkler.ResidualFlowingPressure[Type]\tNUMBER\t\t325\t1\tIfcPressureMeasure\t1\nPARAM\taa52ad83-0371-4627-92f4-a520ebcbeafd\tPset_FireSuppressionTerminalTypeSprinkler.Response[Type]\tTEXT\t\t325\t1\tPEnum_SprinklerResponse\t1\nPARAM\t504ac778-b3b3-4a23-8de7-755216f2416b\tPset_FireSuppressionTerminalTypeSprinkler.SprinklerType[Type]\tTEXT\t\t325\t1\tPEnum_SprinklerType\t1\n#\nGROUP\t326\tPset_FittingBend\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te5ca89b4-2344-4d3b-bcc5-57e8df0a4d8c\tPset_FittingBend.BendAngle[Type]\tANGLE\t\t326\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t0e5e7cb9-b9c2-4d5e-9b3a-b2dc9f004920\tPset_FittingBend.BendRadius[Type]\tLENGTH\t\t326\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t327\tPset_FittingJunction\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t60275bbf-7ff1-476b-8fcf-74f86fe4945a\tPset_FittingJunction.JunctionLeftAngle[Type]\tANGLE\t\t327\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t3ccd4018-bf83-4c8f-a640-a09fe6338ff1\tPset_FittingJunction.JunctionLeftRadius[Type]\tLENGTH\t\t327\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t799ddac4-cd99-4260-a488-fb6537741599\tPset_FittingJunction.JunctionRightAngle[Type]\tANGLE\t\t327\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t7a1b8eca-2edb-45a2-876b-25a1d21050f4\tPset_FittingJunction.JunctionRightRadius[Type]\tLENGTH\t\t327\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf36da3e2-b33c-4d09-8697-e1b0e073608f\tPset_FittingJunction.JunctionType[Type]\tTEXT\t\t327\t1\tPEnum_FittingJunctionType\t1\n#\nGROUP\t328\tPset_FittingTransition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb000435b-e929-4cf4-a952-9e51689c6325\tPset_FittingTransition.EccentricityInY[Type]\tLENGTH\t\t328\t1\tIfcLengthMeasure\t1\nPARAM\td2acb3b0-4ad1-4719-8606-b679c055e118\tPset_FittingTransition.EccentricityInZ[Type]\tLENGTH\t\t328\t1\tIfcLengthMeasure\t1\nPARAM\t67ec3428-3394-4878-8e8e-53fc6bfc2143\tPset_FittingTransition.NominalLength[Type]\tLENGTH\t\t328\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t329\tPset_FlowControllerDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7f8d841d-7c43-4ed0-be71-66841f573a94\tPset_FlowControllerDamper.SizingMethod[Type]\tTEXT\t\t329\t1\tPEnum_DamperSizingMethod\t1\n#\nGROUP\t330\tPset_FlowControllerFlowMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t164b3cc9-b106-4298-b903-cad1927abd71\tPset_FlowControllerFlowMeter.Purpose[Type]\tTEXT\t\t330\t1\tPEnum_FlowMeterPurpose\t1\n#\nGROUP\t331\tPset_FlowFittingDuctFitting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a700eab-5d52-45ce-9793-2a1f49c187b9\tPset_FlowFittingDuctFitting.AbsoluteRoughnessFactor[Type]\tLENGTH\t\t331\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td2b10159-383f-4262-b6b2-939f503bbd70\tPset_FlowFittingDuctFitting.Color[Type]\tTEXT\t\t331\t1\tIfcLabel\t1\nPARAM\t19fb6a64-eb5e-419b-aec3-54e11b2b2156\tPset_FlowFittingDuctFitting.HasLiner[Type]\tYESNO\t\t331\t1\tIfcBoolean\t1\n#\nGROUP\t332\tPset_FlowFittingPipeFitting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0fdbd1a3-6eab-4ccc-8950-27a264834542\tPset_FlowFittingPipeFitting.Color[Type]\tTEXT\t\t332\t1\tIfcLabel\t1\nPARAM\tfc443084-667b-4c49-b51e-e4421c7ce7e8\tPset_FlowFittingPipeFitting.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t332\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t333\tPset_FlowInstrumentPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4914c96e-abd4-4097-8fa3-100b49064b76\tPset_FlowInstrumentPHistory.Quality[Type]\tMULTILINETEXT\t\t333\t1\tIfcTimeSeries\t1\nPARAM\tbdc554db-485c-4b2a-a82a-a126d32a9440\tPset_FlowInstrumentPHistory.Status[Type]\tMULTILINETEXT\t\t333\t1\tIfcTimeSeries\t1\nPARAM\t72940401-c17e-4da1-88d3-402e91dfc75c\tPset_FlowInstrumentPHistory.Value[Type]\tMULTILINETEXT\t\t333\t1\tIfcTimeSeries\t1\n#\nGROUP\t334\tPset_FlowInstrumentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t124894b1-294f-4221-b1d7-135fffbeebc4\tPset_FlowInstrumentTypeCommon.Reference[Type]\tTEXT\t\t334\t1\tIfcIdentifier\t1\nPARAM\te3a150c8-b346-4244-af31-297e096fbbf7\tPset_FlowInstrumentTypeCommon.Status[Type]\tTEXT\t\t334\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t335\tPset_FlowInstrumentTypePressureGauge\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t61652f59-22d7-47bf-87dc-97776219cf9a\tPset_FlowInstrumentTypePressureGauge.DisplaySize[Type]\tLENGTH\t\t335\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t256ecd21-fce6-4ecb-b1c8-03da42c085ee\tPset_FlowInstrumentTypePressureGauge.PressureGaugeType[Type]\tTEXT\t\t335\t1\tPEnum_PressureGaugeType\t1\n#\nGROUP\t336\tPset_FlowInstrumentTypeThermometer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7f0b2315-92dc-4b46-a103-203fcea670fa\tPset_FlowInstrumentTypeThermometer.DisplaySize[Type]\tLENGTH\t\t336\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5f290c7e-6c80-43e5-95f1-a600a8e7fe50\tPset_FlowInstrumentTypeThermometer.ThermometerType[Type]\tTEXT\t\t336\t1\tPEnum_ThermometerType\t1\n#\nGROUP\t337\tPset_FlowMeterOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8dccdfb0-4dc0-497a-86d0-647332337478\tPset_FlowMeterOccurrence.FlowMeterOurpose[Type]\tTEXT\t\t337\t1\tPEnum_FlowMeterPurpose\t1\nPARAM\t34b265b5-7e6e-4eba-ad1e-61e9a6ce7c6a\tPset_FlowMeterOccurrence.Purpose[Type]\tTEXT\t\t337\t1\tPEnum_FlowMeterPurpose\t1\n#\nGROUP\t338\tPset_FlowMeterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t939d02c4-4bb3-4942-a043-a02be267c1ae\tPset_FlowMeterTypeCommon.IsMain[Type]\tYESNO\t\t338\t1\tIfcBoolean\t1\nPARAM\t3a08029a-b2a5-4519-bc82-13e1b4cb8555\tPset_FlowMeterTypeCommon.ReadOutType[Type]\tTEXT\t\t338\t1\tPEnum_MeterReadOutType\t1\nPARAM\te072de8c-2423-48ac-a45d-67bbb5219cf1\tPset_FlowMeterTypeCommon.Reference[Type]\tTEXT\t\t338\t1\tIfcIdentifier\t1\nPARAM\t4b450c17-4792-4c06-9965-7d0c15cdb546\tPset_FlowMeterTypeCommon.RemoteReading[Type]\tYESNO\t\t338\t1\tIfcBoolean\t1\nPARAM\t905f677c-bc3c-481d-8cef-5ce1f897667a\tPset_FlowMeterTypeCommon.Status[Type]\tTEXT\t\t338\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t339\tPset_FlowMeterTypeEnergyMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t52b1134f-4641-43ab-9556-d41d4fe581e1\tPset_FlowMeterTypeEnergyMeter.ConnectionSize[Type]\tLENGTH\t\t339\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6f903b74-4bbc-40e3-b04d-a3ee43bbda73\tPset_FlowMeterTypeEnergyMeter.MaximumCurrent[Type]\tNUMBER\t\t339\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t93c2ff23-f4f1-403a-9dd5-8eb4fd858c65\tPset_FlowMeterTypeEnergyMeter.MultipleTarriff[Type]\tYESNO\t\t339\t1\tIfcBoolean\t1\nPARAM\t362e61e0-1817-4bed-8820-38057012ed2c\tPset_FlowMeterTypeEnergyMeter.NominalCurrent[Type]\tNUMBER\t\t339\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t340\tPset_FlowMeterTypeGasMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta74457d6-0754-4faf-8b1f-00f106929842\tPset_FlowMeterTypeGasMeter.ConnectionSize[Type]\tLENGTH\t\t340\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td2fc9a97-86f6-4cc3-9151-c5e9969d9ced\tPset_FlowMeterTypeGasMeter.GasType[Type]\tTEXT\t\t340\t1\tPEnum_GasType\t1\nPARAM\teadada3d-5839-4f6f-ba05-386a6c91591e\tPset_FlowMeterTypeGasMeter.MaximumFlowRate[Type]\tNUMBER\t\t340\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tb913bb4a-67a5-46cd-b8f1-972ca3ee3aa7\tPset_FlowMeterTypeGasMeter.MaximumPressureLoss[Type]\tNUMBER\t\t340\t1\tIfcPressureMeasure\t1\n#\nGROUP\t341\tPset_FlowMeterTypeOilMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf742e102-a7e6-4cb8-8e51-3fd77773b9c3\tPset_FlowMeterTypeOilMeter.ConnectionSize[Type]\tLENGTH\t\t341\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t29e4ee8e-7c0f-4423-9c9f-da8b655dd094\tPset_FlowMeterTypeOilMeter.MaximumFlowRate[Type]\tNUMBER\t\t341\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t342\tPset_FlowMeterTypeWaterMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4e455dbe-b753-496c-9618-a2d2417da2a7\tPset_FlowMeterTypeWaterMeter.BackflowPreventerType[Type]\tTEXT\t\t342\t1\tPEnum_BackflowPreventerType\t1\nPARAM\t19884e6a-7624-4f8d-b306-1df85f0bf773\tPset_FlowMeterTypeWaterMeter.ConnectionSize[Type]\tLENGTH\t\t342\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5649bfb4-18a1-4656-b8c9-bdfcc4ace8f6\tPset_FlowMeterTypeWaterMeter.MaximumFlowRate[Type]\tNUMBER\t\t342\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t4b8c9994-6da3-4d13-9225-2deddabad01d\tPset_FlowMeterTypeWaterMeter.MaximumPressureLoss[Type]\tNUMBER\t\t342\t1\tIfcPressureMeasure\t1\nPARAM\tb67c7e47-8268-4ca9-a023-34b1654a90d4\tPset_FlowMeterTypeWaterMeter.Type[Type]\tTEXT\t\t342\t1\tPEnum_WaterMeterType\t1\n#\nGROUP\t343\tPset_FlowMovingDeviceCompressor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2a95632f-df69-48c1-afb0-f3927c81610b\tPset_FlowMovingDeviceCompressor.ImpellerDiameter[Type]\tLENGTH\t\t343\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t344\tPset_FlowMovingDeviceFan\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9571ffe5-4201-480f-8820-4b098caa5b01\tPset_FlowMovingDeviceFan.ApplicationOfFan[Type]\tTEXT\t\t344\t1\tPEnum_FanApplicationType\t1\nPARAM\tcf88aa05-419e-4ad2-8828-41610f819a00\tPset_FlowMovingDeviceFan.CoilPosition[Type]\tTEXT\t\t344\t1\tPEnum_FanCoilPosition\t1\nPARAM\tc84bdae8-59c6-4780-9ff5-604ffc7db879\tPset_FlowMovingDeviceFan.DischargeType[Type]\tTEXT\t\t344\t1\tPEnum_FanDischargeType\t1\nPARAM\t647af7e7-e9fd-4623-a851-9ff9a40c849b\tPset_FlowMovingDeviceFan.FanMountingType[Type]\tTEXT\t\t344\t1\tPEnum_FanMountingType\t1\nPARAM\tf77aa74e-7161-4004-8eed-3bf74a1f497c\tPset_FlowMovingDeviceFan.FractionOfMotorHeatToAirStream[Type]\tNUMBER\t\t344\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tebeaaf70-ceb3-4371-80fa-22960e545bec\tPset_FlowMovingDeviceFan.ImpellerDiameter[Type]\tLENGTH\t\t344\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb96170a0-f17c-45ef-af89-0724f5dcb55f\tPset_FlowMovingDeviceFan.MotorPosition[Type]\tTEXT\t\t344\t1\tPEnum_FanMotorPosition\t1\n#\nGROUP\t345\tPset_FlowMovingDeviceFanCentrifugal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc29f59f5-b6d8-40a0-bd48-294e16b958c2\tPset_FlowMovingDeviceFanCentrifugal.Arrangement[Type]\tTEXT\t\t345\t1\tPEnum_CentrifugalFanArrangement\t1\nPARAM\t0937484f-8545-44c0-8a24-252dcc222334\tPset_FlowMovingDeviceFanCentrifugal.DirectionOfRotation[Type]\tTEXT\t\t345\t1\tPEnum_CentrifugalFanRotation\t1\nPARAM\te825563d-2a91-46b8-a471-48785e5b3c42\tPset_FlowMovingDeviceFanCentrifugal.DischargePosition[Type]\tTEXT\t\t345\t1\tPEnum_CentrifugalFanDischargePosition\t1\n#\nGROUP\t346\tPset_FlowMovingDevicePump\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf27e1ee4-64b0-4193-8658-b0bb50a9f438\tPset_FlowMovingDevicePump.BaseType[Type]\tTEXT\t\t346\t1\tPEnum_PumpBaseType\t1\nPARAM\t7c90d525-01f3-4b16-bf65-ab0a5f583bdb\tPset_FlowMovingDevicePump.DriveConnectionType[Type]\tTEXT\t\t346\t1\tPEnum_PumpDriveConnectionType\t1\nPARAM\t736125f3-43be-49fc-9995-eb0ff84a243a\tPset_FlowMovingDevicePump.ImpellerDiameter[Type]\tLENGTH\t\t346\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t347\tPset_FlowSegmentDuctSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdf6e2cb9-fb33-4cd5-95ef-abc6e2cb84f8\tPset_FlowSegmentDuctSegment.Color[Type]\tTEXT\t\t347\t1\tIfcLabel\t1\nPARAM\t7c36f5c0-591f-4cfd-a384-fc1cac2db551\tPset_FlowSegmentDuctSegment.HasLiner[Type]\tYESNO\t\t347\t1\tIfcBoolean\t1\nPARAM\t6daa57e0-7fb3-46a0-9e08-4a30409cd524\tPset_FlowSegmentDuctSegment.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t347\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf7bc6364-5edc-416b-9c2f-5b48d29b541a\tPset_FlowSegmentDuctSegment.Length[Type]\tLENGTH\t\t347\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1cf8558a-8d9f-4b82-a799-7bb2faa49e5c\tPset_FlowSegmentDuctSegment.MaterialThickness[Type]\tLENGTH\t\t347\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t348\tPset_FlowSegmentPipeSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb063f9d4-7d28-491e-b48c-7c9af9696705\tPset_FlowSegmentPipeSegment.Color[Type]\tTEXT\t\t348\t1\tIfcLabel\t1\nPARAM\t30c3fa75-d43e-46a9-88fa-d6cc4868bc9f\tPset_FlowSegmentPipeSegment.Gradient[Type]\tNUMBER\t\t348\t1\tIfcPositiveRatioMeasure\t1\nPARAM\te44beeec-4d2b-47aa-9495-874b08cf5124\tPset_FlowSegmentPipeSegment.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t348\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc92ef8d9-d90e-4725-a388-496d163a7c37\tPset_FlowSegmentPipeSegment.InvertElevation[Type]\tLENGTH\t\t348\t1\tIfcLengthMeasure\t1\nPARAM\t90d89e12-4be5-42d0-96bd-61a1bbb24fa6\tPset_FlowSegmentPipeSegment.Length[Type]\tLENGTH\t\t348\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t349\tPset_FlowStorageDeviceTank\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2ddcbbeb-fb9a-4009-b571-bd41a8a105fe\tPset_FlowStorageDeviceTank.HasLadder[Type]\tYESNO\t\t349\t1\tIfcBoolean\t1\nPARAM\t3716d25c-865c-4201-8432-6f9a70aa5589\tPset_FlowStorageDeviceTank.HasVisualIndicator[Type]\tYESNO\t\t349\t1\tIfcBoolean\t1\nPARAM\t508370d4-92e3-4f76-a9d3-5cc9840f5390\tPset_FlowStorageDeviceTank.TankComposition[Type]\tTEXT\t\t349\t1\tPEnum_TankComposition\t1\n#\nGROUP\t350\tPset_FlowTerminalAirTerminal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t987db834-ce2f-4fef-a69c-e6353f00cdd8\tPset_FlowTerminalAirTerminal.AirflowType[Type]\tTEXT\t\t350\t1\tPEnum_AirTerminalAirflowType\t1\nPARAM\t54cbcfc9-cfee-4b10-9fca-a0ab29735300\tPset_FlowTerminalAirTerminal.Location[Type]\tTEXT\t\t350\t1\tPEnum_AirTerminalLocation\t1\n#\nGROUP\t351\tPset_FootingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1fd566f4-f67c-4c10-ac53-4227a39672cd\tPset_FootingCommon.LoadBearing[Type]\tYESNO\t\t351\t1\tIfcBoolean\t1\nPARAM\teafbfcfd-8eb8-46b6-9ea2-f396a5bb6690\tPset_FootingCommon.Reference[Type]\tTEXT\t\t351\t1\tIfcIdentifier\t1\nPARAM\t48a0f7ef-e10b-4964-aeaa-3495b82ec393\tPset_FootingCommon.Status[Type]\tTEXT\t\t351\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t352\tPset_FootingTypePadFooting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t55a6879b-ed80-4362-9b8f-f95f38dffc1c\tPset_FootingTypePadFooting.IsReinforced[Type]\tYESNO\t\t352\t1\tIfcBoolean\t1\nPARAM\t3c7d73de-4238-42b8-95e3-e46d4fe125c8\tPset_FootingTypePadFooting.LoadBearingCapacity[Type]\tNUMBER\t\t352\t1\tIfcPlanarForceMeasure\t1\n#\nGROUP\t353\tPset_FurnitureTypeChair\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6efbe270-22e0-4583-ab00-793faf637609\tPset_FurnitureTypeChair.HighestSeatingHeight[Type]\tLENGTH\t\t353\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc40d6ba8-6125-48fc-90d9-484a46d2624f\tPset_FurnitureTypeChair.LowestSeatingHeight[Type]\tLENGTH\t\t353\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6fd0ed93-cb82-4c66-8f5d-be197caf0470\tPset_FurnitureTypeChair.SeatingHeight[Type]\tLENGTH\t\t353\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t354\tPset_FurnitureTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0f4c8588-b535-43d8-865c-9fdaccb2fb10\tPset_FurnitureTypeCommon.Description[Type]\tTEXT\t\t354\t1\tIfcText\t1\nPARAM\t86a91177-2035-48b9-9b6c-10e1a8b05007\tPset_FurnitureTypeCommon.IsBuiltIn[Type]\tYESNO\t\t354\t1\tIfcBoolean\t1\nPARAM\t538eecab-638c-4c77-8166-6a66a2dd29dc\tPset_FurnitureTypeCommon.MainColor[Type]\tTEXT\t\t354\t1\tIfcLabel\t1\nPARAM\td211a4b8-5c52-4a88-b353-21ba2a8b186f\tPset_FurnitureTypeCommon.MainColour[Type]\tTEXT\t\t354\t1\tIfcLabel\t1\nPARAM\tdfb711a6-e61f-487e-9651-c729c1b5cd07\tPset_FurnitureTypeCommon.NominalDepth[Type]\tLENGTH\t\t354\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\ta161037b-5d26-4b31-a92c-70fa2464a393\tPset_FurnitureTypeCommon.NominalHeight[Type]\tLENGTH\t\t354\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1ae346ee-1b99-4681-a40a-c3d5164e44fe\tPset_FurnitureTypeCommon.NominalLength[Type]\tLENGTH\t\t354\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t23c081ab-30c8-4d3a-bd88-91e5f51e6767\tPset_FurnitureTypeCommon.Reference[Type]\tTEXT\t\t354\t1\tIfcIdentifier\t1\nPARAM\t77e811dc-d111-42c0-8b0d-ad67581c6546\tPset_FurnitureTypeCommon.Status[Type]\tTEXT\t\t354\t1\tPEnum_ElementStatus\t1\nPARAM\t3b029b07-d01e-4884-8e82-6dbaaddd1034\tPset_FurnitureTypeCommon.Style[Type]\tTEXT\t\t354\t1\tIfcLabel\t1\n#\nGROUP\t355\tPset_FurnitureTypeDesk\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7b027e8a-0181-4e2a-8959-6dfc38b47571\tPset_FurnitureTypeDesk.WorksurfaceArea[Type]\tAREA\t\t355\t1\tIfcAreaMeasure\t1\n#\nGROUP\t356\tPset_FurnitureTypeFileCabinet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t179bd4c4-7687-497c-ae1e-477fb38ccea2\tPset_FurnitureTypeFileCabinet.WithLock[Type]\tYESNO\t\t356\t1\tIfcBoolean\t1\n#\nGROUP\t357\tPset_FurnitureTypeTable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc17a9285-2e76-43ce-89c0-f75556d8e9e2\tPset_FurnitureTypeTable.NumberOfChairs[Type]\tINTEGER\t\t357\t1\tIfcCountMeasure\t1\nPARAM\tf875507c-5200-42e9-b73c-5b9f830052d1\tPset_FurnitureTypeTable.WorksurfaceArea[Type]\tAREA\t\t357\t1\tIfcAreaMeasure\t1\n#\nGROUP\t358\tPset_GasTerminalPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6e7333d1-6f47-468d-985e-337f990826d9\tPset_GasTerminalPHistory.GasFlowRate[Type]\tNUMBER\t\t358\t1\tIfcReal\t1\n#\nGROUP\t359\tPset_GasTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t501190fb-1b45-463b-84d4-3bd52c2a7d84\tPset_GasTerminalTypeCommon.GasFlowRateRange[Type]\tMULTILINETEXT\t\t359\t1\tPropertyBoundedValue\t1\n#\nGROUP\t360\tPset_GasTerminalTypeGasAppliance\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td31c39ff-ea7a-4eeb-9cda-6a9dbbe9eb77\tPset_GasTerminalTypeGasAppliance.FlueType[Type]\tTEXT\t\t360\t1\tPEnum_FlueType\t1\nPARAM\tde4f7ec6-b0af-4ff5-a226-4972da54062b\tPset_GasTerminalTypeGasAppliance.GasApplianceType[Type]\tTEXT\t\t360\t1\tPEnum_GasApplianceType\t1\n#\nGROUP\t361\tPset_GasTerminalTypeGasBurner\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t86d9b048-e4bf-4f1c-a337-be11aeff1765\tPset_GasTerminalTypeGasBurner.GasBurnerType[Type]\tTEXT\t\t361\t1\tPEnum_GasBurnerType\t1\n#\nGROUP\t362\tPset_GateHeadCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5c6070dc-ce87-45dd-add0-7ad30155eeed\tPset_GateHeadCommon.StructuralType[Type]\tTEXT\t\t362\t1\tIfcLabel\t1\n#\nGROUP\t363\tPset_GeotechnicalAssemblyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t179606f8-db01-48a3-8dee-b72501a091b0\tPset_GeotechnicalAssemblyCommon.BoreHolePurpose[Type]\tTEXT\t\t363\t1\tPEnum_StrataAssemblyPurpose\t1\nPARAM\tfa27ad30-54c5-4c94-abab-7956f3a4d053\tPset_GeotechnicalAssemblyCommon.Limitations[Type]\tTEXT\t\t363\t1\tIfcText\t1\nPARAM\tec2e693c-bac9-4b04-a598-9eb299645efc\tPset_GeotechnicalAssemblyCommon.Methodology[Type]\tTEXT\t\t363\t1\tIfcText\t1\nPARAM\tda8b6fd7-881a-45a5-bd43-6da21b5f84d4\tPset_GeotechnicalAssemblyCommon.Status[Type]\tTEXT\t\t363\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t364\tPset_GeotechnicalStratumCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1811d3a4-3dc1-428c-af2d-1309c34c30ca\tPset_GeotechnicalStratumCommon.IsTopographic[Type]\tYESNO\t\t364\t1\tIfcLogical\t1\nPARAM\tec1761b0-e9d7-47c1-af3d-40aff0a4e120\tPset_GeotechnicalStratumCommon.PiezometricHead[Type]\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf6315596-82c0-42ef-aaa9-25aaa7ff9838\tPset_GeotechnicalStratumCommon.PiezometricPressure[Type]\tNUMBER\t\t364\t1\tIfcPressureMeasure\t1\nPARAM\t852a1b64-e5ed-41e0-8655-5223bc844e93\tPset_GeotechnicalStratumCommon.Status[Type]\tTEXT\t\t364\t1\tPEnum_ElementStatus\t1\nPARAM\tf0130b45-1849-4fa7-9119-3dcd0235f62a\tPset_GeotechnicalStratumCommon.StratumColour[Type]\tTEXT\t\t364\t1\tIfcLabel\t1\nPARAM\tb881abe4-ce69-48e5-a453-d151e17dd6da\tPset_GeotechnicalStratumCommon.Texture[Type]\tTEXT\t\t364\t1\tIfcLabel\t1\n#\nGROUP\t365\tPset_HeatExchangerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48a04a70-dd35-4a3b-bed1-4825604836ae\tPset_HeatExchangerTypeCommon.Arrangement[Type]\tTEXT\t\t365\t1\tPEnum_HeatExchangerArrangement\t1\nPARAM\t0c10d586-013d-47ba-b566-f2be01d1e591\tPset_HeatExchangerTypeCommon.FlowArrangement[Type]\tTEXT\t\t365\t1\tPEnum_HeatExchangerArrangement\t1\nPARAM\ta793e93e-79f4-468c-b069-effbb2b81ded\tPset_HeatExchangerTypeCommon.Reference[Type]\tTEXT\t\t365\t1\tIfcIdentifier\t1\nPARAM\tb2023efb-fa11-4d49-b3fb-78e87df052af\tPset_HeatExchangerTypeCommon.ShellMaterial[Type]\tMULTILINETEXT\t\t365\t1\tIfcMaterial\t1\nPARAM\t49eabcc8-6528-4cfd-8c45-4a4ebf0d9185\tPset_HeatExchangerTypeCommon.Status[Type]\tTEXT\t\t365\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t366\tPset_HeatExchangerTypePlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t29d59c78-58e5-4ed7-8b6c-225c0bddbc1a\tPset_HeatExchangerTypePlate.NumberOfPlates[Type]\tINTEGER\t\t366\t1\tIfcCountMeasure\t1\n#\nGROUP\t367\tPset_HumidifierPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4e0154dd-0687-440d-b907-c7f41cc1e099\tPset_HumidifierPHistory.AirPressureDropCurve[Type]\tMULTILINETEXT\t\t367\t1\tPropertyTableValue\t1\nPARAM\t06f794b1-774a-4d0b-8b6f-e5dcec1d0351\tPset_HumidifierPHistory.AtmosphericPressure[Type]\tMULTILINETEXT\t\t367\t1\tIfcTimeSeries\t1\nPARAM\t8b3b0df8-febb-46b1-a798-ee75b6bfe017\tPset_HumidifierPHistory.SaturationEfficiency[Type]\tMULTILINETEXT\t\t367\t1\tIfcTimeSeries\t1\nPARAM\tf989ecfc-092d-4e71-ad87-4c17eb0ff8cb\tPset_HumidifierPHistory.SaturationEfficiencyCurve[Type]\tMULTILINETEXT\t\t367\t1\tPropertyTableValue\t1\n#\nGROUP\t368\tPset_HumidifierTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdf1ce4f1-6b29-4661-89a4-5cd01b1a5bf9\tPset_HumidifierTypeCommon.AirPressureDropCurve[Type]\tMULTILINETEXT\t\t368\t1\tPropertyTableValue\t1\nPARAM\t91471a76-5206-4cc7-9ade-4535115ecc0b\tPset_HumidifierTypeCommon.Application[Type]\tTEXT\t\t368\t1\tPEnum_HumidifierApplication\t1\nPARAM\ta7ccc9b8-c154-4939-86fc-f9bd90f032cf\tPset_HumidifierTypeCommon.HumidifierApplication[Type]\tTEXT\t\t368\t1\tPEnum_HumidifierApplication\t1\nPARAM\t575d517e-c06d-4af4-a50c-dab9b6210fb7\tPset_HumidifierTypeCommon.InternalControl[Type]\tTEXT\t\t368\t1\tPEnum_HumidifierInternalControl\t1\nPARAM\t60c6531a-7dc8-4a66-96c0-b8b80cc58a2e\tPset_HumidifierTypeCommon.NominalAirFlowRate[Type]\tNUMBER\t\t368\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t6378c37e-d0df-4762-a132-90e46a0d1dcf\tPset_HumidifierTypeCommon.NominalMoistureGain[Type]\tNUMBER\t\t368\t1\tIfcMassFlowRateMeasure\t1\nPARAM\t86e39193-d1ec-4e63-980c-c66129c7712c\tPset_HumidifierTypeCommon.Reference[Type]\tTEXT\t\t368\t1\tIfcIdentifier\t1\nPARAM\tab5e96ea-7288-4eac-b056-40ace579bd5b\tPset_HumidifierTypeCommon.SaturationEfficiencyCurve[Type]\tMULTILINETEXT\t\t368\t1\tPropertyTableValue\t1\nPARAM\t3874fcf8-e392-492f-8302-a110e751151a\tPset_HumidifierTypeCommon.Status[Type]\tTEXT\t\t368\t1\tPEnum_ElementStatus\t1\nPARAM\t853f4af6-de87-4c44-9bd3-e5c09e631f3b\tPset_HumidifierTypeCommon.WaterRequirement[Type]\tNUMBER\t\t368\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t18939668-a143-4a44-8f07-d6d93595f291\tPset_HumidifierTypeCommon.Weight[Type]\tNUMBER\t\t368\t1\tIfcMassMeasure\t1\n#\nGROUP\t369\tPset_ImpactProtectionDeviceOccurrenceBumper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a24061e-7866-4971-9a03-5d6971616e69\tPset_ImpactProtectionDeviceOccurrenceBumper.BrakingLength[Type]\tLENGTH\t\t369\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0669a479-a973-4832-9182-6a44049bbc9c\tPset_ImpactProtectionDeviceOccurrenceBumper.BumperOrientation[Type]\tTEXT\t\t369\t1\tPEnum_BumperOrientation\t1\nPARAM\t38f1bd40-2e5f-417e-a738-7f31aa1f21bd\tPset_ImpactProtectionDeviceOccurrenceBumper.IsRemovableBumper[Type]\tYESNO\t\t369\t1\tIfcBoolean\t1\n#\nGROUP\t370\tPset_ImpactProtectionDeviceTypeBumper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4bbf2853-27d5-403a-8558-697b4a281617\tPset_ImpactProtectionDeviceTypeBumper.EnergyAbsorption[Type]\tNUMBER\t\t370\t1\tIfcEnergyMeasure\t1\nPARAM\t74c4274d-1eb1-47f2-b8d9-caa50966937d\tPset_ImpactProtectionDeviceTypeBumper.IsAbsorbingEnergy[Type]\tYESNO\t\t370\t1\tIfcBoolean\t1\nPARAM\t3db4277c-525b-4c93-8e35-dda12ab43224\tPset_ImpactProtectionDeviceTypeBumper.MaximumLoadRetention[Type]\tNUMBER\t\t370\t1\tIfcForceMeasure\t1\n#\nGROUP\t371\tPset_InstallationOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t67970d68-b6b6-485c-b957-941407d345e9\tPset_InstallationOccurrence.AcceptanceDate[Type]\tTEXT\t\t371\t1\tIfcDate\t1\nPARAM\t70fc232e-c930-4bb6-b904-f4b746152bee\tPset_InstallationOccurrence.InstallationDate[Type]\tTEXT\t\t371\t1\tIfcDate\t1\nPARAM\t7541939e-c4d9-4706-9226-aa0189076ac4\tPset_InstallationOccurrence.PutIntoOperationDate[Type]\tTEXT\t\t371\t1\tIfcDate\t1\n#\nGROUP\t372\tPset_InterceptorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te4c0adc8-ea20-4a34-ae14-453a48986244\tPset_InterceptorTypeCommon.CoverLength[Type]\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc867a383-6e1e-49a5-bc4a-61ecd4d74946\tPset_InterceptorTypeCommon.CoverWidth[Type]\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te3fcb671-9e68-4a1b-9634-0580555c1161\tPset_InterceptorTypeCommon.InletConnectionSize[Type]\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdd1c5e80-af0b-4fe5-82b8-83fc54307afa\tPset_InterceptorTypeCommon.NominalBodyDepth[Type]\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0b5aec3a-9ff9-4544-a599-a5115cd71ea1\tPset_InterceptorTypeCommon.NominalBodyLength[Type]\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t78a3d2d3-e1d3-41cc-ad43-67535e1d90c5\tPset_InterceptorTypeCommon.NominalBodyWidth[Type]\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf55e6862-18ad-44bf-be6c-a012e578d986\tPset_InterceptorTypeCommon.OutletConnectionSize[Type]\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1c1edf98-270d-493b-9c1e-234adc50756f\tPset_InterceptorTypeCommon.Reference[Type]\tTEXT\t\t372\t1\tIfcIdentifier\t1\nPARAM\t69e9e0f2-bdcb-41ab-a66e-8e2b6def9f11\tPset_InterceptorTypeCommon.Status[Type]\tTEXT\t\t372\t1\tPEnum_ElementStatus\t1\nPARAM\t28f79d45-9bbb-4963-bcbb-c1d02f852517\tPset_InterceptorTypeCommon.VentilatingPipeSize[Type]\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t373\tPset_IpNetworkEquipmentPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta787f774-f0f0-4cfc-b7f5-19d223b5eb0d\tPset_IpNetworkEquipmentPHistory.NumberOfPackets[Type]\tMULTILINETEXT\t\t373\t1\tIfcTimeSeries\t1\n#\nGROUP\t374\tPset_JettyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t75ae45bb-25b8-474f-8fb1-d5444f87bf8e\tPset_JettyCommon.BentSpacing[Type]\tLENGTH\t\t374\t1\tIfcLengthMeasure\t1\nPARAM\t54166bbc-72e7-460d-8308-231d7e68ba91\tPset_JettyCommon.Elevation[Type]\tLENGTH\t\t374\t1\tIfcLengthMeasure\t1\nPARAM\tca3b0b0e-9a80-450b-b081-1403522ae2f5\tPset_JettyCommon.PierSectionType[Type]\tTEXT\t\t374\t1\tPEnum_SectionType\t1\nPARAM\t44cefb85-e671-4a62-b05d-c3f9d424645a\tPset_JettyCommon.StructuralType[Type]\tTEXT\t\t374\t1\tIfcLabel\t1\n#\nGROUP\t375\tPset_JettyDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc4ac4ff1-0bde-4e2f-9caf-4e1a28875817\tPset_JettyDesignCriteria.EquipmentLoading[Type]\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\nPARAM\tfe8896fb-625e-4938-b4e6-2c57ef1b933d\tPset_JettyDesignCriteria.ExtremeHighWaterLevel[Type]\tLENGTH\t\t375\t1\tIfcLengthMeasure\t1\nPARAM\t96a9b096-6823-4f28-9b1c-7d1229b3d5b6\tPset_JettyDesignCriteria.ExtremeLowWaterLevel[Type]\tLENGTH\t\t375\t1\tIfcLengthMeasure\t1\nPARAM\td89b36c9-8a18-4e46-8a3c-050fe082587a\tPset_JettyDesignCriteria.FlowLoading[Type]\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\nPARAM\t3e7914f9-0324-469f-b678-1df99367f481\tPset_JettyDesignCriteria.HighWaterLevel[Type]\tLENGTH\t\t375\t1\tIfcLengthMeasure\t1\nPARAM\t4c0941e6-32b2-40b0-a666-5db0a1f386e4\tPset_JettyDesignCriteria.LowWaterLevel[Type]\tLENGTH\t\t375\t1\tIfcLengthMeasure\t1\nPARAM\t845901c1-b016-4745-820a-c9ce1399eeed\tPset_JettyDesignCriteria.ShipLoading[Type]\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\nPARAM\ta207dc8d-bc04-4489-8a6c-9b93227554bc\tPset_JettyDesignCriteria.UniformlyDistributedLoad[Type]\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\nPARAM\tc34c5b5b-c4c1-41cc-8c2c-2ec6ce1cc692\tPset_JettyDesignCriteria.WaveLoading[Type]\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\n#\nGROUP\t376\tPset_JunctionBoxTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t67a4a19f-30ff-43c5-af5c-61aa1c121d49\tPset_JunctionBoxTypeCommon.ClearDepth[Type]\tLENGTH\t\t376\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5b86d645-cffb-43b4-8f38-53d11391a296\tPset_JunctionBoxTypeCommon.IP_Code[Type]\tTEXT\t\t376\t1\tIfcLabel\t1\nPARAM\te75a50e7-c0e6-46d4-ae62-40ea43c87b42\tPset_JunctionBoxTypeCommon.IsExternal[Type]\tYESNO\t\t376\t1\tIfcBoolean\t1\nPARAM\t58b45123-0503-4399-8d58-4716bf13f38f\tPset_JunctionBoxTypeCommon.JunctionBoxMountingType[Type]\tTEXT\t\t376\t1\tPEnum_JunctionBoxMountingType\t1\nPARAM\t1dea838a-45a9-4339-8226-3fbe93acfd70\tPset_JunctionBoxTypeCommon.MountingType[Type]\tTEXT\t\t376\t1\tPEnum_JunctionBoxMountingType\t1\nPARAM\ta253d682-c023-4b2e-8cfa-f8f31601d770\tPset_JunctionBoxTypeCommon.NominalHeight[Type]\tLENGTH\t\t376\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t78086c2f-6078-43a4-b8db-b5e2e627cf41\tPset_JunctionBoxTypeCommon.NominalLength[Type]\tLENGTH\t\t376\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tbcdf0d55-2d13-4eab-b0d1-eccfd3ce42d8\tPset_JunctionBoxTypeCommon.NominalWidth[Type]\tLENGTH\t\t376\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tddd3b353-a441-499b-975e-d114a1839913\tPset_JunctionBoxTypeCommon.NumberOfGangs[Type]\tINTEGER\t\t376\t1\tIfcCountMeasure\t1\nPARAM\t5bf09794-25c9-464d-862f-74c011993960\tPset_JunctionBoxTypeCommon.PlacingType[Type]\tTEXT\t\t376\t1\tPEnum_JunctionBoxPlacingType\t1\nPARAM\t69fe3f04-a9b8-4e2b-9a94-64ab62c54a3a\tPset_JunctionBoxTypeCommon.Reference[Type]\tTEXT\t\t376\t1\tIfcIdentifier\t1\nPARAM\tcc8edb82-5331-4a9f-abe1-e59fc0afd61b\tPset_JunctionBoxTypeCommon.ShapeType[Type]\tTEXT\t\t376\t1\tPEnum_JunctionBoxShapeType\t1\nPARAM\t145597e6-c193-43d7-a328-b713ffce30e2\tPset_JunctionBoxTypeCommon.Status[Type]\tTEXT\t\t376\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t377\tPset_JunctionBoxTypeData\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8680a657-cf84-4966-856e-3942df02e69c\tPset_JunctionBoxTypeData.DataConnectionType[Type]\tTEXT\t\t377\t1\tPEnum_DataConnectionType\t1\n#\nGROUP\t378\tPset_KerbCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0f4bd597-3924-4e21-a01e-39d35d13ca8d\tPset_KerbCommon.CombinedKerbGutter[Type]\tYESNO\t\t378\t1\tIfcBoolean\t1\nPARAM\t001b5893-b1e2-45f8-aa90-f43ea7959ab9\tPset_KerbCommon.Mountable[Type]\tYESNO\t\t378\t1\tIfcBoolean\t1\nPARAM\t6a6ec6f4-c66d-4e51-8142-c8c27d098bac\tPset_KerbCommon.Upstand[Type]\tLENGTH\t\t378\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t379\tPset_KerbStone\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td97dfd53-ebac-4b6d-9489-bf113f161d9f\tPset_KerbStone.NominalHeight[Type]\tLENGTH\t\t379\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\td3a7ce16-d6ae-407b-8e5b-ceb2c4803c8d\tPset_KerbStone.NominalLength[Type]\tLENGTH\t\t379\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t382557b9-5e55-4f03-866b-cf664f555fe2\tPset_KerbStone.NominalWidth[Type]\tLENGTH\t\t379\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t51d543e8-ed8d-4d5a-a85e-7016bfde07e6\tPset_KerbStone.StoneFinishes[Type]\tTEXT\t\t379\t1\tIfcLabel\t1\nPARAM\t248bfa37-b699-426a-9545-029acab5f727\tPset_KerbStone.TypeDesignation[Type]\tTEXT\t\t379\t1\tIfcLabel\t1\n#\nGROUP\t380\tPset_LampEmitterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t63119d10-d74f-4d66-9d7c-b9e79167a396\tPset_LampEmitterTypeCommon.ColorAppearance[Type]\tTEXT\t\t380\t1\tIfcLabel\t1\nPARAM\t6646d8ae-6ae5-465e-afd6-c70c1ce51253\tPset_LampEmitterTypeCommon.ColorRenderingIndex[Type]\tINTEGER\t\t380\t1\tIfcInteger\t1\nPARAM\t8806c24a-b1a6-43ed-b91f-c72554863c0a\tPset_LampEmitterTypeCommon.ColorTemperature[Type]\tNUMBER\t\t380\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t046d61b3-2637-4728-9f21-3b7b4d6f1098\tPset_LampEmitterTypeCommon.ContributedLuminousFlux[Type]\tNUMBER\t\t380\t1\tIfcLuminousFluxMeasure\t1\nPARAM\t35730d70-f2b7-49a5-83a0-5386dfd076e7\tPset_LampEmitterTypeCommon.LampBallastType[Type]\tTEXT\t\t380\t1\tPEnum_LampBallastType\t1\nPARAM\tacf5a6d7-49b3-4817-9f9a-048ca691120e\tPset_LampEmitterTypeCommon.LampCompensationType[Type]\tTEXT\t\t380\t1\tPEnum_LampCompensationType\t1\nPARAM\ta707417d-80b7-46fb-9af6-c3fff114a321\tPset_LampEmitterTypeCommon.LampMaintenanceFactor[Type]\tNUMBER\t\t380\t1\tIfcReal\t1\nPARAM\t4f43282d-0b48-4dab-9c7e-c4bff389cf76\tPset_LampEmitterTypeCommon.LightEmitterNominalPower[Type]\tNUMBER\t\t380\t1\tIfcPowerMeasure\t1\nPARAM\t3e20b973-683f-46ac-81fc-efef9fe9de29\tPset_LampEmitterTypeCommon.Spectrum[Type]\tMULTILINETEXT\t\t380\t1\tPropertyTableValue\t1\n#\nGROUP\t381\tPset_LampTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t258285ae-6edc-43a5-aa26-f4068b3df4c3\tPset_LampTypeCommon.ColorAppearance[Type]\tTEXT\t\t381\t1\tIfcLabel\t1\nPARAM\ta1d279cf-f213-4aef-8aa1-4b5b7f2dbb9b\tPset_LampTypeCommon.ColorRenderingIndex[Type]\tINTEGER\t\t381\t1\tIfcInteger\t1\nPARAM\tb384954f-6bfa-456f-a66b-e099049012e2\tPset_LampTypeCommon.ColorTemperature[Type]\tNUMBER\t\t381\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t021587dc-eb38-4984-b28e-631a49ed7bdd\tPset_LampTypeCommon.ColourAppearance[Type]\tTEXT\t\t381\t1\tIfcLabel\t1\nPARAM\t196a751c-ae1a-4863-b3d2-73f23af566b3\tPset_LampTypeCommon.ColourRenderingIndex[Type]\tINTEGER\t\t381\t1\tIfcInteger\t1\nPARAM\taa29078d-de80-4045-9391-1e399e76c32b\tPset_LampTypeCommon.ColourTemperature[Type]\tNUMBER\t\t381\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t1f82d1bb-bb12-4bf6-858e-facdf336c234\tPset_LampTypeCommon.ContributedLuminousFlux[Type]\tNUMBER\t\t381\t1\tIfcLuminousFluxMeasure\t1\nPARAM\t37601f22-0fb8-499e-84ff-6685a2176783\tPset_LampTypeCommon.LampBallastType[Type]\tTEXT\t\t381\t1\tPEnum_LampBallastType\t1\nPARAM\t93ae1423-7eed-4efc-bed4-985991518ed8\tPset_LampTypeCommon.LampCompensationType[Type]\tTEXT\t\t381\t1\tPEnum_LampCompensationType\t1\nPARAM\t62d266a4-a2bd-419c-b3b5-110508115f52\tPset_LampTypeCommon.LampMaintenanceFactor[Type]\tNUMBER\t\t381\t1\tIfcReal\t1\nPARAM\tc85e3970-3ef8-4c68-a28b-ff90051a8ae5\tPset_LampTypeCommon.LightEmitterNominalPower[Type]\tNUMBER\t\t381\t1\tIfcPowerMeasure\t1\nPARAM\t4dda0e4a-24ac-4246-b0b4-89dd3fb4e75a\tPset_LampTypeCommon.Reference[Type]\tTEXT\t\t381\t1\tIfcIdentifier\t1\nPARAM\t494ab4a1-2681-4165-a9b9-065c93a68233\tPset_LampTypeCommon.Spectrum[Type]\tMULTILINETEXT\t\t381\t1\tPropertyTableValue\t1\nPARAM\t36a4d1b4-18ed-4df0-9d87-9eabc2bd9aa9\tPset_LampTypeCommon.Status[Type]\tTEXT\t\t381\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t382\tPset_LandRegistration\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcec9207c-5c74-4ef3-bc8c-05f16f67c4f5\tPset_LandRegistration.IsPermanentID[Type]\tYESNO\t\t382\t1\tIfcBoolean\t1\nPARAM\t703e2ab4-8d56-40ef-a932-224b389a9056\tPset_LandRegistration.LandID[Type]\tTEXT\t\t382\t1\tIfcIdentifier\t1\nPARAM\t7613df95-d855-4192-b2ed-4e7d95ec1fb4\tPset_LandRegistration.LandTitleID[Type]\tTEXT\t\t382\t1\tIfcIdentifier\t1\n#\nGROUP\t383\tPset_LightFixtureTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c218134-0643-438d-b184-a20a0f5dfb38\tPset_LightFixtureTypeCommon.ArticleNumber[Type]\tMULTILINETEXT\t\t383\t1\tIfcClassificationReference\t1\nPARAM\td030b86b-98d6-4523-9284-3b4ad3ecfad1\tPset_LightFixtureTypeCommon.LightFixtureMountingType[Type]\tTEXT\t\t383\t1\tPEnum_LightFixtureMountingType\t1\nPARAM\te3ff0856-5f95-465e-bdb4-ef28b4d20e45\tPset_LightFixtureTypeCommon.LightFixturePlacingType[Type]\tTEXT\t\t383\t1\tPEnum_LightFixturePlacingType\t1\nPARAM\t8d78fb24-4e61-4c7a-9682-1483a2b8ffd9\tPset_LightFixtureTypeCommon.MaintenanceFactor[Type]\tNUMBER\t\t383\t1\tIfcReal\t1\nPARAM\t49df8f25-fdfd-4c66-99ba-b3529d2702ce\tPset_LightFixtureTypeCommon.ManufacturersSpecificInformation[Type]\tTEXT\t\t383\t1\tIfcText\t1\nPARAM\tf2bcb1da-7efe-4d58-bad9-25dc228e795e\tPset_LightFixtureTypeCommon.MaximumPlenumSensibleLoad[Type]\tNUMBER\t\t383\t1\tIfcPowerMeasure\t1\nPARAM\t66d08e36-529a-452e-a4c6-40d2d7fa9638\tPset_LightFixtureTypeCommon.MaximumSpaceSensibleLoad[Type]\tNUMBER\t\t383\t1\tIfcPowerMeasure\t1\nPARAM\t24d8c329-6083-49b2-8bd1-3f5b0bd25613\tPset_LightFixtureTypeCommon.NumberOfSources[Type]\tINTEGER\t\t383\t1\tIfcCountMeasure\t1\nPARAM\tae042654-1927-410c-b2c7-42cee4dbc69f\tPset_LightFixtureTypeCommon.Reference[Type]\tTEXT\t\t383\t1\tIfcIdentifier\t1\nPARAM\t0422169f-d87b-4717-8748-0ecf05e21a95\tPset_LightFixtureTypeCommon.SensibleLoadToRadiant[Type]\tNUMBER\t\t383\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t49ff750d-81a8-4525-a724-e8f1033a6080\tPset_LightFixtureTypeCommon.Status[Type]\tTEXT\t\t383\t1\tPEnum_ElementStatus\t1\nPARAM\t5433ad35-daf2-4248-9870-1584278aef4c\tPset_LightFixtureTypeCommon.TotalWattage[Type]\tNUMBER\t\t383\t1\tIfcPowerMeasure\t1\n#\nGROUP\t384\tPset_LightFixtureTypeExitSign\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t75d1450e-2121-4836-acc0-2a1e9f8dc548\tPset_LightFixtureTypeExitSign.Addressablility[Type]\tTEXT\t\t384\t1\tPEnum_AddressabilityType\t1\nPARAM\t93cb3351-391c-46e5-af48-eb236b4cb226\tPset_LightFixtureTypeExitSign.BackupSupplySystem[Type]\tTEXT\t\t384\t1\tPEnum_BackupSupplySystemType\t1\nPARAM\t719e75f4-f13f-4bfa-9c33-e09e8e7d9234\tPset_LightFixtureTypeExitSign.MinimumTextHeight[Type]\tNUMBER\t\t384\t1\tIfcPositiveLengthMeasure \t1\nPARAM\tb0d6cfec-48c1-442e-890c-5777df7c27ed\tPset_LightFixtureTypeExitSign.PictogramEscapeDirection[Type]\tTEXT\t\t384\t1\tPEnum_PictogramEscapeDirectionType\t1\nPARAM\ta951009a-4b02-4638-a404-2f7fa6721e24\tPset_LightFixtureTypeExitSign.SelfTestFunction[Type]\tTEXT\t\t384\t1\tPEnum_SelfTestType\t1\n#\nGROUP\t385\tPset_LightFixtureTypeSecurityLighting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf5bd29ae-b647-4ff2-a112-3cd30ed5bf55\tPset_LightFixtureTypeSecurityLighting.Addressablility[Type]\tTEXT\t\t385\t1\tPEnum_AddressabilityType\t1\nPARAM\t1ba3c348-8b43-4ff0-b755-e8b3119ec4ec\tPset_LightFixtureTypeSecurityLighting.BackupSupplySystem[Type]\tTEXT\t\t385\t1\tPEnum_BackupSupplySystemType\t1\nPARAM\t5261223d-8d24-4545-ae8c-aec67e27ffe5\tPset_LightFixtureTypeSecurityLighting.FixtureHeight[Type]\tLENGTH\t\t385\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t104f3543-b75e-4327-a925-db04c4d2dbc4\tPset_LightFixtureTypeSecurityLighting.PictogramEscapeDirection[Type]\tTEXT\t\t385\t1\tPEnum_PictogramEscapeDirectionType\t1\nPARAM\t6018c4a8-f284-4ccb-af47-8ac112ee34e0\tPset_LightFixtureTypeSecurityLighting.SecurityLightingType[Type]\tTEXT\t\t385\t1\tPEnum_LightFixtureSecurityLightingType\t1\nPARAM\t4da49e5d-92ee-4bc1-b34b-0ee51459c41b\tPset_LightFixtureTypeSecurityLighting.SelfTestFunction[Type]\tTEXT\t\t385\t1\tPEnum_SelfTestType\t1\n#\nGROUP\t386\tPset_LightFixtureTypeThermal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a6d964a-90ec-4bd0-ad78-71a3e61dda17\tPset_LightFixtureTypeThermal.MaximumPlenumSensibleLoad[Type]\tNUMBER\t\t386\t1\tIfcPowerMeasure\t1\nPARAM\t14ea42f7-c6ab-4af9-b7c3-51c7138e88a3\tPset_LightFixtureTypeThermal.MaximumSpaceSensibleLoad[Type]\tNUMBER\t\t386\t1\tIfcPowerMeasure\t1\nPARAM\tc460fe28-62e4-4df1-ba09-cbd970b5da9a\tPset_LightFixtureTypeThermal.SensibleLoadToRadiant[Type]\tNUMBER\t\t386\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t387\tPset_LinearReferencingMethod\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taed59b2c-694e-44ff-82fc-9b84c05b0de2\tPset_LinearReferencingMethod.LRMConstraint[Type]\tTEXT\t\t387\t1\tIfcLabel\t1\nPARAM\tdeb08b30-8a3d-42c8-ba12-ae6197f910a0\tPset_LinearReferencingMethod.LRMName[Type]\tTEXT\t\t387\t1\tIfcLabel\t1\nPARAM\tf3bf2bde-32df-47d4-b5e3-8684c1f88a66\tPset_LinearReferencingMethod.LRMType[Type]\tTEXT\t\t387\t1\tPEnum_LRMType\t1\nPARAM\t0f4d7c69-96f3-452e-a1fe-bcfa157d6d29\tPset_LinearReferencingMethod.LRMUnit[Type]\tTEXT\t\t387\t1\tIfcLabel\t1\nPARAM\t206e250f-1c10-4336-8a10-18ac574bed17\tPset_LinearReferencingMethod.UserDefinedLRMType[Type]\tTEXT\t\t387\t1\tIfcLabel\t1\n#\nGROUP\t388\tPset_MaintenanceStrategy\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t90ab1bad-a0ff-4a77-8b8d-0c2a2bdd9943\tPset_MaintenanceStrategy.AccidentResponse[Type]\tTEXT\t\t388\t1\tPEnum_AccidentResponse\t1\nPARAM\t71bf72d1-a085-4b43-9875-753f8b506c09\tPset_MaintenanceStrategy.AssetCriticality[Type]\tTEXT\t\t388\t1\tPEnum_AssetRating\t1\nPARAM\tf353b152-1eaf-4d12-9712-6f6ac6aa9f7a\tPset_MaintenanceStrategy.AssetFrailty[Type]\tTEXT\t\t388\t1\tPEnum_AssetRating\t1\nPARAM\td6ef0c9b-96b5-431b-8d37-d85418dc398c\tPset_MaintenanceStrategy.AssetPriority[Type]\tTEXT\t\t388\t1\tPEnum_AssetRating\t1\nPARAM\tc5fcb504-bb54-43f6-8d84-39d8993a72cc\tPset_MaintenanceStrategy.MonitoringType[Type]\tTEXT\t\t388\t1\tPEnum_MonitoringType\t1\n#\nGROUP\t389\tPset_MaintenanceTriggerCondition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td6936d5c-50fb-4ac6-9900-d62b367e7c9d\tPset_MaintenanceTriggerCondition.ConditionDisposalLevel[Type]\tTEXT\t\t389\t1\tPEnum_AssetRating\t1\nPARAM\t7a96479b-f526-4387-9afd-db029a7d87e8\tPset_MaintenanceTriggerCondition.ConditionMaintenanceLevel[Type]\tTEXT\t\t389\t1\tPEnum_AssetRating\t1\nPARAM\t739d0b8b-c898-47e2-a1c1-34d1443068ad\tPset_MaintenanceTriggerCondition.ConditionReplacementLevel[Type]\tTEXT\t\t389\t1\tPEnum_AssetRating\t1\nPARAM\ta84265d0-d781-4e19-8f41-1b36d856e8cd\tPset_MaintenanceTriggerCondition.ConditionTargetPerformance[Type]\tTEXT\t\t389\t1\tPEnum_AssetRating\t1\n#\nGROUP\t390\tPset_MaintenanceTriggerDuration\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t849b43dd-05e0-4108-8777-cfbdf1d965aa\tPset_MaintenanceTriggerDuration.DurationDisposalLevel[Type]\tTEXT\t\t390\t1\tIfcDuration\t1\nPARAM\t2508a44c-27fc-402f-8ffe-3d57bbd958cb\tPset_MaintenanceTriggerDuration.DurationMaintenanceLevel[Type]\tTEXT\t\t390\t1\tIfcDuration\t1\nPARAM\tb07445e1-ae9b-48b5-8261-b027f699b67b\tPset_MaintenanceTriggerDuration.DurationReplacementLevel[Type]\tTEXT\t\t390\t1\tIfcDuration\t1\nPARAM\td596bd7f-2b6f-4bd5-a0ca-dceeffbbdffa\tPset_MaintenanceTriggerDuration.DurationTargetPerformance[Type]\tTEXT\t\t390\t1\tIfcDuration\t1\n#\nGROUP\t391\tPset_MaintenanceTriggerPerformance\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te32d3103-f171-45d0-b506-0b2a8a532b2a\tPset_MaintenanceTriggerPerformance.DisposalLevel[Type]\tNUMBER\t\t391\t1\tIfcReal\t1\nPARAM\t3d511955-ca59-4d17-ac67-2fcb0dca078f\tPset_MaintenanceTriggerPerformance.PerformanceMaintenanceLevel[Type]\tNUMBER\t\t391\t1\tIfcReal\t1\nPARAM\t37f808bb-059f-4d22-87a7-ac22df7ba4eb\tPset_MaintenanceTriggerPerformance.ReplacementLevel[Type]\tNUMBER\t\t391\t1\tIfcReal\t1\nPARAM\t49df5b19-55dd-45bd-9d6c-aacb77ae5fef\tPset_MaintenanceTriggerPerformance.TargetPerformance[Type]\tNUMBER\t\t391\t1\tIfcReal\t1\n#\nGROUP\t392\tPset_ManufacturerOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf1946a98-9882-48de-98a9-3bc4dfde46cc\tPset_ManufacturerOccurrence.AcquisitionDate[Type]\tTEXT\t\t392\t1\tIfcDate\t1\nPARAM\t4f359f8c-ae4f-4957-b173-0572b28d1e08\tPset_ManufacturerOccurrence.AssemblyPlace[Type]\tTEXT\t\t392\t1\tPEnum_AssemblyPlace\t1\nPARAM\tc3149216-9dfd-467d-962c-1d9f9d028d38\tPset_ManufacturerOccurrence.BarCode[Type]\tTEXT\t\t392\t1\tIfcIdentifier\t1\nPARAM\tc2766010-a53d-494f-9bcf-774aebf6ea4c\tPset_ManufacturerOccurrence.BatchReference[Type]\tTEXT\t\t392\t1\tIfcIdentifier\t1\nPARAM\t8bf7824f-b757-4f45-8436-03cfffba59a5\tPset_ManufacturerOccurrence.ManufacturingDate[Type]\tTEXT\t\t392\t1\tIfcDate\t1\nPARAM\t7f214cbe-e394-485b-b219-4d266ad1399e\tPset_ManufacturerOccurrence.SerialNumber[Type]\tTEXT\t\t392\t1\tIfcIdentifier\t1\n#\nGROUP\t393\tPset_ManufacturerTypeInformation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7bb84d84-89d6-458b-8bad-d0d51e6a06dc\tPset_ManufacturerTypeInformation.ArticleNumber[Type]\tTEXT\t\t393\t1\tIfcIdentifier\t1\nPARAM\t6f83fe8c-095f-4d39-8f9f-3b2bf34b3011\tPset_ManufacturerTypeInformation.AssemblyPlace[Type]\tTEXT\t\t393\t1\tPEnum_AssemblyPlace\t1\nPARAM\t4d9b315a-e2ce-45ac-8ec7-27d7cf6a19da\tPset_ManufacturerTypeInformation.GlobalTradeItemNumber[Type]\tTEXT\t\t393\t1\tIfcIdentifier\t1\nPARAM\t34e1e334-928e-4d51-a220-f8dd9f201371\tPset_ManufacturerTypeInformation.Manufacturer[Type]\tTEXT\t\t393\t1\tIfcLabel\t1\nPARAM\t68ff4657-2b27-4fae-9c3b-fcdcda758411\tPset_ManufacturerTypeInformation.ModelLabel[Type]\tTEXT\t\t393\t1\tIfcLabel\t1\nPARAM\td4b5e85a-05b9-4ffb-bd6b-c6f491ade688\tPset_ManufacturerTypeInformation.ModelReference[Type]\tTEXT\t\t393\t1\tIfcLabel\t1\nPARAM\td8880685-5e31-4cce-b7fb-bcb2683aa14b\tPset_ManufacturerTypeInformation.OperatingWeight[Type]\tNUMBER\t\t393\t1\tIfcMassMeasure\t1\nPARAM\t3b88afb3-befa-48a6-9cd5-367e8c16160f\tPset_ManufacturerTypeInformation.OperationalDocument[Type]\tMULTILINETEXT\t\t393\t1\tIfcExternalReference\t1\nPARAM\t5194c64c-1706-46dc-afc6-42c0b23185f5\tPset_ManufacturerTypeInformation.PerformanceCertificate[Type]\tMULTILINETEXT\t\t393\t1\tIfcDocumentReference\t1\nPARAM\ta31f0b0e-a854-4835-8b6c-a417c89ddf55\tPset_ManufacturerTypeInformation.ProductionYear[Type]\tTEXT\t\t393\t1\tIfcLabel\t1\nPARAM\t51dd4942-3f3f-44c4-80f0-8b96b2877f60\tPset_ManufacturerTypeInformation.SafetyDocument[Type]\tMULTILINETEXT\t\t393\t1\tIfcDocumentReference\t1\nPARAM\t26a876bc-5430-4aad-9f5d-1714403e11b7\tPset_ManufacturerTypeInformation.ShippingWeight[Type]\tNUMBER\t\t393\t1\tIfcMassMeasure\t1\n#\nGROUP\t394\tPset_MarineFacilityTransportation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83bb993a-6c7f-4037-baf2-b20a73b70b30\tPset_MarineFacilityTransportation.BerthCargoWeight[Type]\tNUMBER\t\t394\t1\tIfcMassMeasure\t1\nPARAM\t099426fd-fad1-4f68-80ed-42eca6f9dc2c\tPset_MarineFacilityTransportation.BerthGrade[Type]\tTEXT\t\t394\t1\tIfcLabel\t1\nPARAM\t2775cf9b-560e-4687-980c-ccc6276c1d1f\tPset_MarineFacilityTransportation.Berths[Type]\tINTEGER\t\t394\t1\tIfcCountMeasure\t1\n#\nGROUP\t395\tPset_MarinePartChamberCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2147f812-ff2d-40e9-9337-42a6b8da7631\tPset_MarinePartChamberCommon.EffectiveChamberSize[Type]\tVOLUME\t\t395\t1\tIfcVolumeMeasure\t1\nPARAM\td697760c-a8b3-47bf-97be-3e9bf6684f07\tPset_MarinePartChamberCommon.StructuralType[Type]\tTEXT\t\t395\t1\tIfcLabel\t1\n#\nGROUP\t396\tPset_MarineVehicleCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t376d89eb-01bf-4d72-92b5-a65da68452b7\tPset_MarineVehicleCommon.AboveDeckProjectedWindEnd[Type]\tAREA\t\t396\t1\tIfcAreaMeasure\t1\nPARAM\t3921afdf-2b91-407c-9ead-4b25249c54c3\tPset_MarineVehicleCommon.AboveDeckProjectedWindSide[Type]\tAREA\t\t396\t1\tIfcAreaMeasure\t1\nPARAM\t7c8526ba-faa5-4485-ac3e-5c08ddbe79ab\tPset_MarineVehicleCommon.CargoDeadWeight[Type]\tNUMBER\t\t396\t1\tIfcMassMeasure\t1\nPARAM\t80f4859b-ea9d-4c12-8dd7-de18317de3c0\tPset_MarineVehicleCommon.Displacement[Type]\tNUMBER\t\t396\t1\tIfcMassMeasure\t1\nPARAM\t2f2fb42e-84e0-41f0-b6da-b9f42d25991a\tPset_MarineVehicleCommon.LaneMeters[Type]\tLENGTH\t\t396\t1\tIfcLengthMeasure\t1\nPARAM\t327ddbe1-5707-4775-a1fc-34ba76d2c964\tPset_MarineVehicleCommon.LengthBetweenPerpendiculars[Type]\tLENGTH\t\t396\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5494009d-054a-4021-af6c-fb3f476d1dd1\tPset_MarineVehicleCommon.VesselDepth[Type]\tLENGTH\t\t396\t1\tIfcLengthMeasure\t1\nPARAM\t745179e8-db44-45a1-9044-5f7b5facc799\tPset_MarineVehicleCommon.VesselDraft[Type]\tLENGTH\t\t396\t1\tIfcLengthMeasure\t1\n#\nGROUP\t397\tPset_MarineVehicleDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t03df59dc-ce8b-49ea-8a36-6dca53853826\tPset_MarineVehicleDesignCriteria.AllowableHullPressure[Type]\tNUMBER\t\t397\t1\tIfcPressureMeasure\t1\nPARAM\t2635f45a-4ccf-4ded-b792-7b31133ff746\tPset_MarineVehicleDesignCriteria.SoftnessCoefficient[Type]\tNUMBER\t\t397\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t398\tPset_MarkerGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t377b929a-6888-4407-9e10-a9164ecc4393\tPset_MarkerGeneral.ApproachSpeed[Type]\tNUMBER\t\t398\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tb0fb2bd6-774f-42eb-afb0-f5f8963c1b12\tPset_MarkerGeneral.MarkerType[Type]\tTEXT\t\t398\t1\tPEnum_MarkerType\t1\nPARAM\ta60aa844-645a-4921-8562-6689bd8a7530\tPset_MarkerGeneral.NominalHeight[Type]\tLENGTH\t\t398\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taea7bbb2-24d6-4c14-a64a-2e8f191d20cc\tPset_MarkerGeneral.NominalWidth[Type]\tLENGTH\t\t398\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t07ad7368-5472-43a9-9790-9457354bc86f\tPset_MarkerGeneral.Symbol[Type]\tMULTILINETEXT\t\t398\t1\tIfcExternalReference\t1\n#\nGROUP\t399\tPset_MarkingLinesCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t91cfeb00-7ace-4725-8979-065a832ebc55\tPset_MarkingLinesCommon.DashedLine[Type]\tYESNO\t\t399\t1\tIfcBoolean\t1\nPARAM\t74f90055-2425-40cd-99fd-d61f541facd5\tPset_MarkingLinesCommon.DashedLinePattern[Type]\tTEXT\t\t399\t1\tIfcLabel\t1\nPARAM\t999569e6-5f39-451d-82e6-7dd8ada555e6\tPset_MarkingLinesCommon.NominalWidth[Type]\tLENGTH\t\t399\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t400\tPset_MaterialCombustion\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9efeeaf7-43eb-425d-906f-cd8875a1ef42\tPset_MaterialCombustion.CO2Content[Type]\tNUMBER\t\t400\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t558beed3-1e66-43db-bbe9-fd68fe070c36\tPset_MaterialCombustion.COContent[Type]\tNUMBER\t\t400\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf7700e32-9650-4b0f-8db0-ac71d00a5031\tPset_MaterialCombustion.N20Content[Type]\tNUMBER\t\t400\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t540cb006-28c7-4e2b-baa6-5f3c5941728c\tPset_MaterialCombustion.SpecificHeatCapacity[Type]\tNUMBER\t\t400\t1\tIfcSpecificHeatCapacityMeasure\t1\n#\nGROUP\t401\tPset_MaterialCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4d5fbf59-c51e-4726-9f3f-d13d56b74833\tPset_MaterialCommon.MassDensity[Type]\tMASS_DENSITY\t\t401\t1\tIfcMassDensityMeasure\t1\nPARAM\t2289f91e-f4b3-460b-941d-0ca73909dfdc\tPset_MaterialCommon.MolecularWeight[Type]\tNUMBER\t\t401\t1\tIfcMolecularWeightMeasure\t1\nPARAM\tcf25826d-7bd8-4ef9-b513-7473a99a6da6\tPset_MaterialCommon.Porosity[Type]\tNUMBER\t\t401\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t402\tPset_MaterialConcrete\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0fcad757-ead1-4442-97db-c219e80c1963\tPset_MaterialConcrete.AdmixturesDescription[Type]\tTEXT\t\t402\t1\tIfcText\t1\nPARAM\t7852b617-ca37-47f0-aa40-34a916d2209b\tPset_MaterialConcrete.CompressiveStrength[Type]\tNUMBER\t\t402\t1\tIfcPressureMeasure\t1\nPARAM\t444c6c4c-4f64-472f-9b9f-a7e2d5c90171\tPset_MaterialConcrete.MaxAggregateSize[Type]\tLENGTH\t\t402\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tadb42f7f-d8a8-49e2-8542-586bd129d00d\tPset_MaterialConcrete.ProtectivePoreRatio[Type]\tNUMBER\t\t402\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t92a59e1d-772e-443f-af36-3c2a92983a07\tPset_MaterialConcrete.WaterImpermeability[Type]\tTEXT\t\t402\t1\tIfcText\t1\nPARAM\t7f9a9a0a-07e1-40b5-80d5-c4363fc2fa21\tPset_MaterialConcrete.Workability[Type]\tTEXT\t\t402\t1\tIfcText\t1\n#\nGROUP\t403\tPset_MaterialEnergy\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te3d853b3-3a93-4395-9b1c-e7c7a855a227\tPset_MaterialEnergy.GasPressure[Type]\tNUMBER\t\t403\t1\tIfcPressureMeasure\t1\nPARAM\t27d12b7f-1d36-4bd1-81cd-bca9bbed6662\tPset_MaterialEnergy.MoistureCapacityThermalGradient[Type]\tNUMBER\t\t403\t1\tIfcReal\t1\nPARAM\tacb591bf-cdf8-494f-a3c0-0ac47bb4b0f3\tPset_MaterialEnergy.SolarRefractionIndex[Type]\tNUMBER\t\t403\t1\tIfcReal\t1\nPARAM\t5b645d95-a1fc-4853-80b6-8c8de221b6f9\tPset_MaterialEnergy.SpecificHeatTemperatureDerivative[Type]\tNUMBER\t\t403\t1\tIfcReal\t1\nPARAM\t21f8c12c-f2a2-4e89-b0fa-fa5b14dc257a\tPset_MaterialEnergy.ThermalConductivityTemperatureDerivative[Type]\tNUMBER\t\t403\t1\tIfcReal\t1\nPARAM\t255b5bfb-7cbf-4788-92c8-6c9c198f2c38\tPset_MaterialEnergy.ViscosityTemperatureDerivative[Type]\tNUMBER\t\t403\t1\tIfcReal\t1\nPARAM\t82d6c0b8-63fc-4d9c-9098-2f0f15a8f655\tPset_MaterialEnergy.VisibleRefractionIndex[Type]\tNUMBER\t\t403\t1\tIfcReal\t1\n#\nGROUP\t404\tPset_MaterialFuel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9bff9010-2f32-4954-9597-fb9cbf593c9b\tPset_MaterialFuel.CarbonContent[Type]\tNUMBER\t\t404\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5e48598b-feef-4c4b-a40b-4be023eac6eb\tPset_MaterialFuel.CombustionTemperature[Type]\tNUMBER\t\t404\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tfada699a-f6a6-47c8-beed-915e15e87ab7\tPset_MaterialFuel.HigherHeatingValue[Type]\tNUMBER\t\t404\t1\tIfcHeatingValueMeasure\t1\nPARAM\tfdcb0f7d-698d-4407-88c0-3786fd1d94b1\tPset_MaterialFuel.LowerHeatingValue[Type]\tNUMBER\t\t404\t1\tIfcHeatingValueMeasure\t1\n#\nGROUP\t405\tPset_MaterialHygroscopic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcd6f1f03-0af8-4cf3-bf65-554d9f225998\tPset_MaterialHygroscopic.IsothermalMoistureCapacity[Type]\tNUMBER\t\t405\t1\tIfcIsothermalMoistureCapacityMeasure\t1\nPARAM\t1c6feb7d-1afc-45e2-b364-1205af4e3acc\tPset_MaterialHygroscopic.LowerVaporResistanceFactor[Type]\tNUMBER\t\t405\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5d280d98-5494-478d-b943-846c6d029640\tPset_MaterialHygroscopic.MoistureDiffusivity[Type]\tNUMBER\t\t405\t1\tIfcMoistureDiffusivityMeasure\t1\nPARAM\t3546c74d-197d-42d7-8c4b-721a2ff7efec\tPset_MaterialHygroscopic.UpperVaporResistanceFactor[Type]\tNUMBER\t\t405\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta559578a-b1fa-45d0-ba20-e287ab25f995\tPset_MaterialHygroscopic.VaporPermeability[Type]\tNUMBER\t\t405\t1\tIfcVaporPermeabilityMeasure\t1\n#\nGROUP\t406\tPset_MaterialMechanical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7791d773-8812-4f7d-a7b1-5d780c2f9638\tPset_MaterialMechanical.DynamicViscosity[Type]\tNUMBER\t\t406\t1\tIfcDynamicViscosityMeasure\t1\nPARAM\t5b00e03e-5fc5-4a10-a3f6-7f23abd631f1\tPset_MaterialMechanical.PoissonRatio[Type]\tNUMBER\t\t406\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t8b0db995-87a4-4c4a-9678-91661fbd99fc\tPset_MaterialMechanical.ShearModulus[Type]\tNUMBER\t\t406\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t49b4a38a-3382-4e75-ac26-2a3c4b5c51d0\tPset_MaterialMechanical.ThermalExpansionCoefficient[Type]\tNUMBER\t\t406\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\t1812487c-10b6-4f94-9252-a8877c09f7d1\tPset_MaterialMechanical.YoungModulus[Type]\tNUMBER\t\t406\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t407\tPset_MaterialOptical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5e466a16-4803-44ad-a66d-725e952da28c\tPset_MaterialOptical.SolarReflectanceBack[Type]\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t2ac2b159-f30a-49a2-abe6-f5523648f074\tPset_MaterialOptical.SolarReflectanceFront[Type]\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t19ea6ca3-8203-4b79-b475-9aa4894ec515\tPset_MaterialOptical.SolarTransmittance[Type]\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t251d8111-d0cf-4688-9cb0-db3c1999d030\tPset_MaterialOptical.ThermalIrEmissivityBack[Type]\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tf76573a8-b4d6-47cc-b44b-c4692a69d3f1\tPset_MaterialOptical.ThermalIrEmissivityFront[Type]\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\ta74d45d7-ffe5-4f1d-9c68-290bccc45ef8\tPset_MaterialOptical.ThermalIrTransmittance[Type]\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t5307ba04-10b6-4c6d-990e-8e302cd60df0\tPset_MaterialOptical.VisibleReflectanceBack[Type]\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t1b4d43b9-a994-4ee6-bab2-f64b3dee5886\tPset_MaterialOptical.VisibleReflectanceFront[Type]\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tbee7b8ac-f455-47d1-a607-79da97c82ec5\tPset_MaterialOptical.VisibleTransmittance[Type]\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t408\tPset_MaterialSteel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2d4f892d-73a2-452a-accd-2488ea68f366\tPset_MaterialSteel.HardeningModule[Type]\tNUMBER\t\t408\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t31bbe128-0354-412f-87de-859028c89d23\tPset_MaterialSteel.PlasticStrain[Type]\tNUMBER\t\t408\t1\tIfcPositiveRatioMeasure\t1\nPARAM\taa29266c-c300-4903-a937-342b1844304c\tPset_MaterialSteel.ProportionalStress[Type]\tNUMBER\t\t408\t1\tIfcPressureMeasure\t1\nPARAM\t3f574a07-79d0-41d8-af8e-ab6d46d7504f\tPset_MaterialSteel.Relaxations[Type]\tMULTILINETEXT\t\t408\t1\tPropertyTableValue\t1\nPARAM\t2a574884-3f40-48c9-b11a-d8cd5710228d\tPset_MaterialSteel.StructuralGrade[Type]\tTEXT\t\t408\t1\tIfcLabel\t1\nPARAM\t60513947-33da-455c-a35e-79359b48b091\tPset_MaterialSteel.UltimateStrain[Type]\tNUMBER\t\t408\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t652f7211-a956-4971-8eb1-2f5797307067\tPset_MaterialSteel.UltimateStress[Type]\tNUMBER\t\t408\t1\tIfcPressureMeasure\t1\nPARAM\td7b0c602-bc9d-4e37-863c-79daaecc262e\tPset_MaterialSteel.YieldStress[Type]\tNUMBER\t\t408\t1\tIfcPressureMeasure\t1\n#\nGROUP\t409\tPset_MaterialThermal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t85f85c54-9c11-4853-88a1-19bb1418cb6d\tPset_MaterialThermal.BoilingPoint[Type]\tNUMBER\t\t409\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t89398ab5-ccef-49be-b36b-bdb826e80baf\tPset_MaterialThermal.FreezingPoint[Type]\tNUMBER\t\t409\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t06635cc8-ee15-4649-8c28-4429f8918ecd\tPset_MaterialThermal.SpecificHeatCapacity[Type]\tNUMBER\t\t409\t1\tIfcSpecificHeatCapacityMeasure\t1\nPARAM\t3549c691-5d1e-45a5-845b-2edcaa8df3af\tPset_MaterialThermal.ThermalConductivity[Type]\tNUMBER\t\t409\t1\tIfcThermalConductivityMeasure\t1\n#\nGROUP\t410\tPset_MaterialWater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tccef5a23-f033-40f6-af79-9d9aff01b750\tPset_MaterialWater.AcidityConcentration[Type]\tNUMBER\t\t410\t1\tIfcIonConcentrationMeasure\t1\nPARAM\tfef1ee8c-452f-4516-8e89-28767eddf11b\tPset_MaterialWater.AlkalinityConcentration[Type]\tNUMBER\t\t410\t1\tIfcIonConcentrationMeasure\t1\nPARAM\tf46226d0-b9a7-4fbb-9da2-aea87289fcf8\tPset_MaterialWater.DissolvedSolidsContent[Type]\tNUMBER\t\t410\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\ta2dc2e7f-e426-4286-a94a-483314a7bbd9\tPset_MaterialWater.Hardness[Type]\tNUMBER\t\t410\t1\tIfcIonConcentrationMeasure\t1\nPARAM\tbaba80ac-56ad-4e6d-829d-39d6cf6ec93f\tPset_MaterialWater.ImpuritiesContent[Type]\tNUMBER\t\t410\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t918b9a2b-452d-4139-8920-6edade5d479f\tPset_MaterialWater.IsPotable[Type]\tYESNO\t\t410\t1\tIfcBoolean\t1\nPARAM\t52003081-54a2-41e1-8d4b-eb3cc57aa678\tPset_MaterialWater.PHLevel[Type]\tNUMBER\t\t410\t1\tIfcPHMeasure\t1\n#\nGROUP\t411\tPset_MaterialWood\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a5fd622-c5e3-4109-a71a-a92e6494c3cc\tPset_MaterialWood.AppearanceGrade[Type]\tTEXT\t\t411\t1\tIfcLabel\t1\nPARAM\td782a99b-7e42-4efe-8396-e89f7c060634\tPset_MaterialWood.DimensionalChangeCoefficient[Type]\tNUMBER\t\t411\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t87d83def-38c5-413f-ae6e-969a43179fb5\tPset_MaterialWood.Layers[Type]\tINTEGER\t\t411\t1\tIfcInteger\t1\nPARAM\tdd28f7f2-bbb3-4cd2-9935-02883b7c3f59\tPset_MaterialWood.Layup[Type]\tTEXT\t\t411\t1\tIfcLabel\t1\nPARAM\tccbac143-65a7-418d-ae68-386ae7bee87c\tPset_MaterialWood.MoistureContent[Type]\tNUMBER\t\t411\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t8048507b-86eb-43a6-8863-d7a2568895d1\tPset_MaterialWood.Plies[Type]\tINTEGER\t\t411\t1\tIfcInteger\t1\nPARAM\t806b20b4-0bc7-4b7c-8391-a451930c8a88\tPset_MaterialWood.Species[Type]\tTEXT\t\t411\t1\tIfcLabel\t1\nPARAM\t9a2af8c3-bcbc-44fc-b922-6c0c66528ddd\tPset_MaterialWood.StrengthGrade[Type]\tTEXT\t\t411\t1\tIfcLabel\t1\nPARAM\t7a3000f9-f385-4c88-9c37-50fd8e59a5ba\tPset_MaterialWood.ThicknessSwelling[Type]\tNUMBER\t\t411\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t412\tPset_MaterialWoodBasedBeam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc29c94a0-ff8c-456e-bed1-ca4d32926691\tPset_MaterialWoodBasedBeam.ApplicableStructuralDesignMethod[Type]\tTEXT\t\t412\t1\tIfcLabel\t1\nPARAM\t93a7b2b5-d21e-4d1f-ae78-fb67ebb0b0d8\tPset_MaterialWoodBasedBeam.InPlane.BendingStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tdd10a75f-ef45-4292-815e-c3d6a4728fea\tPset_MaterialWoodBasedBeam.InPlane.CompStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t1bda51fd-7cb5-4cd0-bbf7-cebfcea6a747\tPset_MaterialWoodBasedBeam.InPlane.CompStrengthPerp[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t0e80b9d3-825b-45df-b6ff-76a9791e81b0\tPset_MaterialWoodBasedBeam.InPlane.InstabilityFactors[Type]\tMULTILINETEXT\t\t412\t1\tPropertyTableValue\t1\nPARAM\tadd30aaa-dfe8-4444-8508-a55e18c713a8\tPset_MaterialWoodBasedBeam.InPlane.RaisedCompStrengthPerp[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tf74f1795-025f-4836-ae2d-b2eeda558a12\tPset_MaterialWoodBasedBeam.InPlane.ReferenceDepth[Type]\tLENGTH\t\t412\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4f6c58a2-27d1-42b9-baa6-af9dc612e407\tPset_MaterialWoodBasedBeam.InPlane.ShearModulus[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t5d835aff-90c0-4756-9acc-c8ac97ec2147\tPset_MaterialWoodBasedBeam.InPlane.ShearModulusMin[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t998d9129-8f9b-4839-98af-3a728f790ca3\tPset_MaterialWoodBasedBeam.InPlane.ShearStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t2741ea9b-9164-494f-9e6b-49f28926d7f1\tPset_MaterialWoodBasedBeam.InPlane.TensileStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t3c7d772a-adfb-4646-8446-0f24f8d1f5ce\tPset_MaterialWoodBasedBeam.InPlane.TensileStrengthPerp[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t7b96755c-f54c-40b1-8c95-07e945a016e3\tPset_MaterialWoodBasedBeam.InPlane.TorsionalStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tf76826c6-7584-4fb4-aeb0-3b1156647995\tPset_MaterialWoodBasedBeam.InPlane.YoungModulus[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tc6de757a-4da3-470f-9cfe-ff1422f27a0c\tPset_MaterialWoodBasedBeam.InPlane.YoungModulusMin[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tce858e02-9c99-44ec-967f-fe598877038d\tPset_MaterialWoodBasedBeam.InPlane.YoungModulusPerp[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t256ba3a3-64a8-42a1-a007-3e340befa989\tPset_MaterialWoodBasedBeam.InPlane.YoungModulusPerpMin[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t443e3154-37f3-43b0-9941-54d6d8835d5f\tPset_MaterialWoodBasedBeam.InPlaneNegative.BendingStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t981030bf-0674-492d-aef0-c92a7ae095c1\tPset_MaterialWoodBasedBeam.InPlaneNegative.CompStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tf8574867-c001-4ad3-a5c8-d61a9d67a027\tPset_MaterialWoodBasedBeam.InPlaneNegative.CompStrengthPerp[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tf04b7657-82d6-405a-b78a-5f3ff7bf16e8\tPset_MaterialWoodBasedBeam.InPlaneNegative.InstabilityFactors[Type]\tMULTILINETEXT\t\t412\t1\tPropertyTableValue\t1\nPARAM\ta01a037e-22b3-4e0f-9c28-866774cdf5a7\tPset_MaterialWoodBasedBeam.InPlaneNegative.RaisedCompStrengthPerp[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tdaf5a53c-c7b1-405f-b7b7-b39b0480fbe3\tPset_MaterialWoodBasedBeam.InPlaneNegative.ReferenceDepth[Type]\tLENGTH\t\t412\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tac062876-e48f-4bd9-bab2-7394629a3bd9\tPset_MaterialWoodBasedBeam.InPlaneNegative.ShearModulus[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tfc01a841-fd15-4856-97d9-6a13ab81d290\tPset_MaterialWoodBasedBeam.InPlaneNegative.ShearModulusMin[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t9a1e2586-9e6c-432b-9920-38a89c4accbb\tPset_MaterialWoodBasedBeam.InPlaneNegative.ShearStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tedf131af-2ae9-4f76-9cba-023ec9a93c58\tPset_MaterialWoodBasedBeam.InPlaneNegative.TensileStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tc3a67b7f-d5b9-45ad-88c1-1d267f6aff99\tPset_MaterialWoodBasedBeam.InPlaneNegative.TensileStrengthPerp[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t991bf6e3-4d04-4c62-bdfa-3221c162df02\tPset_MaterialWoodBasedBeam.InPlaneNegative.TorsionalStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tdcad751e-803e-40ac-8859-5c6758112a5e\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulus[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tedd5dfd9-fdfc-4176-8466-1a3b98f39cb9\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusMin[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\te1eb4ecc-fb4d-4b6e-987c-2bc3a45a220d\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusPerp[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t6c8e1d76-1dde-4efc-96b0-88fd9c434bef\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusPerpMin[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t7dfa6fe9-0659-4368-8b85-0d4bc04efca5\tPset_MaterialWoodBasedBeam.OutOfPlane.BendingStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t027ab243-df9a-49bf-89dd-3e1e9434a65a\tPset_MaterialWoodBasedBeam.OutOfPlane.CompStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t05bd93fc-2a9c-46b0-859d-f4c10ce00893\tPset_MaterialWoodBasedBeam.OutOfPlane.CompStrengthPerp[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t09446b10-633b-4422-9773-ebefe86c0436\tPset_MaterialWoodBasedBeam.OutOfPlane.InstabilityFactors[Type]\tMULTILINETEXT\t\t412\t1\tPropertyTableValue\t1\nPARAM\t29768c6b-1175-47e4-846e-d82c3ca5c1af\tPset_MaterialWoodBasedBeam.OutOfPlane.RaisedCompStrengthPerp[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tb8dd4401-b57a-4257-802d-6f15dbd98500\tPset_MaterialWoodBasedBeam.OutOfPlane.ReferenceDepth[Type]\tLENGTH\t\t412\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6882698f-9934-4d51-b3f5-4c0db0380935\tPset_MaterialWoodBasedBeam.OutOfPlane.ShearModulus[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t6fc84682-6ee4-4b08-9f51-0a2b338e5f2e\tPset_MaterialWoodBasedBeam.OutOfPlane.ShearModulusMin[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\td2ec3d2e-91e1-4d2e-a717-d515523b783a\tPset_MaterialWoodBasedBeam.OutOfPlane.ShearStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t77a1d82a-a779-4dd2-a4b5-7daad4d836a3\tPset_MaterialWoodBasedBeam.OutOfPlane.TensileStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\ta6577f61-2949-4209-9b93-db6bbb17f4c4\tPset_MaterialWoodBasedBeam.OutOfPlane.TensileStrengthPerp[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tdee9b476-b6fa-4a54-ba3f-cee9e3545317\tPset_MaterialWoodBasedBeam.OutOfPlane.TorsionalStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\td7c59ff8-5f57-4645-8148-3cfe38bc8729\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulus[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t8d7ca738-8ab1-4881-abdd-17b3d23362f5\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusMin[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\te6898dc6-7bfa-404e-b95a-9e0894f158c8\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusPerp[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t0b82d1db-dd65-4b15-a7e9-cfe2546886a0\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusPerpMin[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t413\tPset_MaterialWoodBasedPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t767ee4ea-28b3-4a7f-b876-e24016d562dd\tPset_MaterialWoodBasedPanel.ApplicableStructuralDesignMethod[Type]\tTEXT\t\t413\t1\tIfcLabel\t1\nPARAM\t8c3c24c0-d627-46a1-95ce-7a859c597c3d\tPset_MaterialWoodBasedPanel.InPlane.BearingStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t1f416343-dc29-4a9c-935e-5ca7dd499f37\tPset_MaterialWoodBasedPanel.InPlane.BendingStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t21f0ecc5-0c00-48f6-bd4f-e589e5a24da9\tPset_MaterialWoodBasedPanel.InPlane.CompressiveStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\td5b8d803-6349-4e80-ae6c-271623b6585e\tPset_MaterialWoodBasedPanel.InPlane.RaisedCompressiveStrength[Type]\tNUMBER\t\t413\t1\tIfcPressureMeasure\t1\nPARAM\tee25e03f-01e4-47ea-916c-0d9b6958e8e8\tPset_MaterialWoodBasedPanel.InPlane.ReferenceDepth[Type]\tLENGTH\t\t413\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb2083da4-1df4-423c-bae3-0fa5ef722c4e\tPset_MaterialWoodBasedPanel.InPlane.ShearModulus[Type]\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t9a6be353-80b8-487f-a325-020bb7f12d7b\tPset_MaterialWoodBasedPanel.InPlane.ShearStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t05ae09df-40c6-4d11-8a21-8d6153f8e87e\tPset_MaterialWoodBasedPanel.InPlane.TensileStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t9def94e7-71a0-4d71-8d41-578cac7fdb48\tPset_MaterialWoodBasedPanel.InPlane.YoungModulusBending[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t52ad522c-1ef9-47a7-b942-b3fd3a6a11b2\tPset_MaterialWoodBasedPanel.InPlane.YoungModulusCompression[Type]\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t9b686f75-66eb-448b-a819-50b147c7a067\tPset_MaterialWoodBasedPanel.InPlane.YoungModulusTension[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t855479dc-d45d-410a-ae76-592c5d652e37\tPset_MaterialWoodBasedPanel.OutOfPlane.BearingStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t9204a56e-1fb8-4332-a91a-87f1eb753c15\tPset_MaterialWoodBasedPanel.OutOfPlane.BendingStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\teb0d1665-51ca-469d-8be1-ff06b2c7b055\tPset_MaterialWoodBasedPanel.OutOfPlane.CompressiveStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t42c0bd5b-efdb-4876-921e-3e41e99b0ac9\tPset_MaterialWoodBasedPanel.OutOfPlane.RaisedCompressiveStrength[Type]\tNUMBER\t\t413\t1\tIfcPressureMeasure\t1\nPARAM\tdb22064e-ed65-4635-9f5d-78cfbd98a514\tPset_MaterialWoodBasedPanel.OutOfPlane.ReferenceDepth[Type]\tLENGTH\t\t413\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8665ad99-1806-4b68-8734-26f08ca7f105\tPset_MaterialWoodBasedPanel.OutOfPlane.ShearModulus[Type]\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tb1459b78-29e5-45fa-8fcf-9c50b0330bfe\tPset_MaterialWoodBasedPanel.OutOfPlane.ShearStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t2028cc9a-6b2a-4241-adf0-8f4d250137b8\tPset_MaterialWoodBasedPanel.OutOfPlane.TensileStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\tfe2f2bec-54bc-46d0-b589-4c77390bd8f0\tPset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusBending[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t85d69a5a-4425-400b-b40b-dc1e9ec2b510\tPset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusCompression[Type]\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t6f9c1ab1-0dc0-4591-a275-34f2de1e0f53\tPset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusTension[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\td38acbdb-510f-42c6-bd6c-8ab27db2e933\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.BearingStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\teb261607-29c0-4de2-b733-5117178c7cb9\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.BendingStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t129600d1-d2bb-4014-b96e-f6d87e141509\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.CompressiveStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\tff562d4b-1cde-464c-85e0-c4b7538509ac\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.RaisedCompressiveStrength[Type]\tNUMBER\t\t413\t1\tIfcPressureMeasure\t1\nPARAM\tcddb619b-c765-4f67-9540-5cf17ce448c9\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.ReferenceDepth[Type]\tLENGTH\t\t413\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t25bf1b5c-c262-410b-ac61-ab1481ecd392\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.ShearModulus[Type]\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t29200476-d4c3-42e4-a321-27de9b91342b\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.ShearStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t7fe1a0f5-667b-40b6-ad44-3a550daf6942\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.TensileStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t7514a3cb-8e9a-46f7-a2a6-db44aaccbedb\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusBending[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t2bdf070c-8d41-4dbb-a122-69eb3daf5172\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusCompression[Type]\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tc89e0881-4453-4b25-85ba-c2ef8eaeeb8e\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusTension[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\n#\nGROUP\t414\tPset_MaterialWoodBasedStructure\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf83ec55e-fbc6-4929-9139-a851817e997e\tPset_MaterialWoodBasedStructure.ApplicableStructuralDesignMethod[Type]\tTEXT\t\t414\t1\tIfcLabel\t1\n#\nGROUP\t415\tPset_MechanicalBeamInPlane\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tffee7146-8722-4fdd-8a1c-8bc9e55c2006\tPset_MechanicalBeamInPlane.BendingStrength[Type]\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\t3841c5ba-8fbe-4c00-801e-db919d0b42bf\tPset_MechanicalBeamInPlane.CompStrength[Type]\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\tf3005a9d-5480-4e5b-9c36-d0f357148dde\tPset_MechanicalBeamInPlane.CompStrengthPerp[Type]\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\t2e5be44b-7264-410d-b7f6-577c6f360194\tPset_MechanicalBeamInPlane.InstabilityFactors[Type]\tMULTILINETEXT\t\t415\t1\tPropertyTableValue\t1\nPARAM\t41efb0d5-af29-4df5-a22e-c5bc963f4ba6\tPset_MechanicalBeamInPlane.RaisedCompStrengthPerp[Type]\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\t62e79f9b-9d78-4068-9fc8-b2253e8f3958\tPset_MechanicalBeamInPlane.ReferenceDepth[Type]\tLENGTH\t\t415\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8eee30d5-f356-4f26-a136-d285487634f9\tPset_MechanicalBeamInPlane.ShearModulus[Type]\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tee173bc2-1b09-4931-984d-4cf3aec96303\tPset_MechanicalBeamInPlane.ShearModulusMin[Type]\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t5fa098c5-4498-44de-9d42-0339351dca99\tPset_MechanicalBeamInPlane.ShearStrength[Type]\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\t1f19feeb-6753-4f1a-8cfb-229bd121b98a\tPset_MechanicalBeamInPlane.TensileStrength[Type]\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\t72527e69-69c9-4579-9786-333b820d8b41\tPset_MechanicalBeamInPlane.TensileStrengthPerp[Type]\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\t6b445801-1682-4a58-b15c-e7f76ffa27c5\tPset_MechanicalBeamInPlane.TorsionalStrength[Type]\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\tf8128b96-5005-4380-b399-4c1ce7775878\tPset_MechanicalBeamInPlane.YoungModulus[Type]\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t12b56d3e-393d-4f17-a244-d954823f50c4\tPset_MechanicalBeamInPlane.YoungModulusMin[Type]\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tf649060b-6b1d-4c55-b1b5-55c09793c527\tPset_MechanicalBeamInPlane.YoungModulusPerp[Type]\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t514b5720-1fc2-4458-956d-fd7afd7589cb\tPset_MechanicalBeamInPlane.YoungModulusPerpMin[Type]\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t416\tPset_MechanicalBeamInPlaneNegative\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfe0474d2-0b44-467e-ae52-2437fecf2c52\tPset_MechanicalBeamInPlaneNegative.BendingStrength[Type]\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\t3c832e9d-bfc2-497a-966a-b42131558ae2\tPset_MechanicalBeamInPlaneNegative.CompStrength[Type]\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\t2b1d8514-5145-42da-ba9c-8912e1f4ae9f\tPset_MechanicalBeamInPlaneNegative.CompStrengthPerp[Type]\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\t66ded31c-fd23-47cd-81b6-6270d6315fac\tPset_MechanicalBeamInPlaneNegative.InstabilityFactors[Type]\tMULTILINETEXT\t\t416\t1\tPropertyTableValue\t1\nPARAM\td51ab83f-dff8-4b2c-9fd1-591289552215\tPset_MechanicalBeamInPlaneNegative.RaisedCompStrengthPerp[Type]\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\tcd0672eb-bfb8-4aa1-9f83-1abfe633268a\tPset_MechanicalBeamInPlaneNegative.ReferenceDepth[Type]\tLENGTH\t\t416\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t674e42b0-a51d-48a1-8b5d-4a28fd28559f\tPset_MechanicalBeamInPlaneNegative.ShearModulus[Type]\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tf700837f-c84c-475b-bbfa-ba2b252bb22c\tPset_MechanicalBeamInPlaneNegative.ShearModulusMin[Type]\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t3358251c-1ad8-4990-8902-360c53b6fecf\tPset_MechanicalBeamInPlaneNegative.ShearStrength[Type]\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\tc5f1ace7-0dd0-4f6a-b365-5d06c2fa54e2\tPset_MechanicalBeamInPlaneNegative.TensileStrength[Type]\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\t26e3e18c-63a1-4e57-8e11-caef7c5d7b94\tPset_MechanicalBeamInPlaneNegative.TensileStrengthPerp[Type]\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\t045d4e73-fb9c-40c7-b5d7-86b79019903a\tPset_MechanicalBeamInPlaneNegative.TorsionalStrength[Type]\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\t354b60b5-86a9-4e7f-b141-589e6776b586\tPset_MechanicalBeamInPlaneNegative.YoungModulus[Type]\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t0e4d4f27-4270-442a-83bc-557807943042\tPset_MechanicalBeamInPlaneNegative.YoungModulusMin[Type]\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t6093096f-1129-44ad-be99-df55c0057e44\tPset_MechanicalBeamInPlaneNegative.YoungModulusPerp[Type]\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t8cafbde1-34a6-4308-9aee-64423d3f2342\tPset_MechanicalBeamInPlaneNegative.YoungModulusPerpMin[Type]\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t417\tPset_MechanicalBeamOutOfPlane\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t92621f2e-4f05-4b2d-a0f1-87741b4d778f\tPset_MechanicalBeamOutOfPlane.BendingStrength[Type]\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\tdbadeaae-b567-40ab-830f-dfef4e1b7add\tPset_MechanicalBeamOutOfPlane.CompStrength[Type]\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\tda128f05-f813-4e4e-b8a0-af93aa39eb23\tPset_MechanicalBeamOutOfPlane.CompStrengthPerp[Type]\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\t1987203e-e86f-40a2-aa65-16ba7461e150\tPset_MechanicalBeamOutOfPlane.InstabilityFactors[Type]\tMULTILINETEXT\t\t417\t1\tPropertyTableValue\t1\nPARAM\t1f8309ec-f2d5-4ab2-b0d9-86d315066805\tPset_MechanicalBeamOutOfPlane.RaisedCompStrengthPerp[Type]\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\t14f0ca57-dd56-4a6c-8c3d-22d27478e942\tPset_MechanicalBeamOutOfPlane.ReferenceDepth[Type]\tLENGTH\t\t417\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf25d418e-5c21-44f7-8e91-7d84dd6a7b80\tPset_MechanicalBeamOutOfPlane.ShearModulus[Type]\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tf1cfb8b5-89ab-4aab-838c-5067e7476fbb\tPset_MechanicalBeamOutOfPlane.ShearModulusMin[Type]\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t0d8267d8-514c-43e6-89bd-77c12c517a21\tPset_MechanicalBeamOutOfPlane.ShearStrength[Type]\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\ta858588f-1f25-42c6-80b6-3ac486398c4f\tPset_MechanicalBeamOutOfPlane.TensileStrength[Type]\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\t7210e9a5-328a-4bd5-b5e4-e64ebdd34934\tPset_MechanicalBeamOutOfPlane.TensileStrengthPerp[Type]\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\tb7555208-9df6-4a02-b0c2-283eb3005cc4\tPset_MechanicalBeamOutOfPlane.TorsionalStrength[Type]\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\t85dd3612-dbb7-4b8a-902a-c89f80d0ecdc\tPset_MechanicalBeamOutOfPlane.YoungModulus[Type]\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t4ca40685-2850-4e53-a8c7-44b2a05d431d\tPset_MechanicalBeamOutOfPlane.YoungModulusMin[Type]\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t9e287192-be63-4751-90f9-2246dd6531fa\tPset_MechanicalBeamOutOfPlane.YoungModulusPerp[Type]\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t62a0e959-e322-4e15-b333-92520bb19599\tPset_MechanicalBeamOutOfPlane.YoungModulusPerpMin[Type]\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t418\tPset_MechanicalFastenerAnchorBolt\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2a923279-bb1b-43b8-9d11-88748abb36c9\tPset_MechanicalFastenerAnchorBolt.AnchorBoltDiameter[Type]\tLENGTH\t\t418\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta2ba0c4e-138b-450f-92c6-079f0f2b89f1\tPset_MechanicalFastenerAnchorBolt.AnchorBoltLength[Type]\tLENGTH\t\t418\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc04f71f5-b250-41e0-8530-406b44293d92\tPset_MechanicalFastenerAnchorBolt.AnchorBoltProtrusionLength[Type]\tLENGTH\t\t418\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tce03a176-0d7f-48c9-a1b8-239b6f007404\tPset_MechanicalFastenerAnchorBolt.AnchorBoltThreadLength[Type]\tLENGTH\t\t418\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t419\tPset_MechanicalFastenerBolt\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdc52519a-370c-4020-8d49-5c0741c7f051\tPset_MechanicalFastenerBolt.HeadShape[Type]\tTEXT\t\t419\t1\tIfcLabel\t1\nPARAM\t40c9aeba-c32f-4a4f-843f-42eb32644af5\tPset_MechanicalFastenerBolt.KeyShape[Type]\tTEXT\t\t419\t1\tIfcLabel\t1\nPARAM\t5c786117-c1fc-45ff-a094-7d8eb5ad90b5\tPset_MechanicalFastenerBolt.NutsCount[Type]\tINTEGER\t\t419\t1\tIfcCountMeasure\t1\nPARAM\tb058edb0-4ea9-4166-beea-f9ebe7c0d030\tPset_MechanicalFastenerBolt.NutShape[Type]\tTEXT\t\t419\t1\tIfcLabel\t1\nPARAM\t4708e692-811f-4642-85ab-5ab42e56092f\tPset_MechanicalFastenerBolt.ThreadDiameter[Type]\tLENGTH\t\t419\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td779ba84-5cf4-46dd-a1a6-9d00548d082e\tPset_MechanicalFastenerBolt.ThreadLength[Type]\tLENGTH\t\t419\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t80ca8304-ca85-4891-a364-817fdc8cf136\tPset_MechanicalFastenerBolt.WashersCount[Type]\tINTEGER\t\t419\t1\tIfcCountMeasure\t1\nPARAM\t11fd86b2-39a0-4a42-b112-09b476c503da\tPset_MechanicalFastenerBolt.WasherShape[Type]\tTEXT\t\t419\t1\tIfcLabel\t1\n#\nGROUP\t420\tPset_MechanicalFastenerCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t487c16d8-966d-498f-95fc-8e087ea30eb1\tPset_MechanicalFastenerCommon.NominalDiameter[Type]\tLENGTH\t\t420\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcc95b328-338e-4d40-aeb6-4db5044ea647\tPset_MechanicalFastenerCommon.NominalLength[Type]\tLENGTH\t\t420\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t421\tPset_MechanicalFastenerOCSFitting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te16ca719-11dd-4975-a2ee-021f17bc032a\tPset_MechanicalFastenerOCSFitting.ManufacturingTechnology[Type]\tTEXT\t\t421\t1\tIfcLabel\t1\nPARAM\t3dfb7fdb-d37b-4cd0-bd77-9b460bf30926\tPset_MechanicalFastenerOCSFitting.OCSFasteningType[Type]\tTEXT\t\t421\t1\tPEnum_OCSFasteningType\t1\n#\nGROUP\t422\tPset_MechanicalFastenerTypeRailFastening\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb6edeb74-bf5a-48a7-b52f-dd39dc2654f5\tPset_MechanicalFastenerTypeRailFastening.IsReducedResistanceFastening[Type]\tYESNO\t\t422\t1\tIfcBoolean\t1\nPARAM\t020301f1-3fff-451c-a80e-6d351e02074f\tPset_MechanicalFastenerTypeRailFastening.TechnicalStandard[Type]\tMULTILINETEXT\t\t422\t1\tIfcExternalReference\t1\nPARAM\t17ba4cbe-21f1-4112-b0ea-6dce5641f24e\tPset_MechanicalFastenerTypeRailFastening.TrackFasteningElasticityType[Type]\tTEXT\t\t422\t1\tPEnum_TrackFasteningElasticityType\t1\n#\nGROUP\t423\tPset_MechanicalFastenerTypeRailJoint\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t506c80ff-594c-4abb-bdc2-e835bb826e1e\tPset_MechanicalFastenerTypeRailJoint.AssemblyPlace[Type]\tTEXT\t\t423\t1\tPEnum_AssemblyPlace\t1\nPARAM\t281d083a-2dd8-4eaa-80f8-b9d00703f4a5\tPset_MechanicalFastenerTypeRailJoint.IsCWRJoint[Type]\tYESNO\t\t423\t1\tIfcBoolean\t1\nPARAM\t85ad84fc-9963-4571-a68b-db0e1c8d3538\tPset_MechanicalFastenerTypeRailJoint.IsJointControlEquipment[Type]\tYESNO\t\t423\t1\tIfcBoolean\t1\nPARAM\t1462172b-e708-4dab-b551-854f39a35f4d\tPset_MechanicalFastenerTypeRailJoint.IsJointInsulated[Type]\tYESNO\t\t423\t1\tIfcBoolean\t1\nPARAM\t2bb0c523-62a0-4cd8-84d2-c91e2de49cb5\tPset_MechanicalFastenerTypeRailJoint.IsLiftingBracketConnection[Type]\tYESNO\t\t423\t1\tIfcBoolean\t1\nPARAM\tdb0b049b-da75-4ba9-9331-a8c8b39816b0\tPset_MechanicalFastenerTypeRailJoint.NumberOfScrews[Type]\tINTEGER\t\t423\t1\tIfcCountMeasure\t1\nPARAM\tf203fb31-913a-431b-9fb8-e1d2fa88584f\tPset_MechanicalFastenerTypeRailJoint.RailGap[Type]\tLENGTH\t\t423\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td62f249a-0156-4f95-b2cd-cb2b4353223a\tPset_MechanicalFastenerTypeRailJoint.SleeperArrangement[Type]\tTEXT\t\t423\t1\tPEnum_SleeperArrangement\t1\n#\nGROUP\t424\tPset_MechanicalPanelInPlane\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc34fd351-0e04-411c-90c8-9e24f1f523bc\tPset_MechanicalPanelInPlane.BearingStrength[Type]\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\nPARAM\ta4e59c6a-3396-464e-819e-2dec3d9377c9\tPset_MechanicalPanelInPlane.BendingStrength[Type]\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\nPARAM\t9ec4dacd-0752-4534-a8aa-0670e79865d4\tPset_MechanicalPanelInPlane.CompressiveStrength[Type]\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\nPARAM\t36c6eea4-5074-4093-a973-bb87ccd652fa\tPset_MechanicalPanelInPlane.RaisedCompressiveStrength[Type]\tNUMBER\t\t424\t1\tIfcPressureMeasure\t1\nPARAM\tb321c4ca-85a4-42ce-8534-817f16c3e78e\tPset_MechanicalPanelInPlane.ReferenceDepth[Type]\tLENGTH\t\t424\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td29747cb-f0f8-4cd7-af70-efe497d5d197\tPset_MechanicalPanelInPlane.ShearModulus[Type]\tNUMBER\t\t424\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t686925c0-8f10-4b1c-8d30-9e4d3a0d3926\tPset_MechanicalPanelInPlane.ShearStrength[Type]\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\nPARAM\t7bb9fbf2-cf8b-4ba2-9078-8be9adb964b6\tPset_MechanicalPanelInPlane.TensileStrength[Type]\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\nPARAM\t1623cc25-4f24-4ee6-b41b-7f95061d224d\tPset_MechanicalPanelInPlane.YoungModulusBending[Type]\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\nPARAM\tfd130499-9717-4b1c-aa78-02cfc4255d4d\tPset_MechanicalPanelInPlane.YoungModulusCompression[Type]\tNUMBER\t\t424\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t9a67155b-4806-4a67-bc0d-44b4becb16b6\tPset_MechanicalPanelInPlane.YoungModulusTension[Type]\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\n#\nGROUP\t425\tPset_MechanicalPanelOutOfPlane\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfc5ecb1f-9614-40c9-b5dc-442a400ff036\tPset_MechanicalPanelOutOfPlane.BearingStrength[Type]\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\nPARAM\t2312b890-ede6-4adf-8dac-d9d1b8f2bc88\tPset_MechanicalPanelOutOfPlane.BendingStrength[Type]\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\nPARAM\t41fc91bb-41da-4f3c-b46f-17b202d9315f\tPset_MechanicalPanelOutOfPlane.CompressiveStrength[Type]\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\nPARAM\tb6ca2f89-3879-410c-b7e4-eb9dbef4f1a3\tPset_MechanicalPanelOutOfPlane.RaisedCompressiveStrength[Type]\tNUMBER\t\t425\t1\tIfcPressureMeasure\t1\nPARAM\t55a17a75-9819-4159-8fa0-e8fc699c618a\tPset_MechanicalPanelOutOfPlane.ReferenceDepth[Type]\tLENGTH\t\t425\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8ab94ad9-bb3f-4fdb-8430-4ed7a5c54eb8\tPset_MechanicalPanelOutOfPlane.ShearModulus[Type]\tNUMBER\t\t425\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t4d274060-eb09-49a1-b1b7-54f47a9ff9e1\tPset_MechanicalPanelOutOfPlane.ShearStrength[Type]\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\nPARAM\t738befef-6338-40b1-831c-5df42ea64692\tPset_MechanicalPanelOutOfPlane.TensileStrength[Type]\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\nPARAM\t5afe0ab3-7d9d-41a5-8e81-71432d667616\tPset_MechanicalPanelOutOfPlane.YoungModulusBending[Type]\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\nPARAM\t571d843e-a23d-435b-93c3-1ce92e5dfc57\tPset_MechanicalPanelOutOfPlane.YoungModulusCompression[Type]\tNUMBER\t\t425\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t9e2e41d9-c49b-43a2-91dd-49f8856acc49\tPset_MechanicalPanelOutOfPlane.YoungModulusTension[Type]\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\n#\nGROUP\t426\tPset_MechanicalPanelOutOfPlaneNegative\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td706a8eb-4419-4fbb-9a50-1b410682869f\tPset_MechanicalPanelOutOfPlaneNegative.BearingStrength[Type]\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\nPARAM\t065947c9-7320-4c6d-8a33-0c8c4575a7b4\tPset_MechanicalPanelOutOfPlaneNegative.BendingStrength[Type]\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\nPARAM\t77916265-2ec1-4d22-953d-ff760e314334\tPset_MechanicalPanelOutOfPlaneNegative.CompressiveStrength[Type]\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\nPARAM\t26633243-2d68-437d-b3ee-c99938363dc9\tPset_MechanicalPanelOutOfPlaneNegative.RaisedCompressiveStrength[Type]\tNUMBER\t\t426\t1\tIfcPressureMeasure\t1\nPARAM\t88300d1a-5ca5-4f9c-be0e-9a0f03d83ac7\tPset_MechanicalPanelOutOfPlaneNegative.ReferenceDepth[Type]\tLENGTH\t\t426\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t61924c4b-e97e-4595-8cae-abf10ab71c13\tPset_MechanicalPanelOutOfPlaneNegative.ShearModulus[Type]\tNUMBER\t\t426\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tc707810a-d102-4a90-9e68-422846ed3ebc\tPset_MechanicalPanelOutOfPlaneNegative.ShearStrength[Type]\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\nPARAM\t9f9b27af-e316-4d74-b16a-2d356f1c9169\tPset_MechanicalPanelOutOfPlaneNegative.TensileStrength[Type]\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\nPARAM\tc8c2e380-4157-482c-bdd8-d23ca3dace74\tPset_MechanicalPanelOutOfPlaneNegative.YoungModulusBending[Type]\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\nPARAM\t76eadfa4-57f7-4d4a-a500-a8f85a8b8511\tPset_MechanicalPanelOutOfPlaneNegative.YoungModulusCompression[Type]\tNUMBER\t\t426\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t782e8e48-c6f0-4055-8597-bfe14a7037bb\tPset_MechanicalPanelOutOfPlaneNegative.YoungModulusTension[Type]\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\n#\nGROUP\t427\tPset_MedicalDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2e0babf7-864c-4c36-b6d8-1bf691628186\tPset_MedicalDeviceTypeCommon.Reference[Type]\tTEXT\t\t427\t1\tIfcIdentifier\t1\nPARAM\t5df70c6f-567b-4eb6-b22f-2ea848480085\tPset_MedicalDeviceTypeCommon.Status[Type]\tTEXT\t\t427\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t428\tPset_MemberCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6b870c11-085a-4166-83bb-7daad61f8555\tPset_MemberCommon.FireRating[Type]\tTEXT\t\t428\t1\tIfcLabel\t1\nPARAM\ta4b624ea-871b-4cbc-abdc-e76206bc6e34\tPset_MemberCommon.IsExternal[Type]\tYESNO\t\t428\t1\tIfcBoolean\t1\nPARAM\tbec6ebf9-ab87-4cb3-bec3-9775cf06fadd\tPset_MemberCommon.LoadBearing[Type]\tYESNO\t\t428\t1\tIfcBoolean\t1\nPARAM\t9c2089d0-692e-4dbf-976d-40b9ed7abc31\tPset_MemberCommon.Reference[Type]\tTEXT\t\t428\t1\tIfcIdentifier\t1\nPARAM\t48b9660a-922b-4c5e-9b38-05974861236d\tPset_MemberCommon.Roll[Type]\tNUMBER\t\t428\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tea64bbac-75bf-428b-bacc-9d8886afa3d6\tPset_MemberCommon.Slope[Type]\tNUMBER\t\t428\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t9576111d-1751-4241-977a-7edcfab52403\tPset_MemberCommon.Span[Type]\tLENGTH\t\t428\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfc9f29c7-f117-4deb-a967-7eeec169fa7e\tPset_MemberCommon.Status[Type]\tTEXT\t\t428\t1\tPEnum_ElementStatus\t1\nPARAM\t908a250c-ebe3-40b9-bfe4-f8f26a581bd8\tPset_MemberCommon.ThermalTransmittance[Type]\tNUMBER\t\t428\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t429\tPset_MemberTypeAnchoringBar\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t38277198-bbd9-4417-95f2-f862b31050b1\tPset_MemberTypeAnchoringBar.HasLightningRod[Type]\tYESNO\t\t429\t1\tIfcBoolean\t1\nPARAM\t4597fada-a89d-4af6-946a-32c5ca8006d2\tPset_MemberTypeAnchoringBar.MechanicalStressType[Type]\tTEXT\t\t429\t1\tPEnum_MechanicalStressType\t1\n#\nGROUP\t430\tPset_MemberTypeCatenaryStay\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t188a7183-32c8-49b2-9834-3add52b6a6b2\tPset_MemberTypeCatenaryStay.AssemblyInstruction[Type]\tMULTILINETEXT\t\t430\t1\tIfcExternalReference\t1\nPARAM\t6d511c6a-fb08-4412-ad44-9c2f07ae7ac6\tPset_MemberTypeCatenaryStay.CatenaryStayType[Type]\tTEXT\t\t430\t1\tPEnum_CatenaryStayType\t1\nPARAM\t11251d77-6310-4295-a023-1d21259b7918\tPset_MemberTypeCatenaryStay.NominalHeight[Type]\tLENGTH\t\t430\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tbf9007a8-6321-4e18-a49e-6703a3169072\tPset_MemberTypeCatenaryStay.NominalLength[Type]\tLENGTH\t\t430\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t431\tPset_MemberTypeOCSRigidSupport\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0375c7f1-868f-4d8e-ab43-37ff82b114b7\tPset_MemberTypeOCSRigidSupport.AssemblyInstruction[Type]\tMULTILINETEXT\t\t431\t1\tIfcExternalReference\t1\nPARAM\t9ed23adf-b352-4d6c-8265-95cec91714f6\tPset_MemberTypeOCSRigidSupport.ContactWireStagger[Type]\tLENGTH\t\t431\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t432\tPset_MemberTypePost\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0e599315-d8ca-4784-8f7e-fd7efe5c1a19\tPset_MemberTypePost.BendingStrength[Type]\tNUMBER\t\t432\t1\tIfcPressureMeasure\t1\nPARAM\t7ae4daab-6c81-4f2d-abf6-9b1df8ef6673\tPset_MemberTypePost.ConicityRatio[Type]\tNUMBER\t\t432\t1\tIfcRatioMeasure\t1\nPARAM\t21c6130a-3206-4e68-92c7-58d58359efee\tPset_MemberTypePost.LoadBearingCapacity[Type]\tNUMBER\t\t432\t1\tIfcPlanarForceMeasure\t1\nPARAM\td5bfd80d-c761-4b82-af37-eeb30742b624\tPset_MemberTypePost.NominalHeight[Type]\tLENGTH\t\t432\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tac54784b-e3c4-41cc-be50-327c43076122\tPset_MemberTypePost.TorsionalStrength[Type]\tNUMBER\t\t432\t1\tIfcPressureMeasure\t1\nPARAM\tdd50ac30-f449-4a73-aa73-4ce4c9addf29\tPset_MemberTypePost.WindLoadRating[Type]\tTEXT\t\t432\t1\tIfcLabel\t1\n#\nGROUP\t433\tPset_MemberTypeTieBar\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t91c53efc-cdd3-4f43-93ae-fda349163c4d\tPset_MemberTypeTieBar.IsTemporaryInstallation[Type]\tYESNO\t\t433\t1\tIfcBoolean\t1\n#\nGROUP\t434\tPset_MobileTelecommunicationsApplianceTypeAccessPoint\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8363d0a1-aa02-4f32-a264-41a20ea10472\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.BandWidth[Type]\tNUMBER\t\t434\t1\tIfcFrequencyMeasure\t1\nPARAM\tfd7d11e6-66ff-4aca-a332-d96c92b11a0b\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.DataEncryptionType[Type]\tTEXT\t\t434\t1\tIfcLabel\t1\nPARAM\tda0af65f-59d7-49f1-aea0-e796a404c065\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.DataExchangeRate[Type]\tINTEGER\t\t434\t1\tIfcIntegerCountRateMeasure\t1\nPARAM\t84267f8a-428c-4b17-b43b-63ca5c4693ef\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.NumberOfAntennas[Type]\tINTEGER\t\t434\t1\tIfcCountMeasure\t1\nPARAM\tbc7de6af-f2b8-4b73-8e45-cf1b1b20c5dd\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t434\t1\tPropertyTableValue\t1\nPARAM\t9964324a-e6f7-4de9-b45e-30e9b774337d\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.UserCapacity[Type]\tINTEGER\t\t434\t1\tIfcInteger\t1\n#\nGROUP\t435\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbfe45564-ac3a-49f6-8309-144a89535ede\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit.MaximumNumberOfRRUs[Type]\tINTEGER\t\t435\t1\tIfcInteger\t1\nPARAM\t7b0793c1-d5a7-468c-84e6-c8a54674f0f7\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit.NumberOfCarriers[Type]\tINTEGER\t\t435\t1\tIfcCountMeasure\t1\nPARAM\t3935b05d-52f7-4096-b3ff-213485f86bc3\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit.NumberOfEmergencyTransceivers[Type]\tINTEGER\t\t435\t1\tIfcCountMeasure\t1\nPARAM\t8ec51ed0-007d-4bb4-92ee-ecd530c5e88c\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t435\t1\tPropertyTableValue\t1\n#\nGROUP\t436\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taf930fb2-a08e-4ecb-8e15-91b7fd04109d\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.DownlinkRadioBand[Type]\tMULTILINETEXT\t\t436\t1\tPropertyBoundedValue\t1\nPARAM\t8add2ef7-246e-4f51-8cc7-c1484d92ce2b\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.ExchangeCapacity[Type]\tINTEGER\t\t436\t1\tIfcInteger\t1\nPARAM\tad5de0b0-7c6a-413e-8e32-ddc8e8289411\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfAntennas[Type]\tINTEGER\t\t436\t1\tIfcCountMeasure\t1\nPARAM\tbcaea370-0e02-4bc1-b3d5-642498452d0a\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfCarriers[Type]\tINTEGER\t\t436\t1\tIfcCountMeasure\t1\nPARAM\tb23bce57-67b7-435b-9a14-0075b9bd94ca\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfEmergencyTransceivers[Type]\tINTEGER\t\t436\t1\tIfcCountMeasure\t1\nPARAM\t50703cdf-debf-4664-b60d-5a192c0990db\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t436\t1\tPropertyTableValue\t1\nPARAM\t50e1281f-6975-47f3-ae44-870a6b1299a8\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfTransceiversPerAntenna[Type]\tMULTILINETEXT\t\t436\t1\tPropertyTableValue\t1\nPARAM\t9f051538-5d5f-4006-9ce2-183791e4d297\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.RadiatedOutputPowerPerAntenna[Type]\tMULTILINETEXT\t\t436\t1\tPropertyTableValue\t1\nPARAM\t497f9aa6-dcd0-41d0-87a6-02953b21ef82\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.UplinkRadioBand[Type]\tMULTILINETEXT\t\t436\t1\tPropertyBoundedValue\t1\n#\nGROUP\t437\tPset_MobileTelecommunicationsApplianceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9be548ae-ecdd-40d7-b438-8bc06cb6d8cf\tPset_MobileTelecommunicationsApplianceTypeCommon.Reference[Type]\tTEXT\t\t437\t1\tIfcIdentifier\t1\nPARAM\tad3342e1-4063-4c2c-9077-8afb72c8bcc3\tPset_MobileTelecommunicationsApplianceTypeCommon.Status[Type]\tTEXT\t\t437\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t438\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t509ca9a5-4080-4444-be88-603ad6e65641\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.DownlinkRadioBand[Type]\tMULTILINETEXT\t\t438\t1\tPropertyBoundedValue\t1\nPARAM\t8fe734ad-d7aa-4ce9-bfc9-46985b4a3de0\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.NumberOfAntennas[Type]\tINTEGER\t\t438\t1\tIfcCountMeasure\t1\nPARAM\t5c8ed386-0cbb-4409-9299-f9062d963875\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.NumberOfCarriers[Type]\tINTEGER\t\t438\t1\tIfcCountMeasure\t1\nPARAM\tee1c4d60-c60d-4a0a-a52c-43ddb48022cc\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t438\t1\tPropertyTableValue\t1\nPARAM\ta79e75d2-614f-43fc-878e-7b1c626cebb9\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.RadiatedOutputPowerPerAntenna[Type]\tMULTILINETEXT\t\t438\t1\tPropertyTableValue\t1\nPARAM\t91c6e42f-4340-46ec-a4b0-0714d532ce08\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.UplinkRadioBand[Type]\tMULTILINETEXT\t\t438\t1\tPropertyBoundedValue\t1\n#\nGROUP\t439\tPset_MobileTelecommunicationsApplianceTypeMasterUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7188d968-02a9-4f1c-8a3a-0eaf5d84dc3c\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.MasterUnitType[Type]\tTEXT\t\t439\t1\tPEnum_MasterUnitType\t1\nPARAM\t3f059f7b-e488-450c-baed-04a44fbc9b65\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.MaximumNumberOfConnectedRUs[Type]\tINTEGER\t\t439\t1\tIfcInteger\t1\nPARAM\te4e6cb75-1da4-4131-a43a-d3b3abf0cd19\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t439\t1\tPropertyTableValue\t1\nPARAM\t542aeeea-65af-463d-ac85-ab7fe6f81eb6\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmissionType[Type]\tTEXT\t\t439\t1\tPEnum_TransmissionType\t1\nPARAM\t0c262b1f-f5a1-4f13-a875-d729e78915b0\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmittedBandwidth[Type]\tNUMBER\t\t439\t1\tIfcFrequencyMeasure\t1\nPARAM\tc326cdfa-ec77-4c1e-91a7-aeb9bddeca66\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmittedFrequency[Type]\tNUMBER\t\t439\t1\tIfcFrequencyMeasure\t1\nPARAM\ta3efc140-cf8d-47c4-be30-bc852d395696\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmittedSignal[Type]\tTEXT\t\t439\t1\tPEnum_TransmittedSignal\t1\n#\nGROUP\t440\tPset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t90780450-496c-46ef-9a5c-b45f6852ce5b\tPset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter.MaximumNumberOfManagedBSCs[Type]\tINTEGER\t\t440\t1\tIfcInteger\t1\nPARAM\t2de57c2f-03b3-43ef-b326-ec99268b9eb6\tPset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t440\t1\tPropertyTableValue\t1\nPARAM\t3710dffe-df6f-4527-901d-48445a4ff516\tPset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter.UserCapacity[Type]\tINTEGER\t\t440\t1\tIfcInteger\t1\n#\nGROUP\t441\tPset_MobileTelecommunicationsApplianceTypeMSCServer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4530d634-1531-4457-8508-217dca749d53\tPset_MobileTelecommunicationsApplianceTypeMSCServer.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t441\t1\tPropertyTableValue\t1\nPARAM\ta6220cf2-3baf-4b27-95c1-bb5ea3e7734c\tPset_MobileTelecommunicationsApplianceTypeMSCServer.UserCapacity[Type]\tINTEGER\t\t441\t1\tIfcInteger\t1\n#\nGROUP\t442\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t44edf49f-bc5c-4eb9-8987-6786afa8bedf\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.AntennaType[Type]\tTEXT\t\t442\t1\tIfcLabel\t1\nPARAM\tb8b075ed-5e5a-40ab-a933-d178ba63cc07\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.DownlinkRadioBand[Type]\tMULTILINETEXT\t\t442\t1\tPropertyBoundedValue\t1\nPARAM\t66b2eb71-da18-4fcc-9a54-b3fcd79d2e41\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.NumberOfCarriers[Type]\tINTEGER\t\t442\t1\tIfcCountMeasure\t1\nPARAM\t1f0696b7-e450-4b44-84b5-4baca4f7f7a8\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t442\t1\tPropertyTableValue\t1\nPARAM\tf948e3aa-63a8-4fdc-a40c-cf57efe553c0\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.NumberOfTransceiversPerAntenna[Type]\tMULTILINETEXT\t\t442\t1\tPropertyTableValue\t1\nPARAM\t12c5ef90-f0a9-4796-8f08-af98866d87d6\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.RadiatedOutputPowerPerAntenna[Type]\tMULTILINETEXT\t\t442\t1\tPropertyTableValue\t1\nPARAM\t659ba1f0-e310-45d1-8cd5-1bb3fa1cc431\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.RRUConnectionType[Type]\tTEXT\t\t442\t1\tPEnum_UnitConnectionType\t1\nPARAM\t92a33b9e-d639-4817-ae90-0f728008072c\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.UplinkRadioBand[Type]\tMULTILINETEXT\t\t442\t1\tPropertyBoundedValue\t1\n#\nGROUP\t443\tPset_MobileTelecommunicationsApplianceTypeRemoteUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te5a24257-df50-4ecc-9e9c-ad8c9811b7f6\tPset_MobileTelecommunicationsApplianceTypeRemoteUnit.NumberOfAntennas[Type]\tINTEGER\t\t443\t1\tIfcCountMeasure\t1\nPARAM\tc146c85f-f399-4ef1-bea1-d378ca5d19b9\tPset_MobileTelecommunicationsApplianceTypeRemoteUnit.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t443\t1\tPropertyTableValue\t1\nPARAM\ta4f7142a-5bd3-41b8-b69a-63aac3d94866\tPset_MobileTelecommunicationsApplianceTypeRemoteUnit.RUConnectionType[Type]\tTEXT\t\t443\t1\tPEnum_UnitConnectionType\t1\n#\nGROUP\t444\tPset_MooringDeviceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t421b8caf-5cfc-4a84-9900-077c80255e65\tPset_MooringDeviceCommon.AnchorageType[Type]\tTEXT\t\t444\t1\tPEnum_AnchorageType\t1\nPARAM\t94f0b556-6544-441a-901b-c67d2ea67435\tPset_MooringDeviceCommon.DeviceCapacity[Type]\tNUMBER\t\t444\t1\tIfcForceMeasure\t1\nPARAM\t7f317e27-9c75-442a-8f24-7603c650a571\tPset_MooringDeviceCommon.DeviceType[Type]\tTEXT\t\t444\t1\tPEnum_MooringDeviceType\t1\nPARAM\t4bb26074-6643-4538-beaf-f62b6d1ff7f1\tPset_MooringDeviceCommon.MaximumLineCount[Type]\tINTEGER\t\t444\t1\tIfcCountMeasure\t1\nPARAM\t902de825-aee3-4dda-9d6b-09da0710ef2d\tPset_MooringDeviceCommon.MaximumLineSlope[Type]\tNUMBER\t\t444\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tab7a4556-7b06-4f75-ac87-0de8f6b37d96\tPset_MooringDeviceCommon.MinumumLineSlope[Type]\tNUMBER\t\t444\t1\tIfcPlaneAngleMeasure\t1\n#\nGROUP\t445\tPset_MotorConnectionTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2ae16318-9fdb-4df8-99cc-42af74a5b71e\tPset_MotorConnectionTypeCommon.Reference[Type]\tTEXT\t\t445\t1\tIfcIdentifier\t1\nPARAM\t6ab6f34d-2edf-4d24-a014-24627343c342\tPset_MotorConnectionTypeCommon.Status[Type]\tTEXT\t\t445\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t446\tPset_MultiStateInput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf321b947-310e-4e18-8685-52532a631e40\tPset_MultiStateInput.AlarmValues[Type]\tMULTILINETEXT\t\t446\t1\tPropertyListValue\t1\nPARAM\t9cdf6e22-2b9e-4033-935e-3d194655cdd9\tPset_MultiStateInput.EventEnable[Type]\tTEXT\t\t446\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\t95782e0c-da34-4ef6-8014-6943cf603358\tPset_MultiStateInput.NotifyType[Type]\tTEXT\t\t446\t1\tPEnum_BACnetNotifyType\t1\nPARAM\t6a8979e8-a760-456e-9ae4-e5787a14fb7c\tPset_MultiStateInput.NumberOfStates[Type]\tINTEGER\t\t446\t1\tIfcInteger\t1\nPARAM\t44e9929b-d60d-4bb9-9fcc-46861885e721\tPset_MultiStateInput.StateText[Type]\tMULTILINETEXT\t\t446\t1\tPropertyListValue\t1\n#\nGROUP\t447\tPset_MultiStateOutput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8201ec8f-229d-42be-a524-a5b212b87c04\tPset_MultiStateOutput.AlarmValues[Type]\tMULTILINETEXT\t\t447\t1\tPropertyListValue\t1\nPARAM\tbf9ec0b5-e95b-4b3d-b4f3-577dba95a5de\tPset_MultiStateOutput.EventEnable[Type]\tTEXT\t\t447\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\tc18c7c9d-d88c-4942-80e6-7cb56c07b1cb\tPset_MultiStateOutput.NotifyType[Type]\tTEXT\t\t447\t1\tPEnum_BACnetNotifyType\t1\nPARAM\t31afd126-2894-4b44-818f-f2feae471bc8\tPset_MultiStateOutput.NumberOfStates[Type]\tINTEGER\t\t447\t1\tIfcInteger\t1\nPARAM\t7a286f52-1040-4deb-b84c-2efa8756a8d3\tPset_MultiStateOutput.StateText[Type]\tMULTILINETEXT\t\t447\t1\tPropertyListValue\t1\n#\nGROUP\t448\tPset_OnSiteCastKerb\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5973d116-3817-4064-9e67-6000e4e462e0\tPset_OnSiteCastKerb.NominalHeight[Type]\tLENGTH\t\t448\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t12554059-777f-46eb-b13d-30fba5fdc784\tPset_OnSiteCastKerb.NominalWidth[Type]\tLENGTH\t\t448\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t449\tPset_OnSiteTelecomControlUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9b1ed0f0-9bb7-46ed-87d0-f736253ba66b\tPset_OnSiteTelecomControlUnit.ControllerInterfaceType[Type]\tTEXT\t\t449\t1\tPEnum_ControllerInterfaceType\t1\nPARAM\t5af31647-3dc2-4510-897c-37b7c46b5413\tPset_OnSiteTelecomControlUnit.HasEarthquakeAlarm[Type]\tYESNO\t\t449\t1\tIfcBoolean\t1\nPARAM\t09e4ea0c-8e6c-42b5-8d2e-8a5305d5431b\tPset_OnSiteTelecomControlUnit.HasEarthquakeCollection[Type]\tYESNO\t\t449\t1\tIfcBoolean\t1\nPARAM\tac322b0e-f846-45da-9d9d-956867c6705e\tPset_OnSiteTelecomControlUnit.HasForeignObjectCollection[Type]\tYESNO\t\t449\t1\tIfcBoolean\t1\nPARAM\t4eee26a0-8b02-4009-a2de-7e9c0bfe1f04\tPset_OnSiteTelecomControlUnit.HasOutputFunction[Type]\tYESNO\t\t449\t1\tIfcBoolean\t1\nPARAM\t0a8ee353-759e-4eb6-83cf-9cc955c477e1\tPset_OnSiteTelecomControlUnit.HasRainCollection[Type]\tYESNO\t\t449\t1\tIfcBoolean\t1\nPARAM\t123c5070-1f79-445a-bfce-7cc9af4dc2f2\tPset_OnSiteTelecomControlUnit.HasSnowCollection[Type]\tYESNO\t\t449\t1\tIfcBoolean\t1\nPARAM\tbd2feeba-7894-48a1-87dd-77f20a00f38a\tPset_OnSiteTelecomControlUnit.HasWindCollection[Type]\tYESNO\t\t449\t1\tIfcBoolean\t1\n#\nGROUP\t450\tPset_OpeningElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t90c1407e-c3bb-4cc0-aee3-4c690c96099c\tPset_OpeningElementCommon.AcousticRating[Type]\tTEXT\t\t450\t1\tIfcLabel\t1\nPARAM\t8ee14156-35e6-46da-ae64-d2712dbe164b\tPset_OpeningElementCommon.FireExit[Type]\tYESNO\t\t450\t1\tIfcBoolean\t1\nPARAM\t4a77d63b-d476-45ef-ae29-755468c1068f\tPset_OpeningElementCommon.FireRating[Type]\tTEXT\t\t450\t1\tIfcLabel\t1\nPARAM\t6aa48b90-f7f6-48f7-b803-d526590b06e3\tPset_OpeningElementCommon.ParallelJambs[Type]\tNUMBER\t\t450\t1\tIfcBoolean \t1\nPARAM\t6c298ff5-edfe-409f-b293-38c614293fcc\tPset_OpeningElementCommon.ProtectedOpening[Type]\tYESNO\t\t450\t1\tIfcBoolean\t1\nPARAM\t9d2c3539-71dc-434f-b52d-7600b4bd7bfb\tPset_OpeningElementCommon.Purpose[Type]\tTEXT\t\t450\t1\tIfcLabel\t1\nPARAM\t0d29ae77-9f19-4701-a7a1-cce762e3da80\tPset_OpeningElementCommon.Reference[Type]\tTEXT\t\t450\t1\tIfcIdentifier\t1\nPARAM\t0c4f6d9e-9fe3-4096-9e14-450ea05cc34a\tPset_OpeningElementCommon.Status[Type]\tTEXT\t\t450\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t451\tPset_OpticalAdapter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c90666e-4ecd-4689-9f64-4c27417d98ca\tPset_OpticalAdapter.FiberType[Type]\tTEXT\t\t451\t1\tPEnum_FiberType\t1\n#\nGROUP\t452\tPset_OpticalPigtail\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t582dfb5a-354b-4783-b684-128db9e0c578\tPset_OpticalPigtail.ConnectorType[Type]\tTEXT\t\t452\t1\tIfcLabel\t1\nPARAM\t07aa59ba-e150-4468-a28f-80dd504d2500\tPset_OpticalPigtail.FiberType[Type]\tTEXT\t\t452\t1\tPEnum_FiberType\t1\nPARAM\tba88d718-0666-44b8-9b7d-9e1869bb06a8\tPset_OpticalPigtail.JacketColour[Type]\tTEXT\t\t452\t1\tIfcLabel\t1\n#\nGROUP\t453\tPset_OpticalSplitter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta24f96ca-8dc5-4434-b96f-9ae27859d160\tPset_OpticalSplitter.NumberOfBranches[Type]\tINTEGER\t\t453\t1\tIfcCountMeasure\t1\nPARAM\t8ae961f5-16af-48e8-afd3-5f1b243f52f2\tPset_OpticalSplitter.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t453\t1\tPropertyTableValue\t1\nPARAM\t4c41890d-8307-432f-b6a5-49f9da954eaf\tPset_OpticalSplitter.OpticalSplitterType[Type]\tTEXT\t\t453\t1\tPEnum_OpticalSplitterType\t1\n#\nGROUP\t454\tPset_OutletTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1ecd7cc5-27c8-45fa-962c-31badeadfd2e\tPset_OutletTypeCommon.IsPluggableOutlet[Type]\tYESNO\t\t454\t1\tIfcLogical\t1\nPARAM\t4ef4bf5e-24c6-49af-b31b-63ac06035055\tPset_OutletTypeCommon.NumberOfSockets[Type]\tINTEGER\t\t454\t1\tIfcCountMeasure\t1\nPARAM\t23f48668-2c01-4fe9-9959-c4b6fba46f3e\tPset_OutletTypeCommon.Reference[Type]\tTEXT\t\t454\t1\tIfcIdentifier\t1\nPARAM\t8a026609-c3b2-4f9a-a1ae-991e3425de33\tPset_OutletTypeCommon.Status[Type]\tTEXT\t\t454\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t455\tPset_OutsideDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3d78105f-47a3-4a85-83b4-688dd5389536\tPset_OutsideDesignCriteria.BuildingThermalExposure[Type]\tTEXT\t\t455\t1\tPEnum_BuildingThermalExposure\t1\nPARAM\t37a8e8f5-8447-4381-9399-f01002574b7c\tPset_OutsideDesignCriteria.CoolingDesignDay[Type]\tTEXT\t\t455\t1\tIfcDateTime\t1\nPARAM\t279396b1-a504-4bfc-a77c-cca54ff5255b\tPset_OutsideDesignCriteria.CoolingDryBulb[Type]\tNUMBER\t\t455\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tb6c81bad-efb6-4da7-8b97-f8cf64fccc24\tPset_OutsideDesignCriteria.CoolingWetBulb[Type]\tNUMBER\t\t455\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t71aececa-b3b1-47fa-88b8-04a78d3175a9\tPset_OutsideDesignCriteria.HeatingDesignDay[Type]\tTEXT\t\t455\t1\tIfcDateTime\t1\nPARAM\tf3cf636b-30c8-4574-b053-f1ddc3930788\tPset_OutsideDesignCriteria.HeatingDryBulb[Type]\tNUMBER\t\t455\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t2b688990-9a40-4c1c-8eb6-e13da60435b8\tPset_OutsideDesignCriteria.HeatingWetBulb[Type]\tNUMBER\t\t455\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t6e53c72a-8dd8-46fa-926d-8d6285376ac7\tPset_OutsideDesignCriteria.PrevailingWindDirection[Type]\tNUMBER\t\t455\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t81947f73-6438-41d7-a30d-af83c47e86b3\tPset_OutsideDesignCriteria.PrevailingWindVelocity[Type]\tNUMBER\t\t455\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tbfb87014-3eba-4563-91c5-d741dab2a8f0\tPset_OutsideDesignCriteria.WeatherDataDate[Type]\tTEXT\t\t455\t1\tIfcDateTime\t1\nPARAM\ta98482ab-b889-4f34-8621-e7c42785b8c9\tPset_OutsideDesignCriteria.WeatherDataStation[Type]\tTEXT\t\t455\t1\tIfcText\t1\n#\nGROUP\t456\tPset_PackingInstructions\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t88b0774e-e25c-4771-b26d-719897981d66\tPset_PackingInstructions.ContainerMaterial[Type]\tMULTILINETEXT\t\t456\t1\tIfcMaterialDefinition\t1\nPARAM\t2ce81dee-da7d-4f53-8ca4-b772343e9d88\tPset_PackingInstructions.PackingCareType[Type]\tTEXT\t\t456\t1\tPEnum_PackingCareType\t1\nPARAM\t1ae09b26-53a1-4360-90b3-194e32310760\tPset_PackingInstructions.SpecialInstructions[Type]\tTEXT\t\t456\t1\tIfcText\t1\nPARAM\tee5ddac9-f9bc-483a-9e0e-14ff8fed2596\tPset_PackingInstructions.WrappingMaterial[Type]\tMULTILINETEXT\t\t456\t1\tIfcMaterialDefinition\t1\n#\nGROUP\t457\tPset_PatchCordCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t35bcdfd4-42e8-45d3-8afc-50e0716d7fed\tPset_PatchCordCable.JacketColour[Type]\tTEXT\t\t457\t1\tIfcLabel\t1\n#\nGROUP\t458\tPset_PavementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2cfc55f7-c846-40c7-b4ab-f66322de2475\tPset_PavementCommon.NominalLength[Type]\tLENGTH\t\t458\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tabda6484-8f60-4254-888e-d1d2de5c74c8\tPset_PavementCommon.NominalThickness[Type]\tLENGTH\t\t458\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\ta285e369-22e5-49d2-bcce-68a7c022d346\tPset_PavementCommon.NominalThicknessEnd[Type]\tLENGTH\t\t458\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t07cb6384-4a37-4a21-b07f-55da64cbd49d\tPset_PavementCommon.NominalWidth[Type]\tLENGTH\t\t458\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t1e589d54-ac7d-413f-9dce-d0df709ee20e\tPset_PavementCommon.Reference[Type]\tTEXT\t\t458\t1\tIfcIdentifier\t1\nPARAM\t3e0ea20b-2dfd-4dab-a9ea-22c19713a063\tPset_PavementCommon.Status[Type]\tTEXT\t\t458\t1\tPEnum_ElementStatus\t1\nPARAM\tdefae61a-5509-4c55-a53a-c87919ce0475\tPset_PavementCommon.StructuralSlope[Type]\tNUMBER\t\t458\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta3f64132-4cba-4227-b6df-f71fe58bf220\tPset_PavementCommon.StructuralSlopeType[Type]\tTEXT\t\t458\t1\tIfcLabel\t1\n#\nGROUP\t459\tPset_PavementMillingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta759e462-a2e6-4a20-a596-1bc8b252d361\tPset_PavementMillingCommon.NominalDepth[Type]\tLENGTH\t\t459\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tb5772d4f-012d-4c19-99cf-3dd869ed256f\tPset_PavementMillingCommon.NominalWidth[Type]\tLENGTH\t\t459\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t460\tPset_PavementSurfaceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc3e3d66b-5699-485c-85dd-3f52a533ccc6\tPset_PavementSurfaceCommon.PavementRoughness[Type]\tNUMBER\t\t460\t1\tIfcNumericMeasure\t1\nPARAM\teb50e4ad-581b-46cd-8f88-0fd5fea44065\tPset_PavementSurfaceCommon.PavementTexture[Type]\tLENGTH\t\t460\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t461\tPset_Permit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4d15b7cd-09d3-42c4-b810-21fd00fcccee\tPset_Permit.EndDate[Type]\tTEXT\t\t461\t1\tIfcDateTime\t1\nPARAM\t71b7e1e2-7eb5-4f6e-a630-f0b4c56d7f03\tPset_Permit.EndTime[Type]\tMULTILINETEXT\t\t461\t1\tIfcLocalTime\t1\nPARAM\t1644b014-dc47-4ab4-864f-18d88feee2c5\tPset_Permit.EscortRequirement[Type]\tYESNO\t\t461\t1\tIfcBoolean\t1\nPARAM\t6e2e1f3d-8ba3-4bbd-aa09-8045644a9568\tPset_Permit.PermitDuration[Type]\tMULTILINETEXT\t\t461\t1\tIfcDateAndTime\t1\nPARAM\tcfac8ced-046a-45d4-935b-de5feddea1c5\tPset_Permit.PermitType[Type]\tTEXT\t\t461\t1\tPEnum_PermitType\t1\nPARAM\t1cc5a816-8e97-47da-9d09-fc7ae154a092\tPset_Permit.SpecialRequirements[Type]\tTEXT\t\t461\t1\tIfcText\t1\nPARAM\ta1bb66e3-55a0-4016-8bbf-9a9fd2ceadd4\tPset_Permit.StartDate[Type]\tTEXT\t\t461\t1\tIfcDateTime\t1\nPARAM\tb1acdc22-3015-48c3-a9c2-b897c9b8e98f\tPset_Permit.StartTime[Type]\tMULTILINETEXT\t\t461\t1\tIfcLocalTime\t1\n#\nGROUP\t462\tPset_PileCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te69623fb-d758-42df-afc3-743a73fae10f\tPset_PileCommon.LoadBearing[Type]\tYESNO\t\t462\t1\tIfcBoolean\t1\nPARAM\td17d9f5e-2335-4bb2-baad-adbf5a68923e\tPset_PileCommon.Reference[Type]\tTEXT\t\t462\t1\tIfcIdentifier\t1\nPARAM\t281a5b5a-c420-4a68-88e7-4111103a75da\tPset_PileCommon.Status[Type]\tTEXT\t\t462\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t463\tPset_PipeConnection\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1e24bf4e-4838-4a94-8cad-8b282c50438f\tPset_PipeConnection.ConnectionType[Type]\tMULTILINETEXT\t\t463\t1\tPropertyListValue\t1\n#\nGROUP\t464\tPset_PipeConnectionFlanged\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6d6b4705-7474-4299-9a29-beba6519b59e\tPset_PipeConnectionFlanged.BoltholePitch[Type]\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t80bfea5e-e5c7-4c11-beb6-edfe7375cf43\tPset_PipeConnectionFlanged.BoltSize[Type]\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t74174d13-f4a0-4c3c-91aa-ee61536f939b\tPset_PipeConnectionFlanged.BoreSize[Type]\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9ff73b59-03d8-4f1f-9a89-ffc4eb655281\tPset_PipeConnectionFlanged.FlangeDiameter[Type]\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t58c25a52-ba53-4b61-a7cd-aa8f65f6683b\tPset_PipeConnectionFlanged.FlangeStandard[Type]\tTEXT\t\t464\t1\tIfcLabel\t1\nPARAM\t1fd3cd9a-3186-47e2-be4d-856acb476c53\tPset_PipeConnectionFlanged.FlangeTable[Type]\tTEXT\t\t464\t1\tIfcLabel\t1\nPARAM\t84c4791b-7034-4f77-afbc-31bc923c30a5\tPset_PipeConnectionFlanged.FlangeThickness[Type]\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td3242747-d3ee-4162-a527-a93e10cf7f7e\tPset_PipeConnectionFlanged.Material[Type]\tMULTILINETEXT\t\t464\t1\tIfcMaterial\t1\nPARAM\tabab0947-96ab-4854-8258-da38a440a6b6\tPset_PipeConnectionFlanged.NumberOfBoltholes[Type]\tINTEGER\t\t464\t1\tIfcCountMeasure\t1\n#\nGROUP\t465\tPset_PipeFittingOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te0e84f31-8800-46bc-a2f3-d5d11d7e1218\tPset_PipeFittingOccurrence.Color[Type]\tTEXT\t\t465\t1\tIfcLabel\t1\nPARAM\t5f4ebcfd-d244-4e05-8844-8c114166fd5c\tPset_PipeFittingOccurrence.Colour[Type]\tTEXT\t\t465\t1\tIfcLabel\t1\nPARAM\tf324a046-9419-4a0b-99fe-f6cb7799edea\tPset_PipeFittingOccurrence.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t465\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t466\tPset_PipeFittingPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5cad7977-82b1-471f-b327-2006b5b9c059\tPset_PipeFittingPHistory.FlowrateLeakage[Type]\tMULTILINETEXT\t\t466\t1\tIfcTimeSeries\t1\nPARAM\ta935ea5b-b0a7-434b-a407-3d939a2af798\tPset_PipeFittingPHistory.LossCoefficient[Type]\tMULTILINETEXT\t\t466\t1\tIfcTimeSeries\t1\n#\nGROUP\t467\tPset_PipeFittingTypeBend\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0f92cc6e-0ba9-422c-918e-cf042e592da6\tPset_PipeFittingTypeBend.BendAngle[Type]\tANGLE\t\t467\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t149d8e7c-1a3f-488e-9718-68955bcf9fba\tPset_PipeFittingTypeBend.BendRadius[Type]\tLENGTH\t\t467\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t468\tPset_PipeFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2bc892ea-6c33-40fd-a8a7-fa52c9cb4dda\tPset_PipeFittingTypeCommon.EndStyleTreatment[Type]\tMULTILINETEXT\t\t468\t1\tPropertyListValue\t1\nPARAM\t44f5c3d0-c715-4200-a29e-e02b084ada26\tPset_PipeFittingTypeCommon.FittingLossFactor[Type]\tNUMBER\t\t468\t1\tIfcReal\t1\nPARAM\tb04f9db1-7d61-4a99-96a1-750848905621\tPset_PipeFittingTypeCommon.InnerDiameter[Type]\tMULTILINETEXT\t\t468\t1\tPropertyListValue\t1\nPARAM\t7abed324-20bb-462f-a36f-3341f58d7ce7\tPset_PipeFittingTypeCommon.Material[Type]\tMULTILINETEXT\t\t468\t1\tIfcMaterial\t1\nPARAM\t10b7993b-faca-4d1f-aec6-a08efd7b2ed2\tPset_PipeFittingTypeCommon.NominalDiameter[Type]\tMULTILINETEXT\t\t468\t1\tPropertyListValue\t1\nPARAM\tb882c9dd-7d32-44c3-a781-f36385f4b7f3\tPset_PipeFittingTypeCommon.OuterDiameter[Type]\tMULTILINETEXT\t\t468\t1\tPropertyListValue\t1\nPARAM\t03f8db3f-b7b4-4878-9891-7f0f5f816cca\tPset_PipeFittingTypeCommon.PressureClass[Type]\tNUMBER\t\t468\t1\tIfcPressureMeasure\t1\nPARAM\t10d90dd8-03e4-42a8-bf68-f8ab0598e34e\tPset_PipeFittingTypeCommon.PressureRange[Type]\tMULTILINETEXT\t\t468\t1\tPropertyBoundedValue\t1\nPARAM\t9b359a61-aade-4653-bd3f-2e1ce4b1389d\tPset_PipeFittingTypeCommon.Reference[Type]\tTEXT\t\t468\t1\tIfcIdentifier\t1\nPARAM\tb5cdb44a-3d0d-44a2-9ddd-8fbf8ca43f2e\tPset_PipeFittingTypeCommon.Status[Type]\tTEXT\t\t468\t1\tPEnum_ElementStatus\t1\nPARAM\tfd8e2f61-0b6f-4650-b34d-564d6cb13468\tPset_PipeFittingTypeCommon.SubType[Type]\tTEXT\t\t468\t1\tIfcLabel\t1\nPARAM\t5247001e-5480-4764-97fd-041fde4cc424\tPset_PipeFittingTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t468\t1\tPropertyBoundedValue\t1\nPARAM\t5870c2d0-ef41-4538-921b-6a3cb77b847d\tPset_PipeFittingTypeCommon.UnitWeight[Type]\tNUMBER\t\t468\t1\tIfcMassMeasure\t1\n#\nGROUP\t469\tPset_PipeFittingTypeJunction\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7282870e-6ad7-486c-b3c2-e540f719960e\tPset_PipeFittingTypeJunction.JunctionLeftAngle[Type]\tANGLE\t\t469\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t08f81114-f464-4f17-b31a-68ae2a36bd2e\tPset_PipeFittingTypeJunction.JunctionLeftRadius[Type]\tLENGTH\t\t469\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2f996d55-8704-473b-9566-18f1a103c76e\tPset_PipeFittingTypeJunction.JunctionRightAngle[Type]\tANGLE\t\t469\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t56f67587-5dc9-4612-aac6-95961a93a1af\tPset_PipeFittingTypeJunction.JunctionRightRadius[Type]\tLENGTH\t\t469\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tffb1b883-8e0b-40f4-acfb-a564a441c8ac\tPset_PipeFittingTypeJunction.JunctionType[Type]\tTEXT\t\t469\t1\tPEnum_PipeFittingJunctionType\t1\n#\nGROUP\t470\tPset_PipeSegmentOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdc003b82-4fcd-464d-8d93-3bbb4203f13d\tPset_PipeSegmentOccurrence.Color[Type]\tTEXT\t\t470\t1\tIfcLabel\t1\nPARAM\tf1f57490-50c8-499b-adc4-63d781481080\tPset_PipeSegmentOccurrence.Colour[Type]\tTEXT\t\t470\t1\tIfcLabel\t1\nPARAM\t573acf68-38c7-4deb-bd06-20375423f590\tPset_PipeSegmentOccurrence.Gradient[Type]\tNUMBER\t\t470\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t155af95a-4776-4850-a97b-a390bcac7d02\tPset_PipeSegmentOccurrence.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t470\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t80c33b9a-e768-4e91-83bb-5a27c942468b\tPset_PipeSegmentOccurrence.InvertElevation[Type]\tLENGTH\t\t470\t1\tIfcLengthMeasure\t1\n#\nGROUP\t471\tPset_PipeSegmentPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta4e5c6ba-85bf-4646-8ff6-61f9229db467\tPset_PipeSegmentPHistory.FluidFlowLeakage[Type]\tMULTILINETEXT\t\t471\t1\tIfcTimeSeries\t1\nPARAM\t8edabf12-d434-4d64-aa17-6f6868587d48\tPset_PipeSegmentPHistory.LeakageCurve[Type]\tMULTILINETEXT\t\t471\t1\tIfcTimeSeries\t1\n#\nGROUP\t472\tPset_PipeSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc5e44e46-6f3a-4cb5-8e8b-69b47c1f5d55\tPset_PipeSegmentTypeCommon.EndStyleTreatment[Type]\tMULTILINETEXT\t\t472\t1\tPropertyListValue\t1\nPARAM\tad42a7bc-37ce-4519-8f0c-c70799a853a8\tPset_PipeSegmentTypeCommon.InnerDiameter[Type]\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t17652bba-b266-42b0-8879-a9c04da5ba17\tPset_PipeSegmentTypeCommon.Length[Type]\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t34beeffc-d80f-41bd-acc5-15bc68719d91\tPset_PipeSegmentTypeCommon.Material[Type]\tMULTILINETEXT\t\t472\t1\tIfcMaterial\t1\nPARAM\t0f4b54bf-5f61-4d40-8b66-57d766c8bfea\tPset_PipeSegmentTypeCommon.NominalDiameter[Type]\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t485d392f-db58-4184-b5a3-d898a9f3f70b\tPset_PipeSegmentTypeCommon.OuterDiameter[Type]\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta78bb18f-9142-4854-a0f3-484b7d5f8e7d\tPset_PipeSegmentTypeCommon.PressureRange[Type]\tMULTILINETEXT\t\t472\t1\tPropertyBoundedValue\t1\nPARAM\t93ccafdc-4f6f-4e7d-bb78-3fcb5f43e3be\tPset_PipeSegmentTypeCommon.Reference[Type]\tTEXT\t\t472\t1\tIfcIdentifier\t1\nPARAM\t4ada149b-e9e2-4e47-bc2f-b4e33ff6cd42\tPset_PipeSegmentTypeCommon.Status[Type]\tTEXT\t\t472\t1\tPEnum_ElementStatus\t1\nPARAM\t63e78675-c9d1-4cb8-8822-0d4d659a83c1\tPset_PipeSegmentTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t472\t1\tPropertyBoundedValue\t1\nPARAM\t5c019f88-eca6-4b93-bfd2-a04ff3dabb66\tPset_PipeSegmentTypeCommon.UnitWeight[Type]\tNUMBER\t\t472\t1\tIfcMassMeasure\t1\nPARAM\t83c36101-57b5-47f8-a374-c99838f60292\tPset_PipeSegmentTypeCommon.WorkingPressure[Type]\tNUMBER\t\t472\t1\tIfcPressureMeasure\t1\n#\nGROUP\t473\tPset_PipeSegmentTypeCulvert\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9049b102-a322-4027-af99-591d334283a9\tPset_PipeSegmentTypeCulvert.ClearDepth[Type]\tLENGTH\t\t473\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tca0c3bbe-dc26-4370-a5fd-8a1f17bcce5a\tPset_PipeSegmentTypeCulvert.InternalWidth[Type]\tLENGTH\t\t473\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t474\tPset_PipeSegmentTypeGutter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t072ad8c9-8b6b-4214-bb94-0fda122e3fb2\tPset_PipeSegmentTypeGutter.Complementaryfunction[Type]\tTEXT\t\t474\t1\tPEnum_ComplementaryWorks\t1\nPARAM\t6dc2f523-d503-47f5-b9e1-52b210b9394c\tPset_PipeSegmentTypeGutter.FlowRating[Type]\tNUMBER\t\t474\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\ta3ddee16-c4f9-43af-a553-ef7ec7f37754\tPset_PipeSegmentTypeGutter.IsCovered[Type]\tYESNO\t\t474\t1\tIfcBoolean\t1\nPARAM\t7d44cc9c-9198-4f45-8d9b-41d78d12a8bf\tPset_PipeSegmentTypeGutter.IsMonitored[Type]\tYESNO\t\t474\t1\tIfcBoolean\t1\nPARAM\t22a9480b-bab9-49ea-9c44-423394f5a269\tPset_PipeSegmentTypeGutter.OrthometricHeight[Type]\tLENGTH\t\t474\t1\tIfcLengthMeasure\t1\nPARAM\t3da0b78b-5362-4c7a-bab0-4e273bf4c277\tPset_PipeSegmentTypeGutter.Slope[Type]\tNUMBER\t\t474\t1\tIfcPlaneAngleMeasure\t1\n#\nGROUP\t475\tPset_PlateCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5c5d67a3-4f53-46bc-97de-fc6949191c1a\tPset_PlateCommon.AcousticRating[Type]\tTEXT\t\t475\t1\tIfcLabel\t1\nPARAM\t73cea862-84f5-4766-b228-c3fc7fa483f0\tPset_PlateCommon.FireRating[Type]\tTEXT\t\t475\t1\tIfcLabel\t1\nPARAM\t88fa1d15-de30-4d50-a43b-31cba65a193f\tPset_PlateCommon.IsExternal[Type]\tYESNO\t\t475\t1\tIfcBoolean\t1\nPARAM\t4603cc9e-a795-4269-96cc-79535d1ffe40\tPset_PlateCommon.LoadBearing[Type]\tYESNO\t\t475\t1\tIfcBoolean\t1\nPARAM\t858b53b2-ce4f-47c8-8fd4-bbc923308a9c\tPset_PlateCommon.Reference[Type]\tTEXT\t\t475\t1\tIfcIdentifier\t1\nPARAM\td4fd8b9c-f9f9-4ebc-b5f1-a669df1c690c\tPset_PlateCommon.Status[Type]\tTEXT\t\t475\t1\tPEnum_ElementStatus\t1\nPARAM\tbc35b3e3-149c-4874-b9c0-77888ed69965\tPset_PlateCommon.ThermalTransmittance[Type]\tNUMBER\t\t475\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t476\tPset_PointMachine\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8c41a1d0-9d58-4297-816b-4dce3c46019c\tPset_PointMachine.ActionBarMovementLength[Type]\tLENGTH\t\t476\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7a3e7af7-7cfd-4bbc-a6f6-a9e2faf4eaa9\tPset_PointMachine.ConversionTime[Type]\tNUMBER\t\t476\t1\tIfcTimeMeasure\t1\nPARAM\t7078811b-2022-40f5-aff1-ef1555eb84c1\tPset_PointMachine.Current[Type]\tMULTILINETEXT\t\t476\t1\tPropertyBoundedValue\t1\nPARAM\tbcac9346-4b00-4e15-97c1-3c45d12dbc4f\tPset_PointMachine.HasLockInside[Type]\tYESNO\t\t476\t1\tIfcBoolean\t1\nPARAM\t0cb2b888-6f7a-44d3-a43b-8527346a8178\tPset_PointMachine.LockingForce[Type]\tNUMBER\t\t476\t1\tIfcForceMeasure\t1\nPARAM\t93a0c9fa-bb88-4c6c-9483-bca3a3886b4b\tPset_PointMachine.MarkingRodMovementLength[Type]\tLENGTH\t\t476\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t506dd2e0-bd42-4832-ad5c-d3ba12c53cdb\tPset_PointMachine.MaximumOperatingTime[Type]\tNUMBER\t\t476\t1\tIfcTimeMeasure\t1\nPARAM\t7594507f-6b12-40f2-a03b-5e5154575c5b\tPset_PointMachine.MinimumOperatingSpeed[Type]\tNUMBER\t\t476\t1\tIfcAngularVelocityMeasure\t1\nPARAM\t9b071513-9063-4865-a046-28607bf96eb8\tPset_PointMachine.TractionForce[Type]\tNUMBER\t\t476\t1\tIfcForceMeasure\t1\n#\nGROUP\t477\tPset_PowerControlSystem\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4d2ae516-3b54-4af1-95cd-672ef470775e\tPset_PowerControlSystem.AssemblyInstruction[Type]\tMULTILINETEXT\t\t477\t1\tIfcExternalReference\t1\n#\nGROUP\t478\tPset_PrecastConcreteElementFabrication\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdb65332b-d17e-4e21-a20a-0f58d7ed427d\tPset_PrecastConcreteElementFabrication.ActualErectionDate[Type]\tTEXT\t\t478\t1\tIfcDateTime\t1\nPARAM\tf874b6fa-a009-442f-bc30-9944b45566ee\tPset_PrecastConcreteElementFabrication.ActualProductionDate[Type]\tTEXT\t\t478\t1\tIfcDateTime\t1\nPARAM\tb65de00c-7844-4ee7-9cb0-57425970c191\tPset_PrecastConcreteElementFabrication.AsBuiltLocationNumber[Type]\tTEXT\t\t478\t1\tIfcLabel\t1\nPARAM\tb2df4aae-da22-422b-a2c6-de97686a8138\tPset_PrecastConcreteElementFabrication.PieceMark[Type]\tTEXT\t\t478\t1\tIfcLabel\t1\nPARAM\t9276c6e6-8e57-41b8-9b18-8eb245414510\tPset_PrecastConcreteElementFabrication.ProductionLotId[Type]\tTEXT\t\t478\t1\tIfcIdentifier\t1\nPARAM\tff7a3ab2-604b-47de-930d-cdddd3c86f3c\tPset_PrecastConcreteElementFabrication.SerialNumber[Type]\tTEXT\t\t478\t1\tIfcIdentifier\t1\nPARAM\t4212ab6c-8bea-4784-ad58-03308bba8d2b\tPset_PrecastConcreteElementFabrication.TypeDesignation[Type]\tTEXT\t\t478\t1\tIfcLabel\t1\nPARAM\t03b685ae-1eea-4a91-af53-e84736741c70\tPset_PrecastConcreteElementFabrication.TypeDesignator[Type]\tTEXT\t\t478\t1\tIfcLabel\t1\n#\nGROUP\t479\tPset_PrecastConcreteElementGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t45c05fc8-61bd-4160-80d9-fef068806a8b\tPset_PrecastConcreteElementGeneral.BatterAtEnd[Type]\tNUMBER\t\t479\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tc930fed2-393f-44ac-b667-1f2410b8963f\tPset_PrecastConcreteElementGeneral.BatterAtStart[Type]\tNUMBER\t\t479\t1\tIfcPlaneAngleMeasure\t1\nPARAM\ta4001419-88e5-4f0a-b5b5-3789e40a45d1\tPset_PrecastConcreteElementGeneral.CamberAtMidspan[Type]\tNUMBER\t\t479\t1\tIfcRatioMeasure\t1\nPARAM\t931b14d2-0ca6-4db9-bb2e-e74dbf7eef5a\tPset_PrecastConcreteElementGeneral.CornerChamfer[Type]\tLENGTH\t\t479\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t34fb1c44-897f-4406-8ebf-7d2549fbf7b2\tPset_PrecastConcreteElementGeneral.DesignLocationNumber[Type]\tTEXT\t\t479\t1\tIfcLabel\t1\nPARAM\t77160467-bf55-4f9b-bd12-866a3d51dabe\tPset_PrecastConcreteElementGeneral.ElementGrossVolume[Type]\tVOLUME\t\t479\t1\tIfcVolumeMeasure\t1\nPARAM\tf6146a88-3cff-438b-8632-c6dcc1f5c11c\tPset_PrecastConcreteElementGeneral.ElementNetVolume[Type]\tVOLUME\t\t479\t1\tIfcVolumeMeasure\t1\nPARAM\t43840174-1e3c-42ec-9c9b-5e5631f16ed7\tPset_PrecastConcreteElementGeneral.ElementWeight[Type]\tNUMBER\t\t479\t1\tIfcMassMeasure\t1\nPARAM\t7d0e6f27-cb9b-4eca-b83d-f82d4c3ae89b\tPset_PrecastConcreteElementGeneral.FormStrippingStrength[Type]\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\nPARAM\t8d63b85c-6a6c-4d49-833e-168c0db4e485\tPset_PrecastConcreteElementGeneral.HollowCorePlugging[Type]\tTEXT\t\t479\t1\tIfcLabel\t1\nPARAM\t707844be-5455-44c8-86c3-3f4a9d8ce9b6\tPset_PrecastConcreteElementGeneral.InitialTension[Type]\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\nPARAM\t74561c84-1f34-47d0-b8b3-84097ecc9735\tPset_PrecastConcreteElementGeneral.LiftingStrength[Type]\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\nPARAM\t32c52035-9ae8-4259-920d-0d899f985e9c\tPset_PrecastConcreteElementGeneral.ManufacturingToleranceClass[Type]\tTEXT\t\t479\t1\tIfcLabel\t1\nPARAM\tcae0ec9b-d5fd-4f65-8e26-30eeef8a8c5b\tPset_PrecastConcreteElementGeneral.MinimumAllowableSupportLength[Type]\tLENGTH\t\t479\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t215967ef-45bc-4e51-b54d-1f66934b44e9\tPset_PrecastConcreteElementGeneral.PieceMark[Type]\tTEXT\t\t479\t1\tIfcLabel\t1\nPARAM\tb3729bb6-f8c9-47be-b043-ab15484ef9f9\tPset_PrecastConcreteElementGeneral.ProductionLotId[Type]\tTEXT\t\t479\t1\tIfcIdentifier\t1\nPARAM\tdf9708e2-fa6a-4a3c-92eb-462bdc7b8582\tPset_PrecastConcreteElementGeneral.ReleaseStrength[Type]\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\nPARAM\tb986711f-8a08-46d5-9e3d-b562a100b200\tPset_PrecastConcreteElementGeneral.SerialNumber[Type]\tTEXT\t\t479\t1\tIfcIdentifier\t1\nPARAM\tf1c3c3dc-c16e-4179-9b26-a127c236e5a6\tPset_PrecastConcreteElementGeneral.Shortening[Type]\tNUMBER\t\t479\t1\tIfcRatioMeasure\t1\nPARAM\td91b8d96-8a0b-4d22-a377-56fcd535f6bf\tPset_PrecastConcreteElementGeneral.SupportDuringTransportDescription[Type]\tTEXT\t\t479\t1\tIfcText\t1\nPARAM\t4a0387be-fde1-40d3-b2a5-e2374ff135b9\tPset_PrecastConcreteElementGeneral.SupportDuringTransportDocReference[Type]\tMULTILINETEXT\t\t479\t1\tIfcExternalReference\t1\nPARAM\tb0cabe29-2cf3-40e0-ac55-a49263519526\tPset_PrecastConcreteElementGeneral.TendonRelaxation[Type]\tNUMBER\t\t479\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0c6c92cd-26f4-412a-a4a0-f5ed2d99de0f\tPset_PrecastConcreteElementGeneral.TransportationStrength[Type]\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\nPARAM\tcc8a822a-f298-415a-9719-9894a6559580\tPset_PrecastConcreteElementGeneral.Twisting[Type]\tNUMBER\t\t479\t1\tIfcPlaneAngleMeasure\t1\nPARAM\te60bb638-86a8-4f4e-bb15-0867b83f4a8d\tPset_PrecastConcreteElementGeneral.TypeDesignation[Type]\tTEXT\t\t479\t1\tIfcLabel\t1\nPARAM\t7719294a-dd18-48a3-82aa-58e1ab101aec\tPset_PrecastConcreteElementGeneral.TypeDesignator[Type]\tTEXT\t\t479\t1\tIfcLabel\t1\n#\nGROUP\t480\tPset_PrecastKerbStone\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c8291eb-119a-459f-abf9-b842fef27c49\tPset_PrecastKerbStone.NominalHeight[Type]\tLENGTH\t\t480\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tbc40c1c7-5037-4520-80fc-4073e7ba1965\tPset_PrecastKerbStone.NominalLength[Type]\tLENGTH\t\t480\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t6ce9a3eb-b245-4388-b955-5af7589b19c8\tPset_PrecastKerbStone.NominalWidth[Type]\tLENGTH\t\t480\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t5258a7e8-2749-4c1a-97d1-00990b7cfa13\tPset_PrecastKerbStone.TypeDesignation[Type]\tTEXT\t\t480\t1\tIfcLabel\t1\n#\nGROUP\t481\tPset_PrecastSlab\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4f1de80b-ec15-4ec7-b4b6-ad758e64115e\tPset_PrecastSlab.AngleBetweenComponentAxes[Type]\tNUMBER\t\t481\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t297dc718-b99b-417b-8381-cf5b982560f1\tPset_PrecastSlab.AngleToFirstAxis[Type]\tNUMBER\t\t481\t1\tIfcPlaneAngleMeasure\t1\nPARAM\ted565e48-3c0c-4edf-837c-c7dc1d54a87b\tPset_PrecastSlab.DistanceBetweenComponentAxes[Type]\tLENGTH\t\t481\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0e12fe38-a793-46b9-ae77-04457f8e7445\tPset_PrecastSlab.EdgeDistanceToFirstAxis[Type]\tLENGTH\t\t481\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6d29d618-88a3-4a27-8182-e5814cb5fbc9\tPset_PrecastSlab.NominalThickness[Type]\tLENGTH\t\t481\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t5024cfcf-6c8e-42ac-83fe-add3e388c93b\tPset_PrecastSlab.NominalToppingThickness[Type]\tLENGTH\t\t481\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tad0093d2-0965-41cd-aecd-44b30bae044e\tPset_PrecastSlab.ToppingType[Type]\tTEXT\t\t481\t1\tIfcLabel\t1\nPARAM\t21ab247e-03f2-4a93-b2eb-0be4dfd339ce\tPset_PrecastSlab.TypeDesignation[Type]\tTEXT\t\t481\t1\tIfcLabel\t1\nPARAM\t6c59d728-d5ba-46c5-b65e-dda31873960e\tPset_PrecastSlab.TypeDesignator[Type]\tTEXT\t\t481\t1\tIfcLabel\t1\n#\nGROUP\t482\tPset_ProcessCapacity\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8f7e10ae-6bb9-4272-8c2b-972453a89fbb\tPset_ProcessCapacity.DownstreamConnections[Type]\tMULTILINETEXT\t\t482\t1\tPropertyListValue\t1\nPARAM\te9a6cb57-00e3-4771-b6b8-abd1e56740e1\tPset_ProcessCapacity.ProcessCapacity[Type]\tINTEGER\t\t482\t1\tIfcCountMeasure\t1\nPARAM\t2d21116d-12e5-4ce2-828d-026ae28e6cf4\tPset_ProcessCapacity.ProcessItem[Type]\tTEXT\t\t482\t1\tPEnum_ProcessItem\t1\nPARAM\t29fcc580-8a8b-427f-b274-61cb70879748\tPset_ProcessCapacity.ProcessPerformance[Type]\tTEXT\t\t482\t1\tIfcDuration\t1\nPARAM\t324d14a9-af1e-47b6-907e-7a21dda41c78\tPset_ProcessCapacity.UpstreamConnections[Type]\tMULTILINETEXT\t\t482\t1\tPropertyListValue\t1\n#\nGROUP\t483\tPset_ProductRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5eb1b768-2768-4a9b-85cb-1acb6971097f\tPset_ProductRequirements.Category[Type]\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t102429d7-b76e-4370-b968-2538045f9137\tPset_ProductRequirements.Classification[Type]\tMULTILINETEXT\t\t483\t1\tIfcClassificationReference\t1\nPARAM\t575fe423-8ed9-48c0-8095-8a06b0b58326\tPset_ProductRequirements.DemandImportanceValue[Type]\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t6721edea-60bf-41d1-9bfc-49e35486f1f9\tPset_ProductRequirements.DemandThresholdValue[Type]\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t60d5810a-eda9-48ca-b2a4-d0156822f265\tPset_ProductRequirements.DemandValue[Type]\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\tb016fbda-20f7-41eb-b667-2d8866593ade\tPset_ProductRequirements.GapValue[Type]\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t16008a58-aa40-438f-8f31-a5100ff12d3a\tPset_ProductRequirements.GapValueWeighted[Type]\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t30c55297-d29d-4629-9e0a-d19aa6bafa26\tPset_ProductRequirements.GroupName[Type]\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t88b806f2-3420-4fa8-ba17-2b417e1bba57\tPset_ProductRequirements.Name[Type]\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t87a6840a-48f6-46df-acb3-69d71f28f555\tPset_ProductRequirements.SupplyEvaluationValue[Type]\tTEXT\t\t483\t1\tIfcLabel\t1\n#\nGROUP\t484\tPset_ProfileArbitraryDoubleT\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfea1d0e9-be79-4deb-a2a5-1a7353a5e555\tPset_ProfileArbitraryDoubleT.FlangeBaseFillet[Type]\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t91dc09ad-7269-40f3-8c88-4f6da1ea72d0\tPset_ProfileArbitraryDoubleT.FlangeChamfer[Type]\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tc44022ed-1a9a-43f6-aef7-8d8cb6f0142e\tPset_ProfileArbitraryDoubleT.FlangeDepth[Type]\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8fca2b0f-3d1b-4699-a66c-548abde641cf\tPset_ProfileArbitraryDoubleT.FlangeDraft[Type]\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tf9688506-d1d0-4d79-a88b-a57f774e4e2c\tPset_ProfileArbitraryDoubleT.FlangeTopFillet[Type]\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t9469c692-13f3-4c11-abbd-3c4e94e6eefc\tPset_ProfileArbitraryDoubleT.LeftFlangeWidth[Type]\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td7fc065f-7806-4156-9713-1669ae0d0a71\tPset_ProfileArbitraryDoubleT.OverallDepth[Type]\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tae95bd13-4bd6-4f23-89eb-5a805ea3f150\tPset_ProfileArbitraryDoubleT.OverallWidth[Type]\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te36b7019-f796-4dba-a4e0-dd778bd5136c\tPset_ProfileArbitraryDoubleT.RightFlangeWidth[Type]\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t875c7de9-bfb2-44dc-813c-3d8a15c2e28e\tPset_ProfileArbitraryDoubleT.StemBaseChamfer[Type]\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\ta82a32c3-90b7-48dd-9c9c-212f1d3b5c58\tPset_ProfileArbitraryDoubleT.StemBaseFillet[Type]\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t99543a29-ec26-4368-b5ad-2f471303420b\tPset_ProfileArbitraryDoubleT.StemBaseWidth[Type]\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t01f96f03-cc48-4c4d-876b-f2a639e1a339\tPset_ProfileArbitraryDoubleT.StemTopChamfer[Type]\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tff9a6fe8-dd9c-4a45-b818-a5a855aae1ee\tPset_ProfileArbitraryDoubleT.StemTopFillet[Type]\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t1f1682ca-8180-46cb-a67b-dd983b3a4e61\tPset_ProfileArbitraryDoubleT.StemTopWidth[Type]\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t485\tPset_ProfileArbitraryHollowCore\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td1904530-86b4-486f-9b7d-e3aabf545591\tPset_ProfileArbitraryHollowCore.BaseChamfer[Type]\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tb7163ade-97e1-4e7c-acf5-e21ae6753850\tPset_ProfileArbitraryHollowCore.BottomCover[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t22446560-afb6-4381-b40c-8e8c3344b6e9\tPset_ProfileArbitraryHollowCore.CenterCoreBaseHeight[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9c8d5de3-878c-4a45-b068-a9b97fce1dce\tPset_ProfileArbitraryHollowCore.CenterCoreBaseWidth[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7c258951-c567-49df-a814-a6d8e6c753ae\tPset_ProfileArbitraryHollowCore.CenterCoreMiddleHeight[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t67039050-2739-4386-93fd-638479bfc3af\tPset_ProfileArbitraryHollowCore.CenterCoreSpacing[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t882f03c9-6827-4355-a494-35037143730c\tPset_ProfileArbitraryHollowCore.CenterCoreTopHeight[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcd784796-3acf-4740-8091-38a421bac8d7\tPset_ProfileArbitraryHollowCore.CenterCoreTopWidth[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2e68ff14-ba06-4806-b0ac-a7e7abdc9407\tPset_ProfileArbitraryHollowCore.CoreBaseHeight[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3195dc3d-a183-4998-9ead-3c65bec1f131\tPset_ProfileArbitraryHollowCore.CoreBaseWidth[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t84e2adfd-0b26-4cd1-8b30-4a96c83b8fd5\tPset_ProfileArbitraryHollowCore.CoreMiddleHeight[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t489630f1-37f0-4f94-aae4-d5c12314d0dd\tPset_ProfileArbitraryHollowCore.CoreSpacing[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t72e1f419-4768-4906-ab89-a6137435832c\tPset_ProfileArbitraryHollowCore.CoreTopHeight[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32f35683-d0c1-4b34-8a05-8f025def61b7\tPset_ProfileArbitraryHollowCore.CoreTopWidth[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc528efee-3aad-4537-9d21-81e3dd3bc587\tPset_ProfileArbitraryHollowCore.DraftBaseOffset[Type]\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t1f0094d5-81c0-47ab-b0fb-58ec95744047\tPset_ProfileArbitraryHollowCore.DraftSideOffset[Type]\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\ta12c8df4-3bb6-46b5-9d9a-bdc6ef7380e0\tPset_ProfileArbitraryHollowCore.EdgeDraft[Type]\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\te75bbbb6-a9f7-4225-be5e-69396884be5e\tPset_ProfileArbitraryHollowCore.KeyDepth[Type]\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\te1cb198a-0d76-4ba8-a045-2122f755e074\tPset_ProfileArbitraryHollowCore.KeyHeight[Type]\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t34d72c2c-9a2b-4973-bbc1-3b4f629f4834\tPset_ProfileArbitraryHollowCore.KeyOffset[Type]\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t6cb29cea-0ec2-4431-8bf7-7a5a0609b36e\tPset_ProfileArbitraryHollowCore.NumberOfCores[Type]\tINTEGER\t\t485\t1\tIfcCountMeasure\t1\nPARAM\tf0d8b077-5092-4cda-ba9f-7c0980c1b2dc\tPset_ProfileArbitraryHollowCore.OverallDepth[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t05e0881d-5b06-4a8b-8f31-e2a911b21c4d\tPset_ProfileArbitraryHollowCore.OverallWidth[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t486\tPset_ProfileMechanical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8329f0ff-42bb-48ee-9e3c-4548af2f0855\tPset_ProfileMechanical.CentreOfGravityInX[Type]\tLENGTH\t\t486\t1\tIfcLengthMeasure\t1\nPARAM\t72393ab1-4603-47ca-b5b9-4a64b66cad2a\tPset_ProfileMechanical.CentreOfGravityInY[Type]\tLENGTH\t\t486\t1\tIfcLengthMeasure\t1\nPARAM\t1ab73a26-6a40-4e95-94a5-288c9dea670a\tPset_ProfileMechanical.CrossSectionArea[Type]\tAREA\t\t486\t1\tIfcAreaMeasure\t1\nPARAM\ta0f63ee7-a45e-41f2-902b-c617cfca1310\tPset_ProfileMechanical.MassPerLength[Type]\tNUMBER\t\t486\t1\tIfcMassPerLengthMeasure\t1\nPARAM\tfd4e27ff-793b-45ce-9bfd-ec0dc954eac1\tPset_ProfileMechanical.MaximumPlateThickness[Type]\tLENGTH\t\t486\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta22bbccb-afeb-495e-a87d-89f03990f401\tPset_ProfileMechanical.MaximumSectionModulusY[Type]\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\nPARAM\t6eec5e42-208a-44a9-a6ef-33f401947d55\tPset_ProfileMechanical.MaximumSectionModulusZ[Type]\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\nPARAM\t44b1a600-40e0-4b75-9d4c-941cdafc37fe\tPset_ProfileMechanical.MinimumPlateThickness[Type]\tLENGTH\t\t486\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbebd29fd-6153-4b9b-a207-e5aa2a0d35b8\tPset_ProfileMechanical.MinimumSectionModulusY[Type]\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\nPARAM\tadd80393-e0fe-4441-b299-5b9038f1b7d6\tPset_ProfileMechanical.MinimumSectionModulusZ[Type]\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\nPARAM\t69b66aba-7af7-4966-a041-3ce91bc4831e\tPset_ProfileMechanical.MomentOfInertiaY[Type]\tNUMBER\t\t486\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\t96b4b8ac-64ca-4da6-9b92-d84164d06309\tPset_ProfileMechanical.MomentOfInertiaYZ[Type]\tNUMBER\t\t486\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\ta5923575-34c5-48ba-a622-ee4ff97f838b\tPset_ProfileMechanical.MomentOfInertiaZ[Type]\tNUMBER\t\t486\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\tda228a36-65bb-409e-afa5-9a21473751c4\tPset_ProfileMechanical.Perimeter[Type]\tLENGTH\t\t486\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0d58f863-bbd8-4e4e-9500-8feff81e4bf5\tPset_ProfileMechanical.PlasticShapeFactorY[Type]\tNUMBER\t\t486\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7b50672a-07af-48fc-93b3-08b964a8263b\tPset_ProfileMechanical.PlasticShapeFactorZ[Type]\tNUMBER\t\t486\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td6b04ead-54d0-4330-b4c4-d8f4ada31226\tPset_ProfileMechanical.ShearAreaY[Type]\tAREA\t\t486\t1\tIfcAreaMeasure\t1\nPARAM\tff6ffd7a-d1d9-4c17-b9fe-ddbe9dfda26e\tPset_ProfileMechanical.ShearAreaZ[Type]\tAREA\t\t486\t1\tIfcAreaMeasure\t1\nPARAM\t36ace196-3d10-4614-adbc-99c7fa8d2100\tPset_ProfileMechanical.ShearCentreY[Type]\tLENGTH\t\t486\t1\tIfcLengthMeasure\t1\nPARAM\t7ff736d7-13c4-4736-b404-2c33b30335fc\tPset_ProfileMechanical.ShearCentreZ[Type]\tLENGTH\t\t486\t1\tIfcLengthMeasure\t1\nPARAM\t01c471da-a085-4b1b-91da-177f7b2ff54c\tPset_ProfileMechanical.ShearDeformationAreaY[Type]\tAREA\t\t486\t1\tIfcAreaMeasure\t1\nPARAM\te96c1583-0d29-4fee-bb0e-9fd02dc9a840\tPset_ProfileMechanical.ShearDeformationAreaZ[Type]\tAREA\t\t486\t1\tIfcAreaMeasure\t1\nPARAM\t1e725204-a0d2-4293-a484-6ceb9d8c4ffd\tPset_ProfileMechanical.TorsionalConstantX[Type]\tNUMBER\t\t486\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\t2b8ea148-4ee0-469e-a923-c44808bb4c28\tPset_ProfileMechanical.TorsionalSectionModulus[Type]\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\nPARAM\ta331c45b-4a2c-4c46-b42a-323bbc2f6773\tPset_ProfileMechanical.WarpingConstant[Type]\tNUMBER\t\t486\t1\tIfcWarpingConstantMeasure\t1\n#\nGROUP\t487\tPset_ProjectCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta80a7f06-4ca4-4240-bc0e-8cb09563f22f\tPset_ProjectCommon.BuildingPermitId[Type]\tTEXT\t\t487\t1\tIfcIdentifier\t1\nPARAM\tdea1e0db-1818-45c0-81ba-d414d99502cc\tPset_ProjectCommon.ConstructionMode[Type]\tTEXT\t\t487\t1\tIfcLabel\t1\nPARAM\te2bddb2d-7b2a-4156-b260-070956cdd8d6\tPset_ProjectCommon.FundingSource[Type]\tTEXT\t\t487\t1\tIfcLabel\t1\nPARAM\t46bcfae4-d026-459d-8301-26c68b7122ad\tPset_ProjectCommon.GrossAreaPlanned[Type]\tAREA\t\t487\t1\tIfcAreaMeasure\t1\nPARAM\t1c29b133-89b4-498e-9e69-5970ea31a431\tPset_ProjectCommon.NetEarnedValue[Type]\tMULTILINETEXT\t\t487\t1\tIfcCostValue\t1\nPARAM\t588b13bb-9153-45c2-9451-e90c80bc6a72\tPset_ProjectCommon.PaybackPeriod[Type]\tTEXT\t\t487\t1\tIfcDuration\t1\nPARAM\t71573674-508a-4cc6-9784-61ca417aeb3b\tPset_ProjectCommon.ProjectInvestmentEstimate[Type]\tMULTILINETEXT\t\t487\t1\tIfcCostValue\t1\nPARAM\t74dd82aa-8827-4646-9b6a-ae412915f612\tPset_ProjectCommon.ProjectType[Type]\tTEXT\t\t487\t1\tPEnum_ProjectType\t1\nPARAM\t9014f31c-499d-41be-aeee-722662a45a25\tPset_ProjectCommon.ROI[Type]\tNUMBER\t\t487\t1\tIfcRatioMeasure\t1\n#\nGROUP\t488\tPset_ProjectionElementShadingDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td9135c33-5f54-4498-8b41-be7e3fa9b099\tPset_ProjectionElementShadingDevice.Color[Type]\tTEXT\t\t488\t1\tIfcLabel\t1\n#\nGROUP\t489\tPset_ProjectionElementShadingDevicePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7964c072-28b0-4884-91f0-320f78464862\tPset_ProjectionElementShadingDevicePHistory.Azimuth[Type]\tTEXT\t\t489\t1\tIfcLabel\t1\nPARAM\t31ce4fef-e744-4abd-9132-cb40b1180f99\tPset_ProjectionElementShadingDevicePHistory.TiltAngle[Type]\tNUMBER\t\t489\t1\tIfcReal\t1\n#\nGROUP\t490\tPset_ProjectionElementTypeShadingDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf16e4c0c-b979-4de1-bd48-677c909c55c3\tPset_ProjectionElementTypeShadingDevice.AverageSolarTransmittance[Type]\tNUMBER\t\t490\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t21dd4cdd-e53e-4592-8ab7-2bf382084b6a\tPset_ProjectionElementTypeShadingDevice.AverageVisibleTransmittance[Type]\tNUMBER\t\t490\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t937a6b0b-1018-4148-9e96-58a8bfd4312f\tPset_ProjectionElementTypeShadingDevice.Color[Type]\tTEXT\t\t490\t1\tIfcLabel\t1\nPARAM\tce9ee94a-c167-48a4-9bdc-a0d197bb845e\tPset_ProjectionElementTypeShadingDevice.Material[Type]\tMULTILINETEXT\t\t490\t1\tIfcMaterial\t1\nPARAM\t0f3a4b0f-565e-4530-ab12-2f9ebef66e86\tPset_ProjectionElementTypeShadingDevice.Reflectance[Type]\tNUMBER\t\t490\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6631a6c8-6d9c-4b1b-af25-8ac23403de44\tPset_ProjectionElementTypeShadingDevice.Roughness[Type]\tLENGTH\t\t490\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td0cca151-cbe9-49dc-9d18-4e82d23cd285\tPset_ProjectionElementTypeShadingDevice.ShadingDeviceType[Type]\tTEXT\t\t490\t1\tPEnum_ProjectionElementShadingDeviceType\t1\nPARAM\te6f16b05-7d5b-43f0-8c80-1a482543c59a\tPset_ProjectionElementTypeShadingDevice.TiltRange[Type]\tMULTILINETEXT\t\t490\t1\tPropertyBoundedValue\t1\n#\nGROUP\t491\tPset_ProjectOrderChangeOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83800315-0718-4884-9d3f-6f04ed4cfa8b\tPset_ProjectOrderChangeOrder.BudgetSource[Type]\tTEXT\t\t491\t1\tIfcText\t1\nPARAM\t4f2d17e3-2902-4630-a9bf-7a524a4239fc\tPset_ProjectOrderChangeOrder.ChangeDescription[Type]\tTEXT\t\t491\t1\tIfcText\t1\nPARAM\t91de525e-f146-4854-879b-b8ecf1cfa2bc\tPset_ProjectOrderChangeOrder.ReasonForChange[Type]\tTEXT\t\t491\t1\tIfcText\t1\n#\nGROUP\t492\tPset_ProjectOrderMaintenanceWorkOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t32c7dd51-b7b7-4dfc-9dd3-fe2d9f789ce0\tPset_ProjectOrderMaintenanceWorkOrder.ContractualType[Type]\tTEXT\t\t492\t1\tIfcText\t1\nPARAM\tb40c1ee5-ba97-4a77-8da0-588c58e8b928\tPset_ProjectOrderMaintenanceWorkOrder.FaultPriorityType[Type]\tTEXT\t\t492\t1\tPEnum_PriorityType\t1\nPARAM\tcb8c1df6-5e4d-449a-8ecc-ca4c36746663\tPset_ProjectOrderMaintenanceWorkOrder.IfNotAccomplished[Type]\tTEXT\t\t492\t1\tIfcText\t1\nPARAM\ta7acb64c-ba46-4365-a569-fabd9dcb2b50\tPset_ProjectOrderMaintenanceWorkOrder.LocationPriorityType[Type]\tTEXT\t\t492\t1\tPEnum_PriorityType\t1\nPARAM\t0e81bfe7-c28d-4b77-8e5d-2780fad4f07c\tPset_ProjectOrderMaintenanceWorkOrder.LongJobDescription[Type]\tTEXT\t\t492\t1\tIfcText\t1\nPARAM\tc9f8a96d-eb27-4b82-baba-fcfe6de3ace3\tPset_ProjectOrderMaintenanceWorkOrder.MaintenaceType[Type]\tTEXT\t\t492\t1\tPEnum_MaintenanceType\t1\nPARAM\t6de967ab-1cb7-4736-a190-7c9f04f7dbc7\tPset_ProjectOrderMaintenanceWorkOrder.MaintenanceType[Type]\tTEXT\t\t492\t1\tPEnum_MaintenanceType\t1\nPARAM\t220368ae-7cea-4143-8f42-0b7e2a241b8a\tPset_ProjectOrderMaintenanceWorkOrder.ProductDescription[Type]\tTEXT\t\t492\t1\tIfcText\t1\nPARAM\t3545dedd-489e-4e2a-b48e-2753348c9eec\tPset_ProjectOrderMaintenanceWorkOrder.ScheduledFrequency[Type]\tNUMBER\t\t492\t1\tIfcTimeMeasure\t1\nPARAM\t31fd0295-5cd4-45e0-a5d1-3207f20937d6\tPset_ProjectOrderMaintenanceWorkOrder.ShortJobDescription[Type]\tTEXT\t\t492\t1\tIfcText\t1\nPARAM\t400dc48c-9b60-4349-9ac5-137ddad7d698\tPset_ProjectOrderMaintenanceWorkOrder.WorkTypeRequested[Type]\tTEXT\t\t492\t1\tIfcText\t1\n#\nGROUP\t493\tPset_ProjectOrderMoveOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf030033f-1f44-46b0-8cfe-aadb34ae94f3\tPset_ProjectOrderMoveOrder.MoveDescription[Type]\tTEXT\t\t493\t1\tIfcText\t1\nPARAM\t3297afb0-8519-4627-8925-581576e54c70\tPset_ProjectOrderMoveOrder.SpecialInstructions[Type]\tTEXT\t\t493\t1\tIfcText\t1\n#\nGROUP\t494\tPset_ProjectOrderPurchaseOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t109d93a0-7be3-47ee-9dfe-cc93381c1d1f\tPset_ProjectOrderPurchaseOrder.IsFOB[Type]\tYESNO\t\t494\t1\tIfcBoolean\t1\nPARAM\tcc82b2b2-f74f-4c98-b862-a76f596a4e6f\tPset_ProjectOrderPurchaseOrder.ShipMethod[Type]\tTEXT\t\t494\t1\tIfcText\t1\n#\nGROUP\t495\tPset_ProjectOrderWorkOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t00e1ebda-9627-4bf4-8f83-cab9f88bf32e\tPset_ProjectOrderWorkOrder.ContractualType[Type]\tTEXT\t\t495\t1\tIfcText\t1\nPARAM\t84a6b374-b5c4-40d4-9d8c-142f0989e884\tPset_ProjectOrderWorkOrder.IfNotAccomplished[Type]\tTEXT\t\t495\t1\tIfcText\t1\nPARAM\tb134c868-8a47-4bd8-bdf2-5ced91ff2111\tPset_ProjectOrderWorkOrder.LongJobDescription[Type]\tTEXT\t\t495\t1\tIfcText\t1\nPARAM\t85a18f99-af80-4e97-9b25-8626172a3c73\tPset_ProjectOrderWorkOrder.ProductDescription[Type]\tTEXT\t\t495\t1\tIfcText\t1\nPARAM\t0e7cc50a-ec76-4a0b-b0ee-06d230c2ab16\tPset_ProjectOrderWorkOrder.ShortJobDescription[Type]\tTEXT\t\t495\t1\tIfcText\t1\nPARAM\t6502f844-2ee6-4ef6-a400-e23c387158a0\tPset_ProjectOrderWorkOrder.WorkTypeRequested[Type]\tTEXT\t\t495\t1\tIfcText\t1\n#\nGROUP\t496\tPset_PropertyAgreement\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3d12a1be-e923-40d6-baa6-0e3bafec2776\tPset_PropertyAgreement.AgreementDate[Type]\tTEXT\t\t496\t1\tIfcDate\t1\nPARAM\t92365283-7ea8-40cf-a4c7-f885ba647fe5\tPset_PropertyAgreement.AgreementType[Type]\tTEXT\t\t496\t1\tPEnum_PropertyAgreementType\t1\nPARAM\ta716f3f7-4d7e-461b-a8fd-0d8f617d33ef\tPset_PropertyAgreement.AgreementVersion[Type]\tTEXT\t\t496\t1\tIfcLabel\t1\nPARAM\t088f6499-3c55-49b7-af8f-185fe4791a79\tPset_PropertyAgreement.CommencementDate[Type]\tTEXT\t\t496\t1\tIfcDate\t1\nPARAM\tbe8f7f7c-c2cd-4583-9b52-2954ac057c3b\tPset_PropertyAgreement.ConditionCommencement[Type]\tTEXT\t\t496\t1\tIfcText\t1\nPARAM\t1b1f4221-5aa3-4a59-a571-3c3cd810b7fc\tPset_PropertyAgreement.ConditionTermination[Type]\tTEXT\t\t496\t1\tIfcText\t1\nPARAM\tec1e05cc-9ca8-4d1a-b3f8-acf5f9b6a2e8\tPset_PropertyAgreement.Duration[Type]\tTEXT\t\t496\t1\tIfcDuration\t1\nPARAM\tda8cb153-a820-4666-a0ff-bf9078be7dc3\tPset_PropertyAgreement.Identifier[Type]\tTEXT\t\t496\t1\tIfcIdentifier\t1\nPARAM\ta8562687-2632-485e-8553-039cf301b96d\tPset_PropertyAgreement.Options[Type]\tTEXT\t\t496\t1\tIfcText\t1\nPARAM\tbe6d1875-28de-4c71-81b1-ba60ead6007a\tPset_PropertyAgreement.PropertyName[Type]\tTEXT\t\t496\t1\tIfcLabel\t1\nPARAM\t51f1baaa-b423-40ab-bf3e-61ef8ad02cce\tPset_PropertyAgreement.Restrictions[Type]\tTEXT\t\t496\t1\tIfcText\t1\nPARAM\tced0ca40-5499-4450-857f-73151b8670e1\tPset_PropertyAgreement.TerminationDate[Type]\tTEXT\t\t496\t1\tIfcDate\t1\nPARAM\t320bb1f4-e7f6-4765-87a0-9dbf5da40b95\tPset_PropertyAgreement.TrackingIdentifier[Type]\tTEXT\t\t496\t1\tIfcIdentifier\t1\nPARAM\te08d5c9b-03e6-49cf-b90d-52ae9753c397\tPset_PropertyAgreement.Version[Type]\tTEXT\t\t496\t1\tIfcLabel\t1\nPARAM\t0445f196-36ef-43e8-b09b-a15c5fbc57d9\tPset_PropertyAgreement.VersionDate[Type]\tTEXT\t\t496\t1\tIfcDate\t1\n#\nGROUP\t497\tPset_ProtectiveDeviceBreakerUnitI2TCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcc3fda79-7f60-4a36-9823-a7a371e8245b\tPset_ProtectiveDeviceBreakerUnitI2TCurve.BreakerUnitCurve[Type]\tMULTILINETEXT\t\t497\t1\tPropertyTableValue\t1\nPARAM\tbe516c14-1204-46d8-be2e-42100c8c15cd\tPset_ProtectiveDeviceBreakerUnitI2TCurve.NominalCurrent[Type]\tNUMBER\t\t497\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t8cd50df0-3941-428e-921d-1da5f3e39f3f\tPset_ProtectiveDeviceBreakerUnitI2TCurve.VoltageLevel[Type]\tTEXT\t\t497\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t498\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbaff57f0-bba6-4e05-bad5-06355b150f28\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve.BreakerUnitFuseBreakingingCurve[Type]\tMULTILINETEXT\t\t498\t1\tPropertyTableValue\t1\nPARAM\ta7bae61b-3659-4de1-8624-139be1529f9f\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve.BreakerUnitFuseMeltingCurve[Type]\tMULTILINETEXT\t\t498\t1\tPropertyTableValue\t1\nPARAM\tdd2672b4-0704-47fa-ba0d-219a3d5b59d7\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve.VoltageLevel[Type]\tTEXT\t\t498\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t499\tPset_ProtectiveDeviceBreakerUnitIPICurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta8dfc754-ae97-4230-a450-16cff8824cbf\tPset_ProtectiveDeviceBreakerUnitIPICurve.BreakerUnitIPICurve[Type]\tMULTILINETEXT\t\t499\t1\tPropertyTableValue\t1\nPARAM\tfa555b05-8134-4389-84cb-682a6adfc686\tPset_ProtectiveDeviceBreakerUnitIPICurve.NominalCurrent[Type]\tNUMBER\t\t499\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t3bdbce25-5ca9-4741-8a5c-e00a392dd35a\tPset_ProtectiveDeviceBreakerUnitIPICurve.VoltageLevel[Type]\tTEXT\t\t499\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t500\tPset_ProtectiveDeviceBreakerUnitTypeMCB\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb08bfc35-e17a-4f98-b02f-513ae258ce7d\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICN60898[Type]\tNUMBER\t\t500\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tc6780110-b964-4808-8136-7af9224ae8f0\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICS60898[Type]\tNUMBER\t\t500\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t4b49d4b7-2c6f-41b9-84e0-25916fb956c3\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICS60947[Type]\tNUMBER\t\t500\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t4b489e35-b716-4ca3-a68e-b60dbfbc062f\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICU60947[Type]\tNUMBER\t\t500\t1\tIfcElectricCurrentMeasure\t1\nPARAM\te2de3ac0-60b0-443a-b10b-dc85305cdcd2\tPset_ProtectiveDeviceBreakerUnitTypeMCB.NominalCurrents[Type]\tMULTILINETEXT\t\t500\t1\tPropertyListValue\t1\nPARAM\tfc663b26-ff76-4f45-b3f4-1564c43f18cc\tPset_ProtectiveDeviceBreakerUnitTypeMCB.PowerLoss[Type]\tNUMBER\t\t500\t1\tIfcPowerMeasure\t1\nPARAM\tbae83c85-2c22-438c-9046-a4ce7d803ab8\tPset_ProtectiveDeviceBreakerUnitTypeMCB.VoltageLevel[Type]\tTEXT\t\t500\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t501\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6d31b0a5-d249-444d-929b-e7d64e3a7457\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICM60947[Type]\tNUMBER\t\t501\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t4ca67347-9f9d-4f0c-b8cf-e03a52397d48\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICS60947[Type]\tNUMBER\t\t501\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t3915f249-d71a-445f-add5-8314d4b09c1a\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICU60947[Type]\tNUMBER\t\t501\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t346bfee1-4060-442f-b246-dfb646f21271\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICW60947[Type]\tNUMBER\t\t501\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t5a8f0b7f-41a1-47db-92f6-52754a33c76e\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.PerformanceClasses[Type]\tMULTILINETEXT\t\t501\t1\tPropertyListValue\t1\nPARAM\t501eb86c-6689-4268-9d66-5e977bb96e90\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.VoltageLevel[Type]\tTEXT\t\t501\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t502\tPset_ProtectiveDeviceOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td694edb8-26ff-4743-99f2-0b58a34d5c4d\tPset_ProtectiveDeviceOccurrence.GroundFaultCurrentSetValue[Type]\tNUMBER\t\t502\t1\tIfcElectricCurrentMeasure\t1\nPARAM\teba1f8ae-07c9-4dc3-a65c-49ecfe8c6160\tPset_ProtectiveDeviceOccurrence.GroundFaultFunction[Type]\tYESNO\t\t502\t1\tIfcBoolean\t1\nPARAM\tdc1e0d1d-93d5-4091-95ee-db72d7c0e531\tPset_ProtectiveDeviceOccurrence.GroundFaulti2tFunction[Type]\tYESNO\t\t502\t1\tIfcBoolean\t1\nPARAM\tbb044ef6-02b4-4ac8-a30e-f150b91bc601\tPset_ProtectiveDeviceOccurrence.GroundFaultTrippingTime[Type]\tNUMBER\t\t502\t1\tIfcTimeMeasure\t1\nPARAM\t37b54793-d332-4bdf-8388-c5e8c8b8eff1\tPset_ProtectiveDeviceOccurrence.InstantaneousCurrentSetValue[Type]\tNUMBER\t\t502\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t2c5fc052-5173-455a-b8b9-47816884a2c6\tPset_ProtectiveDeviceOccurrence.InstantaneousTrippingTime[Type]\tNUMBER\t\t502\t1\tIfcTimeMeasure\t1\nPARAM\t33ffe19f-5bc4-45f1-8c1a-7f7f6953616a\tPset_ProtectiveDeviceOccurrence.LongTimeCurrentSetValue[Type]\tNUMBER\t\t502\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tf46888d0-62ff-4108-b756-333cbdef3cfe\tPset_ProtectiveDeviceOccurrence.LongTimeDelay[Type]\tNUMBER\t\t502\t1\tIfcTimeMeasure\t1\nPARAM\t5f47882d-1f09-4d2c-9158-fb62f57b474a\tPset_ProtectiveDeviceOccurrence.LongTimeFunction[Type]\tYESNO\t\t502\t1\tIfcBoolean\t1\nPARAM\t3ab2c022-ddda-44b4-9c3c-f2748be6ceaf\tPset_ProtectiveDeviceOccurrence.PoleUsage[Type]\tTEXT\t\t502\t1\tPEnum_PoleUsage\t1\nPARAM\td057085c-148e-49c0-8c62-95d2076caa76\tPset_ProtectiveDeviceOccurrence.ShortTimeCurrentSetValue[Type]\tNUMBER\t\t502\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t9d01a2ec-1ab9-4536-ad74-515716e47f53\tPset_ProtectiveDeviceOccurrence.ShortTimeFunction[Type]\tYESNO\t\t502\t1\tIfcBoolean\t1\nPARAM\tbe3e0e7d-842d-418e-84d0-88c65f3b70d4\tPset_ProtectiveDeviceOccurrence.ShortTimei2tFunction[Type]\tYESNO\t\t502\t1\tIfcBoolean\t1\nPARAM\t530d8df8-5c13-4fcd-86f9-0bf7cc3836c5\tPset_ProtectiveDeviceOccurrence.ShortTimeTrippingTime[Type]\tNUMBER\t\t502\t1\tIfcTimeMeasure\t1\n#\nGROUP\t503\tPset_ProtectiveDeviceTrippingCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tee7b331b-ae04-4847-8e01-08a5ecea3617\tPset_ProtectiveDeviceTrippingCurve.TrippingCurve[Type]\tMULTILINETEXT\t\t503\t1\tPropertyTableValue\t1\nPARAM\t40e71571-2459-4301-a3da-206cd2c34a69\tPset_ProtectiveDeviceTrippingCurve.TrippingCurveType[Type]\tTEXT\t\t503\t1\tPEnum_TrippingCurveType\t1\n#\nGROUP\t504\tPset_ProtectiveDeviceTrippingFunctionGCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1d1c4dda-bb03-4cbf-bd38-c0c68033b582\tPset_ProtectiveDeviceTrippingFunctionGCurve.CurrentTolerance1[Type]\tNUMBER\t\t504\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6189ddb1-ad58-43a0-9b42-979eb6fec1b8\tPset_ProtectiveDeviceTrippingFunctionGCurve.CurrentTolerance2[Type]\tNUMBER\t\t504\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t30861b67-1e0e-4d19-a22c-f502cc421bab\tPset_ProtectiveDeviceTrippingFunctionGCurve.CurrentToleranceLimit1[Type]\tNUMBER\t\t504\t1\tIfcTimeMeasure\t1\nPARAM\tc51cd6bb-52cb-480e-9a0e-f270133be362\tPset_ProtectiveDeviceTrippingFunctionGCurve.ExternalAdjusted[Type]\tYESNO\t\t504\t1\tIfcBoolean\t1\nPARAM\ted167458-aa8f-477e-97eb-00e8b4ece855\tPset_ProtectiveDeviceTrippingFunctionGCurve.IsCurrentTolerancePositiveOnly[Type]\tYESNO\t\t504\t1\tIfcBoolean\t1\nPARAM\taff32d30-2998-4e46-8cdb-8635ea93e2db\tPset_ProtectiveDeviceTrippingFunctionGCurve.IsSelectable[Type]\tYESNO\t\t504\t1\tIfcBoolean\t1\nPARAM\td758922b-5a56-4818-9129-71304845ea1d\tPset_ProtectiveDeviceTrippingFunctionGCurve.IsTimeTolerancePositiveOnly[Type]\tYESNO\t\t504\t1\tIfcBoolean\t1\nPARAM\t869e6158-0ab3-4628-99df-38ef6794618a\tPset_ProtectiveDeviceTrippingFunctionGCurve.NominalCurrentAdjusted[Type]\tYESNO\t\t504\t1\tIfcBoolean\t1\nPARAM\tadd5b49e-141c-46d7-973c-2ca989fc0b21\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrent[Type]\tNUMBER\t\t504\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tc6241f4a-8351-4f4d-87c4-bad9bcbb4218\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrentI2tEnd[Type]\tNUMBER\t\t504\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t1ceffb3a-ed86-45d0-88a1-fc0f549235ea\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrentI2tStart[Type]\tNUMBER\t\t504\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t37803fd2-3c84-4b51-9ed2-34999919342f\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTime[Type]\tNUMBER\t\t504\t1\tIfcTimeMeasure\t1\nPARAM\t4f3b5a86-c67a-4ae0-bb54-530c4e72a141\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTimeI2tEnd[Type]\tNUMBER\t\t504\t1\tIfcTimeMeasure\t1\nPARAM\td4abdbd2-9138-4809-bc56-fe37131ffdfe\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTimeI2tStart[Type]\tNUMBER\t\t504\t1\tIfcTimeMeasure\t1\nPARAM\t91680e15-9538-45d9-b87e-5590408b343d\tPset_ProtectiveDeviceTrippingFunctionGCurve.TimeTolerance1[Type]\tNUMBER\t\t504\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t406fba7b-d146-4d55-9478-241e7dd6ed2a\tPset_ProtectiveDeviceTrippingFunctionGCurve.TimeTolerance2[Type]\tNUMBER\t\t504\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t28e4187e-d2ae-43ba-9365-59ec9a53e72f\tPset_ProtectiveDeviceTrippingFunctionGCurve.TimeToleranceLimit1[Type]\tNUMBER\t\t504\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t505\tPset_ProtectiveDeviceTrippingFunctionICurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7be44cf-97cb-4c6b-b645-16955ab68ed1\tPset_ProtectiveDeviceTrippingFunctionICurve.CurrentTolerance1[Type]\tNUMBER\t\t505\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta500690d-4d6a-49b3-9e11-9d67f106984e\tPset_ProtectiveDeviceTrippingFunctionICurve.CurrentTolerance2[Type]\tNUMBER\t\t505\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t17691938-43e3-48ca-985e-c88199293e7e\tPset_ProtectiveDeviceTrippingFunctionICurve.CurrentToleranceLimit1[Type]\tNUMBER\t\t505\t1\tIfcTimeMeasure\t1\nPARAM\ta9d27ca8-d3a3-4835-851e-a69479d2916b\tPset_ProtectiveDeviceTrippingFunctionICurve.IsCurrentTolerancePositiveOnly[Type]\tYESNO\t\t505\t1\tIfcBoolean\t1\nPARAM\t56765725-6a4e-415b-8dbd-d05976bd84d7\tPset_ProtectiveDeviceTrippingFunctionICurve.IsOffWhenSFunctionOn[Type]\tYESNO\t\t505\t1\tIfcBoolean\t1\nPARAM\te80618d6-680a-4d3d-bb5f-b82d612db561\tPset_ProtectiveDeviceTrippingFunctionICurve.IsSelectable[Type]\tYESNO\t\t505\t1\tIfcBoolean\t1\nPARAM\tc796d049-319f-4193-822c-6345bcaf5a47\tPset_ProtectiveDeviceTrippingFunctionICurve.IsTimeTolerancePositiveOnly[Type]\tYESNO\t\t505\t1\tIfcBoolean\t1\nPARAM\ted7b106c-a138-4862-9647-65aaf2c3f10a\tPset_ProtectiveDeviceTrippingFunctionICurve.MaxAdjustmentX_ICS[Type]\tNUMBER\t\t505\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tdca1eb8d-7732-4a66-9d51-d489b0482520\tPset_ProtectiveDeviceTrippingFunctionICurve.NominalCurrentAdjusted[Type]\tYESNO\t\t505\t1\tIfcBoolean\t1\nPARAM\t736bf538-6613-4bd8-bcfe-25405f69147d\tPset_ProtectiveDeviceTrippingFunctionICurve.ReleaseCurrent[Type]\tNUMBER\t\t505\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t98dbc67f-aea7-4672-8c2b-8d00e1648f2b\tPset_ProtectiveDeviceTrippingFunctionICurve.ReleaseTime[Type]\tNUMBER\t\t505\t1\tIfcTimeMeasure\t1\nPARAM\tb7bcb326-62c1-4f12-af7b-ec5c696811ef\tPset_ProtectiveDeviceTrippingFunctionICurve.TimeTolerance1[Type]\tNUMBER\t\t505\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0c1efd0c-b7db-4f26-a9c9-3be2b71d987e\tPset_ProtectiveDeviceTrippingFunctionICurve.TimeTolerance2[Type]\tNUMBER\t\t505\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tdb60b3c1-4f90-4882-8df6-1d033053c860\tPset_ProtectiveDeviceTrippingFunctionICurve.TimeToleranceLimit1[Type]\tNUMBER\t\t505\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t506\tPset_ProtectiveDeviceTrippingFunctionLCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbcdf14ba-c844-45e0-a037-a56159039c65\tPset_ProtectiveDeviceTrippingFunctionLCurve.IsSelectable[Type]\tYESNO\t\t506\t1\tIfcBoolean\t1\nPARAM\t1ecec1db-9f33-4e22-b759-03d69d72a468\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerCurrent1[Type]\tNUMBER\t\t506\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t91481d75-3598-422b-abdf-35b3b1697cb9\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerCurrent2[Type]\tNUMBER\t\t506\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tc8a6a421-7c03-46a0-99ef-9a4cb148216b\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerTime1[Type]\tNUMBER\t\t506\t1\tIfcTimeMeasure\t1\nPARAM\t5e623474-23b1-4b66-af93-1c625620c900\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerTime2[Type]\tNUMBER\t\t506\t1\tIfcTimeMeasure\t1\nPARAM\tf988671a-66d1-4f7f-907e-3ead15e4ff3a\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperCurrent1[Type]\tNUMBER\t\t506\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t2e70e29c-e233-40dd-84ce-1aef4993d3ca\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperCurrent2[Type]\tNUMBER\t\t506\t1\tIfcElectricCurrentMeasure\t1\nPARAM\taee08d2f-9c1f-44a4-9f81-dc7d05d241be\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperTime1[Type]\tNUMBER\t\t506\t1\tIfcTimeMeasure\t1\nPARAM\t0637a03e-bb23-4b2f-a492-0829569f1500\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperTime2[Type]\tNUMBER\t\t506\t1\tIfcTimeMeasure\t1\n#\nGROUP\t507\tPset_ProtectiveDeviceTrippingFunctionSCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7bcbad53-9ddf-4538-b9e3-c82df982d936\tPset_ProtectiveDeviceTrippingFunctionSCurve.CurrentTolerance1[Type]\tNUMBER\t\t507\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4543e1ac-9d78-4e7b-868c-3f62b45d366d\tPset_ProtectiveDeviceTrippingFunctionSCurve.CurrentTolerance2[Type]\tNUMBER\t\t507\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc547a99f-990f-418e-8b31-80de9f55180b\tPset_ProtectiveDeviceTrippingFunctionSCurve.CurrentToleranceLimit1[Type]\tNUMBER\t\t507\t1\tIfcTimeMeasure\t1\nPARAM\tcd440920-29d5-409f-84db-23361888d665\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsCurrentTolerancePositiveOnly[Type]\tYESNO\t\t507\t1\tIfcBoolean\t1\nPARAM\t7729f4a7-7341-42f9-b559-e75bac95bbe7\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsOffWhenLfunctionOn[Type]\tYESNO\t\t507\t1\tIfcBoolean\t1\nPARAM\tfcc72729-4637-44b0-ab7a-5480c75b30fc\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsSelectable[Type]\tYESNO\t\t507\t1\tIfcBoolean\t1\nPARAM\t6503b228-11a7-4548-b4fb-28deafb2dde4\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsTimeTolerancePositiveOnly[Type]\tYESNO\t\t507\t1\tIfcBoolean\t1\nPARAM\t97f950c9-0cbe-49cd-9194-61d67eeebfd8\tPset_ProtectiveDeviceTrippingFunctionSCurve.NominalCurrentAdjusted[Type]\tYESNO\t\t507\t1\tIfcBoolean\t1\nPARAM\t4475fd16-4853-4313-9dc8-5e02176915a6\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrent[Type]\tNUMBER\t\t507\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t8695c64a-c211-4612-9455-448bfc20da35\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrentI2tEnd[Type]\tNUMBER\t\t507\t1\tIfcElectricCurrentMeasure\t1\nPARAM\te0732242-6c9a-4dfd-bf39-046e87070144\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrentI2tStart[Type]\tNUMBER\t\t507\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t2599b263-1946-4ae0-9f02-2f8cab0c9bcb\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTime[Type]\tNUMBER\t\t507\t1\tIfcTimeMeasure\t1\nPARAM\t0454af6d-7211-4ec3-8a1d-0643f0ff7b7d\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTimeI2tEnd[Type]\tNUMBER\t\t507\t1\tIfcTimeMeasure\t1\nPARAM\t98c97b32-de98-4271-811b-80520d03a4c7\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTimeI2tStart[Type]\tNUMBER\t\t507\t1\tIfcTimeMeasure\t1\nPARAM\t21487547-699e-4e3d-9df9-636c1151dc7f\tPset_ProtectiveDeviceTrippingFunctionSCurve.TimeTolerance1[Type]\tNUMBER\t\t507\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t9a531081-2071-43d2-84ee-07e75496981f\tPset_ProtectiveDeviceTrippingFunctionSCurve.TimeTolerance2[Type]\tNUMBER\t\t507\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tb7f27037-c363-4181-9358-fc176264561a\tPset_ProtectiveDeviceTrippingFunctionSCurve.TimeToleranceLimit1[Type]\tNUMBER\t\t507\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t508\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbd4cd8ed-d5bc-41ac-8380-ee33a5fc54e2\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentDesignation[Type]\tTEXT\t\t508\t1\tIfcLabel\t1\nPARAM\tbbad222e-b755-4568-83a2-f4b2d9ecb23a\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentRange[Type]\tMULTILINETEXT\t\t508\t1\tPropertyBoundedValue\t1\nPARAM\tc773f53a-446b-48f2-8807-a164a04b1605\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentRangeStepValue[Type]\tNUMBER\t\t508\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t8e473db4-21ba-4f12-9a05-11ef038f756c\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentValues[Type]\tMULTILINETEXT\t\t508\t1\tPropertyListValue\t1\nPARAM\tcb909e7b-2d0e-4d95-8a87-46ee218f0b20\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentValueType[Type]\tTEXT\t\t508\t1\tPEnum_AdjustmentValueType\t1\nPARAM\tc7c317ea-17ee-4905-b8ba-2fe6e0083186\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.CurrentAdjustmentRange[Type]\tMULTILINETEXT\t\t508\t1\tPropertyBoundedValue\t1\nPARAM\teacd43b1-210d-4a26-8631-58ae71e14012\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.CurrentAdjustmentRangeStepValue[Type]\tNUMBER\t\t508\t1\tIfcElectricCurrentMeasure\t1\nPARAM\ta38175ec-9f36-49e9-9315-443b9adfb64a\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.CurrentAdjustmentValues[Type]\tMULTILINETEXT\t\t508\t1\tPropertyListValue\t1\n#\nGROUP\t509\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t271027ab-d511-4d39-9a7e-81754cb69e45\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentDesignation[Type]\tTEXT\t\t509\t1\tIfcLabel\t1\nPARAM\te983684c-5d8f-4237-ab18-e7537fdf4c6a\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentRange[Type]\tMULTILINETEXT\t\t509\t1\tPropertyBoundedValue\t1\nPARAM\t657cdcc4-e84c-42c8-ab33-38451159031a\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentRangeStepValue[Type]\tNUMBER\t\t509\t1\tIfcTimeMeasure\t1\nPARAM\t088c1eef-73b6-4f01-8c45-183580605b0c\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentValues[Type]\tMULTILINETEXT\t\t509\t1\tPropertyListValue\t1\nPARAM\tc29ca0b2-0d13-4c95-92a5-2f4571ee2757\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentValueType[Type]\tTEXT\t\t509\t1\tPEnum_AdjustmentValueType\t1\nPARAM\tce20014b-7682-4887-8155-5d21b9220690\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.CurrentForTimeDelay[Type]\tNUMBER\t\t509\t1\tIfcTimeMeasure\t1\nPARAM\t4ccd136e-4cf7-4057-acb1-0b013ba79edf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.I2TApplicability[Type]\tTEXT\t\t509\t1\tPEnum_AdjustmentValueType\t1\nPARAM\t3e80c374-b18d-46fc-aa80-49332ead4325\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.TimeAdjustmentRange[Type]\tMULTILINETEXT\t\t509\t1\tPropertyBoundedValue\t1\nPARAM\tf0a25bac-5817-4b2d-820d-ce5314a44e58\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.TimeAdjustmentRangeStepValue[Type]\tNUMBER\t\t509\t1\tIfcTimeMeasure\t1\nPARAM\ta13d50c1-4b72-4aa8-a829-9439a7359d6b\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.TimeAdjustmentValues[Type]\tMULTILINETEXT\t\t509\t1\tPropertyListValue\t1\n#\nGROUP\t510\tPset_ProtectiveDeviceTrippingUnitTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc4bbe3ab-977f-4bf4-b613-a444dd895f1a\tPset_ProtectiveDeviceTrippingUnitTypeCommon.AtexVerified[Type]\tYESNO\t\t510\t1\tIfcBoolean\t1\nPARAM\t53420746-1f27-403e-8c98-32f71d256627\tPset_ProtectiveDeviceTrippingUnitTypeCommon.LimitingTerminalSize[Type]\tAREA\t\t510\t1\tIfcAreaMeasure\t1\nPARAM\ta18fa980-86c2-4f90-86a0-c9d5666ea1e2\tPset_ProtectiveDeviceTrippingUnitTypeCommon.OldDevice[Type]\tYESNO\t\t510\t1\tIfcBoolean\t1\nPARAM\teb30a072-fcab-4ae1-a03c-52493befee34\tPset_ProtectiveDeviceTrippingUnitTypeCommon.Reference[Type]\tTEXT\t\t510\t1\tIfcIdentifier\t1\nPARAM\t9c6ad63c-3c9f-4d17-ab35-81829e7aa3d0\tPset_ProtectiveDeviceTrippingUnitTypeCommon.Standard[Type]\tTEXT\t\t510\t1\tIfcLabel\t1\nPARAM\t19395281-709b-4be4-b5c8-3fe692937606\tPset_ProtectiveDeviceTrippingUnitTypeCommon.Status[Type]\tTEXT\t\t510\t1\tPEnum_ElementStatus\t1\nPARAM\t897dd7f0-3047-430c-8554-b1d52b01828e\tPset_ProtectiveDeviceTrippingUnitTypeCommon.UseInDiscrimination[Type]\tYESNO\t\t510\t1\tIfcBoolean\t1\n#\nGROUP\t511\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb6fa515d-0208-41bb-8510-dba7f492f25c\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.CurveDesignation[Type]\tTEXT\t\t511\t1\tIfcLabel\t1\nPARAM\tc77defb3-3c20-46ff-9459-bd485366a42e\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.DefinedTemperature[Type]\tNUMBER\t\t511\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t7505fd8b-7cc4-4660-aa68-c8cdb0f1c19c\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.ElectroMagneticTrippingUnitType[Type]\tTEXT\t\t511\t1\tPEnum_ElectroMagneticTrippingUnitType\t1\nPARAM\t504a6faf-d7fb-4379-9b44-88c6d5ee6101\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I1[Type]\tNUMBER\t\t511\t1\tIfcReal\t1\nPARAM\t1455f9be-b855-4174-8da7-79c28d5586ac\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I2[Type]\tNUMBER\t\t511\t1\tIfcReal\t1\nPARAM\te5a2b7f1-f5cd-4ffb-8730-7b6be3b91282\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I4[Type]\tNUMBER\t\t511\t1\tIfcReal\t1\nPARAM\t39516e94-4c05-4906-9642-05ac498c86e5\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I5[Type]\tNUMBER\t\t511\t1\tIfcReal\t1\nPARAM\t8be8077e-5fd6-41dd-9ca4-a6e157cafafd\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.T2[Type]\tNUMBER\t\t511\t1\tIfcTimeMeasure\t1\nPARAM\t5993d76c-d8d3-43df-93a3-c563bf415d45\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.T5[Type]\tNUMBER\t\t511\t1\tIfcTimeMeasure\t1\nPARAM\t1b39fd28-372b-4384-9c9c-80aa6ebeaccd\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.TemperatureFactor[Type]\tNUMBER\t\t511\t1\tIfcRatioMeasure\t1\n#\nGROUP\t512\tPset_ProtectiveDeviceTrippingUnitTypeElectronic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t30e24326-0e9c-484d-8e13-8f2a26988919\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.ElectronicTrippingUnitType[Type]\tTEXT\t\t512\t1\tPEnum_ElectronicTrippingUnitType\t1\nPARAM\tb9a097c4-25f6-49a1-8282-ea541fee0a09\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection[Type]\tYESNO\t\t512\t1\tIfcBoolean\t1\nPARAM\tecb440bd-9d95-45fa-b9c4-4fb63a056bb2\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_100[Type]\tYESNO\t\t512\t1\tIfcBoolean\t1\nPARAM\tbd70efcf-0491-4f37-8716-b53f7a05520d\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_50[Type]\tYESNO\t\t512\t1\tIfcBoolean\t1\nPARAM\ta4d8b27f-0d88-4e03-9eec-8c4ebce3d750\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_Select[Type]\tYESNO\t\t512\t1\tIfcBoolean\t1\nPARAM\t80bd9f3c-20c8-460c-80f2-bfac54dc1d50\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.NominalCurrents[Type]\tMULTILINETEXT\t\t512\t1\tPropertyListValue\t1\n#\nGROUP\t513\tPset_ProtectiveDeviceTrippingUnitTypeResidualCurrent\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tebf0745e-ecb7-4034-a091-9b3ec9048b32\tPset_ProtectiveDeviceTrippingUnitTypeResidualCurrent.TrippingUnitReleaseCurrent[Type]\tTEXT\t\t513\t1\tPEnum_TrippingUnitReleaseCurrent\t1\n#\nGROUP\t514\tPset_ProtectiveDeviceTrippingUnitTypeThermal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td8b04e63-08f2-4ff9-8213-f22634921d49\tPset_ProtectiveDeviceTrippingUnitTypeThermal.CurveDesignation[Type]\tTEXT\t\t514\t1\tIfcLabel\t1\nPARAM\t646e6e2f-82fc-4c79-838a-f65330e76129\tPset_ProtectiveDeviceTrippingUnitTypeThermal.DefinedTemperature[Type]\tNUMBER\t\t514\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\te96f3b75-432a-4f38-9144-221b08ebccd5\tPset_ProtectiveDeviceTrippingUnitTypeThermal.I1[Type]\tNUMBER\t\t514\t1\tIfcReal\t1\nPARAM\t423d14db-932b-463e-8799-8b74366ac837\tPset_ProtectiveDeviceTrippingUnitTypeThermal.I2[Type]\tNUMBER\t\t514\t1\tIfcReal\t1\nPARAM\t473e8b7e-ae96-4a4a-a20e-3e46ea9cb8cf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.T2[Type]\tNUMBER\t\t514\t1\tIfcTimeMeasure\t1\nPARAM\t35809035-050b-4fbe-a621-7a56446f8298\tPset_ProtectiveDeviceTrippingUnitTypeThermal.TemperatureFactor[Type]\tNUMBER\t\t514\t1\tIfcRatioMeasure\t1\nPARAM\t9c2ace7f-7033-4afe-88ca-6cac7d9c1e0d\tPset_ProtectiveDeviceTrippingUnitTypeThermal.ThermalTrippingUnitType[Type]\tTEXT\t\t514\t1\tPEnum_ThermalTrippingUnitType\t1\n#\nGROUP\t515\tPset_ProtectiveDeviceTypeAntiArcingDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf1f2bbc3-5931-419e-bc85-d659364125a5\tPset_ProtectiveDeviceTypeAntiArcingDevice.GroundingType[Type]\tTEXT\t\t515\t1\tIfcLabel\t1\nPARAM\t6a937a7d-2cdb-4273-a6cf-b5d300204e16\tPset_ProtectiveDeviceTypeAntiArcingDevice.RatedVoltage[Type]\tMULTILINETEXT\t\t515\t1\tPropertyBoundedValue\t1\n#\nGROUP\t516\tPset_ProtectiveDeviceTypeCircuitBreaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te45a2d14-34f4-4f21-a845-2e9232fe5686\tPset_ProtectiveDeviceTypeCircuitBreaker.CircuitBreakerType[Type]\tTEXT\t\t516\t1\tPEnum_CircuitBreakerType\t1\nPARAM\t38d349a6-f89b-4b52-a49c-3b9ab9ddf19a\tPset_ProtectiveDeviceTypeCircuitBreaker.ICM60947[Type]\tNUMBER\t\t516\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t1fb7138e-4216-428a-804f-f5b3af04648a\tPset_ProtectiveDeviceTypeCircuitBreaker.ICS60947[Type]\tNUMBER\t\t516\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t9e50213f-eaa7-42ca-8aad-57f903829293\tPset_ProtectiveDeviceTypeCircuitBreaker.ICU60947[Type]\tNUMBER\t\t516\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t83dc2306-b671-4a97-b81d-c686c3cdee3c\tPset_ProtectiveDeviceTypeCircuitBreaker.ICW60947[Type]\tNUMBER\t\t516\t1\tIfcElectricCurrentMeasure\t1\nPARAM\td2121096-66e8-4252-8581-60a9d94b999b\tPset_ProtectiveDeviceTypeCircuitBreaker.PerformanceClasses[Type]\tMULTILINETEXT\t\t516\t1\tPropertyListValue\t1\nPARAM\tc6eadec8-e9a8-433a-9666-320b7f9c1586\tPset_ProtectiveDeviceTypeCircuitBreaker.VoltageLevel[Type]\tTEXT\t\t516\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t517\tPset_ProtectiveDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t643c740f-5619-4a9b-982d-6a9bca5e2090\tPset_ProtectiveDeviceTypeCommon.CharacteristicTripCurve[Type]\tMULTILINETEXT\t\t517\t1\tPropertyTableValue\t1\nPARAM\t820a0319-2644-4c7b-93bd-b09e0c0f2e24\tPset_ProtectiveDeviceTypeCommon.CutOffCurrent[Type]\tNUMBER\t\t517\t1\t IfcElectricCurrentMeasure\t1\nPARAM\t86279e6c-ce3a-488a-9475-b9aec6f39395\tPset_ProtectiveDeviceTypeCommon.LimitingTerminalSize[Type]\tAREA\t\t517\t1\tIfcAreaMeasure\t1\nPARAM\tb62d0e35-2397-4c52-8897-0fdbc3a7d931\tPset_ProtectiveDeviceTypeCommon.MaximumRatedVoltage[Type]\tNUMBER\t\t517\t1\t IfcElectricVoltageMeasure\t1\nPARAM\t2634b74d-6605-46b6-80ac-512b1ce8d1b2\tPset_ProtectiveDeviceTypeCommon.ProtectiveTagType[Type]\tTEXT\t\t517\t1\tIfcLabel\t1\nPARAM\t068f5a2a-497e-4e35-a773-a339d4bbccd8\tPset_ProtectiveDeviceTypeCommon.RatedShortCircuitCurrent[Type]\tNUMBER\t\t517\t1\t IfcElectricCurrentMeasure\t1\nPARAM\t93a8f2df-b5ac-4776-ac2d-d1a1a4da2f20\tPset_ProtectiveDeviceTypeCommon.Reference[Type]\tTEXT\t\t517\t1\tIfcIdentifier\t1\nPARAM\tc731ff6b-5f7d-439b-b91e-99dd777c49aa\tPset_ProtectiveDeviceTypeCommon.StandardUsed[Type]\tTEXT\t\t517\t1\tIfcLabel\t1\nPARAM\t0c6398d0-57d5-4ef7-b9f7-ce08f20634a7\tPset_ProtectiveDeviceTypeCommon.Status[Type]\tTEXT\t\t517\t1\tPEnum_ElementStatus\t1\nPARAM\t9b9b0979-f8b3-4369-a6f8-84b601106821\tPset_ProtectiveDeviceTypeCommon.SwitchingDuty[Type]\tINTEGER\t\t517\t1\tIfcInteger\t1\n#\nGROUP\t518\tPset_ProtectiveDeviceTypeEarthFailureDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcb39fef5-0e66-4610-87e5-18bd86efdd7d\tPset_ProtectiveDeviceTypeEarthFailureDevice.EarthFailureDeviceType[Type]\tTEXT\t\t518\t1\tPEnum_EarthFailureDeviceType\t1\nPARAM\t5f308d20-4a39-4f21-add4-dddf68727d7a\tPset_ProtectiveDeviceTypeEarthFailureDevice.Sensitivity[Type]\tNUMBER\t\t518\t1\t IfcElectricCurrentMeasure\t1\n#\nGROUP\t519\tPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9442e339-9aec-4884-b1ca-38eca88b993c\tPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker.EarthFailureDeviceType[Type]\tTEXT\t\t519\t1\tPEnum_EarthFailureDeviceType\t1\nPARAM\t02f4d5aa-125e-47b0-b436-84f4a25d7c4b\tPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker.Sensitivity[Type]\tNUMBER\t\t519\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t520\tPset_ProtectiveDeviceTypeFuseDisconnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t117d6fbd-339e-46e4-8df0-361d770e28bc\tPset_ProtectiveDeviceTypeFuseDisconnector.ArcExtinctionType[Type]\tTEXT\t\t520\t1\tIfcLabel\t1\nPARAM\t024e500f-422c-4eb9-97e3-48d8c47e9089\tPset_ProtectiveDeviceTypeFuseDisconnector.BreakingCapacity[Type]\tNUMBER\t\t520\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t925578c1-1e07-46a5-b6b7-7de4e9445d5f\tPset_ProtectiveDeviceTypeFuseDisconnector.FuseDisconnectorType[Type]\tTEXT\t\t520\t1\tPEnum_FuseDisconnectorType\t1\nPARAM\tb155c0c6-b618-47b3-a619-5d7e8a6cd771\tPset_ProtectiveDeviceTypeFuseDisconnector.IC60269[Type]\tNUMBER\t\t520\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tb7c2343d-f185-47b1-b64a-742827c91a09\tPset_ProtectiveDeviceTypeFuseDisconnector.NominalCurrent[Type]\tNUMBER\t\t520\t1\tIfcElectricCurrentMeasure\t1\nPARAM\td5a1b335-1f82-4666-9bc4-c8de731afc44\tPset_ProtectiveDeviceTypeFuseDisconnector.NominalFrequency[Type]\tNUMBER\t\t520\t1\tIfcFrequencyMeasure\t1\nPARAM\t46a9094d-1ed5-4b63-ac7f-d6d989087be1\tPset_ProtectiveDeviceTypeFuseDisconnector.NumberOfPhases[Type]\tINTEGER\t\t520\t1\tIfcCountMeasure\t1\nPARAM\t35e26815-efb7-44be-ae6e-61831641e187\tPset_ProtectiveDeviceTypeFuseDisconnector.NumberOfPoles[Type]\tINTEGER\t\t520\t1\tIfcCountMeasure\t1\nPARAM\t51a2851b-5f60-4412-a73f-d8e8ae9fcc88\tPset_ProtectiveDeviceTypeFuseDisconnector.PowerLoss[Type]\tNUMBER\t\t520\t1\tIfcPowerMeasure\t1\nPARAM\t1465d0f8-7bb5-49e5-ac0a-f9bb0c26e36c\tPset_ProtectiveDeviceTypeFuseDisconnector.RatedVoltage[Type]\tMULTILINETEXT\t\t520\t1\tPropertyBoundedValue\t1\nPARAM\t5c54a69a-d53a-44e3-89a9-a91dadb78300\tPset_ProtectiveDeviceTypeFuseDisconnector.ReferenceEnvironmentTemperature[Type]\tMULTILINETEXT\t\t520\t1\tPropertyBoundedValue\t1\nPARAM\t8b20176b-2752-42eb-98ca-003f9e15cd19\tPset_ProtectiveDeviceTypeFuseDisconnector.TransformationRatio[Type]\tNUMBER\t\t520\t1\tIfcRatioMeasure\t1\nPARAM\t82414caa-7eeb-4fdf-a086-ff0fe7ce3c1c\tPset_ProtectiveDeviceTypeFuseDisconnector.VoltageLevel[Type]\tTEXT\t\t520\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t521\tPset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5858dad0-03b8-4313-9f25-f7ede73ee9c2\tPset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker.Sensitivity[Type]\tNUMBER\t\t521\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t522\tPset_ProtectiveDeviceTypeResidualCurrentSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t020b4c03-a33b-45aa-85b9-fd470ca89cc5\tPset_ProtectiveDeviceTypeResidualCurrentSwitch.Sensitivity[Type]\tNUMBER\t\t522\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t523\tPset_ProtectiveDeviceTypeSparkGap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7c3ab348-ad93-44b2-bb84-590ea6491196\tPset_ProtectiveDeviceTypeSparkGap.BreakdownVoltageTolerance[Type]\tNUMBER\t\t523\t1\tIfcElectricVoltageMeasure\t1\nPARAM\ta844f042-5f00-4495-a98c-85129b07533c\tPset_ProtectiveDeviceTypeSparkGap.Capacitance[Type]\tNUMBER\t\t523\t1\tIfcElectricCapacitanceMeasure\t1\nPARAM\t311a5c82-66c1-44cc-a81a-4f66ac48eb58\tPset_ProtectiveDeviceTypeSparkGap.CurrentRMS[Type]\tNUMBER\t\t523\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t0af14dff-4c0b-4c1a-b8e3-b4e80ddb1a1b\tPset_ProtectiveDeviceTypeSparkGap.PowerDissipation[Type]\tNUMBER\t\t523\t1\tIfcPowerMeasure\t1\nPARAM\t4a48dd25-242b-404d-9521-3c03c9b1dec9\tPset_ProtectiveDeviceTypeSparkGap.Resistivity[Type]\tNUMBER\t\t523\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t1fc6622e-c6ae-483a-b766-559675849506\tPset_ProtectiveDeviceTypeSparkGap.SparkGapType[Type]\tTEXT\t\t523\t1\tPEnum_SparkGapType\t1\n#\nGROUP\t524\tPset_ProtectiveDeviceTypeVaristor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te92bfce3-cbce-42d5-86f1-489b24c44681\tPset_ProtectiveDeviceTypeVaristor.CharacteristicFunction[Type]\tTEXT\t\t524\t1\tIfcText\t1\nPARAM\td67c8584-8263-4e75-b4ea-00b9dcb82837\tPset_ProtectiveDeviceTypeVaristor.VaristorType[Type]\tTEXT\t\t524\t1\tPEnum_VaristorType\t1\n#\nGROUP\t525\tPset_ProvisionForVoid\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0428b352-4c97-4144-9809-ea94223d48c6\tPset_ProvisionForVoid.Depth[Type]\tLENGTH\t\t525\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb5569075-4b01-4c82-a197-22c2f13025ec\tPset_ProvisionForVoid.Diameter[Type]\tLENGTH\t\t525\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t704af398-64f4-4b22-8087-74860bde42fd\tPset_ProvisionForVoid.Height[Type]\tLENGTH\t\t525\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4ec26f44-67f5-47a1-8662-caa70f379d13\tPset_ProvisionForVoid.System[Type]\tTEXT\t\t525\t1\tIfcLabel\t1\nPARAM\t0491005a-3819-42e3-b4ea-15a8cd24540c\tPset_ProvisionForVoid.VoidShape[Type]\tTEXT\t\t525\t1\tIfcLabel\t1\nPARAM\t35418721-bae7-4e6d-86a5-5be9c7c46f01\tPset_ProvisionForVoid.Width[Type]\tLENGTH\t\t525\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t526\tPset_PumpOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7d5002c8-fd3b-4c82-9aab-e5b1ae002fcb\tPset_PumpOccurrence.BaseType[Type]\tTEXT\t\t526\t1\tPEnum_PumpBaseType\t1\nPARAM\t613c1381-b8da-4d72-9b4c-195b1926cef6\tPset_PumpOccurrence.DriveConnectionType[Type]\tTEXT\t\t526\t1\tPEnum_PumpDriveConnectionType\t1\nPARAM\t1bdf5d2b-862d-4d41-9c96-1ee87c2ecc4f\tPset_PumpOccurrence.ImpellerDiameter[Type]\tLENGTH\t\t526\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t527\tPset_PumpPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t185cdc3a-e4c1-4bbb-8221-bf21ce06a8bd\tPset_PumpPHistory.Flowrate[Type]\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\nPARAM\td7e06609-8236-4ac8-8e89-ff631f7ca512\tPset_PumpPHistory.MechanicalEfficiency[Type]\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\nPARAM\tf30cf953-28b5-4ffe-bc34-971138d21472\tPset_PumpPHistory.OverallEfficiency[Type]\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\nPARAM\t56f35c39-a983-4cc7-ab2c-1fbb621fae87\tPset_PumpPHistory.Power[Type]\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\nPARAM\tbc7d8312-7c0b-463f-b65e-52f88b446773\tPset_PumpPHistory.PowerHistory[Type]\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\nPARAM\td48f50af-30e3-4c02-bccc-7850fbafd3e2\tPset_PumpPHistory.PressureRise[Type]\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\nPARAM\tbb3acab9-15b8-4141-b174-e649bd73fe69\tPset_PumpPHistory.RotationSpeed[Type]\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\n#\nGROUP\t528\tPset_PumpTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5da03394-96f8-44b7-95ae-2154c30d5939\tPset_PumpTypeCommon.CasingMaterial[Type]\tMULTILINETEXT\t\t528\t1\tIfcMaterial\t1\nPARAM\t235f295a-3910-46f0-ae14-cc3c435f6643\tPset_PumpTypeCommon.ConnectionSize[Type]\tLENGTH\t\t528\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t39ce70e6-04c0-4407-af87-fd0bdff32b81\tPset_PumpTypeCommon.FlowRateRange[Type]\tMULTILINETEXT\t\t528\t1\tPropertyBoundedValue\t1\nPARAM\t55c0ebae-4164-43bf-b8c3-942914ccfa6b\tPset_PumpTypeCommon.FlowResistanceRange[Type]\tMULTILINETEXT\t\t528\t1\tPropertyBoundedValue\t1\nPARAM\t07c9b273-67c3-4692-b470-ad3b04582123\tPset_PumpTypeCommon.ImpellerMaterial[Type]\tMULTILINETEXT\t\t528\t1\tIfcMaterial\t1\nPARAM\tf9a78937-f369-497a-90a0-7004702a6856\tPset_PumpTypeCommon.ImpellerSealMaterial[Type]\tMULTILINETEXT\t\t528\t1\tIfcMaterial\t1\nPARAM\t5dad4a1d-afe7-4f68-883d-071aa71d3030\tPset_PumpTypeCommon.NetPositiveSuctionHead[Type]\tNUMBER\t\t528\t1\tIfcPressureMeasure\t1\nPARAM\ta635dd8e-5614-44c9-a6d3-07dede539383\tPset_PumpTypeCommon.NominalRotationSpeed[Type]\tNUMBER\t\t528\t1\tIfcRotationalFrequencyMeasure\t1\nPARAM\t739e5787-eb43-4095-a0dc-a3ff3ca906e1\tPset_PumpTypeCommon.Reference[Type]\tTEXT\t\t528\t1\tIfcIdentifier\t1\nPARAM\t6bc66f6d-59b3-416f-9a4b-2792c5572966\tPset_PumpTypeCommon.Status[Type]\tTEXT\t\t528\t1\tPEnum_ElementStatus\t1\nPARAM\t04d2cf49-17bc-4edc-acfc-520041eecd28\tPset_PumpTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t528\t1\tPropertyBoundedValue\t1\n#\nGROUP\t529\tPset_QuantityTakeOff\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7237e897-0f36-4ae7-9f56-807f5fff8f9d\tPset_QuantityTakeOff.LayerQuantity.LocalContext[Type]\tTEXT\t\t529\t1\tIfcText\t1\nPARAM\t5042ef0a-cae5-412c-acff-54bde41436eb\tPset_QuantityTakeOff.LayerQuantity.MaterialLayer[Type]\tTEXT\t\t529\t1\tIfcIdentifier\t1\nPARAM\t430e05bd-149a-4974-9fe9-5ec2718d173f\tPset_QuantityTakeOff.LocalContext[Type]\tTEXT\t\t529\t1\tIfcText\t1\nPARAM\t801424db-56c7-4050-8602-b76d3f2c31a8\tPset_QuantityTakeOff.Reference[Type]\tTEXT\t\t529\t1\tIfcIdentifier\t1\n#\nGROUP\t530\tPset_QuayCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t86b14b2e-84fa-4f34-bae1-3cb9ba7706ab\tPset_QuayCommon.BentSpacing[Type]\tLENGTH\t\t530\t1\tIfcLengthMeasure\t1\nPARAM\tae904cff-a493-4eb5-b02d-49e05814f7ef\tPset_QuayCommon.Elevation[Type]\tLENGTH\t\t530\t1\tIfcLengthMeasure\t1\nPARAM\tc4757114-7111-4bf0-a519-427d627787cd\tPset_QuayCommon.QuaySectionType[Type]\tTEXT\t\t530\t1\tPEnum_SectionType\t1\nPARAM\t10a35be7-1d09-4ea0-998d-dd0fd95c2062\tPset_QuayCommon.StructuralType[Type]\tTEXT\t\t530\t1\tIfcLabel\t1\n#\nGROUP\t531\tPset_QuayDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdae054db-19e9-4264-9eaa-273e12042223\tPset_QuayDesignCriteria.EquipmentLoading[Type]\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\nPARAM\t8f31aebf-641c-43db-90b2-d2c546fddbe3\tPset_QuayDesignCriteria.ExtremeHighWaterLevel[Type]\tLENGTH\t\t531\t1\tIfcLengthMeasure\t1\nPARAM\t7ba9f1ec-bfc3-457c-81bc-85c1afdb9efb\tPset_QuayDesignCriteria.ExtremeLowWaterLevel[Type]\tLENGTH\t\t531\t1\tIfcLengthMeasure\t1\nPARAM\t5c9f7e25-9a72-47cb-8c3d-3ba21bd20354\tPset_QuayDesignCriteria.FlowLoading[Type]\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\nPARAM\t064bc8a2-6ee0-4c2d-a2e3-3ff3a7b79e54\tPset_QuayDesignCriteria.HighWaterLevel[Type]\tLENGTH\t\t531\t1\tIfcLengthMeasure\t1\nPARAM\t1611bc9e-2f23-4c16-bb35-f44214c5671b\tPset_QuayDesignCriteria.LowWaterLevel[Type]\tLENGTH\t\t531\t1\tIfcLengthMeasure\t1\nPARAM\tbb1afb6e-8ec0-493b-b3c7-e92b54b759cd\tPset_QuayDesignCriteria.ShipLoading[Type]\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\nPARAM\t4d24d2b7-61b7-4a23-8b00-61ab2a850095\tPset_QuayDesignCriteria.UniformlyDistributedLoad[Type]\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\nPARAM\t85cc7e0a-348b-460d-b58b-e9d6354486dc\tPset_QuayDesignCriteria.WaveLoading[Type]\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\n#\nGROUP\t532\tPset_RadiiKerbStone\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9e0312ec-5a3a-4072-814a-906a02bfe6a6\tPset_RadiiKerbStone.CurveShape[Type]\tTEXT\t\t532\t1\tPEnum_CurveShapeEnum\t1\nPARAM\tf7190747-3665-463f-92ec-f52a87423669\tPset_RadiiKerbStone.Radius[Type]\tLENGTH\t\t532\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t533\tPset_RailingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t92a4fdf0-1d88-4786-8c42-5fe075dd3414\tPset_RailingCommon.Diameter[Type]\tLENGTH\t\t533\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t28e3aa6a-7869-4ba4-8fb5-89b3dbdd8912\tPset_RailingCommon.Height[Type]\tLENGTH\t\t533\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0f1544f8-aabc-41c3-ab69-1ef7e50a214b\tPset_RailingCommon.IsExternal[Type]\tYESNO\t\t533\t1\tIfcBoolean\t1\nPARAM\t9bc2b804-b5f0-4d76-8cf5-d38e6e471a15\tPset_RailingCommon.Reference[Type]\tTEXT\t\t533\t1\tIfcIdentifier\t1\nPARAM\tb1a3a5bc-2603-4220-94a8-a64e43ffbb9d\tPset_RailingCommon.Status[Type]\tTEXT\t\t533\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t534\tPset_RailTypeBlade\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t78e4c0da-3856-467e-b869-7f8f60785286\tPset_RailTypeBlade.BladeRadius[Type]\tLENGTH\t\t534\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0f0e5247-670c-490b-8ac8-40e840ac9f8b\tPset_RailTypeBlade.IsArticulatedBlade[Type]\tYESNO\t\t534\t1\tIfcBoolean\t1\nPARAM\t547a278e-38bd-448c-98ad-9619581fd183\tPset_RailTypeBlade.IsFallbackBlade[Type]\tYESNO\t\t534\t1\tIfcBoolean\t1\nPARAM\t5cc17fe3-605c-4688-b007-41029c69c6c7\tPset_RailTypeBlade.NominalLength[Type]\tLENGTH\t\t534\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t535\tPset_RailTypeCheckRail\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t401280e4-bbd2-4dd1-a533-c2343a2d288f\tPset_RailTypeCheckRail.CheckRailType[Type]\tTEXT\t\t535\t1\tPEnum_CheckRailType\t1\nPARAM\t6eca6a00-d468-4d8a-82a8-51f5d5d467dc\tPset_RailTypeCheckRail.InstallationPlan[Type]\tMULTILINETEXT\t\t535\t1\tIfcExternalReference\t1\n#\nGROUP\t536\tPset_RailTypeGuardRail\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tafcc7dbc-d426-42b0-b9ab-ebacc9f1da9b\tPset_RailTypeGuardRail.GuardRailConnection[Type]\tTEXT\t\t536\t1\tPEnum_GuardRailConnection\t1\nPARAM\te36e48f1-5474-48cb-b354-972950df3eed\tPset_RailTypeGuardRail.GuardRailType[Type]\tTEXT\t\t536\t1\tPEnum_GuardRailType\t1\nPARAM\t01dac0db-1752-4883-ab0f-8a6c3acd9dee\tPset_RailTypeGuardRail.PositionInTrack[Type]\tTEXT\t\t536\t1\tPEnum_RelativePosition\t1\n#\nGROUP\t537\tPset_RailTypeRail\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2119a7ae-5e92-4438-9a76-254772fe351e\tPset_RailTypeRail.DrillOnRail[Type]\tTEXT\t\t537\t1\tPEnum_DrillOnRail\t1\nPARAM\tc87f3ae1-bcc7-4778-9b57-37c6e66cd548\tPset_RailTypeRail.InstallationPlan[Type]\tMULTILINETEXT\t\t537\t1\tIfcExternalReference\t1\nPARAM\td471cffc-1ca4-416e-955c-fcf80e8d790c\tPset_RailTypeRail.IsStainless[Type]\tYESNO\t\t537\t1\tIfcBoolean\t1\nPARAM\tfce0615d-6d85-4693-9c1b-666fb49746d7\tPset_RailTypeRail.MinimumTensileStrength[Type]\tNUMBER\t\t537\t1\tIfcForceMeasure\t1\nPARAM\tf03a0056-4c9a-4a1d-83fb-22bb64bbd7a7\tPset_RailTypeRail.PositionInTrack[Type]\tTEXT\t\t537\t1\tPEnum_RelativePosition\t1\nPARAM\tfccbc865-1a22-446c-af5e-1090c002d383\tPset_RailTypeRail.RailCondition[Type]\tTEXT\t\t537\t1\tPEnum_RailCondition\t1\nPARAM\t7530810f-a231-422e-8c46-be06b0d14ded\tPset_RailTypeRail.RailDeliveryState[Type]\tTEXT\t\t537\t1\tPEnum_RailDeliveryState\t1\nPARAM\t07f25517-31a2-4f4d-b518-0a1e1f2b9b90\tPset_RailTypeRail.RailElementaryLength[Type]\tTEXT\t\t537\t1\tPEnum_RailElementaryLength\t1\nPARAM\t5191f5c8-01e5-4fa7-861d-175fed57369e\tPset_RailTypeRail.TechnicalStandard[Type]\tMULTILINETEXT\t\t537\t1\tIfcExternalReference\t1\n#\nGROUP\t538\tPset_RailTypeStockRail\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tce90db4c-dbce-407d-baa6-dac3180974f5\tPset_RailTypeStockRail.InstallationPlan[Type]\tMULTILINETEXT\t\t538\t1\tIfcExternalReference\t1\nPARAM\tf0572df5-a1f8-493c-806e-bc7690d2b220\tPset_RailTypeStockRail.NominalLength[Type]\tLENGTH\t\t538\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t16e179cd-b481-49ec-8171-6a1cc3046178\tPset_RailTypeStockRail.StockRailRadius[Type]\tLENGTH\t\t538\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t539\tPset_RailwayBalise\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t43efd76e-3035-4d6e-9a67-048900a057ac\tPset_RailwayBalise.DetectionRange[Type]\tLENGTH\t\t539\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t59695ea3-a2d2-4733-b476-4932dd1ebbbb\tPset_RailwayBalise.FailureInformation[Type]\tTEXT\t\t539\t1\tIfcText\t1\nPARAM\t5355dbcf-4628-4a59-be84-7b62099862ba\tPset_RailwayBalise.InformationLength[Type]\tINTEGER\t\t539\t1\tIfcInteger\t1\nPARAM\t0b7dace6-97ef-424c-88ef-68929dcd24a7\tPset_RailwayBalise.IP_Code[Type]\tTEXT\t\t539\t1\tIfcLabel\t1\nPARAM\t50e01a78-6d6d-40bf-864f-e1502d614928\tPset_RailwayBalise.NominalHeight[Type]\tLENGTH\t\t539\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t1cf479e9-ca59-4bfd-a620-434c865691f5\tPset_RailwayBalise.NominalLength[Type]\tLENGTH\t\t539\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t8ebe5858-3ce1-4fc5-8f6e-2133dc83fc3c\tPset_RailwayBalise.NominalWeight[Type]\tNUMBER\t\t539\t1\tIfcMassMeasure\t1\nPARAM\te6f7b85b-e4bc-4557-823f-6af1127a9f21\tPset_RailwayBalise.NominalWidth[Type]\tLENGTH\t\t539\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t7af1c21b-8e35-4aea-9884-bdfbd2fbf650\tPset_RailwayBalise.OperationalTemperatureRange[Type]\tMULTILINETEXT\t\t539\t1\tPropertyBoundedValue\t1\nPARAM\tc1308439-fbf8-4d00-9110-497292104e8f\tPset_RailwayBalise.RailwayBaliseType[Type]\tTEXT\t\t539\t1\tPEnum_RailwayBaliseType\t1\nPARAM\tf587ff82-4059-446e-aa55-28b9d88ff00c\tPset_RailwayBalise.TransmissionRate[Type]\tINTEGER\t\t539\t1\tIfcIntegerCountRateMeasure\t1\n#\nGROUP\t540\tPset_RailwayCableCarrier\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a3f035f-9dd0-414c-ae44-2e2cbffdbc86\tPset_RailwayCableCarrier.NumberOfCrossedTracks[Type]\tINTEGER\t\t540\t1\tIfcCountMeasure\t1\n#\nGROUP\t541\tPset_RailwayLevelCrossing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t53d7a608-0abe-468e-8874-8a7a3c5f94fe\tPset_RailwayLevelCrossing.HasRailDrainage[Type]\tYESNO\t\t541\t1\tIfcBoolean\t1\nPARAM\ta344a27b-484f-4da2-b975-694ec8c8a4ab\tPset_RailwayLevelCrossing.IsAccessibleByVehicle[Type]\tYESNO\t\t541\t1\tIfcBoolean\t1\nPARAM\t32c84520-a56a-4d33-8263-2e613f03c862\tPset_RailwayLevelCrossing.IsExceptionalTransportRoute[Type]\tYESNO\t\t541\t1\tIfcBoolean\t1\nPARAM\t7c85cdef-832f-440b-9089-5bd9454d8737\tPset_RailwayLevelCrossing.IsPrivateOwner[Type]\tYESNO\t\t541\t1\tIfcBoolean\t1\nPARAM\tbd86d9b5-75ba-4455-b573-3c2dd34a90a7\tPset_RailwayLevelCrossing.IsSecuredBySignalingSystem[Type]\tYESNO\t\t541\t1\tIfcBoolean\t1\nPARAM\t5f7497ae-57fb-4dd1-9213-429b035b8c0e\tPset_RailwayLevelCrossing.PermissiblePavementLoad[Type]\tNUMBER\t\t541\t1\tIfcMassMeasure\t1\n#\nGROUP\t542\tPset_RailwaySignalAspect\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdb6dc020-63ee-48e5-b1b4-85f3bf5dd528\tPset_RailwaySignalAspect.AppliesToTrainCategory[Type]\tTEXT\t\t542\t1\tPEnum_TrainCategory\t1\nPARAM\tab0c59a8-89f5-4220-83f1-674ec291d529\tPset_RailwaySignalAspect.SignalAspectSymbol[Type]\tMULTILINETEXT\t\t542\t1\tIfcExternalReference\t1\nPARAM\t70872c2f-eea0-40ad-8c2a-0cabaa485317\tPset_RailwaySignalAspect.SignalAspectType[Type]\tTEXT\t\t542\t1\tIfcLabel\t1\nPARAM\t8364d1b9-8c68-4317-92cd-e53b7d339002\tPset_RailwaySignalAspect.SignLegend[Type]\tTEXT\t\t542\t1\tIfcText\t1\n#\nGROUP\t543\tPset_RailwaySignalOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7ab08f4c-2086-4e6c-9def-c44a42ac2ff5\tPset_RailwaySignalOccurrence.ApproachSpeed[Type]\tNUMBER\t\t543\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t07248e8e-2bda-4b9f-a2bd-bb847917e7d5\tPset_RailwaySignalOccurrence.DistanceToStopMark[Type]\tLENGTH\t\t543\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4f999c23-ec17-4dbf-a41d-009d34daf248\tPset_RailwaySignalOccurrence.HandSignallingProhibited[Type]\tYESNO\t\t543\t1\tIfcBoolean\t1\nPARAM\t34c2bc15-344b-40b1-89f9-3393bffc2a47\tPset_RailwaySignalOccurrence.HinderingObstaclesDescription[Type]\tTEXT\t\t543\t1\tIfcText\t1\nPARAM\t1f991a6a-d221-42e5-9c09-6acb478a3a4c\tPset_RailwaySignalOccurrence.LimitedClearances[Type]\tTEXT\t\t543\t1\tIfcText\t1\nPARAM\tf1dbfdea-9480-44c3-8582-4a124f553672\tPset_RailwaySignalOccurrence.NumberOfLampsNotUsed[Type]\tINTEGER\t\t543\t1\tIfcCountMeasure\t1\nPARAM\t8e2aca8d-745f-4459-9e1e-b1061c380a83\tPset_RailwaySignalOccurrence.RequiresBannerSignal[Type]\tYESNO\t\t543\t1\tIfcBoolean\t1\nPARAM\t02f3e732-0e92-4dca-b420-3e1abfa7afe1\tPset_RailwaySignalOccurrence.RequiresOLEMesh[Type]\tYESNO\t\t543\t1\tIfcBoolean\t1\nPARAM\t77e53cf4-88ca-45cf-9509-cc1b08737a72\tPset_RailwaySignalOccurrence.RequiresSafetyHandrail[Type]\tYESNO\t\t543\t1\tIfcBoolean\t1\nPARAM\tb6fae2a9-8c55-4b6b-826a-051a1d3e9a43\tPset_RailwaySignalOccurrence.SignalPostTelephoneID[Type]\tTEXT\t\t543\t1\tIfcIdentifier\t1\nPARAM\tba871ee2-386c-4e1e-b2d0-7d530907c6d2\tPset_RailwaySignalOccurrence.SignalPostTelephoneType[Type]\tTEXT\t\t543\t1\tIfcLabel\t1\nPARAM\tb3c58d0b-4e67-4e9f-88eb-0317e51d3b1a\tPset_RailwaySignalOccurrence.SignalWalkwayLength[Type]\tLENGTH\t\t543\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td5ed45a4-a9af-4389-9f27-458537d1237a\tPset_RailwaySignalOccurrence.SpecialPositionArrangement[Type]\tTEXT\t\t543\t1\tIfcLabel\t1\n#\nGROUP\t544\tPset_RailwaySignalSighting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tacfb0abf-4cc3-4160-90c5-25ef75286672\tPset_RailwaySignalSighting.SignalSightingAchievableDistance[Type]\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t34e3d895-685a-4f00-bbad-26f6d518e4fb\tPset_RailwaySignalSighting.SignalSightingAvailableDistance[Type]\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t06326307-e95f-42b3-8c74-51a2a1503094\tPset_RailwaySignalSighting.SignalSightingCombinedWithRepeater[Type]\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t054434ec-6074-478d-aeb0-dd9fe0a604be\tPset_RailwaySignalSighting.SignalSightingMinimum[Type]\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t21cc33fb-e9e6-4830-90a6-81e4d01b1248\tPset_RailwaySignalSighting.SignalSightingPreferred[Type]\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taa6ad079-5de9-4ed8-bfd6-db5b1c6b450f\tPset_RailwaySignalSighting.SignalSightingRouteIndicator[Type]\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4bd1ed9f-11ea-46fb-a006-2a615f5a992a\tPset_RailwaySignalSighting.SignalViewingMinimumInFront[Type]\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t545\tPset_RailwaySignalType\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4e5602ca-4159-4c20-9d0e-ce1b248a8826\tPset_RailwaySignalType.HasConductorRailGuardBoard[Type]\tYESNO\t\t545\t1\tIfcBoolean\t1\nPARAM\t0caffe0a-e09e-405f-81e2-52509e8c5bd1\tPset_RailwaySignalType.HotStripOrientation[Type]\tTEXT\t\t545\t1\tIfcLabel\t1\nPARAM\t64e93a07-5eb1-4be0-b264-c4992b61434b\tPset_RailwaySignalType.IsHighType[Type]\tYESNO\t\t545\t1\tIfcBoolean\t1\nPARAM\ta284c07d-8f77-4ad8-8612-812f22205840\tPset_RailwaySignalType.LensDiffuserOrientation[Type]\tTEXT\t\t545\t1\tIfcLabel\t1\nPARAM\t682b15e7-c043-4699-bb68-bde5a28b8851\tPset_RailwaySignalType.LensDiffuserType[Type]\tTEXT\t\t545\t1\tIfcLabel\t1\nPARAM\t2aa3a163-002c-4fd9-8593-a5d133186bb9\tPset_RailwaySignalType.MaximumDisplayDistance[Type]\tLENGTH\t\t545\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbdfb2ded-561e-4761-8298-c806e7ee5661\tPset_RailwaySignalType.NumberOfLamps[Type]\tINTEGER\t\t545\t1\tIfcCountMeasure\t1\nPARAM\td5200ab8-40e5-4fb9-b58e-e2b188172da5\tPset_RailwaySignalType.RailwaySignalType[Type]\tTEXT\t\t545\t1\tPEnum_RailwaySignalType\t1\nPARAM\t4f4f05a7-1899-4130-827c-3f3de1fc6edd\tPset_RailwaySignalType.RequiredDisplayDistance[Type]\tLENGTH\t\t545\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t074461bf-c3a3-4ccb-ba1e-d4948392facf\tPset_RailwaySignalType.SignalHoodLength[Type]\tLENGTH\t\t545\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tac8aec2e-28a3-407c-a69a-c7e233608266\tPset_RailwaySignalType.SignalIndicatorType[Type]\tTEXT\t\t545\t1\tPEnum_SignalIndicatorType\t1\nPARAM\tc88e8c56-8209-4e72-93e3-bd14db9f71e0\tPset_RailwaySignalType.SignalMessage[Type]\tTEXT\t\t545\t1\tIfcText\t1\n#\nGROUP\t546\tPset_RailwayTrackStructurePart\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4dbd6c88-6ca0-44f4-9ab7-c64ba5a2f0c9\tPset_RailwayTrackStructurePart.HasBallastTrack[Type]\tYESNO\t\t546\t1\tIfcBoolean\t1\nPARAM\t49001e85-376d-41fe-8a29-820d981c86eb\tPset_RailwayTrackStructurePart.HasCWR[Type]\tYESNO\t\t546\t1\tIfcBoolean\t1\nPARAM\tf505f3d6-17c6-43ca-a373-75009b7403a6\tPset_RailwayTrackStructurePart.IsSunExposed[Type]\tYESNO\t\t546\t1\tIfcBoolean\t1\nPARAM\tff2cd93d-2b28-4a8a-b3b6-8f3e1b731614\tPset_RailwayTrackStructurePart.TrackSupportingStructure[Type]\tTEXT\t\t546\t1\tPEnum_TrackSupportingStructure\t1\n#\nGROUP\t547\tPset_RampCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1573f01a-f417-4fa0-8876-335e78d9fa53\tPset_RampCommon.FireExit[Type]\tYESNO\t\t547\t1\tIfcBoolean\t1\nPARAM\te612371b-729f-4536-a8bd-23c463ae205c\tPset_RampCommon.FireRating[Type]\tTEXT\t\t547\t1\tIfcLabel\t1\nPARAM\ta8b5dfe0-e134-4c5b-9256-767c3939566f\tPset_RampCommon.HandicapAccessible[Type]\tYESNO\t\t547\t1\tIfcBoolean\t1\nPARAM\tf763eee1-6f56-483b-b4fb-06a8a86c4786\tPset_RampCommon.HasNonSkidSurface[Type]\tYESNO\t\t547\t1\tIfcBoolean\t1\nPARAM\tc1c3c6a2-c1bd-40a4-863e-23f371a41d03\tPset_RampCommon.IsExternal[Type]\tYESNO\t\t547\t1\tIfcBoolean\t1\nPARAM\t032f5cc1-ecbf-456f-a348-6db261c2f5a1\tPset_RampCommon.LoadBearing[Type]\tYESNO\t\t547\t1\tIfcBoolean\t1\nPARAM\tbff2ef78-2dec-4825-a3f5-96319be5a460\tPset_RampCommon.Reference[Type]\tTEXT\t\t547\t1\tIfcIdentifier\t1\nPARAM\t92e61fdd-b7e6-4590-9db5-5b0375703e28\tPset_RampCommon.RequiredHeadroom[Type]\tLENGTH\t\t547\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t60a24627-09f5-4331-991e-49b7c07693ed\tPset_RampCommon.RequiredSlope[Type]\tNUMBER\t\t547\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tc8bdeee2-7b47-439b-b338-32647800fd77\tPset_RampCommon.Status[Type]\tTEXT\t\t547\t1\tPEnum_ElementStatus\t1\nPARAM\t74274abb-8e98-4fcb-b2fb-b87ce0d07fe6\tPset_RampCommon.ThermalTransmittance[Type]\tNUMBER\t\t547\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t548\tPset_RampFlightCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t79fa12ba-ef1f-4452-a8ee-f09058423cff\tPset_RampFlightCommon.ClearWidth[Type]\tLENGTH\t\t548\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfc75e3fa-d06b-4d0e-8da3-548953aa30cd\tPset_RampFlightCommon.CounterSlope[Type]\tNUMBER\t\t548\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t4db44c2a-257e-479a-bb37-0d62f453e4be\tPset_RampFlightCommon.Headroom[Type]\tLENGTH\t\t548\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb24cd08f-aa07-431e-8751-4d3a08a7a049\tPset_RampFlightCommon.Reference[Type]\tTEXT\t\t548\t1\tIfcIdentifier\t1\nPARAM\t6bae44cc-99e1-46a7-8f49-4dac72e073b3\tPset_RampFlightCommon.Slope[Type]\tNUMBER\t\t548\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t92344fc0-7827-4a8e-bd39-980d5da882fd\tPset_RampFlightCommon.Status[Type]\tTEXT\t\t548\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t549\tPset_ReferentCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td32e543e-4558-4ec5-9f7f-dba49e8beacd\tPset_ReferentCommon.NameFormat[Type]\tTEXT\t\t549\t1\tIfcLabel\t1\n#\nGROUP\t550\tPset_ReinforcementBarCountOfIndependentFooting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3261ec7a-83fa-4ce5-8bca-f1c8a951bd69\tPset_ReinforcementBarCountOfIndependentFooting.Description[Type]\tTEXT\t\t550\t1\tIfcText\t1\nPARAM\tab1c4950-a897-407d-ba2a-b86cb4f124c1\tPset_ReinforcementBarCountOfIndependentFooting.Reference[Type]\tTEXT\t\t550\t1\tIfcLabel\t1\nPARAM\taf79291f-d981-4c0c-afb0-a198a9d45aad\tPset_ReinforcementBarCountOfIndependentFooting.XDirectionLowerBarCount[Type]\tINTEGER\t\t550\t1\tIfcCountMeasure\t1\nPARAM\t934604e0-edfa-4712-928e-34c57743788c\tPset_ReinforcementBarCountOfIndependentFooting.XDirectionUpperBarCount[Type]\tINTEGER\t\t550\t1\tIfcCountMeasure\t1\nPARAM\tfd0cac58-bd63-48c6-ba09-8cd1def16740\tPset_ReinforcementBarCountOfIndependentFooting.YDirectionLowerBarCount[Type]\tINTEGER\t\t550\t1\tIfcCountMeasure\t1\nPARAM\t00bf0857-8ae7-4be9-9178-0a9736609884\tPset_ReinforcementBarCountOfIndependentFooting.YDirectionUpperBarCount[Type]\tINTEGER\t\t550\t1\tIfcCountMeasure\t1\n#\nGROUP\t551\tPset_ReinforcementBarPitchOfBeam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t38aa417d-b4e2-42b6-bca3-89962f7ad096\tPset_ReinforcementBarPitchOfBeam.Description[Type]\tTEXT\t\t551\t1\tIfcText\t1\nPARAM\t469b6e02-150a-4530-b564-b0139aed36d2\tPset_ReinforcementBarPitchOfBeam.Reference[Type]\tTEXT\t\t551\t1\tIfcLabel\t1\nPARAM\t71ddb0b6-3b9f-4345-8539-bc640ead1ea7\tPset_ReinforcementBarPitchOfBeam.SpacingBarPitch[Type]\tLENGTH\t\t551\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8c79b5fd-cd92-4942-b66a-48f27fa61201\tPset_ReinforcementBarPitchOfBeam.StirrupBarPitch[Type]\tLENGTH\t\t551\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t552\tPset_ReinforcementBarPitchOfColumn\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb52057fc-c156-494d-b703-8f7e6372c205\tPset_ReinforcementBarPitchOfColumn.Description[Type]\tTEXT\t\t552\t1\tIfcText\t1\nPARAM\t05037c74-bbba-4e74-a7d0-14e83b88655e\tPset_ReinforcementBarPitchOfColumn.HoopBarPitch[Type]\tLENGTH\t\t552\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t913782cf-2eb7-459b-9577-f4e5f837618c\tPset_ReinforcementBarPitchOfColumn.Reference[Type]\tTEXT\t\t552\t1\tIfcLabel\t1\nPARAM\tb881c478-74b0-45b8-bc51-8764827a165e\tPset_ReinforcementBarPitchOfColumn.ReinforcementBarType[Type]\tTEXT\t\t552\t1\tPEnum_ReinforcementBarType\t1\nPARAM\t208ef4a2-1a32-4286-9a18-f0bbe2bc9c35\tPset_ReinforcementBarPitchOfColumn.XDirectionTieHoopBarPitch[Type]\tLENGTH\t\t552\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td5e08881-beda-4094-8748-c0a5d9dff8c8\tPset_ReinforcementBarPitchOfColumn.XDirectionTieHoopCount[Type]\tINTEGER\t\t552\t1\tIfcCountMeasure\t1\nPARAM\tb9b084ca-29d8-4314-8695-f3c9e6c28ce8\tPset_ReinforcementBarPitchOfColumn.YDirectionTieHoopBarPitch[Type]\tLENGTH\t\t552\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfb4db327-839e-446a-9a9e-e2d58995e0f2\tPset_ReinforcementBarPitchOfColumn.YDirectionTieHoopCount[Type]\tINTEGER\t\t552\t1\tIfcCountMeasure\t1\n#\nGROUP\t553\tPset_ReinforcementBarPitchOfContinuousFooting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7c2b59ca-2c9d-45f1-a26e-dcd10f12bcf0\tPset_ReinforcementBarPitchOfContinuousFooting.CrossingLowerBarPitch[Type]\tLENGTH\t\t553\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbd921b71-a8d4-4271-b786-47480ee28457\tPset_ReinforcementBarPitchOfContinuousFooting.CrossingUpperBarPitch[Type]\tLENGTH\t\t553\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7cebfea2-cb7c-47e0-8efa-c4852e13e98d\tPset_ReinforcementBarPitchOfContinuousFooting.Description[Type]\tTEXT\t\t553\t1\tIfcText\t1\nPARAM\t466b709a-9a1d-4998-b8f6-adec1d18abb0\tPset_ReinforcementBarPitchOfContinuousFooting.Reference[Type]\tTEXT\t\t553\t1\tIfcLabel\t1\n#\nGROUP\t554\tPset_ReinforcementBarPitchOfSlab\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t829137fc-c4af-41d4-9a05-70b2512c5428\tPset_ReinforcementBarPitchOfSlab.Description[Type]\tTEXT\t\t554\t1\tIfcText\t1\nPARAM\t845075ed-0dd3-40eb-af76-e0919f2a96c6\tPset_ReinforcementBarPitchOfSlab.LongInsideCenterLowerBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1e50dab9-2d2b-41a6-b87c-0f9ee53b2158\tPset_ReinforcementBarPitchOfSlab.LongInsideCenterTopBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t54fbb039-12bf-4fab-9787-cd5203a2244f\tPset_ReinforcementBarPitchOfSlab.LongInsideEndLowerBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te27e20a9-df3d-4b22-bc16-fe53be3e5fa9\tPset_ReinforcementBarPitchOfSlab.LongInsideEndTopBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1d7b59e8-efb4-44c1-9a60-3ff53f624d6a\tPset_ReinforcementBarPitchOfSlab.LongOutsideLowerBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tebc49a4e-3c24-461e-8cda-f1d7da828cfe\tPset_ReinforcementBarPitchOfSlab.LongOutsideTopBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t69a1a9ec-6554-47c4-8781-f27c8a2394b6\tPset_ReinforcementBarPitchOfSlab.Reference[Type]\tTEXT\t\t554\t1\tIfcLabel\t1\nPARAM\te35fc565-0aca-418d-a05d-309a1340cd4a\tPset_ReinforcementBarPitchOfSlab.ShortInsideCenterLowerBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8617c18f-a50c-4419-8fdd-b0df60b50e05\tPset_ReinforcementBarPitchOfSlab.ShortInsideCenterTopBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tff71c967-2abc-4f3f-b342-9a0ebced48d9\tPset_ReinforcementBarPitchOfSlab.ShortInsideEndLowerBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te8787f07-8a1f-4c48-9402-b6dd1652f290\tPset_ReinforcementBarPitchOfSlab.ShortInsideEndTopBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te5a7a1e1-fefd-4e58-9534-4df61e56f8bd\tPset_ReinforcementBarPitchOfSlab.ShortOutsideLowerBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8beea3fb-8f43-4870-99c7-0625dbf44081\tPset_ReinforcementBarPitchOfSlab.ShortOutsideTopBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t555\tPset_ReinforcementBarPitchOfWall\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8e98caa4-e1df-4ae7-81f3-1d370bf4158f\tPset_ReinforcementBarPitchOfWall.BarAllocationType[Type]\tTEXT\t\t555\t1\tPEnum_ReinforcementBarAllocationType\t1\nPARAM\tc296c40e-41ea-4d9c-ae9b-bb34c9817143\tPset_ReinforcementBarPitchOfWall.Description[Type]\tTEXT\t\t555\t1\tIfcText\t1\nPARAM\t9c207418-44cc-4ca0-bdbc-8c93e904f86a\tPset_ReinforcementBarPitchOfWall.HorizontalBarPitch[Type]\tLENGTH\t\t555\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t46e1dcdc-93ac-4da7-b468-e64875f04b9b\tPset_ReinforcementBarPitchOfWall.Reference[Type]\tTEXT\t\t555\t1\tIfcLabel\t1\nPARAM\t1003e8f4-db19-4a48-a9dc-557c2473d14a\tPset_ReinforcementBarPitchOfWall.SpacingBarPitch[Type]\tLENGTH\t\t555\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8c85fdea-c2f6-4725-a61e-b90c566a3914\tPset_ReinforcementBarPitchOfWall.VerticalBarPitch[Type]\tLENGTH\t\t555\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t556\tPset_ReinforcingBarBendingsBECCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tde816abc-80e6-4a65-9932-26c952aea739\tPset_ReinforcingBarBendingsBECCommon.BECBarShapeCode[Type]\tTEXT\t\t556\t1\tIfcLabel\t1\nPARAM\t86aee767-6fa3-431d-b52c-c6902461114f\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_u[Type]\tNUMBER\t\t556\t1\tIfcPlaneAngleMeasure\t1\nPARAM\teb2a101f-78d3-4813-9b1f-f4f0d606ad12\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_u1[Type]\tNUMBER\t\t556\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t541ff94b-e410-451a-8e53-2feeb730611d\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_v[Type]\tNUMBER\t\t556\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t1735fdad-f3a0-4223-a8cb-2744ab59fff2\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_v1[Type]\tNUMBER\t\t556\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t0148aa14-a6ad-44c7-b8f0-2764cce27357\tPset_ReinforcingBarBendingsBECCommon.BECCuttingLength[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t099d570d-fef2-4c85-b0be-eff83d9f5329\tPset_ReinforcingBarBendingsBECCommon.BECRollerDiameter[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbfafc65b-a470-428c-a3cc-9a9f5ecdaf9b\tPset_ReinforcingBarBendingsBECCommon.BECShapeAid_x[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t378c3137-85d5-412b-b00c-617eb5de2eb5\tPset_ReinforcingBarBendingsBECCommon.BECShapeAid_y[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t67bf3131-6cb9-46ce-a401-ac7a7a06bde8\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_a[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td21da65f-c595-4cbf-8249-9e98ae33ef59\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_b[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te7e8ffb7-8b31-4b72-9c5f-f91d37d3172b\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_c[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf5150966-f3e9-4adb-9e10-9175f09c1260\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_d[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t40babf12-b770-4361-9fce-132d045064e5\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_e[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te4fdc474-4d00-4fef-a6c8-8e7b27e282df\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_f[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2ed0c347-228f-44e4-aa86-5c0611689fd6\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_g[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taae9e9e9-f055-4c4b-9433-979540171116\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_h[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb7b0f2b7-ce37-48ce-99c8-867ec6ea07cf\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_i[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5272c983-c88d-49a5-9b79-b59193436a99\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_j[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\teffb5fda-90b5-42c4-a7c8-7f79a46de871\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_k[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4a43eaaa-fbe4-42e7-99c6-bc0e9b1bcc8b\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_l[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t557\tPset_ReinforcingBarBendingsBS8666Common\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9baa084c-b612-453c-99a6-9a090df0274b\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeCode[Type]\tTEXT\t\t557\t1\tIfcLabel\t1\nPARAM\t20013a60-1cbd-43d2-9b7d-3a1cf3f573c3\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_A[Type]\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tad1c9a8e-6c19-429b-954d-d31e711a351d\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_B[Type]\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2d160f4e-7715-4476-85cd-a5185c1d60ec\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_C[Type]\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t44cf6be8-047c-4147-a705-c8a8cc9e3a8e\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_D[Type]\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tae17b04a-5c8d-4d2e-a1da-8da840125c73\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_E[Type]\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4e24fffd-809c-42ce-a7cc-ac297528c218\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_r[Type]\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t558\tPset_ReinforcingBarBendingsDIN135610Common\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb5411a39-69ac-46f1-ac98-898dd2abc08a\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeCode[Type]\tTEXT\t\t558\t1\tIfcLabel\t1\nPARAM\t411e58b7-0e47-4dcb-8c83-404545bdce10\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_a[Type]\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4c8b5a2f-1263-4390-a4f2-ed654632d242\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_b[Type]\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t96181f29-fca1-41ec-9bcc-6626d9050b92\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_c[Type]\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1ef86d43-81e6-41d0-8ad0-2de2d8016285\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_d[Type]\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5fc5f705-27c0-40e0-9fc4-6e5d7dd3b63e\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_e[Type]\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tefc2b327-9329-40cb-a499-6a1fe6392854\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_z[Type]\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t559\tPset_ReinforcingBarBendingsISOCD3766Common\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4fb5bdc5-bd07-4bf2-8e64-dc2a367eb735\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766BendingEndHook[Type]\tNUMBER\t\t559\t1\tIfcPlaneAngleMeasure\t1\nPARAM\te6df0a2d-8b6c-40ec-b789-bf1445e2359e\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766BendingStartHook[Type]\tNUMBER\t\t559\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t03566146-bf19-41d5-9ea3-d44796be04f4\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeCode[Type]\tTEXT\t\t559\t1\tIfcLabel\t1\nPARAM\t92cddafd-d2a7-415a-8b50-93512c92ec39\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_a[Type]\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc3e6ae42-eb65-427e-ac3d-8af68b03e1ef\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_b[Type]\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te4f82417-68ab-4e47-a41d-4123db03dbb8\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_c[Type]\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbf21e93e-5f91-49ba-97a0-777fef09bf8f\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_d[Type]\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0fd01c2a-2779-4592-89dd-1b0fa503f404\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_e[Type]\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tac8535f2-c15c-46b4-9bc6-46a0dbcbcfd7\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_R[Type]\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t560\tPset_ReinforcingBarCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb081745c-17dc-4ec0-864f-fdf78d3f862a\tPset_ReinforcingBarCommon.BarLength[Type]\tLENGTH\t\t560\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t76aa8484-02de-44cf-b522-58348696a50e\tPset_ReinforcingBarCommon.BarSpacing[Type]\tLENGTH\t\t560\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t51d7a024-1667-4404-82b0-71823dae15ce\tPset_ReinforcingBarCommon.BarSurface[Type]\tTEXT\t\t560\t1\tPEnum_ReinforcementBarSurface\t1\nPARAM\tc3e39248-f02b-4098-b442-c65b93813cea\tPset_ReinforcingBarCommon.BendingParameters[Type]\tMULTILINETEXT\t\t560\t1\tPropertyListValue\t1\nPARAM\t8aab05ee-f5c4-4a6a-9c6e-94bc02f92842\tPset_ReinforcingBarCommon.BendingShapeCode[Type]\tTEXT\t\t560\t1\tIfcIdentifier\t1\nPARAM\t3dbacc0c-1458-40b8-846b-aaf35a85cc52\tPset_ReinforcingBarCommon.NominalDiameter[Type]\tLENGTH\t\t560\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6ea49cdf-8ed2-4967-87f0-cbfd79e6d8bf\tPset_ReinforcingBarCommon.Reference[Type]\tTEXT\t\t560\t1\tIfcIdentifier\t1\nPARAM\t2a6f57f5-3322-446b-9ba4-a66f2974bfcf\tPset_ReinforcingBarCommon.Status[Type]\tTEXT\t\t560\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t561\tPset_ReinforcingMeshCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbab8fe39-de95-4c68-804c-2ff8f576c6d9\tPset_ReinforcingMeshCommon.LongitudinalBarBendingParameters[Type]\tMULTILINETEXT\t\t561\t1\tPropertyListValue\t1\nPARAM\t0f950d38-9168-4f0c-9cc7-80a57a0a35cf\tPset_ReinforcingMeshCommon.LongitudinalBarBendingShapeCode[Type]\tTEXT\t\t561\t1\tIfcIdentifier\t1\nPARAM\t41b5021c-9fa7-4ce9-b746-2a6bbbb2b00e\tPset_ReinforcingMeshCommon.LongitudinalBarNominalDiameter[Type]\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0d636a12-2b3d-4ea9-b1d7-9ed230e6d9c2\tPset_ReinforcingMeshCommon.LongitudinalBarSpacing[Type]\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb289fed4-cb81-43a6-b9fd-99462d15a1e0\tPset_ReinforcingMeshCommon.LongitudinalBarSurface[Type]\tTEXT\t\t561\t1\tPEnum_ReinforcementBarSurface\t1\nPARAM\tbdd699b5-9de8-49c5-b54b-7bad4be2c853\tPset_ReinforcingMeshCommon.MeshLength[Type]\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tec8b4033-d07e-4c3b-baf2-a086ac276f1d\tPset_ReinforcingMeshCommon.MeshWidth[Type]\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8cd67926-8e8f-437d-92c8-85171618806a\tPset_ReinforcingMeshCommon.Reference[Type]\tTEXT\t\t561\t1\tIfcIdentifier\t1\nPARAM\ta6e5aa51-84e9-429f-b5cd-dd895e3c41cb\tPset_ReinforcingMeshCommon.Status[Type]\tTEXT\t\t561\t1\tPEnum_ElementStatus\t1\nPARAM\t4aab5d32-759d-4019-a1d8-a617d4a1e8da\tPset_ReinforcingMeshCommon.TransverseBarBendingParameters[Type]\tMULTILINETEXT\t\t561\t1\tPropertyListValue\t1\nPARAM\t8f0e49f7-ab5c-42e1-a96a-88c3871c91a2\tPset_ReinforcingMeshCommon.TransverseBarBendingShapeCode[Type]\tTEXT\t\t561\t1\tIfcIdentifier\t1\nPARAM\t75e8a387-c32e-4eb0-8f35-d94b6afc1c81\tPset_ReinforcingMeshCommon.TransverseBarNominalDiameter[Type]\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t47fcbf63-1f08-4bc8-abc5-1bc825f7d2f3\tPset_ReinforcingMeshCommon.TransverseBarSpacing[Type]\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0a9177f1-880d-4e39-8616-265eaaa13d77\tPset_ReinforcingMeshCommon.TransverseBarSurface[Type]\tTEXT\t\t561\t1\tPEnum_ReinforcementBarSurface\t1\n#\nGROUP\t562\tPset_Reliability\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e97ae6f-ea04-4e77-8e1e-81d4431df6b3\tPset_Reliability.MeanTimeBetweenFailure[Type]\tNUMBER\t\t562\t1\tIfcTimeMeasure\t1\n#\nGROUP\t563\tPset_RepairOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3b779ace-9581-48c4-930d-deb51dc74e2d\tPset_RepairOccurrence.MeanTimeToRepair[Type]\tNUMBER\t\t563\t1\tIfcTimeMeasure\t1\nPARAM\tef693a0f-f37b-48ae-828b-a630f2a44a72\tPset_RepairOccurrence.RepairContent[Type]\tTEXT\t\t563\t1\tIfcText\t1\nPARAM\t116bbbeb-eda7-48b0-b902-7e573e9bff5c\tPset_RepairOccurrence.RepairDate[Type]\tTEXT\t\t563\t1\tIfcDate\t1\n#\nGROUP\t564\tPset_RevetmentCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t60a6c0b3-1e98-4ca7-b83e-06bb3cb5301a\tPset_RevetmentCommon.Elevation[Type]\tLENGTH\t\t564\t1\tIfcLengthMeasure\t1\nPARAM\t99a1884f-23f1-4be1-84db-dab334cabdee\tPset_RevetmentCommon.StructuralType[Type]\tTEXT\t\t564\t1\tIfcLabel\t1\n#\nGROUP\t565\tPset_Risk\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbac2767b-e09e-48a9-99b3-96fe49fe454c\tPset_Risk.AffectsSurroundings[Type]\tYESNO\t\t565\t1\tIfcBoolean\t1\nPARAM\t93139b78-491d-4bc0-9714-1f12b0dbeb37\tPset_Risk.AssessmentOfRisk[Type]\tTEXT\t\t565\t1\tPEnum_RiskAssessment\t1\nPARAM\tef37837e-354a-4c11-b7ff-b0b317c7bfb1\tPset_Risk.AssociatedActivity[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t1ef2b8a8-c350-47a9-8f0f-15edf5ed6ac1\tPset_Risk.AssociatedLocation[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t974847da-d71b-4a3f-ab53-f273f6d6b847\tPset_Risk.AssociatedProduct[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t678b7f59-2ade-448b-9d14-516b36dec909\tPset_Risk.MitigatedRiskConsequence[Type]\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\nPARAM\tf2d4f51b-525a-4c94-8eb6-028a68686414\tPset_Risk.MitigatedRiskLikelihood[Type]\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\nPARAM\t39f4f69e-156f-45f7-88a9-88ba976ec338\tPset_Risk.MitigatedRiskSignificance[Type]\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\nPARAM\t9fec7803-6fdc-47e8-a8bc-ab4443169bbe\tPset_Risk.MitigationPlanned[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t2636defa-dd09-4768-a77c-76a26ec66047\tPset_Risk.MitigationProposed[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t3779624c-d183-4b7f-995c-8687d72854ac\tPset_Risk.NatureOfRisk[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t7a20541e-c7d1-4785-928a-59fb74d236a5\tPset_Risk.PreventiveMeassures[Type]\tMULTILINETEXT\t\t565\t1\tPropertyListValue\t1\nPARAM\t18336058-00d5-46aa-a3d8-04f0ae89fa68\tPset_Risk.RiskAssessmentMethodology[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t068a9057-914e-4b7f-9738-47bbd17a88fc\tPset_Risk.RiskCause[Type]\tTEXT\t\t565\t1\tIfcText\t1\nPARAM\t1466c45e-369d-4e23-999d-e447ada7e440\tPset_Risk.RiskConsequence[Type]\tTEXT\t\t565\t1\tPEnum_RiskConsequence\t1\nPARAM\t7e9703e5-91f5-47c1-a2d4-4cf88ed16340\tPset_Risk.RiskName[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t1d4c3366-2d8c-4035-9b55-d918080f3bb4\tPset_Risk.RiskOwner[Type]\tTEXT\t\t565\t1\tPEnum_RiskOwner\t1\nPARAM\t4a7ff14f-5b2e-4fc5-95d6-0decf3d36172\tPset_Risk.RiskRating[Type]\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\nPARAM\t17e6bbe2-735a-4f74-abdf-ac8ac50edcfe\tPset_Risk.RiskType[Type]\tTEXT\t\t565\t1\tPEnum_RiskType\t1\nPARAM\tc7e038f9-1bfe-496f-a80e-b7f28511b562\tPset_Risk.SubNatureOfRisk1[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t7216818c-d76e-4931-a327-97d7109d37d0\tPset_Risk.SubNatureOfRisk2[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t356710fa-34eb-4e7b-8a3f-9e758dd65e90\tPset_Risk.UnmitigatedRiskConsequence[Type]\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\nPARAM\tb28cfa9c-e019-4079-9b09-670a7bd2ac65\tPset_Risk.UnmitigatedRiskLikelihood[Type]\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\nPARAM\tce4f9fef-0450-47ef-8ebf-442e7dec19ba\tPset_Risk.UnmitigatedRiskSignificance[Type]\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\n#\nGROUP\t566\tPset_RoadDesignCriteriaCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t75b97898-9b33-4213-abd5-fc7841252795\tPset_RoadDesignCriteriaCommon.Crossfall[Type]\tNUMBER\t\t566\t1\tIfcRatioMeasure\t1\nPARAM\tfdfac39b-0c06-4836-a296-5906b37361de\tPset_RoadDesignCriteriaCommon.DesignSpeed[Type]\tNUMBER\t\t566\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tbf853ff4-c22a-4920-a1d3-019fc29cd824\tPset_RoadDesignCriteriaCommon.DesignTrafficVolume[Type]\tINTEGER\t\t566\t1\tIfcCountMeasure\t1\nPARAM\t75ade5ac-389e-4801-8ac6-73481151ad72\tPset_RoadDesignCriteriaCommon.DesignVehicleClass[Type]\tTEXT\t\t566\t1\tIfcLabel\t1\nPARAM\t6cc84c8a-28d1-43bb-b386-4eb24786fdc3\tPset_RoadDesignCriteriaCommon.LaneWidth[Type]\tLENGTH\t\t566\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t23e3c365-ed81-41a7-9613-0d9a0c7e9022\tPset_RoadDesignCriteriaCommon.NumberOfThroughLanes[Type]\tINTEGER\t\t566\t1\tIfcCountMeasure\t1\nPARAM\t2e9fddc5-d345-4bb9-b8da-dbcb9f0b5a0d\tPset_RoadDesignCriteriaCommon.RoadDesignClass[Type]\tTEXT\t\t566\t1\tIfcLabel\t1\n#\nGROUP\t567\tPset_RoadGuardElement\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6beb1130-fb18-44cf-9ccc-f3cb0ceffc3d\tPset_RoadGuardElement.IsMoveable[Type]\tYESNO\t\t567\t1\tIfcBoolean\t1\nPARAM\t609ce0d6-7d39-49b0-85cc-a236d6ffc93c\tPset_RoadGuardElement.IsTerminal[Type]\tYESNO\t\t567\t1\tIfcBoolean\t1\nPARAM\t9d004cd5-9024-4572-a0a5-4c575d2dcd83\tPset_RoadGuardElement.IsTransition[Type]\tYESNO\t\t567\t1\tIfcBoolean\t1\nPARAM\ta3c67aec-f0cc-4f98-b322-9c799bc7a274\tPset_RoadGuardElement.TerminalType[Type]\tTEXT\t\t567\t1\tIfcLabel\t1\n#\nGROUP\t568\tPset_RoadMarkingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3fbaec55-77e0-4f86-988f-e156f510349b\tPset_RoadMarkingCommon.ApplicationMethod[Type]\tTEXT\t\t568\t1\tIfcText\t1\nPARAM\tbb5b5e71-9075-42fd-b0f0-faf494816442\tPset_RoadMarkingCommon.DiagramNumber[Type]\tTEXT\t\t568\t1\tIfcLabel\t1\nPARAM\t972098b3-9f5a-429f-a2c8-7b3ee086787d\tPset_RoadMarkingCommon.MaterialColour[Type]\tTEXT\t\t568\t1\tIfcLabel\t1\nPARAM\t327820a1-28b2-4096-b1c3-e0308284fc94\tPset_RoadMarkingCommon.MaterialThickness[Type]\tLENGTH\t\t568\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td109a0fa-1aa3-40d0-89d1-8fcd54cfb757\tPset_RoadMarkingCommon.MaterialType[Type]\tTEXT\t\t568\t1\tIfcLabel\t1\nPARAM\t2fc43eba-d8d0-41d8-98c7-76a0b7067302\tPset_RoadMarkingCommon.Structure[Type]\tTEXT\t\t568\t1\tIfcLabel\t1\n#\nGROUP\t569\tPset_RoadSymbolsCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e18f9a4-61d2-425e-a9c5-cf99a28a3cb7\tPset_RoadSymbolsCommon.Text[Type]\tTEXT\t\t569\t1\tIfcText\t1\nPARAM\t1c81276d-a319-4e69-bf52-a6b1f967e11d\tPset_RoadSymbolsCommon.TypeDesignation[Type]\tTEXT\t\t569\t1\tIfcLabel\t1\n#\nGROUP\t570\tPset_RoofCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a595b49-e06f-4c08-b53c-375b05212e42\tPset_RoofCommon.AcousticRating[Type]\tTEXT\t\t570\t1\tIfcLabel\t1\nPARAM\td7911daf-6747-4b19-82fa-0e5413e82331\tPset_RoofCommon.FireRating[Type]\tTEXT\t\t570\t1\tIfcLabel\t1\nPARAM\t8703b896-eb7c-4c61-a6d1-e0033ebfe295\tPset_RoofCommon.IsExternal[Type]\tYESNO\t\t570\t1\tIfcBoolean\t1\nPARAM\ta6e5d3b0-7b52-4877-8622-5d5a0af907d6\tPset_RoofCommon.LoadBearing[Type]\tYESNO\t\t570\t1\tIfcBoolean\t1\nPARAM\t16b7c8c2-c00b-4550-9cad-ef50a7e34fbb\tPset_RoofCommon.ProjectedArea[Type]\tAREA\t\t570\t1\tIfcAreaMeasure\t1\nPARAM\t80861848-8a93-4627-8838-0b90df8e25a0\tPset_RoofCommon.Reference[Type]\tTEXT\t\t570\t1\tIfcIdentifier\t1\nPARAM\t543f3674-dc50-47fe-9821-ec15172ae7a0\tPset_RoofCommon.Status[Type]\tTEXT\t\t570\t1\tPEnum_ElementStatus\t1\nPARAM\tb236629c-ec67-475c-8f2d-85694b6b07ce\tPset_RoofCommon.ThermalTransmittance[Type]\tNUMBER\t\t570\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t27b0591d-db00-47d2-b9c3-8cf980406f14\tPset_RoofCommon.TotalArea[Type]\tAREA\t\t570\t1\tIfcAreaMeasure\t1\n#\nGROUP\t571\tPset_SanitaryTerminalTypeBath\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8092642d-0179-4a44-94ac-1a4651383324\tPset_SanitaryTerminalTypeBath.BathType[Type]\tTEXT\t\t571\t1\tPEnum_BathType\t1\nPARAM\tb3ff369e-3d26-4719-931a-aa85d6cd36de\tPset_SanitaryTerminalTypeBath.Color[Type]\tTEXT\t\t571\t1\tIfcText\t1\nPARAM\t09f621bf-a438-4f29-9e6c-be76c1579b99\tPset_SanitaryTerminalTypeBath.DrainSize[Type]\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfc821dbe-6d83-4a22-bf83-216c265a5148\tPset_SanitaryTerminalTypeBath.HasGrabHandles[Type]\tYESNO\t\t571\t1\tIfcBoolean\t1\nPARAM\tee57aad3-94e8-4ff5-b7c2-1f29003b600b\tPset_SanitaryTerminalTypeBath.Material[Type]\tMULTILINETEXT\t\t571\t1\tIfcMaterial\t1\nPARAM\t0f34f2d5-9f85-45c3-8ff3-62018c5c1a30\tPset_SanitaryTerminalTypeBath.MaterialThickness[Type]\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t15913d19-c023-48ca-ae82-c14fabc94378\tPset_SanitaryTerminalTypeBath.NominalDepth[Type]\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t72781b66-45c3-488f-8708-dd13c82eed4d\tPset_SanitaryTerminalTypeBath.NominalLength[Type]\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tce55be63-4bd6-4864-ae0d-05a4d9309e76\tPset_SanitaryTerminalTypeBath.NominalWidth[Type]\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t572\tPset_SanitaryTerminalTypeBidet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta6c0f234-e41d-420a-843f-17ba70105dff\tPset_SanitaryTerminalTypeBidet.BidetMounting[Type]\tTEXT\t\t572\t1\tPEnum_SanitaryMounting\t1\nPARAM\t3627950e-e072-49b2-a015-07de2c1b0c04\tPset_SanitaryTerminalTypeBidet.Color[Type]\tTEXT\t\t572\t1\tIfcText\t1\nPARAM\tcbe4dfad-ef9e-476d-bc41-58eceec42299\tPset_SanitaryTerminalTypeBidet.DrainSize[Type]\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\nPARAM\teb95d1e3-bd0e-4215-8a8c-5ba23f769215\tPset_SanitaryTerminalTypeBidet.Material[Type]\tMULTILINETEXT\t\t572\t1\tIfcMaterial\t1\nPARAM\tdb55e7c0-82de-4345-ac3f-3c1e76d809d4\tPset_SanitaryTerminalTypeBidet.Mounting[Type]\tTEXT\t\t572\t1\tPEnum_SanitaryMounting\t1\nPARAM\t600ea7d1-2ecd-47e2-a13c-13160eb480e7\tPset_SanitaryTerminalTypeBidet.NominalDepth[Type]\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\nPARAM\teb0518f0-dc0c-42f6-8683-961fa012f9ba\tPset_SanitaryTerminalTypeBidet.NominalLength[Type]\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5c19df1a-bc4b-4c73-ab17-4488423d5f74\tPset_SanitaryTerminalTypeBidet.NominalWidth[Type]\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t51dd42a4-1de3-4ea7-a7d8-cb9db72bed21\tPset_SanitaryTerminalTypeBidet.SpilloverLevel[Type]\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t573\tPset_SanitaryTerminalTypeCistern\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t75baa59b-dde4-408c-bf6a-28705e60912c\tPset_SanitaryTerminalTypeCistern.CisternCapacity[Type]\tVOLUME\t\t573\t1\tIfcVolumeMeasure\t1\nPARAM\t1a615ca9-9de5-4d75-9e4b-0f1b9a45525c\tPset_SanitaryTerminalTypeCistern.CisternColor[Type]\tTEXT\t\t573\t1\tIfcText\t1\nPARAM\tcbeadc71-ed25-48ac-85aa-f633dafc5812\tPset_SanitaryTerminalTypeCistern.CisternHeight[Type]\tTEXT\t\t573\t1\tPEnum_CisternHeight\t1\nPARAM\t94269651-f5bd-4318-971d-66cc0e73bc00\tPset_SanitaryTerminalTypeCistern.CisternMaterial[Type]\tMULTILINETEXT\t\t573\t1\tIfcMaterial\t1\nPARAM\t51207e56-da38-48ec-8369-03c20df5eb32\tPset_SanitaryTerminalTypeCistern.FlushRate[Type]\tMULTILINETEXT\t\t573\t1\tPropertyBoundedValue\t1\nPARAM\t38ec9e7a-f2b4-4d75-b626-959ce609f0d0\tPset_SanitaryTerminalTypeCistern.FlushType[Type]\tTEXT\t\t573\t1\tPEnum_FlushType\t1\nPARAM\tb577092f-b466-4932-be03-95eb4a3b4b24\tPset_SanitaryTerminalTypeCistern.IsAutomaticFlush[Type]\tYESNO\t\t573\t1\tIfcBoolean\t1\nPARAM\t355e20c8-d8c1-4af3-80d9-ce4a2912bbdd\tPset_SanitaryTerminalTypeCistern.IsSingleFlush[Type]\tYESNO\t\t573\t1\tIfcBoolean\t1\n#\nGROUP\t574\tPset_SanitaryTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t19a4740e-edef-4449-93ae-03044b8d43d2\tPset_SanitaryTerminalTypeCommon.Color[Type]\tTEXT\t\t574\t1\tIfcLabel\t1\nPARAM\t71f8f19a-da09-4070-95cb-edd30642c823\tPset_SanitaryTerminalTypeCommon.Colour[Type]\tTEXT\t\t574\t1\tIfcLabel\t1\nPARAM\t08a460f7-fc3e-4070-b57b-de3474f334bb\tPset_SanitaryTerminalTypeCommon.NominalDepth[Type]\tLENGTH\t\t574\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t7b163335-1ea9-46d3-8686-aa5550499019\tPset_SanitaryTerminalTypeCommon.NominalLength[Type]\tLENGTH\t\t574\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tedce9346-a803-4e2a-b331-9d79f37c56ab\tPset_SanitaryTerminalTypeCommon.NominalWidth[Type]\tLENGTH\t\t574\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t763828c6-ac5c-4ed2-b8e3-010b06a7f3d0\tPset_SanitaryTerminalTypeCommon.Reference[Type]\tTEXT\t\t574\t1\tIfcIdentifier\t1\nPARAM\t453d52db-b522-429c-b3a5-e96bc5244c4d\tPset_SanitaryTerminalTypeCommon.Status[Type]\tTEXT\t\t574\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t575\tPset_SanitaryTerminalTypeSanitaryFountain\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t73873c18-1158-43ee-8440-a20e0a70dddf\tPset_SanitaryTerminalTypeSanitaryFountain.Color[Type]\tTEXT\t\t575\t1\tIfcText\t1\nPARAM\t208d6005-7f3b-4f0c-a56e-b7e60d087a89\tPset_SanitaryTerminalTypeSanitaryFountain.DrainSize[Type]\tLENGTH\t\t575\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te50baf80-e541-4368-9540-2d35b4052546\tPset_SanitaryTerminalTypeSanitaryFountain.FountainType[Type]\tTEXT\t\t575\t1\tPEnum_FountainType\t1\nPARAM\tbed52ad1-4c0e-40a1-ba8b-05733247e9a5\tPset_SanitaryTerminalTypeSanitaryFountain.Material[Type]\tMULTILINETEXT\t\t575\t1\tIfcMaterial\t1\nPARAM\t42340b59-dff6-44b0-a0d8-daf5b5392d9a\tPset_SanitaryTerminalTypeSanitaryFountain.Mounting[Type]\tTEXT\t\t575\t1\tPEnum_SanitaryMounting\t1\nPARAM\t02529a8e-8fb1-40fb-abea-a08a618d1838\tPset_SanitaryTerminalTypeSanitaryFountain.NominalDepth[Type]\tLENGTH\t\t575\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t374f76bd-c798-4f53-9b39-5dac49197d33\tPset_SanitaryTerminalTypeSanitaryFountain.NominalLength[Type]\tLENGTH\t\t575\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t70567b4f-a862-4a53-bfb6-6491054af5e7\tPset_SanitaryTerminalTypeSanitaryFountain.NominalWidth[Type]\tLENGTH\t\t575\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t576\tPset_SanitaryTerminalTypeShower\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6ce5d3e9-f924-4c72-b000-7c517bb54452\tPset_SanitaryTerminalTypeShower.Color[Type]\tTEXT\t\t576\t1\tIfcText\t1\nPARAM\t38e489d8-a32d-4170-811a-d75b8a385c38\tPset_SanitaryTerminalTypeShower.DrainSize[Type]\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0338d007-3b68-4868-a4ec-c5ff5ca6bcb3\tPset_SanitaryTerminalTypeShower.HasTray[Type]\tYESNO\t\t576\t1\tIfcBoolean\t1\nPARAM\tf46ee86c-7a0f-479b-a0ed-3497c0249161\tPset_SanitaryTerminalTypeShower.Material[Type]\tMULTILINETEXT\t\t576\t1\tIfcMaterial\t1\nPARAM\t154aa5cd-d7cf-47c4-aa2a-b46fbb17812b\tPset_SanitaryTerminalTypeShower.MaterialThickness[Type]\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t30fac85f-b159-4b61-91c0-ae69171114cd\tPset_SanitaryTerminalTypeShower.NominalDepth[Type]\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5c08b270-0549-4020-b861-e5125d0459d1\tPset_SanitaryTerminalTypeShower.NominalLength[Type]\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf0bcfaaf-3a1b-40ab-9102-0ebcfe77516e\tPset_SanitaryTerminalTypeShower.NominalWidth[Type]\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0c79eaee-737e-4487-828c-fb4e7f6cac3a\tPset_SanitaryTerminalTypeShower.ShowerHeadDescription[Type]\tTEXT\t\t576\t1\tIfcText\t1\nPARAM\tdb1b13eb-afdd-448c-bbc4-8db87f1396e5\tPset_SanitaryTerminalTypeShower.ShowerType[Type]\tTEXT\t\t576\t1\tPEnum_ShowerType\t1\n#\nGROUP\t577\tPset_SanitaryTerminalTypeSink\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t49398c2b-c9a6-4db9-b8e8-ddd643919788\tPset_SanitaryTerminalTypeSink.Color[Type]\tTEXT\t\t577\t1\tIfcLabel\t1\nPARAM\t6147486b-bc05-4047-a88a-b3a71309864c\tPset_SanitaryTerminalTypeSink.Colour[Type]\tTEXT\t\t577\t1\tIfcLabel\t1\nPARAM\t50d8eb51-65f5-4fa2-844b-7c4d6dc32f08\tPset_SanitaryTerminalTypeSink.DrainSize[Type]\tLENGTH\t\t577\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t13430bcc-9060-41c0-9b15-dedbd3e80958\tPset_SanitaryTerminalTypeSink.Material[Type]\tMULTILINETEXT\t\t577\t1\tIfcMaterial\t1\nPARAM\tcbffe66a-d76b-4794-903e-ec83bcc7c0a1\tPset_SanitaryTerminalTypeSink.Mounting[Type]\tTEXT\t\t577\t1\tPEnum_SanitaryMounting\t1\nPARAM\t703de863-bcf6-4367-bcd0-7b8d96141e8a\tPset_SanitaryTerminalTypeSink.MountingOffset[Type]\tLENGTH\t\t577\t1\tIfcLengthMeasure\t1\nPARAM\t06a13306-5391-4d00-aa4f-a6a8607b9416\tPset_SanitaryTerminalTypeSink.NominalDepth[Type]\tLENGTH\t\t577\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te29033cb-e043-4593-851f-a2e1c2400cf5\tPset_SanitaryTerminalTypeSink.NominalLength[Type]\tLENGTH\t\t577\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2beee2c5-37da-44b6-9574-6b590eb93146\tPset_SanitaryTerminalTypeSink.NominalWidth[Type]\tLENGTH\t\t577\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3b5d0135-e0ff-4b3c-8dda-8e4fe50b60dc\tPset_SanitaryTerminalTypeSink.SinkMounting[Type]\tTEXT\t\t577\t1\tPEnum_SanitaryMounting\t1\nPARAM\t5dbb5f3a-930a-41c3-b526-7df970563223\tPset_SanitaryTerminalTypeSink.SinkType[Type]\tTEXT\t\t577\t1\tPEnum_SinkType\t1\n#\nGROUP\t578\tPset_SanitaryTerminalTypeToiletPan\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t636bdcc1-4bde-4852-9ed7-8e9f1d5a70a9\tPset_SanitaryTerminalTypeToiletPan.NominalDepth[Type]\tLENGTH\t\t578\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2203d8e6-373f-4c36-b5b1-a77b7dda8986\tPset_SanitaryTerminalTypeToiletPan.NominalLength[Type]\tLENGTH\t\t578\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb56e6ee8-3802-4edb-b24e-1942246a6d2a\tPset_SanitaryTerminalTypeToiletPan.NominalWidth[Type]\tLENGTH\t\t578\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32cddce0-3ea6-4456-b571-6b6dcae4fcf3\tPset_SanitaryTerminalTypeToiletPan.PanColor[Type]\tTEXT\t\t578\t1\tIfcText\t1\nPARAM\t0d75ae7d-e2d1-40c7-b130-162584a944ee\tPset_SanitaryTerminalTypeToiletPan.PanMaterial[Type]\tMULTILINETEXT\t\t578\t1\tIfcMaterial\t1\nPARAM\t3a6fe297-1169-4236-96d7-a323ac5406fc\tPset_SanitaryTerminalTypeToiletPan.PanMounting[Type]\tTEXT\t\t578\t1\tPEnum_SanitaryMounting\t1\nPARAM\t3fdb0cd2-93ee-4c74-a6b2-f564cb76c935\tPset_SanitaryTerminalTypeToiletPan.SpilloverLevel[Type]\tLENGTH\t\t578\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t47dc59d7-984d-4706-8a73-02e21cda48e9\tPset_SanitaryTerminalTypeToiletPan.ToiletPanType[Type]\tTEXT\t\t578\t1\tPEnum_ToiletPanType\t1\nPARAM\t07cd9ef2-4df4-46be-be02-249ac5d29a06\tPset_SanitaryTerminalTypeToiletPan.ToiletType[Type]\tTEXT\t\t578\t1\tPEnum_ToiletType\t1\n#\nGROUP\t579\tPset_SanitaryTerminalTypeUrinal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9bd974e5-1269-4b7e-9977-80493cbe3357\tPset_SanitaryTerminalTypeUrinal.Mounting[Type]\tTEXT\t\t579\t1\tPEnum_SanitaryMounting\t1\nPARAM\t182559e1-a30f-4eeb-8f1a-7ed1839c73b8\tPset_SanitaryTerminalTypeUrinal.NominalDepth[Type]\tLENGTH\t\t579\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t314afbac-ebb8-44fb-8600-8ab42a62e401\tPset_SanitaryTerminalTypeUrinal.NominalLength[Type]\tLENGTH\t\t579\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1afae4c6-6fa1-49a3-a5bd-a8e39e74bb4c\tPset_SanitaryTerminalTypeUrinal.NominalWidth[Type]\tLENGTH\t\t579\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0da973c3-1b96-4503-9aac-433a45f77d49\tPset_SanitaryTerminalTypeUrinal.SpilloverLevel[Type]\tLENGTH\t\t579\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t42528377-43d6-40b0-89d8-ab67f319c686\tPset_SanitaryTerminalTypeUrinal.UrinalColor[Type]\tTEXT\t\t579\t1\tIfcText\t1\nPARAM\t1a0dca9e-bc97-428c-a9fa-4051c15c4ac2\tPset_SanitaryTerminalTypeUrinal.UrinalMaterial[Type]\tMULTILINETEXT\t\t579\t1\tIfcMaterial\t1\nPARAM\t7ee0f224-eaf5-4c81-b7dd-60ba2068e698\tPset_SanitaryTerminalTypeUrinal.UrinalType[Type]\tTEXT\t\t579\t1\tPEnum_UrinalType\t1\n#\nGROUP\t580\tPset_SanitaryTerminalTypeWashHandBasin\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7b1bb37c-260f-4880-9212-2114d813e9cf\tPset_SanitaryTerminalTypeWashHandBasin.Color[Type]\tTEXT\t\t580\t1\tIfcText\t1\nPARAM\t0a3d4d0a-897b-4e81-b334-302fbcbfe423\tPset_SanitaryTerminalTypeWashHandBasin.DrainSize[Type]\tLENGTH\t\t580\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0264b39e-d41b-4786-b35f-5f40c9d5e13a\tPset_SanitaryTerminalTypeWashHandBasin.Material[Type]\tMULTILINETEXT\t\t580\t1\tIfcMaterial\t1\nPARAM\t37f7b289-8f2b-45a7-85f3-eae10d61d1c6\tPset_SanitaryTerminalTypeWashHandBasin.Mounting[Type]\tTEXT\t\t580\t1\tPEnum_SanitaryMounting\t1\nPARAM\tabea7f34-9973-4c25-b501-848a717bcbba\tPset_SanitaryTerminalTypeWashHandBasin.MountingOffset[Type]\tLENGTH\t\t580\t1\tIfcLengthMeasure\t1\nPARAM\tf85c7f42-1af5-439a-bc46-38fb0ef36c38\tPset_SanitaryTerminalTypeWashHandBasin.NominalDepth[Type]\tLENGTH\t\t580\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t22f7f6cf-0758-4441-b0e3-48ca2302a4f0\tPset_SanitaryTerminalTypeWashHandBasin.NominalLength[Type]\tLENGTH\t\t580\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te09c5903-9bff-4eb9-9a05-948570d182e8\tPset_SanitaryTerminalTypeWashHandBasin.NominalWidth[Type]\tLENGTH\t\t580\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t90899d5b-95c5-438c-afa2-2ec5762abd50\tPset_SanitaryTerminalTypeWashHandBasin.WashHandBasinMounting[Type]\tTEXT\t\t580\t1\tPEnum_SanitaryMounting\t1\nPARAM\t5b8e54b9-f8f0-4190-a857-ea9ee9684869\tPset_SanitaryTerminalTypeWashHandBasin.WashHandBasinType[Type]\tTEXT\t\t580\t1\tPEnum_WashHandBasinType\t1\n#\nGROUP\t581\tPset_SanitaryTerminalTypeWCSeat\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6ee07317-94db-4aba-a0ef-d5f925d0f154\tPset_SanitaryTerminalTypeWCSeat.SeatColor[Type]\tTEXT\t\t581\t1\tIfcText\t1\nPARAM\tda4fe9c5-da1c-456d-9638-8d070e4cc1b2\tPset_SanitaryTerminalTypeWCSeat.SeatHasCover[Type]\tYESNO\t\t581\t1\tIfcBoolean\t1\nPARAM\t5a2f4552-e702-47d9-ab91-e10798648fab\tPset_SanitaryTerminalTypeWCSeat.SeatMaterial[Type]\tMULTILINETEXT\t\t581\t1\tIfcMaterial\t1\nPARAM\te99279cc-5f4a-4fd5-9af4-2fec585ca91d\tPset_SanitaryTerminalTypeWCSeat.SeatType[Type]\tTEXT\t\t581\t1\tPEnum_ToiletSeatType\t1\n#\nGROUP\t582\tPset_SectioningDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t058d98a0-deac-46d6-a53d-b4ff5122dcbf\tPset_SectioningDevice.SectioningDeviceType[Type]\tTEXT\t\t582\t1\tPEnum_SectioningDeviceType\t1\n#\nGROUP\t583\tPset_SectionInsulator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8e71ba93-4e08-4871-b39f-7fe6ebb87d0b\tPset_SectionInsulator.ACResistance[Type]\tNUMBER\t\t583\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t4bf4b51b-6f74-4c05-9727-845c3eab440a\tPset_SectionInsulator.IsArcSuppressing[Type]\tYESNO\t\t583\t1\tIfcBoolean\t1\nPARAM\ta00b0378-411c-41c3-8853-3a4f3adaca38\tPset_SectionInsulator.NumberOfWires[Type]\tINTEGER\t\t583\t1\tIfcCountMeasure\t1\nPARAM\tc94a036b-cc9e-4e1a-ba1f-e9a237e18a6d\tPset_SectionInsulator.TensileStrength[Type]\tNUMBER\t\t583\t1\tIfcForceMeasure\t1\n#\nGROUP\t584\tPset_SensorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t04b1e5b3-f7ee-405f-b60f-44d1372897a7\tPset_SensorPHistory.Direction[Type]\tMULTILINETEXT\t\t584\t1\tIfcTimeSeries\t1\nPARAM\tadb1125e-1fae-470c-9c87-9cc3a2f7d808\tPset_SensorPHistory.Quality[Type]\tMULTILINETEXT\t\t584\t1\tIfcTimeSeries\t1\nPARAM\tebba3eb1-ad7c-46a1-9801-80d40302a34d\tPset_SensorPHistory.Status[Type]\tMULTILINETEXT\t\t584\t1\tIfcTimeSeries\t1\nPARAM\t8053eca5-985a-4e07-bf59-e99a79f8b575\tPset_SensorPHistory.Value[Type]\tMULTILINETEXT\t\t584\t1\tIfcTimeSeries\t1\n#\nGROUP\t585\tPset_SensorTypeCO2Sensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t33bab8b3-f883-4626-9e6e-dc2420d243e0\tPset_SensorTypeCO2Sensor.AccuracyOfCO2Sensor[Type]\tNUMBER\t\t585\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7a674a0d-6ca8-4d1c-916b-1f84120739bd\tPset_SensorTypeCO2Sensor.CO2SensorRange[Type]\tMULTILINETEXT\t\t585\t1\tPropertyBoundedValue\t1\nPARAM\t8641c900-d15d-40ec-8165-8af66b7f19b0\tPset_SensorTypeCO2Sensor.CoverageArea[Type]\tAREA\t\t585\t1\tIfcAreaMeasure\t1\nPARAM\t65506636-83ce-484d-838e-61aa4278d9d4\tPset_SensorTypeCO2Sensor.SetPointCO2Concentration[Type]\tMULTILINETEXT\t\t585\t1\tPropertyBoundedValue\t1\nPARAM\t9901abaf-ece7-4789-ab57-eb6fd48f87ba\tPset_SensorTypeCO2Sensor.SetPointConcentration[Type]\tMULTILINETEXT\t\t585\t1\tPropertyBoundedValue\t1\nPARAM\ta6b09d99-9aac-4146-b7e9-caed5c8e23e9\tPset_SensorTypeCO2Sensor.TimeConstant[Type]\tNUMBER\t\t585\t1\tIfcTimeMeasure\t1\nPARAM\t6b7d3799-8eef-4aaa-80d8-8ecc819f70e2\tPset_SensorTypeCO2Sensor.WashHandBasinSetPoint[Type]\tNUMBER\t\t585\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t586\tPset_SensorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t01b0db38-13a8-4662-8404-7600958210e8\tPset_SensorTypeCommon.Reference[Type]\tTEXT\t\t586\t1\tIfcIdentifier\t1\nPARAM\tfa472293-4a66-404c-9ffe-b9f869312781\tPset_SensorTypeCommon.Status[Type]\tTEXT\t\t586\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t587\tPset_SensorTypeConductanceSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td289e6ce-8709-42f4-b1bb-d3c5c72d6bd1\tPset_SensorTypeConductanceSensor.SetPointConductance[Type]\tMULTILINETEXT\t\t587\t1\tPropertyBoundedValue\t1\n#\nGROUP\t588\tPset_SensorTypeContactSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td4257416-a070-453b-b72e-418238092e7d\tPset_SensorTypeContactSensor.SetPointContact[Type]\tMULTILINETEXT\t\t588\t1\tPropertyBoundedValue\t1\n#\nGROUP\t589\tPset_SensorTypeEarthquakeSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taa7bd00f-3b00-4198-82f6-b526608df43b\tPset_SensorTypeEarthquakeSensor.DataCollectionType[Type]\tTEXT\t\t589\t1\tPEnum_DataCollectionType\t1\nPARAM\tee552bce-84d4-484a-8a02-56660ec4e133\tPset_SensorTypeEarthquakeSensor.DegreeOfLinearity[Type]\tNUMBER\t\t589\t1\tIfcRatioMeasure\t1\nPARAM\t1d513ec6-4264-4d2e-9a43-669f6087c1b6\tPset_SensorTypeEarthquakeSensor.DynamicRange[Type]\tMULTILINETEXT\t\t589\t1\tPropertyBoundedValue\t1\nPARAM\t87ceadd3-121e-4619-abe6-13cabbad7345\tPset_SensorTypeEarthquakeSensor.EarthquakeSensorRange[Type]\tMULTILINETEXT\t\t589\t1\tPropertyBoundedValue\t1\nPARAM\t5c8ce70c-cfa7-401f-aae0-8a3f76ab9b5b\tPset_SensorTypeEarthquakeSensor.EarthquakeSensorType[Type]\tTEXT\t\t589\t1\tPEnum_EarthquakeSensorType\t1\nPARAM\t6bdfbde5-5a92-4d84-93af-69fd10ea97a4\tPset_SensorTypeEarthquakeSensor.FullScaleOutput[Type]\tNUMBER\t\t589\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tda41bb4b-d132-4f00-b5ae-eb06be7d6a82\tPset_SensorTypeEarthquakeSensor.LinearVelocityResolution[Type]\tNUMBER\t\t589\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t9999e277-278b-4f46-9598-454af29263e2\tPset_SensorTypeEarthquakeSensor.MarginOfError[Type]\tNUMBER\t\t589\t1\tIfcRatioMeasure\t1\nPARAM\tcd57cacd-03f4-4857-bf69-8f2d2f0bcb93\tPset_SensorTypeEarthquakeSensor.SamplingFrequency[Type]\tNUMBER\t\t589\t1\tIfcFrequencyMeasure\t1\nPARAM\te9f89c68-a370-4afb-b220-64327919833a\tPset_SensorTypeEarthquakeSensor.SerialInterfaceType[Type]\tTEXT\t\t589\t1\tPEnum_SerialInterfaceType\t1\nPARAM\ta894abd5-bdfa-4623-8a16-24ee4b47160d\tPset_SensorTypeEarthquakeSensor.TransverseSensitivityRatio[Type]\tNUMBER\t\t589\t1\tIfcRatioMeasure\t1\nPARAM\t92729322-22e4-48a1-899b-1a3f41a9b9bb\tPset_SensorTypeEarthquakeSensor.WorkingState[Type]\tTEXT\t\t589\t1\tIfcLabel\t1\n#\nGROUP\t590\tPset_SensorTypeFireSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9f858ee9-322b-40a5-b26c-81207045bdab\tPset_SensorTypeFireSensor.AccuracyOfFireSensor[Type]\tNUMBER\t\t590\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\teece77b6-9889-43d8-a409-da815c410793\tPset_SensorTypeFireSensor.FireSensorSetPoint[Type]\tNUMBER\t\t590\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tb72076cb-d18e-40e5-bf0a-14f244e55e27\tPset_SensorTypeFireSensor.TimeConstant[Type]\tNUMBER\t\t590\t1\tIfcTimeMeasure\t1\n#\nGROUP\t591\tPset_SensorTypeFlowSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8ac28d31-48a2-4e53-8cd1-85cecd079995\tPset_SensorTypeFlowSensor.SetPointFlow[Type]\tMULTILINETEXT\t\t591\t1\tPropertyBoundedValue\t1\n#\nGROUP\t592\tPset_SensorTypeForeignObjectDetectionSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t592c014d-2449-447d-9475-30b7ca572077\tPset_SensorTypeForeignObjectDetectionSensor.ForeignObjectDetectionSensorType[Type]\tTEXT\t\t592\t1\tPEnum_ForeignObjectDetectionSensorType\t1\nPARAM\td1ca2443-3d30-4e42-865f-4951d32171f4\tPset_SensorTypeForeignObjectDetectionSensor.SerialInterfaceType[Type]\tTEXT\t\t592\t1\tPEnum_SerialInterfaceType\t1\nPARAM\tb8aca3d0-c938-4b57-98c0-d408d28fe08f\tPset_SensorTypeForeignObjectDetectionSensor.WorkingState[Type]\tTEXT\t\t592\t1\tIfcLabel\t1\n#\nGROUP\t593\tPset_SensorTypeFrostSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbcd038d4-1d20-4e11-bf73-80d4f38df39b\tPset_SensorTypeFrostSensor.SetPointFrost[Type]\tMULTILINETEXT\t\t593\t1\tPropertyBoundedValue\t1\n#\nGROUP\t594\tPset_SensorTypeGasSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7312d2a6-f6d6-4fa0-b5a9-e3b9115078d0\tPset_SensorTypeGasSensor.AccuracyOfGasSensor[Type]\tNUMBER\t\t594\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t04cf3499-0a2c-4d26-9b47-e2a6013f30c2\tPset_SensorTypeGasSensor.CoverageArea[Type]\tAREA\t\t594\t1\tIfcAreaMeasure\t1\nPARAM\tffe8a319-bc32-4004-931a-fdefd2944e15\tPset_SensorTypeGasSensor.GasDetected[Type]\tTEXT\t\t594\t1\tIfcLabel\t1\nPARAM\tdbdb1a5a-93b3-4bf3-bf5d-5ac2721fbfc5\tPset_SensorTypeGasSensor.GasSensorRange[Type]\tMULTILINETEXT\t\t594\t1\tPropertyBoundedValue\t1\nPARAM\tea1494d3-0d6a-4bc4-9aa9-f73a825afca7\tPset_SensorTypeGasSensor.GasSensorSetPoint[Type]\tNUMBER\t\t594\t1\tIfcPositiveRatioMeasure\t1\nPARAM\taddfb9a1-652f-47f1-9ce2-1eca3079b7a8\tPset_SensorTypeGasSensor.SetPointConcentration[Type]\tMULTILINETEXT\t\t594\t1\tPropertyBoundedValue\t1\nPARAM\t0456a09e-0fe8-41ff-89c4-3b509e652509\tPset_SensorTypeGasSensor.TimeConstant[Type]\tNUMBER\t\t594\t1\tIfcTimeMeasure\t1\n#\nGROUP\t595\tPset_SensorTypeHeatSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c4d9e26-f596-4100-8bbd-e3f7d0da6ecc\tPset_SensorTypeHeatSensor.CoverageArea[Type]\tAREA\t\t595\t1\tIfcAreaMeasure\t1\nPARAM\t5294edb7-a383-4502-bc6a-5e49b3105127\tPset_SensorTypeHeatSensor.HeatSensorAccuracy[Type]\tNUMBER\t\t595\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t76a48401-1c7d-4c65-96b0-651e50f9fd0d\tPset_SensorTypeHeatSensor.HeatSensorRange[Type]\tMULTILINETEXT\t\t595\t1\tPropertyBoundedValue\t1\nPARAM\t8037bee0-2480-46d1-b6c9-9a26c264bf21\tPset_SensorTypeHeatSensor.HeatSensorSetPoint[Type]\tNUMBER\t\t595\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t709e284b-df7f-45d9-bac7-2de0e39df41d\tPset_SensorTypeHeatSensor.RateOfTemperatureRise[Type]\tNUMBER\t\t595\t1\tIfcTemperatureRateOfChangeMeasure\t1\nPARAM\tb6b1ea32-07eb-4185-926b-b63b314d4844\tPset_SensorTypeHeatSensor.SetPointTemperature[Type]\tMULTILINETEXT\t\t595\t1\tPropertyBoundedValue\t1\nPARAM\t46094ee4-26d9-49ea-b194-6235d372b152\tPset_SensorTypeHeatSensor.TimeConstant[Type]\tNUMBER\t\t595\t1\tIfcTimeMeasure\t1\n#\nGROUP\t596\tPset_SensorTypeHumiditySensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t54b3467b-a3db-4446-9266-e9e218433ea5\tPset_SensorTypeHumiditySensor.AccuracyOfHumiditySensor[Type]\tNUMBER\t\t596\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6ae5143d-a374-47f8-b789-aacf26fbc901\tPset_SensorTypeHumiditySensor.HumiditySensorRange[Type]\tMULTILINETEXT\t\t596\t1\tPropertyBoundedValue\t1\nPARAM\te8695670-b4bd-4e30-8b02-396820b4ae0d\tPset_SensorTypeHumiditySensor.HumiditySetPoint[Type]\tNUMBER\t\t596\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1893e8bd-dc8a-4d73-903f-df5ddb615daa\tPset_SensorTypeHumiditySensor.SetPointHumidity[Type]\tMULTILINETEXT\t\t596\t1\tPropertyBoundedValue\t1\nPARAM\t400958ab-8a1e-4974-b261-42839138a0be\tPset_SensorTypeHumiditySensor.TimeConstant[Type]\tNUMBER\t\t596\t1\tIfcTimeMeasure\t1\n#\nGROUP\t597\tPset_SensorTypeIdentifierSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t85f02d48-ac51-4a99-a6df-8ec0ab8fac91\tPset_SensorTypeIdentifierSensor.SetPointIdentifier[Type]\tMULTILINETEXT\t\t597\t1\tPropertyBoundedValue\t1\n#\nGROUP\t598\tPset_SensorTypeIonConcentrationSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6e04816c-bbbb-4fd4-89a5-a9e6d71b21b4\tPset_SensorTypeIonConcentrationSensor.SetPointConcentration[Type]\tMULTILINETEXT\t\t598\t1\tPropertyBoundedValue\t1\nPARAM\t60490e6f-daf5-4242-bbae-33e50817ffb3\tPset_SensorTypeIonConcentrationSensor.SetPointIonConcentration[Type]\tMULTILINETEXT\t\t598\t1\tPropertyBoundedValue\t1\nPARAM\t98a91485-3b21-4d3e-95f9-5573d15afe7e\tPset_SensorTypeIonConcentrationSensor.SubstanceDetected[Type]\tTEXT\t\t598\t1\tIfcLabel\t1\n#\nGROUP\t599\tPset_SensorTypeLevelSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t78f97c3c-9ffd-49cc-8ea0-7122c2c15f2d\tPset_SensorTypeLevelSensor.SetPointLevel[Type]\tMULTILINETEXT\t\t599\t1\tPropertyBoundedValue\t1\n#\nGROUP\t600\tPset_SensorTypeLightSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7032616-3c87-46ff-8b8e-2366fe7c17be\tPset_SensorTypeLightSensor.LightSensorAccuracy[Type]\tNUMBER\t\t600\t1\tIfcIlluminanceMeasure\t1\nPARAM\t3e1c2a49-7a03-48be-b2b1-04e25070c06e\tPset_SensorTypeLightSensor.LightSensorRange[Type]\tMULTILINETEXT\t\t600\t1\tPropertyBoundedValue\t1\nPARAM\t63724caa-7ce5-41db-a4aa-45be72aeb02c\tPset_SensorTypeLightSensor.LightSensorSetPoint[Type]\tNUMBER\t\t600\t1\tIfcIlluminanceMeasure\t1\nPARAM\tacc64954-fa44-42aa-a72b-1a048490a998\tPset_SensorTypeLightSensor.SetPointIlluminance[Type]\tMULTILINETEXT\t\t600\t1\tPropertyBoundedValue\t1\nPARAM\t04831732-9e6a-46c5-ad41-01e66091ab60\tPset_SensorTypeLightSensor.TimeConstant[Type]\tNUMBER\t\t600\t1\tIfcTimeMeasure\t1\n#\nGROUP\t601\tPset_SensorTypeMoistureSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc84478e-5a4c-489f-8bfb-c7809681da7b\tPset_SensorTypeMoistureSensor.SetPointMoisture[Type]\tMULTILINETEXT\t\t601\t1\tPropertyBoundedValue\t1\n#\nGROUP\t602\tPset_SensorTypeMovementSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6930781b-cd14-4ab5-a618-2bda4d2121db\tPset_SensorTypeMovementSensor.MovementSensingType[Type]\tTEXT\t\t602\t1\tPEnum_MovementSensingType\t1\nPARAM\t7c3a0f10-41ba-4a28-a99a-456fd1c31682\tPset_SensorTypeMovementSensor.SetPointMovement[Type]\tMULTILINETEXT\t\t602\t1\tPropertyBoundedValue\t1\nPARAM\t1a62d7b5-ffb4-40e7-9576-26b1128da6eb\tPset_SensorTypeMovementSensor.TimeConstant[Type]\tNUMBER\t\t602\t1\tIfcTimeMeasure\t1\n#\nGROUP\t603\tPset_SensorTypePHSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tafb184f6-b079-407c-adca-f9879d01c711\tPset_SensorTypePHSensor.SetPointPH[Type]\tMULTILINETEXT\t\t603\t1\tPropertyBoundedValue\t1\n#\nGROUP\t604\tPset_SensorTypePressureSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t67958abe-ff22-4f93-a70d-4842fc6c3255\tPset_SensorTypePressureSensor.AccuracyOfPressureSensor[Type]\tNUMBER\t\t604\t1\tIfcPressureMeasure\t1\nPARAM\tdbb71775-1b38-493b-bc2f-2b7560b964f2\tPset_SensorTypePressureSensor.IsSwitch[Type]\tYESNO\t\t604\t1\tIfcBoolean\t1\nPARAM\t4659cb8b-9df5-4308-a2d8-e92f73d8a342\tPset_SensorTypePressureSensor.PressureSensorRange[Type]\tMULTILINETEXT\t\t604\t1\tPropertyBoundedValue\t1\nPARAM\t8a59e816-8836-4a35-b21c-061bf11483c6\tPset_SensorTypePressureSensor.PressureSensorSetPoint[Type]\tNUMBER\t\t604\t1\tIfcPressureMeasure\t1\nPARAM\t8f7ec94f-5a5c-4a92-813e-eebfeff58a71\tPset_SensorTypePressureSensor.SetPointPressure[Type]\tMULTILINETEXT\t\t604\t1\tPropertyBoundedValue\t1\nPARAM\t53589901-35ad-4e17-9e8d-6087a7b684e6\tPset_SensorTypePressureSensor.TimeConstant[Type]\tNUMBER\t\t604\t1\tIfcTimeMeasure\t1\n#\nGROUP\t605\tPset_SensorTypeRadiationSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf5a9ed4d-9c1b-4cd3-8457-b2eea6492a21\tPset_SensorTypeRadiationSensor.SetPointRadiation[Type]\tMULTILINETEXT\t\t605\t1\tPropertyBoundedValue\t1\n#\nGROUP\t606\tPset_SensorTypeRadioactivitySensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3c9d740a-38bc-41ed-a7c4-f7a32e7ef628\tPset_SensorTypeRadioactivitySensor.SetPointRadioactivity[Type]\tMULTILINETEXT\t\t606\t1\tPropertyBoundedValue\t1\n#\nGROUP\t607\tPset_SensorTypeRainSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td81c0bb5-7c2e-4cd4-b0c0-bd5e96ed4a85\tPset_SensorTypeRainSensor.DataCollectionType[Type]\tTEXT\t\t607\t1\tPEnum_DataCollectionType\t1\nPARAM\t3507fa5a-3345-4172-8b38-e42086432f5b\tPset_SensorTypeRainSensor.LengthMeasureResolution[Type]\tLENGTH\t\t607\t1\tIfcLengthMeasure\t1\nPARAM\t250b85ba-45e3-449e-9595-d155d0e882f2\tPset_SensorTypeRainSensor.MarginOfError[Type]\tNUMBER\t\t607\t1\tIfcRatioMeasure\t1\nPARAM\td149334b-5913-47ef-a6cf-659be306c2d9\tPset_SensorTypeRainSensor.RainMeasureRange[Type]\tMULTILINETEXT\t\t607\t1\tPropertyBoundedValue\t1\nPARAM\t7b88f636-0d60-4b74-be45-f4771b5953c3\tPset_SensorTypeRainSensor.RainSensorType[Type]\tTEXT\t\t607\t1\tPEnum_RainSensorType\t1\nPARAM\te9d10187-a1cc-492d-9429-ea6798e87021\tPset_SensorTypeRainSensor.SamplingFrequency[Type]\tNUMBER\t\t607\t1\tIfcFrequencyMeasure\t1\nPARAM\tdde25609-29c2-46c5-b31b-0ed99d5092a2\tPset_SensorTypeRainSensor.SerialInterfaceType[Type]\tTEXT\t\t607\t1\tPEnum_SerialInterfaceType\t1\nPARAM\t8d803f4b-f960-4c64-a98f-b7fd29e1a0e1\tPset_SensorTypeRainSensor.WorkingState[Type]\tTEXT\t\t607\t1\tIfcLabel\t1\n#\nGROUP\t608\tPset_SensorTypeSmokeSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8565329c-ef35-46b7-ae95-4ad0090439f3\tPset_SensorTypeSmokeSensor.AccuracyOfSmokeSensor[Type]\tNUMBER\t\t608\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t39a1e9ae-56b3-4654-8ab2-7e8ebcadc5d8\tPset_SensorTypeSmokeSensor.CoverageArea[Type]\tAREA\t\t608\t1\tIfcAreaMeasure\t1\nPARAM\t4f095642-5555-4829-931c-5ec26f5bea09\tPset_SensorTypeSmokeSensor.HasBuiltInAlarm[Type]\tYESNO\t\t608\t1\tIfcBoolean\t1\nPARAM\t2dfcede9-243e-41c7-992d-8ce901702538\tPset_SensorTypeSmokeSensor.PressureSensorSetPoint[Type]\tNUMBER\t\t608\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0c4e9d2b-4582-4ef7-84dd-dfc934c6b5e6\tPset_SensorTypeSmokeSensor.SetPointConcentration[Type]\tMULTILINETEXT\t\t608\t1\tPropertyBoundedValue\t1\nPARAM\td3e21277-f9de-4170-abf6-76945a98dda8\tPset_SensorTypeSmokeSensor.SmokeSensorRange[Type]\tMULTILINETEXT\t\t608\t1\tPropertyBoundedValue\t1\nPARAM\tbbc581bb-002c-4e14-97be-c733580fd1fe\tPset_SensorTypeSmokeSensor.TimeConstant[Type]\tNUMBER\t\t608\t1\tIfcTimeMeasure\t1\n#\nGROUP\t609\tPset_SensorTypeSnowSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t657a586f-d2cf-4246-92bf-772ba3edb565\tPset_SensorTypeSnowSensor.DataCollectionType[Type]\tTEXT\t\t609\t1\tPEnum_DataCollectionType\t1\nPARAM\tf53b7e63-fa78-4995-8361-107083ada10a\tPset_SensorTypeSnowSensor.ImageResolution[Type]\tTEXT\t\t609\t1\tIfcLabel\t1\nPARAM\t625bb973-8cdb-4844-a68d-97147d692bd1\tPset_SensorTypeSnowSensor.ImageShootingMode[Type]\tTEXT\t\t609\t1\tPEnum_ImageShootingMode\t1\nPARAM\t8ac77ef4-d8db-44ae-92bc-97f5d75f10da\tPset_SensorTypeSnowSensor.LengthMeasureResolution[Type]\tLENGTH\t\t609\t1\tIfcLengthMeasure\t1\nPARAM\tce64c7d0-909e-4eda-9581-17ea1ee0ad3d\tPset_SensorTypeSnowSensor.MarginOfError[Type]\tNUMBER\t\t609\t1\tIfcRatioMeasure\t1\nPARAM\t0f214696-e170-4db3-973f-49cf5b0badb8\tPset_SensorTypeSnowSensor.SamplingFrequency[Type]\tNUMBER\t\t609\t1\tIfcFrequencyMeasure\t1\nPARAM\t461e11fd-ab8e-41a3-90a2-a7579fc255da\tPset_SensorTypeSnowSensor.SerialInterfaceType[Type]\tTEXT\t\t609\t1\tPEnum_SerialInterfaceType\t1\nPARAM\t437cb7bd-130b-47fc-ab3c-ad1253f4cc6d\tPset_SensorTypeSnowSensor.SnowSensorMeasureRange[Type]\tMULTILINETEXT\t\t609\t1\tPropertyBoundedValue\t1\nPARAM\tc9478229-3940-4ddd-a60e-f2b5474d3b5d\tPset_SensorTypeSnowSensor.SnowSensorType[Type]\tTEXT\t\t609\t1\tPEnum_SnowSensorType\t1\n#\nGROUP\t610\tPset_SensorTypeSoundSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1583353c-41c2-4a63-a60b-9ed740c0ff1e\tPset_SensorTypeSoundSensor.SetPointSound[Type]\tMULTILINETEXT\t\t610\t1\tPropertyBoundedValue\t1\nPARAM\t220fcee9-0379-490c-bf7d-e5a5719b1910\tPset_SensorTypeSoundSensor.SoundSensorAccuracy[Type]\tNUMBER\t\t610\t1\tIfcSoundPressureMeasure\t1\nPARAM\tdb8a3e98-8943-4f2c-add0-66d692f24e27\tPset_SensorTypeSoundSensor.SoundSensorRange[Type]\tMULTILINETEXT\t\t610\t1\tPropertyBoundedValue\t1\nPARAM\tf9a4594f-3119-4c63-b7ad-cc37d33d5825\tPset_SensorTypeSoundSensor.SoundSensorSetPoint[Type]\tNUMBER\t\t610\t1\tIfcSoundPressureMeasure\t1\nPARAM\t8b2bdb85-c832-44a5-9965-2b3ed0e00d79\tPset_SensorTypeSoundSensor.TimeConstant[Type]\tNUMBER\t\t610\t1\tIfcTimeMeasure\t1\n#\nGROUP\t611\tPset_SensorTypeTemperatureSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbcb725df-1402-430f-a1cb-ae69ce207b01\tPset_SensorTypeTemperatureSensor.AccuracyOfTemperatureSensor[Type]\tNUMBER\t\t611\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tfabb4ddb-d039-4c7c-a7c3-a73167197018\tPset_SensorTypeTemperatureSensor.SetPointTemperature[Type]\tMULTILINETEXT\t\t611\t1\tPropertyBoundedValue\t1\nPARAM\ta723d50f-193e-4ed1-b34f-92236af64095\tPset_SensorTypeTemperatureSensor.TemperatureSensorRange[Type]\tMULTILINETEXT\t\t611\t1\tPropertyBoundedValue\t1\nPARAM\t90dcd5a9-8eca-4f3d-b440-1e8b7f55bb7b\tPset_SensorTypeTemperatureSensor.TemperatureSensorSetPoint[Type]\tNUMBER\t\t611\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t980b275e-4d58-44a1-a4a7-354aa0795ad4\tPset_SensorTypeTemperatureSensor.TemperatureSensorType[Type]\tTEXT\t\t611\t1\tPEnum_TemperatureSensorType\t1\nPARAM\tbd22bc88-f009-45f0-99cf-3f5f7a6e0a03\tPset_SensorTypeTemperatureSensor.TimeConstant[Type]\tNUMBER\t\t611\t1\tIfcTimeMeasure\t1\n#\nGROUP\t612\tPset_SensorTypeTurnoutClosureSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t98588dcd-2d61-4684-9661-b8554ed37d5a\tPset_SensorTypeTurnoutClosureSensor.DetectionRange[Type]\tLENGTH\t\t612\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t30552672-029a-47c7-a865-d881a1225429\tPset_SensorTypeTurnoutClosureSensor.IndicationRodMovementRange[Type]\tMULTILINETEXT\t\t612\t1\tPropertyBoundedValue\t1\n#\nGROUP\t613\tPset_SensorTypeWindSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbd5b9251-11e6-420c-aa34-d0cd4ac83a2e\tPset_SensorTypeWindSensor.DampingRatio[Type]\tNUMBER\t\t613\t1\tIfcRatioMeasure\t1\nPARAM\t52db3347-97b9-445b-aa78-2e42d554108e\tPset_SensorTypeWindSensor.DataCollectionType[Type]\tTEXT\t\t613\t1\tPEnum_DataCollectionType\t1\nPARAM\tdb89f47a-4298-4efd-9e7e-8edf48ad789f\tPset_SensorTypeWindSensor.LinearVelocityResolution[Type]\tNUMBER\t\t613\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t1bdd405d-aebb-484e-b478-c639829b9e4d\tPset_SensorTypeWindSensor.MarginOfError[Type]\tNUMBER\t\t613\t1\tIfcRatioMeasure\t1\nPARAM\tf8775679-d6f0-475e-b484-c296e1274683\tPset_SensorTypeWindSensor.SamplingFrequency[Type]\tNUMBER\t\t613\t1\tIfcFrequencyMeasure\t1\nPARAM\ta5e621a9-8221-44ad-860a-b07af2c7ec71\tPset_SensorTypeWindSensor.SerialInterfaceType[Type]\tTEXT\t\t613\t1\tPEnum_SerialInterfaceType\t1\nPARAM\tb2751060-6692-407e-a273-9c38e014463e\tPset_SensorTypeWindSensor.SetPointSpeed[Type]\tNUMBER\t\t613\t1\tIfcLinearVelocityMeasure\t1\nPARAM\te19e96ee-cb2e-43f0-954d-f8b0902e5fd3\tPset_SensorTypeWindSensor.StartingWindSpeed[Type]\tNUMBER\t\t613\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t1a7273c4-816c-40c9-846b-16d4326cdbd2\tPset_SensorTypeWindSensor.TimeConstant[Type]\tNUMBER\t\t613\t1\tIfcTimeMeasure\t1\nPARAM\t1810ada2-4df7-409d-9b9a-946c755e61f2\tPset_SensorTypeWindSensor.WindAngleRange[Type]\tMULTILINETEXT\t\t613\t1\tPropertyBoundedValue\t1\nPARAM\t9f657251-8b4f-46f8-8fb3-1139177e8b77\tPset_SensorTypeWindSensor.WindSensorType[Type]\tTEXT\t\t613\t1\tPEnum_WindSensorType\t1\nPARAM\tcbea2460-f58e-407a-badf-3988555b40e3\tPset_SensorTypeWindSensor.WindSpeedRange[Type]\tMULTILINETEXT\t\t613\t1\tPropertyBoundedValue\t1\nPARAM\t13f46408-bc23-4a06-b2f7-8141894cf226\tPset_SensorTypeWindSensor.WorkingState[Type]\tTEXT\t\t613\t1\tIfcLabel\t1\n#\nGROUP\t614\tPset_ServiceLife\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t99041e3e-6dcb-4a73-8426-8cd1a0be7714\tPset_ServiceLife.MeanTimeBetweenFailure[Type]\tTEXT\t\t614\t1\tIfcDuration\t1\nPARAM\tba4f92b0-b561-4efb-8270-08cd29d40f95\tPset_ServiceLife.ServiceLifeDuration[Type]\tMULTILINETEXT\t\t614\t1\tPropertyBoundedValue\t1\n#\nGROUP\t615\tPset_ServiceLifeFactors\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td027a521-8e5d-4b8e-8a41-6a66d085ae46\tPset_ServiceLifeFactors.DesignLevel[Type]\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\nPARAM\tfef76b26-3e57-47dc-a245-427769e6e789\tPset_ServiceLifeFactors.IndoorEnvironment[Type]\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\nPARAM\tb418781a-20c7-4216-b46b-caed51e376fd\tPset_ServiceLifeFactors.InUseConditions[Type]\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\nPARAM\t6cf7b69b-9e21-4134-8191-568fdadfdec3\tPset_ServiceLifeFactors.MaintenanceLevel[Type]\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\nPARAM\taebf4086-a9a6-44b5-bd66-0ad5f1bde6e8\tPset_ServiceLifeFactors.OutdoorEnvironment[Type]\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\nPARAM\t2474ade2-5159-4d91-b5d8-b55a45d04eb0\tPset_ServiceLifeFactors.QualityOfComponents[Type]\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\nPARAM\t443652af-da40-40f9-a555-ae7176b7c37b\tPset_ServiceLifeFactors.WorkExecutionLevel[Type]\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\n#\nGROUP\t616\tPset_ShadingDeviceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t545ddf8d-2fb8-41a7-aafc-901611eb35d8\tPset_ShadingDeviceCommon.IsExternal[Type]\tYESNO\t\t616\t1\tIfcBoolean\t1\nPARAM\t5eca956d-8e23-46c5-9d7d-7ff198cc2150\tPset_ShadingDeviceCommon.MechanicalOperated[Type]\tYESNO\t\t616\t1\tIfcBoolean\t1\nPARAM\t81dc2ba4-9d63-4133-9d79-c2a0a602fdb1\tPset_ShadingDeviceCommon.Reference[Type]\tTEXT\t\t616\t1\tIfcIdentifier\t1\nPARAM\t1f92a3e0-92fb-4cd4-ab78-222b53adff7f\tPset_ShadingDeviceCommon.Roughness[Type]\tTEXT\t\t616\t1\tIfcLabel\t1\nPARAM\td3c982fa-85bd-41be-953c-05b07d03d797\tPset_ShadingDeviceCommon.ShadingDeviceType[Type]\tTEXT\t\t616\t1\tPEnum_ElementShading\t1\nPARAM\t0cddeddb-1d82-4aa1-b7f9-9c5110d12898\tPset_ShadingDeviceCommon.SolarReflectance[Type]\tNUMBER\t\t616\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t94a4230e-d204-40ec-be73-7e437ccdea00\tPset_ShadingDeviceCommon.SolarTransmittance[Type]\tNUMBER\t\t616\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\te124e6e5-ac8e-48a1-b13a-30c21fd93bbb\tPset_ShadingDeviceCommon.Status[Type]\tTEXT\t\t616\t1\tPEnum_ElementStatus\t1\nPARAM\tc7e8e23c-9e43-4685-b94d-77b6f989a79a\tPset_ShadingDeviceCommon.SurfaceColor[Type]\tTEXT\t\t616\t1\tIfcLabel\t1\nPARAM\t4ee44756-63ec-45f1-b144-b83c8bdc96e9\tPset_ShadingDeviceCommon.SurfaceColour[Type]\tTEXT\t\t616\t1\tIfcLabel\t1\nPARAM\tefebd056-98ac-4db4-af32-823a77678e74\tPset_ShadingDeviceCommon.ThermalTransmittance[Type]\tNUMBER\t\t616\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\td7bbd7c0-911c-46dd-8067-f6e9202f8eca\tPset_ShadingDeviceCommon.VisibleLightReflectance[Type]\tNUMBER\t\t616\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t94772c6e-e759-44da-95e1-1d0bfaacd49c\tPset_ShadingDeviceCommon.VisibleLightTransmittance[Type]\tNUMBER\t\t616\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t617\tPset_ShadingDevicePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tafe63cea-c77d-4fa5-90ac-004bb1789092\tPset_ShadingDevicePHistory.Azimuth[Type]\tMULTILINETEXT\t\t617\t1\tIfcTimeSeries\t1\nPARAM\t6c4d264d-c2b5-465e-ba38-fe2d6763d39d\tPset_ShadingDevicePHistory.TiltAngle[Type]\tMULTILINETEXT\t\t617\t1\tIfcTimeSeries\t1\n#\nGROUP\t618\tPset_ShipLockCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf17aca83-a4ab-4b87-b40f-747c5e1ff032\tPset_ShipLockCommon.CillLevelLowerHead[Type]\tLENGTH\t\t618\t1\tIfcLengthMeasure\t1\nPARAM\t203f13ca-dd15-4f76-bd31-be9a6ae2c841\tPset_ShipLockCommon.CillLevelUpperHead[Type]\tLENGTH\t\t618\t1\tIfcLengthMeasure\t1\nPARAM\t6967b678-910d-4ea5-9b0e-452e39a774ae\tPset_ShipLockCommon.WaterDeliverySystemType[Type]\tTEXT\t\t618\t1\tIfcLabel\t1\nPARAM\t53341f44-8138-48af-a1c7-726abe5c81b2\tPset_ShipLockCommon.WaterDeliveryValveType[Type]\tTEXT\t\t618\t1\tIfcLabel\t1\n#\nGROUP\t619\tPset_ShiplockComplex\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfa5e34b6-5f2a-4160-a1f6-641c6a9d4847\tPset_ShiplockComplex.LockChamberLevels[Type]\tINTEGER\t\t619\t1\tIfcCountMeasure\t1\nPARAM\tb577d862-8f2d-43a0-b595-2fddcc15594b\tPset_ShiplockComplex.LockGrade[Type]\tTEXT\t\t619\t1\tIfcLabel\t1\nPARAM\t5afb29df-7f0f-4ab4-8503-6c3faf7714aa\tPset_ShiplockComplex.LockLines[Type]\tINTEGER\t\t619\t1\tIfcCountMeasure\t1\nPARAM\t51fa8bad-86f9-406b-8b43-9d78819eeef4\tPset_ShiplockComplex.LockMode[Type]\tTEXT\t\t619\t1\tIfcLabel\t1\n#\nGROUP\t620\tPset_ShiplockDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t159c9dd3-e157-4d4b-823e-987127b3ec7a\tPset_ShiplockDesignCriteria.DownstreamFloodWaterLevel[Type]\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\t93bdbd03-d5f3-417c-81c0-cfd6ce4c8b0e\tPset_ShiplockDesignCriteria.DownstreamMaintenanceWaterLevel[Type]\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\t45541fd2-77f2-47b4-bc70-9b3e20b84fba\tPset_ShiplockDesignCriteria.MaximumDownstreamNavigableWaterLevel[Type]\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\tecdddff6-553e-4bde-a3b3-00d85dc06c6b\tPset_ShiplockDesignCriteria.MaximumUpstreamNavigableWaterLevel[Type]\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\t7825b4b3-c96a-48a3-97fe-2e37fb165b3c\tPset_ShiplockDesignCriteria.MinimumDownstreamNavigableWaterLevel[Type]\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\tb35940d3-fb82-4f7d-ae02-43d840f69ee8\tPset_ShiplockDesignCriteria.MinimumUpstreamNavigableWaterLevel[Type]\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\t629da9e9-80a6-4a6e-bdbf-19b443082671\tPset_ShiplockDesignCriteria.UpstreamFloodWaterLevel[Type]\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\tf1d53b68-0233-4e8b-ab51-2165a76d62d5\tPset_ShiplockDesignCriteria.UpstreamMaintenanceWaterLevel[Type]\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\n#\nGROUP\t621\tPset_ShipyardCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t65c5326e-cc9c-46f8-ab57-ac7f50afe375\tPset_ShipyardCommon.PrimaryProductionType[Type]\tTEXT\t\t621\t1\tIfcLabel\t1\n#\nGROUP\t622\tPset_SignalFrame\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te01f569f-3c84-409d-968d-36d5a10f5d30\tPset_SignalFrame.BackboardType[Type]\tTEXT\t\t622\t1\tIfcLabel\t1\nPARAM\t1d683ec4-f547-4f13-a64f-02337361fa30\tPset_SignalFrame.NominalWidth[Type]\tLENGTH\t\t622\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t288a90f4-da44-449c-957b-a2f3009ea853\tPset_SignalFrame.SignalFrameBackboardDiameter[Type]\tLENGTH\t\t622\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td98ebfd9-5a94-48e0-84e4-4a95d2d03d50\tPset_SignalFrame.SignalFrameBackboardHeight[Type]\tLENGTH\t\t622\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb696de9f-ce67-4f98-9cf3-9e580bcc54a1\tPset_SignalFrame.SignalFrameType[Type]\tTEXT\t\t622\t1\tIfcLabel\t1\nPARAM\t04a15cc5-d7e6-4b4a-a926-d30acd3081e1\tPset_SignalFrame.SignalIndicatorType[Type]\tTEXT\t\t622\t1\tPEnum_SignalIndicatorType\t1\n#\nGROUP\t623\tPset_SignCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t34af4abc-5cdd-4a80-92db-258efc46bfd3\tPset_SignCommon.Category[Type]\tTEXT\t\t623\t1\tIfcLabel\t1\nPARAM\t3b4571a5-06a2-4d06-aa8a-573f40d9dd95\tPset_SignCommon.IsExternal[Type]\tYESNO\t\t623\t1\tIfcBoolean\t1\nPARAM\tf59c7cbf-3136-4101-877e-e5d160c2be39\tPset_SignCommon.Reference[Type]\tTEXT\t\t623\t1\tIfcIdentifier\t1\nPARAM\t45e897fa-84b7-420e-9db0-0ad60e3f1e39\tPset_SignCommon.TactileMarking[Type]\tYESNO\t\t623\t1\tIfcBoolean\t1\n#\nGROUP\t624\tPset_SiteCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc192434-a47b-4892-99e4-4d17de4af98f\tPset_SiteCommon.BuildableArea[Type]\tAREA\t\t624\t1\tIfcAreaMeasure\t1\nPARAM\t4fbd7143-d67d-452a-b5fe-3e9fe769faee\tPset_SiteCommon.BuildingHeightLimit[Type]\tLENGTH\t\t624\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t75587a0b-e714-4c19-a026-2488e126418e\tPset_SiteCommon.FloorAreaRatio[Type]\tNUMBER\t\t624\t1\tIfcPositiveRatioMeasure\t1\nPARAM\te3bdb31b-360f-41ab-bd25-cc902376926f\tPset_SiteCommon.GrossAreaPlanned[Type]\tAREA\t\t624\t1\tIfcAreaMeasure\t1\nPARAM\t8b0e0f7c-cac3-4094-8a9a-78bca52534e2\tPset_SiteCommon.Reference[Type]\tTEXT\t\t624\t1\tIfcIdentifier\t1\nPARAM\t5da368b1-9384-431c-8816-e98e59efc079\tPset_SiteCommon.SiteCoverageRatio[Type]\tNUMBER\t\t624\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tae3e17ee-5703-407a-8d88-87c9d23af519\tPset_SiteCommon.TotalArea[Type]\tAREA\t\t624\t1\tIfcAreaMeasure\t1\n#\nGROUP\t625\tPset_SiteWeather\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2a966ad7-2431-4a34-9c88-033def9131a8\tPset_SiteWeather.MaxAmbientTemp[Type]\tNUMBER\t\t625\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tacb42333-84b8-4579-af61-c8fbc280ad9f\tPset_SiteWeather.MinAmbientTemp[Type]\tNUMBER\t\t625\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t626\tPset_SlabCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbf309f13-1d61-4c34-a2ac-fc9d1b96cc25\tPset_SlabCommon.AcousticRating[Type]\tTEXT\t\t626\t1\tIfcLabel\t1\nPARAM\t78221376-d9ac-4165-894c-6566e0f4b8e5\tPset_SlabCommon.Combustible[Type]\tYESNO\t\t626\t1\tIfcBoolean\t1\nPARAM\t373e24fa-549f-4c47-92ed-33371c43835f\tPset_SlabCommon.Compartmentation[Type]\tYESNO\t\t626\t1\tIfcBoolean\t1\nPARAM\t034ac52c-699d-4d5f-8d6c-5492bb9dd875\tPset_SlabCommon.FireRating[Type]\tTEXT\t\t626\t1\tIfcLabel\t1\nPARAM\tbc2c8668-f247-4ef9-8244-ad0910072bb1\tPset_SlabCommon.IsExternal[Type]\tYESNO\t\t626\t1\tIfcBoolean\t1\nPARAM\t20de9962-30d0-4e89-a7ae-72ae9c8ba10d\tPset_SlabCommon.LoadBearing[Type]\tYESNO\t\t626\t1\tIfcBoolean\t1\nPARAM\td287b84b-a68c-4463-bac1-f7e18f500fd4\tPset_SlabCommon.PitchAngle[Type]\tNUMBER\t\t626\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t933a46a8-9a83-4f2d-998b-6f7259bb672c\tPset_SlabCommon.Reference[Type]\tTEXT\t\t626\t1\tIfcIdentifier\t1\nPARAM\t7b96a722-6761-460f-a615-8baf88d050a3\tPset_SlabCommon.Status[Type]\tTEXT\t\t626\t1\tPEnum_ElementStatus\t1\nPARAM\tc94be42f-abd0-4b86-9fd6-c2fb04cd9405\tPset_SlabCommon.SurfaceSpreadOfFlame[Type]\tTEXT\t\t626\t1\tIfcLabel\t1\nPARAM\tad332f5d-4f1a-4d99-9e12-d7da39aa1813\tPset_SlabCommon.ThermalTransmittance[Type]\tNUMBER\t\t626\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t627\tPset_SlabTypeTrackSlab\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t31aac763-45ba-4c12-a0c7-e961bb22fd7f\tPset_SlabTypeTrackSlab.TechnicalStandard[Type]\tMULTILINETEXT\t\t627\t1\tIfcExternalReference\t1\n#\nGROUP\t628\tPset_SolarDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7fa0f5f2-b7ea-4581-9e05-ebf4c2ad6414\tPset_SolarDeviceTypeCommon.ActiveCellSurfaceAreaFraction[Type]\tNUMBER\t\t628\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\td2b583e5-cade-4992-9e37-edcf5520ce5c\tPset_SolarDeviceTypeCommon.CellEfficiency[Type]\tNUMBER\t\t628\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tb047b98a-c2b1-4ec5-a6bf-0106a7cc99d8\tPset_SolarDeviceTypeCommon.Reference[Type]\tTEXT\t\t628\t1\tIfcIdentifier\t1\nPARAM\tf79d8de9-2f85-4254-92ba-0c19e931d615\tPset_SolarDeviceTypeCommon.Status[Type]\tTEXT\t\t628\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t629\tPset_SolidStratumCapacity\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tba420cf5-5553-48a7-b3ae-fef28342f5b0\tPset_SolidStratumCapacity.CohesionBehaviour[Type]\tNUMBER\t\t629\t1\tIfcPressureMeasure\t1\nPARAM\t3bfd9438-918f-440d-b69b-a5e7b79d8acd\tPset_SolidStratumCapacity.FrictionAngle[Type]\tNUMBER\t\t629\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tfcafda92-a79b-4528-aff1-f0147c071a0c\tPset_SolidStratumCapacity.FrictionBehaviour[Type]\tNUMBER\t\t629\t1\tIfcPressureMeasure\t1\nPARAM\t12a7d88c-6fdf-46ad-a6ae-2b715f21b797\tPset_SolidStratumCapacity.GrainSize[Type]\tLENGTH\t\t629\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfa70b98d-2d2a-4b64-8329-e0ba17f77a09\tPset_SolidStratumCapacity.HydraulicConductivity[Type]\tNUMBER\t\t629\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t6b4818d2-3522-4e6d-b5b6-75abefc279f3\tPset_SolidStratumCapacity.LoadBearingCapacity[Type]\tNUMBER\t\t629\t1\tIfcPlanarForceMeasure\t1\nPARAM\tf72da8d6-54a3-4632-81b3-4a2e1e92ca51\tPset_SolidStratumCapacity.NValue[Type]\tINTEGER\t\t629\t1\tIfcCountMeasure\t1\nPARAM\t9f1895b1-45b0-4b2e-8082-7b17c0538836\tPset_SolidStratumCapacity.PermeabilityBehaviour[Type]\tNUMBER\t\t629\t1\tIfcRatioMeasure\t1\nPARAM\t964088e0-485a-411f-bcac-edf0d8752abe\tPset_SolidStratumCapacity.PoisonsRatio[Type]\tNUMBER\t\t629\t1\tIfcRatioMeasure\t1\nPARAM\t03051120-87b6-4ab9-b186-c8cf942a987c\tPset_SolidStratumCapacity.PwaveVelocity[Type]\tNUMBER\t\t629\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tdc7c97d9-edda-4f14-8eee-c1f6f60acd72\tPset_SolidStratumCapacity.Resistivity[Type]\tNUMBER\t\t629\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t3aa9623f-308e-4ebd-86b3-afc34dbe1633\tPset_SolidStratumCapacity.SettlementBehaviour[Type]\tNUMBER\t\t629\t1\tIfcPressureMeasure\t1\nPARAM\t818f72cd-d80b-49f0-b0bb-c9251ea3b10d\tPset_SolidStratumCapacity.SwaveVelocity[Type]\tNUMBER\t\t629\t1\tIfcLinearVelocityMeasure\t1\n#\nGROUP\t630\tPset_SolidStratumComposition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t36a57b2a-fd04-49ed-95c9-f08247d6a25f\tPset_SolidStratumComposition.AirVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t1878e853-e616-4fce-ba9c-ed03696e20c8\tPset_SolidStratumComposition.BouldersVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t0069c3bf-3e0b-4fc0-9196-9ab8c304dcb3\tPset_SolidStratumComposition.ClayVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t2b9d197c-ce39-4d5b-a5ba-4f3bf26bc20c\tPset_SolidStratumComposition.CobblesVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t399120a1-b886-4a3c-9c79-b4de1309fab4\tPset_SolidStratumComposition.CompositeFractions[Type]\tTEXT\t\t630\t1\tPEnum_SoilCompositeFractions\t1\nPARAM\t9aa51a49-7c9c-449e-a4a2-49f2fa31c20d\tPset_SolidStratumComposition.ContaminantVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t27efbccf-cee9-438c-94a7-1991cd7f813f\tPset_SolidStratumComposition.FillVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\tb9a2f316-c9b9-47ee-b99c-9bf78b60e79c\tPset_SolidStratumComposition.GravelVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t344fadff-0270-4d31-a8e7-82751969e6b9\tPset_SolidStratumComposition.OrganicVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t741cccb9-5b1c-45f7-bb5a-395d0cbc5d0e\tPset_SolidStratumComposition.RockVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t282ffffd-2978-4b46-a09e-7348ccdc6f26\tPset_SolidStratumComposition.SandVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t1cab46d4-2179-4e97-82af-667dad41f2ac\tPset_SolidStratumComposition.SiltVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t9f2b013c-82b2-4ad4-8d41-e52216f354dc\tPset_SolidStratumComposition.WaterVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t631\tPset_SoundAttenuation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3e1472e5-c921-4a43-a408-cc56bd5238ad\tPset_SoundAttenuation.SoundFrequency[Type]\tMULTILINETEXT\t\t631\t1\tPropertyListValue\t1\nPARAM\t4db22946-f2ce-4563-adc5-c004662e1ebf\tPset_SoundAttenuation.SoundPressure[Type]\tMULTILINETEXT\t\t631\t1\tIfcTimeSeries\t1\nPARAM\t6406b059-8daf-439d-978e-5378a4e101df\tPset_SoundAttenuation.SoundScale[Type]\tTEXT\t\t631\t1\tPEnum_SoundScale\t1\n#\nGROUP\t632\tPset_SoundGeneration\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5e7c163d-fe18-4508-9f64-587c41931e59\tPset_SoundGeneration.SoundCurve[Type]\tMULTILINETEXT\t\t632\t1\tPropertyTableValue\t1\n#\nGROUP\t633\tPset_SpaceAirHandlingDimensioning\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t04a79bba-c4c9-460e-ac39-11efd8a4f63b\tPset_SpaceAirHandlingDimensioning.BoundaryAreaHeatLoss[Type]\tNUMBER\t\t633\t1\tIfcHeatFluxDensityMeasure\t1\nPARAM\td9702bd1-722d-40ec-b41a-4ec648c4a50a\tPset_SpaceAirHandlingDimensioning.CeilingRAPlenum[Type]\tYESNO\t\t633\t1\tIfcBoolean\t1\nPARAM\taf1d8714-a925-4e8b-b47f-cae1ec64ca4e\tPset_SpaceAirHandlingDimensioning.CoolingDesignAirFlow[Type]\tNUMBER\t\t633\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t26021d32-fb1a-4a43-b9de-1f9d32a0b721\tPset_SpaceAirHandlingDimensioning.CoolingDryBulb[Type]\tNUMBER\t\t633\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t40f05b5c-4413-4e41-ad35-e949a7768fbb\tPset_SpaceAirHandlingDimensioning.CoolingRelativeHumidity[Type]\tNUMBER\t\t633\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1b28d809-30d7-4d7c-8bfc-8bc163ad7f0f\tPset_SpaceAirHandlingDimensioning.DesignAirFlow[Type]\tNUMBER\t\t633\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t587e6981-b204-4c0c-8b3a-67802eb8efb1\tPset_SpaceAirHandlingDimensioning.HeatingDesignAirFlow[Type]\tNUMBER\t\t633\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t70a7a677-6a6a-4f0b-88ce-8e49dd310087\tPset_SpaceAirHandlingDimensioning.HeatingDryBulb[Type]\tNUMBER\t\t633\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t1dd3dc93-b68e-44b8-b41e-8e9f121808ef\tPset_SpaceAirHandlingDimensioning.HeatingRelativeHumidity[Type]\tNUMBER\t\t633\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7ff03702-5e3f-4f60-a56d-68a904e6a22e\tPset_SpaceAirHandlingDimensioning.SensibleHeatGain[Type]\tNUMBER\t\t633\t1\tIfcPowerMeasure\t1\nPARAM\t79d0af90-3833-48ce-adb9-16626c7e2688\tPset_SpaceAirHandlingDimensioning.TotalHeatGain[Type]\tNUMBER\t\t633\t1\tIfcPowerMeasure\t1\nPARAM\t03ea092e-cafc-4b50-a3d8-7975cb886f2f\tPset_SpaceAirHandlingDimensioning.TotalHeatLoss[Type]\tNUMBER\t\t633\t1\tIfcPowerMeasure\t1\nPARAM\t803b193e-df1b-42ea-a7f8-a1504172ac08\tPset_SpaceAirHandlingDimensioning.VentilationDesignAirFlow[Type]\tNUMBER\t\t633\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t634\tPset_SpaceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta0f71104-3c1c-48e8-b727-f75d34d91545\tPset_SpaceCommon.Category[Type]\tTEXT\t\t634\t1\tIfcLabel\t1\nPARAM\t74c770fb-bdd5-482a-ac2c-0e307f87bd7e\tPset_SpaceCommon.CeilingCovering[Type]\tTEXT\t\t634\t1\tIfcLabel\t1\nPARAM\t27c4ebd0-6152-4af8-8cfe-7753e0614d79\tPset_SpaceCommon.Concealed[Type]\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\t24d74396-7a5a-44d5-92a9-ea5e397547de\tPset_SpaceCommon.ConcealedCeiling[Type]\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\t8ad96da3-560b-4779-b299-63c12e36d34d\tPset_SpaceCommon.ConcealedFlooring[Type]\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\tf7e8ac45-2a3d-470d-a77d-c132dc4973e3\tPset_SpaceCommon.FloorCovering[Type]\tTEXT\t\t634\t1\tIfcLabel\t1\nPARAM\t4add0b52-f383-4391-8bb9-d4e480714b3c\tPset_SpaceCommon.GrossAreaPlanned[Type]\tAREA\t\t634\t1\tIfcAreaMeasure\t1\nPARAM\tb1ec1c48-b0db-485a-b90b-0e697b26c662\tPset_SpaceCommon.GrossPlannedArea[Type]\tAREA\t\t634\t1\tIfcAreaMeasure\t1\nPARAM\t5464d758-bdab-4fd3-9d30-7e1069aec35e\tPset_SpaceCommon.HandicapAccessible[Type]\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\t040b3079-f7c7-4548-980c-6fbf693c64e6\tPset_SpaceCommon.IsExternal[Type]\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\td2a57aa4-c177-4b73-b9c8-e80431ca733e\tPset_SpaceCommon.MechanicalVentilationRate[Type]\tINTEGER\t\t634\t1\tIfcCountMeasure\t1\nPARAM\td04afbd6-8900-4002-bb52-c7d166c8078f\tPset_SpaceCommon.NaturalVentilation[Type]\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\t5304461a-5e75-4c16-a66f-2ddfbc494621\tPset_SpaceCommon.NaturalVentilationRate[Type]\tINTEGER\t\t634\t1\tIfcCountMeasure\t1\nPARAM\t773d8674-94d8-44e7-9a0f-565f997ec6df\tPset_SpaceCommon.NetPlannedArea[Type]\tAREA\t\t634\t1\tIfcAreaMeasure\t1\nPARAM\tb9633db9-36db-412e-b5de-2b79e95aba15\tPset_SpaceCommon.OccupancyNumber[Type]\tINTEGER\t\t634\t1\tIfcCountMeasure\t1\nPARAM\tf7e838b8-a9f3-45c1-8d2d-17645e3c570f\tPset_SpaceCommon.OccupancyType[Type]\tTEXT\t\t634\t1\tIfcLabel\t1\nPARAM\t3c03b7e3-56f6-4f06-a7a0-72b285f2e2b7\tPset_SpaceCommon.PubliclyAccessible[Type]\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\t0ac022e5-f79e-4721-895a-479b73f510ff\tPset_SpaceCommon.Reference[Type]\tTEXT\t\t634\t1\tIfcIdentifier\t1\nPARAM\t3a6232d2-edea-4bc1-8b1b-732470913c53\tPset_SpaceCommon.SkirtingBoard[Type]\tTEXT\t\t634\t1\tIfcLabel\t1\nPARAM\t78aa25e8-47ed-4636-9012-31e301054f1f\tPset_SpaceCommon.WallCovering[Type]\tTEXT\t\t634\t1\tIfcLabel\t1\n#\nGROUP\t635\tPset_SpaceCoveringRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tea4d6e52-ef0f-4cd9-9c42-f425ec0d5581\tPset_SpaceCoveringRequirements.CeilingCovering[Type]\tTEXT\t\t635\t1\tIfcLabel\t1\nPARAM\t061687bd-5ed0-469d-af90-33651834618f\tPset_SpaceCoveringRequirements.CeilingCoveringThickness[Type]\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t10294023-ad4e-4990-8a7b-3b9fa35e0cf0\tPset_SpaceCoveringRequirements.ConcealedCeiling[Type]\tYESNO\t\t635\t1\tIfcBoolean\t1\nPARAM\tcf311e52-3331-438f-945f-423ce3b9c6e7\tPset_SpaceCoveringRequirements.ConcealedCeilingOffset[Type]\tLENGTH\t\t635\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tabc81409-eba1-484f-ba65-973ee316b5c4\tPset_SpaceCoveringRequirements.ConcealedFlooring[Type]\tYESNO\t\t635\t1\tIfcBoolean\t1\nPARAM\t6e963bf7-e060-47ab-96cd-10698f134482\tPset_SpaceCoveringRequirements.ConcealedFlooringOffset[Type]\tLENGTH\t\t635\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t4e3b74d1-3d69-4f39-a2ff-03eb4aec0776\tPset_SpaceCoveringRequirements.FloorCovering[Type]\tTEXT\t\t635\t1\tIfcLabel\t1\nPARAM\t763944bd-4f5d-4d21-89f6-d7ac47d7b525\tPset_SpaceCoveringRequirements.FloorCoveringThickness[Type]\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3f02ee6f-281c-4da9-8e8f-a87235bdf9bd\tPset_SpaceCoveringRequirements.Molding[Type]\tTEXT\t\t635\t1\tIfcLabel\t1\nPARAM\t9a63310a-2969-4c70-9495-405fd98abf09\tPset_SpaceCoveringRequirements.MoldingHeight[Type]\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t42f1cd2d-8b8b-41f2-a7b8-d97ce90975da\tPset_SpaceCoveringRequirements.SkirtingBoard[Type]\tTEXT\t\t635\t1\tIfcLabel\t1\nPARAM\ta1cf15ea-76d0-48d1-8029-8051db5dc464\tPset_SpaceCoveringRequirements.SkirtingBoardHeight[Type]\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6381df44-bcff-4bd8-82ae-625fb49818f2\tPset_SpaceCoveringRequirements.WallCovering[Type]\tTEXT\t\t635\t1\tIfcLabel\t1\nPARAM\tbd8857d9-0856-4434-9d16-e6d919a0fd25\tPset_SpaceCoveringRequirements.WallCoveringThickness[Type]\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t636\tPset_SpaceFireSafetyRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdd21485e-ff48-4fa0-87f5-10f0323fe12a\tPset_SpaceFireSafetyRequirements.AirPressurization[Type]\tYESNO\t\t636\t1\tIfcBoolean\t1\nPARAM\tb56b4925-a0bc-44e8-a837-94da6b5e5e18\tPset_SpaceFireSafetyRequirements.AncillaryFireUse[Type]\tTEXT\t\t636\t1\tIfcLabel\t1\nPARAM\t0b33d173-27f5-40e8-9729-8f6741f68109\tPset_SpaceFireSafetyRequirements.FireExit[Type]\tYESNO\t\t636\t1\tIfcBoolean\t1\nPARAM\t9a863ae4-e14a-43e6-9b38-43ac34fdec5a\tPset_SpaceFireSafetyRequirements.FireHazardFactor[Type]\tTEXT\t\t636\t1\tIfcLabel\t1\nPARAM\t02d10f52-b539-4f90-abe0-871ae79d21c0\tPset_SpaceFireSafetyRequirements.FireRiskFactor[Type]\tTEXT\t\t636\t1\tIfcLabel\t1\nPARAM\teaaaba53-a1f8-4bef-9535-5694bc5fb3a3\tPset_SpaceFireSafetyRequirements.FlammableStorage[Type]\tYESNO\t\t636\t1\tIfcBoolean\t1\nPARAM\t03126e95-d825-4dc1-9e84-3d4ec72af277\tPset_SpaceFireSafetyRequirements.MainFireUse[Type]\tTEXT\t\t636\t1\tIfcLabel\t1\nPARAM\t4e1bbeda-8612-4bdf-9926-4a0a3ede6735\tPset_SpaceFireSafetyRequirements.SprinklerProtection[Type]\tYESNO\t\t636\t1\tIfcBoolean\t1\nPARAM\t976d7aca-99d5-4c80-aaac-f22a2d806039\tPset_SpaceFireSafetyRequirements.SprinklerProtectionAutomatic[Type]\tYESNO\t\t636\t1\tIfcBoolean\t1\n#\nGROUP\t637\tPset_SpaceHeaterPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9e496e01-f20e-489c-a59e-3ba8fa14e0d8\tPset_SpaceHeaterPHistory.AirResistanceCurve[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\t64b470a0-f115-4205-ab0c-db5904a06048\tPset_SpaceHeaterPHistory.AuxiliaryEnergySourceConsumption[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\tf32813f6-cc3a-4a86-8433-ab86ef16af99\tPset_SpaceHeaterPHistory.CharacteristicExponent[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\t5388e940-5872-40de-ab25-19ebb376f283\tPset_SpaceHeaterPHistory.Effectiveness[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\t60a315f2-36f6-4fcc-b32d-94e880a24326\tPset_SpaceHeaterPHistory.Exponent[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\t7921574d-b449-40dc-9c94-0e64593daeb4\tPset_SpaceHeaterPHistory.FractionConvectiveHeatTransfer[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\tfaca8e23-a251-4ca9-87f7-5014b46427f1\tPset_SpaceHeaterPHistory.FractionRadiantHeatTransfer[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\t57a52b2a-83c3-46b1-b93b-a04f71d26b28\tPset_SpaceHeaterPHistory.HeatOutputRate[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\t0023f9a0-4d93-4712-a566-f41ad666e7cc\tPset_SpaceHeaterPHistory.OutputCapacityCurve[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\tb7ab482d-02f7-4e8a-84b1-c2ea55ba3ef7\tPset_SpaceHeaterPHistory.SpaceAirTemperature[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\tacfe65ba-0fab-4e91-93e5-3a055f1d6d71\tPset_SpaceHeaterPHistory.SpaceMeanRadiantTemperature[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\t925c17be-092c-4428-9909-02f67a6f1fea\tPset_SpaceHeaterPHistory.SurfaceTemperature[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\t74869d0d-8583-484b-bc42-0a412c1a44cd\tPset_SpaceHeaterPHistory.UACurve[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\n#\nGROUP\t638\tPset_SpaceHeaterPHistoryCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t86d02fb1-9554-46a9-98f2-cc6a0985aa23\tPset_SpaceHeaterPHistoryCommon.AirResistanceCurve[Type]\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\tfefa5cb6-f773-47c6-8eb7-a4253288de2b\tPset_SpaceHeaterPHistoryCommon.AuxiliaryEnergySourceConsumption[Type]\tTEXT\t\t638\t1\tIfcLabel\t1\nPARAM\t18d475aa-ff66-4c96-8cdd-a11a7eff449e\tPset_SpaceHeaterPHistoryCommon.Effectiveness[Type]\tTEXT\t\t638\t1\tIfcLabel\t1\nPARAM\tf853e1cd-fc90-464f-8dd2-3d25555d6c78\tPset_SpaceHeaterPHistoryCommon.Exponent[Type]\tTEXT\t\t638\t1\tIfcLabel\t1\nPARAM\t08d9f3bf-8967-4207-80f3-df02acf6f016\tPset_SpaceHeaterPHistoryCommon.FractionConvectiveHeatTransfer[Type]\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\t98506a96-028d-4771-8c94-8d8149510e70\tPset_SpaceHeaterPHistoryCommon.FractionRadiantHeatTransfer[Type]\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\tba346824-f53d-4841-b570-4066e9285ae5\tPset_SpaceHeaterPHistoryCommon.HeatOutputRate[Type]\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\t1e194e65-174f-4705-838a-c9fb7f67a223\tPset_SpaceHeaterPHistoryCommon.OutputCapacityCurve[Type]\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\t69eab4c4-864e-4a1f-8894-5e629124ea5c\tPset_SpaceHeaterPHistoryCommon.SpaceAirTemperature[Type]\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\tf331e455-03b4-4e41-b288-004e897f5944\tPset_SpaceHeaterPHistoryCommon.SpaceMeanRadiantTemperature[Type]\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\tc0f46c72-a03e-4377-ada3-72f12bbb2ed0\tPset_SpaceHeaterPHistoryCommon.SurfaceTemperature[Type]\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\t1d1da055-9419-4180-bdb9-916a5314a76a\tPset_SpaceHeaterPHistoryCommon.UACurve[Type]\tTEXT\t\t638\t1\tIfcLabel\t1\n#\nGROUP\t639\tPset_SpaceHeaterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3bc5fd2a-a819-4390-99f2-041bd232deb9\tPset_SpaceHeaterTypeCommon.BodyMass[Type]\tNUMBER\t\t639\t1\tIfcMassMeasure\t1\nPARAM\t79238827-eb6d-4b6b-9c4f-56873ea5855e\tPset_SpaceHeaterTypeCommon.EnergySource[Type]\tTEXT\t\t639\t1\tPEnum_EnergySource\t1\nPARAM\tb353a955-38e0-4c38-bac3-68c5e4b1ecc4\tPset_SpaceHeaterTypeCommon.HeatingSource[Type]\tTEXT\t\t639\t1\tPEnum_HeatingSource\t1\nPARAM\tb84f3b62-cedc-4511-a410-8032f821cb73\tPset_SpaceHeaterTypeCommon.HeatTransferDimension[Type]\tTEXT\t\t639\t1\tPEnum_SpaceHeaterHeatTransferDimension\t1\nPARAM\t14396d18-61de-4f36-b4bc-da0f6140aaf3\tPset_SpaceHeaterTypeCommon.HeatTransferMedium[Type]\tTEXT\t\t639\t1\tPEnum_HeatTransferMedium\t1\nPARAM\tec982f9f-feb9-41e5-b47e-f89bd6d9e673\tPset_SpaceHeaterTypeCommon.Material[Type]\tMULTILINETEXT\t\t639\t1\tIfcMaterial\t1\nPARAM\t3fb54b5f-dd93-4956-945d-7d86db2fc98e\tPset_SpaceHeaterTypeCommon.NumberOfPanels[Type]\tINTEGER\t\t639\t1\tIfcCountMeasure\t1\nPARAM\te5d4e817-6d65-448f-9605-838696410c45\tPset_SpaceHeaterTypeCommon.NumberOfSections[Type]\tINTEGER\t\t639\t1\tIfcCountMeasure\t1\nPARAM\tb546db0a-a09c-4b30-b312-1c580e9c6aa7\tPset_SpaceHeaterTypeCommon.OutputCapacity[Type]\tNUMBER\t\t639\t1\tIfcPowerMeasure\t1\nPARAM\t0cd378d2-5528-4164-950b-6e964269ee26\tPset_SpaceHeaterTypeCommon.PlacementType[Type]\tTEXT\t\t639\t1\tPEnum_SpaceHeaterPlacementType\t1\nPARAM\t573912a7-b341-4e2e-bfc7-f72c9bcf8fa9\tPset_SpaceHeaterTypeCommon.Reference[Type]\tTEXT\t\t639\t1\tIfcIdentifier\t1\nPARAM\t720b1cbd-e6f9-4436-80a4-1ef2f289699c\tPset_SpaceHeaterTypeCommon.SpaceHeaterPlacement[Type]\tTEXT\t\t639\t1\tPEnum_SpaceHeaterPlacementType\t1\nPARAM\t4a03befb-8aca-4e04-b09b-22709eae119c\tPset_SpaceHeaterTypeCommon.Status[Type]\tTEXT\t\t639\t1\tPEnum_ElementStatus\t1\nPARAM\t146ba315-9d0f-4517-bca1-6f1a4c2b488b\tPset_SpaceHeaterTypeCommon.TemperatureClassification[Type]\tTEXT\t\t639\t1\tPEnum_SpaceHeaterTemperatureClassification\t1\nPARAM\t26238d33-8e20-401f-9a9a-5bff7b37cf07\tPset_SpaceHeaterTypeCommon.ThermalEfficiency[Type]\tNUMBER\t\t639\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t9b04e3d9-29ca-4ced-8f97-61deb35898ee\tPset_SpaceHeaterTypeCommon.ThermalMassHeatCapacity[Type]\tNUMBER\t\t639\t1\tIfcReal\t1\n#\nGROUP\t640\tPset_SpaceHeaterTypeConvector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7d81184a-f720-4611-ab59-cb9648df8b5a\tPset_SpaceHeaterTypeConvector.ConvectorType[Type]\tTEXT\t\t640\t1\tPEnum_SpaceHeaterConvectorType\t1\n#\nGROUP\t641\tPset_SpaceHeaterTypeHydronic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9d552a63-97cf-4883-beee-b66c9bb723aa\tPset_SpaceHeaterTypeHydronic.TubingLength[Type]\tLENGTH\t\t641\t1\tIfcLengthMeasure\t1\nPARAM\t724cd2f7-ec44-421e-b948-d476e3e5c972\tPset_SpaceHeaterTypeHydronic.WaterContent[Type]\tNUMBER\t\t641\t1\tIfcMassMeasure\t1\n#\nGROUP\t642\tPset_SpaceHeaterTypeRadiator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5cb7ca5b-a57d-45bc-a732-7d2feb448d45\tPset_SpaceHeaterTypeRadiator.RadiatorType[Type]\tTEXT\t\t642\t1\tPEnum_SpaceHeaterRadiatorType\t1\nPARAM\t06b863c9-9b4f-47c4-a637-3d957cc76126\tPset_SpaceHeaterTypeRadiator.TubingLength[Type]\tLENGTH\t\t642\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t59b8dd3b-c066-4f58-a877-90105b131dd8\tPset_SpaceHeaterTypeRadiator.WaterContent[Type]\tNUMBER\t\t642\t1\tIfcMassMeasure\t1\n#\nGROUP\t643\tPset_SpaceHVACDesign\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbbe144f5-59dd-4bac-8a81-0c8ed4e537bf\tPset_SpaceHVACDesign.AirConditioning[Type]\tYESNO\t\t643\t1\tIfcBoolean\t1\nPARAM\t8474d698-95f5-4f37-97fe-c1762e551664\tPset_SpaceHVACDesign.AirConditioningCentral[Type]\tYESNO\t\t643\t1\tIfcBoolean\t1\nPARAM\tc2c35b12-a811-4383-b71d-30458358d376\tPset_SpaceHVACDesign.AirHandlingName[Type]\tTEXT\t\t643\t1\tIfcLabel\t1\nPARAM\t64229238-0ae0-41c2-b141-80bbb6e969cd\tPset_SpaceHVACDesign.DiscontinuedHeating[Type]\tYESNO\t\t643\t1\tIfcBoolean\t1\nPARAM\tc4c24a90-2c1c-4bb2-9a70-5e7e9a95fbb0\tPset_SpaceHVACDesign.HumidityMax[Type]\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t74260e7b-8925-451e-af4d-ee58ac4df6ce\tPset_SpaceHVACDesign.HumidityMin[Type]\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t92786469-eca8-4b2d-b431-3a82a28a90f1\tPset_SpaceHVACDesign.HumiditySetPoint[Type]\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t04f9605b-46bd-4dda-9109-3ae99194e257\tPset_SpaceHVACDesign.HumiditySummer[Type]\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tae25dd7c-8487-4a4c-82cc-de413283f47b\tPset_SpaceHVACDesign.HumidityWinter[Type]\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf0593bee-2425-41e6-a909-1739c5e2da82\tPset_SpaceHVACDesign.MechanicalVentilation[Type]\tYESNO\t\t643\t1\tIfcBoolean\t1\nPARAM\t3631efe7-87ad-4c21-b987-0d0449e67ded\tPset_SpaceHVACDesign.MechanicalVentilationRate[Type]\tINTEGER\t\t643\t1\tIfcCountMeasure\t1\nPARAM\teee89f62-5477-4986-869e-46c57cda6a3c\tPset_SpaceHVACDesign.NaturalVentilation[Type]\tYESNO\t\t643\t1\tIfcBoolean\t1\nPARAM\tf4c2722e-20dd-4f21-8f62-7aa5d0e59efb\tPset_SpaceHVACDesign.NaturalVentilationRate[Type]\tINTEGER\t\t643\t1\tIfcCountMeasure\t1\nPARAM\te9198cff-a28d-4e20-a1cf-537a276b5ad6\tPset_SpaceHVACDesign.TemperatureMax[Type]\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t75ce4e30-4834-48d0-a474-c8fc650329f6\tPset_SpaceHVACDesign.TemperatureMin[Type]\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t8349f020-2baa-4320-accd-26d125ccc47d\tPset_SpaceHVACDesign.TemperatureSetPoint[Type]\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t115349e2-025c-4379-ab95-783855a2994b\tPset_SpaceHVACDesign.TemperatureSummerMax[Type]\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t4c6dfbd2-c5c8-45a6-a101-621c37a3611d\tPset_SpaceHVACDesign.TemperatureSummerMin[Type]\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\te859dc3c-86f0-49ef-b6de-e8cc438709d2\tPset_SpaceHVACDesign.TemperatureWinterMax[Type]\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t9385e148-97e2-46c5-9c4d-d37c0109d0b5\tPset_SpaceHVACDesign.TemperatureWinterMin[Type]\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t644\tPset_SpaceLightingDesign\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tace3ba3f-53fe-48b1-9064-2f77f6cd8a57\tPset_SpaceLightingDesign.ArtificialLighting[Type]\tYESNO\t\t644\t1\tIfcBoolean\t1\nPARAM\t72139572-d87b-44cc-94b1-53fb7bb36feb\tPset_SpaceLightingDesign.Illuminance[Type]\tNUMBER\t\t644\t1\tIfcIlluminanceMeasure\t1\n#\nGROUP\t645\tPset_SpaceLightingRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t82b0d5a8-2242-42b4-bdaf-35dee06250f2\tPset_SpaceLightingRequirements.ArtificialLighting[Type]\tYESNO\t\t645\t1\tIfcBoolean\t1\nPARAM\t4e87711c-ffb1-4ff1-afca-21a44355e653\tPset_SpaceLightingRequirements.Illuminance[Type]\tNUMBER\t\t645\t1\tIfcIlluminanceMeasure\t1\n#\nGROUP\t646\tPset_SpaceOccupancyRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48b35208-f94e-42ef-95c7-e67f957d45b2\tPset_SpaceOccupancyRequirements.AreaPerOccupant[Type]\tAREA\t\t646\t1\tIfcAreaMeasure\t1\nPARAM\td3e5e06b-7ed7-4447-8f99-8424ac0a6119\tPset_SpaceOccupancyRequirements.IsOutlookDesirable[Type]\tYESNO\t\t646\t1\tIfcBoolean\t1\nPARAM\t98f2b721-bc49-4325-afcf-10566b122ec4\tPset_SpaceOccupancyRequirements.MinimumHeadroom[Type]\tLENGTH\t\t646\t1\tIfcLengthMeasure\t1\nPARAM\t45fa09d3-88b4-4bb3-865c-73f851e6339b\tPset_SpaceOccupancyRequirements.OccupancyNumber[Type]\tINTEGER\t\t646\t1\tIfcCountMeasure\t1\nPARAM\ta116eaf1-09c1-4787-8128-979a43e90945\tPset_SpaceOccupancyRequirements.OccupancyNumberPeak[Type]\tINTEGER\t\t646\t1\tIfcCountMeasure\t1\nPARAM\t50299194-3739-480d-b3c1-35f1c13c2ded\tPset_SpaceOccupancyRequirements.OccupancyTimePerDay[Type]\tNUMBER\t\t646\t1\tIfcTimeMeasure\t1\nPARAM\t58ec46a9-e9a9-4fdc-87b9-d7387ecc0fac\tPset_SpaceOccupancyRequirements.OccupancyType[Type]\tTEXT\t\t646\t1\tIfcLabel\t1\n#\nGROUP\t647\tPset_SpaceParking\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcfd75e62-9052-4ea9-beb5-aeea8b212693\tPset_SpaceParking.HandicapAccessible[Type]\tYESNO\t\t647\t1\tIfcBoolean\t1\nPARAM\t8c11ae75-e526-4fab-9028-c1dd8a8fbe58\tPset_SpaceParking.IsAisle[Type]\tYESNO\t\t647\t1\tIfcBoolean\t1\nPARAM\tb3cd74fa-1a57-4dd9-876e-3a7bc7d3c92c\tPset_SpaceParking.IsOneWay[Type]\tYESNO\t\t647\t1\tIfcBoolean\t1\nPARAM\t700ba8c5-af0f-46a2-b4e5-332cc26596b0\tPset_SpaceParking.ParkingUnits[Type]\tINTEGER\t\t647\t1\tIfcCountMeasure\t1\nPARAM\teb071cb3-ce31-4bec-a9da-60a2c4914538\tPset_SpaceParking.ParkingUse[Type]\tTEXT\t\t647\t1\tIfcLabel\t1\n#\nGROUP\t648\tPset_SpaceParkingAisle\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0dd42299-22fe-4dbe-ae7b-450f52d2cbe2\tPset_SpaceParkingAisle.IsOneWay[Type]\tYESNO\t\t648\t1\tIfcBoolean\t1\n#\nGROUP\t649\tPset_SpaceProgramCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7976c93c-752a-425c-bee5-bcf10a0f8c41\tPset_SpaceProgramCommon.EmployeeType[Type]\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\t00731736-a5f8-4e32-ace3-56a9a046f565\tPset_SpaceProgramCommon.FFETypeRequirement[Type]\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\te06aa8bf-b377-427e-99f8-d2a71da90568\tPset_SpaceProgramCommon.FunctionRequirement[Type]\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\t03d8952c-6173-4be1-8efa-67e804ce6cf1\tPset_SpaceProgramCommon.LightingRequirement[Type]\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\tf320a5a1-0183-4bc3-9cba-58af75587b22\tPset_SpaceProgramCommon.Location[Type]\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\t32546f9c-0bc4-4d61-be9f-5c378fecab53\tPset_SpaceProgramCommon.OccupancyNumber[Type]\tINTEGER\t\t649\t1\tIfcCountMeasure\t1\nPARAM\t827df1c1-ef2e-4f0f-bf28-098fb77fe4ad\tPset_SpaceProgramCommon.OccupancyType[Type]\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\te04de6fe-ecd5-4773-b8f1-1ae8e719f306\tPset_SpaceProgramCommon.PrivacyRequirement[Type]\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\tfbac867d-5f24-4f87-a666-7ddc523b8e79\tPset_SpaceProgramCommon.SecurityRequirement[Type]\tTEXT\t\t649\t1\tIfcLabel\t1\n#\nGROUP\t650\tPset_SpaceThermalDesign\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc17dcdaa-7961-4707-ab3a-338fad16646d\tPset_SpaceThermalDesign.BoundaryAreaHeatLoss[Type]\tNUMBER\t\t650\t1\tIfcHeatFluxDensityMeasure\t1\nPARAM\t06741ea3-ec30-4a16-b161-6620c8052733\tPset_SpaceThermalDesign.CeilingRAPlenum[Type]\tYESNO\t\t650\t1\tIfcBoolean\t1\nPARAM\t3002822b-88a8-4ba4-b734-d3dbd1c657cf\tPset_SpaceThermalDesign.CoolingDesignAirflow[Type]\tNUMBER\t\t650\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t40fde375-4305-4e29-90d0-15412df18224\tPset_SpaceThermalDesign.CoolingDryBulb[Type]\tNUMBER\t\t650\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\te5ccc0a1-6cfb-4efd-a807-fd000c1afd74\tPset_SpaceThermalDesign.CoolingRelativeHumidity[Type]\tNUMBER\t\t650\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t9731e9f6-afe7-4f78-9576-f28702426fe5\tPset_SpaceThermalDesign.ExhaustAirFlowrate[Type]\tNUMBER\t\t650\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t928fb183-99f0-4ee4-9f38-55639ce5c33e\tPset_SpaceThermalDesign.HeatingDesignAirflow[Type]\tNUMBER\t\t650\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t83a517d2-d0e6-4826-a60b-1a469aed263c\tPset_SpaceThermalDesign.HeatingDryBulb[Type]\tNUMBER\t\t650\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tccd68d5b-6325-48fd-bb32-53ab8ae732a5\tPset_SpaceThermalDesign.HeatingRelativeHumidity[Type]\tNUMBER\t\t650\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tdc8888d3-5d8a-4d68-86e7-8120e5f61bb5\tPset_SpaceThermalDesign.TotalHeatGain[Type]\tNUMBER\t\t650\t1\tIfcPowerMeasure\t1\nPARAM\tf2d8f0ee-2283-4d44-871a-0e6d1a066fe2\tPset_SpaceThermalDesign.TotalHeatLoss[Type]\tNUMBER\t\t650\t1\tIfcPowerMeasure\t1\nPARAM\t623be5d5-24c2-4bd9-94e9-5aed70f2bbd0\tPset_SpaceThermalDesign.TotalSensibleHeatGain[Type]\tNUMBER\t\t650\t1\tIfcPowerMeasure\t1\nPARAM\t5f8a2f49-6d7d-44fe-9b5b-ce23f68daded\tPset_SpaceThermalDesign.VentilationAirFlowrate[Type]\tNUMBER\t\t650\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t651\tPset_SpaceThermalLoad\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5ad030c1-1a52-4fe4-893c-8a2e25da734d\tPset_SpaceThermalLoad.AirExchangeRate[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t8f0dd9c3-f3e4-49d3-87a2-e6f00f79eceb\tPset_SpaceThermalLoad.DryBulbTemperature[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t91c1361a-10fd-4ad8-8be1-c93a610eb64c\tPset_SpaceThermalLoad.EquipmentSensible[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t7e941220-217d-41ec-b1e4-6f1b7b802baf\tPset_SpaceThermalLoad.ExhaustAir[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t1ea1dc22-db1c-4908-a216-47253bc73716\tPset_SpaceThermalLoad.InfiltrationSensible[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\tc3ba2dc3-c61d-47aa-b1e1-c4bde2dc8fb2\tPset_SpaceThermalLoad.Lighting[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t7765850b-1766-416f-b412-8c5cc4c1c531\tPset_SpaceThermalLoad.People[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t0968b970-188f-4cda-88d2-9c82fa3cc714\tPset_SpaceThermalLoad.RecirculatedAir[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t892d9644-2a7b-430b-b35a-4e2661dacf12\tPset_SpaceThermalLoad.RelativeHumidity[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t68ddeee6-6bb0-4645-99cc-51822501ecb9\tPset_SpaceThermalLoad.TotalLatentLoad[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t317c6fde-7b37-48e0-841b-9e956a1acb89\tPset_SpaceThermalLoad.TotalRadiantLoad[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t2f5b2d35-82c6-4027-bcb4-e99c32cde8a5\tPset_SpaceThermalLoad.TotalSensibleLoad[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t303ccf7f-df57-418b-82c7-715a0de03c0b\tPset_SpaceThermalLoad.VentilationIndoorAir[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t595fd174-cfe2-441d-a4ca-5e4c1f393fcd\tPset_SpaceThermalLoad.VentilationOutdoorAir[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\n#\nGROUP\t652\tPset_SpaceThermalLoadPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta73dab42-0454-4fe2-8d56-d213f9b41881\tPset_SpaceThermalLoadPHistory.AirExchangeRate[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t5a81ad47-ddfb-4d39-8635-31aff63e2b7a\tPset_SpaceThermalLoadPHistory.AirExchangeRateTimeHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tff616862-79ec-4f75-adc2-d52a8b757332\tPset_SpaceThermalLoadPHistory.DryBulbTemperature[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t24cb8a39-190f-4e50-ba9c-da9cc553f731\tPset_SpaceThermalLoadPHistory.DryBulbTemperatureHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tabdb4c63-a4d2-4504-8aa0-9d2f9dd0a763\tPset_SpaceThermalLoadPHistory.EquipmentSensible[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t1fa0a91b-5478-4c6e-9aea-cb943bde33e2\tPset_SpaceThermalLoadPHistory.EquipmentSensibleHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tc0276209-d72b-46f9-a567-bc44512646ea\tPset_SpaceThermalLoadPHistory.ExhaustAir[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tf9cfbfd5-45e1-43ba-a8c9-3cedd86e86c9\tPset_SpaceThermalLoadPHistory.ExhaustAirHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t8ae0e9d3-6558-4855-a9ff-b93d69a4c2ec\tPset_SpaceThermalLoadPHistory.InfiltrationSensible[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t100bbd05-2bb6-4cd6-8937-da95821f9491\tPset_SpaceThermalLoadPHistory.InfiltrationSensibleHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tc56488a4-d235-45e7-8302-86fe39de1a5f\tPset_SpaceThermalLoadPHistory.Lighting[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t37129103-ee54-4364-8ee1-19fdc881bbf6\tPset_SpaceThermalLoadPHistory.LightingHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tf9a5aab5-cb5f-47c9-ac6b-bbdbf8af7d59\tPset_SpaceThermalLoadPHistory.People[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t565350b5-d2ec-41f4-bf62-d449120376ce\tPset_SpaceThermalLoadPHistory.PeopleHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tc0e41fcb-b3bf-4d40-b2a5-c5fc1e2ebdb1\tPset_SpaceThermalLoadPHistory.RecirculatedAir[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\ta527e490-6f84-4763-b514-a440358cf29e\tPset_SpaceThermalLoadPHistory.RecirculatedAirHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t9028a415-9c80-4afa-93b8-b6d13d63d269\tPset_SpaceThermalLoadPHistory.RelativeHumidity[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\te549a23e-0a51-4053-b714-0398243056d7\tPset_SpaceThermalLoadPHistory.RelativeHumidityHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tdc106e6e-0eac-42da-85d5-15f437318954\tPset_SpaceThermalLoadPHistory.TotalLatentLoad[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t8090b559-a5c9-4cd6-bb2c-fa3bba480f46\tPset_SpaceThermalLoadPHistory.TotalLatentLoadHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tfffa5bd8-bb8c-46b5-a858-904b372a69b1\tPset_SpaceThermalLoadPHistory.TotalRadiantLoad[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t6af9a51b-d0fb-4da1-bea0-5522a3a6599b\tPset_SpaceThermalLoadPHistory.TotalRadiantLoadHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\te43c8513-9898-4826-9083-276d69068e52\tPset_SpaceThermalLoadPHistory.TotalSensibleLoad[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t41d7d5d2-450a-40f3-ac8a-b6de848ae65d\tPset_SpaceThermalLoadPHistory.TotalSensibleLoadHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t18c38f96-b636-45f2-8487-214847c572f3\tPset_SpaceThermalLoadPHistory.VentilationIndoorAir[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t88aa6e3c-0b75-4ed8-a3e0-a65d9492dfc1\tPset_SpaceThermalLoadPHistory.VentilationIndoorAirHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t44f47e33-c2ba-44b7-b7d6-b7c531c6dc3d\tPset_SpaceThermalLoadPHistory.VentilationOutdoorAir[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t439cac49-17e9-4b30-8db8-bd84b07a983b\tPset_SpaceThermalLoadPHistory.VentilationOutdoorAirHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\n#\nGROUP\t653\tPset_SpaceThermalPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2518d5df-d452-4a42-99d6-284ad7d6c91f\tPset_SpaceThermalPHistory.CoolingAirFlowRate[Type]\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\tccbde6f4-2524-466b-a568-d196d1001da1\tPset_SpaceThermalPHistory.ExhaustAirFlowRate[Type]\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\tc7f2660c-6304-4a43-badc-2379566df8fd\tPset_SpaceThermalPHistory.HeatingAirFlowRate[Type]\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\tc22309f0-7670-4e01-adeb-be9d84b62e79\tPset_SpaceThermalPHistory.SpaceRelativeHumidity[Type]\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\t9b7e9642-ccd1-4939-90c7-29c56fb96a65\tPset_SpaceThermalPHistory.SpaceTemperature[Type]\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\tbc4bc2ad-673c-445c-abe4-1a01ee902871\tPset_SpaceThermalPHistory.SpaceTemperatureHistory[Type]\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\ted9a335a-7d41-4563-9ebb-3fb7dec37cfb\tPset_SpaceThermalPHistory.VentilationAirFlowRate[Type]\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\tc3e830b8-3df1-4a4a-9aad-29d5e62d0c03\tPset_SpaceThermalPHistory.VentilationAirFlowRateHistory[Type]\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\n#\nGROUP\t654\tPset_SpaceThermalRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t44e094a1-9108-45b4-ae26-325df180ad3d\tPset_SpaceThermalRequirements.AirConditioning[Type]\tYESNO\t\t654\t1\tIfcBoolean\t1\nPARAM\t49d83d0e-8991-4bc2-8df7-21bd194cba81\tPset_SpaceThermalRequirements.AirConditioningCentral[Type]\tYESNO\t\t654\t1\tIfcBoolean\t1\nPARAM\tfa63d375-770b-44cf-9c6a-e7a57afb54fa\tPset_SpaceThermalRequirements.DiscontinuedHeating[Type]\tYESNO\t\t654\t1\tIfcBoolean\t1\nPARAM\t714456c4-1ae0-481f-bbe0-9b8e5fb6922a\tPset_SpaceThermalRequirements.MechanicalVentilationRate[Type]\tINTEGER\t\t654\t1\tIfcCountMeasure\t1\nPARAM\t9079726c-3ab7-49c9-aae5-f9a8868642c6\tPset_SpaceThermalRequirements.NaturalVentilation[Type]\tYESNO\t\t654\t1\tIfcBoolean\t1\nPARAM\tb3f47e15-8869-4d78-9be5-8d824815b1b4\tPset_SpaceThermalRequirements.NaturalVentilationRate[Type]\tINTEGER\t\t654\t1\tIfcCountMeasure\t1\nPARAM\t4b84ea46-4e27-458b-8898-2b40ebb56fe9\tPset_SpaceThermalRequirements.SpaceHumidity[Type]\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\nPARAM\tbc38cd60-0402-4b96-ac5a-6039b38c0cb9\tPset_SpaceThermalRequirements.SpaceHumidityMax[Type]\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\nPARAM\te781edc7-5417-47a1-b1e1-dd2fc9c10f28\tPset_SpaceThermalRequirements.SpaceHumidityMin[Type]\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\nPARAM\t0d0cab49-8a6d-4a58-b219-ef7e4c272762\tPset_SpaceThermalRequirements.SpaceHumiditySummer[Type]\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\nPARAM\t7012c067-da42-4858-b99a-ac1fa86487ae\tPset_SpaceThermalRequirements.SpaceHumidityWinter[Type]\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\nPARAM\t28583049-af11-44f0-be48-5e55f55ece47\tPset_SpaceThermalRequirements.SpaceTemperature[Type]\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t7b3bb5d6-3969-4916-b4ad-3db23202524a\tPset_SpaceThermalRequirements.SpaceTemperatureMax[Type]\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tfc44f32a-bdb3-48c6-a807-746b3660d82e\tPset_SpaceThermalRequirements.SpaceTemperatureMin[Type]\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\ted135707-8139-45fe-b46f-4d91355a8cfa\tPset_SpaceThermalRequirements.SpaceTemperatureSummer[Type]\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure \t1\nPARAM\tdbb2acd6-5a0b-409d-8136-13e0c0b1358e\tPset_SpaceThermalRequirements.SpaceTemperatureSummerMax[Type]\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tefa306ba-e01d-49fb-beb5-940aa07c6dd8\tPset_SpaceThermalRequirements.SpaceTemperatureSummerMin[Type]\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t5556c58b-70e9-489f-89f0-b68d7974a67d\tPset_SpaceThermalRequirements.SpaceTemperatureWinter[Type]\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure \t1\nPARAM\td2f4d157-427f-42c2-aaae-c9f2a3e56f7f\tPset_SpaceThermalRequirements.SpaceTemperatureWinterMax[Type]\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t4a9c8ae9-975a-497a-8fb5-0a858bd36b71\tPset_SpaceThermalRequirements.SpaceTemperatureWinterMin[Type]\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t655\tPset_SpatialZoneCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t124379f3-f260-4490-90df-804e37c12c70\tPset_SpatialZoneCommon.IsExternal[Type]\tYESNO\t\t655\t1\tIfcBoolean\t1\nPARAM\t6eac8a4a-0934-4578-8afa-e3d6ba3fa832\tPset_SpatialZoneCommon.Reference[Type]\tTEXT\t\t655\t1\tIfcIdentifier\t1\n#\nGROUP\t656\tPset_SpringTensioner\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2027df98-305b-4b40-a189-9d597c2b2daa\tPset_SpringTensioner.NominalWeight[Type]\tNUMBER\t\t656\t1\tIfcMassMeasure\t1\nPARAM\ta95da718-9b10-4037-b9ce-f8df954cd473\tPset_SpringTensioner.TensileStrength[Type]\tNUMBER\t\t656\t1\tIfcPressureMeasure\t1\nPARAM\tc975944c-bb2f-4335-907e-c288afd4f6d8\tPset_SpringTensioner.TensioningWorkingRange[Type]\tMULTILINETEXT\t\t656\t1\tPropertyBoundedValue\t1\n#\nGROUP\t657\tPset_StackTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6aa79504-a6b1-453b-8cca-c63048aec68f\tPset_StackTerminalTypeCommon.Reference[Type]\tTEXT\t\t657\t1\tIfcIdentifier\t1\nPARAM\t97b7c3ea-67c5-4a7d-954a-5b6de9afc6e4\tPset_StackTerminalTypeCommon.Status[Type]\tTEXT\t\t657\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t658\tPset_StairCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb6b7a43f-825d-4030-805d-7f94491d2423\tPset_StairCommon.FireExit[Type]\tYESNO\t\t658\t1\tIfcBoolean\t1\nPARAM\t829a38d9-a6f4-4542-9e11-f45ccf2da03b\tPset_StairCommon.FireRating[Type]\tTEXT\t\t658\t1\tIfcLabel\t1\nPARAM\teae45c04-7481-4c31-bc21-ce68d5703453\tPset_StairCommon.HandicapAccessible[Type]\tYESNO\t\t658\t1\tIfcBoolean\t1\nPARAM\t280cb6bf-8740-410e-97c8-d04b7af96f4a\tPset_StairCommon.HasNonSkidSurface[Type]\tYESNO\t\t658\t1\tIfcBoolean\t1\nPARAM\t17d94499-6b30-48b8-a266-48d0886ec76e\tPset_StairCommon.IsExternal[Type]\tYESNO\t\t658\t1\tIfcBoolean\t1\nPARAM\t07ebad95-47df-446a-855e-64b460ea4c1b\tPset_StairCommon.LoadBearing[Type]\tYESNO\t\t658\t1\tIfcBoolean\t1\nPARAM\t1f245f11-7b79-40a6-bf47-2432397114cd\tPset_StairCommon.NosingLength[Type]\tLENGTH\t\t658\t1\tIfcLengthMeasure\t1\nPARAM\t1b54453e-2fb5-4eb9-9602-abde6819fd8d\tPset_StairCommon.NumberOfRiser[Type]\tINTEGER\t\t658\t1\tIfcCountMeasure\t1\nPARAM\t8afe2d05-80fb-4347-bfe5-cb11bb109176\tPset_StairCommon.NumberOfTreads[Type]\tINTEGER\t\t658\t1\tIfcCountMeasure\t1\nPARAM\t2d8d71a8-ec99-4f2e-a649-ae661fdc0691\tPset_StairCommon.Reference[Type]\tTEXT\t\t658\t1\tIfcIdentifier\t1\nPARAM\t6554f1d5-15e4-495c-8a5b-8d6aa0345696\tPset_StairCommon.RequiredHeadroom[Type]\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tacac4071-b95b-4605-8eb7-e7731541d7f0\tPset_StairCommon.RiserHeight[Type]\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5da9808c-6589-4951-b1c5-745de934ecea\tPset_StairCommon.Status[Type]\tTEXT\t\t658\t1\tPEnum_ElementStatus\t1\nPARAM\t761ec032-f557-4777-82b0-e7cbe9f906de\tPset_StairCommon.ThermalTransmittance[Type]\tNUMBER\t\t658\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\tb088885e-e8f1-469a-b6f9-a3ea980a9a48\tPset_StairCommon.TreadLength[Type]\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2bdbe850-12d6-4d17-bf4c-8f0772d031a2\tPset_StairCommon.TreadLengthAtInnerSide[Type]\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t17e07c31-28d6-4fb6-98bd-667a261bc800\tPset_StairCommon.TreadLengthAtOffset[Type]\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t17d57e0f-a86a-4810-99cf-cd64c64822dd\tPset_StairCommon.WaistThickness[Type]\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcd2a00de-a246-44ec-86ad-18c987d6f1d1\tPset_StairCommon.WalkingLineOffset[Type]\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t659\tPset_StairFlightCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8132eeb7-7d23-469e-9dfc-5dc1303e3c3c\tPset_StairFlightCommon.Headroom[Type]\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32c34737-fc89-4e91-abbf-5309c32552ef\tPset_StairFlightCommon.NosingLength[Type]\tLENGTH\t\t659\t1\tIfcLengthMeasure\t1\nPARAM\t5c833601-faca-40e3-80d9-610a71785872\tPset_StairFlightCommon.NumberOfRiser[Type]\tINTEGER\t\t659\t1\tIfcCountMeasure\t1\nPARAM\t2de5b2b9-52d2-4653-8493-89d79429181c\tPset_StairFlightCommon.NumberOfTreads[Type]\tINTEGER\t\t659\t1\tIfcCountMeasure\t1\nPARAM\t521f5c0c-ef5d-4c6d-979f-bcee2b748505\tPset_StairFlightCommon.Reference[Type]\tTEXT\t\t659\t1\tIfcIdentifier\t1\nPARAM\tb252ccb4-ef44-416f-90ad-a722aa6e58d7\tPset_StairFlightCommon.RiserHeight[Type]\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t88e4b4e8-bff8-4484-89ad-a29461a6e75b\tPset_StairFlightCommon.Status[Type]\tTEXT\t\t659\t1\tPEnum_ElementStatus\t1\nPARAM\t1f21117e-eae7-4244-b9e5-b86cfb14c41e\tPset_StairFlightCommon.TreadLength[Type]\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t09edd121-856b-4440-b4f9-f810176f1b16\tPset_StairFlightCommon.TreadLengthAtInnerSide[Type]\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td9af64ec-7493-4836-a3dd-5692c7742c43\tPset_StairFlightCommon.TreadLengthAtOffset[Type]\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t19754129-e93e-4eb5-974e-00b52d290c1e\tPset_StairFlightCommon.WaistThickness[Type]\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7b9b9fc1-25ae-4edb-8ba5-ed7a5d94e7ce\tPset_StairFlightCommon.WalkingLineOffset[Type]\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t660\tPset_Stationing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t50907204-dbdc-4f71-9f20-88d2f3834541\tPset_Stationing.IncomingStation[Type]\tLENGTH\t\t660\t1\tIfcLengthMeasure\t1\nPARAM\t785900fe-0edf-4336-97e7-dfdc415d54f3\tPset_Stationing.Station[Type]\tLENGTH\t\t660\t1\tIfcLengthMeasure\t1\n#\nGROUP\t661\tPset_StructuralSurfaceMemberVaryingThickness\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t69ffa62e-065b-4af8-a6d5-cdee81c40c2f\tPset_StructuralSurfaceMemberVaryingThickness.Location1Global[Type]\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\nPARAM\tbba72b17-644f-4b76-ab33-05efb95c6baa\tPset_StructuralSurfaceMemberVaryingThickness.Location1Local[Type]\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\nPARAM\t0e76e3b2-92b4-464c-af36-ed92f05c4fcc\tPset_StructuralSurfaceMemberVaryingThickness.Location2Global[Type]\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\nPARAM\ta9b7685c-457c-4d0c-bd6a-32f93bca6ea4\tPset_StructuralSurfaceMemberVaryingThickness.Location2Local[Type]\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\nPARAM\t3364ad0c-8208-4eee-8c14-070f1d04c2de\tPset_StructuralSurfaceMemberVaryingThickness.Location3Global[Type]\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\nPARAM\t329ef554-82b7-4758-b774-ea6d9bdc012e\tPset_StructuralSurfaceMemberVaryingThickness.Location3Local[Type]\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\nPARAM\td689e4b7-a9e4-44da-ac94-307c53cc5f69\tPset_StructuralSurfaceMemberVaryingThickness.Thickness1[Type]\tLENGTH\t\t661\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td75b1b7d-3bd0-4664-9f1a-0b41ccec7711\tPset_StructuralSurfaceMemberVaryingThickness.Thickness2[Type]\tLENGTH\t\t661\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t90fd9251-850a-403d-897c-f754743c2a08\tPset_StructuralSurfaceMemberVaryingThickness.Thickness3[Type]\tLENGTH\t\t661\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t662\tPset_SumpBusterCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb17219df-7698-4845-b45e-df7802f710d1\tPset_SumpBusterCommon.TypeDesignation[Type]\tTEXT\t\t662\t1\tIfcLabel\t1\n#\nGROUP\t663\tPset_Superelevation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9ac35ced-6318-428d-a252-5bd74f100233\tPset_Superelevation.Side[Type]\tTEXT\t\t663\t1\tPEnum_SideType\t1\nPARAM\taa90d05f-c5b5-41de-82ec-31c58be94f9b\tPset_Superelevation.Superelevation[Type]\tNUMBER\t\t663\t1\tIfcRatioMeasure\t1\nPARAM\t07b36dfe-c886-41e5-baf0-863230be8c97\tPset_Superelevation.TransitionSuperelevation[Type]\tTEXT\t\t663\t1\tPEnum_TransitionSuperelevationType\t1\n#\nGROUP\t664\tPset_SwitchingDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t74c963b5-e7f8-4bfc-89f6-7515394bd796\tPset_SwitchingDeviceTypeCommon.HasLock[Type]\tYESNO\t\t664\t1\tIfcBoolean\t1\nPARAM\ta624fd14-38d9-417d-82f9-18cbc305b20f\tPset_SwitchingDeviceTypeCommon.IsIlluminated[Type]\tYESNO\t\t664\t1\tIfcBoolean\t1\nPARAM\t85ad268a-b01e-4130-8f02-79a1c352f41d\tPset_SwitchingDeviceTypeCommon.Legend[Type]\tTEXT\t\t664\t1\tIfcLabel\t1\nPARAM\t57b28001-c68d-4bf0-a90c-54a377cbbff1\tPset_SwitchingDeviceTypeCommon.NumberOfGangs[Type]\tINTEGER\t\t664\t1\tIfcCountMeasure\t1\nPARAM\t450b1bd6-dba9-4a13-8c6c-928139111c2c\tPset_SwitchingDeviceTypeCommon.Reference[Type]\tTEXT\t\t664\t1\tIfcIdentifier\t1\nPARAM\t48507187-3966-458e-b300-3292d84ff4dc\tPset_SwitchingDeviceTypeCommon.SetPoint[Type]\tMULTILINETEXT\t\t664\t1\tPropertyTableValue\t1\nPARAM\tb5687645-8e30-4bfe-9cae-80ac756bceea\tPset_SwitchingDeviceTypeCommon.Status[Type]\tTEXT\t\t664\t1\tPEnum_ElementStatus\t1\nPARAM\t6a55beee-e723-48c9-8ac3-851b35493e06\tPset_SwitchingDeviceTypeCommon.SwitchFunction[Type]\tTEXT\t\t664\t1\tPEnum_SwitchFunctionType\t1\n#\nGROUP\t665\tPset_SwitchingDeviceTypeContactor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te703be1e-e53e-4b16-a977-5abfd8845bcc\tPset_SwitchingDeviceTypeContactor.ContactorType[Type]\tTEXT\t\t665\t1\tPEnum_ContactorType\t1\n#\nGROUP\t666\tPset_SwitchingDeviceTypeDimmerSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tce89d0e4-203f-4969-b539-b565e631b6ff\tPset_SwitchingDeviceTypeDimmerSwitch.DimmerType[Type]\tTEXT\t\t666\t1\tPEnum_SwitchingDeviceDimmerSwitchType\t1\n#\nGROUP\t667\tPset_SwitchingDeviceTypeEmergencyStop\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcd179eac-27f5-46f3-b7de-d210851db18d\tPset_SwitchingDeviceTypeEmergencyStop.BreakingCapacity[Type]\tNUMBER\t\t667\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t44be858b-8742-4f1e-99b3-79d9cc585788\tPset_SwitchingDeviceTypeEmergencyStop.NominalCurrent[Type]\tNUMBER\t\t667\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t5281e404-d62d-4471-b039-cf8facb683c7\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfAffectedPoles[Type]\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\nPARAM\t05fb92df-5d67-4c9b-9a49-7f72b820a67e\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfEarthFaultRelays[Type]\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\nPARAM\t323618bd-f283-4185-ae25-c379e4101f5c\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfEmergencyButtons[Type]\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\nPARAM\td9ff992f-d61c-453e-b375-e5f1c95d5726\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfOverCurrentRelays[Type]\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\nPARAM\t69fa90fe-a6b4-42f0-a216-76790d40d6b3\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfPhases[Type]\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\nPARAM\t9d3ad0d7-b084-4379-b369-075b1070b6f7\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfRelays[Type]\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\nPARAM\t11bb1921-97d5-41f9-8f6e-5b604358d66f\tPset_SwitchingDeviceTypeEmergencyStop.RatedFrequency[Type]\tNUMBER\t\t667\t1\tIfcFrequencyMeasure\t1\nPARAM\t3b5d213e-28a2-4863-8b31-f2ffe47f0fec\tPset_SwitchingDeviceTypeEmergencyStop.RatedVoltage[Type]\tMULTILINETEXT\t\t667\t1\tPropertyBoundedValue\t1\nPARAM\td661046f-1167-44c2-966c-3a42fdb1572b\tPset_SwitchingDeviceTypeEmergencyStop.ReferenceEnvironmentTemperature[Type]\tMULTILINETEXT\t\t667\t1\tPropertyBoundedValue\t1\nPARAM\tdf44083b-1e6c-44e2-aa6c-6d6a62a321f4\tPset_SwitchingDeviceTypeEmergencyStop.SwitchOperation[Type]\tTEXT\t\t667\t1\tPEnum_SwitchingDeviceEmergencyStopType\t1\nPARAM\t572a2b1c-1b50-4f49-a3a3-14138db6fc8e\tPset_SwitchingDeviceTypeEmergencyStop.TransformationRatio[Type]\tNUMBER\t\t667\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t668\tPset_SwitchingDeviceTypeKeypad\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6e27e536-7e30-4371-9a26-5f3a3a47f67e\tPset_SwitchingDeviceTypeKeypad.KeypadType[Type]\tTEXT\t\t668\t1\tPEnum_SwitchingDeviceKeypadType\t1\n#\nGROUP\t669\tPset_SwitchingDeviceTypeMomentarySwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t456e9a5d-64d8-4354-b120-8a16c7de4fdb\tPset_SwitchingDeviceTypeMomentarySwitch.MomentaryType[Type]\tTEXT\t\t669\t1\tPEnum_SwitchingDeviceMomentarySwitchType\t1\n#\nGROUP\t670\tPset_SwitchingDeviceTypePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf47d6309-985f-4d12-83fc-4f2fc14f222d\tPset_SwitchingDeviceTypePHistory.SetPoint[Type]\tMULTILINETEXT\t\t670\t1\tIfcTimeSeries\t1\nPARAM\t523f2fa9-fc2d-4a27-becb-7964862f13c0\tPset_SwitchingDeviceTypePHistory.SetPointHistory[Type]\tMULTILINETEXT\t\t670\t1\tIfcTimeSeries\t1\n#\nGROUP\t671\tPset_SwitchingDeviceTypeRelay\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta99b007c-6b7c-4100-99df-084afc1faadd\tPset_SwitchingDeviceTypeRelay.ContactResistance[Type]\tNUMBER\t\t671\t1\tIfcElectricResistanceMeasure\t1\nPARAM\tfb7098bb-177b-4a70-9b14-f220b9bdc460\tPset_SwitchingDeviceTypeRelay.Current[Type]\tMULTILINETEXT\t\t671\t1\tPropertyBoundedValue\t1\nPARAM\t22a3aaf6-712f-47c6-a49a-b2805e854522\tPset_SwitchingDeviceTypeRelay.InsulationResistance[Type]\tNUMBER\t\t671\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t6dbccceb-4780-4e50-ad5b-684eb574652d\tPset_SwitchingDeviceTypeRelay.NominalHeight[Type]\tLENGTH\t\t671\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tf7eb54c1-8661-4bcc-b6a9-e14743a117df\tPset_SwitchingDeviceTypeRelay.NominalLength[Type]\tLENGTH\t\t671\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t7811737d-2c9d-425b-9b4c-f75f6d898860\tPset_SwitchingDeviceTypeRelay.NominalWidth[Type]\tLENGTH\t\t671\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tec746f28-3074-4fac-80cc-d2d09ef65cbc\tPset_SwitchingDeviceTypeRelay.PullInVoltage[Type]\tNUMBER\t\t671\t1\tIfcElectricVoltageMeasure\t1\nPARAM\td9d5cf40-2edb-49c1-90dd-340072ae438c\tPset_SwitchingDeviceTypeRelay.ReleaseVoltage[Type]\tNUMBER\t\t671\t1\tIfcElectricVoltageMeasure\t1\nPARAM\ta7993b11-5b6f-49a9-8a4e-38e486126e4b\tPset_SwitchingDeviceTypeRelay.Voltage[Type]\tMULTILINETEXT\t\t671\t1\tPropertyBoundedValue\t1\n#\nGROUP\t672\tPset_SwitchingDeviceTypeSelectorSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9341a1b9-cc7c-432e-aa22-96f035b7b7cc\tPset_SwitchingDeviceTypeSelectorSwitch.NominalCurrent[Type]\tNUMBER\t\t672\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tf9e68894-e2f0-4415-bfdd-b4cb213bef9b\tPset_SwitchingDeviceTypeSelectorSwitch.NominalPower[Type]\tNUMBER\t\t672\t1\tIfcPowerMeasure\t1\nPARAM\te38269f5-aba3-452e-a086-3ecdddf4d8c5\tPset_SwitchingDeviceTypeSelectorSwitch.NumberOfPhases[Type]\tINTEGER\t\t672\t1\tIfcCountMeasure\t1\nPARAM\te8b257cc-e118-4c77-adc9-426752b0746c\tPset_SwitchingDeviceTypeSelectorSwitch.RatedFrequency[Type]\tNUMBER\t\t672\t1\tIfcFrequencyMeasure\t1\nPARAM\t0e818cbb-f4df-4b71-8bea-871d7dd9d131\tPset_SwitchingDeviceTypeSelectorSwitch.ReferenceEnvironmentTemperature[Type]\tMULTILINETEXT\t\t672\t1\tPropertyBoundedValue\t1\nPARAM\tbf9e9bb6-40dd-4d85-86fd-c6d63b0b8523\tPset_SwitchingDeviceTypeSelectorSwitch.SelectorType[Type]\tTEXT\t\t672\t1\tPEnum_SwitchingDeviceDimmerSwitchType\t1\nPARAM\td6221b8a-be31-4935-8cb6-4824bb7b1f76\tPset_SwitchingDeviceTypeSelectorSwitch.SwitchActivation[Type]\tTEXT\t\t672\t1\tPEnum_SwitchActivation\t1\nPARAM\t30f82820-0d35-40f8-af74-bcdf3f62b228\tPset_SwitchingDeviceTypeSelectorSwitch.SwitchUsage[Type]\tTEXT\t\t672\t1\tPEnum_SwitchUsage\t1\n#\nGROUP\t673\tPset_SwitchingDeviceTypeStarter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdab0c4f7-d628-418e-b87e-61f617377264\tPset_SwitchingDeviceTypeStarter.StarterType[Type]\tTEXT\t\t673\t1\tPEnum_StarterType\t1\n#\nGROUP\t674\tPset_SwitchingDeviceTypeSwitchDisconnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t64d3f1a0-e471-42b9-b132-435a2b810b6b\tPset_SwitchingDeviceTypeSwitchDisconnector.HasVisualIndication[Type]\tYESNO\t\t674\t1\tIfcBoolean\t1\nPARAM\tbb0e2217-af1c-47d4-aac2-941b3e893f46\tPset_SwitchingDeviceTypeSwitchDisconnector.LoadDisconnectionType[Type]\tTEXT\t\t674\t1\tPEnum_LoadDisconnectionType\t1\nPARAM\td9bb31f1-8bc3-496c-b00b-f2c9535ce4f4\tPset_SwitchingDeviceTypeSwitchDisconnector.SwitchDisconnectorType[Type]\tTEXT\t\t674\t1\tPEnum_SwitchDisconnectorType\t1\n#\nGROUP\t675\tPset_SwitchingDeviceTypeToggleSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb023cf62-02d3-4fea-bd0f-016a6bbe9f8b\tPset_SwitchingDeviceTypeToggleSwitch.IsIlluminated[Type]\tYESNO\t\t675\t1\tIfcBoolean\t1\nPARAM\t53ca1d9b-f16d-406f-93b3-5511992624b7\tPset_SwitchingDeviceTypeToggleSwitch.Legend[Type]\tTEXT\t\t675\t1\tIfcLabel\t1\nPARAM\t7df6b8f8-afc3-44c5-821e-abda1260e034\tPset_SwitchingDeviceTypeToggleSwitch.SwitchActivation[Type]\tTEXT\t\t675\t1\tPEnum_SwitchActivation\t1\nPARAM\tc43c2697-8c64-48b8-bb26-4e4ee4557585\tPset_SwitchingDeviceTypeToggleSwitch.SwitchUsage[Type]\tTEXT\t\t675\t1\tPEnum_SwitchUsage\t1\nPARAM\t44a1fa86-f3da-4e6c-ae93-6646ea9a70d2\tPset_SwitchingDeviceTypeToggleSwitch.ToggleSwitchType[Type]\tTEXT\t\t675\t1\tPEnum_SwitchingDeviceToggleSwitchType\t1\n#\nGROUP\t676\tPset_SymmetricPairCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf1f0afdf-89b5-4555-a156-cc1dfea8d43f\tPset_SymmetricPairCable.NumberOfTwistedPairs[Type]\tINTEGER\t\t676\t1\tIfcCountMeasure\t1\nPARAM\t7df0bf91-ab44-4328-9afc-5d22e91cbe9b\tPset_SymmetricPairCable.NumberOfUntwistedPairs[Type]\tINTEGER\t\t676\t1\tIfcCountMeasure\t1\n#\nGROUP\t677\tPset_SystemFurnitureElementTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tce5c065b-074b-4925-9cb0-e258b0486e9c\tPset_SystemFurnitureElementTypeCommon.Finishing[Type]\tTEXT\t\t677\t1\tIfcLabel\t1\nPARAM\t76c688bd-ea59-4207-a953-4a3f1f23517a\tPset_SystemFurnitureElementTypeCommon.GroupCode[Type]\tTEXT\t\t677\t1\tIfcIdentifier\t1\nPARAM\t013e6d56-cf82-44ef-8ed8-0bf74aeb69e5\tPset_SystemFurnitureElementTypeCommon.IsUsed[Type]\tYESNO\t\t677\t1\tIfcBoolean\t1\nPARAM\tbf0a2c3a-012b-4e4e-81e1-d105691a19b9\tPset_SystemFurnitureElementTypeCommon.NominalHeight[Type]\tLENGTH\t\t677\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tee38e7fc-4f1b-4f76-a809-3b42d0ce63b8\tPset_SystemFurnitureElementTypeCommon.NominalWidth[Type]\tLENGTH\t\t677\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t678\tPset_SystemFurnitureElementTypePanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb985be9a-4ca4-4cfc-ba00-8bf447eb6701\tPset_SystemFurnitureElementTypePanel.FurniturePanelType[Type]\tTEXT\t\t678\t1\tPEnum_FurniturePanelType\t1\nPARAM\t6d5500ac-7e73-49f4-bfa2-bef75ad62a26\tPset_SystemFurnitureElementTypePanel.HasOpening[Type]\tYESNO\t\t678\t1\tIfcBoolean\t1\nPARAM\t0df05869-9c36-4071-bba8-92358fc6aa20\tPset_SystemFurnitureElementTypePanel.NominalThickness[Type]\tLENGTH\t\t678\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t679\tPset_SystemFurnitureElementTypeSubrack\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t85540a51-40ff-4225-97da-f074c90756f2\tPset_SystemFurnitureElementTypeSubrack.NumberOfOccupiedUnits[Type]\tINTEGER\t\t679\t1\tIfcCountMeasure\t1\nPARAM\t1c3d50a4-31db-4908-84c0-cf7385cd2bba\tPset_SystemFurnitureElementTypeSubrack.NumberOfSlots[Type]\tINTEGER\t\t679\t1\tIfcCountMeasure\t1\nPARAM\t7430eea5-ea67-4279-83b1-6123328fa8ae\tPset_SystemFurnitureElementTypeSubrack.NumberOfUnits[Type]\tINTEGER\t\t679\t1\tIfcCountMeasure\t1\n#\nGROUP\t680\tPset_SystemFurnitureElementTypeWorkSurface\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tddd22059-4f67-4e41-82d4-498f40c206bb\tPset_SystemFurnitureElementTypeWorkSurface.HangingHeight[Type]\tLENGTH\t\t680\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc9648a2b-30d0-4265-b1c6-89b744f72fb3\tPset_SystemFurnitureElementTypeWorkSurface.NominalThickness[Type]\tLENGTH\t\t680\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t43f71aae-0966-4faf-a49e-31a204a33ebd\tPset_SystemFurnitureElementTypeWorkSurface.ShapeDescription[Type]\tTEXT\t\t680\t1\tIfcLabel\t1\nPARAM\tf65086c3-1217-4923-be21-549ab5995f92\tPset_SystemFurnitureElementTypeWorkSurface.SupportType[Type]\tTEXT\t\t680\t1\tPEnum_FurniturePanelType\t1\nPARAM\tfa63df89-fae1-4b4f-b7c0-79dacea981ef\tPset_SystemFurnitureElementTypeWorkSurface.UsePurpose[Type]\tTEXT\t\t680\t1\tIfcLabel\t1\n#\nGROUP\t681\tPset_TankOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8cd512f2-4b55-4e5d-9b6e-4de15854db8b\tPset_TankOccurrence.HasLadder[Type]\tYESNO\t\t681\t1\tIfcBoolean\t1\nPARAM\t798e4eee-bc4c-48e6-b586-eead4e044faf\tPset_TankOccurrence.HasVisualIndicator[Type]\tYESNO\t\t681\t1\tIfcBoolean\t1\nPARAM\t6c510b56-1ed5-408d-bfe0-d3827db3bed8\tPset_TankOccurrence.TankComposition[Type]\tTEXT\t\t681\t1\tPEnum_TankComposition\t1\n#\nGROUP\t682\tPset_TankPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t378163f1-8836-4fbd-9f31-f7ca704a5683\tPset_TankPHistory.Level[Type]\tMULTILINETEXT\t\t682\t1\tIfcTimeSeries\t1\nPARAM\t4ea75dc3-96c6-49da-9548-bcc043033b2a\tPset_TankPHistory.Pressure[Type]\tNUMBER\t\t682\t1\tIfcPressureMeasure\t1\nPARAM\t4ad6a732-d71b-489d-ab1c-e19b12b8dd23\tPset_TankPHistory.Temperature[Type]\tNUMBER\t\t682\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t683\tPset_TankTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t50574e88-76b8-4c49-bb26-9160f8ec7a68\tPset_TankTypeCommon.AccessType[Type]\tTEXT\t\t683\t1\tPEnum_TankAccessType\t1\nPARAM\t4dfc739c-f2f1-4b70-81d3-cc76437cc47f\tPset_TankTypeCommon.EffectiveCapacity[Type]\tVOLUME\t\t683\t1\tIfcVolumeMeasure\t1\nPARAM\t3a35ff3c-c28e-4063-9310-b96e6f5ca12c\tPset_TankTypeCommon.EndShapeType[Type]\tTEXT\t\t683\t1\tPEnum_EndShapeType\t1\nPARAM\tf2cfaa2f-c04b-4e31-9f0e-3d23b965262a\tPset_TankTypeCommon.FirstCurvatureRadius[Type]\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6fe458df-cd82-4d69-9433-4a99d9e02612\tPset_TankTypeCommon.Material[Type]\tMULTILINETEXT\t\t683\t1\tIfcMaterial\t1\nPARAM\td0734e88-06ad-44db-886c-078994df3f88\tPset_TankTypeCommon.MaterialThickness[Type]\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t45c24c0d-d642-4e8e-a779-9422a58b9ff2\tPset_TankTypeCommon.NominalCapacity[Type]\tVOLUME\t\t683\t1\tIfcVolumeMeasure\t1\nPARAM\t25f72821-9111-4717-bd25-802f5487c7f8\tPset_TankTypeCommon.NominalDepth[Type]\tLENGTH\t\t683\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t81b9963b-d1ab-4069-a632-2c8b29397818\tPset_TankTypeCommon.NominalLengthOrDiameter[Type]\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta4cf9dbd-a3a0-47c2-8c11-d2aad3e76fd4\tPset_TankTypeCommon.NominalWidthOrDiameter[Type]\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t389d9d23-bc4e-4058-b1e0-c7d02b24a9b4\tPset_TankTypeCommon.NumberOfSections[Type]\tINTEGER\t\t683\t1\tIfcCountMeasure\t1\nPARAM\t1ba7a7fd-7079-456d-980d-abf6edd98ef6\tPset_TankTypeCommon.OperatingWeight[Type]\tNUMBER\t\t683\t1\tIfcMassMeasure\t1\nPARAM\t31e0ea98-5f08-4726-bceb-1ea310ddb8bb\tPset_TankTypeCommon.PatternType[Type]\tTEXT\t\t683\t1\tPEnum_TankPatternType\t1\nPARAM\tc6be49c1-248d-4f5f-a9bc-1b38cc6dd31d\tPset_TankTypeCommon.Reference[Type]\tTEXT\t\t683\t1\tIfcIdentifier\t1\nPARAM\t69d072fc-4811-40d1-999d-38a3fa8b8e8b\tPset_TankTypeCommon.SecondCurvatureRadius[Type]\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb80e303f-3f02-4754-9038-2e8f9e086739\tPset_TankTypeCommon.Status[Type]\tTEXT\t\t683\t1\tPEnum_ElementStatus\t1\nPARAM\t8300e409-142a-4e56-a8ab-98f2966de8e6\tPset_TankTypeCommon.StorageType[Type]\tTEXT\t\t683\t1\tPEnum_TankStorageType\t1\nPARAM\te3e2f1c8-d216-492e-9d28-9558c46fecd1\tPset_TankTypeCommon.TankNominalCapacity[Type]\tVOLUME\t\t683\t1\tIfcVolumeMeasure\t1\nPARAM\t8dbc07fa-a637-42d2-ade3-610b8442e5fa\tPset_TankTypeCommon.Type[Type]\tTEXT\t\t683\t1\tPEnum_TankType\t1\n#\nGROUP\t684\tPset_TankTypeExpansion\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tece7f7cf-d205-499b-9d1a-e0652654385a\tPset_TankTypeExpansion.ChargePressure[Type]\tNUMBER\t\t684\t1\tIfcPressureMeasure\t1\nPARAM\t4134564b-abc5-455d-8495-56743b28bae9\tPset_TankTypeExpansion.PressureRegulatorSetting[Type]\tNUMBER\t\t684\t1\tIfcPressureMeasure\t1\nPARAM\t7488352d-f7fc-4d11-b0c1-1d1b3bd97cae\tPset_TankTypeExpansion.ReliefValveSetting[Type]\tNUMBER\t\t684\t1\tIfcPressureMeasure\t1\n#\nGROUP\t685\tPset_TankTypePreformed\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta7777559-b2f6-4104-a756-9acd8f6ec51e\tPset_TankTypePreformed.EndShapeType[Type]\tTEXT\t\t685\t1\tPEnum_EndShapeType\t1\nPARAM\t065952a9-7794-405f-b04b-9575b114db9e\tPset_TankTypePreformed.FirstCurvatureRadius[Type]\tLENGTH\t\t685\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdb06852e-b7d8-42e1-9757-5d67caa9bbfa\tPset_TankTypePreformed.PatternType[Type]\tTEXT\t\t685\t1\tPEnum_TankPatternType\t1\nPARAM\tba3ca46c-cdb7-4114-b7b4-c598a729459d\tPset_TankTypePreformed.SecondCurvatureRadius[Type]\tLENGTH\t\t685\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t686\tPset_TankTypePressureVessel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0da30f05-5893-4fae-a394-cd99f11e5303\tPset_TankTypePressureVessel.ChargePressure[Type]\tNUMBER\t\t686\t1\tIfcPressureMeasure\t1\nPARAM\td87e1fa3-0543-42c9-9d39-d2ce5f8b2bb1\tPset_TankTypePressureVessel.PressureRegulatorSetting[Type]\tNUMBER\t\t686\t1\tIfcPressureMeasure\t1\nPARAM\te91437f0-8df5-450e-a601-2ada7e855202\tPset_TankTypePressureVessel.ReliefValveSetting[Type]\tNUMBER\t\t686\t1\tIfcPressureMeasure\t1\n#\nGROUP\t687\tPset_TankTypeSectional\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4cdda3cf-5033-41a3-b74f-57a30fc1f10f\tPset_TankTypeSectional.NumberOfSections[Type]\tINTEGER\t\t687\t1\tIfcCountMeasure\t1\nPARAM\td7cf153d-fcf6-4f41-bab7-bede03c77a84\tPset_TankTypeSectional.SectionLength[Type]\tLENGTH\t\t687\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taa39e89d-88f2-471a-a49f-96279396327f\tPset_TankTypeSectional.SectionWidth[Type]\tLENGTH\t\t687\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t688\tPset_TelecomCableGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t55f48db9-8fdf-4040-88eb-8eaaeae7d5b2\tPset_TelecomCableGeneral.Attenuation[Type]\tNUMBER\t\t688\t1\tIfcReal\t1\nPARAM\t52d28b46-c3a8-40f3-ab9e-a5b2fdf41c94\tPset_TelecomCableGeneral.CableArmourType[Type]\tTEXT\t\t688\t1\tPEnum_CableArmourType\t1\nPARAM\ta105b90c-411b-4318-991e-39a5819e6b8f\tPset_TelecomCableGeneral.CableFunctionType[Type]\tTEXT\t\t688\t1\tPEnum_CableFunctionType\t1\nPARAM\td9ca0692-7096-46f2-ab1e-49ab8b5c01de\tPset_TelecomCableGeneral.FireRating[Type]\tTEXT\t\t688\t1\tIfcLabel\t1\nPARAM\tf3a49ed8-6c03-4514-a878-6970e7f12d63\tPset_TelecomCableGeneral.IsFireResistant[Type]\tYESNO\t\t688\t1\tIfcBoolean\t1\nPARAM\t76e07ffe-2a39-45e3-886e-2d873babd483\tPset_TelecomCableGeneral.JacketColour[Type]\tTEXT\t\t688\t1\tIfcLabel\t1\nPARAM\teb0071ea-103c-4e60-b74e-37010ebe1e4c\tPset_TelecomCableGeneral.NominalDiameter[Type]\tLENGTH\t\t688\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t689\tPset_TendonAnchorCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta661c755-9eb3-4f32-bb14-a28442b6c5e1\tPset_TendonAnchorCommon.Reference[Type]\tTEXT\t\t689\t1\tIfcIdentifier\t1\nPARAM\t32b6754e-909f-4127-b95a-6d989ad3919c\tPset_TendonAnchorCommon.Status[Type]\tTEXT\t\t689\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t690\tPset_TendonCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta0dca432-aea5-42ea-8195-8b8e3cea7764\tPset_TendonCommon.AnchorageSlip[Type]\tLENGTH\t\t690\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t466f4d16-cdfc-4183-82f6-e8815057878b\tPset_TendonCommon.FrictionCoefficient[Type]\tNUMBER\t\t690\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t9394e05f-2634-4706-9126-406fe8f16c24\tPset_TendonCommon.MinCurvatureRadius[Type]\tLENGTH\t\t690\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te4c6e3dc-7846-4eba-98e3-5c11752006a3\tPset_TendonCommon.NominalDiameter[Type]\tLENGTH\t\t690\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tef76a45b-ad19-4cdc-a4a1-6203d61ff373\tPset_TendonCommon.PreStress[Type]\tNUMBER\t\t690\t1\tIfcPressureMeasure\t1\nPARAM\tde2f52ef-4836-4840-bde1-1988f697e2dd\tPset_TendonCommon.Reference[Type]\tTEXT\t\t690\t1\tIfcIdentifier\t1\nPARAM\t0f69819a-0c6b-4cab-9407-7d331f268f89\tPset_TendonCommon.SheathDiameter[Type]\tLENGTH\t\t690\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t53536c2f-707b-44ef-b97e-4171aefb3c6f\tPset_TendonCommon.Status[Type]\tTEXT\t\t690\t1\tPEnum_ElementStatus\t1\nPARAM\t7763ab09-055a-46f8-9ffc-49f0cbdb042e\tPset_TendonCommon.TensionForce[Type]\tNUMBER\t\t690\t1\tIfcForceMeasure\t1\n#\nGROUP\t691\tPset_ThermalLoad\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tca20c383-10df-420d-a408-9ee758a27bcf\tPset_ThermalLoad.ApplianceDiversity[Type]\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc92bf4f4-0aca-40fc-8fae-2fe1b3d72e29\tPset_ThermalLoad.AppliancePercentLoadToRadiant[Type]\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tbfb6e7e0-d34f-4942-8425-05bb98cf97de\tPset_ThermalLoad.InfiltrationDiversitySummer[Type]\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5ba18026-7589-4364-b512-4df985724466\tPset_ThermalLoad.InfiltrationDiversityWinter[Type]\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t49a8f8d3-81ae-45b3-8c9f-3efbacb900fb\tPset_ThermalLoad.LightingDiversity[Type]\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5d279ca5-c880-4257-ac10-6f04b7c7ee5e\tPset_ThermalLoad.LightingLoadIntensity[Type]\tNUMBER\t\t691\t1\tIfcHeatFluxDensityMeasure\t1\nPARAM\t287ba948-c9be-4382-b282-bea676af830f\tPset_ThermalLoad.LightingPercentLoadToReturnAir[Type]\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tbb046741-bea9-4069-b559-2ebc4b5c1144\tPset_ThermalLoad.LoadSafetyFactor[Type]\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t67ca5c98-8cc9-4001-9aff-efe9b003628a\tPset_ThermalLoad.OccupancyDiversity[Type]\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc4d2f584-09b7-4504-a8b3-84005b89297d\tPset_ThermalLoad.OutsideAirPerPerson[Type]\tNUMBER\t\t691\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t01066e97-32cd-46ff-8da8-17bcd461978e\tPset_ThermalLoad.ReceptacleLoadIntensity[Type]\tNUMBER\t\t691\t1\tIfcHeatFluxDensityMeasure\t1\nPARAM\tbb98ce04-d29e-4a46-8f2b-e5504e218255\tPset_ThermalLoad.TotalCoolingLoad[Type]\tNUMBER\t\t691\t1\tIfcPowerMeasure\t1\nPARAM\t8e97ac63-e37d-43c5-a864-826559b810e4\tPset_ThermalLoad.TotalHeatingLoad[Type]\tNUMBER\t\t691\t1\tIfcPowerMeasure\t1\n#\nGROUP\t692\tPset_ThermalLoadAggregate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t53ecbe2f-995f-42b3-822b-4f2656e4d671\tPset_ThermalLoadAggregate.ApplianceDiversity[Type]\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t707a8182-3741-4b55-aa19-a37abd76410a\tPset_ThermalLoadAggregate.InfiltrationDiversitySummer[Type]\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7b62457c-a419-43ab-873e-7d8f905dec43\tPset_ThermalLoadAggregate.InfiltrationDiversityWinter[Type]\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t11175ebf-f7ef-44f9-83d6-94b27139ff07\tPset_ThermalLoadAggregate.LightingDiversity[Type]\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5a8a6a55-7a4f-4c0a-8e71-2d0847b00e16\tPset_ThermalLoadAggregate.LoadSafetyFactor[Type]\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4f2ee6ca-91f3-48dd-86be-c8e918f3b533\tPset_ThermalLoadAggregate.TotalCoolingLoad[Type]\tNUMBER\t\t692\t1\tIfcPowerMeasure\t1\nPARAM\t6b71c33b-5f63-42af-9367-3e5909182134\tPset_ThermalLoadAggregate.TotalHeatingLoad[Type]\tNUMBER\t\t692\t1\tIfcPowerMeasure\t1\n#\nGROUP\t693\tPset_ThermalLoadDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a301cf5-9dc0-476a-bc8f-83677e5ad636\tPset_ThermalLoadDesignCriteria.AppliancePercentLoadToRadiant[Type]\tNUMBER\t\t693\t1\tIfcPositiveRatioMeasure\t1\nPARAM\taab8801d-03d9-4d88-bf07-b26067c8a24f\tPset_ThermalLoadDesignCriteria.LightingLoadIntensity[Type]\tNUMBER\t\t693\t1\tIfcReal\t1\nPARAM\t3ace47a0-46e1-4f29-a341-d243806c6921\tPset_ThermalLoadDesignCriteria.LightingPercentLoadToReturnAir[Type]\tNUMBER\t\t693\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td293c61d-a288-4b45-87dd-4997bfcdb1e1\tPset_ThermalLoadDesignCriteria.OccupancyDiversity[Type]\tNUMBER\t\t693\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tbdafefd9-68a7-4c83-a8f9-9ed02a946f58\tPset_ThermalLoadDesignCriteria.OutsideAirPerPerson[Type]\tNUMBER\t\t693\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t6d5f9ffc-b6cc-4655-a3d0-bfcfe59c58ec\tPset_ThermalLoadDesignCriteria.ReceptacleLoadIntensity[Type]\tNUMBER\t\t693\t1\tIfcReal\t1\n#\nGROUP\t694\tPset_TicketProcessing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8f5036f4-1390-48e5-a79b-15e105168054\tPset_TicketProcessing.TicketProcessingTime[Type]\tNUMBER\t\t694\t1\tIfcTimeMeasure\t1\nPARAM\tc539c93e-2c7f-4a3d-bc47-84fd4b0f16b9\tPset_TicketProcessing.TicketStuckRatio[Type]\tNUMBER\t\t694\t1\tIfcRatioMeasure\t1\n#\nGROUP\t695\tPset_TicketVendingMachine\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta3c15f06-9f4c-4b6c-ac75-8fcf2fc99c30\tPset_TicketVendingMachine.MoneyStuckRatio[Type]\tNUMBER\t\t695\t1\tIfcRatioMeasure\t1\nPARAM\t4dcf74cb-2ba1-400a-944b-450152f520cd\tPset_TicketVendingMachine.PaymentMethod[Type]\tTEXT\t\t695\t1\tPEnum_PaymentMethod\t1\nPARAM\te1507f34-a593-4938-8c43-dadededf59a0\tPset_TicketVendingMachine.TicketProductionSpeed[Type]\tINTEGER\t\t695\t1\tIfcIntegerCountRateMeasure\t1\nPARAM\t01ae46f3-6ba9-454e-80dc-bb8468cb8a2d\tPset_TicketVendingMachine.TicketStuckRatio[Type]\tNUMBER\t\t695\t1\tIfcRatioMeasure\t1\nPARAM\t9f4e1fc6-04f9-43a3-a312-375673db25c8\tPset_TicketVendingMachine.TicketVendingMachineType[Type]\tTEXT\t\t695\t1\tPEnum_TicketVendingMachineType\t1\nPARAM\t17afbf00-0930-4314-a92d-6d3773fcb991\tPset_TicketVendingMachine.VendingMachineUserInterface[Type]\tTEXT\t\t695\t1\tPEnum_VendingMachineUserInterface\t1\n#\nGROUP\t696\tPset_Tiling\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4ca6ec36-27fa-49ff-ac56-2aa614a8a459\tPset_Tiling.Permeability[Type]\tNUMBER\t\t696\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t8b22c1ed-09d6-4a2c-b60c-6521347f7ddd\tPset_Tiling.TileLength[Type]\tLENGTH\t\t696\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t002dbe80-16da-42cd-aace-9f93a52f96ea\tPset_Tiling.TileWidth[Type]\tLENGTH\t\t696\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t697\tPset_Tolerance\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1ba23441-1ce3-4ebc-9360-13c57c238c53\tPset_Tolerance.ElevationalFlatness[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t812cd8f0-2e73-41a7-9e6a-b228ac29fc49\tPset_Tolerance.HorizontalFlatness[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc9486fe4-b2cd-4034-a070-3bed92705c1b\tPset_Tolerance.HorizontalOrthogonality[Type]\tNUMBER\t\t697\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t03b14383-82f9-489b-8e9d-a38ad8a4c24e\tPset_Tolerance.HorizontalStraightness[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tddfb34e0-b8fc-4d61-8cb0-5599373edfb8\tPset_Tolerance.HorizontalTolerance[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tec77da3a-9f8e-45ec-9684-a11fe16daf8c\tPset_Tolerance.OrthogonalOrthogonality[Type]\tNUMBER\t\t697\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t94947102-020f-4245-bcfe-09d24871601a\tPset_Tolerance.OrthogonalStraightness[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8440f5b1-b716-4822-b1e4-fb0e14d36b32\tPset_Tolerance.OrthogonalTolerance[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdfe3b452-9651-4a44-92a8-7c0a7bdf078d\tPset_Tolerance.OverallOrthogonality[Type]\tNUMBER\t\t697\t1\tIfcPlaneAngleMeasure\t1\nPARAM\td28e5cc7-f0b8-4e1c-8fd3-d30278fd3d8e\tPset_Tolerance.OverallStraightness[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf9203d76-2599-418c-9b00-7ee94b6e7f0e\tPset_Tolerance.OverallTolerance[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td1e9c6bc-ad74-44ec-8981-ffc48045fa93\tPset_Tolerance.PlanarFlatness[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td491cb3b-66c6-4131-aa93-99f495a6b71c\tPset_Tolerance.SideFlatness[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9d1497e6-2f40-4c85-acbe-fb02d8e81292\tPset_Tolerance.ToleranceBasis[Type]\tTEXT\t\t697\t1\tPEnum_ToleranceBasis\t1\nPARAM\t2753e231-217f-46cf-9c16-55a780609aa4\tPset_Tolerance.ToleranceDescription[Type]\tTEXT\t\t697\t1\tIfcText\t1\nPARAM\t16c9c5b3-0299-45b7-a642-0773a9fb3c8a\tPset_Tolerance.VerticalOrthogonality[Type]\tNUMBER\t\t697\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t5c66545e-2717-4f87-93cb-098f3be8ee26\tPset_Tolerance.VerticalStraightness[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3739d3c0-4687-40f5-9a07-2259266b98a3\tPset_Tolerance.VerticalTolerance[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t698\tPset_TrackBase\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf3a68ec3-7628-4de3-82fa-8d523b37c9e1\tPset_TrackBase.IsSurfaceGalling[Type]\tYESNO\t\t698\t1\tIfcBoolean\t1\nPARAM\tb96215d9-e3e5-483a-840f-e4269d753e8c\tPset_TrackBase.SurfaceGallingArea[Type]\tAREA\t\t698\t1\tIfcAreaMeasure\t1\n#\nGROUP\t699\tPset_TrackElementOccurrenceSleeper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3717c881-b306-434f-9565-49b6b1f27f46\tPset_TrackElementOccurrenceSleeper.HasSpecialEquipment[Type]\tYESNO\t\t699\t1\tIfcBoolean\t1\nPARAM\teff1ac77-26c5-41d7-993c-b4c70554bbf7\tPset_TrackElementOccurrenceSleeper.IsContaminatedSleeper[Type]\tYESNO\t\t699\t1\tIfcBoolean\t1\nPARAM\te66e3117-4294-4153-8d04-90bc059bf2c7\tPset_TrackElementOccurrenceSleeper.SequenceInTrackPanel[Type]\tINTEGER\t\t699\t1\tIfcInteger\t1\nPARAM\td3da3444-1f72-4822-8a7b-0fc7b87304e0\tPset_TrackElementOccurrenceSleeper.UnderSleeperPadStiffness[Type]\tTEXT\t\t699\t1\tPEnum_UnderSleeperPadStiffness\t1\n#\nGROUP\t700\tPset_TrackElementPHistoryDerailer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t111f50ea-8b2f-454a-8648-a7e579c665da\tPset_TrackElementPHistoryDerailer.IsDerailing[Type]\tMULTILINETEXT\t\t700\t1\tIfcTimeSeries\t1\n#\nGROUP\t701\tPset_TrackElementTypeDerailer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7facc0c6-eca9-458e-a819-048e6d6a698c\tPset_TrackElementTypeDerailer.AppliedLineLoad[Type]\tNUMBER\t\t701\t1\tIfcMassPerLengthMeasure\t1\nPARAM\t005b1ab8-9908-4702-af15-f73d4a28000a\tPset_TrackElementTypeDerailer.DerailmentHeight[Type]\tLENGTH\t\t701\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2a7e332d-49a9-41d1-a1d8-fd6ccb63e700\tPset_TrackElementTypeDerailer.DerailmentMaximumSpeedLimit[Type]\tNUMBER\t\t701\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t7cefd667-f8ba-47ee-808e-2defaf2b8eea\tPset_TrackElementTypeDerailer.DerailmentWheelDiameter[Type]\tLENGTH\t\t701\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t702\tPset_TrackElementTypeSleeper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdd82ff15-8940-4aaa-b557-42bfde5a8837\tPset_TrackElementTypeSleeper.FasteningType[Type]\tTEXT\t\t702\t1\tIfcLabel\t1\nPARAM\t947b9865-2ef0-43d6-83bf-3716833ce850\tPset_TrackElementTypeSleeper.HollowSleeperUsage[Type]\tTEXT\t\t702\t1\tIfcLabel\t1\nPARAM\t6b9ba9fb-3ff1-41e9-a5ab-530449878faa\tPset_TrackElementTypeSleeper.InstalledCondition[Type]\tTEXT\t\t702\t1\tPEnum_InstalledCondition\t1\nPARAM\tfd566990-a168-46e3-9d80-2945fb214c4e\tPset_TrackElementTypeSleeper.IsElectricallyInsulated[Type]\tYESNO\t\t702\t1\tIfcBoolean\t1\nPARAM\te17c18fe-7d7a-41a7-83c6-0e5fdccdcda2\tPset_TrackElementTypeSleeper.IsHollowSleeper[Type]\tYESNO\t\t702\t1\tIfcBoolean\t1\nPARAM\tc454d54f-6bb3-402c-ab19-d74f12b76a7d\tPset_TrackElementTypeSleeper.NumberOfTrackCenters[Type]\tINTEGER\t\t702\t1\tIfcCountMeasure\t1\nPARAM\t48a3da65-d827-4ce6-97a1-0f45591dd630\tPset_TrackElementTypeSleeper.SleeperType[Type]\tTEXT\t\t702\t1\tPEnum_SleeperType\t1\nPARAM\t54b518bc-a7f7-43cb-a857-4a4918098a40\tPset_TrackElementTypeSleeper.TechnicalStandard[Type]\tMULTILINETEXT\t\t702\t1\tIfcExternalReference\t1\n#\nGROUP\t703\tPset_TractionPowerSystem\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta8021703-868e-48a4-85fa-8977e4348a01\tPset_TractionPowerSystem.ElectrificationType[Type]\tTEXT\t\t703\t1\tPEnum_ElectrificationType\t1\nPARAM\tba6e69cd-0904-43d0-b41d-08f0ffec5ef0\tPset_TractionPowerSystem.NominalVoltage[Type]\tNUMBER\t\t703\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t8207980a-9427-4a95-bd74-d7a4c2a5277b\tPset_TractionPowerSystem.PowerSupplyMode[Type]\tTEXT\t\t703\t1\tPEnum_PowerSupplyMode\t1\nPARAM\t8fc511b5-968b-4cbf-a34b-5660f5a44f86\tPset_TractionPowerSystem.RatedFrequency[Type]\tNUMBER\t\t703\t1\tIfcFrequencyMeasure\t1\n#\nGROUP\t704\tPset_TrafficCalmingDeviceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8c69d42f-981e-462f-8ea6-889b0f37d54d\tPset_TrafficCalmingDeviceCommon.TypeDesignation[Type]\tTEXT\t\t704\t1\tIfcLabel\t1\n#\nGROUP\t705\tPset_TransformerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7579e475-6187-465d-91a4-dc117258aa4a\tPset_TransformerTypeCommon.EfficiencyCurve[Type]\tMULTILINETEXT\t\t705\t1\tPropertyTableValue\t1\nPARAM\te92119d7-8983-4943-be01-76e8692b5f56\tPset_TransformerTypeCommon.ImaginaryImpedanceRatio[Type]\tNUMBER\t\t705\t1\tIfcRatioMeasure\t1\nPARAM\ta968bda1-bb45-4569-ba77-3e6b9be77bae\tPset_TransformerTypeCommon.IsNeutralPrimaryTerminalAvailable[Type]\tYESNO\t\t705\t1\tIfcBoolean\t1\nPARAM\t0be00804-31d2-4c05-9c35-03f15fbb8ded\tPset_TransformerTypeCommon.IsNeutralSecondaryTerminalAvailable[Type]\tYESNO\t\t705\t1\tIfcBoolean\t1\nPARAM\tdee251ba-4aa4-4596-b3d8-7bf1e143def2\tPset_TransformerTypeCommon.MaximumApparentPower[Type]\tNUMBER\t\t705\t1\tIfcPowerMeasure\t1\nPARAM\t6d97b484-1ef5-45e9-aea2-c48292d47127\tPset_TransformerTypeCommon.PrimaryApparentPower[Type]\tNUMBER\t\t705\t1\tIfcPowerMeasure\t1\nPARAM\t6502bf69-d306-49c3-b835-67ed44916b01\tPset_TransformerTypeCommon.PrimaryCurrent[Type]\tNUMBER\t\t705\t1\tIfcElectricCurrentMeasure\t1\nPARAM\ta4892b15-c688-471b-bc64-f65db26929ad\tPset_TransformerTypeCommon.PrimaryFrequency[Type]\tNUMBER\t\t705\t1\tIfcFrequencyMeasure\t1\nPARAM\tf3158018-b20d-4b88-884d-54aef2746b21\tPset_TransformerTypeCommon.PrimaryVoltage[Type]\tNUMBER\t\t705\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t7a1f01ee-e40e-4d96-b0d2-b510d1df993a\tPset_TransformerTypeCommon.RadiativeFraction[Type]\tNUMBER\t\t705\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t2a9253f8-1ac5-4cbc-b8e3-fc80b51e50d6\tPset_TransformerTypeCommon.RealImpedanceRatio[Type]\tNUMBER\t\t705\t1\tIfcRatioMeasure\t1\nPARAM\te91bfd74-f8f4-475c-85f6-4638b7c9d768\tPset_TransformerTypeCommon.Reference[Type]\tTEXT\t\t705\t1\tIfcIdentifier\t1\nPARAM\t405d0030-1d68-45a5-a305-c27a27cc50d6\tPset_TransformerTypeCommon.SecondaryApparentPower[Type]\tNUMBER\t\t705\t1\tIfcPowerMeasure\t1\nPARAM\tecb337bf-6b31-4797-bea7-f0ff14372a07\tPset_TransformerTypeCommon.SecondaryCurrent[Type]\tNUMBER\t\t705\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tf1378dcb-9e4d-45d0-af7e-2bd27ac92137\tPset_TransformerTypeCommon.SecondaryCurrentType[Type]\tTEXT\t\t705\t1\tPEnum_SecondaryCurrentType\t1\nPARAM\t8b412e32-67ef-4c30-bbbb-55d6a14581bb\tPset_TransformerTypeCommon.SecondaryFrequency[Type]\tNUMBER\t\t705\t1\tIfcFrequencyMeasure\t1\nPARAM\t56d5b2ef-1385-4315-b839-8b71eaef5f35\tPset_TransformerTypeCommon.SecondaryVoltage[Type]\tNUMBER\t\t705\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t52104f0d-16c4-4c57-85bf-ce431a24a05e\tPset_TransformerTypeCommon.ShortCircuitVoltage[Type]\tMULTILINETEXT\t\t705\t1\tIfcComplexNumber\t1\nPARAM\tbf7acad1-9cf7-4c69-a72a-cec5a8abee6d\tPset_TransformerTypeCommon.Status[Type]\tTEXT\t\t705\t1\tPEnum_ElementStatus\t1\nPARAM\t3efcd830-403d-4785-9f14-e2ca08cea10a\tPset_TransformerTypeCommon.TransformerVectorGroup[Type]\tTEXT\t\t705\t1\tPEnum_TransformerVectorGroup\t1\n#\nGROUP\t706\tPset_TransitionSectionCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t882b2885-77ad-425d-bee0-cd798f2b0053\tPset_TransitionSectionCommon.NominalLength[Type]\tLENGTH\t\t706\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t707\tPset_TransportElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcf7cac39-8714-4027-9d9e-18b53910d2a6\tPset_TransportElementCommon.CapacityPeople[Type]\tINTEGER\t\t707\t1\tIfcCountMeasure\t1\nPARAM\t41621dac-8d51-4bbe-9876-6618dda18907\tPset_TransportElementCommon.CapacityWeight[Type]\tNUMBER\t\t707\t1\tIfcMassMeasure\t1\nPARAM\t66416a21-d85a-460d-a0d6-de213474da91\tPset_TransportElementCommon.FireExit[Type]\tYESNO\t\t707\t1\tIfcBoolean\t1\nPARAM\t383c73ea-357f-4123-920a-24b680bacd0f\tPset_TransportElementCommon.Reference[Type]\tTEXT\t\t707\t1\tIfcIdentifier\t1\nPARAM\t8f02356c-f51e-4149-a4cd-b779ff0923a9\tPset_TransportElementCommon.Status[Type]\tTEXT\t\t707\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t708\tPset_TransportElementElevator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc75cf7d2-267e-4e84-b5a1-67431a126de8\tPset_TransportElementElevator.ClearDepth[Type]\tLENGTH\t\t708\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t49b09e3a-239a-42a1-87b6-db12ede946b2\tPset_TransportElementElevator.ClearHeight[Type]\tLENGTH\t\t708\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4fea65e0-2683-423a-9b80-ccdbfa3d3433\tPset_TransportElementElevator.ClearWidth[Type]\tLENGTH\t\t708\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta9037eda-7492-4674-b78e-14cbdb911cd1\tPset_TransportElementElevator.FireFightingLift[Type]\tYESNO\t\t708\t1\tIfcBoolean\t1\n#\nGROUP\t709\tPset_TransportEquipmentOTN\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7629003c-2135-4e95-9e9d-ff6433906b67\tPset_TransportEquipmentOTN.ChromaticDispersionTolerance[Type]\tNUMBER\t\t709\t1\tIfcReal\t1\nPARAM\tfeca47c8-4b46-4840-9ac2-1b6ede4d8252\tPset_TransportEquipmentOTN.EquipmentCapacity[Type]\tINTEGER\t\t709\t1\tIfcIntegerCountRateMeasure\t1\nPARAM\te8f41cff-0376-47a7-a365-2210a10f9031\tPset_TransportEquipmentOTN.MinimumOpticalSignalToNoiseRatio[Type]\tNUMBER\t\t709\t1\tIfcRatioMeasure\t1\nPARAM\tf2c3d3e3-a0c0-4aaa-b65d-8ce20cd256c3\tPset_TransportEquipmentOTN.PolarizationModeDispersionTolerance[Type]\tNUMBER\t\t709\t1\tIfcTimeMeasure\t1\nPARAM\t15be4602-49ae-4dae-8e29-2e4e00939f52\tPset_TransportEquipmentOTN.SingleChannelAveragePower[Type]\tNUMBER\t\t709\t1\tIfcPowerMeasure\t1\nPARAM\tec734471-b866-4aa6-b49f-34acd9a32a00\tPset_TransportEquipmentOTN.SingleChannelPower[Type]\tMULTILINETEXT\t\t709\t1\tPropertyBoundedValue\t1\nPARAM\t4789dec4-7f19-4a4f-ad72-baa974ed1345\tPset_TransportEquipmentOTN.SingleWaveTransmissionRate[Type]\tNUMBER\t\t709\t1\tIfcFrequencyMeasure\t1\n#\nGROUP\t710\tPset_TrenchExcavationCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8b20b947-46be-4c17-97a1-b7e25442be3a\tPset_TrenchExcavationCommon.NominalDepth[Type]\tLENGTH\t\t710\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t2cffef41-555a-4156-9c4c-68040fc90e3b\tPset_TrenchExcavationCommon.NominalWidth[Type]\tLENGTH\t\t710\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t711\tPset_TubeBundleTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td50cefe5-d693-4bb9-9100-c5c01a389723\tPset_TubeBundleTypeCommon.FoulingFactor[Type]\tNUMBER\t\t711\t1\tIfcThermalResistanceMeasure\t1\nPARAM\tddb119f7-839b-45a9-9a9a-b9d0887fbee0\tPset_TubeBundleTypeCommon.HasTurbulator[Type]\tYESNO\t\t711\t1\tIfcBoolean\t1\nPARAM\t2f5d00b1-01e9-45c7-8a3b-ee315b312159\tPset_TubeBundleTypeCommon.HorizontalSpacing[Type]\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5b661149-08f0-40a6-bc96-452924db5b63\tPset_TubeBundleTypeCommon.InLineRowSpacing[Type]\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te8b6bb24-3ddf-4ac6-bbaf-7019d337eb6b\tPset_TubeBundleTypeCommon.InsideDiameter[Type]\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t47821133-266b-4272-992f-bf8ed6353d5e\tPset_TubeBundleTypeCommon.Length[Type]\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3addc9a9-9ade-45ed-91e0-d80c6376806b\tPset_TubeBundleTypeCommon.Material[Type]\tMULTILINETEXT\t\t711\t1\tIfcMaterial\t1\nPARAM\t5ccd6074-6a18-4f47-b2e8-a72cd791c409\tPset_TubeBundleTypeCommon.NominalDiameter[Type]\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tba4e8f8b-6944-489d-ad79-60980f0fe275\tPset_TubeBundleTypeCommon.NumberOfCircuits[Type]\tINTEGER\t\t711\t1\tIfcCountMeasure\t1\nPARAM\td87f5a9a-e91a-452f-9c81-c1fb18a29c9c\tPset_TubeBundleTypeCommon.NumberOfRows[Type]\tINTEGER\t\t711\t1\tIfcCountMeasure\t1\nPARAM\tb6010939-3f57-4330-9ac4-c02c2024fe5e\tPset_TubeBundleTypeCommon.OutsideDiameter[Type]\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc21ab28a-15e1-425b-86d2-494f851ab5c0\tPset_TubeBundleTypeCommon.Reference[Type]\tTEXT\t\t711\t1\tIfcIdentifier\t1\nPARAM\taecf484e-95a3-4d86-a316-a7d6f5a0565d\tPset_TubeBundleTypeCommon.StaggeredRowSpacing[Type]\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te4fe280e-cbb6-4322-8398-c4aff96260fc\tPset_TubeBundleTypeCommon.Status[Type]\tTEXT\t\t711\t1\tPEnum_ElementStatus\t1\nPARAM\t4f4c864b-7404-4d00-aaca-7af150903591\tPset_TubeBundleTypeCommon.ThermalConductivity[Type]\tNUMBER\t\t711\t1\tIfcThermalConductivityMeasure\t1\nPARAM\td1c9c4ad-35fc-4376-9048-e82d1396deaa\tPset_TubeBundleTypeCommon.VerticalSpacing[Type]\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb51b2aec-3d61-428e-9c61-9aa45f63d0b7\tPset_TubeBundleTypeCommon.Volume[Type]\tVOLUME\t\t711\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t712\tPset_TubeBundleTypeFinned\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te587be47-8e02-4d24-be10-5bd09c160d42\tPset_TubeBundleTypeFinned.Diameter[Type]\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td8ce4155-0b9b-4d8e-848b-c056ce4da026\tPset_TubeBundleTypeFinned.FinCorrugatedType[Type]\tTEXT\t\t712\t1\tIfcLabel\t1\nPARAM\ta719874a-c073-4de7-996e-81927a76f0a4\tPset_TubeBundleTypeFinned.HasCoating[Type]\tYESNO\t\t712\t1\tIfcBoolean\t1\nPARAM\tcd65f524-c47a-4bcb-8e10-f21f719a17af\tPset_TubeBundleTypeFinned.Height[Type]\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbe6c0454-4f76-46fc-9b94-4460557f7ecc\tPset_TubeBundleTypeFinned.Length[Type]\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te8716347-649b-4483-bc10-a94b58e7c4c0\tPset_TubeBundleTypeFinned.Material[Type]\tMULTILINETEXT\t\t712\t1\tIfcMaterial\t1\nPARAM\tf5677b8a-5605-4c1a-9b7b-4ff457223557\tPset_TubeBundleTypeFinned.Spacing[Type]\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t78ffe776-6066-4930-a486-5deadf33a5f3\tPset_TubeBundleTypeFinned.ThermalConductivity[Type]\tNUMBER\t\t712\t1\tIfcThermalConductivityMeasure\t1\nPARAM\ta7ef5596-81d1-45bc-aa42-46ee7847ed89\tPset_TubeBundleTypeFinned.Thickness[Type]\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t713\tPset_Uncertainty\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t364f3141-c20c-412e-b04a-cafde0e5a8f2\tPset_Uncertainty.HorizontalUncertainty[Type]\tLENGTH\t\t713\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1e0d99a0-d4a8-43d2-b470-c7dbbe0fcc02\tPset_Uncertainty.LinearUncertainty[Type]\tLENGTH\t\t713\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32877faf-d5bf-49e7-837a-e38166aa5b29\tPset_Uncertainty.OrthogonalUncertainty[Type]\tLENGTH\t\t713\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t10771f04-2366-4a4d-90f4-7bb7ab01e103\tPset_Uncertainty.UncertaintyBasis[Type]\tTEXT\t\t713\t1\tPEnum_UncertaintyBasis\t1\nPARAM\tebdc2c3f-d9e6-415d-b385-70de3585aa07\tPset_Uncertainty.UncertaintyDescription[Type]\tTEXT\t\t713\t1\tIfcText\t1\nPARAM\tfeb19861-42bb-4f6b-ba07-f09cb20f23be\tPset_Uncertainty.VerticalUncertainty[Type]\tLENGTH\t\t713\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t714\tPset_UnitaryControlElementBaseStationController\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3dac3023-e3cb-4d76-87d3-f9b95dc038fd\tPset_UnitaryControlElementBaseStationController.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t714\t1\tPropertyTableValue\t1\nPARAM\t20ba2c64-3fd7-4fd3-99b1-5d00813e591c\tPset_UnitaryControlElementBaseStationController.NumberOfManagedBTSs[Type]\tINTEGER\t\t714\t1\tIfcCountMeasure\t1\nPARAM\t7b56b4d5-d29b-465e-9e89-46ff25809711\tPset_UnitaryControlElementBaseStationController.NumberOfManagedCarriers[Type]\tINTEGER\t\t714\t1\tIfcCountMeasure\t1\n#\nGROUP\t715\tPset_UnitaryControlElementPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8fb10db9-639b-47ea-b545-28049657a683\tPset_UnitaryControlElementPHistory.Fan[Type]\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\nPARAM\t0c295158-b762-4c6d-b14d-7360f5d59aa3\tPset_UnitaryControlElementPHistory.Mode[Type]\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\nPARAM\t00d57d3a-8c98-40a7-ad50-6392742e62d4\tPset_UnitaryControlElementPHistory.OperationModeHistory[Type]\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\nPARAM\t7eb75f66-a2b4-4245-a151-cbce750bd7cf\tPset_UnitaryControlElementPHistory.SetPoint[Type]\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\nPARAM\teeea7c3b-5f20-4481-81a3-b835d7aa615e\tPset_UnitaryControlElementPHistory.Temperature[Type]\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\n#\nGROUP\t716\tPset_UnitaryControlElementTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf8c131f3-0776-4e3f-9c74-05ba161f8264\tPset_UnitaryControlElementTypeCommon.Mode[Type]\tMULTILINETEXT\t\t716\t1\tPropertyTableValue\t1\nPARAM\tfad827b8-c51a-41fe-a6e9-a52784499452\tPset_UnitaryControlElementTypeCommon.OperationMode[Type]\tMULTILINETEXT\t\t716\t1\tPropertyTableValue\t1\nPARAM\tfe0d9dd4-536c-445a-b3d0-82e2a1c672f7\tPset_UnitaryControlElementTypeCommon.Reference[Type]\tTEXT\t\t716\t1\tIfcIdentifier\t1\nPARAM\te5b546fc-37e9-4f97-814f-f6a50f40a6e4\tPset_UnitaryControlElementTypeCommon.Status[Type]\tTEXT\t\t716\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t717\tPset_UnitaryControlElementTypeControlPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tad674e0b-36fa-4dc9-b00d-a9438241c09d\tPset_UnitaryControlElementTypeControlPanel.NominalCurrent[Type]\tNUMBER\t\t717\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t4bec673a-669f-425c-b79f-14706c89b476\tPset_UnitaryControlElementTypeControlPanel.NominalPower[Type]\tNUMBER\t\t717\t1\tIfcPowerMeasure\t1\nPARAM\t040e62ee-d52a-4df6-ab88-8b3b5b988e9d\tPset_UnitaryControlElementTypeControlPanel.RatedVoltage[Type]\tMULTILINETEXT\t\t717\t1\tPropertyBoundedValue\t1\nPARAM\t01e1170e-d85c-43db-b1b5-103d47a6896d\tPset_UnitaryControlElementTypeControlPanel.ReferenceAirRelativeHumidity[Type]\tMULTILINETEXT\t\t717\t1\tPropertyBoundedValue\t1\nPARAM\t038d845f-9bea-4e3f-878c-d0224bbcfb9c\tPset_UnitaryControlElementTypeControlPanel.ReferenceEnvironmentTemperature[Type]\tMULTILINETEXT\t\t717\t1\tPropertyBoundedValue\t1\n#\nGROUP\t718\tPset_UnitaryControlElementTypeIndicatorPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5bf2d26b-a5bc-4cfc-b329-6c8d003a3911\tPset_UnitaryControlElementTypeIndicatorPanel.Application[Type]\tTEXT\t\t718\t1\tPEnum_UnitaryControlElementApplication\t1\nPARAM\t202238b1-09de-4149-acc4-c6ff9676ee0c\tPset_UnitaryControlElementTypeIndicatorPanel.UnitaryApplication[Type]\tTEXT\t\t718\t1\tPEnum_UnitaryControlElementApplication\t1\n#\nGROUP\t719\tPset_UnitaryControlElementTypeThermostat\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbff823c4-a3ca-4b5a-aeec-f868ce376d26\tPset_UnitaryControlElementTypeThermostat.TemperatureSetPoint[Type]\tMULTILINETEXT\t\t719\t1\tPropertyBoundedValue\t1\n#\nGROUP\t720\tPset_UnitaryEquipmentTypeAirConditioningUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td2d9d13d-efed-4405-a0d7-deb19b240294\tPset_UnitaryEquipmentTypeAirConditioningUnit.CondenserEnteringTemperature[Type]\tNUMBER\t\t720\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t5f78236e-9f14-4793-9945-db0dab71efde\tPset_UnitaryEquipmentTypeAirConditioningUnit.CondenserFlowrate[Type]\tNUMBER\t\t720\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tb194aba2-e483-4bf7-84cf-6423577f8a31\tPset_UnitaryEquipmentTypeAirConditioningUnit.CondenserLeavingTemperature[Type]\tNUMBER\t\t720\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t610d6eb6-d7d4-45bf-89a1-301b5d97dcfc\tPset_UnitaryEquipmentTypeAirConditioningUnit.CoolingEfficiency[Type]\tNUMBER\t\t720\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc0edd89e-a7cf-4211-8c9e-8c2889a9215a\tPset_UnitaryEquipmentTypeAirConditioningUnit.HeatingCapacity[Type]\tNUMBER\t\t720\t1\tIfcPowerMeasure\t1\nPARAM\t47330131-9d7e-4c19-8801-9f804c3d7b5b\tPset_UnitaryEquipmentTypeAirConditioningUnit.HeatingEfficiency[Type]\tNUMBER\t\t720\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf4cf9631-b88d-43d5-934b-7bed8c943336\tPset_UnitaryEquipmentTypeAirConditioningUnit.LatentCoolingCapacity[Type]\tNUMBER\t\t720\t1\tIfcPowerMeasure\t1\nPARAM\t511cb99f-a7c5-4c2c-a6c4-13a863c28f5d\tPset_UnitaryEquipmentTypeAirConditioningUnit.OutsideAirFlowrate[Type]\tNUMBER\t\t720\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t5dc8dd45-7758-4059-95b9-784f9d14b6a8\tPset_UnitaryEquipmentTypeAirConditioningUnit.SensibleCoolingCapacity[Type]\tNUMBER\t\t720\t1\tIfcPowerMeasure\t1\n#\nGROUP\t721\tPset_UnitaryEquipmentTypeAirHandler\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t73a5ba0a-c2eb-4471-908d-77619c05cc33\tPset_UnitaryEquipmentTypeAirHandler.AirHandlerConstruction[Type]\tTEXT\t\t721\t1\tPEnum_AirHandlerConstruction\t1\nPARAM\t36c02567-b6a2-403a-b43e-60241ff45992\tPset_UnitaryEquipmentTypeAirHandler.AirHandlerFanCoilArrangement[Type]\tTEXT\t\t721\t1\tPEnum_AirHandlerFanCoilArrangement\t1\nPARAM\tea216872-106f-4bf0-abe9-711d1a3064ba\tPset_UnitaryEquipmentTypeAirHandler.DualDeck[Type]\tYESNO\t\t721\t1\tIfcBoolean\t1\n#\nGROUP\t722\tPset_UnitaryEquipmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0a8cfd6b-bbe7-4d01-9db4-868cd9d820df\tPset_UnitaryEquipmentTypeCommon.Reference[Type]\tTEXT\t\t722\t1\tIfcIdentifier\t1\nPARAM\t11f7a12c-03a2-4aed-adf0-29ceef7a89f5\tPset_UnitaryEquipmentTypeCommon.Status[Type]\tTEXT\t\t722\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t723\tPset_UtilityConsumption\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0dd14c78-afe2-4327-b7bd-023f67688896\tPset_UtilityConsumption.Electricity[Type]\tTEXT\t\t723\t1\tIfcLabel\t1\nPARAM\td967f88e-d1a9-4790-890a-506ad312dee2\tPset_UtilityConsumption.Fuel[Type]\tTEXT\t\t723\t1\tIfcLabel\t1\nPARAM\t67a0fa38-c7a6-44d3-8d22-471433b77f06\tPset_UtilityConsumption.Heat[Type]\tTEXT\t\t723\t1\tIfcLabel\t1\nPARAM\t2b34af6f-2d29-479f-9704-3b8e94ac6cc8\tPset_UtilityConsumption.Steam[Type]\tTEXT\t\t723\t1\tIfcLabel\t1\nPARAM\t595e82a4-1f0e-4b3d-9804-88c15259f261\tPset_UtilityConsumption.Water[Type]\tTEXT\t\t723\t1\tIfcLabel\t1\n#\nGROUP\t724\tPset_UtilityConsumptionPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0dc1a818-9f6e-48fb-9998-fa8fdd72d7ff\tPset_UtilityConsumptionPHistory.Electricity[Type]\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\nPARAM\tbcb6226e-9c1a-4e57-b4a0-751a266ec6c7\tPset_UtilityConsumptionPHistory.Fuel[Type]\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\nPARAM\t7b9bcc75-c897-47b8-945c-b8ab49894fa8\tPset_UtilityConsumptionPHistory.Heat[Type]\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\nPARAM\t41d9ff16-6b3b-437d-969b-8d8f36947932\tPset_UtilityConsumptionPHistory.Steam[Type]\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\nPARAM\tc5d89d3e-0fb6-4a0d-a55b-8a02de736e0b\tPset_UtilityConsumptionPHistory.Water[Type]\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\n#\nGROUP\t725\tPset_ValvePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta46ee934-d6fd-4794-b8cc-e4de4da879e5\tPset_ValvePHistory.MeasuredFlowRate[Type]\tMULTILINETEXT\t\t725\t1\tIfcTimeSeries\t1\nPARAM\tbb36dacf-390c-4073-a25b-71b633adc57a\tPset_ValvePHistory.MeasuredPressureDrop[Type]\tMULTILINETEXT\t\t725\t1\tIfcTimeSeries\t1\nPARAM\tde6b1ed3-cd2e-4481-b1dd-90790c741243\tPset_ValvePHistory.PercentageOpen[Type]\tMULTILINETEXT\t\t725\t1\tIfcTimeSeries\t1\n#\nGROUP\t726\tPset_ValveTypeAirRelease\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1446b091-14ba-41d1-b683-cae34b1e22f2\tPset_ValveTypeAirRelease.IsAutomatic[Type]\tYESNO\t\t726\t1\tIfcBoolean\t1\n#\nGROUP\t727\tPset_ValveTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc0d2a818-2fbc-4002-a2d0-e43e804a31c4\tPset_ValveTypeCommon.BodyMaterial[Type]\tMULTILINETEXT\t\t727\t1\tIfcMaterial\t1\nPARAM\t46832b68-62d7-4921-904c-7340cba1424d\tPset_ValveTypeCommon.CloseOffRating[Type]\tNUMBER\t\t727\t1\tIfcPressureMeasure\t1\nPARAM\t5217feec-a686-456f-aae1-0e3c23cd5792\tPset_ValveTypeCommon.FlowCoefficient[Type]\tNUMBER\t\t727\t1\tIfcReal\t1\nPARAM\t03668c17-9d47-4296-9163-aca8dbfccfd8\tPset_ValveTypeCommon.OperatingMechanismMaterial[Type]\tMULTILINETEXT\t\t727\t1\tIfcMaterial\t1\nPARAM\t39139dd0-04b7-47ae-81d9-88695e6cf7c1\tPset_ValveTypeCommon.Reference[Type]\tTEXT\t\t727\t1\tIfcIdentifier\t1\nPARAM\ta398f930-bdc4-4f0a-9031-dd073f0754f0\tPset_ValveTypeCommon.Size[Type]\tLENGTH\t\t727\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta95b1e84-d6b4-47d2-b8f1-f50253070211\tPset_ValveTypeCommon.Status[Type]\tTEXT\t\t727\t1\tPEnum_ElementStatus\t1\nPARAM\t535324d0-9873-4292-8c9f-7a1e2e4c59d2\tPset_ValveTypeCommon.TestPressure[Type]\tNUMBER\t\t727\t1\tIfcPressureMeasure\t1\nPARAM\td63f4428-6658-49c5-bc11-6df330cbfb30\tPset_ValveTypeCommon.ValveMechanism[Type]\tTEXT\t\t727\t1\tPEnum_ValveMechanism\t1\nPARAM\t77661348-add5-496f-aa54-2d9c48535b10\tPset_ValveTypeCommon.ValveOperation[Type]\tTEXT\t\t727\t1\tPEnum_ValveOperation\t1\nPARAM\t28749f08-22ad-45fd-938c-2dbf2d2465d1\tPset_ValveTypeCommon.ValvePattern[Type]\tTEXT\t\t727\t1\tPEnum_ValvePattern\t1\nPARAM\t0c83a303-579d-4a44-bab8-e0b34cbaf778\tPset_ValveTypeCommon.WorkingPressure[Type]\tNUMBER\t\t727\t1\tIfcPressureMeasure\t1\n#\nGROUP\t728\tPset_ValveTypeDrawOffCock\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8b2788f8-09e7-4d4f-86ef-672762569543\tPset_ValveTypeDrawOffCock.HasHoseUnion[Type]\tYESNO\t\t728\t1\tIfcBoolean\t1\n#\nGROUP\t729\tPset_ValveTypeFaucet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te7ba2bf4-7c2d-4b2e-8c05-d0c67d24cd18\tPset_ValveTypeFaucet.FaucetFunction[Type]\tTEXT\t\t729\t1\tPEnum_FaucetFunction\t1\nPARAM\tdf261e97-2a4d-4566-8844-34322ce026d5\tPset_ValveTypeFaucet.FaucetOperation[Type]\tTEXT\t\t729\t1\tPEnum_FaucetOperation\t1\nPARAM\t18d77a63-2760-4529-9eef-d767e515db77\tPset_ValveTypeFaucet.FaucetTopDescription[Type]\tTEXT\t\t729\t1\tIfcText\t1\nPARAM\t6456435f-53ff-4ec9-bddd-b4172dbbec91\tPset_ValveTypeFaucet.FaucetType[Type]\tTEXT\t\t729\t1\tPEnum_FaucetType\t1\nPARAM\ta50a6923-f589-4e36-902b-5f8048198458\tPset_ValveTypeFaucet.Finish[Type]\tTEXT\t\t729\t1\tIfcText\t1\n#\nGROUP\t730\tPset_ValveTypeFlushing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t69bf465e-c63a-41be-93f6-a9c9b39b7a15\tPset_ValveTypeFlushing.FlushingRate[Type]\tNUMBER\t\t730\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tea7fd99d-dadf-4072-898a-8f50651d1567\tPset_ValveTypeFlushing.HasIntegralShutOffDevice[Type]\tYESNO\t\t730\t1\tIfcBoolean\t1\nPARAM\t86d7f5f8-e906-4ce6-a9bb-036afc666a20\tPset_ValveTypeFlushing.IsHighPressure[Type]\tYESNO\t\t730\t1\tIfcBoolean\t1\n#\nGROUP\t731\tPset_ValveTypeGasTap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb3a20ee8-2f3f-47d1-8a3f-f43e5f814900\tPset_ValveTypeGasTap.HasHoseUnion[Type]\tYESNO\t\t731\t1\tIfcBoolean\t1\n#\nGROUP\t732\tPset_ValveTypeIsolating\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t62577c71-ff37-4b21-be19-205c313b8662\tPset_ValveTypeIsolating.IsNormallyOpen[Type]\tYESNO\t\t732\t1\tIfcBoolean\t1\nPARAM\tc514aee8-38c3-472c-bb19-602b7df232f2\tPset_ValveTypeIsolating.IsolatingPurpose[Type]\tTEXT\t\t732\t1\tPEnum_IsolatingPurpose\t1\n#\nGROUP\t733\tPset_ValveTypeMixing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfa27377a-e1fd-4e12-9b80-c39bfb8b0690\tPset_ValveTypeMixing.MixerControl[Type]\tTEXT\t\t733\t1\tPEnum_MixingValveControl\t1\nPARAM\te0946bc5-2430-4d79-b1e7-2b3cc2d1ceac\tPset_ValveTypeMixing.OutletConnectionSize[Type]\tLENGTH\t\t733\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t734\tPset_ValveTypePressureReducing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t62d0563d-7e0c-4a4a-9dfe-c40c707445ce\tPset_ValveTypePressureReducing.DownstreamPressure[Type]\tNUMBER\t\t734\t1\tIfcPressureMeasure\t1\nPARAM\t715942a8-4e07-4ba1-824c-6ddbd76369af\tPset_ValveTypePressureReducing.UpstreamPressure[Type]\tNUMBER\t\t734\t1\tIfcPressureMeasure\t1\n#\nGROUP\t735\tPset_ValveTypePressureRelief\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t11d70827-02e3-44eb-a148-ad396fdf3e8e\tPset_ValveTypePressureRelief.ReliefPressure[Type]\tNUMBER\t\t735\t1\tIfcPressureMeasure\t1\n#\nGROUP\t736\tPset_VegetationCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc3c1230b-e1d8-4f9d-8502-dc4d390b1d09\tPset_VegetationCommon.BotanicalName[Type]\tTEXT\t\t736\t1\tIfcLabel\t1\nPARAM\t757e920f-6e93-4682-a72f-acf650f705d6\tPset_VegetationCommon.LocalName[Type]\tTEXT\t\t736\t1\tIfcLabel\t1\n#\nGROUP\t737\tPset_VehicleAvailability\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teab3c3d0-9ead-4e1f-8017-b92339cfccb3\tPset_VehicleAvailability.MaintenanceDowntime[Type]\tNUMBER\t\t737\t1\tIfcRatioMeasure\t1\nPARAM\tc5cee50a-52ce-4452-85a1-b9a18e82eb6e\tPset_VehicleAvailability.VehicleAvailability[Type]\tNUMBER\t\t737\t1\tIfcRatioMeasure\t1\nPARAM\t7bd387e3-d2f6-4b87-ba4c-c2528b5d87a1\tPset_VehicleAvailability.WeatherDowntime[Type]\tNUMBER\t\t737\t1\tIfcRatioMeasure\t1\n#\nGROUP\t738\tPset_VesselLineCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8aa78375-7dd8-4a95-a6e9-4b0220236225\tPset_VesselLineCommon.CentreLineToFairlead[Type]\tLENGTH\t\t738\t1\tIfcLengthMeasure\t1\nPARAM\t8b475031-2418-41b5-acab-671dc3982a4b\tPset_VesselLineCommon.FairleadToTermination[Type]\tLENGTH\t\t738\t1\tIfcLengthMeasure\t1\nPARAM\t0f61629d-6a6e-4498-a1f6-a833e90c12a8\tPset_VesselLineCommon.HeightAboveMainDeck[Type]\tLENGTH\t\t738\t1\tIfcLengthMeasure\t1\nPARAM\taf739a60-3750-4a98-a2e4-a4d2e7fe1538\tPset_VesselLineCommon.LineIdentifier[Type]\tTEXT\t\t738\t1\tIfcIdentifier\t1\nPARAM\t5990c5c9-5ecc-45cd-9a33-a93be7bb4da8\tPset_VesselLineCommon.LineStrength[Type]\tNUMBER\t\t738\t1\tIfcForceMeasure\t1\nPARAM\t598d80a8-2baa-4802-b275-dfbc98e524a0\tPset_VesselLineCommon.LineType[Type]\tTEXT\t\t738\t1\tIfcLabel\t1\nPARAM\t265f770d-e0ed-4b4b-97ff-59b7bd5a3548\tPset_VesselLineCommon.MidshipToFairLead[Type]\tLENGTH\t\t738\t1\tIfcLengthMeasure\t1\nPARAM\tacbace3c-cd93-4efb-84ea-f26b2bec0102\tPset_VesselLineCommon.PreTensionAim[Type]\tNUMBER\t\t738\t1\tIfcForceMeasure\t1\nPARAM\t712d0c1c-6bcc-4663-bd02-0bad66b4bdd9\tPset_VesselLineCommon.TailDiameter[Type]\tLENGTH\t\t738\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td2580dca-b20a-4f5c-adfb-b22d9c240929\tPset_VesselLineCommon.TailLength[Type]\tLENGTH\t\t738\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t51096cd7-f60e-4e0d-a3b0-f86e9081fe69\tPset_VesselLineCommon.TailStrength[Type]\tNUMBER\t\t738\t1\tIfcForceMeasure\t1\nPARAM\t860be241-7395-4dca-812a-1c632b7d69b7\tPset_VesselLineCommon.TailType[Type]\tTEXT\t\t738\t1\tIfcLabel\t1\nPARAM\t34c455ff-daa8-4ecd-8c1c-0b2d08677f17\tPset_VesselLineCommon.WinchBreakLimit[Type]\tNUMBER\t\t738\t1\tIfcForceMeasure\t1\n#\nGROUP\t739\tPset_VibrationIsolatorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf9c1d866-9483-4935-ad01-871a25c35881\tPset_VibrationIsolatorTypeCommon.Height[Type]\tLENGTH\t\t739\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9099ae5b-0fb8-4252-b477-8e8e9deec516\tPset_VibrationIsolatorTypeCommon.IsolatorCompressibility[Type]\tNUMBER\t\t739\t1\tIfcRatioMeasure\t1\nPARAM\t92407b43-4ff4-4edb-b642-d840bf25ca42\tPset_VibrationIsolatorTypeCommon.IsolatorStaticDeflection[Type]\tLENGTH\t\t739\t1\tIfcLengthMeasure\t1\nPARAM\t7277bb6d-f565-421b-ba41-d463cdfd94d9\tPset_VibrationIsolatorTypeCommon.Material[Type]\tMULTILINETEXT\t\t739\t1\tIfcMaterial\t1\nPARAM\td90da190-ea39-48d2-9019-b5e3ace9830a\tPset_VibrationIsolatorTypeCommon.MaximumSupportedWeight[Type]\tNUMBER\t\t739\t1\tIfcMassMeasure\t1\nPARAM\t69b5d12a-28c7-46ab-ba85-578c888de1b7\tPset_VibrationIsolatorTypeCommon.NominalHeight[Type]\tLENGTH\t\t739\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3d14a325-c5e7-4973-a6ba-3b24860693ed\tPset_VibrationIsolatorTypeCommon.Reference[Type]\tTEXT\t\t739\t1\tIfcIdentifier\t1\nPARAM\t57450441-a5e0-4235-8168-5b85a7c24e75\tPset_VibrationIsolatorTypeCommon.Status[Type]\tTEXT\t\t739\t1\tPEnum_ElementStatus\t1\nPARAM\t97a6f5b9-13c4-4119-829f-65f804bfce8c\tPset_VibrationIsolatorTypeCommon.VibrationTransmissibility[Type]\tNUMBER\t\t739\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t740\tPset_VoltageInstrumentTransformer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t70559b8c-0f84-4d87-bff0-e37ca18027a7\tPset_VoltageInstrumentTransformer.AccuracyClass[Type]\tNUMBER\t\t740\t1\tIfcRatioMeasure\t1\nPARAM\t3f0b18e8-ce27-4422-9b4f-5472fee9fffc\tPset_VoltageInstrumentTransformer.AccuracyGrade[Type]\tTEXT\t\t740\t1\tIfcLabel\t1\nPARAM\t71d3ac4b-6800-426a-bf50-ba6ceb1daaac\tPset_VoltageInstrumentTransformer.NominalCurrent[Type]\tNUMBER\t\t740\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tfec07f85-7082-458e-be52-aa88e1ab85ed\tPset_VoltageInstrumentTransformer.NominalPower[Type]\tNUMBER\t\t740\t1\tIfcPowerMeasure\t1\nPARAM\t9690f35b-8612-4227-b8b3-6fea924b50e0\tPset_VoltageInstrumentTransformer.NumberOfPhases[Type]\tINTEGER\t\t740\t1\tIfcCountMeasure\t1\nPARAM\t57086fb2-d0cc-4453-b61a-9dfb4f3907dc\tPset_VoltageInstrumentTransformer.PrimaryFrequency[Type]\tNUMBER\t\t740\t1\tIfcFrequencyMeasure\t1\nPARAM\tdb96a8ef-a7fe-4848-a271-17f0578c0014\tPset_VoltageInstrumentTransformer.PrimaryVoltage[Type]\tNUMBER\t\t740\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t1af8b356-b373-47f1-9876-fdb41598a49d\tPset_VoltageInstrumentTransformer.RatedVoltage[Type]\tMULTILINETEXT\t\t740\t1\tPropertyBoundedValue\t1\nPARAM\t49a8fbc7-8577-4d2d-8441-5ab5bdcaf512\tPset_VoltageInstrumentTransformer.SecondaryFrequency[Type]\tNUMBER\t\t740\t1\tIfcFrequencyMeasure\t1\nPARAM\t48a055a0-9c34-4b0f-b035-191dede8ac7b\tPset_VoltageInstrumentTransformer.SecondaryVoltage[Type]\tNUMBER\t\t740\t1\tIfcElectricVoltageMeasure\t1\n#\nGROUP\t741\tPset_WallCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6032db49-091d-49ee-b032-22da60bec2b3\tPset_WallCommon.AcousticRating[Type]\tTEXT\t\t741\t1\tIfcLabel\t1\nPARAM\tc9a5b4cc-df42-4481-8ab6-2989fe26b252\tPset_WallCommon.Combustible[Type]\tYESNO\t\t741\t1\tIfcBoolean\t1\nPARAM\t14517782-2a4e-4598-a733-fef21b9fd503\tPset_WallCommon.Compartmentation[Type]\tYESNO\t\t741\t1\tIfcBoolean\t1\nPARAM\tfc00d7ee-19b1-45b9-b573-556e7fff4bf5\tPset_WallCommon.ExtendToStructure[Type]\tYESNO\t\t741\t1\tIfcBoolean\t1\nPARAM\tf16e10c1-b9c0-4bd5-997c-c28aa3d135f9\tPset_WallCommon.FireRating[Type]\tTEXT\t\t741\t1\tIfcLabel\t1\nPARAM\t57dab8a3-4fcd-44b7-a5a1-e7d1e63daed5\tPset_WallCommon.IsExternal[Type]\tYESNO\t\t741\t1\tIfcBoolean\t1\nPARAM\t7887ce09-6aed-4ed2-92bc-a09c23d75778\tPset_WallCommon.LoadBearing[Type]\tYESNO\t\t741\t1\tIfcBoolean\t1\nPARAM\t0bc15fbf-7e7a-4aa3-ad8b-13b517f5e0c9\tPset_WallCommon.Reference[Type]\tTEXT\t\t741\t1\tIfcIdentifier\t1\nPARAM\t4f74eb9c-bb88-434a-98fd-4f40795fe1c5\tPset_WallCommon.Status[Type]\tTEXT\t\t741\t1\tPEnum_ElementStatus\t1\nPARAM\tc3879554-d4ce-4cc8-b660-1203e2d0e130\tPset_WallCommon.SurfaceSpreadOfFlame[Type]\tTEXT\t\t741\t1\tIfcLabel\t1\nPARAM\t4947e8d3-8e60-45d2-9120-7a7eb1eb358a\tPset_WallCommon.ThermalTransmittance[Type]\tNUMBER\t\t741\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t742\tPset_Warranty\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t98d6eef0-90cf-46ce-bea2-eb82560f79fd\tPset_Warranty.Exclusions[Type]\tTEXT\t\t742\t1\tIfcText\t1\nPARAM\te7b76427-1d8e-4447-bc1f-293ae4fbd6cd\tPset_Warranty.IsExtendedWarranty[Type]\tYESNO\t\t742\t1\tIfcBoolean\t1\nPARAM\te6d99dd2-5c4b-4ccd-b9c0-29db19922c07\tPset_Warranty.PointOfContact[Type]\tTEXT\t\t742\t1\tIfcLabel\t1\nPARAM\t9e8fbba6-4a01-4399-858c-3b31d75cf944\tPset_Warranty.WarrantyContent[Type]\tTEXT\t\t742\t1\tIfcText\t1\nPARAM\t4a6759c8-0120-4bad-9d5f-63be77f4ffd0\tPset_Warranty.WarrantyEndDate[Type]\tTEXT\t\t742\t1\tIfcDate\t1\nPARAM\tc5d31748-91e5-4df1-8af7-535ed7160181\tPset_Warranty.WarrantyIdentifier[Type]\tTEXT\t\t742\t1\tIfcIdentifier\t1\nPARAM\tc11c9cd6-a788-4061-9e1c-889741a3083d\tPset_Warranty.WarrantyPeriod[Type]\tTEXT\t\t742\t1\tIfcDuration\t1\nPARAM\t4beb7383-f94f-426d-be8c-8209a7f0472c\tPset_Warranty.WarrantyStartDate[Type]\tTEXT\t\t742\t1\tIfcDate\t1\n#\nGROUP\t743\tPset_WasteTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta07886fc-f62b-48d4-bf8c-427b899fa65f\tPset_WasteTerminalTypeCommon.Reference[Type]\tTEXT\t\t743\t1\tIfcIdentifier\t1\nPARAM\ta47f3fe9-535e-4d37-bb72-1952f126fda1\tPset_WasteTerminalTypeCommon.Status[Type]\tTEXT\t\t743\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t744\tPset_WasteTerminalTypeFloorTrap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t97f964be-2baf-4de5-8b09-f454b69d0e0d\tPset_WasteTerminalTypeFloorTrap.BodyMaterial[Type]\tMULTILINETEXT\t\t744\t1\tIfcMaterial\t1\nPARAM\t884134fb-edc2-4daa-900e-98ef9818437d\tPset_WasteTerminalTypeFloorTrap.CoverLength[Type]\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td5bb51d9-3968-4b8d-b4cd-d33e9b5daf80\tPset_WasteTerminalTypeFloorTrap.CoverMaterial[Type]\tMULTILINETEXT\t\t744\t1\tIfcMaterialDefinition\t1\nPARAM\t54bf4635-9c0e-4f7e-934d-7f65d7c72452\tPset_WasteTerminalTypeFloorTrap.CoverWidth[Type]\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb7ed7fca-9076-41c8-b817-9afd6fa6c7b6\tPset_WasteTerminalTypeFloorTrap.HasStrainer[Type]\tYESNO\t\t744\t1\tIfcBoolean\t1\nPARAM\t279e6093-fd23-472e-870b-0c2c2f34bd47\tPset_WasteTerminalTypeFloorTrap.InletConnectionSize[Type]\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5e345885-74bb-44a7-813e-e2aab00c495f\tPset_WasteTerminalTypeFloorTrap.InletPatternType[Type]\tTEXT\t\t744\t1\tPEnum_InletPatternType\t1\nPARAM\t86474b86-1bde-4523-b346-b5b1d659f072\tPset_WasteTerminalTypeFloorTrap.IsForSullageWater[Type]\tYESNO\t\t744\t1\tIfcBoolean\t1\nPARAM\t2c830bc4-3898-45b4-af4c-48d61d6fd831\tPset_WasteTerminalTypeFloorTrap.NominalBodyDepth[Type]\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t403108d4-b79a-4e58-88d1-9c707196bc3b\tPset_WasteTerminalTypeFloorTrap.NominalBodyLength[Type]\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6c48e5a3-5167-4b8c-87e5-f27cc7ef1907\tPset_WasteTerminalTypeFloorTrap.NominalBodyWidth[Type]\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf9a92629-de19-4ab0-a4b2-a0c884481bd2\tPset_WasteTerminalTypeFloorTrap.OutletConnectionSize[Type]\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3675c4ad-d082-429d-90cd-c3a91755c28f\tPset_WasteTerminalTypeFloorTrap.SpilloverLevel[Type]\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t427bd507-e04b-46b7-8f53-6bfc424b3ac4\tPset_WasteTerminalTypeFloorTrap.TrapType[Type]\tTEXT\t\t744\t1\tPEnum_TrapType\t1\n#\nGROUP\t745\tPset_WasteTerminalTypeFloorWaste\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t78e3cdb5-0945-4081-ae84-b27c9072634a\tPset_WasteTerminalTypeFloorWaste.BodyMaterial[Type]\tMULTILINETEXT\t\t745\t1\tIfcMaterial\t1\nPARAM\t2e5f97b5-76d1-45ce-b495-f2a677206222\tPset_WasteTerminalTypeFloorWaste.CoverLength[Type]\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t64b0ed68-7713-43ea-a775-3767c8c65147\tPset_WasteTerminalTypeFloorWaste.CoverMaterial[Type]\tMULTILINETEXT\t\t745\t1\tIfcMaterial\t1\nPARAM\t027c61f4-8466-4978-8538-5d3efd23c27a\tPset_WasteTerminalTypeFloorWaste.CoverWidth[Type]\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t10169173-2aa2-40b9-a317-9411ff4bf6aa\tPset_WasteTerminalTypeFloorWaste.NominalBodyDepth[Type]\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf148866f-3763-41c4-b26a-3992758be98c\tPset_WasteTerminalTypeFloorWaste.NominalBodyLength[Type]\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf2649f03-75f8-4036-a7aa-ad750fb56bb0\tPset_WasteTerminalTypeFloorWaste.NominalBodyWidth[Type]\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t79e7e1ae-9ef0-4c9f-9a55-eba936311966\tPset_WasteTerminalTypeFloorWaste.OutletConnectionSize[Type]\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t746\tPset_WasteTerminalTypeGreaseInterceptor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t93266eec-39f9-47f3-82da-e74c79604071\tPset_WasteTerminalTypeGreaseInterceptor.BodyDepth[Type]\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdfb98912-818b-4263-b207-6e0a0692fbce\tPset_WasteTerminalTypeGreaseInterceptor.CoverLength[Type]\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t60b0527c-ba28-4d7d-86e5-b97bb249f999\tPset_WasteTerminalTypeGreaseInterceptor.CoverMaterial[Type]\tMULTILINETEXT\t\t746\t1\tIfcMaterial\t1\nPARAM\t968308c1-a2f9-4c70-a929-14775bd6feef\tPset_WasteTerminalTypeGreaseInterceptor.CoverWidth[Type]\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb4c01133-7c07-4ebb-82ad-4d9c2a3f9d58\tPset_WasteTerminalTypeGreaseInterceptor.InletConnectionSize[Type]\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t686e227e-b7ff-4938-8f6c-39950965162a\tPset_WasteTerminalTypeGreaseInterceptor.NominalBodyLength[Type]\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t07b49116-404d-431e-954e-1cd4129a7983\tPset_WasteTerminalTypeGreaseInterceptor.NominalBodyMaterial[Type]\tMULTILINETEXT\t\t746\t1\tIfcMaterial\t1\nPARAM\t07b8fb22-8150-4807-b5dc-c1609b38759f\tPset_WasteTerminalTypeGreaseInterceptor.NominalBodyWidth[Type]\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta4dc285d-ff2f-47d0-aca2-5219a31076ad\tPset_WasteTerminalTypeGreaseInterceptor.OutletConnectionSize[Type]\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t30d11311-6bf2-40ef-95bf-88fcf75c29c6\tPset_WasteTerminalTypeGreaseInterceptor.StrainerDepth[Type]\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0a62dda9-d51e-418f-8593-b791a301660a\tPset_WasteTerminalTypeGreaseInterceptor.StrainerDiameter[Type]\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfcd807e2-1ae6-425c-8097-7b6af21d4ed8\tPset_WasteTerminalTypeGreaseInterceptor.StrainerMaterial[Type]\tMULTILINETEXT\t\t746\t1\tIfcMaterial\t1\n#\nGROUP\t747\tPset_WasteTerminalTypeGullySump\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0e5613cc-2954-4196-a7d2-0fb4294c2419\tPset_WasteTerminalTypeGullySump.BackInletPatternType[Type]\tTEXT\t\t747\t1\tPEnum_BackInletPatternType\t1\nPARAM\t5a115109-d568-45d3-8561-e562335c3f52\tPset_WasteTerminalTypeGullySump.CoverLength[Type]\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc9474fbe-ff11-44fb-b9d9-9c9f278ab1a7\tPset_WasteTerminalTypeGullySump.CoverMaterial[Type]\tMULTILINETEXT\t\t747\t1\tIfcMaterial\t1\nPARAM\t21c07854-da0a-4933-a5d4-50d08489cbd7\tPset_WasteTerminalTypeGullySump.CoverWidth[Type]\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6d45abed-66d6-4946-967f-024317f87d96\tPset_WasteTerminalTypeGullySump.GullyType[Type]\tTEXT\t\t747\t1\tPEnum_GullyType\t1\nPARAM\tf7eec290-c14c-4012-8490-9cc43d3a3de9\tPset_WasteTerminalTypeGullySump.InletConnectionSize[Type]\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t58366d4e-8da8-485d-be0d-775111923ceb\tPset_WasteTerminalTypeGullySump.NominalSumpDepth[Type]\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t05d5a71a-d7e5-42bb-8c0c-e4bf7ace2fc8\tPset_WasteTerminalTypeGullySump.NominalSumpLength[Type]\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t380d0ce0-2ecc-4f4f-ad49-b15d5d32b688\tPset_WasteTerminalTypeGullySump.NominalSumpWidth[Type]\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5d0174b0-f4ae-4301-b5bc-e26abb14b158\tPset_WasteTerminalTypeGullySump.OutletConnectionSize[Type]\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3365ff3b-57d0-483c-93f6-74d7d4216769\tPset_WasteTerminalTypeGullySump.SumpMaterial[Type]\tMULTILINETEXT\t\t747\t1\tIfcMaterial\t1\nPARAM\te633e28d-70f1-4b50-92d1-09d6d74e434b\tPset_WasteTerminalTypeGullySump.TrapType[Type]\tTEXT\t\t747\t1\tPEnum_TrapType\t1\n#\nGROUP\t748\tPset_WasteTerminalTypeGullyTrap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3ad975c0-5f53-41be-b78b-dc6acd97e388\tPset_WasteTerminalTypeGullyTrap.BackInletPatternType[Type]\tTEXT\t\t748\t1\tPEnum_BackInletPatternType\t1\nPARAM\t422d817f-4c17-4ea8-bd36-4f2716c9eb11\tPset_WasteTerminalTypeGullyTrap.BodyMaterial[Type]\tMULTILINETEXT\t\t748\t1\tIfcMaterial\t1\nPARAM\td3f881e2-3502-4d48-bd3b-faf465c77753\tPset_WasteTerminalTypeGullyTrap.CoverLength[Type]\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2a2d3f89-46f6-4513-bf62-2cb262462226\tPset_WasteTerminalTypeGullyTrap.CoverMaterial[Type]\tMULTILINETEXT\t\t748\t1\tIfcMaterial\t1\nPARAM\t3960fae8-b013-49cf-8f6b-e0ccafe24e10\tPset_WasteTerminalTypeGullyTrap.CoverWidth[Type]\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t65dfe1bc-23e2-4c93-ac71-3c43dd5e3397\tPset_WasteTerminalTypeGullyTrap.GullyType[Type]\tTEXT\t\t748\t1\tPEnum_GullyType\t1\nPARAM\tf9f7595c-bf94-46a5-8a1b-6323ad1fbfb6\tPset_WasteTerminalTypeGullyTrap.HasStrainer[Type]\tYESNO\t\t748\t1\tIfcBoolean\t1\nPARAM\t35352cd9-dd28-4203-9396-e1ffc9cca2d9\tPset_WasteTerminalTypeGullyTrap.InletConnectionSize[Type]\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t340de26a-1bee-4495-9837-f444a623ee5c\tPset_WasteTerminalTypeGullyTrap.NominalBodyDepth[Type]\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te3d8b1e3-de86-4886-9e96-3f4b19133099\tPset_WasteTerminalTypeGullyTrap.NominalBodyLength[Type]\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdf2aa535-9435-4f3e-8ac9-54d918553c96\tPset_WasteTerminalTypeGullyTrap.NominalBodyWidth[Type]\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3d74b553-97a5-4c9e-92d9-ef88c98684df\tPset_WasteTerminalTypeGullyTrap.OutletConnectionSize[Type]\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td7aa0396-215f-4ba3-b93d-a85994dd01ea\tPset_WasteTerminalTypeGullyTrap.TrapType[Type]\tTEXT\t\t748\t1\tPEnum_TrapType\t1\n#\nGROUP\t749\tPset_WasteTerminalTypeOilInterceptor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t355c6874-5820-4acf-8c87-4ee410693faf\tPset_WasteTerminalTypeOilInterceptor.BodyMaterial[Type]\tMULTILINETEXT\t\t749\t1\tIfcMaterial\t1\nPARAM\t1cf197d4-5b45-42e2-8939-c7e11d96280c\tPset_WasteTerminalTypeOilInterceptor.CoverLength[Type]\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ted4cb1d8-4a70-4ee0-ac0a-ae4cee6e99e6\tPset_WasteTerminalTypeOilInterceptor.CoverMaterial[Type]\tMULTILINETEXT\t\t749\t1\tIfcMaterial\t1\nPARAM\tcfec22bf-a657-4265-b2fe-16ea4709c77d\tPset_WasteTerminalTypeOilInterceptor.CoverWidth[Type]\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tef9dc51f-06df-49ed-af4e-143515f9b18d\tPset_WasteTerminalTypeOilInterceptor.InletConnectionSize[Type]\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf334104b-7d54-4d4d-a125-8ee1f5341555\tPset_WasteTerminalTypeOilInterceptor.NominalBodyDepth[Type]\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3dbf09e4-0eec-43b1-aaac-312705af3c0f\tPset_WasteTerminalTypeOilInterceptor.NominalBodyLength[Type]\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4c0f2561-ba18-4fd9-ad6a-867adb3daac2\tPset_WasteTerminalTypeOilInterceptor.NominalBodyWidth[Type]\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t451c7564-97df-40b4-b2d2-bd42aa3f2d03\tPset_WasteTerminalTypeOilInterceptor.OutletConnectionSize[Type]\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t750\tPset_WasteTerminalTypePetrolInterceptor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td03186c9-d3b4-4016-82be-efe177e01074\tPset_WasteTerminalTypePetrolInterceptor.BodyMaterial[Type]\tMULTILINETEXT\t\t750\t1\tIfcMaterial\t1\nPARAM\t13d94af1-a70a-49d3-98e3-8d01f7e7443d\tPset_WasteTerminalTypePetrolInterceptor.CoverLength[Type]\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t64e79ad5-c278-4513-81c4-84822995decd\tPset_WasteTerminalTypePetrolInterceptor.CoverMaterial[Type]\tMULTILINETEXT\t\t750\t1\tIfcMaterial\t1\nPARAM\t07d1a7c6-d3e1-4254-830c-3068c2fb93b1\tPset_WasteTerminalTypePetrolInterceptor.CoverWidth[Type]\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1fd56e01-eecc-4da3-a42a-957cabbb3ec9\tPset_WasteTerminalTypePetrolInterceptor.InletConnectionSize[Type]\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t944be783-a198-4c07-8d3b-7713b33e4cc7\tPset_WasteTerminalTypePetrolInterceptor.NominalBodyDepth[Type]\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4f522f24-7e9c-42b2-bcac-bc25062300a7\tPset_WasteTerminalTypePetrolInterceptor.NominalBodyLength[Type]\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfcb1e1be-c5a4-45be-b1cb-2c5b6bb3fdbb\tPset_WasteTerminalTypePetrolInterceptor.NominalBodyWidth[Type]\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te6612a2f-df56-4e24-8acb-b51700b806ba\tPset_WasteTerminalTypePetrolInterceptor.OutletConnectionSize[Type]\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t93f4ff37-4be9-43a9-b02a-12ada57d5ad8\tPset_WasteTerminalTypePetrolInterceptor.VentilatingPipeSize[Type]\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t751\tPset_WasteTerminalTypeRoofDrain\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t740964ba-b405-44b6-baf4-9a327e3bfe3b\tPset_WasteTerminalTypeRoofDrain.BodyMaterial[Type]\tMULTILINETEXT\t\t751\t1\tIfcMaterial\t1\nPARAM\tb2bd2a45-2e66-46dc-abb2-e12a89843d2c\tPset_WasteTerminalTypeRoofDrain.CoverLength[Type]\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5157e5a1-6847-44c9-87b7-c39b72007361\tPset_WasteTerminalTypeRoofDrain.CoverMaterial[Type]\tMULTILINETEXT\t\t751\t1\tIfcMaterial\t1\nPARAM\tf62c5513-8c23-4488-97b0-b8db8fddde4a\tPset_WasteTerminalTypeRoofDrain.CoverWidth[Type]\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te627563b-1dee-483e-951d-1c229a04ea27\tPset_WasteTerminalTypeRoofDrain.NominalBodyDepth[Type]\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5303690d-5e95-4059-8ad7-597f22f77f78\tPset_WasteTerminalTypeRoofDrain.NominalBodyLength[Type]\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td0fc4d66-ba4d-419f-b509-7b5c11964619\tPset_WasteTerminalTypeRoofDrain.NominalBodyWidth[Type]\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td7e713a5-0e1a-4ceb-a4fe-c15ae1bd71b6\tPset_WasteTerminalTypeRoofDrain.OutletConnectionSize[Type]\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t752\tPset_WasteTerminalTypeWasteDisposalUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teb56bc06-161e-49c6-be29-68c3024fcc9f\tPset_WasteTerminalTypeWasteDisposalUnit.DrainConnectionSize[Type]\tLENGTH\t\t752\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t39345eb9-2715-451a-9277-02397f6af23f\tPset_WasteTerminalTypeWasteDisposalUnit.NominalDepth[Type]\tLENGTH\t\t752\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t902d0984-c9e1-46af-bbf0-d1d3c8d5bf61\tPset_WasteTerminalTypeWasteDisposalUnit.OutletConnectionSize[Type]\tLENGTH\t\t752\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t753\tPset_WasteTerminalTypeWasteTrap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t414433fb-3fca-4e98-89c0-f9e3fb429546\tPset_WasteTerminalTypeWasteTrap.InletConnectionSize[Type]\tLENGTH\t\t753\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te96991a2-c412-4f75-b2a4-dacdf3bf4dff\tPset_WasteTerminalTypeWasteTrap.OutletConnectionSize[Type]\tLENGTH\t\t753\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te13d7130-0a2d-456f-8aea-1a785bef1951\tPset_WasteTerminalTypeWasteTrap.WasteTrapType[Type]\tTEXT\t\t753\t1\tPEnum_TrapType\t1\n#\nGROUP\t754\tPset_WaterStratumCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2d99396e-ea1f-4d19-ba37-32573e1ecbb0\tPset_WaterStratumCommon.AnnualRange[Type]\tLENGTH\t\t754\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9b134777-fb63-4180-a7bd-14d7117779f3\tPset_WaterStratumCommon.AnnualTrend[Type]\tLENGTH\t\t754\t1\tIfcLengthMeasure\t1\nPARAM\t343fb927-bcea-438f-a604-bef78c2faee4\tPset_WaterStratumCommon.IsFreshwater[Type]\tYESNO\t\t754\t1\tIfcLogical\t1\nPARAM\t528a1afa-3d9d-4d60-bfa6-3f9e279b5700\tPset_WaterStratumCommon.SeicheRange[Type]\tLENGTH\t\t754\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te839576e-e7a8-4624-afc8-261c76aef715\tPset_WaterStratumCommon.TidalRange[Type]\tLENGTH\t\t754\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t60f68f0e-14c2-4b62-9733-34cb63378332\tPset_WaterStratumCommon.WaveRange[Type]\tLENGTH\t\t754\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t755\tPset_Width\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc237012b-91c5-415d-82a1-73bfab4ffdf9\tPset_Width.NominalWidth[Type]\tLENGTH\t\t755\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tfdf71c2c-705c-4f1f-bbec-35be75654297\tPset_Width.Side[Type]\tTEXT\t\t755\t1\tPEnum_SideType\t1\nPARAM\td8aafe81-9a35-4df2-ab22-473ea229e15a\tPset_Width.TransitionWidth[Type]\tTEXT\t\t755\t1\tPEnum_TransitionWidthType\t1\n#\nGROUP\t756\tPset_WindowCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf93d5c55-738f-49e0-8756-1a67cef18a90\tPset_WindowCommon.AcousticRating[Type]\tTEXT\t\t756\t1\tIfcLabel\t1\nPARAM\t92799cab-3d18-4856-8c7a-d3f1965cfa9d\tPset_WindowCommon.FireExit[Type]\tYESNO\t\t756\t1\tIfcBoolean\t1\nPARAM\t0f5cb688-4056-4359-8c1b-ec194deede70\tPset_WindowCommon.FireRating[Type]\tTEXT\t\t756\t1\tIfcLabel\t1\nPARAM\t8d7b502d-2952-4664-ba10-fa00514fc7d6\tPset_WindowCommon.GlazingAreaFraction[Type]\tNUMBER\t\t756\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t66593f9f-0336-45c1-be14-0c11e50b3780\tPset_WindowCommon.HasDrive[Type]\tYESNO\t\t756\t1\tIfcBoolean\t1\nPARAM\t0cb5b6f0-0ebf-4a23-b6aa-06d43483156e\tPset_WindowCommon.HasSillExternal[Type]\tYESNO\t\t756\t1\tIfcBoolean\t1\nPARAM\t14ea41d3-fec2-4f5b-83c3-dc05751eb3c4\tPset_WindowCommon.HasSillInternal[Type]\tYESNO\t\t756\t1\tIfcBoolean\t1\nPARAM\t13883ee2-0b55-4fc2-b987-a4c605029f86\tPset_WindowCommon.Infiltration[Type]\tNUMBER\t\t756\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t9b2a70f8-6edf-4111-8136-89ddb4500a38\tPset_WindowCommon.IsExternal[Type]\tYESNO\t\t756\t1\tIfcBoolean\t1\nPARAM\tc4d1355c-6049-45cd-9d4f-1afe347eaf96\tPset_WindowCommon.MechanicalLoadRating[Type]\tTEXT\t\t756\t1\tIfcLabel\t1\nPARAM\t41381f47-4001-4629-9c83-2cfe3bebdd77\tPset_WindowCommon.Reference[Type]\tTEXT\t\t756\t1\tIfcIdentifier\t1\nPARAM\taf01d4a7-90f6-458d-aa52-7cafd2e884c1\tPset_WindowCommon.SecurityRating[Type]\tTEXT\t\t756\t1\tIfcLabel\t1\nPARAM\tdea6f81d-08f9-42f8-ac0a-2070b85aac58\tPset_WindowCommon.SmokeStop[Type]\tYESNO\t\t756\t1\tIfcBoolean\t1\nPARAM\ta1e6e9bc-04a9-46a7-9f7c-02bcd9f4d246\tPset_WindowCommon.Status[Type]\tTEXT\t\t756\t1\tPEnum_ElementStatus\t1\nPARAM\tcc2d0623-8481-4028-b624-15e20ed966a8\tPset_WindowCommon.ThermalTransmittance[Type]\tNUMBER\t\t756\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t9a3ee47c-5356-4e05-b5cd-b0265f6479e2\tPset_WindowCommon.WaterTightnessRating[Type]\tTEXT\t\t756\t1\tIfcLabel\t1\nPARAM\t7bf3108b-d4b2-4960-b212-7520632dbaeb\tPset_WindowCommon.WindLoadRating[Type]\tTEXT\t\t756\t1\tIfcLabel\t1\n#\nGROUP\t757\tPset_WiredCommunicationPortCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4230ced4-4315-4654-95fa-3e8d555d0b31\tPset_WiredCommunicationPortCommon.CommunicationStandard[Type]\tTEXT\t\t757\t1\tPEnum_CommunicationStandard\t1\nPARAM\tf8d0130d-439e-477c-bc71-9fdcf889f486\tPset_WiredCommunicationPortCommon.MaximumTransferRate[Type]\tINTEGER\t\t757\t1\tIfcIntegerCountRateMeasure\t1\n#\nGROUP\t758\tPset_WorkControlCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t99b1fec3-7447-4bdc-9f56-37c8fe12b72b\tPset_WorkControlCommon.WorkDayDuration[Type]\tTEXT\t\t758\t1\tIfcDuration\t1\nPARAM\t7339e042-d2d0-4739-a12c-c84de83b236d\tPset_WorkControlCommon.WorkFinishTime[Type]\tTEXT\t\t758\t1\tIfcTime\t1\nPARAM\t847678b2-0bfd-4b56-9c2b-9ce7b130ad71\tPset_WorkControlCommon.WorkMonthDuration[Type]\tTEXT\t\t758\t1\tIfcDuration\t1\nPARAM\tf51f1696-fb9c-401b-92f8-766cc694d7b2\tPset_WorkControlCommon.WorkStartTime[Type]\tTEXT\t\t758\t1\tIfcTime\t1\nPARAM\t26cc20b3-f6c1-463a-821a-2cf9cb452ad1\tPset_WorkControlCommon.WorkWeekDuration[Type]\tTEXT\t\t758\t1\tIfcDuration\t1\n#\nGROUP\t759\tPset_ZoneCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td6bdee2b-2402-4dbb-8f3d-34136cc3ae28\tPset_ZoneCommon.Category[Type]\tTEXT\t\t759\t1\tIfcLabel\t1\nPARAM\t5d6f0dd4-4e04-45dc-8225-01897cfe475f\tPset_ZoneCommon.GrossAreaPlanned[Type]\tAREA\t\t759\t1\tIfcAreaMeasure\t1\nPARAM\t817bd6d5-fe9d-482a-a893-47a652267a3b\tPset_ZoneCommon.GrossPlannedArea[Type]\tAREA\t\t759\t1\tIfcAreaMeasure\t1\nPARAM\tec5f8776-af0f-42ad-962d-f6acb5cbd365\tPset_ZoneCommon.HandicapAccessible[Type]\tYESNO\t\t759\t1\tIfcBoolean\t1\nPARAM\t4ec7651c-7667-49d1-aae0-c17cf5e50ca0\tPset_ZoneCommon.IsExternal[Type]\tYESNO\t\t759\t1\tIfcBoolean\t1\nPARAM\t3491f68d-50b2-4be0-929e-28153efa024c\tPset_ZoneCommon.MechanicalVentilationRate[Type]\tINTEGER\t\t759\t1\tIfcCountMeasure\t1\nPARAM\tf2b6f085-0601-4790-95b8-b7a114e9a41f\tPset_ZoneCommon.NaturalVentilation[Type]\tYESNO\t\t759\t1\tIfcBoolean\t1\nPARAM\tf710f54e-9023-4c5c-aa3a-ed4dd7981ce0\tPset_ZoneCommon.NaturalVentilationRate[Type]\tINTEGER\t\t759\t1\tIfcCountMeasure\t1\nPARAM\t0ee43842-e825-4765-9488-66f9c0f25cdb\tPset_ZoneCommon.NetAreaPlanned[Type]\tAREA\t\t759\t1\tIfcAreaMeasure\t1\nPARAM\te572a7ef-eeeb-4a20-b1c3-460109f12e0c\tPset_ZoneCommon.NetPlannedArea[Type]\tAREA\t\t759\t1\tIfcAreaMeasure\t1\nPARAM\tc564cba0-d1aa-496e-a1c5-d489b84ab6a2\tPset_ZoneCommon.OccupancyNumber[Type]\tINTEGER\t\t759\t1\tIfcCountMeasure\t1\nPARAM\t91fad258-2b39-4241-bffe-f958533071d2\tPset_ZoneCommon.OccupancyType[Type]\tTEXT\t\t759\t1\tIfcLabel\t1\nPARAM\td63bb657-afa6-4e29-a0e7-e39bbe9591d7\tPset_ZoneCommon.PubliclyAccessible[Type]\tYESNO\t\t759\t1\tIfcBoolean\t1\nPARAM\t9955e9a6-8c85-44fd-bcfc-8cb6ed3999e5\tPset_ZoneCommon.Reference[Type]\tTEXT\t\t759\t1\tIfcIdentifier\t1\n#\nGROUP\t760\tQto_ActuatorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te0f5fb0f-a53d-46ec-b6ca-c752c8cc37de\tQto_ActuatorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t760\t1\tIfcMassMeasure\t1\n#\nGROUP\t761\tQto_AirTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1541f683-ab0e-4a19-9cd6-9b01db577d60\tQto_AirTerminalBaseQuantities.GrossWeight[Type]\tNUMBER\t\t761\t1\tIfcMassMeasure\t1\nPARAM\t37f31b12-c37d-470a-bc14-316b47935da4\tQto_AirTerminalBaseQuantities.Perimeter[Type]\tLENGTH\t\t761\t1\tIfcLengthMeasure\t1\nPARAM\t3de42cf9-b532-4c65-a9d6-3ce13c39dc4a\tQto_AirTerminalBaseQuantities.TotalSurfaceArea[Type]\tAREA\t\t761\t1\tIfcAreaMeasure\t1\n#\nGROUP\t762\tQto_AirTerminalBoxTypeBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t85e9c061-87b2-48bf-8eb5-9198a97ce3fb\tQto_AirTerminalBoxTypeBaseQuantities.GrossWeight[Type]\tNUMBER\t\t762\t1\tIfcMassMeasure\t1\n#\nGROUP\t763\tQto_AirToAirHeatRecoveryBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t36966766-e755-45fa-b896-8874611c7f25\tQto_AirToAirHeatRecoveryBaseQuantities.GrossWeight[Type]\tNUMBER\t\t763\t1\tIfcMassMeasure\t1\n#\nGROUP\t764\tQto_AlarmBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t052a9a3a-de19-41a4-a1e7-351f019d1416\tQto_AlarmBaseQuantities.GrossWeight[Type]\tNUMBER\t\t764\t1\tIfcMassMeasure\t1\n#\nGROUP\t765\tQto_ArealStratumBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t73ec78ae-d9ad-4c8f-8abe-262f2c937c89\tQto_ArealStratumBaseQuantities.Area[Type]\tAREA\t\t765\t1\tIfcAreaMeasure\t1\nPARAM\tc7275230-0a4c-4681-9741-dc902e2a804d\tQto_ArealStratumBaseQuantities.Length[Type]\tLENGTH\t\t765\t1\tIfcLengthMeasure\t1\nPARAM\t73b3cdd1-9206-43d3-9921-b6b4c91ce1d7\tQto_ArealStratumBaseQuantities.PlanLength[Type]\tLENGTH\t\t765\t1\tIfcLengthMeasure\t1\n#\nGROUP\t766\tQto_AudioVisualApplianceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc9b11c46-82ef-4eb2-a440-c03993991391\tQto_AudioVisualApplianceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t766\t1\tIfcMassMeasure\t1\n#\nGROUP\t767\tQto_BeamBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t595de70b-d6cb-479a-b916-f6ab3d7edd16\tQto_BeamBaseQuantities.CrossSectionArea[Type]\tAREA\t\t767\t1\tIfcAreaMeasure\t1\nPARAM\tb2d5a84e-22f1-41e5-ad4d-14fe73a3bf4a\tQto_BeamBaseQuantities.GrossSurfaceArea[Type]\tAREA\t\t767\t1\tIfcAreaMeasure\t1\nPARAM\t13fcc76c-ab8a-46ef-8291-626e5c37241d\tQto_BeamBaseQuantities.GrossVolume[Type]\tVOLUME\t\t767\t1\tIfcVolumeMeasure\t1\nPARAM\t5885021d-3bf1-4fa5-9e8f-33b9a309345a\tQto_BeamBaseQuantities.GrossWeight[Type]\tNUMBER\t\t767\t1\tIfcMassMeasure\t1\nPARAM\t21257d35-46b2-4379-a21e-d445025e5ef2\tQto_BeamBaseQuantities.Height[Type]\tLENGTH\t\t767\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t67d2da57-3536-4ef2-ba5a-d33179c4dc84\tQto_BeamBaseQuantities.Length[Type]\tLENGTH\t\t767\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3f025fa2-84c1-458b-8614-8dd17b3217a1\tQto_BeamBaseQuantities.NetSurfaceArea[Type]\tAREA\t\t767\t1\tIfcAreaMeasure\t1\nPARAM\taaab2082-1bff-42ae-94ec-f228e2a02127\tQto_BeamBaseQuantities.NetVolume[Type]\tVOLUME\t\t767\t1\tIfcVolumeMeasure\t1\nPARAM\t8d81f946-801d-4a1c-a6a9-7b0982ff60c1\tQto_BeamBaseQuantities.NetWeight[Type]\tNUMBER\t\t767\t1\tIfcMassMeasure\t1\nPARAM\t379b714d-8d7d-4547-8c2d-bb5506812e67\tQto_BeamBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t767\t1\tIfcAreaMeasure\t1\nPARAM\t847fa65b-1a6c-4f59-bc12-580ee1caf9ae\tQto_BeamBaseQuantities.Width[Type]\tLENGTH\t\t767\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t768\tQto_BodyGeometryValidation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t17ac9f30-e27d-4c3e-a28e-10e87f4e7854\tQto_BodyGeometryValidation.GrossSurfaceArea[Type]\tAREA\t\t768\t1\tIfcAreaMeasure\t1\nPARAM\t6dcb7601-8da2-41e5-81eb-006eaa9d2e67\tQto_BodyGeometryValidation.GrossVolume[Type]\tVOLUME\t\t768\t1\tIfcVolumeMeasure\t1\nPARAM\t04ff16fa-5bf7-4723-b0e3-1decb2dc47dc\tQto_BodyGeometryValidation.NetSurfaceArea[Type]\tAREA\t\t768\t1\tIfcAreaMeasure\t1\nPARAM\t779da3c1-bfb5-4234-9478-e1a77b6595b0\tQto_BodyGeometryValidation.NetVolume[Type]\tVOLUME\t\t768\t1\tIfcVolumeMeasure\t1\nPARAM\tacffeeba-af09-4d44-b837-2a82a0f5b269\tQto_BodyGeometryValidation.SurfaceGenusAfterFeatures[Type]\tINTEGER\t\t768\t1\tIfcCountMeasure\t1\nPARAM\t1b5afb08-1260-4804-a826-f674b98e37a9\tQto_BodyGeometryValidation.SurfaceGenusBeforeFeatures[Type]\tINTEGER\t\t768\t1\tIfcCountMeasure\t1\n#\nGROUP\t769\tQto_BoilerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6a255c17-bf2d-40e8-89e2-e807b1d0a762\tQto_BoilerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t769\t1\tIfcMassMeasure\t1\nPARAM\t0d136a80-1aa8-49e6-9d49-58b11e620fa2\tQto_BoilerBaseQuantities.NetWeight[Type]\tNUMBER\t\t769\t1\tIfcMassMeasure\t1\nPARAM\t70fc1c16-328b-44fe-a3c9-3ddea7116d57\tQto_BoilerBaseQuantities.TotalSurfaceArea[Type]\tAREA\t\t769\t1\tIfcAreaMeasure\t1\n#\nGROUP\t770\tQto_BuildingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t26040140-b537-45c2-b441-233178c639f7\tQto_BuildingBaseQuantities.EavesHeight[Type]\tLENGTH\t\t770\t1\tIfcLengthMeasure\t1\nPARAM\tc6aeecfc-f33b-4681-9733-4b0d5f257f38\tQto_BuildingBaseQuantities.FootprintArea[Type]\tAREA\t\t770\t1\tIfcAreaMeasure\t1\nPARAM\tfcb4262c-9424-46ca-baa6-d92f08a7e5fb\tQto_BuildingBaseQuantities.FootPrintArea[Type]\tAREA\t\t770\t1\tIfcAreaMeasure\t1\nPARAM\t2de00587-0057-4bf6-9057-16054741ce2d\tQto_BuildingBaseQuantities.GrossFloorArea[Type]\tAREA\t\t770\t1\tIfcAreaMeasure\t1\nPARAM\t487c6c75-6298-4cca-99bb-8019e3302ec7\tQto_BuildingBaseQuantities.GrossVolume[Type]\tVOLUME\t\t770\t1\tIfcVolumeMeasure\t1\nPARAM\t2e56bc8b-56f8-4293-a0e4-aa5778ea4421\tQto_BuildingBaseQuantities.Height[Type]\tLENGTH\t\t770\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb754333f-1cc7-4499-b150-52f474f0da92\tQto_BuildingBaseQuantities.NetFloorArea[Type]\tAREA\t\t770\t1\tIfcAreaMeasure\t1\nPARAM\t6322d776-637e-47a8-9e90-8920d8687b69\tQto_BuildingBaseQuantities.NetVolume[Type]\tVOLUME\t\t770\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t771\tQto_BuildingElementProxyQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7ef9b8da-44fd-462a-8fb2-e1c7edab441c\tQto_BuildingElementProxyQuantities.NetSurfaceArea[Type]\tAREA\t\t771\t1\tIfcAreaMeasure\t1\nPARAM\t42e3720b-ed21-4b81-8dab-da55ea64f1f6\tQto_BuildingElementProxyQuantities.NetVolume[Type]\tVOLUME\t\t771\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t772\tQto_BuildingStoreyBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t30c2ab71-cd0b-41de-b651-83b212b579a6\tQto_BuildingStoreyBaseQuantities.GrossFloorArea[Type]\tAREA\t\t772\t1\tIfcAreaMeasure\t1\nPARAM\t8374032c-c9c5-4a02-8d53-887b25dff82a\tQto_BuildingStoreyBaseQuantities.GrossHeight[Type]\tLENGTH\t\t772\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8f8681bc-a75a-4af5-a784-fe77657b094e\tQto_BuildingStoreyBaseQuantities.GrossPerimeter[Type]\tLENGTH\t\t772\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t29c5440b-0576-401c-96fb-e7065664e39f\tQto_BuildingStoreyBaseQuantities.GrossVolume[Type]\tVOLUME\t\t772\t1\tIfcVolumeMeasure\t1\nPARAM\t4e474f53-db7e-49bd-bd61-e77bdd87fad5\tQto_BuildingStoreyBaseQuantities.NetFloorArea[Type]\tAREA\t\t772\t1\tIfcAreaMeasure\t1\nPARAM\t7ff9fd57-9210-420b-a288-3acd118650d8\tQto_BuildingStoreyBaseQuantities.NetHeight[Type]\tLENGTH\t\t772\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t18b145f1-d057-47c9-acc5-8ea91868be1b\tQto_BuildingStoreyBaseQuantities.NetHeigtht[Type]\tLENGTH\t\t772\t1\tIfcLengthMeasure\t1\nPARAM\t3d8c25d1-b1ef-4a70-a5fb-02c77882afae\tQto_BuildingStoreyBaseQuantities.NetVolume[Type]\tVOLUME\t\t772\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t773\tQto_BurnerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e19e202-74f3-4929-921e-6546603741a3\tQto_BurnerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t773\t1\tIfcMassMeasure\t1\n#\nGROUP\t774\tQto_CableCarrierFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta4a657cd-5e38-46d6-9e66-03ea72688beb\tQto_CableCarrierFittingBaseQuantities.GrossWeight[Type]\tNUMBER\t\t774\t1\tIfcMassMeasure\t1\n#\nGROUP\t775\tQto_CableCarrierSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t351bc5ed-5c98-4029-81a5-9230f1e22263\tQto_CableCarrierSegmentBaseQuantities.CrossSectionArea[Type]\tAREA\t\t775\t1\tIfcAreaMeasure\t1\nPARAM\t0898c6ca-d2ea-46d2-94e9-9d951f3fbecf\tQto_CableCarrierSegmentBaseQuantities.GrossWeight[Type]\tNUMBER\t\t775\t1\tIfcMassMeasure\t1\nPARAM\t8d255d6e-27e0-4ea4-872e-be6937324e67\tQto_CableCarrierSegmentBaseQuantities.Length[Type]\tLENGTH\t\t775\t1\tIfcLengthMeasure\t1\nPARAM\t46d5805d-9120-433c-8acf-f53c6e2d1f99\tQto_CableCarrierSegmentBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t775\t1\tIfcAreaMeasure\t1\n#\nGROUP\t776\tQto_CableFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t32ae27f9-d705-4007-b678-505a2877a81e\tQto_CableFittingBaseQuantities.GrossWeight[Type]\tNUMBER\t\t776\t1\tIfcMassMeasure\t1\n#\nGROUP\t777\tQto_CableSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7ac79e0c-715c-4177-9d8b-61dda40a44f8\tQto_CableSegmentBaseQuantities.CrossSectionArea[Type]\tAREA\t\t777\t1\tIfcAreaMeasure\t1\nPARAM\ta7e45a96-8b00-4a8c-b6bc-f5055773894c\tQto_CableSegmentBaseQuantities.GrossWeight[Type]\tNUMBER\t\t777\t1\tIfcMassMeasure\t1\nPARAM\t0346c05f-980e-4ea5-8979-ef15fb8779a9\tQto_CableSegmentBaseQuantities.Length[Type]\tLENGTH\t\t777\t1\tIfcLengthMeasure\t1\nPARAM\t49aaae5d-330d-4154-ba61-df5374ef8fc5\tQto_CableSegmentBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t777\t1\tIfcAreaMeasure\t1\n#\nGROUP\t778\tQto_ChillerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbbf2de88-f490-432d-84c6-b65ab801c60d\tQto_ChillerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t778\t1\tIfcMassMeasure\t1\n#\nGROUP\t779\tQto_ChimneyBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4b18ddd1-d072-4b49-843a-4fa9d747a519\tQto_ChimneyBaseQuantities.Length[Type]\tLENGTH\t\t779\t1\tIfcLengthMeasure\t1\n#\nGROUP\t780\tQto_CoilBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0c41e537-fec1-4471-879f-dc5429bd920e\tQto_CoilBaseQuantities.GrossWeight[Type]\tNUMBER\t\t780\t1\tIfcMassMeasure\t1\n#\nGROUP\t781\tQto_ColumnBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t77f2fb92-cd25-484a-a843-0a815ec5d41b\tQto_ColumnBaseQuantities.CrossSectionArea[Type]\tAREA\t\t781\t1\tIfcAreaMeasure\t1\nPARAM\t28ad6865-8835-4458-bb29-55bfd67768f5\tQto_ColumnBaseQuantities.GrossSurfaceArea[Type]\tAREA\t\t781\t1\tIfcAreaMeasure\t1\nPARAM\t2000d329-960f-4c65-9b9a-9cb412b73c27\tQto_ColumnBaseQuantities.GrossVolume[Type]\tVOLUME\t\t781\t1\tIfcVolumeMeasure\t1\nPARAM\t9171d0f1-f3ce-45ee-82ab-f19be545f1ed\tQto_ColumnBaseQuantities.GrossWeight[Type]\tNUMBER\t\t781\t1\tIfcMassMeasure\t1\nPARAM\t1146fad2-0da5-4c24-a123-693924328e74\tQto_ColumnBaseQuantities.Height[Type]\tLENGTH\t\t781\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3387907c-77ad-4c8d-aea4-1174baa2c251\tQto_ColumnBaseQuantities.Length[Type]\tLENGTH\t\t781\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t527f0f1b-a218-4fd3-8cb3-fc3b795c599a\tQto_ColumnBaseQuantities.NetSurfaceArea[Type]\tAREA\t\t781\t1\tIfcAreaMeasure\t1\nPARAM\t9be931b8-812c-4c68-84d1-b1ec3081b8ab\tQto_ColumnBaseQuantities.NetVolume[Type]\tVOLUME\t\t781\t1\tIfcVolumeMeasure\t1\nPARAM\t7140bd5f-9661-4c1d-872d-6e3a64d95291\tQto_ColumnBaseQuantities.NetWeight[Type]\tNUMBER\t\t781\t1\tIfcMassMeasure\t1\nPARAM\tb08a23e1-dc0f-447b-9986-871dda670202\tQto_ColumnBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t781\t1\tIfcAreaMeasure\t1\nPARAM\t76ab9b70-0a0f-4f63-aee0-7bc04d8ff6a5\tQto_ColumnBaseQuantities.Width[Type]\tLENGTH\t\t781\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t782\tQto_CommunicationsApplianceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t10658301-38fc-4927-a18e-65d39dcc9216\tQto_CommunicationsApplianceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t782\t1\tIfcMassMeasure\t1\n#\nGROUP\t783\tQto_CompressorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td422b065-2221-4ed0-8620-2f47b480a30f\tQto_CompressorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t783\t1\tIfcMassMeasure\t1\n#\nGROUP\t784\tQto_CondenserBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t63390dd5-6817-4b5f-b029-708e897b78c1\tQto_CondenserBaseQuantities.GrossWeight[Type]\tNUMBER\t\t784\t1\tIfcMassMeasure\t1\n#\nGROUP\t785\tQto_ConduitSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb807037e-a03a-4109-911b-0f406beb29a1\tQto_ConduitSegmentBaseQuantities.InnerDiameter[Type]\tLENGTH\t\t785\t1\tIfcLengthMeasure\t1\nPARAM\t06549c02-a33a-49a2-a2d6-329f956ffd30\tQto_ConduitSegmentBaseQuantities.OuterDiameter[Type]\tLENGTH\t\t785\t1\tIfcLengthMeasure\t1\n#\nGROUP\t786\tQto_ConstructionEquipmentResourceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfd8b8adc-b072-4f22-9923-09147ff5039d\tQto_ConstructionEquipmentResourceBaseQuantities.OperatingTime[Type]\tNUMBER\t\t786\t1\tIfcTimeMeasure\t1\nPARAM\te7529dbf-30ed-48a7-a88c-07f08e60d039\tQto_ConstructionEquipmentResourceBaseQuantities.UsageTime[Type]\tNUMBER\t\t786\t1\tIfcTimeMeasure\t1\n#\nGROUP\t787\tQto_ConstructionMaterialResourceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0e296676-c3c5-4cf3-9c9a-7cdeaaf45dc3\tQto_ConstructionMaterialResourceBaseQuantities.GrossVolume[Type]\tVOLUME\t\t787\t1\tIfcVolumeMeasure\t1\nPARAM\ta2e35cf1-8756-49bd-bd8e-1a3f862bf369\tQto_ConstructionMaterialResourceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t787\t1\tIfcMassMeasure\t1\nPARAM\tc5c4795a-1e1d-4705-af25-310b8d695c6c\tQto_ConstructionMaterialResourceBaseQuantities.NetVolume[Type]\tVOLUME\t\t787\t1\tIfcVolumeMeasure\t1\nPARAM\t8293e450-8adf-4f4a-a968-fcfe4105773b\tQto_ConstructionMaterialResourceBaseQuantities.NetWeight[Type]\tNUMBER\t\t787\t1\tIfcMassMeasure\t1\n#\nGROUP\t788\tQto_ControllerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t866e4cb4-bf14-4c3e-9d1c-a163fe1d4a0c\tQto_ControllerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t788\t1\tIfcMassMeasure\t1\n#\nGROUP\t789\tQto_CooledBeamBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t176eb97d-ccf6-46b1-9675-8df511d0e3fc\tQto_CooledBeamBaseQuantities.GrossWeight[Type]\tNUMBER\t\t789\t1\tIfcMassMeasure\t1\n#\nGROUP\t790\tQto_CoolingTowerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0600155b-99bf-4a91-ba35-18eef52fdee2\tQto_CoolingTowerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t790\t1\tIfcMassMeasure\t1\n#\nGROUP\t791\tQto_CourseBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te395f3c0-bb4b-41c4-9905-ce2ffb7a9321\tQto_CourseBaseQuantities.GrossVolume[Type]\tVOLUME\t\t791\t1\tIfcVolumeMeasure\t1\nPARAM\t0469d98e-bb1d-4855-83ce-6e197dfccc2a\tQto_CourseBaseQuantities.Length[Type]\tLENGTH\t\t791\t1\tIfcLengthMeasure\t1\nPARAM\t356b4983-3070-4a8c-b370-73690ef75f85\tQto_CourseBaseQuantities.Thickness[Type]\tLENGTH\t\t791\t1\tIfcLengthMeasure\t1\nPARAM\tb724b383-7c2e-4652-b25b-a9697300299d\tQto_CourseBaseQuantities.Volume[Type]\tVOLUME\t\t791\t1\tIfcVolumeMeasure\t1\nPARAM\tf4ab649d-a22e-461a-a054-f74db9c6650c\tQto_CourseBaseQuantities.Weight[Type]\tNUMBER\t\t791\t1\tIfcMassMeasure\t1\nPARAM\t7c0fbc7c-3a08-4f42-bfdf-31a5279d1564\tQto_CourseBaseQuantities.Width[Type]\tLENGTH\t\t791\t1\tIfcLengthMeasure\t1\n#\nGROUP\t792\tQto_CoveringBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t740d7401-e075-46f4-b67b-d2a35462eef3\tQto_CoveringBaseQuantities.GrossArea[Type]\tAREA\t\t792\t1\tIfcAreaMeasure\t1\nPARAM\tc0b9fec1-4851-45b1-a5d8-1d01feb4be51\tQto_CoveringBaseQuantities.GrossCeilingArea[Type]\tAREA\t\t792\t1\tIfcAreaMeasure\t1\nPARAM\t6fcad777-f8d8-4393-a132-a2cbd1cdd52b\tQto_CoveringBaseQuantities.NetArea[Type]\tAREA\t\t792\t1\tIfcAreaMeasure\t1\nPARAM\t41b41198-9e99-44b4-9c5c-458173348869\tQto_CoveringBaseQuantities.Width[Type]\tLENGTH\t\t792\t1\tIfcLengthMeasure\t1\n#\nGROUP\t793\tQto_CurtainWallQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t956c0770-acc9-43bf-9826-148d99ac537b\tQto_CurtainWallQuantities.GrossSideArea[Type]\tAREA\t\t793\t1\tIfcAreaMeasure\t1\nPARAM\t7ee57f54-8f4d-49b3-ab6a-d3c4ae411092\tQto_CurtainWallQuantities.Height[Type]\tLENGTH\t\t793\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t35b39d7a-7cdd-494a-a1cf-94cc93f709cc\tQto_CurtainWallQuantities.Length[Type]\tLENGTH\t\t793\t1\tIfcLengthMeasure\t1\nPARAM\ta1579472-ea90-4cf5-a9a1-dea0c1c9cfbc\tQto_CurtainWallQuantities.NetSideArea[Type]\tAREA\t\t793\t1\tIfcAreaMeasure\t1\nPARAM\t4e34ba08-cdf9-41dd-be60-63ac4411d4a7\tQto_CurtainWallQuantities.Width[Type]\tLENGTH\t\t793\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t794\tQto_DamperBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0df0734b-e996-4685-9b66-7b0f67c5b81a\tQto_DamperBaseQuantities.GrossWeight[Type]\tNUMBER\t\t794\t1\tIfcMassMeasure\t1\n#\nGROUP\t795\tQto_DistributionBoardBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc8ad3994-a21c-4dee-9753-187c9b25403b\tQto_DistributionBoardBaseQuantities.GrossWeight[Type]\tNUMBER\t\t795\t1\tIfcMassMeasure\t1\nPARAM\t13224b14-7369-4b3c-9b39-758276bdd992\tQto_DistributionBoardBaseQuantities.NumberOfCircuits[Type]\tINTEGER\t\t795\t1\tIfcCountMeasure\t1\n#\nGROUP\t796\tQto_DistributionChamberElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc50c6c90-e90f-4bd7-b69e-d9f405017faf\tQto_DistributionChamberElementBaseQuantities.Depth[Type]\tLENGTH\t\t796\t1\tIfcLengthMeasure\t1\nPARAM\t3c00c51d-fe3b-42c7-82a5-c814e3af1fb7\tQto_DistributionChamberElementBaseQuantities.GrossSurfaceArea[Type]\tAREA\t\t796\t1\tIfcAreaMeasure\t1\nPARAM\tf94f0a6a-f94b-45d3-9726-184947618328\tQto_DistributionChamberElementBaseQuantities.GrossVolume[Type]\tVOLUME\t\t796\t1\tIfcVolumeMeasure\t1\nPARAM\t5441339e-4fce-480c-bb05-a8aca21f3ba5\tQto_DistributionChamberElementBaseQuantities.NetSurfaceArea[Type]\tAREA\t\t796\t1\tIfcAreaMeasure\t1\nPARAM\t2bcf6fae-a7b7-45a9-9180-db1390ec8b94\tQto_DistributionChamberElementBaseQuantities.NetVolume[Type]\tVOLUME\t\t796\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t797\tQto_DoorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taf0e927d-11ab-41d6-a85a-98a013fe9a01\tQto_DoorBaseQuantities.Area[Type]\tAREA\t\t797\t1\tIfcAreaMeasure\t1\nPARAM\t9e5bf6ea-1aeb-4900-a8b5-229c03b5db95\tQto_DoorBaseQuantities.Height[Type]\tLENGTH\t\t797\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t422f0c46-7f39-48f3-a764-90778f07498d\tQto_DoorBaseQuantities.Perimeter[Type]\tLENGTH\t\t797\t1\tIfcLengthMeasure\t1\nPARAM\t87286b0d-258d-4b82-9b5a-8f98fea4e24b\tQto_DoorBaseQuantities.Width[Type]\tLENGTH\t\t797\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t798\tQto_DuctFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t00ee2dc7-3902-49cc-81d5-e169f48c30b5\tQto_DuctFittingBaseQuantities.GrossCrossSectionArea[Type]\tAREA\t\t798\t1\tIfcAreaMeasure\t1\nPARAM\ta0aee241-300b-4514-bf02-634cff3ef12f\tQto_DuctFittingBaseQuantities.GrossWeight[Type]\tNUMBER\t\t798\t1\tIfcMassMeasure\t1\nPARAM\tc7ebd4f0-ce82-41cf-a811-e25835141910\tQto_DuctFittingBaseQuantities.Length[Type]\tLENGTH\t\t798\t1\tIfcLengthMeasure\t1\nPARAM\tdd84260f-ace5-49b0-a8da-6c0aedb93c35\tQto_DuctFittingBaseQuantities.NetCrossSectionArea[Type]\tAREA\t\t798\t1\tIfcAreaMeasure\t1\nPARAM\t6f0ce78f-7679-4fbb-966c-31e144e67f0a\tQto_DuctFittingBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t798\t1\tIfcAreaMeasure\t1\n#\nGROUP\t799\tQto_DuctSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t87e6a1ec-8638-4d6e-8057-0dc7e79463d4\tQto_DuctSegmentBaseQuantities.GrossCrossSectionArea[Type]\tAREA\t\t799\t1\tIfcAreaMeasure\t1\nPARAM\te8d0d8cc-686d-492b-aff6-a0df0935549e\tQto_DuctSegmentBaseQuantities.GrossWeight[Type]\tNUMBER\t\t799\t1\tIfcMassMeasure\t1\nPARAM\t942783bf-f9bb-4f0c-8d4e-97f441965c8c\tQto_DuctSegmentBaseQuantities.Length[Type]\tLENGTH\t\t799\t1\tIfcLengthMeasure\t1\nPARAM\te3566aa6-05f2-4022-8c84-5dfffbb01607\tQto_DuctSegmentBaseQuantities.NetCrossSectionArea[Type]\tAREA\t\t799\t1\tIfcAreaMeasure\t1\nPARAM\t3c2a1a10-fdfc-430b-8488-b5b2a8bb4a51\tQto_DuctSegmentBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t799\t1\tIfcAreaMeasure\t1\n#\nGROUP\t800\tQto_DuctSilencerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td538a695-8f19-4327-986b-d95dcec2d8ce\tQto_DuctSilencerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t800\t1\tIfcMassMeasure\t1\n#\nGROUP\t801\tQto_EarthworksCutBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7dbd8db-baf9-46fa-a306-3ee851e87ddc\tQto_EarthworksCutBaseQuantities.Depth[Type]\tLENGTH\t\t801\t1\tIfcLengthMeasure\t1\nPARAM\t9338cf00-d152-4afc-bdee-5dd59d798b8e\tQto_EarthworksCutBaseQuantities.Length[Type]\tLENGTH\t\t801\t1\tIfcLengthMeasure\t1\nPARAM\ta396ffbd-47aa-445b-b48f-372ac5379ea3\tQto_EarthworksCutBaseQuantities.LooseVolume[Type]\tVOLUME\t\t801\t1\tIfcVolumeMeasure\t1\nPARAM\tcd57c2da-ff49-4eb8-88db-97d73d014945\tQto_EarthworksCutBaseQuantities.UndisturbedVolume[Type]\tVOLUME\t\t801\t1\tIfcVolumeMeasure\t1\nPARAM\ta71ea186-f257-4fec-b926-f3da66aa3280\tQto_EarthworksCutBaseQuantities.Weight[Type]\tNUMBER\t\t801\t1\tIfcMassMeasure\t1\nPARAM\t7f59411e-4463-4f5d-8551-f70d89bd1613\tQto_EarthworksCutBaseQuantities.Width[Type]\tLENGTH\t\t801\t1\tIfcLengthMeasure\t1\n#\nGROUP\t802\tQto_EarthworksFillBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t161f4d0a-abc9-4ab2-99a2-34a56f1fc9e7\tQto_EarthworksFillBaseQuantities.CompactedVolume[Type]\tVOLUME\t\t802\t1\tIfcVolumeMeasure\t1\nPARAM\t9211daa0-3884-489d-a680-8efa893cb552\tQto_EarthworksFillBaseQuantities.Depth[Type]\tLENGTH\t\t802\t1\tIfcLengthMeasure\t1\nPARAM\td9b26562-0c91-4506-a393-b14dca38ec20\tQto_EarthworksFillBaseQuantities.Length[Type]\tLENGTH\t\t802\t1\tIfcLengthMeasure\t1\nPARAM\taad71111-db72-48c1-8800-1835e71679bc\tQto_EarthworksFillBaseQuantities.LooseVolume[Type]\tVOLUME\t\t802\t1\tIfcVolumeMeasure\t1\nPARAM\t8ce19645-a8a0-46c6-9072-9255dc21b418\tQto_EarthworksFillBaseQuantities.Width[Type]\tLENGTH\t\t802\t1\tIfcLengthMeasure\t1\n#\nGROUP\t803\tQto_ElectricApplianceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t78d16b6e-d314-4ab3-b164-c8aa5c1a73dd\tQto_ElectricApplianceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t803\t1\tIfcMassMeasure\t1\n#\nGROUP\t804\tQto_ElectricDistributionBoardBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbba73cb3-4b8d-47cf-9df3-8bf505319405\tQto_ElectricDistributionBoardBaseQuantities.GrossWeight[Type]\tNUMBER\t\t804\t1\tIfcMassMeasure\t1\nPARAM\ta93f5f96-c6e8-4b44-adcc-8e0025a1a14b\tQto_ElectricDistributionBoardBaseQuantities.NumberOfCircuits[Type]\tINTEGER\t\t804\t1\tIfcCountMeasure\t1\n#\nGROUP\t805\tQto_ElectricFlowStorageDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0f576f2b-91de-4ab9-9c53-a153f7781715\tQto_ElectricFlowStorageDeviceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t805\t1\tIfcMassMeasure\t1\n#\nGROUP\t806\tQto_ElectricGeneratorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t183d5a65-e77e-4803-9ff4-a9f73d201852\tQto_ElectricGeneratorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t806\t1\tIfcMassMeasure\t1\n#\nGROUP\t807\tQto_ElectricMotorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t139a7827-2551-4b75-a13c-3471855faa95\tQto_ElectricMotorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t807\t1\tIfcMassMeasure\t1\n#\nGROUP\t808\tQto_ElectricTimeControlBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t049df424-9d19-4bc5-8ef0-fca18cf04e61\tQto_ElectricTimeControlBaseQuantities.GrossWeight[Type]\tNUMBER\t\t808\t1\tIfcMassMeasure\t1\n#\nGROUP\t809\tQto_EvaporativeCoolerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t078724f1-74dc-474a-82db-1988c623c27e\tQto_EvaporativeCoolerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t809\t1\tIfcMassMeasure\t1\n#\nGROUP\t810\tQto_EvaporatorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf9927ccd-f3b3-4686-8bd9-b5b2df08ef35\tQto_EvaporatorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t810\t1\tIfcMassMeasure\t1\n#\nGROUP\t811\tQto_FacilityPartBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t829068a0-8a98-4de1-94da-a5ec483db208\tQto_FacilityPartBaseQuantities.Area[Type]\tAREA\t\t811\t1\tIfcAreaMeasure\t1\nPARAM\tebbae741-04a7-4609-b89a-a93af5d42578\tQto_FacilityPartBaseQuantities.Height[Type]\tLENGTH\t\t811\t1\tIfcLengthMeasure\t1\nPARAM\tc04ed02f-b72b-4e70-922f-c8a6780f83a1\tQto_FacilityPartBaseQuantities.Length[Type]\tLENGTH\t\t811\t1\tIfcLengthMeasure\t1\nPARAM\t18e6f59f-7cbc-4a59-990a-e8138107d966\tQto_FacilityPartBaseQuantities.Volume[Type]\tVOLUME\t\t811\t1\tIfcVolumeMeasure\t1\nPARAM\t74841f6c-5d1d-4d91-9fed-5cedb4b8a701\tQto_FacilityPartBaseQuantities.Width[Type]\tLENGTH\t\t811\t1\tIfcLengthMeasure\t1\n#\nGROUP\t812\tQto_FanBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t42eeae10-d49d-4f03-a90c-5454db1d1a58\tQto_FanBaseQuantities.GrossWeight[Type]\tNUMBER\t\t812\t1\tIfcMassMeasure\t1\n#\nGROUP\t813\tQto_FilterBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdb56be5a-3105-4de1-b25c-9cca326abc43\tQto_FilterBaseQuantities.GrossWeight[Type]\tNUMBER\t\t813\t1\tIfcMassMeasure\t1\n#\nGROUP\t814\tQto_FireSuppressionTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf74d7f05-98ca-4aff-a038-f251a52dfae0\tQto_FireSuppressionTerminalBaseQuantities.GrossWeight[Type]\tNUMBER\t\t814\t1\tIfcMassMeasure\t1\n#\nGROUP\t815\tQto_FlowInstrumentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t575c9ad4-5ecc-4922-82f7-e5758fc77b34\tQto_FlowInstrumentBaseQuantities.GrossWeight[Type]\tNUMBER\t\t815\t1\tIfcMassMeasure\t1\n#\nGROUP\t816\tQto_FlowMeterBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te7e9ba9f-413e-4f9a-92f3-c086ac1da669\tQto_FlowMeterBaseQuantities.GrossWeight[Type]\tNUMBER\t\t816\t1\tIfcMassMeasure\t1\n#\nGROUP\t817\tQto_FootingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf186262f-8079-42c3-990e-54efeacfdc50\tQto_FootingBaseQuantities.CrossSectionArea[Type]\tAREA\t\t817\t1\tIfcAreaMeasure\t1\nPARAM\t08963d33-4815-4f54-80c3-47ee71203fae\tQto_FootingBaseQuantities.GrossSurfaceArea[Type]\tAREA\t\t817\t1\tIfcAreaMeasure\t1\nPARAM\tae77ed55-5acb-488c-be7a-9af780dfa868\tQto_FootingBaseQuantities.GrossVolume[Type]\tVOLUME\t\t817\t1\tIfcVolumeMeasure\t1\nPARAM\t8df451e6-de31-401f-bf4b-32801d6378db\tQto_FootingBaseQuantities.GrossWeight[Type]\tNUMBER\t\t817\t1\tIfcMassMeasure\t1\nPARAM\t49009742-9a07-41a5-bd31-a8b128cf050b\tQto_FootingBaseQuantities.Height[Type]\tLENGTH\t\t817\t1\tIfcLengthMeasure\t1\nPARAM\t73a68fbc-a85d-42b8-913e-69be37ad65f3\tQto_FootingBaseQuantities.Length[Type]\tLENGTH\t\t817\t1\tIfcLengthMeasure\t1\nPARAM\t4f736201-578a-4a71-ae6b-2882189b4699\tQto_FootingBaseQuantities.NetVolume[Type]\tVOLUME\t\t817\t1\tIfcVolumeMeasure\t1\nPARAM\t5b12ce44-19df-4432-a873-213299b805e7\tQto_FootingBaseQuantities.NetWeight[Type]\tNUMBER\t\t817\t1\tIfcMassMeasure\t1\nPARAM\t5cc8bcfd-e2c4-4111-8ea8-c521537f5866\tQto_FootingBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t817\t1\tIfcAreaMeasure\t1\nPARAM\t4da4b490-0532-459f-b386-5398384d098e\tQto_FootingBaseQuantities.Width[Type]\tLENGTH\t\t817\t1\tIfcLengthMeasure\t1\n#\nGROUP\t818\tQto_HeatExchangerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te5099f45-d827-4246-bba7-28dc5585fa5c\tQto_HeatExchangerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t818\t1\tIfcMassMeasure\t1\n#\nGROUP\t819\tQto_HumidifierBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc45b6178-d7c0-4216-8353-614a8fe5a979\tQto_HumidifierBaseQuantities.GrossWeight[Type]\tNUMBER\t\t819\t1\tIfcMassMeasure\t1\n#\nGROUP\t820\tQto_ImpactProtectionDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8d0b21fb-e6a8-48a5-9cbf-9a974f9aca02\tQto_ImpactProtectionDeviceBaseQuantities.Weight[Type]\tNUMBER\t\t820\t1\tIfcMassMeasure\t1\n#\nGROUP\t821\tQto_InterceptorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te3d6f352-e424-4e08-9408-dd8cebff47a5\tQto_InterceptorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t821\t1\tIfcMassMeasure\t1\n#\nGROUP\t822\tQto_JunctionBoxBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1315898a-2504-437f-9a60-fe142d155124\tQto_JunctionBoxBaseQuantities.GrossWeight[Type]\tNUMBER\t\t822\t1\tIfcMassMeasure\t1\nPARAM\t47dc72b9-67e9-4032-9885-8623a3b95965\tQto_JunctionBoxBaseQuantities.Height[Type]\tLENGTH\t\t822\t1\tIfcLengthMeasure\t1\nPARAM\t786f9c9f-25fc-4c1a-a164-fff7e5253a7b\tQto_JunctionBoxBaseQuantities.Length[Type]\tLENGTH\t\t822\t1\tIfcLengthMeasure\t1\nPARAM\t539afffb-28a5-4666-bf61-3a0039279818\tQto_JunctionBoxBaseQuantities.NumberOfGangs[Type]\tINTEGER\t\t822\t1\tIfcCountMeasure\t1\nPARAM\t51c43719-3fbc-42d6-ada2-8aaf2eec81a3\tQto_JunctionBoxBaseQuantities.Width[Type]\tLENGTH\t\t822\t1\tIfcLengthMeasure\t1\n#\nGROUP\t823\tQto_KerbBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbb20c640-6d37-4c26-b764-f787f7e3fd5f\tQto_KerbBaseQuantities.Depth[Type]\tLENGTH\t\t823\t1\tIfcLengthMeasure\t1\nPARAM\t0c9e134f-aa63-41f5-b731-0a3391532066\tQto_KerbBaseQuantities.Height[Type]\tLENGTH\t\t823\t1\tIfcLengthMeasure\t1\nPARAM\t29ffb04c-09ec-41ac-a184-f1a8d28b6106\tQto_KerbBaseQuantities.Length[Type]\tLENGTH\t\t823\t1\tIfcLengthMeasure\t1\nPARAM\t697dd341-7495-4b1d-83da-88a523091c64\tQto_KerbBaseQuantities.Volume[Type]\tVOLUME\t\t823\t1\tIfcVolumeMeasure\t1\nPARAM\t4d2cf0f5-c186-4827-990d-e311caa732aa\tQto_KerbBaseQuantities.Weight[Type]\tNUMBER\t\t823\t1\tIfcMassMeasure\t1\nPARAM\tba4fadc3-b1da-49b9-bf75-72caaf1747c6\tQto_KerbBaseQuantities.Width[Type]\tLENGTH\t\t823\t1\tIfcLengthMeasure\t1\n#\nGROUP\t824\tQto_LaborResourceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t932ca374-875b-4d32-a920-7734542b6697\tQto_LaborResourceBaseQuantities.OvertimeWork[Type]\tNUMBER\t\t824\t1\tIfcTimeMeasure\t1\nPARAM\t7a51213b-07de-4f7e-ac7f-f1d63601da3d\tQto_LaborResourceBaseQuantities.StandardWork[Type]\tNUMBER\t\t824\t1\tIfcTimeMeasure\t1\n#\nGROUP\t825\tQto_LampBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tecbb2d1d-6b76-4136-825f-f4b8778c67dd\tQto_LampBaseQuantities.GrossWeight[Type]\tNUMBER\t\t825\t1\tIfcMassMeasure\t1\n#\nGROUP\t826\tQto_LightFixtureBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t577eba30-efc5-4c25-9e78-eecc52aac0d8\tQto_LightFixtureBaseQuantities.GrossWeight[Type]\tNUMBER\t\t826\t1\tIfcMassMeasure\t1\n#\nGROUP\t827\tQto_LinearStratumBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9a407f8a-b0fb-45ce-83ff-4e0bc51de516\tQto_LinearStratumBaseQuantities.Diameter[Type]\tLENGTH\t\t827\t1\tIfcLengthMeasure\t1\nPARAM\t98601b63-aea4-406b-8262-8355a4e14b79\tQto_LinearStratumBaseQuantities.Length[Type]\tLENGTH\t\t827\t1\tIfcLengthMeasure\t1\n#\nGROUP\t828\tQto_MarineFacilityBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3bbdee6a-c3d7-4c32-b3ac-88625ce6ea35\tQto_MarineFacilityBaseQuantities.Area[Type]\tAREA\t\t828\t1\tIfcAreaMeasure\t1\nPARAM\t083f6f0d-a2fe-4b0a-b825-d8f4e4e3989a\tQto_MarineFacilityBaseQuantities.Height[Type]\tLENGTH\t\t828\t1\tIfcLengthMeasure\t1\nPARAM\t9c5ce8c0-5999-4a63-a5f5-c84b5f225d19\tQto_MarineFacilityBaseQuantities.Length[Type]\tLENGTH\t\t828\t1\tIfcLengthMeasure\t1\nPARAM\t461ec05a-7c84-41a1-8394-a52988fb0119\tQto_MarineFacilityBaseQuantities.Volume[Type]\tVOLUME\t\t828\t1\tIfcVolumeMeasure\t1\nPARAM\t9e1a9a9e-b56d-4724-b710-860bdf5c8972\tQto_MarineFacilityBaseQuantities.Width[Type]\tLENGTH\t\t828\t1\tIfcLengthMeasure\t1\n#\nGROUP\t829\tQto_MemberBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t146130f6-7242-44c7-b4cf-0764efce9798\tQto_MemberBaseQuantities.CrossSectionArea[Type]\tAREA\t\t829\t1\tIfcAreaMeasure\t1\nPARAM\t404bb87c-19a8-4500-966a-9caa41947c0d\tQto_MemberBaseQuantities.GrossSurfaceArea[Type]\tAREA\t\t829\t1\tIfcAreaMeasure\t1\nPARAM\ta0877c9d-8f29-4227-a163-0312601b0772\tQto_MemberBaseQuantities.GrossVolume[Type]\tVOLUME\t\t829\t1\tIfcVolumeMeasure\t1\nPARAM\t27d410f5-7577-4560-8d14-ae0931707f00\tQto_MemberBaseQuantities.GrossWeight[Type]\tNUMBER\t\t829\t1\tIfcMassMeasure\t1\nPARAM\t9a276285-b460-415b-abca-fb90092cffb3\tQto_MemberBaseQuantities.Length[Type]\tLENGTH\t\t829\t1\tIfcLengthMeasure\t1\nPARAM\t81702afe-958c-4b3a-9031-c4da55843799\tQto_MemberBaseQuantities.NetSurfaceArea[Type]\tAREA\t\t829\t1\tIfcAreaMeasure\t1\nPARAM\t8fa91833-c5ef-4508-8cf8-9824d8a7a707\tQto_MemberBaseQuantities.NetVolume[Type]\tVOLUME\t\t829\t1\tIfcVolumeMeasure\t1\nPARAM\tfd8f7b57-6081-4bc0-98c9-78d3653ff5b5\tQto_MemberBaseQuantities.NetWeight[Type]\tNUMBER\t\t829\t1\tIfcMassMeasure\t1\nPARAM\tef4a88bd-bb39-453d-8b59-d7dd1e5572a5\tQto_MemberBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t829\t1\tIfcAreaMeasure\t1\n#\nGROUP\t830\tQto_MotorConnectionBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3eb46014-359c-4ffb-a78e-b6080e9a5a41\tQto_MotorConnectionBaseQuantities.GrossWeight[Type]\tNUMBER\t\t830\t1\tIfcMassMeasure\t1\n#\nGROUP\t831\tQto_OpeningElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6f486035-6dac-49d1-b6a0-faa2594ac6ac\tQto_OpeningElementBaseQuantities.Area[Type]\tAREA\t\t831\t1\tIfcAreaMeasure\t1\nPARAM\t61bd9e42-e2af-407e-9116-9648264c658d\tQto_OpeningElementBaseQuantities.Depth[Type]\tLENGTH\t\t831\t1\tIfcLengthMeasure\t1\nPARAM\t66be98da-6281-4585-be3c-a1160460d52b\tQto_OpeningElementBaseQuantities.Height[Type]\tLENGTH\t\t831\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb8a34c00-e619-4569-bb79-9acaafec611f\tQto_OpeningElementBaseQuantities.Volume[Type]\tVOLUME\t\t831\t1\tIfcVolumeMeasure\t1\nPARAM\t19843f5b-89f4-4bbc-ba63-2a5667e7634e\tQto_OpeningElementBaseQuantities.Width[Type]\tLENGTH\t\t831\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t832\tQto_OutletBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfc18da68-da91-42f6-b31c-68ad7d35357e\tQto_OutletBaseQuantities.GrossWeight[Type]\tNUMBER\t\t832\t1\tIfcMassMeasure\t1\n#\nGROUP\t833\tQto_PavementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t69abf7e4-4fc0-49d2-8fcd-af08f6f36b7c\tQto_PavementBaseQuantities.Depth[Type]\tLENGTH\t\t833\t1\tIfcLengthMeasure\t1\nPARAM\t33054668-a1a7-4b2e-9a16-9663c4e8f891\tQto_PavementBaseQuantities.GrossArea[Type]\tAREA\t\t833\t1\tIfcAreaMeasure\t1\nPARAM\tb68d44ee-7d7f-4f42-9005-4a627a6144ec\tQto_PavementBaseQuantities.GrossVolume[Type]\tVOLUME\t\t833\t1\tIfcVolumeMeasure\t1\nPARAM\t702ca609-013c-4d0a-bffd-fbf24a8666b4\tQto_PavementBaseQuantities.Length[Type]\tLENGTH\t\t833\t1\tIfcLengthMeasure\t1\nPARAM\t4cde6da4-7135-45ef-946c-9a9892902615\tQto_PavementBaseQuantities.NetArea[Type]\tAREA\t\t833\t1\tIfcAreaMeasure\t1\nPARAM\t3405a60b-b552-43f3-90c4-c38721db0faa\tQto_PavementBaseQuantities.NetVolume[Type]\tVOLUME\t\t833\t1\tIfcVolumeMeasure\t1\nPARAM\t0bc5df17-7d3a-434a-9319-60a0887d5b96\tQto_PavementBaseQuantities.Width[Type]\tLENGTH\t\t833\t1\tIfcLengthMeasure\t1\n#\nGROUP\t834\tQto_PictorialSignQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfcf7839f-a4ce-4700-a50c-82152649169d\tQto_PictorialSignQuantities.Area[Type]\tAREA\t\t834\t1\tIfcAreaMeasure\t1\nPARAM\t7cdcc0c8-151a-4cb5-91ad-7e09c6ba96bf\tQto_PictorialSignQuantities.SignArea[Type]\tAREA\t\t834\t1\tIfcAreaMeasure\t1\n#\nGROUP\t835\tQto_PileBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdb283971-97c1-4fc2-965a-c829cef95003\tQto_PileBaseQuantities.CrossSectionArea[Type]\tAREA\t\t835\t1\tIfcAreaMeasure\t1\nPARAM\t35539ffa-c254-4b46-911a-b7eef4820d9b\tQto_PileBaseQuantities.GrossSurfaceArea[Type]\tAREA\t\t835\t1\tIfcAreaMeasure\t1\nPARAM\t9b7f1caf-0a14-4946-9d87-f4b3b1299eff\tQto_PileBaseQuantities.GrossVolume[Type]\tVOLUME\t\t835\t1\tIfcVolumeMeasure\t1\nPARAM\tba801601-f444-4471-88d7-f880b861d103\tQto_PileBaseQuantities.GrossWeight[Type]\tNUMBER\t\t835\t1\tIfcMassMeasure\t1\nPARAM\t98bb2687-6b02-4d2a-94d4-d520a3e92ed1\tQto_PileBaseQuantities.Length[Type]\tLENGTH\t\t835\t1\tIfcLengthMeasure\t1\nPARAM\t1e12a14a-24b9-4b8c-bf4f-3a63bc750f9b\tQto_PileBaseQuantities.NetVolume[Type]\tVOLUME\t\t835\t1\tIfcVolumeMeasure\t1\nPARAM\tbd27872d-37ba-424b-a3e3-81af64d69211\tQto_PileBaseQuantities.NetWeight[Type]\tNUMBER\t\t835\t1\tIfcMassMeasure\t1\nPARAM\t9256495e-a299-4307-80e9-081836b2295c\tQto_PileBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t835\t1\tIfcAreaMeasure\t1\n#\nGROUP\t836\tQto_PipeFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfb32f7ee-63e3-4a9a-b82c-520ac4085d87\tQto_PipeFittingBaseQuantities.GrossCrossSectionArea[Type]\tAREA\t\t836\t1\tIfcAreaMeasure\t1\nPARAM\t55c5c9de-f0f4-43e9-bf7c-c80b5e9d4825\tQto_PipeFittingBaseQuantities.GrossWeight[Type]\tNUMBER\t\t836\t1\tIfcMassMeasure\t1\nPARAM\t6a8bb9d1-4362-42db-8e2f-1b2a978d26e1\tQto_PipeFittingBaseQuantities.Length[Type]\tLENGTH\t\t836\t1\tIfcLengthMeasure\t1\nPARAM\tac3dab3f-74e9-4ab5-92b6-cdc49f483d18\tQto_PipeFittingBaseQuantities.NetCrossSectionArea[Type]\tAREA\t\t836\t1\tIfcAreaMeasure\t1\nPARAM\t3f54531f-e0b8-4688-9d11-65b186eee9bd\tQto_PipeFittingBaseQuantities.NetWeight[Type]\tNUMBER\t\t836\t1\tIfcMassMeasure\t1\nPARAM\t0e4f9045-9072-4cfc-bd88-34c9dceb4f9f\tQto_PipeFittingBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t836\t1\tIfcAreaMeasure\t1\n#\nGROUP\t837\tQto_PipeSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t42567307-ac4e-4ba1-9202-8bbfbc976b4f\tQto_PipeSegmentBaseQuantities.FootPrintArea[Type]\tAREA\t\t837\t1\tIfcAreaMeasure\t1\nPARAM\tec0505a3-85d2-4d7f-9e57-2f7e0c2c0250\tQto_PipeSegmentBaseQuantities.GrossCrossSectionArea[Type]\tAREA\t\t837\t1\tIfcAreaMeasure\t1\nPARAM\ta6b4fcae-c425-47f9-bf58-89d097a7e454\tQto_PipeSegmentBaseQuantities.GrossWeight[Type]\tNUMBER\t\t837\t1\tIfcMassMeasure\t1\nPARAM\teba44d42-f8b7-4c5f-bf23-57004304d700\tQto_PipeSegmentBaseQuantities.Length[Type]\tLENGTH\t\t837\t1\tIfcLengthMeasure\t1\nPARAM\t217ab057-031a-4ed6-9ce2-81772f47c14e\tQto_PipeSegmentBaseQuantities.NetCrossSectionArea[Type]\tAREA\t\t837\t1\tIfcAreaMeasure\t1\nPARAM\te1c25ca4-4480-430c-81f9-a342682130e5\tQto_PipeSegmentBaseQuantities.NetWeight[Type]\tNUMBER\t\t837\t1\tIfcMassMeasure\t1\nPARAM\ta8163293-a663-4c32-8fcf-ad40959e5e66\tQto_PipeSegmentBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t837\t1\tIfcAreaMeasure\t1\n#\nGROUP\t838\tQto_PlateBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4fcff3c1-7b14-4f7a-9959-80fdba3e643a\tQto_PlateBaseQuantities.GrossArea[Type]\tAREA\t\t838\t1\tIfcAreaMeasure\t1\nPARAM\t44a07c22-8a0e-4cfa-b87f-6b0fc1a3d904\tQto_PlateBaseQuantities.GrossVolume[Type]\tVOLUME\t\t838\t1\tIfcVolumeMeasure\t1\nPARAM\t5cfceafa-bbc4-48f7-988b-98a5280f0bbb\tQto_PlateBaseQuantities.GrossWeight[Type]\tNUMBER\t\t838\t1\tIfcMassMeasure\t1\nPARAM\t08d02163-6da9-4071-8550-f11752a7f738\tQto_PlateBaseQuantities.NetArea[Type]\tAREA\t\t838\t1\tIfcAreaMeasure\t1\nPARAM\tc30cb1d4-08af-4952-9eac-5e360593528b\tQto_PlateBaseQuantities.NetVolume[Type]\tVOLUME\t\t838\t1\tIfcVolumeMeasure\t1\nPARAM\tfd750145-d790-4dca-a9d4-9f86fc13b5ba\tQto_PlateBaseQuantities.NetWeight[Type]\tNUMBER\t\t838\t1\tIfcMassMeasure\t1\nPARAM\t1a6d4b08-8434-4c58-986e-796f6e6132d6\tQto_PlateBaseQuantities.Perimeter[Type]\tLENGTH\t\t838\t1\tIfcLengthMeasure\t1\nPARAM\t283fdb30-acd6-409c-b242-e342ad81bd26\tQto_PlateBaseQuantities.Width[Type]\tLENGTH\t\t838\t1\tIfcLengthMeasure\t1\n#\nGROUP\t839\tQto_ProjectionElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc991d39d-7bc0-4df1-b253-0ce1a3052bcb\tQto_ProjectionElementBaseQuantities.Area[Type]\tAREA\t\t839\t1\tIfcAreaMeasure\t1\nPARAM\t975316df-b6dc-4240-9a81-b9c5ca7d9592\tQto_ProjectionElementBaseQuantities.Volume[Type]\tVOLUME\t\t839\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t840\tQto_ProtectiveDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tff11509c-1731-4bae-8c6e-2ee8183d2fe1\tQto_ProtectiveDeviceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t840\t1\tIfcMassMeasure\t1\n#\nGROUP\t841\tQto_ProtectiveDeviceTrippingUnitBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td62dca82-44fd-42e4-8956-655d4d926e74\tQto_ProtectiveDeviceTrippingUnitBaseQuantities.GrossWeight[Type]\tNUMBER\t\t841\t1\tIfcMassMeasure\t1\n#\nGROUP\t842\tQto_PumpBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcb5e499b-725d-4ef0-a213-3c2bc7e88afd\tQto_PumpBaseQuantities.GrossWeight[Type]\tNUMBER\t\t842\t1\tIfcMassMeasure\t1\n#\nGROUP\t843\tQto_RailBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb6069b3a-df91-407e-8553-7dd78ba83c40\tQto_RailBaseQuantities.Length[Type]\tLENGTH\t\t843\t1\tIfcLengthMeasure\t1\nPARAM\t93e60015-7402-4672-8865-1993abfb4c42\tQto_RailBaseQuantities.Volume[Type]\tVOLUME\t\t843\t1\tIfcVolumeMeasure\t1\nPARAM\t401ecac4-8516-4052-bcca-c2ab5c05aee1\tQto_RailBaseQuantities.Weight[Type]\tNUMBER\t\t843\t1\tIfcMassMeasure\t1\n#\nGROUP\t844\tQto_RailingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t430493fb-3350-4627-8186-208bcccdcf5c\tQto_RailingBaseQuantities.Length[Type]\tLENGTH\t\t844\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t845\tQto_RampFlightBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t921a9d97-5414-4621-9ebf-82d8b4d1e6d2\tQto_RampFlightBaseQuantities.GrossArea[Type]\tAREA\t\t845\t1\tIfcAreaMeasure\t1\nPARAM\tfe7e8e60-cbc0-470a-9265-15df9e515fe4\tQto_RampFlightBaseQuantities.GrossVolume[Type]\tVOLUME\t\t845\t1\tIfcVolumeMeasure\t1\nPARAM\t4d91c6f2-2d2e-4ea9-a234-37c76a462b56\tQto_RampFlightBaseQuantities.Length[Type]\tLENGTH\t\t845\t1\tIfcLengthMeasure\t1\nPARAM\t3c453549-24fc-44fb-a186-5d3d8e060662\tQto_RampFlightBaseQuantities.NetArea[Type]\tAREA\t\t845\t1\tIfcAreaMeasure\t1\nPARAM\t949aeced-5b00-47f6-892b-8b1f922f2929\tQto_RampFlightBaseQuantities.NetVolume[Type]\tVOLUME\t\t845\t1\tIfcVolumeMeasure\t1\nPARAM\t327adbec-11ab-40ee-965c-72077e7344bb\tQto_RampFlightBaseQuantities.Width[Type]\tLENGTH\t\t845\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t846\tQto_ReinforcedSoilBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb2c050aa-ad47-4ea7-93ba-5e372dcf6075\tQto_ReinforcedSoilBaseQuantities.Area[Type]\tAREA\t\t846\t1\tIfcAreaMeasure\t1\nPARAM\t1a5ddcf7-9752-41a9-960d-35f8b68468c6\tQto_ReinforcedSoilBaseQuantities.Depth[Type]\tLENGTH\t\t846\t1\tIfcLengthMeasure\t1\nPARAM\td2e20a79-4ad2-45cd-9929-12ba926b3bf6\tQto_ReinforcedSoilBaseQuantities.Length[Type]\tLENGTH\t\t846\t1\tIfcLengthMeasure\t1\nPARAM\t23b6159c-4a32-436b-8964-03aea30fba94\tQto_ReinforcedSoilBaseQuantities.Volume[Type]\tVOLUME\t\t846\t1\tIfcVolumeMeasure\t1\nPARAM\t680956c5-fa64-4f5a-82f8-c2521529f39b\tQto_ReinforcedSoilBaseQuantities.Width[Type]\tLENGTH\t\t846\t1\tIfcLengthMeasure\t1\n#\nGROUP\t847\tQto_ReinforcingElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t82845659-27bf-4151-b0d9-77f909e48fc3\tQto_ReinforcingElementBaseQuantities.Count[Type]\tINTEGER\t\t847\t1\tIfcCountMeasure\t1\nPARAM\t5500b993-7cd5-4d4b-a1f3-c43aef840144\tQto_ReinforcingElementBaseQuantities.Length[Type]\tLENGTH\t\t847\t1\tIfcLengthMeasure\t1\nPARAM\t23ee2291-2395-4cdc-89a2-057f44d66006\tQto_ReinforcingElementBaseQuantities.Weight[Type]\tNUMBER\t\t847\t1\tIfcMassMeasure\t1\n#\nGROUP\t848\tQto_RoofBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9bf084a3-a2c8-472a-a8c4-60b3a4bcf7b7\tQto_RoofBaseQuantities.GrossArea[Type]\tAREA\t\t848\t1\tIfcAreaMeasure\t1\nPARAM\t423ac981-88ba-4f8f-8138-439330e5fc4f\tQto_RoofBaseQuantities.NetArea[Type]\tAREA\t\t848\t1\tIfcAreaMeasure\t1\nPARAM\t366b8fb3-e5ee-4bba-ab0d-8be493fec04d\tQto_RoofBaseQuantities.ProjectedArea[Type]\tAREA\t\t848\t1\tIfcAreaMeasure\t1\n#\nGROUP\t849\tQto_SanitaryTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf98e9445-76db-4cea-a428-af754e0b859d\tQto_SanitaryTerminalBaseQuantities.GrossWeight[Type]\tNUMBER\t\t849\t1\tIfcMassMeasure\t1\n#\nGROUP\t850\tQto_SensorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t28cf8ea2-6237-46d2-906e-62c3e06abfbc\tQto_SensorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t850\t1\tIfcMassMeasure\t1\n#\nGROUP\t851\tQto_SignalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbd289733-1d57-4c88-99fb-ccffb310b1e6\tQto_SignalBaseQuantities.Weight[Type]\tNUMBER\t\t851\t1\tIfcMassMeasure\t1\n#\nGROUP\t852\tQto_SignBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6172c053-e3f1-4118-b314-dba9307f9781\tQto_SignBaseQuantities.Height[Type]\tLENGTH\t\t852\t1\tIfcLengthMeasure\t1\nPARAM\td89cf479-a22d-44f8-b27c-c53500cff42b\tQto_SignBaseQuantities.Thickness[Type]\tLENGTH\t\t852\t1\tIfcLengthMeasure\t1\nPARAM\t34e3864a-9c9d-4df3-8281-ba7725f8b83b\tQto_SignBaseQuantities.Weight[Type]\tNUMBER\t\t852\t1\tIfcMassMeasure\t1\nPARAM\tf0ebef07-8c19-48a7-9be3-1e768d443fd9\tQto_SignBaseQuantities.Width[Type]\tLENGTH\t\t852\t1\tIfcLengthMeasure\t1\n#\nGROUP\t853\tQto_SiteBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0f4b62b8-79e0-4f82-8057-5876f046d633\tQto_SiteBaseQuantities.GrossArea[Type]\tAREA\t\t853\t1\tIfcAreaMeasure\t1\nPARAM\t4b9d4443-1afb-40a5-a19a-1ec45b7cf079\tQto_SiteBaseQuantities.GrossPerimeter[Type]\tLENGTH\t\t853\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t854\tQto_SlabBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t03212d12-35e1-4f12-9018-0a753b4c41a7\tQto_SlabBaseQuantities.Depth[Type]\tLENGTH\t\t854\t1\tIfcLengthMeasure\t1\nPARAM\te63c9543-0d4f-4547-8910-a3f24dd7502e\tQto_SlabBaseQuantities.GrossArea[Type]\tAREA\t\t854\t1\tIfcAreaMeasure\t1\nPARAM\t561fcdad-0c7f-41da-b024-9c2eee5bf216\tQto_SlabBaseQuantities.GrossVolume[Type]\tVOLUME\t\t854\t1\tIfcVolumeMeasure\t1\nPARAM\tf1eb1b5f-1e50-4cba-93c3-2cba73641d9c\tQto_SlabBaseQuantities.GrossWeight[Type]\tNUMBER\t\t854\t1\tIfcMassMeasure\t1\nPARAM\tf7fb4781-7233-41ab-b1cb-1e912b740b3e\tQto_SlabBaseQuantities.Length[Type]\tLENGTH\t\t854\t1\tIfcLengthMeasure\t1\nPARAM\tfaa4746c-5d95-43ad-a816-799cc55d5a21\tQto_SlabBaseQuantities.NetArea[Type]\tAREA\t\t854\t1\tIfcAreaMeasure\t1\nPARAM\t86309906-b11f-4dcf-b033-f8e7411a27c7\tQto_SlabBaseQuantities.NetVolume[Type]\tVOLUME\t\t854\t1\tIfcVolumeMeasure\t1\nPARAM\t3e37c743-7dd3-48f8-82a6-e9c533ca9da3\tQto_SlabBaseQuantities.NetWeight[Type]\tNUMBER\t\t854\t1\tIfcMassMeasure\t1\nPARAM\t2d8c0ca9-2fae-4517-8f40-8c41ceb5cf7d\tQto_SlabBaseQuantities.Perimeter[Type]\tLENGTH\t\t854\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t660e8036-5b23-468f-9802-84741994a69e\tQto_SlabBaseQuantities.Width[Type]\tLENGTH\t\t854\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t855\tQto_SleeperBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t093734dc-290b-43df-9c8f-f761cb9e00b5\tQto_SleeperBaseQuantities.Height[Type]\tLENGTH\t\t855\t1\tIfcLengthMeasure\t1\nPARAM\t2fe3b491-723c-4a44-91f6-33f129013569\tQto_SleeperBaseQuantities.Length[Type]\tLENGTH\t\t855\t1\tIfcLengthMeasure\t1\nPARAM\t194d6288-d140-468c-910b-90999e35739a\tQto_SleeperBaseQuantities.Width[Type]\tLENGTH\t\t855\t1\tIfcLengthMeasure\t1\n#\nGROUP\t856\tQto_SolarDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc3b1090-07b8-4d33-a99b-a33df7b2f7a6\tQto_SolarDeviceBaseQuantities.GrossArea[Type]\tAREA\t\t856\t1\tIfcAreaMeasure\t1\nPARAM\t86f0ae02-1565-43c1-bca9-53233a9af5fe\tQto_SolarDeviceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t856\t1\tIfcMassMeasure\t1\n#\nGROUP\t857\tQto_SpaceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t849125ce-732a-459e-87b1-12183071819e\tQto_SpaceBaseQuantities.FinishCeilingHeight[Type]\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6942af6c-b212-4f61-b16b-890251d8eb33\tQto_SpaceBaseQuantities.FinishFloorHeight[Type]\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8754ed28-4a21-44bd-9bae-14a6d6a9ce72\tQto_SpaceBaseQuantities.GrossCeilingArea[Type]\tAREA\t\t857\t1\tIfcAreaMeasure\t1\nPARAM\ta11444af-f02f-49c6-8d41-bfd86986cd05\tQto_SpaceBaseQuantities.GrossFloorArea[Type]\tAREA\t\t857\t1\tIfcAreaMeasure\t1\nPARAM\te1abdd9d-2211-4e7e-b8cc-b604fcc7e519\tQto_SpaceBaseQuantities.GrossPerimeter[Type]\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t589b9ddb-b705-4909-991b-29c12d86739e\tQto_SpaceBaseQuantities.GrossVolume[Type]\tVOLUME\t\t857\t1\tIfcVolumeMeasure\t1\nPARAM\t7692dcfa-6b82-48c4-9c77-3006b3e5c8b2\tQto_SpaceBaseQuantities.GrossWallArea[Type]\tAREA\t\t857\t1\tIfcAreaMeasure\t1\nPARAM\te6b69ade-c13a-4c8b-ac7c-f46d8cfde8af\tQto_SpaceBaseQuantities.Height[Type]\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf7428dc7-2125-402d-93c1-76e168198e36\tQto_SpaceBaseQuantities.NetCeilingArea[Type]\tAREA\t\t857\t1\tIfcAreaMeasure\t1\nPARAM\t220a6103-1f6d-49da-a219-f14337fc68f3\tQto_SpaceBaseQuantities.NetFloorArea[Type]\tAREA\t\t857\t1\tIfcAreaMeasure\t1\nPARAM\ta5913eab-4f3a-4534-89ab-3b5c217a1b51\tQto_SpaceBaseQuantities.NetPerimeter[Type]\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t07b18587-87b4-4de7-b523-1ef21b5a2cda\tQto_SpaceBaseQuantities.NetVolume[Type]\tVOLUME\t\t857\t1\tIfcVolumeMeasure\t1\nPARAM\tf330f885-77a2-4b49-b55e-731dc4945af3\tQto_SpaceBaseQuantities.NetWallArea[Type]\tAREA\t\t857\t1\tIfcAreaMeasure\t1\n#\nGROUP\t858\tQto_SpaceHeaterBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3c576c32-46a3-435c-a8ec-531a7a4a79c7\tQto_SpaceHeaterBaseQuantities.GrossWeight[Type]\tNUMBER\t\t858\t1\tIfcMassMeasure\t1\nPARAM\t2da0cf68-a9f3-42c2-b623-85c58faf9921\tQto_SpaceHeaterBaseQuantities.Length[Type]\tLENGTH\t\t858\t1\tIfcLengthMeasure\t1\nPARAM\tca4d1675-d459-43e8-b9c2-abec08be9b7f\tQto_SpaceHeaterBaseQuantities.NetWeight[Type]\tNUMBER\t\t858\t1\tIfcMassMeasure\t1\n#\nGROUP\t859\tQto_SpatialZoneBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t22c8f349-38a9-470f-abff-b7853553651c\tQto_SpatialZoneBaseQuantities.Height[Type]\tLENGTH\t\t859\t1\tIfcLengthMeasure\t1\nPARAM\tb8541799-fa19-4921-8eb6-50c55d2491eb\tQto_SpatialZoneBaseQuantities.Length[Type]\tLENGTH\t\t859\t1\tIfcLengthMeasure\t1\nPARAM\te8666009-aa40-4682-87a1-4a77d6e88362\tQto_SpatialZoneBaseQuantities.Width[Type]\tLENGTH\t\t859\t1\tIfcLengthMeasure\t1\n#\nGROUP\t860\tQto_StackTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6610183a-0c3e-4323-a486-eb10404c0a9b\tQto_StackTerminalBaseQuantities.GrossWeight[Type]\tNUMBER\t\t860\t1\tIfcMassMeasure\t1\n#\nGROUP\t861\tQto_StairFlightBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta6e29012-8f7c-4acc-809d-500dc623d034\tQto_StairFlightBaseQuantities.GrossVolume[Type]\tVOLUME\t\t861\t1\tIfcVolumeMeasure\t1\nPARAM\t8d7dfbab-a2e2-4d56-85b8-2252732d7e68\tQto_StairFlightBaseQuantities.Length[Type]\tLENGTH\t\t861\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1153a109-5eaa-4337-b720-bf59b55e31bf\tQto_StairFlightBaseQuantities.NetVolume[Type]\tVOLUME\t\t861\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t862\tQto_SurfaceFeatureBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8b95559f-e0b8-49c9-8182-9fe4d3a4a1b3\tQto_SurfaceFeatureBaseQuantities.Area[Type]\tAREA\t\t862\t1\tIfcAreaMeasure\t1\nPARAM\tf6d38f1b-1387-4eb0-9fbe-ffddff056d06\tQto_SurfaceFeatureBaseQuantities.Length[Type]\tLENGTH\t\t862\t1\tIfcLengthMeasure\t1\n#\nGROUP\t863\tQto_SwitchingDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9549393b-b926-4adf-bce9-3bf1eec3abce\tQto_SwitchingDeviceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t863\t1\tIfcMassMeasure\t1\n#\nGROUP\t864\tQto_TankBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tae840b9a-ae28-494f-8cb7-f05c52b28377\tQto_TankBaseQuantities.GrossWeight[Type]\tNUMBER\t\t864\t1\tIfcMassMeasure\t1\nPARAM\tfcdb6ffc-ace8-4bcd-83db-68a59205f44e\tQto_TankBaseQuantities.NetWeight[Type]\tNUMBER\t\t864\t1\tIfcMassMeasure\t1\nPARAM\t776a5129-c649-41ee-953f-300a443764cd\tQto_TankBaseQuantities.TotalSurfaceArea[Type]\tAREA\t\t864\t1\tIfcAreaMeasure\t1\n#\nGROUP\t865\tQto_TransformerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t69441c55-6488-407e-b990-38f0826d266e\tQto_TransformerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t865\t1\tIfcMassMeasure\t1\n#\nGROUP\t866\tQto_TubeBundleBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t30cfac62-85ff-4cb6-9cd8-6f81dda9f2bc\tQto_TubeBundleBaseQuantities.GrossWeight[Type]\tNUMBER\t\t866\t1\tIfcMassMeasure\t1\nPARAM\t4a3e04b0-d9bf-411e-bd4b-f86286fc7a40\tQto_TubeBundleBaseQuantities.NetWeight[Type]\tNUMBER\t\t866\t1\tIfcMassMeasure\t1\n#\nGROUP\t867\tQto_UnitaryControlElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5ad416d8-7e54-4814-b982-838108f40cc4\tQto_UnitaryControlElementBaseQuantities.GrossWeight[Type]\tNUMBER\t\t867\t1\tIfcMassMeasure\t1\n#\nGROUP\t868\tQto_UnitaryEquipmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0fe75746-4f1b-4d70-aad7-780590a25362\tQto_UnitaryEquipmentBaseQuantities.GrossWeight[Type]\tNUMBER\t\t868\t1\tIfcMassMeasure\t1\n#\nGROUP\t869\tQto_ValveBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t013590a7-7424-410a-b03d-cb10c588722d\tQto_ValveBaseQuantities.GrossWeight[Type]\tNUMBER\t\t869\t1\tIfcMassMeasure\t1\n#\nGROUP\t870\tQto_VehicleBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8e6df5a9-022d-4f17-a8e7-3d7ae24df086\tQto_VehicleBaseQuantities.Height[Type]\tLENGTH\t\t870\t1\tIfcLengthMeasure\t1\nPARAM\tf2fa0a92-8974-41ea-a1e8-45f7f886f6a1\tQto_VehicleBaseQuantities.Length[Type]\tLENGTH\t\t870\t1\tIfcLengthMeasure\t1\nPARAM\ta1a79947-7d0c-44ce-9bc7-b60f8926a43d\tQto_VehicleBaseQuantities.Width[Type]\tLENGTH\t\t870\t1\tIfcLengthMeasure\t1\n#\nGROUP\t871\tQto_VibrationIsolatorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e282b42-fcd5-4a02-916e-479026cfab79\tQto_VibrationIsolatorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t871\t1\tIfcMassMeasure\t1\n#\nGROUP\t872\tQto_VolumetricStratumBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb1f1c5c2-1c72-459e-be9e-880dbe592616\tQto_VolumetricStratumBaseQuantities.Area[Type]\tAREA\t\t872\t1\tIfcAreaMeasure\t1\nPARAM\t2bd36d04-4e86-4dd1-af53-dc58cebe00be\tQto_VolumetricStratumBaseQuantities.Mass[Type]\tNUMBER\t\t872\t1\tIfcMassMeasure\t1\nPARAM\t040e3581-e161-407e-a461-ff28b15c49c4\tQto_VolumetricStratumBaseQuantities.PlanArea[Type]\tAREA\t\t872\t1\tIfcAreaMeasure\t1\nPARAM\t7ba30d60-7d6a-4a61-a743-e8436101226d\tQto_VolumetricStratumBaseQuantities.Volume[Type]\tVOLUME\t\t872\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t873\tQto_WallBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t52c93921-54b0-4df2-8542-57dea01243b3\tQto_WallBaseQuantities.GrossFootprintArea[Type]\tAREA\t\t873\t1\tIfcAreaMeasure\t1\nPARAM\tce61ea05-937a-471a-8474-a23f3ea8b593\tQto_WallBaseQuantities.GrossFootPrintArea[Type]\tAREA\t\t873\t1\tIfcAreaMeasure\t1\nPARAM\t37cd6b10-6a92-466e-9725-c9c719f4383a\tQto_WallBaseQuantities.GrossSideArea[Type]\tAREA\t\t873\t1\tIfcAreaMeasure\t1\nPARAM\t77dd166e-f7cd-4a8a-8c78-a1c7a5ade1d4\tQto_WallBaseQuantities.GrossVolume[Type]\tVOLUME\t\t873\t1\tIfcVolumeMeasure\t1\nPARAM\tad30a54a-79ba-4d12-b60d-b568175e8988\tQto_WallBaseQuantities.GrossWeight[Type]\tNUMBER\t\t873\t1\tIfcMassMeasure\t1\nPARAM\td245d37f-f262-47e6-9fe6-7612c3d3c358\tQto_WallBaseQuantities.Height[Type]\tLENGTH\t\t873\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0df173c0-7cf0-4e75-a80e-ce5401714303\tQto_WallBaseQuantities.Length[Type]\tLENGTH\t\t873\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td2f3193a-6694-40d9-a066-bfd6c5684195\tQto_WallBaseQuantities.NetFootprintArea[Type]\tAREA\t\t873\t1\tIfcAreaMeasure\t1\nPARAM\t1da368ce-d7c4-4105-8b89-1199d2586604\tQto_WallBaseQuantities.NetFootPrintArea[Type]\tAREA\t\t873\t1\tIfcAreaMeasure\t1\nPARAM\t451ac791-1244-4d2a-86cb-ceff495e68ae\tQto_WallBaseQuantities.NetSideArea[Type]\tAREA\t\t873\t1\tIfcAreaMeasure\t1\nPARAM\t837281e6-577c-4775-93c9-a3e03ccad4c7\tQto_WallBaseQuantities.NetVolume[Type]\tVOLUME\t\t873\t1\tIfcVolumeMeasure\t1\nPARAM\t069ea2eb-fcff-40dd-b3d4-a67de6d6c9ef\tQto_WallBaseQuantities.NetWeight[Type]\tNUMBER\t\t873\t1\tIfcMassMeasure\t1\nPARAM\tac94a44a-c922-4f8a-82d1-556781d76e58\tQto_WallBaseQuantities.Width[Type]\tLENGTH\t\t873\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t874\tQto_WasteTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3beb93a0-6c05-4925-ad27-0e86b579a0ba\tQto_WasteTerminalBaseQuantities.GrossWeight[Type]\tNUMBER\t\t874\t1\tIfcMassMeasure\t1\n#\nGROUP\t875\tQto_WindowBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0665b33d-fbd6-49e1-80a2-723c4f5be8b3\tQto_WindowBaseQuantities.Area[Type]\tAREA\t\t875\t1\tIfcAreaMeasure\t1\nPARAM\t6b257136-5d18-48f7-9365-1232398a63ed\tQto_WindowBaseQuantities.Height[Type]\tLENGTH\t\t875\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc0e7558e-0a8e-486c-bb57-9928a7027667\tQto_WindowBaseQuantities.Perimeter[Type]\tLENGTH\t\t875\t1\tIfcLengthMeasure\t1\nPARAM\tb788dffc-fac0-4e50-aa97-dad78625b446\tQto_WindowBaseQuantities.Width[Type]\tLENGTH\t\t875\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t2\tRevit IFCExporter Parameters\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t979a9ef7-a1e5-42aa-b12b-87f4b316b920\tClassificationCode[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\td1de9789-0ee4-4212-8083-a35b7d78c4ee\tClassificationCode(2)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\ta2b43c43-148c-43ac-acc4-804f09623b9f\tClassificationCode(3)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\tcb55abe4-ea3a-452e-8e8d-fc0b72ba8e42\tClassificationCode(4)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t219647f3-80ec-4959-be6e-38875b0cf419\tClassificationCode(5)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\tc7ea8d37-af44-43d5-982d-3193cbd36701\tClassificationCode(6)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\tfbd5a530-c151-4986-a711-2a6c5cd83d3e\tClassificationCode(7)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t7b1b4c28-2b51-49ac-bb80-99832b6d5a77\tClassificationCode(8)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\taf667115-4871-4a74-ad48-cd9156ab52f7\tClassificationCode(9)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\tf4c50e92-76bd-4815-a41c-2a96c13ce3fa\tClassificationCode(10)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t2db82be1-0d19-4007-9e02-4d1701e979f8\tIfcQtyDepth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t75508649-f36d-499a-8116-67a6ae63a437\tIfcQtyLength[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tcc9723c8-7bf3-4af9-bec4-175c512ae618\tIfcQtyWidth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tfeae8108-41cf-496e-9175-3eff2fddd4af\tIfcQtyDiameter[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t7a5130be-436f-4829-b75b-72c574219b8c\tIfcQtyPerimeter[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t192dcfa0-1bdf-4da3-97f1-a40ebdb72539\tIfcQtyNetPerimeter[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tad610f5c-4e19-46b0-838f-4732a4ab3b1c\tIfcQtyGrossPerimeter[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t145dd5a5-bc9e-48b5-9a9e-77e096bd0bfe\tIfcQtyNetHeight[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t134b9456-7fb3-4089-bed2-440ea7ec5e0e\tIfcQtyFinishCeilingHeight[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t9c0c6850-b2e0-4cf4-a3dc-c588a37aa12e\tIfcQtyGrossHeight[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t6b103c6c-74b9-486f-9906-e5dd6f9f03c7\tIfcQtyFinishFloorHeight[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tdcb095d6-dfba-48d2-97a2-c20e899dc53f\tIfcQtyGrossWallArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t3245f4b2-0cea-431e-bcb7-27a9edae0310\tIfcQtyArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t68698438-8829-4054-8513-8a0b6ce12244\tIfcQtyGrossArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t3d73ad7e-6b1f-48d8-958b-c5559b3544d5\tIfcQtyGrossSurfaceArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t00f5808a-306f-49ee-a5ca-78c22c62ce99\tIfcQtyNetCeilingArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\ta1b7fcd2-7e34-4e65-89b8-f56de11a314b\tIfcQtyNetSurfaceArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t6969d33f-e5f0-4c42-8ec4-5783073ed751\tIfcQtyCrossSectionArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\ta9a58585-2eb5-4db8-9c7c-cf12d1720ebe\tIfcQtyOuterSurfaceArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t596d602a-dae6-47ef-83c4-8db04a4209f6\tIfcQtyGrossCeilingArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t2acd7edb-4e08-4053-8379-d5bddd689985\tIfcQtyNetWallArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t329ad038-3907-433e-95b7-1fc5663d21b4\tIfcQtyGrossVolume[Type]\tVOLUME\t\t2\t1\t\t1\nPARAM\t6aff01bb-fc73-4ec5-a59b-8fd19520c2c9\tIfcQtyNetVolume[Type]\tVOLUME\t\t2\t1\t\t1\nPARAM\t0291a3a9-a188-43e3-9e6d-059bd6c7f81b\tIfcQtyVolume[Type]\tVOLUME\t\t2\t1\t\t1\nPARAM\t90933854-33fd-4c06-a6a7-6f849919ae92\tIfcQtyGrossWeight[Type]\tNUMBER\t\t2\t1\t\t1\nPARAM\ta9c5d910-1a26-497b-a034-b28915eddd56\tIfcQtyNetWeight[Type]\tNUMBER\t\t2\t1\t\t1\nPARAM\t9080bc21-a032-4bec-ad15-80307600bbe3\tIfcName[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\tfee87b11-3cdd-4f48-a4c9-1e17c03fed3f\tIfcDescription[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t58ba886e-ac48-4bf1-b77f-760dca5f2712\tIfcLongName[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t0a85b5b6-2af4-480d-85bf-235cee912e09\tIfcTag[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t115763c9-c385-4aad-aac6-6ac789b0cb41\tIfcProfileName[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t3fa9eb1c-a4a0-4fa8-b836-e9b2f417b8d8\tIfcElementType[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t0c449988-1efe-4690-b873-fc98d4fc60e2\tIfcApplicableOccurrence[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t54f49c86-bf8c-4689-830a-54bc73fa0ab2\tIfcObjectType[Type]\tTEXT\t\t2\t1\tSpecial Parameter to set the Instance ObjectType attribute from the Type\t1\nPARAM\t141f4773-6408-460c-9136-ed34a072e8da\tPanelDepth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t6f115f50-3148-4aa0-be19-ce8d91aea627\tPanelWidth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tabec6a05-f532-46f0-b3de-f9e8a9c01335\tLiningDepth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t55e3e35c-c4ba-42df-ba56-048a3995bba5\tLiningThickness[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t3be72e29-7818-4302-89a7-337d1f328e12\tLiningOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\ta1982167-ba1d-463f-b67d-28a9679bc10c\tThresholdDepth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t524d8a84-6533-40f3-b306-880f79263b71\tThresholdThickness[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tb088323c-4dfb-4e78-a124-580119915e40\tThresholdOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t0345acfb-1ffc-4d44-bdb2-9d4dd6c4ca01\tTransomOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t95466b46-291e-427f-8d55-96445794c575\tTransomThickness[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tec98702d-a600-45a7-b710-2a8e943aab7e\tCasingDepth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tdb88ef23-14ab-4a23-963d-72d84bdd303e\tCasingThickness[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t68d470bd-a841-4665-9a55-75ea82f4fa72\tWINDOW_PARTITIONING_TYPE[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t556ad2ea-5ba3-49cc-accf-be26c96b33ff\tWINDOW_PREDEFINED_TYPE[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t0ffb75e9-4b55-4742-8b18-1bf5f83acc04\tConstruction[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t78af38cc-458e-4e63-9a7e-873a0d73b923\tFirstTransomOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t346df730-8ab6-41ce-8acf-0d4798300553\tSecondTransomOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t1778bc42-afde-4b76-9222-af1a38b05b7c\tMullionThickness[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t93ade552-8d24-473c-a7f0-48b2ddaf1588\tFirstMullionOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t1ea5ba6d-0447-43a5-8f5c-8a905c42ffb0\tSecondMullionOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t4a37833e-59c1-4532-8fe0-2a0f5214c2ad\tFrameDepth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tb552f0e3-1bc1-496b-a001-08b1f4a9a251\tFrameThickness[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\td130bd1c-b24f-4d51-af57-a87514c2b47d\tIfcWindowStyle.ConstructionType[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t57ce242a-2907-4224-a400-e2e03c6a647d\tIfcDoorStyle.ConstructionType[Type]\tTEXT\t\t2\t1\t\t1\n"
  },
  {
    "path": "Install/Program Files to Install/IFC Shared Parameters-RevitIFCBuiltIn_ALL.txt",
    "content": "# This is a Revit shared parameter file.\r\n# Do not edit manually.\r\n*META\tVERSION\tMINVERSION\r\nMETA\t2\t1\r\n*GROUP\tID\tNAME\r\n#\r\nGROUP\t3\tIfcDoorLiningProperties\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1819e1b5-b30c-4ee7-aeb7-c49728ca1080\tIfcDoorLiningProperties.CasingDepth\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td7dcf29a-3d45-4622-bb3d-d35137e797a4\tIfcDoorLiningProperties.CasingThickness\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t7a20e84a-2279-4e30-b1f9-6dee6db0af4d\tIfcDoorLiningProperties.LiningDepth\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tab84187c-4cb8-49ab-84d4-2bfbaccd5e1d\tIfcDoorLiningProperties.LiningOffset\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\r\nPARAM\t3a3a9dce-694d-4282-81dc-d1678dd6a29b\tIfcDoorLiningProperties.LiningThickness\tLENGTH\t\t3\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t7f77e6eb-aa91-4d00-bcb6-bd92bbaafca1\tIfcDoorLiningProperties.LiningToPanelOffsetX\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\r\nPARAM\tea0b9e23-706a-4647-aead-2dff355833f9\tIfcDoorLiningProperties.LiningToPanelOffsetY\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\r\nPARAM\t0377c451-7109-40f0-bbd2-3680d3d01cbe\tIfcDoorLiningProperties.ThresholdDepth\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t196d56dd-2282-404d-9ef1-81fe69861e4a\tIfcDoorLiningProperties.ThresholdOffset\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\r\nPARAM\t27ea51ec-bf1f-42ea-b398-7854c75cdfe4\tIfcDoorLiningProperties.ThresholdThickness\tLENGTH\t\t3\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t308e162b-cc7d-43a5-9647-5e2ef24074a1\tIfcDoorLiningProperties.TransomOffset\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\r\nPARAM\tccd51f01-82a2-4ecb-b270-18acdcd68839\tIfcDoorLiningProperties.TransomThickness\tLENGTH\t\t3\t1\tIfcNonNegativeLengthMeasure\t1\r\n#\r\nGROUP\t4\tIfcDoorPanelProperties\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0abb240e-5e49-4377-b855-f79b9fb08e6f\tIfcDoorPanelProperties.PanelDepth\tLENGTH\t\t4\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t0c136be1-a89f-43e0-bacf-59b47367d7c6\tIfcDoorPanelProperties.PanelOperation\tTEXT\t\t4\t1\tIfcLabel\t1\r\nPARAM\t7b0c2c29-96e1-458b-b8dd-7f84245ae619\tIfcDoorPanelProperties.PanelPosition\tTEXT\t\t4\t1\tIfcLabel\t1\r\nPARAM\ta25893b8-5bcb-409b-ae6a-d53a5208d93c\tIfcDoorPanelProperties.PanelWidth\tNUMBER\t\t4\t1\tIfcNormalisedRatioMeasure\t1\r\n#\r\nGROUP\t5\tIfcFuelProperties\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tabd4e4cb-3144-41e2-b61f-9eca98123eeb\tIfcFuelProperties.CarbonContent\tNUMBER\t\t5\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t8cb37b96-56e4-416b-9a24-cef09aa2d92e\tIfcFuelProperties.CombustionTemperature\tNUMBER\t\t5\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t3f6698f4-7d7a-4bb1-96ea-ec150f0f504f\tIfcFuelProperties.HigherHeatingValue\tNUMBER\t\t5\t1\tIfcHeatingValueMeasure\t1\r\nPARAM\t85daa61c-096d-4dd0-ba3e-fc8658228435\tIfcFuelProperties.LowerHeatingValue\tNUMBER\t\t5\t1\tIfcHeatingValueMeasure\t1\r\n#\r\nGROUP\t6\tIfcGeneralMaterialProperties\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t78126e62-811e-431c-9b2e-7ea99768ed01\tIfcGeneralMaterialProperties.MassDensity\tMASS_DENSITY\t\t6\t1\tIfcMassDensityMeasure\t1\r\nPARAM\t8f9bb8b3-3b9d-4d64-8eff-ce72a90ae65c\tIfcGeneralMaterialProperties.MolecularWeight\tNUMBER\t\t6\t1\tIfcMolecularWeightMeasure\t1\r\nPARAM\t022f918e-af55-4c8f-a74f-a749d9c08a16\tIfcGeneralMaterialProperties.Porosity\tNUMBER\t\t6\t1\tIfcNormalisedRatioMeasure\t1\r\n#\r\nGROUP\t7\tIfcHygroscopicMaterialProperties\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t28e6a575-3492-4392-bd8e-69829d6623c4\tIfcHygroscopicMaterialProperties.IsothermalMoistureCapacity\tNUMBER\t\t7\t1\tIfcIsothermalMoistureCapacityMeasure\t1\r\nPARAM\t4b64b256-1fea-44d1-9e81-a1ea0665126a\tIfcHygroscopicMaterialProperties.LowerVaporResistanceFactor\tNUMBER\t\t7\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t3133af76-87bd-4a7c-aa2c-65d896cc69b8\tIfcHygroscopicMaterialProperties.MoistureDiffusivity\tNUMBER\t\t7\t1\tIfcMoistureDiffusivityMeasure\t1\r\nPARAM\t516a6e83-2c46-437f-95bb-4186cb22f736\tIfcHygroscopicMaterialProperties.UpperVaporResistanceFactor\tNUMBER\t\t7\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tcf1867c9-c349-4730-8835-254538f8afb5\tIfcHygroscopicMaterialProperties.VaporPermeability\tNUMBER\t\t7\t1\tIfcVaporPermeabilityMeasure\t1\r\n#\r\nGROUP\t8\tIfcMechanicalConcreteMaterialProperties\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3a9d552a-599c-4a2a-bb9b-09829b7bae3b\tIfcMechanicalConcreteMaterialProperties.AdmixturesDescription\tTEXT\t\t8\t1\tIfcText\t1\r\nPARAM\t055f89f9-8036-424e-9379-b5e3e12e9c78\tIfcMechanicalConcreteMaterialProperties.CompressiveStrength\tNUMBER\t\t8\t1\tIfcPressureMeasure\t1\r\nPARAM\t0d2a6831-985e-4ff3-a4a7-98bb143555a4\tIfcMechanicalConcreteMaterialProperties.MaxAggregateSize\tLENGTH\t\t8\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t70e70fbe-da0c-4535-a35b-0f5230ec6240\tIfcMechanicalConcreteMaterialProperties.ProtectivePoreRatio\tNUMBER\t\t8\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\tdb1dde72-e9b7-49a5-bb4d-cb82710d85b9\tIfcMechanicalConcreteMaterialProperties.WaterImpermeability\tTEXT\t\t8\t1\tIfcText\t1\r\nPARAM\t103466db-f36e-4f45-9720-d222f65f73f0\tIfcMechanicalConcreteMaterialProperties.Workability\tTEXT\t\t8\t1\tIfcText\t1\r\n#\r\nGROUP\t9\tIfcMechanicalMaterialProperties\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t772492c1-f0e9-4d95-9758-4d98eb135b43\tIfcMechanicalMaterialProperties.DynamicViscosity\tNUMBER\t\t9\t1\tIfcDynamicViscosityMeasure\t1\r\nPARAM\t1a77b426-fa46-4c10-a06e-781eb95f2dde\tIfcMechanicalMaterialProperties.PoissonRatio\tNUMBER\t\t9\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t980ea82d-ba8a-489a-aa7a-e22280d8e6bb\tIfcMechanicalMaterialProperties.ShearModulus\tNUMBER\t\t9\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t578f5756-e2f3-4dd8-8bab-c420a66af5a9\tIfcMechanicalMaterialProperties.ThermalExpansionCoefficient\tNUMBER\t\t9\t1\tIfcThermalExpansionCoefficientMeasure\t1\r\nPARAM\t181bc626-041d-4ca4-90c6-bd866d4cb75d\tIfcMechanicalMaterialProperties.YoungModulus\tNUMBER\t\t9\t1\tIfcModulusOfElasticityMeasure\t1\r\n#\r\nGROUP\t10\tIfcMechanicalSteelMaterialProperties\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8d98d993-67ec-45c9-8f18-f56b84538b59\tIfcMechanicalSteelMaterialProperties.HardeningModule\tNUMBER\t\t10\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t278e520b-935c-4f7f-af0a-0d76bdd68117\tIfcMechanicalSteelMaterialProperties.PlasticStrain\tNUMBER\t\t10\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t242c6851-6ac1-4e09-98dc-2fa26127f53c\tIfcMechanicalSteelMaterialProperties.ProportionalStress\tNUMBER\t\t10\t1\tIfcPressureMeasure\t1\r\nPARAM\tfbd309d1-cc33-4463-8977-8efee14e4912\tIfcMechanicalSteelMaterialProperties.Relaxations\tNUMBER\t\t10\t1\tIfcRelaxation\t1\r\nPARAM\t0eaeefe9-a75d-415f-87fc-e46469c05c1b\tIfcMechanicalSteelMaterialProperties.UltimateStrain\tNUMBER\t\t10\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t766d13cb-37b1-4751-abe1-975bb58c72c0\tIfcMechanicalSteelMaterialProperties.UltimateStress\tNUMBER\t\t10\t1\tIfcPressureMeasure\t1\r\nPARAM\t8cd7d25f-bca2-45da-9295-69535a94156e\tIfcMechanicalSteelMaterialProperties.YieldStress\tNUMBER\t\t10\t1\tIfcPressureMeasure\t1\r\n#\r\nGROUP\t11\tIfcOpticalMaterialProperties\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tebdf1727-79bf-4056-b6e2-bd37704fb638\tIfcOpticalMaterialProperties.SolarReflectanceBack\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t29ea9c98-b38a-4104-920b-471f7ea8958a\tIfcOpticalMaterialProperties.SolarReflectanceFront\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t2bdba823-2612-4d50-9438-e1c1712c9b99\tIfcOpticalMaterialProperties.SolarTransmittance\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t60560881-61e7-440e-9714-e4589feffdf9\tIfcOpticalMaterialProperties.ThermalIrEmissivityBack\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t4c3df541-abed-4d52-8e60-ea32cb400b5f\tIfcOpticalMaterialProperties.ThermalIrEmissivityFront\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tb9051d10-e427-4a78-aff1-82a57d5b3572\tIfcOpticalMaterialProperties.ThermalIrTransmittance\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t49af3c56-e884-4260-aa51-ae235a1119cb\tIfcOpticalMaterialProperties.VisibleReflectanceBack\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t4797f125-aa87-4f0e-9294-d112a7a1c44b\tIfcOpticalMaterialProperties.VisibleReflectanceFront\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t60996c20-05ba-4dbf-8948-c0ed79b7ff1e\tIfcOpticalMaterialProperties.VisibleTransmittance\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\r\n#\r\nGROUP\t12\tIfcPermeableCoveringProperties\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te39ba2d0-bc07-4cd8-95d5-02a638306c93\tIfcPermeableCoveringProperties.FrameDepth\tLENGTH\t\t12\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3f62a550-f873-4a80-8bb8-bc7f39dc478a\tIfcPermeableCoveringProperties.FrameThickness\tLENGTH\t\t12\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t51880b37-693f-4f8c-995d-0100f9e00c5a\tIfcPermeableCoveringProperties.OperationType\tTEXT\t\t12\t1\tIfcLabel\t1\r\nPARAM\tbee1d59a-cdc0-46be-8be0-636150b459f8\tIfcPermeableCoveringProperties.PanelPosition\tTEXT\t\t12\t1\tIfcLabel\t1\r\n#\r\nGROUP\t13\tIfcProductsOfCombustionProperties\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tdfd33bf4-b472-4398-9773-d91799104d74\tIfcProductsOfCombustionProperties.CO2Content\tNUMBER\t\t13\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t1bc21c8b-3424-4bc0-87aa-5b9491b4bc79\tIfcProductsOfCombustionProperties.COContent\tNUMBER\t\t13\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t3900d20a-15c1-46e2-88a9-71aaba8ab264\tIfcProductsOfCombustionProperties.N20Content\tNUMBER\t\t13\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t04d1fe89-1ab3-4f01-b2bf-6a6fa3864403\tIfcProductsOfCombustionProperties.SpecificHeatCapacity\tNUMBER\t\t13\t1\tIfcSpecificHeatCapacityMeasure\t1\r\n#\r\nGROUP\t14\tIfcReinforcementDefinitionProperties\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tce94709f-cf4b-4403-af6b-7ee6326ef2d9\tIfcReinforcementDefinitionProperties.DefinitionType\tTEXT\t\t14\t1\tIfcLabel\t1\r\nPARAM\t1e38a24b-756e-410a-83e4-10f2e996d410\tIfcReinforcementDefinitionProperties.ReinforcementSectionDefinitions\tTEXT\t\t14\t1\tIfcLabel\t1\r\n#\r\nGROUP\t15\tIfcThermalMaterialProperties\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t10a248ef-1288-43b4-b182-b5a0bdc5c8cf\tIfcThermalMaterialProperties.BoilingPoint\tNUMBER\t\t15\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\tb9e8f57e-26d8-482b-9675-cb5d2e37a0a9\tIfcThermalMaterialProperties.FreezingPoint\tNUMBER\t\t15\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\te30d4a68-3e50-4148-bda2-88ee5306b779\tIfcThermalMaterialProperties.SpecificHeatCapacity\tNUMBER\t\t15\t1\tIfcSpecificHeatCapacityMeasure\t1\r\nPARAM\t0d2e2b58-c52c-4c6b-a147-f175fa711cb6\tIfcThermalMaterialProperties.ThermalConductivity\tNUMBER\t\t15\t1\tIfcThermalConductivityMeasure\t1\r\n#\r\nGROUP\t16\tIfcWaterProperties\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tab5e809d-2359-46b3-881f-54bc7b13fe75\tIfcWaterProperties.AcidityConcentration\tNUMBER\t\t16\t1\tIfcIonConcentrationMeasure\t1\r\nPARAM\tcf5a9c26-6e3a-46ae-bbf6-02d027c4803b\tIfcWaterProperties.AlkalinityConcentration\tNUMBER\t\t16\t1\tIfcIonConcentrationMeasure\t1\r\nPARAM\ta4b4917d-2627-4204-a66d-663596489cbe\tIfcWaterProperties.DissolvedSolidsContent\tNUMBER\t\t16\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t53048423-8395-4343-89ac-9667f633a5ed\tIfcWaterProperties.Hardness\tNUMBER\t\t16\t1\tIfcIonConcentrationMeasure\t1\r\nPARAM\t064481c5-046a-4417-9df6-9afe348f6d3f\tIfcWaterProperties.ImpuritiesContent\tNUMBER\t\t16\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\tfceffc7c-27f0-4eff-8446-cf6503f8cc1f\tIfcWaterProperties.IsPotable\tNUMBER\t\t16\t1\tBoolean\t1\r\nPARAM\ta653429b-e4f8-417c-9bb5-f3e5dfe4346e\tIfcWaterProperties.PHLevel\tNUMBER\t\t16\t1\tIfcPHMeasure\t1\r\n#\r\nGROUP\t17\tIfcWindowLiningProperties\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8a77e617-eed5-437a-951e-0cd57732bc1f\tIfcWindowLiningProperties.FirstMullionOffset\tNUMBER\t\t17\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t0f72231f-aec1-444a-bb4d-19f9bd68a518\tIfcWindowLiningProperties.FirstTransomOffset\tNUMBER\t\t17\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\tcf2c5029-4b7a-4be7-b3cb-747d4c5c2525\tIfcWindowLiningProperties.LiningDepth\tLENGTH\t\t17\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t2bd77976-58d7-4bb1-80a0-d4a8225e70b6\tIfcWindowLiningProperties.LiningOffset\tLENGTH\t\t17\t1\tIfcLengthMeasure\t1\r\nPARAM\t69dde29a-29e2-41ac-96c2-c494e35babf4\tIfcWindowLiningProperties.LiningThickness\tLENGTH\t\t17\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t23d62bb6-1ee9-431d-8a8d-47db42ca6c90\tIfcWindowLiningProperties.LiningToPanelOffsetX\tLENGTH\t\t17\t1\tIfcLengthMeasure\t1\r\nPARAM\t976ff59d-360f-4067-80ae-e09b1f215b3e\tIfcWindowLiningProperties.LiningToPanelOffsetY\tLENGTH\t\t17\t1\tIfcLengthMeasure\t1\r\nPARAM\ta010beae-7971-4a59-a999-5872bc891fd7\tIfcWindowLiningProperties.MullionThickness\tLENGTH\t\t17\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\tb95c35eb-4ab0-43f1-94ea-b70e1ff420cd\tIfcWindowLiningProperties.SecondMullionOffset\tNUMBER\t\t17\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\tf241333c-173f-47f9-95e0-4baaae81dbbd\tIfcWindowLiningProperties.SecondTransomOffset\tNUMBER\t\t17\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t43cca468-66c2-491b-a36c-f891aafbbd83\tIfcWindowLiningProperties.TransomThickness\tLENGTH\t\t17\t1\tIfcNonNegativeLengthMeasure\t1\r\n#\r\nGROUP\t18\tIfcWindowPanelProperties\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t02670d9e-cc6e-47b7-ab1d-bb61a515460d\tIfcWindowPanelProperties.FrameDepth\tLENGTH\t\t18\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t28649af1-d491-4ed6-98ce-d33f3a0e0650\tIfcWindowPanelProperties.FrameThickness\tLENGTH\t\t18\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc713faf1-20ad-485f-9448-6a6c05798a0d\tIfcWindowPanelProperties.OperationType\tTEXT\t\t18\t1\tIfcLabel\t1\r\nPARAM\t9a076e02-f029-4c39-aaa3-b35067475c67\tIfcWindowPanelProperties.PanelPosition\tTEXT\t\t18\t1\tIfcLabel\t1\r\n#\r\nGROUP\t19\tPset_ActionRequest\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf0b0c900-d1bc-11e1-8000-00215ad4efdf\tPset_ActionRequest.RequestComments\tTEXT\t\t19\t1\tIfcText\t1\r\nPARAM\t8c0bc2cf-c34c-46e5-8da4-4dc9d3268e70\tPset_ActionRequest.RequestDescription\tTEXT\t\t19\t1\tIfcText\t1\r\nPARAM\te098e980-d1bc-11e1-8000-00215ad4efdf\tPset_ActionRequest.RequestSourceLabel\tTEXT\t\t19\t1\tIfcLabel\t1\r\nPARAM\teabae800-d1bc-11e1-8000-00215ad4efdf\tPset_ActionRequest.RequestSourceName\tMULTILINETEXT\t\t19\t1\tIfcPerson\t1\r\nPARAM\t2db759d8-9ced-4100-8794-c73ba0aeff2f\tPset_ActionRequest.RequestSourceType\tTEXT\t\t19\t1\tPEnum_RequestSourceType\t1\r\nPARAM\t1e2f2317-f0c3-4ede-85a0-e9ea5ff680cd\tPset_ActionRequest.Status\tTEXT\t\t19\t1\tPEnum_RequestStatus\t1\r\n#\r\nGROUP\t20\tPset_ActorCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tffc56c44-f18f-42ce-b03b-cb77c9d66a04\tPset_ActorCommon.ActorCategory\tTEXT\t\t20\t1\tIfcLabel\t1\r\nPARAM\t06be8980-d1bd-11e1-8000-00215ad4efdf\tPset_ActorCommon.Category\tTEXT\t\t20\t1\tIfcLabel\t1\r\nPARAM\t00c8a880-d1bd-11e1-8000-00215ad4efdf\tPset_ActorCommon.NumberOfActors\tINTEGER\t\t20\t1\tIfcCountMeasure\t1\r\nPARAM\t0c1bd400-d1bd-11e1-8000-00215ad4efdf\tPset_ActorCommon.SkillLevel\tTEXT\t\t20\t1\tIfcLabel\t1\r\n#\r\nGROUP\t21\tPset_ActuatorPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t16d66900-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorPHistory.Position\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\r\nPARAM\td4b10e20-33ae-4027-88aa-13d94eca29f9\tPset_ActuatorPHistory.PositionHistory\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\r\nPARAM\t1b028680-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorPHistory.Quality\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\r\nPARAM\t50daeefe-5607-4f11-a1b5-f09f424e4ce1\tPset_ActuatorPHistory.QualityHistory\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\r\nPARAM\t1dfd7700-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorPHistory.Status\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\r\nPARAM\t76720899-bfca-4d7b-b2d0-f967965feb7d\tPset_ActuatorPHistory.StatusHistory\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t22\tPset_ActuatorTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te2ef4d8d-7c34-4cfb-ae24-d73f6da72bb7\tPset_ActuatorTypeCommon.ActuatorApplication\tTEXT\t\t22\t1\tPEnum_ActuatorApplication\t1\r\nPARAM\te25d05ee-413b-4ac2-9608-7b808fa428d2\tPset_ActuatorTypeCommon.ActuatorStatus\tTEXT\t\t22\t1\tPEnum_ElementStatus\t1\r\nPARAM\t3469a249-4193-4603-a1c9-c402d5623291\tPset_ActuatorTypeCommon.Application\tTEXT\t\t22\t1\tPEnum_ActuatorApplication\t1\r\nPARAM\t42595380-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeCommon.FailPosition\tTEXT\t\t22\t1\tPEnum_FailPosition\t1\r\nPARAM\t4dac7f00-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeCommon.ManualOverride\tYESNO\t\t22\t1\tIfcBoolean\t1\r\nPARAM\t2a81cf80-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeCommon.Reference\tTEXT\t\t22\t1\tIfcIdentifier\t1\r\nPARAM\t2f468380-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeCommon.Status\tTEXT\t\t22\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t23\tPset_ActuatorTypeElectricActuator\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t58ffaa80-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeElectricActuator.ActuatorInputPower\tNUMBER\t\t23\t1\tIfcPowerMeasure\t1\r\nPARAM\tc930e454-97ac-4b59-b549-a8a048fda2b1\tPset_ActuatorTypeElectricActuator.ControlPulseCurrent\tNUMBER\t\t23\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t5ef58b80-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeElectricActuator.ElectricActuatorType\tTEXT\t\t23\t1\tPEnum_ElectricActuatorType\t1\r\n#\r\nGROUP\t24\tPset_ActuatorTypeHydraulicActuator\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7af92d00-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeHydraulicActuator.InputFlowrate\tNUMBER\t\t24\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t759be280-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeHydraulicActuator.InputPressure\tNUMBER\t\t24\t1\tIfcPressureMeasure\t1\r\n#\r\nGROUP\t25\tPset_ActuatorTypeLinearActuation\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t877d8580-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeLinearActuation.Force\tNUMBER\t\t25\t1\tIfcForceMeasure\t1\r\nPARAM\t8cdad000-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeLinearActuation.Stroke\tLENGTH\t\t25\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t26\tPset_ActuatorTypePneumaticActuator\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta24ffa00-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypePneumaticActuator.InputFlowrate\tNUMBER\t\t26\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t9c5a1900-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypePneumaticActuator.InputPressure\tNUMBER\t\t26\t1\tIfcPressureMeasure\t1\r\n#\r\nGROUP\t27\tPset_ActuatorTypeRotationalActuation\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb8f65100-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeRotationalActuation.RangeAngle\tNUMBER\t\t27\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\tb1cf4300-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeRotationalActuation.Torque\tNUMBER\t\t27\t1\tIfcTorqueMeasure\t1\r\n#\r\nGROUP\t28\tPset_Address\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tea2ec196-d2db-4b2a-889d-7d807dca72cc\tPset_Address.AddressLines\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\r\nPARAM\t97739c9c-ad63-4799-b29d-8275969a38b5\tPset_Address.Country\tTEXT\t\t28\t1\tIfcLabel\t1\r\nPARAM\tec568eba-f3bd-4eff-a908-91d2d173b46d\tPset_Address.Description\tTEXT\t\t28\t1\tIfcText\t1\r\nPARAM\t7fcfd63c-4209-4426-ac6e-44cdf36a917b\tPset_Address.ElectronicMailAddresses\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\r\nPARAM\t3efdc176-b8d8-4ccc-a4d2-af24c550a5d7\tPset_Address.FacsimileNumbers\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\r\nPARAM\t4fb77032-0a1f-45b2-a4c0-8e29766d959f\tPset_Address.InternalLocation\tTEXT\t\t28\t1\tIfcLabel\t1\r\nPARAM\td8dba93f-a559-4116-ba98-f2f4b02a44ad\tPset_Address.MessagingIDs\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\r\nPARAM\t8e3df059-7dc5-4e23-953a-de12d3e924fc\tPset_Address.PagerNumber\tTEXT\t\t28\t1\tIfcLabel\t1\r\nPARAM\tf591c7f3-61e0-4aa0-ac11-1d29a2aa1908\tPset_Address.PostalBox\tTEXT\t\t28\t1\tIfcLabel\t1\r\nPARAM\t5def99a7-1f73-4704-9bc7-1f2b9a3451cf\tPset_Address.PostalCode\tTEXT\t\t28\t1\tIfcLabel\t1\r\nPARAM\t44ddba8f-2a25-4acf-b78c-9cae7c6e3c90\tPset_Address.Purpose\tTEXT\t\t28\t1\tPEnum_AddressType\t1\r\nPARAM\tff5e1171-1bc8-419a-9ca1-abe48a10cb56\tPset_Address.Region\tTEXT\t\t28\t1\tIfcLabel\t1\r\nPARAM\te79009b9-b18f-4314-a2ae-db4d23a41c93\tPset_Address.TelephoneNumbers\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\r\nPARAM\t920d734c-fa24-4413-aafb-c0521b9ba711\tPset_Address.Town\tTEXT\t\t28\t1\tIfcLabel\t1\r\nPARAM\t365218b5-2aae-4c3d-97ca-4d2fac3cc5a7\tPset_Address.UserDefinedPurpose\tTEXT\t\t28\t1\tIfcLabel\t1\r\nPARAM\t05c84b83-e6ce-4f80-8289-d8d051751867\tPset_Address.WWWHomePageURL\tURL\t\t28\t1\tIfcURIReference\t1\r\n#\r\nGROUP\t29\tPset_AirSideSystemInformation\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0ecaf900-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.AirflowSensible\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\td2bc70cb-ed82-40ee-a5c4-a21e1ea823f3\tPset_AirSideSystemInformation.AirFlowSensible\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\tf3f88480-d1bd-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.AirSideSystemDistributionType\tTEXT\t\t29\t1\tPEnum_AirSideSystemDistributionType\t1\r\nPARAM\td62b1f80-d1bd-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.AirSideSystemType\tTEXT\t\t29\t1\tPEnum_AirSideSystemType\t1\r\nPARAM\t31f5a880-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.ApplianceDiversity\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t43d74b80-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.CoolingTemperatureDelta\tNUMBER\t\t29\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\td0353e80-d1bd-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.Description\tTEXT\t\t29\t1\tIfcText\t1\r\nPARAM\t14284380-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.EnergyGainSensible\tNUMBER\t\t29\t1\tIfcPowerMeasure\t1\r\nPARAM\t08d51800-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.EnergyGainTotal\tNUMBER\t\t29\t1\tIfcPowerMeasure\t1\r\nPARAM\t1ab6bb00-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.EnergyLoss\tNUMBER\t\t29\t1\tIfcPowerMeasure\t1\r\nPARAM\t4fc30d80-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.FanPower\tNUMBER\t\t29\t1\tIfcPowerMeasure\t1\r\nPARAM\t3de16a80-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.HeatingTemperatureDelta\tNUMBER\t\t29\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t2609e680-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.InfiltrationDiversitySummer\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t2b673100-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.InfiltrationDiversityWinter\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t20ac9c00-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.LightingDiversity\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t37eb8980-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.LoadSafetyFactor\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tc9a6c700-d1bd-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.Name\tTEXT\t\t29\t1\tIfcLabel\t1\r\nPARAM\t0377cd80-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.TotalAirflow\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t2308b17a-7bee-4dde-b2fc-d20ba300755e\tPset_AirSideSystemInformation.TotalAirFlow\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t49cd2c80-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.Ventilation\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\r\n#\r\nGROUP\t30\tPset_AirTerminalBoxPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t68cbbe80-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxPHistory.AirflowCurve\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\r\nPARAM\tc761b8db-b75a-49f1-afd3-ef4457730182\tPset_AirTerminalBoxPHistory.AirFlowCurve\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\r\nPARAM\t61a4b080-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxPHistory.AtmosphericPressure\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\r\nPARAM\t5d789300-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxPHistory.DamperPosition\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\r\nPARAM\t65383780-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxPHistory.Sound\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t31\tPset_AirTerminalBoxTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8c8f0480-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.AirflowRateRange\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\r\nPARAM\t53b968f4-6d9f-4f8e-a063-0dc4f979036b\tPset_AirTerminalBoxTypeCommon.AirFlowRateRange\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\r\nPARAM\t99135d00-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.AirPressureRange\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\r\nPARAM\ta7617900-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.ArrangementType\tTEXT\t\t31\t1\tPEnum_AirTerminalBoxArrangementType\t1\r\nPARAM\td37cfa00-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.HasFan\tYESNO\t\t31\t1\tIfcBoolean\t1\r\nPARAM\tcd871900-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.HasReturnAir\tYESNO\t\t31\t1\tIfcBoolean\t1\r\nPARAM\tc829ce80-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.HasSoundAttenuator\tYESNO\t\t31\t1\tIfcBoolean\t1\r\nPARAM\te4c60680-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.HousingThickness\tLENGTH\t\t31\t1\tIfcLengthMeasure\t1\r\nPARAM\t2541b902-afca-4f97-b050-2df42d1f859e\tPset_AirTerminalBoxTypeCommon.Material\tMULTILINETEXT\t\t31\t1\tIfcMaterial\t1\r\nPARAM\ta16b9800-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.NominalAirFlowRate\tNUMBER\t\t31\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\tdf68bc00-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.NominalDamperDiameter\tLENGTH\t\t31\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td972db00-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.NominalInletAirPressure\tNUMBER\t\t31\t1\tIfcPressureMeasure\t1\r\nPARAM\teabbe780-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.OperationTemperatureRange\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\r\nPARAM\t76814400-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.Reference\tTEXT\t\t31\t1\tIfcIdentifier\t1\r\nPARAM\tb5af9500-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.ReheatType\tTEXT\t\t31\t1\tPEnum_AirTerminalBoxReheatType\t1\r\nPARAM\tf1e2f580-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.ReturnAirFractionRange\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\r\nPARAM\t7d0fbb80-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.Status\tTEXT\t\t31\t1\tPEnum_ElementStatus\t1\r\nPARAM\t6ed2531a-bc2f-4092-a9e9-1372f7805462\tPset_AirTerminalBoxTypeCommon.Weight\tNUMBER\t\t31\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t32\tPset_AirTerminalOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t89dd48d1-b318-4f25-99c1-2f06ce904666\tPset_AirTerminalOccurrence.AirFlowRate\tNUMBER\t\t32\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t00311180-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalOccurrence.AirflowType\tTEXT\t\t32\t1\tPEnum_AirTerminalAirflowType\t1\r\nPARAM\t7e718371-48bf-42c5-ac90-2db54674c2a8\tPset_AirTerminalOccurrence.AirFlowType\tTEXT\t\t32\t1\tPEnum_AirTerminalAirFlowType\t1\r\nPARAM\t89c46fde-3529-4d40-bc80-00359c777462\tPset_AirTerminalOccurrence.AirTerminalLocation\tTEXT\t\t32\t1\tPEnum_AirTerminalLocation\t1\r\nPARAM\t0fb05a80-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalOccurrence.Location\tTEXT\t\t32\t1\tPEnum_AirTerminalLocation\t1\r\n#\r\nGROUP\t33\tPset_AirTerminalPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2b1b6580-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.AirFlowRate\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\r\nPARAM\t80c9b247-5a67-4036-835a-d70c29bfbadb\tPset_AirTerminalPHistory.AirFlowRateHistory\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\r\nPARAM\t46867080-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.CenterlineAirVelocity\tMULTILINETEXT\t\t33\t1\tPropertyTableValue\t1\r\nPARAM\t3d959f00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.InductionRatio\tMULTILINETEXT\t\t33\t1\tPropertyTableValue\t1\r\nPARAM\t2eaeec80-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.NeckAirVelocity\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\r\nPARAM\t3a9aae80-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.PressureDrop\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\r\nPARAM\t366e9100-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.SupplyAirTemperatureCooling\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\r\nPARAM\t32db0a00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.SupplyAirTemperatureHeating\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t34\tPset_AirTerminalTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tddebc380-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.AirDiffusionPerformanceIndex\tNUMBER\t\t34\t1\tIfcReal\t1\r\nPARAM\tb72d8d00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.AirFlowrateRange\tMULTILINETEXT\t\t34\t1\tPropertyBoundedValue\t1\r\nPARAM\td7c1210a-6c7e-42bc-b25e-170fd92ba51f\tPset_AirTerminalTypeCommon.AirFlowRateRange\tMULTILINETEXT\t\t34\t1\tPropertyBoundedValue\t1\r\nPARAM\t505ca380-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.AirFlowrateVersusFlowControlElement\tMULTILINETEXT\t\t34\t1\tPropertyTableValue\t1\r\nPARAM\t7ae2932c-9d06-4cba-97fe-4ad256f4d580\tPset_AirTerminalTypeCommon.AirTerminalMountingType\tTEXT\t\t34\t1\tPEnum_AirTerminalMountingType\t1\r\nPARAM\t31d7c997-83b2-4ca9-8d48-636606ed5711\tPset_AirTerminalTypeCommon.AirTerminalShape\tTEXT\t\t34\t1\tPEnum_AirTerminalShape\t1\r\nPARAM\t1ab7ba80-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.CoreSetHorizontal\tNUMBER\t\t34\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t1f7c6e80-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.CoreSetVertical\tNUMBER\t\t34\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t070c5400-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.CoreType\tTEXT\t\t34\t1\tPEnum_AirTerminalCoreType\t1\r\nPARAM\tc6acd600-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.DischargeDirection\tTEXT\t\t34\t1\tPEnum_AirTerminalDischargeDirection\t1\r\nPARAM\t49ce2c00-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.EffectiveArea\tAREA\t\t34\t1\tIfcAreaMeasure\t1\r\nPARAM\t7b92c300-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.FaceType\tTEXT\t\t34\t1\tPEnum_AirTerminalFaceType\t1\r\nPARAM\tf065fd00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.FinishColor\tTEXT\t\t34\t1\tIfcLabel\t1\r\nPARAM\t6b445b69-ab09-4efc-841c-81778d98f369\tPset_AirTerminalTypeCommon.FinishColour\tTEXT\t\t34\t1\tIfcLabel\t1\r\nPARAM\te3490e00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.FinishType\tTEXT\t\t34\t1\tPEnum_AirTerminalFinishType\t1\r\nPARAM\t2a370380-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.FlowControlType\tTEXT\t\t34\t1\tPEnum_AirTerminalFlowControlType\t1\r\nPARAM\ta250f980-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.FlowPattern\tTEXT\t\t34\t1\tPEnum_AirTerminalFlowPattern\t1\r\nPARAM\t25724f80-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.HasIntegralControl\tYESNO\t\t34\t1\tIfcBoolean\t1\r\nPARAM\t39b64c80-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.HasSoundAttenuator\tYESNO\t\t34\t1\tIfcBoolean\t1\r\nPARAM\t3f139700-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.HasThermalInsulation\tYESNO\t\t34\t1\tIfcBoolean\t1\r\nPARAM\t33956234-46ca-44bc-b8dc-5a3cb86a4cbe\tPset_AirTerminalTypeCommon.Material\tMULTILINETEXT\t\t34\t1\tIfcMaterial\t1\r\nPARAM\tf6f47480-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.MountingType\tTEXT\t\t34\t1\tPEnum_AirTerminalMountingType\t1\r\nPARAM\t4470e180-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.NeckArea\tAREA\t\t34\t1\tIfcAreaMeasure\t1\r\nPARAM\t9c5b1880-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.NumberOfSlots\tINTEGER\t\t34\t1\tIfcCountMeasure\t1\r\nPARAM\t5605b980-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.Reference\tTEXT\t\t34\t1\tIfcIdentifier\t1\r\nPARAM\t6b7ae380-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.Shape\tTEXT\t\t34\t1\tPEnum_AirTerminalShape\t1\r\nPARAM\t96653780-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.SlotLength\tLENGTH\t\t34\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9107ed00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.SlotWidth\tLENGTH\t\t34\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t5c943100-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.Status\tTEXT\t\t34\t1\tPEnum_ElementStatus\t1\r\nPARAM\tbe549b00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.TemperatureRange\tMULTILINETEXT\t\t34\t1\tPropertyBoundedValue\t1\r\nPARAM\td4faf200-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.ThrowLength\tLENGTH\t\t34\t1\tIfcLengthMeasure\t1\r\nPARAM\tc643b188-6fcb-4295-afe2-f8b2a8ec4741\tPset_AirTerminalTypeCommon.Weight\tNUMBER\t\t34\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t35\tPset_AirTerminalTypeRectangular\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf8e35078-32bf-4ace-a622-cbdf35eaeafd\tPset_AirTerminalTypeRectangular.FaceType\tTEXT\t\t35\t1\tPEnum_AirTerminalFaceType\t1\r\n#\r\nGROUP\t36\tPset_AirTerminalTypeRound\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3c0c07b7-7b11-4baa-8bf6-21f49fbb96e4\tPset_AirTerminalTypeRound.FaceType\tTEXT\t\t36\t1\tPEnum_AirTerminalFaceType\t1\r\n#\r\nGROUP\t37\tPset_AirTerminalTypeSlot\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf87a0706-b001-40e0-a33e-461e74301bb1\tPset_AirTerminalTypeSlot.NumberOfSlots\tINTEGER\t\t37\t1\tIfcInteger\t1\r\nPARAM\tcc47ea83-7381-4059-ad6c-6c06ff1d0a31\tPset_AirTerminalTypeSlot.SlotLength\tLENGTH\t\t37\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9d5cd335-d12b-4a71-b8c1-3a55bb99c000\tPset_AirTerminalTypeSlot.SlotWidth\tLENGTH\t\t37\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t38\tPset_AirTerminalTypeSquare\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t27497358-c7b5-4532-82e1-83b21f708b10\tPset_AirTerminalTypeSquare.FaceType\tTEXT\t\t38\t1\tPEnum_AirTerminalFaceType\t1\r\n#\r\nGROUP\t39\tPset_AirToAirHeatRecoveryPHist\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t27eb9571-b1ec-4dc8-878d-a3ed3222b6ee\tPset_AirToAirHeatRecoveryPHist.AirPressureDropCurves\tNUMBER\t\t39\t1\tIfcReal\t1\r\nPARAM\tefb4407f-31fc-40ec-97bb-736b463d3f13\tPset_AirToAirHeatRecoveryPHist.DefrostTemperatureEffectiveness\tNUMBER\t\t39\t1\tIfcReal\t1\r\nPARAM\td57b9973-d2f5-46d3-a06a-85cf0c08ead7\tPset_AirToAirHeatRecoveryPHist.HumidityEffectiveness\tTEXT\t\t39\t1\tIfcLabel\t1\r\nPARAM\ta152c3e4-634a-4107-a4de-2a272c18b9f9\tPset_AirToAirHeatRecoveryPHist.LatentHeatTransferRate\tNUMBER\t\t39\t1\tIfcReal\t1\r\nPARAM\t3e9c1eb9-4716-48ad-8230-53b12de5f41e\tPset_AirToAirHeatRecoveryPHist.SensibleEffectiveness\tTEXT\t\t39\t1\tIfcLabel\t1\r\nPARAM\t4f028650-adb3-49c1-a52b-22d477ed500f\tPset_AirToAirHeatRecoveryPHist.SensibleEffectivenessTable\tTEXT\t\t39\t1\tIfcLabel\t1\r\nPARAM\t007eac23-159e-439f-99bb-e3ba5aec66c1\tPset_AirToAirHeatRecoveryPHist.SensibleHeatTransferRate\tNUMBER\t\t39\t1\tIfcReal\t1\r\nPARAM\t9b52b73c-93dd-4a4c-9c07-df156aaca8fc\tPset_AirToAirHeatRecoveryPHist.TemperatureEffectiveness\tNUMBER\t\t39\t1\tIfcReal\t1\r\nPARAM\tabac66cb-607a-462e-b17e-797852a90084\tPset_AirToAirHeatRecoveryPHist.TotalEffectiveness\tTEXT\t\t39\t1\tIfcLabel\t1\r\nPARAM\t62082fd3-1099-4f12-9633-2c49087c885c\tPset_AirToAirHeatRecoveryPHist.TotalEffectivenessTable\tTEXT\t\t39\t1\tIfcLabel\t1\r\nPARAM\t4cb9f2c4-2567-44c2-b63c-dce12a8e9156\tPset_AirToAirHeatRecoveryPHist.TotalHeatTransferRate\tNUMBER\t\t39\t1\tIfcReal\t1\r\n#\r\nGROUP\t40\tPset_AirToAirHeatRecoveryPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t86018c80-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.AirPressureDropCurves\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\r\nPARAM\t6c604500-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.DefrostTemperatureEffectiveness\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\r\nPARAM\t6f5b3580-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.HumidityEffectiveness\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\r\nPARAM\t77b37080-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.LatentHeatTransferRate\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\r\nPARAM\t60748300-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.SensibleEffectiveness\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\r\nPARAM\t7eda7e80-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.SensibleEffectivenessTable\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\r\nPARAM\t73875300-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.SensibleHeatTransferRate\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\r\nPARAM\t679b9100-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.TemperatureEffectiveness\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\r\nPARAM\t64080a00-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.TotalEffectiveness\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\r\nPARAM\t826e0580-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.TotalEffectivenessTable\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\r\nPARAM\t7b46f780-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.TotalHeatTransferRate\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t41\tPset_AirToAirHeatRecoveryTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb77a5800-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.HasDefrost\tYESNO\t\t41\t1\tIfcBoolean\t1\r\nPARAM\ta893a580-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.HeatTransferType\tTEXT\t\t41\t1\tPEnum_HeatTransferType\t1\r\nPARAM\t346af719-a0a9-4f7f-a9ab-851e048f1fe9\tPset_AirToAirHeatRecoveryTypeCommon.HeatTransferTypeEnum\tTEXT\t\t41\t1\tPEnum_AirToAirHeatTransferHeatTransferType\t1\r\nPARAM\tf73bc628-554c-4f5b-b61a-17163f69fd5b\tPset_AirToAirHeatRecoveryTypeCommon.MediaMaterial\tMULTILINETEXT\t\t41\t1\tIfcMaterial\t1\r\nPARAM\tbea16600-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.OperationalTemperatureRange\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\r\nPARAM\td1b43600-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.PrimaryAirflowRateRange\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\r\nPARAM\tc947c84d-7844-4ecd-852c-efae8ae50d32\tPset_AirToAirHeatRecoveryTypeCommon.PrimaryAirFlowRateRange\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\r\nPARAM\t9285e500-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.Reference\tTEXT\t\t41\t1\tIfcIdentifier\t1\r\nPARAM\tdb3d9e00-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.SecondaryAirflowRateRange\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\r\nPARAM\ta693241a-b8fd-460c-9e20-51887fe3144c\tPset_AirToAirHeatRecoveryTypeCommon.SecondaryAirFlowRateRange\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\r\nPARAM\t987bc600-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.Status\tTEXT\t\t41\t1\tPEnum_ElementStatus\t1\r\nPARAM\t4ebb5f4f-ca9e-4b83-b165-2789d7056674\tPset_AirToAirHeatRecoveryTypeCommon.Weight\tNUMBER\t\t41\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t42\tPset_AlarmPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf90b0300-d1c0-11e1-8000-00215ad4efdf\tPset_AlarmPHistory.Acknowledge\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\r\nPARAM\tef819b00-d1c0-11e1-8000-00215ad4efdf\tPset_AlarmPHistory.Condition\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\r\nPARAM\t9ed9b03d-1275-49da-a05a-d9c6a4efe2b6\tPset_AlarmPHistory.ConditionHistory\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\r\nPARAM\tea245080-d1c0-11e1-8000-00215ad4efdf\tPset_AlarmPHistory.Enabled\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\r\nPARAM\tf3adb880-d1c0-11e1-8000-00215ad4efdf\tPset_AlarmPHistory.Severity\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\r\nPARAM\tfc9e8a00-d1c0-11e1-8000-00215ad4efdf\tPset_AlarmPHistory.User\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\r\nPARAM\t721fbb3d-3c3b-435d-a154-44715ab19249\tPset_AlarmPHistory.UserHistory\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t43\tPset_AlarmTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t6601212c-85b8-4738-95fe-ba4b511a3027\tPset_AlarmTypeCommon.AlarmCondition\tMULTILINETEXT\t\t43\t1\tPropertyTableValue\t1\r\nPARAM\t222b9380-d1c1-11e1-8000-00215ad4efdf\tPset_AlarmTypeCommon.Condition\tMULTILINETEXT\t\t43\t1\tPropertyTableValue\t1\r\nPARAM\t088a4c00-d1c1-11e1-8000-00215ad4efdf\tPset_AlarmTypeCommon.Reference\tTEXT\t\t43\t1\tIfcIdentifier\t1\r\nPARAM\t0e802d00-d1c1-11e1-8000-00215ad4efdf\tPset_AlarmTypeCommon.Status\tTEXT\t\t43\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t44\tPset_AlignmentCantSegmentCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta23e9bff-3693-4649-9c3e-275e24c80592\tPset_AlignmentCantSegmentCommon.CantDeficiency\tLENGTH\t\t44\t1\tIfcLengthMeasure\t1\r\nPARAM\t1affb6d3-07ef-445d-aa95-86e014adcf7a\tPset_AlignmentCantSegmentCommon.CantEquilibrium\tLENGTH\t\t44\t1\tIfcLengthMeasure\t1\r\nPARAM\ta5f7df81-4437-4975-a1d8-a3fae03aa345\tPset_AlignmentCantSegmentCommon.EndSmoothingLength\tLENGTH\t\t44\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc99f39c4-d58f-45e7-9672-a39c19756aa4\tPset_AlignmentCantSegmentCommon.StartSmoothingLength\tLENGTH\t\t44\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t45\tPset_AlignmentVerticalSegmentCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8b43e046-d620-4c62-8fd1-c94d5caa7b83\tPset_AlignmentVerticalSegmentCommon.EndElevation\tLENGTH\t\t45\t1\tIfcLengthMeasure\t1\r\nPARAM\tcffd7763-9d2a-4606-bce2-fe53daf86bfa\tPset_AlignmentVerticalSegmentCommon.StartElevation\tLENGTH\t\t45\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t46\tPset_AnalogInput\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tfa6452bc-f5fc-4e69-90e8-89a36533dff7\tPset_AnalogInput.Deadband\tNUMBER\t\t46\t1\tIfcReal\t1\r\nPARAM\tb89abf03-3a4a-45f4-933d-8d7dc547605f\tPset_AnalogInput.EventEnable\tTEXT\t\t46\t1\tPEnum_BACnetEventEnableType\t1\r\nPARAM\t16f1b03c-c21f-45b6-824b-ad86b447ce68\tPset_AnalogInput.HighLimit\tNUMBER\t\t46\t1\tIfcReal\t1\r\nPARAM\t1aeb83e6-5776-4946-9070-0b95b1b800c0\tPset_AnalogInput.HighLimitEnable\tYESNO\t\t46\t1\tIfcBoolean\t1\r\nPARAM\t941278cb-7b6a-4457-994b-b3b168148654\tPset_AnalogInput.LowLimit\tNUMBER\t\t46\t1\tIfcReal\t1\r\nPARAM\tf4913bac-ae18-475a-818d-8e27a1d3cbbe\tPset_AnalogInput.LowLimitEnable\tYESNO\t\t46\t1\tIfcBoolean\t1\r\nPARAM\t116a96bd-30ce-4ac9-8252-f8c05867fbd7\tPset_AnalogInput.NotifyType\tTEXT\t\t46\t1\tPEnum_BACnetNotifyType\t1\r\n#\r\nGROUP\t47\tPset_AnalogOutput\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5f8d29eb-3002-407d-b4aa-7bef6e0f3848\tPset_AnalogOutput.Deadband\tNUMBER\t\t47\t1\tIfcReal\t1\r\nPARAM\tb570c8a8-bf39-4bce-b34c-2584b56b22fa\tPset_AnalogOutput.EventEnable\tTEXT\t\t47\t1\tPEnum_BACnetEventEnableType\t1\r\nPARAM\t5af76e92-19df-4973-95bb-a92ed243cf82\tPset_AnalogOutput.HighLimit\tNUMBER\t\t47\t1\tIfcReal\t1\r\nPARAM\t1f1acbc3-10ac-4f71-b04e-69aebf2f6a50\tPset_AnalogOutput.HighLimitEnable\tYESNO\t\t47\t1\tIfcBoolean\t1\r\nPARAM\t9376633f-755e-4875-9be2-a4cf2b3c6fe7\tPset_AnalogOutput.LowLimit\tNUMBER\t\t47\t1\tIfcReal\t1\r\nPARAM\t58d9b0f5-b4ea-4953-9d49-46fd6d8fb3b0\tPset_AnalogOutput.LowLimitEnable\tYESNO\t\t47\t1\tIfcBoolean\t1\r\nPARAM\t696e2703-b189-49ae-9014-2cab876d3b01\tPset_AnalogOutput.NotifyType\tTEXT\t\t47\t1\tPEnum_BACnetNotifyType\t1\r\n#\r\nGROUP\t48\tPset_AnnotationContourLine\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t340d3680-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationContourLine.ContourValue\tLENGTH\t\t48\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t49\tPset_AnnotationLineOfSight\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t51da9b80-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationLineOfSight.RoadVisibleDistanceLeft\tLENGTH\t\t49\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t57d07c80-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationLineOfSight.RoadVisibleDistanceRight\tLENGTH\t\t49\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t41c2bc00-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationLineOfSight.SetbackDistance\tLENGTH\t\t49\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t47b89d00-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationLineOfSight.VisibleAngleLeft\tANGLE\t\t49\t1\tIfcPositivePlaneAngleMeasure\t1\r\nPARAM\t4d15e780-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationLineOfSight.VisibleAngleRight\tANGLE\t\t49\t1\tIfcPositivePlaneAngleMeasure\t1\r\n#\r\nGROUP\t50\tPset_AnnotationSurveyArea\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7cc4ef80-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationSurveyArea.AccuracyQualityExpected\tNUMBER\t\t50\t1\tIfcRatioMeasure\t1\r\nPARAM\t76cf0e80-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationSurveyArea.AccuracyQualityObtained\tNUMBER\t\t50\t1\tIfcRatioMeasure\t1\r\nPARAM\t63bc3e80-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationSurveyArea.AcquisitionMethod\tTEXT\t\t50\t1\tPEnum_AcquisitionMethod\t1\r\n#\r\nGROUP\t51\tPset_Asset\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8a7a7500-d1c1-11e1-8000-00215ad4efdf\tPset_Asset.AssetAccountingType\tTEXT\t\t51\t1\tPEnum_AssetAccountingType\t1\r\nPARAM\ta847da00-d1c1-11e1-8000-00215ad4efdf\tPset_Asset.AssetInsuranceType\tTEXT\t\t51\t1\tPEnum_AssetInsuranceType\t1\r\nPARAM\t123c173e-3473-4bbe-b653-310a1ad57bed\tPset_Asset.AssetStatus\tTEXT\t\t51\t1\tIfcLabel\t1\r\nPARAM\t99f9be00-d1c1-11e1-8000-00215ad4efdf\tPset_Asset.AssetTaxType\tTEXT\t\t51\t1\tPEnum_AssetTaxType\t1\r\nPARAM\t25b34da7-711d-4b4a-98a6-d163fe12deca\tPset_Asset.AssetUse\tTEXT\t\t51\t1\tIfcLabel\t1\r\n#\r\nGROUP\t52\tPset_AudioVisualAppliancePHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tcad9f300-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualAppliancePHistory.AudioVolume\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\r\nPARAM\t2a00533c-1599-4ea4-8878-78dd45fad9c6\tPset_AudioVisualAppliancePHistory.AudioVolumeHistory\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\r\nPARAM\tc7466c00-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualAppliancePHistory.MediaContent\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\r\nPARAM\tc31a4e80-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualAppliancePHistory.MediaSource\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\r\nPARAM\t945d7b54-c44e-4105-8ca7-fa39235aa755\tPset_AudioVisualAppliancePHistory.MediaSourceHistory\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\r\nPARAM\tbd246d80-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualAppliancePHistory.PowerState\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t53\tPset_AudioVisualApplianceTypeAmplifier\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td7f6e200-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeAmplifier.AmplifierType\tTEXT\t\t53\t1\tPEnum_AudioVisualAmplifierType\t1\r\nPARAM\te644fe00-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeAmplifier.AudioAmplification\tMULTILINETEXT\t\t53\t1\tPropertyTableValue\t1\r\nPARAM\tee9d3900-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeAmplifier.AudioMode\tMULTILINETEXT\t\t53\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t54\tPset_AudioVisualApplianceTypeCamera\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tfeb51880-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.CameraType\tTEXT\t\t54\t1\tPEnum_AudioVisualCameraType\t1\r\nPARAM\t0e346180-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.IsOutdoors\tYESNO\t\t54\t1\tIfcBoolean\t1\r\nPARAM\t34f29800-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.PanHorizontal\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\r\nPARAM\t2d32f380-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.PanTiltZoomPreset\tMULTILINETEXT\t\t54\t1\tPropertyTableValue\t1\r\nPARAM\t3c19a600-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.PanVertical\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\r\nPARAM\t42a81d80-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.TiltHorizontal\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\r\nPARAM\t489dfe80-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.TiltVertical\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\r\nPARAM\t25734f00-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.VideoCaptureInterval\tMULTILINETEXT\t\t54\t1\tPropertyTableValue\t1\r\nPARAM\t18eef680-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.VideoResolutionHeight\tINTEGER\t\t54\t1\tIfcInteger\t1\r\nPARAM\t1e4c4100-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.VideoResolutionMode\tMULTILINETEXT\t\t54\t1\tPropertyTableValue\t1\r\nPARAM\t1391ac00-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.VideoResolutionWidth\tINTEGER\t\t54\t1\tIfcInteger\t1\r\nPARAM\t4e93df80-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.Zoom\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t55\tPset_AudioVisualApplianceTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t797e3380-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCommon.AudioVolume\tMULTILINETEXT\t\t55\t1\tPropertyTableValue\t1\r\nPARAM\t7125f880-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCommon.MediaSource\tMULTILINETEXT\t\t55\t1\tPropertyTableValue\t1\r\nPARAM\t5bb0ce80-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCommon.Reference\tTEXT\t\t55\t1\tIfcIdentifier\t1\r\nPARAM\t61a6af80-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCommon.Status\tTEXT\t\t55\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t56\tPset_AudioVisualApplianceTypeDisplay\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf6111200-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.AudioMode\tMULTILINETEXT\t\t56\t1\tPropertyTableValue\t1\r\nPARAM\tab8f9580-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.Brightness\tNUMBER\t\t56\t1\tIfcIlluminanceMeasure\t1\r\nPARAM\tb0ece000-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.ContrastRatio\tNUMBER\t\t56\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\ta6cae180-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.DisplayHeight\tLENGTH\t\t56\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t8864e600-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.DisplayType\tTEXT\t\t56\t1\tPEnum_AudioVisualDisplayType\t1\r\nPARAM\ta03c6a00-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.DisplayWidth\tLENGTH\t\t56\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t99adf280-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.NominalSize\tLENGTH\t\t56\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb77b5780-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.RefreshRate\tNUMBER\t\t56\t1\tIfcFrequencyMeasure\t1\r\nPARAM\tbc400b80-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.TouchScreen\tTEXT\t\t56\t1\tPEnum_AudioVisualDisplayTouchScreen\t1\r\nPARAM\tedb8d700-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.VideoCaptionMode\tMULTILINETEXT\t\t56\t1\tPropertyTableValue\t1\r\nPARAM\td2e66280-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.VideoResolutionHeight\tINTEGER\t\t56\t1\tIfcInteger\t1\r\nPARAM\tda0d7080-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.VideoResolutionMode\tMULTILINETEXT\t\t56\t1\tPropertyTableValue\t1\r\nPARAM\tcbbf5480-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.VideoResolutionWidth\tINTEGER\t\t56\t1\tIfcInteger\t1\r\nPARAM\te42f6f00-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.VideoScaleMode\tMULTILINETEXT\t\t56\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t57\tPset_AudioVisualApplianceTypePlayer\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1214b380-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypePlayer.PlayerMediaEject\tYESNO\t\t57\t1\tIfcBoolean\t1\r\nPARAM\t18a32b00-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypePlayer.PlayerMediaFormat\tMULTILINETEXT\t\t57\t1\tPropertyTableValue\t1\r\nPARAM\t04f7c480-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypePlayer.PlayerType\tTEXT\t\t57\t1\tPEnum_AudioVisualPlayerType\t1\r\n#\r\nGROUP\t58\tPset_AudioVisualApplianceTypeProjector\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t28bb0a80-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeProjector.ProjectorType\tTEXT\t\t58\t1\tPEnum_AudioVisualProjectorType\t1\r\nPARAM\t54d68b80-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeProjector.VideoCaptionMode\tMULTILINETEXT\t\t58\t1\tPropertyTableValue\t1\r\nPARAM\t3a9cad80-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeProjector.VideoResolutionHeight\tINTEGER\t\t58\t1\tIfcInteger\t1\r\nPARAM\t412b2500-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeProjector.VideoResolutionMode\tMULTILINETEXT\t\t58\t1\tPropertyTableValue\t1\r\nPARAM\t34a6cc80-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeProjector.VideoResolutionWidth\tINTEGER\t\t58\t1\tIfcInteger\t1\r\nPARAM\t4b4d2380-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeProjector.VideoScaleMode\tMULTILINETEXT\t\t58\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t59\tPset_AudioVisualApplianceTypeRailwayCommunicationTerminal\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1cbdc8ed-b11b-4554-a5be-c8ae0aabfe39\tPset_AudioVisualApplianceTypeRailwayCommunicationTerminal.RailwayCommunicationTerminalType\tTEXT\t\t59\t1\tPEnum_RailwayCommunicationTerminalType\t1\r\n#\r\nGROUP\t60\tPset_AudioVisualApplianceTypeReceiver\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7a639500-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeReceiver.AudioAmplification\tMULTILINETEXT\t\t60\t1\tPropertyTableValue\t1\r\nPARAM\t83546680-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeReceiver.AudioMode\tMULTILINETEXT\t\t60\t1\tPropertyTableValue\t1\r\nPARAM\t6a4bb580-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeReceiver.ReceiverType\tTEXT\t\t60\t1\tPEnum_AudioVisualReceiverType\t1\r\n#\r\nGROUP\t61\tPset_AudioVisualApplianceTypeRecordingEquipment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tfabb165d-5cfa-42cf-92ae-9e5ef0a32de1\tPset_AudioVisualApplianceTypeRecordingEquipment.NumberOfInterfaces\tMULTILINETEXT\t\t61\t1\tPropertyTableValue\t1\r\nPARAM\tdca9d920-2d79-480f-a8cb-721f7fc4ab88\tPset_AudioVisualApplianceTypeRecordingEquipment.StorageCapacity\tINTEGER\t\t61\t1\tIfcInteger\t1\r\n#\r\nGROUP\t62\tPset_AudioVisualApplianceTypeSpeaker\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc0b8f400-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeSpeaker.FrequencyResponse\tMULTILINETEXT\t\t62\t1\tPropertyTableValue\t1\r\nPARAM\tc7e00200-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeSpeaker.Impedence\tNUMBER\t\t62\t1\tIfcFrequencyMeasure\t1\r\nPARAM\tb860b900-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeSpeaker.SpeakerDriverSize\tMULTILINETEXT\t\t62\t1\tPropertyTableValue\t1\r\nPARAM\ta717ac80-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeSpeaker.SpeakerMounting\tTEXT\t\t62\t1\tPEnum_AudioVisualSpeakerMounting\t1\r\nPARAM\t949d7300-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeSpeaker.SpeakerType\tTEXT\t\t62\t1\tPEnum_AudioVisualSpeakerType\t1\r\n#\r\nGROUP\t63\tPset_AudioVisualApplianceTypeTuner\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tea721b00-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeTuner.TunerChannel\tMULTILINETEXT\t\t63\t1\tPropertyTableValue\t1\r\nPARAM\tf231bf80-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeTuner.TunerFrequency\tMULTILINETEXT\t\t63\t1\tPropertyBoundedValue\t1\r\nPARAM\te219e000-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeTuner.TunerMode\tMULTILINETEXT\t\t63\t1\tPropertyTableValue\t1\r\nPARAM\td3cbc400-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeTuner.TunerType\tTEXT\t\t63\t1\tPEnum_AudioVisualTunerType\t1\r\n#\r\nGROUP\t64\tPset_AxleCountingEquipment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7e4af011-0995-40b0-9a1b-acccc8c052bd\tPset_AxleCountingEquipment.AxleCounterResponseTime\tNUMBER\t\t64\t1\tIfcTimeMeasure\t1\r\nPARAM\ta1d406e8-3383-49e4-8733-04a11dd25032\tPset_AxleCountingEquipment.AxleCountingEquipmentType\tTEXT\t\t64\t1\tPEnum_AxleCountingEquipmentType\t1\r\nPARAM\t13e8fb4e-5dbd-4bb1-884a-06d7a1bfeb4d\tPset_AxleCountingEquipment.DetectionRange\tLENGTH\t\t64\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t46277aa1-4427-4427-8c9f-bfe9ae101ed0\tPset_AxleCountingEquipment.FailureInformation\tTEXT\t\t64\t1\tIfcText\t1\r\nPARAM\t11544080-0acb-4baf-9a84-f267b65f9136\tPset_AxleCountingEquipment.ImpactParameter\tNUMBER\t\t64\t1\tIfcAccelerationMeasure\t1\r\nPARAM\tb45e911f-484e-400d-b9ac-a9ab3665db6b\tPset_AxleCountingEquipment.InsulationResistance\tNUMBER\t\t64\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\t77f7f7ec-da4a-4d26-9dff-7e37c647724c\tPset_AxleCountingEquipment.MaximumVibration\tNUMBER\t\t64\t1\tIfcFrequencyMeasure\t1\r\nPARAM\t25ff24fe-70ef-4d97-8596-2dc3bfa15b52\tPset_AxleCountingEquipment.NominalWeight\tNUMBER\t\t64\t1\tIfcMassMeasure\t1\r\nPARAM\te9209757-9524-4a55-9ab9-75e2eacbc128\tPset_AxleCountingEquipment.OperationalTemperatureRange\tMULTILINETEXT\t\t64\t1\tPropertyBoundedValue\t1\r\nPARAM\te216aa62-5545-4e1d-ae9c-31d1220d3033\tPset_AxleCountingEquipment.RatedVoltage\tMULTILINETEXT\t\t64\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t65\tPset_BalanceWeightTensionerDesignCriteria\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tce571ac6-08c5-4042-9744-0792cc872e02\tPset_BalanceWeightTensionerDesignCriteria.ReferenceDistanceRopeToPulley\tMULTILINETEXT\t\t65\t1\tPropertyTableValue\t1\r\nPARAM\t1c5a06a9-6da9-4efb-863c-b9f92a08e463\tPset_BalanceWeightTensionerDesignCriteria.ReferenceDistanceTensionerToGround\tMULTILINETEXT\t\t65\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t66\tPset_BeamCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t38871e80-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.FireRating\tTEXT\t\t66\t1\tIfcLabel\t1\r\nPARAM\t286f3f00-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.IsExternal\tYESNO\t\t66\t1\tIfcBoolean\t1\r\nPARAM\t33c26a80-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.LoadBearing\tYESNO\t\t66\t1\tIfcBoolean\t1\r\nPARAM\t04abf900-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.Reference\tTEXT\t\t66\t1\tIfcIdentifier\t1\r\nPARAM\t23aa8b00-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.Roll\tNUMBER\t\t66\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t1ee5d700-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.Slope\tNUMBER\t\t66\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t19888c80-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.Span\tLENGTH\t\t66\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t0970ad00-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.Status\tTEXT\t\t66\t1\tPEnum_ElementStatus\t1\r\nPARAM\t2f964d00-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.ThermalTransmittance\tNUMBER\t\t66\t1\tIfcThermalTransmittanceMeasure\t1\r\n#\r\nGROUP\t67\tPset_BearingCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7e9369a5-1430-4187-8887-df92bc5051ee\tPset_BearingCommon.DisplacementAccommodated\tMULTILINETEXT\t\t67\t1\tPropertyListValue\t1\r\nPARAM\tb72dcbe7-2c40-4f19-87dd-1b5f9b2e8b3f\tPset_BearingCommon.RotationAccommodated\tMULTILINETEXT\t\t67\t1\tPropertyListValue\t1\r\n#\r\nGROUP\t68\tPset_BerthCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4edc66f2-8dd0-4bb3-9194-f702c5012f8f\tPset_BerthCommon.AbnormalBerthingFactor\tNUMBER\t\t68\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t3c248ea7-2b1b-41a7-8b75-7af90d8dabe0\tPset_BerthCommon.BerthApproach\tTEXT\t\t68\t1\tPEnum_BerthApproach\t1\r\nPARAM\t2ac88a60-3ec4-474b-95f5-144bd5ddcb7f\tPset_BerthCommon.BerthingAngle\tNUMBER\t\t68\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t8265c010-552d-4420-aa76-cb4f9d58e87f\tPset_BerthCommon.BerthingVelocity\tNUMBER\t\t68\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\tad0cdce9-e8a7-417a-a085-b628657a834a\tPset_BerthCommon.BerthMode\tTEXT\t\t68\t1\tPEnum_BerthMode\t1\r\n#\r\nGROUP\t69\tPset_BinaryInput\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2c503c85-1756-40ab-adb2-28f5f5ae7d83\tPset_BinaryInput.AckedTransitions\tTEXT\t\t69\t1\tPEnum_BACnetAckedTransitionsType\t1\r\nPARAM\t1a3e38ee-c9c2-4859-8a45-84d996b2b134\tPset_BinaryInput.ActiveText\tTEXT\t\t69\t1\tIfcText\t1\r\nPARAM\t5b202d39-7855-45db-a4f2-856632d25bca\tPset_BinaryInput.EventEnable\tTEXT\t\t69\t1\tPEnum_BACnetEventEnableType\t1\r\nPARAM\t42343ab0-3652-4b37-ac7d-f6bf58b18e9f\tPset_BinaryInput.FeedbackValue\tTEXT\t\t69\t1\tPEnum_BACnetFeedbackValueType\t1\r\nPARAM\t22a15ce5-b93a-4076-b27c-92c101df0f56\tPset_BinaryInput.InactiveText\tTEXT\t\t69\t1\tIfcText\t1\r\nPARAM\t70d91f81-223b-4340-aa24-7ddb34225af9\tPset_BinaryInput.MinimumOffTime\tMULTILINETEXT\t\t69\t1\tIfcLocalTime\t1\r\nPARAM\t693f586d-f51b-44f8-8829-cc0597359530\tPset_BinaryInput.MinimumOnTime\tMULTILINETEXT\t\t69\t1\tIfcLocalTime\t1\r\nPARAM\td085e864-df23-44ce-81d5-265d936c84a9\tPset_BinaryInput.Polarity\tTEXT\t\t69\t1\tPEnum_PolarityEnum\t1\r\n#\r\nGROUP\t70\tPset_BinaryOutput\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t55bc2a15-2281-4163-8c2f-c04c81ee3660\tPset_BinaryOutput.AckedTransitions\tTEXT\t\t70\t1\tPEnum_BACnetAckedTransitionsType\t1\r\nPARAM\t72ebf169-14ae-4fc9-bc57-0ab5a89b467b\tPset_BinaryOutput.ActiveText\tTEXT\t\t70\t1\tIfcText\t1\r\nPARAM\t3bb0add6-67f9-4b5f-bf8c-8ee25ec3acaa\tPset_BinaryOutput.AlarmValue\tTEXT\t\t70\t1\tPEnum_BACnetAlarmValueType\t1\r\nPARAM\te2d0b69b-dbd9-44d1-9211-5f6781c79da2\tPset_BinaryOutput.EventEnable\tTEXT\t\t70\t1\tPEnum_BACnetEventEnableType\t1\r\nPARAM\t0fff6369-ff2a-4402-bbe6-6e4a3e1e74cb\tPset_BinaryOutput.InactiveText\tTEXT\t\t70\t1\tIfcText\t1\r\nPARAM\t8b3e2a79-7f23-4d65-ad66-4ff1f264f923\tPset_BinaryOutput.Polarity\tTEXT\t\t70\t1\tPEnum_PolarityEnum\t1\r\n#\r\nGROUP\t71\tPset_BoilerPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5bb1ce00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.AuxiliaryEnergyConsumption\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\r\nPARAM\t584b2054-6000-45d4-8f3b-50e906f96a88\tPset_BoilerPHistory.CombustionChamberTemperature\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\r\nPARAM\t4a68c180-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.CombustionEfficiency\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\r\nPARAM\t50f73900-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.CombustionTemperature\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\r\nPARAM\t43da4a00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.EnergySourceConsumption\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\r\nPARAM\t56548380-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.Load\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\r\nPARAM\t476dd100-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.OperationalEfficiency\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\r\nPARAM\t53f22980-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.PartLoadRatio\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\r\nPARAM\t594f7400-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.PrimaryEnergyConsumption\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\r\nPARAM\t4dfc4880-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.WorkingPressure\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\r\nPARAM\t719bf881-63a8-49dc-84dc-59248dbf3a7c\tPset_BoilerPHistory.WorkingPressureHistory\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t72\tPset_BoilerTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tadf2ef00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.EnergySource\tTEXT\t\t72\t1\tPEnum_EnergySource\t1\r\nPARAM\t63baac0e-81a6-4be9-bff9-6530b2938844\tPset_BoilerTypeCommon.HeatOutput\tMULTILINETEXT\t\t72\t1\tPropertyListValue\t1\r\nPARAM\t84d25e80-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.HeatTransferSurfaceArea\tAREA\t\t72\t1\tIfcAreaMeasure\t1\r\nPARAM\t987dc500-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.IsWaterStorageHeater\tYESNO\t\t72\t1\tIfcBoolean\t1\r\nPARAM\t34aa656c-0810-4646-961b-c5f720cbdbf6\tPset_BoilerTypeCommon.Material\tMULTILINETEXT\t\t72\t1\tIfcMaterial\t1\r\nPARAM\t63a1c310-c82b-47a2-91b0-87e84fa76847\tPset_BoilerTypeCommon.NominalEfficiency\tMULTILINETEXT\t\t72\t1\tPropertyListValue\t1\r\nPARAM\ta9c6d180-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.NominalEnergyConsumption\tNUMBER\t\t72\t1\tIfcPowerMeasure\t1\r\nPARAM\t89971280-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.NominalPartLoadRatio\tMULTILINETEXT\t\t72\t1\tPropertyBoundedValue\t1\r\nPARAM\t7a17c980-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.OperatingMode\tTEXT\t\t72\t1\tPEnum_BoilerOperatingMode\t1\r\nPARAM\ta3d0f080-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.OutletTemperatureRange\tMULTILINETEXT\t\t72\t1\tPropertyBoundedValue\t1\r\nPARAM\t9ca9e280-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.PartialLoadEfficiencyCurves\tMULTILINETEXT\t\t72\t1\tPropertyTableValue\t1\r\nPARAM\t75ebac00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.PressureRating\tNUMBER\t\t72\t1\tIfcPressureMeasure\t1\r\nPARAM\t64a29f80-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.Reference\tTEXT\t\t72\t1\tIfcIdentifier\t1\r\nPARAM\t68cebd00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.Status\tTEXT\t\t72\t1\tPEnum_ElementStatus\t1\r\nPARAM\t8ef45d00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.WaterInletTemperatureRange\tMULTILINETEXT\t\t72\t1\tPropertyBoundedValue\t1\r\nPARAM\t9451a780-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.WaterStorageCapacity\tVOLUME\t\t72\t1\tIfcVolumeMeasure\t1\r\nPARAM\ta7a2b85b-721e-433d-868b-d6b05dfb35f0\tPset_BoilerTypeCommon.Weight\tNUMBER\t\t72\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t73\tPset_BoilerTypeSteam\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td2e76200-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeSteam.HeatOutput\tMULTILINETEXT\t\t73\t1\tPropertyTableValue\t1\r\nPARAM\tc82ccd00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeSteam.MaximumOutletPressure\tTEXT\t\t73\t1\tIfcLabel\t1\r\nPARAM\tcc58ea80-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeSteam.NominalEfficiency\tMULTILINETEXT\t\t73\t1\tPropertyTableValue\t1\r\nPARAM\tdc6566c5-4e49-430e-8877-fb26240241e0\tPset_BoilerTypeSteam.NominalEfficiencyTable\tMULTILINETEXT\t\t73\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t74\tPset_BoilerTypeWater\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te4c90500-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeWater.HeatOutput\tMULTILINETEXT\t\t74\t1\tPropertyTableValue\t1\r\nPARAM\tde3a8d80-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeWater.NominalEfficiency\tMULTILINETEXT\t\t74\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t75\tPset_BoreholeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te692b18e-8cdc-4e9f-a330-56d33095c43b\tPset_BoreholeCommon.BoreholeState\tTEXT\t\t75\t1\tPEnum_BoreholeState\t1\r\nPARAM\tcdd5a459-c634-4511-8575-9e0ad5ebaca1\tPset_BoreholeCommon.CapDepth\tLENGTH\t\t75\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t075dd71a-13f8-48e3-9e78-3f0d11e3701b\tPset_BoreholeCommon.CapMaterial\tTEXT\t\t75\t1\tIfcLabel\t1\r\nPARAM\t972f5d47-c962-4f04-a7a2-c069216f6807\tPset_BoreholeCommon.FillingDepth\tLENGTH\t\t75\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tcc5d11c9-b006-4d9d-b5c6-5fb385549732\tPset_BoreholeCommon.FillingMaterial\tTEXT\t\t75\t1\tIfcLabel\t1\r\nPARAM\ta6a38cb4-cb5e-46db-84e9-ec6755f2ecd6\tPset_BoreholeCommon.GroundwaterDepth\tLENGTH\t\t75\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc3354bb9-08ed-4346-b615-2d1b332c31fd\tPset_BoreholeCommon.LiningMaterial\tTEXT\t\t75\t1\tIfcLabel\t1\r\nPARAM\t6bbfc4e3-d472-4f6e-a3cf-3d49145b39b5\tPset_BoreholeCommon.LiningThickness\tLENGTH\t\t75\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t76\tPset_BoundedCourseCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t40e11591-9f20-4e6e-a417-2bacff602e5e\tPset_BoundedCourseCommon.SpreadingRate\tNUMBER\t\t76\t1\tIfcNumericMeasure\t1\r\n#\r\nGROUP\t77\tPset_BreakwaterCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf9340ea0-2a7b-45f4-8418-b49d684de3c5\tPset_BreakwaterCommon.Elevation\tLENGTH\t\t77\t1\tIfcLengthMeasure\t1\r\nPARAM\t0f19acc5-84e6-46d8-b1c6-7501ae6b556c\tPset_BreakwaterCommon.StructuralStyle\tTEXT\t\t77\t1\tIfcLabel\t1\r\n#\r\nGROUP\t78\tPset_BridgeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5136cac3-b2ad-4396-a329-1a00a1c3d105\tPset_BridgeCommon.StructureIndicator\tTEXT\t\t78\t1\tPEnum_StructureIndicator\t1\r\n#\r\nGROUP\t79\tPset_BuildingCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te77bac68-4990-433f-9f31-92010d12f8d4\tPset_BuildingCommon.AncillaryFireUse\tTEXT\t\t79\t1\tIfcLabel\t1\r\nPARAM\tf5797b00-d1c4-11e1-8000-00215ad4efdf\tPset_BuildingCommon.BuildingID\tTEXT\t\t79\t1\tIfcIdentifier\t1\r\nPARAM\tff02e300-d1c4-11e1-8000-00215ad4efdf\tPset_BuildingCommon.ConstructionMethod\tTEXT\t\t79\t1\tIfcLabel\t1\r\nPARAM\t032f0080-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.FireProtectionClass\tTEXT\t\t79\t1\tIfcLabel\t1\r\nPARAM\t2de593e0-cb41-41d3-8ef9-3160bdc16e02\tPset_BuildingCommon.GrossAreaPlanned\tAREA\t\t79\t1\tIfcAreaMeasure\t1\r\nPARAM\t1510a380-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.GrossPlannedArea\tAREA\t\t79\t1\tIfcAreaMeasure\t1\r\nPARAM\t2a85cd80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.IsLandmarked\tYESNO\t\t79\t1\tIfcLogical\t1\r\nPARAM\tfa3e2f00-d1c4-11e1-8000-00215ad4efdf\tPset_BuildingCommon.IsPermanentID\tYESNO\t\t79\t1\tIfcBoolean\t1\r\nPARAM\t4646ea9d-7abc-415e-aacd-84a174588248\tPset_BuildingCommon.MainFireUse\tTEXT\t\t79\t1\tIfcLabel\t1\r\nPARAM\t193cc100-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.NetPlannedArea\tAREA\t\t79\t1\tIfcAreaMeasure\t1\r\nPARAM\t1d68de80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.NumberOfStoreys\tINTEGER\t\t79\t1\tIfcCountMeasure\t1\r\nPARAM\t104bef80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.OccupancyType\tTEXT\t\t79\t1\tIfcLabel\t1\r\nPARAM\tf0b4c700-d1c4-11e1-8000-00215ad4efdf\tPset_BuildingCommon.Reference\tTEXT\t\t79\t1\tIfcIdentifier\t1\r\nPARAM\t075b1e00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.SprinklerProtection\tYESNO\t\t79\t1\tIfcBoolean\t1\r\nPARAM\t0c1fd200-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.SprinklerProtectionAutomatic\tYESNO\t\t79\t1\tIfcBoolean\t1\r\nPARAM\t2194fc00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.YearOfConstruction\tTEXT\t\t79\t1\tIfcLabel\t1\r\nPARAM\t2659b000-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.YearOfLastRefurbishment\tTEXT\t\t79\t1\tIfcLabel\t1\r\n#\r\nGROUP\t80\tPset_BuildingElementProxyCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t52753100-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyCommon.FireRating\tTEXT\t\t80\t1\tIfcLabel\t1\r\nPARAM\t46896f00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyCommon.IsExternal\tYESNO\t\t80\t1\tIfcBoolean\t1\r\nPARAM\t4ee1aa00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyCommon.LoadBearing\tYESNO\t\t80\t1\tIfcBoolean\t1\r\nPARAM\t35d8f900-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyCommon.Reference\tTEXT\t\t80\t1\tIfcIdentifier\t1\r\nPARAM\t3a051680-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyCommon.Status\tTEXT\t\t80\t1\tPEnum_ElementStatus\t1\r\nPARAM\t4ab58c80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyCommon.ThermalTransmittance\tNUMBER\t\t80\t1\tIfcThermalTransmittanceMeasure\t1\r\n#\r\nGROUP\t81\tPset_BuildingElementProxyProvisionForVoid\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t6de03c00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyProvisionForVoid.Depth\tLENGTH\t\t81\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t69b41e80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyProvisionForVoid.Diameter\tLENGTH\t\t81\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t65880100-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyProvisionForVoid.Height\tLENGTH\t\t81\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t5c972f80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyProvisionForVoid.Shape\tTEXT\t\t81\t1\tIfcLabel\t1\r\nPARAM\t720c5980-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyProvisionForVoid.System\tTEXT\t\t81\t1\tIfcLabel\t1\r\nPARAM\t615be380-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyProvisionForVoid.Width\tLENGTH\t\t81\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t82\tPset_BuildingStoreyCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t89e3dd80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.AboveGround\tYESNO\t\t82\t1\tIfcLogical\t1\r\nPARAM\t90d13c17-d929-40f7-a08e-5780c6074e03\tPset_BuildingStoreyCommon.ElevationOfFFLRelative\tLENGTH\t\t82\t1\tIfcLengthMeasure\t1\r\nPARAM\t16fa4b69-3ddf-4bee-9a37-e58cf24c4bf4\tPset_BuildingStoreyCommon.ElevationOfSSLRelative\tLENGTH\t\t82\t1\tIfcLengthMeasure\t1\r\nPARAM\t82bccf80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.EntranceLevel\tYESNO\t\t82\t1\tIfcBoolean\t1\r\nPARAM\t944d5b00-0d7f-4743-a056-374b882a01b0\tPset_BuildingStoreyCommon.GrossAreaPlanned\tAREA\t\t82\t1\tIfcAreaMeasure\t1\r\nPARAM\ta08a3480-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.GrossPlannedArea\tAREA\t\t82\t1\tIfcAreaMeasure\t1\r\nPARAM\t9b2cea00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.LoadBearingCapacity\tNUMBER\t\t82\t1\tIfcPlanarForceMeasure\t1\r\nPARAM\tf7185f91-cdf7-4637-ad80-86d9be6d8d2d\tPset_BuildingStoreyCommon.NetAreaPlanned\tAREA\t\t82\t1\tIfcAreaMeasure\t1\r\nPARAM\ta5e77f00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.NetPlannedArea\tAREA\t\t82\t1\tIfcAreaMeasure\t1\r\nPARAM\t7d5f8500-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.Reference\tTEXT\t\t82\t1\tIfcIdentifier\t1\r\nPARAM\t90725500-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.SprinklerProtection\tYESNO\t\t82\t1\tIfcBoolean\t1\r\nPARAM\t95cf9f80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.SprinklerProtectionAutomatic\tYESNO\t\t82\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t83\tPset_BuildingSystemCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb13aaa80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingSystemCommon.Reference\tTEXT\t\t83\t1\tIfcIdentifier\t1\r\n#\r\nGROUP\t84\tPset_BuildingUse\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbd266c80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.MarketCategory\tTEXT\t\t84\t1\tIfcLabel\t1\r\nPARAM\tf6f77300-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.MarketSubCategoriesAvailableFuture\tMULTILINETEXT\t\t84\t1\tPropertyListValue\t1\r\nPARAM\tdfb88580-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.MarketSubCategoriesAvailableNow\tMULTILINETEXT\t\t84\t1\tPropertyListValue\t1\r\nPARAM\tc31c4d80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.MarketSubCategory\tTEXT\t\t84\t1\tIfcLabel\t1\r\nPARAM\tcf080f80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.NarrativeText\tTEXT\t\t84\t1\tIfcText\t1\r\nPARAM\tc9122e80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.PlanningControlStatus\tTEXT\t\t84\t1\tIfcLabel\t1\r\nPARAM\tff4fae00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.RentalRatesInCategoryFuture\tMULTILINETEXT\t\t84\t1\tPropertyBoundedValue\t1\r\nPARAM\te5ae6680-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.RentalRatesInCategoryNow\tMULTILINETEXT\t\t84\t1\tPropertyBoundedValue\t1\r\nPARAM\tf1019200-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.TenureModesAvailableFuture\tMULTILINETEXT\t\t84\t1\tPropertyListValue\t1\r\nPARAM\td92a0e00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.TenureModesAvailableNow\tMULTILINETEXT\t\t84\t1\tPropertyListValue\t1\r\nPARAM\teba44780-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.VacancyRateInCategoryFuture\tNUMBER\t\t84\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\td3ccc380-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.VacancyRateInCategoryNow\tNUMBER\t\t84\t1\tIfcPositiveRatioMeasure\t1\r\n#\r\nGROUP\t85\tPset_BuildingUseAdjacent\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0b3b7000-d1c6-11e1-8000-00215ad4efdf\tPset_BuildingUseAdjacent.MarketCategory\tTEXT\t\t85\t1\tIfcLabel\t1\r\nPARAM\t1098ba80-d1c6-11e1-8000-00215ad4efdf\tPset_BuildingUseAdjacent.MarketSubCategory\tTEXT\t\t85\t1\tIfcLabel\t1\r\nPARAM\t1c847c80-d1c6-11e1-8000-00215ad4efdf\tPset_BuildingUseAdjacent.NarrativeText\tTEXT\t\t85\t1\tIfcText\t1\r\nPARAM\t168e9b80-d1c6-11e1-8000-00215ad4efdf\tPset_BuildingUseAdjacent.PlanningControlStatus\tTEXT\t\t85\t1\tIfcLabel\t1\r\n#\r\nGROUP\t86\tPset_BuildingWaterStorage\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t91157314-7d65-41a5-8bbd-336f616720eb\tPset_BuildingWaterStorage.OneDayCoolingTowerMakeupWater\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\r\nPARAM\tc90f0479-603c-4fb4-a51f-6a6cf2fcc126\tPset_BuildingWaterStorage.OneDayEssentialWater\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\r\nPARAM\t41b31c2e-52ab-47d4-81a0-f513f664a972\tPset_BuildingWaterStorage.OneDayPotableWater\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\r\nPARAM\t7909c735-1593-4e9f-a522-176854576e71\tPset_BuildingWaterStorage.OneDayProcessOrProductionWater\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\r\nPARAM\td46b0252-1a53-4b07-b583-7eb95e8ba6b5\tPset_BuildingWaterStorage.WaterStorageRatePerPerson\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\r\n#\r\nGROUP\t87\tPset_BuiltSystemRailwayLine\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t042e761e-fb1c-4e3c-9f15-07b072216156\tPset_BuiltSystemRailwayLine.IsElectrified\tYESNO\t\t87\t1\tIfcBoolean\t1\r\nPARAM\td40355e7-6c96-435a-998a-ee64fcc3b9d5\tPset_BuiltSystemRailwayLine.LineCharacteristic\tTEXT\t\t87\t1\tPEnum_LineCharacteristic\t1\r\nPARAM\tf9b1a0cb-08ec-487b-ac2c-c703b056b0e2\tPset_BuiltSystemRailwayLine.LineID\tTEXT\t\t87\t1\tIfcIdentifier\t1\r\n#\r\nGROUP\t88\tPset_BuiltSystemRailwayTrack\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbea8e48a-bbd5-4dde-9e45-1f99c063af9f\tPset_BuiltSystemRailwayTrack.TrackCharacteristic\tTEXT\t\t88\t1\tPEnum_TrackCharacteristic\t1\r\nPARAM\t3addb827-ad65-4734-8b05-1e445bd6eb0b\tPset_BuiltSystemRailwayTrack.TrackID\tTEXT\t\t88\t1\tIfcIdentifier\t1\r\nPARAM\t2b4c82e7-e34d-4839-97a2-3cd043bed099\tPset_BuiltSystemRailwayTrack.TrackNumber\tTEXT\t\t88\t1\tIfcIdentifier\t1\r\nPARAM\t2b09d3f9-4b95-4d54-845c-ae406111eb66\tPset_BuiltSystemRailwayTrack.TrackUsage\tTEXT\t\t88\t1\tPEnum_TrackUsage\t1\r\n#\r\nGROUP\t89\tPset_BurnerTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3cb43b80-d1c6-11e1-8000-00215ad4efdf\tPset_BurnerTypeCommon.EnergySource\tTEXT\t\t89\t1\tPEnum_EnergySource\t1\r\nPARAM\t273f1180-d1c6-11e1-8000-00215ad4efdf\tPset_BurnerTypeCommon.Reference\tTEXT\t\t89\t1\tIfcIdentifier\t1\r\nPARAM\t2d34f280-d1c6-11e1-8000-00215ad4efdf\tPset_BurnerTypeCommon.Status\tTEXT\t\t89\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t90\tPset_CableCarrierFittingTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5ce3fa80-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierFittingTypeCommon.Reference\tTEXT\t\t90\t1\tIfcIdentifier\t1\r\nPARAM\t61a8ae80-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierFittingTypeCommon.Status\tTEXT\t\t90\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t91\tPset_CableCarrierSegmentTypeCableLadderSegment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t83099a80-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableLadderSegment.LadderConfiguration\tTEXT\t\t91\t1\tIfcText\t1\r\nPARAM\t7e44e680-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableLadderSegment.NominalHeight\tLENGTH\t\t91\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t55d50299-46dd-485a-b0e2-517b9380385c\tPset_CableCarrierSegmentTypeCableLadderSegment.NominalLength\tLENGTH\t\t91\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t78e79c00-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableLadderSegment.NominalWidth\tLENGTH\t\t91\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t92\tPset_CableCarrierSegmentTypeCableTraySegment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t99aff180-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableTraySegment.HasCover\tYESNO\t\t92\t1\tIfcBoolean\t1\r\nPARAM\t94eb3d80-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableTraySegment.NominalHeight\tLENGTH\t\t92\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t65a3817d-5e2f-4de7-87a6-5ed6d9180008\tPset_CableCarrierSegmentTypeCableTraySegment.NominalLength\tLENGTH\t\t92\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t8f8df300-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableTraySegment.NominalWidth\tLENGTH\t\t92\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t93\tPset_CableCarrierSegmentTypeCableTrunkingSegment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\taaf8fe00-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NominalHeight\tLENGTH\t\t93\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t5aabd032-4985-4416-86d7-e612f034b98e\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NominalLength\tLENGTH\t\t93\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\ta59bb380-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NominalWidth\tLENGTH\t\t93\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb0eedf00-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NumberOfCompartments\tINTEGER\t\t93\t1\tIfcCountMeasure\t1\r\n#\r\nGROUP\t94\tPset_CableCarrierSegmentTypeCatenaryWire\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t9f56ffc5-755b-4107-8bdf-ea534acbb8dd\tPset_CableCarrierSegmentTypeCatenaryWire.ACResistance\tNUMBER\t\t94\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\t8ccbd9a8-2afc-47ea-8002-61b78c533b28\tPset_CableCarrierSegmentTypeCatenaryWire.CatenaryWireType\tTEXT\t\t94\t1\tIfcLabel\t1\r\nPARAM\t9075a1f2-7727-4666-9f3c-2939a43cd8b8\tPset_CableCarrierSegmentTypeCatenaryWire.CurrentCarryingCapacity\tNUMBER\t\t94\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\tc93858cb-e713-4e63-981a-a96fb274fd3d\tPset_CableCarrierSegmentTypeCatenaryWire.DCResistance\tNUMBER\t\t94\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\t72dc3b47-7cb3-4d05-b58a-54bb53a0cbe9\tPset_CableCarrierSegmentTypeCatenaryWire.LayRatio\tNUMBER\t\t94\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t3f85516c-74aa-4854-8bce-ede6361308a0\tPset_CableCarrierSegmentTypeCatenaryWire.MassPerLength\tNUMBER\t\t94\t1\tIfcMassPerLengthMeasure\t1\r\nPARAM\t87ea3c19-61c0-403c-9481-caeeed479657\tPset_CableCarrierSegmentTypeCatenaryWire.MechanicalTension\tNUMBER\t\t94\t1\tIfcForceMeasure\t1\r\nPARAM\t11c8cad5-8d94-4ce2-813a-b8a602904304\tPset_CableCarrierSegmentTypeCatenaryWire.PhysicalDescriptionReference\tMULTILINETEXT\t\t94\t1\tIfcExternalReference\t1\r\nPARAM\ta556f9f4-8372-470b-9e9e-25857e55e24c\tPset_CableCarrierSegmentTypeCatenaryWire.StrandingMethod\tTEXT\t\t94\t1\tIfcLabel\t1\r\nPARAM\tee25f93b-6e7e-4299-81dc-6b83938c823b\tPset_CableCarrierSegmentTypeCatenaryWire.TensileStrength\tNUMBER\t\t94\t1\tIfcPressureMeasure\t1\r\nPARAM\t50ff9d8f-ea9c-493c-95a5-071d4769bc82\tPset_CableCarrierSegmentTypeCatenaryWire.ThermalExpansionCoefficient\tNUMBER\t\t94\t1\tIfcThermalExpansionCoefficientMeasure\t1\r\nPARAM\tbc9b7c5b-6229-45a3-81c1-3b098ff6b6f9\tPset_CableCarrierSegmentTypeCatenaryWire.UltimateTensileStrength\tNUMBER\t\t94\t1\tIfcForceMeasure\t1\r\nPARAM\t902fa096-d137-4257-8613-697c82da762e\tPset_CableCarrierSegmentTypeCatenaryWire.YoungModulus\tNUMBER\t\t94\t1\tIfcModulusOfElasticityMeasure\t1\r\n#\r\nGROUP\t95\tPset_CableCarrierSegmentTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbba97400-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCommon.Reference\tTEXT\t\t95\t1\tIfcIdentifier\t1\r\nPARAM\tc19f5500-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCommon.Status\tTEXT\t\t95\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t96\tPset_CableCarrierSegmentTypeConduitSegment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te5fb3180-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeConduitSegment.ConduitShapeType\tTEXT\t\t96\t1\tPEnum_ConduitShapeType\t1\r\nPARAM\tf4494d80-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeConduitSegment.IsRigid\tYESNO\t\t96\t1\tIfcBoolean\t1\r\nPARAM\tbb1eff5f-671b-48ec-b8f9-34b3f8781302\tPset_CableCarrierSegmentTypeConduitSegment.NominalDiameter\tLENGTH\t\t96\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tdf6cba00-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeConduitSegment.NominalHeight\tLENGTH\t\t96\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t8ad91d9a-63ee-4a17-86bb-1b83df24a726\tPset_CableCarrierSegmentTypeConduitSegment.NominalLength\tLENGTH\t\t96\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td976d900-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeConduitSegment.NominalWidth\tLENGTH\t\t96\t1\tIfcNonNegativeLengthMeasure\t1\r\n#\r\nGROUP\t97\tPset_CableCarrierSegmentTypeDropper\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t80e0213d-313a-48c5-bc45-000f1e0bca5f\tPset_CableCarrierSegmentTypeDropper.AssemblyInstruction\tMULTILINETEXT\t\t97\t1\tIfcExternalReference\t1\r\nPARAM\t3ff24496-0b66-4ea4-ad55-b2d0b7568bd0\tPset_CableCarrierSegmentTypeDropper.CurrentCarryingCapacity\tNUMBER\t\t97\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t19475b0c-f54e-4be5-801f-fd6e4e19f1ad\tPset_CableCarrierSegmentTypeDropper.IsAdjustable\tYESNO\t\t97\t1\tIfcBoolean\t1\r\nPARAM\t5949a370-7905-4c91-954e-7efe0a1821be\tPset_CableCarrierSegmentTypeDropper.IsCurrentCarrying\tYESNO\t\t97\t1\tIfcBoolean\t1\r\nPARAM\t19282b6b-b39d-4f96-9287-77346b02d030\tPset_CableCarrierSegmentTypeDropper.IsRigid\tYESNO\t\t97\t1\tIfcBoolean\t1\r\nPARAM\tf86b19d0-69a3-4a50-a8a6-5732ec59a828\tPset_CableCarrierSegmentTypeDropper.NominalLoad\tNUMBER\t\t97\t1\tIfcForceMeasure\t1\r\nPARAM\t0355ab50-cc05-4b68-8f72-a94c931401c8\tPset_CableCarrierSegmentTypeDropper.TensileStrength\tNUMBER\t\t97\t1\tIfcPressureMeasure\t1\r\nPARAM\t9efd6045-2a3d-4ff9-b331-270870eb56e6\tPset_CableCarrierSegmentTypeDropper.UltimateTensileStrength\tNUMBER\t\t97\t1\tIfcForceMeasure\t1\r\n#\r\nGROUP\t98\tPset_CableFittingTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t00cda600-d1c7-11e1-8000-00215ad4efdf\tPset_CableFittingTypeCommon.Reference\tTEXT\t\t98\t1\tIfcIdentifier\t1\r\nPARAM\t05925a00-d1c7-11e1-8000-00215ad4efdf\tPset_CableFittingTypeCommon.Status\tTEXT\t\t98\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t99\tPset_CableFittingTypeExit\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2c83ea4f-e8bf-4256-9687-d0b43156761e\tPset_CableFittingTypeExit.GroundResistance\tNUMBER\t\t99\t1\tIfcElectricResistanceMeasure\t1\r\n#\r\nGROUP\t100\tPset_CableFittingTypeFanout\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5e80256e-2d31-42cd-847e-9ae71defc177\tPset_CableFittingTypeFanout.NumberOfTubes\tINTEGER\t\t100\t1\tIfcCountMeasure\t1\r\nPARAM\t7c4c60a6-22a3-4aa7-8156-45d642ff45f8\tPset_CableFittingTypeFanout.TubeDiameter\tLENGTH\t\t100\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t101\tPset_CableSegmentConnector\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2e062796-73ab-445e-bc70-e2d13e849152\tPset_CableSegmentConnector.ConnectorAColour\tTEXT\t\t101\t1\tIfcLabel\t1\r\nPARAM\td2b2ebfe-bf57-4226-93a5-aa3e069af9e9\tPset_CableSegmentConnector.ConnectorAGender\tTEXT\t\t101\t1\tPEnum_DistributionPortGender\t1\r\nPARAM\taae8c6e0-a2e6-48a5-993e-5c9949f689e2\tPset_CableSegmentConnector.ConnectorAType\tTEXT\t\t101\t1\tIfcLabel\t1\r\nPARAM\tb3d35d83-7024-49b4-aeec-c43feb0c3cf4\tPset_CableSegmentConnector.ConnectorBColour\tTEXT\t\t101\t1\tIfcLabel\t1\r\nPARAM\te762803e-11f4-440a-bfc0-2a2ce11850f8\tPset_CableSegmentConnector.ConnectorBGender\tTEXT\t\t101\t1\tPEnum_DistributionPortGender\t1\r\nPARAM\tce2ebf18-d7c6-48ec-aa5e-24c3686a4a4b\tPset_CableSegmentConnector.ConnectorBType\tTEXT\t\t101\t1\tIfcLabel\t1\r\n#\r\nGROUP\t102\tPset_CableSegmentOccurenceFiberSegment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t71815647-589f-4bc6-9a6b-00842980cea3\tPset_CableSegmentOccurenceFiberSegment.InUse\tYESNO\t\t102\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t103\tPset_CableSegmentOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7a917ce3-5e22-4ad5-8d1e-87bc3656c1b8\tPset_CableSegmentOccurrence.CarrierStackNumber\tINTEGER\t\t103\t1\tIfcInteger\t1\r\nPARAM\tabcd31d1-e546-49a8-a905-edfe6b733605\tPset_CableSegmentOccurrence.CurrentCarryingCapacity\tNUMBER\t\t103\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\ta56d3362-7278-4003-b141-8d8169f8652f\tPset_CableSegmentOccurrence.CurrentCarryingCapasity\tNUMBER\t\t103\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t55fbb563-61a2-4104-a0e4-b53d8e4cffd5\tPset_CableSegmentOccurrence.DesignAmbientTemperature\tMULTILINETEXT\t\t103\t1\tPropertyBoundedValue\t1\r\nPARAM\t977d1cc9-f8f5-48dc-aa23-820a3e9d0774\tPset_CableSegmentOccurrence.DistanceBetweenParallelCircuits\tLENGTH\t\t103\t1\tIfcLengthMeasure\t1\r\nPARAM\t7c0ce24f-9d03-4d9b-83da-2ac5e4a0634c\tPset_CableSegmentOccurrence.InstallationMethod\tTEXT\t\t103\t1\tIfcLabel\t1\r\nPARAM\tbe5fd0db-9e23-4a84-b4e0-7762a0e065e1\tPset_CableSegmentOccurrence.InstallationMethodFlagEnum\tTEXT\t\t103\t1\tPEnum_InstallationMethodFlagEnum\t1\r\nPARAM\td4ec2718-6333-4e1e-a8cd-d1a1d63c7708\tPset_CableSegmentOccurrence.IsHorizontalCable\tYESNO\t\t103\t1\tIfcBoolean\t1\r\nPARAM\t2632b748-03d3-46c0-aafd-3f7cff1f8d99\tPset_CableSegmentOccurrence.IsMountedFlatCable\tYESNO\t\t103\t1\tIfcBoolean\t1\r\nPARAM\ta008e02d-7f54-4833-83e4-f8069dde0f37\tPset_CableSegmentOccurrence.MaximumCableLength\tLENGTH\t\t103\t1\tIfcLengthMeasure\t1\r\nPARAM\t12584689-2536-4091-9491-fb29d755ac82\tPset_CableSegmentOccurrence.MountingMethod\tTEXT\t\t103\t1\tPEnum_MountingMethodEnum\t1\r\nPARAM\t4a80a2ec-f350-4fc6-ba3f-2235e2f25f04\tPset_CableSegmentOccurrence.NumberOfParallelCircuits\tINTEGER\t\t103\t1\tIfcCountMeasure\t1\r\nPARAM\t47d6edba-8d71-4af2-b05f-07d968909ff6\tPset_CableSegmentOccurrence.PowerLoss\tNUMBER\t\t103\t1\tIfcPowerMeasure\t1\r\nPARAM\t2541f50e-561f-40e2-8585-6e810d4e89e4\tPset_CableSegmentOccurrence.SequentialCode\tTEXT\t\t103\t1\tIfcLabel\t1\r\nPARAM\t366428fd-19e5-4457-a10a-d655640758e7\tPset_CableSegmentOccurrence.SoilConductivity\tNUMBER\t\t103\t1\tIfcThermalConductivityMeasure\t1\r\nPARAM\td9a5be45-4039-4d22-8b6c-573471e71f22\tPset_CableSegmentOccurrence.UserCorrectionFactor\tNUMBER\t\t103\t1\tIfcReal\t1\r\n#\r\nGROUP\t104\tPset_CableSegmentTypeBusBarSegment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc8d23329-cda6-4d55-811f-ec00b24be7bc\tPset_CableSegmentTypeBusBarSegment.ACResistance\tNUMBER\t\t104\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\t2dd3a9bb-3da0-4bb9-8ba7-978d382b35cd\tPset_CableSegmentTypeBusBarSegment.CrossSectionalArea\tAREA\t\t104\t1\tIfcAreaMeasure\t1\r\nPARAM\t19a8b096-3bb7-4e4a-94a1-4395a74d8457\tPset_CableSegmentTypeBusBarSegment.CurrentCarryingCapacity\tNUMBER\t\t104\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t6d81040a-3f56-4c71-9d08-fd38fd3144a7\tPset_CableSegmentTypeBusBarSegment.DCResistance\tNUMBER\t\t104\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\t5affe7b5-f79c-4f10-a6a6-b3c6357b84eb\tPset_CableSegmentTypeBusBarSegment.InsulationMethod\tTEXT\t\t104\t1\tPEnum_InsulatorType\t1\r\nPARAM\t1e027480-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeBusBarSegment.IsHorizontalBusbar\tYESNO\t\t104\t1\tIfcBoolean\t1\r\nPARAM\t57603209-d07a-4751-b981-b02b3cd8c226\tPset_CableSegmentTypeBusBarSegment.MassPerLength\tNUMBER\t\t104\t1\tIfcMassPerLengthMeasure\t1\r\nPARAM\t1f8b22d1-d01c-49e3-ac1a-6c850a54a11a\tPset_CableSegmentTypeBusBarSegment.NominalCurrent\tNUMBER\t\t104\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t85431064-7bcb-459f-b6e5-1163493c5517\tPset_CableSegmentTypeBusBarSegment.OperationalTemperatureRange\tMULTILINETEXT\t\t104\t1\tPropertyBoundedValue\t1\r\nPARAM\t85d818fb-67d5-4884-b3cb-da4c0a03a9f6\tPset_CableSegmentTypeBusBarSegment.OverallDiameter\tLENGTH\t\t104\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb81e0684-e448-4f0b-a97d-995cafbf3b66\tPset_CableSegmentTypeBusBarSegment.RatedVoltage\tMULTILINETEXT\t\t104\t1\tPropertyBoundedValue\t1\r\nPARAM\t64475906-fa66-4046-92c7-3d9ef4d6a24b\tPset_CableSegmentTypeBusBarSegment.TensileStrength\tNUMBER\t\t104\t1\tIfcPressureMeasure\t1\r\nPARAM\tc295d765-f6d3-4a91-9c5f-435102b59b13\tPset_CableSegmentTypeBusBarSegment.ThermalExpansionCoefficient\tNUMBER\t\t104\t1\tIfcThermalExpansionCoefficientMeasure\t1\r\nPARAM\t8fe8467d-4a14-4eaa-9726-a75b8974eddd\tPset_CableSegmentTypeBusBarSegment.UltimateTensileStrength\tNUMBER\t\t104\t1\tIfcForceMeasure\t1\r\nPARAM\t782d4f75-ebe0-4c4d-9fe2-ed80afac547f\tPset_CableSegmentTypeBusBarSegment.YoungModulus\tNUMBER\t\t104\t1\tIfcModulusOfElasticityMeasure\t1\r\n#\r\nGROUP\t105\tPset_CableSegmentTypeCableSegment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tcf6117d6-0e8f-478d-b50d-1469e2c67044\tPset_CableSegmentTypeCableSegment.ACResistance\tNUMBER\t\t105\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\t0172d1d8-2602-4679-8293-22c901339a27\tPset_CableSegmentTypeCableSegment.CableInsulationMaterial\tMULTILINETEXT\t\t105\t1\tIfcMaterial\t1\r\nPARAM\t9853cda1-817d-45bf-86a5-f7018d05ceb5\tPset_CableSegmentTypeCableSegment.CrossSectionalArea\tAREA\t\t105\t1\tIfcAreaMeasure\t1\r\nPARAM\tc8eb8eba-d3de-4e0a-b2b8-f5af727629f4\tPset_CableSegmentTypeCableSegment.CurrentCarryingCapacity\tNUMBER\t\t105\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t4abc008b-2217-42d8-b48f-b6169673b089\tPset_CableSegmentTypeCableSegment.DCResistance\tNUMBER\t\t105\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\ta54fe800-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.FunctionReliable\tYESNO\t\t105\t1\tIfcBoolean\t1\r\nPARAM\t9ff29d80-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.HalogenProof\tYESNO\t\t105\t1\tIfcBoolean\t1\r\nPARAM\t5904a800-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.HasProtectiveEarth\tYESNO\t\t105\t1\tIfcBoolean\t1\r\nPARAM\te4c38dd4-4839-4629-b0bc-7e2e1a529338\tPset_CableSegmentTypeCableSegment.InsulationVoltage\tNUMBER\t\t105\t1\tIfcElectricVoltageMeasure\t1\r\nPARAM\tb99adb5b-c561-4cae-8554-9cbe8fa706dc\tPset_CableSegmentTypeCableSegment.MassPerLength\tNUMBER\t\t105\t1\tIfcMassPerLengthMeasure\t1\r\nPARAM\t04a0f43a-c57b-45be-bc5d-d704f12a173e\tPset_CableSegmentTypeCableSegment.MaximumBendingRadius\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t95f766d9-e0d2-4204-ac1d-e93460f40d23\tPset_CableSegmentTypeCableSegment.MaximumCurrent\tNUMBER\t\t105\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t6de13b80-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.MaximumOperatingTemperature\tNUMBER\t\t105\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t7f2a4800-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.MaximumShortCircuitTemperature\tNUMBER\t\t105\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t2bb28e5b-562e-4e08-aadf-f3a90351a48f\tPset_CableSegmentTypeCableSegment.MaxOperatingTemperature\tNUMBER\t\t105\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t2ed26686-1583-4602-96a6-fa78aad71ed2\tPset_CableSegmentTypeCableSegment.NominalHeight\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t818b8fc7-4806-40d5-a968-75600b073422\tPset_CableSegmentTypeCableSegment.NominalLength\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t67a4fb5d-ebd0-4296-b3ef-237417a4f8fa\tPset_CableSegmentTypeCableSegment.NominalWidthOrDiameter\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t8315a195-ccf9-4f82-80f7-f33e38eb337e\tPset_CableSegmentTypeCableSegment.NormalOperatingTemperature\tNUMBER\t\t105\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t31154480-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.NumberOfCores\tINTEGER\t\t105\t1\tIfcCountMeasure\t1\r\nPARAM\t5fc05682-af69-4fcd-8ef3-1d82c217ffdb\tPset_CableSegmentTypeCableSegment.NumberOfWires\tINTEGER\t\t105\t1\tIfcCountMeasure\t1\r\nPARAM\t38d4e900-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.OverallDiameter\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t44c0ab00-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.RatedTemperature\tMULTILINETEXT\t\t105\t1\tPropertyBoundedValue\t1\r\nPARAM\t3ecaca00-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.RatedVoltage\tMULTILINETEXT\t\t105\t1\tPropertyBoundedValue\t1\r\nPARAM\t4ab68c00-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.ScreenDiameter\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t936e4500-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.SelfExtinguishing60332_1\tYESNO\t\t105\t1\tIfcBoolean\t1\r\nPARAM\t99642600-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.SelfExtinguishing60332_3\tYESNO\t\t105\t1\tIfcBoolean\t1\r\nPARAM\ta3c7b4cb-3bfa-443c-8228-30f993ecda47\tPset_CableSegmentTypeCableSegment.SheathColor\tTEXT\t\t105\t1\tIfcLabel\t1\r\nPARAM\t87828300-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.SpecialConstruction\tTEXT\t\t105\t1\tIfcLabel\t1\r\nPARAM\t2b1f6380-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.Standard\tTEXT\t\t105\t1\tIfcLabel\t1\r\nPARAM\t8ea99100-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.Weight\tNUMBER\t\t105\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t106\tPset_CableSegmentTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\taf71e680-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCommon.Reference\tTEXT\t\t106\t1\tIfcIdentifier\t1\r\nPARAM\tb4cf3100-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCommon.Status\tTEXT\t\t106\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t107\tPset_CableSegmentTypeConductorSegment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2dbed8d5-b3a6-482a-90b7-e7f3d6a05eb8\tPset_CableSegmentTypeConductorSegment.ACResistance\tNUMBER\t\t107\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\t16d52f14-0b2f-49f1-a51e-a813642b9709\tPset_CableSegmentTypeConductorSegment.ConductorMaterial\tTEXT\t\t107\t1\tPEnum_MaterialEnum\t1\r\nPARAM\t0f8c44e5-f30e-4416-9883-9be30a12f2e3\tPset_CableSegmentTypeConductorSegment.ConductorShape\tTEXT\t\t107\t1\tPEnum_ShapeEnum\t1\r\nPARAM\t837420cb-1a99-4090-a3fc-db9355dc03a0\tPset_CableSegmentTypeConductorSegment.ConductorSheathMaterial\tMULTILINETEXT\t\t107\t1\tIfcMaterial\t1\r\nPARAM\t4ccd1a80-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeConductorSegment.Construction\tTEXT\t\t107\t1\tPEnum_ConstructionEnum\t1\r\nPARAM\t2a3b0180-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeConductorSegment.CrossSectionalArea\tAREA\t\t107\t1\tIfcAreaMeasure\t1\r\nPARAM\tf95e3720-093d-410d-bf17-f52739eda3e4\tPset_CableSegmentTypeConductorSegment.CurrentCarryingCapacity\tNUMBER\t\t107\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\ta14c04f8-fc1d-481d-9600-39a37198dc4d\tPset_CableSegmentTypeConductorSegment.DCResistance\tNUMBER\t\t107\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\td2ed1a0c-1d00-4427-88d3-f076085bebdd\tPset_CableSegmentTypeConductorSegment.ElectricalConductorFunction\tTEXT\t\t107\t1\tPEnum_ConductorFunction\t1\r\nPARAM\t30c97900-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeConductorSegment.Function\tTEXT\t\t107\t1\tPEnum_FunctionEnum\t1\r\nPARAM\t62efad31-f661-4306-a6b0-06469351cf2f\tPset_CableSegmentTypeConductorSegment.IsFireResistant\tYESNO\t\t107\t1\tIfcBoolean\t1\r\nPARAM\tbdb2751b-097b-48e4-9bf0-82b121bed0ce\tPset_CableSegmentTypeConductorSegment.MassPerLength\tNUMBER\t\t107\t1\tIfcMassPerLengthMeasure\t1\r\nPARAM\t40e15880-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeConductorSegment.Material\tTEXT\t\t107\t1\tPEnum_MaterialEnum\t1\r\nPARAM\ta5d0e746-d064-4bfb-bfd7-9226168f0ebb\tPset_CableSegmentTypeConductorSegment.MaximumOperatingTemperature\tNUMBER\t\t107\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t934b0a15-7236-48fe-b549-ffba487cdc96\tPset_CableSegmentTypeConductorSegment.NominalCurrent\tNUMBER\t\t107\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\ta87deb43-ee03-46d0-b320-24bff82815f2\tPset_CableSegmentTypeConductorSegment.NominalLength\tLENGTH\t\t107\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t6cc92c39-2931-4e88-b523-ab48f94608b2\tPset_CableSegmentTypeConductorSegment.NumberOfCores\tINTEGER\t\t107\t1\tIfcCountMeasure\t1\r\nPARAM\t864dd0fd-5f66-4b68-8085-79a9e48fbfaf\tPset_CableSegmentTypeConductorSegment.OverallDiameter\tLENGTH\t\t107\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t7b3f9abc-db87-4175-9f93-9677b4df614c\tPset_CableSegmentTypeConductorSegment.PhaseReference\tTEXT\t\t107\t1\tIfcIdentifier\t1\r\nPARAM\t94a208c6-43f7-4301-a2d5-f3a1b4b59a4d\tPset_CableSegmentTypeConductorSegment.RatedVoltage\tMULTILINETEXT\t\t107\t1\tPropertyBoundedValue\t1\r\nPARAM\t59ea0980-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeConductorSegment.Shape\tTEXT\t\t107\t1\tPEnum_ShapeEnum\t1\r\nPARAM\t531bcd01-546c-4c88-baa6-2326e2907d96\tPset_CableSegmentTypeConductorSegment.SheathColor\tTEXT\t\t107\t1\tIfcLabel\t1\r\nPARAM\tb10131c5-cc0e-4c12-973e-6ac7aa6086f8\tPset_CableSegmentTypeConductorSegment.TensileStrength\tNUMBER\t\t107\t1\tIfcPressureMeasure\t1\r\nPARAM\t738bd472-9595-4486-a7f0-a866607f3bec\tPset_CableSegmentTypeConductorSegment.ThermalExpansionCoefficient\tNUMBER\t\t107\t1\tIfcThermalExpansionCoefficientMeasure\t1\r\nPARAM\tf802ed19-609a-4926-ace9-f2a13d6656fa\tPset_CableSegmentTypeConductorSegment.UltimateTensileStrength\tNUMBER\t\t107\t1\tIfcForceMeasure\t1\r\nPARAM\tdba884a0-3a09-4044-a111-5ae27beeeb2d\tPset_CableSegmentTypeConductorSegment.YoungModulus\tNUMBER\t\t107\t1\tIfcModulusOfElasticityMeasure\t1\r\n#\r\nGROUP\t108\tPset_CableSegmentTypeContactWire\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t940999dc-5904-4b2b-ab26-1b8a0b7fda80\tPset_CableSegmentTypeContactWire.ACResistance\tNUMBER\t\t108\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\t622fd75b-95ba-455a-bfbf-f086c82a6961\tPset_CableSegmentTypeContactWire.CrossSectionalArea\tAREA\t\t108\t1\tIfcAreaMeasure\t1\r\nPARAM\t46820455-3d3d-4848-bf68-64cb51b6d696\tPset_CableSegmentTypeContactWire.CurrentCarryingCapacity\tNUMBER\t\t108\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t2ff119a6-1661-4b57-875f-294b13045ce7\tPset_CableSegmentTypeContactWire.DCResistance\tNUMBER\t\t108\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\tcb365348-1f03-43bd-9104-fdf60982871e\tPset_CableSegmentTypeContactWire.MassPerLength\tNUMBER\t\t108\t1\tIfcMassPerLengthMeasure\t1\r\nPARAM\t830a524f-5b78-407e-8c46-748d46a55233\tPset_CableSegmentTypeContactWire.TensileStrength\tNUMBER\t\t108\t1\tIfcPressureMeasure\t1\r\nPARAM\t06af0165-3c62-49dd-b298-c323eaa661b2\tPset_CableSegmentTypeContactWire.ThermalExpansionCoefficient\tNUMBER\t\t108\t1\tIfcThermalExpansionCoefficientMeasure\t1\r\nPARAM\tb63603cf-2d3b-4de8-ad51-3a14e51f5d05\tPset_CableSegmentTypeContactWire.TorsionalStrength\tNUMBER\t\t108\t1\tIfcPressureMeasure\t1\r\nPARAM\t65ffefa0-2403-4cab-9c57-a1fb6ebd8b2b\tPset_CableSegmentTypeContactWire.YoungModulus\tNUMBER\t\t108\t1\tIfcModulusOfElasticityMeasure\t1\r\n#\r\nGROUP\t109\tPset_CableSegmentTypeCoreSegment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4f7b46c7-d54a-4608-8990-82dfddae7f04\tPset_CableSegmentTypeCoreSegment.ACResistance\tNUMBER\t\t109\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\t8c940200-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.CoreIdentifier\tTEXT\t\t109\t1\tIfcIdentifier\t1\r\nPARAM\t65f0aca8-9c68-4dba-ae87-123cab754e9e\tPset_CableSegmentTypeCoreSegment.CurrentCarryingCapacity\tNUMBER\t\t109\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t94292eb0-4be2-4d73-b3c1-705eb0c606ef\tPset_CableSegmentTypeCoreSegment.DCResistance\tNUMBER\t\t109\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\tc6fd9f00-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.FunctionReliable\tYESNO\t\t109\t1\tIfcBoolean\t1\r\nPARAM\tc107be00-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.HalogenProof\tYESNO\t\t109\t1\tIfcBoolean\t1\r\nPARAM\te639b8e5-a68a-4fa7-a1d3-e09d53a120de\tPset_CableSegmentTypeCoreSegment.LayRatio\tNUMBER\t\t109\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t4e2407ae-e167-4582-af35-9ab01b00f3a6\tPset_CableSegmentTypeCoreSegment.MassPerLength\tNUMBER\t\t109\t1\tIfcMassPerLengthMeasure\t1\r\nPARAM\t72f2ba80-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.OverallDiameter\tLENGTH\t\t109\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t7f771300-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.RatedTemperature\tMULTILINETEXT\t\t109\t1\tPropertyBoundedValue\t1\r\nPARAM\t78e89b80-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.RatedVoltage\tMULTILINETEXT\t\t109\t1\tPropertyBoundedValue\t1\r\nPARAM\t869e2100-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.ScreenDiameter\tLENGTH\t\t109\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb64d2900-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.SelfExtinguishing60332_1\tYESNO\t\t109\t1\tIfcBoolean\t1\r\nPARAM\tbbaa7380-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.SelfExtinguishing60332_3\tYESNO\t\t109\t1\tIfcBoolean\t1\r\nPARAM\t9289e300-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.SheathColors\tTEXT\t\t109\t1\tPEnum_CoreColorsEnum\t1\r\nPARAM\t86eab9cb-4b83-4cfd-b7cf-f50edced6ec6\tPset_CableSegmentTypeCoreSegment.SheathColours\tTEXT\t\t109\t1\tPEnum_CoreColoursEnum\t1\r\nPARAM\tcc5ae980-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.Standard\tTEXT\t\t109\t1\tIfcLabel\t1\r\nPARAM\t8b06b6ec-8b25-4664-b701-49ac1580dad6\tPset_CableSegmentTypeCoreSegment.StrandingMethod\tTEXT\t\t109\t1\tIfcLabel\t1\r\nPARAM\t3d32f2b5-f0ab-442f-b8e7-b2831a9d45fb\tPset_CableSegmentTypeCoreSegment.TensileStrength\tNUMBER\t\t109\t1\tIfcPressureMeasure\t1\r\nPARAM\t8539decc-64a8-4309-ad4f-c81ac76c39df\tPset_CableSegmentTypeCoreSegment.ThermalExpansionCoefficient\tNUMBER\t\t109\t1\tIfcThermalExpansionCoefficientMeasure\t1\r\nPARAM\t9b29ddad-f7c9-4ac3-ba36-d86b5660e11d\tPset_CableSegmentTypeCoreSegment.UltimateTensileStrength\tNUMBER\t\t109\t1\tIfcForceMeasure\t1\r\nPARAM\tb1887500-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.Weight\tNUMBER\t\t109\t1\tIfcMassMeasure\t1\r\nPARAM\t37f6c8c8-6813-4705-97ff-6bdc3401f436\tPset_CableSegmentTypeCoreSegment.YoungModulus\tNUMBER\t\t109\t1\tIfcModulusOfElasticityMeasure\t1\r\n#\r\nGROUP\t110\tPset_CableSegmentTypeEarthingConductor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5a3e9c88-83cf-455d-b4b7-7a8236dc27b9\tPset_CableSegmentTypeEarthingConductor.ResistanceToGround\tNUMBER\t\t110\t1\tIfcElectricResistanceMeasure\t1\r\n#\r\nGROUP\t111\tPset_CableSegmentTypeFiberSegment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t672cfb4a-f554-459c-98c2-118450748ab8\tPset_CableSegmentTypeFiberSegment.FiberColour\tTEXT\t\t111\t1\tPEnum_FiberColour\t1\r\nPARAM\tf243936a-c89a-4655-b7d6-57f7ba5346af\tPset_CableSegmentTypeFiberSegment.FiberType\tTEXT\t\t111\t1\tPEnum_FiberType\t1\r\nPARAM\tb5dce850-8978-438b-8673-8deedce2a1d6\tPset_CableSegmentTypeFiberSegment.HasTightJacket\tYESNO\t\t111\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t112\tPset_CableSegmentTypeFiberTubeSegment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0dd55e6e-9f3d-45c4-a744-6d268da889ba\tPset_CableSegmentTypeFiberTubeSegment.FiberTubeColour\tTEXT\t\t112\t1\tPEnum_FiberColour\t1\r\nPARAM\t56c33b17-e543-4822-8298-64dc9831e8f2\tPset_CableSegmentTypeFiberTubeSegment.NumberOfFibers\tINTEGER\t\t112\t1\tIfcCountMeasure\t1\r\n#\r\nGROUP\t113\tPset_CableSegmentTypeOpticalCableSegment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbc7944e3-7fad-48d4-a3a3-8b9c2d80f6aa\tPset_CableSegmentTypeOpticalCableSegment.FiberMode\tTEXT\t\t113\t1\tPEnum_FiberMode\t1\r\nPARAM\t2ed7bf12-b788-425a-b950-56072baed22f\tPset_CableSegmentTypeOpticalCableSegment.NumberOfFibers\tINTEGER\t\t113\t1\tIfcCountMeasure\t1\r\nPARAM\t5868fc75-c083-4d54-a20c-cc2b02204369\tPset_CableSegmentTypeOpticalCableSegment.NumberOfMultiModeFibers\tINTEGER\t\t113\t1\tIfcCountMeasure\t1\r\nPARAM\t46eba71c-a4d7-42b3-9085-04dc1dc155a1\tPset_CableSegmentTypeOpticalCableSegment.NumberOfSingleModeFibers\tINTEGER\t\t113\t1\tIfcCountMeasure\t1\r\nPARAM\t29e46725-8f88-464f-af6b-ad990a4d5803\tPset_CableSegmentTypeOpticalCableSegment.NumberOfTubes\tINTEGER\t\t113\t1\tIfcCountMeasure\t1\r\nPARAM\t30240c3c-1f1f-410f-8ba8-1a1fd607ab65\tPset_CableSegmentTypeOpticalCableSegment.OpticalCableStructure\tTEXT\t\t113\t1\tPEnum_OpticalCableStructureType\t1\r\n#\r\nGROUP\t114\tPset_CableSegmentTypeStitchWire\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t9234c844-c8da-4e91-8eb3-850bdb1c54d1\tPset_CableSegmentTypeStitchWire.AssemblyInstruction\tMULTILINETEXT\t\t114\t1\tIfcExternalReference\t1\r\nPARAM\t5e31af7c-4daf-4bda-ab93-8d3cef2b8593\tPset_CableSegmentTypeStitchWire.MechanicalTension\tNUMBER\t\t114\t1\tIfcForceMeasure\t1\r\nPARAM\t90ff7769-ca66-4f00-b3de-01c046ebac0a\tPset_CableSegmentTypeStitchWire.NominalLength\tLENGTH\t\t114\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\teaa5a3c7-83ee-464c-973a-f5721cb990ac\tPset_CableSegmentTypeStitchWire.TensileStrength\tNUMBER\t\t114\t1\tIfcPressureMeasure\t1\r\nPARAM\t643d3729-b0c1-4946-a7f0-394ce8a332a2\tPset_CableSegmentTypeStitchWire.UltimateTensileStrength\tNUMBER\t\t114\t1\tIfcForceMeasure\t1\r\n#\r\nGROUP\t115\tPset_CableSegmentTypeWirePairSegment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t43cb2251-59d7-42c5-aa8a-71c8df5e9446\tPset_CableSegmentTypeWirePairSegment.CharacteristicImpedance\tNUMBER\t\t115\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\t5ed0d9fd-8540-4427-993a-bc17bfafdff2\tPset_CableSegmentTypeWirePairSegment.ConductorDiameter\tLENGTH\t\t115\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc9be1185-13a7-4fab-adf9-ee09425df90e\tPset_CableSegmentTypeWirePairSegment.CoreConductorDiameter\tLENGTH\t\t115\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t19e23b8b-1ba2-4f75-8d85-b9730f3bfa3e\tPset_CableSegmentTypeWirePairSegment.JacketColour\tTEXT\t\t115\t1\tIfcLabel\t1\r\nPARAM\t8a0adbee-be86-445c-aa9e-6bc21765a889\tPset_CableSegmentTypeWirePairSegment.ShieldConductorDiameter\tLENGTH\t\t115\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t2abb64cc-ce75-4802-99f2-30debd16dc79\tPset_CableSegmentTypeWirePairSegment.WirePairType\tTEXT\t\t115\t1\tPEnum_WirePairType\t1\r\n#\r\nGROUP\t116\tPset_CargoCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc35519d7-b197-4845-8498-9e7f78558c71\tPset_CargoCommon.AdditionalProcessing\tTEXT\t\t116\t1\tPEnum_AdditionalProcessing\t1\r\nPARAM\t3d4708cc-5547-4421-abd2-f6c6786a17f9\tPset_CargoCommon.ProcessDirection\tTEXT\t\t116\t1\tPEnum_ProcessDirection\t1\r\nPARAM\tdf3c15a0-b460-4a63-9b86-3e2d0218c2c1\tPset_CargoCommon.ProcessItem\tTEXT\t\t116\t1\tPEnum_ProcessItem\t1\r\n#\r\nGROUP\t117\tPset_CessBetweenRails\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t84441cab-363c-4ac0-a6dd-e1396e067996\tPset_CessBetweenRails.CheckRailType\tTEXT\t\t117\t1\tPEnum_CheckRailType\t1\r\nPARAM\t530b2635-3aa0-43ca-b341-481ff6d7e38e\tPset_CessBetweenRails.JointRelativePosition\tTEXT\t\t117\t1\tPEnum_RelativePosition\t1\r\nPARAM\tfae31438-d91d-4563-848d-fc36d05e8cfd\tPset_CessBetweenRails.LoadCapacity\tNUMBER\t\t117\t1\tIfcForceMeasure\t1\r\nPARAM\t6e00b3e2-3084-476d-9ffb-0497643fa344\tPset_CessBetweenRails.UsagePurpose\tTEXT\t\t117\t1\tPEnum_UsagePurpose\t1\r\n#\r\nGROUP\t118\tPset_ChillerPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td8df4200-d1c8-11e1-8000-00215ad4efdf\tPset_ChillerPHistory.Capacity\tMULTILINETEXT\t\t118\t1\tIfcTimeSeries\t1\r\nPARAM\tff94b171-501e-4a83-991f-6819d134d90a\tPset_ChillerPHistory.CapacityCurve\tNUMBER\t\t118\t1\tIfcReal\t1\r\nPARAM\te0065000-d1c8-11e1-8000-00215ad4efdf\tPset_ChillerPHistory.CoefficientOfPerformance\tMULTILINETEXT\t\t118\t1\tIfcTimeSeries\t1\r\nPARAM\t3ffca6d2-2073-421e-9dbd-fe5d40f54925\tPset_ChillerPHistory.CoefficientOfPerformanceCurve\tNUMBER\t\t118\t1\tIfcReal\t1\r\nPARAM\tdbda3280-d1c8-11e1-8000-00215ad4efdf\tPset_ChillerPHistory.EnergyEfficiencyRatio\tMULTILINETEXT\t\t118\t1\tIfcTimeSeries\t1\r\nPARAM\td95f1587-d481-4251-972f-a47999a6fa92\tPset_ChillerPHistory.FullLoadRatioCurve\tNUMBER\t\t118\t1\tIfcReal\t1\r\n#\r\nGROUP\t119\tPset_ChillerTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1e9c0a80-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.CapacityCurve\tMULTILINETEXT\t\t119\t1\tPropertyTableValue\t1\r\nPARAM\t388deca3-ffb8-409f-9d7f-a5f88b15bc51\tPset_ChillerTypeCommon.ChillerCapacity\tNUMBER\t\t119\t1\tIfcPowerMeasure\t1\r\nPARAM\t278cdc00-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.CoefficientOfPerformanceCurve\tMULTILINETEXT\t\t119\t1\tPropertyTableValue\t1\r\nPARAM\t2fe51700-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.FullLoadRatioCurve\tMULTILINETEXT\t\t119\t1\tPropertyTableValue\t1\r\nPARAM\tfe6c4b80-d1c8-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.NominalCapacity\tNUMBER\t\t119\t1\tIfcPowerMeasure\t1\r\nPARAM\t0926e080-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.NominalCondensingTemperature\tNUMBER\t\t119\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t04622c80-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.NominalEfficiency\tNUMBER\t\t119\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t0e842b00-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.NominalEvaporatingTemperature\tNUMBER\t\t119\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t147a0c00-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.NominalHeatRejectionRate\tNUMBER\t\t119\t1\tIfcPowerMeasure\t1\r\nPARAM\t19d75680-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.NominalPowerConsumption\tNUMBER\t\t119\t1\tIfcPowerMeasure\t1\r\nPARAM\teac0e500-d1c8-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.Reference\tTEXT\t\t119\t1\tIfcIdentifier\t1\r\nPARAM\tef859900-d1c8-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.Status\tTEXT\t\t119\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t120\tPset_ChimneyCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t6cb10e00-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.FireRating\tTEXT\t\t120\t1\tIfcLabel\t1\r\nPARAM\t5c992e80-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.IsExternal\tYESNO\t\t120\t1\tIfcBoolean\t1\r\nPARAM\t6753c380-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.LoadBearing\tYESNO\t\t120\t1\tIfcBoolean\t1\r\nPARAM\t573be400-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.NumberOfDrafts\tINTEGER\t\t120\t1\tIfcCountMeasure\t1\r\nPARAM\t412e2380-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.Reference\tTEXT\t\t120\t1\tIfcIdentifier\t1\r\nPARAM\t468b6e00-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.Status\tTEXT\t\t120\t1\tPEnum_ElementStatus\t1\r\nPARAM\t61f67900-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.ThermalTransmittance\tNUMBER\t\t120\t1\tIfcThermalTransmittanceMeasure\t1\r\n#\r\nGROUP\t121\tPset_CivilElementCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t70725207-4869-40a2-a2df-14795defd067\tPset_CivilElementCommon.Reference\tTEXT\t\t121\t1\tIfcIdentifier\t1\r\nPARAM\t0c528b1c-7565-457c-85ee-19a5f19a76f1\tPset_CivilElementCommon.Status\tTEXT\t\t121\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t122\tPset_CoaxialCable\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc2fddf39-aa06-431b-a661-893c468428fd\tPset_CoaxialCable.CharacteristicImpedance\tNUMBER\t\t122\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\t875a55b2-1438-44df-a7b0-7b95e534cddb\tPset_CoaxialCable.CouplingLoss\tNUMBER\t\t122\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t816774cd-febc-4429-b735-9ecb875a4fd0\tPset_CoaxialCable.MaximumTransmissionAttenuation\tNUMBER\t\t122\t1\tIfcSoundPowerLevelMeasure\t1\r\nPARAM\t8e3d11d0-6620-42e1-9876-722eecc491b5\tPset_CoaxialCable.NumberOfCoaxialPairs\tINTEGER\t\t122\t1\tIfcCountMeasure\t1\r\nPARAM\t57af1cb6-d413-40b4-8b55-a72bf017c3c4\tPset_CoaxialCable.PropagationSpeedCoefficient\tNUMBER\t\t122\t1\tIfcRatioMeasure\t1\r\nPARAM\t09f05b05-bdff-42f2-9eac-3ab007499062\tPset_CoaxialCable.RadiantFrequency\tNUMBER\t\t122\t1\tIfcFrequencyMeasure\t1\r\nPARAM\t6b8d3a55-33d6-48b2-88d0-8528f02e1429\tPset_CoaxialCable.TransmissionLoss\tNUMBER\t\t122\t1\tIfcNormalisedRatioMeasure\t1\r\n#\r\nGROUP\t123\tPset_CoilOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t789cd000-d1c9-11e1-8000-00215ad4efdf\tPset_CoilOccurrence.HasSoundAttenuation\tYESNO\t\t123\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t124\tPset_CoilPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t87838280-d1c9-11e1-8000-00215ad4efdf\tPset_CoilPHistory.AirPressureDropCurve\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\r\nPARAM\tc91e617f-c419-4e09-895b-38632f4b11a0\tPset_CoilPHistory.AirPressureDropCurveHistory\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\r\nPARAM\t84889200-d1c9-11e1-8000-00215ad4efdf\tPset_CoilPHistory.AtmosphericPressure\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\r\nPARAM\t8e11fa00-d1c9-11e1-8000-00215ad4efdf\tPset_CoilPHistory.FaceVelocity\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\r\nPARAM\t8b170980-d1c9-11e1-8000-00215ad4efdf\tPset_CoilPHistory.SoundCurve\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\r\nPARAM\tcaf4449e-6458-4ce9-9dfa-ed371fc86f6d\tPset_CoilPHistory.SoundCurveHistory\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t125\tPset_CoilTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb4d03080-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.AirflowRateRange\tMULTILINETEXT\t\t125\t1\tPropertyBoundedValue\t1\r\nPARAM\ta121cb96-2bc1-4191-8450-09512cad7abe\tPset_CoilTypeCommon.AirFlowRateRange\tMULTILINETEXT\t\t125\t1\tPropertyBoundedValue\t1\r\nPARAM\t18833f40-ebac-42d3-8cd9-797857399417\tPset_CoilTypeCommon.CoilPlacement\tTEXT\t\t125\t1\tPEnum_CoilPlacementType\t1\r\nPARAM\tc0235c00-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.NominalLatentCapacity\tNUMBER\t\t125\t1\tIfcPowerMeasure\t1\r\nPARAM\tbb5ea800-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.NominalSensibleCapacity\tNUMBER\t\t125\t1\tIfcPowerMeasure\t1\r\nPARAM\tc580a680-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.NominalUA\tNUMBER\t\t125\t1\tIfcReal\t1\r\nPARAM\tad108c00-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.OperationalTemperatureRange\tMULTILINETEXT\t\t125\t1\tPropertyBoundedValue\t1\r\nPARAM\tc9acc400-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.PlacementType\tTEXT\t\t125\t1\tPEnum_CoilPlacementType\t1\r\nPARAM\t979b6200-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.Reference\tTEXT\t\t125\t1\tIfcIdentifier\t1\r\nPARAM\t9ec27000-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.Status\tTEXT\t\t125\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t126\tPset_CoilTypeHydronic\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3758f000-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.BypassFactor\tNUMBER\t\t126\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\teea13700-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.CoilConnectionDirection\tTEXT\t\t126\t1\tPEnum_CoilConnectionDirection\t1\r\nPARAM\te1844800-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.CoilCoolant\tTEXT\t\t126\t1\tPEnum_CoilCoolant\t1\r\nPARAM\t0b3d6f00-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.CoilFaceArea\tAREA\t\t126\t1\tIfcAreaMeasure\t1\r\nPARAM\tfd87e980-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.CoilFluidArrangement\tTEXT\t\t126\t1\tPEnum_CoilFluidArrangement\t1\r\nPARAM\t04e5e344-740f-4a5a-a535-00ba794bd420\tPset_CoilTypeHydronic.Fluid\tMULTILINETEXT\t\t126\t1\tIfcMaterial\t1\r\nPARAM\tdc26fd80-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.FluidPressureRange\tMULTILINETEXT\t\t126\t1\tPropertyBoundedValue\t1\r\nPARAM\t109ab980-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.HeatExchangeSurfaceArea\tAREA\t\t126\t1\tIfcAreaMeasure\t1\r\nPARAM\t15f80400-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.PrimarySurfaceArea\tAREA\t\t126\t1\tIfcAreaMeasure\t1\r\nPARAM\t1abcb800-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.SecondarySurfaceArea\tAREA\t\t126\t1\tIfcAreaMeasure\t1\r\nPARAM\t3cb63a80-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.SensibleHeatRatio\tNUMBER\t\t126\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t26a87a00-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.TotalUACurves\tMULTILINETEXT\t\t126\t1\tPropertyTableValue\t1\r\nPARAM\t2f00b500-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.WaterPressureDropCurve\tMULTILINETEXT\t\t126\t1\tPropertyTableValue\t1\r\nPARAM\t42ac1b80-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.WetCoilFraction\tNUMBER\t\t126\t1\tIfcNormalisedRatioMeasure\t1\r\n#\r\nGROUP\t127\tPset_ColumnCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8737b700-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.FireRating\tTEXT\t\t127\t1\tIfcLabel\t1\r\nPARAM\t77b86e00-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.IsExternal\tYESNO\t\t127\t1\tIfcBoolean\t1\r\nPARAM\t8141d600-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.LoadBearing\tYESNO\t\t127\t1\tIfcBoolean\t1\r\nPARAM\t522b6480-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.Reference\tTEXT\t\t127\t1\tIfcIdentifier\t1\r\nPARAM\t71c28d00-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.Roll\tNUMBER\t\t127\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t6bccac00-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.Slope\tNUMBER\t\t127\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t5a839f80-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.Status\tTEXT\t\t127\t1\tPEnum_ElementStatus\t1\r\nPARAM\t7c7d2200-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.ThermalTransmittance\tNUMBER\t\t127\t1\tIfcThermalTransmittanceMeasure\t1\r\n#\r\nGROUP\t128\tPset_CommunicationsAppliancePHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t90c11f00-d1ca-11e1-8000-00215ad4efdf\tPset_CommunicationsAppliancePHistory.PowerState\tMULTILINETEXT\t\t128\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t129\tPset_CommunicationsApplianceTypeAntenna\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta83792e5-9ac2-41d2-a7c9-d40d1c0cf5e3\tPset_CommunicationsApplianceTypeAntenna.AntennaGain\tNUMBER\t\t129\t1\tIfcRatioMeasure\t1\r\nPARAM\tc6d4d25f-f30c-45ff-a619-59988d2e5358\tPset_CommunicationsApplianceTypeAntenna.AntennaType\tTEXT\t\t129\t1\tPEnum_AntennaType\t1\r\nPARAM\t1b053b27-ff76-4409-ac35-19caf8772d92\tPset_CommunicationsApplianceTypeAntenna.PolarizationMode\tTEXT\t\t129\t1\tPEnum_PolarizationMode\t1\r\nPARAM\tdfe4af5b-1236-4946-9036-db20f8cee658\tPset_CommunicationsApplianceTypeAntenna.RadiationPattern\tTEXT\t\t129\t1\tPEnum_RadiationPattern\t1\r\n#\r\nGROUP\t130\tPset_CommunicationsApplianceTypeAutomaton\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0da59b44-c7ee-43d6-b9f1-1402313569a8\tPset_CommunicationsApplianceTypeAutomaton.InputSignalType\tTEXT\t\t130\t1\tPEnum_InputOutputSignalType\t1\r\nPARAM\t2f31282d-90c0-45fd-9bd1-697b27535f56\tPset_CommunicationsApplianceTypeAutomaton.OutputSignalType\tTEXT\t\t130\t1\tPEnum_InputOutputSignalType\t1\r\n#\r\nGROUP\t131\tPset_CommunicationsApplianceTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t9ae31d80-d1ca-11e1-8000-00215ad4efdf\tPset_CommunicationsApplianceTypeCommon.Reference\tTEXT\t\t131\t1\tIfcIdentifier\t1\r\nPARAM\t9fa7d180-d1ca-11e1-8000-00215ad4efdf\tPset_CommunicationsApplianceTypeCommon.Status\tTEXT\t\t131\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t132\tPset_CommunicationsApplianceTypeComputer\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t6e266a76-5462-439e-b2f3-f7281b4153be\tPset_CommunicationsApplianceTypeComputer.StorageCapacity\tINTEGER\t\t132\t1\tIfcInteger\t1\r\nPARAM\t09fb3343-f7ea-4415-a4cb-ccf7013949c3\tPset_CommunicationsApplianceTypeComputer.UserInterfaceType\tTEXT\t\t132\t1\tPEnum_ComputerUIType\t1\r\n#\r\nGROUP\t133\tPset_CommunicationsApplianceTypeGateway\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tacb0430d-ee5a-4ebf-a7c3-cc6ad766cdc7\tPset_CommunicationsApplianceTypeGateway.NumberOfInterfaces\tMULTILINETEXT\t\t133\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t134\tPset_CommunicationsApplianceTypeIntelligentPeripheral\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tda13f512-e6d4-464f-ab90-fee40c48e1bf\tPset_CommunicationsApplianceTypeIntelligentPeripheral.UserCapacity\tINTEGER\t\t134\t1\tIfcInteger\t1\r\n#\r\nGROUP\t135\tPset_CommunicationsApplianceTypeIpNetworkEquipment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5e5ece2b-494e-40fa-a9dc-faaec7931eb4\tPset_CommunicationsApplianceTypeIpNetworkEquipment.EquipmentCapacity\tINTEGER\t\t135\t1\tIfcIntegerCountRateMeasure\t1\r\nPARAM\tf1d6dd75-91f0-4e9f-8bf9-bab53cade397\tPset_CommunicationsApplianceTypeIpNetworkEquipment.ManagingSoftware\tTEXT\t\t135\t1\tIfcLabel\t1\r\nPARAM\t4f6b91b5-9f20-4a1a-b09c-c73ab07b402e\tPset_CommunicationsApplianceTypeIpNetworkEquipment.NumberOfCoolingFans\tINTEGER\t\t135\t1\tIfcCountMeasure\t1\r\nPARAM\t4b0d77f7-4b0d-4de8-bec2-28e4b11a5265\tPset_CommunicationsApplianceTypeIpNetworkEquipment.NumberOfInterfaces\tMULTILINETEXT\t\t135\t1\tPropertyTableValue\t1\r\nPARAM\t6c6e0da2-40de-4453-847e-96e456e284cd\tPset_CommunicationsApplianceTypeIpNetworkEquipment.NumberOfSlots\tINTEGER\t\t135\t1\tIfcCountMeasure\t1\r\nPARAM\t73d0cd19-b694-40cd-b700-96fc8e898fa7\tPset_CommunicationsApplianceTypeIpNetworkEquipment.SupportedProtocol\tTEXT\t\t135\t1\tIfcLabel\t1\r\n#\r\nGROUP\t136\tPset_CommunicationsApplianceTypeModem\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t75a567ec-ca18-41f2-b2e8-f12ecdad56b2\tPset_CommunicationsApplianceTypeModem.CommonInterfaceType\tTEXT\t\t136\t1\tPEnum_CommonInterfaceType\t1\r\nPARAM\tfedd4a9e-2082-432a-b54a-de4cbdac7466\tPset_CommunicationsApplianceTypeModem.NumberOfCommonInterfaces\tMULTILINETEXT\t\t136\t1\tPropertyTableValue\t1\r\nPARAM\t63afd9aa-0ae6-4aaf-acf1-94f117cb9bd7\tPset_CommunicationsApplianceTypeModem.NumberOfTrafficInterfaces\tMULTILINETEXT\t\t136\t1\tPropertyTableValue\t1\r\nPARAM\tc6afc5cc-4ece-491f-abcd-6dc55fa617e7\tPset_CommunicationsApplianceTypeModem.TrafficInterfaceType\tTEXT\t\t136\t1\tPEnum_ModemTrafficInterfaceType\t1\r\n#\r\nGROUP\t137\tPset_CommunicationsApplianceTypeOpticalLineTerminal\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4485fdae-f1ad-4ce3-963d-f2e16af98c25\tPset_CommunicationsApplianceTypeOpticalLineTerminal.NumberOfInterfaces\tMULTILINETEXT\t\t137\t1\tPropertyTableValue\t1\r\nPARAM\t8b2cb9d2-3386-4664-b5f7-3a7eb32a3565\tPset_CommunicationsApplianceTypeOpticalLineTerminal.NumberOfSlots\tINTEGER\t\t137\t1\tIfcCountMeasure\t1\r\n#\r\nGROUP\t138\tPset_CommunicationsApplianceTypeOpticalNetworkUnit\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t51a24323-9450-46c8-b997-1031661f0bc1\tPset_CommunicationsApplianceTypeOpticalNetworkUnit.NumberOfInterfaces\tMULTILINETEXT\t\t138\t1\tPropertyTableValue\t1\r\nPARAM\t4a8c57c4-cc77-4080-bd3e-f488cb66963c\tPset_CommunicationsApplianceTypeOpticalNetworkUnit.OpticalNetworkUnitType\tTEXT\t\t138\t1\tPEnum_OpticalNetworkUnitType\t1\r\n#\r\nGROUP\t139\tPset_CommunicationsApplianceTypeTelecommand\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5060609e-3bb1-4176-99da-03cea42b91d0\tPset_CommunicationsApplianceTypeTelecommand.NumberOfCPUs\tINTEGER\t\t139\t1\tIfcCountMeasure\t1\r\nPARAM\tb390812f-a646-427a-8bff-94c4af2f40ef\tPset_CommunicationsApplianceTypeTelecommand.NumberOfWorkstations\tMULTILINETEXT\t\t139\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t140\tPset_CommunicationsApplianceTypeTelephonyExchange\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0ccb9795-1144-4517-a3bc-01eea744c7c0\tPset_CommunicationsApplianceTypeTelephonyExchange.UserCapacity\tINTEGER\t\t140\t1\tIfcInteger\t1\r\n#\r\nGROUP\t141\tPset_CommunicationsApplianceTypeTransportEquipment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0991e3fa-050c-46aa-ac67-573c8d263fc4\tPset_CommunicationsApplianceTypeTransportEquipment.ElectricalCrossCapacity\tTEXT\t\t141\t1\tIfcLabel\t1\r\nPARAM\t28a48cc5-9086-4c04-8b75-c38db8d9cb6b\tPset_CommunicationsApplianceTypeTransportEquipment.IsUpgradable\tYESNO\t\t141\t1\tIfcBoolean\t1\r\nPARAM\t1d85e225-305f-4f64-8a40-524d63e2e7fc\tPset_CommunicationsApplianceTypeTransportEquipment.NumberOfSlots\tINTEGER\t\t141\t1\tIfcCountMeasure\t1\r\nPARAM\tfffc30a7-df90-4440-9d04-d3e9481885f6\tPset_CommunicationsApplianceTypeTransportEquipment.TransportEquipmentAssemblyType\tTEXT\t\t141\t1\tPEnum_TransportEquipmentAssemblyType\t1\r\nPARAM\tc3eafb53-5cc6-47a3-aad3-ddf1aa099985\tPset_CommunicationsApplianceTypeTransportEquipment.TransportEquipmentType\tTEXT\t\t141\t1\tPEnum_TransportEquipmentType\t1\r\n#\r\nGROUP\t142\tPset_CompressorPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te09fe600-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.CoefficientOfPerformance\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\r\nPARAM\te72e5d80-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.CompressionEfficiency\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\r\nPARAM\tda116e80-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.CompressorCapacity\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\r\nPARAM\tf0b7c580-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.CompressorTotalEfficiency\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\r\nPARAM\t0200d200-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.CompressorTotalHeatGain\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\r\nPARAM\tdd0c5f00-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.EnergyEfficiencyRatio\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\r\nPARAM\tff05e180-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.FrictionHeatGain\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\r\nPARAM\t05945900-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.FullLoadRatio\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\r\nPARAM\tde767aa2-db4c-45d8-9fee-cc59526d84f0\tPset_CompressorPHistory.FullLoadRatioCurve\tMULTILINETEXT\t\t142\t1\tPropertyListValue\t1\r\nPARAM\tf8776a00-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.InputPower\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\r\nPARAM\ted243e80-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.IsentropicEfficiency\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\r\nPARAM\tfc0af100-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.LubricantPumpHeatGain\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\r\nPARAM\tea294e00-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.MechanicalEfficiency\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\r\nPARAM\tf4e3e300-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.ShaftPower\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\r\nPARAM\te4336d00-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.VolumetricEfficiency\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t143\tPset_CompressorTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t57d57a00-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.CompressorSpeed\tNUMBER\t\t143\t1\tIfcRotationalFrequencyMeasure\t1\r\nPARAM\t70de2b00-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.HasHotGasBypass\tYESNO\t\t143\t1\tIfcBoolean\t1\r\nPARAM\t6459d280-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.IdealCapacity\tNUMBER\t\t143\t1\tIfcPowerMeasure\t1\r\nPARAM\t6b80e080-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.IdealShaftPower\tNUMBER\t\t143\t1\tIfcPowerMeasure\t1\r\nPARAM\t76d40c00-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.ImpellerDiameter\tLENGTH\t\t143\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t5310c600-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.MaximumPartLoadRatio\tNUMBER\t\t143\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t4db37b80-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.MinimumPartLoadRatio\tNUMBER\t\t143\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t5dcb5b00-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.NominalCapacity\tNUMBER\t\t143\t1\tIfcPowerMeasure\t1\r\nPARAM\t278ddb80-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.PowerSource\tTEXT\t\t143\t1\tPEnum_CompressorTypePowerSource\t1\r\nPARAM\t0fb65780-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.Reference\tTEXT\t\t143\t1\tIfcIdentifier\t1\r\nPARAM\t36748e00-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.RefrigerantClass\tTEXT\t\t143\t1\tPEnum_RefrigerantClass\t1\r\nPARAM\t0aeb60de-a6a2-499d-9baa-1e4c99920e0d\tPset_CompressorTypeCommon.RefrigerantType\tMULTILINETEXT\t\t143\t1\tIfcMaterial\t1\r\nPARAM\t1513a200-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.Status\tTEXT\t\t143\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t144\tPset_ConcreteElementGeneral\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbf832383-c0a0-496f-9b87-f9d11955c454\tPset_ConcreteElementGeneral.AssemblyPlace\tTEXT\t\t144\t1\tPEnum_AssemblyPlace\t1\r\nPARAM\t1e1d5920-bd4a-4e80-be8a-4a84be7d3c25\tPset_ConcreteElementGeneral.CastingMethod\tTEXT\t\t144\t1\tPEnum_ConcreteCastingMethod\t1\r\nPARAM\t0764b8e3-6a7c-4275-859f-1534ea3eec09\tPset_ConcreteElementGeneral.ConcreteCover\tLENGTH\t\t144\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tbef32e80-d1cb-11e1-8000-00215ad4efdf\tPset_ConcreteElementGeneral.ConcreteCoverAtLinks\tLENGTH\t\t144\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb8fd4d80-d1cb-11e1-8000-00215ad4efdf\tPset_ConcreteElementGeneral.ConcreteCoverAtMainBars\tLENGTH\t\t144\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t64af56b3-0b45-40c2-b43d-74b49a28b9db\tPset_ConcreteElementGeneral.ConstructionMethod\tTEXT\t\t144\t1\tIfcLabel\t1\r\nPARAM\tabe05e80-d1cb-11e1-8000-00215ad4efdf\tPset_ConcreteElementGeneral.ConstructionToleranceClass\tTEXT\t\t144\t1\tIfcLabel\t1\r\nPARAM\t5ec8e50f-7c94-47d4-a3b8-0da312bc2657\tPset_ConcreteElementGeneral.ConstructionType\tTEXT\t\t144\t1\tIfcLabel\t1\r\nPARAM\ta4b95080-d1cb-11e1-8000-00215ad4efdf\tPset_ConcreteElementGeneral.DimensionalAccuracyClass\tTEXT\t\t144\t1\tIfcLabel\t1\r\nPARAM\t3a40f78c-380c-41fc-85fe-f2d3cbbf55db\tPset_ConcreteElementGeneral.EnvironmentalClass\tTEXT\t\t144\t1\tIfcLabel\t1\r\nPARAM\t9bee0bf7-2ad3-4a66-bef5-7b71b7ca175b\tPset_ConcreteElementGeneral.ExposureClass\tTEXT\t\t144\t1\tIfcLabel\t1\r\nPARAM\t1a2f6c91-9cff-4fc8-a350-1998ae04d167\tPset_ConcreteElementGeneral.FireRating\tTEXT\t\t144\t1\tIfcLabel\t1\r\nPARAM\t94985a4b-78a9-4230-a252-bb76d489d340\tPset_ConcreteElementGeneral.LifeCycleEnvironmentalLoad\tTEXT\t\t144\t1\tIfcText\t1\r\nPARAM\t03693864-2cbf-49e2-a90d-346134ac7475\tPset_ConcreteElementGeneral.ReinforcementAreaRatio\tNUMBER\t\t144\t1\tIfcAreaDensityMeasure\t1\r\nPARAM\tb88ca225-2c4b-4014-bcf2-89bbbd596398\tPset_ConcreteElementGeneral.ReinforcementStrengthClass\tTEXT\t\t144\t1\tIfcLabel\t1\r\nPARAM\ta1c0e785-c9bc-4187-8ddb-c67fd0ff3d26\tPset_ConcreteElementGeneral.ReinforcementVolumeRatio\tMASS_DENSITY\t\t144\t1\tIfcMassDensityMeasure\t1\r\nPARAM\t906b76ed-e429-4fd6-9608-609a1bc961a9\tPset_ConcreteElementGeneral.ServiceLife\tNUMBER\t\t144\t1\tIfcTimeMeasure\t1\r\nPARAM\t96390dc4-43fd-41d8-8cb6-aca86dce4993\tPset_ConcreteElementGeneral.StrengthClass\tTEXT\t\t144\t1\tIfcLabel\t1\r\nPARAM\t84899180-d1cb-11e1-8000-00215ad4efdf\tPset_ConcreteElementGeneral.StructuralClass\tTEXT\t\t144\t1\tIfcLabel\t1\r\n#\r\nGROUP\t145\tPset_ConcreteElementQuantityGeneral\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3b37fec6-340b-4132-b522-68eb4d404689\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryDescription\tTEXT\t\t145\t1\tIfcLabel\t1\r\nPARAM\t94cdc2d2-f10b-459a-b7f7-b877423d5bda\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryGroupCode\tTEXT\t\t145\t1\tIfcLabel\t1\r\nPARAM\tb52d3dd7-ad25-4e25-ba15-d0b402faa8ec\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryMaterial\tTEXT\t\t145\t1\tIfcLabel\t1\r\nPARAM\ta9b5d66d-1a3f-4618-bbcb-c8f645d92831\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryMaterialSpecificationReference\tMULTILINETEXT\t\t145\t1\tIfcExternalReference\t1\r\nPARAM\t8e8df386-e824-4ce5-a01e-b52fd3eb0e07\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryQuantityByNumberOfItems\tINTEGER\t\t145\t1\tIfcCountMeasure\t1\r\nPARAM\ta791db89-aae4-4987-96dc-bbf065f5363b\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryQuantityByWeight\tNUMBER\t\t145\t1\tIfcMassMeasure\t1\r\nPARAM\t67b58211-c7d5-4365-aa3b-ea9ccbe9c50b\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessorySize\tTEXT\t\t145\t1\tIfcLabel\t1\r\nPARAM\t9bacb691-e039-46ae-89b4-495ab34f4d48\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryType\tTEXT\t\t145\t1\tIfcLabel\t1\r\nPARAM\t44b8fec8-6c6d-44ee-bed8-e61ee93d16c1\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryTypeSpecificationReference\tMULTILINETEXT\t\t145\t1\tIfcExternalReference\t1\r\nPARAM\t957283af-9743-497f-8920-281a61b190d0\tPset_ConcreteElementQuantityGeneral.TotalConcreteQuantity\tVOLUME\t\t145\t1\tIfcVolumeMeasure\t1\r\nPARAM\t6f0e6260-0524-43b6-91bb-8c15ec96230f\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarDiameter\tLENGTH\t\t145\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t7aaaed83-ff94-4539-87f7-bc93388b1d44\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarQuantity\tNUMBER\t\t145\t1\tIfcMassMeasure\t1\r\nPARAM\t653ef51a-ac75-4ae0-b15c-903a6643c08c\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarSteelGrade\tTEXT\t\t145\t1\tIfcLabel\t1\r\nPARAM\t6ce74f47-6fa5-4f0b-8aba-92e37d05f81d\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarSteelGradeSpecificationReference\tMULTILINETEXT\t\t145\t1\tIfcExternalReference\t1\r\n#\r\nGROUP\t146\tPset_ConcreteElementSurfaceFinishQuantityGeneral\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta3c0f9a6-5875-4b69-b85d-1c2ad87823f6\tPset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceArea\tAREA\t\t146\t1\tIfcAreaMeasure\t1\r\nPARAM\t49e67d5d-134e-4fde-aacd-d5c43916ed03\tPset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceClass\tTEXT\t\t146\t1\tIfcLabel\t1\r\nPARAM\t7f7621d9-ce39-4fc9-881d-ab9de678a378\tPset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceType\tTEXT\t\t146\t1\tIfcLabel\t1\r\nPARAM\t3e028658-84d4-436d-8e97-440c25c03834\tPset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceArea\tAREA\t\t146\t1\tIfcAreaMeasure\t1\r\nPARAM\tdd5d5098-66be-46e9-a0c0-e08b43bf1e02\tPset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceClass\tTEXT\t\t146\t1\tIfcLabel\t1\r\nPARAM\t7aaadab7-9563-46ea-b817-1c7b61cacbfe\tPset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceTextureDescription\tTEXT\t\t146\t1\tIfcText\t1\r\nPARAM\tc9b75eb0-6176-4a76-89c0-7b7de3be32f1\tPset_ConcreteElementSurfaceFinishQuantityGeneral.SurfaceDescriptionDocReference\tMULTILINETEXT\t\t146\t1\tIfcExternalReference\t1\r\n#\r\nGROUP\t147\tPset_CondenserPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7a1bc780-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.CompressorCondenserHeatGain\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\r\nPARAM\t7daf4e80-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.CompressorCondenserPressureDrop\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\r\nPARAM\t8142d580-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.CondenserMeanVoidFraction\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\r\nPARAM\t6ec89c00-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.CondensingTemperature\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\r\nPARAM\t640e0700-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.ExteriorHeatTransferCoefficient\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\r\nPARAM\t5fe1e980-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.HeatRejectionRate\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\r\nPARAM\t67a18e00-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.InteriorHeatTransferCoefficient\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\r\nPARAM\t72f4b980-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.LogarithmicMeanTemperatureDifference\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\r\nPARAM\t6bcdab80-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.RefrigerantFoulingResistance\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\r\nPARAM\t76884080-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.UAcurves\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\r\nPARAM\t84d65c80-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.WaterFoulingResistance\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t148\tPset_CondenserTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb0f1dd80-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.ExternalSurfaceArea\tAREA\t\t148\t1\tIfcAreaMeasure\t1\r\nPARAM\tbc450900-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.InternalRefrigerantVolume\tVOLUME\t\t148\t1\tIfcVolumeMeasure\t1\r\nPARAM\tb6e7be80-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.InternalSurfaceArea\tAREA\t\t148\t1\tIfcAreaMeasure\t1\r\nPARAM\tc1a25380-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.InternalWaterVolume\tVOLUME\t\t148\t1\tIfcVolumeMeasure\t1\r\nPARAM\tc6670780-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.NominalHeatTransferArea\tAREA\t\t148\t1\tIfcAreaMeasure\t1\r\nPARAM\tcbc45200-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.NominalHeatTransferCoefficient\tNUMBER\t\t148\t1\tIfcThermalTransmittanceMeasure\t1\r\nPARAM\t8f90f180-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.Reference\tTEXT\t\t148\t1\tIfcIdentifier\t1\r\nPARAM\t94ee3c00-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.RefrigerantClass\tTEXT\t\t148\t1\tPEnum_RefrigerantClass\t1\r\nPARAM\te1ed813e-ae35-42e5-99e8-50bd1b3e7a48\tPset_CondenserTypeCommon.RefrigerantType\tMULTILINETEXT\t\t148\t1\tIfcMaterial\t1\r\nPARAM\td296b7a0-f2bb-4e30-9010-357681bd4adc\tPset_CondenserTypeCommon.Status\tTEXT\t\t148\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t149\tPset_Condition\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tdbdc3180-d1cc-11e1-8000-00215ad4efdf\tPset_Condition.AssessmentCondition\tTEXT\t\t149\t1\tIfcLabel\t1\r\nPARAM\td7177d80-d1cc-11e1-8000-00215ad4efdf\tPset_Condition.AssessmentDate\tTEXT\t\t149\t1\tIfcDate\t1\r\nPARAM\te1397c00-d1cc-11e1-8000-00215ad4efdf\tPset_Condition.AssessmentDescription\tTEXT\t\t149\t1\tIfcText\t1\r\nPARAM\t63e40965-a200-4bde-a2b8-16f56da1aef3\tPset_Condition.AssessmentFrequency\tNUMBER\t\t149\t1\tIfcTimeMeasure\t1\r\nPARAM\tf66d67c0-0ab6-41a1-8b10-a525df615d77\tPset_Condition.AssessmentMethod\tMULTILINETEXT\t\t149\t1\tIfcDocumentReference\t1\r\nPARAM\td9a43604-9a1f-4eab-b11d-ed427a8f9f9b\tPset_Condition.AssessmentType\tTEXT\t\t149\t1\tIfcLabel\t1\r\nPARAM\t708aaa85-76fd-48ba-8f9a-a450b389efa5\tPset_Condition.LastAssessmentReport\tTEXT\t\t149\t1\tIfcLabel\t1\r\nPARAM\tc81c45d4-f3d4-4a61-8526-59c2e435f533\tPset_Condition.NextAssessmentDate\tTEXT\t\t149\t1\tIfcDate\t1\r\n#\r\nGROUP\t150\tPset_ConstructionAdministration\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t296dd45f-5005-40b2-b118-e8e4f172343b\tPset_ConstructionAdministration.ProcurementMethod\tTEXT\t\t150\t1\tIfcLabel\t1\r\nPARAM\t0f3bcab6-f8b4-42b4-b468-2f169010e5d1\tPset_ConstructionAdministration.SpecificationSectionNumber\tTEXT\t\t150\t1\tIfcLabel\t1\r\nPARAM\tc34a85bf-683a-4561-ae21-e3f8d2e12a5b\tPset_ConstructionAdministration.SubmittalIdentifer\tTEXT\t\t150\t1\tIfcLabel\t1\r\n#\r\nGROUP\t151\tPset_ConstructionOccurence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t31771223-4140-4ed7-8684-dd6eb73a6474\tPset_ConstructionOccurence.AssetIdentifier\tTEXT\t\t151\t1\tIfcLabel\t1\r\nPARAM\t9c02813d-cbea-44d2-97f4-51ec5ecddc41\tPset_ConstructionOccurence.InstallationDate\tTEXT\t\t151\t1\tIfcDate\t1\r\nPARAM\td9061448-7f73-432f-a77c-7f2bf4bce3c3\tPset_ConstructionOccurence.ModelNumber\tTEXT\t\t151\t1\tIfcLabel\t1\r\nPARAM\tcc87dd45-b28c-499a-812d-8320b5a37c2f\tPset_ConstructionOccurence.TagNumber\tTEXT\t\t151\t1\tIfcLabel\t1\r\n#\r\nGROUP\t152\tPset_ConstructionResource\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t00d0a480-d1cd-11e1-8000-00215ad4efdf\tPset_ConstructionResource.ActualCompletion\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\r\nPARAM\tf9110000-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.ActualCost\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\r\nPARAM\tf1515b80-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.ActualWork\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\r\nPARAM\t2730383e-6034-47e7-95a2-9af1151a45ba\tPset_ConstructionResource.ActualWorkTime\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\r\nPARAM\tfb735a00-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.RemainingCost\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\r\nPARAM\tf3b3b580-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.RemainingWork\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\r\nPARAM\t0354b932-a487-4177-84ee-7954f717fcec\tPset_ConstructionResource.RemainingWorkProgression\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\r\nPARAM\tfe6e4a80-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.ScheduleCompletion\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\r\nPARAM\tf6aea600-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.ScheduleCost\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\r\nPARAM\tee566b00-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.ScheduleWork\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\r\nPARAM\t00b07eff-f778-4925-ad7a-6bced08814cf\tPset_ConstructionResource.ScheduleWorkProgression\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t153\tPset_ControllerPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0cbc6680-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerPHistory.Quality\tMULTILINETEXT\t\t153\t1\tIfcTimeSeries\t1\r\nPARAM\t0f1ec080-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerPHistory.Status\tMULTILINETEXT\t\t153\t1\tIfcTimeSeries\t1\r\nPARAM\t09c17600-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerPHistory.Value\tMULTILINETEXT\t\t153\t1\tIfcTimeSeries\t1\r\nPARAM\t154f1e41-4e1d-4579-ad85-8e76141c76c9\tPset_ControllerPHistory.ValueHistory\tMULTILINETEXT\t\t153\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t154\tPset_ControllerTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tee111c9c-558b-4b26-a786-d1d89dea88aa\tPset_ControllerTypeCommon.ControlType\tTEXT\t\t154\t1\tPEnum_ControlType\t1\r\nPARAM\t1776fb80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeCommon.Reference\tTEXT\t\t154\t1\tIfcIdentifier\t1\r\nPARAM\t3e1aad58-71b1-4b3b-a925-656f7f74b4c2\tPset_ControllerTypeCommon.SignalFactor\tNUMBER\t\t154\t1\tIfcReal\t1\r\nPARAM\tc035815e-01a2-4fd9-a21c-9795e7bd0eb4\tPset_ControllerTypeCommon.SignalOffset\tNUMBER\t\t154\t1\tIfcReal\t1\r\nPARAM\tf5327db5-7978-4ec7-ac5f-a32887bd814d\tPset_ControllerTypeCommon.SignalTime\tNUMBER\t\t154\t1\tIfcTimeMeasure\t1\r\nPARAM\t1c3baf80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeCommon.Status\tTEXT\t\t154\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t155\tPset_ControllerTypeFloating\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2eb5e900-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.ControlType\tTEXT\t\t155\t1\tPEnum_ControllerTypeFloating\t1\r\nPARAM\t56a54c80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.Labels\tMULTILINETEXT\t\t155\t1\tPropertyTableValue\t1\r\nPARAM\t5efd8780-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.Range\tMULTILINETEXT\t\t155\t1\tPropertyBoundedValue\t1\r\nPARAM\t6de43a00-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.SignalFactor\tNUMBER\t\t155\t1\tIfcReal\t1\r\nPARAM\t69b81c80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.SignalOffset\tNUMBER\t\t155\t1\tIfcReal\t1\r\nPARAM\t72a8ee00-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.SignalTime\tNUMBER\t\t155\t1\tIfcTimeMeasure\t1\r\nPARAM\t63c23b80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.Value\tMULTILINETEXT\t\t155\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t156\tPset_ControllerTypeMultiPosition\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7e94b000-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeMultiPosition.ControlType\tTEXT\t\t156\t1\tPEnum_ControllerMultiPositionType\t1\r\nPARAM\t3e6bde32-0968-49dd-8907-d922d82e10a0\tPset_ControllerTypeMultiPosition.IntegerRange\tMULTILINETEXT\t\t156\t1\tPropertyBoundedValue\t1\r\nPARAM\t89e7db80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeMultiPosition.Labels\tMULTILINETEXT\t\t156\t1\tPropertyTableValue\t1\r\nPARAM\t910ee980-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeMultiPosition.Range\tMULTILINETEXT\t\t156\t1\tPropertyBoundedValue\t1\r\nPARAM\t95d39d80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeMultiPosition.Value\tMULTILINETEXT\t\t156\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t157\tPset_ControllerTypeProgrammable\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5a95c146-e11d-4ab0-9a7b-5dbaa356881c\tPset_ControllerTypeProgrammable.Application\tTEXT\t\t157\t1\tPEnum_ControllerApplication\t1\r\nPARAM\ta126c900-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProgrammable.ControlType\tTEXT\t\t157\t1\tPEnum_ControllerTypeProgrammable\t1\r\nPARAM\tab48c780-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProgrammable.FirmwareVersion\tTEXT\t\t157\t1\tIfcLabel\t1\r\nPARAM\tb0a61200-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProgrammable.SoftwareVersion\tTEXT\t\t157\t1\tIfcLabel\t1\r\n#\r\nGROUP\t158\tPset_ControllerTypeProportional\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbd2a6a80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.ControlType\tTEXT\t\t158\t1\tPEnum_ControllerProportionalType\t1\r\nPARAM\teba84580-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.DerivativeConstant\tNUMBER\t\t158\t1\tIfcReal\t1\r\nPARAM\te6e39180-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.IntegralConstant\tNUMBER\t\t158\t1\tIfcReal\t1\r\nPARAM\tcc111d00-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.Labels\tMULTILINETEXT\t\t158\t1\tPropertyTableValue\t1\r\nPARAM\te1864700-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.ProportionalConstant\tNUMBER\t\t158\t1\tIfcReal\t1\r\nPARAM\td4695800-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.Range\tMULTILINETEXT\t\t158\t1\tPropertyBoundedValue\t1\r\nPARAM\tb6a967eb-017d-401e-975c-498724ae1213\tPset_ControllerTypeProportional.SignalFactor1\tNUMBER\t\t158\t1\tIfcReal\t1\r\nPARAM\tf6dcf389-fbb9-43fa-9a4a-c19a7eada379\tPset_ControllerTypeProportional.SignalFactor2\tNUMBER\t\t158\t1\tIfcReal\t1\r\nPARAM\tc3202180-6f9a-4584-8574-0337b159aa41\tPset_ControllerTypeProportional.SignalTime1\tNUMBER\t\t158\t1\tIfcTimeMeasure\t1\r\nPARAM\tac973cbe-b8e5-4abb-9be1-b890024686b6\tPset_ControllerTypeProportional.SignalTime2\tNUMBER\t\t158\t1\tIfcTimeMeasure\t1\r\nPARAM\tf7940780-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.SignalTimeDecrease\tNUMBER\t\t158\t1\tIfcTimeMeasure\t1\r\nPARAM\tf236bd00-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.SignalTimeIncrease\tNUMBER\t\t158\t1\tIfcTimeMeasure\t1\r\nPARAM\tda5f3900-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.Value\tMULTILINETEXT\t\t158\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t159\tPset_ControllerTypeTwoPosition\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t619d5848-fcb1-492f-87c8-fe13c54b13ec\tPset_ControllerTypeTwoPosition.BandWidth\tNUMBER\t\t159\t1\tIfcReal\t1\r\nPARAM\t02e73300-d1ce-11e1-8000-00215ad4efdf\tPset_ControllerTypeTwoPosition.ControlType\tTEXT\t\t159\t1\tPEnum_ControllerTwoPositionType\t1\r\nPARAM\t201c0180-d1ce-11e1-8000-00215ad4efdf\tPset_ControllerTypeTwoPosition.Labels\tMULTILINETEXT\t\t159\t1\tPropertyTableValue\t1\r\nPARAM\t27dba600-d1ce-11e1-8000-00215ad4efdf\tPset_ControllerTypeTwoPosition.Polarity\tYESNO\t\t159\t1\tIfcBoolean\t1\r\nPARAM\t2d38f080-d1ce-11e1-8000-00215ad4efdf\tPset_ControllerTypeTwoPosition.Value\tYESNO\t\t159\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t160\tPset_CooledBeamPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t404bc080-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.BeamCoolingCapacity\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\r\nPARAM\t4346b100-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.BeamHeatingCapacity\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\r\nPARAM\t4641a180-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.CoolingWaterFlowRate\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\r\nPARAM\t4cd01900-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.CorrectionFactorForCooling\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\r\nPARAM\t5063a000-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.CorrectionFactorForHeating\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\r\nPARAM\t493c9200-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.HeatingWaterFlowRate\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\r\nPARAM\t59ed0800-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.ReturnWaterTemperatureCooling\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\r\nPARAM\t607b7f80-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.ReturnWaterTemperatureHeating\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\r\nPARAM\t578aae00-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.SupplyWaterTemperatureCooling\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\r\nPARAM\t5ce7f880-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.SupplyWaterTemperatureHeating\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\r\nPARAM\t39bd4900-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.TotalCoolingCapacity\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\r\nPARAM\t3cb83980-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.TotalHeatingCapacity\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\r\nPARAM\t53f72700-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.WaterPressureDropCurves\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t161\tPset_CooledBeamPHistoryActive\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t6c674180-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistoryActive.AirFlowRate\tMULTILINETEXT\t\t161\t1\tIfcTimeSeries\t1\r\nPARAM\t72f5b900-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistoryActive.AirPressureDropCurves\tMULTILINETEXT\t\t161\t1\tIfcTimeSeries\t1\r\nPARAM\t6ffac880-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistoryActive.Throw\tMULTILINETEXT\t\t161\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t162\tPset_CooledBeamTypeActive\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7c7f2100-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeActive.AirFlowConfiguration\tTEXT\t\t162\t1\tPEnum_CooledBeamActiveAirFlowConfigurationType\t1\r\nPARAM\t8acd3d00-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeActive.AirflowRateRange\tMULTILINETEXT\t\t162\t1\tPropertyBoundedValue\t1\r\nPARAM\t32b3c76d-c8fc-45b3-a856-c3a7807f6497\tPset_CooledBeamTypeActive.AirFlowRateRange\tMULTILINETEXT\t\t162\t1\tPropertyBoundedValue\t1\r\nPARAM\ta0426700-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeActive.ConnectionSize\tLENGTH\t\t162\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t915bb480-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeActive.SupplyAirConnectionType\tTEXT\t\t162\t1\tPEnum_CooledBeamSupplyAirConnectionType\t1\r\n#\r\nGROUP\t163\tPset_CooledBeamTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3a0a1400-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.CoilLength\tLENGTH\t\t163\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3ecec800-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.CoilWidth\tLENGTH\t\t163\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9fe9471c-ee77-4958-9c4f-e9277ab33ae8\tPset_CooledBeamTypeCommon.ConnectionSize\tLENGTH\t\t163\t1\tIfcLengthMeasure\t1\r\nPARAM\t34acc980-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.FinishColor\tTEXT\t\t163\t1\tIfcLabel\t1\r\nPARAM\ta93af3fb-89b2-417d-9d22-a45b3737e477\tPset_CooledBeamTypeCommon.FinishColour\tTEXT\t\t163\t1\tIfcLabel\t1\r\nPARAM\t15ae3780-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.IntegratedLightingType\tTEXT\t\t163\t1\tPEnum_CooledBeamIntegratedLightingType\t1\r\nPARAM\tbfd98f80-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.IsFreeHanging\tYESNO\t\t163\t1\tIfcBoolean\t1\r\nPARAM\t8ef76eb1-c5ff-4ae1-b3dc-b49a7bf4e09e\tPset_CooledBeamTypeCommon.Material\tMULTILINETEXT\t\t163\t1\tIfcMaterial\t1\r\nPARAM\tdbdd3100-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalCoolingCapacity\tNUMBER\t\t163\t1\tIfcPowerMeasure\t1\r\nPARAM\tfc0cf000-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalHeatingCapacity\tNUMBER\t\t163\t1\tIfcPowerMeasure\t1\r\nPARAM\tf0b9c480-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalReturnWaterTemperatureCooling\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t0af3a280-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalReturnWaterTemperatureHeating\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\teb5c7a00-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureCooling\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t062eee80-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureHeating\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\te697c600-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalSurroundingHumidityCooling\tNUMBER\t\t163\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\te1d31200-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalSurroundingTemperatureCooling\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t016a3a80-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalSurroundingTemperatureHeating\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\tf6170f00-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalWaterFlowCooling\tNUMBER\t\t163\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t1050ed00-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalWaterFlowHeating\tNUMBER\t\t163\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t25c61700-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.PipeConnection\tTEXT\t\t163\t1\tPEnum_CooledBeamPipeConnection\t1\r\nPARAM\t21535213-7813-4832-9936-8109a395d8c7\tPset_CooledBeamTypeCommon.PipeConnectionEnum\tTEXT\t\t163\t1\tPEnum_CooledBeamPipeConnection\t1\r\nPARAM\taafcfc00-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.Reference\tTEXT\t\t163\t1\tIfcIdentifier\t1\r\nPARAM\tb05a4680-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.Status\tTEXT\t\t163\t1\tPEnum_ElementStatus\t1\r\nPARAM\tc536da00-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.WaterFlowControlSystemType\tTEXT\t\t163\t1\tPEnum_CooledBeamWaterFlowControlSystemType\t1\r\nPARAM\td54eb980-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.WaterPressureRange\tMULTILINETEXT\t\t163\t1\tPropertyBoundedValue\t1\r\nPARAM\t7e1f41df-14dd-4057-9bd1-16dc65b74289\tPset_CooledBeamTypeCommon.Weight\tNUMBER\t\t163\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t164\tPset_CoolingTowerPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4aba8a00-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerPHistory.Capacity\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\r\nPARAM\t4db57a80-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerPHistory.HeatTransferCoefficient\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\r\nPARAM\t57d77900-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerPHistory.Performance\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\r\nPARAM\t50b06b00-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerPHistory.SumpHeaterPower\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\r\nPARAM\t5443f200-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerPHistory.UACurve\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t165\tPset_CoolingTowerTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te9df8180-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.AmbientDesignDryBulbTemperature\tNUMBER\t\t165\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\tef3ccc00-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.AmbientDesignWetBulbTemperature\tNUMBER\t\t165\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\td6341b00-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.BasinReserveVolume\tVOLUME\t\t165\t1\tIfcVolumeMeasure\t1\r\nPARAM\ta553e600-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.CapacityControl\tTEXT\t\t165\t1\tPEnum_CoolingTowerCapacityControl\t1\r\nPARAM\t4eb03606-5848-4f14-b4bb-f27cefe8158a\tPset_CoolingTowerTypeCommon.CasingMaterial\tMULTILINETEXT\t\t165\t1\tIfcMaterial\t1\r\nPARAM\t7b022880-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.CircuitType\tTEXT\t\t165\t1\tPEnum_CoolingTowerCircuitType\t1\r\nPARAM\tc583a500-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.ControlStrategy\tTEXT\t\t165\t1\tPEnum_CoolingTowerControlStrategy\t1\r\nPARAM\tdb7eac3d-c9dc-4484-8fb1-79a1189f1635\tPset_CoolingTowerTypeCommon.FillMaterial\tMULTILINETEXT\t\t165\t1\tIfcMaterial\t1\r\nPARAM\t89504480-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.FlowArrangement\tTEXT\t\t165\t1\tPEnum_CoolingTowerFlowArrangement\t1\r\nPARAM\tdb916580-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.LiftElevationDifference\tLENGTH\t\t165\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t75a4de00-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.NominalCapacity\tNUMBER\t\t165\t1\tIfcPowerMeasure\t1\r\nPARAM\td0d6d080-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.NumberOfCells\tINTEGER\t\t165\t1\tIfcCountMeasure\t1\r\nPARAM\te51acd80-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.OperationTemperatureRange\tNUMBER\t\t165\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t6160e100-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.Reference\tTEXT\t\t165\t1\tIfcIdentifier\t1\r\nPARAM\t95d49d00-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.SprayType\tTEXT\t\t165\t1\tPEnum_CoolingTowerSprayType\t1\r\nPARAM\t66be2b80-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.Status\tTEXT\t\t165\t1\tPEnum_ElementStatus\t1\r\nPARAM\te0561980-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.WaterRequirement\tNUMBER\t\t165\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t738855b4-c04c-4e30-bdb3-6cf0127bf466\tPset_CoolingTowerTypeCommon.Weight\tNUMBER\t\t165\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t166\tPset_CourseApplicationConditions\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t33da02e2-8dac-44a3-98bd-4e084aa85ea1\tPset_CourseApplicationConditions.ApplicationTemperature\tNUMBER\t\t166\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t7f53ac34-2adc-4554-b179-33ba170c2611\tPset_CourseApplicationConditions.WeatherConditions\tTEXT\t\t166\t1\tIfcText\t1\r\n#\r\nGROUP\t167\tPset_CourseCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t70b5f00c-c1ab-45b4-935b-c1eab1e03984\tPset_CourseCommon.NominalLength\tLENGTH\t\t167\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\tb9729104-5b81-42c1-91e6-c202f744a7f1\tPset_CourseCommon.NominalThickness\tLENGTH\t\t167\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\ta6aa69cd-880f-4e61-8046-4c384af448c3\tPset_CourseCommon.NominalWidth\tLENGTH\t\t167\t1\tIfcNonNegativeLengthMeasure\t1\r\n#\r\nGROUP\t168\tPset_CoveringCeiling\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7ad6e058-1d8a-430d-898c-57d5a7183d0a\tPset_CoveringCeiling.FragilityRating\tTEXT\t\t168\t1\tIfcLabel\t1\r\nPARAM\tfebc1500-d1cf-11e1-8000-00215ad4efdf\tPset_CoveringCeiling.Permeability\tNUMBER\t\t168\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t04195f80-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCeiling.TileLength\tLENGTH\t\t168\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t0976aa00-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCeiling.TileWidth\tLENGTH\t\t168\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t169\tPset_CoveringCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2e6b1d00-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.AcousticRating\tTEXT\t\t169\t1\tIfcLabel\t1\r\nPARAM\t45aa0a80-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.Combustible\tYESNO\t\t169\t1\tIfcBoolean\t1\r\nPARAM\t565a8080-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.Finish\tTEXT\t\t169\t1\tIfcText\t1\r\nPARAM\t28753c00-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.FireRating\tTEXT\t\t169\t1\tIfcLabel\t1\r\nPARAM\t3460fe00-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.FlammabilityRating\tTEXT\t\t169\t1\tIfcLabel\t1\r\nPARAM\t63a53c3b-4589-4569-a1c6-71ad903125cb\tPset_CoveringCommon.Fragility\tTEXT\t\t169\t1\tIfcLabel\t1\r\nPARAM\t39be4880-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.FragilityRating\tTEXT\t\t169\t1\tIfcLabel\t1\r\nPARAM\t4b9feb80-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.IsExternal\tYESNO\t\t169\t1\tIfcBoolean\t1\r\nPARAM\t9b01cd42-fd2b-4a99-8774-59081c52cd99\tPset_CoveringCommon.Material\tTEXT\t\t169\t1\tIfcLabel\t1\r\nPARAM\t14c9d580-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.Reference\tTEXT\t\t169\t1\tIfcIdentifier\t1\r\nPARAM\t1a272000-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.Status\tTEXT\t\t169\t1\tPEnum_ElementStatus\t1\r\nPARAM\t3f1b9300-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.SurfaceSpreadOfFlame\tTEXT\t\t169\t1\tIfcLabel\t1\r\nPARAM\t50fd3600-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.ThermalTransmittance\tNUMBER\t\t169\t1\tIfcThermalTransmittanceMeasure\t1\r\nPARAM\te0d3c4db-14e5-47b5-9a34-0467f88bebf7\tPset_CoveringCommon.Thickness\tLENGTH\t\t169\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tff16add0-ca54-4912-a2d7-141642c4573f\tPset_CoveringCommon.TotalThickness\tLENGTH\t\t169\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t170\tPset_CoveringFlooring\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t683c2380-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringFlooring.HasAntiStaticSurface\tYESNO\t\t170\t1\tIfcBoolean\t1\r\nPARAM\t62ded900-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringFlooring.HasNonSkidSurface\tYESNO\t\t170\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t171\tPset_CoveringTypeMembrane\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tda693236-51bc-47e2-8c3f-bbb20bec104f\tPset_CoveringTypeMembrane.NominalInstallationDepth\tLENGTH\t\t171\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t43aaef54-6a75-4aac-b30b-e0c360e2c17e\tPset_CoveringTypeMembrane.NominalTransverseInclination\tNUMBER\t\t171\t1\tIfcPlaneAngleMeasure\t1\r\n#\r\nGROUP\t172\tPset_CurrentInstrumentTransformer\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t41b6b8ce-bb7f-4899-911e-42b5c1800d64\tPset_CurrentInstrumentTransformer.AccuracyClass\tNUMBER\t\t172\t1\tIfcRatioMeasure\t1\r\nPARAM\t3758677e-0b6a-4983-bac4-7ec55f8715fa\tPset_CurrentInstrumentTransformer.AccuracyGrade\tTEXT\t\t172\t1\tIfcLabel\t1\r\nPARAM\tb06bd225-fc02-4e5a-b493-5f207c32b73c\tPset_CurrentInstrumentTransformer.NominalCurrent\tNUMBER\t\t172\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\tffd13e6f-ff4f-4e8a-a65f-6cfcfc39ce1f\tPset_CurrentInstrumentTransformer.NominalPower\tNUMBER\t\t172\t1\tIfcPowerMeasure\t1\r\nPARAM\tc5d1f127-9047-4a80-98d5-9eb3ae7c753c\tPset_CurrentInstrumentTransformer.NumberOfPhases\tINTEGER\t\t172\t1\tIfcCountMeasure\t1\r\nPARAM\t2d86c68d-7713-4134-b127-c889aaaf646d\tPset_CurrentInstrumentTransformer.PrimaryCurrent\tNUMBER\t\t172\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\tf8a070cf-e739-4b09-82da-3f6549306527\tPset_CurrentInstrumentTransformer.PrimaryFrequency\tNUMBER\t\t172\t1\tIfcFrequencyMeasure\t1\r\nPARAM\tf9c30831-76f6-446b-b4ee-3e93f940c369\tPset_CurrentInstrumentTransformer.RatedVoltage\tMULTILINETEXT\t\t172\t1\tPropertyBoundedValue\t1\r\nPARAM\t21db5e2f-e703-4d39-aacb-1438ae7fc8ab\tPset_CurrentInstrumentTransformer.SecondaryCurrent\tNUMBER\t\t172\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\teaa0e632-b4c0-49d5-a461-ddebcd50563a\tPset_CurrentInstrumentTransformer.SecondaryFrequency\tNUMBER\t\t172\t1\tIfcFrequencyMeasure\t1\r\n#\r\nGROUP\t173\tPset_CurtainWallCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8b66d300-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.AcousticRating\tTEXT\t\t173\t1\tIfcLabel\t1\r\nPARAM\t96b9fe80-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.Combustible\tYESNO\t\t173\t1\tIfcBoolean\t1\r\nPARAM\t915cb400-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.FireRating\tTEXT\t\t173\t1\tIfcLabel\t1\r\nPARAM\ta6394780-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.IsExternal\tYESNO\t\t173\t1\tIfcBoolean\t1\r\nPARAM\t75f1a900-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.Reference\tTEXT\t\t173\t1\tIfcIdentifier\t1\r\nPARAM\t7be78a00-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.Status\tTEXT\t\t173\t1\tPEnum_ElementStatus\t1\r\nPARAM\t9c174900-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.SurfaceSpreadOfFlame\tTEXT\t\t173\t1\tIfcLabel\t1\r\nPARAM\ta1749380-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.ThermalTransmittance\tNUMBER\t\t173\t1\tIfcThermalTransmittanceMeasure\t1\r\n#\r\nGROUP\t174\tPset_DamperOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb2250980-d1d0-11e1-8000-00215ad4efdf\tPset_DamperOccurrence.SizingMethod\tTEXT\t\t174\t1\tPEnum_DamperSizingMethod\t1\r\n#\r\nGROUP\t175\tPset_DamperPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc36e1600-d1d0-11e1-8000-00215ad4efdf\tPset_DamperPHistory.AirFlowRate\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\r\nPARAM\tcc5ee780-d1d0-11e1-8000-00215ad4efdf\tPset_DamperPHistory.BladePositionAngle\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\r\nPARAM\tcff26e80-d1d0-11e1-8000-00215ad4efdf\tPset_DamperPHistory.DamperPosition\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\r\nPARAM\tc7019d00-d1d0-11e1-8000-00215ad4efdf\tPset_DamperPHistory.Leakage\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\r\nPARAM\tc9fc8d80-d1d0-11e1-8000-00215ad4efdf\tPset_DamperPHistory.PressureDrop\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\r\nPARAM\td2ed5f00-d1d0-11e1-8000-00215ad4efdf\tPset_DamperPHistory.PressureLossCoefficient\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t176\tPset_DamperTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t16e06400-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.BladeAction\tTEXT\t\t176\t1\tPEnum_DamperBladeAction\t1\r\nPARAM\t31b2d880-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.BladeEdge\tTEXT\t\t176\t1\tPEnum_DamperBladeEdge\t1\r\nPARAM\t6fe295a4-17bd-44c2-9e4b-9ae66e3fa336\tPset_DamperTypeCommon.BladeMaterial\tMULTILINETEXT\t\t176\t1\tIfcMaterial\t1\r\nPARAM\t252e8000-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.BladeShape\tTEXT\t\t176\t1\tPEnum_DamperBladeShape\t1\r\nPARAM\t0def9280-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.BladeThickness\tLENGTH\t\t176\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t98d08d00-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.CloseOffRating\tNUMBER\t\t176\t1\tIfcPressureMeasure\t1\r\nPARAM\t42634e80-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.FaceArea\tAREA\t\t176\t1\tIfcAreaMeasure\t1\r\nPARAM\t8b1b0780-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.FrameDepth\tLENGTH\t\t176\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb6bb77da-767f-490c-9fa7-504ac7b31a80\tPset_DamperTypeCommon.FrameMaterial\tMULTILINETEXT\t\t176\t1\tIfcMaterial\t1\r\nPARAM\t93734280-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.FrameThickness\tLENGTH\t\t176\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t85252680-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.FrameType\tTEXT\t\t176\t1\tIfcLabel\t1\r\nPARAM\t750d4700-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.LeakageCurve\tMULTILINETEXT\t\t176\t1\tPropertyTableValue\t1\r\nPARAM\t67f05800-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.LeakageFullyClosed\tNUMBER\t\t176\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t6cb50c00-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.LossCoefficentCurve\tMULTILINETEXT\t\t176\t1\tPropertyTableValue\t1\r\nPARAM\t47c09900-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.MaximumAirFlowRate\tNUMBER\t\t176\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t53ac5b00-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.MaximumWorkingPressure\tNUMBER\t\t176\t1\tIfcPressureMeasure\t1\r\nPARAM\t5e66f000-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.NominalAirFlowRate\tNUMBER\t\t176\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t3d060400-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.NumberofBlades\tINTEGER\t\t176\t1\tIfcInteger\t1\r\nPARAM\t632ba400-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.OpenPressureDrop\tNUMBER\t\t176\t1\tIfcPressureMeasure\t1\r\nPARAM\tf0222d80-d1d0-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.Operation\tTEXT\t\t176\t1\tPEnum_DamperOperation\t1\r\nPARAM\tfca68600-d1d0-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.Orientation\tTEXT\t\t176\t1\tPEnum_DamperOrientation\t1\r\nPARAM\tdc76c700-d1d0-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.Reference\tTEXT\t\t176\t1\tIfcIdentifier\t1\r\nPARAM\t7d658200-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.RegeneratedSoundCurve\tMULTILINETEXT\t\t176\t1\tPropertyTableValue\t1\r\nPARAM\tfbbbf828-76ff-438c-9712-edaa60326184\tPset_DamperTypeCommon.SealMaterial\tMULTILINETEXT\t\t176\t1\tIfcMaterial\t1\r\nPARAM\te1d41180-d1d0-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.Status\tTEXT\t\t176\t1\tPEnum_ElementStatus\t1\r\nPARAM\t4c854d00-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.TemperatureRange\tMULTILINETEXT\t\t176\t1\tPropertyBoundedValue\t1\r\nPARAM\t5909a580-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.TemperatureRating\tNUMBER\t\t176\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t5573ad4e-fd29-414e-bd97-f2150e618b79\tPset_DamperTypeCommon.TorqueRange\tMULTILINETEXT\t\t176\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t177\tPset_DamperTypeControlDamper\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\taa199980-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeControlDamper.ControlDamperOperation\tTEXT\t\t177\t1\tPEnum_ControlDamperOperation\t1\r\nPARAM\ta38b2200-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeControlDamper.TorqueRange\tMULTILINETEXT\t\t177\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t178\tPset_DamperTypeFireDamper\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbc93d300-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireDamper.ActuationType\tTEXT\t\t178\t1\tPEnum_FireDamperActuationType\t1\r\nPARAM\tc9182b80-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireDamper.ClosureRatingEnum\tTEXT\t\t178\t1\tPEnum_FireDamperClosureRating\t1\r\nPARAM\td6351a80-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireDamper.FireResistanceRating\tTEXT\t\t178\t1\tIfcLabel\t1\r\nPARAM\tdc2afb80-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireDamper.FusibleLinkTemperature\tNUMBER\t\t178\t1\tIfcThermodynamicTemperatureMeasure\t1\r\n#\r\nGROUP\t179\tPset_DamperTypeFireSmokeDamper\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ted740800-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireSmokeDamper.ActuationType\tTEXT\t\t179\t1\tPEnum_FireDamperActuationType\t1\r\nPARAM\tfa90f700-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireSmokeDamper.ClosureRatingEnum\tTEXT\t\t179\t1\tPEnum_FireDamperClosureRating\t1\r\nPARAM\te77e2700-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireSmokeDamper.ControlType\tTEXT\t\t179\t1\tIfcLabel\t1\r\nPARAM\tf86896fd-2479-4b8b-9ffc-86611909aa6c\tPset_DamperTypeFireSmokeDamper.DamperControlType\tTEXT\t\t179\t1\tIfcLabel\t1\r\nPARAM\t07154f80-d1d2-11e1-8000-00215ad4efdf\tPset_DamperTypeFireSmokeDamper.FireResistanceRating\tTEXT\t\t179\t1\tIfcLabel\t1\r\nPARAM\t0bda0380-d1d2-11e1-8000-00215ad4efdf\tPset_DamperTypeFireSmokeDamper.FusibleLinkTemperature\tNUMBER\t\t179\t1\tIfcThermodynamicTemperatureMeasure\t1\r\n#\r\nGROUP\t180\tPset_DamperTypeSmokeDamper\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t172d2f00-d1d2-11e1-8000-00215ad4efdf\tPset_DamperTypeSmokeDamper.ControlType\tTEXT\t\t180\t1\tIfcLabel\t1\r\n#\r\nGROUP\t181\tPset_DataTransmissionUnit\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta92e236c-dcb8-4227-937c-33b33f22216e\tPset_DataTransmissionUnit.DataTransmissionUnitUsage\tTEXT\t\t181\t1\tPEnum_DataTransmissionUnitUsage\t1\r\nPARAM\te142d1ec-1e8b-4ab7-85e2-927b95d38212\tPset_DataTransmissionUnit.SerialInterfaceType\tTEXT\t\t181\t1\tPEnum_SerialInterfaceType\t1\r\nPARAM\tad97fc77-7645-42cb-95dc-e4e9438346a1\tPset_DataTransmissionUnit.WorkingState\tTEXT\t\t181\t1\tIfcLabel\t1\r\n#\r\nGROUP\t182\tPset_DesignPoint\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta2120de5-3f61-4a57-a6ed-4d239d963e9f\tPset_DesignPoint.IsDesignPoint\tYESNO\t\t182\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t183\tPset_DiscreteAccessoryAnchorBolt\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc42ec2e1-3e20-4c39-970f-8952e055df89\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltDiameter\tLENGTH\t\t183\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t60b2f740-cccd-4eb7-8c33-c335c3126732\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltLength\tLENGTH\t\t183\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tdded3af9-76d4-49ec-8a3c-9ad3e8583eac\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltProtrusionLength\tLENGTH\t\t183\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t586754a7-6804-4fdc-95dc-a6a4660d3e59\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltThreadLength\tLENGTH\t\t183\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t184\tPset_DiscreteAccessoryColumnShoe\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t30ce7680-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateDepth\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t2613e180-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateThickness\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t2c09c280-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateWidth\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t404dbf80-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryColumnShoe.ColumnShoeCasingDepth\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t362bc100-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryColumnShoe.ColumnShoeCasingHeight\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3af07500-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryColumnShoe.ColumnShoeCasingWidth\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t185\tPset_DiscreteAccessoryCornerFixingPlate\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5bb8ca80-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneX\tLENGTH\t\t185\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t565b8000-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneZ\tLENGTH\t\t185\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t4ba0eb00-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateLength\tLENGTH\t\t185\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t50fe3580-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateThickness\tLENGTH\t\t185\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t186\tPset_DiscreteAccessoryDiagonalTrussConnector\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7723d580-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussBaseBarDiameter\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t81de6a80-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarDiameter\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t71c68b00-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarSpacing\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t67a48c80-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussHeight\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t6d01d700-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussLength\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t7c812000-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussSecondaryBarDiameter\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t187\tPset_DiscreteAccessoryEdgeFixingPlate\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t9d497580-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneX\tLENGTH\t\t187\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t97ec2b00-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneZ\tLENGTH\t\t187\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t8d319600-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateLength\tLENGTH\t\t187\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t928ee080-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateThickness\tLENGTH\t\t187\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t188\tPset_DiscreteAccessoryFixingSocket\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tab979180-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryFixingSocket.FixingSocketHeight\tLENGTH\t\t188\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb0f4dc00-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryFixingSocket.FixingSocketThreadDiameter\tLENGTH\t\t188\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb6522680-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryFixingSocket.FixingSocketThreadLength\tLENGTH\t\t188\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\ta9353780-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryFixingSocket.FixingSocketTypeReference\tMULTILINETEXT\t\t188\t1\tIfcExternalReference\t1\r\n#\r\nGROUP\t189\tPset_DiscreteAccessoryLadderTrussConnector\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td255c800-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussBaseBarDiameter\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tdda8f380-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarDiameter\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tcd911400-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarSpacing\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc23de880-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussHeight\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc7029c80-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussLength\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td84ba900-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussSecondaryBarDiameter\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t190\tPset_DiscreteAccessoryStandardFixingPlate\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\teef20000-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateDepth\tLENGTH\t\t190\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf44f4a80-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateThickness\tLENGTH\t\t190\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te8fc1f00-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateWidth\tLENGTH\t\t190\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t191\tPset_DiscreteAccessoryTypeBracket\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t31d6b617-1b75-4ab6-b7e8-25e4183671e8\tPset_DiscreteAccessoryTypeBracket.IsInsulated\tYESNO\t\t191\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t192\tPset_DiscreteAccessoryTypeCableArranger\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tef8e4dd6-c83a-4c04-b52c-18f08695704f\tPset_DiscreteAccessoryTypeCableArranger.CableArrangerPosition\tTEXT\t\t192\t1\tPEnum_ArrangerPositionEnum\t1\r\n#\r\nGROUP\t193\tPset_DiscreteAccessoryTypeInsulator\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td955cc84-8b0d-4339-88f4-c868795b5c04\tPset_DiscreteAccessoryTypeInsulator.BendingStrength\tNUMBER\t\t193\t1\tIfcPressureMeasure\t1\r\nPARAM\t79b8ba2e-4064-440b-96f2-48eff87a0e85\tPset_DiscreteAccessoryTypeInsulator.BreakdownVoltageTolerance\tNUMBER\t\t193\t1\tIfcElectricVoltageMeasure\t1\r\nPARAM\te5bff1e2-e555-4f2c-952a-816a19f7ebdf\tPset_DiscreteAccessoryTypeInsulator.CreepageDistance\tLENGTH\t\t193\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tcad1c2ff-44c0-403a-9936-02c7c1c6a1cd\tPset_DiscreteAccessoryTypeInsulator.InstallationMethod\tTEXT\t\t193\t1\tIfcLabel\t1\r\nPARAM\tb20710ec-98ee-40c5-a3bf-751d7d7b1ec1\tPset_DiscreteAccessoryTypeInsulator.InsulationMethod\tTEXT\t\t193\t1\tPEnum_InsulatorType\t1\r\nPARAM\t5cee4291-8724-4936-9025-c7ed3f15ba77\tPset_DiscreteAccessoryTypeInsulator.InsulationVoltage\tNUMBER\t\t193\t1\tIfcElectricVoltageMeasure\t1\r\nPARAM\t8332e79f-c6a1-44d1-b96d-3242ffdf2a5d\tPset_DiscreteAccessoryTypeInsulator.LightningPeakVoltage\tNUMBER\t\t193\t1\tIfcElectricVoltageMeasure\t1\r\nPARAM\t7abf2f4f-58d6-4b2c-af8d-8b09b7ad2f3a\tPset_DiscreteAccessoryTypeInsulator.OperationalTemperatureRange\tMULTILINETEXT\t\t193\t1\tPropertyBoundedValue\t1\r\nPARAM\t95a2171a-8142-4637-80c7-6cb7feb4b46b\tPset_DiscreteAccessoryTypeInsulator.RatedCurrent\tMULTILINETEXT\t\t193\t1\tPropertyBoundedValue\t1\r\nPARAM\tb1b6d86a-f310-4493-884f-57917ca7b83d\tPset_DiscreteAccessoryTypeInsulator.RatedVoltage\tMULTILINETEXT\t\t193\t1\tPropertyBoundedValue\t1\r\nPARAM\t4b8da0e1-f1fd-46d5-94c9-5ba7f5acb971\tPset_DiscreteAccessoryTypeInsulator.RMSWithstandVoltage\tNUMBER\t\t193\t1\tIfcElectricVoltageMeasure\t1\r\nPARAM\t225e4d3e-800f-41a2-ac09-8b53b98ec47c\tPset_DiscreteAccessoryTypeInsulator.Voltage\tMULTILINETEXT\t\t193\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t194\tPset_DiscreteAccessoryTypeLock\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3fd1bf96-5350-4cbd-8207-12df7f7c5f94\tPset_DiscreteAccessoryTypeLock.InstallationPlan\tMULTILINETEXT\t\t194\t1\tIfcExternalReference\t1\r\nPARAM\tf59f51e1-e53a-453b-bfa6-a87dad751ca8\tPset_DiscreteAccessoryTypeLock.RequiredClosureSpacing\tLENGTH\t\t194\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t195\tPset_DiscreteAccessoryTypeRailBrace\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td15cde1a-b75b-4e0d-a923-490b2b855108\tPset_DiscreteAccessoryTypeRailBrace.IsTemporary\tYESNO\t\t195\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t196\tPset_DiscreteAccessoryTypeRailLubrication\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t9decf704-3a54-4549-b99c-3d1571be0e84\tPset_DiscreteAccessoryTypeRailLubrication.LubricationPowerSupplyType\tTEXT\t\t196\t1\tPEnum_LubricationPowerSupply\t1\r\nPARAM\t6f658332-58fc-49a9-a153-a699396fdb2b\tPset_DiscreteAccessoryTypeRailLubrication.LubricationSystemType\tTEXT\t\t196\t1\tPEnum_LubricationSystemType\t1\r\nPARAM\t9ff76621-c14e-4a5e-8e16-607d4794d50c\tPset_DiscreteAccessoryTypeRailLubrication.MaximumNoiseEmissions\tNUMBER\t\t196\t1\tIfcSoundPowerLevelMeasure\t1\r\nPARAM\ta6aa8112-cd69-485f-85f7-19b30bec3421\tPset_DiscreteAccessoryTypeRailLubrication.PositionInTrack\tTEXT\t\t196\t1\tPEnum_RelativePosition\t1\r\n#\r\nGROUP\t197\tPset_DiscreteAccessoryTypeRailPad\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1ddbe1f5-bc01-44c6-a2cf-52c4c1eea794\tPset_DiscreteAccessoryTypeRailPad.RailPadStiffness\tTEXT\t\t197\t1\tPEnum_RailPadStiffness\t1\r\n#\r\nGROUP\t198\tPset_DiscreteAccessoryTypeSlidingChair\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t99cac558-3423-43ac-8ee5-e970cb80bc20\tPset_DiscreteAccessoryTypeSlidingChair.IsSelfLubricated\tYESNO\t\t198\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t199\tPset_DiscreteAccessoryTypeSoundAbsorption\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td984d141-705b-4d7f-9028-36cad7d87138\tPset_DiscreteAccessoryTypeSoundAbsorption.SoundAbsorptionLimit\tNUMBER\t\t199\t1\tIfcSoundPowerLevelMeasure\t1\r\n#\r\nGROUP\t200\tPset_DiscreteAccessoryTypeTensioningEquipment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tfbd06ddf-0f41-46fa-9c6d-34e2d7f5ee78\tPset_DiscreteAccessoryTypeTensioningEquipment.AssemblyInstruction\tMULTILINETEXT\t\t200\t1\tIfcExternalReference\t1\r\nPARAM\t9e66ebc7-9036-4060-96b2-41c1c14a8143\tPset_DiscreteAccessoryTypeTensioningEquipment.HasBreakLineLock\tYESNO\t\t200\t1\tIfcBoolean\t1\r\nPARAM\t77f3ac5a-78ce-466c-b93d-19e53d85cb7a\tPset_DiscreteAccessoryTypeTensioningEquipment.RatioOfWireTension\tNUMBER\t\t200\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t4fcc65ce-7ec1-4f1e-b795-ef368a52096f\tPset_DiscreteAccessoryTypeTensioningEquipment.ReferenceEnvironmentTemperature\tMULTILINETEXT\t\t200\t1\tPropertyBoundedValue\t1\r\nPARAM\ta441cf7d-f2ae-4c3f-bef1-d52503fa3974\tPset_DiscreteAccessoryTypeTensioningEquipment.TensileStrength\tNUMBER\t\t200\t1\tIfcPressureMeasure\t1\r\nPARAM\te7ce5842-a748-4b45-a906-bb9938c0d274\tPset_DiscreteAccessoryTypeTensioningEquipment.TransmissionEfficiency\tNUMBER\t\t200\t1\tIfcRatioMeasure\t1\r\n#\r\nGROUP\t201\tPset_DiscreteAccessoryWireLoop\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1648cd00-d1d3-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryWireLoop.WireDiameter\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t252f7f80-d1d3-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryWireLoop.WireEmbeddingLength\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t0e892880-d1d3-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryWireLoop.WireLoopBasePlateLength\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t003b0c80-d1d3-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryWireLoop.WireLoopBasePlateThickness\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t05985700-d1d3-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryWireLoop.WireLoopBasePlateWidth\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t32e50500-d1d3-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryWireLoop.WireLoopLength\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t202\tPset_DistributionBoardOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t78703733-a424-40ac-a0ed-11f00758b23c\tPset_DistributionBoardOccurrence.IsMain\tYESNO\t\t202\t1\tIfcBoolean\t1\r\nPARAM\t013e4c88-60f3-47c9-940b-dbb3acaa243f\tPset_DistributionBoardOccurrence.IsSkilledOperator\tYESNO\t\t202\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t203\tPset_DistributionBoardTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2a587e2b-b7d3-49b6-a1a1-f31fcc26e9bb\tPset_DistributionBoardTypeCommon.Reference\tTEXT\t\t203\t1\tIfcIdentifier\t1\r\nPARAM\ta144ad8f-57ab-4339-9bf3-33c230c9be14\tPset_DistributionBoardTypeCommon.Status\tTEXT\t\t203\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t204\tPset_DistributionBoardTypeDispatchingBoard\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t248a0788-f570-4aad-938c-7f738b117bca\tPset_DistributionBoardTypeDispatchingBoard.DispatchingBoardType\tTEXT\t\t204\t1\tPEnum_DispatchingBoardType\t1\r\nPARAM\t9d3eb231-e623-47cd-b0f6-0a41675ea5b3\tPset_DistributionBoardTypeDispatchingBoard.NumberOfInterfaces\tMULTILINETEXT\t\t204\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t205\tPset_DistributionBoardTypeDistributionFrame\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td131047c-5d64-4815-b0da-f6de96266532\tPset_DistributionBoardTypeDistributionFrame.PortCapacity\tINTEGER\t\t205\t1\tIfcInteger\t1\r\n#\r\nGROUP\t206\tPset_DistributionChamberElementCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t54de8780-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementCommon.Reference\tTEXT\t\t206\t1\tIfcIdentifier\t1\r\nPARAM\t5e67ef80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementCommon.Status\tTEXT\t\t206\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t207\tPset_DistributionChamberElementTypeFormedDuct\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t88b9ad00-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeFormedDuct.AccessCoverLoadRating\tTEXT\t\t207\t1\tIfcText\t1\r\nPARAM\t0f4f6ce0-1d4c-4d95-b8d2-47dde9cf8e1e\tPset_DistributionChamberElementTypeFormedDuct.AccessCoverMaterial\tMULTILINETEXT\t\t207\t1\tIfcMaterial\t1\r\nPARAM\t93eb5ae9-5e1f-42d7-9a62-e94cf906b749\tPset_DistributionChamberElementTypeFormedDuct.BaseMaterial\tMULTILINETEXT\t\t207\t1\tIfcMaterial\t1\r\nPARAM\t835c6280-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeFormedDuct.BaseThickness\tLENGTH\t\t207\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t83de76c2-5137-4f0c-90be-1a7074962b07\tPset_DistributionChamberElementTypeFormedDuct.CableDuctOccupancyRatio\tNUMBER\t\t207\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t78a1cd80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeFormedDuct.ClearDepth\tLENGTH\t\t207\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t73448300-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeFormedDuct.ClearWidth\tLENGTH\t\t207\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb570c755-c509-4e86-ad74-02bd700c61c8\tPset_DistributionChamberElementTypeFormedDuct.FillMaterial\tMULTILINETEXT\t\t207\t1\tIfcMaterial\t1\r\nPARAM\t49b4497a-83ea-4bd4-a1d6-f874ffb6aa12\tPset_DistributionChamberElementTypeFormedDuct.WallMaterial\tMULTILINETEXT\t\t207\t1\tIfcMaterial\t1\r\nPARAM\t7e97ae80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeFormedDuct.WallThickness\tLENGTH\t\t207\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t208\tPset_DistributionChamberElementTypeInspectionChamber\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td46c5680-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.AccessCoverLoadRating\tTEXT\t\t208\t1\tIfcText\t1\r\nPARAM\tbdc5ff80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.AccessCoverMaterial\tMULTILINETEXT\t\t208\t1\tIfcMaterialDefinition\t1\r\nPARAM\tc0c0f000-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.AccessLengthOrRadius\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc61e3a80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.AccessWidth\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb0107a00-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.BaseMaterial\tMULTILINETEXT\t\t208\t1\tIfcMaterialDefinition\t1\r\nPARAM\tb30b6a80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.BaseThickness\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t93744200-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.ChamberLengthOrRadius\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t98d18c80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.ChamberWidth\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t7b7eec76-4f0e-4af4-adf4-ae7ee6662271\tPset_DistributionChamberElementTypeInspectionChamber.InspectionChamberInvertLevel\tLENGTH\t\t208\t1\tIfcLengthMeasure\t1\r\nPARAM\t9e2ed700-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.InvertLevel\tLENGTH\t\t208\t1\tIfcLengthMeasure\t1\r\nPARAM\ta25af480-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.SoffitLevel\tLENGTH\t\t208\t1\tIfcLengthMeasure\t1\r\nPARAM\ta850d580-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.WallMaterial\tMULTILINETEXT\t\t208\t1\tIfcMaterialDefinition\t1\r\nPARAM\tab4bc600-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.WallThickness\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb868b500-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.WithBackdrop\tYESNO\t\t208\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t209\tPset_DistributionChamberElementTypeInspectionPit\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tec43da80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionPit.Depth\tLENGTH\t\t209\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te0581880-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionPit.Length\tLENGTH\t\t209\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te6e69000-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionPit.Width\tLENGTH\t\t209\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t210\tPset_DistributionChamberElementTypeManhole\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t32993980-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.AccessCoverLoadRating\tTEXT\t\t210\t1\tIfcText\t1\r\nPARAM\t23b28700-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.AccessCoverMaterial\tMULTILINETEXT\t\t210\t1\tIfcMaterialDefinition\t1\r\nPARAM\t26ad7780-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.AccessLengthOrRadius\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t2ca35880-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.AccessWidth\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t0a113f80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.BaseMaterial\tMULTILINETEXT\t\t210\t1\tIfcMaterialDefinition\t1\r\nPARAM\t0da4c680-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.BaseThickness\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t185f5b80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.HasSteps\tYESNO\t\t210\t1\tIfcBoolean\t1\r\nPARAM\tf7970600-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.InvertLevel\tLENGTH\t\t210\t1\tIfcLengthMeasure\t1\r\nPARAM\ta23058b0-99ef-42aa-904a-39250c4015cf\tPset_DistributionChamberElementTypeManhole.IsAccessibleOnFoot\tYESNO\t\t210\t1\tIfcBoolean\t1\r\nPARAM\t936e8a04-a3ca-42de-8b58-4c2604513322\tPset_DistributionChamberElementTypeManhole.IsLocked\tYESNO\t\t210\t1\tIfcBoolean\t1\r\nPARAM\t13021100-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.IsShallow\tYESNO\t\t210\t1\tIfcBoolean\t1\r\nPARAM\td0f42c2e-00f6-4002-9d03-26d3096a0b06\tPset_DistributionChamberElementTypeManhole.NumberOfCableEntries\tINTEGER\t\t210\t1\tIfcCountMeasure\t1\r\nPARAM\t20b2838a-ab07-48f8-afa3-ab75132bba96\tPset_DistributionChamberElementTypeManhole.NumberOfManholeCovers\tINTEGER\t\t210\t1\tIfcCountMeasure\t1\r\nPARAM\tfc5bba00-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.SoffitLevel\tLENGTH\t\t210\t1\tIfcLengthMeasure\t1\r\nPARAM\t834a2024-3934-4e54-8866-7edfe32a94cd\tPset_DistributionChamberElementTypeManhole.TypeOfShaft\tTEXT\t\t210\t1\tPEnum_TypeOfShaft\t1\r\nPARAM\t01206e00-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.WallMaterial\tMULTILINETEXT\t\t210\t1\tIfcMaterialDefinition\t1\r\nPARAM\t04b3f500-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.WallThickness\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t1dbca600-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.WithBackdrop\tYESNO\t\t210\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t211\tPset_DistributionChamberElementTypeMeterChamber\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5b213380-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.AccessCoverMaterial\tMULTILINETEXT\t\t211\t1\tIfcMaterialDefinition\t1\r\nPARAM\t52306200-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.BaseMaterial\tMULTILINETEXT\t\t211\t1\tIfcMaterialDefinition\t1\r\nPARAM\t55c3e900-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.BaseThickness\tLENGTH\t\t211\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3d53ce80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.ChamberLengthOrRadius\tLENGTH\t\t211\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t42b11900-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.ChamberWidth\tLENGTH\t\t211\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t48a6fa00-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.WallMaterial\tMULTILINETEXT\t\t211\t1\tIfcMaterialDefinition\t1\r\nPARAM\t4c3a8100-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.WallThickness\tLENGTH\t\t211\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t212\tPset_DistributionChamberElementTypeSump\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t70965d80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeSump.InvertLevel\tLENGTH\t\t212\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t64aa9b80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeSump.Length\tLENGTH\t\t212\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td351813a-ff13-4c71-98be-c2a899aa7947\tPset_DistributionChamberElementTypeSump.SumpInvertLevel\tLENGTH\t\t212\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t6aa07c80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeSump.Width\tLENGTH\t\t212\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t213\tPset_DistributionChamberElementTypeTrench\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t83a92d80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeTrench.Depth\tLENGTH\t\t213\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t899f0e80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeTrench.InvertLevel\tLENGTH\t\t213\t1\tIfcLengthMeasure\t1\r\nPARAM\t7d1ab600-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeTrench.Width\tLENGTH\t\t213\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t214\tPset_DistributionChamberElementTypeValveChamber\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb6532600-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.AccessCoverMaterial\tMULTILINETEXT\t\t214\t1\tIfcMaterialDefinition\t1\r\nPARAM\tac312780-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.BaseMaterial\tMULTILINETEXT\t\t214\t1\tIfcMaterialDefinition\t1\r\nPARAM\tafc4ae80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.BaseThickness\tLENGTH\t\t214\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t96236700-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.ChamberLengthOrRadius\tLENGTH\t\t214\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9c194800-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.ChamberWidth\tLENGTH\t\t214\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\ta20f2900-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.WallMaterial\tMULTILINETEXT\t\t214\t1\tIfcMaterialDefinition\t1\r\nPARAM\ta5a2b000-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.WallThickness\tLENGTH\t\t214\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t215\tPset_DistributionFlowElementCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1d126ec1-34b3-4870-a421-58244f26788e\tPset_DistributionFlowElementCommon.Reference\tTEXT\t\t215\t1\tIfcIdentifier\t1\r\n#\r\nGROUP\t216\tPset_DistributionPortCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc79c3280-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionPortCommon.ColorCode\tTEXT\t\t216\t1\tIfcLabel\t1\r\nPARAM\t34b8f934-d91d-451d-9046-adfa36d5e29d\tPset_DistributionPortCommon.ColourCode\tTEXT\t\t216\t1\tIfcLabel\t1\r\nPARAM\tc0752480-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionPortCommon.PortNumber\tINTEGER\t\t216\t1\tIfcInteger\t1\r\n#\r\nGROUP\t217\tPset_DistributionPortDuct\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t26f6e010-3a72-4e2e-91bf-96a6d30ddb98\tPset_DistributionPortDuct.ConnectionType\tTEXT\t\t217\t1\tPEnum_DuctConnectionType\t1\r\nPARAM\t59a6fab8-3bff-4843-b61b-c3895e0ccb1f\tPset_DistributionPortDuct.PortNumber\tINTEGER\t\t217\t1\tIfcInteger\t1\r\n#\r\nGROUP\t218\tPset_DistributionPortPHistoryCable\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\taf897460-248b-4276-85e2-8b50acfc7106\tPset_DistributionPortPHistoryCable.ApparentPower\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\r\nPARAM\t9fadeb75-92de-4a22-8764-c24ee4f76b0b\tPset_DistributionPortPHistoryCable.Current\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\r\nPARAM\ta94b902e-b839-44c6-8479-1370c9c89cca\tPset_DistributionPortPHistoryCable.CurrentHistory\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\r\nPARAM\te72bcd7d-84ae-42c6-b1e3-f696451d1e6e\tPset_DistributionPortPHistoryCable.DataReceived\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\r\nPARAM\tc1d8b4f5-0772-44d9-8bb7-d96e3b9a3282\tPset_DistributionPortPHistoryCable.DataTransmitted\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\r\nPARAM\t53e43bce-bef5-4a40-96fd-8862a450903d\tPset_DistributionPortPHistoryCable.PowerFactor\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\r\nPARAM\t89a3d7b2-060f-4d65-a8cd-ef00b3affa39\tPset_DistributionPortPHistoryCable.PowerFactorHistory\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\r\nPARAM\t401dc737-0097-4869-9b07-3ef617ef615c\tPset_DistributionPortPHistoryCable.ReactivePower\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\r\nPARAM\tfbaec689-91c1-4f8f-b0c9-63eb65250f26\tPset_DistributionPortPHistoryCable.RealPower\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\r\nPARAM\t6fa8730d-4354-42e4-9752-7bd9defeb047\tPset_DistributionPortPHistoryCable.Voltage\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\r\nPARAM\t43062c92-c8ce-40e4-b895-b4411bbd0527\tPset_DistributionPortPHistoryCable.VoltageHistory\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t219\tPset_DistributionPortPHistoryDuct\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t39ebdb53-ec0a-4cfb-9c16-d3b93e4b79d3\tPset_DistributionPortPHistoryDuct.FlowCondition\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\r\nPARAM\td8ea6d10-74d2-411a-9770-8330100c7e9a\tPset_DistributionPortPHistoryDuct.FlowConditionHistory\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\r\nPARAM\tbe32824c-472c-44e8-ab71-cf06b1d088c9\tPset_DistributionPortPHistoryDuct.MassFlowRate\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\r\nPARAM\tb875a981-100a-48ca-ad67-02e2bb7a0c1d\tPset_DistributionPortPHistoryDuct.MassFlowRateHistory\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\r\nPARAM\t81486002-27f7-4025-863b-0dda2b5a372e\tPset_DistributionPortPHistoryDuct.Pressure\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\r\nPARAM\t1cf60062-6751-49a4-be5b-7180ef05bf03\tPset_DistributionPortPHistoryDuct.PressureHisotry\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\r\nPARAM\tcbe85542-7fd1-4da0-a29d-d807677eb4a9\tPset_DistributionPortPHistoryDuct.Temperature\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\r\nPARAM\t4e5224e4-5a1c-4fde-8ebd-791113bb3f9b\tPset_DistributionPortPHistoryDuct.TemperatureHistory\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\r\nPARAM\t80b98e43-359d-4dc2-bc6f-1e3c586498e1\tPset_DistributionPortPHistoryDuct.Velocity\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\r\nPARAM\td90dffb3-0567-4441-ba52-f7ff4ca7b16c\tPset_DistributionPortPHistoryDuct.VelocityHistory\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\r\nPARAM\t7e8e87f0-5498-43c0-a39e-88ac3f175c6e\tPset_DistributionPortPHistoryDuct.VolumetricFlowRate\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\r\nPARAM\t6d08a3f1-da6c-4446-98b1-9ba8c191351f\tPset_DistributionPortPHistoryDuct.VolumetricFlowRateHistory\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\r\nPARAM\tc04ff2c7-bd41-48da-8d8e-037447267a2f\tPset_DistributionPortPHistoryDuct.WetBulbTemperature\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\r\nPARAM\t6cea51f5-9d48-49c1-addc-f49514199c7f\tPset_DistributionPortPHistoryDuct.WetBulbTemperatureHistory\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t220\tPset_DistributionPortPHistoryPipe\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7a3f6bee-5810-4037-a997-d1c2cbd68a4d\tPset_DistributionPortPHistoryPipe.Flowrate\tMULTILINETEXT\t\t220\t1\tIfcTimeSeries\t1\r\nPARAM\td31964c0-ab4f-444a-a3a5-26a72084e705\tPset_DistributionPortPHistoryPipe.Pressure\tMULTILINETEXT\t\t220\t1\tIfcTimeSeries\t1\r\nPARAM\t36d77e79-1936-4513-b229-f61c7632a638\tPset_DistributionPortPHistoryPipe.Temperature\tMULTILINETEXT\t\t220\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t221\tPset_DistributionPortPipe\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7febf3be-117f-4498-9d45-def67f269eab\tPset_DistributionPortPipe.ConnectionType\tTEXT\t\t221\t1\tPEnum_PipeEndStyleTreatment\t1\r\nPARAM\tee6c702f-d7ef-45c1-8e8f-dc1c021a0afb\tPset_DistributionPortPipe.EndStyleTreatment\tTEXT\t\t221\t1\tPEnum_PipeEndStyleTreatment\t1\r\nPARAM\tb6e66f62-9d2d-45d2-bc3d-5bad39baf748\tPset_DistributionPortPipe.PortNumber\tINTEGER\t\t221\t1\tIfcInteger\t1\r\n#\r\nGROUP\t222\tPset_DistributionPortTypeCable\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t03d98150-4bcf-4f74-8b31-dee8065d5959\tPset_DistributionPortTypeCable.ConductorFunction\tTEXT\t\t222\t1\tPEnum_ConductorFunctionEnum\t1\r\nPARAM\t5a9b13be-92d1-4585-8363-4e056c138f30\tPset_DistributionPortTypeCable.ConnectionGender\tTEXT\t\t222\t1\tPEnum_DistributionPortGender\t1\r\nPARAM\t4a16661b-e738-43fb-99eb-498a99015880\tPset_DistributionPortTypeCable.ConnectionSubtype\tTEXT\t\t222\t1\tIfcLabel\t1\r\nPARAM\t1b51a543-3f93-4fa7-a503-1c877bb4b429\tPset_DistributionPortTypeCable.ConnectionType\tTEXT\t\t222\t1\tPEnum_DistributionPortElectricalType\t1\r\nPARAM\t52070921-9727-4e99-917b-fdcae2efea80\tPset_DistributionPortTypeCable.Current\tMULTILINETEXT\t\t222\t1\tPropertyBoundedValue\t1\r\nPARAM\teaf80f92-e6df-4c29-a180-86e89bea20e9\tPset_DistributionPortTypeCable.CurrentContent3rdHarmonic\tNUMBER\t\t222\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t6eebf453-e820-4e4a-941c-2b4106eeb648\tPset_DistributionPortTypeCable.ElectricalConnectionType\tTEXT\t\t222\t1\tPEnum_DistributionPortElectricalType\t1\r\nPARAM\t1727667f-80e0-48e7-8bd3-bf056125a93e\tPset_DistributionPortTypeCable.HasConnector\tYESNO\t\t222\t1\tIfcBoolean\t1\r\nPARAM\t67966813-3350-4b73-b3e6-06694b95df6d\tPset_DistributionPortTypeCable.IsWelded\tYESNO\t\t222\t1\tIfcBoolean\t1\r\nPARAM\t437e2945-ded0-4099-8d45-ae3d9d9770db\tPset_DistributionPortTypeCable.Power\tMULTILINETEXT\t\t222\t1\tPropertyBoundedValue\t1\r\nPARAM\t1592daba-2e14-4952-a719-49248bab50cc\tPset_DistributionPortTypeCable.Protocols\tMULTILINETEXT\t\t222\t1\tPropertyListValue\t1\r\nPARAM\t87b7f6b2-94b5-447a-b7ed-aa0e2b690e7d\tPset_DistributionPortTypeCable.Voltage\tMULTILINETEXT\t\t222\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t223\tPset_DistributionPortTypeDuct\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2d115f8d-1830-403d-a062-85c9525bd889\tPset_DistributionPortTypeDuct.ConnectionSubtype\tTEXT\t\t223\t1\tIfcLabel\t1\r\nPARAM\t15d916dd-1d73-40bc-8148-1576f81d2a08\tPset_DistributionPortTypeDuct.ConnectionSubType\tTEXT\t\t223\t1\tIfcLabel\t1\r\nPARAM\td2b239a6-1db1-4c2a-b423-e3d735a6de1f\tPset_DistributionPortTypeDuct.ConnectionType\tTEXT\t\t223\t1\tPEnum_DuctConnectionType\t1\r\nPARAM\t0e28d2ef-e503-4631-9664-f17e52ebd118\tPset_DistributionPortTypeDuct.DryBulbTemperature\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\r\nPARAM\t90a90418-907a-4180-9a52-7bb1ef069005\tPset_DistributionPortTypeDuct.NominalHeight\tLENGTH\t\t223\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9aa93573-8189-43ee-9e7a-d7e898fddfae\tPset_DistributionPortTypeDuct.NominalThickness\tLENGTH\t\t223\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\ta28e9f22-6e20-4a90-9976-810e633a45f4\tPset_DistributionPortTypeDuct.NominalWidth\tLENGTH\t\t223\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t7583cd7c-5ea7-4d10-9e2b-6ad6d0dafa4b\tPset_DistributionPortTypeDuct.Pressure\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\r\nPARAM\t26538518-abf6-475b-a156-2ce731d7975e\tPset_DistributionPortTypeDuct.Velocity\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\r\nPARAM\t639c0067-eb44-4ed8-b9d1-77247c1f1cc2\tPset_DistributionPortTypeDuct.VolumetricFlowRate\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\r\nPARAM\t46e6cb4f-3ecb-4016-b3d9-52ec26836ce6\tPset_DistributionPortTypeDuct.WetBulbTemperature\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t224\tPset_DistributionPortTypePipe\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2b26e6e2-4b17-410b-a378-8e3f0c571ecb\tPset_DistributionPortTypePipe.ConnectionSubtype\tTEXT\t\t224\t1\tIfcLabel\t1\r\nPARAM\tdf1d3977-4bb4-4a8d-96c8-33058af039e0\tPset_DistributionPortTypePipe.ConnectionSubType\tTEXT\t\t224\t1\tIfcLabel\t1\r\nPARAM\tf842a89d-8ec5-470c-b8ba-7fec7338c6e3\tPset_DistributionPortTypePipe.ConnectionType\tTEXT\t\t224\t1\tPEnum_PipeEndStyleTreatment\t1\r\nPARAM\ta09f2865-11e9-4d0f-9391-93c2e0155921\tPset_DistributionPortTypePipe.FlowCondition\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\r\nPARAM\tfcd3dc22-fdfd-4ea0-84f2-00be83155aa3\tPset_DistributionPortTypePipe.InnerDiameter\tLENGTH\t\t224\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\ta3db7690-009f-42a9-88a9-f5683b29eb8f\tPset_DistributionPortTypePipe.MassFlowRate\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\r\nPARAM\tac9d7980-31fc-44e1-828a-2cc76ae5d86c\tPset_DistributionPortTypePipe.NominalDiameter\tLENGTH\t\t224\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t4d18569d-f126-4f3b-aceb-2da495f1dfda\tPset_DistributionPortTypePipe.OuterDiameter\tLENGTH\t\t224\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tcc4abc86-f21d-4ee3-a86d-3815019c5ab3\tPset_DistributionPortTypePipe.Pressure\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\r\nPARAM\tb6cb7483-a65d-4bd5-ac65-51b080116323\tPset_DistributionPortTypePipe.Temperature\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\r\nPARAM\t7faf6c2f-fbd6-4304-b388-59166e006c4a\tPset_DistributionPortTypePipe.Velocity\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\r\nPARAM\tb4252ef2-5858-465d-840e-3539db7eed5e\tPset_DistributionPortTypePipe.VolumetricFlowRate\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t225\tPset_DistributionSystemCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t742ce300-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemCommon.Reference\tTEXT\t\t225\t1\tIfcIdentifier\t1\r\n#\r\nGROUP\t226\tPset_DistributionSystemTypeElectrical\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t9f173700-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeElectrical.Diversity\tNUMBER\t\t226\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t90c91b00-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeElectrical.ElectricalSystemCategory\tTEXT\t\t226\t1\tPEnum_DistributionSystemElectricalCategory\t1\r\nPARAM\t8018a500-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeElectrical.ElectricalSystemType\tTEXT\t\t226\t1\tPEnum_DistributionSystemElectricalType\t1\r\nPARAM\ta9393580-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeElectrical.MaximumAllowedVoltageDrop\tNUMBER\t\t226\t1\tIfcElectricVoltageMeasure\t1\r\nPARAM\tadfde980-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeElectrical.NetImpedance\tNUMBER\t\t226\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\t048b4300-4767-4386-b8ba-5b688c837bda\tPset_DistributionSystemTypeElectrical.NumberOfLiveConductors\tINTEGER\t\t226\t1\tIfcCountMeasure\t1\r\nPARAM\tce8e35d6-0d86-4789-8b19-096e948f8f8c\tPset_DistributionSystemTypeElectrical.RatedVoltageRange\tMULTILINETEXT\t\t226\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t227\tPset_DistributionSystemTypeOverheadContactlineSystem\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t805ce33d-9042-44a6-8a0c-ea6ff1d4a83a\tPset_DistributionSystemTypeOverheadContactlineSystem.ContactWireNominalDrop\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t71fd2516-b029-4198-9de0-f9761db55df9\tPset_DistributionSystemTypeOverheadContactlineSystem.ContactWireNominalHeight\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t0cb03893-0887-4d7e-a9c6-1553c15b48ac\tPset_DistributionSystemTypeOverheadContactlineSystem.ContactWireStagger\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3e3d8c01-8982-4bca-9c3f-9f5cb6c5e4e3\tPset_DistributionSystemTypeOverheadContactlineSystem.ContactWireUplift\tLENGTH\t\t227\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t681f1f21-3c12-459a-8deb-eb4a28aa1725\tPset_DistributionSystemTypeOverheadContactlineSystem.ElectricalClearance\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t66e0d60f-1a9d-444f-8646-8b9d9cfb8032\tPset_DistributionSystemTypeOverheadContactlineSystem.NumberOfOverlappingSpans\tINTEGER\t\t227\t1\tIfcCountMeasure\t1\r\nPARAM\teb710fc4-fe1a-4f10-bd0f-6fc4283a5ad5\tPset_DistributionSystemTypeOverheadContactlineSystem.OCSType\tTEXT\t\t227\t1\tPEnum_OverheadContactLineType\t1\r\nPARAM\t67d67f9b-da4e-4451-8a76-f9ba41323f92\tPset_DistributionSystemTypeOverheadContactlineSystem.PantographType\tTEXT\t\t227\t1\tIfcLabel\t1\r\nPARAM\t5ea8a253-e524-48ef-9ee4-8eb68e529f30\tPset_DistributionSystemTypeOverheadContactlineSystem.PressureRange\tMULTILINETEXT\t\t227\t1\tPropertyBoundedValue\t1\r\nPARAM\tbf67a2c1-69ca-4d99-8fd2-90ba552a8b30\tPset_DistributionSystemTypeOverheadContactlineSystem.SpanNominalLength\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tbe293857-a0ac-4d67-8958-24a1d668713c\tPset_DistributionSystemTypeOverheadContactlineSystem.TensionLength\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t228\tPset_DistributionSystemTypeVentilation\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\teef5fe00-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.AspectRatio\tNUMBER\t\t228\t1\tIfcReal\t1\r\nPARAM\tb9511500-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.DesignName\tTEXT\t\t228\t1\tIfcLabel\t1\r\nPARAM\te271a580-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.DuctSealant\tMULTILINETEXT\t\t228\t1\tIfcMaterialDefinition\t1\r\nPARAM\tbfdf8c80-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.DuctSizingMethod\tTEXT\t\t228\t1\tPEnum_DuctSizingMethod\t1\r\nPARAM\td84fa700-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.FrictionLoss\tNUMBER\t\t228\t1\tIfcReal\t1\r\nPARAM\td38af300-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.LeakageClass\tNUMBER\t\t228\t1\tIfcPressureMeasure\t1\r\nPARAM\te69dc300-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.MaximumVelocity\tNUMBER\t\t228\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\tf87f6600-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.MinimumHeight\tLENGTH\t\t228\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t02a16480-d1db-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.MinimumWidth\tLENGTH\t\t228\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tce2da880-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.PressureClass\tNUMBER\t\t228\t1\tIfcPressureMeasure\t1\r\nPARAM\tddacf180-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.ScrapFactor\tNUMBER\t\t228\t1\tIfcReal\t1\r\n#\r\nGROUP\t229\tPset_DoorCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t95420380-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.AcousticRating\tTEXT\t\t229\t1\tIfcLabel\t1\r\nPARAM\tcde1dd00-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.DurabilityRating\tTEXT\t\t229\t1\tIfcLabel\t1\r\nPARAM\t8f98ed80-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.FireExit\tYESNO\t\t229\t1\tIfcBoolean\t1\r\nPARAM\t7ba0bc00-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.FireRating\tTEXT\t\t229\t1\tIfcLabel\t1\r\nPARAM\t5d878b80-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.GlazingAreaFraction\tNUMBER\t\t229\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t76903c80-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.HandicapAccessible\tYESNO\t\t229\t1\tIfcBoolean\t1\r\nPARAM\taa6b6200-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.HasDrive\tYESNO\t\t229\t1\tIfcBoolean\t1\r\nPARAM\tec47d880-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.HygrothermalRating\tTEXT\t\t229\t1\tIfcLabel\t1\r\nPARAM\t23b68500-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.Infiltration\tNUMBER\t\t229\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t0aadd400-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.IsExternal\tYESNO\t\t229\t1\tIfcBoolean\t1\r\nPARAM\tda9b78df-a88b-4538-887d-4c597a1059dd\tPset_DoorCommon.MechanicalLoadRating\tTEXT\t\t229\t1\tIfcLabel\t1\r\nPARAM\t2795d780-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.Reference\tTEXT\t\t229\t1\tIfcIdentifier\t1\r\nPARAM\tb4409580-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.SecurityRating\tTEXT\t\t229\t1\tIfcLabel\t1\r\nPARAM\tbeaf5f00-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.SelfClosing\tYESNO\t\t229\t1\tIfcBoolean\t1\r\nPARAM\tcec73e80-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.SmokeStop\tYESNO\t\t229\t1\tIfcBoolean\t1\r\nPARAM\t32e90300-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.Status\tTEXT\t\t229\t1\tPEnum_ElementStatus\t1\r\nPARAM\t42b51700-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.ThermalTransmittance\tNUMBER\t\t229\t1\tIfcThermalTransmittanceMeasure\t1\r\nPARAM\t5030f042-24d9-4c74-aba7-53294170b227\tPset_DoorCommon.WaterTightnessRating\tTEXT\t\t229\t1\tIfcLabel\t1\r\nPARAM\t9be0892f-f932-4135-bdaf-cd98782a64ff\tPset_DoorCommon.WindLoadRating\tTEXT\t\t229\t1\tIfcLabel\t1\r\n#\r\nGROUP\t230\tPset_DoorTypeTurnstile\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc3deea92-19a1-47c6-8e71-6768cfb94fb2\tPset_DoorTypeTurnstile.IsBidirectional\tYESNO\t\t230\t1\tIfcBoolean\t1\r\nPARAM\td677b93d-e6dc-4c38-9855-a85d4c8ac3ac\tPset_DoorTypeTurnstile.NarrowChannelWidth\tLENGTH\t\t230\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tae4a11a9-9783-4e3f-a659-8bd834abd244\tPset_DoorTypeTurnstile.TurnstileType\tTEXT\t\t230\t1\tPEnum_TurnstileType\t1\r\nPARAM\t60ad06c0-c10a-4c40-8dcf-3fcb095f5f36\tPset_DoorTypeTurnstile.WideChannelWidth\tLENGTH\t\t230\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t231\tPset_DoorWindowGlazingType\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7d5c98fb-e2a4-496b-88cc-3fdd33d52aa9\tPset_DoorWindowGlazingType.BeamRadiationTransmittance\tNUMBER\t\t231\t1\tIfcPositiveRatioMeasure \t1\r\nPARAM\t3da49780-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.FillGas\tTEXT\t\t231\t1\tIfcLabel\t1\r\nPARAM\t48f7c300-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.GlassColor\tTEXT\t\t231\t1\tIfcLabel\t1\r\nPARAM\tf6c22db5-13b1-43e3-a808-d1619fcf3479\tPset_DoorWindowGlazingType.GlassColour\tTEXT\t\t231\t1\tIfcLabel\t1\r\nPARAM\t0df58f80-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.GlassLayers\tINTEGER\t\t231\t1\tIfcCountMeasure\t1\r\nPARAM\t1a79e800-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.GlassThickness1\tLENGTH\t\t231\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t2796d700-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.GlassThickness2\tLENGTH\t\t231\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t32516c00-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.GlassThickness3\tLENGTH\t\t231\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t69278200-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.IsCoated\tYESNO\t\t231\t1\tIfcBoolean\t1\r\nPARAM\t5dd45680-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.IsLaminated\tYESNO\t\t231\t1\tIfcBoolean\t1\r\nPARAM\t51e89480-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.IsTempered\tYESNO\t\t231\t1\tIfcBoolean\t1\r\nPARAM\t72185380-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.IsWired\tYESNO\t\t231\t1\tIfcBoolean\t1\r\nPARAM\tbcb84ce7-865c-42af-bcc3-77831a5791b1\tPset_DoorWindowGlazingType.Reflectivity\tNUMBER\t\t231\t1\tIfcPositiveRatioMeasure \t1\r\nPARAM\t95db9980-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.ShadingCoefficient\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t84928d00-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.SolarAbsorption\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t91af7c00-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.SolarHeatGainTransmittance\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t88beaa80-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.SolarReflectance\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t8ceac800-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.SolarTransmittance\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t9a07b700-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.ThermalTransmittanceSummer\tNUMBER\t\t231\t1\tIfcThermalTransmittanceMeasure\t1\r\nPARAM\t9e33d480-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.ThermalTransmittanceWinter\tNUMBER\t\t231\t1\tIfcThermalTransmittanceMeasure\t1\r\nPARAM\t24b39c7d-ba26-4c7d-befc-dd19519f896e\tPset_DoorWindowGlazingType.Translucency\tNUMBER\t\t231\t1\tIfcPositiveRatioMeasure \t1\r\nPARAM\t7a708e80-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.VisibleLightReflectance\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t80666f80-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.VisibleLightTransmittance\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\r\n#\r\nGROUP\t232\tPset_DoorWindowShadingType\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7df9c781-04a9-4420-905f-48de5c924975\tPset_DoorWindowShadingType.ExternalShadingCoefficient\tNUMBER\t\t232\t1\tIfcPositiveRatioMeasure \t1\r\nPARAM\t99bf1924-f82e-4ca3-926d-0102fc3b01c1\tPset_DoorWindowShadingType.InsetShadingCoefficient\tNUMBER\t\t232\t1\tIfcPositiveRatioMeasure \t1\r\nPARAM\tb2083640-14eb-4acd-8461-7d991fda0961\tPset_DoorWindowShadingType.InternalShadingCoefficient\tNUMBER\t\t232\t1\tIfcPositiveRatioMeasure \t1\r\n#\r\nGROUP\t233\tPset_DrainageCatchment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb5ed3e01-eb14-47f6-bd02-27343dc3ea3e\tPset_DrainageCatchment.AreaDrained\tAREA\t\t233\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t234\tPset_DrainageCulvert\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta0beb179-7162-4a16-9c96-aeec8707c522\tPset_DrainageCulvert.ClearDepth\tLENGTH\t\t234\t1\tIfcLengthMeasure\t1\r\nPARAM\t26f5e6ed-2a20-4a06-8e10-416302290168\tPset_DrainageCulvert.InternalWidth\tLENGTH\t\t234\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t235\tPset_DrainageOutfall\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1b43defd-c801-4719-98f1-be72bb91688e\tPset_DrainageOutfall.InvertLevel\tLENGTH\t\t235\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t236\tPset_DrainageReserve\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t6d0ef567-c3b4-4e27-ae35-9c69dfea422e\tPset_DrainageReserve.Width\tLENGTH\t\t236\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t237\tPset_Draughting\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te35c8d33-761f-4fbb-b549-89253c7e6401\tPset_Draughting.Colour.Blue\tINTEGER\t\t237\t1\tIfcInteger\t1\r\nPARAM\t6e5ac9b1-4c2b-4cf1-9c59-2f1592faa0c1\tPset_Draughting.Colour.Green\tINTEGER\t\t237\t1\tIfcInteger\t1\r\nPARAM\tc482289f-7205-45c4-a1a4-3fcd065addd5\tPset_Draughting.Colour.Red\tINTEGER\t\t237\t1\tIfcInteger\t1\r\nPARAM\t6157732a-43f1-43b8-a963-f513179a838b\tPset_Draughting.LayerName\tTEXT\t\t237\t1\tIfcIdentifier\t1\r\n#\r\nGROUP\t238\tPset_DuctConnection\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tda6976ee-f963-4dc4-8884-90ee43cca3fe\tPset_DuctConnection.ConnectionType\tMULTILINETEXT\t\t238\t1\tPropertyListValue\t1\r\n#\r\nGROUP\t239\tPset_DuctDesignCriteria\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta6b311d5-e001-44b5-a56a-cc30c5203977\tPset_DuctDesignCriteria.AspectRatio\tNUMBER\t\t239\t1\tIfcReal \t1\r\nPARAM\t6a74ce7e-7df0-4e07-a5fa-750487de64dd\tPset_DuctDesignCriteria.DesignName\tTEXT\t\t239\t1\tIfcText\t1\r\nPARAM\td469a3f6-19ca-4786-974e-7b419e54232e\tPset_DuctDesignCriteria.DuctSealant\tMULTILINETEXT\t\t239\t1\tIfcMaterial\t1\r\nPARAM\t3376dbe0-8efa-40e1-96c9-1fb7e297957f\tPset_DuctDesignCriteria.DuctSizingMethod\tTEXT\t\t239\t1\tPEnum_DuctSizingMethod\t1\r\nPARAM\tf78d6b41-d1af-4bfd-9418-8f5f49d848d0\tPset_DuctDesignCriteria.FrictionLoss\tNUMBER\t\t239\t1\tIfcReal\t1\r\nPARAM\t36658cf7-5bd5-4b12-ba46-94656d230b69\tPset_DuctDesignCriteria.LeakageClass\tNUMBER\t\t239\t1\tIfcPressureMeasure\t1\r\nPARAM\te830b105-7242-4fb7-a651-d457745a15cc\tPset_DuctDesignCriteria.MaximumVelocity\tNUMBER\t\t239\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\t1fe98945-31da-489f-80bf-cd74956231a2\tPset_DuctDesignCriteria.MinimumHeight\tNUMBER\t\t239\t1\tIfcPositiveLengthMeasure \t1\r\nPARAM\t4310d897-800e-45a7-83c7-2ade42eec6f7\tPset_DuctDesignCriteria.MinimumWidth\tNUMBER\t\t239\t1\tIfcPositiveLengthMeasure \t1\r\nPARAM\t6ade8563-b726-4031-aff0-ae07ddf44806\tPset_DuctDesignCriteria.PressureClass\tNUMBER\t\t239\t1\tIfcPressureMeasure\t1\r\nPARAM\t903a73c7-0459-4367-bd1a-4c87a575cfc6\tPset_DuctDesignCriteria.ScrapFactor\tNUMBER\t\t239\t1\tIfcReal \t1\r\n#\r\nGROUP\t240\tPset_DuctFittingOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\teb17ab00-d1dd-11e1-8000-00215ad4efdf\tPset_DuctFittingOccurrence.Color\tTEXT\t\t240\t1\tIfcLabel\t1\r\nPARAM\tf876c54c-6b7d-40e7-b542-d549471e703a\tPset_DuctFittingOccurrence.Colour\tTEXT\t\t240\t1\tIfcLabel\t1\r\nPARAM\te652f700-d1dd-11e1-8000-00215ad4efdf\tPset_DuctFittingOccurrence.HasLiner\tYESNO\t\t240\t1\tIfcBoolean\t1\r\nPARAM\te0f5ac80-d1dd-11e1-8000-00215ad4efdf\tPset_DuctFittingOccurrence.InteriorRoughnessCoefficient\tLENGTH\t\t240\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t241\tPset_DuctFittingPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tfb2f8a80-d1dd-11e1-8000-00215ad4efdf\tPset_DuctFittingPHistory.AirFlowLeakage\tMULTILINETEXT\t\t241\t1\tIfcTimeSeries\t1\r\nPARAM\tf8cd3080-d1dd-11e1-8000-00215ad4efdf\tPset_DuctFittingPHistory.AtmosphericPressure\tMULTILINETEXT\t\t241\t1\tIfcTimeSeries\t1\r\nPARAM\tf66ad680-d1dd-11e1-8000-00215ad4efdf\tPset_DuctFittingPHistory.LossCoefficient\tMULTILINETEXT\t\t241\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t242\tPset_DuctFittingTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\taab5ee8d-0309-480c-9d89-d497405f5840\tPset_DuctFittingTypeCommon.EndStyleTreatment\tMULTILINETEXT\t\t242\t1\tPropertyListValue\t1\r\nPARAM\td00cbbe0-9617-42ee-b89d-4d2809b2993f\tPset_DuctFittingTypeCommon.Material\tMULTILINETEXT\t\t242\t1\tIfcMaterial\t1\r\nPARAM\t9b60079b-ed6f-449b-943d-294bf0afa00e\tPset_DuctFittingTypeCommon.MaterialThickness\tLENGTH\t\t242\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tef41400f-cf6b-41bb-a951-d978c317d8f2\tPset_DuctFittingTypeCommon.NominalDiameterOrWidth\tMULTILINETEXT\t\t242\t1\tPropertyListValue\t1\r\nPARAM\tde2c8cc7-5128-4b55-bc42-22fa4315ebf5\tPset_DuctFittingTypeCommon.NominalHeight\tMULTILINETEXT\t\t242\t1\tPropertyListValue\t1\r\nPARAM\t1601ff00-d1de-11e1-8000-00215ad4efdf\tPset_DuctFittingTypeCommon.PressureClass\tNUMBER\t\t242\t1\tIfcPressureMeasure\t1\r\nPARAM\t1ac6b300-d1de-11e1-8000-00215ad4efdf\tPset_DuctFittingTypeCommon.PressureRange\tMULTILINETEXT\t\t242\t1\tPropertyBoundedValue\t1\r\nPARAM\t04205c00-d1de-11e1-8000-00215ad4efdf\tPset_DuctFittingTypeCommon.Reference\tTEXT\t\t242\t1\tIfcIdentifier\t1\r\nPARAM\t097da680-d1de-11e1-8000-00215ad4efdf\tPset_DuctFittingTypeCommon.Status\tTEXT\t\t242\t1\tPEnum_ElementStatus\t1\r\nPARAM\t4317f7ad-3663-4328-952c-5cead7073a23\tPset_DuctFittingTypeCommon.SubType\tTEXT\t\t242\t1\tIfcText\t1\r\nPARAM\t21edc100-d1de-11e1-8000-00215ad4efdf\tPset_DuctFittingTypeCommon.TemperatureRange\tMULTILINETEXT\t\t242\t1\tPropertyBoundedValue\t1\r\nPARAM\teb751a70-b8a3-42fe-a9e0-cf195ec385b9\tPset_DuctFittingTypeCommon.UnitWeight\tNUMBER\t\t242\t1\tIfcMassPerLengthMeasure\t1\r\n#\r\nGROUP\t243\tPset_DuctSegmentOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3a5ddb80-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentOccurrence.Color\tTEXT\t\t243\t1\tIfcLabel\t1\r\nPARAM\t5f17f7cf-faa4-4344-88e4-706d8063b795\tPset_DuctSegmentOccurrence.Colour\tTEXT\t\t243\t1\tIfcLabel\t1\r\nPARAM\t3467fa80-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentOccurrence.HasLiner\tYESNO\t\t243\t1\tIfcBoolean\t1\r\nPARAM\t2e721980-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentOccurrence.InteriorRoughnessCoefficient\tLENGTH\t\t243\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t244\tPset_DuctSegmentPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4f3a6f00-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentPHistory.AtmosphericPressure\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\r\nPARAM\t5a8d9a80-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentPHistory.FluidFlowLeakage\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\r\nPARAM\t52cdf600-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentPHistory.LeakageCurve\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\r\nPARAM\t2fb00574-9007-44a1-851e-5598055a6046\tPset_DuctSegmentPHistory.LeakageCurveHistory\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\r\nPARAM\t4ba6e800-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentPHistory.LossCoefficient\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t245\tPset_DuctSegmentTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta9defb11-3d61-41b2-ad3c-38b8647626dc\tPset_DuctSegmentTypeCommon.CrossSectionShape\tTEXT\t\t245\t1\tPEnum_DuctSegmentShape\t1\r\nPARAM\t362f164f-adba-4512-a91c-3734bfa56faf\tPset_DuctSegmentTypeCommon.EndStyleTreatment\tMULTILINETEXT\t\t245\t1\tPropertyListValue\t1\r\nPARAM\te72347d0-cbba-4d89-b154-0088666d98a1\tPset_DuctSegmentTypeCommon.Length\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\ta3455380-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.LongitudinalSeam\tTEXT\t\t245\t1\tIfcText\t1\r\nPARAM\t2195a50d-36b3-49f9-8923-23482f795074\tPset_DuctSegmentTypeCommon.Material\tMULTILINETEXT\t\t245\t1\tIfcMaterial\t1\r\nPARAM\tb7bb96e0-91eb-4ad3-a508-7db83fd5a7a4\tPset_DuctSegmentTypeCommon.MaterialThickness\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\ta8a29e00-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.NominalDiameterOrWidth\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb0624280-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.NominalHeight\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9163b080-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.PressureRange\tMULTILINETEXT\t\t245\t1\tPropertyBoundedValue\t1\r\nPARAM\t66795c80-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.Reference\tTEXT\t\t245\t1\tIfcIdentifier\t1\r\nPARAM\tb6f0ba00-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.Reinforcement\tTEXT\t\t245\t1\tIfcLabel\t1\r\nPARAM\tbce69b00-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.ReinforcementSpacing\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t7d1fb380-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.Shape\tTEXT\t\t245\t1\tPEnum_DuctSegmentShape\t1\r\nPARAM\t6bd6a700-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.Status\tTEXT\t\t245\t1\tPEnum_ElementStatus\t1\r\nPARAM\t9c1e4580-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.TemperatureRange\tMULTILINETEXT\t\t245\t1\tPropertyBoundedValue\t1\r\nPARAM\t448b619f-9afa-41b2-bc94-33579880c36c\tPset_DuctSegmentTypeCommon.UnitWeight\tNUMBER\t\t245\t1\tIfcMassMeasure\t1\r\nPARAM\t8c066600-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.WorkingPressure\tNUMBER\t\t245\t1\tIfcPressureMeasure\t1\r\n#\r\nGROUP\t246\tPset_DuctSilencerPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tca038a00-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerPHistory.AirFlowRate\tMULTILINETEXT\t\t246\t1\tIfcTimeSeries\t1\r\nPARAM\tce2fa780-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerPHistory.AirPressureDropCurve\tMULTILINETEXT\t\t246\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t247\tPset_DuctSilencerTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tfe774600-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.AirFlowrateRange\tMULTILINETEXT\t\t247\t1\tPropertyBoundedValue\t1\r\nPARAM\tde4f380a-788f-4d93-a425-e1a94c3f710c\tPset_DuctSilencerTypeCommon.AirFlowRateRange\tMULTILINETEXT\t\t247\t1\tPropertyBoundedValue\t1\r\nPARAM\t177ff700-d1df-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.HasExteriorInsulation\tYESNO\t\t247\t1\tIfcBoolean\t1\r\nPARAM\tef909380-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.HydraulicDiameter\tLENGTH\t\t247\t1\tIfcLengthMeasure\t1\r\nPARAM\tf4554780-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.Length\tLENGTH\t\t247\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td7b90f80-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.Reference\tTEXT\t\t247\t1\tIfcIdentifier\t1\r\nPARAM\t0175cb71-1925-49c4-9c6b-5e9d2527ed17\tPset_DuctSilencerTypeCommon.Shape\tTEXT\t\t247\t1\tPEnum_DuctSilencerShape\t1\r\nPARAM\tdd165a00-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.Status\tTEXT\t\t247\t1\tPEnum_ElementStatus\t1\r\nPARAM\t0f27bc00-d1df-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.TemperatureRange\tMULTILINETEXT\t\t247\t1\tPropertyBoundedValue\t1\r\nPARAM\tf919fb80-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.Weight\tNUMBER\t\t247\t1\tIfcMassMeasure\t1\r\nPARAM\t0636ea80-d1df-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.WorkingPressureRange\tMULTILINETEXT\t\t247\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t248\tPset_ElectricalCircuit\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td87281f0-d3ea-4f8c-a2b9-358f807815d9\tPset_ElectricalCircuit.Diversity\tNUMBER\t\t248\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t534b880f-14d9-4f1e-8385-36244a01f61a\tPset_ElectricalCircuit.MaximumAllowedVoltageDrop\tNUMBER\t\t248\t1\tIfcElectricVoltageMeasure\t1\r\nPARAM\tfe4ef925-dc24-4b21-ab1f-58800c876322\tPset_ElectricalCircuit.NetImpedance\tNUMBER\t\t248\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\t40be9780-73d2-44be-8895-81c96be3878a\tPset_ElectricalCircuit.NumberOfPhases\tINTEGER\t\t248\t1\tIfcInteger\t1\r\n#\r\nGROUP\t249\tPset_ElectricalDeviceCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf936102b-d482-4b7e-b989-a5571e353770\tPset_ElectricalDeviceCommon.ConductorFunction\tTEXT\t\t249\t1\tPEnum_ConductorFunctionEnum\t1\r\nPARAM\t1cfbebbc-4e63-4a55-860b-d4a37e9cfcc6\tPset_ElectricalDeviceCommon.EarthingStyle\tTEXT\t\t249\t1\tIfcLabel\t1\r\nPARAM\tf81de313-75c9-4cbd-ae82-398bcba997d5\tPset_ElectricalDeviceCommon.ElectricalDeviceNominalPower\tNUMBER\t\t249\t1\tIfcPowerMeasure\t1\r\nPARAM\t50b86700-d1df-11e1-8000-00215ad4efdf\tPset_ElectricalDeviceCommon.HasProtectiveEarth\tYESNO\t\t249\t1\tIfcBoolean\t1\r\nPARAM\td9dff742-5a40-419d-b231-65452fff6962\tPset_ElectricalDeviceCommon.HeatDissipation\tNUMBER\t\t249\t1\tIfcPowerMeasure\t1\r\nPARAM\taecd027e-d542-4357-a5fd-13331a99bc51\tPset_ElectricalDeviceCommon.IK_Code\tTEXT\t\t249\t1\tIfcLabel\t1\r\nPARAM\t5d3cbf80-d1df-11e1-8000-00215ad4efdf\tPset_ElectricalDeviceCommon.InsulationStandardClass\tTEXT\t\t249\t1\tPEnum_InsulationStandardClass\t1\r\nPARAM\t56ae4800-d1df-11e1-8000-00215ad4efdf\tPset_ElectricalDeviceCommon.IP_Code\tTEXT\t\t249\t1\tIfcLabel\t1\r\nPARAM\t37c5267e-5b65-40bb-8c77-df21a6859cf0\tPset_ElectricalDeviceCommon.NominalCurrent\tNUMBER\t\t249\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\tf69a7954-55c7-4842-825a-54711d3b5abc\tPset_ElectricalDeviceCommon.NominalFrequencyRange\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\r\nPARAM\t157b417a-6196-4c6b-91e7-5c98f64d1dcc\tPset_ElectricalDeviceCommon.NominalPowerConsumption\tNUMBER\t\t249\t1\tIfcPowerMeasure\t1\r\nPARAM\t5d81b5f3-18ec-4cde-8907-ba0ce0aadc4c\tPset_ElectricalDeviceCommon.NominalVoltage\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\r\nPARAM\t4b5b1c80-d1df-11e1-8000-00215ad4efdf\tPset_ElectricalDeviceCommon.NumberOfPoles\tINTEGER\t\t249\t1\tIfcCountMeasure\t1\r\nPARAM\t93e7c6d9-304a-4d2a-a40a-60107453d840\tPset_ElectricalDeviceCommon.NumberOfPowerSupplyPorts\tMULTILINETEXT\t\t249\t1\tPropertyTableValue\t1\r\nPARAM\t7feeb4ee-b7a5-45f8-b839-3663ee4c6a72\tPset_ElectricalDeviceCommon.PhaseAngle\tANGLE\t\t249\t1\tIfcPositivePlaneAngleMeasure\t1\r\nPARAM\te3ee9c35-ebb1-4487-bfb4-f6b6121e9da9\tPset_ElectricalDeviceCommon.PhaseReference\tTEXT\t\t249\t1\tIfcIdentifier\t1\r\nPARAM\t7d151a50-746f-4ad7-b4d4-e7124726a728\tPset_ElectricalDeviceCommon.Power\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\r\nPARAM\tcf523435-8315-441f-a6c1-7c9b65bf62a0\tPset_ElectricalDeviceCommon.PowerFactor\tNUMBER\t\t249\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t784d9d21-44d4-40b5-b30e-2ad107609548\tPset_ElectricalDeviceCommon.RatedCurrent\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\r\nPARAM\ta2e15fb5-e52e-49e3-b867-31401fe07f86\tPset_ElectricalDeviceCommon.RatedVoltage\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\r\nPARAM\td7364fea-0860-4587-b56b-171e665ed6a3\tPset_ElectricalDeviceCommon.UsageCurrent\tNUMBER\t\t249\t1\tIfcElectricCurrentMeasure\t1\r\n#\r\nGROUP\t250\tPset_ElectricalDeviceCompliance\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5c004a3a-c9f0-4927-be84-a5d583b5415a\tPset_ElectricalDeviceCompliance.ElectroMagneticStandardsCompliance\tMULTILINETEXT\t\t250\t1\tPropertyTableValue\t1\r\nPARAM\td95a2b5d-2b7b-4b97-8bda-f58b0e9d55bd\tPset_ElectricalDeviceCompliance.ExplosiveAtmosphereStandardsCompliance\tMULTILINETEXT\t\t250\t1\tPropertyTableValue\t1\r\nPARAM\t506e8620-59b6-4acc-80c8-5afd682f57ea\tPset_ElectricalDeviceCompliance.FireProofingStandardsCompliance\tMULTILINETEXT\t\t250\t1\tPropertyTableValue\t1\r\nPARAM\ta6748539-ce57-4c32-945c-a508867a13c3\tPset_ElectricalDeviceCompliance.LightningProtectionStandardsCompliance\tMULTILINETEXT\t\t250\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t251\tPset_ElectricalFeederLine\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc67b2e82-b160-4a1b-a68a-238ba4aa22dd\tPset_ElectricalFeederLine.CurrentCarryingCapacity\tNUMBER\t\t251\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t12c45691-f7c8-49fc-addb-dc15ebc00824\tPset_ElectricalFeederLine.DesignAmbientTemperature\tMULTILINETEXT\t\t251\t1\tPropertyBoundedValue\t1\r\nPARAM\tb4974f18-714a-4890-a2ed-61e6c573970f\tPset_ElectricalFeederLine.ElectricalClearanceDistance\tLENGTH\t\t251\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t57a36ec0-716c-4835-b582-2e195188c961\tPset_ElectricalFeederLine.ElectricalFeederType\tTEXT\t\t251\t1\tPEnum_ElectricalFeederType\t1\r\n#\r\nGROUP\t252\tPset_ElectricAppliancePHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7180bc80-d1df-11e1-8000-00215ad4efdf\tPset_ElectricAppliancePHistory.PowerState\tMULTILINETEXT\t\t252\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t253\tPset_ElectricApplianceTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7ba2bb00-d1df-11e1-8000-00215ad4efdf\tPset_ElectricApplianceTypeCommon.Reference\tTEXT\t\t253\t1\tIfcIdentifier\t1\r\nPARAM\t83faf600-d1df-11e1-8000-00215ad4efdf\tPset_ElectricApplianceTypeCommon.Status\tTEXT\t\t253\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t254\tPset_ElectricApplianceTypeDishwasher\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb0af0d80-d1df-11e1-8000-00215ad4efdf\tPset_ElectricApplianceTypeDishwasher.DishwasherType\tTEXT\t\t254\t1\tPEnum_ElectricApplianceDishwasherType\t1\r\n#\r\nGROUP\t255\tPset_ElectricApplianceTypeElectricCooker\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tcb818200-d1df-11e1-8000-00215ad4efdf\tPset_ElectricApplianceTypeElectricCooker.ElectricCookerType\tTEXT\t\t255\t1\tPEnum_ElectricApplianceElectricCookerType\t1\r\n#\r\nGROUP\t256\tPset_ElectricDistributionBoardOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc8b9fc58-cd02-4eed-a320-8ff916082beb\tPset_ElectricDistributionBoardOccurrence.IsMain\tYESNO\t\t256\t1\tIfcBoolean\t1\r\nPARAM\t421bd751-0cf9-47d8-9829-53510c16a01a\tPset_ElectricDistributionBoardOccurrence.IsSkilledOperator\tYESNO\t\t256\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t257\tPset_ElectricDistributionBoardTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te653f680-d1df-11e1-8000-00215ad4efdf\tPset_ElectricDistributionBoardTypeCommon.Reference\tTEXT\t\t257\t1\tIfcIdentifier\t1\r\nPARAM\tece26e00-d1df-11e1-8000-00215ad4efdf\tPset_ElectricDistributionBoardTypeCommon.Status\tTEXT\t\t257\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t258\tPset_ElectricDistributionPointCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3fe1c495-213f-4af0-aba5-cdab98e11f5e\tPset_ElectricDistributionPointCommon.CaseMaterial\tMULTILINETEXT\t\t258\t1\tIfcMaterial\t1\r\nPARAM\t811e3796-c713-46f9-9339-0b835de4d27d\tPset_ElectricDistributionPointCommon.CaseWeight\tNUMBER\t\t258\t1\tIfcMassMeasure\t1\r\nPARAM\t233dd3e8-d001-47fa-8d2b-904e7a274cc4\tPset_ElectricDistributionPointCommon.IsMain\tYESNO\t\t258\t1\tIfcBoolean\t1\r\nPARAM\t33694f54-7384-4a57-b2b3-b916e944d863\tPset_ElectricDistributionPointCommon.NumberOfDoors\tINTEGER\t\t258\t1\tIfcInteger\t1\r\nPARAM\t607ff938-a2ce-45af-a850-a7d8ae634f00\tPset_ElectricDistributionPointCommon.NumberOfOpenings\tINTEGER\t\t258\t1\tIfcInteger\t1\r\n#\r\nGROUP\t259\tPset_ElectricFlowStorageDevicePHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta277fb1f-cdca-4fcc-9c29-8634518b1066\tPset_ElectricFlowStorageDevicePHistory.Level\tNUMBER\t\t259\t1\tIfcNormalisedRatioMeasure\t1\r\n#\r\nGROUP\t260\tPset_ElectricFlowStorageDeviceTypeBattery\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf57d3ef9-01e7-4abb-a4a7-42d93a1da902\tPset_ElectricFlowStorageDeviceTypeBattery.AssemblyInstruction\tMULTILINETEXT\t\t260\t1\tIfcExternalReference\t1\r\nPARAM\tfa581e33-7bdb-495b-b6ea-53944520def7\tPset_ElectricFlowStorageDeviceTypeBattery.BatteryChargingType\tTEXT\t\t260\t1\tPEnum_BatteryChargingType\t1\r\nPARAM\ta011a8cf-ce22-4005-b332-20c681dd4fc1\tPset_ElectricFlowStorageDeviceTypeBattery.CurrentRegulationRate\tNUMBER\t\t260\t1\tIfcRatioMeasure\t1\r\nPARAM\tc7125ff1-1c26-4498-85ad-78214700477e\tPset_ElectricFlowStorageDeviceTypeBattery.EncapsulationTechnologyCode\tTEXT\t\t260\t1\tIfcIdentifier\t1\r\nPARAM\t382c88ad-e4f9-42b8-93e4-ffc1730ab84e\tPset_ElectricFlowStorageDeviceTypeBattery.NominalSupplyCurrent\tNUMBER\t\t260\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t2f09c665-db2c-4cdd-810f-26cf3eaf1bf5\tPset_ElectricFlowStorageDeviceTypeBattery.OpenCircuitVoltage\tNUMBER\t\t260\t1\tIfcElectricVoltageMeasure\t1\r\nPARAM\t22a59f85-7949-4bf6-b55b-fbb73444e1c4\tPset_ElectricFlowStorageDeviceTypeBattery.VoltageRegulationRate\tNUMBER\t\t260\t1\tIfcRatioMeasure\t1\r\n#\r\nGROUP\t261\tPset_ElectricFlowStorageDeviceTypeCapacitor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t55e91b40-41d2-4b67-b7f7-c786e4aaf973\tPset_ElectricFlowStorageDeviceTypeCapacitor.NumberOfPhases\tINTEGER\t\t261\t1\tIfcCountMeasure\t1\r\n#\r\nGROUP\t262\tPset_ElectricFlowStorageDeviceTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3df26200-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ConnectedConductorFunction\tTEXT\t\t262\t1\tPEnum_ConductorFunctionEnum\t1\r\nPARAM\t8dd12900-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PoleMaximumState\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t97f32780-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PoleMinimumState\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t932e7380-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PolePowerFactorMaximumState\tNUMBER\t\t262\t1\tIfcReal\t1\r\nPARAM\t9d507200-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PolePowerFactorMinimumState\tNUMBER\t\t262\t1\tIfcReal\t1\r\nPARAM\t961f401a-e939-4269-8eb4-951597bb68f0\tPset_ElectricFlowStorageDeviceTypeCommon.MaximumInsulatedVoltage\tNUMBER\t\t262\t1\tIfcElectricVoltageMeasure\t1\r\nPARAM\t7813d9d4-8068-4f79-aca2-93559a565df4\tPset_ElectricFlowStorageDeviceTypeCommon.ModuleCapacity\tNUMBER\t\t262\t1\tIfcElectricCapacitanceMeasure\t1\r\nPARAM\t64446b41-70e2-49fa-9c6a-4564917ccfd9\tPset_ElectricFlowStorageDeviceTypeCommon.ModulesInParallel\tINTEGER\t\t262\t1\tIfcInteger\t1\r\nPARAM\t9c327be7-6d6f-4139-ab9f-58c6a5cc7a9a\tPset_ElectricFlowStorageDeviceTypeCommon.ModulesInSeries\tINTEGER\t\t262\t1\tIfcInteger\t1\r\nPARAM\t359a2700-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.NominalFrequency\tNUMBER\t\t262\t1\tIfcFrequencyMeasure\t1\r\nPARAM\t2915ce80-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.NominalSupplyVoltage\tNUMBER\t\t262\t1\tIfcElectricVoltageMeasure\t1\r\nPARAM\t2e731900-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.NominalSupplyVoltageOffset\tMULTILINETEXT\t\t262\t1\tPropertyBoundedValue\t1\r\nPARAM\td3194927-d78f-4009-b7fb-07728601ea82\tPset_ElectricFlowStorageDeviceTypeCommon.PowerCapacity\tNUMBER\t\t262\t1\tIfcElectricChargeMeasure\t1\r\nPARAM\t7c868260-451b-4803-8f4f-c498fc0e3a9b\tPset_ElectricFlowStorageDeviceTypeCommon.RadiativeFraction\tNUMBER\t\t262\t1\tIfcRatioMeasure\t1\r\nPARAM\t401f801b-4f9f-40ad-bbf7-2328b9d53477\tPset_ElectricFlowStorageDeviceTypeCommon.RatedCapacitance\tNUMBER\t\t262\t1\tIfcElectricCapacitanceMeasure\t1\r\nPARAM\t10a5b400-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.Reference\tTEXT\t\t262\t1\tIfcIdentifier\t1\r\nPARAM\t76923b80-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PoleMaximumState\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t83af2a80-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PoleMinimumState\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t7db94980-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PolePowerFactorMaximumState\tNUMBER\t\t262\t1\tIfcReal\t1\r\nPARAM\t890c7500-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PolePowerFactorMinimumState\tNUMBER\t\t262\t1\tIfcReal\t1\r\nPARAM\t5c585d80-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit2PoleMinimumState\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t64b09880-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit2PolePowerFactorMinimumState\tNUMBER\t\t262\t1\tIfcReal\t1\r\nPARAM\t51053200-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit3PoleMaximumState\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t56fb1300-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit3PolePowerFactorMaximumState\tNUMBER\t\t262\t1\tIfcReal\t1\r\nPARAM\t17342b80-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.Status\tTEXT\t\t262\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t263\tPset_ElectricFlowStorageDeviceTypeInductor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1d4d6fab-4a51-4094-90fe-41c834a2ca00\tPset_ElectricFlowStorageDeviceTypeInductor.Inductance\tNUMBER\t\t263\t1\tIfcInductanceMeasure\t1\r\nPARAM\tbb5179a5-deec-4ec4-9ed0-44cf9d4c2fea\tPset_ElectricFlowStorageDeviceTypeInductor.NumberOfPhases\tINTEGER\t\t263\t1\tIfcCountMeasure\t1\r\n#\r\nGROUP\t264\tPset_ElectricFlowStorageDeviceTypeRecharger\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8e3e97de-5fb9-41c5-80f7-39b3b3d91b27\tPset_ElectricFlowStorageDeviceTypeRecharger.NominalSupplyCurrent\tNUMBER\t\t264\t1\tIfcElectricCurrentMeasure\t1\r\n#\r\nGROUP\t265\tPset_ElectricFlowStorageDeviceTypeUPS\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta7748134-d9f4-4c35-93a6-628685ca7150\tPset_ElectricFlowStorageDeviceTypeUPS.AssemblyInstruction\tMULTILINETEXT\t\t265\t1\tIfcExternalReference\t1\r\nPARAM\tc41bf592-8c9c-4337-9bfb-464910fc6096\tPset_ElectricFlowStorageDeviceTypeUPS.CurrentRegulationRate\tNUMBER\t\t265\t1\tIfcRatioMeasure\t1\r\nPARAM\t29fc843b-6cda-4af1-a087-8818b245d1f2\tPset_ElectricFlowStorageDeviceTypeUPS.NominalSupplyCurrent\tNUMBER\t\t265\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t2240a113-414d-4fa2-afe4-e9fa98ce07e3\tPset_ElectricFlowStorageDeviceTypeUPS.VoltageRegulationRate\tNUMBER\t\t265\t1\tIfcRatioMeasure\t1\r\n#\r\nGROUP\t266\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5510d1db-844f-41f3-966a-586d5860c33b\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.ElectronicFilterType\tTEXT\t\t266\t1\tPEnum_ElectronicFilterType\t1\r\nPARAM\tfadb9a69-8d78-408b-ae54-ca000d2e7ab6\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.NominalCurrent\tNUMBER\t\t266\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t47a6c8aa-c28c-4ae7-8f77-e2a5fdbc2af2\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.NominalPower\tNUMBER\t\t266\t1\tIfcPowerMeasure\t1\r\nPARAM\t40843c03-ae9b-41a2-852c-e4978407f156\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.PrimaryFrequency\tNUMBER\t\t266\t1\tIfcFrequencyMeasure\t1\r\nPARAM\tda6be3f1-8241-4923-9f87-dfbe7bb3761c\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.RatedVoltage\tMULTILINETEXT\t\t266\t1\tPropertyBoundedValue\t1\r\nPARAM\tda34a648-a0ad-4fd6-a8d7-6f8e5ce58293\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.SecondaryFrequency\tNUMBER\t\t266\t1\tIfcFrequencyMeasure\t1\r\n#\r\nGROUP\t267\tPset_ElectricGeneratorTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbb1dd700-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricGeneratorTypeCommon.ElectricGeneratorEfficiency\tNUMBER\t\t267\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tc53fd580-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricGeneratorTypeCommon.MaximumPowerOutput\tNUMBER\t\t267\t1\tIfcPowerMeasure\t1\r\nPARAM\ta80b0700-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricGeneratorTypeCommon.Reference\tTEXT\t\t267\t1\tIfcIdentifier\t1\r\nPARAM\tc07b2180-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricGeneratorTypeCommon.StartCurrentFactor\tNUMBER\t\t267\t1\tIfcReal\t1\r\nPARAM\tad685180-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricGeneratorTypeCommon.Status\tTEXT\t\t267\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t268\tPset_ElectricHeaterTypeElectricalCableHeater\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t82f138a2-680e-4abc-9174-dea8ebad4ab3\tPset_ElectricHeaterTypeElectricalCableHeater.HeatOutputPerUnitLength\tNUMBER\t\t268\t1\t IfcPowerMeasure\t1\r\n#\r\nGROUP\t269\tPset_ElectricHeaterTypeElectricalMatHeater\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t324d848a-726e-49c2-96d8-26d07c677bfc\tPset_ElectricHeaterTypeElectricalMatHeater.HeatOutputPerUnitArea\tNUMBER\t\t269\t1\t IfcPowerMeasure\t1\r\n#\r\nGROUP\t270\tPset_ElectricHeaterTypeElectricalPointHeater\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tcd11dec2-109f-4eab-8fc0-b40ca90a0e16\tPset_ElectricHeaterTypeElectricalPointHeater.HeatOutput\tNUMBER\t\t270\t1\t IfcPowerMeasure\t1\r\n#\r\nGROUP\t271\tPset_ElectricMotorTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te99bb200-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.ElectricMotorEfficiency\tNUMBER\t\t271\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t0fc15200-d1e1-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.FrameSize\tTEXT\t\t271\t1\tIfcLabel\t1\r\nPARAM\t1b147d80-d1e1-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.HasPartWinding\tYESNO\t\t271\t1\tIfcBoolean\t1\r\nPARAM\t15b73300-d1e1-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.IsGuarded\tYESNO\t\t271\t1\tIfcBoolean\t1\r\nPARAM\tfddfaf00-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.LockedRotorCurrent\tNUMBER\t\t271\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\te56f9480-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.MaximumPowerOutput\tNUMBER\t\t271\t1\tIfcPowerMeasure\t1\r\nPARAM\t02a46300-d1e1-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.MotorEnclosureType\tTEXT\t\t271\t1\tPEnum_MotorEnclosureType\t1\r\nPARAM\td25cc480-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.Reference\tTEXT\t\t271\t1\tIfcIdentifier\t1\r\nPARAM\teef8fc80-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.StartCurrentFactor\tNUMBER\t\t271\t1\tIfcReal\t1\r\nPARAM\tf3251a00-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.StartingTime\tNUMBER\t\t271\t1\tIfcTimeMeasure\t1\r\nPARAM\td7217880-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.Status\tTEXT\t\t271\t1\tPEnum_ElementStatus\t1\r\nPARAM\tf8826480-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.TeTime\tNUMBER\t\t271\t1\tIfcTimeMeasure\t1\r\n#\r\nGROUP\t272\tPset_ElectricTimeControlTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t25cf1280-d1e1-11e1-8000-00215ad4efdf\tPset_ElectricTimeControlTypeCommon.Reference\tTEXT\t\t272\t1\tIfcIdentifier\t1\r\nPARAM\t2bc4f380-d1e1-11e1-8000-00215ad4efdf\tPset_ElectricTimeControlTypeCommon.Status\tTEXT\t\t272\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t273\tPset_ElementAssemblyCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t943159a9-3c8d-4316-a7a0-1b4382c6ea80\tPset_ElementAssemblyCommon.Reference\tTEXT\t\t273\t1\tIfcIdentifier\t1\r\nPARAM\t20e74f79-d075-407a-92f9-3d6788281332\tPset_ElementAssemblyCommon.Status\tTEXT\t\t273\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t274\tPset_ElementAssemblyTypeCantilever\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2f965433-cbef-40cd-a94b-fce812dc86e6\tPset_ElementAssemblyTypeCantilever.AssemblyInstruction\tMULTILINETEXT\t\t274\t1\tIfcExternalReference\t1\r\nPARAM\t80e4ac76-ec58-481e-8151-ebb7755b1327\tPset_ElementAssemblyTypeCantilever.CantileverType\tTEXT\t\t274\t1\tPEnum_CantileverAssemblyType\t1\r\nPARAM\t524a96b1-e800-497e-b437-0c44e886455e\tPset_ElementAssemblyTypeCantilever.ContactWireStagger\tLENGTH\t\t274\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc2502814-24ee-47a5-92fe-c9b34aa8bc5d\tPset_ElementAssemblyTypeCantilever.SystemHeight\tLENGTH\t\t274\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t275\tPset_ElementAssemblyTypeDilatationPanel\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tea184fa6-7781-4994-bb6f-d18c81de4794\tPset_ElementAssemblyTypeDilatationPanel.BladesOrientation\tTEXT\t\t275\t1\tPEnum_BladesOrientation\t1\r\nPARAM\te63b92b6-3783-4d8f-b731-1d74b722281d\tPset_ElementAssemblyTypeDilatationPanel.DilatationLength\tLENGTH\t\t275\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t67f27aad-31a0-455c-acd5-0feb53774977\tPset_ElementAssemblyTypeDilatationPanel.ExpansionDirection\tTEXT\t\t275\t1\tPEnum_ExpansionDirection\t1\r\nPARAM\tf6fb0122-c287-4807-92e8-8f4f664f2893\tPset_ElementAssemblyTypeDilatationPanel.InstallationPlan\tMULTILINETEXT\t\t275\t1\tIfcDocumentReference\t1\r\nPARAM\t4f1b4c35-09d7-4147-9dd4-85c3b47950f5\tPset_ElementAssemblyTypeDilatationPanel.TechnicalStandard\tMULTILINETEXT\t\t275\t1\tIfcExternalReference\t1\r\n#\r\nGROUP\t276\tPset_ElementAssemblyTypeHeadSpan\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta7525c57-1b36-49fd-854e-b9e3a9ba2e61\tPset_ElementAssemblyTypeHeadSpan.AssemblyInstruction\tMULTILINETEXT\t\t276\t1\tIfcExternalReference\t1\r\nPARAM\tc9516041-7d66-4aa3-8e3f-0dd8f43b9fc6\tPset_ElementAssemblyTypeHeadSpan.NumberOfTracksCrossed\tINTEGER\t\t276\t1\tIfcCountMeasure\t1\r\nPARAM\t93b45482-7e04-4b71-816d-6b2473403975\tPset_ElementAssemblyTypeHeadSpan.Span\tLENGTH\t\t276\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t277\tPset_ElementAssemblyTypeMast\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta729b4c7-906f-4ff4-bfa1-4a02530e35ee\tPset_ElementAssemblyTypeMast.WithLightningRod\tYESNO\t\t277\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t278\tPset_ElementAssemblyTypeOCSSuspension\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t42845a1e-69cd-4c91-a180-d7cecfa18c54\tPset_ElementAssemblyTypeOCSSuspension.ContactWireHeight\tLENGTH\t\t278\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t266d1fe8-a5bf-4fce-b285-00e3cbb9d023\tPset_ElementAssemblyTypeOCSSuspension.ContactWireStagger\tLENGTH\t\t278\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t279\tPset_ElementAssemblyTypeRigidFrame\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t228b17a8-5655-45b5-9584-4becd234735a\tPset_ElementAssemblyTypeRigidFrame.AssemblyInstruction\tMULTILINETEXT\t\t279\t1\tIfcExternalReference\t1\r\nPARAM\t81bf8e6a-3b04-4aa1-86ae-00201b0575dd\tPset_ElementAssemblyTypeRigidFrame.LoadCapacity\tNUMBER\t\t279\t1\tIfcForceMeasure\t1\r\nPARAM\t7eaf073e-9a1f-4809-becc-66c7ebe5d209\tPset_ElementAssemblyTypeRigidFrame.NumberOfTracksCrossed\tINTEGER\t\t279\t1\tIfcCountMeasure\t1\r\nPARAM\taf93d42e-747b-4c41-bca5-919ed1e92f76\tPset_ElementAssemblyTypeRigidFrame.Span\tLENGTH\t\t279\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t280\tPset_ElementAssemblyTypeSteadyDevice\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8a47076c-20f8-4477-bcba-1b1e823390a1\tPset_ElementAssemblyTypeSteadyDevice.AssemblyInstruction\tMULTILINETEXT\t\t280\t1\tIfcExternalReference\t1\r\nPARAM\t501c8acc-fff4-4683-9663-29bff32c7e25\tPset_ElementAssemblyTypeSteadyDevice.ContactWireStagger\tLENGTH\t\t280\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t14b88b78-8096-42d6-b4b4-e2b6e0d1ce3b\tPset_ElementAssemblyTypeSteadyDevice.IsSetOnWorkingWire\tYESNO\t\t280\t1\tIfcBoolean\t1\r\nPARAM\tf509ee5d-c3c9-4276-b793-e8a1fb3806d5\tPset_ElementAssemblyTypeSteadyDevice.SteadyDeviceType\tTEXT\t\t280\t1\tPEnum_SteadyDeviceType\t1\r\n#\r\nGROUP\t281\tPset_ElementAssemblyTypeSupportingAssembly\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t65751dfe-a112-4109-9e0a-032607595cd9\tPset_ElementAssemblyTypeSupportingAssembly.NumberOfCantilevers\tINTEGER\t\t281\t1\tIfcCountMeasure\t1\r\nPARAM\t9abe91d5-6e77-4d24-8a3a-296222f613f8\tPset_ElementAssemblyTypeSupportingAssembly.TypeOfSupportingSystem\tTEXT\t\t281\t1\tPEnum_SupportingSystemType\t1\r\n#\r\nGROUP\t282\tPset_ElementAssemblyTypeTrackPanel\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t046c133f-43a0-4260-a225-4cce80664ca7\tPset_ElementAssemblyTypeTrackPanel.InstallationPlan\tMULTILINETEXT\t\t282\t1\tIfcDocumentReference\t1\r\nPARAM\tb2b57075-d4b7-47e1-957c-3e4c63ce9a1d\tPset_ElementAssemblyTypeTrackPanel.IsAccessibleByVehicle\tYESNO\t\t282\t1\tIfcBoolean\t1\r\nPARAM\t07d65729-c94a-491c-89e6-77e05c58e4d9\tPset_ElementAssemblyTypeTrackPanel.TrackExpansion\tMULTILINETEXT\t\t282\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t283\tPset_ElementAssemblyTypeTractionSwitchingAssembly\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1d8e0946-ada8-4f94-b96a-933cd1a70cad\tPset_ElementAssemblyTypeTractionSwitchingAssembly.DesignAmbientTemperature\tMULTILINETEXT\t\t283\t1\tPropertyBoundedValue\t1\r\nPARAM\t08b996e7-83b7-44ef-9448-d8501d92f976\tPset_ElementAssemblyTypeTractionSwitchingAssembly.NominalCurrent\tNUMBER\t\t283\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t08411494-7e64-4814-bb45-ac9ec377e754\tPset_ElementAssemblyTypeTractionSwitchingAssembly.NominalPower\tNUMBER\t\t283\t1\tIfcPowerMeasure\t1\r\nPARAM\t5556537f-9526-488e-a337-e7042153182b\tPset_ElementAssemblyTypeTractionSwitchingAssembly.RatedVoltage\tMULTILINETEXT\t\t283\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t284\tPset_ElementAssemblyTypeTurnoutPanel\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4da8d614-6e37-458e-994d-08ea68bfc193\tPset_ElementAssemblyTypeTurnoutPanel.BranchLineDirection\tTEXT\t\t284\t1\tPEnum_BranchLineDirection\t1\r\nPARAM\t4f94c5b2-34af-4712-907d-0d78b05f3df6\tPset_ElementAssemblyTypeTurnoutPanel.InstallationPlan\tMULTILINETEXT\t\t284\t1\tIfcDocumentReference\t1\r\nPARAM\t4cf99c64-0bfd-4a1f-baea-befb7b33c6ba\tPset_ElementAssemblyTypeTurnoutPanel.IsAccessibleByVehicle\tYESNO\t\t284\t1\tIfcBoolean\t1\r\nPARAM\t9931da43-a728-4424-bf7a-3f7fad0bace4\tPset_ElementAssemblyTypeTurnoutPanel.IsSharedTurnout\tYESNO\t\t284\t1\tIfcBoolean\t1\r\nPARAM\tb1ac3271-7a62-4f15-9c23-a84dae88f12a\tPset_ElementAssemblyTypeTurnoutPanel.MaximumSpeedLimitOfDivergingLine\tNUMBER\t\t284\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\tf26811d3-6512-4fc4-92bc-373f124d1d14\tPset_ElementAssemblyTypeTurnoutPanel.PercentShared\tNUMBER\t\t284\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t8178b92c-8d12-41f6-a524-e2f515253c73\tPset_ElementAssemblyTypeTurnoutPanel.TrackElementOrientation\tTEXT\t\t284\t1\tPEnum_TurnoutPanelOrientation\t1\r\nPARAM\t9b0b0536-9b83-4a0a-b9fe-de7e0ac77b61\tPset_ElementAssemblyTypeTurnoutPanel.TrackExpansion\tMULTILINETEXT\t\t284\t1\tPropertyBoundedValue\t1\r\nPARAM\tf94b373e-c414-4346-bbc6-60dc1a018c4f\tPset_ElementAssemblyTypeTurnoutPanel.TrackGaugeLength\tLENGTH\t\t284\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc582baa5-48ea-407b-8021-df78e5401a6a\tPset_ElementAssemblyTypeTurnoutPanel.TurnoutCurvedRadius\tLENGTH\t\t284\t1\tIfcLengthMeasure\t1\r\nPARAM\td6fda0fe-85fa-43ff-8266-6561d11ca5e9\tPset_ElementAssemblyTypeTurnoutPanel.TurnoutHeaterType\tTEXT\t\t284\t1\tPEnum_TurnoutHeaterType\t1\r\nPARAM\tc049bf5b-26c7-4339-b290-7d7f0079dc57\tPset_ElementAssemblyTypeTurnoutPanel.TurnoutPointMachineCount\tINTEGER\t\t284\t1\tIfcCountMeasure\t1\r\nPARAM\t69e58c16-e9b8-4bcd-a440-e6c4fe5cd7f5\tPset_ElementAssemblyTypeTurnoutPanel.TypeOfCurvedTurnout\tTEXT\t\t284\t1\tPEnum_TypeOfCurvedTurnout\t1\r\nPARAM\t00b1bd1d-b264-44ae-93a2-b30418f951e6\tPset_ElementAssemblyTypeTurnoutPanel.TypeOfDrivingDevice\tTEXT\t\t284\t1\tPEnum_TypeOfDrivingDevice\t1\r\nPARAM\t7e431e75-7d3e-4976-ad12-e6ad1add3f3b\tPset_ElementAssemblyTypeTurnoutPanel.TypeOfJunction\tTEXT\t\t284\t1\tPEnum_TypeOfJunction\t1\r\nPARAM\tb9518a85-a942-4f6f-9579-cce97a27a30c\tPset_ElementAssemblyTypeTurnoutPanel.TypeOfTurnout\tTEXT\t\t284\t1\tPEnum_TypeOfTurnout\t1\r\n#\r\nGROUP\t285\tPset_ElementComponentCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf7b199ec-6918-4e05-b9a8-d4dc3a89f6d7\tPset_ElementComponentCommon.CorrosionTreatment\tTEXT\t\t285\t1\tPEnum_ElementComponentCorrosionTreatment\t1\r\nPARAM\t292f5db4-336e-4b31-9ebd-d91a1ab594ab\tPset_ElementComponentCommon.DeliveryType\tTEXT\t\t285\t1\tPEnum_ElementComponentDeliveryType\t1\r\nPARAM\t7525c67c-0faa-44ba-995f-99d07b72dd31\tPset_ElementComponentCommon.Reference\tTEXT\t\t285\t1\tIfcIdentifier\t1\r\nPARAM\t56f08e40-f4ec-4446-8b85-b83294b65e5f\tPset_ElementComponentCommon.Status\tTEXT\t\t285\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t286\tPset_ElementKinematics\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb4550f68-9345-46d2-932b-6a64dc9f9414\tPset_ElementKinematics.CyclicPath\tMULTILINETEXT\t\t286\t1\tPropertyTableValue\t1\r\nPARAM\t9a38312e-0c70-4fe1-9ce6-76b9f5998f57\tPset_ElementKinematics.CyclicRange\tNUMBER\t\t286\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t24a74947-054c-4458-ac75-245ccc7a0784\tPset_ElementKinematics.LinearPath\tMULTILINETEXT\t\t286\t1\tPropertyTableValue\t1\r\nPARAM\tf4ad9a73-7ca6-4146-8bf1-26569331de1d\tPset_ElementKinematics.LinearRange\tLENGTH\t\t286\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te9caed91-bf89-4b78-869f-c826bc7ad68e\tPset_ElementKinematics.MaximumAngularVelocity\tNUMBER\t\t286\t1\tIfcAngularVelocityMeasure\t1\r\nPARAM\t66f942d5-4134-4444-8018-d4da41e498e2\tPset_ElementKinematics.MaximumConstantSpeed\tNUMBER\t\t286\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\te75f8278-a662-4e63-bb49-349663be7252\tPset_ElementKinematics.MinimumTime\tNUMBER\t\t286\t1\tIfcTimeMeasure\t1\r\n#\r\nGROUP\t287\tPset_ElementShading\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2805d0d9-8bc0-4636-9a6e-62e22f184c9e\tPset_ElementShading.AverageSolarTransmittance\tNUMBER\t\t287\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t075b8868-aaab-44c0-8bec-e2ea4206d65a\tPset_ElementShading.AverageVisibleTransmittance\tNUMBER\t\t287\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t1f6dd7e6-7086-4cca-9184-8cc0a05aafdc\tPset_ElementShading.Azimuth\tNUMBER\t\t287\t1\tIfcPositivePlaneAngleMeasure \t1\r\nPARAM\taecbb1d0-b830-4a2d-a074-0ed749ee2222\tPset_ElementShading.Color\tTEXT\t\t287\t1\tIfcLabel\t1\r\nPARAM\t08b01627-4cfa-4ce7-b8c8-ef455494ab57\tPset_ElementShading.Inclination\tNUMBER\t\t287\t1\tIfcPositivePlaneAngleMeasure \t1\r\nPARAM\tec99155b-b09d-40f5-9194-367cf08a9d30\tPset_ElementShading.Reflectance\tNUMBER\t\t287\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tfdc121fd-14c6-4c4b-8b26-c7ffced1a7d8\tPset_ElementShading.Roughness\tLENGTH\t\t287\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\ta83b9757-eebf-4490-bdcf-59baac537a75\tPset_ElementShading.ShadingDeviceType\tTEXT\t\t287\t1\tPEnum_ElementShading\t1\r\nPARAM\t53703254-46c5-4a8c-923d-ffa1361e44e3\tPset_ElementShading.TiltRange\tMULTILINETEXT\t\t287\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t288\tPset_ElementSize\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t81fd48b7-cc88-4945-b51c-ab529b76ccb4\tPset_ElementSize.NominalHeight\tLENGTH\t\t288\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t2dae78e3-f086-43b2-a4b6-a649e8dcb396\tPset_ElementSize.NominalLength\tLENGTH\t\t288\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9ff19841-ff26-4434-835c-2ed9179f7877\tPset_ElementSize.NominalWidth\tLENGTH\t\t288\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t289\tPset_EmbeddedTrack\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tcdf8fad8-5b17-445e-936f-180066248776\tPset_EmbeddedTrack.HasDrainage\tYESNO\t\t289\t1\tIfcBoolean\t1\r\nPARAM\t2619d8db-895b-4717-b0ff-c9716383ae68\tPset_EmbeddedTrack.IsAccessibleByVehicle\tYESNO\t\t289\t1\tIfcBoolean\t1\r\nPARAM\td38c69ad-ad90-4447-90ec-0366dca24160\tPset_EmbeddedTrack.PermissibleRoadLoad\tNUMBER\t\t289\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t290\tPset_EnergyConsumptionPHistoryElectricity\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t067468c3-20c7-49f7-aeb6-dc71a8e0f049\tPset_EnergyConsumptionPHistoryElectricity.ApparentPower\tNUMBER\t\t290\t1\tIfcReal\t1\r\nPARAM\tfec1977c-aab3-4cc7-a1c7-2bb7569a64cf\tPset_EnergyConsumptionPHistoryElectricity.Current\tTEXT\t\t290\t1\tIfcLabel\t1\r\nPARAM\t982f60c2-097c-4a25-8107-e58d688dbabe\tPset_EnergyConsumptionPHistoryElectricity.PowerFactor\tNUMBER\t\t290\t1\tIfcReal\t1\r\nPARAM\t81aa7bb2-9ed5-495b-acdf-8724fd196bef\tPset_EnergyConsumptionPHistoryElectricity.ReactivePower\tNUMBER\t\t290\t1\tIfcReal\t1\r\nPARAM\t465a7311-d470-4165-8361-744d72fa638b\tPset_EnergyConsumptionPHistoryElectricity.RealPower\tNUMBER\t\t290\t1\tIfcReal\t1\r\nPARAM\te7cc58ad-a50e-4808-95d8-16889eef08dc\tPset_EnergyConsumptionPHistoryElectricity.Voltage\tTEXT\t\t290\t1\tIfcLabel\t1\r\n#\r\nGROUP\t291\tPset_EnergyConsumptionPHistoryFuel\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4519c9db-9f45-480a-8029-dac0ceae3151\tPset_EnergyConsumptionPHistoryFuel.Flowrate\tNUMBER\t\t291\t1\tIfcReal\t1\r\nPARAM\t95f29a12-e180-4a5a-a114-01781d7666af\tPset_EnergyConsumptionPHistoryFuel.Pressure\tNUMBER\t\t291\t1\tIfcReal\t1\r\nPARAM\tb61196e9-bbe5-484c-b42f-07863f9bafe6\tPset_EnergyConsumptionPHistoryFuel.Temperature\tNUMBER\t\t291\t1\tIfcReal\t1\r\n#\r\nGROUP\t292\tPset_EnergyConsumptionPHistorySteam\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tfbd1d549-8dba-45b0-904b-8343e094c16f\tPset_EnergyConsumptionPHistorySteam.Flowrate\tNUMBER\t\t292\t1\tIfcReal\t1\r\nPARAM\t255cddc1-3752-4514-9d0e-b70f2048681d\tPset_EnergyConsumptionPHistorySteam.Pressure\tNUMBER\t\t292\t1\tIfcReal\t1\r\nPARAM\td5d55788-b9d1-4b0a-b1fe-5aa92f005a1b\tPset_EnergyConsumptionPHistorySteam.Quality\tTEXT\t\t292\t1\tIfcLabel\t1\r\nPARAM\tdff997f9-f335-4acf-84a6-e0ba64c7852b\tPset_EnergyConsumptionPHistorySteam.Temperature\tNUMBER\t\t292\t1\tIfcReal\t1\r\n#\r\nGROUP\t293\tPset_EnergyConversionDeviceCoil\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t99a2dbcf-e59c-434c-809a-8ea14bf6f715\tPset_EnergyConversionDeviceCoil.HasSoundAttentuation\tYESNO\t\t293\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t294\tPset_EnergyConversionDeviceSpaceHeaterPanel\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te9c531d5-a6a0-45e0-aa7d-a37b9a874c6e\tPset_EnergyConversionDeviceSpaceHeaterPanel.NumberOfPanels\tINTEGER\t\t294\t1\tIfcInteger\t1\r\n#\r\nGROUP\t295\tPset_EnergyConversionDeviceSpaceHeaterSectional\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tce2794f5-9e04-40f4-9b81-6dd86b1327d1\tPset_EnergyConversionDeviceSpaceHeaterSectional.NumberOfSections\tINTEGER\t\t295\t1\tIfcInteger\t1\r\n#\r\nGROUP\t296\tPset_EnergyRequirements\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t324a20ba-6b67-4a79-b142-769d98992842\tPset_EnergyRequirements.EnergyConsumption\tNUMBER\t\t296\t1\tIfcEnergyMeasure\t1\r\nPARAM\t6cfe568b-1703-4c7b-84c7-488566d27ba3\tPset_EnergyRequirements.EnergyConversionEfficiency\tNUMBER\t\t296\t1\tIfcRatioMeasure\t1\r\nPARAM\t8d3d6aca-fd4b-44fb-9fbc-3afdade0e919\tPset_EnergyRequirements.EnergySourceLabel\tTEXT\t\t296\t1\tIfcLabel\t1\r\nPARAM\ta1b61839-87a1-4b6f-93c9-aaba3ebbc619\tPset_EnergyRequirements.PowerDemand\tNUMBER\t\t296\t1\tIfcPowerMeasure\t1\r\n#\r\nGROUP\t297\tPset_EngineTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5fa01900-d1e1-11e1-8000-00215ad4efdf\tPset_EngineTypeCommon.EnergySource\tTEXT\t\t297\t1\tPEnum_EngineEnergySource\t1\r\nPARAM\t49925880-d1e1-11e1-8000-00215ad4efdf\tPset_EngineTypeCommon.Reference\tTEXT\t\t297\t1\tIfcIdentifier\t1\r\nPARAM\t4f883980-d1e1-11e1-8000-00215ad4efdf\tPset_EngineTypeCommon.Status\tTEXT\t\t297\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t298\tPset_EnvironmentalCondition\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tdba4be13-8f32-4cf2-b31b-f3b72ebf23c7\tPset_EnvironmentalCondition.MaximumAtmosphericPressure\tNUMBER\t\t298\t1\tIfcPressureMeasure\t1\r\nPARAM\t53ac7f06-1cd8-4fea-92be-6192bf4abe4a\tPset_EnvironmentalCondition.MaximumRainIntensity\tNUMBER\t\t298\t1\tIfcReal\t1\r\nPARAM\te94c4fe3-2481-4acb-abd6-a36d60e29655\tPset_EnvironmentalCondition.MaximumSolarRadiation\tNUMBER\t\t298\t1\tIfcReal\t1\r\nPARAM\t504b5705-4679-4973-8951-f9d6a7605256\tPset_EnvironmentalCondition.MaximumWindSpeed\tNUMBER\t\t298\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\t86872acd-33e7-4b49-a464-2f2e07ae2f92\tPset_EnvironmentalCondition.OperationalTemperatureRange\tMULTILINETEXT\t\t298\t1\tPropertyBoundedValue\t1\r\nPARAM\t1d9634fa-6a1c-43dc-9ec4-366a2ea4adb6\tPset_EnvironmentalCondition.ReferenceAirRelativeHumidity\tMULTILINETEXT\t\t298\t1\tPropertyBoundedValue\t1\r\nPARAM\t20c2d5d0-3f3c-4a7c-a8a4-2c4c3cb90736\tPset_EnvironmentalCondition.ReferenceEnvironmentTemperature\tMULTILINETEXT\t\t298\t1\tPropertyBoundedValue\t1\r\nPARAM\tcd12a88f-7e7d-4f5c-b488-b9b42efcce71\tPset_EnvironmentalCondition.SaltMistLevel\tTEXT\t\t298\t1\tIfcLabel\t1\r\nPARAM\t8a4fa4ce-0294-4ebd-899f-e74d19d63f4a\tPset_EnvironmentalCondition.SeismicResistance\tNUMBER\t\t298\t1\tIfcReal\t1\r\nPARAM\t5c4117bb-9539-4da4-abbb-43642a0f0600\tPset_EnvironmentalCondition.SmokeLevel\tTEXT\t\t298\t1\tIfcLabel\t1\r\nPARAM\tfb15d892-9387-4ece-bd9e-c5ccfda66a4c\tPset_EnvironmentalCondition.StorageTemperatureRange\tMULTILINETEXT\t\t298\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t299\tPset_EnvironmentalEmissions\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t6b1bad58-59b5-4173-903d-4ed5e7fdfe7c\tPset_EnvironmentalEmissions.CarbonDioxideEmissions\tNUMBER\t\t299\t1\tIfcMassFlowRateMeasure\t1\r\nPARAM\td2f7b709-c58c-4019-aa14-bd5793f30c47\tPset_EnvironmentalEmissions.NitrogenOxidesEmissions\tNUMBER\t\t299\t1\tIfcMassFlowRateMeasure\t1\r\nPARAM\t88d8e342-1407-4d1e-96b6-13fe38b9b11d\tPset_EnvironmentalEmissions.NoiseEmissions\tNUMBER\t\t299\t1\tIfcSoundPowerLevelMeasure\t1\r\nPARAM\tcf50e12f-ad4d-457b-bee8-4990e9cf5b28\tPset_EnvironmentalEmissions.ParticulateMatterEmissions\tNUMBER\t\t299\t1\tIfcMassFlowRateMeasure\t1\r\nPARAM\t04b7a72a-f2df-4ce7-870f-a2d02453284a\tPset_EnvironmentalEmissions.SulphurDioxideEmissions\tNUMBER\t\t299\t1\tIfcMassFlowRateMeasure\t1\r\n#\r\nGROUP\t300\tPset_EnvironmentalImpactIndicators\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc9202780-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.AtmosphericAcidificationPerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\r\nPARAM\tc32a4680-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.ClimateChangePerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\r\nPARAM\tf79e0280-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.EutrophicationPerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\r\nPARAM\ta7bf3b80-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.ExpectedServiceLife\tNUMBER\t\t300\t1\tIfcTimeMeasure\t1\r\nPARAM\t88281300-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.FunctionalUnitReference\tTEXT\t\t300\t1\tIfcLabel\t1\r\nPARAM\tb9084800-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.HazardousWastePerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\r\nPARAM\taa320509-358c-40ae-83ac-744f8eeb0122\tPset_EnvironmentalImpactIndicators.IndicatorsUnit\tTEXT\t\t300\t1\tIfcText\t1\r\nPARAM\te0f7ab80-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.InertWastePerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\r\nPARAM\t96762f00-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.LifeCyclePhase\tTEXT\t\t300\t1\tPEnum_LifeCyclePhase\t1\r\nPARAM\tbe659280-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.NonHazardousWastePerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\r\nPARAM\td50be980-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.NonRenewableEnergyConsumptionPerUnit\tNUMBER\t\t300\t1\tIfcEnergyMeasure\t1\r\nPARAM\tf2d94e80-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.PhotochemicalOzoneFormationPerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\r\nPARAM\te6ed8c80-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.RadioactiveWastePerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\r\nPARAM\t82323200-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.Reference\tTEXT\t\t300\t1\tIfcIdentifier\t1\r\nPARAM\tcf160880-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.RenewableEnergyConsumptionPerUnit\tNUMBER\t\t300\t1\tIfcEnergyMeasure\t1\r\nPARAM\tdb01ca80-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.ResourceDepletionPerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\r\nPARAM\tec4ad700-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.StratosphericOzoneLayerDestructionPerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\r\nPARAM\tadb51c80-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.TotalPrimaryEnergyConsumptionPerUnit\tNUMBER\t\t300\t1\tIfcEnergyMeasure\t1\r\nPARAM\t8f4f2100-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.Unit\tTEXT\t\t300\t1\tIfcText\t1\r\nPARAM\tb3126700-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.WaterConsumptionPerUnit\tVOLUME\t\t300\t1\tIfcVolumeMeasure\t1\r\n#\r\nGROUP\t301\tPset_EnvironmentalImpactValues\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1f8d6600-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.AtmosphericAcidification\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\r\nPARAM\t1a301b80-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.ClimateChange\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\r\nPARAM\tb5b49d20-0bf2-49a4-9d55-8cef7acb75bd\tPset_EnvironmentalImpactValues.Duration\tTEXT\t\t301\t1\tIfcDuration\t1\r\nPARAM\t4cda1400-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.Eutrophication\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\r\nPARAM\t0f758680-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.HazardousWaste\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\r\nPARAM\t359b2680-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.InertWaste\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\r\nPARAM\tb8fbc6f7-870b-486e-80cd-661b9dd0c27c\tPset_EnvironmentalImpactValues.LeadInTime\tTEXT\t\t301\t1\tIfcDuration\t1\r\nPARAM\t88eae355-e7df-464a-849b-e613af48fa32\tPset_EnvironmentalImpactValues.LeadOutTime\tTEXT\t\t301\t1\tIfcDuration\t1\r\nPARAM\t14d2d100-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.NonHazardousWaste\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\r\nPARAM\t2ae09180-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.NonRenewableEnergyConsumption\tNUMBER\t\t301\t1\tIfcEnergyMeasure\t1\r\nPARAM\t46e43300-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.PhotochemicalOzoneFormation\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\r\nPARAM\t3b910780-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.RadioactiveWaste\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\r\nPARAM\t25834700-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.RenewableEnergyConsumption\tNUMBER\t\t301\t1\tIfcEnergyMeasure\t1\r\nPARAM\t303ddc00-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.ResourceDepletion\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\r\nPARAM\t40ee5200-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.StratosphericOzoneLayerDestruction\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\r\nPARAM\t04225b00-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.TotalPrimaryEnergyConsumption\tNUMBER\t\t301\t1\tIfcEnergyMeasure\t1\r\nPARAM\t097fa580-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.WaterConsumption\tVOLUME\t\t301\t1\tIfcVolumeMeasure\t1\r\n#\r\nGROUP\t302\tPset_EvaporativeCoolerPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t6c8b82e4-9256-47f3-ab8e-66344426eb6b\tPset_EvaporativeCoolerPHistory.AirPressureDropCurve\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\r\nPARAM\t5c595d00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerPHistory.Effectiveness\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\r\nPARAM\tfedf87c7-e123-40fb-8d18-2fb11e1e2fed\tPset_EvaporativeCoolerPHistory.EffectivenessTable\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\r\nPARAM\t62e7d480-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerPHistory.LatentHeatTransferRate\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\r\nPARAM\t5f544d80-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerPHistory.SensibleHeatTransferRate\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\r\nPARAM\t65e2c500-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerPHistory.TotalHeatTransferRate\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\r\nPARAM\t07d099d9-c7d4-4e14-b1ca-f4e32394201b\tPset_EvaporativeCoolerPHistory.WaterPressDropCurve\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\r\nPARAM\t582d3f80-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerPHistory.WaterSumpTemperature\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t303\tPset_EvaporativeCoolerTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb1956e80-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.AirPressureDropCurve\tMULTILINETEXT\t\t303\t1\tPropertyTableValue\t1\r\nPARAM\ta7737000-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.EffectivenessTable\tMULTILINETEXT\t\t303\t1\tPropertyTableValue\t1\r\nPARAM\t86128400-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.FlowArrangement\tTEXT\t\t303\t1\tPEnum_EvaporativeCoolerFlowArrangement\t1\r\nPARAM\t93c80980-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.HeatExchangeArea\tAREA\t\t303\t1\tIfcAreaMeasure\t1\r\nPARAM\t4c70ed76-185d-48cb-b1bf-4f83ce537737\tPset_EvaporativeCoolerTypeCommon.HeatExchangerMediaMaterials\tMULTILINETEXT\t\t303\t1\tIfcMaterial\t1\r\nPARAM\t99255400-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.OperationTemperatureRange\tMULTILINETEXT\t\t303\t1\tPropertyBoundedValue\t1\r\nPARAM\t7004c380-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.Reference\tTEXT\t\t303\t1\tIfcIdentifier\t1\r\nPARAM\t76933b00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.Status\tTEXT\t\t303\t1\tPEnum_ElementStatus\t1\r\nPARAM\tbce89a00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.WaterPressDropCurve\tMULTILINETEXT\t\t303\t1\tPropertyTableValue\t1\r\nPARAM\ta2162580-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.WaterRequirement\tNUMBER\t\t303\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\tdcf75b89-fea2-48dc-a622-d0e09da3432a\tPset_EvaporativeCoolerTypeCommon.Weight\tNUMBER\t\t303\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t304\tPset_EvaporatorPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\teef9fc00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.CompressorEvaporatorHeatGain\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\r\nPARAM\tf3beb000-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.CompressorEvaporatorPressureDrop\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\r\nPARAM\tdbe72c00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.EvaporatingTemperature\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\r\nPARAM\tf8836400-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.EvaporatorMeanVoidFraction\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\r\nPARAM\td12c9700-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.ExteriorHeatTransferCoefficient\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\r\nPARAM\tce31a680-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.HeatRejectionRate\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\r\nPARAM\td4c01e00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.InteriorHeatTransferCoefficient\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\r\nPARAM\tdee21c80-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.LogarithmicMeanTemperatureDifference\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\r\nPARAM\td8ec3b80-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.RefrigerantFoulingResistance\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\r\nPARAM\t4af9c013-026b-433e-b09c-24c8f14ac818\tPset_EvaporatorPHistory.RefrigrerantFoulingResistance\tNUMBER\t\t304\t1\tIfcReal\t1\r\nPARAM\te1dd0d00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.UAcurves\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\r\nPARAM\tfc16eb00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.WaterFoulingResistance\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t305\tPset_EvaporatorTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t28cb0280-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.EvaporatorCoolant\tTEXT\t\t305\t1\tPEnum_EvaporatorCoolant\t1\r\nPARAM\t1bae1380-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.EvaporatorMediumType\tTEXT\t\t305\t1\tPEnum_EvaporatorMediumType\t1\r\nPARAM\t5021cf80-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.ExternalSurfaceArea\tAREA\t\t305\t1\tIfcAreaMeasure\t1\r\nPARAM\t5c0d9180-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.InternalRefrigerantVolume\tVOLUME\t\t305\t1\tIfcVolumeMeasure\t1\r\nPARAM\t56b04700-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.InternalSurfaceArea\tAREA\t\t305\t1\tIfcAreaMeasure\t1\r\nPARAM\t616adc00-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.InternalWaterVolume\tVOLUME\t\t305\t1\tIfcVolumeMeasure\t1\r\nPARAM\t6760bd00-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.NominalHeatTransferArea\tAREA\t\t305\t1\tIfcAreaMeasure\t1\r\nPARAM\t6d569e00-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.NominalHeatTransferCoefficient\tNUMBER\t\t305\t1\tIfcThermalTransmittanceMeasure\t1\r\nPARAM\t05a05300-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.Reference\tTEXT\t\t305\t1\tIfcIdentifier\t1\r\nPARAM\t397b7880-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.RefrigerantClass\tTEXT\t\t305\t1\tPEnum_RefrigerantClass\t1\r\nPARAM\t76f73890-9496-4f19-9f1c-1604277fd98e\tPset_EvaporatorTypeCommon.RefrigerantType\tMULTILINETEXT\t\t305\t1\tIfcMaterial\t1\r\nPARAM\t0c2eca80-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.Status\tTEXT\t\t305\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t306\tPset_FanCentrifugal\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta262f080-d1e3-11e1-8000-00215ad4efdf\tPset_FanCentrifugal.Arrangement\tTEXT\t\t306\t1\tPEnum_CentrifugalFanArrangement\t1\r\nPARAM\t94ad6b00-d1e3-11e1-8000-00215ad4efdf\tPset_FanCentrifugal.DirectionOfRotation\tTEXT\t\t306\t1\tPEnum_CentrifugalFanRotation\t1\r\nPARAM\t7cd5e700-d1e3-11e1-8000-00215ad4efdf\tPset_FanCentrifugal.DischargePosition\tTEXT\t\t306\t1\tPEnum_CentrifugalFanDischargePosition\t1\r\nPARAM\t59725f33-ca2c-47fe-bb41-37041e4cba8a\tPset_FanCentrifugal.FanArrangement\tTEXT\t\t306\t1\tPEnum_CentrifugalFanArrangement\t1\r\n#\r\nGROUP\t307\tPset_FanOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tcfaf9e80-d1e3-11e1-8000-00215ad4efdf\tPset_FanOccurrence.ApplicationOfFan\tTEXT\t\t307\t1\tPEnum_FanApplicationType\t1\r\nPARAM\te0601480-d1e3-11e1-8000-00215ad4efdf\tPset_FanOccurrence.CoilPosition\tTEXT\t\t307\t1\tPEnum_FanCoilPosition\t1\r\nPARAM\tbeff2880-d1e3-11e1-8000-00215ad4efdf\tPset_FanOccurrence.DischargeType\tTEXT\t\t307\t1\tPEnum_FanDischargeType\t1\r\nPARAM\tfa015c00-d1e3-11e1-8000-00215ad4efdf\tPset_FanOccurrence.FanMountingType\tTEXT\t\t307\t1\tPEnum_FanMountingType\t1\r\nPARAM\t0d142c00-d1e4-11e1-8000-00215ad4efdf\tPset_FanOccurrence.FractionOfMotorHeatToAirStream\tNUMBER\t\t307\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t12717680-d1e4-11e1-8000-00215ad4efdf\tPset_FanOccurrence.ImpellerDiameter\tLENGTH\t\t307\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tece46d00-d1e3-11e1-8000-00215ad4efdf\tPset_FanOccurrence.MotorPosition\tTEXT\t\t307\t1\tPEnum_FanMotorPosition\t1\r\n#\r\nGROUP\t308\tPset_FanPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t36cd5300-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.DischargePressureLoss\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\r\nPARAM\t33d26280-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.DischargeVelocity\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\r\nPARAM\t3a60da00-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.DrivePowerLoss\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\r\nPARAM\t47af418e-4ddc-4150-b52e-90d66bc334f5\tPset_FanPHistory.EfficiencyCurve\tMULTILINETEXT\t\t308\t1\tPropertyTableValue\t1\r\nPARAM\t26b57380-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.FanEfficiency\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\r\nPARAM\t2cab5480-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.FanPowerRate\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\r\nPARAM\t2026fc00-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.FanRotationSpeed\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\r\nPARAM\t29b06400-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.OverallEfficiency\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\r\nPARAM\td4c7198a-18b1-455e-a335-b495456a4c65\tPset_FanPHistory.PressureCurve\tMULTILINETEXT\t\t308\t1\tPropertyTableValue\t1\r\nPARAM\t303edb80-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.ShaftPowerRate\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\r\nPARAM\t23ba8300-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.WheelTipSpeed\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t309\tPset_FanTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t6a0fe200-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.CapacityControlType\tTEXT\t\t309\t1\tPEnum_FanCapacityControlType\t1\r\nPARAM\tb22f0480-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.EfficiencyCurve\tMULTILINETEXT\t\t309\t1\tPropertyTableValue\t1\r\nPARAM\te63d1f5f-8474-4433-bdb2-279c5f079be3\tPset_FanTypeCommon.HousingMaterial\tMULTILINETEXT\t\t309\t1\tIfcMaterial\t1\r\nPARAM\t5b292f80-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.MotorDriveType\tTEXT\t\t309\t1\tPEnum_FanMotorConnectionType\t1\r\nPARAM\t83189300-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.NominalAirFlowRate\tNUMBER\t\t309\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t9b88ad80-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.NominalPowerRate\tNUMBER\t\t309\t1\tIfcPowerMeasure\t1\r\nPARAM\t96c3f980-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.NominalRotationSpeed\tNUMBER\t\t309\t1\tIfcRotationalFrequencyMeasure\t1\r\nPARAM\t90ce1880-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.NominalStaticPressure\tNUMBER\t\t309\t1\tIfcPressureMeasure\t1\r\nPARAM\t890e7400-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.NominalTotalPressure\tNUMBER\t\t309\t1\tIfcPressureMeasure\t1\r\nPARAM\ta0e5f800-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.OperationalCriteria\tNUMBER\t\t309\t1\tIfcTimeMeasure\t1\r\nPARAM\t7ac05800-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.OperationTemperatureRange\tMULTILINETEXT\t\t309\t1\tPropertyBoundedValue\t1\r\nPARAM\ta6dbd900-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.PressureCurve\tMULTILINETEXT\t\t309\t1\tPropertyTableValue\t1\r\nPARAM\t43ea4200-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.Reference\tTEXT\t\t309\t1\tIfcIdentifier\t1\r\nPARAM\t4b115000-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.Status\tTEXT\t\t309\t1\tPEnum_ElementStatus\t1\r\nPARAM\t378a418a-fe3f-43ba-93af-07afe7d7a859\tPset_FanTypeCommon.Weight\tNUMBER\t\t309\t1\tIfcMassMeasure\t1\r\nPARAM\tb2d8bc12-2466-4551-82e3-83934d9bdeec\tPset_FanTypeCommon.WheelMaterial\tMULTILINETEXT\t\t309\t1\tIfcMaterial\t1\r\n#\r\nGROUP\t310\tPset_FanTypeSmokeControl\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t01faa1f3-9c12-4282-829a-b6bcaa3bbc19\tPset_FanTypeSmokeControl.MaximumDesignTemperature\tNUMBER\t\t310\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\ta31d008c-8f14-4446-a306-b928e206ee10\tPset_FanTypeSmokeControl.OperationalCriteria\tNUMBER\t\t310\t1\tIfcTimeMeasure\t1\r\nPARAM\t5b508557-d008-4040-8275-8e4a58fb4093\tPset_FanTypeSmokeControl.SmokeControlFlowrate\tNUMBER\t\t310\t1\tIfcVolumetricFlowRateMeasure\t1\r\n#\r\nGROUP\t311\tPset_FastenerRailWeld\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5a1840db-8d01-4715-a4d4-9fa3c30e8e25\tPset_FastenerRailWeld.AssemblyPlace\tTEXT\t\t311\t1\tPEnum_AssemblyPlace\t1\r\nPARAM\tbb144407-1d9e-4f99-8713-32b30b9df053\tPset_FastenerRailWeld.IsLiftingBracket\tYESNO\t\t311\t1\tIfcBoolean\t1\r\nPARAM\t47af7706-bccd-4c02-ab85-2898930a98b9\tPset_FastenerRailWeld.JointRelativePosition\tTEXT\t\t311\t1\tPEnum_RelativePosition\t1\r\nPARAM\t91055e8f-e0f2-4065-9923-96e154ba899c\tPset_FastenerRailWeld.TemperatureDuringInstallation\tNUMBER\t\t311\t1\tIfcThermodynamicTemperatureMeasure\t1\r\n#\r\nGROUP\t312\tPset_FastenerWeld\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\teacede00-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.a\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf3271900-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.c\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf9b59080-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.d\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf96e603b-52f3-4597-9f32-21154b8597b8\tPset_FastenerWeld.DeepPenetrationThroatThickness\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t00dc9e80-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.e\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t21a4f400-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Intermittent\tYESNO\t\t312\t1\tIfcBoolean\t1\r\nPARAM\t076b1600-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.l\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t0e922400-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.n\tINTEGER\t\t312\t1\tIfcCountMeasure\t1\r\nPARAM\t8edd5eef-a911-46d3-b2b9-cc6d0e08ee84\tPset_FastenerWeld.NominalThroatThickness\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t50446966-6aa0-4ebf-aec8-6b3cc3a9483c\tPset_FastenerWeld.NumberOfWeldElements\tINTEGER\t\t312\t1\tIfcCountMeasure\t1\r\nPARAM\tdf7bb280-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Process\tINTEGER\t\t312\t1\tIfcInteger\t1\r\nPARAM\te4d8fd00-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.ProcessName\tTEXT\t\t312\t1\tIfcLabel\t1\r\nPARAM\t1356d800-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.s\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t28336b80-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Staggered\tYESNO\t\t312\t1\tIfcBoolean\t1\r\nPARAM\td25ec380-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Surface1\tTEXT\t\t312\t1\tIfcLabel\t1\r\nPARAM\td854a480-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Surface2\tTEXT\t\t312\t1\tIfcLabel\t1\r\nPARAM\tc541d480-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Type1\tTEXT\t\t312\t1\tIfcLabel\t1\r\nPARAM\tcc68e280-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Type2\tTEXT\t\t312\t1\tIfcLabel\t1\r\nPARAM\tbe86ffa5-619e-444a-8d47-213b31f9b51f\tPset_FastenerWeld.WeldDiameter\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf37bab1d-52c5-4f9d-aa0d-c91c9cc40618\tPset_FastenerWeld.WeldElementLength\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\ta1e159a0-9908-4716-a6b9-be11b984e478\tPset_FastenerWeld.WeldElementSpacing\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\ta88a619d-268d-4868-9a22-bbedbfe1c6b9\tPset_FastenerWeld.WeldLegLength\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tdfbc7973-6b32-4ee2-a7c0-962663982e08\tPset_FastenerWeld.WeldWidth\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t1a7de600-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.z\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t313\tPset_FenderCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbea1cb34-2c8a-4f8a-95ad-366d069cf241\tPset_FenderCommon.CoefficientOfFriction\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\ta30a110c-4ab9-4d96-802e-b37f825c0460\tPset_FenderCommon.EnergyAbsorption\tNUMBER\t\t313\t1\tIfcEnergyMeasure\t1\r\nPARAM\t7b0b17dd-5a5c-474a-a77d-02e06dcaea5f\tPset_FenderCommon.EnergyAbsorptionTolerance\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tc6e27602-48f9-497b-95a0-8ae30fd86c2d\tPset_FenderCommon.FenderType\tTEXT\t\t313\t1\tPEnum_FenderType\t1\r\nPARAM\t98e84b16-79af-4b0b-a18a-8a57f755f9a3\tPset_FenderCommon.MaximumTemperatureFactor\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t88bfd9f1-d3ae-4d10-b2f5-3747b8a248bc\tPset_FenderCommon.MaxReaction\tNUMBER\t\t313\t1\tIfcForceMeasure\t1\r\nPARAM\t44fd1407-6bcb-4c8a-b61e-9e7613e909df\tPset_FenderCommon.MaxReactionTolerance\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t8d1d392e-435c-4975-b58b-63df1aac8ce6\tPset_FenderCommon.MinimumTemperatureFactor\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tbebca621-e57c-48fc-896f-3eeaed7c13f2\tPset_FenderCommon.VelocityFactorEnergy\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t9e5f5394-521b-4f02-8281-6d1642dae50e\tPset_FenderCommon.VelocityFactorReaction\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\r\n#\r\nGROUP\t314\tPset_FenderDesignCriteria\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0bc1b254-8933-49a5-b576-aa22fc03cd88\tPset_FenderDesignCriteria.AddedMassCoefficientMethod\tTEXT\t\t314\t1\tPEnum_AddedMassCoefficientMethod\t1\r\nPARAM\tea54c993-0f31-44bf-bba0-6511954dc4b8\tPset_FenderDesignCriteria.CoefficientOfFriction\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t42f97396-f6f3-422a-8e9d-e9f4ca7a4d09\tPset_FenderDesignCriteria.EnergyAbsorption\tNUMBER\t\t314\t1\tIfcEnergyMeasure\t1\r\nPARAM\taf643b79-efd4-436b-8b19-a8e8c662c051\tPset_FenderDesignCriteria.EnergyAbsorptionTolerance\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t0fcd1eee-4e12-4925-8460-02eada2c3ed5\tPset_FenderDesignCriteria.MaximumTemperatureFactor\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t6b3d7090-bdd9-46a7-8afa-99f7d5de1bf7\tPset_FenderDesignCriteria.MaxReaction\tNUMBER\t\t314\t1\tIfcForceMeasure\t1\r\nPARAM\t0067495b-6131-4e68-8b45-77f04120d550\tPset_FenderDesignCriteria.MaxReactionTolerance\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tf3f203df-bce5-49b3-a5d0-dd0985974a21\tPset_FenderDesignCriteria.MinCompressedFenderHeight\tLENGTH\t\t314\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tcdcb62ce-4e0c-4a2a-8198-59da5d12e7fa\tPset_FenderDesignCriteria.MinimumTemperatureFactor\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t1076a3ea-2681-4683-abd3-019023df74ef\tPset_FenderDesignCriteria.VelocityFactorEnergy\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t86c3b411-3a64-48e8-8af8-feba08fe7fea\tPset_FenderDesignCriteria.VelocityFactorReaction\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\r\n#\r\nGROUP\t315\tPset_FilterPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t35505a80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterPHistory.CountedEfficiency\tMULTILINETEXT\t\t315\t1\tIfcTimeSeries\t1\r\nPARAM\t3c776880-d1e5-11e1-8000-00215ad4efdf\tPset_FilterPHistory.ParticleMassHolding\tMULTILINETEXT\t\t315\t1\tIfcTimeSeries\t1\r\nPARAM\t397c7800-d1e5-11e1-8000-00215ad4efdf\tPset_FilterPHistory.WeightedEfficiency\tMULTILINETEXT\t\t315\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t316\tPset_FilterTypeAirParticleFilter\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4731fd80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.AirParticleFilterType\tTEXT\t\t316\t1\tPEnum_FilterAirParticleFilterType\t1\r\nPARAM\t9a0bb500-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.CountedEfficiencyCurve\tMULTILINETEXT\t\t316\t1\tPropertyTableValue\t1\r\nPARAM\t747eab80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.DustHoldingCapacity\tNUMBER\t\t316\t1\tIfcMassMeasure\t1\r\nPARAM\t79435f80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.FaceSurfaceArea\tAREA\t\t316\t1\tIfcAreaMeasure\t1\r\nPARAM\t63359f00-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.FrameMaterial\tMULTILINETEXT\t\t316\t1\tIfcMaterialDefinition\t1\r\nPARAM\t7fd1d700-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.MediaExtendedArea\tAREA\t\t316\t1\tIfcAreaMeasure\t1\r\nPARAM\td87df833-d4df-4201-9205-e0cb35d80173\tPset_FilterTypeAirParticleFilter.MediaMaterial\tMULTILINETEXT\t\t316\t1\tIfcMaterial\t1\r\nPARAM\t852f2180-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.NominalCountedEfficiency\tNUMBER\t\t316\t1\tIfcReal\t1\r\nPARAM\t8a8c6c00-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.NominalWeightedEfficiency\tNUMBER\t\t316\t1\tIfcReal\t1\r\nPARAM\t8fe9b680-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.PressureDropCurve\tMULTILINETEXT\t\t316\t1\tPropertyTableValue\t1\r\nPARAM\t66308f80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.SeparationType\tTEXT\t\t316\t1\tPEnum_FilterAirParticleFilterSeparationType\t1\r\nPARAM\ta5f77700-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.WeightedEfficiencyCurve\tMULTILINETEXT\t\t316\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t317\tPset_FilterTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td808d900-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.FinalResistance\tNUMBER\t\t317\t1\tIfcPressureMeasure\t1\r\nPARAM\te3f49b00-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.FlowRateRange\tMULTILINETEXT\t\t317\t1\tPropertyBoundedValue\t1\r\nPARAM\td212f800-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.InitialResistance\tNUMBER\t\t317\t1\tIfcPressureMeasure\t1\r\nPARAM\t2d8fa950-b4da-42a6-b8b4-09245e38cabf\tPset_FilterTypeCommon.MediaMaterial\tMULTILINETEXT\t\t317\t1\tIfcMaterial\t1\r\nPARAM\tea831280-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.NominalFilterFaceVelocity\tNUMBER\t\t317\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\tf8389800-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.NominalFlowrate\tNUMBER\t\t317\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\teeaf3000-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.NominalMediaSurfaceVelocity\tNUMBER\t\t317\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\tfd95e280-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.NominalParticleGeometricMeanDiameter\tLENGTH\t\t317\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t02f32d00-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.NominalParticleGeometricStandardDeviation\tNUMBER\t\t317\t1\tIfcReal\t1\r\nPARAM\tf2db4d80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.NominalPressureDrop\tNUMBER\t\t317\t1\tIfcPressureMeasure\t1\r\nPARAM\tdd662380-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.OperationTemperatureRange\tMULTILINETEXT\t\t317\t1\tPropertyBoundedValue\t1\r\nPARAM\tb60f5680-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.Reference\tTEXT\t\t317\t1\tIfcIdentifier\t1\r\nPARAM\tbb6ca100-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.Status\tTEXT\t\t317\t1\tPEnum_ElementStatus\t1\r\nPARAM\tccb5ad80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.Weight\tNUMBER\t\t317\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t318\tPset_FilterTypeCompressedAirFilter\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t25854600-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeCompressedAirFilter.AutomaticCondensateDischarge\tYESNO\t\t318\t1\tIfcBoolean\t1\r\nPARAM\t2ae29080-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeCompressedAirFilter.CloggingIndicator\tYESNO\t\t318\t1\tIfcBoolean\t1\r\nPARAM\t0c7c9500-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeCompressedAirFilter.CompressedAirFilterType\tTEXT\t\t318\t1\tPEnum_CompressedAirFilterType\t1\r\nPARAM\t17cfc080-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeCompressedAirFilter.OperationPressureMax\tNUMBER\t\t318\t1\tIfcPressureMeasure\t1\r\nPARAM\t1bfbde00-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeCompressedAirFilter.ParticleAbsorptionCurve\tMULTILINETEXT\t\t318\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t319\tPset_FilterTypeWaterFilter\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t35048f00-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeWaterFilter.WaterFilterType\tTEXT\t\t319\t1\tPEnum_FilterWaterFilterType\t1\r\n#\r\nGROUP\t320\tPset_FireRatingProperties\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf61421bd-e86a-4858-9740-b270db3253a2\tPset_FireRatingProperties.FireResistanceRating\tTEXT\t\t320\t1\tIfcLabel\t1\r\nPARAM\t3c5f0105-5863-426c-9fa8-a13f872d2c7d\tPset_FireRatingProperties.IsCombustible\tYESNO\t\t320\t1\tIfcBoolean\t1\r\nPARAM\t3dfc6063-3fa3-45a6-ad59-9c39cda570f5\tPset_FireRatingProperties.SurfaceSpreadOfFlame\tTEXT\t\t320\t1\tIfcLabel\t1\r\n#\r\nGROUP\t321\tPset_FireSuppressionTerminalTypeBreechingInlet\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t49488c00-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeBreechingInlet.BreechingInletType\tTEXT\t\t321\t1\tPEnum_BreechingInletType\t1\r\nPARAM\t5ebdb600-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeBreechingInlet.CouplingType\tTEXT\t\t321\t1\tPEnum_BreechingInletCouplingType\t1\r\nPARAM\t6a10e180-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeBreechingInlet.HasCaps\tYESNO\t\t321\t1\tIfcBoolean\t1\r\nPARAM\t54032100-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeBreechingInlet.InletDiameter\tLENGTH\t\t321\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t239e763a-5d2c-4f78-993c-ca3572671447\tPset_FireSuppressionTerminalTypeBreechingInlet.Material\tMULTILINETEXT\t\t321\t1\tIfcMaterial\t1\r\nPARAM\t59606b80-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeBreechingInlet.OutletDiameter\tLENGTH\t\t321\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t322\tPset_FireSuppressionTerminalTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t739a4980-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeCommon.Reference\tTEXT\t\t322\t1\tIfcIdentifier\t1\r\nPARAM\t785efd80-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeCommon.Status\tTEXT\t\t322\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t323\tPset_FireSuppressionTerminalTypeFireHydrant\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbbb96c00-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.BodyColor\tTEXT\t\t323\t1\tIfcText\t1\r\nPARAM\t79ccd52e-6b7f-4e17-aa5a-370ad0297725\tPset_FireSuppressionTerminalTypeFireHydrant.BodyColour\tTEXT\t\t323\t1\tIfcText\t1\r\nPARAM\tc07e2000-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.CapColor\tTEXT\t\t323\t1\tIfcText\t1\r\nPARAM\t91e09372-dcf0-418f-8e76-f71899417276\tPset_FireSuppressionTerminalTypeFireHydrant.CapColour\tTEXT\t\t323\t1\tIfcText\t1\r\nPARAM\ta5abab80-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.DischargeFlowRate\tNUMBER\t\t323\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t8a40a080-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.FireHydrantType\tTEXT\t\t323\t1\tPEnum_FireHydrantType\t1\r\nPARAM\taa705f80-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.FlowClass\tTEXT\t\t323\t1\tIfcLabel\t1\r\nPARAM\t9fb5ca80-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.HoseConnectionSize\tLENGTH\t\t323\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9af11680-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.NumberOfHoseConnections\tINTEGER\t\t323\t1\tIfcCountMeasure\t1\r\nPARAM\tb65c2180-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.PressureRating\tNUMBER\t\t323\t1\tIfcPressureMeasure\t1\r\nPARAM\t94629f00-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.PumperConnectionSize\tLENGTH\t\t323\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb0fed700-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.WaterIsPotable\tYESNO\t\t323\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t324\tPset_FireSuppressionTerminalTypeHoseReel\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t10f57d80-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.ClassificationAuthority\tTEXT\t\t324\t1\tIfcLabel\t1\r\nPARAM\t0935d900-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.ClassOfService\tTEXT\t\t324\t1\tIfcLabel\t1\r\nPARAM\teefbfb00-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.HoseDiameter\tLENGTH\t\t324\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf58a7280-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.HoseLength\tLENGTH\t\t324\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tfc18ea00-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.HoseNozzleType\tTEXT\t\t324\t1\tPEnum_HoseNozzleType\t1\r\nPARAM\td986d100-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.HoseReelMountingType\tTEXT\t\t324\t1\tPEnum_HoseReelMountingType\t1\r\nPARAM\tcc69e200-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.HoseReelType\tTEXT\t\t324\t1\tPEnum_HoseReelType\t1\r\nPARAM\te9061a00-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.InletConnectionSize\tLENGTH\t\t324\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t325\tPset_FireSuppressionTerminalTypeSprinkler\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t31bdd300-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.Activation\tTEXT\t\t325\t1\tPEnum_SprinklerActivation\t1\r\nPARAM\t47cb9380-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.ActivationTemperature\tNUMBER\t\t325\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t59ad3680-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.BulbLiquidColor\tTEXT\t\t325\t1\tPEnum_SprinklerBulbLiquidColor\t1\r\nPARAM\tcf0f74a2-dc99-424c-b0a6-739e27b80a58\tPset_FireSuppressionTerminalTypeSprinkler.BulbLiquidColour\tTEXT\t\t325\t1\tPEnum_SprinklerBulbLiquidColour\t1\r\nPARAM\t83665d80-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.ConnectionSize\tLENGTH\t\t325\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t4d28de00-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.CoverageArea\tAREA\t\t325\t1\tIfcAreaMeasure\t1\r\nPARAM\te33b64e5-6d99-4e25-9c41-a3110af59a87\tPset_FireSuppressionTerminalTypeSprinkler.DeflectorMaterial\tMULTILINETEXT\t\t325\t1\tIfcMaterial\t1\r\nPARAM\t78133200-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.DischargeCoefficient\tNUMBER\t\t325\t1\tIfcReal\t1\r\nPARAM\t6cc00680-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.DischargeFlowRate\tNUMBER\t\t325\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t2906b840-d09b-43d8-b9af-a78ca056b5df\tPset_FireSuppressionTerminalTypeSprinkler.FrameMaterial\tMULTILINETEXT\t\t325\t1\tIfcMaterial\t1\r\nPARAM\t531ebf00-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.HasDeflector\tYESNO\t\t325\t1\tIfcBoolean\t1\r\nPARAM\t7d707c80-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.MaximumWorkingPressure\tNUMBER\t\t325\t1\tIfcPressureMeasure\t1\r\nPARAM\t721d5100-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.ResidualFlowingPressure\tNUMBER\t\t325\t1\tIfcPressureMeasure\t1\r\nPARAM\t3da99500-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.Response\tTEXT\t\t325\t1\tPEnum_SprinklerResponse\t1\r\nPARAM\t1d79d600-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.SprinklerType\tTEXT\t\t325\t1\tPEnum_SprinklerType\t1\r\n#\r\nGROUP\t326\tPset_FittingBend\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tba290c63-0fc5-4194-85ac-1ec0d53d2425\tPset_FittingBend.BendAngle\tANGLE\t\t326\t1\tIfcPositivePlaneAngleMeasure\t1\r\nPARAM\t9c37e6d5-d68c-4ee1-adce-9ddb9a7ff53c\tPset_FittingBend.BendRadius\tLENGTH\t\t326\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t327\tPset_FittingJunction\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8fcf24cb-0a89-41ef-b17c-c5f415f76cc6\tPset_FittingJunction.JunctionLeftAngle\tANGLE\t\t327\t1\tIfcPositivePlaneAngleMeasure\t1\r\nPARAM\tb2d0dd7c-7c21-400e-8508-dbabf72a5b3f\tPset_FittingJunction.JunctionLeftRadius\tLENGTH\t\t327\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td4ba7a30-beba-48c3-85c5-21d7b7943151\tPset_FittingJunction.JunctionRightAngle\tANGLE\t\t327\t1\tIfcPositivePlaneAngleMeasure\t1\r\nPARAM\td3288944-7780-4cba-b190-56f06724219e\tPset_FittingJunction.JunctionRightRadius\tLENGTH\t\t327\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t186d14b2-66ce-4b28-b06f-1e0d354c2dcc\tPset_FittingJunction.JunctionType\tTEXT\t\t327\t1\tPEnum_FittingJunctionType\t1\r\n#\r\nGROUP\t328\tPset_FittingTransition\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t67babd62-4fbd-4917-acfd-edc239112155\tPset_FittingTransition.EccentricityInY\tLENGTH\t\t328\t1\tIfcLengthMeasure\t1\r\nPARAM\t00be5990-6233-44ae-809e-64264294f98b\tPset_FittingTransition.EccentricityInZ\tLENGTH\t\t328\t1\tIfcLengthMeasure\t1\r\nPARAM\tc537859f-ac00-46e0-96a3-8e1db7782b2d\tPset_FittingTransition.NominalLength\tLENGTH\t\t328\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t329\tPset_FlowControllerDamper\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t34728afc-bb21-4431-ab94-888e2c145c5c\tPset_FlowControllerDamper.SizingMethod\tTEXT\t\t329\t1\tPEnum_DamperSizingMethod\t1\r\n#\r\nGROUP\t330\tPset_FlowControllerFlowMeter\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t44a680ad-37a5-4031-bab8-59c8405cb22f\tPset_FlowControllerFlowMeter.Purpose\tTEXT\t\t330\t1\tPEnum_FlowMeterPurpose\t1\r\n#\r\nGROUP\t331\tPset_FlowFittingDuctFitting\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t08f5535e-60d1-4669-acd0-3d5b84a8c338\tPset_FlowFittingDuctFitting.AbsoluteRoughnessFactor\tLENGTH\t\t331\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td7260ab3-ff92-4f26-ab4b-a0ae27f9ab98\tPset_FlowFittingDuctFitting.Color\tTEXT\t\t331\t1\tIfcLabel\t1\r\nPARAM\t329e0f04-c933-4e71-925a-a8ac7e59fb92\tPset_FlowFittingDuctFitting.HasLiner\tYESNO\t\t331\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t332\tPset_FlowFittingPipeFitting\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te2c6476a-fe35-4b85-aa2a-11cc0d8e8675\tPset_FlowFittingPipeFitting.Color\tTEXT\t\t332\t1\tIfcLabel\t1\r\nPARAM\t8856a008-4ba8-41f8-b54e-740959a1e9bb\tPset_FlowFittingPipeFitting.InteriorRoughnessCoefficient\tLENGTH\t\t332\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t333\tPset_FlowInstrumentPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t94af6a00-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentPHistory.Quality\tMULTILINETEXT\t\t333\t1\tIfcTimeSeries\t1\r\nPARAM\t97aa5a80-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentPHistory.Status\tMULTILINETEXT\t\t333\t1\tIfcTimeSeries\t1\r\nPARAM\t90834c80-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentPHistory.Value\tMULTILINETEXT\t\t333\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t334\tPset_FlowInstrumentTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta133c280-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentTypeCommon.Reference\tTEXT\t\t334\t1\tIfcIdentifier\t1\r\nPARAM\ta6910d00-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentTypeCommon.Status\tTEXT\t\t334\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t335\tPset_FlowInstrumentTypePressureGauge\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tcaece980-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentTypePressureGauge.DisplaySize\tLENGTH\t\t335\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tbc9ecd80-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentTypePressureGauge.PressureGaugeType\tTEXT\t\t335\t1\tPEnum_PressureGaugeType\t1\r\n#\r\nGROUP\t336\tPset_FlowInstrumentTypeThermometer\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te5bf5e00-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentTypeThermometer.DisplaySize\tLENGTH\t\t336\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td7714200-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentTypeThermometer.ThermometerType\tTEXT\t\t336\t1\tPEnum_ThermometerType\t1\r\n#\r\nGROUP\t337\tPset_FlowMeterOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\taba0010e-d665-4fe3-a3f7-8579df3462f8\tPset_FlowMeterOccurrence.FlowMeterOurpose\tTEXT\t\t337\t1\tPEnum_FlowMeterPurpose\t1\r\nPARAM\tf374e380-d1e7-11e1-8000-00215ad4efdf\tPset_FlowMeterOccurrence.Purpose\tTEXT\t\t337\t1\tPEnum_FlowMeterPurpose\t1\r\n#\r\nGROUP\t338\tPset_FlowMeterTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t6cf99e4f-a821-45ec-b0fa-6fb483cebef5\tPset_FlowMeterTypeCommon.IsMain\tYESNO\t\t338\t1\tIfcBoolean\t1\r\nPARAM\t1bfcdd80-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeCommon.ReadOutType\tTEXT\t\t338\t1\tPEnum_MeterReadOutType\t1\r\nPARAM\t07204a00-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeCommon.Reference\tTEXT\t\t338\t1\tIfcIdentifier\t1\r\nPARAM\t2a4af980-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeCommon.RemoteReading\tYESNO\t\t338\t1\tIfcBoolean\t1\r\nPARAM\t0d162b00-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeCommon.Status\tTEXT\t\t338\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t339\tPset_FlowMeterTypeEnergyMeter\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8e052728-f2a3-4f31-ad69-ff29f047cd98\tPset_FlowMeterTypeEnergyMeter.ConnectionSize\tLENGTH\t\t339\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3afb6f80-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeEnergyMeter.MaximumCurrent\tNUMBER\t\t339\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t4058ba00-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeEnergyMeter.MultipleTarriff\tYESNO\t\t339\t1\tIfcBoolean\t1\r\nPARAM\t3636bb80-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeEnergyMeter.NominalCurrent\tNUMBER\t\t339\t1\tIfcElectricCurrentMeasure\t1\r\n#\r\nGROUP\t340\tPset_FlowMeterTypeGasMeter\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5c5c5b80-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeGasMeter.ConnectionSize\tLENGTH\t\t340\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t4cdd1280-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeGasMeter.GasType\tTEXT\t\t340\t1\tPEnum_GasType\t1\r\nPARAM\t641c0000-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeGasMeter.MaximumFlowRate\tNUMBER\t\t340\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t68e0b400-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeGasMeter.MaximumPressureLoss\tNUMBER\t\t340\t1\tIfcPressureMeasure\t1\r\n#\r\nGROUP\t341\tPset_FlowMeterTypeOilMeter\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t75650c80-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeOilMeter.ConnectionSize\tLENGTH\t\t341\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t7bf38400-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeOilMeter.MaximumFlowRate\tNUMBER\t\t341\t1\tIfcVolumetricFlowRateMeasure\t1\r\n#\r\nGROUP\t342\tPset_FlowMeterTypeWaterMeter\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta47b7e00-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeWaterMeter.BackflowPreventerType\tTEXT\t\t342\t1\tPEnum_BackflowPreventerType\t1\r\nPARAM\t93327180-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeWaterMeter.ConnectionSize\tLENGTH\t\t342\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t99c0e900-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeWaterMeter.MaximumFlowRate\tNUMBER\t\t342\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t9fb6ca00-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeWaterMeter.MaximumPressureLoss\tNUMBER\t\t342\t1\tIfcPressureMeasure\t1\r\nPARAM\t87df4600-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeWaterMeter.Type\tTEXT\t\t342\t1\tPEnum_WaterMeterType\t1\r\n#\r\nGROUP\t343\tPset_FlowMovingDeviceCompressor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te9a42743-0032-4f7f-ae40-a442097e034a\tPset_FlowMovingDeviceCompressor.ImpellerDiameter\tLENGTH\t\t343\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t344\tPset_FlowMovingDeviceFan\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t67a7e91e-d253-4431-929e-a4e43cd4848e\tPset_FlowMovingDeviceFan.ApplicationOfFan\tTEXT\t\t344\t1\tPEnum_FanApplicationType\t1\r\nPARAM\tcbafd0d3-8566-4765-a35c-580445f76c03\tPset_FlowMovingDeviceFan.CoilPosition\tTEXT\t\t344\t1\tPEnum_FanCoilPosition\t1\r\nPARAM\t97fac63f-e5d0-4396-b0a8-4d6137e7f970\tPset_FlowMovingDeviceFan.DischargeType\tTEXT\t\t344\t1\tPEnum_FanDischargeType\t1\r\nPARAM\tfc8a5391-c1e8-44cd-ab54-d0b7687197f6\tPset_FlowMovingDeviceFan.FanMountingType\tTEXT\t\t344\t1\tPEnum_FanMountingType\t1\r\nPARAM\t62c05fb7-1fb5-4371-892f-96249005255a\tPset_FlowMovingDeviceFan.FractionOfMotorHeatToAirStream\tNUMBER\t\t344\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t1f58766a-df5f-43fd-bb53-960c133d0e35\tPset_FlowMovingDeviceFan.ImpellerDiameter\tLENGTH\t\t344\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3f428838-8353-4b98-8d54-685af11717c0\tPset_FlowMovingDeviceFan.MotorPosition\tTEXT\t\t344\t1\tPEnum_FanMotorPosition\t1\r\n#\r\nGROUP\t345\tPset_FlowMovingDeviceFanCentrifugal\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8178046f-4537-4b7d-846a-80f0156dad1a\tPset_FlowMovingDeviceFanCentrifugal.Arrangement\tTEXT\t\t345\t1\tPEnum_CentrifugalFanArrangement\t1\r\nPARAM\t6c60ccde-1ae3-402f-9272-461f2bae4f95\tPset_FlowMovingDeviceFanCentrifugal.DirectionOfRotation\tTEXT\t\t345\t1\tPEnum_CentrifugalFanRotation\t1\r\nPARAM\t3c4009e3-042f-4721-b9c9-d4f9398ef768\tPset_FlowMovingDeviceFanCentrifugal.DischargePosition\tTEXT\t\t345\t1\tPEnum_CentrifugalFanDischargePosition\t1\r\n#\r\nGROUP\t346\tPset_FlowMovingDevicePump\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5ae99c23-b67e-4be8-b1f0-cf402f2a6271\tPset_FlowMovingDevicePump.BaseType\tTEXT\t\t346\t1\tPEnum_PumpBaseType\t1\r\nPARAM\t75e6c2a8-14e2-40b8-9b24-2557a0f9a950\tPset_FlowMovingDevicePump.DriveConnectionType\tTEXT\t\t346\t1\tPEnum_PumpDriveConnectionType\t1\r\nPARAM\t0782cb57-417a-49c0-b790-2e6c919398cf\tPset_FlowMovingDevicePump.ImpellerDiameter\tLENGTH\t\t346\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t347\tPset_FlowSegmentDuctSegment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t98976b1c-476e-4f40-8fdb-75d1f41ba042\tPset_FlowSegmentDuctSegment.Color\tTEXT\t\t347\t1\tIfcLabel\t1\r\nPARAM\t75f995f8-781b-4b95-af6d-951635b7d563\tPset_FlowSegmentDuctSegment.HasLiner\tYESNO\t\t347\t1\tIfcBoolean\t1\r\nPARAM\t1ce212f1-fd70-490e-992d-47ea8fc67a91\tPset_FlowSegmentDuctSegment.InteriorRoughnessCoefficient\tLENGTH\t\t347\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t0ff789c2-779e-4ff1-9d9c-238add60ef69\tPset_FlowSegmentDuctSegment.Length\tLENGTH\t\t347\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\ted76ad9f-69e6-4674-803d-0fef9737be19\tPset_FlowSegmentDuctSegment.MaterialThickness\tLENGTH\t\t347\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t348\tPset_FlowSegmentPipeSegment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td95943a0-769f-45e2-a279-f91b53be635d\tPset_FlowSegmentPipeSegment.Color\tTEXT\t\t348\t1\tIfcLabel\t1\r\nPARAM\t6605c902-34ec-40ff-8dc4-79a626ca89d9\tPset_FlowSegmentPipeSegment.Gradient\tNUMBER\t\t348\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t3ac4a6ff-05a7-4f46-9123-2ac76975548a\tPset_FlowSegmentPipeSegment.InteriorRoughnessCoefficient\tLENGTH\t\t348\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t8fe4dfdd-d739-4413-a63b-bf277059a44e\tPset_FlowSegmentPipeSegment.InvertElevation\tLENGTH\t\t348\t1\tIfcLengthMeasure\t1\r\nPARAM\t3cbaf1a8-fe4d-4cda-9971-bd6c3c0bbb52\tPset_FlowSegmentPipeSegment.Length\tLENGTH\t\t348\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t349\tPset_FlowStorageDeviceTank\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4ab87301-e0af-4316-b4c5-2849f97171e0\tPset_FlowStorageDeviceTank.HasLadder\tYESNO\t\t349\t1\tIfcBoolean\t1\r\nPARAM\t24c53a30-367e-4ca3-b79f-df61e81d244b\tPset_FlowStorageDeviceTank.HasVisualIndicator\tYESNO\t\t349\t1\tIfcBoolean\t1\r\nPARAM\t2469b872-24c0-4a4c-85ab-1fab8d82981b\tPset_FlowStorageDeviceTank.TankComposition\tTEXT\t\t349\t1\tPEnum_TankComposition\t1\r\n#\r\nGROUP\t350\tPset_FlowTerminalAirTerminal\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7c391f45-4e72-4009-ae06-685edc001bcf\tPset_FlowTerminalAirTerminal.AirflowType\tTEXT\t\t350\t1\tPEnum_AirTerminalAirflowType\t1\r\nPARAM\tae0d835b-4320-427c-b7a4-f6df20fe5a43\tPset_FlowTerminalAirTerminal.Location\tTEXT\t\t350\t1\tPEnum_AirTerminalLocation\t1\r\n#\r\nGROUP\t351\tPset_FootingCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t43b97312-26b0-4190-b668-d0c68f6ce88c\tPset_FootingCommon.LoadBearing\tYESNO\t\t351\t1\tIfcBoolean\t1\r\nPARAM\tbd842f00-d1e8-11e1-8000-00215ad4efdf\tPset_FootingCommon.Reference\tTEXT\t\t351\t1\tIfcIdentifier\t1\r\nPARAM\tadd19c59-b07f-4f5d-b87f-60e3bbe18ce0\tPset_FootingCommon.Status\tTEXT\t\t351\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t352\tPset_FootingTypePadFooting\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc3d16931-5f7e-41af-8d42-6c02782c6e16\tPset_FootingTypePadFooting.IsReinforced\tYESNO\t\t352\t1\tIfcBoolean\t1\r\nPARAM\t4d61a7b5-165e-4330-a98a-7efb5f8440ac\tPset_FootingTypePadFooting.LoadBearingCapacity\tNUMBER\t\t352\t1\tIfcPlanarForceMeasure\t1\r\n#\r\nGROUP\t353\tPset_FurnitureTypeChair\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td096ff00-d1e8-11e1-8000-00215ad4efdf\tPset_FurnitureTypeChair.HighestSeatingHeight\tLENGTH\t\t353\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te0164800-d1e8-11e1-8000-00215ad4efdf\tPset_FurnitureTypeChair.LowestSeatingHeight\tLENGTH\t\t353\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tcaa11e00-d1e8-11e1-8000-00215ad4efdf\tPset_FurnitureTypeChair.SeatingHeight\tLENGTH\t\t353\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t354\tPset_FurnitureTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te8aa7f83-795a-441e-bd72-bc8ec0f13ea2\tPset_FurnitureTypeCommon.Description\tTEXT\t\t354\t1\tIfcText\t1\r\nPARAM\t1fdd2f80-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeCommon.IsBuiltIn\tYESNO\t\t354\t1\tIfcBoolean\t1\r\nPARAM\t19e74e80-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeCommon.MainColor\tTEXT\t\t354\t1\tIfcLabel\t1\r\nPARAM\t7ca54290-d121-412c-b902-7512a009450a\tPset_FurnitureTypeCommon.MainColour\tTEXT\t\t354\t1\tIfcLabel\t1\r\nPARAM\t118f1380-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeCommon.NominalDepth\tLENGTH\t\t354\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t00460700-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeCommon.NominalHeight\tLENGTH\t\t354\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t076d1500-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeCommon.NominalLength\tLENGTH\t\t354\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\tc67404c9-010c-4f04-a3d3-f31eb6a4d813\tPset_FurnitureTypeCommon.Reference\tTEXT\t\t354\t1\tIfcIdentifier\t1\r\nPARAM\t7334640e-af39-43b9-acb2-ae43ea34a47d\tPset_FurnitureTypeCommon.Status\tTEXT\t\t354\t1\tPEnum_ElementStatus\t1\r\nPARAM\tf7553580-d1e8-11e1-8000-00215ad4efdf\tPset_FurnitureTypeCommon.Style\tTEXT\t\t354\t1\tIfcLabel\t1\r\n#\r\nGROUP\t355\tPset_FurnitureTypeDesk\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2cfa1e80-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeDesk.WorksurfaceArea\tAREA\t\t355\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t356\tPset_FurnitureTypeFileCabinet\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t38e5e080-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeFileCabinet.WithLock\tYESNO\t\t356\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t357\tPset_FurnitureTypeTable\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4bf8b080-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeTable.NumberOfChairs\tINTEGER\t\t357\t1\tIfcCountMeasure\t1\r\nPARAM\t469b6600-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeTable.WorksurfaceArea\tAREA\t\t357\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t358\tPset_GasTerminalPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t21c84d28-9c1f-4659-89f6-ba96be133f51\tPset_GasTerminalPHistory.GasFlowRate\tNUMBER\t\t358\t1\tIfcReal\t1\r\n#\r\nGROUP\t359\tPset_GasTerminalTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td6978a7b-284e-44e1-af3f-ff008a25ada6\tPset_GasTerminalTypeCommon.GasFlowRateRange\tMULTILINETEXT\t\t359\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t360\tPset_GasTerminalTypeGasAppliance\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tba3bd0e3-6b4f-47e5-8efa-4dc41be2510b\tPset_GasTerminalTypeGasAppliance.FlueType\tTEXT\t\t360\t1\tPEnum_FlueType\t1\r\nPARAM\tde95b8f0-20da-42de-bef8-cc9d8b21bddf\tPset_GasTerminalTypeGasAppliance.GasApplianceType\tTEXT\t\t360\t1\tPEnum_GasApplianceType\t1\r\n#\r\nGROUP\t361\tPset_GasTerminalTypeGasBurner\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8bd695cd-418e-4fb3-8137-e846280ddd81\tPset_GasTerminalTypeGasBurner.GasBurnerType\tTEXT\t\t361\t1\tPEnum_GasBurnerType\t1\r\n#\r\nGROUP\t362\tPset_GateHeadCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3689b0b9-38ed-4ebf-82ef-cd84b42ae3da\tPset_GateHeadCommon.StructuralType\tTEXT\t\t362\t1\tIfcLabel\t1\r\n#\r\nGROUP\t363\tPset_GeotechnicalAssemblyCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3a2830ee-9e26-4ba3-97b5-a1890a78a5a7\tPset_GeotechnicalAssemblyCommon.BoreHolePurpose\tTEXT\t\t363\t1\tPEnum_StrataAssemblyPurpose\t1\r\nPARAM\t498f6598-9c24-48c7-b39b-37c21eca3fbf\tPset_GeotechnicalAssemblyCommon.Limitations\tTEXT\t\t363\t1\tIfcText\t1\r\nPARAM\tb20abb64-5542-4b7d-86db-46c563d259ad\tPset_GeotechnicalAssemblyCommon.Methodology\tTEXT\t\t363\t1\tIfcText\t1\r\nPARAM\tdf77487c-c96a-40b8-9777-0d24e8fc6ba9\tPset_GeotechnicalAssemblyCommon.Status\tTEXT\t\t363\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t364\tPset_GeotechnicalStratumCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tacd41a5d-3999-467f-8912-bbd3089caadd\tPset_GeotechnicalStratumCommon.IsTopographic\tYESNO\t\t364\t1\tIfcLogical\t1\r\nPARAM\t14d79215-177d-4f1b-b0d7-c4242efebd36\tPset_GeotechnicalStratumCommon.PiezometricHead\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc739306e-8850-4b14-aac6-10969a4cd499\tPset_GeotechnicalStratumCommon.PiezometricPressure\tNUMBER\t\t364\t1\tIfcPressureMeasure\t1\r\nPARAM\t769c999a-b162-4c05-be8b-3f9a7ce83aba\tPset_GeotechnicalStratumCommon.Status\tTEXT\t\t364\t1\tPEnum_ElementStatus\t1\r\nPARAM\t5c6e9c5d-6758-4b61-ac0c-3c8fbfa0fbee\tPset_GeotechnicalStratumCommon.StratumColour\tTEXT\t\t364\t1\tIfcLabel\t1\r\nPARAM\t7c3c411d-a4d5-4b45-89e2-f73fd0ccc0b5\tPset_GeotechnicalStratumCommon.Texture\tTEXT\t\t364\t1\tIfcLabel\t1\r\n#\r\nGROUP\t365\tPset_HeatExchangerTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t70ed2380-d1e9-11e1-8000-00215ad4efdf\tPset_HeatExchangerTypeCommon.Arrangement\tTEXT\t\t365\t1\tPEnum_HeatExchangerArrangement\t1\r\nPARAM\t44eaaef2-60eb-4af0-b179-72635320f79b\tPset_HeatExchangerTypeCommon.FlowArrangement\tTEXT\t\t365\t1\tPEnum_HeatExchangerArrangement\t1\r\nPARAM\t59ae3600-d1e9-11e1-8000-00215ad4efdf\tPset_HeatExchangerTypeCommon.Reference\tTEXT\t\t365\t1\tIfcIdentifier\t1\r\nPARAM\taafcf165-e874-4b40-b63f-b0967593d09c\tPset_HeatExchangerTypeCommon.ShellMaterial\tMULTILINETEXT\t\t365\t1\tIfcMaterial\t1\r\nPARAM\t5f0b8080-d1e9-11e1-8000-00215ad4efdf\tPset_HeatExchangerTypeCommon.Status\tTEXT\t\t365\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t366\tPset_HeatExchangerTypePlate\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8a8e6b00-d1e9-11e1-8000-00215ad4efdf\tPset_HeatExchangerTypePlate.NumberOfPlates\tINTEGER\t\t366\t1\tIfcCountMeasure\t1\r\n#\r\nGROUP\t367\tPset_HumidifierPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb2a1e457-ad11-489d-a5e5-2092a1797072\tPset_HumidifierPHistory.AirPressureDropCurve\tMULTILINETEXT\t\t367\t1\tPropertyTableValue\t1\r\nPARAM\t9843f080-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierPHistory.AtmosphericPressure\tMULTILINETEXT\t\t367\t1\tIfcTimeSeries\t1\r\nPARAM\ta7c33980-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierPHistory.SaturationEfficiency\tMULTILINETEXT\t\t367\t1\tIfcTimeSeries\t1\r\nPARAM\t1838efd6-0f99-4081-beed-5ff1d85dc278\tPset_HumidifierPHistory.SaturationEfficiencyCurve\tMULTILINETEXT\t\t367\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t368\tPset_HumidifierTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t11dbde80-d1ea-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.AirPressureDropCurve\tMULTILINETEXT\t\t368\t1\tPropertyTableValue\t1\r\nPARAM\tcaede900-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.Application\tTEXT\t\t368\t1\tPEnum_HumidifierApplication\t1\r\nPARAM\tb41fe9ed-8fc6-488f-a896-e5a26526e8b0\tPset_HumidifierTypeCommon.HumidifierApplication\tTEXT\t\t368\t1\tPEnum_HumidifierApplication\t1\r\nPARAM\te953e480-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.InternalControl\tTEXT\t\t368\t1\tPEnum_HumidifierInternalControl\t1\r\nPARAM\te1944000-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.NominalAirFlowRate\tNUMBER\t\t368\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\tdc36f580-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.NominalMoistureGain\tNUMBER\t\t368\t1\tIfcMassFlowRateMeasure\t1\r\nPARAM\tb3166500-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.Reference\tTEXT\t\t368\t1\tIfcIdentifier\t1\r\nPARAM\t02f52c00-d1ea-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.SaturationEfficiencyCurve\tMULTILINETEXT\t\t368\t1\tPropertyTableValue\t1\r\nPARAM\tb90c4600-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.Status\tTEXT\t\t368\t1\tPEnum_ElementStatus\t1\r\nPARAM\tfcff4b00-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.WaterRequirement\tNUMBER\t\t368\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\td6d9ab00-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.Weight\tNUMBER\t\t368\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t369\tPset_ImpactProtectionDeviceOccurrenceBumper\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\taebcd879-28fb-46c6-93ab-f4d6bad12bd6\tPset_ImpactProtectionDeviceOccurrenceBumper.BrakingLength\tLENGTH\t\t369\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9695e10a-8d3f-49f4-ad80-c2fe201d9cab\tPset_ImpactProtectionDeviceOccurrenceBumper.BumperOrientation\tTEXT\t\t369\t1\tPEnum_BumperOrientation\t1\r\nPARAM\tbd86a136-f4f5-49bc-9ca7-a97045731955\tPset_ImpactProtectionDeviceOccurrenceBumper.IsRemovableBumper\tYESNO\t\t369\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t370\tPset_ImpactProtectionDeviceTypeBumper\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t19985328-ac1f-4c61-8562-77fd58aab7c3\tPset_ImpactProtectionDeviceTypeBumper.EnergyAbsorption\tNUMBER\t\t370\t1\tIfcEnergyMeasure\t1\r\nPARAM\t1ffa8f02-2106-4fd0-9df1-82a4bd8d694f\tPset_ImpactProtectionDeviceTypeBumper.IsAbsorbingEnergy\tYESNO\t\t370\t1\tIfcBoolean\t1\r\nPARAM\t4539231d-4560-4a29-a7f9-ec0de4d85fef\tPset_ImpactProtectionDeviceTypeBumper.MaximumLoadRetention\tNUMBER\t\t370\t1\tIfcForceMeasure\t1\r\n#\r\nGROUP\t371\tPset_InstallationOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tca277e65-90f9-44b0-8859-2ce3abe148ff\tPset_InstallationOccurrence.AcceptanceDate\tTEXT\t\t371\t1\tIfcDate\t1\r\nPARAM\t0bcc9198-9599-4f08-83b4-ac431cee19fa\tPset_InstallationOccurrence.InstallationDate\tTEXT\t\t371\t1\tIfcDate\t1\r\nPARAM\t8f30c4cd-8612-4feb-a6c5-64cd624d3b24\tPset_InstallationOccurrence.PutIntoOperationDate\tTEXT\t\t371\t1\tIfcDate\t1\r\n#\r\nGROUP\t372\tPset_InterceptorTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t697a4a00-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.CoverLength\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t71d28500-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.CoverWidth\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t59fb0100-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.InletConnectionSize\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t523b5c80-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.NominalBodyDepth\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t42bc1380-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.NominalBodyLength\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t4a7bb800-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.NominalBodyWidth\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t62533c00-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.OutletConnectionSize\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t2ae48f80-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.Reference\tTEXT\t\t372\t1\tIfcIdentifier\t1\r\nPARAM\t320b9d80-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.Status\tTEXT\t\t372\t1\tPEnum_ElementStatus\t1\r\nPARAM\t78f99300-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.VentilatingPipeSize\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t373\tPset_IpNetworkEquipmentPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t268275bd-bbaa-45c0-93b5-3ec87b0152d4\tPset_IpNetworkEquipmentPHistory.NumberOfPackets\tMULTILINETEXT\t\t373\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t374\tPset_JettyCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t16d17b60-d224-44ec-b0ae-c492290aeafc\tPset_JettyCommon.BentSpacing\tLENGTH\t\t374\t1\tIfcLengthMeasure\t1\r\nPARAM\t3697bca8-d998-49b7-b851-84d3b7f60cb4\tPset_JettyCommon.Elevation\tLENGTH\t\t374\t1\tIfcLengthMeasure\t1\r\nPARAM\t406d85f6-ae4f-4029-8e97-3d02b60de75e\tPset_JettyCommon.PierSectionType\tTEXT\t\t374\t1\tPEnum_SectionType\t1\r\nPARAM\t4faaaf73-877d-4948-9d70-1da228960919\tPset_JettyCommon.StructuralType\tTEXT\t\t374\t1\tIfcLabel\t1\r\n#\r\nGROUP\t375\tPset_JettyDesignCriteria\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t483098f3-64ea-429f-a262-31f382c750d6\tPset_JettyDesignCriteria.EquipmentLoading\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\r\nPARAM\t0aede895-7ca6-41a2-8809-156616f39741\tPset_JettyDesignCriteria.ExtremeHighWaterLevel\tLENGTH\t\t375\t1\tIfcLengthMeasure\t1\r\nPARAM\t967a5dec-235d-4f53-8f6c-703664df169b\tPset_JettyDesignCriteria.ExtremeLowWaterLevel\tLENGTH\t\t375\t1\tIfcLengthMeasure\t1\r\nPARAM\t4e1858b9-360b-4d37-90bd-108e1e1f68c6\tPset_JettyDesignCriteria.FlowLoading\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\r\nPARAM\t752d2412-4dba-40ec-9f77-b3897230ac0b\tPset_JettyDesignCriteria.HighWaterLevel\tLENGTH\t\t375\t1\tIfcLengthMeasure\t1\r\nPARAM\t661e4f21-86c2-4ab1-8017-2a4df8375e40\tPset_JettyDesignCriteria.LowWaterLevel\tLENGTH\t\t375\t1\tIfcLengthMeasure\t1\r\nPARAM\te7434ddd-d193-42e8-b9ea-4ed84bbf483c\tPset_JettyDesignCriteria.ShipLoading\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\r\nPARAM\td05070e1-dea8-4bab-b86b-8d52682fe0f1\tPset_JettyDesignCriteria.UniformlyDistributedLoad\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\r\nPARAM\t35419ef8-5f54-49d0-86a4-caaea8dba730\tPset_JettyDesignCriteria.WaveLoading\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\r\n#\r\nGROUP\t376\tPset_JunctionBoxTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta34b5080-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.ClearDepth\tLENGTH\t\t376\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te60d2880-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.IP_Code\tTEXT\t\t376\t1\tIfcLabel\t1\r\nPARAM\tdf7eb100-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.IsExternal\tYESNO\t\t376\t1\tIfcBoolean\t1\r\nPARAM\t2434d313-b408-48a1-b23a-3c9f1acdd9e7\tPset_JunctionBoxTypeCommon.JunctionBoxMountingType\tTEXT\t\t376\t1\tPEnum_JunctionBoxMountingType\t1\r\nPARAM\tcece3b00-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.MountingType\tTEXT\t\t376\t1\tPEnum_JunctionBoxMountingType\t1\r\nPARAM\tfcd0936b-c04b-4050-8044-4df1dec2dfef\tPset_JunctionBoxTypeCommon.NominalHeight\tLENGTH\t\t376\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\tbd0895e4-2feb-484e-b83f-2cc40bd2fd96\tPset_JunctionBoxTypeCommon.NominalLength\tLENGTH\t\t376\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t4b0c9eb5-6824-44a4-bb3e-2b603bca8766\tPset_JunctionBoxTypeCommon.NominalWidth\tLENGTH\t\t376\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t9dee0600-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.NumberOfGangs\tINTEGER\t\t376\t1\tIfcCountMeasure\t1\r\nPARAM\tbeb65b80-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.PlacingType\tTEXT\t\t376\t1\tPEnum_JunctionBoxPlacingType\t1\r\nPARAM\t87e04580-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.Reference\tTEXT\t\t376\t1\tIfcIdentifier\t1\r\nPARAM\tae9e7c00-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.ShapeType\tTEXT\t\t376\t1\tPEnum_JunctionBoxShapeType\t1\r\nPARAM\t8dd62680-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.Status\tTEXT\t\t376\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t377\tPset_JunctionBoxTypeData\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8c4cfdec-1327-4768-b879-2889273db20f\tPset_JunctionBoxTypeData.DataConnectionType\tTEXT\t\t377\t1\tPEnum_DataConnectionType\t1\r\n#\r\nGROUP\t378\tPset_KerbCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb0afe276-2158-425b-a2a1-1da245c3a932\tPset_KerbCommon.CombinedKerbGutter\tYESNO\t\t378\t1\tIfcBoolean\t1\r\nPARAM\t7167f602-06ee-4700-a62d-e74cd2c192e7\tPset_KerbCommon.Mountable\tYESNO\t\t378\t1\tIfcBoolean\t1\r\nPARAM\t6c8ee9ac-57c3-4178-8852-36b070b60153\tPset_KerbCommon.Upstand\tLENGTH\t\t378\t1\tIfcNonNegativeLengthMeasure\t1\r\n#\r\nGROUP\t379\tPset_KerbStone\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t80e57f36-0abd-4ded-b1e4-d67a7d03bae8\tPset_KerbStone.NominalHeight\tLENGTH\t\t379\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t7832bce5-ea43-4748-bfae-647096002007\tPset_KerbStone.NominalLength\tLENGTH\t\t379\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t9a764061-e43c-43a3-8ac8-32eec238b053\tPset_KerbStone.NominalWidth\tLENGTH\t\t379\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t1374d61c-0ecd-432a-b296-d041fd0ad883\tPset_KerbStone.StoneFinishes\tTEXT\t\t379\t1\tIfcLabel\t1\r\nPARAM\t666038c0-27a0-45ed-ac01-4ffa11391612\tPset_KerbStone.TypeDesignation\tTEXT\t\t379\t1\tIfcLabel\t1\r\n#\r\nGROUP\t380\tPset_LampEmitterTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t01de7fae-c762-4828-99fd-a2b596c40a7f\tPset_LampEmitterTypeCommon.ColorAppearance\tTEXT\t\t380\t1\tIfcLabel\t1\r\nPARAM\t4947bebc-313f-42d3-880e-d2b4c6d370af\tPset_LampEmitterTypeCommon.ColorRenderingIndex\tINTEGER\t\t380\t1\tIfcInteger\t1\r\nPARAM\t8ba2a3df-0ce1-4083-a20a-dccda64aec10\tPset_LampEmitterTypeCommon.ColorTemperature\tNUMBER\t\t380\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t4612709b-eb19-46e5-8d7b-39492ba5316f\tPset_LampEmitterTypeCommon.ContributedLuminousFlux\tNUMBER\t\t380\t1\tIfcLuminousFluxMeasure\t1\r\nPARAM\t36c21fa4-9f9d-4661-a3ad-4dee9f4ed6e0\tPset_LampEmitterTypeCommon.LampBallastType\tTEXT\t\t380\t1\tPEnum_LampBallastType\t1\r\nPARAM\tadb58c29-4394-4975-9b9e-2042ab4a7990\tPset_LampEmitterTypeCommon.LampCompensationType\tTEXT\t\t380\t1\tPEnum_LampCompensationType\t1\r\nPARAM\te9e6e29f-a447-4111-81fa-b763ec01dc08\tPset_LampEmitterTypeCommon.LampMaintenanceFactor\tNUMBER\t\t380\t1\tIfcReal\t1\r\nPARAM\ta33ebd7b-07e2-49a4-9025-d7c39e396b02\tPset_LampEmitterTypeCommon.LightEmitterNominalPower\tNUMBER\t\t380\t1\tIfcPowerMeasure\t1\r\nPARAM\t09e62eb4-9876-4b64-aa06-efe3c2679b00\tPset_LampEmitterTypeCommon.Spectrum\tMULTILINETEXT\t\t380\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t381\tPset_LampTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t41d7b180-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.ColorAppearance\tTEXT\t\t381\t1\tIfcLabel\t1\r\nPARAM\t5fa51680-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.ColorRenderingIndex\tINTEGER\t\t381\t1\tIfcInteger\t1\r\nPARAM\t59af3580-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.ColorTemperature\tNUMBER\t\t381\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\tb5ce81d0-db2b-4892-b8dc-ccf7396ed14e\tPset_LampTypeCommon.ColourAppearance\tTEXT\t\t381\t1\tIfcLabel\t1\r\nPARAM\t23b3107e-7472-4622-bef4-e5b9543eda41\tPset_LampTypeCommon.ColourRenderingIndex\tINTEGER\t\t381\t1\tIfcInteger\t1\r\nPARAM\t9c6c0843-e92d-4098-9255-73744984f592\tPset_LampTypeCommon.ColourTemperature\tNUMBER\t\t381\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t0fc64f80-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.ContributedLuminousFlux\tNUMBER\t\t381\t1\tIfcLuminousFluxMeasure\t1\r\nPARAM\t22d91f80-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.LampBallastType\tTEXT\t\t381\t1\tPEnum_LampBallastType\t1\r\nPARAM\t32f0ff00-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.LampCompensationType\tTEXT\t\t381\t1\tPEnum_LampCompensationType\t1\r\nPARAM\t1c4aa800-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.LampMaintenanceFactor\tNUMBER\t\t381\t1\tIfcReal\t1\r\nPARAM\t15bc3080-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.LightEmitterNominalPower\tNUMBER\t\t381\t1\tIfcPowerMeasure\t1\r\nPARAM\tf58c7180-d1ea-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.Reference\tTEXT\t\t381\t1\tIfcIdentifier\t1\r\nPARAM\t4b611980-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.Spectrum\tMULTILINETEXT\t\t381\t1\tPropertyTableValue\t1\r\nPARAM\tfde4ac80-d1ea-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.Status\tTEXT\t\t381\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t382\tPset_LandRegistration\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t73e91380-d1eb-11e1-8000-00215ad4efdf\tPset_LandRegistration.IsPermanentID\tYESNO\t\t382\t1\tIfcBoolean\t1\r\nPARAM\t6c296f00-d1eb-11e1-8000-00215ad4efdf\tPset_LandRegistration.LandID\tTEXT\t\t382\t1\tIfcIdentifier\t1\r\nPARAM\t7b102180-d1eb-11e1-8000-00215ad4efdf\tPset_LandRegistration.LandTitleID\tTEXT\t\t382\t1\tIfcIdentifier\t1\r\n#\r\nGROUP\t383\tPset_LightFixtureTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc13d416e-f166-40da-aa81-0a3e1ec5a9e1\tPset_LightFixtureTypeCommon.ArticleNumber\tMULTILINETEXT\t\t383\t1\tIfcClassificationReference\t1\r\nPARAM\taf83dd80-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.LightFixtureMountingType\tTEXT\t\t383\t1\tPEnum_LightFixtureMountingType\t1\r\nPARAM\tc5919e00-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.LightFixturePlacingType\tTEXT\t\t383\t1\tPEnum_LightFixturePlacingType\t1\r\nPARAM\td80bd780-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.MaintenanceFactor\tNUMBER\t\t383\t1\tIfcReal\t1\r\nPARAM\t456750b3-5575-49ae-920b-6626f5e090d9\tPset_LightFixtureTypeCommon.ManufacturersSpecificInformation\tTEXT\t\t383\t1\tIfcText\t1\r\nPARAM\tde01b880-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.MaximumPlenumSensibleLoad\tNUMBER\t\t383\t1\tIfcPowerMeasure\t1\r\nPARAM\te528c680-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.MaximumSpaceSensibleLoad\tNUMBER\t\t383\t1\tIfcPowerMeasure\t1\r\nPARAM\ta4c94880-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.NumberOfSources\tINTEGER\t\t383\t1\tIfcCountMeasure\t1\r\nPARAM\t8ebb8800-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.Reference\tTEXT\t\t383\t1\tIfcIdentifier\t1\r\nPARAM\tea861100-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.SensibleLoadToRadiant\tNUMBER\t\t383\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t9549ff80-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.Status\tTEXT\t\t383\t1\tPEnum_ElementStatus\t1\r\nPARAM\taa269300-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.TotalWattage\tNUMBER\t\t383\t1\tIfcPowerMeasure\t1\r\n#\r\nGROUP\t384\tPset_LightFixtureTypeExitSign\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8ebc6501-7e86-486b-9336-d9a9b0b3f989\tPset_LightFixtureTypeExitSign.Addressablility\tTEXT\t\t384\t1\tPEnum_AddressabilityType\t1\r\nPARAM\td91142d9-838a-4b2e-847d-3608e246f57a\tPset_LightFixtureTypeExitSign.BackupSupplySystem\tTEXT\t\t384\t1\tPEnum_BackupSupplySystemType\t1\r\nPARAM\t024fb4cf-cd6d-4dde-99ef-282a0195d011\tPset_LightFixtureTypeExitSign.MinimumTextHeight\tNUMBER\t\t384\t1\tIfcPositiveLengthMeasure \t1\r\nPARAM\t84494f48-d8c9-4766-8149-0d443e30214c\tPset_LightFixtureTypeExitSign.PictogramEscapeDirection\tTEXT\t\t384\t1\tPEnum_PictogramEscapeDirectionType\t1\r\nPARAM\t02a836db-9993-40c5-b5ae-6e1419195783\tPset_LightFixtureTypeExitSign.SelfTestFunction\tTEXT\t\t384\t1\tPEnum_SelfTestType\t1\r\n#\r\nGROUP\t385\tPset_LightFixtureTypeSecurityLighting\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t35a02400-d1ec-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeSecurityLighting.Addressablility\tTEXT\t\t385\t1\tPEnum_AddressabilityType\t1\r\nPARAM\t1a351900-d1ec-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeSecurityLighting.BackupSupplySystem\tTEXT\t\t385\t1\tPEnum_BackupSupplySystemType\t1\r\nPARAM\t05588580-d1ec-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeSecurityLighting.FixtureHeight\tLENGTH\t\t385\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t28833500-d1ec-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeSecurityLighting.PictogramEscapeDirection\tTEXT\t\t385\t1\tPEnum_PictogramEscapeDirectionType\t1\r\nPARAM\tf5d93c80-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeSecurityLighting.SecurityLightingType\tTEXT\t\t385\t1\tPEnum_LightFixtureSecurityLightingType\t1\r\nPARAM\t0d182a00-d1ec-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeSecurityLighting.SelfTestFunction\tTEXT\t\t385\t1\tPEnum_SelfTestType\t1\r\n#\r\nGROUP\t386\tPset_LightFixtureTypeThermal\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t90cf7602-20b2-408d-9f61-3ba928a943be\tPset_LightFixtureTypeThermal.MaximumPlenumSensibleLoad\tNUMBER\t\t386\t1\tIfcPowerMeasure\t1\r\nPARAM\t439cdfea-7218-461e-b98c-b00535caad03\tPset_LightFixtureTypeThermal.MaximumSpaceSensibleLoad\tNUMBER\t\t386\t1\tIfcPowerMeasure\t1\r\nPARAM\tf69ab30e-17fb-4a14-b4b6-e257776d333c\tPset_LightFixtureTypeThermal.SensibleLoadToRadiant\tNUMBER\t\t386\t1\tIfcPositiveRatioMeasure\t1\r\n#\r\nGROUP\t387\tPset_LinearReferencingMethod\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t39d4525d-1f18-4b8e-bf9a-ecefa45ad12f\tPset_LinearReferencingMethod.LRMConstraint\tTEXT\t\t387\t1\tIfcLabel\t1\r\nPARAM\td9fe5e29-1cc5-4b42-b657-ac296f6b8001\tPset_LinearReferencingMethod.LRMName\tTEXT\t\t387\t1\tIfcLabel\t1\r\nPARAM\tc0e1deea-17fc-4bd9-b058-2553e5f84d96\tPset_LinearReferencingMethod.LRMType\tTEXT\t\t387\t1\tPEnum_LRMType\t1\r\nPARAM\te5480d7f-1ad9-4209-be14-8f7a0e8ea40e\tPset_LinearReferencingMethod.LRMUnit\tTEXT\t\t387\t1\tIfcLabel\t1\r\nPARAM\te1e6a13d-aa97-439d-be45-5cc7f7b0f367\tPset_LinearReferencingMethod.UserDefinedLRMType\tTEXT\t\t387\t1\tIfcLabel\t1\r\n#\r\nGROUP\t388\tPset_MaintenanceStrategy\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te24cfbf7-b8fb-452d-b337-84d54ae6e55a\tPset_MaintenanceStrategy.AccidentResponse\tTEXT\t\t388\t1\tPEnum_AccidentResponse\t1\r\nPARAM\t86c639be-73c7-4ccd-a002-3d88510e67db\tPset_MaintenanceStrategy.AssetCriticality\tTEXT\t\t388\t1\tPEnum_AssetRating\t1\r\nPARAM\te04d6356-2890-415a-b831-1877a5562ef6\tPset_MaintenanceStrategy.AssetFrailty\tTEXT\t\t388\t1\tPEnum_AssetRating\t1\r\nPARAM\t3d027598-b69b-4a78-a7de-f9ca17fb64df\tPset_MaintenanceStrategy.AssetPriority\tTEXT\t\t388\t1\tPEnum_AssetRating\t1\r\nPARAM\t49485b4a-6820-414d-a9e2-3e940abcb160\tPset_MaintenanceStrategy.MonitoringType\tTEXT\t\t388\t1\tPEnum_MonitoringType\t1\r\n#\r\nGROUP\t389\tPset_MaintenanceTriggerCondition\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta45800ff-3301-4948-9b1d-0bf025ae859c\tPset_MaintenanceTriggerCondition.ConditionDisposalLevel\tTEXT\t\t389\t1\tPEnum_AssetRating\t1\r\nPARAM\t9fc3a52c-0d4d-470f-8fe2-a61ab2c0df96\tPset_MaintenanceTriggerCondition.ConditionMaintenanceLevel\tTEXT\t\t389\t1\tPEnum_AssetRating\t1\r\nPARAM\td217f00b-2ecc-4e09-8b5d-27fd5d9e554e\tPset_MaintenanceTriggerCondition.ConditionReplacementLevel\tTEXT\t\t389\t1\tPEnum_AssetRating\t1\r\nPARAM\t92011223-ee8a-4801-97d2-28663c85cd8c\tPset_MaintenanceTriggerCondition.ConditionTargetPerformance\tTEXT\t\t389\t1\tPEnum_AssetRating\t1\r\n#\r\nGROUP\t390\tPset_MaintenanceTriggerDuration\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta195c676-b220-4c30-804f-d2cef049d52f\tPset_MaintenanceTriggerDuration.DurationDisposalLevel\tTEXT\t\t390\t1\tIfcDuration\t1\r\nPARAM\t95a3f103-e35c-4a59-a9d0-bab9818b7010\tPset_MaintenanceTriggerDuration.DurationMaintenanceLevel\tTEXT\t\t390\t1\tIfcDuration\t1\r\nPARAM\te1c47da2-172f-4e60-97bd-35638b70ccf7\tPset_MaintenanceTriggerDuration.DurationReplacementLevel\tTEXT\t\t390\t1\tIfcDuration\t1\r\nPARAM\t687f96ce-fc01-4970-9989-5fe6d01eb842\tPset_MaintenanceTriggerDuration.DurationTargetPerformance\tTEXT\t\t390\t1\tIfcDuration\t1\r\n#\r\nGROUP\t391\tPset_MaintenanceTriggerPerformance\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td073c00a-bf5b-4463-ab8b-7c30f2431f88\tPset_MaintenanceTriggerPerformance.DisposalLevel\tNUMBER\t\t391\t1\tIfcReal\t1\r\nPARAM\t77bdf668-475a-411e-915e-f03df2829d21\tPset_MaintenanceTriggerPerformance.PerformanceMaintenanceLevel\tNUMBER\t\t391\t1\tIfcReal\t1\r\nPARAM\t403155b3-eb4b-421c-973d-42a9a16dbe30\tPset_MaintenanceTriggerPerformance.ReplacementLevel\tNUMBER\t\t391\t1\tIfcReal\t1\r\nPARAM\t14254098-ea65-410e-80cd-fa9fe9584251\tPset_MaintenanceTriggerPerformance.TargetPerformance\tNUMBER\t\t391\t1\tIfcReal\t1\r\n#\r\nGROUP\t392\tPset_ManufacturerOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4bade480-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerOccurrence.AcquisitionDate\tTEXT\t\t392\t1\tIfcDate\t1\r\nPARAM\t62543b80-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerOccurrence.AssemblyPlace\tTEXT\t\t392\t1\tPEnum_AssemblyPlace\t1\r\nPARAM\t510b2f00-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerOccurrence.BarCode\tTEXT\t\t392\t1\tIfcIdentifier\t1\r\nPARAM\t5c5e5a80-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerOccurrence.BatchReference\tTEXT\t\t392\t1\tIfcIdentifier\t1\r\nPARAM\t4f703bbb-27f3-46af-8a96-8e5d9bca1968\tPset_ManufacturerOccurrence.ManufacturingDate\tTEXT\t\t392\t1\tIfcDate\t1\r\nPARAM\t56687980-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerOccurrence.SerialNumber\tTEXT\t\t392\t1\tIfcIdentifier\t1\r\n#\r\nGROUP\t393\tPset_ManufacturerTypeInformation\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7e57dd00-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.ArticleNumber\tTEXT\t\t393\t1\tIfcIdentifier\t1\r\nPARAM\t9f203280-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.AssemblyPlace\tTEXT\t\t393\t1\tPEnum_AssemblyPlace\t1\r\nPARAM\t78fa9280-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.GlobalTradeItemNumber\tTEXT\t\t393\t1\tIfcIdentifier\t1\r\nPARAM\t929bda00-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.Manufacturer\tTEXT\t\t393\t1\tIfcLabel\t1\r\nPARAM\t8c0d6280-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.ModelLabel\tTEXT\t\t393\t1\tIfcLabel\t1\r\nPARAM\t84e65480-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.ModelReference\tTEXT\t\t393\t1\tIfcLabel\t1\r\nPARAM\t2efac6fc-d68e-4da9-aa76-bab7d055069e\tPset_ManufacturerTypeInformation.OperatingWeight\tNUMBER\t\t393\t1\tIfcMassMeasure\t1\r\nPARAM\t49d77e4b-a940-4ce9-81bf-0f8c930094af\tPset_ManufacturerTypeInformation.OperationalDocument\tMULTILINETEXT\t\t393\t1\tIfcExternalReference\t1\r\nPARAM\t28dbd877-44d3-41d2-ab1a-dd200c69f5f0\tPset_ManufacturerTypeInformation.PerformanceCertificate\tMULTILINETEXT\t\t393\t1\tIfcDocumentReference\t1\r\nPARAM\t9891bb00-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.ProductionYear\tTEXT\t\t393\t1\tIfcLabel\t1\r\nPARAM\td7b3aa2e-1acc-48dc-86c3-021eb6f84ca4\tPset_ManufacturerTypeInformation.SafetyDocument\tMULTILINETEXT\t\t393\t1\tIfcDocumentReference\t1\r\nPARAM\tb7170604-cdee-47ee-882f-14fa0ecca0b1\tPset_ManufacturerTypeInformation.ShippingWeight\tNUMBER\t\t393\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t394\tPset_MarineFacilityTransportation\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8c1492e8-eeb1-4554-a226-f7ab744d15bd\tPset_MarineFacilityTransportation.BerthCargoWeight\tNUMBER\t\t394\t1\tIfcMassMeasure\t1\r\nPARAM\t3704aca4-51d7-48fd-b521-8cb138af3a1c\tPset_MarineFacilityTransportation.BerthGrade\tTEXT\t\t394\t1\tIfcLabel\t1\r\nPARAM\t0b997767-3ae7-4b74-9c4d-ef13138d87cf\tPset_MarineFacilityTransportation.Berths\tINTEGER\t\t394\t1\tIfcCountMeasure\t1\r\n#\r\nGROUP\t395\tPset_MarinePartChamberCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2fc95dac-2142-4520-aa11-57b1d8609045\tPset_MarinePartChamberCommon.EffectiveChamberSize\tVOLUME\t\t395\t1\tIfcVolumeMeasure\t1\r\nPARAM\tc8b93294-da43-4e42-8f50-79dec0e8bd50\tPset_MarinePartChamberCommon.StructuralType\tTEXT\t\t395\t1\tIfcLabel\t1\r\n#\r\nGROUP\t396\tPset_MarineVehicleCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\taffb9bdf-1018-4f79-92c7-856872a9ca33\tPset_MarineVehicleCommon.AboveDeckProjectedWindEnd\tAREA\t\t396\t1\tIfcAreaMeasure\t1\r\nPARAM\t84cf8dcf-fb66-40ea-b663-e243859bb28e\tPset_MarineVehicleCommon.AboveDeckProjectedWindSide\tAREA\t\t396\t1\tIfcAreaMeasure\t1\r\nPARAM\t783b769a-734f-4e3b-88e4-16b56f0be169\tPset_MarineVehicleCommon.CargoDeadWeight\tNUMBER\t\t396\t1\tIfcMassMeasure\t1\r\nPARAM\t933d7a52-a862-4d84-b7cf-a706d9eecd65\tPset_MarineVehicleCommon.Displacement\tNUMBER\t\t396\t1\tIfcMassMeasure\t1\r\nPARAM\tcdd08df4-bf87-4203-8e10-52d29c45faaf\tPset_MarineVehicleCommon.LaneMeters\tLENGTH\t\t396\t1\tIfcLengthMeasure\t1\r\nPARAM\tfc93a4a4-a1c2-487f-88d8-0cf5fb0a89ea\tPset_MarineVehicleCommon.LengthBetweenPerpendiculars\tLENGTH\t\t396\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc24692df-4457-4dd9-899c-608789ff6882\tPset_MarineVehicleCommon.VesselDepth\tLENGTH\t\t396\t1\tIfcLengthMeasure\t1\r\nPARAM\t880cd21a-7d3f-4c56-9810-7e5c5efe7c69\tPset_MarineVehicleCommon.VesselDraft\tLENGTH\t\t396\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t397\tPset_MarineVehicleDesignCriteria\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\taeea5cc1-8bca-4d73-8a73-65d794c12007\tPset_MarineVehicleDesignCriteria.AllowableHullPressure\tNUMBER\t\t397\t1\tIfcPressureMeasure\t1\r\nPARAM\t2e3d172c-f4f1-4428-9834-1c1a410e1964\tPset_MarineVehicleDesignCriteria.SoftnessCoefficient\tNUMBER\t\t397\t1\tIfcPositiveRatioMeasure\t1\r\n#\r\nGROUP\t398\tPset_MarkerGeneral\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1c465278-926e-4acd-8303-df9a165dfc45\tPset_MarkerGeneral.ApproachSpeed\tNUMBER\t\t398\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\t258f34cf-aea9-4cb3-8106-f2f24df433a7\tPset_MarkerGeneral.MarkerType\tTEXT\t\t398\t1\tPEnum_MarkerType\t1\r\nPARAM\td03f795f-6d65-4dc8-9df0-8f96bca1a9ce\tPset_MarkerGeneral.NominalHeight\tLENGTH\t\t398\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t5d5a74d8-f18f-463a-8f26-4726c024a3b7\tPset_MarkerGeneral.NominalWidth\tLENGTH\t\t398\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\tfd18b788-5816-4afe-923f-d6bf7c4f42c4\tPset_MarkerGeneral.Symbol\tMULTILINETEXT\t\t398\t1\tIfcExternalReference\t1\r\n#\r\nGROUP\t399\tPset_MarkingLinesCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2b1367fa-6860-41fb-ad0f-004dd88b9662\tPset_MarkingLinesCommon.DashedLine\tYESNO\t\t399\t1\tIfcBoolean\t1\r\nPARAM\t50cbc9b9-9edc-4da8-905f-d9b1eb9191c5\tPset_MarkingLinesCommon.DashedLinePattern\tTEXT\t\t399\t1\tIfcLabel\t1\r\nPARAM\t4803ca45-44c6-4c9a-9292-348b83e695c3\tPset_MarkingLinesCommon.NominalWidth\tLENGTH\t\t399\t1\tIfcNonNegativeLengthMeasure\t1\r\n#\r\nGROUP\t400\tPset_MaterialCombustion\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc7a82c80-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCombustion.CO2Content\tNUMBER\t\t400\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tc1b24b80-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCombustion.COContent\tNUMBER\t\t400\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tbc550100-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCombustion.N20Content\tNUMBER\t\t400\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tb6f7b680-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCombustion.SpecificHeatCapacity\tNUMBER\t\t400\t1\tIfcSpecificHeatCapacityMeasure\t1\r\n#\r\nGROUP\t401\tPset_MaterialCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tddb5ed00-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCommon.MassDensity\tMASS_DENSITY\t\t401\t1\tIfcMassDensityMeasure\t1\r\nPARAM\td262c180-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCommon.MolecularWeight\tNUMBER\t\t401\t1\tIfcMolecularWeightMeasure\t1\r\nPARAM\td858a280-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCommon.Porosity\tNUMBER\t\t401\t1\tIfcNormalisedRatioMeasure\t1\r\n#\r\nGROUP\t402\tPset_MaterialConcrete\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf7573480-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialConcrete.AdmixturesDescription\tTEXT\t\t402\t1\tIfcText\t1\r\nPARAM\tea3a4580-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialConcrete.CompressiveStrength\tNUMBER\t\t402\t1\tIfcPressureMeasure\t1\r\nPARAM\tf0302680-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialConcrete.MaxAggregateSize\tLENGTH\t\t402\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t076f1400-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialConcrete.ProtectivePoreRatio\tNUMBER\t\t402\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t01793300-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialConcrete.WaterImpermeability\tTEXT\t\t402\t1\tIfcText\t1\r\nPARAM\tfcb47f00-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialConcrete.Workability\tTEXT\t\t402\t1\tIfcText\t1\r\n#\r\nGROUP\t403\tPset_MaterialEnergy\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t34bbc200-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.GasPressure\tNUMBER\t\t403\t1\tIfcPressureMeasure\t1\r\nPARAM\t181f8a00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.MoistureCapacityThermalGradient\tNUMBER\t\t403\t1\tIfcReal\t1\r\nPARAM\t2f5e7780-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.SolarRefractionIndex\tNUMBER\t\t403\t1\tIfcReal\t1\r\nPARAM\t22da1f00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.SpecificHeatTemperatureDerivative\tNUMBER\t\t403\t1\tIfcReal\t1\r\nPARAM\t1e156b00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.ThermalConductivityTemperatureDerivative\tNUMBER\t\t403\t1\tIfcReal\t1\r\nPARAM\t1229a900-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.ViscosityTemperatureDerivative\tNUMBER\t\t403\t1\tIfcReal\t1\r\nPARAM\t28d00000-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.VisibleRefractionIndex\tNUMBER\t\t403\t1\tIfcReal\t1\r\n#\r\nGROUP\t404\tPset_MaterialFuel\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t44d3a180-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialFuel.CarbonContent\tNUMBER\t\t404\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t3eddc080-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialFuel.CombustionTemperature\tNUMBER\t\t404\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t4ef5a000-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialFuel.HigherHeatingValue\tNUMBER\t\t404\t1\tIfcHeatingValueMeasure\t1\r\nPARAM\t4a30ec00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialFuel.LowerHeatingValue\tNUMBER\t\t404\t1\tIfcHeatingValueMeasure\t1\r\n#\r\nGROUP\t405\tPset_MaterialHygroscopic\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t63399d00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialHygroscopic.IsothermalMoistureCapacity\tNUMBER\t\t405\t1\tIfcIsothermalMoistureCapacityMeasure\t1\r\nPARAM\t5ddc5280-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialHygroscopic.LowerVaporResistanceFactor\tNUMBER\t\t405\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t6c2a6e80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialHygroscopic.MoistureDiffusivity\tNUMBER\t\t405\t1\tIfcMoistureDiffusivityMeasure\t1\r\nPARAM\t59179e80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialHygroscopic.UpperVaporResistanceFactor\tNUMBER\t\t405\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t67fe5100-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialHygroscopic.VaporPermeability\tNUMBER\t\t405\t1\tIfcVaporPermeabilityMeasure\t1\r\n#\r\nGROUP\t406\tPset_MaterialMechanical\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t764c6d00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialMechanical.DynamicViscosity\tNUMBER\t\t406\t1\tIfcDynamicViscosityMeasure\t1\r\nPARAM\t85331f80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialMechanical.PoissonRatio\tNUMBER\t\t406\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t806e6b80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialMechanical.ShearModulus\tNUMBER\t\t406\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t8b290080-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialMechanical.ThermalExpansionCoefficient\tNUMBER\t\t406\t1\tIfcThermalExpansionCoefficientMeasure\t1\r\nPARAM\t7b112100-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialMechanical.YoungModulus\tNUMBER\t\t406\t1\tIfcModulusOfElasticityMeasure\t1\r\n#\r\nGROUP\t407\tPset_MaterialOptical\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc3304380-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.SolarReflectanceBack\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\tc7f4f780-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.SolarReflectanceFront\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t9c720d00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.SolarTransmittance\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\ta72ca200-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.ThermalIrEmissivityBack\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\tac89ec80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.ThermalIrEmissivityFront\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\ta1cf5780-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.ThermalIrTransmittance\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\tb7448180-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.VisibleReflectanceBack\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\tbd3a6280-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.VisibleReflectanceFront\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t954aff00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.VisibleTransmittance\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\r\n#\r\nGROUP\t408\tPset_MaterialSteel\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te4912f80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.HardeningModule\tNUMBER\t\t408\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\tefe45b00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.PlasticStrain\tNUMBER\t\t408\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\te9ee7a00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.ProportionalStress\tNUMBER\t\t408\t1\tIfcPressureMeasure\t1\r\nPARAM\tf541a580-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.Relaxations\tMULTILINETEXT\t\t408\t1\tPropertyTableValue\t1\r\nPARAM\t7ba1d7a6-3a89-42a9-8a38-091a0e35d433\tPset_MaterialSteel.StructuralGrade\tTEXT\t\t408\t1\tIfcLabel\t1\r\nPARAM\tdf33e500-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.UltimateStrain\tNUMBER\t\t408\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\td9d69a80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.UltimateStress\tNUMBER\t\t408\t1\tIfcPressureMeasure\t1\r\nPARAM\td3e0b980-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.YieldStress\tNUMBER\t\t408\t1\tIfcPressureMeasure\t1\r\n#\r\nGROUP\t409\tPset_MaterialThermal\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0be7fc80-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialThermal.BoilingPoint\tNUMBER\t\t409\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t11dddd80-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialThermal.FreezingPoint\tNUMBER\t\t409\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t07234880-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialThermal.SpecificHeatCapacity\tNUMBER\t\t409\t1\tIfcSpecificHeatCapacityMeasure\t1\r\nPARAM\t17d3be80-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialThermal.ThermalConductivity\tNUMBER\t\t409\t1\tIfcThermalConductivityMeasure\t1\r\n#\r\nGROUP\t410\tPset_MaterialWater\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t320d9c80-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.AcidityConcentration\tNUMBER\t\t410\t1\tIfcIonConcentrationMeasure\t1\r\nPARAM\t2cb05200-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.AlkalinityConcentration\tNUMBER\t\t410\t1\tIfcIonConcentrationMeasure\t1\r\nPARAM\t3afe6e00-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.DissolvedSolidsContent\tNUMBER\t\t410\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t27530780-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.Hardness\tNUMBER\t\t410\t1\tIfcIonConcentrationMeasure\t1\r\nPARAM\t3639ba00-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.ImpuritiesContent\tNUMBER\t\t410\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t215d2680-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.IsPotable\tYESNO\t\t410\t1\tIfcBoolean\t1\r\nPARAM\t3fc32200-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.PHLevel\tNUMBER\t\t410\t1\tIfcPHMeasure\t1\r\n#\r\nGROUP\t411\tPset_MaterialWood\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t54071f00-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.AppearanceGrade\tTEXT\t\t411\t1\tIfcLabel\t1\r\nPARAM\t6bdea300-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.DimensionalChangeCoefficient\tNUMBER\t\t411\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t5f5a4a80-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.Layers\tINTEGER\t\t411\t1\tIfcInteger\t1\r\nPARAM\t59646980-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.Layup\tTEXT\t\t411\t1\tIfcLabel\t1\r\nPARAM\t67b28580-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.MoistureContent\tNUMBER\t\t411\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t63866800-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.Plies\tINTEGER\t\t411\t1\tIfcInteger\t1\r\nPARAM\t494c8a00-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.Species\tTEXT\t\t411\t1\tIfcLabel\t1\r\nPARAM\t4ea9d480-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.StrengthGrade\tTEXT\t\t411\t1\tIfcLabel\t1\r\nPARAM\t70a35700-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.ThicknessSwelling\tNUMBER\t\t411\t1\tIfcPositiveRatioMeasure\t1\r\n#\r\nGROUP\t412\tPset_MaterialWoodBasedBeam\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7862fb80-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWoodBasedBeam.ApplicableStructuralDesignMethod\tTEXT\t\t412\t1\tIfcLabel\t1\r\nPARAM\te2154bab-c72b-4d76-8d6b-25351486c020\tPset_MaterialWoodBasedBeam.InPlane.BendingStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\t17105162-3bfa-4068-9ab3-094db158888b\tPset_MaterialWoodBasedBeam.InPlane.CompStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\t71353332-b257-4ccf-91ab-044a6b910523\tPset_MaterialWoodBasedBeam.InPlane.CompStrengthPerp\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\tdb9e5d32-9938-4f23-83af-1b286d7cc42f\tPset_MaterialWoodBasedBeam.InPlane.InstabilityFactors\tMULTILINETEXT\t\t412\t1\tPropertyTableValue\t1\r\nPARAM\t6818f3dd-ded5-4ba9-88c8-f42268fc3b87\tPset_MaterialWoodBasedBeam.InPlane.RaisedCompStrengthPerp\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\t926e5acb-cb0c-4faf-b268-4b27d849344c\tPset_MaterialWoodBasedBeam.InPlane.ReferenceDepth\tLENGTH\t\t412\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t15f0bd0e-e32d-43ee-b7cd-c27ccb2f5adc\tPset_MaterialWoodBasedBeam.InPlane.ShearModulus\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t0b28be5d-26ca-4cea-851a-ce57e5c20079\tPset_MaterialWoodBasedBeam.InPlane.ShearModulusMin\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t2eb6ae33-f3e2-4793-94af-5a347eb0b344\tPset_MaterialWoodBasedBeam.InPlane.ShearStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\t8a52008e-1c1e-4473-a8db-72918bb790ba\tPset_MaterialWoodBasedBeam.InPlane.TensileStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\t2d23b14d-e914-44d6-aefb-5de7a2ce4ed1\tPset_MaterialWoodBasedBeam.InPlane.TensileStrengthPerp\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\t4e453f1f-4a8f-4443-87e1-7a3733691c43\tPset_MaterialWoodBasedBeam.InPlane.TorsionalStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\t51595aaa-4ef9-451f-922c-b3f3919f8ed6\tPset_MaterialWoodBasedBeam.InPlane.YoungModulus\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\tb769c009-8ca6-4de2-a248-df5f73e0765c\tPset_MaterialWoodBasedBeam.InPlane.YoungModulusMin\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t70c32845-ce7f-4354-bf71-cc4c997938b6\tPset_MaterialWoodBasedBeam.InPlane.YoungModulusPerp\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t2121a8f8-8707-424e-939b-8bedc151b517\tPset_MaterialWoodBasedBeam.InPlane.YoungModulusPerpMin\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t704e6f1e-14fb-4ee5-9bd1-5f094601cb4f\tPset_MaterialWoodBasedBeam.InPlaneNegative.BendingStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\tdf75699e-c868-4ca0-a2a2-c16f968d5d51\tPset_MaterialWoodBasedBeam.InPlaneNegative.CompStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\tda08a912-e97b-45da-9d72-994e9ee67ddd\tPset_MaterialWoodBasedBeam.InPlaneNegative.CompStrengthPerp\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\t3bd36df2-ed28-4495-b355-e73a19074dbf\tPset_MaterialWoodBasedBeam.InPlaneNegative.InstabilityFactors\tMULTILINETEXT\t\t412\t1\tPropertyTableValue\t1\r\nPARAM\t04558612-ae3d-4334-b9bf-2c7f74267eee\tPset_MaterialWoodBasedBeam.InPlaneNegative.RaisedCompStrengthPerp\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\t81a0158a-081d-4765-9b5c-8021e6c228af\tPset_MaterialWoodBasedBeam.InPlaneNegative.ReferenceDepth\tLENGTH\t\t412\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t0f3b049f-4e8b-48fd-9312-b7f39e59b17c\tPset_MaterialWoodBasedBeam.InPlaneNegative.ShearModulus\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\ta6e1021b-4e7c-4eae-b5c8-f3b96ba657e1\tPset_MaterialWoodBasedBeam.InPlaneNegative.ShearModulusMin\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\tab3d6544-689b-4906-9164-4ec088d57ea8\tPset_MaterialWoodBasedBeam.InPlaneNegative.ShearStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\ta1df15d3-c9fc-4bc3-9c41-97d981790e3e\tPset_MaterialWoodBasedBeam.InPlaneNegative.TensileStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\t489c594a-866b-4c28-a6e7-8a15190078b1\tPset_MaterialWoodBasedBeam.InPlaneNegative.TensileStrengthPerp\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\t222deef7-fb1a-4fb4-868b-955726ae85cb\tPset_MaterialWoodBasedBeam.InPlaneNegative.TorsionalStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\t6be76300-4a05-4e9c-b0fb-7aee753117d2\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulus\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t508173f2-3e4f-401d-8cb1-bf22fb8de49e\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusMin\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\tfcf058dc-34f3-48b6-9b65-9f659be2607c\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusPerp\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\ta69354ab-832f-4925-9c83-71cf4a4d99b7\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusPerpMin\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t308b1604-fa7f-4b11-ba71-175ab14f7ffb\tPset_MaterialWoodBasedBeam.OutOfPlane.BendingStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\t145228e6-a32b-41f5-8dd0-f484878707f4\tPset_MaterialWoodBasedBeam.OutOfPlane.CompStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\t1cb87d67-5af5-41d7-a93f-1c77709838cf\tPset_MaterialWoodBasedBeam.OutOfPlane.CompStrengthPerp\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\t062a0680-fadb-4703-8bbb-24c8dc3af1f2\tPset_MaterialWoodBasedBeam.OutOfPlane.InstabilityFactors\tMULTILINETEXT\t\t412\t1\tPropertyTableValue\t1\r\nPARAM\tdb2eea23-e9ad-40d7-b272-a6e5f4e73e9c\tPset_MaterialWoodBasedBeam.OutOfPlane.RaisedCompStrengthPerp\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\tae54995e-d551-4653-bab6-e506707d7a30\tPset_MaterialWoodBasedBeam.OutOfPlane.ReferenceDepth\tLENGTH\t\t412\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t1015aaf1-4fc2-4835-b018-58dce54ba562\tPset_MaterialWoodBasedBeam.OutOfPlane.ShearModulus\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\te85aeb93-d81e-4875-a9a6-7f441e5bfb0a\tPset_MaterialWoodBasedBeam.OutOfPlane.ShearModulusMin\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t9767fd38-c5be-4d90-b761-93dbacb8174e\tPset_MaterialWoodBasedBeam.OutOfPlane.ShearStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\t7561e794-9158-42b6-a10e-7015c0cbcd6c\tPset_MaterialWoodBasedBeam.OutOfPlane.TensileStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\t7e0321f8-8aa7-4680-bc83-7db526890c02\tPset_MaterialWoodBasedBeam.OutOfPlane.TensileStrengthPerp\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\t1cfb8d02-520d-4c35-a6e0-80580465e624\tPset_MaterialWoodBasedBeam.OutOfPlane.TorsionalStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\r\nPARAM\ta54647c6-6eb8-44e1-bcc9-54899f7d058a\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulus\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\tca032110-df47-4660-b37c-b9c31013428d\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusMin\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t2b4ac3e3-a1f7-4d94-9081-f129fc33ab18\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusPerp\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\tb46ebb31-a823-47a7-904f-8e13e7501e34\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusPerpMin\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\r\n#\r\nGROUP\t413\tPset_MaterialWoodBasedPanel\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t75b4d600-d1ef-11e1-8000-00215ad4efdf\tPset_MaterialWoodBasedPanel.ApplicableStructuralDesignMethod\tTEXT\t\t413\t1\tIfcLabel\t1\r\nPARAM\tc3c9c431-7881-4262-ad28-abdc3d705f51\tPset_MaterialWoodBasedPanel.InPlane.BearingStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\tf82b0dc8-ae43-409c-ae6a-caceaf171fb0\tPset_MaterialWoodBasedPanel.InPlane.BendingStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\t43cbe65a-8d5c-4a76-9b98-4d0da1ff6417\tPset_MaterialWoodBasedPanel.InPlane.CompressiveStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\t84e6e3df-603f-4f14-9a0f-2d18e7bd8443\tPset_MaterialWoodBasedPanel.InPlane.RaisedCompressiveStrength\tNUMBER\t\t413\t1\tIfcPressureMeasure\t1\r\nPARAM\t48b02192-a22a-4ebe-9108-903c05361ece\tPset_MaterialWoodBasedPanel.InPlane.ReferenceDepth\tLENGTH\t\t413\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t4bd9c753-3884-422e-95e5-f0a14e6de99a\tPset_MaterialWoodBasedPanel.InPlane.ShearModulus\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t370ad6a1-4f83-48dd-a7f7-c1d8902fb274\tPset_MaterialWoodBasedPanel.InPlane.ShearStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\taef7c8bc-d73e-434d-a20f-fcf00ed7babc\tPset_MaterialWoodBasedPanel.InPlane.TensileStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\tf88795ab-f8e2-4e72-b93a-3f90f8c300ce\tPset_MaterialWoodBasedPanel.InPlane.YoungModulusBending\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\t358fc454-3454-4169-ac1e-38cc58f61634\tPset_MaterialWoodBasedPanel.InPlane.YoungModulusCompression\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t2c404c72-a4b8-49f6-a69b-ce9d0f4f37fc\tPset_MaterialWoodBasedPanel.InPlane.YoungModulusTension\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\t144dda8c-caf8-4972-806a-992577539696\tPset_MaterialWoodBasedPanel.OutOfPlane.BearingStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\tf4028709-b945-4973-9621-1c0c70294fca\tPset_MaterialWoodBasedPanel.OutOfPlane.BendingStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\t2aec861c-2b6a-4d91-b195-92ab6f03296c\tPset_MaterialWoodBasedPanel.OutOfPlane.CompressiveStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\t9a6bd43d-e78c-4ac1-9a19-e9a963c9f95a\tPset_MaterialWoodBasedPanel.OutOfPlane.RaisedCompressiveStrength\tNUMBER\t\t413\t1\tIfcPressureMeasure\t1\r\nPARAM\tcac94447-840b-4eb7-ba13-f42234111fcc\tPset_MaterialWoodBasedPanel.OutOfPlane.ReferenceDepth\tLENGTH\t\t413\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t95065e16-2735-4f45-903f-0fd09b84b851\tPset_MaterialWoodBasedPanel.OutOfPlane.ShearModulus\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\tddf4bd42-acbb-4e38-9441-691a2c19e8ea\tPset_MaterialWoodBasedPanel.OutOfPlane.ShearStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\t58fca2f8-7665-483a-942c-2629a28a4aeb\tPset_MaterialWoodBasedPanel.OutOfPlane.TensileStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\tac7bb382-cae8-43d2-8247-37032f114b80\tPset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusBending\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\t9d2f0e63-af8f-4371-8966-4aa28915e8d4\tPset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusCompression\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t6ab98e5d-6304-44aa-863f-a5eacb7aa2e3\tPset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusTension\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\t6c1f8790-7525-43e0-a1d6-e4ebf42fe435\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.BearingStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\t724f6921-b315-4083-935f-315208f9274b\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.BendingStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\ta6afa724-25b2-48a9-bfa4-6b6ccfb73306\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.CompressiveStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\tf46c6856-c20c-4cab-9d1c-ee76811b57f4\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.RaisedCompressiveStrength\tNUMBER\t\t413\t1\tIfcPressureMeasure\t1\r\nPARAM\tf73420bb-6184-40db-be11-46d9fb646fa0\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.ReferenceDepth\tLENGTH\t\t413\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf06cdc79-4544-45ce-9322-42432067a3b8\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.ShearModulus\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t4a403dcf-501d-4e78-b5ce-e728c2b6a0b6\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.ShearStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\ta4bd6014-998d-4700-92b4-d2b6dd5aeeb9\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.TensileStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\t94babf4d-76de-4389-be6c-7ead799975f8\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusBending\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\nPARAM\t1e830245-635c-4ba9-b264-1fbfb34f21c6\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusCompression\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\tb19610ec-1ce0-406e-8fa9-2fd04ee8e882\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusTension\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t414\tPset_MaterialWoodBasedStructure\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t59d9b186-788f-4d5e-9f9c-2725a79a80ca\tPset_MaterialWoodBasedStructure.ApplicableStructuralDesignMethod\tTEXT\t\t414\t1\tIfcLabel\t1\r\n#\r\nGROUP\t415\tPset_MechanicalBeamInPlane\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tefd011f8-7425-45c7-9e79-e2b263e2857b\tPset_MechanicalBeamInPlane.BendingStrength\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\r\nPARAM\t08945168-a0c0-4261-ab25-e046e98d4e2f\tPset_MechanicalBeamInPlane.CompStrength\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\r\nPARAM\tc666ce13-b799-4139-a92b-dfb058ac3e22\tPset_MechanicalBeamInPlane.CompStrengthPerp\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\r\nPARAM\t94451164-31e4-4bdf-8ddd-ecfc2286a356\tPset_MechanicalBeamInPlane.InstabilityFactors\tMULTILINETEXT\t\t415\t1\tPropertyTableValue\t1\r\nPARAM\t2e88babc-5b84-4999-b6f9-f9c06eca955a\tPset_MechanicalBeamInPlane.RaisedCompStrengthPerp\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\r\nPARAM\tdc12a702-515f-4431-8741-f1ca0baa7453\tPset_MechanicalBeamInPlane.ReferenceDepth\tLENGTH\t\t415\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t8570605c-c74b-4159-bb0c-e765566609df\tPset_MechanicalBeamInPlane.ShearModulus\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\tbec719b5-1d8d-40fc-9306-66c23a906796\tPset_MechanicalBeamInPlane.ShearModulusMin\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t3d5b6975-a494-48a8-8993-246591d2b86b\tPset_MechanicalBeamInPlane.ShearStrength\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\r\nPARAM\t646a26f1-b475-479b-a984-06b84cafc677\tPset_MechanicalBeamInPlane.TensileStrength\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\r\nPARAM\t5aa01104-2653-476f-8650-d90bc8a03a3c\tPset_MechanicalBeamInPlane.TensileStrengthPerp\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\r\nPARAM\te5cf8c5f-4c45-421f-b8d5-c6ce18ff4a41\tPset_MechanicalBeamInPlane.TorsionalStrength\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\r\nPARAM\tf4c82283-9a3e-4133-9dee-fca529915a0c\tPset_MechanicalBeamInPlane.YoungModulus\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t5ac31b88-6699-48b8-8925-a20b05b1bd28\tPset_MechanicalBeamInPlane.YoungModulusMin\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\te29eff1b-1e98-4510-be35-58d04fb2db45\tPset_MechanicalBeamInPlane.YoungModulusPerp\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t91d9cbb9-2b23-49a5-9e57-ace8fd5fbbcd\tPset_MechanicalBeamInPlane.YoungModulusPerpMin\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\r\n#\r\nGROUP\t416\tPset_MechanicalBeamInPlaneNegative\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t49c26b40-96b5-4c31-b671-09a7fc84b361\tPset_MechanicalBeamInPlaneNegative.BendingStrength\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\r\nPARAM\tceb9c85b-5645-4260-92dd-ff3ed28e267b\tPset_MechanicalBeamInPlaneNegative.CompStrength\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\r\nPARAM\t32e4adb8-3746-4827-b860-5f1b576f9954\tPset_MechanicalBeamInPlaneNegative.CompStrengthPerp\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\r\nPARAM\t5b19f4bf-887b-402d-b183-e7705ccda8b7\tPset_MechanicalBeamInPlaneNegative.InstabilityFactors\tMULTILINETEXT\t\t416\t1\tPropertyTableValue\t1\r\nPARAM\tab446b06-bfab-45b2-895f-5a348269d379\tPset_MechanicalBeamInPlaneNegative.RaisedCompStrengthPerp\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\r\nPARAM\td92cbbff-27a8-4fa0-9498-b5d62db13105\tPset_MechanicalBeamInPlaneNegative.ReferenceDepth\tLENGTH\t\t416\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t077ed7a1-2adf-4726-8aa7-7dc636ed2472\tPset_MechanicalBeamInPlaneNegative.ShearModulus\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t7e9306f4-7529-4a24-a9d0-1b1531985c25\tPset_MechanicalBeamInPlaneNegative.ShearModulusMin\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\tea7b0e23-3ef9-4ba7-bdcd-e8ddc9438ff9\tPset_MechanicalBeamInPlaneNegative.ShearStrength\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\r\nPARAM\t3736bea4-dbee-4976-a8c4-b1b0ae5729b8\tPset_MechanicalBeamInPlaneNegative.TensileStrength\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\r\nPARAM\t76a7884f-6dc5-4b5c-8498-b70e80a4c542\tPset_MechanicalBeamInPlaneNegative.TensileStrengthPerp\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\r\nPARAM\td4b8dcf2-e49f-435b-aef8-dfd0930599c7\tPset_MechanicalBeamInPlaneNegative.TorsionalStrength\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\r\nPARAM\t41f381fa-50b1-4728-825f-05a4cb3154e5\tPset_MechanicalBeamInPlaneNegative.YoungModulus\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t94dde06f-925c-4060-a000-67832f88f8bb\tPset_MechanicalBeamInPlaneNegative.YoungModulusMin\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t921a016d-72cc-47d6-8936-089bf18e51a9\tPset_MechanicalBeamInPlaneNegative.YoungModulusPerp\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\tfc4ad0e1-7b7b-4233-ba23-b368197d4cbd\tPset_MechanicalBeamInPlaneNegative.YoungModulusPerpMin\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\r\n#\r\nGROUP\t417\tPset_MechanicalBeamOutOfPlane\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tee78d422-27ef-4fdd-a8a1-66d33b8c46fb\tPset_MechanicalBeamOutOfPlane.BendingStrength\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\r\nPARAM\td0604a6f-6f11-4316-9042-07f364345228\tPset_MechanicalBeamOutOfPlane.CompStrength\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\r\nPARAM\t2b336f11-82b1-462e-b1e4-1dee67071023\tPset_MechanicalBeamOutOfPlane.CompStrengthPerp\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\r\nPARAM\t5bee75dd-88e4-4163-92cf-ca7de50392e7\tPset_MechanicalBeamOutOfPlane.InstabilityFactors\tMULTILINETEXT\t\t417\t1\tPropertyTableValue\t1\r\nPARAM\td8bbce3d-9b28-4480-b9a4-00a149ce798f\tPset_MechanicalBeamOutOfPlane.RaisedCompStrengthPerp\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\r\nPARAM\t626c2c08-76f3-4ec4-a7b4-14ebbbffa1cc\tPset_MechanicalBeamOutOfPlane.ReferenceDepth\tLENGTH\t\t417\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t2854deb8-7673-4758-b912-dd09f8416398\tPset_MechanicalBeamOutOfPlane.ShearModulus\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t6fc45276-ade6-4a31-a039-9d87383ddbcd\tPset_MechanicalBeamOutOfPlane.ShearModulusMin\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\taf2e13c5-2fd8-432c-b777-40f114bd1ee7\tPset_MechanicalBeamOutOfPlane.ShearStrength\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\r\nPARAM\t7f9c1940-2254-460c-99b7-90aad845f5ef\tPset_MechanicalBeamOutOfPlane.TensileStrength\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\r\nPARAM\t240817d5-1d70-46a7-bbad-629c6119e7c1\tPset_MechanicalBeamOutOfPlane.TensileStrengthPerp\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\r\nPARAM\t91078cef-46f1-4f75-93ae-69234df5236e\tPset_MechanicalBeamOutOfPlane.TorsionalStrength\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\r\nPARAM\tcb9154bf-735f-4588-ad0f-114ad0d5ae0c\tPset_MechanicalBeamOutOfPlane.YoungModulus\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t957db4c4-10f7-45b0-8f6a-2dafdf966494\tPset_MechanicalBeamOutOfPlane.YoungModulusMin\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t00f918d7-7bd3-4d28-a765-8584f087a695\tPset_MechanicalBeamOutOfPlane.YoungModulusPerp\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t32652501-c784-41a1-9bed-079184a5856c\tPset_MechanicalBeamOutOfPlane.YoungModulusPerpMin\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\r\n#\r\nGROUP\t418\tPset_MechanicalFastenerAnchorBolt\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tca0c8580-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerAnchorBolt.AnchorBoltDiameter\tLENGTH\t\t418\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc37e0e00-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerAnchorBolt.AnchorBoltLength\tLENGTH\t\t418\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td8f33800-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerAnchorBolt.AnchorBoltProtrusionLength\tLENGTH\t\t418\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td1cc2a00-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerAnchorBolt.AnchorBoltThreadLength\tLENGTH\t\t418\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t419\tPset_MechanicalFastenerBolt\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tff18d800-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.HeadShape\tTEXT\t\t419\t1\tIfcLabel\t1\r\nPARAM\t05a74f80-d1f1-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.KeyShape\tTEXT\t\t419\t1\tIfcLabel\t1\r\nPARAM\tf45e4300-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.NutsCount\tINTEGER\t\t419\t1\tIfcCountMeasure\t1\r\nPARAM\t0b9d3080-d1f1-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.NutShape\tTEXT\t\t419\t1\tIfcLabel\t1\r\nPARAM\te7d9ea80-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.ThreadDiameter\tLENGTH\t\t419\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tee686200-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.ThreadLength\tLENGTH\t\t419\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tfa542400-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.WashersCount\tINTEGER\t\t419\t1\tIfcCountMeasure\t1\r\nPARAM\t1d7ed380-d1f1-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.WasherShape\tTEXT\t\t419\t1\tIfcLabel\t1\r\n#\r\nGROUP\t420\tPset_MechanicalFastenerCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t482e19c8-276b-41ed-b957-d1de040e5e61\tPset_MechanicalFastenerCommon.NominalDiameter\tLENGTH\t\t420\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t7de3f008-a07a-4194-ba6c-4bf07a65334e\tPset_MechanicalFastenerCommon.NominalLength\tLENGTH\t\t420\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t421\tPset_MechanicalFastenerOCSFitting\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t9c4ae207-1994-40e3-a630-c37746b1d0e0\tPset_MechanicalFastenerOCSFitting.ManufacturingTechnology\tTEXT\t\t421\t1\tIfcLabel\t1\r\nPARAM\t9d8f3024-5b8a-42cc-9cf7-19aad15774e1\tPset_MechanicalFastenerOCSFitting.OCSFasteningType\tTEXT\t\t421\t1\tPEnum_OCSFasteningType\t1\r\n#\r\nGROUP\t422\tPset_MechanicalFastenerTypeRailFastening\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tdeb4f54c-2877-49fc-9ee2-54373f340606\tPset_MechanicalFastenerTypeRailFastening.IsReducedResistanceFastening\tYESNO\t\t422\t1\tIfcBoolean\t1\r\nPARAM\tdaf85903-63ee-484a-bc4b-12c695102738\tPset_MechanicalFastenerTypeRailFastening.TechnicalStandard\tMULTILINETEXT\t\t422\t1\tIfcExternalReference\t1\r\nPARAM\tc95da3aa-52f9-4500-864b-60b5af429ae4\tPset_MechanicalFastenerTypeRailFastening.TrackFasteningElasticityType\tTEXT\t\t422\t1\tPEnum_TrackFasteningElasticityType\t1\r\n#\r\nGROUP\t423\tPset_MechanicalFastenerTypeRailJoint\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tfe437df9-b829-485e-b0d2-d800caf948c0\tPset_MechanicalFastenerTypeRailJoint.AssemblyPlace\tTEXT\t\t423\t1\tPEnum_AssemblyPlace\t1\r\nPARAM\t4d596130-a46a-43cf-a257-c041b60c732d\tPset_MechanicalFastenerTypeRailJoint.IsCWRJoint\tYESNO\t\t423\t1\tIfcBoolean\t1\r\nPARAM\t6cfa1db7-5aa5-4871-98ff-e2255f324cd8\tPset_MechanicalFastenerTypeRailJoint.IsJointControlEquipment\tYESNO\t\t423\t1\tIfcBoolean\t1\r\nPARAM\tde3e761c-1a31-4c6c-8566-0b3571affa13\tPset_MechanicalFastenerTypeRailJoint.IsJointInsulated\tYESNO\t\t423\t1\tIfcBoolean\t1\r\nPARAM\t8ffea8d6-9937-4249-8c13-ba330089a377\tPset_MechanicalFastenerTypeRailJoint.IsLiftingBracketConnection\tYESNO\t\t423\t1\tIfcBoolean\t1\r\nPARAM\t42aac79d-0179-40d2-b11d-1408f80e6bc0\tPset_MechanicalFastenerTypeRailJoint.NumberOfScrews\tINTEGER\t\t423\t1\tIfcCountMeasure\t1\r\nPARAM\t1e62a13e-e4ee-444f-a373-cfd4ec67bfd3\tPset_MechanicalFastenerTypeRailJoint.RailGap\tLENGTH\t\t423\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tce2bc36d-38fc-4fd2-91eb-d143e6da5fe4\tPset_MechanicalFastenerTypeRailJoint.SleeperArrangement\tTEXT\t\t423\t1\tPEnum_SleeperArrangement\t1\r\n#\r\nGROUP\t424\tPset_MechanicalPanelInPlane\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t9a160b3d-f523-42c0-bd23-6dd936b5ffa5\tPset_MechanicalPanelInPlane.BearingStrength\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\r\nPARAM\tf5f88910-7939-48d7-a3a3-a27e10b3ba12\tPset_MechanicalPanelInPlane.BendingStrength\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\r\nPARAM\t8ddc1722-e8cd-4ddb-b3c8-3651fd9e683a\tPset_MechanicalPanelInPlane.CompressiveStrength\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\r\nPARAM\t47836f51-ff6f-4738-acf8-9457eaa98627\tPset_MechanicalPanelInPlane.RaisedCompressiveStrength\tNUMBER\t\t424\t1\tIfcPressureMeasure\t1\r\nPARAM\ta8cdbfc4-c715-419b-8fbc-63c1159c28ee\tPset_MechanicalPanelInPlane.ReferenceDepth\tLENGTH\t\t424\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t48526df9-789b-47fe-a714-cc6ac518d2c7\tPset_MechanicalPanelInPlane.ShearModulus\tNUMBER\t\t424\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t76189f8e-d1ac-4992-baea-2bbef11ae878\tPset_MechanicalPanelInPlane.ShearStrength\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\r\nPARAM\tb725d71b-bb0b-4e53-8266-4ddd75024de4\tPset_MechanicalPanelInPlane.TensileStrength\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\r\nPARAM\t5f999df2-eca6-4070-a3f1-fcf32c1bf225\tPset_MechanicalPanelInPlane.YoungModulusBending\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\r\nPARAM\t262313de-2a07-445e-bc78-694801fd7e19\tPset_MechanicalPanelInPlane.YoungModulusCompression\tNUMBER\t\t424\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t52b477cd-3c2d-4fd0-a8f2-573060f2c2e7\tPset_MechanicalPanelInPlane.YoungModulusTension\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t425\tPset_MechanicalPanelOutOfPlane\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t791156b5-41f0-4d50-a2de-806c49768c59\tPset_MechanicalPanelOutOfPlane.BearingStrength\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\r\nPARAM\tb4564007-3407-427f-8c73-24430ac039af\tPset_MechanicalPanelOutOfPlane.BendingStrength\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\r\nPARAM\tc6e24dec-efd5-4f35-9ce8-f0e1315f96a8\tPset_MechanicalPanelOutOfPlane.CompressiveStrength\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\r\nPARAM\td1d52f8b-0de9-4422-bc80-7fd05d2235af\tPset_MechanicalPanelOutOfPlane.RaisedCompressiveStrength\tNUMBER\t\t425\t1\tIfcPressureMeasure\t1\r\nPARAM\ta1420895-d8d1-4689-88e1-a8d4842f9c37\tPset_MechanicalPanelOutOfPlane.ReferenceDepth\tLENGTH\t\t425\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tfa40c1a2-2672-4bf9-8134-984dbd1002dc\tPset_MechanicalPanelOutOfPlane.ShearModulus\tNUMBER\t\t425\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t622110f3-b321-4a27-9f6c-c0b06afa95bd\tPset_MechanicalPanelOutOfPlane.ShearStrength\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\r\nPARAM\tc8f2efd6-83f6-476e-82dd-6ba44388b5ee\tPset_MechanicalPanelOutOfPlane.TensileStrength\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\r\nPARAM\t0ec36f01-c5a5-4459-a70d-bd9839a2a807\tPset_MechanicalPanelOutOfPlane.YoungModulusBending\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\r\nPARAM\t05bd5a0e-04a1-4f71-8e74-22b532190d8a\tPset_MechanicalPanelOutOfPlane.YoungModulusCompression\tNUMBER\t\t425\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\t5932fa42-c521-476d-ae85-4f895da1b715\tPset_MechanicalPanelOutOfPlane.YoungModulusTension\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t426\tPset_MechanicalPanelOutOfPlaneNegative\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4e159de4-1cec-4b6c-8c3c-fcb796381eb1\tPset_MechanicalPanelOutOfPlaneNegative.BearingStrength\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\r\nPARAM\t9401f1b9-f21e-426c-8cbf-b0036c4daa07\tPset_MechanicalPanelOutOfPlaneNegative.BendingStrength\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\r\nPARAM\t0f86796b-bf5a-4432-bb91-d22d3cde9103\tPset_MechanicalPanelOutOfPlaneNegative.CompressiveStrength\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\r\nPARAM\t311f5c7d-065c-47e1-94a3-f4362ead8598\tPset_MechanicalPanelOutOfPlaneNegative.RaisedCompressiveStrength\tNUMBER\t\t426\t1\tIfcPressureMeasure\t1\r\nPARAM\t0fc6202d-e36c-40b2-9d3d-afb2da1b4b00\tPset_MechanicalPanelOutOfPlaneNegative.ReferenceDepth\tLENGTH\t\t426\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t0bd62322-c7b6-49f6-9f68-ac3880322fce\tPset_MechanicalPanelOutOfPlaneNegative.ShearModulus\tNUMBER\t\t426\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\tec1004f3-9c7b-4bc4-a17f-3ca0bcc811db\tPset_MechanicalPanelOutOfPlaneNegative.ShearStrength\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\r\nPARAM\tbc348d44-b25b-4c2d-96b2-3cc111406a45\tPset_MechanicalPanelOutOfPlaneNegative.TensileStrength\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\r\nPARAM\tce4c7408-5e0d-47f4-8e48-0a924648e7fc\tPset_MechanicalPanelOutOfPlaneNegative.YoungModulusBending\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\r\nPARAM\t204f0ba2-9df2-47ef-96c7-fdecbe226569\tPset_MechanicalPanelOutOfPlaneNegative.YoungModulusCompression\tNUMBER\t\t426\t1\tIfcModulusOfElasticityMeasure\t1\r\nPARAM\tb0198ac5-7cb0-4595-bae9-ae6a44f465a3\tPset_MechanicalPanelOutOfPlaneNegative.YoungModulusTension\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t427\tPset_MedicalDeviceTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2a032c00-d1f1-11e1-8000-00215ad4efdf\tPset_MedicalDeviceTypeCommon.Reference\tTEXT\t\t427\t1\tIfcIdentifier\t1\r\nPARAM\t2ff90d00-d1f1-11e1-8000-00215ad4efdf\tPset_MedicalDeviceTypeCommon.Status\tTEXT\t\t427\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t428\tPset_MemberCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t80706a80-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.FireRating\tTEXT\t\t428\t1\tIfcLabel\t1\r\nPARAM\t6e8ec780-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.IsExternal\tYESNO\t\t428\t1\tIfcBoolean\t1\r\nPARAM\t7a7a8980-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.LoadBearing\tYESNO\t\t428\t1\tIfcBoolean\t1\r\nPARAM\t499a5480-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.Reference\tTEXT\t\t428\t1\tIfcIdentifier\t1\r\nPARAM\t69317d00-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.Roll\tNUMBER\t\t428\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t646cc900-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.Slope\tNUMBER\t\t428\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t5dde5180-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.Span\tLENGTH\t\t428\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t4f903580-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.Status\tTEXT\t\t428\t1\tPEnum_ElementStatus\t1\r\nPARAM\t7484a880-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.ThermalTransmittance\tNUMBER\t\t428\t1\tIfcThermalTransmittanceMeasure\t1\r\n#\r\nGROUP\t429\tPset_MemberTypeAnchoringBar\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta1d40145-2534-446b-a9d2-13893b9d122b\tPset_MemberTypeAnchoringBar.HasLightningRod\tYESNO\t\t429\t1\tIfcBoolean\t1\r\nPARAM\t7f3ee041-2500-448a-8174-3219d1ab7711\tPset_MemberTypeAnchoringBar.MechanicalStressType\tTEXT\t\t429\t1\tPEnum_MechanicalStressType\t1\r\n#\r\nGROUP\t430\tPset_MemberTypeCatenaryStay\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8d143812-d9de-46c8-99fe-48fc378dc218\tPset_MemberTypeCatenaryStay.AssemblyInstruction\tMULTILINETEXT\t\t430\t1\tIfcExternalReference\t1\r\nPARAM\tb9966025-f281-421e-99cb-0a98039bae47\tPset_MemberTypeCatenaryStay.CatenaryStayType\tTEXT\t\t430\t1\tPEnum_CatenaryStayType\t1\r\nPARAM\td60e906b-9297-4f94-a2fa-00122335e0bc\tPset_MemberTypeCatenaryStay.NominalHeight\tLENGTH\t\t430\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t907def15-0180-478e-ba79-ae340f55c410\tPset_MemberTypeCatenaryStay.NominalLength\tLENGTH\t\t430\t1\tIfcNonNegativeLengthMeasure\t1\r\n#\r\nGROUP\t431\tPset_MemberTypeOCSRigidSupport\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc90bea72-162f-4290-a11a-a84945418cc5\tPset_MemberTypeOCSRigidSupport.AssemblyInstruction\tMULTILINETEXT\t\t431\t1\tIfcExternalReference\t1\r\nPARAM\td49c4b06-f4a3-4410-ab4a-9bcb9869d347\tPset_MemberTypeOCSRigidSupport.ContactWireStagger\tLENGTH\t\t431\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t432\tPset_MemberTypePost\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t833ecee9-f808-4739-b740-491b850a99e7\tPset_MemberTypePost.BendingStrength\tNUMBER\t\t432\t1\tIfcPressureMeasure\t1\r\nPARAM\t5f496918-1bac-402c-b636-e797a4c23120\tPset_MemberTypePost.ConicityRatio\tNUMBER\t\t432\t1\tIfcRatioMeasure\t1\r\nPARAM\t0ea8edf7-24cb-4adb-999e-98d08820c052\tPset_MemberTypePost.LoadBearingCapacity\tNUMBER\t\t432\t1\tIfcPlanarForceMeasure\t1\r\nPARAM\t9d8523e9-21db-46d4-a86f-4b4f6e9794e2\tPset_MemberTypePost.NominalHeight\tLENGTH\t\t432\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\tc9f942e9-8065-4fe3-b2cd-4eae65335e16\tPset_MemberTypePost.TorsionalStrength\tNUMBER\t\t432\t1\tIfcPressureMeasure\t1\r\nPARAM\t34d408c0-d269-418d-827c-428691c7381f\tPset_MemberTypePost.WindLoadRating\tTEXT\t\t432\t1\tIfcLabel\t1\r\n#\r\nGROUP\t433\tPset_MemberTypeTieBar\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t51d5aab9-5866-48e2-8589-2f4af3289c0e\tPset_MemberTypeTieBar.IsTemporaryInstallation\tYESNO\t\t433\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t434\tPset_MobileTelecommunicationsApplianceTypeAccessPoint\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te8404524-b378-4a94-b7de-73ca4910ef05\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.BandWidth\tNUMBER\t\t434\t1\tIfcFrequencyMeasure\t1\r\nPARAM\t3d350234-da62-40d7-9a26-4daad8f04357\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.DataEncryptionType\tTEXT\t\t434\t1\tIfcLabel\t1\r\nPARAM\tf8c64ad8-4f93-46b6-85b5-fdb163e43d63\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.DataExchangeRate\tINTEGER\t\t434\t1\tIfcIntegerCountRateMeasure\t1\r\nPARAM\t8cf6766f-cea0-4982-ac2d-322c9f5997d3\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.NumberOfAntennas\tINTEGER\t\t434\t1\tIfcCountMeasure\t1\r\nPARAM\tadb3c2ea-b0dc-4edb-a083-a11b6dbffe60\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.NumberOfInterfaces\tMULTILINETEXT\t\t434\t1\tPropertyTableValue\t1\r\nPARAM\t96e599ee-8faf-4c5d-84c5-14f9a226a1b9\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.UserCapacity\tINTEGER\t\t434\t1\tIfcInteger\t1\r\n#\r\nGROUP\t435\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5de47739-22fc-4fdd-a66e-de7aaa373c74\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit.MaximumNumberOfRRUs\tINTEGER\t\t435\t1\tIfcInteger\t1\r\nPARAM\t72b3fe02-9ea5-4ca2-b069-f07235f6faf7\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit.NumberOfCarriers\tINTEGER\t\t435\t1\tIfcCountMeasure\t1\r\nPARAM\tdcca868a-7d10-42e4-aead-72fc41af1ead\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit.NumberOfEmergencyTransceivers\tINTEGER\t\t435\t1\tIfcCountMeasure\t1\r\nPARAM\tb829f099-fcaa-4ebd-91c0-dac779bb5ad1\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit.NumberOfInterfaces\tMULTILINETEXT\t\t435\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t436\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc0cdf453-069d-42c6-b1e4-4ded55841fcc\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.DownlinkRadioBand\tMULTILINETEXT\t\t436\t1\tPropertyBoundedValue\t1\r\nPARAM\t33be4654-bfe2-4f19-b6c8-8744cfb5c5b6\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.ExchangeCapacity\tINTEGER\t\t436\t1\tIfcInteger\t1\r\nPARAM\t5bcdbe48-eb0e-49d2-85f7-4a3802f0b648\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfAntennas\tINTEGER\t\t436\t1\tIfcCountMeasure\t1\r\nPARAM\t9978d088-6046-4171-b7e6-84e9ef27f534\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfCarriers\tINTEGER\t\t436\t1\tIfcCountMeasure\t1\r\nPARAM\te311d8cf-89f6-49f5-b556-559cab2249c4\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfEmergencyTransceivers\tINTEGER\t\t436\t1\tIfcCountMeasure\t1\r\nPARAM\tb2288036-bb3d-4b36-a66f-399cc9184615\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfInterfaces\tMULTILINETEXT\t\t436\t1\tPropertyTableValue\t1\r\nPARAM\te5b477c3-000e-43e6-9056-5c487d194dce\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfTransceiversPerAntenna\tMULTILINETEXT\t\t436\t1\tPropertyTableValue\t1\r\nPARAM\t0f95c582-85dc-4eac-b0e5-3eed6d08ecd2\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.RadiatedOutputPowerPerAntenna\tMULTILINETEXT\t\t436\t1\tPropertyTableValue\t1\r\nPARAM\ta2a7174d-9362-4595-9dbb-5b040c3cf4b9\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.UplinkRadioBand\tMULTILINETEXT\t\t436\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t437\tPset_MobileTelecommunicationsApplianceTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t64a94f73-c16e-42ea-86c0-e1e274ae9e36\tPset_MobileTelecommunicationsApplianceTypeCommon.Reference\tTEXT\t\t437\t1\tIfcIdentifier\t1\r\nPARAM\tdf5a7221-a980-46bc-b8e0-5c9f82a22d13\tPset_MobileTelecommunicationsApplianceTypeCommon.Status\tTEXT\t\t437\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t438\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t789e237a-82d5-4215-82ff-7db2bab26bd7\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.DownlinkRadioBand\tMULTILINETEXT\t\t438\t1\tPropertyBoundedValue\t1\r\nPARAM\t97dcd68d-c3fe-42a1-8936-b083dc07a265\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.NumberOfAntennas\tINTEGER\t\t438\t1\tIfcCountMeasure\t1\r\nPARAM\t2c8ed9c1-ea6d-477f-b2ab-d34f9a7f5f6a\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.NumberOfCarriers\tINTEGER\t\t438\t1\tIfcCountMeasure\t1\r\nPARAM\td5bc40c7-6867-4a31-bdc2-4976a3d25c22\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.NumberOfInterfaces\tMULTILINETEXT\t\t438\t1\tPropertyTableValue\t1\r\nPARAM\t54091cfb-9c10-460d-9809-397a9d3df3e1\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.RadiatedOutputPowerPerAntenna\tMULTILINETEXT\t\t438\t1\tPropertyTableValue\t1\r\nPARAM\ta8d5aa6d-e1e9-4efd-9cca-f79e76a3aac7\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.UplinkRadioBand\tMULTILINETEXT\t\t438\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t439\tPset_MobileTelecommunicationsApplianceTypeMasterUnit\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t41973d4f-537c-4c70-807b-bd0632384b4d\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.MasterUnitType\tTEXT\t\t439\t1\tPEnum_MasterUnitType\t1\r\nPARAM\t33e049f7-0dbc-40ed-9103-ebac10866222\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.MaximumNumberOfConnectedRUs\tINTEGER\t\t439\t1\tIfcInteger\t1\r\nPARAM\t0714f6e6-fc43-495b-823c-d5d032502af7\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.NumberOfInterfaces\tMULTILINETEXT\t\t439\t1\tPropertyTableValue\t1\r\nPARAM\t9d9b0eed-f4b7-4083-8fff-0cad0a200945\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmissionType\tTEXT\t\t439\t1\tPEnum_TransmissionType\t1\r\nPARAM\t274735c6-1dc6-4299-808a-c4b9aa1866b2\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmittedBandwidth\tNUMBER\t\t439\t1\tIfcFrequencyMeasure\t1\r\nPARAM\t645a85e2-547b-4418-bf6d-c62092c51ab1\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmittedFrequency\tNUMBER\t\t439\t1\tIfcFrequencyMeasure\t1\r\nPARAM\t3929997e-90ac-4544-b484-50f6d1ffab87\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmittedSignal\tTEXT\t\t439\t1\tPEnum_TransmittedSignal\t1\r\n#\r\nGROUP\t440\tPset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4a4b5f3c-0705-44f4-b211-2abe5aab9365\tPset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter.MaximumNumberOfManagedBSCs\tINTEGER\t\t440\t1\tIfcInteger\t1\r\nPARAM\t16aa0c29-0ad2-4997-8fd9-8b88493977de\tPset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter.NumberOfInterfaces\tMULTILINETEXT\t\t440\t1\tPropertyTableValue\t1\r\nPARAM\ta2d9ee96-cd11-4c43-91d9-1f2886d89569\tPset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter.UserCapacity\tINTEGER\t\t440\t1\tIfcInteger\t1\r\n#\r\nGROUP\t441\tPset_MobileTelecommunicationsApplianceTypeMSCServer\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb3656add-16fe-4d54-8fbf-2ee6785dedad\tPset_MobileTelecommunicationsApplianceTypeMSCServer.NumberOfInterfaces\tMULTILINETEXT\t\t441\t1\tPropertyTableValue\t1\r\nPARAM\t7ec6e92f-561e-49a2-ba94-49af51cfde6d\tPset_MobileTelecommunicationsApplianceTypeMSCServer.UserCapacity\tINTEGER\t\t441\t1\tIfcInteger\t1\r\n#\r\nGROUP\t442\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2586ab53-c6b1-4368-a2a3-10a197ba0ee6\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.AntennaType\tTEXT\t\t442\t1\tIfcLabel\t1\r\nPARAM\t1f258deb-0067-47a5-a3ad-85cf3726915b\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.DownlinkRadioBand\tMULTILINETEXT\t\t442\t1\tPropertyBoundedValue\t1\r\nPARAM\t8923ceef-d1d0-4499-85ac-4588d9b171d4\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.NumberOfCarriers\tINTEGER\t\t442\t1\tIfcCountMeasure\t1\r\nPARAM\tf408892e-9f0e-4f53-9040-7e62fee62ecf\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.NumberOfInterfaces\tMULTILINETEXT\t\t442\t1\tPropertyTableValue\t1\r\nPARAM\td4ac1a96-922b-41b7-97c7-b3701f4a59c0\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.NumberOfTransceiversPerAntenna\tMULTILINETEXT\t\t442\t1\tPropertyTableValue\t1\r\nPARAM\t0e9e2535-6d50-4564-b3ae-cf3d42517b35\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.RadiatedOutputPowerPerAntenna\tMULTILINETEXT\t\t442\t1\tPropertyTableValue\t1\r\nPARAM\t2c09452c-4fe0-4fb4-b987-e8daf5ed087b\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.RRUConnectionType\tTEXT\t\t442\t1\tPEnum_UnitConnectionType\t1\r\nPARAM\t355faa79-0680-4cce-bb6e-2ff2356584f8\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.UplinkRadioBand\tMULTILINETEXT\t\t442\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t443\tPset_MobileTelecommunicationsApplianceTypeRemoteUnit\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta4c97fbe-55bd-47fd-a211-ad80564ce6d8\tPset_MobileTelecommunicationsApplianceTypeRemoteUnit.NumberOfAntennas\tINTEGER\t\t443\t1\tIfcCountMeasure\t1\r\nPARAM\tf937fc33-3fd4-43b3-b409-7433d90b7d34\tPset_MobileTelecommunicationsApplianceTypeRemoteUnit.NumberOfInterfaces\tMULTILINETEXT\t\t443\t1\tPropertyTableValue\t1\r\nPARAM\t04682ae5-5249-40c0-b8ac-c618d6d2c49e\tPset_MobileTelecommunicationsApplianceTypeRemoteUnit.RUConnectionType\tTEXT\t\t443\t1\tPEnum_UnitConnectionType\t1\r\n#\r\nGROUP\t444\tPset_MooringDeviceCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tfb25185b-99b7-4a0d-8a45-39bf3335152e\tPset_MooringDeviceCommon.AnchorageType\tTEXT\t\t444\t1\tPEnum_AnchorageType\t1\r\nPARAM\t9b98adbc-2bf3-47d2-b49c-30dca06d37fe\tPset_MooringDeviceCommon.DeviceCapacity\tNUMBER\t\t444\t1\tIfcForceMeasure\t1\r\nPARAM\t8f0b3bcc-7d9d-4af4-9bc3-5be3f2d88167\tPset_MooringDeviceCommon.DeviceType\tTEXT\t\t444\t1\tPEnum_MooringDeviceType\t1\r\nPARAM\t7700434d-4f3f-40be-bfc2-f183b5271ef4\tPset_MooringDeviceCommon.MaximumLineCount\tINTEGER\t\t444\t1\tIfcCountMeasure\t1\r\nPARAM\tcb40b5c6-7a29-4f3e-815a-3156874f962e\tPset_MooringDeviceCommon.MaximumLineSlope\tNUMBER\t\t444\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t2e1d9cad-580b-4e8f-b675-b0ac41527488\tPset_MooringDeviceCommon.MinumumLineSlope\tNUMBER\t\t444\t1\tIfcPlaneAngleMeasure\t1\r\n#\r\nGROUP\t445\tPset_MotorConnectionTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8c5c2c80-d1f1-11e1-8000-00215ad4efdf\tPset_MotorConnectionTypeCommon.Reference\tTEXT\t\t445\t1\tIfcIdentifier\t1\r\nPARAM\t92eaa400-d1f1-11e1-8000-00215ad4efdf\tPset_MotorConnectionTypeCommon.Status\tTEXT\t\t445\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t446\tPset_MultiStateInput\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t06946206-f372-4270-bf63-d2ee539f364b\tPset_MultiStateInput.AlarmValues\tMULTILINETEXT\t\t446\t1\tPropertyListValue\t1\r\nPARAM\td57ee4b2-9ead-4f20-aed9-6a4076eff45c\tPset_MultiStateInput.EventEnable\tTEXT\t\t446\t1\tPEnum_BACnetEventEnableType\t1\r\nPARAM\t3e46427b-9f2d-4d51-8c38-51ef898aad02\tPset_MultiStateInput.NotifyType\tTEXT\t\t446\t1\tPEnum_BACnetNotifyType\t1\r\nPARAM\t268c8786-f8c7-40d0-a202-fd5f0573ba62\tPset_MultiStateInput.NumberOfStates\tINTEGER\t\t446\t1\tIfcInteger\t1\r\nPARAM\t39b828fa-0532-4906-8f9a-7936b80f4719\tPset_MultiStateInput.StateText\tMULTILINETEXT\t\t446\t1\tPropertyListValue\t1\r\n#\r\nGROUP\t447\tPset_MultiStateOutput\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t82975ab4-bae6-47f7-b124-2c50ad8135b9\tPset_MultiStateOutput.AlarmValues\tMULTILINETEXT\t\t447\t1\tPropertyListValue\t1\r\nPARAM\t1e7f2c86-1462-4b30-9262-c359911fe603\tPset_MultiStateOutput.EventEnable\tTEXT\t\t447\t1\tPEnum_BACnetEventEnableType\t1\r\nPARAM\tf53a71ed-fe81-40dd-b12f-8e0e87de7781\tPset_MultiStateOutput.NotifyType\tTEXT\t\t447\t1\tPEnum_BACnetNotifyType\t1\r\nPARAM\t39232871-fc8b-4d48-881f-4e8584ca40db\tPset_MultiStateOutput.NumberOfStates\tINTEGER\t\t447\t1\tIfcInteger\t1\r\nPARAM\t2f892694-be57-42ce-af8b-e4e6606cb4e3\tPset_MultiStateOutput.StateText\tMULTILINETEXT\t\t447\t1\tPropertyListValue\t1\r\n#\r\nGROUP\t448\tPset_OnSiteCastKerb\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t46ac5b38-abe9-4e5b-ac0a-ae0d207ea928\tPset_OnSiteCastKerb.NominalHeight\tLENGTH\t\t448\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t04aeb6a4-5d10-441f-afbd-30298ab9854a\tPset_OnSiteCastKerb.NominalWidth\tLENGTH\t\t448\t1\tIfcNonNegativeLengthMeasure\t1\r\n#\r\nGROUP\t449\tPset_OnSiteTelecomControlUnit\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t833a9f8d-ac42-4d33-b97e-55c8aebe11e1\tPset_OnSiteTelecomControlUnit.ControllerInterfaceType\tTEXT\t\t449\t1\tPEnum_ControllerInterfaceType\t1\r\nPARAM\t0bef247f-c990-44a7-8216-e011453951b2\tPset_OnSiteTelecomControlUnit.HasEarthquakeAlarm\tYESNO\t\t449\t1\tIfcBoolean\t1\r\nPARAM\t5fe731e4-4229-4a8a-b4df-844224ecd5a6\tPset_OnSiteTelecomControlUnit.HasEarthquakeCollection\tYESNO\t\t449\t1\tIfcBoolean\t1\r\nPARAM\t76d929f2-e857-439d-b6cf-b3a8f227d434\tPset_OnSiteTelecomControlUnit.HasForeignObjectCollection\tYESNO\t\t449\t1\tIfcBoolean\t1\r\nPARAM\t1489329d-f222-4594-ac0e-507f1bdaba34\tPset_OnSiteTelecomControlUnit.HasOutputFunction\tYESNO\t\t449\t1\tIfcBoolean\t1\r\nPARAM\tfaaa9591-79a8-48a7-bcc2-f5faee611b9f\tPset_OnSiteTelecomControlUnit.HasRainCollection\tYESNO\t\t449\t1\tIfcBoolean\t1\r\nPARAM\t9c97296a-7075-44f3-9e51-eee9e8bc2e77\tPset_OnSiteTelecomControlUnit.HasSnowCollection\tYESNO\t\t449\t1\tIfcBoolean\t1\r\nPARAM\t7926bea0-d9ec-43bb-96df-dd5a6c199150\tPset_OnSiteTelecomControlUnit.HasWindCollection\tYESNO\t\t449\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t450\tPset_OpeningElementCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t41656e1a-f18d-4e8e-8737-f83dce2bc71d\tPset_OpeningElementCommon.AcousticRating\tTEXT\t\t450\t1\tIfcLabel\t1\r\nPARAM\tc0cfe880-d1f1-11e1-8000-00215ad4efdf\tPset_OpeningElementCommon.FireExit\tYESNO\t\t450\t1\tIfcBoolean\t1\r\nPARAM\t13f51b9f-f0c3-45b4-9dfe-c8daf70c7c68\tPset_OpeningElementCommon.FireRating\tTEXT\t\t450\t1\tIfcLabel\t1\r\nPARAM\t9bc90a19-6b9e-4d03-8ae3-1a4c88810da5\tPset_OpeningElementCommon.ParallelJambs\tNUMBER\t\t450\t1\tIfcBoolean \t1\r\nPARAM\tc7f6f680-d1f1-11e1-8000-00215ad4efdf\tPset_OpeningElementCommon.ProtectedOpening\tYESNO\t\t450\t1\tIfcBoolean\t1\r\nPARAM\tbada0780-d1f1-11e1-8000-00215ad4efdf\tPset_OpeningElementCommon.Purpose\tTEXT\t\t450\t1\tIfcLabel\t1\r\nPARAM\ta72ea100-d1f1-11e1-8000-00215ad4efdf\tPset_OpeningElementCommon.Reference\tTEXT\t\t450\t1\tIfcIdentifier\t1\r\nPARAM\tad248200-d1f1-11e1-8000-00215ad4efdf\tPset_OpeningElementCommon.Status\tTEXT\t\t450\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t451\tPset_OpticalAdapter\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc99de81f-e4f0-464d-b8ed-764921347c0c\tPset_OpticalAdapter.FiberType\tTEXT\t\t451\t1\tPEnum_FiberType\t1\r\n#\r\nGROUP\t452\tPset_OpticalPigtail\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t68bf7713-4676-4ebb-b683-70d95f998163\tPset_OpticalPigtail.ConnectorType\tTEXT\t\t452\t1\tIfcLabel\t1\r\nPARAM\t42902e77-1ffa-4e84-b4e9-71f6e3e82d65\tPset_OpticalPigtail.FiberType\tTEXT\t\t452\t1\tPEnum_FiberType\t1\r\nPARAM\t5b91f936-45a0-41fa-9446-addde128524a\tPset_OpticalPigtail.JacketColour\tTEXT\t\t452\t1\tIfcLabel\t1\r\n#\r\nGROUP\t453\tPset_OpticalSplitter\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8ba043c8-4675-43bf-998c-318ed8c7befb\tPset_OpticalSplitter.NumberOfBranches\tINTEGER\t\t453\t1\tIfcCountMeasure\t1\r\nPARAM\t4ee498a0-5ef6-4545-92e8-cfa2dc33f48f\tPset_OpticalSplitter.NumberOfInterfaces\tMULTILINETEXT\t\t453\t1\tPropertyTableValue\t1\r\nPARAM\t43c5def7-a152-4adf-9ec2-6f48a38851f3\tPset_OpticalSplitter.OpticalSplitterType\tTEXT\t\t453\t1\tPEnum_OpticalSplitterType\t1\r\n#\r\nGROUP\t454\tPset_OutletTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te826b580-d1f1-11e1-8000-00215ad4efdf\tPset_OutletTypeCommon.IsPluggableOutlet\tYESNO\t\t454\t1\tIfcLogical\t1\r\nPARAM\tf9dc44b0-33ee-47e8-adea-fbbbd20abdd8\tPset_OutletTypeCommon.NumberOfSockets\tINTEGER\t\t454\t1\tIfcCountMeasure\t1\r\nPARAM\td34a2200-d1f1-11e1-8000-00215ad4efdf\tPset_OutletTypeCommon.Reference\tTEXT\t\t454\t1\tIfcIdentifier\t1\r\nPARAM\td9400300-d1f1-11e1-8000-00215ad4efdf\tPset_OutletTypeCommon.Status\tTEXT\t\t454\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t455\tPset_OutsideDesignCriteria\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1c9a7180-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.BuildingThermalExposure\tTEXT\t\t455\t1\tPEnum_BuildingThermalExposure\t1\r\nPARAM\t0e4c5580-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.CoolingDesignDay\tTEXT\t\t455\t1\tIfcDateTime\t1\r\nPARAM\t0391c080-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.CoolingDryBulb\tNUMBER\t\t455\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t08ef0b00-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.CoolingWetBulb\tNUMBER\t\t455\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\tfecd0c80-d1f1-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.HeatingDesignDay\tTEXT\t\t455\t1\tIfcDateTime\t1\r\nPARAM\tf2e14a80-d1f1-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.HeatingDryBulb\tNUMBER\t\t455\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\tf8d72b80-d1f1-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.HeatingWetBulb\tNUMBER\t\t455\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t27ed9d00-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.PrevailingWindDirection\tNUMBER\t\t455\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t2d4ae780-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.PrevailingWindVelocity\tNUMBER\t\t455\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\t186e5400-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.WeatherDataDate\tTEXT\t\t455\t1\tIfcDateTime\t1\r\nPARAM\t13110980-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.WeatherDataStation\tTEXT\t\t455\t1\tIfcText\t1\r\n#\r\nGROUP\t456\tPset_PackingInstructions\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4eabd380-d1f2-11e1-8000-00215ad4efdf\tPset_PackingInstructions.ContainerMaterial\tMULTILINETEXT\t\t456\t1\tIfcMaterialDefinition\t1\r\nPARAM\t3b990380-d1f2-11e1-8000-00215ad4efdf\tPset_PackingInstructions.PackingCareType\tTEXT\t\t456\t1\tPEnum_PackingCareType\t1\r\nPARAM\t510e2d80-d1f2-11e1-8000-00215ad4efdf\tPset_PackingInstructions.SpecialInstructions\tTEXT\t\t456\t1\tIfcText\t1\r\nPARAM\t4784c580-d1f2-11e1-8000-00215ad4efdf\tPset_PackingInstructions.WrappingMaterial\tMULTILINETEXT\t\t456\t1\tIfcMaterialDefinition\t1\r\n#\r\nGROUP\t457\tPset_PatchCordCable\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t54cdf248-4b79-4f11-a360-1024d5469093\tPset_PatchCordCable.JacketColour\tTEXT\t\t457\t1\tIfcLabel\t1\r\n#\r\nGROUP\t458\tPset_PavementCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td0beb644-67e8-4878-b576-d552ce3f8b66\tPset_PavementCommon.NominalLength\tLENGTH\t\t458\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\tf99e81fa-8e16-4073-a616-7352a4567e1b\tPset_PavementCommon.NominalThickness\tLENGTH\t\t458\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\te6684fde-7be1-405d-858f-c93315b004a7\tPset_PavementCommon.NominalThicknessEnd\tLENGTH\t\t458\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t95902a1e-b6ac-4443-905c-24c000fe34be\tPset_PavementCommon.NominalWidth\tLENGTH\t\t458\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\td0c54b07-50b9-44dc-8372-c9fbf88659f3\tPset_PavementCommon.Reference\tTEXT\t\t458\t1\tIfcIdentifier\t1\r\nPARAM\t4fe9154a-1f56-48a0-9e27-6bfb599e4d62\tPset_PavementCommon.Status\tTEXT\t\t458\t1\tPEnum_ElementStatus\t1\r\nPARAM\t56d0524f-cfd0-42de-a343-0038435f91e5\tPset_PavementCommon.StructuralSlope\tNUMBER\t\t458\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tbcf00f46-a24c-4c82-ae6c-e16b2b9232fd\tPset_PavementCommon.StructuralSlopeType\tTEXT\t\t458\t1\tIfcLabel\t1\r\n#\r\nGROUP\t459\tPset_PavementMillingCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7053bbbd-88d4-49a5-9406-ca8063908934\tPset_PavementMillingCommon.NominalDepth\tLENGTH\t\t459\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\tfb24127f-6044-4304-a173-3ba876595301\tPset_PavementMillingCommon.NominalWidth\tLENGTH\t\t459\t1\tIfcNonNegativeLengthMeasure\t1\r\n#\r\nGROUP\t460\tPset_PavementSurfaceCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t6efb84d1-a33c-4419-a069-99aa7f7e3805\tPset_PavementSurfaceCommon.PavementRoughness\tNUMBER\t\t460\t1\tIfcNumericMeasure\t1\r\nPARAM\t653848fc-2ac9-4087-b207-1be8b114f487\tPset_PavementSurfaceCommon.PavementTexture\tLENGTH\t\t460\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t461\tPset_Permit\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t697e4800-d1f2-11e1-8000-00215ad4efdf\tPset_Permit.EndDate\tTEXT\t\t461\t1\tIfcDateTime\t1\r\nPARAM\t43a6cf5a-d886-4e33-8217-70fa5a15347a\tPset_Permit.EndTime\tMULTILINETEXT\t\t461\t1\tIfcLocalTime\t1\r\nPARAM\t5d928600-d1f2-11e1-8000-00215ad4efdf\tPset_Permit.EscortRequirement\tYESNO\t\t461\t1\tIfcBoolean\t1\r\nPARAM\tdf2e0f34-de56-465e-850e-b1e1310de043\tPset_Permit.PermitDuration\tMULTILINETEXT\t\t461\t1\tIfcDateAndTime\t1\r\nPARAM\tb127896a-f396-4a16-b9eb-fe2c725cd8c4\tPset_Permit.PermitType\tTEXT\t\t461\t1\tPEnum_PermitType\t1\r\nPARAM\t6e42fc00-d1f2-11e1-8000-00215ad4efdf\tPset_Permit.SpecialRequirements\tTEXT\t\t461\t1\tIfcText\t1\r\nPARAM\t63886700-d1f2-11e1-8000-00215ad4efdf\tPset_Permit.StartDate\tTEXT\t\t461\t1\tIfcDateTime\t1\r\nPARAM\t2b372648-093e-4c6b-a1e2-c6f00f238313\tPset_Permit.StartTime\tMULTILINETEXT\t\t461\t1\tIfcLocalTime\t1\r\n#\r\nGROUP\t462\tPset_PileCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t663726ee-008e-4db4-9b6f-7b26952a1fe9\tPset_PileCommon.LoadBearing\tYESNO\t\t462\t1\tIfcBoolean\t1\r\nPARAM\t7d29ae80-d1f2-11e1-8000-00215ad4efdf\tPset_PileCommon.Reference\tTEXT\t\t462\t1\tIfcIdentifier\t1\r\nPARAM\t40a25a64-62f8-480a-9c49-ccb5cd0aa752\tPset_PileCommon.Status\tTEXT\t\t462\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t463\tPset_PipeConnection\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbba28a8f-29ed-440b-b20c-64a204d13a01\tPset_PipeConnection.ConnectionType\tMULTILINETEXT\t\t463\t1\tPropertyListValue\t1\r\n#\r\nGROUP\t464\tPset_PipeConnectionFlanged\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbc57ff80-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.BoltholePitch\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb6621e80-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.BoltSize\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9a5e7d00-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.BoreSize\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\ta21e2180-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.FlangeDiameter\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t93d00580-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.FlangeStandard\tTEXT\t\t464\t1\tIfcLabel\t1\r\nPARAM\t8c106100-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.FlangeTable\tTEXT\t\t464\t1\tIfcLabel\t1\r\nPARAM\ta9ddc600-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.FlangeThickness\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t47798065-7040-4ed8-9074-83ff1cdffabd\tPset_PipeConnectionFlanged.Material\tMULTILINETEXT\t\t464\t1\tIfcMaterial\t1\r\nPARAM\tb104d400-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.NumberOfBoltholes\tINTEGER\t\t464\t1\tIfcCountMeasure\t1\r\n#\r\nGROUP\t465\tPset_PipeFittingOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td0036600-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingOccurrence.Color\tTEXT\t\t465\t1\tIfcLabel\t1\r\nPARAM\t0e802c8f-1b8b-4e06-84d4-f60ea29c0ca0\tPset_PipeFittingOccurrence.Colour\tTEXT\t\t465\t1\tIfcLabel\t1\r\nPARAM\tc974ee80-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingOccurrence.InteriorRoughnessCoefficient\tLENGTH\t\t465\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t466\tPset_PipeFittingPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te14c7280-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingPHistory.FlowrateLeakage\tMULTILINETEXT\t\t466\t1\tIfcTimeSeries\t1\r\nPARAM\tde518200-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingPHistory.LossCoefficient\tMULTILINETEXT\t\t466\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t467\tPset_PipeFittingTypeBend\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ted383480-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeBend.BendAngle\tANGLE\t\t467\t1\tIfcPositivePlaneAngleMeasure\t1\r\nPARAM\tf2957f00-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeBend.BendRadius\tLENGTH\t\t467\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t468\tPset_PipeFittingTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t72066fc3-6915-4683-9076-ee6a09bc4b8d\tPset_PipeFittingTypeCommon.EndStyleTreatment\tMULTILINETEXT\t\t468\t1\tPropertyListValue\t1\r\nPARAM\t2d97b280-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeCommon.FittingLossFactor\tNUMBER\t\t468\t1\tIfcReal\t1\r\nPARAM\tc5a0ac18-b4a9-4baf-88c6-95f84e9cf21a\tPset_PipeFittingTypeCommon.InnerDiameter\tMULTILINETEXT\t\t468\t1\tPropertyListValue\t1\r\nPARAM\t4d6922b9-5d84-43a3-92c7-d44126653abc\tPset_PipeFittingTypeCommon.Material\tMULTILINETEXT\t\t468\t1\tIfcMaterial\t1\r\nPARAM\t790c81c6-25be-4aee-9c02-d5841948679f\tPset_PipeFittingTypeCommon.NominalDiameter\tMULTILINETEXT\t\t468\t1\tPropertyListValue\t1\r\nPARAM\tdaf417db-b39b-410e-9804-5a98cde3880b\tPset_PipeFittingTypeCommon.OuterDiameter\tMULTILINETEXT\t\t468\t1\tPropertyListValue\t1\r\nPARAM\t16f15b80-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeCommon.PressureClass\tNUMBER\t\t468\t1\tIfcPressureMeasure\t1\r\nPARAM\t1c4ea600-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeCommon.PressureRange\tMULTILINETEXT\t\t468\t1\tPropertyBoundedValue\t1\r\nPARAM\tffb26e00-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeCommon.Reference\tTEXT\t\t468\t1\tIfcIdentifier\t1\r\nPARAM\t05a84f00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeCommon.Status\tTEXT\t\t468\t1\tPEnum_ElementStatus\t1\r\nPARAM\tcff0339e-4840-4052-9f66-58e2b5db41f1\tPset_PipeFittingTypeCommon.SubType\tTEXT\t\t468\t1\tIfcLabel\t1\r\nPARAM\t25d80e00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeCommon.TemperatureRange\tMULTILINETEXT\t\t468\t1\tPropertyBoundedValue\t1\r\nPARAM\t94a3dfd1-ab01-4f4c-a3cb-de1c4d59ed16\tPset_PipeFittingTypeCommon.UnitWeight\tNUMBER\t\t468\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t469\tPset_PipeFittingTypeJunction\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4607cd00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeJunction.JunctionLeftAngle\tANGLE\t\t469\t1\tIfcPositivePlaneAngleMeasure\t1\r\nPARAM\t4acc8100-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeJunction.JunctionLeftRadius\tLENGTH\t\t469\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t5324bc00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeJunction.JunctionRightAngle\tANGLE\t\t469\t1\tIfcPositivePlaneAngleMeasure\t1\r\nPARAM\t57e97000-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeJunction.JunctionRightRadius\tLENGTH\t\t469\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t39837480-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeJunction.JunctionType\tTEXT\t\t469\t1\tPEnum_PipeFittingJunctionType\t1\r\n#\r\nGROUP\t470\tPset_PipeSegmentOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t6c2d6d00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentOccurrence.Color\tTEXT\t\t470\t1\tIfcLabel\t1\r\nPARAM\t71f7cebd-44a8-4067-a92d-7e03eedd5ba0\tPset_PipeSegmentOccurrence.Colour\tTEXT\t\t470\t1\tIfcLabel\t1\r\nPARAM\t73547b00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentOccurrence.Gradient\tNUMBER\t\t470\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t659ef580-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentOccurrence.InteriorRoughnessCoefficient\tLENGTH\t\t470\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t794a5c00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentOccurrence.InvertElevation\tLENGTH\t\t470\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t471\tPset_PipeSegmentPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t87987800-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentPHistory.FluidFlowLeakage\tMULTILINETEXT\t\t471\t1\tIfcTimeSeries\t1\r\nPARAM\t849d8780-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentPHistory.LeakageCurve\tMULTILINETEXT\t\t471\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t472\tPset_PipeSegmentTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t050d69fe-9063-44c5-a9c7-cb88d3d3b222\tPset_PipeSegmentTypeCommon.EndStyleTreatment\tMULTILINETEXT\t\t472\t1\tPropertyListValue\t1\r\nPARAM\tc7f7f600-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.InnerDiameter\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te0502c63-fa86-45fe-825a-de8e360951f9\tPset_PipeSegmentTypeCommon.Length\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t202b07d9-ff90-448b-9561-3ebdb5e5bcee\tPset_PipeSegmentTypeCommon.Material\tMULTILINETEXT\t\t472\t1\tIfcMaterial\t1\r\nPARAM\tc0385180-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.NominalDiameter\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tcf1f0400-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.OuterDiameter\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tadbe1800-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.PressureRange\tMULTILINETEXT\t\t472\t1\tPropertyBoundedValue\t1\r\nPARAM\t9121e000-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.Reference\tTEXT\t\t472\t1\tIfcIdentifier\t1\r\nPARAM\t97b05780-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.Status\tTEXT\t\t472\t1\tPEnum_ElementStatus\t1\r\nPARAM\tb7e01680-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.TemperatureRange\tMULTILINETEXT\t\t472\t1\tPropertyBoundedValue\t1\r\nPARAM\t9bf0aff8-2547-4fea-a950-48d18310cb5a\tPset_PipeSegmentTypeCommon.UnitWeight\tNUMBER\t\t472\t1\tIfcMassMeasure\t1\r\nPARAM\ta72fa080-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.WorkingPressure\tNUMBER\t\t472\t1\tIfcPressureMeasure\t1\r\n#\r\nGROUP\t473\tPset_PipeSegmentTypeCulvert\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te2ca6a80-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCulvert.ClearDepth\tLENGTH\t\t473\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tdba35c80-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCulvert.InternalWidth\tLENGTH\t\t473\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t474\tPset_PipeSegmentTypeGutter\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\taebafc19-b6b8-42fa-b444-3d5869eec97d\tPset_PipeSegmentTypeGutter.Complementaryfunction\tTEXT\t\t474\t1\tPEnum_ComplementaryWorks\t1\r\nPARAM\tf4137700-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeGutter.FlowRating\tNUMBER\t\t474\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t9905def7-3aeb-4bdf-ab78-0f64a1865e3c\tPset_PipeSegmentTypeGutter.IsCovered\tYESNO\t\t474\t1\tIfcBoolean\t1\r\nPARAM\t65857a98-6771-4f76-97ca-60427d22f57f\tPset_PipeSegmentTypeGutter.IsMonitored\tYESNO\t\t474\t1\tIfcBoolean\t1\r\nPARAM\t00394cfe-e55e-401f-9746-3d0feef053cf\tPset_PipeSegmentTypeGutter.OrthometricHeight\tLENGTH\t\t474\t1\tIfcLengthMeasure\t1\r\nPARAM\teeb62c80-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeGutter.Slope\tNUMBER\t\t474\t1\tIfcPlaneAngleMeasure\t1\r\n#\r\nGROUP\t475\tPset_PlateCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t24f3ac00-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.AcousticRating\tTEXT\t\t475\t1\tIfcLabel\t1\r\nPARAM\t2c1aba00-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.FireRating\tTEXT\t\t475\t1\tIfcLabel\t1\r\nPARAM\t186f5380-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.IsExternal\tYESNO\t\t475\t1\tIfcBoolean\t1\r\nPARAM\t1e653480-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.LoadBearing\tYESNO\t\t475\t1\tIfcBoolean\t1\r\nPARAM\t02fa2980-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.Reference\tTEXT\t\t475\t1\tIfcIdentifier\t1\r\nPARAM\t08f00a80-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.Status\tTEXT\t\t475\t1\tPEnum_ElementStatus\t1\r\nPARAM\t31780480-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.ThermalTransmittance\tNUMBER\t\t475\t1\tIfcThermalTransmittanceMeasure\t1\r\n#\r\nGROUP\t476\tPset_PointMachine\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2abf6389-8b41-467d-9776-57fc4e138bca\tPset_PointMachine.ActionBarMovementLength\tLENGTH\t\t476\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf42fcc9d-d9ab-4cb4-9583-6d30f5be68d5\tPset_PointMachine.ConversionTime\tNUMBER\t\t476\t1\tIfcTimeMeasure\t1\r\nPARAM\t7280443f-71ca-4400-9ac8-db88b31b2203\tPset_PointMachine.Current\tMULTILINETEXT\t\t476\t1\tPropertyBoundedValue\t1\r\nPARAM\teb2e45d4-4e54-4615-87fd-0b4e0be149f8\tPset_PointMachine.HasLockInside\tYESNO\t\t476\t1\tIfcBoolean\t1\r\nPARAM\ta56044c6-01ad-4986-9671-ac903d34dec9\tPset_PointMachine.LockingForce\tNUMBER\t\t476\t1\tIfcForceMeasure\t1\r\nPARAM\tdb72e65b-d883-4ad6-9bff-c892259741b9\tPset_PointMachine.MarkingRodMovementLength\tLENGTH\t\t476\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t8d7a6b71-660e-4c04-a7f1-73e8b0f0471c\tPset_PointMachine.MaximumOperatingTime\tNUMBER\t\t476\t1\tIfcTimeMeasure\t1\r\nPARAM\tb91725e3-16c8-4403-be41-8d92502621fb\tPset_PointMachine.MinimumOperatingSpeed\tNUMBER\t\t476\t1\tIfcAngularVelocityMeasure\t1\r\nPARAM\t1db6490f-b4c8-478a-9488-c7ffc727f821\tPset_PointMachine.TractionForce\tNUMBER\t\t476\t1\tIfcForceMeasure\t1\r\n#\r\nGROUP\t477\tPset_PowerControlSystem\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1aa33244-7ff3-458f-89c5-0a015bcd842a\tPset_PowerControlSystem.AssemblyInstruction\tMULTILINETEXT\t\t477\t1\tIfcExternalReference\t1\r\n#\r\nGROUP\t478\tPset_PrecastConcreteElementFabrication\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t72701900-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.ActualErectionDate\tTEXT\t\t478\t1\tIfcDateTime\t1\r\nPARAM\t6dab6500-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.ActualProductionDate\tTEXT\t\t478\t1\tIfcDateTime\t1\r\nPARAM\t671ced80-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.AsBuiltLocationNumber\tTEXT\t\t478\t1\tIfcLabel\t1\r\nPARAM\t608e7600-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.PieceMark\tTEXT\t\t478\t1\tIfcLabel\t1\r\nPARAM\t4359a780-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.ProductionLotId\tTEXT\t\t478\t1\tIfcIdentifier\t1\r\nPARAM\t48b6f200-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.SerialNumber\tTEXT\t\t478\t1\tIfcIdentifier\t1\r\nPARAM\tde7ef714-d332-405a-acd2-6af8a8750718\tPset_PrecastConcreteElementFabrication.TypeDesignation\tTEXT\t\t478\t1\tIfcLabel\t1\r\nPARAM\t3d63c680-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.TypeDesignator\tTEXT\t\t478\t1\tIfcLabel\t1\r\n#\r\nGROUP\t479\tPset_PrecastConcreteElementGeneral\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t00e49a80-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.BatterAtEnd\tNUMBER\t\t479\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\tfb875000-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.BatterAtStart\tNUMBER\t\t479\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\tf6c29c00-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.CamberAtMidspan\tNUMBER\t\t479\t1\tIfcRatioMeasure\t1\r\nPARAM\taba88900-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.CornerChamfer\tLENGTH\t\t479\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t18238800-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.DesignLocationNumber\tTEXT\t\t479\t1\tIfcLabel\t1\r\nPARAM\t24c4fdd7-9785-4d8c-bb8a-4cba7939d3bc\tPset_PrecastConcreteElementGeneral.ElementGrossVolume\tVOLUME\t\t479\t1\tIfcVolumeMeasure\t1\r\nPARAM\t56c060ae-8bf5-4262-87f6-ea1a08edf7d3\tPset_PrecastConcreteElementGeneral.ElementNetVolume\tVOLUME\t\t479\t1\tIfcVolumeMeasure\t1\r\nPARAM\taf9aef6a-7ab6-4e99-9bf6-1088bc6b877b\tPset_PrecastConcreteElementGeneral.ElementWeight\tNUMBER\t\t479\t1\tIfcMassMeasure\t1\r\nPARAM\tbb27d200-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.FormStrippingStrength\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\r\nPARAM\tf0342480-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.HollowCorePlugging\tTEXT\t\t479\t1\tIfcLabel\t1\r\nPARAM\td5fa4680-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.InitialTension\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\r\nPARAM\tc1b64980-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.LiftingStrength\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\r\nPARAM\tb4995a80-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.ManufacturingToleranceClass\tTEXT\t\t479\t1\tIfcLabel\t1\r\nPARAM\tcf6bcf00-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.MinimumAllowableSupportLength\tLENGTH\t\t479\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t122da700-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.PieceMark\tTEXT\t\t479\t1\tIfcLabel\t1\r\nPARAM\t310248ab-f1a7-4743-b5ab-a8fe75b01e84\tPset_PrecastConcreteElementGeneral.ProductionLotId\tTEXT\t\t479\t1\tIfcIdentifier\t1\r\nPARAM\tc975ee00-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.ReleaseStrength\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\r\nPARAM\t38b2064d-7085-40c9-812b-206ea7dab388\tPset_PrecastConcreteElementGeneral.SerialNumber\tTEXT\t\t479\t1\tIfcIdentifier\t1\r\nPARAM\t0c37c600-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.Shortening\tNUMBER\t\t479\t1\tIfcRatioMeasure\t1\r\nPARAM\te7435300-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.SupportDuringTransportDescription\tTEXT\t\t479\t1\tIfcText\t1\r\nPARAM\ted393400-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.SupportDuringTransportDocReference\tMULTILINETEXT\t\t479\t1\tIfcExternalReference\t1\r\nPARAM\tdbf02780-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.TendonRelaxation\tNUMBER\t\t479\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\te14d7200-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.TransportationStrength\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\r\nPARAM\t06da7b80-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.Twisting\tNUMBER\t\t479\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\tfacb7dfc-8fd0-4e6f-8f2f-4d7b81823c47\tPset_PrecastConcreteElementGeneral.TypeDesignation\tTEXT\t\t479\t1\tIfcLabel\t1\r\nPARAM\t94699b80-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.TypeDesignator\tTEXT\t\t479\t1\tIfcLabel\t1\r\n#\r\nGROUP\t480\tPset_PrecastKerbStone\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0fd10924-b1a9-4435-b765-ffb9942e4238\tPset_PrecastKerbStone.NominalHeight\tLENGTH\t\t480\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t2cb149e9-f1d8-4b59-be0f-b0ed8b1a4584\tPset_PrecastKerbStone.NominalLength\tLENGTH\t\t480\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t9b842aea-74f2-42f0-adb6-95cfc4ea274e\tPset_PrecastKerbStone.NominalWidth\tLENGTH\t\t480\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t135d2776-2f10-4c69-a70e-1956ea0d1ece\tPset_PrecastKerbStone.TypeDesignation\tTEXT\t\t480\t1\tIfcLabel\t1\r\n#\r\nGROUP\t481\tPset_PrecastSlab\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4ef99e00-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.AngleBetweenComponentAxes\tNUMBER\t\t481\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t4a34ea00-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.AngleToFirstAxis\tNUMBER\t\t481\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t430ddc00-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.DistanceBetweenComponentAxes\tLENGTH\t\t481\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3c7f6480-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.EdgeDistanceToFirstAxis\tLENGTH\t\t481\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t5456e880-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.NominalThickness\tLENGTH\t\t481\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t5b7df680-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.NominalToppingThickness\tLENGTH\t\t481\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t36898380-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.ToppingType\tTEXT\t\t481\t1\tIfcLabel\t1\r\nPARAM\t6b7fd580-d5c4-4af3-a416-3d075d0e8884\tPset_PrecastSlab.TypeDesignation\tTEXT\t\t481\t1\tIfcLabel\t1\r\nPARAM\t2ffb0c00-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.TypeDesignator\tTEXT\t\t481\t1\tIfcLabel\t1\r\n#\r\nGROUP\t482\tPset_ProcessCapacity\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td4337888-8b09-4cc8-b48b-6366ebba80ea\tPset_ProcessCapacity.DownstreamConnections\tMULTILINETEXT\t\t482\t1\tPropertyListValue\t1\r\nPARAM\tf94099cd-7449-45fd-a31b-3e8712f409d3\tPset_ProcessCapacity.ProcessCapacity\tINTEGER\t\t482\t1\tIfcCountMeasure\t1\r\nPARAM\t7fc40cbf-ac77-44d1-b7e4-448e80374366\tPset_ProcessCapacity.ProcessItem\tTEXT\t\t482\t1\tPEnum_ProcessItem\t1\r\nPARAM\t8571f269-4040-46c4-b2b3-64a8512307d4\tPset_ProcessCapacity.ProcessPerformance\tTEXT\t\t482\t1\tIfcDuration\t1\r\nPARAM\t13c29d48-5a1e-44b8-9695-bd02d4630d73\tPset_ProcessCapacity.UpstreamConnections\tMULTILINETEXT\t\t482\t1\tPropertyListValue\t1\r\n#\r\nGROUP\t483\tPset_ProductRequirements\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t66e384ca-d5a5-4927-b728-717c5093378c\tPset_ProductRequirements.Category\tTEXT\t\t483\t1\tIfcLabel\t1\r\nPARAM\t95b0c0ea-ca1c-4e31-993b-76c3e5ac4a91\tPset_ProductRequirements.Classification\tMULTILINETEXT\t\t483\t1\tIfcClassificationReference\t1\r\nPARAM\t07fefd08-bcc0-4ce5-8fb2-7855f71bcfbf\tPset_ProductRequirements.DemandImportanceValue\tTEXT\t\t483\t1\tIfcLabel\t1\r\nPARAM\t70f43e42-ea40-48e5-8b3a-8255536dcdca\tPset_ProductRequirements.DemandThresholdValue\tTEXT\t\t483\t1\tIfcLabel\t1\r\nPARAM\tb6b0fb82-6b6b-471b-a74e-aea02456a6c3\tPset_ProductRequirements.DemandValue\tTEXT\t\t483\t1\tIfcLabel\t1\r\nPARAM\t4be6415b-2ea1-4bee-b2f9-099c8f161a4b\tPset_ProductRequirements.GapValue\tTEXT\t\t483\t1\tIfcLabel\t1\r\nPARAM\t1224b4fc-efd5-4db7-b2d3-05654d4d1883\tPset_ProductRequirements.GapValueWeighted\tTEXT\t\t483\t1\tIfcLabel\t1\r\nPARAM\t22f51d81-5d8e-48c9-9be9-2dd8630e6391\tPset_ProductRequirements.GroupName\tTEXT\t\t483\t1\tIfcLabel\t1\r\nPARAM\t2cf45bdd-0879-46d4-b4ba-0d109d3f2fca\tPset_ProductRequirements.Name\tTEXT\t\t483\t1\tIfcLabel\t1\r\nPARAM\tc3713f2a-c757-40d8-aa9a-bc184db00e67\tPset_ProductRequirements.SupplyEvaluationValue\tTEXT\t\t483\t1\tIfcLabel\t1\r\n#\r\nGROUP\t484\tPset_ProfileArbitraryDoubleT\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t98e28400-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.FlangeBaseFillet\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t92540c80-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.FlangeChamfer\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t849e8700-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.FlangeDepth\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t8cf6c200-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.FlangeDraft\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t9e3fce80-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.FlangeTopFillet\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t705a8a00-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.LeftFlangeWidth\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t7e100f80-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.OverallDepth\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t69337c00-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.OverallWidth\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t77819800-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.RightFlangeWidth\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb0ba0800-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.StemBaseChamfer\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\tbc0d3380-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.StemBaseFillet\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\ta39d1900-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.StemBaseWidth\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb6175280-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.StemTopChamfer\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\tc0d1e780-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.StemTopFillet\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\taa2b9080-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.StemTopWidth\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t485\tPset_ProfileArbitraryHollowCore\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te959e180-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.BaseChamfer\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\tfc6cb180-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.BottomCover\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t363db800-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CenterCoreBaseHeight\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t4bb2e200-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CenterCoreBaseWidth\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3d64c600-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CenterCoreMiddleHeight\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t2de57d00-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CenterCoreSpacing\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t448bd400-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CenterCoreTopHeight\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t53728680-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CenterCoreTopWidth\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t0b536400-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CoreBaseHeight\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t202ff780-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CoreBaseWidth\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t11e1db80-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CoreMiddleHeight\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t042c5600-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CoreSpacing\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t1908e980-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CoreTopHeight\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t26be6f00-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CoreTopWidth\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tdf37e300-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.DraftBaseOffset\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\te3fc9700-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.DraftSideOffset\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\tda732f00-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.EdgeDraft\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\tee1e9580-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.KeyDepth\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\tf2e34980-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.KeyHeight\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\tf7a7fd80-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.KeyOffset\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t5a999480-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.NumberOfCores\tINTEGER\t\t485\t1\tIfcCountMeasure\t1\r\nPARAM\td34c2100-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.OverallDepth\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tccbda980-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.OverallWidth\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t486\tPset_ProfileMechanical\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8a489c80-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.CentreOfGravityInX\tLENGTH\t\t486\t1\tIfcLengthMeasure\t1\r\nPARAM\t92084100-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.CentreOfGravityInY\tLENGTH\t\t486\t1\tIfcLengthMeasure\t1\r\nPARAM\t6ab17400-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.CrossSectionArea\tAREA\t\t486\t1\tIfcAreaMeasure\t1\r\nPARAM\t65ecc000-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MassPerLength\tNUMBER\t\t486\t1\tIfcMassPerLengthMeasure\t1\r\nPARAM\t80bf3480-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MaximumPlateThickness\tLENGTH\t\t486\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te14e7180-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MaximumSectionModulusY\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\r\nPARAM\tf3301480-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MaximumSectionModulusZ\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\r\nPARAM\t769d3600-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MinimumPlateThickness\tLENGTH\t\t486\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\teb707000-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MinimumSectionModulusY\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\r\nPARAM\tf9be8c00-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MinimumSectionModulusZ\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\r\nPARAM\ta5b3a780-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MomentOfInertiaY\tNUMBER\t\t486\t1\tIfcMomentOfInertiaMeasure\t1\r\nPARAM\tb532f080-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MomentOfInertiaYZ\tNUMBER\t\t486\t1\tIfcMomentOfInertiaMeasure\t1\r\nPARAM\tad734c00-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MomentOfInertiaZ\tNUMBER\t\t486\t1\tIfcMomentOfInertiaMeasure\t1\r\nPARAM\t700ebe80-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.Perimeter\tLENGTH\t\t486\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t1d81d200-d1f7-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.PlasticShapeFactorY\tNUMBER\t\t486\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t25417680-d1f7-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.PlasticShapeFactorZ\tNUMBER\t\t486\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t14910080-d1f7-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.ShearAreaY\tAREA\t\t486\t1\tIfcAreaMeasure\t1\r\nPARAM\t0ba02f00-d1f7-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.ShearAreaZ\tAREA\t\t486\t1\tIfcAreaMeasure\t1\r\nPARAM\t9fbdc680-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.ShearCentreY\tLENGTH\t\t486\t1\tIfcLengthMeasure\t1\r\nPARAM\t992f4f00-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.ShearCentreZ\tLENGTH\t\t486\t1\tIfcLengthMeasure\t1\r\nPARAM\td7c50980-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.ShearDeformationAreaY\tAREA\t\t486\t1\tIfcAreaMeasure\t1\r\nPARAM\td0056500-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.ShearDeformationAreaZ\tAREA\t\t486\t1\tIfcAreaMeasure\t1\r\nPARAM\tbd8b2b80-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.TorsionalConstantX\tNUMBER\t\t486\t1\tIfcMomentOfInertiaMeasure\t1\r\nPARAM\t0216c700-d1f7-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.TorsionalSectionModulus\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\r\nPARAM\tc5e36680-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.WarpingConstant\tNUMBER\t\t486\t1\tIfcWarpingConstantMeasure\t1\r\n#\r\nGROUP\t487\tPset_ProjectCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tceb73d71-7154-49dd-8b10-8308bf2e80c9\tPset_ProjectCommon.BuildingPermitId\tTEXT\t\t487\t1\tIfcIdentifier\t1\r\nPARAM\t6c15781d-cf45-4228-ac7a-1679f66227fd\tPset_ProjectCommon.ConstructionMode\tTEXT\t\t487\t1\tIfcLabel\t1\r\nPARAM\t92cc4fc3-329f-46e3-a324-871c860116b7\tPset_ProjectCommon.FundingSource\tTEXT\t\t487\t1\tIfcLabel\t1\r\nPARAM\tf13def40-9e89-48cb-82d8-587a338578a1\tPset_ProjectCommon.GrossAreaPlanned\tAREA\t\t487\t1\tIfcAreaMeasure\t1\r\nPARAM\t27bd20c8-e4ef-4ea1-a79a-cfc26f1007f9\tPset_ProjectCommon.NetEarnedValue\tMULTILINETEXT\t\t487\t1\tIfcCostValue\t1\r\nPARAM\ta36a01b1-e37c-4d0c-88a1-531bd93a17c8\tPset_ProjectCommon.PaybackPeriod\tTEXT\t\t487\t1\tIfcDuration\t1\r\nPARAM\t9de30d4c-a40d-4afd-85b2-5fdb60d3a627\tPset_ProjectCommon.ProjectInvestmentEstimate\tMULTILINETEXT\t\t487\t1\tIfcCostValue\t1\r\nPARAM\t25b32afa-42c7-4ca1-9466-7c5749975e82\tPset_ProjectCommon.ProjectType\tTEXT\t\t487\t1\tPEnum_ProjectType\t1\r\nPARAM\t4b5de076-eb07-456b-a4c5-1060eb5ad01e\tPset_ProjectCommon.ROI\tNUMBER\t\t487\t1\tIfcRatioMeasure\t1\r\n#\r\nGROUP\t488\tPset_ProjectionElementShadingDevice\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t9a9e8197-1098-4d3e-878d-915c477ad61d\tPset_ProjectionElementShadingDevice.Color\tTEXT\t\t488\t1\tIfcLabel\t1\r\n#\r\nGROUP\t489\tPset_ProjectionElementShadingDevicePHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t33d852b7-3ccd-4a99-8bdc-403d555a9fb2\tPset_ProjectionElementShadingDevicePHistory.Azimuth\tTEXT\t\t489\t1\tIfcLabel\t1\r\nPARAM\t6397c3ef-fb25-4d65-ba93-0cc882a5d77c\tPset_ProjectionElementShadingDevicePHistory.TiltAngle\tNUMBER\t\t489\t1\tIfcReal\t1\r\n#\r\nGROUP\t490\tPset_ProjectionElementTypeShadingDevice\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4aaec5cb-0ed1-4960-a869-b3417d1cae1e\tPset_ProjectionElementTypeShadingDevice.AverageSolarTransmittance\tNUMBER\t\t490\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t1ea25fad-145a-4973-a243-11c3be2f0b82\tPset_ProjectionElementTypeShadingDevice.AverageVisibleTransmittance\tNUMBER\t\t490\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\td13c8c5f-d9cc-4e7c-b75f-42a6beac7dd5\tPset_ProjectionElementTypeShadingDevice.Color\tTEXT\t\t490\t1\tIfcLabel\t1\r\nPARAM\t7a329628-4329-4dcb-9b37-4baf927f2c3a\tPset_ProjectionElementTypeShadingDevice.Material\tMULTILINETEXT\t\t490\t1\tIfcMaterial\t1\r\nPARAM\t36c56b6f-8e3a-4a0f-ba13-f5235305db0f\tPset_ProjectionElementTypeShadingDevice.Reflectance\tNUMBER\t\t490\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\td1d74276-a136-457c-927b-e3d038a76d5b\tPset_ProjectionElementTypeShadingDevice.Roughness\tLENGTH\t\t490\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tfa92caa7-a81c-4c51-b37d-aafa5a71aaac\tPset_ProjectionElementTypeShadingDevice.ShadingDeviceType\tTEXT\t\t490\t1\tPEnum_ProjectionElementShadingDeviceType\t1\r\nPARAM\t263c279e-df3e-4426-a641-b44f7732c928\tPset_ProjectionElementTypeShadingDevice.TiltRange\tMULTILINETEXT\t\t490\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t491\tPset_ProjectOrderChangeOrder\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t42764500-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderChangeOrder.BudgetSource\tTEXT\t\t491\t1\tIfcText\t1\r\nPARAM\t6c48b958-8e1d-4173-bfb0-8b9877cabe66\tPset_ProjectOrderChangeOrder.ChangeDescription\tTEXT\t\t491\t1\tIfcText\t1\r\nPARAM\t38ecdd00-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderChangeOrder.ReasonForChange\tTEXT\t\t491\t1\tIfcText\t1\r\n#\r\nGROUP\t492\tPset_ProjectOrderMaintenanceWorkOrder\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t65085e00-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.ContractualType\tTEXT\t\t492\t1\tIfcText\t1\r\nPARAM\t93863900-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.FaultPriorityType\tTEXT\t\t492\t1\tPEnum_PriorityType\t1\r\nPARAM\t6e91c600-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.IfNotAccomplished\tTEXT\t\t492\t1\tIfcText\t1\r\nPARAM\ta8fb6300-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.LocationPriorityType\tTEXT\t\t492\t1\tPEnum_PriorityType\t1\r\nPARAM\t8c86df8b-e29f-404d-9098-6da680baf4b7\tPset_ProjectOrderMaintenanceWorkOrder.LongJobDescription\tTEXT\t\t492\t1\tIfcText\t1\r\nPARAM\t781b2e00-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.MaintenaceType\tTEXT\t\t492\t1\tPEnum_MaintenanceType\t1\r\nPARAM\t7af97f1f-cb8f-453c-b6f3-f03ad25e6e74\tPset_ProjectOrderMaintenanceWorkOrder.MaintenanceType\tTEXT\t\t492\t1\tPEnum_MaintenanceType\t1\r\nPARAM\t53bf5180-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.ProductDescription\tTEXT\t\t492\t1\tIfcText\t1\r\nPARAM\tbfa1ba00-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.ScheduledFrequency\tNUMBER\t\t492\t1\tIfcTimeMeasure\t1\r\nPARAM\teb8d31dd-52c3-4378-8791-8d86d0fef601\tPset_ProjectOrderMaintenanceWorkOrder.ShortJobDescription\tTEXT\t\t492\t1\tIfcText\t1\r\nPARAM\t5c178c80-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.WorkTypeRequested\tTEXT\t\t492\t1\tIfcText\t1\r\n#\r\nGROUP\t493\tPset_ProjectOrderMoveOrder\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t10c2a97f-e5f5-452c-934b-c8b0e868adb6\tPset_ProjectOrderMoveOrder.MoveDescription\tTEXT\t\t493\t1\tIfcText\t1\r\nPARAM\tcfb99980-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMoveOrder.SpecialInstructions\tTEXT\t\t493\t1\tIfcText\t1\r\n#\r\nGROUP\t494\tPset_ProjectOrderPurchaseOrder\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te3650000-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderPurchaseOrder.IsFOB\tYESNO\t\t494\t1\tIfcBoolean\t1\r\nPARAM\tebbd3b00-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderPurchaseOrder.ShipMethod\tTEXT\t\t494\t1\tIfcText\t1\r\n#\r\nGROUP\t495\tPset_ProjectOrderWorkOrder\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0f808100-d1f8-11e1-8000-00215ad4efdf\tPset_ProjectOrderWorkOrder.ContractualType\tTEXT\t\t495\t1\tIfcText\t1\r\nPARAM\t18715280-d1f8-11e1-8000-00215ad4efdf\tPset_ProjectOrderWorkOrder.IfNotAccomplished\tTEXT\t\t495\t1\tIfcText\t1\r\nPARAM\tfc0770e3-db46-4761-8824-b468395bcf3d\tPset_ProjectOrderWorkOrder.LongJobDescription\tTEXT\t\t495\t1\tIfcText\t1\r\nPARAM\tfe377480-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderWorkOrder.ProductDescription\tTEXT\t\t495\t1\tIfcText\t1\r\nPARAM\t42dfe791-a84c-4b84-84ae-8883359b84bd\tPset_ProjectOrderWorkOrder.ShortJobDescription\tTEXT\t\t495\t1\tIfcText\t1\r\nPARAM\t07284600-d1f8-11e1-8000-00215ad4efdf\tPset_ProjectOrderWorkOrder.WorkTypeRequested\tTEXT\t\t495\t1\tIfcText\t1\r\n#\r\nGROUP\t496\tPset_PropertyAgreement\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc995ce42-37ef-4c80-920b-b4aaeed19a04\tPset_PropertyAgreement.AgreementDate\tTEXT\t\t496\t1\tIfcDate\t1\r\nPARAM\t2c1cb900-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.AgreementType\tTEXT\t\t496\t1\tPEnum_PropertyAgreementType\t1\r\nPARAM\te2de1d50-ab4a-4ace-bca7-91495218f426\tPset_PropertyAgreement.AgreementVersion\tTEXT\t\t496\t1\tIfcLabel\t1\r\nPARAM\t6e45fa80-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.CommencementDate\tTEXT\t\t496\t1\tIfcDate\t1\r\nPARAM\t90d81380-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.ConditionCommencement\tTEXT\t\t496\t1\tIfcText\t1\r\nPARAM\ta0575c80-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.ConditionTermination\tTEXT\t\t496\t1\tIfcText\t1\r\nPARAM\t80279d80-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.Duration\tTEXT\t\t496\t1\tIfcDuration\t1\r\nPARAM\t46569700-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.Identifier\tTEXT\t\t496\t1\tIfcIdentifier\t1\r\nPARAM\t87e74200-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.Options\tTEXT\t\t496\t1\tIfcText\t1\r\nPARAM\t638b6580-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.PropertyName\tTEXT\t\t496\t1\tIfcLabel\t1\r\nPARAM\t9a617b80-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.Restrictions\tTEXT\t\t496\t1\tIfcText\t1\r\nPARAM\t7736cc00-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.TerminationDate\tTEXT\t\t496\t1\tIfcDate\t1\r\nPARAM\t4b3af05e-05d8-4ec7-ae82-40c53e718e4c\tPset_PropertyAgreement.TrackingIdentifier\tTEXT\t\t496\t1\tIfcIdentifier\t1\r\nPARAM\t50789580-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.Version\tTEXT\t\t496\t1\tIfcLabel\t1\r\nPARAM\t5b332a80-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.VersionDate\tTEXT\t\t496\t1\tIfcDate\t1\r\n#\r\nGROUP\t497\tPset_ProtectiveDeviceBreakerUnitI2TCurve\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td98fcc80-d1f8-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitI2TCurve.BreakerUnitCurve\tMULTILINETEXT\t\t497\t1\tPropertyTableValue\t1\r\nPARAM\td09efb00-d1f8-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitI2TCurve.NominalCurrent\tNUMBER\t\t497\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\tb6651d00-d1f8-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitI2TCurve.VoltageLevel\tTEXT\t\t497\t1\tPEnum_VoltageLevels\t1\r\n#\r\nGROUP\t498\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2673a300-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve.BreakerUnitFuseBreakingingCurve\tMULTILINETEXT\t\t498\t1\tPropertyTableValue\t1\r\nPARAM\t152a9680-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve.BreakerUnitFuseMeltingCurve\tMULTILINETEXT\t\t498\t1\tPropertyTableValue\t1\r\nPARAM\tf75d3180-d1f8-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve.VoltageLevel\tTEXT\t\t498\t1\tPEnum_VoltageLevels\t1\r\n#\r\nGROUP\t499\tPset_ProtectiveDeviceBreakerUnitIPICurve\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t68044e00-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitIPICurve.BreakerUnitIPICurve\tMULTILINETEXT\t\t499\t1\tPropertyTableValue\t1\r\nPARAM\t5fac1300-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitIPICurve.NominalCurrent\tNUMBER\t\t499\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t3d19fa00-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitIPICurve.VoltageLevel\tTEXT\t\t499\t1\tPEnum_VoltageLevels\t1\r\n#\r\nGROUP\t500\tPset_ProtectiveDeviceBreakerUnitTypeMCB\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc9c4b800-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICN60898\tNUMBER\t\t500\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\td2b58980-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICS60898\tNUMBER\t\t500\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\tc0d3e680-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICS60947\tNUMBER\t\t500\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\tb6b1e800-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICU60947\tNUMBER\t\t500\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\tae59ad00-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.NominalCurrents\tMULTILINETEXT\t\t500\t1\tPropertyListValue\t1\r\nPARAM\t84a08600-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.PowerLoss\tNUMBER\t\t500\t1\tIfcPowerMeasure\t1\r\nPARAM\t8ec28480-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.VoltageLevel\tTEXT\t\t500\t1\tPEnum_VoltageLevels\t1\r\n#\r\nGROUP\t501\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1a3c1580-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICM60947\tNUMBER\t\t501\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t0f818080-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICS60947\tNUMBER\t\t501\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t098b9f80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICU60947\tNUMBER\t\t501\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t14decb00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICW60947\tNUMBER\t\t501\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\te365ff80-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.PerformanceClasses\tMULTILINETEXT\t\t501\t1\tPropertyListValue\t1\r\nPARAM\tecef6780-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.VoltageLevel\tTEXT\t\t501\t1\tPEnum_VoltageLevels\t1\r\n#\r\nGROUP\t502\tPset_ProtectiveDeviceOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf0e1b994-3900-433a-8bb2-e462694b55d1\tPset_ProtectiveDeviceOccurrence.GroundFaultCurrentSetValue\tNUMBER\t\t502\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t8a30c271-7469-4aa7-8319-e83f13deaf14\tPset_ProtectiveDeviceOccurrence.GroundFaultFunction\tYESNO\t\t502\t1\tIfcBoolean\t1\r\nPARAM\t01151008-7b3e-484a-a631-627e3ef99db0\tPset_ProtectiveDeviceOccurrence.GroundFaulti2tFunction\tYESNO\t\t502\t1\tIfcBoolean\t1\r\nPARAM\t5a52482a-0258-465f-a47c-c512a46703f1\tPset_ProtectiveDeviceOccurrence.GroundFaultTrippingTime\tNUMBER\t\t502\t1\tIfcTimeMeasure\t1\r\nPARAM\t3be6cdde-9842-42b0-a0d6-4478bc12607e\tPset_ProtectiveDeviceOccurrence.InstantaneousCurrentSetValue\tNUMBER\t\t502\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t976a7956-1417-4914-adcd-03a1ce7bdf3e\tPset_ProtectiveDeviceOccurrence.InstantaneousTrippingTime\tNUMBER\t\t502\t1\tIfcTimeMeasure\t1\r\nPARAM\t4bc3d721-5dac-42f8-ad3e-069dc2559ee2\tPset_ProtectiveDeviceOccurrence.LongTimeCurrentSetValue\tNUMBER\t\t502\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\tf0250a29-337f-4364-acb3-be5daa02add0\tPset_ProtectiveDeviceOccurrence.LongTimeDelay\tNUMBER\t\t502\t1\tIfcTimeMeasure\t1\r\nPARAM\tf9250bdd-70df-4cbf-af6a-d72d26170202\tPset_ProtectiveDeviceOccurrence.LongTimeFunction\tYESNO\t\t502\t1\tIfcBoolean\t1\r\nPARAM\ta4234ac0-9e04-4d25-883b-1529e5898574\tPset_ProtectiveDeviceOccurrence.PoleUsage\tTEXT\t\t502\t1\tPEnum_PoleUsage\t1\r\nPARAM\t70aaff91-61f9-49ee-b5bc-5517d4044d3e\tPset_ProtectiveDeviceOccurrence.ShortTimeCurrentSetValue\tNUMBER\t\t502\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t337c40a4-98c5-4e4b-aa54-a444cf4790ea\tPset_ProtectiveDeviceOccurrence.ShortTimeFunction\tYESNO\t\t502\t1\tIfcBoolean\t1\r\nPARAM\tab1a66c0-9b66-4bc3-9fab-a566d40fc3f6\tPset_ProtectiveDeviceOccurrence.ShortTimei2tFunction\tYESNO\t\t502\t1\tIfcBoolean\t1\r\nPARAM\t74cb82ee-d6ff-4aae-9f88-fe5222059167\tPset_ProtectiveDeviceOccurrence.ShortTimeTrippingTime\tNUMBER\t\t502\t1\tIfcTimeMeasure\t1\r\n#\r\nGROUP\t503\tPset_ProtectiveDeviceTrippingCurve\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3049d600-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingCurve.TrippingCurve\tMULTILINETEXT\t\t503\t1\tPropertyTableValue\t1\r\nPARAM\t245e1400-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingCurve.TrippingCurveType\tTEXT\t\t503\t1\tPEnum_TrippingCurveType\t1\r\n#\r\nGROUP\t504\tPset_ProtectiveDeviceTrippingFunctionGCurve\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t61c2a180-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.CurrentTolerance1\tNUMBER\t\t504\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t6d15cd00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.CurrentTolerance2\tNUMBER\t\t504\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t671fec00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.CurrentToleranceLimit1\tNUMBER\t\t504\t1\tIfcTimeMeasure\t1\r\nPARAM\t51122b80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ExternalAdjusted\tYESNO\t\t504\t1\tIfcBoolean\t1\r\nPARAM\t73a44480-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.IsCurrentTolerancePositiveOnly\tYESNO\t\t504\t1\tIfcBoolean\t1\r\nPARAM\t42c40f80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.IsSelectable\tYESNO\t\t504\t1\tIfcBoolean\t1\r\nPARAM\t8ae33200-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.IsTimeTolerancePositiveOnly\tYESNO\t\t504\t1\tIfcBoolean\t1\r\nPARAM\t4a83b400-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.NominalCurrentAdjusted\tYESNO\t\t504\t1\tIfcBoolean\t1\r\nPARAM\t57080c80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrent\tNUMBER\t\t504\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t9c2c3e80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrentI2tEnd\tNUMBER\t\t504\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t9171a980-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrentI2tStart\tNUMBER\t\t504\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t5bccc080-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTime\tNUMBER\t\t504\t1\tIfcTimeMeasure\t1\r\nPARAM\ta2221f80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTimeI2tEnd\tNUMBER\t\t504\t1\tIfcTimeMeasure\t1\r\nPARAM\t96cef400-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTimeI2tStart\tNUMBER\t\t504\t1\tIfcTimeMeasure\t1\r\nPARAM\t7a32bc00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.TimeTolerance1\tNUMBER\t\t504\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t84ed5100-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.TimeTolerance2\tNUMBER\t\t504\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t80289d00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.TimeToleranceLimit1\tNUMBER\t\t504\t1\tIfcElectricCurrentMeasure\t1\r\n#\r\nGROUP\t505\tPset_ProtectiveDeviceTrippingFunctionICurve\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc7af2900-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.CurrentTolerance1\tNUMBER\t\t505\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\td990cc00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.CurrentTolerance2\tNUMBER\t\t505\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\td0076400-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.CurrentToleranceLimit1\tNUMBER\t\t505\t1\tIfcTimeMeasure\t1\r\nPARAM\te2819d80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.IsCurrentTolerancePositiveOnly\tYESNO\t\t505\t1\tIfcBoolean\t1\r\nPARAM\ta3d271ad-1c7d-4743-92e5-ceb1ef243667\tPset_ProtectiveDeviceTrippingFunctionICurve.IsOffWhenSFunctionOn\tYESNO\t\t505\t1\tIfcBoolean\t1\r\nPARAM\tac441e00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.IsSelectable\tYESNO\t\t505\t1\tIfcBoolean\t1\r\nPARAM\tf9c08b00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.IsTimeTolerancePositiveOnly\tYESNO\t\t505\t1\tIfcBoolean\t1\r\nPARAM\tffb66c00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.MaxAdjustmentX_ICS\tNUMBER\t\t505\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\tb239ff00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.NominalCurrentAdjusted\tYESNO\t\t505\t1\tIfcBoolean\t1\r\nPARAM\tbc5bfd80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.ReleaseCurrent\tNUMBER\t\t505\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\tc251de80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.ReleaseTime\tNUMBER\t\t505\t1\tIfcTimeMeasure\t1\r\nPARAM\te8777e80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.TimeTolerance1\tNUMBER\t\t505\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tf3321380-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.TimeTolerance2\tNUMBER\t\t505\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tee6d5f80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.TimeToleranceLimit1\tNUMBER\t\t505\t1\tIfcElectricCurrentMeasure\t1\r\n#\r\nGROUP\t506\tPset_ProtectiveDeviceTrippingFunctionLCurve\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0a710100-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.IsSelectable\tYESNO\t\t506\t1\tIfcBoolean\t1\r\nPARAM\t27a5cf80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerCurrent1\tNUMBER\t\t506\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t2eccdd80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerCurrent2\tNUMBER\t\t506\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t34c2be80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerTime1\tNUMBER\t\t506\t1\tIfcTimeMeasure\t1\r\nPARAM\t39877280-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerTime2\tNUMBER\t\t506\t1\tIfcTimeMeasure\t1\r\nPARAM\t11980f00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperCurrent1\tNUMBER\t\t506\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t16f55980-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperCurrent2\tNUMBER\t\t506\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t1c52a400-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperTime1\tNUMBER\t\t506\t1\tIfcTimeMeasure\t1\r\nPARAM\t21afee80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperTime2\tNUMBER\t\t506\t1\tIfcTimeMeasure\t1\r\n#\r\nGROUP\t507\tPset_ProtectiveDeviceTrippingFunctionSCurve\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5a4fc800-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.CurrentTolerance1\tNUMBER\t\t507\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t66d42080-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.CurrentTolerance2\tNUMBER\t\t507\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t5fad1280-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.CurrentToleranceLimit1\tNUMBER\t\t507\t1\tIfcTimeMeasure\t1\r\nPARAM\t6d629800-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsCurrentTolerancePositiveOnly\tYESNO\t\t507\t1\tIfcBoolean\t1\r\nPARAM\t8521329d-79b1-46be-b0fd-056df538df7f\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsOffWhenLfunctionOn\tYESNO\t\t507\t1\tIfcBoolean\t1\r\nPARAM\t4310da80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsSelectable\tYESNO\t\t507\t1\tIfcBoolean\t1\r\nPARAM\t85d2b280-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsTimeTolerancePositiveOnly\tYESNO\t\t507\t1\tIfcBoolean\t1\r\nPARAM\t4906bb80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.NominalCurrentAdjusted\tYESNO\t\t507\t1\tIfcBoolean\t1\r\nPARAM\t4f953300-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrent\tNUMBER\t\t507\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t97b45580-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrentI2tEnd\tNUMBER\t\t507\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t8c612a00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrentI2tStart\tNUMBER\t\t507\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t54f27d80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTime\tNUMBER\t\t507\t1\tIfcTimeMeasure\t1\r\nPARAM\t9e42cd00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTimeI2tEnd\tNUMBER\t\t507\t1\tIfcTimeMeasure\t1\r\nPARAM\t92efa180-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTimeI2tStart\tNUMBER\t\t507\t1\tIfcTimeMeasure\t1\r\nPARAM\t7489a600-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.TimeTolerance1\tNUMBER\t\t507\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t7fdcd180-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.TimeTolerance2\tNUMBER\t\t507\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t79e6f080-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.TimeToleranceLimit1\tNUMBER\t\t507\t1\tIfcElectricCurrentMeasure\t1\r\n#\r\nGROUP\t508\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc4686d00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentDesignation\tTEXT\t\t508\t1\tIfcLabel\t1\r\nPARAM\tb0bd0680-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentRange\tMULTILINETEXT\t\t508\t1\tPropertyBoundedValue\t1\r\nPARAM\tb87cab00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentRangeStepValue\tNUMBER\t\t508\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\tbe728c00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentValues\tMULTILINETEXT\t\t508\t1\tPropertyListValue\t1\r\nPARAM\ta864cb80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentValueType\tTEXT\t\t508\t1\tPEnum_AdjustmentValueType\t1\r\nPARAM\t48ef3404-d004-41f7-a762-b796a057d713\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.CurrentAdjustmentRange\tMULTILINETEXT\t\t508\t1\tPropertyBoundedValue\t1\r\nPARAM\t8e7d356a-ac18-4344-bb08-78a74daa6fa3\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.CurrentAdjustmentRangeStepValue\tNUMBER\t\t508\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\tc8b1ed4c-7ce5-4c78-98d3-46e9c510ca55\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.CurrentAdjustmentValues\tMULTILINETEXT\t\t508\t1\tPropertyListValue\t1\r\n#\r\nGROUP\t509\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te9f57680-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentDesignation\tTEXT\t\t509\t1\tIfcLabel\t1\r\nPARAM\td813d380-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentRange\tMULTILINETEXT\t\t509\t1\tPropertyBoundedValue\t1\r\nPARAM\tdfd37800-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentRangeStepValue\tNUMBER\t\t509\t1\tIfcTimeMeasure\t1\r\nPARAM\te530c280-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentValues\tMULTILINETEXT\t\t509\t1\tPropertyListValue\t1\r\nPARAM\tcfbb9880-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentValueType\tTEXT\t\t509\t1\tPEnum_AdjustmentValueType\t1\r\nPARAM\tf083ee00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.CurrentForTimeDelay\tNUMBER\t\t509\t1\tIfcTimeMeasure\t1\r\nPARAM\tf548a200-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.I2TApplicability\tTEXT\t\t509\t1\tPEnum_AdjustmentValueType\t1\r\nPARAM\t8c0625bc-4b39-4844-9062-8ee9b42d63c1\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.TimeAdjustmentRange\tMULTILINETEXT\t\t509\t1\tPropertyBoundedValue\t1\r\nPARAM\t5d9679b3-06e9-463c-a697-1e7603638b5d\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.TimeAdjustmentRangeStepValue\tNUMBER\t\t509\t1\tIfcTimeMeasure\t1\r\nPARAM\te74a1583-60c3-4f47-8cb6-58727b9ddc60\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.TimeAdjustmentValues\tMULTILINETEXT\t\t509\t1\tPropertyListValue\t1\r\n#\r\nGROUP\t510\tPset_ProtectiveDeviceTrippingUnitTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2c1eb800-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.AtexVerified\tYESNO\t\t510\t1\tIfcBoolean\t1\r\nPARAM\t393ba700-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.LimitingTerminalSize\tAREA\t\t510\t1\tIfcAreaMeasure\t1\r\nPARAM\t32149900-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.OldDevice\tYESNO\t\t510\t1\tIfcBoolean\t1\r\nPARAM\t085b7200-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.Reference\tTEXT\t\t510\t1\tIfcIdentifier\t1\r\nPARAM\t1f01c900-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.Standard\tTEXT\t\t510\t1\tIfcLabel\t1\r\nPARAM\t0e515300-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.Status\tTEXT\t\t510\t1\tPEnum_ElementStatus\t1\r\nPARAM\t25904080-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.UseInDiscrimination\tYESNO\t\t510\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t511\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t84ee5080-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.CurveDesignation\tTEXT\t\t511\t1\tIfcLabel\t1\r\nPARAM\t68521880-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.DefinedTemperature\tNUMBER\t\t511\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t45bfff80-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.ElectroMagneticTrippingUnitType\tTEXT\t\t511\t1\tPEnum_ElectroMagneticTrippingUnitType\t1\r\nPARAM\t553f4880-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I1\tNUMBER\t\t511\t1\tIfcReal\t1\r\nPARAM\t5b352980-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I2\tNUMBER\t\t511\t1\tIfcReal\t1\r\nPARAM\t73a54400-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I4\tNUMBER\t\t511\t1\tIfcReal\t1\r\nPARAM\t799b2500-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I5\tNUMBER\t\t511\t1\tIfcReal\t1\r\nPARAM\t60927400-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.T2\tNUMBER\t\t511\t1\tIfcTimeMeasure\t1\r\nPARAM\t80299c80-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.T5\tNUMBER\t\t511\t1\tIfcTimeMeasure\t1\r\nPARAM\t6ee09000-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.TemperatureFactor\tNUMBER\t\t511\t1\tIfcRatioMeasure\t1\r\n#\r\nGROUP\t512\tPset_ProtectiveDeviceTrippingUnitTypeElectronic\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t92a3d600-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.ElectronicTrippingUnitType\tTEXT\t\t512\t1\tPEnum_ElectronicTrippingUnitType\t1\r\nPARAM\ta94a2d00-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection\tYESNO\t\t512\t1\tIfcBoolean\t1\r\nPARAM\tb8c97600-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_100\tYESNO\t\t512\t1\tIfcBoolean\t1\r\nPARAM\tb0713b00-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_50\tYESNO\t\t512\t1\tIfcBoolean\t1\r\nPARAM\tbebf5700-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_Select\tYESNO\t\t512\t1\tIfcBoolean\t1\r\nPARAM\ta2231f00-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.NominalCurrents\tMULTILINETEXT\t\t512\t1\tPropertyListValue\t1\r\n#\r\nGROUP\t513\tPset_ProtectiveDeviceTrippingUnitTypeResidualCurrent\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tcb43af80-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeResidualCurrent.TrippingUnitReleaseCurrent\tTEXT\t\t513\t1\tPEnum_TrippingUnitReleaseCurrent\t1\r\n#\r\nGROUP\t514\tPset_ProtectiveDeviceTrippingUnitTypeThermal\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0e058780-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.CurveDesignation\tTEXT\t\t514\t1\tIfcLabel\t1\r\nPARAM\t034af280-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.DefinedTemperature\tNUMBER\t\t514\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\tf29a7c80-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.I1\tNUMBER\t\t514\t1\tIfcReal\t1\r\nPARAM\tf8905d80-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.I2\tNUMBER\t\t514\t1\tIfcReal\t1\r\nPARAM\tfdeda800-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.T2\tNUMBER\t\t514\t1\tIfcTimeMeasure\t1\r\nPARAM\t0940d380-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.TemperatureFactor\tNUMBER\t\t514\t1\tIfcRatioMeasure\t1\r\nPARAM\te3b3ca00-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.ThermalTrippingUnitType\tTEXT\t\t514\t1\tPEnum_ThermalTrippingUnitType\t1\r\n#\r\nGROUP\t515\tPset_ProtectiveDeviceTypeAntiArcingDevice\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb99939fb-fe06-458b-bcba-a05970495127\tPset_ProtectiveDeviceTypeAntiArcingDevice.GroundingType\tTEXT\t\t515\t1\tIfcLabel\t1\r\nPARAM\tf49540a4-120e-44ef-921e-299aae96b556\tPset_ProtectiveDeviceTypeAntiArcingDevice.RatedVoltage\tMULTILINETEXT\t\t515\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t516\tPset_ProtectiveDeviceTypeCircuitBreaker\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t99591b9c-6800-4665-9039-f31820da59cf\tPset_ProtectiveDeviceTypeCircuitBreaker.CircuitBreakerType\tTEXT\t\t516\t1\tPEnum_CircuitBreakerType\t1\r\nPARAM\t47d68e00-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCircuitBreaker.ICM60947\tNUMBER\t\t516\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t3ab99f00-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCircuitBreaker.ICS60947\tNUMBER\t\t516\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t355c5480-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCircuitBreaker.ICU60947\tNUMBER\t\t516\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t40af8000-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCircuitBreaker.ICW60947\tNUMBER\t\t516\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t1bbb0d00-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCircuitBreaker.PerformanceClasses\tMULTILINETEXT\t\t516\t1\tPropertyListValue\t1\r\nPARAM\t22e21b00-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCircuitBreaker.VoltageLevel\tTEXT\t\t516\t1\tPEnum_VoltageLevels\t1\r\n#\r\nGROUP\t517\tPset_ProtectiveDeviceTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t197939f8-593d-43bf-a45b-1c4f1f7bf4c4\tPset_ProtectiveDeviceTypeCommon.CharacteristicTripCurve\tMULTILINETEXT\t\t517\t1\tPropertyTableValue\t1\r\nPARAM\t9798084c-6c22-4c0e-ad83-84c3bd0c4610\tPset_ProtectiveDeviceTypeCommon.CutOffCurrent\tNUMBER\t\t517\t1\t IfcElectricCurrentMeasure\t1\r\nPARAM\t155c0930-1322-498b-b22e-db6bf1c2c7af\tPset_ProtectiveDeviceTypeCommon.LimitingTerminalSize\tAREA\t\t517\t1\tIfcAreaMeasure\t1\r\nPARAM\te72023ae-3d5f-4532-9e32-cfe1608492fd\tPset_ProtectiveDeviceTypeCommon.MaximumRatedVoltage\tNUMBER\t\t517\t1\t IfcElectricVoltageMeasure\t1\r\nPARAM\t3b671b10-bed9-4d3c-87ad-28d7089f6d4d\tPset_ProtectiveDeviceTypeCommon.ProtectiveTagType\tTEXT\t\t517\t1\tIfcLabel\t1\r\nPARAM\tad4d52c3-ab62-4986-ac8f-2b0ebc5fd466\tPset_ProtectiveDeviceTypeCommon.RatedShortCircuitCurrent\tNUMBER\t\t517\t1\t IfcElectricCurrentMeasure\t1\r\nPARAM\t52912300-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCommon.Reference\tTEXT\t\t517\t1\tIfcIdentifier\t1\r\nPARAM\t5739d856-122b-4e68-a8c2-81a86f4ed166\tPset_ProtectiveDeviceTypeCommon.StandardUsed\tTEXT\t\t517\t1\tIfcLabel\t1\r\nPARAM\t58870400-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCommon.Status\tTEXT\t\t517\t1\tPEnum_ElementStatus\t1\r\nPARAM\tef51a61a-e272-4684-8136-20ce6502bbe6\tPset_ProtectiveDeviceTypeCommon.SwitchingDuty\tINTEGER\t\t517\t1\tIfcInteger\t1\r\n#\r\nGROUP\t518\tPset_ProtectiveDeviceTypeEarthFailureDevice\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tcfd1a78c-3987-490a-8efc-a74c82fbc125\tPset_ProtectiveDeviceTypeEarthFailureDevice.EarthFailureDeviceType\tTEXT\t\t518\t1\tPEnum_EarthFailureDeviceType\t1\r\nPARAM\t4d8448e2-8b3a-4ec8-967e-29005d4f630e\tPset_ProtectiveDeviceTypeEarthFailureDevice.Sensitivity\tNUMBER\t\t518\t1\t IfcElectricCurrentMeasure\t1\r\n#\r\nGROUP\t519\tPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td0552e80-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker.EarthFailureDeviceType\tTEXT\t\t519\t1\tPEnum_EarthFailureDeviceType\t1\r\nPARAM\te6fb8580-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker.Sensitivity\tNUMBER\t\t519\t1\tIfcElectricCurrentMeasure\t1\r\n#\r\nGROUP\t520\tPset_ProtectiveDeviceTypeFuseDisconnector\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t669df2ac-c538-4459-8a68-6b63997c3620\tPset_ProtectiveDeviceTypeFuseDisconnector.ArcExtinctionType\tTEXT\t\t520\t1\tIfcLabel\t1\r\nPARAM\te01f23cd-2333-47c3-8ae2-de06be685e21\tPset_ProtectiveDeviceTypeFuseDisconnector.BreakingCapacity\tNUMBER\t\t520\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\tf37fde00-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeFuseDisconnector.FuseDisconnectorType\tTEXT\t\t520\t1\tPEnum_FuseDisconnectorType\t1\r\nPARAM\t3fcb1e00-d1fe-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeFuseDisconnector.IC60269\tNUMBER\t\t520\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\tba8021ab-2621-4d2b-9895-98a54ac6c26f\tPset_ProtectiveDeviceTypeFuseDisconnector.NominalCurrent\tNUMBER\t\t520\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\td72fc209-0595-4089-9852-1dffe1c6b421\tPset_ProtectiveDeviceTypeFuseDisconnector.NominalFrequency\tNUMBER\t\t520\t1\tIfcFrequencyMeasure\t1\r\nPARAM\tf1d52346-422b-473b-b975-865cff5968e2\tPset_ProtectiveDeviceTypeFuseDisconnector.NumberOfPhases\tINTEGER\t\t520\t1\tIfcCountMeasure\t1\r\nPARAM\t993164ad-13e0-4fdc-88b6-b839ca4bd4e6\tPset_ProtectiveDeviceTypeFuseDisconnector.NumberOfPoles\tINTEGER\t\t520\t1\tIfcCountMeasure\t1\r\nPARAM\t45c0ff00-d1fe-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeFuseDisconnector.PowerLoss\tNUMBER\t\t520\t1\tIfcPowerMeasure\t1\r\nPARAM\tba63db9a-776d-49b0-bf0e-f8eb334f09d7\tPset_ProtectiveDeviceTypeFuseDisconnector.RatedVoltage\tMULTILINETEXT\t\t520\t1\tPropertyBoundedValue\t1\r\nPARAM\tf0fafe95-7016-4778-b06e-037d0d7bd186\tPset_ProtectiveDeviceTypeFuseDisconnector.ReferenceEnvironmentTemperature\tMULTILINETEXT\t\t520\t1\tPropertyBoundedValue\t1\r\nPARAM\t0f3800bf-a332-4a88-8a7b-6879bcf36f6f\tPset_ProtectiveDeviceTypeFuseDisconnector.TransformationRatio\tNUMBER\t\t520\t1\tIfcRatioMeasure\t1\r\nPARAM\t2d50e480-d1fe-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeFuseDisconnector.VoltageLevel\tTEXT\t\t520\t1\tPEnum_VoltageLevels\t1\r\n#\r\nGROUP\t521\tPset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t52455780-d1fe-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker.Sensitivity\tNUMBER\t\t521\t1\tIfcElectricCurrentMeasure\t1\r\n#\r\nGROUP\t522\tPset_ProtectiveDeviceTypeResidualCurrentSwitch\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5f624680-d1fe-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeResidualCurrentSwitch.Sensitivity\tNUMBER\t\t522\t1\tIfcElectricCurrentMeasure\t1\r\n#\r\nGROUP\t523\tPset_ProtectiveDeviceTypeSparkGap\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta7b65e44-c79e-44d8-8b17-a03455e438b6\tPset_ProtectiveDeviceTypeSparkGap.BreakdownVoltageTolerance\tNUMBER\t\t523\t1\tIfcElectricVoltageMeasure\t1\r\nPARAM\tb43bf48b-4005-4ab0-a536-7ffc10ef3c51\tPset_ProtectiveDeviceTypeSparkGap.Capacitance\tNUMBER\t\t523\t1\tIfcElectricCapacitanceMeasure\t1\r\nPARAM\te314a6fa-0337-45f9-840c-98745352747f\tPset_ProtectiveDeviceTypeSparkGap.CurrentRMS\tNUMBER\t\t523\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t985ff43b-000e-42a9-a8ee-354480c09ab3\tPset_ProtectiveDeviceTypeSparkGap.PowerDissipation\tNUMBER\t\t523\t1\tIfcPowerMeasure\t1\r\nPARAM\t6525066f-b703-45c4-942b-792d2e67202c\tPset_ProtectiveDeviceTypeSparkGap.Resistivity\tNUMBER\t\t523\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\t6895742d-128e-4a53-99b4-4a6b3c33a4e6\tPset_ProtectiveDeviceTypeSparkGap.SparkGapType\tTEXT\t\t523\t1\tPEnum_SparkGapType\t1\r\n#\r\nGROUP\t524\tPset_ProtectiveDeviceTypeVaristor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0c9a9e47-a2a9-4f8b-a2bf-6842f5033524\tPset_ProtectiveDeviceTypeVaristor.CharacteristicFunction\tTEXT\t\t524\t1\tIfcText\t1\r\nPARAM\t6b4e0880-d1fe-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeVaristor.VaristorType\tTEXT\t\t524\t1\tPEnum_VaristorType\t1\r\n#\r\nGROUP\t525\tPset_ProvisionForVoid\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te181857d-e7d7-4353-aff8-b8a80d92f4e5\tPset_ProvisionForVoid.Depth\tLENGTH\t\t525\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t85a000d2-fde2-4acd-a8b4-2f6fe0c5ee96\tPset_ProvisionForVoid.Diameter\tLENGTH\t\t525\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td2558354-c58b-4990-a8c0-abd41cca359a\tPset_ProvisionForVoid.Height\tLENGTH\t\t525\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3a6c1788-6357-46b2-b246-91047db064bf\tPset_ProvisionForVoid.System\tTEXT\t\t525\t1\tIfcLabel\t1\r\nPARAM\t7b1a2190-c406-4e4f-b9cf-fd1646a652e7\tPset_ProvisionForVoid.VoidShape\tTEXT\t\t525\t1\tIfcLabel\t1\r\nPARAM\t881f62f7-d488-4309-a8df-ea88b10dca6d\tPset_ProvisionForVoid.Width\tLENGTH\t\t525\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t526\tPset_PumpOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8587e680-d1fe-11e1-8000-00215ad4efdf\tPset_PumpOccurrence.BaseType\tTEXT\t\t526\t1\tPEnum_PumpBaseType\t1\r\nPARAM\t92a4d580-d1fe-11e1-8000-00215ad4efdf\tPset_PumpOccurrence.DriveConnectionType\tTEXT\t\t526\t1\tPEnum_PumpDriveConnectionType\t1\r\nPARAM\t7dc84200-d1fe-11e1-8000-00215ad4efdf\tPset_PumpOccurrence.ImpellerDiameter\tLENGTH\t\t526\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t527\tPset_PumpPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb36d2b00-d1fe-11e1-8000-00215ad4efdf\tPset_PumpPHistory.Flowrate\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\r\nPARAM\ta6503c00-d1fe-11e1-8000-00215ad4efdf\tPset_PumpPHistory.MechanicalEfficiency\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\r\nPARAM\ta9e3c300-d1fe-11e1-8000-00215ad4efdf\tPset_PumpPHistory.OverallEfficiency\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\r\nPARAM\tb6681b80-d1fe-11e1-8000-00215ad4efdf\tPset_PumpPHistory.Power\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\r\nPARAM\ted5c20c6-939d-48de-a28a-8dd9ea6f9a82\tPset_PumpPHistory.PowerHistory\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\r\nPARAM\tad774a00-d1fe-11e1-8000-00215ad4efdf\tPset_PumpPHistory.PressureRise\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\r\nPARAM\tb0723a80-d1fe-11e1-8000-00215ad4efdf\tPset_PumpPHistory.RotationSpeed\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t528\tPset_PumpTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t12eb9904-5fa1-4ccf-b894-348584a79236\tPset_PumpTypeCommon.CasingMaterial\tMULTILINETEXT\t\t528\t1\tIfcMaterial\t1\r\nPARAM\te6afba00-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.ConnectionSize\tLENGTH\t\t528\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td4ce1700-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.FlowRateRange\tMULTILINETEXT\t\t528\t1\tPropertyBoundedValue\t1\r\nPARAM\tdbf52500-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.FlowResistanceRange\tMULTILINETEXT\t\t528\t1\tPropertyBoundedValue\t1\r\nPARAM\t0e33eeaa-f9bc-4efd-99e0-535ace9c9559\tPset_PumpTypeCommon.ImpellerMaterial\tMULTILINETEXT\t\t528\t1\tIfcMaterial\t1\r\nPARAM\t6b45d691-f254-46e0-ab6e-63497beb877f\tPset_PumpTypeCommon.ImpellerSealMaterial\tMULTILINETEXT\t\t528\t1\tIfcMaterial\t1\r\nPARAM\tf5966c80-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.NetPositiveSuctionHead\tNUMBER\t\t528\t1\tIfcPressureMeasure\t1\r\nPARAM\tfb8c4d80-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.NominalRotationSpeed\tNUMBER\t\t528\t1\tIfcRotationalFrequencyMeasure\t1\r\nPARAM\tbff18380-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.Reference\tTEXT\t\t528\t1\tIfcIdentifier\t1\r\nPARAM\tc67ffb00-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.Status\tTEXT\t\t528\t1\tPEnum_ElementStatus\t1\r\nPARAM\tedd6c800-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.TemperatureRange\tMULTILINETEXT\t\t528\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t529\tPset_QuantityTakeOff\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t046f362c-9e56-4d1e-bb4f-bca8648f1a7e\tPset_QuantityTakeOff.LayerQuantity.LocalContext\tTEXT\t\t529\t1\tIfcText\t1\r\nPARAM\t01fb1e2d-7932-4c2f-840a-3232ec2eac53\tPset_QuantityTakeOff.LayerQuantity.MaterialLayer\tTEXT\t\t529\t1\tIfcIdentifier\t1\r\nPARAM\t2449df65-b4a9-44e1-b632-9323f9abf258\tPset_QuantityTakeOff.LocalContext\tTEXT\t\t529\t1\tIfcText\t1\r\nPARAM\t1da7db4a-ad94-4467-8298-34e7d244f7ea\tPset_QuantityTakeOff.Reference\tTEXT\t\t529\t1\tIfcIdentifier\t1\r\n#\r\nGROUP\t530\tPset_QuayCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t16ce4a2b-540a-4ac2-a5f0-a1c5ddef8d56\tPset_QuayCommon.BentSpacing\tLENGTH\t\t530\t1\tIfcLengthMeasure\t1\r\nPARAM\t7e08e41b-2652-4f81-b955-0da9e5c452be\tPset_QuayCommon.Elevation\tLENGTH\t\t530\t1\tIfcLengthMeasure\t1\r\nPARAM\t8bd42282-13ee-4e7c-bd8f-980d9ef8fc31\tPset_QuayCommon.QuaySectionType\tTEXT\t\t530\t1\tPEnum_SectionType\t1\r\nPARAM\t0a9a4362-4c59-4b90-9243-17f30421bb58\tPset_QuayCommon.StructuralType\tTEXT\t\t530\t1\tIfcLabel\t1\r\n#\r\nGROUP\t531\tPset_QuayDesignCriteria\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tad242645-84b4-4cf1-b56b-65386ba82140\tPset_QuayDesignCriteria.EquipmentLoading\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\r\nPARAM\teb5147b1-159c-4f91-8d31-433fbfd6df9b\tPset_QuayDesignCriteria.ExtremeHighWaterLevel\tLENGTH\t\t531\t1\tIfcLengthMeasure\t1\r\nPARAM\tf2d6b5e8-c3b5-43e6-b290-3c3bba6d001e\tPset_QuayDesignCriteria.ExtremeLowWaterLevel\tLENGTH\t\t531\t1\tIfcLengthMeasure\t1\r\nPARAM\tf4f48004-ffc0-4c67-b161-189e6d26da9d\tPset_QuayDesignCriteria.FlowLoading\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\r\nPARAM\t7b584e80-0ec7-4e14-8c37-e6b713ae81d6\tPset_QuayDesignCriteria.HighWaterLevel\tLENGTH\t\t531\t1\tIfcLengthMeasure\t1\r\nPARAM\tfbde8c19-610e-4199-8d6e-c5988e1c1cd1\tPset_QuayDesignCriteria.LowWaterLevel\tLENGTH\t\t531\t1\tIfcLengthMeasure\t1\r\nPARAM\t19e5ebd0-1ad7-4e3d-b605-a622c9e508f0\tPset_QuayDesignCriteria.ShipLoading\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\r\nPARAM\tb0fb0b52-27ba-4428-92e1-203904bbd18b\tPset_QuayDesignCriteria.UniformlyDistributedLoad\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\r\nPARAM\tf26ea228-eaa7-4d9d-9006-9bd5c2cd743f\tPset_QuayDesignCriteria.WaveLoading\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\r\n#\r\nGROUP\t532\tPset_RadiiKerbStone\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2c21de22-5f68-43b4-8f3a-a709fccc4247\tPset_RadiiKerbStone.CurveShape\tTEXT\t\t532\t1\tPEnum_CurveShapeEnum\t1\r\nPARAM\t485132d9-aa32-42d8-8dea-cbecae8ff98d\tPset_RadiiKerbStone.Radius\tLENGTH\t\t532\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t533\tPset_RailingCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1fe82a00-d1ff-11e1-8000-00215ad4efdf\tPset_RailingCommon.Diameter\tLENGTH\t\t533\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t1959b280-d1ff-11e1-8000-00215ad4efdf\tPset_RailingCommon.Height\tLENGTH\t\t533\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t270f3800-d1ff-11e1-8000-00215ad4efdf\tPset_RailingCommon.IsExternal\tYESNO\t\t533\t1\tIfcBoolean\t1\r\nPARAM\t06df7900-d1ff-11e1-8000-00215ad4efdf\tPset_RailingCommon.Reference\tTEXT\t\t533\t1\tIfcIdentifier\t1\r\nPARAM\t0d6df080-d1ff-11e1-8000-00215ad4efdf\tPset_RailingCommon.Status\tTEXT\t\t533\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t534\tPset_RailTypeBlade\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5a72b91b-d5c5-4362-a702-50ad4f256fb5\tPset_RailTypeBlade.BladeRadius\tLENGTH\t\t534\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tdc055456-b019-417e-bf05-3523d4b21575\tPset_RailTypeBlade.IsArticulatedBlade\tYESNO\t\t534\t1\tIfcBoolean\t1\r\nPARAM\t745c6d7c-45a3-4ed2-8399-a06494b2715d\tPset_RailTypeBlade.IsFallbackBlade\tYESNO\t\t534\t1\tIfcBoolean\t1\r\nPARAM\t245b9024-201d-465b-b706-8aba639554f9\tPset_RailTypeBlade.NominalLength\tLENGTH\t\t534\t1\tIfcNonNegativeLengthMeasure\t1\r\n#\r\nGROUP\t535\tPset_RailTypeCheckRail\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t060366c8-81ff-4c15-8e4e-ef37cd012b40\tPset_RailTypeCheckRail.CheckRailType\tTEXT\t\t535\t1\tPEnum_CheckRailType\t1\r\nPARAM\t0f86a95b-f29e-4436-844b-5d3933e2cc51\tPset_RailTypeCheckRail.InstallationPlan\tMULTILINETEXT\t\t535\t1\tIfcExternalReference\t1\r\n#\r\nGROUP\t536\tPset_RailTypeGuardRail\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1d52a2e7-dc81-495a-9ac2-0f4d74d2f551\tPset_RailTypeGuardRail.GuardRailConnection\tTEXT\t\t536\t1\tPEnum_GuardRailConnection\t1\r\nPARAM\t122ef822-3fd9-4a68-8d71-960209543015\tPset_RailTypeGuardRail.GuardRailType\tTEXT\t\t536\t1\tPEnum_GuardRailType\t1\r\nPARAM\tdde17d3b-380a-47e5-a194-fe0d3f49b4ec\tPset_RailTypeGuardRail.PositionInTrack\tTEXT\t\t536\t1\tPEnum_RelativePosition\t1\r\n#\r\nGROUP\t537\tPset_RailTypeRail\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4a2a8537-947f-4802-a1e1-6718253e695b\tPset_RailTypeRail.DrillOnRail\tTEXT\t\t537\t1\tPEnum_DrillOnRail\t1\r\nPARAM\td215a7b7-7e7b-47b8-ad38-80cf736076b1\tPset_RailTypeRail.InstallationPlan\tMULTILINETEXT\t\t537\t1\tIfcExternalReference\t1\r\nPARAM\t8d2598fd-b20b-451f-b24d-0aea3e08cab5\tPset_RailTypeRail.IsStainless\tYESNO\t\t537\t1\tIfcBoolean\t1\r\nPARAM\tdd0cbe0d-06e3-4a44-a7ff-101dfeb4a354\tPset_RailTypeRail.MinimumTensileStrength\tNUMBER\t\t537\t1\tIfcForceMeasure\t1\r\nPARAM\td9892358-2a7e-4c5f-a7c9-6cd122fdd8cd\tPset_RailTypeRail.PositionInTrack\tTEXT\t\t537\t1\tPEnum_RelativePosition\t1\r\nPARAM\tb30b7bb3-eada-453f-a327-c8cd41a0f6a4\tPset_RailTypeRail.RailCondition\tTEXT\t\t537\t1\tPEnum_RailCondition\t1\r\nPARAM\t1d074e59-02c3-462d-ac86-6c337c0c980c\tPset_RailTypeRail.RailDeliveryState\tTEXT\t\t537\t1\tPEnum_RailDeliveryState\t1\r\nPARAM\td05120f0-c50f-4ec3-b5a9-5b5a4709301a\tPset_RailTypeRail.RailElementaryLength\tTEXT\t\t537\t1\tPEnum_RailElementaryLength\t1\r\nPARAM\t843c1e51-4369-49aa-82db-2b038a98a3d7\tPset_RailTypeRail.TechnicalStandard\tMULTILINETEXT\t\t537\t1\tIfcExternalReference\t1\r\n#\r\nGROUP\t538\tPset_RailTypeStockRail\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t50bc62a6-2d70-4fc3-a2d1-0ee2fdef950e\tPset_RailTypeStockRail.InstallationPlan\tMULTILINETEXT\t\t538\t1\tIfcExternalReference\t1\r\nPARAM\t5d34f428-4fb5-43ba-a114-946399076210\tPset_RailTypeStockRail.NominalLength\tLENGTH\t\t538\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\ta6338c02-cb43-4eb0-9504-ef05b02d1160\tPset_RailTypeStockRail.StockRailRadius\tLENGTH\t\t538\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t539\tPset_RailwayBalise\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8c41f718-637b-45ce-a51e-aa195f2f2e5a\tPset_RailwayBalise.DetectionRange\tLENGTH\t\t539\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc395247d-6fa3-4046-9187-a04db86c1c80\tPset_RailwayBalise.FailureInformation\tTEXT\t\t539\t1\tIfcText\t1\r\nPARAM\tba3b2fc9-7d29-4e67-82aa-b0b6f061962b\tPset_RailwayBalise.InformationLength\tINTEGER\t\t539\t1\tIfcInteger\t1\r\nPARAM\ta8376ff6-2207-4707-b077-93e539003ad7\tPset_RailwayBalise.IP_Code\tTEXT\t\t539\t1\tIfcLabel\t1\r\nPARAM\t8477cded-357f-4836-acfd-880adfa7db68\tPset_RailwayBalise.NominalHeight\tLENGTH\t\t539\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\tb56f2ade-e7f4-4938-a788-1f89806f2b40\tPset_RailwayBalise.NominalLength\tLENGTH\t\t539\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t064d921a-64ed-433a-9dd5-23b5c51b1310\tPset_RailwayBalise.NominalWeight\tNUMBER\t\t539\t1\tIfcMassMeasure\t1\r\nPARAM\t6f98d949-24ca-4cae-951d-80ece6836ea3\tPset_RailwayBalise.NominalWidth\tLENGTH\t\t539\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t9dffeec5-bb94-44d9-a921-07a34e7b236b\tPset_RailwayBalise.OperationalTemperatureRange\tMULTILINETEXT\t\t539\t1\tPropertyBoundedValue\t1\r\nPARAM\tdb5e9706-7d28-46ef-ac56-9efa694e3122\tPset_RailwayBalise.RailwayBaliseType\tTEXT\t\t539\t1\tPEnum_RailwayBaliseType\t1\r\nPARAM\t84a915d0-c89a-4d28-929d-d9db81506715\tPset_RailwayBalise.TransmissionRate\tINTEGER\t\t539\t1\tIfcIntegerCountRateMeasure\t1\r\n#\r\nGROUP\t540\tPset_RailwayCableCarrier\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb88b34ec-ffa1-41f9-b0a4-3bc5c44f252d\tPset_RailwayCableCarrier.NumberOfCrossedTracks\tINTEGER\t\t540\t1\tIfcCountMeasure\t1\r\n#\r\nGROUP\t541\tPset_RailwayLevelCrossing\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5ae6a677-fc86-4150-871b-fef36a4ef386\tPset_RailwayLevelCrossing.HasRailDrainage\tYESNO\t\t541\t1\tIfcBoolean\t1\r\nPARAM\tfbed2bd7-245a-4450-bc94-75a407ee2a2e\tPset_RailwayLevelCrossing.IsAccessibleByVehicle\tYESNO\t\t541\t1\tIfcBoolean\t1\r\nPARAM\t8f5ae1eb-44e2-4c05-9d1e-b5d0170d7ef7\tPset_RailwayLevelCrossing.IsExceptionalTransportRoute\tYESNO\t\t541\t1\tIfcBoolean\t1\r\nPARAM\t0c2ef4a9-7aa3-4bf8-a9f6-0a2dfbfaa6b9\tPset_RailwayLevelCrossing.IsPrivateOwner\tYESNO\t\t541\t1\tIfcBoolean\t1\r\nPARAM\tbe7b7bf3-1635-4d28-b1ef-a40a1f49f5d3\tPset_RailwayLevelCrossing.IsSecuredBySignalingSystem\tYESNO\t\t541\t1\tIfcBoolean\t1\r\nPARAM\tf1a026d8-edc1-47c8-91dd-735dda42aa0b\tPset_RailwayLevelCrossing.PermissiblePavementLoad\tNUMBER\t\t541\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t542\tPset_RailwaySignalAspect\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0484a5fd-c0a6-45dc-a65e-5f4e3cb956a5\tPset_RailwaySignalAspect.AppliesToTrainCategory\tTEXT\t\t542\t1\tPEnum_TrainCategory\t1\r\nPARAM\ta18187dd-afa3-4062-834f-ecf0be8443d9\tPset_RailwaySignalAspect.SignalAspectSymbol\tMULTILINETEXT\t\t542\t1\tIfcExternalReference\t1\r\nPARAM\te60cfd43-6d0c-4fe9-9d1e-8450f83999fd\tPset_RailwaySignalAspect.SignalAspectType\tTEXT\t\t542\t1\tIfcLabel\t1\r\nPARAM\t0ee92e3f-663b-425c-8c4d-c124e234ec20\tPset_RailwaySignalAspect.SignLegend\tTEXT\t\t542\t1\tIfcText\t1\r\n#\r\nGROUP\t543\tPset_RailwaySignalOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\teb2e101b-8282-4ab2-9ce8-9d7a3ded4514\tPset_RailwaySignalOccurrence.ApproachSpeed\tNUMBER\t\t543\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\t52a81ad5-189f-46b1-824f-aa57bcc7a2a6\tPset_RailwaySignalOccurrence.DistanceToStopMark\tLENGTH\t\t543\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tcaa0ed64-b5da-4498-b76c-84cb115a2baf\tPset_RailwaySignalOccurrence.HandSignallingProhibited\tYESNO\t\t543\t1\tIfcBoolean\t1\r\nPARAM\t0fa9288f-ff61-46b2-92af-e0a125294ae9\tPset_RailwaySignalOccurrence.HinderingObstaclesDescription\tTEXT\t\t543\t1\tIfcText\t1\r\nPARAM\t428c0db4-1b41-4263-9742-21b44ad8fb33\tPset_RailwaySignalOccurrence.LimitedClearances\tTEXT\t\t543\t1\tIfcText\t1\r\nPARAM\t2d224350-ca1a-4ed0-a740-c036673fd095\tPset_RailwaySignalOccurrence.NumberOfLampsNotUsed\tINTEGER\t\t543\t1\tIfcCountMeasure\t1\r\nPARAM\ta5f4aa1b-99cc-47aa-a2fa-3d6a6fcdfa7c\tPset_RailwaySignalOccurrence.RequiresBannerSignal\tYESNO\t\t543\t1\tIfcBoolean\t1\r\nPARAM\t115da345-4e00-41bf-819a-2b3484e63be6\tPset_RailwaySignalOccurrence.RequiresOLEMesh\tYESNO\t\t543\t1\tIfcBoolean\t1\r\nPARAM\t384ec591-9255-4bef-8fe4-56f3dc78b5da\tPset_RailwaySignalOccurrence.RequiresSafetyHandrail\tYESNO\t\t543\t1\tIfcBoolean\t1\r\nPARAM\t96638635-4ea5-448d-af64-06e4f5d4de94\tPset_RailwaySignalOccurrence.SignalPostTelephoneID\tTEXT\t\t543\t1\tIfcIdentifier\t1\r\nPARAM\tfa762a6a-a6f0-4b0e-a8e5-4128f875eb4c\tPset_RailwaySignalOccurrence.SignalPostTelephoneType\tTEXT\t\t543\t1\tIfcLabel\t1\r\nPARAM\t9c88f94f-6055-4d7b-ab8a-16583e70b92a\tPset_RailwaySignalOccurrence.SignalWalkwayLength\tLENGTH\t\t543\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf59b53f2-efec-4099-bfb6-caeaf5d3dda0\tPset_RailwaySignalOccurrence.SpecialPositionArrangement\tTEXT\t\t543\t1\tIfcLabel\t1\r\n#\r\nGROUP\t544\tPset_RailwaySignalSighting\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td7873b3e-7975-4496-8f32-5dedd8836786\tPset_RailwaySignalSighting.SignalSightingAchievableDistance\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t5ebebde4-816d-44f3-9086-5d858102023c\tPset_RailwaySignalSighting.SignalSightingAvailableDistance\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t6070bdd3-e60d-4ff2-9bb8-c08a4286f60d\tPset_RailwaySignalSighting.SignalSightingCombinedWithRepeater\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t82f39cc0-700c-4bdd-acb8-ff074096d43b\tPset_RailwaySignalSighting.SignalSightingMinimum\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\ted1463ee-db21-4ae3-bdbd-1918ebc7ce2c\tPset_RailwaySignalSighting.SignalSightingPreferred\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc386187b-bd42-4c09-86c4-a1c9f11316f0\tPset_RailwaySignalSighting.SignalSightingRouteIndicator\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td1b1d8d7-becf-45dc-aa9f-cfe029d5e2dc\tPset_RailwaySignalSighting.SignalViewingMinimumInFront\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t545\tPset_RailwaySignalType\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td5a9cc83-7756-4e8b-b302-73249d5cd608\tPset_RailwaySignalType.HasConductorRailGuardBoard\tYESNO\t\t545\t1\tIfcBoolean\t1\r\nPARAM\t229b2636-1e84-4f45-a1ed-79559673398e\tPset_RailwaySignalType.HotStripOrientation\tTEXT\t\t545\t1\tIfcLabel\t1\r\nPARAM\t3ee3d758-3736-4ec1-ae60-15793b88c805\tPset_RailwaySignalType.IsHighType\tYESNO\t\t545\t1\tIfcBoolean\t1\r\nPARAM\tb9675394-4fd4-4265-bac8-f78ae6618f0d\tPset_RailwaySignalType.LensDiffuserOrientation\tTEXT\t\t545\t1\tIfcLabel\t1\r\nPARAM\tf42020d4-b386-4688-9c62-a35cbe503a67\tPset_RailwaySignalType.LensDiffuserType\tTEXT\t\t545\t1\tIfcLabel\t1\r\nPARAM\ta300b132-8625-42fc-a2b2-80c4e6db89ae\tPset_RailwaySignalType.MaximumDisplayDistance\tLENGTH\t\t545\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tfd5b6747-bdb2-440b-89b0-3c16ab61f8a9\tPset_RailwaySignalType.NumberOfLamps\tINTEGER\t\t545\t1\tIfcCountMeasure\t1\r\nPARAM\t1a873cd6-ef4b-4506-9553-ee65f5853f47\tPset_RailwaySignalType.RailwaySignalType\tTEXT\t\t545\t1\tPEnum_RailwaySignalType\t1\r\nPARAM\t0f7d4ab9-e619-46f3-b188-c01435c6d751\tPset_RailwaySignalType.RequiredDisplayDistance\tLENGTH\t\t545\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t6725aae6-3629-4228-b179-880de03403ba\tPset_RailwaySignalType.SignalHoodLength\tLENGTH\t\t545\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t6a458c05-545f-4225-910d-c15a8da5b7a0\tPset_RailwaySignalType.SignalIndicatorType\tTEXT\t\t545\t1\tPEnum_SignalIndicatorType\t1\r\nPARAM\t5cd5e098-ee37-46d4-916c-a3241d67ec9f\tPset_RailwaySignalType.SignalMessage\tTEXT\t\t545\t1\tIfcText\t1\r\n#\r\nGROUP\t546\tPset_RailwayTrackStructurePart\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te01edf54-0e62-47d4-aaf5-70ba2485d812\tPset_RailwayTrackStructurePart.HasBallastTrack\tYESNO\t\t546\t1\tIfcBoolean\t1\r\nPARAM\taab6a8df-4f73-4933-b893-faf9fece7f82\tPset_RailwayTrackStructurePart.HasCWR\tYESNO\t\t546\t1\tIfcBoolean\t1\r\nPARAM\tbc6907b2-d806-4ebd-bd65-7b4391724370\tPset_RailwayTrackStructurePart.IsSunExposed\tYESNO\t\t546\t1\tIfcBoolean\t1\r\nPARAM\t395daabc-a3c4-45b9-bffb-607a913923af\tPset_RailwayTrackStructurePart.TrackSupportingStructure\tTEXT\t\t546\t1\tPEnum_TrackSupportingStructure\t1\r\n#\r\nGROUP\t547\tPset_RampCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5b82f400-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.FireExit\tYESNO\t\t547\t1\tIfcBoolean\t1\r\nPARAM\t558d1300-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.FireRating\tTEXT\t\t547\t1\tIfcLabel\t1\r\nPARAM\t60e03e80-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.HandicapAccessible\tYESNO\t\t547\t1\tIfcBoolean\t1\r\nPARAM\t663d8900-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.HasNonSkidSurface\tYESNO\t\t547\t1\tIfcBoolean\t1\r\nPARAM\t502fc880-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.IsExternal\tYESNO\t\t547\t1\tIfcBoolean\t1\r\nPARAM\t761e9ee4-c875-4484-9c2a-57a17935596e\tPset_RampCommon.LoadBearing\tYESNO\t\t547\t1\tIfcBoolean\t1\r\nPARAM\t33939080-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.Reference\tTEXT\t\t547\t1\tIfcIdentifier\t1\r\nPARAM\t45753380-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.RequiredHeadroom\tLENGTH\t\t547\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t4c03ab00-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.RequiredSlope\tNUMBER\t\t547\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t38f0db00-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.Status\tTEXT\t\t547\t1\tPEnum_ElementStatus\t1\r\nPARAM\td656025e-d2cd-4245-98c8-b1b57aa9e3a0\tPset_RampCommon.ThermalTransmittance\tNUMBER\t\t547\t1\tIfcThermalTransmittanceMeasure\t1\r\n#\r\nGROUP\t548\tPset_RampFlightCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t566f48cd-afd5-4b54-82f1-c0387bee94fb\tPset_RampFlightCommon.ClearWidth\tLENGTH\t\t548\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t87ed2c28-1a19-44ef-8e39-ba59fe45f6fe\tPset_RampFlightCommon.CounterSlope\tNUMBER\t\t548\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t853c1b00-d1ff-11e1-8000-00215ad4efdf\tPset_RampFlightCommon.Headroom\tLENGTH\t\t548\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t2421781d-cac5-4915-9d0c-f0a84a471b1a\tPset_RampFlightCommon.Reference\tTEXT\t\t548\t1\tIfcIdentifier\t1\r\nPARAM\t4894c521-4bf4-4a8f-b343-7a46abf60dce\tPset_RampFlightCommon.Slope\tNUMBER\t\t548\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t3d94d802-c6c2-4151-b449-da5f830c22c5\tPset_RampFlightCommon.Status\tTEXT\t\t548\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t549\tPset_ReferentCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td1989704-a7ad-4a0b-92ca-f61004a1fac7\tPset_ReferentCommon.NameFormat\tTEXT\t\t549\t1\tIfcLabel\t1\r\n#\r\nGROUP\t550\tPset_ReinforcementBarCountOfIndependentFooting\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta00e8f80-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarCountOfIndependentFooting.Description\tTEXT\t\t550\t1\tIfcText\t1\r\nPARAM\ta4d34380-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarCountOfIndependentFooting.Reference\tTEXT\t\t550\t1\tIfcLabel\t1\r\nPARAM\taac92480-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarCountOfIndependentFooting.XDirectionLowerBarCount\tINTEGER\t\t550\t1\tIfcCountMeasure\t1\r\nPARAM\tb4528c80-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarCountOfIndependentFooting.XDirectionUpperBarCount\tINTEGER\t\t550\t1\tIfcCountMeasure\t1\r\nPARAM\taf8dd880-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarCountOfIndependentFooting.YDirectionLowerBarCount\tINTEGER\t\t550\t1\tIfcCountMeasure\t1\r\nPARAM\tb9174080-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarCountOfIndependentFooting.YDirectionUpperBarCount\tINTEGER\t\t550\t1\tIfcCountMeasure\t1\r\n#\r\nGROUP\t551\tPset_ReinforcementBarPitchOfBeam\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc59b9900-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfBeam.Description\tTEXT\t\t551\t1\tIfcText\t1\r\nPARAM\tcb917a00-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfBeam.Reference\tTEXT\t\t551\t1\tIfcLabel\t1\r\nPARAM\td9df9600-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfBeam.SpacingBarPitch\tLENGTH\t\t551\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td3511e80-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfBeam.StirrupBarPitch\tLENGTH\t\t551\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t552\tPset_ReinforcementBarPitchOfColumn\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te82db200-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.Description\tTEXT\t\t552\t1\tIfcText\t1\r\nPARAM\t01366300-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.HoopBarPitch\tLENGTH\t\t552\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tecf26600-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.Reference\tTEXT\t\t552\t1\tIfcLabel\t1\r\nPARAM\tf54aa100-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.ReinforcementBarType\tTEXT\t\t552\t1\tPEnum_ReinforcementBarType\t1\r\nPARAM\t085d7100-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.XDirectionTieHoopBarPitch\tLENGTH\t\t552\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t101d1580-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.XDirectionTieHoopCount\tINTEGER\t\t552\t1\tIfcCountMeasure\t1\r\nPARAM\t14e1c980-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.YDirectionTieHoopBarPitch\tLENGTH\t\t552\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t1ca16e00-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.YDirectionTieHoopCount\tINTEGER\t\t552\t1\tIfcCountMeasure\t1\r\n#\r\nGROUP\t553\tPset_ReinforcementBarPitchOfContinuousFooting\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t39d63c80-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfContinuousFooting.CrossingLowerBarPitch\tLENGTH\t\t553\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t32169800-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfContinuousFooting.CrossingUpperBarPitch\tLENGTH\t\t553\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t25923f80-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfContinuousFooting.Description\tTEXT\t\t553\t1\tIfcText\t1\r\nPARAM\t2b882080-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfContinuousFooting.Reference\tTEXT\t\t553\t1\tIfcLabel\t1\r\n#\r\nGROUP\t554\tPset_ReinforcementBarPitchOfSlab\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t48245880-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.Description\tTEXT\t\t554\t1\tIfcText\t1\r\nPARAM\t8de12100-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.LongInsideCenterLowerBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t5d998280-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.LongInsideCenterTopBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t95a0c580-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.LongInsideEndLowerBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t65f1bd80-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.LongInsideEndTopBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t8588e600-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.LongOutsideLowerBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t55414780-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.LongOutsideTopBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t4eb2d000-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.Reference\tTEXT\t\t554\t1\tIfcLabel\t1\r\nPARAM\ta5200e80-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.ShortInsideCenterLowerBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t75710680-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.ShortInsideCenterTopBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tacdfb300-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.ShortInsideEndLowerBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t7dc94180-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.ShortInsideEndTopBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9cc7d380-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.ShortOutsideLowerBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t6e49f880-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.ShortOutsideTopBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t555\tPset_ReinforcementBarPitchOfWall\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc84abe00-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfWall.BarAllocationType\tTEXT\t\t555\t1\tPEnum_ReinforcementBarAllocationType\t1\r\nPARAM\tbbc66580-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfWall.Description\tTEXT\t\t555\t1\tIfcText\t1\r\nPARAM\tde587e80-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfWall.HorizontalBarPitch\tLENGTH\t\t555\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc1bc4680-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfWall.Reference\tTEXT\t\t555\t1\tIfcLabel\t1\r\nPARAM\te7495000-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfWall.SpacingBarPitch\tLENGTH\t\t555\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td698da00-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfWall.VerticalBarPitch\tLENGTH\t\t555\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t556\tPset_ReinforcingBarBendingsBECCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t6c9856e4-8bc3-45e9-ad41-d289687e1b26\tPset_ReinforcingBarBendingsBECCommon.BECBarShapeCode\tTEXT\t\t556\t1\tIfcLabel\t1\r\nPARAM\t2d6fce8a-1551-48d8-9a75-d8aaf8887c9b\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_u\tNUMBER\t\t556\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t4074891f-141d-47fd-97b6-8d7f5a61c48c\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_u1\tNUMBER\t\t556\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t1fa303e8-e7df-48a4-8ed4-5b39995dd9dc\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_v\tNUMBER\t\t556\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t93d7c237-1813-48e0-9049-bb4f5ee8c043\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_v1\tNUMBER\t\t556\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t0be5660e-1db1-4892-a2bc-64261f9a838a\tPset_ReinforcingBarBendingsBECCommon.BECCuttingLength\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\ta0d2d0f3-f6e3-48d3-af7a-e239f4f18169\tPset_ReinforcingBarBendingsBECCommon.BECRollerDiameter\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t8c4e1036-730f-49b6-b74e-d4f41c826343\tPset_ReinforcingBarBendingsBECCommon.BECShapeAid_x\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t1d020b72-0665-4858-93f0-1e0bebe0f55d\tPset_ReinforcingBarBendingsBECCommon.BECShapeAid_y\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t61e6c56f-2b34-48aa-bb1c-c982a74b3cd8\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_a\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tefa26f42-a8f1-4d48-98e8-5f03bd51e92d\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_b\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t080f0c84-a25d-4fe6-9c52-794734b6bc7a\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_c\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t930382cb-e505-45e8-aa5d-ccfb6f50ae6b\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_d\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t112a6b9b-efae-431c-95e4-9bc52d919c69\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_e\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te6296586-8f38-4edb-8a67-94eb67c20026\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_f\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t77faf4db-193a-4b21-8434-f7214afd2021\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_g\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc5bfdf69-b893-433b-a38c-4fe18873d69f\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_h\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t889650e3-3fad-4802-b63b-9b2bb3d4f180\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_i\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t052144b9-daf6-4f52-8349-2f3e7120d372\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_j\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t29649e55-8a1d-4c1c-a5d2-10da06513d38\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_k\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t6882a7d6-4567-4ab6-a120-c994abeecd48\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_l\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t557\tPset_ReinforcingBarBendingsBS8666Common\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t9e8c172f-adb7-4630-a4f5-14fbab2c93bd\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeCode\tTEXT\t\t557\t1\tIfcLabel\t1\r\nPARAM\t3f4f16eb-dd52-4639-99e4-8c0ddfa3ba8a\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_A\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t2cea6042-cf12-4f5f-a211-a97a6c6d5977\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_B\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t224e2694-9acf-497a-94a9-eecf8077459b\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_C\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t6870558a-9f86-493a-a00b-fe749bdf213f\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_D\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t1f079e2c-4cb2-4123-b5d0-261a16fe4008\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_E\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t02de028a-bab3-4c45-85ab-b19c853d3f5e\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_r\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t558\tPset_ReinforcingBarBendingsDIN135610Common\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td77b13b2-fd3c-42ed-812a-bc83641b9c4b\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeCode\tTEXT\t\t558\t1\tIfcLabel\t1\r\nPARAM\tf44578e1-7c15-496b-bc89-439cf69ef785\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_a\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te857ba1a-085b-4128-9ad6-124c4d13900e\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_b\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\taa01933c-dd2a-4619-adfc-9801c3d75b14\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_c\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc51eddd6-3e3c-45e7-af2d-eb959309da8b\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_d\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tbe87ed30-7aee-40c5-89c6-b3c366237d21\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_e\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te0f974b8-1a67-449e-a15d-183d9e488f0c\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_z\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t559\tPset_ReinforcingBarBendingsISOCD3766Common\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7b4c7f43-34bc-433b-a2b1-c356a1be9d72\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766BendingEndHook\tNUMBER\t\t559\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t19d332b7-95e3-4bdc-935e-bae7e7533c8e\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766BendingStartHook\tNUMBER\t\t559\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t3fbd6282-57d3-454d-996d-a31de83f63fb\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeCode\tTEXT\t\t559\t1\tIfcLabel\t1\r\nPARAM\tee9089df-139f-429c-ac45-e34063c8f30a\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_a\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t1bffd71d-d79d-471f-a660-7a91672a32a4\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_b\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t83680e64-33e0-4052-a4b8-968b0eaaf524\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_c\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t4c4b7550-6f88-47ad-8770-2e8dd2b711bb\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_d\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3a60f25d-fa79-4289-9499-a34907f92aa0\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_e\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t1fb87150-d3e3-40ac-a2b3-693f14142838\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_R\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t560\tPset_ReinforcingBarCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td2837eec-2e95-439f-97cc-eef7c80d6580\tPset_ReinforcingBarCommon.BarLength\tLENGTH\t\t560\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t002c10a5-49c4-4cd3-a02a-7d3a7cc3e726\tPset_ReinforcingBarCommon.BarSpacing\tLENGTH\t\t560\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb4b93984-6b42-4bbe-8987-21fbff0d6c8e\tPset_ReinforcingBarCommon.BarSurface\tTEXT\t\t560\t1\tPEnum_ReinforcementBarSurface\t1\r\nPARAM\t766df352-b926-486a-8cfa-e4e207790013\tPset_ReinforcingBarCommon.BendingParameters\tMULTILINETEXT\t\t560\t1\tPropertyListValue\t1\r\nPARAM\tb89eecc8-c2d4-45f3-a269-38ae697189aa\tPset_ReinforcingBarCommon.BendingShapeCode\tTEXT\t\t560\t1\tIfcIdentifier\t1\r\nPARAM\te6ad1050-49cb-411b-a58e-97fb9eade51e\tPset_ReinforcingBarCommon.NominalDiameter\tLENGTH\t\t560\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td9c5cd9f-0bb4-453f-b678-181411558c5d\tPset_ReinforcingBarCommon.Reference\tTEXT\t\t560\t1\tIfcIdentifier\t1\r\nPARAM\t7d7be887-760d-4fe3-b130-2963f7bccd8a\tPset_ReinforcingBarCommon.Status\tTEXT\t\t560\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t561\tPset_ReinforcingMeshCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb5f3c301-977d-4d3c-ba13-3bb0b891e592\tPset_ReinforcingMeshCommon.LongitudinalBarBendingParameters\tMULTILINETEXT\t\t561\t1\tPropertyListValue\t1\r\nPARAM\t2b78e3e8-df42-4691-bfe7-60a6a7fe07e8\tPset_ReinforcingMeshCommon.LongitudinalBarBendingShapeCode\tTEXT\t\t561\t1\tIfcIdentifier\t1\r\nPARAM\t811e1893-d560-4309-b991-a91420614530\tPset_ReinforcingMeshCommon.LongitudinalBarNominalDiameter\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3d68be78-7e02-48bd-ac7b-d525d49bf731\tPset_ReinforcingMeshCommon.LongitudinalBarSpacing\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tdb73ef07-f02c-416d-9d6e-350ffbdd5611\tPset_ReinforcingMeshCommon.LongitudinalBarSurface\tTEXT\t\t561\t1\tPEnum_ReinforcementBarSurface\t1\r\nPARAM\t0829ac88-9a26-4665-b613-28d5c7ff7f24\tPset_ReinforcingMeshCommon.MeshLength\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t91489045-22ec-4efa-a54e-774dc160c4fb\tPset_ReinforcingMeshCommon.MeshWidth\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t13aaa238-51da-43c6-8f16-838b174e4676\tPset_ReinforcingMeshCommon.Reference\tTEXT\t\t561\t1\tIfcIdentifier\t1\r\nPARAM\t19d8547f-9b0d-4340-aaa9-0721fb5f9d3b\tPset_ReinforcingMeshCommon.Status\tTEXT\t\t561\t1\tPEnum_ElementStatus\t1\r\nPARAM\t3fde4864-276d-4e84-b252-0670e4b09e04\tPset_ReinforcingMeshCommon.TransverseBarBendingParameters\tMULTILINETEXT\t\t561\t1\tPropertyListValue\t1\r\nPARAM\t18a3346a-79c9-48f2-a572-94a707b4868c\tPset_ReinforcingMeshCommon.TransverseBarBendingShapeCode\tTEXT\t\t561\t1\tIfcIdentifier\t1\r\nPARAM\tb387b86a-2194-44f5-b961-f6b7dd3752ae\tPset_ReinforcingMeshCommon.TransverseBarNominalDiameter\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t5fc4c373-68ab-4588-9ff1-6a6fbe877c38\tPset_ReinforcingMeshCommon.TransverseBarSpacing\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc9d95d85-7737-4db6-b078-e9d73857f848\tPset_ReinforcingMeshCommon.TransverseBarSurface\tTEXT\t\t561\t1\tPEnum_ReinforcementBarSurface\t1\r\n#\r\nGROUP\t562\tPset_Reliability\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2cb1cbe5-8c56-44b1-82ee-ce10bd1a76b2\tPset_Reliability.MeanTimeBetweenFailure\tNUMBER\t\t562\t1\tIfcTimeMeasure\t1\r\n#\r\nGROUP\t563\tPset_RepairOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te0f6bbd3-ad25-4329-823a-68ff26fd1fb6\tPset_RepairOccurrence.MeanTimeToRepair\tNUMBER\t\t563\t1\tIfcTimeMeasure\t1\r\nPARAM\t596d58af-9978-44c7-b451-c723b278c4e6\tPset_RepairOccurrence.RepairContent\tTEXT\t\t563\t1\tIfcText\t1\r\nPARAM\t9f7d4b93-a289-4481-b6c6-eb3bfccdf652\tPset_RepairOccurrence.RepairDate\tTEXT\t\t563\t1\tIfcDate\t1\r\n#\r\nGROUP\t564\tPset_RevetmentCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbef0a85c-46cc-4d5a-ac61-7f9017d58dea\tPset_RevetmentCommon.Elevation\tLENGTH\t\t564\t1\tIfcLengthMeasure\t1\r\nPARAM\t8c504d40-0994-4630-83ac-4da0c48b6904\tPset_RevetmentCommon.StructuralType\tTEXT\t\t564\t1\tIfcLabel\t1\r\n#\r\nGROUP\t565\tPset_Risk\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t81a99380-d201-11e1-8000-00215ad4efdf\tPset_Risk.AffectsSurroundings\tYESNO\t\t565\t1\tIfcBoolean\t1\r\nPARAM\t30010900-d201-11e1-8000-00215ad4efdf\tPset_Risk.AssessmentOfRisk\tTEXT\t\t565\t1\tPEnum_RiskAssessment\t1\r\nPARAM\tbbce1db6-1955-4fb6-be8d-4ad4ff09a299\tPset_Risk.AssociatedActivity\tTEXT\t\t565\t1\tIfcLabel\t1\r\nPARAM\tac64a6a3-ec8f-4f76-814b-8cd85610fb5a\tPset_Risk.AssociatedLocation\tTEXT\t\t565\t1\tIfcLabel\t1\r\nPARAM\t07373bb4-d2e2-4da5-91e8-c6ccd468e3b2\tPset_Risk.AssociatedProduct\tTEXT\t\t565\t1\tIfcLabel\t1\r\nPARAM\t9247cbc4-89dd-4108-a5f2-9eb848a4d663\tPset_Risk.MitigatedRiskConsequence\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\r\nPARAM\t163ec94e-a824-4399-acac-404b6bb7e77b\tPset_Risk.MitigatedRiskLikelihood\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\r\nPARAM\t0b6b9bd3-803d-4d48-9e14-554892cb057a\tPset_Risk.MitigatedRiskSignificance\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\r\nPARAM\t8b3d3c5a-67b2-43d8-a6c7-f4b66ffa597d\tPset_Risk.MitigationPlanned\tTEXT\t\t565\t1\tIfcLabel\t1\r\nPARAM\t13dd66ef-38c6-4a69-9fa1-ae61b7db4884\tPset_Risk.MitigationProposed\tTEXT\t\t565\t1\tIfcLabel\t1\r\nPARAM\t1495fe00-d201-11e1-8000-00215ad4efdf\tPset_Risk.NatureOfRisk\tTEXT\t\t565\t1\tIfcLabel\t1\r\nPARAM\t88d0a180-d201-11e1-8000-00215ad4efdf\tPset_Risk.PreventiveMeassures\tMULTILINETEXT\t\t565\t1\tPropertyListValue\t1\r\nPARAM\t5f1b687e-f9ac-402d-af8b-09a8b82e7e17\tPset_Risk.RiskAssessmentMethodology\tTEXT\t\t565\t1\tIfcLabel\t1\r\nPARAM\t29729180-d201-11e1-8000-00215ad4efdf\tPset_Risk.RiskCause\tTEXT\t\t565\t1\tIfcText\t1\r\nPARAM\t44dd9c80-d201-11e1-8000-00215ad4efdf\tPset_Risk.RiskConsequence\tTEXT\t\t565\t1\tPEnum_RiskConsequence\t1\r\nPARAM\tec621fd6-235c-4fef-8270-daf3be5ea3a0\tPset_Risk.RiskName\tTEXT\t\t565\t1\tIfcLabel\t1\r\nPARAM\t7191b400-d201-11e1-8000-00215ad4efdf\tPset_Risk.RiskOwner\tTEXT\t\t565\t1\tPEnum_RiskOwner\t1\r\nPARAM\t5aeb5d00-d201-11e1-8000-00215ad4efdf\tPset_Risk.RiskRating\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\r\nPARAM\t0516b500-d201-11e1-8000-00215ad4efdf\tPset_Risk.RiskType\tTEXT\t\t565\t1\tPEnum_RiskType\t1\r\nPARAM\t1bbd0c00-d201-11e1-8000-00215ad4efdf\tPset_Risk.SubNatureOfRisk1\tTEXT\t\t565\t1\tIfcLabel\t1\r\nPARAM\t224b8380-d201-11e1-8000-00215ad4efdf\tPset_Risk.SubNatureOfRisk2\tTEXT\t\t565\t1\tIfcLabel\t1\r\nPARAM\t7b8c1065-ea9d-4bc4-a999-53ea101d3460\tPset_Risk.UnmitigatedRiskConsequence\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\r\nPARAM\t192acd8d-da03-4dc1-9758-f293dc10e01d\tPset_Risk.UnmitigatedRiskLikelihood\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\r\nPARAM\t4b06fa8f-114a-4c1f-bdd5-bb9b4888e06e\tPset_Risk.UnmitigatedRiskSignificance\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\r\n#\r\nGROUP\t566\tPset_RoadDesignCriteriaCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t52b8bf86-4e27-417e-9f57-fcd393c4bd05\tPset_RoadDesignCriteriaCommon.Crossfall\tNUMBER\t\t566\t1\tIfcRatioMeasure\t1\r\nPARAM\t0bc124e6-526d-425d-9c43-ed723d3b50e1\tPset_RoadDesignCriteriaCommon.DesignSpeed\tNUMBER\t\t566\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\t0c041470-0f96-4717-9fd0-d7c62c2f433e\tPset_RoadDesignCriteriaCommon.DesignTrafficVolume\tINTEGER\t\t566\t1\tIfcCountMeasure\t1\r\nPARAM\t9eeacdb4-0894-4e28-850d-157a0a5c9deb\tPset_RoadDesignCriteriaCommon.DesignVehicleClass\tTEXT\t\t566\t1\tIfcLabel\t1\r\nPARAM\tdf7d9884-2fa1-4802-8d82-17c5ec3ce882\tPset_RoadDesignCriteriaCommon.LaneWidth\tLENGTH\t\t566\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\ta6fd2657-e7fd-42da-b97e-e562a4c54e00\tPset_RoadDesignCriteriaCommon.NumberOfThroughLanes\tINTEGER\t\t566\t1\tIfcCountMeasure\t1\r\nPARAM\tf081cea6-5680-4b09-87b0-ef9574ebb8e5\tPset_RoadDesignCriteriaCommon.RoadDesignClass\tTEXT\t\t566\t1\tIfcLabel\t1\r\n#\r\nGROUP\t567\tPset_RoadGuardElement\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t6cd6455b-f668-42ef-b715-a00c8a18e459\tPset_RoadGuardElement.IsMoveable\tYESNO\t\t567\t1\tIfcBoolean\t1\r\nPARAM\t1a4d78bb-cabb-4cc5-a596-382e4b12c655\tPset_RoadGuardElement.IsTerminal\tYESNO\t\t567\t1\tIfcBoolean\t1\r\nPARAM\tca9fcd71-2511-4a1c-ac4c-89024fd15a16\tPset_RoadGuardElement.IsTransition\tYESNO\t\t567\t1\tIfcBoolean\t1\r\nPARAM\tb8123a9a-e47c-48fc-8d13-e585cfc36354\tPset_RoadGuardElement.TerminalType\tTEXT\t\t567\t1\tIfcLabel\t1\r\n#\r\nGROUP\t568\tPset_RoadMarkingCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t40197393-e5e0-401d-9242-2557e2d01765\tPset_RoadMarkingCommon.ApplicationMethod\tTEXT\t\t568\t1\tIfcText\t1\r\nPARAM\t817a70a8-6614-4698-a80d-f9a2b8e218c8\tPset_RoadMarkingCommon.DiagramNumber\tTEXT\t\t568\t1\tIfcLabel\t1\r\nPARAM\t788d1dcf-f7d8-4ea9-9195-39ad8a2816a4\tPset_RoadMarkingCommon.MaterialColour\tTEXT\t\t568\t1\tIfcLabel\t1\r\nPARAM\t9a9204ae-37a1-478e-817d-f5b1c775a24f\tPset_RoadMarkingCommon.MaterialThickness\tLENGTH\t\t568\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tfd473cfe-d282-430c-973c-339e56e83283\tPset_RoadMarkingCommon.MaterialType\tTEXT\t\t568\t1\tIfcLabel\t1\r\nPARAM\t46bd1ad0-e7de-482a-8b8f-ba4bddcb0d04\tPset_RoadMarkingCommon.Structure\tTEXT\t\t568\t1\tIfcLabel\t1\r\n#\r\nGROUP\t569\tPset_RoadSymbolsCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td3f6df7e-d095-4b79-8cf1-bba88c4adf52\tPset_RoadSymbolsCommon.Text\tTEXT\t\t569\t1\tIfcText\t1\r\nPARAM\ta0bfc334-12c8-4b72-9f01-7a33dd57f342\tPset_RoadSymbolsCommon.TypeDesignation\tTEXT\t\t569\t1\tIfcLabel\t1\r\n#\r\nGROUP\t570\tPset_RoofCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tadc51480-d201-11e1-8000-00215ad4efdf\tPset_RoofCommon.AcousticRating\tTEXT\t\t570\t1\tIfcLabel\t1\r\nPARAM\tb584b900-d201-11e1-8000-00215ad4efdf\tPset_RoofCommon.FireRating\tTEXT\t\t570\t1\tIfcLabel\t1\r\nPARAM\tbd445d80-d201-11e1-8000-00215ad4efdf\tPset_RoofCommon.IsExternal\tYESNO\t\t570\t1\tIfcBoolean\t1\r\nPARAM\t87a90f61-4ea4-4ebe-a4d7-523924d88911\tPset_RoofCommon.LoadBearing\tYESNO\t\t570\t1\tIfcBoolean\t1\r\nPARAM\t2ed6cec4-3f7b-46db-9747-865a45f796e3\tPset_RoofCommon.ProjectedArea\tAREA\t\t570\t1\tIfcAreaMeasure\t1\r\nPARAM\t984fea80-d201-11e1-8000-00215ad4efdf\tPset_RoofCommon.Reference\tTEXT\t\t570\t1\tIfcIdentifier\t1\r\nPARAM\t9e45cb80-d201-11e1-8000-00215ad4efdf\tPset_RoofCommon.Status\tTEXT\t\t570\t1\tPEnum_ElementStatus\t1\r\nPARAM\tc46b6b80-d201-11e1-8000-00215ad4efdf\tPset_RoofCommon.ThermalTransmittance\tNUMBER\t\t570\t1\tIfcThermalTransmittanceMeasure\t1\r\nPARAM\td3597dc3-6116-4c78-b549-b4cc7d7d954b\tPset_RoofCommon.TotalArea\tAREA\t\t570\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t571\tPset_SanitaryTerminalTypeBath\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td0572d80-d201-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeBath.BathType\tTEXT\t\t571\t1\tPEnum_BathType\t1\r\nPARAM\t1c6c726a-46b6-47fd-ab5e-91e18b52257e\tPset_SanitaryTerminalTypeBath.Color\tTEXT\t\t571\t1\tIfcText\t1\r\nPARAM\t0f857e80-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeBath.DrainSize\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t17452300-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeBath.HasGrabHandles\tYESNO\t\t571\t1\tIfcBoolean\t1\r\nPARAM\t5f78915c-8a07-4868-ba4c-21a602efa2b5\tPset_SanitaryTerminalTypeBath.Material\tMULTILINETEXT\t\t571\t1\tIfcMaterial\t1\r\nPARAM\t3917936e-b404-4131-9772-84e16b65186f\tPset_SanitaryTerminalTypeBath.MaterialThickness\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t04f40a39-2d44-41ca-a498-6f969d7590ad\tPset_SanitaryTerminalTypeBath.NominalDepth\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf4383efd-5724-4cef-ab97-001baea609e7\tPset_SanitaryTerminalTypeBath.NominalLength\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td3c9412d-f511-4093-a420-2710c09b3ed6\tPset_SanitaryTerminalTypeBath.NominalWidth\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t572\tPset_SanitaryTerminalTypeBidet\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbaab89e9-6cce-4f8e-925b-c9eb61559477\tPset_SanitaryTerminalTypeBidet.BidetMounting\tTEXT\t\t572\t1\tPEnum_SanitaryMounting\t1\r\nPARAM\t6ceb19bb-1e96-4488-8db3-4c0e3b5890df\tPset_SanitaryTerminalTypeBidet.Color\tTEXT\t\t572\t1\tIfcText\t1\r\nPARAM\t5bd0be80-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeBidet.DrainSize\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9864ad7a-1048-4b03-b2fd-d644c5e06a7b\tPset_SanitaryTerminalTypeBidet.Material\tMULTILINETEXT\t\t572\t1\tIfcMaterial\t1\r\nPARAM\t23c97b80-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeBidet.Mounting\tTEXT\t\t572\t1\tPEnum_SanitaryMounting\t1\r\nPARAM\t3aaefcc3-7900-42ac-b01a-48fbb16e1b5f\tPset_SanitaryTerminalTypeBidet.NominalDepth\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te72199c7-c1d7-4f0a-a54b-9c4e311feec8\tPset_SanitaryTerminalTypeBidet.NominalLength\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t2c4195fc-24eb-46b4-b20f-148ae752543e\tPset_SanitaryTerminalTypeBidet.NominalWidth\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t53788380-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeBidet.SpilloverLevel\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t573\tPset_SanitaryTerminalTypeCistern\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t786cf680-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCistern.CisternCapacity\tVOLUME\t\t573\t1\tIfcVolumeMeasure\t1\r\nPARAM\t56f2fbbb-f9ba-4f7e-9517-3488fab4938d\tPset_SanitaryTerminalTypeCistern.CisternColor\tTEXT\t\t573\t1\tIfcText\t1\r\nPARAM\t6a1eda80-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCistern.CisternHeight\tTEXT\t\t573\t1\tPEnum_CisternHeight\t1\r\nPARAM\te52311c3-8caf-4f44-8ce2-dbdd740e8834\tPset_SanitaryTerminalTypeCistern.CisternMaterial\tMULTILINETEXT\t\t573\t1\tIfcMaterial\t1\r\nPARAM\t95a1c500-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCistern.FlushRate\tMULTILINETEXT\t\t573\t1\tPropertyBoundedValue\t1\r\nPARAM\t84f14f00-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCistern.FlushType\tTEXT\t\t573\t1\tPEnum_FlushType\t1\r\nPARAM\t9cc8d300-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCistern.IsAutomaticFlush\tYESNO\t\t573\t1\tIfcBoolean\t1\r\nPARAM\t7dca4100-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCistern.IsSingleFlush\tYESNO\t\t573\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t574\tPset_SanitaryTerminalTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t93112095-298e-44d2-9aea-7995d82eb202\tPset_SanitaryTerminalTypeCommon.Color\tTEXT\t\t574\t1\tIfcLabel\t1\r\nPARAM\t9c2c6aa5-fc5f-42ba-ba6e-e7f1d2992b3f\tPset_SanitaryTerminalTypeCommon.Colour\tTEXT\t\t574\t1\tIfcLabel\t1\r\nPARAM\tbb516e7b-73f8-4dcd-85b9-53f3b61f0f22\tPset_SanitaryTerminalTypeCommon.NominalDepth\tLENGTH\t\t574\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t36bde0df-4e7b-4ff4-a9b7-b5191c5e82f7\tPset_SanitaryTerminalTypeCommon.NominalLength\tLENGTH\t\t574\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t6cf48d3d-336e-4eb0-acdf-9bdf68db0d60\tPset_SanitaryTerminalTypeCommon.NominalWidth\tLENGTH\t\t574\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\taeaa7600-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCommon.Reference\tTEXT\t\t574\t1\tIfcIdentifier\t1\r\nPARAM\t1b1c71bc-3419-4116-982b-bacb563822d6\tPset_SanitaryTerminalTypeCommon.Status\tTEXT\t\t574\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t575\tPset_SanitaryTerminalTypeSanitaryFountain\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tca0e0236-4c1c-4b85-afaa-dad76d85565f\tPset_SanitaryTerminalTypeSanitaryFountain.Color\tTEXT\t\t575\t1\tIfcText\t1\r\nPARAM\tf8935c00-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSanitaryFountain.DrainSize\tLENGTH\t\t575\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tbb2ece80-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSanitaryFountain.FountainType\tTEXT\t\t575\t1\tPEnum_FountainType\t1\r\nPARAM\td5a96864-185d-4f2c-883d-fd064355599c\tPset_SanitaryTerminalTypeSanitaryFountain.Material\tMULTILINETEXT\t\t575\t1\tIfcMaterial\t1\r\nPARAM\tc7b32700-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSanitaryFountain.Mounting\tTEXT\t\t575\t1\tPEnum_SanitaryMounting\t1\r\nPARAM\t182e36f3-84dd-489c-a2a3-e7f639185afb\tPset_SanitaryTerminalTypeSanitaryFountain.NominalDepth\tLENGTH\t\t575\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t8a04fec7-0858-4138-b351-5a2113f19c38\tPset_SanitaryTerminalTypeSanitaryFountain.NominalLength\tLENGTH\t\t575\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb2a4597a-26cc-4f89-ad58-f4cdb887661e\tPset_SanitaryTerminalTypeSanitaryFountain.NominalWidth\tLENGTH\t\t575\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t576\tPset_SanitaryTerminalTypeShower\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tfff5e822-96b6-4900-aaee-b6758686eacf\tPset_SanitaryTerminalTypeShower.Color\tTEXT\t\t576\t1\tIfcText\t1\r\nPARAM\t427c4200-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeShower.DrainSize\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t15c82a80-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeShower.HasTray\tYESNO\t\t576\t1\tIfcBoolean\t1\r\nPARAM\t95d6b066-02e9-4ecd-965d-c7488459b975\tPset_SanitaryTerminalTypeShower.Material\tMULTILINETEXT\t\t576\t1\tIfcMaterial\t1\r\nPARAM\ta234ce91-6851-4f72-857c-53e2cbba223d\tPset_SanitaryTerminalTypeShower.MaterialThickness\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te855e578-480d-4977-9977-04c614101735\tPset_SanitaryTerminalTypeShower.NominalDepth\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t481a718e-dde9-425e-9e66-fc00797eea9f\tPset_SanitaryTerminalTypeShower.NominalLength\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf8e0636f-ed4b-4943-8d1d-c96fd2b2081c\tPset_SanitaryTerminalTypeShower.NominalWidth\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3bedca80-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeShower.ShowerHeadDescription\tTEXT\t\t576\t1\tIfcText\t1\r\nPARAM\t06e17800-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeShower.ShowerType\tTEXT\t\t576\t1\tPEnum_ShowerType\t1\r\n#\r\nGROUP\t577\tPset_SanitaryTerminalTypeSink\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta141bb80-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSink.Color\tTEXT\t\t577\t1\tIfcLabel\t1\r\nPARAM\t56794e45-8656-4018-98ed-ef6ce5bbea78\tPset_SanitaryTerminalTypeSink.Colour\tTEXT\t\t577\t1\tIfcLabel\t1\r\nPARAM\tbc143000-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSink.DrainSize\tLENGTH\t\t577\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t232c7d3f-0165-4fef-a047-8c4e4a180491\tPset_SanitaryTerminalTypeSink.Material\tMULTILINETEXT\t\t577\t1\tIfcMaterial\t1\r\nPARAM\t7192b380-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSink.Mounting\tTEXT\t\t577\t1\tPEnum_SanitaryMounting\t1\r\nPARAM\tc5050180-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSink.MountingOffset\tLENGTH\t\t577\t1\tIfcLengthMeasure\t1\r\nPARAM\t1b4712bd-9af8-4aa2-800b-88930ee956a9\tPset_SanitaryTerminalTypeSink.NominalDepth\tLENGTH\t\t577\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9fc87f56-dad4-4d6d-8e01-298e16818e76\tPset_SanitaryTerminalTypeSink.NominalLength\tLENGTH\t\t577\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf3534007-dbcd-4b90-9abb-c1c3e83b6dd7\tPset_SanitaryTerminalTypeSink.NominalWidth\tLENGTH\t\t577\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t6933b16c-04d4-45d2-b1a2-a50d994b5571\tPset_SanitaryTerminalTypeSink.SinkMounting\tTEXT\t\t577\t1\tPEnum_SanitaryMounting\t1\r\nPARAM\t532cb800-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSink.SinkType\tTEXT\t\t577\t1\tPEnum_SinkType\t1\r\n#\r\nGROUP\t578\tPset_SanitaryTerminalTypeToiletPan\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7ff9da9e-924b-4c10-8580-dd69077c5db4\tPset_SanitaryTerminalTypeToiletPan.NominalDepth\tLENGTH\t\t578\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t80fe3d1b-ad22-4a95-add8-f32f93ffdeeb\tPset_SanitaryTerminalTypeToiletPan.NominalLength\tLENGTH\t\t578\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t084467e9-4a9e-470a-a103-a2210ddc3115\tPset_SanitaryTerminalTypeToiletPan.NominalWidth\tLENGTH\t\t578\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te8354d40-2382-4aee-9ab8-9362ef5b799a\tPset_SanitaryTerminalTypeToiletPan.PanColor\tTEXT\t\t578\t1\tIfcText\t1\r\nPARAM\ta3f7edae-9d77-49d2-801d-e5a446d33e4f\tPset_SanitaryTerminalTypeToiletPan.PanMaterial\tMULTILINETEXT\t\t578\t1\tIfcMaterial\t1\r\nPARAM\tf7aefa00-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeToiletPan.PanMounting\tTEXT\t\t578\t1\tPEnum_SanitaryMounting\t1\r\nPARAM\t0f867e00-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeToiletPan.SpilloverLevel\tLENGTH\t\t578\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te7971a80-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeToiletPan.ToiletPanType\tTEXT\t\t578\t1\tPEnum_ToiletPanType\t1\r\nPARAM\td221f080-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeToiletPan.ToiletType\tTEXT\t\t578\t1\tPEnum_ToiletType\t1\r\n#\r\nGROUP\t579\tPset_SanitaryTerminalTypeUrinal\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4361a380-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeUrinal.Mounting\tTEXT\t\t579\t1\tPEnum_SanitaryMounting\t1\r\nPARAM\ta2569e5f-8a74-4c80-80ec-c5230816cf08\tPset_SanitaryTerminalTypeUrinal.NominalDepth\tLENGTH\t\t579\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t87775b31-1501-410d-9521-93d3eb2a07f6\tPset_SanitaryTerminalTypeUrinal.NominalLength\tLENGTH\t\t579\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td9a306f1-6b95-45af-9a97-392480084695\tPset_SanitaryTerminalTypeUrinal.NominalWidth\tLENGTH\t\t579\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t596f6400-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeUrinal.SpilloverLevel\tLENGTH\t\t579\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t506fe258-a383-466d-ac5f-00d8c61e315a\tPset_SanitaryTerminalTypeUrinal.UrinalColor\tTEXT\t\t579\t1\tIfcText\t1\r\nPARAM\te988c680-6b70-4d6a-b792-2672dad544b3\tPset_SanitaryTerminalTypeUrinal.UrinalMaterial\tMULTILINETEXT\t\t579\t1\tIfcMaterial\t1\r\nPARAM\t35138780-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeUrinal.UrinalType\tTEXT\t\t579\t1\tPEnum_UrinalType\t1\r\n#\r\nGROUP\t580\tPset_SanitaryTerminalTypeWashHandBasin\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta5150092-5f8a-48ba-b12a-95995535f7c4\tPset_SanitaryTerminalTypeWashHandBasin.Color\tTEXT\t\t580\t1\tIfcText\t1\r\nPARAM\tbff48200-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeWashHandBasin.DrainSize\tLENGTH\t\t580\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tfba34126-ee67-4152-b619-03e6dfa9fd79\tPset_SanitaryTerminalTypeWashHandBasin.Material\tMULTILINETEXT\t\t580\t1\tIfcMaterial\t1\r\nPARAM\t9176a700-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeWashHandBasin.Mounting\tTEXT\t\t580\t1\tPEnum_SanitaryMounting\t1\r\nPARAM\tc97dea00-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeWashHandBasin.MountingOffset\tLENGTH\t\t580\t1\tIfcLengthMeasure\t1\r\nPARAM\t01489ce4-3889-4324-8748-2dedd0f6f822\tPset_SanitaryTerminalTypeWashHandBasin.NominalDepth\tLENGTH\t\t580\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t4dd7414e-6e8b-4b7d-b6ea-e79a799e0aca\tPset_SanitaryTerminalTypeWashHandBasin.NominalLength\tLENGTH\t\t580\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf32cb2f0-f755-4ef0-b247-42d268446b18\tPset_SanitaryTerminalTypeWashHandBasin.NominalWidth\tLENGTH\t\t580\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t7c6eee7c-b025-41a9-a938-5ab1421ce6a5\tPset_SanitaryTerminalTypeWashHandBasin.WashHandBasinMounting\tTEXT\t\t580\t1\tPEnum_SanitaryMounting\t1\r\nPARAM\t802d9a80-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeWashHandBasin.WashHandBasinType\tTEXT\t\t580\t1\tPEnum_WashHandBasinType\t1\r\n#\r\nGROUP\t581\tPset_SanitaryTerminalTypeWCSeat\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf2729eee-246a-4c13-b106-685e189745fb\tPset_SanitaryTerminalTypeWCSeat.SeatColor\tTEXT\t\t581\t1\tIfcText\t1\r\nPARAM\t00d07849-b909-4a6a-a5a9-46c8c850751e\tPset_SanitaryTerminalTypeWCSeat.SeatHasCover\tYESNO\t\t581\t1\tIfcBoolean\t1\r\nPARAM\tcf4db829-68ea-4975-a6ae-7c0c3eaf540a\tPset_SanitaryTerminalTypeWCSeat.SeatMaterial\tMULTILINETEXT\t\t581\t1\tIfcMaterial\t1\r\nPARAM\t9bdf5d49-6054-45fd-a46d-bf7888c1431b\tPset_SanitaryTerminalTypeWCSeat.SeatType\tTEXT\t\t581\t1\tPEnum_ToiletSeatType\t1\r\n#\r\nGROUP\t582\tPset_SectioningDevice\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf1dde6cc-8837-40d0-a5db-be9237763dcb\tPset_SectioningDevice.SectioningDeviceType\tTEXT\t\t582\t1\tPEnum_SectioningDeviceType\t1\r\n#\r\nGROUP\t583\tPset_SectionInsulator\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\taf925669-06bf-408d-95b8-747ae9e58641\tPset_SectionInsulator.ACResistance\tNUMBER\t\t583\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\t45f758ba-f8fd-4774-be57-bb29acbbbffc\tPset_SectionInsulator.IsArcSuppressing\tYESNO\t\t583\t1\tIfcBoolean\t1\r\nPARAM\td1dca2c8-d303-4dc3-8e2a-8015c049721b\tPset_SectionInsulator.NumberOfWires\tINTEGER\t\t583\t1\tIfcCountMeasure\t1\r\nPARAM\t7389bdd2-9921-4813-bc19-8bd476c4397f\tPset_SectionInsulator.TensileStrength\tNUMBER\t\t583\t1\tIfcForceMeasure\t1\r\n#\r\nGROUP\t584\tPset_SensorPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td8fd3300-d204-11e1-8000-00215ad4efdf\tPset_SensorPHistory.Direction\tMULTILINETEXT\t\t584\t1\tIfcTimeSeries\t1\r\nPARAM\tdbf82380-d204-11e1-8000-00215ad4efdf\tPset_SensorPHistory.Quality\tMULTILINETEXT\t\t584\t1\tIfcTimeSeries\t1\r\nPARAM\tdef31400-d204-11e1-8000-00215ad4efdf\tPset_SensorPHistory.Status\tMULTILINETEXT\t\t584\t1\tIfcTimeSeries\t1\r\nPARAM\td569ac00-d204-11e1-8000-00215ad4efdf\tPset_SensorPHistory.Value\tMULTILINETEXT\t\t584\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t585\tPset_SensorTypeCO2Sensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t59b695b5-0fb6-4612-b29a-bec57aa10d46\tPset_SensorTypeCO2Sensor.AccuracyOfCO2Sensor\tNUMBER\t\t585\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t395e986e-db11-45d5-8d56-8dfe92f80b98\tPset_SensorTypeCO2Sensor.CO2SensorRange\tMULTILINETEXT\t\t585\t1\tPropertyBoundedValue\t1\r\nPARAM\t41d7257b-9519-4449-aa7c-a9a2a1b3a064\tPset_SensorTypeCO2Sensor.CoverageArea\tAREA\t\t585\t1\tIfcAreaMeasure\t1\r\nPARAM\tbf4aaaff-0d93-430f-a6a7-fcd155b6da0e\tPset_SensorTypeCO2Sensor.SetPointCO2Concentration\tMULTILINETEXT\t\t585\t1\tPropertyBoundedValue\t1\r\nPARAM\te4ab0c98-8417-4826-9c10-ddef20bb5aa9\tPset_SensorTypeCO2Sensor.SetPointConcentration\tMULTILINETEXT\t\t585\t1\tPropertyBoundedValue\t1\r\nPARAM\t4bc2730e-47e0-493b-a7d4-4d11a5d5d909\tPset_SensorTypeCO2Sensor.TimeConstant\tNUMBER\t\t585\t1\tIfcTimeMeasure\t1\r\nPARAM\t75519508-f5b6-40c7-84b5-38fb0c2ee23a\tPset_SensorTypeCO2Sensor.WashHandBasinSetPoint\tNUMBER\t\t585\t1\tIfcPositiveRatioMeasure\t1\r\n#\r\nGROUP\t586\tPset_SensorTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te9151280-d204-11e1-8000-00215ad4efdf\tPset_SensorTypeCommon.Reference\tTEXT\t\t586\t1\tIfcIdentifier\t1\r\nPARAM\tf03c2080-d204-11e1-8000-00215ad4efdf\tPset_SensorTypeCommon.Status\tTEXT\t\t586\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t587\tPset_SensorTypeConductanceSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0649e100-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeConductanceSensor.SetPointConductance\tMULTILINETEXT\t\t587\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t588\tPset_SensorTypeContactSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t12ce3980-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeContactSensor.SetPointContact\tMULTILINETEXT\t\t588\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t589\tPset_SensorTypeEarthquakeSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5f3e8321-3a89-4813-81b0-242b0e0e793a\tPset_SensorTypeEarthquakeSensor.DataCollectionType\tTEXT\t\t589\t1\tPEnum_DataCollectionType\t1\r\nPARAM\te3c7a0c6-c282-439d-b4e3-bdf3a40e2885\tPset_SensorTypeEarthquakeSensor.DegreeOfLinearity\tNUMBER\t\t589\t1\tIfcRatioMeasure\t1\r\nPARAM\tec72c201-9f4f-48cc-972a-9b2681005e67\tPset_SensorTypeEarthquakeSensor.DynamicRange\tMULTILINETEXT\t\t589\t1\tPropertyBoundedValue\t1\r\nPARAM\tcb38594f-c0e2-40c6-9b1d-0ee69be8c27a\tPset_SensorTypeEarthquakeSensor.EarthquakeSensorRange\tMULTILINETEXT\t\t589\t1\tPropertyBoundedValue\t1\r\nPARAM\t1095d2c9-fc4c-4c29-ac66-140a4ac697ae\tPset_SensorTypeEarthquakeSensor.EarthquakeSensorType\tTEXT\t\t589\t1\tPEnum_EarthquakeSensorType\t1\r\nPARAM\t6dee041f-ce61-498d-b24d-6082642e3225\tPset_SensorTypeEarthquakeSensor.FullScaleOutput\tNUMBER\t\t589\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\tb7e02eb5-5ff0-4453-9bd2-3b4f8b188d86\tPset_SensorTypeEarthquakeSensor.LinearVelocityResolution\tNUMBER\t\t589\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\t9ce2440e-39f9-4896-bdb6-089db8642268\tPset_SensorTypeEarthquakeSensor.MarginOfError\tNUMBER\t\t589\t1\tIfcRatioMeasure\t1\r\nPARAM\ted210406-c7ba-4bc4-a57c-d60d6fadfc3f\tPset_SensorTypeEarthquakeSensor.SamplingFrequency\tNUMBER\t\t589\t1\tIfcFrequencyMeasure\t1\r\nPARAM\ta8efdec6-c210-46b3-be7c-96e216045e3f\tPset_SensorTypeEarthquakeSensor.SerialInterfaceType\tTEXT\t\t589\t1\tPEnum_SerialInterfaceType\t1\r\nPARAM\t73cbefb9-2a5c-4655-a4c7-f28fa0ac5254\tPset_SensorTypeEarthquakeSensor.TransverseSensitivityRatio\tNUMBER\t\t589\t1\tIfcRatioMeasure\t1\r\nPARAM\tdcd7dbe7-f972-49a5-af3c-f29152bee43e\tPset_SensorTypeEarthquakeSensor.WorkingState\tTEXT\t\t589\t1\tIfcLabel\t1\r\n#\r\nGROUP\t590\tPset_SensorTypeFireSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2679a000-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeFireSensor.AccuracyOfFireSensor\tNUMBER\t\t590\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t2083bf00-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeFireSensor.FireSensorSetPoint\tNUMBER\t\t590\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t2c6f8100-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeFireSensor.TimeConstant\tNUMBER\t\t590\t1\tIfcTimeMeasure\t1\r\n#\r\nGROUP\t591\tPset_SensorTypeFlowSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3a250680-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeFlowSensor.SetPointFlow\tMULTILINETEXT\t\t591\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t592\tPset_SensorTypeForeignObjectDetectionSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tec328db0-4648-488c-ba71-f77ac991b765\tPset_SensorTypeForeignObjectDetectionSensor.ForeignObjectDetectionSensorType\tTEXT\t\t592\t1\tPEnum_ForeignObjectDetectionSensorType\t1\r\nPARAM\tfebc1a76-6ede-4ccb-88bf-3d1591a01c85\tPset_SensorTypeForeignObjectDetectionSensor.SerialInterfaceType\tTEXT\t\t592\t1\tPEnum_SerialInterfaceType\t1\r\nPARAM\tbaf3727f-5e4a-4400-8959-84237f6926a2\tPset_SensorTypeForeignObjectDetectionSensor.WorkingState\tTEXT\t\t592\t1\tIfcLabel\t1\r\n#\r\nGROUP\t593\tPset_SensorTypeFrostSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2c68553a-248d-4030-9438-39a8806ebd51\tPset_SensorTypeFrostSensor.SetPointFrost\tMULTILINETEXT\t\t593\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t594\tPset_SensorTypeGasSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t78e2ddc9-4918-410e-b182-4057b58a61cb\tPset_SensorTypeGasSensor.AccuracyOfGasSensor\tNUMBER\t\t594\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t6a6ca500-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeGasSensor.CoverageArea\tAREA\t\t594\t1\tIfcAreaMeasure\t1\r\nPARAM\t490bb900-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeGasSensor.GasDetected\tTEXT\t\t594\t1\tIfcLabel\t1\r\nPARAM\t98ef6c5c-2966-49a2-a112-63ba9d89c0d6\tPset_SensorTypeGasSensor.GasSensorRange\tMULTILINETEXT\t\t594\t1\tPropertyBoundedValue\t1\r\nPARAM\ta579b900-5eee-423b-b81c-be1ef506b774\tPset_SensorTypeGasSensor.GasSensorSetPoint\tNUMBER\t\t594\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t5163f400-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeGasSensor.SetPointConcentration\tMULTILINETEXT\t\t594\t1\tPropertyBoundedValue\t1\r\nPARAM\t4eff7f6b-adb9-4226-81ce-f16533709be5\tPset_SensorTypeGasSensor.TimeConstant\tNUMBER\t\t594\t1\tIfcTimeMeasure\t1\r\n#\r\nGROUP\t595\tPset_SensorTypeHeatSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7f493880-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeHeatSensor.CoverageArea\tAREA\t\t595\t1\tIfcAreaMeasure\t1\r\nPARAM\t3eb7b739-b6fe-4d8a-ad69-8d8e2b1b5d35\tPset_SensorTypeHeatSensor.HeatSensorAccuracy\tNUMBER\t\t595\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t9c5fd79b-803c-4ec9-8f5e-03ceab1ed077\tPset_SensorTypeHeatSensor.HeatSensorRange\tMULTILINETEXT\t\t595\t1\tPropertyBoundedValue\t1\r\nPARAM\t7a07da78-cdf5-48ff-af5e-bc0b789d445a\tPset_SensorTypeHeatSensor.HeatSensorSetPoint\tNUMBER\t\t595\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t8cfebe00-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeHeatSensor.RateOfTemperatureRise\tNUMBER\t\t595\t1\tIfcTemperatureRateOfChangeMeasure\t1\r\nPARAM\t84a68300-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeHeatSensor.SetPointTemperature\tMULTILINETEXT\t\t595\t1\tPropertyBoundedValue\t1\r\nPARAM\t4db5accc-0baf-4dc3-bb6f-06514d15112e\tPset_SensorTypeHeatSensor.TimeConstant\tNUMBER\t\t595\t1\tIfcTimeMeasure\t1\r\n#\r\nGROUP\t596\tPset_SensorTypeHumiditySensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t60e82933-dc48-4872-a0b9-02b848072efe\tPset_SensorTypeHumiditySensor.AccuracyOfHumiditySensor\tNUMBER\t\t596\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t2133f619-fe71-4d89-add4-65a268c052c1\tPset_SensorTypeHumiditySensor.HumiditySensorRange\tMULTILINETEXT\t\t596\t1\tPropertyBoundedValue\t1\r\nPARAM\t48a0ad4d-f0f2-4869-8313-acf522525030\tPset_SensorTypeHumiditySensor.HumiditySetPoint\tNUMBER\t\t596\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\ta6a00580-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeHumiditySensor.SetPointHumidity\tMULTILINETEXT\t\t596\t1\tPropertyBoundedValue\t1\r\nPARAM\t6ccc8f74-99f2-4549-96b3-1af2d71b9d24\tPset_SensorTypeHumiditySensor.TimeConstant\tNUMBER\t\t596\t1\tIfcTimeMeasure\t1\r\n#\r\nGROUP\t597\tPset_SensorTypeIdentifierSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t51b07040-b891-47dd-a5f7-01b8e246bf62\tPset_SensorTypeIdentifierSensor.SetPointIdentifier\tMULTILINETEXT\t\t597\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t598\tPset_SensorTypeIonConcentrationSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbcadc600-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeIonConcentrationSensor.SetPointConcentration\tMULTILINETEXT\t\t598\t1\tPropertyBoundedValue\t1\r\nPARAM\te2a9b8ac-82f3-484e-843b-36b8076284f2\tPset_SensorTypeIonConcentrationSensor.SetPointIonConcentration\tMULTILINETEXT\t\t598\t1\tPropertyBoundedValue\t1\r\nPARAM\tb61f4e80-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeIonConcentrationSensor.SubstanceDetected\tTEXT\t\t598\t1\tIfcLabel\t1\r\n#\r\nGROUP\t599\tPset_SensorTypeLevelSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc9cab500-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeLevelSensor.SetPointLevel\tMULTILINETEXT\t\t599\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t600\tPset_SensorTypeLightSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t74f3feeb-5dfb-40e0-8d83-6841ea2c3aeb\tPset_SensorTypeLightSensor.LightSensorAccuracy\tNUMBER\t\t600\t1\tIfcIlluminanceMeasure\t1\r\nPARAM\t7ac10515-4ef7-43e0-9dcf-4ea5d08fea08\tPset_SensorTypeLightSensor.LightSensorRange\tMULTILINETEXT\t\t600\t1\tPropertyBoundedValue\t1\r\nPARAM\tf68397d7-0f3c-461c-8f97-7931aeca75b5\tPset_SensorTypeLightSensor.LightSensorSetPoint\tNUMBER\t\t600\t1\tIfcIlluminanceMeasure\t1\r\nPARAM\te1a23900-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeLightSensor.SetPointIlluminance\tMULTILINETEXT\t\t600\t1\tPropertyBoundedValue\t1\r\nPARAM\td9aecf17-64c7-4704-8088-813a518bb948\tPset_SensorTypeLightSensor.TimeConstant\tNUMBER\t\t600\t1\tIfcTimeMeasure\t1\r\n#\r\nGROUP\t601\tPset_SensorTypeMoistureSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tee269180-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeMoistureSensor.SetPointMoisture\tMULTILINETEXT\t\t601\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t602\tPset_SensorTypeMovementSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tfd0d4400-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeMovementSensor.MovementSensingType\tTEXT\t\t602\t1\tPEnum_MovementSensingType\t1\r\nPARAM\t09919c80-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeMovementSensor.SetPointMovement\tMULTILINETEXT\t\t602\t1\tPropertyBoundedValue\t1\r\nPARAM\tb0d48bba-5191-4f5f-8786-966d5957c83c\tPset_SensorTypeMovementSensor.TimeConstant\tNUMBER\t\t602\t1\tIfcTimeMeasure\t1\r\n#\r\nGROUP\t603\tPset_SensorTypePHSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1910e580-d206-11e1-8000-00215ad4efdf\tPset_SensorTypePHSensor.SetPointPH\tMULTILINETEXT\t\t603\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t604\tPset_SensorTypePressureSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tfdeaffac-fea8-487d-8ccd-a7ddf3c493e3\tPset_SensorTypePressureSensor.AccuracyOfPressureSensor\tNUMBER\t\t604\t1\tIfcPressureMeasure\t1\r\nPARAM\t30e86980-d206-11e1-8000-00215ad4efdf\tPset_SensorTypePressureSensor.IsSwitch\tYESNO\t\t604\t1\tIfcBoolean\t1\r\nPARAM\t4bd27b63-84de-4ea2-98da-b563646beb5d\tPset_SensorTypePressureSensor.PressureSensorRange\tMULTILINETEXT\t\t604\t1\tPropertyBoundedValue\t1\r\nPARAM\tf516bca9-acf9-437f-8291-09df80788bea\tPset_SensorTypePressureSensor.PressureSensorSetPoint\tNUMBER\t\t604\t1\tIfcPressureMeasure\t1\r\nPARAM\t262dd480-d206-11e1-8000-00215ad4efdf\tPset_SensorTypePressureSensor.SetPointPressure\tMULTILINETEXT\t\t604\t1\tPropertyBoundedValue\t1\r\nPARAM\t781b9c4b-7f2f-4752-a2dc-4026bd5f2727\tPset_SensorTypePressureSensor.TimeConstant\tNUMBER\t\t604\t1\tIfcTimeMeasure\t1\r\n#\r\nGROUP\t605\tPset_SensorTypeRadiationSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3cd42b80-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeRadiationSensor.SetPointRadiation\tMULTILINETEXT\t\t605\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t606\tPset_SensorTypeRadioactivitySensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4bbade00-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeRadioactivitySensor.SetPointRadioactivity\tMULTILINETEXT\t\t606\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t607\tPset_SensorTypeRainSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf86abd5f-b8a8-4cdb-8744-73319be7eff5\tPset_SensorTypeRainSensor.DataCollectionType\tTEXT\t\t607\t1\tPEnum_DataCollectionType\t1\r\nPARAM\tf055c03d-b04a-4f98-a575-e700e9b2b88e\tPset_SensorTypeRainSensor.LengthMeasureResolution\tLENGTH\t\t607\t1\tIfcLengthMeasure\t1\r\nPARAM\tf6575f2f-4cb7-447f-aad3-5d2d5f2e3c33\tPset_SensorTypeRainSensor.MarginOfError\tNUMBER\t\t607\t1\tIfcRatioMeasure\t1\r\nPARAM\t84b55dfe-ce97-4324-80b9-6282d318d544\tPset_SensorTypeRainSensor.RainMeasureRange\tMULTILINETEXT\t\t607\t1\tPropertyBoundedValue\t1\r\nPARAM\tea1dd299-cfb9-44a2-9a25-297f68b184e1\tPset_SensorTypeRainSensor.RainSensorType\tTEXT\t\t607\t1\tPEnum_RainSensorType\t1\r\nPARAM\t22e5b507-ea2f-469f-ada7-3fafa3e42093\tPset_SensorTypeRainSensor.SamplingFrequency\tNUMBER\t\t607\t1\tIfcFrequencyMeasure\t1\r\nPARAM\t91a25e8d-ef29-41d1-af11-f92fe1fc538c\tPset_SensorTypeRainSensor.SerialInterfaceType\tTEXT\t\t607\t1\tPEnum_SerialInterfaceType\t1\r\nPARAM\t216e761f-1ec2-4d52-a732-974e559af10d\tPset_SensorTypeRainSensor.WorkingState\tTEXT\t\t607\t1\tIfcLabel\t1\r\n#\r\nGROUP\t608\tPset_SensorTypeSmokeSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf309cd80-99ad-4156-9903-c1e875c8416b\tPset_SensorTypeSmokeSensor.AccuracyOfSmokeSensor\tNUMBER\t\t608\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t58d7cd00-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeSmokeSensor.CoverageArea\tAREA\t\t608\t1\tIfcAreaMeasure\t1\r\nPARAM\t68571600-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeSmokeSensor.HasBuiltInAlarm\tYESNO\t\t608\t1\tIfcBoolean\t1\r\nPARAM\t4a1499ef-ac8f-4070-ba57-da8dbf11d47a\tPset_SensorTypeSmokeSensor.PressureSensorSetPoint\tNUMBER\t\t608\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t5f664480-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeSmokeSensor.SetPointConcentration\tMULTILINETEXT\t\t608\t1\tPropertyBoundedValue\t1\r\nPARAM\t24787944-ad1a-4601-b5fc-e83940a3feec\tPset_SensorTypeSmokeSensor.SmokeSensorRange\tMULTILINETEXT\t\t608\t1\tPropertyBoundedValue\t1\r\nPARAM\t18b2e5e8-683d-4884-89ef-c81fe91292f1\tPset_SensorTypeSmokeSensor.TimeConstant\tNUMBER\t\t608\t1\tIfcTimeMeasure\t1\r\n#\r\nGROUP\t609\tPset_SensorTypeSnowSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2dbece66-efac-4a65-986b-921c7f913e53\tPset_SensorTypeSnowSensor.DataCollectionType\tTEXT\t\t609\t1\tPEnum_DataCollectionType\t1\r\nPARAM\t6b7d1a34-84ff-4cb0-87dd-14116975c7b6\tPset_SensorTypeSnowSensor.ImageResolution\tTEXT\t\t609\t1\tIfcLabel\t1\r\nPARAM\t40749387-dc53-40bf-9233-3486cdcf1833\tPset_SensorTypeSnowSensor.ImageShootingMode\tTEXT\t\t609\t1\tPEnum_ImageShootingMode\t1\r\nPARAM\t18b3da70-11ce-48c7-bd3a-e8063ff06496\tPset_SensorTypeSnowSensor.LengthMeasureResolution\tLENGTH\t\t609\t1\tIfcLengthMeasure\t1\r\nPARAM\t459c433a-da29-4b7e-98fa-3dc7cc8ca5f4\tPset_SensorTypeSnowSensor.MarginOfError\tNUMBER\t\t609\t1\tIfcRatioMeasure\t1\r\nPARAM\t89697b80-2f4a-4f51-adfa-e7281c62cd00\tPset_SensorTypeSnowSensor.SamplingFrequency\tNUMBER\t\t609\t1\tIfcFrequencyMeasure\t1\r\nPARAM\tc00efe0f-40f0-4f23-a3de-f06a7cf9baaa\tPset_SensorTypeSnowSensor.SerialInterfaceType\tTEXT\t\t609\t1\tPEnum_SerialInterfaceType\t1\r\nPARAM\t3421f5b5-8723-47bf-a85d-5e2b578c222c\tPset_SensorTypeSnowSensor.SnowSensorMeasureRange\tMULTILINETEXT\t\t609\t1\tPropertyBoundedValue\t1\r\nPARAM\t2528262a-4077-4bed-aa7f-754e6ebfb9ca\tPset_SensorTypeSnowSensor.SnowSensorType\tTEXT\t\t609\t1\tPEnum_SnowSensorType\t1\r\n#\r\nGROUP\t610\tPset_SensorTypeSoundSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7442d800-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeSoundSensor.SetPointSound\tMULTILINETEXT\t\t610\t1\tPropertyBoundedValue\t1\r\nPARAM\t721c40d1-425d-443d-990a-2c1d747439d6\tPset_SensorTypeSoundSensor.SoundSensorAccuracy\tNUMBER\t\t610\t1\tIfcSoundPressureMeasure\t1\r\nPARAM\ta5ef093a-ea25-4d46-9bff-f533a8d341a5\tPset_SensorTypeSoundSensor.SoundSensorRange\tMULTILINETEXT\t\t610\t1\tPropertyBoundedValue\t1\r\nPARAM\t5c1326e6-b4cd-4e43-85e3-e06f5d6bf882\tPset_SensorTypeSoundSensor.SoundSensorSetPoint\tNUMBER\t\t610\t1\tIfcSoundPressureMeasure\t1\r\nPARAM\tda38ec03-e9ce-4d0d-9946-38a0928ce169\tPset_SensorTypeSoundSensor.TimeConstant\tNUMBER\t\t610\t1\tIfcTimeMeasure\t1\r\n#\r\nGROUP\t611\tPset_SensorTypeTemperatureSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbc62dcf5-413f-4286-aba9-1b08f010c8b6\tPset_SensorTypeTemperatureSensor.AccuracyOfTemperatureSensor\tNUMBER\t\t611\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t93416a00-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeTemperatureSensor.SetPointTemperature\tMULTILINETEXT\t\t611\t1\tPropertyBoundedValue\t1\r\nPARAM\t5203274c-a81a-4a21-957a-0e6aee5e58c6\tPset_SensorTypeTemperatureSensor.TemperatureSensorRange\tMULTILINETEXT\t\t611\t1\tPropertyBoundedValue\t1\r\nPARAM\te6e109d6-e05b-4e1a-98d9-d4371defbadf\tPset_SensorTypeTemperatureSensor.TemperatureSensorSetPoint\tNUMBER\t\t611\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t815fc700-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeTemperatureSensor.TemperatureSensorType\tTEXT\t\t611\t1\tPEnum_TemperatureSensorType\t1\r\nPARAM\tc0c2d5da-e2ec-4f7a-8c39-a997740153ed\tPset_SensorTypeTemperatureSensor.TimeConstant\tNUMBER\t\t611\t1\tIfcTimeMeasure\t1\r\n#\r\nGROUP\t612\tPset_SensorTypeTurnoutClosureSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3898a5fe-017c-4acd-a947-ec39e204a5cf\tPset_SensorTypeTurnoutClosureSensor.DetectionRange\tLENGTH\t\t612\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3b0fca2c-ea28-46bb-ab38-921f7812a569\tPset_SensorTypeTurnoutClosureSensor.IndicationRodMovementRange\tMULTILINETEXT\t\t612\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t613\tPset_SensorTypeWindSensor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta9138c4d-c157-4361-b10c-7c49b05c37f6\tPset_SensorTypeWindSensor.DampingRatio\tNUMBER\t\t613\t1\tIfcRatioMeasure\t1\r\nPARAM\t6137fb3d-48fb-493a-82db-f3cb3c528cb4\tPset_SensorTypeWindSensor.DataCollectionType\tTEXT\t\t613\t1\tPEnum_DataCollectionType\t1\r\nPARAM\tafb68323-25e9-4567-972f-2e3d61d6f929\tPset_SensorTypeWindSensor.LinearVelocityResolution\tNUMBER\t\t613\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\t60e284c1-72cc-42b6-a8f4-8433fb448b3b\tPset_SensorTypeWindSensor.MarginOfError\tNUMBER\t\t613\t1\tIfcRatioMeasure\t1\r\nPARAM\t80f3caba-e51a-4418-bdb6-b0c16564429f\tPset_SensorTypeWindSensor.SamplingFrequency\tNUMBER\t\t613\t1\tIfcFrequencyMeasure\t1\r\nPARAM\t2393b941-3ebd-476c-8e3d-69b5f37851a1\tPset_SensorTypeWindSensor.SerialInterfaceType\tTEXT\t\t613\t1\tPEnum_SerialInterfaceType\t1\r\nPARAM\tb66c1980-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeWindSensor.SetPointSpeed\tNUMBER\t\t613\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\t3c85d5ec-098d-4a44-be64-778f77ae7800\tPset_SensorTypeWindSensor.StartingWindSpeed\tNUMBER\t\t613\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\tfe0835ad-0de4-498f-b9a4-bd015409ae10\tPset_SensorTypeWindSensor.TimeConstant\tNUMBER\t\t613\t1\tIfcTimeMeasure\t1\r\nPARAM\te60683f4-f6a4-402f-a300-7e6ed61bbdd2\tPset_SensorTypeWindSensor.WindAngleRange\tMULTILINETEXT\t\t613\t1\tPropertyBoundedValue\t1\r\nPARAM\ta2c0b300-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeWindSensor.WindSensorType\tTEXT\t\t613\t1\tPEnum_WindSensorType\t1\r\nPARAM\t251665bb-2ead-4548-8d44-ae52cfc6b4f4\tPset_SensorTypeWindSensor.WindSpeedRange\tMULTILINETEXT\t\t613\t1\tPropertyBoundedValue\t1\r\nPARAM\t9cd7089a-3cc0-4d56-8289-d36323332bce\tPset_SensorTypeWindSensor.WorkingState\tTEXT\t\t613\t1\tIfcLabel\t1\r\n#\r\nGROUP\t614\tPset_ServiceLife\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8eb2f467-91c2-42e7-b997-996569152d4f\tPset_ServiceLife.MeanTimeBetweenFailure\tTEXT\t\t614\t1\tIfcDuration\t1\r\nPARAM\teadfd580-d206-11e1-8000-00215ad4efdf\tPset_ServiceLife.ServiceLifeDuration\tMULTILINETEXT\t\t614\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t615\tPset_ServiceLifeFactors\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8d77f8cb-925b-4cfd-bea4-8301f42c89a0\tPset_ServiceLifeFactors.DesignLevel\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\r\nPARAM\tab27c286-d027-498e-962a-bd4fa0cab9a8\tPset_ServiceLifeFactors.IndoorEnvironment\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\r\nPARAM\t37ac936a-1b0a-42bf-a3c0-f4998cca50e4\tPset_ServiceLifeFactors.InUseConditions\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\r\nPARAM\t97e75274-0425-44a8-9cb6-5b8a94766d30\tPset_ServiceLifeFactors.MaintenanceLevel\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\r\nPARAM\t9988ab22-befe-45c9-ab3c-94972c61bd90\tPset_ServiceLifeFactors.OutdoorEnvironment\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\r\nPARAM\td5f52787-15be-42a0-b539-cf3f060054e3\tPset_ServiceLifeFactors.QualityOfComponents\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\r\nPARAM\tac78d9e0-d39b-43f4-af2c-7b7596d60667\tPset_ServiceLifeFactors.WorkExecutionLevel\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t616\tPset_ShadingDeviceCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t69d50e00-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.IsExternal\tYESNO\t\t616\t1\tIfcBoolean\t1\r\nPARAM\t6f325880-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.MechanicalOperated\tYESNO\t\t616\t1\tIfcBoolean\t1\r\nPARAM\t47db8b80-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.Reference\tTEXT\t\t616\t1\tIfcIdentifier\t1\r\nPARAM\ta1dc5100-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.Roughness\tTEXT\t\t616\t1\tIfcLabel\t1\r\nPARAM\t5de94c00-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.ShadingDeviceType\tTEXT\t\t616\t1\tPEnum_ElementShading\t1\r\nPARAM\t85401900-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.SolarReflectance\tNUMBER\t\t616\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t79eced80-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.SolarTransmittance\tNUMBER\t\t616\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t4e6a0300-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.Status\tTEXT\t\t616\t1\tPEnum_ElementStatus\t1\r\nPARAM\ta86ac880-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.SurfaceColor\tTEXT\t\t616\t1\tIfcLabel\t1\r\nPARAM\ta0fcee0e-2062-4e6d-82ef-70d10e7bbf73\tPset_ShadingDeviceCommon.SurfaceColour\tTEXT\t\t616\t1\tIfcLabel\t1\r\nPARAM\t75283980-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.ThermalTransmittance\tNUMBER\t\t616\t1\tIfcThermalTransmittanceMeasure\t1\r\nPARAM\t9c7f0680-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.VisibleLightReflectance\tNUMBER\t\t616\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t7f4a3800-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.VisibleLightTransmittance\tNUMBER\t\t616\t1\tIfcNormalisedRatioMeasure\t1\r\n#\r\nGROUP\t617\tPset_ShadingDevicePHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc6382d80-d207-11e1-8000-00215ad4efdf\tPset_ShadingDevicePHistory.Azimuth\tMULTILINETEXT\t\t617\t1\tIfcTimeSeries\t1\r\nPARAM\tb3255d80-d207-11e1-8000-00215ad4efdf\tPset_ShadingDevicePHistory.TiltAngle\tMULTILINETEXT\t\t617\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t618\tPset_ShipLockCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t93f5e45e-8fb9-440b-81e3-a9e7bc2a1865\tPset_ShipLockCommon.CillLevelLowerHead\tLENGTH\t\t618\t1\tIfcLengthMeasure\t1\r\nPARAM\tda41ae54-2cdf-4712-abed-29845ed43854\tPset_ShipLockCommon.CillLevelUpperHead\tLENGTH\t\t618\t1\tIfcLengthMeasure\t1\r\nPARAM\t4439e607-c975-46cf-995b-3ca9232a40dc\tPset_ShipLockCommon.WaterDeliverySystemType\tTEXT\t\t618\t1\tIfcLabel\t1\r\nPARAM\t5ff96806-c6af-4ea9-b96a-bd07b9ddd186\tPset_ShipLockCommon.WaterDeliveryValveType\tTEXT\t\t618\t1\tIfcLabel\t1\r\n#\r\nGROUP\t619\tPset_ShiplockComplex\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tff47c027-d82f-4faa-b684-26238b0f8903\tPset_ShiplockComplex.LockChamberLevels\tINTEGER\t\t619\t1\tIfcCountMeasure\t1\r\nPARAM\t54996247-07ba-4c96-9fa5-f0914d8374b3\tPset_ShiplockComplex.LockGrade\tTEXT\t\t619\t1\tIfcLabel\t1\r\nPARAM\t199dd5ec-f01b-4188-bcdd-ac7d3777e726\tPset_ShiplockComplex.LockLines\tINTEGER\t\t619\t1\tIfcCountMeasure\t1\r\nPARAM\taaa6a2c1-63bb-4e77-8fb7-87ae09ccd0cb\tPset_ShiplockComplex.LockMode\tTEXT\t\t619\t1\tIfcLabel\t1\r\n#\r\nGROUP\t620\tPset_ShiplockDesignCriteria\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5c4d5950-e3c9-4ad6-92b9-1350736e08bf\tPset_ShiplockDesignCriteria.DownstreamFloodWaterLevel\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\r\nPARAM\t31b04fe1-2fdd-45f5-bb91-458c08975348\tPset_ShiplockDesignCriteria.DownstreamMaintenanceWaterLevel\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\r\nPARAM\t2ba451a3-55ef-4ebf-a433-cc362e1e1346\tPset_ShiplockDesignCriteria.MaximumDownstreamNavigableWaterLevel\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\r\nPARAM\t994da1d9-4bf0-4e44-a86d-d5e83c70fd9f\tPset_ShiplockDesignCriteria.MaximumUpstreamNavigableWaterLevel\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\r\nPARAM\taacb77eb-1a96-4576-a7e1-3a5b5fbcc1cf\tPset_ShiplockDesignCriteria.MinimumDownstreamNavigableWaterLevel\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\r\nPARAM\te92fb730-38ac-4655-8326-e9d623bf0873\tPset_ShiplockDesignCriteria.MinimumUpstreamNavigableWaterLevel\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\r\nPARAM\t2896f545-b381-4c70-a730-59a132030998\tPset_ShiplockDesignCriteria.UpstreamFloodWaterLevel\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\r\nPARAM\te716b940-d7d8-4b27-a02d-903bda55a40f\tPset_ShiplockDesignCriteria.UpstreamMaintenanceWaterLevel\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t621\tPset_ShipyardCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t08135f85-b07e-4d4a-adf4-c23a2f761f9b\tPset_ShipyardCommon.PrimaryProductionType\tTEXT\t\t621\t1\tIfcLabel\t1\r\n#\r\nGROUP\t622\tPset_SignalFrame\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tcf21ca18-679f-4d61-9ca7-013558ded191\tPset_SignalFrame.BackboardType\tTEXT\t\t622\t1\tIfcLabel\t1\r\nPARAM\t16f58c9e-b856-4433-a5c0-0a076f1dab91\tPset_SignalFrame.NominalWidth\tLENGTH\t\t622\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t2bf98d0d-d3ae-4998-bd78-b61dc13a62ac\tPset_SignalFrame.SignalFrameBackboardDiameter\tLENGTH\t\t622\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t0c347ea1-5ec1-44eb-aa92-ddc848f69499\tPset_SignalFrame.SignalFrameBackboardHeight\tLENGTH\t\t622\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf64f5c56-8586-4e1e-98d0-4a6eece6a4de\tPset_SignalFrame.SignalFrameType\tTEXT\t\t622\t1\tIfcLabel\t1\r\nPARAM\tec386b6c-6f46-403c-8f0b-793cfcf19b23\tPset_SignalFrame.SignalIndicatorType\tTEXT\t\t622\t1\tPEnum_SignalIndicatorType\t1\r\n#\r\nGROUP\t623\tPset_SignCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tddbb7f25-02b2-481f-8721-f47a2b6594f7\tPset_SignCommon.Category\tTEXT\t\t623\t1\tIfcLabel\t1\r\nPARAM\tf98ce2af-7ce5-4ea2-a9ad-f2224572dac3\tPset_SignCommon.IsExternal\tYESNO\t\t623\t1\tIfcBoolean\t1\r\nPARAM\t86485264-3067-4afa-a88b-8bc7298233c0\tPset_SignCommon.Reference\tTEXT\t\t623\t1\tIfcIdentifier\t1\r\nPARAM\t00f83934-3685-460b-a4fd-8e6f5b10f5f7\tPset_SignCommon.TactileMarking\tYESNO\t\t623\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t624\tPset_SiteCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tdc32ed2d-58f7-4638-88fc-8a0dcc1ebc54\tPset_SiteCommon.BuildableArea\tAREA\t\t624\t1\tIfcAreaMeasure\t1\r\nPARAM\t41ff7c55-cd01-4e78-972c-c7ec49853817\tPset_SiteCommon.BuildingHeightLimit\tLENGTH\t\t624\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t6e4bc3ba-6026-4923-9256-fdc3b7dcad0b\tPset_SiteCommon.FloorAreaRatio\tNUMBER\t\t624\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tf5496012-83e8-49e8-b2fc-d0639c9c7394\tPset_SiteCommon.GrossAreaPlanned\tAREA\t\t624\t1\tIfcAreaMeasure\t1\r\nPARAM\t2db3713c-6ec4-4f96-82d4-95f0ca8c184b\tPset_SiteCommon.Reference\tTEXT\t\t624\t1\tIfcIdentifier\t1\r\nPARAM\tcec026c1-b978-4d3c-b657-a67fb34be612\tPset_SiteCommon.SiteCoverageRatio\tNUMBER\t\t624\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t004297b7-015a-4993-9a20-81ae39fc5df2\tPset_SiteCommon.TotalArea\tAREA\t\t624\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t625\tPset_SiteWeather\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t9469744b-4e60-4902-a895-6dbc28cc329f\tPset_SiteWeather.MaxAmbientTemp\tNUMBER\t\t625\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\ta0998b67-40a9-4e5a-907d-b426533a05a5\tPset_SiteWeather.MinAmbientTemp\tNUMBER\t\t625\t1\tIfcThermodynamicTemperatureMeasure\t1\r\n#\r\nGROUP\t626\tPset_SlabCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta3c71da3-c4bd-40aa-bf35-5cf18aeeeec0\tPset_SlabCommon.AcousticRating\tTEXT\t\t626\t1\tIfcLabel\t1\r\nPARAM\t3934d753-d8ce-484d-8311-dcab5d825590\tPset_SlabCommon.Combustible\tYESNO\t\t626\t1\tIfcBoolean\t1\r\nPARAM\t5fab7762-010a-4d66-a94c-15a679090e37\tPset_SlabCommon.Compartmentation\tYESNO\t\t626\t1\tIfcBoolean\t1\r\nPARAM\tc93f5556-48c4-433a-9eab-b6e2e1bec9a9\tPset_SlabCommon.FireRating\tTEXT\t\t626\t1\tIfcLabel\t1\r\nPARAM\t4d5197c1-d7c1-40ee-932f-b1339f2b570d\tPset_SlabCommon.IsExternal\tYESNO\t\t626\t1\tIfcBoolean\t1\r\nPARAM\t92825b2b-4c88-4474-b84c-09c03ed3783a\tPset_SlabCommon.LoadBearing\tYESNO\t\t626\t1\tIfcBoolean\t1\r\nPARAM\t49598380-d208-11e1-8000-00215ad4efdf\tPset_SlabCommon.PitchAngle\tNUMBER\t\t626\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\tfd7bdaba-bb4e-43de-a6c5-20478d9825e0\tPset_SlabCommon.Reference\tTEXT\t\t626\t1\tIfcIdentifier\t1\r\nPARAM\t3c3b5e34-702d-420a-ba1c-051f3025807d\tPset_SlabCommon.Status\tTEXT\t\t626\t1\tPEnum_ElementStatus\t1\r\nPARAM\td93380fd-a51f-402d-8885-b98a4255837e\tPset_SlabCommon.SurfaceSpreadOfFlame\tTEXT\t\t626\t1\tIfcLabel\t1\r\nPARAM\tade1a8e6-1272-4665-a7ff-9c1077125690\tPset_SlabCommon.ThermalTransmittance\tNUMBER\t\t626\t1\tIfcThermalTransmittanceMeasure\t1\r\n#\r\nGROUP\t627\tPset_SlabTypeTrackSlab\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t99fa24c4-375d-46fb-9928-5216d7fd88c7\tPset_SlabTypeTrackSlab.TechnicalStandard\tMULTILINETEXT\t\t627\t1\tIfcExternalReference\t1\r\n#\r\nGROUP\t628\tPset_SolarDeviceTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t9a9a35d2-95f8-4d56-8bac-6657ec7bec7d\tPset_SolarDeviceTypeCommon.ActiveCellSurfaceAreaFraction\tNUMBER\t\t628\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t034f6cea-a9d8-48df-8940-419e8c744201\tPset_SolarDeviceTypeCommon.CellEfficiency\tNUMBER\t\t628\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t55dddc00-d208-11e1-8000-00215ad4efdf\tPset_SolarDeviceTypeCommon.Reference\tTEXT\t\t628\t1\tIfcIdentifier\t1\r\nPARAM\t5bd3bd00-d208-11e1-8000-00215ad4efdf\tPset_SolarDeviceTypeCommon.Status\tTEXT\t\t628\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t629\tPset_SolidStratumCapacity\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t17ac29ae-4e16-4f0d-95bd-5a99a0bb3224\tPset_SolidStratumCapacity.CohesionBehaviour\tNUMBER\t\t629\t1\tIfcPressureMeasure\t1\r\nPARAM\t3007e218-6cbd-4b28-b3da-26404dedbf3a\tPset_SolidStratumCapacity.FrictionAngle\tNUMBER\t\t629\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t9d085b18-0771-41b5-bd17-c6d66e379709\tPset_SolidStratumCapacity.FrictionBehaviour\tNUMBER\t\t629\t1\tIfcPressureMeasure\t1\r\nPARAM\tf8d718d8-156f-4999-8fb8-e75f749dbb87\tPset_SolidStratumCapacity.GrainSize\tLENGTH\t\t629\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t95460886-53b5-4133-9084-c98e5e42f424\tPset_SolidStratumCapacity.HydraulicConductivity\tNUMBER\t\t629\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\t0fe3fd9a-fd05-4c4a-b27f-267ff6b86c92\tPset_SolidStratumCapacity.LoadBearingCapacity\tNUMBER\t\t629\t1\tIfcPlanarForceMeasure\t1\r\nPARAM\t90318423-9fc8-4aa7-a619-cedace4d9c25\tPset_SolidStratumCapacity.NValue\tINTEGER\t\t629\t1\tIfcCountMeasure\t1\r\nPARAM\tfacd3b0a-b27c-438c-904d-b8f2821efda2\tPset_SolidStratumCapacity.PermeabilityBehaviour\tNUMBER\t\t629\t1\tIfcRatioMeasure\t1\r\nPARAM\t51b405aa-ea52-4dc7-a5be-a29917c8e8aa\tPset_SolidStratumCapacity.PoisonsRatio\tNUMBER\t\t629\t1\tIfcRatioMeasure\t1\r\nPARAM\t15378a63-0443-45d8-8785-62175dcf3470\tPset_SolidStratumCapacity.PwaveVelocity\tNUMBER\t\t629\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\td5c69ad2-3730-4362-9220-78726a662b98\tPset_SolidStratumCapacity.Resistivity\tNUMBER\t\t629\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\t1c9b5030-556b-4e39-a8fd-aacf634a4ca8\tPset_SolidStratumCapacity.SettlementBehaviour\tNUMBER\t\t629\t1\tIfcPressureMeasure\t1\r\nPARAM\t55bc9f2d-4ac7-4cad-b4e8-f5d0464e7438\tPset_SolidStratumCapacity.SwaveVelocity\tNUMBER\t\t629\t1\tIfcLinearVelocityMeasure\t1\r\n#\r\nGROUP\t630\tPset_SolidStratumComposition\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5ea49554-ab2a-4265-ac99-2f55da06bd1f\tPset_SolidStratumComposition.AirVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\r\nPARAM\t5bb9b212-8382-40c5-8160-4b5de83e9eab\tPset_SolidStratumComposition.BouldersVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\r\nPARAM\t2bdef069-a96c-47ea-a71f-3db4b0bdef32\tPset_SolidStratumComposition.ClayVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\r\nPARAM\t9a58a154-4af2-4edd-8a97-ae4a7b61c018\tPset_SolidStratumComposition.CobblesVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\r\nPARAM\t63cd3886-6084-4262-9269-408e3271a512\tPset_SolidStratumComposition.CompositeFractions\tTEXT\t\t630\t1\tPEnum_SoilCompositeFractions\t1\r\nPARAM\t6cf91668-b000-4796-9568-751c2078045e\tPset_SolidStratumComposition.ContaminantVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\r\nPARAM\t684ef71e-efbb-41b2-8b1c-6fe613e4e831\tPset_SolidStratumComposition.FillVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\r\nPARAM\tc417c933-4ed1-45fb-b8e5-bef7a433d685\tPset_SolidStratumComposition.GravelVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\r\nPARAM\t904644d5-b497-49d6-94c4-ff4d6935e325\tPset_SolidStratumComposition.OrganicVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\r\nPARAM\t0ff426fe-373a-4a54-9eea-0dee83fc6ea6\tPset_SolidStratumComposition.RockVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\r\nPARAM\t774a7afa-d02d-4c19-95b1-9343195f4996\tPset_SolidStratumComposition.SandVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\r\nPARAM\tb9df0d71-67d5-4532-9d32-c5fc87310869\tPset_SolidStratumComposition.SiltVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\r\nPARAM\t6d3b9448-3ccc-4756-a08b-ee2b0c271ba3\tPset_SolidStratumComposition.WaterVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\r\n#\r\nGROUP\t631\tPset_SoundAttenuation\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t80c83000-d208-11e1-8000-00215ad4efdf\tPset_SoundAttenuation.SoundFrequency\tMULTILINETEXT\t\t631\t1\tPropertyListValue\t1\r\nPARAM\t858ce400-d208-11e1-8000-00215ad4efdf\tPset_SoundAttenuation.SoundPressure\tMULTILINETEXT\t\t631\t1\tIfcTimeSeries\t1\r\nPARAM\t7443d780-d208-11e1-8000-00215ad4efdf\tPset_SoundAttenuation.SoundScale\tTEXT\t\t631\t1\tPEnum_SoundScale\t1\r\n#\r\nGROUP\t632\tPset_SoundGeneration\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8faee280-d208-11e1-8000-00215ad4efdf\tPset_SoundGeneration.SoundCurve\tMULTILINETEXT\t\t632\t1\tPropertyTableValue\t1\r\n#\r\nGROUP\t633\tPset_SpaceAirHandlingDimensioning\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf7492a24-fec7-44f3-b37a-08c2d3c7016f\tPset_SpaceAirHandlingDimensioning.BoundaryAreaHeatLoss\tNUMBER\t\t633\t1\tIfcHeatFluxDensityMeasure\t1\r\nPARAM\t3ff6de6f-830c-4003-a236-322944322118\tPset_SpaceAirHandlingDimensioning.CeilingRAPlenum\tYESNO\t\t633\t1\tIfcBoolean\t1\r\nPARAM\t2b4d8497-069b-4fd5-8379-658cf42789e7\tPset_SpaceAirHandlingDimensioning.CoolingDesignAirFlow\tNUMBER\t\t633\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t6474c1ec-457d-494a-8f50-a2b6c38dd90c\tPset_SpaceAirHandlingDimensioning.CoolingDryBulb\tNUMBER\t\t633\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\tcb63ba50-f6e0-41c1-831e-8a31e89703c6\tPset_SpaceAirHandlingDimensioning.CoolingRelativeHumidity\tNUMBER\t\t633\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\taab505cb-d4e7-4483-949e-6903c099f71d\tPset_SpaceAirHandlingDimensioning.DesignAirFlow\tNUMBER\t\t633\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t240b24db-f545-449e-b3f3-02a51897916a\tPset_SpaceAirHandlingDimensioning.HeatingDesignAirFlow\tNUMBER\t\t633\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t073674f6-15df-492e-9261-e5b0604fd554\tPset_SpaceAirHandlingDimensioning.HeatingDryBulb\tNUMBER\t\t633\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t8ce9fe7c-f483-4793-86c7-f44c807ac7e1\tPset_SpaceAirHandlingDimensioning.HeatingRelativeHumidity\tNUMBER\t\t633\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t15c466a7-1bad-4f75-bc2e-1cc76f14c316\tPset_SpaceAirHandlingDimensioning.SensibleHeatGain\tNUMBER\t\t633\t1\tIfcPowerMeasure\t1\r\nPARAM\t0a046d7c-7276-477f-98ee-e1ee1624311e\tPset_SpaceAirHandlingDimensioning.TotalHeatGain\tNUMBER\t\t633\t1\tIfcPowerMeasure\t1\r\nPARAM\tbdd6472c-26b7-440e-beaf-9cec2d0f6fd2\tPset_SpaceAirHandlingDimensioning.TotalHeatLoss\tNUMBER\t\t633\t1\tIfcPowerMeasure\t1\r\nPARAM\tfa959428-195f-49f6-8cb3-662d27bc29a9\tPset_SpaceAirHandlingDimensioning.VentilationDesignAirFlow\tNUMBER\t\t633\t1\tIfcVolumetricFlowRateMeasure\t1\r\n#\r\nGROUP\t634\tPset_SpaceCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1eface6c-d6b8-4857-9c6b-f3dd4a2a8ab8\tPset_SpaceCommon.Category\tTEXT\t\t634\t1\tIfcLabel\t1\r\nPARAM\t0cb4e5de-6ee9-4f3b-9ae2-7b05a4876e85\tPset_SpaceCommon.CeilingCovering\tTEXT\t\t634\t1\tIfcLabel\t1\r\nPARAM\t5968a5ef-fe99-46d5-a9ee-35717871a8b1\tPset_SpaceCommon.Concealed\tYESNO\t\t634\t1\tIfcBoolean\t1\r\nPARAM\t312a6935-bb3b-4468-9da7-7dacc8bd0f6a\tPset_SpaceCommon.ConcealedCeiling\tYESNO\t\t634\t1\tIfcBoolean\t1\r\nPARAM\t19d86a9d-53b5-482d-b0db-ce29dd90fa22\tPset_SpaceCommon.ConcealedFlooring\tYESNO\t\t634\t1\tIfcBoolean\t1\r\nPARAM\tcf407cb0-c6fc-4c05-9295-d8a320cd03b5\tPset_SpaceCommon.FloorCovering\tTEXT\t\t634\t1\tIfcLabel\t1\r\nPARAM\t3315662e-a31b-4d94-bb30-ba3dc0604ec4\tPset_SpaceCommon.GrossAreaPlanned\tAREA\t\t634\t1\tIfcAreaMeasure\t1\r\nPARAM\t00ee9580-d209-11e1-8000-00215ad4efdf\tPset_SpaceCommon.GrossPlannedArea\tAREA\t\t634\t1\tIfcAreaMeasure\t1\r\nPARAM\t1499fc00-d209-11e1-8000-00215ad4efdf\tPset_SpaceCommon.HandicapAccessible\tYESNO\t\t634\t1\tIfcBoolean\t1\r\nPARAM\tf7fdc400-d208-11e1-8000-00215ad4efdf\tPset_SpaceCommon.IsExternal\tYESNO\t\t634\t1\tIfcBoolean\t1\r\nPARAM\t95a2414c-241c-460e-bb7e-a19d0dcb20d6\tPset_SpaceCommon.MechanicalVentilationRate\tINTEGER\t\t634\t1\tIfcCountMeasure\t1\r\nPARAM\t34d9d1b6-0e11-4315-b69d-912cffbcaf5a\tPset_SpaceCommon.NaturalVentilation\tYESNO\t\t634\t1\tIfcBoolean\t1\r\nPARAM\tee61b60a-800b-41f8-a22a-fdb78cae8249\tPset_SpaceCommon.NaturalVentilationRate\tINTEGER\t\t634\t1\tIfcCountMeasure\t1\r\nPARAM\t06e47680-d209-11e1-8000-00215ad4efdf\tPset_SpaceCommon.NetPlannedArea\tAREA\t\t634\t1\tIfcAreaMeasure\t1\r\nPARAM\t9e0bc4d1-611b-4b5d-816e-e6ad71c684c7\tPset_SpaceCommon.OccupancyNumber\tINTEGER\t\t634\t1\tIfcCountMeasure\t1\r\nPARAM\t462f01f4-2f08-438b-9df0-1dd980cf4957\tPset_SpaceCommon.OccupancyType\tTEXT\t\t634\t1\tIfcLabel\t1\r\nPARAM\t0d72ee00-d209-11e1-8000-00215ad4efdf\tPset_SpaceCommon.PubliclyAccessible\tYESNO\t\t634\t1\tIfcBoolean\t1\r\nPARAM\ta81efd00-d208-11e1-8000-00215ad4efdf\tPset_SpaceCommon.Reference\tTEXT\t\t634\t1\tIfcIdentifier\t1\r\nPARAM\t85df3b70-be9c-4b40-98f8-2be651c1bc1f\tPset_SpaceCommon.SkirtingBoard\tTEXT\t\t634\t1\tIfcLabel\t1\r\nPARAM\t4fa76590-503b-4a39-883d-b47285df0b74\tPset_SpaceCommon.WallCovering\tTEXT\t\t634\t1\tIfcLabel\t1\r\n#\r\nGROUP\t635\tPset_SpaceCoveringRequirements\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tda83c423-5c1d-40ab-a951-0f6abe2412f6\tPset_SpaceCoveringRequirements.CeilingCovering\tTEXT\t\t635\t1\tIfcLabel\t1\r\nPARAM\tabdab367-fcc6-4b08-b03d-584baeb819c8\tPset_SpaceCoveringRequirements.CeilingCoveringThickness\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t7502fd34-b7fa-4942-80c6-10aec4787043\tPset_SpaceCoveringRequirements.ConcealedCeiling\tYESNO\t\t635\t1\tIfcBoolean\t1\r\nPARAM\ta7d072c8-df32-45bd-9c1b-9424d7f35a87\tPset_SpaceCoveringRequirements.ConcealedCeilingOffset\tLENGTH\t\t635\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t8650a689-ba06-4df6-9f05-2a87ab070f02\tPset_SpaceCoveringRequirements.ConcealedFlooring\tYESNO\t\t635\t1\tIfcBoolean\t1\r\nPARAM\t56029141-a7c0-40c4-aef5-1a242fa1611f\tPset_SpaceCoveringRequirements.ConcealedFlooringOffset\tLENGTH\t\t635\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\tbfd1f6a6-ca08-4408-9916-5d31dda04831\tPset_SpaceCoveringRequirements.FloorCovering\tTEXT\t\t635\t1\tIfcLabel\t1\r\nPARAM\t9650c4d3-c07f-4ccc-9fd8-147b099f0939\tPset_SpaceCoveringRequirements.FloorCoveringThickness\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3f9ca576-2462-47ff-8bdc-a254b651a15a\tPset_SpaceCoveringRequirements.Molding\tTEXT\t\t635\t1\tIfcLabel\t1\r\nPARAM\t1e009268-2e53-47b2-b2c5-050bd03ee111\tPset_SpaceCoveringRequirements.MoldingHeight\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t6d6b4d00-a223-4b90-b4eb-1901ca5be2b5\tPset_SpaceCoveringRequirements.SkirtingBoard\tTEXT\t\t635\t1\tIfcLabel\t1\r\nPARAM\taf1249f7-1eb2-4579-aaec-871aa4a6287b\tPset_SpaceCoveringRequirements.SkirtingBoardHeight\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t69193a7f-647f-4526-bd7f-1d3b9fdd1a9e\tPset_SpaceCoveringRequirements.WallCovering\tTEXT\t\t635\t1\tIfcLabel\t1\r\nPARAM\t44c775b1-4a0d-46c5-8ad8-c7e36c34a349\tPset_SpaceCoveringRequirements.WallCoveringThickness\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t636\tPset_SpaceFireSafetyRequirements\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8bcf9000-d209-11e1-8000-00215ad4efdf\tPset_SpaceFireSafetyRequirements.AirPressurization\tYESNO\t\t636\t1\tIfcBoolean\t1\r\nPARAM\t24b148bf-889e-4e63-ac7d-9ef51567cd78\tPset_SpaceFireSafetyRequirements.AncillaryFireUse\tTEXT\t\t636\t1\tIfcLabel\t1\r\nPARAM\t76f2fc80-d209-11e1-8000-00215ad4efdf\tPset_SpaceFireSafetyRequirements.FireExit\tYESNO\t\t636\t1\tIfcBoolean\t1\r\nPARAM\t0c962c05-9faf-44f0-9239-ad8c48b7d713\tPset_SpaceFireSafetyRequirements.FireHazardFactor\tTEXT\t\t636\t1\tIfcLabel\t1\r\nPARAM\t33988e00-d209-11e1-8000-00215ad4efdf\tPset_SpaceFireSafetyRequirements.FireRiskFactor\tTEXT\t\t636\t1\tIfcLabel\t1\r\nPARAM\t3c895f80-d209-11e1-8000-00215ad4efdf\tPset_SpaceFireSafetyRequirements.FlammableStorage\tYESNO\t\t636\t1\tIfcBoolean\t1\r\nPARAM\t3a4ed567-c719-4414-a7e8-58022f2c894e\tPset_SpaceFireSafetyRequirements.MainFireUse\tTEXT\t\t636\t1\tIfcLabel\t1\r\nPARAM\t7e1a0a80-d209-11e1-8000-00215ad4efdf\tPset_SpaceFireSafetyRequirements.SprinklerProtection\tYESNO\t\t636\t1\tIfcBoolean\t1\r\nPARAM\t840feb80-d209-11e1-8000-00215ad4efdf\tPset_SpaceFireSafetyRequirements.SprinklerProtectionAutomatic\tYESNO\t\t636\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t637\tPset_SpaceHeaterPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb9b4d480-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.AirResistanceCurve\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\r\nPARAM\tadc91280-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.AuxiliaryEnergySourceConsumption\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\r\nPARAM\tfb00d530-59e4-4a73-87cc-90731384efe1\tPset_SpaceHeaterPHistory.CharacteristicExponent\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\r\nPARAM\ta0ac2380-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.Effectiveness\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\r\nPARAM\tbde0f200-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.Exponent\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\r\nPARAM\t9c800600-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.FractionConvectiveHeatTransfer\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\r\nPARAM\t9a1dac00-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.FractionRadiantHeatTransfer\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\r\nPARAM\tc1747900-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.HeatOutputRate\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\r\nPARAM\tb6b9e400-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.OutputCapacityCurve\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\r\nPARAM\ta6096e00-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.SpaceAirTemperature\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\r\nPARAM\ta99cf500-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.SpaceMeanRadiantTemperature\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\r\nPARAM\ta30e7d80-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.SurfaceTemperature\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\r\nPARAM\tb15c9980-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.UACurve\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t638\tPset_SpaceHeaterPHistoryCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t62e33e22-c70d-4032-ba2f-3cae02922ee5\tPset_SpaceHeaterPHistoryCommon.AirResistanceCurve\tNUMBER\t\t638\t1\tIfcReal\t1\r\nPARAM\t8018b647-5e75-4cc7-9971-afe2a655e2fc\tPset_SpaceHeaterPHistoryCommon.AuxiliaryEnergySourceConsumption\tTEXT\t\t638\t1\tIfcLabel\t1\r\nPARAM\td0d3c2df-b537-4089-b7fd-6ff7e8f16527\tPset_SpaceHeaterPHistoryCommon.Effectiveness\tTEXT\t\t638\t1\tIfcLabel\t1\r\nPARAM\t044a88f6-4361-4681-859d-f7671c4c027a\tPset_SpaceHeaterPHistoryCommon.Exponent\tTEXT\t\t638\t1\tIfcLabel\t1\r\nPARAM\t0bd4775a-42a4-471d-b47f-fa7681e1e2fb\tPset_SpaceHeaterPHistoryCommon.FractionConvectiveHeatTransfer\tNUMBER\t\t638\t1\tIfcReal\t1\r\nPARAM\tacde0e1e-be78-4d92-9513-1acbb2455644\tPset_SpaceHeaterPHistoryCommon.FractionRadiantHeatTransfer\tNUMBER\t\t638\t1\tIfcReal\t1\r\nPARAM\te837d066-ecbb-43b8-9e89-08e2579e80b8\tPset_SpaceHeaterPHistoryCommon.HeatOutputRate\tNUMBER\t\t638\t1\tIfcReal\t1\r\nPARAM\t915a8f87-580a-4115-a657-a32dac42b1cd\tPset_SpaceHeaterPHistoryCommon.OutputCapacityCurve\tNUMBER\t\t638\t1\tIfcReal\t1\r\nPARAM\t4f34eb27-7cd9-4e9a-8fa3-2c18e719bd14\tPset_SpaceHeaterPHistoryCommon.SpaceAirTemperature\tNUMBER\t\t638\t1\tIfcReal\t1\r\nPARAM\tdddbafdc-2bcc-4e28-ad12-b021d6ebbc21\tPset_SpaceHeaterPHistoryCommon.SpaceMeanRadiantTemperature\tNUMBER\t\t638\t1\tIfcReal\t1\r\nPARAM\t952fe42e-143b-497d-972c-b05ac332464f\tPset_SpaceHeaterPHistoryCommon.SurfaceTemperature\tNUMBER\t\t638\t1\tIfcReal\t1\r\nPARAM\t4876859c-5182-4785-97ca-958d7a99815e\tPset_SpaceHeaterPHistoryCommon.UACurve\tTEXT\t\t638\t1\tIfcLabel\t1\r\n#\r\nGROUP\t639\tPset_SpaceHeaterTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4f506400-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.BodyMass\tNUMBER\t\t639\t1\tIfcMassMeasure\t1\r\nPARAM\t216b1f80-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.EnergySource\tTEXT\t\t639\t1\tPEnum_EnergySource\t1\r\nPARAM\t87dbbac4-4fbc-4a61-8fd2-ff49be7966b6\tPset_SpaceHeaterTypeCommon.HeatingSource\tTEXT\t\t639\t1\tPEnum_HeatingSource\t1\r\nPARAM\t07c9d800-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.HeatTransferDimension\tTEXT\t\t639\t1\tPEnum_SpaceHeaterHeatTransferDimension\t1\r\nPARAM\t14e6c700-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.HeatTransferMedium\tTEXT\t\t639\t1\tPEnum_HeatTransferMedium\t1\r\nPARAM\t74beb997-5939-4f8a-9595-948e9d954b35\tPset_SpaceHeaterTypeCommon.Material\tMULTILINETEXT\t\t639\t1\tIfcMaterial\t1\r\nPARAM\t6d1dc900-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.NumberOfPanels\tINTEGER\t\t639\t1\tIfcCountMeasure\t1\r\nPARAM\t727b1380-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.NumberOfSections\tINTEGER\t\t639\t1\tIfcCountMeasure\t1\r\nPARAM\t5d9e8000-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.OutputCapacity\tNUMBER\t\t639\t1\tIfcPowerMeasure\t1\r\nPARAM\te9fc7300-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.PlacementType\tTEXT\t\t639\t1\tPEnum_SpaceHeaterPlacementType\t1\r\nPARAM\tcafde100-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.Reference\tTEXT\t\t639\t1\tIfcIdentifier\t1\r\nPARAM\t6c4c9f6f-55e2-4eeb-a542-926939c9efb1\tPset_SpaceHeaterTypeCommon.SpaceHeaterPlacement\tTEXT\t\t639\t1\tPEnum_SpaceHeaterPlacementType\t1\r\nPARAM\td224ef00-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.Status\tTEXT\t\t639\t1\tPEnum_ElementStatus\t1\r\nPARAM\tfbde1600-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.TemperatureClassification\tTEXT\t\t639\t1\tPEnum_SpaceHeaterTemperatureClassification\t1\r\nPARAM\t63946100-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.ThermalEfficiency\tNUMBER\t\t639\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t57a89f00-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.ThermalMassHeatCapacity\tNUMBER\t\t639\t1\tIfcReal\t1\r\n#\r\nGROUP\t640\tPset_SpaceHeaterTypeConvector\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7e66d580-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeConvector.ConvectorType\tTEXT\t\t640\t1\tPEnum_SpaceHeaterConvectorType\t1\r\n#\r\nGROUP\t641\tPset_SpaceHeaterTypeHydronic\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t10706847-8208-49e5-82b9-e0fa7b09335c\tPset_SpaceHeaterTypeHydronic.TubingLength\tLENGTH\t\t641\t1\tIfcLengthMeasure\t1\r\nPARAM\t26f7234f-35b8-4c53-87c1-ab7757232c81\tPset_SpaceHeaterTypeHydronic.WaterContent\tNUMBER\t\t641\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t642\tPset_SpaceHeaterTypeRadiator\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t9179a580-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeRadiator.RadiatorType\tTEXT\t\t642\t1\tPEnum_SpaceHeaterRadiatorType\t1\r\nPARAM\ta0f8ee80-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeRadiator.TubingLength\tLENGTH\t\t642\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\ta9512980-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeRadiator.WaterContent\tNUMBER\t\t642\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t643\tPset_SpaceHVACDesign\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2bb1b671-04b4-462a-8ef5-023e20511f30\tPset_SpaceHVACDesign.AirConditioning\tYESNO\t\t643\t1\tIfcBoolean\t1\r\nPARAM\t7f6730db-61ad-45ae-b52c-ed9a0d91334b\tPset_SpaceHVACDesign.AirConditioningCentral\tYESNO\t\t643\t1\tIfcBoolean\t1\r\nPARAM\t5cfa0d87-01b9-4397-842a-89ebe257be3e\tPset_SpaceHVACDesign.AirHandlingName\tTEXT\t\t643\t1\tIfcLabel\t1\r\nPARAM\te7a418dc-bbb9-4176-9aad-7b07eff4bd49\tPset_SpaceHVACDesign.DiscontinuedHeating\tYESNO\t\t643\t1\tIfcBoolean\t1\r\nPARAM\tccc43101-a0be-4b96-8a40-143e9bb84829\tPset_SpaceHVACDesign.HumidityMax\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t51778e83-55b7-4524-9fb0-93c9709b4399\tPset_SpaceHVACDesign.HumidityMin\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t735568ae-828e-4d50-8fd2-3fcc3e640a22\tPset_SpaceHVACDesign.HumiditySetPoint\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t7974427c-fa78-46ca-ac7b-0d0c3ecb592e\tPset_SpaceHVACDesign.HumiditySummer\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t163923cb-2bd9-4b67-9c3d-ac5ac18ce02a\tPset_SpaceHVACDesign.HumidityWinter\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tff04375f-5fdc-4d11-a98e-0e79f439601a\tPset_SpaceHVACDesign.MechanicalVentilation\tYESNO\t\t643\t1\tIfcBoolean\t1\r\nPARAM\td9574168-d40c-4dfa-813f-69de285b972e\tPset_SpaceHVACDesign.MechanicalVentilationRate\tINTEGER\t\t643\t1\tIfcCountMeasure\t1\r\nPARAM\t3ee208f0-a5a9-4a55-9a94-e8407f79fae4\tPset_SpaceHVACDesign.NaturalVentilation\tYESNO\t\t643\t1\tIfcBoolean\t1\r\nPARAM\t9166243c-98a2-403b-a7b5-9dd29d10f092\tPset_SpaceHVACDesign.NaturalVentilationRate\tINTEGER\t\t643\t1\tIfcCountMeasure\t1\r\nPARAM\t686684e9-7dd7-492f-a3ea-6050b9b6778e\tPset_SpaceHVACDesign.TemperatureMax\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\td4ce1f5e-0951-4b9d-b051-ce1d6e052543\tPset_SpaceHVACDesign.TemperatureMin\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t045b63d8-d57a-42a0-bf17-9a2a7d721618\tPset_SpaceHVACDesign.TemperatureSetPoint\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t657961b7-9b93-4c02-af99-5a69edea46dc\tPset_SpaceHVACDesign.TemperatureSummerMax\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\tbfceeaaa-80c7-4df8-8860-4b6f43e2317f\tPset_SpaceHVACDesign.TemperatureSummerMin\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t61ba0725-667a-49a5-9eec-adbf7241dcf5\tPset_SpaceHVACDesign.TemperatureWinterMax\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\tc3513186-7790-410b-b4f1-418de09bb2f1\tPset_SpaceHVACDesign.TemperatureWinterMin\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\r\n#\r\nGROUP\t644\tPset_SpaceLightingDesign\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t76426c40-07d6-456d-8982-61d5fcb4ccee\tPset_SpaceLightingDesign.ArtificialLighting\tYESNO\t\t644\t1\tIfcBoolean\t1\r\nPARAM\t28aa4835-6a61-4612-a66f-0adce7e711bd\tPset_SpaceLightingDesign.Illuminance\tNUMBER\t\t644\t1\tIfcIlluminanceMeasure\t1\r\n#\r\nGROUP\t645\tPset_SpaceLightingRequirements\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb53ceb80-d20a-11e1-8000-00215ad4efdf\tPset_SpaceLightingRequirements.ArtificialLighting\tYESNO\t\t645\t1\tIfcBoolean\t1\r\nPARAM\tbb32cc80-d20a-11e1-8000-00215ad4efdf\tPset_SpaceLightingRequirements.Illuminance\tNUMBER\t\t645\t1\tIfcIlluminanceMeasure\t1\r\n#\r\nGROUP\t646\tPset_SpaceOccupancyRequirements\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te0bfd600-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.AreaPerOccupant\tAREA\t\t646\t1\tIfcAreaMeasure\t1\r\nPARAM\teae1d480-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.IsOutlookDesirable\tYESNO\t\t646\t1\tIfcBoolean\t1\r\nPARAM\te61d2080-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.MinimumHeadroom\tLENGTH\t\t646\t1\tIfcLengthMeasure\t1\r\nPARAM\tcf76c980-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.OccupancyNumber\tINTEGER\t\t646\t1\tIfcCountMeasure\t1\r\nPARAM\td4d41400-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.OccupancyNumberPeak\tINTEGER\t\t646\t1\tIfcCountMeasure\t1\r\nPARAM\tdac9f500-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.OccupancyTimePerDay\tNUMBER\t\t646\t1\tIfcTimeMeasure\t1\r\nPARAM\tc84fbb80-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.OccupancyType\tTEXT\t\t646\t1\tIfcLabel\t1\r\n#\r\nGROUP\t647\tPset_SpaceParking\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta74fbc68-56e4-404f-9917-67f048ca9d23\tPset_SpaceParking.HandicapAccessible\tYESNO\t\t647\t1\tIfcBoolean\t1\r\nPARAM\t051bb280-d20b-11e1-8000-00215ad4efdf\tPset_SpaceParking.IsAisle\tYESNO\t\t647\t1\tIfcBoolean\t1\r\nPARAM\t0c42c080-d20b-11e1-8000-00215ad4efdf\tPset_SpaceParking.IsOneWay\tYESNO\t\t647\t1\tIfcBoolean\t1\r\nPARAM\tffbe6800-d20a-11e1-8000-00215ad4efdf\tPset_SpaceParking.ParkingUnits\tINTEGER\t\t647\t1\tIfcCountMeasure\t1\r\nPARAM\tf7662d00-d20a-11e1-8000-00215ad4efdf\tPset_SpaceParking.ParkingUse\tTEXT\t\t647\t1\tIfcLabel\t1\r\n#\r\nGROUP\t648\tPset_SpaceParkingAisle\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t22b7fe61-940f-4e03-986a-2b53767fdf19\tPset_SpaceParkingAisle.IsOneWay\tYESNO\t\t648\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t649\tPset_SpaceProgramCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\taea900b9-903d-4930-8483-4944fef95679\tPset_SpaceProgramCommon.EmployeeType\tTEXT\t\t649\t1\tIfcLabel\t1\r\nPARAM\ta6c1ab03-871f-496b-abc7-f559102cd20b\tPset_SpaceProgramCommon.FFETypeRequirement\tTEXT\t\t649\t1\tIfcLabel\t1\r\nPARAM\tc14d78a9-02be-4122-bcf6-340f21698bb6\tPset_SpaceProgramCommon.FunctionRequirement\tTEXT\t\t649\t1\tIfcLabel\t1\r\nPARAM\t45baac17-7aa0-4f18-8db4-174d9979e4c8\tPset_SpaceProgramCommon.LightingRequirement\tTEXT\t\t649\t1\tIfcLabel\t1\r\nPARAM\t3c6211fa-862f-4390-83f3-54d0d71c6f1c\tPset_SpaceProgramCommon.Location\tTEXT\t\t649\t1\tIfcLabel\t1\r\nPARAM\t7de36c01-c87e-4815-baaa-b3958359cc27\tPset_SpaceProgramCommon.OccupancyNumber\tINTEGER\t\t649\t1\tIfcCountMeasure\t1\r\nPARAM\t3db64fb4-4490-439d-88d4-54687e350137\tPset_SpaceProgramCommon.OccupancyType\tTEXT\t\t649\t1\tIfcLabel\t1\r\nPARAM\t0635a2ad-b72d-4030-af13-91b85876df2a\tPset_SpaceProgramCommon.PrivacyRequirement\tTEXT\t\t649\t1\tIfcLabel\t1\r\nPARAM\t2b0b297c-311c-4bd6-a396-c276d67c2013\tPset_SpaceProgramCommon.SecurityRequirement\tTEXT\t\t649\t1\tIfcLabel\t1\r\n#\r\nGROUP\t650\tPset_SpaceThermalDesign\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t617ed200-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.BoundaryAreaHeatLoss\tNUMBER\t\t650\t1\tIfcHeatFluxDensityMeasure\t1\r\nPARAM\t5a57c400-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.CeilingRAPlenum\tYESNO\t\t650\t1\tIfcBoolean\t1\r\nPARAM\t19f84600-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.CoolingDesignAirflow\tNUMBER\t\t650\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t385e4180-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.CoolingDryBulb\tNUMBER\t\t650\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t3dbb8c00-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.CoolingRelativeHumidity\tNUMBER\t\t650\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t54fa7980-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.ExhaustAirFlowrate\tNUMBER\t\t650\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t1fee2700-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.HeatingDesignAirflow\tNUMBER\t\t650\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t43b16d00-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.HeatingDryBulb\tNUMBER\t\t650\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t490eb780-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.HeatingRelativeHumidity\tNUMBER\t\t650\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t2c727f80-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.TotalHeatGain\tNUMBER\t\t650\t1\tIfcPowerMeasure\t1\r\nPARAM\t31373380-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.TotalHeatLoss\tNUMBER\t\t650\t1\tIfcPowerMeasure\t1\r\nPARAM\t25e40800-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.TotalSensibleHeatGain\tNUMBER\t\t650\t1\tIfcPowerMeasure\t1\r\nPARAM\t4f9d2f00-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.VentilationAirFlowrate\tNUMBER\t\t650\t1\tIfcVolumetricFlowRateMeasure\t1\r\n#\r\nGROUP\t651\tPset_SpaceThermalLoad\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta4d94080-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.AirExchangeRate\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\r\nPARAM\tbfabb500-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.DryBulbTemperature\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\r\nPARAM\t807d6400-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.EquipmentSensible\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\r\nPARAM\t9db23280-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.ExhaustAir\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\r\nPARAM\tce926780-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.InfiltrationSensible\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\r\nPARAM\t7491a200-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.Lighting\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\r\nPARAM\t6e032a80-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.People\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\r\nPARAM\t9723bb00-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.RecirculatedAir\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\r\nPARAM\tc6d2c300-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.RelativeHumidity\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\r\nPARAM\tde11b080-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.TotalLatentLoad\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\r\nPARAM\te8cc4580-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.TotalRadiantLoad\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\r\nPARAM\td6520c00-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.TotalSensibleLoad\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\r\nPARAM\t870bdb80-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.VentilationIndoorAir\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\r\nPARAM\t8f641680-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.VentilationOutdoorAir\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t652\tPset_SpaceThermalLoadPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0bf6f500-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.AirExchangeRate\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t682f68ba-7961-4425-a201-a69ae991db17\tPset_SpaceThermalLoadPHistory.AirExchangeRateTimeHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t0f8a7c00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.DryBulbTemperature\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t641958d4-c86e-4c82-8bca-65a78723a54e\tPset_SpaceThermalLoadPHistory.DryBulbTemperatureHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\tfda8d900-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.EquipmentSensible\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t064dec5c-627e-46a5-b964-5f3b7693fb3d\tPset_SpaceThermalLoadPHistory.EquipmentSensibleHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t08fc0480-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.ExhaustAir\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t68f6c194-9b23-4ee5-a236-08d8b27f3c34\tPset_SpaceThermalLoadPHistory.ExhaustAirHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t15805d00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.InfiltrationSensible\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t8c760cb8-c1d9-4876-9776-80b33cbe6ec4\tPset_SpaceThermalLoadPHistory.InfiltrationSensibleHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\tfaade880-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.Lighting\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\te433a278-e64c-48e0-8b25-46af384d75aa\tPset_SpaceThermalLoadPHistory.LightingHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\tf7b2f800-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.People\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t39797967-9fb9-4391-a49e-08ffb37169c6\tPset_SpaceThermalLoadPHistory.PeopleHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t06011400-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.RecirculatedAir\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\tc628dc7d-5b8f-4d14-bde3-825a72282087\tPset_SpaceThermalLoadPHistory.RecirculatedAirHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t12856c80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.RelativeHumidity\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t761cbbce-da9d-48d5-96a9-64a7d87227ef\tPset_SpaceThermalLoadPHistory.RelativeHumidityHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t1b763e00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.TotalLatentLoad\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\tbfae7e49-24bd-4ba7-8230-90c9594f61c2\tPset_SpaceThermalLoadPHistory.TotalLatentLoadHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t1e712e80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.TotalRadiantLoad\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\tbe9c14a8-06a8-48b8-8aa9-e578c66815b7\tPset_SpaceThermalLoadPHistory.TotalRadiantLoadHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t187b4d80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.TotalSensibleLoad\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t7dd2d8ff-6577-4373-bf9b-8b768a29f172\tPset_SpaceThermalLoadPHistory.TotalSensibleLoadHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t000b3300-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.VentilationIndoorAir\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\tbfaf21ac-d0e9-41b4-bf2e-c67d9979aaa4\tPset_SpaceThermalLoadPHistory.VentilationIndoorAirHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t03062380-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.VentilationOutdoorAir\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\nPARAM\t02d739ae-b4f5-4e67-8865-1aca5fdd2f5e\tPset_SpaceThermalLoadPHistory.VentilationOutdoorAirHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t653\tPset_SpaceThermalPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t27fa9680-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalPHistory.CoolingAirFlowRate\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\r\nPARAM\t3183fe80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalPHistory.ExhaustAirFlowRate\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\r\nPARAM\t2b8e1d80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalPHistory.HeatingAirFlowRate\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\r\nPARAM\t38ab0c80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalPHistory.SpaceRelativeHumidity\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\r\nPARAM\t35178580-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalPHistory.SpaceTemperature\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\r\nPARAM\ta21dc910-a384-48f2-a295-a3e2bf849215\tPset_SpaceThermalPHistory.SpaceTemperatureHistory\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\r\nPARAM\t2e890e00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalPHistory.VentilationAirFlowRate\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\r\nPARAM\t9e001da6-6f54-470f-8d1e-6b12bdb1c340\tPset_SpaceThermalPHistory.VentilationAirFlowRateHistory\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t654\tPset_SpaceThermalRequirements\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t9fc8c100-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.AirConditioning\tYESNO\t\t654\t1\tIfcBoolean\t1\r\nPARAM\ta5bea200-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.AirConditioningCentral\tYESNO\t\t654\t1\tIfcBoolean\t1\r\nPARAM\t86c01000-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.DiscontinuedHeating\tYESNO\t\t654\t1\tIfcBoolean\t1\r\nPARAM\t9a6b7680-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.MechanicalVentilationRate\tINTEGER\t\t654\t1\tIfcCountMeasure\t1\r\nPARAM\t8d4e8780-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.NaturalVentilation\tYESNO\t\t654\t1\tIfcBoolean\t1\r\nPARAM\t94759580-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.NaturalVentilationRate\tINTEGER\t\t654\t1\tIfcCountMeasure\t1\r\nPARAM\t6bed9b80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceHumidity\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\r\nPARAM\t70b24f80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceHumidityMax\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\r\nPARAM\t76a83080-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceHumidityMin\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\r\nPARAM\t7c057b00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceHumiditySummer\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\r\nPARAM\t8162c580-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceHumidityWinter\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\r\nPARAM\t42cd0b00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperature\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t48c2ec00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperatureMax\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t4eb8cd00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperatureMin\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t5b987553-d57e-4bf3-8014-90787ba00b54\tPset_SpaceThermalRequirements.SpaceTemperatureSummer\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure \t1\r\nPARAM\t54161780-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperatureSummerMax\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t5a0bf880-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperatureSummerMin\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\taf976ddd-94b0-4d46-907c-e92f6bc5ec4e\tPset_SpaceThermalRequirements.SpaceTemperatureWinter\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure \t1\r\nPARAM\t6001d980-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperatureWinterMax\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t65f7ba80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperatureWinterMin\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\r\n#\r\nGROUP\t655\tPset_SpatialZoneCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3ae302c7-0c29-4228-89f6-f36a68e14a44\tPset_SpatialZoneCommon.IsExternal\tYESNO\t\t655\t1\tIfcBoolean\t1\r\nPARAM\t09e2b7b5-4192-4636-a1d5-31d532a1a8d2\tPset_SpatialZoneCommon.Reference\tTEXT\t\t655\t1\tIfcIdentifier\t1\r\n#\r\nGROUP\t656\tPset_SpringTensioner\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t07617ec7-9938-4fe8-aeda-fc78d8a442c4\tPset_SpringTensioner.NominalWeight\tNUMBER\t\t656\t1\tIfcMassMeasure\t1\r\nPARAM\tdba655ed-3996-480f-8f0f-a6fa99821e1a\tPset_SpringTensioner.TensileStrength\tNUMBER\t\t656\t1\tIfcPressureMeasure\t1\r\nPARAM\t7af4200c-8630-43d8-9129-83adb7982368\tPset_SpringTensioner.TensioningWorkingRange\tMULTILINETEXT\t\t656\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t657\tPset_StackTerminalTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb2db9100-d20c-11e1-8000-00215ad4efdf\tPset_StackTerminalTypeCommon.Reference\tTEXT\t\t657\t1\tIfcIdentifier\t1\r\nPARAM\tb838db80-d20c-11e1-8000-00215ad4efdf\tPset_StackTerminalTypeCommon.Status\tTEXT\t\t657\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t658\tPset_StairCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t22518080-d20d-11e1-8000-00215ad4efdf\tPset_StairCommon.FireExit\tYESNO\t\t658\t1\tIfcBoolean\t1\r\nPARAM\t19f94580-d20d-11e1-8000-00215ad4efdf\tPset_StairCommon.FireRating\tTEXT\t\t658\t1\tIfcLabel\t1\r\nPARAM\t0cdc5680-d20d-11e1-8000-00215ad4efdf\tPset_StairCommon.HandicapAccessible\tYESNO\t\t658\t1\tIfcBoolean\t1\r\nPARAM\t29788e80-d20d-11e1-8000-00215ad4efdf\tPset_StairCommon.HasNonSkidSurface\tYESNO\t\t658\t1\tIfcBoolean\t1\r\nPARAM\t136ace00-d20d-11e1-8000-00215ad4efdf\tPset_StairCommon.IsExternal\tYESNO\t\t658\t1\tIfcBoolean\t1\r\nPARAM\t8fc535f6-6e7a-4d68-99fd-3b4218b31836\tPset_StairCommon.LoadBearing\tYESNO\t\t658\t1\tIfcBoolean\t1\r\nPARAM\ta9e3055e-9126-471c-aa4a-118eb84c2751\tPset_StairCommon.NosingLength\tLENGTH\t\t658\t1\tIfcLengthMeasure\t1\r\nPARAM\te8807a00-d20c-11e1-8000-00215ad4efdf\tPset_StairCommon.NumberOfRiser\tINTEGER\t\t658\t1\tIfcCountMeasure\t1\r\nPARAM\ted452e00-d20c-11e1-8000-00215ad4efdf\tPset_StairCommon.NumberOfTreads\tINTEGER\t\t658\t1\tIfcCountMeasure\t1\r\nPARAM\td272b980-d20c-11e1-8000-00215ad4efdf\tPset_StairCommon.Reference\tTEXT\t\t658\t1\tIfcIdentifier\t1\r\nPARAM\t04841b80-d20d-11e1-8000-00215ad4efdf\tPset_StairCommon.RequiredHeadroom\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf2a27880-d20c-11e1-8000-00215ad4efdf\tPset_StairCommon.RiserHeight\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td9013100-d20c-11e1-8000-00215ad4efdf\tPset_StairCommon.Status\tTEXT\t\t658\t1\tPEnum_ElementStatus\t1\r\nPARAM\te2afaa3c-a326-44f2-94f3-a4fb08059fc3\tPset_StairCommon.ThermalTransmittance\tNUMBER\t\t658\t1\tIfcThermalTransmittanceMeasure\t1\r\nPARAM\tfafab380-d20c-11e1-8000-00215ad4efdf\tPset_StairCommon.TreadLength\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9996d6e7-f7ec-4fb9-973c-027edc7fc421\tPset_StairCommon.TreadLengthAtInnerSide\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t468b4f6c-361b-4ced-8545-cc440b4d8a1d\tPset_StairCommon.TreadLengthAtOffset\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t47b259a7-db12-46f4-87ec-f6049461cc52\tPset_StairCommon.WaistThickness\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t975f98e2-5ec8-4e4d-ad52-a2fb2cad197c\tPset_StairCommon.WalkingLineOffset\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t659\tPset_StairFlightCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8bd18f00-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.Headroom\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t6c3a6680-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.NosingLength\tLENGTH\t\t659\t1\tIfcLengthMeasure\t1\r\nPARAM\t4f059800-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.NumberOfRiser\tINTEGER\t\t659\t1\tIfcCountMeasure\t1\r\nPARAM\t54fb7900-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.NumberOfTreads\tINTEGER\t\t659\t1\tIfcCountMeasure\t1\r\nPARAM\t39906e00-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.Reference\tTEXT\t\t659\t1\tIfcIdentifier\t1\r\nPARAM\t5af15a00-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.RiserHeight\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t401ee580-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.Status\tTEXT\t\t659\t1\tPEnum_ElementStatus\t1\r\nPARAM\t63499500-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.TreadLength\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t8411ea80-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.TreadLengthAtInnerSide\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t7b211900-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.TreadLengthAtOffset\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9429ca00-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.WaistThickness\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t7197b100-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.WalkingLineOffset\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t660\tPset_Stationing\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t6500b63b-ebfa-4f9b-bffa-fc7bd554fdb3\tPset_Stationing.IncomingStation\tLENGTH\t\t660\t1\tIfcLengthMeasure\t1\r\nPARAM\t984f5f79-8e8b-429c-a058-4b1fc7d91337\tPset_Stationing.Station\tLENGTH\t\t660\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t661\tPset_StructuralSurfaceMemberVaryingThickness\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1f2c5ae6-f4a4-4733-969a-effb41892a77\tPset_StructuralSurfaceMemberVaryingThickness.Location1Global\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\r\nPARAM\tbd40a904-6365-4cfb-9cd6-4f425f027504\tPset_StructuralSurfaceMemberVaryingThickness.Location1Local\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\r\nPARAM\tcffbd577-c8ae-4ae3-b9c7-f17891e8b4d8\tPset_StructuralSurfaceMemberVaryingThickness.Location2Global\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\r\nPARAM\t058e4602-830c-41f4-862b-1d1c7338a7b0\tPset_StructuralSurfaceMemberVaryingThickness.Location2Local\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\r\nPARAM\t8fa1dfe7-5189-4b6a-96e0-71431b39e282\tPset_StructuralSurfaceMemberVaryingThickness.Location3Global\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\r\nPARAM\t441117ba-4772-4c3e-946e-ac44f07c39da\tPset_StructuralSurfaceMemberVaryingThickness.Location3Local\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\r\nPARAM\tb96886be-793e-4099-b0a2-8924bfd23b83\tPset_StructuralSurfaceMemberVaryingThickness.Thickness1\tLENGTH\t\t661\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t054660e6-4799-4621-a6bd-ad29616d79b0\tPset_StructuralSurfaceMemberVaryingThickness.Thickness2\tLENGTH\t\t661\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t27d5c5a6-13ac-4c96-a769-fb075fde8178\tPset_StructuralSurfaceMemberVaryingThickness.Thickness3\tLENGTH\t\t661\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t662\tPset_SumpBusterCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t68a23581-2973-43a4-a31f-807a04f5a650\tPset_SumpBusterCommon.TypeDesignation\tTEXT\t\t662\t1\tIfcLabel\t1\r\n#\r\nGROUP\t663\tPset_Superelevation\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t487a5d25-fcee-4649-8855-3874c82717e2\tPset_Superelevation.Side\tTEXT\t\t663\t1\tPEnum_SideType\t1\r\nPARAM\td6a70e27-a171-40ed-99ec-fcbf7ec6298a\tPset_Superelevation.Superelevation\tNUMBER\t\t663\t1\tIfcRatioMeasure\t1\r\nPARAM\t3f1d8c6a-eda5-4dbb-b03b-750b0e6d41c3\tPset_Superelevation.TransitionSuperelevation\tTEXT\t\t663\t1\tPEnum_TransitionSuperelevationType\t1\r\n#\r\nGROUP\t664\tPset_SwitchingDeviceTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tcd623a00-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.HasLock\tYESNO\t\t664\t1\tIfcBoolean\t1\r\nPARAM\td4894800-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.IsIlluminated\tYESNO\t\t664\t1\tIfcBoolean\t1\r\nPARAM\tdb17bf80-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.Legend\tTEXT\t\t664\t1\tIfcLabel\t1\r\nPARAM\tb885a680-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.NumberOfGangs\tINTEGER\t\t664\t1\tIfcCountMeasure\t1\r\nPARAM\ta277e600-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.Reference\tTEXT\t\t664\t1\tIfcIdentifier\t1\r\nPARAM\te2d76400-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.SetPoint\tMULTILINETEXT\t\t664\t1\tPropertyTableValue\t1\r\nPARAM\ta9065d80-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.Status\tTEXT\t\t664\t1\tPEnum_ElementStatus\t1\r\nPARAM\tbde2f100-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.SwitchFunction\tTEXT\t\t664\t1\tPEnum_SwitchFunctionType\t1\r\n#\r\nGROUP\t665\tPset_SwitchingDeviceTypeContactor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf7b3f780-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeContactor.ContactorType\tTEXT\t\t665\t1\tPEnum_ContactorType\t1\r\n#\r\nGROUP\t666\tPset_SwitchingDeviceTypeDimmerSwitch\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t11edd580-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeDimmerSwitch.DimmerType\tTEXT\t\t666\t1\tPEnum_SwitchingDeviceDimmerSwitchType\t1\r\n#\r\nGROUP\t667\tPset_SwitchingDeviceTypeEmergencyStop\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7a2383b5-f769-4c33-9bd8-7061df4d0cc2\tPset_SwitchingDeviceTypeEmergencyStop.BreakingCapacity\tNUMBER\t\t667\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t85d3846c-cbfe-46c9-8612-18dc25e016c3\tPset_SwitchingDeviceTypeEmergencyStop.NominalCurrent\tNUMBER\t\t667\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t4495396b-abe3-464b-9f99-b0530f60e685\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfAffectedPoles\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\r\nPARAM\tce6cec2c-7627-4d06-bd2e-11290828e1d5\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfEarthFaultRelays\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\r\nPARAM\ta438a349-5606-46f7-86f1-5ba51e09b6d1\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfEmergencyButtons\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\r\nPARAM\t959456a7-13f3-4ae4-8a9a-6ad4505827dd\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfOverCurrentRelays\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\r\nPARAM\te5ee7276-4781-4568-af52-620a6731b4ac\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfPhases\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\r\nPARAM\t7475038e-205f-4939-96ce-276077e50929\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfRelays\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\r\nPARAM\t439c0159-1071-49a2-9eee-dd0c6102e804\tPset_SwitchingDeviceTypeEmergencyStop.RatedFrequency\tNUMBER\t\t667\t1\tIfcFrequencyMeasure\t1\r\nPARAM\t48c69023-6195-4ae4-bdcd-a5d1e2a77739\tPset_SwitchingDeviceTypeEmergencyStop.RatedVoltage\tMULTILINETEXT\t\t667\t1\tPropertyBoundedValue\t1\r\nPARAM\tfac73baf-4d13-4715-a1e9-edcac84ac8f8\tPset_SwitchingDeviceTypeEmergencyStop.ReferenceEnvironmentTemperature\tMULTILINETEXT\t\t667\t1\tPropertyBoundedValue\t1\r\nPARAM\t25993c00-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeEmergencyStop.SwitchOperation\tTEXT\t\t667\t1\tPEnum_SwitchingDeviceEmergencyStopType\t1\r\nPARAM\t4a125b3f-1771-4529-9ece-a7e6bd9d6dc9\tPset_SwitchingDeviceTypeEmergencyStop.TransformationRatio\tNUMBER\t\t667\t1\tIfcPositiveRatioMeasure\t1\r\n#\r\nGROUP\t668\tPset_SwitchingDeviceTypeKeypad\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t38137580-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeKeypad.KeypadType\tTEXT\t\t668\t1\tPEnum_SwitchingDeviceKeypadType\t1\r\n#\r\nGROUP\t669\tPset_SwitchingDeviceTypeMomentarySwitch\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4c577280-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeMomentarySwitch.MomentaryType\tTEXT\t\t669\t1\tPEnum_SwitchingDeviceMomentarySwitchType\t1\r\n#\r\nGROUP\t670\tPset_SwitchingDeviceTypePHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5b3e2500-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypePHistory.SetPoint\tMULTILINETEXT\t\t670\t1\tIfcTimeSeries\t1\r\nPARAM\t886090a4-64af-418e-a0f6-5b837f17e566\tPset_SwitchingDeviceTypePHistory.SetPointHistory\tMULTILINETEXT\t\t670\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t671\tPset_SwitchingDeviceTypeRelay\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t6488c9bd-69c5-4e92-9f04-e566471292d1\tPset_SwitchingDeviceTypeRelay.ContactResistance\tNUMBER\t\t671\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\tac234e6c-348e-4fd5-ac33-411aa66f0f45\tPset_SwitchingDeviceTypeRelay.Current\tMULTILINETEXT\t\t671\t1\tPropertyBoundedValue\t1\r\nPARAM\tf69f1d29-b405-4ac2-9996-aacc84b58834\tPset_SwitchingDeviceTypeRelay.InsulationResistance\tNUMBER\t\t671\t1\tIfcElectricResistanceMeasure\t1\r\nPARAM\t584c5add-c653-49e9-b9b6-75a6d1bfc690\tPset_SwitchingDeviceTypeRelay.NominalHeight\tLENGTH\t\t671\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\td5c57d17-0bbe-4502-9039-b4bb1526427a\tPset_SwitchingDeviceTypeRelay.NominalLength\tLENGTH\t\t671\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t825df3a0-56c1-459a-8680-698ff8074c86\tPset_SwitchingDeviceTypeRelay.NominalWidth\tLENGTH\t\t671\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t5914ab87-d52e-44c1-bfda-fe2499e0c5dd\tPset_SwitchingDeviceTypeRelay.PullInVoltage\tNUMBER\t\t671\t1\tIfcElectricVoltageMeasure\t1\r\nPARAM\t4a72c236-b91b-461b-b8df-64bc5fcf9cf9\tPset_SwitchingDeviceTypeRelay.ReleaseVoltage\tNUMBER\t\t671\t1\tIfcElectricVoltageMeasure\t1\r\nPARAM\tee5d7c45-ff88-4400-9c3a-696cfc2aa93f\tPset_SwitchingDeviceTypeRelay.Voltage\tMULTILINETEXT\t\t671\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t672\tPset_SwitchingDeviceTypeSelectorSwitch\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1fc7b52e-4bd0-4a77-a3d3-3bc98859fc9a\tPset_SwitchingDeviceTypeSelectorSwitch.NominalCurrent\tNUMBER\t\t672\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t1696c64a-fde2-456f-9785-2e1c42d5d14a\tPset_SwitchingDeviceTypeSelectorSwitch.NominalPower\tNUMBER\t\t672\t1\tIfcPowerMeasure\t1\r\nPARAM\t00aa38bd-5ea7-42ad-af0b-39d6a99c60aa\tPset_SwitchingDeviceTypeSelectorSwitch.NumberOfPhases\tINTEGER\t\t672\t1\tIfcCountMeasure\t1\r\nPARAM\t69a5d74e-7e49-4794-ab9f-1d80ab6dee89\tPset_SwitchingDeviceTypeSelectorSwitch.RatedFrequency\tNUMBER\t\t672\t1\tIfcFrequencyMeasure\t1\r\nPARAM\te2774f63-8490-48de-a23a-02e68ceb9c34\tPset_SwitchingDeviceTypeSelectorSwitch.ReferenceEnvironmentTemperature\tMULTILINETEXT\t\t672\t1\tPropertyBoundedValue\t1\r\nPARAM\t63966000-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeSelectorSwitch.SelectorType\tTEXT\t\t672\t1\tPEnum_SwitchingDeviceDimmerSwitchType\t1\r\nPARAM\t80cb2e80-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeSelectorSwitch.SwitchActivation\tTEXT\t\t672\t1\tPEnum_SwitchActivation\t1\r\nPARAM\t701ab880-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeSelectorSwitch.SwitchUsage\tTEXT\t\t672\t1\tPEnum_SwitchUsage\t1\r\n#\r\nGROUP\t673\tPset_SwitchingDeviceTypeStarter\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t99d3df80-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeStarter.StarterType\tTEXT\t\t673\t1\tPEnum_StarterType\t1\r\n#\r\nGROUP\t674\tPset_SwitchingDeviceTypeSwitchDisconnector\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0efd4e43-16e2-4682-990c-0b78cd08ca44\tPset_SwitchingDeviceTypeSwitchDisconnector.HasVisualIndication\tYESNO\t\t674\t1\tIfcBoolean\t1\r\nPARAM\tc5ef6080-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeSwitchDisconnector.LoadDisconnectionType\tTEXT\t\t674\t1\tPEnum_LoadDisconnectionType\t1\r\nPARAM\tb3752700-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeSwitchDisconnector.SwitchDisconnectorType\tTEXT\t\t674\t1\tPEnum_SwitchDisconnectorType\t1\r\n#\r\nGROUP\t675\tPset_SwitchingDeviceTypeToggleSwitch\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tdf0b5831-dd4c-40c7-b3b3-6de4b38c311c\tPset_SwitchingDeviceTypeToggleSwitch.IsIlluminated\tYESNO\t\t675\t1\tIfcBoolean\t1\r\nPARAM\tdb279ca8-2c04-41e8-a1ae-164677c1c667\tPset_SwitchingDeviceTypeToggleSwitch.Legend\tTEXT\t\t675\t1\tIfcLabel\t1\r\nPARAM\tfdf6a380-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeToggleSwitch.SwitchActivation\tTEXT\t\t675\t1\tPEnum_SwitchActivation\t1\r\nPARAM\teddec400-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeToggleSwitch.SwitchUsage\tTEXT\t\t675\t1\tPEnum_SwitchUsage\t1\r\nPARAM\td9023080-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeToggleSwitch.ToggleSwitchType\tTEXT\t\t675\t1\tPEnum_SwitchingDeviceToggleSwitchType\t1\r\n#\r\nGROUP\t676\tPset_SymmetricPairCable\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0a9d7298-7ac7-4da4-9cb5-ce7bba79b2ff\tPset_SymmetricPairCable.NumberOfTwistedPairs\tINTEGER\t\t676\t1\tIfcCountMeasure\t1\r\nPARAM\tc17e1d3b-7ec1-4b03-ac72-3ff44edcca91\tPset_SymmetricPairCable.NumberOfUntwistedPairs\tINTEGER\t\t676\t1\tIfcCountMeasure\t1\r\n#\r\nGROUP\t677\tPset_SystemFurnitureElementTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t35655000-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeCommon.Finishing\tTEXT\t\t677\t1\tIfcLabel\t1\r\nPARAM\t1d8dcc00-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeCommon.GroupCode\tTEXT\t\t677\t1\tIfcIdentifier\t1\r\nPARAM\t16ff5480-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeCommon.IsUsed\tYESNO\t\t677\t1\tIfcBoolean\t1\r\nPARAM\t2d0d1500-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeCommon.NominalHeight\tLENGTH\t\t677\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t24b4da00-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeCommon.NominalWidth\tLENGTH\t\t677\t1\tIfcNonNegativeLengthMeasure\t1\r\n#\r\nGROUP\t678\tPset_SystemFurnitureElementTypePanel\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4a41e380-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypePanel.FurniturePanelType\tTEXT\t\t678\t1\tPEnum_FurniturePanelType\t1\r\nPARAM\t43b36c00-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypePanel.HasOpening\tYESNO\t\t678\t1\tIfcBoolean\t1\r\nPARAM\t5e85e080-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypePanel.NominalThickness\tLENGTH\t\t678\t1\tIfcNonNegativeLengthMeasure\t1\r\n#\r\nGROUP\t679\tPset_SystemFurnitureElementTypeSubrack\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb0f868e1-3c4d-4849-bbc3-07ec18f907fb\tPset_SystemFurnitureElementTypeSubrack.NumberOfOccupiedUnits\tINTEGER\t\t679\t1\tIfcCountMeasure\t1\r\nPARAM\tdd97a197-28ea-4b2c-b746-4d893c46f0a0\tPset_SystemFurnitureElementTypeSubrack.NumberOfSlots\tINTEGER\t\t679\t1\tIfcCountMeasure\t1\r\nPARAM\tfb905259-b60d-44d7-9462-5d89ab1513dd\tPset_SystemFurnitureElementTypeSubrack.NumberOfUnits\tINTEGER\t\t679\t1\tIfcCountMeasure\t1\r\n#\r\nGROUP\t680\tPset_SystemFurnitureElementTypeWorkSurface\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t807f6300-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeWorkSurface.HangingHeight\tLENGTH\t\t680\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t8a08cb00-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeWorkSurface.NominalThickness\tLENGTH\t\t680\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t92610600-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeWorkSurface.ShapeDescription\tTEXT\t\t680\t1\tIfcLabel\t1\r\nPARAM\t73fb0a80-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeWorkSurface.SupportType\tTEXT\t\t680\t1\tPEnum_FurniturePanelType\t1\r\nPARAM\t6cd3fc80-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeWorkSurface.UsePurpose\tTEXT\t\t680\t1\tIfcLabel\t1\r\n#\r\nGROUP\t681\tPset_TankOccurrence\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tad337a80-d20f-11e1-8000-00215ad4efdf\tPset_TankOccurrence.HasLadder\tYESNO\t\t681\t1\tIfcBoolean\t1\r\nPARAM\tb3c1f200-d20f-11e1-8000-00215ad4efdf\tPset_TankOccurrence.HasVisualIndicator\tYESNO\t\t681\t1\tIfcBoolean\t1\r\nPARAM\ta0af2200-d20f-11e1-8000-00215ad4efdf\tPset_TankOccurrence.TankComposition\tTEXT\t\t681\t1\tPEnum_TankComposition\t1\r\n#\r\nGROUP\t682\tPset_TankPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8fa541df-39a0-4896-9706-7a0165b4dd83\tPset_TankPHistory.Level\tMULTILINETEXT\t\t682\t1\tIfcTimeSeries\t1\r\nPARAM\t4f41ecc2-4f1b-4dc0-981c-a475bd7927d0\tPset_TankPHistory.Pressure\tNUMBER\t\t682\t1\tIfcPressureMeasure\t1\r\nPARAM\t7be8fc90-c36f-4ab3-9132-6f58dc7ec77c\tPset_TankPHistory.Temperature\tNUMBER\t\t682\t1\tIfcThermodynamicTemperatureMeasure\t1\r\n#\r\nGROUP\t683\tPset_TankTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td2c08400-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.AccessType\tTEXT\t\t683\t1\tPEnum_TankAccessType\t1\r\nPARAM\t0ac7c700-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.EffectiveCapacity\tVOLUME\t\t683\t1\tIfcVolumeMeasure\t1\r\nPARAM\t1f0bc400-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.EndShapeType\tTEXT\t\t683\t1\tPEnum_EndShapeType\t1\r\nPARAM\t2cc14980-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.FirstCurvatureRadius\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t290da519-48fe-4c9e-ba6f-cb26e41d3ae8\tPset_TankTypeCommon.Material\tMULTILINETEXT\t\t683\t1\tIfcMaterial\t1\r\nPARAM\t509267e8-33c0-493e-96ce-d9cd3039dce1\tPset_TankTypeCommon.MaterialThickness\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t069ba980-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.NominalCapacity\tVOLUME\t\t683\t1\tIfcVolumeMeasure\t1\r\nPARAM\tfedc0500-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.NominalDepth\tLENGTH\t\t683\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\teff55280-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.NominalLengthOrDiameter\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf7b4f700-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.NominalWidthOrDiameter\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3cd92900-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.NumberOfSections\tINTEGER\t\t683\t1\tIfcCountMeasure\t1\r\nPARAM\t0f8c7b00-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.OperatingWeight\tNUMBER\t\t683\t1\tIfcMassMeasure\t1\r\nPARAM\t14512f00-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.PatternType\tTEXT\t\t683\t1\tPEnum_TankPatternType\t1\r\nPARAM\tc0464a80-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.Reference\tTEXT\t\t683\t1\tIfcIdentifier\t1\r\nPARAM\t3480ee00-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.SecondCurvatureRadius\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc5a39500-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.Status\tTEXT\t\t683\t1\tPEnum_ElementStatus\t1\r\nPARAM\te0760980-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.StorageType\tTEXT\t\t683\t1\tPEnum_TankStorageType\t1\r\nPARAM\tac5b160f-d64a-4548-b105-d0ebe65d246e\tPset_TankTypeCommon.TankNominalCapacity\tVOLUME\t\t683\t1\tIfcVolumeMeasure\t1\r\nPARAM\td7a336cd-c824-4b16-9ac6-9de8cf8ebc1c\tPset_TankTypeCommon.Type\tTEXT\t\t683\t1\tPEnum_TankType\t1\r\n#\r\nGROUP\t684\tPset_TankTypeExpansion\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t48c4eb00-d210-11e1-8000-00215ad4efdf\tPset_TankTypeExpansion.ChargePressure\tNUMBER\t\t684\t1\tIfcPressureMeasure\t1\r\nPARAM\t5a0df780-d210-11e1-8000-00215ad4efdf\tPset_TankTypeExpansion.PressureRegulatorSetting\tNUMBER\t\t684\t1\tIfcPressureMeasure\t1\r\nPARAM\t5f6b4200-d210-11e1-8000-00215ad4efdf\tPset_TankTypeExpansion.ReliefValveSetting\tNUMBER\t\t684\t1\tIfcPressureMeasure\t1\r\n#\r\nGROUP\t685\tPset_TankTypePreformed\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7873f300-d210-11e1-8000-00215ad4efdf\tPset_TankTypePreformed.EndShapeType\tTEXT\t\t685\t1\tPEnum_EndShapeType\t1\r\nPARAM\t89246900-d210-11e1-8000-00215ad4efdf\tPset_TankTypePreformed.FirstCurvatureRadius\tLENGTH\t\t685\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t6b570400-d210-11e1-8000-00215ad4efdf\tPset_TankTypePreformed.PatternType\tTEXT\t\t685\t1\tPEnum_TankPatternType\t1\r\nPARAM\t92add100-d210-11e1-8000-00215ad4efdf\tPset_TankTypePreformed.SecondCurvatureRadius\tLENGTH\t\t685\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t686\tPset_TankTypePressureVessel\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta2c5b080-d210-11e1-8000-00215ad4efdf\tPset_TankTypePressureVessel.ChargePressure\tNUMBER\t\t686\t1\tIfcPressureMeasure\t1\r\nPARAM\ta9ecbe80-d210-11e1-8000-00215ad4efdf\tPset_TankTypePressureVessel.PressureRegulatorSetting\tNUMBER\t\t686\t1\tIfcPressureMeasure\t1\r\nPARAM\tb07b3600-d210-11e1-8000-00215ad4efdf\tPset_TankTypePressureVessel.ReliefValveSetting\tNUMBER\t\t686\t1\tIfcPressureMeasure\t1\r\n#\r\nGROUP\t687\tPset_TankTypeSectional\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbd982500-d210-11e1-8000-00215ad4efdf\tPset_TankTypeSectional.NumberOfSections\tINTEGER\t\t687\t1\tIfcCountMeasure\t1\r\nPARAM\tc4269c80-d210-11e1-8000-00215ad4efdf\tPset_TankTypeSectional.SectionLength\tLENGTH\t\t687\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tcd176e00-d210-11e1-8000-00215ad4efdf\tPset_TankTypeSectional.SectionWidth\tLENGTH\t\t687\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t688\tPset_TelecomCableGeneral\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t694fbef1-9544-4318-9d14-f822457897a1\tPset_TelecomCableGeneral.Attenuation\tNUMBER\t\t688\t1\tIfcReal\t1\r\nPARAM\t7adf32e7-160f-4c6c-8cf8-111d424f65f2\tPset_TelecomCableGeneral.CableArmourType\tTEXT\t\t688\t1\tPEnum_CableArmourType\t1\r\nPARAM\tcd9bb321-7078-4b5e-a4ea-2a884b25413d\tPset_TelecomCableGeneral.CableFunctionType\tTEXT\t\t688\t1\tPEnum_CableFunctionType\t1\r\nPARAM\t81ff6d62-30a6-4859-989b-5f2ecdb44702\tPset_TelecomCableGeneral.FireRating\tTEXT\t\t688\t1\tIfcLabel\t1\r\nPARAM\ta0d1ac4b-2bbf-4816-aaef-903326e9e5d1\tPset_TelecomCableGeneral.IsFireResistant\tYESNO\t\t688\t1\tIfcBoolean\t1\r\nPARAM\t9f2e46d8-2340-4e3f-806e-cc303cda887c\tPset_TelecomCableGeneral.JacketColour\tTEXT\t\t688\t1\tIfcLabel\t1\r\nPARAM\ta4894916-9cd4-4629-9e2e-855785eeee48\tPset_TelecomCableGeneral.NominalDiameter\tLENGTH\t\t688\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t689\tPset_TendonAnchorCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb5971383-4774-4d1a-b5bc-124390a70bbc\tPset_TendonAnchorCommon.Reference\tTEXT\t\t689\t1\tIfcIdentifier\t1\r\nPARAM\t3a18c38e-e4b4-48f8-8098-819b3ff33013\tPset_TendonAnchorCommon.Status\tTEXT\t\t689\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t690\tPset_TendonCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t77759cd6-099e-4656-9c74-fe2dbd0605c0\tPset_TendonCommon.AnchorageSlip\tLENGTH\t\t690\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\taf2e2873-a344-40a4-a639-13f2b8958528\tPset_TendonCommon.FrictionCoefficient\tNUMBER\t\t690\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\te3ef2b0d-f418-42df-a5e3-f69de6adbd7f\tPset_TendonCommon.MinCurvatureRadius\tLENGTH\t\t690\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t0a226221-13c6-42ed-8538-929d572f6910\tPset_TendonCommon.NominalDiameter\tLENGTH\t\t690\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t394262a7-521b-4e97-a665-dc358cf7cdda\tPset_TendonCommon.PreStress\tNUMBER\t\t690\t1\tIfcPressureMeasure\t1\r\nPARAM\t76ffa86f-ceff-4260-a836-d0c072b7e32c\tPset_TendonCommon.Reference\tTEXT\t\t690\t1\tIfcIdentifier\t1\r\nPARAM\ta54972ba-690e-404d-b974-4a365cecd3b3\tPset_TendonCommon.SheathDiameter\tLENGTH\t\t690\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\taaf163da-0d95-48da-9eef-b0ef76abcde1\tPset_TendonCommon.Status\tTEXT\t\t690\t1\tPEnum_ElementStatus\t1\r\nPARAM\t885d4f56-9ff4-4e79-ba7b-8caf8e151367\tPset_TendonCommon.TensionForce\tNUMBER\t\t690\t1\tIfcForceMeasure\t1\r\n#\r\nGROUP\t691\tPset_ThermalLoad\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0406120f-622b-4d46-a9d2-b6df5d87ecff\tPset_ThermalLoad.ApplianceDiversity\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\te77405c6-7b18-42a9-bbfd-30e2d9ecd775\tPset_ThermalLoad.AppliancePercentLoadToRadiant\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tda828cbf-46cd-4e22-b1ba-e30cac4c01e4\tPset_ThermalLoad.InfiltrationDiversitySummer\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tec6e2761-66c3-4fe3-a45d-707cfa2b1871\tPset_ThermalLoad.InfiltrationDiversityWinter\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t65d6ee4b-b248-4e61-9401-3f6e26c552fe\tPset_ThermalLoad.LightingDiversity\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\teac6a40f-a68d-445b-abd8-2eddab20d648\tPset_ThermalLoad.LightingLoadIntensity\tNUMBER\t\t691\t1\tIfcHeatFluxDensityMeasure\t1\r\nPARAM\t96c7c031-4f84-453e-9eb7-9b309c3f0528\tPset_ThermalLoad.LightingPercentLoadToReturnAir\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t50bb171e-8fa3-4daa-a891-e25670ce5fb8\tPset_ThermalLoad.LoadSafetyFactor\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t2b2360cb-5b95-4d55-ad6f-09a3984596d6\tPset_ThermalLoad.OccupancyDiversity\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t996eb913-f6ff-46fa-9ef4-8b09ff8cca88\tPset_ThermalLoad.OutsideAirPerPerson\tNUMBER\t\t691\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t87aab719-21c8-44f6-90ef-0f7122f55619\tPset_ThermalLoad.ReceptacleLoadIntensity\tNUMBER\t\t691\t1\tIfcHeatFluxDensityMeasure\t1\r\nPARAM\tf2e47693-2d58-4d2d-a119-0f08b8dd650f\tPset_ThermalLoad.TotalCoolingLoad\tNUMBER\t\t691\t1\tIfcPowerMeasure\t1\r\nPARAM\tebd1764a-0fa0-47db-8075-eb2e69e93591\tPset_ThermalLoad.TotalHeatingLoad\tNUMBER\t\t691\t1\tIfcPowerMeasure\t1\r\n#\r\nGROUP\t692\tPset_ThermalLoadAggregate\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0059fd00-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.ApplianceDiversity\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tf33d0e00-d210-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.InfiltrationDiversitySummer\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tf9cb8580-d210-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.InfiltrationDiversityWinter\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\teae4d300-d210-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.LightingDiversity\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t064fde00-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.LoadSafetyFactor\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tdf91a780-d210-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.TotalCoolingLoad\tNUMBER\t\t692\t1\tIfcPowerMeasure\t1\r\nPARAM\te4eef200-d210-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.TotalHeatingLoad\tNUMBER\t\t692\t1\tIfcPowerMeasure\t1\r\n#\r\nGROUP\t693\tPset_ThermalLoadDesignCriteria\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2aabba80-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadDesignCriteria.AppliancePercentLoadToRadiant\tNUMBER\t\t693\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t313a3200-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadDesignCriteria.LightingLoadIntensity\tNUMBER\t\t693\t1\tIfcReal\t1\r\nPARAM\t37c8a980-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadDesignCriteria.LightingPercentLoadToReturnAir\tNUMBER\t\t693\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t18ca1780-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadDesignCriteria.OccupancyDiversity\tNUMBER\t\t693\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t1ebff880-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadDesignCriteria.OutsideAirPerPerson\tNUMBER\t\t693\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t24b5d980-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadDesignCriteria.ReceptacleLoadIntensity\tNUMBER\t\t693\t1\tIfcReal\t1\r\n#\r\nGROUP\t694\tPset_TicketProcessing\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1ee0639e-a3b5-4fbe-8f4e-9885eac2e44c\tPset_TicketProcessing.TicketProcessingTime\tNUMBER\t\t694\t1\tIfcTimeMeasure\t1\r\nPARAM\t30955c27-17e6-4e93-b75b-462f55627642\tPset_TicketProcessing.TicketStuckRatio\tNUMBER\t\t694\t1\tIfcRatioMeasure\t1\r\n#\r\nGROUP\t695\tPset_TicketVendingMachine\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2397d020-4287-419f-9bf9-ad275cf7c170\tPset_TicketVendingMachine.MoneyStuckRatio\tNUMBER\t\t695\t1\tIfcRatioMeasure\t1\r\nPARAM\t4156e1a3-9abb-4c5f-8dae-9438b30e6cce\tPset_TicketVendingMachine.PaymentMethod\tTEXT\t\t695\t1\tPEnum_PaymentMethod\t1\r\nPARAM\t5df3c6a2-9963-4511-92f3-7cf448c870f8\tPset_TicketVendingMachine.TicketProductionSpeed\tINTEGER\t\t695\t1\tIfcIntegerCountRateMeasure\t1\r\nPARAM\tee0c9f0f-7030-4e6f-a256-aff1f8a9e86d\tPset_TicketVendingMachine.TicketStuckRatio\tNUMBER\t\t695\t1\tIfcRatioMeasure\t1\r\nPARAM\t31664981-c94e-44d6-a441-011bfd0e6199\tPset_TicketVendingMachine.TicketVendingMachineType\tTEXT\t\t695\t1\tPEnum_TicketVendingMachineType\t1\r\nPARAM\td4e56077-f4e2-47e7-932b-9938d90ea547\tPset_TicketVendingMachine.VendingMachineUserInterface\tTEXT\t\t695\t1\tPEnum_VendingMachineUserInterface\t1\r\n#\r\nGROUP\t696\tPset_Tiling\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te01d117b-3976-446a-9aad-ac0e57456151\tPset_Tiling.Permeability\tNUMBER\t\t696\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\t495740ff-2794-4792-af03-c52ff3d4627d\tPset_Tiling.TileLength\tLENGTH\t\t696\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t37c09419-ecfd-4aea-a1e9-d1cf622a4d54\tPset_Tiling.TileWidth\tLENGTH\t\t696\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t697\tPset_Tolerance\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tfe22675c-6631-425d-8ebf-34b2ed0d462b\tPset_Tolerance.ElevationalFlatness\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tbc1efc4e-7956-4aa1-9ee1-9ac00d4ebad2\tPset_Tolerance.HorizontalFlatness\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t122b7dc3-ae85-4433-a33b-6218b607a02c\tPset_Tolerance.HorizontalOrthogonality\tNUMBER\t\t697\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\tecac4531-38ab-4bfe-8713-5e180d411a03\tPset_Tolerance.HorizontalStraightness\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t167addb9-7d7a-4e06-88c3-53dd200a65f4\tPset_Tolerance.HorizontalTolerance\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t0f59fc7a-983b-4fb9-a41a-60e575484220\tPset_Tolerance.OrthogonalOrthogonality\tNUMBER\t\t697\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\te3875179-0044-4e0f-941b-f358a499934f\tPset_Tolerance.OrthogonalStraightness\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t2227a96c-4110-484f-a138-41913f10ebec\tPset_Tolerance.OrthogonalTolerance\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td93e8f48-faf5-4d6b-b361-28d1a456d754\tPset_Tolerance.OverallOrthogonality\tNUMBER\t\t697\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t280ba47f-5926-45f7-8925-07cee0137580\tPset_Tolerance.OverallStraightness\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t5cbfe1ba-9e65-4c2e-9301-94f354788d1c\tPset_Tolerance.OverallTolerance\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tfd7bc1b3-1027-43c9-a7d7-c484ddeb189d\tPset_Tolerance.PlanarFlatness\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf9f1370d-d5de-4ad0-b476-2223d74e3a9e\tPset_Tolerance.SideFlatness\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t67203480-edaf-47d7-aa8a-0143e3daa24c\tPset_Tolerance.ToleranceBasis\tTEXT\t\t697\t1\tPEnum_ToleranceBasis\t1\r\nPARAM\tbb1726e7-12c6-4921-b164-33367b161142\tPset_Tolerance.ToleranceDescription\tTEXT\t\t697\t1\tIfcText\t1\r\nPARAM\t7819989c-6d8b-44d9-830c-a9a5d20c0f80\tPset_Tolerance.VerticalOrthogonality\tNUMBER\t\t697\t1\tIfcPlaneAngleMeasure\t1\r\nPARAM\t0f866616-1921-4694-8c4f-ba7dde23af3b\tPset_Tolerance.VerticalStraightness\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tbc448aa3-227c-4172-b140-439fae87e446\tPset_Tolerance.VerticalTolerance\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t698\tPset_TrackBase\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t393255c9-d452-4fb0-badb-941c7bb69869\tPset_TrackBase.IsSurfaceGalling\tYESNO\t\t698\t1\tIfcBoolean\t1\r\nPARAM\t7c3f80fe-4130-47df-a32c-b0e96517a140\tPset_TrackBase.SurfaceGallingArea\tAREA\t\t698\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t699\tPset_TrackElementOccurrenceSleeper\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7a267d97-dc38-4888-ae94-8aa322400805\tPset_TrackElementOccurrenceSleeper.HasSpecialEquipment\tYESNO\t\t699\t1\tIfcBoolean\t1\r\nPARAM\tc6cffcb8-87bd-4d75-87b3-177619e25a14\tPset_TrackElementOccurrenceSleeper.IsContaminatedSleeper\tYESNO\t\t699\t1\tIfcBoolean\t1\r\nPARAM\t610f38b4-60c3-4cdd-b826-a715e22e8628\tPset_TrackElementOccurrenceSleeper.SequenceInTrackPanel\tINTEGER\t\t699\t1\tIfcInteger\t1\r\nPARAM\t7bc7c08a-636f-4ff2-904d-358e6d45fcac\tPset_TrackElementOccurrenceSleeper.UnderSleeperPadStiffness\tTEXT\t\t699\t1\tPEnum_UnderSleeperPadStiffness\t1\r\n#\r\nGROUP\t700\tPset_TrackElementPHistoryDerailer\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf7dd95a2-b8a6-4279-a280-0dc497ace5f4\tPset_TrackElementPHistoryDerailer.IsDerailing\tMULTILINETEXT\t\t700\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t701\tPset_TrackElementTypeDerailer\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8be5b3c9-f145-4722-bba9-1a69bbe84181\tPset_TrackElementTypeDerailer.AppliedLineLoad\tNUMBER\t\t701\t1\tIfcMassPerLengthMeasure\t1\r\nPARAM\tb76c5ef8-6026-443e-927c-17e1aa24897a\tPset_TrackElementTypeDerailer.DerailmentHeight\tLENGTH\t\t701\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb6b3bacd-ab28-44ef-8cc8-83dc440e650c\tPset_TrackElementTypeDerailer.DerailmentMaximumSpeedLimit\tNUMBER\t\t701\t1\tIfcLinearVelocityMeasure\t1\r\nPARAM\t6a08f9b3-318e-4fba-9ad8-ecbbde5a56c5\tPset_TrackElementTypeDerailer.DerailmentWheelDiameter\tLENGTH\t\t701\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t702\tPset_TrackElementTypeSleeper\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3cae96aa-a06e-4ee2-a526-aa0742560e09\tPset_TrackElementTypeSleeper.FasteningType\tTEXT\t\t702\t1\tIfcLabel\t1\r\nPARAM\t17f3a2ce-a21d-450c-baab-71fbacae389b\tPset_TrackElementTypeSleeper.HollowSleeperUsage\tTEXT\t\t702\t1\tIfcLabel\t1\r\nPARAM\t7dea2b13-6326-4854-bb82-e0434e0c9c3a\tPset_TrackElementTypeSleeper.InstalledCondition\tTEXT\t\t702\t1\tPEnum_InstalledCondition\t1\r\nPARAM\te1f25ee7-9f71-41fe-b255-b50cdf36c09b\tPset_TrackElementTypeSleeper.IsElectricallyInsulated\tYESNO\t\t702\t1\tIfcBoolean\t1\r\nPARAM\tc96badd5-dbd0-4ebe-9cb3-2e678db095d9\tPset_TrackElementTypeSleeper.IsHollowSleeper\tYESNO\t\t702\t1\tIfcBoolean\t1\r\nPARAM\tddebb956-f60c-4e71-91f7-938671ba0d8c\tPset_TrackElementTypeSleeper.NumberOfTrackCenters\tINTEGER\t\t702\t1\tIfcCountMeasure\t1\r\nPARAM\t0852dc3d-ea8f-442a-8857-e0503bad2e93\tPset_TrackElementTypeSleeper.SleeperType\tTEXT\t\t702\t1\tPEnum_SleeperType\t1\r\nPARAM\t6fbf59bd-a61e-4181-b9ca-a1f011ef465f\tPset_TrackElementTypeSleeper.TechnicalStandard\tMULTILINETEXT\t\t702\t1\tIfcExternalReference\t1\r\n#\r\nGROUP\t703\tPset_TractionPowerSystem\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\teec1c820-ff83-4d6d-9a13-485aaa03fe7a\tPset_TractionPowerSystem.ElectrificationType\tTEXT\t\t703\t1\tPEnum_ElectrificationType\t1\r\nPARAM\t57b2672e-349c-4b5e-86b5-2c1115e7a380\tPset_TractionPowerSystem.NominalVoltage\tNUMBER\t\t703\t1\tIfcElectricVoltageMeasure\t1\r\nPARAM\t08a67a74-89a6-4ce5-9fab-b8209ed8c00e\tPset_TractionPowerSystem.PowerSupplyMode\tTEXT\t\t703\t1\tPEnum_PowerSupplyMode\t1\r\nPARAM\t23f6af24-68f9-4efc-a232-738a9b0fcd8f\tPset_TractionPowerSystem.RatedFrequency\tNUMBER\t\t703\t1\tIfcFrequencyMeasure\t1\r\n#\r\nGROUP\t704\tPset_TrafficCalmingDeviceCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t921629e6-713f-4167-b627-aa36a8457131\tPset_TrafficCalmingDeviceCommon.TypeDesignation\tTEXT\t\t704\t1\tIfcLabel\t1\r\n#\r\nGROUP\t705\tPset_TransformerTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta438b8c2-7a9c-4e9d-9976-e29609f23d3c\tPset_TransformerTypeCommon.EfficiencyCurve\tMULTILINETEXT\t\t705\t1\tPropertyTableValue\t1\r\nPARAM\tac9be380-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.ImaginaryImpedanceRatio\tNUMBER\t\t705\t1\tIfcRatioMeasure\t1\r\nPARAM\td228ed00-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.IsNeutralPrimaryTerminalAvailable\tYESNO\t\t705\t1\tIfcBoolean\t1\r\nPARAM\td94ffb00-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.IsNeutralSecondaryTerminalAvailable\tYESNO\t\t705\t1\tIfcBoolean\t1\r\nPARAM\t8f671500-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.MaximumApparentPower\tNUMBER\t\t705\t1\tIfcPowerMeasure\t1\r\nPARAM\t837b5300-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.PrimaryApparentPower\tNUMBER\t\t705\t1\tIfcPowerMeasure\t1\r\nPARAM\t6a72a200-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.PrimaryCurrent\tNUMBER\t\t705\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t778f9100-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.PrimaryFrequency\tNUMBER\t\t705\t1\tIfcFrequencyMeasure\t1\r\nPARAM\t5dee4980-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.PrimaryVoltage\tNUMBER\t\t705\t1\tIfcElectricVoltageMeasure\t1\r\nPARAM\t57cfcbd7-f9f6-45e7-b359-f754cd1030db\tPset_TransformerTypeCommon.RadiativeFraction\tNUMBER\t\t705\t1\tIfcNormalisedRatioMeasure\t1\r\nPARAM\ta6a60280-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.RealImpedanceRatio\tNUMBER\t\t705\t1\tIfcRatioMeasure\t1\r\nPARAM\t444d0200-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.Reference\tTEXT\t\t705\t1\tIfcIdentifier\t1\r\nPARAM\t89713400-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.SecondaryApparentPower\tNUMBER\t\t705\t1\tIfcPowerMeasure\t1\r\nPARAM\t71011980-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.SecondaryCurrent\tNUMBER\t\t705\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t94c45f80-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.SecondaryCurrentType\tTEXT\t\t705\t1\tPEnum_SecondaryCurrentType\t1\r\nPARAM\t7e1e0880-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.SecondaryFrequency\tNUMBER\t\t705\t1\tIfcFrequencyMeasure\t1\r\nPARAM\t634b9400-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.SecondaryVoltage\tNUMBER\t\t705\t1\tIfcElectricVoltageMeasure\t1\r\nPARAM\ta0b02180-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.ShortCircuitVoltage\tMULTILINETEXT\t\t705\t1\tIfcComplexNumber\t1\r\nPARAM\t4b741000-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.Status\tTEXT\t\t705\t1\tPEnum_ElementStatus\t1\r\nPARAM\t95580b08-0033-4fb1-80f4-ce1d5048a707\tPset_TransformerTypeCommon.TransformerVectorGroup\tTEXT\t\t705\t1\tPEnum_TransformerVectorGroup\t1\r\n#\r\nGROUP\t706\tPset_TransitionSectionCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3032435f-8b1f-4c02-b8bc-96c48fe95e96\tPset_TransitionSectionCommon.NominalLength\tLENGTH\t\t706\t1\tIfcNonNegativeLengthMeasure\t1\r\n#\r\nGROUP\t707\tPset_TransportElementCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t000e3180-d212-11e1-8000-00215ad4efdf\tPset_TransportElementCommon.CapacityPeople\tINTEGER\t\t707\t1\tIfcCountMeasure\t1\r\nPARAM\t056b7c00-d212-11e1-8000-00215ad4efdf\tPset_TransportElementCommon.CapacityWeight\tNUMBER\t\t707\t1\tIfcMassMeasure\t1\r\nPARAM\t0c928a00-d212-11e1-8000-00215ad4efdf\tPset_TransportElementCommon.FireExit\tYESNO\t\t707\t1\tIfcBoolean\t1\r\nPARAM\te967da80-d211-11e1-8000-00215ad4efdf\tPset_TransportElementCommon.Reference\tTEXT\t\t707\t1\tIfcIdentifier\t1\r\nPARAM\teff65200-d211-11e1-8000-00215ad4efdf\tPset_TransportElementCommon.Status\tTEXT\t\t707\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t708\tPset_TransportElementElevator\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t29c75880-d212-11e1-8000-00215ad4efdf\tPset_TransportElementElevator.ClearDepth\tLENGTH\t\t708\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t321f9380-d212-11e1-8000-00215ad4efdf\tPset_TransportElementElevator.ClearHeight\tLENGTH\t\t708\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t20d68700-d212-11e1-8000-00215ad4efdf\tPset_TransportElementElevator.ClearWidth\tLENGTH\t\t708\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t1a480f80-d212-11e1-8000-00215ad4efdf\tPset_TransportElementElevator.FireFightingLift\tYESNO\t\t708\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t709\tPset_TransportEquipmentOTN\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te7533440-aa54-4d47-b63b-32d84ca341ce\tPset_TransportEquipmentOTN.ChromaticDispersionTolerance\tNUMBER\t\t709\t1\tIfcReal\t1\r\nPARAM\t1392767b-7d0b-4c2b-aa0f-0e49d3d33d9b\tPset_TransportEquipmentOTN.EquipmentCapacity\tINTEGER\t\t709\t1\tIfcIntegerCountRateMeasure\t1\r\nPARAM\t4cddf633-5e05-443e-a937-fe6fa823ed65\tPset_TransportEquipmentOTN.MinimumOpticalSignalToNoiseRatio\tNUMBER\t\t709\t1\tIfcRatioMeasure\t1\r\nPARAM\t850b4974-93db-477b-be9a-d9fbcc58126d\tPset_TransportEquipmentOTN.PolarizationModeDispersionTolerance\tNUMBER\t\t709\t1\tIfcTimeMeasure\t1\r\nPARAM\t7002213f-5d54-4b40-8d92-68ce3f6f93de\tPset_TransportEquipmentOTN.SingleChannelAveragePower\tNUMBER\t\t709\t1\tIfcPowerMeasure\t1\r\nPARAM\t7beeb907-80d7-4ec4-b1ca-4b425ae75478\tPset_TransportEquipmentOTN.SingleChannelPower\tMULTILINETEXT\t\t709\t1\tPropertyBoundedValue\t1\r\nPARAM\t61a5268f-37b5-4e9d-9bd0-0b2e42b2dc38\tPset_TransportEquipmentOTN.SingleWaveTransmissionRate\tNUMBER\t\t709\t1\tIfcFrequencyMeasure\t1\r\n#\r\nGROUP\t710\tPset_TrenchExcavationCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t9f4b0379-a5c3-4a94-a8e6-fcb1b3912256\tPset_TrenchExcavationCommon.NominalDepth\tLENGTH\t\t710\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t32b3a853-f42a-4fab-9696-306974c9b207\tPset_TrenchExcavationCommon.NominalWidth\tLENGTH\t\t710\t1\tIfcNonNegativeLengthMeasure\t1\r\n#\r\nGROUP\t711\tPset_TubeBundleTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t757a0200-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.FoulingFactor\tNUMBER\t\t711\t1\tIfcThermalResistanceMeasure\t1\r\nPARAM\tb8d47080-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.HasTurbulator\tYESNO\t\t711\t1\tIfcBoolean\t1\r\nPARAM\ta78b6400-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.HorizontalSpacing\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t672be600-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.InLineRowSpacing\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9f332900-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.InsideDiameter\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t80349700-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.Length\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t39dee270-b6c7-4be8-afa7-dd9b432ff013\tPset_TubeBundleTypeCommon.Material\tMULTILINETEXT\t\t711\t1\tIfcMaterial\t1\r\nPARAM\t8e82b300-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.NominalDiameter\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t701cb780-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.NumberOfCircuits\tINTEGER\t\t711\t1\tIfcCountMeasure\t1\r\nPARAM\t58453380-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.NumberOfRows\tINTEGER\t\t711\t1\tIfcCountMeasure\t1\r\nPARAM\t96daee00-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.OutsideDiameter\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t42377300-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.Reference\tTEXT\t\t711\t1\tIfcIdentifier\t1\r\nPARAM\t5ed3ab00-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.StaggeredRowSpacing\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t48c5ea80-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.Status\tTEXT\t\t711\t1\tPEnum_ElementStatus\t1\r\nPARAM\t7ad74c80-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.ThermalConductivity\tNUMBER\t\t711\t1\tIfcThermalConductivityMeasure\t1\r\nPARAM\tb07c3580-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.VerticalSpacing\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t89256880-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.Volume\tVOLUME\t\t711\t1\tIfcVolumeMeasure\t1\r\n#\r\nGROUP\t712\tPset_TubeBundleTypeFinned\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf33e0d80-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.Diameter\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tfc2edf00-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.FinCorrugatedType\tTEXT\t\t712\t1\tIfcLabel\t1\r\nPARAM\t0355ed00-d213-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.HasCoating\tYESNO\t\t712\t1\tIfcBoolean\t1\r\nPARAM\te9b4a580-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.Height\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te15c6a80-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.Length\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf2a92243-5915-4384-8be7-40590b579e48\tPset_TubeBundleTypeFinned.Material\tMULTILINETEXT\t\t712\t1\tIfcMaterial\t1\r\nPARAM\tc8ec5000-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.Spacing\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tdb668980-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.ThermalConductivity\tNUMBER\t\t712\t1\tIfcThermalConductivityMeasure\t1\r\nPARAM\td1dd2180-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.Thickness\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t713\tPset_Uncertainty\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8803b541-878a-4ca7-9c25-d1986cff83d6\tPset_Uncertainty.HorizontalUncertainty\tLENGTH\t\t713\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\taf065fab-ea56-4544-99fc-d5e0fa7b32ad\tPset_Uncertainty.LinearUncertainty\tLENGTH\t\t713\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\td953d39d-f665-4dca-9be3-768f8ab91420\tPset_Uncertainty.OrthogonalUncertainty\tLENGTH\t\t713\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t2b577f9e-06cf-4ef7-8ac3-44a5d9e6c140\tPset_Uncertainty.UncertaintyBasis\tTEXT\t\t713\t1\tPEnum_UncertaintyBasis\t1\r\nPARAM\t59c638e5-30a0-4389-a292-4d4284be01e3\tPset_Uncertainty.UncertaintyDescription\tTEXT\t\t713\t1\tIfcText\t1\r\nPARAM\tee7cdcf0-27c3-43a5-a399-632161213578\tPset_Uncertainty.VerticalUncertainty\tLENGTH\t\t713\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t714\tPset_UnitaryControlElementBaseStationController\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\taa296576-e1db-4edc-80af-e77bbcc9d462\tPset_UnitaryControlElementBaseStationController.NumberOfInterfaces\tMULTILINETEXT\t\t714\t1\tPropertyTableValue\t1\r\nPARAM\t99e4df9a-5787-4430-b2c8-7d50d0727b8e\tPset_UnitaryControlElementBaseStationController.NumberOfManagedBTSs\tINTEGER\t\t714\t1\tIfcCountMeasure\t1\r\nPARAM\td005dc24-516a-4741-b570-cbcf0bd27088\tPset_UnitaryControlElementBaseStationController.NumberOfManagedCarriers\tINTEGER\t\t714\t1\tIfcCountMeasure\t1\r\n#\r\nGROUP\t715\tPset_UnitaryControlElementPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t17015380-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementPHistory.Fan\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\r\nPARAM\t136dcc80-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementPHistory.Mode\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\r\nPARAM\t88d5b643-e9d2-44d1-bc25-7f7692f40c71\tPset_UnitaryControlElementPHistory.OperationModeHistory\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\r\nPARAM\t1a94da80-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementPHistory.SetPoint\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\r\nPARAM\t1072dc00-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementPHistory.Temperature\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t716\tPset_UnitaryControlElementTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3ac49980-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementTypeCommon.Mode\tMULTILINETEXT\t\t716\t1\tPropertyTableValue\t1\r\nPARAM\ted7f731d-a664-441d-b358-5a8372615318\tPset_UnitaryControlElementTypeCommon.OperationMode\tMULTILINETEXT\t\t716\t1\tPropertyTableValue\t1\r\nPARAM\t241e4280-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementTypeCommon.Reference\tTEXT\t\t716\t1\tIfcIdentifier\t1\r\nPARAM\t2a142380-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementTypeCommon.Status\tTEXT\t\t716\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t717\tPset_UnitaryControlElementTypeControlPanel\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t86d34d3c-1be3-4c8f-bc7d-f0fe536373cb\tPset_UnitaryControlElementTypeControlPanel.NominalCurrent\tNUMBER\t\t717\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\tb8f4d796-1fbe-43c1-9052-af5700c18289\tPset_UnitaryControlElementTypeControlPanel.NominalPower\tNUMBER\t\t717\t1\tIfcPowerMeasure\t1\r\nPARAM\t9b8034a2-59a9-401a-9095-95f1323a2aa5\tPset_UnitaryControlElementTypeControlPanel.RatedVoltage\tMULTILINETEXT\t\t717\t1\tPropertyBoundedValue\t1\r\nPARAM\t18f921ac-e3fb-4480-8052-38bacf4fa9ef\tPset_UnitaryControlElementTypeControlPanel.ReferenceAirRelativeHumidity\tMULTILINETEXT\t\t717\t1\tPropertyBoundedValue\t1\r\nPARAM\t34055084-542a-455d-aa6a-e1e1f6a0021c\tPset_UnitaryControlElementTypeControlPanel.ReferenceEnvironmentTemperature\tMULTILINETEXT\t\t717\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t718\tPset_UnitaryControlElementTypeIndicatorPanel\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta214298b-c8bc-4c2d-91e0-2d20124d29f8\tPset_UnitaryControlElementTypeIndicatorPanel.Application\tTEXT\t\t718\t1\tPEnum_UnitaryControlElementApplication\t1\r\nPARAM\td2de3947-00e2-4541-9d17-8fb48b642f73\tPset_UnitaryControlElementTypeIndicatorPanel.UnitaryApplication\tTEXT\t\t718\t1\tPEnum_UnitaryControlElementApplication\t1\r\n#\r\nGROUP\t719\tPset_UnitaryControlElementTypeThermostat\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t41d7fa5a-1d4b-4dbf-9733-687435d62493\tPset_UnitaryControlElementTypeThermostat.TemperatureSetPoint\tMULTILINETEXT\t\t719\t1\tPropertyBoundedValue\t1\r\n#\r\nGROUP\t720\tPset_UnitaryEquipmentTypeAirConditioningUnit\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t93943200-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.CondenserEnteringTemperature\tNUMBER\t\t720\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t8d9e5100-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.CondenserFlowrate\tNUMBER\t\t720\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t9b53d680-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.CondenserLeavingTemperature\tNUMBER\t\t720\t1\tIfcThermodynamicTemperatureMeasure\t1\r\nPARAM\t7bbcae00-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.CoolingEfficiency\tNUMBER\t\t720\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t824b2580-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.HeatingCapacity\tNUMBER\t\t720\t1\tIfcPowerMeasure\t1\r\nPARAM\t88410680-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.HeatingEfficiency\tNUMBER\t\t720\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\t75c6cd00-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.LatentCoolingCapacity\tNUMBER\t\t720\t1\tIfcPowerMeasure\t1\r\nPARAM\ta149b780-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.OutsideAirFlowrate\tNUMBER\t\t720\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\t5a5bc200-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.SensibleCoolingCapacity\tNUMBER\t\t720\t1\tIfcPowerMeasure\t1\r\n#\r\nGROUP\t721\tPset_UnitaryEquipmentTypeAirHandler\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tadce1000-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirHandler.AirHandlerConstruction\tTEXT\t\t721\t1\tPEnum_AirHandlerConstruction\t1\r\nPARAM\tbaeaff00-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirHandler.AirHandlerFanCoilArrangement\tTEXT\t\t721\t1\tPEnum_AirHandlerFanCoilArrangement\t1\r\nPARAM\tc6d6c100-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirHandler.DualDeck\tYESNO\t\t721\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t722\tPset_UnitaryEquipmentTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td2c28300-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeCommon.Reference\tTEXT\t\t722\t1\tIfcIdentifier\t1\r\nPARAM\td950fa80-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeCommon.Status\tTEXT\t\t722\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t723\tPset_UtilityConsumption\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3adb8501-10de-47f0-8de0-4c8add8eb5f5\tPset_UtilityConsumption.Electricity\tTEXT\t\t723\t1\tIfcLabel\t1\r\nPARAM\t03d13a50-42c5-432a-b41c-f34c0229b59f\tPset_UtilityConsumption.Fuel\tTEXT\t\t723\t1\tIfcLabel\t1\r\nPARAM\te22534ca-1923-43e3-b914-d07c0f1d6b20\tPset_UtilityConsumption.Heat\tTEXT\t\t723\t1\tIfcLabel\t1\r\nPARAM\t51272df6-8346-4d7a-b6c6-fe6d1045947f\tPset_UtilityConsumption.Steam\tTEXT\t\t723\t1\tIfcLabel\t1\r\nPARAM\t3a711cff-0212-4ca2-9a60-da08db6d9e4c\tPset_UtilityConsumption.Water\tTEXT\t\t723\t1\tIfcLabel\t1\r\n#\r\nGROUP\t724\tPset_UtilityConsumptionPHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf1c11500-d213-11e1-8000-00215ad4efdf\tPset_UtilityConsumptionPHistory.Electricity\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\r\nPARAM\tf7b6f600-d213-11e1-8000-00215ad4efdf\tPset_UtilityConsumptionPHistory.Fuel\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\r\nPARAM\teec62480-d213-11e1-8000-00215ad4efdf\tPset_UtilityConsumptionPHistory.Heat\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\r\nPARAM\tfab1e680-d213-11e1-8000-00215ad4efdf\tPset_UtilityConsumptionPHistory.Steam\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\r\nPARAM\tf4bc0580-d213-11e1-8000-00215ad4efdf\tPset_UtilityConsumptionPHistory.Water\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t725\tPset_ValvePHistory\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t069da880-d214-11e1-8000-00215ad4efdf\tPset_ValvePHistory.MeasuredFlowRate\tMULTILINETEXT\t\t725\t1\tIfcTimeSeries\t1\r\nPARAM\t0ac9c600-d214-11e1-8000-00215ad4efdf\tPset_ValvePHistory.MeasuredPressureDrop\tMULTILINETEXT\t\t725\t1\tIfcTimeSeries\t1\r\nPARAM\t03a2b800-d214-11e1-8000-00215ad4efdf\tPset_ValvePHistory.PercentageOpen\tMULTILINETEXT\t\t725\t1\tIfcTimeSeries\t1\r\n#\r\nGROUP\t726\tPset_ValveTypeAirRelease\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t161cf180-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeAirRelease.IsAutomatic\tYESNO\t\t726\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t727\tPset_ValveTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t98f8aec8-247b-430d-a4ae-121784d5e7b0\tPset_ValveTypeCommon.BodyMaterial\tMULTILINETEXT\t\t727\t1\tIfcMaterial\t1\r\nPARAM\t8a579500-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.CloseOffRating\tNUMBER\t\t727\t1\tIfcPressureMeasure\t1\r\nPARAM\t8461b400-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.FlowCoefficient\tNUMBER\t\t727\t1\tIfcReal\t1\r\nPARAM\tac0fa7dd-4cfe-4446-895c-b4b6600866f1\tPset_ValveTypeCommon.OperatingMechanismMaterial\tMULTILINETEXT\t\t727\t1\tIfcMaterial\t1\r\nPARAM\t2208b380-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.Reference\tTEXT\t\t727\t1\tIfcIdentifier\t1\r\nPARAM\t6a27d600-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.Size\tLENGTH\t\t727\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t103808cf-5fe6-4d58-9e73-17c7493147b5\tPset_ValveTypeCommon.Status\tTEXT\t\t727\t1\tPEnum_ElementStatus\t1\r\nPARAM\t7875f200-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.TestPressure\tNUMBER\t\t727\t1\tIfcPressureMeasure\t1\r\nPARAM\t51b7bb80-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.ValveMechanism\tTEXT\t\t727\t1\tPEnum_ValveMechanism\t1\r\nPARAM\t38167400-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.ValveOperation\tTEXT\t\t727\t1\tPEnum_ValveOperation\t1\r\nPARAM\t27fe9480-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.ValvePattern\tTEXT\t\t727\t1\tPEnum_ValvePattern\t1\r\nPARAM\t7e6bd300-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.WorkingPressure\tNUMBER\t\t727\t1\tIfcPressureMeasure\t1\r\n#\r\nGROUP\t728\tPset_ValveTypeDrawOffCock\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t96dbed80-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeDrawOffCock.HasHoseUnion\tYESNO\t\t728\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t729\tPset_ValveTypeFaucet\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tcbe84000-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFaucet.FaucetFunction\tTEXT\t\t729\t1\tPEnum_FaucetFunction\t1\r\nPARAM\tb70bac80-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFaucet.FaucetOperation\tTEXT\t\t729\t1\tPEnum_FaucetOperation\t1\r\nPARAM\te02c3d00-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFaucet.FaucetTopDescription\tTEXT\t\t729\t1\tIfcText\t1\r\nPARAM\ta3f8dc80-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFaucet.FaucetType\tTEXT\t\t729\t1\tPEnum_FaucetType\t1\r\nPARAM\tda365c00-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFaucet.Finish\tTEXT\t\t729\t1\tIfcText\t1\r\n#\r\nGROUP\t730\tPset_ValveTypeFlushing\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tec17ff00-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFlushing.FlushingRate\tNUMBER\t\t730\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\tf20de000-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFlushing.HasIntegralShutOffDevice\tYESNO\t\t730\t1\tIfcBoolean\t1\r\nPARAM\tf89c5780-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFlushing.IsHighPressure\tYESNO\t\t730\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t731\tPset_ValveTypeGasTap\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0651dd00-d215-11e1-8000-00215ad4efdf\tPset_ValveTypeGasTap.HasHoseUnion\tYESNO\t\t731\t1\tIfcBoolean\t1\r\n#\r\nGROUP\t732\tPset_ValveTypeIsolating\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t12d63580-d215-11e1-8000-00215ad4efdf\tPset_ValveTypeIsolating.IsNormallyOpen\tYESNO\t\t732\t1\tIfcBoolean\t1\r\nPARAM\t1a95da00-d215-11e1-8000-00215ad4efdf\tPset_ValveTypeIsolating.IsolatingPurpose\tTEXT\t\t732\t1\tPEnum_IsolatingPurpose\t1\r\n#\r\nGROUP\t733\tPset_ValveTypeMixing\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2c777d00-d215-11e1-8000-00215ad4efdf\tPset_ValveTypeMixing.MixerControl\tTEXT\t\t733\t1\tPEnum_MixingValveControl\t1\r\nPARAM\t49ac4b80-d215-11e1-8000-00215ad4efdf\tPset_ValveTypeMixing.OutletConnectionSize\tLENGTH\t\t733\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t734\tPset_ValveTypePressureReducing\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5fba0c00-d215-11e1-8000-00215ad4efdf\tPset_ValveTypePressureReducing.DownstreamPressure\tNUMBER\t\t734\t1\tIfcPressureMeasure\t1\r\nPARAM\t59c42b00-d215-11e1-8000-00215ad4efdf\tPset_ValveTypePressureReducing.UpstreamPressure\tNUMBER\t\t734\t1\tIfcPressureMeasure\t1\r\n#\r\nGROUP\t735\tPset_ValveTypePressureRelief\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t6cd6fb00-d215-11e1-8000-00215ad4efdf\tPset_ValveTypePressureRelief.ReliefPressure\tNUMBER\t\t735\t1\tIfcPressureMeasure\t1\r\n#\r\nGROUP\t736\tPset_VegetationCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf93c9a71-0165-4ea8-8080-8af0ef35e023\tPset_VegetationCommon.BotanicalName\tTEXT\t\t736\t1\tIfcLabel\t1\r\nPARAM\t57f40226-ee2b-4b87-8ebf-ec6e2f7d5a9b\tPset_VegetationCommon.LocalName\tTEXT\t\t736\t1\tIfcLabel\t1\r\n#\r\nGROUP\t737\tPset_VehicleAvailability\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t690f1857-7053-4943-a8d5-82109a361f23\tPset_VehicleAvailability.MaintenanceDowntime\tNUMBER\t\t737\t1\tIfcRatioMeasure\t1\r\nPARAM\t157f2fdd-dc53-4330-94f8-f80cc739f00b\tPset_VehicleAvailability.VehicleAvailability\tNUMBER\t\t737\t1\tIfcRatioMeasure\t1\r\nPARAM\t6262c479-658d-4039-b0e2-ea4659f8f56e\tPset_VehicleAvailability.WeatherDowntime\tNUMBER\t\t737\t1\tIfcRatioMeasure\t1\r\n#\r\nGROUP\t738\tPset_VesselLineCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te9118634-e664-4410-8055-b1b091ad9c7c\tPset_VesselLineCommon.CentreLineToFairlead\tLENGTH\t\t738\t1\tIfcLengthMeasure\t1\r\nPARAM\t286cc151-3e42-4e39-8e47-0065da5bfde6\tPset_VesselLineCommon.FairleadToTermination\tLENGTH\t\t738\t1\tIfcLengthMeasure\t1\r\nPARAM\tc39ae03e-31cc-41a1-bffc-281059b1aae2\tPset_VesselLineCommon.HeightAboveMainDeck\tLENGTH\t\t738\t1\tIfcLengthMeasure\t1\r\nPARAM\t8c33492e-fef2-46ea-9926-65da0e548aa1\tPset_VesselLineCommon.LineIdentifier\tTEXT\t\t738\t1\tIfcIdentifier\t1\r\nPARAM\t78ea0a09-63a3-46e9-9956-cf85cc2dd275\tPset_VesselLineCommon.LineStrength\tNUMBER\t\t738\t1\tIfcForceMeasure\t1\r\nPARAM\t8840404e-8f35-4305-a3c0-ad87015487c7\tPset_VesselLineCommon.LineType\tTEXT\t\t738\t1\tIfcLabel\t1\r\nPARAM\tf3f0afd0-50a0-4c0a-a4c3-c2ecd39a3069\tPset_VesselLineCommon.MidshipToFairLead\tLENGTH\t\t738\t1\tIfcLengthMeasure\t1\r\nPARAM\t3d5fe8d6-875b-45fe-8c63-701605ba964d\tPset_VesselLineCommon.PreTensionAim\tNUMBER\t\t738\t1\tIfcForceMeasure\t1\r\nPARAM\tb50d3953-5bed-40a7-a7b7-f8469e18656f\tPset_VesselLineCommon.TailDiameter\tLENGTH\t\t738\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t292c8be4-9625-4977-b995-128bd95ec7bf\tPset_VesselLineCommon.TailLength\tLENGTH\t\t738\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t2d801def-b115-4f9d-9dd6-2dcd996760ed\tPset_VesselLineCommon.TailStrength\tNUMBER\t\t738\t1\tIfcForceMeasure\t1\r\nPARAM\te877b8b0-7a4d-4436-b29b-7f72c59b3c92\tPset_VesselLineCommon.TailType\tTEXT\t\t738\t1\tIfcLabel\t1\r\nPARAM\t4844604d-89b6-4fae-96b0-cac77ba81a47\tPset_VesselLineCommon.WinchBreakLimit\tNUMBER\t\t738\t1\tIfcForceMeasure\t1\r\n#\r\nGROUP\t739\tPset_VibrationIsolatorTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tcb60a188-ae0d-4c85-b701-a99598ba7075\tPset_VibrationIsolatorTypeCommon.Height\tLENGTH\t\t739\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t8b3cf680-d215-11e1-8000-00215ad4efdf\tPset_VibrationIsolatorTypeCommon.IsolatorCompressibility\tNUMBER\t\t739\t1\tIfcRatioMeasure\t1\r\nPARAM\t85dfac00-d215-11e1-8000-00215ad4efdf\tPset_VibrationIsolatorTypeCommon.IsolatorStaticDeflection\tLENGTH\t\t739\t1\tIfcLengthMeasure\t1\r\nPARAM\t89ee9a3a-ccf7-4263-8adb-8aecbfd91860\tPset_VibrationIsolatorTypeCommon.Material\tMULTILINETEXT\t\t739\t1\tIfcMaterial\t1\r\nPARAM\t998b1280-d215-11e1-8000-00215ad4efdf\tPset_VibrationIsolatorTypeCommon.MaximumSupportedWeight\tNUMBER\t\t739\t1\tIfcMassMeasure\t1\r\nPARAM\t9132d780-d215-11e1-8000-00215ad4efdf\tPset_VibrationIsolatorTypeCommon.NominalHeight\tLENGTH\t\t739\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t795b5380-d215-11e1-8000-00215ad4efdf\tPset_VibrationIsolatorTypeCommon.Reference\tTEXT\t\t739\t1\tIfcIdentifier\t1\r\nPARAM\t1a989eee-042c-4402-833b-b2453e382388\tPset_VibrationIsolatorTypeCommon.Status\tTEXT\t\t739\t1\tPEnum_ElementStatus\t1\r\nPARAM\t7f513480-d215-11e1-8000-00215ad4efdf\tPset_VibrationIsolatorTypeCommon.VibrationTransmissibility\tNUMBER\t\t739\t1\tIfcPositiveRatioMeasure\t1\r\n#\r\nGROUP\t740\tPset_VoltageInstrumentTransformer\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5cbc9f04-eb46-4f9b-b90c-4254470aa4f3\tPset_VoltageInstrumentTransformer.AccuracyClass\tNUMBER\t\t740\t1\tIfcRatioMeasure\t1\r\nPARAM\t8c9ed2b8-4d06-4844-bb3f-7fa902e59ef2\tPset_VoltageInstrumentTransformer.AccuracyGrade\tTEXT\t\t740\t1\tIfcLabel\t1\r\nPARAM\t9fcc4ae8-1444-4cea-a329-4e9186ad691f\tPset_VoltageInstrumentTransformer.NominalCurrent\tNUMBER\t\t740\t1\tIfcElectricCurrentMeasure\t1\r\nPARAM\t1cd68416-9910-498b-9e01-79deeeec3f69\tPset_VoltageInstrumentTransformer.NominalPower\tNUMBER\t\t740\t1\tIfcPowerMeasure\t1\r\nPARAM\t125bda4b-92fe-4041-8eb6-8d72db3a1606\tPset_VoltageInstrumentTransformer.NumberOfPhases\tINTEGER\t\t740\t1\tIfcCountMeasure\t1\r\nPARAM\t88eec545-e7af-488b-90dc-c00bae0556b7\tPset_VoltageInstrumentTransformer.PrimaryFrequency\tNUMBER\t\t740\t1\tIfcFrequencyMeasure\t1\r\nPARAM\t0c433820-4d17-442e-9505-6d677d54b261\tPset_VoltageInstrumentTransformer.PrimaryVoltage\tNUMBER\t\t740\t1\tIfcElectricVoltageMeasure\t1\r\nPARAM\t8ff0f0be-6800-4f6f-865d-b04200b0214f\tPset_VoltageInstrumentTransformer.RatedVoltage\tMULTILINETEXT\t\t740\t1\tPropertyBoundedValue\t1\r\nPARAM\t90285b34-bd15-435a-8726-4cadbde94211\tPset_VoltageInstrumentTransformer.SecondaryFrequency\tNUMBER\t\t740\t1\tIfcFrequencyMeasure\t1\r\nPARAM\t91ef539a-cc64-44db-98ef-1a3c646cbf9a\tPset_VoltageInstrumentTransformer.SecondaryVoltage\tNUMBER\t\t740\t1\tIfcElectricVoltageMeasure\t1\r\n#\r\nGROUP\t741\tPset_WallCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc17a7600-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.AcousticRating\tTEXT\t\t741\t1\tIfcLabel\t1\r\nPARAM\tcfc89200-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.Combustible\tYESNO\t\t741\t1\tIfcBoolean\t1\r\nPARAM\tf981b900-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.Compartmentation\tYESNO\t\t741\t1\tIfcBoolean\t1\r\nPARAM\tea027000-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.ExtendToStructure\tYESNO\t\t741\t1\tIfcBoolean\t1\r\nPARAM\tc93a1a80-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.FireRating\tTEXT\t\t741\t1\tIfcLabel\t1\r\nPARAM\te2db6200-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.IsExternal\tYESNO\t\t741\t1\tIfcBoolean\t1\r\nPARAM\tf1c21480-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.LoadBearing\tYESNO\t\t741\t1\tIfcBoolean\t1\r\nPARAM\taa3b8880-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.Reference\tTEXT\t\t741\t1\tIfcIdentifier\t1\r\nPARAM\tb0ca0000-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.Status\tTEXT\t\t741\t1\tPEnum_ElementStatus\t1\r\nPARAM\td6570980-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.SurfaceSpreadOfFlame\tTEXT\t\t741\t1\tIfcLabel\t1\r\nPARAM\tde16ae00-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.ThermalTransmittance\tNUMBER\t\t741\t1\tIfcThermalTransmittanceMeasure\t1\r\n#\r\nGROUP\t742\tPset_Warranty\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t30f06580-d216-11e1-8000-00215ad4efdf\tPset_Warranty.Exclusions\tTEXT\t\t742\t1\tIfcText\t1\r\nPARAM\t19b17800-d216-11e1-8000-00215ad4efdf\tPset_Warranty.IsExtendedWarranty\tYESNO\t\t742\t1\tIfcBoolean\t1\r\nPARAM\t2635d080-d216-11e1-8000-00215ad4efdf\tPset_Warranty.PointOfContact\tTEXT\t\t742\t1\tIfcLabel\t1\r\nPARAM\t2a61ee00-d216-11e1-8000-00215ad4efdf\tPset_Warranty.WarrantyContent\tTEXT\t\t742\t1\tIfcText\t1\r\nPARAM\t14542d80-d216-11e1-8000-00215ad4efdf\tPset_Warranty.WarrantyEndDate\tTEXT\t\t742\t1\tIfcDate\t1\r\nPARAM\t08686b80-d216-11e1-8000-00215ad4efdf\tPset_Warranty.WarrantyIdentifier\tTEXT\t\t742\t1\tIfcIdentifier\t1\r\nPARAM\t20d88600-d216-11e1-8000-00215ad4efdf\tPset_Warranty.WarrantyPeriod\tTEXT\t\t742\t1\tIfcDuration\t1\r\nPARAM\t0ef6e300-d216-11e1-8000-00215ad4efdf\tPset_Warranty.WarrantyStartDate\tTEXT\t\t742\t1\tIfcDate\t1\r\n#\r\nGROUP\t743\tPset_WasteTerminalTypeCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3c439100-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeCommon.Reference\tTEXT\t\t743\t1\tIfcIdentifier\t1\r\nPARAM\t42d20880-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeCommon.Status\tTEXT\t\t743\t1\tPEnum_ElementStatus\t1\r\n#\r\nGROUP\t744\tPset_WasteTerminalTypeFloorTrap\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tede7f163-e16b-4977-900c-551643a33355\tPset_WasteTerminalTypeFloorTrap.BodyMaterial\tMULTILINETEXT\t\t744\t1\tIfcMaterial\t1\r\nPARAM\tcdb30300-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.CoverLength\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tdf94a600-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.CoverMaterial\tMULTILINETEXT\t\t744\t1\tIfcMaterialDefinition\t1\r\nPARAM\td6a3d480-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.CoverWidth\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t95132980-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.HasStrainer\tYESNO\t\t744\t1\tIfcBoolean\t1\r\nPARAM\tc4299b00-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.InletConnectionSize\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\ta65c3600-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.InletPatternType\tTEXT\t\t744\t1\tPEnum_InletPatternType\t1\r\nPARAM\t757c0100-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.IsForSullageWater\tYESNO\t\t744\t1\tIfcBoolean\t1\r\nPARAM\t6bf29900-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.NominalBodyDepth\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t5aa98c80-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.NominalBodyLength\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t639a5e00-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.NominalBodyWidth\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9c3a3780-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.OutletConnectionSize\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t7ca30f00-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.SpilloverLevel\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t8593e080-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.TrapType\tTEXT\t\t744\t1\tPEnum_TrapType\t1\r\n#\r\nGROUP\t745\tPset_WasteTerminalTypeFloorWaste\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc22a63a2-efb4-463b-a77b-4a3a4c74aac6\tPset_WasteTerminalTypeFloorWaste.BodyMaterial\tMULTILINETEXT\t\t745\t1\tIfcMaterial\t1\r\nPARAM\t0d79ea80-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorWaste.CoverLength\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tfcfb5e45-647e-4cb4-9409-210a27aec5de\tPset_WasteTerminalTypeFloorWaste.CoverMaterial\tMULTILINETEXT\t\t745\t1\tIfcMaterial\t1\r\nPARAM\t17035280-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorWaste.CoverWidth\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tfaffb100-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorWaste.NominalBodyDepth\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te8857780-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorWaste.NominalBodyLength\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf20edf80-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorWaste.NominalBodyWidth\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t03f08280-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorWaste.OutletConnectionSize\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t746\tPset_WasteTerminalTypeGreaseInterceptor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t76b4afb1-148e-4476-bbb4-f8e11f7ef0f5\tPset_WasteTerminalTypeGreaseInterceptor.BodyDepth\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t7b1a9d46-a64a-45c5-bcbd-42807c520f33\tPset_WasteTerminalTypeGreaseInterceptor.CoverLength\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb7c8cf85-6b18-49bd-8c6c-80e381ec4355\tPset_WasteTerminalTypeGreaseInterceptor.CoverMaterial\tMULTILINETEXT\t\t746\t1\tIfcMaterial\t1\r\nPARAM\t8a84a27c-bc75-4c9f-885a-ff7b4f41cbaa\tPset_WasteTerminalTypeGreaseInterceptor.CoverWidth\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te7409eaf-2afc-4ab0-84bf-10be5302400b\tPset_WasteTerminalTypeGreaseInterceptor.InletConnectionSize\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb6efa515-b6af-4218-aa4c-d1613fddb22b\tPset_WasteTerminalTypeGreaseInterceptor.NominalBodyLength\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9ab773bd-b761-42ea-b04a-89f2127ed7a1\tPset_WasteTerminalTypeGreaseInterceptor.NominalBodyMaterial\tMULTILINETEXT\t\t746\t1\tIfcMaterial\t1\r\nPARAM\t95efa82a-bce4-4684-90e2-feb91b0dcfeb\tPset_WasteTerminalTypeGreaseInterceptor.NominalBodyWidth\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t2f5edcaf-5608-448e-8ce0-1f7d41981565\tPset_WasteTerminalTypeGreaseInterceptor.OutletConnectionSize\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t64f2e978-e5ea-417a-b095-2235e5931cb1\tPset_WasteTerminalTypeGreaseInterceptor.StrainerDepth\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t8315cec5-18e5-488d-80a5-aba30f30aeab\tPset_WasteTerminalTypeGreaseInterceptor.StrainerDiameter\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t7117dc07-f6a9-438c-b6e8-2c4fa750e080\tPset_WasteTerminalTypeGreaseInterceptor.StrainerMaterial\tMULTILINETEXT\t\t746\t1\tIfcMaterial\t1\r\n#\r\nGROUP\t747\tPset_WasteTerminalTypeGullySump\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t69dd0a00-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.BackInletPatternType\tTEXT\t\t747\t1\tPEnum_BackInletPatternType\t1\r\nPARAM\t909b4080-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.CoverLength\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t122d418d-3358-4809-b0b5-bf2ed04fb613\tPset_WasteTerminalTypeGullySump.CoverMaterial\tMULTILINETEXT\t\t747\t1\tIfcMaterial\t1\r\nPARAM\t9abd3f00-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.CoverWidth\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t431ed380-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.GullyType\tTEXT\t\t747\t1\tPEnum_GullyType\t1\r\nPARAM\t87aa6f00-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.InletConnectionSize\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t38643e80-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.NominalSumpDepth\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t26829b80-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.NominalSumpLength\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t300c0380-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.NominalSumpWidth\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t6053a200-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.OutletConnectionSize\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t64c82df5-20d3-47ee-bd23-0ab6179a9662\tPset_WasteTerminalTypeGullySump.SumpMaterial\tMULTILINETEXT\t\t747\t1\tIfcMaterial\t1\r\nPARAM\t503bc280-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.TrapType\tTEXT\t\t747\t1\tPEnum_TrapType\t1\r\n#\r\nGROUP\t748\tPset_WasteTerminalTypeGullyTrap\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf4be0480-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.BackInletPatternType\tTEXT\t\t748\t1\tPEnum_BackInletPatternType\t1\r\nPARAM\t73a0474f-e0cf-4933-80b6-eb803941d633\tPset_WasteTerminalTypeGullyTrap.BodyMaterial\tMULTILINETEXT\t\t748\t1\tIfcMaterial\t1\r\nPARAM\t1919e100-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.CoverLength\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t463e224f-3693-401c-97ed-a237372c77c1\tPset_WasteTerminalTypeGullyTrap.CoverMaterial\tMULTILINETEXT\t\t748\t1\tIfcMaterial\t1\r\nPARAM\t21721c00-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.CoverWidth\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc809ed00-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.GullyType\tTEXT\t\t748\t1\tPEnum_GullyType\t1\r\nPARAM\td5bf7280-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.HasStrainer\tYESNO\t\t748\t1\tIfcBoolean\t1\r\nPARAM\t10290f80-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.InletConnectionSize\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tbe808500-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.NominalBodyDepth\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\taad51e80-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.NominalBodyLength\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tb45e8680-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.NominalBodyWidth\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tec65c980-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.OutletConnectionSize\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tdd7f1700-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.TrapType\tTEXT\t\t748\t1\tPEnum_TrapType\t1\r\n#\r\nGROUP\t749\tPset_WasteTerminalTypeOilInterceptor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t27c906d4-69ba-4fd7-8839-7f753e1da5b1\tPset_WasteTerminalTypeOilInterceptor.BodyMaterial\tMULTILINETEXT\t\t749\t1\tIfcMaterial\t1\r\nPARAM\tf23c76fd-2c8e-42be-9daf-dd7752c484b2\tPset_WasteTerminalTypeOilInterceptor.CoverLength\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\ta0a75ee6-80dc-4f27-ba7b-d8a2104f7705\tPset_WasteTerminalTypeOilInterceptor.CoverMaterial\tMULTILINETEXT\t\t749\t1\tIfcMaterial\t1\r\nPARAM\t0896c2fc-e917-4dc1-977d-9c3ba4054a72\tPset_WasteTerminalTypeOilInterceptor.CoverWidth\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t38d7cbd5-4463-4361-8310-599f1325325f\tPset_WasteTerminalTypeOilInterceptor.InletConnectionSize\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t63888a3c-4850-4c8c-8124-f77ba780a389\tPset_WasteTerminalTypeOilInterceptor.NominalBodyDepth\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t96cccd1b-f1c8-45c8-b7a8-665bcf4e43af\tPset_WasteTerminalTypeOilInterceptor.NominalBodyLength\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t46d98c2c-0075-4933-beee-5f0e3a3983a7\tPset_WasteTerminalTypeOilInterceptor.NominalBodyWidth\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t831aaf70-c5ba-4835-9d63-d804d1164582\tPset_WasteTerminalTypeOilInterceptor.OutletConnectionSize\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t750\tPset_WasteTerminalTypePetrolInterceptor\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tea01f55d-15ff-4838-b5c5-4fd7d578d75d\tPset_WasteTerminalTypePetrolInterceptor.BodyMaterial\tMULTILINETEXT\t\t750\t1\tIfcMaterial\t1\r\nPARAM\t2396a8b9-1cc9-4656-88ae-bffa46aa620f\tPset_WasteTerminalTypePetrolInterceptor.CoverLength\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t76ec1c35-f23e-427b-a8c3-cea9916ad20e\tPset_WasteTerminalTypePetrolInterceptor.CoverMaterial\tMULTILINETEXT\t\t750\t1\tIfcMaterial\t1\r\nPARAM\t7b91d7f1-b31c-49b7-a8b6-e11e65e16969\tPset_WasteTerminalTypePetrolInterceptor.CoverWidth\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t79dceadb-6e67-46ef-b0dc-81ec17fc6fca\tPset_WasteTerminalTypePetrolInterceptor.InletConnectionSize\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t583922cc-179e-40d4-8ea3-59f4653f0833\tPset_WasteTerminalTypePetrolInterceptor.NominalBodyDepth\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\taa23ce95-2dd2-4fc0-9aea-f8682955d827\tPset_WasteTerminalTypePetrolInterceptor.NominalBodyLength\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t845a959f-077e-43fe-9950-e277a6989b75\tPset_WasteTerminalTypePetrolInterceptor.NominalBodyWidth\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te76fd15a-20d6-4407-b62a-7e700aa45fc0\tPset_WasteTerminalTypePetrolInterceptor.OutletConnectionSize\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t8fb0077f-6516-4853-ae57-bf03a3bde72a\tPset_WasteTerminalTypePetrolInterceptor.VentilatingPipeSize\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t751\tPset_WasteTerminalTypeRoofDrain\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0aeac948-a0f2-46b7-b901-3569a724a609\tPset_WasteTerminalTypeRoofDrain.BodyMaterial\tMULTILINETEXT\t\t751\t1\tIfcMaterial\t1\r\nPARAM\t4ebeca00-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeRoofDrain.CoverLength\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t9a9abe13-5318-4c00-89c8-a6a5e4f4f97d\tPset_WasteTerminalTypeRoofDrain.CoverMaterial\tMULTILINETEXT\t\t751\t1\tIfcMaterial\t1\r\nPARAM\t57170500-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeRoofDrain.CoverWidth\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3e0e5400-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeRoofDrain.NominalBodyDepth\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t2df67480-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeRoofDrain.NominalBodyLength\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t364eaf80-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeRoofDrain.NominalBodyWidth\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t46668f00-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeRoofDrain.OutletConnectionSize\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t752\tPset_WasteTerminalTypeWasteDisposalUnit\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t65fdb780-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeWasteDisposalUnit.DrainConnectionSize\tLENGTH\t\t752\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t76ae2d80-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeWasteDisposalUnit.NominalDepth\tLENGTH\t\t752\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t6e55f280-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeWasteDisposalUnit.OutletConnectionSize\tLENGTH\t\t752\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t753\tPset_WasteTerminalTypeWasteTrap\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t980f1980-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeWasteTrap.InletConnectionSize\tLENGTH\t\t753\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t904f7500-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeWasteTrap.OutletConnectionSize\tLENGTH\t\t753\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t83cb1c80-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeWasteTrap.WasteTrapType\tTEXT\t\t753\t1\tPEnum_TrapType\t1\r\n#\r\nGROUP\t754\tPset_WaterStratumCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1badc57a-9d9a-4de3-9fe8-d581de687e27\tPset_WaterStratumCommon.AnnualRange\tLENGTH\t\t754\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tc4e70463-f23e-4baa-85ed-64e1e6ac2024\tPset_WaterStratumCommon.AnnualTrend\tLENGTH\t\t754\t1\tIfcLengthMeasure\t1\r\nPARAM\t9cb509fb-568b-4d1e-9492-d4d951a42e15\tPset_WaterStratumCommon.IsFreshwater\tYESNO\t\t754\t1\tIfcLogical\t1\r\nPARAM\tc0e6cd1e-6928-4f5e-a105-3f947bab506c\tPset_WaterStratumCommon.SeicheRange\tLENGTH\t\t754\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tdbc3dee1-b971-4918-9c92-fb0da9e1813e\tPset_WaterStratumCommon.TidalRange\tLENGTH\t\t754\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t598f1b95-7e55-4aca-b9f4-9594ca128ee9\tPset_WaterStratumCommon.WaveRange\tLENGTH\t\t754\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t755\tPset_Width\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3f45747d-8d79-4141-87bc-3ccb68b054d7\tPset_Width.NominalWidth\tLENGTH\t\t755\t1\tIfcNonNegativeLengthMeasure\t1\r\nPARAM\t1abc16fd-a5b0-481b-bd01-fdac8104e95f\tPset_Width.Side\tTEXT\t\t755\t1\tPEnum_SideType\t1\r\nPARAM\t00934150-4771-4357-b2a7-9e79c3b60e5f\tPset_Width.TransitionWidth\tTEXT\t\t755\t1\tPEnum_TransitionWidthType\t1\r\n#\r\nGROUP\t756\tPset_WindowCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb9700580-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.AcousticRating\tTEXT\t\t756\t1\tIfcLabel\t1\r\nPARAM\t005dfb00-d219-11e1-8000-00215ad4efdf\tPset_WindowCommon.FireExit\tYESNO\t\t756\t1\tIfcBoolean\t1\r\nPARAM\tbffe7d00-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.FireRating\tTEXT\t\t756\t1\tIfcLabel\t1\r\nPARAM\tdd334b80-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.GlazingAreaFraction\tNUMBER\t\t756\t1\tIfcPositiveRatioMeasure\t1\r\nPARAM\tf2a87580-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.HasDrive\tYESNO\t\t756\t1\tIfcBoolean\t1\r\nPARAM\te3c1c300-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.HasSillExternal\tYESNO\t\t756\t1\tIfcBoolean\t1\r\nPARAM\teae8d100-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.HasSillInternal\tYESNO\t\t756\t1\tIfcBoolean\t1\r\nPARAM\td3114d00-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.Infiltration\tNUMBER\t\t756\t1\tIfcVolumetricFlowRateMeasure\t1\r\nPARAM\tcd1b6c00-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.IsExternal\tYESNO\t\t756\t1\tIfcBoolean\t1\r\nPARAM\t7db55f92-39da-4d10-830c-d420f3a1988c\tPset_WindowCommon.MechanicalLoadRating\tTEXT\t\t756\t1\tIfcLabel\t1\r\nPARAM\ta6f5cc00-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.Reference\tTEXT\t\t756\t1\tIfcIdentifier\t1\r\nPARAM\tc68cf480-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.SecurityRating\tTEXT\t\t756\t1\tIfcLabel\t1\r\nPARAM\tf9cf8380-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.SmokeStop\tYESNO\t\t756\t1\tIfcBoolean\t1\r\nPARAM\tacebad00-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.Status\tTEXT\t\t756\t1\tPEnum_ElementStatus\t1\r\nPARAM\td86e9780-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.ThermalTransmittance\tNUMBER\t\t756\t1\tIfcThermalTransmittanceMeasure\t1\r\nPARAM\te92533f3-a7e4-4161-96ad-923faee29e96\tPset_WindowCommon.WaterTightnessRating\tTEXT\t\t756\t1\tIfcLabel\t1\r\nPARAM\t664882a1-5b8a-4200-87f6-f80670cbe20b\tPset_WindowCommon.WindLoadRating\tTEXT\t\t756\t1\tIfcLabel\t1\r\n#\r\nGROUP\t757\tPset_WiredCommunicationPortCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te54e3455-4c94-4613-9eb0-e3d0c28bba32\tPset_WiredCommunicationPortCommon.CommunicationStandard\tTEXT\t\t757\t1\tPEnum_CommunicationStandard\t1\r\nPARAM\t3fb74ba4-9454-4a78-9265-07e56a1b8d1a\tPset_WiredCommunicationPortCommon.MaximumTransferRate\tINTEGER\t\t757\t1\tIfcIntegerCountRateMeasure\t1\r\n#\r\nGROUP\t758\tPset_WorkControlCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1cfa3300-d219-11e1-8000-00215ad4efdf\tPset_WorkControlCommon.WorkDayDuration\tTEXT\t\t758\t1\tIfcDuration\t1\r\nPARAM\t179ce880-d219-11e1-8000-00215ad4efdf\tPset_WorkControlCommon.WorkFinishTime\tTEXT\t\t758\t1\tIfcTime\t1\r\nPARAM\t27b4c800-d219-11e1-8000-00215ad4efdf\tPset_WorkControlCommon.WorkMonthDuration\tTEXT\t\t758\t1\tIfcDuration\t1\r\nPARAM\t12d83480-d219-11e1-8000-00215ad4efdf\tPset_WorkControlCommon.WorkStartTime\tTEXT\t\t758\t1\tIfcTime\t1\r\nPARAM\t22f01400-d219-11e1-8000-00215ad4efdf\tPset_WorkControlCommon.WorkWeekDuration\tTEXT\t\t758\t1\tIfcDuration\t1\r\n#\r\nGROUP\t759\tPset_ZoneCommon\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tfae5baa6-c7cc-4e06-80cd-2df6ee99eece\tPset_ZoneCommon.Category\tTEXT\t\t759\t1\tIfcLabel\t1\r\nPARAM\t6aaa8536-a77f-48f3-9c4c-98539c4e1c4a\tPset_ZoneCommon.GrossAreaPlanned\tAREA\t\t759\t1\tIfcAreaMeasure\t1\r\nPARAM\tf612feec-72a2-4a43-9621-a0c271d08886\tPset_ZoneCommon.GrossPlannedArea\tAREA\t\t759\t1\tIfcAreaMeasure\t1\r\nPARAM\t6704bcc6-c483-45c3-9d90-e4e5dbb87748\tPset_ZoneCommon.HandicapAccessible\tYESNO\t\t759\t1\tIfcBoolean\t1\r\nPARAM\tcd616a7a-8e64-4bde-8454-989699ddf1b8\tPset_ZoneCommon.IsExternal\tYESNO\t\t759\t1\tIfcBoolean\t1\r\nPARAM\td8701e2b-c4f9-49f0-9634-fad47597bcf1\tPset_ZoneCommon.MechanicalVentilationRate\tINTEGER\t\t759\t1\tIfcCountMeasure\t1\r\nPARAM\t142017c5-7df7-4608-815a-fc8a4223c387\tPset_ZoneCommon.NaturalVentilation\tYESNO\t\t759\t1\tIfcBoolean\t1\r\nPARAM\t504732de-8cf2-4ede-b741-cf3e592a3fc7\tPset_ZoneCommon.NaturalVentilationRate\tINTEGER\t\t759\t1\tIfcCountMeasure\t1\r\nPARAM\td21e9362-b349-421f-b143-d8f3c62f4d93\tPset_ZoneCommon.NetAreaPlanned\tAREA\t\t759\t1\tIfcAreaMeasure\t1\r\nPARAM\t4655738f-d56e-4f09-ae04-0d3e3a45cbaa\tPset_ZoneCommon.NetPlannedArea\tAREA\t\t759\t1\tIfcAreaMeasure\t1\r\nPARAM\t3298a9ed-7148-41c6-b0fc-9cb39473ab76\tPset_ZoneCommon.OccupancyNumber\tINTEGER\t\t759\t1\tIfcCountMeasure\t1\r\nPARAM\tca75dfbe-dc19-406d-9d40-1d768decb871\tPset_ZoneCommon.OccupancyType\tTEXT\t\t759\t1\tIfcLabel\t1\r\nPARAM\ta9c1d119-d845-488b-8aaa-68625296c6d4\tPset_ZoneCommon.PubliclyAccessible\tYESNO\t\t759\t1\tIfcBoolean\t1\r\nPARAM\t113a9e35-1465-4468-8305-8e69d5276b24\tPset_ZoneCommon.Reference\tTEXT\t\t759\t1\tIfcIdentifier\t1\r\n#\r\nGROUP\t760\tQto_ActuatorBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t19782cc3-7869-4310-8917-c89d6fd0e8a3\tQto_ActuatorBaseQuantities.GrossWeight\tNUMBER\t\t760\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t761\tQto_AirTerminalBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta0949257-6887-4ac8-86c5-9846c9d2e04a\tQto_AirTerminalBaseQuantities.GrossWeight\tNUMBER\t\t761\t1\tIfcMassMeasure\t1\r\nPARAM\t77be93f6-0954-405e-a38e-d2700a4e4da9\tQto_AirTerminalBaseQuantities.Perimeter\tLENGTH\t\t761\t1\tIfcLengthMeasure\t1\r\nPARAM\t27bc57ac-3bc1-42de-a946-2b6f9358e4d9\tQto_AirTerminalBaseQuantities.TotalSurfaceArea\tAREA\t\t761\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t762\tQto_AirTerminalBoxTypeBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5f637be7-4113-49cf-a813-c989bd0ad192\tQto_AirTerminalBoxTypeBaseQuantities.GrossWeight\tNUMBER\t\t762\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t763\tQto_AirToAirHeatRecoveryBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tcf9ca32a-82e1-4d38-9b62-889f3231aa8a\tQto_AirToAirHeatRecoveryBaseQuantities.GrossWeight\tNUMBER\t\t763\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t764\tQto_AlarmBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb8a11d44-70fd-46f9-9ea8-df0f01c13f88\tQto_AlarmBaseQuantities.GrossWeight\tNUMBER\t\t764\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t765\tQto_ArealStratumBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t334e6983-82b9-4621-b742-b7cc6539d127\tQto_ArealStratumBaseQuantities.Area\tAREA\t\t765\t1\tIfcAreaMeasure\t1\r\nPARAM\t3874204a-c890-4b25-baec-7cc9e24e3333\tQto_ArealStratumBaseQuantities.Length\tLENGTH\t\t765\t1\tIfcLengthMeasure\t1\r\nPARAM\te1ed6207-ec00-472e-8be6-37659c26341a\tQto_ArealStratumBaseQuantities.PlanLength\tLENGTH\t\t765\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t766\tQto_AudioVisualApplianceBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbfb41ca2-0f12-46bc-8087-f90e1d086246\tQto_AudioVisualApplianceBaseQuantities.GrossWeight\tNUMBER\t\t766\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t767\tQto_BeamBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4a0e9237-e3ed-4037-a2cb-b194b64d0b50\tQto_BeamBaseQuantities.CrossSectionArea\tAREA\t\t767\t1\tIfcAreaMeasure\t1\r\nPARAM\tb458221e-bac2-48ae-99aa-59fbe347ed25\tQto_BeamBaseQuantities.GrossSurfaceArea\tAREA\t\t767\t1\tIfcAreaMeasure\t1\r\nPARAM\t65719fa3-ed69-436e-91cc-90f804ba2910\tQto_BeamBaseQuantities.GrossVolume\tVOLUME\t\t767\t1\tIfcVolumeMeasure\t1\r\nPARAM\t03bdaa78-1cd4-467d-9a55-cb24da923f25\tQto_BeamBaseQuantities.GrossWeight\tNUMBER\t\t767\t1\tIfcMassMeasure\t1\r\nPARAM\tfa40f222-0b79-4729-873c-f4171396d5b9\tQto_BeamBaseQuantities.Height\tLENGTH\t\t767\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t079deba9-d739-42b7-8314-a132db837c39\tQto_BeamBaseQuantities.Length\tLENGTH\t\t767\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t315e738d-11cb-4568-86b2-6987ee3f30b3\tQto_BeamBaseQuantities.NetSurfaceArea\tAREA\t\t767\t1\tIfcAreaMeasure\t1\r\nPARAM\t91bfdfef-1411-475d-975c-210645cfefcc\tQto_BeamBaseQuantities.NetVolume\tVOLUME\t\t767\t1\tIfcVolumeMeasure\t1\r\nPARAM\t2fa8a952-3bf5-4110-9fe7-9ba8ff176e34\tQto_BeamBaseQuantities.NetWeight\tNUMBER\t\t767\t1\tIfcMassMeasure\t1\r\nPARAM\tbeb3ac26-30c4-43bb-9d01-a073419573a8\tQto_BeamBaseQuantities.OuterSurfaceArea\tAREA\t\t767\t1\tIfcAreaMeasure\t1\r\nPARAM\t0b66c992-006a-4ae6-b6e6-ea7e03f889cd\tQto_BeamBaseQuantities.Width\tLENGTH\t\t767\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t768\tQto_BodyGeometryValidation\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0b44be9a-7352-4e70-a35b-68fef844e245\tQto_BodyGeometryValidation.GrossSurfaceArea\tAREA\t\t768\t1\tIfcAreaMeasure\t1\r\nPARAM\t8b812e9a-20b4-4b9e-8cf9-24d04a58560c\tQto_BodyGeometryValidation.GrossVolume\tVOLUME\t\t768\t1\tIfcVolumeMeasure\t1\r\nPARAM\t63a75606-1e1c-49b5-8dd9-ea830ff2d4b9\tQto_BodyGeometryValidation.NetSurfaceArea\tAREA\t\t768\t1\tIfcAreaMeasure\t1\r\nPARAM\t9b319920-42dd-4285-a545-ed8ac838bf33\tQto_BodyGeometryValidation.NetVolume\tVOLUME\t\t768\t1\tIfcVolumeMeasure\t1\r\nPARAM\t36832b1a-531d-482f-bc5a-8077dc63e9b2\tQto_BodyGeometryValidation.SurfaceGenusAfterFeatures\tINTEGER\t\t768\t1\tIfcCountMeasure\t1\r\nPARAM\t802ada3a-4189-4e97-91cc-41f816da2dc3\tQto_BodyGeometryValidation.SurfaceGenusBeforeFeatures\tINTEGER\t\t768\t1\tIfcCountMeasure\t1\r\n#\r\nGROUP\t769\tQto_BoilerBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2f4a0337-47d6-4050-b9e6-ed4e21821de2\tQto_BoilerBaseQuantities.GrossWeight\tNUMBER\t\t769\t1\tIfcMassMeasure\t1\r\nPARAM\t1e577026-fb66-4bb2-85e4-f0b49616e471\tQto_BoilerBaseQuantities.NetWeight\tNUMBER\t\t769\t1\tIfcMassMeasure\t1\r\nPARAM\t1689a8db-a287-49e6-975d-b04c87dcb50b\tQto_BoilerBaseQuantities.TotalSurfaceArea\tAREA\t\t769\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t770\tQto_BuildingBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t73309cba-0cee-4889-8f55-bce18ec8e681\tQto_BuildingBaseQuantities.EavesHeight\tLENGTH\t\t770\t1\tIfcLengthMeasure\t1\r\nPARAM\tf0fb54dc-e0e9-4b36-9683-fee9c79923bd\tQto_BuildingBaseQuantities.FootprintArea\tAREA\t\t770\t1\tIfcAreaMeasure\t1\r\nPARAM\tb979db98-f353-4ba4-931d-f8345a1985e0\tQto_BuildingBaseQuantities.FootPrintArea\tAREA\t\t770\t1\tIfcAreaMeasure\t1\r\nPARAM\ta7a2d4e0-4c7c-4283-b646-ef59619364a5\tQto_BuildingBaseQuantities.GrossFloorArea\tAREA\t\t770\t1\tIfcAreaMeasure\t1\r\nPARAM\tba023fd4-1f9f-453e-8542-bb45c3df971c\tQto_BuildingBaseQuantities.GrossVolume\tVOLUME\t\t770\t1\tIfcVolumeMeasure\t1\r\nPARAM\tfe755362-5d6c-49d4-bcde-118dcadef8e9\tQto_BuildingBaseQuantities.Height\tLENGTH\t\t770\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tf506186b-da7e-4ae9-afbd-d060cfa33243\tQto_BuildingBaseQuantities.NetFloorArea\tAREA\t\t770\t1\tIfcAreaMeasure\t1\r\nPARAM\t87adba3c-673d-472e-b079-8e4c5caa1436\tQto_BuildingBaseQuantities.NetVolume\tVOLUME\t\t770\t1\tIfcVolumeMeasure\t1\r\n#\r\nGROUP\t771\tQto_BuildingElementProxyQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t71acb583-df81-4514-a1d4-20d4644654d9\tQto_BuildingElementProxyQuantities.NetSurfaceArea\tAREA\t\t771\t1\tIfcAreaMeasure\t1\r\nPARAM\tc4b592a7-d56c-4a4d-96aa-0ead3ae7205d\tQto_BuildingElementProxyQuantities.NetVolume\tVOLUME\t\t771\t1\tIfcVolumeMeasure\t1\r\n#\r\nGROUP\t772\tQto_BuildingStoreyBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t95fa32fb-a157-409f-b3f7-e67bd556fefe\tQto_BuildingStoreyBaseQuantities.GrossFloorArea\tAREA\t\t772\t1\tIfcAreaMeasure\t1\r\nPARAM\tddbe40c7-7e47-4c93-983a-5bf4de588d7f\tQto_BuildingStoreyBaseQuantities.GrossHeight\tLENGTH\t\t772\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3da89eb1-a6ac-462c-9c55-b85bb8fe038b\tQto_BuildingStoreyBaseQuantities.GrossPerimeter\tLENGTH\t\t772\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t5a817af0-1cf4-4fde-bc72-9f4feaa0c857\tQto_BuildingStoreyBaseQuantities.GrossVolume\tVOLUME\t\t772\t1\tIfcVolumeMeasure\t1\r\nPARAM\td21157d3-0800-4a66-9570-3a6a3e576be6\tQto_BuildingStoreyBaseQuantities.NetFloorArea\tAREA\t\t772\t1\tIfcAreaMeasure\t1\r\nPARAM\t8fde143e-88d0-48d6-9ae1-98c4d98753cf\tQto_BuildingStoreyBaseQuantities.NetHeight\tLENGTH\t\t772\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t82bb663e-b7a9-4916-9f8e-1382796f5c8d\tQto_BuildingStoreyBaseQuantities.NetHeigtht\tLENGTH\t\t772\t1\tIfcLengthMeasure\t1\r\nPARAM\t216c55f6-fad7-42d1-8ef6-d13bb653d864\tQto_BuildingStoreyBaseQuantities.NetVolume\tVOLUME\t\t772\t1\tIfcVolumeMeasure\t1\r\n#\r\nGROUP\t773\tQto_BurnerBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\teaf2edb1-14da-4726-a9ca-34a16ff4e3db\tQto_BurnerBaseQuantities.GrossWeight\tNUMBER\t\t773\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t774\tQto_CableCarrierFittingBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2b033fcb-530e-4219-b153-53d509d6837a\tQto_CableCarrierFittingBaseQuantities.GrossWeight\tNUMBER\t\t774\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t775\tQto_CableCarrierSegmentBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t15b60181-80a3-4a11-9950-3f5285273eee\tQto_CableCarrierSegmentBaseQuantities.CrossSectionArea\tAREA\t\t775\t1\tIfcAreaMeasure\t1\r\nPARAM\td37832cb-0951-4699-a61d-dd79c3faa148\tQto_CableCarrierSegmentBaseQuantities.GrossWeight\tNUMBER\t\t775\t1\tIfcMassMeasure\t1\r\nPARAM\tb054a366-1429-413b-bc28-9da517db09ce\tQto_CableCarrierSegmentBaseQuantities.Length\tLENGTH\t\t775\t1\tIfcLengthMeasure\t1\r\nPARAM\t9837fc53-21bb-4351-8a11-27b55c613a2f\tQto_CableCarrierSegmentBaseQuantities.OuterSurfaceArea\tAREA\t\t775\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t776\tQto_CableFittingBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2a32a8b8-6d85-41e8-8263-9d0a0843f2bf\tQto_CableFittingBaseQuantities.GrossWeight\tNUMBER\t\t776\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t777\tQto_CableSegmentBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8e110910-23a2-4342-ac2c-ef9fbfecbcbf\tQto_CableSegmentBaseQuantities.CrossSectionArea\tAREA\t\t777\t1\tIfcAreaMeasure\t1\r\nPARAM\tb80a4774-dbca-4ba7-9e48-d79c52ebd2e8\tQto_CableSegmentBaseQuantities.GrossWeight\tNUMBER\t\t777\t1\tIfcMassMeasure\t1\r\nPARAM\tf4c8046f-f56b-4330-8cfa-b03bcd9099e4\tQto_CableSegmentBaseQuantities.Length\tLENGTH\t\t777\t1\tIfcLengthMeasure\t1\r\nPARAM\t005e18ad-caec-4ee5-af2e-32edf0f931f5\tQto_CableSegmentBaseQuantities.OuterSurfaceArea\tAREA\t\t777\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t778\tQto_ChillerBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td56869e3-8fab-4470-8a7a-aa2081d44924\tQto_ChillerBaseQuantities.GrossWeight\tNUMBER\t\t778\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t779\tQto_ChimneyBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\teaec6c3e-6b45-4b6c-ab36-f48511910fcd\tQto_ChimneyBaseQuantities.Length\tLENGTH\t\t779\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t780\tQto_CoilBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8fe6c26f-f689-4c00-82f2-3203fd495634\tQto_CoilBaseQuantities.GrossWeight\tNUMBER\t\t780\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t781\tQto_ColumnBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta183a6cc-a940-49a9-95aa-d1dd9118b091\tQto_ColumnBaseQuantities.CrossSectionArea\tAREA\t\t781\t1\tIfcAreaMeasure\t1\r\nPARAM\tfc9bdad2-9631-41da-ad93-be6bb889228e\tQto_ColumnBaseQuantities.GrossSurfaceArea\tAREA\t\t781\t1\tIfcAreaMeasure\t1\r\nPARAM\t384ea5f0-233c-4321-a55f-691280a77ce4\tQto_ColumnBaseQuantities.GrossVolume\tVOLUME\t\t781\t1\tIfcVolumeMeasure\t1\r\nPARAM\t7c165d7a-dcbc-422a-a4e4-8e1288dc78bd\tQto_ColumnBaseQuantities.GrossWeight\tNUMBER\t\t781\t1\tIfcMassMeasure\t1\r\nPARAM\t56ae95ff-c7a1-4cc7-9e87-d2e8fb9e3914\tQto_ColumnBaseQuantities.Height\tLENGTH\t\t781\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\ta0fcc17c-8c38-4a56-9903-a6c0db4141bc\tQto_ColumnBaseQuantities.Length\tLENGTH\t\t781\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3af096a8-a032-4ed9-8ffc-7cc82fd958c0\tQto_ColumnBaseQuantities.NetSurfaceArea\tAREA\t\t781\t1\tIfcAreaMeasure\t1\r\nPARAM\t67285270-6a53-4a5e-a442-bbd8e441a1ab\tQto_ColumnBaseQuantities.NetVolume\tVOLUME\t\t781\t1\tIfcVolumeMeasure\t1\r\nPARAM\t0250bf87-7b65-4587-9d4d-feff4f6ad818\tQto_ColumnBaseQuantities.NetWeight\tNUMBER\t\t781\t1\tIfcMassMeasure\t1\r\nPARAM\t4d5f7a2d-dce5-4db1-9022-92607bfca471\tQto_ColumnBaseQuantities.OuterSurfaceArea\tAREA\t\t781\t1\tIfcAreaMeasure\t1\r\nPARAM\t1962905a-f957-4594-9eae-6ae936c609c2\tQto_ColumnBaseQuantities.Width\tLENGTH\t\t781\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t782\tQto_CommunicationsApplianceBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\td38bb55d-0db3-4084-b61d-2b96bfb3be6d\tQto_CommunicationsApplianceBaseQuantities.GrossWeight\tNUMBER\t\t782\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t783\tQto_CompressorBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4838e484-cbca-46eb-803b-07f211378c6e\tQto_CompressorBaseQuantities.GrossWeight\tNUMBER\t\t783\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t784\tQto_CondenserBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8194261a-d122-44c6-974f-5b2b752d6650\tQto_CondenserBaseQuantities.GrossWeight\tNUMBER\t\t784\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t785\tQto_ConduitSegmentBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf50d57fd-2571-4900-8b64-1f0568345a59\tQto_ConduitSegmentBaseQuantities.InnerDiameter\tLENGTH\t\t785\t1\tIfcLengthMeasure\t1\r\nPARAM\t0f73039a-085b-4fc3-8ab1-fcd4dd7d91ad\tQto_ConduitSegmentBaseQuantities.OuterDiameter\tLENGTH\t\t785\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t786\tQto_ConstructionEquipmentResourceBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tcab67b3c-ec99-4207-a66d-d79cb6b688dd\tQto_ConstructionEquipmentResourceBaseQuantities.OperatingTime\tNUMBER\t\t786\t1\tIfcTimeMeasure\t1\r\nPARAM\te4af67d3-9284-4a09-9642-e44a9162bc13\tQto_ConstructionEquipmentResourceBaseQuantities.UsageTime\tNUMBER\t\t786\t1\tIfcTimeMeasure\t1\r\n#\r\nGROUP\t787\tQto_ConstructionMaterialResourceBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tcf92e9e5-9de5-47a0-b6b7-5a502dfb0544\tQto_ConstructionMaterialResourceBaseQuantities.GrossVolume\tVOLUME\t\t787\t1\tIfcVolumeMeasure\t1\r\nPARAM\t476a9b16-9ea4-4d8d-ae7f-23280f8469be\tQto_ConstructionMaterialResourceBaseQuantities.GrossWeight\tNUMBER\t\t787\t1\tIfcMassMeasure\t1\r\nPARAM\t03f25042-881d-4327-ad02-1c707b0af505\tQto_ConstructionMaterialResourceBaseQuantities.NetVolume\tVOLUME\t\t787\t1\tIfcVolumeMeasure\t1\r\nPARAM\t02b7c7c4-b347-4a3a-a241-93a27e3e2c86\tQto_ConstructionMaterialResourceBaseQuantities.NetWeight\tNUMBER\t\t787\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t788\tQto_ControllerBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4d49823b-659e-4674-8d5e-c99a22fae38f\tQto_ControllerBaseQuantities.GrossWeight\tNUMBER\t\t788\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t789\tQto_CooledBeamBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t474a2b5f-d3c0-43d0-859a-5598b3e6388f\tQto_CooledBeamBaseQuantities.GrossWeight\tNUMBER\t\t789\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t790\tQto_CoolingTowerBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0fab17c9-085a-4b26-bea9-e8c6670651d0\tQto_CoolingTowerBaseQuantities.GrossWeight\tNUMBER\t\t790\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t791\tQto_CourseBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7353a6dd-ea34-4c59-9084-696e0017dc6c\tQto_CourseBaseQuantities.GrossVolume\tVOLUME\t\t791\t1\tIfcVolumeMeasure\t1\r\nPARAM\tba71f8c2-3609-4c37-9e10-893ba4e7c0c2\tQto_CourseBaseQuantities.Length\tLENGTH\t\t791\t1\tIfcLengthMeasure\t1\r\nPARAM\t09ecf7d7-3f95-4d76-93ac-97d07e65d0bb\tQto_CourseBaseQuantities.Thickness\tLENGTH\t\t791\t1\tIfcLengthMeasure\t1\r\nPARAM\t0fef9333-f2a1-40f2-9444-d27d75712ed5\tQto_CourseBaseQuantities.Volume\tVOLUME\t\t791\t1\tIfcVolumeMeasure\t1\r\nPARAM\tdde73094-6218-49ec-bc79-f0464cc2a3d8\tQto_CourseBaseQuantities.Weight\tNUMBER\t\t791\t1\tIfcMassMeasure\t1\r\nPARAM\t0be5b44b-256a-40a9-83be-91f77c092792\tQto_CourseBaseQuantities.Width\tLENGTH\t\t791\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t792\tQto_CoveringBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf2af95ee-26a0-4ba3-8c26-36bbb9d3ae26\tQto_CoveringBaseQuantities.GrossArea\tAREA\t\t792\t1\tIfcAreaMeasure\t1\r\nPARAM\t7765472e-54e2-4ec6-a881-b69517ec713d\tQto_CoveringBaseQuantities.GrossCeilingArea\tAREA\t\t792\t1\tIfcAreaMeasure\t1\r\nPARAM\t8fe2d1a8-3ee2-4b74-9722-6d8a649368b4\tQto_CoveringBaseQuantities.NetArea\tAREA\t\t792\t1\tIfcAreaMeasure\t1\r\nPARAM\ta4f2db20-7c28-4227-b134-b95238155e4d\tQto_CoveringBaseQuantities.Width\tLENGTH\t\t792\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t793\tQto_CurtainWallQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tca10d5a3-1350-4b89-b4a8-52b776a40e24\tQto_CurtainWallQuantities.GrossSideArea\tAREA\t\t793\t1\tIfcAreaMeasure\t1\r\nPARAM\t2ff22e99-a76c-46c1-a3c2-d43ab1b80cac\tQto_CurtainWallQuantities.Height\tLENGTH\t\t793\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t6f17f8b7-7f8d-4c47-95b6-ca609711e684\tQto_CurtainWallQuantities.Length\tLENGTH\t\t793\t1\tIfcLengthMeasure\t1\r\nPARAM\t7e77a6ae-3390-47fb-b816-7c4bf6011971\tQto_CurtainWallQuantities.NetSideArea\tAREA\t\t793\t1\tIfcAreaMeasure\t1\r\nPARAM\t69aa76f7-5968-4bab-ae1f-b99635e15d42\tQto_CurtainWallQuantities.Width\tLENGTH\t\t793\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t794\tQto_DamperBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2f28baab-a9d0-4ccc-87c5-1c3baaa1acf0\tQto_DamperBaseQuantities.GrossWeight\tNUMBER\t\t794\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t795\tQto_DistributionBoardBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tafa93514-f51d-4533-a663-016e4016a7ab\tQto_DistributionBoardBaseQuantities.GrossWeight\tNUMBER\t\t795\t1\tIfcMassMeasure\t1\r\nPARAM\t8e313414-349b-47ad-9fcb-656dc5c9759f\tQto_DistributionBoardBaseQuantities.NumberOfCircuits\tINTEGER\t\t795\t1\tIfcCountMeasure\t1\r\n#\r\nGROUP\t796\tQto_DistributionChamberElementBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tecf509f7-9a2b-431d-ae77-47ea0c781813\tQto_DistributionChamberElementBaseQuantities.Depth\tLENGTH\t\t796\t1\tIfcLengthMeasure\t1\r\nPARAM\t3a63b7a0-3239-41c1-8ccd-74f316b2befc\tQto_DistributionChamberElementBaseQuantities.GrossSurfaceArea\tAREA\t\t796\t1\tIfcAreaMeasure\t1\r\nPARAM\te12cf6db-d8fd-4764-9c20-9f6ec2aa1efd\tQto_DistributionChamberElementBaseQuantities.GrossVolume\tVOLUME\t\t796\t1\tIfcVolumeMeasure\t1\r\nPARAM\ta19f95e1-1329-4648-9c8d-b63247d55644\tQto_DistributionChamberElementBaseQuantities.NetSurfaceArea\tAREA\t\t796\t1\tIfcAreaMeasure\t1\r\nPARAM\t4aa02212-f677-4d92-8730-b106d6c45af5\tQto_DistributionChamberElementBaseQuantities.NetVolume\tVOLUME\t\t796\t1\tIfcVolumeMeasure\t1\r\n#\r\nGROUP\t797\tQto_DoorBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t13ee8da9-c23f-46f1-8cee-9424eecb0c49\tQto_DoorBaseQuantities.Area\tAREA\t\t797\t1\tIfcAreaMeasure\t1\r\nPARAM\t9d52d7de-84d5-4408-8222-1f65265cb7eb\tQto_DoorBaseQuantities.Height\tLENGTH\t\t797\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t3434c260-9ca8-4662-870a-72b876038812\tQto_DoorBaseQuantities.Perimeter\tLENGTH\t\t797\t1\tIfcLengthMeasure\t1\r\nPARAM\tac6bc708-46e3-44a2-bb66-210345ecbd52\tQto_DoorBaseQuantities.Width\tLENGTH\t\t797\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t798\tQto_DuctFittingBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2a9bee22-8fbb-455b-9c26-b87b6fc1298d\tQto_DuctFittingBaseQuantities.GrossCrossSectionArea\tAREA\t\t798\t1\tIfcAreaMeasure\t1\r\nPARAM\tca6efd50-1a30-4f3c-bc6d-b5061ac24841\tQto_DuctFittingBaseQuantities.GrossWeight\tNUMBER\t\t798\t1\tIfcMassMeasure\t1\r\nPARAM\t4f572399-4ed0-4fa6-92d1-06fb269ae633\tQto_DuctFittingBaseQuantities.Length\tLENGTH\t\t798\t1\tIfcLengthMeasure\t1\r\nPARAM\t000c594b-f381-4180-8be3-e51dbb0e7885\tQto_DuctFittingBaseQuantities.NetCrossSectionArea\tAREA\t\t798\t1\tIfcAreaMeasure\t1\r\nPARAM\t9fe865b5-8107-4430-87ef-4f1ab47cde39\tQto_DuctFittingBaseQuantities.OuterSurfaceArea\tAREA\t\t798\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t799\tQto_DuctSegmentBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t726eb6c1-e56d-40a8-b473-4de941bc92fa\tQto_DuctSegmentBaseQuantities.GrossCrossSectionArea\tAREA\t\t799\t1\tIfcAreaMeasure\t1\r\nPARAM\tc8c985fe-8539-4df0-a9be-2a8db549018d\tQto_DuctSegmentBaseQuantities.GrossWeight\tNUMBER\t\t799\t1\tIfcMassMeasure\t1\r\nPARAM\t5770af40-d0e3-489a-b125-0b39067b2f85\tQto_DuctSegmentBaseQuantities.Length\tLENGTH\t\t799\t1\tIfcLengthMeasure\t1\r\nPARAM\t8d4aefea-86bd-4761-a388-54413297bdd6\tQto_DuctSegmentBaseQuantities.NetCrossSectionArea\tAREA\t\t799\t1\tIfcAreaMeasure\t1\r\nPARAM\t6236547b-3571-4abb-a18f-297be512f420\tQto_DuctSegmentBaseQuantities.OuterSurfaceArea\tAREA\t\t799\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t800\tQto_DuctSilencerBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2e0c3751-e33b-4f5d-bbc1-39bfc708fabb\tQto_DuctSilencerBaseQuantities.GrossWeight\tNUMBER\t\t800\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t801\tQto_EarthworksCutBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3d83acab-9c31-4828-93da-cb81b79ce4b9\tQto_EarthworksCutBaseQuantities.Depth\tLENGTH\t\t801\t1\tIfcLengthMeasure\t1\r\nPARAM\td51d2b58-be54-42f4-8191-29d0a818c429\tQto_EarthworksCutBaseQuantities.Length\tLENGTH\t\t801\t1\tIfcLengthMeasure\t1\r\nPARAM\ta91fa2b8-2a8c-4d22-be85-d4bfc072e836\tQto_EarthworksCutBaseQuantities.LooseVolume\tVOLUME\t\t801\t1\tIfcVolumeMeasure\t1\r\nPARAM\t7a676f74-f3c9-4623-96d9-fa6d188466ee\tQto_EarthworksCutBaseQuantities.UndisturbedVolume\tVOLUME\t\t801\t1\tIfcVolumeMeasure\t1\r\nPARAM\td58baa53-7f34-48c0-ad2f-a5a1d5b77f3a\tQto_EarthworksCutBaseQuantities.Weight\tNUMBER\t\t801\t1\tIfcMassMeasure\t1\r\nPARAM\t02fa95e6-ea5e-4863-9b7b-27f710098c4b\tQto_EarthworksCutBaseQuantities.Width\tLENGTH\t\t801\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t802\tQto_EarthworksFillBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3d39838d-2e93-4abd-9e01-8b61a24ab7c4\tQto_EarthworksFillBaseQuantities.CompactedVolume\tVOLUME\t\t802\t1\tIfcVolumeMeasure\t1\r\nPARAM\t1a66d669-8649-48ab-826c-32df71a3df99\tQto_EarthworksFillBaseQuantities.Depth\tLENGTH\t\t802\t1\tIfcLengthMeasure\t1\r\nPARAM\te8ecb73d-66d1-46fc-b06d-b89c4fc6daea\tQto_EarthworksFillBaseQuantities.Length\tLENGTH\t\t802\t1\tIfcLengthMeasure\t1\r\nPARAM\t3b7f62b0-0608-462c-93af-dda903e1fc0f\tQto_EarthworksFillBaseQuantities.LooseVolume\tVOLUME\t\t802\t1\tIfcVolumeMeasure\t1\r\nPARAM\tb0f13f69-b6b3-48ad-bd74-25a92241448b\tQto_EarthworksFillBaseQuantities.Width\tLENGTH\t\t802\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t803\tQto_ElectricApplianceBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t124d8173-da9a-45d8-bd3f-0a6279191953\tQto_ElectricApplianceBaseQuantities.GrossWeight\tNUMBER\t\t803\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t804\tQto_ElectricDistributionBoardBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tdb679ce9-4e25-4bb7-bd89-d57945253248\tQto_ElectricDistributionBoardBaseQuantities.GrossWeight\tNUMBER\t\t804\t1\tIfcMassMeasure\t1\r\nPARAM\t6a5dc809-7cff-4df8-8d53-b3a4fa3d7f2c\tQto_ElectricDistributionBoardBaseQuantities.NumberOfCircuits\tINTEGER\t\t804\t1\tIfcCountMeasure\t1\r\n#\r\nGROUP\t805\tQto_ElectricFlowStorageDeviceBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbc66f87b-0760-45ca-bf46-315dd1e5054d\tQto_ElectricFlowStorageDeviceBaseQuantities.GrossWeight\tNUMBER\t\t805\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t806\tQto_ElectricGeneratorBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5cc16fe6-2ec3-4c83-aa62-290738e2ccdf\tQto_ElectricGeneratorBaseQuantities.GrossWeight\tNUMBER\t\t806\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t807\tQto_ElectricMotorBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\teeb4e8d0-6814-46ec-9010-19b44e614c17\tQto_ElectricMotorBaseQuantities.GrossWeight\tNUMBER\t\t807\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t808\tQto_ElectricTimeControlBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t079bff0f-feb3-4245-8f4c-67f4d3ce1817\tQto_ElectricTimeControlBaseQuantities.GrossWeight\tNUMBER\t\t808\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t809\tQto_EvaporativeCoolerBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf59150b8-7bbf-4db8-ad52-52b9950c1066\tQto_EvaporativeCoolerBaseQuantities.GrossWeight\tNUMBER\t\t809\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t810\tQto_EvaporatorBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t482557d1-6b6f-4e57-823c-2362d4ada351\tQto_EvaporatorBaseQuantities.GrossWeight\tNUMBER\t\t810\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t811\tQto_FacilityPartBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4777bf03-1c21-4190-80dc-aed62083cf84\tQto_FacilityPartBaseQuantities.Area\tAREA\t\t811\t1\tIfcAreaMeasure\t1\r\nPARAM\ta2c726d0-3681-45a6-91b5-e37c42036b57\tQto_FacilityPartBaseQuantities.Height\tLENGTH\t\t811\t1\tIfcLengthMeasure\t1\r\nPARAM\te5e02b21-8e70-475d-91ef-7a2af30f3e28\tQto_FacilityPartBaseQuantities.Length\tLENGTH\t\t811\t1\tIfcLengthMeasure\t1\r\nPARAM\te746e205-930f-4971-8d1f-3ee4ec59ae30\tQto_FacilityPartBaseQuantities.Volume\tVOLUME\t\t811\t1\tIfcVolumeMeasure\t1\r\nPARAM\t2150495e-8c6c-4a88-b456-97b6ecc5a25b\tQto_FacilityPartBaseQuantities.Width\tLENGTH\t\t811\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t812\tQto_FanBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4649fae0-824b-4961-aa9f-0f9c194d0387\tQto_FanBaseQuantities.GrossWeight\tNUMBER\t\t812\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t813\tQto_FilterBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te4b220d9-d4b2-41f3-8f37-05ac715e0aee\tQto_FilterBaseQuantities.GrossWeight\tNUMBER\t\t813\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t814\tQto_FireSuppressionTerminalBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t55a5f984-af0f-49bb-b9c9-705f9725e88f\tQto_FireSuppressionTerminalBaseQuantities.GrossWeight\tNUMBER\t\t814\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t815\tQto_FlowInstrumentBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t349c4747-b7ad-428a-a3ad-4c8813b494aa\tQto_FlowInstrumentBaseQuantities.GrossWeight\tNUMBER\t\t815\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t816\tQto_FlowMeterBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7a1ff13b-53b8-4aa3-b6ad-94fcac17c8b1\tQto_FlowMeterBaseQuantities.GrossWeight\tNUMBER\t\t816\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t817\tQto_FootingBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3b2cc6bd-5fb9-44f2-9392-5ba2e56afe9e\tQto_FootingBaseQuantities.CrossSectionArea\tAREA\t\t817\t1\tIfcAreaMeasure\t1\r\nPARAM\ta78631fa-a773-4f4e-b204-3d20ed0ed889\tQto_FootingBaseQuantities.GrossSurfaceArea\tAREA\t\t817\t1\tIfcAreaMeasure\t1\r\nPARAM\t7eb42f9e-d367-4749-890b-e4e5c529f9a8\tQto_FootingBaseQuantities.GrossVolume\tVOLUME\t\t817\t1\tIfcVolumeMeasure\t1\r\nPARAM\t2d487b95-1014-4f39-ae9d-a69987967967\tQto_FootingBaseQuantities.GrossWeight\tNUMBER\t\t817\t1\tIfcMassMeasure\t1\r\nPARAM\tb89ab78f-1e8c-4c9f-98ba-8e3d71b8e507\tQto_FootingBaseQuantities.Height\tLENGTH\t\t817\t1\tIfcLengthMeasure\t1\r\nPARAM\tb60a62fe-ed5d-402d-bdd4-a8327b3a511f\tQto_FootingBaseQuantities.Length\tLENGTH\t\t817\t1\tIfcLengthMeasure\t1\r\nPARAM\t102f2406-fd11-4157-9709-bd7b9890ff9c\tQto_FootingBaseQuantities.NetVolume\tVOLUME\t\t817\t1\tIfcVolumeMeasure\t1\r\nPARAM\t3584bcaa-e3f6-4af6-9005-4688a76c0d31\tQto_FootingBaseQuantities.NetWeight\tNUMBER\t\t817\t1\tIfcMassMeasure\t1\r\nPARAM\t780e9bac-de3a-42a2-a5c5-dbed6d53cd0e\tQto_FootingBaseQuantities.OuterSurfaceArea\tAREA\t\t817\t1\tIfcAreaMeasure\t1\r\nPARAM\t902845f2-976d-4e61-864e-645d1dfd07b2\tQto_FootingBaseQuantities.Width\tLENGTH\t\t817\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t818\tQto_HeatExchangerBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbad421e0-7e01-44a9-a9b6-aefe2d0e2bd4\tQto_HeatExchangerBaseQuantities.GrossWeight\tNUMBER\t\t818\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t819\tQto_HumidifierBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8d7655c4-d9c4-443e-89e7-4fbd267231d4\tQto_HumidifierBaseQuantities.GrossWeight\tNUMBER\t\t819\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t820\tQto_ImpactProtectionDeviceBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3bf92702-ba0b-4a38-aa95-2e980883183f\tQto_ImpactProtectionDeviceBaseQuantities.Weight\tNUMBER\t\t820\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t821\tQto_InterceptorBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t26e71c7e-599c-4c53-b33f-329bb8781b98\tQto_InterceptorBaseQuantities.GrossWeight\tNUMBER\t\t821\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t822\tQto_JunctionBoxBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1f2db772-c7ef-4d7b-83f2-dc928dadefc5\tQto_JunctionBoxBaseQuantities.GrossWeight\tNUMBER\t\t822\t1\tIfcMassMeasure\t1\r\nPARAM\t3ebe461d-859e-4195-bf9f-49c0688c6322\tQto_JunctionBoxBaseQuantities.Height\tLENGTH\t\t822\t1\tIfcLengthMeasure\t1\r\nPARAM\te6f0b389-5895-4388-8ec6-42e4c6c4c9c7\tQto_JunctionBoxBaseQuantities.Length\tLENGTH\t\t822\t1\tIfcLengthMeasure\t1\r\nPARAM\t250581c5-0d72-44c4-8e54-fd8a32d4e354\tQto_JunctionBoxBaseQuantities.NumberOfGangs\tINTEGER\t\t822\t1\tIfcCountMeasure\t1\r\nPARAM\t7aa8781d-cfdf-4191-a06c-6f05b63af9fa\tQto_JunctionBoxBaseQuantities.Width\tLENGTH\t\t822\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t823\tQto_KerbBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc120032e-91fa-4588-9f97-3d85417cd536\tQto_KerbBaseQuantities.Depth\tLENGTH\t\t823\t1\tIfcLengthMeasure\t1\r\nPARAM\tbbb5ca9b-9e50-4f29-97c4-cb6729b418fd\tQto_KerbBaseQuantities.Height\tLENGTH\t\t823\t1\tIfcLengthMeasure\t1\r\nPARAM\t4528cb6f-07de-46af-b429-cbd4211784bd\tQto_KerbBaseQuantities.Length\tLENGTH\t\t823\t1\tIfcLengthMeasure\t1\r\nPARAM\t591ae29c-0d46-4b91-aa6d-e4a39b73ed71\tQto_KerbBaseQuantities.Volume\tVOLUME\t\t823\t1\tIfcVolumeMeasure\t1\r\nPARAM\tf91193ec-75b1-4bf0-b0e4-67d850702604\tQto_KerbBaseQuantities.Weight\tNUMBER\t\t823\t1\tIfcMassMeasure\t1\r\nPARAM\tb0073a25-a52a-41ae-b5e7-92ca8e9acaee\tQto_KerbBaseQuantities.Width\tLENGTH\t\t823\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t824\tQto_LaborResourceBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t50875b91-708b-44ee-a5e0-aaa2307755f5\tQto_LaborResourceBaseQuantities.OvertimeWork\tNUMBER\t\t824\t1\tIfcTimeMeasure\t1\r\nPARAM\tf03b5ccb-adcf-4d05-bfa4-95bd7c102ad9\tQto_LaborResourceBaseQuantities.StandardWork\tNUMBER\t\t824\t1\tIfcTimeMeasure\t1\r\n#\r\nGROUP\t825\tQto_LampBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf1ba94b9-a1c5-43ea-96fc-fdc9401cc034\tQto_LampBaseQuantities.GrossWeight\tNUMBER\t\t825\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t826\tQto_LightFixtureBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t10c33af5-56c5-4d95-ab30-5d8b143b7d80\tQto_LightFixtureBaseQuantities.GrossWeight\tNUMBER\t\t826\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t827\tQto_LinearStratumBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc826ebf3-5fc9-405f-8957-e32aa6234609\tQto_LinearStratumBaseQuantities.Diameter\tLENGTH\t\t827\t1\tIfcLengthMeasure\t1\r\nPARAM\t5d27710a-1db6-4879-b52e-0405a92ba3e0\tQto_LinearStratumBaseQuantities.Length\tLENGTH\t\t827\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t828\tQto_MarineFacilityBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t99a345e8-80a6-4406-9c17-a55037ddd11a\tQto_MarineFacilityBaseQuantities.Area\tAREA\t\t828\t1\tIfcAreaMeasure\t1\r\nPARAM\td2942d92-8eeb-44de-9f54-c3764d69a65f\tQto_MarineFacilityBaseQuantities.Height\tLENGTH\t\t828\t1\tIfcLengthMeasure\t1\r\nPARAM\t8e7a9c88-b425-4c18-ac62-36e7f9d769a2\tQto_MarineFacilityBaseQuantities.Length\tLENGTH\t\t828\t1\tIfcLengthMeasure\t1\r\nPARAM\t922dd6ba-953b-49fd-baa4-9c4feb7182e9\tQto_MarineFacilityBaseQuantities.Volume\tVOLUME\t\t828\t1\tIfcVolumeMeasure\t1\r\nPARAM\tfdfdbc9b-3ad0-407f-9919-dd1dd21b0ae3\tQto_MarineFacilityBaseQuantities.Width\tLENGTH\t\t828\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t829\tQto_MemberBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf8db575f-b52a-4c13-ab8d-e26a6c0cc9bc\tQto_MemberBaseQuantities.CrossSectionArea\tAREA\t\t829\t1\tIfcAreaMeasure\t1\r\nPARAM\t73e21012-961a-4325-8ff2-d4b68b5e3349\tQto_MemberBaseQuantities.GrossSurfaceArea\tAREA\t\t829\t1\tIfcAreaMeasure\t1\r\nPARAM\ta275609f-9f44-4fc7-bf48-ee034ce29a42\tQto_MemberBaseQuantities.GrossVolume\tVOLUME\t\t829\t1\tIfcVolumeMeasure\t1\r\nPARAM\teb9f962e-3960-4409-bdca-9d28ef181c6e\tQto_MemberBaseQuantities.GrossWeight\tNUMBER\t\t829\t1\tIfcMassMeasure\t1\r\nPARAM\t7166872a-305c-47c0-b118-14cc08acd8c8\tQto_MemberBaseQuantities.Length\tLENGTH\t\t829\t1\tIfcLengthMeasure\t1\r\nPARAM\t08de4b92-fa62-41a5-b3bf-b64311d51afa\tQto_MemberBaseQuantities.NetSurfaceArea\tAREA\t\t829\t1\tIfcAreaMeasure\t1\r\nPARAM\tb1d7d7f7-9f40-470b-ad1b-9968758e70c7\tQto_MemberBaseQuantities.NetVolume\tVOLUME\t\t829\t1\tIfcVolumeMeasure\t1\r\nPARAM\tc5d683fe-c290-4d5f-a9cd-f33079531df0\tQto_MemberBaseQuantities.NetWeight\tNUMBER\t\t829\t1\tIfcMassMeasure\t1\r\nPARAM\t95c6dacf-04d8-4101-9e2d-7dfc04cb2f7f\tQto_MemberBaseQuantities.OuterSurfaceArea\tAREA\t\t829\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t830\tQto_MotorConnectionBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf46a7a4b-8ce0-49bb-b3bb-b44f0119710b\tQto_MotorConnectionBaseQuantities.GrossWeight\tNUMBER\t\t830\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t831\tQto_OpeningElementBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t48981854-9858-42c0-aadb-1735f160dd34\tQto_OpeningElementBaseQuantities.Area\tAREA\t\t831\t1\tIfcAreaMeasure\t1\r\nPARAM\t14cf5683-fc9c-44c5-87d3-c937932fda67\tQto_OpeningElementBaseQuantities.Depth\tLENGTH\t\t831\t1\tIfcLengthMeasure\t1\r\nPARAM\t4e3c23a2-9a6e-411a-bca9-20397a1c14fb\tQto_OpeningElementBaseQuantities.Height\tLENGTH\t\t831\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t37062a0a-f986-4156-8b13-9a1b07916a03\tQto_OpeningElementBaseQuantities.Volume\tVOLUME\t\t831\t1\tIfcVolumeMeasure\t1\r\nPARAM\t4e144a12-30c4-4db9-9cbe-fbc1bde7f07c\tQto_OpeningElementBaseQuantities.Width\tLENGTH\t\t831\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t832\tQto_OutletBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t9d10dccd-61e1-4fb5-a1e4-7ee2adae99c4\tQto_OutletBaseQuantities.GrossWeight\tNUMBER\t\t832\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t833\tQto_PavementBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t4430e183-e7ef-4013-add6-628ba2d5dc27\tQto_PavementBaseQuantities.Depth\tLENGTH\t\t833\t1\tIfcLengthMeasure\t1\r\nPARAM\tc0e1d70a-794d-4d17-a5d9-8e8ba33c55f3\tQto_PavementBaseQuantities.GrossArea\tAREA\t\t833\t1\tIfcAreaMeasure\t1\r\nPARAM\t72c94e4a-2f8a-4e97-bf3e-93c28ce7f3ae\tQto_PavementBaseQuantities.GrossVolume\tVOLUME\t\t833\t1\tIfcVolumeMeasure\t1\r\nPARAM\t5a70cd52-bfca-46b4-bda3-6d3044f8d13b\tQto_PavementBaseQuantities.Length\tLENGTH\t\t833\t1\tIfcLengthMeasure\t1\r\nPARAM\t066e42c9-890c-4b48-a0b9-fd4445c88c30\tQto_PavementBaseQuantities.NetArea\tAREA\t\t833\t1\tIfcAreaMeasure\t1\r\nPARAM\t3ed3ef9c-08da-4f06-a73b-218f78411e56\tQto_PavementBaseQuantities.NetVolume\tVOLUME\t\t833\t1\tIfcVolumeMeasure\t1\r\nPARAM\ta08d3997-0bd4-4fef-b87b-9be90558161e\tQto_PavementBaseQuantities.Width\tLENGTH\t\t833\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t834\tQto_PictorialSignQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb1d4eb09-e929-410c-994e-9f6e5d0a37f3\tQto_PictorialSignQuantities.Area\tAREA\t\t834\t1\tIfcAreaMeasure\t1\r\nPARAM\t991f03fd-2a0d-4457-8d5e-023ef2874b8f\tQto_PictorialSignQuantities.SignArea\tAREA\t\t834\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t835\tQto_PileBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0e8ec0c5-97f7-46c9-b1c0-32f21c1765db\tQto_PileBaseQuantities.CrossSectionArea\tAREA\t\t835\t1\tIfcAreaMeasure\t1\r\nPARAM\t42a00474-6e1e-47f5-91a4-f8eef05653a1\tQto_PileBaseQuantities.GrossSurfaceArea\tAREA\t\t835\t1\tIfcAreaMeasure\t1\r\nPARAM\te40e4036-3573-4c2c-b956-b7aa363a7fbf\tQto_PileBaseQuantities.GrossVolume\tVOLUME\t\t835\t1\tIfcVolumeMeasure\t1\r\nPARAM\td2e93518-37d0-4b76-9506-65a115a392b6\tQto_PileBaseQuantities.GrossWeight\tNUMBER\t\t835\t1\tIfcMassMeasure\t1\r\nPARAM\tddb35aa5-1f79-4f2d-896e-9dbad6e68d99\tQto_PileBaseQuantities.Length\tLENGTH\t\t835\t1\tIfcLengthMeasure\t1\r\nPARAM\t88dc8673-3f77-44c0-bd46-62954a33f447\tQto_PileBaseQuantities.NetVolume\tVOLUME\t\t835\t1\tIfcVolumeMeasure\t1\r\nPARAM\t68781760-9338-434f-8a62-41538c0db1b9\tQto_PileBaseQuantities.NetWeight\tNUMBER\t\t835\t1\tIfcMassMeasure\t1\r\nPARAM\td6f4c5f2-9542-4d03-b425-1fc2c63e6edf\tQto_PileBaseQuantities.OuterSurfaceArea\tAREA\t\t835\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t836\tQto_PipeFittingBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t83c310b6-31e4-4965-addc-58c2e8043c86\tQto_PipeFittingBaseQuantities.GrossCrossSectionArea\tAREA\t\t836\t1\tIfcAreaMeasure\t1\r\nPARAM\t51d2aa19-91d1-40d6-a31e-a19b2b5de65b\tQto_PipeFittingBaseQuantities.GrossWeight\tNUMBER\t\t836\t1\tIfcMassMeasure\t1\r\nPARAM\t85bc057b-f676-4a2c-a434-8d1c7a4ce3c2\tQto_PipeFittingBaseQuantities.Length\tLENGTH\t\t836\t1\tIfcLengthMeasure\t1\r\nPARAM\tdafe79a5-95cb-4432-b699-299415eaa1e0\tQto_PipeFittingBaseQuantities.NetCrossSectionArea\tAREA\t\t836\t1\tIfcAreaMeasure\t1\r\nPARAM\t1edff67b-ea89-475b-a6a5-c4b7cae59616\tQto_PipeFittingBaseQuantities.NetWeight\tNUMBER\t\t836\t1\tIfcMassMeasure\t1\r\nPARAM\t50b351fb-6fbc-4509-a08c-8fe3d0ce1c8c\tQto_PipeFittingBaseQuantities.OuterSurfaceArea\tAREA\t\t836\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t837\tQto_PipeSegmentBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbc9894b0-faa5-4dfa-bd62-ad11c221d7b2\tQto_PipeSegmentBaseQuantities.FootPrintArea\tAREA\t\t837\t1\tIfcAreaMeasure\t1\r\nPARAM\t331265e3-e2a1-4341-9b9c-bc9e6df56e49\tQto_PipeSegmentBaseQuantities.GrossCrossSectionArea\tAREA\t\t837\t1\tIfcAreaMeasure\t1\r\nPARAM\td4859687-f4fe-4298-a235-7228929744d9\tQto_PipeSegmentBaseQuantities.GrossWeight\tNUMBER\t\t837\t1\tIfcMassMeasure\t1\r\nPARAM\tc8440aa7-c619-4d27-9ccc-eb3b0fd7ff40\tQto_PipeSegmentBaseQuantities.Length\tLENGTH\t\t837\t1\tIfcLengthMeasure\t1\r\nPARAM\t28e2bc44-55f9-4e45-a689-e84ba8120f1a\tQto_PipeSegmentBaseQuantities.NetCrossSectionArea\tAREA\t\t837\t1\tIfcAreaMeasure\t1\r\nPARAM\t108bcae6-6105-4a96-a028-83326a9bd6ba\tQto_PipeSegmentBaseQuantities.NetWeight\tNUMBER\t\t837\t1\tIfcMassMeasure\t1\r\nPARAM\td361ed2d-1f52-4362-8910-29e446da4b7a\tQto_PipeSegmentBaseQuantities.OuterSurfaceArea\tAREA\t\t837\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t838\tQto_PlateBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t7d2068c2-3614-4bf8-9ae8-ec3b4b6d3152\tQto_PlateBaseQuantities.GrossArea\tAREA\t\t838\t1\tIfcAreaMeasure\t1\r\nPARAM\t452df3d5-4c01-4941-8656-f3b5ea754c50\tQto_PlateBaseQuantities.GrossVolume\tVOLUME\t\t838\t1\tIfcVolumeMeasure\t1\r\nPARAM\t1d6e2b8a-4f15-4857-aac8-f009b0d361c9\tQto_PlateBaseQuantities.GrossWeight\tNUMBER\t\t838\t1\tIfcMassMeasure\t1\r\nPARAM\t8e09dea7-951f-4fff-831d-5d12649eb03c\tQto_PlateBaseQuantities.NetArea\tAREA\t\t838\t1\tIfcAreaMeasure\t1\r\nPARAM\t25e5c3fe-8803-4284-84b9-c49a9ce2563e\tQto_PlateBaseQuantities.NetVolume\tVOLUME\t\t838\t1\tIfcVolumeMeasure\t1\r\nPARAM\t3ebc0e1f-f66d-4016-8eed-02cc3a6f6f06\tQto_PlateBaseQuantities.NetWeight\tNUMBER\t\t838\t1\tIfcMassMeasure\t1\r\nPARAM\t0e0b6049-6f82-43df-85ff-d5d202e03433\tQto_PlateBaseQuantities.Perimeter\tLENGTH\t\t838\t1\tIfcLengthMeasure\t1\r\nPARAM\tf4112c07-b6bd-44de-8f0c-6bb39c668448\tQto_PlateBaseQuantities.Width\tLENGTH\t\t838\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t839\tQto_ProjectionElementBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t9f508b19-4688-4594-aa1f-0c187dddbcf8\tQto_ProjectionElementBaseQuantities.Area\tAREA\t\t839\t1\tIfcAreaMeasure\t1\r\nPARAM\ta51b6943-c05c-4450-82ae-93cf717ede32\tQto_ProjectionElementBaseQuantities.Volume\tVOLUME\t\t839\t1\tIfcVolumeMeasure\t1\r\n#\r\nGROUP\t840\tQto_ProtectiveDeviceBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tacb0bfd8-be18-4915-b4d6-587100e2fe3f\tQto_ProtectiveDeviceBaseQuantities.GrossWeight\tNUMBER\t\t840\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t841\tQto_ProtectiveDeviceTrippingUnitBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta12ba581-2fdc-4964-b048-0d8b91719c98\tQto_ProtectiveDeviceTrippingUnitBaseQuantities.GrossWeight\tNUMBER\t\t841\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t842\tQto_PumpBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t27186f31-f72e-4f45-89d3-73da4c5ec9ff\tQto_PumpBaseQuantities.GrossWeight\tNUMBER\t\t842\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t843\tQto_RailBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t5839d2ca-751e-4b0c-a883-b059c8f242a3\tQto_RailBaseQuantities.Length\tLENGTH\t\t843\t1\tIfcLengthMeasure\t1\r\nPARAM\t11a78427-260f-42fb-bfb6-155442e80666\tQto_RailBaseQuantities.Volume\tVOLUME\t\t843\t1\tIfcVolumeMeasure\t1\r\nPARAM\t170d5685-8076-4e62-b808-01a2f02fd9bf\tQto_RailBaseQuantities.Weight\tNUMBER\t\t843\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t844\tQto_RailingBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2f927e26-5e88-4fea-b13a-068de4fb4358\tQto_RailingBaseQuantities.Length\tLENGTH\t\t844\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t845\tQto_RampFlightBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t97552d67-05fb-4931-b85b-157020e9f33c\tQto_RampFlightBaseQuantities.GrossArea\tAREA\t\t845\t1\tIfcAreaMeasure\t1\r\nPARAM\tb3d8220e-acbf-45ad-98a1-ed1f55bb01ff\tQto_RampFlightBaseQuantities.GrossVolume\tVOLUME\t\t845\t1\tIfcVolumeMeasure\t1\r\nPARAM\tb3d8a3f1-8f2f-4857-8cf0-fc46da913b25\tQto_RampFlightBaseQuantities.Length\tLENGTH\t\t845\t1\tIfcLengthMeasure\t1\r\nPARAM\t9aef8358-3619-44ef-aaac-0c043ff14f6c\tQto_RampFlightBaseQuantities.NetArea\tAREA\t\t845\t1\tIfcAreaMeasure\t1\r\nPARAM\tefd2a2f8-dd76-4726-ba48-2a5133cdebb2\tQto_RampFlightBaseQuantities.NetVolume\tVOLUME\t\t845\t1\tIfcVolumeMeasure\t1\r\nPARAM\t0eeff58b-6937-4533-a2b3-2392634a906e\tQto_RampFlightBaseQuantities.Width\tLENGTH\t\t845\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t846\tQto_ReinforcedSoilBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tda1576db-eb86-4383-bb28-ee7d99e54ea5\tQto_ReinforcedSoilBaseQuantities.Area\tAREA\t\t846\t1\tIfcAreaMeasure\t1\r\nPARAM\tdbd4c781-2a06-4938-917c-796c350acc33\tQto_ReinforcedSoilBaseQuantities.Depth\tLENGTH\t\t846\t1\tIfcLengthMeasure\t1\r\nPARAM\t621ff023-da95-49d5-afcf-45afd9d0cc7b\tQto_ReinforcedSoilBaseQuantities.Length\tLENGTH\t\t846\t1\tIfcLengthMeasure\t1\r\nPARAM\tfec3414b-b621-410f-88cd-a634f36a97a3\tQto_ReinforcedSoilBaseQuantities.Volume\tVOLUME\t\t846\t1\tIfcVolumeMeasure\t1\r\nPARAM\t2e8a9bf6-881c-4739-aef7-453509965a21\tQto_ReinforcedSoilBaseQuantities.Width\tLENGTH\t\t846\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t847\tQto_ReinforcingElementBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t28f00955-3059-4784-8da9-7fc6efbd7427\tQto_ReinforcingElementBaseQuantities.Count\tINTEGER\t\t847\t1\tIfcCountMeasure\t1\r\nPARAM\t7860ad61-83a4-42ac-811b-95f3c8f9825a\tQto_ReinforcingElementBaseQuantities.Length\tLENGTH\t\t847\t1\tIfcLengthMeasure\t1\r\nPARAM\td313d164-de03-4082-ad3f-95193d75e8dd\tQto_ReinforcingElementBaseQuantities.Weight\tNUMBER\t\t847\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t848\tQto_RoofBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tc4b40295-6be0-4ffd-a25f-f6217f6d989c\tQto_RoofBaseQuantities.GrossArea\tAREA\t\t848\t1\tIfcAreaMeasure\t1\r\nPARAM\te4ad19c4-9d6d-4b70-aca7-a936f6fc88b6\tQto_RoofBaseQuantities.NetArea\tAREA\t\t848\t1\tIfcAreaMeasure\t1\r\nPARAM\tb84d9709-2e45-4395-9d2e-829289d59d11\tQto_RoofBaseQuantities.ProjectedArea\tAREA\t\t848\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t849\tQto_SanitaryTerminalBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t115c4179-c0c2-47cc-916b-512fb3cf51af\tQto_SanitaryTerminalBaseQuantities.GrossWeight\tNUMBER\t\t849\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t850\tQto_SensorBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tab2131bb-121f-418f-b28b-a0d8fca362c0\tQto_SensorBaseQuantities.GrossWeight\tNUMBER\t\t850\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t851\tQto_SignalBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tbd8574ec-b2be-48b8-8515-12ea317ec870\tQto_SignalBaseQuantities.Weight\tNUMBER\t\t851\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t852\tQto_SignBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t55881d6b-9a5d-4375-aa9a-5b82d9769f62\tQto_SignBaseQuantities.Height\tLENGTH\t\t852\t1\tIfcLengthMeasure\t1\r\nPARAM\t658c7b3c-ae56-4440-b325-6d4d9eab616f\tQto_SignBaseQuantities.Thickness\tLENGTH\t\t852\t1\tIfcLengthMeasure\t1\r\nPARAM\tf8eec110-9762-4840-b977-306f4fb73a0b\tQto_SignBaseQuantities.Weight\tNUMBER\t\t852\t1\tIfcMassMeasure\t1\r\nPARAM\t9cb9aec8-5e7b-4683-be0b-9fb7c46482b5\tQto_SignBaseQuantities.Width\tLENGTH\t\t852\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t853\tQto_SiteBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t72793c92-1790-450c-b410-1e61523edbc1\tQto_SiteBaseQuantities.GrossArea\tAREA\t\t853\t1\tIfcAreaMeasure\t1\r\nPARAM\t4e16d8ca-9a67-4b00-a732-7e4a13b2c9fa\tQto_SiteBaseQuantities.GrossPerimeter\tLENGTH\t\t853\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t854\tQto_SlabBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8eda2582-0291-4cea-bb43-988c084900cc\tQto_SlabBaseQuantities.Depth\tLENGTH\t\t854\t1\tIfcLengthMeasure\t1\r\nPARAM\t9fdc6e2f-51b7-48dc-a7cf-6814a70dd693\tQto_SlabBaseQuantities.GrossArea\tAREA\t\t854\t1\tIfcAreaMeasure\t1\r\nPARAM\t868643eb-f5e8-449b-9c08-0f34e8464eb0\tQto_SlabBaseQuantities.GrossVolume\tVOLUME\t\t854\t1\tIfcVolumeMeasure\t1\r\nPARAM\tdb6d0d2c-1934-44f0-85ea-b9ad7b6d2a66\tQto_SlabBaseQuantities.GrossWeight\tNUMBER\t\t854\t1\tIfcMassMeasure\t1\r\nPARAM\t7dc38c1e-73ac-442b-ad21-ff81ed30a3bb\tQto_SlabBaseQuantities.Length\tLENGTH\t\t854\t1\tIfcLengthMeasure\t1\r\nPARAM\td4d20fb1-f366-4e31-9ec2-0edd5afb2ae8\tQto_SlabBaseQuantities.NetArea\tAREA\t\t854\t1\tIfcAreaMeasure\t1\r\nPARAM\t0878815a-4acd-4917-aa25-0a74851d9cd4\tQto_SlabBaseQuantities.NetVolume\tVOLUME\t\t854\t1\tIfcVolumeMeasure\t1\r\nPARAM\t2ce16095-acf0-43f7-86d4-ea79c843883b\tQto_SlabBaseQuantities.NetWeight\tNUMBER\t\t854\t1\tIfcMassMeasure\t1\r\nPARAM\ta8ba1f48-1b4c-444e-923e-f663e967df9a\tQto_SlabBaseQuantities.Perimeter\tLENGTH\t\t854\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\tac3b5bf1-b5f5-42cc-80c1-4917abc52389\tQto_SlabBaseQuantities.Width\tLENGTH\t\t854\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t855\tQto_SleeperBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t9597f8dc-9bb8-4b28-a836-1bfa2836b44c\tQto_SleeperBaseQuantities.Height\tLENGTH\t\t855\t1\tIfcLengthMeasure\t1\r\nPARAM\ta4b349ef-e7e9-411f-8582-8014d18f11a7\tQto_SleeperBaseQuantities.Length\tLENGTH\t\t855\t1\tIfcLengthMeasure\t1\r\nPARAM\tfc86a71f-eec2-4bf4-8ebd-0eab718effcd\tQto_SleeperBaseQuantities.Width\tLENGTH\t\t855\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t856\tQto_SolarDeviceBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t826a5fcf-be3f-44fa-b178-cbd64230e6e0\tQto_SolarDeviceBaseQuantities.GrossArea\tAREA\t\t856\t1\tIfcAreaMeasure\t1\r\nPARAM\te4168c63-1f75-493d-8402-c659678915fe\tQto_SolarDeviceBaseQuantities.GrossWeight\tNUMBER\t\t856\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t857\tQto_SpaceBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t89473d08-a401-4e1e-8f0e-d83fd943db92\tQto_SpaceBaseQuantities.FinishCeilingHeight\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t030ba543-7f29-49c2-a7bc-84076e5e3495\tQto_SpaceBaseQuantities.FinishFloorHeight\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t90c8ba61-9dc5-4a55-a3de-2c621945bb9b\tQto_SpaceBaseQuantities.GrossCeilingArea\tAREA\t\t857\t1\tIfcAreaMeasure\t1\r\nPARAM\t90cdcbff-af35-432b-93f6-75be19321859\tQto_SpaceBaseQuantities.GrossFloorArea\tAREA\t\t857\t1\tIfcAreaMeasure\t1\r\nPARAM\tc09c7f71-d3cf-4353-b464-2ffe33259c77\tQto_SpaceBaseQuantities.GrossPerimeter\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t60cda972-2bf6-41e2-aedf-b77bdaa8f9bb\tQto_SpaceBaseQuantities.GrossVolume\tVOLUME\t\t857\t1\tIfcVolumeMeasure\t1\r\nPARAM\tc5688503-1f22-41a5-a3a7-3ae74c0c8c5b\tQto_SpaceBaseQuantities.GrossWallArea\tAREA\t\t857\t1\tIfcAreaMeasure\t1\r\nPARAM\t71b6564a-d911-4145-aea9-a56e8a47e676\tQto_SpaceBaseQuantities.Height\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t6696b610-74e6-4839-a751-4df9195189b8\tQto_SpaceBaseQuantities.NetCeilingArea\tAREA\t\t857\t1\tIfcAreaMeasure\t1\r\nPARAM\t061ccacb-4fec-4d7c-b4c1-76dc1c65c7c2\tQto_SpaceBaseQuantities.NetFloorArea\tAREA\t\t857\t1\tIfcAreaMeasure\t1\r\nPARAM\t4d892d15-22ca-442c-a007-0b15c8698f77\tQto_SpaceBaseQuantities.NetPerimeter\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t861b7ce2-9eb1-48db-ae25-1f69df60265b\tQto_SpaceBaseQuantities.NetVolume\tVOLUME\t\t857\t1\tIfcVolumeMeasure\t1\r\nPARAM\t7fe66068-6e71-4f6b-be18-e07efb6ced82\tQto_SpaceBaseQuantities.NetWallArea\tAREA\t\t857\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t858\tQto_SpaceHeaterBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t08350294-6a6d-46c0-8e61-b9b285e571a2\tQto_SpaceHeaterBaseQuantities.GrossWeight\tNUMBER\t\t858\t1\tIfcMassMeasure\t1\r\nPARAM\t6feb9f3b-19e7-4dd4-ade3-4b663efc146f\tQto_SpaceHeaterBaseQuantities.Length\tLENGTH\t\t858\t1\tIfcLengthMeasure\t1\r\nPARAM\t31cc0a39-adba-4da9-836e-b9d3afaefdeb\tQto_SpaceHeaterBaseQuantities.NetWeight\tNUMBER\t\t858\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t859\tQto_SpatialZoneBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t6d297fd0-dbf0-467c-8a50-b7817f1460c2\tQto_SpatialZoneBaseQuantities.Height\tLENGTH\t\t859\t1\tIfcLengthMeasure\t1\r\nPARAM\t022fcb23-cdb1-41b3-93b1-f6e0bcb0762e\tQto_SpatialZoneBaseQuantities.Length\tLENGTH\t\t859\t1\tIfcLengthMeasure\t1\r\nPARAM\t784c7af9-c891-4049-bc60-166bd4c1fa0c\tQto_SpatialZoneBaseQuantities.Width\tLENGTH\t\t859\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t860\tQto_StackTerminalBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tafe7bdeb-250b-4398-a1e5-9224f8d2b7e5\tQto_StackTerminalBaseQuantities.GrossWeight\tNUMBER\t\t860\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t861\tQto_StairFlightBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t90986c0e-1cf3-47ee-895d-c299b80ffddf\tQto_StairFlightBaseQuantities.GrossVolume\tVOLUME\t\t861\t1\tIfcVolumeMeasure\t1\r\nPARAM\ta4210939-8e6c-44ee-8004-cfcb5d512acb\tQto_StairFlightBaseQuantities.Length\tLENGTH\t\t861\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t83a0ac8a-e64f-429d-9dc6-e1167b1f5537\tQto_StairFlightBaseQuantities.NetVolume\tVOLUME\t\t861\t1\tIfcVolumeMeasure\t1\r\n#\r\nGROUP\t862\tQto_SurfaceFeatureBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tb21c5184-2098-4d4a-afd5-ca997df41328\tQto_SurfaceFeatureBaseQuantities.Area\tAREA\t\t862\t1\tIfcAreaMeasure\t1\r\nPARAM\t3f696e3a-2f46-48ed-8aeb-f74e4522dadb\tQto_SurfaceFeatureBaseQuantities.Length\tLENGTH\t\t862\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t863\tQto_SwitchingDeviceBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta120c0bf-9ca8-43af-b719-88225d16907e\tQto_SwitchingDeviceBaseQuantities.GrossWeight\tNUMBER\t\t863\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t864\tQto_TankBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t0f597677-c96d-421d-8871-5eef73461056\tQto_TankBaseQuantities.GrossWeight\tNUMBER\t\t864\t1\tIfcMassMeasure\t1\r\nPARAM\tb57d94b3-2667-42da-aad3-231912df8a7b\tQto_TankBaseQuantities.NetWeight\tNUMBER\t\t864\t1\tIfcMassMeasure\t1\r\nPARAM\tec62fbc2-a909-4e3e-b8cf-1fa6131a1aa2\tQto_TankBaseQuantities.TotalSurfaceArea\tAREA\t\t864\t1\tIfcAreaMeasure\t1\r\n#\r\nGROUP\t865\tQto_TransformerBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t3a41788b-a8de-4ed0-853b-4ff5d44d69a9\tQto_TransformerBaseQuantities.GrossWeight\tNUMBER\t\t865\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t866\tQto_TubeBundleBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\ta4686a0f-8d97-4b46-be9c-c6e72e21d7d0\tQto_TubeBundleBaseQuantities.GrossWeight\tNUMBER\t\t866\t1\tIfcMassMeasure\t1\r\nPARAM\tf83dde95-d2ea-4099-9973-ec47ecc82e8e\tQto_TubeBundleBaseQuantities.NetWeight\tNUMBER\t\t866\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t867\tQto_UnitaryControlElementBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t70efc986-7b73-4b17-bd1f-8839534eac0e\tQto_UnitaryControlElementBaseQuantities.GrossWeight\tNUMBER\t\t867\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t868\tQto_UnitaryEquipmentBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t1eeec8bf-f172-4add-a79c-401a4c3adcb4\tQto_UnitaryEquipmentBaseQuantities.GrossWeight\tNUMBER\t\t868\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t869\tQto_ValveBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t28d60e6c-2bbd-4884-a09d-28a0bc75d8f6\tQto_ValveBaseQuantities.GrossWeight\tNUMBER\t\t869\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t870\tQto_VehicleBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t8c771391-0b6d-4e8e-8ae8-14baf685f4aa\tQto_VehicleBaseQuantities.Height\tLENGTH\t\t870\t1\tIfcLengthMeasure\t1\r\nPARAM\t23de9660-5a2e-4c29-8202-10cc711f8ac9\tQto_VehicleBaseQuantities.Length\tLENGTH\t\t870\t1\tIfcLengthMeasure\t1\r\nPARAM\t69822aaa-2127-48b2-8492-e848411d24cb\tQto_VehicleBaseQuantities.Width\tLENGTH\t\t870\t1\tIfcLengthMeasure\t1\r\n#\r\nGROUP\t871\tQto_VibrationIsolatorBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tfbe06ed6-65df-465f-87ce-5a23edf4d8ed\tQto_VibrationIsolatorBaseQuantities.GrossWeight\tNUMBER\t\t871\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t872\tQto_VolumetricStratumBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t2b4d4237-f441-4d26-aaeb-b4957bb08c0f\tQto_VolumetricStratumBaseQuantities.Area\tAREA\t\t872\t1\tIfcAreaMeasure\t1\r\nPARAM\t2b44b18a-8d59-41c1-a7b2-1d2c243774c0\tQto_VolumetricStratumBaseQuantities.Mass\tNUMBER\t\t872\t1\tIfcMassMeasure\t1\r\nPARAM\t149ef74b-8536-4b95-9ccd-6c6ae8ce7da7\tQto_VolumetricStratumBaseQuantities.PlanArea\tAREA\t\t872\t1\tIfcAreaMeasure\t1\r\nPARAM\ta9d644d2-db3e-4962-a529-09b00085817a\tQto_VolumetricStratumBaseQuantities.Volume\tVOLUME\t\t872\t1\tIfcVolumeMeasure\t1\r\n#\r\nGROUP\t873\tQto_WallBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\te8e3fb80-34c1-41eb-954d-fec1ac06290e\tQto_WallBaseQuantities.GrossFootprintArea\tAREA\t\t873\t1\tIfcAreaMeasure\t1\r\nPARAM\t13bba5bf-7526-4734-aef9-3605e6b17958\tQto_WallBaseQuantities.GrossFootPrintArea\tAREA\t\t873\t1\tIfcAreaMeasure\t1\r\nPARAM\tdbc8ee14-6034-4cd3-9236-4e8a894901c1\tQto_WallBaseQuantities.GrossSideArea\tAREA\t\t873\t1\tIfcAreaMeasure\t1\r\nPARAM\t4b40e73c-b43b-4588-a3fa-ab33edfce60b\tQto_WallBaseQuantities.GrossVolume\tVOLUME\t\t873\t1\tIfcVolumeMeasure\t1\r\nPARAM\t40326b46-0a75-49e7-a25d-6da407254ef5\tQto_WallBaseQuantities.GrossWeight\tNUMBER\t\t873\t1\tIfcMassMeasure\t1\r\nPARAM\tb9f35976-5649-45f8-86eb-8288656ed38f\tQto_WallBaseQuantities.Height\tLENGTH\t\t873\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t51166695-c636-429f-8d2c-e8112ab48ca5\tQto_WallBaseQuantities.Length\tLENGTH\t\t873\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\t13353b73-5e5e-4d92-820f-ae4cc0379e24\tQto_WallBaseQuantities.NetFootprintArea\tAREA\t\t873\t1\tIfcAreaMeasure\t1\r\nPARAM\tf73b948a-6048-4d01-8a10-78b946c67e80\tQto_WallBaseQuantities.NetFootPrintArea\tAREA\t\t873\t1\tIfcAreaMeasure\t1\r\nPARAM\tdcb36a1f-0872-419a-bf56-63cf2d22b3da\tQto_WallBaseQuantities.NetSideArea\tAREA\t\t873\t1\tIfcAreaMeasure\t1\r\nPARAM\t13e6ad86-1462-4242-9ebb-d252bb1d9192\tQto_WallBaseQuantities.NetVolume\tVOLUME\t\t873\t1\tIfcVolumeMeasure\t1\r\nPARAM\t57114e5d-8d01-4038-a38e-6dfd1cd202e0\tQto_WallBaseQuantities.NetWeight\tNUMBER\t\t873\t1\tIfcMassMeasure\t1\r\nPARAM\t0b05421f-55df-4243-909f-fd4e0871dcde\tQto_WallBaseQuantities.Width\tLENGTH\t\t873\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t874\tQto_WasteTerminalBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tfa5e8d81-36f7-42b7-a1c7-1f77e508a6cd\tQto_WasteTerminalBaseQuantities.GrossWeight\tNUMBER\t\t874\t1\tIfcMassMeasure\t1\r\n#\r\nGROUP\t875\tQto_WindowBaseQuantities\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\t83a23e3c-3914-4638-81aa-b408f4646ccc\tQto_WindowBaseQuantities.Area\tAREA\t\t875\t1\tIfcAreaMeasure\t1\r\nPARAM\t35670df8-40b5-403a-b57b-5ab2880b1215\tQto_WindowBaseQuantities.Height\tLENGTH\t\t875\t1\tIfcPositiveLengthMeasure\t1\r\nPARAM\te41e4c8a-e44e-49b4-8e38-c3e7a9195a62\tQto_WindowBaseQuantities.Perimeter\tLENGTH\t\t875\t1\tIfcLengthMeasure\t1\r\nPARAM\t60599e64-a277-40ed-bb90-640b0134f781\tQto_WindowBaseQuantities.Width\tLENGTH\t\t875\t1\tIfcPositiveLengthMeasure\t1\r\n#\r\nGROUP\t2\tRevit IFCExporter Parameters\r\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\r\n#\r\nPARAM\tf440bb0c-7518-406c-9b84-1de93ecb2d67\tClassificationCode\tTEXT\t\t2\t1\t\t1\r\nPARAM\t3e35c8f6-18a2-4678-92a7-29f9a2f790bf\tClassificationCode(2)\tTEXT\t\t2\t1\t\t1\r\nPARAM\t9c810054-8b25-4c82-a8f6-a19d4bde001f\tClassificationCode(3)\tTEXT\t\t2\t1\t\t1\r\nPARAM\t902d8dc8-abda-4046-97eb-ebf0c69ae3b2\tClassificationCode(4)\tTEXT\t\t2\t1\t\t1\r\nPARAM\t6fb63bec-20f3-4855-9697-a4a087577498\tClassificationCode(5)\tTEXT\t\t2\t1\t\t1\r\nPARAM\tf6117ce5-e8d3-4b6d-9598-7fd7cc2f729e\tClassificationCode(6)\tTEXT\t\t2\t1\t\t1\r\nPARAM\tf67f3f99-d04c-4b62-a087-81ab6a1d50c4\tClassificationCode(7)\tTEXT\t\t2\t1\t\t1\r\nPARAM\tb00af5fc-5f1b-40d6-87de-8902f93f7aab\tClassificationCode(8)\tTEXT\t\t2\t1\t\t1\r\nPARAM\t88125f36-db46-4998-a16d-605bf75cb83f\tClassificationCode(9)\tTEXT\t\t2\t1\t\t1\r\nPARAM\t0a531080-2060-4bc6-802b-9230d35ac14d\tClassificationCode(10)\tTEXT\t\t2\t1\t\t1\r\nPARAM\t26f1bba3-a3cb-4fbc-ba29-d7650f1bcb4b\tAssembly Code\tTEXT\t\t2\t1\tUniformat Classification\t1\r\nPARAM\tb623d495-dc76-46cb-ac7b-bfe126728bf2\tAssembly Description\tTEXT\t\t2\t1\tUniformat Classification\t1\r\nPARAM\t9ed03820-7425-4d90-868e-2ab0f5319495\tIfcProjectedCRS.Name\tTEXT\t\t2\t1\t\t1\r\nPARAM\te4090d66-012c-45fe-9ac9-4cfe51c0dd29\tIfcProjectedCRS.Description\tTEXT\t\t2\t1\t\t1\r\nPARAM\te66c0e06-0383-480f-854e-950bb0d435f8\tIfcProjectedCRS.GeodeticDatum\tTEXT\t\t2\t1\t\t1\r\nPARAM\tbc47059f-e418-41f2-85b9-8b556dacae5e\tIfcProjectedCRS.VerticalDatum\tTEXT\t\t2\t1\t\t1\r\nPARAM\tb1d60aea-e267-4ca1-b899-cb06d5eaa9c8\tIfcProjectedCRS.MapProjection\tTEXT\t\t2\t1\t\t1\r\nPARAM\t91150f20-dc6c-4691-be1e-fe0ed0dfae6f\tIfcProjectedCRS.MapZone\tTEXT\t\t2\t1\t\t1\r\nPARAM\t093a80c9-4a77-4076-a71c-041e3521608c\tIfcProjectedCRS.MapUnit\tTEXT\t\t2\t1\t\t1\r\nPARAM\t9c5ad3aa-75d4-448a-a75c-db72ae2139f8\tIfcQtyDepth\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t90d03a57-2f8c-4c2f-b478-4c43c164e8d2\tIfcQtyLength\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t7da39469-0a4a-4e77-8ddd-f4204f1a4001\tIfcQtyWidth\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t93981409-c088-46b2-93a9-9f3caa98efb1\tIfcQtyDiameter\tLENGTH\t\t2\t1\t\t1\r\nPARAM\te69202d5-65bd-4f49-88b5-e79ce9824f46\tIfcQtyPerimeter\tLENGTH\t\t2\t1\t\t1\r\nPARAM\ta902c427-138b-496c-9ae9-5a294d18e178\tIfcQtyNetPerimeter\tLENGTH\t\t2\t1\t\t1\r\nPARAM\tc88a41a7-31ae-4bfe-bab7-8950a4c3f23a\tIfcQtyGrossPerimeter\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t706a33bb-dc20-4da4-a013-6f111b175a0a\tIfcQtyNetHeight\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t12c928d0-fb68-4594-958c-55cc6e01175f\tIfcQtyFinishCeilingHeight\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t7accfb6d-f55e-472a-b450-2d9dc23f04ce\tIfcQtyGrossHeight\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t29c0b07c-5eb9-4927-82a0-ef9690eefbc9\tIfcQtyFinishFloorHeight\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t3784ad06-1e5d-46c1-ae2b-a50ffa959830\tIfcQtyGrossWallArea\tAREA\t\t2\t1\t\t1\r\nPARAM\t5313d6cd-b3dd-4bf9-8c2e-3ce37e98da79\tIfcQtyArea\tAREA\t\t2\t1\t\t1\r\nPARAM\t9d022292-72f2-44d3-959c-b1b1c2e5dfaa\tIfcQtyGrossArea\tAREA\t\t2\t1\t\t1\r\nPARAM\tbdb374af-f2cb-4684-989a-7e53203af0d5\tIfcQtyGrossSurfaceArea\tAREA\t\t2\t1\t\t1\r\nPARAM\td765bfba-70d7-4977-8ef9-f4d48fa633ca\tIfcQtyNetCeilingArea\tAREA\t\t2\t1\t\t1\r\nPARAM\t94513a38-2eeb-451c-bb99-f7d6e701b95e\tIfcQtyNetSurfaceArea\tAREA\t\t2\t1\t\t1\r\nPARAM\t0f29392b-03ec-4be3-8266-8ecac58daf70\tIfcQtyCrossSectionArea\tAREA\t\t2\t1\t\t1\r\nPARAM\t681c1f20-289c-4691-8c54-61899c7058bb\tIfcQtyOuterSurfaceArea\tAREA\t\t2\t1\t\t1\r\nPARAM\t783bb840-f3b2-4078-ad37-43e42c706d34\tIfcQtyGrossCeilingArea\tAREA\t\t2\t1\t\t1\r\nPARAM\tdfbae751-2781-4625-b21f-374fdb7c952e\tIfcQtyNetWallArea\tAREA\t\t2\t1\t\t1\r\nPARAM\t5a446881-e984-4984-95d6-364b49312cdd\tIfcQtyGrossVolume\tVOLUME\t\t2\t1\t\t1\r\nPARAM\te9ce1eaf-b637-4f79-9bdd-8028abc942aa\tIfcQtyNetVolume\tVOLUME\t\t2\t1\t\t1\r\nPARAM\t3d3650c9-ffaf-4df6-bf27-71ce745e7f52\tIfcQtyVolume\tVOLUME\t\t2\t1\t\t1\r\nPARAM\t4cb8562d-51fd-425f-b51f-66ea7b212a7c\tIfcQtyGrossWeight\tNUMBER\t\t2\t1\t\t1\r\nPARAM\t343189da-1fca-411a-ad0d-ba735f79c476\tIfcQtyNetWeight\tNUMBER\t\t2\t1\t\t1\r\nPARAM\t8654f7d0-4046-4658-8f4c-f7c9fae9c48b\tZoneName\tTEXT\t\t2\t1\t\t1\r\nPARAM\t9d26a3cd-a7e7-48f4-88bf-794ba795a0ba\tZoneGroupName\tTEXT\t\t2\t1\t\t1\r\nPARAM\t803a2a7e-2c1b-4297-a4bb-9d7431580b75\tZoneObjectType\tTEXT\t\t2\t1\t\t1\r\nPARAM\t9959634a-4d88-4139-a7d5-51fb25655bd3\tZoneLongName\tTEXT\t\t2\t1\t\t1\r\nPARAM\tb898aba5-8f77-463f-9e88-56787fa0dd92\tZoneDescription\tTEXT\t\t2\t1\t\t1\r\nPARAM\t7bd18f19-93ba-418f-8d6e-a4dc6b20353b\tZoneClassificationCode\tTEXT\t\t2\t1\t\t1\r\nPARAM\t3794b219-95ee-448f-b16f-e878ae037933\tPset_RampFlightCommon.HeadRoom\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t84db17c9-9e1e-44d1-8cbe-69ea634f0eb1\tIfcRampFlight.IfcQtyLength\tLENGTH\t\t2\t1\t\t1\r\nPARAM\ta325a639-582a-4bd3-a249-002ac2676be2\tIfcRampFlight.IfcQtyWidth\tLENGTH\t\t2\t1\t\t1\r\nPARAM\tc6bf3693-2edb-4839-ba96-aa2c6ad33cfa\tIfcRampFlight.IfcQtyGrossArea\tAREA\t\t2\t1\t\t1\r\nPARAM\t4e23e39d-0809-42ea-8bf0-9b3d19d39875\tIfcRampFlight.IfcQtyGrossVolume\tVOLUME\t\t2\t1\t\t1\r\nPARAM\te5b29aef-b0aa-40d3-bc71-6fbf911e94b2\tIfcRampLanding.IfcQtyLength\tLENGTH\t\t2\t1\t\t1\r\nPARAM\tecc2c088-3d16-4c27-af59-8612a77d75af\tIfcRampLanding.IfcQtyWidth\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t7e016416-a454-4236-b250-dbd0b1d9345b\tIfcRampLanding.IfcQtyDepth\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t4a40afcb-1979-43ef-a4bf-9df8993161f2\tIfcRampLanding.IfcQtyGrossArea\tAREA\t\t2\t1\t\t1\r\nPARAM\tc3a0ed1e-419f-43a4-a0d3-b88bbb1ce593\tIfcRampLanding.IfcQtyGrossVolume\tVOLUME\t\t2\t1\t\t1\r\nPARAM\t785453d0-915c-47a2-a024-fed0cdaf39bf\tIfcRampLanding.IfcQtyGrossWeight\tNUMBER\t\t2\t1\t\t1\r\nPARAM\t925f5c62-001f-4777-87e2-862c97393149\tIfcRampLanding.IfcQtyNetWeight\tNUMBER\t\t2\t1\t\t1\r\nPARAM\t8635020d-0c0e-4f3a-ab32-a0ad3b6bfff2\tBIM Standards URL\tURL\t\t2\t1\t\t1\r\nPARAM\t5267e00f-cf59-45eb-8317-bcd7028fa748\tClassification Number\tTEXT\t\t2\t1\t\t1\r\nPARAM\t90847638-6cac-41fa-9db4-2e151700858f\tClassification Title\tTEXT\t\t2\t1\t\t1\r\nPARAM\t0823de64-1327-4b89-a69c-3820b898d926\tSpace Type (Owner) Reference\tTEXT\t\t2\t1\t\t1\r\nPARAM\ta52ff1af-7a41-4bee-b956-4866bf6feca0\tSpace Type (Owner) Name\tTEXT\t\t2\t1\t\t1\r\nPARAM\tec9e9682-f7a2-4a5a-aefc-c77c16401e23\tSpace Category (Owner) Reference\tTEXT\t\t2\t1\t\t1\r\nPARAM\t34713fdf-e119-49e9-92ed-5d11f708920f\tSpace Category (Owner) Name\tTEXT\t\t2\t1\t\t1\r\nPARAM\t60ef59f7-f0e7-4d07-bb6e-41fc18510a31\tSpace Category (BOMA) Reference\tTEXT\t\t2\t1\t\t1\r\nPARAM\t12bd9755-8e4f-4d4e-9240-2301d2cd7617\tSpace Category (BOMA) Name\tTEXT\t\t2\t1\t\t1\r\nPARAM\ta20a1633-3a20-4337-9a5f-b8fcfa09a428\tSpatial Zone Conditioning Requirement\tTEXT\t\t2\t1\t\t1\r\nPARAM\t9d838298-00ac-4fec-820b-0d527f887cb7\tHVAC System Type\tTEXT\t\t2\t1\t\t1\r\nPARAM\tc7c65649-0abc-476d-8693-10779207dd50\tUser Defined HVAC System Type\tTEXT\t\t2\t1\t\t1\r\nPARAM\t36e76e83-a3c8-41c1-9fe8-a3abef236c3c\tIs Daylit Zone\tYESNO\t\t2\t1\t\t1\r\nPARAM\t7ee7d7b5-8c02-4055-8c24-09d8f913cca2\tNumber of Daylight Sensors\tINTEGER\t\t2\t1\t\t1\r\nPARAM\t8253a0dd-4285-4210-869e-2a0f7c2d8ee4\tDesign Illuminance\tNUMBER\t\t2\t1\t\t1\r\nPARAM\t7d669cb2-e5ba-445e-b291-87a5b64f61eb\tLighting Controls Type URL\tTEXT\t\t2\t1\t\t1\r\nPARAM\te8d94391-3331-4c7f-9e63-e91c17998c64\tSpace Occupant Organization Abbreviation\tTEXT\t\t2\t1\t\t1\r\nPARAM\t739849a8-5ca6-494b-bac4-4afcc1eb1505\tSpace Occupant Organization Name\tTEXT\t\t2\t1\t\t1\r\nPARAM\t52b8cea7-4ca9-4172-9501-d3527cf54a59\tOccupant\tTEXT\t\t2\t1\t\t1\r\nPARAM\td6908c54-3606-4dca-a8ce-56d32ab4192b\tSpace Occupant Organization ID Reference\tTEXT\t\t2\t1\t\t1\r\nPARAM\tb8872605-81c5-4337-a238-6be576570d55\tSpace Occupant Organization ID Name\tTEXT\t\t2\t1\t\t1\r\nPARAM\t04b2abb6-6470-4c81-9e7c-1e5b44ed34fe\tSpace Occupant Sub-Organization ID Reference\tTEXT\t\t2\t1\t\t1\r\nPARAM\t6a9800f5-ff43-4907-9a36-8afc0ec15154\tSpace Occupant Sub-Organization ID Name\tTEXT\t\t2\t1\t\t1\r\nPARAM\t63fa188d-e00e-490c-a1b2-c513517ca9ce\tSpace Occupant Organization Billing ID Reference\tTEXT\t\t2\t1\t\t1\r\nPARAM\t27a7919b-9f58-49fe-961c-010c984b38a1\tSpace Occupant Organization Billing ID Name\tTEXT\t\t2\t1\t\t1\r\nPARAM\t7abd2ba2-0106-4e89-805e-0a77700f2616\tSpatial Zone Type (Owner) Reference\tTEXT\t\t2\t1\t\t1\r\nPARAM\t5824fd9f-930e-41db-b20e-9c00aa9a8ab3\tSpatial Zone Type (Owner) Name\tTEXT\t\t2\t1\t\t1\r\nPARAM\t0f1bae35-e82d-4a6c-a7db-572245ff29d6\tSpatial Zone Security Level (Owner) Reference\tTEXT\t\t2\t1\t\t1\r\nPARAM\t4320b6e8-9b0a-4632-b465-e95dc3df493c\tSpatial Zone Security Level (Owner) Name\tTEXT\t\t2\t1\t\t1\r\nPARAM\t8c7a547a-6f7f-4eef-a24c-b974efc717e5\tASHRAE Zone Type\tTEXT\t\t2\t1\t\t1\r\nPARAM\td05b5436-5063-46e9-97e3-af659b69828e\tIfcMaterialLayer.IsVentilated\tYESNO\t\t2\t1\t\t1\r\nPARAM\ta458f550-164e-4e95-b816-3b28e8014197\tIfcMaterialLayer.Name\tTEXT\t\t2\t1\t\t1\r\nPARAM\tf69e625c-6005-48bd-80c7-f6e02c122788\tIfcMaterialLayer.Priority\tINTEGER\t\t2\t1\t\t1\r\nPARAM\t36617d8d-1abb-41c4-b4e8-da1fd62aaad6\tIfcMaterialLayer.Description\tTEXT\t\t2\t1\t\t1\r\nPARAM\t55cfe7d7-0b60-4214-97da-d2c5555641cb\tIfcMaterialLayer.Category\tTEXT\t\t2\t1\t\t1\r\nPARAM\t004d4a7b-b77e-479a-a6c3-56ca61babccb\tIfcMaterialLayerSet.Name\tTEXT\t\t2\t1\t\t1\r\nPARAM\tab39f525-6de4-49ef-844e-95c5e11f1ff6\tIfcMaterialLayerSet.Description\tTEXT\t\t2\t1\t\t1\r\nPARAM\tcf633970-73fe-49cd-b03e-af60d49d4deb\tIfcName\tTEXT\t\t2\t1\t\t1\r\nPARAM\t8df7e965-feaf-403f-8290-d4c289c99840\tIfcDescription\tTEXT\t\t2\t1\t\t1\r\nPARAM\t5d167d01-84fc-47cf-b6af-d4ad81f45868\tIfcLongName\tTEXT\t\t2\t1\t\t1\r\nPARAM\t577b74dc-fffe-4165-bfb6-00b0a0a24542\tIfcObjectType\tTEXT\t\t2\t1\t\t1\r\nPARAM\tf113d237-6742-4ab3-8c8d-566bcbd6c6bb\tIfcTag\tTEXT\t\t2\t1\t\t1\r\nPARAM\t74a4d438-a3f3-4173-a238-a4ad5134d16d\tIfcCapacityByWeight\tNUMBER\t\t2\t1\t\t1\r\nPARAM\t25c5194c-5659-4459-9df5-f2c6167300b5\tIfcLandTitleNumber\tTEXT\t\t2\t1\t\t1\r\nPARAM\tadc1655c-2373-481b-abbe-15932619db06\tIfcspaceElevationWithFlooring\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t486a0eb2-b1d3-43be-abdf-44e396875d66\tIfcCapacityByNumber\tNUMBER\t\t2\t1\t\t1\r\nPARAM\t17d638a6-954d-46f5-9fd8-a12329895bb6\tIfcPresentationLayer\tTEXT\t\t2\t1\t\t1\r\nPARAM\ta45065e7-99ce-4323-95c2-a10e0063bcec\tIfcCadLayer\tTEXT\t\t2\t1\t(Deprecated)\t1\r\nPARAM\tbff4553d-62d0-4ce8-86d3-fa3d2ba9944c\tSiteName\tTEXT\t\t2\t1\t\t1\r\nPARAM\t1691cccc-14bf-4859-a1ef-a4a3c03a3345\tSiteLongName\tTEXT\t\t2\t1\t\t1\r\nPARAM\t70e9b810-1d94-4dd8-9c47-1223d10cfc91\tSiteDescription\tTEXT\t\t2\t1\t\t1\r\nPARAM\t3deb300a-d856-4192-b39b-4c22d5089f8b\tSiteObjectType\tTEXT\t\t2\t1\t\t1\r\nPARAM\td77d44de-e38b-4fa3-89b2-d41c46ef5250\tSiteLandTitleNumber\tTEXT\t\t2\t1\t\t1\r\nPARAM\t126288d7-a4be-40a8-ba93-8a9e8c05d33b\tBuildingLongName\tTEXT\t\t2\t1\t\t1\r\nPARAM\tbe201e5e-4c8c-4fad-9cce-2a93e39dbfd8\tBuildingDescription\tTEXT\t\t2\t1\t\t1\r\nPARAM\taea294d5-2859-41dc-a58e-5ac7192901be\tBuildingObjectType\tTEXT\t\t2\t1\t\t1\r\nPARAM\t71d092aa-0c92-4346-b2ad-2102c8e7710c\tIfcCategory\tTEXT\t\t2\t1\t\t1\r\nPARAM\t55914e74-79dd-4fef-9539-0c0631743aee\tIfcSingleMaterialOverride\tTEXT\t\t2\t1\tParameter to force a single material assignment when there is only a single material\t1\r\nPARAM\t298bfb8d-7c66-4d69-a493-14beb1bbfd4b\tIfcSpatialContainer\tTEXT\t\t2\t1\tParameter to override element containment\t1\r\nPARAM\t8f0306fa-4df3-479d-bc44-e55210e0d0e4\tConcealedCovering\tYESNO\t\t2\t1\t\t1\r\nPARAM\t8083a04d-d537-4089-acef-03c7d96ec873\tUserDefinedOperationType\tTEXT\t\t2\t1\t\t1\r\nPARAM\tabad1d39-6965-468f-8861-370e6b726678\tIfcSiteGUID\tTEXT\t\t2\t1\t\t1\r\nPARAM\t07dce341-b4e9-4507-8778-0e44321f516f\tPanelDepth\tLENGTH\t\t2\t1\t\t1\r\nPARAM\te766bd67-5383-4174-8e98-303739b9e623\tPanelWidth\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t2f4e182a-b7d4-491c-ad28-488029ec2ad6\tLiningDepth\tLENGTH\t\t2\t1\t\t1\r\nPARAM\tac8bc243-5ae0-481f-bc3e-7ad204b07e10\tLiningThickness\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t3452d5ee-008e-45b7-9ab0-1ef676436f99\tLiningOffset\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t212a2526-8958-4b4f-8f3e-f757acb11cae\tThresholdDepth\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t1db58254-34e4-437d-8057-beda0baec0e5\tThresholdThickness\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t925fd679-94c4-4856-b141-3b89c84f6b09\tThresholdOffset\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t72aec9c0-11fb-40db-b87a-2b85b5e9ac7d\tTransomOffset\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t406efee5-8198-4298-a899-a9360be1a59e\tTransomThickness\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t001fc06e-689f-4d30-ad4e-93cf89478d14\tCasingDepth\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t2c0d426a-418c-4e6c-a9bb-eb99f02b359e\tCasingThickness\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t90949a73-8b1e-48fa-bd97-90162e909594\tWINDOW_PARTITIONING_TYPE\tTEXT\t\t2\t1\t\t1\r\nPARAM\t2244f64f-eb85-4344-80ff-1341ae32ad13\tWINDOW_PREDEFINED_TYPE\tTEXT\t\t2\t1\t\t1\r\nPARAM\t2951370c-de30-489a-8d8a-be8efc74db42\tFirstTransomOffset\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t9fa581b0-bab3-4926-9dce-f01cd8326b95\tSecondTransomOffset\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t5d4d24aa-2147-40fb-b5f8-cae80691dfec\tMullionThickness\tLENGTH\t\t2\t1\t\t1\r\nPARAM\t97385d06-1f09-43f4-8d0d-d41809c2df9c\tFirstMullionOffset\tLENGTH\t\t2\t1\t\t1\r\nPARAM\ta766f4c3-f32f-4c85-b750-0cd593d23ad7\tSecondMullionOffset\tLENGTH\t\t2\t1\t\t1\r\nPARAM\tceb8fb2c-b22c-4165-925a-cac1d338cc4e\tIfcDistributionSystem\tTEXT\t\t2\t1\t\t1\r\nPARAM\t1134e004-9d8d-4a61-b471-a259078b4efd\tIfcDistributionSystemPredefinedType\tTEXT\t\t2\t1\t\t1\r\nPARAM\tb4e68375-fcc3-48f1-bc62-f6b913b20061\tIfcSystem\tTEXT\t\t2\t1\t\t1\r\nPARAM\t5ab20e24-77de-4128-98ea-1107031a2824\tIfcWindowStyle.ConstructionType\tTEXT\t\t2\t1\t\t1\r\nPARAM\t18f02068-e293-4868-bf1f-90deae7ae32b\tIfcDoorStyle.ConstructionType\tTEXT\t\t2\t1\t\t1\r\n"
  },
  {
    "path": "Install/Program Files to Install/IFC-SG Property Mapping Export.txt",
    "content": "\n\nPropertySet:\tSGPset_AccessoryLot\tI\tIfcSpace\nAccessoryLotArea\tArea\nAccessoryLotNumber\tLabel\nAppurtenantTo\tLabel\nAreaDescription\tLabel\nBuildingName_Source\tLabel\nGeocodeID\tLabel\nHouseNumber\tLabel\nIsVoid\tBoolean\nLevelNumber\tLabel\nLotStatus\tLabel\nOldFormatLotNumber\tLabel\nParcelType\tLabel\nPlanNumber\tLabel\nPostalCode\tLabel\nStreetName_StreetCode\tLabel\nSVYFileNumber\tLabel\nTypicalFloor\tBoolean\nUnitNumber\tLabel\nVoidArea\tArea\n\n\n\nPropertySet:\tSGPset_Actuator\tI\tIfcActuator\nBearingLength\tLength\nHydraulicType\tLabel\nRamLength\tLength\n\n\n\nPropertySet:\tSGPset_AirTerminal\tI\tIfcAirTerminal\nAirTerminalOperationType\tLabel\nAirTreatmentDevice\tBoolean\nAutomaticallyActivated\tBoolean\nCombustible\tBoolean\nExternalReference\tLabel\nOneDirectionFlap\tBoolean\nReplacementAir\tBoolean\nSmokeVentilationActivated\tBoolean\n\n\n\nPropertySet:\tSGPset_Alarm\tI\tIfcAlarm\nElectronicallyInterlocked\tBoolean\nFlashingRate\tLabel\nSmokeDetection\tBoolean\nSoundLevel\tLabel\n\n\n\nPropertySet:\tSGPset_AudioVisualAppliance\tI\tIfcAudioVisualAppliance\nIntercomSystemType\tLabel\nVideoFireImageDetection\tBoolean\n\n\n\nPropertySet:\tSGPset_Beam\tI\tIfcBeam\nAccreditation_PAS\tBoolean\nBeamSpanType\tLabel\nCharacteristicPTTendonStrength\tLabel\nCombustible\tBoolean\nConstructionMethod\tLabel\nExternalReference\tLabel\nMechanicalConnectionType\tLabel\nPrestressForce\tLabel\nReinforcementSteelGrade\tLabel\nSectionFabricationMethod\tLabel\nReferTo2DDetail\tBoolean\nReferToDrawingNumber\tLabel\n\n\n\nPropertySet:\tSGPset_BeamDimension\tI\tIfcBeam\nBreadth\tLength\nDepth\tLength\nMark\tLabel\nMemberSection\tlabel\nWidth\tLength\n\n\n\nPropertySet:\tSGPset_BeamReinforcement\tI\tIfcBeam\nAsRequiredBottomLeft\tLabel\nAsRequiredBottomMiddle\tLabel\nAsRequiredBottomRight\tLabel\nAsRequiredStirrupsLeft\tLabel\nAsRequiredStirrupsMiddle\tLabel\nAsRequiredStirrupsRight\tLabel\nAsRequiredTopLeft\tLabel\nAsRequiredTopMiddle\tLabel\nAsRequiredTopRight\tLabel\nBeamCage\tBoolean\nBottomLeft\tLabel\nBottomMiddle\tLabel\nBottomRight\tLabel\nInnerStirrupsLeft\tLabel\nInnerStirrupsMiddle\tLabel\nInnerStirrupsRight\tLabel\nInnerStirrupsTypeLeft\tLabel\nInnerStirrupsTypeMiddle\tLabel\nInnerStirrupsTypeRight\tLabel\nNumberOfTendons\tInteger\nOuterStirrupsLeft\tLabel\nOuterStirrupsMiddle\tLabel\nOuterStirrupsRight\tLabel\nOuterStirrupsTypeLeft\tLabel\nOuterStirrupsTypeMiddle\tLabel\nOuterStirrupsTypeRight\tLabel\nPrefabricatedReinforcementCage\tBoolean\nShearLinkAngle\tReal\nSideBar\tLabel\nTendonDiameter\tLength\nTopLeft\tLabel\nTopMiddle\tLabel\nTopRight\tLabel\n\n\n\nPropertySet:\tSGPset_Boiler\tI\tIfcBoiler\nAI_AmmoniaAndAmmonium\tLabel\nAI_Antimony\tLabel\nAI_Arsenic\tLabel\nAI_Benzene\tLabel\nAI_Cadmium\tLabel\nAI_CarbonMonoxide\tLabel\nAI_Chlorine\tLabel\nAI_Copper\tLabel\nAI_DioxinsAndFurans\tLabel\nAI_EthyleneOxide\tLabel\nAI_FluorineAndHydrofluoricAcid\tLabel\nAI_Formaldehyde\tLabel\nAI_HydrogenChloride\tLabel\nAI_HydrogenSulphide\tLabel\nAI_Lead\tLabel\nAI_Mercury\tLabel\nAI_OxidesOfNitrogen\tLabel\nAI_ParticulateSubstances\tLabel\nAI_StyreneMonomer\tLabel\nAI_SulphurDioxide\tLabel\nAI_SulphurTrioxideAndAcidGases\tLabel\nAI_SulphurTrioxideOrSulphuricAcidMist\tLabel\nAI_VinylChlorideMonomer\tLabel\n\n\n\nPropertySet:\tSGPset_Building\tI\tIfcBuilding\nConservationProgramme\tBoolean\nConstructionPhase\tLabel\nDrainageBoundary\tLabel\nETTV\tReal\nExtendedCapacityShortStay\tBoolean\nLightningProtectionClass\tLabel\nNumberOfWorkers\tInteger\nOccupantLoad\tInteger\nOrdinaryHazardGroup\tInteger\nOwnerBuiltOwnerStay\tBoolean\nProjectDevelopmentType\tLabel\nPublicShelter\tBoolean\nPurposeGroup\tLabel\nRETV\tLabel\nRTS_ForIntegration\tBoolean\nShadingCoefficient_East\tReal\nShadingCoefficient_North\tReal\nShadingCoefficient_NorthEast\tReal\nShadingCoefficient_NorthWest\tReal\nShadingCoefficient_South\tReal\nShadingCoefficient_SouthEast\tReal\nShadingCoefficient_SouthWest\tReal\nShadingCoefficient_West\tReal\nShelterCategory\tLabel\nWindowToWallRatio\tReal\nWindowToWallRatio_East\tReal\nWindowToWallRatio_North\tReal\nWindowToWallRatio_NorthEast\tReal\nWindowToWallRatio_NorthWest\tReal\nWindowToWallRatio_South\tReal\nWindowToWallRatio_SouthEast\tReal\nWindowToWallRatio_SouthWest\tReal\nWindowToWallRatio_West\tReal\n\n\n\nPropertySet:\tSGPset_BuildingElementProxy\tI\tIfcBuildingElementProxy\nAI_AmmoniaAndAmmonium\tLabel\nAI_Antimony\tLabel\nAI_Arsenic\tLabel\nAI_Benzene\tLabel\nAI_Cadmium\tLabel\nAI_CarbonMonoxide\tLabel\nAI_Chlorine\tLabel\nAI_Copper\tLabel\nAI_DioxinsAndFurans\tLabel\nAI_EthyleneOxide\tLabel\nAI_FluorineAndHydrofluoricAcid\tLabel\nAI_Formaldehyde\tLabel\nAI_HydrogenChloride\tLabel\nAI_HydrogenSulphide\tLabel\nAI_Lead\tLabel\nAI_Mercury\tLabel\nAI_OxidesOfNitrogen\tLabel\nAI_ParticulateSubstances\tLabel\nAI_StyreneMonomer\tLabel\nAI_SulphurDioxide\tLabel\nAI_SulphurTrioxideAndAcidGases\tLabel\nAI_SulphurTrioxideOrSulphuricAcidMist\tLabel\nAI_VinylChlorideMonomer\tLabel\nBarrierFreeAccessibility\tBoolean\nBicycleLotCount\tInteger\nBicycleParkingRack_Type\tLabel\nCapacityWeight\tReal\nCarParking_ServedByCarLift\tBoolean\nCombustible\tBoolean\nCounterWeight_RopeCount\tInteger\nCounterWeight_RopeDiameter\tLength\nCounterWeightBuffer_RatedSpeed\tLabel\nCounterWeightBuffer_Stroke\tLength\nCounterWeightBuffer_Type\tLabel\nDesignedVehicleMass\tReal\nEquipmentType\tLabel\nExternalReference\tLabel\nFamilyParkingLot\tBoolean\nFireAlarmActivated\tBoolean\nFireExtinguisherRating\tLabel\nFUELDISPENSINGUNIT_SafetyCutoff\tBoolean\nGIS_ApprovedMasterplanUse\tLabel\nHeightOfVehicularImpact\tLength\nHorizontalForce\tReal\nHose_Length\tLength\nLiftBuffer_FixedToCar\tBoolean\nLiftBuffer_Stroke\tLabel\nLoadingCapacity\tReal\nManualOverrideLockingDevice\tBoolean\nParkingUse\tLabel\nRefugeSpace_Type\tInteger\nSelfLuminous\tBoolean\nSignageType\tLabel\nTED_Arsenic\tLabel\nTED_Barium\tLabel\nTED_Beryllium\tLabel\nTED_BiochemicalOxygenDemand\tLabel\nTED_Boron\tLabel\nTED_Cadmium\tLabel\nTED_Calcium\tLabel\nTED_ChemicalOxygenDemand\tLabel\nTED_Chloride\tLabel\nTED_Chlorine\tLabel\nTED_Chromium\tLabel\nTED_Colour\tLabel\nTED_Copper\tLabel\nTED_Cyanide\tLabel\nTED_Detergent\tLabel\nTED_GreaseAndOil\tLabel\nTED_Iron\tLabel\nTED_Lead\tLabel\nTED_Magnesium\tLabel\nTED_Manganese\tLabel\nTED_Mercury\tLabel\nTED_MetalsInTotal\tLabel\nTED_Nickel\tLabel\nTED_Nitrate\tLabel\nTED_PhenolicCompound\tLabel\nTED_Phosphate\tLabel\nTED_PHValue\tLabel\nTED_Selenium\tLabel\nTED_Silver\tLabel\nTED_Sulphate\tLabel\nTED_Sulphide\tLabel\nTED_TemperatureOfDischarge\tLabel\nTED_Tin\tLabel\nTED_TotalDissolvedSolid\tLabel\nTED_TotalSuspendedSolid\tLabel\nTED_Zinc\tLabel\nUnitNumber\tLabel\nVegetation_HasCreepers\tBoolean\nVehicleType\tLabel\n\n\n\nPropertySet:\tSGPset_BuildingElementProxyDimension\tI\tIfcBuildingElementProxy\nDepth\tLength\nDiameter\tLength\nFirstHardStratumLevel\tLabel\nLength\tLength\nTerminationLevel\tLabel\nTopLevel\tLabel\nMark\tLabel\nWidth\tLength\n\n\n\nPropertySet:\tSGPset_BuildingStorey\tI\tIfcBuildingStorey\nAlternateDesignatedFloor\tBoolean\nAlternateLiftHomingFloor\tBoolean\nAtticLevel\tBoolean\nDesignatedFloor\tBoolean\nGroundLevel\tBoolean\nHasActivityGeneratingUse\tBoolean\nMezzanineLevel\tBoolean\nOccupancyType\tLabel\nPurposeGroup\tLabel\nRefugeFloor\tBoolean\nRoofLevel\tBoolean\nTypicalFloor\tBoolean\n\n\n\nPropertySet:\tSGPset_BuildingSystem\tI\tIfcBuildingSystem\nAccreditation_MAS\tBoolean\nAccreditation_PAS\tBoolean\nBeltOrChainCount\tInteger\nCombustible\tBoolean\nCommunicationSystem\tBoolean\nConstructionMethod\tLabel\nElectromechanicalFrictionBrake\tBoolean\nEmergencyControlDevice\tBoolean\nLoadSideBrake\tBoolean\nMechanicalConnectionType\tLabel\nMechanizedCarParking_Type\tLabel\nSelfSustaining\tBoolean\nTensileStress\tLabel\n\n\n\nPropertySet:\tSGPset_CableCarrierSegment\tI\tIfcCableCarrierSegment\nFireRating\tLabel\n\n\n\nPropertySet:\tSGPset_CableFitting\tI\tIfcCableFitting\nFireRating\tLabel\n\n\n\nPropertySet:\tSGPset_CableSegment\tI\tIfcCableSegment\nCable_AluminiumSheathed\tBoolean\nCable_CopperSheathed\tBoolean\nCable_MetalCladded\tBoolean\nCable_MineralInsulatedMetalSheathed\tBoolean\t\t\nExternalReference\tLabel\nFireRating\tLabel\nLinkedToNaturalRebar\tBoolean\nLPS_ConnectedToFoundation\tBoolean\n\n\n\nPropertySet:\tSGPset_Chiller\tI\tIfcChiller\nFlammableRefrigerant\tBoolean\nModelName\tBoolean\nSoundPowerLevel\tLabel\nSoundPressureLevel\tLabel\n\n\nPropertySet:\tSGPset_CivilElement\tI\tIfcCivilElement\nAccelerationLane\tBoolean\nAccessRoad\tBoolean\nAccessway\tBoolean\nDecelerationLane\tBoolean\nDesignedVehicleMass\tReal\nEgress\tBoolean\nFireEngineAccessRoad\tBoolean\nIngress\tBoolean\nLoadingCapacity\tReal\nOwnershipType\tLabel\nRoadCategory\tLabel\nSlipRoad\tBoolean\nVehicularServiceRoad\tBoolean\nVisitorLaneEntry\tBoolean\n\n\n\nPropertySet:\tSGPset_Column\tI\tIfcColumn\nAccreditation_PAS\tBoolean\nCombustible\tBoolean\nConstructionMethod\tLabel\nExternalReference\tLabel\nMechanicalConnectionType\tLabel\nReinforcementSteelGrade\tLabel\nSectionFabricationMethod\tLabel\nReferTo2DDetail\tBoolean\nReferToDrawingNumber\tLabel\n\n\n\nPropertySet:\tSGPset_ColumnDimension\tI\tIfcColumn\nBreadth\tLength\nDiameter\tLength\nEndStorey\tLabel\nHeight\tLength\nMark\tLabel\nMemberSection\tLabel\nStartingStorey\tLabel\nWidth\tLength\n\n\n\nPropertySet:\tSGPset_ColumnReinforcement\tI\tIfcColumn\nAsRequiredBreadth\tLabel\nAsRequiredMainRebar\tLabel\nAsRequiredStirrups\tLabel\nAsRequiredWidth\tLabel\nBreadthInnerStirrups\tLabel\nBreadthInnerStirrupsType\tLabel\nColumnCage\tBoolean\nCornerRebar\tLabel\nMainRebar\tLabel\nOuterStirrups\tLabel\nOuterStirrupsType\tLabel\nPrefabricatedReinforcementCage\tBoolean\nWidthInnerStirrups\tLabel\nWidthInnerStirrupsType\tLabel\n\n\n\nPropertySet:\tSGPset_ColumnStructuralLoad\tI\tIfcColumn\nWorkingLoad\tLabel\n\n\n\nPropertySet:\tSGPset_CommonProperty\tI\tIfcSpace\nCommonArea\tArea\nGeocodeID\tLabel\nTypicalFloor\tBoolean\n\n\n\nPropertySet:\tSGPset_CommunicationsAppliance\tI\tIfcCommunicationsAppliance\nIntercomSystemType\tLabel\n\n\n\nPropertySet:\tSGPset_Compressor\tI\tIfcCompressor\nAirCooler\tBoolean\nAirDryer\tBoolean\n\n\n\nPropertySet:\tSGPset_ConcreteElementGeneral\tI\tIfcCovering,IfcPile,IfcWall\nReinforcementStrengthClass\tLabel\n\n\n\nPropertySet:\tSGPset_ConcreteElementGeneral\tI\tIfcBeam,IfcColumn,IfcElement,IfcFooting,IfcPile,IfcSlab,IfcStair,IfcWall\nStrengthClass\tLabel\n\n\n\nPropertySet:\tSGPset_Condenser\tI\tIfcCondenser\nModelName\tBoolean\nSoundPowerLevel\tLabel\nSoundPressureLevel\tLabel\nUnitCount\tInteger\n\n\n\nPropertySet:\tSGPset_CoolingTower\tI\tIfcCoolingTower\nModelName\tBoolean\nSoundPowerLevel\tLabel\nSoundPressureLevel\tLabel\n\n\n\nPropertySet:\tSGPset_Covering\tI\tIfcCovering\nAirtight\tBoolean\nAntiMosquitoDevice\tBoolean\nChequeredPlate\tBoolean\nCladdingType\tLabel\nConstructionMethod\tLabel\nCorrosionResistant\tBoolean\nEngineeredSmokeControlSystem\tBoolean\nExternalReference\tLabel\nFinishType\tLabel\nFixed\tBoolean\nFlameSpreadClass\tLabel\nFusibleLink\tBoolean\nGrade\tLabel\nHingedOpen\tBoolean\nLockable\tBoolean\nNonDuplicableKeyLock\tBoolean\nOuterLayer_Combustible\tBoolean\nPerforated\tBoolean\nPressureImpregnated\tBoolean\nRemovable\tBoolean\nSmokeDensityRating\tReal\nThickness\tLength\nToxicityEmissionRating\tReal\nVegetation_HasClimbers\tBoolean\nVegetation_HasCreepers\tBoolean\nVegetation_PlantedArea\tArea\nVegetation_PlantName\tLabel\nWatertight\tBoolean\nWithLiftingFeature\tBoolean\n\n\n\nPropertySet:\tSGPset_CoveringFlooring\tI\tIfcCovering\nHasNonSkidSurface\tBoolean\n\n\n\nPropertySet:\tSGPset_CoveringTile\tI\tIfcCovering\nLength\tLength\nWidth\tLength\n\n\n\nPropertySet:\tSGPset_CurtainWall\tI\tIfcCurtainWall\nConstructionMethod\tLabel\nFireStop\tBoolean\nMaterial_DaylightReflectance\tLabel\nMaterial_DiffuseReflectance\tLabel\nMaterial_SpecularReflectance\tLabel\nShadingCoefficient_Glass\tReal\n\n\n\nPropertySet:\tSGPset_Damper\tI\tIfcDamper\nFireRating\tLabel\nAirChangePerHour\tLabel\nExternalReference\tLabel\nInsulation_FireResistanceRating\tLabel\n\n\n\nPropertySet:\tSGPset_Deflection\tI\tIfcBeam,IfcSlab\nDeflection\tLabel\n\n\n\nPropertySet:\tSGPset_DiscreteAccessory\tI\tIfcDiscreteAccessory\nAntiSlipSurface\tBoolean\nCombustible\tBoolean\nDiameter\tLength\nFlameSpreadClass\tLabel\nLoadingCapacity\tReal\nLPS_ConnectedToFoundation\tBoolean\nLPS_ConnectedToRebar\tBoolean\nMinimumForce\tReal\nPullOutStrength\tReal\nTemperature\tLabel\nTensileStress\tLabel\nWeight\tReal\n\n\n\nPropertySet:\tSGPset_DistributionChamberElement\tI\tIfcDistributionChamberElement\nExternalReference\tLabel\nHDPELiningwithIntegralAnchorStudAllAround\tBoolean\nWithVortexDrop\tBoolean\n\n\n\nPropertySet:\tSGPset_DistributionChamberElementDimension\tI\tIfcDistributionChamberElement\nDepth\tLength\t\nDiameter\tLength\t\nHeight\tLength\nInvertLevel\tLabel\nLength\tLength\nTopLevel\tLabel\nWidth\tLength\n\n\nPropertySet:\tSGPset_DistributionChamberElementSamplingSump\tI\tIfcDistributionChamberElement\nTED_Arsenic\tLabel\nTED_Barium\tLabel\nTED_Beryllium\tLabel\nTED_BiochemicalOxygenDemand\tLabel\nTED_Boron\tLabel\nTED_Cadmium\tLabel\nTED_Calcium\tLabel\nTED_ChemicalOxygenDemand\tLabel\nTED_Chloride\tLabel\nTED_Chlorine\tLabel\nTED_Chromium\tLabel\nTED_Colour\tLabel\nTED_Copper\tLabel\nTED_Cyanide\tLabel\nTED_Detergent\tLabel\nTED_GreaseAndOil\tLabel\nTED_Iron\tLabel\nTED_Lead\tLabel\nTED_Magnesium\tLabel\nTED_Manganese\tLabel\nTED_Mercury\tLabel\nTED_MetalsInTotal\tLabel\nTED_Nickel\tLabel\nTED_Nitrate\tLabel\nTED_PhenolicCompound\tLabel\nTED_Phosphate\tLabel\nTED_PHValue\tLabel\nTED_Selenium\tLabel\nTED_Silver\tLabel\nTED_Sulphate\tLabel\nTED_Sulphide\tLabel\nTED_TemperatureOfDischarge\tLabel\nTED_Tin\tLabel\nTED_TotalDissolvedSolid\tLabel\nTED_TotalSuspendedSolid\tLabel\nTED_Zinc\tLabel\n\n\n\nPropertySet:\tSGPset_DistributionChamberElementTypeInspectionChamber\tI\tIfcDistributionChamberElement\nWithBackdrop\tBoolean\n\n\n\nPropertySet:\tSGPset_DistributionChamberElementTypeManhole\tI\tIfcDistributionChamberElement\nWithBackdrop\tBoolean\n\n\n\nPropertySet:\tSGPset_Door\tI\tIfcDoor\nAirTight\tBoolean\nBarrierFreeAccessibility\tBoolean\nBypassDoor\tBoolean\nCDDoor_Type\tLabel\nCorrosionResistant\tBoolean\nCounterbalanced\tBoolean\nDescendingSpeed\tLabel\nDrivenByLiftCarDoor\tBoolean\nElectricalSafetySwitch\tBoolean\nElectromagneticForSelfClosingDevice\tBoolean\nElectromechanicalForSelfClosingDevice\tBoolean\nElectromechanicalLockingDevice\tBoolean\nEmergencyUnlockingDevice\tBoolean\nExternalReference\tLabel\nFireAccessOpening\tBoolean\nFireAlarmActivated\tBoolean\nFireShutterElectricallyOperated\tBoolean\nFlameSpreadClass\tLabel\nFullClosureMaxTime\tLabel\nFusibleLinkForSelfClosingDevice\tBoolean\nHandsFree\tBoolean\nLandingDoorLock\tBoolean\nLockable\tBoolean\nMagneticBarLockingDevice\tBoolean\nMainEntrance\tBoolean\nManualOverrideLockingDevice\tBoolean\nMechanicalLock\tBoolean\nNonDuplicableKeyLock\tBoolean\nOneWayLockingDevice\tBoolean\nOpeningSize\tLength\nOrientation\tLabel\nPerforated\tBoolean\nPowerOperated\tBoolean\nSelfLocking\tBoolean\nSingleLeaf\tBoolean\nSmartCardLockingDevice\tBoolean\nSmokeDetection\tBoolean\nSoftClosing\tBoolean\nSpringClosingDevice\tBoolean\nSwingOut\tBoolean\nThermalInsulated\tBoolean\nTransomFireRating\tLabel\nVolumeControlled\tBoolean\nWeightClosingDevice\tBoolean\nWithElectricalContract\tBoolean\nWithFanlight\tBoolean\nWithRubberGasket\tBoolean\nWithSafetyFeature\tBoolean\n\n\n\nPropertySet:\tSGPset_DoorDimension\tI\tIfcDoor\nWidth\tLength\n\n\n\nPropertySet:\tSGPset_DuctFitting\tI\tIfcDuctFitting\nCombustible\tBoolean\nConstructionMethod\tLabel\nExternalReference\tLabel\nFireRating\tLabel\nPre-insulated\tBoolean\nSamplingPort\tBoolean\n\n\n\nPropertySet:\tSGPset_DuctSegment\tI\tIfcDuctSegment\nCombustible\tBoolean\nConstructionMethod\tLabel\nEngineeredSmokeControlSystem\tBoolean\nExternalReference\tLabel\nFireRating\tLabel\nFlameSpreadClass\tLabel\nInsulation_Combustible\tBoolean\nInsulation_FlameSpreadClass\tLabel\nPre-insulated\tBoolean\n\n\n\nPropertySet:\tSGPset_ElectricAppliance\tI\tIfcElectricAppliance\nApprovedExtinguishingSystem\tBoolean\nCapacityWeight\tReal\nPressureAndTemperatureReliefValveWithControllingStopcock\tBoolean\nFlammableRefrigerant\tBoolean\nMainsPressureType\tBoolean\nWithHoodedJet\tBoolean\n\n\n\nPropertySet:\tSGPset_ElectricApplianceTypeElectricCooker\tI\tIfcElectricAppliance\nElectricCookerType\tLabel\n\n\n\nPropertySet:\tSGPset_ElectricFlowStorageDevice\tI\tIfcElectricFlowStorageDevice\nBatteryType\tLabel\nDischargeTime\tLabel\nExternalReference\tLabel\n\n\n\nPropertySet:\tSGPset_ElectricGenerator\tI\tIfcElectricGenerator\nDischargeTime\tLabel\nExternalReference\tLabel\nStandby\tBoolean\n\n\n\nPropertySet:\tSGPset_Fan\tI\tIfcFan\nAirChangePerHour\tLabel\nDuty\tBoolean\nFireAlarmActivated\tBoolean\nMassFlowRate\tLabel\nModelName\tBoolean\nSoundPowerLevel\tLabel\nSoundPressureLevel\tLabel\nStandby\tBoolean\n\n\n\nPropertySet:\tSGPset_FanPHistory\tI\tIfcFan\nDischargeVelocity\tReal\n\n\n\nPropertySet:\tSGPset_Filter\tI\tIfcFilter\nAirFlowRate\tLabel\nCorrosionResistant\tBoolean\nErosionResistant\tBoolean\nExternalReference\tLabel\nMinimumEfficiencyReportingValue\tInteger\nRelativeHumidity\tReal\nTwoStageDustFilterSystem\tBoolean\nWaterScrubberSystem\tBoolean\n\n\n\nPropertySet:\tSGPset_FilterTypeWaterFilter\tI\tIfcFilter\nWaterFilterType\tLabel\n\n\n\nPropertySet:\tSGPset_FireSuppressionTerminal\tI\tIfcFireSuppressionTerminal\nExternalReference\tLabel\nFlowRate\tVolume\nHose_Length\tLength\nHose_NominalDiameter\tLength\nID\tLabel\nKfactor\tLabel\nPressure\tLabel\nPrivate\tBoolean\nPublic\tBoolean\nRunningPressure\tLabel\n\n\n\nPropertySet:\tSGPset_FireSuppressionTerminalTypeSprinkler\tI\tIfcFireSuppressionTerminal\nActivationTemperature\tReal\n\n\n\nPropertySet:\tSGPset_FlowInstrument\tI\tIfcFlowInstrument\nAlarmPanel\tBoolean\nHighPressureSection\tReal\nLowPressureSection\tReal\n\n\n\nPropertySet:\tSGPset_FlowMeter\tI\tIfcFlowMeter\nCapacity\tLabel\nConnectionSize\tLength\nUnitNumber\tLabel\nUnitNumberTag\tBoolean\nWaterSupplySource\tLabel\n\n\n\nPropertySet:\tSGPset_FlowMeterDimension\tI\tIfcFlowMeter\nDiameter\tLength\nLength\tLength\n\n\n\nPropertySet:\tSGPset_FlowMeterTypeWaterMeter\tI\tIfcFlowMeter\nMaximumFlowRate\tVolume\n\n\n\nPropertySet:\tSGPset_Footing\tI\tIfcFooting\nDA1-1_BearingCapacity\tLabel\nDA1-2_BearingCapacity\tLabel\nReinforcementSteelGrade\tLabel\nRequiredBearingCapacity\tLabel\nSoilVerificationTest\tBoolean\nReferTo2DDetail\tBoolean\nReferToDrawingNumber\tLabel\n\n\n\nPropertySet:\tSGPset_FootingDimension\tI\tIfcFooting\nBreadth\tLength\nDepth\tLength\nWidth\tLength\nMark\tLabel\n\n\n\nPropertySet:\tSGPset_FootingReinforcement\tI\tIfcFooting\nAsRequiredBottomDistribution\tLabel\nAsRequiredBottomMain\tLabel\nAsRequiredStirrupsMain\tLabel\nAsRequiredStirrupsDistribution\tLabel\nAsRequiredTopDistribution\tLabel\nAsRequiredTopMain\tLabel\nBottomDistribution\tLabel\nBottomMain\tLabel\nSideBar\tLabel\nStirrups\tLabel\nStirrupsType\tLabel\nTopDistribution\tLabel\nTopMain\tLabel\n\n\n\nPropertySet:\tSGPset_FoundationStructuralLoad\tI\tIfcFooting\nWorkingLoad\tLabel\n\n\n\nPropertySet:\tSGPset_Furniture\tI\tIfcFurniture\nACMVSystem\tBoolean\nAmbulantDisabled\tBoolean\nBarrierFreeAccessibility\tBoolean\nBasePlate_Thickness\tLength\nCapacity\tLabel\nCarParkAccess\tBoolean\nColourCode\tLabel\nCombustible\tBoolean\nCompactionRatio\tLabel\nConstructionMethod\tLabel\nExternalReference\tLabel\nFireAlarmGraphicSystem\tBoolean\nHookUpPoint\tLabel\nIsTransparent\tBoolean\nLitre\tLabel\nMaterial_BasePlate\tLabel\nSecurityCardAccess\tBoolean\nTailGateOrientation\tLabel\nWalkieTalkieChargingStation\tBoolean\nWheeled\tBoolean\n\n\n\nPropertySet:\tSGPset_GeographicElement\tI\tIfcGeographicElement\nApprovedSoilMixture\tBoolean\nApprovedStoreyHeight\tLength\nBalanceLotIndicator\tBoolean\nBeddingType\tLabel\nBuildingHeightControl_Height\tLength\nBuildingHeightControl_StoreyCount\tInteger\nBuildingName_Source\tLabel\nBusStop\tBoolean\nConstructionPhase\tLabel\nFloorAreaRatio\tReal\nGeocodeID\tLabel\nGirth\tLength\nGIS_AllowableMasterPlanUse\tLabel\nGIS_ApprovedMasterplanUse\tLabel\nGIS_ConservationAreaType\tLabel\nGIS_GovernmentLandSale\tBoolean\nGIS_LandOwnership\tLabel\nGIS_LandUse\tLabel\nGIS_MasterPlanUse\tLabel\nGIS_Name\tLabel\nGIS_PlanningArea\tLabel\nGIS_Region\tLabel\nGIS_Scheme\tLabel\nGIS_TreeConservationArea\tBoolean\nHouseNumber\tLabel\nLandLotArea\tArea\nLandLotNumber\tLabel\nLevelNumber\tLabel\nLotStatus\tLabel\nOldFormatLotNumber\tLabel\nPalmType\tLabel\nParcelType\tLabel\nPlanNumber\tLabel\nPostalCode\tLabel\nPUBControlled\tBoolean\nReasonForRemoval\tLabel\nRoadCategory\tLabel\nRoadName\tLabel\nSingleStem\tBoolean\nSpecies\tLabel\nStatus\tLabel\nStreetName_StreetCode\tLabel\nSVYFileNumber\tLabel\nTaxiStand\tBoolean\nTreeNumber\tLabel\nTreeSize\tLabel\nTurf\tBoolean\nTurfSpecies\tLabel\nUnitNumber\tLabel\nVacantLand\tBoolean\n\n\n\nPropertySet:\tSGPset_GeographicElementDimension\tI\tIfcGeographicElement\nArea\tArea\nHeight\tLength\n\n\n\nPropertySet:\tSGPset_Interceptor\tI\tIfcInterceptor\nCalculatedNS\tLength\nCalculatedQs\tLabel\nExternalReference\tLabel\nFr_OccassionallyOrAlways\tBoolean\nFt_above60degreeC\tBoolean\nMassDensity\tLabel\nPortable\tBoolean\n\n\n\nPropertySet:\tSGPset_InterceptorDimension\tI\tIfcInterceptor\nDiameter\tLength\nHeight\tLength\nInvertLevel\tLabel\nLength\tLength\nTopLevel\tLabel\nWidth\tLength\n\n\n\nPropertySet:\tSGPset_JunctionBox\tI\tIfcJunctionBox\nFireRating\tLabel\n\n\n\nPropertySet:\tSGPset_LightFixture\tI\tIfcLightFixture\nColorRenderingIndex\tInteger\nColorTemperature\tReal\nEnergyEfficiency\tInteger\nIndexOfProtection\tLabel\nIntensity\tInteger\n\n\n\nPropertySet:\tSGPset_Member\tI\tIfcMember\nCombustible\tBoolean\nMaterial_MeltingPoint\tLabel\n\n\n\nPropertySet:\tSGPset_MotorConnection\tI\tIfcMotorConnection\nGovernor_RopeDiameter\tLength\nGovernorType\tLabel\nMagneticTrip\tBoolean\nNoVoltRelease\tBoolean\nOverloadRelay\tBoolean\nRopeCount\tInteger\nRopeDiameter\tLength\n\n\n\nPropertySet:\tSGPset_OpeningElement\tI\tIfcOpeningElement\nBarrierFreeAccessibility\tBoolean\nEngineeredSmokeControlSystem\tBoolean\nMainEntrance\tBoolean\n\n\n\nPropertySet:\tSGPset_Outlet\tI\tIfcOutlet\nOutletType\tLabel\nOutletSocketType\tLabel\n\n\n\nPropertySet:\tSGPset_Pile\tI\tIfcPile\nBoreholeRef\tLabel\nConstructionMethod\tLabel\nDA1-1_CompressionCapacity\tLabel\nDA1-1_TensionCapacity\tLabel\nDA1-2_CompressionCapacity\tLabel\nDA1-2_TensionCapacity\tLabel\nEndBearingR4DesignFactor\tReal\nMaintainedLoadTestPile\tBoolean\nMinEmbedmentIntoBearingLayer_SPT_MoreThan_100N\tLabel\nMinEmbedmentIntoBearingLayer_SPT_MoreThan_60N\tLabel\nNonDestructiveTestPile\tBoolean\nPileModelFactor\tReal\nRapidLoadTestPile\tBoolean\nReinforcementSteelGrade\tLabel\nShaftR4DesignFactor\tReal\nStructuralCompressionCapacity\tLabel\nStructuralTensionCapacity\tLabel\nULTTestPile\tBoolean\nWorkingLoadTestPile\tBoolean\nMinRockSocketingLength\tLabel\n\n\n\nPropertySet:\tSGPset_PileDimension\tI\tIfcPile\nBreadth\tLength\nDiameter\tLength\nHeadLevel\tLabel\nMark\tLabel\nMemberSection\tLabel\nToeLevel\tLabel\nWidth\tLength\nLength\tLength\n\n\n\nPropertySet:\tSGPset_PileReinforcement\tI\tIfcPile\nAsRequiredBreadth\tLabel\nAsRequiredMain\tLabel\nAsRequiredStirrups\tLabel\nAsRequiredWidth\tLabel\nCornerRebar\tLabel\nDistributionRebar\tLabel\nMainRebar\tLabel\nPileType\tLabel\nReinforcementLength\tLength\nStirrups\tLabel \n\n\n\nPropertySet:\tSGPset_PileStructuralLoad\tI\tIfcPile\nDA1-1_CompressionDesignLoad\tLabel\nDA1-1_TensionDesignLoad\tLabel\nDA1-2_CompressionDesignLoad\tLabel\nDA1-2_TensionDesignLoad\tLabel\nNegativeSkinFriction\tLabel\n\n\n\nPropertySet:\tSGPset_PipeFitting\tI\tIfcPipeFitting\nCathodicProtection\tBoolean\nCorrosionResistant\tBoolean\nExternalReference\tLabel\nHeatResistant\tBoolean\nHighTemperatureResistant\tLabel\nHotDippedGalvanised\tBoolean\nInsulation_Combustible\tBoolean\nInsulation_FlameSpreadClass\tLabel\nInsulation_Material\tLabel\nLockable\tBoolean\nNominalDiameter\tLength\nPolyethyleneSleeve\tBoolean\nPre-insulated\tBoolean\nPressureRating\tLabel\nProtectiveCoating\tBoolean\nPWCS_VolumeOfWastePerDay\tLabel\nThermalInsulation_Material\tLabel\nThermalInsulation_Material_MeltingPoint\tLabel\nThickness\tLength\nVapourTight\tBoolean\nWaterProofingTape\tBoolean\nWeldedJoint\tBoolean\nWithFlange\tBoolean\nSystem Type Label\n\n\nPropertySet:\tSGPset_PipeFittingDimension\tI\tIfcPipeFitting\nDiameter\tLength\nInnerDiameter\tLength\nOuterDiameter\tLength\n\n\n\nPropertySet:\tSGPset_PipeSegment\tI\tIfcPipeSegment\nAntiCorrosionProtection\tBoolean\nCalculatedDN\tlabel\nCalculatedQapproved\tLabel\nCatchmentArea\tArea\nCathodicProtection\tBoolean\nCombustible\tBoolean\nConstructionMethod\tLabel\nCorrosionResistant\tBoolean\nCoupling_Diameter\tLength\nDesignedAgainstLongTermCorrosion\tBoolean\nExternalReference\tLabel\nFilledOrGrouted\tLabel\nFireRating\tLabel\nFlowrate\tVolume\nFootpath\tBoolean\nHeatResistant\tBoolean\nHighTemperatureResistant\tLabel\nInsulation_Combustible\tBoolean\nInsulation_FlameSpreadClass\tLabel\nInsulation_Material\tLabel\nInternalLiner\tLength\nLength\tLength\nLoadBearing\tBoolean\nMaintainedByOwner\tBoolean\nMaterial_MeltingPoint\tLabel\nPerforated\tBoolean\nPolyethyleneSleeve\tBoolean\nPre-insulated\tBoolean\nPressureRating\tLabel\nProtectiveCoating\tBoolean\nPWCS_VolumeOfWastePerDay\tLabel\nRoughnessCoefficient\tLabel\nShared\tBoolean\nThermalInsulation_Material\tLabel\nThermalInsulation_Material_MeltingPoint\tLabel\nThickness\tLength\nWaterProofingTape\tBoolean\nSystem Type Label\n\n\nPropertySet:\tSGPset_PipeSegmentDimension\tI\tIfcPipeSegment\nDiameter\tLength\nGradient\tLabel\tSlope\nHeight\tLength\nInnerDiameter\tLength\nLength\tLength\nOuterDiameter\tLength\nThickness\tLength\nWidth\tLength\n\n\n\nPropertySet:\tSGPset_PrecastConcreteElementGeneral\tI\tIfcColumn,IfcWall\nArrangementType\tLabel\n\n\n\nPropertySet:\tSGPset_ProtectiveDevice\tI\tIfcProtectiveDevice\nFuseDisconnectorType\tLabel\n\n\n\nPropertySet:\tSGPset_Pump\tI\tIfcPump\nBackupPowerSource\tBoolean\nCapacity\tLabel\nDischargeRate\tVolume\nDuty\tBoolean\nEarthFaultProtection\tBoolean\nExternalReference\tLabel\nFireRating\tLabel\nFlowRate\tVolume\nInflowRate\tVolume\nInternalPassageDiameter\tLength\nInternalSurfaceArea\tArea\nOverloadProtection\tBoolean\nSinglePhase\tBoolean\nStandby\tBoolean\nStandByGenerator\tBoolean\nStartStopPerHour\tInteger\nWorkingPressure\tLabel\n\n\n\nPropertySet:\tSGPset_Railing\tI\tIfcRailing\nBalustrade_Material\tLabel\nConstructionMethod\tLabel\nExternalReference\tLabel\nKerbHeight\tLength\nKerbWidth\tLength\nSafetyBarrier\tBoolean\nTypeOfBarrier\tLabel\nTypeOfGlass\tLabel\n\n\n\nPropertySet:\tSGPset_RailingDimension\tI\tIfcRailing\nHeight\tLength\nLateralLoad\tLabel\n\n\n\nPropertySet:\tSGPset_RailingStructuralLoad\tI\tIfcRailing\nLateralLoad\tLabel\n\n\n\nPropertySet:\tSGPset_Ramp\tI\tIfcRamp\nAccessway\tBoolean\nBarrierFreeAccessibility\tBoolean\nEgress\tBoolean\nIngress\tBoolean\nKerbHeight\tLength\nTransitionRamp\tBoolean\nVehicular\tBoolean\n\n\n\nPropertySet:\tSGPset_RampDimension\tI\tIfcRamp\nGradient\tLabel\nWidth\tLength\n\n\n\nPropertySet:\tSGPset_RampFlight\tI\tIfcRampFlight\nBarrierFreeAccessibility\tBoolean\n\n\n\nPropertySet:\tSGPset_Roof\tI\tIfcRoof\nCombustible\tBoolean\nConstructionMethod\tLabel\nExternalReference\tLabel\nFlameSpreadClass\tLabel\nMaterial_DaylightReflectance\tLabel\nMaterial_DiffuseReflectance\tLabel\nMaterial_SpecularReflectance\tLabel\nPerforated\tBoolean\nRoofFinish_Type\tLabel\nRTTV\tLabel\nWeight\tReal\nWeightGroup\tLabel\n\n\n\nPropertySet:\tSGPset_SanitaryTerminal\tI\tIfcSanitaryTerminal\nAmbulantDisabled\tBoolean\nBarrierFreeAccessibility\tBoolean\nChildrenFriendly\tBoolean\nExternalReference\tLabel\nFlowRate\tVolume\nFlushVolume\tLabel\nFullFlushVolume\tLabel\nIsSingleFlush\tBoolean\nReducedFlushVolume\tLabel\nSiphoning\tBoolean\nWithPlug\tBoolean\n\n\n\nPropertySet:\tSGPset_SanitaryTerminalTypeSink\tI\tIfcSanitaryTerminal\nSinkType\tLabel\n\n\n\nPropertySet:\tSGPset_SanitaryTerminalTypeUrinal\tI\tIfcSanitaryTerminal\nMounting\tLabel\nWaterless\tBoolean\n\n\n\nPropertySet:\tSGPset_SanitaryTerminalTypeWashHandBasin\tI\tIfcSanitaryTerminal\nMounting\tLabel\n\n\nPropertySet:\tSGPset_SanitaryTerminalTypeWaterCloset\tI\tIfcSanitaryTerminal\nPanMounting\tLabel\nToiletPanType\tLabel\n\n\n\nPropertySet:\tSGPset_Sensor\tI\tIfcSensor\nAC\tReal\nAI_AmmoniaAndAmmonium\tLabel\nAI_Antimony\tLabel\nAI_Arsenic\tLabel\nAI_Benzene\tLabel\nAI_Cadmium\tLabel\nAI_CarbonMonoxide\tLabel\nAI_Chlorine\tLabel\nAI_Copper\tLabel\nAI_DioxinsAndFurans\tLabel\nAI_EthyleneOxide\tLabel\nAI_FluorineAndHydrofluoricAcid\tLabel\nAI_Formaldehyde\tLabel\nAI_HydrogenChloride\tLabel\nAI_HydrogenSulphide\tLabel\nAI_Lead\tLabel\nAI_Mercury\tLabel\nAI_OxidesOfNitrogen\tLabel\nAI_ParticulateSubstances\tLabel\nAI_StyreneMonomer\tLabel\nAI_SulphurDioxide\tLabel\nAI_SulphurTrioxideAndAcidGases\tLabel\nAI_SulphurTrioxideOrSulphuricAcidMist\tLabel\nAI_VinylChlorideMonomer\tLabel\nDC\tReal\nDeclaration\tLabel\nEngineeredSmokeControlSystem\tBoolean\nExternalReference\tLabel\nIndependentPowerSupply\tBoolean\nReactionTime\tLabel\nSmokeDetectorType\tLabel\n\n\n\nPropertySet:\tSGPset_ShadingDevice\tI\tIfcShadingDevice\nCombustible\tBoolean\nFireRating\tLabel\nFixed\tBoolean\nFlameSpreadClass\tLabel\nInclination\tInteger\nPanelDepth\tLength\nPanelSpacing\tLength\nPerforationDiameter\tLength\nPorosity\tLabel\nRetractable\tBoolean\nSpacing\tLength\nSpringOpenType\tBoolean\n\n\n\nPropertySet:\tSGPset_Site\tI\tIfcSite\nCondition\tLabel\nConstructionPhase\tLabel\nDoubleSession\tBoolean\nExtg_GrossPlotRatio\tLabel\nGIS_LandUse\tLabel\nGIS_MaxAllowableWhiteUse\tLabel\nInternationalSchool\tBoolean\nNumberOfStudents\tInteger\nNumberOfWorkers\tInteger\nPhase\tLabel\nProjectDevelopmentType\tLabel\nOccupantLoad\tInteger\nRainfallIntensity\tReal\nRunoffCoefficient\tLabel\nWithNightLighting\tBoolean\n\n\n\nPropertySet:\tSGPset_Slab\tI\tIfcSlab\nAccreditation_PAS\tBoolean\nAntiSlipSurface\tBoolean\nCategoryOfLoadedArea\tLabel\nChemicalResistantMaterial\tBoolean\nConstructionMethod\tLabel\nFinishType\tLabel\nFireStop\tBoolean\nFlameSpreadClass\tLabel\nMechanicalConnectionType\tLabel\nPerforated\tBoolean\nPressureImpregnated\tBoolean\nReinforcementSteelGrade\tLabel\nShelterUsage\tBoolean\nSlabType\tLabel\nWatertight\tBoolean\nWeight\tReal\nWeightGroup\tLabel\nReferTo2DDetail\tBoolean\nReferToDrawingNumber\tLabel\n\n\nPropertySet:\tSGPset_SlabDimension\tI\tIfcSlab\nLength\tLength\nMark\tLabel\nThickness\tLength\nWidth\tLength\n\n\n\nPropertySet:\tSGPset_SlabReinforcement\tI\tIfcSlab\nAsRequiredBottomDistribution\tLabel\nAsRequiredBottomMain\tLabel\nAsRequiredBottomX\tLabel\nAsRequiredBottomY\tLabel\nAsRequiredStirrups\tLabel\nAsRequiredTopDistribution\tLabel\nAsRequiredTopMain\tLabel\nAsRequiredTopX\tLabel\nAsRequiredTopY\tLabel\nBottomDistribution\tLabel\nBottomMain\tLabel\nLatticeGirderReinforcement\tBoolean\nMark\tLabel\nTopDistribution\tLabel\nTopMain\tLabel\nStirrups\tLabel\nStirrupsType\tLabel\nWeldedMesh\tBoolean\n\n\n\nPropertySet:\tSGPset_SlabStructuralLoad\tI\tIfcSlab\nImposedLiveLoad\tLabel\nImposedLoad\tLabel\n\n\n\nPropertySet:\tSGPset_SolarDevice\tI\tIfcSolarDevice\nFireRating\tLabel\n\n\n\nPropertySet:\tSGPset_Space\tI\tIfcSpace\nAREA_CommunityAndSportsFacilitiesScheme\tLabel\nAutoIgnitionTemperature\tLabel\nBarrierFreeAccessibility\tBoolean\nBatteryType\tLabel\nCategoryOfStorage\tReal\nConstructionPhase\tLabel\nElderlyFriendly\tBoolean\nEmergencyUse\tBoolean\nExternalReference\tLabel\nFloorFinishType\tLabel\nGasExtinguishingSystemType\tLabel\nHazardousMaterialClass\tInteger\nHearingEnhancement\tBoolean\nMain\tBoolean\nMaximumStoredEnergy\tReal\nNegativeRoomPressure\tLabel\nPool_TurnoverTime\tLabel\nPool_Volume\tLabel\nPool_WithRecyclingFacilities\tBoolean\nPowerRating\tLabel\nPurposeGroup\tLabel\nRetrofit\tBoolean\nRoomPressure\tLabel\nSeatingCapacity\tInteger\nSpaceName\tLabel\tName\nStorageCategory\tInteger\nSubmissionByFutureTenant\tBoolean\nThresholdStoredEnergy\tReal\nTwentyFourHourMannedStation\tBoolean\nVentilationType\tLabel\n\n\n\nPropertySet:\tSGPset_SpaceArea_Connectivity\tI\tIfcSpace\nActivityGeneratingUseType\tLabel\nCloseTime\tLabel\nConnectivityType\tLabel\nIsOpen24Hours\tBoolean\nIsPavingSpecified\tBoolean\nOpenTime\tLabel\nPavingSpecification\tLabel\n\n\n\nPropertySet:\tSGPset_SpaceAreaDimension\tI\tIfcSpace\nArea\tArea\n\n\n\nPropertySet:\tSGPset_SpaceArea_GFA\tI\tIfcSpace\nDetailedUse\tLabel\nMasterplanUseType\tLabel\n\n\n\nPropertySet:\tSGPset_SpaceArea_Landscape\tI\tIfcSpace\nGreeneryFeatures\tLabel\nHardscapeType\tLabel\nSoftscapeType\tLabel\n\n\n\nPropertySet:\tSGPset_SpaceArea_Unit\tI\tIfcSpace\nExtg_ApprovedUse\tLabel\nGeocodeID\tLabel\nPrev_ApprovedUse\tLabel\nProposedUse\tLabel\nUnitNumber\tLabel\n\n\n\nPropertySet:\tSGPset_SpaceDimension\tI\tIfcSpace\nArea\tArea\nHeight\tLength\nVolume\tLabel\n\n\n\nPropertySet:\tSGPset_SpaceFireSafetyRequirements\tI\tIfcSpace\nAirPressurization\tBoolean\t\nFireExit\tBoolean\nFlammableStorage\tBoolean\nSprinklerProtectionAutomatic\tBoolean\n\n\n\nPropertySet:\tSGPset_SpaceLightingRequirements\tI\tIfcSpace\nIlluminance\tReal\t\n\n\n\nPropertySet:\tSGPset_SpaceOccupancyRequirements\tI\tIfcSpace\nOccupancyType\tLabel\nOccupantLoad\tInteger\n\n\n\nPropertySet:\tSGPset_SpaceThermalRequirements\tI\tIfcSpace\nAirConditioning\tBoolean\t\nAirConditioningCentral\tBoolean\t\nNaturalVentilation\tBoolean\n\n\n\nPropertySet:\tSGPset_StackTerminal\tI\tIfcStackTerminal\nAirParticleFilterType\tLabel\nApertureSize\tLength\nCorrosionResistant\tBoolean\n\n\n\nPropertySet:\tSGPset_Stair\tI\tIfcStair\nAccreditation_PAS\tBoolean\nBarrierFreeAccessibility\tBoolean\nCombustible\tBoolean\nConstructionMethod\tLabel\nExternalReference\tLabel\nLadder_RungClearWidth\tLength\nLadder_RungDiameter\tLength\nLadder_RungSpacing\tLength\nPressureImpregnated\tBoolean\nReinforcementSteelGrade\tLabel\nSectionFabricationMethod\tLabel\nShipLadder_Workload\tReal\nPerforated\tBoolean\nReferTo2DDetail\tBoolean\nReferToDrawingNumber\tLabel\nMark\tLabel\n\n\nPropertySet:\tSGPset_StairDimension\tI\tIfcStair\nThickness\tLength\nWidth\tLength\n\n\n\nPropertySet:\tSGPset_StairFlight\tI\tIfcStairFlight\nConstructionMethod\tLabel\nMechanicalConnectionType\tLabel\n\n\n\nPropertySet:\tSGPset_StairReinforcement\tI\tIfcStair\nAsRequiredBottomX\tLabel\nAsRequiredBottomY\tLabel\nAsRequiredStirrups\tLabel\nAsRequiredTopX\tLabel\nAsRequiredTopY\tLabel\nBottomDistribution\tLabel\nBottomMain\tLabel\nConstructionMethod\tLabel\nImposedLoad\tLabel\nStirrupsType\tLabel\nTopDistribution\tLabel\nTopMain\tLabel\n\n\n\nPropertySet:\tSGPset_StairSteelConnection\tI\tIfcStair\nConnectionDetailsBottom\tLabel\nConnectionDetailsTop\tLabel\nConnectionTypeBottom\tLabel\nConnectionTypeTop\tLabel\n\n\n\nPropertySet:\tSGPset_StairStructuralLoad\tI\tIfcStair\nImposedLiveLoad\tLabel\n\n\n\nPropertySet:\tSGPset_SteelConnection\tI\tIfcBeam\nLeftConnectionDetail\tLabel\nLeftConnectionType\tLabel\nRightConnectionDetail\tLabel\nRightConnectionType\tLabel\n\n\n\nPropertySet:\tSGPset_SteelConnection\tI\tIfcColumn\nConnectionDetailsBottom\tLabel\nConnectionDetailsTop\tLabel\nConnectionTypeBottom\tLabel\nConnectionTypeTop\tLabel\nSpliceDetail\tLabel\n\n\n\nPropertySet:\tSGPset_SteelElementGeneral\tI\tIfcBeam,IfcColumn,IfcPile,IfcStair\nSteelGrade\tLabel\n\n\n\nPropertySet:\tSGPset_StrataLot\tI\tIfcSpace\nAreaDescription\tLabel\nBuildingName_Source\tLabel\nExtg_ApprovedUse\tLabel\nExtg_StrataLotNumber\tLabel\nGeocodeID\tLabel\nHouseNumber\tLabel\nIsVoid\tBoolean\nLevelNumber\tLabel\nLotStatus\tLabel\nOldFormatLotNumber\tLabel\nParcelType\tLabel\nPlanNumber\tLabel\nPostalCode\tLabel\nProp_StrataLotNumber\tLabel\nProp_Use\tLabel\nResidingOnLandLot\tLabel\nStrataLotArea\tArea\nStrataLotNumber\tLabel\nStreetName_StreetCode\tLabel\nSVYFileNumber\tLabel\nTypicalFloor\tBoolean\nUnitName\tLabel\nUnitNumber\tLabel\nUnitType\tLabel\nVoidArea\tArea\n\nPropertySet:\tSGPset_SwitchingDevice\tI\tIfcSwitchingDevice\nBreakable\tBoolean\n\nPropertySet:\tSGPset_Material\tI\tIfcElement\nMaterial\tLabel\n\nPropertySet:\tSGPset_SystemDimension\tI\tIfcDistributionSystem\nDiameter\tLength\nGradient\tLabel\tSlope\nLength\tLength\nMaterial\tLabel\n\n\n\nPropertySet:\tSGPset_Tank\tI\tIfcTank\nAnchorPoint\tBoolean\nAquaticFacility\tBoolean\nBoltWithStainlessSteelBracket\tBoolean\nCathodicProtection\tBoolean\nChemicalType\tLabel\nCompactionRatio\tLabel\nContinuousUse\tBoolean\nCorrosionResistant\tBoolean\nEquipmentType\tLabel\nExternalReference\tLabel\nExtinguisherType\tLabel\nFasternWithStainlessSteelFasterners\tBoolean\nFireRating\tLabel\nFuelType\tLabel\nHazardousSubstances\tBoolean\nHazardousSubstancesMass\tReal\nHazardousWaste\tBoolean\nIsPotable\tBoolean\nNoBackflowThroughOverflowPipe\tBoolean\nOilType\tLabel\nOneDayRequirement\tLabel\nOverflowPipeAsWarningDevice\tBoolean\nProtectiveCoating\tBoolean\nStandby\tBoolean\nStateofMatter\tLabel\nStorageDuration\tLabel\nTradeEffluent\tBoolean\nVerticalLifeline\tBoolean\nWaterSealant\tBoolean\nWatertight\tBoolean\n\n\n\nPropertySet:\tSGPset_TankDimension\tI\tIfcTank\nDiameter\tLength\nHeight\tLength\nLength\tLength\nThickness\tLength\nWidth\tLength\n\n\n\nPropertySet:\tSGPset_Transformer\tI\tIfcTransformer\nDischargeTime\tLabel\nExternalReference\tLabel\n\n\n\nPropertySet:\tSGPset_TransportElement\tI\tIfcTransportElement\nBarrierFreeAccessibility\tBoolean\nDischargeCapacityRate\tLabel\nExternalReference\tLabel\n\n\n\nPropertySet:\tSGPset_TransportElementTypeEscalator\tI\tIfcTransportElement\nAuxiliaryBrake\tBoolean\nAuxiliaryBrake_MechanicalType\tBoolean\nChainCount\tInteger\nCombTeeth_Angle\tLabel\nCombTeeth_Clearance\tLength\nCombTeeth_MeshDepth\tLength\nCombTeeth_Radius\tLength\nCombTeeth_Width\tLength\nDrivingElementSafetyFactor\tInteger\nElectromechanicalBrakeType\tBoolean\nInteriorPanelMaterial\tLabel\nNominalSpeed\tLabel\nNonFrictionDrivingElement\tBoolean\nPalletStepHeight\tLength\nPalletStepWidth\tLength\nPalletWidth\tLength\nTrapezoidalBeltSafetyFactor\tInteger\n\n\n\nPropertySet:\tSGPset_TransportElementTypeLift\tI\tIfcTransportElement\nBedLift\tBoolean\nClearDepth\tLength\nClearHeight\tLength\nClearWidth\tLength\nCompensatingRope_NominalDiameter\tLength\nControlDevice_OperableDistance\tLength\t\nDriveSystemType\tLabel\nEvacuationLift\tBoolean\nFireFightingLift\tBoolean\nMinimumLoad\tReal\nPlatformSupportSystemType\tLabel\nRatedLoad\tLabel\nRatedSpeed\tLabel\nRopeCount\tInteger\nSafetyGear\tBoolean\nStaticLoad\tLabel\nTensioningPulley_NipGuard\tBoolean\nTensioningPulley_PitchDiameter\tLength\nTransmissionUnitCount\tInteger\nTrapDoor_OpenOutward\tBoolean\nTravelHeight\tLength\n\n\n\nPropertySet:\tSGPset_TransportElementTypeLiftDimension\tI\tIfcTransportElement\nLength\tLength\nWidth\tLength\n\n\n\nPropertySet:\tSGPset_TransportElementTypeMovingWalkway\tI\tIfcTransportElement\nAuxiliaryBrake\tBoolean\nAuxiliaryBrake_MechanicalType\tBoolean\nElectromechanicalBrakeType\tBoolean\nInteriorPanelMaterial\tLabel\n\n\n\nPropertySet:\tSGPset_UnitaryControlElement\tI\tIfcUnitaryControlElement\nAlarmPanel\tBoolean\nAmmeter\tBoolean\nAutomaticFireAlarmSystem\tBoolean\nAutoManualSelectorSwitch\tBoolean\nAutomatic\tBoolean\nElectricVehicle\tBoolean\nEngineeredSmokeControlSystem\tBoolean\nExternalReference\tLabel\nFaultResetPushButton\tBoolean\nFireAlarmPanel\tBoolean\nIndicatingLight\tBoolean\nIPRating\tInteger\nJetFan\tBoolean\nNominalVoltage\tReal\nPurpose\tLabel\nPWCS_AirIntakeValve\tBoolean\nPWCS_CollectionStation\tBoolean\nPWCS_DischargeValve\tBoolean\nPWCS_Flushing\tBoolean\nPWCS_TemporaryStorageSection\tBoolean\nSmokeControlPanel\tBoolean\nSmokePurging\tBoolean\nStartStopPushButton\tBoolean\nStoppingDevice\tBoolean\nTelephoneButton\tBoolean\nOneWayCommunication\tBoolean\nTwoWayCommunication\tBoolean\n\n\n\nPropertySet:\tSGPset_UnitaryEquipment\tI\tIfcUnitaryEquipment\nAirChangePerHour\tLabel\nAirFlowRate\tlabel\nFlammableRefrigerant\tBoolean\nModelName\tBoolean\nR32Refrigerant\tBoolean\nSoundPowerLevel\tLabel\nSoundPressureLevel\tLabel\n\n\n\nPropertySet:\tSGPset_Valve\tI\tIfcValve\nAirTight\tBoolean\nBatteryOperated\tBoolean\nChargeableBatteryOperated\tBoolean\nElectricallyActuated\tBoolean\nExternalReference\tLabel\nFireSuppressionActivated\tBoolean\nFlowRate\tVolume\nHandle\tBoolean\nIntegratedCheckValve\tBoolean\nLockable\tBoolean\nManualOverride\tBoolean\nNonModulatingType\tBoolean\nNormallyClosed\tBoolean\nOpeningDiameter\tLength\nOrificeType\tLabel\nPneumaticActuated\tBoolean\nQuickCouplerType\tBoolean\nSensorOperated\tBoolean\nVacuumBreaker\tBoolean\nWithAirFilterSilencer\tBoolean\nWithCompressedAirFilter\tBoolean\nWithIsolatingValve\tBoolean\nWithLockingDevice\tBoolean\nWithPositionSensor\tBoolean\n\n\n\nPropertySet:\tSGPset_ValveTypeFaucet\tI\tIfcValve\nFaucetOperation\tLabel\nFaucetType\tLabel\n\n\n\nPropertySet:\tSGPset_ValveTypePressureReducing\tI\tIfcValve\nDownstreamPressure\tLabel\n\n\n\nPropertySet:\tSGPset_ValveTypePressureRelief\tI\tIfcValve\nReliefPressure\tReal\n\n\n\nPropertySet:\tSGPset_Wall\tI\tIfcWall\nAccreditation_PAS\tBoolean\nConstructionMethod\tLabel\nCorrectionFactor\tReal\nExternalReference\tLabel\nFinishType\tLabel\nFireStop\tBoolean\nFlameSpreadClass\tLabel\nIsPartyWall\tBoolean\nMaterial_DiffuseReflectance\tLabel\nMaterial_SpecularReflectance\tLabel\nMechanicalConnectionType\tLabel\nPorousFence\tBoolean\nPrecisionBlockwall\tBoolean\nReinforcementSteelGrade\tLabel\nRightOfWay\tBoolean\nShelterUsage\tBoolean\nStrengthClass\tLabel\nWaterSealant\tBoolean\nWatertight\tBoolean\nReferTo2DDetail\tBoolean\nReferToDrawingNumber\tLabel\n\n\n\nPropertySet:\tSGPset_WallDimension\tI\tIfcWall\nHeight\tLength\nLength\tLength\nMark\tLabel\nThickness\tLength\nTypeMark\tLabel\n\n\n\nPropertySet:\tSGPset_WallReinforcement\tI\tIfcWall\nAsRequiredHorizontal\tLabel\nAsRequiredVertical\tLabel\nAsRequiredStirrups\tLabel\nHorizontalRebar\tLabel\nStirrups\tLabel\nStirrupsType\tLabel\nVerticalRebar\tLabel\nPrefabricatedReinforcementCage\tBoolean\n\n\n\nPropertySet:\tSGPset_WasteTerminal\tI\tIfcWasteTerminal\nAntiMosquitoDevice\tBoolean\nExternalReference\tLabel\nIsBolted\tBoolean\nIsScrewed\tBoolean\nMaterial_WasteFlowDiverterValve\tLabel\nPassageClearance\tLength\nWaterSealCompartment\tLength\nWithApprovedSeal\tBoolean\n\n\n\nPropertySet:\tSGPset_Window\tI\tIfcWindow\nCombustible\tBoolean\nConstructionMethod\tLabel\nCorrosionResistant\tBoolean\nFireAccessOpening\tBoolean\nFixed\tBoolean\nFixedLouvreBlade\tLabel\nInsectScreen\tBoolean\nIsBuiltIn\tBoolean\nIsLaminated\tBoolean\nMaterial_DaylightReflectance\tLabel\nMaterial_DiffuseReflectance\tLabel\nMaterial_SpecularReflectance\tLabel\nOperationType\tLabel\nPercentageOfOpening\tReal\nShadingCoefficient\tReal\nShadingCoefficient_Glass\tReal\nWithMetalGrill\tBoolean\nWithFanlight\tBoolean\n\n\n\nPropertySet:\tSGPset_WindowDimension\tI\tIfcWindow\nInnerDiameter\tLength\nOuterDiameter\tLength\n\n\n\nPropertySet:\tSGPset_WorkControlCommon\tI\tIfcBuilding\nWorkDayDuration\tLabel\n\n--------------------------------------------------------------\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "Install/Program Files to Install/IFC2X2_ADD1.exp",
    "content": "(*\nCopyright by:\nInternational Alliance for Interoperability, 1996-2003\n\nAll rights reserved. No part of this documentation may be\nreproduced, stored in a retrieval system, or transmitted\nin any form or by any means, without the prior written\npermission of the owner.\n\nContents:\nfull IFC object model EXPRESS definitions for the IFC2x Edition 2 Addendum 1\n- express longform distribution\n\nIssue date:\nJuly 16, 2004\n\nDevelopment Team:\nModeling Support Group of the \nInternational Alliance for Interoperability\n*)\n\n\n\n\n\nSCHEMA IFC2X2_FINAL;\n\nTYPE IfcAbsorbedDoseMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAccelerationMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAmountOfSubstanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAngularVelocityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAreaMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcBoolean = BOOLEAN;\nEND_TYPE;\n\nTYPE IfcComplexNumber = ARRAY [1:2] OF REAL;\nEND_TYPE;\n\nTYPE IfcCompoundPlaneAngleMeasure = LIST [3:3] OF INTEGER;\n WHERE\n\tWR1 : { -360 <= SELF[1] < 360 };\n\tWR2 : { -60 <= SELF[2] < 60 };\n\tWR3 : { -60 <= SELF[3] < 60 };\n\tWR4 : ((SELF[1] >= 0) AND (SELF[2] >= 0) AND (SELF[3] >= 0)) OR ((SELF[1] <= 0) AND (SELF[2] <= 0) AND (SELF[3] <= 0));\nEND_TYPE;\n\nTYPE IfcContextDependentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcCountMeasure = NUMBER;\nEND_TYPE;\n\nTYPE IfcCurvatureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcDayInMonthNumber = INTEGER;\nEND_TYPE;\n\nTYPE IfcDaylightSavingHour = INTEGER;\n WHERE\n\tWR1 : { 0 <= SELF <= 2 };\nEND_TYPE;\n\nTYPE IfcDescriptiveMeasure = STRING;\nEND_TYPE;\n\nTYPE IfcDimensionCount = INTEGER;\n WHERE\n\tWR1 : { 0 < SELF <= 3 };\nEND_TYPE;\n\nTYPE IfcDoseEquivalentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcDynamicViscosityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricCapacitanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricChargeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricConductanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricCurrentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricResistanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricVoltageMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcEnergyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcFrequencyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcGloballyUniqueId = STRING(22) FIXED;\nEND_TYPE;\n\nTYPE IfcHeatFluxDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcHeatingValueMeasure = REAL;\n WHERE\n\tWR1 : SELF > 0;\nEND_TYPE;\n\nTYPE IfcHourInDay = INTEGER;\n WHERE\n\tWR1 : { 0 <= SELF < 24 };\nEND_TYPE;\n\nTYPE IfcIdentifier = STRING;\nEND_TYPE;\n\nTYPE IfcIlluminanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcInductanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcInteger = INTEGER;\nEND_TYPE;\n\nTYPE IfcIntegerCountRateMeasure = INTEGER;\nEND_TYPE;\n\nTYPE IfcIonConcentrationMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcIsothermalMoistureCapacityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcKinematicViscosityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLabel = STRING;\nEND_TYPE;\n\nTYPE IfcLengthMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearMomentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearStiffnessMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearVelocityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLogical = LOGICAL;\nEND_TYPE;\n\nTYPE IfcLuminousFluxMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLuminousIntensityDistributionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLuminousIntensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMagneticFluxDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMagneticFluxMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassFlowRateMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassPerLengthMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMinuteInHour = INTEGER;\n WHERE\n\tWR1 : {0 <= SELF <= 59 };\nEND_TYPE;\n\nTYPE IfcModulusOfElasticityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfLinearSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfRotationalSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMoistureDiffusivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMolecularWeightMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMomentOfInertiaMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMonetaryMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMonthInYearNumber = INTEGER;\n WHERE\n\tWR1 : { 1<= SELF <= 12 };\nEND_TYPE;\n\nTYPE IfcNormalisedRatioMeasure = IfcRatioMeasure;\n WHERE\n\tWR1 : {0.0 <= SELF <= 1.0};\nEND_TYPE;\n\nTYPE IfcNumericMeasure = NUMBER;\nEND_TYPE;\n\nTYPE IfcPHMeasure = REAL;\n WHERE\n\tWR21 : {0.0 <= SELF <= 14.0};\nEND_TYPE;\n\nTYPE IfcParameterValue = REAL;\nEND_TYPE;\n\nTYPE IfcPlanarForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPlaneAngleMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPositiveLengthMeasure = IfcLengthMeasure;\n WHERE\n\tWR1 : SELF > 0;\nEND_TYPE;\n\nTYPE IfcPositivePlaneAngleMeasure = IfcPlaneAngleMeasure;\n WHERE\n\tWR1 : SELF > 0;\nEND_TYPE;\n\nTYPE IfcPositiveRatioMeasure = IfcRatioMeasure;\n WHERE\n\tWR1 : SELF > 0;\nEND_TYPE;\n\nTYPE IfcPowerMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPresentableText = STRING;\nEND_TYPE;\n\nTYPE IfcPressureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRadioActivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRatioMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcReal = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalFrequencyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalMassMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalStiffnessMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSecondInMinute = REAL;\n WHERE\n\tWR1 : { 0 <= SELF < 60 };\nEND_TYPE;\n\nTYPE IfcSectionModulusMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSectionalAreaIntegralMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcShearModulusMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSolidAngleMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPowerMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPressureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSpecificHeatCapacityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSpecularExponent = REAL;\nEND_TYPE;\n\nTYPE IfcSpecularRoughness = REAL;\n WHERE\n\tWR1 : {0.0 <= SELF <= 1.0};\nEND_TYPE;\n\nTYPE IfcTemperatureGradientMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcText = STRING;\nEND_TYPE;\n\nTYPE IfcTextAlignment = IfcLabel;\nEND_TYPE;\n\nTYPE IfcThermalAdmittanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalConductivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalExpansionCoefficientMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalResistanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalTransmittanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermodynamicTemperatureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcTimeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcTimeStamp = INTEGER;\nEND_TYPE;\n\nTYPE IfcTorqueMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcVaporPermeabilityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcVolumeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcVolumetricFlowRateMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcWarpingConstantMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcWarpingMomentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcYearNumber = INTEGER;\nEND_TYPE;\n\nTYPE IfcActionSourceTypeEnum = ENUMERATION OF\n\t(DEAD_LOAD_G\n\t,COMPLETION_G1\n\t,LIVE_LOAD_Q\n\t,SNOW_S\n\t,WIND_W\n\t,PRESTRESSING_P\n\t,SETTLEMENT_U\n\t,TEMPERATURE_T\n\t,EARTHQUAKE_E\n\t,FIRE\n\t,IMPULSE\n\t,IMPACT\n\t,TRANSPORT\n\t,ERECTION\n\t,PROPPING\n\t,SYSTEM_IMPERFECTION\n\t,SHRINKAGE\n\t,CREEP\n\t,LACK_OF_FIT\n\t,BUOYANCY\n\t,ICE\n\t,CURRENT\n\t,WAVE\n\t,RAIN\n\t,BRAKES\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActionTypeEnum = ENUMERATION OF\n\t(PERMANENT_G\n\t,VARIABLE_Q\n\t,EXTRAORDINARY_A\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActuatorTypeEnum = ENUMERATION OF\n\t(ELECTRICACTUATOR\n\t,HANDOPERATEDACTUATOR\n\t,HYDRAULICACTUATOR\n\t,PNEUMATICACTUATOR\n\t,THERMOSTATICACTUATOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAddressTypeEnum = ENUMERATION OF\n\t(OFFICE\n\t,SITE\n\t,HOME\n\t,DISTRIBUTIONPOINT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcAheadOrBehind = ENUMERATION OF\n\t(AHEAD\n\t,BEHIND);\nEND_TYPE;\n\nTYPE IfcAirTerminalBoxTypeEnum = ENUMERATION OF\n\t(CONSTANTFLOW\n\t,VARIABLEFLOWPRESSUREDEPENDANT\n\t,VARIABLEFLOWPRESSUREINDEPENDANT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAirTerminalTypeEnum = ENUMERATION OF\n\t(GRILLE\n\t,REGISTER\n\t,DIFFUSER\n\t,EYEBALL\n\t,IRIS\n\t,LINEARGRILLE\n\t,LINEARDIFFUSER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAirToAirHeatRecoveryTypeEnum = ENUMERATION OF\n\t(FIXEDPLATECOUNTERFLOWEXCHANGER\n\t,FIXEDPLATECROSSFLOWEXCHANGER\n\t,FIXEDPLATEPARALLELFLOWEXCHANGER\n\t,ROTARYWHEEL\n\t,RUNAROUNDCOILLOOP\n\t,HEATPIPE\n\t,TWINTOWERENTHALPYRECOVERYLOOPS\n\t,THERMOSIPHONSEALEDTUBEHEATEXCHANGERS\n\t,THERMOSIPHONCOILTYPEHEATEXCHANGERS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAlarmTypeEnum = ENUMERATION OF\n\t(BELL\n\t,BREAKGLASSBUTTON\n\t,LIGHT\n\t,MANUALPULLBOX\n\t,SIREN\n\t,WHISTLE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAnalysisModelTypeEnum = ENUMERATION OF\n\t(IN_PLANE_LOADING_2D\n\t,OUT_PLANE_LOADING_2D\n\t,LOADING_3D\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAnalysisTheoryTypeEnum = ENUMERATION OF\n\t(FIRST_ORDER_THEORY\n\t,SECOND_ORDER_THEORY\n\t,THIRD_ORDER_THEORY\n\t,FULL_NONLINEAR_THEORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcArithmeticOperatorEnum = ENUMERATION OF\n\t(ADD\n\t,DIVIDE\n\t,MULTIPLY\n\t,SUBTRACT);\nEND_TYPE;\n\nTYPE IfcAssemblyPlaceEnum = ENUMERATION OF\n\t(SITE\n\t,FACTORY\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBSplineCurveForm = ENUMERATION OF\n\t(POLYLINE_FORM\n\t,CIRCULAR_ARC\n\t,ELLIPTIC_ARC\n\t,PARABOLIC_ARC\n\t,HYPERBOLIC_ARC\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcBeamTypeEnum = ENUMERATION OF\n\t(BEAM\n\t,JOIST\n\t,LINTEL\n\t,T_BEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBenchmarkEnum = ENUMERATION OF\n\t(GREATERTHAN\n\t,GREATERTHANOREQUALTO\n\t,LESSTHAN\n\t,LESSTHANOREQUALTO\n\t,EQUALTO\n\t,NOTEQUALTO);\nEND_TYPE;\n\nTYPE IfcBoilerTypeEnum = ENUMERATION OF\n\t(WATER\n\t,STEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBooleanOperator = ENUMERATION OF\n\t(UNION\n\t,INTERSECTION\n\t,DIFFERENCE);\nEND_TYPE;\n\nTYPE IfcCableCarrierFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CROSS\n\t,REDUCER\n\t,TEE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableCarrierSegmentTypeEnum = ENUMERATION OF\n\t(CABLELADDERSEGMENT\n\t,CABLETRAYSEGMENT\n\t,CABLETRUNKINGSEGMENT\n\t,CONDUITSEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableSegmentTypeEnum = ENUMERATION OF\n\t(CABLESEGMENT\n\t,CONDUCTORSEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcChangeActionEnum = ENUMERATION OF\n\t(NOCHANGE\n\t,MODIFIED\n\t,ADDED\n\t,DELETED\n\t,MODIFIEDADDED\n\t,MODIFIEDDELETED);\nEND_TYPE;\n\nTYPE IfcChillerTypeEnum = ENUMERATION OF\n\t(AIRCOOLED\n\t,WATERCOOLED\n\t,HEATRECOVERY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoilTypeEnum = ENUMERATION OF\n\t(DXCOOLINGCOIL\n\t,WATERCOOLINGCOIL\n\t,STEAMHEATINGCOIL\n\t,WATERHEATINGCOIL\n\t,ELECTRICHEATINGCOIL\n\t,GASHEATINGCOIL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcColumnTypeEnum = ENUMERATION OF\n\t(COLUMN\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCompressorTypeEnum = ENUMERATION OF\n\t(DYNAMIC\n\t,RECIPROCATING\n\t,ROTARY\n\t,SCROLL\n\t,TROCHOIDAL\n\t,SINGLESTAGE\n\t,BOOSTER\n\t,OPENTYPE\n\t,HERMETIC\n\t,SEMIHERMETIC\n\t,WELDEDSHELLHERMETIC\n\t,ROLLINGPISTON\n\t,ROTARYVANE\n\t,SINGLESCREW\n\t,TWINSCREW\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCondenserTypeEnum = ENUMERATION OF\n\t(WATERCOOLEDSHELLTUBE\n\t,WATERCOOLEDSHELLCOIL\n\t,WATERCOOLEDTUBEINTUBE\n\t,WATERCOOLEDBRAZEDPLATE\n\t,AIRCOOLED\n\t,EVAPORATIVECOOLED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConnectionTypeEnum = ENUMERATION OF\n\t(ATPATH\n\t,ATSTART\n\t,ATEND\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConstraintEnum = ENUMERATION OF\n\t(HARD\n\t,SOFT\n\t,ADVISORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcControllerTypeEnum = ENUMERATION OF\n\t(FLOATING\n\t,PROPORTIONAL\n\t,PROPORTIONALINTEGRAL\n\t,PROPORTIONALINTEGRALDERIVATIVE\n\t,TIMEDTWOPOSITION\n\t,TWOPOSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCooledBeamTypeEnum = ENUMERATION OF\n\t(ACTIVE\n\t,PASSIVE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoolingTowerTypeEnum = ENUMERATION OF\n\t(NATURALDRAFT\n\t,MECHANICALINDUCEDDRAFT\n\t,MECHANICALFORCEDDRAFT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCostScheduleTypeEnum = ENUMERATION OF\n\t(BUDGET\n\t,COSTPLAN\n\t,ESTIMATE\n\t,TENDER\n\t,PRICEDBILLOFQUANTITIES\n\t,UNPRICEDBILLOFQUANTITIES\n\t,SCHEDULEOFRATES\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoveringTypeEnum = ENUMERATION OF\n\t(CEILING\n\t,FLOORING\n\t,CLADDING\n\t,ROOFING\n\t,INSULATION\n\t,MEMBRANE\n\t,SLEEVING\n\t,WRAPPING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCurrencyEnum = ENUMERATION OF\n\t(AED\n\t,AES\n\t,ATS\n\t,AUD\n\t,BBD\n\t,BEG\n\t,BGL\n\t,BHD\n\t,BMD\n\t,BND\n\t,BRL\n\t,BSD\n\t,BWP\n\t,BZD\n\t,CAD\n\t,CBD\n\t,CHF\n\t,CLP\n\t,CNY\n\t,CYS\n\t,CZK\n\t,DDP\n\t,DEM\n\t,DKK\n\t,EGL\n\t,EST\n\t,EUR\n\t,FAK\n\t,FIM\n\t,FJD\n\t,FKP\n\t,FRF\n\t,GBP\n\t,GIP\n\t,GMD\n\t,GRX\n\t,HKD\n\t,HUF\n\t,ICK\n\t,IDR\n\t,ILS\n\t,INR\n\t,IRP\n\t,ITL\n\t,JMD\n\t,JOD\n\t,JPY\n\t,KES\n\t,KRW\n\t,KWD\n\t,KYD\n\t,LKR\n\t,LUF\n\t,MTL\n\t,MUR\n\t,MXN\n\t,MYR\n\t,NLG\n\t,NZD\n\t,OMR\n\t,PGK\n\t,PHP\n\t,PKR\n\t,PLN\n\t,PTN\n\t,QAR\n\t,RUR\n\t,SAR\n\t,SCR\n\t,SEK\n\t,SGD\n\t,SKP\n\t,THB\n\t,TRL\n\t,TTD\n\t,TWD\n\t,USD\n\t,VEB\n\t,VND\n\t,XEU\n\t,ZAR\n\t,ZWD\n\t,NOK);\nEND_TYPE;\n\nTYPE IfcDamperTypeEnum = ENUMERATION OF\n\t(CONTROLDAMPER\n\t,FIREDAMPER\n\t,SMOKEDAMPER\n\t,FIRESMOKEDAMPER\n\t,BACKDRAFTDAMPER\n\t,RELIEFDAMPER\n\t,BLASTDAMPER\n\t,GRAVITYDAMPER\n\t,GRAVITYRELIEFDAMPER\n\t,BALANCINGDAMPER\n\t,FUMEHOODEXHAUST\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDataOriginEnum = ENUMERATION OF\n\t(MEASURED\n\t,PREDICTED\n\t,SIMULATED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDerivedUnitEnum = ENUMERATION OF\n\t(ANGULARVELOCITYUNIT\n\t,COMPOUNDPLANEANGLEUNIT\n\t,DYNAMICVISCOSITYUNIT\n\t,HEATFLUXDENSITYUNIT\n\t,INTEGERCOUNTRATEUNIT\n\t,ISOTHERMALMOISTURECAPACITYUNIT\n\t,KINEMATICVISCOSITYUNIT\n\t,LINEARVELOCITYUNIT\n\t,MASSDENSITYUNIT\n\t,MASSFLOWRATEUNIT\n\t,MOISTUREDIFFUSIVITYUNIT\n\t,MOLECULARWEIGHTUNIT\n\t,SPECIFICHEATCAPACITYUNIT\n\t,THERMALADMITTANCEUNIT\n\t,THERMALCONDUCTANCEUNIT\n\t,THERMALRESISTANCEUNIT\n\t,THERMALTRANSMITTANCEUNIT\n\t,VAPORPERMEABILITYUNIT\n\t,VOLUMETRICFLOWRATEUNIT\n\t,ROTATIONALFREQUENCYUNIT\n\t,TORQUEUNIT\n\t,MOMENTOFINERTIAUNIT\n\t,LINEARMOMENTUNIT\n\t,LINEARFORCEUNIT\n\t,PLANARFORCEUNIT\n\t,MODULUSOFELASTICITYUNIT\n\t,SHEARMODULUSUNIT\n\t,LINEARSTIFFNESSUNIT\n\t,ROTATIONALSTIFFNESSUNIT\n\t,MODULUSOFSUBGRADEREACTIONUNIT\n\t,ACCELERATIONUNIT\n\t,CURVATUREUNIT\n\t,HEATINGVALUEUNIT\n\t,IONCONCENTRATIONUNIT\n\t,LUMINOUSINTENSITYDISTRIBUTIONUNIT\n\t,MASSPERLENGTHUNIT\n\t,MODULUSOFLINEARSUBGRADEREACTIONUNIT\n\t,MODULUSOFROTATIONALSUBGRADEREACTIONUNIT\n\t,PHUNIT\n\t,ROTATIONALMASSUNIT\n\t,SECTIONAREAINTEGRALUNIT\n\t,SECTIONMODULUSUNIT\n\t,SOUNDPOWERUNIT\n\t,SOUNDPRESSUREUNIT\n\t,TEMPERATUREGRADIENTUNIT\n\t,THERMALEXPANSIONCOEFFICIENTUNIT\n\t,WARPINGCONSTANTUNIT\n\t,WARPINGMOMENTUNIT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcDimensionExtentUsage = ENUMERATION OF\n\t(ORIGIN\n\t,TARGET);\nEND_TYPE;\n\nTYPE IfcDirectionSenseEnum = ENUMERATION OF\n\t(POSITIVE\n\t,NEGATIVE);\nEND_TYPE;\n\nTYPE IfcDistributionChamberElementTypeEnum = ENUMERATION OF\n\t(FORMEDDUCT\n\t,INSPECTIONCHAMBER\n\t,INSPECTIONPIT\n\t,MANHOLE\n\t,METERCHAMBER\n\t,SUMP\n\t,TRENCH\n\t,VALVECHAMBER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDocumentConfidentialityEnum = ENUMERATION OF\n\t(PUBLIC\n\t,RESTRICTED\n\t,CONFIDENTIAL\n\t,PERSONAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDocumentStatusEnum = ENUMERATION OF\n\t(DRAFT\n\t,FINALDRAFT\n\t,FINAL\n\t,REVISION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorPanelOperationEnum = ENUMERATION OF\n\t(SWINGING\n\t,DOUBLE_ACTING\n\t,SLIDING\n\t,FOLDING\n\t,REVOLVING\n\t,ROLLINGUP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorPanelPositionEnum = ENUMERATION OF\n\t(LEFT\n\t,MIDDLE\n\t,RIGHT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorStyleConstructionEnum = ENUMERATION OF\n\t(ALUMINIUM\n\t,HIGH_GRADE_STEEL\n\t,STEEL\n\t,WOOD\n\t,ALUMINIUM_WOOD\n\t,ALUMINIUM_PLASTIC\n\t,PLASTIC\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorStyleOperationEnum = ENUMERATION OF\n\t(SINGLE_SWING_LEFT\n\t,SINGLE_SWING_RIGHT\n\t,DOUBLE_DOOR_SINGLE_SWING\n\t,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT\n\t,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT\n\t,DOUBLE_SWING_LEFT\n\t,DOUBLE_SWING_RIGHT\n\t,DOUBLE_DOOR_DOUBLE_SWING\n\t,SLIDING_TO_LEFT\n\t,SLIDING_TO_RIGHT\n\t,DOUBLE_DOOR_SLIDING\n\t,FOLDING_TO_LEFT\n\t,FOLDING_TO_RIGHT\n\t,DOUBLE_DOOR_FOLDING\n\t,REVOLVING\n\t,ROLLINGUP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CONNECTOR\n\t,ENTRY\n\t,EXIT\n\t,JUNCTION\n\t,OBSTRUCTION\n\t,TRANSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctSegmentTypeEnum = ENUMERATION OF\n\t(RIGIDSEGMENT\n\t,FLEXIBLESEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctSilencerTypeEnum = ENUMERATION OF\n\t(FLATOVAL\n\t,RECTANGULAR\n\t,ROUND\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricApplianceTypeEnum = ENUMERATION OF\n\t(COMPUTER\n\t,DIRECTWATERHEATER\n\t,DISHWASHER\n\t,ELECTRICCOOKER\n\t,ELECTRICHEATER\n\t,FACSIMILE\n\t,FREESTANDINGFAN\n\t,FREEZER\n\t,FRIDGE_FREEZER\n\t,HANDDRYER\n\t,INDIRECTWATERHEATER\n\t,MICROWAVE\n\t,PHOTOCOPIER\n\t,PRINTER\n\t,REFRIGERATOR\n\t,RADIANTHEATER\n\t,SCANNER\n\t,TELEPHONE\n\t,TUMBLEDRYER\n\t,TV\n\t,VENDINGMACHINE\n\t,WASHINGMACHINE\n\t,WATERHEATER\n\t,WATERCOOLER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricCurrentEnum = ENUMERATION OF\n\t(ALTERNATING\n\t,DIRECT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricDistributionPointFunctionEnum = ENUMERATION OF\n\t(ALARMPANEL\n\t,CONSUMERUNIT\n\t,CONTROLPANEL\n\t,DISTRIBUTIONBOARD\n\t,GASDETECTORPANEL\n\t,INDICATORPANEL\n\t,MIMICPANEL\n\t,MOTORCONTROLCENTRE\n\t,SWITCHBOARD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricFlowStorageDeviceTypeEnum = ENUMERATION OF\n\t(BATTERY\n\t,CAPACITORBANK\n\t,HARMONICFILTER\n\t,INDUCTORBANK\n\t,UPS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricGeneratorTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricHeaterTypeEnum = ENUMERATION OF\n\t(ELECTRICPOINTHEATER\n\t,ELECTRICCABLEHEATER\n\t,ELECTRICMATHEATER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricMotorTypeEnum = ENUMERATION OF\n\t(DC\n\t,INDUCTION\n\t,POLYPHASE\n\t,RELUCTANCESYNCHRONOUS\n\t,SYNCHRONOUS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricTimeControlTypeEnum = ENUMERATION OF\n\t(TIMECLOCK\n\t,TIMEDELAY\n\t,RELAY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElementAssemblyTypeEnum = ENUMERATION OF\n\t(ACCESSORY_ASSEMBLY\n\t,ARCH\n\t,BEAM_GRID\n\t,BRACED_FRAME\n\t,GIRDER\n\t,REINFORCEMENT_UNIT\n\t,RIGID_FRAME\n\t,SLAB_FIELD\n\t,TRUSS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElementCompositionEnum = ENUMERATION OF\n\t(COMPLEX\n\t,ELEMENT\n\t,PARTIAL);\nEND_TYPE;\n\nTYPE IfcEnergySequenceEnum = ENUMERATION OF\n\t(PRIMARY\n\t,SECONDARY\n\t,TERTIARY\n\t,AUXILIARY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEnvironmentalImpactCategoryEnum = ENUMERATION OF\n\t(COMBINEDVALUE\n\t,DISPOSAL\n\t,EXTRACTION\n\t,INSTALLATION\n\t,MANUFACTURE\n\t,TRANSPORTATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEvaporativeCoolerTypeEnum = ENUMERATION OF\n\t(DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER\n\t,DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER\n\t,DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER\n\t,DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER\n\t,DIRECTEVAPORATIVEAIRWASHER\n\t,INDIRECTEVAPORATIVEPACKAGEAIRCOOLER\n\t,INDIRECTEVAPORATIVEWETCOIL\n\t,INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER\n\t,INDIRECTDIRECTCOMBINATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEvaporatorTypeEnum = ENUMERATION OF\n\t(DIRECTEXPANSIONSHELLANDTUBE\n\t,DIRECTEXPANSIONTUBEINTUBE\n\t,DIRECTEXPANSIONBRAZEDPLATE\n\t,FLOODEDSHELLANDTUBE\n\t,SHELLANDCOIL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFanTypeEnum = ENUMERATION OF\n\t(CENTRIFUGALFORWARDCURVED\n\t,CENTRIFUGALRADIAL\n\t,CENTRIFUGALBACKWARDINCLINEDCURVED\n\t,CENTRIFUGALAIRFOIL\n\t,TUBEAXIAL\n\t,VANEAXIAL\n\t,PROPELLORAXIAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFilterTypeEnum = ENUMERATION OF\n\t(AIRPARTICLEFILTER\n\t,ODORFILTER\n\t,OILFILTER\n\t,STRAINER\n\t,WATERFILTER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFireSuppressionTerminalTypeEnum = ENUMERATION OF\n\t(BREECHINGINLET\n\t,FIREHYDRANT\n\t,HOSEREEL\n\t,SPRINKLER\n\t,SPRINKLERDEFLECTOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowDirectionEnum = ENUMERATION OF\n\t(SOURCE\n\t,SINK\n\t,SOURCEANDSINK\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowInstrumentTypeEnum = ENUMERATION OF\n\t(PRESSUREGAUGE\n\t,THERMOMETER\n\t,AMMETER\n\t,FREQUENCYMETER\n\t,POWERFACTORMETER\n\t,PHASEANGLEMETER\n\t,VOLTMETER_PEAK\n\t,VOLTMETER_RMS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowMeterTypeEnum = ENUMERATION OF\n\t(ELECTRICMETER\n\t,ENERGYMETER\n\t,FLOWMETER\n\t,GASMETER\n\t,OILMETER\n\t,WATERMETER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFootingTypeEnum = ENUMERATION OF\n\t(FOOTING_BEAM\n\t,PAD_FOOTING\n\t,PILE_CAP\n\t,STRIP_FOOTING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGasTerminalTypeEnum = ENUMERATION OF\n\t(GASAPPLIANCE\n\t,GASBOOSTER\n\t,GASBURNER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGeometricProjectionEnum = ENUMERATION OF\n\t(GRAPH_VIEW\n\t,SKETCH_VIEW\n\t,MODEL_VIEW\n\t,PLAN_VIEW\n\t,REFLECTED_PLAN_VIEW\n\t,SECTION_VIEW\n\t,ELEVATION_VIEW\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGlobalOrLocalEnum = ENUMERATION OF\n\t(GLOBAL_COORDS\n\t,LOCAL_COORDS);\nEND_TYPE;\n\nTYPE IfcHeatExchangerTypeEnum = ENUMERATION OF\n\t(PLATE\n\t,SHELLANDTUBE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcHumidifierTypeEnum = ENUMERATION OF\n\t(STEAMINJECTION\n\t,ADIABATICAIRWASHER\n\t,ADIABATICPAN\n\t,ADIABATICWETTEDELEMENT\n\t,ADIABATICATOMIZING\n\t,ADIABATICULTRASONIC\n\t,ADIABATICRIGIDMEDIA\n\t,ADIABATICCOMPRESSEDAIRNOZZLE\n\t,ASSISTEDELECTRIC\n\t,ASSISTEDNATURALGAS\n\t,ASSISTEDPROPANE\n\t,ASSISTEDBUTANE\n\t,ASSISTEDSTEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcInternalOrExternalEnum = ENUMERATION OF\n\t(INTERNAL\n\t,EXTERNAL\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcInventoryTypeEnum = ENUMERATION OF\n\t(ASSETINVENTORY\n\t,SPACEINVENTORY\n\t,FURNITUREINVENTORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcJunctionBoxTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLampTypeEnum = ENUMERATION OF\n\t(COMPACTFLUORESCENT\n\t,FLUORESCENT\n\t,HIGHPRESSUREMERCURY\n\t,HIGHPRESSURESODIUM\n\t,METALHALIDE\n\t,TUNGSTENFILAMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLayerSetDirectionEnum = ENUMERATION OF\n\t(AXIS1\n\t,AXIS2\n\t,AXIS3);\nEND_TYPE;\n\nTYPE IfcLightDistributionCurveEnum = ENUMERATION OF\n\t(TYPE_A\n\t,TYPE_B\n\t,TYPE_C\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLightEmissionSourceEnum = ENUMERATION OF\n\t(COMPACTFLUORESCENT\n\t,FLUORESCENT\n\t,HIGHPRESSUREMERCURY\n\t,HIGHPRESSURESODIUM\n\t,LIGHTEMITTINGDIODE\n\t,LOWPRESSURESODIUM\n\t,LOWVOLTAGEHALOGEN\n\t,MAINVOLTAGEHALOGEN\n\t,METALHALIDE\n\t,TUNGSTENFILAMENT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLightFixtureTypeEnum = ENUMERATION OF\n\t(POINTSOURCE\n\t,DIRECTIONSOURCE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLoadGroupTypeEnum = ENUMERATION OF\n\t(LOAD_GROUP\n\t,LOAD_CASE\n\t,LOAD_COMBINATION_GROUP\n\t,LOAD_COMBINATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLogicalOperatorEnum = ENUMERATION OF\n\t(LOGICALAND\n\t,LOGICALOR);\nEND_TYPE;\n\nTYPE IfcMemberTypeEnum = ENUMERATION OF\n\t(BRACE\n\t,CHORD\n\t,COLLAR\n\t,MEMBER\n\t,PLATE\n\t,POST\n\t,PURLIN\n\t,RAFTER\n\t,STRINGER\n\t,STRUT\n\t,STUD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcMotorConnectionTypeEnum = ENUMERATION OF\n\t(BELTDRIVE\n\t,COUPLING\n\t,DIRECTDRIVE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcNullStyle = ENUMERATION OF\n\t(NULL);\nEND_TYPE;\n\nTYPE IfcObjectTypeEnum = ENUMERATION OF\n\t(PRODUCT\n\t,PROCESS\n\t,CONTROL\n\t,RESOURCE\n\t,ACTOR\n\t,GROUP\n\t,PROJECT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcObjectiveEnum = ENUMERATION OF\n\t(CODECOMPLIANCE\n\t,DESIGNINTENT\n\t,HEALTHANDSAFETY\n\t,REQUIREMENT\n\t,SPECIFICATION\n\t,TRIGGERCONDITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcOccupantTypeEnum = ENUMERATION OF\n\t(ASSIGNEE\n\t,ASSIGNOR\n\t,LESSEE\n\t,LESSOR\n\t,LETTINGAGENT\n\t,OWNER\n\t,TENANT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcOutletTypeEnum = ENUMERATION OF\n\t(AUDIOVISUALOUTLET\n\t,COMMUNICATIONSOUTLET\n\t,POWEROUTLET\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPermeableCoveringOperationEnum = ENUMERATION OF\n\t(GRILL\n\t,LOUVER\n\t,SCREEN\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPhysicalOrVirtualEnum = ENUMERATION OF\n\t(PHYSICAL\n\t,VIRTUAL\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPileConstructionEnum = ENUMERATION OF\n\t(CAST_IN_PLACE\n\t,COMPOSITE\n\t,PRECAST_CONCRETE\n\t,PREFAB_STEEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPileTypeEnum = ENUMERATION OF\n\t(COHESION\n\t,FRICTION\n\t,SUPPORT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPipeFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CONNECTOR\n\t,ENTRY\n\t,EXIT\n\t,JUNCTION\n\t,OBSTRUCTION\n\t,TRANSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPipeSegmentTypeEnum = ENUMERATION OF\n\t(FLEXIBLESEGMENT\n\t,RIGIDSEGMENT\n\t,GUTTER\n\t,SPOOL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPlateTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProcedureTypeEnum = ENUMERATION OF\n\t(ADVICE_CAUTION\n\t,ADVICE_NOTE\n\t,ADVICE_WARNING\n\t,CALIBRATION\n\t,DIAGNOSTIC\n\t,SHUTDOWN\n\t,STARTUP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProfileTypeEnum = ENUMERATION OF\n\t(CURVE\n\t,AREA);\nEND_TYPE;\n\nTYPE IfcProjectOrderRecordTypeEnum = ENUMERATION OF\n\t(CHANGE\n\t,MAINTENANCE\n\t,MOVE\n\t,PURCHASE\n\t,WORK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProjectOrderTypeEnum = ENUMERATION OF\n\t(CHANGEORDER\n\t,MAINTENANCEWORKORDER\n\t,MOVEORDER\n\t,PURCHASEORDER\n\t,WORKORDER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProjectedOrTrueLengthEnum = ENUMERATION OF\n\t(PROJECTED_LENGTH\n\t,TRUE_LENGTH);\nEND_TYPE;\n\nTYPE IfcPropertySourceEnum = ENUMERATION OF\n\t(DESIGN\n\t,DESIGNMAXIMUM\n\t,DESIGNMINIMUM\n\t,SIMULATED\n\t,ASBUILT\n\t,COMMISSIONING\n\t,MEASURED\n\t,USERDEFINED\n\t,NOTKNOWN);\nEND_TYPE;\n\nTYPE IfcProtectiveDeviceTypeEnum = ENUMERATION OF\n\t(FUSEDISCONNECTOR\n\t,CIRCUITBREAKER\n\t,EARTHFAILUREDEVICE\n\t,RESIDUALCURRENTCIRCUITBREAKER\n\t,RESIDUALCURRENTSWITCH\n\t,VARISTOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPumpTypeEnum = ENUMERATION OF\n\t(CIRCULATOR\n\t,ENDSUCTION\n\t,SPLITCASE\n\t,VERTICALINLINE\n\t,VERTICALTURBINE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRailingTypeEnum = ENUMERATION OF\n\t(HANDRAIL\n\t,GUARDRAIL\n\t,BALUSTRADE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRampFlightTypeEnum = ENUMERATION OF\n\t(STRAIGHT\n\t,SPIRAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRampTypeEnum = ENUMERATION OF\n\t(STRAIGHT_RUN_RAMP\n\t,TWO_STRAIGHT_RUN_RAMP\n\t,QUARTER_TURN_RAMP\n\t,TWO_QUARTER_TURN_RAMP\n\t,HALF_TURN_RAMP\n\t,SPIRAL_RAMP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReflectanceMethodEnum = ENUMERATION OF\n\t(BLINN\n\t,FLAT\n\t,GLASS\n\t,MATT\n\t,METAL\n\t,MIRROR\n\t,PHONG\n\t,PLASTIC\n\t,STRAUSS\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReinforcingBarRoleEnum = ENUMERATION OF\n\t(MAIN\n\t,SHEAR\n\t,LIGATURE\n\t,STUD\n\t,PUNCHING\n\t,EDGE\n\t,RING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReinforcingBarSurfaceEnum = ENUMERATION OF\n\t(PLAIN\n\t,TEXTURED);\nEND_TYPE;\n\nTYPE IfcResourceConsumptionEnum = ENUMERATION OF\n\t(CONSUMED\n\t,PARTIALLYCONSUMED\n\t,NOTCONSUMED\n\t,OCCUPIED\n\t,PARTIALLYOCCUPIED\n\t,NOTOCCUPIED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRibPlateDirectionEnum = ENUMERATION OF\n\t(DIRECTION_X\n\t,DIRECTION_Y);\nEND_TYPE;\n\nTYPE IfcRoleEnum = ENUMERATION OF\n\t(SUPPLIER\n\t,MANUFACTURER\n\t,CONTRACTOR\n\t,SUBCONTRACTOR\n\t,ARCHITECT\n\t,STRUCTURALENGINEER\n\t,COSTENGINEER\n\t,CLIENT\n\t,BUILDINGOWNER\n\t,BUILDINGOPERATOR\n\t,MECHANICALENGINEER\n\t,ELECTRICALENGINEER\n\t,PROJECTMANAGER\n\t,FACILITIESMANAGER\n\t,CIVILENGINEER\n\t,COMISSIONINGENGINEER\n\t,ENGINEER\n\t,OWNER\n\t,CONSULTANT\n\t,CONSTRUCTIONMANAGER\n\t,FIELDCONSTRUCTIONMANAGER\n\t,RESELLER\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcRoofTypeEnum = ENUMERATION OF\n\t(FLAT_ROOF\n\t,SHED_ROOF\n\t,GABLE_ROOF\n\t,HIP_ROOF\n\t,HIPPED_GABLE_ROOF\n\t,GAMBREL_ROOF\n\t,MANSARD_ROOF\n\t,BARREL_ROOF\n\t,RAINBOW_ROOF\n\t,BUTTERFLY_ROOF\n\t,PAVILION_ROOF\n\t,DOME_ROOF\n\t,FREEFORM\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSIPrefix = ENUMERATION OF\n\t(EXA\n\t,PETA\n\t,TERA\n\t,GIGA\n\t,MEGA\n\t,KILO\n\t,HECTO\n\t,DECA\n\t,DECI\n\t,CENTI\n\t,MILLI\n\t,MICRO\n\t,NANO\n\t,PICO\n\t,FEMTO\n\t,ATTO);\nEND_TYPE;\n\nTYPE IfcSIUnitName = ENUMERATION OF\n\t(AMPERE\n\t,BECQUEREL\n\t,CANDELA\n\t,COULOMB\n\t,CUBIC_METRE\n\t,DEGREE_CELSIUS\n\t,FARAD\n\t,GRAM\n\t,GRAY\n\t,HENRY\n\t,HERTZ\n\t,JOULE\n\t,KELVIN\n\t,LUMEN\n\t,LUX\n\t,METRE\n\t,MOLE\n\t,NEWTON\n\t,OHM\n\t,PASCAL\n\t,RADIAN\n\t,SECOND\n\t,SIEMENS\n\t,SIEVERT\n\t,SQUARE_METRE\n\t,STERADIAN\n\t,TESLA\n\t,VOLT\n\t,WATT\n\t,WEBER);\nEND_TYPE;\n\nTYPE IfcSanitaryTerminalTypeEnum = ENUMERATION OF\n\t(BATH\n\t,BIDET\n\t,CISTERN\n\t,SHOWER\n\t,SINK\n\t,SANITARYFOUNTAIN\n\t,TOILETPAN\n\t,URINAL\n\t,WASHHANDBASIN\n\t,WCSEAT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSectionTypeEnum = ENUMERATION OF\n\t(UNIFORM\n\t,TAPERED);\nEND_TYPE;\n\nTYPE IfcSensorTypeEnum = ENUMERATION OF\n\t(CO2SENSOR\n\t,FIRESENSOR\n\t,FLOWSENSOR\n\t,GASSENSOR\n\t,HEATSENSOR\n\t,HUMIDITYSENSOR\n\t,LIGHTSENSOR\n\t,MOISTURESENSOR\n\t,MOVEMENTSENSOR\n\t,PRESSURESENSOR\n\t,SMOKESENSOR\n\t,SOUNDSENSOR\n\t,TEMPERATURESENSOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSequenceEnum = ENUMERATION OF\n\t(START_START\n\t,START_FINISH\n\t,FINISH_START\n\t,FINISH_FINISH\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcServiceLifeFactorTypeEnum = ENUMERATION OF\n\t(A_QUALITYOFCOMPONENTS\n\t,B_DESIGNLEVEL\n\t,C_WORKEXECUTIONLEVEL\n\t,D_INDOORENVIRONMENT\n\t,E_OUTDOORENVIRONMENT\n\t,F_INUSECONDITIONS\n\t,G_MAINTENANCELEVEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcServiceLifeTypeEnum = ENUMERATION OF\n\t(ACTUALSERVICELIFE\n\t,EXPECTEDSERVICELIFE\n\t,OPTIMISTICREFERENCESERVICELIFE\n\t,PESSIMISTICREFERENCESERVICELIFE\n\t,REFERENCESERVICELIFE);\nEND_TYPE;\n\nTYPE IfcSlabTypeEnum = ENUMERATION OF\n\t(FLOOR\n\t,ROOF\n\t,LANDING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSoundScaleEnum = ENUMERATION OF\n\t(DBA\n\t,DBB\n\t,DBC\n\t,NC\n\t,NR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSpaceHeaterTypeEnum = ENUMERATION OF\n\t(SECTIONALRADIATOR\n\t,PANELRADIATOR\n\t,TUBULARRADIATOR\n\t,CONVECTOR\n\t,BASEBOARDHEATER\n\t,FINNEDTUBEUNIT\n\t,UNITHEATER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStackTerminalTypeEnum = ENUMERATION OF\n\t(BIRDCAGE\n\t,COWL\n\t,RAINWATERHOPPER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStairFlightTypeEnum = ENUMERATION OF\n\t(STRAIGHT\n\t,WINDER\n\t,SPIRAL\n\t,CURVED\n\t,FREEFORM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStairTypeEnum = ENUMERATION OF\n\t(STRAIGHT_RUN_STAIR\n\t,TWO_STRAIGHT_RUN_STAIR\n\t,QUARTER_WINDING_STAIR\n\t,QUARTER_TURN_STAIR\n\t,HALF_WINDING_STAIR\n\t,HALF_TURN_STAIR\n\t,TWO_QUARTER_WINDING_STAIR\n\t,TWO_QUARTER_TURN_STAIR\n\t,THREE_QUARTER_WINDING_STAIR\n\t,THREE_QUARTER_TURN_STAIR\n\t,SPIRAL_STAIR\n\t,DOUBLE_RETURN_STAIR\n\t,CURVED_RUN_STAIR\n\t,TWO_CURVED_RUN_STAIR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStateEnum = ENUMERATION OF\n\t(READWRITE\n\t,READONLY\n\t,LOCKED\n\t,READWRITELOCKED\n\t,READONLYLOCKED);\nEND_TYPE;\n\nTYPE IfcStructuralCurveTypeEnum = ENUMERATION OF\n\t(RIGID_JOINED_MEMBER\n\t,PIN_JOINED_MEMBER\n\t,CABLE\n\t,TENSION_MEMBER\n\t,COMPRESSION_MEMBER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStructuralSurfaceTypeEnum = ENUMERATION OF\n\t(BENDING_ELEMENT\n\t,MEMBRANE_ELEMENT\n\t,SHELL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSurfaceSide = ENUMERATION OF\n\t(POSITIVE\n\t,NEGATIVE\n\t,BOTH);\nEND_TYPE;\n\nTYPE IfcSurfaceTextureEnum = ENUMERATION OF\n\t(BUMP\n\t,OPACITY\n\t,REFLECTION\n\t,SELFILLUMINATION\n\t,SHININESS\n\t,SPECULAR\n\t,TEXTURE\n\t,TRANSPARENCYMAP\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSwitchingDeviceTypeEnum = ENUMERATION OF\n\t(CONTACTOR\n\t,EMERGENCYSTOP\n\t,STARTER\n\t,SWITCHDISCONNECTOR\n\t,TOGGLESWITCH\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTankTypeEnum = ENUMERATION OF\n\t(PREFORMED\n\t,SECTIONAL\n\t,EXPANSION\n\t,PRESSUREVESSEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTendonTypeEnum = ENUMERATION OF\n\t(STRAND\n\t,WIRE\n\t,BAR\n\t,COATED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTextPath = ENUMERATION OF\n\t(LEFT\n\t,RIGHT\n\t,UP\n\t,DOWN);\nEND_TYPE;\n\nTYPE IfcThermalLoadSourceEnum = ENUMERATION OF\n\t(PEOPLE\n\t,LIGHTING\n\t,EQUIPMENT\n\t,VENTILATIONINDOORAIR\n\t,VENTILATIONOUTSIDEAIR\n\t,RECIRCULATEDAIR\n\t,EXHAUSTAIR\n\t,AIREXCHANGERATE\n\t,DRYBULBTEMPERATURE\n\t,RELATIVEHUMIDITY\n\t,INFILTRATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcThermalLoadTypeEnum = ENUMERATION OF\n\t(SENSIBLE\n\t,LATENT\n\t,RADIANT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTimeSeriesDataTypeEnum = ENUMERATION OF\n\t(CONTINUOUS\n\t,DISCRETE\n\t,DISCRETEBINARY\n\t,PIECEWISEBINARY\n\t,PIECEWISECONSTANT\n\t,PIECEWISECONTINUOUS\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTimeSeriesScheduleTypeEnum = ENUMERATION OF\n\t(ANNUAL\n\t,MONTHLY\n\t,WEEKLY\n\t,DAILY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTransformerTypeEnum = ENUMERATION OF\n\t(CURRENT\n\t,FREQUENCY\n\t,VOLTAGE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTransitionCode = ENUMERATION OF\n\t(DISCONTINUOUS\n\t,CONTINUOUS\n\t,CONTSAMEGRADIENT\n\t,CONTSAMEGRADIENTSAMECURVATURE);\nEND_TYPE;\n\nTYPE IfcTransportElementTypeEnum = ENUMERATION OF\n\t(ELEVATOR\n\t,ESCALATOR\n\t,MOVINGWALKWAY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTrimmingPreference = ENUMERATION OF\n\t(CARTESIAN\n\t,PARAMETER\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcTubeBundleTypeEnum = ENUMERATION OF\n\t(FINNED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcUnitEnum = ENUMERATION OF\n\t(ABSORBEDDOSEUNIT\n\t,AMOUNTOFSUBSTANCEUNIT\n\t,AREAUNIT\n\t,DOSEEQUIVALENTUNIT\n\t,ELECTRICCAPACITANCEUNIT\n\t,ELECTRICCHARGEUNIT\n\t,ELECTRICCONDUCTANCEUNIT\n\t,ELECTRICCURRENTUNIT\n\t,ELECTRICRESISTANCEUNIT\n\t,ELECTRICVOLTAGEUNIT\n\t,ENERGYUNIT\n\t,FORCEUNIT\n\t,FREQUENCYUNIT\n\t,ILLUMINANCEUNIT\n\t,INDUCTANCEUNIT\n\t,LENGTHUNIT\n\t,LUMINOUSFLUXUNIT\n\t,LUMINOUSINTENSITYUNIT\n\t,MAGNETICFLUXDENSITYUNIT\n\t,MAGNETICFLUXUNIT\n\t,MASSUNIT\n\t,PLANEANGLEUNIT\n\t,POWERUNIT\n\t,PRESSUREUNIT\n\t,RADIOACTIVITYUNIT\n\t,SOLIDANGLEUNIT\n\t,THERMODYNAMICTEMPERATUREUNIT\n\t,TIMEUNIT\n\t,VOLUMEUNIT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcUnitaryEquipmentTypeEnum = ENUMERATION OF\n\t(AIRHANDLER\n\t,AIRCONDITIONINGUNIT\n\t,SPLITSYSTEM\n\t,ROOFTOPUNIT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcValveTypeEnum = ENUMERATION OF\n\t(AIRRELEASE\n\t,ANTIVACUUM\n\t,CHANGEOVER\n\t,CHECK\n\t,COMMISSIONING\n\t,DIVERTING\n\t,DRAWOFFCOCK\n\t,DOUBLECHECK\n\t,DOUBLEREGULATING\n\t,FAUCET\n\t,FLUSHING\n\t,GASCOCK\n\t,GASTAP\n\t,ISOLATING\n\t,MIXING\n\t,PRESSUREREDUCING\n\t,PRESSURERELIEF\n\t,REGULATING\n\t,SAFETYCUTOFF\n\t,STEAMTRAP\n\t,STOPCOCK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcVibrationIsolatorTypeEnum = ENUMERATION OF\n\t(COMPRESSION\n\t,SPRING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWallTypeEnum = ENUMERATION OF\n\t(STANDARD\n\t,POLYGONAL\n\t,SHEAR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWasteTerminalTypeEnum = ENUMERATION OF\n\t(FLOORTRAP\n\t,FLOORWASTE\n\t,GULLYSUMP\n\t,GULLYTRAP\n\t,GREASEINTERCEPTOR\n\t,OILINTERCEPTOR\n\t,PETROLINTERCEPTOR\n\t,ROOFDRAIN\n\t,WASTEDISPOSALUNIT\n\t,WASTETRAP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowPanelOperationEnum = ENUMERATION OF\n\t(SIDEHUNGRIGHTHAND\n\t,SIDEHUNGLEFTHAND\n\t,TILTANDTURNRIGHTHAND\n\t,TILTANDTURNLEFTHAND\n\t,TOPHUNG\n\t,BOTTOMHUNG\n\t,PIVOTHORIZONTAL\n\t,PIVOTVERTICAL\n\t,SLIDINGHORIZONTAL\n\t,SLIDINGVERTICAL\n\t,REMOVABLECASEMENT\n\t,FIXEDCASEMENT\n\t,OTHEROPERATION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowPanelPositionEnum = ENUMERATION OF\n\t(LEFT\n\t,MIDDLE\n\t,RIGHT\n\t,BOTTOM\n\t,TOP\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowStyleConstructionEnum = ENUMERATION OF\n\t(ALUMINIUM\n\t,HIGH_GRADE_STEEL\n\t,STEEL\n\t,WOOD\n\t,ALUMINIUM_WOOD\n\t,PLASTIC\n\t,OTHER_CONSTRUCTION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowStyleOperationEnum = ENUMERATION OF\n\t(SINGLE_PANEL\n\t,DOUBLE_PANEL_VERTICAL\n\t,DOUBLE_PANEL_HORIZONTAL\n\t,TRIPLE_PANEL_VERTICAL\n\t,TRIPLE_PANEL_BOTTOM\n\t,TRIPLE_PANEL_TOP\n\t,TRIPLE_PANEL_LEFT\n\t,TRIPLE_PANEL_RIGHT\n\t,TRIPLE_PANEL_HORIZONTAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWorkControlTypeEnum = ENUMERATION OF\n\t(ACTUAL\n\t,BASELINE\n\t,PLANNED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActorSelect = SELECT\n\t(IfcOrganization\n\t,IfcPerson\n\t,IfcPersonAndOrganization);\nEND_TYPE;\n\nTYPE IfcAppliedValueSelect = SELECT\n\t(IfcRatioMeasure\n\t,IfcMeasureWithUnit\n\t,IfcMonetaryMeasure);\nEND_TYPE;\n\nTYPE IfcAxis2Placement = SELECT\n\t(IfcAxis2Placement2D\n\t,IfcAxis2Placement3D);\nEND_TYPE;\n\nTYPE IfcBooleanOperand = SELECT\n\t(IfcSolidModel\n\t,IfcHalfSpaceSolid\n\t,IfcBooleanResult);\nEND_TYPE;\n\nTYPE IfcCharacterSpacingSelect = SELECT\n\t(IfcRatioMeasure\n\t,IfcLengthMeasure\n\t,IfcMeasureWithUnit);\nEND_TYPE;\n\nTYPE IfcCharacterStyleSelect = SELECT\n\t(IfcColour);\nEND_TYPE;\n\nTYPE IfcClassificationNotationSelect = SELECT\n\t(IfcClassificationNotation\n\t,IfcClassificationReference);\nEND_TYPE;\n\nTYPE IfcColour = SELECT\n\t(IfcColourSpecification\n\t,IfcPreDefinedColour);\nEND_TYPE;\n\nTYPE IfcColourOrFactor = SELECT\n\t(IfcColourRgb\n\t,IfcNormalisedRatioMeasure);\nEND_TYPE;\n\nTYPE IfcConditionCriterionSelect = SELECT\n\t(IfcLabel\n\t,IfcMeasureWithUnit);\nEND_TYPE;\n\nTYPE IfcCsgSelect = SELECT\n\t(IfcBooleanResult);\nEND_TYPE;\n\nTYPE IfcCurveFontOrScaledCurveFontSelect = SELECT\n\t(IfcCurveStyleFontSelect\n\t,IfcCurveStyleFontAndScaling);\nEND_TYPE;\n\nTYPE IfcCurveStyleFontSelect = SELECT\n\t(IfcPreDefinedCurveFont\n\t,IfcCurveStyleFont);\nEND_TYPE;\n\nTYPE IfcDateTimeSelect = SELECT\n\t(IfcCalendarDate\n\t,IfcLocalTime\n\t,IfcDateAndTime);\nEND_TYPE;\n\nTYPE IfcDefinedSymbolSelect = SELECT\n\t(IfcPreDefinedSymbol\n\t,IfcExternallyDefinedSymbol);\nEND_TYPE;\n\nTYPE IfcDerivedMeasureValue = SELECT\n\t(IfcVolumetricFlowRateMeasure\n\t,IfcTimeStamp\n\t,IfcThermalTransmittanceMeasure\n\t,IfcThermalResistanceMeasure\n\t,IfcThermalAdmittanceMeasure\n\t,IfcPressureMeasure\n\t,IfcPowerMeasure\n\t,IfcMassFlowRateMeasure\n\t,IfcMassDensityMeasure\n\t,IfcLinearVelocityMeasure\n\t,IfcKinematicViscosityMeasure\n\t,IfcIntegerCountRateMeasure\n\t,IfcHeatFluxDensityMeasure\n\t,IfcFrequencyMeasure\n\t,IfcEnergyMeasure\n\t,IfcElectricVoltageMeasure\n\t,IfcDynamicViscosityMeasure\n\t,IfcCompoundPlaneAngleMeasure\n\t,IfcAngularVelocityMeasure\n\t,IfcThermalConductivityMeasure\n\t,IfcMolecularWeightMeasure\n\t,IfcVaporPermeabilityMeasure\n\t,IfcMoistureDiffusivityMeasure\n\t,IfcIsothermalMoistureCapacityMeasure\n\t,IfcSpecificHeatCapacityMeasure\n\t,IfcMonetaryMeasure\n\t,IfcMagneticFluxDensityMeasure\n\t,IfcMagneticFluxMeasure\n\t,IfcLuminousFluxMeasure\n\t,IfcForceMeasure\n\t,IfcInductanceMeasure\n\t,IfcIlluminanceMeasure\n\t,IfcElectricResistanceMeasure\n\t,IfcElectricConductanceMeasure\n\t,IfcElectricChargeMeasure\n\t,IfcDoseEquivalentMeasure\n\t,IfcElectricCapacitanceMeasure\n\t,IfcAbsorbedDoseMeasure\n\t,IfcRadioActivityMeasure\n\t,IfcRotationalFrequencyMeasure\n\t,IfcTorqueMeasure\n\t,IfcAccelerationMeasure\n\t,IfcLinearForceMeasure\n\t,IfcLinearStiffnessMeasure\n\t,IfcModulusOfSubgradeReactionMeasure\n\t,IfcModulusOfElasticityMeasure\n\t,IfcMomentOfInertiaMeasure\n\t,IfcPlanarForceMeasure\n\t,IfcRotationalStiffnessMeasure\n\t,IfcShearModulusMeasure\n\t,IfcLinearMomentMeasure\n\t,IfcLuminousIntensityDistributionMeasure\n\t,IfcCurvatureMeasure\n\t,IfcMassPerLengthMeasure\n\t,IfcModulusOfLinearSubgradeReactionMeasure\n\t,IfcModulusOfRotationalSubgradeReactionMeasure\n\t,IfcRotationalMassMeasure\n\t,IfcSectionalAreaIntegralMeasure\n\t,IfcSectionModulusMeasure\n\t,IfcTemperatureGradientMeasure\n\t,IfcThermalExpansionCoefficientMeasure\n\t,IfcWarpingConstantMeasure\n\t,IfcWarpingMomentMeasure\n\t,IfcSoundPowerMeasure\n\t,IfcSoundPressureMeasure\n\t,IfcHeatingValueMeasure\n\t,IfcPHMeasure\n\t,IfcIonConcentrationMeasure);\nEND_TYPE;\n\nTYPE IfcDocumentSelect = SELECT\n\t(IfcDocumentReference\n\t,IfcDocumentInformation);\nEND_TYPE;\n\nTYPE IfcDraughtingCalloutElement = SELECT\n\t(IfcAnnotationCurveOccurrence\n\t,IfcAnnotationTextOccurrence\n\t,IfcAnnotationSymbolOccurrence);\nEND_TYPE;\n\nTYPE IfcFillAreaStyleTileShapeSelect = SELECT\n\t(IfcFillAreaStyleTileSymbolWithStyle);\nEND_TYPE;\n\nTYPE IfcFillStyleSelect = SELECT\n\t(IfcFillAreaStyleHatching\n\t,IfcFillAreaStyleTiles\n\t,IfcColour\n\t,IfcExternallyDefinedHatchStyle);\nEND_TYPE;\n\nTYPE IfcFontSelect = SELECT\n\t(IfcPreDefinedTextFont\n\t,IfcExternallyDefinedTextFont);\nEND_TYPE;\n\nTYPE IfcGeometricSetSelect = SELECT\n\t(IfcPoint\n\t,IfcCurve\n\t,IfcSurface);\nEND_TYPE;\n\nTYPE IfcLayeredItem = SELECT\n\t(IfcRepresentationItem\n\t,IfcRepresentation);\nEND_TYPE;\n\nTYPE IfcLibrarySelect = SELECT\n\t(IfcLibraryReference\n\t,IfcLibraryInformation);\nEND_TYPE;\n\nTYPE IfcLightDistributionDataSourceSelect = SELECT\n\t(IfcExternalReference\n\t,IfcLightIntensityDistribution);\nEND_TYPE;\n\nTYPE IfcMaterialSelect = SELECT\n\t(IfcMaterial\n\t,IfcMaterialList\n\t,IfcMaterialLayerSetUsage\n\t,IfcMaterialLayerSet\n\t,IfcMaterialLayer);\nEND_TYPE;\n\nTYPE IfcMeasureValue = SELECT\n\t(IfcVolumeMeasure\n\t,IfcTimeMeasure\n\t,IfcThermodynamicTemperatureMeasure\n\t,IfcSolidAngleMeasure\n\t,IfcPositiveRatioMeasure\n\t,IfcRatioMeasure\n\t,IfcPositivePlaneAngleMeasure\n\t,IfcPlaneAngleMeasure\n\t,IfcParameterValue\n\t,IfcNumericMeasure\n\t,IfcMassMeasure\n\t,IfcPositiveLengthMeasure\n\t,IfcLengthMeasure\n\t,IfcElectricCurrentMeasure\n\t,IfcDescriptiveMeasure\n\t,IfcCountMeasure\n\t,IfcContextDependentMeasure\n\t,IfcAreaMeasure\n\t,IfcAmountOfSubstanceMeasure\n\t,IfcLuminousIntensityMeasure\n\t,IfcNormalisedRatioMeasure\n\t,IfcComplexNumber);\nEND_TYPE;\n\nTYPE IfcMetricValueSelect = SELECT\n\t(IfcDateTimeSelect\n\t,IfcMeasureWithUnit\n\t,IfcTable\n\t,IfcText\n\t,IfcTimeSeries\n\t,IfcCostValue);\nEND_TYPE;\n\nTYPE IfcObjectReferenceSelect = SELECT\n\t(IfcMaterial\n\t,IfcPerson\n\t,IfcDateAndTime\n\t,IfcMaterialList\n\t,IfcOrganization\n\t,IfcCalendarDate\n\t,IfcLocalTime\n\t,IfcPersonAndOrganization\n\t,IfcMaterialLayer\n\t,IfcExternalReference\n\t,IfcTimeSeries\n\t,IfcAddress\n\t,IfcAppliedValue);\nEND_TYPE;\n\nTYPE IfcPresentationStyleSelect = SELECT\n\t(IfcNullStyle\n\t,IfcCurveStyle\n\t,IfcSymbolStyle\n\t,IfcFillAreaStyle\n\t,IfcTextStyle\n\t,IfcSurfaceStyle);\nEND_TYPE;\n\nTYPE IfcShell = SELECT\n\t(IfcClosedShell\n\t,IfcOpenShell);\nEND_TYPE;\n\nTYPE IfcSimpleValue = SELECT\n\t(IfcInteger\n\t,IfcReal\n\t,IfcBoolean\n\t,IfcIdentifier\n\t,IfcText\n\t,IfcLabel\n\t,IfcLogical);\nEND_TYPE;\n\nTYPE IfcSizeSelect = SELECT\n\t(IfcPositiveLengthMeasure\n\t,IfcMeasureWithUnit);\nEND_TYPE;\n\nTYPE IfcSpecularHighlightSelect = SELECT\n\t(IfcSpecularExponent\n\t,IfcSpecularRoughness);\nEND_TYPE;\n\nTYPE IfcStructuralActivityAssignmentSelect = SELECT\n\t(IfcStructuralItem\n\t,IfcBuildingElement);\nEND_TYPE;\n\nTYPE IfcSurfaceStyleElementSelect = SELECT\n\t(IfcSurfaceStyleShading\n\t,IfcSurfaceStyleLighting\n\t,IfcSurfaceStyleWithTextures\n\t,IfcExternallyDefinedSufaceStyle\n\t,IfcSurfaceStyleRefraction);\nEND_TYPE;\n\nTYPE IfcSymbolStyleSelect = SELECT\n\t(IfcColour);\nEND_TYPE;\n\nTYPE IfcTextStyleSelect = SELECT\n\t(IfcTextStyleWithMirror\n\t,IfcTextStyleWithSpacing\n\t,IfcTextStyleWithBoxCharacteristics);\nEND_TYPE;\n\nTYPE IfcTrimmingSelect = SELECT\n\t(IfcCartesianPoint\n\t,IfcParameterValue);\nEND_TYPE;\n\nTYPE IfcUnit = SELECT\n\t(IfcDerivedUnit\n\t,IfcNamedUnit\n\t,IfcMonetaryUnit);\nEND_TYPE;\n\nTYPE IfcValue = SELECT\n\t(IfcMeasureValue\n\t,IfcSimpleValue\n\t,IfcDerivedMeasureValue);\nEND_TYPE;\n\nTYPE IfcVectorOrDirection = SELECT\n\t(IfcDirection\n\t,IfcVector);\nEND_TYPE;\n\nENTITY Ifc2DCompositeCurve\n SUBTYPE OF (IfcCompositeCurve);\n WHERE\n\tWR1 : SELF\\IfcCompositeCurve.ClosedCurve;\n\tWR2 : SELF\\IfcCurve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcActionRequest\n SUBTYPE OF (IfcControl);\n\tRequestID : IfcIdentifier;\n UNIQUE\n\tUR2 : RequestID;\nEND_ENTITY;\n\nENTITY IfcActor\n SUPERTYPE OF (ONEOF\n\t(IfcOccupant))\n SUBTYPE OF (IfcObject);\n\tTheActor : IfcActorSelect;\n INVERSE\n\tIsActingUpon : SET [0:?] OF IfcRelAssignsToActor FOR RelatingActor;\nEND_ENTITY;\n\nENTITY IfcActorRole;\n\tRole : IfcRoleEnum;\n\tUserDefinedRole : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n WHERE\n\tWR1 : (Role <> IfcRoleEnum.USERDEFINED) OR\n            ((Role = IfcRoleEnum.USERDEFINED) AND\n              EXISTS(SELF.UserDefinedRole));\nEND_ENTITY;\n\nENTITY IfcActuatorType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcActuatorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcAddress\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPostalAddress\n\t,IfcTelecomAddress));\n\tPurpose : OPTIONAL IfcAddressTypeEnum;\n\tDescription : OPTIONAL IfcText;\n\tUserDefinedPurpose : OPTIONAL IfcLabel;\n INVERSE\n\tOfPerson : SET [0:?] OF IfcPerson FOR Addresses;\n\tOfOrganization : SET [0:?] OF IfcOrganization FOR Addresses;\n WHERE\n\tWR1 : (NOT(EXISTS(Purpose))) OR\n            ((Purpose <> IfcAddressTypeEnum.USERDEFINED) OR\n            ((Purpose = IfcAddressTypeEnum.USERDEFINED) AND\n              EXISTS(SELF.UserDefinedPurpose)));\nEND_ENTITY;\n\nENTITY IfcAirTerminalBoxType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcAirTerminalBoxTypeEnum;\nEND_ENTITY;\n\nENTITY IfcAirTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcAirTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcAirToAirHeatRecoveryType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcAirToAirHeatRecoveryTypeEnum;\nEND_ENTITY;\n\nENTITY IfcAlarmType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcAlarmTypeEnum;\nEND_ENTITY;\n\nENTITY IfcAngularDimension\n SUBTYPE OF (IfcDimensionCurveDirectedCallout);\nEND_ENTITY;\n\nENTITY IfcAnnotation\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\nEND_ENTITY;\n\nENTITY IfcAnnotationCurveOccurrence\n SUPERTYPE OF (ONEOF\n\t(IfcDimensionCurve\n\t,IfcProjectionCurve))\n SUBTYPE OF (IfcAnnotationOccurrence);\nEND_ENTITY;\n\nENTITY IfcAnnotationFillArea\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tBoundaries : SET [1:?] OF IfcCurve;\nEND_ENTITY;\n\nENTITY IfcAnnotationFillAreaOccurrence\n SUBTYPE OF (IfcAnnotationOccurrence);\n\tFillStyleTarget : IfcPoint;\nEND_ENTITY;\n\nENTITY IfcAnnotationOccurrence\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAnnotationCurveOccurrence\n\t,IfcAnnotationFillAreaOccurrence\n\t,IfcAnnotationSurfaceOccurrence\n\t,IfcAnnotationSymbolOccurrence\n\t,IfcAnnotationTextOccurrence))\n SUBTYPE OF (IfcStyledItem);\nEND_ENTITY;\n\nENTITY IfcAnnotationSurfaceOccurrence\n SUBTYPE OF (IfcAnnotationOccurrence);\nEND_ENTITY;\n\nENTITY IfcAnnotationSymbolOccurrence\n SUPERTYPE OF (ONEOF\n\t(IfcTerminatorSymbol))\n SUBTYPE OF (IfcAnnotationOccurrence);\nEND_ENTITY;\n\nENTITY IfcAnnotationTextOccurrence\n SUBTYPE OF (IfcAnnotationOccurrence);\nEND_ENTITY;\n\nENTITY IfcApplication;\n\tApplicationDeveloper : IfcOrganization;\n\tVersion : IfcLabel;\n\tApplicationFullName : IfcLabel;\n\tApplicationIdentifier : IfcIdentifier;\n UNIQUE\n\tUR1 : ApplicationIdentifier;\n\tUR2 : ApplicationFullName, Version;\nEND_ENTITY;\n\nENTITY IfcAppliedValue\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCostValue\n\t,IfcEnvironmentalImpactValue));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tAppliedValue : OPTIONAL IfcAppliedValueSelect;\n\tUnitBasis : OPTIONAL IfcMeasureWithUnit;\n\tApplicableDate : OPTIONAL IfcDateTimeSelect;\n\tFixedUntilDate : OPTIONAL IfcDateTimeSelect;\n INVERSE\n\tValuesReferenced : SET [0:?] OF IfcReferencesValueDocument FOR ReferencingValues;\n\tValueOfComponents : SET [0:?] OF IfcAppliedValueRelationship FOR ComponentOfTotal;\n\tIsComponentIn : SET [0:?] OF IfcAppliedValueRelationship FOR Components;\n WHERE\n\tWR1 : EXISTS (AppliedValue) OR \n            EXISTS (ValueOfComponents);\nEND_ENTITY;\n\nENTITY IfcAppliedValueRelationship;\n\tComponentOfTotal : IfcAppliedValue;\n\tComponents : SET [1:?] OF IfcAppliedValue;\n\tArithmeticOperator : IfcArithmeticOperatorEnum;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcApproval;\n\tDescription : OPTIONAL IfcText;\n\tApprovalDateTime : IfcDateTimeSelect;\n\tApprovalStatus : OPTIONAL IfcLabel;\n\tApprovalLevel : OPTIONAL IfcLabel;\n\tApprovalQualifier : OPTIONAL IfcText;\n\tName : IfcLabel;\n\tIdentifier : IfcIdentifier;\n INVERSE\n\tActors : SET [0:?] OF IfcApprovalActorRelationship FOR Approval;\n\tIsRelatedWith : SET [0:?] OF IfcApprovalRelationship FOR RelatedApproval;\n\tRelates : SET [0:?] OF IfcApprovalRelationship FOR RelatingApproval;\nEND_ENTITY;\n\nENTITY IfcApprovalActorRelationship;\n\tActor : IfcActorSelect;\n\tApproval : IfcApproval;\n\tRole : IfcActorRole;\nEND_ENTITY;\n\nENTITY IfcApprovalPropertyRelationship;\n\tApprovedProperties : SET [1:?] OF IfcProperty;\n\tApproval : IfcApproval;\nEND_ENTITY;\n\nENTITY IfcApprovalRelationship;\n\tRelatedApproval : IfcApproval;\n\tRelatingApproval : IfcApproval;\n\tDescription : OPTIONAL IfcText;\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcArbitraryClosedProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcArbitraryProfileDefWithVoids))\n SUBTYPE OF (IfcProfileDef);\n\tOuterCurve : IfcCurve;\n WHERE\n\tWR1 : OuterCurve.Dim = 2;\n\tWR2 : NOT('IFC2X2_FINAL.IFCLINE' IN TYPEOF(OuterCurve));\n\tWR3 : NOT('IFC2X2_FINAL.IFCOFFSETCURVE2D' IN TYPEOF(OuterCurve));\nEND_ENTITY;\n\nENTITY IfcArbitraryOpenProfileDef\n SUBTYPE OF (IfcProfileDef);\n\tCurve : IfcBoundedCurve;\n WHERE\n\tWR1 : SELF\\IfcProfileDef.ProfileType = IfcProfileTypeEnum.CURVE;\n\tWR2 : Curve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcArbitraryProfileDefWithVoids\n SUBTYPE OF (IfcArbitraryClosedProfileDef);\n\tInnerCurves : SET [1:?] OF IfcCurve;\n WHERE\n\tWR1 : SELF\\IfcProfileDef.ProfileType = AREA;\n\tWR2 : SIZEOF(QUERY(temp <* InnerCurves | temp.Dim <> 2)) = 0;\n\tWR3 : SIZEOF(QUERY(temp <* InnerCurves | 'IFC2X2_FINAL.IFCLINE' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcAsset\n SUBTYPE OF (IfcGroup);\n\tAssetID : IfcIdentifier;\n\tOriginalValue : IfcCostValue;\n\tCurrentValue : IfcCostValue;\n\tTotalReplacementCost : IfcCostValue;\n\tOwner : IfcActorSelect;\n\tUser : IfcActorSelect;\n\tResponsiblePerson : IfcPerson;\n\tIncorporationDate : IfcCalendarDate;\n\tDepreciatedValue : IfcCostValue;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcGroup.IsGroupedBy.RelatedObjects | NOT('IFC2X2_FINAL.IFCELEMENT' IN TYPEOF(Temp)))) = 0;\nEND_ENTITY;\n\nENTITY IfcAsymmetricIShapeProfileDef\n SUBTYPE OF (IfcIShapeProfileDef);\n\tTopFlangeWidth : IfcPositiveLengthMeasure;\n\tTopFlangeThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTopFlangeFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tCentreOfGravityInY : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcAxis1Placement\n SUBTYPE OF (IfcPlacement);\n\tAxis : OPTIONAL IfcDirection;\n DERIVE\n\tZ : IfcDirection := NVL (IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n WHERE\n\tWR1 : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);\n\tWR2 : SELF\\IfcPlacement.Location.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcAxis2Placement2D\n SUBTYPE OF (IfcPlacement);\n\tRefDirection : OPTIONAL IfcDirection;\n DERIVE\n\tP : LIST [2:2] OF IfcDirection := IfcBuild2Axes(RefDirection);\n WHERE\n\tWR1 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 2);\n\tWR2 : SELF\\IfcPlacement.Location.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcAxis2Placement3D\n SUBTYPE OF (IfcPlacement);\n\tAxis : OPTIONAL IfcDirection;\n\tRefDirection : OPTIONAL IfcDirection;\n DERIVE\n\tP : LIST [3:3] OF IfcDirection := IfcBuildAxes(Axis, RefDirection);\n WHERE\n\tWR1 : SELF\\IfcPlacement.Location.Dim = 3;\n\tWR2 : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);\n\tWR3 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 3);\n\tWR4 : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0);\n\tWR5 : NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection)));\nEND_ENTITY;\n\nENTITY IfcBSplineCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBezierCurve))\n SUBTYPE OF (IfcBoundedCurve);\n\tDegree : INTEGER;\n\tControlPointsList : LIST [2:?] OF IfcCartesianPoint;\n\tCurveForm : IfcBSplineCurveForm;\n\tClosedCurve : LOGICAL;\n\tSelfIntersect : LOGICAL;\n DERIVE\n\tControlPoints : ARRAY [0:255] OF IfcCartesianPoint := IfcListToArray(ControlPointsList,0,UpperIndexOnControlPoints);\n\tUpperIndexOnControlPoints : INTEGER := (SIZEOF(ControlPointsList) - 1);\n WHERE\n\tWR41 : SIZEOF(QUERY(Temp <* ControlPointsList |\n               Temp.Dim <> ControlPointsList[1].Dim))\n             = 0;\nEND_ENTITY;\n\nENTITY IfcBeam\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcBeamType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcBeamTypeEnum;\nEND_ENTITY;\n\nENTITY IfcBezierCurve\n SUPERTYPE OF (ONEOF\n\t(IfcRationalBezierCurve))\n SUBTYPE OF (IfcBSplineCurve);\nEND_ENTITY;\n\nENTITY IfcBoilerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcBoilerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcBooleanClippingResult\n SUBTYPE OF (IfcBooleanResult);\n WHERE\n\tWR1 : ('IFC2X2_FINAL.IFCSWEPTAREASOLID' IN TYPEOF(FirstOperand)) OR ('IFC2X2_FINAL.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(FirstOperand));\n\tWR2 : ('IFC2X2_FINAL.IFCHALFSPACESOLID' IN TYPEOF(SecondOperand));\n\tWR3 : Operator = DIFFERENCE;\nEND_ENTITY;\n\nENTITY IfcBooleanResult\n SUPERTYPE OF (ONEOF\n\t(IfcBooleanClippingResult))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOperator : IfcBooleanOperator;\n\tFirstOperand : IfcBooleanOperand;\n\tSecondOperand : IfcBooleanOperand;\n DERIVE\n\tDim : IfcDimensionCount := FirstOperand.Dim;\n WHERE\n\tWR1 : FirstOperand.Dim = SecondOperand.Dim;\nEND_ENTITY;\n\nENTITY IfcBoundaryCondition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBoundaryEdgeCondition\n\t,IfcBoundaryFaceCondition\n\t,IfcBoundaryNodeCondition));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcBoundaryEdgeCondition\n SUBTYPE OF (IfcBoundaryCondition);\n\tLinearStiffnessByLengthX : OPTIONAL IfcModulusOfLinearSubgradeReactionMeasure;\n\tLinearStiffnessByLengthY : OPTIONAL IfcModulusOfLinearSubgradeReactionMeasure;\n\tLinearStiffnessByLengthZ : OPTIONAL IfcModulusOfLinearSubgradeReactionMeasure;\n\tRotationalStiffnessByLengthX : OPTIONAL IfcModulusOfRotationalSubgradeReactionMeasure;\n\tRotationalStiffnessByLengthY : OPTIONAL IfcModulusOfRotationalSubgradeReactionMeasure;\n\tRotationalStiffnessByLengthZ : OPTIONAL IfcModulusOfRotationalSubgradeReactionMeasure;\nEND_ENTITY;\n\nENTITY IfcBoundaryFaceCondition\n SUBTYPE OF (IfcBoundaryCondition);\n\tLinearStiffnessByAreaX : OPTIONAL IfcModulusOfSubgradeReactionMeasure;\n\tLinearStiffnessByAreaY : OPTIONAL IfcModulusOfSubgradeReactionMeasure;\n\tLinearStiffnessByAreaZ : OPTIONAL IfcModulusOfSubgradeReactionMeasure;\nEND_ENTITY;\n\nENTITY IfcBoundaryNodeCondition\n SUPERTYPE OF (ONEOF\n\t(IfcBoundaryNodeConditionWarping))\n SUBTYPE OF (IfcBoundaryCondition);\n\tLinearStiffnessX : OPTIONAL IfcLinearStiffnessMeasure;\n\tLinearStiffnessY : OPTIONAL IfcLinearStiffnessMeasure;\n\tLinearStiffnessZ : OPTIONAL IfcLinearStiffnessMeasure;\n\tRotationalStiffnessX : OPTIONAL IfcRotationalStiffnessMeasure;\n\tRotationalStiffnessY : OPTIONAL IfcRotationalStiffnessMeasure;\n\tRotationalStiffnessZ : OPTIONAL IfcRotationalStiffnessMeasure;\nEND_ENTITY;\n\nENTITY IfcBoundaryNodeConditionWarping\n SUBTYPE OF (IfcBoundaryNodeCondition);\n\tWarpingStiffness : OPTIONAL IfcWarpingMomentMeasure;\nEND_ENTITY;\n\nENTITY IfcBoundedCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBSplineCurve\n\t,IfcCompositeCurve\n\t,IfcPolyline\n\t,IfcTrimmedCurve))\n SUBTYPE OF (IfcCurve);\nEND_ENTITY;\n\nENTITY IfcBoundedSurface\n SUPERTYPE OF (ONEOF\n\t(IfcCurveBoundedPlane\n\t,IfcRectangularTrimmedSurface))\n SUBTYPE OF (IfcSurface);\nEND_ENTITY;\n\nENTITY IfcBoundingBox\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tCorner : IfcCartesianPoint;\n\tXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\n\tZDim : IfcPositiveLengthMeasure;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcBoxedHalfSpace\n SUBTYPE OF (IfcHalfSpaceSolid);\n\tEnclosure : IfcBoundingBox;\n WHERE\n\tWR1 : NOT ('IFC2X2_FINAL.IFCCURVEBOUNDEDPLANE' IN TYPEOF(SELF\\IfcHalfSpaceSolid.BaseSurface));\nEND_ENTITY;\n\nENTITY IfcBuilding\n SUBTYPE OF (IfcSpatialStructureElement);\n\tElevationOfRefHeight : OPTIONAL IfcLengthMeasure;\n\tElevationOfTerrain : OPTIONAL IfcLengthMeasure;\n\tBuildingAddress : OPTIONAL IfcPostalAddress;\nEND_ENTITY;\n\nENTITY IfcBuildingElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBeam\n\t,IfcBuildingElementComponent\n\t,IfcBuildingElementProxy\n\t,IfcColumn\n\t,IfcCovering\n\t,IfcCurtainWall\n\t,IfcDoor\n\t,IfcFooting\n\t,IfcMember\n\t,IfcPile\n\t,IfcRailing\n\t,IfcRamp\n\t,IfcRampFlight\n\t,IfcRoof\n\t,IfcSlab\n\t,IfcStair\n\t,IfcStairFlight\n\t,IfcWall\n\t,IfcWindow))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcBuildingElementComponent\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuildingElementPart\n\t,IfcPlate\n\t,IfcReinforcingElement))\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcBuildingElementComponentType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPlateType))\n SUBTYPE OF (IfcBuildingElementType);\nEND_ENTITY;\n\nENTITY IfcBuildingElementPart\n SUBTYPE OF (IfcBuildingElementComponent);\nEND_ENTITY;\n\nENTITY IfcBuildingElementProxy\n SUBTYPE OF (IfcBuildingElement);\n\tCompositionType : OPTIONAL IfcElementCompositionEnum;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcBuildingElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBeamType\n\t,IfcBuildingElementComponentType\n\t,IfcColumnType\n\t,IfcCoveringType\n\t,IfcMemberType\n\t,IfcRailingType\n\t,IfcRampFlightType\n\t,IfcSlabType\n\t,IfcStairFlightType\n\t,IfcWallType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcBuildingStorey\n SUBTYPE OF (IfcSpatialStructureElement);\n\tElevation : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tWidth : IfcPositiveLengthMeasure;\n\tWallThickness : IfcPositiveLengthMeasure;\n\tGirth : IfcPositiveLengthMeasure;\n\tInternalFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tCentreOfGravityInX : IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : Girth < (Depth / 2);\n\tWR2 : NOT(EXISTS(InternalFilletRadius)) OR\n            ((InternalFilletRadius <= Width/2) AND (InternalFilletRadius <= Depth/2));\n\tWR3 : (WallThickness < Width/2) AND (WallThickness < Depth/2);\nEND_ENTITY;\n\nENTITY IfcCableCarrierFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcCableCarrierFittingTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcCableCarrierFittingTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcCableCarrierFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCableCarrierSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcCableCarrierSegmentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCableSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcCableSegmentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCalendarDate;\n\tDayComponent : IfcDayInMonthNumber;\n\tMonthComponent : IfcMonthInYearNumber;\n\tYearComponent : IfcYearNumber;\n WHERE\n\tWR21 : IfcValidCalendarDate (SELF);\nEND_ENTITY;\n\nENTITY IfcCartesianPoint\n SUBTYPE OF (IfcPoint);\n\tCoordinates : LIST [1:3] OF IfcLengthMeasure;\n DERIVE\n\tDim : IfcDimensionCount := HIINDEX(Coordinates);\n WHERE\n\tWR1 : HIINDEX(Coordinates) >= 2;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCartesianTransformationOperator2D\n\t,IfcCartesianTransformationOperator3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tAxis1 : OPTIONAL IfcDirection;\n\tAxis2 : OPTIONAL IfcDirection;\n\tLocalOrigin : IfcCartesianPoint;\n\tScale : OPTIONAL REAL;\n DERIVE\n\tScl : REAL := NVL(Scale, 1.0);\n\tDim : IfcDimensionCount := LocalOrigin.Dim;\n WHERE\n\tWR1 : Scl > 0.0;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator2D\n SUPERTYPE OF (ONEOF\n\t(IfcCartesianTransformationOperator2DnonUniform))\n SUBTYPE OF (IfcCartesianTransformationOperator);\n DERIVE\n\tU : LIST [2:2] OF IfcDirection := IfcBaseAxis(2,SELF\\IfcCartesianTransformationOperator.Axis1,\n          SELF\\IfcCartesianTransformationOperator.Axis2,?);\n WHERE\n\tWR1 : SELF\\IfcCartesianTransformationOperator.Dim = 2;\n\tWR2 : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis1)) OR \n            (SELF\\IfcCartesianTransformationOperator.Axis1.Dim = 2);\n\tWR3 : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis2)) OR \n            (SELF\\IfcCartesianTransformationOperator.Axis2.Dim = 2);\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator2DnonUniform\n SUBTYPE OF (IfcCartesianTransformationOperator2D);\n\tScale2 : OPTIONAL REAL;\n DERIVE\n\tScl2 : REAL := NVL(Scale2, SELF\\IfcCartesianTransformationOperator.Scl);\n WHERE\n\tWR1 : Scl2 > 0.0;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator3D\n SUPERTYPE OF (ONEOF\n\t(IfcCartesianTransformationOperator3DnonUniform))\n SUBTYPE OF (IfcCartesianTransformationOperator);\n\tAxis3 : OPTIONAL IfcDirection;\n DERIVE\n\tU : LIST [3:3] OF IfcDirection := IfcBaseAxis(3,SELF\\IfcCartesianTransformationOperator.Axis1,\n              SELF\\IfcCartesianTransformationOperator.Axis2,Axis3);\n WHERE\n\tWR1 : SELF\\IfcCartesianTransformationOperator.Dim = 3;\n\tWR2 : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis1)) OR \n            (SELF\\IfcCartesianTransformationOperator.Axis1.Dim = 3);\n\tWR3 : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis2)) OR \n            (SELF\\IfcCartesianTransformationOperator.Axis2.Dim = 3);\n\tWR4 : NOT(EXISTS(Axis3)) OR (Axis3.Dim = 3);\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator3DnonUniform\n SUBTYPE OF (IfcCartesianTransformationOperator3D);\n\tScale2 : OPTIONAL REAL;\n\tScale3 : OPTIONAL REAL;\n DERIVE\n\tScl2 : REAL := NVL(Scale2, SELF\\IfcCartesianTransformationOperator.Scl);\n\tScl3 : REAL := NVL(Scale3, SELF\\IfcCartesianTransformationOperator.Scl);\n WHERE\n\tWR1 : Scl2 > 0.0;\n\tWR2 : Scl3 > 0.0;\nEND_ENTITY;\n\nENTITY IfcChamferEdgeFeature\n SUBTYPE OF (IfcEdgeFeature);\n\tWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tHeight : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcChillerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcChillerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCircle\n SUBTYPE OF (IfcConic);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCircleHollowProfileDef\n SUBTYPE OF (IfcCircleProfileDef);\n\tWallThickness : IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : WallThickness < SELF\\IfcCircleProfileDef.Radius;\nEND_ENTITY;\n\nENTITY IfcCircleProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcCircleHollowProfileDef))\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcClassification;\n\tSource : IfcLabel;\n\tEdition : IfcLabel;\n\tEditionDate : OPTIONAL IfcCalendarDate;\n\tName : IfcLabel;\n INVERSE\n\tContains : SET [0:?] OF IfcClassificationItem FOR ItemOf;\nEND_ENTITY;\n\nENTITY IfcClassificationItem;\n\tNotation : IfcClassificationNotationFacet;\n\tItemOf : OPTIONAL IfcClassification;\n\tTitle : IfcLabel;\n INVERSE\n\tIsClassifiedItemIn : SET [0:1] OF IfcClassificationItemRelationship FOR RelatedItems;\n\tIsClassifyingItemIn : SET [0:1] OF IfcClassificationItemRelationship FOR RelatingItem;\nEND_ENTITY;\n\nENTITY IfcClassificationItemRelationship;\n\tRelatingItem : IfcClassificationItem;\n\tRelatedItems : SET [1:?] OF IfcClassificationItem;\nEND_ENTITY;\n\nENTITY IfcClassificationNotation;\n\tNotationFacets : SET [1:?] OF IfcClassificationNotationFacet;\nEND_ENTITY;\n\nENTITY IfcClassificationNotationFacet;\n\tNotationValue : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcClassificationReference\n SUBTYPE OF (IfcExternalReference);\n\tReferencedSource : OPTIONAL IfcClassification;\nEND_ENTITY;\n\nENTITY IfcClosedShell\n SUBTYPE OF (IfcConnectedFaceSet);\nEND_ENTITY;\n\nENTITY IfcCoilType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCoilTypeEnum;\nEND_ENTITY;\n\nENTITY IfcColourRgb\n SUBTYPE OF (IfcColourSpecification);\n\tRed : IfcNormalisedRatioMeasure;\n\tGreen : IfcNormalisedRatioMeasure;\n\tBlue : IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcColourSpecification\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcColourRgb));\nEND_ENTITY;\n\nENTITY IfcColumn\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcColumnType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcColumnTypeEnum;\nEND_ENTITY;\n\nENTITY IfcComplexProperty\n SUBTYPE OF (IfcProperty);\n\tUsageName : IfcIdentifier;\n\tHasProperties : SET [1:?] OF IfcProperty;\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* HasProperties | SELF :=: temp)) = 0;\n\tWR22 : IfcUniquePropertyName(HasProperties);\nEND_ENTITY;\n\nENTITY IfcCompositeCurve\n SUPERTYPE OF (ONEOF\n\t(Ifc2DCompositeCurve))\n SUBTYPE OF (IfcBoundedCurve);\n\tSegments : LIST [1:?] OF IfcCompositeCurveSegment;\n\tSelfIntersect : LOGICAL;\n DERIVE\n\tNSegments : INTEGER := SIZEOF(Segments);\n\tClosedCurve : LOGICAL := Segments[NSegments].Transition <> Discontinuous;\n WHERE\n\tWR41 : ((NOT ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 1)) OR ((ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 0));\n\tWR42 : SIZEOF( QUERY( Temp <* Segments | Temp.Dim <> Segments[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcCompositeCurveSegment\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tTransition : IfcTransitionCode;\n\tSameSense : BOOLEAN;\n\tParentCurve : IfcCurve;\n DERIVE\n\tDim : IfcDimensionCount := ParentCurve.Dim;\n INVERSE\n\tUsingCurves : SET [1:?] OF IfcCompositeCurve FOR Segments;\n WHERE\n\tWR1 : ('IFC2X2_FINAL.IFCBOUNDEDCURVE' IN TYPEOF(ParentCurve));\nEND_ENTITY;\n\nENTITY IfcCompositeProfileDef\n SUBTYPE OF (IfcProfileDef);\n\tProfiles : SET [2:?] OF IfcProfileDef;\n\tLabel : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* Profiles | temp.ProfileType <> Profiles[1].ProfileType)) = 0;\n\tWR2 : SIZEOF(QUERY(temp <* Profiles | 'IFC2X2_FINAL.IFCCOMPOSITEPROFILEDEF' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcCompressorType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcCompressorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCondenserType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCondenserTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCondition\n SUBTYPE OF (IfcGroup);\nEND_ENTITY;\n\nENTITY IfcConditionCriterion\n SUBTYPE OF (IfcControl);\n\tCriterion : IfcConditionCriterionSelect;\n\tCriterionDateTime : IfcDateTimeSelect;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcConic\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCircle\n\t,IfcEllipse))\n SUBTYPE OF (IfcCurve);\n\tPosition : IfcAxis2Placement;\nEND_ENTITY;\n\nENTITY IfcConnectedFaceSet\n SUPERTYPE OF (ONEOF\n\t(IfcClosedShell\n\t,IfcOpenShell))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tCfsFaces : SET [1:?] OF IfcFace;\nEND_ENTITY;\n\nENTITY IfcConnectionCurveGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tCurveOnRelatingElement : IfcBoundedCurve;\n\tCurveOnRelatedElement : OPTIONAL IfcBoundedCurve;\nEND_ENTITY;\n\nENTITY IfcConnectionGeometry\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConnectionCurveGeometry\n\t,IfcConnectionPointGeometry\n\t,IfcConnectionPortGeometry\n\t,IfcConnectionSurfaceGeometry));\nEND_ENTITY;\n\nENTITY IfcConnectionPointGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tPointOnRelatingElement : IfcPoint;\n\tPointOnRelatedElement : OPTIONAL IfcPoint;\nEND_ENTITY;\n\nENTITY IfcConnectionPortGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tLocationAtRelatingElement : IfcAxis2Placement;\n\tLocationAtRelatedElement : OPTIONAL IfcAxis2Placement;\n\tProfileOfPort : IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcConnectionSurfaceGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tSurfaceOnRelatingElement : IfcSurface;\n\tSurfaceOnRelatedElement : OPTIONAL IfcSurface;\nEND_ENTITY;\n\nENTITY IfcConstraint\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcMetric\n\t,IfcObjective));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tConstraintGrade : IfcConstraintEnum;\n\tConstraintSource : OPTIONAL IfcLabel;\n\tCreatingActor : OPTIONAL IfcActorSelect;\n\tCreationTime : OPTIONAL IfcDateTimeSelect;\n\tUserDefinedGrade : OPTIONAL IfcLabel;\n INVERSE\n\tClassifiedAs : SET [0:?] OF IfcConstraintClassificationRelationship FOR ClassifiedConstraint;\n\tRelatesConstraints : SET [0:?] OF IfcConstraintRelationship FOR RelatingConstraint;\n\tIsRelatedWith : SET [0:?] OF IfcConstraintRelationship FOR RelatedConstraints;\n\tPropertiesForConstraint : SET [0:?] OF IfcPropertyConstraintRelationship FOR RelatingConstraint;\n\tAggregates : SET [0:?] OF IfcConstraintAggregationRelationship FOR RelatingConstraint;\n\tIsAggregatedIn : SET [0:?] OF IfcConstraintAggregationRelationship FOR RelatedConstraints;\n WHERE\n\tWR11 : (ConstraintGrade <> IfcConstraintEnum.USERDEFINED) OR\n             ((ConstraintGrade = IfcConstraintEnum.USERDEFINED) AND EXISTS(SELF\\IfcConstraint.UserDefinedGrade));\nEND_ENTITY;\n\nENTITY IfcConstraintAggregationRelationship;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRelatingConstraint : IfcConstraint;\n\tRelatedConstraints : LIST [1:?] OF UNIQUE IfcConstraint;\n\tLogicalAggregator : IfcLogicalOperatorEnum;\n WHERE\n\tWR11 : SIZEOF(QUERY(temp <* RelatedConstraints | \n               temp :=: RelatingConstraint\n               )) = 0;\nEND_ENTITY;\n\nENTITY IfcConstraintClassificationRelationship;\n\tClassifiedConstraint : IfcConstraint;\n\tRelatedClassifications : SET [1:?] OF IfcClassificationNotationSelect;\nEND_ENTITY;\n\nENTITY IfcConstraintRelationship;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRelatingConstraint : IfcConstraint;\n\tRelatedConstraints : SET [1:?] OF IfcConstraint;\n WHERE\n\tWR11 : SIZEOF(QUERY(temp <* RelatedConstraints | temp :=: RelatingConstraint )) = 0;\nEND_ENTITY;\n\nENTITY IfcConstructionEquipmentResource\n SUBTYPE OF (IfcConstructionResource);\nEND_ENTITY;\n\nENTITY IfcConstructionMaterialResource\n SUBTYPE OF (IfcConstructionResource);\n\tSuppliers : OPTIONAL SET [1:?] OF IfcActorSelect;\n\tUsageRatio : OPTIONAL IfcRatioMeasure;\n WHERE\n\tWR1 : SIZEOF(SELF\\IfcResource.ResourceOf) <=1;\n\tWR2 : NOT(EXISTS(SELF\\IfcResource.ResourceOf[1])) OR\n            (SELF\\IfcResource.ResourceOf[1].RelatedObjectsType = IfcObjectTypeEnum.PRODUCT);\nEND_ENTITY;\n\nENTITY IfcConstructionProductResource\n SUBTYPE OF (IfcConstructionResource);\n WHERE\n\tWR1 : SIZEOF(SELF\\IfcResource.ResourceOf) <=1;\n\tWR2 : NOT(EXISTS(SELF\\IfcResource.ResourceOf[1])) OR\n            (SELF\\IfcResource.ResourceOf[1].RelatedObjectsType = IfcObjectTypeEnum.PRODUCT);\nEND_ENTITY;\n\nENTITY IfcConstructionResource\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConstructionEquipmentResource\n\t,IfcConstructionMaterialResource\n\t,IfcConstructionProductResource\n\t,IfcCrewResource\n\t,IfcLaborResource\n\t,IfcSubContractResource))\n SUBTYPE OF (IfcResource);\n\tResourceIdentifier : OPTIONAL IfcIdentifier;\n\tResourceGroup : OPTIONAL IfcLabel;\n\tResourceConsumption : OPTIONAL IfcResourceConsumptionEnum;\n\tBaseQuantity : OPTIONAL IfcMeasureWithUnit;\nEND_ENTITY;\n\nENTITY IfcContextDependentUnit\n SUBTYPE OF (IfcNamedUnit);\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcControl\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcActionRequest\n\t,IfcConditionCriterion\n\t,IfcCostItem\n\t,IfcCostSchedule\n\t,IfcEquipmentStandard\n\t,IfcFurnitureStandard\n\t,IfcPerformanceHistory\n\t,IfcPermit\n\t,IfcProjectOrder\n\t,IfcProjectOrderRecord\n\t,IfcScheduleTimeControl\n\t,IfcServiceLife\n\t,IfcSpaceProgram\n\t,IfcTimeSeriesSchedule\n\t,IfcWorkControl))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tControls : SET [0:?] OF IfcRelAssignsToControl FOR RelatingControl;\nEND_ENTITY;\n\nENTITY IfcControllerType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcControllerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcConversionBasedUnit\n SUBTYPE OF (IfcNamedUnit);\n\tName : IfcLabel;\n\tConversionFactor : IfcMeasureWithUnit;\nEND_ENTITY;\n\nENTITY IfcCooledBeamType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCooledBeamTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCoolingTowerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCoolingTowerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCoordinatedUniversalTimeOffset;\n\tHourOffset : IfcHourInDay;\n\tMinuteOffset : OPTIONAL IfcMinuteInHour;\n\tSense : IfcAheadOrBehind;\nEND_ENTITY;\n\nENTITY IfcCostItem\n SUBTYPE OF (IfcControl);\nEND_ENTITY;\n\nENTITY IfcCostSchedule\n SUBTYPE OF (IfcControl);\n\tSubmittedBy : OPTIONAL IfcActorSelect;\n\tPreparedBy : OPTIONAL IfcActorSelect;\n\tSubmittedOn : OPTIONAL IfcDateTimeSelect;\n\tStatus : OPTIONAL IfcLabel;\n\tTargetUsers : OPTIONAL SET [1:?] OF IfcActorSelect;\n\tUpdateDate : OPTIONAL IfcDateTimeSelect;\n\tID : IfcIdentifier;\n\tPredefinedType : IfcCostScheduleTypeEnum;\n UNIQUE\n\tUR2 : ID;\nEND_ENTITY;\n\nENTITY IfcCostValue\n SUBTYPE OF (IfcAppliedValue);\n\tCostType : IfcLabel;\n\tCondition : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcCovering\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcCoveringTypeEnum;\n INVERSE\n\tCovers : SET [0:1] OF IfcRelCoversBldgElements FOR RelatedCoverings;\nEND_ENTITY;\n\nENTITY IfcCoveringType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcCoveringTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCraneRailAShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tOverallHeight : IfcPositiveLengthMeasure;\n\tBaseWidth2 : IfcPositiveLengthMeasure;\n\tRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tHeadWidth : IfcPositiveLengthMeasure;\n\tHeadDepth2 : IfcPositiveLengthMeasure;\n\tHeadDepth3 : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tBaseWidth4 : IfcPositiveLengthMeasure;\n\tBaseDepth1 : IfcPositiveLengthMeasure;\n\tBaseDepth2 : IfcPositiveLengthMeasure;\n\tBaseDepth3 : IfcPositiveLengthMeasure;\n\tCentreOfGravityInY : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCraneRailFShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tOverallHeight : IfcPositiveLengthMeasure;\n\tHeadWidth : IfcPositiveLengthMeasure;\n\tRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tHeadDepth2 : IfcPositiveLengthMeasure;\n\tHeadDepth3 : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tBaseDepth1 : IfcPositiveLengthMeasure;\n\tBaseDepth2 : IfcPositiveLengthMeasure;\n\tCentreOfGravityInY : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCrewResource\n SUBTYPE OF (IfcConstructionResource);\nEND_ENTITY;\n\nENTITY IfcCsgSolid\n SUBTYPE OF (IfcSolidModel);\n\tTreeRootExpression : IfcCsgSelect;\nEND_ENTITY;\n\nENTITY IfcCurrencyRelationship;\n\tRelatingMonetaryUnit : IfcMonetaryUnit;\n\tRelatedMonetaryUnit : IfcMonetaryUnit;\n\tExchangeRate : IfcPositiveRatioMeasure;\n\tRateDateTime : IfcDateAndTime;\n\tRateSource : OPTIONAL IfcLibraryInformation;\nEND_ENTITY;\n\nENTITY IfcCurtainWall\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBoundedCurve\n\t,IfcConic\n\t,IfcLine\n\t,IfcOffsetCurve2D\n\t,IfcOffsetCurve3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\tDim : IfcDimensionCount := IfcCurveDim(SELF);\nEND_ENTITY;\n\nENTITY IfcCurveBoundedPlane\n SUBTYPE OF (IfcBoundedSurface);\n\tBasisSurface : IfcPlane;\n\tOuterBoundary : IfcCurve;\n\tInnerBoundaries : SET [0:?] OF IfcCurve;\n DERIVE\n\tDim : IfcDimensionCount := BasisSurface.Dim;\nEND_ENTITY;\n\nENTITY IfcCurveStyle;\n\tName : IfcLabel;\n\tCurveFont : OPTIONAL IfcCurveFontOrScaledCurveFontSelect;\n\tCurveWidth : OPTIONAL IfcSizeSelect;\n\tCurveColour : OPTIONAL IfcColour;\nEND_ENTITY;\n\nENTITY IfcCurveStyleFont;\n\tName : OPTIONAL IfcLabel;\n\tPatternList : LIST [1:?] OF IfcCurveStyleFontPattern;\nEND_ENTITY;\n\nENTITY IfcCurveStyleFontAndScaling;\n\tName : OPTIONAL IfcLabel;\n\tCurveFont : IfcCurveStyleFontSelect;\n\tCurveFontScaling : IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcCurveStyleFontPattern;\n\tVisibleSegmentLength : IfcPositiveLengthMeasure;\n\tInvisibleSegmentLength : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcDamperType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcDamperTypeEnum;\nEND_ENTITY;\n\nENTITY IfcDateAndTime;\n\tDateComponent : IfcCalendarDate;\n\tTimeComponent : IfcLocalTime;\nEND_ENTITY;\n\nENTITY IfcDefinedSymbol\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tDefinition : IfcDefinedSymbolSelect;\n\tTarget : IfcCartesianTransformationOperator2D;\nEND_ENTITY;\n\nENTITY IfcDerivedProfileDef\n SUBTYPE OF (IfcProfileDef);\n\tParentProfile : IfcProfileDef;\n\tOperator : IfcCartesianTransformationOperator2D;\n\tLabel : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : SELF\\IfcProfileDef.ProfileType = ParentProfile.ProfileType;\nEND_ENTITY;\n\nENTITY IfcDerivedUnit;\n\tElements : SET [1:?] OF IfcDerivedUnitElement;\n\tUnitType : IfcDerivedUnitEnum;\n\tUserDefinedType : OPTIONAL IfcLabel;\n DERIVE\n\tDimensions : IfcDimensionalExponents := IfcDeriveDimensionalExponents(SELF);\n WHERE\n\tWR1 : (SIZEOF (Elements) > 1) OR ((SIZEOF (Elements) = 1) AND (Elements[1].Exponent <> 1 ));\n\tWR2 : (UnitType <> IfcDerivedUnitEnum.USERDEFINED) OR\n            ((UnitType = IfcDerivedUnitEnum.USERDEFINED) AND \n             (EXISTS(SELF.UserDefinedType)));\nEND_ENTITY;\n\nENTITY IfcDerivedUnitElement;\n\tUnit : IfcNamedUnit;\n\tExponent : INTEGER;\nEND_ENTITY;\n\nENTITY IfcDiameterDimension\n SUBTYPE OF (IfcDimensionCurveDirectedCallout);\nEND_ENTITY;\n\nENTITY IfcDimensionCalloutRelationship\n SUBTYPE OF (IfcDraughtingCalloutRelationship);\n WHERE\n\tWR21 : SELF\\IfcDraughtingCalloutRelationship.Name IN ['primary','secondary'];\n\tWR22 : SIZEOF(TYPEOF(SELF\\IfcDraughtingCalloutRelationship.RelatingDraughtingCallout) * [\n                  'IFC2X2_FINAL.IFCANGULARDIMENSION',\n                  'IFC2X2_FINAL.IFCDIAMETERDIMENSION',\n                  'IFC2X2_FINAL.IFCLINEARDIMENSION',\n                  'IFC2X2_FINAL.IFCRADIUSDIMENSION']) = 1;\n\tWR23 : NOT ('IFC2X2_FINAL.IFCDIMENSIONCURVEDIRECTEDCALLOUT'\n               IN TYPEOF (SELF\\IfcDraughtingCalloutRelationship.RelatedDraughtingCallout));\nEND_ENTITY;\n\nENTITY IfcDimensionCurve\n SUBTYPE OF (IfcAnnotationCurveOccurrence);\n INVERSE\n\tAnnotatedBySymbols : SET [0:2] OF IfcTerminatorSymbol FOR AnnotatedCurve;\n WHERE\n\tWR51 : SIZEOF(USEDIN(SELF,'IFC2X2_FINAL.' + \n                   'IFCDRAUGHTINGCALLOUT.CONTENTS')) \n                   >= 1;\n\tWR52 : (SIZEOF(QUERY (Dct1 <* AnnotatedBySymbols | (Dct1.Role = ORIGIN))) <= 1) \n             AND \n             (SIZEOF(QUERY (Dct2 <* AnnotatedBySymbols | (Dct2.Role = TARGET))) <= 1);\n\tWR53 : SIZEOF(QUERY (Dct <* AnnotatedBySymbols | \n               NOT('IFC2X2_FINAL.IFCDIMENSIONCURVETERMINATOR' IN TYPEOF(Dct)))) \n               = 0;\nEND_ENTITY;\n\nENTITY IfcDimensionCurveDirectedCallout\n SUPERTYPE OF (ONEOF\n\t(IfcAngularDimension\n\t,IfcDiameterDimension\n\t,IfcLinearDimension\n\t,IfcRadiusDimension))\n SUBTYPE OF (IfcDraughtingCallout);\n WHERE\n\tWR41 : SIZEOF(QUERY (Dc <* SELF\\IfcDraughtingCallout.Contents | (\n                   'IFC2X2_FINAL.IFCDIMENSIONCURVE' IN TYPEOF(Dc)))) \n                  = 1;\n\tWR42 : SIZEOF (QUERY (Dc <* SELF.contents |\n                    ('IFC2X2_FINAL.IFCPROJECTIONCURVE' IN\n                      TYPEOF (Dc)))) <= 2;\nEND_ENTITY;\n\nENTITY IfcDimensionCurveTerminator\n SUBTYPE OF (IfcTerminatorSymbol);\n\tRole : IfcDimensionExtentUsage;\n WHERE\n\tWR61 : 'IFC2X2_FINAL.IFCDIMENSIONCURVE' IN TYPEOF\n             (SELF\\IfcTerminatorSymbol.AnnotatedCurve);\nEND_ENTITY;\n\nENTITY IfcDimensionalExponents;\n\tLengthExponent : INTEGER;\n\tMassExponent : INTEGER;\n\tTimeExponent : INTEGER;\n\tElectricCurrentExponent : INTEGER;\n\tThermodynamicTemperatureExponent : INTEGER;\n\tAmountOfSubstanceExponent : INTEGER;\n\tLuminousIntensityExponent : INTEGER;\nEND_ENTITY;\n\nENTITY IfcDirection\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tDirectionRatios : LIST [2:3] OF REAL;\n DERIVE\n\tDim : IfcDimensionCount := HIINDEX(DirectionRatios);\nEND_ENTITY;\n\nENTITY IfcDiscreteAccessory\n SUBTYPE OF (IfcElementComponent);\nEND_ENTITY;\n\nENTITY IfcDiscreteAccessoryType\n SUPERTYPE OF (ONEOF\n\t(IfcVibrationIsolatorType))\n SUBTYPE OF (IfcElementComponentType);\nEND_ENTITY;\n\nENTITY IfcDistributionChamberElement\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcDistributionChamberElementType\n SUBTYPE OF (IfcDistributionFlowElementType);\n\tPredefinedType : IfcDistributionChamberElementTypeEnum;\nEND_ENTITY;\n\nENTITY IfcDistributionControlElement\n SUBTYPE OF (IfcDistributionElement);\n\tControlElementId : OPTIONAL IfcIdentifier;\n INVERSE\n\tAssignedToFlowElement : SET [0:1] OF IfcRelFlowControlElements FOR RelatedControlElements;\nEND_ENTITY;\n\nENTITY IfcDistributionControlElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcActuatorType\n\t,IfcAlarmType\n\t,IfcControllerType\n\t,IfcFlowInstrumentType\n\t,IfcSensorType))\n SUBTYPE OF (IfcDistributionElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionElement\n SUPERTYPE OF (ONEOF\n\t(IfcDistributionControlElement\n\t,IfcDistributionFlowElement))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcDistributionElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDistributionControlElementType\n\t,IfcDistributionFlowElementType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionFlowElement\n SUPERTYPE OF (ONEOF\n\t(IfcDistributionChamberElement\n\t,IfcEnergyConversionDevice\n\t,IfcFlowController\n\t,IfcFlowFitting\n\t,IfcFlowMovingDevice\n\t,IfcFlowSegment\n\t,IfcFlowStorageDevice\n\t,IfcFlowTerminal\n\t,IfcFlowTreatmentDevice))\n SUBTYPE OF (IfcDistributionElement);\n INVERSE\n\tHasControlElements : SET [0:1] OF IfcRelFlowControlElements FOR RelatingFlowElement;\nEND_ENTITY;\n\nENTITY IfcDistributionFlowElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDistributionChamberElementType\n\t,IfcEnergyConversionDeviceType\n\t,IfcFlowControllerType\n\t,IfcFlowFittingType\n\t,IfcFlowMovingDeviceType\n\t,IfcFlowSegmentType\n\t,IfcFlowStorageDeviceType\n\t,IfcFlowTerminalType\n\t,IfcFlowTreatmentDeviceType))\n SUBTYPE OF (IfcDistributionElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionPort\n SUBTYPE OF (IfcPort);\n\tFlowDirection : OPTIONAL IfcFlowDirectionEnum;\nEND_ENTITY;\n\nENTITY IfcDocumentElectronicFormat;\n\tFileExtension : OPTIONAL IfcLabel;\n\tMimeContentType : OPTIONAL IfcLabel;\n\tMimeSubtype : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS(FileExtension) OR EXISTS(MimeContentType);\nEND_ENTITY;\n\nENTITY IfcDocumentInformation;\n\tDocumentId : IfcIdentifier;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tDocumentReferences : OPTIONAL SET [1:?] OF IfcDocumentReference;\n\tPurpose : OPTIONAL IfcText;\n\tIntendedUse : OPTIONAL IfcText;\n\tScope : OPTIONAL IfcText;\n\tRevision : OPTIONAL IfcLabel;\n\tDocumentOwner : OPTIONAL IfcActorSelect;\n\tEditors : OPTIONAL SET [1:?] OF IfcActorSelect;\n\tCreationTime : OPTIONAL IfcDateAndTime;\n\tLastRevisionTime : OPTIONAL IfcDateAndTime;\n\tElectronicFormat : OPTIONAL IfcDocumentElectronicFormat;\n\tValidFrom : OPTIONAL IfcCalendarDate;\n\tValidUntil : OPTIONAL IfcCalendarDate;\n\tConfidentiality : OPTIONAL IfcDocumentConfidentialityEnum;\n\tStatus : OPTIONAL IfcDocumentStatusEnum;\n INVERSE\n\tIsPointedTo : SET [0:?] OF IfcDocumentInformationRelationship FOR RelatedDocuments;\n\tIsPointer : SET [0:1] OF IfcDocumentInformationRelationship FOR RelatingDocument;\nEND_ENTITY;\n\nENTITY IfcDocumentInformationRelationship;\n\tRelatingDocument : IfcDocumentInformation;\n\tRelatedDocuments : SET [1:?] OF IfcDocumentInformation;\n\tRelationshipType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcDocumentReference\n SUBTYPE OF (IfcExternalReference);\n INVERSE\n\tReferenceToDocument : SET [0:1] OF IfcDocumentInformation FOR DocumentReferences;\n WHERE\n\tWR1 : EXISTS(Name) XOR EXISTS(ReferenceToDocument[1]);\nEND_ENTITY;\n\nENTITY IfcDoor\n SUBTYPE OF (IfcBuildingElement);\n\tOverallHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tOverallWidth : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcDoorLiningProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tLiningDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tLiningThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tThresholdDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tThresholdThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTransomThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTransomOffset : OPTIONAL IfcLengthMeasure;\n\tLiningOffset : OPTIONAL IfcLengthMeasure;\n\tThresholdOffset : OPTIONAL IfcLengthMeasure;\n\tCasingThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tCasingDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n WHERE\n\tWR1 : (EXISTS(LiningDepth) AND EXISTS(LiningThickness)) XOR\n            (NOT(EXISTS(LiningDepth)) AND NOT(EXISTS(LiningThickness)));\n\tWR2 : (EXISTS(ThresholdDepth) AND EXISTS(ThresholdThickness)) XOR\n            (NOT(EXISTS(ThresholdDepth)) AND NOT(EXISTS(ThresholdThickness)));\n\tWR3 : (EXISTS(TransomOffset) AND EXISTS(TransomThickness)) XOR\n            (NOT(EXISTS(TransomOffset)) AND NOT(EXISTS(TransomThickness)));\n\tWR4 : (EXISTS(CasingDepth) AND EXISTS(CasingThickness)) XOR\n            (NOT(EXISTS(CasingDepth)) AND NOT(EXISTS(CasingThickness)));\n\tWR5 : EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1]) AND \n            ('IFC2X2_FINAL.IFCDOORSTYLE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]));\nEND_ENTITY;\n\nENTITY IfcDoorPanelProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tPanelDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tPanelOperation : IfcDoorPanelOperationEnum;\n\tPanelWidth : OPTIONAL IfcNormalisedRatioMeasure;\n\tPanelPosition : IfcDoorPanelPositionEnum;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1]) AND \n            ('IFC2X2_FINAL.IFCDOORSTYLE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]));\nEND_ENTITY;\n\nENTITY IfcDoorStyle\n SUBTYPE OF (IfcTypeProduct);\n\tOperationType : IfcDoorStyleOperationEnum;\n\tConstructionType : IfcDoorStyleConstructionEnum;\n\tParameterTakesPrecedence : BOOLEAN;\n\tSizeable : BOOLEAN;\nEND_ENTITY;\n\nENTITY IfcDraughtingCallout\n SUPERTYPE OF (ONEOF\n\t(IfcDimensionCurveDirectedCallout\n\t,IfcStructuredDimensionCallout))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tContents : SET [1:?] OF IfcDraughtingCalloutElement;\n INVERSE\n\tIsRelatedFromCallout : SET [0:?] OF IfcDraughtingCalloutRelationship FOR RelatedDraughtingCallout;\n\tIsRelatedToCallout : SET [0:?] OF IfcDraughtingCalloutRelationship FOR RelatingDraughtingCallout;\nEND_ENTITY;\n\nENTITY IfcDraughtingCalloutRelationship\n SUPERTYPE OF (ONEOF\n\t(IfcDimensionCalloutRelationship));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRelatingDraughtingCallout : IfcDraughtingCallout;\n\tRelatedDraughtingCallout : IfcDraughtingCallout;\nEND_ENTITY;\n\nENTITY IfcDraughtingPreDefinedColour\n SUBTYPE OF (IfcPreDefinedColour);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['black','red','green','blue','yellow',\n                  'magenta','cyan','white','by layer'];\nEND_ENTITY;\n\nENTITY IfcDraughtingPreDefinedCurveFont\n SUBTYPE OF (IfcPreDefinedCurveFont);\n WHERE\n\tWR31 : SELF\\IfcPredefinedItem.Name IN\n                    ['continuous',\n                     'chain',\n                     'chain double dash',\n                     'dashed',\n                     'dotted',\n                     'by layer'];\nEND_ENTITY;\n\nENTITY IfcDraughtingPreDefinedTextFont\n SUBTYPE OF (IfcPreDefinedTextFont);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['ISO 3098-1 font A','ISO 3098-1 font B'];\nEND_ENTITY;\n\nENTITY IfcDuctFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcDuctFittingTypeEnum;\n WHERE\n\tWR2 : (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcDuctSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcDuctSegmentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcDuctSilencerType\n SUBTYPE OF (IfcFlowTreatmentDeviceType);\n\tPredefinedType : IfcDuctSilencerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcEdge\n SUPERTYPE OF (ONEOF\n\t(IfcEdgeCurve\n\t,IfcOrientedEdge\n\t,IfcSubedge))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tEdgeStart : IfcVertex;\n\tEdgeEnd : IfcVertex;\nEND_ENTITY;\n\nENTITY IfcEdgeCurve\n SUBTYPE OF (IfcEdge);\n\tEdgeGeometry : IfcCurve;\n\tSameSense : BOOLEAN;\nEND_ENTITY;\n\nENTITY IfcEdgeFeature\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcChamferEdgeFeature\n\t,IfcRoundedEdgeFeature))\n SUBTYPE OF (IfcFeatureElementSubtraction);\n\tFeatureLength : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcEdgeLoop\n SUBTYPE OF (IfcLoop);\n\tEdgeList : LIST [1:?] OF IfcOrientedEdge;\n DERIVE\n\tNe : INTEGER := SIZEOF(EdgeList);\n WHERE\n\tWR1 : (EdgeList[1].EdgeStart) :=: (EdgeList[Ne].EdgeEnd);\n\tWR2 : IfcLoopHeadToTail(SELF);\nEND_ENTITY;\n\nENTITY IfcElectricApplianceType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcElectricApplianceTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricDistributionPoint\n SUBTYPE OF (IfcFlowController);\n\tDistributionPointFunction : IfcElectricDistributionPointFunctionEnum;\n\tUserDefinedFunction : OPTIONAL IfcLabel;\n WHERE\n\tWR31 : (DistributionPointFunction <> IfcElectricDistributionPointFunctionEnum.USERDEFINED) OR\n             ((DistributionPointFunction = IfcElectricDistributionPointFunctionEnum.USERDEFINED) AND EXISTS(SELF\\IfcElectricDistributionPoint.UserDefinedFunction));\nEND_ENTITY;\n\nENTITY IfcElectricFlowStorageDeviceType\n SUBTYPE OF (IfcFlowStorageDeviceType);\n\tPredefinedType : IfcElectricFlowStorageDeviceTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricGeneratorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcElectricGeneratorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricHeaterType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcElectricHeaterTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricMotorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcElectricMotorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricTimeControlType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcElectricTimeControlTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricalBaseProperties\n SUBTYPE OF (IfcEnergyProperties);\n\tElectricCurrentType : OPTIONAL IfcElectricCurrentEnum;\n\tInputVoltage : IfcElectricVoltageMeasure;\n\tInputFrequency : IfcFrequencyMeasure;\n\tFullLoadCurrent : OPTIONAL IfcElectricCurrentMeasure;\n\tMinimumCircuitCurrent : OPTIONAL IfcElectricCurrentMeasure;\n\tMaximumPowerInput : OPTIONAL IfcPowerMeasure;\n\tRatedPowerInput : OPTIONAL IfcPowerMeasure;\n\tInputPhase : INTEGER;\nEND_ENTITY;\n\nENTITY IfcElectricalCircuit\n SUBTYPE OF (IfcSystem);\nEND_ENTITY;\n\nENTITY IfcElectricalElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuildingElement\n\t,IfcDistributionElement\n\t,IfcElectricalElement\n\t,IfcElementAssembly\n\t,IfcElementComponent\n\t,IfcEquipmentElement\n\t,IfcFeatureElement\n\t,IfcFurnishingElement\n\t,IfcTransportElement\n\t,IfcVirtualElement))\n SUBTYPE OF (IfcProduct);\n\tTag : OPTIONAL IfcIdentifier;\n INVERSE\n\tFillsVoids : SET [0:1] OF IfcRelFillsElement FOR RelatedBuildingElement;\n\tConnectedTo : SET [0:?] OF IfcRelConnectsElements FOR RelatingElement;\n\tHasCoverings : SET [0:?] OF IfcRelCoversBldgElements FOR RelatingBuildingElement;\n\tHasProjections : SET [0:?] OF IfcRelProjectsElement FOR RelatingElement;\n\tHasPorts : SET [0:?] OF IfcRelConnectsPortToElement FOR RelatedElement;\n\tHasOpenings : SET [0:?] OF IfcRelVoidsElement FOR RelatingBuildingElement;\n\tIsConnectionRealization : SET [0:?] OF IfcRelConnectsWithRealizingElements FOR RealizingElements;\n\tProvidesBoundaries : SET [0:?] OF IfcRelSpaceBoundary FOR RelatedBuildingElement;\n\tConnectedFrom : SET [0:?] OF IfcRelConnectsElements FOR RelatedElement;\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\nEND_ENTITY;\n\nENTITY IfcElementAssembly\n SUBTYPE OF (IfcElement);\n\tAssemblyPlace : OPTIONAL IfcAssemblyPlaceEnum;\n\tPredefinedType : IfcElementAssemblyTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcElementAssemblyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElementAssemblyTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcElementComponent\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDiscreteAccessory\n\t,IfcFastener))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcElementComponentType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDiscreteAccessoryType\n\t,IfcFastenerType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcElementQuantity\n SUBTYPE OF (IfcPropertySetDefinition);\n\tMethodOfMeasurement : OPTIONAL IfcLabel;\n\tQuantities : SET [1:?] OF IfcPhysicalQuantity;\nEND_ENTITY;\n\nENTITY IfcElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuildingElementType\n\t,IfcDistributionElementType\n\t,IfcElementComponentType\n\t,IfcFurnishingElementType\n\t,IfcTransportElementType))\n SUBTYPE OF (IfcTypeProduct);\n\tElementType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcElementarySurface\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPlane))\n SUBTYPE OF (IfcSurface);\n\tPosition : IfcAxis2Placement3D;\n DERIVE\n\tDim : IfcDimensionCount := Position.Dim;\nEND_ENTITY;\n\nENTITY IfcEllipse\n SUBTYPE OF (IfcConic);\n\tSemiAxis1 : IfcPositiveLengthMeasure;\n\tSemiAxis2 : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcEllipseProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tSemiAxis1 : IfcPositiveLengthMeasure;\n\tSemiAxis2 : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcEnergyConversionDevice\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcEnergyConversionDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAirToAirHeatRecoveryType\n\t,IfcBoilerType\n\t,IfcChillerType\n\t,IfcCoilType\n\t,IfcCondenserType\n\t,IfcCooledBeamType\n\t,IfcCoolingTowerType\n\t,IfcElectricGeneratorType\n\t,IfcElectricMotorType\n\t,IfcEvaporativeCoolerType\n\t,IfcEvaporatorType\n\t,IfcHeatExchangerType\n\t,IfcHumidifierType\n\t,IfcMotorConnectionType\n\t,IfcSpaceHeaterType\n\t,IfcTransformerType\n\t,IfcTubeBundleType\n\t,IfcUnitaryEquipmentType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcEnergyProperties\n SUPERTYPE OF (ONEOF\n\t(IfcElectricalBaseProperties))\n SUBTYPE OF (IfcPropertySetDefinition);\n\tEnergySequence : OPTIONAL IfcEnergySequenceEnum;\n\tUserDefinedEnergySequence : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcEnvironmentalImpactValue\n SUBTYPE OF (IfcAppliedValue);\n\tImpactType : IfcLabel;\n\tCategory : IfcEnvironmentalImpactCategoryEnum;\n\tUserDefinedCategory : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : (Category <> IfcEnvironmentalImpactCategoryEnum.USERDEFINED) OR\n            ((Category = IfcEnvironmentalImpactCategoryEnum.USERDEFINED) AND EXISTS(SELF\\IfcEnvironmentalImpactValue.UserDefinedCategory));\nEND_ENTITY;\n\nENTITY IfcEquipmentElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcEquipmentStandard\n SUBTYPE OF (IfcControl);\nEND_ENTITY;\n\nENTITY IfcEvaporativeCoolerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcEvaporativeCoolerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcEvaporatorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcEvaporatorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcExtendedMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tExtendedProperties : SET [1:?] OF IfcProperty;\n\tDescription : OPTIONAL IfcText;\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcExternalReference\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcClassificationReference\n\t,IfcDocumentReference\n\t,IfcExternallyDefinedHatchStyle\n\t,IfcExternallyDefinedSufaceStyle\n\t,IfcExternallyDefinedSymbol\n\t,IfcExternallyDefinedTextFont\n\t,IfcLibraryReference));\n\tLocation : OPTIONAL IfcLabel;\n\tItemReference : OPTIONAL IfcIdentifier;\n\tName : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS(ItemReference) OR EXISTS(Location) OR EXISTS(Name);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedHatchStyle\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedSufaceStyle\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedSymbol\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedTextFont\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExtrudedAreaSolid\n SUBTYPE OF (IfcSweptAreaSolid);\n\tExtrudedDirection : IfcDirection;\n\tDepth : IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : IfcDotProduct(IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcDirection([0.0,0.0,1.0]), SELF.ExtrudedDirection) <> 0.0;\nEND_ENTITY;\n\nENTITY IfcFace\n SUPERTYPE OF (ONEOF\n\t(IfcFaceSurface))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tBounds : SET [1:?] OF IfcFaceBound;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* Bounds | 'IFC2X2_FINAL.IFCFACEOUTERBOUND' IN TYPEOF(temp))) <= 1;\nEND_ENTITY;\n\nENTITY IfcFaceBasedSurfaceModel\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tFbsmFaces : SET [1:?] OF IfcConnectedFaceSet;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcFaceBound\n SUPERTYPE OF (ONEOF\n\t(IfcFaceOuterBound))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tBound : IfcLoop;\n\tOrientation : BOOLEAN;\n WHERE\n\tWR1 : 'IFC2X2_FINAL.IFCPOLYLOOP' IN TYPEOF(Bound);\nEND_ENTITY;\n\nENTITY IfcFaceOuterBound\n SUBTYPE OF (IfcFaceBound);\nEND_ENTITY;\n\nENTITY IfcFaceSurface\n SUBTYPE OF (IfcFace);\n\tFaceSurface : IfcSurface;\n\tSameSense : BOOLEAN;\nEND_ENTITY;\n\nENTITY IfcFacetedBrep\n SUBTYPE OF (IfcManifoldSolidBrep);\nEND_ENTITY;\n\nENTITY IfcFacetedBrepWithVoids\n SUBTYPE OF (IfcManifoldSolidBrep);\n\tVoids : SET [1:?] OF IfcClosedShell;\nEND_ENTITY;\n\nENTITY IfcFailureConnectionCondition\n SUBTYPE OF (IfcStructuralConnectionCondition);\n\tTensionFailureX : OPTIONAL IfcForceMeasure;\n\tTensionFailureY : OPTIONAL IfcForceMeasure;\n\tTensionFailureZ : OPTIONAL IfcForceMeasure;\n\tCompressionFailureX : OPTIONAL IfcForceMeasure;\n\tCompressionFailureY : OPTIONAL IfcForceMeasure;\n\tCompressionFailureZ : OPTIONAL IfcForceMeasure;\nEND_ENTITY;\n\nENTITY IfcFanType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcFanTypeEnum;\nEND_ENTITY;\n\nENTITY IfcFastener\n SUPERTYPE OF (ONEOF\n\t(IfcMechanicalFastener))\n SUBTYPE OF (IfcElementComponent);\nEND_ENTITY;\n\nENTITY IfcFastenerType\n SUPERTYPE OF (ONEOF\n\t(IfcMechanicalFastenerType))\n SUBTYPE OF (IfcElementComponentType);\nEND_ENTITY;\n\nENTITY IfcFeatureElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcFeatureElementAddition\n\t,IfcFeatureElementSubtraction))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcFeatureElementAddition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcProjectionElement))\n SUBTYPE OF (IfcFeatureElement);\n INVERSE\n\tProjectsElements : IfcRelProjectsElement FOR RelatedFeatureElement;\nEND_ENTITY;\n\nENTITY IfcFeatureElementSubtraction\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcEdgeFeature\n\t,IfcOpeningElement))\n SUBTYPE OF (IfcFeatureElement);\n INVERSE\n\tVoidsElements : IfcRelVoidsElement FOR RelatedOpeningElement;\nEND_ENTITY;\n\nENTITY IfcFillAreaStyle;\n\tFillStyles : SET [1:?] OF IfcFillStyleSelect;\n\tName : IfcLabel;\n WHERE\n\tWR11 : SIZEOF(QUERY(Style <* SELF.FillStyles |\n               'IFC2X2_FINAL.IFCCOLOUR' IN\n                TYPEOF(Style)\n               )) <= 1;\nEND_ENTITY;\n\nENTITY IfcFillAreaStyleHatching\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tHatchLineAppearance : IfcCurveStyle;\n\tStartOfNextHatchLine : IfcOneDirectionRepeatFactor;\n\tPointOfReferenceHatchLine : IfcCartesianPoint;\n\tPatternStart : IfcCartesianPoint;\n\tHatchLineAngle : IfcPlaneAngleMeasure;\nEND_ENTITY;\n\nENTITY IfcFillAreaStyleTileSymbolWithStyle\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSymbol : IfcAnnotationSymbolOccurrence;\nEND_ENTITY;\n\nENTITY IfcFillAreaStyleTiles\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tTilingPattern : IfcOneDirectionRepeatFactor;\n\tTiles : SET [1:?] OF IfcFillAreaStyleTileShapeSelect;\n\tTilingScale : IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcFilterType\n SUBTYPE OF (IfcFlowTreatmentDeviceType);\n\tPredefinedType : IfcFilterTypeEnum;\nEND_ENTITY;\n\nENTITY IfcFireSuppressionTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcFireSuppressionTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcFlowController\n SUPERTYPE OF (ONEOF\n\t(IfcElectricDistributionPoint))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowControllerType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAirTerminalBoxType\n\t,IfcDamperType\n\t,IfcElectricTimeControlType\n\t,IfcFlowMeterType\n\t,IfcProtectiveDeviceType\n\t,IfcSwitchingDeviceType\n\t,IfcValveType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowFitting\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowFittingType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCableCarrierFittingType\n\t,IfcDuctFittingType\n\t,IfcJunctionBoxType\n\t,IfcPipeFittingType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowInstrumentType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcFlowInstrumentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcFlowMeterType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcFlowMeterTypeEnum;\nEND_ENTITY;\n\nENTITY IfcFlowMovingDevice\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowMovingDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCompressorType\n\t,IfcFanType\n\t,IfcPumpType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowSegment\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowSegmentType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCableCarrierSegmentType\n\t,IfcCableSegmentType\n\t,IfcDuctSegmentType\n\t,IfcPipeSegmentType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowStorageDevice\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowStorageDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcElectricFlowStorageDeviceType\n\t,IfcTankType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowTerminal\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowTerminalType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAirTerminalType\n\t,IfcElectricApplianceType\n\t,IfcElectricHeaterType\n\t,IfcFireSuppressionTerminalType\n\t,IfcGasTerminalType\n\t,IfcLampType\n\t,IfcLightFixtureType\n\t,IfcOutletType\n\t,IfcSanitaryTerminalType\n\t,IfcStackTerminalType\n\t,IfcWasteTerminalType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowTreatmentDevice\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowTreatmentDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDuctSilencerType\n\t,IfcFilterType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFluidFlowProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tPropertySource : IfcPropertySourceEnum;\n\tFlowConditionTimeSeries : OPTIONAL IfcTimeSeries;\n\tVelocityTimeSeries : OPTIONAL IfcTimeSeries;\n\tFlowrateTimeSeries : OPTIONAL IfcTimeSeries;\n\tFluid : IfcMaterial;\n\tPressureTimeSeries : OPTIONAL IfcTimeSeries;\n\tUserDefinedPropertySource : OPTIONAL IfcLabel;\n\tTemperatureSingleValue : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tWetBulbTemperatureSingleValue : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tWetBulbTemperatureTimeSeries : OPTIONAL IfcTimeSeries;\n\tTemperatureTimeSeries : OPTIONAL IfcTimeSeries;\n\tFlowrateSingleValue : OPTIONAL IfcDerivedMeasureValue;\n\tFlowConditionSingleValue : OPTIONAL IfcPositiveRatioMeasure;\n\tVelocitySingleValue : OPTIONAL IfcLinearVelocityMeasure;\n\tPressureSingleValue : OPTIONAL IfcPressureMeasure;\nEND_ENTITY;\n\nENTITY IfcFooting\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : IfcFootingTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcFuelProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tCombustionTemperature : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tCarbonContent : OPTIONAL IfcPositiveRatioMeasure;\n\tLowerHeatingValue : OPTIONAL IfcHeatingValueMeasure;\n\tHigherHeatingValue : OPTIONAL IfcHeatingValueMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcFurnishingElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcFurnishingElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcFurnitureType\n\t,IfcSystemFurnitureElementType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcFurnitureStandard\n SUBTYPE OF (IfcControl);\nEND_ENTITY;\n\nENTITY IfcFurnitureType\n SUBTYPE OF (IfcFurnishingElementType);\n\tAssemblyPlace : IfcAssemblyPlaceEnum;\nEND_ENTITY;\n\nENTITY IfcGasTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcGasTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcGeneralMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tMolecularWeight : OPTIONAL IfcMolecularWeightMeasure;\n\tPorosity : OPTIONAL IfcNormalisedRatioMeasure;\n\tMassDensity : OPTIONAL IfcMassDensityMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcGeneralProfileProperties\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralProfileProperties))\n SUBTYPE OF (IfcProfileProperties);\n\tPhysicalWeight : OPTIONAL IfcMassPerLengthMeasure;\n\tPerimeter : OPTIONAL IfcPositiveLengthMeasure;\n\tMinimumPlateThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tMaximumPlateThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tCrossSectionArea : OPTIONAL IfcAreaMeasure;\n WHERE\n\tWR1 : NOT(EXISTS(CrossSectionArea)) OR (CrossSectionArea > 0);\nEND_ENTITY;\n\nENTITY IfcGeometricCurveSet\n SUBTYPE OF (IfcGeometricSet);\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcGeometricSet.Elements |\n            'IFC2X2_FINAL.IFCSURFACE' IN TYPEOF(Temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationContext\n SUPERTYPE OF (ONEOF\n\t(IfcGeometricRepresentationSubContext))\n SUBTYPE OF (IfcRepresentationContext);\n\tCoordinateSpaceDimension : IfcDimensionCount;\n\tPrecision : OPTIONAL REAL;\n\tWorldCoordinateSystem : IfcAxis2Placement;\n\tTrueNorth : OPTIONAL IfcDirection;\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAnnotationFillArea\n\t,IfcBooleanResult\n\t,IfcBoundingBox\n\t,IfcCartesianTransformationOperator\n\t,IfcCompositeCurveSegment\n\t,IfcCurve\n\t,IfcDefinedSymbol\n\t,IfcDirection\n\t,IfcDraughtingCallout\n\t,IfcFaceBasedSurfaceModel\n\t,IfcFillAreaStyleHatching\n\t,IfcFillAreaStyleTileSymbolWithStyle\n\t,IfcFillAreaStyleTiles\n\t,IfcGeometricSet\n\t,IfcHalfSpaceSolid\n\t,IfcLightSource\n\t,IfcOneDirectionRepeatFactor\n\t,IfcPlacement\n\t,IfcPlanarExtent\n\t,IfcPoint\n\t,IfcSectionedSpine\n\t,IfcShellBasedSurfaceModel\n\t,IfcSolidModel\n\t,IfcSurface\n\t,IfcTextLiteral\n\t,IfcVector))\n SUBTYPE OF (IfcRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationSubContext\n SUBTYPE OF (IfcGeometricRepresentationContext);\n\tParentContext : IfcGeometricRepresentationContext;\n\tTargetScale : OPTIONAL IfcPositiveRatioMeasure;\n\tTargetView : IfcGeometricProjectionEnum;\n\tUserDefinedTargetView : OPTIONAL IfcLabel;\n DERIVE\n\tSELF\\IfcGeometricRepresentationContext.WorldCoordinateSystem : IfcAxis2Placement := ParentContext.WorldCoordinateSystem;\n\tSELF\\IfcGeometricRepresentationContext.CoordinateSpaceDimension : IfcDimensionCount := ParentContext.CoordinateSpaceDimension;\n\tSELF\\IfcGeometricRepresentationContext.TrueNorth : IfcDirection := ParentContext.TrueNorth;\n\tSELF\\IfcGeometricRepresentationContext.Precision : REAL := ParentContext.Precision;\n WHERE\n\tWR31 : NOT('IFC2X2_FINAL.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(ParentContext));\n\tWR32 : (TargetView <> IfcGeometricProjectionEnum.USERDEFINED) OR \n             ((TargetView =  IfcGeometricProjectionEnum.USERDEFINED) AND \n              EXISTS(UserDefinedTargetView));\nEND_ENTITY;\n\nENTITY IfcGeometricSet\n SUPERTYPE OF (ONEOF\n\t(IfcGeometricCurveSet))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tElements : SET [1:?] OF IfcGeometricSetSelect;\n DERIVE\n\tDim : IfcDimensionCount := Elements[1].Dim;\n WHERE\n\tWR21 : SIZEOF(QUERY(Temp <* Elements |\n               Temp.Dim <> Elements[1].Dim))\n             = 0;\nEND_ENTITY;\n\nENTITY IfcGrid\n SUBTYPE OF (IfcProduct);\n\tUAxes : LIST [1:?] OF UNIQUE IfcGridAxis;\n\tVAxes : LIST [1:?] OF UNIQUE IfcGridAxis;\n\tWAxes : OPTIONAL LIST [1:?] OF UNIQUE IfcGridAxis;\n INVERSE\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcProduct.ObjectPlacement);\n\tWR2 : NOT(EXISTS(SELF\\IfcProduct.Representation));\nEND_ENTITY;\n\nENTITY IfcGridAxis;\n\tAxisTag : OPTIONAL IfcLabel;\n\tAxisCurve : IfcCurve;\n\tSameSense : IfcBoolean;\n WHERE\n\tWR1 : AxisCurve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcGridPlacement\n SUBTYPE OF (IfcObjectPlacement);\n\tPlacementLocation : IfcVirtualGridIntersection;\n\tPlacementRefDirection : OPTIONAL IfcVirtualGridIntersection;\nEND_ENTITY;\n\nENTITY IfcGroup\n SUPERTYPE OF (ONEOF\n\t(IfcAsset\n\t,IfcCondition\n\t,IfcInventory\n\t,IfcStructuralLoadGroup\n\t,IfcStructuralResultGroup\n\t,IfcSystem\n\t,IfcZone))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tIsGroupedBy : IfcRelAssignsToGroup FOR RelatingGroup;\nEND_ENTITY;\n\nENTITY IfcHalfSpaceSolid\n SUPERTYPE OF (ONEOF\n\t(IfcBoxedHalfSpace\n\t,IfcPolygonalBoundedHalfSpace))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tBaseSurface : IfcSurface;\n\tAgreementFlag : BOOLEAN;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcHeatExchangerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcHeatExchangerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcHumidifierType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcHumidifierTypeEnum;\nEND_ENTITY;\n\nENTITY IfcHygroscopicMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tUpperVaporResistanceFactor : OPTIONAL IfcPositiveRatioMeasure;\n\tLowerVaporResistanceFactor : OPTIONAL IfcPositiveRatioMeasure;\n\tIsothermalMoistureCapacity : OPTIONAL IfcIsothermalMoistureCapacityMeasure;\n\tVaporPermeability : OPTIONAL IfcVaporPermeabilityMeasure;\n\tMoistureDiffusivity : OPTIONAL IfcMoistureDiffusivityMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcIShapeProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcAsymmetricIShapeProfileDef))\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tOverallWidth : IfcPositiveLengthMeasure;\n\tOverallDepth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : FlangeThickness < (OverallDepth / 2);\n\tWR2 : WebThickness < OverallWidth;\n\tWR3 : NOT(EXISTS(FilletRadius)) OR\n            ((FilletRadius <= (OverallWidth - WebThickness)/2) AND \n             (FilletRadius <= (OverallDepth - (2 * FlangeThickness))/2));\nEND_ENTITY;\n\nENTITY IfcImageTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tUrlReference : IfcIdentifier;\nEND_ENTITY;\n\nENTITY IfcInventory\n SUBTYPE OF (IfcGroup);\n\tInventoryType : IfcInventoryTypeEnum;\n\tJurisdiction : IfcActorSelect;\n\tResponsiblePersons : SET [1:?] OF IfcPerson;\n\tLastUpdateDate : IfcCalendarDate;\n\tCurrentValue : OPTIONAL IfcCostValue;\n\tOriginalValue : OPTIONAL IfcCostValue;\n WHERE\n\tWR41 : SIZEOF(QUERY(temp <* SELF\\IfcGroup.IsGroupedBy.RelatedObjects |\n                 NOT( ('IFC2X2_FINAL.IFCSPACE' IN TYPEOF (temp)) OR \n                      ('IFC2X2_FINAL.IFCASSET' IN TYPEOF (temp)) OR\n                      ('IFC2X2_FINAL.IFCFURNISHINGELEMENT' IN TYPEOF (temp))\n                 ))) = 0;\nEND_ENTITY;\n\nENTITY IfcIrregularTimeSeries\n SUBTYPE OF (IfcTimeSeries);\n\tValues : LIST [1:?] OF IfcIrregularTimeSeriesValue;\nEND_ENTITY;\n\nENTITY IfcIrregularTimeSeriesValue;\n\tTimeStamp : IfcDateTimeSelect;\n\tListValues : LIST [1:?] OF IfcValue;\nEND_ENTITY;\n\nENTITY IfcJunctionBoxType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcJunctionBoxTypeEnum;\nEND_ENTITY;\n\nENTITY IfcLShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tLegSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tCentreOfGravityInX : IfcPositiveLengthMeasure;\n\tCentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : Thickness < Depth;\n\tWR2 : NOT(EXISTS(Width)) OR (Thickness < Width);\n\tWR3 : NOT(EXISTS(Width) XOR EXISTS(CentreOfGravityInY));\nEND_ENTITY;\n\nENTITY IfcLaborResource\n SUBTYPE OF (IfcConstructionResource);\n\tSkillSet : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcLampType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcLampTypeEnum;\nEND_ENTITY;\n\nENTITY IfcLibraryInformation;\n\tName : IfcLabel;\n\tVersion : OPTIONAL IfcLabel;\n\tPublisher : OPTIONAL IfcOrganization;\n\tVersionDate : OPTIONAL IfcCalendarDate;\n\tLibraryReference : OPTIONAL SET [1:?] OF IfcLibraryReference;\nEND_ENTITY;\n\nENTITY IfcLibraryReference\n SUBTYPE OF (IfcExternalReference);\n INVERSE\n\tReferenceIntoLibrary : SET [0:1] OF IfcLibraryInformation FOR LibraryReference;\nEND_ENTITY;\n\nENTITY IfcLightDistributionData;\n\tMainPlaneAngle : IfcPlaneAngleMeasure;\n\tSecondaryPlaneAngle : LIST [1:?] OF IfcPlaneAngleMeasure;\n\tLuminousIntensity : LIST [1:?] OF IfcLuminousIntensityDistributionMeasure;\nEND_ENTITY;\n\nENTITY IfcLightFixtureType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcLightFixtureTypeEnum;\nEND_ENTITY;\n\nENTITY IfcLightIntensityDistribution;\n\tLightDistributionCurve : IfcLightDistributionCurveEnum;\n\tDistributionData : LIST [1:?] OF IfcLightDistributionData;\nEND_ENTITY;\n\nENTITY IfcLightSource\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcLightSourceAmbient\n\t,IfcLightSourceDirectional\n\t,IfcLightSourceGoniometric\n\t,IfcLightSourcePositional))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tName : OPTIONAL IfcLabel;\n\tLightColour : IfcColourRgb;\n\tAmbientIntensity : OPTIONAL IfcNormalisedRatioMeasure;\n\tIntensity : OPTIONAL IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcLightSourceAmbient\n SUBTYPE OF (IfcLightSource);\nEND_ENTITY;\n\nENTITY IfcLightSourceDirectional\n SUBTYPE OF (IfcLightSource);\n\tOrientation : IfcDirection;\nEND_ENTITY;\n\nENTITY IfcLightSourceGoniometric\n SUBTYPE OF (IfcLightSource);\n\tPosition : IfcAxis2Placement3D;\n\tColourAppearance : OPTIONAL IfcColourRgb;\n\tColourTemperature : IfcThermodynamicTemperatureMeasure;\n\tLuminousFlux : IfcLuminousFluxMeasure;\n\tLightEmissionSource : IfcLightEmissionSourceEnum;\n\tLightDistributionDataSource : IfcLightDistributionDataSourceSelect;\nEND_ENTITY;\n\nENTITY IfcLightSourcePositional\n SUPERTYPE OF (ONEOF\n\t(IfcLightSourceSpot))\n SUBTYPE OF (IfcLightSource);\n\tPosition : IfcCartesianPoint;\n\tRadius : IfcPositiveLengthMeasure;\n\tConstantAttenuation : IfcReal;\n\tDistanceAttenuation : IfcReal;\n\tQuadricAttenuation : IfcReal;\nEND_ENTITY;\n\nENTITY IfcLightSourceSpot\n SUBTYPE OF (IfcLightSourcePositional);\n\tOrientation : IfcDirection;\n\tConcentrationExponent : OPTIONAL IfcReal;\n\tSpreadAngle : IfcPositivePlaneAngleMeasure;\n\tBeamWidthAngle : IfcPositivePlaneAngleMeasure;\nEND_ENTITY;\n\nENTITY IfcLine\n SUBTYPE OF (IfcCurve);\n\tPnt : IfcCartesianPoint;\n\tDir : IfcVector;\n WHERE\n\tWR1 : Dir.Dim = Pnt.Dim;\nEND_ENTITY;\n\nENTITY IfcLinearDimension\n SUBTYPE OF (IfcDimensionCurveDirectedCallout);\nEND_ENTITY;\n\nENTITY IfcLocalPlacement\n SUBTYPE OF (IfcObjectPlacement);\n\tPlacementRelTo : OPTIONAL IfcObjectPlacement;\n\tRelativePlacement : IfcAxis2Placement;\n WHERE\n\tWR21 : IfcCorrectLocalPlacement(RelativePlacement, PlacementRelTo);\nEND_ENTITY;\n\nENTITY IfcLocalTime;\n\tHourComponent : IfcHourInDay;\n\tMinuteComponent : OPTIONAL IfcMinuteInHour;\n\tSecondComponent : OPTIONAL IfcSecondInMinute;\n\tZone : OPTIONAL IfcCoordinatedUniversalTimeOffset;\n\tDaylightSavingOffset : OPTIONAL IfcDaylightSavingHour;\n WHERE\n\tWR21 : IfcValidTime (SELF);\nEND_ENTITY;\n\nENTITY IfcLoop\n SUPERTYPE OF (ONEOF\n\t(IfcEdgeLoop\n\t,IfcPolyLoop\n\t,IfcVertexLoop))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcManifoldSolidBrep\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcFacetedBrep\n\t,IfcFacetedBrepWithVoids))\n SUBTYPE OF (IfcSolidModel);\n\tOuter : IfcClosedShell;\nEND_ENTITY;\n\nENTITY IfcMappedItem\n SUBTYPE OF (IfcRepresentationItem);\n\tMappingSource : IfcRepresentationMap;\n\tMappingTarget : IfcCartesianTransformationOperator;\nEND_ENTITY;\n\nENTITY IfcMaterial;\n\tName : IfcLabel;\n INVERSE\n\tClassifiedAs : SET [0:1] OF IfcMaterialClassificationRelationship FOR ClassifiedMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialClassificationRelationship;\n\tMaterialClassifications : SET [1:?] OF IfcClassificationNotationSelect;\n\tClassifiedMaterial : IfcMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialLayer;\n\tMaterial : OPTIONAL IfcMaterial;\n\tLayerThickness : IfcPositiveLengthMeasure;\n\tIsVentilated : OPTIONAL IfcBoolean;\n INVERSE\n\tToMaterialLayerSet : IfcMaterialLayerSet FOR MaterialLayers;\nEND_ENTITY;\n\nENTITY IfcMaterialLayerSet;\n\tMaterialLayers : LIST [1:?] OF IfcMaterialLayer;\n\tLayerSetName : OPTIONAL IfcLabel;\n DERIVE\n\tTotalThickness : IfcLengthMeasure := IfcMlsTotalThickness(SELF);\nEND_ENTITY;\n\nENTITY IfcMaterialLayerSetUsage;\n\tForLayerSet : IfcMaterialLayerSet;\n\tLayerSetDirection : IfcLayerSetDirectionEnum;\n\tDirectionSense : IfcDirectionSenseEnum;\n\tOffsetFromReferenceLine : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMaterialList;\n\tMaterials : LIST [1:?] OF IfcMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialProperties\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcExtendedMaterialProperties\n\t,IfcFuelProperties\n\t,IfcGeneralMaterialProperties\n\t,IfcHygroscopicMaterialProperties\n\t,IfcMechanicalMaterialProperties\n\t,IfcOpticalMaterialProperties\n\t,IfcProductsOfCombustionProperties\n\t,IfcThermalMaterialProperties\n\t,IfcWaterProperties));\n\tMaterial : IfcMaterial;\nEND_ENTITY;\n\nENTITY IfcMeasureWithUnit;\n\tValueComponent : IfcValue;\n\tUnitComponent : IfcUnit;\nEND_ENTITY;\n\nENTITY IfcMechanicalConcreteMaterialProperties\n SUBTYPE OF (IfcMechanicalMaterialProperties);\n\tCompressiveStrength : OPTIONAL IfcPressureMeasure;\n\tMaxAggregateSize : OPTIONAL IfcPositiveLengthMeasure;\n\tAdmixturesDescription : OPTIONAL IfcText;\n\tWorkability : OPTIONAL IfcText;\n\tProtectivePoreRatio : OPTIONAL IfcNormalisedRatioMeasure;\n\tWaterImpermeability : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcMechanicalFastener\n SUBTYPE OF (IfcFastener);\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tNominalLength : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMechanicalFastenerType\n SUBTYPE OF (IfcFastenerType);\nEND_ENTITY;\n\nENTITY IfcMechanicalMaterialProperties\n SUPERTYPE OF (ONEOF\n\t(IfcMechanicalConcreteMaterialProperties\n\t,IfcMechanicalSteelMaterialProperties))\n SUBTYPE OF (IfcMaterialProperties);\n\tDynamicViscosity : OPTIONAL IfcDynamicViscosityMeasure;\n\tYoungModulus : OPTIONAL IfcModulusOfElasticityMeasure;\n\tShearModulus : OPTIONAL IfcModulusOfElasticityMeasure;\n\tPoissonRatio : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalExpansionCoefficient : OPTIONAL IfcThermalExpansionCoefficientMeasure;\n UNIQUE\n\tUR11 : Material;\n WHERE\n\tWR21 : NOT(EXISTS(YoungModulus)) OR (YoungModulus >= 0.0);\n\tWR22 : NOT(EXISTS(ShearModulus)) OR (ShearModulus >= 0.0);\nEND_ENTITY;\n\nENTITY IfcMechanicalSteelMaterialProperties\n SUBTYPE OF (IfcMechanicalMaterialProperties);\n\tYieldStress : OPTIONAL IfcPressureMeasure;\n\tUltimateStress : OPTIONAL IfcPressureMeasure;\n\tUltimateStrain : OPTIONAL IfcPositiveRatioMeasure;\n\tHardeningModule : OPTIONAL IfcModulusOfElasticityMeasure;\n\tProportionalStress : OPTIONAL IfcPressureMeasure;\n\tPlasticStrain : OPTIONAL IfcPositiveRatioMeasure;\n\tRelaxations : OPTIONAL SET [1:?] OF IfcRelaxation;\n WHERE\n\tWR31 : NOT(EXISTS(YieldStress)) OR (YieldStress >= 0);\n\tWR32 : NOT(EXISTS(UltimateStress)) OR (UltimateStress >= 0);\n\tWR33 : NOT(EXISTS(HardeningModule)) OR (HardeningModule >= 0);\n\tWR34 : NOT(EXISTS(ProportionalStress)) OR (ProportionalStress >= 0);\nEND_ENTITY;\n\nENTITY IfcMember\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcMemberType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcMemberTypeEnum;\nEND_ENTITY;\n\nENTITY IfcMetric\n SUBTYPE OF (IfcConstraint);\n\tBenchmark : IfcBenchmarkEnum;\n\tValueSource : OPTIONAL IfcLabel;\n\tDataValue : IfcMetricValueSelect;\nEND_ENTITY;\n\nENTITY IfcMonetaryUnit;\n\tCurrency : IfcCurrencyEnum;\nEND_ENTITY;\n\nENTITY IfcMotorConnectionType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcMotorConnectionTypeEnum;\nEND_ENTITY;\n\nENTITY IfcMove\n SUBTYPE OF (IfcTask);\n\tMoveFrom : IfcSpatialStructureElement;\n\tMoveTo : IfcSpatialStructureElement;\n\tPunchList : OPTIONAL LIST [1:?] OF UNIQUE IfcText;\n WHERE\n\tWR1 : SIZEOF(SELF\\IfcProcess.OperatesOn) >= 1;\n\tWR2 : SIZEOF(QUERY(temp <* OperatesOn |\n              SIZEOF(QUERY(temp2 <* temp.RelatedObjects |\n                ('IFC2X2_FINAL.IFCACTOR' IN TYPEOF (temp2)) OR\n                ('IFC2X2_FINAL.IFCEQUIPMENTELEMENT' IN TYPEOF (temp2)) OR\n                ('IFC2X2_FINAL.IFCFURNISHINGELEMENT' IN TYPEOF (temp2)) )) >=1\n              )) >= 1;\n\tWR3 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcNamedUnit\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcContextDependentUnit\n\t,IfcConversionBasedUnit\n\t,IfcSIUnit));\n\tDimensions : IfcDimensionalExponents;\n\tUnitType : IfcUnitEnum;\n WHERE\n\tWR1 : IfcCorrectDimensions (SELF.UnitType, SELF.Dimensions);\nEND_ENTITY;\n\nENTITY IfcObject\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcActor\n\t,IfcControl\n\t,IfcGroup\n\t,IfcProcess\n\t,IfcProduct\n\t,IfcProject\n\t,IfcResource))\n SUBTYPE OF (IfcRoot);\n\tObjectType : OPTIONAL IfcLabel;\n INVERSE\n\tIsDefinedBy : SET [0:?] OF IfcRelDefines FOR RelatedObjects;\n\tHasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects;\n\tHasAssignments : SET [0:?] OF IfcRelAssigns FOR RelatedObjects;\n\tDecomposes : SET [0:1] OF IfcRelDecomposes FOR RelatedObjects;\n\tIsDecomposedBy : SET [0:?] OF IfcRelDecomposes FOR RelatingObject;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* IsDefinedBy | 'IFC2X2_FINAL.IFCRELDEFINESBYTYPE' IN TYPEOF(temp))) <= 1;\nEND_ENTITY;\n\nENTITY IfcObjectPlacement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcGridPlacement\n\t,IfcLocalPlacement));\n INVERSE\n\tReferencedByPlacements : SET [0:?] OF IfcLocalPlacement FOR PlacementRelTo;\nEND_ENTITY;\n\nENTITY IfcObjective\n SUBTYPE OF (IfcConstraint);\n\tBenchmarkValues : OPTIONAL IfcMetric;\n\tResultValues : OPTIONAL IfcMetric;\n\tObjectiveQualifier : IfcObjectiveEnum;\n\tUserDefinedQualifier : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : (ObjectiveQualifier <> IfcObjectiveEnum.USERDEFINED) OR\n             ((ObjectiveQualifier = IfcObjectiveEnum.USERDEFINED) AND EXISTS(SELF\\IfcObjective.UserDefinedQualifier));\nEND_ENTITY;\n\nENTITY IfcOccupant\n SUBTYPE OF (IfcActor);\n\tPredefinedType : IfcOccupantTypeEnum;\n WHERE\n\tWR31 : NOT(PredefinedType = IfcOccupantTypeEnum.USERDEFINED) \n           OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcOffsetCurve2D\n SUBTYPE OF (IfcCurve);\n\tBasisCurve : IfcCurve;\n\tDistance : IfcLengthMeasure;\n\tSelfIntersect : LOGICAL;\n WHERE\n\tWR1 : BasisCurve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcOffsetCurve3D\n SUBTYPE OF (IfcCurve);\n\tBasisCurve : IfcCurve;\n\tDistance : IfcLengthMeasure;\n\tSelfIntersect : LOGICAL;\n\tRefDirection : IfcDirection;\n WHERE\n\tWR1 : BasisCurve.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcOneDirectionRepeatFactor\n SUPERTYPE OF (ONEOF\n\t(IfcTwoDirectionRepeatFactor))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tRepeatFactor : IfcVector;\nEND_ENTITY;\n\nENTITY IfcOpenShell\n SUBTYPE OF (IfcConnectedFaceSet);\nEND_ENTITY;\n\nENTITY IfcOpeningElement\n SUBTYPE OF (IfcFeatureElementSubtraction);\n INVERSE\n\tHasFillings : SET [0:?] OF IfcRelFillsElement FOR RelatingOpeningElement;\nEND_ENTITY;\n\nENTITY IfcOpticalMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tVisibleTransmittance : OPTIONAL IfcPositiveRatioMeasure;\n\tSolarTransmittance : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalIrTransmittance : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalIrEmissivityBack : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalIrEmissivityFront : OPTIONAL IfcPositiveRatioMeasure;\n\tVisibleReflectanceBack : OPTIONAL IfcPositiveRatioMeasure;\n\tVisibleReflectanceFront : OPTIONAL IfcPositiveRatioMeasure;\n\tSolarReflectanceFront : OPTIONAL IfcPositiveRatioMeasure;\n\tSolarReflectanceBack : OPTIONAL IfcPositiveRatioMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcOrderAction\n SUBTYPE OF (IfcTask);\n\tActionID : IfcIdentifier;\n UNIQUE\n\tUR2 : ActionID;\nEND_ENTITY;\n\nENTITY IfcOrganization;\n\tId : OPTIONAL IfcIdentifier;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\n\tAddresses : OPTIONAL LIST [1:?] OF IfcAddress;\n INVERSE\n\tIsRelatedBy : SET [0:?] OF IfcOrganizationRelationship FOR RelatedOrganizations;\n\tRelates : SET [0:?] OF IfcOrganizationRelationship FOR RelatingOrganization;\n\tEngages : SET [0:?] OF IfcPersonAndOrganization FOR TheOrganization;\nEND_ENTITY;\n\nENTITY IfcOrganizationRelationship;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRelatingOrganization : IfcOrganization;\n\tRelatedOrganizations : SET [1:?] OF IfcOrganization;\nEND_ENTITY;\n\nENTITY IfcOrientedEdge\n SUBTYPE OF (IfcEdge);\n\tEdgeElement : IfcEdge;\n\tOrientation : BOOLEAN;\n DERIVE\n\tSELF\\IfcEdge.EdgeStart : IfcVertex := IfcBooleanChoose \n                               (Orientation, EdgeElement.EdgeStart, EdgeElement.EdgeEnd);\n\tSELF\\IfcEdge.EdgeEnd : IfcVertex := IfcBooleanChoose \n                               (Orientation, EdgeElement.EdgeEnd, EdgeElement.EdgeStart);\n WHERE\n\tWR1 : NOT('IFC2X2_FINAL.IFCORIENTEDEDGE' IN TYPEOF(EdgeElement));\nEND_ENTITY;\n\nENTITY IfcOutletType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcOutletTypeEnum;\nEND_ENTITY;\n\nENTITY IfcOwnerHistory;\n\tOwningUser : IfcPersonAndOrganization;\n\tOwningApplication : IfcApplication;\n\tState : OPTIONAL IfcStateEnum;\n\tChangeAction : IfcChangeActionEnum;\n\tLastModifiedDate : OPTIONAL IfcTimeStamp;\n\tLastModifyingUser : OPTIONAL IfcPersonAndOrganization;\n\tLastModifyingApplication : OPTIONAL IfcApplication;\n\tCreationDate : IfcTimeStamp;\nEND_ENTITY;\n\nENTITY IfcParameterizedProfileDef\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCShapeProfileDef\n\t,IfcCircleProfileDef\n\t,IfcCraneRailAShapeProfileDef\n\t,IfcCraneRailFShapeProfileDef\n\t,IfcEllipseProfileDef\n\t,IfcIShapeProfileDef\n\t,IfcLShapeProfileDef\n\t,IfcRectangleProfileDef\n\t,IfcTShapeProfileDef\n\t,IfcTrapeziumProfileDef\n\t,IfcUShapeProfileDef\n\t,IfcZShapeProfileDef))\n SUBTYPE OF (IfcProfileDef);\n\tPosition : IfcAxis2Placement2D;\nEND_ENTITY;\n\nENTITY IfcPath\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tEdgeList : LIST [1:?] OF UNIQUE IfcOrientedEdge;\n WHERE\n\tWR1 : IfcPathHeadToTail(SELF);\nEND_ENTITY;\n\nENTITY IfcPerformanceHistory\n SUBTYPE OF (IfcControl);\n\tLifeCyclePhase : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcPermeableCoveringProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tOperationType : IfcPermeableCoveringOperationEnum;\n\tPanelPosition : IfcWindowPanelPositionEnum;\n\tFrameDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tFrameThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\nEND_ENTITY;\n\nENTITY IfcPermit\n SUBTYPE OF (IfcControl);\n\tPermitID : IfcIdentifier;\n UNIQUE\n\tUR2 : PermitID;\nEND_ENTITY;\n\nENTITY IfcPerson;\n\tId : OPTIONAL IfcIdentifier;\n\tFamilyName : OPTIONAL IfcLabel;\n\tGivenName : OPTIONAL IfcLabel;\n\tMiddleNames : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPrefixTitles : OPTIONAL LIST [1:?] OF IfcLabel;\n\tSuffixTitles : OPTIONAL LIST [1:?] OF IfcLabel;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\n\tAddresses : OPTIONAL LIST [1:?] OF IfcAddress;\n INVERSE\n\tEngagedIn : SET [0:?] OF IfcPersonAndOrganization FOR ThePerson;\n WHERE\n\tWR1 : EXISTS(FamilyName) OR \n            EXISTS(GivenName);\nEND_ENTITY;\n\nENTITY IfcPersonAndOrganization;\n\tThePerson : IfcPerson;\n\tTheOrganization : IfcOrganization;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\nEND_ENTITY;\n\nENTITY IfcPhysicalComplexQuantity\n SUBTYPE OF (IfcPhysicalQuantity);\n\tHasQuantities : SET [1:?] OF IfcPhysicalQuantity;\n\tDiscrimination : IfcLabel;\n\tQuality : OPTIONAL IfcLabel;\n\tUsage : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* HasQuantities | SELF :=: temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcPhysicalQuantity\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPhysicalComplexQuantity\n\t,IfcPhysicalSimpleQuantity));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tPartOfComplex : SET [0:1] OF IfcPhysicalComplexQuantity FOR HasQuantities;\nEND_ENTITY;\n\nENTITY IfcPhysicalSimpleQuantity\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcQuantityArea\n\t,IfcQuantityCount\n\t,IfcQuantityLength\n\t,IfcQuantityTime\n\t,IfcQuantityVolume\n\t,IfcQuantityWeight))\n SUBTYPE OF (IfcPhysicalQuantity);\n\tUnit : OPTIONAL IfcNamedUnit;\nEND_ENTITY;\n\nENTITY IfcPile\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : IfcPileTypeEnum;\n\tConstructionType : OPTIONAL IfcPileConstructionEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcPipeFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcPipeFittingTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcPipeFittingTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcPipeFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcPipeSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcPipeSegmentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcPixelTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tWidth : IfcInteger;\n\tHeight : IfcInteger;\n\tColourComponents : IfcInteger;\n\tPixel : LIST [1:?] OF STRING(10);\n WHERE\n\tWR21 : Width >= 1;\n\tWR22 : Height >= 1;\n\tWR23 : {1 <= ColourComponents <= 4};\n\tWR24 : SIZEOF(Pixel) = (Width * Height);\nEND_ENTITY;\n\nENTITY IfcPlacement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAxis1Placement\n\t,IfcAxis2Placement2D\n\t,IfcAxis2Placement3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tLocation : IfcCartesianPoint;\n DERIVE\n\tDim : IfcDimensionCount := Location.Dim;\nEND_ENTITY;\n\nENTITY IfcPlanarBox\n SUBTYPE OF (IfcPlanarExtent);\n\tPlacement : IfcAxis2Placement;\nEND_ENTITY;\n\nENTITY IfcPlanarExtent\n SUPERTYPE OF (ONEOF\n\t(IfcPlanarBox))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSizeInX : IfcLengthMeasure;\n\tSizeInY : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcPlane\n SUBTYPE OF (IfcElementarySurface);\nEND_ENTITY;\n\nENTITY IfcPlate\n SUBTYPE OF (IfcBuildingElementComponent);\nEND_ENTITY;\n\nENTITY IfcPlateType\n SUBTYPE OF (IfcBuildingElementComponentType);\n\tPredefinedType : IfcPlateTypeEnum;\n WHERE\n\tWR1 : SIZEOF (QUERY(temp <* SELF\\IfcObject.HasAssociations | 'IFC2X2_FINAL.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp) )) = 1;\nEND_ENTITY;\n\nENTITY IfcPoint\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCartesianPoint\n\t,IfcPointOnCurve\n\t,IfcPointOnSurface))\n SUBTYPE OF (IfcGeometricRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcPointOnCurve\n SUBTYPE OF (IfcPoint);\n\tBasisCurve : IfcCurve;\n\tPointParameter : IfcParameterValue;\n DERIVE\n\tDim : IfcDimensionCount := BasisCurve.Dim;\nEND_ENTITY;\n\nENTITY IfcPointOnSurface\n SUBTYPE OF (IfcPoint);\n\tBasisSurface : IfcSurface;\n\tPointParameterU : IfcParameterValue;\n\tPointParameterV : IfcParameterValue;\n DERIVE\n\tDim : IfcDimensionCount := BasisSurface.Dim;\nEND_ENTITY;\n\nENTITY IfcPolyLoop\n SUBTYPE OF (IfcLoop);\n\tPolygon : LIST [3:?] OF UNIQUE IfcCartesianPoint;\n WHERE\n\tWR21 : SIZEOF(QUERY(Temp <* Polygon | Temp.Dim <> Polygon[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcPolygonalBoundedHalfSpace\n SUBTYPE OF (IfcHalfSpaceSolid);\n\tPosition : IfcAxis2Placement3D;\n\tPolygonalBoundary : IfcPolyline;\n WHERE\n\tWR41 : PolygonalBoundary.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcPolyline\n SUBTYPE OF (IfcBoundedCurve);\n\tPoints : LIST [2:?] OF IfcCartesianPoint;\n WHERE\n\tWR41 : SIZEOF(QUERY(Temp <* Points | Temp.Dim <> Points[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcPort\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDistributionPort))\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tContainedIn : IfcRelConnectsPortToElement FOR RelatingPort;\n\tConnectedFrom : SET [0:1] OF IfcRelConnectsPorts FOR RelatedPort;\n\tConnectedTo : SET [0:1] OF IfcRelConnectsPorts FOR RelatingPort;\nEND_ENTITY;\n\nENTITY IfcPostalAddress\n SUBTYPE OF (IfcAddress);\n\tInternalLocation : OPTIONAL IfcLabel;\n\tAddressLines : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPostalBox : OPTIONAL IfcLabel;\n\tTown : OPTIONAL IfcLabel;\n\tRegion : OPTIONAL IfcLabel;\n\tPostalCode : OPTIONAL IfcLabel;\n\tCountry : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS (InternalLocation) OR \n            EXISTS (AddressLines) OR\n            EXISTS (PostalBox) OR\n            EXISTS (PostalCode) OR\n            EXISTS (Town) OR \n            EXISTS (Region) OR  \n            EXISTS (Country);\nEND_ENTITY;\n\nENTITY IfcPreDefinedColour\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDraughtingPreDefinedColour))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPreDefinedCurveFont\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDraughtingPreDefinedCurveFont))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPreDefinedDimensionSymbol\n SUBTYPE OF (IfcPreDefinedSymbol);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['arc length','conical taper','counterbore',\n                  'countersink','depth','diameter','plus minus','radius',\n                  'slope','spherical diameter','spherical radius','square'];\nEND_ENTITY;\n\nENTITY IfcPreDefinedItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPreDefinedColour\n\t,IfcPreDefinedCurveFont\n\t,IfcPreDefinedSymbol\n\t,IfcPreDefinedTextFont));\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcPreDefinedPointMarkerSymbol\n SUBTYPE OF (IfcPreDefinedSymbol);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['asterisk','circle','dot','plus','square','triangle','x'];\nEND_ENTITY;\n\nENTITY IfcPreDefinedSymbol\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPreDefinedDimensionSymbol\n\t,IfcPreDefinedPointMarkerSymbol\n\t,IfcPreDefinedTerminatorSymbol))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPreDefinedTerminatorSymbol\n SUBTYPE OF (IfcPreDefinedSymbol);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['blanked arrow','blanked box',\n                 'blanked dot','dimension origin','filled arrow','filled box',\n                 'filled dot','integral symbol','open arrow','slash','unfilled arrow'];\nEND_ENTITY;\n\nENTITY IfcPreDefinedTextFont\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDraughtingPreDefinedTextFont))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPresentationLayerAssignment\n SUPERTYPE OF (ONEOF\n\t(IfcPresentationLayerAssignmentWithStyle));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tAssignedItems : SET [1:?] OF IfcLayeredItem;\nEND_ENTITY;\n\nENTITY IfcPresentationLayerAssignmentWithStyle\n SUBTYPE OF (IfcPresentationLayerAssignment);\n\tLayerNumber : OPTIONAL INTEGER;\n\tLayerOn : LOGICAL;\n\tLayerOnInAllViews : LOGICAL;\n\tLayerFrozen : LOGICAL;\n\tLayerFrozenInAllViews : LOGICAL;\n\tLayerBlocked : LOGICAL;\n\tLayerColour : OPTIONAL IfcColour;\n\tLayerCurveWidth : OPTIONAL IfcSizeSelect;\n\tLayerCurveFont : OPTIONAL IfcCurveFontOrScaledCurveFontSelect;\nEND_ENTITY;\n\nENTITY IfcPresentationStyleAssignment;\n\tStyles : SET [1:?] OF IfcPresentationStyleSelect;\nEND_ENTITY;\n\nENTITY IfcProcedure\n SUBTYPE OF (IfcProcess);\n\tProcedureID : IfcIdentifier;\n\tProcedureType : IfcProcedureTypeEnum;\n\tUserDefinedProcedureType : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* SELF\\IfcObject.Decomposes | NOT('IFC2X2_FINAL.IFCRELNESTS' IN TYPEOF(temp)))) = 0;\n\tWR2 : SIZEOF(QUERY(temp <* SELF\\IfcObject.IsDecomposedBy | NOT('IFC2X2_FINAL.IFCRELNESTS' IN TYPEOF(temp)))) = 0;\n\tWR3 : EXISTS(SELF\\IfcRoot.Name);\n\tWR4 : (ProcedureType <> IfcProcedureTypeEnum.USERDEFINED) OR\n            ((ProcedureType = IfcProcedureTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcProcedure.UserDefinedProcedureType));\nEND_ENTITY;\n\nENTITY IfcProcess\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcProcedure\n\t,IfcTask))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tOperatesOn : SET [0:?] OF IfcRelAssignsToProcess FOR RelatingProcess;\n\tIsSuccessorFrom : SET [0:?] OF IfcRelSequence FOR RelatedProcess;\n\tIsPredecessorTo : SET [0:?] OF IfcRelSequence FOR RelatingProcess;\nEND_ENTITY;\n\nENTITY IfcProduct\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAnnotation\n\t,IfcElement\n\t,IfcGrid\n\t,IfcPort\n\t,IfcProxy\n\t,IfcSpatialStructureElement\n\t,IfcStructuralActivity\n\t,IfcStructuralItem))\n SUBTYPE OF (IfcObject);\n\tObjectPlacement : OPTIONAL IfcObjectPlacement;\n\tRepresentation : OPTIONAL IfcProductRepresentation;\n INVERSE\n\tReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct;\n WHERE\n\tWR1 : (EXISTS(Representation) AND EXISTS(ObjectPlacement))\n            OR (EXISTS(Representation) AND \n               (NOT('IFC2X2_FINAL.IFCPRODUCTDEFINITIONSHAPE' IN TYPEOF(Representation))))\n            OR (NOT(EXISTS(Representation)));\nEND_ENTITY;\n\nENTITY IfcProductDefinitionShape\n SUBTYPE OF (IfcProductRepresentation);\n INVERSE\n\tHasShapeAspects : SET [0:?] OF IfcShapeAspect FOR PartOfProductDefinitionShape;\nEND_ENTITY;\n\nENTITY IfcProductRepresentation\n SUPERTYPE OF (ONEOF\n\t(IfcProductDefinitionShape));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRepresentations : LIST [1:?] OF IfcRepresentation;\nEND_ENTITY;\n\nENTITY IfcProductsOfCombustionProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tSpecificHeatCapacity : OPTIONAL IfcSpecificHeatCapacityMeasure;\n\tN20Content : OPTIONAL IfcPositiveRatioMeasure;\n\tCOContent : OPTIONAL IfcPositiveRatioMeasure;\n\tCO2Content : OPTIONAL IfcPositiveRatioMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcProfileDef\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcArbitraryClosedProfileDef\n\t,IfcArbitraryOpenProfileDef\n\t,IfcCompositeProfileDef\n\t,IfcDerivedProfileDef\n\t,IfcParameterizedProfileDef));\n\tProfileType : IfcProfileTypeEnum;\n\tProfileName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcProfileProperties\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcGeneralProfileProperties\n\t,IfcRibPlateProfileProperties));\n\tProfileName : OPTIONAL IfcLabel;\n\tProfileDefinition : OPTIONAL IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcProject\n SUBTYPE OF (IfcObject);\n\tLongName : OPTIONAL IfcLabel;\n\tPhase : OPTIONAL IfcLabel;\n\tRepresentationContexts : SET [1:?] OF IfcRepresentationContext;\n\tUnitsInContext : IfcUnitAssignment;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcProjectOrder\n SUBTYPE OF (IfcControl);\n\tID : IfcIdentifier;\n\tPredefinedType : IfcProjectOrderTypeEnum;\n\tStatus : OPTIONAL IfcLabel;\n UNIQUE\n\tUR2 : ID;\nEND_ENTITY;\n\nENTITY IfcProjectOrderRecord\n SUBTYPE OF (IfcControl);\n\tRecords : LIST [1:?] OF UNIQUE IfcRelAssignsToProjectOrder;\n\tPredefinedType : IfcProjectOrderRecordTypeEnum;\nEND_ENTITY;\n\nENTITY IfcProjectionCurve\n SUBTYPE OF (IfcAnnotationCurveOccurrence);\nEND_ENTITY;\n\nENTITY IfcProjectionElement\n SUBTYPE OF (IfcFeatureElementAddition);\nEND_ENTITY;\n\nENTITY IfcProperty\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcComplexProperty\n\t,IfcSimpleProperty));\n\tName : IfcIdentifier;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tPropertyForDependance : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependingProperty;\n\tPropertyDependsOn : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependantProperty;\n\tPartOfComplex : SET [0:1] OF IfcComplexProperty FOR HasProperties;\nEND_ENTITY;\n\nENTITY IfcPropertyBoundedValue\n SUBTYPE OF (IfcSimpleProperty);\n\tUpperBoundValue : OPTIONAL IfcValue;\n\tLowerBoundValue : OPTIONAL IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n WHERE\n\tWR21 : NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(LowerBoundValue)) OR\n             (TYPEOF(UpperBoundValue) = TYPEOF(LowerBoundValue));\n\tWR22 : EXISTS(UpperBoundValue) OR EXISTS(LowerBoundValue);\nEND_ENTITY;\n\nENTITY IfcPropertyConstraintRelationship;\n\tRelatingConstraint : IfcConstraint;\n\tRelatedProperties : SET [1:?] OF IfcProperty;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcPropertyDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPropertySetDefinition\n\t,IfcTypeObject))\n SUBTYPE OF (IfcRoot);\n INVERSE\n\tHasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects;\nEND_ENTITY;\n\nENTITY IfcPropertyDependencyRelationship;\n\tDependingProperty : IfcProperty;\n\tDependantProperty : IfcProperty;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tExpression : OPTIONAL IfcText;\n WHERE\n\tWR1 : DependingProperty :<>: DependantProperty;\nEND_ENTITY;\n\nENTITY IfcPropertyEnumeratedValue\n SUBTYPE OF (IfcSimpleProperty);\n\tEnumerationValues : LIST [1:?] OF IfcValue;\n\tEnumerationReference : OPTIONAL IfcPropertyEnumeration;\n WHERE\n\tWR1 : NOT(EXISTS(EnumerationReference)) OR \n               (SIZEOF(QUERY(temp <* EnumerationValues |\n                temp IN EnumerationReference.EnumerationValues))\n                = SIZEOF(EnumerationValues));\nEND_ENTITY;\n\nENTITY IfcPropertyEnumeration;\n\tName : IfcLabel;\n\tEnumerationValues : LIST [1:?] OF UNIQUE IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n UNIQUE\n\tUR1 : Name;\nEND_ENTITY;\n\nENTITY IfcPropertyListValue\n SUBTYPE OF (IfcSimpleProperty);\n\tListValues : LIST [1:?] OF IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n WHERE\n\tWR31 : SIZEOF(QUERY(temp <* SELF.ListValues | \n               NOT(TYPEOF(SELF.ListValues[1]) = TYPEOF(temp))\n               )) = 0;\nEND_ENTITY;\n\nENTITY IfcPropertyReferenceValue\n SUBTYPE OF (IfcSimpleProperty);\n\tUsageName : OPTIONAL IfcLabel;\n\tPropertyReference : IfcObjectReferenceSelect;\nEND_ENTITY;\n\nENTITY IfcPropertySet\n SUBTYPE OF (IfcPropertySetDefinition);\n\tHasProperties : SET [1:?] OF IfcProperty;\n WHERE\n\tWR31 : EXISTS(SELF\\IfcRoot.Name);\n\tWR32 : IfcUniquePropertyName(HasProperties);\nEND_ENTITY;\n\nENTITY IfcPropertySetDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDoorLiningProperties\n\t,IfcDoorPanelProperties\n\t,IfcElementQuantity\n\t,IfcEnergyProperties\n\t,IfcFluidFlowProperties\n\t,IfcPermeableCoveringProperties\n\t,IfcPropertySet\n\t,IfcReinforcementDefinitionProperties\n\t,IfcServiceLifeFactor\n\t,IfcSoundProperties\n\t,IfcSoundValue\n\t,IfcSpaceThermalLoadProperties\n\t,IfcWindowLiningProperties\n\t,IfcWindowPanelProperties))\n SUBTYPE OF (IfcPropertyDefinition);\n INVERSE\n\tPropertyDefinitionOf : SET [0:1] OF IfcRelDefinesByProperties FOR RelatingPropertyDefinition;\n\tDefinesType : SET [0:1] OF IfcTypeObject FOR HasPropertySets;\nEND_ENTITY;\n\nENTITY IfcPropertySingleValue\n SUBTYPE OF (IfcSimpleProperty);\n\tNominalValue : IfcValue;\n\tUnit : OPTIONAL IfcUnit;\nEND_ENTITY;\n\nENTITY IfcPropertyTableValue\n SUBTYPE OF (IfcSimpleProperty);\n\tDefiningValues : LIST [1:?] OF UNIQUE IfcValue;\n\tDefinedValues : LIST [1:?] OF IfcValue;\n\tExpression : OPTIONAL IfcText;\n\tDefiningUnit : OPTIONAL IfcUnit;\n\tDefinedUnit : OPTIONAL IfcUnit;\n WHERE\n\tWR1 : SIZEOF(DefiningValues) = SIZEOF(DefinedValues);\n\tWR2 : SIZEOF(QUERY(temp <* SELF.DefiningValues | TYPEOF(temp) <> TYPEOF(SELF.DefiningValues[1])))=0;\n\tWR3 : SIZEOF(QUERY(temp <* SELF.DefinedValues | TYPEOF(temp) <> TYPEOF(SELF.DefinedValues[1])))=0;\nEND_ENTITY;\n\nENTITY IfcProtectiveDeviceType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcProtectiveDeviceTypeEnum;\nEND_ENTITY;\n\nENTITY IfcProxy\n SUBTYPE OF (IfcProduct);\n\tProxyType : IfcObjectTypeEnum;\n\tTag : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcPumpType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcPumpTypeEnum;\nEND_ENTITY;\n\nENTITY IfcQuantityArea\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tAreaValue : IfcAreaMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.AREAUNIT);\n\tWR22 : AreaValue >= 0;\nEND_ENTITY;\n\nENTITY IfcQuantityCount\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tCountValue : IfcCountMeasure;\n WHERE\n\tWR1 : CountValue >= 0;\nEND_ENTITY;\n\nENTITY IfcQuantityLength\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tLengthValue : IfcLengthMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.LENGTHUNIT);\n\tWR22 : LengthValue >= 0;\nEND_ENTITY;\n\nENTITY IfcQuantityTime\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tTimeValue : IfcTimeMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.TIMEUNIT);\n\tWR22 : TimeValue >= 0;\nEND_ENTITY;\n\nENTITY IfcQuantityVolume\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tVolumeValue : IfcVolumeMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.VOLUMEUNIT);\n\tWR22 : VolumeValue >= 0;\nEND_ENTITY;\n\nENTITY IfcQuantityWeight\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tWeightValue : IfcMassMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.MASSUNIT);\n\tWR22 : WeightValue >= 0;\nEND_ENTITY;\n\nENTITY IfcRadiusDimension\n SUBTYPE OF (IfcDimensionCurveDirectedCallout);\nEND_ENTITY;\n\nENTITY IfcRailing\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcRailingTypeEnum;\nEND_ENTITY;\n\nENTITY IfcRailingType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcRailingTypeEnum;\nEND_ENTITY;\n\nENTITY IfcRamp\n SUBTYPE OF (IfcBuildingElement);\n\tShapeType : IfcRampTypeEnum;\n WHERE\n\tWR1 : (HIINDEX(SELF\\IfcObject.IsDecomposedBy) = 0) OR ((HIINDEX(SELF\\IfcObject.IsDecomposedBy) = 1) AND (NOT(EXISTS(SELF\\IfcProduct.Representation))));\nEND_ENTITY;\n\nENTITY IfcRampFlight\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcRampFlightType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcRampFlightTypeEnum;\nEND_ENTITY;\n\nENTITY IfcRationalBezierCurve\n SUBTYPE OF (IfcBezierCurve);\n\tWeightsData : LIST [2:?] OF REAL;\n DERIVE\n\tWeights : ARRAY [0:255] OF REAL := IfcListToArray(WeightsData,0,SELF\\IfcBSplineCurve.UpperIndexOnControlPoints);\n WHERE\n\tWR1 : SIZEOF(WeightsData) = SIZEOF(SELF\\IfcBSplineCurve.ControlPointsList);\n\tWR2 : IfcCurveWeightsPositive(SELF);\nEND_ENTITY;\n\nENTITY IfcRectangleHollowProfileDef\n SUBTYPE OF (IfcRectangleProfileDef);\n\tWallThickness : IfcPositiveLengthMeasure;\n\tInnerFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tOuterFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : (WallThickness < (SELF\\IfcRectangleProfileDef.XDim / 2)) AND \n            (WallThickness < (SELF\\IfcRectangleProfileDef.YDim / 2));\n\tWR2 : NOT(EXISTS(OuterFilletRadius)) OR \n            ((OuterFilletRadius <= (SELF\\IfcRectangleProfileDef.XDim / 2)) AND \n             (OuterFilletRadius <= (SELF\\IfcRectangleProfileDef.YDim / 2)));\n\tWR3 : NOT(EXISTS(InnerFilletRadius)) OR \n            ((InnerFilletRadius <= (SELF\\IfcRectangleProfileDef.XDim / 2 - WallThickness)) AND \n             (InnerFilletRadius <= (SELF\\IfcRectangleProfileDef.YDim / 2 - WallThickness)));\nEND_ENTITY;\n\nENTITY IfcRectangleProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcRectangleHollowProfileDef\n\t,IfcRoundedRectangleProfileDef))\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRectangularTrimmedSurface\n SUBTYPE OF (IfcBoundedSurface);\n\tBasisSurface : IfcSurface;\n\tU1 : IfcParameterValue;\n\tV1 : IfcParameterValue;\n\tU2 : IfcParameterValue;\n\tV2 : IfcParameterValue;\n\tUsense : BOOLEAN;\n\tVsense : BOOLEAN;\n DERIVE\n\tDim : IfcDimensionCount := BasisSurface.Dim;\n WHERE\n\tWR1 : U1 <> U2;\n\tWR2 : V1 <> V2;\n\tWR3 : (('IFC2X2_FINAL.IFCELEMENTARYSURFACE' IN TYPEOF(BasisSurface)) AND\n                     (NOT ('IFC2X2_FINAL.IFCPLANE' IN TYPEOF(BasisSurface)))) OR\n                     ('IFC2X2_FINAL.IFCSURFACEOFREVOLUTION' IN TYPEOF(BasisSurface)) OR\n                     (Usense = (U2 > U1));\n\tWR4 : Vsense = (V2 > V1);\nEND_ENTITY;\n\nENTITY IfcReferencesValueDocument;\n\tReferencedDocument : IfcDocumentSelect;\n\tReferencingValues : SET [1:?] OF IfcAppliedValue;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcRegularTimeSeries\n SUBTYPE OF (IfcTimeSeries);\n\tTimeStep : IfcTimeMeasure;\n\tValues : LIST [1:?] OF IfcTimeSeriesValue;\nEND_ENTITY;\n\nENTITY IfcReinforcementBarProperties;\n\tTotalCrossSectionArea : IfcAreaMeasure;\n\tSteelGrade : IfcLabel;\n\tBarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;\n\tEffectiveDepth : OPTIONAL IfcLengthMeasure;\n\tNominalBarDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tBarCount : OPTIONAL IfcCountMeasure;\nEND_ENTITY;\n\nENTITY IfcReinforcementDefinitionProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tDefinitionType : OPTIONAL IfcLabel;\n\tReinforcementSectionDefinitions : LIST [1:?] OF IfcSectionReinforcementProperties;\nEND_ENTITY;\n\nENTITY IfcReinforcingBar\n SUBTYPE OF (IfcReinforcingElement);\n\tNominalDiameter : IfcPositiveLengthMeasure;\n\tCrossSectionArea : IfcAreaMeasure;\n\tBarLength : OPTIONAL IfcPositiveLengthMeasure;\n\tBarRole : IfcReinforcingBarRoleEnum;\n\tBarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;\n WHERE\n\tWR1 : (BarRole <> IfcReinforcingBarRoleEnum.USERDEFINED) OR ((BarRole = IfcReinforcingBarRoleEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcReinforcingElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcReinforcingBar\n\t,IfcReinforcingMesh\n\t,IfcTendon\n\t,IfcTendonAnchor))\n SUBTYPE OF (IfcBuildingElementComponent);\n\tSteelGrade : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcReinforcingMesh\n SUBTYPE OF (IfcReinforcingElement);\n\tMeshLength : OPTIONAL IfcPositiveLengthMeasure;\n\tMeshWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tLongitudinalBarNominalDiameter : IfcPositiveLengthMeasure;\n\tTransverseBarNominalDiameter : IfcPositiveLengthMeasure;\n\tLongitudinalBarCrossSectionArea : IfcAreaMeasure;\n\tTransverseBarCrossSectionArea : IfcAreaMeasure;\n\tLongitudinalBarSpacing : IfcPositiveLengthMeasure;\n\tTransverseBarSpacing : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRelAggregates\n SUBTYPE OF (IfcRelDecomposes);\nEND_ENTITY;\n\nENTITY IfcRelAssigns\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelAssignsToActor\n\t,IfcRelAssignsToControl\n\t,IfcRelAssignsToGroup\n\t,IfcRelAssignsToProcess\n\t,IfcRelAssignsToProduct\n\t,IfcRelAssignsToResource))\n SUBTYPE OF (IfcRelationship);\n\tRelatedObjects : SET [1:?] OF IfcObject;\n\tRelatedObjectsType : OPTIONAL IfcObjectTypeEnum;\n WHERE\n\tWR1 : IfcCorrectObjectAssignment(RelatedObjectsType, RelatedObjects);\nEND_ENTITY;\n\nENTITY IfcRelAssignsTasks\n SUBTYPE OF (IfcRelAssignsToControl);\n\tTimeForTask : OPTIONAL IfcScheduleTimeControl;\n WHERE\n\tWR1 : HIINDEX(SELF\\IfcRelAssigns.RelatedObjects) = 1;\n\tWR2 : 'IFC2X2_FINAL.IFCTASK' IN TYPEOF(SELF\\IfcRelAssigns.RelatedObjects[1]);\n\tWR3 : 'IFC2X2_FINAL.IFCWORKCONTROL' IN TYPEOF(SELF\\IfcRelAssignsToControl.RelatingControl);\nEND_ENTITY;\n\nENTITY IfcRelAssignsToActor\n SUPERTYPE OF (ONEOF\n\t(IfcRelOccupiesSpaces))\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingActor : IfcActor;\n\tActingRole : OPTIONAL IfcActorRole;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingActor :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToControl\n SUPERTYPE OF (ONEOF\n\t(IfcRelAssignsTasks\n\t,IfcRelAssignsToProjectOrder\n\t,IfcRelSchedulesCostItems))\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingControl : IfcControl;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingControl :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToGroup\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingGroup : IfcGroup;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingGroup :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToProcess\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingProcess : IfcProcess;\n\tQuantityInProcess : OPTIONAL IfcMeasureWithUnit;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingProcess :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToProduct\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingProduct : IfcProduct;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingProduct :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToProjectOrder\n SUBTYPE OF (IfcRelAssignsToControl);\nEND_ENTITY;\n\nENTITY IfcRelAssignsToResource\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingResource : IfcResource;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingResource :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssociates\n SUPERTYPE OF (ONEOF\n\t(IfcRelAssociatesAppliedValue\n\t,IfcRelAssociatesApproval\n\t,IfcRelAssociatesClassification\n\t,IfcRelAssociatesConstraint\n\t,IfcRelAssociatesDocument\n\t,IfcRelAssociatesLibrary\n\t,IfcRelAssociatesMaterial\n\t,IfcRelAssociatesProfileProperties))\n SUBTYPE OF (IfcRelationship);\n\tRelatedObjects : SET [1:?] OF IfcRoot;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* RelatedObjects |\n             NOT(('IFC2X2_FINAL.IFCOBJECT' IN TYPEOF(temp)) \n              OR ('IFC2X2_FINAL.IFCPROPERTYDEFINITION' IN TYPEOF(temp)))\n             )) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesAppliedValue\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingAppliedValue : IfcAppliedValue;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesApproval\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingApproval : IfcApproval;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesClassification\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingClassification : IfcClassificationNotationSelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesConstraint\n SUBTYPE OF (IfcRelAssociates);\n\tIntent : IfcLabel;\n\tRelatingConstraint : IfcConstraint;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesDocument\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingDocument : IfcDocumentSelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesLibrary\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingLibrary : IfcLibrarySelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesMaterial\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingMaterial : IfcMaterialSelect;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* SELF\\IfcRelAssociates.RelatedObjects | \n            ('IFC2X2_FINAL.IFCFEATUREELEMENTSUBTRACTION' IN TYPEOF(temp))\n              OR ('IFC2X2_FINAL.IFCVIRTUALELEMENT' IN TYPEOF(temp))\n            )) = 0;\n\tWR2 : SIZEOF(QUERY(temp <* SELF\\IfcRelAssociates.RelatedObjects | \n            NOT(\n            ('IFC2X2_FINAL.IFCPRODUCT' IN TYPEOF(temp)) OR\n            ('IFC2X2_FINAL.IFCTYPEPRODUCT' IN TYPEOF(temp))\n            ))) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesProfileProperties\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingProfileProperties : IfcProfileProperties;\n\tProfileSectionLocation : OPTIONAL IfcShapeAspect;\nEND_ENTITY;\n\nENTITY IfcRelConnects\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelConnectsElements\n\t,IfcRelConnectsPortToElement\n\t,IfcRelConnectsPorts\n\t,IfcRelConnectsStructuralActivity\n\t,IfcRelConnectsStructuralMember\n\t,IfcRelContainedInSpatialStructure\n\t,IfcRelCoversBldgElements\n\t,IfcRelFillsElement\n\t,IfcRelFlowControlElements\n\t,IfcRelInteractionRequirements\n\t,IfcRelProjectsElement\n\t,IfcRelSequence\n\t,IfcRelServicesBuildings\n\t,IfcRelSpaceBoundary\n\t,IfcRelVoidsElement))\n SUBTYPE OF (IfcRelationship);\nEND_ENTITY;\n\nENTITY IfcRelConnectsElements\n SUPERTYPE OF (ONEOF\n\t(IfcRelConnectsPathElements\n\t,IfcRelConnectsWithRealizingElements))\n SUBTYPE OF (IfcRelConnects);\n\tConnectionGeometry : OPTIONAL IfcConnectionGeometry;\n\tRelatingElement : IfcElement;\n\tRelatedElement : IfcElement;\n WHERE\n\tWR31 : RelatingElement :<>: RelatedElement;\nEND_ENTITY;\n\nENTITY IfcRelConnectsPathElements\n SUBTYPE OF (IfcRelConnectsElements);\n\tRelatingPriorities : LIST [0:?] OF INTEGER;\n\tRelatedPriorities : LIST [0:?] OF INTEGER;\n\tRelatedConnectionType : IfcConnectionTypeEnum;\n\tRelatingConnectionType : IfcConnectionTypeEnum;\n DERIVE\n\tRelatedLayerCount : INTEGER := IfcNoOfLayers(SELF\\IfcRelConnectsElements.RelatedElement);\n\tRelatingLayerCount : INTEGER := IfcNoOfLayers(SELF\\IfcRelConnectsElements.RelatingElement);\nEND_ENTITY;\n\nENTITY IfcRelConnectsPortToElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingPort : IfcPort;\n\tRelatedElement : IfcElement;\nEND_ENTITY;\n\nENTITY IfcRelConnectsPorts\n SUBTYPE OF (IfcRelConnects);\n\tRelatingPort : IfcPort;\n\tRelatedPort : IfcPort;\n\tRealizingElement : OPTIONAL IfcElement;\nEND_ENTITY;\n\nENTITY IfcRelConnectsStructuralActivity\n SUBTYPE OF (IfcRelConnects);\n\tRelatingElement : IfcStructuralActivityAssignmentSelect;\n\tRelatedStructuralActivity : IfcStructuralActivity;\nEND_ENTITY;\n\nENTITY IfcRelConnectsStructuralMember\n SUBTYPE OF (IfcRelConnects);\n\tRelatingStructuralMember : IfcStructuralMember;\n\tRelatedStructuralConnection : IfcStructuralConnection;\n\tAppliedCondition : OPTIONAL IfcBoundaryCondition;\n\tAdditionalConditions : OPTIONAL IfcStructuralConnectionCondition;\n\tSupportedLength : OPTIONAL IfcLengthMeasure;\n\tConditionCoordinateSystem : OPTIONAL IfcAxis2Placement3D;\nEND_ENTITY;\n\nENTITY IfcRelConnectsWithRealizingElements\n SUBTYPE OF (IfcRelConnectsElements);\n\tRealizingElements : SET [1:?] OF IfcElement;\n\tConnectionType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcRelContainedInSpatialStructure\n SUBTYPE OF (IfcRelConnects);\n\tRelatedElements : SET [1:?] OF IfcProduct;\n\tRelatingStructure : IfcSpatialStructureElement;\n WHERE\n\tWR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC2X2_FINAL.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcRelCoversBldgElements\n SUBTYPE OF (IfcRelConnects);\n\tRelatingBuildingElement : IfcElement;\n\tRelatedCoverings : SET [1:?] OF IfcCovering;\nEND_ENTITY;\n\nENTITY IfcRelDecomposes\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelAggregates\n\t,IfcRelNests))\n SUBTYPE OF (IfcRelationship);\n\tRelatingObject : IfcObject;\n\tRelatedObjects : SET [1:?] OF IfcObject;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* RelatedObjects | RelatingObject :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelDefines\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelDefinesByProperties\n\t,IfcRelDefinesByType))\n SUBTYPE OF (IfcRelationship);\n\tRelatedObjects : SET [1:?] OF IfcObject;\nEND_ENTITY;\n\nENTITY IfcRelDefinesByProperties\n SUPERTYPE OF (ONEOF\n\t(IfcRelOverridesProperties))\n SUBTYPE OF (IfcRelDefines);\n\tRelatingPropertyDefinition : IfcPropertySetDefinition;\nEND_ENTITY;\n\nENTITY IfcRelDefinesByType\n SUBTYPE OF (IfcRelDefines);\n\tRelatingType : IfcTypeObject;\nEND_ENTITY;\n\nENTITY IfcRelFillsElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingOpeningElement : IfcOpeningElement;\n\tRelatedBuildingElement : IfcElement;\nEND_ENTITY;\n\nENTITY IfcRelFlowControlElements\n SUBTYPE OF (IfcRelConnects);\n\tRelatedControlElements : SET [1:?] OF IfcDistributionControlElement;\n\tRelatingFlowElement : IfcDistributionFlowElement;\nEND_ENTITY;\n\nENTITY IfcRelInteractionRequirements\n SUBTYPE OF (IfcRelConnects);\n\tDailyInteraction : OPTIONAL IfcCountMeasure;\n\tImportanceRating : OPTIONAL IfcNormalisedRatioMeasure;\n\tLocationOfInteraction : OPTIONAL IfcSpatialStructureElement;\n\tRelatedSpaceProgram : IfcSpaceProgram;\n\tRelatingSpaceProgram : IfcSpaceProgram;\nEND_ENTITY;\n\nENTITY IfcRelNests\n SUBTYPE OF (IfcRelDecomposes);\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelDecomposes.RelatedObjects | \n              NOT(TYPEOF(SELF\\IfcRelDecomposes.RelatingObject) = TYPEOF(Temp)))) = 0;\nEND_ENTITY;\n\nENTITY IfcRelOccupiesSpaces\n SUBTYPE OF (IfcRelAssignsToActor);\nEND_ENTITY;\n\nENTITY IfcRelOverridesProperties\n SUBTYPE OF (IfcRelDefinesByProperties);\n\tOverridingProperties : SET [1:?] OF IfcProperty;\n WHERE\n\tWR1 : SIZEOF(SELF\\IfcRelDefines.RelatedObjects) = 1;\nEND_ENTITY;\n\nENTITY IfcRelProjectsElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingElement : IfcElement;\n\tRelatedFeatureElement : IfcFeatureElementAddition;\nEND_ENTITY;\n\nENTITY IfcRelSchedulesCostItems\n SUBTYPE OF (IfcRelAssignsToControl);\n WHERE\n\tWR11 : SIZEOF(QUERY(temp <* SELF\\IfcRelAssigns.RelatedObjects |\n               NOT('IFC2X2_FINAL.IFCCOSTITEM' IN TYPEOF(temp))\n               )) = 0;\n\tWR12 : 'IFC2X2_FINAL.IFCCOSTSCHEDULE' IN TYPEOF (SELF\\IfcRelAssignsToControl.RelatingControl);\nEND_ENTITY;\n\nENTITY IfcRelSequence\n SUBTYPE OF (IfcRelConnects);\n\tRelatingProcess : IfcProcess;\n\tRelatedProcess : IfcProcess;\n\tTimeLag : IfcTimeMeasure;\n\tSequenceType : IfcSequenceEnum;\n WHERE\n\tWR1 : RelatingProcess :<>: RelatedProcess;\nEND_ENTITY;\n\nENTITY IfcRelServicesBuildings\n SUBTYPE OF (IfcRelConnects);\n\tRelatingSystem : IfcSystem;\n\tRelatedBuildings : SET [1:?] OF IfcSpatialStructureElement;\nEND_ENTITY;\n\nENTITY IfcRelSpaceBoundary\n SUBTYPE OF (IfcRelConnects);\n\tRelatingSpace : IfcSpace;\n\tRelatedBuildingElement : OPTIONAL IfcElement;\n\tConnectionGeometry : OPTIONAL IfcConnectionGeometry;\n\tPhysicalOrVirtualBoundary : IfcPhysicalOrVirtualEnum;\n\tInternalOrExternalBoundary : IfcInternalOrExternalEnum;\n WHERE\n\tWR1 : ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Physical) AND \n              (EXISTS(RelatedBuildingElement) AND NOT('IFC2X2_FINAL.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) \n            OR \n            ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Virtual) AND \n              (NOT(EXISTS(RelatedBuildingElement)) OR ('IFC2X2_FINAL.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) \n            OR \n             (PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.NotDefined);\nEND_ENTITY;\n\nENTITY IfcRelVoidsElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingBuildingElement : IfcElement;\n\tRelatedOpeningElement : IfcFeatureElementSubtraction;\nEND_ENTITY;\n\nENTITY IfcRelationship\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelAssigns\n\t,IfcRelAssociates\n\t,IfcRelConnects\n\t,IfcRelDecomposes\n\t,IfcRelDefines))\n SUBTYPE OF (IfcRoot);\nEND_ENTITY;\n\nENTITY IfcRelaxation;\n\tRelaxationValue : IfcNormalisedRatioMeasure;\n\tInitialStress : IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcRepresentation\n SUPERTYPE OF (ONEOF\n\t(IfcShapeRepresentation\n\t,IfcStyledRepresentation\n\t,IfcTopologyRepresentation));\n\tContextOfItems : IfcRepresentationContext;\n\tRepresentationIdentifier : OPTIONAL IfcLabel;\n\tRepresentationType : OPTIONAL IfcLabel;\n\tItems : SET [1:?] OF IfcRepresentationItem;\n INVERSE\n\tOfProductRepresentation : SET [0:1] OF IfcProductRepresentation FOR Representations;\nEND_ENTITY;\n\nENTITY IfcRepresentationContext\n SUPERTYPE OF (ONEOF\n\t(IfcGeometricRepresentationContext));\n\tContextIdentifier : OPTIONAL IfcLabel;\n\tContextType : OPTIONAL IfcLabel;\n INVERSE\n\tRepresentationsInContext : SET [0:?] OF IfcRepresentation FOR ContextOfItems;\nEND_ENTITY;\n\nENTITY IfcRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcGeometricRepresentationItem\n\t,IfcMappedItem\n\t,IfcStyledItem\n\t,IfcTopologicalRepresentationItem));\nEND_ENTITY;\n\nENTITY IfcRepresentationMap;\n\tMappingOrigin : IfcAxis2Placement;\n\tMappedRepresentation : IfcRepresentation;\n INVERSE\n\tMapUsage : SET [0:?] OF IfcMappedItem FOR MappingSource;\nEND_ENTITY;\n\nENTITY IfcResource\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConstructionResource))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tResourceOf : SET [0:?] OF IfcRelAssignsToResource FOR RelatingResource;\nEND_ENTITY;\n\nENTITY IfcRevolvedAreaSolid\n SUBTYPE OF (IfcSweptAreaSolid);\n\tAxis : IfcAxis1Placement;\n\tAngle : IfcPlaneAngleMeasure;\n DERIVE\n\tAxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(Axis.Location, \n                   IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Axis.Z,1.0));\n WHERE\n\tWR1 : Axis.Location.Coordinates[3] = 0.0;\n\tWR2 : Axis.Z.DirectionRatios[3] = 0.0;\nEND_ENTITY;\n\nENTITY IfcRibPlateProfileProperties\n SUBTYPE OF (IfcProfileProperties);\n\tThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tRibHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tRibWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tRibSpacing : OPTIONAL IfcPositiveLengthMeasure;\n\tDirection : IfcRibPlateDirectionEnum;\nEND_ENTITY;\n\nENTITY IfcRoof\n SUBTYPE OF (IfcBuildingElement);\n\tShapeType : IfcRoofTypeEnum;\n WHERE\n\tWR1 : (HIINDEX(SELF\\IfcObject.IsDecomposedBy) = 0) OR \n            ((HIINDEX(SELF\\IfcObject.IsDecomposedBy) = 1) AND (NOT(EXISTS(SELF\\IfcProduct.Representation))));\nEND_ENTITY;\n\nENTITY IfcRoot\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcObject\n\t,IfcPropertyDefinition\n\t,IfcRelationship));\n\tGlobalId : IfcGloballyUniqueId;\n\tOwnerHistory : IfcOwnerHistory;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n UNIQUE\n\tUR1 : GlobalId;\nEND_ENTITY;\n\nENTITY IfcRoundedEdgeFeature\n SUBTYPE OF (IfcEdgeFeature);\n\tRadius : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRoundedRectangleProfileDef\n SUBTYPE OF (IfcRectangleProfileDef);\n\tRoundingRadius : IfcPositiveLengthMeasure;\n WHERE\n\tWR21 : ((RoundingRadius <= (SELF\\IfcRectangleProfileDef.XDim/2)) AND \n              (RoundingRadius <= (SELF\\IfcRectangleProfileDef.YDim/2)));\nEND_ENTITY;\n\nENTITY IfcSIUnit\n SUBTYPE OF (IfcNamedUnit);\n\tPrefix : OPTIONAL IfcSIPrefix;\n\tName : IfcSIUnitName;\n DERIVE\n\tSELF\\IfcNamedUnit.Dimensions : IfcDimensionalExponents := IfcDimensionsForSiUnit (SELF.Name);\nEND_ENTITY;\n\nENTITY IfcSanitaryTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcSanitaryTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcScheduleTimeControl\n SUBTYPE OF (IfcControl);\n\tActualStart : OPTIONAL IfcDateTimeSelect;\n\tEarlyStart : OPTIONAL IfcDateTimeSelect;\n\tLateStart : OPTIONAL IfcDateTimeSelect;\n\tScheduleStart : OPTIONAL IfcDateTimeSelect;\n\tActualFinish : OPTIONAL IfcDateTimeSelect;\n\tEarlyFinish : OPTIONAL IfcDateTimeSelect;\n\tLateFinish : OPTIONAL IfcDateTimeSelect;\n\tScheduleFinish : OPTIONAL IfcDateTimeSelect;\n\tScheduleDuration : OPTIONAL IfcTimeMeasure;\n\tActualDuration : OPTIONAL IfcTimeMeasure;\n\tRemainingTime : OPTIONAL IfcTimeMeasure;\n\tFreeFloat : OPTIONAL IfcTimeMeasure;\n\tTotalFloat : OPTIONAL IfcTimeMeasure;\n\tIsCritical : OPTIONAL BOOLEAN;\n\tStatusTime : OPTIONAL IfcDateTimeSelect;\n\tStartFloat : OPTIONAL IfcTimeMeasure;\n\tFinishFloat : OPTIONAL IfcTimeMeasure;\n\tCompletion : OPTIONAL IfcPositiveRatioMeasure;\n INVERSE\n\tScheduleTimeControlAssigned : IfcRelAssignsTasks FOR TimeForTask;\nEND_ENTITY;\n\nENTITY IfcSectionProperties;\n\tSectionType : IfcSectionTypeEnum;\n\tStartProfile : IfcProfileDef;\n\tEndProfile : OPTIONAL IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcSectionReinforcementProperties;\n\tLongitudinalStartPosition : IfcLengthMeasure;\n\tLongitudinalEndPosition : IfcLengthMeasure;\n\tTransversePosition : OPTIONAL IfcLengthMeasure;\n\tReinforcementRole : IfcReinforcingBarRoleEnum;\n\tSectionDefinition : IfcSectionProperties;\n\tCrossSectionReinforcementDefinitions : SET [1:?] OF IfcReinforcementBarProperties;\nEND_ENTITY;\n\nENTITY IfcSectionedSpine\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSpineCurve : IfcCompositeCurve;\n\tCrossSections : LIST [2:?] OF IfcProfileDef;\n\tCrossSectionPositions : LIST [2:?] OF IfcAxis2Placement3D;\n DERIVE\n\tDim : IfcDimensionCount := 3;\n WHERE\n\tWR1 : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions);\n\tWR2 : SIZEOF(QUERY(temp <* CrossSections | CrossSections[1].ProfileType <> temp.ProfileType)) = 0;\n\tWR3 : SpineCurve.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcSensorType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcSensorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcServiceLife\n SUBTYPE OF (IfcControl);\n\tServiceLifeType : IfcServiceLifeTypeEnum;\n\tServiceLifeDuration : IfcTimeMeasure;\nEND_ENTITY;\n\nENTITY IfcServiceLifeFactor\n SUBTYPE OF (IfcPropertySetDefinition);\n\tPredefinedType : IfcServiceLifeFactorTypeEnum;\n\tUpperValue : OPTIONAL IfcMeasureValue;\n\tMostUsedValue : IfcMeasureValue;\n\tLowerValue : OPTIONAL IfcMeasureValue;\n WHERE\n\tWR31 : NOT(PredefinedType = IfcServiceLifeFactorTypeEnum.USERDEFINED) \n           OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcShapeAspect;\n\tShapeRepresentations : LIST [1:?] OF IfcShapeRepresentation;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tProductDefinitional : LOGICAL;\n\tPartOfProductDefinitionShape : IfcProductDefinitionShape;\nEND_ENTITY;\n\nENTITY IfcShapeRepresentation\n SUBTYPE OF (IfcRepresentation);\n INVERSE\n\tOfShapeAspect : SET [0:1] OF IfcShapeAspect FOR ShapeRepresentations;\n WHERE\n\tWR21 : 'IFC2X2_FINAL.IFCGEOMETRICREPRESENTATIONCONTEXT' \n             IN TYPEOF(SELF\\IfcRepresentation.ContextOfItems);\n\tWR22 : SIZEOF(QUERY(temp <* Items | \n               ('IFC2X2_FINAL.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))\n                 AND (NOT(SIZEOF(\n                   ['IFC2X2_FINAL.IFCVERTEXPOINT',\n                    'IFC2X2_FINAL.IFCEDGECURVE',\n                    'IFC2X2_FINAL.IFCFACESURFACE'] * TYPEOF(temp)) = 1))\n             )) = 0;\n\tWR23 : EXISTS(SELF\\IfcRepresentation.RepresentationType);\n\tWR24 : IfcShapeRepresentationTypes(SELF\\IfcRepresentation.RepresentationType, SELF\\IfcRepresentation.Items);\nEND_ENTITY;\n\nENTITY IfcShellBasedSurfaceModel\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSbsmBoundary : SET [1:?] OF IfcShell;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcSimpleProperty\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPropertyBoundedValue\n\t,IfcPropertyEnumeratedValue\n\t,IfcPropertyListValue\n\t,IfcPropertyReferenceValue\n\t,IfcPropertySingleValue\n\t,IfcPropertyTableValue))\n SUBTYPE OF (IfcProperty);\nEND_ENTITY;\n\nENTITY IfcSite\n SUBTYPE OF (IfcSpatialStructureElement);\n\tRefLatitude : OPTIONAL IfcCompoundPlaneAngleMeasure;\n\tRefLongitude : OPTIONAL IfcCompoundPlaneAngleMeasure;\n\tRefElevation : OPTIONAL IfcLengthMeasure;\n\tLandTitleNumber : OPTIONAL IfcLabel;\n\tSiteAddress : OPTIONAL IfcPostalAddress;\nEND_ENTITY;\n\nENTITY IfcSlab\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcSlabTypeEnum;\n WHERE\n\tWR2 : (PredefinedType <> IfcSlabTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcSlabTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcSlabType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcSlabTypeEnum;\nEND_ENTITY;\n\nENTITY IfcSlippageConnectionCondition\n SUBTYPE OF (IfcStructuralConnectionCondition);\n\tSlippageX : OPTIONAL IfcLengthMeasure;\n\tSlippageY : OPTIONAL IfcLengthMeasure;\n\tSlippageZ : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcSolidModel\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCsgSolid\n\t,IfcManifoldSolidBrep\n\t,IfcSweptAreaSolid\n\t,IfcSweptDiskSolid))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcSoundProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tIsAttenuating : IfcBoolean;\n\tSoundScale : OPTIONAL IfcSoundScaleEnum;\n\tPointOfMeasurement : OPTIONAL IfcLocalPlacement;\n\tSoundValues : LIST [1:8] OF IfcSoundValue;\nEND_ENTITY;\n\nENTITY IfcSoundValue\n SUBTYPE OF (IfcPropertySetDefinition);\n\tSoundLevelTimeSeries : OPTIONAL IfcTimeSeries;\n\tFrequency : IfcFrequencyMeasure;\n\tSoundLevelSingleValue : OPTIONAL IfcDerivedMeasureValue;\nEND_ENTITY;\n\nENTITY IfcSpace\n SUBTYPE OF (IfcSpatialStructureElement);\n\tInteriorOrExteriorSpace : IfcInternalOrExternalEnum;\n\tElevationWithFlooring : OPTIONAL IfcLengthMeasure;\n INVERSE\n\tBoundedBy : SET [0:?] OF IfcRelSpaceBoundary FOR RelatingSpace;\nEND_ENTITY;\n\nENTITY IfcSpaceHeaterType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcSpaceHeaterTypeEnum;\nEND_ENTITY;\n\nENTITY IfcSpaceProgram\n SUBTYPE OF (IfcControl);\n\tSpaceProgramIdentifier : IfcIdentifier;\n\tMaxRequiredArea : OPTIONAL IfcAreaMeasure;\n\tMinRequiredArea : OPTIONAL IfcAreaMeasure;\n\tRequestedLocation : OPTIONAL IfcSpatialStructureElement;\n\tStandardRequiredArea : IfcAreaMeasure;\n INVERSE\n\tHasInteractionReqsFrom : SET [0:?] OF IfcRelInteractionRequirements FOR RelatedSpaceProgram;\n\tHasInteractionReqsTo : SET [0:?] OF IfcRelInteractionRequirements FOR RelatingSpaceProgram;\nEND_ENTITY;\n\nENTITY IfcSpaceThermalLoadProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tApplicableValueRatio : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalLoadSource : IfcThermalLoadSourceEnum;\n\tPropertySource : IfcPropertySourceEnum;\n\tSourceDescription : OPTIONAL IfcText;\n\tMaximumValue : IfcPowerMeasure;\n\tMinimumValue : OPTIONAL IfcPowerMeasure;\n\tThermalLoadTimeSeriesValues : OPTIONAL IfcTimeSeries;\n\tUserDefinedThermalLoadSource : OPTIONAL IfcLabel;\n\tUserDefinedPropertySource : OPTIONAL IfcLabel;\n\tThermalLoadType : IfcThermalLoadTypeEnum;\nEND_ENTITY;\n\nENTITY IfcSpatialStructureElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuilding\n\t,IfcBuildingStorey\n\t,IfcSite\n\t,IfcSpace))\n SUBTYPE OF (IfcProduct);\n\tLongName : OPTIONAL IfcLabel;\n\tCompositionType : IfcElementCompositionEnum;\n INVERSE\n\tServicedBySystems : SET [0:?] OF IfcRelServicesBuildings FOR RelatedBuildings;\n\tContainsElements : SET [0:?] OF IfcRelContainedInSpatialStructure FOR RelatingStructure;\n WHERE\n\tWR41 : (HIINDEX(SELF\\IfcObject.Decomposes) = 1) \n             AND\n             ('IFC2X2_FINAL.IFCRELAGGREGATES' IN TYPEOF(SELF\\IfcObject.Decomposes[1])) \n             AND\n             (('IFC2X2_FINAL.IFCPROJECT' IN TYPEOF (SELF\\IfcObject.Decomposes[1].RelatingObject)) OR\n              ('IFC2X2_FINAL.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF (SELF\\IfcObject.Decomposes[1].RelatingObject))\n             );\nEND_ENTITY;\n\nENTITY IfcStackTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcStackTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcStair\n SUBTYPE OF (IfcBuildingElement);\n\tShapeType : IfcStairTypeEnum;\n WHERE\n\tWR1 : (HIINDEX(SELF\\IfcObject.IsDecomposedBy) = 0) OR ((HIINDEX(SELF\\IfcObject.IsDecomposedBy) = 1) AND (NOT(EXISTS(SELF\\IfcProduct.Representation))));\nEND_ENTITY;\n\nENTITY IfcStairFlight\n SUBTYPE OF (IfcBuildingElement);\n\tNumberOfRiser : OPTIONAL INTEGER;\n\tNumberOfTreads : OPTIONAL INTEGER;\n\tRiserHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tTreadLength : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcStairFlightType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcStairFlightTypeEnum;\nEND_ENTITY;\n\nENTITY IfcStructuralAction\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralLinearAction\n\t,IfcStructuralPlanarAction\n\t,IfcStructuralPointAction))\n SUBTYPE OF (IfcStructuralActivity);\n\tDestabilizingLoad : BOOLEAN;\n\tProjectedOrTrue : IfcProjectedOrTrueLengthEnum;\n\tCausedBy : OPTIONAL IfcStructuralReaction;\nEND_ENTITY;\n\nENTITY IfcStructuralActivity\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralAction\n\t,IfcStructuralReaction))\n SUBTYPE OF (IfcProduct);\n\tAppliedLoad : IfcStructuralLoad;\n\tGlobalOrLocal : IfcGlobalOrLocalEnum;\n INVERSE\n\tAssignedToStructuralItem : IfcRelConnectsStructuralActivity FOR RelatedStructuralActivity;\nEND_ENTITY;\n\nENTITY IfcStructuralAnalysisModel\n SUBTYPE OF (IfcSystem);\n\tPredefinedType : IfcAnalysisModelTypeEnum;\n\tOrientationOf2DPlane : OPTIONAL IfcAxis2Placement3D;\n\tLoadedBy : OPTIONAL SET [1:?] OF IfcStructuralLoadGroup;\n\tHasResults : OPTIONAL SET [1:?] OF IfcStructuralResultGroup;\nEND_ENTITY;\n\nENTITY IfcStructuralConnection\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralCurveConnection\n\t,IfcStructuralPointConnection\n\t,IfcStructuralSurfaceConnection))\n SUBTYPE OF (IfcStructuralItem);\n\tAppliedCondition : OPTIONAL IfcBoundaryCondition;\n INVERSE\n\tConnectsStructuralMembers : SET [1:?] OF IfcRelConnectsStructuralMember FOR RelatedStructuralConnection;\nEND_ENTITY;\n\nENTITY IfcStructuralConnectionCondition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcFailureConnectionCondition\n\t,IfcSlippageConnectionCondition));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcStructuralCurveConnection\n SUBTYPE OF (IfcStructuralConnection);\nEND_ENTITY;\n\nENTITY IfcStructuralCurveMember\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralCurveMemberVarying))\n SUBTYPE OF (IfcStructuralMember);\n\tPredefinedType : IfcStructuralCurveTypeEnum;\nEND_ENTITY;\n\nENTITY IfcStructuralCurveMemberVarying\n SUBTYPE OF (IfcStructuralCurveMember);\nEND_ENTITY;\n\nENTITY IfcStructuralItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralConnection\n\t,IfcStructuralMember))\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tAssignedStructuralActivity : SET [0:?] OF IfcRelConnectsStructuralActivity FOR RelatingElement;\nEND_ENTITY;\n\nENTITY IfcStructuralLinearAction\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralLinearActionVarying))\n SUBTYPE OF (IfcStructuralAction);\n WHERE\n\tWR61 : SIZEOF(['IFC2X2_FINAL.IFCSTRUCTURALLOADLINEARFORCE',\n                     'IFC2X2_FINAL.IFCSTRUCTURALLOADTEMPERATURE']\n             * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralLinearActionVarying\n SUBTYPE OF (IfcStructuralLinearAction);\n\tVaryingAppliedLoadLocation : IfcShapeAspect;\n\tSubsequentAppliedLoads : LIST [1:?] OF IfcStructuralLoad;\n DERIVE\n\tVaryingAppliedLoads : LIST [2:?] OF IfcStructuralLoad := IfcAddToBeginOfList(SELF\\IfcStructuralActivity.AppliedLoad, SubsequentAppliedLoads);\nEND_ENTITY;\n\nENTITY IfcStructuralLoad\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadStatic));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadGroup\n SUBTYPE OF (IfcGroup);\n\tPredefinedType : IfcLoadGroupTypeEnum;\n\tActionType : IfcActionTypeEnum;\n\tActionSource : IfcActionSourceTypeEnum;\n\tCoefficient : OPTIONAL IfcPositiveRatioMeasure;\n\tPurpose : OPTIONAL IfcLabel;\n INVERSE\n\tSourceOfResultGroup : SET [0:1] OF IfcStructuralResultGroup FOR ResultForLoadGroup;\n\tLoadGroupFor : SET [0:?] OF IfcStructuralAnalysisModel FOR LoadedBy;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadLinearForce\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tLinearForceX : OPTIONAL IfcLinearForceMeasure;\n\tLinearForceY : OPTIONAL IfcLinearForceMeasure;\n\tLinearForceZ : OPTIONAL IfcLinearForceMeasure;\n\tLinearMomentX : OPTIONAL IfcLinearMomentMeasure;\n\tLinearMomentY : OPTIONAL IfcLinearMomentMeasure;\n\tLinearMomentZ : OPTIONAL IfcLinearMomentMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadPlanarForce\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tPlanarForceX : OPTIONAL IfcPlanarForceMeasure;\n\tPlanarForceY : OPTIONAL IfcPlanarForceMeasure;\n\tPlanarForceZ : OPTIONAL IfcPlanarForceMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleDisplacement\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadSingleDisplacementDistortion))\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tDisplacementX : OPTIONAL IfcLengthMeasure;\n\tDisplacementY : OPTIONAL IfcLengthMeasure;\n\tDisplacementZ : OPTIONAL IfcLengthMeasure;\n\tRotationalDisplacementRX : OPTIONAL IfcPlaneAngleMeasure;\n\tRotationalDisplacementRY : OPTIONAL IfcPlaneAngleMeasure;\n\tRotationalDisplacementRZ : OPTIONAL IfcPlaneAngleMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleDisplacementDistortion\n SUBTYPE OF (IfcStructuralLoadSingleDisplacement);\n\tDistortion : OPTIONAL IfcCurvatureMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleForce\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadSingleForceWarping))\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tForceX : OPTIONAL IfcForceMeasure;\n\tForceY : OPTIONAL IfcForceMeasure;\n\tForceZ : OPTIONAL IfcForceMeasure;\n\tMomentX : OPTIONAL IfcTorqueMeasure;\n\tMomentY : OPTIONAL IfcTorqueMeasure;\n\tMomentZ : OPTIONAL IfcTorqueMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleForceWarping\n SUBTYPE OF (IfcStructuralLoadSingleForce);\n\tWarpingMoment : OPTIONAL IfcWarpingMomentMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadStatic\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadLinearForce\n\t,IfcStructuralLoadPlanarForce\n\t,IfcStructuralLoadSingleDisplacement\n\t,IfcStructuralLoadSingleForce\n\t,IfcStructuralLoadTemperature))\n SUBTYPE OF (IfcStructuralLoad);\nEND_ENTITY;\n\nENTITY IfcStructuralLoadTemperature\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tDeltaT_Constant : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tDeltaT_Y : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tDeltaT_Z : OPTIONAL IfcThermodynamicTemperatureMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralMember\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralCurveMember\n\t,IfcStructuralSurfaceMember))\n SUBTYPE OF (IfcStructuralItem);\n INVERSE\n\tConnectedBy : SET [0:?] OF IfcRelConnectsStructuralMember FOR RelatingStructuralMember;\nEND_ENTITY;\n\nENTITY IfcStructuralPlanarAction\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralPlanarActionVarying))\n SUBTYPE OF (IfcStructuralAction);\n WHERE\n\tWR61 : SIZEOF(['IFC2X2_FINAL.IFCSTRUCTURALLOADPLANARFORCE',\n                     'IFC2X2_FINAL.IFCSTRUCTURALLOADTEMPERATURE']\n             * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralPlanarActionVarying\n SUBTYPE OF (IfcStructuralPlanarAction);\n\tVaryingAppliedLoadLocation : IfcShapeAspect;\n\tSubsequentAppliedLoads : LIST [2:?] OF IfcStructuralLoad;\n DERIVE\n\tVaryingAppliedLoads : LIST [3:?] OF IfcStructuralLoad := IfcAddToBeginOfList(SELF\\IfcStructuralActivity.AppliedLoad, SubsequentAppliedLoads);\nEND_ENTITY;\n\nENTITY IfcStructuralPointAction\n SUBTYPE OF (IfcStructuralAction);\n WHERE\n\tWR61 : SIZEOF(['IFC2X2_FINAL.IFCSTRUCTURALLOADSINGLEFORCE',\n                     'IFC2X2_FINAL.IFCSTRUCTURALLOADSINGLEDISPLACEMENT']\n             * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralPointConnection\n SUBTYPE OF (IfcStructuralConnection);\nEND_ENTITY;\n\nENTITY IfcStructuralPointReaction\n SUBTYPE OF (IfcStructuralReaction);\n WHERE\n\tWR61 : SIZEOF(['IFC2X2_FINAL.IFCSTRUCTURALLOADSINGLEFORCE',\n                     'IFC2X2_FINAL.IFCSTRUCTURALLOADSINGLEDISPLACEMENT']\n             * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralProfileProperties\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralSteelProfileProperties))\n SUBTYPE OF (IfcGeneralProfileProperties);\n\tTorsionalConstantX : OPTIONAL IfcMomentOfInertiaMeasure;\n\tMomentOfInertiaYZ : OPTIONAL IfcMomentOfInertiaMeasure;\n\tMomentOfInertiaY : OPTIONAL IfcMomentOfInertiaMeasure;\n\tMomentOfInertiaZ : OPTIONAL IfcMomentOfInertiaMeasure;\n\tWarpingConstant : OPTIONAL IfcWarpingConstantMeasure;\n\tShearCentreZ : OPTIONAL IfcLengthMeasure;\n\tShearCentreY : OPTIONAL IfcLengthMeasure;\n\tShearDeformationAreaZ : OPTIONAL IfcAreaMeasure;\n\tShearDeformationAreaY : OPTIONAL IfcAreaMeasure;\n\tMaximumSectionModulusY : OPTIONAL IfcSectionModulusMeasure;\n\tMinimumSectionModulusY : OPTIONAL IfcSectionModulusMeasure;\n\tMaximumSectionModulusZ : OPTIONAL IfcSectionModulusMeasure;\n\tMinimumSectionModulusZ : OPTIONAL IfcSectionModulusMeasure;\n\tTorsionalSectionModulus : OPTIONAL IfcSectionModulusMeasure;\n WHERE\n\tWR1 : NOT(EXISTS(ShearDeformationAreaY)) OR (ShearDeformationAreaY >= 0);\n\tWR2 : NOT(EXISTS(ShearDeformationAreaZ)) OR (ShearDeformationAreaZ >= 0);\nEND_ENTITY;\n\nENTITY IfcStructuralReaction\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralPointReaction))\n SUBTYPE OF (IfcStructuralActivity);\n INVERSE\n\tCauses : SET [0:?] OF IfcStructuralAction FOR CausedBy;\nEND_ENTITY;\n\nENTITY IfcStructuralResultGroup\n SUBTYPE OF (IfcGroup);\n\tTheoryType : IfcAnalysisTheoryTypeEnum;\n\tResultForLoadGroup : OPTIONAL IfcStructuralLoadGroup;\n\tIsLinear : BOOLEAN;\n INVERSE\n\tResultGroupFor : SET [0:1] OF IfcStructuralAnalysisModel FOR HasResults;\nEND_ENTITY;\n\nENTITY IfcStructuralSteelProfileProperties\n SUBTYPE OF (IfcStructuralProfileProperties);\n\tShearAreaZ : OPTIONAL IfcAreaMeasure;\n\tShearAreaY : OPTIONAL IfcAreaMeasure;\n\tPlasticShapeFactorY : OPTIONAL IfcPositiveRatioMeasure;\n\tPlasticShapeFactorZ : OPTIONAL IfcPositiveRatioMeasure;\n WHERE\n\tWR1 : NOT(EXISTS(ShearAreaY)) OR (ShearAreaY >= 0);\n\tWR2 : NOT(EXISTS(ShearAreaZ)) OR (ShearAreaZ >= 0);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceConnection\n SUBTYPE OF (IfcStructuralConnection);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceMember\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralSurfaceMemberVarying))\n SUBTYPE OF (IfcStructuralMember);\n\tPredefinedType : IfcStructuralSurfaceTypeEnum;\n\tThickness : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceMemberVarying\n SUBTYPE OF (IfcStructuralSurfaceMember);\n\tSubsequentThickness : LIST [2:?] OF IfcPositiveLengthMeasure;\n\tVaryingThicknessLocation : IfcShapeAspect;\n DERIVE\n\tVaryingThickness : LIST [3:?] OF IfcPositiveLengthMeasure := IfcAddToBeginOfList(SELF\\IfcStructuralSurfaceMember.Thickness, SubsequentThickness);\n WHERE\n\tWR61 : EXISTS(SELF\\IfcStructuralSurfaceMember.Thickness);\n\tWR62 : SIZEOF(QUERY(temp <* SELF.VaryingThicknessLocation.ShapeRepresentations |\n               NOT(SIZEOF(temp\\IfcRepresentation.Items) = 1)\n               )) = 0;\n\tWR63 : SIZEOF(QUERY(temp <* SELF.VaryingThicknessLocation.ShapeRepresentations |\n               NOT(('IFC2X2_FINAL.IFCCARTESIANPOINT' IN TYPEOF(temp\\IfcRepresentation.Items[1]))\n                     OR\n                   ('IFC2X2_FINAL.IFCPOINTONSURFACE' IN TYPEOF(temp\\IfcRepresentation.Items[1])))\n               )) = 0;\nEND_ENTITY;\n\nENTITY IfcStructuredDimensionCallout\n SUBTYPE OF (IfcDraughtingCallout);\n WHERE\n\tWR31 : SIZEOF(QUERY ( Ato <* QUERY ( Con <* SELF.contents | (\n                   'IFC2X2_FINAL.IFCANNOTATIONTEXTOCCURRENCE' IN \n                    TYPEOF(Con)) ) | (NOT (Ato.Name IN ['dimension value',\n                   'tolerance value','unit text','prefix text','suffix text']))))\n                  = 0;\nEND_ENTITY;\n\nENTITY IfcStyledItem\n SUPERTYPE OF (ONEOF\n\t(IfcAnnotationOccurrence))\n SUBTYPE OF (IfcRepresentationItem);\n\tItem : IfcRepresentationItem;\n\tStyles : SET [1:?] OF IfcPresentationStyleAssignment;\n\tName : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : SIZEOF(Styles) = 1;\nEND_ENTITY;\n\nENTITY IfcStyledRepresentation\n SUBTYPE OF (IfcRepresentation);\nEND_ENTITY;\n\nENTITY IfcSubContractResource\n SUBTYPE OF (IfcConstructionResource);\n\tSubContractor : OPTIONAL IfcActorSelect;\n\tJobDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcSubedge\n SUBTYPE OF (IfcEdge);\n\tParentEdge : IfcEdge;\nEND_ENTITY;\n\nENTITY IfcSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBoundedSurface\n\t,IfcElementarySurface\n\t,IfcSweptSurface))\n SUBTYPE OF (IfcGeometricRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcSurfaceCurveSweptAreaSolid\n SUBTYPE OF (IfcSweptAreaSolid);\n\tDirectrix : IfcCurve;\n\tStartParam : IfcParameterValue;\n\tEndParam : IfcParameterValue;\n\tReferenceSurface : IfcSurface;\nEND_ENTITY;\n\nENTITY IfcSurfaceOfLinearExtrusion\n SUBTYPE OF (IfcSweptSurface);\n\tExtrudedDirection : IfcDirection;\n\tDepth : IfcLengthMeasure;\n DERIVE\n\tExtrusionAxis : IfcVector := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (ExtrudedDirection, Depth);\n WHERE\n\tWR41 : Depth > 0;\nEND_ENTITY;\n\nENTITY IfcSurfaceOfRevolution\n SUBTYPE OF (IfcSweptSurface);\n\tAxisPosition : IfcAxis1Placement;\n DERIVE\n\tAxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(AxisPosition.Location, \n                       IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(AxisPosition.Z,1.0));\nEND_ENTITY;\n\nENTITY IfcSurfaceStyle;\n\tSide : IfcSurfaceSide;\n\tName : IfcLabel;\n\tStyles : SET [1:5] OF IfcSurfaceStyleElementSelect;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleLighting;\n\tDiffuseTransmissionColour : IfcColourRgb;\n\tDiffuseReflectionColour : IfcColourRgb;\n\tTransmissionColour : IfcColourRgb;\n\tReflectanceColour : IfcColourRgb;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleRefraction;\n\tRefractionIndex : OPTIONAL IfcReal;\n\tDispersionFactor : OPTIONAL IfcReal;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleRendering\n SUBTYPE OF (IfcSurfaceStyleShading);\n\tTransparency : OPTIONAL IfcNormalisedRatioMeasure;\n\tDiffuseColour : OPTIONAL IfcColourOrFactor;\n\tTransmissionColour : OPTIONAL IfcColourOrFactor;\n\tDiffuseTransmissionColour : OPTIONAL IfcColourOrFactor;\n\tReflectionColour : OPTIONAL IfcColourOrFactor;\n\tSpecularColour : OPTIONAL IfcColourOrFactor;\n\tSpecularHighlight : OPTIONAL IfcSpecularHighlightSelect;\n\tReflectanceMethod : IfcReflectanceMethodEnum;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleShading\n SUPERTYPE OF (ONEOF\n\t(IfcSurfaceStyleRendering));\n\tSurfaceColour : IfcColourRgb;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleWithTextures;\n\tTextures : SET [1:?] OF IfcSurfaceTexture;\n INVERSE\n\tHasTextureCoordinates : SET [0:1] OF IfcTextureCoordinate FOR Texture;\nEND_ENTITY;\n\nENTITY IfcSurfaceTexture\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcImageTexture\n\t,IfcPixelTexture));\n\tRepeatS : BOOLEAN;\n\tRepeatT : BOOLEAN;\n\tTextureType : IfcSurfaceTextureEnum;\n\tTextureTransform : OPTIONAL IfcCartesianTransformationOperator2D;\nEND_ENTITY;\n\nENTITY IfcSweptAreaSolid\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcExtrudedAreaSolid\n\t,IfcRevolvedAreaSolid\n\t,IfcSurfaceCurveSweptAreaSolid))\n SUBTYPE OF (IfcSolidModel);\n\tSweptArea : IfcProfileDef;\n\tPosition : IfcAxis2Placement3D;\n WHERE\n\tWR1 : NOT('IFC2X2_FINAL.IFCDERIVEDPROFILEDEF' IN TYPEOF(SweptArea));\n\tWR2 : SweptArea.ProfileType = IfcProfileTypeEnum.Area;\nEND_ENTITY;\n\nENTITY IfcSweptDiskSolid\n SUBTYPE OF (IfcSolidModel);\n\tDirectrix : IfcCurve;\n\tRadius : IfcPositiveLengthMeasure;\n\tInnerRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tStartParam : IfcParameterValue;\n\tEndParam : IfcParameterValue;\n WHERE\n\tWR1 : Directrix.Dim = 3;\n\tWR2 : (NOT EXISTS(InnerRadius)) OR (Radius > InnerRadius);\nEND_ENTITY;\n\nENTITY IfcSweptSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcSurfaceOfLinearExtrusion\n\t,IfcSurfaceOfRevolution))\n SUBTYPE OF (IfcSurface);\n\tSweptCurve : IfcProfileDef;\n\tPosition : IfcAxis2Placement3D;\n DERIVE\n\tDim : IfcDimensionCount := Position.Dim;\n WHERE\n\tWR1 : NOT('IFC2X2_FINAL.IFCDERIVEDPROFILEDEF' IN TYPEOF(SweptCurve));\n\tWR2 : SweptCurve.ProfileType = IfcProfileTypeEnum.Curve;\nEND_ENTITY;\n\nENTITY IfcSwitchingDeviceType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcSwitchingDeviceTypeEnum;\nEND_ENTITY;\n\nENTITY IfcSymbolStyle;\n\tName : IfcLabel;\n\tStyleOfSymbol : IfcSymbolStyleSelect;\nEND_ENTITY;\n\nENTITY IfcSystem\n SUPERTYPE OF (ONEOF\n\t(IfcElectricalCircuit\n\t,IfcStructuralAnalysisModel))\n SUBTYPE OF (IfcGroup);\n INVERSE\n\tServicesBuildings : SET [0:1] OF IfcRelServicesBuildings FOR RelatingSystem;\n WHERE\n\tWR1 : SIZEOF (QUERY (temp <* SELF\\IfcGroup.IsGroupedBy.RelatedObjects |  NOT('IFC2X2_FINAL.IFCELEMENT' IN TYPEOF(temp)))) = 0;\nEND_ENTITY;\n\nENTITY IfcSystemFurnitureElementType\n SUBTYPE OF (IfcFurnishingElementType);\nEND_ENTITY;\n\nENTITY IfcTShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tFlangeEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tWebEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tWebSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tCentreOfGravityInY : IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : FlangeThickness < Depth;\n\tWR2 : WebThickness < FlangeWidth;\nEND_ENTITY;\n\nENTITY IfcTable;\n\tName : STRING;\n\tRows : LIST [1:?] OF IfcTableRow;\n DERIVE\n\tNumberOfCellsInRow : INTEGER := HIINDEX(Rows[1].RowCells);\n\tNumberOfHeadings : INTEGER := SIZEOF(QUERY( Temp <* Rows | Temp.IsHeading));\n\tNumberOfDataRows : INTEGER := SIZEOF(QUERY( Temp <* Rows | NOT(Temp.IsHeading)));\n WHERE\n\tWR1 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0;\n\tWR2 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0;\n\tWR3 : { 0 <= NumberOfHeadings <= 1 };\nEND_ENTITY;\n\nENTITY IfcTableRow;\n\tRowCells : LIST [1:?] OF IfcValue;\n\tIsHeading : BOOLEAN;\n INVERSE\n\tOfTable : IfcTable FOR Rows;\nEND_ENTITY;\n\nENTITY IfcTankType\n SUBTYPE OF (IfcFlowStorageDeviceType);\n\tPredefinedType : IfcTankTypeEnum;\nEND_ENTITY;\n\nENTITY IfcTask\n SUPERTYPE OF (ONEOF\n\t(IfcMove\n\t,IfcOrderAction))\n SUBTYPE OF (IfcProcess);\n\tTaskId : IfcIdentifier;\n\tStatus : OPTIONAL IfcLabel;\n\tWorkMethod : OPTIONAL IfcLabel;\n\tIsMilestone : BOOLEAN;\n\tPriority : OPTIONAL INTEGER;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* SELF\\IfcObject.Decomposes | NOT('IFC2X2_FINAL.IFCRELNESTS' IN TYPEOF(temp)))) = 0;\n\tWR2 : SIZEOF(QUERY(temp <* SELF\\IfcObject.IsDecomposedBy | NOT('IFC2X2_FINAL.IFCRELNESTS' IN TYPEOF(temp)))) = 0;\n\tWR3 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcTelecomAddress\n SUBTYPE OF (IfcAddress);\n\tTelephoneNumbers : OPTIONAL LIST [1:?] OF IfcLabel;\n\tFacsimileNumbers : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPagerNumber : OPTIONAL IfcLabel;\n\tElectronicMailAddresses : OPTIONAL LIST [1:?] OF IfcLabel;\n\tWWWHomePageURL : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS (TelephoneNumbers) OR\n            EXISTS (PagerNumber) OR\n            EXISTS (FacsimileNumbers) OR \n            EXISTS (ElectronicMailAddresses) OR \n            EXISTS (WWWHomePageURL);\nEND_ENTITY;\n\nENTITY IfcTendon\n SUBTYPE OF (IfcReinforcingElement);\n\tPredefinedType : IfcTendonTypeEnum;\n\tNominalDiameter : IfcPositiveLengthMeasure;\n\tCrossSectionArea : IfcAreaMeasure;\n\tTensionForce : OPTIONAL IfcForceMeasure;\n\tPreStress : OPTIONAL IfcPressureMeasure;\n\tFrictionCoefficient : OPTIONAL IfcNormalisedRatioMeasure;\n\tAnchorageSlip : OPTIONAL IfcPositiveLengthMeasure;\n\tMinCurvatureRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : (PredefinedType <> IfcTendonTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTendonTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcTendonAnchor\n SUBTYPE OF (IfcReinforcingElement);\nEND_ENTITY;\n\nENTITY IfcTerminatorSymbol\n SUPERTYPE OF (ONEOF\n\t(IfcDimensionCurveTerminator))\n SUBTYPE OF (IfcAnnotationSymbolOccurrence);\n\tAnnotatedCurve : IfcAnnotationCurveOccurrence;\nEND_ENTITY;\n\nENTITY IfcTextLiteral\n SUPERTYPE OF (ONEOF\n\t(IfcTextLiteralWithExtent))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tLiteral : IfcPresentableText;\n\tPlacement : IfcAxis2Placement;\n\tAlignment : IfcTextAlignment;\n\tPath : IfcTextPath;\n\tFont : IfcFontSelect;\nEND_ENTITY;\n\nENTITY IfcTextLiteralWithExtent\n SUBTYPE OF (IfcTextLiteral);\n\tExtent : IfcPlanarExtent;\nEND_ENTITY;\n\nENTITY IfcTextStyle;\n\tName : IfcLabel;\n\tCharacterGlyphAppearance : OPTIONAL IfcCharacterStyleSelect;\n\tTextStyles : OPTIONAL SET [1:3] OF IfcTextStyleSelect;\n WHERE\n\tWR11 : HIINDEX(TextStyles) <= 3;\n\tWR12 : NOT(EXISTS(SELF.TextStyles)) \n             OR\n              (SIZEOF(QUERY(Style1 <* SELF.TextStyles |\n                 SIZEOF(QUERY(Style2 <* SELF.TextStyles - Style1 |\n                   TYPEOF(Style1) = TYPEOF(Style2)\n                 )) > 0\n               )) = 0 );\nEND_ENTITY;\n\nENTITY IfcTextStyleWithBoxCharacteristics;\n\tBoxHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tBoxWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tBoxSlantAngle : OPTIONAL IfcPlaneAngleMeasure;\n\tBoxRotateAngle : OPTIONAL IfcPlaneAngleMeasure;\nEND_ENTITY;\n\nENTITY IfcTextStyleWithMirror;\n\tMirrorPlacement : IfcAxis2Placement;\nEND_ENTITY;\n\nENTITY IfcTextStyleWithSpacing;\n\tCharacterSpacing : IfcCharacterSpacingSelect;\nEND_ENTITY;\n\nENTITY IfcTextureCoordinate\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcTextureCoordinateGenerator\n\t,IfcTextureMap));\n\tTexture : IfcSurfaceStyleWithTextures;\nEND_ENTITY;\n\nENTITY IfcTextureCoordinateGenerator\n SUBTYPE OF (IfcTextureCoordinate);\n\tMode : IfcLabel;\n\tParameter : LIST [1:?] OF IfcSimpleValue;\nEND_ENTITY;\n\nENTITY IfcTextureMap\n SUBTYPE OF (IfcTextureCoordinate);\n\tVertexBasedTextures : OPTIONAL SET [1:?] OF IfcVertexBasedTextureMap;\nEND_ENTITY;\n\nENTITY IfcTextureVertex;\n\tCoordinates : LIST [2:2] OF IfcParameterValue;\nEND_ENTITY;\n\nENTITY IfcThermalMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tSpecificHeatCapacity : OPTIONAL IfcSpecificHeatCapacityMeasure;\n\tBoilingPoint : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tFreezingPoint : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tThermalConductivity : OPTIONAL IfcThermalConductivityMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcTimeSeries\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcIrregularTimeSeries\n\t,IfcRegularTimeSeries));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tStartTime : IfcDateTimeSelect;\n\tEndTime : IfcDateTimeSelect;\n\tTimeSeriesDataType : IfcTimeSeriesDataTypeEnum;\n\tDataOrigin : IfcDataOriginEnum;\n\tUserDefinedDataOrigin : OPTIONAL IfcLabel;\n\tUnit : OPTIONAL IfcUnit;\n INVERSE\n\tDocumentedBy : SET [0:1] OF IfcTimeSeriesReferenceRelationship FOR ReferencedTimeSeries;\nEND_ENTITY;\n\nENTITY IfcTimeSeriesReferenceRelationship;\n\tReferencedTimeSeries : IfcTimeSeries;\n\tTimeSeriesReferences : SET [1:?] OF IfcDocumentSelect;\nEND_ENTITY;\n\nENTITY IfcTimeSeriesSchedule\n SUBTYPE OF (IfcControl);\n\tApplicableDates : OPTIONAL LIST [1:?] OF IfcDateTimeSelect;\n\tTimeSeriesScheduleType : IfcTimeSeriesScheduleTypeEnum;\n\tTimeSeries : IfcTimeSeries;\n WHERE\n\tWR41 : NOT(TimeSeriesScheduleType=IfcTimeSeriesScheduleTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcTimeSeriesValue;\n\tListValues : LIST [1:?] OF IfcValue;\nEND_ENTITY;\n\nENTITY IfcTopologicalRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConnectedFaceSet\n\t,IfcEdge\n\t,IfcFace\n\t,IfcFaceBound\n\t,IfcLoop\n\t,IfcPath\n\t,IfcVertex))\n SUBTYPE OF (IfcRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcTopologyRepresentation\n SUBTYPE OF (IfcRepresentation);\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* SELF\\IfcRepresentation.Items | \n               NOT('IFC2X2_FINAL.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))\n             )) = 0;\n\tWR22 : EXISTS(SELF\\IfcRepresentation.RepresentationType);\n\tWR23 : IfcTopologyRepresentationTypes(SELF\\IfcRepresentation.RepresentationType, SELF\\IfcRepresentation.Items);\nEND_ENTITY;\n\nENTITY IfcTransformerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcTransformerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcTransportElement\n SUBTYPE OF (IfcElement);\n\tOperationType : OPTIONAL IfcTransportElementTypeEnum;\n\tCapacityByWeight : OPTIONAL IfcMassMeasure;\n\tCapacityByNumber : OPTIONAL IfcCountMeasure;\nEND_ENTITY;\n\nENTITY IfcTransportElementType\n SUBTYPE OF (IfcElementType);\n\tPredefinedType : IfcTransportElementTypeEnum;\nEND_ENTITY;\n\nENTITY IfcTrapeziumProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tBottomXDim : IfcPositiveLengthMeasure;\n\tTopXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\n\tTopXOffset : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcTrimmedCurve\n SUBTYPE OF (IfcBoundedCurve);\n\tBasisCurve : IfcCurve;\n\tTrim1 : SET [1:2] OF IfcTrimmingSelect;\n\tTrim2 : SET [1:2] OF IfcTrimmingSelect;\n\tSenseAgreement : BOOLEAN;\n\tMasterRepresentation : IfcTrimmingPreference;\n WHERE\n\tWR41 : (HIINDEX(Trim1) = 1) OR (TYPEOF(Trim1[1]) <> TYPEOF(Trim1[2]));\n\tWR42 : (HIINDEX(Trim2) = 1) OR (TYPEOF(Trim2[1]) <> TYPEOF(Trim2[2]));\n\tWR43 : NOT('IFC2X2_FINAL.IFCBOUNDEDCURVE' IN TYPEOF(BasisCurve));\nEND_ENTITY;\n\nENTITY IfcTubeBundleType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcTubeBundleTypeEnum;\nEND_ENTITY;\n\nENTITY IfcTwoDirectionRepeatFactor\n SUBTYPE OF (IfcOneDirectionRepeatFactor);\n\tSecondRepeatFactor : IfcVector;\nEND_ENTITY;\n\nENTITY IfcTypeObject\n SUPERTYPE OF (ONEOF\n\t(IfcTypeProduct))\n SUBTYPE OF (IfcPropertyDefinition);\n\tApplicableOccurrence : OPTIONAL IfcLabel;\n\tHasPropertySets : OPTIONAL LIST [1:?] OF UNIQUE IfcPropertySetDefinition;\n INVERSE\n\tObjectTypeOf : SET [0:1] OF IfcRelDefinesByType FOR RelatingType;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcTypeProduct\n SUPERTYPE OF (ONEOF\n\t(IfcDoorStyle\n\t,IfcElementType\n\t,IfcWindowStyle))\n SUBTYPE OF (IfcTypeObject);\n\tRepresentationMaps : OPTIONAL LIST [1:?] OF UNIQUE IfcRepresentationMap;\n\tTag : OPTIONAL IfcLabel;\n WHERE\n\tWR41 : NOT(EXISTS(SELF\\IfcTypeObject.ObjectTypeOf[1])) OR\n             (SIZEOF(QUERY(temp <* SELF\\IfcTypeObject.ObjectTypeOf[1].RelatedObjects |\n               NOT('IFC2X2_FINAL.IFCPRODUCT' IN TYPEOF(temp)))\n             ) = 0);\nEND_ENTITY;\n\nENTITY IfcUShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tCentreOfGravityInX : IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : FlangeThickness < (Depth / 2);\n\tWR2 : WebThickness < FlangeWidth;\nEND_ENTITY;\n\nENTITY IfcUnitAssignment;\n\tUnits : SET [1:?] OF IfcUnit;\nEND_ENTITY;\n\nENTITY IfcUnitaryEquipmentType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcUnitaryEquipmentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcValveType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcValveTypeEnum;\nEND_ENTITY;\n\nENTITY IfcVector\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOrientation : IfcDirection;\n\tMagnitude : IfcLengthMeasure;\n DERIVE\n\tDim : IfcDimensionCount := Orientation.Dim;\n WHERE\n\tWR1 : Magnitude >= 0.0;\nEND_ENTITY;\n\nENTITY IfcVertex\n SUPERTYPE OF (ONEOF\n\t(IfcVertexPoint))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcVertexBasedTextureMap;\n\tTextureVertices : LIST [1:?] OF IfcTextureVertex;\n\tVertexBasedGeometry : IfcPolyLoop;\nEND_ENTITY;\n\nENTITY IfcVertexLoop\n SUBTYPE OF (IfcLoop);\n\tLoopVertex : IfcVertex;\nEND_ENTITY;\n\nENTITY IfcVertexPoint\n SUBTYPE OF (IfcVertex);\n\tVertexGeometry : IfcPoint;\nEND_ENTITY;\n\nENTITY IfcVibrationIsolatorType\n SUBTYPE OF (IfcDiscreteAccessoryType);\n\tPredefinedType : IfcVibrationIsolatorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcVirtualElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcVirtualGridIntersection;\n\tIntersectingAxes : LIST [2:2] OF UNIQUE IfcGridAxis;\n\tOffsetDistances : LIST [2:3] OF IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcWall\n SUPERTYPE OF (ONEOF\n\t(IfcWallStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n WHERE\n\tWR1 : SIZEOF (QUERY(temp <* SELF\\IfcObject.HasAssociations |\n              'IFC2X2_FINAL.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)\n              )) <= 1;\nEND_ENTITY;\n\nENTITY IfcWallStandardCase\n SUBTYPE OF (IfcWall);\n WHERE\n\tWR1 : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC2X2_FINAL.IFCRELASSOCIATES.RELATEDOBJECTS') |\n                          ('IFC2X2_FINAL.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND\n                          ('IFC2X2_FINAL.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial))\n                          )) = 1;\nEND_ENTITY;\n\nENTITY IfcWallType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcWallTypeEnum;\nEND_ENTITY;\n\nENTITY IfcWasteTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcWasteTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcWaterProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tIsPotable : OPTIONAL BOOLEAN;\n\tHardness : OPTIONAL IfcIonConcentrationMeasure;\n\tAlkalinityConcentration : OPTIONAL IfcIonConcentrationMeasure;\n\tAcidityConcentration : OPTIONAL IfcIonConcentrationMeasure;\n\tImpuritiesContent : OPTIONAL IfcNormalisedRatioMeasure;\n\tPHLevel : OPTIONAL IfcPHMeasure;\n\tDissolvedSolidsContent : OPTIONAL IfcNormalisedRatioMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcWindow\n SUBTYPE OF (IfcBuildingElement);\n\tOverallHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tOverallWidth : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcWindowLiningProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tLiningDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tLiningThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTransomThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tMullionThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tFirstTransomOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tSecondTransomOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tFirstMullionOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tSecondMullionOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n WHERE\n\tWR1 : (EXISTS(LiningDepth) AND EXISTS(LiningThickness)) XOR\n            (NOT(EXISTS(LiningDepth)) AND NOT(EXISTS(LiningThickness)));\nEND_ENTITY;\n\nENTITY IfcWindowPanelProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tOperationType : IfcWindowPanelOperationEnum;\n\tPanelPosition : IfcWindowPanelPositionEnum;\n\tFrameDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tFrameThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\nEND_ENTITY;\n\nENTITY IfcWindowStyle\n SUBTYPE OF (IfcTypeProduct);\n\tConstructionType : IfcWindowStyleConstructionEnum;\n\tOperationType : IfcWindowStyleOperationEnum;\n\tParameterTakesPrecedence : BOOLEAN;\n\tSizeable : BOOLEAN;\nEND_ENTITY;\n\nENTITY IfcWorkControl\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcWorkPlan\n\t,IfcWorkSchedule))\n SUBTYPE OF (IfcControl);\n\tIdentifier : IfcIdentifier;\n\tCreationDate : IfcDateTimeSelect;\n\tCreators : OPTIONAL SET [1:?] OF IfcPerson;\n\tPurpose : OPTIONAL IfcLabel;\n\tDuration : OPTIONAL IfcTimeMeasure;\n\tTotalFloat : OPTIONAL IfcTimeMeasure;\n\tStartTime : IfcDateTimeSelect;\n\tFinishTime : OPTIONAL IfcDateTimeSelect;\n\tWorkControlType : OPTIONAL IfcWorkControlTypeEnum;\n\tUserDefinedControlType : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : (WorkControlType <> IfcWorkControlTypeEnum.USERDEFINED) OR\n            ((WorkControlType = IfcWorkControlTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcWorkControl.UserDefinedControlType));\nEND_ENTITY;\n\nENTITY IfcWorkPlan\n SUBTYPE OF (IfcWorkControl);\nEND_ENTITY;\n\nENTITY IfcWorkSchedule\n SUBTYPE OF (IfcWorkControl);\nEND_ENTITY;\n\nENTITY IfcZShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : FlangeThickness < (Depth / 2);\nEND_ENTITY;\n\nENTITY IfcZone\n SUBTYPE OF (IfcGroup);\n WHERE\n\tWR1 : SIZEOF (QUERY (temp <* SELF\\IfcGroup.IsGroupedBy.RelatedObjects |  NOT(('IFC2X2_FINAL.IFCZONE' IN TYPEOF(temp)) OR ('IFC2X2_FINAL.IFCSPACE' IN TYPEOF(temp))) )) = 0;\nEND_ENTITY;\n\nFUNCTION IfcAddToBeginOfList\n\t(AScalar : GENERIC;\n     AList   : LIST OF GENERIC)\n\t: LIST[1:?] OF GENERIC;\n  \n    LOCAL\n      Result : LIST OF GENERIC := [];\n    END_LOCAL;\n  \n    IF NOT(EXISTS(AScalar)) THEN\n      Result := AList;\n    ELSE\n      Result := Result + AScalar;\n      IF (HIINDEX(AList) >= 1) THEN\n        REPEAT i:=1 TO HIINDEX(AList);\n          Result[i+1] := AList[i];\n        END_REPEAT;\n      END_IF;\n    END_IF;\n    RETURN(Result);\nEND_FUNCTION;\n\nFUNCTION IfcBaseAxis\n\t(Dim : INTEGER; \n     Axis1, Axis2, Axis3 : IfcDirection)\n\t: LIST [2:3] OF IfcDirection;\n  \n  LOCAL\n    U : LIST [2:3] OF IfcDirection;\n    Factor : REAL;\n    D1, D2 : IfcDirection;\n  END_LOCAL;\n  \n    IF (Dim = 3) THEN \n      D1 := NVL(IfcNormalise(Axis3), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n      D2 := IfcFirstProjAxis(D1, Axis1);\n      U  := [D2, IfcSecondProjAxis(D1, D2, Axis2), D1];\n    ELSE\n      IF EXISTS(Axis1) THEN\n        D1 := IfcNormalise(Axis1);\n        U  := [D1, IfcOrthogonalComplement(D1)];\n        IF EXISTS(Axis2) THEN\n          Factor := IfcDotProduct(Axis2, U[2]);\n          IF (Factor < 0.0) THEN\n            U[2].DirectionRatios[1] := -U[2].DirectionRatios[1];\n            U[2].DirectionRatios[2] := -U[2].DirectionRatios[2];\n          END_IF;\n        END_IF;\n      ELSE\n        IF EXISTS(Axis2) THEN\n          D1 := IfcNormalise(Axis2);\n          U  := [IfcOrthogonalComplement(D1), D1];\n          U[1].DirectionRatios[1] := -U[1].DirectionRatios[1];\n          U[1].DirectionRatios[2] := -U[1].DirectionRatios[2];\n          ELSE\n            U := [IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0, 0.0]), \n                  IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0, 1.0])];\n        END_IF;\n      END_IF;\n    END_IF;\n    RETURN(U);\nEND_FUNCTION;\n\nFUNCTION IfcBooleanChoose\n\t(B : BOOLEAN ;\n       Choice1, Choice2 : Generic : Item)\n\t: Generic : Item;\n    IF B THEN\n       RETURN (Choice1);\n    ELSE\n       RETURN (Choice2);\n    END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcBuild2Axes\n\t(RefDirection : IfcDirection)\n\t: LIST [2:2] OF IfcDirection;\n  LOCAL\n    D : IfcDirection := NVL(IfcNormalise(RefDirection),\n        IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0]));\n  END_LOCAL;\n    RETURN([D, IfcOrthogonalComplement(D)]);\nEND_FUNCTION;\n\nFUNCTION IfcBuildAxes\n\t(Axis, RefDirection : IfcDirection)\n\t: LIST [3:3] OF IfcDirection;\n  LOCAL\n    D1, D2 : IfcDirection;\n  END_LOCAL;\n    D1 := NVL(IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n    D2 := IfcFirstProjAxis(D1, RefDirection);\n    RETURN ([D2, IfcNormalise(IfcCrossProduct(D1,D2)).Orientation, D1]);\nEND_FUNCTION;\n\nFUNCTION IfcCorrectDimensions\n\t(m   : IfcUnitEnum; Dim : IfcDimensionalExponents)\n\t: LOGICAL;  \n  CASE m OF\n    LENGTHUNIT : IF\n      Dim = (IfcDimensionalExponents (1, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    MASSUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 1, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    TIMEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 1, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICCURRENTUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    THERMODYNAMICTEMPERATUREUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 1, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    AMOUNTOFSUBSTANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 1, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    LUMINOUSINTENSITYUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    PLANEANGLEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    SOLIDANGLEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    AREAUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    VOLUMEUNIT : IF\n      Dim = (IfcDimensionalExponents (3, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n  \n    ABSORBEDDOSEUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    RADIOACTIVITYUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICCAPACITANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (-2, 1, 4, 1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    DOSEEQUIVALENTUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICCHARGEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 1, 1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICCONDUCTANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (-2, -1, 3, 2, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICVOLTAGEUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -3, -1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICRESISTANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -3, -2, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ENERGYUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    FORCEUNIT : IF\n      Dim = (IfcDimensionalExponents (1, 1, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    FREQUENCYUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    INDUCTANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -2, -2, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ILLUMINANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (-2, 0, 0, 0, 0, 0, 1))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    LUMINOUSFLUXUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    MAGNETICFLUXUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -2, -1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    MAGNETICFLUXDENSITYUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 1, -2, -1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    POWERUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -3, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    PRESSUREUNIT : IF\n      Dim = (IfcDimensionalExponents (-1, 1, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n  \n    OTHERWISE :\n      RETURN (UNKNOWN);\n  END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcCorrectLocalPlacement\n\t(AxisPlacement:IfcAxis2Placement; \n     RelPlacement : IfcObjectPlacement)\n\t: LOGICAL;\n  \n    IF (EXISTS(RelPlacement)) THEN\n      IF ('IFC2X2_FINAL.IFCGRIDPLACEMENT' IN TYPEOF(RelPlacement)) THEN\n        RETURN(?);\n      END_IF;\n      IF ('IFC2X2_FINAL.IFCLOCALPLACEMENT' IN TYPEOF(RelPlacement)) THEN\n        IF ('IFC2X2_FINAL.IFCAXIS2PLACEMENT2D' IN TYPEOF(AxisPlacement)) THEN\n          RETURN(TRUE);\n        END_IF;\n        IF ('IFC2X2_FINAL.IFCAXIS2PLACEMENT3D' IN TYPEOF(AxisPlacement)) THEN\n          IF (RelPlacement.RelativePlacement.Dim = 3) THEN\n            RETURN(TRUE);\n          ELSE\n            RETURN(FALSE);\n          END_IF;\n        END_IF;\n      END_IF;\n    ELSE\n      RETURN(TRUE);  \n    END_IF;\n    RETURN(?);\nEND_FUNCTION;\n\nFUNCTION IfcCorrectObjectAssignment\n\t(Constraint: IfcObjectTypeEnum; Objects : SET[1:?] OF IfcObject)\n\t: LOGICAL;\n    \n  LOCAL\n    Count : INTEGER := 0;\n  END_LOCAL;\n  \n    IF NOT(EXISTS(Constraint)) THEN \n      RETURN(?);\n    END_IF;\n  \n    CASE Constraint OF\n      IfcObjectTypeEnum.NOTDEFINED : RETURN(TRUE);\n      IfcObjectTypeEnum.PRODUCT :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X2_FINAL.IFCPRODUCT' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.PROCESS :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X2_FINAL.IFCPROCESS' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.CONTROL :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X2_FINAL.IFCCONTROL' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.RESOURCE :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X2_FINAL.IFCRESOURCE' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.ACTOR :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X2_FINAL.IFCACTOR' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.GROUP :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X2_FINAL.IFCGROUP' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.PROJECT :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X2_FINAL.IFCPROJECT' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      OTHERWISE : RETURN(?);\n    END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcCrossProduct\n\t(Arg1, Arg2 : IfcDirection)\n\t: IfcVector;\n  LOCAL\n    Mag : REAL;\n    Res : IfcDirection;\n    V1,V2  : LIST[3:3] OF REAL;\n    Result : IfcVector;\n  END_LOCAL;\n  \n    IF (NOT EXISTS (Arg1) OR (Arg1.Dim = 2)) OR (NOT EXISTS (Arg2) OR (Arg2.Dim = 2)) THEN\n      RETURN(?);\n    ELSE\n      BEGIN\n        V1  := IfcNormalise(Arg1).DirectionRatios;\n        V2  := IfcNormalise(Arg2).DirectionRatios;\n        Res := IfcRepresentationItem() || IfcGeometricRepresentationItem () \n               || IfcDirection([(V1[2]*V2[3] - V1[3]*V2[2]), (V1[3]*V2[1] - V1[1]*V2[3]), (V1[1]*V2[2] - V1[2]*V2[1])]);\n        Mag := 0.0;\n        REPEAT i := 1 TO 3;\n          Mag := Mag + Res.DirectionRatios[i]*Res.DirectionRatios[i];\n        END_REPEAT;\n        IF (Mag > 0.0) THEN\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Res, SQRT(Mag));\n        ELSE\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Arg1, 0.0);\n        END_IF;\n        RETURN(Result);\n      END;\n    END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcCurveDim\n\t(Curve : IfcCurve)\n\t: IfcDimensionCount;\n  \n    IF ('IFC2X2_FINAL.IFCLINE' IN TYPEOF(Curve))\n      THEN RETURN(Curve.Pnt.Dim);\n    END_IF;\n    IF ('IFC2X2_FINAL.IFCCONIC' IN TYPEOF(Curve))\n      THEN RETURN(Curve.Position.Dim);\n    END_IF;\n    IF ('IFC2X2_FINAL.IFCPOLYLINE' IN TYPEOF(Curve))\n      THEN RETURN(Curve.Points[1].Dim);\n    END_IF;\n    IF ('IFC2X2_FINAL.IFCTRIMMEDCURVE' IN TYPEOF(Curve))\n      THEN RETURN(IfcCurveDim(Curve.BasisCurve));\n    END_IF;\n    IF ('IFC2X2_FINAL.IFCCOMPOSITECURVE' IN TYPEOF(Curve))\n      THEN RETURN(Curve.Segments[1].Dim);\n    END_IF;\n    IF ('IFC2X2_FINAL.IFCBSPLINECURVE' IN TYPEOF(Curve))\n      THEN RETURN(Curve.ControlPointsList[1].Dim);\n    END_IF;\n    IF ('IFC2X2_FINAL.IFCOFFSETCURVE2D' IN TYPEOF(Curve))\n      THEN RETURN(2); \n    END_IF;\n    IF ('IFC2X2_FINAL.IFCOFFSETCURVE3D' IN TYPEOF(Curve))\n      THEN RETURN(3);\n    END_IF;\n  RETURN (?);\nEND_FUNCTION;\n\nFUNCTION IfcCurveWeightsPositive\n\t(B: IfcRationalBezierCurve)\n\t: BOOLEAN;\n     LOCAL\n       Result : BOOLEAN := TRUE;\n     END_LOCAL;\n  \n     REPEAT i := 0 TO B.UpperIndexOnControlPoints;\n       IF B.Weights[i] <= 0.0  THEN\n         Result := FALSE;\n         RETURN(Result);\n       END_IF;\n     END_REPEAT;\n     RETURN(Result);\nEND_FUNCTION;\n\nFUNCTION IfcDeriveDimensionalExponents\n\t(x : IfcUnit)\n\t: IfcDimensionalExponents;  \n    LOCAL\n      Result : IfcDimensionalExponents :=\n               IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 0);  \n    END_LOCAL;\n    IF 'IFC2X2_FINAL.IFCDERIVEDUNIT' IN TYPEOF(x) THEN\n      REPEAT i := LOINDEX(x.Elements) TO HIINDEX(x.Elements);\n        Result.LengthExponent :=        Result.LengthExponent +\n          (x.Elements[i].Exponent *\n           x.Elements[i].Unit.Dimensions.LengthExponent);\n        Result.MassExponent :=        Result.MassExponent  +\n          (x.Elements[i].Exponent *\n           x.Elements[i].Unit.Dimensions.MassExponent);\n        Result.TimeExponent :=        Result.TimeExponent +\n          (x.Elements[i].Exponent *\n           x.Elements[i].Unit.Dimensions.TimeExponent);\n        Result.ElectricCurrentExponent :=        Result.ElectricCurrentExponent +\n          (x.Elements[i].Exponent *\n           x.Elements[i].Unit.Dimensions.ElectricCurrentExponent);\n        Result.ThermodynamicTemperatureExponent :=\n          Result.ThermodynamicTemperatureExponent +\n          (x.Elements[i].Exponent *\n           x.Elements[i].Unit.Dimensions.ThermodynamicTemperatureExponent);\n        Result.AmountOfSubstanceExponent :=\n          Result.AmountOfSubstanceExponent +        (x.Elements[i].Exponent *\n           x.Elements[i].Unit.Dimensions.AmountOfSubstanceExponent);\n        Result.LuminousIntensityExponent :=\n          Result.LuminousIntensityExponent +        (x.Elements[i].Exponent *\n           x.Elements[i].Unit.Dimensions.LuminousIntensityExponent);\n      END_REPEAT;  \n    ELSE \n      Result := x.Dimensions;  \n    END_IF;  \n  RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcDimensionsForSiUnit\n\t(n : IfcSiUnitName )\n\t: IfcDimensionalExponents;\n    CASE n OF\n      METRE          : RETURN (IfcDimensionalExponents\n                               (1, 0, 0, 0, 0, 0, 0));\n      SQUARE_METRE   : RETURN (IfcDimensionalExponents\n                               (2, 0, 0, 0, 0, 0, 0));\n      CUBIC_METRE    : RETURN (IfcDimensionalExponents\n                               (3, 0, 0, 0, 0, 0, 0));\n      GRAM           : RETURN (IfcDimensionalExponents\n                               (0, 1, 0, 0, 0, 0, 0));\n      SECOND         : RETURN (IfcDimensionalExponents\n                               (0, 0, 1, 0, 0, 0, 0));\n      AMPERE         : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 1, 0, 0, 0));\n      KELVIN         : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 1, 0, 0));\n      MOLE           : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 1, 0));\n      CANDELA        : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 1));\n      RADIAN         : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 0));\n      STERADIAN      : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 0));\n      HERTZ          : RETURN (IfcDimensionalExponents\n                               (0, 0, -1, 0, 0, 0, 0));\n      NEWTON         : RETURN (IfcDimensionalExponents\n                               (1, 1, -2, 0, 0, 0, 0));\n      PASCAL         : RETURN (IfcDimensionalExponents\n                               (-1, 1, -2, 0, 0, 0, 0));\n      JOULE          : RETURN (IfcDimensionalExponents\n                               (2, 1, -2, 0, 0, 0, 0));\n      WATT           : RETURN (IfcDimensionalExponents\n                               (2, 1, -3, 0, 0, 0, 0));\n      COULOMB        : RETURN (IfcDimensionalExponents\n                               (0, 0, 1, 1, 0, 0, 0));\n      VOLT           : RETURN (IfcDimensionalExponents\n                               (2, 1, -3, -1, 0, 0, 0));\n      FARAD          : RETURN (IfcDimensionalExponents\n                               (-2, -1, 4, 1, 0, 0, 0));\n      OHM            : RETURN (IfcDimensionalExponents\n                               (2, 1, -3, -2, 0, 0, 0));\n      SIEMENS        : RETURN (IfcDimensionalExponents\n                               (-2, -1, 3, 2, 0, 0, 0));\n      WEBER          : RETURN (IfcDimensionalExponents\n                               (2, 1, -2, -1, 0, 0, 0));\n      TESLA          : RETURN (IfcDimensionalExponents\n                               (0, 1, -2, -1, 0, 0, 0));\n      HENRY          : RETURN (IfcDimensionalExponents\n                               (2, 1, -2, -2, 0, 0, 0));\n      DEGREE_CELSIUS : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 1, 0, 0));\n      LUMEN          : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 1));\n      LUX            : RETURN (IfcDimensionalExponents\n                               (-2, 0, 0, 0, 0, 0, 1));\n      BECQUEREL      : RETURN (IfcDimensionalExponents\n                               (0, 0, -1, 0, 0, 0, 0));\n      GRAY           : RETURN (IfcDimensionalExponents\n                               (2, 0, -2, 0, 0, 0, 0));\n      SIEVERT        : RETURN (IfcDimensionalExponents\n                               (2, 0, -2, 0, 0, 0, 0));\n      OTHERWISE      : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 0));\n    END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcDotProduct\n\t(Arg1, Arg2 : IfcDirection)\n\t: REAL;\n  LOCAL\n    Scalar : REAL;\n    Vec1, Vec2 : IfcDirection;\n    Ndim   : INTEGER;\n  END_LOCAL;\n  \n    IF NOT EXISTS (Arg1) OR NOT EXISTS (Arg2) THEN\n      Scalar := ?;\n    ELSE\n      IF (Arg1.Dim <> Arg2.Dim) THEN\n        Scalar := ?;\n      ELSE\n        BEGIN\n          Vec1 := IfcNormalise(Arg1);\n          Vec2 := IfcNormalise(Arg2);\n          Ndim := Arg1.Dim;\n          Scalar := 0.0;\n          REPEAT i := 1 TO Ndim;\n            Scalar := Scalar + Vec1.DirectionRatios[i]*Vec2.DirectionRatios[i];\n          END_REPEAT;\n        END;\n      END_IF;\n    END_IF;\n    RETURN (Scalar);\nEND_FUNCTION;\n\nFUNCTION IfcFirstProjAxis\n\t(ZAxis, Arg : IfcDirection)\n\t: IfcDirection;\n  LOCAL\n    XAxis : IfcDirection;\n    V     : IfcDirection;\n    Z     : IfcDirection;\n    XVec  : IfcVector;\n  END_LOCAL;\n  \n    IF (NOT EXISTS(ZAxis)) THEN\n      RETURN (?) ;\n    ELSE\n      Z := IfcNormalise(ZAxis);\n      IF NOT EXISTS(Arg) THEN\n        IF (Z.DirectionRatios <> [1.0,0.0,0.0]) THEN\n          V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0,0.0]);\n        ELSE\n          V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]);\n        END_IF;\n      ELSE\n        IF (Arg.Dim <> 3) THEN\n          RETURN (?) ;\n        END_IF;\n        IF ((IfcCrossProduct(Arg,Z).Magnitude) = 0.0) THEN\n          RETURN (?);\n        ELSE\n          V := IfcNormalise(Arg);\n        END_IF;\n      END_IF;\n      XVec  := IfcScalarTimesVector(IfcDotProduct(V, Z), Z);\n      XAxis := IfcVectorDifference(V, XVec).Orientation;\n      XAxis := IfcNormalise(XAxis);\n    END_IF;\n    RETURN(XAxis);\nEND_FUNCTION;\n\nFUNCTION IfcLeapYear\n\t(Year : IfcYearNumber)\n\t: BOOLEAN;\n  \n  IF ((((Year MOD 4) = 0) AND ((Year MOD 100) <> 0)) OR\n              ((Year MOD 400) = 0)) THEN\n    RETURN(TRUE);\n  ELSE\n    RETURN(FALSE);\n  END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcListToArray\n\t(Lis : LIST [0:?] OF GENERIC : T;\n         Low,U : INTEGER)\n\t: ARRAY OF GENERIC : T;\n     LOCAL\n       N   : INTEGER;\n       Res : ARRAY [Low:U] OF GENERIC : T;\n     END_LOCAL;\n        \n     N := SIZEOF(Lis);\n     IF (N <> (U-Low +1)) THEN\n       RETURN(?);\n     ELSE\n       Res := [Lis[1] : N];\n       REPEAT i := 2 TO N;\n         Res[Low+i-1] := Lis[i];\n       END_REPEAT;\n       RETURN(Res);\n     END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcLoopHeadToTail\n\t(ALoop : IfcEdgeLoop)\n\t: LOGICAL;\n     LOCAL\n       N : INTEGER;\n       P : LOGICAL := TRUE;\n     END_LOCAL;\n       \n       N := SIZEOF (ALoop.EdgeList);\n       REPEAT i := 2 TO N;\n         P := P AND (ALoop.EdgeList[i-1].EdgeEnd :=:\n                     ALoop.EdgeList[i].EdgeStart);\n       END_REPEAT;     \n       RETURN (P);\nEND_FUNCTION;\n\nFUNCTION IfcMlsTotalThickness\n\t(LayerSet : IfcMaterialLayerSet)\n\t: IfcLengthMeasure;\n    LOCAL\n      Max : IfcLengthMeasure := LayerSet.MaterialLayers[1].LayerThickness;    \n    END_LOCAL;\n  \n    IF SIZEOF(LayerSet.MaterialLayers) > 1 THEN\n      REPEAT i := 2 TO HIINDEX(LayerSet.MaterialLayers);\n         Max := Max + LayerSet.MaterialLayers[i].LayerThickness;\n      END_REPEAT;\n    END_IF;\n    RETURN (Max);\nEND_FUNCTION;\n\nFUNCTION IfcNoOfLayers\n\t(Element : IfcElement )\n\t: INTEGER;\n      \n      LOCAL\n        Association : BAG OF IfcRelAssociates := [];\n        MaterialAssociation : SET OF IfcRelAssociatesMaterial := [];\n      END_LOCAL;\n      \n      Association := USEDIN(Element, 'IFC2X2_FINAL.IFCRELASSOCIATES.RELATEDOBJECTS');\n   \n      IF SIZEOF (Association) > 0 THEN\n        REPEAT i := 1 TO HIINDEX(Association);\n          IF ('IFC2X2_FINAL.IFCRELASSOCIATESMATERIAL' IN TYPEOF(Association[i])) THEN \n            MaterialAssociation := MaterialAssociation + Association[i];\n          END_IF;\n        END_REPEAT;\n      END_IF;\n      \n      IF (SIZEOF(MaterialAssociation) <> 1) THEN\n        RETURN (?);\n      ELSE\n        IF 'IFC2X2_FINAL.IFCMATERIAL' IN TYPEOF(MaterialAssociation[1].RelatingMaterial) THEN\n           RETURN (1);\n        END_IF;\n        IF 'IFC2X2_FINAL.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(MaterialAssociation[1].RelatingMaterial) THEN\n           RETURN (SIZEOF(MaterialAssociation[1].RelatingMaterial.ForLayerSet.MaterialLayers));\n        END_IF;\n        IF 'IFC2X2_FINAL.IFCMATERIALLIST' IN TYPEOF(MaterialAssociation[1].RelatingMaterial) THEN\n           RETURN (?);\n        END_IF;\n      END_IF;\n    \n      RETURN (?);\nEND_FUNCTION;\n\nFUNCTION IfcNormalise\n\t(Arg : IfcVectorOrDirection)\n\t: IfcVectorOrDirection;\n  LOCAL\n    Ndim : INTEGER;\n    V    : IfcDirection\n         := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]); \n    Vec  : IfcVector \n         := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (\n              IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]), 1.);\n    Mag  : REAL;\n    Result : IfcVectorOrDirection\n           := V;\n  END_LOCAL;\n  \n    IF NOT EXISTS (Arg) THEN\n      RETURN (?);\n    ELSE\n      Ndim := Arg.Dim;\n      IF 'IFC2X2_FINAL.IFCVECTOR' IN TYPEOF(Arg) THEN\n        BEGIN\n          Vec := Arg;\n          V := Arg.Orientation;\n          IF Arg.Magnitude = 0.0 THEN\n            RETURN(?);\n          ELSE\n            Vec.Magnitude := 1.0;\n          END_IF;\n        END;\n      ELSE\n        V := Arg;\n      END_IF;\n      Mag := 0.0;\n        REPEAT i := 1 TO Ndim;\n          Mag := Mag + V.DirectionRatios[i]*V.DirectionRatios[i];\n        END_REPEAT;\n      IF Mag > 0.0 THEN\n        Mag := SQRT(Mag);\n        REPEAT i := 1 TO Ndim;\n          V.DirectionRatios[i] := V.DirectionRatios[i]/Mag;\n        END_REPEAT;\n        IF 'IFC2X2_FINAL.IFCVECTOR' IN TYPEOF(arg) THEN\n          Vec.Orientation := V;\n          Result := Vec;\n        ELSE\n          Result := V;\n        END_IF;\n      ELSE\n        RETURN(?);\n      END_IF;\n    END_IF;\n    RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcOrthogonalComplement\n\t(Vec : IfcDirection)\n\t: IfcDirection;\n  LOCAL\n    Result : IfcDirection ;\n  END_LOCAL;\n    IF NOT EXISTS (Vec) OR (Vec.Dim <> 2) THEN\n      RETURN(?);\n    ELSE\n      Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([-Vec.DirectionRatios[2], Vec.DirectionRatios[1]]);\n      RETURN(Result);\n    END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcPathHeadToTail\n\t(APath : IfcPath)\n\t: LOGICAL;\n     LOCAL\n       N : INTEGER := 0;\n       P : LOGICAL := UNKNOWN;\n     END_LOCAL;\n       N := SIZEOF (APath.EdgeList);\n     REPEAT i := 2 TO N;\n        P := P AND (APath.EdgeList[i-1].EdgeEnd :=:\n                    APath.EdgeList[i].EdgeStart);\n     END_REPEAT;\n     RETURN (P);\nEND_FUNCTION;\n\nFUNCTION IfcSameAxis2Placement\n\t(ap1, ap2 : IfcAxis2Placement; Epsilon : REAL)\n\t: LOGICAL;\n  \n    RETURN (IfcSameDirection(ap1.P[1],ap2.P[1],Epsilon) AND\n            IfcSameDirection(ap1.P[2],ap2.P[2],Epsilon) AND\n            IfcSameCartesianPoint(ap1.Location,ap1.Location,Epsilon));\nEND_FUNCTION;\n\nFUNCTION IfcSameCartesianPoint\n\t(cp1, cp2 : IfcCartesianPoint; Epsilon : REAL)\n\t: LOGICAL;\n  \n    RETURN (IfcSameValue(cp1.Coordinates[1],cp2.Coordinates[1],Epsilon) AND\n            IfcSameValue(cp1.Coordinates[2],cp2.Coordinates[2],Epsilon) AND\n            IfcSameValue(NVL(cp1.Coordinates[3],0.0),NVL(cp2.Coordinates[3],0.0),Epsilon));\nEND_FUNCTION;\n\nFUNCTION IfcSameDirection\n\t(dir1, dir2 : IfcDirection; Epsilon : REAL)\n\t: LOGICAL;\n  \n    RETURN (IfcSameValue(dir1.DirectionRatios[1],dir2.DirectionRatios[1],Epsilon) AND\n            IfcSameValue(dir1.DirectionRatios[2],dir2.DirectionRatios[2],Epsilon) AND\n            IfcSameValue(NVL(dir1.DirectionRatios[3],0.0),NVL(dir2.DirectionRatios[3],0.0),Epsilon));\nEND_FUNCTION;\n\nFUNCTION IfcSameValidPrecision\n\t(Epsilon1, Epsilon2 : REAL)\n\t: LOGICAL;\n  LOCAL\n    ValidEps1, ValidEps2 : REAL;\n    DefaultEps           : REAL := 0.00000001;\n    DerivationOfEps      : REAL := 1.001;\n    UpperEps             : REAL := 1.0;\n  END_LOCAL;\n  \n  \n  \n  \n  \n  \n    ValidEps1 := NVL(Epsilon1, DefaultEps);\n    ValidEps2 := NVL(Epsilon2, DefaultEps);\n    RETURN ((0.0 < ValidEps1) AND (ValidEps1 <= DerivationOfEps * ValidEps2) AND (ValidEps2 <= DerivationOfEps * ValidEps1) AND (ValidEps2 < UpperEps));\nEND_FUNCTION;\n\nFUNCTION IfcSameValue\n\t(Value1, Value2 : REAL; Epsilon : REAL)\n\t: LOGICAL;\n  LOCAL\n    ValidEps : REAL;\n  END_LOCAL;\n  \n  \n  \n  \n    ValidEps := NVL(Epsilon, 0.00000001);\n    RETURN ((Value1 + ValidEps > Value2) AND (Value1 < Value2 + ValidEps));\nEND_FUNCTION;\n\nFUNCTION IfcScalarTimesVector\n\t(Scalar : REAL; Vec : IfcVectorOrDirection)\n\t: IfcVector;\n  LOCAL\n    V : IfcDirection;\n    Mag : REAL;\n    Result : IfcVector;\n  END_LOCAL;\n  \n    IF NOT EXISTS (Scalar) OR NOT EXISTS (Vec) THEN\n      RETURN (?) ;\n    ELSE\n      IF 'IFC2X2_FINAL.IFCVECTOR' IN TYPEOF (Vec) THEN\n        V := Vec.Orientation;\n        Mag := Scalar * Vec.Magnitude;\n      ELSE\n        V := Vec;\n        Mag := Scalar;\n      END_IF;\n      IF (Mag < 0.0 ) THEN\n        REPEAT i := 1 TO SIZEOF(V.DirectionRatios);\n          V.DirectionRatios[i] := -V.DirectionRatios[i];\n        END_REPEAT;\n        Mag := -Mag;\n      END_IF;\n      Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(IfcNormalise(V), Mag);\n    END_IF;\n    RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcSecondProjAxis\n\t(ZAxis, XAxis, Arg: IfcDirection)\n\t: IfcDirection;\n  LOCAL\n    YAxis : IfcVector;\n    V     : IfcDirection;\n    Temp  : IfcVector;\n  END_LOCAL;\n  \n    IF NOT EXISTS(Arg) THEN\n      V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]);\n    ELSE\n      V := Arg;\n    END_IF;\n    Temp  := IfcScalarTimesVector(IfcDotProduct(V, ZAxis), ZAxis);\n    YAxis := IfcVectorDifference(V, Temp);\n    Temp  := IfcScalarTimesVector(IfcDotProduct(V, XAxis), XAxis);\n    YAxis := IfcVectorDifference(YAxis, Temp);\n    YAxis := IfcNormalise(YAxis);\n    RETURN(YAxis.Orientation);\nEND_FUNCTION;\n\nFUNCTION IfcShapeRepresentationTypes\n\t(RepType : IfcLabel; Items : SET OF IfcRepresentationItem)\n\t: LOGICAL;\n      \n      LOCAL\n        Count : INTEGER := 0;\n      END_LOCAL;\n  \n      CASE RepType OF \n      'Curve2D' :\n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCCURVE' IN TYPEOF(temp)) \n                   AND (temp.Dim = 2)));\n        END;\n      'GeometricSet' : \n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCGEOMETRICSET' IN TYPEOF(temp))\n                   OR ('IFC2X2_FINAL.IFCPOINT' IN TYPEOF(temp))\n                   OR ('IFC2X2_FINAL.IFCCURVE' IN TYPEOF(temp))\n                   OR ('IFC2X2_FINAL.IFCSURFACE' IN TYPEOF(temp))));\n        END;\n      'GeometricCurveSet' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCGEOMETRICCURVESET' IN TYPEOF(temp))\n                   OR ('IFC2X2_FINAL.IFCGEOMETRICSET' IN TYPEOF(temp))\n                   OR ('IFC2X2_FINAL.IFCPOINT' IN TYPEOF(temp))\n                   OR ('IFC2X2_FINAL.IFCCURVE' IN TYPEOF(temp))));\n           REPEAT i:=1 TO HIINDEX(Items);  \n             IF ('IFC2X2_FINAL.IFCGEOMETRICSET' IN TYPEOF(Items[i]))\n             THEN\n               IF (SIZEOF(QUERY(temp <* Items[i]\\IfcGeometricSet.Elements | 'IFC2X2_FINAL.IFCSURFACE' IN TYPEOF(temp))) > 0)\n               THEN\n                 Count := Count - 1;\n               END_IF;\n             END_IF;\n           END_REPEAT;\n        END;\n      'SurfaceModel' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                     'IFC2X2_FINAL.IFCSHELLBASEDSURFACEMODEL',\n                     'IFC2X2_FINAL.IFCFACEBASEDSURFACEMODEL',\n                     'IFC2X2_FINAL.IFCFACETEDBREP',\n                     'IFC2X2_FINAL.IFCFACETEDBREPWITHVOIDS'] * TYPEOF(temp)) >= 1\n                   ));      \n        END;\n      'SolidModel' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCSOLIDMODEL' IN TYPEOF(temp))));            \n        END;\n      'SweptSolid' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCSWEPTAREASOLID' IN TYPEOF(temp))));            \n        END;\n      'CSG' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCBOOLEANRESULT' IN TYPEOF(temp))));            \n        END;\n      'Clipping' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(temp))));            \n        END;\n      'AdvancedSweptSolid' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCSURFACECURVESWEPTAREASOLID' IN TYPEOF(temp))\n                   OR ('IFC2X2_FINAL.IFCSWEPTDISKSOLID' IN TYPEOF(temp))));      \n        END;\n      'Brep' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCFACETEDBREP' IN TYPEOF(temp))\n                   OR ('IFC2X2_FINAL.IFCFACETEDBREPWITHVOIDS' IN TYPEOF(temp))));      \n        END;\n      'BoundingBox' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCBOUNDINGBOX' IN TYPEOF(temp))));\n          IF (SIZEOF(Items) > 1)\n          THEN\n            Count := 0;\n          END_IF;   \n        END;\n      'SectionedSpine' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCSECTIONEDSPINE' IN TYPEOF(temp))));      \n        END;\n      'MappedRepresentation' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCMAPPEDITEM' IN TYPEOF(temp)))); \n          IF (SIZEOF(Items) > 1)\n          THEN\n            Count := 0;\n          END_IF;   \n        END;\n       OTHERWISE : RETURN(?);\n      END_CASE;\n      RETURN (Count = SIZEOF(Items));\nEND_FUNCTION;\n\nFUNCTION IfcTopologyRepresentationTypes\n\t(RepType : IfcLabel; Items : SET OF IfcRepresentationItem)\n\t: LOGICAL;\n      \n      LOCAL\n        Count : INTEGER := 0;\n      END_LOCAL;\n  \n      CASE RepType OF \n      'Vertex' :\n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X2_FINAL.IFCVERTEX' IN TYPEOF(temp))));\n        END;\n      'Edge' : \n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X2_FINAL.IFCEDGE' IN TYPEOF(temp))));\n        END;\n      'Path' : \n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X2_FINAL.IFCPATH' IN TYPEOF(temp))));\n        END;\n      'Face' : \n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X2_FINAL.IFCFACE' IN TYPEOF(temp))));\n        END;\n      'Shell' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X2_FINAL.IFCOPENSHELL' IN TYPEOF(temp))\n                      OR ('IFC2X2_FINAL.IFCCLOSEDSHELL' IN TYPEOF(temp))));\n        END;\n      'Undefined': RETURN(TRUE);\n       OTHERWISE : RETURN(?);\n      END_CASE;\n      RETURN (Count = SIZEOF(Items));\nEND_FUNCTION;\n\nFUNCTION IfcUniquePropertyName\n\t(Properties : SET [1:?] OF IfcProperty)\n\t: LOGICAL;\n  \n  LOCAL\n    Names : SET OF IfcIdentifier := [];\n  END_LOCAL;\n  \n  REPEAT i:=1 TO HIINDEX(Properties);\n    Names := Names + Properties[i].Name;\n  END_REPEAT;\n  RETURN (SIZEOF(Names) = SIZEOF(Properties));\nEND_FUNCTION;\n\nFUNCTION IfcValidCalendarDate\n\t(Date : IfcCalendarDate)\n\t: LOGICAL;\n  IF NOT ({1 <= Date.DayComponent <= 31}) THEN    \n    RETURN(FALSE);  \n  END_IF;\n  CASE Date.MonthComponent OF\n    4         : RETURN({ 1<= Date.DayComponent <= 30});\n    6         : RETURN({ 1<= Date.DayComponent <= 30});\n    9         : RETURN({ 1<= Date.DayComponent <= 30});\n    11        : RETURN({ 1<= Date.DayComponent <= 30});    \n    2         :    \n    BEGIN\n      IF (IfcLeapYear(Date.YearComponent)) THEN\n        RETURN({ 1<= Date.DayComponent <= 29});      \n      ELSE\n        RETURN({ 1<= Date.DayComponent <= 28});      \n      END_IF;    \n    END;\n    OTHERWISE : RETURN(TRUE);  \n  END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcValidTime\n\t(Time: IfcLocalTime)\n\t: BOOLEAN;\n  IF EXISTS (Time.SecondComponent) THEN\n    RETURN (EXISTS (Time.MinuteComponent));  \n  ELSE    \n    RETURN (TRUE);  \n  END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcVectorDifference\n\t(Arg1, Arg2 : IfcVectorOrDirection)\n\t: IfcVector;\n  LOCAL\n    Result : IfcVector;\n    Res, Vec1, Vec2 : IfcDirection;\n    Mag, Mag1, Mag2 : REAL;\n    Ndim : INTEGER;\n  END_LOCAL;\n  \n    IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN\n      RETURN (?) ;\n    ELSE\n      BEGIN\n        IF 'IFC2X2_FINAL.IFCVECTOR' IN TYPEOF(Arg1) THEN\n          Mag1 := Arg1.Magnitude;\n          Vec1 := Arg1.Orientation;\n        ELSE\n          Mag1 := 1.0;\n          Vec1 := Arg1;\n        END_IF;\n        IF 'IFC2X2_FINAL.IFCVECTOR' IN TYPEOF(Arg2) THEN\n          Mag2 := Arg2.Magnitude;\n          Vec2 := Arg2.Orientation;\n        ELSE\n          Mag2 := 1.0;\n          Vec2 := Arg2;\n        END_IF;\n        Vec1 := IfcNormalise (Vec1);\n        Vec2 := IfcNormalise (Vec2);\n        Ndim := SIZEOF(Vec1.DirectionRatios);\n        Mag  := 0.0;\n        IF (Ndim = 2) THEN\n          Res := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.,0.]);\n        ELSE\n          Res := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.,0.,0.]);\n        END_IF;\n        Res.DirectionRatios := [0.0:Ndim];\n        REPEAT i := 1 TO Ndim;\n          Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] + Mag2*Vec2.DirectionRatios[i];\n          Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]);\n        END_REPEAT;\n        IF (Mag > 0.0 ) THEN\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag));\n        ELSE\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0);\n        END_IF;\n      END;\n    END_IF;\n    RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcVectorSum\n\t(Arg1, Arg2 : IfcVectorOrDirection)\n\t: IfcVector;\n  LOCAL\n    Result : IfcVector;\n    Res, Vec1, Vec2 : IfcDirection;\n    Mag, Mag1, Mag2 : REAL;\n    Ndim : INTEGER;\n  END_LOCAL;\n  \n    IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN\n      RETURN (?) ;\n    ELSE\n      BEGIN\n        IF 'IFC2X2_FINAL.IFCVECTOR' IN TYPEOF(Arg1) THEN\n          Mag1 := Arg1.Magnitude;\n          Vec1 := Arg1.Orientation;\n        ELSE\n          Mag1 := 1.0;\n          Vec1 := Arg1;\n        END_IF;\n        IF 'IFC2X2_FINAL.IFCVECTOR' IN TYPEOF(Arg2) THEN\n          Mag2 := Arg2.Magnitude;\n          Vec2 := Arg2.Orientation;\n        ELSE\n          Mag2 := 1.0;\n          Vec2 := Arg2;\n        END_IF;\n        Vec1 := IfcNormalise (Vec1);\n        Vec2 := IfcNormalise (Vec2);\n        Ndim := SIZEOF(Vec1.DirectionRatios);\n        Mag  := 0.0;\n        Res  := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([]);\n        REPEAT i := 1 TO Ndim;\n          Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] +\n                                       Mag2*Vec2.DirectionRatios[i];\n          Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]);\n        END_REPEAT;\n        IF (Mag > 0.0 ) THEN\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag));\n        ELSE\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0);\n        END_IF;\n      END;\n    END_IF;\n    RETURN (Result);\nEND_FUNCTION;\n\nRULE IfcPlacementNotShared FOR \n\t(IfcObjectPlacement);\n      LOCAL\n    \n    IsPlacementShared : LOGICAL := FALSE;\n    \n  END_LOCAL;\n    \n  IF (SIZEOF(IfcObjectPlacement) > 0) THEN\n    \n    REPEAT i := LOINDEX(IfcObjectPlacement)   TO HIINDEX(IfcObjectPlacement);\n    \n      IF (SIZEOF(USEDIN(IfcObjectPlacement[i],   'IFC2X2_FINAL.IFCPRODUCT.OBJECTPLACEMENT')) > 1) THEN\n    \n        IsPlacementShared := TRUE;\n    \n      END_IF;\n    \n    END_REPEAT;\n    \n  END_IF;\n    \n\n    WHERE\n      WR1 : IsPlacementShared = FALSE;\nEND_RULE;\n\nRULE IfcRepresentationContextSameWCS FOR \n\t(IfcGeometricRepresentationContext);\n    LOCAL\n      IsDifferent  : LOGICAL := FALSE;\n    END_LOCAL;\n      IF (SIZEOF(IfcGeometricRepresentationContext) > 1)\n      THEN\n        REPEAT i := 2 TO HIINDEX(IfcGeometricRepresentationContext);\n          IF (IfcGeometricRepresentationContext[1].WorldCoordinateSystem :<>: IfcGeometricRepresentationContext[i].WorldCoordinateSystem)\n          THEN\n            IsDifferent := (NOT(IfcSameValidPrecision(IfcGeometricRepresentationContext[1].Precision,\n                                                      IfcGeometricRepresentationContext[i].Precision)))\n                        OR (NOT(IfcSameAxis2Placement(IfcGeometricRepresentationContext[1].WorldCoordinateSystem,\n                                                      IfcGeometricRepresentationContext[i].WorldCoordinateSystem,\n                                                      IfcGeometricRepresentationContext[1].Precision)));\n          END_IF;\n        END_REPEAT;\n      END_IF;\n    WHERE\n      WR1 : IsDifferent = FALSE;\nEND_RULE;\n\nRULE IfcSingleProjectInstance FOR \n\t(IfcProject);\n    WHERE\n      WR1 : SIZEOF(IfcProject) <= 1;\nEND_RULE;\n\nEND_SCHEMA;\n"
  },
  {
    "path": "Install/Program Files to Install/IFC2X2_ADD1.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<!-- created with EXPTOOL V20070502 (perl 5 program) written by Thomas Liebich, AEC3, tl@aec3.de -->\r\n<!-- validated with XMLspy2007 sp2 (http://www.xmlspy.com) by Thomas Liebich, AEC3, tl@aec3.de -->\r\n<!-- configuration options used to create the following XML schema definitions following ISO 10303-28ed2 CD -->\r\n<!-- global options within the <option> scoping element -->\r\n<!-- + <inheritance> = \"true\" -->\r\n<!-- + <exp-type> = \"unspecified\" -->\r\n<!-- + <exp-attribute> = \"double-tag\" -->\r\n<!-- + <flatten> = \"false\" -->\r\n<!-- + <sparse> = \"true\" -->\r\n<!-- + <tagless> = \"false\" -->\r\n<!-- + <naming-convention> = \"preserve-case\" -->\r\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:ex=\"urn:iso.org:standard:10303:part(28):version(2):xmlschema:common\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:ifc=\"http://www.iai-tech.org/ifcXML/IFC2x2/FINAL\" targetNamespace=\"http://www.iai-tech.org/ifcXML/IFC2x2/FINAL\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\">\r\n\t<!-- root element declaration (for SCHEMA definitions) -->\r\n\t<xs:import namespace=\"urn:iso.org:standard:10303:part(28):version(2):xmlschema:common\" schemaLocation=\"http://www.iai-tech.org/ifcXML/IFC2x2/FINAL/ex.xsd\"/>\r\n\t<xs:element name=\"uos\" type=\"ifc:uos\" substitutionGroup=\"ex:uos\"/>\r\n\t<xs:complexType name=\"uos\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:uos\">\r\n\t\t\t\t<xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t<xs:element ref=\"ex:Entity\"/>\r\n\t\t\t\t</xs:choice>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<!-- element and complex type declarations (for ENTITY definitions) -->\r\n\t<xs:element name=\"Ifc2DCompositeCurve\" type=\"ifc:Ifc2DCompositeCurve\" substitutionGroup=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"Ifc2DCompositeCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurve\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcActionRequest\" type=\"ifc:IfcActionRequest\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcActionRequest\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RequestID\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcActor\" type=\"ifc:IfcActor\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcActor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TheActor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcActorRole\" type=\"ifc:IfcActorRole\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcActorRole\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Role\" type=\"ifc:IfcRoleEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedRole\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcActuatorType\" type=\"ifc:IfcActuatorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcActuatorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAddress\" type=\"ifc:IfcAddress\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAddress\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Purpose\" type=\"ifc:IfcAddressTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedPurpose\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAirTerminalBoxType\" type=\"ifc:IfcAirTerminalBoxType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAirTerminalBoxType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAirTerminalType\" type=\"ifc:IfcAirTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAirTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAirToAirHeatRecoveryType\" type=\"ifc:IfcAirToAirHeatRecoveryType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAirToAirHeatRecoveryType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAlarmType\" type=\"ifc:IfcAlarmType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAlarmType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAngularDimension\" type=\"ifc:IfcAngularDimension\" substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAngularDimension\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAnnotation\" type=\"ifc:IfcAnnotation\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAnnotation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAnnotationCurveOccurrence\" type=\"ifc:IfcAnnotationCurveOccurrence\" substitutionGroup=\"ifc:IfcAnnotationOccurrence\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAnnotationCurveOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAnnotationFillArea\" type=\"ifc:IfcAnnotationFillArea\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAnnotationFillArea\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Boundaries\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAnnotationFillAreaOccurrence\" type=\"ifc:IfcAnnotationFillAreaOccurrence\" substitutionGroup=\"ifc:IfcAnnotationOccurrence\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAnnotationFillAreaOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FillStyleTarget\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAnnotationOccurrence\" type=\"ifc:IfcAnnotationOccurrence\" abstract=\"true\" substitutionGroup=\"ifc:IfcStyledItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAnnotationOccurrence\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStyledItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAnnotationSurfaceOccurrence\" type=\"ifc:IfcAnnotationSurfaceOccurrence\" substitutionGroup=\"ifc:IfcAnnotationOccurrence\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAnnotationSurfaceOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAnnotationSymbolOccurrence\" type=\"ifc:IfcAnnotationSymbolOccurrence\" substitutionGroup=\"ifc:IfcAnnotationOccurrence\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAnnotationSymbolOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAnnotationTextOccurrence\" type=\"ifc:IfcAnnotationTextOccurrence\" substitutionGroup=\"ifc:IfcAnnotationOccurrence\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAnnotationTextOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcApplication\" type=\"ifc:IfcApplication\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcApplication\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApplicationDeveloper\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Version\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"ApplicationFullName\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"ApplicationIdentifier\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAppliedValue\" type=\"ifc:IfcAppliedValue\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAppliedValue\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"AppliedValue\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UnitBasis\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ApplicableDate\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FixedUntilDate\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAppliedValueRelationship\" type=\"ifc:IfcAppliedValueRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAppliedValueRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ComponentOfTotal\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Components\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ArithmeticOperator\" type=\"ifc:IfcArithmeticOperatorEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcApproval\" type=\"ifc:IfcApproval\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcApproval\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ApprovalDateTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ApprovalStatus\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ApprovalLevel\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ApprovalQualifier\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Identifier\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcApprovalActorRelationship\" type=\"ifc:IfcApprovalActorRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcApprovalActorRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Actor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Approval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Role\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcApprovalPropertyRelationship\" type=\"ifc:IfcApprovalPropertyRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcApprovalPropertyRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApprovedProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Approval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcApprovalRelationship\" type=\"ifc:IfcApprovalRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcApprovalRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedApproval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingApproval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcArbitraryClosedProfileDef\" type=\"ifc:IfcArbitraryClosedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcArbitraryClosedProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OuterCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcArbitraryOpenProfileDef\" type=\"ifc:IfcArbitraryOpenProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcArbitraryOpenProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Curve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcArbitraryProfileDefWithVoids\" type=\"ifc:IfcArbitraryProfileDefWithVoids\" substitutionGroup=\"ifc:IfcArbitraryClosedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcArbitraryProfileDefWithVoids\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryClosedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"InnerCurves\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAsset\" type=\"ifc:IfcAsset\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAsset\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AssetID\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"OriginalValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurrentValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TotalReplacementCost\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Owner\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"User\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ResponsiblePerson\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IncorporationDate\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DepreciatedValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAsymmetricIShapeProfileDef\" type=\"ifc:IfcAsymmetricIShapeProfileDef\" substitutionGroup=\"ifc:IfcIShapeProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAsymmetricIShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcIShapeProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TopFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"TopFlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TopFlangeFilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAxis1Placement\" type=\"ifc:IfcAxis1Placement\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAxis1Placement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Axis\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAxis2Placement2D\" type=\"ifc:IfcAxis2Placement2D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAxis2Placement2D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RefDirection\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAxis2Placement3D\" type=\"ifc:IfcAxis2Placement3D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAxis2Placement3D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Axis\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RefDirection\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBSplineCurve\" type=\"ifc:IfcBSplineCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBSplineCurve\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Degree\" type=\"xs:long\"/>\r\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurveForm\" type=\"ifc:IfcBSplineCurveForm\"/>\r\n\t\t\t\t\t<xs:element name=\"ClosedCurve\" type=\"ex:logical\"/>\r\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBeam\" type=\"ifc:IfcBeam\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBeam\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBeamType\" type=\"ifc:IfcBeamType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBeamType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBezierCurve\" type=\"ifc:IfcBezierCurve\" substitutionGroup=\"ifc:IfcBSplineCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBezierCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurve\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoilerType\" type=\"ifc:IfcBoilerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoilerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBooleanClippingResult\" type=\"ifc:IfcBooleanClippingResult\" substitutionGroup=\"ifc:IfcBooleanResult\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBooleanClippingResult\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBooleanResult\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBooleanResult\" type=\"ifc:IfcBooleanResult\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBooleanResult\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Operator\" type=\"ifc:IfcBooleanOperator\"/>\r\n\t\t\t\t\t<xs:element name=\"FirstOperand\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SecondOperand\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoundaryCondition\" type=\"ifc:IfcBoundaryCondition\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoundaryCondition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoundaryEdgeCondition\" type=\"ifc:IfcBoundaryEdgeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoundaryEdgeCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByLengthX\" type=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByLengthY\" type=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByLengthZ\" type=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthX\" type=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthY\" type=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthZ\" type=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoundaryFaceCondition\" type=\"ifc:IfcBoundaryFaceCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoundaryFaceCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByAreaX\" type=\"ifc:IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByAreaY\" type=\"ifc:IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByAreaZ\" type=\"ifc:IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoundaryNodeCondition\" type=\"ifc:IfcBoundaryNodeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoundaryNodeCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessX\" type=\"ifc:IfcLinearStiffnessMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessY\" type=\"ifc:IfcLinearStiffnessMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessZ\" type=\"ifc:IfcLinearStiffnessMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessX\" type=\"ifc:IfcRotationalStiffnessMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessY\" type=\"ifc:IfcRotationalStiffnessMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessZ\" type=\"ifc:IfcRotationalStiffnessMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoundaryNodeConditionWarping\" type=\"ifc:IfcBoundaryNodeConditionWarping\" substitutionGroup=\"ifc:IfcBoundaryNodeCondition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoundaryNodeConditionWarping\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryNodeCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WarpingStiffness\" type=\"ifc:IfcWarpingMomentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoundedCurve\" type=\"ifc:IfcBoundedCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoundedCurve\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoundedSurface\" type=\"ifc:IfcBoundedSurface\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoundedSurface\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurface\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoundingBox\" type=\"ifc:IfcBoundingBox\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoundingBox\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Corner\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"ZDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoxedHalfSpace\" type=\"ifc:IfcBoxedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoxedHalfSpace\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Enclosure\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundingBox\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBuilding\" type=\"ifc:IfcBuilding\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBuilding\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ElevationOfRefHeight\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ElevationOfTerrain\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"BuildingAddress\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPostalAddress\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBuildingElement\" type=\"ifc:IfcBuildingElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBuildingElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBuildingElementComponent\" type=\"ifc:IfcBuildingElementComponent\" abstract=\"true\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBuildingElementComponent\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBuildingElementComponentType\" type=\"ifc:IfcBuildingElementComponentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBuildingElementComponentType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBuildingElementPart\" type=\"ifc:IfcBuildingElementPart\" substitutionGroup=\"ifc:IfcBuildingElementComponent\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBuildingElementPart\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementComponent\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBuildingElementProxy\" type=\"ifc:IfcBuildingElementProxy\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBuildingElementProxy\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CompositionType\" type=\"ifc:IfcElementCompositionEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBuildingElementType\" type=\"ifc:IfcBuildingElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBuildingElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBuildingStorey\" type=\"ifc:IfcBuildingStorey\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBuildingStorey\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Elevation\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCShapeProfileDef\" type=\"ifc:IfcCShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"Girth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"InternalFilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCableCarrierFittingType\" type=\"ifc:IfcCableCarrierFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCableCarrierFittingType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCableCarrierSegmentType\" type=\"ifc:IfcCableCarrierSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCableCarrierSegmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCableSegmentType\" type=\"ifc:IfcCableSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCableSegmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCalendarDate\" type=\"ifc:IfcCalendarDate\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCalendarDate\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DayComponent\" type=\"ifc:IfcDayInMonthNumber\"/>\r\n\t\t\t\t\t<xs:element name=\"MonthComponent\" type=\"ifc:IfcMonthInYearNumber\"/>\r\n\t\t\t\t\t<xs:element name=\"YearComponent\" type=\"ifc:IfcYearNumber\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCartesianPoint\" type=\"ifc:IfcCartesianPoint\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCartesianPoint\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Coordinates\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\" maxOccurs=\"3\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCartesianTransformationOperator\" type=\"ifc:IfcCartesianTransformationOperator\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Axis1\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Axis2\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LocalOrigin\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Scale\" type=\"xs:double\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCartesianTransformationOperator2D\" type=\"ifc:IfcCartesianTransformationOperator2D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCartesianTransformationOperator2DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator2DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2DnonUniform\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator2D\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Scale2\" type=\"xs:double\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCartesianTransformationOperator3D\" type=\"ifc:IfcCartesianTransformationOperator3D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Axis3\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCartesianTransformationOperator3DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator3DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator3D\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3DnonUniform\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator3D\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Scale2\" type=\"xs:double\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Scale3\" type=\"xs:double\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcChamferEdgeFeature\" type=\"ifc:IfcChamferEdgeFeature\" substitutionGroup=\"ifc:IfcEdgeFeature\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcChamferEdgeFeature\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEdgeFeature\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcChillerType\" type=\"ifc:IfcChillerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcChillerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCircle\" type=\"ifc:IfcCircle\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCircle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCircleHollowProfileDef\" type=\"ifc:IfcCircleHollowProfileDef\" substitutionGroup=\"ifc:IfcCircleProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCircleHollowProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCircleProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCircleProfileDef\" type=\"ifc:IfcCircleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCircleProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcClassification\" type=\"ifc:IfcClassification\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcClassification\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Source\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Edition\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"EditionDate\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcClassificationItem\" type=\"ifc:IfcClassificationItem\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcClassificationItem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Notation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationNotationFacet\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ItemOf\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Title\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcClassificationItemRelationship\" type=\"ifc:IfcClassificationItemRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcClassificationItemRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingItem\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationItem\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedItems\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationItem\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationItem\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcClassificationNotation\" type=\"ifc:IfcClassificationNotation\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcClassificationNotation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NotationFacets\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationNotationFacet\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationNotationFacet\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcClassificationNotationFacet\" type=\"ifc:IfcClassificationNotationFacet\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcClassificationNotationFacet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NotationValue\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcClassificationReference\" type=\"ifc:IfcClassificationReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcClassificationReference\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ReferencedSource\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcClosedShell\" type=\"ifc:IfcClosedShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcClosedShell\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCoilType\" type=\"ifc:IfcCoilType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCoilType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcColourRgb\" type=\"ifc:IfcColourRgb\" substitutionGroup=\"ifc:IfcColourSpecification\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcColourRgb\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcColourSpecification\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Red\" type=\"ifc:IfcNormalisedRatioMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"Green\" type=\"ifc:IfcNormalisedRatioMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"Blue\" type=\"ifc:IfcNormalisedRatioMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcColourSpecification\" type=\"ifc:IfcColourSpecification\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcColourSpecification\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcColumn\" type=\"ifc:IfcColumn\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcColumn\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcColumnType\" type=\"ifc:IfcColumnType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcColumnType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcComplexProperty\" type=\"ifc:IfcComplexProperty\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcComplexProperty\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UsageName\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"HasProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCompositeCurve\" type=\"ifc:IfcCompositeCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCompositeCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Segments\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCompositeCurveSegment\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCompositeCurveSegment\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCompositeCurveSegment\" type=\"ifc:IfcCompositeCurveSegment\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCompositeCurveSegment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Transition\" type=\"ifc:IfcTransitionCode\"/>\r\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"xs:boolean\"/>\r\n\t\t\t\t\t<xs:element name=\"ParentCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCompositeProfileDef\" type=\"ifc:IfcCompositeProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCompositeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Profiles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProfileDef\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Label\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCompressorType\" type=\"ifc:IfcCompressorType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCompressorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCondenserType\" type=\"ifc:IfcCondenserType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCondenserType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCondition\" type=\"ifc:IfcCondition\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConditionCriterion\" type=\"ifc:IfcConditionCriterion\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConditionCriterion\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Criterion\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcConditionCriterionSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CriterionDateTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConic\" type=\"ifc:IfcConic\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConic\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConnectedFaceSet\" type=\"ifc:IfcConnectedFaceSet\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConnectedFaceSet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CfsFaces\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFace\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFace\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConnectionCurveGeometry\" type=\"ifc:IfcConnectionCurveGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConnectionCurveGeometry\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CurveOnRelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurveOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConnectionGeometry\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConnectionPointGeometry\" type=\"ifc:IfcConnectionPointGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConnectionPointGeometry\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PointOnRelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PointOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConnectionPortGeometry\" type=\"ifc:IfcConnectionPortGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConnectionPortGeometry\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LocationAtRelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LocationAtRelatedElement\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ProfileOfPort\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConnectionSurfaceGeometry\" type=\"ifc:IfcConnectionSurfaceGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConnectionSurfaceGeometry\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConstraint\" type=\"ifc:IfcConstraint\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConstraint\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ConstraintGrade\" type=\"ifc:IfcConstraintEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ConstraintSource\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CreatingActor\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CreationTime\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedGrade\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConstraintAggregationRelationship\" type=\"ifc:IfcConstraintAggregationRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConstraintAggregationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedConstraints\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcConstraint\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LogicalAggregator\" type=\"ifc:IfcLogicalOperatorEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConstraintClassificationRelationship\" type=\"ifc:IfcConstraintClassificationRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConstraintClassificationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ClassifiedConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedClassifications\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationNotationSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConstraintRelationship\" type=\"ifc:IfcConstraintRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConstraintRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedConstraints\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcConstraint\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConstructionEquipmentResource\" type=\"ifc:IfcConstructionEquipmentResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConstructionEquipmentResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConstructionMaterialResource\" type=\"ifc:IfcConstructionMaterialResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConstructionMaterialResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Suppliers\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UsageRatio\" type=\"ifc:IfcRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConstructionProductResource\" type=\"ifc:IfcConstructionProductResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConstructionProductResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConstructionResource\" type=\"ifc:IfcConstructionResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcResource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConstructionResource\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcResource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ResourceIdentifier\" type=\"ifc:IfcIdentifier\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ResourceGroup\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ResourceConsumption\" type=\"ifc:IfcResourceConsumptionEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"BaseQuantity\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcContextDependentUnit\" type=\"ifc:IfcContextDependentUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcContextDependentUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcControl\" type=\"ifc:IfcControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcControl\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcControllerType\" type=\"ifc:IfcControllerType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcControllerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConversionBasedUnit\" type=\"ifc:IfcConversionBasedUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConversionBasedUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"ConversionFactor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCooledBeamType\" type=\"ifc:IfcCooledBeamType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCooledBeamType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCoolingTowerType\" type=\"ifc:IfcCoolingTowerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCoolingTowerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCoordinatedUniversalTimeOffset\" type=\"ifc:IfcCoordinatedUniversalTimeOffset\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCoordinatedUniversalTimeOffset\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HourOffset\" type=\"ifc:IfcHourInDay\"/>\r\n\t\t\t\t\t<xs:element name=\"MinuteOffset\" type=\"ifc:IfcMinuteInHour\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Sense\" type=\"ifc:IfcAheadOrBehind\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCostItem\" type=\"ifc:IfcCostItem\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCostItem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCostSchedule\" type=\"ifc:IfcCostSchedule\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCostSchedule\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SubmittedBy\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PreparedBy\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SubmittedOn\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Status\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TargetUsers\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UpdateDate\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ID\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCostScheduleTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCostValue\" type=\"ifc:IfcCostValue\" substitutionGroup=\"ifc:IfcAppliedValue\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCostValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CostType\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Condition\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCovering\" type=\"ifc:IfcCovering\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCovering\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCoveringType\" type=\"ifc:IfcCoveringType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCoveringType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCraneRailAShapeProfileDef\" type=\"ifc:IfcCraneRailAShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCraneRailAShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"BaseWidth2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"HeadWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"HeadDepth2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"HeadDepth3\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"BaseWidth4\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth1\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth3\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCraneRailFShapeProfileDef\" type=\"ifc:IfcCraneRailFShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCraneRailFShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"HeadWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"HeadDepth2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"HeadDepth3\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth1\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCrewResource\" type=\"ifc:IfcCrewResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCrewResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCsgSolid\" type=\"ifc:IfcCsgSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCsgSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TreeRootExpression\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCsgSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCurrencyRelationship\" type=\"ifc:IfcCurrencyRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCurrencyRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingMonetaryUnit\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedMonetaryUnit\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ExchangeRate\" type=\"ifc:IfcPositiveRatioMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"RateDateTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RateSource\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCurtainWall\" type=\"ifc:IfcCurtainWall\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCurtainWall\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCurve\" type=\"ifc:IfcCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCurve\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCurveBoundedPlane\" type=\"ifc:IfcCurveBoundedPlane\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCurveBoundedPlane\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPlane\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OuterBoundary\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCurveStyle\" type=\"ifc:IfcCurveStyle\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCurveStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"CurveFont\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurveWidth\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurveColour\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCurveStyleFont\" type=\"ifc:IfcCurveStyleFont\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCurveStyleFont\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PatternList\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontPattern\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurveStyleFontPattern\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCurveStyleFontAndScaling\" type=\"ifc:IfcCurveStyleFontAndScaling\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCurveStyleFontAndScaling\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CurveFont\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurveFontScaling\" type=\"ifc:IfcPositiveRatioMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCurveStyleFontPattern\" type=\"ifc:IfcCurveStyleFontPattern\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCurveStyleFontPattern\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VisibleSegmentLength\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"InvisibleSegmentLength\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDamperType\" type=\"ifc:IfcDamperType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDamperType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDateAndTime\" type=\"ifc:IfcDateAndTime\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDateAndTime\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DateComponent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeComponent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLocalTime\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDefinedSymbol\" type=\"ifc:IfcDefinedSymbol\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDefinedSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Definition\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinedSymbolSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Target\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator2D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDerivedProfileDef\" type=\"ifc:IfcDerivedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDerivedProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ParentProfile\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Operator\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator2D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Label\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDerivedUnit\" type=\"ifc:IfcDerivedUnit\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDerivedUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Elements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDerivedUnitElement\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDerivedUnitElement\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UnitType\" type=\"ifc:IfcDerivedUnitEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDerivedUnitElement\" type=\"ifc:IfcDerivedUnitElement\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDerivedUnitElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Unit\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Exponent\" type=\"xs:long\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDiameterDimension\" type=\"ifc:IfcDiameterDimension\" substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDiameterDimension\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDimensionCalloutRelationship\" type=\"ifc:IfcDimensionCalloutRelationship\" substitutionGroup=\"ifc:IfcDraughtingCalloutRelationship\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDimensionCalloutRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCalloutRelationship\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDimensionCurve\" type=\"ifc:IfcDimensionCurve\" substitutionGroup=\"ifc:IfcAnnotationCurveOccurrence\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDimensionCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationCurveOccurrence\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDimensionCurveDirectedCallout\" type=\"ifc:IfcDimensionCurveDirectedCallout\" substitutionGroup=\"ifc:IfcDraughtingCallout\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDimensionCurveDirectedCallout\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCallout\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDimensionCurveTerminator\" type=\"ifc:IfcDimensionCurveTerminator\" substitutionGroup=\"ifc:IfcTerminatorSymbol\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDimensionCurveTerminator\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTerminatorSymbol\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Role\" type=\"ifc:IfcDimensionExtentUsage\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDimensionalExponents\" type=\"ifc:IfcDimensionalExponents\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDimensionalExponents\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LengthExponent\" type=\"xs:long\"/>\r\n\t\t\t\t\t<xs:element name=\"MassExponent\" type=\"xs:long\"/>\r\n\t\t\t\t\t<xs:element name=\"TimeExponent\" type=\"xs:long\"/>\r\n\t\t\t\t\t<xs:element name=\"ElectricCurrentExponent\" type=\"xs:long\"/>\r\n\t\t\t\t\t<xs:element name=\"ThermodynamicTemperatureExponent\" type=\"xs:long\"/>\r\n\t\t\t\t\t<xs:element name=\"AmountOfSubstanceExponent\" type=\"xs:long\"/>\r\n\t\t\t\t\t<xs:element name=\"LuminousIntensityExponent\" type=\"xs:long\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDirection\" type=\"ifc:IfcDirection\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDirection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DirectionRatios\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:double-wrapper\" minOccurs=\"2\" maxOccurs=\"3\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:double-wrapper\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDiscreteAccessory\" type=\"ifc:IfcDiscreteAccessory\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDiscreteAccessory\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDiscreteAccessoryType\" type=\"ifc:IfcDiscreteAccessoryType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDiscreteAccessoryType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDistributionChamberElement\" type=\"ifc:IfcDistributionChamberElement\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDistributionChamberElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDistributionChamberElementType\" type=\"ifc:IfcDistributionChamberElementType\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDistributionChamberElementType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDistributionControlElement\" type=\"ifc:IfcDistributionControlElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDistributionControlElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ControlElementId\" type=\"ifc:IfcIdentifier\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDistributionControlElementType\" type=\"ifc:IfcDistributionControlElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDistributionControlElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDistributionElement\" type=\"ifc:IfcDistributionElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDistributionElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDistributionElementType\" type=\"ifc:IfcDistributionElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDistributionElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDistributionFlowElement\" type=\"ifc:IfcDistributionFlowElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDistributionFlowElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDistributionFlowElementType\" type=\"ifc:IfcDistributionFlowElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDistributionFlowElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDistributionPort\" type=\"ifc:IfcDistributionPort\" substitutionGroup=\"ifc:IfcPort\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDistributionPort\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPort\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FlowDirection\" type=\"ifc:IfcFlowDirectionEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDocumentElectronicFormat\" type=\"ifc:IfcDocumentElectronicFormat\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDocumentElectronicFormat\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FileExtension\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MimeContentType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MimeSubtype\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDocumentInformation\" type=\"ifc:IfcDocumentInformation\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDocumentInformation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DocumentId\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DocumentReferences\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDocumentReference\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Purpose\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"IntendedUse\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Scope\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Revision\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DocumentOwner\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Editors\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CreationTime\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LastRevisionTime\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ElectronicFormat\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentElectronicFormat\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ValidFrom\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ValidUntil\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Confidentiality\" type=\"ifc:IfcDocumentConfidentialityEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Status\" type=\"ifc:IfcDocumentStatusEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDocumentInformationRelationship\" type=\"ifc:IfcDocumentInformationRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDocumentInformationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedDocuments\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDocumentInformation\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelationshipType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDocumentReference\" type=\"ifc:IfcDocumentReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDocumentReference\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDoor\" type=\"ifc:IfcDoor\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDoor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDoorLiningProperties\" type=\"ifc:IfcDoorLiningProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDoorLiningProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LiningThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThresholdDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThresholdThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TransomThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TransomOffset\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LiningOffset\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThresholdOffset\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CasingThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CasingDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDoorPanelProperties\" type=\"ifc:IfcDoorPanelProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDoorPanelProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PanelDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PanelOperation\" type=\"ifc:IfcDoorPanelOperationEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"PanelWidth\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PanelPosition\" type=\"ifc:IfcDoorPanelPositionEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDoorStyle\" type=\"ifc:IfcDoorStyle\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDoorStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcDoorStyleOperationEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ConstructionType\" type=\"ifc:IfcDoorStyleConstructionEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ParameterTakesPrecedence\" type=\"xs:boolean\"/>\r\n\t\t\t\t\t<xs:element name=\"Sizeable\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDraughtingCallout\" type=\"ifc:IfcDraughtingCallout\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDraughtingCallout\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Contents\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDraughtingCalloutElement\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDraughtingCalloutElement\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDraughtingCalloutRelationship\" type=\"ifc:IfcDraughtingCalloutRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDraughtingCalloutRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RelatingDraughtingCallout\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDraughtingCallout\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedDraughtingCallout\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDraughtingCallout\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDraughtingPreDefinedColour\" type=\"ifc:IfcDraughtingPreDefinedColour\" substitutionGroup=\"ifc:IfcPreDefinedColour\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDraughtingPreDefinedColour\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedColour\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDraughtingPreDefinedCurveFont\" type=\"ifc:IfcDraughtingPreDefinedCurveFont\" substitutionGroup=\"ifc:IfcPreDefinedCurveFont\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDraughtingPreDefinedCurveFont\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedCurveFont\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDraughtingPreDefinedTextFont\" type=\"ifc:IfcDraughtingPreDefinedTextFont\" substitutionGroup=\"ifc:IfcPreDefinedTextFont\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDraughtingPreDefinedTextFont\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedTextFont\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDuctFittingType\" type=\"ifc:IfcDuctFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDuctFittingType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDuctSegmentType\" type=\"ifc:IfcDuctSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDuctSegmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDuctSilencerType\" type=\"ifc:IfcDuctSilencerType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDuctSilencerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEdge\" type=\"ifc:IfcEdge\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEdge\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EdgeStart\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertex\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EdgeEnd\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertex\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEdgeCurve\" type=\"ifc:IfcEdgeCurve\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEdgeCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EdgeGeometry\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEdgeFeature\" type=\"ifc:IfcEdgeFeature\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEdgeFeature\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FeatureLength\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEdgeLoop\" type=\"ifc:IfcEdgeLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEdgeLoop\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EdgeList\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricApplianceType\" type=\"ifc:IfcElectricApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricApplianceType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricDistributionPoint\" type=\"ifc:IfcElectricDistributionPoint\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricDistributionPoint\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DistributionPointFunction\" type=\"ifc:IfcElectricDistributionPointFunctionEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedFunction\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricFlowStorageDeviceType\" type=\"ifc:IfcElectricFlowStorageDeviceType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricFlowStorageDeviceType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricGeneratorType\" type=\"ifc:IfcElectricGeneratorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricGeneratorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricHeaterType\" type=\"ifc:IfcElectricHeaterType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricHeaterType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricHeaterTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricMotorType\" type=\"ifc:IfcElectricMotorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricMotorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricTimeControlType\" type=\"ifc:IfcElectricTimeControlType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricTimeControlType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricalBaseProperties\" type=\"ifc:IfcElectricalBaseProperties\" substitutionGroup=\"ifc:IfcEnergyProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricalBaseProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ElectricCurrentType\" type=\"ifc:IfcElectricCurrentEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"InputVoltage\" type=\"ifc:IfcElectricVoltageMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"InputFrequency\" type=\"ifc:IfcFrequencyMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FullLoadCurrent\" type=\"ifc:IfcElectricCurrentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MinimumCircuitCurrent\" type=\"ifc:IfcElectricCurrentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MaximumPowerInput\" type=\"ifc:IfcPowerMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RatedPowerInput\" type=\"ifc:IfcPowerMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"InputPhase\" type=\"xs:long\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricalCircuit\" type=\"ifc:IfcElectricalCircuit\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricalCircuit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSystem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricalElement\" type=\"ifc:IfcElectricalElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricalElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElement\" type=\"ifc:IfcElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Tag\" type=\"ifc:IfcIdentifier\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElementAssembly\" type=\"ifc:IfcElementAssembly\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElementAssembly\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElementComponent\" type=\"ifc:IfcElementComponent\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElementComponent\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElementComponentType\" type=\"ifc:IfcElementComponentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElementComponentType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElementQuantity\" type=\"ifc:IfcElementQuantity\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElementQuantity\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MethodOfMeasurement\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Quantities\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElementType\" type=\"ifc:IfcElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ElementType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElementarySurface\" type=\"ifc:IfcElementarySurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElementarySurface\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEllipse\" type=\"ifc:IfcEllipse\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEllipse\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEllipseProfileDef\" type=\"ifc:IfcEllipseProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEllipseProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEnergyConversionDevice\" type=\"ifc:IfcEnergyConversionDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEnergyConversionDevice\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEnergyConversionDeviceType\" type=\"ifc:IfcEnergyConversionDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEnergyConversionDeviceType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEnergyProperties\" type=\"ifc:IfcEnergyProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEnergyProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EnergySequence\" type=\"ifc:IfcEnergySequenceEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedEnergySequence\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEnvironmentalImpactValue\" type=\"ifc:IfcEnvironmentalImpactValue\" substitutionGroup=\"ifc:IfcAppliedValue\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEnvironmentalImpactValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ImpactType\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Category\" type=\"ifc:IfcEnvironmentalImpactCategoryEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedCategory\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEquipmentElement\" type=\"ifc:IfcEquipmentElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEquipmentElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEquipmentStandard\" type=\"ifc:IfcEquipmentStandard\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEquipmentStandard\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEvaporativeCoolerType\" type=\"ifc:IfcEvaporativeCoolerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEvaporativeCoolerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEvaporatorType\" type=\"ifc:IfcEvaporatorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEvaporatorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcExtendedMaterialProperties\" type=\"ifc:IfcExtendedMaterialProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcExtendedMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ExtendedProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcExternalReference\" type=\"ifc:IfcExternalReference\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcExternalReference\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Location\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ItemReference\" type=\"ifc:IfcIdentifier\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcExternallyDefinedHatchStyle\" type=\"ifc:IfcExternallyDefinedHatchStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcExternallyDefinedHatchStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcExternallyDefinedSufaceStyle\" type=\"ifc:IfcExternallyDefinedSufaceStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcExternallyDefinedSufaceStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcExternallyDefinedSymbol\" type=\"ifc:IfcExternallyDefinedSymbol\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcExternallyDefinedSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcExternallyDefinedTextFont\" type=\"ifc:IfcExternallyDefinedTextFont\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcExternallyDefinedTextFont\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcExtrudedAreaSolid\" type=\"ifc:IfcExtrudedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcExtrudedAreaSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFace\" type=\"ifc:IfcFace\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFace\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Bounds\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFaceBound\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFaceBound\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFaceBasedSurfaceModel\" type=\"ifc:IfcFaceBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFaceBasedSurfaceModel\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FbsmFaces\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectedFaceSet\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcConnectedFaceSet\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFaceBound\" type=\"ifc:IfcFaceBound\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFaceBound\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Bound\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLoop\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFaceOuterBound\" type=\"ifc:IfcFaceOuterBound\" substitutionGroup=\"ifc:IfcFaceBound\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFaceOuterBound\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFaceBound\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFaceSurface\" type=\"ifc:IfcFaceSurface\" substitutionGroup=\"ifc:IfcFace\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFaceSurface\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFace\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FaceSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFacetedBrep\" type=\"ifc:IfcFacetedBrep\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFacetedBrep\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFacetedBrepWithVoids\" type=\"ifc:IfcFacetedBrepWithVoids\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFacetedBrepWithVoids\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Voids\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClosedShell\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFailureConnectionCondition\" type=\"ifc:IfcFailureConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFailureConnectionCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TensionFailureX\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TensionFailureY\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TensionFailureZ\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CompressionFailureX\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CompressionFailureY\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CompressionFailureZ\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFanType\" type=\"ifc:IfcFanType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFanType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFastener\" type=\"ifc:IfcFastener\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFastener\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFastenerType\" type=\"ifc:IfcFastenerType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFastenerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFeatureElement\" type=\"ifc:IfcFeatureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFeatureElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFeatureElementAddition\" type=\"ifc:IfcFeatureElementAddition\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFeatureElementAddition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFeatureElementSubtraction\" type=\"ifc:IfcFeatureElementSubtraction\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFeatureElementSubtraction\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFillAreaStyle\" type=\"ifc:IfcFillAreaStyle\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFillAreaStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FillStyles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFillStyleSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFillAreaStyleHatching\" type=\"ifc:IfcFillAreaStyleHatching\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFillAreaStyleHatching\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HatchLineAppearance\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyle\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartOfNextHatchLine\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOneDirectionRepeatFactor\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PointOfReferenceHatchLine\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PatternStart\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HatchLineAngle\" type=\"ifc:IfcPlaneAngleMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFillAreaStyleTileSymbolWithStyle\" type=\"ifc:IfcFillAreaStyleTileSymbolWithStyle\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFillAreaStyleTileSymbolWithStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Symbol\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAnnotationSymbolOccurrence\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFillAreaStyleTiles\" type=\"ifc:IfcFillAreaStyleTiles\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFillAreaStyleTiles\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TilingPattern\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOneDirectionRepeatFactor\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Tiles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillAreaStyleTileShapeSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFillAreaStyleTileShapeSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TilingScale\" type=\"ifc:IfcPositiveRatioMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFilterType\" type=\"ifc:IfcFilterType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFilterType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFireSuppressionTerminalType\" type=\"ifc:IfcFireSuppressionTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFireSuppressionTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowController\" type=\"ifc:IfcFlowController\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowController\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowControllerType\" type=\"ifc:IfcFlowControllerType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowControllerType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowFitting\" type=\"ifc:IfcFlowFitting\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowFitting\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowFittingType\" type=\"ifc:IfcFlowFittingType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowFittingType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowInstrumentType\" type=\"ifc:IfcFlowInstrumentType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowInstrumentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowMeterType\" type=\"ifc:IfcFlowMeterType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowMeterType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowMovingDevice\" type=\"ifc:IfcFlowMovingDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowMovingDevice\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowMovingDeviceType\" type=\"ifc:IfcFlowMovingDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowMovingDeviceType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowSegment\" type=\"ifc:IfcFlowSegment\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowSegment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowSegmentType\" type=\"ifc:IfcFlowSegmentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowSegmentType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowStorageDevice\" type=\"ifc:IfcFlowStorageDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowStorageDevice\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowStorageDeviceType\" type=\"ifc:IfcFlowStorageDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowStorageDeviceType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowTerminal\" type=\"ifc:IfcFlowTerminal\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowTerminal\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowTerminalType\" type=\"ifc:IfcFlowTerminalType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowTerminalType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowTreatmentDevice\" type=\"ifc:IfcFlowTreatmentDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowTreatmentDevice\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowTreatmentDeviceType\" type=\"ifc:IfcFlowTreatmentDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowTreatmentDeviceType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFluidFlowProperties\" type=\"ifc:IfcFluidFlowProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFluidFlowProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PropertySource\" type=\"ifc:IfcPropertySourceEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"FlowConditionTimeSeries\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VelocityTimeSeries\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlowrateTimeSeries\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Fluid\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PressureTimeSeries\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedPropertySource\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TemperatureSingleValue\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"WetBulbTemperatureSingleValue\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"WetBulbTemperatureTimeSeries\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TemperatureTimeSeries\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlowrateSingleValue\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDerivedMeasureValue\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlowConditionSingleValue\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"VelocitySingleValue\" type=\"ifc:IfcLinearVelocityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PressureSingleValue\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFooting\" type=\"ifc:IfcFooting\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFooting\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFuelProperties\" type=\"ifc:IfcFuelProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFuelProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CombustionTemperature\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CarbonContent\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LowerHeatingValue\" type=\"ifc:IfcHeatingValueMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"HigherHeatingValue\" type=\"ifc:IfcHeatingValueMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFurnishingElement\" type=\"ifc:IfcFurnishingElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFurnishingElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFurnishingElementType\" type=\"ifc:IfcFurnishingElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFurnishingElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFurnitureStandard\" type=\"ifc:IfcFurnitureStandard\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFurnitureStandard\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFurnitureType\" type=\"ifc:IfcFurnitureType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFurnitureType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGasTerminalType\" type=\"ifc:IfcGasTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGasTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcGasTerminalTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGeneralMaterialProperties\" type=\"ifc:IfcGeneralMaterialProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGeneralMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MolecularWeight\" type=\"ifc:IfcMolecularWeightMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Porosity\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MassDensity\" type=\"ifc:IfcMassDensityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGeneralProfileProperties\" type=\"ifc:IfcGeneralProfileProperties\" substitutionGroup=\"ifc:IfcProfileProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGeneralProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PhysicalWeight\" type=\"ifc:IfcMassPerLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Perimeter\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MinimumPlateThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MaximumPlateThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGeometricCurveSet\" type=\"ifc:IfcGeometricCurveSet\" substitutionGroup=\"ifc:IfcGeometricSet\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGeometricCurveSet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricSet\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGeometricRepresentationContext\" type=\"ifc:IfcGeometricRepresentationContext\" substitutionGroup=\"ifc:IfcRepresentationContext\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGeometricRepresentationContext\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationContext\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CoordinateSpaceDimension\" type=\"ifc:IfcDimensionCount\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Precision\" type=\"xs:double\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"WorldCoordinateSystem\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TrueNorth\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGeometricRepresentationItem\" type=\"ifc:IfcGeometricRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGeometricRepresentationItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext-temp\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:restriction base=\"ifc:IfcGeometricRepresentationContext\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ContextIdentifier\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ContextType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:restriction>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGeometricRepresentationSubContext\" type=\"ifc:IfcGeometricRepresentationSubContext\" substitutionGroup=\"ifc:IfcGeometricRepresentationContext\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationSubContext-temp\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ParentContext\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationContext\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TargetScale\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TargetView\" type=\"ifc:IfcGeometricProjectionEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedTargetView\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGeometricSet\" type=\"ifc:IfcGeometricSet\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGeometricSet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Elements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGeometricSetSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGrid\" type=\"ifc:IfcGrid\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGrid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UAxes\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VAxes\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WAxes\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGridAxis\" type=\"ifc:IfcGridAxis\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGridAxis\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AxisTag\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"AxisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"ifc:IfcBoolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGridPlacement\" type=\"ifc:IfcGridPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGridPlacement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PlacementLocation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PlacementRefDirection\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGroup\" type=\"ifc:IfcGroup\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGroup\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcHalfSpaceSolid\" type=\"ifc:IfcHalfSpaceSolid\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcHalfSpaceSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BaseSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AgreementFlag\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcHeatExchangerType\" type=\"ifc:IfcHeatExchangerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcHeatExchangerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcHumidifierType\" type=\"ifc:IfcHumidifierType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcHumidifierType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcHygroscopicMaterialProperties\" type=\"ifc:IfcHygroscopicMaterialProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcHygroscopicMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UpperVaporResistanceFactor\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LowerVaporResistanceFactor\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"IsothermalMoistureCapacity\" type=\"ifc:IfcIsothermalMoistureCapacityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"VaporPermeability\" type=\"ifc:IfcVaporPermeabilityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MoistureDiffusivity\" type=\"ifc:IfcMoistureDiffusivityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcIShapeProfileDef\" type=\"ifc:IfcIShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcIShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcImageTexture\" type=\"ifc:IfcImageTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcImageTexture\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UrlReference\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcInventory\" type=\"ifc:IfcInventory\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcInventory\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"InventoryType\" type=\"ifc:IfcInventoryTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"Jurisdiction\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ResponsiblePersons\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPerson\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LastUpdateDate\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurrentValue\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OriginalValue\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcIrregularTimeSeries\" type=\"ifc:IfcIrregularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcIrregularTimeSeries\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Values\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIrregularTimeSeriesValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcIrregularTimeSeriesValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcIrregularTimeSeriesValue\" type=\"ifc:IfcIrregularTimeSeriesValue\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcIrregularTimeSeriesValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TimeStamp\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ListValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcJunctionBoxType\" type=\"ifc:IfcJunctionBoxType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcJunctionBoxType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLShapeProfileDef\" type=\"ifc:IfcLShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"EdgeRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LegSlope\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLaborResource\" type=\"ifc:IfcLaborResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLaborResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SkillSet\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLampType\" type=\"ifc:IfcLampType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLampType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLibraryInformation\" type=\"ifc:IfcLibraryInformation\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLibraryInformation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Version\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Publisher\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VersionDate\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LibraryReference\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLibraryReference\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLibraryReference\" type=\"ifc:IfcLibraryReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLibraryReference\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLightDistributionData\" type=\"ifc:IfcLightDistributionData\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLightDistributionData\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MainPlaneAngle\" type=\"ifc:IfcPlaneAngleMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"SecondaryPlaneAngle\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPlaneAngleMeasure\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LuminousIntensity\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLuminousIntensityDistributionMeasure\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLightFixtureType\" type=\"ifc:IfcLightFixtureType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLightFixtureType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLightIntensityDistribution\" type=\"ifc:IfcLightIntensityDistribution\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLightIntensityDistribution\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LightDistributionCurve\" type=\"ifc:IfcLightDistributionCurveEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"DistributionData\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLightDistributionData\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLightDistributionData\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLightSource\" type=\"ifc:IfcLightSource\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLightSource\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LightColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AmbientIntensity\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Intensity\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLightSourceAmbient\" type=\"ifc:IfcLightSourceAmbient\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLightSourceAmbient\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLightSourceDirectional\" type=\"ifc:IfcLightSourceDirectional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLightSourceDirectional\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Orientation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLightSourceGoniometric\" type=\"ifc:IfcLightSourceGoniometric\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLightSourceGoniometric\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ColourAppearance\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ColourTemperature\" type=\"ifc:IfcThermodynamicTemperatureMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"LuminousFlux\" type=\"ifc:IfcLuminousFluxMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"LightEmissionSource\" type=\"ifc:IfcLightEmissionSourceEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"LightDistributionDataSource\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLightSourcePositional\" type=\"ifc:IfcLightSourcePositional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLightSourcePositional\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"ConstantAttenuation\" type=\"ifc:IfcReal\"/>\r\n\t\t\t\t\t<xs:element name=\"DistanceAttenuation\" type=\"ifc:IfcReal\"/>\r\n\t\t\t\t\t<xs:element name=\"QuadricAttenuation\" type=\"ifc:IfcReal\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLightSourceSpot\" type=\"ifc:IfcLightSourceSpot\" substitutionGroup=\"ifc:IfcLightSourcePositional\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLightSourceSpot\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSourcePositional\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Orientation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConcentrationExponent\" type=\"ifc:IfcReal\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SpreadAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"BeamWidthAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLine\" type=\"ifc:IfcLine\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLine\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Pnt\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Dir\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLinearDimension\" type=\"ifc:IfcLinearDimension\" substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLinearDimension\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLocalPlacement\" type=\"ifc:IfcLocalPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLocalPlacement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PlacementRelTo\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectPlacement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelativePlacement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLocalTime\" type=\"ifc:IfcLocalTime\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLocalTime\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HourComponent\" type=\"ifc:IfcHourInDay\"/>\r\n\t\t\t\t\t<xs:element name=\"MinuteComponent\" type=\"ifc:IfcMinuteInHour\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SecondComponent\" type=\"ifc:IfcSecondInMinute\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Zone\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCoordinatedUniversalTimeOffset\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DaylightSavingOffset\" type=\"ifc:IfcDaylightSavingHour\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLoop\" type=\"ifc:IfcLoop\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLoop\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcManifoldSolidBrep\" type=\"ifc:IfcManifoldSolidBrep\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcManifoldSolidBrep\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Outer\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMappedItem\" type=\"ifc:IfcMappedItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMappedItem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MappingSource\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MappingTarget\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMaterial\" type=\"ifc:IfcMaterial\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMaterial\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMaterialClassificationRelationship\" type=\"ifc:IfcMaterialClassificationRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMaterialClassificationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MaterialClassifications\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationNotationSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ClassifiedMaterial\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMaterialLayer\" type=\"ifc:IfcMaterialLayer\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMaterialLayer\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Material\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"IsVentilated\" type=\"ifc:IfcBoolean\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMaterialLayerSet\" type=\"ifc:IfcMaterialLayerSet\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMaterialLayerSet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MaterialLayers\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcMaterialLayer\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerSetName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMaterialLayerSetUsage\" type=\"ifc:IfcMaterialLayerSetUsage\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMaterialLayerSetUsage\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ForLayerSet\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayerSet\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerSetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"DirectionSense\" type=\"ifc:IfcDirectionSenseEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"OffsetFromReferenceLine\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMaterialList\" type=\"ifc:IfcMaterialList\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMaterialList\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Materials\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcMaterial\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMaterialProperties\" type=\"ifc:IfcMaterialProperties\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMaterialProperties\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Material\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMeasureWithUnit\" type=\"ifc:IfcMeasureWithUnit\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMeasureWithUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ValueComponent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UnitComponent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMechanicalConcreteMaterialProperties\" type=\"ifc:IfcMechanicalConcreteMaterialProperties\" substitutionGroup=\"ifc:IfcMechanicalMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMechanicalConcreteMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMechanicalMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CompressiveStrength\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MaxAggregateSize\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"AdmixturesDescription\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Workability\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ProtectivePoreRatio\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"WaterImpermeability\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMechanicalFastener\" type=\"ifc:IfcMechanicalFastener\" substitutionGroup=\"ifc:IfcFastener\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMechanicalFastener\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFastener\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"NominalLength\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMechanicalFastenerType\" type=\"ifc:IfcMechanicalFastenerType\" substitutionGroup=\"ifc:IfcFastenerType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMechanicalFastenerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFastenerType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMechanicalMaterialProperties\" type=\"ifc:IfcMechanicalMaterialProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMechanicalMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DynamicViscosity\" type=\"ifc:IfcDynamicViscosityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"YoungModulus\" type=\"ifc:IfcModulusOfElasticityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShearModulus\" type=\"ifc:IfcModulusOfElasticityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PoissonRatio\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThermalExpansionCoefficient\" type=\"ifc:IfcThermalExpansionCoefficientMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMechanicalSteelMaterialProperties\" type=\"ifc:IfcMechanicalSteelMaterialProperties\" substitutionGroup=\"ifc:IfcMechanicalMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMechanicalSteelMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMechanicalMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"YieldStress\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"UltimateStress\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"UltimateStrain\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"HardeningModule\" type=\"ifc:IfcModulusOfElasticityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ProportionalStress\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PlasticStrain\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Relaxations\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelaxation\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRelaxation\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMember\" type=\"ifc:IfcMember\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMember\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMemberType\" type=\"ifc:IfcMemberType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMemberType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMetric\" type=\"ifc:IfcMetric\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMetric\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Benchmark\" type=\"ifc:IfcBenchmarkEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ValueSource\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DataValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMonetaryUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Currency\" type=\"ifc:IfcCurrencyEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMotorConnectionType\" type=\"ifc:IfcMotorConnectionType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMotorConnectionType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMove\" type=\"ifc:IfcMove\" substitutionGroup=\"ifc:IfcTask\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMove\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTask\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MoveFrom\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MoveTo\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PunchList\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcText\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcText\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcNamedUnit\" type=\"ifc:IfcNamedUnit\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcNamedUnit\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Dimensions\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDimensionalExponents\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UnitType\" type=\"ifc:IfcUnitEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcObject\" type=\"ifc:IfcObject\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcObject\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ObjectType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcObjectPlacement\" type=\"ifc:IfcObjectPlacement\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcObjectPlacement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcObjective\" type=\"ifc:IfcObjective\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcObjective\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BenchmarkValues\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMetric\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ResultValues\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMetric\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ObjectiveQualifier\" type=\"ifc:IfcObjectiveEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedQualifier\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOccupant\" type=\"ifc:IfcOccupant\" substitutionGroup=\"ifc:IfcActor\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOccupant\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcActor\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcOccupantTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOffsetCurve2D\" type=\"ifc:IfcOffsetCurve2D\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOffsetCurve2D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Distance\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOffsetCurve3D\" type=\"ifc:IfcOffsetCurve3D\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOffsetCurve3D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Distance\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\"/>\r\n\t\t\t\t\t<xs:element name=\"RefDirection\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOneDirectionRepeatFactor\" type=\"ifc:IfcOneDirectionRepeatFactor\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOneDirectionRepeatFactor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RepeatFactor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOpenShell\" type=\"ifc:IfcOpenShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOpenShell\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOpeningElement\" type=\"ifc:IfcOpeningElement\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOpeningElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOpticalMaterialProperties\" type=\"ifc:IfcOpticalMaterialProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOpticalMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VisibleTransmittance\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SolarTransmittance\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThermalIrTransmittance\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThermalIrEmissivityBack\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThermalIrEmissivityFront\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"VisibleReflectanceBack\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"VisibleReflectanceFront\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SolarReflectanceFront\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SolarReflectanceBack\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOrderAction\" type=\"ifc:IfcOrderAction\" substitutionGroup=\"ifc:IfcTask\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOrderAction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTask\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ActionID\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOrganization\" type=\"ifc:IfcOrganization\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOrganization\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Id\" type=\"ifc:IfcIdentifier\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorRole\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Addresses\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAddress\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOrganizationRelationship\" type=\"ifc:IfcOrganizationRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOrganizationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RelatingOrganization\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedOrganizations\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcOrganization\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:complexType name=\"IfcOrientedEdge-temp\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:restriction base=\"ifc:IfcEdge\">\r\n\t\t\t\t<xs:sequence/>\r\n\t\t\t</xs:restriction>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOrientedEdge\" type=\"ifc:IfcOrientedEdge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOrientedEdge\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcOrientedEdge-temp\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EdgeElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcEdge\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOutletType\" type=\"ifc:IfcOutletType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOutletType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOwnerHistory\" type=\"ifc:IfcOwnerHistory\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOwnerHistory\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OwningUser\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OwningApplication\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApplication\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"State\" type=\"ifc:IfcStateEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ChangeAction\" type=\"ifc:IfcChangeActionEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"LastModifiedDate\" type=\"ifc:IfcTimeStamp\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LastModifyingUser\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LastModifyingApplication\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApplication\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CreationDate\" type=\"ifc:IfcTimeStamp\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcParameterizedProfileDef\" type=\"ifc:IfcParameterizedProfileDef\" abstract=\"true\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcParameterizedProfileDef\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPath\" type=\"ifc:IfcPath\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPath\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EdgeList\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPerformanceHistory\" type=\"ifc:IfcPerformanceHistory\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPerformanceHistory\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LifeCyclePhase\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPermeableCoveringProperties\" type=\"ifc:IfcPermeableCoveringProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPermeableCoveringProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcPermeableCoveringOperationEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPermit\" type=\"ifc:IfcPermit\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPermit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PermitID\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPerson\" type=\"ifc:IfcPerson\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPerson\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Id\" type=\"ifc:IfcIdentifier\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FamilyName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"GivenName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MiddleNames\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PrefixTitles\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SuffixTitles\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorRole\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Addresses\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAddress\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPersonAndOrganization\" type=\"ifc:IfcPersonAndOrganization\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPersonAndOrganization\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ThePerson\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TheOrganization\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorRole\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPhysicalComplexQuantity\" type=\"ifc:IfcPhysicalComplexQuantity\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPhysicalComplexQuantity\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HasQuantities\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Discrimination\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Quality\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Usage\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPhysicalQuantity\" type=\"ifc:IfcPhysicalQuantity\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPhysicalQuantity\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPhysicalSimpleQuantity\" type=\"ifc:IfcPhysicalSimpleQuantity\" abstract=\"true\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPhysicalSimpleQuantity\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPile\" type=\"ifc:IfcPile\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPile\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ConstructionType\" type=\"ifc:IfcPileConstructionEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPipeFittingType\" type=\"ifc:IfcPipeFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPipeFittingType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPipeSegmentType\" type=\"ifc:IfcPipeSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPipeSegmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPixelTexture\" type=\"ifc:IfcPixelTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPixelTexture\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Width\" type=\"ifc:IfcInteger\"/>\r\n\t\t\t\t\t<xs:element name=\"Height\" type=\"ifc:IfcInteger\"/>\r\n\t\t\t\t\t<xs:element name=\"ColourComponents\" type=\"ifc:IfcInteger\"/>\r\n\t\t\t\t\t<xs:element name=\"Pixel\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:string-wrapper\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:string-wrapper\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPlacement\" type=\"ifc:IfcPlacement\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPlacement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Location\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPlanarBox\" type=\"ifc:IfcPlanarBox\" substitutionGroup=\"ifc:IfcPlanarExtent\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPlanarBox\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPlanarExtent\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Placement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPlanarExtent\" type=\"ifc:IfcPlanarExtent\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPlanarExtent\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SizeInX\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"SizeInY\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPlane\" type=\"ifc:IfcPlane\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPlane\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPlate\" type=\"ifc:IfcPlate\" substitutionGroup=\"ifc:IfcBuildingElementComponent\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPlate\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementComponent\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPlateType\" type=\"ifc:IfcPlateType\" substitutionGroup=\"ifc:IfcBuildingElementComponentType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPlateType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementComponentType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPoint\" type=\"ifc:IfcPoint\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPoint\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPointOnCurve\" type=\"ifc:IfcPointOnCurve\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPointOnCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PointParameter\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPointOnSurface\" type=\"ifc:IfcPointOnSurface\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPointOnSurface\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PointParameterU\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t\t<xs:element name=\"PointParameterV\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPolyLoop\" type=\"ifc:IfcPolyLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPolyLoop\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Polygon\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"3\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPolygonalBoundedHalfSpace\" type=\"ifc:IfcPolygonalBoundedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPolygonalBoundedHalfSpace\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PolygonalBoundary\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPolyline\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPolyline\" type=\"ifc:IfcPolyline\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPolyline\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Points\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPort\" type=\"ifc:IfcPort\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPort\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPostalAddress\" type=\"ifc:IfcPostalAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPostalAddress\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"InternalLocation\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"AddressLines\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PostalBox\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Town\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Region\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PostalCode\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Country\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPreDefinedColour\" type=\"ifc:IfcPreDefinedColour\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPreDefinedColour\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPreDefinedCurveFont\" type=\"ifc:IfcPreDefinedCurveFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPreDefinedCurveFont\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPreDefinedDimensionSymbol\" type=\"ifc:IfcPreDefinedDimensionSymbol\" substitutionGroup=\"ifc:IfcPreDefinedSymbol\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPreDefinedDimensionSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedSymbol\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPreDefinedItem\" type=\"ifc:IfcPreDefinedItem\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPreDefinedItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPreDefinedPointMarkerSymbol\" type=\"ifc:IfcPreDefinedPointMarkerSymbol\" substitutionGroup=\"ifc:IfcPreDefinedSymbol\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPreDefinedPointMarkerSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedSymbol\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPreDefinedSymbol\" type=\"ifc:IfcPreDefinedSymbol\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPreDefinedSymbol\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPreDefinedTerminatorSymbol\" type=\"ifc:IfcPreDefinedTerminatorSymbol\" substitutionGroup=\"ifc:IfcPreDefinedSymbol\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPreDefinedTerminatorSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedSymbol\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPreDefinedTextFont\" type=\"ifc:IfcPreDefinedTextFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPreDefinedTextFont\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPresentationLayerAssignment\" type=\"ifc:IfcPresentationLayerAssignment\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPresentationLayerAssignment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"AssignedItems\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLayeredItem\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLayeredItem\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPresentationLayerAssignmentWithStyle\" type=\"ifc:IfcPresentationLayerAssignmentWithStyle\" substitutionGroup=\"ifc:IfcPresentationLayerAssignment\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPresentationLayerAssignmentWithStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPresentationLayerAssignment\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LayerNumber\" type=\"xs:long\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LayerOn\" type=\"ex:logical\"/>\r\n\t\t\t\t\t<xs:element name=\"LayerOnInAllViews\" type=\"ex:logical\"/>\r\n\t\t\t\t\t<xs:element name=\"LayerFrozen\" type=\"ex:logical\"/>\r\n\t\t\t\t\t<xs:element name=\"LayerFrozenInAllViews\" type=\"ex:logical\"/>\r\n\t\t\t\t\t<xs:element name=\"LayerBlocked\" type=\"ex:logical\"/>\r\n\t\t\t\t\t<xs:element name=\"LayerColour\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerCurveWidth\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerCurveFont\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPresentationStyleAssignment\" type=\"ifc:IfcPresentationStyleAssignment\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPresentationStyleAssignment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Styles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPresentationStyleSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProcedure\" type=\"ifc:IfcProcedure\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProcedure\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProcedureID\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"ProcedureType\" type=\"ifc:IfcProcedureTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedProcedureType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProcess\" type=\"ifc:IfcProcess\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProcess\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProduct\" type=\"ifc:IfcProduct\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProduct\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ObjectPlacement\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectPlacement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Representation\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProductRepresentation\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProductDefinitionShape\" type=\"ifc:IfcProductDefinitionShape\" substitutionGroup=\"ifc:IfcProductRepresentation\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProductDefinitionShape\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProductRepresentation\" type=\"ifc:IfcProductRepresentation\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProductRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Representations\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentation\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProductsOfCombustionProperties\" type=\"ifc:IfcProductsOfCombustionProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProductsOfCombustionProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SpecificHeatCapacity\" type=\"ifc:IfcSpecificHeatCapacityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"N20Content\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"COContent\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CO2Content\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProfileDef\" type=\"ifc:IfcProfileDef\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProfileDef\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProfileType\" type=\"ifc:IfcProfileTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ProfileName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProfileProperties\" type=\"ifc:IfcProfileProperties\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProfileProperties\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProfileName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ProfileDefinition\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProject\" type=\"ifc:IfcProject\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProject\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LongName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Phase\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RepresentationContexts\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentationContext\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UnitsInContext\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcUnitAssignment\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProjectOrder\" type=\"ifc:IfcProjectOrder\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProjectOrder\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ID\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcProjectOrderTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"Status\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProjectOrderRecord\" type=\"ifc:IfcProjectOrderRecord\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProjectOrderRecord\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Records\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelAssignsToProjectOrder\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRelAssignsToProjectOrder\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcProjectOrderRecordTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProjectionCurve\" type=\"ifc:IfcProjectionCurve\" substitutionGroup=\"ifc:IfcAnnotationCurveOccurrence\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProjectionCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationCurveOccurrence\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProjectionElement\" type=\"ifc:IfcProjectionElement\" substitutionGroup=\"ifc:IfcFeatureElementAddition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProjectionElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementAddition\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProperty\" type=\"ifc:IfcProperty\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProperty\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertyBoundedValue\" type=\"ifc:IfcPropertyBoundedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertyBoundedValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UpperBoundValue\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LowerBoundValue\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertyConstraintRelationship\" type=\"ifc:IfcPropertyConstraintRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertyConstraintRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertyDefinition\" type=\"ifc:IfcPropertyDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertyDefinition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertyDependencyRelationship\" type=\"ifc:IfcPropertyDependencyRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertyDependencyRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DependingProperty\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DependantProperty\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Expression\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertyEnumeratedValue\" type=\"ifc:IfcPropertyEnumeratedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertyEnumeratedValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EnumerationReference\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyEnumeration\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertyEnumeration\" type=\"ifc:IfcPropertyEnumeration\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertyEnumeration\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertyListValue\" type=\"ifc:IfcPropertyListValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertyListValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ListValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertyReferenceValue\" type=\"ifc:IfcPropertyReferenceValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertyReferenceValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UsageName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PropertyReference\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertySet\" type=\"ifc:IfcPropertySet\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertySet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HasProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertySetDefinition\" type=\"ifc:IfcPropertySetDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertySetDefinition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertySingleValue\" type=\"ifc:IfcPropertySingleValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertySingleValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NominalValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertyTableValue\" type=\"ifc:IfcPropertyTableValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertyTableValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DefiningValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DefinedValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Expression\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DefiningUnit\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DefinedUnit\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProtectiveDeviceType\" type=\"ifc:IfcProtectiveDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProtectiveDeviceType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProxy\" type=\"ifc:IfcProxy\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProxy\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProxyType\" type=\"ifc:IfcObjectTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"Tag\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPumpType\" type=\"ifc:IfcPumpType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPumpType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcQuantityArea\" type=\"ifc:IfcQuantityArea\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcQuantityArea\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AreaValue\" type=\"ifc:IfcAreaMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcQuantityCount\" type=\"ifc:IfcQuantityCount\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcQuantityCount\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CountValue\" type=\"ifc:IfcCountMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcQuantityLength\" type=\"ifc:IfcQuantityLength\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcQuantityLength\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LengthValue\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcQuantityTime\" type=\"ifc:IfcQuantityTime\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcQuantityTime\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TimeValue\" type=\"ifc:IfcTimeMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcQuantityVolume\" type=\"ifc:IfcQuantityVolume\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcQuantityVolume\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VolumeValue\" type=\"ifc:IfcVolumeMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcQuantityWeight\" type=\"ifc:IfcQuantityWeight\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcQuantityWeight\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WeightValue\" type=\"ifc:IfcMassMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRadiusDimension\" type=\"ifc:IfcRadiusDimension\" substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRadiusDimension\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRailing\" type=\"ifc:IfcRailing\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRailing\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRailingType\" type=\"ifc:IfcRailingType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRailingType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRamp\" type=\"ifc:IfcRamp\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRamp\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShapeType\" type=\"ifc:IfcRampTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRampFlight\" type=\"ifc:IfcRampFlight\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRampFlight\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRampFlightType\" type=\"ifc:IfcRampFlightType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRampFlightType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRationalBezierCurve\" type=\"ifc:IfcRationalBezierCurve\" substitutionGroup=\"ifc:IfcBezierCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRationalBezierCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBezierCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WeightsData\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:double-wrapper\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:double-wrapper\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRectangleHollowProfileDef\" type=\"ifc:IfcRectangleHollowProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRectangleHollowProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"InnerFilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"OuterFilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRectangleProfileDef\" type=\"ifc:IfcRectangleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRectangleProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRectangularTrimmedSurface\" type=\"ifc:IfcRectangularTrimmedSurface\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRectangularTrimmedSurface\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"U1\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t\t<xs:element name=\"V1\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t\t<xs:element name=\"U2\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t\t<xs:element name=\"V2\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t\t<xs:element name=\"Usense\" type=\"xs:boolean\"/>\r\n\t\t\t\t\t<xs:element name=\"Vsense\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcReferencesValueDocument\" type=\"ifc:IfcReferencesValueDocument\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcReferencesValueDocument\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ReferencedDocument\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReferencingValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRegularTimeSeries\" type=\"ifc:IfcRegularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRegularTimeSeries\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TimeStep\" type=\"ifc:IfcTimeMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"Values\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeriesValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTimeSeriesValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcReinforcementBarProperties\" type=\"ifc:IfcReinforcementBarProperties\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcReinforcementBarProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TotalCrossSectionArea\" type=\"ifc:IfcAreaMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"SteelGrade\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"EffectiveDepth\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"NominalBarDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"BarCount\" type=\"ifc:IfcCountMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcReinforcementDefinitionProperties\" type=\"ifc:IfcReinforcementDefinitionProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcReinforcementDefinitionProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DefinitionType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ReinforcementSectionDefinitions\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionReinforcementProperties\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSectionReinforcementProperties\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcReinforcingBar\" type=\"ifc:IfcReinforcingBar\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcReinforcingBar\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"BarLength\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"BarRole\" type=\"ifc:IfcReinforcingBarRoleEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcReinforcingElement\" type=\"ifc:IfcReinforcingElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcBuildingElementComponent\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcReinforcingElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementComponent\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SteelGrade\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcReinforcingMesh\" type=\"ifc:IfcReinforcingMesh\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcReinforcingMesh\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MeshLength\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MeshWidth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAggregates\" type=\"ifc:IfcRelAggregates\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAggregates\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssigns\" type=\"ifc:IfcRelAssigns\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssigns\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcObject\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjectsType\" type=\"ifc:IfcObjectTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssignsTasks\" type=\"ifc:IfcRelAssignsTasks\" substitutionGroup=\"ifc:IfcRelAssignsToControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssignsTasks\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TimeForTask\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcScheduleTimeControl\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssignsToActor\" type=\"ifc:IfcRelAssignsToActor\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssignsToActor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingActor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActor\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ActingRole\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssignsToControl\" type=\"ifc:IfcRelAssignsToControl\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssignsToControl\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingControl\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcControl\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssignsToGroup\" type=\"ifc:IfcRelAssignsToGroup\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssignsToGroup\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingGroup\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGroup\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssignsToProcess\" type=\"ifc:IfcRelAssignsToProcess\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssignsToProcess\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProcess\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"QuantityInProcess\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssignsToProduct\" type=\"ifc:IfcRelAssignsToProduct\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssignsToProduct\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingProduct\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssignsToProjectOrder\" type=\"ifc:IfcRelAssignsToProjectOrder\" substitutionGroup=\"ifc:IfcRelAssignsToControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssignsToProjectOrder\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToControl\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssignsToResource\" type=\"ifc:IfcRelAssignsToResource\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssignsToResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingResource\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcResource\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssociates\" type=\"ifc:IfcRelAssociates\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssociates\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRoot\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRoot\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssociatesAppliedValue\" type=\"ifc:IfcRelAssociatesAppliedValue\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssociatesAppliedValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingAppliedValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssociatesApproval\" type=\"ifc:IfcRelAssociatesApproval\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssociatesApproval\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingApproval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssociatesClassification\" type=\"ifc:IfcRelAssociatesClassification\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssociatesClassification\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingClassification\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssociatesConstraint\" type=\"ifc:IfcRelAssociatesConstraint\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssociatesConstraint\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Intent\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssociatesDocument\" type=\"ifc:IfcRelAssociatesDocument\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssociatesDocument\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssociatesLibrary\" type=\"ifc:IfcRelAssociatesLibrary\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssociatesLibrary\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingLibrary\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLibrarySelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssociatesMaterial\" type=\"ifc:IfcRelAssociatesMaterial\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssociatesMaterial\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMaterialSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssociatesProfileProperties\" type=\"ifc:IfcRelAssociatesProfileProperties\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssociatesProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingProfileProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileProperties\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ProfileSectionLocation\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelConnects\" type=\"ifc:IfcRelConnects\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelConnects\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelConnectsElements\" type=\"ifc:IfcRelConnectsElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelConnectsElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectionGeometry\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelConnectsPathElements\" type=\"ifc:IfcRelConnectsPathElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelConnectsPathElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingPriorities\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:long-wrapper\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:long-wrapper\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedPriorities\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:long-wrapper\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:long-wrapper\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedConnectionType\" type=\"ifc:IfcConnectionTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"RelatingConnectionType\" type=\"ifc:IfcConnectionTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelConnectsPortToElement\" type=\"ifc:IfcRelConnectsPortToElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelConnectsPortToElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingPort\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPort\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelConnectsPorts\" type=\"ifc:IfcRelConnectsPorts\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelConnectsPorts\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingPort\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPort\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedPort\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPort\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RealizingElement\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelConnectsStructuralActivity\" type=\"ifc:IfcRelConnectsStructuralActivity\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelConnectsStructuralActivity\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedStructuralActivity\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralActivity\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelConnectsStructuralMember\" type=\"ifc:IfcRelConnectsStructuralMember\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelConnectsStructuralMember\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingStructuralMember\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralMember\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedStructuralConnection\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralConnection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCondition\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AdditionalConditions\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralConnectionCondition\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SupportedLength\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ConditionCoordinateSystem\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelConnectsWithRealizingElements\" type=\"ifc:IfcRelConnectsWithRealizingElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelConnectsWithRealizingElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RealizingElements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConnectionType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelContainedInSpatialStructure\" type=\"ifc:IfcRelContainedInSpatialStructure\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelContainedInSpatialStructure\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProduct\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingStructure\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelCoversBldgElements\" type=\"ifc:IfcRelCoversBldgElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelCoversBldgElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCovering\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelDecomposes\" type=\"ifc:IfcRelDecomposes\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelDecomposes\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingObject\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcObject\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelDefines\" type=\"ifc:IfcRelDefines\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelDefines\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcObject\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelDefinesByProperties\" type=\"ifc:IfcRelDefinesByProperties\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelDefinesByProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingPropertyDefinition\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelDefinesByType\" type=\"ifc:IfcRelDefinesByType\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelDefinesByType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingType\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTypeObject\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelFillsElement\" type=\"ifc:IfcRelFillsElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelFillsElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingOpeningElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOpeningElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelFlowControlElements\" type=\"ifc:IfcRelFlowControlElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelFlowControlElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedControlElements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionControlElement\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDistributionControlElement\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingFlowElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelInteractionRequirements\" type=\"ifc:IfcRelInteractionRequirements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelInteractionRequirements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DailyInteraction\" type=\"ifc:IfcCountMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ImportanceRating\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LocationOfInteraction\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedSpaceProgram\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpaceProgram\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingSpaceProgram\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpaceProgram\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelNests\" type=\"ifc:IfcRelNests\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelNests\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelOccupiesSpaces\" type=\"ifc:IfcRelOccupiesSpaces\" substitutionGroup=\"ifc:IfcRelAssignsToActor\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelOccupiesSpaces\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToActor\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelOverridesProperties\" type=\"ifc:IfcRelOverridesProperties\" substitutionGroup=\"ifc:IfcRelDefinesByProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelOverridesProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDefinesByProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverridingProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelProjectsElement\" type=\"ifc:IfcRelProjectsElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelProjectsElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedFeatureElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFeatureElementAddition\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelSchedulesCostItems\" type=\"ifc:IfcRelSchedulesCostItems\" substitutionGroup=\"ifc:IfcRelAssignsToControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelSchedulesCostItems\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToControl\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelSequence\" type=\"ifc:IfcRelSequence\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelSequence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProcess\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedProcess\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProcess\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeLag\" type=\"ifc:IfcTimeMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"SequenceType\" type=\"ifc:IfcSequenceEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelServicesBuildings\" type=\"ifc:IfcRelServicesBuildings\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelServicesBuildings\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingSystem\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSystem\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedBuildings\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSpatialStructureElement\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelSpaceBoundary\" type=\"ifc:IfcRelSpaceBoundary\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelSpaceBoundary\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingSpace\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpace\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectionGeometry\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PhysicalOrVirtualBoundary\" type=\"ifc:IfcPhysicalOrVirtualEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"InternalOrExternalBoundary\" type=\"ifc:IfcInternalOrExternalEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelVoidsElement\" type=\"ifc:IfcRelVoidsElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelVoidsElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedOpeningElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFeatureElementSubtraction\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelationship\" type=\"ifc:IfcRelationship\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelationship\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelaxation\" type=\"ifc:IfcRelaxation\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelaxation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelaxationValue\" type=\"ifc:IfcNormalisedRatioMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"InitialStress\" type=\"ifc:IfcNormalisedRatioMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRepresentation\" type=\"ifc:IfcRepresentation\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ContextOfItems\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RepresentationIdentifier\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RepresentationType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Items\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentationItem\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRepresentationContext\" type=\"ifc:IfcRepresentationContext\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRepresentationContext\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ContextIdentifier\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ContextType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRepresentationItem\" type=\"ifc:IfcRepresentationItem\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRepresentationItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRepresentationMap\" type=\"ifc:IfcRepresentationMap\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRepresentationMap\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MappingOrigin\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MappedRepresentation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcResource\" type=\"ifc:IfcResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcResource\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRevolvedAreaSolid\" type=\"ifc:IfcRevolvedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRevolvedAreaSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Axis\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis1Placement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Angle\" type=\"ifc:IfcPlaneAngleMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRibPlateProfileProperties\" type=\"ifc:IfcRibPlateProfileProperties\" substitutionGroup=\"ifc:IfcProfileProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRibPlateProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RibHeight\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RibWidth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RibSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Direction\" type=\"ifc:IfcRibPlateDirectionEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRoof\" type=\"ifc:IfcRoof\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRoof\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShapeType\" type=\"ifc:IfcRoofTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRoot\" type=\"ifc:IfcRoot\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRoot\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"GlobalId\" type=\"ifc:IfcGloballyUniqueId\"/>\r\n\t\t\t\t\t<xs:element name=\"OwnerHistory\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOwnerHistory\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRoundedEdgeFeature\" type=\"ifc:IfcRoundedEdgeFeature\" substitutionGroup=\"ifc:IfcEdgeFeature\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRoundedEdgeFeature\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEdgeFeature\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRoundedRectangleProfileDef\" type=\"ifc:IfcRoundedRectangleProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRoundedRectangleProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RoundingRadius\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:complexType name=\"IfcSIUnit-temp\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:restriction base=\"ifc:IfcNamedUnit\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UnitType\" type=\"ifc:IfcUnitEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:restriction>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSIUnit\" type=\"ifc:IfcSIUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSIUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSIUnit-temp\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Prefix\" type=\"ifc:IfcSIPrefix\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcSIUnitName\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSanitaryTerminalType\" type=\"ifc:IfcSanitaryTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSanitaryTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcScheduleTimeControl\" type=\"ifc:IfcScheduleTimeControl\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcScheduleTimeControl\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ActualStart\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EarlyStart\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LateStart\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ScheduleStart\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ActualFinish\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EarlyFinish\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LateFinish\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ScheduleFinish\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ScheduleDuration\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ActualDuration\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RemainingTime\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FreeFloat\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TotalFloat\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"IsCritical\" type=\"xs:boolean\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"StatusTime\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartFloat\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FinishFloat\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Completion\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSectionProperties\" type=\"ifc:IfcSectionProperties\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSectionProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SectionType\" type=\"ifc:IfcSectionTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"StartProfile\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EndProfile\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSectionReinforcementProperties\" type=\"ifc:IfcSectionReinforcementProperties\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSectionReinforcementProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalStartPosition\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalEndPosition\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"TransversePosition\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ReinforcementRole\" type=\"ifc:IfcReinforcingBarRoleEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"SectionDefinition\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionProperties\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionReinforcementDefinitions\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReinforcementBarProperties\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcReinforcementBarProperties\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSectionedSpine\" type=\"ifc:IfcSectionedSpine\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSectionedSpine\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SpineCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCompositeCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CrossSections\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProfileDef\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionPositions\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAxis2Placement3D\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSensorType\" type=\"ifc:IfcSensorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSensorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcServiceLife\" type=\"ifc:IfcServiceLife\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcServiceLife\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ServiceLifeType\" type=\"ifc:IfcServiceLifeTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ServiceLifeDuration\" type=\"ifc:IfcTimeMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcServiceLifeFactor\" type=\"ifc:IfcServiceLifeFactor\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcServiceLifeFactor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcServiceLifeFactorTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"UpperValue\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MostUsedValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LowerValue\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcShapeAspect\" type=\"ifc:IfcShapeAspect\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcShapeAspect\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShapeRepresentations\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeRepresentation\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcShapeRepresentation\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ProductDefinitional\" type=\"ex:logical\"/>\r\n\t\t\t\t\t<xs:element name=\"PartOfProductDefinitionShape\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProductDefinitionShape\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcShapeRepresentation\" type=\"ifc:IfcShapeRepresentation\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcShapeRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcShellBasedSurfaceModel\" type=\"ifc:IfcShellBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcShellBasedSurfaceModel\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SbsmBoundary\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcShell\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcShell\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSimpleProperty\" type=\"ifc:IfcSimpleProperty\" abstract=\"true\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSimpleProperty\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProperty\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSite\" type=\"ifc:IfcSite\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSite\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RefLatitude\" type=\"ifc:IfcCompoundPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RefLongitude\" type=\"ifc:IfcCompoundPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RefElevation\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LandTitleNumber\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SiteAddress\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPostalAddress\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSlab\" type=\"ifc:IfcSlab\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSlab\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSlabType\" type=\"ifc:IfcSlabType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSlabType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSlippageConnectionCondition\" type=\"ifc:IfcSlippageConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSlippageConnectionCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SlippageX\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SlippageY\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SlippageZ\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSolidModel\" type=\"ifc:IfcSolidModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSolidModel\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSoundProperties\" type=\"ifc:IfcSoundProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSoundProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"IsAttenuating\" type=\"ifc:IfcBoolean\"/>\r\n\t\t\t\t\t<xs:element name=\"SoundScale\" type=\"ifc:IfcSoundScaleEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PointOfMeasurement\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLocalPlacement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SoundValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSoundValue\" maxOccurs=\"8\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSoundValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSoundValue\" type=\"ifc:IfcSoundValue\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSoundValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SoundLevelTimeSeries\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Frequency\" type=\"ifc:IfcFrequencyMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"SoundLevelSingleValue\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDerivedMeasureValue\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSpace\" type=\"ifc:IfcSpace\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSpace\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"InteriorOrExteriorSpace\" type=\"ifc:IfcInternalOrExternalEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ElevationWithFlooring\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSpaceHeaterType\" type=\"ifc:IfcSpaceHeaterType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSpaceHeaterType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSpaceProgram\" type=\"ifc:IfcSpaceProgram\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSpaceProgram\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SpaceProgramIdentifier\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"MaxRequiredArea\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MinRequiredArea\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RequestedLocation\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StandardRequiredArea\" type=\"ifc:IfcAreaMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSpaceThermalLoadProperties\" type=\"ifc:IfcSpaceThermalLoadProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSpaceThermalLoadProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApplicableValueRatio\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThermalLoadSource\" type=\"ifc:IfcThermalLoadSourceEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"PropertySource\" type=\"ifc:IfcPropertySourceEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"SourceDescription\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MaximumValue\" type=\"ifc:IfcPowerMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"MinimumValue\" type=\"ifc:IfcPowerMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThermalLoadTimeSeriesValues\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedThermalLoadSource\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedPropertySource\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThermalLoadType\" type=\"ifc:IfcThermalLoadTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSpatialStructureElement\" type=\"ifc:IfcSpatialStructureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSpatialStructureElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LongName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CompositionType\" type=\"ifc:IfcElementCompositionEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStackTerminalType\" type=\"ifc:IfcStackTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStackTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStair\" type=\"ifc:IfcStair\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStair\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShapeType\" type=\"ifc:IfcStairTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStairFlight\" type=\"ifc:IfcStairFlight\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStairFlight\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NumberOfRiser\" type=\"xs:long\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"NumberOfTreads\" type=\"xs:long\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RiserHeight\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TreadLength\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStairFlightType\" type=\"ifc:IfcStairFlightType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStairFlightType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralAction\" type=\"ifc:IfcStructuralAction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralAction\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DestabilizingLoad\" type=\"xs:boolean\"/>\r\n\t\t\t\t\t<xs:element name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"CausedBy\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralReaction\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralActivity\" type=\"ifc:IfcStructuralActivity\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralActivity\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AppliedLoad\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoad\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"GlobalOrLocal\" type=\"ifc:IfcGlobalOrLocalEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralAnalysisModel\" type=\"ifc:IfcStructuralAnalysisModel\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralAnalysisModel\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAnalysisModelTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"OrientationOf2DPlane\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LoadedBy\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralLoadGroup\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HasResults\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralResultGroup\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralResultGroup\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralConnection\" type=\"ifc:IfcStructuralConnection\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralConnection\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCondition\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralConnectionCondition\" type=\"ifc:IfcStructuralConnectionCondition\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralConnectionCondition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralCurveConnection\" type=\"ifc:IfcStructuralCurveConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralCurveConnection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralCurveMember\" type=\"ifc:IfcStructuralCurveMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralCurveMember\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralCurveMemberVarying\" type=\"ifc:IfcStructuralCurveMemberVarying\" substitutionGroup=\"ifc:IfcStructuralCurveMember\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralCurveMemberVarying\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveMember\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralItem\" type=\"ifc:IfcStructuralItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLinearAction\" type=\"ifc:IfcStructuralLinearAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLinearAction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLinearActionVarying\" type=\"ifc:IfcStructuralLinearActionVarying\" substitutionGroup=\"ifc:IfcStructuralLinearAction\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLinearActionVarying\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLinearAction\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VaryingAppliedLoadLocation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SubsequentAppliedLoads\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoad\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralLoad\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoad\" type=\"ifc:IfcStructuralLoad\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoad\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoadGroup\" type=\"ifc:IfcStructuralLoadGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoadGroup\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcLoadGroupTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ActionType\" type=\"ifc:IfcActionTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ActionSource\" type=\"ifc:IfcActionSourceTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"Coefficient\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Purpose\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoadLinearForce\" type=\"ifc:IfcStructuralLoadLinearForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoadLinearForce\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LinearForceX\" type=\"ifc:IfcLinearForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearForceY\" type=\"ifc:IfcLinearForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearForceZ\" type=\"ifc:IfcLinearForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearMomentX\" type=\"ifc:IfcLinearMomentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearMomentY\" type=\"ifc:IfcLinearMomentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearMomentZ\" type=\"ifc:IfcLinearMomentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoadPlanarForce\" type=\"ifc:IfcStructuralLoadPlanarForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoadPlanarForce\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PlanarForceX\" type=\"ifc:IfcPlanarForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PlanarForceY\" type=\"ifc:IfcPlanarForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PlanarForceZ\" type=\"ifc:IfcPlanarForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacement\" type=\"ifc:IfcStructuralLoadSingleDisplacement\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DisplacementX\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DisplacementY\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DisplacementZ\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RotationalDisplacementRX\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RotationalDisplacementRY\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RotationalDisplacementRZ\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacementDistortion\" type=\"ifc:IfcStructuralLoadSingleDisplacementDistortion\" substitutionGroup=\"ifc:IfcStructuralLoadSingleDisplacement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacementDistortion\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleDisplacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Distortion\" type=\"ifc:IfcCurvatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoadSingleForce\" type=\"ifc:IfcStructuralLoadSingleForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoadSingleForce\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ForceX\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ForceY\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ForceZ\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MomentX\" type=\"ifc:IfcTorqueMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MomentY\" type=\"ifc:IfcTorqueMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MomentZ\" type=\"ifc:IfcTorqueMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoadSingleForceWarping\" type=\"ifc:IfcStructuralLoadSingleForceWarping\" substitutionGroup=\"ifc:IfcStructuralLoadSingleForce\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoadSingleForceWarping\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleForce\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WarpingMoment\" type=\"ifc:IfcWarpingMomentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoadStatic\" type=\"ifc:IfcStructuralLoadStatic\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoadStatic\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoadTemperature\" type=\"ifc:IfcStructuralLoadTemperature\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoadTemperature\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DeltaT_Constant\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DeltaT_Y\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DeltaT_Z\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralMember\" type=\"ifc:IfcStructuralMember\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralMember\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralPlanarAction\" type=\"ifc:IfcStructuralPlanarAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralPlanarAction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralPlanarActionVarying\" type=\"ifc:IfcStructuralPlanarActionVarying\" substitutionGroup=\"ifc:IfcStructuralPlanarAction\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralPlanarActionVarying\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralPlanarAction\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VaryingAppliedLoadLocation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SubsequentAppliedLoads\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoad\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralLoad\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralPointAction\" type=\"ifc:IfcStructuralPointAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralPointAction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralPointConnection\" type=\"ifc:IfcStructuralPointConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralPointConnection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralPointReaction\" type=\"ifc:IfcStructuralPointReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralPointReaction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralProfileProperties\" type=\"ifc:IfcStructuralProfileProperties\" substitutionGroup=\"ifc:IfcGeneralProfileProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeneralProfileProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TorsionalConstantX\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MomentOfInertiaYZ\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MomentOfInertiaY\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MomentOfInertiaZ\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"WarpingConstant\" type=\"ifc:IfcWarpingConstantMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShearCentreZ\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShearCentreY\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShearDeformationAreaZ\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShearDeformationAreaY\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MaximumSectionModulusY\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MinimumSectionModulusY\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MaximumSectionModulusZ\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MinimumSectionModulusZ\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TorsionalSectionModulus\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralReaction\" type=\"ifc:IfcStructuralReaction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralReaction\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralResultGroup\" type=\"ifc:IfcStructuralResultGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralResultGroup\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TheoryType\" type=\"ifc:IfcAnalysisTheoryTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ResultForLoadGroup\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IsLinear\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralSteelProfileProperties\" type=\"ifc:IfcStructuralSteelProfileProperties\" substitutionGroup=\"ifc:IfcStructuralProfileProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralSteelProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralProfileProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShearAreaZ\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShearAreaY\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PlasticShapeFactorY\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PlasticShapeFactorZ\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralSurfaceConnection\" type=\"ifc:IfcStructuralSurfaceConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralSurfaceConnection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralSurfaceMember\" type=\"ifc:IfcStructuralSurfaceMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralSurfaceMember\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralSurfaceMemberVarying\" type=\"ifc:IfcStructuralSurfaceMemberVarying\" substitutionGroup=\"ifc:IfcStructuralSurfaceMember\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralSurfaceMemberVarying\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceMember\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SubsequentThickness\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VaryingThicknessLocation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuredDimensionCallout\" type=\"ifc:IfcStructuredDimensionCallout\" substitutionGroup=\"ifc:IfcDraughtingCallout\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuredDimensionCallout\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCallout\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStyledItem\" type=\"ifc:IfcStyledItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStyledItem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Item\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Styles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPresentationStyleAssignment\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPresentationStyleAssignment\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStyledRepresentation\" type=\"ifc:IfcStyledRepresentation\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStyledRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSubContractResource\" type=\"ifc:IfcSubContractResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSubContractResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SubContractor\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"JobDescription\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSubedge\" type=\"ifc:IfcSubedge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSubedge\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ParentEdge\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcEdge\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurface\" type=\"ifc:IfcSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurface\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceCurveSweptAreaSolid\" type=\"ifc:IfcSurfaceCurveSweptAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceCurveSweptAreaSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Directrix\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartParam\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t\t<xs:element name=\"EndParam\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t\t<xs:element name=\"ReferenceSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceOfLinearExtrusion\" type=\"ifc:IfcSurfaceOfLinearExtrusion\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceOfLinearExtrusion\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceOfRevolution\" type=\"ifc:IfcSurfaceOfRevolution\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceOfRevolution\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AxisPosition\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis1Placement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceStyle\" type=\"ifc:IfcSurfaceStyle\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Side\" type=\"ifc:IfcSurfaceSide\"/>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Styles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\" maxOccurs=\"5\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSurfaceStyleElementSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceStyleLighting\" type=\"ifc:IfcSurfaceStyleLighting\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceStyleLighting\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DiffuseReflectionColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransmissionColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReflectanceColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceStyleRefraction\" type=\"ifc:IfcSurfaceStyleRefraction\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceStyleRefraction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RefractionIndex\" type=\"ifc:IfcReal\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DispersionFactor\" type=\"ifc:IfcReal\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceStyleRendering\" type=\"ifc:IfcSurfaceStyleRendering\" substitutionGroup=\"ifc:IfcSurfaceStyleShading\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceStyleRendering\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceStyleShading\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Transparency\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DiffuseColour\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransmissionColour\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReflectionColour\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SpecularColour\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SpecularHighlight\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReflectanceMethod\" type=\"ifc:IfcReflectanceMethodEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceStyleShading\" type=\"ifc:IfcSurfaceStyleShading\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceStyleShading\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SurfaceColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceStyleWithTextures\" type=\"ifc:IfcSurfaceStyleWithTextures\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceStyleWithTextures\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Textures\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSurfaceTexture\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceTexture\" type=\"ifc:IfcSurfaceTexture\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceTexture\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RepeatS\" type=\"xs:boolean\"/>\r\n\t\t\t\t\t<xs:element name=\"RepeatT\" type=\"xs:boolean\"/>\r\n\t\t\t\t\t<xs:element name=\"TextureType\" type=\"ifc:IfcSurfaceTextureEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"TextureTransform\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator2D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSweptAreaSolid\" type=\"ifc:IfcSweptAreaSolid\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSweptAreaSolid\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SweptArea\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSweptDiskSolid\" type=\"ifc:IfcSweptDiskSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSweptDiskSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Directrix\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"InnerRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"StartParam\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t\t<xs:element name=\"EndParam\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSweptSurface\" type=\"ifc:IfcSweptSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSweptSurface\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SweptCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSwitchingDeviceType\" type=\"ifc:IfcSwitchingDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSwitchingDeviceType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSymbolStyle\" type=\"ifc:IfcSymbolStyle\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSymbolStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"StyleOfSymbol\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSymbolStyleSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSystem\" type=\"ifc:IfcSystem\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSystem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSystemFurnitureElementType\" type=\"ifc:IfcSystemFurnitureElementType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSystemFurnitureElementType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTShapeProfileDef\" type=\"ifc:IfcTShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeEdgeRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"WebEdgeRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"WebSlope\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTable\" type=\"ifc:IfcTable\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTable\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"xs:normalizedString\"/>\r\n\t\t\t\t\t<xs:element name=\"Rows\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableRow\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTableRow\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTableRow\" type=\"ifc:IfcTableRow\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTableRow\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RowCells\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IsHeading\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTankType\" type=\"ifc:IfcTankType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTankType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTask\" type=\"ifc:IfcTask\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTask\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TaskId\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"Status\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"WorkMethod\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"IsMilestone\" type=\"xs:boolean\"/>\r\n\t\t\t\t\t<xs:element name=\"Priority\" type=\"xs:long\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTelecomAddress\" type=\"ifc:IfcTelecomAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTelecomAddress\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TelephoneNumbers\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FacsimileNumbers\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PagerNumber\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ElectronicMailAddresses\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WWWHomePageURL\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTendon\" type=\"ifc:IfcTendon\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTendon\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"TensionForce\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PreStress\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FrictionCoefficient\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"AnchorageSlip\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MinCurvatureRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTendonAnchor\" type=\"ifc:IfcTendonAnchor\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTendonAnchor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTerminatorSymbol\" type=\"ifc:IfcTerminatorSymbol\" substitutionGroup=\"ifc:IfcAnnotationSymbolOccurrence\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTerminatorSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationSymbolOccurrence\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AnnotatedCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAnnotationCurveOccurrence\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextLiteral\" type=\"ifc:IfcTextLiteral\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextLiteral\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Literal\" type=\"ifc:IfcPresentableText\"/>\r\n\t\t\t\t\t<xs:element name=\"Placement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Alignment\" type=\"ifc:IfcTextAlignment\"/>\r\n\t\t\t\t\t<xs:element name=\"Path\" type=\"ifc:IfcTextPath\"/>\r\n\t\t\t\t\t<xs:element name=\"Font\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFontSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextLiteralWithExtent\" type=\"ifc:IfcTextLiteralWithExtent\" substitutionGroup=\"ifc:IfcTextLiteral\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextLiteralWithExtent\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTextLiteral\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Extent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPlanarExtent\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextStyle\" type=\"ifc:IfcTextStyle\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"CharacterGlyphAppearance\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCharacterStyleSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TextStyles\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTextStyleSelect\" maxOccurs=\"3\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTextStyleSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextStyleWithBoxCharacteristics\" type=\"ifc:IfcTextStyleWithBoxCharacteristics\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextStyleWithBoxCharacteristics\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BoxHeight\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"BoxWidth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"BoxSlantAngle\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"BoxRotateAngle\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextStyleWithMirror\" type=\"ifc:IfcTextStyleWithMirror\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextStyleWithMirror\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MirrorPlacement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextStyleWithSpacing\" type=\"ifc:IfcTextStyleWithSpacing\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextStyleWithSpacing\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CharacterSpacing\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCharacterSpacingSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextureCoordinate\" type=\"ifc:IfcTextureCoordinate\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextureCoordinate\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Texture\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleWithTextures\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextureCoordinateGenerator\" type=\"ifc:IfcTextureCoordinateGenerator\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextureCoordinateGenerator\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Mode\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Parameter\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSimpleValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSimpleValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextureMap\" type=\"ifc:IfcTextureMap\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextureMap\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VertexBasedTextures\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertexBasedTextureMap\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcVertexBasedTextureMap\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextureVertex\" type=\"ifc:IfcTextureVertex\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextureVertex\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Coordinates\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcParameterValue\" minOccurs=\"2\" maxOccurs=\"2\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcThermalMaterialProperties\" type=\"ifc:IfcThermalMaterialProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcThermalMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SpecificHeatCapacity\" type=\"ifc:IfcSpecificHeatCapacityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"BoilingPoint\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FreezingPoint\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThermalConductivity\" type=\"ifc:IfcThermalConductivityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTimeSeries\" type=\"ifc:IfcTimeSeries\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTimeSeries\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"StartTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EndTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeSeriesDataType\" type=\"ifc:IfcTimeSeriesDataTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedDataOrigin\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTimeSeriesReferenceRelationship\" type=\"ifc:IfcTimeSeriesReferenceRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTimeSeriesReferenceRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ReferencedTimeSeries\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeSeriesReferences\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDocumentSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTimeSeriesSchedule\" type=\"ifc:IfcTimeSeriesSchedule\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTimeSeriesSchedule\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApplicableDates\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeSeriesScheduleType\" type=\"ifc:IfcTimeSeriesScheduleTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"TimeSeries\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTimeSeriesValue\" type=\"ifc:IfcTimeSeriesValue\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTimeSeriesValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ListValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTopologicalRepresentationItem\" type=\"ifc:IfcTopologicalRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTopologicalRepresentationItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTopologyRepresentation\" type=\"ifc:IfcTopologyRepresentation\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTopologyRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTransformerType\" type=\"ifc:IfcTransformerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTransformerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTransportElement\" type=\"ifc:IfcTransportElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTransportElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcTransportElementTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CapacityByWeight\" type=\"ifc:IfcMassMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CapacityByNumber\" type=\"ifc:IfcCountMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTransportElementType\" type=\"ifc:IfcTransportElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTransportElementType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTrapeziumProfileDef\" type=\"ifc:IfcTrapeziumProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTrapeziumProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BottomXDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"TopXDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"TopXOffset\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTrimmedCurve\" type=\"ifc:IfcTrimmedCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTrimmedCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Trim1\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Trim2\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SenseAgreement\" type=\"xs:boolean\"/>\r\n\t\t\t\t\t<xs:element name=\"MasterRepresentation\" type=\"ifc:IfcTrimmingPreference\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTubeBundleType\" type=\"ifc:IfcTubeBundleType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTubeBundleType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTwoDirectionRepeatFactor\" type=\"ifc:IfcTwoDirectionRepeatFactor\" substitutionGroup=\"ifc:IfcOneDirectionRepeatFactor\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTwoDirectionRepeatFactor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcOneDirectionRepeatFactor\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SecondRepeatFactor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTypeObject\" type=\"ifc:IfcTypeObject\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTypeObject\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApplicableOccurrence\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"HasPropertySets\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTypeProduct\" type=\"ifc:IfcTypeProduct\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTypeProduct\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RepresentationMaps\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentationMap\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Tag\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcUShapeProfileDef\" type=\"ifc:IfcUShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcUShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"EdgeRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcUnitAssignment\" type=\"ifc:IfcUnitAssignment\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcUnitAssignment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Units\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcUnit\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcUnitaryEquipmentType\" type=\"ifc:IfcUnitaryEquipmentType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcUnitaryEquipmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcValveType\" type=\"ifc:IfcValveType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcValveType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcVector\" type=\"ifc:IfcVector\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcVector\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Orientation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Magnitude\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcVertex\" type=\"ifc:IfcVertex\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcVertex\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcVertexBasedTextureMap\" type=\"ifc:IfcVertexBasedTextureMap\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcVertexBasedTextureMap\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TextureVertices\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextureVertex\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTextureVertex\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VertexBasedGeometry\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPolyLoop\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcVertexLoop\" type=\"ifc:IfcVertexLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcVertexLoop\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LoopVertex\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertex\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcVertexPoint\" type=\"ifc:IfcVertexPoint\" substitutionGroup=\"ifc:IfcVertex\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcVertexPoint\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcVertex\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VertexGeometry\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcVibrationIsolatorType\" type=\"ifc:IfcVibrationIsolatorType\" substitutionGroup=\"ifc:IfcDiscreteAccessoryType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcVibrationIsolatorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDiscreteAccessoryType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcVirtualElement\" type=\"ifc:IfcVirtualElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcVirtualElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcVirtualGridIntersection\" type=\"ifc:IfcVirtualGridIntersection\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcVirtualGridIntersection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"IntersectingAxes\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" minOccurs=\"2\" maxOccurs=\"2\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OffsetDistances\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\" minOccurs=\"2\" maxOccurs=\"3\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWall\" type=\"ifc:IfcWall\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWall\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWallStandardCase\" type=\"ifc:IfcWallStandardCase\" substitutionGroup=\"ifc:IfcWall\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWallStandardCase\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcWall\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWallType\" type=\"ifc:IfcWallType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWallType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWasteTerminalType\" type=\"ifc:IfcWasteTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWasteTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWaterProperties\" type=\"ifc:IfcWaterProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWaterProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"IsPotable\" type=\"xs:boolean\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Hardness\" type=\"ifc:IfcIonConcentrationMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"AlkalinityConcentration\" type=\"ifc:IfcIonConcentrationMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"AcidityConcentration\" type=\"ifc:IfcIonConcentrationMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ImpuritiesContent\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PHLevel\" type=\"ifc:IfcPHMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DissolvedSolidsContent\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWindow\" type=\"ifc:IfcWindow\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWindow\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWindowLiningProperties\" type=\"ifc:IfcWindowLiningProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWindowLiningProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LiningThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TransomThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MullionThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FirstTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SecondTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FirstMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SecondMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWindowPanelProperties\" type=\"ifc:IfcWindowPanelProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWindowPanelProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcWindowPanelOperationEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWindowStyle\" type=\"ifc:IfcWindowStyle\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWindowStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ConstructionType\" type=\"ifc:IfcWindowStyleConstructionEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcWindowStyleOperationEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ParameterTakesPrecedence\" type=\"xs:boolean\"/>\r\n\t\t\t\t\t<xs:element name=\"Sizeable\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWorkControl\" type=\"ifc:IfcWorkControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWorkControl\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Identifier\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"CreationDate\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Creators\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPerson\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Purpose\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Duration\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TotalFloat\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"StartTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FinishTime\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WorkControlType\" type=\"ifc:IfcWorkControlTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedControlType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWorkPlan\" type=\"ifc:IfcWorkPlan\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWorkPlan\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWorkSchedule\" type=\"ifc:IfcWorkSchedule\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWorkSchedule\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcZShapeProfileDef\" type=\"ifc:IfcZShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcZShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"EdgeRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcZone\" type=\"ifc:IfcZone\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcZone\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<!-- group declarations (for SELECT data type definitions) -->\r\n\t<xs:complexType name=\"IfcActorSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcActorSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcAppliedValueSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcAppliedValueSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcAxis2Placement\">\r\n\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcAxis2Placement\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcBooleanOperand\">\r\n\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcBooleanOperand\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcHalfSpaceSolid\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcCharacterSpacingSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcCharacterSpacingSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCharacterSpacingSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcCharacterStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcCharacterStyleSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCharacterStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcClassificationNotationSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcClassificationNotationSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcClassificationNotation\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcColour\">\r\n\t\t<xs:group ref=\"ifc:IfcColour\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcColour\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcColourOrFactor\">\r\n\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcColourOrFactor\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcConditionCriterionSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcConditionCriterionSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcConditionCriterionSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcLabel\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcCsgSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcCsgSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCsgSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcCurveFontOrScaledCurveFontSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCurveFontOrScaledCurveFontSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontAndScaling\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcCurveStyleFontSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCurveStyleFontSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcDateTimeSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDateTimeSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLocalTime\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcDefinedSymbolSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcDefinedSymbolSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDefinedSymbolSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedSymbol\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSymbol\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcDerivedMeasureValue\">\r\n\t\t<xs:group ref=\"ifc:IfcDerivedMeasureValue\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDerivedMeasureValue\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcDocumentSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcDocumentSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDocumentSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcDraughtingCalloutElement\">\r\n\t\t<xs:group ref=\"ifc:IfcDraughtingCalloutElement\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDraughtingCalloutElement\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcAnnotationCurveOccurrence\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAnnotationTextOccurrence\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAnnotationSymbolOccurrence\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcFillAreaStyleTileShapeSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcFillAreaStyleTileShapeSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcFillAreaStyleTileShapeSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTileSymbolWithStyle\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcFillStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcFillStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleHatching\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTiles\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedHatchStyle\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcFontSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcFontSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcFontSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedTextFont\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedTextFont\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcGeometricSetSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcGeometricSetSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcLayeredItem\">\r\n\t\t<xs:group ref=\"ifc:IfcLayeredItem\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcLayeredItem\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRepresentation\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcLibrarySelect\">\r\n\t\t<xs:group ref=\"ifc:IfcLibrarySelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcLibrarySelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcLightDistributionDataSourceSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcLightDistributionDataSourceSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLightIntensityDistribution\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcMaterialSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcMaterialSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcMaterialSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterial\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayerSetUsage\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayerSet\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcMeasureValue\">\r\n\t\t<xs:group ref=\"ifc:IfcMeasureValue\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcMeasureValue\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcMetricValueSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcMetricValueSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLocalTime\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTable\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcText\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcObjectReferenceSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcObjectReferenceSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterial\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLocalTime\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAddress\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcPresentationStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcPresentationStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcNullStyle\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyle\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSymbolStyle\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyle\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTextStyle\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyle\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcShell\">\r\n\t\t<xs:group ref=\"ifc:IfcShell\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcShell\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcOpenShell\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcSimpleValue\">\r\n\t\t<xs:group ref=\"ifc:IfcSimpleValue\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSimpleValue\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcInteger\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcReal\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcBoolean\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcText\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLabel\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLogical\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcSizeSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSizeSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcSpecularHighlightSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSpecularHighlightSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcSpecularExponent\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSpecularRoughness\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcStructuralActivityAssignmentSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcStructuralActivityAssignmentSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcStructuralItem\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcBuildingElement\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcSurfaceStyleElementSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSurfaceStyleElementSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleShading\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleLighting\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleWithTextures\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSufaceStyle\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleRefraction\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcSymbolStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcSymbolStyleSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSymbolStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcTextStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcTextStyleSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcTextStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcTextStyleWithMirror\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTextStyleWithSpacing\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTextStyleWithBoxCharacteristics\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcTrimmingSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcTrimmingSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcUnit\">\r\n\t\t<xs:group ref=\"ifc:IfcUnit\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcUnit\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcDerivedUnit\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcValue\">\r\n\t\t<xs:group ref=\"ifc:IfcValue\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcValue\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcInteger\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcReal\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcBoolean\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcText\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLabel\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLogical\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcVectorOrDirection\">\r\n\t\t<xs:group ref=\"ifc:IfcVectorOrDirection\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcVectorOrDirection\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<!-- enumeration type declarations (for ENUMERATION data type definitions) -->\r\n\t<xs:element name=\"IfcActionSourceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcActionSourceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcActionSourceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dead_load_g\"/>\r\n\t\t\t<xs:enumeration value=\"completion_g1\"/>\r\n\t\t\t<xs:enumeration value=\"live_load_q\"/>\r\n\t\t\t<xs:enumeration value=\"snow_s\"/>\r\n\t\t\t<xs:enumeration value=\"wind_w\"/>\r\n\t\t\t<xs:enumeration value=\"prestressing_p\"/>\r\n\t\t\t<xs:enumeration value=\"settlement_u\"/>\r\n\t\t\t<xs:enumeration value=\"temperature_t\"/>\r\n\t\t\t<xs:enumeration value=\"earthquake_e\"/>\r\n\t\t\t<xs:enumeration value=\"fire\"/>\r\n\t\t\t<xs:enumeration value=\"impulse\"/>\r\n\t\t\t<xs:enumeration value=\"impact\"/>\r\n\t\t\t<xs:enumeration value=\"transport\"/>\r\n\t\t\t<xs:enumeration value=\"erection\"/>\r\n\t\t\t<xs:enumeration value=\"propping\"/>\r\n\t\t\t<xs:enumeration value=\"system_imperfection\"/>\r\n\t\t\t<xs:enumeration value=\"shrinkage\"/>\r\n\t\t\t<xs:enumeration value=\"creep\"/>\r\n\t\t\t<xs:enumeration value=\"lack_of_fit\"/>\r\n\t\t\t<xs:enumeration value=\"buoyancy\"/>\r\n\t\t\t<xs:enumeration value=\"ice\"/>\r\n\t\t\t<xs:enumeration value=\"current\"/>\r\n\t\t\t<xs:enumeration value=\"wave\"/>\r\n\t\t\t<xs:enumeration value=\"rain\"/>\r\n\t\t\t<xs:enumeration value=\"brakes\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcActionTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcActionTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcActionTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"permanent_g\"/>\r\n\t\t\t<xs:enumeration value=\"variable_q\"/>\r\n\t\t\t<xs:enumeration value=\"extraordinary_a\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcActuatorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcActuatorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcActuatorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"electricactuator\"/>\r\n\t\t\t<xs:enumeration value=\"handoperatedactuator\"/>\r\n\t\t\t<xs:enumeration value=\"hydraulicactuator\"/>\r\n\t\t\t<xs:enumeration value=\"pneumaticactuator\"/>\r\n\t\t\t<xs:enumeration value=\"thermostaticactuator\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAddressTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAddressTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAddressTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"office\"/>\r\n\t\t\t<xs:enumeration value=\"site\"/>\r\n\t\t\t<xs:enumeration value=\"home\"/>\r\n\t\t\t<xs:enumeration value=\"distributionpoint\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAheadOrBehind\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAheadOrBehind\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAheadOrBehind\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"ahead\"/>\r\n\t\t\t<xs:enumeration value=\"behind\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAirTerminalBoxTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAirTerminalBoxTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAirTerminalBoxTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"constantflow\"/>\r\n\t\t\t<xs:enumeration value=\"variableflowpressuredependant\"/>\r\n\t\t\t<xs:enumeration value=\"variableflowpressureindependant\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAirTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAirTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAirTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"grille\"/>\r\n\t\t\t<xs:enumeration value=\"register\"/>\r\n\t\t\t<xs:enumeration value=\"diffuser\"/>\r\n\t\t\t<xs:enumeration value=\"eyeball\"/>\r\n\t\t\t<xs:enumeration value=\"iris\"/>\r\n\t\t\t<xs:enumeration value=\"lineargrille\"/>\r\n\t\t\t<xs:enumeration value=\"lineardiffuser\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAirToAirHeatRecoveryTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAirToAirHeatRecoveryTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"fixedplatecounterflowexchanger\"/>\r\n\t\t\t<xs:enumeration value=\"fixedplatecrossflowexchanger\"/>\r\n\t\t\t<xs:enumeration value=\"fixedplateparallelflowexchanger\"/>\r\n\t\t\t<xs:enumeration value=\"rotarywheel\"/>\r\n\t\t\t<xs:enumeration value=\"runaroundcoilloop\"/>\r\n\t\t\t<xs:enumeration value=\"heatpipe\"/>\r\n\t\t\t<xs:enumeration value=\"twintowerenthalpyrecoveryloops\"/>\r\n\t\t\t<xs:enumeration value=\"thermosiphonsealedtubeheatexchangers\"/>\r\n\t\t\t<xs:enumeration value=\"thermosiphoncoiltypeheatexchangers\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAlarmTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAlarmTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAlarmTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bell\"/>\r\n\t\t\t<xs:enumeration value=\"breakglassbutton\"/>\r\n\t\t\t<xs:enumeration value=\"light\"/>\r\n\t\t\t<xs:enumeration value=\"manualpullbox\"/>\r\n\t\t\t<xs:enumeration value=\"siren\"/>\r\n\t\t\t<xs:enumeration value=\"whistle\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAnalysisModelTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAnalysisModelTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAnalysisModelTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"in_plane_loading_2d\"/>\r\n\t\t\t<xs:enumeration value=\"out_plane_loading_2d\"/>\r\n\t\t\t<xs:enumeration value=\"loading_3d\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAnalysisTheoryTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAnalysisTheoryTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAnalysisTheoryTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"first_order_theory\"/>\r\n\t\t\t<xs:enumeration value=\"second_order_theory\"/>\r\n\t\t\t<xs:enumeration value=\"third_order_theory\"/>\r\n\t\t\t<xs:enumeration value=\"full_nonlinear_theory\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcArithmeticOperatorEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcArithmeticOperatorEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcArithmeticOperatorEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"add\"/>\r\n\t\t\t<xs:enumeration value=\"divide\"/>\r\n\t\t\t<xs:enumeration value=\"multiply\"/>\r\n\t\t\t<xs:enumeration value=\"subtract\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAssemblyPlaceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAssemblyPlaceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAssemblyPlaceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"site\"/>\r\n\t\t\t<xs:enumeration value=\"factory\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcBSplineCurveForm\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBSplineCurveForm\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcBSplineCurveForm\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"polyline_form\"/>\r\n\t\t\t<xs:enumeration value=\"circular_arc\"/>\r\n\t\t\t<xs:enumeration value=\"elliptic_arc\"/>\r\n\t\t\t<xs:enumeration value=\"parabolic_arc\"/>\r\n\t\t\t<xs:enumeration value=\"hyperbolic_arc\"/>\r\n\t\t\t<xs:enumeration value=\"unspecified\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcBeamTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBeamTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcBeamTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"beam\"/>\r\n\t\t\t<xs:enumeration value=\"joist\"/>\r\n\t\t\t<xs:enumeration value=\"lintel\"/>\r\n\t\t\t<xs:enumeration value=\"t_beam\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcBenchmarkEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBenchmarkEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcBenchmarkEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"greaterthan\"/>\r\n\t\t\t<xs:enumeration value=\"greaterthanorequalto\"/>\r\n\t\t\t<xs:enumeration value=\"lessthan\"/>\r\n\t\t\t<xs:enumeration value=\"lessthanorequalto\"/>\r\n\t\t\t<xs:enumeration value=\"equalto\"/>\r\n\t\t\t<xs:enumeration value=\"notequalto\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcBoilerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBoilerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcBoilerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"water\"/>\r\n\t\t\t<xs:enumeration value=\"steam\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcBooleanOperator\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBooleanOperator\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcBooleanOperator\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"union\"/>\r\n\t\t\t<xs:enumeration value=\"intersection\"/>\r\n\t\t\t<xs:enumeration value=\"difference\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCableCarrierFittingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCableCarrierFittingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCableCarrierFittingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bend\"/>\r\n\t\t\t<xs:enumeration value=\"cross\"/>\r\n\t\t\t<xs:enumeration value=\"reducer\"/>\r\n\t\t\t<xs:enumeration value=\"tee\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCableCarrierSegmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCableCarrierSegmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCableCarrierSegmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cableladdersegment\"/>\r\n\t\t\t<xs:enumeration value=\"cabletraysegment\"/>\r\n\t\t\t<xs:enumeration value=\"cabletrunkingsegment\"/>\r\n\t\t\t<xs:enumeration value=\"conduitsegment\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCableSegmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCableSegmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCableSegmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cablesegment\"/>\r\n\t\t\t<xs:enumeration value=\"conductorsegment\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcChangeActionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcChangeActionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcChangeActionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"nochange\"/>\r\n\t\t\t<xs:enumeration value=\"modified\"/>\r\n\t\t\t<xs:enumeration value=\"added\"/>\r\n\t\t\t<xs:enumeration value=\"deleted\"/>\r\n\t\t\t<xs:enumeration value=\"modifiedadded\"/>\r\n\t\t\t<xs:enumeration value=\"modifieddeleted\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcChillerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcChillerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcChillerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"aircooled\"/>\r\n\t\t\t<xs:enumeration value=\"watercooled\"/>\r\n\t\t\t<xs:enumeration value=\"heatrecovery\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCoilTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCoilTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCoilTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dxcoolingcoil\"/>\r\n\t\t\t<xs:enumeration value=\"watercoolingcoil\"/>\r\n\t\t\t<xs:enumeration value=\"steamheatingcoil\"/>\r\n\t\t\t<xs:enumeration value=\"waterheatingcoil\"/>\r\n\t\t\t<xs:enumeration value=\"electricheatingcoil\"/>\r\n\t\t\t<xs:enumeration value=\"gasheatingcoil\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcColumnTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcColumnTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcColumnTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"column\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCompressorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCompressorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCompressorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dynamic\"/>\r\n\t\t\t<xs:enumeration value=\"reciprocating\"/>\r\n\t\t\t<xs:enumeration value=\"rotary\"/>\r\n\t\t\t<xs:enumeration value=\"scroll\"/>\r\n\t\t\t<xs:enumeration value=\"trochoidal\"/>\r\n\t\t\t<xs:enumeration value=\"singlestage\"/>\r\n\t\t\t<xs:enumeration value=\"booster\"/>\r\n\t\t\t<xs:enumeration value=\"opentype\"/>\r\n\t\t\t<xs:enumeration value=\"hermetic\"/>\r\n\t\t\t<xs:enumeration value=\"semihermetic\"/>\r\n\t\t\t<xs:enumeration value=\"weldedshellhermetic\"/>\r\n\t\t\t<xs:enumeration value=\"rollingpiston\"/>\r\n\t\t\t<xs:enumeration value=\"rotaryvane\"/>\r\n\t\t\t<xs:enumeration value=\"singlescrew\"/>\r\n\t\t\t<xs:enumeration value=\"twinscrew\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCondenserTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCondenserTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCondenserTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"watercooledshelltube\"/>\r\n\t\t\t<xs:enumeration value=\"watercooledshellcoil\"/>\r\n\t\t\t<xs:enumeration value=\"watercooledtubeintube\"/>\r\n\t\t\t<xs:enumeration value=\"watercooledbrazedplate\"/>\r\n\t\t\t<xs:enumeration value=\"aircooled\"/>\r\n\t\t\t<xs:enumeration value=\"evaporativecooled\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcConnectionTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcConnectionTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcConnectionTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"atpath\"/>\r\n\t\t\t<xs:enumeration value=\"atstart\"/>\r\n\t\t\t<xs:enumeration value=\"atend\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcConstraintEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcConstraintEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcConstraintEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"hard\"/>\r\n\t\t\t<xs:enumeration value=\"soft\"/>\r\n\t\t\t<xs:enumeration value=\"advisory\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcControllerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcControllerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcControllerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"floating\"/>\r\n\t\t\t<xs:enumeration value=\"proportional\"/>\r\n\t\t\t<xs:enumeration value=\"proportionalintegral\"/>\r\n\t\t\t<xs:enumeration value=\"proportionalintegralderivative\"/>\r\n\t\t\t<xs:enumeration value=\"timedtwoposition\"/>\r\n\t\t\t<xs:enumeration value=\"twoposition\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCooledBeamTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCooledBeamTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCooledBeamTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"active\"/>\r\n\t\t\t<xs:enumeration value=\"passive\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCoolingTowerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCoolingTowerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCoolingTowerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"naturaldraft\"/>\r\n\t\t\t<xs:enumeration value=\"mechanicalinduceddraft\"/>\r\n\t\t\t<xs:enumeration value=\"mechanicalforceddraft\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCostScheduleTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCostScheduleTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCostScheduleTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"budget\"/>\r\n\t\t\t<xs:enumeration value=\"costplan\"/>\r\n\t\t\t<xs:enumeration value=\"estimate\"/>\r\n\t\t\t<xs:enumeration value=\"tender\"/>\r\n\t\t\t<xs:enumeration value=\"pricedbillofquantities\"/>\r\n\t\t\t<xs:enumeration value=\"unpricedbillofquantities\"/>\r\n\t\t\t<xs:enumeration value=\"scheduleofrates\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCoveringTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCoveringTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCoveringTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"ceiling\"/>\r\n\t\t\t<xs:enumeration value=\"flooring\"/>\r\n\t\t\t<xs:enumeration value=\"cladding\"/>\r\n\t\t\t<xs:enumeration value=\"roofing\"/>\r\n\t\t\t<xs:enumeration value=\"insulation\"/>\r\n\t\t\t<xs:enumeration value=\"membrane\"/>\r\n\t\t\t<xs:enumeration value=\"sleeving\"/>\r\n\t\t\t<xs:enumeration value=\"wrapping\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCurrencyEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCurrencyEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCurrencyEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"aed\"/>\r\n\t\t\t<xs:enumeration value=\"aes\"/>\r\n\t\t\t<xs:enumeration value=\"ats\"/>\r\n\t\t\t<xs:enumeration value=\"aud\"/>\r\n\t\t\t<xs:enumeration value=\"bbd\"/>\r\n\t\t\t<xs:enumeration value=\"beg\"/>\r\n\t\t\t<xs:enumeration value=\"bgl\"/>\r\n\t\t\t<xs:enumeration value=\"bhd\"/>\r\n\t\t\t<xs:enumeration value=\"bmd\"/>\r\n\t\t\t<xs:enumeration value=\"bnd\"/>\r\n\t\t\t<xs:enumeration value=\"brl\"/>\r\n\t\t\t<xs:enumeration value=\"bsd\"/>\r\n\t\t\t<xs:enumeration value=\"bwp\"/>\r\n\t\t\t<xs:enumeration value=\"bzd\"/>\r\n\t\t\t<xs:enumeration value=\"cad\"/>\r\n\t\t\t<xs:enumeration value=\"cbd\"/>\r\n\t\t\t<xs:enumeration value=\"chf\"/>\r\n\t\t\t<xs:enumeration value=\"clp\"/>\r\n\t\t\t<xs:enumeration value=\"cny\"/>\r\n\t\t\t<xs:enumeration value=\"cys\"/>\r\n\t\t\t<xs:enumeration value=\"czk\"/>\r\n\t\t\t<xs:enumeration value=\"ddp\"/>\r\n\t\t\t<xs:enumeration value=\"dem\"/>\r\n\t\t\t<xs:enumeration value=\"dkk\"/>\r\n\t\t\t<xs:enumeration value=\"egl\"/>\r\n\t\t\t<xs:enumeration value=\"est\"/>\r\n\t\t\t<xs:enumeration value=\"eur\"/>\r\n\t\t\t<xs:enumeration value=\"fak\"/>\r\n\t\t\t<xs:enumeration value=\"fim\"/>\r\n\t\t\t<xs:enumeration value=\"fjd\"/>\r\n\t\t\t<xs:enumeration value=\"fkp\"/>\r\n\t\t\t<xs:enumeration value=\"frf\"/>\r\n\t\t\t<xs:enumeration value=\"gbp\"/>\r\n\t\t\t<xs:enumeration value=\"gip\"/>\r\n\t\t\t<xs:enumeration value=\"gmd\"/>\r\n\t\t\t<xs:enumeration value=\"grx\"/>\r\n\t\t\t<xs:enumeration value=\"hkd\"/>\r\n\t\t\t<xs:enumeration value=\"huf\"/>\r\n\t\t\t<xs:enumeration value=\"ick\"/>\r\n\t\t\t<xs:enumeration value=\"idr\"/>\r\n\t\t\t<xs:enumeration value=\"ils\"/>\r\n\t\t\t<xs:enumeration value=\"inr\"/>\r\n\t\t\t<xs:enumeration value=\"irp\"/>\r\n\t\t\t<xs:enumeration value=\"itl\"/>\r\n\t\t\t<xs:enumeration value=\"jmd\"/>\r\n\t\t\t<xs:enumeration value=\"jod\"/>\r\n\t\t\t<xs:enumeration value=\"jpy\"/>\r\n\t\t\t<xs:enumeration value=\"kes\"/>\r\n\t\t\t<xs:enumeration value=\"krw\"/>\r\n\t\t\t<xs:enumeration value=\"kwd\"/>\r\n\t\t\t<xs:enumeration value=\"kyd\"/>\r\n\t\t\t<xs:enumeration value=\"lkr\"/>\r\n\t\t\t<xs:enumeration value=\"luf\"/>\r\n\t\t\t<xs:enumeration value=\"mtl\"/>\r\n\t\t\t<xs:enumeration value=\"mur\"/>\r\n\t\t\t<xs:enumeration value=\"mxn\"/>\r\n\t\t\t<xs:enumeration value=\"myr\"/>\r\n\t\t\t<xs:enumeration value=\"nlg\"/>\r\n\t\t\t<xs:enumeration value=\"nzd\"/>\r\n\t\t\t<xs:enumeration value=\"omr\"/>\r\n\t\t\t<xs:enumeration value=\"pgk\"/>\r\n\t\t\t<xs:enumeration value=\"php\"/>\r\n\t\t\t<xs:enumeration value=\"pkr\"/>\r\n\t\t\t<xs:enumeration value=\"pln\"/>\r\n\t\t\t<xs:enumeration value=\"ptn\"/>\r\n\t\t\t<xs:enumeration value=\"qar\"/>\r\n\t\t\t<xs:enumeration value=\"rur\"/>\r\n\t\t\t<xs:enumeration value=\"sar\"/>\r\n\t\t\t<xs:enumeration value=\"scr\"/>\r\n\t\t\t<xs:enumeration value=\"sek\"/>\r\n\t\t\t<xs:enumeration value=\"sgd\"/>\r\n\t\t\t<xs:enumeration value=\"skp\"/>\r\n\t\t\t<xs:enumeration value=\"thb\"/>\r\n\t\t\t<xs:enumeration value=\"trl\"/>\r\n\t\t\t<xs:enumeration value=\"ttd\"/>\r\n\t\t\t<xs:enumeration value=\"twd\"/>\r\n\t\t\t<xs:enumeration value=\"usd\"/>\r\n\t\t\t<xs:enumeration value=\"veb\"/>\r\n\t\t\t<xs:enumeration value=\"vnd\"/>\r\n\t\t\t<xs:enumeration value=\"xeu\"/>\r\n\t\t\t<xs:enumeration value=\"zar\"/>\r\n\t\t\t<xs:enumeration value=\"zwd\"/>\r\n\t\t\t<xs:enumeration value=\"nok\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDamperTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDamperTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDamperTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"controldamper\"/>\r\n\t\t\t<xs:enumeration value=\"firedamper\"/>\r\n\t\t\t<xs:enumeration value=\"smokedamper\"/>\r\n\t\t\t<xs:enumeration value=\"firesmokedamper\"/>\r\n\t\t\t<xs:enumeration value=\"backdraftdamper\"/>\r\n\t\t\t<xs:enumeration value=\"reliefdamper\"/>\r\n\t\t\t<xs:enumeration value=\"blastdamper\"/>\r\n\t\t\t<xs:enumeration value=\"gravitydamper\"/>\r\n\t\t\t<xs:enumeration value=\"gravityreliefdamper\"/>\r\n\t\t\t<xs:enumeration value=\"balancingdamper\"/>\r\n\t\t\t<xs:enumeration value=\"fumehoodexhaust\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDataOriginEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDataOriginEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDataOriginEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"measured\"/>\r\n\t\t\t<xs:enumeration value=\"predicted\"/>\r\n\t\t\t<xs:enumeration value=\"simulated\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDerivedUnitEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDerivedUnitEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDerivedUnitEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"angularvelocityunit\"/>\r\n\t\t\t<xs:enumeration value=\"compoundplaneangleunit\"/>\r\n\t\t\t<xs:enumeration value=\"dynamicviscosityunit\"/>\r\n\t\t\t<xs:enumeration value=\"heatfluxdensityunit\"/>\r\n\t\t\t<xs:enumeration value=\"integercountrateunit\"/>\r\n\t\t\t<xs:enumeration value=\"isothermalmoisturecapacityunit\"/>\r\n\t\t\t<xs:enumeration value=\"kinematicviscosityunit\"/>\r\n\t\t\t<xs:enumeration value=\"linearvelocityunit\"/>\r\n\t\t\t<xs:enumeration value=\"massdensityunit\"/>\r\n\t\t\t<xs:enumeration value=\"massflowrateunit\"/>\r\n\t\t\t<xs:enumeration value=\"moisturediffusivityunit\"/>\r\n\t\t\t<xs:enumeration value=\"molecularweightunit\"/>\r\n\t\t\t<xs:enumeration value=\"specificheatcapacityunit\"/>\r\n\t\t\t<xs:enumeration value=\"thermaladmittanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"thermalconductanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"thermalresistanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"thermaltransmittanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"vaporpermeabilityunit\"/>\r\n\t\t\t<xs:enumeration value=\"volumetricflowrateunit\"/>\r\n\t\t\t<xs:enumeration value=\"rotationalfrequencyunit\"/>\r\n\t\t\t<xs:enumeration value=\"torqueunit\"/>\r\n\t\t\t<xs:enumeration value=\"momentofinertiaunit\"/>\r\n\t\t\t<xs:enumeration value=\"linearmomentunit\"/>\r\n\t\t\t<xs:enumeration value=\"linearforceunit\"/>\r\n\t\t\t<xs:enumeration value=\"planarforceunit\"/>\r\n\t\t\t<xs:enumeration value=\"modulusofelasticityunit\"/>\r\n\t\t\t<xs:enumeration value=\"shearmodulusunit\"/>\r\n\t\t\t<xs:enumeration value=\"linearstiffnessunit\"/>\r\n\t\t\t<xs:enumeration value=\"rotationalstiffnessunit\"/>\r\n\t\t\t<xs:enumeration value=\"modulusofsubgradereactionunit\"/>\r\n\t\t\t<xs:enumeration value=\"accelerationunit\"/>\r\n\t\t\t<xs:enumeration value=\"curvatureunit\"/>\r\n\t\t\t<xs:enumeration value=\"heatingvalueunit\"/>\r\n\t\t\t<xs:enumeration value=\"ionconcentrationunit\"/>\r\n\t\t\t<xs:enumeration value=\"luminousintensitydistributionunit\"/>\r\n\t\t\t<xs:enumeration value=\"massperlengthunit\"/>\r\n\t\t\t<xs:enumeration value=\"modulusoflinearsubgradereactionunit\"/>\r\n\t\t\t<xs:enumeration value=\"modulusofrotationalsubgradereactionunit\"/>\r\n\t\t\t<xs:enumeration value=\"phunit\"/>\r\n\t\t\t<xs:enumeration value=\"rotationalmassunit\"/>\r\n\t\t\t<xs:enumeration value=\"sectionareaintegralunit\"/>\r\n\t\t\t<xs:enumeration value=\"sectionmodulusunit\"/>\r\n\t\t\t<xs:enumeration value=\"soundpowerunit\"/>\r\n\t\t\t<xs:enumeration value=\"soundpressureunit\"/>\r\n\t\t\t<xs:enumeration value=\"temperaturegradientunit\"/>\r\n\t\t\t<xs:enumeration value=\"thermalexpansioncoefficientunit\"/>\r\n\t\t\t<xs:enumeration value=\"warpingconstantunit\"/>\r\n\t\t\t<xs:enumeration value=\"warpingmomentunit\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDimensionExtentUsage\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDimensionExtentUsage\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDimensionExtentUsage\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"origin\"/>\r\n\t\t\t<xs:enumeration value=\"target\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDirectionSenseEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDirectionSenseEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDirectionSenseEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"positive\"/>\r\n\t\t\t<xs:enumeration value=\"negative\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDistributionChamberElementTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDistributionChamberElementTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDistributionChamberElementTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"formedduct\"/>\r\n\t\t\t<xs:enumeration value=\"inspectionchamber\"/>\r\n\t\t\t<xs:enumeration value=\"inspectionpit\"/>\r\n\t\t\t<xs:enumeration value=\"manhole\"/>\r\n\t\t\t<xs:enumeration value=\"meterchamber\"/>\r\n\t\t\t<xs:enumeration value=\"sump\"/>\r\n\t\t\t<xs:enumeration value=\"trench\"/>\r\n\t\t\t<xs:enumeration value=\"valvechamber\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDocumentConfidentialityEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDocumentConfidentialityEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDocumentConfidentialityEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"public\"/>\r\n\t\t\t<xs:enumeration value=\"restricted\"/>\r\n\t\t\t<xs:enumeration value=\"confidential\"/>\r\n\t\t\t<xs:enumeration value=\"personal\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDocumentStatusEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDocumentStatusEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDocumentStatusEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"draft\"/>\r\n\t\t\t<xs:enumeration value=\"finaldraft\"/>\r\n\t\t\t<xs:enumeration value=\"final\"/>\r\n\t\t\t<xs:enumeration value=\"revision\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDoorPanelOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorPanelOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDoorPanelOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"swinging\"/>\r\n\t\t\t<xs:enumeration value=\"double_acting\"/>\r\n\t\t\t<xs:enumeration value=\"sliding\"/>\r\n\t\t\t<xs:enumeration value=\"folding\"/>\r\n\t\t\t<xs:enumeration value=\"revolving\"/>\r\n\t\t\t<xs:enumeration value=\"rollingup\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDoorPanelPositionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorPanelPositionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDoorPanelPositionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"left\"/>\r\n\t\t\t<xs:enumeration value=\"middle\"/>\r\n\t\t\t<xs:enumeration value=\"right\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDoorStyleConstructionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorStyleConstructionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDoorStyleConstructionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"aluminium\"/>\r\n\t\t\t<xs:enumeration value=\"high_grade_steel\"/>\r\n\t\t\t<xs:enumeration value=\"steel\"/>\r\n\t\t\t<xs:enumeration value=\"wood\"/>\r\n\t\t\t<xs:enumeration value=\"aluminium_wood\"/>\r\n\t\t\t<xs:enumeration value=\"aluminium_plastic\"/>\r\n\t\t\t<xs:enumeration value=\"plastic\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDoorStyleOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorStyleOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDoorStyleOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"single_swing_left\"/>\r\n\t\t\t<xs:enumeration value=\"single_swing_right\"/>\r\n\t\t\t<xs:enumeration value=\"double_door_single_swing\"/>\r\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_left\"/>\r\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_right\"/>\r\n\t\t\t<xs:enumeration value=\"double_swing_left\"/>\r\n\t\t\t<xs:enumeration value=\"double_swing_right\"/>\r\n\t\t\t<xs:enumeration value=\"double_door_double_swing\"/>\r\n\t\t\t<xs:enumeration value=\"sliding_to_left\"/>\r\n\t\t\t<xs:enumeration value=\"sliding_to_right\"/>\r\n\t\t\t<xs:enumeration value=\"double_door_sliding\"/>\r\n\t\t\t<xs:enumeration value=\"folding_to_left\"/>\r\n\t\t\t<xs:enumeration value=\"folding_to_right\"/>\r\n\t\t\t<xs:enumeration value=\"double_door_folding\"/>\r\n\t\t\t<xs:enumeration value=\"revolving\"/>\r\n\t\t\t<xs:enumeration value=\"rollingup\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDuctFittingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDuctFittingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDuctFittingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bend\"/>\r\n\t\t\t<xs:enumeration value=\"connector\"/>\r\n\t\t\t<xs:enumeration value=\"entry\"/>\r\n\t\t\t<xs:enumeration value=\"exit\"/>\r\n\t\t\t<xs:enumeration value=\"junction\"/>\r\n\t\t\t<xs:enumeration value=\"obstruction\"/>\r\n\t\t\t<xs:enumeration value=\"transition\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDuctSegmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDuctSegmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDuctSegmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\r\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDuctSilencerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDuctSilencerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDuctSilencerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"flatoval\"/>\r\n\t\t\t<xs:enumeration value=\"rectangular\"/>\r\n\t\t\t<xs:enumeration value=\"round\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricApplianceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricApplianceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricApplianceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"computer\"/>\r\n\t\t\t<xs:enumeration value=\"directwaterheater\"/>\r\n\t\t\t<xs:enumeration value=\"dishwasher\"/>\r\n\t\t\t<xs:enumeration value=\"electriccooker\"/>\r\n\t\t\t<xs:enumeration value=\"electricheater\"/>\r\n\t\t\t<xs:enumeration value=\"facsimile\"/>\r\n\t\t\t<xs:enumeration value=\"freestandingfan\"/>\r\n\t\t\t<xs:enumeration value=\"freezer\"/>\r\n\t\t\t<xs:enumeration value=\"fridge_freezer\"/>\r\n\t\t\t<xs:enumeration value=\"handdryer\"/>\r\n\t\t\t<xs:enumeration value=\"indirectwaterheater\"/>\r\n\t\t\t<xs:enumeration value=\"microwave\"/>\r\n\t\t\t<xs:enumeration value=\"photocopier\"/>\r\n\t\t\t<xs:enumeration value=\"printer\"/>\r\n\t\t\t<xs:enumeration value=\"refrigerator\"/>\r\n\t\t\t<xs:enumeration value=\"radiantheater\"/>\r\n\t\t\t<xs:enumeration value=\"scanner\"/>\r\n\t\t\t<xs:enumeration value=\"telephone\"/>\r\n\t\t\t<xs:enumeration value=\"tumbledryer\"/>\r\n\t\t\t<xs:enumeration value=\"tv\"/>\r\n\t\t\t<xs:enumeration value=\"vendingmachine\"/>\r\n\t\t\t<xs:enumeration value=\"washingmachine\"/>\r\n\t\t\t<xs:enumeration value=\"waterheater\"/>\r\n\t\t\t<xs:enumeration value=\"watercooler\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricCurrentEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricCurrentEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"alternating\"/>\r\n\t\t\t<xs:enumeration value=\"direct\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricDistributionPointFunctionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricDistributionPointFunctionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricDistributionPointFunctionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"alarmpanel\"/>\r\n\t\t\t<xs:enumeration value=\"consumerunit\"/>\r\n\t\t\t<xs:enumeration value=\"controlpanel\"/>\r\n\t\t\t<xs:enumeration value=\"distributionboard\"/>\r\n\t\t\t<xs:enumeration value=\"gasdetectorpanel\"/>\r\n\t\t\t<xs:enumeration value=\"indicatorpanel\"/>\r\n\t\t\t<xs:enumeration value=\"mimicpanel\"/>\r\n\t\t\t<xs:enumeration value=\"motorcontrolcentre\"/>\r\n\t\t\t<xs:enumeration value=\"switchboard\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricFlowStorageDeviceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricFlowStorageDeviceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"battery\"/>\r\n\t\t\t<xs:enumeration value=\"capacitorbank\"/>\r\n\t\t\t<xs:enumeration value=\"harmonicfilter\"/>\r\n\t\t\t<xs:enumeration value=\"inductorbank\"/>\r\n\t\t\t<xs:enumeration value=\"ups\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricGeneratorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricGeneratorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricGeneratorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricHeaterTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricHeaterTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricHeaterTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"electricpointheater\"/>\r\n\t\t\t<xs:enumeration value=\"electriccableheater\"/>\r\n\t\t\t<xs:enumeration value=\"electricmatheater\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricMotorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricMotorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricMotorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dc\"/>\r\n\t\t\t<xs:enumeration value=\"induction\"/>\r\n\t\t\t<xs:enumeration value=\"polyphase\"/>\r\n\t\t\t<xs:enumeration value=\"reluctancesynchronous\"/>\r\n\t\t\t<xs:enumeration value=\"synchronous\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricTimeControlTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricTimeControlTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricTimeControlTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"timeclock\"/>\r\n\t\t\t<xs:enumeration value=\"timedelay\"/>\r\n\t\t\t<xs:enumeration value=\"relay\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElementAssemblyTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElementAssemblyTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElementAssemblyTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"accessory_assembly\"/>\r\n\t\t\t<xs:enumeration value=\"arch\"/>\r\n\t\t\t<xs:enumeration value=\"beam_grid\"/>\r\n\t\t\t<xs:enumeration value=\"braced_frame\"/>\r\n\t\t\t<xs:enumeration value=\"girder\"/>\r\n\t\t\t<xs:enumeration value=\"reinforcement_unit\"/>\r\n\t\t\t<xs:enumeration value=\"rigid_frame\"/>\r\n\t\t\t<xs:enumeration value=\"slab_field\"/>\r\n\t\t\t<xs:enumeration value=\"truss\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElementCompositionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElementCompositionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElementCompositionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"complex\"/>\r\n\t\t\t<xs:enumeration value=\"element\"/>\r\n\t\t\t<xs:enumeration value=\"partial\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcEnergySequenceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergySequenceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcEnergySequenceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"primary\"/>\r\n\t\t\t<xs:enumeration value=\"secondary\"/>\r\n\t\t\t<xs:enumeration value=\"tertiary\"/>\r\n\t\t\t<xs:enumeration value=\"auxiliary\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcEnvironmentalImpactCategoryEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEnvironmentalImpactCategoryEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcEnvironmentalImpactCategoryEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"combinedvalue\"/>\r\n\t\t\t<xs:enumeration value=\"disposal\"/>\r\n\t\t\t<xs:enumeration value=\"extraction\"/>\r\n\t\t\t<xs:enumeration value=\"installation\"/>\r\n\t\t\t<xs:enumeration value=\"manufacture\"/>\r\n\t\t\t<xs:enumeration value=\"transportation\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcEvaporativeCoolerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEvaporativeCoolerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcEvaporativeCoolerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"directevaporativerandommediaaircooler\"/>\r\n\t\t\t<xs:enumeration value=\"directevaporativerigidmediaaircooler\"/>\r\n\t\t\t<xs:enumeration value=\"directevaporativeslingerspackagedaircooler\"/>\r\n\t\t\t<xs:enumeration value=\"directevaporativepackagedrotaryaircooler\"/>\r\n\t\t\t<xs:enumeration value=\"directevaporativeairwasher\"/>\r\n\t\t\t<xs:enumeration value=\"indirectevaporativepackageaircooler\"/>\r\n\t\t\t<xs:enumeration value=\"indirectevaporativewetcoil\"/>\r\n\t\t\t<xs:enumeration value=\"indirectevaporativecoolingtowerorcoilcooler\"/>\r\n\t\t\t<xs:enumeration value=\"indirectdirectcombination\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcEvaporatorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEvaporatorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcEvaporatorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"directexpansionshellandtube\"/>\r\n\t\t\t<xs:enumeration value=\"directexpansiontubeintube\"/>\r\n\t\t\t<xs:enumeration value=\"directexpansionbrazedplate\"/>\r\n\t\t\t<xs:enumeration value=\"floodedshellandtube\"/>\r\n\t\t\t<xs:enumeration value=\"shellandcoil\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcFanTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFanTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcFanTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"centrifugalforwardcurved\"/>\r\n\t\t\t<xs:enumeration value=\"centrifugalradial\"/>\r\n\t\t\t<xs:enumeration value=\"centrifugalbackwardinclinedcurved\"/>\r\n\t\t\t<xs:enumeration value=\"centrifugalairfoil\"/>\r\n\t\t\t<xs:enumeration value=\"tubeaxial\"/>\r\n\t\t\t<xs:enumeration value=\"vaneaxial\"/>\r\n\t\t\t<xs:enumeration value=\"propelloraxial\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcFilterTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFilterTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcFilterTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"airparticlefilter\"/>\r\n\t\t\t<xs:enumeration value=\"odorfilter\"/>\r\n\t\t\t<xs:enumeration value=\"oilfilter\"/>\r\n\t\t\t<xs:enumeration value=\"strainer\"/>\r\n\t\t\t<xs:enumeration value=\"waterfilter\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcFireSuppressionTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFireSuppressionTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcFireSuppressionTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"breechinginlet\"/>\r\n\t\t\t<xs:enumeration value=\"firehydrant\"/>\r\n\t\t\t<xs:enumeration value=\"hosereel\"/>\r\n\t\t\t<xs:enumeration value=\"sprinkler\"/>\r\n\t\t\t<xs:enumeration value=\"sprinklerdeflector\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcFlowDirectionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFlowDirectionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcFlowDirectionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"source\"/>\r\n\t\t\t<xs:enumeration value=\"sink\"/>\r\n\t\t\t<xs:enumeration value=\"sourceandsink\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcFlowInstrumentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFlowInstrumentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcFlowInstrumentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"pressuregauge\"/>\r\n\t\t\t<xs:enumeration value=\"thermometer\"/>\r\n\t\t\t<xs:enumeration value=\"ammeter\"/>\r\n\t\t\t<xs:enumeration value=\"frequencymeter\"/>\r\n\t\t\t<xs:enumeration value=\"powerfactormeter\"/>\r\n\t\t\t<xs:enumeration value=\"phaseanglemeter\"/>\r\n\t\t\t<xs:enumeration value=\"voltmeter_peak\"/>\r\n\t\t\t<xs:enumeration value=\"voltmeter_rms\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcFlowMeterTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFlowMeterTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcFlowMeterTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"electricmeter\"/>\r\n\t\t\t<xs:enumeration value=\"energymeter\"/>\r\n\t\t\t<xs:enumeration value=\"flowmeter\"/>\r\n\t\t\t<xs:enumeration value=\"gasmeter\"/>\r\n\t\t\t<xs:enumeration value=\"oilmeter\"/>\r\n\t\t\t<xs:enumeration value=\"watermeter\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcFootingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFootingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcFootingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"footing_beam\"/>\r\n\t\t\t<xs:enumeration value=\"pad_footing\"/>\r\n\t\t\t<xs:enumeration value=\"pile_cap\"/>\r\n\t\t\t<xs:enumeration value=\"strip_footing\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcGasTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcGasTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcGasTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"gasappliance\"/>\r\n\t\t\t<xs:enumeration value=\"gasbooster\"/>\r\n\t\t\t<xs:enumeration value=\"gasburner\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcGeometricProjectionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcGeometricProjectionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcGeometricProjectionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"graph_view\"/>\r\n\t\t\t<xs:enumeration value=\"sketch_view\"/>\r\n\t\t\t<xs:enumeration value=\"model_view\"/>\r\n\t\t\t<xs:enumeration value=\"plan_view\"/>\r\n\t\t\t<xs:enumeration value=\"reflected_plan_view\"/>\r\n\t\t\t<xs:enumeration value=\"section_view\"/>\r\n\t\t\t<xs:enumeration value=\"elevation_view\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcGlobalOrLocalEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcGlobalOrLocalEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcGlobalOrLocalEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"global_coords\"/>\r\n\t\t\t<xs:enumeration value=\"local_coords\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcHeatExchangerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatExchangerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcHeatExchangerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"plate\"/>\r\n\t\t\t<xs:enumeration value=\"shellandtube\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcHumidifierTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHumidifierTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcHumidifierTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"steaminjection\"/>\r\n\t\t\t<xs:enumeration value=\"adiabaticairwasher\"/>\r\n\t\t\t<xs:enumeration value=\"adiabaticpan\"/>\r\n\t\t\t<xs:enumeration value=\"adiabaticwettedelement\"/>\r\n\t\t\t<xs:enumeration value=\"adiabaticatomizing\"/>\r\n\t\t\t<xs:enumeration value=\"adiabaticultrasonic\"/>\r\n\t\t\t<xs:enumeration value=\"adiabaticrigidmedia\"/>\r\n\t\t\t<xs:enumeration value=\"adiabaticcompressedairnozzle\"/>\r\n\t\t\t<xs:enumeration value=\"assistedelectric\"/>\r\n\t\t\t<xs:enumeration value=\"assistednaturalgas\"/>\r\n\t\t\t<xs:enumeration value=\"assistedpropane\"/>\r\n\t\t\t<xs:enumeration value=\"assistedbutane\"/>\r\n\t\t\t<xs:enumeration value=\"assistedsteam\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcInternalOrExternalEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcInternalOrExternalEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcInternalOrExternalEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"internal\"/>\r\n\t\t\t<xs:enumeration value=\"external\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcInventoryTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcInventoryTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcInventoryTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"assetinventory\"/>\r\n\t\t\t<xs:enumeration value=\"spaceinventory\"/>\r\n\t\t\t<xs:enumeration value=\"furnitureinventory\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcJunctionBoxTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcJunctionBoxTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcJunctionBoxTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLampTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLampTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLampTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\r\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\r\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\r\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\r\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\r\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLayerSetDirectionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLayerSetDirectionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLayerSetDirectionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"axis1\"/>\r\n\t\t\t<xs:enumeration value=\"axis2\"/>\r\n\t\t\t<xs:enumeration value=\"axis3\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLightDistributionCurveEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLightDistributionCurveEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLightDistributionCurveEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"type_a\"/>\r\n\t\t\t<xs:enumeration value=\"type_b\"/>\r\n\t\t\t<xs:enumeration value=\"type_c\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLightEmissionSourceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLightEmissionSourceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLightEmissionSourceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\r\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\r\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\r\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\r\n\t\t\t<xs:enumeration value=\"lightemittingdiode\"/>\r\n\t\t\t<xs:enumeration value=\"lowpressuresodium\"/>\r\n\t\t\t<xs:enumeration value=\"lowvoltagehalogen\"/>\r\n\t\t\t<xs:enumeration value=\"mainvoltagehalogen\"/>\r\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\r\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLightFixtureTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLightFixtureTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLightFixtureTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"pointsource\"/>\r\n\t\t\t<xs:enumeration value=\"directionsource\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLoadGroupTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLoadGroupTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLoadGroupTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"load_group\"/>\r\n\t\t\t<xs:enumeration value=\"load_case\"/>\r\n\t\t\t<xs:enumeration value=\"load_combination_group\"/>\r\n\t\t\t<xs:enumeration value=\"load_combination\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLogicalOperatorEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLogicalOperatorEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLogicalOperatorEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"logicaland\"/>\r\n\t\t\t<xs:enumeration value=\"logicalor\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMemberTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMemberTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMemberTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"brace\"/>\r\n\t\t\t<xs:enumeration value=\"chord\"/>\r\n\t\t\t<xs:enumeration value=\"collar\"/>\r\n\t\t\t<xs:enumeration value=\"member\"/>\r\n\t\t\t<xs:enumeration value=\"plate\"/>\r\n\t\t\t<xs:enumeration value=\"post\"/>\r\n\t\t\t<xs:enumeration value=\"purlin\"/>\r\n\t\t\t<xs:enumeration value=\"rafter\"/>\r\n\t\t\t<xs:enumeration value=\"stringer\"/>\r\n\t\t\t<xs:enumeration value=\"strut\"/>\r\n\t\t\t<xs:enumeration value=\"stud\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMotorConnectionTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMotorConnectionTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMotorConnectionTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"beltdrive\"/>\r\n\t\t\t<xs:enumeration value=\"coupling\"/>\r\n\t\t\t<xs:enumeration value=\"directdrive\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcNullStyle\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcNullStyle\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcNullStyle\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"null\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcObjectTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcObjectTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcObjectTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"product\"/>\r\n\t\t\t<xs:enumeration value=\"process\"/>\r\n\t\t\t<xs:enumeration value=\"control\"/>\r\n\t\t\t<xs:enumeration value=\"resource\"/>\r\n\t\t\t<xs:enumeration value=\"actor\"/>\r\n\t\t\t<xs:enumeration value=\"group\"/>\r\n\t\t\t<xs:enumeration value=\"project\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcObjectiveEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcObjectiveEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcObjectiveEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"codecompliance\"/>\r\n\t\t\t<xs:enumeration value=\"designintent\"/>\r\n\t\t\t<xs:enumeration value=\"healthandsafety\"/>\r\n\t\t\t<xs:enumeration value=\"requirement\"/>\r\n\t\t\t<xs:enumeration value=\"specification\"/>\r\n\t\t\t<xs:enumeration value=\"triggercondition\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcOccupantTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcOccupantTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcOccupantTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"assignee\"/>\r\n\t\t\t<xs:enumeration value=\"assignor\"/>\r\n\t\t\t<xs:enumeration value=\"lessee\"/>\r\n\t\t\t<xs:enumeration value=\"lessor\"/>\r\n\t\t\t<xs:enumeration value=\"lettingagent\"/>\r\n\t\t\t<xs:enumeration value=\"owner\"/>\r\n\t\t\t<xs:enumeration value=\"tenant\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcOutletTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcOutletTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcOutletTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"audiovisualoutlet\"/>\r\n\t\t\t<xs:enumeration value=\"communicationsoutlet\"/>\r\n\t\t\t<xs:enumeration value=\"poweroutlet\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPermeableCoveringOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPermeableCoveringOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPermeableCoveringOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"grill\"/>\r\n\t\t\t<xs:enumeration value=\"louver\"/>\r\n\t\t\t<xs:enumeration value=\"screen\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPhysicalOrVirtualEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPhysicalOrVirtualEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPhysicalOrVirtualEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"physical\"/>\r\n\t\t\t<xs:enumeration value=\"virtual\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPileConstructionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPileConstructionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPileConstructionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cast_in_place\"/>\r\n\t\t\t<xs:enumeration value=\"composite\"/>\r\n\t\t\t<xs:enumeration value=\"precast_concrete\"/>\r\n\t\t\t<xs:enumeration value=\"prefab_steel\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPileTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPileTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPileTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cohesion\"/>\r\n\t\t\t<xs:enumeration value=\"friction\"/>\r\n\t\t\t<xs:enumeration value=\"support\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPipeFittingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPipeFittingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPipeFittingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bend\"/>\r\n\t\t\t<xs:enumeration value=\"connector\"/>\r\n\t\t\t<xs:enumeration value=\"entry\"/>\r\n\t\t\t<xs:enumeration value=\"exit\"/>\r\n\t\t\t<xs:enumeration value=\"junction\"/>\r\n\t\t\t<xs:enumeration value=\"obstruction\"/>\r\n\t\t\t<xs:enumeration value=\"transition\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPipeSegmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPipeSegmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPipeSegmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\r\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\r\n\t\t\t<xs:enumeration value=\"gutter\"/>\r\n\t\t\t<xs:enumeration value=\"spool\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPlateTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPlateTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPlateTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcProcedureTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProcedureTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcProcedureTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"advice_caution\"/>\r\n\t\t\t<xs:enumeration value=\"advice_note\"/>\r\n\t\t\t<xs:enumeration value=\"advice_warning\"/>\r\n\t\t\t<xs:enumeration value=\"calibration\"/>\r\n\t\t\t<xs:enumeration value=\"diagnostic\"/>\r\n\t\t\t<xs:enumeration value=\"shutdown\"/>\r\n\t\t\t<xs:enumeration value=\"startup\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcProfileTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProfileTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcProfileTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"curve\"/>\r\n\t\t\t<xs:enumeration value=\"area\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcProjectOrderRecordTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProjectOrderRecordTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcProjectOrderRecordTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"change\"/>\r\n\t\t\t<xs:enumeration value=\"maintenance\"/>\r\n\t\t\t<xs:enumeration value=\"move\"/>\r\n\t\t\t<xs:enumeration value=\"purchase\"/>\r\n\t\t\t<xs:enumeration value=\"work\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcProjectOrderTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProjectOrderTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcProjectOrderTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"changeorder\"/>\r\n\t\t\t<xs:enumeration value=\"maintenanceworkorder\"/>\r\n\t\t\t<xs:enumeration value=\"moveorder\"/>\r\n\t\t\t<xs:enumeration value=\"purchaseorder\"/>\r\n\t\t\t<xs:enumeration value=\"workorder\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcProjectedOrTrueLengthEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProjectedOrTrueLengthEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcProjectedOrTrueLengthEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"projected_length\"/>\r\n\t\t\t<xs:enumeration value=\"true_length\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPropertySourceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPropertySourceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPropertySourceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"design\"/>\r\n\t\t\t<xs:enumeration value=\"designmaximum\"/>\r\n\t\t\t<xs:enumeration value=\"designminimum\"/>\r\n\t\t\t<xs:enumeration value=\"simulated\"/>\r\n\t\t\t<xs:enumeration value=\"asbuilt\"/>\r\n\t\t\t<xs:enumeration value=\"commissioning\"/>\r\n\t\t\t<xs:enumeration value=\"measured\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notknown\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcProtectiveDeviceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProtectiveDeviceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcProtectiveDeviceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"fusedisconnector\"/>\r\n\t\t\t<xs:enumeration value=\"circuitbreaker\"/>\r\n\t\t\t<xs:enumeration value=\"earthfailuredevice\"/>\r\n\t\t\t<xs:enumeration value=\"residualcurrentcircuitbreaker\"/>\r\n\t\t\t<xs:enumeration value=\"residualcurrentswitch\"/>\r\n\t\t\t<xs:enumeration value=\"varistor\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPumpTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPumpTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPumpTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"circulator\"/>\r\n\t\t\t<xs:enumeration value=\"endsuction\"/>\r\n\t\t\t<xs:enumeration value=\"splitcase\"/>\r\n\t\t\t<xs:enumeration value=\"verticalinline\"/>\r\n\t\t\t<xs:enumeration value=\"verticalturbine\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRailingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRailingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRailingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"handrail\"/>\r\n\t\t\t<xs:enumeration value=\"guardrail\"/>\r\n\t\t\t<xs:enumeration value=\"balustrade\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRampFlightTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRampFlightTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRampFlightTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"straight\"/>\r\n\t\t\t<xs:enumeration value=\"spiral\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRampTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRampTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRampTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"straight_run_ramp\"/>\r\n\t\t\t<xs:enumeration value=\"two_straight_run_ramp\"/>\r\n\t\t\t<xs:enumeration value=\"quarter_turn_ramp\"/>\r\n\t\t\t<xs:enumeration value=\"two_quarter_turn_ramp\"/>\r\n\t\t\t<xs:enumeration value=\"half_turn_ramp\"/>\r\n\t\t\t<xs:enumeration value=\"spiral_ramp\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcReflectanceMethodEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcReflectanceMethodEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcReflectanceMethodEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"blinn\"/>\r\n\t\t\t<xs:enumeration value=\"flat\"/>\r\n\t\t\t<xs:enumeration value=\"glass\"/>\r\n\t\t\t<xs:enumeration value=\"matt\"/>\r\n\t\t\t<xs:enumeration value=\"metal\"/>\r\n\t\t\t<xs:enumeration value=\"mirror\"/>\r\n\t\t\t<xs:enumeration value=\"phong\"/>\r\n\t\t\t<xs:enumeration value=\"plastic\"/>\r\n\t\t\t<xs:enumeration value=\"strauss\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcReinforcingBarRoleEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcReinforcingBarRoleEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcReinforcingBarRoleEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"main\"/>\r\n\t\t\t<xs:enumeration value=\"shear\"/>\r\n\t\t\t<xs:enumeration value=\"ligature\"/>\r\n\t\t\t<xs:enumeration value=\"stud\"/>\r\n\t\t\t<xs:enumeration value=\"punching\"/>\r\n\t\t\t<xs:enumeration value=\"edge\"/>\r\n\t\t\t<xs:enumeration value=\"ring\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcReinforcingBarSurfaceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcReinforcingBarSurfaceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcReinforcingBarSurfaceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"plain\"/>\r\n\t\t\t<xs:enumeration value=\"textured\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcResourceConsumptionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcResourceConsumptionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcResourceConsumptionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"consumed\"/>\r\n\t\t\t<xs:enumeration value=\"partiallyconsumed\"/>\r\n\t\t\t<xs:enumeration value=\"notconsumed\"/>\r\n\t\t\t<xs:enumeration value=\"occupied\"/>\r\n\t\t\t<xs:enumeration value=\"partiallyoccupied\"/>\r\n\t\t\t<xs:enumeration value=\"notoccupied\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRibPlateDirectionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRibPlateDirectionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRibPlateDirectionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"direction_x\"/>\r\n\t\t\t<xs:enumeration value=\"direction_y\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRoleEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRoleEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRoleEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"supplier\"/>\r\n\t\t\t<xs:enumeration value=\"manufacturer\"/>\r\n\t\t\t<xs:enumeration value=\"contractor\"/>\r\n\t\t\t<xs:enumeration value=\"subcontractor\"/>\r\n\t\t\t<xs:enumeration value=\"architect\"/>\r\n\t\t\t<xs:enumeration value=\"structuralengineer\"/>\r\n\t\t\t<xs:enumeration value=\"costengineer\"/>\r\n\t\t\t<xs:enumeration value=\"client\"/>\r\n\t\t\t<xs:enumeration value=\"buildingowner\"/>\r\n\t\t\t<xs:enumeration value=\"buildingoperator\"/>\r\n\t\t\t<xs:enumeration value=\"mechanicalengineer\"/>\r\n\t\t\t<xs:enumeration value=\"electricalengineer\"/>\r\n\t\t\t<xs:enumeration value=\"projectmanager\"/>\r\n\t\t\t<xs:enumeration value=\"facilitiesmanager\"/>\r\n\t\t\t<xs:enumeration value=\"civilengineer\"/>\r\n\t\t\t<xs:enumeration value=\"comissioningengineer\"/>\r\n\t\t\t<xs:enumeration value=\"engineer\"/>\r\n\t\t\t<xs:enumeration value=\"owner\"/>\r\n\t\t\t<xs:enumeration value=\"consultant\"/>\r\n\t\t\t<xs:enumeration value=\"constructionmanager\"/>\r\n\t\t\t<xs:enumeration value=\"fieldconstructionmanager\"/>\r\n\t\t\t<xs:enumeration value=\"reseller\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRoofTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRoofTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRoofTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"flat_roof\"/>\r\n\t\t\t<xs:enumeration value=\"shed_roof\"/>\r\n\t\t\t<xs:enumeration value=\"gable_roof\"/>\r\n\t\t\t<xs:enumeration value=\"hip_roof\"/>\r\n\t\t\t<xs:enumeration value=\"hipped_gable_roof\"/>\r\n\t\t\t<xs:enumeration value=\"gambrel_roof\"/>\r\n\t\t\t<xs:enumeration value=\"mansard_roof\"/>\r\n\t\t\t<xs:enumeration value=\"barrel_roof\"/>\r\n\t\t\t<xs:enumeration value=\"rainbow_roof\"/>\r\n\t\t\t<xs:enumeration value=\"butterfly_roof\"/>\r\n\t\t\t<xs:enumeration value=\"pavilion_roof\"/>\r\n\t\t\t<xs:enumeration value=\"dome_roof\"/>\r\n\t\t\t<xs:enumeration value=\"freeform\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSIPrefix\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSIPrefix\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSIPrefix\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"exa\"/>\r\n\t\t\t<xs:enumeration value=\"peta\"/>\r\n\t\t\t<xs:enumeration value=\"tera\"/>\r\n\t\t\t<xs:enumeration value=\"giga\"/>\r\n\t\t\t<xs:enumeration value=\"mega\"/>\r\n\t\t\t<xs:enumeration value=\"kilo\"/>\r\n\t\t\t<xs:enumeration value=\"hecto\"/>\r\n\t\t\t<xs:enumeration value=\"deca\"/>\r\n\t\t\t<xs:enumeration value=\"deci\"/>\r\n\t\t\t<xs:enumeration value=\"centi\"/>\r\n\t\t\t<xs:enumeration value=\"milli\"/>\r\n\t\t\t<xs:enumeration value=\"micro\"/>\r\n\t\t\t<xs:enumeration value=\"nano\"/>\r\n\t\t\t<xs:enumeration value=\"pico\"/>\r\n\t\t\t<xs:enumeration value=\"femto\"/>\r\n\t\t\t<xs:enumeration value=\"atto\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSIUnitName\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSIUnitName\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSIUnitName\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"ampere\"/>\r\n\t\t\t<xs:enumeration value=\"becquerel\"/>\r\n\t\t\t<xs:enumeration value=\"candela\"/>\r\n\t\t\t<xs:enumeration value=\"coulomb\"/>\r\n\t\t\t<xs:enumeration value=\"cubic_metre\"/>\r\n\t\t\t<xs:enumeration value=\"degree_celsius\"/>\r\n\t\t\t<xs:enumeration value=\"farad\"/>\r\n\t\t\t<xs:enumeration value=\"gram\"/>\r\n\t\t\t<xs:enumeration value=\"gray\"/>\r\n\t\t\t<xs:enumeration value=\"henry\"/>\r\n\t\t\t<xs:enumeration value=\"hertz\"/>\r\n\t\t\t<xs:enumeration value=\"joule\"/>\r\n\t\t\t<xs:enumeration value=\"kelvin\"/>\r\n\t\t\t<xs:enumeration value=\"lumen\"/>\r\n\t\t\t<xs:enumeration value=\"lux\"/>\r\n\t\t\t<xs:enumeration value=\"metre\"/>\r\n\t\t\t<xs:enumeration value=\"mole\"/>\r\n\t\t\t<xs:enumeration value=\"newton\"/>\r\n\t\t\t<xs:enumeration value=\"ohm\"/>\r\n\t\t\t<xs:enumeration value=\"pascal\"/>\r\n\t\t\t<xs:enumeration value=\"radian\"/>\r\n\t\t\t<xs:enumeration value=\"second\"/>\r\n\t\t\t<xs:enumeration value=\"siemens\"/>\r\n\t\t\t<xs:enumeration value=\"sievert\"/>\r\n\t\t\t<xs:enumeration value=\"square_metre\"/>\r\n\t\t\t<xs:enumeration value=\"steradian\"/>\r\n\t\t\t<xs:enumeration value=\"tesla\"/>\r\n\t\t\t<xs:enumeration value=\"volt\"/>\r\n\t\t\t<xs:enumeration value=\"watt\"/>\r\n\t\t\t<xs:enumeration value=\"weber\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSanitaryTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSanitaryTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSanitaryTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bath\"/>\r\n\t\t\t<xs:enumeration value=\"bidet\"/>\r\n\t\t\t<xs:enumeration value=\"cistern\"/>\r\n\t\t\t<xs:enumeration value=\"shower\"/>\r\n\t\t\t<xs:enumeration value=\"sink\"/>\r\n\t\t\t<xs:enumeration value=\"sanitaryfountain\"/>\r\n\t\t\t<xs:enumeration value=\"toiletpan\"/>\r\n\t\t\t<xs:enumeration value=\"urinal\"/>\r\n\t\t\t<xs:enumeration value=\"washhandbasin\"/>\r\n\t\t\t<xs:enumeration value=\"wcseat\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSectionTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSectionTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"uniform\"/>\r\n\t\t\t<xs:enumeration value=\"tapered\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSensorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSensorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSensorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"co2sensor\"/>\r\n\t\t\t<xs:enumeration value=\"firesensor\"/>\r\n\t\t\t<xs:enumeration value=\"flowsensor\"/>\r\n\t\t\t<xs:enumeration value=\"gassensor\"/>\r\n\t\t\t<xs:enumeration value=\"heatsensor\"/>\r\n\t\t\t<xs:enumeration value=\"humiditysensor\"/>\r\n\t\t\t<xs:enumeration value=\"lightsensor\"/>\r\n\t\t\t<xs:enumeration value=\"moisturesensor\"/>\r\n\t\t\t<xs:enumeration value=\"movementsensor\"/>\r\n\t\t\t<xs:enumeration value=\"pressuresensor\"/>\r\n\t\t\t<xs:enumeration value=\"smokesensor\"/>\r\n\t\t\t<xs:enumeration value=\"soundsensor\"/>\r\n\t\t\t<xs:enumeration value=\"temperaturesensor\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSequenceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSequenceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSequenceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"start_start\"/>\r\n\t\t\t<xs:enumeration value=\"start_finish\"/>\r\n\t\t\t<xs:enumeration value=\"finish_start\"/>\r\n\t\t\t<xs:enumeration value=\"finish_finish\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcServiceLifeFactorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcServiceLifeFactorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcServiceLifeFactorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"a_qualityofcomponents\"/>\r\n\t\t\t<xs:enumeration value=\"b_designlevel\"/>\r\n\t\t\t<xs:enumeration value=\"c_workexecutionlevel\"/>\r\n\t\t\t<xs:enumeration value=\"d_indoorenvironment\"/>\r\n\t\t\t<xs:enumeration value=\"e_outdoorenvironment\"/>\r\n\t\t\t<xs:enumeration value=\"f_inuseconditions\"/>\r\n\t\t\t<xs:enumeration value=\"g_maintenancelevel\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcServiceLifeTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcServiceLifeTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcServiceLifeTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"actualservicelife\"/>\r\n\t\t\t<xs:enumeration value=\"expectedservicelife\"/>\r\n\t\t\t<xs:enumeration value=\"optimisticreferenceservicelife\"/>\r\n\t\t\t<xs:enumeration value=\"pessimisticreferenceservicelife\"/>\r\n\t\t\t<xs:enumeration value=\"referenceservicelife\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSlabTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSlabTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSlabTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"floor\"/>\r\n\t\t\t<xs:enumeration value=\"roof\"/>\r\n\t\t\t<xs:enumeration value=\"landing\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSoundScaleEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundScaleEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSoundScaleEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dba\"/>\r\n\t\t\t<xs:enumeration value=\"dbb\"/>\r\n\t\t\t<xs:enumeration value=\"dbc\"/>\r\n\t\t\t<xs:enumeration value=\"nc\"/>\r\n\t\t\t<xs:enumeration value=\"nr\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSpaceHeaterTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSpaceHeaterTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSpaceHeaterTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"sectionalradiator\"/>\r\n\t\t\t<xs:enumeration value=\"panelradiator\"/>\r\n\t\t\t<xs:enumeration value=\"tubularradiator\"/>\r\n\t\t\t<xs:enumeration value=\"convector\"/>\r\n\t\t\t<xs:enumeration value=\"baseboardheater\"/>\r\n\t\t\t<xs:enumeration value=\"finnedtubeunit\"/>\r\n\t\t\t<xs:enumeration value=\"unitheater\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcStackTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStackTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcStackTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"birdcage\"/>\r\n\t\t\t<xs:enumeration value=\"cowl\"/>\r\n\t\t\t<xs:enumeration value=\"rainwaterhopper\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcStairFlightTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStairFlightTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcStairFlightTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"straight\"/>\r\n\t\t\t<xs:enumeration value=\"winder\"/>\r\n\t\t\t<xs:enumeration value=\"spiral\"/>\r\n\t\t\t<xs:enumeration value=\"curved\"/>\r\n\t\t\t<xs:enumeration value=\"freeform\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcStairTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStairTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcStairTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"straight_run_stair\"/>\r\n\t\t\t<xs:enumeration value=\"two_straight_run_stair\"/>\r\n\t\t\t<xs:enumeration value=\"quarter_winding_stair\"/>\r\n\t\t\t<xs:enumeration value=\"quarter_turn_stair\"/>\r\n\t\t\t<xs:enumeration value=\"half_winding_stair\"/>\r\n\t\t\t<xs:enumeration value=\"half_turn_stair\"/>\r\n\t\t\t<xs:enumeration value=\"two_quarter_winding_stair\"/>\r\n\t\t\t<xs:enumeration value=\"two_quarter_turn_stair\"/>\r\n\t\t\t<xs:enumeration value=\"three_quarter_winding_stair\"/>\r\n\t\t\t<xs:enumeration value=\"three_quarter_turn_stair\"/>\r\n\t\t\t<xs:enumeration value=\"spiral_stair\"/>\r\n\t\t\t<xs:enumeration value=\"double_return_stair\"/>\r\n\t\t\t<xs:enumeration value=\"curved_run_stair\"/>\r\n\t\t\t<xs:enumeration value=\"two_curved_run_stair\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcStateEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStateEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcStateEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"readwrite\"/>\r\n\t\t\t<xs:enumeration value=\"readonly\"/>\r\n\t\t\t<xs:enumeration value=\"locked\"/>\r\n\t\t\t<xs:enumeration value=\"readwritelocked\"/>\r\n\t\t\t<xs:enumeration value=\"readonlylocked\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcStructuralCurveTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcStructuralCurveTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"rigid_joined_member\"/>\r\n\t\t\t<xs:enumeration value=\"pin_joined_member\"/>\r\n\t\t\t<xs:enumeration value=\"cable\"/>\r\n\t\t\t<xs:enumeration value=\"tension_member\"/>\r\n\t\t\t<xs:enumeration value=\"compression_member\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcStructuralSurfaceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcStructuralSurfaceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bending_element\"/>\r\n\t\t\t<xs:enumeration value=\"membrane_element\"/>\r\n\t\t\t<xs:enumeration value=\"shell\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSurfaceSide\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSurfaceSide\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSurfaceSide\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"positive\"/>\r\n\t\t\t<xs:enumeration value=\"negative\"/>\r\n\t\t\t<xs:enumeration value=\"both\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSurfaceTextureEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSurfaceTextureEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSurfaceTextureEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bump\"/>\r\n\t\t\t<xs:enumeration value=\"opacity\"/>\r\n\t\t\t<xs:enumeration value=\"reflection\"/>\r\n\t\t\t<xs:enumeration value=\"selfillumination\"/>\r\n\t\t\t<xs:enumeration value=\"shininess\"/>\r\n\t\t\t<xs:enumeration value=\"specular\"/>\r\n\t\t\t<xs:enumeration value=\"texture\"/>\r\n\t\t\t<xs:enumeration value=\"transparencymap\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSwitchingDeviceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSwitchingDeviceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSwitchingDeviceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"contactor\"/>\r\n\t\t\t<xs:enumeration value=\"emergencystop\"/>\r\n\t\t\t<xs:enumeration value=\"starter\"/>\r\n\t\t\t<xs:enumeration value=\"switchdisconnector\"/>\r\n\t\t\t<xs:enumeration value=\"toggleswitch\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTankTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTankTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTankTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"preformed\"/>\r\n\t\t\t<xs:enumeration value=\"sectional\"/>\r\n\t\t\t<xs:enumeration value=\"expansion\"/>\r\n\t\t\t<xs:enumeration value=\"pressurevessel\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTendonTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTendonTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTendonTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"strand\"/>\r\n\t\t\t<xs:enumeration value=\"wire\"/>\r\n\t\t\t<xs:enumeration value=\"bar\"/>\r\n\t\t\t<xs:enumeration value=\"coated\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTextPath\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTextPath\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTextPath\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"left\"/>\r\n\t\t\t<xs:enumeration value=\"right\"/>\r\n\t\t\t<xs:enumeration value=\"up\"/>\r\n\t\t\t<xs:enumeration value=\"down\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcThermalLoadSourceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalLoadSourceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcThermalLoadSourceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"people\"/>\r\n\t\t\t<xs:enumeration value=\"lighting\"/>\r\n\t\t\t<xs:enumeration value=\"equipment\"/>\r\n\t\t\t<xs:enumeration value=\"ventilationindoorair\"/>\r\n\t\t\t<xs:enumeration value=\"ventilationoutsideair\"/>\r\n\t\t\t<xs:enumeration value=\"recirculatedair\"/>\r\n\t\t\t<xs:enumeration value=\"exhaustair\"/>\r\n\t\t\t<xs:enumeration value=\"airexchangerate\"/>\r\n\t\t\t<xs:enumeration value=\"drybulbtemperature\"/>\r\n\t\t\t<xs:enumeration value=\"relativehumidity\"/>\r\n\t\t\t<xs:enumeration value=\"infiltration\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcThermalLoadTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalLoadTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcThermalLoadTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"sensible\"/>\r\n\t\t\t<xs:enumeration value=\"latent\"/>\r\n\t\t\t<xs:enumeration value=\"radiant\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTimeSeriesDataTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeSeriesDataTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTimeSeriesDataTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"continuous\"/>\r\n\t\t\t<xs:enumeration value=\"discrete\"/>\r\n\t\t\t<xs:enumeration value=\"discretebinary\"/>\r\n\t\t\t<xs:enumeration value=\"piecewisebinary\"/>\r\n\t\t\t<xs:enumeration value=\"piecewiseconstant\"/>\r\n\t\t\t<xs:enumeration value=\"piecewisecontinuous\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTimeSeriesScheduleTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeSeriesScheduleTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTimeSeriesScheduleTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"annual\"/>\r\n\t\t\t<xs:enumeration value=\"monthly\"/>\r\n\t\t\t<xs:enumeration value=\"weekly\"/>\r\n\t\t\t<xs:enumeration value=\"daily\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTransformerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTransformerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTransformerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"current\"/>\r\n\t\t\t<xs:enumeration value=\"frequency\"/>\r\n\t\t\t<xs:enumeration value=\"voltage\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTransitionCode\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTransitionCode\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTransitionCode\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"discontinuous\"/>\r\n\t\t\t<xs:enumeration value=\"continuous\"/>\r\n\t\t\t<xs:enumeration value=\"contsamegradient\"/>\r\n\t\t\t<xs:enumeration value=\"contsamegradientsamecurvature\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTransportElementTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTransportElementTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTransportElementTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"elevator\"/>\r\n\t\t\t<xs:enumeration value=\"escalator\"/>\r\n\t\t\t<xs:enumeration value=\"movingwalkway\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTrimmingPreference\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTrimmingPreference\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTrimmingPreference\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cartesian\"/>\r\n\t\t\t<xs:enumeration value=\"parameter\"/>\r\n\t\t\t<xs:enumeration value=\"unspecified\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTubeBundleTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTubeBundleTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTubeBundleTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"finned\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcUnitEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcUnitEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcUnitEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"absorbeddoseunit\"/>\r\n\t\t\t<xs:enumeration value=\"amountofsubstanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"areaunit\"/>\r\n\t\t\t<xs:enumeration value=\"doseequivalentunit\"/>\r\n\t\t\t<xs:enumeration value=\"electriccapacitanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"electricchargeunit\"/>\r\n\t\t\t<xs:enumeration value=\"electricconductanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"electriccurrentunit\"/>\r\n\t\t\t<xs:enumeration value=\"electricresistanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"electricvoltageunit\"/>\r\n\t\t\t<xs:enumeration value=\"energyunit\"/>\r\n\t\t\t<xs:enumeration value=\"forceunit\"/>\r\n\t\t\t<xs:enumeration value=\"frequencyunit\"/>\r\n\t\t\t<xs:enumeration value=\"illuminanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"inductanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"lengthunit\"/>\r\n\t\t\t<xs:enumeration value=\"luminousfluxunit\"/>\r\n\t\t\t<xs:enumeration value=\"luminousintensityunit\"/>\r\n\t\t\t<xs:enumeration value=\"magneticfluxdensityunit\"/>\r\n\t\t\t<xs:enumeration value=\"magneticfluxunit\"/>\r\n\t\t\t<xs:enumeration value=\"massunit\"/>\r\n\t\t\t<xs:enumeration value=\"planeangleunit\"/>\r\n\t\t\t<xs:enumeration value=\"powerunit\"/>\r\n\t\t\t<xs:enumeration value=\"pressureunit\"/>\r\n\t\t\t<xs:enumeration value=\"radioactivityunit\"/>\r\n\t\t\t<xs:enumeration value=\"solidangleunit\"/>\r\n\t\t\t<xs:enumeration value=\"thermodynamictemperatureunit\"/>\r\n\t\t\t<xs:enumeration value=\"timeunit\"/>\r\n\t\t\t<xs:enumeration value=\"volumeunit\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcUnitaryEquipmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcUnitaryEquipmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcUnitaryEquipmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"airhandler\"/>\r\n\t\t\t<xs:enumeration value=\"airconditioningunit\"/>\r\n\t\t\t<xs:enumeration value=\"splitsystem\"/>\r\n\t\t\t<xs:enumeration value=\"rooftopunit\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcValveTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcValveTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcValveTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"airrelease\"/>\r\n\t\t\t<xs:enumeration value=\"antivacuum\"/>\r\n\t\t\t<xs:enumeration value=\"changeover\"/>\r\n\t\t\t<xs:enumeration value=\"check\"/>\r\n\t\t\t<xs:enumeration value=\"commissioning\"/>\r\n\t\t\t<xs:enumeration value=\"diverting\"/>\r\n\t\t\t<xs:enumeration value=\"drawoffcock\"/>\r\n\t\t\t<xs:enumeration value=\"doublecheck\"/>\r\n\t\t\t<xs:enumeration value=\"doubleregulating\"/>\r\n\t\t\t<xs:enumeration value=\"faucet\"/>\r\n\t\t\t<xs:enumeration value=\"flushing\"/>\r\n\t\t\t<xs:enumeration value=\"gascock\"/>\r\n\t\t\t<xs:enumeration value=\"gastap\"/>\r\n\t\t\t<xs:enumeration value=\"isolating\"/>\r\n\t\t\t<xs:enumeration value=\"mixing\"/>\r\n\t\t\t<xs:enumeration value=\"pressurereducing\"/>\r\n\t\t\t<xs:enumeration value=\"pressurerelief\"/>\r\n\t\t\t<xs:enumeration value=\"regulating\"/>\r\n\t\t\t<xs:enumeration value=\"safetycutoff\"/>\r\n\t\t\t<xs:enumeration value=\"steamtrap\"/>\r\n\t\t\t<xs:enumeration value=\"stopcock\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcVibrationIsolatorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcVibrationIsolatorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcVibrationIsolatorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"compression\"/>\r\n\t\t\t<xs:enumeration value=\"spring\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcWallTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWallTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcWallTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"standard\"/>\r\n\t\t\t<xs:enumeration value=\"polygonal\"/>\r\n\t\t\t<xs:enumeration value=\"shear\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcWasteTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWasteTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcWasteTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"floortrap\"/>\r\n\t\t\t<xs:enumeration value=\"floorwaste\"/>\r\n\t\t\t<xs:enumeration value=\"gullysump\"/>\r\n\t\t\t<xs:enumeration value=\"gullytrap\"/>\r\n\t\t\t<xs:enumeration value=\"greaseinterceptor\"/>\r\n\t\t\t<xs:enumeration value=\"oilinterceptor\"/>\r\n\t\t\t<xs:enumeration value=\"petrolinterceptor\"/>\r\n\t\t\t<xs:enumeration value=\"roofdrain\"/>\r\n\t\t\t<xs:enumeration value=\"wastedisposalunit\"/>\r\n\t\t\t<xs:enumeration value=\"wastetrap\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcWindowPanelOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowPanelOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcWindowPanelOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"sidehungrighthand\"/>\r\n\t\t\t<xs:enumeration value=\"sidehunglefthand\"/>\r\n\t\t\t<xs:enumeration value=\"tiltandturnrighthand\"/>\r\n\t\t\t<xs:enumeration value=\"tiltandturnlefthand\"/>\r\n\t\t\t<xs:enumeration value=\"tophung\"/>\r\n\t\t\t<xs:enumeration value=\"bottomhung\"/>\r\n\t\t\t<xs:enumeration value=\"pivothorizontal\"/>\r\n\t\t\t<xs:enumeration value=\"pivotvertical\"/>\r\n\t\t\t<xs:enumeration value=\"slidinghorizontal\"/>\r\n\t\t\t<xs:enumeration value=\"slidingvertical\"/>\r\n\t\t\t<xs:enumeration value=\"removablecasement\"/>\r\n\t\t\t<xs:enumeration value=\"fixedcasement\"/>\r\n\t\t\t<xs:enumeration value=\"otheroperation\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcWindowPanelPositionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowPanelPositionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcWindowPanelPositionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"left\"/>\r\n\t\t\t<xs:enumeration value=\"middle\"/>\r\n\t\t\t<xs:enumeration value=\"right\"/>\r\n\t\t\t<xs:enumeration value=\"bottom\"/>\r\n\t\t\t<xs:enumeration value=\"top\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcWindowStyleConstructionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowStyleConstructionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcWindowStyleConstructionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"aluminium\"/>\r\n\t\t\t<xs:enumeration value=\"high_grade_steel\"/>\r\n\t\t\t<xs:enumeration value=\"steel\"/>\r\n\t\t\t<xs:enumeration value=\"wood\"/>\r\n\t\t\t<xs:enumeration value=\"aluminium_wood\"/>\r\n\t\t\t<xs:enumeration value=\"plastic\"/>\r\n\t\t\t<xs:enumeration value=\"other_construction\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcWindowStyleOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowStyleOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcWindowStyleOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"single_panel\"/>\r\n\t\t\t<xs:enumeration value=\"double_panel_vertical\"/>\r\n\t\t\t<xs:enumeration value=\"double_panel_horizontal\"/>\r\n\t\t\t<xs:enumeration value=\"triple_panel_vertical\"/>\r\n\t\t\t<xs:enumeration value=\"triple_panel_bottom\"/>\r\n\t\t\t<xs:enumeration value=\"triple_panel_top\"/>\r\n\t\t\t<xs:enumeration value=\"triple_panel_left\"/>\r\n\t\t\t<xs:enumeration value=\"triple_panel_right\"/>\r\n\t\t\t<xs:enumeration value=\"triple_panel_horizontal\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcWorkControlTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWorkControlTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcWorkControlTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"actual\"/>\r\n\t\t\t<xs:enumeration value=\"baseline\"/>\r\n\t\t\t<xs:enumeration value=\"planned\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<!-- simple type declarations (for TYPE defined data type definitions) -->\r\n\t<xs:element name=\"IfcAbsorbedDoseMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAbsorbedDoseMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAbsorbedDoseMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAccelerationMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAccelerationMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAccelerationMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAmountOfSubstanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAmountOfSubstanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAmountOfSubstanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAngularVelocityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAngularVelocityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAngularVelocityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAreaMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAreaMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcBoolean\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBoolean\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcBoolean\">\r\n\t\t<xs:restriction base=\"xs:boolean\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcComplexNumber\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:complexContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcComplexNumber\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:complexContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcComplexNumber\">\r\n\t\t<xs:sequence>\r\n\t\t\t<xs:element ref=\"ex:double-wrapper\" minOccurs=\"2\" maxOccurs=\"2\"/>\r\n\t\t</xs:sequence>\r\n\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:double-wrapper\"/>\r\n\t\t<xs:attribute ref=\"ex:cType\" fixed=\"array\"/>\r\n\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCompoundPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:complexContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCompoundPlaneAngleMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:complexContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCompoundPlaneAngleMeasure\">\r\n\t\t<xs:sequence>\r\n\t\t\t<xs:element ref=\"ex:long-wrapper\" minOccurs=\"3\" maxOccurs=\"3\"/>\r\n\t\t</xs:sequence>\r\n\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:long-wrapper\"/>\r\n\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcContextDependentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcContextDependentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcContextDependentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCountMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCountMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCountMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCurvatureMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCurvatureMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCurvatureMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDayInMonthNumber\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDayInMonthNumber\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDayInMonthNumber\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDaylightSavingHour\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDaylightSavingHour\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDaylightSavingHour\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDescriptiveMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDescriptiveMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDescriptiveMeasure\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDimensionCount\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDimensionCount\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDimensionCount\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDoseEquivalentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoseEquivalentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDoseEquivalentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDynamicViscosityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDynamicViscosityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDynamicViscosityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricCapacitanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCapacitanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricCapacitanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricChargeMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricChargeMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricChargeMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricConductanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricConductanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricConductanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricCurrentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricCurrentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricResistanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricResistanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricResistanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricVoltageMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricVoltageMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricVoltageMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcEnergyMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergyMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcEnergyMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcForceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcForceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcForceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcFrequencyMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFrequencyMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcFrequencyMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcGloballyUniqueId\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcGloballyUniqueId\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcGloballyUniqueId\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t\t<xs:minLength value=\"22\"/>\r\n\t\t\t<xs:maxLength value=\"22\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcHeatFluxDensityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatFluxDensityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcHeatFluxDensityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcHeatingValueMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatingValueMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcHeatingValueMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcHourInDay\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHourInDay\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcHourInDay\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcIdentifier\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcIdentifier\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcIlluminanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIlluminanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcIlluminanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcInductanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcInductanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcInductanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcInteger\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcInteger\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcInteger\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcIntegerCountRateMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIntegerCountRateMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcIntegerCountRateMeasure\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcIonConcentrationMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIonConcentrationMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcIonConcentrationMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcIsothermalMoistureCapacityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcIsothermalMoistureCapacityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcKinematicViscosityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcKinematicViscosityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcKinematicViscosityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLabel\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLabel\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLabel\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLengthMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLengthMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLinearForceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearForceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLinearForceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLinearMomentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearMomentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLinearMomentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLinearStiffnessMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearStiffnessMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLinearStiffnessMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLinearVelocityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearVelocityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLinearVelocityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLogical\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLogical\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLogical\">\r\n\t\t<xs:restriction base=\"ex:logical\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLuminousFluxMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousFluxMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLuminousFluxMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLuminousIntensityDistributionMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityDistributionMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLuminousIntensityDistributionMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLuminousIntensityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLuminousIntensityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMagneticFluxDensityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxDensityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMagneticFluxDensityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMagneticFluxMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMagneticFluxMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMassDensityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMassDensityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMassDensityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMassFlowRateMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMassFlowRateMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMassFlowRateMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMassMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMassMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMassMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMassPerLengthMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMassPerLengthMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMassPerLengthMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMinuteInHour\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMinuteInHour\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMinuteInHour\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcModulusOfElasticityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfElasticityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcModulusOfElasticityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcModulusOfLinearSubgradeReactionMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcModulusOfRotationalSubgradeReactionMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcModulusOfSubgradeReactionMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMoistureDiffusivityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMoistureDiffusivityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMoistureDiffusivityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMolecularWeightMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMolecularWeightMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMolecularWeightMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMomentOfInertiaMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMomentOfInertiaMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMomentOfInertiaMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMonetaryMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMonetaryMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMonetaryMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMonthInYearNumber\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMonthInYearNumber\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMonthInYearNumber\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcNormalisedRatioMeasure\">\r\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcNumericMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcNumericMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcNumericMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPHMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPHMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPHMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcParameterValue\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcParameterValue\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPlanarForceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPlanarForceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPlanarForceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPlaneAngleMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPositiveLengthMeasure\">\r\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPositivePlaneAngleMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPositivePlaneAngleMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPositivePlaneAngleMeasure\">\r\n\t\t<xs:restriction base=\"ifc:IfcPlaneAngleMeasure\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveRatioMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPositiveRatioMeasure\">\r\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPowerMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPowerMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPowerMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPresentableText\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPresentableText\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPresentableText\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPressureMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPressureMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPressureMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRadioActivityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRadioActivityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRadioActivityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRatioMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRatioMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRatioMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcReal\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcReal\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcReal\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRotationalFrequencyMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalFrequencyMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRotationalFrequencyMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRotationalMassMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalMassMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRotationalMassMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRotationalStiffnessMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalStiffnessMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRotationalStiffnessMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSecondInMinute\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSecondInMinute\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSecondInMinute\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSectionModulusMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionModulusMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSectionModulusMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSectionalAreaIntegralMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionalAreaIntegralMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSectionalAreaIntegralMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcShearModulusMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcShearModulusMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcShearModulusMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSolidAngleMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSolidAngleMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSolidAngleMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSoundPowerMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSoundPowerMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSoundPressureMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSoundPressureMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSpecificHeatCapacityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecificHeatCapacityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSpecificHeatCapacityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSpecularExponent\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularExponent\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSpecularExponent\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSpecularRoughness\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularRoughness\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSpecularRoughness\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTemperatureGradientMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureGradientMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTemperatureGradientMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcText\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcText\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcText\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTextAlignment\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTextAlignment\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTextAlignment\">\r\n\t\t<xs:restriction base=\"ifc:IfcLabel\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcThermalAdmittanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalAdmittanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcThermalAdmittanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcThermalConductivityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalConductivityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcThermalConductivityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcThermalExpansionCoefficientMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalExpansionCoefficientMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcThermalExpansionCoefficientMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcThermalResistanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalResistanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcThermalResistanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcThermalTransmittanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalTransmittanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcThermalTransmittanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermodynamicTemperatureMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcThermodynamicTemperatureMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTimeMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTimeMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTimeStamp\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeStamp\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTimeStamp\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTorqueMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTorqueMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTorqueMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcVaporPermeabilityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcVaporPermeabilityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcVaporPermeabilityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcVolumeMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumeMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcVolumeMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcVolumetricFlowRateMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumetricFlowRateMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcVolumetricFlowRateMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcWarpingConstantMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingConstantMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcWarpingConstantMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcWarpingMomentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingMomentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcWarpingMomentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcYearNumber\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcYearNumber\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcYearNumber\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n</xs:schema>\r\n"
  },
  {
    "path": "Install/Program Files to Install/IFC2X3_TC1.exp",
    "content": "(*\nCopyright by:\nInternational Alliance for Interoperability, 1996-2007\n\nAll rights reserved. No part of this documentation may be\nreproduced, stored in a retrieval system, or transmitted\nin any form or by any means, without the prior written\npermission of the owner.\n\nContents:\nfull IFC object model EXPRESS definitions for the IFC2x Edition 3 Technical Corrigendum 1 release\n\n- express longform distribution\n- compiled for EXPRESS version 1 technical corrigendum 2\n\nIssue date:\nJuly 10, 2007\n\nDevelopment Team:\nModeling Support Group of the \nInternational Alliance for Interoperability\ncompiled by Thomas Liebich tl@aec3.com\n*)\n\nSCHEMA IFC2X3;\n\nTYPE IfcAbsorbedDoseMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAccelerationMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAmountOfSubstanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAngularVelocityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAreaMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcBoolean = BOOLEAN;\nEND_TYPE;\n\nTYPE IfcBoxAlignment = IfcLabel;\n WHERE\n\tWR1 : SELF IN ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right'];\nEND_TYPE;\n\nTYPE IfcComplexNumber = ARRAY [1:2] OF REAL;\nEND_TYPE;\n\nTYPE IfcCompoundPlaneAngleMeasure = LIST [3:4] OF INTEGER;\n WHERE\n\tWR1 : { -360 <= SELF[1] < 360 };\n\tWR2 : { -60 <= SELF[2] < 60 };\n\tWR3 : { -60 <= SELF[3] < 60 };\n\tWR4 : ((SELF[1] >= 0) AND (SELF[2] >= 0) AND (SELF[3] >= 0)) OR ((SELF[1] <= 0) AND (SELF[2] <= 0) AND (SELF[3] <= 0));\nEND_TYPE;\n\nTYPE IfcContextDependentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcCountMeasure = NUMBER;\nEND_TYPE;\n\nTYPE IfcCurvatureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcDayInMonthNumber = INTEGER;\nEND_TYPE;\n\nTYPE IfcDaylightSavingHour = INTEGER;\n WHERE\n\tWR1 : { 0 <= SELF <= 2 };\nEND_TYPE;\n\nTYPE IfcDescriptiveMeasure = STRING;\nEND_TYPE;\n\nTYPE IfcDimensionCount = INTEGER;\n WHERE\n\tWR1 : { 0 < SELF <= 3 };\nEND_TYPE;\n\nTYPE IfcDoseEquivalentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcDynamicViscosityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricCapacitanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricChargeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricConductanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricCurrentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricResistanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricVoltageMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcEnergyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcFontStyle = STRING;\n WHERE\n\tWR1 : SELF IN ['normal','italic','oblique'];\nEND_TYPE;\n\nTYPE IfcFontVariant = STRING;\n WHERE\n\tWR1 : SELF IN ['normal','small-caps'];\nEND_TYPE;\n\nTYPE IfcFontWeight = STRING;\n WHERE\n\tWR1 : SELF IN ['normal','small-caps','100','200','300','400','500','600','700','800','900'];\nEND_TYPE;\n\nTYPE IfcForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcFrequencyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcGloballyUniqueId = STRING(22) FIXED;\nEND_TYPE;\n\nTYPE IfcHeatFluxDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcHeatingValueMeasure = REAL;\n WHERE\n\tWR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcHourInDay = INTEGER;\n WHERE\n\tWR1 : { 0 <= SELF < 24 };\nEND_TYPE;\n\nTYPE IfcIdentifier = STRING;\nEND_TYPE;\n\nTYPE IfcIlluminanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcInductanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcInteger = INTEGER;\nEND_TYPE;\n\nTYPE IfcIntegerCountRateMeasure = INTEGER;\nEND_TYPE;\n\nTYPE IfcIonConcentrationMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcIsothermalMoistureCapacityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcKinematicViscosityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLabel = STRING;\nEND_TYPE;\n\nTYPE IfcLengthMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearMomentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearStiffnessMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearVelocityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLogical = LOGICAL;\nEND_TYPE;\n\nTYPE IfcLuminousFluxMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLuminousIntensityDistributionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLuminousIntensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMagneticFluxDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMagneticFluxMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassFlowRateMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassPerLengthMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMinuteInHour = INTEGER;\n WHERE\n\tWR1 : {0 <= SELF <= 59 };\nEND_TYPE;\n\nTYPE IfcModulusOfElasticityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfLinearSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfRotationalSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMoistureDiffusivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMolecularWeightMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMomentOfInertiaMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMonetaryMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMonthInYearNumber = INTEGER;\n WHERE\n\tWR1 : { 1<= SELF <= 12 };\nEND_TYPE;\n\nTYPE IfcNormalisedRatioMeasure = IfcRatioMeasure;\n WHERE\n\tWR1 : {0.0 <= SELF <= 1.0};\nEND_TYPE;\n\nTYPE IfcNumericMeasure = NUMBER;\nEND_TYPE;\n\nTYPE IfcPHMeasure = REAL;\n WHERE\n\tWR21 : {0.0 <= SELF <= 14.0};\nEND_TYPE;\n\nTYPE IfcParameterValue = REAL;\nEND_TYPE;\n\nTYPE IfcPlanarForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPlaneAngleMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPositiveLengthMeasure = IfcLengthMeasure;\n WHERE\n\tWR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcPositivePlaneAngleMeasure = IfcPlaneAngleMeasure;\n WHERE\n\tWR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcPositiveRatioMeasure = IfcRatioMeasure;\n WHERE\n\tWR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcPowerMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPresentableText = STRING;\nEND_TYPE;\n\nTYPE IfcPressureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRadioActivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRatioMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcReal = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalFrequencyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalMassMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalStiffnessMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSecondInMinute = REAL;\n WHERE\n\tWR1 : { 0. <= SELF < 60. };\nEND_TYPE;\n\nTYPE IfcSectionModulusMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSectionalAreaIntegralMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcShearModulusMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSolidAngleMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPowerMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPressureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSpecificHeatCapacityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSpecularExponent = REAL;\nEND_TYPE;\n\nTYPE IfcSpecularRoughness = REAL;\n WHERE\n\tWR1 : {0.0 <= SELF <= 1.0};\nEND_TYPE;\n\nTYPE IfcTemperatureGradientMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcText = STRING;\nEND_TYPE;\n\nTYPE IfcTextAlignment = STRING;\n WHERE\n\tWR1 : SELF IN ['left', 'right', 'center', 'justify'];\nEND_TYPE;\n\nTYPE IfcTextDecoration = STRING;\n WHERE\n\tWR1 : SELF IN ['none', 'underline', 'overline', 'line-through', 'blink'];\nEND_TYPE;\n\nTYPE IfcTextFontName = STRING;\nEND_TYPE;\n\nTYPE IfcTextTransformation = STRING;\n WHERE\n\tWR1 : SELF IN ['capitalize', 'uppercase', 'lowercase', 'none'];\nEND_TYPE;\n\nTYPE IfcThermalAdmittanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalConductivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalExpansionCoefficientMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalResistanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalTransmittanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermodynamicTemperatureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcTimeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcTimeStamp = INTEGER;\nEND_TYPE;\n\nTYPE IfcTorqueMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcVaporPermeabilityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcVolumeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcVolumetricFlowRateMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcWarpingConstantMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcWarpingMomentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcYearNumber = INTEGER;\nEND_TYPE;\n\nTYPE IfcActionSourceTypeEnum = ENUMERATION OF\n\t(DEAD_LOAD_G\n\t,COMPLETION_G1\n\t,LIVE_LOAD_Q\n\t,SNOW_S\n\t,WIND_W\n\t,PRESTRESSING_P\n\t,SETTLEMENT_U\n\t,TEMPERATURE_T\n\t,EARTHQUAKE_E\n\t,FIRE\n\t,IMPULSE\n\t,IMPACT\n\t,TRANSPORT\n\t,ERECTION\n\t,PROPPING\n\t,SYSTEM_IMPERFECTION\n\t,SHRINKAGE\n\t,CREEP\n\t,LACK_OF_FIT\n\t,BUOYANCY\n\t,ICE\n\t,CURRENT\n\t,WAVE\n\t,RAIN\n\t,BRAKES\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActionTypeEnum = ENUMERATION OF\n\t(PERMANENT_G\n\t,VARIABLE_Q\n\t,EXTRAORDINARY_A\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActuatorTypeEnum = ENUMERATION OF\n\t(ELECTRICACTUATOR\n\t,HANDOPERATEDACTUATOR\n\t,HYDRAULICACTUATOR\n\t,PNEUMATICACTUATOR\n\t,THERMOSTATICACTUATOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAddressTypeEnum = ENUMERATION OF\n\t(OFFICE\n\t,SITE\n\t,HOME\n\t,DISTRIBUTIONPOINT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcAheadOrBehind = ENUMERATION OF\n\t(AHEAD\n\t,BEHIND);\nEND_TYPE;\n\nTYPE IfcAirTerminalBoxTypeEnum = ENUMERATION OF\n\t(CONSTANTFLOW\n\t,VARIABLEFLOWPRESSUREDEPENDANT\n\t,VARIABLEFLOWPRESSUREINDEPENDANT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAirTerminalTypeEnum = ENUMERATION OF\n\t(GRILLE\n\t,REGISTER\n\t,DIFFUSER\n\t,EYEBALL\n\t,IRIS\n\t,LINEARGRILLE\n\t,LINEARDIFFUSER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAirToAirHeatRecoveryTypeEnum = ENUMERATION OF\n\t(FIXEDPLATECOUNTERFLOWEXCHANGER\n\t,FIXEDPLATECROSSFLOWEXCHANGER\n\t,FIXEDPLATEPARALLELFLOWEXCHANGER\n\t,ROTARYWHEEL\n\t,RUNAROUNDCOILLOOP\n\t,HEATPIPE\n\t,TWINTOWERENTHALPYRECOVERYLOOPS\n\t,THERMOSIPHONSEALEDTUBEHEATEXCHANGERS\n\t,THERMOSIPHONCOILTYPEHEATEXCHANGERS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAlarmTypeEnum = ENUMERATION OF\n\t(BELL\n\t,BREAKGLASSBUTTON\n\t,LIGHT\n\t,MANUALPULLBOX\n\t,SIREN\n\t,WHISTLE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAnalysisModelTypeEnum = ENUMERATION OF\n\t(IN_PLANE_LOADING_2D\n\t,OUT_PLANE_LOADING_2D\n\t,LOADING_3D\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAnalysisTheoryTypeEnum = ENUMERATION OF\n\t(FIRST_ORDER_THEORY\n\t,SECOND_ORDER_THEORY\n\t,THIRD_ORDER_THEORY\n\t,FULL_NONLINEAR_THEORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcArithmeticOperatorEnum = ENUMERATION OF\n\t(ADD\n\t,DIVIDE\n\t,MULTIPLY\n\t,SUBTRACT);\nEND_TYPE;\n\nTYPE IfcAssemblyPlaceEnum = ENUMERATION OF\n\t(SITE\n\t,FACTORY\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBSplineCurveForm = ENUMERATION OF\n\t(POLYLINE_FORM\n\t,CIRCULAR_ARC\n\t,ELLIPTIC_ARC\n\t,PARABOLIC_ARC\n\t,HYPERBOLIC_ARC\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcBeamTypeEnum = ENUMERATION OF\n\t(BEAM\n\t,JOIST\n\t,LINTEL\n\t,T_BEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBenchmarkEnum = ENUMERATION OF\n\t(GREATERTHAN\n\t,GREATERTHANOREQUALTO\n\t,LESSTHAN\n\t,LESSTHANOREQUALTO\n\t,EQUALTO\n\t,NOTEQUALTO);\nEND_TYPE;\n\nTYPE IfcBoilerTypeEnum = ENUMERATION OF\n\t(WATER\n\t,STEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBooleanOperator = ENUMERATION OF\n\t(UNION\n\t,INTERSECTION\n\t,DIFFERENCE);\nEND_TYPE;\n\nTYPE IfcBuildingElementProxyTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableCarrierFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CROSS\n\t,REDUCER\n\t,TEE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableCarrierSegmentTypeEnum = ENUMERATION OF\n\t(CABLELADDERSEGMENT\n\t,CABLETRAYSEGMENT\n\t,CABLETRUNKINGSEGMENT\n\t,CONDUITSEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableSegmentTypeEnum = ENUMERATION OF\n\t(CABLESEGMENT\n\t,CONDUCTORSEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcChangeActionEnum = ENUMERATION OF\n\t(NOCHANGE\n\t,MODIFIED\n\t,ADDED\n\t,DELETED\n\t,MODIFIEDADDED\n\t,MODIFIEDDELETED);\nEND_TYPE;\n\nTYPE IfcChillerTypeEnum = ENUMERATION OF\n\t(AIRCOOLED\n\t,WATERCOOLED\n\t,HEATRECOVERY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoilTypeEnum = ENUMERATION OF\n\t(DXCOOLINGCOIL\n\t,WATERCOOLINGCOIL\n\t,STEAMHEATINGCOIL\n\t,WATERHEATINGCOIL\n\t,ELECTRICHEATINGCOIL\n\t,GASHEATINGCOIL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcColumnTypeEnum = ENUMERATION OF\n\t(COLUMN\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCompressorTypeEnum = ENUMERATION OF\n\t(DYNAMIC\n\t,RECIPROCATING\n\t,ROTARY\n\t,SCROLL\n\t,TROCHOIDAL\n\t,SINGLESTAGE\n\t,BOOSTER\n\t,OPENTYPE\n\t,HERMETIC\n\t,SEMIHERMETIC\n\t,WELDEDSHELLHERMETIC\n\t,ROLLINGPISTON\n\t,ROTARYVANE\n\t,SINGLESCREW\n\t,TWINSCREW\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCondenserTypeEnum = ENUMERATION OF\n\t(WATERCOOLEDSHELLTUBE\n\t,WATERCOOLEDSHELLCOIL\n\t,WATERCOOLEDTUBEINTUBE\n\t,WATERCOOLEDBRAZEDPLATE\n\t,AIRCOOLED\n\t,EVAPORATIVECOOLED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConnectionTypeEnum = ENUMERATION OF\n\t(ATPATH\n\t,ATSTART\n\t,ATEND\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConstraintEnum = ENUMERATION OF\n\t(HARD\n\t,SOFT\n\t,ADVISORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcControllerTypeEnum = ENUMERATION OF\n\t(FLOATING\n\t,PROPORTIONAL\n\t,PROPORTIONALINTEGRAL\n\t,PROPORTIONALINTEGRALDERIVATIVE\n\t,TIMEDTWOPOSITION\n\t,TWOPOSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCooledBeamTypeEnum = ENUMERATION OF\n\t(ACTIVE\n\t,PASSIVE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoolingTowerTypeEnum = ENUMERATION OF\n\t(NATURALDRAFT\n\t,MECHANICALINDUCEDDRAFT\n\t,MECHANICALFORCEDDRAFT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCostScheduleTypeEnum = ENUMERATION OF\n\t(BUDGET\n\t,COSTPLAN\n\t,ESTIMATE\n\t,TENDER\n\t,PRICEDBILLOFQUANTITIES\n\t,UNPRICEDBILLOFQUANTITIES\n\t,SCHEDULEOFRATES\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoveringTypeEnum = ENUMERATION OF\n\t(CEILING\n\t,FLOORING\n\t,CLADDING\n\t,ROOFING\n\t,INSULATION\n\t,MEMBRANE\n\t,SLEEVING\n\t,WRAPPING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCurrencyEnum = ENUMERATION OF\n\t(AED\n\t,AES\n\t,ATS\n\t,AUD\n\t,BBD\n\t,BEG\n\t,BGL\n\t,BHD\n\t,BMD\n\t,BND\n\t,BRL\n\t,BSD\n\t,BWP\n\t,BZD\n\t,CAD\n\t,CBD\n\t,CHF\n\t,CLP\n\t,CNY\n\t,CYS\n\t,CZK\n\t,DDP\n\t,DEM\n\t,DKK\n\t,EGL\n\t,EST\n\t,EUR\n\t,FAK\n\t,FIM\n\t,FJD\n\t,FKP\n\t,FRF\n\t,GBP\n\t,GIP\n\t,GMD\n\t,GRX\n\t,HKD\n\t,HUF\n\t,ICK\n\t,IDR\n\t,ILS\n\t,INR\n\t,IRP\n\t,ITL\n\t,JMD\n\t,JOD\n\t,JPY\n\t,KES\n\t,KRW\n\t,KWD\n\t,KYD\n\t,LKR\n\t,LUF\n\t,MTL\n\t,MUR\n\t,MXN\n\t,MYR\n\t,NLG\n\t,NZD\n\t,OMR\n\t,PGK\n\t,PHP\n\t,PKR\n\t,PLN\n\t,PTN\n\t,QAR\n\t,RUR\n\t,SAR\n\t,SCR\n\t,SEK\n\t,SGD\n\t,SKP\n\t,THB\n\t,TRL\n\t,TTD\n\t,TWD\n\t,USD\n\t,VEB\n\t,VND\n\t,XEU\n\t,ZAR\n\t,ZWD\n\t,NOK);\nEND_TYPE;\n\nTYPE IfcCurtainWallTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDamperTypeEnum = ENUMERATION OF\n\t(CONTROLDAMPER\n\t,FIREDAMPER\n\t,SMOKEDAMPER\n\t,FIRESMOKEDAMPER\n\t,BACKDRAFTDAMPER\n\t,RELIEFDAMPER\n\t,BLASTDAMPER\n\t,GRAVITYDAMPER\n\t,GRAVITYRELIEFDAMPER\n\t,BALANCINGDAMPER\n\t,FUMEHOODEXHAUST\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDataOriginEnum = ENUMERATION OF\n\t(MEASURED\n\t,PREDICTED\n\t,SIMULATED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDerivedUnitEnum = ENUMERATION OF\n\t(ANGULARVELOCITYUNIT\n\t,COMPOUNDPLANEANGLEUNIT\n\t,DYNAMICVISCOSITYUNIT\n\t,HEATFLUXDENSITYUNIT\n\t,INTEGERCOUNTRATEUNIT\n\t,ISOTHERMALMOISTURECAPACITYUNIT\n\t,KINEMATICVISCOSITYUNIT\n\t,LINEARVELOCITYUNIT\n\t,MASSDENSITYUNIT\n\t,MASSFLOWRATEUNIT\n\t,MOISTUREDIFFUSIVITYUNIT\n\t,MOLECULARWEIGHTUNIT\n\t,SPECIFICHEATCAPACITYUNIT\n\t,THERMALADMITTANCEUNIT\n\t,THERMALCONDUCTANCEUNIT\n\t,THERMALRESISTANCEUNIT\n\t,THERMALTRANSMITTANCEUNIT\n\t,VAPORPERMEABILITYUNIT\n\t,VOLUMETRICFLOWRATEUNIT\n\t,ROTATIONALFREQUENCYUNIT\n\t,TORQUEUNIT\n\t,MOMENTOFINERTIAUNIT\n\t,LINEARMOMENTUNIT\n\t,LINEARFORCEUNIT\n\t,PLANARFORCEUNIT\n\t,MODULUSOFELASTICITYUNIT\n\t,SHEARMODULUSUNIT\n\t,LINEARSTIFFNESSUNIT\n\t,ROTATIONALSTIFFNESSUNIT\n\t,MODULUSOFSUBGRADEREACTIONUNIT\n\t,ACCELERATIONUNIT\n\t,CURVATUREUNIT\n\t,HEATINGVALUEUNIT\n\t,IONCONCENTRATIONUNIT\n\t,LUMINOUSINTENSITYDISTRIBUTIONUNIT\n\t,MASSPERLENGTHUNIT\n\t,MODULUSOFLINEARSUBGRADEREACTIONUNIT\n\t,MODULUSOFROTATIONALSUBGRADEREACTIONUNIT\n\t,PHUNIT\n\t,ROTATIONALMASSUNIT\n\t,SECTIONAREAINTEGRALUNIT\n\t,SECTIONMODULUSUNIT\n\t,SOUNDPOWERUNIT\n\t,SOUNDPRESSUREUNIT\n\t,TEMPERATUREGRADIENTUNIT\n\t,THERMALEXPANSIONCOEFFICIENTUNIT\n\t,WARPINGCONSTANTUNIT\n\t,WARPINGMOMENTUNIT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcDimensionExtentUsage = ENUMERATION OF\n\t(ORIGIN\n\t,TARGET);\nEND_TYPE;\n\nTYPE IfcDirectionSenseEnum = ENUMERATION OF\n\t(POSITIVE\n\t,NEGATIVE);\nEND_TYPE;\n\nTYPE IfcDistributionChamberElementTypeEnum = ENUMERATION OF\n\t(FORMEDDUCT\n\t,INSPECTIONCHAMBER\n\t,INSPECTIONPIT\n\t,MANHOLE\n\t,METERCHAMBER\n\t,SUMP\n\t,TRENCH\n\t,VALVECHAMBER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDocumentConfidentialityEnum = ENUMERATION OF\n\t(PUBLIC\n\t,RESTRICTED\n\t,CONFIDENTIAL\n\t,PERSONAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDocumentStatusEnum = ENUMERATION OF\n\t(DRAFT\n\t,FINALDRAFT\n\t,FINAL\n\t,REVISION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorPanelOperationEnum = ENUMERATION OF\n\t(SWINGING\n\t,DOUBLE_ACTING\n\t,SLIDING\n\t,FOLDING\n\t,REVOLVING\n\t,ROLLINGUP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorPanelPositionEnum = ENUMERATION OF\n\t(LEFT\n\t,MIDDLE\n\t,RIGHT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorStyleConstructionEnum = ENUMERATION OF\n\t(ALUMINIUM\n\t,HIGH_GRADE_STEEL\n\t,STEEL\n\t,WOOD\n\t,ALUMINIUM_WOOD\n\t,ALUMINIUM_PLASTIC\n\t,PLASTIC\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorStyleOperationEnum = ENUMERATION OF\n\t(SINGLE_SWING_LEFT\n\t,SINGLE_SWING_RIGHT\n\t,DOUBLE_DOOR_SINGLE_SWING\n\t,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT\n\t,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT\n\t,DOUBLE_SWING_LEFT\n\t,DOUBLE_SWING_RIGHT\n\t,DOUBLE_DOOR_DOUBLE_SWING\n\t,SLIDING_TO_LEFT\n\t,SLIDING_TO_RIGHT\n\t,DOUBLE_DOOR_SLIDING\n\t,FOLDING_TO_LEFT\n\t,FOLDING_TO_RIGHT\n\t,DOUBLE_DOOR_FOLDING\n\t,REVOLVING\n\t,ROLLINGUP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CONNECTOR\n\t,ENTRY\n\t,EXIT\n\t,JUNCTION\n\t,OBSTRUCTION\n\t,TRANSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctSegmentTypeEnum = ENUMERATION OF\n\t(RIGIDSEGMENT\n\t,FLEXIBLESEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctSilencerTypeEnum = ENUMERATION OF\n\t(FLATOVAL\n\t,RECTANGULAR\n\t,ROUND\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricApplianceTypeEnum = ENUMERATION OF\n\t(COMPUTER\n\t,DIRECTWATERHEATER\n\t,DISHWASHER\n\t,ELECTRICCOOKER\n\t,ELECTRICHEATER\n\t,FACSIMILE\n\t,FREESTANDINGFAN\n\t,FREEZER\n\t,FRIDGE_FREEZER\n\t,HANDDRYER\n\t,INDIRECTWATERHEATER\n\t,MICROWAVE\n\t,PHOTOCOPIER\n\t,PRINTER\n\t,REFRIGERATOR\n\t,RADIANTHEATER\n\t,SCANNER\n\t,TELEPHONE\n\t,TUMBLEDRYER\n\t,TV\n\t,VENDINGMACHINE\n\t,WASHINGMACHINE\n\t,WATERHEATER\n\t,WATERCOOLER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricCurrentEnum = ENUMERATION OF\n\t(ALTERNATING\n\t,DIRECT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricDistributionPointFunctionEnum = ENUMERATION OF\n\t(ALARMPANEL\n\t,CONSUMERUNIT\n\t,CONTROLPANEL\n\t,DISTRIBUTIONBOARD\n\t,GASDETECTORPANEL\n\t,INDICATORPANEL\n\t,MIMICPANEL\n\t,MOTORCONTROLCENTRE\n\t,SWITCHBOARD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricFlowStorageDeviceTypeEnum = ENUMERATION OF\n\t(BATTERY\n\t,CAPACITORBANK\n\t,HARMONICFILTER\n\t,INDUCTORBANK\n\t,UPS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricGeneratorTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricHeaterTypeEnum = ENUMERATION OF\n\t(ELECTRICPOINTHEATER\n\t,ELECTRICCABLEHEATER\n\t,ELECTRICMATHEATER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricMotorTypeEnum = ENUMERATION OF\n\t(DC\n\t,INDUCTION\n\t,POLYPHASE\n\t,RELUCTANCESYNCHRONOUS\n\t,SYNCHRONOUS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricTimeControlTypeEnum = ENUMERATION OF\n\t(TIMECLOCK\n\t,TIMEDELAY\n\t,RELAY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElementAssemblyTypeEnum = ENUMERATION OF\n\t(ACCESSORY_ASSEMBLY\n\t,ARCH\n\t,BEAM_GRID\n\t,BRACED_FRAME\n\t,GIRDER\n\t,REINFORCEMENT_UNIT\n\t,RIGID_FRAME\n\t,SLAB_FIELD\n\t,TRUSS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElementCompositionEnum = ENUMERATION OF\n\t(COMPLEX\n\t,ELEMENT\n\t,PARTIAL);\nEND_TYPE;\n\nTYPE IfcEnergySequenceEnum = ENUMERATION OF\n\t(PRIMARY\n\t,SECONDARY\n\t,TERTIARY\n\t,AUXILIARY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEnvironmentalImpactCategoryEnum = ENUMERATION OF\n\t(COMBINEDVALUE\n\t,DISPOSAL\n\t,EXTRACTION\n\t,INSTALLATION\n\t,MANUFACTURE\n\t,TRANSPORTATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEvaporativeCoolerTypeEnum = ENUMERATION OF\n\t(DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER\n\t,DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER\n\t,DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER\n\t,DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER\n\t,DIRECTEVAPORATIVEAIRWASHER\n\t,INDIRECTEVAPORATIVEPACKAGEAIRCOOLER\n\t,INDIRECTEVAPORATIVEWETCOIL\n\t,INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER\n\t,INDIRECTDIRECTCOMBINATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEvaporatorTypeEnum = ENUMERATION OF\n\t(DIRECTEXPANSIONSHELLANDTUBE\n\t,DIRECTEXPANSIONTUBEINTUBE\n\t,DIRECTEXPANSIONBRAZEDPLATE\n\t,FLOODEDSHELLANDTUBE\n\t,SHELLANDCOIL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFanTypeEnum = ENUMERATION OF\n\t(CENTRIFUGALFORWARDCURVED\n\t,CENTRIFUGALRADIAL\n\t,CENTRIFUGALBACKWARDINCLINEDCURVED\n\t,CENTRIFUGALAIRFOIL\n\t,TUBEAXIAL\n\t,VANEAXIAL\n\t,PROPELLORAXIAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFilterTypeEnum = ENUMERATION OF\n\t(AIRPARTICLEFILTER\n\t,ODORFILTER\n\t,OILFILTER\n\t,STRAINER\n\t,WATERFILTER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFireSuppressionTerminalTypeEnum = ENUMERATION OF\n\t(BREECHINGINLET\n\t,FIREHYDRANT\n\t,HOSEREEL\n\t,SPRINKLER\n\t,SPRINKLERDEFLECTOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowDirectionEnum = ENUMERATION OF\n\t(SOURCE\n\t,SINK\n\t,SOURCEANDSINK\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowInstrumentTypeEnum = ENUMERATION OF\n\t(PRESSUREGAUGE\n\t,THERMOMETER\n\t,AMMETER\n\t,FREQUENCYMETER\n\t,POWERFACTORMETER\n\t,PHASEANGLEMETER\n\t,VOLTMETER_PEAK\n\t,VOLTMETER_RMS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowMeterTypeEnum = ENUMERATION OF\n\t(ELECTRICMETER\n\t,ENERGYMETER\n\t,FLOWMETER\n\t,GASMETER\n\t,OILMETER\n\t,WATERMETER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFootingTypeEnum = ENUMERATION OF\n\t(FOOTING_BEAM\n\t,PAD_FOOTING\n\t,PILE_CAP\n\t,STRIP_FOOTING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGasTerminalTypeEnum = ENUMERATION OF\n\t(GASAPPLIANCE\n\t,GASBOOSTER\n\t,GASBURNER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGeometricProjectionEnum = ENUMERATION OF\n\t(GRAPH_VIEW\n\t,SKETCH_VIEW\n\t,MODEL_VIEW\n\t,PLAN_VIEW\n\t,REFLECTED_PLAN_VIEW\n\t,SECTION_VIEW\n\t,ELEVATION_VIEW\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGlobalOrLocalEnum = ENUMERATION OF\n\t(GLOBAL_COORDS\n\t,LOCAL_COORDS);\nEND_TYPE;\n\nTYPE IfcHeatExchangerTypeEnum = ENUMERATION OF\n\t(PLATE\n\t,SHELLANDTUBE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcHumidifierTypeEnum = ENUMERATION OF\n\t(STEAMINJECTION\n\t,ADIABATICAIRWASHER\n\t,ADIABATICPAN\n\t,ADIABATICWETTEDELEMENT\n\t,ADIABATICATOMIZING\n\t,ADIABATICULTRASONIC\n\t,ADIABATICRIGIDMEDIA\n\t,ADIABATICCOMPRESSEDAIRNOZZLE\n\t,ASSISTEDELECTRIC\n\t,ASSISTEDNATURALGAS\n\t,ASSISTEDPROPANE\n\t,ASSISTEDBUTANE\n\t,ASSISTEDSTEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcInternalOrExternalEnum = ENUMERATION OF\n\t(INTERNAL\n\t,EXTERNAL\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcInventoryTypeEnum = ENUMERATION OF\n\t(ASSETINVENTORY\n\t,SPACEINVENTORY\n\t,FURNITUREINVENTORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcJunctionBoxTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLampTypeEnum = ENUMERATION OF\n\t(COMPACTFLUORESCENT\n\t,FLUORESCENT\n\t,HIGHPRESSUREMERCURY\n\t,HIGHPRESSURESODIUM\n\t,METALHALIDE\n\t,TUNGSTENFILAMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLayerSetDirectionEnum = ENUMERATION OF\n\t(AXIS1\n\t,AXIS2\n\t,AXIS3);\nEND_TYPE;\n\nTYPE IfcLightDistributionCurveEnum = ENUMERATION OF\n\t(TYPE_A\n\t,TYPE_B\n\t,TYPE_C\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLightEmissionSourceEnum = ENUMERATION OF\n\t(COMPACTFLUORESCENT\n\t,FLUORESCENT\n\t,HIGHPRESSUREMERCURY\n\t,HIGHPRESSURESODIUM\n\t,LIGHTEMITTINGDIODE\n\t,LOWPRESSURESODIUM\n\t,LOWVOLTAGEHALOGEN\n\t,MAINVOLTAGEHALOGEN\n\t,METALHALIDE\n\t,TUNGSTENFILAMENT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLightFixtureTypeEnum = ENUMERATION OF\n\t(POINTSOURCE\n\t,DIRECTIONSOURCE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLoadGroupTypeEnum = ENUMERATION OF\n\t(LOAD_GROUP\n\t,LOAD_CASE\n\t,LOAD_COMBINATION_GROUP\n\t,LOAD_COMBINATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLogicalOperatorEnum = ENUMERATION OF\n\t(LOGICALAND\n\t,LOGICALOR);\nEND_TYPE;\n\nTYPE IfcMemberTypeEnum = ENUMERATION OF\n\t(BRACE\n\t,CHORD\n\t,COLLAR\n\t,MEMBER\n\t,MULLION\n\t,PLATE\n\t,POST\n\t,PURLIN\n\t,RAFTER\n\t,STRINGER\n\t,STRUT\n\t,STUD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcMotorConnectionTypeEnum = ENUMERATION OF\n\t(BELTDRIVE\n\t,COUPLING\n\t,DIRECTDRIVE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcNullStyle = ENUMERATION OF\n\t(NULL);\nEND_TYPE;\n\nTYPE IfcObjectTypeEnum = ENUMERATION OF\n\t(PRODUCT\n\t,PROCESS\n\t,CONTROL\n\t,RESOURCE\n\t,ACTOR\n\t,GROUP\n\t,PROJECT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcObjectiveEnum = ENUMERATION OF\n\t(CODECOMPLIANCE\n\t,DESIGNINTENT\n\t,HEALTHANDSAFETY\n\t,REQUIREMENT\n\t,SPECIFICATION\n\t,TRIGGERCONDITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcOccupantTypeEnum = ENUMERATION OF\n\t(ASSIGNEE\n\t,ASSIGNOR\n\t,LESSEE\n\t,LESSOR\n\t,LETTINGAGENT\n\t,OWNER\n\t,TENANT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcOutletTypeEnum = ENUMERATION OF\n\t(AUDIOVISUALOUTLET\n\t,COMMUNICATIONSOUTLET\n\t,POWEROUTLET\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPermeableCoveringOperationEnum = ENUMERATION OF\n\t(GRILL\n\t,LOUVER\n\t,SCREEN\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPhysicalOrVirtualEnum = ENUMERATION OF\n\t(PHYSICAL\n\t,VIRTUAL\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPileConstructionEnum = ENUMERATION OF\n\t(CAST_IN_PLACE\n\t,COMPOSITE\n\t,PRECAST_CONCRETE\n\t,PREFAB_STEEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPileTypeEnum = ENUMERATION OF\n\t(COHESION\n\t,FRICTION\n\t,SUPPORT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPipeFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CONNECTOR\n\t,ENTRY\n\t,EXIT\n\t,JUNCTION\n\t,OBSTRUCTION\n\t,TRANSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPipeSegmentTypeEnum = ENUMERATION OF\n\t(FLEXIBLESEGMENT\n\t,RIGIDSEGMENT\n\t,GUTTER\n\t,SPOOL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPlateTypeEnum = ENUMERATION OF\n\t(CURTAIN_PANEL\n\t,SHEET\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProcedureTypeEnum = ENUMERATION OF\n\t(ADVICE_CAUTION\n\t,ADVICE_NOTE\n\t,ADVICE_WARNING\n\t,CALIBRATION\n\t,DIAGNOSTIC\n\t,SHUTDOWN\n\t,STARTUP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProfileTypeEnum = ENUMERATION OF\n\t(CURVE\n\t,AREA);\nEND_TYPE;\n\nTYPE IfcProjectOrderRecordTypeEnum = ENUMERATION OF\n\t(CHANGE\n\t,MAINTENANCE\n\t,MOVE\n\t,PURCHASE\n\t,WORK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProjectOrderTypeEnum = ENUMERATION OF\n\t(CHANGEORDER\n\t,MAINTENANCEWORKORDER\n\t,MOVEORDER\n\t,PURCHASEORDER\n\t,WORKORDER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProjectedOrTrueLengthEnum = ENUMERATION OF\n\t(PROJECTED_LENGTH\n\t,TRUE_LENGTH);\nEND_TYPE;\n\nTYPE IfcPropertySourceEnum = ENUMERATION OF\n\t(DESIGN\n\t,DESIGNMAXIMUM\n\t,DESIGNMINIMUM\n\t,SIMULATED\n\t,ASBUILT\n\t,COMMISSIONING\n\t,MEASURED\n\t,USERDEFINED\n\t,NOTKNOWN);\nEND_TYPE;\n\nTYPE IfcProtectiveDeviceTypeEnum = ENUMERATION OF\n\t(FUSEDISCONNECTOR\n\t,CIRCUITBREAKER\n\t,EARTHFAILUREDEVICE\n\t,RESIDUALCURRENTCIRCUITBREAKER\n\t,RESIDUALCURRENTSWITCH\n\t,VARISTOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPumpTypeEnum = ENUMERATION OF\n\t(CIRCULATOR\n\t,ENDSUCTION\n\t,SPLITCASE\n\t,VERTICALINLINE\n\t,VERTICALTURBINE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRailingTypeEnum = ENUMERATION OF\n\t(HANDRAIL\n\t,GUARDRAIL\n\t,BALUSTRADE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRampFlightTypeEnum = ENUMERATION OF\n\t(STRAIGHT\n\t,SPIRAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRampTypeEnum = ENUMERATION OF\n\t(STRAIGHT_RUN_RAMP\n\t,TWO_STRAIGHT_RUN_RAMP\n\t,QUARTER_TURN_RAMP\n\t,TWO_QUARTER_TURN_RAMP\n\t,HALF_TURN_RAMP\n\t,SPIRAL_RAMP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReflectanceMethodEnum = ENUMERATION OF\n\t(BLINN\n\t,FLAT\n\t,GLASS\n\t,MATT\n\t,METAL\n\t,MIRROR\n\t,PHONG\n\t,PLASTIC\n\t,STRAUSS\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReinforcingBarRoleEnum = ENUMERATION OF\n\t(MAIN\n\t,SHEAR\n\t,LIGATURE\n\t,STUD\n\t,PUNCHING\n\t,EDGE\n\t,RING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReinforcingBarSurfaceEnum = ENUMERATION OF\n\t(PLAIN\n\t,TEXTURED);\nEND_TYPE;\n\nTYPE IfcResourceConsumptionEnum = ENUMERATION OF\n\t(CONSUMED\n\t,PARTIALLYCONSUMED\n\t,NOTCONSUMED\n\t,OCCUPIED\n\t,PARTIALLYOCCUPIED\n\t,NOTOCCUPIED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRibPlateDirectionEnum = ENUMERATION OF\n\t(DIRECTION_X\n\t,DIRECTION_Y);\nEND_TYPE;\n\nTYPE IfcRoleEnum = ENUMERATION OF\n\t(SUPPLIER\n\t,MANUFACTURER\n\t,CONTRACTOR\n\t,SUBCONTRACTOR\n\t,ARCHITECT\n\t,STRUCTURALENGINEER\n\t,COSTENGINEER\n\t,CLIENT\n\t,BUILDINGOWNER\n\t,BUILDINGOPERATOR\n\t,MECHANICALENGINEER\n\t,ELECTRICALENGINEER\n\t,PROJECTMANAGER\n\t,FACILITIESMANAGER\n\t,CIVILENGINEER\n\t,COMISSIONINGENGINEER\n\t,ENGINEER\n\t,OWNER\n\t,CONSULTANT\n\t,CONSTRUCTIONMANAGER\n\t,FIELDCONSTRUCTIONMANAGER\n\t,RESELLER\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcRoofTypeEnum = ENUMERATION OF\n\t(FLAT_ROOF\n\t,SHED_ROOF\n\t,GABLE_ROOF\n\t,HIP_ROOF\n\t,HIPPED_GABLE_ROOF\n\t,GAMBREL_ROOF\n\t,MANSARD_ROOF\n\t,BARREL_ROOF\n\t,RAINBOW_ROOF\n\t,BUTTERFLY_ROOF\n\t,PAVILION_ROOF\n\t,DOME_ROOF\n\t,FREEFORM\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSIPrefix = ENUMERATION OF\n\t(EXA\n\t,PETA\n\t,TERA\n\t,GIGA\n\t,MEGA\n\t,KILO\n\t,HECTO\n\t,DECA\n\t,DECI\n\t,CENTI\n\t,MILLI\n\t,MICRO\n\t,NANO\n\t,PICO\n\t,FEMTO\n\t,ATTO);\nEND_TYPE;\n\nTYPE IfcSIUnitName = ENUMERATION OF\n\t(AMPERE\n\t,BECQUEREL\n\t,CANDELA\n\t,COULOMB\n\t,CUBIC_METRE\n\t,DEGREE_CELSIUS\n\t,FARAD\n\t,GRAM\n\t,GRAY\n\t,HENRY\n\t,HERTZ\n\t,JOULE\n\t,KELVIN\n\t,LUMEN\n\t,LUX\n\t,METRE\n\t,MOLE\n\t,NEWTON\n\t,OHM\n\t,PASCAL\n\t,RADIAN\n\t,SECOND\n\t,SIEMENS\n\t,SIEVERT\n\t,SQUARE_METRE\n\t,STERADIAN\n\t,TESLA\n\t,VOLT\n\t,WATT\n\t,WEBER);\nEND_TYPE;\n\nTYPE IfcSanitaryTerminalTypeEnum = ENUMERATION OF\n\t(BATH\n\t,BIDET\n\t,CISTERN\n\t,SHOWER\n\t,SINK\n\t,SANITARYFOUNTAIN\n\t,TOILETPAN\n\t,URINAL\n\t,WASHHANDBASIN\n\t,WCSEAT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSectionTypeEnum = ENUMERATION OF\n\t(UNIFORM\n\t,TAPERED);\nEND_TYPE;\n\nTYPE IfcSensorTypeEnum = ENUMERATION OF\n\t(CO2SENSOR\n\t,FIRESENSOR\n\t,FLOWSENSOR\n\t,GASSENSOR\n\t,HEATSENSOR\n\t,HUMIDITYSENSOR\n\t,LIGHTSENSOR\n\t,MOISTURESENSOR\n\t,MOVEMENTSENSOR\n\t,PRESSURESENSOR\n\t,SMOKESENSOR\n\t,SOUNDSENSOR\n\t,TEMPERATURESENSOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSequenceEnum = ENUMERATION OF\n\t(START_START\n\t,START_FINISH\n\t,FINISH_START\n\t,FINISH_FINISH\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcServiceLifeFactorTypeEnum = ENUMERATION OF\n\t(A_QUALITYOFCOMPONENTS\n\t,B_DESIGNLEVEL\n\t,C_WORKEXECUTIONLEVEL\n\t,D_INDOORENVIRONMENT\n\t,E_OUTDOORENVIRONMENT\n\t,F_INUSECONDITIONS\n\t,G_MAINTENANCELEVEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcServiceLifeTypeEnum = ENUMERATION OF\n\t(ACTUALSERVICELIFE\n\t,EXPECTEDSERVICELIFE\n\t,OPTIMISTICREFERENCESERVICELIFE\n\t,PESSIMISTICREFERENCESERVICELIFE\n\t,REFERENCESERVICELIFE);\nEND_TYPE;\n\nTYPE IfcSlabTypeEnum = ENUMERATION OF\n\t(FLOOR\n\t,ROOF\n\t,LANDING\n\t,BASESLAB\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSoundScaleEnum = ENUMERATION OF\n\t(DBA\n\t,DBB\n\t,DBC\n\t,NC\n\t,NR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSpaceHeaterTypeEnum = ENUMERATION OF\n\t(SECTIONALRADIATOR\n\t,PANELRADIATOR\n\t,TUBULARRADIATOR\n\t,CONVECTOR\n\t,BASEBOARDHEATER\n\t,FINNEDTUBEUNIT\n\t,UNITHEATER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSpaceTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStackTerminalTypeEnum = ENUMERATION OF\n\t(BIRDCAGE\n\t,COWL\n\t,RAINWATERHOPPER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStairFlightTypeEnum = ENUMERATION OF\n\t(STRAIGHT\n\t,WINDER\n\t,SPIRAL\n\t,CURVED\n\t,FREEFORM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStairTypeEnum = ENUMERATION OF\n\t(STRAIGHT_RUN_STAIR\n\t,TWO_STRAIGHT_RUN_STAIR\n\t,QUARTER_WINDING_STAIR\n\t,QUARTER_TURN_STAIR\n\t,HALF_WINDING_STAIR\n\t,HALF_TURN_STAIR\n\t,TWO_QUARTER_WINDING_STAIR\n\t,TWO_QUARTER_TURN_STAIR\n\t,THREE_QUARTER_WINDING_STAIR\n\t,THREE_QUARTER_TURN_STAIR\n\t,SPIRAL_STAIR\n\t,DOUBLE_RETURN_STAIR\n\t,CURVED_RUN_STAIR\n\t,TWO_CURVED_RUN_STAIR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStateEnum = ENUMERATION OF\n\t(READWRITE\n\t,READONLY\n\t,LOCKED\n\t,READWRITELOCKED\n\t,READONLYLOCKED);\nEND_TYPE;\n\nTYPE IfcStructuralCurveTypeEnum = ENUMERATION OF\n\t(RIGID_JOINED_MEMBER\n\t,PIN_JOINED_MEMBER\n\t,CABLE\n\t,TENSION_MEMBER\n\t,COMPRESSION_MEMBER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStructuralSurfaceTypeEnum = ENUMERATION OF\n\t(BENDING_ELEMENT\n\t,MEMBRANE_ELEMENT\n\t,SHELL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSurfaceSide = ENUMERATION OF\n\t(POSITIVE\n\t,NEGATIVE\n\t,BOTH);\nEND_TYPE;\n\nTYPE IfcSurfaceTextureEnum = ENUMERATION OF\n\t(BUMP\n\t,OPACITY\n\t,REFLECTION\n\t,SELFILLUMINATION\n\t,SHININESS\n\t,SPECULAR\n\t,TEXTURE\n\t,TRANSPARENCYMAP\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSwitchingDeviceTypeEnum = ENUMERATION OF\n\t(CONTACTOR\n\t,EMERGENCYSTOP\n\t,STARTER\n\t,SWITCHDISCONNECTOR\n\t,TOGGLESWITCH\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTankTypeEnum = ENUMERATION OF\n\t(PREFORMED\n\t,SECTIONAL\n\t,EXPANSION\n\t,PRESSUREVESSEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTendonTypeEnum = ENUMERATION OF\n\t(STRAND\n\t,WIRE\n\t,BAR\n\t,COATED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTextPath = ENUMERATION OF\n\t(LEFT\n\t,RIGHT\n\t,UP\n\t,DOWN);\nEND_TYPE;\n\nTYPE IfcThermalLoadSourceEnum = ENUMERATION OF\n\t(PEOPLE\n\t,LIGHTING\n\t,EQUIPMENT\n\t,VENTILATIONINDOORAIR\n\t,VENTILATIONOUTSIDEAIR\n\t,RECIRCULATEDAIR\n\t,EXHAUSTAIR\n\t,AIREXCHANGERATE\n\t,DRYBULBTEMPERATURE\n\t,RELATIVEHUMIDITY\n\t,INFILTRATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcThermalLoadTypeEnum = ENUMERATION OF\n\t(SENSIBLE\n\t,LATENT\n\t,RADIANT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTimeSeriesDataTypeEnum = ENUMERATION OF\n\t(CONTINUOUS\n\t,DISCRETE\n\t,DISCRETEBINARY\n\t,PIECEWISEBINARY\n\t,PIECEWISECONSTANT\n\t,PIECEWISECONTINUOUS\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTimeSeriesScheduleTypeEnum = ENUMERATION OF\n\t(ANNUAL\n\t,MONTHLY\n\t,WEEKLY\n\t,DAILY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTransformerTypeEnum = ENUMERATION OF\n\t(CURRENT\n\t,FREQUENCY\n\t,VOLTAGE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTransitionCode = ENUMERATION OF\n\t(DISCONTINUOUS\n\t,CONTINUOUS\n\t,CONTSAMEGRADIENT\n\t,CONTSAMEGRADIENTSAMECURVATURE);\nEND_TYPE;\n\nTYPE IfcTransportElementTypeEnum = ENUMERATION OF\n\t(ELEVATOR\n\t,ESCALATOR\n\t,MOVINGWALKWAY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTrimmingPreference = ENUMERATION OF\n\t(CARTESIAN\n\t,PARAMETER\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcTubeBundleTypeEnum = ENUMERATION OF\n\t(FINNED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcUnitEnum = ENUMERATION OF\n\t(ABSORBEDDOSEUNIT\n\t,AMOUNTOFSUBSTANCEUNIT\n\t,AREAUNIT\n\t,DOSEEQUIVALENTUNIT\n\t,ELECTRICCAPACITANCEUNIT\n\t,ELECTRICCHARGEUNIT\n\t,ELECTRICCONDUCTANCEUNIT\n\t,ELECTRICCURRENTUNIT\n\t,ELECTRICRESISTANCEUNIT\n\t,ELECTRICVOLTAGEUNIT\n\t,ENERGYUNIT\n\t,FORCEUNIT\n\t,FREQUENCYUNIT\n\t,ILLUMINANCEUNIT\n\t,INDUCTANCEUNIT\n\t,LENGTHUNIT\n\t,LUMINOUSFLUXUNIT\n\t,LUMINOUSINTENSITYUNIT\n\t,MAGNETICFLUXDENSITYUNIT\n\t,MAGNETICFLUXUNIT\n\t,MASSUNIT\n\t,PLANEANGLEUNIT\n\t,POWERUNIT\n\t,PRESSUREUNIT\n\t,RADIOACTIVITYUNIT\n\t,SOLIDANGLEUNIT\n\t,THERMODYNAMICTEMPERATUREUNIT\n\t,TIMEUNIT\n\t,VOLUMEUNIT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcUnitaryEquipmentTypeEnum = ENUMERATION OF\n\t(AIRHANDLER\n\t,AIRCONDITIONINGUNIT\n\t,SPLITSYSTEM\n\t,ROOFTOPUNIT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcValveTypeEnum = ENUMERATION OF\n\t(AIRRELEASE\n\t,ANTIVACUUM\n\t,CHANGEOVER\n\t,CHECK\n\t,COMMISSIONING\n\t,DIVERTING\n\t,DRAWOFFCOCK\n\t,DOUBLECHECK\n\t,DOUBLEREGULATING\n\t,FAUCET\n\t,FLUSHING\n\t,GASCOCK\n\t,GASTAP\n\t,ISOLATING\n\t,MIXING\n\t,PRESSUREREDUCING\n\t,PRESSURERELIEF\n\t,REGULATING\n\t,SAFETYCUTOFF\n\t,STEAMTRAP\n\t,STOPCOCK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcVibrationIsolatorTypeEnum = ENUMERATION OF\n\t(COMPRESSION\n\t,SPRING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWallTypeEnum = ENUMERATION OF\n\t(STANDARD\n\t,POLYGONAL\n\t,SHEAR\n\t,ELEMENTEDWALL\n\t,PLUMBINGWALL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWasteTerminalTypeEnum = ENUMERATION OF\n\t(FLOORTRAP\n\t,FLOORWASTE\n\t,GULLYSUMP\n\t,GULLYTRAP\n\t,GREASEINTERCEPTOR\n\t,OILINTERCEPTOR\n\t,PETROLINTERCEPTOR\n\t,ROOFDRAIN\n\t,WASTEDISPOSALUNIT\n\t,WASTETRAP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowPanelOperationEnum = ENUMERATION OF\n\t(SIDEHUNGRIGHTHAND\n\t,SIDEHUNGLEFTHAND\n\t,TILTANDTURNRIGHTHAND\n\t,TILTANDTURNLEFTHAND\n\t,TOPHUNG\n\t,BOTTOMHUNG\n\t,PIVOTHORIZONTAL\n\t,PIVOTVERTICAL\n\t,SLIDINGHORIZONTAL\n\t,SLIDINGVERTICAL\n\t,REMOVABLECASEMENT\n\t,FIXEDCASEMENT\n\t,OTHEROPERATION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowPanelPositionEnum = ENUMERATION OF\n\t(LEFT\n\t,MIDDLE\n\t,RIGHT\n\t,BOTTOM\n\t,TOP\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowStyleConstructionEnum = ENUMERATION OF\n\t(ALUMINIUM\n\t,HIGH_GRADE_STEEL\n\t,STEEL\n\t,WOOD\n\t,ALUMINIUM_WOOD\n\t,PLASTIC\n\t,OTHER_CONSTRUCTION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowStyleOperationEnum = ENUMERATION OF\n\t(SINGLE_PANEL\n\t,DOUBLE_PANEL_VERTICAL\n\t,DOUBLE_PANEL_HORIZONTAL\n\t,TRIPLE_PANEL_VERTICAL\n\t,TRIPLE_PANEL_BOTTOM\n\t,TRIPLE_PANEL_TOP\n\t,TRIPLE_PANEL_LEFT\n\t,TRIPLE_PANEL_RIGHT\n\t,TRIPLE_PANEL_HORIZONTAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWorkControlTypeEnum = ENUMERATION OF\n\t(ACTUAL\n\t,BASELINE\n\t,PLANNED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActorSelect = SELECT\n\t(IfcOrganization\n\t,IfcPerson\n\t,IfcPersonAndOrganization);\nEND_TYPE;\n\nTYPE IfcAppliedValueSelect = SELECT\n\t(IfcRatioMeasure\n\t,IfcMeasureWithUnit\n\t,IfcMonetaryMeasure);\nEND_TYPE;\n\nTYPE IfcAxis2Placement = SELECT\n\t(IfcAxis2Placement2D\n\t,IfcAxis2Placement3D);\nEND_TYPE;\n\nTYPE IfcBooleanOperand = SELECT\n\t(IfcSolidModel\n\t,IfcHalfSpaceSolid\n\t,IfcBooleanResult\n\t,IfcCsgPrimitive3D);\nEND_TYPE;\n\nTYPE IfcCharacterStyleSelect = SELECT\n\t(IfcTextStyleForDefinedFont);\nEND_TYPE;\n\nTYPE IfcClassificationNotationSelect = SELECT\n\t(IfcClassificationNotation\n\t,IfcClassificationReference);\nEND_TYPE;\n\nTYPE IfcColour = SELECT\n\t(IfcColourSpecification\n\t,IfcPreDefinedColour);\nEND_TYPE;\n\nTYPE IfcColourOrFactor = SELECT\n\t(IfcColourRgb\n\t,IfcNormalisedRatioMeasure);\nEND_TYPE;\n\nTYPE IfcConditionCriterionSelect = SELECT\n\t(IfcLabel\n\t,IfcMeasureWithUnit);\nEND_TYPE;\n\nTYPE IfcCsgSelect = SELECT\n\t(IfcBooleanResult\n\t,IfcCsgPrimitive3D);\nEND_TYPE;\n\nTYPE IfcCurveFontOrScaledCurveFontSelect = SELECT\n\t(IfcCurveStyleFontSelect\n\t,IfcCurveStyleFontAndScaling);\nEND_TYPE;\n\nTYPE IfcCurveOrEdgeCurve = SELECT\n\t(IfcBoundedCurve\n\t,IfcEdgeCurve);\nEND_TYPE;\n\nTYPE IfcCurveStyleFontSelect = SELECT\n\t(IfcPreDefinedCurveFont\n\t,IfcCurveStyleFont);\nEND_TYPE;\n\nTYPE IfcDateTimeSelect = SELECT\n\t(IfcCalendarDate\n\t,IfcLocalTime\n\t,IfcDateAndTime);\nEND_TYPE;\n\nTYPE IfcDefinedSymbolSelect = SELECT\n\t(IfcPreDefinedSymbol\n\t,IfcExternallyDefinedSymbol);\nEND_TYPE;\n\nTYPE IfcDerivedMeasureValue = SELECT\n\t(IfcVolumetricFlowRateMeasure\n\t,IfcTimeStamp\n\t,IfcThermalTransmittanceMeasure\n\t,IfcThermalResistanceMeasure\n\t,IfcThermalAdmittanceMeasure\n\t,IfcPressureMeasure\n\t,IfcPowerMeasure\n\t,IfcMassFlowRateMeasure\n\t,IfcMassDensityMeasure\n\t,IfcLinearVelocityMeasure\n\t,IfcKinematicViscosityMeasure\n\t,IfcIntegerCountRateMeasure\n\t,IfcHeatFluxDensityMeasure\n\t,IfcFrequencyMeasure\n\t,IfcEnergyMeasure\n\t,IfcElectricVoltageMeasure\n\t,IfcDynamicViscosityMeasure\n\t,IfcCompoundPlaneAngleMeasure\n\t,IfcAngularVelocityMeasure\n\t,IfcThermalConductivityMeasure\n\t,IfcMolecularWeightMeasure\n\t,IfcVaporPermeabilityMeasure\n\t,IfcMoistureDiffusivityMeasure\n\t,IfcIsothermalMoistureCapacityMeasure\n\t,IfcSpecificHeatCapacityMeasure\n\t,IfcMonetaryMeasure\n\t,IfcMagneticFluxDensityMeasure\n\t,IfcMagneticFluxMeasure\n\t,IfcLuminousFluxMeasure\n\t,IfcForceMeasure\n\t,IfcInductanceMeasure\n\t,IfcIlluminanceMeasure\n\t,IfcElectricResistanceMeasure\n\t,IfcElectricConductanceMeasure\n\t,IfcElectricChargeMeasure\n\t,IfcDoseEquivalentMeasure\n\t,IfcElectricCapacitanceMeasure\n\t,IfcAbsorbedDoseMeasure\n\t,IfcRadioActivityMeasure\n\t,IfcRotationalFrequencyMeasure\n\t,IfcTorqueMeasure\n\t,IfcAccelerationMeasure\n\t,IfcLinearForceMeasure\n\t,IfcLinearStiffnessMeasure\n\t,IfcModulusOfSubgradeReactionMeasure\n\t,IfcModulusOfElasticityMeasure\n\t,IfcMomentOfInertiaMeasure\n\t,IfcPlanarForceMeasure\n\t,IfcRotationalStiffnessMeasure\n\t,IfcShearModulusMeasure\n\t,IfcLinearMomentMeasure\n\t,IfcLuminousIntensityDistributionMeasure\n\t,IfcCurvatureMeasure\n\t,IfcMassPerLengthMeasure\n\t,IfcModulusOfLinearSubgradeReactionMeasure\n\t,IfcModulusOfRotationalSubgradeReactionMeasure\n\t,IfcRotationalMassMeasure\n\t,IfcSectionalAreaIntegralMeasure\n\t,IfcSectionModulusMeasure\n\t,IfcTemperatureGradientMeasure\n\t,IfcThermalExpansionCoefficientMeasure\n\t,IfcWarpingConstantMeasure\n\t,IfcWarpingMomentMeasure\n\t,IfcSoundPowerMeasure\n\t,IfcSoundPressureMeasure\n\t,IfcHeatingValueMeasure\n\t,IfcPHMeasure\n\t,IfcIonConcentrationMeasure);\nEND_TYPE;\n\nTYPE IfcDocumentSelect = SELECT\n\t(IfcDocumentReference\n\t,IfcDocumentInformation);\nEND_TYPE;\n\nTYPE IfcDraughtingCalloutElement = SELECT\n\t(IfcAnnotationCurveOccurrence\n\t,IfcAnnotationTextOccurrence\n\t,IfcAnnotationSymbolOccurrence);\nEND_TYPE;\n\nTYPE IfcFillAreaStyleTileShapeSelect = SELECT\n\t(IfcFillAreaStyleTileSymbolWithStyle);\nEND_TYPE;\n\nTYPE IfcFillStyleSelect = SELECT\n\t(IfcFillAreaStyleHatching\n\t,IfcFillAreaStyleTiles\n\t,IfcColour\n\t,IfcExternallyDefinedHatchStyle);\nEND_TYPE;\n\nTYPE IfcGeometricSetSelect = SELECT\n\t(IfcPoint\n\t,IfcCurve\n\t,IfcSurface);\nEND_TYPE;\n\nTYPE IfcHatchLineDistanceSelect = SELECT\n\t(IfcOneDirectionRepeatFactor\n\t,IfcPositiveLengthMeasure);\nEND_TYPE;\n\nTYPE IfcLayeredItem = SELECT\n\t(IfcRepresentationItem\n\t,IfcRepresentation);\nEND_TYPE;\n\nTYPE IfcLibrarySelect = SELECT\n\t(IfcLibraryReference\n\t,IfcLibraryInformation);\nEND_TYPE;\n\nTYPE IfcLightDistributionDataSourceSelect = SELECT\n\t(IfcExternalReference\n\t,IfcLightIntensityDistribution);\nEND_TYPE;\n\nTYPE IfcMaterialSelect = SELECT\n\t(IfcMaterial\n\t,IfcMaterialList\n\t,IfcMaterialLayerSetUsage\n\t,IfcMaterialLayerSet\n\t,IfcMaterialLayer);\nEND_TYPE;\n\nTYPE IfcMeasureValue = SELECT\n\t(IfcVolumeMeasure\n\t,IfcTimeMeasure\n\t,IfcThermodynamicTemperatureMeasure\n\t,IfcSolidAngleMeasure\n\t,IfcPositiveRatioMeasure\n\t,IfcRatioMeasure\n\t,IfcPositivePlaneAngleMeasure\n\t,IfcPlaneAngleMeasure\n\t,IfcParameterValue\n\t,IfcNumericMeasure\n\t,IfcMassMeasure\n\t,IfcPositiveLengthMeasure\n\t,IfcLengthMeasure\n\t,IfcElectricCurrentMeasure\n\t,IfcDescriptiveMeasure\n\t,IfcCountMeasure\n\t,IfcContextDependentMeasure\n\t,IfcAreaMeasure\n\t,IfcAmountOfSubstanceMeasure\n\t,IfcLuminousIntensityMeasure\n\t,IfcNormalisedRatioMeasure\n\t,IfcComplexNumber);\nEND_TYPE;\n\nTYPE IfcMetricValueSelect = SELECT\n\t(IfcDateTimeSelect\n\t,IfcMeasureWithUnit\n\t,IfcTable\n\t,IfcText\n\t,IfcTimeSeries\n\t,IfcCostValue);\nEND_TYPE;\n\nTYPE IfcObjectReferenceSelect = SELECT\n\t(IfcMaterial\n\t,IfcPerson\n\t,IfcDateAndTime\n\t,IfcMaterialList\n\t,IfcOrganization\n\t,IfcCalendarDate\n\t,IfcLocalTime\n\t,IfcPersonAndOrganization\n\t,IfcMaterialLayer\n\t,IfcExternalReference\n\t,IfcTimeSeries\n\t,IfcAddress\n\t,IfcAppliedValue);\nEND_TYPE;\n\nTYPE IfcOrientationSelect = SELECT\n\t(IfcPlaneAngleMeasure\n\t,IfcDirection);\nEND_TYPE;\n\nTYPE IfcPointOrVertexPoint = SELECT\n\t(IfcPoint\n\t,IfcVertexPoint);\nEND_TYPE;\n\nTYPE IfcPresentationStyleSelect = SELECT\n\t(IfcNullStyle\n\t,IfcCurveStyle\n\t,IfcSymbolStyle\n\t,IfcFillAreaStyle\n\t,IfcTextStyle\n\t,IfcSurfaceStyle);\nEND_TYPE;\n\nTYPE IfcShell = SELECT\n\t(IfcClosedShell\n\t,IfcOpenShell);\nEND_TYPE;\n\nTYPE IfcSimpleValue = SELECT\n\t(IfcInteger\n\t,IfcReal\n\t,IfcBoolean\n\t,IfcIdentifier\n\t,IfcText\n\t,IfcLabel\n\t,IfcLogical);\nEND_TYPE;\n\nTYPE IfcSizeSelect = SELECT\n\t(IfcRatioMeasure\n\t,IfcLengthMeasure\n\t,IfcDescriptiveMeasure\n\t,IfcPositiveLengthMeasure\n\t,IfcNormalisedRatioMeasure\n\t,IfcPositiveRatioMeasure);\nEND_TYPE;\n\nTYPE IfcSpecularHighlightSelect = SELECT\n\t(IfcSpecularExponent\n\t,IfcSpecularRoughness);\nEND_TYPE;\n\nTYPE IfcStructuralActivityAssignmentSelect = SELECT\n\t(IfcStructuralItem\n\t,IfcElement);\nEND_TYPE;\n\nTYPE IfcSurfaceOrFaceSurface = SELECT\n\t(IfcSurface\n\t,IfcFaceSurface\n\t,IfcFaceBasedSurfaceModel);\nEND_TYPE;\n\nTYPE IfcSurfaceStyleElementSelect = SELECT\n\t(IfcSurfaceStyleShading\n\t,IfcSurfaceStyleLighting\n\t,IfcSurfaceStyleWithTextures\n\t,IfcExternallyDefinedSurfaceStyle\n\t,IfcSurfaceStyleRefraction);\nEND_TYPE;\n\nTYPE IfcSymbolStyleSelect = SELECT\n\t(IfcColour);\nEND_TYPE;\n\nTYPE IfcTextFontSelect = SELECT\n\t(IfcPreDefinedTextFont\n\t,IfcExternallyDefinedTextFont);\nEND_TYPE;\n\nTYPE IfcTextStyleSelect = SELECT\n\t(IfcTextStyleWithBoxCharacteristics\n\t,IfcTextStyleTextModel);\nEND_TYPE;\n\nTYPE IfcTrimmingSelect = SELECT\n\t(IfcCartesianPoint\n\t,IfcParameterValue);\nEND_TYPE;\n\nTYPE IfcUnit = SELECT\n\t(IfcDerivedUnit\n\t,IfcNamedUnit\n\t,IfcMonetaryUnit);\nEND_TYPE;\n\nTYPE IfcValue = SELECT\n\t(IfcMeasureValue\n\t,IfcSimpleValue\n\t,IfcDerivedMeasureValue);\nEND_TYPE;\n\nTYPE IfcVectorOrDirection = SELECT\n\t(IfcDirection\n\t,IfcVector);\nEND_TYPE;\n\nENTITY Ifc2DCompositeCurve\n SUBTYPE OF (IfcCompositeCurve);\n WHERE\n\tWR1 : SELF\\IfcCompositeCurve.ClosedCurve;\n\tWR2 : SELF\\IfcCurve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcActionRequest\n SUBTYPE OF (IfcControl);\n\tRequestID : IfcIdentifier;\n UNIQUE\n\tUR2 : RequestID;\nEND_ENTITY;\n\nENTITY IfcActor\n SUPERTYPE OF (ONEOF\n\t(IfcOccupant))\n SUBTYPE OF (IfcObject);\n\tTheActor : IfcActorSelect;\n INVERSE\n\tIsActingUpon : SET [0:?] OF IfcRelAssignsToActor FOR RelatingActor;\nEND_ENTITY;\n\nENTITY IfcActorRole;\n\tRole : IfcRoleEnum;\n\tUserDefinedRole : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n WHERE\n\tWR1 : (Role <> IfcRoleEnum.USERDEFINED) OR\n            ((Role = IfcRoleEnum.USERDEFINED) AND\n              EXISTS(SELF.UserDefinedRole));\nEND_ENTITY;\n\nENTITY IfcActuatorType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcActuatorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcAddress\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPostalAddress\n\t,IfcTelecomAddress));\n\tPurpose : OPTIONAL IfcAddressTypeEnum;\n\tDescription : OPTIONAL IfcText;\n\tUserDefinedPurpose : OPTIONAL IfcLabel;\n INVERSE\n\tOfPerson : SET [0:?] OF IfcPerson FOR Addresses;\n\tOfOrganization : SET [0:?] OF IfcOrganization FOR Addresses;\n WHERE\n\tWR1 : (NOT(EXISTS(Purpose))) OR\n            ((Purpose <> IfcAddressTypeEnum.USERDEFINED) OR\n            ((Purpose = IfcAddressTypeEnum.USERDEFINED) AND\n              EXISTS(SELF.UserDefinedPurpose)));\nEND_ENTITY;\n\nENTITY IfcAirTerminalBoxType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcAirTerminalBoxTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcAirTerminalBoxTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcAirTerminalBoxTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAirTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcAirTerminalTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcAirTerminalTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcAirTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAirToAirHeatRecoveryType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcAirToAirHeatRecoveryTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAlarmType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcAlarmTypeEnum;\nEND_ENTITY;\n\nENTITY IfcAngularDimension\n SUBTYPE OF (IfcDimensionCurveDirectedCallout);\nEND_ENTITY;\n\nENTITY IfcAnnotation\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\nEND_ENTITY;\n\nENTITY IfcAnnotationCurveOccurrence\n SUPERTYPE OF (ONEOF\n\t(IfcDimensionCurve\n\t,IfcProjectionCurve))\n SUBTYPE OF (IfcAnnotationOccurrence);\n WHERE\n\tWR31 : NOT(EXISTS(SELF\\IfcStyledItem.Item)) OR\n             ('IFC2X3.IFCCURVE' IN TYPEOF (SELF\\IfcStyledItem.Item));\nEND_ENTITY;\n\nENTITY IfcAnnotationFillArea\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOuterBoundary : IfcCurve;\n\tInnerBoundaries : OPTIONAL SET [1:?] OF IfcCurve;\nEND_ENTITY;\n\nENTITY IfcAnnotationFillAreaOccurrence\n SUBTYPE OF (IfcAnnotationOccurrence);\n\tFillStyleTarget : OPTIONAL IfcPoint;\n\tGlobalOrLocal : OPTIONAL IfcGlobalOrLocalEnum;\n WHERE\n\tWR31 : NOT(EXISTS(SELF\\IfcStyledItem.Item)) OR\n             ('IFC2X3.IFCANNOTATIONFILLAREA' IN TYPEOF (SELF\\IfcStyledItem.Item));\nEND_ENTITY;\n\nENTITY IfcAnnotationOccurrence\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAnnotationCurveOccurrence\n\t,IfcAnnotationFillAreaOccurrence\n\t,IfcAnnotationSurfaceOccurrence\n\t,IfcAnnotationSymbolOccurrence\n\t,IfcAnnotationTextOccurrence))\n SUBTYPE OF (IfcStyledItem);\nEND_ENTITY;\n\nENTITY IfcAnnotationSurface\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tItem : IfcGeometricRepresentationItem;\n\tTextureCoordinates : OPTIONAL IfcTextureCoordinate;\n WHERE\n\tWR01 : SIZEOF([\n               'IFC2X3.IFCSURFACE',\n               'IFC2X3.IFCSHELLBASEDSURFACEMODEL',\n               'IFC2X3.IFCFACEBASEDSURFACEMODEL',\n               'IFC2X3.IFCSOLIDMODEL',\n               'IFC2X3.IFCBOOLEANRESULT',\n               'IFC2X3.IFCCSGPRIMITIVE3D'] \n              * TYPEOF(Item)\n               ) >= 1;\nEND_ENTITY;\n\nENTITY IfcAnnotationSurfaceOccurrence\n SUBTYPE OF (IfcAnnotationOccurrence);\n WHERE\n\tWR31 : NOT(EXISTS(SELF\\IfcStyledItem.Item)) OR \n             (SIZEOF(\n              ['IFC2X3.IFCSURFACE',\n               'IFC2X3.IFCFACEBASEDSURFACEMODEL',\n               'IFC2X3.IFCSHELLBASEDSURFACEMODEL',\n               'IFC2X3.IFCSOLIDMODEL'] *\n              TYPEOF(SELF\\IfcStyledItem.Item)) > 0);\nEND_ENTITY;\n\nENTITY IfcAnnotationSymbolOccurrence\n SUPERTYPE OF (ONEOF\n\t(IfcTerminatorSymbol))\n SUBTYPE OF (IfcAnnotationOccurrence);\n WHERE\n\tWR31 : NOT(EXISTS(SELF\\IfcStyledItem.Item)) OR\n             ('IFC2X3.IFCDEFINEDSYMBOL' IN TYPEOF (SELF\\IfcStyledItem.Item));\nEND_ENTITY;\n\nENTITY IfcAnnotationTextOccurrence\n SUBTYPE OF (IfcAnnotationOccurrence);\n WHERE\n\tWR31 : NOT(EXISTS(SELF\\IfcStyledItem.Item)) OR\n             ('IFC2X3.IFCTEXTLITERAL' IN TYPEOF (SELF\\IfcStyledItem.Item));\nEND_ENTITY;\n\nENTITY IfcApplication;\n\tApplicationDeveloper : IfcOrganization;\n\tVersion : IfcLabel;\n\tApplicationFullName : IfcLabel;\n\tApplicationIdentifier : IfcIdentifier;\n UNIQUE\n\tUR1 : ApplicationIdentifier;\n\tUR2 : ApplicationFullName, Version;\nEND_ENTITY;\n\nENTITY IfcAppliedValue\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCostValue\n\t,IfcEnvironmentalImpactValue));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tAppliedValue : OPTIONAL IfcAppliedValueSelect;\n\tUnitBasis : OPTIONAL IfcMeasureWithUnit;\n\tApplicableDate : OPTIONAL IfcDateTimeSelect;\n\tFixedUntilDate : OPTIONAL IfcDateTimeSelect;\n INVERSE\n\tValuesReferenced : SET [0:?] OF IfcReferencesValueDocument FOR ReferencingValues;\n\tValueOfComponents : SET [0:?] OF IfcAppliedValueRelationship FOR ComponentOfTotal;\n\tIsComponentIn : SET [0:?] OF IfcAppliedValueRelationship FOR Components;\n WHERE\n\tWR1 : EXISTS (AppliedValue) OR \n            EXISTS (ValueOfComponents);\nEND_ENTITY;\n\nENTITY IfcAppliedValueRelationship;\n\tComponentOfTotal : IfcAppliedValue;\n\tComponents : SET [1:?] OF IfcAppliedValue;\n\tArithmeticOperator : IfcArithmeticOperatorEnum;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcApproval;\n\tDescription : OPTIONAL IfcText;\n\tApprovalDateTime : IfcDateTimeSelect;\n\tApprovalStatus : OPTIONAL IfcLabel;\n\tApprovalLevel : OPTIONAL IfcLabel;\n\tApprovalQualifier : OPTIONAL IfcText;\n\tName : IfcLabel;\n\tIdentifier : IfcIdentifier;\n INVERSE\n\tActors : SET [0:?] OF IfcApprovalActorRelationship FOR Approval;\n\tIsRelatedWith : SET [0:?] OF IfcApprovalRelationship FOR RelatedApproval;\n\tRelates : SET [0:?] OF IfcApprovalRelationship FOR RelatingApproval;\nEND_ENTITY;\n\nENTITY IfcApprovalActorRelationship;\n\tActor : IfcActorSelect;\n\tApproval : IfcApproval;\n\tRole : IfcActorRole;\nEND_ENTITY;\n\nENTITY IfcApprovalPropertyRelationship;\n\tApprovedProperties : SET [1:?] OF IfcProperty;\n\tApproval : IfcApproval;\nEND_ENTITY;\n\nENTITY IfcApprovalRelationship;\n\tRelatedApproval : IfcApproval;\n\tRelatingApproval : IfcApproval;\n\tDescription : OPTIONAL IfcText;\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcArbitraryClosedProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcArbitraryProfileDefWithVoids))\n SUBTYPE OF (IfcProfileDef);\n\tOuterCurve : IfcCurve;\n WHERE\n\tWR1 : OuterCurve.Dim = 2;\n\tWR2 : NOT('IFC2X3.IFCLINE' IN TYPEOF(OuterCurve));\n\tWR3 : NOT('IFC2X3.IFCOFFSETCURVE2D' IN TYPEOF(OuterCurve));\nEND_ENTITY;\n\nENTITY IfcArbitraryOpenProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcCenterLineProfileDef))\n SUBTYPE OF (IfcProfileDef);\n\tCurve : IfcBoundedCurve;\n WHERE\n\tWR11 : ('IFC2X3.IFCCENTERLINEPROFILEDEF' IN TYPEOF(SELF)) OR \n              (SELF\\IfcProfileDef.ProfileType = IfcProfileTypeEnum.CURVE);\n\tWR12 : Curve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcArbitraryProfileDefWithVoids\n SUBTYPE OF (IfcArbitraryClosedProfileDef);\n\tInnerCurves : SET [1:?] OF IfcCurve;\n WHERE\n\tWR1 : SELF\\IfcProfileDef.ProfileType = AREA;\n\tWR2 : SIZEOF(QUERY(temp <* InnerCurves | temp.Dim <> 2)) = 0;\n\tWR3 : SIZEOF(QUERY(temp <* InnerCurves | 'IFC2X3.IFCLINE' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcAsset\n SUBTYPE OF (IfcGroup);\n\tAssetID : IfcIdentifier;\n\tOriginalValue : IfcCostValue;\n\tCurrentValue : IfcCostValue;\n\tTotalReplacementCost : IfcCostValue;\n\tOwner : IfcActorSelect;\n\tUser : IfcActorSelect;\n\tResponsiblePerson : IfcPerson;\n\tIncorporationDate : IfcCalendarDate;\n\tDepreciatedValue : IfcCostValue;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcGroup.IsGroupedBy.RelatedObjects | NOT('IFC2X3.IFCELEMENT' IN TYPEOF(Temp)))) = 0;\nEND_ENTITY;\n\nENTITY IfcAsymmetricIShapeProfileDef\n SUBTYPE OF (IfcIShapeProfileDef);\n\tTopFlangeWidth : IfcPositiveLengthMeasure;\n\tTopFlangeThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTopFlangeFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tCentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcAxis1Placement\n SUBTYPE OF (IfcPlacement);\n\tAxis : OPTIONAL IfcDirection;\n DERIVE\n\tZ : IfcDirection := NVL (IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n WHERE\n\tWR1 : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);\n\tWR2 : SELF\\IfcPlacement.Location.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcAxis2Placement2D\n SUBTYPE OF (IfcPlacement);\n\tRefDirection : OPTIONAL IfcDirection;\n DERIVE\n\tP : LIST [2:2] OF IfcDirection := IfcBuild2Axes(RefDirection);\n WHERE\n\tWR1 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 2);\n\tWR2 : SELF\\IfcPlacement.Location.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcAxis2Placement3D\n SUBTYPE OF (IfcPlacement);\n\tAxis : OPTIONAL IfcDirection;\n\tRefDirection : OPTIONAL IfcDirection;\n DERIVE\n\tP : LIST [3:3] OF IfcDirection := IfcBuildAxes(Axis, RefDirection);\n WHERE\n\tWR1 : SELF\\IfcPlacement.Location.Dim = 3;\n\tWR2 : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);\n\tWR3 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 3);\n\tWR4 : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0);\n\tWR5 : NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection)));\nEND_ENTITY;\n\nENTITY IfcBSplineCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBezierCurve))\n SUBTYPE OF (IfcBoundedCurve);\n\tDegree : INTEGER;\n\tControlPointsList : LIST [2:?] OF IfcCartesianPoint;\n\tCurveForm : IfcBSplineCurveForm;\n\tClosedCurve : LOGICAL;\n\tSelfIntersect : LOGICAL;\n DERIVE\n\tControlPoints : ARRAY [0:255] OF IfcCartesianPoint := IfcListToArray(ControlPointsList,0,UpperIndexOnControlPoints);\n\tUpperIndexOnControlPoints : INTEGER := (SIZEOF(ControlPointsList) - 1);\n WHERE\n\tWR41 : SIZEOF(QUERY(Temp <* ControlPointsList |\n               Temp.Dim <> ControlPointsList[1].Dim))\n             = 0;\nEND_ENTITY;\n\nENTITY IfcBeam\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcBeamType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcBeamTypeEnum;\nEND_ENTITY;\n\nENTITY IfcBezierCurve\n SUPERTYPE OF (ONEOF\n\t(IfcRationalBezierCurve))\n SUBTYPE OF (IfcBSplineCurve);\nEND_ENTITY;\n\nENTITY IfcBlobTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tRasterFormat : IfcIdentifier;\n\tRasterCode : BOOLEAN;\n WHERE\n\tWR11 : SELF.RasterFormat IN ['BMP', 'JPG', 'GIF', 'PNG'];\nEND_ENTITY;\n\nENTITY IfcBlock\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tXLength : IfcPositiveLengthMeasure;\n\tYLength : IfcPositiveLengthMeasure;\n\tZLength : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcBoilerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcBoilerTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcBoilerTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcBoilerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcBooleanClippingResult\n SUBTYPE OF (IfcBooleanResult);\n WHERE\n\tWR1 : ('IFC2X3.IFCSWEPTAREASOLID' IN TYPEOF(FirstOperand)) OR ('IFC2X3.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(FirstOperand));\n\tWR2 : ('IFC2X3.IFCHALFSPACESOLID' IN TYPEOF(SecondOperand));\n\tWR3 : Operator = DIFFERENCE;\nEND_ENTITY;\n\nENTITY IfcBooleanResult\n SUPERTYPE OF (ONEOF\n\t(IfcBooleanClippingResult))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOperator : IfcBooleanOperator;\n\tFirstOperand : IfcBooleanOperand;\n\tSecondOperand : IfcBooleanOperand;\n DERIVE\n\tDim : IfcDimensionCount := FirstOperand.Dim;\n WHERE\n\tWR1 : FirstOperand.Dim = SecondOperand.Dim;\nEND_ENTITY;\n\nENTITY IfcBoundaryCondition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBoundaryEdgeCondition\n\t,IfcBoundaryFaceCondition\n\t,IfcBoundaryNodeCondition));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcBoundaryEdgeCondition\n SUBTYPE OF (IfcBoundaryCondition);\n\tLinearStiffnessByLengthX : OPTIONAL IfcModulusOfLinearSubgradeReactionMeasure;\n\tLinearStiffnessByLengthY : OPTIONAL IfcModulusOfLinearSubgradeReactionMeasure;\n\tLinearStiffnessByLengthZ : OPTIONAL IfcModulusOfLinearSubgradeReactionMeasure;\n\tRotationalStiffnessByLengthX : OPTIONAL IfcModulusOfRotationalSubgradeReactionMeasure;\n\tRotationalStiffnessByLengthY : OPTIONAL IfcModulusOfRotationalSubgradeReactionMeasure;\n\tRotationalStiffnessByLengthZ : OPTIONAL IfcModulusOfRotationalSubgradeReactionMeasure;\nEND_ENTITY;\n\nENTITY IfcBoundaryFaceCondition\n SUBTYPE OF (IfcBoundaryCondition);\n\tLinearStiffnessByAreaX : OPTIONAL IfcModulusOfSubgradeReactionMeasure;\n\tLinearStiffnessByAreaY : OPTIONAL IfcModulusOfSubgradeReactionMeasure;\n\tLinearStiffnessByAreaZ : OPTIONAL IfcModulusOfSubgradeReactionMeasure;\nEND_ENTITY;\n\nENTITY IfcBoundaryNodeCondition\n SUPERTYPE OF (ONEOF\n\t(IfcBoundaryNodeConditionWarping))\n SUBTYPE OF (IfcBoundaryCondition);\n\tLinearStiffnessX : OPTIONAL IfcLinearStiffnessMeasure;\n\tLinearStiffnessY : OPTIONAL IfcLinearStiffnessMeasure;\n\tLinearStiffnessZ : OPTIONAL IfcLinearStiffnessMeasure;\n\tRotationalStiffnessX : OPTIONAL IfcRotationalStiffnessMeasure;\n\tRotationalStiffnessY : OPTIONAL IfcRotationalStiffnessMeasure;\n\tRotationalStiffnessZ : OPTIONAL IfcRotationalStiffnessMeasure;\nEND_ENTITY;\n\nENTITY IfcBoundaryNodeConditionWarping\n SUBTYPE OF (IfcBoundaryNodeCondition);\n\tWarpingStiffness : OPTIONAL IfcWarpingMomentMeasure;\nEND_ENTITY;\n\nENTITY IfcBoundedCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBSplineCurve\n\t,IfcCompositeCurve\n\t,IfcPolyline\n\t,IfcTrimmedCurve))\n SUBTYPE OF (IfcCurve);\nEND_ENTITY;\n\nENTITY IfcBoundedSurface\n SUPERTYPE OF (ONEOF\n\t(IfcCurveBoundedPlane\n\t,IfcRectangularTrimmedSurface))\n SUBTYPE OF (IfcSurface);\nEND_ENTITY;\n\nENTITY IfcBoundingBox\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tCorner : IfcCartesianPoint;\n\tXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\n\tZDim : IfcPositiveLengthMeasure;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcBoxedHalfSpace\n SUBTYPE OF (IfcHalfSpaceSolid);\n\tEnclosure : IfcBoundingBox;\n WHERE\n\tWR1 : NOT ('IFC2X3.IFCCURVEBOUNDEDPLANE' IN TYPEOF(SELF\\IfcHalfSpaceSolid.BaseSurface));\nEND_ENTITY;\n\nENTITY IfcBuilding\n SUBTYPE OF (IfcSpatialStructureElement);\n\tElevationOfRefHeight : OPTIONAL IfcLengthMeasure;\n\tElevationOfTerrain : OPTIONAL IfcLengthMeasure;\n\tBuildingAddress : OPTIONAL IfcPostalAddress;\nEND_ENTITY;\n\nENTITY IfcBuildingElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBeam\n\t,IfcBuildingElementComponent\n\t,IfcBuildingElementProxy\n\t,IfcColumn\n\t,IfcCovering\n\t,IfcCurtainWall\n\t,IfcDoor\n\t,IfcFooting\n\t,IfcMember\n\t,IfcPile\n\t,IfcPlate\n\t,IfcRailing\n\t,IfcRamp\n\t,IfcRampFlight\n\t,IfcRoof\n\t,IfcSlab\n\t,IfcStair\n\t,IfcStairFlight\n\t,IfcWall\n\t,IfcWindow))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcBuildingElementComponent\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuildingElementPart\n\t,IfcReinforcingElement))\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcBuildingElementPart\n SUBTYPE OF (IfcBuildingElementComponent);\nEND_ENTITY;\n\nENTITY IfcBuildingElementProxy\n SUBTYPE OF (IfcBuildingElement);\n\tCompositionType : OPTIONAL IfcElementCompositionEnum;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcBuildingElementProxyType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcBuildingElementProxyTypeEnum;\nEND_ENTITY;\n\nENTITY IfcBuildingElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBeamType\n\t,IfcBuildingElementProxyType\n\t,IfcColumnType\n\t,IfcCoveringType\n\t,IfcCurtainWallType\n\t,IfcMemberType\n\t,IfcPlateType\n\t,IfcRailingType\n\t,IfcRampFlightType\n\t,IfcSlabType\n\t,IfcStairFlightType\n\t,IfcWallType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcBuildingStorey\n SUBTYPE OF (IfcSpatialStructureElement);\n\tElevation : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tWidth : IfcPositiveLengthMeasure;\n\tWallThickness : IfcPositiveLengthMeasure;\n\tGirth : IfcPositiveLengthMeasure;\n\tInternalFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tCentreOfGravityInX : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : Girth < (Depth / 2.);\n\tWR2 : NOT(EXISTS(InternalFilletRadius)) OR\n            ((InternalFilletRadius <= Width/2.) AND (InternalFilletRadius <= Depth/2.));\n\tWR3 : (WallThickness < Width/2.) AND (WallThickness < Depth/2.);\nEND_ENTITY;\n\nENTITY IfcCableCarrierFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcCableCarrierFittingTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcCableCarrierFittingTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcCableCarrierFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCableCarrierSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcCableCarrierSegmentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCableSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcCableSegmentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCalendarDate;\n\tDayComponent : IfcDayInMonthNumber;\n\tMonthComponent : IfcMonthInYearNumber;\n\tYearComponent : IfcYearNumber;\n WHERE\n\tWR21 : IfcValidCalendarDate (SELF);\nEND_ENTITY;\n\nENTITY IfcCartesianPoint\n SUBTYPE OF (IfcPoint);\n\tCoordinates : LIST [1:3] OF IfcLengthMeasure;\n DERIVE\n\tDim : IfcDimensionCount := HIINDEX(Coordinates);\n WHERE\n\tWR1 : HIINDEX(Coordinates) >= 2;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCartesianTransformationOperator2D\n\t,IfcCartesianTransformationOperator3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tAxis1 : OPTIONAL IfcDirection;\n\tAxis2 : OPTIONAL IfcDirection;\n\tLocalOrigin : IfcCartesianPoint;\n\tScale : OPTIONAL REAL;\n DERIVE\n\tScl : REAL := NVL(Scale, 1.0);\n\tDim : IfcDimensionCount := LocalOrigin.Dim;\n WHERE\n\tWR1 : Scl > 0.0;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator2D\n SUPERTYPE OF (ONEOF\n\t(IfcCartesianTransformationOperator2DnonUniform))\n SUBTYPE OF (IfcCartesianTransformationOperator);\n DERIVE\n\tU : LIST [2:2] OF IfcDirection := IfcBaseAxis(2,SELF\\IfcCartesianTransformationOperator.Axis1,\n          SELF\\IfcCartesianTransformationOperator.Axis2,?);\n WHERE\n\tWR1 : SELF\\IfcCartesianTransformationOperator.Dim = 2;\n\tWR2 : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis1)) OR \n            (SELF\\IfcCartesianTransformationOperator.Axis1.Dim = 2);\n\tWR3 : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis2)) OR \n            (SELF\\IfcCartesianTransformationOperator.Axis2.Dim = 2);\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator2DnonUniform\n SUBTYPE OF (IfcCartesianTransformationOperator2D);\n\tScale2 : OPTIONAL REAL;\n DERIVE\n\tScl2 : REAL := NVL(Scale2, SELF\\IfcCartesianTransformationOperator.Scl);\n WHERE\n\tWR1 : Scl2 > 0.0;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator3D\n SUPERTYPE OF (ONEOF\n\t(IfcCartesianTransformationOperator3DnonUniform))\n SUBTYPE OF (IfcCartesianTransformationOperator);\n\tAxis3 : OPTIONAL IfcDirection;\n DERIVE\n\tU : LIST [3:3] OF IfcDirection := IfcBaseAxis(3,SELF\\IfcCartesianTransformationOperator.Axis1,\n              SELF\\IfcCartesianTransformationOperator.Axis2,Axis3);\n WHERE\n\tWR1 : SELF\\IfcCartesianTransformationOperator.Dim = 3;\n\tWR2 : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis1)) OR \n            (SELF\\IfcCartesianTransformationOperator.Axis1.Dim = 3);\n\tWR3 : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis2)) OR \n            (SELF\\IfcCartesianTransformationOperator.Axis2.Dim = 3);\n\tWR4 : NOT(EXISTS(Axis3)) OR (Axis3.Dim = 3);\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator3DnonUniform\n SUBTYPE OF (IfcCartesianTransformationOperator3D);\n\tScale2 : OPTIONAL REAL;\n\tScale3 : OPTIONAL REAL;\n DERIVE\n\tScl2 : REAL := NVL(Scale2, SELF\\IfcCartesianTransformationOperator.Scl);\n\tScl3 : REAL := NVL(Scale3, SELF\\IfcCartesianTransformationOperator.Scl);\n WHERE\n\tWR1 : Scl2 > 0.0;\n\tWR2 : Scl3 > 0.0;\nEND_ENTITY;\n\nENTITY IfcCenterLineProfileDef\n SUBTYPE OF (IfcArbitraryOpenProfileDef);\n\tThickness : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcChamferEdgeFeature\n SUBTYPE OF (IfcEdgeFeature);\n\tWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tHeight : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcChillerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcChillerTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCircle\n SUBTYPE OF (IfcConic);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCircleHollowProfileDef\n SUBTYPE OF (IfcCircleProfileDef);\n\tWallThickness : IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : WallThickness < SELF\\IfcCircleProfileDef.Radius;\nEND_ENTITY;\n\nENTITY IfcCircleProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcCircleHollowProfileDef))\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcClassification;\n\tSource : IfcLabel;\n\tEdition : IfcLabel;\n\tEditionDate : OPTIONAL IfcCalendarDate;\n\tName : IfcLabel;\n INVERSE\n\tContains : SET [0:?] OF IfcClassificationItem FOR ItemOf;\nEND_ENTITY;\n\nENTITY IfcClassificationItem;\n\tNotation : IfcClassificationNotationFacet;\n\tItemOf : OPTIONAL IfcClassification;\n\tTitle : IfcLabel;\n INVERSE\n\tIsClassifiedItemIn : SET [0:1] OF IfcClassificationItemRelationship FOR RelatedItems;\n\tIsClassifyingItemIn : SET [0:1] OF IfcClassificationItemRelationship FOR RelatingItem;\nEND_ENTITY;\n\nENTITY IfcClassificationItemRelationship;\n\tRelatingItem : IfcClassificationItem;\n\tRelatedItems : SET [1:?] OF IfcClassificationItem;\nEND_ENTITY;\n\nENTITY IfcClassificationNotation;\n\tNotationFacets : SET [1:?] OF IfcClassificationNotationFacet;\nEND_ENTITY;\n\nENTITY IfcClassificationNotationFacet;\n\tNotationValue : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcClassificationReference\n SUBTYPE OF (IfcExternalReference);\n\tReferencedSource : OPTIONAL IfcClassification;\nEND_ENTITY;\n\nENTITY IfcClosedShell\n SUBTYPE OF (IfcConnectedFaceSet);\nEND_ENTITY;\n\nENTITY IfcCoilType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCoilTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcCoilTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcCoilTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcColourRgb\n SUBTYPE OF (IfcColourSpecification);\n\tRed : IfcNormalisedRatioMeasure;\n\tGreen : IfcNormalisedRatioMeasure;\n\tBlue : IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcColourSpecification\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcColourRgb));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcColumn\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcColumnType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcColumnTypeEnum;\nEND_ENTITY;\n\nENTITY IfcComplexProperty\n SUBTYPE OF (IfcProperty);\n\tUsageName : IfcIdentifier;\n\tHasProperties : SET [1:?] OF IfcProperty;\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* HasProperties | SELF :=: temp)) = 0;\n\tWR22 : IfcUniquePropertyName(HasProperties);\nEND_ENTITY;\n\nENTITY IfcCompositeCurve\n SUPERTYPE OF (ONEOF\n\t(Ifc2DCompositeCurve))\n SUBTYPE OF (IfcBoundedCurve);\n\tSegments : LIST [1:?] OF IfcCompositeCurveSegment;\n\tSelfIntersect : LOGICAL;\n DERIVE\n\tNSegments : INTEGER := SIZEOF(Segments);\n\tClosedCurve : LOGICAL := Segments[NSegments].Transition <> Discontinuous;\n WHERE\n\tWR41 : ((NOT ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 1)) OR ((ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 0));\n\tWR42 : SIZEOF( QUERY( Temp <* Segments | Temp.Dim <> Segments[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcCompositeCurveSegment\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tTransition : IfcTransitionCode;\n\tSameSense : BOOLEAN;\n\tParentCurve : IfcCurve;\n DERIVE\n\tDim : IfcDimensionCount := ParentCurve.Dim;\n INVERSE\n\tUsingCurves : SET [1:?] OF IfcCompositeCurve FOR Segments;\n WHERE\n\tWR1 : ('IFC2X3.IFCBOUNDEDCURVE' IN TYPEOF(ParentCurve));\nEND_ENTITY;\n\nENTITY IfcCompositeProfileDef\n SUBTYPE OF (IfcProfileDef);\n\tProfiles : SET [2:?] OF IfcProfileDef;\n\tLabel : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* Profiles | temp.ProfileType <> Profiles[1].ProfileType)) = 0;\n\tWR2 : SIZEOF(QUERY(temp <* Profiles | 'IFC2X3.IFCCOMPOSITEPROFILEDEF' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcCompressorType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcCompressorTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcCompressorTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcCompressorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCondenserType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCondenserTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcCondenserTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcCondenserTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCondition\n SUBTYPE OF (IfcGroup);\nEND_ENTITY;\n\nENTITY IfcConditionCriterion\n SUBTYPE OF (IfcControl);\n\tCriterion : IfcConditionCriterionSelect;\n\tCriterionDateTime : IfcDateTimeSelect;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcConic\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCircle\n\t,IfcEllipse))\n SUBTYPE OF (IfcCurve);\n\tPosition : IfcAxis2Placement;\nEND_ENTITY;\n\nENTITY IfcConnectedFaceSet\n SUPERTYPE OF (ONEOF\n\t(IfcClosedShell\n\t,IfcOpenShell))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tCfsFaces : SET [1:?] OF IfcFace;\nEND_ENTITY;\n\nENTITY IfcConnectionCurveGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tCurveOnRelatingElement : IfcCurveOrEdgeCurve;\n\tCurveOnRelatedElement : OPTIONAL IfcCurveOrEdgeCurve;\nEND_ENTITY;\n\nENTITY IfcConnectionGeometry\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConnectionCurveGeometry\n\t,IfcConnectionPointGeometry\n\t,IfcConnectionPortGeometry\n\t,IfcConnectionSurfaceGeometry));\nEND_ENTITY;\n\nENTITY IfcConnectionPointEccentricity\n SUBTYPE OF (IfcConnectionPointGeometry);\n\tEccentricityInX : OPTIONAL IfcLengthMeasure;\n\tEccentricityInY : OPTIONAL IfcLengthMeasure;\n\tEccentricityInZ : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcConnectionPointGeometry\n SUPERTYPE OF (ONEOF\n\t(IfcConnectionPointEccentricity))\n SUBTYPE OF (IfcConnectionGeometry);\n\tPointOnRelatingElement : IfcPointOrVertexPoint;\n\tPointOnRelatedElement : OPTIONAL IfcPointOrVertexPoint;\nEND_ENTITY;\n\nENTITY IfcConnectionPortGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tLocationAtRelatingElement : IfcAxis2Placement;\n\tLocationAtRelatedElement : OPTIONAL IfcAxis2Placement;\n\tProfileOfPort : IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcConnectionSurfaceGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tSurfaceOnRelatingElement : IfcSurfaceOrFaceSurface;\n\tSurfaceOnRelatedElement : OPTIONAL IfcSurfaceOrFaceSurface;\nEND_ENTITY;\n\nENTITY IfcConstraint\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcMetric\n\t,IfcObjective));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tConstraintGrade : IfcConstraintEnum;\n\tConstraintSource : OPTIONAL IfcLabel;\n\tCreatingActor : OPTIONAL IfcActorSelect;\n\tCreationTime : OPTIONAL IfcDateTimeSelect;\n\tUserDefinedGrade : OPTIONAL IfcLabel;\n INVERSE\n\tClassifiedAs : SET [0:?] OF IfcConstraintClassificationRelationship FOR ClassifiedConstraint;\n\tRelatesConstraints : SET [0:?] OF IfcConstraintRelationship FOR RelatingConstraint;\n\tIsRelatedWith : SET [0:?] OF IfcConstraintRelationship FOR RelatedConstraints;\n\tPropertiesForConstraint : SET [0:?] OF IfcPropertyConstraintRelationship FOR RelatingConstraint;\n\tAggregates : SET [0:?] OF IfcConstraintAggregationRelationship FOR RelatingConstraint;\n\tIsAggregatedIn : SET [0:?] OF IfcConstraintAggregationRelationship FOR RelatedConstraints;\n WHERE\n\tWR11 : (ConstraintGrade <> IfcConstraintEnum.USERDEFINED) OR\n             ((ConstraintGrade = IfcConstraintEnum.USERDEFINED) AND EXISTS(SELF\\IfcConstraint.UserDefinedGrade));\nEND_ENTITY;\n\nENTITY IfcConstraintAggregationRelationship;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRelatingConstraint : IfcConstraint;\n\tRelatedConstraints : LIST [1:?] OF UNIQUE IfcConstraint;\n\tLogicalAggregator : IfcLogicalOperatorEnum;\n WHERE\n\tWR11 : SIZEOF(QUERY(temp <* RelatedConstraints | \n               temp :=: RelatingConstraint\n               )) = 0;\nEND_ENTITY;\n\nENTITY IfcConstraintClassificationRelationship;\n\tClassifiedConstraint : IfcConstraint;\n\tRelatedClassifications : SET [1:?] OF IfcClassificationNotationSelect;\nEND_ENTITY;\n\nENTITY IfcConstraintRelationship;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRelatingConstraint : IfcConstraint;\n\tRelatedConstraints : SET [1:?] OF IfcConstraint;\n WHERE\n\tWR11 : SIZEOF(QUERY(temp <* RelatedConstraints | temp :=: RelatingConstraint )) = 0;\nEND_ENTITY;\n\nENTITY IfcConstructionEquipmentResource\n SUBTYPE OF (IfcConstructionResource);\nEND_ENTITY;\n\nENTITY IfcConstructionMaterialResource\n SUBTYPE OF (IfcConstructionResource);\n\tSuppliers : OPTIONAL SET [1:?] OF IfcActorSelect;\n\tUsageRatio : OPTIONAL IfcRatioMeasure;\n WHERE\n\tWR1 : SIZEOF(SELF\\IfcResource.ResourceOf) <=1;\n\tWR2 : NOT(EXISTS(SELF\\IfcResource.ResourceOf[1])) OR\n            (SELF\\IfcResource.ResourceOf[1].RelatedObjectsType = IfcObjectTypeEnum.PRODUCT);\nEND_ENTITY;\n\nENTITY IfcConstructionProductResource\n SUBTYPE OF (IfcConstructionResource);\n WHERE\n\tWR1 : SIZEOF(SELF\\IfcResource.ResourceOf) <=1;\n\tWR2 : NOT(EXISTS(SELF\\IfcResource.ResourceOf[1])) OR\n            (SELF\\IfcResource.ResourceOf[1].RelatedObjectsType = IfcObjectTypeEnum.PRODUCT);\nEND_ENTITY;\n\nENTITY IfcConstructionResource\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConstructionEquipmentResource\n\t,IfcConstructionMaterialResource\n\t,IfcConstructionProductResource\n\t,IfcCrewResource\n\t,IfcLaborResource\n\t,IfcSubContractResource))\n SUBTYPE OF (IfcResource);\n\tResourceIdentifier : OPTIONAL IfcIdentifier;\n\tResourceGroup : OPTIONAL IfcLabel;\n\tResourceConsumption : OPTIONAL IfcResourceConsumptionEnum;\n\tBaseQuantity : OPTIONAL IfcMeasureWithUnit;\nEND_ENTITY;\n\nENTITY IfcContextDependentUnit\n SUBTYPE OF (IfcNamedUnit);\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcControl\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcActionRequest\n\t,IfcConditionCriterion\n\t,IfcCostItem\n\t,IfcCostSchedule\n\t,IfcEquipmentStandard\n\t,IfcFurnitureStandard\n\t,IfcPerformanceHistory\n\t,IfcPermit\n\t,IfcProjectOrder\n\t,IfcProjectOrderRecord\n\t,IfcScheduleTimeControl\n\t,IfcServiceLife\n\t,IfcSpaceProgram\n\t,IfcTimeSeriesSchedule\n\t,IfcWorkControl))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tControls : SET [0:?] OF IfcRelAssignsToControl FOR RelatingControl;\nEND_ENTITY;\n\nENTITY IfcControllerType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcControllerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcConversionBasedUnit\n SUBTYPE OF (IfcNamedUnit);\n\tName : IfcLabel;\n\tConversionFactor : IfcMeasureWithUnit;\nEND_ENTITY;\n\nENTITY IfcCooledBeamType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCooledBeamTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcCooledBeamTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcCooledBeamTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCoolingTowerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCoolingTowerTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcCoolingTowerTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcCoolingTowerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCoordinatedUniversalTimeOffset;\n\tHourOffset : IfcHourInDay;\n\tMinuteOffset : OPTIONAL IfcMinuteInHour;\n\tSense : IfcAheadOrBehind;\nEND_ENTITY;\n\nENTITY IfcCostItem\n SUBTYPE OF (IfcControl);\nEND_ENTITY;\n\nENTITY IfcCostSchedule\n SUBTYPE OF (IfcControl);\n\tSubmittedBy : OPTIONAL IfcActorSelect;\n\tPreparedBy : OPTIONAL IfcActorSelect;\n\tSubmittedOn : OPTIONAL IfcDateTimeSelect;\n\tStatus : OPTIONAL IfcLabel;\n\tTargetUsers : OPTIONAL SET [1:?] OF IfcActorSelect;\n\tUpdateDate : OPTIONAL IfcDateTimeSelect;\n\tID : IfcIdentifier;\n\tPredefinedType : IfcCostScheduleTypeEnum;\n UNIQUE\n\tUR2 : ID;\nEND_ENTITY;\n\nENTITY IfcCostValue\n SUBTYPE OF (IfcAppliedValue);\n\tCostType : IfcLabel;\n\tCondition : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcCovering\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcCoveringTypeEnum;\n INVERSE\n\tCoversSpaces : SET [0:1] OF IfcRelCoversSpaces FOR RelatedCoverings;\n\tCovers : SET [0:1] OF IfcRelCoversBldgElements FOR RelatedCoverings;\n WHERE\n\tWR61 : NOT(EXISTS(PredefinedType)) OR \n              (PredefinedType <> IfcCoveringTypeEnum.USERDEFINED) OR \n              ((PredefinedType = IfcCoveringTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcCoveringType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcCoveringTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCraneRailAShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tOverallHeight : IfcPositiveLengthMeasure;\n\tBaseWidth2 : IfcPositiveLengthMeasure;\n\tRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tHeadWidth : IfcPositiveLengthMeasure;\n\tHeadDepth2 : IfcPositiveLengthMeasure;\n\tHeadDepth3 : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tBaseWidth4 : IfcPositiveLengthMeasure;\n\tBaseDepth1 : IfcPositiveLengthMeasure;\n\tBaseDepth2 : IfcPositiveLengthMeasure;\n\tBaseDepth3 : IfcPositiveLengthMeasure;\n\tCentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCraneRailFShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tOverallHeight : IfcPositiveLengthMeasure;\n\tHeadWidth : IfcPositiveLengthMeasure;\n\tRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tHeadDepth2 : IfcPositiveLengthMeasure;\n\tHeadDepth3 : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tBaseDepth1 : IfcPositiveLengthMeasure;\n\tBaseDepth2 : IfcPositiveLengthMeasure;\n\tCentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCrewResource\n SUBTYPE OF (IfcConstructionResource);\nEND_ENTITY;\n\nENTITY IfcCsgPrimitive3D\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBlock\n\t,IfcRectangularPyramid\n\t,IfcRightCircularCone\n\t,IfcRightCircularCylinder\n\t,IfcSphere))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tPosition : IfcAxis2Placement3D;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcCsgSolid\n SUBTYPE OF (IfcSolidModel);\n\tTreeRootExpression : IfcCsgSelect;\nEND_ENTITY;\n\nENTITY IfcCurrencyRelationship;\n\tRelatingMonetaryUnit : IfcMonetaryUnit;\n\tRelatedMonetaryUnit : IfcMonetaryUnit;\n\tExchangeRate : IfcPositiveRatioMeasure;\n\tRateDateTime : IfcDateAndTime;\n\tRateSource : OPTIONAL IfcLibraryInformation;\nEND_ENTITY;\n\nENTITY IfcCurtainWall\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcCurtainWallType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcCurtainWallTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBoundedCurve\n\t,IfcConic\n\t,IfcLine\n\t,IfcOffsetCurve2D\n\t,IfcOffsetCurve3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\tDim : IfcDimensionCount := IfcCurveDim(SELF);\nEND_ENTITY;\n\nENTITY IfcCurveBoundedPlane\n SUBTYPE OF (IfcBoundedSurface);\n\tBasisSurface : IfcPlane;\n\tOuterBoundary : IfcCurve;\n\tInnerBoundaries : SET [0:?] OF IfcCurve;\n DERIVE\n\tDim : IfcDimensionCount := BasisSurface.Dim;\nEND_ENTITY;\n\nENTITY IfcCurveStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tCurveFont : OPTIONAL IfcCurveFontOrScaledCurveFontSelect;\n\tCurveWidth : OPTIONAL IfcSizeSelect;\n\tCurveColour : OPTIONAL IfcColour;\n WHERE\n\tWR11 : (NOT(EXISTS(CurveWidth))) OR\n             ('IFC2X3.IFCPOSITIVELENGTHMEASURE' IN TYPEOF(CurveWidth)) OR \n              (('IFC2X3.IFCDESCRIPTIVEMEASURE' IN TYPEOF(CurveWidth)) AND\n              (CurveWidth = 'by layer'));\nEND_ENTITY;\n\nENTITY IfcCurveStyleFont;\n\tName : OPTIONAL IfcLabel;\n\tPatternList : LIST [1:?] OF IfcCurveStyleFontPattern;\nEND_ENTITY;\n\nENTITY IfcCurveStyleFontAndScaling;\n\tName : OPTIONAL IfcLabel;\n\tCurveFont : IfcCurveStyleFontSelect;\n\tCurveFontScaling : IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcCurveStyleFontPattern;\n\tVisibleSegmentLength : IfcLengthMeasure;\n\tInvisibleSegmentLength : IfcPositiveLengthMeasure;\n WHERE\n\tWR01 : VisibleSegmentLength >= 0.;\nEND_ENTITY;\n\nENTITY IfcDamperType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcDamperTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDateAndTime;\n\tDateComponent : IfcCalendarDate;\n\tTimeComponent : IfcLocalTime;\nEND_ENTITY;\n\nENTITY IfcDefinedSymbol\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tDefinition : IfcDefinedSymbolSelect;\n\tTarget : IfcCartesianTransformationOperator2D;\nEND_ENTITY;\n\nENTITY IfcDerivedProfileDef\n SUBTYPE OF (IfcProfileDef);\n\tParentProfile : IfcProfileDef;\n\tOperator : IfcCartesianTransformationOperator2D;\n\tLabel : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : SELF\\IfcProfileDef.ProfileType = ParentProfile.ProfileType;\nEND_ENTITY;\n\nENTITY IfcDerivedUnit;\n\tElements : SET [1:?] OF IfcDerivedUnitElement;\n\tUnitType : IfcDerivedUnitEnum;\n\tUserDefinedType : OPTIONAL IfcLabel;\n DERIVE\n\tDimensions : IfcDimensionalExponents := IfcDeriveDimensionalExponents(Elements);\n WHERE\n\tWR1 : (SIZEOF (Elements) > 1) OR ((SIZEOF (Elements) = 1) AND (Elements[1].Exponent <> 1 ));\n\tWR2 : (UnitType <> IfcDerivedUnitEnum.USERDEFINED) OR\n            ((UnitType = IfcDerivedUnitEnum.USERDEFINED) AND \n             (EXISTS(SELF.UserDefinedType)));\nEND_ENTITY;\n\nENTITY IfcDerivedUnitElement;\n\tUnit : IfcNamedUnit;\n\tExponent : INTEGER;\nEND_ENTITY;\n\nENTITY IfcDiameterDimension\n SUBTYPE OF (IfcDimensionCurveDirectedCallout);\nEND_ENTITY;\n\nENTITY IfcDimensionCalloutRelationship\n SUBTYPE OF (IfcDraughtingCalloutRelationship);\n WHERE\n\tWR11 : SELF\\IfcDraughtingCalloutRelationship.Name IN ['primary','secondary'];\n\tWR12 : SIZEOF(TYPEOF(SELF\\IfcDraughtingCalloutRelationship.RelatingDraughtingCallout) * [\n                  'IFC2X3.IFCANGULARDIMENSION',\n                  'IFC2X3.IFCDIAMETERDIMENSION',\n                  'IFC2X3.IFCLINEARDIMENSION',\n                  'IFC2X3.IFCRADIUSDIMENSION']) = 1;\n\tWR13 : NOT ('IFC2X3.IFCDIMENSIONCURVEDIRECTEDCALLOUT'\n               IN TYPEOF (SELF\\IfcDraughtingCalloutRelationship.RelatedDraughtingCallout));\nEND_ENTITY;\n\nENTITY IfcDimensionCurve\n SUBTYPE OF (IfcAnnotationCurveOccurrence);\n INVERSE\n\tAnnotatedBySymbols : SET [0:2] OF IfcTerminatorSymbol FOR AnnotatedCurve;\n WHERE\n\tWR51 : SIZEOF(USEDIN(SELF,'IFC2X3.IFCDRAUGHTINGCALLOUT.CONTENTS')) \n                   >= 1;\n\tWR52 : (SIZEOF(QUERY (Dct1 <* USEDIN(SELF,'IFC2X3.' + \n                            'IFCTERMINATORSYMBOL.ANNOTATEDCURVE') | (Dct1.Role = IfcDimensionExtentUsage.ORIGIN))) <= 1) \n             AND \n             (SIZEOF(QUERY (Dct2 <* USEDIN(SELF,'IFC2X3.' + \n                            'IFCTERMINATORSYMBOL.ANNOTATEDCURVE') | (Dct2.Role = IfcDimensionExtentUsage.TARGET))) <= 1);\n\tWR53 : SIZEOF(QUERY (Dct <* AnnotatedBySymbols | \n               NOT('IFC2X3.IFCDIMENSIONCURVETERMINATOR' IN TYPEOF(Dct)))) \n               = 0;\nEND_ENTITY;\n\nENTITY IfcDimensionCurveDirectedCallout\n SUPERTYPE OF (ONEOF\n\t(IfcAngularDimension\n\t,IfcDiameterDimension\n\t,IfcLinearDimension\n\t,IfcRadiusDimension))\n SUBTYPE OF (IfcDraughtingCallout);\n WHERE\n\tWR41 : SIZEOF(QUERY (Dc <* SELF\\IfcDraughtingCallout.Contents | (\n                   'IFC2X3.IFCDIMENSIONCURVE' IN TYPEOF(Dc)))) \n                  = 1;\n\tWR42 : SIZEOF (QUERY (Dc <* SELF.contents |\n                    ('IFC2X3.IFCPROJECTIONCURVE' IN\n                      TYPEOF (Dc)))) <= 2;\nEND_ENTITY;\n\nENTITY IfcDimensionCurveTerminator\n SUBTYPE OF (IfcTerminatorSymbol);\n\tRole : IfcDimensionExtentUsage;\n WHERE\n\tWR61 : 'IFC2X3.IFCDIMENSIONCURVE' IN TYPEOF\n             (SELF\\IfcTerminatorSymbol.AnnotatedCurve);\nEND_ENTITY;\n\nENTITY IfcDimensionPair\n SUBTYPE OF (IfcDraughtingCalloutRelationship);\n WHERE\n\tWR11 : SELF.Name IN ['chained','parallel'];\n\tWR12 : SIZEOF(TYPEOF(SELF.RelatingDraughtingCallout) * [\n                            'IFC2X3.IFCANGULARDIMENSION',\n                            'IFC2X3.IFCDIAMETERDIMENSION',\n                            'IFC2X3.IFCLINEARDIMENSION',\n                            'IFC2X3.IFCRADIUSDIMENSION']) = 1;\n\tWR13 : SIZEOF(TYPEOF(SELF.RelatedDraughtingCallout) * [\n                            'IFC2X3.IFCANGULARDIMENSION',\n                            'IFC2X3.IFCDIAMETERDIMENSION',\n                            'IFC2X3.IFCLINEARDIMENSION',\n                            'IFC2X3.IFCRADIUSDIMENSION']) = 1;\nEND_ENTITY;\n\nENTITY IfcDimensionalExponents;\n\tLengthExponent : INTEGER;\n\tMassExponent : INTEGER;\n\tTimeExponent : INTEGER;\n\tElectricCurrentExponent : INTEGER;\n\tThermodynamicTemperatureExponent : INTEGER;\n\tAmountOfSubstanceExponent : INTEGER;\n\tLuminousIntensityExponent : INTEGER;\nEND_ENTITY;\n\nENTITY IfcDirection\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tDirectionRatios : LIST [2:3] OF REAL;\n DERIVE\n\tDim : IfcDimensionCount := HIINDEX(DirectionRatios);\nEND_ENTITY;\n\nENTITY IfcDiscreteAccessory\n SUBTYPE OF (IfcElementComponent);\nEND_ENTITY;\n\nENTITY IfcDiscreteAccessoryType\n SUPERTYPE OF (ONEOF\n\t(IfcVibrationIsolatorType))\n SUBTYPE OF (IfcElementComponentType);\nEND_ENTITY;\n\nENTITY IfcDistributionChamberElement\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcDistributionChamberElementType\n SUBTYPE OF (IfcDistributionFlowElementType);\n\tPredefinedType : IfcDistributionChamberElementTypeEnum;\nEND_ENTITY;\n\nENTITY IfcDistributionControlElement\n SUBTYPE OF (IfcDistributionElement);\n\tControlElementId : OPTIONAL IfcIdentifier;\n INVERSE\n\tAssignedToFlowElement : SET [0:1] OF IfcRelFlowControlElements FOR RelatedControlElements;\nEND_ENTITY;\n\nENTITY IfcDistributionControlElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcActuatorType\n\t,IfcAlarmType\n\t,IfcControllerType\n\t,IfcFlowInstrumentType\n\t,IfcSensorType))\n SUBTYPE OF (IfcDistributionElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionElement\n SUPERTYPE OF (ONEOF\n\t(IfcDistributionControlElement\n\t,IfcDistributionFlowElement))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcDistributionElementType\n SUPERTYPE OF (ONEOF\n\t(IfcDistributionControlElementType\n\t,IfcDistributionFlowElementType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionFlowElement\n SUPERTYPE OF (ONEOF\n\t(IfcDistributionChamberElement\n\t,IfcEnergyConversionDevice\n\t,IfcFlowController\n\t,IfcFlowFitting\n\t,IfcFlowMovingDevice\n\t,IfcFlowSegment\n\t,IfcFlowStorageDevice\n\t,IfcFlowTerminal\n\t,IfcFlowTreatmentDevice))\n SUBTYPE OF (IfcDistributionElement);\n INVERSE\n\tHasControlElements : SET [0:1] OF IfcRelFlowControlElements FOR RelatingFlowElement;\nEND_ENTITY;\n\nENTITY IfcDistributionFlowElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDistributionChamberElementType\n\t,IfcEnergyConversionDeviceType\n\t,IfcFlowControllerType\n\t,IfcFlowFittingType\n\t,IfcFlowMovingDeviceType\n\t,IfcFlowSegmentType\n\t,IfcFlowStorageDeviceType\n\t,IfcFlowTerminalType\n\t,IfcFlowTreatmentDeviceType))\n SUBTYPE OF (IfcDistributionElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionPort\n SUBTYPE OF (IfcPort);\n\tFlowDirection : OPTIONAL IfcFlowDirectionEnum;\nEND_ENTITY;\n\nENTITY IfcDocumentElectronicFormat;\n\tFileExtension : OPTIONAL IfcLabel;\n\tMimeContentType : OPTIONAL IfcLabel;\n\tMimeSubtype : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS(FileExtension) OR EXISTS(MimeContentType);\nEND_ENTITY;\n\nENTITY IfcDocumentInformation;\n\tDocumentId : IfcIdentifier;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tDocumentReferences : OPTIONAL SET [1:?] OF IfcDocumentReference;\n\tPurpose : OPTIONAL IfcText;\n\tIntendedUse : OPTIONAL IfcText;\n\tScope : OPTIONAL IfcText;\n\tRevision : OPTIONAL IfcLabel;\n\tDocumentOwner : OPTIONAL IfcActorSelect;\n\tEditors : OPTIONAL SET [1:?] OF IfcActorSelect;\n\tCreationTime : OPTIONAL IfcDateAndTime;\n\tLastRevisionTime : OPTIONAL IfcDateAndTime;\n\tElectronicFormat : OPTIONAL IfcDocumentElectronicFormat;\n\tValidFrom : OPTIONAL IfcCalendarDate;\n\tValidUntil : OPTIONAL IfcCalendarDate;\n\tConfidentiality : OPTIONAL IfcDocumentConfidentialityEnum;\n\tStatus : OPTIONAL IfcDocumentStatusEnum;\n INVERSE\n\tIsPointedTo : SET [0:?] OF IfcDocumentInformationRelationship FOR RelatedDocuments;\n\tIsPointer : SET [0:1] OF IfcDocumentInformationRelationship FOR RelatingDocument;\nEND_ENTITY;\n\nENTITY IfcDocumentInformationRelationship;\n\tRelatingDocument : IfcDocumentInformation;\n\tRelatedDocuments : SET [1:?] OF IfcDocumentInformation;\n\tRelationshipType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcDocumentReference\n SUBTYPE OF (IfcExternalReference);\n INVERSE\n\tReferenceToDocument : SET [0:1] OF IfcDocumentInformation FOR DocumentReferences;\n WHERE\n\tWR1 : EXISTS(Name) XOR EXISTS(ReferenceToDocument[1]);\nEND_ENTITY;\n\nENTITY IfcDoor\n SUBTYPE OF (IfcBuildingElement);\n\tOverallHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tOverallWidth : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcDoorLiningProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tLiningDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tLiningThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tThresholdDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tThresholdThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTransomThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTransomOffset : OPTIONAL IfcLengthMeasure;\n\tLiningOffset : OPTIONAL IfcLengthMeasure;\n\tThresholdOffset : OPTIONAL IfcLengthMeasure;\n\tCasingThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tCasingDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n WHERE\n\tWR31 : NOT(NOT(EXISTS(LiningDepth)) AND EXISTS(LiningThickness));\n\tWR32 : NOT(NOT(EXISTS(ThresholdDepth)) AND EXISTS(ThresholdThickness));\n\tWR33 : (EXISTS(TransomOffset) AND EXISTS(TransomThickness)) XOR\n             (NOT(EXISTS(TransomOffset)) AND NOT(EXISTS(TransomThickness)));\n\tWR34 : (EXISTS(CasingDepth) AND EXISTS(CasingThickness)) XOR\n             (NOT(EXISTS(CasingDepth)) AND NOT(EXISTS(CasingThickness)));\n\tWR35 : EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1]) AND \n             ('IFC2X3.IFCDOORSTYLE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]));\nEND_ENTITY;\n\nENTITY IfcDoorPanelProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tPanelDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tPanelOperation : IfcDoorPanelOperationEnum;\n\tPanelWidth : OPTIONAL IfcNormalisedRatioMeasure;\n\tPanelPosition : IfcDoorPanelPositionEnum;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n WHERE\n\tWR31 : EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1]) AND \n             ('IFC2X3.IFCDOORSTYLE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]));\nEND_ENTITY;\n\nENTITY IfcDoorStyle\n SUBTYPE OF (IfcTypeProduct);\n\tOperationType : IfcDoorStyleOperationEnum;\n\tConstructionType : IfcDoorStyleConstructionEnum;\n\tParameterTakesPrecedence : BOOLEAN;\n\tSizeable : BOOLEAN;\nEND_ENTITY;\n\nENTITY IfcDraughtingCallout\n SUPERTYPE OF (ONEOF\n\t(IfcDimensionCurveDirectedCallout\n\t,IfcStructuredDimensionCallout))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tContents : SET [1:?] OF IfcDraughtingCalloutElement;\n INVERSE\n\tIsRelatedFromCallout : SET [0:?] OF IfcDraughtingCalloutRelationship FOR RelatedDraughtingCallout;\n\tIsRelatedToCallout : SET [0:?] OF IfcDraughtingCalloutRelationship FOR RelatingDraughtingCallout;\nEND_ENTITY;\n\nENTITY IfcDraughtingCalloutRelationship\n SUPERTYPE OF (ONEOF\n\t(IfcDimensionCalloutRelationship\n\t,IfcDimensionPair));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRelatingDraughtingCallout : IfcDraughtingCallout;\n\tRelatedDraughtingCallout : IfcDraughtingCallout;\nEND_ENTITY;\n\nENTITY IfcDraughtingPreDefinedColour\n SUBTYPE OF (IfcPreDefinedColour);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['black','red','green','blue','yellow',\n                  'magenta','cyan','white','by layer'];\nEND_ENTITY;\n\nENTITY IfcDraughtingPreDefinedCurveFont\n SUBTYPE OF (IfcPreDefinedCurveFont);\n WHERE\n\tWR31 : SELF\\IfcPredefinedItem.Name IN\n                    ['continuous',\n                     'chain',\n                     'chain double dash',\n                     'dashed',\n                     'dotted',\n                     'by layer'];\nEND_ENTITY;\n\nENTITY IfcDraughtingPreDefinedTextFont\n SUBTYPE OF (IfcPreDefinedTextFont);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['ISO 3098-1 font A','ISO 3098-1 font B'];\nEND_ENTITY;\n\nENTITY IfcDuctFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcDuctFittingTypeEnum;\n WHERE\n\tWR2 : (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDuctSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcDuctSegmentTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcDuctSegmentTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcDuctSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDuctSilencerType\n SUBTYPE OF (IfcFlowTreatmentDeviceType);\n\tPredefinedType : IfcDuctSilencerTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcDuctSilencerTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcDuctSilencerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcEdge\n SUPERTYPE OF (ONEOF\n\t(IfcEdgeCurve\n\t,IfcOrientedEdge\n\t,IfcSubedge))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tEdgeStart : IfcVertex;\n\tEdgeEnd : IfcVertex;\nEND_ENTITY;\n\nENTITY IfcEdgeCurve\n SUBTYPE OF (IfcEdge);\n\tEdgeGeometry : IfcCurve;\n\tSameSense : BOOLEAN;\nEND_ENTITY;\n\nENTITY IfcEdgeFeature\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcChamferEdgeFeature\n\t,IfcRoundedEdgeFeature))\n SUBTYPE OF (IfcFeatureElementSubtraction);\n\tFeatureLength : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcEdgeLoop\n SUBTYPE OF (IfcLoop);\n\tEdgeList : LIST [1:?] OF IfcOrientedEdge;\n DERIVE\n\tNe : INTEGER := SIZEOF(EdgeList);\n WHERE\n\tWR1 : (EdgeList[1].EdgeStart) :=: (EdgeList[Ne].EdgeEnd);\n\tWR2 : IfcLoopHeadToTail(SELF);\nEND_ENTITY;\n\nENTITY IfcElectricApplianceType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcElectricApplianceTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricDistributionPoint\n SUBTYPE OF (IfcFlowController);\n\tDistributionPointFunction : IfcElectricDistributionPointFunctionEnum;\n\tUserDefinedFunction : OPTIONAL IfcLabel;\n WHERE\n\tWR31 : (DistributionPointFunction <> IfcElectricDistributionPointFunctionEnum.USERDEFINED) OR\n             ((DistributionPointFunction = IfcElectricDistributionPointFunctionEnum.USERDEFINED) AND EXISTS(SELF\\IfcElectricDistributionPoint.UserDefinedFunction));\nEND_ENTITY;\n\nENTITY IfcElectricFlowStorageDeviceType\n SUBTYPE OF (IfcFlowStorageDeviceType);\n\tPredefinedType : IfcElectricFlowStorageDeviceTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricGeneratorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcElectricGeneratorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricHeaterType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcElectricHeaterTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricMotorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcElectricMotorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricTimeControlType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcElectricTimeControlTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricalBaseProperties\n SUBTYPE OF (IfcEnergyProperties);\n\tElectricCurrentType : OPTIONAL IfcElectricCurrentEnum;\n\tInputVoltage : IfcElectricVoltageMeasure;\n\tInputFrequency : IfcFrequencyMeasure;\n\tFullLoadCurrent : OPTIONAL IfcElectricCurrentMeasure;\n\tMinimumCircuitCurrent : OPTIONAL IfcElectricCurrentMeasure;\n\tMaximumPowerInput : OPTIONAL IfcPowerMeasure;\n\tRatedPowerInput : OPTIONAL IfcPowerMeasure;\n\tInputPhase : INTEGER;\nEND_ENTITY;\n\nENTITY IfcElectricalCircuit\n SUBTYPE OF (IfcSystem);\nEND_ENTITY;\n\nENTITY IfcElectricalElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuildingElement\n\t,IfcDistributionElement\n\t,IfcElectricalElement\n\t,IfcElementAssembly\n\t,IfcElementComponent\n\t,IfcEquipmentElement\n\t,IfcFeatureElement\n\t,IfcFurnishingElement\n\t,IfcTransportElement\n\t,IfcVirtualElement))\n SUBTYPE OF (IfcProduct);\n\tTag : OPTIONAL IfcIdentifier;\n INVERSE\n\tHasStructuralMember : SET [0:?] OF IfcRelConnectsStructuralElement FOR RelatingElement;\n\tFillsVoids : SET [0:1] OF IfcRelFillsElement FOR RelatedBuildingElement;\n\tConnectedTo : SET [0:?] OF IfcRelConnectsElements FOR RelatingElement;\n\tHasCoverings : SET [0:?] OF IfcRelCoversBldgElements FOR RelatingBuildingElement;\n\tHasProjections : SET [0:?] OF IfcRelProjectsElement FOR RelatingElement;\n\tReferencedInStructures : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatedElements;\n\tHasPorts : SET [0:?] OF IfcRelConnectsPortToElement FOR RelatedElement;\n\tHasOpenings : SET [0:?] OF IfcRelVoidsElement FOR RelatingBuildingElement;\n\tIsConnectionRealization : SET [0:?] OF IfcRelConnectsWithRealizingElements FOR RealizingElements;\n\tProvidesBoundaries : SET [0:?] OF IfcRelSpaceBoundary FOR RelatedBuildingElement;\n\tConnectedFrom : SET [0:?] OF IfcRelConnectsElements FOR RelatedElement;\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\nEND_ENTITY;\n\nENTITY IfcElementAssembly\n SUBTYPE OF (IfcElement);\n\tAssemblyPlace : OPTIONAL IfcAssemblyPlaceEnum;\n\tPredefinedType : IfcElementAssemblyTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcElementAssemblyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElementAssemblyTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcElementComponent\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDiscreteAccessory\n\t,IfcFastener))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcElementComponentType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDiscreteAccessoryType\n\t,IfcFastenerType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcElementQuantity\n SUBTYPE OF (IfcPropertySetDefinition);\n\tMethodOfMeasurement : OPTIONAL IfcLabel;\n\tQuantities : SET [1:?] OF IfcPhysicalQuantity;\nEND_ENTITY;\n\nENTITY IfcElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuildingElementType\n\t,IfcDistributionElementType\n\t,IfcElementComponentType\n\t,IfcFurnishingElementType\n\t,IfcSpatialStructureElementType\n\t,IfcTransportElementType))\n SUBTYPE OF (IfcTypeProduct);\n\tElementType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcElementarySurface\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPlane))\n SUBTYPE OF (IfcSurface);\n\tPosition : IfcAxis2Placement3D;\n DERIVE\n\tDim : IfcDimensionCount := Position.Dim;\nEND_ENTITY;\n\nENTITY IfcEllipse\n SUBTYPE OF (IfcConic);\n\tSemiAxis1 : IfcPositiveLengthMeasure;\n\tSemiAxis2 : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcEllipseProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tSemiAxis1 : IfcPositiveLengthMeasure;\n\tSemiAxis2 : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcEnergyConversionDevice\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcEnergyConversionDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAirToAirHeatRecoveryType\n\t,IfcBoilerType\n\t,IfcChillerType\n\t,IfcCoilType\n\t,IfcCondenserType\n\t,IfcCooledBeamType\n\t,IfcCoolingTowerType\n\t,IfcElectricGeneratorType\n\t,IfcElectricMotorType\n\t,IfcEvaporativeCoolerType\n\t,IfcEvaporatorType\n\t,IfcHeatExchangerType\n\t,IfcHumidifierType\n\t,IfcMotorConnectionType\n\t,IfcSpaceHeaterType\n\t,IfcTransformerType\n\t,IfcTubeBundleType\n\t,IfcUnitaryEquipmentType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcEnergyProperties\n SUPERTYPE OF (ONEOF\n\t(IfcElectricalBaseProperties))\n SUBTYPE OF (IfcPropertySetDefinition);\n\tEnergySequence : OPTIONAL IfcEnergySequenceEnum;\n\tUserDefinedEnergySequence : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcEnvironmentalImpactValue\n SUBTYPE OF (IfcAppliedValue);\n\tImpactType : IfcLabel;\n\tCategory : IfcEnvironmentalImpactCategoryEnum;\n\tUserDefinedCategory : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : (Category <> IfcEnvironmentalImpactCategoryEnum.USERDEFINED) OR\n            ((Category = IfcEnvironmentalImpactCategoryEnum.USERDEFINED) AND EXISTS(SELF\\IfcEnvironmentalImpactValue.UserDefinedCategory));\nEND_ENTITY;\n\nENTITY IfcEquipmentElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcEquipmentStandard\n SUBTYPE OF (IfcControl);\nEND_ENTITY;\n\nENTITY IfcEvaporativeCoolerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcEvaporativeCoolerTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcEvaporativeCoolerTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcEvaporativeCoolerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcEvaporatorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcEvaporatorTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcEvaporatorTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcEvaporatorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcExtendedMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tExtendedProperties : SET [1:?] OF IfcProperty;\n\tDescription : OPTIONAL IfcText;\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcExternalReference\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcClassificationReference\n\t,IfcDocumentReference\n\t,IfcExternallyDefinedHatchStyle\n\t,IfcExternallyDefinedSurfaceStyle\n\t,IfcExternallyDefinedSymbol\n\t,IfcExternallyDefinedTextFont\n\t,IfcLibraryReference));\n\tLocation : OPTIONAL IfcLabel;\n\tItemReference : OPTIONAL IfcIdentifier;\n\tName : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS(ItemReference) OR EXISTS(Location) OR EXISTS(Name);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedHatchStyle\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedSurfaceStyle\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedSymbol\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedTextFont\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExtrudedAreaSolid\n SUBTYPE OF (IfcSweptAreaSolid);\n\tExtrudedDirection : IfcDirection;\n\tDepth : IfcPositiveLengthMeasure;\n WHERE\n\tWR31 : IfcDotProduct(IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcDirection([0.0,0.0,1.0]), SELF.ExtrudedDirection) <> 0.0;\nEND_ENTITY;\n\nENTITY IfcFace\n SUPERTYPE OF (ONEOF\n\t(IfcFaceSurface))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tBounds : SET [1:?] OF IfcFaceBound;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* Bounds | 'IFC2X3.IFCFACEOUTERBOUND' IN TYPEOF(temp))) <= 1;\nEND_ENTITY;\n\nENTITY IfcFaceBasedSurfaceModel\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tFbsmFaces : SET [1:?] OF IfcConnectedFaceSet;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcFaceBound\n SUPERTYPE OF (ONEOF\n\t(IfcFaceOuterBound))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tBound : IfcLoop;\n\tOrientation : BOOLEAN;\nEND_ENTITY;\n\nENTITY IfcFaceOuterBound\n SUBTYPE OF (IfcFaceBound);\nEND_ENTITY;\n\nENTITY IfcFaceSurface\n SUBTYPE OF (IfcFace);\n\tFaceSurface : IfcSurface;\n\tSameSense : BOOLEAN;\nEND_ENTITY;\n\nENTITY IfcFacetedBrep\n SUBTYPE OF (IfcManifoldSolidBrep);\nEND_ENTITY;\n\nENTITY IfcFacetedBrepWithVoids\n SUBTYPE OF (IfcManifoldSolidBrep);\n\tVoids : SET [1:?] OF IfcClosedShell;\nEND_ENTITY;\n\nENTITY IfcFailureConnectionCondition\n SUBTYPE OF (IfcStructuralConnectionCondition);\n\tTensionFailureX : OPTIONAL IfcForceMeasure;\n\tTensionFailureY : OPTIONAL IfcForceMeasure;\n\tTensionFailureZ : OPTIONAL IfcForceMeasure;\n\tCompressionFailureX : OPTIONAL IfcForceMeasure;\n\tCompressionFailureY : OPTIONAL IfcForceMeasure;\n\tCompressionFailureZ : OPTIONAL IfcForceMeasure;\nEND_ENTITY;\n\nENTITY IfcFanType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcFanTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcFanTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcFanTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFastener\n SUPERTYPE OF (ONEOF\n\t(IfcMechanicalFastener))\n SUBTYPE OF (IfcElementComponent);\nEND_ENTITY;\n\nENTITY IfcFastenerType\n SUPERTYPE OF (ONEOF\n\t(IfcMechanicalFastenerType))\n SUBTYPE OF (IfcElementComponentType);\nEND_ENTITY;\n\nENTITY IfcFeatureElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcFeatureElementAddition\n\t,IfcFeatureElementSubtraction))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcFeatureElementAddition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcProjectionElement))\n SUBTYPE OF (IfcFeatureElement);\n INVERSE\n\tProjectsElements : IfcRelProjectsElement FOR RelatedFeatureElement;\nEND_ENTITY;\n\nENTITY IfcFeatureElementSubtraction\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcEdgeFeature\n\t,IfcOpeningElement))\n SUBTYPE OF (IfcFeatureElement);\n INVERSE\n\tVoidsElements : IfcRelVoidsElement FOR RelatedOpeningElement;\nEND_ENTITY;\n\nENTITY IfcFillAreaStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tFillStyles : SET [1:?] OF IfcFillStyleSelect;\n WHERE\n\tWR11 : SIZEOF(QUERY(Style <* SELF.FillStyles |\n               'IFC2X3.IFCCOLOUR' IN\n                TYPEOF(Style)\n               )) <= 1;\n\tWR12 : SIZEOF(QUERY(Style <* SELF.FillStyles |\n               'IFC2X3.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN\n                TYPEOF(Style)\n               )) <= 1;\n\tWR13 : IfcCorrectFillAreaStyle(SELF.FillStyles);\nEND_ENTITY;\n\nENTITY IfcFillAreaStyleHatching\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tHatchLineAppearance : IfcCurveStyle;\n\tStartOfNextHatchLine : IfcHatchLineDistanceSelect;\n\tPointOfReferenceHatchLine : OPTIONAL IfcCartesianPoint;\n\tPatternStart : OPTIONAL IfcCartesianPoint;\n\tHatchLineAngle : IfcPlaneAngleMeasure;\n WHERE\n\tWR21 : NOT(\n              'IFC2X3.IFCTWODIRECTIONREPEATFACTOR' \n              IN TYPEOF(StartOfNextHatchLine)\n             );\n\tWR22 : NOT(EXISTS(PatternStart)) \n             OR (PatternStart.Dim = 2);\n\tWR23 : NOT(EXISTS(PointOfReferenceHatchLine)) \n             OR (PointOfReferenceHatchLine.Dim = 2);\nEND_ENTITY;\n\nENTITY IfcFillAreaStyleTileSymbolWithStyle\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSymbol : IfcAnnotationSymbolOccurrence;\nEND_ENTITY;\n\nENTITY IfcFillAreaStyleTiles\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tTilingPattern : IfcOneDirectionRepeatFactor;\n\tTiles : SET [1:?] OF IfcFillAreaStyleTileShapeSelect;\n\tTilingScale : IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcFilterType\n SUBTYPE OF (IfcFlowTreatmentDeviceType);\n\tPredefinedType : IfcFilterTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcFilterTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcFilterTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFireSuppressionTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcFireSuppressionTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcFlowController\n SUPERTYPE OF (ONEOF\n\t(IfcElectricDistributionPoint))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowControllerType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAirTerminalBoxType\n\t,IfcDamperType\n\t,IfcElectricTimeControlType\n\t,IfcFlowMeterType\n\t,IfcProtectiveDeviceType\n\t,IfcSwitchingDeviceType\n\t,IfcValveType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowFitting\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowFittingType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCableCarrierFittingType\n\t,IfcDuctFittingType\n\t,IfcJunctionBoxType\n\t,IfcPipeFittingType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowInstrumentType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcFlowInstrumentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcFlowMeterType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcFlowMeterTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcFlowMeterTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcFlowMeterTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFlowMovingDevice\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowMovingDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCompressorType\n\t,IfcFanType\n\t,IfcPumpType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowSegment\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowSegmentType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCableCarrierSegmentType\n\t,IfcCableSegmentType\n\t,IfcDuctSegmentType\n\t,IfcPipeSegmentType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowStorageDevice\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowStorageDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcElectricFlowStorageDeviceType\n\t,IfcTankType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowTerminal\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowTerminalType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAirTerminalType\n\t,IfcElectricApplianceType\n\t,IfcElectricHeaterType\n\t,IfcFireSuppressionTerminalType\n\t,IfcGasTerminalType\n\t,IfcLampType\n\t,IfcLightFixtureType\n\t,IfcOutletType\n\t,IfcSanitaryTerminalType\n\t,IfcStackTerminalType\n\t,IfcWasteTerminalType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowTreatmentDevice\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowTreatmentDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDuctSilencerType\n\t,IfcFilterType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFluidFlowProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tPropertySource : IfcPropertySourceEnum;\n\tFlowConditionTimeSeries : OPTIONAL IfcTimeSeries;\n\tVelocityTimeSeries : OPTIONAL IfcTimeSeries;\n\tFlowrateTimeSeries : OPTIONAL IfcTimeSeries;\n\tFluid : IfcMaterial;\n\tPressureTimeSeries : OPTIONAL IfcTimeSeries;\n\tUserDefinedPropertySource : OPTIONAL IfcLabel;\n\tTemperatureSingleValue : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tWetBulbTemperatureSingleValue : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tWetBulbTemperatureTimeSeries : OPTIONAL IfcTimeSeries;\n\tTemperatureTimeSeries : OPTIONAL IfcTimeSeries;\n\tFlowrateSingleValue : OPTIONAL IfcDerivedMeasureValue;\n\tFlowConditionSingleValue : OPTIONAL IfcPositiveRatioMeasure;\n\tVelocitySingleValue : OPTIONAL IfcLinearVelocityMeasure;\n\tPressureSingleValue : OPTIONAL IfcPressureMeasure;\nEND_ENTITY;\n\nENTITY IfcFooting\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : IfcFootingTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcFuelProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tCombustionTemperature : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tCarbonContent : OPTIONAL IfcPositiveRatioMeasure;\n\tLowerHeatingValue : OPTIONAL IfcHeatingValueMeasure;\n\tHigherHeatingValue : OPTIONAL IfcHeatingValueMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcFurnishingElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcFurnishingElementType\n SUPERTYPE OF (ONEOF\n\t(IfcFurnitureType\n\t,IfcSystemFurnitureElementType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcFurnitureStandard\n SUBTYPE OF (IfcControl);\nEND_ENTITY;\n\nENTITY IfcFurnitureType\n SUBTYPE OF (IfcFurnishingElementType);\n\tAssemblyPlace : IfcAssemblyPlaceEnum;\nEND_ENTITY;\n\nENTITY IfcGasTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcGasTerminalTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcGasTerminalTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcGasTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcGeneralMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tMolecularWeight : OPTIONAL IfcMolecularWeightMeasure;\n\tPorosity : OPTIONAL IfcNormalisedRatioMeasure;\n\tMassDensity : OPTIONAL IfcMassDensityMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcGeneralProfileProperties\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralProfileProperties))\n SUBTYPE OF (IfcProfileProperties);\n\tPhysicalWeight : OPTIONAL IfcMassPerLengthMeasure;\n\tPerimeter : OPTIONAL IfcPositiveLengthMeasure;\n\tMinimumPlateThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tMaximumPlateThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tCrossSectionArea : OPTIONAL IfcAreaMeasure;\n WHERE\n\tWR1 : NOT(EXISTS(CrossSectionArea)) OR (CrossSectionArea > 0.);\nEND_ENTITY;\n\nENTITY IfcGeometricCurveSet\n SUBTYPE OF (IfcGeometricSet);\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcGeometricSet.Elements |\n            'IFC2X3.IFCSURFACE' IN TYPEOF(Temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationContext\n SUPERTYPE OF (ONEOF\n\t(IfcGeometricRepresentationSubContext))\n SUBTYPE OF (IfcRepresentationContext);\n\tCoordinateSpaceDimension : IfcDimensionCount;\n\tPrecision : OPTIONAL REAL;\n\tWorldCoordinateSystem : IfcAxis2Placement;\n\tTrueNorth : OPTIONAL IfcDirection;\n INVERSE\n\tHasSubContexts : SET [0:?] OF IfcGeometricRepresentationSubContext FOR ParentContext;\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAnnotationFillArea\n\t,IfcAnnotationSurface\n\t,IfcBooleanResult\n\t,IfcBoundingBox\n\t,IfcCartesianTransformationOperator\n\t,IfcCompositeCurveSegment\n\t,IfcCsgPrimitive3D\n\t,IfcCurve\n\t,IfcDefinedSymbol\n\t,IfcDirection\n\t,IfcDraughtingCallout\n\t,IfcFaceBasedSurfaceModel\n\t,IfcFillAreaStyleHatching\n\t,IfcFillAreaStyleTileSymbolWithStyle\n\t,IfcFillAreaStyleTiles\n\t,IfcGeometricSet\n\t,IfcHalfSpaceSolid\n\t,IfcLightSource\n\t,IfcOneDirectionRepeatFactor\n\t,IfcPlacement\n\t,IfcPlanarExtent\n\t,IfcPoint\n\t,IfcSectionedSpine\n\t,IfcShellBasedSurfaceModel\n\t,IfcSolidModel\n\t,IfcSurface\n\t,IfcTextLiteral\n\t,IfcVector))\n SUBTYPE OF (IfcRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationSubContext\n SUBTYPE OF (IfcGeometricRepresentationContext);\n\tParentContext : IfcGeometricRepresentationContext;\n\tTargetScale : OPTIONAL IfcPositiveRatioMeasure;\n\tTargetView : IfcGeometricProjectionEnum;\n\tUserDefinedTargetView : OPTIONAL IfcLabel;\n DERIVE\n\tSELF\\IfcGeometricRepresentationContext.WorldCoordinateSystem : IfcAxis2Placement := ParentContext.WorldCoordinateSystem;\n\tSELF\\IfcGeometricRepresentationContext.CoordinateSpaceDimension : IfcDimensionCount := ParentContext.CoordinateSpaceDimension;\n\tSELF\\IfcGeometricRepresentationContext.TrueNorth : IfcDirection := NVL(ParentContext.TrueNorth,SELF.WorldCoordinateSystem.P[2]);\n\tSELF\\IfcGeometricRepresentationContext.Precision : REAL := NVL(ParentContext.Precision,1.E-5);\n WHERE\n\tWR31 : NOT('IFC2X3.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(ParentContext));\n\tWR32 : (TargetView <> IfcGeometricProjectionEnum.USERDEFINED) OR \n             ((TargetView =  IfcGeometricProjectionEnum.USERDEFINED) AND \n              EXISTS(UserDefinedTargetView));\nEND_ENTITY;\n\nENTITY IfcGeometricSet\n SUPERTYPE OF (ONEOF\n\t(IfcGeometricCurveSet))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tElements : SET [1:?] OF IfcGeometricSetSelect;\n DERIVE\n\tDim : IfcDimensionCount := Elements[1].Dim;\n WHERE\n\tWR21 : SIZEOF(QUERY(Temp <* Elements |\n               Temp.Dim <> Elements[1].Dim))\n             = 0;\nEND_ENTITY;\n\nENTITY IfcGrid\n SUBTYPE OF (IfcProduct);\n\tUAxes : LIST [1:?] OF UNIQUE IfcGridAxis;\n\tVAxes : LIST [1:?] OF UNIQUE IfcGridAxis;\n\tWAxes : OPTIONAL LIST [1:?] OF UNIQUE IfcGridAxis;\n INVERSE\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\n WHERE\n\tWR41 : EXISTS(SELF\\IfcProduct.ObjectPlacement);\nEND_ENTITY;\n\nENTITY IfcGridAxis;\n\tAxisTag : OPTIONAL IfcLabel;\n\tAxisCurve : IfcCurve;\n\tSameSense : IfcBoolean;\n INVERSE\n\tPartOfW : SET [0:1] OF IfcGrid FOR WAxes;\n\tPartOfV : SET [0:1] OF IfcGrid FOR VAxes;\n\tPartOfU : SET [0:1] OF IfcGrid FOR UAxes;\n\tHasIntersections : SET [0:?] OF IfcVirtualGridIntersection FOR IntersectingAxes;\n WHERE\n\tWR1 : AxisCurve.Dim = 2;\n\tWR2 : (SIZEOF(PartOfU) = 1) XOR (SIZEOF(PartOfV) = 1) XOR (SIZEOF(PartOfW) = 1);\nEND_ENTITY;\n\nENTITY IfcGridPlacement\n SUBTYPE OF (IfcObjectPlacement);\n\tPlacementLocation : IfcVirtualGridIntersection;\n\tPlacementRefDirection : OPTIONAL IfcVirtualGridIntersection;\nEND_ENTITY;\n\nENTITY IfcGroup\n SUPERTYPE OF (ONEOF\n\t(IfcAsset\n\t,IfcCondition\n\t,IfcInventory\n\t,IfcStructuralLoadGroup\n\t,IfcStructuralResultGroup\n\t,IfcSystem\n\t,IfcZone))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tIsGroupedBy : IfcRelAssignsToGroup FOR RelatingGroup;\nEND_ENTITY;\n\nENTITY IfcHalfSpaceSolid\n SUPERTYPE OF (ONEOF\n\t(IfcBoxedHalfSpace\n\t,IfcPolygonalBoundedHalfSpace))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tBaseSurface : IfcSurface;\n\tAgreementFlag : BOOLEAN;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcHeatExchangerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcHeatExchangerTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcHeatExchangerTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcHeatExchangerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcHumidifierType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcHumidifierTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcHumidifierTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcHumidifierTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcHygroscopicMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tUpperVaporResistanceFactor : OPTIONAL IfcPositiveRatioMeasure;\n\tLowerVaporResistanceFactor : OPTIONAL IfcPositiveRatioMeasure;\n\tIsothermalMoistureCapacity : OPTIONAL IfcIsothermalMoistureCapacityMeasure;\n\tVaporPermeability : OPTIONAL IfcVaporPermeabilityMeasure;\n\tMoistureDiffusivity : OPTIONAL IfcMoistureDiffusivityMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcIShapeProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcAsymmetricIShapeProfileDef))\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tOverallWidth : IfcPositiveLengthMeasure;\n\tOverallDepth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : FlangeThickness < (OverallDepth / 2.);\n\tWR2 : WebThickness < OverallWidth;\n\tWR3 : NOT(EXISTS(FilletRadius)) OR\n            ((FilletRadius <= (OverallWidth - WebThickness)/2.) AND \n             (FilletRadius <= (OverallDepth - (2. * FlangeThickness))/2.));\nEND_ENTITY;\n\nENTITY IfcImageTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tUrlReference : IfcIdentifier;\nEND_ENTITY;\n\nENTITY IfcInventory\n SUBTYPE OF (IfcGroup);\n\tInventoryType : IfcInventoryTypeEnum;\n\tJurisdiction : IfcActorSelect;\n\tResponsiblePersons : SET [1:?] OF IfcPerson;\n\tLastUpdateDate : IfcCalendarDate;\n\tCurrentValue : OPTIONAL IfcCostValue;\n\tOriginalValue : OPTIONAL IfcCostValue;\n WHERE\n\tWR41 : SIZEOF(QUERY(temp <* SELF\\IfcGroup.IsGroupedBy.RelatedObjects |\n                 NOT( ('IFC2X3.IFCSPACE' IN TYPEOF (temp)) OR \n                      ('IFC2X3.IFCASSET' IN TYPEOF (temp)) OR\n                      ('IFC2X3.IFCFURNISHINGELEMENT' IN TYPEOF (temp))\n                 ))) = 0;\nEND_ENTITY;\n\nENTITY IfcIrregularTimeSeries\n SUBTYPE OF (IfcTimeSeries);\n\tValues : LIST [1:?] OF IfcIrregularTimeSeriesValue;\nEND_ENTITY;\n\nENTITY IfcIrregularTimeSeriesValue;\n\tTimeStamp : IfcDateTimeSelect;\n\tListValues : LIST [1:?] OF IfcValue;\nEND_ENTITY;\n\nENTITY IfcJunctionBoxType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcJunctionBoxTypeEnum;\nEND_ENTITY;\n\nENTITY IfcLShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tLegSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tCentreOfGravityInX : OPTIONAL IfcPositiveLengthMeasure;\n\tCentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR21 : Thickness < Depth;\n\tWR22 : NOT(EXISTS(Width)) OR (Thickness < Width);\nEND_ENTITY;\n\nENTITY IfcLaborResource\n SUBTYPE OF (IfcConstructionResource);\n\tSkillSet : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcLampType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcLampTypeEnum;\nEND_ENTITY;\n\nENTITY IfcLibraryInformation;\n\tName : IfcLabel;\n\tVersion : OPTIONAL IfcLabel;\n\tPublisher : OPTIONAL IfcOrganization;\n\tVersionDate : OPTIONAL IfcCalendarDate;\n\tLibraryReference : OPTIONAL SET [1:?] OF IfcLibraryReference;\nEND_ENTITY;\n\nENTITY IfcLibraryReference\n SUBTYPE OF (IfcExternalReference);\n INVERSE\n\tReferenceIntoLibrary : SET [0:1] OF IfcLibraryInformation FOR LibraryReference;\nEND_ENTITY;\n\nENTITY IfcLightDistributionData;\n\tMainPlaneAngle : IfcPlaneAngleMeasure;\n\tSecondaryPlaneAngle : LIST [1:?] OF IfcPlaneAngleMeasure;\n\tLuminousIntensity : LIST [1:?] OF IfcLuminousIntensityDistributionMeasure;\nEND_ENTITY;\n\nENTITY IfcLightFixtureType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcLightFixtureTypeEnum;\nEND_ENTITY;\n\nENTITY IfcLightIntensityDistribution;\n\tLightDistributionCurve : IfcLightDistributionCurveEnum;\n\tDistributionData : LIST [1:?] OF IfcLightDistributionData;\nEND_ENTITY;\n\nENTITY IfcLightSource\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcLightSourceAmbient\n\t,IfcLightSourceDirectional\n\t,IfcLightSourceGoniometric\n\t,IfcLightSourcePositional))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tName : OPTIONAL IfcLabel;\n\tLightColour : IfcColourRgb;\n\tAmbientIntensity : OPTIONAL IfcNormalisedRatioMeasure;\n\tIntensity : OPTIONAL IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcLightSourceAmbient\n SUBTYPE OF (IfcLightSource);\nEND_ENTITY;\n\nENTITY IfcLightSourceDirectional\n SUBTYPE OF (IfcLightSource);\n\tOrientation : IfcDirection;\nEND_ENTITY;\n\nENTITY IfcLightSourceGoniometric\n SUBTYPE OF (IfcLightSource);\n\tPosition : IfcAxis2Placement3D;\n\tColourAppearance : OPTIONAL IfcColourRgb;\n\tColourTemperature : IfcThermodynamicTemperatureMeasure;\n\tLuminousFlux : IfcLuminousFluxMeasure;\n\tLightEmissionSource : IfcLightEmissionSourceEnum;\n\tLightDistributionDataSource : IfcLightDistributionDataSourceSelect;\nEND_ENTITY;\n\nENTITY IfcLightSourcePositional\n SUPERTYPE OF (ONEOF\n\t(IfcLightSourceSpot))\n SUBTYPE OF (IfcLightSource);\n\tPosition : IfcCartesianPoint;\n\tRadius : IfcPositiveLengthMeasure;\n\tConstantAttenuation : IfcReal;\n\tDistanceAttenuation : IfcReal;\n\tQuadricAttenuation : IfcReal;\nEND_ENTITY;\n\nENTITY IfcLightSourceSpot\n SUBTYPE OF (IfcLightSourcePositional);\n\tOrientation : IfcDirection;\n\tConcentrationExponent : OPTIONAL IfcReal;\n\tSpreadAngle : IfcPositivePlaneAngleMeasure;\n\tBeamWidthAngle : IfcPositivePlaneAngleMeasure;\nEND_ENTITY;\n\nENTITY IfcLine\n SUBTYPE OF (IfcCurve);\n\tPnt : IfcCartesianPoint;\n\tDir : IfcVector;\n WHERE\n\tWR1 : Dir.Dim = Pnt.Dim;\nEND_ENTITY;\n\nENTITY IfcLinearDimension\n SUBTYPE OF (IfcDimensionCurveDirectedCallout);\nEND_ENTITY;\n\nENTITY IfcLocalPlacement\n SUBTYPE OF (IfcObjectPlacement);\n\tPlacementRelTo : OPTIONAL IfcObjectPlacement;\n\tRelativePlacement : IfcAxis2Placement;\n WHERE\n\tWR21 : IfcCorrectLocalPlacement(RelativePlacement, PlacementRelTo);\nEND_ENTITY;\n\nENTITY IfcLocalTime;\n\tHourComponent : IfcHourInDay;\n\tMinuteComponent : OPTIONAL IfcMinuteInHour;\n\tSecondComponent : OPTIONAL IfcSecondInMinute;\n\tZone : OPTIONAL IfcCoordinatedUniversalTimeOffset;\n\tDaylightSavingOffset : OPTIONAL IfcDaylightSavingHour;\n WHERE\n\tWR21 : IfcValidTime (SELF);\nEND_ENTITY;\n\nENTITY IfcLoop\n SUPERTYPE OF (ONEOF\n\t(IfcEdgeLoop\n\t,IfcPolyLoop\n\t,IfcVertexLoop))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcManifoldSolidBrep\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcFacetedBrep\n\t,IfcFacetedBrepWithVoids))\n SUBTYPE OF (IfcSolidModel);\n\tOuter : IfcClosedShell;\nEND_ENTITY;\n\nENTITY IfcMappedItem\n SUBTYPE OF (IfcRepresentationItem);\n\tMappingSource : IfcRepresentationMap;\n\tMappingTarget : IfcCartesianTransformationOperator;\nEND_ENTITY;\n\nENTITY IfcMaterial;\n\tName : IfcLabel;\n INVERSE\n\tHasRepresentation : SET [0:1] OF IfcMaterialDefinitionRepresentation FOR RepresentedMaterial;\n\tClassifiedAs : SET [0:1] OF IfcMaterialClassificationRelationship FOR ClassifiedMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialClassificationRelationship;\n\tMaterialClassifications : SET [1:?] OF IfcClassificationNotationSelect;\n\tClassifiedMaterial : IfcMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialDefinitionRepresentation\n SUBTYPE OF (IfcProductRepresentation);\n\tRepresentedMaterial : IfcMaterial;\n WHERE\n\tWR11 : SIZEOF(QUERY(temp <* Representations | \n               (NOT('IFC2X3.IFCSTYLEDREPRESENTATION' IN TYPEOF(temp)))\n             )) = 0;\nEND_ENTITY;\n\nENTITY IfcMaterialLayer;\n\tMaterial : OPTIONAL IfcMaterial;\n\tLayerThickness : IfcPositiveLengthMeasure;\n\tIsVentilated : OPTIONAL IfcLogical;\n INVERSE\n\tToMaterialLayerSet : IfcMaterialLayerSet FOR MaterialLayers;\nEND_ENTITY;\n\nENTITY IfcMaterialLayerSet;\n\tMaterialLayers : LIST [1:?] OF IfcMaterialLayer;\n\tLayerSetName : OPTIONAL IfcLabel;\n DERIVE\n\tTotalThickness : IfcLengthMeasure := IfcMlsTotalThickness(SELF);\nEND_ENTITY;\n\nENTITY IfcMaterialLayerSetUsage;\n\tForLayerSet : IfcMaterialLayerSet;\n\tLayerSetDirection : IfcLayerSetDirectionEnum;\n\tDirectionSense : IfcDirectionSenseEnum;\n\tOffsetFromReferenceLine : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMaterialList;\n\tMaterials : LIST [1:?] OF IfcMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialProperties\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcExtendedMaterialProperties\n\t,IfcFuelProperties\n\t,IfcGeneralMaterialProperties\n\t,IfcHygroscopicMaterialProperties\n\t,IfcMechanicalMaterialProperties\n\t,IfcOpticalMaterialProperties\n\t,IfcProductsOfCombustionProperties\n\t,IfcThermalMaterialProperties\n\t,IfcWaterProperties));\n\tMaterial : IfcMaterial;\nEND_ENTITY;\n\nENTITY IfcMeasureWithUnit;\n\tValueComponent : IfcValue;\n\tUnitComponent : IfcUnit;\nEND_ENTITY;\n\nENTITY IfcMechanicalConcreteMaterialProperties\n SUBTYPE OF (IfcMechanicalMaterialProperties);\n\tCompressiveStrength : OPTIONAL IfcPressureMeasure;\n\tMaxAggregateSize : OPTIONAL IfcPositiveLengthMeasure;\n\tAdmixturesDescription : OPTIONAL IfcText;\n\tWorkability : OPTIONAL IfcText;\n\tProtectivePoreRatio : OPTIONAL IfcNormalisedRatioMeasure;\n\tWaterImpermeability : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcMechanicalFastener\n SUBTYPE OF (IfcFastener);\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tNominalLength : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMechanicalFastenerType\n SUBTYPE OF (IfcFastenerType);\nEND_ENTITY;\n\nENTITY IfcMechanicalMaterialProperties\n SUPERTYPE OF (ONEOF\n\t(IfcMechanicalConcreteMaterialProperties\n\t,IfcMechanicalSteelMaterialProperties))\n SUBTYPE OF (IfcMaterialProperties);\n\tDynamicViscosity : OPTIONAL IfcDynamicViscosityMeasure;\n\tYoungModulus : OPTIONAL IfcModulusOfElasticityMeasure;\n\tShearModulus : OPTIONAL IfcModulusOfElasticityMeasure;\n\tPoissonRatio : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalExpansionCoefficient : OPTIONAL IfcThermalExpansionCoefficientMeasure;\n UNIQUE\n\tUR11 : Material;\n WHERE\n\tWR21 : NOT(EXISTS(YoungModulus)) OR (YoungModulus >= 0.0);\n\tWR22 : NOT(EXISTS(ShearModulus)) OR (ShearModulus >= 0.0);\nEND_ENTITY;\n\nENTITY IfcMechanicalSteelMaterialProperties\n SUBTYPE OF (IfcMechanicalMaterialProperties);\n\tYieldStress : OPTIONAL IfcPressureMeasure;\n\tUltimateStress : OPTIONAL IfcPressureMeasure;\n\tUltimateStrain : OPTIONAL IfcPositiveRatioMeasure;\n\tHardeningModule : OPTIONAL IfcModulusOfElasticityMeasure;\n\tProportionalStress : OPTIONAL IfcPressureMeasure;\n\tPlasticStrain : OPTIONAL IfcPositiveRatioMeasure;\n\tRelaxations : OPTIONAL SET [1:?] OF IfcRelaxation;\n WHERE\n\tWR31 : NOT(EXISTS(YieldStress)) OR (YieldStress >= 0.);\n\tWR32 : NOT(EXISTS(UltimateStress)) OR (UltimateStress >= 0.);\n\tWR33 : NOT(EXISTS(HardeningModule)) OR (HardeningModule >= 0.);\n\tWR34 : NOT(EXISTS(ProportionalStress)) OR (ProportionalStress >= 0.);\nEND_ENTITY;\n\nENTITY IfcMember\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcMemberType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcMemberTypeEnum;\nEND_ENTITY;\n\nENTITY IfcMetric\n SUBTYPE OF (IfcConstraint);\n\tBenchmark : IfcBenchmarkEnum;\n\tValueSource : OPTIONAL IfcLabel;\n\tDataValue : IfcMetricValueSelect;\nEND_ENTITY;\n\nENTITY IfcMonetaryUnit;\n\tCurrency : IfcCurrencyEnum;\nEND_ENTITY;\n\nENTITY IfcMotorConnectionType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcMotorConnectionTypeEnum;\nEND_ENTITY;\n\nENTITY IfcMove\n SUBTYPE OF (IfcTask);\n\tMoveFrom : IfcSpatialStructureElement;\n\tMoveTo : IfcSpatialStructureElement;\n\tPunchList : OPTIONAL LIST [1:?] OF UNIQUE IfcText;\n WHERE\n\tWR1 : SIZEOF(SELF\\IfcProcess.OperatesOn) >= 1;\n\tWR2 : SIZEOF(QUERY(temp <* OperatesOn |\n              SIZEOF(QUERY(temp2 <* temp.RelatedObjects |\n                ('IFC2X3.IFCACTOR' IN TYPEOF (temp2)) OR\n                ('IFC2X3.IFCEQUIPMENTELEMENT' IN TYPEOF (temp2)) OR\n                ('IFC2X3.IFCFURNISHINGELEMENT' IN TYPEOF (temp2)) )) >=1\n              )) >= 1;\n\tWR3 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcNamedUnit\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcContextDependentUnit\n\t,IfcConversionBasedUnit\n\t,IfcSIUnit));\n\tDimensions : IfcDimensionalExponents;\n\tUnitType : IfcUnitEnum;\n WHERE\n\tWR1 : IfcCorrectDimensions (SELF.UnitType, SELF.Dimensions);\nEND_ENTITY;\n\nENTITY IfcObject\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcActor\n\t,IfcControl\n\t,IfcGroup\n\t,IfcProcess\n\t,IfcProduct\n\t,IfcProject\n\t,IfcResource))\n SUBTYPE OF (IfcObjectDefinition);\n\tObjectType : OPTIONAL IfcLabel;\n INVERSE\n\tIsDefinedBy : SET [0:?] OF IfcRelDefines FOR RelatedObjects;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* IsDefinedBy | 'IFC2X3.IFCRELDEFINESBYTYPE' IN TYPEOF(temp))) <= 1;\nEND_ENTITY;\n\nENTITY IfcObjectDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcObject\n\t,IfcTypeObject))\n SUBTYPE OF (IfcRoot);\n INVERSE\n\tHasAssignments : SET [0:?] OF IfcRelAssigns FOR RelatedObjects;\n\tIsDecomposedBy : SET [0:?] OF IfcRelDecomposes FOR RelatingObject;\n\tDecomposes : SET [0:1] OF IfcRelDecomposes FOR RelatedObjects;\n\tHasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects;\nEND_ENTITY;\n\nENTITY IfcObjectPlacement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcGridPlacement\n\t,IfcLocalPlacement));\n INVERSE\n\tPlacesObject : SET [1:1] OF IfcProduct FOR ObjectPlacement;\n\tReferencedByPlacements : SET [0:?] OF IfcLocalPlacement FOR PlacementRelTo;\nEND_ENTITY;\n\nENTITY IfcObjective\n SUBTYPE OF (IfcConstraint);\n\tBenchmarkValues : OPTIONAL IfcMetric;\n\tResultValues : OPTIONAL IfcMetric;\n\tObjectiveQualifier : IfcObjectiveEnum;\n\tUserDefinedQualifier : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : (ObjectiveQualifier <> IfcObjectiveEnum.USERDEFINED) OR\n             ((ObjectiveQualifier = IfcObjectiveEnum.USERDEFINED) AND EXISTS(SELF\\IfcObjective.UserDefinedQualifier));\nEND_ENTITY;\n\nENTITY IfcOccupant\n SUBTYPE OF (IfcActor);\n\tPredefinedType : IfcOccupantTypeEnum;\n WHERE\n\tWR31 : NOT(PredefinedType = IfcOccupantTypeEnum.USERDEFINED) \n             OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcOffsetCurve2D\n SUBTYPE OF (IfcCurve);\n\tBasisCurve : IfcCurve;\n\tDistance : IfcLengthMeasure;\n\tSelfIntersect : LOGICAL;\n WHERE\n\tWR1 : BasisCurve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcOffsetCurve3D\n SUBTYPE OF (IfcCurve);\n\tBasisCurve : IfcCurve;\n\tDistance : IfcLengthMeasure;\n\tSelfIntersect : LOGICAL;\n\tRefDirection : IfcDirection;\n WHERE\n\tWR1 : BasisCurve.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcOneDirectionRepeatFactor\n SUPERTYPE OF (ONEOF\n\t(IfcTwoDirectionRepeatFactor))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tRepeatFactor : IfcVector;\nEND_ENTITY;\n\nENTITY IfcOpenShell\n SUBTYPE OF (IfcConnectedFaceSet);\nEND_ENTITY;\n\nENTITY IfcOpeningElement\n SUBTYPE OF (IfcFeatureElementSubtraction);\n INVERSE\n\tHasFillings : SET [0:?] OF IfcRelFillsElement FOR RelatingOpeningElement;\nEND_ENTITY;\n\nENTITY IfcOpticalMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tVisibleTransmittance : OPTIONAL IfcPositiveRatioMeasure;\n\tSolarTransmittance : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalIrTransmittance : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalIrEmissivityBack : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalIrEmissivityFront : OPTIONAL IfcPositiveRatioMeasure;\n\tVisibleReflectanceBack : OPTIONAL IfcPositiveRatioMeasure;\n\tVisibleReflectanceFront : OPTIONAL IfcPositiveRatioMeasure;\n\tSolarReflectanceFront : OPTIONAL IfcPositiveRatioMeasure;\n\tSolarReflectanceBack : OPTIONAL IfcPositiveRatioMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcOrderAction\n SUBTYPE OF (IfcTask);\n\tActionID : IfcIdentifier;\n UNIQUE\n\tUR2 : ActionID;\nEND_ENTITY;\n\nENTITY IfcOrganization;\n\tId : OPTIONAL IfcIdentifier;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\n\tAddresses : OPTIONAL LIST [1:?] OF IfcAddress;\n INVERSE\n\tIsRelatedBy : SET [0:?] OF IfcOrganizationRelationship FOR RelatedOrganizations;\n\tRelates : SET [0:?] OF IfcOrganizationRelationship FOR RelatingOrganization;\n\tEngages : SET [0:?] OF IfcPersonAndOrganization FOR TheOrganization;\nEND_ENTITY;\n\nENTITY IfcOrganizationRelationship;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRelatingOrganization : IfcOrganization;\n\tRelatedOrganizations : SET [1:?] OF IfcOrganization;\nEND_ENTITY;\n\nENTITY IfcOrientedEdge\n SUBTYPE OF (IfcEdge);\n\tEdgeElement : IfcEdge;\n\tOrientation : BOOLEAN;\n DERIVE\n\tSELF\\IfcEdge.EdgeStart : IfcVertex := IfcBooleanChoose \n                               (Orientation, EdgeElement.EdgeStart, EdgeElement.EdgeEnd);\n\tSELF\\IfcEdge.EdgeEnd : IfcVertex := IfcBooleanChoose \n                               (Orientation, EdgeElement.EdgeEnd, EdgeElement.EdgeStart);\n WHERE\n\tWR1 : NOT('IFC2X3.IFCORIENTEDEDGE' IN TYPEOF(EdgeElement));\nEND_ENTITY;\n\nENTITY IfcOutletType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcOutletTypeEnum;\nEND_ENTITY;\n\nENTITY IfcOwnerHistory;\n\tOwningUser : IfcPersonAndOrganization;\n\tOwningApplication : IfcApplication;\n\tState : OPTIONAL IfcStateEnum;\n\tChangeAction : IfcChangeActionEnum;\n\tLastModifiedDate : OPTIONAL IfcTimeStamp;\n\tLastModifyingUser : OPTIONAL IfcPersonAndOrganization;\n\tLastModifyingApplication : OPTIONAL IfcApplication;\n\tCreationDate : IfcTimeStamp;\nEND_ENTITY;\n\nENTITY IfcParameterizedProfileDef\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCShapeProfileDef\n\t,IfcCircleProfileDef\n\t,IfcCraneRailAShapeProfileDef\n\t,IfcCraneRailFShapeProfileDef\n\t,IfcEllipseProfileDef\n\t,IfcIShapeProfileDef\n\t,IfcLShapeProfileDef\n\t,IfcRectangleProfileDef\n\t,IfcTShapeProfileDef\n\t,IfcTrapeziumProfileDef\n\t,IfcUShapeProfileDef\n\t,IfcZShapeProfileDef))\n SUBTYPE OF (IfcProfileDef);\n\tPosition : IfcAxis2Placement2D;\nEND_ENTITY;\n\nENTITY IfcPath\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tEdgeList : LIST [1:?] OF UNIQUE IfcOrientedEdge;\n WHERE\n\tWR1 : IfcPathHeadToTail(SELF);\nEND_ENTITY;\n\nENTITY IfcPerformanceHistory\n SUBTYPE OF (IfcControl);\n\tLifeCyclePhase : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcPermeableCoveringProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tOperationType : IfcPermeableCoveringOperationEnum;\n\tPanelPosition : IfcWindowPanelPositionEnum;\n\tFrameDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tFrameThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\nEND_ENTITY;\n\nENTITY IfcPermit\n SUBTYPE OF (IfcControl);\n\tPermitID : IfcIdentifier;\n UNIQUE\n\tUR2 : PermitID;\nEND_ENTITY;\n\nENTITY IfcPerson;\n\tId : OPTIONAL IfcIdentifier;\n\tFamilyName : OPTIONAL IfcLabel;\n\tGivenName : OPTIONAL IfcLabel;\n\tMiddleNames : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPrefixTitles : OPTIONAL LIST [1:?] OF IfcLabel;\n\tSuffixTitles : OPTIONAL LIST [1:?] OF IfcLabel;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\n\tAddresses : OPTIONAL LIST [1:?] OF IfcAddress;\n INVERSE\n\tEngagedIn : SET [0:?] OF IfcPersonAndOrganization FOR ThePerson;\n WHERE\n\tWR1 : EXISTS(FamilyName) OR \n            EXISTS(GivenName);\nEND_ENTITY;\n\nENTITY IfcPersonAndOrganization;\n\tThePerson : IfcPerson;\n\tTheOrganization : IfcOrganization;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\nEND_ENTITY;\n\nENTITY IfcPhysicalComplexQuantity\n SUBTYPE OF (IfcPhysicalQuantity);\n\tHasQuantities : SET [1:?] OF IfcPhysicalQuantity;\n\tDiscrimination : IfcLabel;\n\tQuality : OPTIONAL IfcLabel;\n\tUsage : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* HasQuantities | SELF :=: temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcPhysicalQuantity\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPhysicalComplexQuantity\n\t,IfcPhysicalSimpleQuantity));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tPartOfComplex : SET [0:1] OF IfcPhysicalComplexQuantity FOR HasQuantities;\nEND_ENTITY;\n\nENTITY IfcPhysicalSimpleQuantity\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcQuantityArea\n\t,IfcQuantityCount\n\t,IfcQuantityLength\n\t,IfcQuantityTime\n\t,IfcQuantityVolume\n\t,IfcQuantityWeight))\n SUBTYPE OF (IfcPhysicalQuantity);\n\tUnit : OPTIONAL IfcNamedUnit;\nEND_ENTITY;\n\nENTITY IfcPile\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : IfcPileTypeEnum;\n\tConstructionType : OPTIONAL IfcPileConstructionEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcPipeFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcPipeFittingTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcPipeFittingTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcPipeFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcPipeSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcPipeSegmentTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcPipeSegmentTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcPipeSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcPixelTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tWidth : IfcInteger;\n\tHeight : IfcInteger;\n\tColourComponents : IfcInteger;\n\tPixel : LIST [1:?] OF BINARY(32);\n WHERE\n\tWR21 : Width >= 1;\n\tWR22 : Height >= 1;\n\tWR23 : {1 <= ColourComponents <= 4};\n\tWR24 : SIZEOF(Pixel) = (Width * Height);\nEND_ENTITY;\n\nENTITY IfcPlacement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAxis1Placement\n\t,IfcAxis2Placement2D\n\t,IfcAxis2Placement3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tLocation : IfcCartesianPoint;\n DERIVE\n\tDim : IfcDimensionCount := Location.Dim;\nEND_ENTITY;\n\nENTITY IfcPlanarBox\n SUBTYPE OF (IfcPlanarExtent);\n\tPlacement : IfcAxis2Placement;\nEND_ENTITY;\n\nENTITY IfcPlanarExtent\n SUPERTYPE OF (ONEOF\n\t(IfcPlanarBox))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSizeInX : IfcLengthMeasure;\n\tSizeInY : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcPlane\n SUBTYPE OF (IfcElementarySurface);\nEND_ENTITY;\n\nENTITY IfcPlate\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcPlateType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcPlateTypeEnum;\nEND_ENTITY;\n\nENTITY IfcPoint\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCartesianPoint\n\t,IfcPointOnCurve\n\t,IfcPointOnSurface))\n SUBTYPE OF (IfcGeometricRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcPointOnCurve\n SUBTYPE OF (IfcPoint);\n\tBasisCurve : IfcCurve;\n\tPointParameter : IfcParameterValue;\n DERIVE\n\tDim : IfcDimensionCount := BasisCurve.Dim;\nEND_ENTITY;\n\nENTITY IfcPointOnSurface\n SUBTYPE OF (IfcPoint);\n\tBasisSurface : IfcSurface;\n\tPointParameterU : IfcParameterValue;\n\tPointParameterV : IfcParameterValue;\n DERIVE\n\tDim : IfcDimensionCount := BasisSurface.Dim;\nEND_ENTITY;\n\nENTITY IfcPolyLoop\n SUBTYPE OF (IfcLoop);\n\tPolygon : LIST [3:?] OF UNIQUE IfcCartesianPoint;\n WHERE\n\tWR21 : SIZEOF(QUERY(Temp <* Polygon | Temp.Dim <> Polygon[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcPolygonalBoundedHalfSpace\n SUBTYPE OF (IfcHalfSpaceSolid);\n\tPosition : IfcAxis2Placement3D;\n\tPolygonalBoundary : IfcBoundedCurve;\n WHERE\n\tWR41 : PolygonalBoundary.Dim = 2;\n\tWR42 : SIZEOF(TYPEOF(PolygonalBoundary) * [\n               'IFC2X3.IFCPOLYLINE', \n               'IFC2X3.IFCCOMPOSITECURVE']\n             ) = 1;\nEND_ENTITY;\n\nENTITY IfcPolyline\n SUBTYPE OF (IfcBoundedCurve);\n\tPoints : LIST [2:?] OF IfcCartesianPoint;\n WHERE\n\tWR41 : SIZEOF(QUERY(Temp <* Points | Temp.Dim <> Points[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcPort\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDistributionPort))\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tContainedIn : IfcRelConnectsPortToElement FOR RelatingPort;\n\tConnectedFrom : SET [0:1] OF IfcRelConnectsPorts FOR RelatedPort;\n\tConnectedTo : SET [0:1] OF IfcRelConnectsPorts FOR RelatingPort;\nEND_ENTITY;\n\nENTITY IfcPostalAddress\n SUBTYPE OF (IfcAddress);\n\tInternalLocation : OPTIONAL IfcLabel;\n\tAddressLines : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPostalBox : OPTIONAL IfcLabel;\n\tTown : OPTIONAL IfcLabel;\n\tRegion : OPTIONAL IfcLabel;\n\tPostalCode : OPTIONAL IfcLabel;\n\tCountry : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS (InternalLocation) OR \n            EXISTS (AddressLines) OR\n            EXISTS (PostalBox) OR\n            EXISTS (PostalCode) OR\n            EXISTS (Town) OR \n            EXISTS (Region) OR  \n            EXISTS (Country);\nEND_ENTITY;\n\nENTITY IfcPreDefinedColour\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDraughtingPreDefinedColour))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPreDefinedCurveFont\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDraughtingPreDefinedCurveFont))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPreDefinedDimensionSymbol\n SUBTYPE OF (IfcPreDefinedSymbol);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['arc length','conical taper','counterbore',\n                  'countersink','depth','diameter','plus minus','radius',\n                  'slope','spherical diameter','spherical radius','square'];\nEND_ENTITY;\n\nENTITY IfcPreDefinedItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPreDefinedColour\n\t,IfcPreDefinedCurveFont\n\t,IfcPreDefinedSymbol\n\t,IfcPreDefinedTextFont));\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcPreDefinedPointMarkerSymbol\n SUBTYPE OF (IfcPreDefinedSymbol);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['asterisk','circle','dot','plus','square','triangle','x'];\nEND_ENTITY;\n\nENTITY IfcPreDefinedSymbol\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPreDefinedDimensionSymbol\n\t,IfcPreDefinedPointMarkerSymbol\n\t,IfcPreDefinedTerminatorSymbol))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPreDefinedTerminatorSymbol\n SUBTYPE OF (IfcPreDefinedSymbol);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['blanked arrow','blanked box',\n                 'blanked dot','dimension origin','filled arrow','filled box',\n                 'filled dot','integral symbol','open arrow','slash','unfilled arrow'];\nEND_ENTITY;\n\nENTITY IfcPreDefinedTextFont\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDraughtingPreDefinedTextFont\n\t,IfcTextStyleFontModel))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPresentationLayerAssignment\n SUPERTYPE OF (ONEOF\n\t(IfcPresentationLayerWithStyle));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tAssignedItems : SET [1:?] OF IfcLayeredItem;\n\tIdentifier : OPTIONAL IfcIdentifier;\nEND_ENTITY;\n\nENTITY IfcPresentationLayerWithStyle\n SUBTYPE OF (IfcPresentationLayerAssignment);\n\tLayerOn : LOGICAL;\n\tLayerFrozen : LOGICAL;\n\tLayerBlocked : LOGICAL;\n\tLayerStyles : SET [0:?] OF IfcPresentationStyleSelect;\nEND_ENTITY;\n\nENTITY IfcPresentationStyle\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCurveStyle\n\t,IfcFillAreaStyle\n\t,IfcSurfaceStyle\n\t,IfcSymbolStyle\n\t,IfcTextStyle));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcPresentationStyleAssignment;\n\tStyles : SET [1:?] OF IfcPresentationStyleSelect;\nEND_ENTITY;\n\nENTITY IfcProcedure\n SUBTYPE OF (IfcProcess);\n\tProcedureID : IfcIdentifier;\n\tProcedureType : IfcProcedureTypeEnum;\n\tUserDefinedProcedureType : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* SELF\\IfcObjectDefinition.Decomposes | NOT('IFC2X3.IFCRELNESTS' IN TYPEOF(temp)))) = 0;\n\tWR2 : SIZEOF(QUERY(temp <* SELF\\IfcObjectDefinition.IsDecomposedBy | NOT('IFC2X3.IFCRELNESTS' IN TYPEOF(temp)))) = 0;\n\tWR3 : EXISTS(SELF\\IfcRoot.Name);\n\tWR4 : (ProcedureType <> IfcProcedureTypeEnum.USERDEFINED) OR\n            ((ProcedureType = IfcProcedureTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcProcedure.UserDefinedProcedureType));\nEND_ENTITY;\n\nENTITY IfcProcess\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcProcedure\n\t,IfcTask))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tOperatesOn : SET [0:?] OF IfcRelAssignsToProcess FOR RelatingProcess;\n\tIsSuccessorFrom : SET [0:?] OF IfcRelSequence FOR RelatedProcess;\n\tIsPredecessorTo : SET [0:?] OF IfcRelSequence FOR RelatingProcess;\nEND_ENTITY;\n\nENTITY IfcProduct\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAnnotation\n\t,IfcElement\n\t,IfcGrid\n\t,IfcPort\n\t,IfcProxy\n\t,IfcSpatialStructureElement\n\t,IfcStructuralActivity\n\t,IfcStructuralItem))\n SUBTYPE OF (IfcObject);\n\tObjectPlacement : OPTIONAL IfcObjectPlacement;\n\tRepresentation : OPTIONAL IfcProductRepresentation;\n INVERSE\n\tReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct;\n WHERE\n\tWR1 : (EXISTS(Representation) AND EXISTS(ObjectPlacement))\n                        OR (EXISTS(Representation) AND \n                           (NOT('IFC2X3.IFCPRODUCTDEFINITIONSHAPE' IN TYPEOF(Representation))))\n                        OR (NOT(EXISTS(Representation)));\nEND_ENTITY;\n\nENTITY IfcProductDefinitionShape\n SUBTYPE OF (IfcProductRepresentation);\n INVERSE\n\tShapeOfProduct : SET [1:1] OF IfcProduct FOR Representation;\n\tHasShapeAspects : SET [0:?] OF IfcShapeAspect FOR PartOfProductDefinitionShape;\n WHERE\n\tWR11 : SIZEOF(QUERY(temp <* Representations | \n               (NOT('IFC2X3.IFCSHAPEMODEL' IN TYPEOF(temp)))\n             )) = 0;\nEND_ENTITY;\n\nENTITY IfcProductRepresentation\n SUPERTYPE OF (ONEOF\n\t(IfcMaterialDefinitionRepresentation\n\t,IfcProductDefinitionShape));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRepresentations : LIST [1:?] OF IfcRepresentation;\nEND_ENTITY;\n\nENTITY IfcProductsOfCombustionProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tSpecificHeatCapacity : OPTIONAL IfcSpecificHeatCapacityMeasure;\n\tN20Content : OPTIONAL IfcPositiveRatioMeasure;\n\tCOContent : OPTIONAL IfcPositiveRatioMeasure;\n\tCO2Content : OPTIONAL IfcPositiveRatioMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcProfileDef\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcArbitraryClosedProfileDef\n\t,IfcArbitraryOpenProfileDef\n\t,IfcCompositeProfileDef\n\t,IfcDerivedProfileDef\n\t,IfcParameterizedProfileDef));\n\tProfileType : IfcProfileTypeEnum;\n\tProfileName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcProfileProperties\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcGeneralProfileProperties\n\t,IfcRibPlateProfileProperties));\n\tProfileName : OPTIONAL IfcLabel;\n\tProfileDefinition : OPTIONAL IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcProject\n SUBTYPE OF (IfcObject);\n\tLongName : OPTIONAL IfcLabel;\n\tPhase : OPTIONAL IfcLabel;\n\tRepresentationContexts : SET [1:?] OF IfcRepresentationContext;\n\tUnitsInContext : IfcUnitAssignment;\n WHERE\n\tWR31 : EXISTS(SELF\\IfcRoot.Name);\n\tWR32 : SIZEOF(QUERY(Temp <* RepresentationContexts |\n              'IFC2X3.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(Temp)\n             )) = 0;\n\tWR33 : SIZEOF(SELF\\IfcObjectDefinition.Decomposes) = 0;\nEND_ENTITY;\n\nENTITY IfcProjectOrder\n SUBTYPE OF (IfcControl);\n\tID : IfcIdentifier;\n\tPredefinedType : IfcProjectOrderTypeEnum;\n\tStatus : OPTIONAL IfcLabel;\n UNIQUE\n\tUR2 : ID;\nEND_ENTITY;\n\nENTITY IfcProjectOrderRecord\n SUBTYPE OF (IfcControl);\n\tRecords : LIST [1:?] OF UNIQUE IfcRelAssignsToProjectOrder;\n\tPredefinedType : IfcProjectOrderRecordTypeEnum;\nEND_ENTITY;\n\nENTITY IfcProjectionCurve\n SUBTYPE OF (IfcAnnotationCurveOccurrence);\nEND_ENTITY;\n\nENTITY IfcProjectionElement\n SUBTYPE OF (IfcFeatureElementAddition);\nEND_ENTITY;\n\nENTITY IfcProperty\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcComplexProperty\n\t,IfcSimpleProperty));\n\tName : IfcIdentifier;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tPropertyForDependance : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependingProperty;\n\tPropertyDependsOn : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependantProperty;\n\tPartOfComplex : SET [0:1] OF IfcComplexProperty FOR HasProperties;\nEND_ENTITY;\n\nENTITY IfcPropertyBoundedValue\n SUBTYPE OF (IfcSimpleProperty);\n\tUpperBoundValue : OPTIONAL IfcValue;\n\tLowerBoundValue : OPTIONAL IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n WHERE\n\tWR21 : NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(LowerBoundValue)) OR\n             (TYPEOF(UpperBoundValue) = TYPEOF(LowerBoundValue));\n\tWR22 : EXISTS(UpperBoundValue) OR EXISTS(LowerBoundValue);\nEND_ENTITY;\n\nENTITY IfcPropertyConstraintRelationship;\n\tRelatingConstraint : IfcConstraint;\n\tRelatedProperties : SET [1:?] OF IfcProperty;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcPropertyDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPropertySetDefinition))\n SUBTYPE OF (IfcRoot);\n INVERSE\n\tHasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects;\nEND_ENTITY;\n\nENTITY IfcPropertyDependencyRelationship;\n\tDependingProperty : IfcProperty;\n\tDependantProperty : IfcProperty;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tExpression : OPTIONAL IfcText;\n WHERE\n\tWR1 : DependingProperty :<>: DependantProperty;\nEND_ENTITY;\n\nENTITY IfcPropertyEnumeratedValue\n SUBTYPE OF (IfcSimpleProperty);\n\tEnumerationValues : LIST [1:?] OF IfcValue;\n\tEnumerationReference : OPTIONAL IfcPropertyEnumeration;\n WHERE\n\tWR1 : NOT(EXISTS(EnumerationReference)) OR \n               (SIZEOF(QUERY(temp <* EnumerationValues |\n                temp IN EnumerationReference.EnumerationValues))\n                = SIZEOF(EnumerationValues));\nEND_ENTITY;\n\nENTITY IfcPropertyEnumeration;\n\tName : IfcLabel;\n\tEnumerationValues : LIST [1:?] OF UNIQUE IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n UNIQUE\n\tUR1 : Name;\n WHERE\n\tWR01 : SIZEOF(QUERY(temp <* SELF.EnumerationValues | \n               NOT(TYPEOF(SELF.EnumerationValues[1]) = TYPEOF(temp))\n               )) = 0;\nEND_ENTITY;\n\nENTITY IfcPropertyListValue\n SUBTYPE OF (IfcSimpleProperty);\n\tListValues : LIST [1:?] OF IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n WHERE\n\tWR31 : SIZEOF(QUERY(temp <* SELF.ListValues | \n               NOT(TYPEOF(SELF.ListValues[1]) = TYPEOF(temp))\n               )) = 0;\nEND_ENTITY;\n\nENTITY IfcPropertyReferenceValue\n SUBTYPE OF (IfcSimpleProperty);\n\tUsageName : OPTIONAL IfcLabel;\n\tPropertyReference : IfcObjectReferenceSelect;\nEND_ENTITY;\n\nENTITY IfcPropertySet\n SUBTYPE OF (IfcPropertySetDefinition);\n\tHasProperties : SET [1:?] OF IfcProperty;\n WHERE\n\tWR31 : EXISTS(SELF\\IfcRoot.Name);\n\tWR32 : IfcUniquePropertyName(HasProperties);\nEND_ENTITY;\n\nENTITY IfcPropertySetDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDoorLiningProperties\n\t,IfcDoorPanelProperties\n\t,IfcElementQuantity\n\t,IfcEnergyProperties\n\t,IfcFluidFlowProperties\n\t,IfcPermeableCoveringProperties\n\t,IfcPropertySet\n\t,IfcReinforcementDefinitionProperties\n\t,IfcServiceLifeFactor\n\t,IfcSoundProperties\n\t,IfcSoundValue\n\t,IfcSpaceThermalLoadProperties\n\t,IfcWindowLiningProperties\n\t,IfcWindowPanelProperties))\n SUBTYPE OF (IfcPropertyDefinition);\n INVERSE\n\tPropertyDefinitionOf : SET [0:1] OF IfcRelDefinesByProperties FOR RelatingPropertyDefinition;\n\tDefinesType : SET [0:1] OF IfcTypeObject FOR HasPropertySets;\nEND_ENTITY;\n\nENTITY IfcPropertySingleValue\n SUBTYPE OF (IfcSimpleProperty);\n\tNominalValue : OPTIONAL IfcValue;\n\tUnit : OPTIONAL IfcUnit;\nEND_ENTITY;\n\nENTITY IfcPropertyTableValue\n SUBTYPE OF (IfcSimpleProperty);\n\tDefiningValues : LIST [1:?] OF UNIQUE IfcValue;\n\tDefinedValues : LIST [1:?] OF IfcValue;\n\tExpression : OPTIONAL IfcText;\n\tDefiningUnit : OPTIONAL IfcUnit;\n\tDefinedUnit : OPTIONAL IfcUnit;\n WHERE\n\tWR1 : SIZEOF(DefiningValues) = SIZEOF(DefinedValues);\n\tWR2 : SIZEOF(QUERY(temp <* SELF.DefiningValues | TYPEOF(temp) <> TYPEOF(SELF.DefiningValues[1])))=0;\n\tWR3 : SIZEOF(QUERY(temp <* SELF.DefinedValues | TYPEOF(temp) <> TYPEOF(SELF.DefinedValues[1])))=0;\nEND_ENTITY;\n\nENTITY IfcProtectiveDeviceType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcProtectiveDeviceTypeEnum;\nEND_ENTITY;\n\nENTITY IfcProxy\n SUBTYPE OF (IfcProduct);\n\tProxyType : IfcObjectTypeEnum;\n\tTag : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcPumpType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcPumpTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcPumpTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcPumpTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcQuantityArea\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tAreaValue : IfcAreaMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.AREAUNIT);\n\tWR22 : AreaValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityCount\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tCountValue : IfcCountMeasure;\n WHERE\n\tWR21 : CountValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityLength\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tLengthValue : IfcLengthMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.LENGTHUNIT);\n\tWR22 : LengthValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityTime\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tTimeValue : IfcTimeMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.TIMEUNIT);\n\tWR22 : TimeValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityVolume\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tVolumeValue : IfcVolumeMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.VOLUMEUNIT);\n\tWR22 : VolumeValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityWeight\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tWeightValue : IfcMassMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.MASSUNIT);\n\tWR22 : WeightValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcRadiusDimension\n SUBTYPE OF (IfcDimensionCurveDirectedCallout);\nEND_ENTITY;\n\nENTITY IfcRailing\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcRailingTypeEnum;\n WHERE\n\tWR61 : NOT(EXISTS(PredefinedType)) OR\n              (PredefinedType <> IfcRailingTypeEnum.USERDEFINED) OR\n              ((PredefinedType = IfcRailingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcRailingType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcRailingTypeEnum;\nEND_ENTITY;\n\nENTITY IfcRamp\n SUBTYPE OF (IfcBuildingElement);\n\tShapeType : IfcRampTypeEnum;\n WHERE\n\tWR1 : (HIINDEX(SELF\\IfcObjectDefinition.IsDecomposedBy) = 0) OR \n            ((HIINDEX(SELF\\IfcObjectDefinition.IsDecomposedBy) = 1) AND (NOT(EXISTS(SELF\\IfcProduct.Representation))));\nEND_ENTITY;\n\nENTITY IfcRampFlight\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcRampFlightType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcRampFlightTypeEnum;\nEND_ENTITY;\n\nENTITY IfcRationalBezierCurve\n SUBTYPE OF (IfcBezierCurve);\n\tWeightsData : LIST [2:?] OF REAL;\n DERIVE\n\tWeights : ARRAY [0:255] OF REAL := IfcListToArray(WeightsData,0,SELF\\IfcBSplineCurve.UpperIndexOnControlPoints);\n WHERE\n\tWR1 : SIZEOF(WeightsData) = SIZEOF(SELF\\IfcBSplineCurve.ControlPointsList);\n\tWR2 : IfcCurveWeightsPositive(SELF);\nEND_ENTITY;\n\nENTITY IfcRectangleHollowProfileDef\n SUBTYPE OF (IfcRectangleProfileDef);\n\tWallThickness : IfcPositiveLengthMeasure;\n\tInnerFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tOuterFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR31 : (WallThickness < (SELF\\IfcRectangleProfileDef.XDim/2.)) AND \n             (WallThickness < (SELF\\IfcRectangleProfileDef.YDim/2.));\n\tWR32 : NOT(EXISTS(OuterFilletRadius)) OR \n             ((OuterFilletRadius <= (SELF\\IfcRectangleProfileDef.XDim/2.)) AND \n              (OuterFilletRadius <= (SELF\\IfcRectangleProfileDef.YDim/2.)));\n\tWR33 : NOT(EXISTS(InnerFilletRadius)) OR \n             ((InnerFilletRadius <= (SELF\\IfcRectangleProfileDef.XDim/2. - WallThickness)) AND \n              (InnerFilletRadius <= (SELF\\IfcRectangleProfileDef.YDim/2. - WallThickness)));\nEND_ENTITY;\n\nENTITY IfcRectangleProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcRectangleHollowProfileDef\n\t,IfcRoundedRectangleProfileDef))\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRectangularPyramid\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tXLength : IfcPositiveLengthMeasure;\n\tYLength : IfcPositiveLengthMeasure;\n\tHeight : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRectangularTrimmedSurface\n SUBTYPE OF (IfcBoundedSurface);\n\tBasisSurface : IfcSurface;\n\tU1 : IfcParameterValue;\n\tV1 : IfcParameterValue;\n\tU2 : IfcParameterValue;\n\tV2 : IfcParameterValue;\n\tUsense : BOOLEAN;\n\tVsense : BOOLEAN;\n DERIVE\n\tDim : IfcDimensionCount := BasisSurface.Dim;\n WHERE\n\tWR1 : U1 <> U2;\n\tWR2 : V1 <> V2;\n\tWR3 : (('IFC2X3.IFCELEMENTARYSURFACE' IN TYPEOF(BasisSurface)) AND\n                     (NOT ('IFC2X3.IFCPLANE' IN TYPEOF(BasisSurface)))) OR\n                     ('IFC2X3.IFCSURFACEOFREVOLUTION' IN TYPEOF(BasisSurface)) OR\n                     (Usense = (U2 > U1));\n\tWR4 : Vsense = (V2 > V1);\nEND_ENTITY;\n\nENTITY IfcReferencesValueDocument;\n\tReferencedDocument : IfcDocumentSelect;\n\tReferencingValues : SET [1:?] OF IfcAppliedValue;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcRegularTimeSeries\n SUBTYPE OF (IfcTimeSeries);\n\tTimeStep : IfcTimeMeasure;\n\tValues : LIST [1:?] OF IfcTimeSeriesValue;\nEND_ENTITY;\n\nENTITY IfcReinforcementBarProperties;\n\tTotalCrossSectionArea : IfcAreaMeasure;\n\tSteelGrade : IfcLabel;\n\tBarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;\n\tEffectiveDepth : OPTIONAL IfcLengthMeasure;\n\tNominalBarDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tBarCount : OPTIONAL IfcCountMeasure;\nEND_ENTITY;\n\nENTITY IfcReinforcementDefinitionProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tDefinitionType : OPTIONAL IfcLabel;\n\tReinforcementSectionDefinitions : LIST [1:?] OF IfcSectionReinforcementProperties;\nEND_ENTITY;\n\nENTITY IfcReinforcingBar\n SUBTYPE OF (IfcReinforcingElement);\n\tNominalDiameter : IfcPositiveLengthMeasure;\n\tCrossSectionArea : IfcAreaMeasure;\n\tBarLength : OPTIONAL IfcPositiveLengthMeasure;\n\tBarRole : IfcReinforcingBarRoleEnum;\n\tBarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;\n WHERE\n\tWR1 : (BarRole <> IfcReinforcingBarRoleEnum.USERDEFINED) OR ((BarRole = IfcReinforcingBarRoleEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcReinforcingElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcReinforcingBar\n\t,IfcReinforcingMesh\n\t,IfcTendon\n\t,IfcTendonAnchor))\n SUBTYPE OF (IfcBuildingElementComponent);\n\tSteelGrade : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcReinforcingMesh\n SUBTYPE OF (IfcReinforcingElement);\n\tMeshLength : OPTIONAL IfcPositiveLengthMeasure;\n\tMeshWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tLongitudinalBarNominalDiameter : IfcPositiveLengthMeasure;\n\tTransverseBarNominalDiameter : IfcPositiveLengthMeasure;\n\tLongitudinalBarCrossSectionArea : IfcAreaMeasure;\n\tTransverseBarCrossSectionArea : IfcAreaMeasure;\n\tLongitudinalBarSpacing : IfcPositiveLengthMeasure;\n\tTransverseBarSpacing : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRelAggregates\n SUBTYPE OF (IfcRelDecomposes);\nEND_ENTITY;\n\nENTITY IfcRelAssigns\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelAssignsToActor\n\t,IfcRelAssignsToControl\n\t,IfcRelAssignsToGroup\n\t,IfcRelAssignsToProcess\n\t,IfcRelAssignsToProduct\n\t,IfcRelAssignsToResource))\n SUBTYPE OF (IfcRelationship);\n\tRelatedObjects : SET [1:?] OF IfcObjectDefinition;\n\tRelatedObjectsType : OPTIONAL IfcObjectTypeEnum;\n WHERE\n\tWR1 : IfcCorrectObjectAssignment(RelatedObjectsType, RelatedObjects);\nEND_ENTITY;\n\nENTITY IfcRelAssignsTasks\n SUBTYPE OF (IfcRelAssignsToControl);\n\tTimeForTask : OPTIONAL IfcScheduleTimeControl;\n WHERE\n\tWR1 : HIINDEX(SELF\\IfcRelAssigns.RelatedObjects) = 1;\n\tWR2 : 'IFC2X3.IFCTASK' IN TYPEOF(SELF\\IfcRelAssigns.RelatedObjects[1]);\n\tWR3 : 'IFC2X3.IFCWORKCONTROL' IN TYPEOF(SELF\\IfcRelAssignsToControl.RelatingControl);\nEND_ENTITY;\n\nENTITY IfcRelAssignsToActor\n SUPERTYPE OF (ONEOF\n\t(IfcRelOccupiesSpaces))\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingActor : IfcActor;\n\tActingRole : OPTIONAL IfcActorRole;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingActor :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToControl\n SUPERTYPE OF (ONEOF\n\t(IfcRelAssignsTasks\n\t,IfcRelAssignsToProjectOrder\n\t,IfcRelSchedulesCostItems))\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingControl : IfcControl;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingControl :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToGroup\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingGroup : IfcGroup;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingGroup :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToProcess\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingProcess : IfcProcess;\n\tQuantityInProcess : OPTIONAL IfcMeasureWithUnit;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingProcess :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToProduct\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingProduct : IfcProduct;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingProduct :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToProjectOrder\n SUBTYPE OF (IfcRelAssignsToControl);\nEND_ENTITY;\n\nENTITY IfcRelAssignsToResource\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingResource : IfcResource;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingResource :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssociates\n SUPERTYPE OF (ONEOF\n\t(IfcRelAssociatesAppliedValue\n\t,IfcRelAssociatesApproval\n\t,IfcRelAssociatesClassification\n\t,IfcRelAssociatesConstraint\n\t,IfcRelAssociatesDocument\n\t,IfcRelAssociatesLibrary\n\t,IfcRelAssociatesMaterial\n\t,IfcRelAssociatesProfileProperties))\n SUBTYPE OF (IfcRelationship);\n\tRelatedObjects : SET [1:?] OF IfcRoot;\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* RelatedObjects |\n              NOT(('IFC2X3.IFCOBJECTDEFINITION' IN TYPEOF(temp)) \n               OR ('IFC2X3.IFCPROPERTYDEFINITION' IN TYPEOF(temp)))\n              )) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesAppliedValue\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingAppliedValue : IfcAppliedValue;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesApproval\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingApproval : IfcApproval;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesClassification\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingClassification : IfcClassificationNotationSelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesConstraint\n SUBTYPE OF (IfcRelAssociates);\n\tIntent : IfcLabel;\n\tRelatingConstraint : IfcConstraint;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesDocument\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingDocument : IfcDocumentSelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesLibrary\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingLibrary : IfcLibrarySelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesMaterial\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingMaterial : IfcMaterialSelect;\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* SELF\\IfcRelAssociates.RelatedObjects | \n             ('IFC2X3.IFCFEATUREELEMENTSUBTRACTION' IN TYPEOF(temp))\n               OR ('IFC2X3.IFCVIRTUALELEMENT' IN TYPEOF(temp))\n             )) = 0;\n\tWR22 : SIZEOF(QUERY(temp <* SELF\\IfcRelAssociates.RelatedObjects | \n             (NOT('IFC2X3.IFCPRODUCT' IN TYPEOF(temp)) \n              AND NOT('IFC2X3.IFCTYPEPRODUCT' IN TYPEOF(temp)))\n             )) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesProfileProperties\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingProfileProperties : IfcProfileProperties;\n\tProfileSectionLocation : OPTIONAL IfcShapeAspect;\n\tProfileOrientation : OPTIONAL IfcOrientationSelect;\nEND_ENTITY;\n\nENTITY IfcRelConnects\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelConnectsElements\n\t,IfcRelConnectsPortToElement\n\t,IfcRelConnectsPorts\n\t,IfcRelConnectsStructuralActivity\n\t,IfcRelConnectsStructuralElement\n\t,IfcRelConnectsStructuralMember\n\t,IfcRelContainedInSpatialStructure\n\t,IfcRelCoversBldgElements\n\t,IfcRelCoversSpaces\n\t,IfcRelFillsElement\n\t,IfcRelFlowControlElements\n\t,IfcRelInteractionRequirements\n\t,IfcRelProjectsElement\n\t,IfcRelReferencedInSpatialStructure\n\t,IfcRelSequence\n\t,IfcRelServicesBuildings\n\t,IfcRelSpaceBoundary\n\t,IfcRelVoidsElement))\n SUBTYPE OF (IfcRelationship);\nEND_ENTITY;\n\nENTITY IfcRelConnectsElements\n SUPERTYPE OF (ONEOF\n\t(IfcRelConnectsPathElements\n\t,IfcRelConnectsWithRealizingElements))\n SUBTYPE OF (IfcRelConnects);\n\tConnectionGeometry : OPTIONAL IfcConnectionGeometry;\n\tRelatingElement : IfcElement;\n\tRelatedElement : IfcElement;\n WHERE\n\tWR31 : RelatingElement :<>: RelatedElement;\nEND_ENTITY;\n\nENTITY IfcRelConnectsPathElements\n SUBTYPE OF (IfcRelConnectsElements);\n\tRelatingPriorities : LIST [0:?] OF INTEGER;\n\tRelatedPriorities : LIST [0:?] OF INTEGER;\n\tRelatedConnectionType : IfcConnectionTypeEnum;\n\tRelatingConnectionType : IfcConnectionTypeEnum;\nEND_ENTITY;\n\nENTITY IfcRelConnectsPortToElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingPort : IfcPort;\n\tRelatedElement : IfcElement;\nEND_ENTITY;\n\nENTITY IfcRelConnectsPorts\n SUBTYPE OF (IfcRelConnects);\n\tRelatingPort : IfcPort;\n\tRelatedPort : IfcPort;\n\tRealizingElement : OPTIONAL IfcElement;\nEND_ENTITY;\n\nENTITY IfcRelConnectsStructuralActivity\n SUBTYPE OF (IfcRelConnects);\n\tRelatingElement : IfcStructuralActivityAssignmentSelect;\n\tRelatedStructuralActivity : IfcStructuralActivity;\nEND_ENTITY;\n\nENTITY IfcRelConnectsStructuralElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingElement : IfcElement;\n\tRelatedStructuralMember : IfcStructuralMember;\nEND_ENTITY;\n\nENTITY IfcRelConnectsStructuralMember\n SUPERTYPE OF (ONEOF\n\t(IfcRelConnectsWithEccentricity))\n SUBTYPE OF (IfcRelConnects);\n\tRelatingStructuralMember : IfcStructuralMember;\n\tRelatedStructuralConnection : IfcStructuralConnection;\n\tAppliedCondition : OPTIONAL IfcBoundaryCondition;\n\tAdditionalConditions : OPTIONAL IfcStructuralConnectionCondition;\n\tSupportedLength : OPTIONAL IfcLengthMeasure;\n\tConditionCoordinateSystem : OPTIONAL IfcAxis2Placement3D;\nEND_ENTITY;\n\nENTITY IfcRelConnectsWithEccentricity\n SUBTYPE OF (IfcRelConnectsStructuralMember);\n\tConnectionConstraint : IfcConnectionGeometry;\nEND_ENTITY;\n\nENTITY IfcRelConnectsWithRealizingElements\n SUBTYPE OF (IfcRelConnectsElements);\n\tRealizingElements : SET [1:?] OF IfcElement;\n\tConnectionType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcRelContainedInSpatialStructure\n SUBTYPE OF (IfcRelConnects);\n\tRelatedElements : SET [1:?] OF IfcProduct;\n\tRelatingStructure : IfcSpatialStructureElement;\n WHERE\n\tWR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC2X3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcRelCoversBldgElements\n SUBTYPE OF (IfcRelConnects);\n\tRelatingBuildingElement : IfcElement;\n\tRelatedCoverings : SET [1:?] OF IfcCovering;\nEND_ENTITY;\n\nENTITY IfcRelCoversSpaces\n SUBTYPE OF (IfcRelConnects);\n\tRelatedSpace : IfcSpace;\n\tRelatedCoverings : SET [1:?] OF IfcCovering;\nEND_ENTITY;\n\nENTITY IfcRelDecomposes\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelAggregates\n\t,IfcRelNests))\n SUBTYPE OF (IfcRelationship);\n\tRelatingObject : IfcObjectDefinition;\n\tRelatedObjects : SET [1:?] OF IfcObjectDefinition;\n WHERE\n\tWR31 : SIZEOF(QUERY(Temp <* RelatedObjects | RelatingObject :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelDefines\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelDefinesByProperties\n\t,IfcRelDefinesByType))\n SUBTYPE OF (IfcRelationship);\n\tRelatedObjects : SET [1:?] OF IfcObject;\nEND_ENTITY;\n\nENTITY IfcRelDefinesByProperties\n SUPERTYPE OF (ONEOF\n\t(IfcRelOverridesProperties))\n SUBTYPE OF (IfcRelDefines);\n\tRelatingPropertyDefinition : IfcPropertySetDefinition;\nEND_ENTITY;\n\nENTITY IfcRelDefinesByType\n SUBTYPE OF (IfcRelDefines);\n\tRelatingType : IfcTypeObject;\nEND_ENTITY;\n\nENTITY IfcRelFillsElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingOpeningElement : IfcOpeningElement;\n\tRelatedBuildingElement : IfcElement;\nEND_ENTITY;\n\nENTITY IfcRelFlowControlElements\n SUBTYPE OF (IfcRelConnects);\n\tRelatedControlElements : SET [1:?] OF IfcDistributionControlElement;\n\tRelatingFlowElement : IfcDistributionFlowElement;\nEND_ENTITY;\n\nENTITY IfcRelInteractionRequirements\n SUBTYPE OF (IfcRelConnects);\n\tDailyInteraction : OPTIONAL IfcCountMeasure;\n\tImportanceRating : OPTIONAL IfcNormalisedRatioMeasure;\n\tLocationOfInteraction : OPTIONAL IfcSpatialStructureElement;\n\tRelatedSpaceProgram : IfcSpaceProgram;\n\tRelatingSpaceProgram : IfcSpaceProgram;\nEND_ENTITY;\n\nENTITY IfcRelNests\n SUBTYPE OF (IfcRelDecomposes);\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelDecomposes.RelatedObjects | \n              NOT(TYPEOF(SELF\\IfcRelDecomposes.RelatingObject) = TYPEOF(Temp)))) = 0;\nEND_ENTITY;\n\nENTITY IfcRelOccupiesSpaces\n SUBTYPE OF (IfcRelAssignsToActor);\nEND_ENTITY;\n\nENTITY IfcRelOverridesProperties\n SUBTYPE OF (IfcRelDefinesByProperties);\n\tOverridingProperties : SET [1:?] OF IfcProperty;\n WHERE\n\tWR1 : SIZEOF(SELF\\IfcRelDefines.RelatedObjects) = 1;\nEND_ENTITY;\n\nENTITY IfcRelProjectsElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingElement : IfcElement;\n\tRelatedFeatureElement : IfcFeatureElementAddition;\nEND_ENTITY;\n\nENTITY IfcRelReferencedInSpatialStructure\n SUBTYPE OF (IfcRelConnects);\n\tRelatedElements : SET [1:?] OF IfcProduct;\n\tRelatingStructure : IfcSpatialStructureElement;\n WHERE\n\tWR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC2X3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcRelSchedulesCostItems\n SUBTYPE OF (IfcRelAssignsToControl);\n WHERE\n\tWR11 : SIZEOF(QUERY(temp <* SELF\\IfcRelAssigns.RelatedObjects |\n               NOT('IFC2X3.IFCCOSTITEM' IN TYPEOF(temp))\n               )) = 0;\n\tWR12 : 'IFC2X3.IFCCOSTSCHEDULE' IN TYPEOF (SELF\\IfcRelAssignsToControl.RelatingControl);\nEND_ENTITY;\n\nENTITY IfcRelSequence\n SUBTYPE OF (IfcRelConnects);\n\tRelatingProcess : IfcProcess;\n\tRelatedProcess : IfcProcess;\n\tTimeLag : IfcTimeMeasure;\n\tSequenceType : IfcSequenceEnum;\n WHERE\n\tWR1 : RelatingProcess :<>: RelatedProcess;\nEND_ENTITY;\n\nENTITY IfcRelServicesBuildings\n SUBTYPE OF (IfcRelConnects);\n\tRelatingSystem : IfcSystem;\n\tRelatedBuildings : SET [1:?] OF IfcSpatialStructureElement;\nEND_ENTITY;\n\nENTITY IfcRelSpaceBoundary\n SUBTYPE OF (IfcRelConnects);\n\tRelatingSpace : IfcSpace;\n\tRelatedBuildingElement : OPTIONAL IfcElement;\n\tConnectionGeometry : OPTIONAL IfcConnectionGeometry;\n\tPhysicalOrVirtualBoundary : IfcPhysicalOrVirtualEnum;\n\tInternalOrExternalBoundary : IfcInternalOrExternalEnum;\n WHERE\n\tWR1 : ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Physical) AND \n              (EXISTS(RelatedBuildingElement) AND NOT('IFC2X3.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) \n            OR \n            ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Virtual) AND \n              (NOT(EXISTS(RelatedBuildingElement)) OR ('IFC2X3.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) \n            OR \n             (PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.NotDefined);\nEND_ENTITY;\n\nENTITY IfcRelVoidsElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingBuildingElement : IfcElement;\n\tRelatedOpeningElement : IfcFeatureElementSubtraction;\nEND_ENTITY;\n\nENTITY IfcRelationship\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelAssigns\n\t,IfcRelAssociates\n\t,IfcRelConnects\n\t,IfcRelDecomposes\n\t,IfcRelDefines))\n SUBTYPE OF (IfcRoot);\nEND_ENTITY;\n\nENTITY IfcRelaxation;\n\tRelaxationValue : IfcNormalisedRatioMeasure;\n\tInitialStress : IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcRepresentation\n SUPERTYPE OF (ONEOF\n\t(IfcShapeModel\n\t,IfcStyleModel));\n\tContextOfItems : IfcRepresentationContext;\n\tRepresentationIdentifier : OPTIONAL IfcLabel;\n\tRepresentationType : OPTIONAL IfcLabel;\n\tItems : SET [1:?] OF IfcRepresentationItem;\n INVERSE\n\tRepresentationMap : SET [0:1] OF IfcRepresentationMap FOR MappedRepresentation;\n\tLayerAssignments : SET [0:?] OF IfcPresentationLayerAssignment FOR AssignedItems;\n\tOfProductRepresentation : SET [0:1] OF IfcProductRepresentation FOR Representations;\nEND_ENTITY;\n\nENTITY IfcRepresentationContext\n SUPERTYPE OF (ONEOF\n\t(IfcGeometricRepresentationContext));\n\tContextIdentifier : OPTIONAL IfcLabel;\n\tContextType : OPTIONAL IfcLabel;\n INVERSE\n\tRepresentationsInContext : SET [0:?] OF IfcRepresentation FOR ContextOfItems;\nEND_ENTITY;\n\nENTITY IfcRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcGeometricRepresentationItem\n\t,IfcMappedItem\n\t,IfcStyledItem\n\t,IfcTopologicalRepresentationItem));\n INVERSE\n\tLayerAssignments : SET [0:?] OF IfcPresentationLayerAssignment FOR AssignedItems;\n\tStyledByItem : SET [0:1] OF IfcStyledItem FOR Item;\nEND_ENTITY;\n\nENTITY IfcRepresentationMap;\n\tMappingOrigin : IfcAxis2Placement;\n\tMappedRepresentation : IfcRepresentation;\n INVERSE\n\tMapUsage : SET [0:?] OF IfcMappedItem FOR MappingSource;\nEND_ENTITY;\n\nENTITY IfcResource\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConstructionResource))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tResourceOf : SET [0:?] OF IfcRelAssignsToResource FOR RelatingResource;\nEND_ENTITY;\n\nENTITY IfcRevolvedAreaSolid\n SUBTYPE OF (IfcSweptAreaSolid);\n\tAxis : IfcAxis1Placement;\n\tAngle : IfcPlaneAngleMeasure;\n DERIVE\n\tAxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(Axis.Location, \n                   IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Axis.Z,1.0));\n WHERE\n\tWR31 : Axis.Location.Coordinates[3] = 0.0;\n\tWR32 : Axis.Z.DirectionRatios[3] = 0.0;\nEND_ENTITY;\n\nENTITY IfcRibPlateProfileProperties\n SUBTYPE OF (IfcProfileProperties);\n\tThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tRibHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tRibWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tRibSpacing : OPTIONAL IfcPositiveLengthMeasure;\n\tDirection : IfcRibPlateDirectionEnum;\nEND_ENTITY;\n\nENTITY IfcRightCircularCone\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tHeight : IfcPositiveLengthMeasure;\n\tBottomRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRightCircularCylinder\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tHeight : IfcPositiveLengthMeasure;\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRoof\n SUBTYPE OF (IfcBuildingElement);\n\tShapeType : IfcRoofTypeEnum;\n WHERE\n\tWR1 : (HIINDEX(SELF\\IfcObjectDefinition.IsDecomposedBy) = 0) OR \n            ((HIINDEX(SELF\\IfcObjectDefinition.IsDecomposedBy) = 1) AND (NOT(EXISTS(SELF\\IfcProduct.Representation))));\nEND_ENTITY;\n\nENTITY IfcRoot\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcObjectDefinition\n\t,IfcPropertyDefinition\n\t,IfcRelationship));\n\tGlobalId : IfcGloballyUniqueId;\n\tOwnerHistory : IfcOwnerHistory;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n UNIQUE\n\tUR1 : GlobalId;\nEND_ENTITY;\n\nENTITY IfcRoundedEdgeFeature\n SUBTYPE OF (IfcEdgeFeature);\n\tRadius : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRoundedRectangleProfileDef\n SUBTYPE OF (IfcRectangleProfileDef);\n\tRoundingRadius : IfcPositiveLengthMeasure;\n WHERE\n\tWR31 : ((RoundingRadius <= (SELF\\IfcRectangleProfileDef.XDim/2.)) AND \n              (RoundingRadius <= (SELF\\IfcRectangleProfileDef.YDim/2.)));\nEND_ENTITY;\n\nENTITY IfcSIUnit\n SUBTYPE OF (IfcNamedUnit);\n\tPrefix : OPTIONAL IfcSIPrefix;\n\tName : IfcSIUnitName;\n DERIVE\n\tSELF\\IfcNamedUnit.Dimensions : IfcDimensionalExponents := IfcDimensionsForSiUnit (SELF.Name);\nEND_ENTITY;\n\nENTITY IfcSanitaryTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcSanitaryTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcScheduleTimeControl\n SUBTYPE OF (IfcControl);\n\tActualStart : OPTIONAL IfcDateTimeSelect;\n\tEarlyStart : OPTIONAL IfcDateTimeSelect;\n\tLateStart : OPTIONAL IfcDateTimeSelect;\n\tScheduleStart : OPTIONAL IfcDateTimeSelect;\n\tActualFinish : OPTIONAL IfcDateTimeSelect;\n\tEarlyFinish : OPTIONAL IfcDateTimeSelect;\n\tLateFinish : OPTIONAL IfcDateTimeSelect;\n\tScheduleFinish : OPTIONAL IfcDateTimeSelect;\n\tScheduleDuration : OPTIONAL IfcTimeMeasure;\n\tActualDuration : OPTIONAL IfcTimeMeasure;\n\tRemainingTime : OPTIONAL IfcTimeMeasure;\n\tFreeFloat : OPTIONAL IfcTimeMeasure;\n\tTotalFloat : OPTIONAL IfcTimeMeasure;\n\tIsCritical : OPTIONAL BOOLEAN;\n\tStatusTime : OPTIONAL IfcDateTimeSelect;\n\tStartFloat : OPTIONAL IfcTimeMeasure;\n\tFinishFloat : OPTIONAL IfcTimeMeasure;\n\tCompletion : OPTIONAL IfcPositiveRatioMeasure;\n INVERSE\n\tScheduleTimeControlAssigned : IfcRelAssignsTasks FOR TimeForTask;\nEND_ENTITY;\n\nENTITY IfcSectionProperties;\n\tSectionType : IfcSectionTypeEnum;\n\tStartProfile : IfcProfileDef;\n\tEndProfile : OPTIONAL IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcSectionReinforcementProperties;\n\tLongitudinalStartPosition : IfcLengthMeasure;\n\tLongitudinalEndPosition : IfcLengthMeasure;\n\tTransversePosition : OPTIONAL IfcLengthMeasure;\n\tReinforcementRole : IfcReinforcingBarRoleEnum;\n\tSectionDefinition : IfcSectionProperties;\n\tCrossSectionReinforcementDefinitions : SET [1:?] OF IfcReinforcementBarProperties;\nEND_ENTITY;\n\nENTITY IfcSectionedSpine\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSpineCurve : IfcCompositeCurve;\n\tCrossSections : LIST [2:?] OF IfcProfileDef;\n\tCrossSectionPositions : LIST [2:?] OF IfcAxis2Placement3D;\n DERIVE\n\tDim : IfcDimensionCount := 3;\n WHERE\n\tWR1 : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions);\n\tWR2 : SIZEOF(QUERY(temp <* CrossSections | CrossSections[1].ProfileType <> temp.ProfileType)) = 0;\n\tWR3 : SpineCurve.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcSensorType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcSensorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcServiceLife\n SUBTYPE OF (IfcControl);\n\tServiceLifeType : IfcServiceLifeTypeEnum;\n\tServiceLifeDuration : IfcTimeMeasure;\nEND_ENTITY;\n\nENTITY IfcServiceLifeFactor\n SUBTYPE OF (IfcPropertySetDefinition);\n\tPredefinedType : IfcServiceLifeFactorTypeEnum;\n\tUpperValue : OPTIONAL IfcMeasureValue;\n\tMostUsedValue : IfcMeasureValue;\n\tLowerValue : OPTIONAL IfcMeasureValue;\n WHERE\n\tWR31 : NOT(PredefinedType = IfcServiceLifeFactorTypeEnum.USERDEFINED)\n             OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcShapeAspect;\n\tShapeRepresentations : LIST [1:?] OF IfcShapeModel;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tProductDefinitional : LOGICAL;\n\tPartOfProductDefinitionShape : IfcProductDefinitionShape;\nEND_ENTITY;\n\nENTITY IfcShapeModel\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcShapeRepresentation\n\t,IfcTopologyRepresentation))\n SUBTYPE OF (IfcRepresentation);\n INVERSE\n\tOfShapeAspect : SET [0:1] OF IfcShapeAspect FOR ShapeRepresentations;\n WHERE\n\tWR11 : (SIZEOF(SELF\\IfcRepresentation.OfProductRepresentation) = 1) XOR \n             (SIZEOF(SELF\\IfcRepresentation.RepresentationMap) = 1) XOR\n             (SIZEOF(OfShapeAspect) = 1);\nEND_ENTITY;\n\nENTITY IfcShapeRepresentation\n SUBTYPE OF (IfcShapeModel);\n WHERE\n\tWR21 : 'IFC2X3.IFCGEOMETRICREPRESENTATIONCONTEXT' \n             IN TYPEOF(SELF\\IfcRepresentation.ContextOfItems);\n\tWR22 : SIZEOF(QUERY(temp <* Items | \n               ('IFC2X3.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))\n                 AND (NOT(SIZEOF(\n                   ['IFC2X3.IFCVERTEXPOINT',\n                    'IFC2X3.IFCEDGECURVE',\n                    'IFC2X3.IFCFACESURFACE'] * TYPEOF(temp)) = 1))\n             )) = 0;\n\tWR23 : EXISTS(SELF\\IfcRepresentation.RepresentationType);\n\tWR24 : IfcShapeRepresentationTypes(SELF\\IfcRepresentation.RepresentationType, SELF\\IfcRepresentation.Items);\nEND_ENTITY;\n\nENTITY IfcShellBasedSurfaceModel\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSbsmBoundary : SET [1:?] OF IfcShell;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcSimpleProperty\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPropertyBoundedValue\n\t,IfcPropertyEnumeratedValue\n\t,IfcPropertyListValue\n\t,IfcPropertyReferenceValue\n\t,IfcPropertySingleValue\n\t,IfcPropertyTableValue))\n SUBTYPE OF (IfcProperty);\nEND_ENTITY;\n\nENTITY IfcSite\n SUBTYPE OF (IfcSpatialStructureElement);\n\tRefLatitude : OPTIONAL IfcCompoundPlaneAngleMeasure;\n\tRefLongitude : OPTIONAL IfcCompoundPlaneAngleMeasure;\n\tRefElevation : OPTIONAL IfcLengthMeasure;\n\tLandTitleNumber : OPTIONAL IfcLabel;\n\tSiteAddress : OPTIONAL IfcPostalAddress;\nEND_ENTITY;\n\nENTITY IfcSlab\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcSlabTypeEnum;\n WHERE\n\tWR61 : NOT(EXISTS(PredefinedType)) OR\n              (PredefinedType <> IfcSlabTypeEnum.USERDEFINED) OR\n              ((PredefinedType = IfcSlabTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcSlabType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcSlabTypeEnum;\nEND_ENTITY;\n\nENTITY IfcSlippageConnectionCondition\n SUBTYPE OF (IfcStructuralConnectionCondition);\n\tSlippageX : OPTIONAL IfcLengthMeasure;\n\tSlippageY : OPTIONAL IfcLengthMeasure;\n\tSlippageZ : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcSolidModel\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCsgSolid\n\t,IfcManifoldSolidBrep\n\t,IfcSweptAreaSolid\n\t,IfcSweptDiskSolid))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcSoundProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tIsAttenuating : IfcBoolean;\n\tSoundScale : OPTIONAL IfcSoundScaleEnum;\n\tSoundValues : LIST [1:8] OF IfcSoundValue;\nEND_ENTITY;\n\nENTITY IfcSoundValue\n SUBTYPE OF (IfcPropertySetDefinition);\n\tSoundLevelTimeSeries : OPTIONAL IfcTimeSeries;\n\tFrequency : IfcFrequencyMeasure;\n\tSoundLevelSingleValue : OPTIONAL IfcDerivedMeasureValue;\nEND_ENTITY;\n\nENTITY IfcSpace\n SUBTYPE OF (IfcSpatialStructureElement);\n\tInteriorOrExteriorSpace : IfcInternalOrExternalEnum;\n\tElevationWithFlooring : OPTIONAL IfcLengthMeasure;\n INVERSE\n\tHasCoverings : SET [0:?] OF IfcRelCoversSpaces FOR RelatedSpace;\n\tBoundedBy : SET [0:?] OF IfcRelSpaceBoundary FOR RelatingSpace;\nEND_ENTITY;\n\nENTITY IfcSpaceHeaterType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcSpaceHeaterTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcSpaceHeaterTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcSpaceHeaterTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSpaceProgram\n SUBTYPE OF (IfcControl);\n\tSpaceProgramIdentifier : IfcIdentifier;\n\tMaxRequiredArea : OPTIONAL IfcAreaMeasure;\n\tMinRequiredArea : OPTIONAL IfcAreaMeasure;\n\tRequestedLocation : OPTIONAL IfcSpatialStructureElement;\n\tStandardRequiredArea : IfcAreaMeasure;\n INVERSE\n\tHasInteractionReqsFrom : SET [0:?] OF IfcRelInteractionRequirements FOR RelatedSpaceProgram;\n\tHasInteractionReqsTo : SET [0:?] OF IfcRelInteractionRequirements FOR RelatingSpaceProgram;\nEND_ENTITY;\n\nENTITY IfcSpaceThermalLoadProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tApplicableValueRatio : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalLoadSource : IfcThermalLoadSourceEnum;\n\tPropertySource : IfcPropertySourceEnum;\n\tSourceDescription : OPTIONAL IfcText;\n\tMaximumValue : IfcPowerMeasure;\n\tMinimumValue : OPTIONAL IfcPowerMeasure;\n\tThermalLoadTimeSeriesValues : OPTIONAL IfcTimeSeries;\n\tUserDefinedThermalLoadSource : OPTIONAL IfcLabel;\n\tUserDefinedPropertySource : OPTIONAL IfcLabel;\n\tThermalLoadType : IfcThermalLoadTypeEnum;\nEND_ENTITY;\n\nENTITY IfcSpaceType\n SUBTYPE OF (IfcSpatialStructureElementType);\n\tPredefinedType : IfcSpaceTypeEnum;\nEND_ENTITY;\n\nENTITY IfcSpatialStructureElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuilding\n\t,IfcBuildingStorey\n\t,IfcSite\n\t,IfcSpace))\n SUBTYPE OF (IfcProduct);\n\tLongName : OPTIONAL IfcLabel;\n\tCompositionType : IfcElementCompositionEnum;\n INVERSE\n\tReferencesElements : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatingStructure;\n\tServicedBySystems : SET [0:?] OF IfcRelServicesBuildings FOR RelatedBuildings;\n\tContainsElements : SET [0:?] OF IfcRelContainedInSpatialStructure FOR RelatingStructure;\n WHERE\n\tWR41 : (HIINDEX(SELF\\IfcObjectDefinition.Decomposes) = 1) \n             AND\n             ('IFC2X3.IFCRELAGGREGATES' IN TYPEOF(SELF\\IfcObjectDefinition.Decomposes[1])) \n             AND\n             (('IFC2X3.IFCPROJECT' IN TYPEOF (SELF\\IfcObjectDefinition.Decomposes[1].RelatingObject)) OR\n              ('IFC2X3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF (SELF\\IfcObjectDefinition.Decomposes[1].RelatingObject))\n             );\nEND_ENTITY;\n\nENTITY IfcSpatialStructureElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcSpaceType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcSphere\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcStackTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcStackTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcStair\n SUBTYPE OF (IfcBuildingElement);\n\tShapeType : IfcStairTypeEnum;\n WHERE\n\tWR1 : (HIINDEX(SELF\\IfcObjectDefinition.IsDecomposedBy) = 0) OR \n            ((HIINDEX(SELF\\IfcObjectDefinition.IsDecomposedBy) = 1) AND (NOT(EXISTS(SELF\\IfcProduct.Representation))));\nEND_ENTITY;\n\nENTITY IfcStairFlight\n SUBTYPE OF (IfcBuildingElement);\n\tNumberOfRiser : OPTIONAL INTEGER;\n\tNumberOfTreads : OPTIONAL INTEGER;\n\tRiserHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tTreadLength : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcStairFlightType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcStairFlightTypeEnum;\nEND_ENTITY;\n\nENTITY IfcStructuralAction\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralLinearAction\n\t,IfcStructuralPlanarAction\n\t,IfcStructuralPointAction))\n SUBTYPE OF (IfcStructuralActivity);\n\tDestabilizingLoad : BOOLEAN;\n\tCausedBy : OPTIONAL IfcStructuralReaction;\nEND_ENTITY;\n\nENTITY IfcStructuralActivity\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralAction\n\t,IfcStructuralReaction))\n SUBTYPE OF (IfcProduct);\n\tAppliedLoad : IfcStructuralLoad;\n\tGlobalOrLocal : IfcGlobalOrLocalEnum;\n INVERSE\n\tAssignedToStructuralItem : IfcRelConnectsStructuralActivity FOR RelatedStructuralActivity;\nEND_ENTITY;\n\nENTITY IfcStructuralAnalysisModel\n SUBTYPE OF (IfcSystem);\n\tPredefinedType : IfcAnalysisModelTypeEnum;\n\tOrientationOf2DPlane : OPTIONAL IfcAxis2Placement3D;\n\tLoadedBy : OPTIONAL SET [1:?] OF IfcStructuralLoadGroup;\n\tHasResults : OPTIONAL SET [1:?] OF IfcStructuralResultGroup;\nEND_ENTITY;\n\nENTITY IfcStructuralConnection\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralCurveConnection\n\t,IfcStructuralPointConnection\n\t,IfcStructuralSurfaceConnection))\n SUBTYPE OF (IfcStructuralItem);\n\tAppliedCondition : OPTIONAL IfcBoundaryCondition;\n INVERSE\n\tConnectsStructuralMembers : SET [1:?] OF IfcRelConnectsStructuralMember FOR RelatedStructuralConnection;\nEND_ENTITY;\n\nENTITY IfcStructuralConnectionCondition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcFailureConnectionCondition\n\t,IfcSlippageConnectionCondition));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcStructuralCurveConnection\n SUBTYPE OF (IfcStructuralConnection);\nEND_ENTITY;\n\nENTITY IfcStructuralCurveMember\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralCurveMemberVarying))\n SUBTYPE OF (IfcStructuralMember);\n\tPredefinedType : IfcStructuralCurveTypeEnum;\nEND_ENTITY;\n\nENTITY IfcStructuralCurveMemberVarying\n SUBTYPE OF (IfcStructuralCurveMember);\nEND_ENTITY;\n\nENTITY IfcStructuralItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralConnection\n\t,IfcStructuralMember))\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tAssignedStructuralActivity : SET [0:?] OF IfcRelConnectsStructuralActivity FOR RelatingElement;\nEND_ENTITY;\n\nENTITY IfcStructuralLinearAction\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralLinearActionVarying))\n SUBTYPE OF (IfcStructuralAction);\n\tProjectedOrTrue : IfcProjectedOrTrueLengthEnum;\n WHERE\n\tWR61 : SIZEOF(['IFC2X3.IFCSTRUCTURALLOADLINEARFORCE',\n                     'IFC2X3.IFCSTRUCTURALLOADTEMPERATURE']\n             * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralLinearActionVarying\n SUBTYPE OF (IfcStructuralLinearAction);\n\tVaryingAppliedLoadLocation : IfcShapeAspect;\n\tSubsequentAppliedLoads : LIST [1:?] OF IfcStructuralLoad;\n DERIVE\n\tVaryingAppliedLoads : LIST [2:?] OF IfcStructuralLoad := IfcAddToBeginOfList(SELF\\IfcStructuralActivity.AppliedLoad, SubsequentAppliedLoads);\nEND_ENTITY;\n\nENTITY IfcStructuralLoad\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadStatic));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadGroup\n SUBTYPE OF (IfcGroup);\n\tPredefinedType : IfcLoadGroupTypeEnum;\n\tActionType : IfcActionTypeEnum;\n\tActionSource : IfcActionSourceTypeEnum;\n\tCoefficient : OPTIONAL IfcRatioMeasure;\n\tPurpose : OPTIONAL IfcLabel;\n INVERSE\n\tSourceOfResultGroup : SET [0:1] OF IfcStructuralResultGroup FOR ResultForLoadGroup;\n\tLoadGroupFor : SET [0:?] OF IfcStructuralAnalysisModel FOR LoadedBy;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadLinearForce\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tLinearForceX : OPTIONAL IfcLinearForceMeasure;\n\tLinearForceY : OPTIONAL IfcLinearForceMeasure;\n\tLinearForceZ : OPTIONAL IfcLinearForceMeasure;\n\tLinearMomentX : OPTIONAL IfcLinearMomentMeasure;\n\tLinearMomentY : OPTIONAL IfcLinearMomentMeasure;\n\tLinearMomentZ : OPTIONAL IfcLinearMomentMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadPlanarForce\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tPlanarForceX : OPTIONAL IfcPlanarForceMeasure;\n\tPlanarForceY : OPTIONAL IfcPlanarForceMeasure;\n\tPlanarForceZ : OPTIONAL IfcPlanarForceMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleDisplacement\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadSingleDisplacementDistortion))\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tDisplacementX : OPTIONAL IfcLengthMeasure;\n\tDisplacementY : OPTIONAL IfcLengthMeasure;\n\tDisplacementZ : OPTIONAL IfcLengthMeasure;\n\tRotationalDisplacementRX : OPTIONAL IfcPlaneAngleMeasure;\n\tRotationalDisplacementRY : OPTIONAL IfcPlaneAngleMeasure;\n\tRotationalDisplacementRZ : OPTIONAL IfcPlaneAngleMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleDisplacementDistortion\n SUBTYPE OF (IfcStructuralLoadSingleDisplacement);\n\tDistortion : OPTIONAL IfcCurvatureMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleForce\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadSingleForceWarping))\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tForceX : OPTIONAL IfcForceMeasure;\n\tForceY : OPTIONAL IfcForceMeasure;\n\tForceZ : OPTIONAL IfcForceMeasure;\n\tMomentX : OPTIONAL IfcTorqueMeasure;\n\tMomentY : OPTIONAL IfcTorqueMeasure;\n\tMomentZ : OPTIONAL IfcTorqueMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleForceWarping\n SUBTYPE OF (IfcStructuralLoadSingleForce);\n\tWarpingMoment : OPTIONAL IfcWarpingMomentMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadStatic\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadLinearForce\n\t,IfcStructuralLoadPlanarForce\n\t,IfcStructuralLoadSingleDisplacement\n\t,IfcStructuralLoadSingleForce\n\t,IfcStructuralLoadTemperature))\n SUBTYPE OF (IfcStructuralLoad);\nEND_ENTITY;\n\nENTITY IfcStructuralLoadTemperature\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tDeltaT_Constant : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tDeltaT_Y : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tDeltaT_Z : OPTIONAL IfcThermodynamicTemperatureMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralMember\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralCurveMember\n\t,IfcStructuralSurfaceMember))\n SUBTYPE OF (IfcStructuralItem);\n INVERSE\n\tReferencesElement : SET [0:?] OF IfcRelConnectsStructuralElement FOR RelatedStructuralMember;\n\tConnectedBy : SET [0:?] OF IfcRelConnectsStructuralMember FOR RelatingStructuralMember;\nEND_ENTITY;\n\nENTITY IfcStructuralPlanarAction\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralPlanarActionVarying))\n SUBTYPE OF (IfcStructuralAction);\n\tProjectedOrTrue : IfcProjectedOrTrueLengthEnum;\n WHERE\n\tWR61 : SIZEOF(['IFC2X3.IFCSTRUCTURALLOADPLANARFORCE',\n                     'IFC2X3.IFCSTRUCTURALLOADTEMPERATURE']\n             * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralPlanarActionVarying\n SUBTYPE OF (IfcStructuralPlanarAction);\n\tVaryingAppliedLoadLocation : IfcShapeAspect;\n\tSubsequentAppliedLoads : LIST [2:?] OF IfcStructuralLoad;\n DERIVE\n\tVaryingAppliedLoads : LIST [3:?] OF IfcStructuralLoad := IfcAddToBeginOfList(SELF\\IfcStructuralActivity.AppliedLoad, SubsequentAppliedLoads);\nEND_ENTITY;\n\nENTITY IfcStructuralPointAction\n SUBTYPE OF (IfcStructuralAction);\n WHERE\n\tWR61 : SIZEOF(['IFC2X3.IFCSTRUCTURALLOADSINGLEFORCE',\n                     'IFC2X3.IFCSTRUCTURALLOADSINGLEDISPLACEMENT']\n             * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralPointConnection\n SUBTYPE OF (IfcStructuralConnection);\nEND_ENTITY;\n\nENTITY IfcStructuralPointReaction\n SUBTYPE OF (IfcStructuralReaction);\n WHERE\n\tWR61 : SIZEOF(['IFC2X3.IFCSTRUCTURALLOADSINGLEFORCE',\n                     'IFC2X3.IFCSTRUCTURALLOADSINGLEDISPLACEMENT']\n             * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralProfileProperties\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralSteelProfileProperties))\n SUBTYPE OF (IfcGeneralProfileProperties);\n\tTorsionalConstantX : OPTIONAL IfcMomentOfInertiaMeasure;\n\tMomentOfInertiaYZ : OPTIONAL IfcMomentOfInertiaMeasure;\n\tMomentOfInertiaY : OPTIONAL IfcMomentOfInertiaMeasure;\n\tMomentOfInertiaZ : OPTIONAL IfcMomentOfInertiaMeasure;\n\tWarpingConstant : OPTIONAL IfcWarpingConstantMeasure;\n\tShearCentreZ : OPTIONAL IfcLengthMeasure;\n\tShearCentreY : OPTIONAL IfcLengthMeasure;\n\tShearDeformationAreaZ : OPTIONAL IfcAreaMeasure;\n\tShearDeformationAreaY : OPTIONAL IfcAreaMeasure;\n\tMaximumSectionModulusY : OPTIONAL IfcSectionModulusMeasure;\n\tMinimumSectionModulusY : OPTIONAL IfcSectionModulusMeasure;\n\tMaximumSectionModulusZ : OPTIONAL IfcSectionModulusMeasure;\n\tMinimumSectionModulusZ : OPTIONAL IfcSectionModulusMeasure;\n\tTorsionalSectionModulus : OPTIONAL IfcSectionModulusMeasure;\n\tCentreOfGravityInX : OPTIONAL IfcLengthMeasure;\n\tCentreOfGravityInY : OPTIONAL IfcLengthMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(ShearDeformationAreaY)) OR (ShearDeformationAreaY >= 0.);\n\tWR22 : NOT(EXISTS(ShearDeformationAreaZ)) OR (ShearDeformationAreaZ >= 0.);\nEND_ENTITY;\n\nENTITY IfcStructuralReaction\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralPointReaction))\n SUBTYPE OF (IfcStructuralActivity);\n INVERSE\n\tCauses : SET [0:?] OF IfcStructuralAction FOR CausedBy;\nEND_ENTITY;\n\nENTITY IfcStructuralResultGroup\n SUBTYPE OF (IfcGroup);\n\tTheoryType : IfcAnalysisTheoryTypeEnum;\n\tResultForLoadGroup : OPTIONAL IfcStructuralLoadGroup;\n\tIsLinear : BOOLEAN;\n INVERSE\n\tResultGroupFor : SET [0:1] OF IfcStructuralAnalysisModel FOR HasResults;\nEND_ENTITY;\n\nENTITY IfcStructuralSteelProfileProperties\n SUBTYPE OF (IfcStructuralProfileProperties);\n\tShearAreaZ : OPTIONAL IfcAreaMeasure;\n\tShearAreaY : OPTIONAL IfcAreaMeasure;\n\tPlasticShapeFactorY : OPTIONAL IfcPositiveRatioMeasure;\n\tPlasticShapeFactorZ : OPTIONAL IfcPositiveRatioMeasure;\n WHERE\n\tWR31 : NOT(EXISTS(ShearAreaY)) OR (ShearAreaY >= 0.);\n\tWR32 : NOT(EXISTS(ShearAreaZ)) OR (ShearAreaZ >= 0.);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceConnection\n SUBTYPE OF (IfcStructuralConnection);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceMember\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralSurfaceMemberVarying))\n SUBTYPE OF (IfcStructuralMember);\n\tPredefinedType : IfcStructuralSurfaceTypeEnum;\n\tThickness : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceMemberVarying\n SUBTYPE OF (IfcStructuralSurfaceMember);\n\tSubsequentThickness : LIST [2:?] OF IfcPositiveLengthMeasure;\n\tVaryingThicknessLocation : IfcShapeAspect;\n DERIVE\n\tVaryingThickness : LIST [3:?] OF IfcPositiveLengthMeasure := IfcAddToBeginOfList(SELF\\IfcStructuralSurfaceMember.Thickness, SubsequentThickness);\n WHERE\n\tWR61 : EXISTS(SELF\\IfcStructuralSurfaceMember.Thickness);\n\tWR62 : SIZEOF(QUERY(temp <* SELF.VaryingThicknessLocation.ShapeRepresentations |\n               NOT(SIZEOF(temp\\IfcRepresentation.Items) = 1)\n               )) = 0;\n\tWR63 : SIZEOF(QUERY(temp <* SELF.VaryingThicknessLocation.ShapeRepresentations |\n               NOT(('IFC2X3.IFCCARTESIANPOINT' IN TYPEOF(temp\\IfcRepresentation.Items[1]))\n                     OR\n                   ('IFC2X3.IFCPOINTONSURFACE' IN TYPEOF(temp\\IfcRepresentation.Items[1])))\n               )) = 0;\nEND_ENTITY;\n\nENTITY IfcStructuredDimensionCallout\n SUBTYPE OF (IfcDraughtingCallout);\n WHERE\n\tWR31 : SIZEOF(QUERY ( Ato <* QUERY ( Con <* SELF.contents | (\n                   'IFC2X3.IFCANNOTATIONTEXTOCCURRENCE' IN \n                    TYPEOF(Con)) ) | (NOT (Ato.Name IN ['dimension value',\n                   'tolerance value','unit text','prefix text','suffix text']))))\n                  = 0;\nEND_ENTITY;\n\nENTITY IfcStyleModel\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStyledRepresentation))\n SUBTYPE OF (IfcRepresentation);\nEND_ENTITY;\n\nENTITY IfcStyledItem\n SUPERTYPE OF (ONEOF\n\t(IfcAnnotationOccurrence))\n SUBTYPE OF (IfcRepresentationItem);\n\tItem : OPTIONAL IfcRepresentationItem;\n\tStyles : SET [1:?] OF IfcPresentationStyleAssignment;\n\tName : OPTIONAL IfcLabel;\n WHERE\n\tWR11 : SIZEOF(Styles) = 1;\n\tWR12 : NOT('IFC2X3.IFCSTYLEDITEM' IN TYPEOF(Item));\nEND_ENTITY;\n\nENTITY IfcStyledRepresentation\n SUBTYPE OF (IfcStyleModel);\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* SELF\\IfcRepresentation.Items | \n               (NOT('IFC2X3.IFCSTYLEDITEM' IN TYPEOF(temp)))\n             )) = 0;\nEND_ENTITY;\n\nENTITY IfcSubContractResource\n SUBTYPE OF (IfcConstructionResource);\n\tSubContractor : OPTIONAL IfcActorSelect;\n\tJobDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcSubedge\n SUBTYPE OF (IfcEdge);\n\tParentEdge : IfcEdge;\nEND_ENTITY;\n\nENTITY IfcSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBoundedSurface\n\t,IfcElementarySurface\n\t,IfcSweptSurface))\n SUBTYPE OF (IfcGeometricRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcSurfaceCurveSweptAreaSolid\n SUBTYPE OF (IfcSweptAreaSolid);\n\tDirectrix : IfcCurve;\n\tStartParam : IfcParameterValue;\n\tEndParam : IfcParameterValue;\n\tReferenceSurface : IfcSurface;\nEND_ENTITY;\n\nENTITY IfcSurfaceOfLinearExtrusion\n SUBTYPE OF (IfcSweptSurface);\n\tExtrudedDirection : IfcDirection;\n\tDepth : IfcLengthMeasure;\n DERIVE\n\tExtrusionAxis : IfcVector := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (ExtrudedDirection, Depth);\n WHERE\n\tWR41 : Depth > 0.;\nEND_ENTITY;\n\nENTITY IfcSurfaceOfRevolution\n SUBTYPE OF (IfcSweptSurface);\n\tAxisPosition : IfcAxis1Placement;\n DERIVE\n\tAxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(AxisPosition.Location, \n                       IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(AxisPosition.Z,1.0));\nEND_ENTITY;\n\nENTITY IfcSurfaceStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tSide : IfcSurfaceSide;\n\tStyles : SET [1:5] OF IfcSurfaceStyleElementSelect;\n WHERE\n\tWR11 : SIZEOF(QUERY(Style <* SELF.Styles |\n               'IFC2X3.IFCSURFACESTYLESHADING' IN\n                TYPEOF(Style)\n               )) <= 1;\n\tWR12 : SIZEOF(QUERY(Style <* SELF.Styles |\n               'IFC2X3.IFCSURFACESTYLELIGHTING' IN\n                TYPEOF(Style)\n               )) <= 1;\n\tWR13 : SIZEOF(QUERY(Style <* SELF.Styles |\n               'IFC2X3.IFCSURFACESTYLEREFRACTION' IN\n                TYPEOF(Style)\n               )) <= 1;\n\tWR14 : SIZEOF(QUERY(Style <* SELF.Styles |\n               'IFC2X3.IFCSURFACESTYLEWITHTEXTURES' IN\n                TYPEOF(Style)\n               )) <= 1;\n\tWR15 : SIZEOF(QUERY(Style <* SELF.Styles |\n               'IFC2X3.IFCEXTERNALLYDEFINEDSURFACESTYLE' IN\n                TYPEOF(Style)\n               )) <= 1;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleLighting;\n\tDiffuseTransmissionColour : IfcColourRgb;\n\tDiffuseReflectionColour : IfcColourRgb;\n\tTransmissionColour : IfcColourRgb;\n\tReflectanceColour : IfcColourRgb;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleRefraction;\n\tRefractionIndex : OPTIONAL IfcReal;\n\tDispersionFactor : OPTIONAL IfcReal;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleRendering\n SUBTYPE OF (IfcSurfaceStyleShading);\n\tTransparency : OPTIONAL IfcNormalisedRatioMeasure;\n\tDiffuseColour : OPTIONAL IfcColourOrFactor;\n\tTransmissionColour : OPTIONAL IfcColourOrFactor;\n\tDiffuseTransmissionColour : OPTIONAL IfcColourOrFactor;\n\tReflectionColour : OPTIONAL IfcColourOrFactor;\n\tSpecularColour : OPTIONAL IfcColourOrFactor;\n\tSpecularHighlight : OPTIONAL IfcSpecularHighlightSelect;\n\tReflectanceMethod : IfcReflectanceMethodEnum;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleShading\n SUPERTYPE OF (ONEOF\n\t(IfcSurfaceStyleRendering));\n\tSurfaceColour : IfcColourRgb;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleWithTextures;\n\tTextures : LIST [1:?] OF IfcSurfaceTexture;\nEND_ENTITY;\n\nENTITY IfcSurfaceTexture\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBlobTexture\n\t,IfcImageTexture\n\t,IfcPixelTexture));\n\tRepeatS : BOOLEAN;\n\tRepeatT : BOOLEAN;\n\tTextureType : IfcSurfaceTextureEnum;\n\tTextureTransform : OPTIONAL IfcCartesianTransformationOperator2D;\nEND_ENTITY;\n\nENTITY IfcSweptAreaSolid\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcExtrudedAreaSolid\n\t,IfcRevolvedAreaSolid\n\t,IfcSurfaceCurveSweptAreaSolid))\n SUBTYPE OF (IfcSolidModel);\n\tSweptArea : IfcProfileDef;\n\tPosition : IfcAxis2Placement3D;\n WHERE\n\tWR22 : SweptArea.ProfileType = IfcProfileTypeEnum.Area;\nEND_ENTITY;\n\nENTITY IfcSweptDiskSolid\n SUBTYPE OF (IfcSolidModel);\n\tDirectrix : IfcCurve;\n\tRadius : IfcPositiveLengthMeasure;\n\tInnerRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tStartParam : IfcParameterValue;\n\tEndParam : IfcParameterValue;\n WHERE\n\tWR1 : Directrix.Dim = 3;\n\tWR2 : (NOT EXISTS(InnerRadius)) OR (Radius > InnerRadius);\nEND_ENTITY;\n\nENTITY IfcSweptSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcSurfaceOfLinearExtrusion\n\t,IfcSurfaceOfRevolution))\n SUBTYPE OF (IfcSurface);\n\tSweptCurve : IfcProfileDef;\n\tPosition : IfcAxis2Placement3D;\n DERIVE\n\tDim : IfcDimensionCount := Position.Dim;\n WHERE\n\tWR1 : NOT('IFC2X3.IFCDERIVEDPROFILEDEF' IN TYPEOF(SweptCurve));\n\tWR2 : SweptCurve.ProfileType = IfcProfileTypeEnum.Curve;\nEND_ENTITY;\n\nENTITY IfcSwitchingDeviceType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcSwitchingDeviceTypeEnum;\nEND_ENTITY;\n\nENTITY IfcSymbolStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tStyleOfSymbol : IfcSymbolStyleSelect;\nEND_ENTITY;\n\nENTITY IfcSystem\n SUPERTYPE OF (ONEOF\n\t(IfcElectricalCircuit\n\t,IfcStructuralAnalysisModel))\n SUBTYPE OF (IfcGroup);\n INVERSE\n\tServicesBuildings : SET [0:1] OF IfcRelServicesBuildings FOR RelatingSystem;\nEND_ENTITY;\n\nENTITY IfcSystemFurnitureElementType\n SUBTYPE OF (IfcFurnishingElementType);\nEND_ENTITY;\n\nENTITY IfcTShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tFlangeEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tWebEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tWebSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tCentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : FlangeThickness < Depth;\n\tWR2 : WebThickness < FlangeWidth;\nEND_ENTITY;\n\nENTITY IfcTable;\n\tName : STRING;\n\tRows : LIST [1:?] OF IfcTableRow;\n DERIVE\n\tNumberOfCellsInRow : INTEGER := HIINDEX(Rows[1].RowCells);\n\tNumberOfHeadings : INTEGER := SIZEOF(QUERY( Temp <* Rows | Temp.IsHeading));\n\tNumberOfDataRows : INTEGER := SIZEOF(QUERY( Temp <* Rows | NOT(Temp.IsHeading)));\n WHERE\n\tWR1 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0;\n\tWR2 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0;\n\tWR3 : { 0 <= NumberOfHeadings <= 1 };\nEND_ENTITY;\n\nENTITY IfcTableRow;\n\tRowCells : LIST [1:?] OF IfcValue;\n\tIsHeading : BOOLEAN;\n INVERSE\n\tOfTable : IfcTable FOR Rows;\nEND_ENTITY;\n\nENTITY IfcTankType\n SUBTYPE OF (IfcFlowStorageDeviceType);\n\tPredefinedType : IfcTankTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcTankTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcTankTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTask\n SUPERTYPE OF (ONEOF\n\t(IfcMove\n\t,IfcOrderAction))\n SUBTYPE OF (IfcProcess);\n\tTaskId : IfcIdentifier;\n\tStatus : OPTIONAL IfcLabel;\n\tWorkMethod : OPTIONAL IfcLabel;\n\tIsMilestone : BOOLEAN;\n\tPriority : OPTIONAL INTEGER;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* SELF\\IfcObjectDefinition.Decomposes | NOT('IFC2X3.IFCRELNESTS' IN TYPEOF(temp)))) = 0;\n\tWR2 : SIZEOF(QUERY(temp <* SELF\\IfcObjectDefinition.IsDecomposedBy | NOT('IFC2X3.IFCRELNESTS' IN TYPEOF(temp)))) = 0;\n\tWR3 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcTelecomAddress\n SUBTYPE OF (IfcAddress);\n\tTelephoneNumbers : OPTIONAL LIST [1:?] OF IfcLabel;\n\tFacsimileNumbers : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPagerNumber : OPTIONAL IfcLabel;\n\tElectronicMailAddresses : OPTIONAL LIST [1:?] OF IfcLabel;\n\tWWWHomePageURL : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS (TelephoneNumbers) OR\n            EXISTS (PagerNumber) OR\n            EXISTS (FacsimileNumbers) OR \n            EXISTS (ElectronicMailAddresses) OR \n            EXISTS (WWWHomePageURL);\nEND_ENTITY;\n\nENTITY IfcTendon\n SUBTYPE OF (IfcReinforcingElement);\n\tPredefinedType : IfcTendonTypeEnum;\n\tNominalDiameter : IfcPositiveLengthMeasure;\n\tCrossSectionArea : IfcAreaMeasure;\n\tTensionForce : OPTIONAL IfcForceMeasure;\n\tPreStress : OPTIONAL IfcPressureMeasure;\n\tFrictionCoefficient : OPTIONAL IfcNormalisedRatioMeasure;\n\tAnchorageSlip : OPTIONAL IfcPositiveLengthMeasure;\n\tMinCurvatureRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : (PredefinedType <> IfcTendonTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTendonTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcTendonAnchor\n SUBTYPE OF (IfcReinforcingElement);\nEND_ENTITY;\n\nENTITY IfcTerminatorSymbol\n SUPERTYPE OF (ONEOF\n\t(IfcDimensionCurveTerminator))\n SUBTYPE OF (IfcAnnotationSymbolOccurrence);\n\tAnnotatedCurve : IfcAnnotationCurveOccurrence;\nEND_ENTITY;\n\nENTITY IfcTextLiteral\n SUPERTYPE OF (ONEOF\n\t(IfcTextLiteralWithExtent))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tLiteral : IfcPresentableText;\n\tPlacement : IfcAxis2Placement;\n\tPath : IfcTextPath;\nEND_ENTITY;\n\nENTITY IfcTextLiteralWithExtent\n SUBTYPE OF (IfcTextLiteral);\n\tExtent : IfcPlanarExtent;\n\tBoxAlignment : IfcBoxAlignment;\n WHERE\n\tWR31 : NOT('IFC2X3.IFCPLANARBOX' IN TYPEOF(Extent));\nEND_ENTITY;\n\nENTITY IfcTextStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tTextCharacterAppearance : OPTIONAL IfcCharacterStyleSelect;\n\tTextStyle : OPTIONAL IfcTextStyleSelect;\n\tTextFontStyle : IfcTextFontSelect;\nEND_ENTITY;\n\nENTITY IfcTextStyleFontModel\n SUBTYPE OF (IfcPreDefinedTextFont);\n\tFontFamily : OPTIONAL LIST [1:?] OF IfcTextFontName;\n\tFontStyle : OPTIONAL IfcFontStyle;\n\tFontVariant : OPTIONAL IfcFontVariant;\n\tFontWeight : OPTIONAL IfcFontWeight;\n\tFontSize : IfcSizeSelect;\n WHERE\n\tWR31 : ('IFC2X3.IFCLENGTHMEASURE' IN TYPEOF(SELF.FontSize)) AND\n             (SELF.FontSize > 0.);\nEND_ENTITY;\n\nENTITY IfcTextStyleForDefinedFont;\n\tColour : IfcColour;\n\tBackgroundColour : OPTIONAL IfcColour;\nEND_ENTITY;\n\nENTITY IfcTextStyleTextModel;\n\tTextIndent : OPTIONAL IfcSizeSelect;\n\tTextAlign : OPTIONAL IfcTextAlignment;\n\tTextDecoration : OPTIONAL IfcTextDecoration;\n\tLetterSpacing : OPTIONAL IfcSizeSelect;\n\tWordSpacing : OPTIONAL IfcSizeSelect;\n\tTextTransform : OPTIONAL IfcTextTransformation;\n\tLineHeight : OPTIONAL IfcSizeSelect;\nEND_ENTITY;\n\nENTITY IfcTextStyleWithBoxCharacteristics;\n\tBoxHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tBoxWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tBoxSlantAngle : OPTIONAL IfcPlaneAngleMeasure;\n\tBoxRotateAngle : OPTIONAL IfcPlaneAngleMeasure;\n\tCharacterSpacing : OPTIONAL IfcSizeSelect;\nEND_ENTITY;\n\nENTITY IfcTextureCoordinate\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcTextureCoordinateGenerator\n\t,IfcTextureMap));\n INVERSE\n\tAnnotatedSurface : SET [1:1] OF IfcAnnotationSurface FOR TextureCoordinates;\nEND_ENTITY;\n\nENTITY IfcTextureCoordinateGenerator\n SUBTYPE OF (IfcTextureCoordinate);\n\tMode : IfcLabel;\n\tParameter : LIST [1:?] OF IfcSimpleValue;\nEND_ENTITY;\n\nENTITY IfcTextureMap\n SUBTYPE OF (IfcTextureCoordinate);\n\tTextureMaps : SET [1:?] OF IfcVertexBasedTextureMap;\n WHERE\n\tWR11 : SIZEOF([\n               'IFC2X3.IFCSHELLBASEDSURFACEMODEL',\n               'IFC2X3.IFCFACEBASEDSURFACEMODEL',\n               'IFC2X3.IFCFACETEDBREP',\n               'IFC2X3.IFCFACETEDBREPWITHVOIDS'] \n              * TYPEOF(SELF\\IfcTextureCoordinate.AnnotatedSurface[1].Item)\n               ) >= 1;\nEND_ENTITY;\n\nENTITY IfcTextureVertex;\n\tCoordinates : LIST [2:2] OF IfcParameterValue;\nEND_ENTITY;\n\nENTITY IfcThermalMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tSpecificHeatCapacity : OPTIONAL IfcSpecificHeatCapacityMeasure;\n\tBoilingPoint : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tFreezingPoint : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tThermalConductivity : OPTIONAL IfcThermalConductivityMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcTimeSeries\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcIrregularTimeSeries\n\t,IfcRegularTimeSeries));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tStartTime : IfcDateTimeSelect;\n\tEndTime : IfcDateTimeSelect;\n\tTimeSeriesDataType : IfcTimeSeriesDataTypeEnum;\n\tDataOrigin : IfcDataOriginEnum;\n\tUserDefinedDataOrigin : OPTIONAL IfcLabel;\n\tUnit : OPTIONAL IfcUnit;\n INVERSE\n\tDocumentedBy : SET [0:1] OF IfcTimeSeriesReferenceRelationship FOR ReferencedTimeSeries;\nEND_ENTITY;\n\nENTITY IfcTimeSeriesReferenceRelationship;\n\tReferencedTimeSeries : IfcTimeSeries;\n\tTimeSeriesReferences : SET [1:?] OF IfcDocumentSelect;\nEND_ENTITY;\n\nENTITY IfcTimeSeriesSchedule\n SUBTYPE OF (IfcControl);\n\tApplicableDates : OPTIONAL LIST [1:?] OF IfcDateTimeSelect;\n\tTimeSeriesScheduleType : IfcTimeSeriesScheduleTypeEnum;\n\tTimeSeries : IfcTimeSeries;\n WHERE\n\tWR41 : NOT(TimeSeriesScheduleType=IfcTimeSeriesScheduleTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcTimeSeriesValue;\n\tListValues : LIST [1:?] OF IfcValue;\nEND_ENTITY;\n\nENTITY IfcTopologicalRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConnectedFaceSet\n\t,IfcEdge\n\t,IfcFace\n\t,IfcFaceBound\n\t,IfcLoop\n\t,IfcPath\n\t,IfcVertex))\n SUBTYPE OF (IfcRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcTopologyRepresentation\n SUBTYPE OF (IfcShapeModel);\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* SELF\\IfcRepresentation.Items | \n               NOT('IFC2X3.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))\n             )) = 0;\n\tWR22 : EXISTS(SELF\\IfcRepresentation.RepresentationType);\n\tWR23 : IfcTopologyRepresentationTypes(SELF\\IfcRepresentation.RepresentationType, SELF\\IfcRepresentation.Items);\nEND_ENTITY;\n\nENTITY IfcTransformerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcTransformerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcTransportElement\n SUBTYPE OF (IfcElement);\n\tOperationType : OPTIONAL IfcTransportElementTypeEnum;\n\tCapacityByWeight : OPTIONAL IfcMassMeasure;\n\tCapacityByNumber : OPTIONAL IfcCountMeasure;\nEND_ENTITY;\n\nENTITY IfcTransportElementType\n SUBTYPE OF (IfcElementType);\n\tPredefinedType : IfcTransportElementTypeEnum;\nEND_ENTITY;\n\nENTITY IfcTrapeziumProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tBottomXDim : IfcPositiveLengthMeasure;\n\tTopXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\n\tTopXOffset : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcTrimmedCurve\n SUBTYPE OF (IfcBoundedCurve);\n\tBasisCurve : IfcCurve;\n\tTrim1 : SET [1:2] OF IfcTrimmingSelect;\n\tTrim2 : SET [1:2] OF IfcTrimmingSelect;\n\tSenseAgreement : BOOLEAN;\n\tMasterRepresentation : IfcTrimmingPreference;\n WHERE\n\tWR41 : (HIINDEX(Trim1) = 1) OR (TYPEOF(Trim1[1]) <> TYPEOF(Trim1[2]));\n\tWR42 : (HIINDEX(Trim2) = 1) OR (TYPEOF(Trim2[1]) <> TYPEOF(Trim2[2]));\n\tWR43 : NOT('IFC2X3.IFCBOUNDEDCURVE' IN TYPEOF(BasisCurve));\nEND_ENTITY;\n\nENTITY IfcTubeBundleType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcTubeBundleTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcTubeBundleTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcTubeBundleTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTwoDirectionRepeatFactor\n SUBTYPE OF (IfcOneDirectionRepeatFactor);\n\tSecondRepeatFactor : IfcVector;\nEND_ENTITY;\n\nENTITY IfcTypeObject\n SUPERTYPE OF (ONEOF\n\t(IfcTypeProduct))\n SUBTYPE OF (IfcObjectDefinition);\n\tApplicableOccurrence : OPTIONAL IfcLabel;\n\tHasPropertySets : OPTIONAL SET [1:?] OF IfcPropertySetDefinition;\n INVERSE\n\tObjectTypeOf : SET [0:1] OF IfcRelDefinesByType FOR RelatingType;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcTypeProduct\n SUPERTYPE OF (ONEOF\n\t(IfcDoorStyle\n\t,IfcElementType\n\t,IfcWindowStyle))\n SUBTYPE OF (IfcTypeObject);\n\tRepresentationMaps : OPTIONAL LIST [1:?] OF UNIQUE IfcRepresentationMap;\n\tTag : OPTIONAL IfcLabel;\n WHERE\n\tWR41 : NOT(EXISTS(SELF\\IfcTypeObject.ObjectTypeOf[1])) OR\n             (SIZEOF(QUERY(temp <* SELF\\IfcTypeObject.ObjectTypeOf[1].RelatedObjects |\n               NOT('IFC2X3.IFCPRODUCT' IN TYPEOF(temp)))\n             ) = 0);\nEND_ENTITY;\n\nENTITY IfcUShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tCentreOfGravityInX : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR21 : FlangeThickness < (Depth / 2.);\n\tWR22 : WebThickness < FlangeWidth;\nEND_ENTITY;\n\nENTITY IfcUnitAssignment;\n\tUnits : SET [1:?] OF IfcUnit;\n WHERE\n\tWR01 : IfcCorrectUnitAssignment(Units);\nEND_ENTITY;\n\nENTITY IfcUnitaryEquipmentType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcUnitaryEquipmentTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcUnitaryEquipmentTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcUnitaryEquipmentTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcValveType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcValveTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcValveTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcValveTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcVector\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOrientation : IfcDirection;\n\tMagnitude : IfcLengthMeasure;\n DERIVE\n\tDim : IfcDimensionCount := Orientation.Dim;\n WHERE\n\tWR1 : Magnitude >= 0.0;\nEND_ENTITY;\n\nENTITY IfcVertex\n SUPERTYPE OF (ONEOF\n\t(IfcVertexPoint))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcVertexBasedTextureMap;\n\tTextureVertices : LIST [3:?] OF IfcTextureVertex;\n\tTexturePoints : LIST [3:?] OF IfcCartesianPoint;\nEND_ENTITY;\n\nENTITY IfcVertexLoop\n SUBTYPE OF (IfcLoop);\n\tLoopVertex : IfcVertex;\nEND_ENTITY;\n\nENTITY IfcVertexPoint\n SUBTYPE OF (IfcVertex);\n\tVertexGeometry : IfcPoint;\nEND_ENTITY;\n\nENTITY IfcVibrationIsolatorType\n SUBTYPE OF (IfcDiscreteAccessoryType);\n\tPredefinedType : IfcVibrationIsolatorTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcVibrationIsolatorTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcVibrationIsolatorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcVirtualElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcVirtualGridIntersection;\n\tIntersectingAxes : LIST [2:2] OF UNIQUE IfcGridAxis;\n\tOffsetDistances : LIST [2:3] OF IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcWall\n SUPERTYPE OF (ONEOF\n\t(IfcWallStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n WHERE\n\tWR1 : SIZEOF (QUERY(temp <* SELF\\IfcObjectDefinition.HasAssociations |\n              'IFC2X3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)\n              )) <= 1;\nEND_ENTITY;\n\nENTITY IfcWallStandardCase\n SUBTYPE OF (IfcWall);\n WHERE\n\tWR1 : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC2X3.IFCRELASSOCIATES.RELATEDOBJECTS') |\n                          ('IFC2X3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND\n                          ('IFC2X3.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial))\n                          )) = 1;\nEND_ENTITY;\n\nENTITY IfcWallType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcWallTypeEnum;\nEND_ENTITY;\n\nENTITY IfcWasteTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcWasteTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcWaterProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tIsPotable : OPTIONAL BOOLEAN;\n\tHardness : OPTIONAL IfcIonConcentrationMeasure;\n\tAlkalinityConcentration : OPTIONAL IfcIonConcentrationMeasure;\n\tAcidityConcentration : OPTIONAL IfcIonConcentrationMeasure;\n\tImpuritiesContent : OPTIONAL IfcNormalisedRatioMeasure;\n\tPHLevel : OPTIONAL IfcPHMeasure;\n\tDissolvedSolidsContent : OPTIONAL IfcNormalisedRatioMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcWindow\n SUBTYPE OF (IfcBuildingElement);\n\tOverallHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tOverallWidth : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcWindowLiningProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tLiningDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tLiningThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTransomThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tMullionThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tFirstTransomOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tSecondTransomOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tFirstMullionOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tSecondMullionOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n WHERE\n\tWR31 : NOT(NOT(EXISTS(LiningDepth)) AND EXISTS(LiningThickness));\n\tWR32 : NOT(NOT(EXISTS(FirstTransomOffset)) AND EXISTS(SecondTransomOffset));\n\tWR33 : NOT(NOT(EXISTS(FirstMullionOffset)) AND EXISTS(SecondMullionOffset));\n\tWR34 : EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1]) AND \n             ('IFC2X3.IFCWINDOWSTYLE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]));\nEND_ENTITY;\n\nENTITY IfcWindowPanelProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tOperationType : IfcWindowPanelOperationEnum;\n\tPanelPosition : IfcWindowPanelPositionEnum;\n\tFrameDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tFrameThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\nEND_ENTITY;\n\nENTITY IfcWindowStyle\n SUBTYPE OF (IfcTypeProduct);\n\tConstructionType : IfcWindowStyleConstructionEnum;\n\tOperationType : IfcWindowStyleOperationEnum;\n\tParameterTakesPrecedence : BOOLEAN;\n\tSizeable : BOOLEAN;\nEND_ENTITY;\n\nENTITY IfcWorkControl\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcWorkPlan\n\t,IfcWorkSchedule))\n SUBTYPE OF (IfcControl);\n\tIdentifier : IfcIdentifier;\n\tCreationDate : IfcDateTimeSelect;\n\tCreators : OPTIONAL SET [1:?] OF IfcPerson;\n\tPurpose : OPTIONAL IfcLabel;\n\tDuration : OPTIONAL IfcTimeMeasure;\n\tTotalFloat : OPTIONAL IfcTimeMeasure;\n\tStartTime : IfcDateTimeSelect;\n\tFinishTime : OPTIONAL IfcDateTimeSelect;\n\tWorkControlType : OPTIONAL IfcWorkControlTypeEnum;\n\tUserDefinedControlType : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : (WorkControlType <> IfcWorkControlTypeEnum.USERDEFINED) OR\n            ((WorkControlType = IfcWorkControlTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcWorkControl.UserDefinedControlType));\nEND_ENTITY;\n\nENTITY IfcWorkPlan\n SUBTYPE OF (IfcWorkControl);\nEND_ENTITY;\n\nENTITY IfcWorkSchedule\n SUBTYPE OF (IfcWorkControl);\nEND_ENTITY;\n\nENTITY IfcZShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR21 : FlangeThickness < (Depth / 2.);\nEND_ENTITY;\n\nENTITY IfcZone\n SUBTYPE OF (IfcGroup);\n WHERE\n\tWR1 : SIZEOF (QUERY (temp <* SELF\\IfcGroup.IsGroupedBy.RelatedObjects |  NOT(('IFC2X3.IFCZONE' IN TYPEOF(temp)) OR ('IFC2X3.IFCSPACE' IN TYPEOF(temp))) )) = 0;\nEND_ENTITY;\n\nFUNCTION IfcAddToBeginOfList\n\t(AScalar : GENERIC;\n       AList   : LIST OF GENERIC:AL)\n\t: LIST[1:?] OF GENERIC:AL;\n    \n      LOCAL\n        Result : LIST OF GENERIC:AL := [];\n      END_LOCAL;\n  \n    IF NOT(EXISTS(AScalar)) THEN\n      Result := AList;\n    ELSE\n      Result := Result + AScalar;\n      IF (HIINDEX(AList) >= 1) THEN\n        REPEAT i:=1 TO HIINDEX(AList);\n          Result[i+1] := AList[i];\n        END_REPEAT;\n      END_IF;\n    END_IF;\n    RETURN(Result);\nEND_FUNCTION;\n\nFUNCTION IfcBaseAxis\n\t(Dim : INTEGER; \n     Axis1, Axis2, Axis3 : IfcDirection)\n\t: LIST [2:3] OF IfcDirection;\n  \n  LOCAL\n    U : LIST [2:3] OF IfcDirection;\n    Factor : REAL;\n    D1, D2 : IfcDirection;\n  END_LOCAL;\n  \n    IF (Dim = 3) THEN \n      D1 := NVL(IfcNormalise(Axis3), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n      D2 := IfcFirstProjAxis(D1, Axis1);\n      U  := [D2, IfcSecondProjAxis(D1, D2, Axis2), D1];\n    ELSE\n      IF EXISTS(Axis1) THEN\n        D1 := IfcNormalise(Axis1);\n        U  := [D1, IfcOrthogonalComplement(D1)];\n        IF EXISTS(Axis2) THEN\n          Factor := IfcDotProduct(Axis2, U[2]);\n          IF (Factor < 0.0) THEN\n            U[2].DirectionRatios[1] := -U[2].DirectionRatios[1];\n            U[2].DirectionRatios[2] := -U[2].DirectionRatios[2];\n          END_IF;\n        END_IF;\n      ELSE\n        IF EXISTS(Axis2) THEN\n          D1 := IfcNormalise(Axis2);\n          U  := [IfcOrthogonalComplement(D1), D1];\n          U[1].DirectionRatios[1] := -U[1].DirectionRatios[1];\n          U[1].DirectionRatios[2] := -U[1].DirectionRatios[2];\n          ELSE\n            U := [IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0, 0.0]), \n                  IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0, 1.0])];\n        END_IF;\n      END_IF;\n    END_IF;\n    RETURN(U);\nEND_FUNCTION;\n\nFUNCTION IfcBooleanChoose\n\t(B : BOOLEAN ;\n       Choice1, Choice2 : Generic : Item)\n\t: Generic : Item;\n    IF B THEN\n       RETURN (Choice1);\n    ELSE\n       RETURN (Choice2);\n    END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcBuild2Axes\n\t(RefDirection : IfcDirection)\n\t: LIST [2:2] OF IfcDirection;\n  LOCAL\n    D : IfcDirection := NVL(IfcNormalise(RefDirection),\n        IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0]));\n  END_LOCAL;\n    RETURN([D, IfcOrthogonalComplement(D)]);\nEND_FUNCTION;\n\nFUNCTION IfcBuildAxes\n\t(Axis, RefDirection : IfcDirection)\n\t: LIST [3:3] OF IfcDirection;\n  LOCAL\n    D1, D2 : IfcDirection;\n  END_LOCAL;\n    D1 := NVL(IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n    D2 := IfcFirstProjAxis(D1, RefDirection);\n    RETURN ([D2, IfcNormalise(IfcCrossProduct(D1,D2))\\IfcVector.Orientation, D1]);\nEND_FUNCTION;\n\nFUNCTION IfcCorrectDimensions\n\t(m   : IfcUnitEnum; Dim : IfcDimensionalExponents)\n\t: LOGICAL;  \n  CASE m OF\n    LENGTHUNIT : IF\n      Dim = (IfcDimensionalExponents (1, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    MASSUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 1, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    TIMEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 1, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICCURRENTUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    THERMODYNAMICTEMPERATUREUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 1, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    AMOUNTOFSUBSTANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 1, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    LUMINOUSINTENSITYUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    PLANEANGLEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    SOLIDANGLEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    AREAUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    VOLUMEUNIT : IF\n      Dim = (IfcDimensionalExponents (3, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n  \n    ABSORBEDDOSEUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    RADIOACTIVITYUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICCAPACITANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (-2, 1, 4, 1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    DOSEEQUIVALENTUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICCHARGEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 1, 1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICCONDUCTANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (-2, -1, 3, 2, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICVOLTAGEUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -3, -1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICRESISTANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -3, -2, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ENERGYUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    FORCEUNIT : IF\n      Dim = (IfcDimensionalExponents (1, 1, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    FREQUENCYUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    INDUCTANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -2, -2, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ILLUMINANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (-2, 0, 0, 0, 0, 0, 1))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    LUMINOUSFLUXUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    MAGNETICFLUXUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -2, -1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    MAGNETICFLUXDENSITYUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 1, -2, -1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    POWERUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -3, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    PRESSUREUNIT : IF\n      Dim = (IfcDimensionalExponents (-1, 1, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n  \n    OTHERWISE :\n      RETURN (UNKNOWN);\n  END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcCorrectFillAreaStyle\n\t(Styles : SET[1:?] OF IfcFillStyleSelect)\n\t: LOGICAL;\n  \n  LOCAL\n     Hatching : INTEGER := 0;\n     Tiles    : INTEGER := 0;\n     Colour   : INTEGER := 0;\n     External : INTEGER := 0;\n  END_LOCAL;\n  \n  \n  External := SIZEOF(QUERY(Style <* Styles |\n    'IFC2X3.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN\n     TYPEOF(Style)));\n  \n  Hatching  := SIZEOF(QUERY(Style <* Styles |\n    'IFC2X3.IFCFILLAREASTYLEHATCHING' IN\n     TYPEOF(Style)));\n  \n  Tiles     := SIZEOF(QUERY(Style <* Styles |\n    'IFC2X3.IFCFILLAREASTYLETILES' IN\n     TYPEOF(Style)));\n  \n  Colour    := SIZEOF(QUERY(Style <* Styles |\n    'IFC2X3.IFCCOLOUR' IN\n     TYPEOF(Style)));\n  \n  \n  IF (External > 1) THEN\n    RETURN (FALSE);\n  END_IF;\n  \n  \n  IF ((External = 1) AND ((Hatching > 0) OR (Tiles > 0) OR (Colour > 0))) THEN\n    RETURN (FALSE);\n  END_IF;\n  \n  \n  IF (Colour > 1) THEN\n    RETURN (FALSE);\n  END_IF;\n  \n  IF ((Hatching > 0) AND (Tiles >0)) THEN\n    RETURN (FALSE);\n  END_IF;\n  \n  RETURN(TRUE);\nEND_FUNCTION;\n\nFUNCTION IfcCorrectLocalPlacement\n\t(AxisPlacement:IfcAxis2Placement; \n     RelPlacement : IfcObjectPlacement)\n\t: LOGICAL;\n  \n    IF (EXISTS(RelPlacement)) THEN\n      IF ('IFC2X3.IFCGRIDPLACEMENT' IN TYPEOF(RelPlacement)) THEN\n        RETURN(?);\n      END_IF;\n      IF ('IFC2X3.IFCLOCALPLACEMENT' IN TYPEOF(RelPlacement)) THEN\n        IF ('IFC2X3.IFCAXIS2PLACEMENT2D' IN TYPEOF(AxisPlacement)) THEN\n          RETURN(TRUE);\n        END_IF;\n        IF ('IFC2X3.IFCAXIS2PLACEMENT3D' IN TYPEOF(AxisPlacement)) THEN\n          IF (RelPlacement.RelativePlacement.Dim = 3) THEN\n            RETURN(TRUE);\n          ELSE\n            RETURN(FALSE);\n          END_IF;\n        END_IF;\n      END_IF;\n    ELSE\n      RETURN(TRUE);  \n    END_IF;\n    RETURN(?);\nEND_FUNCTION;\n\nFUNCTION IfcCorrectObjectAssignment\n\t(Constraint: IfcObjectTypeEnum; Objects : SET[1:?] OF IfcObjectDefinition)\n\t: LOGICAL;\n    \n  LOCAL\n    Count : INTEGER := 0;\n  END_LOCAL;\n  \n      IF NOT(EXISTS(Constraint)) THEN \n        RETURN(TRUE);\n      END_IF;\n    \n      CASE Constraint OF\n        IfcObjectTypeEnum.NOTDEFINED : RETURN(TRUE);\n        IfcObjectTypeEnum.PRODUCT :\n          BEGIN\n            Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCPRODUCT' IN TYPEOF(temp))));\n            RETURN(Count = 0);\n          END;\n        IfcObjectTypeEnum.PROCESS :\n          BEGIN\n            Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCPROCESS' IN TYPEOF(temp))));\n            RETURN(Count = 0);\n          END;\n        IfcObjectTypeEnum.CONTROL :\n          BEGIN\n            Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCCONTROL' IN TYPEOF(temp))));\n            RETURN(Count = 0);\n          END;\n        IfcObjectTypeEnum.RESOURCE :\n          BEGIN\n            Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCRESOURCE' IN TYPEOF(temp))));\n            RETURN(Count = 0);\n          END;\n        IfcObjectTypeEnum.ACTOR :\n          BEGIN\n            Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCACTOR' IN TYPEOF(temp))));\n            RETURN(Count = 0);\n          END;\n        IfcObjectTypeEnum.GROUP :\n          BEGIN\n            Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCGROUP' IN TYPEOF(temp))));\n            RETURN(Count = 0);\n          END;\n        IfcObjectTypeEnum.PROJECT :\n          BEGIN\n            Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCPROJECT' IN TYPEOF(temp))));\n            RETURN(Count = 0);\n          END;\n        OTHERWISE : RETURN(?);\n      END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcCorrectUnitAssignment\n\t(Units : SET [1:?] OF IfcUnit)\n\t: LOGICAL;\n  \n    LOCAL\n      NamedUnitNumber    : INTEGER := 0;\n      DerivedUnitNumber  : INTEGER := 0;\n      MonetaryUnitNumber : INTEGER := 0;\n      NamedUnitNames     : SET OF IfcUnitEnum := [];\n      DerivedUnitNames   : SET OF IfcDerivedUnitEnum := [];\n    END_LOCAL;\n  \n    NamedUnitNumber    := SIZEOF(QUERY(temp <* Units | ('IFC2X3.IFCNAMEDUNIT' IN TYPEOF(temp)) AND NOT(temp\\IfcNamedUnit.UnitType = IfcUnitEnum.USERDEFINED)));\n    DerivedUnitNumber  := SIZEOF(QUERY(temp <* Units | ('IFC2X3.IFCDERIVEDUNIT' IN TYPEOF(temp)) AND NOT(temp\\IfcDerivedUnit.UnitType = IfcDerivedUnitEnum.USERDEFINED)));\n    MonetaryUnitNumber := SIZEOF(QUERY(temp <* Units |  'IFC2X3.IFCMONETARYUNIT' IN TYPEOF(temp)));\n  \n    REPEAT i := 1 TO SIZEOF(Units);\n      IF (('IFC2X3.IFCNAMEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i]\\IfcNamedUnit.UnitType = IfcUnitEnum.USERDEFINED)) THEN\n          NamedUnitNames := NamedUnitNames + Units[i]\\IfcNamedUnit.UnitType;\n      END_IF;\n      IF (('IFC2X3.IFCDERIVEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i]\\IfcDerivedUnit.UnitType = IfcDerivedUnitEnum.USERDEFINED)) THEN\n          DerivedUnitNames := DerivedUnitNames + Units[i]\\IfcDerivedUnit.UnitType;\n      END_IF;\n    END_REPEAT;\n  \n    RETURN((SIZEOF(NamedUnitNames) = NamedUnitNumber) AND (SIZEOF(DerivedUnitNames) = DerivedUnitNumber) AND (MonetaryUnitNumber <= 1));\nEND_FUNCTION;\n\nFUNCTION IfcCrossProduct\n\t(Arg1, Arg2 : IfcDirection)\n\t: IfcVector;\n  LOCAL\n    Mag : REAL;\n    Res : IfcDirection;\n    V1,V2  : LIST[3:3] OF REAL;\n    Result : IfcVector;\n  END_LOCAL;\n  \n    IF (NOT EXISTS (Arg1) OR (Arg1.Dim = 2)) OR (NOT EXISTS (Arg2) OR (Arg2.Dim = 2)) THEN\n      RETURN(?);\n    ELSE\n      BEGIN\n        V1  := IfcNormalise(Arg1).DirectionRatios;\n        V2  := IfcNormalise(Arg2).DirectionRatios;\n        Res := IfcRepresentationItem() || IfcGeometricRepresentationItem () \n               || IfcDirection([(V1[2]*V2[3] - V1[3]*V2[2]), (V1[3]*V2[1] - V1[1]*V2[3]), (V1[1]*V2[2] - V1[2]*V2[1])]);\n        Mag := 0.0;\n        REPEAT i := 1 TO 3;\n          Mag := Mag + Res.DirectionRatios[i]*Res.DirectionRatios[i];\n        END_REPEAT;\n        IF (Mag > 0.0) THEN\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Res, SQRT(Mag));\n        ELSE\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Arg1, 0.0);\n        END_IF;\n        RETURN(Result);\n      END;\n    END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcCurveDim\n\t(Curve : IfcCurve)\n\t: IfcDimensionCount;\n  \n    IF ('IFC2X3.IFCLINE' IN TYPEOF(Curve))\n      THEN RETURN(Curve\\IfcLine.Pnt.Dim);\n    END_IF;\n    IF ('IFC2X3.IFCCONIC' IN TYPEOF(Curve))\n      THEN RETURN(Curve\\IfcConic.Position.Dim);\n    END_IF;\n    IF ('IFC2X3.IFCPOLYLINE' IN TYPEOF(Curve))\n      THEN RETURN(Curve\\IfcPolyline.Points[1].Dim);\n    END_IF;\n    IF ('IFC2X3.IFCTRIMMEDCURVE' IN TYPEOF(Curve))\n      THEN RETURN(IfcCurveDim(Curve\\IfcTrimmedCurve.BasisCurve));\n    END_IF;\n    IF ('IFC2X3.IFCCOMPOSITECURVE' IN TYPEOF(Curve))\n      THEN RETURN(Curve\\IfcCompositeCurve.Segments[1].Dim);\n    END_IF;\n    IF ('IFC2X3.IFCBSPLINECURVE' IN TYPEOF(Curve))\n      THEN RETURN(Curve\\IfcBSplineCurve.ControlPointsList[1].Dim);\n    END_IF;\n    IF ('IFC2X3.IFCOFFSETCURVE2D' IN TYPEOF(Curve))\n      THEN RETURN(2); \n    END_IF;\n    IF ('IFC2X3.IFCOFFSETCURVE3D' IN TYPEOF(Curve))\n      THEN RETURN(3);\n    END_IF;\n  RETURN (?);\nEND_FUNCTION;\n\nFUNCTION IfcCurveWeightsPositive\n\t(B: IfcRationalBezierCurve)\n\t: BOOLEAN;\n     LOCAL\n       Result : BOOLEAN := TRUE;\n     END_LOCAL;\n  \n     REPEAT i := 0 TO B.UpperIndexOnControlPoints;\n       IF B.Weights[i] <= 0.0  THEN\n         Result := FALSE;\n         RETURN(Result);\n       END_IF;\n     END_REPEAT;\n     RETURN(Result);\nEND_FUNCTION;\n\nFUNCTION IfcDeriveDimensionalExponents\n\t(UnitElements : SET [1:?] Of IfcDerivedUnitElement)\n\t: IfcDimensionalExponents;  \n      LOCAL\n      Result : IfcDimensionalExponents :=\n              IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 0);  \n      END_LOCAL;\n      REPEAT i := LOINDEX(UnitElements) TO HIINDEX(UnitElements);\n          Result.LengthExponent := Result.LengthExponent +\n            (UnitElements[i].Exponent *\n             UnitElements[i].Unit.Dimensions.LengthExponent);\n          Result.MassExponent := Result.MassExponent  +\n            (UnitElements[i].Exponent *\n             UnitElements[i].Unit.Dimensions.MassExponent);\n          Result.TimeExponent := Result.TimeExponent +\n            (UnitElements[i].Exponent *\n             UnitElements[i].Unit.Dimensions.TimeExponent);\n          Result.ElectricCurrentExponent := Result.ElectricCurrentExponent +\n            (UnitElements[i].Exponent *\n             UnitElements[i].Unit.Dimensions.ElectricCurrentExponent);\n          Result.ThermodynamicTemperatureExponent := Result.ThermodynamicTemperatureExponent +\n            (UnitElements[i].Exponent *\n             UnitElements[i].Unit.Dimensions.ThermodynamicTemperatureExponent);\n          Result.AmountOfSubstanceExponent := Result.AmountOfSubstanceExponent +\n            (UnitElements[i].Exponent *\n             UnitElements[i].Unit.Dimensions.AmountOfSubstanceExponent);\n          Result.LuminousIntensityExponent := Result.LuminousIntensityExponent +\n            (UnitElements[i].Exponent *\n             UnitElements[i].Unit.Dimensions.LuminousIntensityExponent);\n      END_REPEAT;  \n      RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcDimensionsForSiUnit\n\t(n : IfcSiUnitName )\n\t: IfcDimensionalExponents;\n    CASE n OF\n      METRE          : RETURN (IfcDimensionalExponents\n                               (1, 0, 0, 0, 0, 0, 0));\n      SQUARE_METRE   : RETURN (IfcDimensionalExponents\n                               (2, 0, 0, 0, 0, 0, 0));\n      CUBIC_METRE    : RETURN (IfcDimensionalExponents\n                               (3, 0, 0, 0, 0, 0, 0));\n      GRAM           : RETURN (IfcDimensionalExponents\n                               (0, 1, 0, 0, 0, 0, 0));\n      SECOND         : RETURN (IfcDimensionalExponents\n                               (0, 0, 1, 0, 0, 0, 0));\n      AMPERE         : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 1, 0, 0, 0));\n      KELVIN         : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 1, 0, 0));\n      MOLE           : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 1, 0));\n      CANDELA        : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 1));\n      RADIAN         : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 0));\n      STERADIAN      : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 0));\n      HERTZ          : RETURN (IfcDimensionalExponents\n                               (0, 0, -1, 0, 0, 0, 0));\n      NEWTON         : RETURN (IfcDimensionalExponents\n                               (1, 1, -2, 0, 0, 0, 0));\n      PASCAL         : RETURN (IfcDimensionalExponents\n                               (-1, 1, -2, 0, 0, 0, 0));\n      JOULE          : RETURN (IfcDimensionalExponents\n                               (2, 1, -2, 0, 0, 0, 0));\n      WATT           : RETURN (IfcDimensionalExponents\n                               (2, 1, -3, 0, 0, 0, 0));\n      COULOMB        : RETURN (IfcDimensionalExponents\n                               (0, 0, 1, 1, 0, 0, 0));\n      VOLT           : RETURN (IfcDimensionalExponents\n                               (2, 1, -3, -1, 0, 0, 0));\n      FARAD          : RETURN (IfcDimensionalExponents\n                               (-2, -1, 4, 1, 0, 0, 0));\n      OHM            : RETURN (IfcDimensionalExponents\n                               (2, 1, -3, -2, 0, 0, 0));\n      SIEMENS        : RETURN (IfcDimensionalExponents\n                               (-2, -1, 3, 2, 0, 0, 0));\n      WEBER          : RETURN (IfcDimensionalExponents\n                               (2, 1, -2, -1, 0, 0, 0));\n      TESLA          : RETURN (IfcDimensionalExponents\n                               (0, 1, -2, -1, 0, 0, 0));\n      HENRY          : RETURN (IfcDimensionalExponents\n                               (2, 1, -2, -2, 0, 0, 0));\n      DEGREE_CELSIUS : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 1, 0, 0));\n      LUMEN          : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 1));\n      LUX            : RETURN (IfcDimensionalExponents\n                               (-2, 0, 0, 0, 0, 0, 1));\n      BECQUEREL      : RETURN (IfcDimensionalExponents\n                               (0, 0, -1, 0, 0, 0, 0));\n      GRAY           : RETURN (IfcDimensionalExponents\n                               (2, 0, -2, 0, 0, 0, 0));\n      SIEVERT        : RETURN (IfcDimensionalExponents\n                               (2, 0, -2, 0, 0, 0, 0));\n      OTHERWISE      : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 0));\n    END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcDotProduct\n\t(Arg1, Arg2 : IfcDirection)\n\t: REAL;\n  LOCAL\n    Scalar : REAL;\n    Vec1, Vec2 : IfcDirection;\n    Ndim   : INTEGER;\n  END_LOCAL;\n  \n    IF NOT EXISTS (Arg1) OR NOT EXISTS (Arg2) THEN\n      Scalar := ?;\n    ELSE\n      IF (Arg1.Dim <> Arg2.Dim) THEN\n        Scalar := ?;\n      ELSE\n        BEGIN\n          Vec1 := IfcNormalise(Arg1);\n          Vec2 := IfcNormalise(Arg2);\n          Ndim := Arg1.Dim;\n          Scalar := 0.0;\n          REPEAT i := 1 TO Ndim;\n            Scalar := Scalar + Vec1.DirectionRatios[i]*Vec2.DirectionRatios[i];\n          END_REPEAT;\n        END;\n      END_IF;\n    END_IF;\n    RETURN (Scalar);\nEND_FUNCTION;\n\nFUNCTION IfcFirstProjAxis\n\t(ZAxis, Arg : IfcDirection)\n\t: IfcDirection;\n  LOCAL\n    XAxis : IfcDirection;\n    V     : IfcDirection;\n    Z     : IfcDirection;\n    XVec  : IfcVector;\n  END_LOCAL;\n  \n    IF (NOT EXISTS(ZAxis)) THEN\n      RETURN (?) ;\n    ELSE\n      Z := IfcNormalise(ZAxis);\n      IF NOT EXISTS(Arg) THEN\n        IF (Z.DirectionRatios <> [1.0,0.0,0.0]) THEN\n          V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0,0.0]);\n        ELSE\n          V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]);\n        END_IF;\n      ELSE\n        IF (Arg.Dim <> 3) THEN\n          RETURN (?) ;\n        END_IF;\n        IF ((IfcCrossProduct(Arg,Z).Magnitude) = 0.0) THEN\n          RETURN (?);\n        ELSE\n          V := IfcNormalise(Arg);\n        END_IF;\n      END_IF;\n      XVec  := IfcScalarTimesVector(IfcDotProduct(V, Z), Z);\n      XAxis := IfcVectorDifference(V, XVec).Orientation;\n      XAxis := IfcNormalise(XAxis);\n    END_IF;\n    RETURN(XAxis);\nEND_FUNCTION;\n\nFUNCTION IfcLeapYear\n\t(Year : IfcYearNumber)\n\t: BOOLEAN;\n  \n  IF ((((Year MOD 4) = 0) AND ((Year MOD 100) <> 0)) OR\n              ((Year MOD 400) = 0)) THEN\n    RETURN(TRUE);\n  ELSE\n    RETURN(FALSE);\n  END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcListToArray\n\t(Lis : LIST [0:?] OF GENERIC : T;\n         Low,U : INTEGER)\n\t: ARRAY OF GENERIC : T;\n     LOCAL\n       N   : INTEGER;\n       Res : ARRAY [Low:U] OF GENERIC : T;\n     END_LOCAL;\n        \n     N := SIZEOF(Lis);\n     IF (N <> (U-Low +1)) THEN\n       RETURN(?);\n     ELSE\n       Res := [Lis[1] : N];\n       REPEAT i := 2 TO N;\n         Res[Low+i-1] := Lis[i];\n       END_REPEAT;\n       RETURN(Res);\n     END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcLoopHeadToTail\n\t(ALoop : IfcEdgeLoop)\n\t: LOGICAL;\n     LOCAL\n       N : INTEGER;\n       P : LOGICAL := TRUE;\n     END_LOCAL;\n       \n       N := SIZEOF (ALoop.EdgeList);\n       REPEAT i := 2 TO N;\n         P := P AND (ALoop.EdgeList[i-1].EdgeEnd :=:\n                     ALoop.EdgeList[i].EdgeStart);\n       END_REPEAT;     \n       RETURN (P);\nEND_FUNCTION;\n\nFUNCTION IfcMlsTotalThickness\n\t(LayerSet : IfcMaterialLayerSet)\n\t: IfcLengthMeasure;\n    LOCAL\n      Max : IfcLengthMeasure := LayerSet.MaterialLayers[1].LayerThickness;    \n    END_LOCAL;\n  \n    IF SIZEOF(LayerSet.MaterialLayers) > 1 THEN\n      REPEAT i := 2 TO HIINDEX(LayerSet.MaterialLayers);\n         Max := Max + LayerSet.MaterialLayers[i].LayerThickness;\n      END_REPEAT;\n    END_IF;\n    RETURN (Max);\nEND_FUNCTION;\n\nFUNCTION IfcNormalise\n\t(Arg : IfcVectorOrDirection)\n\t: IfcVectorOrDirection;\n  LOCAL\n    Ndim : INTEGER;\n    V    : IfcDirection\n         := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]); \n    Vec  : IfcVector \n         := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (\n              IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]), 1.);\n    Mag  : REAL;\n    Result : IfcVectorOrDirection\n           := V;\n  END_LOCAL;\n  \n    IF NOT EXISTS (Arg) THEN\n      RETURN (?);\n    ELSE\n      Ndim := Arg.Dim;\n      IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg) THEN\n        BEGIN\n  \tV.DirectionRatios := Arg\\IfcVector.Orientation.DirectionRatios;\n          Vec.Magnitude := Arg\\IfcVector.Magnitude;\n  \tVec.Orientation := V;\n          IF Arg.Magnitude = 0.0 THEN\n            RETURN(?);\n          ELSE\n            Vec.Magnitude := 1.0;\n          END_IF;\n        END;\n      ELSE\n        V.DirectionRatios := Arg.DirectionRatios;\n      END_IF;\n      Mag := 0.0;\n        REPEAT i := 1 TO Ndim;\n          Mag := Mag + V.DirectionRatios[i]*V.DirectionRatios[i];\n        END_REPEAT;\n      IF Mag > 0.0 THEN\n        Mag := SQRT(Mag);\n        REPEAT i := 1 TO Ndim;\n          V.DirectionRatios[i] := V.DirectionRatios[i]/Mag;\n        END_REPEAT;\n        IF 'IFC2X3.IFCVECTOR' IN TYPEOF(arg) THEN\n          Vec.Orientation := V;\n          Result := Vec;\n        ELSE\n          Result := V;\n        END_IF;\n      ELSE\n        RETURN(?);\n      END_IF;\n    END_IF;\n    RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcOrthogonalComplement\n\t(Vec : IfcDirection)\n\t: IfcDirection;\n  LOCAL\n    Result : IfcDirection ;\n  END_LOCAL;\n    IF NOT EXISTS (Vec) OR (Vec.Dim <> 2) THEN\n      RETURN(?);\n    ELSE\n      Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([-Vec.DirectionRatios[2], Vec.DirectionRatios[1]]);\n      RETURN(Result);\n    END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcPathHeadToTail\n\t(APath : IfcPath)\n\t: LOGICAL;\n     LOCAL\n       N : INTEGER := 0;\n       P : LOGICAL := UNKNOWN;\n     END_LOCAL;\n       N := SIZEOF (APath.EdgeList);\n     REPEAT i := 2 TO N;\n        P := P AND (APath.EdgeList[i-1].EdgeEnd :=:\n                    APath.EdgeList[i].EdgeStart);\n     END_REPEAT;\n     RETURN (P);\nEND_FUNCTION;\n\nFUNCTION IfcSameAxis2Placement\n\t(ap1, ap2 : IfcAxis2Placement; Epsilon : REAL)\n\t: LOGICAL;\n  \n    RETURN (IfcSameDirection(ap1.P[1],ap2.P[1],Epsilon) AND\n            IfcSameDirection(ap1.P[2],ap2.P[2],Epsilon) AND\n            IfcSameCartesianPoint(ap1.Location,ap1.Location,Epsilon));\nEND_FUNCTION;\n\nFUNCTION IfcSameCartesianPoint\n\t(cp1, cp2 : IfcCartesianPoint; Epsilon : REAL)\n\t: LOGICAL;\n    \n    LOCAL\n      cp1x : REAL := cp1.Coordinates[1];\n      cp1y : REAL := cp1.Coordinates[2];\n      cp1z : REAL := 0;\n      cp2x : REAL := cp2.Coordinates[1];\n      cp2y : REAL := cp2.Coordinates[2];\n      cp2z : REAL := 0;\n    END_LOCAL;\n  \n    IF (SIZEOF(cp1.Coordinates) > 2) THEN\n      cp1z := cp1.Coordinates[3];\n    END_IF;\n  \n    IF (SIZEOF(cp2.Coordinates) > 2) THEN\n      cp2z := cp2.Coordinates[3];\n    END_IF;\n  \n    RETURN (IfcSameValue(cp1x,cp2x,Epsilon) AND\n            IfcSameValue(cp1y,cp2y,Epsilon) AND\n            IfcSameValue(cp1z,cp2z,Epsilon));\nEND_FUNCTION;\n\nFUNCTION IfcSameDirection\n\t(dir1, dir2 : IfcDirection; Epsilon : REAL)\n\t: LOGICAL;\n    LOCAL\n      dir1x : REAL := dir1.DirectionRatios[1];\n      dir1y : REAL := dir1.DirectionRatios[2];\n      dir1z : REAL := 0;\n      dir2x : REAL := dir2.DirectionRatios[1];\n      dir2y : REAL := dir2.DirectionRatios[2];\n      dir2z : REAL := 0;\n    END_LOCAL;\n  \n    IF (SIZEOF(dir1.DirectionRatios) > 2) THEN\n      dir1z := dir1.DirectionRatios[3];\n    END_IF;\n  \n    IF (SIZEOF(dir2.DirectionRatios) > 2) THEN\n      dir2z := dir2.DirectionRatios[3];\n    END_IF;\n    \n    RETURN (IfcSameValue(dir1x,dir2x,Epsilon) AND\n            IfcSameValue(dir1y,dir2y,Epsilon) AND\n            IfcSameValue(dir1z,dir2z,Epsilon));\nEND_FUNCTION;\n\nFUNCTION IfcSameValidPrecision\n\t(Epsilon1, Epsilon2 : REAL)\n\t: LOGICAL;\n    LOCAL\n      ValidEps1, ValidEps2 : REAL;\n      DefaultEps           : REAL := 0.000001;\n      DerivationOfEps      : REAL := 1.001;\n      UpperEps             : REAL := 1.0;\n    END_LOCAL;\n    \n      ValidEps1 := NVL(Epsilon1, DefaultEps);\n      ValidEps2 := NVL(Epsilon2, DefaultEps);\n      RETURN ((0.0 < ValidEps1) AND (ValidEps1 <= (DerivationOfEps * ValidEps2)) AND \n              (ValidEps2 <= (DerivationOfEps * ValidEps1)) AND (ValidEps2 < UpperEps));\nEND_FUNCTION;\n\nFUNCTION IfcSameValue\n\t(Value1, Value2 : REAL; Epsilon : REAL)\n\t: LOGICAL;\n    LOCAL\n      ValidEps    : REAL;\n      DefaultEps  : REAL := 0.000001;\n    END_LOCAL;\n    \n    ValidEps := NVL(Epsilon, DefaultEps);\n    RETURN ((Value1 + ValidEps > Value2) AND (Value1 < Value2 + ValidEps));\nEND_FUNCTION;\n\nFUNCTION IfcScalarTimesVector\n\t(Scalar : REAL; Vec : IfcVectorOrDirection)\n\t: IfcVector;\n  LOCAL\n    V : IfcDirection;\n    Mag : REAL;\n    Result : IfcVector;\n  END_LOCAL;\n  \n    IF NOT EXISTS (Scalar) OR NOT EXISTS (Vec) THEN\n      RETURN (?) ;\n    ELSE\n      IF 'IFC2X3.IFCVECTOR' IN TYPEOF (Vec) THEN\n        V := Vec\\IfcVector.Orientation;\n        Mag := Scalar * Vec\\IfcVector.Magnitude;\n      ELSE\n        V := Vec;\n        Mag := Scalar;\n      END_IF;\n      IF (Mag < 0.0 ) THEN\n        REPEAT i := 1 TO SIZEOF(V.DirectionRatios);\n          V.DirectionRatios[i] := -V.DirectionRatios[i];\n        END_REPEAT;\n        Mag := -Mag;\n      END_IF;\n      Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(IfcNormalise(V), Mag);\n    END_IF;\n    RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcSecondProjAxis\n\t(ZAxis, XAxis, Arg: IfcDirection)\n\t: IfcDirection;\n  LOCAL\n    YAxis : IfcVector;\n    V     : IfcDirection;\n    Temp  : IfcVector;\n  END_LOCAL;\n  \n    IF NOT EXISTS(Arg) THEN\n      V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]);\n    ELSE\n      V := Arg;\n    END_IF;\n    Temp  := IfcScalarTimesVector(IfcDotProduct(V, ZAxis), ZAxis);\n    YAxis := IfcVectorDifference(V, Temp);\n    Temp  := IfcScalarTimesVector(IfcDotProduct(V, XAxis), XAxis);\n    YAxis := IfcVectorDifference(YAxis, Temp);\n    YAxis := IfcNormalise(YAxis);\n    RETURN(YAxis.Orientation);\nEND_FUNCTION;\n\nFUNCTION IfcShapeRepresentationTypes\n\t(RepType : IfcLabel; Items : SET OF IfcRepresentationItem)\n\t: LOGICAL;\n      \n      LOCAL\n        Count : INTEGER := 0;\n      END_LOCAL;\n  \n      CASE RepType OF \n      'Curve2D' :\n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCCURVE' IN TYPEOF(temp)) \n                   AND (temp.Dim = 2)));\n        END;\n      'Annotation2D' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | (\n                    SIZEOF(TYPEOF(temp) * [\n                     'IFC2X3.IFCPOINT',\n                     'IFC2X3.IFCCURVE',\n                     'IFC2X3.IFCGEOMETRICCURVESET',\n                     'IFC2X3.IFCANNOTATIONFILLAREA',\n                     'IFC2X3.IFCDEFINEDSYMBOL',\n                     'IFC2X3.IFCTEXTLITERAL',\n                     'IFC2X3.IFCDRAUGHTINGCALLOUT']) = 1)\n                   ));\n        END;\n      'GeometricSet' : \n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCGEOMETRICSET' IN TYPEOF(temp))\n                   OR ('IFC2X3.IFCPOINT' IN TYPEOF(temp))\n                   OR ('IFC2X3.IFCCURVE' IN TYPEOF(temp))\n                   OR ('IFC2X3.IFCSURFACE' IN TYPEOF(temp))));\n        END;\n      'GeometricCurveSet' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCGEOMETRICCURVESET' IN TYPEOF(temp))\n                   OR ('IFC2X3.IFCGEOMETRICSET' IN TYPEOF(temp))\n                   OR ('IFC2X3.IFCPOINT' IN TYPEOF(temp))\n                   OR ('IFC2X3.IFCCURVE' IN TYPEOF(temp))));\n           REPEAT i:=1 TO HIINDEX(Items);  \n             IF ('IFC2X3.IFCGEOMETRICSET' IN TYPEOF(Items[i]))\n             THEN\n               IF (SIZEOF(QUERY(temp <* Items[i]\\IfcGeometricSet.Elements | 'IFC2X3.IFCSURFACE' IN TYPEOF(temp))) > 0)\n               THEN\n                 Count := Count - 1;\n               END_IF;\n             END_IF;\n           END_REPEAT;\n        END;\n      'SurfaceModel' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                     'IFC2X3.IFCSHELLBASEDSURFACEMODEL',\n                     'IFC2X3.IFCFACEBASEDSURFACEMODEL',\n                     'IFC2X3.IFCFACETEDBREP',\n                     'IFC2X3.IFCFACETEDBREPWITHVOIDS'] * TYPEOF(temp)) >= 1\n                   ));      \n        END;\n      'SolidModel' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCSOLIDMODEL' IN TYPEOF(temp))));            \n        END;\n      'SweptSolid' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCSWEPTAREASOLID' IN TYPEOF(temp))));            \n        END;\n      'CSG' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCBOOLEANRESULT' IN TYPEOF(temp))));            \n        END;\n      'Clipping' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(temp))));            \n        END;\n      'AdvancedSweptSolid' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCSURFACECURVESWEPTAREASOLID' IN TYPEOF(temp))\n                   OR ('IFC2X3.IFCSWEPTDISKSOLID' IN TYPEOF(temp))));      \n        END;\n      'Brep' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCFACETEDBREP' IN TYPEOF(temp))\n                   OR ('IFC2X3.IFCFACETEDBREPWITHVOIDS' IN TYPEOF(temp))));      \n        END;\n      'BoundingBox' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCBOUNDINGBOX' IN TYPEOF(temp))));\n          IF (SIZEOF(Items) > 1)\n          THEN\n            Count := 0;\n          END_IF;   \n        END;\n      'SectionedSpine' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCSECTIONEDSPINE' IN TYPEOF(temp))));      \n        END;\n      'MappedRepresentation' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCMAPPEDITEM' IN TYPEOF(temp))));  \n        END;\n       OTHERWISE : RETURN(?);\n      END_CASE;\n      RETURN (Count = SIZEOF(Items));\nEND_FUNCTION;\n\nFUNCTION IfcTopologyRepresentationTypes\n\t(RepType : IfcLabel; Items : SET OF IfcRepresentationItem)\n\t: LOGICAL;\n      \n      LOCAL\n        Count : INTEGER := 0;\n      END_LOCAL;\n  \n      CASE RepType OF \n      'Vertex' :\n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X3.IFCVERTEX' IN TYPEOF(temp))));\n        END;\n      'Edge' : \n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X3.IFCEDGE' IN TYPEOF(temp))));\n        END;\n      'Path' : \n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X3.IFCPATH' IN TYPEOF(temp))));\n        END;\n      'Face' : \n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X3.IFCFACE' IN TYPEOF(temp))));\n        END;\n      'Shell' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X3.IFCOPENSHELL' IN TYPEOF(temp))\n                      OR ('IFC2X3.IFCCLOSEDSHELL' IN TYPEOF(temp))));\n        END;\n      'Undefined': RETURN(TRUE);\n       OTHERWISE : RETURN(?);\n      END_CASE;\n      RETURN (Count = SIZEOF(Items));\nEND_FUNCTION;\n\nFUNCTION IfcUniquePropertyName\n\t(Properties : SET [1:?] OF IfcProperty)\n\t: LOGICAL;\n  \n  LOCAL\n    Names : SET OF IfcIdentifier := [];\n  END_LOCAL;\n  \n  REPEAT i:=1 TO HIINDEX(Properties);\n    Names := Names + Properties[i].Name;\n  END_REPEAT;\n  RETURN (SIZEOF(Names) = SIZEOF(Properties));\nEND_FUNCTION;\n\nFUNCTION IfcValidCalendarDate\n\t(Date : IfcCalendarDate)\n\t: LOGICAL;\n  IF NOT ({1 <= Date.DayComponent <= 31}) THEN    \n    RETURN(FALSE);  \n  END_IF;\n  CASE Date.MonthComponent OF\n    4         : RETURN({ 1<= Date.DayComponent <= 30});\n    6         : RETURN({ 1<= Date.DayComponent <= 30});\n    9         : RETURN({ 1<= Date.DayComponent <= 30});\n    11        : RETURN({ 1<= Date.DayComponent <= 30});    \n    2         :    \n    BEGIN\n      IF (IfcLeapYear(Date.YearComponent)) THEN\n        RETURN({ 1<= Date.DayComponent <= 29});      \n      ELSE\n        RETURN({ 1<= Date.DayComponent <= 28});      \n      END_IF;    \n    END;\n    OTHERWISE : RETURN(TRUE);  \n  END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcValidTime\n\t(Time: IfcLocalTime)\n\t: BOOLEAN;\n  IF EXISTS (Time.SecondComponent) THEN\n    RETURN (EXISTS (Time.MinuteComponent));  \n  ELSE    \n    RETURN (TRUE);  \n  END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcVectorDifference\n\t(Arg1, Arg2 : IfcVectorOrDirection)\n\t: IfcVector;\n  LOCAL\n    Result : IfcVector;\n    Res, Vec1, Vec2 : IfcDirection;\n    Mag, Mag1, Mag2 : REAL;\n    Ndim : INTEGER;\n  END_LOCAL;\n  \n    IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN\n      RETURN (?) ;\n    ELSE\n      BEGIN\n        IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg1) THEN\n          Mag1 := Arg1\\IfcVector.Magnitude;\n          Vec1 := Arg1\\IfcVector.Orientation;\n        ELSE\n          Mag1 := 1.0;\n          Vec1 := Arg1;\n        END_IF;\n        IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg2) THEN\n          Mag2 := Arg2\\IfcVector.Magnitude;\n          Vec2 := Arg2\\IfcVector.Orientation;\n        ELSE\n          Mag2 := 1.0;\n          Vec2 := Arg2;\n        END_IF;\n        Vec1 := IfcNormalise (Vec1);\n        Vec2 := IfcNormalise (Vec2);\n        Ndim := SIZEOF(Vec1.DirectionRatios);\n        Mag  := 0.0;\n        Res  := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0:Ndim]);\n  \n        REPEAT i := 1 TO Ndim;\n          Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] - Mag2*Vec2.DirectionRatios[i];\n          Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]);\n        END_REPEAT;\n  \n        IF (Mag > 0.0 ) THEN\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag));\n        ELSE\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0);\n        END_IF;\n      END;\n    END_IF;\n    RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcVectorSum\n\t(Arg1, Arg2 : IfcVectorOrDirection)\n\t: IfcVector;\n  LOCAL\n    Result : IfcVector;\n    Res, Vec1, Vec2 : IfcDirection;\n    Mag, Mag1, Mag2 : REAL;\n    Ndim : INTEGER;\n  END_LOCAL;\n  \n    IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN\n      RETURN (?) ;\n    ELSE\n      BEGIN\n        IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg1) THEN\n          Mag1 := Arg1\\IfcVector.Magnitude;\n          Vec1 := Arg1\\IfcVector.Orientation;\n        ELSE\n          Mag1 := 1.0;\n          Vec1 := Arg1;\n        END_IF;\n        IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg2) THEN\n          Mag2 := Arg2\\IfcVector.Magnitude;\n          Vec2 := Arg2\\IfcVector.Orientation;\n        ELSE\n          Mag2 := 1.0;\n          Vec2 := Arg2;\n        END_IF;\n        Vec1 := IfcNormalise (Vec1);\n        Vec2 := IfcNormalise (Vec2);\n        Ndim := SIZEOF(Vec1.DirectionRatios);\n        Mag  := 0.0;\n        Res  := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0:Ndim]);\n  \n        REPEAT i := 1 TO Ndim;\n          Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] + Mag2*Vec2.DirectionRatios[i];\n          Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]);\n        END_REPEAT;\n  \n        IF (Mag > 0.0 ) THEN\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag));\n        ELSE\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0);\n        END_IF;\n      END;\n    END_IF;\n    RETURN (Result);\nEND_FUNCTION;\n\nRULE IfcRepresentationContextSameWCS FOR \n\t(IfcGeometricRepresentationContext);\n    LOCAL\n      IsDifferent  : LOGICAL := FALSE;\n    END_LOCAL;\n      IF (SIZEOF(IfcGeometricRepresentationContext) > 1)\n      THEN\n        REPEAT i := 2 TO HIINDEX(IfcGeometricRepresentationContext);\n          IF (IfcGeometricRepresentationContext[1].WorldCoordinateSystem :<>: IfcGeometricRepresentationContext[i].WorldCoordinateSystem)\n          THEN\n            IsDifferent := (NOT(IfcSameValidPrecision(IfcGeometricRepresentationContext[1].Precision,\n                                                      IfcGeometricRepresentationContext[i].Precision)))\n                        OR (NOT(IfcSameAxis2Placement(IfcGeometricRepresentationContext[1].WorldCoordinateSystem,\n                                                      IfcGeometricRepresentationContext[i].WorldCoordinateSystem,\n                                                      IfcGeometricRepresentationContext[1].Precision)));\n            IF (IsDifferent = TRUE) THEN\n              ESCAPE;\n            END_IF;\n          END_IF;\n        END_REPEAT;\n      END_IF;\n    WHERE\n      WR1 : IsDifferent = FALSE;\nEND_RULE;\n\nRULE IfcSingleProjectInstance FOR \n\t(IfcProject);\n    WHERE\n      WR1 : SIZEOF(IfcProject) <= 1;\nEND_RULE;\n\nEND_SCHEMA;"
  },
  {
    "path": "Install/Program Files to Install/IFC2X3_TC1.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<!-- created with EXPTOOL V20070502 (perl 5 program) written by Thomas Liebich, AEC3, tl@aec3.de -->\r\n<!-- validated with XMLspy2007 sp2 (http://www.xmlspy.com) by Thomas Liebich, AEC3, tl@aec3.de -->\r\n<!-- configuration options used to create the following XML schema definitions following ISO 10303-28ed2 CD -->\r\n<!-- global options within the <option> scoping element -->\r\n<!-- + <inheritance> = \"true\" -->\r\n<!-- + <exp-type> = \"unspecified\" -->\r\n<!-- + <exp-attribute> = \"double-tag\" -->\r\n<!-- + <flatten> = \"false\" -->\r\n<!-- + <sparse> = \"true\" -->\r\n<!-- + <tagless> = \"false\" -->\r\n<!-- + <naming-convention> = \"preserve-case\" -->\r\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\" xmlns:ex=\"urn:iso.org:standard:10303:part(28):version(2):xmlschema:common\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:ifc=\"http://www.iai-tech.org/ifcXML/IFC2x3/FINAL\" attributeFormDefault=\"unqualified\" targetNamespace=\"http://www.iai-tech.org/ifcXML/IFC2x3/FINAL\">\r\n\r\n\r\n<!-- root element declaration (for SCHEMA definitions) -->\r\n\r\n\t<xs:import namespace=\"urn:iso.org:standard:10303:part(28):version(2):xmlschema:common\" schemaLocation=\"http://www.iai-tech.org/ifcXML/IFC2x3/FINAL/ex.xsd\">\r\n\t</xs:import>\r\n\t<xs:element substitutionGroup=\"ex:uos\" name=\"uos\" type=\"ifc:uos\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"uos\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:uos\">\r\n\t\t\t\t<xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t<xs:element ref=\"ex:Entity\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:choice>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\r\n\r\n<!-- element and complex type declarations (for ENTITY definitions) -->\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCompositeCurve\" name=\"Ifc2DCompositeCurve\" nillable=\"true\" type=\"ifc:Ifc2DCompositeCurve\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"Ifc2DCompositeCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurve\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcActionRequest\" nillable=\"true\" type=\"ifc:IfcActionRequest\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcActionRequest\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RequestID\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcActor\" nillable=\"true\" type=\"ifc:IfcActor\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcActor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TheActor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcActorRole\" nillable=\"true\" type=\"ifc:IfcActorRole\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcActorRole\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Role\" type=\"ifc:IfcRoleEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedRole\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionControlElementType\" name=\"IfcActuatorType\" nillable=\"true\" type=\"ifc:IfcActuatorType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcActuatorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcAddress\" nillable=\"true\" type=\"ifc:IfcAddress\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAddress\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Purpose\" minOccurs=\"0\" type=\"ifc:IfcAddressTypeEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedPurpose\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcAirTerminalBoxType\" nillable=\"true\" type=\"ifc:IfcAirTerminalBoxType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAirTerminalBoxType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcAirTerminalType\" nillable=\"true\" type=\"ifc:IfcAirTerminalType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAirTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcAirToAirHeatRecoveryType\" nillable=\"true\" type=\"ifc:IfcAirToAirHeatRecoveryType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAirToAirHeatRecoveryType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionControlElementType\" name=\"IfcAlarmType\" nillable=\"true\" type=\"ifc:IfcAlarmType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAlarmType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" name=\"IfcAngularDimension\" nillable=\"true\" type=\"ifc:IfcAngularDimension\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAngularDimension\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcAnnotation\" nillable=\"true\" type=\"ifc:IfcAnnotation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAnnotation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationOccurrence\" name=\"IfcAnnotationCurveOccurrence\" nillable=\"true\" type=\"ifc:IfcAnnotationCurveOccurrence\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAnnotationCurveOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcAnnotationFillArea\" nillable=\"true\" type=\"ifc:IfcAnnotationFillArea\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAnnotationFillArea\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OuterBoundary\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationOccurrence\" name=\"IfcAnnotationFillAreaOccurrence\" nillable=\"true\" type=\"ifc:IfcAnnotationFillAreaOccurrence\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAnnotationFillAreaOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"FillStyleTarget\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPoint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"GlobalOrLocal\" minOccurs=\"0\" type=\"ifc:IfcGlobalOrLocalEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStyledItem\" name=\"IfcAnnotationOccurrence\" nillable=\"true\" type=\"ifc:IfcAnnotationOccurrence\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAnnotationOccurrence\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStyledItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcAnnotationSurface\" nillable=\"true\" type=\"ifc:IfcAnnotationSurface\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAnnotationSurface\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Item\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TextureCoordinates\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextureCoordinate\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationOccurrence\" name=\"IfcAnnotationSurfaceOccurrence\" nillable=\"true\" type=\"ifc:IfcAnnotationSurfaceOccurrence\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAnnotationSurfaceOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationOccurrence\" name=\"IfcAnnotationSymbolOccurrence\" nillable=\"true\" type=\"ifc:IfcAnnotationSymbolOccurrence\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAnnotationSymbolOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationOccurrence\" name=\"IfcAnnotationTextOccurrence\" nillable=\"true\" type=\"ifc:IfcAnnotationTextOccurrence\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAnnotationTextOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcApplication\" nillable=\"true\" type=\"ifc:IfcApplication\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcApplication\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApplicationDeveloper\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Version\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ApplicationFullName\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ApplicationIdentifier\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcAppliedValue\" nillable=\"true\" type=\"ifc:IfcAppliedValue\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAppliedValue\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"AppliedValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"UnitBasis\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ApplicableDate\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"FixedUntilDate\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcAppliedValueRelationship\" nillable=\"true\" type=\"ifc:IfcAppliedValueRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAppliedValueRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ComponentOfTotal\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Components\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAppliedValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ArithmeticOperator\" type=\"ifc:IfcArithmeticOperatorEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcApproval\" nillable=\"true\" type=\"ifc:IfcApproval\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcApproval\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ApprovalDateTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ApprovalStatus\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ApprovalLevel\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ApprovalQualifier\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Identifier\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcApprovalActorRelationship\" nillable=\"true\" type=\"ifc:IfcApprovalActorRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcApprovalActorRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Actor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Approval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Role\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcApprovalPropertyRelationship\" nillable=\"true\" type=\"ifc:IfcApprovalPropertyRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcApprovalPropertyRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApprovedProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Approval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcApprovalRelationship\" nillable=\"true\" type=\"ifc:IfcApprovalRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcApprovalRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedApproval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingApproval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProfileDef\" name=\"IfcArbitraryClosedProfileDef\" nillable=\"true\" type=\"ifc:IfcArbitraryClosedProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcArbitraryClosedProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OuterCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProfileDef\" name=\"IfcArbitraryOpenProfileDef\" nillable=\"true\" type=\"ifc:IfcArbitraryOpenProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcArbitraryOpenProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Curve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcArbitraryClosedProfileDef\" name=\"IfcArbitraryProfileDefWithVoids\" nillable=\"true\" type=\"ifc:IfcArbitraryProfileDefWithVoids\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcArbitraryProfileDefWithVoids\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryClosedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"InnerCurves\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcAsset\" nillable=\"true\" type=\"ifc:IfcAsset\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAsset\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AssetID\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OriginalValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurrentValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TotalReplacementCost\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Owner\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"User\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ResponsiblePerson\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IncorporationDate\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DepreciatedValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcIShapeProfileDef\" name=\"IfcAsymmetricIShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcAsymmetricIShapeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAsymmetricIShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcIShapeProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TopFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TopFlangeThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TopFlangeFilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPlacement\" name=\"IfcAxis1Placement\" nillable=\"true\" type=\"ifc:IfcAxis1Placement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAxis1Placement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Axis\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPlacement\" name=\"IfcAxis2Placement2D\" nillable=\"true\" type=\"ifc:IfcAxis2Placement2D\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAxis2Placement2D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"RefDirection\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPlacement\" name=\"IfcAxis2Placement3D\" nillable=\"true\" type=\"ifc:IfcAxis2Placement3D\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAxis2Placement3D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Axis\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"RefDirection\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundedCurve\" name=\"IfcBSplineCurve\" nillable=\"true\" type=\"ifc:IfcBSplineCurve\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBSplineCurve\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Degree\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" maxOccurs=\"unbounded\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurveForm\" type=\"ifc:IfcBSplineCurveForm\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ClosedCurve\" type=\"ex:logical\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcBeam\" nillable=\"true\" type=\"ifc:IfcBeam\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBeam\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcBeamType\" nillable=\"true\" type=\"ifc:IfcBeamType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBeamType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBSplineCurve\" name=\"IfcBezierCurve\" nillable=\"true\" type=\"ifc:IfcBezierCurve\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBezierCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurve\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSurfaceTexture\" name=\"IfcBlobTexture\" nillable=\"true\" type=\"ifc:IfcBlobTexture\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBlobTexture\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RasterFormat\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RasterCode\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCsgPrimitive3D\" name=\"IfcBlock\" nillable=\"true\" type=\"ifc:IfcBlock\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBlock\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ZLength\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcBoilerType\" nillable=\"true\" type=\"ifc:IfcBoilerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoilerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBooleanResult\" name=\"IfcBooleanClippingResult\" nillable=\"true\" type=\"ifc:IfcBooleanClippingResult\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBooleanClippingResult\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBooleanResult\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcBooleanResult\" nillable=\"true\" type=\"ifc:IfcBooleanResult\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBooleanResult\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Operator\" type=\"ifc:IfcBooleanOperator\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FirstOperand\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SecondOperand\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcBoundaryCondition\" nillable=\"true\" type=\"ifc:IfcBoundaryCondition\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoundaryCondition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundaryCondition\" name=\"IfcBoundaryEdgeCondition\" nillable=\"true\" type=\"ifc:IfcBoundaryEdgeCondition\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoundaryEdgeCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByLengthX\" minOccurs=\"0\" type=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByLengthY\" minOccurs=\"0\" type=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByLengthZ\" minOccurs=\"0\" type=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthX\" minOccurs=\"0\" type=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthY\" minOccurs=\"0\" type=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthZ\" minOccurs=\"0\" type=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundaryCondition\" name=\"IfcBoundaryFaceCondition\" nillable=\"true\" type=\"ifc:IfcBoundaryFaceCondition\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoundaryFaceCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByAreaX\" minOccurs=\"0\" type=\"ifc:IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByAreaY\" minOccurs=\"0\" type=\"ifc:IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByAreaZ\" minOccurs=\"0\" type=\"ifc:IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundaryCondition\" name=\"IfcBoundaryNodeCondition\" nillable=\"true\" type=\"ifc:IfcBoundaryNodeCondition\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoundaryNodeCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessX\" minOccurs=\"0\" type=\"ifc:IfcLinearStiffnessMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessY\" minOccurs=\"0\" type=\"ifc:IfcLinearStiffnessMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessZ\" minOccurs=\"0\" type=\"ifc:IfcLinearStiffnessMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessX\" minOccurs=\"0\" type=\"ifc:IfcRotationalStiffnessMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessY\" minOccurs=\"0\" type=\"ifc:IfcRotationalStiffnessMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessZ\" minOccurs=\"0\" type=\"ifc:IfcRotationalStiffnessMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundaryNodeCondition\" name=\"IfcBoundaryNodeConditionWarping\" nillable=\"true\" type=\"ifc:IfcBoundaryNodeConditionWarping\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoundaryNodeConditionWarping\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryNodeCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WarpingStiffness\" minOccurs=\"0\" type=\"ifc:IfcWarpingMomentMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCurve\" name=\"IfcBoundedCurve\" nillable=\"true\" type=\"ifc:IfcBoundedCurve\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoundedCurve\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSurface\" name=\"IfcBoundedSurface\" nillable=\"true\" type=\"ifc:IfcBoundedSurface\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoundedSurface\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcBoundingBox\" nillable=\"true\" type=\"ifc:IfcBoundingBox\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoundingBox\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Corner\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ZDim\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcHalfSpaceSolid\" name=\"IfcBoxedHalfSpace\" nillable=\"true\" type=\"ifc:IfcBoxedHalfSpace\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoxedHalfSpace\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Enclosure\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundingBox\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSpatialStructureElement\" name=\"IfcBuilding\" nillable=\"true\" type=\"ifc:IfcBuilding\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBuilding\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ElevationOfRefHeight\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ElevationOfTerrain\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"BuildingAddress\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPostalAddress\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcBuildingElement\" nillable=\"true\" type=\"ifc:IfcBuildingElement\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBuildingElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcBuildingElementComponent\" nillable=\"true\" type=\"ifc:IfcBuildingElementComponent\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBuildingElementComponent\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementComponent\" name=\"IfcBuildingElementPart\" nillable=\"true\" type=\"ifc:IfcBuildingElementPart\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBuildingElementPart\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementComponent\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcBuildingElementProxy\" nillable=\"true\" type=\"ifc:IfcBuildingElementProxy\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBuildingElementProxy\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CompositionType\" minOccurs=\"0\" type=\"ifc:IfcElementCompositionEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcBuildingElementProxyType\" nillable=\"true\" type=\"ifc:IfcBuildingElementProxyType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBuildingElementProxyType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcBuildingElementProxyTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementType\" name=\"IfcBuildingElementType\" nillable=\"true\" type=\"ifc:IfcBuildingElementType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBuildingElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSpatialStructureElement\" name=\"IfcBuildingStorey\" nillable=\"true\" type=\"ifc:IfcBuildingStorey\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBuildingStorey\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Elevation\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcCShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcCShapeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Girth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InternalFilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowFittingType\" name=\"IfcCableCarrierFittingType\" nillable=\"true\" type=\"ifc:IfcCableCarrierFittingType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCableCarrierFittingType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowSegmentType\" name=\"IfcCableCarrierSegmentType\" nillable=\"true\" type=\"ifc:IfcCableCarrierSegmentType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCableCarrierSegmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowSegmentType\" name=\"IfcCableSegmentType\" nillable=\"true\" type=\"ifc:IfcCableSegmentType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCableSegmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcCalendarDate\" nillable=\"true\" type=\"ifc:IfcCalendarDate\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCalendarDate\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DayComponent\" type=\"ifc:IfcDayInMonthNumber\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MonthComponent\" type=\"ifc:IfcMonthInYearNumber\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"YearComponent\" type=\"ifc:IfcYearNumber\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPoint\" name=\"IfcCartesianPoint\" nillable=\"true\" type=\"ifc:IfcCartesianPoint\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCartesianPoint\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Coordinates\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\" maxOccurs=\"3\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcCartesianTransformationOperator\" nillable=\"true\" type=\"ifc:IfcCartesianTransformationOperator\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Axis1\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Axis2\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LocalOrigin\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Scale\" minOccurs=\"0\" type=\"xs:double\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" name=\"IfcCartesianTransformationOperator2D\" nillable=\"true\" type=\"ifc:IfcCartesianTransformationOperator2D\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCartesianTransformationOperator2D\" name=\"IfcCartesianTransformationOperator2DnonUniform\" nillable=\"true\" type=\"ifc:IfcCartesianTransformationOperator2DnonUniform\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2DnonUniform\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator2D\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Scale2\" minOccurs=\"0\" type=\"xs:double\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" name=\"IfcCartesianTransformationOperator3D\" nillable=\"true\" type=\"ifc:IfcCartesianTransformationOperator3D\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Axis3\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCartesianTransformationOperator3D\" name=\"IfcCartesianTransformationOperator3DnonUniform\" nillable=\"true\" type=\"ifc:IfcCartesianTransformationOperator3DnonUniform\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3DnonUniform\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator3D\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Scale2\" minOccurs=\"0\" type=\"xs:double\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Scale3\" minOccurs=\"0\" type=\"xs:double\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcArbitraryOpenProfileDef\" name=\"IfcCenterLineProfileDef\" nillable=\"true\" type=\"ifc:IfcCenterLineProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCenterLineProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryOpenProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEdgeFeature\" name=\"IfcChamferEdgeFeature\" nillable=\"true\" type=\"ifc:IfcChamferEdgeFeature\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcChamferEdgeFeature\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEdgeFeature\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Width\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Height\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcChillerType\" nillable=\"true\" type=\"ifc:IfcChillerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcChillerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConic\" name=\"IfcCircle\" nillable=\"true\" type=\"ifc:IfcCircle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCircle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCircleProfileDef\" name=\"IfcCircleHollowProfileDef\" nillable=\"true\" type=\"ifc:IfcCircleHollowProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCircleHollowProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCircleProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcCircleProfileDef\" nillable=\"true\" type=\"ifc:IfcCircleProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCircleProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcClassification\" nillable=\"true\" type=\"ifc:IfcClassification\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcClassification\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Source\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Edition\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EditionDate\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcClassificationItem\" nillable=\"true\" type=\"ifc:IfcClassificationItem\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcClassificationItem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Notation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationNotationFacet\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ItemOf\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassification\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Title\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcClassificationItemRelationship\" nillable=\"true\" type=\"ifc:IfcClassificationItemRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcClassificationItemRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingItem\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationItem\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedItems\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationItem\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationItem\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcClassificationNotation\" nillable=\"true\" type=\"ifc:IfcClassificationNotation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcClassificationNotation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NotationFacets\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationNotationFacet\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationNotationFacet\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcClassificationNotationFacet\" nillable=\"true\" type=\"ifc:IfcClassificationNotationFacet\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcClassificationNotationFacet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NotationValue\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcClassificationReference\" nillable=\"true\" type=\"ifc:IfcClassificationReference\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcClassificationReference\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ReferencedSource\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassification\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConnectedFaceSet\" name=\"IfcClosedShell\" nillable=\"true\" type=\"ifc:IfcClosedShell\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcClosedShell\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcCoilType\" nillable=\"true\" type=\"ifc:IfcCoilType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCoilType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcColourSpecification\" name=\"IfcColourRgb\" nillable=\"true\" type=\"ifc:IfcColourRgb\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcColourRgb\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcColourSpecification\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Red\" type=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Green\" type=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Blue\" type=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcColourSpecification\" nillable=\"true\" type=\"ifc:IfcColourSpecification\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcColourSpecification\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcColumn\" nillable=\"true\" type=\"ifc:IfcColumn\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcColumn\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcColumnType\" nillable=\"true\" type=\"ifc:IfcColumnType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcColumnType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProperty\" name=\"IfcComplexProperty\" nillable=\"true\" type=\"ifc:IfcComplexProperty\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcComplexProperty\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UsageName\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HasProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundedCurve\" name=\"IfcCompositeCurve\" nillable=\"true\" type=\"ifc:IfcCompositeCurve\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCompositeCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Segments\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCompositeCurveSegment\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCompositeCurveSegment\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcCompositeCurveSegment\" nillable=\"true\" type=\"ifc:IfcCompositeCurveSegment\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCompositeCurveSegment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Transition\" type=\"ifc:IfcTransitionCode\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ParentCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProfileDef\" name=\"IfcCompositeProfileDef\" nillable=\"true\" type=\"ifc:IfcCompositeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCompositeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Profiles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" maxOccurs=\"unbounded\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProfileDef\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Label\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" name=\"IfcCompressorType\" nillable=\"true\" type=\"ifc:IfcCompressorType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCompressorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcCondenserType\" nillable=\"true\" type=\"ifc:IfcCondenserType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCondenserType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcCondition\" nillable=\"true\" type=\"ifc:IfcCondition\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcConditionCriterion\" nillable=\"true\" type=\"ifc:IfcConditionCriterion\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConditionCriterion\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Criterion\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcConditionCriterionSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CriterionDateTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCurve\" name=\"IfcConic\" nillable=\"true\" type=\"ifc:IfcConic\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConic\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcConnectedFaceSet\" nillable=\"true\" type=\"ifc:IfcConnectedFaceSet\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConnectedFaceSet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CfsFaces\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFace\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFace\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConnectionGeometry\" name=\"IfcConnectionCurveGeometry\" nillable=\"true\" type=\"ifc:IfcConnectionCurveGeometry\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConnectionCurveGeometry\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CurveOnRelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CurveOnRelatedElement\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcConnectionGeometry\" nillable=\"true\" type=\"ifc:IfcConnectionGeometry\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConnectionGeometry\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConnectionPointGeometry\" name=\"IfcConnectionPointEccentricity\" nillable=\"true\" type=\"ifc:IfcConnectionPointEccentricity\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConnectionPointEccentricity\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectionPointGeometry\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EccentricityInX\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EccentricityInY\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EccentricityInZ\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConnectionGeometry\" name=\"IfcConnectionPointGeometry\" nillable=\"true\" type=\"ifc:IfcConnectionPointGeometry\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConnectionPointGeometry\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PointOnRelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PointOnRelatedElement\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConnectionGeometry\" name=\"IfcConnectionPortGeometry\" nillable=\"true\" type=\"ifc:IfcConnectionPortGeometry\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConnectionPortGeometry\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LocationAtRelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LocationAtRelatedElement\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ProfileOfPort\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConnectionGeometry\" name=\"IfcConnectionSurfaceGeometry\" nillable=\"true\" type=\"ifc:IfcConnectionSurfaceGeometry\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConnectionSurfaceGeometry\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SurfaceOnRelatedElement\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcConstraint\" nillable=\"true\" type=\"ifc:IfcConstraint\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConstraint\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConstraintGrade\" type=\"ifc:IfcConstraintEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConstraintSource\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CreatingActor\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CreationTime\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedGrade\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcConstraintAggregationRelationship\" nillable=\"true\" type=\"ifc:IfcConstraintAggregationRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConstraintAggregationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedConstraints\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcConstraint\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LogicalAggregator\" type=\"ifc:IfcLogicalOperatorEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcConstraintClassificationRelationship\" nillable=\"true\" type=\"ifc:IfcConstraintClassificationRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConstraintClassificationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ClassifiedConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedClassifications\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationNotationSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcConstraintRelationship\" nillable=\"true\" type=\"ifc:IfcConstraintRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConstraintRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedConstraints\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcConstraint\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConstructionResource\" name=\"IfcConstructionEquipmentResource\" nillable=\"true\" type=\"ifc:IfcConstructionEquipmentResource\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConstructionEquipmentResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConstructionResource\" name=\"IfcConstructionMaterialResource\" nillable=\"true\" type=\"ifc:IfcConstructionMaterialResource\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConstructionMaterialResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Suppliers\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UsageRatio\" minOccurs=\"0\" type=\"ifc:IfcRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConstructionResource\" name=\"IfcConstructionProductResource\" nillable=\"true\" type=\"ifc:IfcConstructionProductResource\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConstructionProductResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcResource\" name=\"IfcConstructionResource\" nillable=\"true\" type=\"ifc:IfcConstructionResource\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConstructionResource\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcResource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ResourceIdentifier\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ResourceGroup\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ResourceConsumption\" minOccurs=\"0\" type=\"ifc:IfcResourceConsumptionEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"BaseQuantity\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcNamedUnit\" name=\"IfcContextDependentUnit\" nillable=\"true\" type=\"ifc:IfcContextDependentUnit\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcContextDependentUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcControl\" nillable=\"true\" type=\"ifc:IfcControl\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcControl\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionControlElementType\" name=\"IfcControllerType\" nillable=\"true\" type=\"ifc:IfcControllerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcControllerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcNamedUnit\" name=\"IfcConversionBasedUnit\" nillable=\"true\" type=\"ifc:IfcConversionBasedUnit\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConversionBasedUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConversionFactor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcCooledBeamType\" nillable=\"true\" type=\"ifc:IfcCooledBeamType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCooledBeamType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcCoolingTowerType\" nillable=\"true\" type=\"ifc:IfcCoolingTowerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCoolingTowerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcCoordinatedUniversalTimeOffset\" nillable=\"true\" type=\"ifc:IfcCoordinatedUniversalTimeOffset\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCoordinatedUniversalTimeOffset\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HourOffset\" type=\"ifc:IfcHourInDay\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MinuteOffset\" minOccurs=\"0\" type=\"ifc:IfcMinuteInHour\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Sense\" type=\"ifc:IfcAheadOrBehind\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcCostItem\" nillable=\"true\" type=\"ifc:IfcCostItem\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCostItem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcCostSchedule\" nillable=\"true\" type=\"ifc:IfcCostSchedule\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCostSchedule\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SubmittedBy\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PreparedBy\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SubmittedOn\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Status\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TargetUsers\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"UpdateDate\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ID\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCostScheduleTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAppliedValue\" name=\"IfcCostValue\" nillable=\"true\" type=\"ifc:IfcCostValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCostValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CostType\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Condition\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcCovering\" nillable=\"true\" type=\"ifc:IfcCovering\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCovering\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" minOccurs=\"0\" type=\"ifc:IfcCoveringTypeEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcCoveringType\" nillable=\"true\" type=\"ifc:IfcCoveringType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCoveringType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcCraneRailAShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcCraneRailAShapeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCraneRailAShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BaseWidth2\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Radius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HeadWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HeadDepth2\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HeadDepth3\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BaseWidth4\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth1\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth2\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth3\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcCraneRailFShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcCraneRailFShapeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCraneRailFShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HeadWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Radius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HeadDepth2\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HeadDepth3\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth1\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth2\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConstructionResource\" name=\"IfcCrewResource\" nillable=\"true\" type=\"ifc:IfcCrewResource\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCrewResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcCsgPrimitive3D\" nillable=\"true\" type=\"ifc:IfcCsgPrimitive3D\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCsgPrimitive3D\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSolidModel\" name=\"IfcCsgSolid\" nillable=\"true\" type=\"ifc:IfcCsgSolid\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCsgSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TreeRootExpression\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCsgSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcCurrencyRelationship\" nillable=\"true\" type=\"ifc:IfcCurrencyRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCurrencyRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingMonetaryUnit\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedMonetaryUnit\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ExchangeRate\" type=\"ifc:IfcPositiveRatioMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RateDateTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"RateSource\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcCurtainWall\" nillable=\"true\" type=\"ifc:IfcCurtainWall\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCurtainWall\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcCurtainWallType\" nillable=\"true\" type=\"ifc:IfcCurtainWallType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCurtainWallType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCurtainWallTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcCurve\" nillable=\"true\" type=\"ifc:IfcCurve\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCurve\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundedSurface\" name=\"IfcCurveBoundedPlane\" nillable=\"true\" type=\"ifc:IfcCurveBoundedPlane\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCurveBoundedPlane\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPlane\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OuterBoundary\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\" minOccurs=\"0\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPresentationStyle\" name=\"IfcCurveStyle\" nillable=\"true\" type=\"ifc:IfcCurveStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCurveStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CurveFont\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CurveWidth\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CurveColour\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcCurveStyleFont\" nillable=\"true\" type=\"ifc:IfcCurveStyleFont\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCurveStyleFont\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PatternList\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontPattern\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurveStyleFontPattern\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcCurveStyleFontAndScaling\" nillable=\"true\" type=\"ifc:IfcCurveStyleFontAndScaling\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCurveStyleFontAndScaling\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurveFont\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurveFontScaling\" type=\"ifc:IfcPositiveRatioMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcCurveStyleFontPattern\" nillable=\"true\" type=\"ifc:IfcCurveStyleFontPattern\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCurveStyleFontPattern\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VisibleSegmentLength\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InvisibleSegmentLength\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcDamperType\" nillable=\"true\" type=\"ifc:IfcDamperType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDamperType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDateAndTime\" nillable=\"true\" type=\"ifc:IfcDateAndTime\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDateAndTime\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DateComponent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeComponent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLocalTime\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcDefinedSymbol\" nillable=\"true\" type=\"ifc:IfcDefinedSymbol\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDefinedSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Definition\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinedSymbolSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Target\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator2D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProfileDef\" name=\"IfcDerivedProfileDef\" nillable=\"true\" type=\"ifc:IfcDerivedProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDerivedProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ParentProfile\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Operator\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator2D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Label\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDerivedUnit\" nillable=\"true\" type=\"ifc:IfcDerivedUnit\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDerivedUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Elements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDerivedUnitElement\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDerivedUnitElement\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UnitType\" type=\"ifc:IfcDerivedUnitEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDerivedUnitElement\" nillable=\"true\" type=\"ifc:IfcDerivedUnitElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDerivedUnitElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Unit\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Exponent\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" name=\"IfcDiameterDimension\" nillable=\"true\" type=\"ifc:IfcDiameterDimension\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDiameterDimension\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDraughtingCalloutRelationship\" name=\"IfcDimensionCalloutRelationship\" nillable=\"true\" type=\"ifc:IfcDimensionCalloutRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDimensionCalloutRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCalloutRelationship\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationCurveOccurrence\" name=\"IfcDimensionCurve\" nillable=\"true\" type=\"ifc:IfcDimensionCurve\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDimensionCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationCurveOccurrence\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDraughtingCallout\" name=\"IfcDimensionCurveDirectedCallout\" nillable=\"true\" type=\"ifc:IfcDimensionCurveDirectedCallout\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDimensionCurveDirectedCallout\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCallout\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTerminatorSymbol\" name=\"IfcDimensionCurveTerminator\" nillable=\"true\" type=\"ifc:IfcDimensionCurveTerminator\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDimensionCurveTerminator\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTerminatorSymbol\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Role\" type=\"ifc:IfcDimensionExtentUsage\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDraughtingCalloutRelationship\" name=\"IfcDimensionPair\" nillable=\"true\" type=\"ifc:IfcDimensionPair\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDimensionPair\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCalloutRelationship\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDimensionalExponents\" nillable=\"true\" type=\"ifc:IfcDimensionalExponents\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDimensionalExponents\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LengthExponent\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MassExponent\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeExponent\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ElectricCurrentExponent\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThermodynamicTemperatureExponent\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AmountOfSubstanceExponent\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LuminousIntensityExponent\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcDirection\" nillable=\"true\" type=\"ifc:IfcDirection\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDirection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DirectionRatios\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:double-wrapper\" maxOccurs=\"3\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:double-wrapper\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementComponent\" name=\"IfcDiscreteAccessory\" nillable=\"true\" type=\"ifc:IfcDiscreteAccessory\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDiscreteAccessory\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementComponentType\" name=\"IfcDiscreteAccessoryType\" nillable=\"true\" type=\"ifc:IfcDiscreteAccessoryType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDiscreteAccessoryType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcDistributionChamberElement\" nillable=\"true\" type=\"ifc:IfcDistributionChamberElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDistributionChamberElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcDistributionChamberElementType\" nillable=\"true\" type=\"ifc:IfcDistributionChamberElementType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDistributionChamberElementType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionElement\" name=\"IfcDistributionControlElement\" nillable=\"true\" type=\"ifc:IfcDistributionControlElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDistributionControlElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ControlElementId\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionElementType\" name=\"IfcDistributionControlElementType\" nillable=\"true\" type=\"ifc:IfcDistributionControlElementType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDistributionControlElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcDistributionElement\" nillable=\"true\" type=\"ifc:IfcDistributionElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDistributionElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementType\" name=\"IfcDistributionElementType\" nillable=\"true\" type=\"ifc:IfcDistributionElementType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDistributionElementType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionElement\" name=\"IfcDistributionFlowElement\" nillable=\"true\" type=\"ifc:IfcDistributionFlowElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDistributionFlowElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionElementType\" name=\"IfcDistributionFlowElementType\" nillable=\"true\" type=\"ifc:IfcDistributionFlowElementType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDistributionFlowElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPort\" name=\"IfcDistributionPort\" nillable=\"true\" type=\"ifc:IfcDistributionPort\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDistributionPort\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPort\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FlowDirection\" minOccurs=\"0\" type=\"ifc:IfcFlowDirectionEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDocumentElectronicFormat\" nillable=\"true\" type=\"ifc:IfcDocumentElectronicFormat\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDocumentElectronicFormat\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FileExtension\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MimeContentType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MimeSubtype\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDocumentInformation\" nillable=\"true\" type=\"ifc:IfcDocumentInformation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDocumentInformation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DocumentId\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DocumentReferences\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDocumentReference\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Purpose\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IntendedUse\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Scope\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Revision\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"DocumentOwner\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Editors\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CreationTime\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LastRevisionTime\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ElectronicFormat\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentElectronicFormat\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ValidFrom\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ValidUntil\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Confidentiality\" minOccurs=\"0\" type=\"ifc:IfcDocumentConfidentialityEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Status\" minOccurs=\"0\" type=\"ifc:IfcDocumentStatusEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDocumentInformationRelationship\" nillable=\"true\" type=\"ifc:IfcDocumentInformationRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDocumentInformationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedDocuments\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDocumentInformation\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelationshipType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcDocumentReference\" nillable=\"true\" type=\"ifc:IfcDocumentReference\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDocumentReference\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcDoor\" nillable=\"true\" type=\"ifc:IfcDoor\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDoor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallHeight\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OverallWidth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcDoorLiningProperties\" nillable=\"true\" type=\"ifc:IfcDoorLiningProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDoorLiningProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LiningDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LiningThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThresholdDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThresholdThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransomThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransomOffset\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LiningOffset\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThresholdOffset\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CasingThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CasingDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ShapeAspectStyle\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcDoorPanelProperties\" nillable=\"true\" type=\"ifc:IfcDoorPanelProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDoorPanelProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PanelDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PanelOperation\" type=\"ifc:IfcDoorPanelOperationEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PanelWidth\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PanelPosition\" type=\"ifc:IfcDoorPanelPositionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ShapeAspectStyle\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTypeProduct\" name=\"IfcDoorStyle\" nillable=\"true\" type=\"ifc:IfcDoorStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDoorStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcDoorStyleOperationEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConstructionType\" type=\"ifc:IfcDoorStyleConstructionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ParameterTakesPrecedence\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Sizeable\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcDraughtingCallout\" nillable=\"true\" type=\"ifc:IfcDraughtingCallout\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDraughtingCallout\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Contents\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDraughtingCalloutElement\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDraughtingCalloutElement\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDraughtingCalloutRelationship\" nillable=\"true\" type=\"ifc:IfcDraughtingCalloutRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDraughtingCalloutRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingDraughtingCallout\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDraughtingCallout\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedDraughtingCallout\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDraughtingCallout\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedColour\" name=\"IfcDraughtingPreDefinedColour\" nillable=\"true\" type=\"ifc:IfcDraughtingPreDefinedColour\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDraughtingPreDefinedColour\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedColour\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedCurveFont\" name=\"IfcDraughtingPreDefinedCurveFont\" nillable=\"true\" type=\"ifc:IfcDraughtingPreDefinedCurveFont\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDraughtingPreDefinedCurveFont\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedCurveFont\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedTextFont\" name=\"IfcDraughtingPreDefinedTextFont\" nillable=\"true\" type=\"ifc:IfcDraughtingPreDefinedTextFont\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDraughtingPreDefinedTextFont\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedTextFont\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowFittingType\" name=\"IfcDuctFittingType\" nillable=\"true\" type=\"ifc:IfcDuctFittingType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDuctFittingType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowSegmentType\" name=\"IfcDuctSegmentType\" nillable=\"true\" type=\"ifc:IfcDuctSegmentType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDuctSegmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" name=\"IfcDuctSilencerType\" nillable=\"true\" type=\"ifc:IfcDuctSilencerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDuctSilencerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcEdge\" nillable=\"true\" type=\"ifc:IfcEdge\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEdge\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EdgeStart\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertex\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EdgeEnd\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertex\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEdge\" name=\"IfcEdgeCurve\" nillable=\"true\" type=\"ifc:IfcEdgeCurve\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEdgeCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EdgeGeometry\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" name=\"IfcEdgeFeature\" nillable=\"true\" type=\"ifc:IfcEdgeFeature\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEdgeFeature\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FeatureLength\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcLoop\" name=\"IfcEdgeLoop\" nillable=\"true\" type=\"ifc:IfcEdgeLoop\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEdgeLoop\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EdgeList\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcOrientedEdge\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcElectricApplianceType\" nillable=\"true\" type=\"ifc:IfcElectricApplianceType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricApplianceType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowController\" name=\"IfcElectricDistributionPoint\" nillable=\"true\" type=\"ifc:IfcElectricDistributionPoint\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricDistributionPoint\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DistributionPointFunction\" type=\"ifc:IfcElectricDistributionPointFunctionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedFunction\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" name=\"IfcElectricFlowStorageDeviceType\" nillable=\"true\" type=\"ifc:IfcElectricFlowStorageDeviceType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricFlowStorageDeviceType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcElectricGeneratorType\" nillable=\"true\" type=\"ifc:IfcElectricGeneratorType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricGeneratorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcElectricHeaterType\" nillable=\"true\" type=\"ifc:IfcElectricHeaterType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricHeaterType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricHeaterTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcElectricMotorType\" nillable=\"true\" type=\"ifc:IfcElectricMotorType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricMotorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcElectricTimeControlType\" nillable=\"true\" type=\"ifc:IfcElectricTimeControlType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricTimeControlType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyProperties\" name=\"IfcElectricalBaseProperties\" nillable=\"true\" type=\"ifc:IfcElectricalBaseProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricalBaseProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ElectricCurrentType\" minOccurs=\"0\" type=\"ifc:IfcElectricCurrentEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InputVoltage\" type=\"ifc:IfcElectricVoltageMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InputFrequency\" type=\"ifc:IfcFrequencyMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FullLoadCurrent\" minOccurs=\"0\" type=\"ifc:IfcElectricCurrentMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MinimumCircuitCurrent\" minOccurs=\"0\" type=\"ifc:IfcElectricCurrentMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MaximumPowerInput\" minOccurs=\"0\" type=\"ifc:IfcPowerMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RatedPowerInput\" minOccurs=\"0\" type=\"ifc:IfcPowerMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InputPhase\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSystem\" name=\"IfcElectricalCircuit\" nillable=\"true\" type=\"ifc:IfcElectricalCircuit\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricalCircuit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcElectricalElement\" nillable=\"true\" type=\"ifc:IfcElectricalElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricalElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcElement\" nillable=\"true\" type=\"ifc:IfcElement\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Tag\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcElementAssembly\" nillable=\"true\" type=\"ifc:IfcElementAssembly\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElementAssembly\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AssemblyPlace\" minOccurs=\"0\" type=\"ifc:IfcAssemblyPlaceEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcElementComponent\" nillable=\"true\" type=\"ifc:IfcElementComponent\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElementComponent\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementType\" name=\"IfcElementComponentType\" nillable=\"true\" type=\"ifc:IfcElementComponentType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElementComponentType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcElementQuantity\" nillable=\"true\" type=\"ifc:IfcElementQuantity\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElementQuantity\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MethodOfMeasurement\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Quantities\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPhysicalQuantity\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTypeProduct\" name=\"IfcElementType\" nillable=\"true\" type=\"ifc:IfcElementType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ElementType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSurface\" name=\"IfcElementarySurface\" nillable=\"true\" type=\"ifc:IfcElementarySurface\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElementarySurface\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConic\" name=\"IfcEllipse\" nillable=\"true\" type=\"ifc:IfcEllipse\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEllipse\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcEllipseProfileDef\" nillable=\"true\" type=\"ifc:IfcEllipseProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEllipseProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcEnergyConversionDevice\" nillable=\"true\" type=\"ifc:IfcEnergyConversionDevice\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEnergyConversionDevice\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcEnergyConversionDeviceType\" nillable=\"true\" type=\"ifc:IfcEnergyConversionDeviceType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEnergyConversionDeviceType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcEnergyProperties\" nillable=\"true\" type=\"ifc:IfcEnergyProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEnergyProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EnergySequence\" minOccurs=\"0\" type=\"ifc:IfcEnergySequenceEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedEnergySequence\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAppliedValue\" name=\"IfcEnvironmentalImpactValue\" nillable=\"true\" type=\"ifc:IfcEnvironmentalImpactValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEnvironmentalImpactValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ImpactType\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Category\" type=\"ifc:IfcEnvironmentalImpactCategoryEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedCategory\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcEquipmentElement\" nillable=\"true\" type=\"ifc:IfcEquipmentElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEquipmentElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcEquipmentStandard\" nillable=\"true\" type=\"ifc:IfcEquipmentStandard\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEquipmentStandard\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcEvaporativeCoolerType\" nillable=\"true\" type=\"ifc:IfcEvaporativeCoolerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEvaporativeCoolerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcEvaporatorType\" nillable=\"true\" type=\"ifc:IfcEvaporatorType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEvaporatorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcExtendedMaterialProperties\" nillable=\"true\" type=\"ifc:IfcExtendedMaterialProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcExtendedMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ExtendedProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcExternalReference\" nillable=\"true\" type=\"ifc:IfcExternalReference\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcExternalReference\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Location\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ItemReference\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcExternallyDefinedHatchStyle\" nillable=\"true\" type=\"ifc:IfcExternallyDefinedHatchStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcExternallyDefinedHatchStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcExternallyDefinedSurfaceStyle\" nillable=\"true\" type=\"ifc:IfcExternallyDefinedSurfaceStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcExternallyDefinedSurfaceStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcExternallyDefinedSymbol\" nillable=\"true\" type=\"ifc:IfcExternallyDefinedSymbol\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcExternallyDefinedSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcExternallyDefinedTextFont\" nillable=\"true\" type=\"ifc:IfcExternallyDefinedTextFont\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcExternallyDefinedTextFont\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSweptAreaSolid\" name=\"IfcExtrudedAreaSolid\" nillable=\"true\" type=\"ifc:IfcExtrudedAreaSolid\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcExtrudedAreaSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcFace\" nillable=\"true\" type=\"ifc:IfcFace\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFace\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Bounds\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFaceBound\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFaceBound\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcFaceBasedSurfaceModel\" nillable=\"true\" type=\"ifc:IfcFaceBasedSurfaceModel\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFaceBasedSurfaceModel\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FbsmFaces\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectedFaceSet\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcConnectedFaceSet\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcFaceBound\" nillable=\"true\" type=\"ifc:IfcFaceBound\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFaceBound\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Bound\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLoop\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFaceBound\" name=\"IfcFaceOuterBound\" nillable=\"true\" type=\"ifc:IfcFaceOuterBound\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFaceOuterBound\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFaceBound\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFace\" name=\"IfcFaceSurface\" nillable=\"true\" type=\"ifc:IfcFaceSurface\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFaceSurface\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFace\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FaceSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcManifoldSolidBrep\" name=\"IfcFacetedBrep\" nillable=\"true\" type=\"ifc:IfcFacetedBrep\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFacetedBrep\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcManifoldSolidBrep\" name=\"IfcFacetedBrepWithVoids\" nillable=\"true\" type=\"ifc:IfcFacetedBrepWithVoids\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFacetedBrepWithVoids\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Voids\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClosedShell\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" name=\"IfcFailureConnectionCondition\" nillable=\"true\" type=\"ifc:IfcFailureConnectionCondition\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFailureConnectionCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TensionFailureX\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TensionFailureY\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TensionFailureZ\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CompressionFailureX\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CompressionFailureY\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CompressionFailureZ\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" name=\"IfcFanType\" nillable=\"true\" type=\"ifc:IfcFanType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFanType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementComponent\" name=\"IfcFastener\" nillable=\"true\" type=\"ifc:IfcFastener\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFastener\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementComponentType\" name=\"IfcFastenerType\" nillable=\"true\" type=\"ifc:IfcFastenerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFastenerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcFeatureElement\" nillable=\"true\" type=\"ifc:IfcFeatureElement\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFeatureElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFeatureElement\" name=\"IfcFeatureElementAddition\" nillable=\"true\" type=\"ifc:IfcFeatureElementAddition\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFeatureElementAddition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFeatureElement\" name=\"IfcFeatureElementSubtraction\" nillable=\"true\" type=\"ifc:IfcFeatureElementSubtraction\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFeatureElementSubtraction\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPresentationStyle\" name=\"IfcFillAreaStyle\" nillable=\"true\" type=\"ifc:IfcFillAreaStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFillAreaStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FillStyles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFillStyleSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcFillAreaStyleHatching\" nillable=\"true\" type=\"ifc:IfcFillAreaStyleHatching\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFillAreaStyleHatching\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HatchLineAppearance\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyle\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartOfNextHatchLine\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcHatchLineDistanceSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PointOfReferenceHatchLine\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PatternStart\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HatchLineAngle\" type=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcFillAreaStyleTileSymbolWithStyle\" nillable=\"true\" type=\"ifc:IfcFillAreaStyleTileSymbolWithStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFillAreaStyleTileSymbolWithStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Symbol\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAnnotationSymbolOccurrence\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcFillAreaStyleTiles\" nillable=\"true\" type=\"ifc:IfcFillAreaStyleTiles\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFillAreaStyleTiles\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TilingPattern\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOneDirectionRepeatFactor\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Tiles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillAreaStyleTileShapeSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFillAreaStyleTileShapeSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TilingScale\" type=\"ifc:IfcPositiveRatioMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" name=\"IfcFilterType\" nillable=\"true\" type=\"ifc:IfcFilterType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFilterType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcFireSuppressionTerminalType\" nillable=\"true\" type=\"ifc:IfcFireSuppressionTerminalType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFireSuppressionTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowController\" nillable=\"true\" type=\"ifc:IfcFlowController\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowController\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowControllerType\" nillable=\"true\" type=\"ifc:IfcFlowControllerType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowControllerType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowFitting\" nillable=\"true\" type=\"ifc:IfcFlowFitting\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowFitting\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowFittingType\" nillable=\"true\" type=\"ifc:IfcFlowFittingType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowFittingType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionControlElementType\" name=\"IfcFlowInstrumentType\" nillable=\"true\" type=\"ifc:IfcFlowInstrumentType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowInstrumentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcFlowMeterType\" nillable=\"true\" type=\"ifc:IfcFlowMeterType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowMeterType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowMovingDevice\" nillable=\"true\" type=\"ifc:IfcFlowMovingDevice\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowMovingDevice\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowMovingDeviceType\" nillable=\"true\" type=\"ifc:IfcFlowMovingDeviceType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowMovingDeviceType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowSegment\" nillable=\"true\" type=\"ifc:IfcFlowSegment\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowSegment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowSegmentType\" nillable=\"true\" type=\"ifc:IfcFlowSegmentType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowSegmentType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowStorageDevice\" nillable=\"true\" type=\"ifc:IfcFlowStorageDevice\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowStorageDevice\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowStorageDeviceType\" nillable=\"true\" type=\"ifc:IfcFlowStorageDeviceType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowStorageDeviceType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowTerminal\" nillable=\"true\" type=\"ifc:IfcFlowTerminal\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowTerminal\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowTerminalType\" nillable=\"true\" type=\"ifc:IfcFlowTerminalType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowTerminalType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowTreatmentDevice\" nillable=\"true\" type=\"ifc:IfcFlowTreatmentDevice\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowTreatmentDevice\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowTreatmentDeviceType\" nillable=\"true\" type=\"ifc:IfcFlowTreatmentDeviceType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowTreatmentDeviceType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcFluidFlowProperties\" nillable=\"true\" type=\"ifc:IfcFluidFlowProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFluidFlowProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PropertySource\" type=\"ifc:IfcPropertySourceEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"FlowConditionTimeSeries\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"VelocityTimeSeries\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"FlowrateTimeSeries\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Fluid\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PressureTimeSeries\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedPropertySource\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TemperatureSingleValue\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WetBulbTemperatureSingleValue\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"WetBulbTemperatureTimeSeries\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TemperatureTimeSeries\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"FlowrateSingleValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDerivedMeasureValue\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlowConditionSingleValue\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VelocitySingleValue\" minOccurs=\"0\" type=\"ifc:IfcLinearVelocityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PressureSingleValue\" minOccurs=\"0\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcFooting\" nillable=\"true\" type=\"ifc:IfcFooting\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFooting\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcFuelProperties\" nillable=\"true\" type=\"ifc:IfcFuelProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFuelProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CombustionTemperature\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CarbonContent\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LowerHeatingValue\" minOccurs=\"0\" type=\"ifc:IfcHeatingValueMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HigherHeatingValue\" minOccurs=\"0\" type=\"ifc:IfcHeatingValueMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcFurnishingElement\" nillable=\"true\" type=\"ifc:IfcFurnishingElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFurnishingElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementType\" name=\"IfcFurnishingElementType\" nillable=\"true\" type=\"ifc:IfcFurnishingElementType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFurnishingElementType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcFurnitureStandard\" nillable=\"true\" type=\"ifc:IfcFurnitureStandard\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFurnitureStandard\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFurnishingElementType\" name=\"IfcFurnitureType\" nillable=\"true\" type=\"ifc:IfcFurnitureType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFurnitureType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcGasTerminalType\" nillable=\"true\" type=\"ifc:IfcGasTerminalType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGasTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcGasTerminalTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcGeneralMaterialProperties\" nillable=\"true\" type=\"ifc:IfcGeneralMaterialProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGeneralMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MolecularWeight\" minOccurs=\"0\" type=\"ifc:IfcMolecularWeightMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Porosity\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MassDensity\" minOccurs=\"0\" type=\"ifc:IfcMassDensityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProfileProperties\" name=\"IfcGeneralProfileProperties\" nillable=\"true\" type=\"ifc:IfcGeneralProfileProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGeneralProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PhysicalWeight\" minOccurs=\"0\" type=\"ifc:IfcMassPerLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Perimeter\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MinimumPlateThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MaximumPlateThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionArea\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricSet\" name=\"IfcGeometricCurveSet\" nillable=\"true\" type=\"ifc:IfcGeometricCurveSet\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGeometricCurveSet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricSet\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentationContext\" name=\"IfcGeometricRepresentationContext\" nillable=\"true\" type=\"ifc:IfcGeometricRepresentationContext\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGeometricRepresentationContext\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationContext\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CoordinateSpaceDimension\" minOccurs=\"0\" type=\"ifc:IfcDimensionCount\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Precision\" minOccurs=\"0\" type=\"xs:double\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"WorldCoordinateSystem\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TrueNorth\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentationItem\" name=\"IfcGeometricRepresentationItem\" nillable=\"true\" type=\"ifc:IfcGeometricRepresentationItem\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGeometricRepresentationItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext-temp\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:restriction base=\"ifc:IfcGeometricRepresentationContext\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ContextIdentifier\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ContextType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:restriction>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationContext\" name=\"IfcGeometricRepresentationSubContext\" nillable=\"true\" type=\"ifc:IfcGeometricRepresentationSubContext\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationSubContext-temp\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ParentContext\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationContext\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TargetScale\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TargetView\" type=\"ifc:IfcGeometricProjectionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedTargetView\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcGeometricSet\" nillable=\"true\" type=\"ifc:IfcGeometricSet\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGeometricSet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Elements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGeometricSetSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcGrid\" nillable=\"true\" type=\"ifc:IfcGrid\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGrid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UAxes\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VAxes\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WAxes\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcGridAxis\" nillable=\"true\" type=\"ifc:IfcGridAxis\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGridAxis\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AxisTag\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AxisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"ifc:IfcBoolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObjectPlacement\" name=\"IfcGridPlacement\" nillable=\"true\" type=\"ifc:IfcGridPlacement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGridPlacement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PlacementLocation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PlacementRefDirection\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcGroup\" nillable=\"true\" type=\"ifc:IfcGroup\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGroup\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcHalfSpaceSolid\" nillable=\"true\" type=\"ifc:IfcHalfSpaceSolid\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcHalfSpaceSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BaseSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AgreementFlag\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcHeatExchangerType\" nillable=\"true\" type=\"ifc:IfcHeatExchangerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcHeatExchangerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcHumidifierType\" nillable=\"true\" type=\"ifc:IfcHumidifierType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcHumidifierType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcHygroscopicMaterialProperties\" nillable=\"true\" type=\"ifc:IfcHygroscopicMaterialProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcHygroscopicMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UpperVaporResistanceFactor\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LowerVaporResistanceFactor\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IsothermalMoistureCapacity\" minOccurs=\"0\" type=\"ifc:IfcIsothermalMoistureCapacityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VaporPermeability\" minOccurs=\"0\" type=\"ifc:IfcVaporPermeabilityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MoistureDiffusivity\" minOccurs=\"0\" type=\"ifc:IfcMoistureDiffusivityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcIShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcIShapeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcIShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSurfaceTexture\" name=\"IfcImageTexture\" nillable=\"true\" type=\"ifc:IfcImageTexture\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcImageTexture\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UrlReference\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcInventory\" nillable=\"true\" type=\"ifc:IfcInventory\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcInventory\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"InventoryType\" type=\"ifc:IfcInventoryTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Jurisdiction\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ResponsiblePersons\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPerson\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LastUpdateDate\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CurrentValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"OriginalValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTimeSeries\" name=\"IfcIrregularTimeSeries\" nillable=\"true\" type=\"ifc:IfcIrregularTimeSeries\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcIrregularTimeSeries\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Values\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIrregularTimeSeriesValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcIrregularTimeSeriesValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcIrregularTimeSeriesValue\" nillable=\"true\" type=\"ifc:IfcIrregularTimeSeriesValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcIrregularTimeSeriesValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TimeStamp\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ListValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowFittingType\" name=\"IfcJunctionBoxType\" nillable=\"true\" type=\"ifc:IfcJunctionBoxType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcJunctionBoxType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcLShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcLShapeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Width\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EdgeRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LegSlope\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConstructionResource\" name=\"IfcLaborResource\" nillable=\"true\" type=\"ifc:IfcLaborResource\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLaborResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SkillSet\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcLampType\" nillable=\"true\" type=\"ifc:IfcLampType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLampType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcLibraryInformation\" nillable=\"true\" type=\"ifc:IfcLibraryInformation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLibraryInformation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Version\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Publisher\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"VersionDate\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LibraryReference\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLibraryReference\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcLibraryReference\" nillable=\"true\" type=\"ifc:IfcLibraryReference\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLibraryReference\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcLightDistributionData\" nillable=\"true\" type=\"ifc:IfcLightDistributionData\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLightDistributionData\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MainPlaneAngle\" type=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SecondaryPlaneAngle\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LuminousIntensity\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLuminousIntensityDistributionMeasure\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcLightFixtureType\" nillable=\"true\" type=\"ifc:IfcLightFixtureType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLightFixtureType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcLightIntensityDistribution\" nillable=\"true\" type=\"ifc:IfcLightIntensityDistribution\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLightIntensityDistribution\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LightDistributionCurve\" type=\"ifc:IfcLightDistributionCurveEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DistributionData\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLightDistributionData\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLightDistributionData\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcLightSource\" nillable=\"true\" type=\"ifc:IfcLightSource\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLightSource\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LightColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AmbientIntensity\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Intensity\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcLightSource\" name=\"IfcLightSourceAmbient\" nillable=\"true\" type=\"ifc:IfcLightSourceAmbient\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLightSourceAmbient\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcLightSource\" name=\"IfcLightSourceDirectional\" nillable=\"true\" type=\"ifc:IfcLightSourceDirectional\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLightSourceDirectional\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Orientation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcLightSource\" name=\"IfcLightSourceGoniometric\" nillable=\"true\" type=\"ifc:IfcLightSourceGoniometric\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLightSourceGoniometric\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ColourAppearance\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ColourTemperature\" type=\"ifc:IfcThermodynamicTemperatureMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LuminousFlux\" type=\"ifc:IfcLuminousFluxMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LightEmissionSource\" type=\"ifc:IfcLightEmissionSourceEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LightDistributionDataSource\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcLightSource\" name=\"IfcLightSourcePositional\" nillable=\"true\" type=\"ifc:IfcLightSourcePositional\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLightSourcePositional\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConstantAttenuation\" type=\"ifc:IfcReal\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DistanceAttenuation\" type=\"ifc:IfcReal\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"QuadricAttenuation\" type=\"ifc:IfcReal\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcLightSourcePositional\" name=\"IfcLightSourceSpot\" nillable=\"true\" type=\"ifc:IfcLightSourceSpot\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLightSourceSpot\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSourcePositional\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Orientation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConcentrationExponent\" minOccurs=\"0\" type=\"ifc:IfcReal\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SpreadAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BeamWidthAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCurve\" name=\"IfcLine\" nillable=\"true\" type=\"ifc:IfcLine\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLine\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Pnt\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Dir\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" name=\"IfcLinearDimension\" nillable=\"true\" type=\"ifc:IfcLinearDimension\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLinearDimension\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObjectPlacement\" name=\"IfcLocalPlacement\" nillable=\"true\" type=\"ifc:IfcLocalPlacement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLocalPlacement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PlacementRelTo\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectPlacement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelativePlacement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcLocalTime\" nillable=\"true\" type=\"ifc:IfcLocalTime\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLocalTime\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HourComponent\" type=\"ifc:IfcHourInDay\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MinuteComponent\" minOccurs=\"0\" type=\"ifc:IfcMinuteInHour\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SecondComponent\" minOccurs=\"0\" type=\"ifc:IfcSecondInMinute\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Zone\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCoordinatedUniversalTimeOffset\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DaylightSavingOffset\" minOccurs=\"0\" type=\"ifc:IfcDaylightSavingHour\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcLoop\" nillable=\"true\" type=\"ifc:IfcLoop\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLoop\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSolidModel\" name=\"IfcManifoldSolidBrep\" nillable=\"true\" type=\"ifc:IfcManifoldSolidBrep\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcManifoldSolidBrep\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Outer\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentationItem\" name=\"IfcMappedItem\" nillable=\"true\" type=\"ifc:IfcMappedItem\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMappedItem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MappingSource\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MappingTarget\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterial\" nillable=\"true\" type=\"ifc:IfcMaterial\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMaterial\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterialClassificationRelationship\" nillable=\"true\" type=\"ifc:IfcMaterialClassificationRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMaterialClassificationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MaterialClassifications\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationNotationSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ClassifiedMaterial\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProductRepresentation\" name=\"IfcMaterialDefinitionRepresentation\" nillable=\"true\" type=\"ifc:IfcMaterialDefinitionRepresentation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMaterialDefinitionRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RepresentedMaterial\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterialLayer\" nillable=\"true\" type=\"ifc:IfcMaterialLayer\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMaterialLayer\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Material\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IsVentilated\" minOccurs=\"0\" type=\"ifc:IfcLogical\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterialLayerSet\" nillable=\"true\" type=\"ifc:IfcMaterialLayerSet\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMaterialLayerSet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MaterialLayers\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcMaterialLayer\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerSetName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterialLayerSetUsage\" nillable=\"true\" type=\"ifc:IfcMaterialLayerSetUsage\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMaterialLayerSetUsage\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ForLayerSet\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayerSet\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerSetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DirectionSense\" type=\"ifc:IfcDirectionSenseEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OffsetFromReferenceLine\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterialList\" nillable=\"true\" type=\"ifc:IfcMaterialList\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMaterialList\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Materials\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcMaterial\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterialProperties\" nillable=\"true\" type=\"ifc:IfcMaterialProperties\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMaterialProperties\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Material\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMeasureWithUnit\" nillable=\"true\" type=\"ifc:IfcMeasureWithUnit\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMeasureWithUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ValueComponent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UnitComponent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMechanicalMaterialProperties\" name=\"IfcMechanicalConcreteMaterialProperties\" nillable=\"true\" type=\"ifc:IfcMechanicalConcreteMaterialProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMechanicalConcreteMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMechanicalMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CompressiveStrength\" minOccurs=\"0\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MaxAggregateSize\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AdmixturesDescription\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Workability\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ProtectivePoreRatio\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WaterImpermeability\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFastener\" name=\"IfcMechanicalFastener\" nillable=\"true\" type=\"ifc:IfcMechanicalFastener\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMechanicalFastener\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFastener\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NominalDiameter\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"NominalLength\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFastenerType\" name=\"IfcMechanicalFastenerType\" nillable=\"true\" type=\"ifc:IfcMechanicalFastenerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMechanicalFastenerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFastenerType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcMechanicalMaterialProperties\" nillable=\"true\" type=\"ifc:IfcMechanicalMaterialProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMechanicalMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DynamicViscosity\" minOccurs=\"0\" type=\"ifc:IfcDynamicViscosityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"YoungModulus\" minOccurs=\"0\" type=\"ifc:IfcModulusOfElasticityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ShearModulus\" minOccurs=\"0\" type=\"ifc:IfcModulusOfElasticityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PoissonRatio\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThermalExpansionCoefficient\" minOccurs=\"0\" type=\"ifc:IfcThermalExpansionCoefficientMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMechanicalMaterialProperties\" name=\"IfcMechanicalSteelMaterialProperties\" nillable=\"true\" type=\"ifc:IfcMechanicalSteelMaterialProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMechanicalSteelMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMechanicalMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"YieldStress\" minOccurs=\"0\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UltimateStress\" minOccurs=\"0\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UltimateStrain\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HardeningModule\" minOccurs=\"0\" type=\"ifc:IfcModulusOfElasticityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ProportionalStress\" minOccurs=\"0\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PlasticStrain\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Relaxations\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelaxation\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRelaxation\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcMember\" nillable=\"true\" type=\"ifc:IfcMember\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMember\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcMemberType\" nillable=\"true\" type=\"ifc:IfcMemberType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMemberType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConstraint\" name=\"IfcMetric\" nillable=\"true\" type=\"ifc:IfcMetric\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMetric\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Benchmark\" type=\"ifc:IfcBenchmarkEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ValueSource\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DataValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMonetaryUnit\" nillable=\"true\" type=\"ifc:IfcMonetaryUnit\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMonetaryUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Currency\" type=\"ifc:IfcCurrencyEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcMotorConnectionType\" nillable=\"true\" type=\"ifc:IfcMotorConnectionType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMotorConnectionType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTask\" name=\"IfcMove\" nillable=\"true\" type=\"ifc:IfcMove\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMove\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTask\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MoveFrom\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MoveTo\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PunchList\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcText\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcText\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcNamedUnit\" nillable=\"true\" type=\"ifc:IfcNamedUnit\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcNamedUnit\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Dimensions\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDimensionalExponents\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UnitType\" type=\"ifc:IfcUnitEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObjectDefinition\" name=\"IfcObject\" nillable=\"true\" type=\"ifc:IfcObject\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcObject\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ObjectType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRoot\" name=\"IfcObjectDefinition\" nillable=\"true\" type=\"ifc:IfcObjectDefinition\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcObjectDefinition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcObjectPlacement\" nillable=\"true\" type=\"ifc:IfcObjectPlacement\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcObjectPlacement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConstraint\" name=\"IfcObjective\" nillable=\"true\" type=\"ifc:IfcObjective\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcObjective\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"BenchmarkValues\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMetric\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ResultValues\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMetric\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ObjectiveQualifier\" type=\"ifc:IfcObjectiveEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedQualifier\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcActor\" name=\"IfcOccupant\" nillable=\"true\" type=\"ifc:IfcOccupant\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOccupant\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcActor\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcOccupantTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCurve\" name=\"IfcOffsetCurve2D\" nillable=\"true\" type=\"ifc:IfcOffsetCurve2D\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOffsetCurve2D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Distance\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCurve\" name=\"IfcOffsetCurve3D\" nillable=\"true\" type=\"ifc:IfcOffsetCurve3D\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOffsetCurve3D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Distance\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RefDirection\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcOneDirectionRepeatFactor\" nillable=\"true\" type=\"ifc:IfcOneDirectionRepeatFactor\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOneDirectionRepeatFactor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RepeatFactor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConnectedFaceSet\" name=\"IfcOpenShell\" nillable=\"true\" type=\"ifc:IfcOpenShell\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOpenShell\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" name=\"IfcOpeningElement\" nillable=\"true\" type=\"ifc:IfcOpeningElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOpeningElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcOpticalMaterialProperties\" nillable=\"true\" type=\"ifc:IfcOpticalMaterialProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOpticalMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VisibleTransmittance\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SolarTransmittance\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThermalIrTransmittance\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThermalIrEmissivityBack\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThermalIrEmissivityFront\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VisibleReflectanceBack\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VisibleReflectanceFront\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SolarReflectanceFront\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SolarReflectanceBack\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTask\" name=\"IfcOrderAction\" nillable=\"true\" type=\"ifc:IfcOrderAction\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOrderAction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTask\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ActionID\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcOrganization\" nillable=\"true\" type=\"ifc:IfcOrganization\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOrganization\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Id\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Roles\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorRole\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Addresses\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAddress\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcOrganizationRelationship\" nillable=\"true\" type=\"ifc:IfcOrganizationRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOrganizationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingOrganization\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedOrganizations\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcOrganization\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:complexType name=\"IfcOrientedEdge-temp\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:restriction base=\"ifc:IfcEdge\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:restriction>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element substitutionGroup=\"ifc:IfcEdge\" name=\"IfcOrientedEdge\" nillable=\"true\" type=\"ifc:IfcOrientedEdge\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOrientedEdge\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcOrientedEdge-temp\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EdgeElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcEdge\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcOutletType\" nillable=\"true\" type=\"ifc:IfcOutletType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOutletType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcOwnerHistory\" nillable=\"true\" type=\"ifc:IfcOwnerHistory\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOwnerHistory\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OwningUser\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OwningApplication\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApplication\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"State\" minOccurs=\"0\" type=\"ifc:IfcStateEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ChangeAction\" type=\"ifc:IfcChangeActionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LastModifiedDate\" minOccurs=\"0\" type=\"ifc:IfcTimeStamp\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LastModifyingUser\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LastModifyingApplication\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApplication\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CreationDate\" type=\"ifc:IfcTimeStamp\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProfileDef\" name=\"IfcParameterizedProfileDef\" nillable=\"true\" type=\"ifc:IfcParameterizedProfileDef\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcParameterizedProfileDef\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcPath\" nillable=\"true\" type=\"ifc:IfcPath\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPath\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EdgeList\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcOrientedEdge\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcPerformanceHistory\" nillable=\"true\" type=\"ifc:IfcPerformanceHistory\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPerformanceHistory\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LifeCyclePhase\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcPermeableCoveringProperties\" nillable=\"true\" type=\"ifc:IfcPermeableCoveringProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPermeableCoveringProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcPermeableCoveringOperationEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FrameDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FrameThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ShapeAspectStyle\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcPermit\" nillable=\"true\" type=\"ifc:IfcPermit\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPermit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PermitID\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPerson\" nillable=\"true\" type=\"ifc:IfcPerson\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPerson\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Id\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FamilyName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"GivenName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MiddleNames\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PrefixTitles\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SuffixTitles\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Roles\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorRole\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Addresses\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAddress\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPersonAndOrganization\" nillable=\"true\" type=\"ifc:IfcPersonAndOrganization\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPersonAndOrganization\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ThePerson\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TheOrganization\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Roles\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorRole\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalQuantity\" name=\"IfcPhysicalComplexQuantity\" nillable=\"true\" type=\"ifc:IfcPhysicalComplexQuantity\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPhysicalComplexQuantity\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HasQuantities\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPhysicalQuantity\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Discrimination\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Quality\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Usage\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPhysicalQuantity\" nillable=\"true\" type=\"ifc:IfcPhysicalQuantity\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPhysicalQuantity\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalQuantity\" name=\"IfcPhysicalSimpleQuantity\" nillable=\"true\" type=\"ifc:IfcPhysicalSimpleQuantity\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPhysicalSimpleQuantity\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Unit\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcPile\" nillable=\"true\" type=\"ifc:IfcPile\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPile\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConstructionType\" minOccurs=\"0\" type=\"ifc:IfcPileConstructionEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowFittingType\" name=\"IfcPipeFittingType\" nillable=\"true\" type=\"ifc:IfcPipeFittingType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPipeFittingType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowSegmentType\" name=\"IfcPipeSegmentType\" nillable=\"true\" type=\"ifc:IfcPipeSegmentType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPipeSegmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSurfaceTexture\" name=\"IfcPixelTexture\" nillable=\"true\" type=\"ifc:IfcPixelTexture\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPixelTexture\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Width\" type=\"ifc:IfcInteger\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Height\" type=\"ifc:IfcInteger\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ColourComponents\" type=\"ifc:IfcInteger\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Pixel\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:hexBinary-wrapper\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:hexBinary-wrapper\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcPlacement\" nillable=\"true\" type=\"ifc:IfcPlacement\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPlacement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Location\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPlanarExtent\" name=\"IfcPlanarBox\" nillable=\"true\" type=\"ifc:IfcPlanarBox\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPlanarBox\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPlanarExtent\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Placement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcPlanarExtent\" nillable=\"true\" type=\"ifc:IfcPlanarExtent\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPlanarExtent\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SizeInX\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SizeInY\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementarySurface\" name=\"IfcPlane\" nillable=\"true\" type=\"ifc:IfcPlane\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPlane\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcPlate\" nillable=\"true\" type=\"ifc:IfcPlate\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPlate\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcPlateType\" nillable=\"true\" type=\"ifc:IfcPlateType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPlateType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcPoint\" nillable=\"true\" type=\"ifc:IfcPoint\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPoint\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPoint\" name=\"IfcPointOnCurve\" nillable=\"true\" type=\"ifc:IfcPointOnCurve\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPointOnCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PointParameter\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPoint\" name=\"IfcPointOnSurface\" nillable=\"true\" type=\"ifc:IfcPointOnSurface\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPointOnSurface\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PointParameterU\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PointParameterV\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcLoop\" name=\"IfcPolyLoop\" nillable=\"true\" type=\"ifc:IfcPolyLoop\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPolyLoop\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Polygon\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" maxOccurs=\"unbounded\" minOccurs=\"3\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcHalfSpaceSolid\" name=\"IfcPolygonalBoundedHalfSpace\" nillable=\"true\" type=\"ifc:IfcPolygonalBoundedHalfSpace\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPolygonalBoundedHalfSpace\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PolygonalBoundary\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundedCurve\" name=\"IfcPolyline\" nillable=\"true\" type=\"ifc:IfcPolyline\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPolyline\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Points\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" maxOccurs=\"unbounded\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcPort\" nillable=\"true\" type=\"ifc:IfcPort\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPort\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAddress\" name=\"IfcPostalAddress\" nillable=\"true\" type=\"ifc:IfcPostalAddress\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPostalAddress\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"InternalLocation\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AddressLines\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PostalBox\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Town\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Region\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PostalCode\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Country\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedItem\" name=\"IfcPreDefinedColour\" nillable=\"true\" type=\"ifc:IfcPreDefinedColour\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPreDefinedColour\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedItem\" name=\"IfcPreDefinedCurveFont\" nillable=\"true\" type=\"ifc:IfcPreDefinedCurveFont\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPreDefinedCurveFont\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedSymbol\" name=\"IfcPreDefinedDimensionSymbol\" nillable=\"true\" type=\"ifc:IfcPreDefinedDimensionSymbol\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPreDefinedDimensionSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedSymbol\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPreDefinedItem\" nillable=\"true\" type=\"ifc:IfcPreDefinedItem\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPreDefinedItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedSymbol\" name=\"IfcPreDefinedPointMarkerSymbol\" nillable=\"true\" type=\"ifc:IfcPreDefinedPointMarkerSymbol\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPreDefinedPointMarkerSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedSymbol\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedItem\" name=\"IfcPreDefinedSymbol\" nillable=\"true\" type=\"ifc:IfcPreDefinedSymbol\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPreDefinedSymbol\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedSymbol\" name=\"IfcPreDefinedTerminatorSymbol\" nillable=\"true\" type=\"ifc:IfcPreDefinedTerminatorSymbol\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPreDefinedTerminatorSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedSymbol\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedItem\" name=\"IfcPreDefinedTextFont\" nillable=\"true\" type=\"ifc:IfcPreDefinedTextFont\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPreDefinedTextFont\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPresentationLayerAssignment\" nillable=\"true\" type=\"ifc:IfcPresentationLayerAssignment\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPresentationLayerAssignment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AssignedItems\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLayeredItem\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLayeredItem\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Identifier\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPresentationLayerAssignment\" name=\"IfcPresentationLayerWithStyle\" nillable=\"true\" type=\"ifc:IfcPresentationLayerWithStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPresentationLayerWithStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPresentationLayerAssignment\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LayerOn\" type=\"ex:logical\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerFrozen\" type=\"ex:logical\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerBlocked\" type=\"ex:logical\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerStyles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\" maxOccurs=\"unbounded\" minOccurs=\"0\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPresentationStyleSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPresentationStyle\" nillable=\"true\" type=\"ifc:IfcPresentationStyle\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPresentationStyle\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPresentationStyleAssignment\" nillable=\"true\" type=\"ifc:IfcPresentationStyleAssignment\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPresentationStyleAssignment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Styles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPresentationStyleSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProcess\" name=\"IfcProcedure\" nillable=\"true\" type=\"ifc:IfcProcedure\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProcedure\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProcedureID\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ProcedureType\" type=\"ifc:IfcProcedureTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedProcedureType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcProcess\" nillable=\"true\" type=\"ifc:IfcProcess\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProcess\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcProduct\" nillable=\"true\" type=\"ifc:IfcProduct\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProduct\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ObjectPlacement\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectPlacement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Representation\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProductRepresentation\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProductRepresentation\" name=\"IfcProductDefinitionShape\" nillable=\"true\" type=\"ifc:IfcProductDefinitionShape\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProductDefinitionShape\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcProductRepresentation\" nillable=\"true\" type=\"ifc:IfcProductRepresentation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProductRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Representations\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentation\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcProductsOfCombustionProperties\" nillable=\"true\" type=\"ifc:IfcProductsOfCombustionProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProductsOfCombustionProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SpecificHeatCapacity\" minOccurs=\"0\" type=\"ifc:IfcSpecificHeatCapacityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"N20Content\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"COContent\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CO2Content\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcProfileDef\" nillable=\"true\" type=\"ifc:IfcProfileDef\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProfileDef\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProfileType\" type=\"ifc:IfcProfileTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ProfileName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcProfileProperties\" nillable=\"true\" type=\"ifc:IfcProfileProperties\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProfileProperties\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProfileName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ProfileDefinition\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcProject\" nillable=\"true\" type=\"ifc:IfcProject\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProject\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LongName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Phase\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RepresentationContexts\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentationContext\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UnitsInContext\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcUnitAssignment\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcProjectOrder\" nillable=\"true\" type=\"ifc:IfcProjectOrder\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProjectOrder\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ID\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcProjectOrderTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Status\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcProjectOrderRecord\" nillable=\"true\" type=\"ifc:IfcProjectOrderRecord\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProjectOrderRecord\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Records\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelAssignsToProjectOrder\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRelAssignsToProjectOrder\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcProjectOrderRecordTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationCurveOccurrence\" name=\"IfcProjectionCurve\" nillable=\"true\" type=\"ifc:IfcProjectionCurve\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProjectionCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationCurveOccurrence\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFeatureElementAddition\" name=\"IfcProjectionElement\" nillable=\"true\" type=\"ifc:IfcProjectionElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProjectionElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementAddition\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcProperty\" nillable=\"true\" type=\"ifc:IfcProperty\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProperty\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSimpleProperty\" name=\"IfcPropertyBoundedValue\" nillable=\"true\" type=\"ifc:IfcPropertyBoundedValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertyBoundedValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"UpperBoundValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LowerBoundValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Unit\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPropertyConstraintRelationship\" nillable=\"true\" type=\"ifc:IfcPropertyConstraintRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertyConstraintRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRoot\" name=\"IfcPropertyDefinition\" nillable=\"true\" type=\"ifc:IfcPropertyDefinition\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertyDefinition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPropertyDependencyRelationship\" nillable=\"true\" type=\"ifc:IfcPropertyDependencyRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertyDependencyRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DependingProperty\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DependantProperty\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Expression\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSimpleProperty\" name=\"IfcPropertyEnumeratedValue\" nillable=\"true\" type=\"ifc:IfcPropertyEnumeratedValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertyEnumeratedValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EnumerationReference\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyEnumeration\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPropertyEnumeration\" nillable=\"true\" type=\"ifc:IfcPropertyEnumeration\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertyEnumeration\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Unit\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSimpleProperty\" name=\"IfcPropertyListValue\" nillable=\"true\" type=\"ifc:IfcPropertyListValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertyListValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ListValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Unit\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSimpleProperty\" name=\"IfcPropertyReferenceValue\" nillable=\"true\" type=\"ifc:IfcPropertyReferenceValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertyReferenceValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UsageName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PropertyReference\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcPropertySet\" nillable=\"true\" type=\"ifc:IfcPropertySet\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertySet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HasProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertyDefinition\" name=\"IfcPropertySetDefinition\" nillable=\"true\" type=\"ifc:IfcPropertySetDefinition\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertySetDefinition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSimpleProperty\" name=\"IfcPropertySingleValue\" nillable=\"true\" type=\"ifc:IfcPropertySingleValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertySingleValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"NominalValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Unit\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSimpleProperty\" name=\"IfcPropertyTableValue\" nillable=\"true\" type=\"ifc:IfcPropertyTableValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertyTableValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DefiningValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DefinedValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Expression\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"DefiningUnit\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"DefinedUnit\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcProtectiveDeviceType\" nillable=\"true\" type=\"ifc:IfcProtectiveDeviceType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProtectiveDeviceType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcProxy\" nillable=\"true\" type=\"ifc:IfcProxy\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProxy\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProxyType\" type=\"ifc:IfcObjectTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Tag\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" name=\"IfcPumpType\" nillable=\"true\" type=\"ifc:IfcPumpType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPumpType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" name=\"IfcQuantityArea\" nillable=\"true\" type=\"ifc:IfcQuantityArea\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcQuantityArea\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AreaValue\" type=\"ifc:IfcAreaMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" name=\"IfcQuantityCount\" nillable=\"true\" type=\"ifc:IfcQuantityCount\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcQuantityCount\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CountValue\" type=\"ifc:IfcCountMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" name=\"IfcQuantityLength\" nillable=\"true\" type=\"ifc:IfcQuantityLength\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcQuantityLength\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LengthValue\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" name=\"IfcQuantityTime\" nillable=\"true\" type=\"ifc:IfcQuantityTime\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcQuantityTime\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TimeValue\" type=\"ifc:IfcTimeMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" name=\"IfcQuantityVolume\" nillable=\"true\" type=\"ifc:IfcQuantityVolume\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcQuantityVolume\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VolumeValue\" type=\"ifc:IfcVolumeMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" name=\"IfcQuantityWeight\" nillable=\"true\" type=\"ifc:IfcQuantityWeight\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcQuantityWeight\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WeightValue\" type=\"ifc:IfcMassMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" name=\"IfcRadiusDimension\" nillable=\"true\" type=\"ifc:IfcRadiusDimension\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRadiusDimension\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcRailing\" nillable=\"true\" type=\"ifc:IfcRailing\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRailing\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" minOccurs=\"0\" type=\"ifc:IfcRailingTypeEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcRailingType\" nillable=\"true\" type=\"ifc:IfcRailingType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRailingType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcRamp\" nillable=\"true\" type=\"ifc:IfcRamp\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRamp\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShapeType\" type=\"ifc:IfcRampTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcRampFlight\" nillable=\"true\" type=\"ifc:IfcRampFlight\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRampFlight\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcRampFlightType\" nillable=\"true\" type=\"ifc:IfcRampFlightType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRampFlightType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBezierCurve\" name=\"IfcRationalBezierCurve\" nillable=\"true\" type=\"ifc:IfcRationalBezierCurve\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRationalBezierCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBezierCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WeightsData\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:double-wrapper\" maxOccurs=\"unbounded\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:double-wrapper\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRectangleProfileDef\" name=\"IfcRectangleHollowProfileDef\" nillable=\"true\" type=\"ifc:IfcRectangleHollowProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRectangleHollowProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InnerFilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OuterFilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcRectangleProfileDef\" nillable=\"true\" type=\"ifc:IfcRectangleProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRectangleProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCsgPrimitive3D\" name=\"IfcRectangularPyramid\" nillable=\"true\" type=\"ifc:IfcRectangularPyramid\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRectangularPyramid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundedSurface\" name=\"IfcRectangularTrimmedSurface\" nillable=\"true\" type=\"ifc:IfcRectangularTrimmedSurface\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRectangularTrimmedSurface\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"U1\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"V1\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"U2\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"V2\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Usense\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Vsense\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcReferencesValueDocument\" nillable=\"true\" type=\"ifc:IfcReferencesValueDocument\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcReferencesValueDocument\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ReferencedDocument\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReferencingValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAppliedValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTimeSeries\" name=\"IfcRegularTimeSeries\" nillable=\"true\" type=\"ifc:IfcRegularTimeSeries\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRegularTimeSeries\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TimeStep\" type=\"ifc:IfcTimeMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Values\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeriesValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTimeSeriesValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcReinforcementBarProperties\" nillable=\"true\" type=\"ifc:IfcReinforcementBarProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcReinforcementBarProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TotalCrossSectionArea\" type=\"ifc:IfcAreaMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SteelGrade\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BarSurface\" minOccurs=\"0\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EffectiveDepth\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"NominalBarDiameter\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BarCount\" minOccurs=\"0\" type=\"ifc:IfcCountMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcReinforcementDefinitionProperties\" nillable=\"true\" type=\"ifc:IfcReinforcementDefinitionProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcReinforcementDefinitionProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DefinitionType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReinforcementSectionDefinitions\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionReinforcementProperties\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSectionReinforcementProperties\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcReinforcingElement\" name=\"IfcReinforcingBar\" nillable=\"true\" type=\"ifc:IfcReinforcingBar\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcReinforcingBar\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BarLength\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BarRole\" type=\"ifc:IfcReinforcingBarRoleEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BarSurface\" minOccurs=\"0\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementComponent\" name=\"IfcReinforcingElement\" nillable=\"true\" type=\"ifc:IfcReinforcingElement\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcReinforcingElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementComponent\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SteelGrade\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcReinforcingElement\" name=\"IfcReinforcingMesh\" nillable=\"true\" type=\"ifc:IfcReinforcingMesh\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcReinforcingMesh\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MeshLength\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MeshWidth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelDecomposes\" name=\"IfcRelAggregates\" nillable=\"true\" type=\"ifc:IfcRelAggregates\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAggregates\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelationship\" name=\"IfcRelAssigns\" nillable=\"true\" type=\"ifc:IfcRelAssigns\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssigns\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcObjectDefinition\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjectsType\" minOccurs=\"0\" type=\"ifc:IfcObjectTypeEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssignsToControl\" name=\"IfcRelAssignsTasks\" nillable=\"true\" type=\"ifc:IfcRelAssignsTasks\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssignsTasks\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TimeForTask\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcScheduleTimeControl\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssigns\" name=\"IfcRelAssignsToActor\" nillable=\"true\" type=\"ifc:IfcRelAssignsToActor\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssignsToActor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingActor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActor\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ActingRole\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssigns\" name=\"IfcRelAssignsToControl\" nillable=\"true\" type=\"ifc:IfcRelAssignsToControl\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssignsToControl\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingControl\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcControl\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssigns\" name=\"IfcRelAssignsToGroup\" nillable=\"true\" type=\"ifc:IfcRelAssignsToGroup\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssignsToGroup\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingGroup\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGroup\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssigns\" name=\"IfcRelAssignsToProcess\" nillable=\"true\" type=\"ifc:IfcRelAssignsToProcess\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssignsToProcess\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProcess\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"QuantityInProcess\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssigns\" name=\"IfcRelAssignsToProduct\" nillable=\"true\" type=\"ifc:IfcRelAssignsToProduct\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssignsToProduct\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingProduct\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssignsToControl\" name=\"IfcRelAssignsToProjectOrder\" nillable=\"true\" type=\"ifc:IfcRelAssignsToProjectOrder\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssignsToProjectOrder\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToControl\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssigns\" name=\"IfcRelAssignsToResource\" nillable=\"true\" type=\"ifc:IfcRelAssignsToResource\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssignsToResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingResource\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcResource\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelationship\" name=\"IfcRelAssociates\" nillable=\"true\" type=\"ifc:IfcRelAssociates\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssociates\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRoot\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRoot\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesAppliedValue\" nillable=\"true\" type=\"ifc:IfcRelAssociatesAppliedValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssociatesAppliedValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingAppliedValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesApproval\" nillable=\"true\" type=\"ifc:IfcRelAssociatesApproval\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssociatesApproval\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingApproval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesClassification\" nillable=\"true\" type=\"ifc:IfcRelAssociatesClassification\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssociatesClassification\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingClassification\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesConstraint\" nillable=\"true\" type=\"ifc:IfcRelAssociatesConstraint\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssociatesConstraint\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Intent\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesDocument\" nillable=\"true\" type=\"ifc:IfcRelAssociatesDocument\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssociatesDocument\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesLibrary\" nillable=\"true\" type=\"ifc:IfcRelAssociatesLibrary\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssociatesLibrary\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingLibrary\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLibrarySelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesMaterial\" nillable=\"true\" type=\"ifc:IfcRelAssociatesMaterial\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssociatesMaterial\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMaterialSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesProfileProperties\" nillable=\"true\" type=\"ifc:IfcRelAssociatesProfileProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssociatesProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingProfileProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileProperties\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ProfileSectionLocation\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ProfileOrientation\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcOrientationSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelationship\" name=\"IfcRelConnects\" nillable=\"true\" type=\"ifc:IfcRelConnects\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnects\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelConnectsElements\" nillable=\"true\" type=\"ifc:IfcRelConnectsElements\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnectsElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ConnectionGeometry\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnectsElements\" name=\"IfcRelConnectsPathElements\" nillable=\"true\" type=\"ifc:IfcRelConnectsPathElements\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnectsPathElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingPriorities\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:long-wrapper\" maxOccurs=\"unbounded\" minOccurs=\"0\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:long-wrapper\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedPriorities\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:long-wrapper\" maxOccurs=\"unbounded\" minOccurs=\"0\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:long-wrapper\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedConnectionType\" type=\"ifc:IfcConnectionTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingConnectionType\" type=\"ifc:IfcConnectionTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelConnectsPortToElement\" nillable=\"true\" type=\"ifc:IfcRelConnectsPortToElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnectsPortToElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingPort\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPort\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelConnectsPorts\" nillable=\"true\" type=\"ifc:IfcRelConnectsPorts\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnectsPorts\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingPort\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPort\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedPort\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPort\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"RealizingElement\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelConnectsStructuralActivity\" nillable=\"true\" type=\"ifc:IfcRelConnectsStructuralActivity\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnectsStructuralActivity\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedStructuralActivity\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralActivity\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelConnectsStructuralElement\" nillable=\"true\" type=\"ifc:IfcRelConnectsStructuralElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnectsStructuralElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedStructuralMember\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralMember\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelConnectsStructuralMember\" nillable=\"true\" type=\"ifc:IfcRelConnectsStructuralMember\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnectsStructuralMember\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingStructuralMember\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralMember\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedStructuralConnection\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralConnection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"AppliedCondition\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCondition\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"AdditionalConditions\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralConnectionCondition\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SupportedLength\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ConditionCoordinateSystem\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnectsStructuralMember\" name=\"IfcRelConnectsWithEccentricity\" nillable=\"true\" type=\"ifc:IfcRelConnectsWithEccentricity\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnectsWithEccentricity\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsStructuralMember\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ConnectionConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnectsElements\" name=\"IfcRelConnectsWithRealizingElements\" nillable=\"true\" type=\"ifc:IfcRelConnectsWithRealizingElements\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnectsWithRealizingElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RealizingElements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConnectionType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelContainedInSpatialStructure\" nillable=\"true\" type=\"ifc:IfcRelContainedInSpatialStructure\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelContainedInSpatialStructure\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProduct\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingStructure\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelCoversBldgElements\" nillable=\"true\" type=\"ifc:IfcRelCoversBldgElements\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelCoversBldgElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCovering\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelCoversSpaces\" nillable=\"true\" type=\"ifc:IfcRelCoversSpaces\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelCoversSpaces\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedSpace\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpace\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCovering\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelationship\" name=\"IfcRelDecomposes\" nillable=\"true\" type=\"ifc:IfcRelDecomposes\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelDecomposes\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingObject\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcObjectDefinition\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelationship\" name=\"IfcRelDefines\" nillable=\"true\" type=\"ifc:IfcRelDefines\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelDefines\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcObject\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelDefines\" name=\"IfcRelDefinesByProperties\" nillable=\"true\" type=\"ifc:IfcRelDefinesByProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelDefinesByProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingPropertyDefinition\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelDefines\" name=\"IfcRelDefinesByType\" nillable=\"true\" type=\"ifc:IfcRelDefinesByType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelDefinesByType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingType\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTypeObject\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelFillsElement\" nillable=\"true\" type=\"ifc:IfcRelFillsElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelFillsElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingOpeningElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOpeningElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelFlowControlElements\" nillable=\"true\" type=\"ifc:IfcRelFlowControlElements\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelFlowControlElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedControlElements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionControlElement\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDistributionControlElement\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingFlowElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelInteractionRequirements\" nillable=\"true\" type=\"ifc:IfcRelInteractionRequirements\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelInteractionRequirements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DailyInteraction\" minOccurs=\"0\" type=\"ifc:IfcCountMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ImportanceRating\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LocationOfInteraction\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedSpaceProgram\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpaceProgram\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingSpaceProgram\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpaceProgram\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelDecomposes\" name=\"IfcRelNests\" nillable=\"true\" type=\"ifc:IfcRelNests\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelNests\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssignsToActor\" name=\"IfcRelOccupiesSpaces\" nillable=\"true\" type=\"ifc:IfcRelOccupiesSpaces\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelOccupiesSpaces\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToActor\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelDefinesByProperties\" name=\"IfcRelOverridesProperties\" nillable=\"true\" type=\"ifc:IfcRelOverridesProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelOverridesProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDefinesByProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverridingProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelProjectsElement\" nillable=\"true\" type=\"ifc:IfcRelProjectsElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelProjectsElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedFeatureElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFeatureElementAddition\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelReferencedInSpatialStructure\" nillable=\"true\" type=\"ifc:IfcRelReferencedInSpatialStructure\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelReferencedInSpatialStructure\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProduct\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingStructure\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssignsToControl\" name=\"IfcRelSchedulesCostItems\" nillable=\"true\" type=\"ifc:IfcRelSchedulesCostItems\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelSchedulesCostItems\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToControl\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelSequence\" nillable=\"true\" type=\"ifc:IfcRelSequence\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelSequence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProcess\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedProcess\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProcess\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeLag\" type=\"ifc:IfcTimeMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SequenceType\" type=\"ifc:IfcSequenceEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelServicesBuildings\" nillable=\"true\" type=\"ifc:IfcRelServicesBuildings\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelServicesBuildings\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingSystem\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSystem\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedBuildings\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelSpaceBoundary\" nillable=\"true\" type=\"ifc:IfcRelSpaceBoundary\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelSpaceBoundary\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingSpace\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpace\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"RelatedBuildingElement\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ConnectionGeometry\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PhysicalOrVirtualBoundary\" type=\"ifc:IfcPhysicalOrVirtualEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InternalOrExternalBoundary\" type=\"ifc:IfcInternalOrExternalEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelVoidsElement\" nillable=\"true\" type=\"ifc:IfcRelVoidsElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelVoidsElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedOpeningElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFeatureElementSubtraction\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRoot\" name=\"IfcRelationship\" nillable=\"true\" type=\"ifc:IfcRelationship\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelationship\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcRelaxation\" nillable=\"true\" type=\"ifc:IfcRelaxation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelaxation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelaxationValue\" type=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InitialStress\" type=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcRepresentation\" nillable=\"true\" type=\"ifc:IfcRepresentation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ContextOfItems\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RepresentationIdentifier\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RepresentationType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Items\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentationItem\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcRepresentationContext\" nillable=\"true\" type=\"ifc:IfcRepresentationContext\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRepresentationContext\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ContextIdentifier\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ContextType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcRepresentationItem\" nillable=\"true\" type=\"ifc:IfcRepresentationItem\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRepresentationItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcRepresentationMap\" nillable=\"true\" type=\"ifc:IfcRepresentationMap\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRepresentationMap\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MappingOrigin\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MappedRepresentation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcResource\" nillable=\"true\" type=\"ifc:IfcResource\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcResource\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSweptAreaSolid\" name=\"IfcRevolvedAreaSolid\" nillable=\"true\" type=\"ifc:IfcRevolvedAreaSolid\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRevolvedAreaSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Axis\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis1Placement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Angle\" type=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProfileProperties\" name=\"IfcRibPlateProfileProperties\" nillable=\"true\" type=\"ifc:IfcRibPlateProfileProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRibPlateProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Thickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RibHeight\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RibWidth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RibSpacing\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Direction\" type=\"ifc:IfcRibPlateDirectionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCsgPrimitive3D\" name=\"IfcRightCircularCone\" nillable=\"true\" type=\"ifc:IfcRightCircularCone\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRightCircularCone\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BottomRadius\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCsgPrimitive3D\" name=\"IfcRightCircularCylinder\" nillable=\"true\" type=\"ifc:IfcRightCircularCylinder\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRightCircularCylinder\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcRoof\" nillable=\"true\" type=\"ifc:IfcRoof\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRoof\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShapeType\" type=\"ifc:IfcRoofTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcRoot\" nillable=\"true\" type=\"ifc:IfcRoot\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRoot\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"GlobalId\" type=\"ifc:IfcGloballyUniqueId\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OwnerHistory\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOwnerHistory\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEdgeFeature\" name=\"IfcRoundedEdgeFeature\" nillable=\"true\" type=\"ifc:IfcRoundedEdgeFeature\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRoundedEdgeFeature\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEdgeFeature\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Radius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRectangleProfileDef\" name=\"IfcRoundedRectangleProfileDef\" nillable=\"true\" type=\"ifc:IfcRoundedRectangleProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRoundedRectangleProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RoundingRadius\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:complexType name=\"IfcSIUnit-temp\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:restriction base=\"ifc:IfcNamedUnit\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UnitType\" type=\"ifc:IfcUnitEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:restriction>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element substitutionGroup=\"ifc:IfcNamedUnit\" name=\"IfcSIUnit\" nillable=\"true\" type=\"ifc:IfcSIUnit\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSIUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSIUnit-temp\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Prefix\" minOccurs=\"0\" type=\"ifc:IfcSIPrefix\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcSIUnitName\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcSanitaryTerminalType\" nillable=\"true\" type=\"ifc:IfcSanitaryTerminalType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSanitaryTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcScheduleTimeControl\" nillable=\"true\" type=\"ifc:IfcScheduleTimeControl\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcScheduleTimeControl\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ActualStart\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EarlyStart\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LateStart\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ScheduleStart\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ActualFinish\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EarlyFinish\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LateFinish\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ScheduleFinish\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ScheduleDuration\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ActualDuration\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RemainingTime\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FreeFloat\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TotalFloat\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IsCritical\" minOccurs=\"0\" type=\"xs:boolean\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"StatusTime\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartFloat\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FinishFloat\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Completion\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSectionProperties\" nillable=\"true\" type=\"ifc:IfcSectionProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSectionProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SectionType\" type=\"ifc:IfcSectionTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartProfile\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EndProfile\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSectionReinforcementProperties\" nillable=\"true\" type=\"ifc:IfcSectionReinforcementProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSectionReinforcementProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalStartPosition\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalEndPosition\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransversePosition\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReinforcementRole\" type=\"ifc:IfcReinforcingBarRoleEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SectionDefinition\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionProperties\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionReinforcementDefinitions\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReinforcementBarProperties\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcReinforcementBarProperties\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcSectionedSpine\" nillable=\"true\" type=\"ifc:IfcSectionedSpine\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSectionedSpine\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SpineCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCompositeCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CrossSections\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" maxOccurs=\"unbounded\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProfileDef\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionPositions\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\" maxOccurs=\"unbounded\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionControlElementType\" name=\"IfcSensorType\" nillable=\"true\" type=\"ifc:IfcSensorType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSensorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcServiceLife\" nillable=\"true\" type=\"ifc:IfcServiceLife\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcServiceLife\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ServiceLifeType\" type=\"ifc:IfcServiceLifeTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ServiceLifeDuration\" type=\"ifc:IfcTimeMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcServiceLifeFactor\" nillable=\"true\" type=\"ifc:IfcServiceLifeFactor\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcServiceLifeFactor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcServiceLifeFactorTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"UpperValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MostUsedValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LowerValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcShapeAspect\" nillable=\"true\" type=\"ifc:IfcShapeAspect\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcShapeAspect\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShapeRepresentations\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeModel\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcShapeModel\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ProductDefinitional\" type=\"ex:logical\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PartOfProductDefinitionShape\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProductDefinitionShape\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentation\" name=\"IfcShapeModel\" nillable=\"true\" type=\"ifc:IfcShapeModel\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcShapeModel\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcShapeModel\" name=\"IfcShapeRepresentation\" nillable=\"true\" type=\"ifc:IfcShapeRepresentation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcShapeRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcShellBasedSurfaceModel\" nillable=\"true\" type=\"ifc:IfcShellBasedSurfaceModel\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcShellBasedSurfaceModel\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SbsmBoundary\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcShell\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcShell\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProperty\" name=\"IfcSimpleProperty\" nillable=\"true\" type=\"ifc:IfcSimpleProperty\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSimpleProperty\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProperty\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSpatialStructureElement\" name=\"IfcSite\" nillable=\"true\" type=\"ifc:IfcSite\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSite\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RefLatitude\" minOccurs=\"0\" type=\"ifc:IfcCompoundPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RefLongitude\" minOccurs=\"0\" type=\"ifc:IfcCompoundPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RefElevation\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LandTitleNumber\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SiteAddress\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPostalAddress\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcSlab\" nillable=\"true\" type=\"ifc:IfcSlab\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSlab\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" minOccurs=\"0\" type=\"ifc:IfcSlabTypeEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcSlabType\" nillable=\"true\" type=\"ifc:IfcSlabType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSlabType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" name=\"IfcSlippageConnectionCondition\" nillable=\"true\" type=\"ifc:IfcSlippageConnectionCondition\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSlippageConnectionCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SlippageX\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SlippageY\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SlippageZ\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcSolidModel\" nillable=\"true\" type=\"ifc:IfcSolidModel\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSolidModel\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcSoundProperties\" nillable=\"true\" type=\"ifc:IfcSoundProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSoundProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"IsAttenuating\" type=\"ifc:IfcBoolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SoundScale\" minOccurs=\"0\" type=\"ifc:IfcSoundScaleEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SoundValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSoundValue\" maxOccurs=\"8\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSoundValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcSoundValue\" nillable=\"true\" type=\"ifc:IfcSoundValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSoundValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SoundLevelTimeSeries\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Frequency\" type=\"ifc:IfcFrequencyMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SoundLevelSingleValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDerivedMeasureValue\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSpatialStructureElement\" name=\"IfcSpace\" nillable=\"true\" type=\"ifc:IfcSpace\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSpace\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"InteriorOrExteriorSpace\" type=\"ifc:IfcInternalOrExternalEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ElevationWithFlooring\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcSpaceHeaterType\" nillable=\"true\" type=\"ifc:IfcSpaceHeaterType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSpaceHeaterType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcSpaceProgram\" nillable=\"true\" type=\"ifc:IfcSpaceProgram\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSpaceProgram\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SpaceProgramIdentifier\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MaxRequiredArea\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MinRequiredArea\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"RequestedLocation\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StandardRequiredArea\" type=\"ifc:IfcAreaMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcSpaceThermalLoadProperties\" nillable=\"true\" type=\"ifc:IfcSpaceThermalLoadProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSpaceThermalLoadProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApplicableValueRatio\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThermalLoadSource\" type=\"ifc:IfcThermalLoadSourceEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PropertySource\" type=\"ifc:IfcPropertySourceEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SourceDescription\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MaximumValue\" type=\"ifc:IfcPowerMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MinimumValue\" minOccurs=\"0\" type=\"ifc:IfcPowerMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ThermalLoadTimeSeriesValues\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedThermalLoadSource\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedPropertySource\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThermalLoadType\" type=\"ifc:IfcThermalLoadTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSpatialStructureElementType\" name=\"IfcSpaceType\" nillable=\"true\" type=\"ifc:IfcSpaceType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSpaceType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSpaceTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcSpatialStructureElement\" nillable=\"true\" type=\"ifc:IfcSpatialStructureElement\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSpatialStructureElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LongName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CompositionType\" type=\"ifc:IfcElementCompositionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementType\" name=\"IfcSpatialStructureElementType\" nillable=\"true\" type=\"ifc:IfcSpatialStructureElementType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSpatialStructureElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCsgPrimitive3D\" name=\"IfcSphere\" nillable=\"true\" type=\"ifc:IfcSphere\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSphere\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcStackTerminalType\" nillable=\"true\" type=\"ifc:IfcStackTerminalType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStackTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcStair\" nillable=\"true\" type=\"ifc:IfcStair\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStair\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShapeType\" type=\"ifc:IfcStairTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcStairFlight\" nillable=\"true\" type=\"ifc:IfcStairFlight\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStairFlight\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NumberOfRiser\" minOccurs=\"0\" type=\"xs:long\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"NumberOfTreads\" minOccurs=\"0\" type=\"xs:long\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RiserHeight\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TreadLength\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcStairFlightType\" nillable=\"true\" type=\"ifc:IfcStairFlightType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStairFlightType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralActivity\" name=\"IfcStructuralAction\" nillable=\"true\" type=\"ifc:IfcStructuralAction\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralAction\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DestabilizingLoad\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CausedBy\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralReaction\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcStructuralActivity\" nillable=\"true\" type=\"ifc:IfcStructuralActivity\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralActivity\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AppliedLoad\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoad\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"GlobalOrLocal\" type=\"ifc:IfcGlobalOrLocalEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSystem\" name=\"IfcStructuralAnalysisModel\" nillable=\"true\" type=\"ifc:IfcStructuralAnalysisModel\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralAnalysisModel\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAnalysisModelTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"OrientationOf2DPlane\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LoadedBy\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralLoadGroup\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HasResults\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralResultGroup\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralResultGroup\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralItem\" name=\"IfcStructuralConnection\" nillable=\"true\" type=\"ifc:IfcStructuralConnection\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralConnection\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"AppliedCondition\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCondition\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcStructuralConnectionCondition\" nillable=\"true\" type=\"ifc:IfcStructuralConnectionCondition\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralConnectionCondition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralConnection\" name=\"IfcStructuralCurveConnection\" nillable=\"true\" type=\"ifc:IfcStructuralCurveConnection\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralCurveConnection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralMember\" name=\"IfcStructuralCurveMember\" nillable=\"true\" type=\"ifc:IfcStructuralCurveMember\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralCurveMember\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralCurveMember\" name=\"IfcStructuralCurveMemberVarying\" nillable=\"true\" type=\"ifc:IfcStructuralCurveMemberVarying\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralCurveMemberVarying\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveMember\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcStructuralItem\" nillable=\"true\" type=\"ifc:IfcStructuralItem\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralAction\" name=\"IfcStructuralLinearAction\" nillable=\"true\" type=\"ifc:IfcStructuralLinearAction\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLinearAction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLinearAction\" name=\"IfcStructuralLinearActionVarying\" nillable=\"true\" type=\"ifc:IfcStructuralLinearActionVarying\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLinearActionVarying\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLinearAction\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VaryingAppliedLoadLocation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SubsequentAppliedLoads\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoad\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralLoad\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcStructuralLoad\" nillable=\"true\" type=\"ifc:IfcStructuralLoad\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoad\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcStructuralLoadGroup\" nillable=\"true\" type=\"ifc:IfcStructuralLoadGroup\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoadGroup\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcLoadGroupTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ActionType\" type=\"ifc:IfcActionTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ActionSource\" type=\"ifc:IfcActionSourceTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Coefficient\" minOccurs=\"0\" type=\"ifc:IfcRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Purpose\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadStatic\" name=\"IfcStructuralLoadLinearForce\" nillable=\"true\" type=\"ifc:IfcStructuralLoadLinearForce\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoadLinearForce\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LinearForceX\" minOccurs=\"0\" type=\"ifc:IfcLinearForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearForceY\" minOccurs=\"0\" type=\"ifc:IfcLinearForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearForceZ\" minOccurs=\"0\" type=\"ifc:IfcLinearForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearMomentX\" minOccurs=\"0\" type=\"ifc:IfcLinearMomentMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearMomentY\" minOccurs=\"0\" type=\"ifc:IfcLinearMomentMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearMomentZ\" minOccurs=\"0\" type=\"ifc:IfcLinearMomentMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadStatic\" name=\"IfcStructuralLoadPlanarForce\" nillable=\"true\" type=\"ifc:IfcStructuralLoadPlanarForce\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoadPlanarForce\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PlanarForceX\" minOccurs=\"0\" type=\"ifc:IfcPlanarForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PlanarForceY\" minOccurs=\"0\" type=\"ifc:IfcPlanarForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PlanarForceZ\" minOccurs=\"0\" type=\"ifc:IfcPlanarForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadStatic\" name=\"IfcStructuralLoadSingleDisplacement\" nillable=\"true\" type=\"ifc:IfcStructuralLoadSingleDisplacement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DisplacementX\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DisplacementY\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DisplacementZ\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RotationalDisplacementRX\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RotationalDisplacementRY\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RotationalDisplacementRZ\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadSingleDisplacement\" name=\"IfcStructuralLoadSingleDisplacementDistortion\" nillable=\"true\" type=\"ifc:IfcStructuralLoadSingleDisplacementDistortion\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacementDistortion\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleDisplacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Distortion\" minOccurs=\"0\" type=\"ifc:IfcCurvatureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadStatic\" name=\"IfcStructuralLoadSingleForce\" nillable=\"true\" type=\"ifc:IfcStructuralLoadSingleForce\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoadSingleForce\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ForceX\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ForceY\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ForceZ\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MomentX\" minOccurs=\"0\" type=\"ifc:IfcTorqueMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MomentY\" minOccurs=\"0\" type=\"ifc:IfcTorqueMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MomentZ\" minOccurs=\"0\" type=\"ifc:IfcTorqueMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadSingleForce\" name=\"IfcStructuralLoadSingleForceWarping\" nillable=\"true\" type=\"ifc:IfcStructuralLoadSingleForceWarping\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoadSingleForceWarping\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleForce\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WarpingMoment\" minOccurs=\"0\" type=\"ifc:IfcWarpingMomentMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoad\" name=\"IfcStructuralLoadStatic\" nillable=\"true\" type=\"ifc:IfcStructuralLoadStatic\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoadStatic\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadStatic\" name=\"IfcStructuralLoadTemperature\" nillable=\"true\" type=\"ifc:IfcStructuralLoadTemperature\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoadTemperature\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DeltaT_Constant\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DeltaT_Y\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DeltaT_Z\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralItem\" name=\"IfcStructuralMember\" nillable=\"true\" type=\"ifc:IfcStructuralMember\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralMember\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralAction\" name=\"IfcStructuralPlanarAction\" nillable=\"true\" type=\"ifc:IfcStructuralPlanarAction\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralPlanarAction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralPlanarAction\" name=\"IfcStructuralPlanarActionVarying\" nillable=\"true\" type=\"ifc:IfcStructuralPlanarActionVarying\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralPlanarActionVarying\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralPlanarAction\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VaryingAppliedLoadLocation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SubsequentAppliedLoads\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoad\" maxOccurs=\"unbounded\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralLoad\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralAction\" name=\"IfcStructuralPointAction\" nillable=\"true\" type=\"ifc:IfcStructuralPointAction\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralPointAction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralConnection\" name=\"IfcStructuralPointConnection\" nillable=\"true\" type=\"ifc:IfcStructuralPointConnection\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralPointConnection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralReaction\" name=\"IfcStructuralPointReaction\" nillable=\"true\" type=\"ifc:IfcStructuralPointReaction\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralPointReaction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeneralProfileProperties\" name=\"IfcStructuralProfileProperties\" nillable=\"true\" type=\"ifc:IfcStructuralProfileProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeneralProfileProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TorsionalConstantX\" minOccurs=\"0\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MomentOfInertiaYZ\" minOccurs=\"0\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MomentOfInertiaY\" minOccurs=\"0\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MomentOfInertiaZ\" minOccurs=\"0\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WarpingConstant\" minOccurs=\"0\" type=\"ifc:IfcWarpingConstantMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ShearCentreZ\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ShearCentreY\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ShearDeformationAreaZ\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ShearDeformationAreaY\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MaximumSectionModulusY\" minOccurs=\"0\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MinimumSectionModulusY\" minOccurs=\"0\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MaximumSectionModulusZ\" minOccurs=\"0\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MinimumSectionModulusZ\" minOccurs=\"0\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TorsionalSectionModulus\" minOccurs=\"0\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralActivity\" name=\"IfcStructuralReaction\" nillable=\"true\" type=\"ifc:IfcStructuralReaction\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralReaction\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcStructuralResultGroup\" nillable=\"true\" type=\"ifc:IfcStructuralResultGroup\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralResultGroup\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TheoryType\" type=\"ifc:IfcAnalysisTheoryTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ResultForLoadGroup\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IsLinear\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralProfileProperties\" name=\"IfcStructuralSteelProfileProperties\" nillable=\"true\" type=\"ifc:IfcStructuralSteelProfileProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralSteelProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralProfileProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShearAreaZ\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ShearAreaY\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PlasticShapeFactorY\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PlasticShapeFactorZ\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralConnection\" name=\"IfcStructuralSurfaceConnection\" nillable=\"true\" type=\"ifc:IfcStructuralSurfaceConnection\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralSurfaceConnection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralMember\" name=\"IfcStructuralSurfaceMember\" nillable=\"true\" type=\"ifc:IfcStructuralSurfaceMember\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralSurfaceMember\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Thickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralSurfaceMember\" name=\"IfcStructuralSurfaceMemberVarying\" nillable=\"true\" type=\"ifc:IfcStructuralSurfaceMemberVarying\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralSurfaceMemberVarying\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceMember\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SubsequentThickness\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\" maxOccurs=\"unbounded\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VaryingThicknessLocation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDraughtingCallout\" name=\"IfcStructuredDimensionCallout\" nillable=\"true\" type=\"ifc:IfcStructuredDimensionCallout\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuredDimensionCallout\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCallout\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentation\" name=\"IfcStyleModel\" nillable=\"true\" type=\"ifc:IfcStyleModel\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStyleModel\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentationItem\" name=\"IfcStyledItem\" nillable=\"true\" type=\"ifc:IfcStyledItem\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStyledItem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Item\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Styles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPresentationStyleAssignment\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPresentationStyleAssignment\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStyleModel\" name=\"IfcStyledRepresentation\" nillable=\"true\" type=\"ifc:IfcStyledRepresentation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStyledRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStyleModel\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConstructionResource\" name=\"IfcSubContractResource\" nillable=\"true\" type=\"ifc:IfcSubContractResource\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSubContractResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SubContractor\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"JobDescription\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEdge\" name=\"IfcSubedge\" nillable=\"true\" type=\"ifc:IfcSubedge\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSubedge\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ParentEdge\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcEdge\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcSurface\" nillable=\"true\" type=\"ifc:IfcSurface\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurface\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSweptAreaSolid\" name=\"IfcSurfaceCurveSweptAreaSolid\" nillable=\"true\" type=\"ifc:IfcSurfaceCurveSweptAreaSolid\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceCurveSweptAreaSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Directrix\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartParam\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EndParam\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReferenceSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSweptSurface\" name=\"IfcSurfaceOfLinearExtrusion\" nillable=\"true\" type=\"ifc:IfcSurfaceOfLinearExtrusion\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceOfLinearExtrusion\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSweptSurface\" name=\"IfcSurfaceOfRevolution\" nillable=\"true\" type=\"ifc:IfcSurfaceOfRevolution\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceOfRevolution\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AxisPosition\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis1Placement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPresentationStyle\" name=\"IfcSurfaceStyle\" nillable=\"true\" type=\"ifc:IfcSurfaceStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Side\" type=\"ifc:IfcSurfaceSide\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Styles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\" maxOccurs=\"5\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSurfaceStyleElementSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSurfaceStyleLighting\" nillable=\"true\" type=\"ifc:IfcSurfaceStyleLighting\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceStyleLighting\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DiffuseReflectionColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransmissionColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReflectanceColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSurfaceStyleRefraction\" nillable=\"true\" type=\"ifc:IfcSurfaceStyleRefraction\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceStyleRefraction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RefractionIndex\" minOccurs=\"0\" type=\"ifc:IfcReal\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DispersionFactor\" minOccurs=\"0\" type=\"ifc:IfcReal\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSurfaceStyleShading\" name=\"IfcSurfaceStyleRendering\" nillable=\"true\" type=\"ifc:IfcSurfaceStyleRendering\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceStyleRendering\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceStyleShading\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Transparency\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"DiffuseColour\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TransmissionColour\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"DiffuseTransmissionColour\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ReflectionColour\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SpecularColour\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SpecularHighlight\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReflectanceMethod\" type=\"ifc:IfcReflectanceMethodEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSurfaceStyleShading\" nillable=\"true\" type=\"ifc:IfcSurfaceStyleShading\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceStyleShading\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SurfaceColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSurfaceStyleWithTextures\" nillable=\"true\" type=\"ifc:IfcSurfaceStyleWithTextures\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceStyleWithTextures\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Textures\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSurfaceTexture\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSurfaceTexture\" nillable=\"true\" type=\"ifc:IfcSurfaceTexture\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceTexture\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RepeatS\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RepeatT\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TextureType\" type=\"ifc:IfcSurfaceTextureEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TextureTransform\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator2D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSolidModel\" name=\"IfcSweptAreaSolid\" nillable=\"true\" type=\"ifc:IfcSweptAreaSolid\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSweptAreaSolid\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SweptArea\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSolidModel\" name=\"IfcSweptDiskSolid\" nillable=\"true\" type=\"ifc:IfcSweptDiskSolid\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSweptDiskSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Directrix\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InnerRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartParam\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EndParam\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSurface\" name=\"IfcSweptSurface\" nillable=\"true\" type=\"ifc:IfcSweptSurface\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSweptSurface\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SweptCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcSwitchingDeviceType\" nillable=\"true\" type=\"ifc:IfcSwitchingDeviceType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSwitchingDeviceType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPresentationStyle\" name=\"IfcSymbolStyle\" nillable=\"true\" type=\"ifc:IfcSymbolStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSymbolStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"StyleOfSymbol\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSymbolStyleSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcSystem\" nillable=\"true\" type=\"ifc:IfcSystem\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSystem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFurnishingElementType\" name=\"IfcSystemFurnitureElementType\" nillable=\"true\" type=\"ifc:IfcSystemFurnitureElementType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSystemFurnitureElementType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcTShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcTShapeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeEdgeRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WebEdgeRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WebSlope\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeSlope\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTable\" nillable=\"true\" type=\"ifc:IfcTable\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTable\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"xs:normalizedString\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Rows\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableRow\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTableRow\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTableRow\" nillable=\"true\" type=\"ifc:IfcTableRow\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTableRow\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RowCells\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IsHeading\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" name=\"IfcTankType\" nillable=\"true\" type=\"ifc:IfcTankType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTankType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProcess\" name=\"IfcTask\" nillable=\"true\" type=\"ifc:IfcTask\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTask\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TaskId\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Status\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WorkMethod\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IsMilestone\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Priority\" minOccurs=\"0\" type=\"xs:long\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAddress\" name=\"IfcTelecomAddress\" nillable=\"true\" type=\"ifc:IfcTelecomAddress\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTelecomAddress\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TelephoneNumbers\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FacsimileNumbers\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PagerNumber\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ElectronicMailAddresses\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WWWHomePageURL\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcReinforcingElement\" name=\"IfcTendon\" nillable=\"true\" type=\"ifc:IfcTendon\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTendon\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TensionForce\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PreStress\" minOccurs=\"0\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FrictionCoefficient\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AnchorageSlip\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MinCurvatureRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcReinforcingElement\" name=\"IfcTendonAnchor\" nillable=\"true\" type=\"ifc:IfcTendonAnchor\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTendonAnchor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationSymbolOccurrence\" name=\"IfcTerminatorSymbol\" nillable=\"true\" type=\"ifc:IfcTerminatorSymbol\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTerminatorSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationSymbolOccurrence\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AnnotatedCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAnnotationCurveOccurrence\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcTextLiteral\" nillable=\"true\" type=\"ifc:IfcTextLiteral\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextLiteral\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Literal\" type=\"ifc:IfcPresentableText\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Placement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Path\" type=\"ifc:IfcTextPath\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTextLiteral\" name=\"IfcTextLiteralWithExtent\" nillable=\"true\" type=\"ifc:IfcTextLiteralWithExtent\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextLiteralWithExtent\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTextLiteral\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Extent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPlanarExtent\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BoxAlignment\" type=\"ifc:IfcBoxAlignment\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPresentationStyle\" name=\"IfcTextStyle\" nillable=\"true\" type=\"ifc:IfcTextStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TextCharacterAppearance\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCharacterStyleSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TextStyle\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTextStyleSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TextFontStyle\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTextFontSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedTextFont\" name=\"IfcTextStyleFontModel\" nillable=\"true\" type=\"ifc:IfcTextStyleFontModel\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextStyleFontModel\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedTextFont\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FontFamily\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextFontName\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTextFontName\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FontStyle\" minOccurs=\"0\" type=\"ifc:IfcFontStyle\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FontVariant\" minOccurs=\"0\" type=\"ifc:IfcFontVariant\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FontWeight\" minOccurs=\"0\" type=\"ifc:IfcFontWeight\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FontSize\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTextStyleForDefinedFont\" nillable=\"true\" type=\"ifc:IfcTextStyleForDefinedFont\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextStyleForDefinedFont\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Colour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"BackgroundColour\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTextStyleTextModel\" nillable=\"true\" type=\"ifc:IfcTextStyleTextModel\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextStyleTextModel\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TextIndent\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TextAlign\" minOccurs=\"0\" type=\"ifc:IfcTextAlignment\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TextDecoration\" minOccurs=\"0\" type=\"ifc:IfcTextDecoration\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LetterSpacing\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"WordSpacing\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TextTransform\" minOccurs=\"0\" type=\"ifc:IfcTextTransformation\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LineHeight\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTextStyleWithBoxCharacteristics\" nillable=\"true\" type=\"ifc:IfcTextStyleWithBoxCharacteristics\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextStyleWithBoxCharacteristics\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BoxHeight\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BoxWidth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BoxSlantAngle\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BoxRotateAngle\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CharacterSpacing\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTextureCoordinate\" nillable=\"true\" type=\"ifc:IfcTextureCoordinate\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextureCoordinate\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTextureCoordinate\" name=\"IfcTextureCoordinateGenerator\" nillable=\"true\" type=\"ifc:IfcTextureCoordinateGenerator\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextureCoordinateGenerator\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Mode\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Parameter\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSimpleValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSimpleValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTextureCoordinate\" name=\"IfcTextureMap\" nillable=\"true\" type=\"ifc:IfcTextureMap\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextureMap\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TextureMaps\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertexBasedTextureMap\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcVertexBasedTextureMap\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTextureVertex\" nillable=\"true\" type=\"ifc:IfcTextureVertex\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextureVertex\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Coordinates\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcParameterValue\" maxOccurs=\"2\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcThermalMaterialProperties\" nillable=\"true\" type=\"ifc:IfcThermalMaterialProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcThermalMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SpecificHeatCapacity\" minOccurs=\"0\" type=\"ifc:IfcSpecificHeatCapacityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BoilingPoint\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FreezingPoint\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThermalConductivity\" minOccurs=\"0\" type=\"ifc:IfcThermalConductivityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTimeSeries\" nillable=\"true\" type=\"ifc:IfcTimeSeries\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTimeSeries\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EndTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeSeriesDataType\" type=\"ifc:IfcTimeSeriesDataTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedDataOrigin\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Unit\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTimeSeriesReferenceRelationship\" nillable=\"true\" type=\"ifc:IfcTimeSeriesReferenceRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTimeSeriesReferenceRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ReferencedTimeSeries\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeSeriesReferences\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDocumentSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcTimeSeriesSchedule\" nillable=\"true\" type=\"ifc:IfcTimeSeriesSchedule\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTimeSeriesSchedule\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApplicableDates\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeSeriesScheduleType\" type=\"ifc:IfcTimeSeriesScheduleTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeSeries\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTimeSeriesValue\" nillable=\"true\" type=\"ifc:IfcTimeSeriesValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTimeSeriesValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ListValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentationItem\" name=\"IfcTopologicalRepresentationItem\" nillable=\"true\" type=\"ifc:IfcTopologicalRepresentationItem\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTopologicalRepresentationItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcShapeModel\" name=\"IfcTopologyRepresentation\" nillable=\"true\" type=\"ifc:IfcTopologyRepresentation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTopologyRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcTransformerType\" nillable=\"true\" type=\"ifc:IfcTransformerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTransformerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcTransportElement\" nillable=\"true\" type=\"ifc:IfcTransportElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTransportElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" minOccurs=\"0\" type=\"ifc:IfcTransportElementTypeEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CapacityByWeight\" minOccurs=\"0\" type=\"ifc:IfcMassMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CapacityByNumber\" minOccurs=\"0\" type=\"ifc:IfcCountMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementType\" name=\"IfcTransportElementType\" nillable=\"true\" type=\"ifc:IfcTransportElementType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTransportElementType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcTrapeziumProfileDef\" nillable=\"true\" type=\"ifc:IfcTrapeziumProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTrapeziumProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BottomXDim\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TopXDim\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TopXOffset\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundedCurve\" name=\"IfcTrimmedCurve\" nillable=\"true\" type=\"ifc:IfcTrimmedCurve\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTrimmedCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Trim1\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTrimmingSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Trim2\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTrimmingSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SenseAgreement\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MasterRepresentation\" type=\"ifc:IfcTrimmingPreference\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcTubeBundleType\" nillable=\"true\" type=\"ifc:IfcTubeBundleType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTubeBundleType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcOneDirectionRepeatFactor\" name=\"IfcTwoDirectionRepeatFactor\" nillable=\"true\" type=\"ifc:IfcTwoDirectionRepeatFactor\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTwoDirectionRepeatFactor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcOneDirectionRepeatFactor\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SecondRepeatFactor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObjectDefinition\" name=\"IfcTypeObject\" nillable=\"true\" type=\"ifc:IfcTypeObject\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTypeObject\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApplicableOccurrence\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HasPropertySets\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTypeObject\" name=\"IfcTypeProduct\" nillable=\"true\" type=\"ifc:IfcTypeProduct\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTypeProduct\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RepresentationMaps\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentationMap\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Tag\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcUShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcUShapeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcUShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EdgeRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeSlope\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcUnitAssignment\" nillable=\"true\" type=\"ifc:IfcUnitAssignment\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcUnitAssignment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Units\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcUnit\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcUnitaryEquipmentType\" nillable=\"true\" type=\"ifc:IfcUnitaryEquipmentType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcUnitaryEquipmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcValveType\" nillable=\"true\" type=\"ifc:IfcValveType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcValveType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcVector\" nillable=\"true\" type=\"ifc:IfcVector\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcVector\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Orientation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Magnitude\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcVertex\" nillable=\"true\" type=\"ifc:IfcVertex\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcVertex\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcVertexBasedTextureMap\" nillable=\"true\" type=\"ifc:IfcVertexBasedTextureMap\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcVertexBasedTextureMap\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TextureVertices\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextureVertex\" maxOccurs=\"unbounded\" minOccurs=\"3\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTextureVertex\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TexturePoints\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" maxOccurs=\"unbounded\" minOccurs=\"3\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcLoop\" name=\"IfcVertexLoop\" nillable=\"true\" type=\"ifc:IfcVertexLoop\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcVertexLoop\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LoopVertex\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertex\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcVertex\" name=\"IfcVertexPoint\" nillable=\"true\" type=\"ifc:IfcVertexPoint\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcVertexPoint\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcVertex\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VertexGeometry\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPoint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDiscreteAccessoryType\" name=\"IfcVibrationIsolatorType\" nillable=\"true\" type=\"ifc:IfcVibrationIsolatorType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcVibrationIsolatorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDiscreteAccessoryType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcVirtualElement\" nillable=\"true\" type=\"ifc:IfcVirtualElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcVirtualElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcVirtualGridIntersection\" nillable=\"true\" type=\"ifc:IfcVirtualGridIntersection\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcVirtualGridIntersection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"IntersectingAxes\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"2\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OffsetDistances\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\" maxOccurs=\"3\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcWall\" nillable=\"true\" type=\"ifc:IfcWall\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWall\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcWall\" name=\"IfcWallStandardCase\" nillable=\"true\" type=\"ifc:IfcWallStandardCase\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWallStandardCase\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcWall\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcWallType\" nillable=\"true\" type=\"ifc:IfcWallType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWallType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcWasteTerminalType\" nillable=\"true\" type=\"ifc:IfcWasteTerminalType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWasteTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcWaterProperties\" nillable=\"true\" type=\"ifc:IfcWaterProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWaterProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"IsPotable\" minOccurs=\"0\" type=\"xs:boolean\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Hardness\" minOccurs=\"0\" type=\"ifc:IfcIonConcentrationMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AlkalinityConcentration\" minOccurs=\"0\" type=\"ifc:IfcIonConcentrationMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AcidityConcentration\" minOccurs=\"0\" type=\"ifc:IfcIonConcentrationMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ImpuritiesContent\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PHLevel\" minOccurs=\"0\" type=\"ifc:IfcPHMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DissolvedSolidsContent\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcWindow\" nillable=\"true\" type=\"ifc:IfcWindow\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWindow\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallHeight\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OverallWidth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcWindowLiningProperties\" nillable=\"true\" type=\"ifc:IfcWindowLiningProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWindowLiningProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LiningDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LiningThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransomThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MullionThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FirstTransomOffset\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SecondTransomOffset\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FirstMullionOffset\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SecondMullionOffset\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ShapeAspectStyle\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcWindowPanelProperties\" nillable=\"true\" type=\"ifc:IfcWindowPanelProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWindowPanelProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcWindowPanelOperationEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FrameDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FrameThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ShapeAspectStyle\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTypeProduct\" name=\"IfcWindowStyle\" nillable=\"true\" type=\"ifc:IfcWindowStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWindowStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ConstructionType\" type=\"ifc:IfcWindowStyleConstructionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcWindowStyleOperationEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ParameterTakesPrecedence\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Sizeable\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcWorkControl\" nillable=\"true\" type=\"ifc:IfcWorkControl\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWorkControl\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Identifier\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CreationDate\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Creators\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPerson\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Purpose\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Duration\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TotalFloat\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"FinishTime\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WorkControlType\" minOccurs=\"0\" type=\"ifc:IfcWorkControlTypeEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedControlType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcWorkControl\" name=\"IfcWorkPlan\" nillable=\"true\" type=\"ifc:IfcWorkPlan\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWorkPlan\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcWorkControl\" name=\"IfcWorkSchedule\" nillable=\"true\" type=\"ifc:IfcWorkSchedule\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWorkSchedule\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcZShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcZShapeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcZShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EdgeRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcZone\" nillable=\"true\" type=\"ifc:IfcZone\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcZone\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\r\n\r\n<!-- group declarations (for SELECT data type definitions) -->\r\n\r\n\t<xs:complexType name=\"IfcActorSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcActorSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPerson\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcAppliedValueSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcAppliedValueSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcAxis2Placement\">\r\n\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcAxis2Placement\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcBooleanOperand\">\r\n\t\t<xs:group ref=\"ifc:IfcBooleanOperand\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcBooleanOperand\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcHalfSpaceSolid\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcCharacterStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcCharacterStyleSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCharacterStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcTextStyleForDefinedFont\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcClassificationNotationSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcClassificationNotationSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcClassificationNotation\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcColour\">\r\n\t\t<xs:group ref=\"ifc:IfcColour\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcColour\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcColourOrFactor\">\r\n\t\t<xs:group ref=\"ifc:IfcColourOrFactor\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcColourOrFactor\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcConditionCriterionSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcConditionCriterionSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcConditionCriterionSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcLabel\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcCsgSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcCsgSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCsgSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcCurveFontOrScaledCurveFontSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCurveFontOrScaledCurveFontSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontAndScaling\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcCurveOrEdgeCurve\">\r\n\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCurveOrEdgeCurve\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcEdgeCurve\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcCurveStyleFontSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCurveStyleFontSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcDateTimeSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDateTimeSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLocalTime\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcDefinedSymbolSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcDefinedSymbolSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDefinedSymbolSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedSymbol\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSymbol\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcDerivedMeasureValue\">\r\n\t\t<xs:group ref=\"ifc:IfcDerivedMeasureValue\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDerivedMeasureValue\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcDocumentSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcDocumentSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDocumentSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcDraughtingCalloutElement\">\r\n\t\t<xs:group ref=\"ifc:IfcDraughtingCalloutElement\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDraughtingCalloutElement\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcAnnotationCurveOccurrence\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAnnotationTextOccurrence\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAnnotationSymbolOccurrence\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcFillAreaStyleTileShapeSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcFillAreaStyleTileShapeSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcFillAreaStyleTileShapeSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTileSymbolWithStyle\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcFillStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcFillStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleHatching\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTiles\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedHatchStyle\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcGeometricSetSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcGeometricSetSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPoint\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurface\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcHatchLineDistanceSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcHatchLineDistanceSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcHatchLineDistanceSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcOneDirectionRepeatFactor\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcLayeredItem\">\r\n\t\t<xs:group ref=\"ifc:IfcLayeredItem\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcLayeredItem\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRepresentation\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcLibrarySelect\">\r\n\t\t<xs:group ref=\"ifc:IfcLibrarySelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcLibrarySelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcLightDistributionDataSourceSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcLightDistributionDataSourceSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLightIntensityDistribution\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcMaterialSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcMaterialSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcMaterialSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayerSetUsage\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayerSet\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcMeasureValue\">\r\n\t\t<xs:group ref=\"ifc:IfcMeasureValue\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcMeasureValue\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcMetricValueSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcMetricValueSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLocalTime\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTable\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcText\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcObjectReferenceSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcObjectReferenceSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPerson\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLocalTime\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAddress\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcOrientationSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcOrientationSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcOrientationSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcPointOrVertexPoint\">\r\n\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcPointOrVertexPoint\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPoint\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcVertexPoint\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcPresentationStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcPresentationStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcNullStyle\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyle\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSymbolStyle\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyle\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTextStyle\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyle\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcShell\">\r\n\t\t<xs:group ref=\"ifc:IfcShell\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcShell\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcOpenShell\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcSimpleValue\">\r\n\t\t<xs:group ref=\"ifc:IfcSimpleValue\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSimpleValue\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcInteger\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcReal\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcBoolean\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcText\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLabel\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLogical\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcSizeSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSizeSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcSpecularHighlightSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSpecularHighlightSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcSpecularExponent\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSpecularRoughness\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcStructuralActivityAssignmentSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcStructuralActivityAssignmentSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcStructuralItem\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcSurfaceOrFaceSurface\">\r\n\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSurfaceOrFaceSurface\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurface\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcFaceSurface\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcFaceBasedSurfaceModel\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcSurfaceStyleElementSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSurfaceStyleElementSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleShading\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleLighting\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleWithTextures\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSurfaceStyle\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleRefraction\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcSymbolStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcSymbolStyleSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSymbolStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcTextFontSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcTextFontSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcTextFontSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedTextFont\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedTextFont\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcTextStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcTextStyleSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcTextStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcTextStyleWithBoxCharacteristics\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTextStyleTextModel\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcTrimmingSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcTrimmingSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcUnit\">\r\n\t\t<xs:group ref=\"ifc:IfcUnit\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcUnit\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcDerivedUnit\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcValue\">\r\n\t\t<xs:group ref=\"ifc:IfcValue\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcValue\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcInteger\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcReal\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcBoolean\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcText\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLabel\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLogical\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcVectorOrDirection\">\r\n\t\t<xs:group ref=\"ifc:IfcVectorOrDirection\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcVectorOrDirection\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcVector\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\r\n\r\n<!-- enumeration type declarations (for ENUMERATION data type definitions) -->\r\n\r\n\t<xs:element name=\"IfcActionSourceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcActionSourceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcActionSourceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dead_load_g\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"completion_g1\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"live_load_q\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"snow_s\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"wind_w\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"prestressing_p\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"settlement_u\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"temperature_t\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"earthquake_e\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fire\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"impulse\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"impact\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"transport\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"erection\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"propping\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"system_imperfection\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shrinkage\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"creep\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lack_of_fit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"buoyancy\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ice\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"current\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"wave\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rain\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"brakes\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcActionTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcActionTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcActionTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"permanent_g\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"variable_q\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"extraordinary_a\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcActuatorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcActuatorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcActuatorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"electricactuator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"handoperatedactuator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"hydraulicactuator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pneumaticactuator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermostaticactuator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAddressTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAddressTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAddressTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"office\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"site\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"home\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"distributionpoint\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAheadOrBehind\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAheadOrBehind\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAheadOrBehind\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"ahead\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"behind\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAirTerminalBoxTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAirTerminalBoxTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAirTerminalBoxTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"constantflow\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"variableflowpressuredependant\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"variableflowpressureindependant\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAirTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAirTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAirTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"grille\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"register\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"diffuser\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"eyeball\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"iris\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lineargrille\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lineardiffuser\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAirToAirHeatRecoveryTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAirToAirHeatRecoveryTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"fixedplatecounterflowexchanger\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fixedplatecrossflowexchanger\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fixedplateparallelflowexchanger\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rotarywheel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"runaroundcoilloop\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"heatpipe\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"twintowerenthalpyrecoveryloops\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermosiphonsealedtubeheatexchangers\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermosiphoncoiltypeheatexchangers\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAlarmTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAlarmTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAlarmTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bell\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"breakglassbutton\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"light\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"manualpullbox\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"siren\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"whistle\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAnalysisModelTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAnalysisModelTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAnalysisModelTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"in_plane_loading_2d\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"out_plane_loading_2d\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"loading_3d\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAnalysisTheoryTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAnalysisTheoryTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAnalysisTheoryTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"first_order_theory\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"second_order_theory\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"third_order_theory\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"full_nonlinear_theory\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcArithmeticOperatorEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcArithmeticOperatorEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcArithmeticOperatorEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"add\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"divide\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"multiply\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"subtract\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAssemblyPlaceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAssemblyPlaceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAssemblyPlaceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"site\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"factory\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcBSplineCurveForm\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBSplineCurveForm\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcBSplineCurveForm\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"polyline_form\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"circular_arc\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"elliptic_arc\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"parabolic_arc\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"hyperbolic_arc\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"unspecified\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcBeamTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBeamTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcBeamTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"beam\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"joist\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lintel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"t_beam\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcBenchmarkEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBenchmarkEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcBenchmarkEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"greaterthan\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"greaterthanorequalto\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lessthan\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lessthanorequalto\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"equalto\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notequalto\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcBoilerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBoilerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcBoilerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"water\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"steam\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcBooleanOperator\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBooleanOperator\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcBooleanOperator\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"union\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"intersection\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"difference\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcBuildingElementProxyTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBuildingElementProxyTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcBuildingElementProxyTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCableCarrierFittingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCableCarrierFittingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCableCarrierFittingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bend\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cross\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"reducer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tee\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCableCarrierSegmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCableCarrierSegmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCableCarrierSegmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cableladdersegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cabletraysegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cabletrunkingsegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"conduitsegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCableSegmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCableSegmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCableSegmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cablesegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"conductorsegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcChangeActionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcChangeActionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcChangeActionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"nochange\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"modified\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"added\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"deleted\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"modifiedadded\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"modifieddeleted\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcChillerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcChillerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcChillerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"aircooled\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"watercooled\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"heatrecovery\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCoilTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCoilTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCoilTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dxcoolingcoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"watercoolingcoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"steamheatingcoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"waterheatingcoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electricheatingcoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gasheatingcoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcColumnTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcColumnTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcColumnTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"column\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCompressorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCompressorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCompressorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dynamic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"reciprocating\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rotary\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"scroll\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"trochoidal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"singlestage\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"booster\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"opentype\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"hermetic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"semihermetic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"weldedshellhermetic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rollingpiston\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rotaryvane\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"singlescrew\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"twinscrew\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCondenserTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCondenserTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCondenserTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"watercooledshelltube\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"watercooledshellcoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"watercooledtubeintube\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"watercooledbrazedplate\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"aircooled\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"evaporativecooled\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcConnectionTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcConnectionTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcConnectionTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"atpath\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"atstart\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"atend\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcConstraintEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcConstraintEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcConstraintEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"hard\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"soft\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"advisory\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcControllerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcControllerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcControllerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"floating\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"proportional\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"proportionalintegral\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"proportionalintegralderivative\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"timedtwoposition\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"twoposition\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCooledBeamTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCooledBeamTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCooledBeamTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"active\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"passive\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCoolingTowerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCoolingTowerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCoolingTowerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"naturaldraft\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mechanicalinduceddraft\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mechanicalforceddraft\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCostScheduleTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCostScheduleTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCostScheduleTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"budget\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"costplan\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"estimate\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tender\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pricedbillofquantities\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"unpricedbillofquantities\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"scheduleofrates\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCoveringTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCoveringTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCoveringTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"ceiling\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"flooring\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cladding\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"roofing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"insulation\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"membrane\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sleeving\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"wrapping\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCurrencyEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCurrencyEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCurrencyEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"aed\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"aes\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ats\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"aud\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bbd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"beg\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bgl\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bhd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bmd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bnd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"brl\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bsd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bwp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bzd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cad\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cbd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"chf\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"clp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cny\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cys\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"czk\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ddp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"dem\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"dkk\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"egl\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"est\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"eur\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fak\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fim\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fjd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fkp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"frf\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gbp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gip\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gmd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"grx\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"hkd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"huf\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ick\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"idr\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ils\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"inr\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"irp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"itl\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"jmd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"jod\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"jpy\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"kes\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"krw\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"kwd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"kyd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lkr\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"luf\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mtl\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mur\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mxn\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"myr\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"nlg\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"nzd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"omr\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pgk\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"php\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pkr\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pln\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ptn\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"qar\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rur\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sar\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"scr\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sek\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sgd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"skp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thb\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"trl\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ttd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"twd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"usd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"veb\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"vnd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"xeu\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"zar\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"zwd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"nok\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCurtainWallTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCurtainWallTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCurtainWallTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDamperTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDamperTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDamperTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"controldamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"firedamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"smokedamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"firesmokedamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"backdraftdamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"reliefdamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"blastdamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gravitydamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gravityreliefdamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"balancingdamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fumehoodexhaust\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDataOriginEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDataOriginEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDataOriginEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"measured\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"predicted\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"simulated\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDerivedUnitEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDerivedUnitEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDerivedUnitEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"angularvelocityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"compoundplaneangleunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"dynamicviscosityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"heatfluxdensityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"integercountrateunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"isothermalmoisturecapacityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"kinematicviscosityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"linearvelocityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"massdensityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"massflowrateunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"moisturediffusivityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"molecularweightunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"specificheatcapacityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermaladmittanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermalconductanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermalresistanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermaltransmittanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"vaporpermeabilityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"volumetricflowrateunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rotationalfrequencyunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"torqueunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"momentofinertiaunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"linearmomentunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"linearforceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"planarforceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"modulusofelasticityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shearmodulusunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"linearstiffnessunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rotationalstiffnessunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"modulusofsubgradereactionunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"accelerationunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"curvatureunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"heatingvalueunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ionconcentrationunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"luminousintensitydistributionunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"massperlengthunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"modulusoflinearsubgradereactionunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"modulusofrotationalsubgradereactionunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"phunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rotationalmassunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sectionareaintegralunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sectionmodulusunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"soundpowerunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"soundpressureunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"temperaturegradientunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermalexpansioncoefficientunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"warpingconstantunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"warpingmomentunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDimensionExtentUsage\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDimensionExtentUsage\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDimensionExtentUsage\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"origin\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"target\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDirectionSenseEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDirectionSenseEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDirectionSenseEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"positive\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"negative\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDistributionChamberElementTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDistributionChamberElementTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDistributionChamberElementTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"formedduct\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"inspectionchamber\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"inspectionpit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"manhole\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"meterchamber\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sump\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"trench\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"valvechamber\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDocumentConfidentialityEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDocumentConfidentialityEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDocumentConfidentialityEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"public\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"restricted\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"confidential\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"personal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDocumentStatusEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDocumentStatusEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDocumentStatusEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"draft\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"finaldraft\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"final\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"revision\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDoorPanelOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorPanelOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDoorPanelOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"swinging\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_acting\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sliding\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"folding\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"revolving\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rollingup\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDoorPanelPositionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorPanelPositionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDoorPanelPositionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"left\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"middle\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"right\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDoorStyleConstructionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorStyleConstructionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDoorStyleConstructionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"aluminium\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"high_grade_steel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"steel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"wood\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"aluminium_wood\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"aluminium_plastic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"plastic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDoorStyleOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorStyleOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDoorStyleOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"single_swing_left\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"single_swing_right\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_door_single_swing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_left\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_right\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_swing_left\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_swing_right\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_door_double_swing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sliding_to_left\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sliding_to_right\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_door_sliding\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"folding_to_left\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"folding_to_right\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_door_folding\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"revolving\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rollingup\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDuctFittingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDuctFittingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDuctFittingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bend\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"connector\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"entry\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"exit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"junction\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"obstruction\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"transition\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDuctSegmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDuctSegmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDuctSegmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"rigidsegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"flexiblesegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDuctSilencerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDuctSilencerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDuctSilencerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"flatoval\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rectangular\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"round\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricApplianceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricApplianceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricApplianceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"computer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"directwaterheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"dishwasher\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electriccooker\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electricheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"facsimile\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"freestandingfan\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"freezer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fridge_freezer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"handdryer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"indirectwaterheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"microwave\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"photocopier\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"printer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"refrigerator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"radiantheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"scanner\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"telephone\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tumbledryer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tv\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"vendingmachine\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"washingmachine\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"waterheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"watercooler\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricCurrentEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricCurrentEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"alternating\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"direct\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricDistributionPointFunctionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricDistributionPointFunctionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricDistributionPointFunctionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"alarmpanel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"consumerunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"controlpanel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"distributionboard\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gasdetectorpanel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"indicatorpanel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mimicpanel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"motorcontrolcentre\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"switchboard\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricFlowStorageDeviceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricFlowStorageDeviceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"battery\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"capacitorbank\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"harmonicfilter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"inductorbank\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ups\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricGeneratorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricGeneratorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricGeneratorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricHeaterTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricHeaterTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricHeaterTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"electricpointheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electriccableheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electricmatheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricMotorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricMotorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricMotorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dc\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"induction\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"polyphase\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"reluctancesynchronous\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"synchronous\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricTimeControlTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricTimeControlTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricTimeControlTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"timeclock\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"timedelay\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"relay\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElementAssemblyTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElementAssemblyTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElementAssemblyTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"accessory_assembly\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"arch\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"beam_grid\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"braced_frame\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"girder\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"reinforcement_unit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rigid_frame\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"slab_field\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"truss\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElementCompositionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElementCompositionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElementCompositionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"complex\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"element\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"partial\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcEnergySequenceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergySequenceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcEnergySequenceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"primary\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"secondary\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tertiary\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"auxiliary\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcEnvironmentalImpactCategoryEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEnvironmentalImpactCategoryEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcEnvironmentalImpactCategoryEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"combinedvalue\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"disposal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"extraction\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"installation\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"manufacture\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"transportation\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcEvaporativeCoolerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEvaporativeCoolerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcEvaporativeCoolerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"directevaporativerandommediaaircooler\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"directevaporativerigidmediaaircooler\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"directevaporativeslingerspackagedaircooler\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"directevaporativepackagedrotaryaircooler\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"directevaporativeairwasher\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"indirectevaporativepackageaircooler\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"indirectevaporativewetcoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"indirectevaporativecoolingtowerorcoilcooler\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"indirectdirectcombination\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcEvaporatorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEvaporatorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcEvaporatorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"directexpansionshellandtube\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"directexpansiontubeintube\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"directexpansionbrazedplate\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"floodedshellandtube\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shellandcoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFanTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFanTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFanTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"centrifugalforwardcurved\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"centrifugalradial\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"centrifugalbackwardinclinedcurved\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"centrifugalairfoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tubeaxial\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"vaneaxial\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"propelloraxial\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFilterTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFilterTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFilterTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"airparticlefilter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"odorfilter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"oilfilter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"strainer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"waterfilter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFireSuppressionTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFireSuppressionTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFireSuppressionTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"breechinginlet\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"firehydrant\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"hosereel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sprinkler\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sprinklerdeflector\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFlowDirectionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFlowDirectionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFlowDirectionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"source\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sink\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sourceandsink\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFlowInstrumentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFlowInstrumentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFlowInstrumentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"pressuregauge\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermometer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ammeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"frequencymeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"powerfactormeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"phaseanglemeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"voltmeter_peak\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"voltmeter_rms\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFlowMeterTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFlowMeterTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFlowMeterTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"electricmeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"energymeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"flowmeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gasmeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"oilmeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"watermeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFootingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFootingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFootingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"footing_beam\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pad_footing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pile_cap\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"strip_footing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcGasTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcGasTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcGasTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"gasappliance\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gasbooster\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gasburner\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcGeometricProjectionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcGeometricProjectionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcGeometricProjectionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"graph_view\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sketch_view\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"model_view\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"plan_view\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"reflected_plan_view\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"section_view\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"elevation_view\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcGlobalOrLocalEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcGlobalOrLocalEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcGlobalOrLocalEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"global_coords\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"local_coords\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcHeatExchangerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatExchangerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcHeatExchangerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"plate\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shellandtube\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcHumidifierTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHumidifierTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcHumidifierTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"steaminjection\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"adiabaticairwasher\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"adiabaticpan\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"adiabaticwettedelement\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"adiabaticatomizing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"adiabaticultrasonic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"adiabaticrigidmedia\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"adiabaticcompressedairnozzle\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"assistedelectric\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"assistednaturalgas\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"assistedpropane\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"assistedbutane\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"assistedsteam\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcInternalOrExternalEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcInternalOrExternalEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcInternalOrExternalEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"internal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"external\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcInventoryTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcInventoryTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcInventoryTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"assetinventory\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"spaceinventory\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"furnitureinventory\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcJunctionBoxTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcJunctionBoxTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcJunctionBoxTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLampTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLampTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLampTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"compactfluorescent\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fluorescent\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"highpressuremercury\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"highpressuresodium\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"metalhalide\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tungstenfilament\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLayerSetDirectionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLayerSetDirectionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLayerSetDirectionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"axis1\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"axis2\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"axis3\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLightDistributionCurveEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLightDistributionCurveEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLightDistributionCurveEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"type_a\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"type_b\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"type_c\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLightEmissionSourceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLightEmissionSourceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLightEmissionSourceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"compactfluorescent\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fluorescent\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"highpressuremercury\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"highpressuresodium\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lightemittingdiode\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lowpressuresodium\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lowvoltagehalogen\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mainvoltagehalogen\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"metalhalide\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tungstenfilament\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLightFixtureTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLightFixtureTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLightFixtureTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"pointsource\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"directionsource\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLoadGroupTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLoadGroupTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLoadGroupTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"load_group\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"load_case\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"load_combination_group\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"load_combination\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLogicalOperatorEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLogicalOperatorEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLogicalOperatorEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"logicaland\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"logicalor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMemberTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMemberTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMemberTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"brace\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"chord\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"collar\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"member\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mullion\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"plate\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"post\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"purlin\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rafter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"stringer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"strut\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"stud\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMotorConnectionTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMotorConnectionTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMotorConnectionTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"beltdrive\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"coupling\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"directdrive\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcNullStyle\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcNullStyle\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcNullStyle\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"null\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcObjectTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcObjectTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcObjectTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"product\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"process\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"control\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"resource\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"actor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"group\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"project\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcObjectiveEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcObjectiveEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcObjectiveEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"codecompliance\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"designintent\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"healthandsafety\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"requirement\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"specification\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"triggercondition\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcOccupantTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcOccupantTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcOccupantTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"assignee\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"assignor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lessee\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lessor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lettingagent\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"owner\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tenant\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcOutletTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcOutletTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcOutletTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"audiovisualoutlet\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"communicationsoutlet\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"poweroutlet\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPermeableCoveringOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPermeableCoveringOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPermeableCoveringOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"grill\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"louver\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"screen\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPhysicalOrVirtualEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPhysicalOrVirtualEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPhysicalOrVirtualEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"physical\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"virtual\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPileConstructionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPileConstructionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPileConstructionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cast_in_place\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"composite\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"precast_concrete\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"prefab_steel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPileTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPileTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPileTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cohesion\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"friction\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"support\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPipeFittingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPipeFittingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPipeFittingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bend\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"connector\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"entry\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"exit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"junction\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"obstruction\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"transition\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPipeSegmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPipeSegmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPipeSegmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"flexiblesegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rigidsegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gutter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"spool\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPlateTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPlateTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPlateTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"curtain_panel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sheet\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcProcedureTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProcedureTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcProcedureTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"advice_caution\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"advice_note\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"advice_warning\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"calibration\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"diagnostic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shutdown\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"startup\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcProfileTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProfileTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcProfileTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"curve\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"area\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcProjectOrderRecordTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProjectOrderRecordTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcProjectOrderRecordTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"change\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"maintenance\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"move\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"purchase\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"work\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcProjectOrderTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProjectOrderTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcProjectOrderTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"changeorder\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"maintenanceworkorder\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"moveorder\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"purchaseorder\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"workorder\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcProjectedOrTrueLengthEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProjectedOrTrueLengthEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcProjectedOrTrueLengthEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"projected_length\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"true_length\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPropertySourceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPropertySourceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPropertySourceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"design\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"designmaximum\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"designminimum\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"simulated\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"asbuilt\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"commissioning\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"measured\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notknown\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcProtectiveDeviceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProtectiveDeviceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcProtectiveDeviceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"fusedisconnector\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"circuitbreaker\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"earthfailuredevice\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"residualcurrentcircuitbreaker\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"residualcurrentswitch\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"varistor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPumpTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPumpTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPumpTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"circulator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"endsuction\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"splitcase\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"verticalinline\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"verticalturbine\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRailingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRailingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRailingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"handrail\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"guardrail\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"balustrade\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRampFlightTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRampFlightTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRampFlightTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"straight\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"spiral\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRampTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRampTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRampTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"straight_run_ramp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"two_straight_run_ramp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"quarter_turn_ramp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"two_quarter_turn_ramp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"half_turn_ramp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"spiral_ramp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcReflectanceMethodEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcReflectanceMethodEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcReflectanceMethodEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"blinn\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"flat\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"glass\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"matt\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"metal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mirror\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"phong\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"plastic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"strauss\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcReinforcingBarRoleEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcReinforcingBarRoleEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcReinforcingBarRoleEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"main\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shear\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ligature\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"stud\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"punching\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"edge\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ring\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcReinforcingBarSurfaceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcReinforcingBarSurfaceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcReinforcingBarSurfaceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"plain\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"textured\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcResourceConsumptionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcResourceConsumptionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcResourceConsumptionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"consumed\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"partiallyconsumed\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notconsumed\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"occupied\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"partiallyoccupied\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notoccupied\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRibPlateDirectionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRibPlateDirectionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRibPlateDirectionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"direction_x\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"direction_y\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRoleEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRoleEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRoleEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"supplier\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"manufacturer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"contractor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"subcontractor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"architect\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"structuralengineer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"costengineer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"client\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"buildingowner\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"buildingoperator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mechanicalengineer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electricalengineer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"projectmanager\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"facilitiesmanager\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"civilengineer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"comissioningengineer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"engineer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"owner\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"consultant\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"constructionmanager\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fieldconstructionmanager\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"reseller\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRoofTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRoofTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRoofTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"flat_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shed_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gable_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"hip_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"hipped_gable_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gambrel_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mansard_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"barrel_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rainbow_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"butterfly_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pavilion_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"dome_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"freeform\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSIPrefix\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSIPrefix\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSIPrefix\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"exa\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"peta\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tera\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"giga\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mega\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"kilo\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"hecto\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"deca\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"deci\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"centi\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"milli\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"micro\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"nano\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pico\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"femto\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"atto\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSIUnitName\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSIUnitName\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSIUnitName\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"ampere\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"becquerel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"candela\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"coulomb\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cubic_metre\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"degree_celsius\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"farad\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gram\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gray\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"henry\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"hertz\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"joule\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"kelvin\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lumen\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lux\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"metre\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mole\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"newton\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ohm\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pascal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"radian\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"second\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"siemens\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sievert\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"square_metre\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"steradian\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tesla\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"volt\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"watt\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"weber\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSanitaryTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSanitaryTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSanitaryTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bath\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bidet\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cistern\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shower\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sink\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sanitaryfountain\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"toiletpan\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"urinal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"washhandbasin\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"wcseat\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSectionTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSectionTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"uniform\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tapered\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSensorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSensorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSensorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"co2sensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"firesensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"flowsensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gassensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"heatsensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"humiditysensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lightsensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"moisturesensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"movementsensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pressuresensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"smokesensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"soundsensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"temperaturesensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSequenceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSequenceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSequenceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"start_start\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"start_finish\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"finish_start\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"finish_finish\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcServiceLifeFactorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcServiceLifeFactorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcServiceLifeFactorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"a_qualityofcomponents\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"b_designlevel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"c_workexecutionlevel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"d_indoorenvironment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"e_outdoorenvironment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"f_inuseconditions\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"g_maintenancelevel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcServiceLifeTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcServiceLifeTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcServiceLifeTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"actualservicelife\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"expectedservicelife\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"optimisticreferenceservicelife\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pessimisticreferenceservicelife\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"referenceservicelife\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSlabTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSlabTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSlabTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"floor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"landing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"baseslab\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSoundScaleEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundScaleEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSoundScaleEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dba\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"dbb\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"dbc\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"nc\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"nr\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSpaceHeaterTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSpaceHeaterTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSpaceHeaterTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"sectionalradiator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"panelradiator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tubularradiator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"convector\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"baseboardheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"finnedtubeunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"unitheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSpaceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSpaceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSpaceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcStackTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStackTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcStackTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"birdcage\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cowl\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rainwaterhopper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcStairFlightTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStairFlightTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcStairFlightTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"straight\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"winder\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"spiral\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"curved\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"freeform\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcStairTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStairTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcStairTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"straight_run_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"two_straight_run_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"quarter_winding_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"quarter_turn_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"half_winding_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"half_turn_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"two_quarter_winding_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"two_quarter_turn_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"three_quarter_winding_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"three_quarter_turn_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"spiral_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_return_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"curved_run_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"two_curved_run_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcStateEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStateEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcStateEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"readwrite\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"readonly\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"locked\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"readwritelocked\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"readonlylocked\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcStructuralCurveTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcStructuralCurveTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"rigid_joined_member\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pin_joined_member\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cable\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tension_member\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"compression_member\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcStructuralSurfaceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcStructuralSurfaceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bending_element\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"membrane_element\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shell\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSurfaceSide\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSurfaceSide\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSurfaceSide\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"positive\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"negative\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"both\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSurfaceTextureEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSurfaceTextureEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSurfaceTextureEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bump\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"opacity\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"reflection\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"selfillumination\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shininess\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"specular\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"texture\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"transparencymap\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSwitchingDeviceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSwitchingDeviceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSwitchingDeviceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"contactor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"emergencystop\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"starter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"switchdisconnector\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"toggleswitch\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTankTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTankTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTankTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"preformed\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sectional\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"expansion\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pressurevessel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTendonTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTendonTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTendonTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"strand\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"wire\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bar\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"coated\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTextPath\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTextPath\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTextPath\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"left\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"right\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"up\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"down\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcThermalLoadSourceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalLoadSourceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcThermalLoadSourceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"people\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lighting\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"equipment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ventilationindoorair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ventilationoutsideair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"recirculatedair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"exhaustair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"airexchangerate\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"drybulbtemperature\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"relativehumidity\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"infiltration\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcThermalLoadTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalLoadTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcThermalLoadTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"sensible\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"latent\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"radiant\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTimeSeriesDataTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeSeriesDataTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTimeSeriesDataTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"continuous\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"discrete\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"discretebinary\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"piecewisebinary\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"piecewiseconstant\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"piecewisecontinuous\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTimeSeriesScheduleTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeSeriesScheduleTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTimeSeriesScheduleTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"annual\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"monthly\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"weekly\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"daily\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTransformerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTransformerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTransformerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"current\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"frequency\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"voltage\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTransitionCode\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTransitionCode\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTransitionCode\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"discontinuous\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"continuous\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"contsamegradient\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"contsamegradientsamecurvature\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTransportElementTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTransportElementTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTransportElementTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"elevator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"escalator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"movingwalkway\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTrimmingPreference\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTrimmingPreference\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTrimmingPreference\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cartesian\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"parameter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"unspecified\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTubeBundleTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTubeBundleTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTubeBundleTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"finned\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcUnitEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcUnitEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcUnitEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"absorbeddoseunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"amountofsubstanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"areaunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"doseequivalentunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electriccapacitanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electricchargeunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electricconductanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electriccurrentunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electricresistanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electricvoltageunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"energyunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"forceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"frequencyunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"illuminanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"inductanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lengthunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"luminousfluxunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"luminousintensityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"magneticfluxdensityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"magneticfluxunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"massunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"planeangleunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"powerunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pressureunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"radioactivityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"solidangleunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermodynamictemperatureunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"timeunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"volumeunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcUnitaryEquipmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcUnitaryEquipmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcUnitaryEquipmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"airhandler\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"airconditioningunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"splitsystem\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rooftopunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcValveTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcValveTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcValveTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"airrelease\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"antivacuum\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"changeover\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"check\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"commissioning\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"diverting\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"drawoffcock\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"doublecheck\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"doubleregulating\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"faucet\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"flushing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gascock\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gastap\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"isolating\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mixing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pressurereducing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pressurerelief\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"regulating\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"safetycutoff\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"steamtrap\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"stopcock\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcVibrationIsolatorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcVibrationIsolatorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcVibrationIsolatorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"compression\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"spring\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcWallTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWallTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcWallTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"standard\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"polygonal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shear\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"elementedwall\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"plumbingwall\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcWasteTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWasteTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcWasteTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"floortrap\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"floorwaste\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gullysump\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gullytrap\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"greaseinterceptor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"oilinterceptor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"petrolinterceptor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"roofdrain\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"wastedisposalunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"wastetrap\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcWindowPanelOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowPanelOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcWindowPanelOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"sidehungrighthand\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sidehunglefthand\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tiltandturnrighthand\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tiltandturnlefthand\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tophung\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bottomhung\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pivothorizontal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pivotvertical\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"slidinghorizontal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"slidingvertical\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"removablecasement\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fixedcasement\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"otheroperation\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcWindowPanelPositionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowPanelPositionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcWindowPanelPositionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"left\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"middle\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"right\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bottom\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"top\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcWindowStyleConstructionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowStyleConstructionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcWindowStyleConstructionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"aluminium\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"high_grade_steel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"steel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"wood\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"aluminium_wood\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"plastic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"other_construction\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcWindowStyleOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowStyleOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcWindowStyleOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"single_panel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_panel_vertical\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_panel_horizontal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"triple_panel_vertical\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"triple_panel_bottom\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"triple_panel_top\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"triple_panel_left\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"triple_panel_right\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"triple_panel_horizontal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcWorkControlTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWorkControlTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcWorkControlTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"actual\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"baseline\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"planned\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\r\n\r\n<!-- simple type declarations (for TYPE defined data type definitions) -->\r\n\r\n\t<xs:element name=\"IfcAbsorbedDoseMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAbsorbedDoseMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAbsorbedDoseMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAccelerationMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAccelerationMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAccelerationMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAmountOfSubstanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAmountOfSubstanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAmountOfSubstanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAngularVelocityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAngularVelocityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAngularVelocityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAreaMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAreaMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcBoolean\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBoolean\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcBoolean\">\r\n\t\t<xs:restriction base=\"xs:boolean\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcBoxAlignment\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBoxAlignment\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcBoxAlignment\">\r\n\t\t<xs:restriction base=\"ifc:IfcLabel\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcComplexNumber\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:complexContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcComplexNumber\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:complexContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:complexType name=\"IfcComplexNumber\">\r\n\t\t<xs:sequence>\r\n\t\t\t<xs:element ref=\"ex:double-wrapper\" maxOccurs=\"2\" minOccurs=\"2\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:sequence>\r\n\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:double-wrapper\">\r\n\t\t</xs:attribute>\r\n\t\t<xs:attribute ref=\"ex:cType\" fixed=\"array\">\r\n\t\t</xs:attribute>\r\n\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t</xs:attribute>\r\n\t</xs:complexType>\r\n\r\n\r\n\t<xs:element name=\"IfcCompoundPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:complexContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCompoundPlaneAngleMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:complexContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:complexType name=\"IfcCompoundPlaneAngleMeasure\">\r\n\t\t<xs:sequence>\r\n\t\t\t<xs:element ref=\"ex:long-wrapper\" maxOccurs=\"4\" minOccurs=\"3\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:sequence>\r\n\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:long-wrapper\">\r\n\t\t</xs:attribute>\r\n\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t</xs:attribute>\r\n\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t</xs:attribute>\r\n\t</xs:complexType>\r\n\r\n\r\n\t<xs:element name=\"IfcContextDependentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcContextDependentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcContextDependentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCountMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCountMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCountMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCurvatureMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCurvatureMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCurvatureMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDayInMonthNumber\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDayInMonthNumber\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDayInMonthNumber\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDaylightSavingHour\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDaylightSavingHour\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDaylightSavingHour\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDescriptiveMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDescriptiveMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDescriptiveMeasure\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDimensionCount\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDimensionCount\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDimensionCount\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDoseEquivalentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoseEquivalentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDoseEquivalentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDynamicViscosityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDynamicViscosityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDynamicViscosityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricCapacitanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCapacitanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricCapacitanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricChargeMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricChargeMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricChargeMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricConductanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricConductanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricConductanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricCurrentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricCurrentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricResistanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricResistanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricResistanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricVoltageMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricVoltageMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricVoltageMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcEnergyMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergyMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcEnergyMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFontStyle\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFontStyle\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFontStyle\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFontVariant\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFontVariant\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFontVariant\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFontWeight\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFontWeight\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFontWeight\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcForceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcForceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcForceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFrequencyMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFrequencyMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFrequencyMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcGloballyUniqueId\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcGloballyUniqueId\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcGloballyUniqueId\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t\t<xs:minLength value=\"22\">\r\n\t\t\t</xs:minLength>\r\n\t\t\t<xs:maxLength value=\"22\">\r\n\t\t\t</xs:maxLength>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcHeatFluxDensityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatFluxDensityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcHeatFluxDensityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcHeatingValueMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatingValueMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcHeatingValueMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcHourInDay\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHourInDay\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcHourInDay\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcIdentifier\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcIdentifier\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcIlluminanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIlluminanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcIlluminanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcInductanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcInductanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcInductanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcInteger\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcInteger\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcInteger\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcIntegerCountRateMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIntegerCountRateMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcIntegerCountRateMeasure\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcIonConcentrationMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIonConcentrationMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcIonConcentrationMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcIsothermalMoistureCapacityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcIsothermalMoistureCapacityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcKinematicViscosityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcKinematicViscosityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcKinematicViscosityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLabel\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLabel\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLabel\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLengthMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLengthMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLinearForceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearForceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLinearForceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLinearMomentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearMomentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLinearMomentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLinearStiffnessMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearStiffnessMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLinearStiffnessMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLinearVelocityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearVelocityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLinearVelocityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLogical\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLogical\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLogical\">\r\n\t\t<xs:restriction base=\"ex:logical\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLuminousFluxMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousFluxMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLuminousFluxMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLuminousIntensityDistributionMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityDistributionMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLuminousIntensityDistributionMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLuminousIntensityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLuminousIntensityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMagneticFluxDensityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxDensityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMagneticFluxDensityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMagneticFluxMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMagneticFluxMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMassDensityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMassDensityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMassDensityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMassFlowRateMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMassFlowRateMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMassFlowRateMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMassMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMassMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMassMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMassPerLengthMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMassPerLengthMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMassPerLengthMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMinuteInHour\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMinuteInHour\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMinuteInHour\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcModulusOfElasticityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfElasticityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcModulusOfElasticityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcModulusOfLinearSubgradeReactionMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcModulusOfRotationalSubgradeReactionMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcModulusOfSubgradeReactionMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMoistureDiffusivityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMoistureDiffusivityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMoistureDiffusivityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMolecularWeightMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMolecularWeightMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMolecularWeightMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMomentOfInertiaMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMomentOfInertiaMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMomentOfInertiaMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMonetaryMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMonetaryMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMonetaryMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMonthInYearNumber\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMonthInYearNumber\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMonthInYearNumber\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcNormalisedRatioMeasure\">\r\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcNumericMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcNumericMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcNumericMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPHMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPHMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPHMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcParameterValue\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcParameterValue\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPlanarForceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPlanarForceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPlanarForceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPlaneAngleMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPositiveLengthMeasure\">\r\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPositivePlaneAngleMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPositivePlaneAngleMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPositivePlaneAngleMeasure\">\r\n\t\t<xs:restriction base=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveRatioMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPositiveRatioMeasure\">\r\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPowerMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPowerMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPowerMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPresentableText\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPresentableText\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPresentableText\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPressureMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPressureMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPressureMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRadioActivityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRadioActivityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRadioActivityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRatioMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRatioMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRatioMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcReal\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcReal\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcReal\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRotationalFrequencyMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalFrequencyMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRotationalFrequencyMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRotationalMassMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalMassMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRotationalMassMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRotationalStiffnessMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalStiffnessMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRotationalStiffnessMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSecondInMinute\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSecondInMinute\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSecondInMinute\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSectionModulusMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionModulusMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSectionModulusMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSectionalAreaIntegralMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionalAreaIntegralMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSectionalAreaIntegralMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcShearModulusMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcShearModulusMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcShearModulusMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSolidAngleMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSolidAngleMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSolidAngleMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSoundPowerMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSoundPowerMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSoundPressureMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSoundPressureMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSpecificHeatCapacityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecificHeatCapacityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSpecificHeatCapacityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSpecularExponent\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularExponent\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSpecularExponent\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSpecularRoughness\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularRoughness\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSpecularRoughness\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTemperatureGradientMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureGradientMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTemperatureGradientMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcText\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcText\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcText\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTextAlignment\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTextAlignment\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTextAlignment\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTextDecoration\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTextDecoration\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTextDecoration\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTextFontName\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTextFontName\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTextFontName\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTextTransformation\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTextTransformation\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTextTransformation\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcThermalAdmittanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalAdmittanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcThermalAdmittanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcThermalConductivityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalConductivityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcThermalConductivityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcThermalExpansionCoefficientMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalExpansionCoefficientMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcThermalExpansionCoefficientMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcThermalResistanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalResistanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcThermalResistanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcThermalTransmittanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalTransmittanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcThermalTransmittanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermodynamicTemperatureMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcThermodynamicTemperatureMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTimeMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTimeMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTimeStamp\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeStamp\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTimeStamp\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTorqueMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTorqueMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTorqueMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcVaporPermeabilityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcVaporPermeabilityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcVaporPermeabilityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcVolumeMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumeMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcVolumeMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcVolumetricFlowRateMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumetricFlowRateMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcVolumetricFlowRateMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcWarpingConstantMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingConstantMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcWarpingConstantMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcWarpingMomentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingMomentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcWarpingMomentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcYearNumber\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcYearNumber\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcYearNumber\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n</xs:schema>\r\n"
  },
  {
    "path": "Install/Program Files to Install/IFC2x3 COBie 2.4 Design Deliverable.txt",
    "content": "#\n# User Defined PropertySet Definition File\n#\n# Format:\n#\tPropertySet:\t<Pset Name>\tI[nstance]/T[ype]\t<element list separated by ','>\n#\t\t\t\t<Property Name 1>\t<Data type>\t<Revit parameter name (if different from property name)>\n#\t\t\t\t<Property Name 2>\t<Data type>\t<Revit parameter name (if different from property name)>\n#\t\t\t\t...\n# \n# PropertySet definition for COBie\n#\nPropertySet:\tCOBie_Specification\tT\tIfcElementType\n\tNominalLength\tLength\tCOBie.Type.NominalLength\n\tNominalWidth\tLength\tCOBie.Type.NominalWidth\n\tNominalHeight\tLength\tCOBie.Type.NominalHeight\n\tShape\t\tText\tCOBie.Type.Shape\n\tSize\t\tText\tCOBie.Type.Size\n\tColor\t\tText\tCOBie.Type.Color\n\tFinish\t\tText\tCOBie.Type.Finish\n\tGrade\t\tText\tCOBie.Type.Grade\n\tMaterial\tText\tCOBie.Type.Material\n\tConstituents\tText\tCOBie.Type.Constituents\n\tFeatures\tText\tCOBie.Type.Features\n\tAccessibilityPerformance\tText\tCOBie.Type.AccessibilityPerformance\n\tCodePerformance\tText\tCOBie.Type.CodePerformance\n\tSustainabilityPerformance\tText\tCOBie.Type.SustainabilityPerformance\n\tAccessibilityPerformance\tText\tCOBie.Type.AccessibilityPerformance\n# \nPropertySet:\tCOBie_Component\tI\tIfcElement\n\tInstallationDate\tText\tCOBie.Component.InstallationDate\n\tWarrantyStartDate\tText\tCOBie.Component.WarrantyStartDate\n\tTagNumber\tText\tCOBie.Component.TagNumber\n\tAssetIdentifier\tText\tCOBie.Component.AssetIdentifier\n#\nPropertySet:\tCOBie_Space\tI\tIfcSpace\n\tRoomTag\tText\tCOBie.Space.RoomTag\n#\nPropertySet:\tCOBie_Asset\tT\tIfcElementType\n\tAssetType\tText\tCOBie.Type.AssetType\n#\nPropertySet:\tCOBie_Warranty\tT\tIfcElementType\n\tWarrantyGuarantorParts\tText\tCOBie.Type.WarrantyGuarantorParts\n\tWarrantyDurationParts\tText\tCOBie.Type.WarrantyDurationParts\n\tWarrantyGuarantorLabor\tText\tCOBie.Type.WarrantyGuarantorLabor\n\tWarrantyDurationLabor\tText\tCOBie.Type.WarrantyDurationLabor\n\tWarrantyDurationDescription\tText\tCOBie.Type.WarrantyDurationDescription\n\tWarrantyDescription\tText\tCOBie.Type.WarrantyDescription\n#\nPropertySet:\tPset_ManufacturerOccurence\tI\tIfcElement\n\tSerialNumber\tText\tCOBie.Component.SerialNumber\n\tBarCode\tText\tCOBie.Component.BarCode\n#\nPropertySet:\tCOBie_ServiceLife\tT\tIfcElementType\n\tServiceLifeDuration\tText\tCOBie.Type.ExpectedLife\n#\nPropertySet:\tCOBie_EconomicalImpactValues\tT\tIfcElementType\n\tReplacementCost\tText\tCOBie.Type.ReplacementCost\n#\nPropertySet:\tPset_ManufacturerTypeInformation\tT\tIfcElementType\n\tManufacturer\tText\tCOBie.Type.Manufacturer\n\tModelReference\tText\tCOBie.Type.ModelReference\n\tModelLabel\tText\tCOBie.Type.ModelNumber\n#\nPropertySet:\tCOBie_Spare\tI\tIfcElement\n\tSuppliers\tText\n\tSetNumber\tText\n\tPartNumber\tText\n#\n"
  },
  {
    "path": "Install/Program Files to Install/IFC4.exp",
    "content": "(*\nCopyright by:\nbuildingSMART International Limited, 1996-2017\n\nAny technical documentation made available by buildingSMART International Limited\nis the copyrighted work of buildingSMART International Limited and is owned by the \nbuildingSMART International Limited. It may be photocopied, used in software development, \nor translated into another computer language without prior written consent from \nbuildingSMART International Limited provided that full attribution is given. \nPrior written consent is required if changes are made to the technical specification.\n\nThis material is delivered to you as is and buildingSMART International Limited makes \nno warranty of any kind with regard to it, including, but not limited to, the implied \nwarranties as to its accuracy or fitness for a particular purpose. Any use of the \ntechnical documentation or the information contained therein is at the risk of the user. \nDocumentation may include technical or other inaccuracies or typographical errors. \nbuildingSMART International Limited shall not be liable for errors contained therein or \nfor incidental consequential damages in connection with the furnishing, performance or use \nof the material. The information contained in this document is subject to change without notice.\n\nIssue date:\nSunday, October 29, 2017\n\n*)\n\nSCHEMA IFC4;\n\nTYPE IfcAbsorbedDoseMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAccelerationMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAmountOfSubstanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAngularVelocityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcArcIndex = LIST [3:3] OF IfcPositiveInteger;\nEND_TYPE;\n\nTYPE IfcAreaDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAreaMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcBinary = BINARY;\nEND_TYPE;\n\nTYPE IfcBoolean = BOOLEAN;\nEND_TYPE;\n\nTYPE IfcBoxAlignment = IfcLabel;\n WHERE\n\tWR1 : SELF IN ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right'];\nEND_TYPE;\n\nTYPE IfcCardinalPointReference = INTEGER;\n WHERE\n\tGreaterThanZero : SELF > 0;\nEND_TYPE;\n\nTYPE IfcComplexNumber = ARRAY [1:2] OF REAL;\nEND_TYPE;\n\nTYPE IfcCompoundPlaneAngleMeasure = LIST [3:4] OF INTEGER;\n WHERE\n\tMinutesInRange : ABS(SELF[2]) < 60;\n\tSecondsInRange : ABS(SELF[3]) < 60;\n\tMicrosecondsInRange : (SIZEOF(SELF) = 3) OR (ABS(SELF[4]) < 1000000);\n\tConsistentSign : ((SELF[1] >= 0) AND (SELF[2] >= 0) AND (SELF[3] >= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] >= 0)))\nOR\n((SELF[1] <= 0) AND (SELF[2] <= 0) AND (SELF[3] <= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] <= 0)));\nEND_TYPE;\n\nTYPE IfcContextDependentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcCountMeasure = NUMBER;\nEND_TYPE;\n\nTYPE IfcCurvatureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcDate = STRING;\nEND_TYPE;\n\nTYPE IfcDateTime = STRING;\nEND_TYPE;\n\nTYPE IfcDayInMonthNumber = INTEGER;\n WHERE\n\tValidRange : {1 <= SELF <= 31};\nEND_TYPE;\n\nTYPE IfcDayInWeekNumber = INTEGER;\n WHERE\n\tValidRange : {1 <= SELF <= 7};\nEND_TYPE;\n\nTYPE IfcDescriptiveMeasure = STRING;\nEND_TYPE;\n\nTYPE IfcDimensionCount = INTEGER;\n WHERE\n\tWR1 : { 0 < SELF <= 3 };\nEND_TYPE;\n\nTYPE IfcDoseEquivalentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcDuration = STRING;\nEND_TYPE;\n\nTYPE IfcDynamicViscosityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricCapacitanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricChargeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricConductanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricCurrentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricResistanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricVoltageMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcEnergyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcFontStyle = STRING;\n WHERE\n\tWR1 : SELF IN ['normal','italic','oblique'];\nEND_TYPE;\n\nTYPE IfcFontVariant = STRING;\n WHERE\n\tWR1 : SELF IN ['normal','small-caps'];\nEND_TYPE;\n\nTYPE IfcFontWeight = STRING;\n WHERE\n\tWR1 : SELF IN ['normal','small-caps','100','200','300','400','500','600','700','800','900'];\nEND_TYPE;\n\nTYPE IfcForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcFrequencyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcGloballyUniqueId = STRING(22) FIXED;\nEND_TYPE;\n\nTYPE IfcHeatFluxDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcHeatingValueMeasure = REAL;\n WHERE\n\tWR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcIdentifier = STRING(255);\nEND_TYPE;\n\nTYPE IfcIlluminanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcInductanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcInteger = INTEGER;\nEND_TYPE;\n\nTYPE IfcIntegerCountRateMeasure = INTEGER;\nEND_TYPE;\n\nTYPE IfcIonConcentrationMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcIsothermalMoistureCapacityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcKinematicViscosityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLabel = STRING(255);\nEND_TYPE;\n\nTYPE IfcLanguageId = IfcIdentifier;\nEND_TYPE;\n\nTYPE IfcLengthMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLineIndex = LIST [2:?] OF IfcPositiveInteger;\nEND_TYPE;\n\nTYPE IfcLinearForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearMomentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearStiffnessMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearVelocityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLogical = LOGICAL;\nEND_TYPE;\n\nTYPE IfcLuminousFluxMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLuminousIntensityDistributionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLuminousIntensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMagneticFluxDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMagneticFluxMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassFlowRateMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassPerLengthMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfElasticityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfLinearSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfRotationalSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMoistureDiffusivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMolecularWeightMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMomentOfInertiaMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMonetaryMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMonthInYearNumber = INTEGER;\n WHERE\n\tValidRange : {1 <= SELF <= 12};\nEND_TYPE;\n\nTYPE IfcNonNegativeLengthMeasure = IfcLengthMeasure;\n WHERE\n\tNotNegative : SELF >= 0.;\nEND_TYPE;\n\nTYPE IfcNormalisedRatioMeasure = IfcRatioMeasure;\n WHERE\n\tWR1 : {0.0 <= SELF <= 1.0};\nEND_TYPE;\n\nTYPE IfcNumericMeasure = NUMBER;\nEND_TYPE;\n\nTYPE IfcPHMeasure = REAL;\n WHERE\n\tWR21 : {0.0 <= SELF <= 14.0};\nEND_TYPE;\n\nTYPE IfcParameterValue = REAL;\nEND_TYPE;\n\nTYPE IfcPlanarForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPlaneAngleMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPositiveInteger = IfcInteger;\n WHERE\n\tWR1 : SELF > 0;\nEND_TYPE;\n\nTYPE IfcPositiveLengthMeasure = IfcLengthMeasure;\n WHERE\n\tWR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcPositivePlaneAngleMeasure = IfcPlaneAngleMeasure;\n WHERE\n\tWR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcPositiveRatioMeasure = IfcRatioMeasure;\n WHERE\n\tWR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcPowerMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPresentableText = STRING;\nEND_TYPE;\n\nTYPE IfcPressureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPropertySetDefinitionSet = SET [1:?] OF IfcPropertySetDefinition;\nEND_TYPE;\n\nTYPE IfcRadioActivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRatioMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcReal = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalFrequencyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalMassMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalStiffnessMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSectionModulusMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSectionalAreaIntegralMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcShearModulusMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSolidAngleMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPowerLevelMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPowerMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPressureLevelMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPressureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSpecificHeatCapacityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSpecularExponent = REAL;\nEND_TYPE;\n\nTYPE IfcSpecularRoughness = REAL;\n WHERE\n\tWR1 : {0.0 <= SELF <= 1.0};\nEND_TYPE;\n\nTYPE IfcTemperatureGradientMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcTemperatureRateOfChangeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcText = STRING;\nEND_TYPE;\n\nTYPE IfcTextAlignment = STRING;\n WHERE\n\tWR1 : SELF IN ['left', 'right', 'center', 'justify'];\nEND_TYPE;\n\nTYPE IfcTextDecoration = STRING;\n WHERE\n\tWR1 : SELF IN ['none', 'underline', 'overline', 'line-through', 'blink'];\nEND_TYPE;\n\nTYPE IfcTextFontName = STRING;\nEND_TYPE;\n\nTYPE IfcTextTransformation = STRING;\n WHERE\n\tWR1 : SELF IN ['capitalize', 'uppercase', 'lowercase', 'none'];\nEND_TYPE;\n\nTYPE IfcThermalAdmittanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalConductivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalExpansionCoefficientMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalResistanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalTransmittanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermodynamicTemperatureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcTime = STRING;\nEND_TYPE;\n\nTYPE IfcTimeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcTimeStamp = INTEGER;\nEND_TYPE;\n\nTYPE IfcTorqueMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcURIReference = STRING;\nEND_TYPE;\n\nTYPE IfcVaporPermeabilityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcVolumeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcVolumetricFlowRateMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcWarpingConstantMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcWarpingMomentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcActionRequestTypeEnum = ENUMERATION OF\n\t(EMAIL\n\t,FAX\n\t,PHONE\n\t,POST\n\t,VERBAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActionSourceTypeEnum = ENUMERATION OF\n\t(DEAD_LOAD_G\n\t,COMPLETION_G1\n\t,LIVE_LOAD_Q\n\t,SNOW_S\n\t,WIND_W\n\t,PRESTRESSING_P\n\t,SETTLEMENT_U\n\t,TEMPERATURE_T\n\t,EARTHQUAKE_E\n\t,FIRE\n\t,IMPULSE\n\t,IMPACT\n\t,TRANSPORT\n\t,ERECTION\n\t,PROPPING\n\t,SYSTEM_IMPERFECTION\n\t,SHRINKAGE\n\t,CREEP\n\t,LACK_OF_FIT\n\t,BUOYANCY\n\t,ICE\n\t,CURRENT\n\t,WAVE\n\t,RAIN\n\t,BRAKES\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActionTypeEnum = ENUMERATION OF\n\t(PERMANENT_G\n\t,VARIABLE_Q\n\t,EXTRAORDINARY_A\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActuatorTypeEnum = ENUMERATION OF\n\t(ELECTRICACTUATOR\n\t,HANDOPERATEDACTUATOR\n\t,HYDRAULICACTUATOR\n\t,PNEUMATICACTUATOR\n\t,THERMOSTATICACTUATOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAddressTypeEnum = ENUMERATION OF\n\t(OFFICE\n\t,SITE\n\t,HOME\n\t,DISTRIBUTIONPOINT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcAirTerminalBoxTypeEnum = ENUMERATION OF\n\t(CONSTANTFLOW\n\t,VARIABLEFLOWPRESSUREDEPENDANT\n\t,VARIABLEFLOWPRESSUREINDEPENDANT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAirTerminalTypeEnum = ENUMERATION OF\n\t(DIFFUSER\n\t,GRILLE\n\t,LOUVRE\n\t,REGISTER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAirToAirHeatRecoveryTypeEnum = ENUMERATION OF\n\t(FIXEDPLATECOUNTERFLOWEXCHANGER\n\t,FIXEDPLATECROSSFLOWEXCHANGER\n\t,FIXEDPLATEPARALLELFLOWEXCHANGER\n\t,ROTARYWHEEL\n\t,RUNAROUNDCOILLOOP\n\t,HEATPIPE\n\t,TWINTOWERENTHALPYRECOVERYLOOPS\n\t,THERMOSIPHONSEALEDTUBEHEATEXCHANGERS\n\t,THERMOSIPHONCOILTYPEHEATEXCHANGERS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAlarmTypeEnum = ENUMERATION OF\n\t(BELL\n\t,BREAKGLASSBUTTON\n\t,LIGHT\n\t,MANUALPULLBOX\n\t,SIREN\n\t,WHISTLE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAnalysisModelTypeEnum = ENUMERATION OF\n\t(IN_PLANE_LOADING_2D\n\t,OUT_PLANE_LOADING_2D\n\t,LOADING_3D\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAnalysisTheoryTypeEnum = ENUMERATION OF\n\t(FIRST_ORDER_THEORY\n\t,SECOND_ORDER_THEORY\n\t,THIRD_ORDER_THEORY\n\t,FULL_NONLINEAR_THEORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcArithmeticOperatorEnum = ENUMERATION OF\n\t(ADD\n\t,DIVIDE\n\t,MULTIPLY\n\t,SUBTRACT);\nEND_TYPE;\n\nTYPE IfcAssemblyPlaceEnum = ENUMERATION OF\n\t(SITE\n\t,FACTORY\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAudioVisualApplianceTypeEnum = ENUMERATION OF\n\t(AMPLIFIER\n\t,CAMERA\n\t,DISPLAY\n\t,MICROPHONE\n\t,PLAYER\n\t,PROJECTOR\n\t,RECEIVER\n\t,SPEAKER\n\t,SWITCHER\n\t,TELEPHONE\n\t,TUNER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBSplineCurveForm = ENUMERATION OF\n\t(POLYLINE_FORM\n\t,CIRCULAR_ARC\n\t,ELLIPTIC_ARC\n\t,PARABOLIC_ARC\n\t,HYPERBOLIC_ARC\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcBSplineSurfaceForm = ENUMERATION OF\n\t(PLANE_SURF\n\t,CYLINDRICAL_SURF\n\t,CONICAL_SURF\n\t,SPHERICAL_SURF\n\t,TOROIDAL_SURF\n\t,SURF_OF_REVOLUTION\n\t,RULED_SURF\n\t,GENERALISED_CONE\n\t,QUADRIC_SURF\n\t,SURF_OF_LINEAR_EXTRUSION\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcBeamTypeEnum = ENUMERATION OF\n\t(BEAM\n\t,JOIST\n\t,HOLLOWCORE\n\t,LINTEL\n\t,SPANDREL\n\t,T_BEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBenchmarkEnum = ENUMERATION OF\n\t(GREATERTHAN\n\t,GREATERTHANOREQUALTO\n\t,LESSTHAN\n\t,LESSTHANOREQUALTO\n\t,EQUALTO\n\t,NOTEQUALTO\n\t,INCLUDES\n\t,NOTINCLUDES\n\t,INCLUDEDIN\n\t,NOTINCLUDEDIN);\nEND_TYPE;\n\nTYPE IfcBoilerTypeEnum = ENUMERATION OF\n\t(WATER\n\t,STEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBooleanOperator = ENUMERATION OF\n\t(UNION\n\t,INTERSECTION\n\t,DIFFERENCE);\nEND_TYPE;\n\nTYPE IfcBuildingElementPartTypeEnum = ENUMERATION OF\n\t(INSULATION\n\t,PRECASTPANEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBuildingElementProxyTypeEnum = ENUMERATION OF\n\t(COMPLEX\n\t,ELEMENT\n\t,PARTIAL\n\t,PROVISIONFORVOID\n\t,PROVISIONFORSPACE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBuildingSystemTypeEnum = ENUMERATION OF\n\t(FENESTRATION\n\t,FOUNDATION\n\t,LOADBEARING\n\t,OUTERSHELL\n\t,SHADING\n\t,TRANSPORT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBurnerTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableCarrierFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CROSS\n\t,REDUCER\n\t,TEE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableCarrierSegmentTypeEnum = ENUMERATION OF\n\t(CABLELADDERSEGMENT\n\t,CABLETRAYSEGMENT\n\t,CABLETRUNKINGSEGMENT\n\t,CONDUITSEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableFittingTypeEnum = ENUMERATION OF\n\t(CONNECTOR\n\t,ENTRY\n\t,EXIT\n\t,JUNCTION\n\t,TRANSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableSegmentTypeEnum = ENUMERATION OF\n\t(BUSBARSEGMENT\n\t,CABLESEGMENT\n\t,CONDUCTORSEGMENT\n\t,CORESEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcChangeActionEnum = ENUMERATION OF\n\t(NOCHANGE\n\t,MODIFIED\n\t,ADDED\n\t,DELETED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcChillerTypeEnum = ENUMERATION OF\n\t(AIRCOOLED\n\t,WATERCOOLED\n\t,HEATRECOVERY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcChimneyTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoilTypeEnum = ENUMERATION OF\n\t(DXCOOLINGCOIL\n\t,ELECTRICHEATINGCOIL\n\t,GASHEATINGCOIL\n\t,HYDRONICCOIL\n\t,STEAMHEATINGCOIL\n\t,WATERCOOLINGCOIL\n\t,WATERHEATINGCOIL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcColumnTypeEnum = ENUMERATION OF\n\t(COLUMN\n\t,PILASTER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCommunicationsApplianceTypeEnum = ENUMERATION OF\n\t(ANTENNA\n\t,COMPUTER\n\t,FAX\n\t,GATEWAY\n\t,MODEM\n\t,NETWORKAPPLIANCE\n\t,NETWORKBRIDGE\n\t,NETWORKHUB\n\t,PRINTER\n\t,REPEATER\n\t,ROUTER\n\t,SCANNER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcComplexPropertyTemplateTypeEnum = ENUMERATION OF\n\t(P_COMPLEX\n\t,Q_COMPLEX);\nEND_TYPE;\n\nTYPE IfcCompressorTypeEnum = ENUMERATION OF\n\t(DYNAMIC\n\t,RECIPROCATING\n\t,ROTARY\n\t,SCROLL\n\t,TROCHOIDAL\n\t,SINGLESTAGE\n\t,BOOSTER\n\t,OPENTYPE\n\t,HERMETIC\n\t,SEMIHERMETIC\n\t,WELDEDSHELLHERMETIC\n\t,ROLLINGPISTON\n\t,ROTARYVANE\n\t,SINGLESCREW\n\t,TWINSCREW\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCondenserTypeEnum = ENUMERATION OF\n\t(AIRCOOLED\n\t,EVAPORATIVECOOLED\n\t,WATERCOOLED\n\t,WATERCOOLEDBRAZEDPLATE\n\t,WATERCOOLEDSHELLCOIL\n\t,WATERCOOLEDSHELLTUBE\n\t,WATERCOOLEDTUBEINTUBE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConnectionTypeEnum = ENUMERATION OF\n\t(ATPATH\n\t,ATSTART\n\t,ATEND\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConstraintEnum = ENUMERATION OF\n\t(HARD\n\t,SOFT\n\t,ADVISORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConstructionEquipmentResourceTypeEnum = ENUMERATION OF\n\t(DEMOLISHING\n\t,EARTHMOVING\n\t,ERECTING\n\t,HEATING\n\t,LIGHTING\n\t,PAVING\n\t,PUMPING\n\t,TRANSPORTING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConstructionMaterialResourceTypeEnum = ENUMERATION OF\n\t(AGGREGATES\n\t,CONCRETE\n\t,DRYWALL\n\t,FUEL\n\t,GYPSUM\n\t,MASONRY\n\t,METAL\n\t,PLASTIC\n\t,WOOD\n\t,NOTDEFINED\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcConstructionProductResourceTypeEnum = ENUMERATION OF\n\t(ASSEMBLY\n\t,FORMWORK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcControllerTypeEnum = ENUMERATION OF\n\t(FLOATING\n\t,PROGRAMMABLE\n\t,PROPORTIONAL\n\t,MULTIPOSITION\n\t,TWOPOSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCooledBeamTypeEnum = ENUMERATION OF\n\t(ACTIVE\n\t,PASSIVE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoolingTowerTypeEnum = ENUMERATION OF\n\t(NATURALDRAFT\n\t,MECHANICALINDUCEDDRAFT\n\t,MECHANICALFORCEDDRAFT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCostItemTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCostScheduleTypeEnum = ENUMERATION OF\n\t(BUDGET\n\t,COSTPLAN\n\t,ESTIMATE\n\t,TENDER\n\t,PRICEDBILLOFQUANTITIES\n\t,UNPRICEDBILLOFQUANTITIES\n\t,SCHEDULEOFRATES\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoveringTypeEnum = ENUMERATION OF\n\t(CEILING\n\t,FLOORING\n\t,CLADDING\n\t,ROOFING\n\t,MOLDING\n\t,SKIRTINGBOARD\n\t,INSULATION\n\t,MEMBRANE\n\t,SLEEVING\n\t,WRAPPING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCrewResourceTypeEnum = ENUMERATION OF\n\t(OFFICE\n\t,SITE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCurtainWallTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCurveInterpolationEnum = ENUMERATION OF\n\t(LINEAR\n\t,LOG_LINEAR\n\t,LOG_LOG\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDamperTypeEnum = ENUMERATION OF\n\t(BACKDRAFTDAMPER\n\t,BALANCINGDAMPER\n\t,BLASTDAMPER\n\t,CONTROLDAMPER\n\t,FIREDAMPER\n\t,FIRESMOKEDAMPER\n\t,FUMEHOODEXHAUST\n\t,GRAVITYDAMPER\n\t,GRAVITYRELIEFDAMPER\n\t,RELIEFDAMPER\n\t,SMOKEDAMPER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDataOriginEnum = ENUMERATION OF\n\t(MEASURED\n\t,PREDICTED\n\t,SIMULATED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDerivedUnitEnum = ENUMERATION OF\n\t(ANGULARVELOCITYUNIT\n\t,AREADENSITYUNIT\n\t,COMPOUNDPLANEANGLEUNIT\n\t,DYNAMICVISCOSITYUNIT\n\t,HEATFLUXDENSITYUNIT\n\t,INTEGERCOUNTRATEUNIT\n\t,ISOTHERMALMOISTURECAPACITYUNIT\n\t,KINEMATICVISCOSITYUNIT\n\t,LINEARVELOCITYUNIT\n\t,MASSDENSITYUNIT\n\t,MASSFLOWRATEUNIT\n\t,MOISTUREDIFFUSIVITYUNIT\n\t,MOLECULARWEIGHTUNIT\n\t,SPECIFICHEATCAPACITYUNIT\n\t,THERMALADMITTANCEUNIT\n\t,THERMALCONDUCTANCEUNIT\n\t,THERMALRESISTANCEUNIT\n\t,THERMALTRANSMITTANCEUNIT\n\t,VAPORPERMEABILITYUNIT\n\t,VOLUMETRICFLOWRATEUNIT\n\t,ROTATIONALFREQUENCYUNIT\n\t,TORQUEUNIT\n\t,MOMENTOFINERTIAUNIT\n\t,LINEARMOMENTUNIT\n\t,LINEARFORCEUNIT\n\t,PLANARFORCEUNIT\n\t,MODULUSOFELASTICITYUNIT\n\t,SHEARMODULUSUNIT\n\t,LINEARSTIFFNESSUNIT\n\t,ROTATIONALSTIFFNESSUNIT\n\t,MODULUSOFSUBGRADEREACTIONUNIT\n\t,ACCELERATIONUNIT\n\t,CURVATUREUNIT\n\t,HEATINGVALUEUNIT\n\t,IONCONCENTRATIONUNIT\n\t,LUMINOUSINTENSITYDISTRIBUTIONUNIT\n\t,MASSPERLENGTHUNIT\n\t,MODULUSOFLINEARSUBGRADEREACTIONUNIT\n\t,MODULUSOFROTATIONALSUBGRADEREACTIONUNIT\n\t,PHUNIT\n\t,ROTATIONALMASSUNIT\n\t,SECTIONAREAINTEGRALUNIT\n\t,SECTIONMODULUSUNIT\n\t,SOUNDPOWERLEVELUNIT\n\t,SOUNDPOWERUNIT\n\t,SOUNDPRESSURELEVELUNIT\n\t,SOUNDPRESSUREUNIT\n\t,TEMPERATUREGRADIENTUNIT\n\t,TEMPERATURERATEOFCHANGEUNIT\n\t,THERMALEXPANSIONCOEFFICIENTUNIT\n\t,WARPINGCONSTANTUNIT\n\t,WARPINGMOMENTUNIT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcDirectionSenseEnum = ENUMERATION OF\n\t(POSITIVE\n\t,NEGATIVE);\nEND_TYPE;\n\nTYPE IfcDiscreteAccessoryTypeEnum = ENUMERATION OF\n\t(ANCHORPLATE\n\t,BRACKET\n\t,SHOE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDistributionChamberElementTypeEnum = ENUMERATION OF\n\t(FORMEDDUCT\n\t,INSPECTIONCHAMBER\n\t,INSPECTIONPIT\n\t,MANHOLE\n\t,METERCHAMBER\n\t,SUMP\n\t,TRENCH\n\t,VALVECHAMBER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDistributionPortTypeEnum = ENUMERATION OF\n\t(CABLE\n\t,CABLECARRIER\n\t,DUCT\n\t,PIPE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDistributionSystemEnum = ENUMERATION OF\n\t(AIRCONDITIONING\n\t,AUDIOVISUAL\n\t,CHEMICAL\n\t,CHILLEDWATER\n\t,COMMUNICATION\n\t,COMPRESSEDAIR\n\t,CONDENSERWATER\n\t,CONTROL\n\t,CONVEYING\n\t,DATA\n\t,DISPOSAL\n\t,DOMESTICCOLDWATER\n\t,DOMESTICHOTWATER\n\t,DRAINAGE\n\t,EARTHING\n\t,ELECTRICAL\n\t,ELECTROACOUSTIC\n\t,EXHAUST\n\t,FIREPROTECTION\n\t,FUEL\n\t,GAS\n\t,HAZARDOUS\n\t,HEATING\n\t,LIGHTING\n\t,LIGHTNINGPROTECTION\n\t,MUNICIPALSOLIDWASTE\n\t,OIL\n\t,OPERATIONAL\n\t,POWERGENERATION\n\t,RAINWATER\n\t,REFRIGERATION\n\t,SECURITY\n\t,SEWAGE\n\t,SIGNAL\n\t,STORMWATER\n\t,TELEPHONE\n\t,TV\n\t,VACUUM\n\t,VENT\n\t,VENTILATION\n\t,WASTEWATER\n\t,WATERSUPPLY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDocumentConfidentialityEnum = ENUMERATION OF\n\t(PUBLIC\n\t,RESTRICTED\n\t,CONFIDENTIAL\n\t,PERSONAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDocumentStatusEnum = ENUMERATION OF\n\t(DRAFT\n\t,FINALDRAFT\n\t,FINAL\n\t,REVISION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorPanelOperationEnum = ENUMERATION OF\n\t(SWINGING\n\t,DOUBLE_ACTING\n\t,SLIDING\n\t,FOLDING\n\t,REVOLVING\n\t,ROLLINGUP\n\t,FIXEDPANEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorPanelPositionEnum = ENUMERATION OF\n\t(LEFT\n\t,MIDDLE\n\t,RIGHT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorStyleConstructionEnum = ENUMERATION OF\n\t(ALUMINIUM\n\t,HIGH_GRADE_STEEL\n\t,STEEL\n\t,WOOD\n\t,ALUMINIUM_WOOD\n\t,ALUMINIUM_PLASTIC\n\t,PLASTIC\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorStyleOperationEnum = ENUMERATION OF\n\t(SINGLE_SWING_LEFT\n\t,SINGLE_SWING_RIGHT\n\t,DOUBLE_DOOR_SINGLE_SWING\n\t,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT\n\t,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT\n\t,DOUBLE_SWING_LEFT\n\t,DOUBLE_SWING_RIGHT\n\t,DOUBLE_DOOR_DOUBLE_SWING\n\t,SLIDING_TO_LEFT\n\t,SLIDING_TO_RIGHT\n\t,DOUBLE_DOOR_SLIDING\n\t,FOLDING_TO_LEFT\n\t,FOLDING_TO_RIGHT\n\t,DOUBLE_DOOR_FOLDING\n\t,REVOLVING\n\t,ROLLINGUP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorTypeEnum = ENUMERATION OF\n\t(DOOR\n\t,GATE\n\t,TRAPDOOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorTypeOperationEnum = ENUMERATION OF\n\t(SINGLE_SWING_LEFT\n\t,SINGLE_SWING_RIGHT\n\t,DOUBLE_DOOR_SINGLE_SWING\n\t,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT\n\t,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT\n\t,DOUBLE_SWING_LEFT\n\t,DOUBLE_SWING_RIGHT\n\t,DOUBLE_DOOR_DOUBLE_SWING\n\t,SLIDING_TO_LEFT\n\t,SLIDING_TO_RIGHT\n\t,DOUBLE_DOOR_SLIDING\n\t,FOLDING_TO_LEFT\n\t,FOLDING_TO_RIGHT\n\t,DOUBLE_DOOR_FOLDING\n\t,REVOLVING\n\t,ROLLINGUP\n\t,SWING_FIXED_LEFT\n\t,SWING_FIXED_RIGHT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CONNECTOR\n\t,ENTRY\n\t,EXIT\n\t,JUNCTION\n\t,OBSTRUCTION\n\t,TRANSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctSegmentTypeEnum = ENUMERATION OF\n\t(RIGIDSEGMENT\n\t,FLEXIBLESEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctSilencerTypeEnum = ENUMERATION OF\n\t(FLATOVAL\n\t,RECTANGULAR\n\t,ROUND\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricApplianceTypeEnum = ENUMERATION OF\n\t(DISHWASHER\n\t,ELECTRICCOOKER\n\t,FREESTANDINGELECTRICHEATER\n\t,FREESTANDINGFAN\n\t,FREESTANDINGWATERHEATER\n\t,FREESTANDINGWATERCOOLER\n\t,FREEZER\n\t,FRIDGE_FREEZER\n\t,HANDDRYER\n\t,KITCHENMACHINE\n\t,MICROWAVE\n\t,PHOTOCOPIER\n\t,REFRIGERATOR\n\t,TUMBLEDRYER\n\t,VENDINGMACHINE\n\t,WASHINGMACHINE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricDistributionBoardTypeEnum = ENUMERATION OF\n\t(CONSUMERUNIT\n\t,DISTRIBUTIONBOARD\n\t,MOTORCONTROLCENTRE\n\t,SWITCHBOARD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricFlowStorageDeviceTypeEnum = ENUMERATION OF\n\t(BATTERY\n\t,CAPACITORBANK\n\t,HARMONICFILTER\n\t,INDUCTORBANK\n\t,UPS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricGeneratorTypeEnum = ENUMERATION OF\n\t(CHP\n\t,ENGINEGENERATOR\n\t,STANDALONE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricMotorTypeEnum = ENUMERATION OF\n\t(DC\n\t,INDUCTION\n\t,POLYPHASE\n\t,RELUCTANCESYNCHRONOUS\n\t,SYNCHRONOUS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricTimeControlTypeEnum = ENUMERATION OF\n\t(TIMECLOCK\n\t,TIMEDELAY\n\t,RELAY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElementAssemblyTypeEnum = ENUMERATION OF\n\t(ACCESSORY_ASSEMBLY\n\t,ARCH\n\t,BEAM_GRID\n\t,BRACED_FRAME\n\t,GIRDER\n\t,REINFORCEMENT_UNIT\n\t,RIGID_FRAME\n\t,SLAB_FIELD\n\t,TRUSS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElementCompositionEnum = ENUMERATION OF\n\t(COMPLEX\n\t,ELEMENT\n\t,PARTIAL);\nEND_TYPE;\n\nTYPE IfcEngineTypeEnum = ENUMERATION OF\n\t(EXTERNALCOMBUSTION\n\t,INTERNALCOMBUSTION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEvaporativeCoolerTypeEnum = ENUMERATION OF\n\t(DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER\n\t,DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER\n\t,DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER\n\t,DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER\n\t,DIRECTEVAPORATIVEAIRWASHER\n\t,INDIRECTEVAPORATIVEPACKAGEAIRCOOLER\n\t,INDIRECTEVAPORATIVEWETCOIL\n\t,INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER\n\t,INDIRECTDIRECTCOMBINATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEvaporatorTypeEnum = ENUMERATION OF\n\t(DIRECTEXPANSION\n\t,DIRECTEXPANSIONSHELLANDTUBE\n\t,DIRECTEXPANSIONTUBEINTUBE\n\t,DIRECTEXPANSIONBRAZEDPLATE\n\t,FLOODEDSHELLANDTUBE\n\t,SHELLANDCOIL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEventTriggerTypeEnum = ENUMERATION OF\n\t(EVENTRULE\n\t,EVENTMESSAGE\n\t,EVENTTIME\n\t,EVENTCOMPLEX\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEventTypeEnum = ENUMERATION OF\n\t(STARTEVENT\n\t,ENDEVENT\n\t,INTERMEDIATEEVENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcExternalSpatialElementTypeEnum = ENUMERATION OF\n\t(EXTERNAL\n\t,EXTERNAL_EARTH\n\t,EXTERNAL_WATER\n\t,EXTERNAL_FIRE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFanTypeEnum = ENUMERATION OF\n\t(CENTRIFUGALFORWARDCURVED\n\t,CENTRIFUGALRADIAL\n\t,CENTRIFUGALBACKWARDINCLINEDCURVED\n\t,CENTRIFUGALAIRFOIL\n\t,TUBEAXIAL\n\t,VANEAXIAL\n\t,PROPELLORAXIAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFastenerTypeEnum = ENUMERATION OF\n\t(GLUE\n\t,MORTAR\n\t,WELD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFilterTypeEnum = ENUMERATION OF\n\t(AIRPARTICLEFILTER\n\t,COMPRESSEDAIRFILTER\n\t,ODORFILTER\n\t,OILFILTER\n\t,STRAINER\n\t,WATERFILTER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFireSuppressionTerminalTypeEnum = ENUMERATION OF\n\t(BREECHINGINLET\n\t,FIREHYDRANT\n\t,HOSEREEL\n\t,SPRINKLER\n\t,SPRINKLERDEFLECTOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowDirectionEnum = ENUMERATION OF\n\t(SOURCE\n\t,SINK\n\t,SOURCEANDSINK\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowInstrumentTypeEnum = ENUMERATION OF\n\t(PRESSUREGAUGE\n\t,THERMOMETER\n\t,AMMETER\n\t,FREQUENCYMETER\n\t,POWERFACTORMETER\n\t,PHASEANGLEMETER\n\t,VOLTMETER_PEAK\n\t,VOLTMETER_RMS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowMeterTypeEnum = ENUMERATION OF\n\t(ENERGYMETER\n\t,GASMETER\n\t,OILMETER\n\t,WATERMETER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFootingTypeEnum = ENUMERATION OF\n\t(CAISSON_FOUNDATION\n\t,FOOTING_BEAM\n\t,PAD_FOOTING\n\t,PILE_CAP\n\t,STRIP_FOOTING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFurnitureTypeEnum = ENUMERATION OF\n\t(CHAIR\n\t,TABLE\n\t,DESK\n\t,BED\n\t,FILECABINET\n\t,SHELF\n\t,SOFA\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGeographicElementTypeEnum = ENUMERATION OF\n\t(TERRAIN\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGeometricProjectionEnum = ENUMERATION OF\n\t(GRAPH_VIEW\n\t,SKETCH_VIEW\n\t,MODEL_VIEW\n\t,PLAN_VIEW\n\t,REFLECTED_PLAN_VIEW\n\t,SECTION_VIEW\n\t,ELEVATION_VIEW\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGlobalOrLocalEnum = ENUMERATION OF\n\t(GLOBAL_COORDS\n\t,LOCAL_COORDS);\nEND_TYPE;\n\nTYPE IfcGridTypeEnum = ENUMERATION OF\n\t(RECTANGULAR\n\t,RADIAL\n\t,TRIANGULAR\n\t,IRREGULAR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcHeatExchangerTypeEnum = ENUMERATION OF\n\t(PLATE\n\t,SHELLANDTUBE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcHumidifierTypeEnum = ENUMERATION OF\n\t(STEAMINJECTION\n\t,ADIABATICAIRWASHER\n\t,ADIABATICPAN\n\t,ADIABATICWETTEDELEMENT\n\t,ADIABATICATOMIZING\n\t,ADIABATICULTRASONIC\n\t,ADIABATICRIGIDMEDIA\n\t,ADIABATICCOMPRESSEDAIRNOZZLE\n\t,ASSISTEDELECTRIC\n\t,ASSISTEDNATURALGAS\n\t,ASSISTEDPROPANE\n\t,ASSISTEDBUTANE\n\t,ASSISTEDSTEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcInterceptorTypeEnum = ENUMERATION OF\n\t(CYCLONIC\n\t,GREASE\n\t,OIL\n\t,PETROL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcInternalOrExternalEnum = ENUMERATION OF\n\t(INTERNAL\n\t,EXTERNAL\n\t,EXTERNAL_EARTH\n\t,EXTERNAL_WATER\n\t,EXTERNAL_FIRE\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcInventoryTypeEnum = ENUMERATION OF\n\t(ASSETINVENTORY\n\t,SPACEINVENTORY\n\t,FURNITUREINVENTORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcJunctionBoxTypeEnum = ENUMERATION OF\n\t(DATA\n\t,POWER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcKnotType = ENUMERATION OF\n\t(UNIFORM_KNOTS\n\t,QUASI_UNIFORM_KNOTS\n\t,PIECEWISE_BEZIER_KNOTS\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcLaborResourceTypeEnum = ENUMERATION OF\n\t(ADMINISTRATION\n\t,CARPENTRY\n\t,CLEANING\n\t,CONCRETE\n\t,DRYWALL\n\t,ELECTRIC\n\t,FINISHING\n\t,FLOORING\n\t,GENERAL\n\t,HVAC\n\t,LANDSCAPING\n\t,MASONRY\n\t,PAINTING\n\t,PAVING\n\t,PLUMBING\n\t,ROOFING\n\t,SITEGRADING\n\t,STEELWORK\n\t,SURVEYING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLampTypeEnum = ENUMERATION OF\n\t(COMPACTFLUORESCENT\n\t,FLUORESCENT\n\t,HALOGEN\n\t,HIGHPRESSUREMERCURY\n\t,HIGHPRESSURESODIUM\n\t,LED\n\t,METALHALIDE\n\t,OLED\n\t,TUNGSTENFILAMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLayerSetDirectionEnum = ENUMERATION OF\n\t(AXIS1\n\t,AXIS2\n\t,AXIS3);\nEND_TYPE;\n\nTYPE IfcLightDistributionCurveEnum = ENUMERATION OF\n\t(TYPE_A\n\t,TYPE_B\n\t,TYPE_C\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLightEmissionSourceEnum = ENUMERATION OF\n\t(COMPACTFLUORESCENT\n\t,FLUORESCENT\n\t,HIGHPRESSUREMERCURY\n\t,HIGHPRESSURESODIUM\n\t,LIGHTEMITTINGDIODE\n\t,LOWPRESSURESODIUM\n\t,LOWVOLTAGEHALOGEN\n\t,MAINVOLTAGEHALOGEN\n\t,METALHALIDE\n\t,TUNGSTENFILAMENT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLightFixtureTypeEnum = ENUMERATION OF\n\t(POINTSOURCE\n\t,DIRECTIONSOURCE\n\t,SECURITYLIGHTING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLoadGroupTypeEnum = ENUMERATION OF\n\t(LOAD_GROUP\n\t,LOAD_CASE\n\t,LOAD_COMBINATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLogicalOperatorEnum = ENUMERATION OF\n\t(LOGICALAND\n\t,LOGICALOR\n\t,LOGICALXOR\n\t,LOGICALNOTAND\n\t,LOGICALNOTOR);\nEND_TYPE;\n\nTYPE IfcMechanicalFastenerTypeEnum = ENUMERATION OF\n\t(ANCHORBOLT\n\t,BOLT\n\t,DOWEL\n\t,NAIL\n\t,NAILPLATE\n\t,RIVET\n\t,SCREW\n\t,SHEARCONNECTOR\n\t,STAPLE\n\t,STUDSHEARCONNECTOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcMedicalDeviceTypeEnum = ENUMERATION OF\n\t(AIRSTATION\n\t,FEEDAIRUNIT\n\t,OXYGENGENERATOR\n\t,OXYGENPLANT\n\t,VACUUMSTATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcMemberTypeEnum = ENUMERATION OF\n\t(BRACE\n\t,CHORD\n\t,COLLAR\n\t,MEMBER\n\t,MULLION\n\t,PLATE\n\t,POST\n\t,PURLIN\n\t,RAFTER\n\t,STRINGER\n\t,STRUT\n\t,STUD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcMotorConnectionTypeEnum = ENUMERATION OF\n\t(BELTDRIVE\n\t,COUPLING\n\t,DIRECTDRIVE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcNullStyle = ENUMERATION OF\n\t(NULL);\nEND_TYPE;\n\nTYPE IfcObjectTypeEnum = ENUMERATION OF\n\t(PRODUCT\n\t,PROCESS\n\t,CONTROL\n\t,RESOURCE\n\t,ACTOR\n\t,GROUP\n\t,PROJECT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcObjectiveEnum = ENUMERATION OF\n\t(CODECOMPLIANCE\n\t,CODEWAIVER\n\t,DESIGNINTENT\n\t,EXTERNAL\n\t,HEALTHANDSAFETY\n\t,MERGECONFLICT\n\t,MODELVIEW\n\t,PARAMETER\n\t,REQUIREMENT\n\t,SPECIFICATION\n\t,TRIGGERCONDITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcOccupantTypeEnum = ENUMERATION OF\n\t(ASSIGNEE\n\t,ASSIGNOR\n\t,LESSEE\n\t,LESSOR\n\t,LETTINGAGENT\n\t,OWNER\n\t,TENANT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcOpeningElementTypeEnum = ENUMERATION OF\n\t(OPENING\n\t,RECESS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcOutletTypeEnum = ENUMERATION OF\n\t(AUDIOVISUALOUTLET\n\t,COMMUNICATIONSOUTLET\n\t,POWEROUTLET\n\t,DATAOUTLET\n\t,TELEPHONEOUTLET\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPerformanceHistoryTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPermeableCoveringOperationEnum = ENUMERATION OF\n\t(GRILL\n\t,LOUVER\n\t,SCREEN\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPermitTypeEnum = ENUMERATION OF\n\t(ACCESS\n\t,BUILDING\n\t,WORK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPhysicalOrVirtualEnum = ENUMERATION OF\n\t(PHYSICAL\n\t,VIRTUAL\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPileConstructionEnum = ENUMERATION OF\n\t(CAST_IN_PLACE\n\t,COMPOSITE\n\t,PRECAST_CONCRETE\n\t,PREFAB_STEEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPileTypeEnum = ENUMERATION OF\n\t(BORED\n\t,DRIVEN\n\t,JETGROUTING\n\t,COHESION\n\t,FRICTION\n\t,SUPPORT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPipeFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CONNECTOR\n\t,ENTRY\n\t,EXIT\n\t,JUNCTION\n\t,OBSTRUCTION\n\t,TRANSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPipeSegmentTypeEnum = ENUMERATION OF\n\t(CULVERT\n\t,FLEXIBLESEGMENT\n\t,RIGIDSEGMENT\n\t,GUTTER\n\t,SPOOL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPlateTypeEnum = ENUMERATION OF\n\t(CURTAIN_PANEL\n\t,SHEET\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPreferredSurfaceCurveRepresentation = ENUMERATION OF\n\t(CURVE3D\n\t,PCURVE_S1\n\t,PCURVE_S2);\nEND_TYPE;\n\nTYPE IfcProcedureTypeEnum = ENUMERATION OF\n\t(ADVICE_CAUTION\n\t,ADVICE_NOTE\n\t,ADVICE_WARNING\n\t,CALIBRATION\n\t,DIAGNOSTIC\n\t,SHUTDOWN\n\t,STARTUP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProfileTypeEnum = ENUMERATION OF\n\t(CURVE\n\t,AREA);\nEND_TYPE;\n\nTYPE IfcProjectOrderTypeEnum = ENUMERATION OF\n\t(CHANGEORDER\n\t,MAINTENANCEWORKORDER\n\t,MOVEORDER\n\t,PURCHASEORDER\n\t,WORKORDER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProjectedOrTrueLengthEnum = ENUMERATION OF\n\t(PROJECTED_LENGTH\n\t,TRUE_LENGTH);\nEND_TYPE;\n\nTYPE IfcProjectionElementTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPropertySetTemplateTypeEnum = ENUMERATION OF\n\t(PSET_TYPEDRIVENONLY\n\t,PSET_TYPEDRIVENOVERRIDE\n\t,PSET_OCCURRENCEDRIVEN\n\t,PSET_PERFORMANCEDRIVEN\n\t,QTO_TYPEDRIVENONLY\n\t,QTO_TYPEDRIVENOVERRIDE\n\t,QTO_OCCURRENCEDRIVEN\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProtectiveDeviceTrippingUnitTypeEnum = ENUMERATION OF\n\t(ELECTRONIC\n\t,ELECTROMAGNETIC\n\t,RESIDUALCURRENT\n\t,THERMAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProtectiveDeviceTypeEnum = ENUMERATION OF\n\t(CIRCUITBREAKER\n\t,EARTHLEAKAGECIRCUITBREAKER\n\t,EARTHINGSWITCH\n\t,FUSEDISCONNECTOR\n\t,RESIDUALCURRENTCIRCUITBREAKER\n\t,RESIDUALCURRENTSWITCH\n\t,VARISTOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPumpTypeEnum = ENUMERATION OF\n\t(CIRCULATOR\n\t,ENDSUCTION\n\t,SPLITCASE\n\t,SUBMERSIBLEPUMP\n\t,SUMPPUMP\n\t,VERTICALINLINE\n\t,VERTICALTURBINE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRailingTypeEnum = ENUMERATION OF\n\t(HANDRAIL\n\t,GUARDRAIL\n\t,BALUSTRADE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRampFlightTypeEnum = ENUMERATION OF\n\t(STRAIGHT\n\t,SPIRAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRampTypeEnum = ENUMERATION OF\n\t(STRAIGHT_RUN_RAMP\n\t,TWO_STRAIGHT_RUN_RAMP\n\t,QUARTER_TURN_RAMP\n\t,TWO_QUARTER_TURN_RAMP\n\t,HALF_TURN_RAMP\n\t,SPIRAL_RAMP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRecurrenceTypeEnum = ENUMERATION OF\n\t(DAILY\n\t,WEEKLY\n\t,MONTHLY_BY_DAY_OF_MONTH\n\t,MONTHLY_BY_POSITION\n\t,BY_DAY_COUNT\n\t,BY_WEEKDAY_COUNT\n\t,YEARLY_BY_DAY_OF_MONTH\n\t,YEARLY_BY_POSITION);\nEND_TYPE;\n\nTYPE IfcReflectanceMethodEnum = ENUMERATION OF\n\t(BLINN\n\t,FLAT\n\t,GLASS\n\t,MATT\n\t,METAL\n\t,MIRROR\n\t,PHONG\n\t,PLASTIC\n\t,STRAUSS\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReinforcingBarRoleEnum = ENUMERATION OF\n\t(MAIN\n\t,SHEAR\n\t,LIGATURE\n\t,STUD\n\t,PUNCHING\n\t,EDGE\n\t,RING\n\t,ANCHORING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReinforcingBarSurfaceEnum = ENUMERATION OF\n\t(PLAIN\n\t,TEXTURED);\nEND_TYPE;\n\nTYPE IfcReinforcingBarTypeEnum = ENUMERATION OF\n\t(ANCHORING\n\t,EDGE\n\t,LIGATURE\n\t,MAIN\n\t,PUNCHING\n\t,RING\n\t,SHEAR\n\t,STUD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReinforcingMeshTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRoleEnum = ENUMERATION OF\n\t(SUPPLIER\n\t,MANUFACTURER\n\t,CONTRACTOR\n\t,SUBCONTRACTOR\n\t,ARCHITECT\n\t,STRUCTURALENGINEER\n\t,COSTENGINEER\n\t,CLIENT\n\t,BUILDINGOWNER\n\t,BUILDINGOPERATOR\n\t,MECHANICALENGINEER\n\t,ELECTRICALENGINEER\n\t,PROJECTMANAGER\n\t,FACILITIESMANAGER\n\t,CIVILENGINEER\n\t,COMMISSIONINGENGINEER\n\t,ENGINEER\n\t,OWNER\n\t,CONSULTANT\n\t,CONSTRUCTIONMANAGER\n\t,FIELDCONSTRUCTIONMANAGER\n\t,RESELLER\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcRoofTypeEnum = ENUMERATION OF\n\t(FLAT_ROOF\n\t,SHED_ROOF\n\t,GABLE_ROOF\n\t,HIP_ROOF\n\t,HIPPED_GABLE_ROOF\n\t,GAMBREL_ROOF\n\t,MANSARD_ROOF\n\t,BARREL_ROOF\n\t,RAINBOW_ROOF\n\t,BUTTERFLY_ROOF\n\t,PAVILION_ROOF\n\t,DOME_ROOF\n\t,FREEFORM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSIPrefix = ENUMERATION OF\n\t(EXA\n\t,PETA\n\t,TERA\n\t,GIGA\n\t,MEGA\n\t,KILO\n\t,HECTO\n\t,DECA\n\t,DECI\n\t,CENTI\n\t,MILLI\n\t,MICRO\n\t,NANO\n\t,PICO\n\t,FEMTO\n\t,ATTO);\nEND_TYPE;\n\nTYPE IfcSIUnitName = ENUMERATION OF\n\t(AMPERE\n\t,BECQUEREL\n\t,CANDELA\n\t,COULOMB\n\t,CUBIC_METRE\n\t,DEGREE_CELSIUS\n\t,FARAD\n\t,GRAM\n\t,GRAY\n\t,HENRY\n\t,HERTZ\n\t,JOULE\n\t,KELVIN\n\t,LUMEN\n\t,LUX\n\t,METRE\n\t,MOLE\n\t,NEWTON\n\t,OHM\n\t,PASCAL\n\t,RADIAN\n\t,SECOND\n\t,SIEMENS\n\t,SIEVERT\n\t,SQUARE_METRE\n\t,STERADIAN\n\t,TESLA\n\t,VOLT\n\t,WATT\n\t,WEBER);\nEND_TYPE;\n\nTYPE IfcSanitaryTerminalTypeEnum = ENUMERATION OF\n\t(BATH\n\t,BIDET\n\t,CISTERN\n\t,SHOWER\n\t,SINK\n\t,SANITARYFOUNTAIN\n\t,TOILETPAN\n\t,URINAL\n\t,WASHHANDBASIN\n\t,WCSEAT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSectionTypeEnum = ENUMERATION OF\n\t(UNIFORM\n\t,TAPERED);\nEND_TYPE;\n\nTYPE IfcSensorTypeEnum = ENUMERATION OF\n\t(COSENSOR\n\t,CO2SENSOR\n\t,CONDUCTANCESENSOR\n\t,CONTACTSENSOR\n\t,FIRESENSOR\n\t,FLOWSENSOR\n\t,FROSTSENSOR\n\t,GASSENSOR\n\t,HEATSENSOR\n\t,HUMIDITYSENSOR\n\t,IDENTIFIERSENSOR\n\t,IONCONCENTRATIONSENSOR\n\t,LEVELSENSOR\n\t,LIGHTSENSOR\n\t,MOISTURESENSOR\n\t,MOVEMENTSENSOR\n\t,PHSENSOR\n\t,PRESSURESENSOR\n\t,RADIATIONSENSOR\n\t,RADIOACTIVITYSENSOR\n\t,SMOKESENSOR\n\t,SOUNDSENSOR\n\t,TEMPERATURESENSOR\n\t,WINDSENSOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSequenceEnum = ENUMERATION OF\n\t(START_START\n\t,START_FINISH\n\t,FINISH_START\n\t,FINISH_FINISH\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcShadingDeviceTypeEnum = ENUMERATION OF\n\t(JALOUSIE\n\t,SHUTTER\n\t,AWNING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSimplePropertyTemplateTypeEnum = ENUMERATION OF\n\t(P_SINGLEVALUE\n\t,P_ENUMERATEDVALUE\n\t,P_BOUNDEDVALUE\n\t,P_LISTVALUE\n\t,P_TABLEVALUE\n\t,P_REFERENCEVALUE\n\t,Q_LENGTH\n\t,Q_AREA\n\t,Q_VOLUME\n\t,Q_COUNT\n\t,Q_WEIGHT\n\t,Q_TIME);\nEND_TYPE;\n\nTYPE IfcSlabTypeEnum = ENUMERATION OF\n\t(FLOOR\n\t,ROOF\n\t,LANDING\n\t,BASESLAB\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSolarDeviceTypeEnum = ENUMERATION OF\n\t(SOLARCOLLECTOR\n\t,SOLARPANEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSpaceHeaterTypeEnum = ENUMERATION OF\n\t(CONVECTOR\n\t,RADIATOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSpaceTypeEnum = ENUMERATION OF\n\t(SPACE\n\t,PARKING\n\t,GFA\n\t,INTERNAL\n\t,EXTERNAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSpatialZoneTypeEnum = ENUMERATION OF\n\t(CONSTRUCTION\n\t,FIRESAFETY\n\t,LIGHTING\n\t,OCCUPANCY\n\t,SECURITY\n\t,THERMAL\n\t,TRANSPORT\n\t,VENTILATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStackTerminalTypeEnum = ENUMERATION OF\n\t(BIRDCAGE\n\t,COWL\n\t,RAINWATERHOPPER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStairFlightTypeEnum = ENUMERATION OF\n\t(STRAIGHT\n\t,WINDER\n\t,SPIRAL\n\t,CURVED\n\t,FREEFORM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStairTypeEnum = ENUMERATION OF\n\t(STRAIGHT_RUN_STAIR\n\t,TWO_STRAIGHT_RUN_STAIR\n\t,QUARTER_WINDING_STAIR\n\t,QUARTER_TURN_STAIR\n\t,HALF_WINDING_STAIR\n\t,HALF_TURN_STAIR\n\t,TWO_QUARTER_WINDING_STAIR\n\t,TWO_QUARTER_TURN_STAIR\n\t,THREE_QUARTER_WINDING_STAIR\n\t,THREE_QUARTER_TURN_STAIR\n\t,SPIRAL_STAIR\n\t,DOUBLE_RETURN_STAIR\n\t,CURVED_RUN_STAIR\n\t,TWO_CURVED_RUN_STAIR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStateEnum = ENUMERATION OF\n\t(READWRITE\n\t,READONLY\n\t,LOCKED\n\t,READWRITELOCKED\n\t,READONLYLOCKED);\nEND_TYPE;\n\nTYPE IfcStructuralCurveActivityTypeEnum = ENUMERATION OF\n\t(CONST\n\t,LINEAR\n\t,POLYGONAL\n\t,EQUIDISTANT\n\t,SINUS\n\t,PARABOLA\n\t,DISCRETE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStructuralCurveMemberTypeEnum = ENUMERATION OF\n\t(RIGID_JOINED_MEMBER\n\t,PIN_JOINED_MEMBER\n\t,CABLE\n\t,TENSION_MEMBER\n\t,COMPRESSION_MEMBER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStructuralSurfaceActivityTypeEnum = ENUMERATION OF\n\t(CONST\n\t,BILINEAR\n\t,DISCRETE\n\t,ISOCONTOUR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStructuralSurfaceMemberTypeEnum = ENUMERATION OF\n\t(BENDING_ELEMENT\n\t,MEMBRANE_ELEMENT\n\t,SHELL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSubContractResourceTypeEnum = ENUMERATION OF\n\t(PURCHASE\n\t,WORK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSurfaceFeatureTypeEnum = ENUMERATION OF\n\t(MARK\n\t,TAG\n\t,TREATMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSurfaceSide = ENUMERATION OF\n\t(POSITIVE\n\t,NEGATIVE\n\t,BOTH);\nEND_TYPE;\n\nTYPE IfcSwitchingDeviceTypeEnum = ENUMERATION OF\n\t(CONTACTOR\n\t,DIMMERSWITCH\n\t,EMERGENCYSTOP\n\t,KEYPAD\n\t,MOMENTARYSWITCH\n\t,SELECTORSWITCH\n\t,STARTER\n\t,SWITCHDISCONNECTOR\n\t,TOGGLESWITCH\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSystemFurnitureElementTypeEnum = ENUMERATION OF\n\t(PANEL\n\t,WORKSURFACE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTankTypeEnum = ENUMERATION OF\n\t(BASIN\n\t,BREAKPRESSURE\n\t,EXPANSION\n\t,FEEDANDEXPANSION\n\t,PRESSUREVESSEL\n\t,STORAGE\n\t,VESSEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTaskDurationEnum = ENUMERATION OF\n\t(ELAPSEDTIME\n\t,WORKTIME\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTaskTypeEnum = ENUMERATION OF\n\t(ATTENDANCE\n\t,CONSTRUCTION\n\t,DEMOLITION\n\t,DISMANTLE\n\t,DISPOSAL\n\t,INSTALLATION\n\t,LOGISTIC\n\t,MAINTENANCE\n\t,MOVE\n\t,OPERATION\n\t,REMOVAL\n\t,RENOVATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTendonAnchorTypeEnum = ENUMERATION OF\n\t(COUPLER\n\t,FIXED_END\n\t,TENSIONING_END\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTendonTypeEnum = ENUMERATION OF\n\t(BAR\n\t,COATED\n\t,STRAND\n\t,WIRE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTextPath = ENUMERATION OF\n\t(LEFT\n\t,RIGHT\n\t,UP\n\t,DOWN);\nEND_TYPE;\n\nTYPE IfcTimeSeriesDataTypeEnum = ENUMERATION OF\n\t(CONTINUOUS\n\t,DISCRETE\n\t,DISCRETEBINARY\n\t,PIECEWISEBINARY\n\t,PIECEWISECONSTANT\n\t,PIECEWISECONTINUOUS\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTransformerTypeEnum = ENUMERATION OF\n\t(CURRENT\n\t,FREQUENCY\n\t,INVERTER\n\t,RECTIFIER\n\t,VOLTAGE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTransitionCode = ENUMERATION OF\n\t(DISCONTINUOUS\n\t,CONTINUOUS\n\t,CONTSAMEGRADIENT\n\t,CONTSAMEGRADIENTSAMECURVATURE);\nEND_TYPE;\n\nTYPE IfcTransportElementTypeEnum = ENUMERATION OF\n\t(ELEVATOR\n\t,ESCALATOR\n\t,MOVINGWALKWAY\n\t,CRANEWAY\n\t,LIFTINGGEAR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTrimmingPreference = ENUMERATION OF\n\t(CARTESIAN\n\t,PARAMETER\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcTubeBundleTypeEnum = ENUMERATION OF\n\t(FINNED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcUnitEnum = ENUMERATION OF\n\t(ABSORBEDDOSEUNIT\n\t,AMOUNTOFSUBSTANCEUNIT\n\t,AREAUNIT\n\t,DOSEEQUIVALENTUNIT\n\t,ELECTRICCAPACITANCEUNIT\n\t,ELECTRICCHARGEUNIT\n\t,ELECTRICCONDUCTANCEUNIT\n\t,ELECTRICCURRENTUNIT\n\t,ELECTRICRESISTANCEUNIT\n\t,ELECTRICVOLTAGEUNIT\n\t,ENERGYUNIT\n\t,FORCEUNIT\n\t,FREQUENCYUNIT\n\t,ILLUMINANCEUNIT\n\t,INDUCTANCEUNIT\n\t,LENGTHUNIT\n\t,LUMINOUSFLUXUNIT\n\t,LUMINOUSINTENSITYUNIT\n\t,MAGNETICFLUXDENSITYUNIT\n\t,MAGNETICFLUXUNIT\n\t,MASSUNIT\n\t,PLANEANGLEUNIT\n\t,POWERUNIT\n\t,PRESSUREUNIT\n\t,RADIOACTIVITYUNIT\n\t,SOLIDANGLEUNIT\n\t,THERMODYNAMICTEMPERATUREUNIT\n\t,TIMEUNIT\n\t,VOLUMEUNIT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcUnitaryControlElementTypeEnum = ENUMERATION OF\n\t(ALARMPANEL\n\t,CONTROLPANEL\n\t,GASDETECTIONPANEL\n\t,INDICATORPANEL\n\t,MIMICPANEL\n\t,HUMIDISTAT\n\t,THERMOSTAT\n\t,WEATHERSTATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcUnitaryEquipmentTypeEnum = ENUMERATION OF\n\t(AIRHANDLER\n\t,AIRCONDITIONINGUNIT\n\t,DEHUMIDIFIER\n\t,SPLITSYSTEM\n\t,ROOFTOPUNIT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcValveTypeEnum = ENUMERATION OF\n\t(AIRRELEASE\n\t,ANTIVACUUM\n\t,CHANGEOVER\n\t,CHECK\n\t,COMMISSIONING\n\t,DIVERTING\n\t,DRAWOFFCOCK\n\t,DOUBLECHECK\n\t,DOUBLEREGULATING\n\t,FAUCET\n\t,FLUSHING\n\t,GASCOCK\n\t,GASTAP\n\t,ISOLATING\n\t,MIXING\n\t,PRESSUREREDUCING\n\t,PRESSURERELIEF\n\t,REGULATING\n\t,SAFETYCUTOFF\n\t,STEAMTRAP\n\t,STOPCOCK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcVibrationIsolatorTypeEnum = ENUMERATION OF\n\t(COMPRESSION\n\t,SPRING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcVoidingFeatureTypeEnum = ENUMERATION OF\n\t(CUTOUT\n\t,NOTCH\n\t,HOLE\n\t,MITER\n\t,CHAMFER\n\t,EDGE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWallTypeEnum = ENUMERATION OF\n\t(MOVABLE\n\t,PARAPET\n\t,PARTITIONING\n\t,PLUMBINGWALL\n\t,SHEAR\n\t,SOLIDWALL\n\t,STANDARD\n\t,POLYGONAL\n\t,ELEMENTEDWALL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWasteTerminalTypeEnum = ENUMERATION OF\n\t(FLOORTRAP\n\t,FLOORWASTE\n\t,GULLYSUMP\n\t,GULLYTRAP\n\t,ROOFDRAIN\n\t,WASTEDISPOSALUNIT\n\t,WASTETRAP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowPanelOperationEnum = ENUMERATION OF\n\t(SIDEHUNGRIGHTHAND\n\t,SIDEHUNGLEFTHAND\n\t,TILTANDTURNRIGHTHAND\n\t,TILTANDTURNLEFTHAND\n\t,TOPHUNG\n\t,BOTTOMHUNG\n\t,PIVOTHORIZONTAL\n\t,PIVOTVERTICAL\n\t,SLIDINGHORIZONTAL\n\t,SLIDINGVERTICAL\n\t,REMOVABLECASEMENT\n\t,FIXEDCASEMENT\n\t,OTHEROPERATION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowPanelPositionEnum = ENUMERATION OF\n\t(LEFT\n\t,MIDDLE\n\t,RIGHT\n\t,BOTTOM\n\t,TOP\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowStyleConstructionEnum = ENUMERATION OF\n\t(ALUMINIUM\n\t,HIGH_GRADE_STEEL\n\t,STEEL\n\t,WOOD\n\t,ALUMINIUM_WOOD\n\t,PLASTIC\n\t,OTHER_CONSTRUCTION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowStyleOperationEnum = ENUMERATION OF\n\t(SINGLE_PANEL\n\t,DOUBLE_PANEL_VERTICAL\n\t,DOUBLE_PANEL_HORIZONTAL\n\t,TRIPLE_PANEL_VERTICAL\n\t,TRIPLE_PANEL_BOTTOM\n\t,TRIPLE_PANEL_TOP\n\t,TRIPLE_PANEL_LEFT\n\t,TRIPLE_PANEL_RIGHT\n\t,TRIPLE_PANEL_HORIZONTAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowTypeEnum = ENUMERATION OF\n\t(WINDOW\n\t,SKYLIGHT\n\t,LIGHTDOME\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowTypePartitioningEnum = ENUMERATION OF\n\t(SINGLE_PANEL\n\t,DOUBLE_PANEL_VERTICAL\n\t,DOUBLE_PANEL_HORIZONTAL\n\t,TRIPLE_PANEL_VERTICAL\n\t,TRIPLE_PANEL_BOTTOM\n\t,TRIPLE_PANEL_TOP\n\t,TRIPLE_PANEL_LEFT\n\t,TRIPLE_PANEL_RIGHT\n\t,TRIPLE_PANEL_HORIZONTAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWorkCalendarTypeEnum = ENUMERATION OF\n\t(FIRSTSHIFT\n\t,SECONDSHIFT\n\t,THIRDSHIFT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWorkPlanTypeEnum = ENUMERATION OF\n\t(ACTUAL\n\t,BASELINE\n\t,PLANNED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWorkScheduleTypeEnum = ENUMERATION OF\n\t(ACTUAL\n\t,BASELINE\n\t,PLANNED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActorSelect = SELECT\n\t(IfcOrganization\n\t,IfcPerson\n\t,IfcPersonAndOrganization);\nEND_TYPE;\n\nTYPE IfcAppliedValueSelect = SELECT\n\t(IfcMeasureWithUnit\n\t,IfcReference\n\t,IfcValue);\nEND_TYPE;\n\nTYPE IfcAxis2Placement = SELECT\n\t(IfcAxis2Placement2D\n\t,IfcAxis2Placement3D);\nEND_TYPE;\n\nTYPE IfcBendingParameterSelect = SELECT\n\t(IfcLengthMeasure\n\t,IfcPlaneAngleMeasure);\nEND_TYPE;\n\nTYPE IfcBooleanOperand = SELECT\n\t(IfcBooleanResult\n\t,IfcCsgPrimitive3D\n\t,IfcHalfSpaceSolid\n\t,IfcSolidModel\n\t,IfcTessellatedFaceSet);\nEND_TYPE;\n\nTYPE IfcClassificationReferenceSelect = SELECT\n\t(IfcClassification\n\t,IfcClassificationReference);\nEND_TYPE;\n\nTYPE IfcClassificationSelect = SELECT\n\t(IfcClassification\n\t,IfcClassificationReference);\nEND_TYPE;\n\nTYPE IfcColour = SELECT\n\t(IfcColourSpecification\n\t,IfcPreDefinedColour);\nEND_TYPE;\n\nTYPE IfcColourOrFactor = SELECT\n\t(IfcColourRgb\n\t,IfcNormalisedRatioMeasure);\nEND_TYPE;\n\nTYPE IfcCoordinateReferenceSystemSelect = SELECT\n\t(IfcCoordinateReferenceSystem\n\t,IfcGeometricRepresentationContext);\nEND_TYPE;\n\nTYPE IfcCsgSelect = SELECT\n\t(IfcBooleanResult\n\t,IfcCsgPrimitive3D);\nEND_TYPE;\n\nTYPE IfcCurveFontOrScaledCurveFontSelect = SELECT\n\t(IfcCurveStyleFontAndScaling\n\t,IfcCurveStyleFontSelect);\nEND_TYPE;\n\nTYPE IfcCurveOnSurface = SELECT\n\t(IfcCompositeCurveOnSurface\n\t,IfcPcurve\n\t,IfcSurfaceCurve);\nEND_TYPE;\n\nTYPE IfcCurveOrEdgeCurve = SELECT\n\t(IfcBoundedCurve\n\t,IfcEdgeCurve);\nEND_TYPE;\n\nTYPE IfcCurveStyleFontSelect = SELECT\n\t(IfcCurveStyleFont\n\t,IfcPreDefinedCurveFont);\nEND_TYPE;\n\nTYPE IfcDefinitionSelect = SELECT\n\t(IfcObjectDefinition\n\t,IfcPropertyDefinition);\nEND_TYPE;\n\nTYPE IfcDerivedMeasureValue = SELECT\n\t(IfcAbsorbedDoseMeasure\n\t,IfcAccelerationMeasure\n\t,IfcAngularVelocityMeasure\n\t,IfcAreaDensityMeasure\n\t,IfcCompoundPlaneAngleMeasure\n\t,IfcCurvatureMeasure\n\t,IfcDoseEquivalentMeasure\n\t,IfcDynamicViscosityMeasure\n\t,IfcElectricCapacitanceMeasure\n\t,IfcElectricChargeMeasure\n\t,IfcElectricConductanceMeasure\n\t,IfcElectricResistanceMeasure\n\t,IfcElectricVoltageMeasure\n\t,IfcEnergyMeasure\n\t,IfcForceMeasure\n\t,IfcFrequencyMeasure\n\t,IfcHeatFluxDensityMeasure\n\t,IfcHeatingValueMeasure\n\t,IfcIlluminanceMeasure\n\t,IfcInductanceMeasure\n\t,IfcIntegerCountRateMeasure\n\t,IfcIonConcentrationMeasure\n\t,IfcIsothermalMoistureCapacityMeasure\n\t,IfcKinematicViscosityMeasure\n\t,IfcLinearForceMeasure\n\t,IfcLinearMomentMeasure\n\t,IfcLinearStiffnessMeasure\n\t,IfcLinearVelocityMeasure\n\t,IfcLuminousFluxMeasure\n\t,IfcLuminousIntensityDistributionMeasure\n\t,IfcMagneticFluxDensityMeasure\n\t,IfcMagneticFluxMeasure\n\t,IfcMassDensityMeasure\n\t,IfcMassFlowRateMeasure\n\t,IfcMassPerLengthMeasure\n\t,IfcModulusOfElasticityMeasure\n\t,IfcModulusOfLinearSubgradeReactionMeasure\n\t,IfcModulusOfRotationalSubgradeReactionMeasure\n\t,IfcModulusOfSubgradeReactionMeasure\n\t,IfcMoistureDiffusivityMeasure\n\t,IfcMolecularWeightMeasure\n\t,IfcMomentOfInertiaMeasure\n\t,IfcMonetaryMeasure\n\t,IfcPHMeasure\n\t,IfcPlanarForceMeasure\n\t,IfcPowerMeasure\n\t,IfcPressureMeasure\n\t,IfcRadioActivityMeasure\n\t,IfcRotationalFrequencyMeasure\n\t,IfcRotationalMassMeasure\n\t,IfcRotationalStiffnessMeasure\n\t,IfcSectionModulusMeasure\n\t,IfcSectionalAreaIntegralMeasure\n\t,IfcShearModulusMeasure\n\t,IfcSoundPowerLevelMeasure\n\t,IfcSoundPowerMeasure\n\t,IfcSoundPressureLevelMeasure\n\t,IfcSoundPressureMeasure\n\t,IfcSpecificHeatCapacityMeasure\n\t,IfcTemperatureGradientMeasure\n\t,IfcTemperatureRateOfChangeMeasure\n\t,IfcThermalAdmittanceMeasure\n\t,IfcThermalConductivityMeasure\n\t,IfcThermalExpansionCoefficientMeasure\n\t,IfcThermalResistanceMeasure\n\t,IfcThermalTransmittanceMeasure\n\t,IfcTorqueMeasure\n\t,IfcVaporPermeabilityMeasure\n\t,IfcVolumetricFlowRateMeasure\n\t,IfcWarpingConstantMeasure\n\t,IfcWarpingMomentMeasure);\nEND_TYPE;\n\nTYPE IfcDocumentSelect = SELECT\n\t(IfcDocumentInformation\n\t,IfcDocumentReference);\nEND_TYPE;\n\nTYPE IfcFillStyleSelect = SELECT\n\t(IfcColour\n\t,IfcExternallyDefinedHatchStyle\n\t,IfcFillAreaStyleHatching\n\t,IfcFillAreaStyleTiles);\nEND_TYPE;\n\nTYPE IfcGeometricSetSelect = SELECT\n\t(IfcCurve\n\t,IfcPoint\n\t,IfcSurface);\nEND_TYPE;\n\nTYPE IfcGridPlacementDirectionSelect = SELECT\n\t(IfcDirection\n\t,IfcVirtualGridIntersection);\nEND_TYPE;\n\nTYPE IfcHatchLineDistanceSelect = SELECT\n\t(IfcPositiveLengthMeasure\n\t,IfcVector);\nEND_TYPE;\n\nTYPE IfcLayeredItem = SELECT\n\t(IfcRepresentation\n\t,IfcRepresentationItem);\nEND_TYPE;\n\nTYPE IfcLibrarySelect = SELECT\n\t(IfcLibraryInformation\n\t,IfcLibraryReference);\nEND_TYPE;\n\nTYPE IfcLightDistributionDataSourceSelect = SELECT\n\t(IfcExternalReference\n\t,IfcLightIntensityDistribution);\nEND_TYPE;\n\nTYPE IfcMaterialSelect = SELECT\n\t(IfcMaterialDefinition\n\t,IfcMaterialList\n\t,IfcMaterialUsageDefinition);\nEND_TYPE;\n\nTYPE IfcMeasureValue = SELECT\n\t(IfcAmountOfSubstanceMeasure\n\t,IfcAreaMeasure\n\t,IfcComplexNumber\n\t,IfcContextDependentMeasure\n\t,IfcCountMeasure\n\t,IfcDescriptiveMeasure\n\t,IfcElectricCurrentMeasure\n\t,IfcLengthMeasure\n\t,IfcLuminousIntensityMeasure\n\t,IfcMassMeasure\n\t,IfcNonNegativeLengthMeasure\n\t,IfcNormalisedRatioMeasure\n\t,IfcNumericMeasure\n\t,IfcParameterValue\n\t,IfcPlaneAngleMeasure\n\t,IfcPositiveLengthMeasure\n\t,IfcPositivePlaneAngleMeasure\n\t,IfcPositiveRatioMeasure\n\t,IfcRatioMeasure\n\t,IfcSolidAngleMeasure\n\t,IfcThermodynamicTemperatureMeasure\n\t,IfcTimeMeasure\n\t,IfcVolumeMeasure);\nEND_TYPE;\n\nTYPE IfcMetricValueSelect = SELECT\n\t(IfcAppliedValue\n\t,IfcMeasureWithUnit\n\t,IfcReference\n\t,IfcTable\n\t,IfcTimeSeries\n\t,IfcValue);\nEND_TYPE;\n\nTYPE IfcModulusOfRotationalSubgradeReactionSelect = SELECT\n\t(IfcBoolean\n\t,IfcModulusOfRotationalSubgradeReactionMeasure);\nEND_TYPE;\n\nTYPE IfcModulusOfSubgradeReactionSelect = SELECT\n\t(IfcBoolean\n\t,IfcModulusOfSubgradeReactionMeasure);\nEND_TYPE;\n\nTYPE IfcModulusOfTranslationalSubgradeReactionSelect = SELECT\n\t(IfcBoolean\n\t,IfcModulusOfLinearSubgradeReactionMeasure);\nEND_TYPE;\n\nTYPE IfcObjectReferenceSelect = SELECT\n\t(IfcAddress\n\t,IfcAppliedValue\n\t,IfcExternalReference\n\t,IfcMaterialDefinition\n\t,IfcOrganization\n\t,IfcPerson\n\t,IfcPersonAndOrganization\n\t,IfcTable\n\t,IfcTimeSeries);\nEND_TYPE;\n\nTYPE IfcPointOrVertexPoint = SELECT\n\t(IfcPoint\n\t,IfcVertexPoint);\nEND_TYPE;\n\nTYPE IfcPresentationStyleSelect = SELECT\n\t(IfcCurveStyle\n\t,IfcFillAreaStyle\n\t,IfcNullStyle\n\t,IfcSurfaceStyle\n\t,IfcTextStyle);\nEND_TYPE;\n\nTYPE IfcProcessSelect = SELECT\n\t(IfcProcess\n\t,IfcTypeProcess);\nEND_TYPE;\n\nTYPE IfcProductRepresentationSelect = SELECT\n\t(IfcProductDefinitionShape\n\t,IfcRepresentationMap);\nEND_TYPE;\n\nTYPE IfcProductSelect = SELECT\n\t(IfcProduct\n\t,IfcTypeProduct);\nEND_TYPE;\n\nTYPE IfcPropertySetDefinitionSelect = SELECT\n\t(IfcPropertySetDefinition\n\t,IfcPropertySetDefinitionSet);\nEND_TYPE;\n\nTYPE IfcResourceObjectSelect = SELECT\n\t(IfcActorRole\n\t,IfcAppliedValue\n\t,IfcApproval\n\t,IfcConstraint\n\t,IfcContextDependentUnit\n\t,IfcConversionBasedUnit\n\t,IfcExternalInformation\n\t,IfcExternalReference\n\t,IfcMaterialDefinition\n\t,IfcOrganization\n\t,IfcPerson\n\t,IfcPersonAndOrganization\n\t,IfcPhysicalQuantity\n\t,IfcProfileDef\n\t,IfcPropertyAbstraction\n\t,IfcTimeSeries);\nEND_TYPE;\n\nTYPE IfcResourceSelect = SELECT\n\t(IfcResource\n\t,IfcTypeResource);\nEND_TYPE;\n\nTYPE IfcRotationalStiffnessSelect = SELECT\n\t(IfcBoolean\n\t,IfcRotationalStiffnessMeasure);\nEND_TYPE;\n\nTYPE IfcSegmentIndexSelect = SELECT\n\t(IfcArcIndex\n\t,IfcLineIndex);\nEND_TYPE;\n\nTYPE IfcShell = SELECT\n\t(IfcClosedShell\n\t,IfcOpenShell);\nEND_TYPE;\n\nTYPE IfcSimpleValue = SELECT\n\t(IfcBinary\n\t,IfcBoolean\n\t,IfcDate\n\t,IfcDateTime\n\t,IfcDuration\n\t,IfcIdentifier\n\t,IfcInteger\n\t,IfcLabel\n\t,IfcLogical\n\t,IfcPositiveInteger\n\t,IfcReal\n\t,IfcText\n\t,IfcTime\n\t,IfcTimeStamp);\nEND_TYPE;\n\nTYPE IfcSizeSelect = SELECT\n\t(IfcDescriptiveMeasure\n\t,IfcLengthMeasure\n\t,IfcNormalisedRatioMeasure\n\t,IfcPositiveLengthMeasure\n\t,IfcPositiveRatioMeasure\n\t,IfcRatioMeasure);\nEND_TYPE;\n\nTYPE IfcSolidOrShell = SELECT\n\t(IfcClosedShell\n\t,IfcSolidModel);\nEND_TYPE;\n\nTYPE IfcSpaceBoundarySelect = SELECT\n\t(IfcExternalSpatialElement\n\t,IfcSpace);\nEND_TYPE;\n\nTYPE IfcSpecularHighlightSelect = SELECT\n\t(IfcSpecularExponent\n\t,IfcSpecularRoughness);\nEND_TYPE;\n\nTYPE IfcStructuralActivityAssignmentSelect = SELECT\n\t(IfcElement\n\t,IfcStructuralItem);\nEND_TYPE;\n\nTYPE IfcStyleAssignmentSelect = SELECT\n\t(IfcPresentationStyle\n\t,IfcPresentationStyleAssignment);\nEND_TYPE;\n\nTYPE IfcSurfaceOrFaceSurface = SELECT\n\t(IfcFaceBasedSurfaceModel\n\t,IfcFaceSurface\n\t,IfcSurface);\nEND_TYPE;\n\nTYPE IfcSurfaceStyleElementSelect = SELECT\n\t(IfcExternallyDefinedSurfaceStyle\n\t,IfcSurfaceStyleLighting\n\t,IfcSurfaceStyleRefraction\n\t,IfcSurfaceStyleShading\n\t,IfcSurfaceStyleWithTextures);\nEND_TYPE;\n\nTYPE IfcTextFontSelect = SELECT\n\t(IfcExternallyDefinedTextFont\n\t,IfcPreDefinedTextFont);\nEND_TYPE;\n\nTYPE IfcTimeOrRatioSelect = SELECT\n\t(IfcDuration\n\t,IfcRatioMeasure);\nEND_TYPE;\n\nTYPE IfcTranslationalStiffnessSelect = SELECT\n\t(IfcBoolean\n\t,IfcLinearStiffnessMeasure);\nEND_TYPE;\n\nTYPE IfcTrimmingSelect = SELECT\n\t(IfcCartesianPoint\n\t,IfcParameterValue);\nEND_TYPE;\n\nTYPE IfcUnit = SELECT\n\t(IfcDerivedUnit\n\t,IfcMonetaryUnit\n\t,IfcNamedUnit);\nEND_TYPE;\n\nTYPE IfcValue = SELECT\n\t(IfcDerivedMeasureValue\n\t,IfcMeasureValue\n\t,IfcSimpleValue);\nEND_TYPE;\n\nTYPE IfcVectorOrDirection = SELECT\n\t(IfcDirection\n\t,IfcVector);\nEND_TYPE;\n\nTYPE IfcWarpingStiffnessSelect = SELECT\n\t(IfcBoolean\n\t,IfcWarpingMomentMeasure);\nEND_TYPE;\n\nENTITY IfcActionRequest\n SUBTYPE OF (IfcControl);\n\tPredefinedType : OPTIONAL IfcActionRequestTypeEnum;\n\tStatus : OPTIONAL IfcLabel;\n\tLongDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcActor\n SUPERTYPE OF (ONEOF\n    (IfcOccupant))\n SUBTYPE OF (IfcObject);\n\tTheActor : IfcActorSelect;\n INVERSE\n\tIsActingUpon : SET [0:?] OF IfcRelAssignsToActor FOR RelatingActor;\nEND_ENTITY;\n\nENTITY IfcActorRole;\n\tRole : IfcRoleEnum;\n\tUserDefinedRole : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tHasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\n WHERE\n\tWR1 : (Role <> IfcRoleEnum.USERDEFINED) OR\n((Role = IfcRoleEnum.USERDEFINED) AND\n  EXISTS(SELF.UserDefinedRole));\nEND_ENTITY;\n\nENTITY IfcActuator\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcActuatorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcActuatorTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcActuatorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n('IFC4.IFCACTUATORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcActuatorType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcActuatorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcActuatorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcActuatorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAddress\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcPostalAddress\n    ,IfcTelecomAddress));\n\tPurpose : OPTIONAL IfcAddressTypeEnum;\n\tDescription : OPTIONAL IfcText;\n\tUserDefinedPurpose : OPTIONAL IfcLabel;\n INVERSE\n\tOfPerson : SET [0:?] OF IfcPerson FOR Addresses;\n\tOfOrganization : SET [0:?] OF IfcOrganization FOR Addresses;\n WHERE\n\tWR1 : (NOT(EXISTS(Purpose))) OR\n((Purpose <> IfcAddressTypeEnum.USERDEFINED) OR\n((Purpose = IfcAddressTypeEnum.USERDEFINED) AND\n  EXISTS(SELF.UserDefinedPurpose)));\nEND_ENTITY;\n\nENTITY IfcAdvancedBrep\n SUPERTYPE OF (ONEOF\n    (IfcAdvancedBrepWithVoids))\n SUBTYPE OF (IfcManifoldSolidBrep);\n WHERE\n\tHasAdvancedFaces : SIZEOF(QUERY(Afs <* SELF\\IfcManifoldSolidBrep.Outer.CfsFaces |\n  (NOT ('IFC4.IFCADVANCEDFACE' IN TYPEOF(Afs)))\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcAdvancedBrepWithVoids\n SUBTYPE OF (IfcAdvancedBrep);\n\tVoids : SET [1:?] OF IfcClosedShell;\n WHERE\n\tVoidsHaveAdvancedFaces : SIZEOF (QUERY (Vsh <* Voids |\n  SIZEOF (QUERY (Afs <* Vsh.CfsFaces |\n  (NOT ('IFC4.IFCADVANCEDFACE' IN TYPEOF(Afs)))\n  )) = 0\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcAdvancedFace\n SUBTYPE OF (IfcFaceSurface);\n WHERE\n\tApplicableSurface : SIZEOF (\n['IFC4.IFCELEMENTARYSURFACE',\n 'IFC4.IFCSWEPTSURFACE',\n 'IFC4.IFCBSPLINESURFACE'] *\nTYPEOF(SELF\\IfcFaceSurface.FaceSurface)) = 1;\n\tRequiresEdgeCurve : SIZEOF(QUERY (ElpFbnds <* \n  QUERY (Bnds <* SELF\\IfcFace.Bounds |\n    'IFC4.IFCEDGELOOP' IN TYPEOF(Bnds.Bound)) |\n     NOT (SIZEOF (QUERY (Oe <* ElpFbnds.Bound\\IfcEdgeLoop.EdgeList |\n       NOT('IFC4.IFCEDGECURVE' IN \n       TYPEOF(Oe\\IfcOrientedEdge.EdgeElement)\n  ))) = 0\n))) = 0;\n\tApplicableEdgeCurves : SIZEOF(QUERY (ElpFbnds <* \n  QUERY (Bnds <* SELF\\IfcFace.Bounds |\n    'IFC4.IFCEDGELOOP' IN TYPEOF(Bnds.Bound)) |\n     NOT (SIZEOF (QUERY (Oe <* ElpFbnds.Bound\\IfcEdgeLoop.EdgeList |\n       NOT (SIZEOF (['IFC4.IFCLINE',\n                     'IFC4.IFCCONIC',\n                     'IFC4.IFCPOLYLINE',\n                     'IFC4.IFCBSPLINECURVE'] *\n         TYPEOF(Oe\\IfcOrientedEdge.EdgeElement\\IfcEdgeCurve.EdgeGeometry)) = 1 )\n  )) = 0\n))) = 0;\nEND_ENTITY;\n\nENTITY IfcAirTerminal\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcAirTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcAirTerminalTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcAirTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCAIRTERMINALTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcAirTerminalBox\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcAirTerminalBoxTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcAirTerminalBoxTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcAirTerminalBoxTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCAIRTERMINALBOXTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcAirTerminalBoxType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcAirTerminalBoxTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcAirTerminalBoxTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcAirTerminalBoxTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAirTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcAirTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcAirTerminalTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcAirTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAirToAirHeatRecovery\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcAirToAirHeatRecoveryTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCAIRTOAIRHEATRECOVERYTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcAirToAirHeatRecoveryType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcAirToAirHeatRecoveryTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAlarm\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcAlarmTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcAlarmTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcAlarmTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n('IFC4.IFCALARMTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcAlarmType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcAlarmTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcAlarmTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcAlarmTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAnnotation\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\nEND_ENTITY;\n\nENTITY IfcAnnotationFillArea\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOuterBoundary : IfcCurve;\n\tInnerBoundaries : OPTIONAL SET [1:?] OF IfcCurve;\nEND_ENTITY;\n\nENTITY IfcApplication;\n\tApplicationDeveloper : IfcOrganization;\n\tVersion : IfcLabel;\n\tApplicationFullName : IfcLabel;\n\tApplicationIdentifier : IfcIdentifier;\n UNIQUE\n\tUR1 : ApplicationIdentifier;\n\tUR2 : ApplicationFullName, Version;\nEND_ENTITY;\n\nENTITY IfcAppliedValue\n SUPERTYPE OF (ONEOF\n    (IfcCostValue));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tAppliedValue : OPTIONAL IfcAppliedValueSelect;\n\tUnitBasis : OPTIONAL IfcMeasureWithUnit;\n\tApplicableDate : OPTIONAL IfcDate;\n\tFixedUntilDate : OPTIONAL IfcDate;\n\tCategory : OPTIONAL IfcLabel;\n\tCondition : OPTIONAL IfcLabel;\n\tArithmeticOperator : OPTIONAL IfcArithmeticOperatorEnum;\n\tComponents : OPTIONAL LIST [1:?] OF IfcAppliedValue;\n INVERSE\n\tHasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcApproval;\n\tIdentifier : OPTIONAL IfcIdentifier;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tTimeOfApproval : OPTIONAL IfcDateTime;\n\tStatus : OPTIONAL IfcLabel;\n\tLevel : OPTIONAL IfcLabel;\n\tQualifier : OPTIONAL IfcText;\n\tRequestingApproval : OPTIONAL IfcActorSelect;\n\tGivingApproval : OPTIONAL IfcActorSelect;\n INVERSE\n\tHasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\n\tApprovedObjects : SET [0:?] OF IfcRelAssociatesApproval FOR RelatingApproval;\n\tApprovedResources : SET [0:?] OF IfcResourceApprovalRelationship FOR RelatingApproval;\n\tIsRelatedWith : SET [0:?] OF IfcApprovalRelationship FOR RelatedApprovals;\n\tRelates : SET [0:?] OF IfcApprovalRelationship FOR RelatingApproval;\n WHERE\n\tHasIdentifierOrName : EXISTS (Identifier) OR EXISTS (Name);\nEND_ENTITY;\n\nENTITY IfcApprovalRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingApproval : IfcApproval;\n\tRelatedApprovals : SET [1:?] OF IfcApproval;\nEND_ENTITY;\n\nENTITY IfcArbitraryClosedProfileDef\n SUPERTYPE OF (ONEOF\n    (IfcArbitraryProfileDefWithVoids))\n SUBTYPE OF (IfcProfileDef);\n\tOuterCurve : IfcCurve;\n WHERE\n\tWR1 : OuterCurve.Dim = 2;\n\tWR2 : NOT('IFC4.IFCLINE' IN TYPEOF(OuterCurve));\n\tWR3 : NOT('IFC4.IFCOFFSETCURVE2D' IN TYPEOF(OuterCurve));\nEND_ENTITY;\n\nENTITY IfcArbitraryOpenProfileDef\n SUPERTYPE OF (ONEOF\n    (IfcCenterLineProfileDef))\n SUBTYPE OF (IfcProfileDef);\n\tCurve : IfcBoundedCurve;\n WHERE\n\tWR11 : ('IFC4.IFCCENTERLINEPROFILEDEF' IN TYPEOF(SELF)) OR \n (SELF\\IfcProfileDef.ProfileType = IfcProfileTypeEnum.CURVE);\n\tWR12 : Curve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcArbitraryProfileDefWithVoids\n SUBTYPE OF (IfcArbitraryClosedProfileDef);\n\tInnerCurves : SET [1:?] OF IfcCurve;\n WHERE\n\tWR1 : SELF\\IfcProfileDef.ProfileType = AREA;\n\tWR2 : SIZEOF(QUERY(temp <* InnerCurves | temp.Dim <> 2)) = 0;\n\tWR3 : SIZEOF(QUERY(temp <* InnerCurves | 'IFC4.IFCLINE' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcAsset\n SUBTYPE OF (IfcGroup);\n\tIdentification : OPTIONAL IfcIdentifier;\n\tOriginalValue : OPTIONAL IfcCostValue;\n\tCurrentValue : OPTIONAL IfcCostValue;\n\tTotalReplacementCost : OPTIONAL IfcCostValue;\n\tOwner : OPTIONAL IfcActorSelect;\n\tUser : OPTIONAL IfcActorSelect;\n\tResponsiblePerson : OPTIONAL IfcPerson;\n\tIncorporationDate : OPTIONAL IfcDate;\n\tDepreciatedValue : OPTIONAL IfcCostValue;\nEND_ENTITY;\n\nENTITY IfcAsymmetricIShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tBottomFlangeWidth : IfcPositiveLengthMeasure;\n\tOverallDepth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tBottomFlangeThickness : IfcPositiveLengthMeasure;\n\tBottomFlangeFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tTopFlangeWidth : IfcPositiveLengthMeasure;\n\tTopFlangeThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTopFlangeFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tBottomFlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tBottomFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tTopFlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tTopFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n WHERE\n\tValidFlangeThickness : NOT(EXISTS(TopFlangeThickness)) OR ((BottomFlangeThickness + TopFlangeThickness) < OverallDepth);\n\tValidWebThickness : (WebThickness < BottomFlangeWidth) AND (WebThickness < TopFlangeWidth);\n\tValidBottomFilletRadius : (NOT(EXISTS(BottomFlangeFilletRadius))) OR \n(BottomFlangeFilletRadius <= (BottomFlangeWidth - WebThickness)/2.);\n\tValidTopFilletRadius : (NOT(EXISTS(TopFlangeFilletRadius))) OR \n(TopFlangeFilletRadius <= (TopFlangeWidth - WebThickness)/2.);\nEND_ENTITY;\n\nENTITY IfcAudioVisualAppliance\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcAudioVisualApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcAudioVisualApplianceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcAudioVisualApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCAUDIOVISUALAPPLIANCETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcAudioVisualApplianceType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcAudioVisualApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcAudioVisualApplianceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcAudioVisualApplianceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAxis1Placement\n SUBTYPE OF (IfcPlacement);\n\tAxis : OPTIONAL IfcDirection;\n DERIVE\n\tZ : IfcDirection := NVL (IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n WHERE\n\tAxisIs3D : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);\n\tLocationIs3D : SELF\\IfcPlacement.Location.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcAxis2Placement2D\n SUBTYPE OF (IfcPlacement);\n\tRefDirection : OPTIONAL IfcDirection;\n DERIVE\n\tP : LIST [2:2] OF IfcDirection := IfcBuild2Axes(RefDirection);\n WHERE\n\tRefDirIs2D : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 2);\n\tLocationIs2D : SELF\\IfcPlacement.Location.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcAxis2Placement3D\n SUBTYPE OF (IfcPlacement);\n\tAxis : OPTIONAL IfcDirection;\n\tRefDirection : OPTIONAL IfcDirection;\n DERIVE\n\tP : LIST [3:3] OF IfcDirection := IfcBuildAxes(Axis, RefDirection);\n WHERE\n\tLocationIs3D : SELF\\IfcPlacement.Location.Dim = 3;\n\tAxisIs3D : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);\n\tRefDirIs3D : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 3);\n\tAxisToRefDirPosition : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0);\n\tAxisAndRefDirProvision : NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection)));\nEND_ENTITY;\n\nENTITY IfcBSplineCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBSplineCurveWithKnots))\n SUBTYPE OF (IfcBoundedCurve);\n\tDegree : IfcInteger;\n\tControlPointsList : LIST [2:?] OF IfcCartesianPoint;\n\tCurveForm : IfcBSplineCurveForm;\n\tClosedCurve : IfcLogical;\n\tSelfIntersect : IfcLogical;\n DERIVE\n\tUpperIndexOnControlPoints : IfcInteger := (SIZEOF(ControlPointsList) - 1);\n\tControlPoints : ARRAY [0:UpperIndexOnControlPoints] OF IfcCartesianPoint := IfcListToArray(ControlPointsList,0,UpperIndexOnControlPoints);\n WHERE\n\tSameDim : SIZEOF(QUERY(Temp <* ControlPointsList |\n  Temp.Dim <> ControlPointsList[1].Dim))\n= 0;\nEND_ENTITY;\n\nENTITY IfcBSplineCurveWithKnots\n SUPERTYPE OF (ONEOF\n    (IfcRationalBSplineCurveWithKnots))\n SUBTYPE OF (IfcBSplineCurve);\n\tKnotMultiplicities : LIST [2:?] OF IfcInteger;\n\tKnots : LIST [2:?] OF IfcParameterValue;\n\tKnotSpec : IfcKnotType;\n DERIVE\n\tUpperIndexOnKnots : IfcInteger := SIZEOF(Knots);\n WHERE\n\tConsistentBSpline : IfcConstraintsParamBSpline(Degree, UpperIndexOnKnots,\nUpperIndexOnControlPoints, KnotMultiplicities, Knots);\n\tCorrespondingKnotLists : SIZEOF(KnotMultiplicities) = UpperIndexOnKnots;\nEND_ENTITY;\n\nENTITY IfcBSplineSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBSplineSurfaceWithKnots))\n SUBTYPE OF (IfcBoundedSurface);\n\tUDegree : IfcInteger;\n\tVDegree : IfcInteger;\n\tControlPointsList : LIST [2:?] OF LIST [2:?] OF IfcCartesianPoint;\n\tSurfaceForm : IfcBSplineSurfaceForm;\n\tUClosed : IfcLogical;\n\tVClosed : IfcLogical;\n\tSelfIntersect : IfcLogical;\n DERIVE\n\tUUpper : IfcInteger := SIZEOF(ControlPointsList) - 1;\n\tVUpper : IfcInteger := SIZEOF(ControlPointsList[1]) - 1;\n\tControlPoints : ARRAY [0:UUpper] OF ARRAY [0:VUpper] OF IfcCartesianPoint := IfcMakeArrayOfArray(ControlPointsList,\n0,UUpper,0,VUpper);\nEND_ENTITY;\n\nENTITY IfcBSplineSurfaceWithKnots\n SUPERTYPE OF (ONEOF\n    (IfcRationalBSplineSurfaceWithKnots))\n SUBTYPE OF (IfcBSplineSurface);\n\tUMultiplicities : LIST [2:?] OF IfcInteger;\n\tVMultiplicities : LIST [2:?] OF IfcInteger;\n\tUKnots : LIST [2:?] OF IfcParameterValue;\n\tVKnots : LIST [2:?] OF IfcParameterValue;\n\tKnotSpec : IfcKnotType;\n DERIVE\n\tKnotVUpper : IfcInteger := SIZEOF(VKnots);\n\tKnotUUpper : IfcInteger := SIZEOF(UKnots);\n WHERE\n\tUDirectionConstraints : IfcConstraintsParamBSpline (\n  SELF\\IfcBSplineSurface.UDegree, KnotUUpper, \n  SELF\\IfcBSplineSurface.UUpper, UMultiplicities, UKnots);\n\tVDirectionConstraints : IfcConstraintsParamBSpline (\n  SELF\\IfcBSplineSurface.VDegree, KnotVUpper, \n  SELF\\IfcBSplineSurface.VUpper, VMultiplicities, VKnots);\n\tCorrespondingULists : SIZEOF(UMultiplicities) = KnotUUpper;\n\tCorrespondingVLists : SIZEOF(VMultiplicities) = KnotVUpper;\nEND_ENTITY;\n\nENTITY IfcBeam\n SUPERTYPE OF (ONEOF\n    (IfcBeamStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcBeamTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcBeamTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBeamTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCBEAMTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcBeamStandardCase\n SUBTYPE OF (IfcBeam);\n WHERE\n\tHasMaterialProfileSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') |\n              ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND\n              ('IFC4.IFCMATERIALPROFILESETUSAGE' IN TYPEOF(temp.RelatingMaterial))\n              )) = 1;\nEND_ENTITY;\n\nENTITY IfcBeamType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcBeamTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcBeamTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcBeamTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcBlobTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tRasterFormat : IfcIdentifier;\n\tRasterCode : IfcBinary;\n WHERE\n\tSupportedRasterFormat : SELF.RasterFormat IN ['BMP', 'JPG', 'GIF', 'PNG'];\n\tRasterCodeByteStream : BLENGTH(RasterCode) MOD 8 = 0;\nEND_ENTITY;\n\nENTITY IfcBlock\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tXLength : IfcPositiveLengthMeasure;\n\tYLength : IfcPositiveLengthMeasure;\n\tZLength : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcBoiler\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcBoilerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcBoilerTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcBoilerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCBOILERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcBoilerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcBoilerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcBoilerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcBoilerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcBooleanClippingResult\n SUBTYPE OF (IfcBooleanResult);\n WHERE\n\tFirstOperandType : ('IFC4.IFCSWEPTAREASOLID' IN TYPEOF(FirstOperand)) OR \n('IFC4.IFCSWEPTDISCSOLID' IN TYPEOF(FirstOperand)) OR \n('IFC4.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(FirstOperand));\n\tSecondOperandType : ('IFC4.IFCHALFSPACESOLID' IN TYPEOF(SecondOperand));\n\tOperatorType : Operator = DIFFERENCE;\nEND_ENTITY;\n\nENTITY IfcBooleanResult\n SUPERTYPE OF (ONEOF\n    (IfcBooleanClippingResult))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOperator : IfcBooleanOperator;\n\tFirstOperand : IfcBooleanOperand;\n\tSecondOperand : IfcBooleanOperand;\n DERIVE\n\tDim : IfcDimensionCount := FirstOperand.Dim;\n WHERE\n\tSameDim : FirstOperand.Dim = SecondOperand.Dim;\n\tFirstOperandClosed : NOT('IFC4.IFCTESSELLATEDFACESET' IN TYPEOF(FirstOperand)) OR (EXISTS(FirstOperand.Closed) AND FirstOperand.Closed);\n\tSecondOperandClosed : NOT('IFC4.IFCTESSELLATEDFACESET' IN TYPEOF(SecondOperand)) OR (EXISTS(SecondOperand.Closed) AND SecondOperand.Closed);\nEND_ENTITY;\n\nENTITY IfcBoundaryCondition\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBoundaryEdgeCondition\n    ,IfcBoundaryFaceCondition\n    ,IfcBoundaryNodeCondition));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcBoundaryCurve\n SUPERTYPE OF (ONEOF\n    (IfcOuterBoundaryCurve))\n SUBTYPE OF (IfcCompositeCurveOnSurface);\n WHERE\n\tIsClosed : SELF\\IfcCompositeCurve.ClosedCurve;\nEND_ENTITY;\n\nENTITY IfcBoundaryEdgeCondition\n SUBTYPE OF (IfcBoundaryCondition);\n\tTranslationalStiffnessByLengthX : OPTIONAL IfcModulusOfTranslationalSubgradeReactionSelect;\n\tTranslationalStiffnessByLengthY : OPTIONAL IfcModulusOfTranslationalSubgradeReactionSelect;\n\tTranslationalStiffnessByLengthZ : OPTIONAL IfcModulusOfTranslationalSubgradeReactionSelect;\n\tRotationalStiffnessByLengthX : OPTIONAL IfcModulusOfRotationalSubgradeReactionSelect;\n\tRotationalStiffnessByLengthY : OPTIONAL IfcModulusOfRotationalSubgradeReactionSelect;\n\tRotationalStiffnessByLengthZ : OPTIONAL IfcModulusOfRotationalSubgradeReactionSelect;\nEND_ENTITY;\n\nENTITY IfcBoundaryFaceCondition\n SUBTYPE OF (IfcBoundaryCondition);\n\tTranslationalStiffnessByAreaX : OPTIONAL IfcModulusOfSubgradeReactionSelect;\n\tTranslationalStiffnessByAreaY : OPTIONAL IfcModulusOfSubgradeReactionSelect;\n\tTranslationalStiffnessByAreaZ : OPTIONAL IfcModulusOfSubgradeReactionSelect;\nEND_ENTITY;\n\nENTITY IfcBoundaryNodeCondition\n SUPERTYPE OF (ONEOF\n    (IfcBoundaryNodeConditionWarping))\n SUBTYPE OF (IfcBoundaryCondition);\n\tTranslationalStiffnessX : OPTIONAL IfcTranslationalStiffnessSelect;\n\tTranslationalStiffnessY : OPTIONAL IfcTranslationalStiffnessSelect;\n\tTranslationalStiffnessZ : OPTIONAL IfcTranslationalStiffnessSelect;\n\tRotationalStiffnessX : OPTIONAL IfcRotationalStiffnessSelect;\n\tRotationalStiffnessY : OPTIONAL IfcRotationalStiffnessSelect;\n\tRotationalStiffnessZ : OPTIONAL IfcRotationalStiffnessSelect;\nEND_ENTITY;\n\nENTITY IfcBoundaryNodeConditionWarping\n SUBTYPE OF (IfcBoundaryNodeCondition);\n\tWarpingStiffness : OPTIONAL IfcWarpingStiffnessSelect;\nEND_ENTITY;\n\nENTITY IfcBoundedCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBSplineCurve\n    ,IfcCompositeCurve\n    ,IfcIndexedPolyCurve\n    ,IfcPolyline\n    ,IfcTrimmedCurve))\n SUBTYPE OF (IfcCurve);\nEND_ENTITY;\n\nENTITY IfcBoundedSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBSplineSurface\n    ,IfcCurveBoundedPlane\n    ,IfcCurveBoundedSurface\n    ,IfcRectangularTrimmedSurface))\n SUBTYPE OF (IfcSurface);\nEND_ENTITY;\n\nENTITY IfcBoundingBox\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tCorner : IfcCartesianPoint;\n\tXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\n\tZDim : IfcPositiveLengthMeasure;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcBoxedHalfSpace\n SUBTYPE OF (IfcHalfSpaceSolid);\n\tEnclosure : IfcBoundingBox;\n WHERE\n\tUnboundedSurface : NOT ('IFC4.IFCCURVEBOUNDEDPLANE' IN TYPEOF(SELF\\IfcHalfSpaceSolid.BaseSurface));\nEND_ENTITY;\n\nENTITY IfcBuilding\n SUBTYPE OF (IfcSpatialStructureElement);\n\tElevationOfRefHeight : OPTIONAL IfcLengthMeasure;\n\tElevationOfTerrain : OPTIONAL IfcLengthMeasure;\n\tBuildingAddress : OPTIONAL IfcPostalAddress;\nEND_ENTITY;\n\nENTITY IfcBuildingElement\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBeam\n    ,IfcBuildingElementProxy\n    ,IfcChimney\n    ,IfcColumn\n    ,IfcCovering\n    ,IfcCurtainWall\n    ,IfcDoor\n    ,IfcFooting\n    ,IfcMember\n    ,IfcPile\n    ,IfcPlate\n    ,IfcRailing\n    ,IfcRamp\n    ,IfcRampFlight\n    ,IfcRoof\n    ,IfcShadingDevice\n    ,IfcSlab\n    ,IfcStair\n    ,IfcStairFlight\n    ,IfcWall\n    ,IfcWindow))\n SUBTYPE OF (IfcElement);\n WHERE\n\tMaxOneMaterialAssociation : SIZEOF (QUERY(temp <* SELF\\IfcObjectDefinition.HasAssociations |\n  'IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)\n  )) <= 1;\nEND_ENTITY;\n\nENTITY IfcBuildingElementPart\n SUBTYPE OF (IfcElementComponent);\n\tPredefinedType : OPTIONAL IfcBuildingElementPartTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n(PredefinedType <> IfcBuildingElementPartTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcBuildingElementPartTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCBUILDINGELEMENTPARTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcBuildingElementPartType\n SUBTYPE OF (IfcElementComponentType);\n\tPredefinedType : IfcBuildingElementPartTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcBuildingElementPartTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcBuildingElementPartTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcBuildingElementProxy\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcBuildingElementProxyTypeEnum;\n WHERE\n\tHasObjectName : EXISTS(SELF\\IfcRoot.Name);\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcBuildingElementProxyTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBuildingElementProxyTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCBUILDINGELEMENTPROXYTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcBuildingElementProxyType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcBuildingElementProxyTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcBuildingElementProxyTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcBuildingElementProxyTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcBuildingElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBeamType\n    ,IfcBuildingElementProxyType\n    ,IfcChimneyType\n    ,IfcColumnType\n    ,IfcCoveringType\n    ,IfcCurtainWallType\n    ,IfcDoorType\n    ,IfcFootingType\n    ,IfcMemberType\n    ,IfcPileType\n    ,IfcPlateType\n    ,IfcRailingType\n    ,IfcRampFlightType\n    ,IfcRampType\n    ,IfcRoofType\n    ,IfcShadingDeviceType\n    ,IfcSlabType\n    ,IfcStairFlightType\n    ,IfcStairType\n    ,IfcWallType\n    ,IfcWindowType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcBuildingStorey\n SUBTYPE OF (IfcSpatialStructureElement);\n\tElevation : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcBuildingSystem\n SUBTYPE OF (IfcSystem);\n\tPredefinedType : OPTIONAL IfcBuildingSystemTypeEnum;\n\tLongName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcBurner\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcBurnerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcBurnerTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcBurnerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCBURNERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcBurnerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcBurnerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcBurnerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcBurnerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tWidth : IfcPositiveLengthMeasure;\n\tWallThickness : IfcPositiveLengthMeasure;\n\tGirth : IfcPositiveLengthMeasure;\n\tInternalFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n WHERE\n\tValidGirth : Girth < (Depth / 2.);\n\tValidInternalFilletRadius : NOT(EXISTS(InternalFilletRadius)) OR\n((InternalFilletRadius <= Width/2. - WallThickness) AND (InternalFilletRadius <= Depth/2. - WallThickness));\n\tValidWallThickness : (WallThickness < Width/2.) AND (WallThickness < Depth/2.);\nEND_ENTITY;\n\nENTITY IfcCableCarrierFitting\n SUBTYPE OF (IfcFlowFitting);\n\tPredefinedType : OPTIONAL IfcCableCarrierFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCableCarrierFittingTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCableCarrierFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCABLECARRIERFITTINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCableCarrierFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcCableCarrierFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCableCarrierFittingTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCableCarrierFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCableCarrierSegment\n SUBTYPE OF (IfcFlowSegment);\n\tPredefinedType : OPTIONAL IfcCableCarrierSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCableCarrierSegmentTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCableCarrierSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCABLECARRIERSEGMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCableCarrierSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcCableCarrierSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCableCarrierSegmentTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCableCarrierSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCableFitting\n SUBTYPE OF (IfcFlowFitting);\n\tPredefinedType : OPTIONAL IfcCableFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCableFittingTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCableFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCABLEFITTINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCableFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcCableFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCableFittingTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCableFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCableSegment\n SUBTYPE OF (IfcFlowSegment);\n\tPredefinedType : OPTIONAL IfcCableSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCableSegmentTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCableSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCABLESEGMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCableSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcCableSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCableSegmentTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCableSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCartesianPoint\n SUBTYPE OF (IfcPoint);\n\tCoordinates : LIST [1:3] OF IfcLengthMeasure;\n DERIVE\n\tDim : IfcDimensionCount := HIINDEX(Coordinates);\n WHERE\n\tCP2Dor3D : HIINDEX(Coordinates) >= 2;\nEND_ENTITY;\n\nENTITY IfcCartesianPointList\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCartesianPointList2D\n    ,IfcCartesianPointList3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\tDim : IfcDimensionCount := IfcPointListDim(SELF);\nEND_ENTITY;\n\nENTITY IfcCartesianPointList2D\n SUBTYPE OF (IfcCartesianPointList);\n\tCoordList : LIST [1:?] OF LIST [2:2] OF IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCartesianPointList3D\n SUBTYPE OF (IfcCartesianPointList);\n\tCoordList : LIST [1:?] OF LIST [3:3] OF IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCartesianTransformationOperator2D\n    ,IfcCartesianTransformationOperator3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tAxis1 : OPTIONAL IfcDirection;\n\tAxis2 : OPTIONAL IfcDirection;\n\tLocalOrigin : IfcCartesianPoint;\n\tScale : OPTIONAL IfcReal;\n DERIVE\n\tScl : IfcReal := NVL(Scale, 1.0);\n\tDim : IfcDimensionCount := LocalOrigin.Dim;\n WHERE\n\tScaleGreaterZero : Scl > 0.0;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator2D\n SUPERTYPE OF (ONEOF\n    (IfcCartesianTransformationOperator2DnonUniform))\n SUBTYPE OF (IfcCartesianTransformationOperator);\n DERIVE\n\tU : LIST [2:2] OF IfcDirection := IfcBaseAxis(2,SELF\\IfcCartesianTransformationOperator.Axis1,\nSELF\\IfcCartesianTransformationOperator.Axis2,?);\n WHERE\n\tDimEqual2 : SELF\\IfcCartesianTransformationOperator.Dim = 2;\n\tAxis1Is2D : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis1)) OR \n(SELF\\IfcCartesianTransformationOperator.Axis1.Dim = 2);\n\tAxis2Is2D : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis2)) OR \n(SELF\\IfcCartesianTransformationOperator.Axis2.Dim = 2);\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator2DnonUniform\n SUBTYPE OF (IfcCartesianTransformationOperator2D);\n\tScale2 : OPTIONAL IfcReal;\n DERIVE\n\tScl2 : IfcReal := NVL(Scale2, SELF\\IfcCartesianTransformationOperator.Scl);\n WHERE\n\tScale2GreaterZero : Scl2 > 0.0;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator3D\n SUPERTYPE OF (ONEOF\n    (IfcCartesianTransformationOperator3DnonUniform))\n SUBTYPE OF (IfcCartesianTransformationOperator);\n\tAxis3 : OPTIONAL IfcDirection;\n DERIVE\n\tU : LIST [3:3] OF IfcDirection := IfcBaseAxis(3,SELF\\IfcCartesianTransformationOperator.Axis1,\nSELF\\IfcCartesianTransformationOperator.Axis2,Axis3);\n WHERE\n\tDimIs3D : SELF\\IfcCartesianTransformationOperator.Dim = 3;\n\tAxis1Is3D : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis1)) OR \n(SELF\\IfcCartesianTransformationOperator.Axis1.Dim = 3);\n\tAxis2Is3D : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis2)) OR \n(SELF\\IfcCartesianTransformationOperator.Axis2.Dim = 3);\n\tAxis3Is3D : NOT(EXISTS(Axis3)) OR (Axis3.Dim = 3);\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator3DnonUniform\n SUBTYPE OF (IfcCartesianTransformationOperator3D);\n\tScale2 : OPTIONAL IfcReal;\n\tScale3 : OPTIONAL IfcReal;\n DERIVE\n\tScl2 : IfcReal := NVL(Scale2, SELF\\IfcCartesianTransformationOperator.Scl);\n\tScl3 : IfcReal := NVL(Scale3, SELF\\IfcCartesianTransformationOperator.Scl);\n WHERE\n\tScale2GreaterZero : Scl2 > 0.0;\n\tScale3GreaterZero : Scl3 > 0.0;\nEND_ENTITY;\n\nENTITY IfcCenterLineProfileDef\n SUBTYPE OF (IfcArbitraryOpenProfileDef);\n\tThickness : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcChiller\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcChillerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCHILLERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcChillerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcChillerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcChimney\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcChimneyTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcChimneyTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcChimneyTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCCHIMNEYTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcChimneyType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcChimneyTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcChimneyTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcChimneyTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCircle\n SUBTYPE OF (IfcConic);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCircleHollowProfileDef\n SUBTYPE OF (IfcCircleProfileDef);\n\tWallThickness : IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : WallThickness < SELF\\IfcCircleProfileDef.Radius;\nEND_ENTITY;\n\nENTITY IfcCircleProfileDef\n SUPERTYPE OF (ONEOF\n    (IfcCircleHollowProfileDef))\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCivilElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcCivilElementType\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcClassification\n SUBTYPE OF (IfcExternalInformation);\n\tSource : OPTIONAL IfcLabel;\n\tEdition : OPTIONAL IfcLabel;\n\tEditionDate : OPTIONAL IfcDate;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tLocation : OPTIONAL IfcURIReference;\n\tReferenceTokens : OPTIONAL LIST [1:?] OF IfcIdentifier;\n INVERSE\n\tClassificationForObjects : SET [0:?] OF IfcRelAssociatesClassification FOR RelatingClassification;\n\tHasReferences : SET [0:?] OF IfcClassificationReference FOR ReferencedSource;\nEND_ENTITY;\n\nENTITY IfcClassificationReference\n SUBTYPE OF (IfcExternalReference);\n\tReferencedSource : OPTIONAL IfcClassificationReferenceSelect;\n\tDescription : OPTIONAL IfcText;\n\tSort : OPTIONAL IfcIdentifier;\n INVERSE\n\tClassificationRefForObjects : SET [0:?] OF IfcRelAssociatesClassification FOR RelatingClassification;\n\tHasReferences : SET [0:?] OF IfcClassificationReference FOR ReferencedSource;\nEND_ENTITY;\n\nENTITY IfcClosedShell\n SUBTYPE OF (IfcConnectedFaceSet);\nEND_ENTITY;\n\nENTITY IfcCoil\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcCoilTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCoilTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCoilTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCOILTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCoilType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCoilTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCoilTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCoilTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcColourRgb\n SUBTYPE OF (IfcColourSpecification);\n\tRed : IfcNormalisedRatioMeasure;\n\tGreen : IfcNormalisedRatioMeasure;\n\tBlue : IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcColourRgbList\n SUBTYPE OF (IfcPresentationItem);\n\tColourList : LIST [1:?] OF LIST [3:3] OF IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcColourSpecification\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcColourRgb))\n SUBTYPE OF (IfcPresentationItem);\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcColumn\n SUPERTYPE OF (ONEOF\n    (IfcColumnStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcColumnTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcColumnTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcColumnTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCCOLUMNTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcColumnStandardCase\n SUBTYPE OF (IfcColumn);\n WHERE\n\tHasMaterialProfileSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') |\n              ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND\n              ('IFC4.IFCMATERIALPROFILESETUSAGE' IN TYPEOF(temp.RelatingMaterial))\n              )) = 1;\nEND_ENTITY;\n\nENTITY IfcColumnType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcColumnTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcColumnTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcColumnTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCommunicationsAppliance\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcCommunicationsApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCommunicationsApplianceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCommunicationsApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCOMMUNICATIONSAPPLIANCETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCommunicationsApplianceType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcCommunicationsApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCommunicationsApplianceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCommunicationsApplianceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcComplexProperty\n SUBTYPE OF (IfcProperty);\n\tUsageName : IfcIdentifier;\n\tHasProperties : SET [1:?] OF IfcProperty;\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* HasProperties | SELF :=: temp)) = 0;\n\tWR22 : IfcUniquePropertyName(HasProperties);\nEND_ENTITY;\n\nENTITY IfcComplexPropertyTemplate\n SUBTYPE OF (IfcPropertyTemplate);\n\tUsageName : OPTIONAL IfcLabel;\n\tTemplateType : OPTIONAL IfcComplexPropertyTemplateTypeEnum;\n\tHasPropertyTemplates : OPTIONAL SET [1:?] OF IfcPropertyTemplate;\n WHERE\n\tUniquePropertyNames : IfcUniquePropertyTemplateNames(HasPropertyTemplates);\n\tNoSelfReference : SIZEOF(QUERY(temp <* HasPropertyTemplates | SELF :=: temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcCompositeCurve\n SUPERTYPE OF (ONEOF\n    (IfcCompositeCurveOnSurface))\n SUBTYPE OF (IfcBoundedCurve);\n\tSegments : LIST [1:?] OF IfcCompositeCurveSegment;\n\tSelfIntersect : IfcLogical;\n DERIVE\n\tNSegments : IfcInteger := SIZEOF(Segments);\n\tClosedCurve : IfcLogical := Segments[NSegments].Transition <> Discontinuous;\n WHERE\n\tCurveContinuous : ((NOT ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 1)) OR ((ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 0));\n\tSameDim : SIZEOF( QUERY( Temp <* Segments | Temp.Dim <> Segments[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcCompositeCurveOnSurface\n SUPERTYPE OF (ONEOF\n    (IfcBoundaryCurve))\n SUBTYPE OF (IfcCompositeCurve);\n DERIVE\n\tBasisSurface : SET [0:1] OF IfcSurface := IfcGetBasisSurface(SELF);\n WHERE\n\tSameSurface : SIZEOF(BasisSurface) > 0;\nEND_ENTITY;\n\nENTITY IfcCompositeCurveSegment\n SUPERTYPE OF (ONEOF\n    (IfcReparametrisedCompositeCurveSegment))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tTransition : IfcTransitionCode;\n\tSameSense : IfcBoolean;\n\tParentCurve : IfcCurve;\n DERIVE\n\tDim : IfcDimensionCount := ParentCurve.Dim;\n INVERSE\n\tUsingCurves : SET [1:?] OF IfcCompositeCurve FOR Segments;\n WHERE\n\tParentIsBoundedCurve : ('IFC4.IFCBOUNDEDCURVE' IN TYPEOF(ParentCurve));\nEND_ENTITY;\n\nENTITY IfcCompositeProfileDef\n SUBTYPE OF (IfcProfileDef);\n\tProfiles : SET [2:?] OF IfcProfileDef;\n\tLabel : OPTIONAL IfcLabel;\n WHERE\n\tInvariantProfileType : SIZEOF(QUERY(temp <* Profiles | temp.ProfileType <> Profiles[1].ProfileType)) = 0;\n\tNoRecursion : SIZEOF(QUERY(temp <* Profiles | 'IFC4.IFCCOMPOSITEPROFILEDEF' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcCompressor\n SUBTYPE OF (IfcFlowMovingDevice);\n\tPredefinedType : OPTIONAL IfcCompressorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCompressorTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCompressorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCOMPRESSORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCompressorType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcCompressorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCompressorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCompressorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCondenser\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcCondenserTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCondenserTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCondenserTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCONDENSERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCondenserType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCondenserTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCondenserTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCondenserTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcConic\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCircle\n    ,IfcEllipse))\n SUBTYPE OF (IfcCurve);\n\tPosition : IfcAxis2Placement;\nEND_ENTITY;\n\nENTITY IfcConnectedFaceSet\n SUPERTYPE OF (ONEOF\n    (IfcClosedShell\n    ,IfcOpenShell))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tCfsFaces : SET [1:?] OF IfcFace;\nEND_ENTITY;\n\nENTITY IfcConnectionCurveGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tCurveOnRelatingElement : IfcCurveOrEdgeCurve;\n\tCurveOnRelatedElement : OPTIONAL IfcCurveOrEdgeCurve;\nEND_ENTITY;\n\nENTITY IfcConnectionGeometry\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcConnectionCurveGeometry\n    ,IfcConnectionPointGeometry\n    ,IfcConnectionSurfaceGeometry\n    ,IfcConnectionVolumeGeometry));\nEND_ENTITY;\n\nENTITY IfcConnectionPointEccentricity\n SUBTYPE OF (IfcConnectionPointGeometry);\n\tEccentricityInX : OPTIONAL IfcLengthMeasure;\n\tEccentricityInY : OPTIONAL IfcLengthMeasure;\n\tEccentricityInZ : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcConnectionPointGeometry\n SUPERTYPE OF (ONEOF\n    (IfcConnectionPointEccentricity))\n SUBTYPE OF (IfcConnectionGeometry);\n\tPointOnRelatingElement : IfcPointOrVertexPoint;\n\tPointOnRelatedElement : OPTIONAL IfcPointOrVertexPoint;\nEND_ENTITY;\n\nENTITY IfcConnectionSurfaceGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tSurfaceOnRelatingElement : IfcSurfaceOrFaceSurface;\n\tSurfaceOnRelatedElement : OPTIONAL IfcSurfaceOrFaceSurface;\nEND_ENTITY;\n\nENTITY IfcConnectionVolumeGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tVolumeOnRelatingElement : IfcSolidOrShell;\n\tVolumeOnRelatedElement : OPTIONAL IfcSolidOrShell;\nEND_ENTITY;\n\nENTITY IfcConstraint\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcMetric\n    ,IfcObjective));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tConstraintGrade : IfcConstraintEnum;\n\tConstraintSource : OPTIONAL IfcLabel;\n\tCreatingActor : OPTIONAL IfcActorSelect;\n\tCreationTime : OPTIONAL IfcDateTime;\n\tUserDefinedGrade : OPTIONAL IfcLabel;\n INVERSE\n\tHasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\n\tPropertiesForConstraint : SET [0:?] OF IfcResourceConstraintRelationship FOR RelatingConstraint;\n WHERE\n\tWR11 : (ConstraintGrade <> IfcConstraintEnum.USERDEFINED) OR\n((ConstraintGrade = IfcConstraintEnum.USERDEFINED) AND EXISTS(SELF\\IfcConstraint.UserDefinedGrade));\nEND_ENTITY;\n\nENTITY IfcConstructionEquipmentResource\n SUBTYPE OF (IfcConstructionResource);\n\tPredefinedType : OPTIONAL IfcConstructionEquipmentResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcConstructionEquipmentResourceType\n SUBTYPE OF (IfcConstructionResourceType);\n\tPredefinedType : IfcConstructionEquipmentResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeResource.ResourceType));\nEND_ENTITY;\n\nENTITY IfcConstructionMaterialResource\n SUBTYPE OF (IfcConstructionResource);\n\tPredefinedType : OPTIONAL IfcConstructionMaterialResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcConstructionMaterialResourceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcConstructionMaterialResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcConstructionMaterialResourceType\n SUBTYPE OF (IfcConstructionResourceType);\n\tPredefinedType : IfcConstructionMaterialResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcConstructionMaterialResourceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcConstructionMaterialResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeResource.ResourceType));\nEND_ENTITY;\n\nENTITY IfcConstructionProductResource\n SUBTYPE OF (IfcConstructionResource);\n\tPredefinedType : OPTIONAL IfcConstructionProductResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcConstructionProductResourceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcConstructionProductResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcConstructionProductResourceType\n SUBTYPE OF (IfcConstructionResourceType);\n\tPredefinedType : IfcConstructionProductResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcConstructionProductResourceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcConstructionProductResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeResource.ResourceType));\nEND_ENTITY;\n\nENTITY IfcConstructionResource\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcConstructionEquipmentResource\n    ,IfcConstructionMaterialResource\n    ,IfcConstructionProductResource\n    ,IfcCrewResource\n    ,IfcLaborResource\n    ,IfcSubContractResource))\n SUBTYPE OF (IfcResource);\n\tUsage : OPTIONAL IfcResourceTime;\n\tBaseCosts : OPTIONAL LIST [1:?] OF IfcAppliedValue;\n\tBaseQuantity : OPTIONAL IfcPhysicalQuantity;\nEND_ENTITY;\n\nENTITY IfcConstructionResourceType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcConstructionEquipmentResourceType\n    ,IfcConstructionMaterialResourceType\n    ,IfcConstructionProductResourceType\n    ,IfcCrewResourceType\n    ,IfcLaborResourceType\n    ,IfcSubContractResourceType))\n SUBTYPE OF (IfcTypeResource);\n\tBaseCosts : OPTIONAL LIST [1:?] OF IfcAppliedValue;\n\tBaseQuantity : OPTIONAL IfcPhysicalQuantity;\nEND_ENTITY;\n\nENTITY IfcContext\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcProject\n    ,IfcProjectLibrary))\n SUBTYPE OF (IfcObjectDefinition);\n\tObjectType : OPTIONAL IfcLabel;\n\tLongName : OPTIONAL IfcLabel;\n\tPhase : OPTIONAL IfcLabel;\n\tRepresentationContexts : OPTIONAL SET [1:?] OF IfcRepresentationContext;\n\tUnitsInContext : OPTIONAL IfcUnitAssignment;\n INVERSE\n\tIsDefinedBy : SET [0:?] OF IfcRelDefinesByProperties FOR RelatedObjects;\n\tDeclares : SET [0:?] OF IfcRelDeclares FOR RelatingContext;\nEND_ENTITY;\n\nENTITY IfcContextDependentUnit\n SUBTYPE OF (IfcNamedUnit);\n\tName : IfcLabel;\n INVERSE\n\tHasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcControl\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcActionRequest\n    ,IfcCostItem\n    ,IfcCostSchedule\n    ,IfcPerformanceHistory\n    ,IfcPermit\n    ,IfcProjectOrder\n    ,IfcWorkCalendar\n    ,IfcWorkControl))\n SUBTYPE OF (IfcObject);\n\tIdentification : OPTIONAL IfcIdentifier;\n INVERSE\n\tControls : SET [0:?] OF IfcRelAssignsToControl FOR RelatingControl;\nEND_ENTITY;\n\nENTITY IfcController\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcControllerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcControllerTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcControllerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n('IFC4.IFCCONTROLLERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcControllerType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcControllerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcControllerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcControllerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcConversionBasedUnit\n SUPERTYPE OF (ONEOF\n    (IfcConversionBasedUnitWithOffset))\n SUBTYPE OF (IfcNamedUnit);\n\tName : IfcLabel;\n\tConversionFactor : IfcMeasureWithUnit;\n INVERSE\n\tHasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcConversionBasedUnitWithOffset\n SUBTYPE OF (IfcConversionBasedUnit);\n\tConversionOffset : IfcReal;\nEND_ENTITY;\n\nENTITY IfcCooledBeam\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcCooledBeamTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCooledBeamTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCooledBeamTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCOOLEDBEAMTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCooledBeamType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCooledBeamTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCooledBeamTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCooledBeamTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCoolingTower\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcCoolingTowerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCoolingTowerTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCoolingTowerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCOOLINGTOWERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCoolingTowerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCoolingTowerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCoolingTowerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCoolingTowerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCoordinateOperation\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcMapConversion));\n\tSourceCRS : IfcCoordinateReferenceSystemSelect;\n\tTargetCRS : IfcCoordinateReferenceSystem;\nEND_ENTITY;\n\nENTITY IfcCoordinateReferenceSystem\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcProjectedCRS));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tGeodeticDatum : OPTIONAL IfcIdentifier;\n\tVerticalDatum : OPTIONAL IfcIdentifier;\n INVERSE\n\tHasCoordinateOperation : SET [0:1] OF IfcCoordinateOperation FOR SourceCRS;\nEND_ENTITY;\n\nENTITY IfcCostItem\n SUBTYPE OF (IfcControl);\n\tPredefinedType : OPTIONAL IfcCostItemTypeEnum;\n\tCostValues : OPTIONAL LIST [1:?] OF IfcCostValue;\n\tCostQuantities : OPTIONAL LIST [1:?] OF IfcPhysicalQuantity;\nEND_ENTITY;\n\nENTITY IfcCostSchedule\n SUBTYPE OF (IfcControl);\n\tPredefinedType : OPTIONAL IfcCostScheduleTypeEnum;\n\tStatus : OPTIONAL IfcLabel;\n\tSubmittedOn : OPTIONAL IfcDateTime;\n\tUpdateDate : OPTIONAL IfcDateTime;\nEND_ENTITY;\n\nENTITY IfcCostValue\n SUBTYPE OF (IfcAppliedValue);\nEND_ENTITY;\n\nENTITY IfcCovering\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcCoveringTypeEnum;\n INVERSE\n\tCoversSpaces : SET [0:1] OF IfcRelCoversSpaces FOR RelatedCoverings;\n\tCoversElements : SET [0:1] OF IfcRelCoversBldgElements FOR RelatedCoverings;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCoveringTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCoveringTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCCOVERINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCoveringType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcCoveringTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCoveringTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCoveringTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCrewResource\n SUBTYPE OF (IfcConstructionResource);\n\tPredefinedType : OPTIONAL IfcCrewResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCrewResourceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCrewResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcCrewResourceType\n SUBTYPE OF (IfcConstructionResourceType);\n\tPredefinedType : IfcCrewResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCrewResourceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCrewResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeResource.ResourceType));\nEND_ENTITY;\n\nENTITY IfcCsgPrimitive3D\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBlock\n    ,IfcRectangularPyramid\n    ,IfcRightCircularCone\n    ,IfcRightCircularCylinder\n    ,IfcSphere))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tPosition : IfcAxis2Placement3D;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcCsgSolid\n SUBTYPE OF (IfcSolidModel);\n\tTreeRootExpression : IfcCsgSelect;\nEND_ENTITY;\n\nENTITY IfcCurrencyRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingMonetaryUnit : IfcMonetaryUnit;\n\tRelatedMonetaryUnit : IfcMonetaryUnit;\n\tExchangeRate : IfcPositiveRatioMeasure;\n\tRateDateTime : OPTIONAL IfcDateTime;\n\tRateSource : OPTIONAL IfcLibraryInformation;\nEND_ENTITY;\n\nENTITY IfcCurtainWall\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcCurtainWallTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcCurtainWallTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCurtainWallTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCCURTAINWALLTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCurtainWallType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcCurtainWallTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCurtainWallTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCurtainWallTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBoundedCurve\n    ,IfcConic\n    ,IfcLine\n    ,IfcOffsetCurve2D\n    ,IfcOffsetCurve3D\n    ,IfcPcurve\n    ,IfcSurfaceCurve))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\tDim : IfcDimensionCount := IfcCurveDim(SELF);\nEND_ENTITY;\n\nENTITY IfcCurveBoundedPlane\n SUBTYPE OF (IfcBoundedSurface);\n\tBasisSurface : IfcPlane;\n\tOuterBoundary : IfcCurve;\n\tInnerBoundaries : SET [0:?] OF IfcCurve;\nEND_ENTITY;\n\nENTITY IfcCurveBoundedSurface\n SUBTYPE OF (IfcBoundedSurface);\n\tBasisSurface : IfcSurface;\n\tBoundaries : SET [1:?] OF IfcBoundaryCurve;\n\tImplicitOuter : IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcCurveStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tCurveFont : OPTIONAL IfcCurveFontOrScaledCurveFontSelect;\n\tCurveWidth : OPTIONAL IfcSizeSelect;\n\tCurveColour : OPTIONAL IfcColour;\n\tModelOrDraughting : OPTIONAL IfcBoolean;\n WHERE\n\tMeasureOfWidth : (NOT(EXISTS(CurveWidth))) OR\n('IFC4.IFCPOSITIVELENGTHMEASURE' IN TYPEOF(CurveWidth)) OR \n (('IFC4.IFCDESCRIPTIVEMEASURE' IN TYPEOF(CurveWidth)) AND\n (CurveWidth = 'by layer'));\n\tIdentifiableCurveStyle : EXISTS(CurveFont) OR EXISTS(CurveWidth) OR EXISTS(CurveColour);\nEND_ENTITY;\n\nENTITY IfcCurveStyleFont\n SUBTYPE OF (IfcPresentationItem);\n\tName : OPTIONAL IfcLabel;\n\tPatternList : LIST [1:?] OF IfcCurveStyleFontPattern;\nEND_ENTITY;\n\nENTITY IfcCurveStyleFontAndScaling\n SUBTYPE OF (IfcPresentationItem);\n\tName : OPTIONAL IfcLabel;\n\tCurveFont : IfcCurveStyleFontSelect;\n\tCurveFontScaling : IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcCurveStyleFontPattern\n SUBTYPE OF (IfcPresentationItem);\n\tVisibleSegmentLength : IfcLengthMeasure;\n\tInvisibleSegmentLength : IfcPositiveLengthMeasure;\n WHERE\n\tVisibleLengthGreaterEqualZero : VisibleSegmentLength >= 0.;\nEND_ENTITY;\n\nENTITY IfcCylindricalSurface\n SUBTYPE OF (IfcElementarySurface);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcDamper\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcDamperTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCDAMPERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDamperType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcDamperTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDerivedProfileDef\n SUPERTYPE OF (ONEOF\n    (IfcMirroredProfileDef))\n SUBTYPE OF (IfcProfileDef);\n\tParentProfile : IfcProfileDef;\n\tOperator : IfcCartesianTransformationOperator2D;\n\tLabel : OPTIONAL IfcLabel;\n WHERE\n\tInvariantProfileType : SELF\\IfcProfileDef.ProfileType = ParentProfile.ProfileType;\nEND_ENTITY;\n\nENTITY IfcDerivedUnit;\n\tElements : SET [1:?] OF IfcDerivedUnitElement;\n\tUnitType : IfcDerivedUnitEnum;\n\tUserDefinedType : OPTIONAL IfcLabel;\n DERIVE\n\tDimensions : IfcDimensionalExponents := IfcDeriveDimensionalExponents(Elements);\n WHERE\n\tWR1 : (SIZEOF (Elements) > 1) OR ((SIZEOF (Elements) = 1) AND (Elements[1].Exponent <> 1 ));\n\tWR2 : (UnitType <> IfcDerivedUnitEnum.USERDEFINED) OR\n((UnitType = IfcDerivedUnitEnum.USERDEFINED) AND \n (EXISTS(SELF.UserDefinedType)));\nEND_ENTITY;\n\nENTITY IfcDerivedUnitElement;\n\tUnit : IfcNamedUnit;\n\tExponent : INTEGER;\nEND_ENTITY;\n\nENTITY IfcDimensionalExponents;\n\tLengthExponent : INTEGER;\n\tMassExponent : INTEGER;\n\tTimeExponent : INTEGER;\n\tElectricCurrentExponent : INTEGER;\n\tThermodynamicTemperatureExponent : INTEGER;\n\tAmountOfSubstanceExponent : INTEGER;\n\tLuminousIntensityExponent : INTEGER;\nEND_ENTITY;\n\nENTITY IfcDirection\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tDirectionRatios : LIST [2:3] OF IfcReal;\n DERIVE\n\tDim : IfcDimensionCount := HIINDEX(DirectionRatios);\n WHERE\n\tMagnitudeGreaterZero : SIZEOF(QUERY(Tmp <* DirectionRatios | Tmp <> 0.0)) > 0;\nEND_ENTITY;\n\nENTITY IfcDiscreteAccessory\n SUBTYPE OF (IfcElementComponent);\n\tPredefinedType : OPTIONAL IfcDiscreteAccessoryTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n(PredefinedType <> IfcDiscreteAccessoryTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcDiscreteAccessoryTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCDISCRETEACCESSORYTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDiscreteAccessoryType\n SUBTYPE OF (IfcElementComponentType);\n\tPredefinedType : IfcDiscreteAccessoryTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDiscreteAccessoryTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcDiscreteAccessoryTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDistributionChamberElement\n SUBTYPE OF (IfcDistributionFlowElement);\n\tPredefinedType : OPTIONAL IfcDistributionChamberElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcDistributionChamberElementTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcDistributionChamberElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n('IFC4.IFCDISTRIBUTIONCHAMBERELEMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDistributionChamberElementType\n SUBTYPE OF (IfcDistributionFlowElementType);\n\tPredefinedType : IfcDistributionChamberElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDistributionChamberElementTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcDistributionChamberElementTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDistributionCircuit\n SUBTYPE OF (IfcDistributionSystem);\nEND_ENTITY;\n\nENTITY IfcDistributionControlElement\n SUPERTYPE OF (ONEOF\n    (IfcActuator\n    ,IfcAlarm\n    ,IfcController\n    ,IfcFlowInstrument\n    ,IfcProtectiveDeviceTrippingUnit\n    ,IfcSensor\n    ,IfcUnitaryControlElement))\n SUBTYPE OF (IfcDistributionElement);\n INVERSE\n\tAssignedToFlowElement : SET [0:1] OF IfcRelFlowControlElements FOR RelatedControlElements;\nEND_ENTITY;\n\nENTITY IfcDistributionControlElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcActuatorType\n    ,IfcAlarmType\n    ,IfcControllerType\n    ,IfcFlowInstrumentType\n    ,IfcProtectiveDeviceTrippingUnitType\n    ,IfcSensorType\n    ,IfcUnitaryControlElementType))\n SUBTYPE OF (IfcDistributionElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionElement\n SUPERTYPE OF (ONEOF\n    (IfcDistributionControlElement\n    ,IfcDistributionFlowElement))\n SUBTYPE OF (IfcElement);\n INVERSE\n\tHasPorts : SET [0:?] OF IfcRelConnectsPortToElement FOR RelatedElement;\nEND_ENTITY;\n\nENTITY IfcDistributionElementType\n SUPERTYPE OF (ONEOF\n    (IfcDistributionControlElementType\n    ,IfcDistributionFlowElementType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionFlowElement\n SUPERTYPE OF (ONEOF\n    (IfcDistributionChamberElement\n    ,IfcEnergyConversionDevice\n    ,IfcFlowController\n    ,IfcFlowFitting\n    ,IfcFlowMovingDevice\n    ,IfcFlowSegment\n    ,IfcFlowStorageDevice\n    ,IfcFlowTerminal\n    ,IfcFlowTreatmentDevice))\n SUBTYPE OF (IfcDistributionElement);\n INVERSE\n\tHasControlElements : SET [0:1] OF IfcRelFlowControlElements FOR RelatingFlowElement;\nEND_ENTITY;\n\nENTITY IfcDistributionFlowElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcDistributionChamberElementType\n    ,IfcEnergyConversionDeviceType\n    ,IfcFlowControllerType\n    ,IfcFlowFittingType\n    ,IfcFlowMovingDeviceType\n    ,IfcFlowSegmentType\n    ,IfcFlowStorageDeviceType\n    ,IfcFlowTerminalType\n    ,IfcFlowTreatmentDeviceType))\n SUBTYPE OF (IfcDistributionElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionPort\n SUBTYPE OF (IfcPort);\n\tFlowDirection : OPTIONAL IfcFlowDirectionEnum;\n\tPredefinedType : OPTIONAL IfcDistributionPortTypeEnum;\n\tSystemType : OPTIONAL IfcDistributionSystemEnum;\nEND_ENTITY;\n\nENTITY IfcDistributionSystem\n SUPERTYPE OF (ONEOF\n    (IfcDistributionCircuit))\n SUBTYPE OF (IfcSystem);\n\tLongName : OPTIONAL IfcLabel;\n\tPredefinedType : OPTIONAL IfcDistributionSystemEnum;\nEND_ENTITY;\n\nENTITY IfcDocumentInformation\n SUBTYPE OF (IfcExternalInformation);\n\tIdentification : IfcIdentifier;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tLocation : OPTIONAL IfcURIReference;\n\tPurpose : OPTIONAL IfcText;\n\tIntendedUse : OPTIONAL IfcText;\n\tScope : OPTIONAL IfcText;\n\tRevision : OPTIONAL IfcLabel;\n\tDocumentOwner : OPTIONAL IfcActorSelect;\n\tEditors : OPTIONAL SET [1:?] OF IfcActorSelect;\n\tCreationTime : OPTIONAL IfcDateTime;\n\tLastRevisionTime : OPTIONAL IfcDateTime;\n\tElectronicFormat : OPTIONAL IfcIdentifier;\n\tValidFrom : OPTIONAL IfcDate;\n\tValidUntil : OPTIONAL IfcDate;\n\tConfidentiality : OPTIONAL IfcDocumentConfidentialityEnum;\n\tStatus : OPTIONAL IfcDocumentStatusEnum;\n INVERSE\n\tDocumentInfoForObjects : SET [0:?] OF IfcRelAssociatesDocument FOR RelatingDocument;\n\tHasDocumentReferences : SET [0:?] OF IfcDocumentReference FOR ReferencedDocument;\n\tIsPointedTo : SET [0:?] OF IfcDocumentInformationRelationship FOR RelatedDocuments;\n\tIsPointer : SET [0:1] OF IfcDocumentInformationRelationship FOR RelatingDocument;\nEND_ENTITY;\n\nENTITY IfcDocumentInformationRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingDocument : IfcDocumentInformation;\n\tRelatedDocuments : SET [1:?] OF IfcDocumentInformation;\n\tRelationshipType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcDocumentReference\n SUBTYPE OF (IfcExternalReference);\n\tDescription : OPTIONAL IfcText;\n\tReferencedDocument : OPTIONAL IfcDocumentInformation;\n INVERSE\n\tDocumentRefForObjects : SET [0:?] OF IfcRelAssociatesDocument FOR RelatingDocument;\n WHERE\n\tWR1 : EXISTS(Name) XOR EXISTS(ReferencedDocument);\nEND_ENTITY;\n\nENTITY IfcDoor\n SUPERTYPE OF (ONEOF\n    (IfcDoorStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n\tOverallHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tOverallWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : OPTIONAL IfcDoorTypeEnum;\n\tOperationType : OPTIONAL IfcDoorTypeOperationEnum;\n\tUserDefinedOperationType : OPTIONAL IfcLabel;\n WHERE\n\tCorrectStyleAssigned : (SIZEOF(IsTypedBy) = 0) \nOR ('IFC4.IFCDOORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDoorLiningProperties\n SUBTYPE OF (IfcPreDefinedPropertySet);\n\tLiningDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tLiningThickness : OPTIONAL IfcNonNegativeLengthMeasure;\n\tThresholdDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tThresholdThickness : OPTIONAL IfcNonNegativeLengthMeasure;\n\tTransomThickness : OPTIONAL IfcNonNegativeLengthMeasure;\n\tTransomOffset : OPTIONAL IfcLengthMeasure;\n\tLiningOffset : OPTIONAL IfcLengthMeasure;\n\tThresholdOffset : OPTIONAL IfcLengthMeasure;\n\tCasingThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tCasingDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n\tLiningToPanelOffsetX : OPTIONAL IfcLengthMeasure;\n\tLiningToPanelOffsetY : OPTIONAL IfcLengthMeasure;\n WHERE\n\tWR31 : NOT(EXISTS(LiningDepth) AND NOT(EXISTS(LiningThickness)));\n\tWR32 : NOT(EXISTS(ThresholdDepth) AND NOT(EXISTS(ThresholdThickness)));\n\tWR33 : (EXISTS(TransomOffset) AND EXISTS(TransomThickness)) XOR\n(NOT(EXISTS(TransomOffset)) AND NOT(EXISTS(TransomThickness)));\n\tWR34 : (EXISTS(CasingDepth) AND EXISTS(CasingThickness)) XOR\n(NOT(EXISTS(CasingDepth)) AND NOT(EXISTS(CasingThickness)));\n\tWR35 : (EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1])) \nAND \n(\n ('IFC4.IFCDOORTYPE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]))\n  OR\n ('IFC4.IFCDOORSTYLE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]))\n);\nEND_ENTITY;\n\nENTITY IfcDoorPanelProperties\n SUBTYPE OF (IfcPreDefinedPropertySet);\n\tPanelDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tPanelOperation : IfcDoorPanelOperationEnum;\n\tPanelWidth : OPTIONAL IfcNormalisedRatioMeasure;\n\tPanelPosition : IfcDoorPanelPositionEnum;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n WHERE\n\tApplicableToType : (EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1])) \nAND \n(\n ('IFC4.IFCDOORTYPE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]))\n  OR\n ('IFC4.IFCDOORSTYLE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]))\n);\nEND_ENTITY;\n\nENTITY IfcDoorStandardCase\n SUBTYPE OF (IfcDoor);\nEND_ENTITY;\n\nENTITY IfcDoorStyle\n SUBTYPE OF (IfcTypeProduct);\n\tOperationType : IfcDoorStyleOperationEnum;\n\tConstructionType : IfcDoorStyleConstructionEnum;\n\tParameterTakesPrecedence : IfcBoolean;\n\tSizeable : IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcDoorType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcDoorTypeEnum;\n\tOperationType : IfcDoorTypeOperationEnum;\n\tParameterTakesPrecedence : OPTIONAL IfcBoolean;\n\tUserDefinedOperationType : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDoorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcDoorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDraughtingPreDefinedColour\n SUBTYPE OF (IfcPreDefinedColour);\n WHERE\n\tPreDefinedColourNames : SELF\\IfcPreDefinedItem.Name IN ['black','red','green','blue','yellow',\n     'magenta','cyan','white','by layer'];\nEND_ENTITY;\n\nENTITY IfcDraughtingPreDefinedCurveFont\n SUBTYPE OF (IfcPreDefinedCurveFont);\n WHERE\n\tPreDefinedCurveFontNames : SELF\\IfcPredefinedItem.Name IN\n       ['continuous',\n        'chain',\n        'chain double dash',\n        'dashed',\n        'dotted',\n        'by layer'];\nEND_ENTITY;\n\nENTITY IfcDuctFitting\n SUBTYPE OF (IfcFlowFitting);\n\tPredefinedType : OPTIONAL IfcDuctFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCDUCTFITTINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDuctFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcDuctFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDuctSegment\n SUBTYPE OF (IfcFlowSegment);\n\tPredefinedType : OPTIONAL IfcDuctSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcDuctSegmentTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcDuctSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCDUCTSEGMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDuctSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcDuctSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDuctSegmentTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcDuctSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDuctSilencer\n SUBTYPE OF (IfcFlowTreatmentDevice);\n\tPredefinedType : OPTIONAL IfcDuctSilencerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcDuctSilencerTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcDuctSilencerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCDUCTSILENCERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDuctSilencerType\n SUBTYPE OF (IfcFlowTreatmentDeviceType);\n\tPredefinedType : IfcDuctSilencerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDuctSilencerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcDuctSilencerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcEdge\n SUPERTYPE OF (ONEOF\n    (IfcEdgeCurve\n    ,IfcOrientedEdge\n    ,IfcSubedge))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tEdgeStart : IfcVertex;\n\tEdgeEnd : IfcVertex;\nEND_ENTITY;\n\nENTITY IfcEdgeCurve\n SUBTYPE OF (IfcEdge);\n\tEdgeGeometry : IfcCurve;\n\tSameSense : IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcEdgeLoop\n SUBTYPE OF (IfcLoop);\n\tEdgeList : LIST [1:?] OF IfcOrientedEdge;\n DERIVE\n\tNe : IfcInteger := SIZEOF(EdgeList);\n WHERE\n\tIsClosed : (EdgeList[1].EdgeStart) :=: (EdgeList[Ne].EdgeEnd);\n\tIsContinuous : IfcLoopHeadToTail(SELF);\nEND_ENTITY;\n\nENTITY IfcElectricAppliance\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcElectricApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcElectricApplianceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcElectricApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCELECTRICAPPLIANCETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricApplianceType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcElectricApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricApplianceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcElectricApplianceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElectricDistributionBoard\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcElectricDistributionBoardTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcElectricDistributionBoardTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcElectricDistributionBoardTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCELECTRICDISTRIBUTIONBOARDTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricDistributionBoardType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcElectricDistributionBoardTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricDistributionBoardTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcElectricDistributionBoardTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElectricFlowStorageDevice\n SUBTYPE OF (IfcFlowStorageDevice);\n\tPredefinedType : OPTIONAL IfcElectricFlowStorageDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCELECTRICFLOWSTORAGEDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricFlowStorageDeviceType\n SUBTYPE OF (IfcFlowStorageDeviceType);\n\tPredefinedType : IfcElectricFlowStorageDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElectricGenerator\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcElectricGeneratorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcElectricGeneratorTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcElectricGeneratorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCELECTRICGENERATORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricGeneratorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcElectricGeneratorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricGeneratorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcElectricGeneratorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElectricMotor\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcElectricMotorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcElectricMotorTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcElectricMotorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCELECTRICMOTORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricMotorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcElectricMotorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricMotorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcElectricMotorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElectricTimeControl\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcElectricTimeControlTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcElectricTimeControlTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcElectricTimeControlTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCELECTRICTIMECONTROLTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricTimeControlType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcElectricTimeControlTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricTimeControlTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcElectricTimeControlTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElement\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBuildingElement\n    ,IfcCivilElement\n    ,IfcDistributionElement\n    ,IfcElementAssembly\n    ,IfcElementComponent\n    ,IfcFeatureElement\n    ,IfcFurnishingElement\n    ,IfcGeographicElement\n    ,IfcTransportElement\n    ,IfcVirtualElement))\n SUBTYPE OF (IfcProduct);\n\tTag : OPTIONAL IfcIdentifier;\n INVERSE\n\tFillsVoids : SET [0:1] OF IfcRelFillsElement FOR RelatedBuildingElement;\n\tConnectedTo : SET [0:?] OF IfcRelConnectsElements FOR RelatingElement;\n\tIsInterferedByElements : SET [0:?] OF IfcRelInterferesElements FOR RelatedElement;\n\tInterferesElements : SET [0:?] OF IfcRelInterferesElements FOR RelatingElement;\n\tHasProjections : SET [0:?] OF IfcRelProjectsElement FOR RelatingElement;\n\tReferencedInStructures : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatedElements;\n\tHasOpenings : SET [0:?] OF IfcRelVoidsElement FOR RelatingBuildingElement;\n\tIsConnectionRealization : SET [0:?] OF IfcRelConnectsWithRealizingElements FOR RealizingElements;\n\tProvidesBoundaries : SET [0:?] OF IfcRelSpaceBoundary FOR RelatedBuildingElement;\n\tConnectedFrom : SET [0:?] OF IfcRelConnectsElements FOR RelatedElement;\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\n\tHasCoverings : SET [0:?] OF IfcRelCoversBldgElements FOR RelatingBuildingElement;\nEND_ENTITY;\n\nENTITY IfcElementAssembly\n SUBTYPE OF (IfcElement);\n\tAssemblyPlace : OPTIONAL IfcAssemblyPlaceEnum;\n\tPredefinedType : OPTIONAL IfcElementAssemblyTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcElementAssemblyTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcElementAssemblyTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCELEMENTASSEMBLYTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElementAssemblyType\n SUBTYPE OF (IfcElementType);\n\tPredefinedType : IfcElementAssemblyTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElementAssemblyTypeEnum.USERDEFINED) OR \n((PredefinedType = IfcElementAssemblyTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElementComponent\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBuildingElementPart\n    ,IfcDiscreteAccessory\n    ,IfcFastener\n    ,IfcMechanicalFastener\n    ,IfcReinforcingElement\n    ,IfcVibrationIsolator))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcElementComponentType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBuildingElementPartType\n    ,IfcDiscreteAccessoryType\n    ,IfcFastenerType\n    ,IfcMechanicalFastenerType\n    ,IfcReinforcingElementType\n    ,IfcVibrationIsolatorType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcElementQuantity\n SUBTYPE OF (IfcQuantitySet);\n\tMethodOfMeasurement : OPTIONAL IfcLabel;\n\tQuantities : SET [1:?] OF IfcPhysicalQuantity;\n WHERE\n\tUniqueQuantityNames : IfcUniqueQuantityNames(Quantities);\nEND_ENTITY;\n\nENTITY IfcElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBuildingElementType\n    ,IfcCivilElementType\n    ,IfcDistributionElementType\n    ,IfcElementAssemblyType\n    ,IfcElementComponentType\n    ,IfcFurnishingElementType\n    ,IfcGeographicElementType\n    ,IfcTransportElementType))\n SUBTYPE OF (IfcTypeProduct);\n\tElementType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcElementarySurface\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCylindricalSurface\n    ,IfcPlane\n    ,IfcSphericalSurface\n    ,IfcToroidalSurface))\n SUBTYPE OF (IfcSurface);\n\tPosition : IfcAxis2Placement3D;\nEND_ENTITY;\n\nENTITY IfcEllipse\n SUBTYPE OF (IfcConic);\n\tSemiAxis1 : IfcPositiveLengthMeasure;\n\tSemiAxis2 : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcEllipseProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tSemiAxis1 : IfcPositiveLengthMeasure;\n\tSemiAxis2 : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcEnergyConversionDevice\n SUPERTYPE OF (ONEOF\n    (IfcAirToAirHeatRecovery\n    ,IfcBoiler\n    ,IfcBurner\n    ,IfcChiller\n    ,IfcCoil\n    ,IfcCondenser\n    ,IfcCooledBeam\n    ,IfcCoolingTower\n    ,IfcElectricGenerator\n    ,IfcElectricMotor\n    ,IfcEngine\n    ,IfcEvaporativeCooler\n    ,IfcEvaporator\n    ,IfcHeatExchanger\n    ,IfcHumidifier\n    ,IfcMotorConnection\n    ,IfcSolarDevice\n    ,IfcTransformer\n    ,IfcTubeBundle\n    ,IfcUnitaryEquipment))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcEnergyConversionDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcAirToAirHeatRecoveryType\n    ,IfcBoilerType\n    ,IfcBurnerType\n    ,IfcChillerType\n    ,IfcCoilType\n    ,IfcCondenserType\n    ,IfcCooledBeamType\n    ,IfcCoolingTowerType\n    ,IfcElectricGeneratorType\n    ,IfcElectricMotorType\n    ,IfcEngineType\n    ,IfcEvaporativeCoolerType\n    ,IfcEvaporatorType\n    ,IfcHeatExchangerType\n    ,IfcHumidifierType\n    ,IfcMotorConnectionType\n    ,IfcSolarDeviceType\n    ,IfcTransformerType\n    ,IfcTubeBundleType\n    ,IfcUnitaryEquipmentType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcEngine\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcEngineTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcEngineTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcEngineTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n('IFC4.IFCENGINETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcEngineType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcEngineTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcEngineTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcEngineTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcEvaporativeCooler\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcEvaporativeCoolerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcEvaporativeCoolerTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcEvaporativeCoolerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCEVAPORATIVECOOLERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcEvaporativeCoolerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcEvaporativeCoolerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcEvaporativeCoolerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcEvaporativeCoolerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcEvaporator\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcEvaporatorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcEvaporatorTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcEvaporatorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCEVAPORATORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcEvaporatorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcEvaporatorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcEvaporatorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcEvaporatorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcEvent\n SUBTYPE OF (IfcProcess);\n\tPredefinedType : OPTIONAL IfcEventTypeEnum;\n\tEventTriggerType : OPTIONAL IfcEventTriggerTypeEnum;\n\tUserDefinedEventTriggerType : OPTIONAL IfcLabel;\n\tEventOccurenceTime : OPTIONAL IfcEventTime;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcEventTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEventTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : NOT(EXISTS(EventTriggerType)) OR (EventTriggerType <> IfcEventTriggerTypeEnum.USERDEFINED) OR ((EventTriggerType = IfcEventTriggerTypeEnum.USERDEFINED) AND EXISTS(UserDefinedEventTriggerType));\nEND_ENTITY;\n\nENTITY IfcEventTime\n SUBTYPE OF (IfcSchedulingTime);\n\tActualDate : OPTIONAL IfcDateTime;\n\tEarlyDate : OPTIONAL IfcDateTime;\n\tLateDate : OPTIONAL IfcDateTime;\n\tScheduleDate : OPTIONAL IfcDateTime;\nEND_ENTITY;\n\nENTITY IfcEventType\n SUBTYPE OF (IfcTypeProcess);\n\tPredefinedType : IfcEventTypeEnum;\n\tEventTriggerType : IfcEventTriggerTypeEnum;\n\tUserDefinedEventTriggerType : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcEventTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEventTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeProcess.ProcessType));\n\tCorrectEventTriggerType : (EventTriggerType <> IfcEventTriggerTypeEnum.USERDEFINED) OR ((EventTriggerType = IfcEventTriggerTypeEnum.USERDEFINED) AND EXISTS(UserDefinedEventTriggerType));\nEND_ENTITY;\n\nENTITY IfcExtendedProperties\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcMaterialProperties\n    ,IfcProfileProperties))\n SUBTYPE OF (IfcPropertyAbstraction);\n\tName : OPTIONAL IfcIdentifier;\n\tDescription : OPTIONAL IfcText;\n\tProperties : SET [1:?] OF IfcProperty;\nEND_ENTITY;\n\nENTITY IfcExternalInformation\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcClassification\n    ,IfcDocumentInformation\n    ,IfcLibraryInformation));\nEND_ENTITY;\n\nENTITY IfcExternalReference\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcClassificationReference\n    ,IfcDocumentReference\n    ,IfcExternallyDefinedHatchStyle\n    ,IfcExternallyDefinedSurfaceStyle\n    ,IfcExternallyDefinedTextFont\n    ,IfcLibraryReference));\n\tLocation : OPTIONAL IfcURIReference;\n\tIdentification : OPTIONAL IfcIdentifier;\n\tName : OPTIONAL IfcLabel;\n INVERSE\n\tExternalReferenceForResources : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatingReference;\n WHERE\n\tWR1 : EXISTS(Identification) OR EXISTS(Location) OR EXISTS(Name);\nEND_ENTITY;\n\nENTITY IfcExternalReferenceRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingReference : IfcExternalReference;\n\tRelatedResourceObjects : SET [1:?] OF IfcResourceObjectSelect;\nEND_ENTITY;\n\nENTITY IfcExternalSpatialElement\n SUBTYPE OF (IfcExternalSpatialStructureElement);\n\tPredefinedType : OPTIONAL IfcExternalSpatialElementTypeEnum;\n INVERSE\n\tBoundedBy : SET [0:?] OF IfcRelSpaceBoundary FOR RelatingSpace;\nEND_ENTITY;\n\nENTITY IfcExternalSpatialStructureElement\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcExternalSpatialElement))\n SUBTYPE OF (IfcSpatialElement);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedHatchStyle\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedSurfaceStyle\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedTextFont\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExtrudedAreaSolid\n SUPERTYPE OF (ONEOF\n    (IfcExtrudedAreaSolidTapered))\n SUBTYPE OF (IfcSweptAreaSolid);\n\tExtrudedDirection : IfcDirection;\n\tDepth : IfcPositiveLengthMeasure;\n WHERE\n\tValidExtrusionDirection : IfcDotProduct(IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcDirection([0.0,0.0,1.0]), SELF.ExtrudedDirection) <> 0.0;\nEND_ENTITY;\n\nENTITY IfcExtrudedAreaSolidTapered\n SUBTYPE OF (IfcExtrudedAreaSolid);\n\tEndSweptArea : IfcProfileDef;\n WHERE\n\tCorrectProfileAssignment : IfcTaperedSweptAreaProfiles(SELF\\IfcSweptAreaSolid.SweptArea, SELF.EndSweptArea);\nEND_ENTITY;\n\nENTITY IfcFace\n SUPERTYPE OF (ONEOF\n    (IfcFaceSurface))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tBounds : SET [1:?] OF IfcFaceBound;\n INVERSE\n\tHasTextureMaps : SET [0:?] OF IfcTextureMap FOR MappedTo;\n WHERE\n\tHasOuterBound : SIZEOF(QUERY(temp <* Bounds | 'IFC4.IFCFACEOUTERBOUND' IN TYPEOF(temp))) <= 1;\nEND_ENTITY;\n\nENTITY IfcFaceBasedSurfaceModel\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tFbsmFaces : SET [1:?] OF IfcConnectedFaceSet;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcFaceBound\n SUPERTYPE OF (ONEOF\n    (IfcFaceOuterBound))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tBound : IfcLoop;\n\tOrientation : IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcFaceOuterBound\n SUBTYPE OF (IfcFaceBound);\nEND_ENTITY;\n\nENTITY IfcFaceSurface\n SUPERTYPE OF (ONEOF\n    (IfcAdvancedFace))\n SUBTYPE OF (IfcFace);\n\tFaceSurface : IfcSurface;\n\tSameSense : IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcFacetedBrep\n SUPERTYPE OF (ONEOF\n    (IfcFacetedBrepWithVoids))\n SUBTYPE OF (IfcManifoldSolidBrep);\nEND_ENTITY;\n\nENTITY IfcFacetedBrepWithVoids\n SUBTYPE OF (IfcFacetedBrep);\n\tVoids : SET [1:?] OF IfcClosedShell;\nEND_ENTITY;\n\nENTITY IfcFailureConnectionCondition\n SUBTYPE OF (IfcStructuralConnectionCondition);\n\tTensionFailureX : OPTIONAL IfcForceMeasure;\n\tTensionFailureY : OPTIONAL IfcForceMeasure;\n\tTensionFailureZ : OPTIONAL IfcForceMeasure;\n\tCompressionFailureX : OPTIONAL IfcForceMeasure;\n\tCompressionFailureY : OPTIONAL IfcForceMeasure;\n\tCompressionFailureZ : OPTIONAL IfcForceMeasure;\nEND_ENTITY;\n\nENTITY IfcFan\n SUBTYPE OF (IfcFlowMovingDevice);\n\tPredefinedType : OPTIONAL IfcFanTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcFanTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcFanTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCFANTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFanType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcFanTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFanTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFanTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFastener\n SUBTYPE OF (IfcElementComponent);\n\tPredefinedType : OPTIONAL IfcFastenerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n(PredefinedType <> IfcFastenerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFastenerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCFASTENERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFastenerType\n SUBTYPE OF (IfcElementComponentType);\n\tPredefinedType : IfcFastenerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFastenerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFastenerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFeatureElement\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcFeatureElementAddition\n    ,IfcFeatureElementSubtraction\n    ,IfcSurfaceFeature))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcFeatureElementAddition\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcProjectionElement))\n SUBTYPE OF (IfcFeatureElement);\n INVERSE\n\tProjectsElements : IfcRelProjectsElement FOR RelatedFeatureElement;\nEND_ENTITY;\n\nENTITY IfcFeatureElementSubtraction\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcOpeningElement\n    ,IfcVoidingFeature))\n SUBTYPE OF (IfcFeatureElement);\n INVERSE\n\tVoidsElements : IfcRelVoidsElement FOR RelatedOpeningElement;\n WHERE\n\tHasNoSubtraction : SIZEOF(SELF\\IfcElement.HasOpenings) = 0;\n\tIsNotFilling : SIZEOF(SELF\\IfcElement.FillsVoids) = 0;\nEND_ENTITY;\n\nENTITY IfcFillAreaStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tFillStyles : SET [1:?] OF IfcFillStyleSelect;\n\tModelorDraughting : OPTIONAL IfcBoolean;\n WHERE\n\tMaxOneColour : SIZEOF(QUERY(Style <* SELF.FillStyles |\n  'IFC4.IFCCOLOUR' IN\n   TYPEOF(Style)\n  )) <= 1;\n\tMaxOneExtHatchStyle : SIZEOF(QUERY(Style <* SELF.FillStyles |\n  'IFC4.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN\n   TYPEOF(Style)\n  )) <= 1;\n\tConsistentHatchStyleDef : IfcCorrectFillAreaStyle(SELF.FillStyles);\nEND_ENTITY;\n\nENTITY IfcFillAreaStyleHatching\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tHatchLineAppearance : IfcCurveStyle;\n\tStartOfNextHatchLine : IfcHatchLineDistanceSelect;\n\tPointOfReferenceHatchLine : OPTIONAL IfcCartesianPoint;\n\tPatternStart : OPTIONAL IfcCartesianPoint;\n\tHatchLineAngle : IfcPlaneAngleMeasure;\n WHERE\n\tPatternStart2D : NOT(EXISTS(PatternStart)) OR (PatternStart.Dim = 2);\n\tRefHatchLine2D : NOT(EXISTS(PointOfReferenceHatchLine)) OR (PointOfReferenceHatchLine.Dim = 2);\nEND_ENTITY;\n\nENTITY IfcFillAreaStyleTiles\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tTilingPattern : LIST [2:2] OF IfcVector;\n\tTiles : SET [1:?] OF IfcStyledItem;\n\tTilingScale : IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcFilter\n SUBTYPE OF (IfcFlowTreatmentDevice);\n\tPredefinedType : OPTIONAL IfcFilterTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcFilterTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcFilterTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCFILTERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFilterType\n SUBTYPE OF (IfcFlowTreatmentDeviceType);\n\tPredefinedType : IfcFilterTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFilterTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFilterTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFireSuppressionTerminal\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcFireSuppressionTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcFireSuppressionTerminalTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcFireSuppressionTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCFIRESUPPRESSIONTERMINALTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFireSuppressionTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcFireSuppressionTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFireSuppressionTerminalTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFireSuppressionTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFixedReferenceSweptAreaSolid\n SUBTYPE OF (IfcSweptAreaSolid);\n\tDirectrix : IfcCurve;\n\tStartParam : OPTIONAL IfcParameterValue;\n\tEndParam : OPTIONAL IfcParameterValue;\n\tFixedReference : IfcDirection;\n WHERE\n\tDirectrixBounded : (EXISTS(StartParam) AND EXISTS(EndParam)) OR \n(SIZEOF(['IFC4.IFCCONIC', 'IFC4.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1);\nEND_ENTITY;\n\nENTITY IfcFlowController\n SUPERTYPE OF (ONEOF\n    (IfcAirTerminalBox\n    ,IfcDamper\n    ,IfcElectricDistributionBoard\n    ,IfcElectricTimeControl\n    ,IfcFlowMeter\n    ,IfcProtectiveDevice\n    ,IfcSwitchingDevice\n    ,IfcValve))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowControllerType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcAirTerminalBoxType\n    ,IfcDamperType\n    ,IfcElectricDistributionBoardType\n    ,IfcElectricTimeControlType\n    ,IfcFlowMeterType\n    ,IfcProtectiveDeviceType\n    ,IfcSwitchingDeviceType\n    ,IfcValveType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowFitting\n SUPERTYPE OF (ONEOF\n    (IfcCableCarrierFitting\n    ,IfcCableFitting\n    ,IfcDuctFitting\n    ,IfcJunctionBox\n    ,IfcPipeFitting))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowFittingType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCableCarrierFittingType\n    ,IfcCableFittingType\n    ,IfcDuctFittingType\n    ,IfcJunctionBoxType\n    ,IfcPipeFittingType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowInstrument\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcFlowInstrumentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcFlowInstrumentTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcFlowInstrumentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n('IFC4.IFCFLOWINSTRUMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFlowInstrumentType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcFlowInstrumentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFlowInstrumentTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFlowInstrumentTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFlowMeter\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcFlowMeterTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcFlowMeterTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcFlowMeterTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCFLOWMETERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFlowMeterType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcFlowMeterTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFlowMeterTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFlowMeterTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFlowMovingDevice\n SUPERTYPE OF (ONEOF\n    (IfcCompressor\n    ,IfcFan\n    ,IfcPump))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowMovingDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCompressorType\n    ,IfcFanType\n    ,IfcPumpType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowSegment\n SUPERTYPE OF (ONEOF\n    (IfcCableCarrierSegment\n    ,IfcCableSegment\n    ,IfcDuctSegment\n    ,IfcPipeSegment))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowSegmentType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCableCarrierSegmentType\n    ,IfcCableSegmentType\n    ,IfcDuctSegmentType\n    ,IfcPipeSegmentType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowStorageDevice\n SUPERTYPE OF (ONEOF\n    (IfcElectricFlowStorageDevice\n    ,IfcTank))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowStorageDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcElectricFlowStorageDeviceType\n    ,IfcTankType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowTerminal\n SUPERTYPE OF (ONEOF\n    (IfcAirTerminal\n    ,IfcAudioVisualAppliance\n    ,IfcCommunicationsAppliance\n    ,IfcElectricAppliance\n    ,IfcFireSuppressionTerminal\n    ,IfcLamp\n    ,IfcLightFixture\n    ,IfcMedicalDevice\n    ,IfcOutlet\n    ,IfcSanitaryTerminal\n    ,IfcSpaceHeater\n    ,IfcStackTerminal\n    ,IfcWasteTerminal))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowTerminalType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcAirTerminalType\n    ,IfcAudioVisualApplianceType\n    ,IfcCommunicationsApplianceType\n    ,IfcElectricApplianceType\n    ,IfcFireSuppressionTerminalType\n    ,IfcLampType\n    ,IfcLightFixtureType\n    ,IfcMedicalDeviceType\n    ,IfcOutletType\n    ,IfcSanitaryTerminalType\n    ,IfcSpaceHeaterType\n    ,IfcStackTerminalType\n    ,IfcWasteTerminalType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowTreatmentDevice\n SUPERTYPE OF (ONEOF\n    (IfcDuctSilencer\n    ,IfcFilter\n    ,IfcInterceptor))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowTreatmentDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcDuctSilencerType\n    ,IfcFilterType\n    ,IfcInterceptorType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFooting\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcFootingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT EXISTS(PredefinedType) OR\n(PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCFOOTINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFootingType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcFootingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFurnishingElement\n SUPERTYPE OF (ONEOF\n    (IfcFurniture\n    ,IfcSystemFurnitureElement))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcFurnishingElementType\n SUPERTYPE OF (ONEOF\n    (IfcFurnitureType\n    ,IfcSystemFurnitureElementType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcFurniture\n SUBTYPE OF (IfcFurnishingElement);\n\tPredefinedType : OPTIONAL IfcFurnitureTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcFurnitureTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcFurnitureTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n   ('IFC4.IFCFURNITURETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFurnitureType\n SUBTYPE OF (IfcFurnishingElementType);\n\tAssemblyPlace : IfcAssemblyPlaceEnum;\n\tPredefinedType : OPTIONAL IfcFurnitureTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFurnitureTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFurnitureTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcGeographicElement\n SUBTYPE OF (IfcElement);\n\tPredefinedType : OPTIONAL IfcGeographicElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcGeographicElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcGeographicElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCGEOGRAPHICELEMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcGeographicElementType\n SUBTYPE OF (IfcElementType);\n\tPredefinedType : IfcGeographicElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcGeographicElementTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcGeographicElementTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcGeometricCurveSet\n SUBTYPE OF (IfcGeometricSet);\n WHERE\n\tNoSurfaces : SIZEOF(QUERY(Temp <* SELF\\IfcGeometricSet.Elements |\n'IFC4.IFCSURFACE' IN TYPEOF(Temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationContext\n SUPERTYPE OF (ONEOF\n    (IfcGeometricRepresentationSubContext))\n SUBTYPE OF (IfcRepresentationContext);\n\tCoordinateSpaceDimension : IfcDimensionCount;\n\tPrecision : OPTIONAL IfcReal;\n\tWorldCoordinateSystem : IfcAxis2Placement;\n\tTrueNorth : OPTIONAL IfcDirection;\n INVERSE\n\tHasSubContexts : SET [0:?] OF IfcGeometricRepresentationSubContext FOR ParentContext;\n\tHasCoordinateOperation : SET [0:1] OF IfcCoordinateOperation FOR SourceCRS;\n WHERE\n\tNorth2D : NOT(EXISTS(TrueNorth)) OR (HIINDEX(TrueNorth.DirectionRatios) = 2);\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcAnnotationFillArea\n    ,IfcBooleanResult\n    ,IfcBoundingBox\n    ,IfcCartesianPointList\n    ,IfcCartesianTransformationOperator\n    ,IfcCompositeCurveSegment\n    ,IfcCsgPrimitive3D\n    ,IfcCurve\n    ,IfcDirection\n    ,IfcFaceBasedSurfaceModel\n    ,IfcFillAreaStyleHatching\n    ,IfcFillAreaStyleTiles\n    ,IfcGeometricSet\n    ,IfcHalfSpaceSolid\n    ,IfcLightSource\n    ,IfcPlacement\n    ,IfcPlanarExtent\n    ,IfcPoint\n    ,IfcSectionedSpine\n    ,IfcShellBasedSurfaceModel\n    ,IfcSolidModel\n    ,IfcSurface\n    ,IfcTessellatedItem\n    ,IfcTextLiteral\n    ,IfcVector))\n SUBTYPE OF (IfcRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationSubContext\n SUBTYPE OF (IfcGeometricRepresentationContext);\n\tParentContext : IfcGeometricRepresentationContext;\n\tTargetScale : OPTIONAL IfcPositiveRatioMeasure;\n\tTargetView : IfcGeometricProjectionEnum;\n\tUserDefinedTargetView : OPTIONAL IfcLabel;\n DERIVE\n\tSELF\\IfcGeometricRepresentationContext.WorldCoordinateSystem : IfcAxis2Placement := ParentContext.WorldCoordinateSystem;\n\tSELF\\IfcGeometricRepresentationContext.CoordinateSpaceDimension : IfcDimensionCount := ParentContext.CoordinateSpaceDimension;\n\tSELF\\IfcGeometricRepresentationContext.TrueNorth : IfcDirection := NVL(ParentContext.TrueNorth, IfcConvertDirectionInto2D(SELF\\IfcGeometricRepresentationContext.WorldCoordinateSystem.P[2]));\n\tSELF\\IfcGeometricRepresentationContext.Precision : IfcReal := NVL(ParentContext.Precision,1.E-5);\n WHERE\n\tParentNoSub : NOT('IFC4.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(ParentContext));\n\tUserTargetProvided : (TargetView <> IfcGeometricProjectionEnum.USERDEFINED) OR \n((TargetView =  IfcGeometricProjectionEnum.USERDEFINED) AND EXISTS(UserDefinedTargetView));\n\tNoCoordOperation : SIZEOF(SELF\\IfcGeometricRepresentationContext.HasCoordinateOperation) = 0;\nEND_ENTITY;\n\nENTITY IfcGeometricSet\n SUPERTYPE OF (ONEOF\n    (IfcGeometricCurveSet))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tElements : SET [1:?] OF IfcGeometricSetSelect;\n DERIVE\n\tDim : IfcDimensionCount := Elements[1].Dim;\n WHERE\n\tConsistentDim : SIZEOF(QUERY(Temp <* Elements |\n  Temp.Dim <> Elements[1].Dim))\n= 0;\nEND_ENTITY;\n\nENTITY IfcGrid\n SUBTYPE OF (IfcProduct);\n\tUAxes : LIST [1:?] OF UNIQUE IfcGridAxis;\n\tVAxes : LIST [1:?] OF UNIQUE IfcGridAxis;\n\tWAxes : OPTIONAL LIST [1:?] OF UNIQUE IfcGridAxis;\n\tPredefinedType : OPTIONAL IfcGridTypeEnum;\n INVERSE\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\n WHERE\n\tHasPlacement : EXISTS(SELF\\IfcProduct.ObjectPlacement);\nEND_ENTITY;\n\nENTITY IfcGridAxis;\n\tAxisTag : OPTIONAL IfcLabel;\n\tAxisCurve : IfcCurve;\n\tSameSense : IfcBoolean;\n INVERSE\n\tPartOfW : SET [0:1] OF IfcGrid FOR WAxes;\n\tPartOfV : SET [0:1] OF IfcGrid FOR VAxes;\n\tPartOfU : SET [0:1] OF IfcGrid FOR UAxes;\n\tHasIntersections : SET [0:?] OF IfcVirtualGridIntersection FOR IntersectingAxes;\n WHERE\n\tWR1 : AxisCurve.Dim = 2;\n\tWR2 : (SIZEOF(PartOfU) = 1) XOR (SIZEOF(PartOfV) = 1) XOR (SIZEOF(PartOfW) = 1);\nEND_ENTITY;\n\nENTITY IfcGridPlacement\n SUBTYPE OF (IfcObjectPlacement);\n\tPlacementLocation : IfcVirtualGridIntersection;\n\tPlacementRefDirection : OPTIONAL IfcGridPlacementDirectionSelect;\nEND_ENTITY;\n\nENTITY IfcGroup\n SUPERTYPE OF (ONEOF\n    (IfcAsset\n    ,IfcInventory\n    ,IfcStructuralLoadGroup\n    ,IfcStructuralResultGroup\n    ,IfcSystem))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tIsGroupedBy : SET [0:?] OF IfcRelAssignsToGroup FOR RelatingGroup;\nEND_ENTITY;\n\nENTITY IfcHalfSpaceSolid\n SUPERTYPE OF (ONEOF\n    (IfcBoxedHalfSpace\n    ,IfcPolygonalBoundedHalfSpace))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tBaseSurface : IfcSurface;\n\tAgreementFlag : IfcBoolean;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcHeatExchanger\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcHeatExchangerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcHeatExchangerTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcHeatExchangerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCHEATEXCHANGERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcHeatExchangerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcHeatExchangerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcHeatExchangerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcHeatExchangerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcHumidifier\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcHumidifierTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcHumidifierTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcHumidifierTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCHUMIDIFIERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcHumidifierType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcHumidifierTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcHumidifierTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcHumidifierTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcIShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tOverallWidth : IfcPositiveLengthMeasure;\n\tOverallDepth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tFlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n WHERE\n\tValidFlangeThickness : (2. * FlangeThickness) < OverallDepth;\n\tValidWebThickness : WebThickness < OverallWidth;\n\tValidFilletRadius : NOT(EXISTS(FilletRadius)) OR\n((FilletRadius <= (OverallWidth - WebThickness)/2.) AND \n (FilletRadius <= (OverallDepth - (2. * FlangeThickness))/2.));\nEND_ENTITY;\n\nENTITY IfcImageTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tURLReference : IfcURIReference;\nEND_ENTITY;\n\nENTITY IfcIndexedColourMap\n SUBTYPE OF (IfcPresentationItem);\n\tMappedTo : IfcTessellatedFaceSet;\n\tOpacity : OPTIONAL IfcNormalisedRatioMeasure;\n\tColours : IfcColourRgbList;\n\tColourIndex : LIST [1:?] OF IfcPositiveInteger;\nEND_ENTITY;\n\nENTITY IfcIndexedPolyCurve\n SUBTYPE OF (IfcBoundedCurve);\n\tPoints : IfcCartesianPointList;\n\tSegments : OPTIONAL LIST [1:?] OF IfcSegmentIndexSelect;\n\tSelfIntersect : OPTIONAL IfcBoolean;\n WHERE\n\tConsecutive : (SIZEOF(Segments) = 0) OR IfcConsecutiveSegments(Segments);\nEND_ENTITY;\n\nENTITY IfcIndexedPolygonalFace\n SUPERTYPE OF (ONEOF\n    (IfcIndexedPolygonalFaceWithVoids))\n SUBTYPE OF (IfcTessellatedItem);\n\tCoordIndex : LIST [3:?] OF IfcPositiveInteger;\n INVERSE\n\tToFaceSet : SET [1:?] OF IfcPolygonalFaceSet FOR Faces;\nEND_ENTITY;\n\nENTITY IfcIndexedPolygonalFaceWithVoids\n SUBTYPE OF (IfcIndexedPolygonalFace);\n\tInnerCoordIndices : LIST [1:?] OF LIST [3:?] OF UNIQUE IfcPositiveInteger;\nEND_ENTITY;\n\nENTITY IfcIndexedTextureMap\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcIndexedTriangleTextureMap))\n SUBTYPE OF (IfcTextureCoordinate);\n\tMappedTo : IfcTessellatedFaceSet;\n\tTexCoords : IfcTextureVertexList;\nEND_ENTITY;\n\nENTITY IfcIndexedTriangleTextureMap\n SUBTYPE OF (IfcIndexedTextureMap);\n\tTexCoordIndex : OPTIONAL LIST [1:?] OF LIST [3:3] OF IfcPositiveInteger;\nEND_ENTITY;\n\nENTITY IfcInterceptor\n SUBTYPE OF (IfcFlowTreatmentDevice);\n\tPredefinedType : OPTIONAL IfcInterceptorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcInterceptorTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcInterceptorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCINTERCEPTORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcInterceptorType\n SUBTYPE OF (IfcFlowTreatmentDeviceType);\n\tPredefinedType : IfcInterceptorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcInterceptorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcInterceptorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcIntersectionCurve\n SUBTYPE OF (IfcSurfaceCurve);\n WHERE\n\tTwoPCurves : SIZEOF(SELF\\IfcSurfaceCurve.AssociatedGeometry) = 2;\n\tDistinctSurfaces : IfcAssociatedSurface(SELF\\IfcSurfaceCurve.AssociatedGeometry[1]) <> IfcAssociatedSurface(SELF\\IfcSurfaceCurve.AssociatedGeometry[2]);\nEND_ENTITY;\n\nENTITY IfcInventory\n SUBTYPE OF (IfcGroup);\n\tPredefinedType : OPTIONAL IfcInventoryTypeEnum;\n\tJurisdiction : OPTIONAL IfcActorSelect;\n\tResponsiblePersons : OPTIONAL SET [1:?] OF IfcPerson;\n\tLastUpdateDate : OPTIONAL IfcDate;\n\tCurrentValue : OPTIONAL IfcCostValue;\n\tOriginalValue : OPTIONAL IfcCostValue;\nEND_ENTITY;\n\nENTITY IfcIrregularTimeSeries\n SUBTYPE OF (IfcTimeSeries);\n\tValues : LIST [1:?] OF IfcIrregularTimeSeriesValue;\nEND_ENTITY;\n\nENTITY IfcIrregularTimeSeriesValue;\n\tTimeStamp : IfcDateTime;\n\tListValues : LIST [1:?] OF IfcValue;\nEND_ENTITY;\n\nENTITY IfcJunctionBox\n SUBTYPE OF (IfcFlowFitting);\n\tPredefinedType : OPTIONAL IfcJunctionBoxTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcJunctionBoxTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcJunctionBoxTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCJUNCTIONBOXTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcJunctionBoxType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcJunctionBoxTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcJunctionBoxTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcJunctionBoxTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcLShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tLegSlope : OPTIONAL IfcPlaneAngleMeasure;\n WHERE\n\tValidThickness : (Thickness < Depth) AND (NOT(EXISTS(Width)) OR (Thickness < Width));\nEND_ENTITY;\n\nENTITY IfcLaborResource\n SUBTYPE OF (IfcConstructionResource);\n\tPredefinedType : OPTIONAL IfcLaborResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcLaborResourceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcLaborResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcLaborResourceType\n SUBTYPE OF (IfcConstructionResourceType);\n\tPredefinedType : IfcLaborResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcLaborResourceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcLaborResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeResource.ResourceType));\nEND_ENTITY;\n\nENTITY IfcLagTime\n SUBTYPE OF (IfcSchedulingTime);\n\tLagValue : IfcTimeOrRatioSelect;\n\tDurationType : IfcTaskDurationEnum;\nEND_ENTITY;\n\nENTITY IfcLamp\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcLampTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcLampTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcLampTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCLAMPTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcLampType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcLampTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcLampTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcLampTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcLibraryInformation\n SUBTYPE OF (IfcExternalInformation);\n\tName : IfcLabel;\n\tVersion : OPTIONAL IfcLabel;\n\tPublisher : OPTIONAL IfcActorSelect;\n\tVersionDate : OPTIONAL IfcDateTime;\n\tLocation : OPTIONAL IfcURIReference;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tLibraryInfoForObjects : SET [0:?] OF IfcRelAssociatesLibrary FOR RelatingLibrary;\n\tHasLibraryReferences : SET [0:?] OF IfcLibraryReference FOR ReferencedLibrary;\nEND_ENTITY;\n\nENTITY IfcLibraryReference\n SUBTYPE OF (IfcExternalReference);\n\tDescription : OPTIONAL IfcText;\n\tLanguage : OPTIONAL IfcLanguageId;\n\tReferencedLibrary : OPTIONAL IfcLibraryInformation;\n INVERSE\n\tLibraryRefForObjects : SET [0:?] OF IfcRelAssociatesLibrary FOR RelatingLibrary;\nEND_ENTITY;\n\nENTITY IfcLightDistributionData;\n\tMainPlaneAngle : IfcPlaneAngleMeasure;\n\tSecondaryPlaneAngle : LIST [1:?] OF IfcPlaneAngleMeasure;\n\tLuminousIntensity : LIST [1:?] OF IfcLuminousIntensityDistributionMeasure;\nEND_ENTITY;\n\nENTITY IfcLightFixture\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcLightFixtureTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcLightFixtureTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcLightFixtureTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCLIGHTFIXTURETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcLightFixtureType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcLightFixtureTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcLightFixtureTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcLightFixtureTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcLightIntensityDistribution;\n\tLightDistributionCurve : IfcLightDistributionCurveEnum;\n\tDistributionData : LIST [1:?] OF IfcLightDistributionData;\nEND_ENTITY;\n\nENTITY IfcLightSource\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcLightSourceAmbient\n    ,IfcLightSourceDirectional\n    ,IfcLightSourceGoniometric\n    ,IfcLightSourcePositional))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tName : OPTIONAL IfcLabel;\n\tLightColour : IfcColourRgb;\n\tAmbientIntensity : OPTIONAL IfcNormalisedRatioMeasure;\n\tIntensity : OPTIONAL IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcLightSourceAmbient\n SUBTYPE OF (IfcLightSource);\nEND_ENTITY;\n\nENTITY IfcLightSourceDirectional\n SUBTYPE OF (IfcLightSource);\n\tOrientation : IfcDirection;\nEND_ENTITY;\n\nENTITY IfcLightSourceGoniometric\n SUBTYPE OF (IfcLightSource);\n\tPosition : IfcAxis2Placement3D;\n\tColourAppearance : OPTIONAL IfcColourRgb;\n\tColourTemperature : IfcThermodynamicTemperatureMeasure;\n\tLuminousFlux : IfcLuminousFluxMeasure;\n\tLightEmissionSource : IfcLightEmissionSourceEnum;\n\tLightDistributionDataSource : IfcLightDistributionDataSourceSelect;\nEND_ENTITY;\n\nENTITY IfcLightSourcePositional\n SUPERTYPE OF (ONEOF\n    (IfcLightSourceSpot))\n SUBTYPE OF (IfcLightSource);\n\tPosition : IfcCartesianPoint;\n\tRadius : IfcPositiveLengthMeasure;\n\tConstantAttenuation : IfcReal;\n\tDistanceAttenuation : IfcReal;\n\tQuadricAttenuation : IfcReal;\nEND_ENTITY;\n\nENTITY IfcLightSourceSpot\n SUBTYPE OF (IfcLightSourcePositional);\n\tOrientation : IfcDirection;\n\tConcentrationExponent : OPTIONAL IfcReal;\n\tSpreadAngle : IfcPositivePlaneAngleMeasure;\n\tBeamWidthAngle : IfcPositivePlaneAngleMeasure;\nEND_ENTITY;\n\nENTITY IfcLine\n SUBTYPE OF (IfcCurve);\n\tPnt : IfcCartesianPoint;\n\tDir : IfcVector;\n WHERE\n\tSameDim : Dir.Dim = Pnt.Dim;\nEND_ENTITY;\n\nENTITY IfcLocalPlacement\n SUBTYPE OF (IfcObjectPlacement);\n\tPlacementRelTo : OPTIONAL IfcObjectPlacement;\n\tRelativePlacement : IfcAxis2Placement;\n WHERE\n\tWR21 : IfcCorrectLocalPlacement(RelativePlacement, PlacementRelTo);\nEND_ENTITY;\n\nENTITY IfcLoop\n SUPERTYPE OF (ONEOF\n    (IfcEdgeLoop\n    ,IfcPolyLoop\n    ,IfcVertexLoop))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcManifoldSolidBrep\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcAdvancedBrep\n    ,IfcFacetedBrep))\n SUBTYPE OF (IfcSolidModel);\n\tOuter : IfcClosedShell;\nEND_ENTITY;\n\nENTITY IfcMapConversion\n SUBTYPE OF (IfcCoordinateOperation);\n\tEastings : IfcLengthMeasure;\n\tNorthings : IfcLengthMeasure;\n\tOrthogonalHeight : IfcLengthMeasure;\n\tXAxisAbscissa : OPTIONAL IfcReal;\n\tXAxisOrdinate : OPTIONAL IfcReal;\n\tScale : OPTIONAL IfcReal;\nEND_ENTITY;\n\nENTITY IfcMappedItem\n SUBTYPE OF (IfcRepresentationItem);\n\tMappingSource : IfcRepresentationMap;\n\tMappingTarget : IfcCartesianTransformationOperator;\nEND_ENTITY;\n\nENTITY IfcMaterial\n SUBTYPE OF (IfcMaterialDefinition);\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tCategory : OPTIONAL IfcLabel;\n INVERSE\n\tHasRepresentation : SET [0:1] OF IfcMaterialDefinitionRepresentation FOR RepresentedMaterial;\n\tIsRelatedWith : SET [0:?] OF IfcMaterialRelationship FOR RelatedMaterials;\n\tRelatesTo : SET [0:1] OF IfcMaterialRelationship FOR RelatingMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialClassificationRelationship;\n\tMaterialClassifications : SET [1:?] OF IfcClassificationSelect;\n\tClassifiedMaterial : IfcMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialConstituent\n SUBTYPE OF (IfcMaterialDefinition);\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tMaterial : IfcMaterial;\n\tFraction : OPTIONAL IfcNormalisedRatioMeasure;\n\tCategory : OPTIONAL IfcLabel;\n INVERSE\n\tToMaterialConstituentSet : IfcMaterialConstituentSet FOR MaterialConstituents;\nEND_ENTITY;\n\nENTITY IfcMaterialConstituentSet\n SUBTYPE OF (IfcMaterialDefinition);\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tMaterialConstituents : OPTIONAL SET [1:?] OF IfcMaterialConstituent;\nEND_ENTITY;\n\nENTITY IfcMaterialDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcMaterial\n    ,IfcMaterialConstituent\n    ,IfcMaterialConstituentSet\n    ,IfcMaterialLayer\n    ,IfcMaterialLayerSet\n    ,IfcMaterialProfile\n    ,IfcMaterialProfileSet));\n INVERSE\n\tAssociatedTo : SET [0:?] OF IfcRelAssociatesMaterial FOR RelatingMaterial;\n\tHasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\n\tHasProperties : SET [0:?] OF IfcMaterialProperties FOR Material;\nEND_ENTITY;\n\nENTITY IfcMaterialDefinitionRepresentation\n SUBTYPE OF (IfcProductRepresentation);\n\tRepresentedMaterial : IfcMaterial;\n WHERE\n\tOnlyStyledRepresentations : SIZEOF(QUERY(temp <* Representations | \n  (NOT('IFC4.IFCSTYLEDREPRESENTATION' IN TYPEOF(temp)))\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcMaterialLayer\n SUPERTYPE OF (ONEOF\n    (IfcMaterialLayerWithOffsets))\n SUBTYPE OF (IfcMaterialDefinition);\n\tMaterial : OPTIONAL IfcMaterial;\n\tLayerThickness : IfcNonNegativeLengthMeasure;\n\tIsVentilated : OPTIONAL IfcLogical;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tCategory : OPTIONAL IfcLabel;\n\tPriority : OPTIONAL IfcInteger;\n INVERSE\n\tToMaterialLayerSet : IfcMaterialLayerSet FOR MaterialLayers;\n WHERE\n\tNormalizedPriority : NOT(EXISTS(Priority)) OR {0 <= Priority <= 100};\nEND_ENTITY;\n\nENTITY IfcMaterialLayerSet\n SUBTYPE OF (IfcMaterialDefinition);\n\tMaterialLayers : LIST [1:?] OF IfcMaterialLayer;\n\tLayerSetName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n DERIVE\n\tTotalThickness : IfcLengthMeasure := IfcMlsTotalThickness(SELF);\nEND_ENTITY;\n\nENTITY IfcMaterialLayerSetUsage\n SUBTYPE OF (IfcMaterialUsageDefinition);\n\tForLayerSet : IfcMaterialLayerSet;\n\tLayerSetDirection : IfcLayerSetDirectionEnum;\n\tDirectionSense : IfcDirectionSenseEnum;\n\tOffsetFromReferenceLine : IfcLengthMeasure;\n\tReferenceExtent : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMaterialLayerWithOffsets\n SUBTYPE OF (IfcMaterialLayer);\n\tOffsetDirection : IfcLayerSetDirectionEnum;\n\tOffsetValues : ARRAY [1:2] OF IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMaterialList;\n\tMaterials : LIST [1:?] OF IfcMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialProfile\n SUPERTYPE OF (ONEOF\n    (IfcMaterialProfileWithOffsets))\n SUBTYPE OF (IfcMaterialDefinition);\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tMaterial : OPTIONAL IfcMaterial;\n\tProfile : IfcProfileDef;\n\tPriority : OPTIONAL IfcInteger;\n\tCategory : OPTIONAL IfcLabel;\n INVERSE\n\tToMaterialProfileSet : IfcMaterialProfileSet FOR MaterialProfiles;\n WHERE\n\tNormalizedPriority : NOT(EXISTS(Priority)) OR {0 <= Priority <= 100};\nEND_ENTITY;\n\nENTITY IfcMaterialProfileSet\n SUBTYPE OF (IfcMaterialDefinition);\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tMaterialProfiles : LIST [1:?] OF IfcMaterialProfile;\n\tCompositeProfile : OPTIONAL IfcCompositeProfileDef;\nEND_ENTITY;\n\nENTITY IfcMaterialProfileSetUsage\n SUPERTYPE OF (ONEOF\n    (IfcMaterialProfileSetUsageTapering))\n SUBTYPE OF (IfcMaterialUsageDefinition);\n\tForProfileSet : IfcMaterialProfileSet;\n\tCardinalPoint : OPTIONAL IfcCardinalPointReference;\n\tReferenceExtent : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMaterialProfileSetUsageTapering\n SUBTYPE OF (IfcMaterialProfileSetUsage);\n\tForProfileEndSet : IfcMaterialProfileSet;\n\tCardinalEndPoint : OPTIONAL IfcCardinalPointReference;\nEND_ENTITY;\n\nENTITY IfcMaterialProfileWithOffsets\n SUBTYPE OF (IfcMaterialProfile);\n\tOffsetValues : ARRAY [1:2] OF IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMaterialProperties\n SUBTYPE OF (IfcExtendedProperties);\n\tMaterial : IfcMaterialDefinition;\nEND_ENTITY;\n\nENTITY IfcMaterialRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingMaterial : IfcMaterial;\n\tRelatedMaterials : SET [1:?] OF IfcMaterial;\n\tExpression : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcMaterialUsageDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcMaterialLayerSetUsage\n    ,IfcMaterialProfileSetUsage));\n INVERSE\n\tAssociatedTo : SET [1:?] OF IfcRelAssociatesMaterial FOR RelatingMaterial;\nEND_ENTITY;\n\nENTITY IfcMeasureWithUnit;\n\tValueComponent : IfcValue;\n\tUnitComponent : IfcUnit;\nEND_ENTITY;\n\nENTITY IfcMechanicalFastener\n SUBTYPE OF (IfcElementComponent);\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tNominalLength : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : OPTIONAL IfcMechanicalFastenerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n(PredefinedType <> IfcMechanicalFastenerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcMechanicalFastenerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCMECHANICALFASTENERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcMechanicalFastenerType\n SUBTYPE OF (IfcElementComponentType);\n\tPredefinedType : IfcMechanicalFastenerTypeEnum;\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tNominalLength : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcMechanicalFastenerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcMechanicalFastenerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcMedicalDevice\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcMedicalDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcMedicalDeviceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcMedicalDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCMEDICALDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcMedicalDeviceType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcMedicalDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcMedicalDeviceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcMedicalDeviceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcMember\n SUPERTYPE OF (ONEOF\n    (IfcMemberStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcMemberTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcMemberTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcMemberTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCMEMBERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcMemberStandardCase\n SUBTYPE OF (IfcMember);\n WHERE\n\tHasMaterialProfileSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') |\n              ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND\n              ('IFC4.IFCMATERIALPROFILESETUSAGE' IN TYPEOF(temp.RelatingMaterial))\n              )) = 1;\nEND_ENTITY;\n\nENTITY IfcMemberType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcMemberTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcMemberTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcMemberTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcMetric\n SUBTYPE OF (IfcConstraint);\n\tBenchmark : IfcBenchmarkEnum;\n\tValueSource : OPTIONAL IfcLabel;\n\tDataValue : OPTIONAL IfcMetricValueSelect;\n\tReferencePath : OPTIONAL IfcReference;\nEND_ENTITY;\n\nENTITY IfcMirroredProfileDef\n SUBTYPE OF (IfcDerivedProfileDef);\n DERIVE\n\tSELF\\IfcDerivedProfileDef.Operator : IfcCartesianTransformationOperator2D := \nIfcRepresentationItem() || IfcGeometricRepresentationItem() ||\nIfcCartesianTransformationOperator(\n    -- Axis1\n    IfcRepresentationItem() || IfcGeometricRepresentationItem() ||\n    IfcDirection([-1., 0.]),\n    -- Axis2\n    IfcRepresentationItem() || IfcGeometricRepresentationItem() ||\n    IfcDirection([ 0., 1.]),\n    -- LocalOrigin\n    IfcRepresentationItem() || IfcGeometricRepresentationItem() ||\n    IfcPoint() || IfcCartesianPoint([0., 0.]),\n    -- Scale\n    1.) ||\nIfcCartesianTransformationOperator2D();\nEND_ENTITY;\n\nENTITY IfcMonetaryUnit;\n\tCurrency : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcMotorConnection\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcMotorConnectionTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcMotorConnectionTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcMotorConnectionTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCMOTORCONNECTIONTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcMotorConnectionType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcMotorConnectionTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcMotorConnectionTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcMotorConnectionTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcNamedUnit\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcContextDependentUnit\n    ,IfcConversionBasedUnit\n    ,IfcSIUnit));\n\tDimensions : IfcDimensionalExponents;\n\tUnitType : IfcUnitEnum;\n WHERE\n\tWR1 : IfcCorrectDimensions (SELF.UnitType, SELF.Dimensions);\nEND_ENTITY;\n\nENTITY IfcObject\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcActor\n    ,IfcControl\n    ,IfcGroup\n    ,IfcProcess\n    ,IfcProduct\n    ,IfcResource))\n SUBTYPE OF (IfcObjectDefinition);\n\tObjectType : OPTIONAL IfcLabel;\n INVERSE\n\tIsDeclaredBy : SET [0:1] OF IfcRelDefinesByObject FOR RelatedObjects;\n\tDeclares : SET [0:?] OF IfcRelDefinesByObject FOR RelatingObject;\n\tIsTypedBy : SET [0:1] OF IfcRelDefinesByType FOR RelatedObjects;\n\tIsDefinedBy : SET [0:?] OF IfcRelDefinesByProperties FOR RelatedObjects;\n WHERE\n\tUniquePropertySetNames : ((SIZEOF(IsDefinedBy) = 0) OR IfcUniqueDefinitionNames(IsDefinedBy));\nEND_ENTITY;\n\nENTITY IfcObjectDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcContext\n    ,IfcObject\n    ,IfcTypeObject))\n SUBTYPE OF (IfcRoot);\n INVERSE\n\tHasAssignments : SET [0:?] OF IfcRelAssigns FOR RelatedObjects;\n\tNests : SET [0:1] OF IfcRelNests FOR RelatedObjects;\n\tIsNestedBy : SET [0:?] OF IfcRelNests FOR RelatingObject;\n\tHasContext : SET [0:1] OF IfcRelDeclares FOR RelatedDefinitions;\n\tIsDecomposedBy : SET [0:?] OF IfcRelAggregates FOR RelatingObject;\n\tDecomposes : SET [0:1] OF IfcRelAggregates FOR RelatedObjects;\n\tHasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects;\nEND_ENTITY;\n\nENTITY IfcObjectPlacement\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcGridPlacement\n    ,IfcLocalPlacement));\n INVERSE\n\tPlacesObject : SET [0:?] OF IfcProduct FOR ObjectPlacement;\n\tReferencedByPlacements : SET [0:?] OF IfcLocalPlacement FOR PlacementRelTo;\nEND_ENTITY;\n\nENTITY IfcObjective\n SUBTYPE OF (IfcConstraint);\n\tBenchmarkValues : OPTIONAL LIST [1:?] OF IfcConstraint;\n\tLogicalAggregator : OPTIONAL IfcLogicalOperatorEnum;\n\tObjectiveQualifier : IfcObjectiveEnum;\n\tUserDefinedQualifier : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : (ObjectiveQualifier <> IfcObjectiveEnum.USERDEFINED) OR\n((ObjectiveQualifier = IfcObjectiveEnum.USERDEFINED) AND EXISTS(SELF\\IfcObjective.UserDefinedQualifier));\nEND_ENTITY;\n\nENTITY IfcOccupant\n SUBTYPE OF (IfcActor);\n\tPredefinedType : OPTIONAL IfcOccupantTypeEnum;\n WHERE\n\tWR31 : NOT(PredefinedType = IfcOccupantTypeEnum.USERDEFINED) \nOR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcOffsetCurve2D\n SUBTYPE OF (IfcCurve);\n\tBasisCurve : IfcCurve;\n\tDistance : IfcLengthMeasure;\n\tSelfIntersect : IfcLogical;\n WHERE\n\tDimIs2D : BasisCurve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcOffsetCurve3D\n SUBTYPE OF (IfcCurve);\n\tBasisCurve : IfcCurve;\n\tDistance : IfcLengthMeasure;\n\tSelfIntersect : IfcLogical;\n\tRefDirection : IfcDirection;\n WHERE\n\tDimIs2D : BasisCurve.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcOpenShell\n SUBTYPE OF (IfcConnectedFaceSet);\nEND_ENTITY;\n\nENTITY IfcOpeningElement\n SUPERTYPE OF (ONEOF\n    (IfcOpeningStandardCase))\n SUBTYPE OF (IfcFeatureElementSubtraction);\n\tPredefinedType : OPTIONAL IfcOpeningElementTypeEnum;\n INVERSE\n\tHasFillings : SET [0:?] OF IfcRelFillsElement FOR RelatingOpeningElement;\nEND_ENTITY;\n\nENTITY IfcOpeningStandardCase\n SUBTYPE OF (IfcOpeningElement);\nEND_ENTITY;\n\nENTITY IfcOrganization;\n\tIdentification : OPTIONAL IfcIdentifier;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\n\tAddresses : OPTIONAL LIST [1:?] OF IfcAddress;\n INVERSE\n\tIsRelatedBy : SET [0:?] OF IfcOrganizationRelationship FOR RelatedOrganizations;\n\tRelates : SET [0:?] OF IfcOrganizationRelationship FOR RelatingOrganization;\n\tEngages : SET [0:?] OF IfcPersonAndOrganization FOR TheOrganization;\nEND_ENTITY;\n\nENTITY IfcOrganizationRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingOrganization : IfcOrganization;\n\tRelatedOrganizations : SET [1:?] OF IfcOrganization;\nEND_ENTITY;\n\nENTITY IfcOrientedEdge\n SUBTYPE OF (IfcEdge);\n\tEdgeElement : IfcEdge;\n\tOrientation : IfcBoolean;\n DERIVE\n\tSELF\\IfcEdge.EdgeStart : IfcVertex := IfcBooleanChoose \n(Orientation, EdgeElement.EdgeStart, EdgeElement.EdgeEnd);\n\tSELF\\IfcEdge.EdgeEnd : IfcVertex := IfcBooleanChoose \n(Orientation, EdgeElement.EdgeEnd, EdgeElement.EdgeStart);\n WHERE\n\tEdgeElementNotOriented : NOT('IFC4.IFCORIENTEDEDGE' IN TYPEOF(EdgeElement));\nEND_ENTITY;\n\nENTITY IfcOuterBoundaryCurve\n SUBTYPE OF (IfcBoundaryCurve);\nEND_ENTITY;\n\nENTITY IfcOutlet\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcOutletTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcOutletTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcOutletTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCOUTLETTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcOutletType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcOutletTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcOutletTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcOutletTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcOwnerHistory;\n\tOwningUser : IfcPersonAndOrganization;\n\tOwningApplication : IfcApplication;\n\tState : OPTIONAL IfcStateEnum;\n\tChangeAction : OPTIONAL IfcChangeActionEnum;\n\tLastModifiedDate : OPTIONAL IfcTimeStamp;\n\tLastModifyingUser : OPTIONAL IfcPersonAndOrganization;\n\tLastModifyingApplication : OPTIONAL IfcApplication;\n\tCreationDate : IfcTimeStamp;\n WHERE\n\tCorrectChangeAction : (EXISTS(LastModifiedDate)) OR\n(NOT(EXISTS(LastModifiedDate)) AND NOT(EXISTS(ChangeAction))) OR\n(NOT(EXISTS(LastModifiedDate)) AND EXISTS(ChangeAction) AND ((ChangeAction = IfcChangeActionEnum.NOTDEFINED) OR (ChangeAction = IfcChangeActionEnum.NOCHANGE)));\nEND_ENTITY;\n\nENTITY IfcParameterizedProfileDef\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcAsymmetricIShapeProfileDef\n    ,IfcCShapeProfileDef\n    ,IfcCircleProfileDef\n    ,IfcEllipseProfileDef\n    ,IfcIShapeProfileDef\n    ,IfcLShapeProfileDef\n    ,IfcRectangleProfileDef\n    ,IfcTShapeProfileDef\n    ,IfcTrapeziumProfileDef\n    ,IfcUShapeProfileDef\n    ,IfcZShapeProfileDef))\n SUBTYPE OF (IfcProfileDef);\n\tPosition : OPTIONAL IfcAxis2Placement2D;\nEND_ENTITY;\n\nENTITY IfcPath\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tEdgeList : LIST [1:?] OF UNIQUE IfcOrientedEdge;\n WHERE\n\tIsContinuous : IfcPathHeadToTail(SELF);\nEND_ENTITY;\n\nENTITY IfcPcurve\n SUBTYPE OF (IfcCurve);\n\tBasisSurface : IfcSurface;\n\tReferenceCurve : IfcCurve;\n WHERE\n\tDimIs2D : ReferenceCurve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcPerformanceHistory\n SUBTYPE OF (IfcControl);\n\tLifeCyclePhase : IfcLabel;\n\tPredefinedType : OPTIONAL IfcPerformanceHistoryTypeEnum;\nEND_ENTITY;\n\nENTITY IfcPermeableCoveringProperties\n SUBTYPE OF (IfcPreDefinedPropertySet);\n\tOperationType : IfcPermeableCoveringOperationEnum;\n\tPanelPosition : IfcWindowPanelPositionEnum;\n\tFrameDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tFrameThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\nEND_ENTITY;\n\nENTITY IfcPermit\n SUBTYPE OF (IfcControl);\n\tPredefinedType : OPTIONAL IfcPermitTypeEnum;\n\tStatus : OPTIONAL IfcLabel;\n\tLongDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcPerson;\n\tIdentification : OPTIONAL IfcIdentifier;\n\tFamilyName : OPTIONAL IfcLabel;\n\tGivenName : OPTIONAL IfcLabel;\n\tMiddleNames : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPrefixTitles : OPTIONAL LIST [1:?] OF IfcLabel;\n\tSuffixTitles : OPTIONAL LIST [1:?] OF IfcLabel;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\n\tAddresses : OPTIONAL LIST [1:?] OF IfcAddress;\n INVERSE\n\tEngagedIn : SET [0:?] OF IfcPersonAndOrganization FOR ThePerson;\n WHERE\n\tIdentifiablePerson : EXISTS(Identification) OR EXISTS(FamilyName) OR EXISTS(GivenName);\n\tValidSetOfNames : NOT EXISTS(MiddleNames) OR EXISTS(FamilyName) OR EXISTS(GivenName);\nEND_ENTITY;\n\nENTITY IfcPersonAndOrganization;\n\tThePerson : IfcPerson;\n\tTheOrganization : IfcOrganization;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\nEND_ENTITY;\n\nENTITY IfcPhysicalComplexQuantity\n SUBTYPE OF (IfcPhysicalQuantity);\n\tHasQuantities : SET [1:?] OF IfcPhysicalQuantity;\n\tDiscrimination : IfcLabel;\n\tQuality : OPTIONAL IfcLabel;\n\tUsage : OPTIONAL IfcLabel;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(temp <* HasQuantities | SELF :=: temp)) = 0;\n\tUniqueQuantityNames : IfcUniqueQuantityNames(HasQuantities);\nEND_ENTITY;\n\nENTITY IfcPhysicalQuantity\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcPhysicalComplexQuantity\n    ,IfcPhysicalSimpleQuantity));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tHasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\n\tPartOfComplex : SET [0:1] OF IfcPhysicalComplexQuantity FOR HasQuantities;\nEND_ENTITY;\n\nENTITY IfcPhysicalSimpleQuantity\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcQuantityArea\n    ,IfcQuantityCount\n    ,IfcQuantityLength\n    ,IfcQuantityTime\n    ,IfcQuantityVolume\n    ,IfcQuantityWeight))\n SUBTYPE OF (IfcPhysicalQuantity);\n\tUnit : OPTIONAL IfcNamedUnit;\nEND_ENTITY;\n\nENTITY IfcPile\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcPileTypeEnum;\n\tConstructionType : OPTIONAL IfcPileConstructionEnum;\n WHERE\n\tCorrectPredefinedType : NOT EXISTS(PredefinedType) OR\n(PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCPILETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcPileType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcPileTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcPipeFitting\n SUBTYPE OF (IfcFlowFitting);\n\tPredefinedType : OPTIONAL IfcPipeFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcPipeFittingTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcPipeFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCPIPEFITTINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcPipeFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcPipeFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcPipeFittingTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcPipeFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcPipeSegment\n SUBTYPE OF (IfcFlowSegment);\n\tPredefinedType : OPTIONAL IfcPipeSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcPipeSegmentTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcPipeSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCPIPESEGMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcPipeSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcPipeSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcPipeSegmentTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcPipeSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcPixelTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tWidth : IfcInteger;\n\tHeight : IfcInteger;\n\tColourComponents : IfcInteger;\n\tPixel : LIST [1:?] OF IfcBinary;\n WHERE\n\tMinPixelInS : Width >= 1;\n\tMinPixelInT : Height >= 1;\n\tNumberOfColours : {1 <= ColourComponents <= 4};\n\tSizeOfPixelList : SIZEOF(Pixel) = (Width * Height);\n\tPixelAsByteAndSameLength : SIZEOF(QUERY(temp<* Pixel |\n (BLENGTH(temp) MOD 8 = 0) AND\n (BLENGTH(temp) = BLENGTH(Pixel[1]))\n)) = SIZEOF(Pixel);\nEND_ENTITY;\n\nENTITY IfcPlacement\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcAxis1Placement\n    ,IfcAxis2Placement2D\n    ,IfcAxis2Placement3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tLocation : IfcCartesianPoint;\n DERIVE\n\tDim : IfcDimensionCount := Location.Dim;\nEND_ENTITY;\n\nENTITY IfcPlanarBox\n SUBTYPE OF (IfcPlanarExtent);\n\tPlacement : IfcAxis2Placement;\nEND_ENTITY;\n\nENTITY IfcPlanarExtent\n SUPERTYPE OF (ONEOF\n    (IfcPlanarBox))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSizeInX : IfcLengthMeasure;\n\tSizeInY : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcPlane\n SUBTYPE OF (IfcElementarySurface);\nEND_ENTITY;\n\nENTITY IfcPlate\n SUPERTYPE OF (ONEOF\n    (IfcPlateStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcPlateTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcPlateTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcPlateTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCPLATETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcPlateStandardCase\n SUBTYPE OF (IfcPlate);\n WHERE\n\tHasMaterialLayerSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') |\n              ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND\n              ('IFC4.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial))\n              )) = 1;\nEND_ENTITY;\n\nENTITY IfcPlateType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcPlateTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcPlateTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcPlateTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcPoint\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCartesianPoint\n    ,IfcPointOnCurve\n    ,IfcPointOnSurface))\n SUBTYPE OF (IfcGeometricRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcPointOnCurve\n SUBTYPE OF (IfcPoint);\n\tBasisCurve : IfcCurve;\n\tPointParameter : IfcParameterValue;\n DERIVE\n\tDim : IfcDimensionCount := BasisCurve.Dim;\nEND_ENTITY;\n\nENTITY IfcPointOnSurface\n SUBTYPE OF (IfcPoint);\n\tBasisSurface : IfcSurface;\n\tPointParameterU : IfcParameterValue;\n\tPointParameterV : IfcParameterValue;\n DERIVE\n\tDim : IfcDimensionCount := BasisSurface.Dim;\nEND_ENTITY;\n\nENTITY IfcPolyLoop\n SUBTYPE OF (IfcLoop);\n\tPolygon : LIST [3:?] OF UNIQUE IfcCartesianPoint;\n WHERE\n\tAllPointsSameDim : SIZEOF(QUERY(Temp <* Polygon | Temp.Dim <> Polygon[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcPolygonalBoundedHalfSpace\n SUBTYPE OF (IfcHalfSpaceSolid);\n\tPosition : IfcAxis2Placement3D;\n\tPolygonalBoundary : IfcBoundedCurve;\n WHERE\n\tBoundaryDim : PolygonalBoundary.Dim = 2;\n\tBoundaryType : SIZEOF(TYPEOF(PolygonalBoundary) * [\n  'IFC4.IFCPOLYLINE', \n  'IFC4.IFCCOMPOSITECURVE']\n) = 1;\nEND_ENTITY;\n\nENTITY IfcPolygonalFaceSet\n SUBTYPE OF (IfcTessellatedFaceSet);\n\tClosed : OPTIONAL IfcBoolean;\n\tFaces : LIST [1:?] OF IfcIndexedPolygonalFace;\n\tPnIndex : OPTIONAL LIST [1:?] OF IfcPositiveInteger;\nEND_ENTITY;\n\nENTITY IfcPolyline\n SUBTYPE OF (IfcBoundedCurve);\n\tPoints : LIST [2:?] OF IfcCartesianPoint;\n WHERE\n\tSameDim : SIZEOF(QUERY(Temp <* Points | Temp.Dim <> Points[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcPort\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcDistributionPort))\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tContainedIn : SET [0:1] OF IfcRelConnectsPortToElement FOR RelatingPort;\n\tConnectedFrom : SET [0:1] OF IfcRelConnectsPorts FOR RelatedPort;\n\tConnectedTo : SET [0:1] OF IfcRelConnectsPorts FOR RelatingPort;\nEND_ENTITY;\n\nENTITY IfcPostalAddress\n SUBTYPE OF (IfcAddress);\n\tInternalLocation : OPTIONAL IfcLabel;\n\tAddressLines : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPostalBox : OPTIONAL IfcLabel;\n\tTown : OPTIONAL IfcLabel;\n\tRegion : OPTIONAL IfcLabel;\n\tPostalCode : OPTIONAL IfcLabel;\n\tCountry : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS (InternalLocation) OR \nEXISTS (AddressLines) OR\nEXISTS (PostalBox) OR\nEXISTS (PostalCode) OR\nEXISTS (Town) OR \nEXISTS (Region) OR  \nEXISTS (Country);\nEND_ENTITY;\n\nENTITY IfcPreDefinedColour\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcDraughtingPreDefinedColour))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPreDefinedCurveFont\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcDraughtingPreDefinedCurveFont))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPreDefinedItem\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcPreDefinedColour\n    ,IfcPreDefinedCurveFont\n    ,IfcPreDefinedTextFont))\n SUBTYPE OF (IfcPresentationItem);\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcPreDefinedProperties\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcReinforcementBarProperties\n    ,IfcSectionProperties\n    ,IfcSectionReinforcementProperties))\n SUBTYPE OF (IfcPropertyAbstraction);\nEND_ENTITY;\n\nENTITY IfcPreDefinedPropertySet\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcDoorLiningProperties\n    ,IfcDoorPanelProperties\n    ,IfcPermeableCoveringProperties\n    ,IfcReinforcementDefinitionProperties\n    ,IfcWindowLiningProperties\n    ,IfcWindowPanelProperties))\n SUBTYPE OF (IfcPropertySetDefinition);\nEND_ENTITY;\n\nENTITY IfcPreDefinedTextFont\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcTextStyleFontModel))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcColourRgbList\n    ,IfcColourSpecification\n    ,IfcCurveStyleFont\n    ,IfcCurveStyleFontAndScaling\n    ,IfcCurveStyleFontPattern\n    ,IfcIndexedColourMap\n    ,IfcPreDefinedItem\n    ,IfcSurfaceStyleLighting\n    ,IfcSurfaceStyleRefraction\n    ,IfcSurfaceStyleShading\n    ,IfcSurfaceStyleWithTextures\n    ,IfcSurfaceTexture\n    ,IfcTextStyleForDefinedFont\n    ,IfcTextStyleTextModel\n    ,IfcTextureCoordinate\n    ,IfcTextureVertex\n    ,IfcTextureVertexList));\nEND_ENTITY;\n\nENTITY IfcPresentationLayerAssignment\n SUPERTYPE OF (ONEOF\n    (IfcPresentationLayerWithStyle));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tAssignedItems : SET [1:?] OF IfcLayeredItem;\n\tIdentifier : OPTIONAL IfcIdentifier;\n WHERE\n\tApplicableItems : SIZEOF(QUERY(temp <* AssignedItems | (\n  SIZEOF(TYPEOF(temp) * [\n    'IFC4.IFCSHAPEREPRESENTATION',\n    'IFC4.IFCGEOMETRICREPRESENTATIONITEM',\n    'IFC4.IFCMAPPEDITEM']) = 1)\n)) = SIZEOF(AssignedItems);\nEND_ENTITY;\n\nENTITY IfcPresentationLayerWithStyle\n SUBTYPE OF (IfcPresentationLayerAssignment);\n\tLayerOn : IfcLogical;\n\tLayerFrozen : IfcLogical;\n\tLayerBlocked : IfcLogical;\n\tLayerStyles : SET [0:?] OF IfcPresentationStyle;\n WHERE\n\tApplicableOnlyToItems : SIZEOF(QUERY(temp <* AssignedItems | (\n  SIZEOF(TYPEOF(temp) * [\n    'IFC4.IFCGEOMETRICREPRESENTATIONITEM',\n    'IFC4.IFCMAPPEDITEM']) = 1)\n)) = SIZEOF(AssignedItems);\nEND_ENTITY;\n\nENTITY IfcPresentationStyle\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCurveStyle\n    ,IfcFillAreaStyle\n    ,IfcSurfaceStyle\n    ,IfcTextStyle));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcPresentationStyleAssignment;\n\tStyles : SET [1:?] OF IfcPresentationStyleSelect;\nEND_ENTITY;\n\nENTITY IfcProcedure\n SUBTYPE OF (IfcProcess);\n\tPredefinedType : OPTIONAL IfcProcedureTypeEnum;\n WHERE\n\tHasName : EXISTS(SELF\\IfcRoot.Name);\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcProcedureTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcProcedureTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcProcedureType\n SUBTYPE OF (IfcTypeProcess);\n\tPredefinedType : IfcProcedureTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcProcedureTypeEnum.USERDEFINED) OR ((PredefinedType = IfcProcedureTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeProcess.ProcessType));\nEND_ENTITY;\n\nENTITY IfcProcess\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcEvent\n    ,IfcProcedure\n    ,IfcTask))\n SUBTYPE OF (IfcObject);\n\tIdentification : OPTIONAL IfcIdentifier;\n\tLongDescription : OPTIONAL IfcText;\n INVERSE\n\tIsPredecessorTo : SET [0:?] OF IfcRelSequence FOR RelatingProcess;\n\tIsSuccessorFrom : SET [0:?] OF IfcRelSequence FOR RelatedProcess;\n\tOperatesOn : SET [0:?] OF IfcRelAssignsToProcess FOR RelatingProcess;\nEND_ENTITY;\n\nENTITY IfcProduct\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcAnnotation\n    ,IfcElement\n    ,IfcGrid\n    ,IfcPort\n    ,IfcProxy\n    ,IfcSpatialElement\n    ,IfcStructuralActivity\n    ,IfcStructuralItem))\n SUBTYPE OF (IfcObject);\n\tObjectPlacement : OPTIONAL IfcObjectPlacement;\n\tRepresentation : OPTIONAL IfcProductRepresentation;\n INVERSE\n\tReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct;\n WHERE\n\tPlacementForShapeRepresentation : (EXISTS(Representation) AND EXISTS(ObjectPlacement))\n            OR (EXISTS(Representation) AND \n\t\t\t   (SIZEOF(QUERY(temp <* Representation.Representations | 'IFC4.IFCSHAPEREPRESENTATION' IN TYPEOF(temp))) = 0))\n            OR (NOT(EXISTS(Representation)));\nEND_ENTITY;\n\nENTITY IfcProductDefinitionShape\n SUBTYPE OF (IfcProductRepresentation);\n INVERSE\n\tShapeOfProduct : SET [1:?] OF IfcProduct FOR Representation;\n\tHasShapeAspects : SET [0:?] OF IfcShapeAspect FOR PartOfProductDefinitionShape;\n WHERE\n\tOnlyShapeModel : SIZEOF(QUERY(temp <* Representations | \n  (NOT('IFC4.IFCSHAPEMODEL' IN TYPEOF(temp)))\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcProductRepresentation\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcMaterialDefinitionRepresentation\n    ,IfcProductDefinitionShape));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRepresentations : LIST [1:?] OF IfcRepresentation;\nEND_ENTITY;\n\nENTITY IfcProfileDef\n SUPERTYPE OF (ONEOF\n    (IfcArbitraryClosedProfileDef\n    ,IfcArbitraryOpenProfileDef\n    ,IfcCompositeProfileDef\n    ,IfcDerivedProfileDef\n    ,IfcParameterizedProfileDef));\n\tProfileType : IfcProfileTypeEnum;\n\tProfileName : OPTIONAL IfcLabel;\n INVERSE\n\tHasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\n\tHasProperties : SET [0:?] OF IfcProfileProperties FOR ProfileDefinition;\nEND_ENTITY;\n\nENTITY IfcProfileProperties\n SUBTYPE OF (IfcExtendedProperties);\n\tProfileDefinition : IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcProject\n SUBTYPE OF (IfcContext);\n WHERE\n\tHasName : EXISTS(SELF\\IfcRoot.Name);\n\tCorrectContext : NOT(EXISTS(SELF\\IfcContext.RepresentationContexts)) OR\n(SIZEOF(QUERY(Temp <* SELF\\IfcContext.RepresentationContexts |\n 'IFC4.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(Temp)\n  )) = 0);\n\tNoDecomposition : SIZEOF(SELF\\IfcObjectDefinition.Decomposes) = 0;\nEND_ENTITY;\n\nENTITY IfcProjectLibrary\n SUBTYPE OF (IfcContext);\nEND_ENTITY;\n\nENTITY IfcProjectOrder\n SUBTYPE OF (IfcControl);\n\tPredefinedType : OPTIONAL IfcProjectOrderTypeEnum;\n\tStatus : OPTIONAL IfcLabel;\n\tLongDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcProjectedCRS\n SUBTYPE OF (IfcCoordinateReferenceSystem);\n\tMapProjection : OPTIONAL IfcIdentifier;\n\tMapZone : OPTIONAL IfcIdentifier;\n\tMapUnit : OPTIONAL IfcNamedUnit;\n WHERE\n\tIsLengthUnit : NOT(EXISTS(MapUnit)) OR (MapUnit.UnitType = IfcUnitEnum.LENGTHUNIT);\nEND_ENTITY;\n\nENTITY IfcProjectionElement\n SUBTYPE OF (IfcFeatureElementAddition);\n\tPredefinedType : OPTIONAL IfcProjectionElementTypeEnum;\nEND_ENTITY;\n\nENTITY IfcProperty\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcComplexProperty\n    ,IfcSimpleProperty))\n SUBTYPE OF (IfcPropertyAbstraction);\n\tName : IfcIdentifier;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tPartOfPset : SET [0:?] OF IfcPropertySet FOR HasProperties;\n\tPropertyForDependance : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependingProperty;\n\tPropertyDependsOn : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependantProperty;\n\tPartOfComplex : SET [0:?] OF IfcComplexProperty FOR HasProperties;\n\tHasConstraints : SET [0:?] OF IfcResourceConstraintRelationship FOR RelatedResourceObjects;\n\tHasApprovals : SET [0:?] OF IfcResourceApprovalRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcPropertyAbstraction\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcExtendedProperties\n    ,IfcPreDefinedProperties\n    ,IfcProperty\n    ,IfcPropertyEnumeration));\n INVERSE\n\tHasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcPropertyBoundedValue\n SUBTYPE OF (IfcSimpleProperty);\n\tUpperBoundValue : OPTIONAL IfcValue;\n\tLowerBoundValue : OPTIONAL IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n\tSetPointValue : OPTIONAL IfcValue;\n WHERE\n\tSameUnitUpperLower : NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(LowerBoundValue)) OR\n(TYPEOF(UpperBoundValue) = TYPEOF(LowerBoundValue));\n\tSameUnitUpperSet : NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(SetPointValue)) OR\n(TYPEOF(UpperBoundValue) = TYPEOF(SetPointValue));\n\tSameUnitLowerSet : NOT(EXISTS(LowerBoundValue)) OR NOT(EXISTS(SetPointValue)) OR\n(TYPEOF(LowerBoundValue) = TYPEOF(SetPointValue));\nEND_ENTITY;\n\nENTITY IfcPropertyDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcPropertySetDefinition\n    ,IfcPropertyTemplateDefinition))\n SUBTYPE OF (IfcRoot);\n INVERSE\n\tHasContext : SET [0:1] OF IfcRelDeclares FOR RelatedDefinitions;\n\tHasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects;\nEND_ENTITY;\n\nENTITY IfcPropertyDependencyRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tDependingProperty : IfcProperty;\n\tDependantProperty : IfcProperty;\n\tExpression : OPTIONAL IfcText;\n WHERE\n\tNoSelfReference : DependingProperty :<>: DependantProperty;\nEND_ENTITY;\n\nENTITY IfcPropertyEnumeratedValue\n SUBTYPE OF (IfcSimpleProperty);\n\tEnumerationValues : OPTIONAL LIST [1:?] OF IfcValue;\n\tEnumerationReference : OPTIONAL IfcPropertyEnumeration;\n WHERE\n\tWR21 : NOT(EXISTS(EnumerationReference)) \nOR  NOT(EXISTS(EnumerationValues)) \nOR  (SIZEOF(QUERY(temp <* EnumerationValues |\n    temp IN EnumerationReference.EnumerationValues))\n    = SIZEOF(EnumerationValues));\nEND_ENTITY;\n\nENTITY IfcPropertyEnumeration\n SUBTYPE OF (IfcPropertyAbstraction);\n\tName : IfcLabel;\n\tEnumerationValues : LIST [1:?] OF UNIQUE IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n UNIQUE\n\tUR1 : Name;\n WHERE\n\tWR01 : SIZEOF(QUERY(temp <* SELF.EnumerationValues | \n  NOT(TYPEOF(SELF.EnumerationValues[1]) = TYPEOF(temp))\n  )) = 0;\nEND_ENTITY;\n\nENTITY IfcPropertyListValue\n SUBTYPE OF (IfcSimpleProperty);\n\tListValues : OPTIONAL LIST [1:?] OF IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n WHERE\n\tWR31 : SIZEOF(QUERY(temp <* SELF.ListValues | \n  NOT(TYPEOF(SELF.ListValues[1]) = TYPEOF(temp))\n  )) = 0;\nEND_ENTITY;\n\nENTITY IfcPropertyReferenceValue\n SUBTYPE OF (IfcSimpleProperty);\n\tUsageName : OPTIONAL IfcText;\n\tPropertyReference : OPTIONAL IfcObjectReferenceSelect;\nEND_ENTITY;\n\nENTITY IfcPropertySet\n SUBTYPE OF (IfcPropertySetDefinition);\n\tHasProperties : SET [1:?] OF IfcProperty;\n WHERE\n\tExistsName : EXISTS(SELF\\IfcRoot.Name);\n\tUniquePropertyNames : IfcUniquePropertyName(HasProperties);\nEND_ENTITY;\n\nENTITY IfcPropertySetDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcPreDefinedPropertySet\n    ,IfcPropertySet\n    ,IfcQuantitySet))\n SUBTYPE OF (IfcPropertyDefinition);\n INVERSE\n\tDefinesType : SET [0:?] OF IfcTypeObject FOR HasPropertySets;\n\tIsDefinedBy : SET [0:?] OF IfcRelDefinesByTemplate FOR RelatedPropertySets;\n\tDefinesOccurrence : SET [0:?] OF IfcRelDefinesByProperties FOR RelatingPropertyDefinition;\nEND_ENTITY;\n\nENTITY IfcPropertySetTemplate\n SUBTYPE OF (IfcPropertyTemplateDefinition);\n\tTemplateType : OPTIONAL IfcPropertySetTemplateTypeEnum;\n\tApplicableEntity : OPTIONAL IfcIdentifier;\n\tHasPropertyTemplates : SET [1:?] OF IfcPropertyTemplate;\n INVERSE\n\tDefines : SET [0:?] OF IfcRelDefinesByTemplate FOR RelatingTemplate;\n WHERE\n\tExistsName : EXISTS(SELF\\IfcRoot.Name);\n\tUniquePropertyNames : IfcUniquePropertyTemplateNames(HasPropertyTemplates);\nEND_ENTITY;\n\nENTITY IfcPropertySingleValue\n SUBTYPE OF (IfcSimpleProperty);\n\tNominalValue : OPTIONAL IfcValue;\n\tUnit : OPTIONAL IfcUnit;\nEND_ENTITY;\n\nENTITY IfcPropertyTableValue\n SUBTYPE OF (IfcSimpleProperty);\n\tDefiningValues : OPTIONAL LIST [1:?] OF UNIQUE IfcValue;\n\tDefinedValues : OPTIONAL LIST [1:?] OF IfcValue;\n\tExpression : OPTIONAL IfcText;\n\tDefiningUnit : OPTIONAL IfcUnit;\n\tDefinedUnit : OPTIONAL IfcUnit;\n\tCurveInterpolation : OPTIONAL IfcCurveInterpolationEnum;\n WHERE\n\tWR21 : (NOT(EXISTS(DefiningValues)) AND NOT(EXISTS(DefinedValues)))\nOR (SIZEOF(DefiningValues) = SIZEOF(DefinedValues));\n\tWR22 : NOT(EXISTS(DefiningValues)) OR \n(SIZEOF(QUERY(temp <* SELF.DefiningValues | TYPEOF(temp) <> TYPEOF(SELF.DefiningValues[1])\n)) = 0);\n\tWR23 : NOT(EXISTS(DefinedValues)) OR \n(SIZEOF(QUERY(temp <* SELF.DefinedValues | TYPEOF(temp) <> TYPEOF(SELF.DefinedValues[1])\n)) = 0);\nEND_ENTITY;\n\nENTITY IfcPropertyTemplate\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcComplexPropertyTemplate\n    ,IfcSimplePropertyTemplate))\n SUBTYPE OF (IfcPropertyTemplateDefinition);\n INVERSE\n\tPartOfComplexTemplate : SET [0:?] OF IfcComplexPropertyTemplate FOR HasPropertyTemplates;\n\tPartOfPsetTemplate : SET [0:?] OF IfcPropertySetTemplate FOR HasPropertyTemplates;\nEND_ENTITY;\n\nENTITY IfcPropertyTemplateDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcPropertySetTemplate\n    ,IfcPropertyTemplate))\n SUBTYPE OF (IfcPropertyDefinition);\nEND_ENTITY;\n\nENTITY IfcProtectiveDevice\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcProtectiveDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcProtectiveDeviceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcProtectiveDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCPROTECTIVEDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcProtectiveDeviceTrippingUnit\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcProtectiveDeviceTrippingUnitTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCPROTECTIVEDEVICETRIPPINGUNITTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcProtectiveDeviceTrippingUnitType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcProtectiveDeviceTrippingUnitTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcProtectiveDeviceType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcProtectiveDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcProtectiveDeviceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcProtectiveDeviceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcProxy\n SUBTYPE OF (IfcProduct);\n\tProxyType : IfcObjectTypeEnum;\n\tTag : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcPump\n SUBTYPE OF (IfcFlowMovingDevice);\n\tPredefinedType : OPTIONAL IfcPumpTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcPumpTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcPumpTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCPUMPTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcPumpType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcPumpTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcPumpTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcPumpTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcQuantityArea\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tAreaValue : IfcAreaMeasure;\n\tFormula : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n   (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.AREAUNIT);\n\tWR22 : AreaValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityCount\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tCountValue : IfcCountMeasure;\n\tFormula : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : CountValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityLength\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tLengthValue : IfcLengthMeasure;\n\tFormula : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n   (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.LENGTHUNIT);\n\tWR22 : LengthValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantitySet\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcElementQuantity))\n SUBTYPE OF (IfcPropertySetDefinition);\nEND_ENTITY;\n\nENTITY IfcQuantityTime\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tTimeValue : IfcTimeMeasure;\n\tFormula : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n   (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.TIMEUNIT);\n\tWR22 : TimeValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityVolume\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tVolumeValue : IfcVolumeMeasure;\n\tFormula : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n   (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.VOLUMEUNIT);\n\tWR22 : VolumeValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityWeight\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tWeightValue : IfcMassMeasure;\n\tFormula : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n   (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.MASSUNIT);\n\tWR22 : WeightValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcRailing\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcRailingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcRailingTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRailingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCRAILINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcRailingType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcRailingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcRailingTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcRailingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcRamp\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcRampTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcRampTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRampTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCRAMPTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcRampFlight\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcRampFlightTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcRampFlightTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRampFlightTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCRAMPFLIGHTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcRampFlightType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcRampFlightTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcRampFlightTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcRampFlightTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcRampType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcRampTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcRampTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcRampTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcRationalBSplineCurveWithKnots\n SUBTYPE OF (IfcBSplineCurveWithKnots);\n\tWeightsData : LIST [2:?] OF IfcReal;\n DERIVE\n\tWeights : ARRAY [0:UpperIndexOnControlPoints] OF IfcReal := IfcListToArray(WeightsData,0,SELF\\IfcBSplineCurve.UpperIndexOnControlPoints);\n WHERE\n\tSameNumOfWeightsAndPoints : SIZEOF(WeightsData) = SIZEOF(SELF\\IfcBSplineCurve.ControlPointsList);\n\tWeightsGreaterZero : IfcCurveWeightsPositive(SELF);\nEND_ENTITY;\n\nENTITY IfcRationalBSplineSurfaceWithKnots\n SUBTYPE OF (IfcBSplineSurfaceWithKnots);\n\tWeightsData : LIST [2:?] OF LIST [2:?] OF IfcReal;\n DERIVE\n\tWeights : ARRAY [0:UUpper] OF ARRAY [0:VUpper] OF IfcReal := IfcMakeArrayOfArray(WeightsData,0,UUpper,0,VUpper);\n WHERE\n\tCorrespondingWeightsDataLists : (SIZEOF(WeightsData) = SIZEOF(SELF\\IfcBSplineSurface.ControlPointsList))\nAND \n(SIZEOF(WeightsData[1]) = SIZEOF(SELF\\IfcBSplineSurface.ControlPointsList[1]));\n\tWeightValuesGreaterZero : IfcSurfaceWeightsPositive(SELF);\nEND_ENTITY;\n\nENTITY IfcRectangleHollowProfileDef\n SUBTYPE OF (IfcRectangleProfileDef);\n\tWallThickness : IfcPositiveLengthMeasure;\n\tInnerFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tOuterFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n WHERE\n\tValidWallThickness : (WallThickness < (SELF\\IfcRectangleProfileDef.XDim/2.)) AND \n(WallThickness < (SELF\\IfcRectangleProfileDef.YDim/2.));\n\tValidInnerRadius : NOT(EXISTS(InnerFilletRadius)) OR \n((InnerFilletRadius <= (SELF\\IfcRectangleProfileDef.XDim/2. - WallThickness)) AND \n (InnerFilletRadius <= (SELF\\IfcRectangleProfileDef.YDim/2. - WallThickness)));\n\tValidOuterRadius : NOT(EXISTS(OuterFilletRadius)) OR \n((OuterFilletRadius <= (SELF\\IfcRectangleProfileDef.XDim/2.)) AND \n (OuterFilletRadius <= (SELF\\IfcRectangleProfileDef.YDim/2.)));\nEND_ENTITY;\n\nENTITY IfcRectangleProfileDef\n SUPERTYPE OF (ONEOF\n    (IfcRectangleHollowProfileDef\n    ,IfcRoundedRectangleProfileDef))\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRectangularPyramid\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tXLength : IfcPositiveLengthMeasure;\n\tYLength : IfcPositiveLengthMeasure;\n\tHeight : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRectangularTrimmedSurface\n SUBTYPE OF (IfcBoundedSurface);\n\tBasisSurface : IfcSurface;\n\tU1 : IfcParameterValue;\n\tV1 : IfcParameterValue;\n\tU2 : IfcParameterValue;\n\tV2 : IfcParameterValue;\n\tUsense : IfcBoolean;\n\tVsense : IfcBoolean;\n WHERE\n\tU1AndU2Different : U1 <> U2;\n\tV1AndV2Different : V1 <> V2;\n\tUsenseCompatible : (('IFC4.IFCELEMENTARYSURFACE' IN TYPEOF(BasisSurface)) AND\n         (NOT ('IFC4.IFCPLANE' IN TYPEOF(BasisSurface)))) OR\n         ('IFC4.IFCSURFACEOFREVOLUTION' IN TYPEOF(BasisSurface)) OR\n         (Usense = (U2 > U1));\n\tVsenseCompatible : Vsense = (V2 > V1);\nEND_ENTITY;\n\nENTITY IfcRecurrencePattern;\n\tRecurrenceType : IfcRecurrenceTypeEnum;\n\tDayComponent : OPTIONAL SET [1:?] OF IfcDayInMonthNumber;\n\tWeekdayComponent : OPTIONAL SET [1:?] OF IfcDayInWeekNumber;\n\tMonthComponent : OPTIONAL SET [1:?] OF IfcMonthInYearNumber;\n\tPosition : OPTIONAL IfcInteger;\n\tInterval : OPTIONAL IfcInteger;\n\tOccurrences : OPTIONAL IfcInteger;\n\tTimePeriods : OPTIONAL LIST [1:?] OF IfcTimePeriod;\nEND_ENTITY;\n\nENTITY IfcReference;\n\tTypeIdentifier : OPTIONAL IfcIdentifier;\n\tAttributeIdentifier : OPTIONAL IfcIdentifier;\n\tInstanceName : OPTIONAL IfcLabel;\n\tListPositions : OPTIONAL LIST [1:?] OF IfcInteger;\n\tInnerReference : OPTIONAL IfcReference;\nEND_ENTITY;\n\nENTITY IfcRegularTimeSeries\n SUBTYPE OF (IfcTimeSeries);\n\tTimeStep : IfcTimeMeasure;\n\tValues : LIST [1:?] OF IfcTimeSeriesValue;\nEND_ENTITY;\n\nENTITY IfcReinforcementBarProperties\n SUBTYPE OF (IfcPreDefinedProperties);\n\tTotalCrossSectionArea : IfcAreaMeasure;\n\tSteelGrade : IfcLabel;\n\tBarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;\n\tEffectiveDepth : OPTIONAL IfcLengthMeasure;\n\tNominalBarDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tBarCount : OPTIONAL IfcCountMeasure;\nEND_ENTITY;\n\nENTITY IfcReinforcementDefinitionProperties\n SUBTYPE OF (IfcPreDefinedPropertySet);\n\tDefinitionType : OPTIONAL IfcLabel;\n\tReinforcementSectionDefinitions : LIST [1:?] OF IfcSectionReinforcementProperties;\nEND_ENTITY;\n\nENTITY IfcReinforcingBar\n SUBTYPE OF (IfcReinforcingElement);\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tBarLength : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : OPTIONAL IfcReinforcingBarTypeEnum;\n\tBarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;\n WHERE\n\tCorrectPredefinedType : NOT EXISTS(PredefinedType) OR\n(PredefinedType <> IfcReinforcingBarTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcReinforcingBarTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCREINFORCINGBARTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcReinforcingBarType\n SUBTYPE OF (IfcReinforcingElementType);\n\tPredefinedType : IfcReinforcingBarTypeEnum;\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tBarLength : OPTIONAL IfcPositiveLengthMeasure;\n\tBarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;\n\tBendingShapeCode : OPTIONAL IfcLabel;\n\tBendingParameters : OPTIONAL LIST [1:?] OF IfcBendingParameterSelect;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcReinforcingBarTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcReinforcingBarTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\n\tBendingShapeCodeProvided : NOT EXISTS(BendingParameters) OR EXISTS(BendingShapeCode);\nEND_ENTITY;\n\nENTITY IfcReinforcingElement\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcReinforcingBar\n    ,IfcReinforcingMesh\n    ,IfcTendon\n    ,IfcTendonAnchor))\n SUBTYPE OF (IfcElementComponent);\n\tSteelGrade : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcReinforcingElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcReinforcingBarType\n    ,IfcReinforcingMeshType\n    ,IfcTendonAnchorType\n    ,IfcTendonType))\n SUBTYPE OF (IfcElementComponentType);\nEND_ENTITY;\n\nENTITY IfcReinforcingMesh\n SUBTYPE OF (IfcReinforcingElement);\n\tMeshLength : OPTIONAL IfcPositiveLengthMeasure;\n\tMeshWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tLongitudinalBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tTransverseBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tLongitudinalBarCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tTransverseBarCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tLongitudinalBarSpacing : OPTIONAL IfcPositiveLengthMeasure;\n\tTransverseBarSpacing : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : OPTIONAL IfcReinforcingMeshTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT EXISTS(PredefinedType) OR\n(PredefinedType <> IfcReinforcingMeshTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcReinforcingMeshTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCREINFORCINGMESHTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcReinforcingMeshType\n SUBTYPE OF (IfcReinforcingElementType);\n\tPredefinedType : IfcReinforcingMeshTypeEnum;\n\tMeshLength : OPTIONAL IfcPositiveLengthMeasure;\n\tMeshWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tLongitudinalBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tTransverseBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tLongitudinalBarCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tTransverseBarCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tLongitudinalBarSpacing : OPTIONAL IfcPositiveLengthMeasure;\n\tTransverseBarSpacing : OPTIONAL IfcPositiveLengthMeasure;\n\tBendingShapeCode : OPTIONAL IfcLabel;\n\tBendingParameters : OPTIONAL LIST [1:?] OF IfcBendingParameterSelect;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcReinforcingMeshTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcReinforcingMeshTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\n\tBendingShapeCodeProvided : NOT EXISTS(BendingParameters) OR EXISTS(BendingShapeCode);\nEND_ENTITY;\n\nENTITY IfcRelAggregates\n SUBTYPE OF (IfcRelDecomposes);\n\tRelatingObject : IfcObjectDefinition;\n\tRelatedObjects : SET [1:?] OF IfcObjectDefinition;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* RelatedObjects | RelatingObject :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssigns\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcRelAssignsToActor\n    ,IfcRelAssignsToControl\n    ,IfcRelAssignsToGroup\n    ,IfcRelAssignsToProcess\n    ,IfcRelAssignsToProduct\n    ,IfcRelAssignsToResource))\n SUBTYPE OF (IfcRelationship);\n\tRelatedObjects : SET [1:?] OF IfcObjectDefinition;\n\tRelatedObjectsType : OPTIONAL IfcObjectTypeEnum;\n WHERE\n\tWR1 : IfcCorrectObjectAssignment(RelatedObjectsType, RelatedObjects);\nEND_ENTITY;\n\nENTITY IfcRelAssignsToActor\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingActor : IfcActor;\n\tActingRole : OPTIONAL IfcActorRole;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingActor :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToControl\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingControl : IfcControl;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingControl :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToGroup\n SUPERTYPE OF (ONEOF\n    (IfcRelAssignsToGroupByFactor))\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingGroup : IfcGroup;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingGroup :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToGroupByFactor\n SUBTYPE OF (IfcRelAssignsToGroup);\n\tFactor : IfcRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToProcess\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingProcess : IfcProcessSelect;\n\tQuantityInProcess : OPTIONAL IfcMeasureWithUnit;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingProcess :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToProduct\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingProduct : IfcProductSelect;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingProduct :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToResource\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingResource : IfcResourceSelect;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingResource :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssociates\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcRelAssociatesApproval\n    ,IfcRelAssociatesClassification\n    ,IfcRelAssociatesConstraint\n    ,IfcRelAssociatesDocument\n    ,IfcRelAssociatesLibrary\n    ,IfcRelAssociatesMaterial))\n SUBTYPE OF (IfcRelationship);\n\tRelatedObjects : SET [1:?] OF IfcDefinitionSelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesApproval\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingApproval : IfcApproval;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesClassification\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingClassification : IfcClassificationSelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesConstraint\n SUBTYPE OF (IfcRelAssociates);\n\tIntent : OPTIONAL IfcLabel;\n\tRelatingConstraint : IfcConstraint;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesDocument\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingDocument : IfcDocumentSelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesLibrary\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingLibrary : IfcLibrarySelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesMaterial\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingMaterial : IfcMaterialSelect;\n WHERE\n\tNoVoidElement : SIZEOF(QUERY(temp <* SELF\\IfcRelAssociates.RelatedObjects | \n  ('IFC4.IFCFEATUREELEMENTSUBTRACTION' IN TYPEOF(temp)) OR \n  ('IFC4.IFCVIRTUALELEMENT' IN TYPEOF(temp)) \n)) = 0;\n\tAllowedElements : SIZEOF(QUERY(temp <* SELF\\IfcRelAssociates.RelatedObjects | (\n  SIZEOF(TYPEOF(temp) * [   \n    'IFC4.IFCELEMENT', \n    'IFC4.IFCELEMENTTYPE',\n    'IFC4.IFCWINDOWSTYLE',\n    'IFC4.IFCDOORSTYLE',\n    'IFC4.IFCSTRUCTURALMEMBER',\n    'IFC4.IFCPORT']) = 0) \n)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelConnects\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcRelConnectsElements\n    ,IfcRelConnectsPortToElement\n    ,IfcRelConnectsPorts\n    ,IfcRelConnectsStructuralActivity\n    ,IfcRelConnectsStructuralMember\n    ,IfcRelContainedInSpatialStructure\n    ,IfcRelCoversBldgElements\n    ,IfcRelCoversSpaces\n    ,IfcRelFillsElement\n    ,IfcRelFlowControlElements\n    ,IfcRelInterferesElements\n    ,IfcRelReferencedInSpatialStructure\n    ,IfcRelSequence\n    ,IfcRelServicesBuildings\n    ,IfcRelSpaceBoundary))\n SUBTYPE OF (IfcRelationship);\nEND_ENTITY;\n\nENTITY IfcRelConnectsElements\n SUPERTYPE OF (ONEOF\n    (IfcRelConnectsPathElements\n    ,IfcRelConnectsWithRealizingElements))\n SUBTYPE OF (IfcRelConnects);\n\tConnectionGeometry : OPTIONAL IfcConnectionGeometry;\n\tRelatingElement : IfcElement;\n\tRelatedElement : IfcElement;\n WHERE\n\tNoSelfReference : RelatingElement :<>: RelatedElement;\nEND_ENTITY;\n\nENTITY IfcRelConnectsPathElements\n SUBTYPE OF (IfcRelConnectsElements);\n\tRelatingPriorities : LIST [0:?] OF IfcInteger;\n\tRelatedPriorities : LIST [0:?] OF IfcInteger;\n\tRelatedConnectionType : IfcConnectionTypeEnum;\n\tRelatingConnectionType : IfcConnectionTypeEnum;\n WHERE\n\tNormalizedRelatingPriorities : (SIZEOF(RelatingPriorities) = 0)\nOR\n(SIZEOF (QUERY (temp <* RelatingPriorities\n  | {0 <= temp <= 100}\n  )) = SIZEOF(RelatingPriorities));\n\tNormalizedRelatedPriorities : (SIZEOF(RelatedPriorities) = 0)\nOR\n(SIZEOF (QUERY (temp <* RelatedPriorities\n  | {0 <= temp <= 100}\n  )) = SIZEOF(RelatedPriorities));\nEND_ENTITY;\n\nENTITY IfcRelConnectsPortToElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingPort : IfcPort;\n\tRelatedElement : IfcDistributionElement;\nEND_ENTITY;\n\nENTITY IfcRelConnectsPorts\n SUBTYPE OF (IfcRelConnects);\n\tRelatingPort : IfcPort;\n\tRelatedPort : IfcPort;\n\tRealizingElement : OPTIONAL IfcElement;\n WHERE\n\tNoSelfReference : RelatingPort :<>: RelatedPort;\nEND_ENTITY;\n\nENTITY IfcRelConnectsStructuralActivity\n SUBTYPE OF (IfcRelConnects);\n\tRelatingElement : IfcStructuralActivityAssignmentSelect;\n\tRelatedStructuralActivity : IfcStructuralActivity;\nEND_ENTITY;\n\nENTITY IfcRelConnectsStructuralMember\n SUPERTYPE OF (ONEOF\n    (IfcRelConnectsWithEccentricity))\n SUBTYPE OF (IfcRelConnects);\n\tRelatingStructuralMember : IfcStructuralMember;\n\tRelatedStructuralConnection : IfcStructuralConnection;\n\tAppliedCondition : OPTIONAL IfcBoundaryCondition;\n\tAdditionalConditions : OPTIONAL IfcStructuralConnectionCondition;\n\tSupportedLength : OPTIONAL IfcLengthMeasure;\n\tConditionCoordinateSystem : OPTIONAL IfcAxis2Placement3D;\nEND_ENTITY;\n\nENTITY IfcRelConnectsWithEccentricity\n SUBTYPE OF (IfcRelConnectsStructuralMember);\n\tConnectionConstraint : IfcConnectionGeometry;\nEND_ENTITY;\n\nENTITY IfcRelConnectsWithRealizingElements\n SUBTYPE OF (IfcRelConnectsElements);\n\tRealizingElements : SET [1:?] OF IfcElement;\n\tConnectionType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcRelContainedInSpatialStructure\n SUBTYPE OF (IfcRelConnects);\n\tRelatedElements : SET [1:?] OF IfcProduct;\n\tRelatingStructure : IfcSpatialElement;\n WHERE\n\tWR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC4.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcRelCoversBldgElements\n SUBTYPE OF (IfcRelConnects);\n\tRelatingBuildingElement : IfcElement;\n\tRelatedCoverings : SET [1:?] OF IfcCovering;\nEND_ENTITY;\n\nENTITY IfcRelCoversSpaces\n SUBTYPE OF (IfcRelConnects);\n\tRelatingSpace : IfcSpace;\n\tRelatedCoverings : SET [1:?] OF IfcCovering;\nEND_ENTITY;\n\nENTITY IfcRelDeclares\n SUBTYPE OF (IfcRelationship);\n\tRelatingContext : IfcContext;\n\tRelatedDefinitions : SET [1:?] OF IfcDefinitionSelect;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* RelatedDefinitions | RelatingContext :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelDecomposes\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcRelAggregates\n    ,IfcRelNests\n    ,IfcRelProjectsElement\n    ,IfcRelVoidsElement))\n SUBTYPE OF (IfcRelationship);\nEND_ENTITY;\n\nENTITY IfcRelDefines\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcRelDefinesByObject\n    ,IfcRelDefinesByProperties\n    ,IfcRelDefinesByTemplate\n    ,IfcRelDefinesByType))\n SUBTYPE OF (IfcRelationship);\nEND_ENTITY;\n\nENTITY IfcRelDefinesByObject\n SUBTYPE OF (IfcRelDefines);\n\tRelatedObjects : SET [1:?] OF IfcObject;\n\tRelatingObject : IfcObject;\nEND_ENTITY;\n\nENTITY IfcRelDefinesByProperties\n SUBTYPE OF (IfcRelDefines);\n\tRelatedObjects : SET [1:?] OF IfcObjectDefinition;\n\tRelatingPropertyDefinition : IfcPropertySetDefinitionSelect;\n WHERE\n\tNoRelatedTypeObject : SIZEOF(QUERY(Types <* SELF\\IfcRelDefinesByProperties.RelatedObjects |  'IFC4.IFCTYPEOBJECT' IN TYPEOF(Types))) = 0;\nEND_ENTITY;\n\nENTITY IfcRelDefinesByTemplate\n SUBTYPE OF (IfcRelDefines);\n\tRelatedPropertySets : SET [1:?] OF IfcPropertySetDefinition;\n\tRelatingTemplate : IfcPropertySetTemplate;\nEND_ENTITY;\n\nENTITY IfcRelDefinesByType\n SUBTYPE OF (IfcRelDefines);\n\tRelatedObjects : SET [1:?] OF IfcObject;\n\tRelatingType : IfcTypeObject;\nEND_ENTITY;\n\nENTITY IfcRelFillsElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingOpeningElement : IfcOpeningElement;\n\tRelatedBuildingElement : IfcElement;\nEND_ENTITY;\n\nENTITY IfcRelFlowControlElements\n SUBTYPE OF (IfcRelConnects);\n\tRelatedControlElements : SET [1:?] OF IfcDistributionControlElement;\n\tRelatingFlowElement : IfcDistributionFlowElement;\nEND_ENTITY;\n\nENTITY IfcRelInterferesElements\n SUBTYPE OF (IfcRelConnects);\n\tRelatingElement : IfcElement;\n\tRelatedElement : IfcElement;\n\tInterferenceGeometry : OPTIONAL IfcConnectionGeometry;\n\tInterferenceType : OPTIONAL IfcIdentifier;\n\tImpliedOrder : LOGICAL;\n WHERE\n\tNotSelfReference : RelatingElement :<>: RelatedElement;\nEND_ENTITY;\n\nENTITY IfcRelNests\n SUBTYPE OF (IfcRelDecomposes);\n\tRelatingObject : IfcObjectDefinition;\n\tRelatedObjects : LIST [1:?] OF IfcObjectDefinition;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* RelatedObjects | RelatingObject :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelProjectsElement\n SUBTYPE OF (IfcRelDecomposes);\n\tRelatingElement : IfcElement;\n\tRelatedFeatureElement : IfcFeatureElementAddition;\nEND_ENTITY;\n\nENTITY IfcRelReferencedInSpatialStructure\n SUBTYPE OF (IfcRelConnects);\n\tRelatedElements : SET [1:?] OF IfcProduct;\n\tRelatingStructure : IfcSpatialElement;\n WHERE\n\tAllowedRelatedElements : SIZEOF(QUERY(temp <* RelatedElements | ('IFC4.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp)) AND (NOT ('IFC4.IFCSPACE' IN TYPEOF(temp)))\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelSequence\n SUBTYPE OF (IfcRelConnects);\n\tRelatingProcess : IfcProcess;\n\tRelatedProcess : IfcProcess;\n\tTimeLag : OPTIONAL IfcLagTime;\n\tSequenceType : OPTIONAL IfcSequenceEnum;\n\tUserDefinedSequenceType : OPTIONAL IfcLabel;\n WHERE\n\tAvoidInconsistentSequence : RelatingProcess :<>: RelatedProcess;\n\tCorrectSequenceType : (SequenceType <> IfcSequenceEnum.USERDEFINED) OR ((SequenceType = IfcSequenceEnum.USERDEFINED) AND EXISTS(UserDefinedSequenceType));\nEND_ENTITY;\n\nENTITY IfcRelServicesBuildings\n SUBTYPE OF (IfcRelConnects);\n\tRelatingSystem : IfcSystem;\n\tRelatedBuildings : SET [1:?] OF IfcSpatialElement;\nEND_ENTITY;\n\nENTITY IfcRelSpaceBoundary\n SUPERTYPE OF (ONEOF\n    (IfcRelSpaceBoundary1stLevel))\n SUBTYPE OF (IfcRelConnects);\n\tRelatingSpace : IfcSpaceBoundarySelect;\n\tRelatedBuildingElement : IfcElement;\n\tConnectionGeometry : OPTIONAL IfcConnectionGeometry;\n\tPhysicalOrVirtualBoundary : IfcPhysicalOrVirtualEnum;\n\tInternalOrExternalBoundary : IfcInternalOrExternalEnum;\n WHERE\n\tCorrectPhysOrVirt : ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Physical) \n  AND (NOT('IFC4.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) \nOR \n((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Virtual) \n  AND (('IFC4.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)) \n  OR   ('IFC4.IFCOPENINGELEMENT' IN TYPEOF(RelatedBuildingElement)))) \nOR \n(PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.NotDefined);\nEND_ENTITY;\n\nENTITY IfcRelSpaceBoundary1stLevel\n SUPERTYPE OF (ONEOF\n    (IfcRelSpaceBoundary2ndLevel))\n SUBTYPE OF (IfcRelSpaceBoundary);\n\tParentBoundary : OPTIONAL IfcRelSpaceBoundary1stLevel;\n INVERSE\n\tInnerBoundaries : SET [0:?] OF IfcRelSpaceBoundary1stLevel FOR ParentBoundary;\nEND_ENTITY;\n\nENTITY IfcRelSpaceBoundary2ndLevel\n SUBTYPE OF (IfcRelSpaceBoundary1stLevel);\n\tCorrespondingBoundary : OPTIONAL IfcRelSpaceBoundary2ndLevel;\n INVERSE\n\tCorresponds : SET [0:1] OF IfcRelSpaceBoundary2ndLevel FOR CorrespondingBoundary;\nEND_ENTITY;\n\nENTITY IfcRelVoidsElement\n SUBTYPE OF (IfcRelDecomposes);\n\tRelatingBuildingElement : IfcElement;\n\tRelatedOpeningElement : IfcFeatureElementSubtraction;\nEND_ENTITY;\n\nENTITY IfcRelationship\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcRelAssigns\n    ,IfcRelAssociates\n    ,IfcRelConnects\n    ,IfcRelDeclares\n    ,IfcRelDecomposes\n    ,IfcRelDefines))\n SUBTYPE OF (IfcRoot);\nEND_ENTITY;\n\nENTITY IfcReparametrisedCompositeCurveSegment\n SUBTYPE OF (IfcCompositeCurveSegment);\n\tParamLength : IfcParameterValue;\n WHERE\n\tPositiveLengthParameter : ParamLength > 0.0;\nEND_ENTITY;\n\nENTITY IfcRepresentation\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcShapeModel\n    ,IfcStyleModel));\n\tContextOfItems : IfcRepresentationContext;\n\tRepresentationIdentifier : OPTIONAL IfcLabel;\n\tRepresentationType : OPTIONAL IfcLabel;\n\tItems : SET [1:?] OF IfcRepresentationItem;\n INVERSE\n\tRepresentationMap : SET [0:1] OF IfcRepresentationMap FOR MappedRepresentation;\n\tLayerAssignments : SET [0:?] OF IfcPresentationLayerAssignment FOR AssignedItems;\n\tOfProductRepresentation : SET [0:?] OF IfcProductRepresentation FOR Representations;\nEND_ENTITY;\n\nENTITY IfcRepresentationContext\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcGeometricRepresentationContext));\n\tContextIdentifier : OPTIONAL IfcLabel;\n\tContextType : OPTIONAL IfcLabel;\n INVERSE\n\tRepresentationsInContext : SET [0:?] OF IfcRepresentation FOR ContextOfItems;\nEND_ENTITY;\n\nENTITY IfcRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcGeometricRepresentationItem\n    ,IfcMappedItem\n    ,IfcStyledItem\n    ,IfcTopologicalRepresentationItem));\n INVERSE\n\tLayerAssignment : SET [0:1] OF IfcPresentationLayerAssignment FOR AssignedItems;\n\tStyledByItem : SET [0:1] OF IfcStyledItem FOR Item;\nEND_ENTITY;\n\nENTITY IfcRepresentationMap;\n\tMappingOrigin : IfcAxis2Placement;\n\tMappedRepresentation : IfcRepresentation;\n INVERSE\n\tHasShapeAspects : SET [0:?] OF IfcShapeAspect FOR PartOfProductDefinitionShape;\n\tMapUsage : SET [0:?] OF IfcMappedItem FOR MappingSource;\n WHERE\n\tApplicableMappedRepr : 'IFC4.IFCSHAPEMODEL' IN TYPEOF(MappedRepresentation);\nEND_ENTITY;\n\nENTITY IfcResource\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcConstructionResource))\n SUBTYPE OF (IfcObject);\n\tIdentification : OPTIONAL IfcIdentifier;\n\tLongDescription : OPTIONAL IfcText;\n INVERSE\n\tResourceOf : SET [0:?] OF IfcRelAssignsToResource FOR RelatingResource;\nEND_ENTITY;\n\nENTITY IfcResourceApprovalRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatedResourceObjects : SET [1:?] OF IfcResourceObjectSelect;\n\tRelatingApproval : IfcApproval;\nEND_ENTITY;\n\nENTITY IfcResourceConstraintRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingConstraint : IfcConstraint;\n\tRelatedResourceObjects : SET [1:?] OF IfcResourceObjectSelect;\nEND_ENTITY;\n\nENTITY IfcResourceLevelRelationship\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcApprovalRelationship\n    ,IfcCurrencyRelationship\n    ,IfcDocumentInformationRelationship\n    ,IfcExternalReferenceRelationship\n    ,IfcMaterialRelationship\n    ,IfcOrganizationRelationship\n    ,IfcPropertyDependencyRelationship\n    ,IfcResourceApprovalRelationship\n    ,IfcResourceConstraintRelationship));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcResourceTime\n SUBTYPE OF (IfcSchedulingTime);\n\tScheduleWork : OPTIONAL IfcDuration;\n\tScheduleUsage : OPTIONAL IfcPositiveRatioMeasure;\n\tScheduleStart : OPTIONAL IfcDateTime;\n\tScheduleFinish : OPTIONAL IfcDateTime;\n\tScheduleContour : OPTIONAL IfcLabel;\n\tLevelingDelay : OPTIONAL IfcDuration;\n\tIsOverAllocated : OPTIONAL IfcBoolean;\n\tStatusTime : OPTIONAL IfcDateTime;\n\tActualWork : OPTIONAL IfcDuration;\n\tActualUsage : OPTIONAL IfcPositiveRatioMeasure;\n\tActualStart : OPTIONAL IfcDateTime;\n\tActualFinish : OPTIONAL IfcDateTime;\n\tRemainingWork : OPTIONAL IfcDuration;\n\tRemainingUsage : OPTIONAL IfcPositiveRatioMeasure;\n\tCompletion : OPTIONAL IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcRevolvedAreaSolid\n SUPERTYPE OF (ONEOF\n    (IfcRevolvedAreaSolidTapered))\n SUBTYPE OF (IfcSweptAreaSolid);\n\tAxis : IfcAxis1Placement;\n\tAngle : IfcPlaneAngleMeasure;\n DERIVE\n\tAxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(Axis.Location, \n  IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Axis.Z,1.0));\n WHERE\n\tAxisStartInXY : Axis.Location.Coordinates[3] = 0.0;\n\tAxisDirectionInXY : Axis.Z.DirectionRatios[3] = 0.0;\nEND_ENTITY;\n\nENTITY IfcRevolvedAreaSolidTapered\n SUBTYPE OF (IfcRevolvedAreaSolid);\n\tEndSweptArea : IfcProfileDef;\n WHERE\n\tCorrectProfileAssignment : IfcTaperedSweptAreaProfiles(SELF\\IfcSweptAreaSolid.SweptArea, SELF.EndSweptArea);\nEND_ENTITY;\n\nENTITY IfcRightCircularCone\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tHeight : IfcPositiveLengthMeasure;\n\tBottomRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRightCircularCylinder\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tHeight : IfcPositiveLengthMeasure;\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRoof\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcRoofTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcRoofTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRoofTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCROOFTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcRoofType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcRoofTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcRoofTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcRoofTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcRoot\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcObjectDefinition\n    ,IfcPropertyDefinition\n    ,IfcRelationship));\n\tGlobalId : IfcGloballyUniqueId;\n\tOwnerHistory : OPTIONAL IfcOwnerHistory;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n UNIQUE\n\tUR1 : GlobalId;\nEND_ENTITY;\n\nENTITY IfcRoundedRectangleProfileDef\n SUBTYPE OF (IfcRectangleProfileDef);\n\tRoundingRadius : IfcPositiveLengthMeasure;\n WHERE\n\tValidRadius : ((RoundingRadius <= (SELF\\IfcRectangleProfileDef.XDim/2.)) AND \n (RoundingRadius <= (SELF\\IfcRectangleProfileDef.YDim/2.)));\nEND_ENTITY;\n\nENTITY IfcSIUnit\n SUBTYPE OF (IfcNamedUnit);\n\tPrefix : OPTIONAL IfcSIPrefix;\n\tName : IfcSIUnitName;\n DERIVE\n\tSELF\\IfcNamedUnit.Dimensions : IfcDimensionalExponents := IfcDimensionsForSiUnit (SELF.Name);\nEND_ENTITY;\n\nENTITY IfcSanitaryTerminal\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcSanitaryTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcSanitaryTerminalTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcSanitaryTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCSANITARYTERMINALTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSanitaryTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcSanitaryTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSanitaryTerminalTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcSanitaryTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSchedulingTime\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcEventTime\n    ,IfcLagTime\n    ,IfcResourceTime\n    ,IfcTaskTime\n    ,IfcWorkTime));\n\tName : OPTIONAL IfcLabel;\n\tDataOrigin : OPTIONAL IfcDataOriginEnum;\n\tUserDefinedDataOrigin : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcSeamCurve\n SUBTYPE OF (IfcSurfaceCurve);\n WHERE\n\tTwoPCurves : SIZEOF(SELF\\IfcSurfaceCurve.AssociatedGeometry) = 2;\n\tSameSurface : IfcAssociatedSurface(SELF\\IfcSurfaceCurve.AssociatedGeometry[1]) = IfcAssociatedSurface(SELF\\IfcSurfaceCurve.AssociatedGeometry[2]);\nEND_ENTITY;\n\nENTITY IfcSectionProperties\n SUBTYPE OF (IfcPreDefinedProperties);\n\tSectionType : IfcSectionTypeEnum;\n\tStartProfile : IfcProfileDef;\n\tEndProfile : OPTIONAL IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcSectionReinforcementProperties\n SUBTYPE OF (IfcPreDefinedProperties);\n\tLongitudinalStartPosition : IfcLengthMeasure;\n\tLongitudinalEndPosition : IfcLengthMeasure;\n\tTransversePosition : OPTIONAL IfcLengthMeasure;\n\tReinforcementRole : IfcReinforcingBarRoleEnum;\n\tSectionDefinition : IfcSectionProperties;\n\tCrossSectionReinforcementDefinitions : SET [1:?] OF IfcReinforcementBarProperties;\nEND_ENTITY;\n\nENTITY IfcSectionedSpine\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSpineCurve : IfcCompositeCurve;\n\tCrossSections : LIST [2:?] OF IfcProfileDef;\n\tCrossSectionPositions : LIST [2:?] OF IfcAxis2Placement3D;\n DERIVE\n\tDim : IfcDimensionCount := 3;\n WHERE\n\tCorrespondingSectionPositions : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions);\n\tConsistentProfileTypes : SIZEOF(QUERY(temp <* CrossSections | CrossSections[1].ProfileType <> temp.ProfileType)) = 0;\n\tSpineCurveDim : SpineCurve.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcSensor\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcSensorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcSensorTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcSensorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n('IFC4.IFCSENSORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSensorType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcSensorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSensorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcSensorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcShadingDevice\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcShadingDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcShadingDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcShadingDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCSHADINGDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcShadingDeviceType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcShadingDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcShadingDeviceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcShadingDeviceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcShapeAspect;\n\tShapeRepresentations : LIST [1:?] OF IfcShapeModel;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tProductDefinitional : IfcLogical;\n\tPartOfProductDefinitionShape : OPTIONAL IfcProductRepresentationSelect;\nEND_ENTITY;\n\nENTITY IfcShapeModel\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcShapeRepresentation\n    ,IfcTopologyRepresentation))\n SUBTYPE OF (IfcRepresentation);\n INVERSE\n\tOfShapeAspect : SET [0:1] OF IfcShapeAspect FOR ShapeRepresentations;\n WHERE\n\tWR11 : (SIZEOF(SELF\\IfcRepresentation.OfProductRepresentation) = 1) XOR \n(SIZEOF(SELF\\IfcRepresentation.RepresentationMap) = 1) XOR\n(SIZEOF(OfShapeAspect) = 1);\nEND_ENTITY;\n\nENTITY IfcShapeRepresentation\n SUBTYPE OF (IfcShapeModel);\n WHERE\n\tCorrectContext : 'IFC4.IFCGEOMETRICREPRESENTATIONCONTEXT' \nIN TYPEOF(SELF\\IfcRepresentation.ContextOfItems);\n\tNoTopologicalItem : SIZEOF(QUERY(temp <* Items | \n  ('IFC4.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))\n    AND (NOT(SIZEOF(\n      ['IFC4.IFCVERTEXPOINT',\n       'IFC4.IFCEDGECURVE',\n       'IFC4.IFCFACESURFACE'] * TYPEOF(temp)) = 1))\n)) = 0;\n\tHasRepresentationType : EXISTS(SELF\\IfcRepresentation.RepresentationType);\n\tHasRepresentationIdentifier : EXISTS(SELF\\IfcRepresentation.RepresentationIdentifier);\n\tCorrectItemsForType : IfcShapeRepresentationTypes(SELF\\IfcRepresentation.RepresentationType, SELF\\IfcRepresentation.Items);\nEND_ENTITY;\n\nENTITY IfcShellBasedSurfaceModel\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSbsmBoundary : SET [1:?] OF IfcShell;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcSimpleProperty\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcPropertyBoundedValue\n    ,IfcPropertyEnumeratedValue\n    ,IfcPropertyListValue\n    ,IfcPropertyReferenceValue\n    ,IfcPropertySingleValue\n    ,IfcPropertyTableValue))\n SUBTYPE OF (IfcProperty);\nEND_ENTITY;\n\nENTITY IfcSimplePropertyTemplate\n SUBTYPE OF (IfcPropertyTemplate);\n\tTemplateType : OPTIONAL IfcSimplePropertyTemplateTypeEnum;\n\tPrimaryMeasureType : OPTIONAL IfcLabel;\n\tSecondaryMeasureType : OPTIONAL IfcLabel;\n\tEnumerators : OPTIONAL IfcPropertyEnumeration;\n\tPrimaryUnit : OPTIONAL IfcUnit;\n\tSecondaryUnit : OPTIONAL IfcUnit;\n\tExpression : OPTIONAL IfcLabel;\n\tAccessState : OPTIONAL IfcStateEnum;\nEND_ENTITY;\n\nENTITY IfcSite\n SUBTYPE OF (IfcSpatialStructureElement);\n\tRefLatitude : OPTIONAL IfcCompoundPlaneAngleMeasure;\n\tRefLongitude : OPTIONAL IfcCompoundPlaneAngleMeasure;\n\tRefElevation : OPTIONAL IfcLengthMeasure;\n\tLandTitleNumber : OPTIONAL IfcLabel;\n\tSiteAddress : OPTIONAL IfcPostalAddress;\nEND_ENTITY;\n\nENTITY IfcSlab\n SUPERTYPE OF (ONEOF\n    (IfcSlabElementedCase\n    ,IfcSlabStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcSlabTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSlabTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSlabTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCSLABTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSlabElementedCase\n SUBTYPE OF (IfcSlab);\n WHERE\n\tHasDecomposition : HIINDEX(SELF\\IfcObjectDefinition.IsDecomposedBy) > 0;\nEND_ENTITY;\n\nENTITY IfcSlabStandardCase\n SUBTYPE OF (IfcSlab);\n WHERE\n\tHasMaterialLayerSetusage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') |\n              ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND\n              ('IFC4.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial))\n              )) = 1;\nEND_ENTITY;\n\nENTITY IfcSlabType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcSlabTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSlabTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcSlabTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSlippageConnectionCondition\n SUBTYPE OF (IfcStructuralConnectionCondition);\n\tSlippageX : OPTIONAL IfcLengthMeasure;\n\tSlippageY : OPTIONAL IfcLengthMeasure;\n\tSlippageZ : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcSolarDevice\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcSolarDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcSolarDeviceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcSolarDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCSOLARDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSolarDeviceType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcSolarDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSolarDeviceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcSolarDeviceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSolidModel\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCsgSolid\n    ,IfcManifoldSolidBrep\n    ,IfcSweptAreaSolid\n    ,IfcSweptDiskSolid))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcSpace\n SUBTYPE OF (IfcSpatialStructureElement);\n\tPredefinedType : OPTIONAL IfcSpaceTypeEnum;\n\tElevationWithFlooring : OPTIONAL IfcLengthMeasure;\n INVERSE\n\tHasCoverings : SET [0:?] OF IfcRelCoversSpaces FOR RelatingSpace;\n\tBoundedBy : SET [0:?] OF IfcRelSpaceBoundary FOR RelatingSpace;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSpaceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSpaceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCSPACETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSpaceHeater\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcSpaceHeaterTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcSpaceHeaterTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcSpaceHeaterTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCSPACEHEATERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSpaceHeaterType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcSpaceHeaterTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSpaceHeaterTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcSpaceHeaterTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSpaceType\n SUBTYPE OF (IfcSpatialStructureElementType);\n\tPredefinedType : IfcSpaceTypeEnum;\n\tLongName : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSpaceTypeEnum.USERDEFINED) OR \n((PredefinedType = IfcSpaceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcSpatialElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSpatialElement\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcExternalSpatialStructureElement\n    ,IfcSpatialStructureElement\n    ,IfcSpatialZone))\n SUBTYPE OF (IfcProduct);\n\tLongName : OPTIONAL IfcLabel;\n INVERSE\n\tContainsElements : SET [0:?] OF IfcRelContainedInSpatialStructure FOR RelatingStructure;\n\tServicedBySystems : SET [0:?] OF IfcRelServicesBuildings FOR RelatedBuildings;\n\tReferencesElements : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatingStructure;\nEND_ENTITY;\n\nENTITY IfcSpatialElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcSpatialStructureElementType\n    ,IfcSpatialZoneType))\n SUBTYPE OF (IfcTypeProduct);\n\tElementType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcSpatialStructureElement\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBuilding\n    ,IfcBuildingStorey\n    ,IfcSite\n    ,IfcSpace))\n SUBTYPE OF (IfcSpatialElement);\n\tCompositionType : OPTIONAL IfcElementCompositionEnum;\n WHERE\n\tWR41 : (HIINDEX(SELF\\IfcObjectDefinition.Decomposes) = 1) \nAND\n('IFC4.IFCRELAGGREGATES' IN TYPEOF(SELF\\IfcObjectDefinition.Decomposes[1])) \nAND\n(('IFC4.IFCPROJECT' IN TYPEOF (SELF\\IfcObjectDefinition.Decomposes[1].RelatingObject)) OR\n ('IFC4.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF (SELF\\IfcObjectDefinition.Decomposes[1].RelatingObject))\n);\nEND_ENTITY;\n\nENTITY IfcSpatialStructureElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcSpaceType))\n SUBTYPE OF (IfcSpatialElementType);\nEND_ENTITY;\n\nENTITY IfcSpatialZone\n SUBTYPE OF (IfcSpatialElement);\n\tPredefinedType : OPTIONAL IfcSpatialZoneTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSpatialZoneTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSpatialZoneTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCSPATIALZONETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSpatialZoneType\n SUBTYPE OF (IfcSpatialElementType);\n\tPredefinedType : IfcSpatialZoneTypeEnum;\n\tLongName : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSpatialZoneTypeEnum.USERDEFINED) OR \n((PredefinedType = IfcSpatialZoneTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcSpatialElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSphere\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcSphericalSurface\n SUBTYPE OF (IfcElementarySurface);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcStackTerminal\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcStackTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcStackTerminalTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcStackTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCSTACKTERMINALTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcStackTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcStackTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcStackTerminalTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcStackTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcStair\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcStairTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcStairTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcStairTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCSTAIRTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcStairFlight\n SUBTYPE OF (IfcBuildingElement);\n\tNumberOfRisers : OPTIONAL IfcInteger;\n\tNumberOfTreads : OPTIONAL IfcInteger;\n\tRiserHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tTreadLength : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : OPTIONAL IfcStairFlightTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcStairFlightTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcStairFlightTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCSTAIRFLIGHTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcStairFlightType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcStairFlightTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcStairFlightTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcStairFlightTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcStairType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcStairTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcStairTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcStairTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcStructuralAction\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStructuralCurveAction\n    ,IfcStructuralPointAction\n    ,IfcStructuralSurfaceAction))\n SUBTYPE OF (IfcStructuralActivity);\n\tDestabilizingLoad : OPTIONAL IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcStructuralActivity\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStructuralAction\n    ,IfcStructuralReaction))\n SUBTYPE OF (IfcProduct);\n\tAppliedLoad : IfcStructuralLoad;\n\tGlobalOrLocal : IfcGlobalOrLocalEnum;\n INVERSE\n\tAssignedToStructuralItem : SET [0:1] OF IfcRelConnectsStructuralActivity FOR RelatedStructuralActivity;\nEND_ENTITY;\n\nENTITY IfcStructuralAnalysisModel\n SUBTYPE OF (IfcSystem);\n\tPredefinedType : IfcAnalysisModelTypeEnum;\n\tOrientationOf2DPlane : OPTIONAL IfcAxis2Placement3D;\n\tLoadedBy : OPTIONAL SET [1:?] OF IfcStructuralLoadGroup;\n\tHasResults : OPTIONAL SET [1:?] OF IfcStructuralResultGroup;\n\tSharedPlacement : OPTIONAL IfcObjectPlacement;\n WHERE\n\tHasObjectType : (PredefinedType <> IfcAnalysisModelTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStructuralConnection\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStructuralCurveConnection\n    ,IfcStructuralPointConnection\n    ,IfcStructuralSurfaceConnection))\n SUBTYPE OF (IfcStructuralItem);\n\tAppliedCondition : OPTIONAL IfcBoundaryCondition;\n INVERSE\n\tConnectsStructuralMembers : SET [1:?] OF IfcRelConnectsStructuralMember FOR RelatedStructuralConnection;\nEND_ENTITY;\n\nENTITY IfcStructuralConnectionCondition\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcFailureConnectionCondition\n    ,IfcSlippageConnectionCondition));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcStructuralCurveAction\n SUPERTYPE OF (ONEOF\n    (IfcStructuralLinearAction))\n SUBTYPE OF (IfcStructuralAction);\n\tProjectedOrTrue : OPTIONAL IfcProjectedOrTrueLengthEnum;\n\tPredefinedType : IfcStructuralCurveActivityTypeEnum;\n WHERE\n\tProjectedIsGlobal : (NOT EXISTS(ProjectedOrTrue)) OR\n((ProjectedOrTrue <> PROJECTED_LENGTH) OR\n (SELF\\IfcStructuralActivity.GlobalOrLocal = GLOBAL_COORDS));\n\tHasObjectType : (PredefinedType <> IfcStructuralCurveActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\n\tSuitablePredefinedType : PredefinedType <> IfcStructuralCurveActivityTypeEnum.EQUIDISTANT;\nEND_ENTITY;\n\nENTITY IfcStructuralCurveConnection\n SUBTYPE OF (IfcStructuralConnection);\n\tAxis : IfcDirection;\nEND_ENTITY;\n\nENTITY IfcStructuralCurveMember\n SUPERTYPE OF (ONEOF\n    (IfcStructuralCurveMemberVarying))\n SUBTYPE OF (IfcStructuralMember);\n\tPredefinedType : IfcStructuralCurveMemberTypeEnum;\n\tAxis : IfcDirection;\n WHERE\n\tHasObjectType : (PredefinedType <> IfcStructuralCurveMemberTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStructuralCurveMemberVarying\n SUBTYPE OF (IfcStructuralCurveMember);\nEND_ENTITY;\n\nENTITY IfcStructuralCurveReaction\n SUBTYPE OF (IfcStructuralReaction);\n\tPredefinedType : IfcStructuralCurveActivityTypeEnum;\n WHERE\n\tHasObjectType : (PredefinedType <> IfcStructuralCurveActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\n\tSuitablePredefinedType : (PredefinedType <> IfcStructuralCurveActivityTypeEnum.SINUS) AND (PredefinedType <> IfcStructuralCurveActivityTypeEnum.PARABOLA);\nEND_ENTITY;\n\nENTITY IfcStructuralItem\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStructuralConnection\n    ,IfcStructuralMember))\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tAssignedStructuralActivity : SET [0:?] OF IfcRelConnectsStructuralActivity FOR RelatingElement;\nEND_ENTITY;\n\nENTITY IfcStructuralLinearAction\n SUBTYPE OF (IfcStructuralCurveAction);\n WHERE\n\tSuitableLoadType : SIZEOF(['IFC4.IFCSTRUCTURALLOADLINEARFORCE', 'IFC4.IFCSTRUCTURALLOADTEMPERATURE'] * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\n\tConstPredefinedType : SELF\\IfcStructuralCurveAction.PredefinedType = IfcStructuralCurveActivityTypeEnum.CONST;\nEND_ENTITY;\n\nENTITY IfcStructuralLoad\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStructuralLoadConfiguration\n    ,IfcStructuralLoadOrResult));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadCase\n SUBTYPE OF (IfcStructuralLoadGroup);\n\tSelfWeightCoefficients : OPTIONAL LIST [3:3] OF IfcRatioMeasure;\n WHERE\n\tIsLoadCasePredefinedType : SELF\\IfcStructuralLoadGroup.PredefinedType = IfcLoadGroupTypeEnum.LOAD_CASE;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadConfiguration\n SUBTYPE OF (IfcStructuralLoad);\n\tValues : LIST [1:?] OF IfcStructuralLoadOrResult;\n\tLocations : OPTIONAL LIST [1:?] OF UNIQUE LIST [1:2] OF IfcLengthMeasure;\n WHERE\n\tValidListSize : NOT EXISTS(Locations) OR (SIZEOF(Locations) = SIZEOF(Values));\nEND_ENTITY;\n\nENTITY IfcStructuralLoadGroup\n SUPERTYPE OF (ONEOF\n    (IfcStructuralLoadCase))\n SUBTYPE OF (IfcGroup);\n\tPredefinedType : IfcLoadGroupTypeEnum;\n\tActionType : IfcActionTypeEnum;\n\tActionSource : IfcActionSourceTypeEnum;\n\tCoefficient : OPTIONAL IfcRatioMeasure;\n\tPurpose : OPTIONAL IfcLabel;\n INVERSE\n\tSourceOfResultGroup : SET [0:1] OF IfcStructuralResultGroup FOR ResultForLoadGroup;\n\tLoadGroupFor : SET [0:?] OF IfcStructuralAnalysisModel FOR LoadedBy;\n WHERE\n\tHasObjectType : (\n  (PredefinedType <> IfcLoadGroupTypeEnum.USERDEFINED) AND\n  (ActionType <> IfcActionTypeEnum.USERDEFINED) AND\n  (ActionSource <> IfcActionSourceTypeEnum.USERDEFINED)\n) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStructuralLoadLinearForce\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tLinearForceX : OPTIONAL IfcLinearForceMeasure;\n\tLinearForceY : OPTIONAL IfcLinearForceMeasure;\n\tLinearForceZ : OPTIONAL IfcLinearForceMeasure;\n\tLinearMomentX : OPTIONAL IfcLinearMomentMeasure;\n\tLinearMomentY : OPTIONAL IfcLinearMomentMeasure;\n\tLinearMomentZ : OPTIONAL IfcLinearMomentMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadOrResult\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStructuralLoadStatic\n    ,IfcSurfaceReinforcementArea))\n SUBTYPE OF (IfcStructuralLoad);\nEND_ENTITY;\n\nENTITY IfcStructuralLoadPlanarForce\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tPlanarForceX : OPTIONAL IfcPlanarForceMeasure;\n\tPlanarForceY : OPTIONAL IfcPlanarForceMeasure;\n\tPlanarForceZ : OPTIONAL IfcPlanarForceMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleDisplacement\n SUPERTYPE OF (ONEOF\n    (IfcStructuralLoadSingleDisplacementDistortion))\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tDisplacementX : OPTIONAL IfcLengthMeasure;\n\tDisplacementY : OPTIONAL IfcLengthMeasure;\n\tDisplacementZ : OPTIONAL IfcLengthMeasure;\n\tRotationalDisplacementRX : OPTIONAL IfcPlaneAngleMeasure;\n\tRotationalDisplacementRY : OPTIONAL IfcPlaneAngleMeasure;\n\tRotationalDisplacementRZ : OPTIONAL IfcPlaneAngleMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleDisplacementDistortion\n SUBTYPE OF (IfcStructuralLoadSingleDisplacement);\n\tDistortion : OPTIONAL IfcCurvatureMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleForce\n SUPERTYPE OF (ONEOF\n    (IfcStructuralLoadSingleForceWarping))\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tForceX : OPTIONAL IfcForceMeasure;\n\tForceY : OPTIONAL IfcForceMeasure;\n\tForceZ : OPTIONAL IfcForceMeasure;\n\tMomentX : OPTIONAL IfcTorqueMeasure;\n\tMomentY : OPTIONAL IfcTorqueMeasure;\n\tMomentZ : OPTIONAL IfcTorqueMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleForceWarping\n SUBTYPE OF (IfcStructuralLoadSingleForce);\n\tWarpingMoment : OPTIONAL IfcWarpingMomentMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadStatic\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStructuralLoadLinearForce\n    ,IfcStructuralLoadPlanarForce\n    ,IfcStructuralLoadSingleDisplacement\n    ,IfcStructuralLoadSingleForce\n    ,IfcStructuralLoadTemperature))\n SUBTYPE OF (IfcStructuralLoadOrResult);\nEND_ENTITY;\n\nENTITY IfcStructuralLoadTemperature\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tDeltaTConstant : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tDeltaTY : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tDeltaTZ : OPTIONAL IfcThermodynamicTemperatureMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralMember\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStructuralCurveMember\n    ,IfcStructuralSurfaceMember))\n SUBTYPE OF (IfcStructuralItem);\n INVERSE\n\tConnectedBy : SET [0:?] OF IfcRelConnectsStructuralMember FOR RelatingStructuralMember;\nEND_ENTITY;\n\nENTITY IfcStructuralPlanarAction\n SUBTYPE OF (IfcStructuralSurfaceAction);\n WHERE\n\tSuitableLoadType : SIZEOF(['IFC4.IFCSTRUCTURALLOADPLANARFORCE', 'IFC4.IFCSTRUCTURALLOADTEMPERATURE'] * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\n\tConstPredefinedType : SELF\\IfcStructuralSurfaceAction.PredefinedType = IfcStructuralSurfaceActivityTypeEnum.CONST;\nEND_ENTITY;\n\nENTITY IfcStructuralPointAction\n SUBTYPE OF (IfcStructuralAction);\n WHERE\n\tSuitableLoadType : SIZEOF(['IFC4.IFCSTRUCTURALLOADSINGLEFORCE', 'IFC4.IFCSTRUCTURALLOADSINGLEDISPLACEMENT'] * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralPointConnection\n SUBTYPE OF (IfcStructuralConnection);\n\tConditionCoordinateSystem : OPTIONAL IfcAxis2Placement3D;\nEND_ENTITY;\n\nENTITY IfcStructuralPointReaction\n SUBTYPE OF (IfcStructuralReaction);\n WHERE\n\tSuitableLoadType : SIZEOF(['IFC4.IFCSTRUCTURALLOADSINGLEFORCE', 'IFC4.IFCSTRUCTURALLOADSINGLEDISPLACEMENT'] * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralReaction\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStructuralCurveReaction\n    ,IfcStructuralPointReaction\n    ,IfcStructuralSurfaceReaction))\n SUBTYPE OF (IfcStructuralActivity);\nEND_ENTITY;\n\nENTITY IfcStructuralResultGroup\n SUBTYPE OF (IfcGroup);\n\tTheoryType : IfcAnalysisTheoryTypeEnum;\n\tResultForLoadGroup : OPTIONAL IfcStructuralLoadGroup;\n\tIsLinear : IfcBoolean;\n INVERSE\n\tResultGroupFor : SET [0:1] OF IfcStructuralAnalysisModel FOR HasResults;\n WHERE\n\tHasObjectType : (TheoryType <> IfcAnalysisTheoryTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceAction\n SUPERTYPE OF (ONEOF\n    (IfcStructuralPlanarAction))\n SUBTYPE OF (IfcStructuralAction);\n\tProjectedOrTrue : OPTIONAL IfcProjectedOrTrueLengthEnum;\n\tPredefinedType : IfcStructuralSurfaceActivityTypeEnum;\n WHERE\n\tProjectedIsGlobal : (NOT EXISTS(ProjectedOrTrue)) OR\n((ProjectedOrTrue <> PROJECTED_LENGTH) OR\n (SELF\\IfcStructuralActivity.GlobalOrLocal = GLOBAL_COORDS));\n\tHasObjectType : (PredefinedType <> IfcStructuralSurfaceActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceConnection\n SUBTYPE OF (IfcStructuralConnection);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceMember\n SUPERTYPE OF (ONEOF\n    (IfcStructuralSurfaceMemberVarying))\n SUBTYPE OF (IfcStructuralMember);\n\tPredefinedType : IfcStructuralSurfaceMemberTypeEnum;\n\tThickness : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tHasObjectType : (PredefinedType <> IfcStructuralSurfaceMemberTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceMemberVarying\n SUBTYPE OF (IfcStructuralSurfaceMember);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceReaction\n SUBTYPE OF (IfcStructuralReaction);\n\tPredefinedType : IfcStructuralSurfaceActivityTypeEnum;\n WHERE\n\tHasPredefinedType : (PredefinedType <> IfcStructuralSurfaceActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStyleModel\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStyledRepresentation))\n SUBTYPE OF (IfcRepresentation);\nEND_ENTITY;\n\nENTITY IfcStyledItem\n SUBTYPE OF (IfcRepresentationItem);\n\tItem : OPTIONAL IfcRepresentationItem;\n\tStyles : SET [1:?] OF IfcStyleAssignmentSelect;\n\tName : OPTIONAL IfcLabel;\n WHERE\n\tApplicableItem : NOT('IFC4.IFCSTYLEDITEM' IN TYPEOF(Item));\nEND_ENTITY;\n\nENTITY IfcStyledRepresentation\n SUBTYPE OF (IfcStyleModel);\n WHERE\n\tOnlyStyledItems : SIZEOF(QUERY(temp <* SELF\\IfcRepresentation.Items | \n  (NOT('IFC4.IFCSTYLEDITEM' IN TYPEOF(temp)))\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcSubContractResource\n SUBTYPE OF (IfcConstructionResource);\n\tPredefinedType : OPTIONAL IfcSubContractResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcSubContractResourceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcSubContractResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcSubContractResourceType\n SUBTYPE OF (IfcConstructionResourceType);\n\tPredefinedType : IfcSubContractResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSubContractResourceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcSubContractResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeResource.ResourceType));\nEND_ENTITY;\n\nENTITY IfcSubedge\n SUBTYPE OF (IfcEdge);\n\tParentEdge : IfcEdge;\nEND_ENTITY;\n\nENTITY IfcSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBoundedSurface\n    ,IfcElementarySurface\n    ,IfcSweptSurface))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcSurfaceCurve\n SUPERTYPE OF (ONEOF\n    (IfcIntersectionCurve\n    ,IfcSeamCurve))\n SUBTYPE OF (IfcCurve);\n\tCurve3D : IfcCurve;\n\tAssociatedGeometry : LIST [1:2] OF IfcPcurve;\n\tMasterRepresentation : IfcPreferredSurfaceCurveRepresentation;\n DERIVE\n\tBasisSurface : SET [1:2] OF IfcSurface := IfcGetBasisSurface(SELF);\n WHERE\n\tCurveIs3D : Curve3D.Dim = 3;\n\tCurveIsNotPcurve : NOT ('IFC4.IFCPCURVE' IN TYPEOF(Curve3D));\nEND_ENTITY;\n\nENTITY IfcSurfaceCurveSweptAreaSolid\n SUBTYPE OF (IfcSweptAreaSolid);\n\tDirectrix : IfcCurve;\n\tStartParam : OPTIONAL IfcParameterValue;\n\tEndParam : OPTIONAL IfcParameterValue;\n\tReferenceSurface : IfcSurface;\n WHERE\n\tDirectrixBounded : (EXISTS(StartParam) AND EXISTS(EndParam)) OR \n(SIZEOF(['IFC4.IFCCONIC', 'IFC4.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1);\nEND_ENTITY;\n\nENTITY IfcSurfaceFeature\n SUBTYPE OF (IfcFeatureElement);\n\tPredefinedType : OPTIONAL IfcSurfaceFeatureTypeEnum;\n WHERE\n\tHasObjectType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcSurfaceFeatureTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcSurfaceOfLinearExtrusion\n SUBTYPE OF (IfcSweptSurface);\n\tExtrudedDirection : IfcDirection;\n\tDepth : IfcLengthMeasure;\n DERIVE\n\tExtrusionAxis : IfcVector := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (ExtrudedDirection, Depth);\n WHERE\n\tDepthGreaterZero : Depth > 0.;\nEND_ENTITY;\n\nENTITY IfcSurfaceOfRevolution\n SUBTYPE OF (IfcSweptSurface);\n\tAxisPosition : IfcAxis1Placement;\n DERIVE\n\tAxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(AxisPosition.Location, \n  IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(AxisPosition.Z,1.0));\nEND_ENTITY;\n\nENTITY IfcSurfaceReinforcementArea\n SUBTYPE OF (IfcStructuralLoadOrResult);\n\tSurfaceReinforcement1 : OPTIONAL LIST [2:3] OF IfcLengthMeasure;\n\tSurfaceReinforcement2 : OPTIONAL LIST [2:3] OF IfcLengthMeasure;\n\tShearReinforcement : OPTIONAL IfcRatioMeasure;\n WHERE\n\tSurfaceAndOrShearAreaSpecified : EXISTS(SurfaceReinforcement1) OR EXISTS(SurfaceReinforcement2) OR EXISTS(ShearReinforcement);\n\tNonnegativeArea1 : (NOT EXISTS(SurfaceReinforcement1)) OR (\n    (SurfaceReinforcement1[1] >= 0.) AND\n    (SurfaceReinforcement1[2] >= 0.) AND\n    ((SIZEOF(SurfaceReinforcement1) = 1) OR (SurfaceReinforcement1[1] >= 0.))\n);\n\tNonnegativeArea2 : (NOT EXISTS(SurfaceReinforcement2)) OR (\n    (SurfaceReinforcement2[1] >= 0.) AND\n    (SurfaceReinforcement2[2] >= 0.) AND\n    ((SIZEOF(SurfaceReinforcement2) = 1) OR (SurfaceReinforcement2[1] >= 0.))\n);\n\tNonnegativeArea3 : (NOT EXISTS(ShearReinforcement)) OR (ShearReinforcement >= 0.);\nEND_ENTITY;\n\nENTITY IfcSurfaceStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tSide : IfcSurfaceSide;\n\tStyles : SET [1:5] OF IfcSurfaceStyleElementSelect;\n WHERE\n\tMaxOneShading : SIZEOF(QUERY(Style <* SELF.Styles |\n  'IFC4.IFCSURFACESTYLESHADING' IN\n   TYPEOF(Style)\n  )) <= 1;\n\tMaxOneLighting : SIZEOF(QUERY(Style <* SELF.Styles |\n  'IFC4.IFCSURFACESTYLELIGHTING' IN\n   TYPEOF(Style)\n  )) <= 1;\n\tMaxOneRefraction : SIZEOF(QUERY(Style <* SELF.Styles |\n  'IFC4.IFCSURFACESTYLEREFRACTION' IN\n   TYPEOF(Style)\n  )) <= 1;\n\tMaxOneTextures : SIZEOF(QUERY(Style <* SELF.Styles |\n  'IFC4.IFCSURFACESTYLEWITHTEXTURES' IN\n   TYPEOF(Style)\n  )) <= 1;\n\tMaxOneExtDefined : SIZEOF(QUERY(Style <* SELF.Styles |\n  'IFC4.IFCEXTERNALLYDEFINEDSURFACESTYLE' IN\n   TYPEOF(Style)\n  )) <= 1;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleLighting\n SUBTYPE OF (IfcPresentationItem);\n\tDiffuseTransmissionColour : IfcColourRgb;\n\tDiffuseReflectionColour : IfcColourRgb;\n\tTransmissionColour : IfcColourRgb;\n\tReflectanceColour : IfcColourRgb;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleRefraction\n SUBTYPE OF (IfcPresentationItem);\n\tRefractionIndex : OPTIONAL IfcReal;\n\tDispersionFactor : OPTIONAL IfcReal;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleRendering\n SUBTYPE OF (IfcSurfaceStyleShading);\n\tDiffuseColour : OPTIONAL IfcColourOrFactor;\n\tTransmissionColour : OPTIONAL IfcColourOrFactor;\n\tDiffuseTransmissionColour : OPTIONAL IfcColourOrFactor;\n\tReflectionColour : OPTIONAL IfcColourOrFactor;\n\tSpecularColour : OPTIONAL IfcColourOrFactor;\n\tSpecularHighlight : OPTIONAL IfcSpecularHighlightSelect;\n\tReflectanceMethod : IfcReflectanceMethodEnum;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleShading\n SUPERTYPE OF (ONEOF\n    (IfcSurfaceStyleRendering))\n SUBTYPE OF (IfcPresentationItem);\n\tSurfaceColour : IfcColourRgb;\n\tTransparency : OPTIONAL IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleWithTextures\n SUBTYPE OF (IfcPresentationItem);\n\tTextures : LIST [1:?] OF IfcSurfaceTexture;\nEND_ENTITY;\n\nENTITY IfcSurfaceTexture\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBlobTexture\n    ,IfcImageTexture\n    ,IfcPixelTexture))\n SUBTYPE OF (IfcPresentationItem);\n\tRepeatS : IfcBoolean;\n\tRepeatT : IfcBoolean;\n\tMode : OPTIONAL IfcIdentifier;\n\tTextureTransform : OPTIONAL IfcCartesianTransformationOperator2D;\n\tParameter : OPTIONAL LIST [1:?] OF IfcIdentifier;\n INVERSE\n\tIsMappedBy : SET [0:?] OF IfcTextureCoordinate FOR Maps;\n\tUsedInStyles : SET [0:?] OF IfcSurfaceStyleWithTextures FOR Textures;\nEND_ENTITY;\n\nENTITY IfcSweptAreaSolid\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcExtrudedAreaSolid\n    ,IfcFixedReferenceSweptAreaSolid\n    ,IfcRevolvedAreaSolid\n    ,IfcSurfaceCurveSweptAreaSolid))\n SUBTYPE OF (IfcSolidModel);\n\tSweptArea : IfcProfileDef;\n\tPosition : OPTIONAL IfcAxis2Placement3D;\n WHERE\n\tSweptAreaType : SweptArea.ProfileType = IfcProfileTypeEnum.Area;\nEND_ENTITY;\n\nENTITY IfcSweptDiskSolid\n SUPERTYPE OF (ONEOF\n    (IfcSweptDiskSolidPolygonal))\n SUBTYPE OF (IfcSolidModel);\n\tDirectrix : IfcCurve;\n\tRadius : IfcPositiveLengthMeasure;\n\tInnerRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tStartParam : OPTIONAL IfcParameterValue;\n\tEndParam : OPTIONAL IfcParameterValue;\n WHERE\n\tDirectrixDim : Directrix.Dim = 3;\n\tInnerRadiusSize : (NOT EXISTS(InnerRadius)) OR (Radius > InnerRadius);\n\tDirectrixBounded : (EXISTS(StartParam) AND EXISTS(EndParam)) OR \n(SIZEOF(['IFC4.IFCCONIC', 'IFC4.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1);\nEND_ENTITY;\n\nENTITY IfcSweptDiskSolidPolygonal\n SUBTYPE OF (IfcSweptDiskSolid);\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tCorrectRadii : NOT(EXISTS(FilletRadius)) OR (FilletRadius >= SELF\\IfcSweptDiskSolid.Radius);\n\tDirectrixIsPolyline : ('IFC4.IFCPOLYLINE' IN TYPEOF(SELF\\IfcSweptDiskSolid.Directrix)) OR\n(('IFC4.IFCINDEXEDPOLYCURVE' IN TYPEOF(SELF\\IfcSweptDiskSolid.Directrix)) AND NOT(EXISTS(SELF\\IfcSweptDiskSolid.Directrix.Segments)));\nEND_ENTITY;\n\nENTITY IfcSweptSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcSurfaceOfLinearExtrusion\n    ,IfcSurfaceOfRevolution))\n SUBTYPE OF (IfcSurface);\n\tSweptCurve : IfcProfileDef;\n\tPosition : OPTIONAL IfcAxis2Placement3D;\n WHERE\n\tSweptCurveType : SweptCurve.ProfileType = IfcProfileTypeEnum.Curve;\nEND_ENTITY;\n\nENTITY IfcSwitchingDevice\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcSwitchingDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcSwitchingDeviceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcSwitchingDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCSWITCHINGDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSwitchingDeviceType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcSwitchingDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSwitchingDeviceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcSwitchingDeviceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSystem\n SUPERTYPE OF (ONEOF\n    (IfcBuildingSystem\n    ,IfcDistributionSystem\n    ,IfcStructuralAnalysisModel\n    ,IfcZone))\n SUBTYPE OF (IfcGroup);\n INVERSE\n\tServicesBuildings : SET [0:1] OF IfcRelServicesBuildings FOR RelatingSystem;\nEND_ENTITY;\n\nENTITY IfcSystemFurnitureElement\n SUBTYPE OF (IfcFurnishingElement);\n\tPredefinedType : OPTIONAL IfcSystemFurnitureElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcSystemFurnitureElementTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcSystemFurnitureElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n   ('IFC4.IFCSYSTEMFURNITUREELEMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSystemFurnitureElementType\n SUBTYPE OF (IfcFurnishingElementType);\n\tPredefinedType : OPTIONAL IfcSystemFurnitureElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSystemFurnitureElementTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcSystemFurnitureElementTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tFlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tWebEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tWebSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n WHERE\n\tValidFlangeThickness : FlangeThickness < Depth;\n\tValidWebThickness : WebThickness < FlangeWidth;\nEND_ENTITY;\n\nENTITY IfcTable;\n\tName : OPTIONAL IfcLabel;\n\tRows : OPTIONAL LIST [1:?] OF IfcTableRow;\n\tColumns : OPTIONAL LIST [1:?] OF IfcTableColumn;\n DERIVE\n\tNumberOfCellsInRow : IfcInteger := HIINDEX(Rows[1].RowCells);\n\tNumberOfHeadings : IfcInteger := SIZEOF(QUERY( Temp <* Rows | Temp.IsHeading));\n\tNumberOfDataRows : IfcInteger := SIZEOF(QUERY( Temp <* Rows | NOT(Temp.IsHeading)));\n WHERE\n\tWR1 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0;\n\tWR2 : { 0 <= NumberOfHeadings <= 1 };\nEND_ENTITY;\n\nENTITY IfcTableColumn;\n\tIdentifier : OPTIONAL IfcIdentifier;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tUnit : OPTIONAL IfcUnit;\n\tReferencePath : OPTIONAL IfcReference;\nEND_ENTITY;\n\nENTITY IfcTableRow;\n\tRowCells : OPTIONAL LIST [1:?] OF IfcValue;\n\tIsHeading : OPTIONAL IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcTank\n SUBTYPE OF (IfcFlowStorageDevice);\n\tPredefinedType : OPTIONAL IfcTankTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcTankTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcTankTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCTANKTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTankType\n SUBTYPE OF (IfcFlowStorageDeviceType);\n\tPredefinedType : IfcTankTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTankTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcTankTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTask\n SUBTYPE OF (IfcProcess);\n\tStatus : OPTIONAL IfcLabel;\n\tWorkMethod : OPTIONAL IfcLabel;\n\tIsMilestone : IfcBoolean;\n\tPriority : OPTIONAL IfcInteger;\n\tTaskTime : OPTIONAL IfcTaskTime;\n\tPredefinedType : OPTIONAL IfcTaskTypeEnum;\n WHERE\n\tHasName : EXISTS(SELF\\IfcRoot.Name);\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcTaskTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTaskTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcTaskTime\n SUPERTYPE OF (ONEOF\n    (IfcTaskTimeRecurring))\n SUBTYPE OF (IfcSchedulingTime);\n\tDurationType : OPTIONAL IfcTaskDurationEnum;\n\tScheduleDuration : OPTIONAL IfcDuration;\n\tScheduleStart : OPTIONAL IfcDateTime;\n\tScheduleFinish : OPTIONAL IfcDateTime;\n\tEarlyStart : OPTIONAL IfcDateTime;\n\tEarlyFinish : OPTIONAL IfcDateTime;\n\tLateStart : OPTIONAL IfcDateTime;\n\tLateFinish : OPTIONAL IfcDateTime;\n\tFreeFloat : OPTIONAL IfcDuration;\n\tTotalFloat : OPTIONAL IfcDuration;\n\tIsCritical : OPTIONAL IfcBoolean;\n\tStatusTime : OPTIONAL IfcDateTime;\n\tActualDuration : OPTIONAL IfcDuration;\n\tActualStart : OPTIONAL IfcDateTime;\n\tActualFinish : OPTIONAL IfcDateTime;\n\tRemainingTime : OPTIONAL IfcDuration;\n\tCompletion : OPTIONAL IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcTaskTimeRecurring\n SUBTYPE OF (IfcTaskTime);\n\tRecurrence : IfcRecurrencePattern;\nEND_ENTITY;\n\nENTITY IfcTaskType\n SUBTYPE OF (IfcTypeProcess);\n\tPredefinedType : IfcTaskTypeEnum;\n\tWorkMethod : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTaskTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTaskTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeProcess.ProcessType));\nEND_ENTITY;\n\nENTITY IfcTelecomAddress\n SUBTYPE OF (IfcAddress);\n\tTelephoneNumbers : OPTIONAL LIST [1:?] OF IfcLabel;\n\tFacsimileNumbers : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPagerNumber : OPTIONAL IfcLabel;\n\tElectronicMailAddresses : OPTIONAL LIST [1:?] OF IfcLabel;\n\tWWWHomePageURL : OPTIONAL IfcURIReference;\n\tMessagingIDs : OPTIONAL LIST [1:?] OF IfcURIReference;\n WHERE\n\tMinimumDataProvided : EXISTS (TelephoneNumbers) OR\nEXISTS (FacsimileNumbers) OR \nEXISTS (PagerNumber) OR\nEXISTS (ElectronicMailAddresses) OR \nEXISTS (WWWHomePageURL) OR\nEXISTS (MessagingIDs);\nEND_ENTITY;\n\nENTITY IfcTendon\n SUBTYPE OF (IfcReinforcingElement);\n\tPredefinedType : OPTIONAL IfcTendonTypeEnum;\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tTensionForce : OPTIONAL IfcForceMeasure;\n\tPreStress : OPTIONAL IfcPressureMeasure;\n\tFrictionCoefficient : OPTIONAL IfcNormalisedRatioMeasure;\n\tAnchorageSlip : OPTIONAL IfcPositiveLengthMeasure;\n\tMinCurvatureRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n(PredefinedType <> IfcTendonTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcTendonTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCTENDONTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTendonAnchor\n SUBTYPE OF (IfcReinforcingElement);\n\tPredefinedType : OPTIONAL IfcTendonAnchorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n(PredefinedType <> IfcTendonAnchorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcTendonAnchorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCTENDONANCHORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTendonAnchorType\n SUBTYPE OF (IfcReinforcingElementType);\n\tPredefinedType : IfcTendonAnchorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTendonAnchorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcTendonAnchorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTendonType\n SUBTYPE OF (IfcReinforcingElementType);\n\tPredefinedType : IfcTendonTypeEnum;\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tSheathDiameter : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTendonTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcTendonTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTessellatedFaceSet\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcPolygonalFaceSet\n    ,IfcTriangulatedFaceSet))\n SUBTYPE OF (IfcTessellatedItem);\n\tCoordinates : IfcCartesianPointList3D;\n DERIVE\n\tDim : IfcDimensionCount := 3;\n INVERSE\n\tHasColours : SET [0:1] OF IfcIndexedColourMap FOR MappedTo;\n\tHasTextures : SET [0:?] OF IfcIndexedTextureMap FOR MappedTo;\nEND_ENTITY;\n\nENTITY IfcTessellatedItem\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcIndexedPolygonalFace\n    ,IfcTessellatedFaceSet))\n SUBTYPE OF (IfcGeometricRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcTextLiteral\n SUPERTYPE OF (ONEOF\n    (IfcTextLiteralWithExtent))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tLiteral : IfcPresentableText;\n\tPlacement : IfcAxis2Placement;\n\tPath : IfcTextPath;\nEND_ENTITY;\n\nENTITY IfcTextLiteralWithExtent\n SUBTYPE OF (IfcTextLiteral);\n\tExtent : IfcPlanarExtent;\n\tBoxAlignment : IfcBoxAlignment;\n WHERE\n\tWR31 : NOT('IFC4.IFCPLANARBOX' IN TYPEOF(Extent));\nEND_ENTITY;\n\nENTITY IfcTextStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tTextCharacterAppearance : OPTIONAL IfcTextStyleForDefinedFont;\n\tTextStyle : OPTIONAL IfcTextStyleTextModel;\n\tTextFontStyle : IfcTextFontSelect;\n\tModelOrDraughting : OPTIONAL IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcTextStyleFontModel\n SUBTYPE OF (IfcPreDefinedTextFont);\n\tFontFamily : LIST [1:?] OF IfcTextFontName;\n\tFontStyle : OPTIONAL IfcFontStyle;\n\tFontVariant : OPTIONAL IfcFontVariant;\n\tFontWeight : OPTIONAL IfcFontWeight;\n\tFontSize : IfcSizeSelect;\n WHERE\n\tMeasureOfFontSize : ('IFC4.IFCLENGTHMEASURE' IN TYPEOF(SELF.FontSize)) AND\n(SELF.FontSize > 0.);\nEND_ENTITY;\n\nENTITY IfcTextStyleForDefinedFont\n SUBTYPE OF (IfcPresentationItem);\n\tColour : IfcColour;\n\tBackgroundColour : OPTIONAL IfcColour;\nEND_ENTITY;\n\nENTITY IfcTextStyleTextModel\n SUBTYPE OF (IfcPresentationItem);\n\tTextIndent : OPTIONAL IfcSizeSelect;\n\tTextAlign : OPTIONAL IfcTextAlignment;\n\tTextDecoration : OPTIONAL IfcTextDecoration;\n\tLetterSpacing : OPTIONAL IfcSizeSelect;\n\tWordSpacing : OPTIONAL IfcSizeSelect;\n\tTextTransform : OPTIONAL IfcTextTransformation;\n\tLineHeight : OPTIONAL IfcSizeSelect;\nEND_ENTITY;\n\nENTITY IfcTextureCoordinate\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcIndexedTextureMap\n    ,IfcTextureCoordinateGenerator\n    ,IfcTextureMap))\n SUBTYPE OF (IfcPresentationItem);\n\tMaps : LIST [1:?] OF IfcSurfaceTexture;\nEND_ENTITY;\n\nENTITY IfcTextureCoordinateGenerator\n SUBTYPE OF (IfcTextureCoordinate);\n\tMode : IfcLabel;\n\tParameter : OPTIONAL LIST [1:?] OF IfcReal;\nEND_ENTITY;\n\nENTITY IfcTextureMap\n SUBTYPE OF (IfcTextureCoordinate);\n\tVertices : LIST [3:?] OF IfcTextureVertex;\n\tMappedTo : IfcFace;\nEND_ENTITY;\n\nENTITY IfcTextureVertex\n SUBTYPE OF (IfcPresentationItem);\n\tCoordinates : LIST [2:2] OF IfcParameterValue;\nEND_ENTITY;\n\nENTITY IfcTextureVertexList\n SUBTYPE OF (IfcPresentationItem);\n\tTexCoordsList : LIST [1:?] OF LIST [2:2] OF IfcParameterValue;\nEND_ENTITY;\n\nENTITY IfcTimePeriod;\n\tStartTime : IfcTime;\n\tEndTime : IfcTime;\nEND_ENTITY;\n\nENTITY IfcTimeSeries\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcIrregularTimeSeries\n    ,IfcRegularTimeSeries));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tStartTime : IfcDateTime;\n\tEndTime : IfcDateTime;\n\tTimeSeriesDataType : IfcTimeSeriesDataTypeEnum;\n\tDataOrigin : IfcDataOriginEnum;\n\tUserDefinedDataOrigin : OPTIONAL IfcLabel;\n\tUnit : OPTIONAL IfcUnit;\n INVERSE\n\tHasExternalReference : SET [1:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcTimeSeriesValue;\n\tListValues : LIST [1:?] OF IfcValue;\nEND_ENTITY;\n\nENTITY IfcTopologicalRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcConnectedFaceSet\n    ,IfcEdge\n    ,IfcFace\n    ,IfcFaceBound\n    ,IfcLoop\n    ,IfcPath\n    ,IfcVertex))\n SUBTYPE OF (IfcRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcTopologyRepresentation\n SUBTYPE OF (IfcShapeModel);\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* SELF\\IfcRepresentation.Items | \n  NOT('IFC4.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))\n)) = 0;\n\tWR22 : EXISTS(SELF\\IfcRepresentation.RepresentationType);\n\tWR23 : IfcTopologyRepresentationTypes(SELF\\IfcRepresentation.RepresentationType, SELF\\IfcRepresentation.Items);\nEND_ENTITY;\n\nENTITY IfcToroidalSurface\n SUBTYPE OF (IfcElementarySurface);\n\tMajorRadius : IfcPositiveLengthMeasure;\n\tMinorRadius : IfcPositiveLengthMeasure;\n WHERE\n\tMajorLargerMinor : MinorRadius < MajorRadius;\nEND_ENTITY;\n\nENTITY IfcTransformer\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcTransformerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcTransformerTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcTransformerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCTRANFORMERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTransformerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcTransformerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTransformerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcTransformerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTransportElement\n SUBTYPE OF (IfcElement);\n\tPredefinedType : OPTIONAL IfcTransportElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcTransportElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcTransportElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCTRANSPORTELEMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTransportElementType\n SUBTYPE OF (IfcElementType);\n\tPredefinedType : IfcTransportElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTransportElementTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcTransportElementTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTrapeziumProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tBottomXDim : IfcPositiveLengthMeasure;\n\tTopXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\n\tTopXOffset : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcTriangulatedFaceSet\n SUBTYPE OF (IfcTessellatedFaceSet);\n\tNormals : OPTIONAL LIST [1:?] OF LIST [3:3] OF IfcParameterValue;\n\tClosed : OPTIONAL IfcBoolean;\n\tCoordIndex : LIST [1:?] OF LIST [3:3] OF IfcPositiveInteger;\n\tPnIndex : OPTIONAL LIST [1:?] OF IfcPositiveInteger;\n DERIVE\n\tNumberOfTriangles : IfcInteger := SIZEOF(CoordIndex);\nEND_ENTITY;\n\nENTITY IfcTrimmedCurve\n SUBTYPE OF (IfcBoundedCurve);\n\tBasisCurve : IfcCurve;\n\tTrim1 : SET [1:2] OF IfcTrimmingSelect;\n\tTrim2 : SET [1:2] OF IfcTrimmingSelect;\n\tSenseAgreement : IfcBoolean;\n\tMasterRepresentation : IfcTrimmingPreference;\n WHERE\n\tTrim1ValuesConsistent : (HIINDEX(Trim1) = 1) OR (TYPEOF(Trim1[1]) <> TYPEOF(Trim1[2]));\n\tTrim2ValuesConsistent : (HIINDEX(Trim2) = 1) OR (TYPEOF(Trim2[1]) <> TYPEOF(Trim2[2]));\n\tNoTrimOfBoundedCurves : NOT('IFC4.IFCBOUNDEDCURVE' IN TYPEOF(BasisCurve));\nEND_ENTITY;\n\nENTITY IfcTubeBundle\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcTubeBundleTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcTubeBundleTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcTubeBundleTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCTUBEBUNDLETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTubeBundleType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcTubeBundleTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTubeBundleTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcTubeBundleTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTypeObject\n SUPERTYPE OF (ONEOF\n    (IfcTypeProcess\n    ,IfcTypeProduct\n    ,IfcTypeResource))\n SUBTYPE OF (IfcObjectDefinition);\n\tApplicableOccurrence : OPTIONAL IfcIdentifier;\n\tHasPropertySets : OPTIONAL SET [1:?] OF IfcPropertySetDefinition;\n INVERSE\n\tTypes : SET [0:1] OF IfcRelDefinesByType FOR RelatingType;\n WHERE\n\tNameRequired : EXISTS(SELF\\IfcRoot.Name);\n\tUniquePropertySetNames : (NOT(EXISTS(HasPropertySets))) OR IfcUniquePropertySetNames(HasPropertySets);\nEND_ENTITY;\n\nENTITY IfcTypeProcess\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcEventType\n    ,IfcProcedureType\n    ,IfcTaskType))\n SUBTYPE OF (IfcTypeObject);\n\tIdentification : OPTIONAL IfcIdentifier;\n\tLongDescription : OPTIONAL IfcText;\n\tProcessType : OPTIONAL IfcLabel;\n INVERSE\n\tOperatesOn : SET [0:?] OF IfcRelAssignsToProcess FOR RelatingProcess;\nEND_ENTITY;\n\nENTITY IfcTypeProduct\n SUPERTYPE OF (ONEOF\n    (IfcDoorStyle\n    ,IfcElementType\n    ,IfcSpatialElementType\n    ,IfcWindowStyle))\n SUBTYPE OF (IfcTypeObject);\n\tRepresentationMaps : OPTIONAL LIST [1:?] OF UNIQUE IfcRepresentationMap;\n\tTag : OPTIONAL IfcLabel;\n INVERSE\n\tReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct;\n WHERE\n\tApplicableOccurrence : NOT(EXISTS(SELF\\IfcTypeObject.Types[1])) OR\n(SIZEOF(QUERY(temp <* SELF\\IfcTypeObject.Types[1].RelatedObjects |\n  NOT('IFC4.IFCPRODUCT' IN TYPEOF(temp)))\n) = 0);\nEND_ENTITY;\n\nENTITY IfcTypeResource\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcConstructionResourceType))\n SUBTYPE OF (IfcTypeObject);\n\tIdentification : OPTIONAL IfcIdentifier;\n\tLongDescription : OPTIONAL IfcText;\n\tResourceType : OPTIONAL IfcLabel;\n INVERSE\n\tResourceOf : SET [0:?] OF IfcRelAssignsToResource FOR RelatingResource;\nEND_ENTITY;\n\nENTITY IfcUShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n WHERE\n\tValidFlangeThickness : FlangeThickness < (Depth / 2.);\n\tValidWebThickness : WebThickness < FlangeWidth;\nEND_ENTITY;\n\nENTITY IfcUnitAssignment;\n\tUnits : SET [1:?] OF IfcUnit;\n WHERE\n\tWR01 : IfcCorrectUnitAssignment(Units);\nEND_ENTITY;\n\nENTITY IfcUnitaryControlElement\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcUnitaryControlElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcUnitaryControlElementTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcUnitaryControlElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n('IFC4.IFCUNITARYCONTROLELEMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcUnitaryControlElementType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcUnitaryControlElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcUnitaryControlElementTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcUnitaryControlElementTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcUnitaryEquipment\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcUnitaryEquipmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcUnitaryEquipmentTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcUnitaryEquipmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCUNITARYEQUIPMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcUnitaryEquipmentType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcUnitaryEquipmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcUnitaryEquipmentTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcUnitaryEquipmentTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcValve\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcValveTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcValveTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcValveTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCVALVETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcValveType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcValveTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcValveTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcValveTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcVector\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOrientation : IfcDirection;\n\tMagnitude : IfcLengthMeasure;\n DERIVE\n\tDim : IfcDimensionCount := Orientation.Dim;\n WHERE\n\tMagGreaterOrEqualZero : Magnitude >= 0.0;\nEND_ENTITY;\n\nENTITY IfcVertex\n SUPERTYPE OF (ONEOF\n    (IfcVertexPoint))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcVertexLoop\n SUBTYPE OF (IfcLoop);\n\tLoopVertex : IfcVertex;\nEND_ENTITY;\n\nENTITY IfcVertexPoint\n SUBTYPE OF (IfcVertex);\n\tVertexGeometry : IfcPoint;\nEND_ENTITY;\n\nENTITY IfcVibrationIsolator\n SUBTYPE OF (IfcElementComponent);\n\tPredefinedType : OPTIONAL IfcVibrationIsolatorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcVibrationIsolatorTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcVibrationIsolatorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCVIBRATIONISOLATORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcVibrationIsolatorType\n SUBTYPE OF (IfcElementComponentType);\n\tPredefinedType : IfcVibrationIsolatorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcVibrationIsolatorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcVibrationIsolatorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcVirtualElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcVirtualGridIntersection;\n\tIntersectingAxes : LIST [2:2] OF UNIQUE IfcGridAxis;\n\tOffsetDistances : LIST [2:3] OF IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcVoidingFeature\n SUBTYPE OF (IfcFeatureElementSubtraction);\n\tPredefinedType : OPTIONAL IfcVoidingFeatureTypeEnum;\n WHERE\n\tHasObjectType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcVoidingFeatureTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcWall\n SUPERTYPE OF (ONEOF\n    (IfcWallElementedCase\n    ,IfcWallStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcWallTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcWallTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcWallTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCWALLTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcWallElementedCase\n SUBTYPE OF (IfcWall);\n WHERE\n\tHasDecomposition : HIINDEX(SELF\\IfcObjectDefinition.IsDecomposedBy) > 0;\nEND_ENTITY;\n\nENTITY IfcWallStandardCase\n SUBTYPE OF (IfcWall);\n WHERE\n\tHasMaterialLayerSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') |\n              ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND\n              ('IFC4.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial))\n              )) = 1;\nEND_ENTITY;\n\nENTITY IfcWallType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcWallTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcWallTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcWallTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcWasteTerminal\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcWasteTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcWasteTerminalTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcWasteTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCWASTETERMINALTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcWasteTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcWasteTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcWasteTerminalTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcWasteTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcWindow\n SUPERTYPE OF (ONEOF\n    (IfcWindowStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n\tOverallHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tOverallWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : OPTIONAL IfcWindowTypeEnum;\n\tPartitioningType : OPTIONAL IfcWindowTypePartitioningEnum;\n\tUserDefinedPartitioningType : OPTIONAL IfcLabel;\n WHERE\n\tCorrectStyleAssigned : (SIZEOF(IsTypedBy) = 0) \nOR ('IFC4.IFCWINDOWTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcWindowLiningProperties\n SUBTYPE OF (IfcPreDefinedPropertySet);\n\tLiningDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tLiningThickness : OPTIONAL IfcNonNegativeLengthMeasure;\n\tTransomThickness : OPTIONAL IfcNonNegativeLengthMeasure;\n\tMullionThickness : OPTIONAL IfcNonNegativeLengthMeasure;\n\tFirstTransomOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tSecondTransomOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tFirstMullionOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tSecondMullionOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n\tLiningOffset : OPTIONAL IfcLengthMeasure;\n\tLiningToPanelOffsetX : OPTIONAL IfcLengthMeasure;\n\tLiningToPanelOffsetY : OPTIONAL IfcLengthMeasure;\n WHERE\n\tWR31 : NOT(EXISTS(LiningDepth) AND NOT(EXISTS(LiningThickness)));\n\tWR32 : NOT(NOT(EXISTS(FirstTransomOffset)) AND EXISTS(SecondTransomOffset));\n\tWR33 : NOT(NOT(EXISTS(FirstMullionOffset)) AND EXISTS(SecondMullionOffset));\n\tWR34 : (EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1])) \nAND \n(\n ('IFC4.IFCWINDOWTYPE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]))\n  OR\n ('IFC4.IFCWINDOWSTYLE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]))\n);\nEND_ENTITY;\n\nENTITY IfcWindowPanelProperties\n SUBTYPE OF (IfcPreDefinedPropertySet);\n\tOperationType : IfcWindowPanelOperationEnum;\n\tPanelPosition : IfcWindowPanelPositionEnum;\n\tFrameDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tFrameThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n WHERE\n\tApplicableToType : (EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1])) \nAND \n(\n ('IFC4.IFCWINDOWTYPE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]))\n  OR\n ('IFC4.IFCWINDOWSTYLE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]))\n);\nEND_ENTITY;\n\nENTITY IfcWindowStandardCase\n SUBTYPE OF (IfcWindow);\nEND_ENTITY;\n\nENTITY IfcWindowStyle\n SUBTYPE OF (IfcTypeProduct);\n\tConstructionType : IfcWindowStyleConstructionEnum;\n\tOperationType : IfcWindowStyleOperationEnum;\n\tParameterTakesPrecedence : IfcBoolean;\n\tSizeable : IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcWindowType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcWindowTypeEnum;\n\tPartitioningType : IfcWindowTypePartitioningEnum;\n\tParameterTakesPrecedence : OPTIONAL IfcBoolean;\n\tUserDefinedPartitioningType : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcWindowTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcWindowTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcWorkCalendar\n SUBTYPE OF (IfcControl);\n\tWorkingTimes : OPTIONAL SET [1:?] OF IfcWorkTime;\n\tExceptionTimes : OPTIONAL SET [1:?] OF IfcWorkTime;\n\tPredefinedType : OPTIONAL IfcWorkCalendarTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcWorkCalendarTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcWorkCalendarTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcWorkControl\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcWorkPlan\n    ,IfcWorkSchedule))\n SUBTYPE OF (IfcControl);\n\tCreationDate : IfcDateTime;\n\tCreators : OPTIONAL SET [1:?] OF IfcPerson;\n\tPurpose : OPTIONAL IfcLabel;\n\tDuration : OPTIONAL IfcDuration;\n\tTotalFloat : OPTIONAL IfcDuration;\n\tStartTime : IfcDateTime;\n\tFinishTime : OPTIONAL IfcDateTime;\nEND_ENTITY;\n\nENTITY IfcWorkPlan\n SUBTYPE OF (IfcWorkControl);\n\tPredefinedType : OPTIONAL IfcWorkPlanTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcWorkPlanTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcWorkPlanTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcWorkSchedule\n SUBTYPE OF (IfcWorkControl);\n\tPredefinedType : OPTIONAL IfcWorkScheduleTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcWorkScheduleTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcWorkScheduleTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcWorkTime\n SUBTYPE OF (IfcSchedulingTime);\n\tRecurrencePattern : OPTIONAL IfcRecurrencePattern;\n\tStart : OPTIONAL IfcDate;\n\tFinish : OPTIONAL IfcDate;\nEND_ENTITY;\n\nENTITY IfcZShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n WHERE\n\tValidFlangeThickness : FlangeThickness < (Depth / 2.);\nEND_ENTITY;\n\nENTITY IfcZone\n SUBTYPE OF (IfcSystem);\n\tLongName : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : (SIZEOF(SELF\\IfcGroup.IsGroupedBy) = 0) OR\n\t(SIZEOF (QUERY (temp <* SELF\\IfcGroup.IsGroupedBy[1].RelatedObjects |  \n\t\tNOT(('IFC4.IFCZONE' IN TYPEOF(temp)) OR \n\t\t('IFC4.IFCSPACE' IN TYPEOF(temp)) OR\n\t\t('IFC4.IFCSPATIALZONE' IN TYPEOF(temp))\n\t))) = 0);\nEND_ENTITY;\n\nFUNCTION IfcAssociatedSurface\n(Arg : IfcPcurve) : IfcSurface;\n\n   LOCAL\n     Surf : IfcSurface;\n   END_LOCAL;\n   \n   Surf := Arg\\IfcPcurve.BasisSurface;\n   \n   RETURN(Surf);\nEND_FUNCTION;\n\nFUNCTION IfcBaseAxis\n(Dim : INTEGER; \n   Axis1, Axis2, Axis3 : IfcDirection) \n    : LIST [2:3] OF IfcDirection;\n\nLOCAL\n  U : LIST [2:3] OF IfcDirection;\n  Factor : REAL;\n  D1, D2 : IfcDirection;\nEND_LOCAL;\n\n  IF (Dim = 3) THEN \n    D1 := NVL(IfcNormalise(Axis3), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n    D2 := IfcFirstProjAxis(D1, Axis1);\n    U  := [D2, IfcSecondProjAxis(D1, D2, Axis2), D1];\n  ELSE\n    IF EXISTS(Axis1) THEN\n      D1 := IfcNormalise(Axis1);\n      U  := [D1, IfcOrthogonalComplement(D1)];\n      IF EXISTS(Axis2) THEN\n        Factor := IfcDotProduct(Axis2, U[2]);\n        IF (Factor < 0.0) THEN\n          U[2].DirectionRatios[1] := -U[2].DirectionRatios[1];\n          U[2].DirectionRatios[2] := -U[2].DirectionRatios[2];\n        END_IF;\n      END_IF;\n    ELSE\n      IF EXISTS(Axis2) THEN\n        D1 := IfcNormalise(Axis2);\n        U  := [IfcOrthogonalComplement(D1), D1];\n        U[1].DirectionRatios[1] := -U[1].DirectionRatios[1];\n        U[1].DirectionRatios[2] := -U[1].DirectionRatios[2];\n        ELSE\n          U := [IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0, 0.0]), \n                IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0, 1.0])];\n      END_IF;\n    END_IF;\n  END_IF;\n  RETURN(U);\nEND_FUNCTION;\n\nFUNCTION IfcBooleanChoose\n(B : BOOLEAN ;\n     Choice1, Choice2 : GENERIC : Item) : GENERIC : Item;\n  IF B THEN\n     RETURN (Choice1);\n  ELSE\n     RETURN (Choice2);\n  END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcBuild2Axes\n(RefDirection : IfcDirection)\n    : LIST [2:2] OF IfcDirection;\nLOCAL\n  D : IfcDirection := NVL(IfcNormalise(RefDirection),\n      IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0]));\nEND_LOCAL;\n  RETURN([D, IfcOrthogonalComplement(D)]);\nEND_FUNCTION;\n\nFUNCTION IfcBuildAxes\n(Axis, RefDirection : IfcDirection) \n    : LIST [3:3] OF IfcDirection;\nLOCAL\n  D1, D2 : IfcDirection;\nEND_LOCAL;\n  D1 := NVL(IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n  D2 := IfcFirstProjAxis(D1, RefDirection);\n  RETURN ([D2, IfcNormalise(IfcCrossProduct(D1,D2))\\IfcVector.Orientation, D1]);\nEND_FUNCTION;\n\nFUNCTION IfcConsecutiveSegments\n(Segments : LIST [1:?] OF IfcSegmentIndexSelect)\n  : BOOLEAN;\n\n LOCAL\n  Result : BOOLEAN := TRUE;\n END_LOCAL;\n\n  REPEAT i := 1 TO (HIINDEX(Segments)-1);\n    IF Segments[i][HIINDEX(Segments[i])] <> Segments[i+1][1] THEN\n      BEGIN\n        Result := FALSE;\n        ESCAPE;\n      END;\n\tEND_IF;\n  END_REPEAT;\n\n  RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcConstraintsParamBSpline\n( Degree, UpKnots, UpCp : INTEGER;\n  KnotMult : LIST OF INTEGER;\n  Knots : LIST OF IfcParameterValue ) \n: BOOLEAN;\n\n\n  LOCAL\n    Result : BOOLEAN := TRUE;\n    K, Sum : INTEGER;\n  END_LOCAL;\n\n  (* Find sum of knot multiplicities. *)\n  Sum := KnotMult[1];\n  REPEAT i := 2 TO UpKnots;\n    Sum := Sum + KnotMult[i];\n  END_REPEAT;\n\n  (* Check limits holding for all B-spline parametrisations *)\n  IF (Degree < 1) OR (UpKnots < 2) OR (UpCp < Degree) OR\n    (Sum <> (Degree + UpCp + 2)) THEN\n    Result := FALSE;\n    RETURN(Result);\n  END_IF;\n\n  K := KnotMult[1];\n  IF (K < 1) OR (K > Degree + 1) THEN\n    Result := FALSE;\n    RETURN(Result);\n  END_IF;\n\n  REPEAT i := 2 TO UpKnots;\n    IF (KnotMult[i] < 1) OR (Knots[i] <= Knots[i-1]) THEN\n      Result := FALSE;\n      RETURN(Result);\n    END_IF;\n    K := KnotMult[i];\n    IF (i < UpKnots) AND (K > Degree) THEN\n      Result := FALSE;\n      RETURN(Result);\n    END_IF;\n    IF (i = UpKnots) AND (K > Degree + 1) THEN\n      Result := FALSE;\n      RETURN(Result);\n    END_IF;\n  END_REPEAT;\n\n  RETURN(result);\nEND_FUNCTION;\n\nFUNCTION IfcConvertDirectionInto2D\n(Direction : IfcDirection)\n    : IfcDirection;\n\t\n  LOCAL\n    Direction2D : IfcDirection := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.,1.]);\n  END_LOCAL;\n  \n  Direction2D.DirectionRatios[1] := Direction.DirectionRatios[1];\n  Direction2D.DirectionRatios[2] := Direction.DirectionRatios[2];\n  \n  RETURN (Direction2D);\nEND_FUNCTION;\n\nFUNCTION IfcCorrectDimensions\n(m   : IfcUnitEnum; Dim : IfcDimensionalExponents) : LOGICAL;  \nCASE m OF\n  LENGTHUNIT : IF\n    Dim = (IfcDimensionalExponents (1, 0, 0, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  MASSUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 1, 0, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  TIMEUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 1, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ELECTRICCURRENTUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 1, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  THERMODYNAMICTEMPERATUREUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 1, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  AMOUNTOFSUBSTANCEUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 1, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  LUMINOUSINTENSITYUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  PLANEANGLEUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  SOLIDANGLEUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  AREAUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 0, 0, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  VOLUMEUNIT : IF\n    Dim = (IfcDimensionalExponents (3, 0, 0, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n\n  ABSORBEDDOSEUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  RADIOACTIVITYUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ELECTRICCAPACITANCEUNIT : IF\n    Dim = (IfcDimensionalExponents (-2, -1, 4, 2, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  DOSEEQUIVALENTUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ELECTRICCHARGEUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 1, 1, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ELECTRICCONDUCTANCEUNIT : IF\n    Dim = (IfcDimensionalExponents (-2, -1, 3, 2, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ELECTRICVOLTAGEUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 1, -3, -1, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ELECTRICRESISTANCEUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 1, -3, -2, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ENERGYUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 1, -2, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  FORCEUNIT : IF\n    Dim = (IfcDimensionalExponents (1, 1, -2, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  FREQUENCYUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  INDUCTANCEUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 1, -2, -2, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ILLUMINANCEUNIT : IF\n    Dim = (IfcDimensionalExponents (-2, 0, 0, 0, 0, 0, 1))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  LUMINOUSFLUXUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  MAGNETICFLUXUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 1, -2, -1, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  MAGNETICFLUXDENSITYUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 1, -2, -1, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  POWERUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 1, -3, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  PRESSUREUNIT : IF\n    Dim = (IfcDimensionalExponents (-1, 1, -2, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n\n  OTHERWISE :\n    RETURN (UNKNOWN);\nEND_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcCorrectFillAreaStyle\n(Styles : SET[1:?] OF IfcFillStyleSelect)\n  :LOGICAL;\n\nLOCAL\n   Hatching : INTEGER := 0;\n   Tiles    : INTEGER := 0;\n   Colour   : INTEGER := 0;\n   External : INTEGER := 0;\nEND_LOCAL;\n\n\nExternal := SIZEOF(QUERY(Style <* Styles |\n  'IFC4.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN\n   TYPEOF(Style)));\n\nHatching  := SIZEOF(QUERY(Style <* Styles |\n  'IFC4.IFCFILLAREASTYLEHATCHING' IN\n   TYPEOF(Style)));\n\nTiles     := SIZEOF(QUERY(Style <* Styles |\n  'IFC4.IFCFILLAREASTYLETILES' IN\n   TYPEOF(Style)));\n\nColour    := SIZEOF(QUERY(Style <* Styles |\n  'IFC4.IFCCOLOUR' IN\n   TYPEOF(Style)));\n\n\nIF (External > 1) THEN\n  RETURN (FALSE);\nEND_IF;\n\n\nIF ((External = 1) AND ((Hatching > 0) OR (Tiles > 0) OR (Colour > 0))) THEN\n  RETURN (FALSE);\nEND_IF;\n\n\nIF (Colour > 1) THEN\n  RETURN (FALSE);\nEND_IF;\n\nIF ((Hatching > 0) AND (Tiles >0)) THEN\n  RETURN (FALSE);\nEND_IF;\n\nRETURN(TRUE);\nEND_FUNCTION;\n\nFUNCTION IfcCorrectLocalPlacement\n(AxisPlacement:IfcAxis2Placement; \n   RelPlacement : IfcObjectPlacement):LOGICAL;\n\n  IF (EXISTS(RelPlacement)) THEN\n    IF ('IFC4.IFCGRIDPLACEMENT' IN TYPEOF(RelPlacement)) THEN\n      RETURN(?);\n    END_IF;\n    IF ('IFC4.IFCLOCALPLACEMENT' IN TYPEOF(RelPlacement)) THEN\n      IF ('IFC4.IFCAXIS2PLACEMENT2D' IN TYPEOF(AxisPlacement)) THEN\n        RETURN(TRUE);\n      END_IF;\n      IF ('IFC4.IFCAXIS2PLACEMENT3D' IN TYPEOF(AxisPlacement)) THEN\n        IF (RelPlacement\\IfcLocalPlacement.RelativePlacement.Dim = 3) THEN\n          RETURN(TRUE);\n        ELSE\n          RETURN(FALSE);\n        END_IF;\n      END_IF;\n    END_IF;\n  ELSE\n    RETURN(TRUE);  \n  END_IF;\n  RETURN(?);\nEND_FUNCTION;\n\nFUNCTION IfcCorrectObjectAssignment\n(Constraint: IfcObjectTypeEnum; Objects : SET[1:?] OF IfcObjectDefinition)\n  : LOGICAL ;\n  \nLOCAL\n  Count : INTEGER := 0;\nEND_LOCAL;\n\n    IF NOT(EXISTS(Constraint)) THEN \n      RETURN(TRUE);\n    END_IF;\n  \n    CASE Constraint OF\n      IfcObjectTypeEnum.NOTDEFINED : RETURN(TRUE);\n      IfcObjectTypeEnum.PRODUCT :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCPRODUCT' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.PROCESS :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCPROCESS' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.CONTROL :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCCONTROL' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.RESOURCE :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCRESOURCE' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.ACTOR :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCACTOR' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.GROUP :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCGROUP' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.PROJECT :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCPROJECT' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      OTHERWISE : RETURN(?);\n    END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcCorrectUnitAssignment\n(Units : SET [1:?] OF IfcUnit)\n   : LOGICAL;\n\n  LOCAL\n    NamedUnitNumber    : INTEGER := 0;\n    DerivedUnitNumber  : INTEGER := 0;\n    MonetaryUnitNumber : INTEGER := 0;\n    NamedUnitNames     : SET OF IfcUnitEnum := [];\n    DerivedUnitNames   : SET OF IfcDerivedUnitEnum := [];\n  END_LOCAL;\n\n  NamedUnitNumber    := SIZEOF(QUERY(temp <* Units | ('IFC4.IFCNAMEDUNIT' IN TYPEOF(temp)) AND NOT(temp\\IfcNamedUnit.UnitType = IfcUnitEnum.USERDEFINED)));\n  DerivedUnitNumber  := SIZEOF(QUERY(temp <* Units | ('IFC4.IFCDERIVEDUNIT' IN TYPEOF(temp)) AND NOT(temp\\IfcDerivedUnit.UnitType = IfcDerivedUnitEnum.USERDEFINED)));\n  MonetaryUnitNumber := SIZEOF(QUERY(temp <* Units |  'IFC4.IFCMONETARYUNIT' IN TYPEOF(temp)));\n\n  REPEAT i := 1 TO SIZEOF(Units);\n    IF (('IFC4.IFCNAMEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i]\\IfcNamedUnit.UnitType = IfcUnitEnum.USERDEFINED)) THEN\n        NamedUnitNames := NamedUnitNames + Units[i]\\IfcNamedUnit.UnitType;\n    END_IF;\n    IF (('IFC4.IFCDERIVEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i]\\IfcDerivedUnit.UnitType = IfcDerivedUnitEnum.USERDEFINED)) THEN\n        DerivedUnitNames := DerivedUnitNames + Units[i]\\IfcDerivedUnit.UnitType;\n    END_IF;\n  END_REPEAT;\n\n  RETURN((SIZEOF(NamedUnitNames) = NamedUnitNumber) AND (SIZEOF(DerivedUnitNames) = DerivedUnitNumber) AND (MonetaryUnitNumber <= 1));\nEND_FUNCTION;\n\nFUNCTION IfcCrossProduct\n(Arg1, Arg2 : IfcDirection) \n    : IfcVector;\nLOCAL\n  Mag : REAL;\n  Res : IfcDirection;\n  V1,V2  : LIST[3:3] OF REAL;\n  Result : IfcVector;\nEND_LOCAL;\n\n  IF (NOT EXISTS (Arg1) OR (Arg1.Dim = 2)) OR (NOT EXISTS (Arg2) OR (Arg2.Dim = 2)) THEN\n    RETURN(?);\n  ELSE\n    BEGIN\n      V1  := IfcNormalise(Arg1)\\IfcDirection.DirectionRatios;\n\n      V2  := IfcNormalise(Arg2)\\IfcDirection.DirectionRatios;\n      Res := IfcRepresentationItem() || IfcGeometricRepresentationItem () \n             || IfcDirection([(V1[2]*V2[3] - V1[3]*V2[2]), (V1[3]*V2[1] - V1[1]*V2[3]), (V1[1]*V2[2] - V1[2]*V2[1])]);\n      Mag := 0.0;\n      REPEAT i := 1 TO 3;\n        Mag := Mag + Res.DirectionRatios[i]*Res.DirectionRatios[i];\n      END_REPEAT;\n      IF (Mag > 0.0) THEN\n        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Res, SQRT(Mag));\n      ELSE\n        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Arg1, 0.0);\n      END_IF;\n      RETURN(Result);\n    END;\n  END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcCurveDim\n(Curve : IfcCurve)\n       : IfcDimensionCount;\n\n  IF ('IFC4.IFCLINE' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcLine.Pnt.Dim);\n  END_IF;\n  IF ('IFC4.IFCCONIC' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcConic.Position.Dim);\n  END_IF;\n  IF ('IFC4.IFCPOLYLINE' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcPolyline.Points[1].Dim);\n  END_IF;\n  IF ('IFC4.IFCTRIMMEDCURVE' IN TYPEOF(Curve))\n    THEN RETURN(IfcCurveDim(Curve\\IfcTrimmedCurve.BasisCurve));\n  END_IF;\n  IF ('IFC4.IFCCOMPOSITECURVE' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcCompositeCurve.Segments[1].Dim);\n  END_IF;\n  IF ('IFC4.IFCBSPLINECURVE' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcBSplineCurve.ControlPointsList[1].Dim);\n  END_IF;\n  IF ('IFC4.IFCOFFSETCURVE2D' IN TYPEOF(Curve))\n    THEN RETURN(2); \n  END_IF;\n  IF ('IFC4.IFCOFFSETCURVE3D' IN TYPEOF(Curve))\n    THEN RETURN(3);\n  END_IF;\n  IF ('IFC4.IFCPCURVE' IN TYPEOF(Curve))\n    THEN RETURN(3);\n  END_IF;\n  IF ('IFC4.IFCINDEXEDPOLYCURVE' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcIndexedPolyCurve.Points.Dim);\n  END_IF;\nRETURN (?);\nEND_FUNCTION;\n\nFUNCTION IfcCurveWeightsPositive\n( B: IfcRationalBSplineCurveWithKnots)\n: BOOLEAN;\n\n  LOCAL\n    Result : BOOLEAN := TRUE;\n  END_LOCAL;\n\n  REPEAT i := 0 TO B.UpperIndexOnControlPoints;\n    IF B.Weights[i] <= 0.0  THEN\n      Result := FALSE;\n      RETURN(Result);\n    END_IF;\n  END_REPEAT;\n  RETURN(Result);\nEND_FUNCTION;\n\nFUNCTION IfcDeriveDimensionalExponents\n(UnitElements : SET [1:?] OF IfcDerivedUnitElement)\n    : IfcDimensionalExponents;  \n    LOCAL\n    Result : IfcDimensionalExponents :=\n            IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 0);  \n    END_LOCAL;\n    REPEAT i := LOINDEX(UnitElements) TO HIINDEX(UnitElements);\n        Result.LengthExponent := Result.LengthExponent +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.LengthExponent);\n        Result.MassExponent := Result.MassExponent  +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.MassExponent);\n        Result.TimeExponent := Result.TimeExponent +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.TimeExponent);\n        Result.ElectricCurrentExponent := Result.ElectricCurrentExponent +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.ElectricCurrentExponent);\n        Result.ThermodynamicTemperatureExponent := Result.ThermodynamicTemperatureExponent +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.ThermodynamicTemperatureExponent);\n        Result.AmountOfSubstanceExponent := Result.AmountOfSubstanceExponent +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.AmountOfSubstanceExponent);\n        Result.LuminousIntensityExponent := Result.LuminousIntensityExponent +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.LuminousIntensityExponent);\n    END_REPEAT;  \n    RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcDimensionsForSiUnit\n(n : IfcSiUnitName )     : IfcDimensionalExponents;\n  CASE n OF\n    METRE          : RETURN (IfcDimensionalExponents\n                             (1, 0, 0, 0, 0, 0, 0));\n    SQUARE_METRE   : RETURN (IfcDimensionalExponents\n                             (2, 0, 0, 0, 0, 0, 0));\n    CUBIC_METRE    : RETURN (IfcDimensionalExponents\n                             (3, 0, 0, 0, 0, 0, 0));\n    GRAM           : RETURN (IfcDimensionalExponents\n                             (0, 1, 0, 0, 0, 0, 0));\n    SECOND         : RETURN (IfcDimensionalExponents\n                             (0, 0, 1, 0, 0, 0, 0));\n    AMPERE         : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 1, 0, 0, 0));\n    KELVIN         : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 1, 0, 0));\n    MOLE           : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 0, 1, 0));\n    CANDELA        : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 0, 0, 1));\n    RADIAN         : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 0, 0, 0));\n    STERADIAN      : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 0, 0, 0));\n    HERTZ          : RETURN (IfcDimensionalExponents\n                             (0, 0, -1, 0, 0, 0, 0));\n    NEWTON         : RETURN (IfcDimensionalExponents\n                             (1, 1, -2, 0, 0, 0, 0));\n    PASCAL         : RETURN (IfcDimensionalExponents\n                             (-1, 1, -2, 0, 0, 0, 0));\n    JOULE          : RETURN (IfcDimensionalExponents\n                             (2, 1, -2, 0, 0, 0, 0));\n    WATT           : RETURN (IfcDimensionalExponents\n                             (2, 1, -3, 0, 0, 0, 0));\n    COULOMB        : RETURN (IfcDimensionalExponents\n                             (0, 0, 1, 1, 0, 0, 0));\n    VOLT           : RETURN (IfcDimensionalExponents\n                             (2, 1, -3, -1, 0, 0, 0));\n    FARAD          : RETURN (IfcDimensionalExponents\n                             (-2, -1, 4, 2, 0, 0, 0));\n    OHM            : RETURN (IfcDimensionalExponents\n                             (2, 1, -3, -2, 0, 0, 0));\n    SIEMENS        : RETURN (IfcDimensionalExponents\n                             (-2, -1, 3, 2, 0, 0, 0));\n    WEBER          : RETURN (IfcDimensionalExponents\n                             (2, 1, -2, -1, 0, 0, 0));\n    TESLA          : RETURN (IfcDimensionalExponents\n                             (0, 1, -2, -1, 0, 0, 0));\n    HENRY          : RETURN (IfcDimensionalExponents\n                             (2, 1, -2, -2, 0, 0, 0));\n    DEGREE_CELSIUS : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 1, 0, 0));\n    LUMEN          : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 0, 0, 1));\n    LUX            : RETURN (IfcDimensionalExponents\n                             (-2, 0, 0, 0, 0, 0, 1));\n    BECQUEREL      : RETURN (IfcDimensionalExponents\n                             (0, 0, -1, 0, 0, 0, 0));\n    GRAY           : RETURN (IfcDimensionalExponents\n                             (2, 0, -2, 0, 0, 0, 0));\n    SIEVERT        : RETURN (IfcDimensionalExponents\n                             (2, 0, -2, 0, 0, 0, 0));\n    OTHERWISE      : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 0, 0, 0));\n  END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcDotProduct\n(Arg1, Arg2 : IfcDirection) \n    : REAL;\nLOCAL\n  Scalar : REAL;\n  Vec1, Vec2 : IfcDirection;\n  Ndim   : INTEGER;\nEND_LOCAL;\n\n  IF NOT EXISTS (Arg1) OR NOT EXISTS (Arg2) THEN\n    Scalar := ?;\n  ELSE\n    IF (Arg1.Dim <> Arg2.Dim) THEN\n      Scalar := ?;\n    ELSE\n      BEGIN\n        Vec1 := IfcNormalise(Arg1);\n        Vec2 := IfcNormalise(Arg2);\n        Ndim := Arg1.Dim;\n        Scalar := 0.0;\n        REPEAT i := 1 TO Ndim;\n          Scalar := Scalar + Vec1.DirectionRatios[i]*Vec2.DirectionRatios[i];\n        END_REPEAT;\n      END;\n    END_IF;\n  END_IF;\n  RETURN (Scalar);\nEND_FUNCTION;\n\nFUNCTION IfcFirstProjAxis\n(ZAxis, Arg : IfcDirection) : IfcDirection;\nLOCAL\n  XAxis : IfcDirection;\n  V     : IfcDirection;\n  Z     : IfcDirection;\n  XVec  : IfcVector;\nEND_LOCAL;\n\n  IF (NOT EXISTS(ZAxis)) THEN\n    RETURN (?) ;\n  ELSE\n    Z := IfcNormalise(ZAxis);\n    IF NOT EXISTS(Arg) THEN\n      IF (Z.DirectionRatios <> [1.0,0.0,0.0]) THEN\n        V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0,0.0]);\n      ELSE\n        V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]);\n      END_IF;\n    ELSE\n      IF (Arg.Dim <> 3) THEN\n        RETURN (?) ;\n      END_IF;\n      IF ((IfcCrossProduct(Arg,Z).Magnitude) = 0.0) THEN\n        RETURN (?);\n      ELSE\n        V := IfcNormalise(Arg);\n      END_IF;\n    END_IF;\n    XVec  := IfcScalarTimesVector(IfcDotProduct(V, Z), Z);\n    XAxis := IfcVectorDifference(V, XVec).Orientation;\n    XAxis := IfcNormalise(XAxis);\n  END_IF;\n  RETURN(XAxis);\nEND_FUNCTION;\n\nFUNCTION IfcGetBasisSurface\n(C : IfcCurveOnSurface) : SET[0:2] OF IfcSurface;\n\n  LOCAL\n    Surfs : SET[0:2] OF IfcSurface;\n    N : INTEGER;\n  END_LOCAL;\n\n  Surfs := [];\n  IF 'IFC4.IFCPCURVE' IN TYPEOF (C) THEN\n    Surfs := [C\\IfcPCurve.BasisSurface];\n  ELSE\n    IF 'IFC4.IFCSURFACECURVE' IN TYPEOF (C) THEN\n      N := SIZEOF(C\\IfcSurfaceCurve.AssociatedGeometry);\n      REPEAT i := 1 TO N;\n      Surfs := Surfs + IfcAssociatedSurface(C\\IfcSurfaceCurve.AssociatedGeometry[i]);\n      END_REPEAT;\n    END_IF;\n  END_IF;\n  IF 'IFC4.IFCCOMPOSITECURVEONSURFACE' IN TYPEOF (C) THEN\n\n    (* For an IfcCompositeCurveOnSurface the BasisSurface is the intersection of the BasisSurface of all the segments. *)\n\n    N := SIZEOF(C\\IfcCompositeCurve.Segments);\n    Surfs := IfcGetBasisSurface(C\\IfcCompositeCurve.Segments[1].ParentCurve);\n    IF N > 1 THEN\n      REPEAT i := 2 TO N;\n        Surfs := Surfs * IfcGetBasisSurface(C\\IfcCompositeCurve.Segments[1].ParentCurve);\n      END_REPEAT;\n    END_IF;\n  END_IF;\n  RETURN(Surfs);\nEND_FUNCTION;\n\nFUNCTION IfcListToArray\n(Lis : LIST [0:?] OF GENERIC : T;\n       Low,U : INTEGER) : ARRAY OF GENERIC : T;\n   LOCAL\n     N   : INTEGER;\n     Res : ARRAY [Low:U] OF GENERIC : T;\n   END_LOCAL;\n      \n   N := SIZEOF(Lis);\n   IF (N <> (U-Low +1)) THEN\n     RETURN(?);\n   ELSE\n     Res := [Lis[1] : N];\n     REPEAT i := 2 TO N;\n       Res[Low+i-1] := Lis[i];\n     END_REPEAT;\n     RETURN(Res);\n   END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcLoopHeadToTail\n(ALoop : IfcEdgeLoop) : LOGICAL;\n   LOCAL\n     N : INTEGER;\n     P : LOGICAL := TRUE;\n   END_LOCAL;\n     \n     N := SIZEOF (ALoop.EdgeList);\n     REPEAT i := 2 TO N;\n       P := P AND (ALoop.EdgeList[i-1].EdgeEnd :=:\n                   ALoop.EdgeList[i].EdgeStart);\n     END_REPEAT;     \n     RETURN (P);\nEND_FUNCTION;\n\nFUNCTION IfcMakeArrayOfArray\n(Lis : LIST[1:?] OF LIST [1:?] OF GENERIC : T;\n Low1, U1, Low2, U2 : INTEGER):\nARRAY [Low1:U1] OF ARRAY [Low2:U2] OF GENERIC : T;\n\n  LOCAL\n    Res : ARRAY[Low1:U1] OF ARRAY [Low2:U2] OF GENERIC : T;\n  END_LOCAL;\n\n  (* Check input dimensions for consistency *)\n  IF (U1-Low1+1) <> SIZEOF(Lis) THEN\n    RETURN (?);\n  END_IF;\n  IF (U2 - Low2 + 1 ) <> SIZEOF(Lis[1]) THEN\n    RETURN (?) ;\n  END_IF;\n\n  (* Initialise Res with values from Lis[1] *)\n  Res := [IfcListToArray(Lis[1], Low2, U2) : (U1-Low1 + 1)];\n  REPEAT i := 2 TO HIINDEX(Lis);\n    IF (U2-Low2+1) <> SIZEOF(Lis[i]) THEN\n      RETURN (?);\n    END_IF;\n    Res[Low1+i-1] := IfcListToArray(Lis[i], Low2, U2);\n  END_REPEAT;\n  RETURN (Res);\nEND_FUNCTION;\n\nFUNCTION IfcMlsTotalThickness\n(LayerSet : IfcMaterialLayerSet) : IfcLengthMeasure;\n  LOCAL\n    Max : IfcLengthMeasure := LayerSet.MaterialLayers[1].LayerThickness;    \n  END_LOCAL;\n\n  IF SIZEOF(LayerSet.MaterialLayers) > 1 THEN\n    REPEAT i := 2 TO HIINDEX(LayerSet.MaterialLayers);\n       Max := Max + LayerSet.MaterialLayers[i].LayerThickness;\n    END_REPEAT;\n  END_IF;\n  RETURN (Max);\nEND_FUNCTION;\n\nFUNCTION IfcNormalise\n(Arg : IfcVectorOrDirection) \n    : IfcVectorOrDirection;\nLOCAL\n  Ndim : INTEGER;\n  V    : IfcDirection\n         := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]); \n  Vec  : IfcVector \n         := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (\n            IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]), 1.);\n  Mag  : REAL;\n  Result : IfcVectorOrDirection\n         := V;\nEND_LOCAL;\n\n  IF NOT EXISTS (Arg) THEN\n    RETURN (?);\n  ELSE\n    IF 'IFC4.IFCVECTOR' IN TYPEOF(Arg) THEN\n      BEGIN\n        Ndim := Arg\\IfcVector.Dim;\n\tV.DirectionRatios := Arg\\IfcVector.Orientation.DirectionRatios;\n        Vec.Magnitude := Arg\\IfcVector.Magnitude;\n\tVec.Orientation := V;\n        IF Arg\\IfcVector.Magnitude = 0.0 THEN\n          RETURN(?);\n        ELSE\n          Vec.Magnitude := 1.0;\n        END_IF;\n      END;\n    ELSE\n      BEGIN\n        Ndim := Arg\\IfcDirection.Dim;\n        V.DirectionRatios := Arg\\IfcDirection.DirectionRatios;\n      END;\n    END_IF;\n\n    Mag := 0.0;\n      REPEAT i := 1 TO Ndim;\n        Mag := Mag + V.DirectionRatios[i]*V.DirectionRatios[i];\n      END_REPEAT;\n    IF Mag > 0.0 THEN\n      Mag := SQRT(Mag);\n      REPEAT i := 1 TO Ndim;\n        V.DirectionRatios[i] := V.DirectionRatios[i]/Mag;\n      END_REPEAT;\n      IF 'IFC4.IFCVECTOR' IN TYPEOF(arg) THEN\n        Vec.Orientation := V;\n        Result := Vec;\n      ELSE\n        Result := V;\n      END_IF;\n    ELSE\n      RETURN(?);\n    END_IF;\n  END_IF;\n  RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcOrthogonalComplement\n(Vec : IfcDirection) \n    : IfcDirection;\nLOCAL\n  Result : IfcDirection ;\nEND_LOCAL;\n  IF NOT EXISTS (Vec) OR (Vec.Dim <> 2) THEN\n    RETURN(?);\n  ELSE\n    Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([-Vec.DirectionRatios[2], Vec.DirectionRatios[1]]);\n    RETURN(Result);\n  END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcPathHeadToTail\n(APath : IfcPath) : LOGICAL;\n   LOCAL\n     N : INTEGER := 0;\n     P : LOGICAL := UNKNOWN;\n   END_LOCAL;\n     N := SIZEOF (APath.EdgeList);\n   REPEAT i := 2 TO N;\n      P := P AND (APath.EdgeList[i-1].EdgeEnd :=:\n                  APath.EdgeList[i].EdgeStart);\n   END_REPEAT;\n   RETURN (P);\nEND_FUNCTION;\n\nFUNCTION IfcPointListDim\n(PointList : IfcCartesianPointList)\n           : IfcDimensionCount;\n\n  IF ('IFC4.IFCCARTESIANPOINTLIST2D' IN TYPEOF(PointList))\n    THEN RETURN(2);\n  END_IF;\t\t   \n  IF ('IFC4.IFCCARTESIANPOINTLIST3D' IN TYPEOF(PointList))\n    THEN RETURN(3);\n  END_IF;\t\t   \n  RETURN (?);\nEND_FUNCTION;\n\nFUNCTION IfcSameAxis2Placement\n(ap1, ap2 : IfcAxis2Placement; Epsilon : REAL)\n  : LOGICAL ;\n\n  RETURN (IfcSameDirection(ap1.P[1],ap2.P[1],Epsilon) AND\n          IfcSameDirection(ap1.P[2],ap2.P[2],Epsilon) AND\n          IfcSameCartesianPoint(ap1.Location,ap1.Location,Epsilon));\nEND_FUNCTION;\n\nFUNCTION IfcSameCartesianPoint\n(cp1, cp2 : IfcCartesianPoint; Epsilon : REAL)\n\t: LOGICAL;\n  \n  LOCAL\n    cp1x : REAL := cp1.Coordinates[1];\n    cp1y : REAL := cp1.Coordinates[2];\n    cp1z : REAL := 0;\n    cp2x : REAL := cp2.Coordinates[1];\n    cp2y : REAL := cp2.Coordinates[2];\n    cp2z : REAL := 0;\n  END_LOCAL;\n\n  IF (SIZEOF(cp1.Coordinates) > 2) THEN\n    cp1z := cp1.Coordinates[3];\n  END_IF;\n\n  IF (SIZEOF(cp2.Coordinates) > 2) THEN\n    cp2z := cp2.Coordinates[3];\n  END_IF;\n\n  RETURN (IfcSameValue(cp1x,cp2x,Epsilon) AND\n          IfcSameValue(cp1y,cp2y,Epsilon) AND\n          IfcSameValue(cp1z,cp2z,Epsilon));\nEND_FUNCTION;\n\nFUNCTION IfcSameDirection\n(dir1, dir2 : IfcDirection; Epsilon : REAL)\n\t: LOGICAL;\n  LOCAL\n    dir1x : REAL := dir1.DirectionRatios[1];\n    dir1y : REAL := dir1.DirectionRatios[2];\n    dir1z : REAL := 0;\n    dir2x : REAL := dir2.DirectionRatios[1];\n    dir2y : REAL := dir2.DirectionRatios[2];\n    dir2z : REAL := 0;\n  END_LOCAL;\n\n  IF (SIZEOF(dir1.DirectionRatios) > 2) THEN\n    dir1z := dir1.DirectionRatios[3];\n  END_IF;\n\n  IF (SIZEOF(dir2.DirectionRatios) > 2) THEN\n    dir2z := dir2.DirectionRatios[3];\n  END_IF;\n  \n  RETURN (IfcSameValue(dir1x,dir2x,Epsilon) AND\n          IfcSameValue(dir1y,dir2y,Epsilon) AND\n          IfcSameValue(dir1z,dir2z,Epsilon));\nEND_FUNCTION;\n\nFUNCTION IfcSameValidPrecision\n(Epsilon1, Epsilon2 : REAL) : LOGICAL ;\n  LOCAL\n    ValidEps1, ValidEps2 : REAL;\n    DefaultEps           : REAL := 0.000001;\n    DerivationOfEps      : REAL := 1.001;\n    UpperEps             : REAL := 1.0;\n  END_LOCAL;\n  \n    ValidEps1 := NVL(Epsilon1, DefaultEps);\n    ValidEps2 := NVL(Epsilon2, DefaultEps);\n    RETURN ((0.0 < ValidEps1) AND (ValidEps1 <= (DerivationOfEps * ValidEps2)) AND \n            (ValidEps2 <= (DerivationOfEps * ValidEps1)) AND (ValidEps2 < UpperEps));\nEND_FUNCTION;\n\nFUNCTION IfcSameValue\n(Value1, Value2 : REAL; Epsilon : REAL)\n\t: LOGICAL;\n  LOCAL\n    ValidEps    : REAL;\n    DefaultEps  : REAL := 0.000001;\n  END_LOCAL;\n  \n  ValidEps := NVL(Epsilon, DefaultEps);\n  RETURN ((Value1 + ValidEps > Value2) AND (Value1 < Value2 + ValidEps));\nEND_FUNCTION;\n\nFUNCTION IfcScalarTimesVector\n(Scalar : REAL; Vec : IfcVectorOrDirection)\n    : IfcVector;\nLOCAL\n  V : IfcDirection;\n  Mag : REAL;\n  Result : IfcVector;\nEND_LOCAL;\n\n  IF NOT EXISTS (Scalar) OR NOT EXISTS (Vec) THEN\n    RETURN (?) ;\n  ELSE\n    IF 'IFC4.IFCVECTOR' IN TYPEOF (Vec) THEN\n      V := Vec\\IfcVector.Orientation;\n      Mag := Scalar * Vec\\IfcVector.Magnitude;\n    ELSE\n      V := Vec;\n      Mag := Scalar;\n    END_IF;\n    IF (Mag < 0.0 ) THEN\n      REPEAT i := 1 TO SIZEOF(V.DirectionRatios);\n        V.DirectionRatios[i] := -V.DirectionRatios[i];\n      END_REPEAT;\n      Mag := -Mag;\n    END_IF;\n    Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(IfcNormalise(V), Mag);\n  END_IF;\n  RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcSecondProjAxis\n(ZAxis, XAxis, Arg: IfcDirection) \n    : IfcDirection;\nLOCAL\n  YAxis : IfcVector;\n  V     : IfcDirection;\n  Temp  : IfcVector;\nEND_LOCAL;\n\n  IF NOT EXISTS(Arg) THEN\n    V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]);\n  ELSE\n    V := Arg;\n  END_IF;\n  Temp  := IfcScalarTimesVector(IfcDotProduct(V, ZAxis), ZAxis);\n  YAxis := IfcVectorDifference(V, Temp);\n  Temp  := IfcScalarTimesVector(IfcDotProduct(V, XAxis), XAxis);\n  YAxis := IfcVectorDifference(YAxis, Temp);\n  YAxis := IfcNormalise(YAxis);\n  RETURN(YAxis.Orientation);\nEND_FUNCTION;\n\nFUNCTION IfcShapeRepresentationTypes\n(RepType : IfcLabel; Items : SET OF IfcRepresentationItem) : LOGICAL;\n    \n    LOCAL\n      Count : INTEGER := 0;\n    END_LOCAL;\n\n    CASE RepType OF \n    'Point' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCPOINT' IN TYPEOF(temp))));\n      END;\n\n    'PointCloud' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCCARTESIANPOINTLIST3D' IN TYPEOF(temp))));\n      END;\n\n    'Curve' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCCURVE' IN TYPEOF(temp))));\n      END;\n\n    'Curve2D' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCCURVE' IN TYPEOF(temp)) \n                 AND (temp\\IfcCurve.Dim = 2)));\n      END;\n\n    'Curve3D' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCCURVE' IN TYPEOF(temp)) \n                 AND (temp\\IfcCurve.Dim = 3)));\n      END;\n\n    'Surface' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCSURFACE' IN TYPEOF(temp))));\n      END;\n\n    'Surface2D' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCSURFACE' IN TYPEOF(temp)) \n                 AND (temp\\IfcSurface.Dim = 2)));\n      END;\n\n    'Surface3D' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCSURFACE' IN TYPEOF(temp)) \n                 AND (temp\\IfcSurface.Dim = 3)));\n      END;\n\n    'FillArea' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCANNOTATIONFILLAREA' IN TYPEOF(temp))));\n      END;\n\n    'Text' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCTEXTLITERAL' IN TYPEOF(temp))));\n      END;\n\n    'AdvancedSurface' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | 'IFC4.IFCBSPLINESURFACE' IN TYPEOF(temp)));\n      END;\n\n    'Annotation2D' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | (\n                  SIZEOF(TYPEOF(temp) * [\n                   'IFC4.IFCPOINT',\n                   'IFC4.IFCCURVE',\n                   'IFC4.IFCGEOMETRICCURVESET',\n                   'IFC4.IFCANNOTATIONFILLAREA',\n                   'IFC4.IFCTEXTLITERAL']) = 1)\n                 ));\n      END;\n\n    'GeometricSet' : \n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCGEOMETRICSET' IN TYPEOF(temp))\n                 OR ('IFC4.IFCPOINT' IN TYPEOF(temp))\n                 OR ('IFC4.IFCCURVE' IN TYPEOF(temp))\n                 OR ('IFC4.IFCSURFACE' IN TYPEOF(temp))));\n      END;\n\n    'GeometricCurveSet' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCGEOMETRICCURVESET' IN TYPEOF(temp))\n                 OR ('IFC4.IFCGEOMETRICSET' IN TYPEOF(temp))\n                 OR ('IFC4.IFCPOINT' IN TYPEOF(temp))\n                 OR ('IFC4.IFCCURVE' IN TYPEOF(temp))));\n         REPEAT i:=1 TO HIINDEX(Items);  \n           IF ('IFC4.IFCGEOMETRICSET' IN TYPEOF(Items[i]))\n           THEN\n             IF (SIZEOF(QUERY(temp <* Items[i]\\IfcGeometricSet.Elements | 'IFC4.IFCSURFACE' IN TYPEOF(temp))) > 0)\n             THEN\n               Count := Count - 1;\n             END_IF;\n           END_IF;\n         END_REPEAT;\n      END;\n\n    'Tessellation' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | 'IFC4.IFCTESSELLATEDITEM' IN TYPEOF(temp)));\n      END;\n\n    'SurfaceOrSolidModel' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                   'IFC4.IFCTESSELLATEDITEM',\n                   'IFC4.IFCSHELLBASEDSURFACEMODEL',\n                   'IFC4.IFCFACEBASEDSURFACEMODEL',\n                   'IFC4.IFCSOLIDMODEL'] * TYPEOF(temp)) >= 1\n                 ));      \n      END;\n\n    'SurfaceModel' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                   'IFC4.IFCTESSELLATEDITEM',\n                   'IFC4.IFCSHELLBASEDSURFACEMODEL',\n                   'IFC4.IFCFACEBASEDSURFACEMODEL'] * TYPEOF(temp)) >= 1\n                 ));      \n      END;\n\n    'SolidModel' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCSOLIDMODEL' IN TYPEOF(temp))));            \n      END;\n\n    'SweptSolid' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | (SIZEOF([\n                   'IFC4.IFCEXTRUDEDAREASOLID',\n                   'IFC4.IFCREVOLVEDAREASOLID'] * TYPEOF(temp)) >= 1\n                   ) AND (SIZEOF([\n                   'IFC4.IFCEXTRUDEDAREASOLIDTAPERED',\n                   'IFC4.IFCREVOLVEDAREASOLIDTAPERED'] * TYPEOF(temp)) = 0\n                   )\n                 ));                             \n      END;\n\n    'AdvancedSweptSolid' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                   'IFC4.IFCSWEPTAREASOLID',\n                   'IFC4.IFCSWEPTDISKSOLID'] *  TYPEOF(temp)) >= 1\n                 ));      \n      END;\n\n    'CSG' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                   'IFC4.IFCBOOLEANRESULT',\n                   'IFC4.IFCCSGPRIMITIVE3D',\n                   'IFC4.IFCCSGSOLID'] *  TYPEOF(temp)) >= 1\n                 ));            \n      END;\n\n    'Clipping' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                   'IFC4.IFCCSGSOLID',\n                   'IFC4.IFCBOOLEANCLIPPINGRESULT'] * TYPEOF(temp)) >= 1\n                 )); \n      END;\n\n    'Brep' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCFACETEDBREP' IN TYPEOF(temp))));      \n      END;\n\n    'AdvancedBrep' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCMANIFOLDSOLIDBREP' IN TYPEOF(temp))));      \n      END;\n\n    'BoundingBox' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCBOUNDINGBOX' IN TYPEOF(temp))));\n        IF (SIZEOF(Items) > 1)\n        THEN\n          Count := 0;\n        END_IF;   \n      END;\n\n    'SectionedSpine' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCSECTIONEDSPINE' IN TYPEOF(temp))));      \n      END;\n\n    'LightSource' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCLIGHTSOURCE' IN TYPEOF(temp))));      \n      END;\n\n    'MappedRepresentation' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCMAPPEDITEM' IN TYPEOF(temp))));  \n      END;\n\n     OTHERWISE : RETURN(?);\n    END_CASE;\n    RETURN (Count = SIZEOF(Items));\nEND_FUNCTION;\n\nFUNCTION IfcSurfaceWeightsPositive\n( B: IfcRationalBSplineSurfaceWithKnots) \n: BOOLEAN;\n\n  LOCAL\n    Result : BOOLEAN := TRUE;\n    Weights : ARRAY [ 0 : B\\IfcBSplineSurface.UUpper ] OF ARRAY [ 0 : B\\IfcBSplineSurface.VUpper ] OF REAL := B.Weights;\n  END_LOCAL;\n\n  REPEAT i := 0 TO B\\IfcBSplineSurface.UUpper;\n    REPEAT j := 0 TO B\\IfcBSplineSurface.VUpper;\n      IF (Weights[i][j] <= 0.0) THEN\n        Result := FALSE;\n        RETURN(Result);\n      END_IF;\n    END_REPEAT;\n  END_REPEAT;\n  RETURN(Result);\nEND_FUNCTION;\n\nFUNCTION IfcTaperedSweptAreaProfiles\n(StartArea, EndArea : IfcProfileDef)\n : LOGICAL;\n\nLOCAL\n   Result : LOGICAL := FALSE;\nEND_LOCAL;\n   \nIF ('IFC4.IFCPARAMETERIZEDPROFILEDEF' IN TYPEOF(StartArea)) THEN\n   IF ('IFC4.IFCDERIVEDPROFILEDEF' IN TYPEOF(EndArea)) THEN\n      Result := (StartArea :=: EndArea\\IfcDerivedProfileDef.ParentProfile);\n   ELSE\n      Result := (TYPEOF(StartArea) = TYPEOF(EndArea));\n   END_IF;\nELSE\n   IF ('IFC4.IFCDERIVEDPROFILEDEF' IN TYPEOF(EndArea)) THEN\n      Result := (StartArea :=: EndArea\\IfcDerivedProfileDef.ParentProfile);\n   ELSE\n      Result := FALSE;\n   END_IF;\nEND_IF;\n\nRETURN(Result);\nEND_FUNCTION;\n\nFUNCTION IfcTopologyRepresentationTypes\n(RepType : IfcLabel; Items : SET OF IfcRepresentationItem) : LOGICAL;\n    \n    LOCAL\n      Count : INTEGER := 0;\n    END_LOCAL;\n\n    CASE RepType OF \n    'Vertex' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | \n                  ('IFC4.IFCVERTEX' IN TYPEOF(temp))));\n      END;\n    'Edge' : \n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | \n                  ('IFC4.IFCEDGE' IN TYPEOF(temp))));\n      END;\n    'Path' : \n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | \n                  ('IFC4.IFCPATH' IN TYPEOF(temp))));\n      END;\n    'Face' : \n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | \n                  ('IFC4.IFCFACE' IN TYPEOF(temp))));\n      END;\n    'Shell' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | \n                  ('IFC4.IFCOPENSHELL' IN TYPEOF(temp))\n                    OR ('IFC4.IFCCLOSEDSHELL' IN TYPEOF(temp))));\n      END;\n    'Undefined': RETURN(TRUE);\n     OTHERWISE : RETURN(?);\n    END_CASE;\n    RETURN (Count = SIZEOF(Items));\nEND_FUNCTION;\n\nFUNCTION IfcUniqueDefinitionNames\n(Relations : SET [1:?] OF IfcRelDefinesByProperties)\n:LOGICAL;\n\nLOCAL\n  Definition : IfcPropertySetDefinitionSelect;\n  DefinitionSet : IfcPropertySetDefinitionSet;\n  Properties : SET OF IfcPropertySetDefinition := [];\n  Result : LOGICAL;\nEND_LOCAL;\n\nIF SIZEOF(Relations) = 0 THEN\n  RETURN(TRUE);\nEND_IF;\n\nREPEAT i:=1 TO HIINDEX(Relations);\n  Definition := Relations[i].RelatingPropertyDefinition;\n  IF 'IFC4.IFCPROPERTYSETDEFINITION' IN TYPEOF(Definition) THEN\n    Properties := Properties + Definition;\n  ELSE \n    IF 'IFC4.IFCPROPERTYSETDEFINITIONSET' IN TYPEOF(Definition) THEN\n      BEGIN\n        DefinitionSet := Definition;\n        REPEAT j:= 1 TO HIINDEX(DefinitionSet);\n          Properties := Properties + DefinitionSet[j];\n        END_REPEAT;\n      END;\n\tEND_IF;\n  END_IF;\nEND_REPEAT;\n\nResult := IfcUniquePropertySetNames(Properties);\nRETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcUniquePropertyName\n(Properties : SET [1:?] OF IfcProperty)\n :LOGICAL;\n\n LOCAL\n   Names : SET OF IfcIdentifier := [];\n END_LOCAL;\n\n REPEAT i:=1 TO HIINDEX(Properties);\n   Names := Names + Properties[i].Name;\n END_REPEAT;\n\n RETURN (SIZEOF(Names) = SIZEOF(Properties));\nEND_FUNCTION;\n\nFUNCTION IfcUniquePropertySetNames\n(Properties : SET [1:?] OF IfcPropertySetDefinition)\n:LOGICAL;\n\nLOCAL\n  Names : SET OF IfcLabel := [];\n  Unnamed : INTEGER := 0;\nEND_LOCAL;\n\nREPEAT i:=1 TO HIINDEX(Properties);\n  IF 'IFC4.IFCPROPERTYSET' IN TYPEOF(Properties[i]) THEN\n    Names := Names + Properties[i]\\IfcRoot.Name;\n  ELSE\n    Unnamed := Unnamed + 1;\n  END_IF;\nEND_REPEAT;\n\nRETURN (SIZEOF(Names) + Unnamed = SIZEOF(Properties));\nEND_FUNCTION;\n\nFUNCTION IfcUniquePropertyTemplateNames\n(Properties : SET [1:?] OF IfcPropertyTemplate)\n:LOGICAL;\n\nLOCAL\n  Names : SET OF IfcLabel := [];\nEND_LOCAL;\n\nREPEAT i:=1 TO HIINDEX(Properties);\n  Names := Names + Properties[i].Name;\nEND_REPEAT;\nRETURN (SIZEOF(Names) = SIZEOF(Properties));\nEND_FUNCTION;\n\nFUNCTION IfcUniqueQuantityNames\n(Properties : SET [1:?] OF IfcPhysicalQuantity)\n:LOGICAL;\n\nLOCAL\n  Names : SET OF IfcLabel := [];\nEND_LOCAL;\n\nREPEAT i:=1 TO HIINDEX(Properties);\n  Names := Names + Properties[i].Name;\nEND_REPEAT;\nRETURN (SIZEOF(Names) = SIZEOF(Properties));\nEND_FUNCTION;\n\nFUNCTION IfcVectorDifference\n(Arg1, Arg2 : IfcVectorOrDirection)\n    : IfcVector;\nLOCAL\n  Result : IfcVector;\n  Res, Vec1, Vec2 : IfcDirection;\n  Mag, Mag1, Mag2 : REAL;\n  Ndim : INTEGER;\nEND_LOCAL;\n\n  IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN\n    RETURN (?) ;\n  ELSE\n    BEGIN\n      IF 'IFC4.IFCVECTOR' IN TYPEOF(Arg1) THEN\n        Mag1 := Arg1\\IfcVector.Magnitude;\n        Vec1 := Arg1\\IfcVector.Orientation;\n      ELSE\n        Mag1 := 1.0;\n        Vec1 := Arg1;\n      END_IF;\n      IF 'IFC4.IFCVECTOR' IN TYPEOF(Arg2) THEN\n        Mag2 := Arg2\\IfcVector.Magnitude;\n        Vec2 := Arg2\\IfcVector.Orientation;\n      ELSE\n        Mag2 := 1.0;\n        Vec2 := Arg2;\n      END_IF;\n      Vec1 := IfcNormalise (Vec1);\n      Vec2 := IfcNormalise (Vec2);\n      Ndim := SIZEOF(Vec1.DirectionRatios);\n      Mag  := 0.0;\n      Res  := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0:Ndim]);\n\n      REPEAT i := 1 TO Ndim;\n        Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] - Mag2*Vec2.DirectionRatios[i];\n        Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]);\n      END_REPEAT;\n\n      IF (Mag > 0.0 ) THEN\n        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag));\n      ELSE\n        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0);\n      END_IF;\n    END;\n  END_IF;\n  RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcVectorSum\n(Arg1, Arg2 : IfcVectorOrDirection) \n    : IfcVector;\nLOCAL\n  Result : IfcVector;\n  Res, Vec1, Vec2 : IfcDirection;\n  Mag, Mag1, Mag2 : REAL;\n  Ndim : INTEGER;\nEND_LOCAL;\n\n  IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN\n    RETURN (?) ;\n  ELSE\n    BEGIN\n      IF 'IFC4.IFCVECTOR' IN TYPEOF(Arg1) THEN\n        Mag1 := Arg1\\IfcVector.Magnitude;\n        Vec1 := Arg1\\IfcVector.Orientation;\n      ELSE\n        Mag1 := 1.0;\n        Vec1 := Arg1;\n      END_IF;\n      IF 'IFC4.IFCVECTOR' IN TYPEOF(Arg2) THEN\n        Mag2 := Arg2\\IfcVector.Magnitude;\n        Vec2 := Arg2\\IfcVector.Orientation;\n      ELSE\n        Mag2 := 1.0;\n        Vec2 := Arg2;\n      END_IF;\n      Vec1 := IfcNormalise (Vec1);\n      Vec2 := IfcNormalise (Vec2);\n      Ndim := SIZEOF(Vec1.DirectionRatios);\n      Mag  := 0.0;\n      Res  := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0:Ndim]);\n\n      REPEAT i := 1 TO Ndim;\n        Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] + Mag2*Vec2.DirectionRatios[i];\n        Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]);\n      END_REPEAT;\n\n      IF (Mag > 0.0 ) THEN\n        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag));\n      ELSE\n        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0);\n      END_IF;\n    END;\n  END_IF;\n  RETURN (Result);\nEND_FUNCTION;\n\nRULE IfcRepresentationContextSameWCS FOR\n\t(IfcGeometricRepresentationContext);\nLOCAL\n  IsDifferent  : LOGICAL := FALSE;\nEND_LOCAL;\n  IF (SIZEOF(IfcGeometricRepresentationContext) > 1)\n  THEN\n    REPEAT i := 2 TO HIINDEX(IfcGeometricRepresentationContext);\n      IF (IfcGeometricRepresentationContext[1].WorldCoordinateSystem :<>: IfcGeometricRepresentationContext[i].WorldCoordinateSystem)\n      THEN\n        IsDifferent := (NOT(IfcSameValidPrecision(IfcGeometricRepresentationContext[1].Precision,\n                                                  IfcGeometricRepresentationContext[i].Precision)))\n                    OR (NOT(IfcSameAxis2Placement(IfcGeometricRepresentationContext[1].WorldCoordinateSystem,\n                                                  IfcGeometricRepresentationContext[i].WorldCoordinateSystem,\n                                                  IfcGeometricRepresentationContext[1].Precision)));\n        IF (IsDifferent = TRUE) THEN\n          ESCAPE;\n        END_IF;\n      END_IF;\n    END_REPEAT;\n  END_IF;\n    WHERE\n      WR1 : IsDifferent = FALSE;\nEND_RULE;\n\nRULE IfcSingleProjectInstance FOR\n\t(IfcProject);\n\n    WHERE\n      WR1 : SIZEOF(IfcProject) <= 1;\nEND_RULE;\n\nEND_SCHEMA;\n"
  },
  {
    "path": "Install/Program Files to Install/IFC4.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:ifc=\"http://www.buildingsmart-tech.org/ifc/IFC4/Add2TC1\" targetNamespace=\"http://www.buildingsmart-tech.org/ifc/IFC4/Add2TC1\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\" >\n<!-- created with IFCDOC 11.7 at buildingsmart-tech.org -->\n\n<!--\nCopyright by:\nbuildingSMART International Limited, 1996-2017\n\nAny technical documentation made available by buildingSMART International Limited\nis the copyrighted work of buildingSMART International Limited and is owned by the \nbuildingSMART International Limited. It may be photocopied, used in software development, \nor translated into another computer language without prior written consent from \nbuildingSMART International Limited provided that full attribution is given. \nPrior written consent is required if changes are made to the technical specification.\n\nThis material is delivered to you as is and buildingSMART International Limited makes \nno warranty of any kind with regard to it, including, but not limited to, the implied \nwarranties as to its accuracy or fitness for a particular purpose. Any use of the \ntechnical documentation or the information contained therein is at the risk of the user. \nDocumentation may include technical or other inaccuracies or typographical errors. \nbuildingSMART International Limited shall not be liable for errors contained therein or \nfor incidental consequential damages in connection with the furnishing, performance or use \nof the material. The information contained in this document is subject to change without notice.\n-->\n\n\t<!-- root element declaration (for SCHEMA definitions) -->\n\t<xs:element name=\"uos\" type=\"ifc:uos\" abstract=\"true\"/>\n    <xs:simpleType name=\"Seq-anyURI\">\n        <xs:list itemType=\"xs:anyURI\"/>\n    </xs:simpleType>\n\t<xs:complexType name=\"uos\" abstract=\"true\">\n\t\t<xs:sequence>\n\t\t\t<xs:element name=\"header\" minOccurs=\"0\">\n\t\t\t\t<xs:complexType>\n\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t<xs:element name=\"name\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"time_stamp\" type=\"xs:dateTime\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"author\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"organization\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"preprocessor_version\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"originating_system\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"authorization\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"documentation\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t</xs:sequence>\n\t\t\t\t</xs:complexType>\n\t\t\t</xs:element>\n\t\t</xs:sequence>\n\t\t<xs:attribute name=\"id\" type=\"xs:ID\" use=\"optional\"/>\n\t\t<xs:attribute name=\"express\" type=\"ifc:Seq-anyURI\" use=\"optional\"/>\n\t\t<xs:attribute name=\"configuration\" type=\"ifc:Seq-anyURI\" use=\"optional\"/>\n\t</xs:complexType>\n\t<xs:element name=\"ifcXML\" type=\"ifc:ifcXML\" substitutionGroup=\"ifc:uos\"/>\n\t<xs:complexType name=\"ifcXML\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:uos\">\n\t\t\t\t<xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n\t\t\t\t\t<xs:element ref=\"ifc:Entity\"/>\n\t\t\t\t</xs:choice>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<!-- element and complex type declarations (for ENTITY definitions) -->\n\t<xs:element name=\"IfcActionRequest\" type=\"ifc:IfcActionRequest\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActionRequest\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActionRequestTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActor\" type=\"ifc:IfcActor\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TheActor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActorRole\" type=\"ifc:IfcActorRole\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActorRole\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Role\" type=\"ifc:IfcRoleEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedRole\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActuator\" type=\"ifc:IfcActuator\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActuator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActuatorType\" type=\"ifc:IfcActuatorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActuatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAddress\" type=\"ifc:IfcAddress\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAddress\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcAddressTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPurpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedBrep\" type=\"ifc:IfcAdvancedBrep\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedBrep\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedBrepWithVoids\" type=\"ifc:IfcAdvancedBrepWithVoids\" substitutionGroup=\"ifc:IfcAdvancedBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedBrepWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAdvancedBrep\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Voids\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClosedShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedFace\" type=\"ifc:IfcAdvancedFace\" substitutionGroup=\"ifc:IfcFaceSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFaceSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminal\" type=\"ifc:IfcAirTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalBox\" type=\"ifc:IfcAirTerminalBox\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalBoxType\" type=\"ifc:IfcAirTerminalBoxType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalBoxType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalType\" type=\"ifc:IfcAirTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirToAirHeatRecovery\" type=\"ifc:IfcAirToAirHeatRecovery\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirToAirHeatRecovery\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirToAirHeatRecoveryType\" type=\"ifc:IfcAirToAirHeatRecoveryType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirToAirHeatRecoveryType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlarm\" type=\"ifc:IfcAlarm\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlarm\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlarmType\" type=\"ifc:IfcAlarmType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlarmType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotation\" type=\"ifc:IfcAnnotation\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotationFillArea\" type=\"ifc:IfcAnnotationFillArea\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotationFillArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OuterBoundary\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApplication\" type=\"ifc:IfcApplication\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApplication\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ApplicationDeveloper\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Version\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicationFullName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicationIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAppliedValue\" type=\"ifc:IfcAppliedValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAppliedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitBasis\" type=\"ifc:IfcMeasureWithUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Components\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicableDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FixedUntilDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Condition\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ArithmeticOperator\" type=\"ifc:IfcArithmeticOperatorEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApproval\" type=\"ifc:IfcApproval\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApproval\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RequestingApproval\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"GivingApproval\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeOfApproval\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Level\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Qualifier\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApprovalRelationship\" type=\"ifc:IfcApprovalRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApprovalRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedApprovals\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcApproval\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryClosedProfileDef\" type=\"ifc:IfcArbitraryClosedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryClosedProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OuterCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryOpenProfileDef\" type=\"ifc:IfcArbitraryOpenProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryOpenProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Curve\" type=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryProfileDefWithVoids\" type=\"ifc:IfcArbitraryProfileDefWithVoids\" substitutionGroup=\"ifc:IfcArbitraryClosedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryProfileDefWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryClosedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerCurves\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAsset\" type=\"ifc:IfcAsset\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAsset\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OriginalValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CurrentValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TotalReplacementCost\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Owner\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"User\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResponsiblePerson\" type=\"ifc:IfcPerson\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"DepreciatedValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IncorporationDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAsymmetricIShapeProfileDef\" type=\"ifc:IfcAsymmetricIShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAsymmetricIShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"BottomFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAudioVisualAppliance\" type=\"ifc:IfcAudioVisualAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAudioVisualAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAudioVisualApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAudioVisualApplianceType\" type=\"ifc:IfcAudioVisualApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAudioVisualApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAudioVisualApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis1Placement\" type=\"ifc:IfcAxis1Placement\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis1Placement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis2Placement2D\" type=\"ifc:IfcAxis2Placement2D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis2Placement2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis2Placement3D\" type=\"ifc:IfcAxis2Placement3D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis2Placement3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineCurve\" type=\"ifc:IfcBSplineCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Degree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveForm\" type=\"ifc:IfcBSplineCurveForm\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ClosedCurve\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineCurveWithKnots\" type=\"ifc:IfcBSplineCurveWithKnots\" substitutionGroup=\"ifc:IfcBSplineCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineCurveWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurve\">\n\t\t\t\t<xs:attribute name=\"KnotMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Knots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"KnotSpec\" type=\"ifc:IfcKnotType\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineSurface\" type=\"ifc:IfcBSplineSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"4\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UDegree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VDegree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SurfaceForm\" type=\"ifc:IfcBSplineSurfaceForm\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UClosed\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VClosed\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineSurfaceWithKnots\" type=\"ifc:IfcBSplineSurfaceWithKnots\" substitutionGroup=\"ifc:IfcBSplineSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineSurfaceWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineSurface\">\n\t\t\t\t<xs:attribute name=\"UMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"VMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"UKnots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"VKnots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"KnotSpec\" type=\"ifc:IfcKnotType\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeam\" type=\"ifc:IfcBeam\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeam\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeamStandardCase\" type=\"ifc:IfcBeamStandardCase\" substitutionGroup=\"ifc:IfcBeam\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeamStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBeam\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeamType\" type=\"ifc:IfcBeamType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeamType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBlobTexture\" type=\"ifc:IfcBlobTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBlobTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RasterCode\" type=\"ifc:IfcBinary\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RasterFormat\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBlock\" type=\"ifc:IfcBlock\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBlock\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ZLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoiler\" type=\"ifc:IfcBoiler\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoiler\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoilerType\" type=\"ifc:IfcBoilerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoilerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBooleanClippingResult\" type=\"ifc:IfcBooleanClippingResult\" substitutionGroup=\"ifc:IfcBooleanResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBooleanClippingResult\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBooleanResult\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBooleanResult\" type=\"ifc:IfcBooleanResult\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBooleanResult\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FirstOperand\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondOperand\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Operator\" type=\"ifc:IfcBooleanOperator\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryCondition\" type=\"ifc:IfcBoundaryCondition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryCondition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryCurve\" type=\"ifc:IfcBoundaryCurve\" substitutionGroup=\"ifc:IfcCompositeCurveOnSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurveOnSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryEdgeCondition\" type=\"ifc:IfcBoundaryEdgeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryEdgeCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryFaceCondition\" type=\"ifc:IfcBoundaryFaceCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryFaceCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryNodeCondition\" type=\"ifc:IfcBoundaryNodeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryNodeCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryNodeConditionWarping\" type=\"ifc:IfcBoundaryNodeConditionWarping\" substitutionGroup=\"ifc:IfcBoundaryNodeCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryNodeConditionWarping\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryNodeCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WarpingStiffness\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcWarpingStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundedCurve\" type=\"ifc:IfcBoundedCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundedCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundedSurface\" type=\"ifc:IfcBoundedSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundedSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundingBox\" type=\"ifc:IfcBoundingBox\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundingBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Corner\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ZDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoxedHalfSpace\" type=\"ifc:IfcBoxedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoxedHalfSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Enclosure\" type=\"ifc:IfcBoundingBox\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuilding\" type=\"ifc:IfcBuilding\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuilding\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BuildingAddress\" type=\"ifc:IfcPostalAddress\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ElevationOfRefHeight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElevationOfTerrain\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElement\" type=\"ifc:IfcBuildingElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementPart\" type=\"ifc:IfcBuildingElementPart\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementPart\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementPartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementPartType\" type=\"ifc:IfcBuildingElementPartType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementPartType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementPartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementProxy\" type=\"ifc:IfcBuildingElementProxy\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementProxy\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementProxyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementProxyType\" type=\"ifc:IfcBuildingElementProxyType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementProxyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementProxyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementType\" type=\"ifc:IfcBuildingElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingStorey\" type=\"ifc:IfcBuildingStorey\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingStorey\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"Elevation\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingSystem\" type=\"ifc:IfcBuildingSystem\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingSystemTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBurner\" type=\"ifc:IfcBurner\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBurner\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBurnerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBurnerType\" type=\"ifc:IfcBurnerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBurnerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBurnerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCShapeProfileDef\" type=\"ifc:IfcCShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Girth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InternalFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierFitting\" type=\"ifc:IfcCableCarrierFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierFittingType\" type=\"ifc:IfcCableCarrierFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierSegment\" type=\"ifc:IfcCableCarrierSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierSegmentType\" type=\"ifc:IfcCableCarrierSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableFitting\" type=\"ifc:IfcCableFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableFittingType\" type=\"ifc:IfcCableFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableSegment\" type=\"ifc:IfcCableSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableSegmentType\" type=\"ifc:IfcCableSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPoint\" type=\"ifc:IfcCartesianPoint\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:attribute name=\"Coordinates\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList\" type=\"ifc:IfcCartesianPointList\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList2D\" type=\"ifc:IfcCartesianPointList2D\" substitutionGroup=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianPointList\">\n\t\t\t\t<xs:attribute name=\"CoordList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList3D\" type=\"ifc:IfcCartesianPointList3D\" substitutionGroup=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianPointList\">\n\t\t\t\t<xs:attribute name=\"CoordList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator\" type=\"ifc:IfcCartesianTransformationOperator\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis1\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Axis2\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LocalOrigin\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Scale\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator2D\" type=\"ifc:IfcCartesianTransformationOperator2D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator2DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator2DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2DnonUniform\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator2D\">\n\t\t\t\t<xs:attribute name=\"Scale2\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator3D\" type=\"ifc:IfcCartesianTransformationOperator3D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis3\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator3DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator3DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3DnonUniform\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator3D\">\n\t\t\t\t<xs:attribute name=\"Scale2\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scale3\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCenterLineProfileDef\" type=\"ifc:IfcCenterLineProfileDef\" substitutionGroup=\"ifc:IfcArbitraryOpenProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCenterLineProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryOpenProfileDef\">\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChiller\" type=\"ifc:IfcChiller\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChiller\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChillerType\" type=\"ifc:IfcChillerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChillerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChimney\" type=\"ifc:IfcChimney\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChimney\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChimneyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChimneyType\" type=\"ifc:IfcChimneyType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChimneyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChimneyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircle\" type=\"ifc:IfcCircle\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircleHollowProfileDef\" type=\"ifc:IfcCircleHollowProfileDef\" substitutionGroup=\"ifc:IfcCircleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircleHollowProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCircleProfileDef\">\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircleProfileDef\" type=\"ifc:IfcCircleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCivilElement\" type=\"ifc:IfcCivilElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCivilElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCivilElementType\" type=\"ifc:IfcCivilElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCivilElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassification\" type=\"ifc:IfcClassification\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassification\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferenceTokens\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasReferences\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationReference\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Source\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Edition\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EditionDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassificationReference\" type=\"ifc:IfcClassificationReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassificationReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasReferences\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationReference\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Sort\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClosedShell\" type=\"ifc:IfcClosedShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClosedShell\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoil\" type=\"ifc:IfcCoil\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoil\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoilType\" type=\"ifc:IfcCoilType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoilType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourRgb\" type=\"ifc:IfcColourRgb\" substitutionGroup=\"ifc:IfcColourSpecification\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourRgb\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcColourSpecification\">\n\t\t\t\t<xs:attribute name=\"Red\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Green\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Blue\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourRgbList\" type=\"ifc:IfcColourRgbList\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourRgbList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"ColourList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcNormalisedRatioMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourSpecification\" type=\"ifc:IfcColourSpecification\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourSpecification\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumn\" type=\"ifc:IfcColumn\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumn\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumnStandardCase\" type=\"ifc:IfcColumnStandardCase\" substitutionGroup=\"ifc:IfcColumn\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumnStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcColumn\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumnType\" type=\"ifc:IfcColumnType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumnType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCommunicationsAppliance\" type=\"ifc:IfcCommunicationsAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCommunicationsAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCommunicationsApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCommunicationsApplianceType\" type=\"ifc:IfcCommunicationsApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCommunicationsApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCommunicationsApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcComplexProperty\" type=\"ifc:IfcComplexProperty\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcComplexProperty\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcComplexPropertyTemplate\" type=\"ifc:IfcComplexPropertyTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcComplexPropertyTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertyTemplates\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyTemplate\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertyTemplate\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcComplexPropertyTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurve\" type=\"ifc:IfcCompositeCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Segments\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCompositeCurveSegment\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCompositeCurveSegment\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurveOnSurface\" type=\"ifc:IfcCompositeCurveOnSurface\" substitutionGroup=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurveOnSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurveSegment\" type=\"ifc:IfcCompositeCurveSegment\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurveSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Transition\" type=\"ifc:IfcTransitionCode\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeProfileDef\" type=\"ifc:IfcCompositeProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Profiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Label\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompressor\" type=\"ifc:IfcCompressor\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompressor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompressorType\" type=\"ifc:IfcCompressorType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompressorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCondenser\" type=\"ifc:IfcCondenser\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCondenser\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCondenserType\" type=\"ifc:IfcCondenserType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCondenserType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConic\" type=\"ifc:IfcConic\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConic\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectedFaceSet\" type=\"ifc:IfcConnectedFaceSet\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectedFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CfsFaces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFace\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFace\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionCurveGeometry\" type=\"ifc:IfcConnectionCurveGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionCurveGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionGeometry\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionPointEccentricity\" type=\"ifc:IfcConnectionPointEccentricity\" substitutionGroup=\"ifc:IfcConnectionPointGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionPointEccentricity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionPointGeometry\">\n\t\t\t\t<xs:attribute name=\"EccentricityInX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EccentricityInY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EccentricityInZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionPointGeometry\" type=\"ifc:IfcConnectionPointGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionPointGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PointOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionSurfaceGeometry\" type=\"ifc:IfcConnectionSurfaceGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionSurfaceGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionVolumeGeometry\" type=\"ifc:IfcConnectionVolumeGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionVolumeGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VolumeOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSolidOrShell\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VolumeOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSolidOrShell\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstraint\" type=\"ifc:IfcConstraint\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstraint\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CreatingActor\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstraintGrade\" type=\"ifc:IfcConstraintEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstraintSource\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionEquipmentResource\" type=\"ifc:IfcConstructionEquipmentResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionEquipmentResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionEquipmentResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionEquipmentResourceType\" type=\"ifc:IfcConstructionEquipmentResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionEquipmentResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionEquipmentResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionMaterialResource\" type=\"ifc:IfcConstructionMaterialResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionMaterialResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionMaterialResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionMaterialResourceType\" type=\"ifc:IfcConstructionMaterialResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionMaterialResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionMaterialResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionProductResource\" type=\"ifc:IfcConstructionProductResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionProductResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionProductResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionProductResourceType\" type=\"ifc:IfcConstructionProductResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionProductResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionProductResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionResource\" type=\"ifc:IfcConstructionResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Usage\" type=\"ifc:IfcResourceTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"BaseCosts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseQuantity\" type=\"ifc:IfcPhysicalQuantity\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionResourceType\" type=\"ifc:IfcConstructionResourceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionResourceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseCosts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseQuantity\" type=\"ifc:IfcPhysicalQuantity\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcContext\" type=\"ifc:IfcContext\" abstract=\"true\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcContext\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepresentationContexts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationContext\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitsInContext\" type=\"ifc:IfcUnitAssignment\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"IsDefinedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDefinesByProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDefinesByProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Declares\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDeclares\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDeclares\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ObjectType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Phase\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcContextDependentUnit\" type=\"ifc:IfcContextDependentUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcContextDependentUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcControl\" type=\"ifc:IfcControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcControl\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcController\" type=\"ifc:IfcController\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcController\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcControllerType\" type=\"ifc:IfcControllerType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcControllerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConversionBasedUnit\" type=\"ifc:IfcConversionBasedUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConversionBasedUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConversionFactor\" type=\"ifc:IfcMeasureWithUnit\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConversionBasedUnitWithOffset\" type=\"ifc:IfcConversionBasedUnitWithOffset\" substitutionGroup=\"ifc:IfcConversionBasedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConversionBasedUnitWithOffset\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConversionBasedUnit\">\n\t\t\t\t<xs:attribute name=\"ConversionOffset\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCooledBeam\" type=\"ifc:IfcCooledBeam\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCooledBeam\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCooledBeamType\" type=\"ifc:IfcCooledBeamType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCooledBeamType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoolingTower\" type=\"ifc:IfcCoolingTower\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoolingTower\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoolingTowerType\" type=\"ifc:IfcCoolingTowerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoolingTowerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoordinateOperation\" type=\"ifc:IfcCoordinateOperation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoordinateOperation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TargetCRS\" type=\"ifc:IfcCoordinateReferenceSystem\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoordinateReferenceSystem\" type=\"ifc:IfcCoordinateReferenceSystem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoordinateReferenceSystem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"GeodeticDatum\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VerticalDatum\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostItem\" type=\"ifc:IfcCostItem\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CostValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCostValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CostQuantities\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCostItemTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostSchedule\" type=\"ifc:IfcCostSchedule\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCostScheduleTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SubmittedOn\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UpdateDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostValue\" type=\"ifc:IfcCostValue\" substitutionGroup=\"ifc:IfcAppliedValue\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCovering\" type=\"ifc:IfcCovering\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCovering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoveringType\" type=\"ifc:IfcCoveringType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoveringType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCrewResource\" type=\"ifc:IfcCrewResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCrewResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCrewResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCrewResourceType\" type=\"ifc:IfcCrewResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCrewResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCrewResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCsgPrimitive3D\" type=\"ifc:IfcCsgPrimitive3D\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCsgPrimitive3D\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCsgSolid\" type=\"ifc:IfcCsgSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCsgSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TreeRootExpression\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCsgSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurrencyRelationship\" type=\"ifc:IfcCurrencyRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurrencyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RateSource\" type=\"ifc:IfcLibraryInformation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ExchangeRate\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RateDateTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurtainWall\" type=\"ifc:IfcCurtainWall\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurtainWall\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCurtainWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurtainWallType\" type=\"ifc:IfcCurtainWallType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurtainWallType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCurtainWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurve\" type=\"ifc:IfcCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveBoundedPlane\" type=\"ifc:IfcCurveBoundedPlane\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveBoundedPlane\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcPlane\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"OuterBoundary\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveBoundedSurface\" type=\"ifc:IfcCurveBoundedSurface\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveBoundedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Boundaries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBoundaryCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ImplicitOuter\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyle\" type=\"ifc:IfcCurveStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveFont\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveWidth\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelOrDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFont\" type=\"ifc:IfcCurveStyleFont\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PatternList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontPattern\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurveStyleFontPattern\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFontAndScaling\" type=\"ifc:IfcCurveStyleFontAndScaling\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFontAndScaling\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveFont\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveFontScaling\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFontPattern\" type=\"ifc:IfcCurveStyleFontPattern\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFontPattern\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"VisibleSegmentLength\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InvisibleSegmentLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCylindricalSurface\" type=\"ifc:IfcCylindricalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCylindricalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDamper\" type=\"ifc:IfcDamper\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDamper\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDamperType\" type=\"ifc:IfcDamperType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDamperType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedProfileDef\" type=\"ifc:IfcDerivedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Operator\" type=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Label\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedUnit\" type=\"ifc:IfcDerivedUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDerivedUnitElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDerivedUnitElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UnitType\" type=\"ifc:IfcDerivedUnitEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedUnitElement\" type=\"ifc:IfcDerivedUnitElement\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedUnitElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" type=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Exponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDimensionalExponents\" type=\"ifc:IfcDimensionalExponents\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDimensionalExponents\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"LengthExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MassExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectricCurrentExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThermodynamicTemperatureExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AmountOfSubstanceExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LuminousIntensityExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDirection\" type=\"ifc:IfcDirection\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDirection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:attribute name=\"DirectionRatios\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDiscreteAccessory\" type=\"ifc:IfcDiscreteAccessory\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDiscreteAccessory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDiscreteAccessoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDiscreteAccessoryType\" type=\"ifc:IfcDiscreteAccessoryType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDiscreteAccessoryType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDiscreteAccessoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionChamberElement\" type=\"ifc:IfcDistributionChamberElement\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionChamberElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionChamberElementType\" type=\"ifc:IfcDistributionChamberElementType\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionChamberElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionCircuit\" type=\"ifc:IfcDistributionCircuit\" substitutionGroup=\"ifc:IfcDistributionSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionCircuit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionSystem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionControlElement\" type=\"ifc:IfcDistributionControlElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionControlElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionControlElementType\" type=\"ifc:IfcDistributionControlElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionControlElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionElement\" type=\"ifc:IfcDistributionElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionElementType\" type=\"ifc:IfcDistributionElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionFlowElement\" type=\"ifc:IfcDistributionFlowElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionFlowElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionFlowElementType\" type=\"ifc:IfcDistributionFlowElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionFlowElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionPort\" type=\"ifc:IfcDistributionPort\" substitutionGroup=\"ifc:IfcPort\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionPort\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPort\">\n\t\t\t\t<xs:attribute name=\"FlowDirection\" type=\"ifc:IfcFlowDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionPortTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SystemType\" type=\"ifc:IfcDistributionSystemEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionSystem\" type=\"ifc:IfcDistributionSystem\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionSystemEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentInformation\" type=\"ifc:IfcDocumentInformation\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentInformation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DocumentOwner\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Editors\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IntendedUse\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scope\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Revision\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastRevisionTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectronicFormat\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValidFrom\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValidUntil\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Confidentiality\" type=\"ifc:IfcDocumentConfidentialityEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcDocumentStatusEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentInformationRelationship\" type=\"ifc:IfcDocumentInformationRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentInformationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingDocument\" type=\"ifc:IfcDocumentInformation\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedDocuments\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDocumentInformation\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RelationshipType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentReference\" type=\"ifc:IfcDocumentReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedDocument\" type=\"ifc:IfcDocumentInformation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoor\" type=\"ifc:IfcDoor\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDoorTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorTypeOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedOperationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorLiningProperties\" type=\"ifc:IfcDoorLiningProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorLiningProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CasingThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CasingDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorPanelProperties\" type=\"ifc:IfcDoorPanelProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorPanelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PanelDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelOperation\" type=\"ifc:IfcDoorPanelOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelWidth\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcDoorPanelPositionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorStandardCase\" type=\"ifc:IfcDoorStandardCase\" substitutionGroup=\"ifc:IfcDoor\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDoor\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorStyle\" type=\"ifc:IfcDoorStyle\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorStyleOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstructionType\" type=\"ifc:IfcDoorStyleConstructionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Sizeable\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorType\" type=\"ifc:IfcDoorType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDoorTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorTypeOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedOperationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingPreDefinedColour\" type=\"ifc:IfcDraughtingPreDefinedColour\" substitutionGroup=\"ifc:IfcPreDefinedColour\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedColour\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingPreDefinedCurveFont\" type=\"ifc:IfcDraughtingPreDefinedCurveFont\" substitutionGroup=\"ifc:IfcPreDefinedCurveFont\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedCurveFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctFitting\" type=\"ifc:IfcDuctFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctFittingType\" type=\"ifc:IfcDuctFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSegment\" type=\"ifc:IfcDuctSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSegmentType\" type=\"ifc:IfcDuctSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSilencer\" type=\"ifc:IfcDuctSilencer\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSilencer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSilencerType\" type=\"ifc:IfcDuctSilencerType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSilencerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdge\" type=\"ifc:IfcEdge\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeStart\" type=\"ifc:IfcVertex\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"EdgeEnd\" type=\"ifc:IfcVertex\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdgeCurve\" type=\"ifc:IfcEdgeCurve\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdgeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeGeometry\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdgeLoop\" type=\"ifc:IfcEdgeLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdgeLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricAppliance\" type=\"ifc:IfcElectricAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricApplianceType\" type=\"ifc:IfcElectricApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricDistributionBoard\" type=\"ifc:IfcElectricDistributionBoard\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricDistributionBoard\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricDistributionBoardTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricDistributionBoardType\" type=\"ifc:IfcElectricDistributionBoardType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricDistributionBoardType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricDistributionBoardTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowStorageDevice\" type=\"ifc:IfcElectricFlowStorageDevice\" substitutionGroup=\"ifc:IfcFlowStorageDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowStorageDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowStorageDeviceType\" type=\"ifc:IfcElectricFlowStorageDeviceType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowStorageDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricGenerator\" type=\"ifc:IfcElectricGenerator\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricGenerator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricGeneratorType\" type=\"ifc:IfcElectricGeneratorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricGeneratorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricMotor\" type=\"ifc:IfcElectricMotor\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricMotor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricMotorType\" type=\"ifc:IfcElectricMotorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricMotorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricTimeControl\" type=\"ifc:IfcElectricTimeControl\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricTimeControl\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricTimeControlType\" type=\"ifc:IfcElectricTimeControlType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricTimeControlType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElement\" type=\"ifc:IfcElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProjections\" type=\"ifc:IfcRelProjectsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"HasOpenings\" type=\"ifc:IfcRelVoidsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementAssembly\" type=\"ifc:IfcElementAssembly\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementAssembly\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementAssemblyType\" type=\"ifc:IfcElementAssemblyType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementAssemblyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementComponent\" type=\"ifc:IfcElementComponent\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementComponent\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementComponentType\" type=\"ifc:IfcElementComponentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementComponentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementQuantity\" type=\"ifc:IfcElementQuantity\" substitutionGroup=\"ifc:IfcQuantitySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementQuantity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcQuantitySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Quantities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MethodOfMeasurement\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementType\" type=\"ifc:IfcElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ElementType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementarySurface\" type=\"ifc:IfcElementarySurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementarySurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEllipse\" type=\"ifc:IfcEllipse\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEllipse\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\n\t\t\t\t<xs:attribute name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEllipseProfileDef\" type=\"ifc:IfcEllipseProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEllipseProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEnergyConversionDevice\" type=\"ifc:IfcEnergyConversionDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEnergyConversionDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEnergyConversionDeviceType\" type=\"ifc:IfcEnergyConversionDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEnergyConversionDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEngine\" type=\"ifc:IfcEngine\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEngine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEngineTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEngineType\" type=\"ifc:IfcEngineType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEngineType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEngineTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporativeCooler\" type=\"ifc:IfcEvaporativeCooler\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporativeCooler\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporativeCoolerType\" type=\"ifc:IfcEvaporativeCoolerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporativeCoolerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporator\" type=\"ifc:IfcEvaporator\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporatorType\" type=\"ifc:IfcEvaporatorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvent\" type=\"ifc:IfcEvent\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EventOccurenceTime\" type=\"ifc:IfcEventTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEventTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EventTriggerType\" type=\"ifc:IfcEventTriggerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedEventTriggerType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEventTime\" type=\"ifc:IfcEventTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEventTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"ActualDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEventType\" type=\"ifc:IfcEventType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEventType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEventTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EventTriggerType\" type=\"ifc:IfcEventTriggerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedEventTriggerType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtendedProperties\" type=\"ifc:IfcExtendedProperties\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtendedProperties\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Properties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalInformation\" type=\"ifc:IfcExternalInformation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalInformation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalReference\" type=\"ifc:IfcExternalReference\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalReference\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalReferenceRelationship\" type=\"ifc:IfcExternalReferenceRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalReferenceRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingReference\" type=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalSpatialElement\" type=\"ifc:IfcExternalSpatialElement\" substitutionGroup=\"ifc:IfcExternalSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalSpatialElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcExternalSpatialElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalSpatialStructureElement\" type=\"ifc:IfcExternalSpatialStructureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalSpatialStructureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedHatchStyle\" type=\"ifc:IfcExternallyDefinedHatchStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedHatchStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedSurfaceStyle\" type=\"ifc:IfcExternallyDefinedSurfaceStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedSurfaceStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedTextFont\" type=\"ifc:IfcExternallyDefinedTextFont\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedTextFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtrudedAreaSolid\" type=\"ifc:IfcExtrudedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtrudedAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtrudedAreaSolidTapered\" type=\"ifc:IfcExtrudedAreaSolidTapered\" substitutionGroup=\"ifc:IfcExtrudedAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtrudedAreaSolidTapered\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtrudedAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EndSweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFace\" type=\"ifc:IfcFace\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Bounds\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFaceBound\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFaceBound\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceBasedSurfaceModel\" type=\"ifc:IfcFaceBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceBasedSurfaceModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FbsmFaces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectedFaceSet\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcConnectedFaceSet\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceBound\" type=\"ifc:IfcFaceBound\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceBound\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Bound\" type=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Orientation\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceOuterBound\" type=\"ifc:IfcFaceOuterBound\" substitutionGroup=\"ifc:IfcFaceBound\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceOuterBound\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFaceBound\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceSurface\" type=\"ifc:IfcFaceSurface\" substitutionGroup=\"ifc:IfcFace\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFace\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FaceSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacetedBrep\" type=\"ifc:IfcFacetedBrep\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacetedBrep\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacetedBrepWithVoids\" type=\"ifc:IfcFacetedBrepWithVoids\" substitutionGroup=\"ifc:IfcFacetedBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacetedBrepWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacetedBrep\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Voids\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClosedShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFailureConnectionCondition\" type=\"ifc:IfcFailureConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFailureConnectionCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t<xs:attribute name=\"TensionFailureX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionFailureY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionFailureZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFan\" type=\"ifc:IfcFan\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFan\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFanType\" type=\"ifc:IfcFanType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFanType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFastener\" type=\"ifc:IfcFastener\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFastener\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFastenerType\" type=\"ifc:IfcFastenerType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFastenerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElement\" type=\"ifc:IfcFeatureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElementAddition\" type=\"ifc:IfcFeatureElementAddition\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElementAddition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElementSubtraction\" type=\"ifc:IfcFeatureElementSubtraction\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElementSubtraction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyle\" type=\"ifc:IfcFillAreaStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FillStyles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFillStyleSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelorDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyleHatching\" type=\"ifc:IfcFillAreaStyleHatching\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyleHatching\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HatchLineAppearance\" type=\"ifc:IfcCurveStyle\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"StartOfNextHatchLine\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcHatchLineDistanceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointOfReferenceHatchLine\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PatternStart\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"HatchLineAngle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyleTiles\" type=\"ifc:IfcFillAreaStyleTiles\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyleTiles\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TilingPattern\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\" minOccurs=\"2\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcVector\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Tiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStyledItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStyledItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TilingScale\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFilter\" type=\"ifc:IfcFilter\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFilter\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFilterType\" type=\"ifc:IfcFilterType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFilterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFireSuppressionTerminal\" type=\"ifc:IfcFireSuppressionTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFireSuppressionTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFireSuppressionTerminalType\" type=\"ifc:IfcFireSuppressionTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFireSuppressionTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFixedReferenceSweptAreaSolid\" type=\"ifc:IfcFixedReferenceSweptAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFixedReferenceSweptAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"FixedReference\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"StartParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowController\" type=\"ifc:IfcFlowController\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowController\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowControllerType\" type=\"ifc:IfcFlowControllerType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowControllerType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowFitting\" type=\"ifc:IfcFlowFitting\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowFittingType\" type=\"ifc:IfcFlowFittingType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowFittingType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowInstrument\" type=\"ifc:IfcFlowInstrument\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowInstrument\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowInstrumentType\" type=\"ifc:IfcFlowInstrumentType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowInstrumentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMeter\" type=\"ifc:IfcFlowMeter\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMeter\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMeterType\" type=\"ifc:IfcFlowMeterType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMeterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMovingDevice\" type=\"ifc:IfcFlowMovingDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMovingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMovingDeviceType\" type=\"ifc:IfcFlowMovingDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMovingDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowSegment\" type=\"ifc:IfcFlowSegment\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowSegmentType\" type=\"ifc:IfcFlowSegmentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowSegmentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowStorageDevice\" type=\"ifc:IfcFlowStorageDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowStorageDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowStorageDeviceType\" type=\"ifc:IfcFlowStorageDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowStorageDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTerminal\" type=\"ifc:IfcFlowTerminal\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTerminalType\" type=\"ifc:IfcFlowTerminalType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTerminalType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTreatmentDevice\" type=\"ifc:IfcFlowTreatmentDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTreatmentDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTreatmentDeviceType\" type=\"ifc:IfcFlowTreatmentDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTreatmentDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFooting\" type=\"ifc:IfcFooting\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFooting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFootingType\" type=\"ifc:IfcFootingType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFootingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnishingElement\" type=\"ifc:IfcFurnishingElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnishingElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnishingElementType\" type=\"ifc:IfcFurnishingElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnishingElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurniture\" type=\"ifc:IfcFurniture\" substitutionGroup=\"ifc:IfcFurnishingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurniture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFurnitureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnitureType\" type=\"ifc:IfcFurnitureType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnitureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\n\t\t\t\t<xs:attribute name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFurnitureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeographicElement\" type=\"ifc:IfcGeographicElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeographicElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGeographicElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeographicElementType\" type=\"ifc:IfcGeographicElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeographicElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGeographicElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricCurveSet\" type=\"ifc:IfcGeometricCurveSet\" substitutionGroup=\"ifc:IfcGeometricSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricCurveSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationContext\" type=\"ifc:IfcGeometricRepresentationContext\" substitutionGroup=\"ifc:IfcRepresentationContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationContext\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WorldCoordinateSystem\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TrueNorth\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"HasSubContexts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationSubContext\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGeometricRepresentationSubContext\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasCoordinateOperation\" type=\"ifc:IfcCoordinateOperation\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CoordinateSpaceDimension\" type=\"ifc:IfcDimensionCount\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Precision\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationItem\" type=\"ifc:IfcGeometricRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcGeometricRepresentationContext\">\n\t\t\t\t<xs:sequence/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationSubContext\" type=\"ifc:IfcGeometricRepresentationSubContext\" substitutionGroup=\"ifc:IfcGeometricRepresentationContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationSubContext-temp\">\n\t\t\t\t<xs:attribute name=\"TargetScale\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TargetView\" type=\"ifc:IfcGeometricProjectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedTargetView\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricSet\" type=\"ifc:IfcGeometricSet\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGeometricSetSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGrid\" type=\"ifc:IfcGrid\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGrid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WAxes\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGridTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGridAxis\" type=\"ifc:IfcGridAxis\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGridAxis\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"AxisTag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGridPlacement\" type=\"ifc:IfcGridPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGridPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlacementLocation\" type=\"ifc:IfcVirtualGridIntersection\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"PlacementRefDirection\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGridPlacementDirectionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGroup\" type=\"ifc:IfcGroup\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHalfSpaceSolid\" type=\"ifc:IfcHalfSpaceSolid\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHalfSpaceSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"AgreementFlag\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHeatExchanger\" type=\"ifc:IfcHeatExchanger\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHeatExchanger\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHeatExchangerType\" type=\"ifc:IfcHeatExchangerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHeatExchangerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHumidifier\" type=\"ifc:IfcHumidifier\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHumidifier\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHumidifierType\" type=\"ifc:IfcHumidifierType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHumidifierType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIShapeProfileDef\" type=\"ifc:IfcIShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcImageTexture\" type=\"ifc:IfcImageTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcImageTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:attribute name=\"URLReference\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedColourMap\" type=\"ifc:IfcIndexedColourMap\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedColourMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Colours\" type=\"ifc:IfcColourRgbList\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Opacity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ColourIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolyCurve\" type=\"ifc:IfcIndexedPolyCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolyCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Points\" type=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Segments\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSegmentIndexSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSegmentIndexSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolygonalFace\" type=\"ifc:IfcIndexedPolygonalFace\" substitutionGroup=\"ifc:IfcTessellatedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolygonalFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedItem\">\n\t\t\t\t<xs:attribute name=\"CoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolygonalFaceWithVoids\" type=\"ifc:IfcIndexedPolygonalFaceWithVoids\" substitutionGroup=\"ifc:IfcIndexedPolygonalFace\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolygonalFaceWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcIndexedPolygonalFace\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerCoordIndices\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element name=\"Seq-IfcPositiveInteger-wrapper\" type=\"ifc:Seq-IfcPositiveInteger\" maxOccurs=\"unbounded\" />\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedTextureMap\" type=\"ifc:IfcIndexedTextureMap\" abstract=\"true\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedTextureMap\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TexCoords\" type=\"ifc:IfcTextureVertexList\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedTriangleTextureMap\" type=\"ifc:IfcIndexedTriangleTextureMap\" substitutionGroup=\"ifc:IfcIndexedTextureMap\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedTriangleTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcIndexedTextureMap\">\n\t\t\t\t<xs:attribute name=\"TexCoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInterceptor\" type=\"ifc:IfcInterceptor\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInterceptor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInterceptorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInterceptorType\" type=\"ifc:IfcInterceptorType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInterceptorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInterceptorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIntersectionCurve\" type=\"ifc:IfcIntersectionCurve\" substitutionGroup=\"ifc:IfcSurfaceCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIntersectionCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInventory\" type=\"ifc:IfcInventory\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInventory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Jurisdiction\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResponsiblePersons\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPerson\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurrentValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"OriginalValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInventoryTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastUpdateDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIrregularTimeSeries\" type=\"ifc:IfcIrregularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIrregularTimeSeries\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIrregularTimeSeriesValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIrregularTimeSeriesValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIrregularTimeSeriesValue\" type=\"ifc:IfcIrregularTimeSeriesValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIrregularTimeSeriesValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TimeStamp\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcJunctionBox\" type=\"ifc:IfcJunctionBox\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcJunctionBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcJunctionBoxType\" type=\"ifc:IfcJunctionBoxType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcJunctionBoxType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLShapeProfileDef\" type=\"ifc:IfcLShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LegSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLaborResource\" type=\"ifc:IfcLaborResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLaborResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLaborResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLaborResourceType\" type=\"ifc:IfcLaborResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLaborResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLaborResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLagTime\" type=\"ifc:IfcLagTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLagTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LagValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTimeOrRatioSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"DurationType\" type=\"ifc:IfcTaskDurationEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLamp\" type=\"ifc:IfcLamp\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLamp\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLampType\" type=\"ifc:IfcLampType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLampType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLibraryInformation\" type=\"ifc:IfcLibraryInformation\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLibraryInformation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Publisher\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Version\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VersionDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLibraryReference\" type=\"ifc:IfcLibraryReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLibraryReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedLibrary\" type=\"ifc:IfcLibraryInformation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Language\" type=\"ifc:IfcLanguageId\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightDistributionData\" type=\"ifc:IfcLightDistributionData\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightDistributionData\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"MainPlaneAngle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondaryPlaneAngle\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPlaneAngleMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"LuminousIntensity\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLuminousIntensityDistributionMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightFixture\" type=\"ifc:IfcLightFixture\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightFixture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightFixtureType\" type=\"ifc:IfcLightFixtureType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightFixtureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightIntensityDistribution\" type=\"ifc:IfcLightIntensityDistribution\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightIntensityDistribution\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DistributionData\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLightDistributionData\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLightDistributionData\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LightDistributionCurve\" type=\"ifc:IfcLightDistributionCurveEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSource\" type=\"ifc:IfcLightSource\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LightColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AmbientIntensity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Intensity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceAmbient\" type=\"ifc:IfcLightSourceAmbient\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceAmbient\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceDirectional\" type=\"ifc:IfcLightSourceDirectional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceDirectional\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceGoniometric\" type=\"ifc:IfcLightSourceGoniometric\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceGoniometric\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ColourAppearance\" type=\"ifc:IfcColourRgb\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LightDistributionDataSource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ColourTemperature\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LuminousFlux\" type=\"ifc:IfcLuminousFluxMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LightEmissionSource\" type=\"ifc:IfcLightEmissionSourceEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourcePositional\" type=\"ifc:IfcLightSourcePositional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourcePositional\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstantAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DistanceAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"QuadricAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceSpot\" type=\"ifc:IfcLightSourceSpot\" substitutionGroup=\"ifc:IfcLightSourcePositional\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceSpot\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSourcePositional\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ConcentrationExponent\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SpreadAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BeamWidthAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLine\" type=\"ifc:IfcLine\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Pnt\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Dir\" type=\"ifc:IfcVector\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLocalPlacement\" type=\"ifc:IfcLocalPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLocalPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlacementRelTo\" type=\"ifc:IfcObjectPlacement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RelativePlacement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLoop\" type=\"ifc:IfcLoop\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcManifoldSolidBrep\" type=\"ifc:IfcManifoldSolidBrep\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcManifoldSolidBrep\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Outer\" type=\"ifc:IfcClosedShell\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMapConversion\" type=\"ifc:IfcMapConversion\" substitutionGroup=\"ifc:IfcCoordinateOperation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMapConversion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCoordinateOperation\">\n\t\t\t\t<xs:attribute name=\"Eastings\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Northings\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OrthogonalHeight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"XAxisAbscissa\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"XAxisOrdinate\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scale\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMappedItem\" type=\"ifc:IfcMappedItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMappedItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MappingSource\" type=\"ifc:IfcRepresentationMap\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"MappingTarget\" type=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterial\" type=\"ifc:IfcMaterial\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterial\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasRepresentation\" type=\"ifc:IfcMaterialDefinitionRepresentation\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialClassificationRelationship\" type=\"ifc:IfcMaterialClassificationRelationship\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialClassificationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialClassifications\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ClassifiedMaterial\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialConstituent\" type=\"ifc:IfcMaterialConstituent\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialConstituent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Fraction\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialConstituentSet\" type=\"ifc:IfcMaterialConstituentSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialConstituentSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialConstituents\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialConstituent\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialConstituent\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialDefinition\" type=\"ifc:IfcMaterialDefinition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialDefinitionRepresentation\" type=\"ifc:IfcMaterialDefinitionRepresentation\" substitutionGroup=\"ifc:IfcProductRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialDefinitionRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayer\" type=\"ifc:IfcMaterialLayer\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsVentilated\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerSet\" type=\"ifc:IfcMaterialLayerSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialLayers\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialLayer\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerSetName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerSetUsage\" type=\"ifc:IfcMaterialLayerSetUsage\" substitutionGroup=\"ifc:IfcMaterialUsageDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerSetUsage\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialUsageDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForLayerSet\" type=\"ifc:IfcMaterialLayerSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerSetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DirectionSense\" type=\"ifc:IfcDirectionSenseEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OffsetFromReferenceLine\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReferenceExtent\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerWithOffsets\" type=\"ifc:IfcMaterialLayerWithOffsets\" substitutionGroup=\"ifc:IfcMaterialLayer\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerWithOffsets\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialLayer\">\n\t\t\t\t<xs:attribute name=\"OffsetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OffsetValues\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialList\" type=\"ifc:IfcMaterialList\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Materials\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfile\" type=\"ifc:IfcMaterialProfile\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfile\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Profile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSet\" type=\"ifc:IfcMaterialProfileSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialProfiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialProfile\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialProfile\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CompositeProfile\" type=\"ifc:IfcCompositeProfileDef\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSetUsage\" type=\"ifc:IfcMaterialProfileSetUsage\" substitutionGroup=\"ifc:IfcMaterialUsageDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSetUsage\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialUsageDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForProfileSet\" type=\"ifc:IfcMaterialProfileSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CardinalPoint\" type=\"ifc:IfcCardinalPointReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReferenceExtent\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSetUsageTapering\" type=\"ifc:IfcMaterialProfileSetUsageTapering\" substitutionGroup=\"ifc:IfcMaterialProfileSetUsage\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSetUsageTapering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProfileSetUsage\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForProfileEndSet\" type=\"ifc:IfcMaterialProfileSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CardinalEndPoint\" type=\"ifc:IfcCardinalPointReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileWithOffsets\" type=\"ifc:IfcMaterialProfileWithOffsets\" substitutionGroup=\"ifc:IfcMaterialProfile\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileWithOffsets\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProfile\">\n\t\t\t\t<xs:attribute name=\"OffsetValues\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProperties\" type=\"ifc:IfcMaterialProperties\" substitutionGroup=\"ifc:IfcExtendedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtendedProperties\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialRelationship\" type=\"ifc:IfcMaterialRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedMaterials\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialUsageDefinition\" type=\"ifc:IfcMaterialUsageDefinition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialUsageDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMeasureWithUnit\" type=\"ifc:IfcMeasureWithUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMeasureWithUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ValueComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalFastener\" type=\"ifc:IfcMechanicalFastener\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalFastener\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMechanicalFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalFastenerType\" type=\"ifc:IfcMechanicalFastenerType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalFastenerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMechanicalFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMedicalDevice\" type=\"ifc:IfcMedicalDevice\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMedicalDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMedicalDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMedicalDeviceType\" type=\"ifc:IfcMedicalDeviceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMedicalDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMedicalDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMember\" type=\"ifc:IfcMember\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMemberStandardCase\" type=\"ifc:IfcMemberStandardCase\" substitutionGroup=\"ifc:IfcMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMemberStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMemberType\" type=\"ifc:IfcMemberType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMemberType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMetric\" type=\"ifc:IfcMetric\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMetric\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DataValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencePath\" type=\"ifc:IfcReference\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Benchmark\" type=\"ifc:IfcBenchmarkEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValueSource\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcMirroredProfileDef-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcDerivedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMirroredProfileDef\" type=\"ifc:IfcMirroredProfileDef\" substitutionGroup=\"ifc:IfcDerivedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMirroredProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMirroredProfileDef-temp\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMonetaryUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Currency\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMotorConnection\" type=\"ifc:IfcMotorConnection\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMotorConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMotorConnectionType\" type=\"ifc:IfcMotorConnectionType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMotorConnectionType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcNamedUnit\" type=\"ifc:IfcNamedUnit\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcNamedUnit\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Dimensions\" type=\"ifc:IfcDimensionalExponents\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UnitType\" type=\"ifc:IfcUnitEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObject\" type=\"ifc:IfcObject\" abstract=\"true\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObject\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IsDeclaredBy\" type=\"ifc:IfcRelDefinesByObject\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"IsTypedBy\" type=\"ifc:IfcRelDefinesByType\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"IsDefinedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDefinesByProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDefinesByProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ObjectType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjectDefinition\" type=\"ifc:IfcObjectDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjectDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IsNestedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelNests\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelNests\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"IsDecomposedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelAggregates\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelAggregates\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjectPlacement\" type=\"ifc:IfcObjectPlacement\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjectPlacement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjective\" type=\"ifc:IfcObjective\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjective\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BenchmarkValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcConstraint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LogicalAggregator\" type=\"ifc:IfcLogicalOperatorEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ObjectiveQualifier\" type=\"ifc:IfcObjectiveEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedQualifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOccupant\" type=\"ifc:IfcOccupant\" substitutionGroup=\"ifc:IfcActor\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOccupant\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcActor\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOccupantTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurve2D\" type=\"ifc:IfcOffsetCurve2D\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurve2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Distance\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurve3D\" type=\"ifc:IfcOffsetCurve3D\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurve3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Distance\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpenShell\" type=\"ifc:IfcOpenShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpenShell\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpeningElement\" type=\"ifc:IfcOpeningElement\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpeningElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasFillings\" type=\"ifc:IfcRelFillsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOpeningElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpeningStandardCase\" type=\"ifc:IfcOpeningStandardCase\" substitutionGroup=\"ifc:IfcOpeningElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpeningStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOpeningElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrganization\" type=\"ifc:IfcOrganization\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrganization\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Addresses\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAddress\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrganizationRelationship\" type=\"ifc:IfcOrganizationRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrganizationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingOrganization\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedOrganizations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrganization\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcOrientedEdge-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrientedEdge\" type=\"ifc:IfcOrientedEdge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrientedEdge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOrientedEdge-temp\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeElement\" type=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Orientation\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOuterBoundaryCurve\" type=\"ifc:IfcOuterBoundaryCurve\" substitutionGroup=\"ifc:IfcBoundaryCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOuterBoundaryCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOutlet\" type=\"ifc:IfcOutlet\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOutlet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOutletType\" type=\"ifc:IfcOutletType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOutletType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOwnerHistory\" type=\"ifc:IfcOwnerHistory\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOwnerHistory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OwningUser\" type=\"ifc:IfcPersonAndOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"OwningApplication\" type=\"ifc:IfcApplication\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"LastModifyingUser\" type=\"ifc:IfcPersonAndOrganization\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LastModifyingApplication\" type=\"ifc:IfcApplication\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"State\" type=\"ifc:IfcStateEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ChangeAction\" type=\"ifc:IfcChangeActionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastModifiedDate\" type=\"ifc:IfcTimeStamp\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationDate\" type=\"ifc:IfcTimeStamp\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcParameterizedProfileDef\" type=\"ifc:IfcParameterizedProfileDef\" abstract=\"true\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcParameterizedProfileDef\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement2D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPath\" type=\"ifc:IfcPath\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPath\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPcurve\" type=\"ifc:IfcPcurve\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPcurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReferenceCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPerformanceHistory\" type=\"ifc:IfcPerformanceHistory\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPerformanceHistory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"LifeCyclePhase\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPerformanceHistoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPermeableCoveringProperties\" type=\"ifc:IfcPermeableCoveringProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPermeableCoveringProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcPermeableCoveringOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPermit\" type=\"ifc:IfcPermit\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPermit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPermitTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPerson\" type=\"ifc:IfcPerson\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPerson\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Addresses\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAddress\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FamilyName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"GivenName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MiddleNames\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PrefixTitles\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"SuffixTitles\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPersonAndOrganization\" type=\"ifc:IfcPersonAndOrganization\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPersonAndOrganization\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ThePerson\" type=\"ifc:IfcPerson\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TheOrganization\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalComplexQuantity\" type=\"ifc:IfcPhysicalComplexQuantity\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalComplexQuantity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasQuantities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Discrimination\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Quality\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Usage\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalQuantity\" type=\"ifc:IfcPhysicalQuantity\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalQuantity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalSimpleQuantity\" type=\"ifc:IfcPhysicalSimpleQuantity\" abstract=\"true\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalSimpleQuantity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" type=\"ifc:IfcNamedUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPile\" type=\"ifc:IfcPile\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPile\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstructionType\" type=\"ifc:IfcPileConstructionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPileType\" type=\"ifc:IfcPileType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPileType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeFitting\" type=\"ifc:IfcPipeFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeFittingType\" type=\"ifc:IfcPipeFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeSegment\" type=\"ifc:IfcPipeSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeSegmentType\" type=\"ifc:IfcPipeSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPixelTexture\" type=\"ifc:IfcPixelTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPixelTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ColourComponents\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Pixel\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"xs:hexBinary\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlacement\" type=\"ifc:IfcPlacement\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlacement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Location\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlanarBox\" type=\"ifc:IfcPlanarBox\" substitutionGroup=\"ifc:IfcPlanarExtent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlanarBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlanarExtent\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Placement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlanarExtent\" type=\"ifc:IfcPlanarExtent\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlanarExtent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:attribute name=\"SizeInX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SizeInY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlane\" type=\"ifc:IfcPlane\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlane\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlate\" type=\"ifc:IfcPlate\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlateStandardCase\" type=\"ifc:IfcPlateStandardCase\" substitutionGroup=\"ifc:IfcPlate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlateStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlate\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlateType\" type=\"ifc:IfcPlateType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlateType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPoint\" type=\"ifc:IfcPoint\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPoint\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPointOnCurve\" type=\"ifc:IfcPointOnCurve\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPointOnCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PointParameter\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPointOnSurface\" type=\"ifc:IfcPointOnSurface\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPointOnSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PointParameterU\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PointParameterV\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolyLoop\" type=\"ifc:IfcPolyLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolyLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Polygon\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"3\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolygonalBoundedHalfSpace\" type=\"ifc:IfcPolygonalBoundedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolygonalBoundedHalfSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"PolygonalBoundary\" type=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolygonalFaceSet\" type=\"ifc:IfcPolygonalFaceSet\" substitutionGroup=\"ifc:IfcTessellatedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolygonalFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedFaceSet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Faces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIndexedPolygonalFace\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIndexedPolygonalFace\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Closed\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PnIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolyline\" type=\"ifc:IfcPolyline\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolyline\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Points\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPort\" type=\"ifc:IfcPort\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPort\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPostalAddress\" type=\"ifc:IfcPostalAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPostalAddress\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AddressLines\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"InternalLocation\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PostalBox\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Town\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Region\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PostalCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Country\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedColour\" type=\"ifc:IfcPreDefinedColour\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedColour\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedCurveFont\" type=\"ifc:IfcPreDefinedCurveFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedCurveFont\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedItem\" type=\"ifc:IfcPreDefinedItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedProperties\" type=\"ifc:IfcPreDefinedProperties\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedProperties\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedPropertySet\" type=\"ifc:IfcPreDefinedPropertySet\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedPropertySet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedTextFont\" type=\"ifc:IfcPreDefinedTextFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedTextFont\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationItem\" type=\"ifc:IfcPresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationLayerAssignment\" type=\"ifc:IfcPresentationLayerAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationLayerAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AssignedItems\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLayeredItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLayeredItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationLayerWithStyle\" type=\"ifc:IfcPresentationLayerWithStyle\" substitutionGroup=\"ifc:IfcPresentationLayerAssignment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationLayerWithStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationLayerAssignment\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LayerStyles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPresentationStyle\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPresentationStyle\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerOn\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LayerFrozen\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LayerBlocked\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationStyle\" type=\"ifc:IfcPresentationStyle\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationStyle\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationStyleAssignment\" type=\"ifc:IfcPresentationStyleAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationStyleAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPresentationStyleSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcedure\" type=\"ifc:IfcProcedure\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcedure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProcedureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcedureType\" type=\"ifc:IfcProcedureType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcedureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProcedureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcess\" type=\"ifc:IfcProcess\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcess\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProduct\" type=\"ifc:IfcProduct\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProduct\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ObjectPlacement\" type=\"ifc:IfcObjectPlacement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Representation\" type=\"ifc:IfcProductRepresentation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProductDefinitionShape\" type=\"ifc:IfcProductDefinitionShape\" substitutionGroup=\"ifc:IfcProductRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProductDefinitionShape\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasShapeAspects\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShapeAspect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProductRepresentation\" type=\"ifc:IfcProductRepresentation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProductRepresentation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Representations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentation\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProfileDef\" type=\"ifc:IfcProfileDef\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ProfileType\" type=\"ifc:IfcProfileTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProfileName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProfileProperties\" type=\"ifc:IfcProfileProperties\" substitutionGroup=\"ifc:IfcExtendedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProfileProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtendedProperties\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProject\" type=\"ifc:IfcProject\" substitutionGroup=\"ifc:IfcContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcContext\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectLibrary\" type=\"ifc:IfcProjectLibrary\" substitutionGroup=\"ifc:IfcContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectLibrary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcContext\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectOrder\" type=\"ifc:IfcProjectOrder\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectOrder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProjectOrderTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectedCRS\" type=\"ifc:IfcProjectedCRS\" substitutionGroup=\"ifc:IfcCoordinateReferenceSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectedCRS\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCoordinateReferenceSystem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MapUnit\" type=\"ifc:IfcNamedUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MapProjection\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MapZone\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectionElement\" type=\"ifc:IfcProjectionElement\" substitutionGroup=\"ifc:IfcFeatureElementAddition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectionElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementAddition\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProjectionElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProperty\" type=\"ifc:IfcProperty\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProperty\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyAbstraction\" type=\"ifc:IfcPropertyAbstraction\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyAbstraction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyBoundedValue\" type=\"ifc:IfcPropertyBoundedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyBoundedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UpperBoundValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LowerBoundValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SetPointValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyDefinition\" type=\"ifc:IfcPropertyDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyDependencyRelationship\" type=\"ifc:IfcPropertyDependencyRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyDependencyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DependingProperty\" type=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"DependantProperty\" type=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyEnumeratedValue\" type=\"ifc:IfcPropertyEnumeratedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyEnumeratedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EnumerationValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EnumerationReference\" type=\"ifc:IfcPropertyEnumeration\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyEnumeration\" type=\"ifc:IfcPropertyEnumeration\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyEnumeration\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyListValue\" type=\"ifc:IfcPropertyListValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyListValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyReferenceValue\" type=\"ifc:IfcPropertyReferenceValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyReferenceValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PropertyReference\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySet\" type=\"ifc:IfcPropertySet\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySetDefinition\" type=\"ifc:IfcPropertySetDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySetDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySetTemplate\" type=\"ifc:IfcPropertySetTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplateDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySetTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplateDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertyTemplates\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyTemplate\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertyTemplate\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcPropertySetTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicableEntity\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySingleValue\" type=\"ifc:IfcPropertySingleValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySingleValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"NominalValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTableValue\" type=\"ifc:IfcPropertyTableValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTableValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DefiningValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefinedValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefiningUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefinedUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveInterpolation\" type=\"ifc:IfcCurveInterpolationEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTemplate\" type=\"ifc:IfcPropertyTemplate\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyTemplateDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTemplate\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplateDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTemplateDefinition\" type=\"ifc:IfcPropertyTemplateDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTemplateDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDevice\" type=\"ifc:IfcProtectiveDevice\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceTrippingUnit\" type=\"ifc:IfcProtectiveDeviceTrippingUnit\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceTrippingUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceTrippingUnitType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceTrippingUnitType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceType\" type=\"ifc:IfcProtectiveDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProxy\" type=\"ifc:IfcProxy\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProxy\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:attribute name=\"ProxyType\" type=\"ifc:IfcObjectTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPump\" type=\"ifc:IfcPump\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPump\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPumpType\" type=\"ifc:IfcPumpType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPumpType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityArea\" type=\"ifc:IfcQuantityArea\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"AreaValue\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityCount\" type=\"ifc:IfcQuantityCount\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityCount\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"CountValue\" type=\"ifc:IfcCountMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityLength\" type=\"ifc:IfcQuantityLength\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityLength\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"LengthValue\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantitySet\" type=\"ifc:IfcQuantitySet\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantitySet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityTime\" type=\"ifc:IfcQuantityTime\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"TimeValue\" type=\"ifc:IfcTimeMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityVolume\" type=\"ifc:IfcQuantityVolume\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityVolume\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"VolumeValue\" type=\"ifc:IfcVolumeMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityWeight\" type=\"ifc:IfcQuantityWeight\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityWeight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"WeightValue\" type=\"ifc:IfcMassMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailing\" type=\"ifc:IfcRailing\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailing\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailingType\" type=\"ifc:IfcRailingType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRamp\" type=\"ifc:IfcRamp\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRamp\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampFlight\" type=\"ifc:IfcRampFlight\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampFlight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampFlightType\" type=\"ifc:IfcRampFlightType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampFlightType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampType\" type=\"ifc:IfcRampType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRationalBSplineCurveWithKnots\" type=\"ifc:IfcRationalBSplineCurveWithKnots\" substitutionGroup=\"ifc:IfcBSplineCurveWithKnots\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRationalBSplineCurveWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurveWithKnots\">\n\t\t\t\t<xs:attribute name=\"WeightsData\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRationalBSplineSurfaceWithKnots\" type=\"ifc:IfcRationalBSplineSurfaceWithKnots\" substitutionGroup=\"ifc:IfcBSplineSurfaceWithKnots\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRationalBSplineSurfaceWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineSurfaceWithKnots\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WeightsData\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\" minOccurs=\"4\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcReal-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangleHollowProfileDef\" type=\"ifc:IfcRectangleHollowProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangleHollowProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InnerFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OuterFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangleProfileDef\" type=\"ifc:IfcRectangleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangularPyramid\" type=\"ifc:IfcRectangularPyramid\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangularPyramid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangularTrimmedSurface\" type=\"ifc:IfcRectangularTrimmedSurface\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangularTrimmedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"U1\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"V1\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"U2\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"V2\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Usense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Vsense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRecurrencePattern\" type=\"ifc:IfcRecurrencePattern\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRecurrencePattern\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TimePeriods\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimePeriod\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTimePeriod\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RecurrenceType\" type=\"ifc:IfcRecurrenceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DayComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcDayInMonthNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"WeekdayComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcDayInWeekNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"MonthComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcMonthInYearNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Position\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Interval\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Occurrences\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReference\" type=\"ifc:IfcReference\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerReference\" type=\"ifc:IfcReference\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TypeIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AttributeIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InstanceName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ListPositions\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRegularTimeSeries\" type=\"ifc:IfcRegularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRegularTimeSeries\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeriesValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTimeSeriesValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TimeStep\" type=\"ifc:IfcTimeMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcementBarProperties\" type=\"ifc:IfcReinforcementBarProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcementBarProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:attribute name=\"TotalCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SteelGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EffectiveDepth\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalBarDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarCount\" type=\"ifc:IfcCountMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcementDefinitionProperties\" type=\"ifc:IfcReinforcementDefinitionProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcementDefinitionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReinforcementSectionDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionReinforcementProperties\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSectionReinforcementProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"DefinitionType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingBar\" type=\"ifc:IfcReinforcingBar\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingBar\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingBarTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingBarType\" type=\"ifc:IfcReinforcingBarType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingBarType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BendingParameters\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBendingParameterSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBendingParameterSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingBarTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BendingShapeCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingElement\" type=\"ifc:IfcReinforcingElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"SteelGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingElementType\" type=\"ifc:IfcReinforcingElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingMesh\" type=\"ifc:IfcReinforcingMesh\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingMesh\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"MeshLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingMeshTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingMeshType\" type=\"ifc:IfcReinforcingMeshType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingMeshType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BendingParameters\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBendingParameterSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBendingParameterSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingMeshTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BendingShapeCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAggregates\" type=\"ifc:IfcRelAggregates\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAggregates\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssigns\" type=\"ifc:IfcRelAssigns\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssigns\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RelatedObjectsType\" type=\"ifc:IfcObjectTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToActor\" type=\"ifc:IfcRelAssignsToActor\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToActor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingActor\" type=\"ifc:IfcActor\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ActingRole\" type=\"ifc:IfcActorRole\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToControl\" type=\"ifc:IfcRelAssignsToControl\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToControl\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingControl\" type=\"ifc:IfcControl\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToGroup\" type=\"ifc:IfcRelAssignsToGroup\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingGroup\" type=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToGroupByFactor\" type=\"ifc:IfcRelAssignsToGroupByFactor\" substitutionGroup=\"ifc:IfcRelAssignsToGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToGroupByFactor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToGroup\">\n\t\t\t\t<xs:attribute name=\"Factor\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToProcess\" type=\"ifc:IfcRelAssignsToProcess\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToProcess\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcProcessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"QuantityInProcess\" type=\"ifc:IfcMeasureWithUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToProduct\" type=\"ifc:IfcRelAssignsToProduct\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToProduct\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProduct\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcProductSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToResource\" type=\"ifc:IfcRelAssignsToResource\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingResource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociates\" type=\"ifc:IfcRelAssociates\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociates\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinitionSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDefinitionSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesApproval\" type=\"ifc:IfcRelAssociatesApproval\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesApproval\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesClassification\" type=\"ifc:IfcRelAssociatesClassification\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesClassification\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingClassification\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesConstraint\" type=\"ifc:IfcRelAssociatesConstraint\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesConstraint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\" type=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Intent\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesDocument\" type=\"ifc:IfcRelAssociatesDocument\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesDocument\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesLibrary\" type=\"ifc:IfcRelAssociatesLibrary\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesLibrary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingLibrary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLibrarySelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesMaterial\" type=\"ifc:IfcRelAssociatesMaterial\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesMaterial\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMaterialSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnects\" type=\"ifc:IfcRelConnects\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnects\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsElements\" type=\"ifc:IfcRelConnectsElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RelatingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPathElements\" type=\"ifc:IfcRelConnectsPathElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPathElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\n\t\t\t\t<xs:attribute name=\"RelatingPriorities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"0\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"RelatedPriorities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"0\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"RelatedConnectionType\" type=\"ifc:IfcConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RelatingConnectionType\" type=\"ifc:IfcConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPortToElement\" type=\"ifc:IfcRelConnectsPortToElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPortToElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPorts\" type=\"ifc:IfcRelConnectsPorts\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPorts\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RealizingElement\" type=\"ifc:IfcElement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsStructuralActivity\" type=\"ifc:IfcRelConnectsStructuralActivity\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsStructuralActivity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralActivity\" type=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsStructuralMember\" type=\"ifc:IfcRelConnectsStructuralMember\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsStructuralMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingStructuralMember\" type=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralConnection\" type=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" type=\"ifc:IfcBoundaryCondition\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"AdditionalConditions\" type=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ConditionCoordinateSystem\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SupportedLength\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsWithEccentricity\" type=\"ifc:IfcRelConnectsWithEccentricity\" substitutionGroup=\"ifc:IfcRelConnectsStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsWithEccentricity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConnectionConstraint\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsWithRealizingElements\" type=\"ifc:IfcRelConnectsWithRealizingElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsWithRealizingElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RealizingElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ConnectionType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelContainedInSpatialStructure\" type=\"ifc:IfcRelContainedInSpatialStructure\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelContainedInSpatialStructure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProduct\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelCoversBldgElements\" type=\"ifc:IfcRelCoversBldgElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelCoversBldgElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCovering\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelCoversSpaces\" type=\"ifc:IfcRelCoversSpaces\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelCoversSpaces\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSpace\" type=\"ifc:IfcSpace\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCovering\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDeclares\" type=\"ifc:IfcRelDeclares\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDeclares\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinitionSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDefinitionSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDecomposes\" type=\"ifc:IfcRelDecomposes\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDecomposes\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefines\" type=\"ifc:IfcRelDefines\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefines\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByObject\" type=\"ifc:IfcRelDefinesByObject\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByObject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObject\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByProperties\" type=\"ifc:IfcRelDefinesByProperties\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPropertyDefinition\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPropertySetDefinitionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByTemplate\" type=\"ifc:IfcRelDefinesByTemplate\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedPropertySets\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingTemplate\" type=\"ifc:IfcPropertySetTemplate\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByType\" type=\"ifc:IfcRelDefinesByType\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingType\" type=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelFillsElement\" type=\"ifc:IfcRelFillsElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelFillsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelFlowControlElements\" type=\"ifc:IfcRelFlowControlElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelFlowControlElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedControlElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionControlElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDistributionControlElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingFlowElement\" type=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelInterferesElements\" type=\"ifc:IfcRelInterferesElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelInterferesElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InterferenceGeometry\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"InterferenceType\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ImpliedOrder\" type=\"ifc:logical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelNests\" type=\"ifc:IfcRelNests\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelNests\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelProjectsElement\" type=\"ifc:IfcRelProjectsElement\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelProjectsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedFeatureElement\" type=\"ifc:IfcFeatureElementAddition\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelReferencedInSpatialStructure\" type=\"ifc:IfcRelReferencedInSpatialStructure\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelReferencedInSpatialStructure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProduct\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSequence\" type=\"ifc:IfcRelSequence\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSequence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProcess\" type=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedProcess\" type=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TimeLag\" type=\"ifc:IfcLagTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SequenceType\" type=\"ifc:IfcSequenceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedSequenceType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelServicesBuildings\" type=\"ifc:IfcRelServicesBuildings\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelServicesBuildings\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSystem\" type=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedBuildings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSpatialElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary\" type=\"ifc:IfcRelSpaceBoundary\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSpace\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpaceBoundarySelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PhysicalOrVirtualBoundary\" type=\"ifc:IfcPhysicalOrVirtualEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InternalOrExternalBoundary\" type=\"ifc:IfcInternalOrExternalEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary1stLevel\" type=\"ifc:IfcRelSpaceBoundary1stLevel\" substitutionGroup=\"ifc:IfcRelSpaceBoundary\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary1stLevel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelSpaceBoundary\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentBoundary\" type=\"ifc:IfcRelSpaceBoundary1stLevel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary2ndLevel\" type=\"ifc:IfcRelSpaceBoundary2ndLevel\" substitutionGroup=\"ifc:IfcRelSpaceBoundary1stLevel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary2ndLevel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelSpaceBoundary1stLevel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CorrespondingBoundary\" type=\"ifc:IfcRelSpaceBoundary2ndLevel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelVoidsElement\" type=\"ifc:IfcRelVoidsElement\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelVoidsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedOpeningElement\" type=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelationship\" type=\"ifc:IfcRelationship\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelationship\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReparametrisedCompositeCurveSegment\" type=\"ifc:IfcReparametrisedCompositeCurveSegment\" substitutionGroup=\"ifc:IfcCompositeCurveSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReparametrisedCompositeCurveSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurveSegment\">\n\t\t\t\t<xs:attribute name=\"ParamLength\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentation\" type=\"ifc:IfcRepresentation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContextOfItems\" type=\"ifc:IfcRepresentationContext\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Items\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RepresentationIdentifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RepresentationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationContext\" type=\"ifc:IfcRepresentationContext\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationContext\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"ContextIdentifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ContextType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationItem\" type=\"ifc:IfcRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StyledByItem\" type=\"ifc:IfcStyledItem\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationMap\" type=\"ifc:IfcRepresentationMap\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MappingOrigin\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MappedRepresentation\" type=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResource\" type=\"ifc:IfcResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceApprovalRelationship\" type=\"ifc:IfcResourceApprovalRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceApprovalRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceConstraintRelationship\" type=\"ifc:IfcResourceConstraintRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceConstraintRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\" type=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceLevelRelationship\" type=\"ifc:IfcResourceLevelRelationship\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceLevelRelationship\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceTime\" type=\"ifc:IfcResourceTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"ScheduleWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleContour\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LevelingDelay\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsOverAllocated\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StatusTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Completion\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRevolvedAreaSolid\" type=\"ifc:IfcRevolvedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRevolvedAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcAxis1Placement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Angle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRevolvedAreaSolidTapered\" type=\"ifc:IfcRevolvedAreaSolidTapered\" substitutionGroup=\"ifc:IfcRevolvedAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRevolvedAreaSolidTapered\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRevolvedAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EndSweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRightCircularCone\" type=\"ifc:IfcRightCircularCone\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRightCircularCone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRightCircularCylinder\" type=\"ifc:IfcRightCircularCylinder\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRightCircularCylinder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoof\" type=\"ifc:IfcRoof\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoof\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRoofTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoofType\" type=\"ifc:IfcRoofType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoofType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRoofTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoot\" type=\"ifc:IfcRoot\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoot\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OwnerHistory\" type=\"ifc:IfcOwnerHistory\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"GlobalId\" type=\"ifc:IfcGloballyUniqueId\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoundedRectangleProfileDef\" type=\"ifc:IfcRoundedRectangleProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoundedRectangleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\n\t\t\t\t<xs:attribute name=\"RoundingRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcSIUnit-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:sequence/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSIUnit\" type=\"ifc:IfcSIUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSIUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSIUnit-temp\">\n\t\t\t\t<xs:attribute name=\"Prefix\" type=\"ifc:IfcSIPrefix\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcSIUnitName\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSanitaryTerminal\" type=\"ifc:IfcSanitaryTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSanitaryTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSanitaryTerminalType\" type=\"ifc:IfcSanitaryTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSanitaryTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSchedulingTime\" type=\"ifc:IfcSchedulingTime\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSchedulingTime\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedDataOrigin\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSeamCurve\" type=\"ifc:IfcSeamCurve\" substitutionGroup=\"ifc:IfcSurfaceCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSeamCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionProperties\" type=\"ifc:IfcSectionProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StartProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"EndProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SectionType\" type=\"ifc:IfcSectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionReinforcementProperties\" type=\"ifc:IfcSectionReinforcementProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionReinforcementProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SectionDefinition\" type=\"ifc:IfcSectionProperties\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CrossSectionReinforcementDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReinforcementBarProperties\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcReinforcementBarProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LongitudinalStartPosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalEndPosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransversePosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReinforcementRole\" type=\"ifc:IfcReinforcingBarRoleEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionedSpine\" type=\"ifc:IfcSectionedSpine\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionedSpine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SpineCurve\" type=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CrossSections\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CrossSectionPositions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAxis2Placement3D\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSensor\" type=\"ifc:IfcSensor\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSensor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSensorType\" type=\"ifc:IfcSensorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSensorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShadingDevice\" type=\"ifc:IfcShadingDevice\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShadingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcShadingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShadingDeviceType\" type=\"ifc:IfcShadingDeviceType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShadingDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcShadingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeAspect\" type=\"ifc:IfcShapeAspect\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeAspect\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeRepresentations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeModel\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShapeModel\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProductDefinitional\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeModel\" type=\"ifc:IfcShapeModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeRepresentation\" type=\"ifc:IfcShapeRepresentation\" substitutionGroup=\"ifc:IfcShapeModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShellBasedSurfaceModel\" type=\"ifc:IfcShellBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShellBasedSurfaceModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SbsmBoundary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSimpleProperty\" type=\"ifc:IfcSimpleProperty\" abstract=\"true\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSimpleProperty\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProperty\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSimplePropertyTemplate\" type=\"ifc:IfcSimplePropertyTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSimplePropertyTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Enumerators\" type=\"ifc:IfcPropertyEnumeration\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PrimaryUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondaryUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcSimplePropertyTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PrimaryMeasureType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondaryMeasureType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AccessState\" type=\"ifc:IfcStateEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSite\" type=\"ifc:IfcSite\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSite\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SiteAddress\" type=\"ifc:IfcPostalAddress\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RefLatitude\" type=\"ifc:List-IfcCompoundPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RefLongitude\" type=\"ifc:List-IfcCompoundPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RefElevation\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LandTitleNumber\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlab\" type=\"ifc:IfcSlab\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlab\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlabElementedCase\" type=\"ifc:IfcSlabElementedCase\" substitutionGroup=\"ifc:IfcSlab\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlabElementedCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSlab\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlabStandardCase\" type=\"ifc:IfcSlabStandardCase\" substitutionGroup=\"ifc:IfcSlab\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlabStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSlab\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlabType\" type=\"ifc:IfcSlabType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlabType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlippageConnectionCondition\" type=\"ifc:IfcSlippageConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlippageConnectionCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t<xs:attribute name=\"SlippageX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SlippageY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SlippageZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolarDevice\" type=\"ifc:IfcSolarDevice\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolarDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSolarDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolarDeviceType\" type=\"ifc:IfcSolarDeviceType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolarDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSolarDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolidModel\" type=\"ifc:IfcSolidModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolidModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpace\" type=\"ifc:IfcSpace\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElevationWithFlooring\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceHeater\" type=\"ifc:IfcSpaceHeater\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceHeater\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceHeaterType\" type=\"ifc:IfcSpaceHeaterType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceHeaterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceType\" type=\"ifc:IfcSpaceType\" substitutionGroup=\"ifc:IfcSpatialStructureElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialElement\" type=\"ifc:IfcSpatialElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContainsElements\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelContainedInSpatialStructure\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelContainedInSpatialStructure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencesElements\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelReferencedInSpatialStructure\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelReferencedInSpatialStructure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialElementType\" type=\"ifc:IfcSpatialElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ElementType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialStructureElement\" type=\"ifc:IfcSpatialStructureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialStructureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\">\n\t\t\t\t<xs:attribute name=\"CompositionType\" type=\"ifc:IfcElementCompositionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialStructureElementType\" type=\"ifc:IfcSpatialStructureElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialStructureElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialZone\" type=\"ifc:IfcSpatialZone\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialZone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpatialZoneTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialZoneType\" type=\"ifc:IfcSpatialZoneType\" substitutionGroup=\"ifc:IfcSpatialElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialZoneType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpatialZoneTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSphere\" type=\"ifc:IfcSphere\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSphere\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSphericalSurface\" type=\"ifc:IfcSphericalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSphericalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStackTerminal\" type=\"ifc:IfcStackTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStackTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStackTerminalType\" type=\"ifc:IfcStackTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStackTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStair\" type=\"ifc:IfcStair\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStair\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairFlight\" type=\"ifc:IfcStairFlight\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairFlight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"NumberOfRisers\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NumberOfTreads\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RiserHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TreadLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairFlightType\" type=\"ifc:IfcStairFlightType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairFlightType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairType\" type=\"ifc:IfcStairType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralAction\" type=\"ifc:IfcStructuralAction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralAction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\">\n\t\t\t\t<xs:attribute name=\"DestabilizingLoad\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralActivity\" type=\"ifc:IfcStructuralActivity\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralActivity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedLoad\" type=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"GlobalOrLocal\" type=\"ifc:IfcGlobalOrLocalEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralAnalysisModel\" type=\"ifc:IfcStructuralAnalysisModel\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralAnalysisModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OrientationOf2DPlane\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LoadedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralLoadGroup\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasResults\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralResultGroup\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralResultGroup\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SharedPlacement\" type=\"ifc:IfcObjectPlacement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAnalysisModelTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralConnection\" type=\"ifc:IfcStructuralConnection\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralConnection\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" type=\"ifc:IfcBoundaryCondition\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralConnectionCondition\" type=\"ifc:IfcStructuralConnectionCondition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralConnectionCondition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveAction\" type=\"ifc:IfcStructuralCurveAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\n\t\t\t\t<xs:attribute name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveConnection\" type=\"ifc:IfcStructuralCurveConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveMember\" type=\"ifc:IfcStructuralCurveMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveMemberVarying\" type=\"ifc:IfcStructuralCurveMemberVarying\" substitutionGroup=\"ifc:IfcStructuralCurveMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveMemberVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveReaction\" type=\"ifc:IfcStructuralCurveReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralItem\" type=\"ifc:IfcStructuralItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLinearAction\" type=\"ifc:IfcStructuralLinearAction\" substitutionGroup=\"ifc:IfcStructuralCurveAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLinearAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoad\" type=\"ifc:IfcStructuralLoad\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoad\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadCase\" type=\"ifc:IfcStructuralLoadCase\" substitutionGroup=\"ifc:IfcStructuralLoadGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadGroup\">\n\t\t\t\t<xs:attribute name=\"SelfWeightCoefficients\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcRatioMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadConfiguration\" type=\"ifc:IfcStructuralLoadConfiguration\" substitutionGroup=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadConfiguration\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadOrResult\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralLoadOrResult\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Locations\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\" minOccurs=\"1\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadGroup\" type=\"ifc:IfcStructuralLoadGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLoadGroupTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActionType\" type=\"ifc:IfcActionTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActionSource\" type=\"ifc:IfcActionSourceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Coefficient\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadLinearForce\" type=\"ifc:IfcStructuralLoadLinearForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadLinearForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"LinearForceX\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearForceY\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearForceZ\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentX\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentY\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentZ\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadOrResult\" type=\"ifc:IfcStructuralLoadOrResult\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadOrResult\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadPlanarForce\" type=\"ifc:IfcStructuralLoadPlanarForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadPlanarForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"PlanarForceX\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PlanarForceY\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PlanarForceZ\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacement\" type=\"ifc:IfcStructuralLoadSingleDisplacement\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"DisplacementX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DisplacementY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DisplacementZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRX\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRY\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRZ\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacementDistortion\" type=\"ifc:IfcStructuralLoadSingleDisplacementDistortion\" substitutionGroup=\"ifc:IfcStructuralLoadSingleDisplacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacementDistortion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleDisplacement\">\n\t\t\t\t<xs:attribute name=\"Distortion\" type=\"ifc:IfcCurvatureMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleForce\" type=\"ifc:IfcStructuralLoadSingleForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"ForceX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ForceY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ForceZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentX\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentY\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentZ\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleForceWarping\" type=\"ifc:IfcStructuralLoadSingleForceWarping\" substitutionGroup=\"ifc:IfcStructuralLoadSingleForce\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleForceWarping\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleForce\">\n\t\t\t\t<xs:attribute name=\"WarpingMoment\" type=\"ifc:IfcWarpingMomentMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadStatic\" type=\"ifc:IfcStructuralLoadStatic\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralLoadOrResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadStatic\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadOrResult\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadTemperature\" type=\"ifc:IfcStructuralLoadTemperature\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadTemperature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"DeltaTConstant\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DeltaTY\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DeltaTZ\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralMember\" type=\"ifc:IfcStructuralMember\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralMember\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPlanarAction\" type=\"ifc:IfcStructuralPlanarAction\" substitutionGroup=\"ifc:IfcStructuralSurfaceAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPlanarAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointAction\" type=\"ifc:IfcStructuralPointAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointConnection\" type=\"ifc:IfcStructuralPointConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConditionCoordinateSystem\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointReaction\" type=\"ifc:IfcStructuralPointReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralReaction\" type=\"ifc:IfcStructuralReaction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralReaction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralResultGroup\" type=\"ifc:IfcStructuralResultGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralResultGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ResultForLoadGroup\" type=\"ifc:IfcStructuralLoadGroup\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TheoryType\" type=\"ifc:IfcAnalysisTheoryTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsLinear\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceAction\" type=\"ifc:IfcStructuralSurfaceAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\n\t\t\t\t<xs:attribute name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceConnection\" type=\"ifc:IfcStructuralSurfaceConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceMember\" type=\"ifc:IfcStructuralSurfaceMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceMemberTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceMemberVarying\" type=\"ifc:IfcStructuralSurfaceMemberVarying\" substitutionGroup=\"ifc:IfcStructuralSurfaceMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceMemberVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceReaction\" type=\"ifc:IfcStructuralSurfaceReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyleModel\" type=\"ifc:IfcStyleModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyleModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyledItem\" type=\"ifc:IfcStyledItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyledItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcStyleAssignmentSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStyleAssignmentSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyledRepresentation\" type=\"ifc:IfcStyledRepresentation\" substitutionGroup=\"ifc:IfcStyleModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyledRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStyleModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubContractResource\" type=\"ifc:IfcSubContractResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubContractResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSubContractResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubContractResourceType\" type=\"ifc:IfcSubContractResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubContractResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSubContractResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubedge\" type=\"ifc:IfcSubedge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubedge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentEdge\" type=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurface\" type=\"ifc:IfcSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceCurve\" type=\"ifc:IfcSurfaceCurve\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Curve3D\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"AssociatedGeometry\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPcurve\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPcurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MasterRepresentation\" type=\"ifc:IfcPreferredSurfaceCurveRepresentation\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceCurveSweptAreaSolid\" type=\"ifc:IfcSurfaceCurveSweptAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceCurveSweptAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReferenceSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"StartParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceFeature\" type=\"ifc:IfcSurfaceFeature\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceFeature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSurfaceFeatureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceOfLinearExtrusion\" type=\"ifc:IfcSurfaceOfLinearExtrusion\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceOfLinearExtrusion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceOfRevolution\" type=\"ifc:IfcSurfaceOfRevolution\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceOfRevolution\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisPosition\" type=\"ifc:IfcAxis1Placement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceReinforcementArea\" type=\"ifc:IfcSurfaceReinforcementArea\" substitutionGroup=\"ifc:IfcStructuralLoadOrResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceReinforcementArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadOrResult\">\n\t\t\t\t<xs:attribute name=\"SurfaceReinforcement1\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"SurfaceReinforcement2\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"ShearReinforcement\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyle\" type=\"ifc:IfcSurfaceStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\" maxOccurs=\"5\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceStyleElementSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Side\" type=\"ifc:IfcSurfaceSide\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleLighting\" type=\"ifc:IfcSurfaceStyleLighting\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleLighting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"DiffuseReflectionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TransmissionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReflectanceColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleRefraction\" type=\"ifc:IfcSurfaceStyleRefraction\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleRefraction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"RefractionIndex\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DispersionFactor\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleRendering\" type=\"ifc:IfcSurfaceStyleRendering\" substitutionGroup=\"ifc:IfcSurfaceStyleShading\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleRendering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceStyleShading\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DiffuseColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TransmissionColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReflectionColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SpecularColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SpecularHighlight\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ReflectanceMethod\" type=\"ifc:IfcReflectanceMethodEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleShading\" type=\"ifc:IfcSurfaceStyleShading\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleShading\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SurfaceColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Transparency\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleWithTextures\" type=\"ifc:IfcSurfaceStyleWithTextures\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleWithTextures\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Textures\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceTexture\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceTexture\" type=\"ifc:IfcSurfaceTexture\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceTexture\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextureTransform\" type=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RepeatS\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RepeatT\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Mode\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Parameter\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcIdentifier\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptAreaSolid\" type=\"ifc:IfcSweptAreaSolid\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptAreaSolid\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptDiskSolid\" type=\"ifc:IfcSweptDiskSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptDiskSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InnerRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptDiskSolidPolygonal\" type=\"ifc:IfcSweptDiskSolidPolygonal\" substitutionGroup=\"ifc:IfcSweptDiskSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptDiskSolidPolygonal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptDiskSolid\">\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptSurface\" type=\"ifc:IfcSweptSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SweptCurve\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSwitchingDevice\" type=\"ifc:IfcSwitchingDevice\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSwitchingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSwitchingDeviceType\" type=\"ifc:IfcSwitchingDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSwitchingDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystem\" type=\"ifc:IfcSystem\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystemFurnitureElement\" type=\"ifc:IfcSystemFurnitureElement\" substitutionGroup=\"ifc:IfcFurnishingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystemFurnitureElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSystemFurnitureElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystemFurnitureElementType\" type=\"ifc:IfcSystemFurnitureElementType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystemFurnitureElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSystemFurnitureElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTShapeProfileDef\" type=\"ifc:IfcTShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTable\" type=\"ifc:IfcTable\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTable\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Rows\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableRow\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTableRow\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Columns\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableColumn\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTableColumn\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTableColumn\" type=\"ifc:IfcTableColumn\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTableColumn\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencePath\" type=\"ifc:IfcReference\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTableRow\" type=\"ifc:IfcTableRow\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTableRow\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RowCells\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"IsHeading\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTank\" type=\"ifc:IfcTank\" substitutionGroup=\"ifc:IfcFlowStorageDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTank\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTankType\" type=\"ifc:IfcTankType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTankType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTask\" type=\"ifc:IfcTask\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTask\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TaskTime\" type=\"ifc:IfcTaskTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WorkMethod\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsMilestone\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTaskTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskTime\" type=\"ifc:IfcTaskTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"DurationType\" type=\"ifc:IfcTaskDurationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleDuration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FreeFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TotalFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsCritical\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StatusTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualDuration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingTime\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Completion\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskTimeRecurring\" type=\"ifc:IfcTaskTimeRecurring\" substitutionGroup=\"ifc:IfcTaskTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskTimeRecurring\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTaskTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Recurrence\" type=\"ifc:IfcRecurrencePattern\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskType\" type=\"ifc:IfcTaskType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTaskTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WorkMethod\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTelecomAddress\" type=\"ifc:IfcTelecomAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTelecomAddress\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\n\t\t\t\t<xs:attribute name=\"TelephoneNumbers\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"FacsimileNumbers\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PagerNumber\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectronicMailAddresses\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"WWWHomePageURL\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MessagingIDs\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcURIReference\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendon\" type=\"ifc:IfcTendon\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendon\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionForce\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PreStress\" type=\"ifc:IfcPressureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrictionCoefficient\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AnchorageSlip\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MinCurvatureRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonAnchor\" type=\"ifc:IfcTendonAnchor\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonAnchor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonAnchorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonAnchorType\" type=\"ifc:IfcTendonAnchorType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonAnchorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonAnchorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonType\" type=\"ifc:IfcTendonType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SheathDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTessellatedFaceSet\" type=\"ifc:IfcTessellatedFaceSet\" abstract=\"true\" substitutionGroup=\"ifc:IfcTessellatedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTessellatedFaceSet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Coordinates\" type=\"ifc:IfcCartesianPointList3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"HasColours\" type=\"ifc:IfcIndexedColourMap\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"HasTextures\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIndexedTextureMap\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIndexedTextureMap\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTessellatedItem\" type=\"ifc:IfcTessellatedItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTessellatedItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextLiteral\" type=\"ifc:IfcTextLiteral\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextLiteral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Placement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Literal\" type=\"ifc:IfcPresentableText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Path\" type=\"ifc:IfcTextPath\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextLiteralWithExtent\" type=\"ifc:IfcTextLiteralWithExtent\" substitutionGroup=\"ifc:IfcTextLiteral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextLiteralWithExtent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextLiteral\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Extent\" type=\"ifc:IfcPlanarExtent\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"BoxAlignment\" type=\"ifc:IfcBoxAlignment\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyle\" type=\"ifc:IfcTextStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextCharacterAppearance\" type=\"ifc:IfcTextStyleForDefinedFont\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TextStyle\" type=\"ifc:IfcTextStyleTextModel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TextFontStyle\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTextFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelOrDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleFontModel\" type=\"ifc:IfcTextStyleFontModel\" substitutionGroup=\"ifc:IfcPreDefinedTextFont\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleFontModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedTextFont\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FontFamily\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextFontName-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTextFontName-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FontSize\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"FontStyle\" type=\"ifc:IfcFontStyle\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FontVariant\" type=\"ifc:IfcFontVariant\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FontWeight\" type=\"ifc:IfcFontWeight\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleForDefinedFont\" type=\"ifc:IfcTextStyleForDefinedFont\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleForDefinedFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Colour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BackgroundColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleTextModel\" type=\"ifc:IfcTextStyleTextModel\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleTextModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextIndent\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LetterSpacing\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WordSpacing\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LineHeight\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TextAlign\" type=\"ifc:IfcTextAlignment\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TextDecoration\" type=\"ifc:IfcTextDecoration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TextTransform\" type=\"ifc:IfcTextTransformation\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinate\" type=\"ifc:IfcTextureCoordinate\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinate\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Maps\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceTexture\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinateGenerator\" type=\"ifc:IfcTextureCoordinateGenerator\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinateGenerator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:attribute name=\"Mode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Parameter\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureMap\" type=\"ifc:IfcTextureMap\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Vertices\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextureVertex\" minOccurs=\"3\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTextureVertex\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MappedTo\" type=\"ifc:IfcFace\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureVertex\" type=\"ifc:IfcTextureVertex\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureVertex\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Coordinates\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureVertexList\" type=\"ifc:IfcTextureVertexList\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureVertexList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"TexCoordsList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimePeriod\" type=\"ifc:IfcTimePeriod\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimePeriod\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndTime\" type=\"ifc:IfcTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimeSeries\" type=\"ifc:IfcTimeSeries\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimeSeries\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeSeriesDataType\" type=\"ifc:IfcTimeSeriesDataTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedDataOrigin\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimeSeriesValue\" type=\"ifc:IfcTimeSeriesValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimeSeriesValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTopologicalRepresentationItem\" type=\"ifc:IfcTopologicalRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTopologicalRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTopologyRepresentation\" type=\"ifc:IfcTopologyRepresentation\" substitutionGroup=\"ifc:IfcShapeModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTopologyRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcToroidalSurface\" type=\"ifc:IfcToroidalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcToroidalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"MajorRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MinorRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransformer\" type=\"ifc:IfcTransformer\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransformer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransformerType\" type=\"ifc:IfcTransformerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransformerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportElement\" type=\"ifc:IfcTransportElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportElementType\" type=\"ifc:IfcTransportElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrapeziumProfileDef\" type=\"ifc:IfcTrapeziumProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrapeziumProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"BottomXDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopXDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopXOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTriangulatedFaceSet\" type=\"ifc:IfcTriangulatedFaceSet\" substitutionGroup=\"ifc:IfcTessellatedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTriangulatedFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedFaceSet\">\n\t\t\t\t<xs:attribute name=\"Normals\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Closed\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PnIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrimmedCurve\" type=\"ifc:IfcTrimmedCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrimmedCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Trim1\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Trim2\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SenseAgreement\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MasterRepresentation\" type=\"ifc:IfcTrimmingPreference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTubeBundle\" type=\"ifc:IfcTubeBundle\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTubeBundle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTubeBundleType\" type=\"ifc:IfcTubeBundleType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTubeBundleType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeObject\" type=\"ifc:IfcTypeObject\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeObject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertySets\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ApplicableOccurrence\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeProcess\" type=\"ifc:IfcTypeProcess\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeProcess\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProcessType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeProduct\" type=\"ifc:IfcTypeProduct\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeProduct\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepresentationMaps\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationMap\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeResource\" type=\"ifc:IfcTypeResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ResourceType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUShapeProfileDef\" type=\"ifc:IfcUShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitAssignment\" type=\"ifc:IfcUnitAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Units\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryControlElement\" type=\"ifc:IfcUnitaryControlElement\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryControlElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryControlElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryControlElementType\" type=\"ifc:IfcUnitaryControlElementType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryControlElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryControlElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryEquipment\" type=\"ifc:IfcUnitaryEquipment\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryEquipment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryEquipmentType\" type=\"ifc:IfcUnitaryEquipmentType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryEquipmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcValve\" type=\"ifc:IfcValve\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcValve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcValveType\" type=\"ifc:IfcValveType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcValveType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVector\" type=\"ifc:IfcVector\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVector\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Magnitude\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertex\" type=\"ifc:IfcVertex\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertex\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertexLoop\" type=\"ifc:IfcVertexLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertexLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LoopVertex\" type=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertexPoint\" type=\"ifc:IfcVertexPoint\" substitutionGroup=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertexPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcVertex\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VertexGeometry\" type=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationIsolator\" type=\"ifc:IfcVibrationIsolator\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationIsolator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationIsolatorType\" type=\"ifc:IfcVibrationIsolatorType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationIsolatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVirtualElement\" type=\"ifc:IfcVirtualElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVirtualElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVirtualGridIntersection\" type=\"ifc:IfcVirtualGridIntersection\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVirtualGridIntersection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IntersectingAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" minOccurs=\"2\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OffsetDistances\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVoidingFeature\" type=\"ifc:IfcVoidingFeature\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVoidingFeature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVoidingFeatureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWall\" type=\"ifc:IfcWall\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWall\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallElementedCase\" type=\"ifc:IfcWallElementedCase\" substitutionGroup=\"ifc:IfcWall\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallElementedCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWall\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallStandardCase\" type=\"ifc:IfcWallStandardCase\" substitutionGroup=\"ifc:IfcWall\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWall\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallType\" type=\"ifc:IfcWallType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWasteTerminal\" type=\"ifc:IfcWasteTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWasteTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWasteTerminalType\" type=\"ifc:IfcWasteTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWasteTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindow\" type=\"ifc:IfcWindow\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindow\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWindowTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PartitioningType\" type=\"ifc:IfcWindowTypePartitioningEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPartitioningType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowLiningProperties\" type=\"ifc:IfcWindowLiningProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowLiningProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MullionThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FirstTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FirstMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowPanelProperties\" type=\"ifc:IfcWindowPanelProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowPanelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcWindowPanelOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowStandardCase\" type=\"ifc:IfcWindowStandardCase\" substitutionGroup=\"ifc:IfcWindow\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWindow\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowStyle\" type=\"ifc:IfcWindowStyle\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ConstructionType\" type=\"ifc:IfcWindowStyleConstructionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcWindowStyleOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Sizeable\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowType\" type=\"ifc:IfcWindowType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWindowTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PartitioningType\" type=\"ifc:IfcWindowTypePartitioningEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPartitioningType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkCalendar\" type=\"ifc:IfcWorkCalendar\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkCalendar\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WorkingTimes\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcWorkTime\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcWorkTime\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ExceptionTimes\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcWorkTime\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcWorkTime\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkCalendarTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkControl\" type=\"ifc:IfcWorkControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkControl\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Creators\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPerson\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CreationDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Duration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TotalFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FinishTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkPlan\" type=\"ifc:IfcWorkPlan\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkPlan\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkPlanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkSchedule\" type=\"ifc:IfcWorkSchedule\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkScheduleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkTime\" type=\"ifc:IfcWorkTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RecurrencePattern\" type=\"ifc:IfcRecurrencePattern\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Start\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Finish\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcZShapeProfileDef\" type=\"ifc:IfcZShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcZShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcZone\" type=\"ifc:IfcZone\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcZone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<!-- group declarations (for SELECT data type definitions) -->\n\t<xs:group name=\"IfcActorSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcAppliedValueSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcAxis2Placement\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcBendingParameterSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcBooleanOperand\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHalfSpaceSolid\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTessellatedFaceSet\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcClassificationReferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcClassificationSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcColour\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcColourOrFactor\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCoordinateReferenceSystemSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCoordinateReferenceSystem\"/>\n\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationContext\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCsgSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveFontOrScaledCurveFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontAndScaling\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveOnSurface\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCompositeCurveOnSurface\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPcurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveOrEdgeCurve\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEdgeCurve\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveStyleFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDefinitionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDerivedMeasureValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDocumentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcFillStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedHatchStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleHatching\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTiles\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcGeometricSetSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcGridPlacementDirectionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcHatchLineDistanceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLayeredItem\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLibrarySelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLightDistributionDataSourceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLightIntensityDistribution\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMaterialSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialUsageDefinition\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMeasureValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMetricValueSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTable\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfRotationalSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfTranslationalSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcObjectReferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAddress\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTable\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPointOrVertexPoint\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVertexPoint\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPresentationStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNullStyle-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTextStyle\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProcessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProcess\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeProcess\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProductRepresentationSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProductDefinitionShape\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProductSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProduct\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeProduct\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPropertySetDefinitionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinitionSet-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcResourceObjectSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcActorRole\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\n\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcConversionBasedUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertyAbstraction\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcResourceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcResource\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeResource\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcRotationalStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSegmentIndexSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcArcIndex-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLineIndex-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcShell\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOpenShell\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSimpleValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSizeSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSolidOrShell\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSpaceBoundarySelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternalSpatialElement\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpace\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSpecularHighlightSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcSpecularExponent-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecularRoughness-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcStructuralActivityAssignmentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\n\t\t\t<xs:element ref=\"ifc:IfcStructuralItem\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcStyleAssignmentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPresentationStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPresentationStyleAssignment\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSurfaceOrFaceSurface\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcFaceBasedSurfaceModel\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFaceSurface\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSurfaceStyleElementSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSurfaceStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleLighting\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleRefraction\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleShading\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleWithTextures\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTextFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedTextFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedTextFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTimeOrRatioSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTranslationalStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTrimmingSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcUnit\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDerivedUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcVectorOrDirection\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcWarpingStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<!-- enumeration type declarations (for ENUMERATION data type definitions) -->\n\t<xs:simpleType name=\"IfcActionRequestTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"email\"/>\n\t\t\t<xs:enumeration value=\"fax\"/>\n\t\t\t<xs:enumeration value=\"phone\"/>\n\t\t\t<xs:enumeration value=\"post\"/>\n\t\t\t<xs:enumeration value=\"verbal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActionSourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dead_load_g\"/>\n\t\t\t<xs:enumeration value=\"completion_g1\"/>\n\t\t\t<xs:enumeration value=\"live_load_q\"/>\n\t\t\t<xs:enumeration value=\"snow_s\"/>\n\t\t\t<xs:enumeration value=\"wind_w\"/>\n\t\t\t<xs:enumeration value=\"prestressing_p\"/>\n\t\t\t<xs:enumeration value=\"settlement_u\"/>\n\t\t\t<xs:enumeration value=\"temperature_t\"/>\n\t\t\t<xs:enumeration value=\"earthquake_e\"/>\n\t\t\t<xs:enumeration value=\"fire\"/>\n\t\t\t<xs:enumeration value=\"impulse\"/>\n\t\t\t<xs:enumeration value=\"impact\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"erection\"/>\n\t\t\t<xs:enumeration value=\"propping\"/>\n\t\t\t<xs:enumeration value=\"system_imperfection\"/>\n\t\t\t<xs:enumeration value=\"shrinkage\"/>\n\t\t\t<xs:enumeration value=\"creep\"/>\n\t\t\t<xs:enumeration value=\"lack_of_fit\"/>\n\t\t\t<xs:enumeration value=\"buoyancy\"/>\n\t\t\t<xs:enumeration value=\"ice\"/>\n\t\t\t<xs:enumeration value=\"current\"/>\n\t\t\t<xs:enumeration value=\"wave\"/>\n\t\t\t<xs:enumeration value=\"rain\"/>\n\t\t\t<xs:enumeration value=\"brakes\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"permanent_g\"/>\n\t\t\t<xs:enumeration value=\"variable_q\"/>\n\t\t\t<xs:enumeration value=\"extraordinary_a\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActuatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electricactuator\"/>\n\t\t\t<xs:enumeration value=\"handoperatedactuator\"/>\n\t\t\t<xs:enumeration value=\"hydraulicactuator\"/>\n\t\t\t<xs:enumeration value=\"pneumaticactuator\"/>\n\t\t\t<xs:enumeration value=\"thermostaticactuator\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAddressTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"office\"/>\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"home\"/>\n\t\t\t<xs:enumeration value=\"distributionpoint\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirTerminalBoxTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"constantflow\"/>\n\t\t\t<xs:enumeration value=\"variableflowpressuredependant\"/>\n\t\t\t<xs:enumeration value=\"variableflowpressureindependant\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"diffuser\"/>\n\t\t\t<xs:enumeration value=\"grille\"/>\n\t\t\t<xs:enumeration value=\"louvre\"/>\n\t\t\t<xs:enumeration value=\"register\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirToAirHeatRecoveryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fixedplatecounterflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"fixedplatecrossflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"fixedplateparallelflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"rotarywheel\"/>\n\t\t\t<xs:enumeration value=\"runaroundcoilloop\"/>\n\t\t\t<xs:enumeration value=\"heatpipe\"/>\n\t\t\t<xs:enumeration value=\"twintowerenthalpyrecoveryloops\"/>\n\t\t\t<xs:enumeration value=\"thermosiphonsealedtubeheatexchangers\"/>\n\t\t\t<xs:enumeration value=\"thermosiphoncoiltypeheatexchangers\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAlarmTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bell\"/>\n\t\t\t<xs:enumeration value=\"breakglassbutton\"/>\n\t\t\t<xs:enumeration value=\"light\"/>\n\t\t\t<xs:enumeration value=\"manualpullbox\"/>\n\t\t\t<xs:enumeration value=\"siren\"/>\n\t\t\t<xs:enumeration value=\"whistle\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAnalysisModelTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"in_plane_loading_2d\"/>\n\t\t\t<xs:enumeration value=\"out_plane_loading_2d\"/>\n\t\t\t<xs:enumeration value=\"loading_3d\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAnalysisTheoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"first_order_theory\"/>\n\t\t\t<xs:enumeration value=\"second_order_theory\"/>\n\t\t\t<xs:enumeration value=\"third_order_theory\"/>\n\t\t\t<xs:enumeration value=\"full_nonlinear_theory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcArithmeticOperatorEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"add\"/>\n\t\t\t<xs:enumeration value=\"divide\"/>\n\t\t\t<xs:enumeration value=\"multiply\"/>\n\t\t\t<xs:enumeration value=\"subtract\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAssemblyPlaceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"factory\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAudioVisualApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"amplifier\"/>\n\t\t\t<xs:enumeration value=\"camera\"/>\n\t\t\t<xs:enumeration value=\"display\"/>\n\t\t\t<xs:enumeration value=\"microphone\"/>\n\t\t\t<xs:enumeration value=\"player\"/>\n\t\t\t<xs:enumeration value=\"projector\"/>\n\t\t\t<xs:enumeration value=\"receiver\"/>\n\t\t\t<xs:enumeration value=\"speaker\"/>\n\t\t\t<xs:enumeration value=\"switcher\"/>\n\t\t\t<xs:enumeration value=\"telephone\"/>\n\t\t\t<xs:enumeration value=\"tuner\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBSplineCurveForm\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"polyline_form\"/>\n\t\t\t<xs:enumeration value=\"circular_arc\"/>\n\t\t\t<xs:enumeration value=\"elliptic_arc\"/>\n\t\t\t<xs:enumeration value=\"parabolic_arc\"/>\n\t\t\t<xs:enumeration value=\"hyperbolic_arc\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBSplineSurfaceForm\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plane_surf\"/>\n\t\t\t<xs:enumeration value=\"cylindrical_surf\"/>\n\t\t\t<xs:enumeration value=\"conical_surf\"/>\n\t\t\t<xs:enumeration value=\"spherical_surf\"/>\n\t\t\t<xs:enumeration value=\"toroidal_surf\"/>\n\t\t\t<xs:enumeration value=\"surf_of_revolution\"/>\n\t\t\t<xs:enumeration value=\"ruled_surf\"/>\n\t\t\t<xs:enumeration value=\"generalised_cone\"/>\n\t\t\t<xs:enumeration value=\"quadric_surf\"/>\n\t\t\t<xs:enumeration value=\"surf_of_linear_extrusion\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBeamTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beam\"/>\n\t\t\t<xs:enumeration value=\"joist\"/>\n\t\t\t<xs:enumeration value=\"hollowcore\"/>\n\t\t\t<xs:enumeration value=\"lintel\"/>\n\t\t\t<xs:enumeration value=\"spandrel\"/>\n\t\t\t<xs:enumeration value=\"t_beam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBenchmarkEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"greaterthan\"/>\n\t\t\t<xs:enumeration value=\"greaterthanorequalto\"/>\n\t\t\t<xs:enumeration value=\"lessthan\"/>\n\t\t\t<xs:enumeration value=\"lessthanorequalto\"/>\n\t\t\t<xs:enumeration value=\"equalto\"/>\n\t\t\t<xs:enumeration value=\"notequalto\"/>\n\t\t\t<xs:enumeration value=\"includes\"/>\n\t\t\t<xs:enumeration value=\"notincludes\"/>\n\t\t\t<xs:enumeration value=\"includedin\"/>\n\t\t\t<xs:enumeration value=\"notincludedin\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBoilerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"water\"/>\n\t\t\t<xs:enumeration value=\"steam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBooleanOperator\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"union\"/>\n\t\t\t<xs:enumeration value=\"intersection\"/>\n\t\t\t<xs:enumeration value=\"difference\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingElementPartTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"insulation\"/>\n\t\t\t<xs:enumeration value=\"precastpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingElementProxyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"complex\"/>\n\t\t\t<xs:enumeration value=\"element\"/>\n\t\t\t<xs:enumeration value=\"partial\"/>\n\t\t\t<xs:enumeration value=\"provisionforvoid\"/>\n\t\t\t<xs:enumeration value=\"provisionforspace\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingSystemTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fenestration\"/>\n\t\t\t<xs:enumeration value=\"foundation\"/>\n\t\t\t<xs:enumeration value=\"loadbearing\"/>\n\t\t\t<xs:enumeration value=\"outershell\"/>\n\t\t\t<xs:enumeration value=\"shading\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBurnerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableCarrierFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"cross\"/>\n\t\t\t<xs:enumeration value=\"reducer\"/>\n\t\t\t<xs:enumeration value=\"tee\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableCarrierSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cableladdersegment\"/>\n\t\t\t<xs:enumeration value=\"cabletraysegment\"/>\n\t\t\t<xs:enumeration value=\"cabletrunkingsegment\"/>\n\t\t\t<xs:enumeration value=\"conduitsegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"busbarsegment\"/>\n\t\t\t<xs:enumeration value=\"cablesegment\"/>\n\t\t\t<xs:enumeration value=\"conductorsegment\"/>\n\t\t\t<xs:enumeration value=\"coresegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChangeActionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"nochange\"/>\n\t\t\t<xs:enumeration value=\"modified\"/>\n\t\t\t<xs:enumeration value=\"added\"/>\n\t\t\t<xs:enumeration value=\"deleted\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChillerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aircooled\"/>\n\t\t\t<xs:enumeration value=\"watercooled\"/>\n\t\t\t<xs:enumeration value=\"heatrecovery\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChimneyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoilTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dxcoolingcoil\"/>\n\t\t\t<xs:enumeration value=\"electricheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"gasheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"hydroniccoil\"/>\n\t\t\t<xs:enumeration value=\"steamheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"watercoolingcoil\"/>\n\t\t\t<xs:enumeration value=\"waterheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcColumnTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"column\"/>\n\t\t\t<xs:enumeration value=\"pilaster\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCommunicationsApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"antenna\"/>\n\t\t\t<xs:enumeration value=\"computer\"/>\n\t\t\t<xs:enumeration value=\"fax\"/>\n\t\t\t<xs:enumeration value=\"gateway\"/>\n\t\t\t<xs:enumeration value=\"modem\"/>\n\t\t\t<xs:enumeration value=\"networkappliance\"/>\n\t\t\t<xs:enumeration value=\"networkbridge\"/>\n\t\t\t<xs:enumeration value=\"networkhub\"/>\n\t\t\t<xs:enumeration value=\"printer\"/>\n\t\t\t<xs:enumeration value=\"repeater\"/>\n\t\t\t<xs:enumeration value=\"router\"/>\n\t\t\t<xs:enumeration value=\"scanner\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcComplexPropertyTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"p_complex\"/>\n\t\t\t<xs:enumeration value=\"q_complex\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCompressorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dynamic\"/>\n\t\t\t<xs:enumeration value=\"reciprocating\"/>\n\t\t\t<xs:enumeration value=\"rotary\"/>\n\t\t\t<xs:enumeration value=\"scroll\"/>\n\t\t\t<xs:enumeration value=\"trochoidal\"/>\n\t\t\t<xs:enumeration value=\"singlestage\"/>\n\t\t\t<xs:enumeration value=\"booster\"/>\n\t\t\t<xs:enumeration value=\"opentype\"/>\n\t\t\t<xs:enumeration value=\"hermetic\"/>\n\t\t\t<xs:enumeration value=\"semihermetic\"/>\n\t\t\t<xs:enumeration value=\"weldedshellhermetic\"/>\n\t\t\t<xs:enumeration value=\"rollingpiston\"/>\n\t\t\t<xs:enumeration value=\"rotaryvane\"/>\n\t\t\t<xs:enumeration value=\"singlescrew\"/>\n\t\t\t<xs:enumeration value=\"twinscrew\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCondenserTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aircooled\"/>\n\t\t\t<xs:enumeration value=\"evaporativecooled\"/>\n\t\t\t<xs:enumeration value=\"watercooled\"/>\n\t\t\t<xs:enumeration value=\"watercooledbrazedplate\"/>\n\t\t\t<xs:enumeration value=\"watercooledshellcoil\"/>\n\t\t\t<xs:enumeration value=\"watercooledshelltube\"/>\n\t\t\t<xs:enumeration value=\"watercooledtubeintube\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConnectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"atpath\"/>\n\t\t\t<xs:enumeration value=\"atstart\"/>\n\t\t\t<xs:enumeration value=\"atend\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstraintEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"hard\"/>\n\t\t\t<xs:enumeration value=\"soft\"/>\n\t\t\t<xs:enumeration value=\"advisory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionEquipmentResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"demolishing\"/>\n\t\t\t<xs:enumeration value=\"earthmoving\"/>\n\t\t\t<xs:enumeration value=\"erecting\"/>\n\t\t\t<xs:enumeration value=\"heating\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"paving\"/>\n\t\t\t<xs:enumeration value=\"pumping\"/>\n\t\t\t<xs:enumeration value=\"transporting\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionMaterialResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aggregates\"/>\n\t\t\t<xs:enumeration value=\"concrete\"/>\n\t\t\t<xs:enumeration value=\"drywall\"/>\n\t\t\t<xs:enumeration value=\"fuel\"/>\n\t\t\t<xs:enumeration value=\"gypsum\"/>\n\t\t\t<xs:enumeration value=\"masonry\"/>\n\t\t\t<xs:enumeration value=\"metal\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionProductResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assembly\"/>\n\t\t\t<xs:enumeration value=\"formwork\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcControllerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floating\"/>\n\t\t\t<xs:enumeration value=\"programmable\"/>\n\t\t\t<xs:enumeration value=\"proportional\"/>\n\t\t\t<xs:enumeration value=\"multiposition\"/>\n\t\t\t<xs:enumeration value=\"twoposition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCooledBeamTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"active\"/>\n\t\t\t<xs:enumeration value=\"passive\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoolingTowerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"naturaldraft\"/>\n\t\t\t<xs:enumeration value=\"mechanicalinduceddraft\"/>\n\t\t\t<xs:enumeration value=\"mechanicalforceddraft\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCostItemTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCostScheduleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"budget\"/>\n\t\t\t<xs:enumeration value=\"costplan\"/>\n\t\t\t<xs:enumeration value=\"estimate\"/>\n\t\t\t<xs:enumeration value=\"tender\"/>\n\t\t\t<xs:enumeration value=\"pricedbillofquantities\"/>\n\t\t\t<xs:enumeration value=\"unpricedbillofquantities\"/>\n\t\t\t<xs:enumeration value=\"scheduleofrates\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoveringTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ceiling\"/>\n\t\t\t<xs:enumeration value=\"flooring\"/>\n\t\t\t<xs:enumeration value=\"cladding\"/>\n\t\t\t<xs:enumeration value=\"roofing\"/>\n\t\t\t<xs:enumeration value=\"molding\"/>\n\t\t\t<xs:enumeration value=\"skirtingboard\"/>\n\t\t\t<xs:enumeration value=\"insulation\"/>\n\t\t\t<xs:enumeration value=\"membrane\"/>\n\t\t\t<xs:enumeration value=\"sleeving\"/>\n\t\t\t<xs:enumeration value=\"wrapping\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCrewResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"office\"/>\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurtainWallTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurveInterpolationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"linear\"/>\n\t\t\t<xs:enumeration value=\"log_linear\"/>\n\t\t\t<xs:enumeration value=\"log_log\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDamperTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"backdraftdamper\"/>\n\t\t\t<xs:enumeration value=\"balancingdamper\"/>\n\t\t\t<xs:enumeration value=\"blastdamper\"/>\n\t\t\t<xs:enumeration value=\"controldamper\"/>\n\t\t\t<xs:enumeration value=\"firedamper\"/>\n\t\t\t<xs:enumeration value=\"firesmokedamper\"/>\n\t\t\t<xs:enumeration value=\"fumehoodexhaust\"/>\n\t\t\t<xs:enumeration value=\"gravitydamper\"/>\n\t\t\t<xs:enumeration value=\"gravityreliefdamper\"/>\n\t\t\t<xs:enumeration value=\"reliefdamper\"/>\n\t\t\t<xs:enumeration value=\"smokedamper\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDataOriginEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"measured\"/>\n\t\t\t<xs:enumeration value=\"predicted\"/>\n\t\t\t<xs:enumeration value=\"simulated\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDerivedUnitEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"angularvelocityunit\"/>\n\t\t\t<xs:enumeration value=\"areadensityunit\"/>\n\t\t\t<xs:enumeration value=\"compoundplaneangleunit\"/>\n\t\t\t<xs:enumeration value=\"dynamicviscosityunit\"/>\n\t\t\t<xs:enumeration value=\"heatfluxdensityunit\"/>\n\t\t\t<xs:enumeration value=\"integercountrateunit\"/>\n\t\t\t<xs:enumeration value=\"isothermalmoisturecapacityunit\"/>\n\t\t\t<xs:enumeration value=\"kinematicviscosityunit\"/>\n\t\t\t<xs:enumeration value=\"linearvelocityunit\"/>\n\t\t\t<xs:enumeration value=\"massdensityunit\"/>\n\t\t\t<xs:enumeration value=\"massflowrateunit\"/>\n\t\t\t<xs:enumeration value=\"moisturediffusivityunit\"/>\n\t\t\t<xs:enumeration value=\"molecularweightunit\"/>\n\t\t\t<xs:enumeration value=\"specificheatcapacityunit\"/>\n\t\t\t<xs:enumeration value=\"thermaladmittanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermalconductanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermalresistanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermaltransmittanceunit\"/>\n\t\t\t<xs:enumeration value=\"vaporpermeabilityunit\"/>\n\t\t\t<xs:enumeration value=\"volumetricflowrateunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalfrequencyunit\"/>\n\t\t\t<xs:enumeration value=\"torqueunit\"/>\n\t\t\t<xs:enumeration value=\"momentofinertiaunit\"/>\n\t\t\t<xs:enumeration value=\"linearmomentunit\"/>\n\t\t\t<xs:enumeration value=\"linearforceunit\"/>\n\t\t\t<xs:enumeration value=\"planarforceunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofelasticityunit\"/>\n\t\t\t<xs:enumeration value=\"shearmodulusunit\"/>\n\t\t\t<xs:enumeration value=\"linearstiffnessunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalstiffnessunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"accelerationunit\"/>\n\t\t\t<xs:enumeration value=\"curvatureunit\"/>\n\t\t\t<xs:enumeration value=\"heatingvalueunit\"/>\n\t\t\t<xs:enumeration value=\"ionconcentrationunit\"/>\n\t\t\t<xs:enumeration value=\"luminousintensitydistributionunit\"/>\n\t\t\t<xs:enumeration value=\"massperlengthunit\"/>\n\t\t\t<xs:enumeration value=\"modulusoflinearsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofrotationalsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"phunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalmassunit\"/>\n\t\t\t<xs:enumeration value=\"sectionareaintegralunit\"/>\n\t\t\t<xs:enumeration value=\"sectionmodulusunit\"/>\n\t\t\t<xs:enumeration value=\"soundpowerlevelunit\"/>\n\t\t\t<xs:enumeration value=\"soundpowerunit\"/>\n\t\t\t<xs:enumeration value=\"soundpressurelevelunit\"/>\n\t\t\t<xs:enumeration value=\"soundpressureunit\"/>\n\t\t\t<xs:enumeration value=\"temperaturegradientunit\"/>\n\t\t\t<xs:enumeration value=\"temperaturerateofchangeunit\"/>\n\t\t\t<xs:enumeration value=\"thermalexpansioncoefficientunit\"/>\n\t\t\t<xs:enumeration value=\"warpingconstantunit\"/>\n\t\t\t<xs:enumeration value=\"warpingmomentunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDirectionSenseEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"positive\"/>\n\t\t\t<xs:enumeration value=\"negative\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDiscreteAccessoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchorplate\"/>\n\t\t\t<xs:enumeration value=\"bracket\"/>\n\t\t\t<xs:enumeration value=\"shoe\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionChamberElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"formedduct\"/>\n\t\t\t<xs:enumeration value=\"inspectionchamber\"/>\n\t\t\t<xs:enumeration value=\"inspectionpit\"/>\n\t\t\t<xs:enumeration value=\"manhole\"/>\n\t\t\t<xs:enumeration value=\"meterchamber\"/>\n\t\t\t<xs:enumeration value=\"sump\"/>\n\t\t\t<xs:enumeration value=\"trench\"/>\n\t\t\t<xs:enumeration value=\"valvechamber\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionPortTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cable\"/>\n\t\t\t<xs:enumeration value=\"cablecarrier\"/>\n\t\t\t<xs:enumeration value=\"duct\"/>\n\t\t\t<xs:enumeration value=\"pipe\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionSystemEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airconditioning\"/>\n\t\t\t<xs:enumeration value=\"audiovisual\"/>\n\t\t\t<xs:enumeration value=\"chemical\"/>\n\t\t\t<xs:enumeration value=\"chilledwater\"/>\n\t\t\t<xs:enumeration value=\"communication\"/>\n\t\t\t<xs:enumeration value=\"compressedair\"/>\n\t\t\t<xs:enumeration value=\"condenserwater\"/>\n\t\t\t<xs:enumeration value=\"control\"/>\n\t\t\t<xs:enumeration value=\"conveying\"/>\n\t\t\t<xs:enumeration value=\"data\"/>\n\t\t\t<xs:enumeration value=\"disposal\"/>\n\t\t\t<xs:enumeration value=\"domesticcoldwater\"/>\n\t\t\t<xs:enumeration value=\"domestichotwater\"/>\n\t\t\t<xs:enumeration value=\"drainage\"/>\n\t\t\t<xs:enumeration value=\"earthing\"/>\n\t\t\t<xs:enumeration value=\"electrical\"/>\n\t\t\t<xs:enumeration value=\"electroacoustic\"/>\n\t\t\t<xs:enumeration value=\"exhaust\"/>\n\t\t\t<xs:enumeration value=\"fireprotection\"/>\n\t\t\t<xs:enumeration value=\"fuel\"/>\n\t\t\t<xs:enumeration value=\"gas\"/>\n\t\t\t<xs:enumeration value=\"hazardous\"/>\n\t\t\t<xs:enumeration value=\"heating\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"lightningprotection\"/>\n\t\t\t<xs:enumeration value=\"municipalsolidwaste\"/>\n\t\t\t<xs:enumeration value=\"oil\"/>\n\t\t\t<xs:enumeration value=\"operational\"/>\n\t\t\t<xs:enumeration value=\"powergeneration\"/>\n\t\t\t<xs:enumeration value=\"rainwater\"/>\n\t\t\t<xs:enumeration value=\"refrigeration\"/>\n\t\t\t<xs:enumeration value=\"security\"/>\n\t\t\t<xs:enumeration value=\"sewage\"/>\n\t\t\t<xs:enumeration value=\"signal\"/>\n\t\t\t<xs:enumeration value=\"stormwater\"/>\n\t\t\t<xs:enumeration value=\"telephone\"/>\n\t\t\t<xs:enumeration value=\"tv\"/>\n\t\t\t<xs:enumeration value=\"vacuum\"/>\n\t\t\t<xs:enumeration value=\"vent\"/>\n\t\t\t<xs:enumeration value=\"ventilation\"/>\n\t\t\t<xs:enumeration value=\"wastewater\"/>\n\t\t\t<xs:enumeration value=\"watersupply\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDocumentConfidentialityEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"public\"/>\n\t\t\t<xs:enumeration value=\"restricted\"/>\n\t\t\t<xs:enumeration value=\"confidential\"/>\n\t\t\t<xs:enumeration value=\"personal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDocumentStatusEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"draft\"/>\n\t\t\t<xs:enumeration value=\"finaldraft\"/>\n\t\t\t<xs:enumeration value=\"final\"/>\n\t\t\t<xs:enumeration value=\"revision\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorPanelOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"swinging\"/>\n\t\t\t<xs:enumeration value=\"double_acting\"/>\n\t\t\t<xs:enumeration value=\"sliding\"/>\n\t\t\t<xs:enumeration value=\"folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"fixedpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorPanelPositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"middle\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorStyleConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aluminium\"/>\n\t\t\t<xs:enumeration value=\"high_grade_steel\"/>\n\t\t\t<xs:enumeration value=\"steel\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"aluminium_wood\"/>\n\t\t\t<xs:enumeration value=\"aluminium_plastic\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorStyleOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_swing_left\"/>\n\t\t\t<xs:enumeration value=\"single_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_left\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_right\"/>\n\t\t\t<xs:enumeration value=\"double_swing_left\"/>\n\t\t\t<xs:enumeration value=\"double_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_double_swing\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_left\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_sliding\"/>\n\t\t\t<xs:enumeration value=\"folding_to_left\"/>\n\t\t\t<xs:enumeration value=\"folding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"door\"/>\n\t\t\t<xs:enumeration value=\"gate\"/>\n\t\t\t<xs:enumeration value=\"trapdoor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorTypeOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_swing_left\"/>\n\t\t\t<xs:enumeration value=\"single_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_left\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_right\"/>\n\t\t\t<xs:enumeration value=\"double_swing_left\"/>\n\t\t\t<xs:enumeration value=\"double_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_double_swing\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_left\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_sliding\"/>\n\t\t\t<xs:enumeration value=\"folding_to_left\"/>\n\t\t\t<xs:enumeration value=\"folding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"swing_fixed_left\"/>\n\t\t\t<xs:enumeration value=\"swing_fixed_right\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"obstruction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctSilencerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flatoval\"/>\n\t\t\t<xs:enumeration value=\"rectangular\"/>\n\t\t\t<xs:enumeration value=\"round\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dishwasher\"/>\n\t\t\t<xs:enumeration value=\"electriccooker\"/>\n\t\t\t<xs:enumeration value=\"freestandingelectricheater\"/>\n\t\t\t<xs:enumeration value=\"freestandingfan\"/>\n\t\t\t<xs:enumeration value=\"freestandingwaterheater\"/>\n\t\t\t<xs:enumeration value=\"freestandingwatercooler\"/>\n\t\t\t<xs:enumeration value=\"freezer\"/>\n\t\t\t<xs:enumeration value=\"fridge_freezer\"/>\n\t\t\t<xs:enumeration value=\"handdryer\"/>\n\t\t\t<xs:enumeration value=\"kitchenmachine\"/>\n\t\t\t<xs:enumeration value=\"microwave\"/>\n\t\t\t<xs:enumeration value=\"photocopier\"/>\n\t\t\t<xs:enumeration value=\"refrigerator\"/>\n\t\t\t<xs:enumeration value=\"tumbledryer\"/>\n\t\t\t<xs:enumeration value=\"vendingmachine\"/>\n\t\t\t<xs:enumeration value=\"washingmachine\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricDistributionBoardTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"consumerunit\"/>\n\t\t\t<xs:enumeration value=\"distributionboard\"/>\n\t\t\t<xs:enumeration value=\"motorcontrolcentre\"/>\n\t\t\t<xs:enumeration value=\"switchboard\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricFlowStorageDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"battery\"/>\n\t\t\t<xs:enumeration value=\"capacitorbank\"/>\n\t\t\t<xs:enumeration value=\"harmonicfilter\"/>\n\t\t\t<xs:enumeration value=\"inductorbank\"/>\n\t\t\t<xs:enumeration value=\"ups\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricGeneratorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"chp\"/>\n\t\t\t<xs:enumeration value=\"enginegenerator\"/>\n\t\t\t<xs:enumeration value=\"standalone\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricMotorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dc\"/>\n\t\t\t<xs:enumeration value=\"induction\"/>\n\t\t\t<xs:enumeration value=\"polyphase\"/>\n\t\t\t<xs:enumeration value=\"reluctancesynchronous\"/>\n\t\t\t<xs:enumeration value=\"synchronous\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricTimeControlTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"timeclock\"/>\n\t\t\t<xs:enumeration value=\"timedelay\"/>\n\t\t\t<xs:enumeration value=\"relay\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElementAssemblyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"accessory_assembly\"/>\n\t\t\t<xs:enumeration value=\"arch\"/>\n\t\t\t<xs:enumeration value=\"beam_grid\"/>\n\t\t\t<xs:enumeration value=\"braced_frame\"/>\n\t\t\t<xs:enumeration value=\"girder\"/>\n\t\t\t<xs:enumeration value=\"reinforcement_unit\"/>\n\t\t\t<xs:enumeration value=\"rigid_frame\"/>\n\t\t\t<xs:enumeration value=\"slab_field\"/>\n\t\t\t<xs:enumeration value=\"truss\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElementCompositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"complex\"/>\n\t\t\t<xs:enumeration value=\"element\"/>\n\t\t\t<xs:enumeration value=\"partial\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEngineTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"externalcombustion\"/>\n\t\t\t<xs:enumeration value=\"internalcombustion\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEvaporativeCoolerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directevaporativerandommediaaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativerigidmediaaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativeslingerspackagedaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativepackagedrotaryaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativeairwasher\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativepackageaircooler\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativewetcoil\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativecoolingtowerorcoilcooler\"/>\n\t\t\t<xs:enumeration value=\"indirectdirectcombination\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEvaporatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directexpansion\"/>\n\t\t\t<xs:enumeration value=\"directexpansionshellandtube\"/>\n\t\t\t<xs:enumeration value=\"directexpansiontubeintube\"/>\n\t\t\t<xs:enumeration value=\"directexpansionbrazedplate\"/>\n\t\t\t<xs:enumeration value=\"floodedshellandtube\"/>\n\t\t\t<xs:enumeration value=\"shellandcoil\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEventTriggerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"eventrule\"/>\n\t\t\t<xs:enumeration value=\"eventmessage\"/>\n\t\t\t<xs:enumeration value=\"eventtime\"/>\n\t\t\t<xs:enumeration value=\"eventcomplex\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEventTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"startevent\"/>\n\t\t\t<xs:enumeration value=\"endevent\"/>\n\t\t\t<xs:enumeration value=\"intermediateevent\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcExternalSpatialElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"external_earth\"/>\n\t\t\t<xs:enumeration value=\"external_water\"/>\n\t\t\t<xs:enumeration value=\"external_fire\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFanTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"centrifugalforwardcurved\"/>\n\t\t\t<xs:enumeration value=\"centrifugalradial\"/>\n\t\t\t<xs:enumeration value=\"centrifugalbackwardinclinedcurved\"/>\n\t\t\t<xs:enumeration value=\"centrifugalairfoil\"/>\n\t\t\t<xs:enumeration value=\"tubeaxial\"/>\n\t\t\t<xs:enumeration value=\"vaneaxial\"/>\n\t\t\t<xs:enumeration value=\"propelloraxial\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFastenerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"glue\"/>\n\t\t\t<xs:enumeration value=\"mortar\"/>\n\t\t\t<xs:enumeration value=\"weld\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFilterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airparticlefilter\"/>\n\t\t\t<xs:enumeration value=\"compressedairfilter\"/>\n\t\t\t<xs:enumeration value=\"odorfilter\"/>\n\t\t\t<xs:enumeration value=\"oilfilter\"/>\n\t\t\t<xs:enumeration value=\"strainer\"/>\n\t\t\t<xs:enumeration value=\"waterfilter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFireSuppressionTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"breechinginlet\"/>\n\t\t\t<xs:enumeration value=\"firehydrant\"/>\n\t\t\t<xs:enumeration value=\"hosereel\"/>\n\t\t\t<xs:enumeration value=\"sprinkler\"/>\n\t\t\t<xs:enumeration value=\"sprinklerdeflector\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"source\"/>\n\t\t\t<xs:enumeration value=\"sink\"/>\n\t\t\t<xs:enumeration value=\"sourceandsink\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowInstrumentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pressuregauge\"/>\n\t\t\t<xs:enumeration value=\"thermometer\"/>\n\t\t\t<xs:enumeration value=\"ammeter\"/>\n\t\t\t<xs:enumeration value=\"frequencymeter\"/>\n\t\t\t<xs:enumeration value=\"powerfactormeter\"/>\n\t\t\t<xs:enumeration value=\"phaseanglemeter\"/>\n\t\t\t<xs:enumeration value=\"voltmeter_peak\"/>\n\t\t\t<xs:enumeration value=\"voltmeter_rms\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowMeterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"energymeter\"/>\n\t\t\t<xs:enumeration value=\"gasmeter\"/>\n\t\t\t<xs:enumeration value=\"oilmeter\"/>\n\t\t\t<xs:enumeration value=\"watermeter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFootingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"caisson_foundation\"/>\n\t\t\t<xs:enumeration value=\"footing_beam\"/>\n\t\t\t<xs:enumeration value=\"pad_footing\"/>\n\t\t\t<xs:enumeration value=\"pile_cap\"/>\n\t\t\t<xs:enumeration value=\"strip_footing\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFurnitureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"chair\"/>\n\t\t\t<xs:enumeration value=\"table\"/>\n\t\t\t<xs:enumeration value=\"desk\"/>\n\t\t\t<xs:enumeration value=\"bed\"/>\n\t\t\t<xs:enumeration value=\"filecabinet\"/>\n\t\t\t<xs:enumeration value=\"shelf\"/>\n\t\t\t<xs:enumeration value=\"sofa\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGeographicElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"terrain\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGeometricProjectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"graph_view\"/>\n\t\t\t<xs:enumeration value=\"sketch_view\"/>\n\t\t\t<xs:enumeration value=\"model_view\"/>\n\t\t\t<xs:enumeration value=\"plan_view\"/>\n\t\t\t<xs:enumeration value=\"reflected_plan_view\"/>\n\t\t\t<xs:enumeration value=\"section_view\"/>\n\t\t\t<xs:enumeration value=\"elevation_view\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGlobalOrLocalEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"global_coords\"/>\n\t\t\t<xs:enumeration value=\"local_coords\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGridTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rectangular\"/>\n\t\t\t<xs:enumeration value=\"radial\"/>\n\t\t\t<xs:enumeration value=\"triangular\"/>\n\t\t\t<xs:enumeration value=\"irregular\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatExchangerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plate\"/>\n\t\t\t<xs:enumeration value=\"shellandtube\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHumidifierTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"steaminjection\"/>\n\t\t\t<xs:enumeration value=\"adiabaticairwasher\"/>\n\t\t\t<xs:enumeration value=\"adiabaticpan\"/>\n\t\t\t<xs:enumeration value=\"adiabaticwettedelement\"/>\n\t\t\t<xs:enumeration value=\"adiabaticatomizing\"/>\n\t\t\t<xs:enumeration value=\"adiabaticultrasonic\"/>\n\t\t\t<xs:enumeration value=\"adiabaticrigidmedia\"/>\n\t\t\t<xs:enumeration value=\"adiabaticcompressedairnozzle\"/>\n\t\t\t<xs:enumeration value=\"assistedelectric\"/>\n\t\t\t<xs:enumeration value=\"assistednaturalgas\"/>\n\t\t\t<xs:enumeration value=\"assistedpropane\"/>\n\t\t\t<xs:enumeration value=\"assistedbutane\"/>\n\t\t\t<xs:enumeration value=\"assistedsteam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInterceptorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cyclonic\"/>\n\t\t\t<xs:enumeration value=\"grease\"/>\n\t\t\t<xs:enumeration value=\"oil\"/>\n\t\t\t<xs:enumeration value=\"petrol\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInternalOrExternalEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"internal\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"external_earth\"/>\n\t\t\t<xs:enumeration value=\"external_water\"/>\n\t\t\t<xs:enumeration value=\"external_fire\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInventoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assetinventory\"/>\n\t\t\t<xs:enumeration value=\"spaceinventory\"/>\n\t\t\t<xs:enumeration value=\"furnitureinventory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcJunctionBoxTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"data\"/>\n\t\t\t<xs:enumeration value=\"power\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcKnotType\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"uniform_knots\"/>\n\t\t\t<xs:enumeration value=\"quasi_uniform_knots\"/>\n\t\t\t<xs:enumeration value=\"piecewise_bezier_knots\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLaborResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"administration\"/>\n\t\t\t<xs:enumeration value=\"carpentry\"/>\n\t\t\t<xs:enumeration value=\"cleaning\"/>\n\t\t\t<xs:enumeration value=\"concrete\"/>\n\t\t\t<xs:enumeration value=\"drywall\"/>\n\t\t\t<xs:enumeration value=\"electric\"/>\n\t\t\t<xs:enumeration value=\"finishing\"/>\n\t\t\t<xs:enumeration value=\"flooring\"/>\n\t\t\t<xs:enumeration value=\"general\"/>\n\t\t\t<xs:enumeration value=\"hvac\"/>\n\t\t\t<xs:enumeration value=\"landscaping\"/>\n\t\t\t<xs:enumeration value=\"masonry\"/>\n\t\t\t<xs:enumeration value=\"painting\"/>\n\t\t\t<xs:enumeration value=\"paving\"/>\n\t\t\t<xs:enumeration value=\"plumbing\"/>\n\t\t\t<xs:enumeration value=\"roofing\"/>\n\t\t\t<xs:enumeration value=\"sitegrading\"/>\n\t\t\t<xs:enumeration value=\"steelwork\"/>\n\t\t\t<xs:enumeration value=\"surveying\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLampTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\n\t\t\t<xs:enumeration value=\"halogen\"/>\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"led\"/>\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\n\t\t\t<xs:enumeration value=\"oled\"/>\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLayerSetDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"axis1\"/>\n\t\t\t<xs:enumeration value=\"axis2\"/>\n\t\t\t<xs:enumeration value=\"axis3\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightDistributionCurveEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"type_a\"/>\n\t\t\t<xs:enumeration value=\"type_b\"/>\n\t\t\t<xs:enumeration value=\"type_c\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightEmissionSourceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"lightemittingdiode\"/>\n\t\t\t<xs:enumeration value=\"lowpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"lowvoltagehalogen\"/>\n\t\t\t<xs:enumeration value=\"mainvoltagehalogen\"/>\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightFixtureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pointsource\"/>\n\t\t\t<xs:enumeration value=\"directionsource\"/>\n\t\t\t<xs:enumeration value=\"securitylighting\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLoadGroupTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"load_group\"/>\n\t\t\t<xs:enumeration value=\"load_case\"/>\n\t\t\t<xs:enumeration value=\"load_combination\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLogicalOperatorEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"logicaland\"/>\n\t\t\t<xs:enumeration value=\"logicalor\"/>\n\t\t\t<xs:enumeration value=\"logicalxor\"/>\n\t\t\t<xs:enumeration value=\"logicalnotand\"/>\n\t\t\t<xs:enumeration value=\"logicalnotor\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMechanicalFastenerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchorbolt\"/>\n\t\t\t<xs:enumeration value=\"bolt\"/>\n\t\t\t<xs:enumeration value=\"dowel\"/>\n\t\t\t<xs:enumeration value=\"nail\"/>\n\t\t\t<xs:enumeration value=\"nailplate\"/>\n\t\t\t<xs:enumeration value=\"rivet\"/>\n\t\t\t<xs:enumeration value=\"screw\"/>\n\t\t\t<xs:enumeration value=\"shearconnector\"/>\n\t\t\t<xs:enumeration value=\"staple\"/>\n\t\t\t<xs:enumeration value=\"studshearconnector\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMedicalDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airstation\"/>\n\t\t\t<xs:enumeration value=\"feedairunit\"/>\n\t\t\t<xs:enumeration value=\"oxygengenerator\"/>\n\t\t\t<xs:enumeration value=\"oxygenplant\"/>\n\t\t\t<xs:enumeration value=\"vacuumstation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"brace\"/>\n\t\t\t<xs:enumeration value=\"chord\"/>\n\t\t\t<xs:enumeration value=\"collar\"/>\n\t\t\t<xs:enumeration value=\"member\"/>\n\t\t\t<xs:enumeration value=\"mullion\"/>\n\t\t\t<xs:enumeration value=\"plate\"/>\n\t\t\t<xs:enumeration value=\"post\"/>\n\t\t\t<xs:enumeration value=\"purlin\"/>\n\t\t\t<xs:enumeration value=\"rafter\"/>\n\t\t\t<xs:enumeration value=\"stringer\"/>\n\t\t\t<xs:enumeration value=\"strut\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMotorConnectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beltdrive\"/>\n\t\t\t<xs:enumeration value=\"coupling\"/>\n\t\t\t<xs:enumeration value=\"directdrive\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNullStyle\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"null\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcObjectTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"product\"/>\n\t\t\t<xs:enumeration value=\"process\"/>\n\t\t\t<xs:enumeration value=\"control\"/>\n\t\t\t<xs:enumeration value=\"resource\"/>\n\t\t\t<xs:enumeration value=\"actor\"/>\n\t\t\t<xs:enumeration value=\"group\"/>\n\t\t\t<xs:enumeration value=\"project\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcObjectiveEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"codecompliance\"/>\n\t\t\t<xs:enumeration value=\"codewaiver\"/>\n\t\t\t<xs:enumeration value=\"designintent\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"healthandsafety\"/>\n\t\t\t<xs:enumeration value=\"mergeconflict\"/>\n\t\t\t<xs:enumeration value=\"modelview\"/>\n\t\t\t<xs:enumeration value=\"parameter\"/>\n\t\t\t<xs:enumeration value=\"requirement\"/>\n\t\t\t<xs:enumeration value=\"specification\"/>\n\t\t\t<xs:enumeration value=\"triggercondition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOccupantTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assignee\"/>\n\t\t\t<xs:enumeration value=\"assignor\"/>\n\t\t\t<xs:enumeration value=\"lessee\"/>\n\t\t\t<xs:enumeration value=\"lessor\"/>\n\t\t\t<xs:enumeration value=\"lettingagent\"/>\n\t\t\t<xs:enumeration value=\"owner\"/>\n\t\t\t<xs:enumeration value=\"tenant\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOpeningElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"opening\"/>\n\t\t\t<xs:enumeration value=\"recess\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOutletTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"audiovisualoutlet\"/>\n\t\t\t<xs:enumeration value=\"communicationsoutlet\"/>\n\t\t\t<xs:enumeration value=\"poweroutlet\"/>\n\t\t\t<xs:enumeration value=\"dataoutlet\"/>\n\t\t\t<xs:enumeration value=\"telephoneoutlet\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPerformanceHistoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPermeableCoveringOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"grill\"/>\n\t\t\t<xs:enumeration value=\"louver\"/>\n\t\t\t<xs:enumeration value=\"screen\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPermitTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"access\"/>\n\t\t\t<xs:enumeration value=\"building\"/>\n\t\t\t<xs:enumeration value=\"work\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPhysicalOrVirtualEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"physical\"/>\n\t\t\t<xs:enumeration value=\"virtual\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPileConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cast_in_place\"/>\n\t\t\t<xs:enumeration value=\"composite\"/>\n\t\t\t<xs:enumeration value=\"precast_concrete\"/>\n\t\t\t<xs:enumeration value=\"prefab_steel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPileTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bored\"/>\n\t\t\t<xs:enumeration value=\"driven\"/>\n\t\t\t<xs:enumeration value=\"jetgrouting\"/>\n\t\t\t<xs:enumeration value=\"cohesion\"/>\n\t\t\t<xs:enumeration value=\"friction\"/>\n\t\t\t<xs:enumeration value=\"support\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPipeFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"obstruction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPipeSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"culvert\"/>\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\n\t\t\t<xs:enumeration value=\"gutter\"/>\n\t\t\t<xs:enumeration value=\"spool\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curtain_panel\"/>\n\t\t\t<xs:enumeration value=\"sheet\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPreferredSurfaceCurveRepresentation\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curve3d\"/>\n\t\t\t<xs:enumeration value=\"pcurve_s1\"/>\n\t\t\t<xs:enumeration value=\"pcurve_s2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProcedureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"advice_caution\"/>\n\t\t\t<xs:enumeration value=\"advice_note\"/>\n\t\t\t<xs:enumeration value=\"advice_warning\"/>\n\t\t\t<xs:enumeration value=\"calibration\"/>\n\t\t\t<xs:enumeration value=\"diagnostic\"/>\n\t\t\t<xs:enumeration value=\"shutdown\"/>\n\t\t\t<xs:enumeration value=\"startup\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProfileTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curve\"/>\n\t\t\t<xs:enumeration value=\"area\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectOrderTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"changeorder\"/>\n\t\t\t<xs:enumeration value=\"maintenanceworkorder\"/>\n\t\t\t<xs:enumeration value=\"moveorder\"/>\n\t\t\t<xs:enumeration value=\"purchaseorder\"/>\n\t\t\t<xs:enumeration value=\"workorder\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectedOrTrueLengthEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"projected_length\"/>\n\t\t\t<xs:enumeration value=\"true_length\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectionElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPropertySetTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pset_typedrivenonly\"/>\n\t\t\t<xs:enumeration value=\"pset_typedrivenoverride\"/>\n\t\t\t<xs:enumeration value=\"pset_occurrencedriven\"/>\n\t\t\t<xs:enumeration value=\"pset_performancedriven\"/>\n\t\t\t<xs:enumeration value=\"qto_typedrivenonly\"/>\n\t\t\t<xs:enumeration value=\"qto_typedrivenoverride\"/>\n\t\t\t<xs:enumeration value=\"qto_occurrencedriven\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProtectiveDeviceTrippingUnitTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electronic\"/>\n\t\t\t<xs:enumeration value=\"electromagnetic\"/>\n\t\t\t<xs:enumeration value=\"residualcurrent\"/>\n\t\t\t<xs:enumeration value=\"thermal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProtectiveDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"circuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"earthleakagecircuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"earthingswitch\"/>\n\t\t\t<xs:enumeration value=\"fusedisconnector\"/>\n\t\t\t<xs:enumeration value=\"residualcurrentcircuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"residualcurrentswitch\"/>\n\t\t\t<xs:enumeration value=\"varistor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPumpTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"circulator\"/>\n\t\t\t<xs:enumeration value=\"endsuction\"/>\n\t\t\t<xs:enumeration value=\"splitcase\"/>\n\t\t\t<xs:enumeration value=\"submersiblepump\"/>\n\t\t\t<xs:enumeration value=\"sumppump\"/>\n\t\t\t<xs:enumeration value=\"verticalinline\"/>\n\t\t\t<xs:enumeration value=\"verticalturbine\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRailingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"handrail\"/>\n\t\t\t<xs:enumeration value=\"guardrail\"/>\n\t\t\t<xs:enumeration value=\"balustrade\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRampFlightTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight\"/>\n\t\t\t<xs:enumeration value=\"spiral\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRampTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight_run_ramp\"/>\n\t\t\t<xs:enumeration value=\"two_straight_run_ramp\"/>\n\t\t\t<xs:enumeration value=\"quarter_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"half_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"spiral_ramp\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRecurrenceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"daily\"/>\n\t\t\t<xs:enumeration value=\"weekly\"/>\n\t\t\t<xs:enumeration value=\"monthly_by_day_of_month\"/>\n\t\t\t<xs:enumeration value=\"monthly_by_position\"/>\n\t\t\t<xs:enumeration value=\"by_day_count\"/>\n\t\t\t<xs:enumeration value=\"by_weekday_count\"/>\n\t\t\t<xs:enumeration value=\"yearly_by_day_of_month\"/>\n\t\t\t<xs:enumeration value=\"yearly_by_position\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReflectanceMethodEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blinn\"/>\n\t\t\t<xs:enumeration value=\"flat\"/>\n\t\t\t<xs:enumeration value=\"glass\"/>\n\t\t\t<xs:enumeration value=\"matt\"/>\n\t\t\t<xs:enumeration value=\"metal\"/>\n\t\t\t<xs:enumeration value=\"mirror\"/>\n\t\t\t<xs:enumeration value=\"phong\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"strauss\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarRoleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"main\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"ligature\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"punching\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"ring\"/>\n\t\t\t<xs:enumeration value=\"anchoring\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarSurfaceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plain\"/>\n\t\t\t<xs:enumeration value=\"textured\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchoring\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"ligature\"/>\n\t\t\t<xs:enumeration value=\"main\"/>\n\t\t\t<xs:enumeration value=\"punching\"/>\n\t\t\t<xs:enumeration value=\"ring\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingMeshTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRoleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"supplier\"/>\n\t\t\t<xs:enumeration value=\"manufacturer\"/>\n\t\t\t<xs:enumeration value=\"contractor\"/>\n\t\t\t<xs:enumeration value=\"subcontractor\"/>\n\t\t\t<xs:enumeration value=\"architect\"/>\n\t\t\t<xs:enumeration value=\"structuralengineer\"/>\n\t\t\t<xs:enumeration value=\"costengineer\"/>\n\t\t\t<xs:enumeration value=\"client\"/>\n\t\t\t<xs:enumeration value=\"buildingowner\"/>\n\t\t\t<xs:enumeration value=\"buildingoperator\"/>\n\t\t\t<xs:enumeration value=\"mechanicalengineer\"/>\n\t\t\t<xs:enumeration value=\"electricalengineer\"/>\n\t\t\t<xs:enumeration value=\"projectmanager\"/>\n\t\t\t<xs:enumeration value=\"facilitiesmanager\"/>\n\t\t\t<xs:enumeration value=\"civilengineer\"/>\n\t\t\t<xs:enumeration value=\"commissioningengineer\"/>\n\t\t\t<xs:enumeration value=\"engineer\"/>\n\t\t\t<xs:enumeration value=\"owner\"/>\n\t\t\t<xs:enumeration value=\"consultant\"/>\n\t\t\t<xs:enumeration value=\"constructionmanager\"/>\n\t\t\t<xs:enumeration value=\"fieldconstructionmanager\"/>\n\t\t\t<xs:enumeration value=\"reseller\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRoofTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flat_roof\"/>\n\t\t\t<xs:enumeration value=\"shed_roof\"/>\n\t\t\t<xs:enumeration value=\"gable_roof\"/>\n\t\t\t<xs:enumeration value=\"hip_roof\"/>\n\t\t\t<xs:enumeration value=\"hipped_gable_roof\"/>\n\t\t\t<xs:enumeration value=\"gambrel_roof\"/>\n\t\t\t<xs:enumeration value=\"mansard_roof\"/>\n\t\t\t<xs:enumeration value=\"barrel_roof\"/>\n\t\t\t<xs:enumeration value=\"rainbow_roof\"/>\n\t\t\t<xs:enumeration value=\"butterfly_roof\"/>\n\t\t\t<xs:enumeration value=\"pavilion_roof\"/>\n\t\t\t<xs:enumeration value=\"dome_roof\"/>\n\t\t\t<xs:enumeration value=\"freeform\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSIPrefix\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"exa\"/>\n\t\t\t<xs:enumeration value=\"peta\"/>\n\t\t\t<xs:enumeration value=\"tera\"/>\n\t\t\t<xs:enumeration value=\"giga\"/>\n\t\t\t<xs:enumeration value=\"mega\"/>\n\t\t\t<xs:enumeration value=\"kilo\"/>\n\t\t\t<xs:enumeration value=\"hecto\"/>\n\t\t\t<xs:enumeration value=\"deca\"/>\n\t\t\t<xs:enumeration value=\"deci\"/>\n\t\t\t<xs:enumeration value=\"centi\"/>\n\t\t\t<xs:enumeration value=\"milli\"/>\n\t\t\t<xs:enumeration value=\"micro\"/>\n\t\t\t<xs:enumeration value=\"nano\"/>\n\t\t\t<xs:enumeration value=\"pico\"/>\n\t\t\t<xs:enumeration value=\"femto\"/>\n\t\t\t<xs:enumeration value=\"atto\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSIUnitName\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ampere\"/>\n\t\t\t<xs:enumeration value=\"becquerel\"/>\n\t\t\t<xs:enumeration value=\"candela\"/>\n\t\t\t<xs:enumeration value=\"coulomb\"/>\n\t\t\t<xs:enumeration value=\"cubic_metre\"/>\n\t\t\t<xs:enumeration value=\"degree_celsius\"/>\n\t\t\t<xs:enumeration value=\"farad\"/>\n\t\t\t<xs:enumeration value=\"gram\"/>\n\t\t\t<xs:enumeration value=\"gray\"/>\n\t\t\t<xs:enumeration value=\"henry\"/>\n\t\t\t<xs:enumeration value=\"hertz\"/>\n\t\t\t<xs:enumeration value=\"joule\"/>\n\t\t\t<xs:enumeration value=\"kelvin\"/>\n\t\t\t<xs:enumeration value=\"lumen\"/>\n\t\t\t<xs:enumeration value=\"lux\"/>\n\t\t\t<xs:enumeration value=\"metre\"/>\n\t\t\t<xs:enumeration value=\"mole\"/>\n\t\t\t<xs:enumeration value=\"newton\"/>\n\t\t\t<xs:enumeration value=\"ohm\"/>\n\t\t\t<xs:enumeration value=\"pascal\"/>\n\t\t\t<xs:enumeration value=\"radian\"/>\n\t\t\t<xs:enumeration value=\"second\"/>\n\t\t\t<xs:enumeration value=\"siemens\"/>\n\t\t\t<xs:enumeration value=\"sievert\"/>\n\t\t\t<xs:enumeration value=\"square_metre\"/>\n\t\t\t<xs:enumeration value=\"steradian\"/>\n\t\t\t<xs:enumeration value=\"tesla\"/>\n\t\t\t<xs:enumeration value=\"volt\"/>\n\t\t\t<xs:enumeration value=\"watt\"/>\n\t\t\t<xs:enumeration value=\"weber\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSanitaryTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bath\"/>\n\t\t\t<xs:enumeration value=\"bidet\"/>\n\t\t\t<xs:enumeration value=\"cistern\"/>\n\t\t\t<xs:enumeration value=\"shower\"/>\n\t\t\t<xs:enumeration value=\"sink\"/>\n\t\t\t<xs:enumeration value=\"sanitaryfountain\"/>\n\t\t\t<xs:enumeration value=\"toiletpan\"/>\n\t\t\t<xs:enumeration value=\"urinal\"/>\n\t\t\t<xs:enumeration value=\"washhandbasin\"/>\n\t\t\t<xs:enumeration value=\"wcseat\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"uniform\"/>\n\t\t\t<xs:enumeration value=\"tapered\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSensorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cosensor\"/>\n\t\t\t<xs:enumeration value=\"co2sensor\"/>\n\t\t\t<xs:enumeration value=\"conductancesensor\"/>\n\t\t\t<xs:enumeration value=\"contactsensor\"/>\n\t\t\t<xs:enumeration value=\"firesensor\"/>\n\t\t\t<xs:enumeration value=\"flowsensor\"/>\n\t\t\t<xs:enumeration value=\"frostsensor\"/>\n\t\t\t<xs:enumeration value=\"gassensor\"/>\n\t\t\t<xs:enumeration value=\"heatsensor\"/>\n\t\t\t<xs:enumeration value=\"humiditysensor\"/>\n\t\t\t<xs:enumeration value=\"identifiersensor\"/>\n\t\t\t<xs:enumeration value=\"ionconcentrationsensor\"/>\n\t\t\t<xs:enumeration value=\"levelsensor\"/>\n\t\t\t<xs:enumeration value=\"lightsensor\"/>\n\t\t\t<xs:enumeration value=\"moisturesensor\"/>\n\t\t\t<xs:enumeration value=\"movementsensor\"/>\n\t\t\t<xs:enumeration value=\"phsensor\"/>\n\t\t\t<xs:enumeration value=\"pressuresensor\"/>\n\t\t\t<xs:enumeration value=\"radiationsensor\"/>\n\t\t\t<xs:enumeration value=\"radioactivitysensor\"/>\n\t\t\t<xs:enumeration value=\"smokesensor\"/>\n\t\t\t<xs:enumeration value=\"soundsensor\"/>\n\t\t\t<xs:enumeration value=\"temperaturesensor\"/>\n\t\t\t<xs:enumeration value=\"windsensor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSequenceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"start_start\"/>\n\t\t\t<xs:enumeration value=\"start_finish\"/>\n\t\t\t<xs:enumeration value=\"finish_start\"/>\n\t\t\t<xs:enumeration value=\"finish_finish\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcShadingDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"jalousie\"/>\n\t\t\t<xs:enumeration value=\"shutter\"/>\n\t\t\t<xs:enumeration value=\"awning\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSimplePropertyTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"p_singlevalue\"/>\n\t\t\t<xs:enumeration value=\"p_enumeratedvalue\"/>\n\t\t\t<xs:enumeration value=\"p_boundedvalue\"/>\n\t\t\t<xs:enumeration value=\"p_listvalue\"/>\n\t\t\t<xs:enumeration value=\"p_tablevalue\"/>\n\t\t\t<xs:enumeration value=\"p_referencevalue\"/>\n\t\t\t<xs:enumeration value=\"q_length\"/>\n\t\t\t<xs:enumeration value=\"q_area\"/>\n\t\t\t<xs:enumeration value=\"q_volume\"/>\n\t\t\t<xs:enumeration value=\"q_count\"/>\n\t\t\t<xs:enumeration value=\"q_weight\"/>\n\t\t\t<xs:enumeration value=\"q_time\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSlabTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floor\"/>\n\t\t\t<xs:enumeration value=\"roof\"/>\n\t\t\t<xs:enumeration value=\"landing\"/>\n\t\t\t<xs:enumeration value=\"baseslab\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSolarDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"solarcollector\"/>\n\t\t\t<xs:enumeration value=\"solarpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpaceHeaterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"convector\"/>\n\t\t\t<xs:enumeration value=\"radiator\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpaceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"space\"/>\n\t\t\t<xs:enumeration value=\"parking\"/>\n\t\t\t<xs:enumeration value=\"gfa\"/>\n\t\t\t<xs:enumeration value=\"internal\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpatialZoneTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"construction\"/>\n\t\t\t<xs:enumeration value=\"firesafety\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"occupancy\"/>\n\t\t\t<xs:enumeration value=\"security\"/>\n\t\t\t<xs:enumeration value=\"thermal\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"ventilation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStackTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"birdcage\"/>\n\t\t\t<xs:enumeration value=\"cowl\"/>\n\t\t\t<xs:enumeration value=\"rainwaterhopper\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStairFlightTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight\"/>\n\t\t\t<xs:enumeration value=\"winder\"/>\n\t\t\t<xs:enumeration value=\"spiral\"/>\n\t\t\t<xs:enumeration value=\"curved\"/>\n\t\t\t<xs:enumeration value=\"freeform\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStairTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight_run_stair\"/>\n\t\t\t<xs:enumeration value=\"two_straight_run_stair\"/>\n\t\t\t<xs:enumeration value=\"quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"half_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"half_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"three_quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"three_quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"spiral_stair\"/>\n\t\t\t<xs:enumeration value=\"double_return_stair\"/>\n\t\t\t<xs:enumeration value=\"curved_run_stair\"/>\n\t\t\t<xs:enumeration value=\"two_curved_run_stair\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStateEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"readwrite\"/>\n\t\t\t<xs:enumeration value=\"readonly\"/>\n\t\t\t<xs:enumeration value=\"locked\"/>\n\t\t\t<xs:enumeration value=\"readwritelocked\"/>\n\t\t\t<xs:enumeration value=\"readonlylocked\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralCurveActivityTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"const\"/>\n\t\t\t<xs:enumeration value=\"linear\"/>\n\t\t\t<xs:enumeration value=\"polygonal\"/>\n\t\t\t<xs:enumeration value=\"equidistant\"/>\n\t\t\t<xs:enumeration value=\"sinus\"/>\n\t\t\t<xs:enumeration value=\"parabola\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralCurveMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rigid_joined_member\"/>\n\t\t\t<xs:enumeration value=\"pin_joined_member\"/>\n\t\t\t<xs:enumeration value=\"cable\"/>\n\t\t\t<xs:enumeration value=\"tension_member\"/>\n\t\t\t<xs:enumeration value=\"compression_member\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralSurfaceActivityTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"const\"/>\n\t\t\t<xs:enumeration value=\"bilinear\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"isocontour\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralSurfaceMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bending_element\"/>\n\t\t\t<xs:enumeration value=\"membrane_element\"/>\n\t\t\t<xs:enumeration value=\"shell\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSubContractResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"purchase\"/>\n\t\t\t<xs:enumeration value=\"work\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSurfaceFeatureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"mark\"/>\n\t\t\t<xs:enumeration value=\"tag\"/>\n\t\t\t<xs:enumeration value=\"treatment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSurfaceSide\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"positive\"/>\n\t\t\t<xs:enumeration value=\"negative\"/>\n\t\t\t<xs:enumeration value=\"both\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSwitchingDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"contactor\"/>\n\t\t\t<xs:enumeration value=\"dimmerswitch\"/>\n\t\t\t<xs:enumeration value=\"emergencystop\"/>\n\t\t\t<xs:enumeration value=\"keypad\"/>\n\t\t\t<xs:enumeration value=\"momentaryswitch\"/>\n\t\t\t<xs:enumeration value=\"selectorswitch\"/>\n\t\t\t<xs:enumeration value=\"starter\"/>\n\t\t\t<xs:enumeration value=\"switchdisconnector\"/>\n\t\t\t<xs:enumeration value=\"toggleswitch\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSystemFurnitureElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"panel\"/>\n\t\t\t<xs:enumeration value=\"worksurface\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTankTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"basin\"/>\n\t\t\t<xs:enumeration value=\"breakpressure\"/>\n\t\t\t<xs:enumeration value=\"expansion\"/>\n\t\t\t<xs:enumeration value=\"feedandexpansion\"/>\n\t\t\t<xs:enumeration value=\"pressurevessel\"/>\n\t\t\t<xs:enumeration value=\"storage\"/>\n\t\t\t<xs:enumeration value=\"vessel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTaskDurationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"elapsedtime\"/>\n\t\t\t<xs:enumeration value=\"worktime\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTaskTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"attendance\"/>\n\t\t\t<xs:enumeration value=\"construction\"/>\n\t\t\t<xs:enumeration value=\"demolition\"/>\n\t\t\t<xs:enumeration value=\"dismantle\"/>\n\t\t\t<xs:enumeration value=\"disposal\"/>\n\t\t\t<xs:enumeration value=\"installation\"/>\n\t\t\t<xs:enumeration value=\"logistic\"/>\n\t\t\t<xs:enumeration value=\"maintenance\"/>\n\t\t\t<xs:enumeration value=\"move\"/>\n\t\t\t<xs:enumeration value=\"operation\"/>\n\t\t\t<xs:enumeration value=\"removal\"/>\n\t\t\t<xs:enumeration value=\"renovation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTendonAnchorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"coupler\"/>\n\t\t\t<xs:enumeration value=\"fixed_end\"/>\n\t\t\t<xs:enumeration value=\"tensioning_end\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTendonTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bar\"/>\n\t\t\t<xs:enumeration value=\"coated\"/>\n\t\t\t<xs:enumeration value=\"strand\"/>\n\t\t\t<xs:enumeration value=\"wire\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextPath\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"up\"/>\n\t\t\t<xs:enumeration value=\"down\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeSeriesDataTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"continuous\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"discretebinary\"/>\n\t\t\t<xs:enumeration value=\"piecewisebinary\"/>\n\t\t\t<xs:enumeration value=\"piecewiseconstant\"/>\n\t\t\t<xs:enumeration value=\"piecewisecontinuous\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransformerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"current\"/>\n\t\t\t<xs:enumeration value=\"frequency\"/>\n\t\t\t<xs:enumeration value=\"inverter\"/>\n\t\t\t<xs:enumeration value=\"rectifier\"/>\n\t\t\t<xs:enumeration value=\"voltage\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransitionCode\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"discontinuous\"/>\n\t\t\t<xs:enumeration value=\"continuous\"/>\n\t\t\t<xs:enumeration value=\"contsamegradient\"/>\n\t\t\t<xs:enumeration value=\"contsamegradientsamecurvature\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransportElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"elevator\"/>\n\t\t\t<xs:enumeration value=\"escalator\"/>\n\t\t\t<xs:enumeration value=\"movingwalkway\"/>\n\t\t\t<xs:enumeration value=\"craneway\"/>\n\t\t\t<xs:enumeration value=\"liftinggear\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTrimmingPreference\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cartesian\"/>\n\t\t\t<xs:enumeration value=\"parameter\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTubeBundleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"finned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"absorbeddoseunit\"/>\n\t\t\t<xs:enumeration value=\"amountofsubstanceunit\"/>\n\t\t\t<xs:enumeration value=\"areaunit\"/>\n\t\t\t<xs:enumeration value=\"doseequivalentunit\"/>\n\t\t\t<xs:enumeration value=\"electriccapacitanceunit\"/>\n\t\t\t<xs:enumeration value=\"electricchargeunit\"/>\n\t\t\t<xs:enumeration value=\"electricconductanceunit\"/>\n\t\t\t<xs:enumeration value=\"electriccurrentunit\"/>\n\t\t\t<xs:enumeration value=\"electricresistanceunit\"/>\n\t\t\t<xs:enumeration value=\"electricvoltageunit\"/>\n\t\t\t<xs:enumeration value=\"energyunit\"/>\n\t\t\t<xs:enumeration value=\"forceunit\"/>\n\t\t\t<xs:enumeration value=\"frequencyunit\"/>\n\t\t\t<xs:enumeration value=\"illuminanceunit\"/>\n\t\t\t<xs:enumeration value=\"inductanceunit\"/>\n\t\t\t<xs:enumeration value=\"lengthunit\"/>\n\t\t\t<xs:enumeration value=\"luminousfluxunit\"/>\n\t\t\t<xs:enumeration value=\"luminousintensityunit\"/>\n\t\t\t<xs:enumeration value=\"magneticfluxdensityunit\"/>\n\t\t\t<xs:enumeration value=\"magneticfluxunit\"/>\n\t\t\t<xs:enumeration value=\"massunit\"/>\n\t\t\t<xs:enumeration value=\"planeangleunit\"/>\n\t\t\t<xs:enumeration value=\"powerunit\"/>\n\t\t\t<xs:enumeration value=\"pressureunit\"/>\n\t\t\t<xs:enumeration value=\"radioactivityunit\"/>\n\t\t\t<xs:enumeration value=\"solidangleunit\"/>\n\t\t\t<xs:enumeration value=\"thermodynamictemperatureunit\"/>\n\t\t\t<xs:enumeration value=\"timeunit\"/>\n\t\t\t<xs:enumeration value=\"volumeunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitaryControlElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"alarmpanel\"/>\n\t\t\t<xs:enumeration value=\"controlpanel\"/>\n\t\t\t<xs:enumeration value=\"gasdetectionpanel\"/>\n\t\t\t<xs:enumeration value=\"indicatorpanel\"/>\n\t\t\t<xs:enumeration value=\"mimicpanel\"/>\n\t\t\t<xs:enumeration value=\"humidistat\"/>\n\t\t\t<xs:enumeration value=\"thermostat\"/>\n\t\t\t<xs:enumeration value=\"weatherstation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitaryEquipmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airhandler\"/>\n\t\t\t<xs:enumeration value=\"airconditioningunit\"/>\n\t\t\t<xs:enumeration value=\"dehumidifier\"/>\n\t\t\t<xs:enumeration value=\"splitsystem\"/>\n\t\t\t<xs:enumeration value=\"rooftopunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcValveTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airrelease\"/>\n\t\t\t<xs:enumeration value=\"antivacuum\"/>\n\t\t\t<xs:enumeration value=\"changeover\"/>\n\t\t\t<xs:enumeration value=\"check\"/>\n\t\t\t<xs:enumeration value=\"commissioning\"/>\n\t\t\t<xs:enumeration value=\"diverting\"/>\n\t\t\t<xs:enumeration value=\"drawoffcock\"/>\n\t\t\t<xs:enumeration value=\"doublecheck\"/>\n\t\t\t<xs:enumeration value=\"doubleregulating\"/>\n\t\t\t<xs:enumeration value=\"faucet\"/>\n\t\t\t<xs:enumeration value=\"flushing\"/>\n\t\t\t<xs:enumeration value=\"gascock\"/>\n\t\t\t<xs:enumeration value=\"gastap\"/>\n\t\t\t<xs:enumeration value=\"isolating\"/>\n\t\t\t<xs:enumeration value=\"mixing\"/>\n\t\t\t<xs:enumeration value=\"pressurereducing\"/>\n\t\t\t<xs:enumeration value=\"pressurerelief\"/>\n\t\t\t<xs:enumeration value=\"regulating\"/>\n\t\t\t<xs:enumeration value=\"safetycutoff\"/>\n\t\t\t<xs:enumeration value=\"steamtrap\"/>\n\t\t\t<xs:enumeration value=\"stopcock\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVibrationIsolatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compression\"/>\n\t\t\t<xs:enumeration value=\"spring\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVoidingFeatureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cutout\"/>\n\t\t\t<xs:enumeration value=\"notch\"/>\n\t\t\t<xs:enumeration value=\"hole\"/>\n\t\t\t<xs:enumeration value=\"miter\"/>\n\t\t\t<xs:enumeration value=\"chamfer\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWallTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"movable\"/>\n\t\t\t<xs:enumeration value=\"parapet\"/>\n\t\t\t<xs:enumeration value=\"partitioning\"/>\n\t\t\t<xs:enumeration value=\"plumbingwall\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"solidwall\"/>\n\t\t\t<xs:enumeration value=\"standard\"/>\n\t\t\t<xs:enumeration value=\"polygonal\"/>\n\t\t\t<xs:enumeration value=\"elementedwall\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWasteTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floortrap\"/>\n\t\t\t<xs:enumeration value=\"floorwaste\"/>\n\t\t\t<xs:enumeration value=\"gullysump\"/>\n\t\t\t<xs:enumeration value=\"gullytrap\"/>\n\t\t\t<xs:enumeration value=\"roofdrain\"/>\n\t\t\t<xs:enumeration value=\"wastedisposalunit\"/>\n\t\t\t<xs:enumeration value=\"wastetrap\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowPanelOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"sidehungrighthand\"/>\n\t\t\t<xs:enumeration value=\"sidehunglefthand\"/>\n\t\t\t<xs:enumeration value=\"tiltandturnrighthand\"/>\n\t\t\t<xs:enumeration value=\"tiltandturnlefthand\"/>\n\t\t\t<xs:enumeration value=\"tophung\"/>\n\t\t\t<xs:enumeration value=\"bottomhung\"/>\n\t\t\t<xs:enumeration value=\"pivothorizontal\"/>\n\t\t\t<xs:enumeration value=\"pivotvertical\"/>\n\t\t\t<xs:enumeration value=\"slidinghorizontal\"/>\n\t\t\t<xs:enumeration value=\"slidingvertical\"/>\n\t\t\t<xs:enumeration value=\"removablecasement\"/>\n\t\t\t<xs:enumeration value=\"fixedcasement\"/>\n\t\t\t<xs:enumeration value=\"otheroperation\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowPanelPositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"middle\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"bottom\"/>\n\t\t\t<xs:enumeration value=\"top\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowStyleConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aluminium\"/>\n\t\t\t<xs:enumeration value=\"high_grade_steel\"/>\n\t\t\t<xs:enumeration value=\"steel\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"aluminium_wood\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"other_construction\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowStyleOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_panel\"/>\n\t\t\t<xs:enumeration value=\"double_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"double_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_bottom\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_top\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_left\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_right\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"window\"/>\n\t\t\t<xs:enumeration value=\"skylight\"/>\n\t\t\t<xs:enumeration value=\"lightdome\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowTypePartitioningEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_panel\"/>\n\t\t\t<xs:enumeration value=\"double_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"double_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_bottom\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_top\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_left\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_right\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkCalendarTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"firstshift\"/>\n\t\t\t<xs:enumeration value=\"secondshift\"/>\n\t\t\t<xs:enumeration value=\"thirdshift\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkPlanTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actual\"/>\n\t\t\t<xs:enumeration value=\"baseline\"/>\n\t\t\t<xs:enumeration value=\"planned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkScheduleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actual\"/>\n\t\t\t<xs:enumeration value=\"baseline\"/>\n\t\t\t<xs:enumeration value=\"planned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<!-- simple type declarations (for TYPE defined data type definitions) -->\n\t<xs:simpleType name=\"IfcAbsorbedDoseMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAccelerationMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAmountOfSubstanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAngularVelocityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcArcIndex\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcArcIndex\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcArcIndex\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t<xs:maxLength value=\"3\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAreaDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAreaMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcBinary\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:hexBinary\">\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"IfcBoolean\">\n\t\t<xs:restriction base=\"xs:boolean\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBoxAlignment\">\n\t\t<xs:restriction base=\"ifc:IfcLabel\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCardinalPointReference\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcComplexNumber\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcComplexNumber\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"xs:double\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"array\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcComplexNumber\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"xs:double\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t<xs:maxLength value=\"2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcCompoundPlaneAngleMeasure\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcCompoundPlaneAngleMeasure\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"xs:long\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcCompoundPlaneAngleMeasure\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"xs:long\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t<xs:maxLength value=\"4\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcContextDependentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCountMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurvatureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDate\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDateTime\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDayInMonthNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDayInWeekNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDescriptiveMeasure\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDimensionCount\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoseEquivalentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuration\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDynamicViscosityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricCapacitanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricChargeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricConductanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricCurrentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricResistanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricVoltageMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEnergyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontStyle\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontVariant\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontWeight\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFrequencyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGloballyUniqueId\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:minLength value=\"22\"/>\n\t\t\t<xs:maxLength value=\"22\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatFluxDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatingValueMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIdentifier\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:maxLength value=\"255\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIlluminanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInductanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInteger\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIntegerCountRateMeasure\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIonConcentrationMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIsothermalMoistureCapacityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcKinematicViscosityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLabel\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:maxLength value=\"255\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLanguageId\">\n\t\t<xs:restriction base=\"ifc:IfcIdentifier\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLengthMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcLineIndex\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcLineIndex\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcLineIndex\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearMomentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearStiffnessMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearVelocityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLogical\">\n\t\t<xs:restriction base=\"ifc:logical\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousFluxMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousIntensityDistributionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousIntensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMagneticFluxDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMagneticFluxMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassFlowRateMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassPerLengthMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfElasticityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMoistureDiffusivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMolecularWeightMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMomentOfInertiaMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMonetaryMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMonthInYearNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNonNegativeLengthMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNormalisedRatioMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNumericMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPHMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcParameterValue\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlanarForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlaneAngleMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveInteger\">\n\t\t<xs:restriction base=\"ifc:IfcInteger\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveLengthMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositivePlaneAngleMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcPlaneAngleMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveRatioMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPowerMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPresentableText\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPressureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcPropertySetDefinitionSet\">\n\t\t<xs:sequence>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t</xs:sequence>\n\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t</xs:complexType>\n\t<xs:simpleType name=\"IfcRadioActivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRatioMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReal\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalFrequencyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalMassMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalStiffnessMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionModulusMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionalAreaIntegralMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcShearModulusMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSolidAngleMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPowerLevelMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPowerMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPressureLevelMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPressureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecificHeatCapacityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecularExponent\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecularRoughness\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTemperatureGradientMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTemperatureRateOfChangeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcText\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextAlignment\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextDecoration\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextFontName\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextTransformation\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalAdmittanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalConductivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalExpansionCoefficientMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalResistanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalTransmittanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermodynamicTemperatureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTime\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeStamp\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTorqueMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcURIReference\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVaporPermeabilityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVolumeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVolumetricFlowRateMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWarpingConstantMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWarpingMomentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<!-- base entity and entity attribute declaration (for embeded base schema definitions) -->\n\t<xs:element name=\"Entity\" type=\"ifc:Entity\" abstract=\"true\" nillable=\"true\"/>\n\t<xs:complexType name=\"Entity\" abstract=\"true\">\n\t\t<xs:attribute name=\"href\" type=\"xs:anyURI\" use=\"optional\"/>\n\t\t<xs:attribute name=\"ref\" type=\"xs:IDREF\" use=\"optional\"/>\n\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t</xs:complexType>\n\t<!-- base global attribute declaration (for embeded base schema definitions) -->\n\t<xs:attributeGroup name=\"instanceAttributes\">\n\t\t<xs:attribute name=\"id\" type=\"xs:ID\" use=\"optional\"/>\n\t\t<xs:attribute name=\"path\" type=\"xs:NMTOKENS\" use=\"optional\"/>\n\t\t<xs:attribute name=\"pos\" use=\"optional\">\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:restriction>\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:list itemType=\"xs:integer\"/>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t<xs:minLength value=\"1\"/>\n\t\t\t\t</xs:restriction>\n\t\t\t</xs:simpleType>\n\t\t</xs:attribute>\n\t</xs:attributeGroup>\n\t<xs:attribute name=\"arraySize\">\n\t\t<xs:simpleType>\n\t\t\t<xs:restriction>\n\t\t\t\t<xs:simpleType>\n\t\t\t\t\t<xs:list itemType=\"xs:integer\"/>\n\t\t\t\t</xs:simpleType>\n\t\t\t\t<xs:minLength value=\"1\"/>\n\t\t\t</xs:restriction>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:attribute name=\"itemType\">\n\t\t<xs:simpleType>\n\t\t\t<xs:list itemType=\"xs:QName\"/>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:attribute name=\"cType\">\n\t\t<xs:simpleType>\n\t\t\t<xs:list itemType=\"ifc:aggregateType\"/>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:simpleType name=\"aggregateType\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:enumeration value=\"array\"/>\n\t\t\t<xs:enumeration value=\"list\"/>\n\t\t\t<xs:enumeration value=\"set\"/>\n\t\t\t<xs:enumeration value=\"bag\"/>\n\t\t\t<xs:enumeration value=\"array-unique\"/>\n\t\t\t<xs:enumeration value=\"array-optional\"/>\n\t\t\t<xs:enumeration value=\"array-optional-unique\"/>\n\t\t\t<xs:enumeration value=\"list-unique\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<!-- base global simple type declaration (for embeded base schema definitions) -->\n\t<xs:complexType name=\"hexBinary\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"xs:hexBinary\">\n\t\t\t\t<xs:attribute name=\"extraBits\" type=\"xs:integer\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"logical\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:enumeration value=\"false\"/>\n\t\t\t<xs:enumeration value=\"true\"/>\n\t\t\t<xs:enumeration value=\"unknown\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n    <xs:simpleType name=\"Seq-IfcPositiveInteger\">\n        <xs:restriction>\n            <xs:simpleType>\n                <xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n            </xs:simpleType>\n            <xs:minLength value=\"3\"/>\n        </xs:restriction>\n    </xs:simpleType>\n\t<!-- base global wrapper declaration for atomic simple types (for embeded base schema definitions) -->\n\t<xs:element name=\"IfcAbsorbedDoseMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAbsorbedDoseMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAccelerationMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAccelerationMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAmountOfSubstanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAmountOfSubstanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAngularVelocityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAngularVelocityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcArcIndex-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcArcIndex\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAreaDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAreaMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcBinary-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBinary\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcBoolean-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBoolean\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcComplexNumber-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcComplexNumber\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCompoundPlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCompoundPlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcContextDependentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcContextDependentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCountMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCountMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCurvatureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCurvatureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDate-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDate\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDateTime-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDateTime\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDescriptiveMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDescriptiveMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDoseEquivalentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDoseEquivalentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDuration-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDuration\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDynamicViscosityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDynamicViscosityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricCapacitanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCapacitanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricChargeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricChargeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricConductanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricConductanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricCurrentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricResistanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricResistanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricVoltageMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricVoltageMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcEnergyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcFrequencyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFrequencyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcHeatFluxDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatFluxDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcHeatingValueMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatingValueMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIdentifier-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIdentifier\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIlluminanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIlluminanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcInductanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInductanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcInteger-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInteger\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIntegerCountRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIntegerCountRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIonConcentrationMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIonConcentrationMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIsothermalMoistureCapacityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcKinematicViscosityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcKinematicViscosityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLabel-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLabel\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLineIndex-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLineIndex\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearMomentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearMomentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearStiffnessMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearStiffnessMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearVelocityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearVelocityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLogical-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLogical\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousFluxMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousFluxMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousIntensityDistributionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityDistributionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousIntensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMagneticFluxDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMagneticFluxMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassFlowRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassFlowRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassPerLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassPerLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfElasticityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfElasticityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfLinearSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMoistureDiffusivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMoistureDiffusivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMolecularWeightMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMolecularWeightMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMomentOfInertiaMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMomentOfInertiaMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMonetaryMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMonetaryMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNonNegativeLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNonNegativeLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNormalisedRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNormalisedRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNullStyle-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNullStyle\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNumericMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNumericMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPHMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPHMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcParameterValue-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcParameterValue\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPlanarForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlanarForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveInteger-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveInteger\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositivePlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositivePlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPowerMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPowerMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPressureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPressureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPropertySetDefinitionSet-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:complexContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinitionSet\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:complexContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRadioActivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRadioActivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcReal-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcReal\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalFrequencyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalFrequencyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalMassMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalMassMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalStiffnessMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalStiffnessMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSectionModulusMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionModulusMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSectionalAreaIntegralMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionalAreaIntegralMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcShearModulusMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcShearModulusMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSolidAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSolidAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPowerLevelMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerLevelMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPowerMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPressureLevelMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureLevelMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPressureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecificHeatCapacityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecificHeatCapacityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecularExponent-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularExponent\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecularRoughness-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularRoughness\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTemperatureGradientMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureGradientMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTemperatureRateOfChangeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureRateOfChangeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcText-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcText\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTextFontName-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTextFontName\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalAdmittanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalAdmittanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalConductivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalConductivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalExpansionCoefficientMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalExpansionCoefficientMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalResistanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalResistanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalTransmittanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalTransmittanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermodynamicTemperatureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermodynamicTemperatureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTime-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTime\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTimeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTimeStamp-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeStamp\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTorqueMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTorqueMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVaporPermeabilityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVaporPermeabilityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVolumeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVolumetricFlowRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumetricFlowRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcWarpingConstantMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingConstantMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcWarpingMomentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingMomentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n</xs:schema>\n"
  },
  {
    "path": "Install/Program Files to Install/IFC4RV.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:ifc=\"http://www.buildingsmart-tech.org/ifc/IFC4/ifc4 rv\" targetNamespace=\"http://www.buildingsmart-tech.org/ifc/IFC4/ifc4 rv\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\" >\n<!-- created with IFCDOC 11.8 at buildingsmart-tech.org -->\n\n<!--\nCopyright by:\nbuildingSMART International Limited, 1996-2020\n\nAny technical documentation made available by buildingSMART International Limited\nis the copyrighted work of buildingSMART International Limited and is owned by the \nbuildingSMART International Limited. It may be photocopied, used in software development, \nor translated into another computer language without prior written consent from \nbuildingSMART International Limited provided that full attribution is given. \nPrior written consent is required if changes are made to the technical specification.\n\nThis material is delivered to you as is and buildingSMART International Limited makes \nno warranty of any kind with regard to it, including, but not limited to, the implied \nwarranties as to its accuracy or fitness for a particular purpose. Any use of the \ntechnical documentation or the information contained therein is at the risk of the user. \nDocumentation may include technical or other inaccuracies or typographical errors. \nbuildingSMART International Limited shall not be liable for errors contained therein or \nfor incidental consequential damages in connection with the furnishing, performance or use \nof the material. The information contained in this document is subject to change without notice.\n-->\n\n\t<!-- root element declaration (for SCHEMA definitions) -->\n\t<xs:element name=\"uos\" type=\"ifc:uos\" abstract=\"true\"/>\n    <xs:simpleType name=\"Seq-anyURI\">\n        <xs:list itemType=\"xs:anyURI\"/>\n    </xs:simpleType>\n\t<xs:complexType name=\"uos\" abstract=\"true\">\n\t\t<xs:sequence>\n\t\t\t<xs:element name=\"header\" minOccurs=\"0\">\n\t\t\t\t<xs:complexType>\n\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t<xs:element name=\"name\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"time_stamp\" type=\"xs:dateTime\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"author\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"organization\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"preprocessor_version\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"originating_system\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"authorization\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"documentation\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t</xs:sequence>\n\t\t\t\t</xs:complexType>\n\t\t\t</xs:element>\n\t\t</xs:sequence>\n\t\t<xs:attribute name=\"id\" type=\"xs:ID\" use=\"optional\"/>\n\t\t<xs:attribute name=\"express\" type=\"ifc:Seq-anyURI\" use=\"optional\"/>\n\t\t<xs:attribute name=\"configuration\" type=\"ifc:Seq-anyURI\" use=\"optional\"/>\n\t</xs:complexType>\n\t<xs:element name=\"ifcXML\" type=\"ifc:ifcXML\" substitutionGroup=\"ifc:uos\"/>\n\t<xs:complexType name=\"ifcXML\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:uos\">\n\t\t\t\t<xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n\t\t\t\t\t<xs:element ref=\"ifc:Entity\"/>\n\t\t\t\t</xs:choice>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<!-- element and complex type declarations (for ENTITY definitions) -->\n\t<xs:element name=\"IfcActionRequest\" type=\"ifc:IfcActionRequest\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActionRequest\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActionRequestTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActor\" type=\"ifc:IfcActor\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TheActor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActorRole\" type=\"ifc:IfcActorRole\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActorRole\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Role\" type=\"ifc:IfcRoleEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedRole\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActuator\" type=\"ifc:IfcActuator\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActuator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActuatorType\" type=\"ifc:IfcActuatorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActuatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAddress\" type=\"ifc:IfcAddress\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAddress\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcAddressTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPurpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedBrep\" type=\"ifc:IfcAdvancedBrep\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedBrep\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedBrepWithVoids\" type=\"ifc:IfcAdvancedBrepWithVoids\" substitutionGroup=\"ifc:IfcAdvancedBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedBrepWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAdvancedBrep\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Voids\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClosedShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedFace\" type=\"ifc:IfcAdvancedFace\" substitutionGroup=\"ifc:IfcFaceSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFaceSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminal\" type=\"ifc:IfcAirTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalBox\" type=\"ifc:IfcAirTerminalBox\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalBoxType\" type=\"ifc:IfcAirTerminalBoxType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalBoxType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalType\" type=\"ifc:IfcAirTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirToAirHeatRecovery\" type=\"ifc:IfcAirToAirHeatRecovery\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirToAirHeatRecovery\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirToAirHeatRecoveryType\" type=\"ifc:IfcAirToAirHeatRecoveryType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirToAirHeatRecoveryType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlarm\" type=\"ifc:IfcAlarm\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlarm\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlarmType\" type=\"ifc:IfcAlarmType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlarmType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotation\" type=\"ifc:IfcAnnotation\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotationFillArea\" type=\"ifc:IfcAnnotationFillArea\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotationFillArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OuterBoundary\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApplication\" type=\"ifc:IfcApplication\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApplication\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ApplicationDeveloper\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Version\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicationFullName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicationIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAppliedValue\" type=\"ifc:IfcAppliedValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAppliedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitBasis\" type=\"ifc:IfcMeasureWithUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Components\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicableDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FixedUntilDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Condition\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ArithmeticOperator\" type=\"ifc:IfcArithmeticOperatorEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApproval\" type=\"ifc:IfcApproval\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApproval\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RequestingApproval\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"GivingApproval\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeOfApproval\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Level\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Qualifier\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApprovalRelationship\" type=\"ifc:IfcApprovalRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApprovalRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedApprovals\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcApproval\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryClosedProfileDef\" type=\"ifc:IfcArbitraryClosedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryClosedProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OuterCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryOpenProfileDef\" type=\"ifc:IfcArbitraryOpenProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryOpenProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Curve\" type=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryProfileDefWithVoids\" type=\"ifc:IfcArbitraryProfileDefWithVoids\" substitutionGroup=\"ifc:IfcArbitraryClosedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryProfileDefWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryClosedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerCurves\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAsset\" type=\"ifc:IfcAsset\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAsset\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OriginalValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CurrentValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TotalReplacementCost\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Owner\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"User\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResponsiblePerson\" type=\"ifc:IfcPerson\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"DepreciatedValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IncorporationDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAsymmetricIShapeProfileDef\" type=\"ifc:IfcAsymmetricIShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAsymmetricIShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"BottomFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAudioVisualAppliance\" type=\"ifc:IfcAudioVisualAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAudioVisualAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAudioVisualApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAudioVisualApplianceType\" type=\"ifc:IfcAudioVisualApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAudioVisualApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAudioVisualApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis1Placement\" type=\"ifc:IfcAxis1Placement\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis1Placement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis2Placement2D\" type=\"ifc:IfcAxis2Placement2D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis2Placement2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis2Placement3D\" type=\"ifc:IfcAxis2Placement3D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis2Placement3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineCurve\" type=\"ifc:IfcBSplineCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Degree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveForm\" type=\"ifc:IfcBSplineCurveForm\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ClosedCurve\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineCurveWithKnots\" type=\"ifc:IfcBSplineCurveWithKnots\" substitutionGroup=\"ifc:IfcBSplineCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineCurveWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurve\">\n\t\t\t\t<xs:attribute name=\"KnotMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Knots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"KnotSpec\" type=\"ifc:IfcKnotType\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineSurface\" type=\"ifc:IfcBSplineSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"4\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UDegree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VDegree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SurfaceForm\" type=\"ifc:IfcBSplineSurfaceForm\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UClosed\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VClosed\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineSurfaceWithKnots\" type=\"ifc:IfcBSplineSurfaceWithKnots\" substitutionGroup=\"ifc:IfcBSplineSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineSurfaceWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineSurface\">\n\t\t\t\t<xs:attribute name=\"UMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"VMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"UKnots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"VKnots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"KnotSpec\" type=\"ifc:IfcKnotType\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeam\" type=\"ifc:IfcBeam\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeam\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeamStandardCase\" type=\"ifc:IfcBeamStandardCase\" substitutionGroup=\"ifc:IfcBeam\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeamStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBeam\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeamType\" type=\"ifc:IfcBeamType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeamType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBlobTexture\" type=\"ifc:IfcBlobTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBlobTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RasterCode\" type=\"ifc:IfcBinary\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RasterFormat\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBlock\" type=\"ifc:IfcBlock\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBlock\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ZLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoiler\" type=\"ifc:IfcBoiler\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoiler\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoilerType\" type=\"ifc:IfcBoilerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoilerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBooleanClippingResult\" type=\"ifc:IfcBooleanClippingResult\" substitutionGroup=\"ifc:IfcBooleanResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBooleanClippingResult\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBooleanResult\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBooleanResult\" type=\"ifc:IfcBooleanResult\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBooleanResult\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FirstOperand\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondOperand\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Operator\" type=\"ifc:IfcBooleanOperator\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryCondition\" type=\"ifc:IfcBoundaryCondition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryCondition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryCurve\" type=\"ifc:IfcBoundaryCurve\" substitutionGroup=\"ifc:IfcCompositeCurveOnSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurveOnSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryEdgeCondition\" type=\"ifc:IfcBoundaryEdgeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryEdgeCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryFaceCondition\" type=\"ifc:IfcBoundaryFaceCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryFaceCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryNodeCondition\" type=\"ifc:IfcBoundaryNodeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryNodeCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryNodeConditionWarping\" type=\"ifc:IfcBoundaryNodeConditionWarping\" substitutionGroup=\"ifc:IfcBoundaryNodeCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryNodeConditionWarping\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryNodeCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WarpingStiffness\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcWarpingStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundedCurve\" type=\"ifc:IfcBoundedCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundedCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundedSurface\" type=\"ifc:IfcBoundedSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundedSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundingBox\" type=\"ifc:IfcBoundingBox\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundingBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Corner\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ZDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoxedHalfSpace\" type=\"ifc:IfcBoxedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoxedHalfSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Enclosure\" type=\"ifc:IfcBoundingBox\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuilding\" type=\"ifc:IfcBuilding\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuilding\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BuildingAddress\" type=\"ifc:IfcPostalAddress\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ElevationOfRefHeight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElevationOfTerrain\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElement\" type=\"ifc:IfcBuildingElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementPart\" type=\"ifc:IfcBuildingElementPart\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementPart\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementPartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementPartType\" type=\"ifc:IfcBuildingElementPartType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementPartType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementPartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementProxy\" type=\"ifc:IfcBuildingElementProxy\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementProxy\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementProxyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementProxyType\" type=\"ifc:IfcBuildingElementProxyType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementProxyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementProxyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementType\" type=\"ifc:IfcBuildingElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingStorey\" type=\"ifc:IfcBuildingStorey\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingStorey\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"Elevation\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingSystem\" type=\"ifc:IfcBuildingSystem\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingSystemTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBurner\" type=\"ifc:IfcBurner\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBurner\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBurnerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBurnerType\" type=\"ifc:IfcBurnerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBurnerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBurnerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCShapeProfileDef\" type=\"ifc:IfcCShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Girth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InternalFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierFitting\" type=\"ifc:IfcCableCarrierFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierFittingType\" type=\"ifc:IfcCableCarrierFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierSegment\" type=\"ifc:IfcCableCarrierSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierSegmentType\" type=\"ifc:IfcCableCarrierSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableFitting\" type=\"ifc:IfcCableFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableFittingType\" type=\"ifc:IfcCableFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableSegment\" type=\"ifc:IfcCableSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableSegmentType\" type=\"ifc:IfcCableSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPoint\" type=\"ifc:IfcCartesianPoint\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:attribute name=\"Coordinates\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList\" type=\"ifc:IfcCartesianPointList\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList2D\" type=\"ifc:IfcCartesianPointList2D\" substitutionGroup=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianPointList\">\n\t\t\t\t<xs:attribute name=\"CoordList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList3D\" type=\"ifc:IfcCartesianPointList3D\" substitutionGroup=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianPointList\">\n\t\t\t\t<xs:attribute name=\"CoordList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator\" type=\"ifc:IfcCartesianTransformationOperator\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis1\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Axis2\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LocalOrigin\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Scale\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator2D\" type=\"ifc:IfcCartesianTransformationOperator2D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator2DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator2DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2DnonUniform\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator2D\">\n\t\t\t\t<xs:attribute name=\"Scale2\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator3D\" type=\"ifc:IfcCartesianTransformationOperator3D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis3\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator3DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator3DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3DnonUniform\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator3D\">\n\t\t\t\t<xs:attribute name=\"Scale2\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scale3\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCenterLineProfileDef\" type=\"ifc:IfcCenterLineProfileDef\" substitutionGroup=\"ifc:IfcArbitraryOpenProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCenterLineProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryOpenProfileDef\">\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChiller\" type=\"ifc:IfcChiller\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChiller\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChillerType\" type=\"ifc:IfcChillerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChillerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChimney\" type=\"ifc:IfcChimney\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChimney\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChimneyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChimneyType\" type=\"ifc:IfcChimneyType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChimneyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChimneyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircle\" type=\"ifc:IfcCircle\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircleHollowProfileDef\" type=\"ifc:IfcCircleHollowProfileDef\" substitutionGroup=\"ifc:IfcCircleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircleHollowProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCircleProfileDef\">\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircleProfileDef\" type=\"ifc:IfcCircleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCivilElement\" type=\"ifc:IfcCivilElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCivilElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCivilElementType\" type=\"ifc:IfcCivilElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCivilElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassification\" type=\"ifc:IfcClassification\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassification\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferenceTokens\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasReferences\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationReference\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Source\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Edition\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EditionDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassificationReference\" type=\"ifc:IfcClassificationReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassificationReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasReferences\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationReference\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Sort\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClosedShell\" type=\"ifc:IfcClosedShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClosedShell\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoil\" type=\"ifc:IfcCoil\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoil\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoilType\" type=\"ifc:IfcCoilType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoilType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourRgb\" type=\"ifc:IfcColourRgb\" substitutionGroup=\"ifc:IfcColourSpecification\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourRgb\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcColourSpecification\">\n\t\t\t\t<xs:attribute name=\"Red\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Green\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Blue\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourRgbList\" type=\"ifc:IfcColourRgbList\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourRgbList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"ColourList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcNormalisedRatioMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourSpecification\" type=\"ifc:IfcColourSpecification\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourSpecification\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumn\" type=\"ifc:IfcColumn\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumn\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumnStandardCase\" type=\"ifc:IfcColumnStandardCase\" substitutionGroup=\"ifc:IfcColumn\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumnStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcColumn\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumnType\" type=\"ifc:IfcColumnType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumnType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCommunicationsAppliance\" type=\"ifc:IfcCommunicationsAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCommunicationsAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCommunicationsApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCommunicationsApplianceType\" type=\"ifc:IfcCommunicationsApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCommunicationsApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCommunicationsApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcComplexProperty\" type=\"ifc:IfcComplexProperty\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcComplexProperty\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcComplexPropertyTemplate\" type=\"ifc:IfcComplexPropertyTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcComplexPropertyTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertyTemplates\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyTemplate\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertyTemplate\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcComplexPropertyTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurve\" type=\"ifc:IfcCompositeCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Segments\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCompositeCurveSegment\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCompositeCurveSegment\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurveOnSurface\" type=\"ifc:IfcCompositeCurveOnSurface\" substitutionGroup=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurveOnSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurveSegment\" type=\"ifc:IfcCompositeCurveSegment\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurveSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Transition\" type=\"ifc:IfcTransitionCode\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeProfileDef\" type=\"ifc:IfcCompositeProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Profiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Label\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompressor\" type=\"ifc:IfcCompressor\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompressor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompressorType\" type=\"ifc:IfcCompressorType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompressorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCondenser\" type=\"ifc:IfcCondenser\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCondenser\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCondenserType\" type=\"ifc:IfcCondenserType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCondenserType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConic\" type=\"ifc:IfcConic\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConic\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectedFaceSet\" type=\"ifc:IfcConnectedFaceSet\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectedFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CfsFaces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFace\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFace\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionCurveGeometry\" type=\"ifc:IfcConnectionCurveGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionCurveGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionGeometry\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionPointEccentricity\" type=\"ifc:IfcConnectionPointEccentricity\" substitutionGroup=\"ifc:IfcConnectionPointGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionPointEccentricity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionPointGeometry\">\n\t\t\t\t<xs:attribute name=\"EccentricityInX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EccentricityInY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EccentricityInZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionPointGeometry\" type=\"ifc:IfcConnectionPointGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionPointGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PointOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionSurfaceGeometry\" type=\"ifc:IfcConnectionSurfaceGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionSurfaceGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionVolumeGeometry\" type=\"ifc:IfcConnectionVolumeGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionVolumeGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VolumeOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSolidOrShell\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VolumeOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSolidOrShell\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstraint\" type=\"ifc:IfcConstraint\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstraint\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CreatingActor\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstraintGrade\" type=\"ifc:IfcConstraintEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstraintSource\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionEquipmentResource\" type=\"ifc:IfcConstructionEquipmentResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionEquipmentResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionEquipmentResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionEquipmentResourceType\" type=\"ifc:IfcConstructionEquipmentResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionEquipmentResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionEquipmentResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionMaterialResource\" type=\"ifc:IfcConstructionMaterialResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionMaterialResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionMaterialResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionMaterialResourceType\" type=\"ifc:IfcConstructionMaterialResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionMaterialResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionMaterialResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionProductResource\" type=\"ifc:IfcConstructionProductResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionProductResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionProductResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionProductResourceType\" type=\"ifc:IfcConstructionProductResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionProductResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionProductResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionResource\" type=\"ifc:IfcConstructionResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Usage\" type=\"ifc:IfcResourceTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"BaseCosts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseQuantity\" type=\"ifc:IfcPhysicalQuantity\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionResourceType\" type=\"ifc:IfcConstructionResourceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionResourceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseCosts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseQuantity\" type=\"ifc:IfcPhysicalQuantity\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcContext\" type=\"ifc:IfcContext\" abstract=\"true\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcContext\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepresentationContexts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationContext\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitsInContext\" type=\"ifc:IfcUnitAssignment\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"IsDefinedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDefinesByProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDefinesByProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Declares\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDeclares\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDeclares\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ObjectType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Phase\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcContextDependentUnit\" type=\"ifc:IfcContextDependentUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcContextDependentUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcControl\" type=\"ifc:IfcControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcControl\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcController\" type=\"ifc:IfcController\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcController\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcControllerType\" type=\"ifc:IfcControllerType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcControllerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConversionBasedUnit\" type=\"ifc:IfcConversionBasedUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConversionBasedUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConversionFactor\" type=\"ifc:IfcMeasureWithUnit\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConversionBasedUnitWithOffset\" type=\"ifc:IfcConversionBasedUnitWithOffset\" substitutionGroup=\"ifc:IfcConversionBasedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConversionBasedUnitWithOffset\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConversionBasedUnit\">\n\t\t\t\t<xs:attribute name=\"ConversionOffset\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCooledBeam\" type=\"ifc:IfcCooledBeam\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCooledBeam\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCooledBeamType\" type=\"ifc:IfcCooledBeamType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCooledBeamType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoolingTower\" type=\"ifc:IfcCoolingTower\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoolingTower\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoolingTowerType\" type=\"ifc:IfcCoolingTowerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoolingTowerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoordinateOperation\" type=\"ifc:IfcCoordinateOperation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoordinateOperation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TargetCRS\" type=\"ifc:IfcCoordinateReferenceSystem\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoordinateReferenceSystem\" type=\"ifc:IfcCoordinateReferenceSystem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoordinateReferenceSystem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"GeodeticDatum\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VerticalDatum\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostItem\" type=\"ifc:IfcCostItem\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CostValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCostValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CostQuantities\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCostItemTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostSchedule\" type=\"ifc:IfcCostSchedule\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCostScheduleTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SubmittedOn\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UpdateDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostValue\" type=\"ifc:IfcCostValue\" substitutionGroup=\"ifc:IfcAppliedValue\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCovering\" type=\"ifc:IfcCovering\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCovering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoveringType\" type=\"ifc:IfcCoveringType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoveringType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCrewResource\" type=\"ifc:IfcCrewResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCrewResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCrewResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCrewResourceType\" type=\"ifc:IfcCrewResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCrewResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCrewResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCsgPrimitive3D\" type=\"ifc:IfcCsgPrimitive3D\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCsgPrimitive3D\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCsgSolid\" type=\"ifc:IfcCsgSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCsgSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TreeRootExpression\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCsgSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurrencyRelationship\" type=\"ifc:IfcCurrencyRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurrencyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RateSource\" type=\"ifc:IfcLibraryInformation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ExchangeRate\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RateDateTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurtainWall\" type=\"ifc:IfcCurtainWall\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurtainWall\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCurtainWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurtainWallType\" type=\"ifc:IfcCurtainWallType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurtainWallType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCurtainWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurve\" type=\"ifc:IfcCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveBoundedPlane\" type=\"ifc:IfcCurveBoundedPlane\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveBoundedPlane\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcPlane\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"OuterBoundary\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveBoundedSurface\" type=\"ifc:IfcCurveBoundedSurface\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveBoundedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Boundaries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBoundaryCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ImplicitOuter\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyle\" type=\"ifc:IfcCurveStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveFont\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveWidth\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelOrDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFont\" type=\"ifc:IfcCurveStyleFont\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PatternList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontPattern\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurveStyleFontPattern\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFontAndScaling\" type=\"ifc:IfcCurveStyleFontAndScaling\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFontAndScaling\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveFont\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveFontScaling\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFontPattern\" type=\"ifc:IfcCurveStyleFontPattern\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFontPattern\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"VisibleSegmentLength\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InvisibleSegmentLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCylindricalSurface\" type=\"ifc:IfcCylindricalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCylindricalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDamper\" type=\"ifc:IfcDamper\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDamper\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDamperType\" type=\"ifc:IfcDamperType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDamperType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedProfileDef\" type=\"ifc:IfcDerivedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Operator\" type=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Label\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedUnit\" type=\"ifc:IfcDerivedUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDerivedUnitElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDerivedUnitElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UnitType\" type=\"ifc:IfcDerivedUnitEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedUnitElement\" type=\"ifc:IfcDerivedUnitElement\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedUnitElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" type=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Exponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDimensionalExponents\" type=\"ifc:IfcDimensionalExponents\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDimensionalExponents\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"LengthExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MassExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectricCurrentExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThermodynamicTemperatureExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AmountOfSubstanceExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LuminousIntensityExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDirection\" type=\"ifc:IfcDirection\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDirection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:attribute name=\"DirectionRatios\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDiscreteAccessory\" type=\"ifc:IfcDiscreteAccessory\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDiscreteAccessory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDiscreteAccessoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDiscreteAccessoryType\" type=\"ifc:IfcDiscreteAccessoryType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDiscreteAccessoryType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDiscreteAccessoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionChamberElement\" type=\"ifc:IfcDistributionChamberElement\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionChamberElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionChamberElementType\" type=\"ifc:IfcDistributionChamberElementType\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionChamberElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionCircuit\" type=\"ifc:IfcDistributionCircuit\" substitutionGroup=\"ifc:IfcDistributionSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionCircuit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionSystem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionControlElement\" type=\"ifc:IfcDistributionControlElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionControlElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionControlElementType\" type=\"ifc:IfcDistributionControlElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionControlElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionElement\" type=\"ifc:IfcDistributionElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionElementType\" type=\"ifc:IfcDistributionElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionFlowElement\" type=\"ifc:IfcDistributionFlowElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionFlowElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionFlowElementType\" type=\"ifc:IfcDistributionFlowElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionFlowElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionPort\" type=\"ifc:IfcDistributionPort\" substitutionGroup=\"ifc:IfcPort\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionPort\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPort\">\n\t\t\t\t<xs:attribute name=\"FlowDirection\" type=\"ifc:IfcFlowDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionPortTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SystemType\" type=\"ifc:IfcDistributionSystemEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionSystem\" type=\"ifc:IfcDistributionSystem\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionSystemEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentInformation\" type=\"ifc:IfcDocumentInformation\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentInformation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DocumentOwner\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Editors\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IntendedUse\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scope\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Revision\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastRevisionTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectronicFormat\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValidFrom\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValidUntil\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Confidentiality\" type=\"ifc:IfcDocumentConfidentialityEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcDocumentStatusEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentInformationRelationship\" type=\"ifc:IfcDocumentInformationRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentInformationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingDocument\" type=\"ifc:IfcDocumentInformation\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedDocuments\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDocumentInformation\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RelationshipType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentReference\" type=\"ifc:IfcDocumentReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedDocument\" type=\"ifc:IfcDocumentInformation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoor\" type=\"ifc:IfcDoor\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDoorTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorTypeOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedOperationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorLiningProperties\" type=\"ifc:IfcDoorLiningProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorLiningProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CasingThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CasingDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorPanelProperties\" type=\"ifc:IfcDoorPanelProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorPanelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PanelDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelOperation\" type=\"ifc:IfcDoorPanelOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelWidth\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcDoorPanelPositionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorStandardCase\" type=\"ifc:IfcDoorStandardCase\" substitutionGroup=\"ifc:IfcDoor\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDoor\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorStyle\" type=\"ifc:IfcDoorStyle\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorStyleOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstructionType\" type=\"ifc:IfcDoorStyleConstructionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Sizeable\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorType\" type=\"ifc:IfcDoorType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDoorTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorTypeOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedOperationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingPreDefinedColour\" type=\"ifc:IfcDraughtingPreDefinedColour\" substitutionGroup=\"ifc:IfcPreDefinedColour\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedColour\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingPreDefinedCurveFont\" type=\"ifc:IfcDraughtingPreDefinedCurveFont\" substitutionGroup=\"ifc:IfcPreDefinedCurveFont\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedCurveFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctFitting\" type=\"ifc:IfcDuctFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctFittingType\" type=\"ifc:IfcDuctFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSegment\" type=\"ifc:IfcDuctSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSegmentType\" type=\"ifc:IfcDuctSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSilencer\" type=\"ifc:IfcDuctSilencer\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSilencer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSilencerType\" type=\"ifc:IfcDuctSilencerType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSilencerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdge\" type=\"ifc:IfcEdge\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeStart\" type=\"ifc:IfcVertex\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"EdgeEnd\" type=\"ifc:IfcVertex\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdgeCurve\" type=\"ifc:IfcEdgeCurve\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdgeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeGeometry\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdgeLoop\" type=\"ifc:IfcEdgeLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdgeLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricAppliance\" type=\"ifc:IfcElectricAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricApplianceType\" type=\"ifc:IfcElectricApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricDistributionBoard\" type=\"ifc:IfcElectricDistributionBoard\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricDistributionBoard\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricDistributionBoardTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricDistributionBoardType\" type=\"ifc:IfcElectricDistributionBoardType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricDistributionBoardType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricDistributionBoardTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowStorageDevice\" type=\"ifc:IfcElectricFlowStorageDevice\" substitutionGroup=\"ifc:IfcFlowStorageDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowStorageDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowStorageDeviceType\" type=\"ifc:IfcElectricFlowStorageDeviceType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowStorageDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricGenerator\" type=\"ifc:IfcElectricGenerator\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricGenerator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricGeneratorType\" type=\"ifc:IfcElectricGeneratorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricGeneratorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricMotor\" type=\"ifc:IfcElectricMotor\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricMotor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricMotorType\" type=\"ifc:IfcElectricMotorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricMotorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricTimeControl\" type=\"ifc:IfcElectricTimeControl\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricTimeControl\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricTimeControlType\" type=\"ifc:IfcElectricTimeControlType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricTimeControlType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElement\" type=\"ifc:IfcElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProjections\" type=\"ifc:IfcRelProjectsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"HasOpenings\" type=\"ifc:IfcRelVoidsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementAssembly\" type=\"ifc:IfcElementAssembly\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementAssembly\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementAssemblyType\" type=\"ifc:IfcElementAssemblyType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementAssemblyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementComponent\" type=\"ifc:IfcElementComponent\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementComponent\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementComponentType\" type=\"ifc:IfcElementComponentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementComponentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementQuantity\" type=\"ifc:IfcElementQuantity\" substitutionGroup=\"ifc:IfcQuantitySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementQuantity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcQuantitySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Quantities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MethodOfMeasurement\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementType\" type=\"ifc:IfcElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ElementType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementarySurface\" type=\"ifc:IfcElementarySurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementarySurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEllipse\" type=\"ifc:IfcEllipse\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEllipse\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\n\t\t\t\t<xs:attribute name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEllipseProfileDef\" type=\"ifc:IfcEllipseProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEllipseProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEnergyConversionDevice\" type=\"ifc:IfcEnergyConversionDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEnergyConversionDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEnergyConversionDeviceType\" type=\"ifc:IfcEnergyConversionDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEnergyConversionDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEngine\" type=\"ifc:IfcEngine\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEngine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEngineTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEngineType\" type=\"ifc:IfcEngineType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEngineType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEngineTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporativeCooler\" type=\"ifc:IfcEvaporativeCooler\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporativeCooler\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporativeCoolerType\" type=\"ifc:IfcEvaporativeCoolerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporativeCoolerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporator\" type=\"ifc:IfcEvaporator\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporatorType\" type=\"ifc:IfcEvaporatorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvent\" type=\"ifc:IfcEvent\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EventOccurenceTime\" type=\"ifc:IfcEventTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEventTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EventTriggerType\" type=\"ifc:IfcEventTriggerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedEventTriggerType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEventTime\" type=\"ifc:IfcEventTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEventTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"ActualDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEventType\" type=\"ifc:IfcEventType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEventType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEventTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EventTriggerType\" type=\"ifc:IfcEventTriggerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedEventTriggerType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtendedProperties\" type=\"ifc:IfcExtendedProperties\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtendedProperties\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Properties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalInformation\" type=\"ifc:IfcExternalInformation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalInformation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalReference\" type=\"ifc:IfcExternalReference\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalReference\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalReferenceRelationship\" type=\"ifc:IfcExternalReferenceRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalReferenceRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingReference\" type=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalSpatialElement\" type=\"ifc:IfcExternalSpatialElement\" substitutionGroup=\"ifc:IfcExternalSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalSpatialElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcExternalSpatialElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalSpatialStructureElement\" type=\"ifc:IfcExternalSpatialStructureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalSpatialStructureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedHatchStyle\" type=\"ifc:IfcExternallyDefinedHatchStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedHatchStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedSurfaceStyle\" type=\"ifc:IfcExternallyDefinedSurfaceStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedSurfaceStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedTextFont\" type=\"ifc:IfcExternallyDefinedTextFont\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedTextFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtrudedAreaSolid\" type=\"ifc:IfcExtrudedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtrudedAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtrudedAreaSolidTapered\" type=\"ifc:IfcExtrudedAreaSolidTapered\" substitutionGroup=\"ifc:IfcExtrudedAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtrudedAreaSolidTapered\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtrudedAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EndSweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFace\" type=\"ifc:IfcFace\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Bounds\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFaceBound\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFaceBound\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceBasedSurfaceModel\" type=\"ifc:IfcFaceBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceBasedSurfaceModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FbsmFaces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectedFaceSet\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcConnectedFaceSet\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceBound\" type=\"ifc:IfcFaceBound\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceBound\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Bound\" type=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Orientation\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceOuterBound\" type=\"ifc:IfcFaceOuterBound\" substitutionGroup=\"ifc:IfcFaceBound\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceOuterBound\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFaceBound\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceSurface\" type=\"ifc:IfcFaceSurface\" substitutionGroup=\"ifc:IfcFace\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFace\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FaceSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacetedBrep\" type=\"ifc:IfcFacetedBrep\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacetedBrep\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacetedBrepWithVoids\" type=\"ifc:IfcFacetedBrepWithVoids\" substitutionGroup=\"ifc:IfcFacetedBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacetedBrepWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacetedBrep\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Voids\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClosedShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFailureConnectionCondition\" type=\"ifc:IfcFailureConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFailureConnectionCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t<xs:attribute name=\"TensionFailureX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionFailureY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionFailureZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFan\" type=\"ifc:IfcFan\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFan\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFanType\" type=\"ifc:IfcFanType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFanType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFastener\" type=\"ifc:IfcFastener\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFastener\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFastenerType\" type=\"ifc:IfcFastenerType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFastenerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElement\" type=\"ifc:IfcFeatureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElementAddition\" type=\"ifc:IfcFeatureElementAddition\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElementAddition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElementSubtraction\" type=\"ifc:IfcFeatureElementSubtraction\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElementSubtraction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyle\" type=\"ifc:IfcFillAreaStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FillStyles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFillStyleSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelorDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyleHatching\" type=\"ifc:IfcFillAreaStyleHatching\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyleHatching\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HatchLineAppearance\" type=\"ifc:IfcCurveStyle\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"StartOfNextHatchLine\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcHatchLineDistanceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointOfReferenceHatchLine\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PatternStart\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"HatchLineAngle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyleTiles\" type=\"ifc:IfcFillAreaStyleTiles\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyleTiles\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TilingPattern\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\" minOccurs=\"2\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcVector\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Tiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStyledItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStyledItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TilingScale\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFilter\" type=\"ifc:IfcFilter\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFilter\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFilterType\" type=\"ifc:IfcFilterType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFilterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFireSuppressionTerminal\" type=\"ifc:IfcFireSuppressionTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFireSuppressionTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFireSuppressionTerminalType\" type=\"ifc:IfcFireSuppressionTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFireSuppressionTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFixedReferenceSweptAreaSolid\" type=\"ifc:IfcFixedReferenceSweptAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFixedReferenceSweptAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"FixedReference\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"StartParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowController\" type=\"ifc:IfcFlowController\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowController\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowControllerType\" type=\"ifc:IfcFlowControllerType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowControllerType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowFitting\" type=\"ifc:IfcFlowFitting\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowFittingType\" type=\"ifc:IfcFlowFittingType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowFittingType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowInstrument\" type=\"ifc:IfcFlowInstrument\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowInstrument\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowInstrumentType\" type=\"ifc:IfcFlowInstrumentType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowInstrumentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMeter\" type=\"ifc:IfcFlowMeter\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMeter\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMeterType\" type=\"ifc:IfcFlowMeterType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMeterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMovingDevice\" type=\"ifc:IfcFlowMovingDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMovingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMovingDeviceType\" type=\"ifc:IfcFlowMovingDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMovingDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowSegment\" type=\"ifc:IfcFlowSegment\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowSegmentType\" type=\"ifc:IfcFlowSegmentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowSegmentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowStorageDevice\" type=\"ifc:IfcFlowStorageDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowStorageDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowStorageDeviceType\" type=\"ifc:IfcFlowStorageDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowStorageDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTerminal\" type=\"ifc:IfcFlowTerminal\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTerminalType\" type=\"ifc:IfcFlowTerminalType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTerminalType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTreatmentDevice\" type=\"ifc:IfcFlowTreatmentDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTreatmentDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTreatmentDeviceType\" type=\"ifc:IfcFlowTreatmentDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTreatmentDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFooting\" type=\"ifc:IfcFooting\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFooting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFootingType\" type=\"ifc:IfcFootingType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFootingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnishingElement\" type=\"ifc:IfcFurnishingElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnishingElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnishingElementType\" type=\"ifc:IfcFurnishingElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnishingElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurniture\" type=\"ifc:IfcFurniture\" substitutionGroup=\"ifc:IfcFurnishingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurniture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFurnitureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnitureType\" type=\"ifc:IfcFurnitureType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnitureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\n\t\t\t\t<xs:attribute name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFurnitureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeographicElement\" type=\"ifc:IfcGeographicElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeographicElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGeographicElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeographicElementType\" type=\"ifc:IfcGeographicElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeographicElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGeographicElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricCurveSet\" type=\"ifc:IfcGeometricCurveSet\" substitutionGroup=\"ifc:IfcGeometricSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricCurveSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationContext\" type=\"ifc:IfcGeometricRepresentationContext\" substitutionGroup=\"ifc:IfcRepresentationContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationContext\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WorldCoordinateSystem\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TrueNorth\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"HasSubContexts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationSubContext\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGeometricRepresentationSubContext\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasCoordinateOperation\" type=\"ifc:IfcCoordinateOperation\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CoordinateSpaceDimension\" type=\"ifc:IfcDimensionCount\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Precision\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationItem\" type=\"ifc:IfcGeometricRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcGeometricRepresentationContext\">\n\t\t\t\t<xs:sequence/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationSubContext\" type=\"ifc:IfcGeometricRepresentationSubContext\" substitutionGroup=\"ifc:IfcGeometricRepresentationContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationSubContext-temp\">\n\t\t\t\t<xs:attribute name=\"TargetScale\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TargetView\" type=\"ifc:IfcGeometricProjectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedTargetView\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricSet\" type=\"ifc:IfcGeometricSet\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGeometricSetSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGrid\" type=\"ifc:IfcGrid\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGrid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WAxes\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGridTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGridAxis\" type=\"ifc:IfcGridAxis\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGridAxis\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"AxisTag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGridPlacement\" type=\"ifc:IfcGridPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGridPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlacementLocation\" type=\"ifc:IfcVirtualGridIntersection\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"PlacementRefDirection\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGridPlacementDirectionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGroup\" type=\"ifc:IfcGroup\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHalfSpaceSolid\" type=\"ifc:IfcHalfSpaceSolid\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHalfSpaceSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"AgreementFlag\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHeatExchanger\" type=\"ifc:IfcHeatExchanger\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHeatExchanger\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHeatExchangerType\" type=\"ifc:IfcHeatExchangerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHeatExchangerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHumidifier\" type=\"ifc:IfcHumidifier\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHumidifier\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHumidifierType\" type=\"ifc:IfcHumidifierType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHumidifierType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIShapeProfileDef\" type=\"ifc:IfcIShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcImageTexture\" type=\"ifc:IfcImageTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcImageTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:attribute name=\"URLReference\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedColourMap\" type=\"ifc:IfcIndexedColourMap\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedColourMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Colours\" type=\"ifc:IfcColourRgbList\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Opacity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ColourIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolyCurve\" type=\"ifc:IfcIndexedPolyCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolyCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Points\" type=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Segments\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSegmentIndexSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSegmentIndexSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolygonalFace\" type=\"ifc:IfcIndexedPolygonalFace\" substitutionGroup=\"ifc:IfcTessellatedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolygonalFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedItem\">\n\t\t\t\t<xs:attribute name=\"CoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolygonalFaceWithVoids\" type=\"ifc:IfcIndexedPolygonalFaceWithVoids\" substitutionGroup=\"ifc:IfcIndexedPolygonalFace\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolygonalFaceWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcIndexedPolygonalFace\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerCoordIndices\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element name=\"Seq-IfcPositiveInteger-wrapper\" type=\"ifc:Seq-IfcPositiveInteger\" maxOccurs=\"unbounded\" />\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedTextureMap\" type=\"ifc:IfcIndexedTextureMap\" abstract=\"true\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedTextureMap\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TexCoords\" type=\"ifc:IfcTextureVertexList\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedTriangleTextureMap\" type=\"ifc:IfcIndexedTriangleTextureMap\" substitutionGroup=\"ifc:IfcIndexedTextureMap\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedTriangleTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcIndexedTextureMap\">\n\t\t\t\t<xs:attribute name=\"TexCoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInterceptor\" type=\"ifc:IfcInterceptor\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInterceptor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInterceptorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInterceptorType\" type=\"ifc:IfcInterceptorType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInterceptorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInterceptorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIntersectionCurve\" type=\"ifc:IfcIntersectionCurve\" substitutionGroup=\"ifc:IfcSurfaceCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIntersectionCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInventory\" type=\"ifc:IfcInventory\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInventory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Jurisdiction\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResponsiblePersons\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPerson\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurrentValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"OriginalValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInventoryTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastUpdateDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIrregularTimeSeries\" type=\"ifc:IfcIrregularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIrregularTimeSeries\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIrregularTimeSeriesValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIrregularTimeSeriesValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIrregularTimeSeriesValue\" type=\"ifc:IfcIrregularTimeSeriesValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIrregularTimeSeriesValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TimeStamp\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcJunctionBox\" type=\"ifc:IfcJunctionBox\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcJunctionBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcJunctionBoxType\" type=\"ifc:IfcJunctionBoxType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcJunctionBoxType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLShapeProfileDef\" type=\"ifc:IfcLShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LegSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLaborResource\" type=\"ifc:IfcLaborResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLaborResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLaborResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLaborResourceType\" type=\"ifc:IfcLaborResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLaborResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLaborResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLagTime\" type=\"ifc:IfcLagTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLagTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LagValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTimeOrRatioSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"DurationType\" type=\"ifc:IfcTaskDurationEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLamp\" type=\"ifc:IfcLamp\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLamp\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLampType\" type=\"ifc:IfcLampType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLampType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLibraryInformation\" type=\"ifc:IfcLibraryInformation\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLibraryInformation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Publisher\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Version\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VersionDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLibraryReference\" type=\"ifc:IfcLibraryReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLibraryReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedLibrary\" type=\"ifc:IfcLibraryInformation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Language\" type=\"ifc:IfcLanguageId\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightDistributionData\" type=\"ifc:IfcLightDistributionData\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightDistributionData\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"MainPlaneAngle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondaryPlaneAngle\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPlaneAngleMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"LuminousIntensity\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLuminousIntensityDistributionMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightFixture\" type=\"ifc:IfcLightFixture\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightFixture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightFixtureType\" type=\"ifc:IfcLightFixtureType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightFixtureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightIntensityDistribution\" type=\"ifc:IfcLightIntensityDistribution\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightIntensityDistribution\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DistributionData\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLightDistributionData\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLightDistributionData\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LightDistributionCurve\" type=\"ifc:IfcLightDistributionCurveEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSource\" type=\"ifc:IfcLightSource\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LightColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AmbientIntensity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Intensity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceAmbient\" type=\"ifc:IfcLightSourceAmbient\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceAmbient\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceDirectional\" type=\"ifc:IfcLightSourceDirectional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceDirectional\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceGoniometric\" type=\"ifc:IfcLightSourceGoniometric\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceGoniometric\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ColourAppearance\" type=\"ifc:IfcColourRgb\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LightDistributionDataSource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ColourTemperature\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LuminousFlux\" type=\"ifc:IfcLuminousFluxMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LightEmissionSource\" type=\"ifc:IfcLightEmissionSourceEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourcePositional\" type=\"ifc:IfcLightSourcePositional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourcePositional\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstantAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DistanceAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"QuadricAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceSpot\" type=\"ifc:IfcLightSourceSpot\" substitutionGroup=\"ifc:IfcLightSourcePositional\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceSpot\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSourcePositional\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ConcentrationExponent\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SpreadAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BeamWidthAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLine\" type=\"ifc:IfcLine\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Pnt\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Dir\" type=\"ifc:IfcVector\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLocalPlacement\" type=\"ifc:IfcLocalPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLocalPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlacementRelTo\" type=\"ifc:IfcObjectPlacement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RelativePlacement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLoop\" type=\"ifc:IfcLoop\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcManifoldSolidBrep\" type=\"ifc:IfcManifoldSolidBrep\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcManifoldSolidBrep\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Outer\" type=\"ifc:IfcClosedShell\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMapConversion\" type=\"ifc:IfcMapConversion\" substitutionGroup=\"ifc:IfcCoordinateOperation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMapConversion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCoordinateOperation\">\n\t\t\t\t<xs:attribute name=\"Eastings\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Northings\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OrthogonalHeight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"XAxisAbscissa\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"XAxisOrdinate\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scale\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMappedItem\" type=\"ifc:IfcMappedItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMappedItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MappingSource\" type=\"ifc:IfcRepresentationMap\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"MappingTarget\" type=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterial\" type=\"ifc:IfcMaterial\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterial\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasRepresentation\" type=\"ifc:IfcMaterialDefinitionRepresentation\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialClassificationRelationship\" type=\"ifc:IfcMaterialClassificationRelationship\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialClassificationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialClassifications\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ClassifiedMaterial\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialConstituent\" type=\"ifc:IfcMaterialConstituent\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialConstituent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Fraction\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialConstituentSet\" type=\"ifc:IfcMaterialConstituentSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialConstituentSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialConstituents\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialConstituent\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialConstituent\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialDefinition\" type=\"ifc:IfcMaterialDefinition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialDefinitionRepresentation\" type=\"ifc:IfcMaterialDefinitionRepresentation\" substitutionGroup=\"ifc:IfcProductRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialDefinitionRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayer\" type=\"ifc:IfcMaterialLayer\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsVentilated\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerSet\" type=\"ifc:IfcMaterialLayerSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialLayers\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialLayer\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerSetName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerSetUsage\" type=\"ifc:IfcMaterialLayerSetUsage\" substitutionGroup=\"ifc:IfcMaterialUsageDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerSetUsage\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialUsageDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForLayerSet\" type=\"ifc:IfcMaterialLayerSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerSetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DirectionSense\" type=\"ifc:IfcDirectionSenseEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OffsetFromReferenceLine\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReferenceExtent\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerWithOffsets\" type=\"ifc:IfcMaterialLayerWithOffsets\" substitutionGroup=\"ifc:IfcMaterialLayer\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerWithOffsets\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialLayer\">\n\t\t\t\t<xs:attribute name=\"OffsetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OffsetValues\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialList\" type=\"ifc:IfcMaterialList\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Materials\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfile\" type=\"ifc:IfcMaterialProfile\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfile\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Profile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSet\" type=\"ifc:IfcMaterialProfileSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialProfiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialProfile\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialProfile\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CompositeProfile\" type=\"ifc:IfcCompositeProfileDef\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSetUsage\" type=\"ifc:IfcMaterialProfileSetUsage\" substitutionGroup=\"ifc:IfcMaterialUsageDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSetUsage\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialUsageDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForProfileSet\" type=\"ifc:IfcMaterialProfileSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CardinalPoint\" type=\"ifc:IfcCardinalPointReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReferenceExtent\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSetUsageTapering\" type=\"ifc:IfcMaterialProfileSetUsageTapering\" substitutionGroup=\"ifc:IfcMaterialProfileSetUsage\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSetUsageTapering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProfileSetUsage\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForProfileEndSet\" type=\"ifc:IfcMaterialProfileSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CardinalEndPoint\" type=\"ifc:IfcCardinalPointReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileWithOffsets\" type=\"ifc:IfcMaterialProfileWithOffsets\" substitutionGroup=\"ifc:IfcMaterialProfile\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileWithOffsets\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProfile\">\n\t\t\t\t<xs:attribute name=\"OffsetValues\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProperties\" type=\"ifc:IfcMaterialProperties\" substitutionGroup=\"ifc:IfcExtendedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtendedProperties\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialRelationship\" type=\"ifc:IfcMaterialRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedMaterials\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialUsageDefinition\" type=\"ifc:IfcMaterialUsageDefinition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialUsageDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMeasureWithUnit\" type=\"ifc:IfcMeasureWithUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMeasureWithUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ValueComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalFastener\" type=\"ifc:IfcMechanicalFastener\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalFastener\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMechanicalFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalFastenerType\" type=\"ifc:IfcMechanicalFastenerType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalFastenerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMechanicalFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMedicalDevice\" type=\"ifc:IfcMedicalDevice\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMedicalDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMedicalDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMedicalDeviceType\" type=\"ifc:IfcMedicalDeviceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMedicalDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMedicalDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMember\" type=\"ifc:IfcMember\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMemberStandardCase\" type=\"ifc:IfcMemberStandardCase\" substitutionGroup=\"ifc:IfcMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMemberStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMemberType\" type=\"ifc:IfcMemberType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMemberType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMetric\" type=\"ifc:IfcMetric\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMetric\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DataValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencePath\" type=\"ifc:IfcReference\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Benchmark\" type=\"ifc:IfcBenchmarkEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValueSource\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcMirroredProfileDef-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcDerivedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMirroredProfileDef\" type=\"ifc:IfcMirroredProfileDef\" substitutionGroup=\"ifc:IfcDerivedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMirroredProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMirroredProfileDef-temp\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMonetaryUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Currency\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMotorConnection\" type=\"ifc:IfcMotorConnection\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMotorConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMotorConnectionType\" type=\"ifc:IfcMotorConnectionType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMotorConnectionType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcNamedUnit\" type=\"ifc:IfcNamedUnit\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcNamedUnit\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Dimensions\" type=\"ifc:IfcDimensionalExponents\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UnitType\" type=\"ifc:IfcUnitEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObject\" type=\"ifc:IfcObject\" abstract=\"true\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObject\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IsDeclaredBy\" type=\"ifc:IfcRelDefinesByObject\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"IsTypedBy\" type=\"ifc:IfcRelDefinesByType\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"IsDefinedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDefinesByProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDefinesByProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ObjectType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjectDefinition\" type=\"ifc:IfcObjectDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjectDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IsNestedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelNests\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelNests\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"IsDecomposedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelAggregates\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelAggregates\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjectPlacement\" type=\"ifc:IfcObjectPlacement\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjectPlacement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjective\" type=\"ifc:IfcObjective\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjective\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BenchmarkValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcConstraint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LogicalAggregator\" type=\"ifc:IfcLogicalOperatorEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ObjectiveQualifier\" type=\"ifc:IfcObjectiveEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedQualifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOccupant\" type=\"ifc:IfcOccupant\" substitutionGroup=\"ifc:IfcActor\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOccupant\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcActor\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOccupantTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurve2D\" type=\"ifc:IfcOffsetCurve2D\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurve2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Distance\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurve3D\" type=\"ifc:IfcOffsetCurve3D\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurve3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Distance\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpenShell\" type=\"ifc:IfcOpenShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpenShell\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpeningElement\" type=\"ifc:IfcOpeningElement\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpeningElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasFillings\" type=\"ifc:IfcRelFillsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOpeningElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpeningStandardCase\" type=\"ifc:IfcOpeningStandardCase\" substitutionGroup=\"ifc:IfcOpeningElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpeningStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOpeningElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrganization\" type=\"ifc:IfcOrganization\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrganization\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Addresses\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAddress\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrganizationRelationship\" type=\"ifc:IfcOrganizationRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrganizationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingOrganization\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedOrganizations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrganization\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcOrientedEdge-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrientedEdge\" type=\"ifc:IfcOrientedEdge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrientedEdge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOrientedEdge-temp\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeElement\" type=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Orientation\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOuterBoundaryCurve\" type=\"ifc:IfcOuterBoundaryCurve\" substitutionGroup=\"ifc:IfcBoundaryCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOuterBoundaryCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOutlet\" type=\"ifc:IfcOutlet\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOutlet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOutletType\" type=\"ifc:IfcOutletType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOutletType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOwnerHistory\" type=\"ifc:IfcOwnerHistory\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOwnerHistory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OwningUser\" type=\"ifc:IfcPersonAndOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"OwningApplication\" type=\"ifc:IfcApplication\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"LastModifyingUser\" type=\"ifc:IfcPersonAndOrganization\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LastModifyingApplication\" type=\"ifc:IfcApplication\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"State\" type=\"ifc:IfcStateEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ChangeAction\" type=\"ifc:IfcChangeActionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastModifiedDate\" type=\"ifc:IfcTimeStamp\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationDate\" type=\"ifc:IfcTimeStamp\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcParameterizedProfileDef\" type=\"ifc:IfcParameterizedProfileDef\" abstract=\"true\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcParameterizedProfileDef\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement2D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPath\" type=\"ifc:IfcPath\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPath\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPcurve\" type=\"ifc:IfcPcurve\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPcurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReferenceCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPerformanceHistory\" type=\"ifc:IfcPerformanceHistory\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPerformanceHistory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"LifeCyclePhase\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPerformanceHistoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPermeableCoveringProperties\" type=\"ifc:IfcPermeableCoveringProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPermeableCoveringProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcPermeableCoveringOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPermit\" type=\"ifc:IfcPermit\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPermit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPermitTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPerson\" type=\"ifc:IfcPerson\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPerson\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Addresses\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAddress\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FamilyName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"GivenName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MiddleNames\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PrefixTitles\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"SuffixTitles\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPersonAndOrganization\" type=\"ifc:IfcPersonAndOrganization\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPersonAndOrganization\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ThePerson\" type=\"ifc:IfcPerson\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TheOrganization\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalComplexQuantity\" type=\"ifc:IfcPhysicalComplexQuantity\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalComplexQuantity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasQuantities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Discrimination\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Quality\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Usage\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalQuantity\" type=\"ifc:IfcPhysicalQuantity\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalQuantity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalSimpleQuantity\" type=\"ifc:IfcPhysicalSimpleQuantity\" abstract=\"true\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalSimpleQuantity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" type=\"ifc:IfcNamedUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPile\" type=\"ifc:IfcPile\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPile\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstructionType\" type=\"ifc:IfcPileConstructionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPileType\" type=\"ifc:IfcPileType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPileType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeFitting\" type=\"ifc:IfcPipeFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeFittingType\" type=\"ifc:IfcPipeFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeSegment\" type=\"ifc:IfcPipeSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeSegmentType\" type=\"ifc:IfcPipeSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPixelTexture\" type=\"ifc:IfcPixelTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPixelTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ColourComponents\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Pixel\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"xs:hexBinary\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlacement\" type=\"ifc:IfcPlacement\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlacement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Location\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlanarBox\" type=\"ifc:IfcPlanarBox\" substitutionGroup=\"ifc:IfcPlanarExtent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlanarBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlanarExtent\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Placement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlanarExtent\" type=\"ifc:IfcPlanarExtent\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlanarExtent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:attribute name=\"SizeInX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SizeInY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlane\" type=\"ifc:IfcPlane\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlane\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlate\" type=\"ifc:IfcPlate\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlateStandardCase\" type=\"ifc:IfcPlateStandardCase\" substitutionGroup=\"ifc:IfcPlate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlateStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlate\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlateType\" type=\"ifc:IfcPlateType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlateType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPoint\" type=\"ifc:IfcPoint\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPoint\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPointOnCurve\" type=\"ifc:IfcPointOnCurve\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPointOnCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PointParameter\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPointOnSurface\" type=\"ifc:IfcPointOnSurface\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPointOnSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PointParameterU\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PointParameterV\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolyLoop\" type=\"ifc:IfcPolyLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolyLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Polygon\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"3\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolygonalBoundedHalfSpace\" type=\"ifc:IfcPolygonalBoundedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolygonalBoundedHalfSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"PolygonalBoundary\" type=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolygonalFaceSet\" type=\"ifc:IfcPolygonalFaceSet\" substitutionGroup=\"ifc:IfcTessellatedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolygonalFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedFaceSet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Faces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIndexedPolygonalFace\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIndexedPolygonalFace\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Closed\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PnIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolyline\" type=\"ifc:IfcPolyline\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolyline\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Points\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPort\" type=\"ifc:IfcPort\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPort\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPostalAddress\" type=\"ifc:IfcPostalAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPostalAddress\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AddressLines\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"InternalLocation\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PostalBox\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Town\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Region\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PostalCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Country\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedColour\" type=\"ifc:IfcPreDefinedColour\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedColour\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedCurveFont\" type=\"ifc:IfcPreDefinedCurveFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedCurveFont\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedItem\" type=\"ifc:IfcPreDefinedItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedProperties\" type=\"ifc:IfcPreDefinedProperties\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedProperties\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedPropertySet\" type=\"ifc:IfcPreDefinedPropertySet\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedPropertySet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedTextFont\" type=\"ifc:IfcPreDefinedTextFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedTextFont\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationItem\" type=\"ifc:IfcPresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationLayerAssignment\" type=\"ifc:IfcPresentationLayerAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationLayerAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AssignedItems\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLayeredItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLayeredItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationLayerWithStyle\" type=\"ifc:IfcPresentationLayerWithStyle\" substitutionGroup=\"ifc:IfcPresentationLayerAssignment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationLayerWithStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationLayerAssignment\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LayerStyles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPresentationStyle\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPresentationStyle\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerOn\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LayerFrozen\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LayerBlocked\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationStyle\" type=\"ifc:IfcPresentationStyle\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationStyle\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationStyleAssignment\" type=\"ifc:IfcPresentationStyleAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationStyleAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPresentationStyleSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcedure\" type=\"ifc:IfcProcedure\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcedure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProcedureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcedureType\" type=\"ifc:IfcProcedureType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcedureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProcedureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcess\" type=\"ifc:IfcProcess\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcess\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProduct\" type=\"ifc:IfcProduct\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProduct\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ObjectPlacement\" type=\"ifc:IfcObjectPlacement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Representation\" type=\"ifc:IfcProductRepresentation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProductDefinitionShape\" type=\"ifc:IfcProductDefinitionShape\" substitutionGroup=\"ifc:IfcProductRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProductDefinitionShape\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasShapeAspects\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShapeAspect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProductRepresentation\" type=\"ifc:IfcProductRepresentation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProductRepresentation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Representations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentation\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProfileDef\" type=\"ifc:IfcProfileDef\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ProfileType\" type=\"ifc:IfcProfileTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProfileName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProfileProperties\" type=\"ifc:IfcProfileProperties\" substitutionGroup=\"ifc:IfcExtendedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProfileProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtendedProperties\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProject\" type=\"ifc:IfcProject\" substitutionGroup=\"ifc:IfcContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcContext\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectLibrary\" type=\"ifc:IfcProjectLibrary\" substitutionGroup=\"ifc:IfcContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectLibrary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcContext\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectOrder\" type=\"ifc:IfcProjectOrder\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectOrder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProjectOrderTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectedCRS\" type=\"ifc:IfcProjectedCRS\" substitutionGroup=\"ifc:IfcCoordinateReferenceSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectedCRS\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCoordinateReferenceSystem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MapUnit\" type=\"ifc:IfcNamedUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MapProjection\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MapZone\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectionElement\" type=\"ifc:IfcProjectionElement\" substitutionGroup=\"ifc:IfcFeatureElementAddition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectionElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementAddition\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProjectionElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProperty\" type=\"ifc:IfcProperty\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProperty\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyAbstraction\" type=\"ifc:IfcPropertyAbstraction\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyAbstraction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyBoundedValue\" type=\"ifc:IfcPropertyBoundedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyBoundedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UpperBoundValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LowerBoundValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SetPointValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyDefinition\" type=\"ifc:IfcPropertyDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyDependencyRelationship\" type=\"ifc:IfcPropertyDependencyRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyDependencyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DependingProperty\" type=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"DependantProperty\" type=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyEnumeratedValue\" type=\"ifc:IfcPropertyEnumeratedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyEnumeratedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EnumerationValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EnumerationReference\" type=\"ifc:IfcPropertyEnumeration\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyEnumeration\" type=\"ifc:IfcPropertyEnumeration\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyEnumeration\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyListValue\" type=\"ifc:IfcPropertyListValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyListValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyReferenceValue\" type=\"ifc:IfcPropertyReferenceValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyReferenceValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PropertyReference\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySet\" type=\"ifc:IfcPropertySet\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySetDefinition\" type=\"ifc:IfcPropertySetDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySetDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySetTemplate\" type=\"ifc:IfcPropertySetTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplateDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySetTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplateDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertyTemplates\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyTemplate\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertyTemplate\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcPropertySetTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicableEntity\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySingleValue\" type=\"ifc:IfcPropertySingleValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySingleValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"NominalValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTableValue\" type=\"ifc:IfcPropertyTableValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTableValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DefiningValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefinedValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefiningUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefinedUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveInterpolation\" type=\"ifc:IfcCurveInterpolationEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTemplate\" type=\"ifc:IfcPropertyTemplate\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyTemplateDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTemplate\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplateDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTemplateDefinition\" type=\"ifc:IfcPropertyTemplateDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTemplateDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDevice\" type=\"ifc:IfcProtectiveDevice\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceTrippingUnit\" type=\"ifc:IfcProtectiveDeviceTrippingUnit\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceTrippingUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceTrippingUnitType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceTrippingUnitType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceType\" type=\"ifc:IfcProtectiveDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProxy\" type=\"ifc:IfcProxy\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProxy\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:attribute name=\"ProxyType\" type=\"ifc:IfcObjectTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPump\" type=\"ifc:IfcPump\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPump\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPumpType\" type=\"ifc:IfcPumpType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPumpType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityArea\" type=\"ifc:IfcQuantityArea\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"AreaValue\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityCount\" type=\"ifc:IfcQuantityCount\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityCount\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"CountValue\" type=\"ifc:IfcCountMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityLength\" type=\"ifc:IfcQuantityLength\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityLength\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"LengthValue\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantitySet\" type=\"ifc:IfcQuantitySet\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantitySet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityTime\" type=\"ifc:IfcQuantityTime\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"TimeValue\" type=\"ifc:IfcTimeMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityVolume\" type=\"ifc:IfcQuantityVolume\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityVolume\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"VolumeValue\" type=\"ifc:IfcVolumeMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityWeight\" type=\"ifc:IfcQuantityWeight\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityWeight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"WeightValue\" type=\"ifc:IfcMassMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailing\" type=\"ifc:IfcRailing\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailing\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailingType\" type=\"ifc:IfcRailingType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRamp\" type=\"ifc:IfcRamp\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRamp\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampFlight\" type=\"ifc:IfcRampFlight\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampFlight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampFlightType\" type=\"ifc:IfcRampFlightType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampFlightType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampType\" type=\"ifc:IfcRampType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRationalBSplineCurveWithKnots\" type=\"ifc:IfcRationalBSplineCurveWithKnots\" substitutionGroup=\"ifc:IfcBSplineCurveWithKnots\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRationalBSplineCurveWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurveWithKnots\">\n\t\t\t\t<xs:attribute name=\"WeightsData\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRationalBSplineSurfaceWithKnots\" type=\"ifc:IfcRationalBSplineSurfaceWithKnots\" substitutionGroup=\"ifc:IfcBSplineSurfaceWithKnots\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRationalBSplineSurfaceWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineSurfaceWithKnots\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WeightsData\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\" minOccurs=\"4\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcReal-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangleHollowProfileDef\" type=\"ifc:IfcRectangleHollowProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangleHollowProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InnerFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OuterFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangleProfileDef\" type=\"ifc:IfcRectangleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangularPyramid\" type=\"ifc:IfcRectangularPyramid\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangularPyramid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangularTrimmedSurface\" type=\"ifc:IfcRectangularTrimmedSurface\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangularTrimmedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"U1\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"V1\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"U2\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"V2\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Usense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Vsense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRecurrencePattern\" type=\"ifc:IfcRecurrencePattern\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRecurrencePattern\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TimePeriods\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimePeriod\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTimePeriod\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RecurrenceType\" type=\"ifc:IfcRecurrenceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DayComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcDayInMonthNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"WeekdayComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcDayInWeekNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"MonthComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcMonthInYearNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Position\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Interval\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Occurrences\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReference\" type=\"ifc:IfcReference\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerReference\" type=\"ifc:IfcReference\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TypeIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AttributeIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InstanceName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ListPositions\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRegularTimeSeries\" type=\"ifc:IfcRegularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRegularTimeSeries\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeriesValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTimeSeriesValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TimeStep\" type=\"ifc:IfcTimeMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcementBarProperties\" type=\"ifc:IfcReinforcementBarProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcementBarProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:attribute name=\"TotalCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SteelGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EffectiveDepth\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalBarDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarCount\" type=\"ifc:IfcCountMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcementDefinitionProperties\" type=\"ifc:IfcReinforcementDefinitionProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcementDefinitionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReinforcementSectionDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionReinforcementProperties\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSectionReinforcementProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"DefinitionType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingBar\" type=\"ifc:IfcReinforcingBar\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingBar\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingBarTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingBarType\" type=\"ifc:IfcReinforcingBarType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingBarType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BendingParameters\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBendingParameterSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBendingParameterSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingBarTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BendingShapeCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingElement\" type=\"ifc:IfcReinforcingElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"SteelGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingElementType\" type=\"ifc:IfcReinforcingElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingMesh\" type=\"ifc:IfcReinforcingMesh\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingMesh\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"MeshLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingMeshTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingMeshType\" type=\"ifc:IfcReinforcingMeshType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingMeshType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BendingParameters\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBendingParameterSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBendingParameterSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingMeshTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BendingShapeCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAggregates\" type=\"ifc:IfcRelAggregates\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAggregates\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssigns\" type=\"ifc:IfcRelAssigns\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssigns\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RelatedObjectsType\" type=\"ifc:IfcObjectTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToActor\" type=\"ifc:IfcRelAssignsToActor\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToActor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingActor\" type=\"ifc:IfcActor\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ActingRole\" type=\"ifc:IfcActorRole\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToControl\" type=\"ifc:IfcRelAssignsToControl\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToControl\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingControl\" type=\"ifc:IfcControl\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToGroup\" type=\"ifc:IfcRelAssignsToGroup\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingGroup\" type=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToGroupByFactor\" type=\"ifc:IfcRelAssignsToGroupByFactor\" substitutionGroup=\"ifc:IfcRelAssignsToGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToGroupByFactor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToGroup\">\n\t\t\t\t<xs:attribute name=\"Factor\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToProcess\" type=\"ifc:IfcRelAssignsToProcess\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToProcess\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcProcessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"QuantityInProcess\" type=\"ifc:IfcMeasureWithUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToProduct\" type=\"ifc:IfcRelAssignsToProduct\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToProduct\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProduct\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcProductSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToResource\" type=\"ifc:IfcRelAssignsToResource\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingResource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociates\" type=\"ifc:IfcRelAssociates\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociates\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinitionSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDefinitionSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesApproval\" type=\"ifc:IfcRelAssociatesApproval\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesApproval\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesClassification\" type=\"ifc:IfcRelAssociatesClassification\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesClassification\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingClassification\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesConstraint\" type=\"ifc:IfcRelAssociatesConstraint\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesConstraint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\" type=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Intent\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesDocument\" type=\"ifc:IfcRelAssociatesDocument\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesDocument\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesLibrary\" type=\"ifc:IfcRelAssociatesLibrary\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesLibrary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingLibrary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLibrarySelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesMaterial\" type=\"ifc:IfcRelAssociatesMaterial\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesMaterial\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMaterialSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnects\" type=\"ifc:IfcRelConnects\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnects\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsElements\" type=\"ifc:IfcRelConnectsElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RelatingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPathElements\" type=\"ifc:IfcRelConnectsPathElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPathElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\n\t\t\t\t<xs:attribute name=\"RelatingPriorities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"0\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"RelatedPriorities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"0\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"RelatedConnectionType\" type=\"ifc:IfcConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RelatingConnectionType\" type=\"ifc:IfcConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPortToElement\" type=\"ifc:IfcRelConnectsPortToElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPortToElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPorts\" type=\"ifc:IfcRelConnectsPorts\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPorts\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RealizingElement\" type=\"ifc:IfcElement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsStructuralActivity\" type=\"ifc:IfcRelConnectsStructuralActivity\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsStructuralActivity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralActivity\" type=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsStructuralMember\" type=\"ifc:IfcRelConnectsStructuralMember\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsStructuralMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingStructuralMember\" type=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralConnection\" type=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" type=\"ifc:IfcBoundaryCondition\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"AdditionalConditions\" type=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ConditionCoordinateSystem\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SupportedLength\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsWithEccentricity\" type=\"ifc:IfcRelConnectsWithEccentricity\" substitutionGroup=\"ifc:IfcRelConnectsStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsWithEccentricity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConnectionConstraint\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsWithRealizingElements\" type=\"ifc:IfcRelConnectsWithRealizingElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsWithRealizingElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RealizingElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ConnectionType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelContainedInSpatialStructure\" type=\"ifc:IfcRelContainedInSpatialStructure\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelContainedInSpatialStructure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProduct\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelCoversBldgElements\" type=\"ifc:IfcRelCoversBldgElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelCoversBldgElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCovering\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelCoversSpaces\" type=\"ifc:IfcRelCoversSpaces\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelCoversSpaces\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSpace\" type=\"ifc:IfcSpace\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCovering\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDeclares\" type=\"ifc:IfcRelDeclares\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDeclares\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinitionSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDefinitionSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDecomposes\" type=\"ifc:IfcRelDecomposes\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDecomposes\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefines\" type=\"ifc:IfcRelDefines\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefines\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByObject\" type=\"ifc:IfcRelDefinesByObject\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByObject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObject\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByProperties\" type=\"ifc:IfcRelDefinesByProperties\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPropertyDefinition\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPropertySetDefinitionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByTemplate\" type=\"ifc:IfcRelDefinesByTemplate\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedPropertySets\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingTemplate\" type=\"ifc:IfcPropertySetTemplate\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByType\" type=\"ifc:IfcRelDefinesByType\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingType\" type=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelFillsElement\" type=\"ifc:IfcRelFillsElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelFillsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelFlowControlElements\" type=\"ifc:IfcRelFlowControlElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelFlowControlElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedControlElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionControlElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDistributionControlElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingFlowElement\" type=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelInterferesElements\" type=\"ifc:IfcRelInterferesElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelInterferesElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InterferenceGeometry\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"InterferenceType\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ImpliedOrder\" type=\"ifc:logical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelNests\" type=\"ifc:IfcRelNests\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelNests\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelProjectsElement\" type=\"ifc:IfcRelProjectsElement\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelProjectsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedFeatureElement\" type=\"ifc:IfcFeatureElementAddition\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelReferencedInSpatialStructure\" type=\"ifc:IfcRelReferencedInSpatialStructure\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelReferencedInSpatialStructure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProduct\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSequence\" type=\"ifc:IfcRelSequence\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSequence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProcess\" type=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedProcess\" type=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TimeLag\" type=\"ifc:IfcLagTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SequenceType\" type=\"ifc:IfcSequenceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedSequenceType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelServicesBuildings\" type=\"ifc:IfcRelServicesBuildings\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelServicesBuildings\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSystem\" type=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedBuildings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSpatialElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary\" type=\"ifc:IfcRelSpaceBoundary\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSpace\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpaceBoundarySelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PhysicalOrVirtualBoundary\" type=\"ifc:IfcPhysicalOrVirtualEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InternalOrExternalBoundary\" type=\"ifc:IfcInternalOrExternalEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary1stLevel\" type=\"ifc:IfcRelSpaceBoundary1stLevel\" substitutionGroup=\"ifc:IfcRelSpaceBoundary\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary1stLevel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelSpaceBoundary\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentBoundary\" type=\"ifc:IfcRelSpaceBoundary1stLevel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary2ndLevel\" type=\"ifc:IfcRelSpaceBoundary2ndLevel\" substitutionGroup=\"ifc:IfcRelSpaceBoundary1stLevel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary2ndLevel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelSpaceBoundary1stLevel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CorrespondingBoundary\" type=\"ifc:IfcRelSpaceBoundary2ndLevel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelVoidsElement\" type=\"ifc:IfcRelVoidsElement\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelVoidsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedOpeningElement\" type=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelationship\" type=\"ifc:IfcRelationship\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelationship\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReparametrisedCompositeCurveSegment\" type=\"ifc:IfcReparametrisedCompositeCurveSegment\" substitutionGroup=\"ifc:IfcCompositeCurveSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReparametrisedCompositeCurveSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurveSegment\">\n\t\t\t\t<xs:attribute name=\"ParamLength\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentation\" type=\"ifc:IfcRepresentation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContextOfItems\" type=\"ifc:IfcRepresentationContext\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Items\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RepresentationIdentifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RepresentationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationContext\" type=\"ifc:IfcRepresentationContext\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationContext\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"ContextIdentifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ContextType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationItem\" type=\"ifc:IfcRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StyledByItem\" type=\"ifc:IfcStyledItem\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationMap\" type=\"ifc:IfcRepresentationMap\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MappingOrigin\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MappedRepresentation\" type=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResource\" type=\"ifc:IfcResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceApprovalRelationship\" type=\"ifc:IfcResourceApprovalRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceApprovalRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceConstraintRelationship\" type=\"ifc:IfcResourceConstraintRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceConstraintRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\" type=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceLevelRelationship\" type=\"ifc:IfcResourceLevelRelationship\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceLevelRelationship\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceTime\" type=\"ifc:IfcResourceTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"ScheduleWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleContour\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LevelingDelay\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsOverAllocated\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StatusTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Completion\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRevolvedAreaSolid\" type=\"ifc:IfcRevolvedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRevolvedAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcAxis1Placement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Angle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRevolvedAreaSolidTapered\" type=\"ifc:IfcRevolvedAreaSolidTapered\" substitutionGroup=\"ifc:IfcRevolvedAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRevolvedAreaSolidTapered\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRevolvedAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EndSweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRightCircularCone\" type=\"ifc:IfcRightCircularCone\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRightCircularCone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRightCircularCylinder\" type=\"ifc:IfcRightCircularCylinder\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRightCircularCylinder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoof\" type=\"ifc:IfcRoof\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoof\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRoofTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoofType\" type=\"ifc:IfcRoofType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoofType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRoofTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoot\" type=\"ifc:IfcRoot\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoot\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OwnerHistory\" type=\"ifc:IfcOwnerHistory\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"GlobalId\" type=\"ifc:IfcGloballyUniqueId\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoundedRectangleProfileDef\" type=\"ifc:IfcRoundedRectangleProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoundedRectangleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\n\t\t\t\t<xs:attribute name=\"RoundingRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcSIUnit-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:sequence/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSIUnit\" type=\"ifc:IfcSIUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSIUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSIUnit-temp\">\n\t\t\t\t<xs:attribute name=\"Prefix\" type=\"ifc:IfcSIPrefix\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcSIUnitName\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSanitaryTerminal\" type=\"ifc:IfcSanitaryTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSanitaryTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSanitaryTerminalType\" type=\"ifc:IfcSanitaryTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSanitaryTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSchedulingTime\" type=\"ifc:IfcSchedulingTime\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSchedulingTime\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedDataOrigin\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSeamCurve\" type=\"ifc:IfcSeamCurve\" substitutionGroup=\"ifc:IfcSurfaceCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSeamCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionProperties\" type=\"ifc:IfcSectionProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StartProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"EndProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SectionType\" type=\"ifc:IfcSectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionReinforcementProperties\" type=\"ifc:IfcSectionReinforcementProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionReinforcementProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SectionDefinition\" type=\"ifc:IfcSectionProperties\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CrossSectionReinforcementDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReinforcementBarProperties\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcReinforcementBarProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LongitudinalStartPosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalEndPosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransversePosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReinforcementRole\" type=\"ifc:IfcReinforcingBarRoleEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionedSpine\" type=\"ifc:IfcSectionedSpine\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionedSpine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SpineCurve\" type=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CrossSections\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CrossSectionPositions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAxis2Placement3D\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSensor\" type=\"ifc:IfcSensor\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSensor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSensorType\" type=\"ifc:IfcSensorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSensorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShadingDevice\" type=\"ifc:IfcShadingDevice\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShadingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcShadingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShadingDeviceType\" type=\"ifc:IfcShadingDeviceType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShadingDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcShadingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeAspect\" type=\"ifc:IfcShapeAspect\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeAspect\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeRepresentations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeModel\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShapeModel\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProductDefinitional\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeModel\" type=\"ifc:IfcShapeModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeRepresentation\" type=\"ifc:IfcShapeRepresentation\" substitutionGroup=\"ifc:IfcShapeModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShellBasedSurfaceModel\" type=\"ifc:IfcShellBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShellBasedSurfaceModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SbsmBoundary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSimpleProperty\" type=\"ifc:IfcSimpleProperty\" abstract=\"true\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSimpleProperty\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProperty\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSimplePropertyTemplate\" type=\"ifc:IfcSimplePropertyTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSimplePropertyTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Enumerators\" type=\"ifc:IfcPropertyEnumeration\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PrimaryUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondaryUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcSimplePropertyTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PrimaryMeasureType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondaryMeasureType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AccessState\" type=\"ifc:IfcStateEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSite\" type=\"ifc:IfcSite\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSite\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SiteAddress\" type=\"ifc:IfcPostalAddress\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RefLatitude\" type=\"ifc:List-IfcCompoundPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RefLongitude\" type=\"ifc:List-IfcCompoundPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RefElevation\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LandTitleNumber\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlab\" type=\"ifc:IfcSlab\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlab\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlabElementedCase\" type=\"ifc:IfcSlabElementedCase\" substitutionGroup=\"ifc:IfcSlab\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlabElementedCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSlab\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlabStandardCase\" type=\"ifc:IfcSlabStandardCase\" substitutionGroup=\"ifc:IfcSlab\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlabStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSlab\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlabType\" type=\"ifc:IfcSlabType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlabType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlippageConnectionCondition\" type=\"ifc:IfcSlippageConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlippageConnectionCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t<xs:attribute name=\"SlippageX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SlippageY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SlippageZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolarDevice\" type=\"ifc:IfcSolarDevice\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolarDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSolarDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolarDeviceType\" type=\"ifc:IfcSolarDeviceType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolarDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSolarDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolidModel\" type=\"ifc:IfcSolidModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolidModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpace\" type=\"ifc:IfcSpace\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElevationWithFlooring\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceHeater\" type=\"ifc:IfcSpaceHeater\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceHeater\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceHeaterType\" type=\"ifc:IfcSpaceHeaterType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceHeaterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceType\" type=\"ifc:IfcSpaceType\" substitutionGroup=\"ifc:IfcSpatialStructureElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialElement\" type=\"ifc:IfcSpatialElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContainsElements\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelContainedInSpatialStructure\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelContainedInSpatialStructure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencesElements\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelReferencedInSpatialStructure\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelReferencedInSpatialStructure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialElementType\" type=\"ifc:IfcSpatialElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ElementType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialStructureElement\" type=\"ifc:IfcSpatialStructureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialStructureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\">\n\t\t\t\t<xs:attribute name=\"CompositionType\" type=\"ifc:IfcElementCompositionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialStructureElementType\" type=\"ifc:IfcSpatialStructureElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialStructureElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialZone\" type=\"ifc:IfcSpatialZone\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialZone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpatialZoneTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialZoneType\" type=\"ifc:IfcSpatialZoneType\" substitutionGroup=\"ifc:IfcSpatialElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialZoneType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpatialZoneTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSphere\" type=\"ifc:IfcSphere\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSphere\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSphericalSurface\" type=\"ifc:IfcSphericalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSphericalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStackTerminal\" type=\"ifc:IfcStackTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStackTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStackTerminalType\" type=\"ifc:IfcStackTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStackTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStair\" type=\"ifc:IfcStair\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStair\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairFlight\" type=\"ifc:IfcStairFlight\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairFlight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"NumberOfRisers\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NumberOfTreads\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RiserHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TreadLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairFlightType\" type=\"ifc:IfcStairFlightType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairFlightType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairType\" type=\"ifc:IfcStairType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralAction\" type=\"ifc:IfcStructuralAction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralAction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\">\n\t\t\t\t<xs:attribute name=\"DestabilizingLoad\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralActivity\" type=\"ifc:IfcStructuralActivity\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralActivity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedLoad\" type=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"GlobalOrLocal\" type=\"ifc:IfcGlobalOrLocalEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralAnalysisModel\" type=\"ifc:IfcStructuralAnalysisModel\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralAnalysisModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OrientationOf2DPlane\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LoadedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralLoadGroup\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasResults\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralResultGroup\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralResultGroup\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SharedPlacement\" type=\"ifc:IfcObjectPlacement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAnalysisModelTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralConnection\" type=\"ifc:IfcStructuralConnection\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralConnection\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" type=\"ifc:IfcBoundaryCondition\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralConnectionCondition\" type=\"ifc:IfcStructuralConnectionCondition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralConnectionCondition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveAction\" type=\"ifc:IfcStructuralCurveAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\n\t\t\t\t<xs:attribute name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveConnection\" type=\"ifc:IfcStructuralCurveConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveMember\" type=\"ifc:IfcStructuralCurveMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveMemberVarying\" type=\"ifc:IfcStructuralCurveMemberVarying\" substitutionGroup=\"ifc:IfcStructuralCurveMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveMemberVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveReaction\" type=\"ifc:IfcStructuralCurveReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralItem\" type=\"ifc:IfcStructuralItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLinearAction\" type=\"ifc:IfcStructuralLinearAction\" substitutionGroup=\"ifc:IfcStructuralCurveAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLinearAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoad\" type=\"ifc:IfcStructuralLoad\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoad\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadCase\" type=\"ifc:IfcStructuralLoadCase\" substitutionGroup=\"ifc:IfcStructuralLoadGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadGroup\">\n\t\t\t\t<xs:attribute name=\"SelfWeightCoefficients\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcRatioMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadConfiguration\" type=\"ifc:IfcStructuralLoadConfiguration\" substitutionGroup=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadConfiguration\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadOrResult\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralLoadOrResult\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Locations\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\" minOccurs=\"1\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadGroup\" type=\"ifc:IfcStructuralLoadGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLoadGroupTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActionType\" type=\"ifc:IfcActionTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActionSource\" type=\"ifc:IfcActionSourceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Coefficient\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadLinearForce\" type=\"ifc:IfcStructuralLoadLinearForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadLinearForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"LinearForceX\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearForceY\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearForceZ\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentX\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentY\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentZ\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadOrResult\" type=\"ifc:IfcStructuralLoadOrResult\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadOrResult\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadPlanarForce\" type=\"ifc:IfcStructuralLoadPlanarForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadPlanarForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"PlanarForceX\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PlanarForceY\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PlanarForceZ\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacement\" type=\"ifc:IfcStructuralLoadSingleDisplacement\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"DisplacementX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DisplacementY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DisplacementZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRX\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRY\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRZ\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacementDistortion\" type=\"ifc:IfcStructuralLoadSingleDisplacementDistortion\" substitutionGroup=\"ifc:IfcStructuralLoadSingleDisplacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacementDistortion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleDisplacement\">\n\t\t\t\t<xs:attribute name=\"Distortion\" type=\"ifc:IfcCurvatureMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleForce\" type=\"ifc:IfcStructuralLoadSingleForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"ForceX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ForceY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ForceZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentX\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentY\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentZ\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleForceWarping\" type=\"ifc:IfcStructuralLoadSingleForceWarping\" substitutionGroup=\"ifc:IfcStructuralLoadSingleForce\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleForceWarping\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleForce\">\n\t\t\t\t<xs:attribute name=\"WarpingMoment\" type=\"ifc:IfcWarpingMomentMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadStatic\" type=\"ifc:IfcStructuralLoadStatic\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralLoadOrResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadStatic\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadOrResult\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadTemperature\" type=\"ifc:IfcStructuralLoadTemperature\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadTemperature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"DeltaTConstant\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DeltaTY\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DeltaTZ\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralMember\" type=\"ifc:IfcStructuralMember\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralMember\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPlanarAction\" type=\"ifc:IfcStructuralPlanarAction\" substitutionGroup=\"ifc:IfcStructuralSurfaceAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPlanarAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointAction\" type=\"ifc:IfcStructuralPointAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointConnection\" type=\"ifc:IfcStructuralPointConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConditionCoordinateSystem\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointReaction\" type=\"ifc:IfcStructuralPointReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralReaction\" type=\"ifc:IfcStructuralReaction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralReaction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralResultGroup\" type=\"ifc:IfcStructuralResultGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralResultGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ResultForLoadGroup\" type=\"ifc:IfcStructuralLoadGroup\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TheoryType\" type=\"ifc:IfcAnalysisTheoryTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsLinear\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceAction\" type=\"ifc:IfcStructuralSurfaceAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\n\t\t\t\t<xs:attribute name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceConnection\" type=\"ifc:IfcStructuralSurfaceConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceMember\" type=\"ifc:IfcStructuralSurfaceMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceMemberTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceMemberVarying\" type=\"ifc:IfcStructuralSurfaceMemberVarying\" substitutionGroup=\"ifc:IfcStructuralSurfaceMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceMemberVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceReaction\" type=\"ifc:IfcStructuralSurfaceReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyleModel\" type=\"ifc:IfcStyleModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyleModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyledItem\" type=\"ifc:IfcStyledItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyledItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcStyleAssignmentSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStyleAssignmentSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyledRepresentation\" type=\"ifc:IfcStyledRepresentation\" substitutionGroup=\"ifc:IfcStyleModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyledRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStyleModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubContractResource\" type=\"ifc:IfcSubContractResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubContractResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSubContractResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubContractResourceType\" type=\"ifc:IfcSubContractResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubContractResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSubContractResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubedge\" type=\"ifc:IfcSubedge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubedge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentEdge\" type=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurface\" type=\"ifc:IfcSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceCurve\" type=\"ifc:IfcSurfaceCurve\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Curve3D\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"AssociatedGeometry\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPcurve\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPcurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MasterRepresentation\" type=\"ifc:IfcPreferredSurfaceCurveRepresentation\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceCurveSweptAreaSolid\" type=\"ifc:IfcSurfaceCurveSweptAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceCurveSweptAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReferenceSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"StartParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceFeature\" type=\"ifc:IfcSurfaceFeature\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceFeature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSurfaceFeatureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceOfLinearExtrusion\" type=\"ifc:IfcSurfaceOfLinearExtrusion\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceOfLinearExtrusion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceOfRevolution\" type=\"ifc:IfcSurfaceOfRevolution\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceOfRevolution\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisPosition\" type=\"ifc:IfcAxis1Placement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceReinforcementArea\" type=\"ifc:IfcSurfaceReinforcementArea\" substitutionGroup=\"ifc:IfcStructuralLoadOrResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceReinforcementArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadOrResult\">\n\t\t\t\t<xs:attribute name=\"SurfaceReinforcement1\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"SurfaceReinforcement2\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"ShearReinforcement\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyle\" type=\"ifc:IfcSurfaceStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\" maxOccurs=\"5\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceStyleElementSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Side\" type=\"ifc:IfcSurfaceSide\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleLighting\" type=\"ifc:IfcSurfaceStyleLighting\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleLighting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"DiffuseReflectionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TransmissionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReflectanceColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleRefraction\" type=\"ifc:IfcSurfaceStyleRefraction\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleRefraction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"RefractionIndex\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DispersionFactor\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleRendering\" type=\"ifc:IfcSurfaceStyleRendering\" substitutionGroup=\"ifc:IfcSurfaceStyleShading\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleRendering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceStyleShading\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DiffuseColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TransmissionColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReflectionColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SpecularColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SpecularHighlight\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ReflectanceMethod\" type=\"ifc:IfcReflectanceMethodEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleShading\" type=\"ifc:IfcSurfaceStyleShading\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleShading\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SurfaceColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Transparency\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleWithTextures\" type=\"ifc:IfcSurfaceStyleWithTextures\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleWithTextures\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Textures\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceTexture\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceTexture\" type=\"ifc:IfcSurfaceTexture\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceTexture\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextureTransform\" type=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RepeatS\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RepeatT\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Mode\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Parameter\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcIdentifier\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptAreaSolid\" type=\"ifc:IfcSweptAreaSolid\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptAreaSolid\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptDiskSolid\" type=\"ifc:IfcSweptDiskSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptDiskSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InnerRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptDiskSolidPolygonal\" type=\"ifc:IfcSweptDiskSolidPolygonal\" substitutionGroup=\"ifc:IfcSweptDiskSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptDiskSolidPolygonal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptDiskSolid\">\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptSurface\" type=\"ifc:IfcSweptSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SweptCurve\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSwitchingDevice\" type=\"ifc:IfcSwitchingDevice\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSwitchingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSwitchingDeviceType\" type=\"ifc:IfcSwitchingDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSwitchingDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystem\" type=\"ifc:IfcSystem\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystemFurnitureElement\" type=\"ifc:IfcSystemFurnitureElement\" substitutionGroup=\"ifc:IfcFurnishingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystemFurnitureElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSystemFurnitureElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystemFurnitureElementType\" type=\"ifc:IfcSystemFurnitureElementType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystemFurnitureElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSystemFurnitureElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTShapeProfileDef\" type=\"ifc:IfcTShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTable\" type=\"ifc:IfcTable\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTable\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Rows\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableRow\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTableRow\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Columns\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableColumn\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTableColumn\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTableColumn\" type=\"ifc:IfcTableColumn\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTableColumn\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencePath\" type=\"ifc:IfcReference\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTableRow\" type=\"ifc:IfcTableRow\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTableRow\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RowCells\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"IsHeading\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTank\" type=\"ifc:IfcTank\" substitutionGroup=\"ifc:IfcFlowStorageDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTank\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTankType\" type=\"ifc:IfcTankType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTankType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTask\" type=\"ifc:IfcTask\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTask\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TaskTime\" type=\"ifc:IfcTaskTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WorkMethod\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsMilestone\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTaskTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskTime\" type=\"ifc:IfcTaskTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"DurationType\" type=\"ifc:IfcTaskDurationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleDuration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FreeFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TotalFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsCritical\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StatusTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualDuration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingTime\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Completion\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskTimeRecurring\" type=\"ifc:IfcTaskTimeRecurring\" substitutionGroup=\"ifc:IfcTaskTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskTimeRecurring\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTaskTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Recurrence\" type=\"ifc:IfcRecurrencePattern\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskType\" type=\"ifc:IfcTaskType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTaskTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WorkMethod\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTelecomAddress\" type=\"ifc:IfcTelecomAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTelecomAddress\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\n\t\t\t\t<xs:attribute name=\"TelephoneNumbers\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"FacsimileNumbers\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PagerNumber\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectronicMailAddresses\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"WWWHomePageURL\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MessagingIDs\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcURIReference\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendon\" type=\"ifc:IfcTendon\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendon\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionForce\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PreStress\" type=\"ifc:IfcPressureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrictionCoefficient\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AnchorageSlip\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MinCurvatureRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonAnchor\" type=\"ifc:IfcTendonAnchor\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonAnchor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonAnchorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonAnchorType\" type=\"ifc:IfcTendonAnchorType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonAnchorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonAnchorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonType\" type=\"ifc:IfcTendonType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SheathDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTessellatedFaceSet\" type=\"ifc:IfcTessellatedFaceSet\" abstract=\"true\" substitutionGroup=\"ifc:IfcTessellatedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTessellatedFaceSet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Coordinates\" type=\"ifc:IfcCartesianPointList3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"HasColours\" type=\"ifc:IfcIndexedColourMap\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"HasTextures\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIndexedTextureMap\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIndexedTextureMap\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTessellatedItem\" type=\"ifc:IfcTessellatedItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTessellatedItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextLiteral\" type=\"ifc:IfcTextLiteral\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextLiteral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Placement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Literal\" type=\"ifc:IfcPresentableText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Path\" type=\"ifc:IfcTextPath\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextLiteralWithExtent\" type=\"ifc:IfcTextLiteralWithExtent\" substitutionGroup=\"ifc:IfcTextLiteral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextLiteralWithExtent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextLiteral\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Extent\" type=\"ifc:IfcPlanarExtent\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"BoxAlignment\" type=\"ifc:IfcBoxAlignment\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyle\" type=\"ifc:IfcTextStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextCharacterAppearance\" type=\"ifc:IfcTextStyleForDefinedFont\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TextStyle\" type=\"ifc:IfcTextStyleTextModel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TextFontStyle\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTextFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelOrDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleFontModel\" type=\"ifc:IfcTextStyleFontModel\" substitutionGroup=\"ifc:IfcPreDefinedTextFont\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleFontModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedTextFont\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FontFamily\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextFontName-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTextFontName-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FontSize\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"FontStyle\" type=\"ifc:IfcFontStyle\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FontVariant\" type=\"ifc:IfcFontVariant\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FontWeight\" type=\"ifc:IfcFontWeight\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleForDefinedFont\" type=\"ifc:IfcTextStyleForDefinedFont\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleForDefinedFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Colour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BackgroundColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleTextModel\" type=\"ifc:IfcTextStyleTextModel\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleTextModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextIndent\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LetterSpacing\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WordSpacing\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LineHeight\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TextAlign\" type=\"ifc:IfcTextAlignment\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TextDecoration\" type=\"ifc:IfcTextDecoration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TextTransform\" type=\"ifc:IfcTextTransformation\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinate\" type=\"ifc:IfcTextureCoordinate\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinate\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Maps\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceTexture\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinateGenerator\" type=\"ifc:IfcTextureCoordinateGenerator\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinateGenerator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:attribute name=\"Mode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Parameter\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureMap\" type=\"ifc:IfcTextureMap\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Vertices\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextureVertex\" minOccurs=\"3\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTextureVertex\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MappedTo\" type=\"ifc:IfcFace\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureVertex\" type=\"ifc:IfcTextureVertex\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureVertex\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Coordinates\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureVertexList\" type=\"ifc:IfcTextureVertexList\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureVertexList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"TexCoordsList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimePeriod\" type=\"ifc:IfcTimePeriod\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimePeriod\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndTime\" type=\"ifc:IfcTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimeSeries\" type=\"ifc:IfcTimeSeries\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimeSeries\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeSeriesDataType\" type=\"ifc:IfcTimeSeriesDataTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedDataOrigin\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimeSeriesValue\" type=\"ifc:IfcTimeSeriesValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimeSeriesValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTopologicalRepresentationItem\" type=\"ifc:IfcTopologicalRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTopologicalRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTopologyRepresentation\" type=\"ifc:IfcTopologyRepresentation\" substitutionGroup=\"ifc:IfcShapeModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTopologyRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcToroidalSurface\" type=\"ifc:IfcToroidalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcToroidalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"MajorRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MinorRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransformer\" type=\"ifc:IfcTransformer\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransformer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransformerType\" type=\"ifc:IfcTransformerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransformerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportElement\" type=\"ifc:IfcTransportElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportElementType\" type=\"ifc:IfcTransportElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrapeziumProfileDef\" type=\"ifc:IfcTrapeziumProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrapeziumProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"BottomXDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopXDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopXOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTriangulatedFaceSet\" type=\"ifc:IfcTriangulatedFaceSet\" substitutionGroup=\"ifc:IfcTessellatedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTriangulatedFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedFaceSet\">\n\t\t\t\t<xs:attribute name=\"Normals\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Closed\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PnIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrimmedCurve\" type=\"ifc:IfcTrimmedCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrimmedCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Trim1\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Trim2\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SenseAgreement\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MasterRepresentation\" type=\"ifc:IfcTrimmingPreference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTubeBundle\" type=\"ifc:IfcTubeBundle\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTubeBundle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTubeBundleType\" type=\"ifc:IfcTubeBundleType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTubeBundleType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeObject\" type=\"ifc:IfcTypeObject\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeObject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertySets\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ApplicableOccurrence\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeProcess\" type=\"ifc:IfcTypeProcess\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeProcess\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProcessType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeProduct\" type=\"ifc:IfcTypeProduct\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeProduct\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepresentationMaps\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationMap\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeResource\" type=\"ifc:IfcTypeResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ResourceType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUShapeProfileDef\" type=\"ifc:IfcUShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitAssignment\" type=\"ifc:IfcUnitAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Units\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryControlElement\" type=\"ifc:IfcUnitaryControlElement\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryControlElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryControlElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryControlElementType\" type=\"ifc:IfcUnitaryControlElementType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryControlElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryControlElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryEquipment\" type=\"ifc:IfcUnitaryEquipment\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryEquipment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryEquipmentType\" type=\"ifc:IfcUnitaryEquipmentType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryEquipmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcValve\" type=\"ifc:IfcValve\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcValve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcValveType\" type=\"ifc:IfcValveType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcValveType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVector\" type=\"ifc:IfcVector\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVector\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Magnitude\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertex\" type=\"ifc:IfcVertex\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertex\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertexLoop\" type=\"ifc:IfcVertexLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertexLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LoopVertex\" type=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertexPoint\" type=\"ifc:IfcVertexPoint\" substitutionGroup=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertexPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcVertex\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VertexGeometry\" type=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationIsolator\" type=\"ifc:IfcVibrationIsolator\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationIsolator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationIsolatorType\" type=\"ifc:IfcVibrationIsolatorType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationIsolatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVirtualElement\" type=\"ifc:IfcVirtualElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVirtualElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVirtualGridIntersection\" type=\"ifc:IfcVirtualGridIntersection\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVirtualGridIntersection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IntersectingAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" minOccurs=\"2\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OffsetDistances\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVoidingFeature\" type=\"ifc:IfcVoidingFeature\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVoidingFeature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVoidingFeatureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWall\" type=\"ifc:IfcWall\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWall\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallElementedCase\" type=\"ifc:IfcWallElementedCase\" substitutionGroup=\"ifc:IfcWall\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallElementedCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWall\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallStandardCase\" type=\"ifc:IfcWallStandardCase\" substitutionGroup=\"ifc:IfcWall\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWall\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallType\" type=\"ifc:IfcWallType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWasteTerminal\" type=\"ifc:IfcWasteTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWasteTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWasteTerminalType\" type=\"ifc:IfcWasteTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWasteTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindow\" type=\"ifc:IfcWindow\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindow\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWindowTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PartitioningType\" type=\"ifc:IfcWindowTypePartitioningEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPartitioningType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowLiningProperties\" type=\"ifc:IfcWindowLiningProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowLiningProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MullionThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FirstTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FirstMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowPanelProperties\" type=\"ifc:IfcWindowPanelProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowPanelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcWindowPanelOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowStandardCase\" type=\"ifc:IfcWindowStandardCase\" substitutionGroup=\"ifc:IfcWindow\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWindow\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowStyle\" type=\"ifc:IfcWindowStyle\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ConstructionType\" type=\"ifc:IfcWindowStyleConstructionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcWindowStyleOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Sizeable\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowType\" type=\"ifc:IfcWindowType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWindowTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PartitioningType\" type=\"ifc:IfcWindowTypePartitioningEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPartitioningType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkCalendar\" type=\"ifc:IfcWorkCalendar\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkCalendar\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WorkingTimes\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcWorkTime\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcWorkTime\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ExceptionTimes\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcWorkTime\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcWorkTime\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkCalendarTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkControl\" type=\"ifc:IfcWorkControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkControl\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Creators\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPerson\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CreationDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Duration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TotalFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FinishTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkPlan\" type=\"ifc:IfcWorkPlan\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkPlan\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkPlanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkSchedule\" type=\"ifc:IfcWorkSchedule\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkScheduleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkTime\" type=\"ifc:IfcWorkTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RecurrencePattern\" type=\"ifc:IfcRecurrencePattern\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Start\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Finish\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcZShapeProfileDef\" type=\"ifc:IfcZShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcZShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcZone\" type=\"ifc:IfcZone\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcZone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<!-- group declarations (for SELECT data type definitions) -->\n\t<xs:group name=\"IfcActorSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcAppliedValueSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcAxis2Placement\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcBendingParameterSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcBooleanOperand\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHalfSpaceSolid\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTessellatedFaceSet\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcClassificationReferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcClassificationSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcColour\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcColourOrFactor\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCoordinateReferenceSystemSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCoordinateReferenceSystem\"/>\n\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationContext\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCsgSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveFontOrScaledCurveFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontAndScaling\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveOnSurface\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCompositeCurveOnSurface\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPcurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveOrEdgeCurve\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEdgeCurve\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveStyleFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDefinitionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDerivedMeasureValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDocumentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcFillStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedHatchStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleHatching\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTiles\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcGeometricSetSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcGridPlacementDirectionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcHatchLineDistanceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLayeredItem\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLibrarySelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLightDistributionDataSourceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLightIntensityDistribution\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMaterialSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialUsageDefinition\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMeasureValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMetricValueSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTable\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfRotationalSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfTranslationalSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcObjectReferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAddress\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTable\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPointOrVertexPoint\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVertexPoint\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPresentationStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNullStyle-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTextStyle\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProcessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProcess\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeProcess\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProductRepresentationSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProductDefinitionShape\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProductSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProduct\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeProduct\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPropertySetDefinitionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinitionSet-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcResourceObjectSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcActorRole\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\n\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcConversionBasedUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertyAbstraction\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcResourceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcResource\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeResource\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcRotationalStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSegmentIndexSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcArcIndex-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLineIndex-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcShell\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOpenShell\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSimpleValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSizeSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSolidOrShell\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSpaceBoundarySelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternalSpatialElement\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpace\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSpecularHighlightSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcSpecularExponent-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecularRoughness-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcStructuralActivityAssignmentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\n\t\t\t<xs:element ref=\"ifc:IfcStructuralItem\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcStyleAssignmentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPresentationStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPresentationStyleAssignment\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSurfaceOrFaceSurface\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcFaceBasedSurfaceModel\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFaceSurface\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSurfaceStyleElementSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSurfaceStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleLighting\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleRefraction\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleShading\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleWithTextures\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTextFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedTextFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedTextFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTimeOrRatioSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTranslationalStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTrimmingSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcUnit\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDerivedUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcVectorOrDirection\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcWarpingStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<!-- enumeration type declarations (for ENUMERATION data type definitions) -->\n\t<xs:simpleType name=\"IfcActionRequestTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"email\"/>\n\t\t\t<xs:enumeration value=\"fax\"/>\n\t\t\t<xs:enumeration value=\"phone\"/>\n\t\t\t<xs:enumeration value=\"post\"/>\n\t\t\t<xs:enumeration value=\"verbal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActionSourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dead_load_g\"/>\n\t\t\t<xs:enumeration value=\"completion_g1\"/>\n\t\t\t<xs:enumeration value=\"live_load_q\"/>\n\t\t\t<xs:enumeration value=\"snow_s\"/>\n\t\t\t<xs:enumeration value=\"wind_w\"/>\n\t\t\t<xs:enumeration value=\"prestressing_p\"/>\n\t\t\t<xs:enumeration value=\"settlement_u\"/>\n\t\t\t<xs:enumeration value=\"temperature_t\"/>\n\t\t\t<xs:enumeration value=\"earthquake_e\"/>\n\t\t\t<xs:enumeration value=\"fire\"/>\n\t\t\t<xs:enumeration value=\"impulse\"/>\n\t\t\t<xs:enumeration value=\"impact\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"erection\"/>\n\t\t\t<xs:enumeration value=\"propping\"/>\n\t\t\t<xs:enumeration value=\"system_imperfection\"/>\n\t\t\t<xs:enumeration value=\"shrinkage\"/>\n\t\t\t<xs:enumeration value=\"creep\"/>\n\t\t\t<xs:enumeration value=\"lack_of_fit\"/>\n\t\t\t<xs:enumeration value=\"buoyancy\"/>\n\t\t\t<xs:enumeration value=\"ice\"/>\n\t\t\t<xs:enumeration value=\"current\"/>\n\t\t\t<xs:enumeration value=\"wave\"/>\n\t\t\t<xs:enumeration value=\"rain\"/>\n\t\t\t<xs:enumeration value=\"brakes\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"permanent_g\"/>\n\t\t\t<xs:enumeration value=\"variable_q\"/>\n\t\t\t<xs:enumeration value=\"extraordinary_a\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActuatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electricactuator\"/>\n\t\t\t<xs:enumeration value=\"handoperatedactuator\"/>\n\t\t\t<xs:enumeration value=\"hydraulicactuator\"/>\n\t\t\t<xs:enumeration value=\"pneumaticactuator\"/>\n\t\t\t<xs:enumeration value=\"thermostaticactuator\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAddressTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"office\"/>\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"home\"/>\n\t\t\t<xs:enumeration value=\"distributionpoint\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirTerminalBoxTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"constantflow\"/>\n\t\t\t<xs:enumeration value=\"variableflowpressuredependant\"/>\n\t\t\t<xs:enumeration value=\"variableflowpressureindependant\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"diffuser\"/>\n\t\t\t<xs:enumeration value=\"grille\"/>\n\t\t\t<xs:enumeration value=\"louvre\"/>\n\t\t\t<xs:enumeration value=\"register\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirToAirHeatRecoveryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fixedplatecounterflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"fixedplatecrossflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"fixedplateparallelflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"rotarywheel\"/>\n\t\t\t<xs:enumeration value=\"runaroundcoilloop\"/>\n\t\t\t<xs:enumeration value=\"heatpipe\"/>\n\t\t\t<xs:enumeration value=\"twintowerenthalpyrecoveryloops\"/>\n\t\t\t<xs:enumeration value=\"thermosiphonsealedtubeheatexchangers\"/>\n\t\t\t<xs:enumeration value=\"thermosiphoncoiltypeheatexchangers\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAlarmTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bell\"/>\n\t\t\t<xs:enumeration value=\"breakglassbutton\"/>\n\t\t\t<xs:enumeration value=\"light\"/>\n\t\t\t<xs:enumeration value=\"manualpullbox\"/>\n\t\t\t<xs:enumeration value=\"siren\"/>\n\t\t\t<xs:enumeration value=\"whistle\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAnalysisModelTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"in_plane_loading_2d\"/>\n\t\t\t<xs:enumeration value=\"out_plane_loading_2d\"/>\n\t\t\t<xs:enumeration value=\"loading_3d\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAnalysisTheoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"first_order_theory\"/>\n\t\t\t<xs:enumeration value=\"second_order_theory\"/>\n\t\t\t<xs:enumeration value=\"third_order_theory\"/>\n\t\t\t<xs:enumeration value=\"full_nonlinear_theory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcArithmeticOperatorEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"add\"/>\n\t\t\t<xs:enumeration value=\"divide\"/>\n\t\t\t<xs:enumeration value=\"multiply\"/>\n\t\t\t<xs:enumeration value=\"subtract\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAssemblyPlaceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"factory\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAudioVisualApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"amplifier\"/>\n\t\t\t<xs:enumeration value=\"camera\"/>\n\t\t\t<xs:enumeration value=\"display\"/>\n\t\t\t<xs:enumeration value=\"microphone\"/>\n\t\t\t<xs:enumeration value=\"player\"/>\n\t\t\t<xs:enumeration value=\"projector\"/>\n\t\t\t<xs:enumeration value=\"receiver\"/>\n\t\t\t<xs:enumeration value=\"speaker\"/>\n\t\t\t<xs:enumeration value=\"switcher\"/>\n\t\t\t<xs:enumeration value=\"telephone\"/>\n\t\t\t<xs:enumeration value=\"tuner\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBSplineCurveForm\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"polyline_form\"/>\n\t\t\t<xs:enumeration value=\"circular_arc\"/>\n\t\t\t<xs:enumeration value=\"elliptic_arc\"/>\n\t\t\t<xs:enumeration value=\"parabolic_arc\"/>\n\t\t\t<xs:enumeration value=\"hyperbolic_arc\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBSplineSurfaceForm\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plane_surf\"/>\n\t\t\t<xs:enumeration value=\"cylindrical_surf\"/>\n\t\t\t<xs:enumeration value=\"conical_surf\"/>\n\t\t\t<xs:enumeration value=\"spherical_surf\"/>\n\t\t\t<xs:enumeration value=\"toroidal_surf\"/>\n\t\t\t<xs:enumeration value=\"surf_of_revolution\"/>\n\t\t\t<xs:enumeration value=\"ruled_surf\"/>\n\t\t\t<xs:enumeration value=\"generalised_cone\"/>\n\t\t\t<xs:enumeration value=\"quadric_surf\"/>\n\t\t\t<xs:enumeration value=\"surf_of_linear_extrusion\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBeamTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beam\"/>\n\t\t\t<xs:enumeration value=\"joist\"/>\n\t\t\t<xs:enumeration value=\"hollowcore\"/>\n\t\t\t<xs:enumeration value=\"lintel\"/>\n\t\t\t<xs:enumeration value=\"spandrel\"/>\n\t\t\t<xs:enumeration value=\"t_beam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBenchmarkEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"greaterthan\"/>\n\t\t\t<xs:enumeration value=\"greaterthanorequalto\"/>\n\t\t\t<xs:enumeration value=\"lessthan\"/>\n\t\t\t<xs:enumeration value=\"lessthanorequalto\"/>\n\t\t\t<xs:enumeration value=\"equalto\"/>\n\t\t\t<xs:enumeration value=\"notequalto\"/>\n\t\t\t<xs:enumeration value=\"includes\"/>\n\t\t\t<xs:enumeration value=\"notincludes\"/>\n\t\t\t<xs:enumeration value=\"includedin\"/>\n\t\t\t<xs:enumeration value=\"notincludedin\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBoilerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"water\"/>\n\t\t\t<xs:enumeration value=\"steam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBooleanOperator\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"union\"/>\n\t\t\t<xs:enumeration value=\"intersection\"/>\n\t\t\t<xs:enumeration value=\"difference\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingElementPartTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"insulation\"/>\n\t\t\t<xs:enumeration value=\"precastpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingElementProxyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"complex\"/>\n\t\t\t<xs:enumeration value=\"element\"/>\n\t\t\t<xs:enumeration value=\"partial\"/>\n\t\t\t<xs:enumeration value=\"provisionforvoid\"/>\n\t\t\t<xs:enumeration value=\"provisionforspace\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingSystemTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fenestration\"/>\n\t\t\t<xs:enumeration value=\"foundation\"/>\n\t\t\t<xs:enumeration value=\"loadbearing\"/>\n\t\t\t<xs:enumeration value=\"outershell\"/>\n\t\t\t<xs:enumeration value=\"shading\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBurnerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableCarrierFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"cross\"/>\n\t\t\t<xs:enumeration value=\"reducer\"/>\n\t\t\t<xs:enumeration value=\"tee\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableCarrierSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cableladdersegment\"/>\n\t\t\t<xs:enumeration value=\"cabletraysegment\"/>\n\t\t\t<xs:enumeration value=\"cabletrunkingsegment\"/>\n\t\t\t<xs:enumeration value=\"conduitsegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"busbarsegment\"/>\n\t\t\t<xs:enumeration value=\"cablesegment\"/>\n\t\t\t<xs:enumeration value=\"conductorsegment\"/>\n\t\t\t<xs:enumeration value=\"coresegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChangeActionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"nochange\"/>\n\t\t\t<xs:enumeration value=\"modified\"/>\n\t\t\t<xs:enumeration value=\"added\"/>\n\t\t\t<xs:enumeration value=\"deleted\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChillerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aircooled\"/>\n\t\t\t<xs:enumeration value=\"watercooled\"/>\n\t\t\t<xs:enumeration value=\"heatrecovery\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChimneyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoilTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dxcoolingcoil\"/>\n\t\t\t<xs:enumeration value=\"electricheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"gasheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"hydroniccoil\"/>\n\t\t\t<xs:enumeration value=\"steamheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"watercoolingcoil\"/>\n\t\t\t<xs:enumeration value=\"waterheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcColumnTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"column\"/>\n\t\t\t<xs:enumeration value=\"pilaster\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCommunicationsApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"antenna\"/>\n\t\t\t<xs:enumeration value=\"computer\"/>\n\t\t\t<xs:enumeration value=\"fax\"/>\n\t\t\t<xs:enumeration value=\"gateway\"/>\n\t\t\t<xs:enumeration value=\"modem\"/>\n\t\t\t<xs:enumeration value=\"networkappliance\"/>\n\t\t\t<xs:enumeration value=\"networkbridge\"/>\n\t\t\t<xs:enumeration value=\"networkhub\"/>\n\t\t\t<xs:enumeration value=\"printer\"/>\n\t\t\t<xs:enumeration value=\"repeater\"/>\n\t\t\t<xs:enumeration value=\"router\"/>\n\t\t\t<xs:enumeration value=\"scanner\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcComplexPropertyTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"p_complex\"/>\n\t\t\t<xs:enumeration value=\"q_complex\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCompressorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dynamic\"/>\n\t\t\t<xs:enumeration value=\"reciprocating\"/>\n\t\t\t<xs:enumeration value=\"rotary\"/>\n\t\t\t<xs:enumeration value=\"scroll\"/>\n\t\t\t<xs:enumeration value=\"trochoidal\"/>\n\t\t\t<xs:enumeration value=\"singlestage\"/>\n\t\t\t<xs:enumeration value=\"booster\"/>\n\t\t\t<xs:enumeration value=\"opentype\"/>\n\t\t\t<xs:enumeration value=\"hermetic\"/>\n\t\t\t<xs:enumeration value=\"semihermetic\"/>\n\t\t\t<xs:enumeration value=\"weldedshellhermetic\"/>\n\t\t\t<xs:enumeration value=\"rollingpiston\"/>\n\t\t\t<xs:enumeration value=\"rotaryvane\"/>\n\t\t\t<xs:enumeration value=\"singlescrew\"/>\n\t\t\t<xs:enumeration value=\"twinscrew\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCondenserTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aircooled\"/>\n\t\t\t<xs:enumeration value=\"evaporativecooled\"/>\n\t\t\t<xs:enumeration value=\"watercooled\"/>\n\t\t\t<xs:enumeration value=\"watercooledbrazedplate\"/>\n\t\t\t<xs:enumeration value=\"watercooledshellcoil\"/>\n\t\t\t<xs:enumeration value=\"watercooledshelltube\"/>\n\t\t\t<xs:enumeration value=\"watercooledtubeintube\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConnectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"atpath\"/>\n\t\t\t<xs:enumeration value=\"atstart\"/>\n\t\t\t<xs:enumeration value=\"atend\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstraintEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"hard\"/>\n\t\t\t<xs:enumeration value=\"soft\"/>\n\t\t\t<xs:enumeration value=\"advisory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionEquipmentResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"demolishing\"/>\n\t\t\t<xs:enumeration value=\"earthmoving\"/>\n\t\t\t<xs:enumeration value=\"erecting\"/>\n\t\t\t<xs:enumeration value=\"heating\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"paving\"/>\n\t\t\t<xs:enumeration value=\"pumping\"/>\n\t\t\t<xs:enumeration value=\"transporting\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionMaterialResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aggregates\"/>\n\t\t\t<xs:enumeration value=\"concrete\"/>\n\t\t\t<xs:enumeration value=\"drywall\"/>\n\t\t\t<xs:enumeration value=\"fuel\"/>\n\t\t\t<xs:enumeration value=\"gypsum\"/>\n\t\t\t<xs:enumeration value=\"masonry\"/>\n\t\t\t<xs:enumeration value=\"metal\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionProductResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assembly\"/>\n\t\t\t<xs:enumeration value=\"formwork\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcControllerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floating\"/>\n\t\t\t<xs:enumeration value=\"programmable\"/>\n\t\t\t<xs:enumeration value=\"proportional\"/>\n\t\t\t<xs:enumeration value=\"multiposition\"/>\n\t\t\t<xs:enumeration value=\"twoposition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCooledBeamTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"active\"/>\n\t\t\t<xs:enumeration value=\"passive\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoolingTowerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"naturaldraft\"/>\n\t\t\t<xs:enumeration value=\"mechanicalinduceddraft\"/>\n\t\t\t<xs:enumeration value=\"mechanicalforceddraft\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCostItemTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCostScheduleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"budget\"/>\n\t\t\t<xs:enumeration value=\"costplan\"/>\n\t\t\t<xs:enumeration value=\"estimate\"/>\n\t\t\t<xs:enumeration value=\"tender\"/>\n\t\t\t<xs:enumeration value=\"pricedbillofquantities\"/>\n\t\t\t<xs:enumeration value=\"unpricedbillofquantities\"/>\n\t\t\t<xs:enumeration value=\"scheduleofrates\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoveringTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ceiling\"/>\n\t\t\t<xs:enumeration value=\"flooring\"/>\n\t\t\t<xs:enumeration value=\"cladding\"/>\n\t\t\t<xs:enumeration value=\"roofing\"/>\n\t\t\t<xs:enumeration value=\"molding\"/>\n\t\t\t<xs:enumeration value=\"skirtingboard\"/>\n\t\t\t<xs:enumeration value=\"insulation\"/>\n\t\t\t<xs:enumeration value=\"membrane\"/>\n\t\t\t<xs:enumeration value=\"sleeving\"/>\n\t\t\t<xs:enumeration value=\"wrapping\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCrewResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"office\"/>\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurtainWallTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurveInterpolationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"linear\"/>\n\t\t\t<xs:enumeration value=\"log_linear\"/>\n\t\t\t<xs:enumeration value=\"log_log\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDamperTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"backdraftdamper\"/>\n\t\t\t<xs:enumeration value=\"balancingdamper\"/>\n\t\t\t<xs:enumeration value=\"blastdamper\"/>\n\t\t\t<xs:enumeration value=\"controldamper\"/>\n\t\t\t<xs:enumeration value=\"firedamper\"/>\n\t\t\t<xs:enumeration value=\"firesmokedamper\"/>\n\t\t\t<xs:enumeration value=\"fumehoodexhaust\"/>\n\t\t\t<xs:enumeration value=\"gravitydamper\"/>\n\t\t\t<xs:enumeration value=\"gravityreliefdamper\"/>\n\t\t\t<xs:enumeration value=\"reliefdamper\"/>\n\t\t\t<xs:enumeration value=\"smokedamper\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDataOriginEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"measured\"/>\n\t\t\t<xs:enumeration value=\"predicted\"/>\n\t\t\t<xs:enumeration value=\"simulated\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDerivedUnitEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"angularvelocityunit\"/>\n\t\t\t<xs:enumeration value=\"areadensityunit\"/>\n\t\t\t<xs:enumeration value=\"compoundplaneangleunit\"/>\n\t\t\t<xs:enumeration value=\"dynamicviscosityunit\"/>\n\t\t\t<xs:enumeration value=\"heatfluxdensityunit\"/>\n\t\t\t<xs:enumeration value=\"integercountrateunit\"/>\n\t\t\t<xs:enumeration value=\"isothermalmoisturecapacityunit\"/>\n\t\t\t<xs:enumeration value=\"kinematicviscosityunit\"/>\n\t\t\t<xs:enumeration value=\"linearvelocityunit\"/>\n\t\t\t<xs:enumeration value=\"massdensityunit\"/>\n\t\t\t<xs:enumeration value=\"massflowrateunit\"/>\n\t\t\t<xs:enumeration value=\"moisturediffusivityunit\"/>\n\t\t\t<xs:enumeration value=\"molecularweightunit\"/>\n\t\t\t<xs:enumeration value=\"specificheatcapacityunit\"/>\n\t\t\t<xs:enumeration value=\"thermaladmittanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermalconductanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermalresistanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermaltransmittanceunit\"/>\n\t\t\t<xs:enumeration value=\"vaporpermeabilityunit\"/>\n\t\t\t<xs:enumeration value=\"volumetricflowrateunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalfrequencyunit\"/>\n\t\t\t<xs:enumeration value=\"torqueunit\"/>\n\t\t\t<xs:enumeration value=\"momentofinertiaunit\"/>\n\t\t\t<xs:enumeration value=\"linearmomentunit\"/>\n\t\t\t<xs:enumeration value=\"linearforceunit\"/>\n\t\t\t<xs:enumeration value=\"planarforceunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofelasticityunit\"/>\n\t\t\t<xs:enumeration value=\"shearmodulusunit\"/>\n\t\t\t<xs:enumeration value=\"linearstiffnessunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalstiffnessunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"accelerationunit\"/>\n\t\t\t<xs:enumeration value=\"curvatureunit\"/>\n\t\t\t<xs:enumeration value=\"heatingvalueunit\"/>\n\t\t\t<xs:enumeration value=\"ionconcentrationunit\"/>\n\t\t\t<xs:enumeration value=\"luminousintensitydistributionunit\"/>\n\t\t\t<xs:enumeration value=\"massperlengthunit\"/>\n\t\t\t<xs:enumeration value=\"modulusoflinearsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofrotationalsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"phunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalmassunit\"/>\n\t\t\t<xs:enumeration value=\"sectionareaintegralunit\"/>\n\t\t\t<xs:enumeration value=\"sectionmodulusunit\"/>\n\t\t\t<xs:enumeration value=\"soundpowerlevelunit\"/>\n\t\t\t<xs:enumeration value=\"soundpowerunit\"/>\n\t\t\t<xs:enumeration value=\"soundpressurelevelunit\"/>\n\t\t\t<xs:enumeration value=\"soundpressureunit\"/>\n\t\t\t<xs:enumeration value=\"temperaturegradientunit\"/>\n\t\t\t<xs:enumeration value=\"temperaturerateofchangeunit\"/>\n\t\t\t<xs:enumeration value=\"thermalexpansioncoefficientunit\"/>\n\t\t\t<xs:enumeration value=\"warpingconstantunit\"/>\n\t\t\t<xs:enumeration value=\"warpingmomentunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDirectionSenseEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"positive\"/>\n\t\t\t<xs:enumeration value=\"negative\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDiscreteAccessoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchorplate\"/>\n\t\t\t<xs:enumeration value=\"bracket\"/>\n\t\t\t<xs:enumeration value=\"shoe\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionChamberElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"formedduct\"/>\n\t\t\t<xs:enumeration value=\"inspectionchamber\"/>\n\t\t\t<xs:enumeration value=\"inspectionpit\"/>\n\t\t\t<xs:enumeration value=\"manhole\"/>\n\t\t\t<xs:enumeration value=\"meterchamber\"/>\n\t\t\t<xs:enumeration value=\"sump\"/>\n\t\t\t<xs:enumeration value=\"trench\"/>\n\t\t\t<xs:enumeration value=\"valvechamber\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionPortTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cable\"/>\n\t\t\t<xs:enumeration value=\"cablecarrier\"/>\n\t\t\t<xs:enumeration value=\"duct\"/>\n\t\t\t<xs:enumeration value=\"pipe\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionSystemEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airconditioning\"/>\n\t\t\t<xs:enumeration value=\"audiovisual\"/>\n\t\t\t<xs:enumeration value=\"chemical\"/>\n\t\t\t<xs:enumeration value=\"chilledwater\"/>\n\t\t\t<xs:enumeration value=\"communication\"/>\n\t\t\t<xs:enumeration value=\"compressedair\"/>\n\t\t\t<xs:enumeration value=\"condenserwater\"/>\n\t\t\t<xs:enumeration value=\"control\"/>\n\t\t\t<xs:enumeration value=\"conveying\"/>\n\t\t\t<xs:enumeration value=\"data\"/>\n\t\t\t<xs:enumeration value=\"disposal\"/>\n\t\t\t<xs:enumeration value=\"domesticcoldwater\"/>\n\t\t\t<xs:enumeration value=\"domestichotwater\"/>\n\t\t\t<xs:enumeration value=\"drainage\"/>\n\t\t\t<xs:enumeration value=\"earthing\"/>\n\t\t\t<xs:enumeration value=\"electrical\"/>\n\t\t\t<xs:enumeration value=\"electroacoustic\"/>\n\t\t\t<xs:enumeration value=\"exhaust\"/>\n\t\t\t<xs:enumeration value=\"fireprotection\"/>\n\t\t\t<xs:enumeration value=\"fuel\"/>\n\t\t\t<xs:enumeration value=\"gas\"/>\n\t\t\t<xs:enumeration value=\"hazardous\"/>\n\t\t\t<xs:enumeration value=\"heating\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"lightningprotection\"/>\n\t\t\t<xs:enumeration value=\"municipalsolidwaste\"/>\n\t\t\t<xs:enumeration value=\"oil\"/>\n\t\t\t<xs:enumeration value=\"operational\"/>\n\t\t\t<xs:enumeration value=\"powergeneration\"/>\n\t\t\t<xs:enumeration value=\"rainwater\"/>\n\t\t\t<xs:enumeration value=\"refrigeration\"/>\n\t\t\t<xs:enumeration value=\"security\"/>\n\t\t\t<xs:enumeration value=\"sewage\"/>\n\t\t\t<xs:enumeration value=\"signal\"/>\n\t\t\t<xs:enumeration value=\"stormwater\"/>\n\t\t\t<xs:enumeration value=\"telephone\"/>\n\t\t\t<xs:enumeration value=\"tv\"/>\n\t\t\t<xs:enumeration value=\"vacuum\"/>\n\t\t\t<xs:enumeration value=\"vent\"/>\n\t\t\t<xs:enumeration value=\"ventilation\"/>\n\t\t\t<xs:enumeration value=\"wastewater\"/>\n\t\t\t<xs:enumeration value=\"watersupply\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDocumentConfidentialityEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"public\"/>\n\t\t\t<xs:enumeration value=\"restricted\"/>\n\t\t\t<xs:enumeration value=\"confidential\"/>\n\t\t\t<xs:enumeration value=\"personal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDocumentStatusEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"draft\"/>\n\t\t\t<xs:enumeration value=\"finaldraft\"/>\n\t\t\t<xs:enumeration value=\"final\"/>\n\t\t\t<xs:enumeration value=\"revision\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorPanelOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"swinging\"/>\n\t\t\t<xs:enumeration value=\"double_acting\"/>\n\t\t\t<xs:enumeration value=\"sliding\"/>\n\t\t\t<xs:enumeration value=\"folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"fixedpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorPanelPositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"middle\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorStyleConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aluminium\"/>\n\t\t\t<xs:enumeration value=\"high_grade_steel\"/>\n\t\t\t<xs:enumeration value=\"steel\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"aluminium_wood\"/>\n\t\t\t<xs:enumeration value=\"aluminium_plastic\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorStyleOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_swing_left\"/>\n\t\t\t<xs:enumeration value=\"single_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_left\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_right\"/>\n\t\t\t<xs:enumeration value=\"double_swing_left\"/>\n\t\t\t<xs:enumeration value=\"double_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_double_swing\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_left\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_sliding\"/>\n\t\t\t<xs:enumeration value=\"folding_to_left\"/>\n\t\t\t<xs:enumeration value=\"folding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"door\"/>\n\t\t\t<xs:enumeration value=\"gate\"/>\n\t\t\t<xs:enumeration value=\"trapdoor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorTypeOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_swing_left\"/>\n\t\t\t<xs:enumeration value=\"single_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_left\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_right\"/>\n\t\t\t<xs:enumeration value=\"double_swing_left\"/>\n\t\t\t<xs:enumeration value=\"double_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_double_swing\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_left\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_sliding\"/>\n\t\t\t<xs:enumeration value=\"folding_to_left\"/>\n\t\t\t<xs:enumeration value=\"folding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"swing_fixed_left\"/>\n\t\t\t<xs:enumeration value=\"swing_fixed_right\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"obstruction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctSilencerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flatoval\"/>\n\t\t\t<xs:enumeration value=\"rectangular\"/>\n\t\t\t<xs:enumeration value=\"round\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dishwasher\"/>\n\t\t\t<xs:enumeration value=\"electriccooker\"/>\n\t\t\t<xs:enumeration value=\"freestandingelectricheater\"/>\n\t\t\t<xs:enumeration value=\"freestandingfan\"/>\n\t\t\t<xs:enumeration value=\"freestandingwaterheater\"/>\n\t\t\t<xs:enumeration value=\"freestandingwatercooler\"/>\n\t\t\t<xs:enumeration value=\"freezer\"/>\n\t\t\t<xs:enumeration value=\"fridge_freezer\"/>\n\t\t\t<xs:enumeration value=\"handdryer\"/>\n\t\t\t<xs:enumeration value=\"kitchenmachine\"/>\n\t\t\t<xs:enumeration value=\"microwave\"/>\n\t\t\t<xs:enumeration value=\"photocopier\"/>\n\t\t\t<xs:enumeration value=\"refrigerator\"/>\n\t\t\t<xs:enumeration value=\"tumbledryer\"/>\n\t\t\t<xs:enumeration value=\"vendingmachine\"/>\n\t\t\t<xs:enumeration value=\"washingmachine\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricDistributionBoardTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"consumerunit\"/>\n\t\t\t<xs:enumeration value=\"distributionboard\"/>\n\t\t\t<xs:enumeration value=\"motorcontrolcentre\"/>\n\t\t\t<xs:enumeration value=\"switchboard\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricFlowStorageDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"battery\"/>\n\t\t\t<xs:enumeration value=\"capacitorbank\"/>\n\t\t\t<xs:enumeration value=\"harmonicfilter\"/>\n\t\t\t<xs:enumeration value=\"inductorbank\"/>\n\t\t\t<xs:enumeration value=\"ups\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricGeneratorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"chp\"/>\n\t\t\t<xs:enumeration value=\"enginegenerator\"/>\n\t\t\t<xs:enumeration value=\"standalone\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricMotorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dc\"/>\n\t\t\t<xs:enumeration value=\"induction\"/>\n\t\t\t<xs:enumeration value=\"polyphase\"/>\n\t\t\t<xs:enumeration value=\"reluctancesynchronous\"/>\n\t\t\t<xs:enumeration value=\"synchronous\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricTimeControlTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"timeclock\"/>\n\t\t\t<xs:enumeration value=\"timedelay\"/>\n\t\t\t<xs:enumeration value=\"relay\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElementAssemblyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"accessory_assembly\"/>\n\t\t\t<xs:enumeration value=\"arch\"/>\n\t\t\t<xs:enumeration value=\"beam_grid\"/>\n\t\t\t<xs:enumeration value=\"braced_frame\"/>\n\t\t\t<xs:enumeration value=\"girder\"/>\n\t\t\t<xs:enumeration value=\"reinforcement_unit\"/>\n\t\t\t<xs:enumeration value=\"rigid_frame\"/>\n\t\t\t<xs:enumeration value=\"slab_field\"/>\n\t\t\t<xs:enumeration value=\"truss\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElementCompositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"complex\"/>\n\t\t\t<xs:enumeration value=\"element\"/>\n\t\t\t<xs:enumeration value=\"partial\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEngineTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"externalcombustion\"/>\n\t\t\t<xs:enumeration value=\"internalcombustion\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEvaporativeCoolerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directevaporativerandommediaaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativerigidmediaaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativeslingerspackagedaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativepackagedrotaryaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativeairwasher\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativepackageaircooler\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativewetcoil\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativecoolingtowerorcoilcooler\"/>\n\t\t\t<xs:enumeration value=\"indirectdirectcombination\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEvaporatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directexpansion\"/>\n\t\t\t<xs:enumeration value=\"directexpansionshellandtube\"/>\n\t\t\t<xs:enumeration value=\"directexpansiontubeintube\"/>\n\t\t\t<xs:enumeration value=\"directexpansionbrazedplate\"/>\n\t\t\t<xs:enumeration value=\"floodedshellandtube\"/>\n\t\t\t<xs:enumeration value=\"shellandcoil\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEventTriggerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"eventrule\"/>\n\t\t\t<xs:enumeration value=\"eventmessage\"/>\n\t\t\t<xs:enumeration value=\"eventtime\"/>\n\t\t\t<xs:enumeration value=\"eventcomplex\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEventTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"startevent\"/>\n\t\t\t<xs:enumeration value=\"endevent\"/>\n\t\t\t<xs:enumeration value=\"intermediateevent\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcExternalSpatialElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"external_earth\"/>\n\t\t\t<xs:enumeration value=\"external_water\"/>\n\t\t\t<xs:enumeration value=\"external_fire\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFanTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"centrifugalforwardcurved\"/>\n\t\t\t<xs:enumeration value=\"centrifugalradial\"/>\n\t\t\t<xs:enumeration value=\"centrifugalbackwardinclinedcurved\"/>\n\t\t\t<xs:enumeration value=\"centrifugalairfoil\"/>\n\t\t\t<xs:enumeration value=\"tubeaxial\"/>\n\t\t\t<xs:enumeration value=\"vaneaxial\"/>\n\t\t\t<xs:enumeration value=\"propelloraxial\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFastenerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"glue\"/>\n\t\t\t<xs:enumeration value=\"mortar\"/>\n\t\t\t<xs:enumeration value=\"weld\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFilterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airparticlefilter\"/>\n\t\t\t<xs:enumeration value=\"compressedairfilter\"/>\n\t\t\t<xs:enumeration value=\"odorfilter\"/>\n\t\t\t<xs:enumeration value=\"oilfilter\"/>\n\t\t\t<xs:enumeration value=\"strainer\"/>\n\t\t\t<xs:enumeration value=\"waterfilter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFireSuppressionTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"breechinginlet\"/>\n\t\t\t<xs:enumeration value=\"firehydrant\"/>\n\t\t\t<xs:enumeration value=\"hosereel\"/>\n\t\t\t<xs:enumeration value=\"sprinkler\"/>\n\t\t\t<xs:enumeration value=\"sprinklerdeflector\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"source\"/>\n\t\t\t<xs:enumeration value=\"sink\"/>\n\t\t\t<xs:enumeration value=\"sourceandsink\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowInstrumentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pressuregauge\"/>\n\t\t\t<xs:enumeration value=\"thermometer\"/>\n\t\t\t<xs:enumeration value=\"ammeter\"/>\n\t\t\t<xs:enumeration value=\"frequencymeter\"/>\n\t\t\t<xs:enumeration value=\"powerfactormeter\"/>\n\t\t\t<xs:enumeration value=\"phaseanglemeter\"/>\n\t\t\t<xs:enumeration value=\"voltmeter_peak\"/>\n\t\t\t<xs:enumeration value=\"voltmeter_rms\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowMeterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"energymeter\"/>\n\t\t\t<xs:enumeration value=\"gasmeter\"/>\n\t\t\t<xs:enumeration value=\"oilmeter\"/>\n\t\t\t<xs:enumeration value=\"watermeter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFootingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"caisson_foundation\"/>\n\t\t\t<xs:enumeration value=\"footing_beam\"/>\n\t\t\t<xs:enumeration value=\"pad_footing\"/>\n\t\t\t<xs:enumeration value=\"pile_cap\"/>\n\t\t\t<xs:enumeration value=\"strip_footing\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFurnitureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"chair\"/>\n\t\t\t<xs:enumeration value=\"table\"/>\n\t\t\t<xs:enumeration value=\"desk\"/>\n\t\t\t<xs:enumeration value=\"bed\"/>\n\t\t\t<xs:enumeration value=\"filecabinet\"/>\n\t\t\t<xs:enumeration value=\"shelf\"/>\n\t\t\t<xs:enumeration value=\"sofa\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGeographicElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"terrain\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGeometricProjectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"graph_view\"/>\n\t\t\t<xs:enumeration value=\"sketch_view\"/>\n\t\t\t<xs:enumeration value=\"model_view\"/>\n\t\t\t<xs:enumeration value=\"plan_view\"/>\n\t\t\t<xs:enumeration value=\"reflected_plan_view\"/>\n\t\t\t<xs:enumeration value=\"section_view\"/>\n\t\t\t<xs:enumeration value=\"elevation_view\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGlobalOrLocalEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"global_coords\"/>\n\t\t\t<xs:enumeration value=\"local_coords\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGridTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rectangular\"/>\n\t\t\t<xs:enumeration value=\"radial\"/>\n\t\t\t<xs:enumeration value=\"triangular\"/>\n\t\t\t<xs:enumeration value=\"irregular\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatExchangerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plate\"/>\n\t\t\t<xs:enumeration value=\"shellandtube\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHumidifierTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"steaminjection\"/>\n\t\t\t<xs:enumeration value=\"adiabaticairwasher\"/>\n\t\t\t<xs:enumeration value=\"adiabaticpan\"/>\n\t\t\t<xs:enumeration value=\"adiabaticwettedelement\"/>\n\t\t\t<xs:enumeration value=\"adiabaticatomizing\"/>\n\t\t\t<xs:enumeration value=\"adiabaticultrasonic\"/>\n\t\t\t<xs:enumeration value=\"adiabaticrigidmedia\"/>\n\t\t\t<xs:enumeration value=\"adiabaticcompressedairnozzle\"/>\n\t\t\t<xs:enumeration value=\"assistedelectric\"/>\n\t\t\t<xs:enumeration value=\"assistednaturalgas\"/>\n\t\t\t<xs:enumeration value=\"assistedpropane\"/>\n\t\t\t<xs:enumeration value=\"assistedbutane\"/>\n\t\t\t<xs:enumeration value=\"assistedsteam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInterceptorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cyclonic\"/>\n\t\t\t<xs:enumeration value=\"grease\"/>\n\t\t\t<xs:enumeration value=\"oil\"/>\n\t\t\t<xs:enumeration value=\"petrol\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInternalOrExternalEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"internal\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"external_earth\"/>\n\t\t\t<xs:enumeration value=\"external_water\"/>\n\t\t\t<xs:enumeration value=\"external_fire\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInventoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assetinventory\"/>\n\t\t\t<xs:enumeration value=\"spaceinventory\"/>\n\t\t\t<xs:enumeration value=\"furnitureinventory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcJunctionBoxTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"data\"/>\n\t\t\t<xs:enumeration value=\"power\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcKnotType\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"uniform_knots\"/>\n\t\t\t<xs:enumeration value=\"quasi_uniform_knots\"/>\n\t\t\t<xs:enumeration value=\"piecewise_bezier_knots\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLaborResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"administration\"/>\n\t\t\t<xs:enumeration value=\"carpentry\"/>\n\t\t\t<xs:enumeration value=\"cleaning\"/>\n\t\t\t<xs:enumeration value=\"concrete\"/>\n\t\t\t<xs:enumeration value=\"drywall\"/>\n\t\t\t<xs:enumeration value=\"electric\"/>\n\t\t\t<xs:enumeration value=\"finishing\"/>\n\t\t\t<xs:enumeration value=\"flooring\"/>\n\t\t\t<xs:enumeration value=\"general\"/>\n\t\t\t<xs:enumeration value=\"hvac\"/>\n\t\t\t<xs:enumeration value=\"landscaping\"/>\n\t\t\t<xs:enumeration value=\"masonry\"/>\n\t\t\t<xs:enumeration value=\"painting\"/>\n\t\t\t<xs:enumeration value=\"paving\"/>\n\t\t\t<xs:enumeration value=\"plumbing\"/>\n\t\t\t<xs:enumeration value=\"roofing\"/>\n\t\t\t<xs:enumeration value=\"sitegrading\"/>\n\t\t\t<xs:enumeration value=\"steelwork\"/>\n\t\t\t<xs:enumeration value=\"surveying\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLampTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\n\t\t\t<xs:enumeration value=\"halogen\"/>\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"led\"/>\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\n\t\t\t<xs:enumeration value=\"oled\"/>\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLayerSetDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"axis1\"/>\n\t\t\t<xs:enumeration value=\"axis2\"/>\n\t\t\t<xs:enumeration value=\"axis3\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightDistributionCurveEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"type_a\"/>\n\t\t\t<xs:enumeration value=\"type_b\"/>\n\t\t\t<xs:enumeration value=\"type_c\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightEmissionSourceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"lightemittingdiode\"/>\n\t\t\t<xs:enumeration value=\"lowpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"lowvoltagehalogen\"/>\n\t\t\t<xs:enumeration value=\"mainvoltagehalogen\"/>\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightFixtureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pointsource\"/>\n\t\t\t<xs:enumeration value=\"directionsource\"/>\n\t\t\t<xs:enumeration value=\"securitylighting\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLoadGroupTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"load_group\"/>\n\t\t\t<xs:enumeration value=\"load_case\"/>\n\t\t\t<xs:enumeration value=\"load_combination\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLogicalOperatorEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"logicaland\"/>\n\t\t\t<xs:enumeration value=\"logicalor\"/>\n\t\t\t<xs:enumeration value=\"logicalxor\"/>\n\t\t\t<xs:enumeration value=\"logicalnotand\"/>\n\t\t\t<xs:enumeration value=\"logicalnotor\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMechanicalFastenerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchorbolt\"/>\n\t\t\t<xs:enumeration value=\"bolt\"/>\n\t\t\t<xs:enumeration value=\"dowel\"/>\n\t\t\t<xs:enumeration value=\"nail\"/>\n\t\t\t<xs:enumeration value=\"nailplate\"/>\n\t\t\t<xs:enumeration value=\"rivet\"/>\n\t\t\t<xs:enumeration value=\"screw\"/>\n\t\t\t<xs:enumeration value=\"shearconnector\"/>\n\t\t\t<xs:enumeration value=\"staple\"/>\n\t\t\t<xs:enumeration value=\"studshearconnector\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMedicalDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airstation\"/>\n\t\t\t<xs:enumeration value=\"feedairunit\"/>\n\t\t\t<xs:enumeration value=\"oxygengenerator\"/>\n\t\t\t<xs:enumeration value=\"oxygenplant\"/>\n\t\t\t<xs:enumeration value=\"vacuumstation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"brace\"/>\n\t\t\t<xs:enumeration value=\"chord\"/>\n\t\t\t<xs:enumeration value=\"collar\"/>\n\t\t\t<xs:enumeration value=\"member\"/>\n\t\t\t<xs:enumeration value=\"mullion\"/>\n\t\t\t<xs:enumeration value=\"plate\"/>\n\t\t\t<xs:enumeration value=\"post\"/>\n\t\t\t<xs:enumeration value=\"purlin\"/>\n\t\t\t<xs:enumeration value=\"rafter\"/>\n\t\t\t<xs:enumeration value=\"stringer\"/>\n\t\t\t<xs:enumeration value=\"strut\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMotorConnectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beltdrive\"/>\n\t\t\t<xs:enumeration value=\"coupling\"/>\n\t\t\t<xs:enumeration value=\"directdrive\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNullStyle\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"null\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcObjectTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"product\"/>\n\t\t\t<xs:enumeration value=\"process\"/>\n\t\t\t<xs:enumeration value=\"control\"/>\n\t\t\t<xs:enumeration value=\"resource\"/>\n\t\t\t<xs:enumeration value=\"actor\"/>\n\t\t\t<xs:enumeration value=\"group\"/>\n\t\t\t<xs:enumeration value=\"project\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcObjectiveEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"codecompliance\"/>\n\t\t\t<xs:enumeration value=\"codewaiver\"/>\n\t\t\t<xs:enumeration value=\"designintent\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"healthandsafety\"/>\n\t\t\t<xs:enumeration value=\"mergeconflict\"/>\n\t\t\t<xs:enumeration value=\"modelview\"/>\n\t\t\t<xs:enumeration value=\"parameter\"/>\n\t\t\t<xs:enumeration value=\"requirement\"/>\n\t\t\t<xs:enumeration value=\"specification\"/>\n\t\t\t<xs:enumeration value=\"triggercondition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOccupantTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assignee\"/>\n\t\t\t<xs:enumeration value=\"assignor\"/>\n\t\t\t<xs:enumeration value=\"lessee\"/>\n\t\t\t<xs:enumeration value=\"lessor\"/>\n\t\t\t<xs:enumeration value=\"lettingagent\"/>\n\t\t\t<xs:enumeration value=\"owner\"/>\n\t\t\t<xs:enumeration value=\"tenant\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOpeningElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"opening\"/>\n\t\t\t<xs:enumeration value=\"recess\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOutletTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"audiovisualoutlet\"/>\n\t\t\t<xs:enumeration value=\"communicationsoutlet\"/>\n\t\t\t<xs:enumeration value=\"poweroutlet\"/>\n\t\t\t<xs:enumeration value=\"dataoutlet\"/>\n\t\t\t<xs:enumeration value=\"telephoneoutlet\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPerformanceHistoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPermeableCoveringOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"grill\"/>\n\t\t\t<xs:enumeration value=\"louver\"/>\n\t\t\t<xs:enumeration value=\"screen\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPermitTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"access\"/>\n\t\t\t<xs:enumeration value=\"building\"/>\n\t\t\t<xs:enumeration value=\"work\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPhysicalOrVirtualEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"physical\"/>\n\t\t\t<xs:enumeration value=\"virtual\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPileConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cast_in_place\"/>\n\t\t\t<xs:enumeration value=\"composite\"/>\n\t\t\t<xs:enumeration value=\"precast_concrete\"/>\n\t\t\t<xs:enumeration value=\"prefab_steel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPileTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bored\"/>\n\t\t\t<xs:enumeration value=\"driven\"/>\n\t\t\t<xs:enumeration value=\"jetgrouting\"/>\n\t\t\t<xs:enumeration value=\"cohesion\"/>\n\t\t\t<xs:enumeration value=\"friction\"/>\n\t\t\t<xs:enumeration value=\"support\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPipeFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"obstruction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPipeSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"culvert\"/>\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\n\t\t\t<xs:enumeration value=\"gutter\"/>\n\t\t\t<xs:enumeration value=\"spool\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curtain_panel\"/>\n\t\t\t<xs:enumeration value=\"sheet\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPreferredSurfaceCurveRepresentation\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curve3d\"/>\n\t\t\t<xs:enumeration value=\"pcurve_s1\"/>\n\t\t\t<xs:enumeration value=\"pcurve_s2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProcedureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"advice_caution\"/>\n\t\t\t<xs:enumeration value=\"advice_note\"/>\n\t\t\t<xs:enumeration value=\"advice_warning\"/>\n\t\t\t<xs:enumeration value=\"calibration\"/>\n\t\t\t<xs:enumeration value=\"diagnostic\"/>\n\t\t\t<xs:enumeration value=\"shutdown\"/>\n\t\t\t<xs:enumeration value=\"startup\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProfileTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curve\"/>\n\t\t\t<xs:enumeration value=\"area\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectOrderTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"changeorder\"/>\n\t\t\t<xs:enumeration value=\"maintenanceworkorder\"/>\n\t\t\t<xs:enumeration value=\"moveorder\"/>\n\t\t\t<xs:enumeration value=\"purchaseorder\"/>\n\t\t\t<xs:enumeration value=\"workorder\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectedOrTrueLengthEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"projected_length\"/>\n\t\t\t<xs:enumeration value=\"true_length\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectionElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPropertySetTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pset_typedrivenonly\"/>\n\t\t\t<xs:enumeration value=\"pset_typedrivenoverride\"/>\n\t\t\t<xs:enumeration value=\"pset_occurrencedriven\"/>\n\t\t\t<xs:enumeration value=\"pset_performancedriven\"/>\n\t\t\t<xs:enumeration value=\"qto_typedrivenonly\"/>\n\t\t\t<xs:enumeration value=\"qto_typedrivenoverride\"/>\n\t\t\t<xs:enumeration value=\"qto_occurrencedriven\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProtectiveDeviceTrippingUnitTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electronic\"/>\n\t\t\t<xs:enumeration value=\"electromagnetic\"/>\n\t\t\t<xs:enumeration value=\"residualcurrent\"/>\n\t\t\t<xs:enumeration value=\"thermal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProtectiveDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"circuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"earthleakagecircuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"earthingswitch\"/>\n\t\t\t<xs:enumeration value=\"fusedisconnector\"/>\n\t\t\t<xs:enumeration value=\"residualcurrentcircuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"residualcurrentswitch\"/>\n\t\t\t<xs:enumeration value=\"varistor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPumpTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"circulator\"/>\n\t\t\t<xs:enumeration value=\"endsuction\"/>\n\t\t\t<xs:enumeration value=\"splitcase\"/>\n\t\t\t<xs:enumeration value=\"submersiblepump\"/>\n\t\t\t<xs:enumeration value=\"sumppump\"/>\n\t\t\t<xs:enumeration value=\"verticalinline\"/>\n\t\t\t<xs:enumeration value=\"verticalturbine\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRailingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"handrail\"/>\n\t\t\t<xs:enumeration value=\"guardrail\"/>\n\t\t\t<xs:enumeration value=\"balustrade\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRampFlightTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight\"/>\n\t\t\t<xs:enumeration value=\"spiral\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRampTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight_run_ramp\"/>\n\t\t\t<xs:enumeration value=\"two_straight_run_ramp\"/>\n\t\t\t<xs:enumeration value=\"quarter_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"half_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"spiral_ramp\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRecurrenceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"daily\"/>\n\t\t\t<xs:enumeration value=\"weekly\"/>\n\t\t\t<xs:enumeration value=\"monthly_by_day_of_month\"/>\n\t\t\t<xs:enumeration value=\"monthly_by_position\"/>\n\t\t\t<xs:enumeration value=\"by_day_count\"/>\n\t\t\t<xs:enumeration value=\"by_weekday_count\"/>\n\t\t\t<xs:enumeration value=\"yearly_by_day_of_month\"/>\n\t\t\t<xs:enumeration value=\"yearly_by_position\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReflectanceMethodEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blinn\"/>\n\t\t\t<xs:enumeration value=\"flat\"/>\n\t\t\t<xs:enumeration value=\"glass\"/>\n\t\t\t<xs:enumeration value=\"matt\"/>\n\t\t\t<xs:enumeration value=\"metal\"/>\n\t\t\t<xs:enumeration value=\"mirror\"/>\n\t\t\t<xs:enumeration value=\"phong\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"strauss\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarRoleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"main\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"ligature\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"punching\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"ring\"/>\n\t\t\t<xs:enumeration value=\"anchoring\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarSurfaceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plain\"/>\n\t\t\t<xs:enumeration value=\"textured\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchoring\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"ligature\"/>\n\t\t\t<xs:enumeration value=\"main\"/>\n\t\t\t<xs:enumeration value=\"punching\"/>\n\t\t\t<xs:enumeration value=\"ring\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingMeshTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRoleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"supplier\"/>\n\t\t\t<xs:enumeration value=\"manufacturer\"/>\n\t\t\t<xs:enumeration value=\"contractor\"/>\n\t\t\t<xs:enumeration value=\"subcontractor\"/>\n\t\t\t<xs:enumeration value=\"architect\"/>\n\t\t\t<xs:enumeration value=\"structuralengineer\"/>\n\t\t\t<xs:enumeration value=\"costengineer\"/>\n\t\t\t<xs:enumeration value=\"client\"/>\n\t\t\t<xs:enumeration value=\"buildingowner\"/>\n\t\t\t<xs:enumeration value=\"buildingoperator\"/>\n\t\t\t<xs:enumeration value=\"mechanicalengineer\"/>\n\t\t\t<xs:enumeration value=\"electricalengineer\"/>\n\t\t\t<xs:enumeration value=\"projectmanager\"/>\n\t\t\t<xs:enumeration value=\"facilitiesmanager\"/>\n\t\t\t<xs:enumeration value=\"civilengineer\"/>\n\t\t\t<xs:enumeration value=\"commissioningengineer\"/>\n\t\t\t<xs:enumeration value=\"engineer\"/>\n\t\t\t<xs:enumeration value=\"owner\"/>\n\t\t\t<xs:enumeration value=\"consultant\"/>\n\t\t\t<xs:enumeration value=\"constructionmanager\"/>\n\t\t\t<xs:enumeration value=\"fieldconstructionmanager\"/>\n\t\t\t<xs:enumeration value=\"reseller\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRoofTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flat_roof\"/>\n\t\t\t<xs:enumeration value=\"shed_roof\"/>\n\t\t\t<xs:enumeration value=\"gable_roof\"/>\n\t\t\t<xs:enumeration value=\"hip_roof\"/>\n\t\t\t<xs:enumeration value=\"hipped_gable_roof\"/>\n\t\t\t<xs:enumeration value=\"gambrel_roof\"/>\n\t\t\t<xs:enumeration value=\"mansard_roof\"/>\n\t\t\t<xs:enumeration value=\"barrel_roof\"/>\n\t\t\t<xs:enumeration value=\"rainbow_roof\"/>\n\t\t\t<xs:enumeration value=\"butterfly_roof\"/>\n\t\t\t<xs:enumeration value=\"pavilion_roof\"/>\n\t\t\t<xs:enumeration value=\"dome_roof\"/>\n\t\t\t<xs:enumeration value=\"freeform\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSIPrefix\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"exa\"/>\n\t\t\t<xs:enumeration value=\"peta\"/>\n\t\t\t<xs:enumeration value=\"tera\"/>\n\t\t\t<xs:enumeration value=\"giga\"/>\n\t\t\t<xs:enumeration value=\"mega\"/>\n\t\t\t<xs:enumeration value=\"kilo\"/>\n\t\t\t<xs:enumeration value=\"hecto\"/>\n\t\t\t<xs:enumeration value=\"deca\"/>\n\t\t\t<xs:enumeration value=\"deci\"/>\n\t\t\t<xs:enumeration value=\"centi\"/>\n\t\t\t<xs:enumeration value=\"milli\"/>\n\t\t\t<xs:enumeration value=\"micro\"/>\n\t\t\t<xs:enumeration value=\"nano\"/>\n\t\t\t<xs:enumeration value=\"pico\"/>\n\t\t\t<xs:enumeration value=\"femto\"/>\n\t\t\t<xs:enumeration value=\"atto\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSIUnitName\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ampere\"/>\n\t\t\t<xs:enumeration value=\"becquerel\"/>\n\t\t\t<xs:enumeration value=\"candela\"/>\n\t\t\t<xs:enumeration value=\"coulomb\"/>\n\t\t\t<xs:enumeration value=\"cubic_metre\"/>\n\t\t\t<xs:enumeration value=\"degree_celsius\"/>\n\t\t\t<xs:enumeration value=\"farad\"/>\n\t\t\t<xs:enumeration value=\"gram\"/>\n\t\t\t<xs:enumeration value=\"gray\"/>\n\t\t\t<xs:enumeration value=\"henry\"/>\n\t\t\t<xs:enumeration value=\"hertz\"/>\n\t\t\t<xs:enumeration value=\"joule\"/>\n\t\t\t<xs:enumeration value=\"kelvin\"/>\n\t\t\t<xs:enumeration value=\"lumen\"/>\n\t\t\t<xs:enumeration value=\"lux\"/>\n\t\t\t<xs:enumeration value=\"metre\"/>\n\t\t\t<xs:enumeration value=\"mole\"/>\n\t\t\t<xs:enumeration value=\"newton\"/>\n\t\t\t<xs:enumeration value=\"ohm\"/>\n\t\t\t<xs:enumeration value=\"pascal\"/>\n\t\t\t<xs:enumeration value=\"radian\"/>\n\t\t\t<xs:enumeration value=\"second\"/>\n\t\t\t<xs:enumeration value=\"siemens\"/>\n\t\t\t<xs:enumeration value=\"sievert\"/>\n\t\t\t<xs:enumeration value=\"square_metre\"/>\n\t\t\t<xs:enumeration value=\"steradian\"/>\n\t\t\t<xs:enumeration value=\"tesla\"/>\n\t\t\t<xs:enumeration value=\"volt\"/>\n\t\t\t<xs:enumeration value=\"watt\"/>\n\t\t\t<xs:enumeration value=\"weber\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSanitaryTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bath\"/>\n\t\t\t<xs:enumeration value=\"bidet\"/>\n\t\t\t<xs:enumeration value=\"cistern\"/>\n\t\t\t<xs:enumeration value=\"shower\"/>\n\t\t\t<xs:enumeration value=\"sink\"/>\n\t\t\t<xs:enumeration value=\"sanitaryfountain\"/>\n\t\t\t<xs:enumeration value=\"toiletpan\"/>\n\t\t\t<xs:enumeration value=\"urinal\"/>\n\t\t\t<xs:enumeration value=\"washhandbasin\"/>\n\t\t\t<xs:enumeration value=\"wcseat\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"uniform\"/>\n\t\t\t<xs:enumeration value=\"tapered\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSensorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cosensor\"/>\n\t\t\t<xs:enumeration value=\"co2sensor\"/>\n\t\t\t<xs:enumeration value=\"conductancesensor\"/>\n\t\t\t<xs:enumeration value=\"contactsensor\"/>\n\t\t\t<xs:enumeration value=\"firesensor\"/>\n\t\t\t<xs:enumeration value=\"flowsensor\"/>\n\t\t\t<xs:enumeration value=\"frostsensor\"/>\n\t\t\t<xs:enumeration value=\"gassensor\"/>\n\t\t\t<xs:enumeration value=\"heatsensor\"/>\n\t\t\t<xs:enumeration value=\"humiditysensor\"/>\n\t\t\t<xs:enumeration value=\"identifiersensor\"/>\n\t\t\t<xs:enumeration value=\"ionconcentrationsensor\"/>\n\t\t\t<xs:enumeration value=\"levelsensor\"/>\n\t\t\t<xs:enumeration value=\"lightsensor\"/>\n\t\t\t<xs:enumeration value=\"moisturesensor\"/>\n\t\t\t<xs:enumeration value=\"movementsensor\"/>\n\t\t\t<xs:enumeration value=\"phsensor\"/>\n\t\t\t<xs:enumeration value=\"pressuresensor\"/>\n\t\t\t<xs:enumeration value=\"radiationsensor\"/>\n\t\t\t<xs:enumeration value=\"radioactivitysensor\"/>\n\t\t\t<xs:enumeration value=\"smokesensor\"/>\n\t\t\t<xs:enumeration value=\"soundsensor\"/>\n\t\t\t<xs:enumeration value=\"temperaturesensor\"/>\n\t\t\t<xs:enumeration value=\"windsensor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSequenceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"start_start\"/>\n\t\t\t<xs:enumeration value=\"start_finish\"/>\n\t\t\t<xs:enumeration value=\"finish_start\"/>\n\t\t\t<xs:enumeration value=\"finish_finish\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcShadingDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"jalousie\"/>\n\t\t\t<xs:enumeration value=\"shutter\"/>\n\t\t\t<xs:enumeration value=\"awning\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSimplePropertyTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"p_singlevalue\"/>\n\t\t\t<xs:enumeration value=\"p_enumeratedvalue\"/>\n\t\t\t<xs:enumeration value=\"p_boundedvalue\"/>\n\t\t\t<xs:enumeration value=\"p_listvalue\"/>\n\t\t\t<xs:enumeration value=\"p_tablevalue\"/>\n\t\t\t<xs:enumeration value=\"p_referencevalue\"/>\n\t\t\t<xs:enumeration value=\"q_length\"/>\n\t\t\t<xs:enumeration value=\"q_area\"/>\n\t\t\t<xs:enumeration value=\"q_volume\"/>\n\t\t\t<xs:enumeration value=\"q_count\"/>\n\t\t\t<xs:enumeration value=\"q_weight\"/>\n\t\t\t<xs:enumeration value=\"q_time\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSlabTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floor\"/>\n\t\t\t<xs:enumeration value=\"roof\"/>\n\t\t\t<xs:enumeration value=\"landing\"/>\n\t\t\t<xs:enumeration value=\"baseslab\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSolarDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"solarcollector\"/>\n\t\t\t<xs:enumeration value=\"solarpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpaceHeaterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"convector\"/>\n\t\t\t<xs:enumeration value=\"radiator\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpaceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"space\"/>\n\t\t\t<xs:enumeration value=\"parking\"/>\n\t\t\t<xs:enumeration value=\"gfa\"/>\n\t\t\t<xs:enumeration value=\"internal\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpatialZoneTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"construction\"/>\n\t\t\t<xs:enumeration value=\"firesafety\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"occupancy\"/>\n\t\t\t<xs:enumeration value=\"security\"/>\n\t\t\t<xs:enumeration value=\"thermal\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"ventilation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStackTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"birdcage\"/>\n\t\t\t<xs:enumeration value=\"cowl\"/>\n\t\t\t<xs:enumeration value=\"rainwaterhopper\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStairFlightTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight\"/>\n\t\t\t<xs:enumeration value=\"winder\"/>\n\t\t\t<xs:enumeration value=\"spiral\"/>\n\t\t\t<xs:enumeration value=\"curved\"/>\n\t\t\t<xs:enumeration value=\"freeform\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStairTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight_run_stair\"/>\n\t\t\t<xs:enumeration value=\"two_straight_run_stair\"/>\n\t\t\t<xs:enumeration value=\"quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"half_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"half_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"three_quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"three_quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"spiral_stair\"/>\n\t\t\t<xs:enumeration value=\"double_return_stair\"/>\n\t\t\t<xs:enumeration value=\"curved_run_stair\"/>\n\t\t\t<xs:enumeration value=\"two_curved_run_stair\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStateEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"readwrite\"/>\n\t\t\t<xs:enumeration value=\"readonly\"/>\n\t\t\t<xs:enumeration value=\"locked\"/>\n\t\t\t<xs:enumeration value=\"readwritelocked\"/>\n\t\t\t<xs:enumeration value=\"readonlylocked\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralCurveActivityTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"const\"/>\n\t\t\t<xs:enumeration value=\"linear\"/>\n\t\t\t<xs:enumeration value=\"polygonal\"/>\n\t\t\t<xs:enumeration value=\"equidistant\"/>\n\t\t\t<xs:enumeration value=\"sinus\"/>\n\t\t\t<xs:enumeration value=\"parabola\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralCurveMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rigid_joined_member\"/>\n\t\t\t<xs:enumeration value=\"pin_joined_member\"/>\n\t\t\t<xs:enumeration value=\"cable\"/>\n\t\t\t<xs:enumeration value=\"tension_member\"/>\n\t\t\t<xs:enumeration value=\"compression_member\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralSurfaceActivityTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"const\"/>\n\t\t\t<xs:enumeration value=\"bilinear\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"isocontour\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralSurfaceMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bending_element\"/>\n\t\t\t<xs:enumeration value=\"membrane_element\"/>\n\t\t\t<xs:enumeration value=\"shell\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSubContractResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"purchase\"/>\n\t\t\t<xs:enumeration value=\"work\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSurfaceFeatureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"mark\"/>\n\t\t\t<xs:enumeration value=\"tag\"/>\n\t\t\t<xs:enumeration value=\"treatment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSurfaceSide\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"positive\"/>\n\t\t\t<xs:enumeration value=\"negative\"/>\n\t\t\t<xs:enumeration value=\"both\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSwitchingDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"contactor\"/>\n\t\t\t<xs:enumeration value=\"dimmerswitch\"/>\n\t\t\t<xs:enumeration value=\"emergencystop\"/>\n\t\t\t<xs:enumeration value=\"keypad\"/>\n\t\t\t<xs:enumeration value=\"momentaryswitch\"/>\n\t\t\t<xs:enumeration value=\"selectorswitch\"/>\n\t\t\t<xs:enumeration value=\"starter\"/>\n\t\t\t<xs:enumeration value=\"switchdisconnector\"/>\n\t\t\t<xs:enumeration value=\"toggleswitch\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSystemFurnitureElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"panel\"/>\n\t\t\t<xs:enumeration value=\"worksurface\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTankTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"basin\"/>\n\t\t\t<xs:enumeration value=\"breakpressure\"/>\n\t\t\t<xs:enumeration value=\"expansion\"/>\n\t\t\t<xs:enumeration value=\"feedandexpansion\"/>\n\t\t\t<xs:enumeration value=\"pressurevessel\"/>\n\t\t\t<xs:enumeration value=\"storage\"/>\n\t\t\t<xs:enumeration value=\"vessel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTaskDurationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"elapsedtime\"/>\n\t\t\t<xs:enumeration value=\"worktime\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTaskTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"attendance\"/>\n\t\t\t<xs:enumeration value=\"construction\"/>\n\t\t\t<xs:enumeration value=\"demolition\"/>\n\t\t\t<xs:enumeration value=\"dismantle\"/>\n\t\t\t<xs:enumeration value=\"disposal\"/>\n\t\t\t<xs:enumeration value=\"installation\"/>\n\t\t\t<xs:enumeration value=\"logistic\"/>\n\t\t\t<xs:enumeration value=\"maintenance\"/>\n\t\t\t<xs:enumeration value=\"move\"/>\n\t\t\t<xs:enumeration value=\"operation\"/>\n\t\t\t<xs:enumeration value=\"removal\"/>\n\t\t\t<xs:enumeration value=\"renovation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTendonAnchorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"coupler\"/>\n\t\t\t<xs:enumeration value=\"fixed_end\"/>\n\t\t\t<xs:enumeration value=\"tensioning_end\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTendonTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bar\"/>\n\t\t\t<xs:enumeration value=\"coated\"/>\n\t\t\t<xs:enumeration value=\"strand\"/>\n\t\t\t<xs:enumeration value=\"wire\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextPath\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"up\"/>\n\t\t\t<xs:enumeration value=\"down\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeSeriesDataTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"continuous\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"discretebinary\"/>\n\t\t\t<xs:enumeration value=\"piecewisebinary\"/>\n\t\t\t<xs:enumeration value=\"piecewiseconstant\"/>\n\t\t\t<xs:enumeration value=\"piecewisecontinuous\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransformerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"current\"/>\n\t\t\t<xs:enumeration value=\"frequency\"/>\n\t\t\t<xs:enumeration value=\"inverter\"/>\n\t\t\t<xs:enumeration value=\"rectifier\"/>\n\t\t\t<xs:enumeration value=\"voltage\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransitionCode\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"discontinuous\"/>\n\t\t\t<xs:enumeration value=\"continuous\"/>\n\t\t\t<xs:enumeration value=\"contsamegradient\"/>\n\t\t\t<xs:enumeration value=\"contsamegradientsamecurvature\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransportElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"elevator\"/>\n\t\t\t<xs:enumeration value=\"escalator\"/>\n\t\t\t<xs:enumeration value=\"movingwalkway\"/>\n\t\t\t<xs:enumeration value=\"craneway\"/>\n\t\t\t<xs:enumeration value=\"liftinggear\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTrimmingPreference\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cartesian\"/>\n\t\t\t<xs:enumeration value=\"parameter\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTubeBundleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"finned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"absorbeddoseunit\"/>\n\t\t\t<xs:enumeration value=\"amountofsubstanceunit\"/>\n\t\t\t<xs:enumeration value=\"areaunit\"/>\n\t\t\t<xs:enumeration value=\"doseequivalentunit\"/>\n\t\t\t<xs:enumeration value=\"electriccapacitanceunit\"/>\n\t\t\t<xs:enumeration value=\"electricchargeunit\"/>\n\t\t\t<xs:enumeration value=\"electricconductanceunit\"/>\n\t\t\t<xs:enumeration value=\"electriccurrentunit\"/>\n\t\t\t<xs:enumeration value=\"electricresistanceunit\"/>\n\t\t\t<xs:enumeration value=\"electricvoltageunit\"/>\n\t\t\t<xs:enumeration value=\"energyunit\"/>\n\t\t\t<xs:enumeration value=\"forceunit\"/>\n\t\t\t<xs:enumeration value=\"frequencyunit\"/>\n\t\t\t<xs:enumeration value=\"illuminanceunit\"/>\n\t\t\t<xs:enumeration value=\"inductanceunit\"/>\n\t\t\t<xs:enumeration value=\"lengthunit\"/>\n\t\t\t<xs:enumeration value=\"luminousfluxunit\"/>\n\t\t\t<xs:enumeration value=\"luminousintensityunit\"/>\n\t\t\t<xs:enumeration value=\"magneticfluxdensityunit\"/>\n\t\t\t<xs:enumeration value=\"magneticfluxunit\"/>\n\t\t\t<xs:enumeration value=\"massunit\"/>\n\t\t\t<xs:enumeration value=\"planeangleunit\"/>\n\t\t\t<xs:enumeration value=\"powerunit\"/>\n\t\t\t<xs:enumeration value=\"pressureunit\"/>\n\t\t\t<xs:enumeration value=\"radioactivityunit\"/>\n\t\t\t<xs:enumeration value=\"solidangleunit\"/>\n\t\t\t<xs:enumeration value=\"thermodynamictemperatureunit\"/>\n\t\t\t<xs:enumeration value=\"timeunit\"/>\n\t\t\t<xs:enumeration value=\"volumeunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitaryControlElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"alarmpanel\"/>\n\t\t\t<xs:enumeration value=\"controlpanel\"/>\n\t\t\t<xs:enumeration value=\"gasdetectionpanel\"/>\n\t\t\t<xs:enumeration value=\"indicatorpanel\"/>\n\t\t\t<xs:enumeration value=\"mimicpanel\"/>\n\t\t\t<xs:enumeration value=\"humidistat\"/>\n\t\t\t<xs:enumeration value=\"thermostat\"/>\n\t\t\t<xs:enumeration value=\"weatherstation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitaryEquipmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airhandler\"/>\n\t\t\t<xs:enumeration value=\"airconditioningunit\"/>\n\t\t\t<xs:enumeration value=\"dehumidifier\"/>\n\t\t\t<xs:enumeration value=\"splitsystem\"/>\n\t\t\t<xs:enumeration value=\"rooftopunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcValveTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airrelease\"/>\n\t\t\t<xs:enumeration value=\"antivacuum\"/>\n\t\t\t<xs:enumeration value=\"changeover\"/>\n\t\t\t<xs:enumeration value=\"check\"/>\n\t\t\t<xs:enumeration value=\"commissioning\"/>\n\t\t\t<xs:enumeration value=\"diverting\"/>\n\t\t\t<xs:enumeration value=\"drawoffcock\"/>\n\t\t\t<xs:enumeration value=\"doublecheck\"/>\n\t\t\t<xs:enumeration value=\"doubleregulating\"/>\n\t\t\t<xs:enumeration value=\"faucet\"/>\n\t\t\t<xs:enumeration value=\"flushing\"/>\n\t\t\t<xs:enumeration value=\"gascock\"/>\n\t\t\t<xs:enumeration value=\"gastap\"/>\n\t\t\t<xs:enumeration value=\"isolating\"/>\n\t\t\t<xs:enumeration value=\"mixing\"/>\n\t\t\t<xs:enumeration value=\"pressurereducing\"/>\n\t\t\t<xs:enumeration value=\"pressurerelief\"/>\n\t\t\t<xs:enumeration value=\"regulating\"/>\n\t\t\t<xs:enumeration value=\"safetycutoff\"/>\n\t\t\t<xs:enumeration value=\"steamtrap\"/>\n\t\t\t<xs:enumeration value=\"stopcock\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVibrationIsolatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compression\"/>\n\t\t\t<xs:enumeration value=\"spring\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVoidingFeatureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cutout\"/>\n\t\t\t<xs:enumeration value=\"notch\"/>\n\t\t\t<xs:enumeration value=\"hole\"/>\n\t\t\t<xs:enumeration value=\"miter\"/>\n\t\t\t<xs:enumeration value=\"chamfer\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWallTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"movable\"/>\n\t\t\t<xs:enumeration value=\"parapet\"/>\n\t\t\t<xs:enumeration value=\"partitioning\"/>\n\t\t\t<xs:enumeration value=\"plumbingwall\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"solidwall\"/>\n\t\t\t<xs:enumeration value=\"standard\"/>\n\t\t\t<xs:enumeration value=\"polygonal\"/>\n\t\t\t<xs:enumeration value=\"elementedwall\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWasteTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floortrap\"/>\n\t\t\t<xs:enumeration value=\"floorwaste\"/>\n\t\t\t<xs:enumeration value=\"gullysump\"/>\n\t\t\t<xs:enumeration value=\"gullytrap\"/>\n\t\t\t<xs:enumeration value=\"roofdrain\"/>\n\t\t\t<xs:enumeration value=\"wastedisposalunit\"/>\n\t\t\t<xs:enumeration value=\"wastetrap\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowPanelOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"sidehungrighthand\"/>\n\t\t\t<xs:enumeration value=\"sidehunglefthand\"/>\n\t\t\t<xs:enumeration value=\"tiltandturnrighthand\"/>\n\t\t\t<xs:enumeration value=\"tiltandturnlefthand\"/>\n\t\t\t<xs:enumeration value=\"tophung\"/>\n\t\t\t<xs:enumeration value=\"bottomhung\"/>\n\t\t\t<xs:enumeration value=\"pivothorizontal\"/>\n\t\t\t<xs:enumeration value=\"pivotvertical\"/>\n\t\t\t<xs:enumeration value=\"slidinghorizontal\"/>\n\t\t\t<xs:enumeration value=\"slidingvertical\"/>\n\t\t\t<xs:enumeration value=\"removablecasement\"/>\n\t\t\t<xs:enumeration value=\"fixedcasement\"/>\n\t\t\t<xs:enumeration value=\"otheroperation\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowPanelPositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"middle\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"bottom\"/>\n\t\t\t<xs:enumeration value=\"top\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowStyleConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aluminium\"/>\n\t\t\t<xs:enumeration value=\"high_grade_steel\"/>\n\t\t\t<xs:enumeration value=\"steel\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"aluminium_wood\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"other_construction\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowStyleOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_panel\"/>\n\t\t\t<xs:enumeration value=\"double_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"double_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_bottom\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_top\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_left\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_right\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"window\"/>\n\t\t\t<xs:enumeration value=\"skylight\"/>\n\t\t\t<xs:enumeration value=\"lightdome\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowTypePartitioningEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_panel\"/>\n\t\t\t<xs:enumeration value=\"double_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"double_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_bottom\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_top\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_left\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_right\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkCalendarTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"firstshift\"/>\n\t\t\t<xs:enumeration value=\"secondshift\"/>\n\t\t\t<xs:enumeration value=\"thirdshift\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkPlanTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actual\"/>\n\t\t\t<xs:enumeration value=\"baseline\"/>\n\t\t\t<xs:enumeration value=\"planned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkScheduleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actual\"/>\n\t\t\t<xs:enumeration value=\"baseline\"/>\n\t\t\t<xs:enumeration value=\"planned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<!-- simple type declarations (for TYPE defined data type definitions) -->\n\t<xs:simpleType name=\"IfcAbsorbedDoseMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAccelerationMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAmountOfSubstanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAngularVelocityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcArcIndex\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcArcIndex\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcArcIndex\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t<xs:maxLength value=\"3\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAreaDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAreaMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcBinary\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:hexBinary\">\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"IfcBoolean\">\n\t\t<xs:restriction base=\"xs:boolean\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBoxAlignment\">\n\t\t<xs:restriction base=\"ifc:IfcLabel\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCardinalPointReference\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcComplexNumber\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcComplexNumber\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"xs:double\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"array\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcComplexNumber\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"xs:double\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t<xs:maxLength value=\"2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcCompoundPlaneAngleMeasure\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcCompoundPlaneAngleMeasure\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"xs:long\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcCompoundPlaneAngleMeasure\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"xs:long\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t<xs:maxLength value=\"4\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcContextDependentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCountMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurvatureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDate\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDateTime\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDayInMonthNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDayInWeekNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDescriptiveMeasure\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDimensionCount\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoseEquivalentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuration\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDynamicViscosityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricCapacitanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricChargeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricConductanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricCurrentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricResistanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricVoltageMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEnergyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontStyle\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontVariant\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontWeight\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFrequencyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGloballyUniqueId\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:minLength value=\"22\"/>\n\t\t\t<xs:maxLength value=\"22\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatFluxDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatingValueMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIdentifier\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:maxLength value=\"255\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIlluminanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInductanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInteger\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIntegerCountRateMeasure\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIonConcentrationMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIsothermalMoistureCapacityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcKinematicViscosityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLabel\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:maxLength value=\"255\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLanguageId\">\n\t\t<xs:restriction base=\"ifc:IfcIdentifier\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLengthMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcLineIndex\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcLineIndex\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcLineIndex\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearMomentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearStiffnessMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearVelocityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLogical\">\n\t\t<xs:restriction base=\"ifc:logical\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousFluxMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousIntensityDistributionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousIntensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMagneticFluxDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMagneticFluxMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassFlowRateMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassPerLengthMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfElasticityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMoistureDiffusivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMolecularWeightMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMomentOfInertiaMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMonetaryMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMonthInYearNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNonNegativeLengthMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNormalisedRatioMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNumericMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPHMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcParameterValue\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlanarForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlaneAngleMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveInteger\">\n\t\t<xs:restriction base=\"ifc:IfcInteger\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveLengthMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositivePlaneAngleMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcPlaneAngleMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveRatioMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPowerMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPresentableText\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPressureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcPropertySetDefinitionSet\">\n\t\t<xs:sequence>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t</xs:sequence>\n\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t</xs:complexType>\n\t<xs:simpleType name=\"IfcRadioActivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRatioMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReal\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalFrequencyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalMassMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalStiffnessMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionModulusMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionalAreaIntegralMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcShearModulusMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSolidAngleMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPowerLevelMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPowerMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPressureLevelMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPressureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecificHeatCapacityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecularExponent\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecularRoughness\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTemperatureGradientMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTemperatureRateOfChangeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcText\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextAlignment\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextDecoration\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextFontName\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextTransformation\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalAdmittanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalConductivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalExpansionCoefficientMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalResistanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalTransmittanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermodynamicTemperatureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTime\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeStamp\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTorqueMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcURIReference\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVaporPermeabilityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVolumeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVolumetricFlowRateMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWarpingConstantMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWarpingMomentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<!-- base entity and entity attribute declaration (for embeded base schema definitions) -->\n\t<xs:element name=\"Entity\" type=\"ifc:Entity\" abstract=\"true\" nillable=\"true\"/>\n\t<xs:complexType name=\"Entity\" abstract=\"true\">\n\t\t<xs:attribute name=\"href\" type=\"xs:anyURI\" use=\"optional\"/>\n\t\t<xs:attribute name=\"ref\" type=\"xs:IDREF\" use=\"optional\"/>\n\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t</xs:complexType>\n\t<!-- base global attribute declaration (for embeded base schema definitions) -->\n\t<xs:attributeGroup name=\"instanceAttributes\">\n\t\t<xs:attribute name=\"id\" type=\"xs:ID\" use=\"optional\"/>\n\t\t<xs:attribute name=\"path\" type=\"xs:NMTOKENS\" use=\"optional\"/>\n\t\t<xs:attribute name=\"pos\" use=\"optional\">\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:restriction>\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:list itemType=\"xs:integer\"/>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t<xs:minLength value=\"1\"/>\n\t\t\t\t</xs:restriction>\n\t\t\t</xs:simpleType>\n\t\t</xs:attribute>\n\t</xs:attributeGroup>\n\t<xs:attribute name=\"arraySize\">\n\t\t<xs:simpleType>\n\t\t\t<xs:restriction>\n\t\t\t\t<xs:simpleType>\n\t\t\t\t\t<xs:list itemType=\"xs:integer\"/>\n\t\t\t\t</xs:simpleType>\n\t\t\t\t<xs:minLength value=\"1\"/>\n\t\t\t</xs:restriction>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:attribute name=\"itemType\">\n\t\t<xs:simpleType>\n\t\t\t<xs:list itemType=\"xs:QName\"/>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:attribute name=\"cType\">\n\t\t<xs:simpleType>\n\t\t\t<xs:list itemType=\"ifc:aggregateType\"/>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:simpleType name=\"aggregateType\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:enumeration value=\"array\"/>\n\t\t\t<xs:enumeration value=\"list\"/>\n\t\t\t<xs:enumeration value=\"set\"/>\n\t\t\t<xs:enumeration value=\"bag\"/>\n\t\t\t<xs:enumeration value=\"array-unique\"/>\n\t\t\t<xs:enumeration value=\"array-optional\"/>\n\t\t\t<xs:enumeration value=\"array-optional-unique\"/>\n\t\t\t<xs:enumeration value=\"list-unique\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<!-- base global simple type declaration (for embeded base schema definitions) -->\n\t<xs:complexType name=\"hexBinary\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"xs:hexBinary\">\n\t\t\t\t<xs:attribute name=\"extraBits\" type=\"xs:integer\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"logical\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:enumeration value=\"false\"/>\n\t\t\t<xs:enumeration value=\"true\"/>\n\t\t\t<xs:enumeration value=\"unknown\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n    <xs:simpleType name=\"Seq-IfcPositiveInteger\">\n        <xs:restriction>\n            <xs:simpleType>\n                <xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n            </xs:simpleType>\n            <xs:minLength value=\"3\"/>\n        </xs:restriction>\n    </xs:simpleType>\n\t<!-- base global wrapper declaration for atomic simple types (for embeded base schema definitions) -->\n\t<xs:element name=\"IfcAbsorbedDoseMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAbsorbedDoseMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAccelerationMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAccelerationMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAmountOfSubstanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAmountOfSubstanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAngularVelocityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAngularVelocityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcArcIndex-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcArcIndex\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAreaDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAreaMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcBinary-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBinary\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcBoolean-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBoolean\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcComplexNumber-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcComplexNumber\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCompoundPlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCompoundPlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcContextDependentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcContextDependentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCountMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCountMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCurvatureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCurvatureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDate-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDate\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDateTime-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDateTime\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDescriptiveMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDescriptiveMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDoseEquivalentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDoseEquivalentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDuration-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDuration\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDynamicViscosityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDynamicViscosityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricCapacitanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCapacitanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricChargeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricChargeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricConductanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricConductanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricCurrentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricResistanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricResistanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricVoltageMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricVoltageMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcEnergyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcFrequencyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFrequencyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcHeatFluxDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatFluxDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcHeatingValueMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatingValueMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIdentifier-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIdentifier\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIlluminanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIlluminanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcInductanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInductanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcInteger-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInteger\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIntegerCountRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIntegerCountRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIonConcentrationMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIonConcentrationMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIsothermalMoistureCapacityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcKinematicViscosityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcKinematicViscosityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLabel-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLabel\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLineIndex-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLineIndex\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearMomentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearMomentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearStiffnessMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearStiffnessMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearVelocityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearVelocityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLogical-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLogical\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousFluxMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousFluxMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousIntensityDistributionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityDistributionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousIntensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMagneticFluxDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMagneticFluxMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassFlowRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassFlowRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassPerLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassPerLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfElasticityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfElasticityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfLinearSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMoistureDiffusivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMoistureDiffusivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMolecularWeightMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMolecularWeightMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMomentOfInertiaMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMomentOfInertiaMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMonetaryMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMonetaryMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNonNegativeLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNonNegativeLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNormalisedRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNormalisedRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNullStyle-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNullStyle\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNumericMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNumericMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPHMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPHMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcParameterValue-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcParameterValue\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPlanarForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlanarForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveInteger-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveInteger\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositivePlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositivePlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPowerMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPowerMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPressureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPressureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPropertySetDefinitionSet-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:complexContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinitionSet\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:complexContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRadioActivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRadioActivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcReal-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcReal\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalFrequencyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalFrequencyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalMassMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalMassMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalStiffnessMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalStiffnessMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSectionModulusMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionModulusMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSectionalAreaIntegralMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionalAreaIntegralMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcShearModulusMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcShearModulusMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSolidAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSolidAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPowerLevelMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerLevelMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPowerMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPressureLevelMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureLevelMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPressureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecificHeatCapacityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecificHeatCapacityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecularExponent-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularExponent\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecularRoughness-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularRoughness\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTemperatureGradientMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureGradientMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTemperatureRateOfChangeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureRateOfChangeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcText-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcText\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTextFontName-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTextFontName\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalAdmittanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalAdmittanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalConductivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalConductivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalExpansionCoefficientMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalExpansionCoefficientMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalResistanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalResistanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalTransmittanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalTransmittanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermodynamicTemperatureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermodynamicTemperatureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTime-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTime\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTimeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTimeStamp-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeStamp\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTorqueMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTorqueMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVaporPermeabilityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVaporPermeabilityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVolumeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVolumetricFlowRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumetricFlowRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcWarpingConstantMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingConstantMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcWarpingMomentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingMomentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n</xs:schema>\n"
  },
  {
    "path": "Install/Program Files to Install/IFC4X3.xsd",
    "content": "<?xml version='1.0' encoding='ASCII'?>\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:ifc=\"https://standards.buildingsmart.org/IFC/RELEASE/IFC4/3/DEV/d423201\" targetNamespace=\"https://standards.buildingsmart.org/IFC/RELEASE/IFC4/3/DEV/d423201\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\">\n\t<xs:element name=\"uos\" type=\"ifc:uos\" abstract=\"true\"/>\n\t<xs:simpleType name=\"Seq-anyURI\">\n\t\t<xs:list itemType=\"xs:anyURI\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"uos\" abstract=\"true\">\n\t\t<xs:sequence>\n\t\t\t<xs:element name=\"header\" minOccurs=\"0\">\n\t\t\t\t<xs:complexType>\n\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t<xs:element name=\"name\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"time_stamp\" type=\"xs:dateTime\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"author\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"organization\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"preprocessor_version\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"originating_system\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"authorization\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"documentation\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t</xs:sequence>\n\t\t\t\t</xs:complexType>\n\t\t\t</xs:element>\n\t\t</xs:sequence>\n\t\t<xs:attribute name=\"id\" type=\"xs:ID\" use=\"optional\"/>\n\t\t<xs:attribute name=\"express\" type=\"ifc:Seq-anyURI\" use=\"optional\"/>\n\t\t<xs:attribute name=\"configuration\" type=\"ifc:Seq-anyURI\" use=\"optional\"/>\n\t</xs:complexType>\n\t<xs:element name=\"ifcXML\" type=\"ifc:ifcXML\" substitutionGroup=\"ifc:uos\"/>\n\t<xs:complexType name=\"ifcXML\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:uos\">\n\t\t\t\t<xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n\t\t\t\t\t<xs:element ref=\"ifc:Entity\"/>\n\t\t\t\t</xs:choice>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActionRequest\" type=\"ifc:IfcActionRequest\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActionRequest\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActionRequestTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActor\" type=\"ifc:IfcActor\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TheActor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActorRole\" type=\"ifc:IfcActorRole\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActorRole\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Role\" type=\"ifc:IfcRoleEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedRole\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActuator\" type=\"ifc:IfcActuator\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActuator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActuatorType\" type=\"ifc:IfcActuatorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActuatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAddress\" type=\"ifc:IfcAddress\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAddress\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcAddressTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPurpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedBrep\" type=\"ifc:IfcAdvancedBrep\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedBrep\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedBrepWithVoids\" type=\"ifc:IfcAdvancedBrepWithVoids\" substitutionGroup=\"ifc:IfcAdvancedBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedBrepWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAdvancedBrep\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Voids\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClosedShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedFace\" type=\"ifc:IfcAdvancedFace\" substitutionGroup=\"ifc:IfcFaceSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFaceSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminal\" type=\"ifc:IfcAirTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalBox\" type=\"ifc:IfcAirTerminalBox\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalBoxType\" type=\"ifc:IfcAirTerminalBoxType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalBoxType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalType\" type=\"ifc:IfcAirTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirToAirHeatRecovery\" type=\"ifc:IfcAirToAirHeatRecovery\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirToAirHeatRecovery\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirToAirHeatRecoveryType\" type=\"ifc:IfcAirToAirHeatRecoveryType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirToAirHeatRecoveryType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlarm\" type=\"ifc:IfcAlarm\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlarm\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlarmType\" type=\"ifc:IfcAlarmType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlarmType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlignment\" type=\"ifc:IfcAlignment\" substitutionGroup=\"ifc:IfcLinearPositioningElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLinearPositioningElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlignmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlignmentCant\" type=\"ifc:IfcAlignmentCant\" substitutionGroup=\"ifc:IfcLinearElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlignmentCant\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLinearElement\">\n\t\t\t\t<xs:attribute name=\"RailHeadDistance\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlignmentCantSegment\" type=\"ifc:IfcAlignmentCantSegment\" substitutionGroup=\"ifc:IfcAlignmentParameterSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlignmentCantSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAlignmentParameterSegment\">\n\t\t\t\t<xs:attribute name=\"StartDistAlong\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"HorizontalLength\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartCantLeft\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndCantLeft\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartCantRight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndCantRight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlignmentCantSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlignmentHorizontal\" type=\"ifc:IfcAlignmentHorizontal\" substitutionGroup=\"ifc:IfcLinearElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlignmentHorizontal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLinearElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlignmentHorizontalSegment\" type=\"ifc:IfcAlignmentHorizontalSegment\" substitutionGroup=\"ifc:IfcAlignmentParameterSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlignmentHorizontalSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAlignmentParameterSegment\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StartPoint\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"StartDirection\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartRadiusOfCurvature\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndRadiusOfCurvature\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SegmentLength\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"GravityCenterLineHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlignmentHorizontalSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlignmentParameterSegment\" type=\"ifc:IfcAlignmentParameterSegment\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlignmentParameterSegment\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"StartTag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndTag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlignmentSegment\" type=\"ifc:IfcAlignmentSegment\" substitutionGroup=\"ifc:IfcLinearElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlignmentSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLinearElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DesignParameters\" type=\"ifc:IfcAlignmentParameterSegment\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlignmentVertical\" type=\"ifc:IfcAlignmentVertical\" substitutionGroup=\"ifc:IfcLinearElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlignmentVertical\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLinearElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlignmentVerticalSegment\" type=\"ifc:IfcAlignmentVerticalSegment\" substitutionGroup=\"ifc:IfcAlignmentParameterSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlignmentVerticalSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAlignmentParameterSegment\">\n\t\t\t\t<xs:attribute name=\"StartDistAlong\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"HorizontalLength\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartHeight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartGradient\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndGradient\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RadiusOfCurvature\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlignmentVerticalSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotation\" type=\"ifc:IfcAnnotation\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAnnotationTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotationFillArea\" type=\"ifc:IfcAnnotationFillArea\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotationFillArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OuterBoundary\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApplication\" type=\"ifc:IfcApplication\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApplication\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ApplicationDeveloper\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Version\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicationFullName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicationIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAppliedValue\" type=\"ifc:IfcAppliedValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAppliedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedValue\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitBasis\" type=\"ifc:IfcMeasureWithUnit\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Components\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicableDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FixedUntilDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Condition\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ArithmeticOperator\" type=\"ifc:IfcArithmeticOperatorEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApproval\" type=\"ifc:IfcApproval\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApproval\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RequestingApproval\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"GivingApproval\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeOfApproval\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Level\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Qualifier\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApprovalRelationship\" type=\"ifc:IfcApprovalRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApprovalRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedApprovals\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcApproval\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryClosedProfileDef\" type=\"ifc:IfcArbitraryClosedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryClosedProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OuterCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryOpenProfileDef\" type=\"ifc:IfcArbitraryOpenProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryOpenProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Curve\" type=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryProfileDefWithVoids\" type=\"ifc:IfcArbitraryProfileDefWithVoids\" substitutionGroup=\"ifc:IfcArbitraryClosedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryProfileDefWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryClosedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerCurves\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAsset\" type=\"ifc:IfcAsset\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAsset\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OriginalValue\" type=\"ifc:IfcCostValue\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CurrentValue\" type=\"ifc:IfcCostValue\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TotalReplacementCost\" type=\"ifc:IfcCostValue\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Owner\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"User\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResponsiblePerson\" type=\"ifc:IfcPerson\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"DepreciatedValue\" type=\"ifc:IfcCostValue\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IncorporationDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAsymmetricIShapeProfileDef\" type=\"ifc:IfcAsymmetricIShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAsymmetricIShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"BottomFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAudioVisualAppliance\" type=\"ifc:IfcAudioVisualAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAudioVisualAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAudioVisualApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAudioVisualApplianceType\" type=\"ifc:IfcAudioVisualApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAudioVisualApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAudioVisualApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis1Placement\" type=\"ifc:IfcAxis1Placement\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis1Placement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis2Placement2D\" type=\"ifc:IfcAxis2Placement2D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis2Placement2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis2Placement3D\" type=\"ifc:IfcAxis2Placement3D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis2Placement3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis2PlacementLinear\" type=\"ifc:IfcAxis2PlacementLinear\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis2PlacementLinear\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineCurve\" type=\"ifc:IfcBSplineCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Degree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveForm\" type=\"ifc:IfcBSplineCurveForm\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ClosedCurve\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineCurveWithKnots\" type=\"ifc:IfcBSplineCurveWithKnots\" substitutionGroup=\"ifc:IfcBSplineCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineCurveWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurve\">\n\t\t\t\t<xs:attribute name=\"KnotMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Knots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"KnotSpec\" type=\"ifc:IfcKnotType\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineSurface\" type=\"ifc:IfcBSplineSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"4\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UDegree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VDegree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SurfaceForm\" type=\"ifc:IfcBSplineSurfaceForm\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UClosed\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VClosed\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineSurfaceWithKnots\" type=\"ifc:IfcBSplineSurfaceWithKnots\" substitutionGroup=\"ifc:IfcBSplineSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineSurfaceWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineSurface\">\n\t\t\t\t<xs:attribute name=\"UMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"VMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"UKnots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"VKnots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"KnotSpec\" type=\"ifc:IfcKnotType\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeam\" type=\"ifc:IfcBeam\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeam\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeamType\" type=\"ifc:IfcBeamType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeamType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBearing\" type=\"ifc:IfcBearing\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBearing\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBearingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBearingType\" type=\"ifc:IfcBearingType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBearingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBearingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBlobTexture\" type=\"ifc:IfcBlobTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBlobTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RasterCode\" type=\"ifc:IfcBinary\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RasterFormat\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBlock\" type=\"ifc:IfcBlock\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBlock\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ZLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoiler\" type=\"ifc:IfcBoiler\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoiler\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoilerType\" type=\"ifc:IfcBoilerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoilerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBooleanClippingResult\" type=\"ifc:IfcBooleanClippingResult\" substitutionGroup=\"ifc:IfcBooleanResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBooleanClippingResult\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBooleanResult\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBooleanResult\" type=\"ifc:IfcBooleanResult\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBooleanResult\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FirstOperand\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondOperand\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Operator\" type=\"ifc:IfcBooleanOperator\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBorehole\" type=\"ifc:IfcBorehole\" substitutionGroup=\"ifc:IfcGeotechnicalAssembly\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBorehole\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeotechnicalAssembly\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryCondition\" type=\"ifc:IfcBoundaryCondition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryCondition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryCurve\" type=\"ifc:IfcBoundaryCurve\" substitutionGroup=\"ifc:IfcCompositeCurveOnSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurveOnSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryEdgeCondition\" type=\"ifc:IfcBoundaryEdgeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryEdgeCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthX\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthY\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthZ\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthX\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthY\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthZ\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryFaceCondition\" type=\"ifc:IfcBoundaryFaceCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryFaceCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaX\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaY\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaZ\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryNodeCondition\" type=\"ifc:IfcBoundaryNodeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryNodeCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessX\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessY\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessZ\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessX\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessY\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessZ\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryNodeConditionWarping\" type=\"ifc:IfcBoundaryNodeConditionWarping\" substitutionGroup=\"ifc:IfcBoundaryNodeCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryNodeConditionWarping\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryNodeCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WarpingStiffness\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcWarpingStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundedCurve\" type=\"ifc:IfcBoundedCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundedCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundedSurface\" type=\"ifc:IfcBoundedSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundedSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundingBox\" type=\"ifc:IfcBoundingBox\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundingBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Corner\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ZDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoxedHalfSpace\" type=\"ifc:IfcBoxedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoxedHalfSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Enclosure\" type=\"ifc:IfcBoundingBox\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBridge\" type=\"ifc:IfcBridge\" substitutionGroup=\"ifc:IfcFacility\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBridge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacility\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBridgeTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBridgePart\" type=\"ifc:IfcBridgePart\" substitutionGroup=\"ifc:IfcFacilityPart\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBridgePart\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacilityPart\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBridgePartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuilding\" type=\"ifc:IfcBuilding\" substitutionGroup=\"ifc:IfcFacility\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuilding\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacility\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BuildingAddress\" type=\"ifc:IfcPostalAddress\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ElevationOfRefHeight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElevationOfTerrain\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementPart\" type=\"ifc:IfcBuildingElementPart\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementPart\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementPartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementPartType\" type=\"ifc:IfcBuildingElementPartType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementPartType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementPartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementProxy\" type=\"ifc:IfcBuildingElementProxy\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementProxy\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementProxyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementProxyType\" type=\"ifc:IfcBuildingElementProxyType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementProxyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementProxyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingStorey\" type=\"ifc:IfcBuildingStorey\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingStorey\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"Elevation\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingSystem\" type=\"ifc:IfcBuildingSystem\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingSystemTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuiltElement\" type=\"ifc:IfcBuiltElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuiltElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuiltElementType\" type=\"ifc:IfcBuiltElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuiltElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuiltSystem\" type=\"ifc:IfcBuiltSystem\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuiltSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuiltSystemTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBurner\" type=\"ifc:IfcBurner\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBurner\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBurnerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBurnerType\" type=\"ifc:IfcBurnerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBurnerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBurnerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCShapeProfileDef\" type=\"ifc:IfcCShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Girth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InternalFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierFitting\" type=\"ifc:IfcCableCarrierFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierFittingType\" type=\"ifc:IfcCableCarrierFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierSegment\" type=\"ifc:IfcCableCarrierSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierSegmentType\" type=\"ifc:IfcCableCarrierSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableFitting\" type=\"ifc:IfcCableFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableFittingType\" type=\"ifc:IfcCableFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableSegment\" type=\"ifc:IfcCableSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableSegmentType\" type=\"ifc:IfcCableSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCaissonFoundation\" type=\"ifc:IfcCaissonFoundation\" substitutionGroup=\"ifc:IfcDeepFoundation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCaissonFoundation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDeepFoundation\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCaissonFoundationTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCaissonFoundationType\" type=\"ifc:IfcCaissonFoundationType\" substitutionGroup=\"ifc:IfcDeepFoundationType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCaissonFoundationType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDeepFoundationType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCaissonFoundationTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPoint\" type=\"ifc:IfcCartesianPoint\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:attribute name=\"Coordinates\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList\" type=\"ifc:IfcCartesianPointList\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList2D\" type=\"ifc:IfcCartesianPointList2D\" substitutionGroup=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianPointList\">\n\t\t\t\t<xs:attribute name=\"CoordList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"TagList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList3D\" type=\"ifc:IfcCartesianPointList3D\" substitutionGroup=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianPointList\">\n\t\t\t\t<xs:attribute name=\"CoordList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"TagList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator\" type=\"ifc:IfcCartesianTransformationOperator\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis1\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Axis2\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"LocalOrigin\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Scale\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator2D\" type=\"ifc:IfcCartesianTransformationOperator2D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator2DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator2DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2DnonUniform\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator2D\">\n\t\t\t\t<xs:attribute name=\"Scale2\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator3D\" type=\"ifc:IfcCartesianTransformationOperator3D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis3\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator3DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator3DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3DnonUniform\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator3D\">\n\t\t\t\t<xs:attribute name=\"Scale2\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scale3\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCenterLineProfileDef\" type=\"ifc:IfcCenterLineProfileDef\" substitutionGroup=\"ifc:IfcArbitraryOpenProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCenterLineProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryOpenProfileDef\">\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChiller\" type=\"ifc:IfcChiller\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChiller\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChillerType\" type=\"ifc:IfcChillerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChillerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChimney\" type=\"ifc:IfcChimney\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChimney\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChimneyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChimneyType\" type=\"ifc:IfcChimneyType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChimneyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChimneyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircle\" type=\"ifc:IfcCircle\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircleHollowProfileDef\" type=\"ifc:IfcCircleHollowProfileDef\" substitutionGroup=\"ifc:IfcCircleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircleHollowProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCircleProfileDef\">\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircleProfileDef\" type=\"ifc:IfcCircleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCivilElement\" type=\"ifc:IfcCivilElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCivilElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCivilElementType\" type=\"ifc:IfcCivilElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCivilElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassification\" type=\"ifc:IfcClassification\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassification\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferenceTokens\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasReferences\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationReference\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Source\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Edition\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EditionDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Specification\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassificationReference\" type=\"ifc:IfcClassificationReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassificationReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasReferences\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationReference\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Sort\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClosedShell\" type=\"ifc:IfcClosedShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClosedShell\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClothoid\" type=\"ifc:IfcClothoid\" substitutionGroup=\"ifc:IfcSpiral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClothoid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpiral\">\n\t\t\t\t<xs:attribute name=\"ClothoidConstant\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoil\" type=\"ifc:IfcCoil\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoil\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoilType\" type=\"ifc:IfcCoilType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoilType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourRgb\" type=\"ifc:IfcColourRgb\" substitutionGroup=\"ifc:IfcColourSpecification\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourRgb\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcColourSpecification\">\n\t\t\t\t<xs:attribute name=\"Red\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Green\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Blue\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourRgbList\" type=\"ifc:IfcColourRgbList\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourRgbList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"ColourList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcNormalisedRatioMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourSpecification\" type=\"ifc:IfcColourSpecification\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourSpecification\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumn\" type=\"ifc:IfcColumn\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumn\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumnType\" type=\"ifc:IfcColumnType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumnType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCommunicationsAppliance\" type=\"ifc:IfcCommunicationsAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCommunicationsAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCommunicationsApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCommunicationsApplianceType\" type=\"ifc:IfcCommunicationsApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCommunicationsApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCommunicationsApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcComplexProperty\" type=\"ifc:IfcComplexProperty\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcComplexProperty\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcComplexPropertyTemplate\" type=\"ifc:IfcComplexPropertyTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcComplexPropertyTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertyTemplates\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyTemplate\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertyTemplate\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcComplexPropertyTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurve\" type=\"ifc:IfcCompositeCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Segments\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSegment\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSegment\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurveOnSurface\" type=\"ifc:IfcCompositeCurveOnSurface\" substitutionGroup=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurveOnSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurveSegment\" type=\"ifc:IfcCompositeCurveSegment\" substitutionGroup=\"ifc:IfcSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurveSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSegment\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeProfileDef\" type=\"ifc:IfcCompositeProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Profiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Label\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompressor\" type=\"ifc:IfcCompressor\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompressor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompressorType\" type=\"ifc:IfcCompressorType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompressorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCondenser\" type=\"ifc:IfcCondenser\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCondenser\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCondenserType\" type=\"ifc:IfcCondenserType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCondenserType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConic\" type=\"ifc:IfcConic\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConic\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectedFaceSet\" type=\"ifc:IfcConnectedFaceSet\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectedFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CfsFaces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFace\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFace\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionCurveGeometry\" type=\"ifc:IfcConnectionCurveGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionCurveGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveOnRelatedElement\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionGeometry\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionPointEccentricity\" type=\"ifc:IfcConnectionPointEccentricity\" substitutionGroup=\"ifc:IfcConnectionPointGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionPointEccentricity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionPointGeometry\">\n\t\t\t\t<xs:attribute name=\"EccentricityInX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EccentricityInY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EccentricityInZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionPointGeometry\" type=\"ifc:IfcConnectionPointGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionPointGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PointOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointOnRelatedElement\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionSurfaceGeometry\" type=\"ifc:IfcConnectionSurfaceGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionSurfaceGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatedElement\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionVolumeGeometry\" type=\"ifc:IfcConnectionVolumeGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionVolumeGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VolumeOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSolidOrShell\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VolumeOnRelatedElement\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSolidOrShell\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstraint\" type=\"ifc:IfcConstraint\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstraint\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CreatingActor\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstraintGrade\" type=\"ifc:IfcConstraintEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstraintSource\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionEquipmentResource\" type=\"ifc:IfcConstructionEquipmentResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionEquipmentResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionEquipmentResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionEquipmentResourceType\" type=\"ifc:IfcConstructionEquipmentResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionEquipmentResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionEquipmentResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionMaterialResource\" type=\"ifc:IfcConstructionMaterialResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionMaterialResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionMaterialResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionMaterialResourceType\" type=\"ifc:IfcConstructionMaterialResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionMaterialResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionMaterialResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionProductResource\" type=\"ifc:IfcConstructionProductResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionProductResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionProductResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionProductResourceType\" type=\"ifc:IfcConstructionProductResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionProductResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionProductResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionResource\" type=\"ifc:IfcConstructionResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Usage\" type=\"ifc:IfcResourceTime\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"BaseCosts\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseQuantity\" type=\"ifc:IfcPhysicalQuantity\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionResourceType\" type=\"ifc:IfcConstructionResourceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionResourceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseCosts\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseQuantity\" type=\"ifc:IfcPhysicalQuantity\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcContext\" type=\"ifc:IfcContext\" abstract=\"true\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcContext\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepresentationContexts\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationContext\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitsInContext\" type=\"ifc:IfcUnitAssignment\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"IsDefinedBy\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDefinesByProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDefinesByProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Declares\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDeclares\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDeclares\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ObjectType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Phase\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcContextDependentUnit\" type=\"ifc:IfcContextDependentUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcContextDependentUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcControl\" type=\"ifc:IfcControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcControl\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcController\" type=\"ifc:IfcController\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcController\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcControllerType\" type=\"ifc:IfcControllerType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcControllerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConversionBasedUnit\" type=\"ifc:IfcConversionBasedUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConversionBasedUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConversionFactor\" type=\"ifc:IfcMeasureWithUnit\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConversionBasedUnitWithOffset\" type=\"ifc:IfcConversionBasedUnitWithOffset\" substitutionGroup=\"ifc:IfcConversionBasedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConversionBasedUnitWithOffset\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConversionBasedUnit\">\n\t\t\t\t<xs:attribute name=\"ConversionOffset\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConveyorSegment\" type=\"ifc:IfcConveyorSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConveyorSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConveyorSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConveyorSegmentType\" type=\"ifc:IfcConveyorSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConveyorSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConveyorSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCooledBeam\" type=\"ifc:IfcCooledBeam\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCooledBeam\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCooledBeamType\" type=\"ifc:IfcCooledBeamType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCooledBeamType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoolingTower\" type=\"ifc:IfcCoolingTower\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoolingTower\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoolingTowerType\" type=\"ifc:IfcCoolingTowerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoolingTowerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoordinateOperation\" type=\"ifc:IfcCoordinateOperation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoordinateOperation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TargetCRS\" type=\"ifc:IfcCoordinateReferenceSystem\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoordinateReferenceSystem\" type=\"ifc:IfcCoordinateReferenceSystem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoordinateReferenceSystem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"GeodeticDatum\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VerticalDatum\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCosineSpiral\" type=\"ifc:IfcCosineSpiral\" substitutionGroup=\"ifc:IfcSpiral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCosineSpiral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpiral\">\n\t\t\t\t<xs:attribute name=\"CosineTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstantTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostItem\" type=\"ifc:IfcCostItem\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CostValues\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCostValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CostQuantities\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCostItemTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostSchedule\" type=\"ifc:IfcCostSchedule\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCostScheduleTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SubmittedOn\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UpdateDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostValue\" type=\"ifc:IfcCostValue\" substitutionGroup=\"ifc:IfcAppliedValue\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCourse\" type=\"ifc:IfcCourse\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCourse\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCourseTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCourseType\" type=\"ifc:IfcCourseType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCourseType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCourseTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCovering\" type=\"ifc:IfcCovering\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCovering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoveringType\" type=\"ifc:IfcCoveringType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoveringType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCrewResource\" type=\"ifc:IfcCrewResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCrewResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCrewResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCrewResourceType\" type=\"ifc:IfcCrewResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCrewResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCrewResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCsgPrimitive3D\" type=\"ifc:IfcCsgPrimitive3D\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCsgPrimitive3D\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCsgSolid\" type=\"ifc:IfcCsgSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCsgSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TreeRootExpression\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCsgSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurrencyRelationship\" type=\"ifc:IfcCurrencyRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurrencyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RateSource\" type=\"ifc:IfcLibraryInformation\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ExchangeRate\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RateDateTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurtainWall\" type=\"ifc:IfcCurtainWall\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurtainWall\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCurtainWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurtainWallType\" type=\"ifc:IfcCurtainWallType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurtainWallType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCurtainWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurve\" type=\"ifc:IfcCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveBoundedPlane\" type=\"ifc:IfcCurveBoundedPlane\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveBoundedPlane\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcPlane\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"OuterBoundary\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveBoundedSurface\" type=\"ifc:IfcCurveBoundedSurface\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveBoundedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Boundaries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBoundaryCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ImplicitOuter\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveSegment\" type=\"ifc:IfcCurveSegment\" substitutionGroup=\"ifc:IfcSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSegment\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Placement\" type=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"SegmentStart\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveMeasureSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SegmentLength\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveMeasureSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ParentCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyle\" type=\"ifc:IfcCurveStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveFont\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveWidth\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveColour\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelOrDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFont\" type=\"ifc:IfcCurveStyleFont\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PatternList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontPattern\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurveStyleFontPattern\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFontAndScaling\" type=\"ifc:IfcCurveStyleFontAndScaling\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFontAndScaling\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveStyleFont\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveFontScaling\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFontPattern\" type=\"ifc:IfcCurveStyleFontPattern\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFontPattern\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"VisibleSegmentLength\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InvisibleSegmentLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCylindricalSurface\" type=\"ifc:IfcCylindricalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCylindricalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDamper\" type=\"ifc:IfcDamper\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDamper\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDamperType\" type=\"ifc:IfcDamperType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDamperType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDeepFoundation\" type=\"ifc:IfcDeepFoundation\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDeepFoundation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDeepFoundationType\" type=\"ifc:IfcDeepFoundationType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDeepFoundationType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedProfileDef\" type=\"ifc:IfcDerivedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Operator\" type=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Label\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedUnit\" type=\"ifc:IfcDerivedUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDerivedUnitElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDerivedUnitElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UnitType\" type=\"ifc:IfcDerivedUnitEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedUnitElement\" type=\"ifc:IfcDerivedUnitElement\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedUnitElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" type=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Exponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDimensionalExponents\" type=\"ifc:IfcDimensionalExponents\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDimensionalExponents\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"LengthExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MassExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectricCurrentExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThermodynamicTemperatureExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AmountOfSubstanceExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LuminousIntensityExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDirection\" type=\"ifc:IfcDirection\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDirection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:attribute name=\"DirectionRatios\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDirectrixCurveSweptAreaSolid\" type=\"ifc:IfcDirectrixCurveSweptAreaSolid\" abstract=\"true\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDirectrixCurveSweptAreaSolid\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"StartParam\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveMeasureSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EndParam\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveMeasureSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDirectrixDerivedReferenceSweptAreaSolid\" type=\"ifc:IfcDirectrixDerivedReferenceSweptAreaSolid\" substitutionGroup=\"ifc:IfcFixedReferenceSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDirectrixDerivedReferenceSweptAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFixedReferenceSweptAreaSolid\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDiscreteAccessory\" type=\"ifc:IfcDiscreteAccessory\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDiscreteAccessory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDiscreteAccessoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDiscreteAccessoryType\" type=\"ifc:IfcDiscreteAccessoryType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDiscreteAccessoryType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDiscreteAccessoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionBoard\" type=\"ifc:IfcDistributionBoard\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionBoard\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionBoardTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionBoardType\" type=\"ifc:IfcDistributionBoardType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionBoardType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionBoardTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionChamberElement\" type=\"ifc:IfcDistributionChamberElement\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionChamberElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionChamberElementType\" type=\"ifc:IfcDistributionChamberElementType\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionChamberElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionCircuit\" type=\"ifc:IfcDistributionCircuit\" substitutionGroup=\"ifc:IfcDistributionSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionCircuit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionSystem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionControlElement\" type=\"ifc:IfcDistributionControlElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionControlElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionControlElementType\" type=\"ifc:IfcDistributionControlElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionControlElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionElement\" type=\"ifc:IfcDistributionElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionElementType\" type=\"ifc:IfcDistributionElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionFlowElement\" type=\"ifc:IfcDistributionFlowElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionFlowElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionFlowElementType\" type=\"ifc:IfcDistributionFlowElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionFlowElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionPort\" type=\"ifc:IfcDistributionPort\" substitutionGroup=\"ifc:IfcPort\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionPort\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPort\">\n\t\t\t\t<xs:attribute name=\"FlowDirection\" type=\"ifc:IfcFlowDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionPortTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SystemType\" type=\"ifc:IfcDistributionSystemEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionSystem\" type=\"ifc:IfcDistributionSystem\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionSystemEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentInformation\" type=\"ifc:IfcDocumentInformation\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentInformation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DocumentOwner\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Editors\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IntendedUse\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scope\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Revision\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastRevisionTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectronicFormat\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValidFrom\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValidUntil\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Confidentiality\" type=\"ifc:IfcDocumentConfidentialityEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcDocumentStatusEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentInformationRelationship\" type=\"ifc:IfcDocumentInformationRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentInformationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingDocument\" type=\"ifc:IfcDocumentInformation\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedDocuments\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDocumentInformation\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RelationshipType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentReference\" type=\"ifc:IfcDocumentReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedDocument\" type=\"ifc:IfcDocumentInformation\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoor\" type=\"ifc:IfcDoor\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDoorTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorTypeOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedOperationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorLiningProperties\" type=\"ifc:IfcDoorLiningProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorLiningProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CasingThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CasingDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorPanelProperties\" type=\"ifc:IfcDoorPanelProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorPanelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PanelDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelOperation\" type=\"ifc:IfcDoorPanelOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelWidth\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcDoorPanelPositionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorType\" type=\"ifc:IfcDoorType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDoorTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorTypeOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedOperationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingPreDefinedColour\" type=\"ifc:IfcDraughtingPreDefinedColour\" substitutionGroup=\"ifc:IfcPreDefinedColour\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedColour\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingPreDefinedCurveFont\" type=\"ifc:IfcDraughtingPreDefinedCurveFont\" substitutionGroup=\"ifc:IfcPreDefinedCurveFont\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedCurveFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctFitting\" type=\"ifc:IfcDuctFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctFittingType\" type=\"ifc:IfcDuctFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSegment\" type=\"ifc:IfcDuctSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSegmentType\" type=\"ifc:IfcDuctSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSilencer\" type=\"ifc:IfcDuctSilencer\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSilencer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSilencerType\" type=\"ifc:IfcDuctSilencerType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSilencerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEarthworksCut\" type=\"ifc:IfcEarthworksCut\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEarthworksCut\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEarthworksCutTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEarthworksElement\" type=\"ifc:IfcEarthworksElement\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEarthworksElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEarthworksFill\" type=\"ifc:IfcEarthworksFill\" substitutionGroup=\"ifc:IfcEarthworksElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEarthworksFill\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEarthworksElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEarthworksFillTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdge\" type=\"ifc:IfcEdge\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeStart\" type=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"EdgeEnd\" type=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdgeCurve\" type=\"ifc:IfcEdgeCurve\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdgeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeGeometry\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdgeLoop\" type=\"ifc:IfcEdgeLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdgeLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricAppliance\" type=\"ifc:IfcElectricAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricApplianceType\" type=\"ifc:IfcElectricApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricDistributionBoard\" type=\"ifc:IfcElectricDistributionBoard\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricDistributionBoard\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricDistributionBoardTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricDistributionBoardType\" type=\"ifc:IfcElectricDistributionBoardType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricDistributionBoardType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricDistributionBoardTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowStorageDevice\" type=\"ifc:IfcElectricFlowStorageDevice\" substitutionGroup=\"ifc:IfcFlowStorageDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowStorageDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowStorageDeviceType\" type=\"ifc:IfcElectricFlowStorageDeviceType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowStorageDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowTreatmentDevice\" type=\"ifc:IfcElectricFlowTreatmentDevice\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowTreatmentDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricFlowTreatmentDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowTreatmentDeviceType\" type=\"ifc:IfcElectricFlowTreatmentDeviceType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowTreatmentDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricFlowTreatmentDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricGenerator\" type=\"ifc:IfcElectricGenerator\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricGenerator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricGeneratorType\" type=\"ifc:IfcElectricGeneratorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricGeneratorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricMotor\" type=\"ifc:IfcElectricMotor\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricMotor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricMotorType\" type=\"ifc:IfcElectricMotorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricMotorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricTimeControl\" type=\"ifc:IfcElectricTimeControl\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricTimeControl\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricTimeControlType\" type=\"ifc:IfcElectricTimeControlType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricTimeControlType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElement\" type=\"ifc:IfcElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProjections\" type=\"ifc:IfcRelProjectsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"?\"/>\n\t\t\t\t\t<xs:element name=\"HasOpenings\" type=\"ifc:IfcRelVoidsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"?\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementAssembly\" type=\"ifc:IfcElementAssembly\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementAssembly\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementAssemblyType\" type=\"ifc:IfcElementAssemblyType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementAssemblyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementComponent\" type=\"ifc:IfcElementComponent\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementComponent\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementComponentType\" type=\"ifc:IfcElementComponentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementComponentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementQuantity\" type=\"ifc:IfcElementQuantity\" substitutionGroup=\"ifc:IfcQuantitySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementQuantity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcQuantitySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Quantities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MethodOfMeasurement\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementType\" type=\"ifc:IfcElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ElementType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementarySurface\" type=\"ifc:IfcElementarySurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementarySurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEllipse\" type=\"ifc:IfcEllipse\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEllipse\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\n\t\t\t\t<xs:attribute name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEllipseProfileDef\" type=\"ifc:IfcEllipseProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEllipseProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEnergyConversionDevice\" type=\"ifc:IfcEnergyConversionDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEnergyConversionDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEnergyConversionDeviceType\" type=\"ifc:IfcEnergyConversionDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEnergyConversionDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEngine\" type=\"ifc:IfcEngine\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEngine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEngineTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEngineType\" type=\"ifc:IfcEngineType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEngineType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEngineTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporativeCooler\" type=\"ifc:IfcEvaporativeCooler\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporativeCooler\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporativeCoolerType\" type=\"ifc:IfcEvaporativeCoolerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporativeCoolerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporator\" type=\"ifc:IfcEvaporator\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporatorType\" type=\"ifc:IfcEvaporatorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvent\" type=\"ifc:IfcEvent\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EventOccurenceTime\" type=\"ifc:IfcEventTime\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEventTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EventTriggerType\" type=\"ifc:IfcEventTriggerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedEventTriggerType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEventTime\" type=\"ifc:IfcEventTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEventTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"ActualDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEventType\" type=\"ifc:IfcEventType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEventType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEventTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EventTriggerType\" type=\"ifc:IfcEventTriggerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedEventTriggerType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtendedProperties\" type=\"ifc:IfcExtendedProperties\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtendedProperties\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Properties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalInformation\" type=\"ifc:IfcExternalInformation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalInformation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalReference\" type=\"ifc:IfcExternalReference\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalReference\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalReferenceRelationship\" type=\"ifc:IfcExternalReferenceRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalReferenceRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingReference\" type=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalSpatialElement\" type=\"ifc:IfcExternalSpatialElement\" substitutionGroup=\"ifc:IfcExternalSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalSpatialElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcExternalSpatialElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalSpatialStructureElement\" type=\"ifc:IfcExternalSpatialStructureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalSpatialStructureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedHatchStyle\" type=\"ifc:IfcExternallyDefinedHatchStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedHatchStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedSurfaceStyle\" type=\"ifc:IfcExternallyDefinedSurfaceStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedSurfaceStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedTextFont\" type=\"ifc:IfcExternallyDefinedTextFont\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedTextFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtrudedAreaSolid\" type=\"ifc:IfcExtrudedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtrudedAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtrudedAreaSolidTapered\" type=\"ifc:IfcExtrudedAreaSolidTapered\" substitutionGroup=\"ifc:IfcExtrudedAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtrudedAreaSolidTapered\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtrudedAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EndSweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFace\" type=\"ifc:IfcFace\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Bounds\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFaceBound\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFaceBound\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceBasedSurfaceModel\" type=\"ifc:IfcFaceBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceBasedSurfaceModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FbsmFaces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectedFaceSet\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcConnectedFaceSet\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceBound\" type=\"ifc:IfcFaceBound\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceBound\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Bound\" type=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Orientation\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceOuterBound\" type=\"ifc:IfcFaceOuterBound\" substitutionGroup=\"ifc:IfcFaceBound\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceOuterBound\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFaceBound\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceSurface\" type=\"ifc:IfcFaceSurface\" substitutionGroup=\"ifc:IfcFace\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFace\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FaceSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacetedBrep\" type=\"ifc:IfcFacetedBrep\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacetedBrep\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacetedBrepWithVoids\" type=\"ifc:IfcFacetedBrepWithVoids\" substitutionGroup=\"ifc:IfcFacetedBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacetedBrepWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacetedBrep\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Voids\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClosedShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacility\" type=\"ifc:IfcFacility\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacility\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacilityPart\" type=\"ifc:IfcFacilityPart\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacilityPart\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"UsageType\" type=\"ifc:IfcFacilityUsageEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacilityPartCommon\" type=\"ifc:IfcFacilityPartCommon\" substitutionGroup=\"ifc:IfcFacilityPart\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacilityPartCommon\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacilityPart\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFacilityPartCommonTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFailureConnectionCondition\" type=\"ifc:IfcFailureConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFailureConnectionCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t<xs:attribute name=\"TensionFailureX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionFailureY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionFailureZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFan\" type=\"ifc:IfcFan\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFan\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFanType\" type=\"ifc:IfcFanType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFanType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFastener\" type=\"ifc:IfcFastener\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFastener\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFastenerType\" type=\"ifc:IfcFastenerType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFastenerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElement\" type=\"ifc:IfcFeatureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElementAddition\" type=\"ifc:IfcFeatureElementAddition\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElementAddition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElementSubtraction\" type=\"ifc:IfcFeatureElementSubtraction\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElementSubtraction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyle\" type=\"ifc:IfcFillAreaStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FillStyles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFillStyleSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelOrDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyleHatching\" type=\"ifc:IfcFillAreaStyleHatching\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyleHatching\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HatchLineAppearance\" type=\"ifc:IfcCurveStyle\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"StartOfNextHatchLine\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcHatchLineDistanceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointOfReferenceHatchLine\" type=\"ifc:IfcCartesianPoint\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"PatternStart\" type=\"ifc:IfcCartesianPoint\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"HatchLineAngle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyleTiles\" type=\"ifc:IfcFillAreaStyleTiles\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyleTiles\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TilingPattern\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\" minOccurs=\"2\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcVector\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Tiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStyledItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStyledItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TilingScale\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFilter\" type=\"ifc:IfcFilter\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFilter\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFilterType\" type=\"ifc:IfcFilterType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFilterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFireSuppressionTerminal\" type=\"ifc:IfcFireSuppressionTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFireSuppressionTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFireSuppressionTerminalType\" type=\"ifc:IfcFireSuppressionTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFireSuppressionTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFixedReferenceSweptAreaSolid\" type=\"ifc:IfcFixedReferenceSweptAreaSolid\" substitutionGroup=\"ifc:IfcDirectrixCurveSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFixedReferenceSweptAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDirectrixCurveSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FixedReference\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowController\" type=\"ifc:IfcFlowController\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowController\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowControllerType\" type=\"ifc:IfcFlowControllerType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowControllerType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowFitting\" type=\"ifc:IfcFlowFitting\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowFittingType\" type=\"ifc:IfcFlowFittingType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowFittingType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowInstrument\" type=\"ifc:IfcFlowInstrument\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowInstrument\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowInstrumentType\" type=\"ifc:IfcFlowInstrumentType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowInstrumentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMeter\" type=\"ifc:IfcFlowMeter\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMeter\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMeterType\" type=\"ifc:IfcFlowMeterType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMeterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMovingDevice\" type=\"ifc:IfcFlowMovingDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMovingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMovingDeviceType\" type=\"ifc:IfcFlowMovingDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMovingDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowSegment\" type=\"ifc:IfcFlowSegment\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowSegmentType\" type=\"ifc:IfcFlowSegmentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowSegmentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowStorageDevice\" type=\"ifc:IfcFlowStorageDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowStorageDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowStorageDeviceType\" type=\"ifc:IfcFlowStorageDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowStorageDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTerminal\" type=\"ifc:IfcFlowTerminal\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTerminalType\" type=\"ifc:IfcFlowTerminalType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTerminalType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTreatmentDevice\" type=\"ifc:IfcFlowTreatmentDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTreatmentDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTreatmentDeviceType\" type=\"ifc:IfcFlowTreatmentDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTreatmentDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFooting\" type=\"ifc:IfcFooting\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFooting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFootingType\" type=\"ifc:IfcFootingType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFootingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnishingElement\" type=\"ifc:IfcFurnishingElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnishingElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnishingElementType\" type=\"ifc:IfcFurnishingElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnishingElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurniture\" type=\"ifc:IfcFurniture\" substitutionGroup=\"ifc:IfcFurnishingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurniture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFurnitureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnitureType\" type=\"ifc:IfcFurnitureType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnitureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\n\t\t\t\t<xs:attribute name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFurnitureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeographicElement\" type=\"ifc:IfcGeographicElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeographicElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGeographicElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeographicElementType\" type=\"ifc:IfcGeographicElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeographicElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGeographicElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricCurveSet\" type=\"ifc:IfcGeometricCurveSet\" substitutionGroup=\"ifc:IfcGeometricSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricCurveSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationContext\" type=\"ifc:IfcGeometricRepresentationContext\" substitutionGroup=\"ifc:IfcRepresentationContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationContext\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WorldCoordinateSystem\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TrueNorth\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"HasSubContexts\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationSubContext\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGeometricRepresentationSubContext\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasCoordinateOperation\" type=\"ifc:IfcCoordinateOperation\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CoordinateSpaceDimension\" type=\"ifc:IfcDimensionCount\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Precision\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationItem\" type=\"ifc:IfcGeometricRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcGeometricRepresentationContext\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasSubContexts\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationSubContext\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGeometricRepresentationSubContext\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasCoordinateOperation\" type=\"ifc:IfcCoordinateOperation\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ContextIdentifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ContextType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationSubContext\" type=\"ifc:IfcGeometricRepresentationSubContext\" substitutionGroup=\"ifc:IfcGeometricRepresentationContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationSubContext-temp\">\n\t\t\t\t<xs:attribute name=\"TargetScale\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TargetView\" type=\"ifc:IfcGeometricProjectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedTargetView\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricSet\" type=\"ifc:IfcGeometricSet\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGeometricSetSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeomodel\" type=\"ifc:IfcGeomodel\" substitutionGroup=\"ifc:IfcGeotechnicalAssembly\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeomodel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeotechnicalAssembly\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeoslice\" type=\"ifc:IfcGeoslice\" substitutionGroup=\"ifc:IfcGeotechnicalAssembly\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeoslice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeotechnicalAssembly\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeotechnicalAssembly\" type=\"ifc:IfcGeotechnicalAssembly\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeotechnicalElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeotechnicalAssembly\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeotechnicalElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeotechnicalElement\" type=\"ifc:IfcGeotechnicalElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeotechnicalElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeotechnicalStratum\" type=\"ifc:IfcGeotechnicalStratum\" substitutionGroup=\"ifc:IfcGeotechnicalElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeotechnicalStratum\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeotechnicalElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGeotechnicalStratumTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGradientCurve\" type=\"ifc:IfcGradientCurve\" substitutionGroup=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGradientCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseCurve\" type=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"EndPoint\" type=\"ifc:IfcPlacement\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGrid\" type=\"ifc:IfcGrid\" substitutionGroup=\"ifc:IfcPositioningElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGrid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPositioningElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WAxes\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGridTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGridAxis\" type=\"ifc:IfcGridAxis\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGridAxis\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"AxisTag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGridPlacement\" type=\"ifc:IfcGridPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGridPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlacementLocation\" type=\"ifc:IfcVirtualGridIntersection\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"PlacementRefDirection\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGridPlacementDirectionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGroup\" type=\"ifc:IfcGroup\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHalfSpaceSolid\" type=\"ifc:IfcHalfSpaceSolid\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHalfSpaceSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"AgreementFlag\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHeatExchanger\" type=\"ifc:IfcHeatExchanger\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHeatExchanger\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHeatExchangerType\" type=\"ifc:IfcHeatExchangerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHeatExchangerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHumidifier\" type=\"ifc:IfcHumidifier\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHumidifier\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHumidifierType\" type=\"ifc:IfcHumidifierType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHumidifierType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIShapeProfileDef\" type=\"ifc:IfcIShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcImageTexture\" type=\"ifc:IfcImageTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcImageTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:attribute name=\"URLReference\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcImpactProtectionDevice\" type=\"ifc:IfcImpactProtectionDevice\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcImpactProtectionDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcImpactProtectionDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcImpactProtectionDeviceType\" type=\"ifc:IfcImpactProtectionDeviceType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcImpactProtectionDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcImpactProtectionDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedColourMap\" type=\"ifc:IfcIndexedColourMap\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedColourMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Colours\" type=\"ifc:IfcColourRgbList\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Opacity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ColourIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolyCurve\" type=\"ifc:IfcIndexedPolyCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolyCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Points\" type=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Segments\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSegmentIndexSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSegmentIndexSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolygonalFace\" type=\"ifc:IfcIndexedPolygonalFace\" substitutionGroup=\"ifc:IfcTessellatedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolygonalFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedItem\">\n\t\t\t\t<xs:attribute name=\"CoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolygonalFaceWithVoids\" type=\"ifc:IfcIndexedPolygonalFaceWithVoids\" substitutionGroup=\"ifc:IfcIndexedPolygonalFace\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolygonalFaceWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcIndexedPolygonalFace\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerCoordIndices\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element name=\"Seq-IfcPositiveInteger-wrapper\" type=\"ifc:Seq-IfcPositiveInteger\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolygonalTextureMap\" type=\"ifc:IfcIndexedPolygonalTextureMap\" substitutionGroup=\"ifc:IfcIndexedTextureMap\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolygonalTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcIndexedTextureMap\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TexCoordIndices\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextureCoordinateIndices\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTextureCoordinateIndices\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedTextureMap\" type=\"ifc:IfcIndexedTextureMap\" abstract=\"true\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedTextureMap\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TexCoords\" type=\"ifc:IfcTextureVertexList\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedTriangleTextureMap\" type=\"ifc:IfcIndexedTriangleTextureMap\" substitutionGroup=\"ifc:IfcIndexedTextureMap\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedTriangleTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcIndexedTextureMap\">\n\t\t\t\t<xs:attribute name=\"TexCoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInterceptor\" type=\"ifc:IfcInterceptor\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInterceptor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInterceptorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInterceptorType\" type=\"ifc:IfcInterceptorType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInterceptorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInterceptorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIntersectionCurve\" type=\"ifc:IfcIntersectionCurve\" substitutionGroup=\"ifc:IfcSurfaceCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIntersectionCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInventory\" type=\"ifc:IfcInventory\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInventory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Jurisdiction\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResponsiblePersons\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPerson\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurrentValue\" type=\"ifc:IfcCostValue\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"OriginalValue\" type=\"ifc:IfcCostValue\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInventoryTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastUpdateDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIrregularTimeSeries\" type=\"ifc:IfcIrregularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIrregularTimeSeries\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIrregularTimeSeriesValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIrregularTimeSeriesValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIrregularTimeSeriesValue\" type=\"ifc:IfcIrregularTimeSeriesValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIrregularTimeSeriesValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TimeStamp\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcJunctionBox\" type=\"ifc:IfcJunctionBox\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcJunctionBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcJunctionBoxType\" type=\"ifc:IfcJunctionBoxType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcJunctionBoxType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcKerb\" type=\"ifc:IfcKerb\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcKerb\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"Mountable\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcKerbType\" type=\"ifc:IfcKerbType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcKerbType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"Mountable\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLShapeProfileDef\" type=\"ifc:IfcLShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LegSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLaborResource\" type=\"ifc:IfcLaborResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLaborResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLaborResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLaborResourceType\" type=\"ifc:IfcLaborResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLaborResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLaborResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLagTime\" type=\"ifc:IfcLagTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLagTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LagValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTimeOrRatioSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"DurationType\" type=\"ifc:IfcTaskDurationEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLamp\" type=\"ifc:IfcLamp\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLamp\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLampType\" type=\"ifc:IfcLampType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLampType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLibraryInformation\" type=\"ifc:IfcLibraryInformation\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLibraryInformation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Publisher\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Version\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VersionDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLibraryReference\" type=\"ifc:IfcLibraryReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLibraryReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedLibrary\" type=\"ifc:IfcLibraryInformation\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Language\" type=\"ifc:IfcLanguageId\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightDistributionData\" type=\"ifc:IfcLightDistributionData\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightDistributionData\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"MainPlaneAngle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondaryPlaneAngle\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPlaneAngleMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"LuminousIntensity\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLuminousIntensityDistributionMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightFixture\" type=\"ifc:IfcLightFixture\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightFixture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightFixtureType\" type=\"ifc:IfcLightFixtureType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightFixtureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightIntensityDistribution\" type=\"ifc:IfcLightIntensityDistribution\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightIntensityDistribution\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DistributionData\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLightDistributionData\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLightDistributionData\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LightDistributionCurve\" type=\"ifc:IfcLightDistributionCurveEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSource\" type=\"ifc:IfcLightSource\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LightColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AmbientIntensity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Intensity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceAmbient\" type=\"ifc:IfcLightSourceAmbient\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceAmbient\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceDirectional\" type=\"ifc:IfcLightSourceDirectional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceDirectional\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceGoniometric\" type=\"ifc:IfcLightSourceGoniometric\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceGoniometric\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ColourAppearance\" type=\"ifc:IfcColourRgb\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"LightDistributionDataSource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ColourTemperature\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LuminousFlux\" type=\"ifc:IfcLuminousFluxMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LightEmissionSource\" type=\"ifc:IfcLightEmissionSourceEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourcePositional\" type=\"ifc:IfcLightSourcePositional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourcePositional\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstantAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DistanceAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"QuadricAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceSpot\" type=\"ifc:IfcLightSourceSpot\" substitutionGroup=\"ifc:IfcLightSourcePositional\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceSpot\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSourcePositional\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ConcentrationExponent\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SpreadAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BeamWidthAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLine\" type=\"ifc:IfcLine\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Pnt\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Dir\" type=\"ifc:IfcVector\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLinearElement\" type=\"ifc:IfcLinearElement\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLinearElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLinearPlacement\" type=\"ifc:IfcLinearPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLinearPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelativePlacement\" type=\"ifc:IfcAxis2PlacementLinear\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CartesianPosition\" type=\"ifc:IfcAxis2Placement3D\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLinearPositioningElement\" type=\"ifc:IfcLinearPositioningElement\" substitutionGroup=\"ifc:IfcPositioningElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLinearPositioningElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPositioningElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLiquidTerminal\" type=\"ifc:IfcLiquidTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLiquidTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLiquidTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLiquidTerminalType\" type=\"ifc:IfcLiquidTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLiquidTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLiquidTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLocalPlacement\" type=\"ifc:IfcLocalPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLocalPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelativePlacement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLoop\" type=\"ifc:IfcLoop\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcManifoldSolidBrep\" type=\"ifc:IfcManifoldSolidBrep\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcManifoldSolidBrep\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Outer\" type=\"ifc:IfcClosedShell\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMapConversion\" type=\"ifc:IfcMapConversion\" substitutionGroup=\"ifc:IfcCoordinateOperation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMapConversion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCoordinateOperation\">\n\t\t\t\t<xs:attribute name=\"Eastings\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Northings\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OrthogonalHeight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"XAxisAbscissa\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"XAxisOrdinate\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scale\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScaleY\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScaleZ\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMappedItem\" type=\"ifc:IfcMappedItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMappedItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MappingSource\" type=\"ifc:IfcRepresentationMap\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"MappingTarget\" type=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMarineFacility\" type=\"ifc:IfcMarineFacility\" substitutionGroup=\"ifc:IfcFacility\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMarineFacility\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacility\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMarineFacilityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMarinePart\" type=\"ifc:IfcMarinePart\" substitutionGroup=\"ifc:IfcFacilityPart\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMarinePart\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacilityPart\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMarinePartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterial\" type=\"ifc:IfcMaterial\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterial\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasRepresentation\" type=\"ifc:IfcMaterialDefinitionRepresentation\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialClassificationRelationship\" type=\"ifc:IfcMaterialClassificationRelationship\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialClassificationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialClassifications\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ClassifiedMaterial\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialConstituent\" type=\"ifc:IfcMaterialConstituent\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialConstituent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Fraction\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialConstituentSet\" type=\"ifc:IfcMaterialConstituentSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialConstituentSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialConstituents\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialConstituent\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialConstituent\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialDefinition\" type=\"ifc:IfcMaterialDefinition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialDefinitionRepresentation\" type=\"ifc:IfcMaterialDefinitionRepresentation\" substitutionGroup=\"ifc:IfcProductRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialDefinitionRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayer\" type=\"ifc:IfcMaterialLayer\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsVentilated\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerSet\" type=\"ifc:IfcMaterialLayerSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialLayers\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialLayer\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerSetName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerSetUsage\" type=\"ifc:IfcMaterialLayerSetUsage\" substitutionGroup=\"ifc:IfcMaterialUsageDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerSetUsage\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialUsageDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForLayerSet\" type=\"ifc:IfcMaterialLayerSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerSetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DirectionSense\" type=\"ifc:IfcDirectionSenseEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OffsetFromReferenceLine\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReferenceExtent\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerWithOffsets\" type=\"ifc:IfcMaterialLayerWithOffsets\" substitutionGroup=\"ifc:IfcMaterialLayer\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerWithOffsets\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialLayer\">\n\t\t\t\t<xs:attribute name=\"OffsetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OffsetValues\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialList\" type=\"ifc:IfcMaterialList\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Materials\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfile\" type=\"ifc:IfcMaterialProfile\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfile\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Profile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSet\" type=\"ifc:IfcMaterialProfileSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialProfiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialProfile\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialProfile\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CompositeProfile\" type=\"ifc:IfcCompositeProfileDef\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSetUsage\" type=\"ifc:IfcMaterialProfileSetUsage\" substitutionGroup=\"ifc:IfcMaterialUsageDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSetUsage\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialUsageDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForProfileSet\" type=\"ifc:IfcMaterialProfileSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CardinalPoint\" type=\"ifc:IfcCardinalPointReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReferenceExtent\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSetUsageTapering\" type=\"ifc:IfcMaterialProfileSetUsageTapering\" substitutionGroup=\"ifc:IfcMaterialProfileSetUsage\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSetUsageTapering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProfileSetUsage\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForProfileEndSet\" type=\"ifc:IfcMaterialProfileSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CardinalEndPoint\" type=\"ifc:IfcCardinalPointReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileWithOffsets\" type=\"ifc:IfcMaterialProfileWithOffsets\" substitutionGroup=\"ifc:IfcMaterialProfile\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileWithOffsets\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProfile\">\n\t\t\t\t<xs:attribute name=\"OffsetValues\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProperties\" type=\"ifc:IfcMaterialProperties\" substitutionGroup=\"ifc:IfcExtendedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtendedProperties\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialRelationship\" type=\"ifc:IfcMaterialRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedMaterials\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MaterialExpression\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialUsageDefinition\" type=\"ifc:IfcMaterialUsageDefinition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialUsageDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMeasureWithUnit\" type=\"ifc:IfcMeasureWithUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMeasureWithUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ValueComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalFastener\" type=\"ifc:IfcMechanicalFastener\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalFastener\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMechanicalFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalFastenerType\" type=\"ifc:IfcMechanicalFastenerType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalFastenerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMechanicalFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMedicalDevice\" type=\"ifc:IfcMedicalDevice\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMedicalDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMedicalDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMedicalDeviceType\" type=\"ifc:IfcMedicalDeviceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMedicalDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMedicalDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMember\" type=\"ifc:IfcMember\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMemberType\" type=\"ifc:IfcMemberType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMemberType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMetric\" type=\"ifc:IfcMetric\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMetric\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DataValue\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencePath\" type=\"ifc:IfcReference\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Benchmark\" type=\"ifc:IfcBenchmarkEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValueSource\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcMirroredProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcDerivedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ParentProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ProfileType\" type=\"ifc:IfcProfileTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProfileName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Label\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMobileTelecommunicationsAppliance\" type=\"ifc:IfcMobileTelecommunicationsAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMobileTelecommunicationsAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMobileTelecommunicationsApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMobileTelecommunicationsApplianceType\" type=\"ifc:IfcMobileTelecommunicationsApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMobileTelecommunicationsApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMobileTelecommunicationsApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMonetaryUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Currency\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMooringDevice\" type=\"ifc:IfcMooringDevice\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMooringDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMooringDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMooringDeviceType\" type=\"ifc:IfcMooringDeviceType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMooringDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMooringDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMotorConnection\" type=\"ifc:IfcMotorConnection\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMotorConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMotorConnectionType\" type=\"ifc:IfcMotorConnectionType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMotorConnectionType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcNamedUnit\" type=\"ifc:IfcNamedUnit\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcNamedUnit\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Dimensions\" type=\"ifc:IfcDimensionalExponents\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UnitType\" type=\"ifc:IfcUnitEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcNavigationElement\" type=\"ifc:IfcNavigationElement\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcNavigationElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcNavigationElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcNavigationElementType\" type=\"ifc:IfcNavigationElementType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcNavigationElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcNavigationElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObject\" type=\"ifc:IfcObject\" abstract=\"true\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObject\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IsDeclaredBy\" type=\"ifc:IfcRelDefinesByObject\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"IsTypedBy\" type=\"ifc:IfcRelDefinesByType\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"IsDefinedBy\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDefinesByProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDefinesByProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ObjectType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjectDefinition\" type=\"ifc:IfcObjectDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjectDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IsNestedBy\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelNests\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelNests\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"IsDecomposedBy\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelAggregates\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelAggregates\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjectPlacement\" type=\"ifc:IfcObjectPlacement\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjectPlacement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlacementRelTo\" type=\"ifc:IfcObjectPlacement\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjective\" type=\"ifc:IfcObjective\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjective\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BenchmarkValues\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcConstraint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LogicalAggregator\" type=\"ifc:IfcLogicalOperatorEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ObjectiveQualifier\" type=\"ifc:IfcObjectiveEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedQualifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOccupant\" type=\"ifc:IfcOccupant\" substitutionGroup=\"ifc:IfcActor\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOccupant\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcActor\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOccupantTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurve\" type=\"ifc:IfcOffsetCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurve2D\" type=\"ifc:IfcOffsetCurve2D\" substitutionGroup=\"ifc:IfcOffsetCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurve2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOffsetCurve\">\n\t\t\t\t<xs:attribute name=\"Distance\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurve3D\" type=\"ifc:IfcOffsetCurve3D\" substitutionGroup=\"ifc:IfcOffsetCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurve3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOffsetCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Distance\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurveByDistances\" type=\"ifc:IfcOffsetCurveByDistances\" substitutionGroup=\"ifc:IfcOffsetCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurveByDistances\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOffsetCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OffsetValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPointByDistanceExpression\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPointByDistanceExpression\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpenCrossProfileDef\" type=\"ifc:IfcOpenCrossProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpenCrossProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OffsetPoint\" type=\"ifc:IfcCartesianPoint\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"HorizontalWidths\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Widths\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcNonNegativeLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Slopes\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPlaneAngleMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Tags\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpenShell\" type=\"ifc:IfcOpenShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpenShell\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpeningElement\" type=\"ifc:IfcOpeningElement\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpeningElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasFillings\" type=\"ifc:IfcRelFillsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"?\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOpeningElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrganization\" type=\"ifc:IfcOrganization\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrganization\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Roles\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Addresses\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAddress\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrganizationRelationship\" type=\"ifc:IfcOrganizationRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrganizationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingOrganization\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedOrganizations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrganization\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcOrientedEdge-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StyledByItem\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStyledItem\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStyledItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrientedEdge\" type=\"ifc:IfcOrientedEdge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrientedEdge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOrientedEdge-temp\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeElement\" type=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Orientation\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOuterBoundaryCurve\" type=\"ifc:IfcOuterBoundaryCurve\" substitutionGroup=\"ifc:IfcBoundaryCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOuterBoundaryCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOutlet\" type=\"ifc:IfcOutlet\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOutlet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOutletType\" type=\"ifc:IfcOutletType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOutletType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOwnerHistory\" type=\"ifc:IfcOwnerHistory\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOwnerHistory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OwningUser\" type=\"ifc:IfcPersonAndOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"OwningApplication\" type=\"ifc:IfcApplication\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"LastModifyingUser\" type=\"ifc:IfcPersonAndOrganization\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"LastModifyingApplication\" type=\"ifc:IfcApplication\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"State\" type=\"ifc:IfcStateEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ChangeAction\" type=\"ifc:IfcChangeActionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastModifiedDate\" type=\"ifc:IfcTimeStamp\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationDate\" type=\"ifc:IfcTimeStamp\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcParameterizedProfileDef\" type=\"ifc:IfcParameterizedProfileDef\" abstract=\"true\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcParameterizedProfileDef\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement2D\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPath\" type=\"ifc:IfcPath\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPath\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPavement\" type=\"ifc:IfcPavement\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPavement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPavementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPavementType\" type=\"ifc:IfcPavementType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPavementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPavementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPcurve\" type=\"ifc:IfcPcurve\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPcurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReferenceCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPerformanceHistory\" type=\"ifc:IfcPerformanceHistory\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPerformanceHistory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"LifeCyclePhase\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPerformanceHistoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPermeableCoveringProperties\" type=\"ifc:IfcPermeableCoveringProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPermeableCoveringProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcPermeableCoveringOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPermit\" type=\"ifc:IfcPermit\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPermit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPermitTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPerson\" type=\"ifc:IfcPerson\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPerson\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Roles\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Addresses\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAddress\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FamilyName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"GivenName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MiddleNames\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PrefixTitles\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"SuffixTitles\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPersonAndOrganization\" type=\"ifc:IfcPersonAndOrganization\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPersonAndOrganization\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ThePerson\" type=\"ifc:IfcPerson\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TheOrganization\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Roles\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalComplexQuantity\" type=\"ifc:IfcPhysicalComplexQuantity\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalComplexQuantity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasQuantities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Discrimination\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Quality\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Usage\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalQuantity\" type=\"ifc:IfcPhysicalQuantity\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalQuantity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalSimpleQuantity\" type=\"ifc:IfcPhysicalSimpleQuantity\" abstract=\"true\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalSimpleQuantity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" type=\"ifc:IfcNamedUnit\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPile\" type=\"ifc:IfcPile\" substitutionGroup=\"ifc:IfcDeepFoundation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPile\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDeepFoundation\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstructionType\" type=\"ifc:IfcPileConstructionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPileType\" type=\"ifc:IfcPileType\" substitutionGroup=\"ifc:IfcDeepFoundationType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPileType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDeepFoundationType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeFitting\" type=\"ifc:IfcPipeFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeFittingType\" type=\"ifc:IfcPipeFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeSegment\" type=\"ifc:IfcPipeSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeSegmentType\" type=\"ifc:IfcPipeSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPixelTexture\" type=\"ifc:IfcPixelTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPixelTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ColourComponents\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Pixel\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcBinary\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlacement\" type=\"ifc:IfcPlacement\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlacement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Location\" type=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlanarBox\" type=\"ifc:IfcPlanarBox\" substitutionGroup=\"ifc:IfcPlanarExtent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlanarBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlanarExtent\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Placement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlanarExtent\" type=\"ifc:IfcPlanarExtent\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlanarExtent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:attribute name=\"SizeInX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SizeInY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlane\" type=\"ifc:IfcPlane\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlane\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlate\" type=\"ifc:IfcPlate\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlateType\" type=\"ifc:IfcPlateType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlateType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPoint\" type=\"ifc:IfcPoint\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPoint\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPointByDistanceExpression\" type=\"ifc:IfcPointByDistanceExpression\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPointByDistanceExpression\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DistanceAlong\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveMeasureSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OffsetLateral\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OffsetVertical\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OffsetLongitudinal\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPointOnCurve\" type=\"ifc:IfcPointOnCurve\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPointOnCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PointParameter\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPointOnSurface\" type=\"ifc:IfcPointOnSurface\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPointOnSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PointParameterU\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PointParameterV\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolyLoop\" type=\"ifc:IfcPolyLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolyLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Polygon\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"3\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolygonalBoundedHalfSpace\" type=\"ifc:IfcPolygonalBoundedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolygonalBoundedHalfSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"PolygonalBoundary\" type=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolygonalFaceSet\" type=\"ifc:IfcPolygonalFaceSet\" substitutionGroup=\"ifc:IfcTessellatedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolygonalFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedFaceSet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Faces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIndexedPolygonalFace\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIndexedPolygonalFace\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Closed\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PnIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolyline\" type=\"ifc:IfcPolyline\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolyline\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Points\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolynomialCurve\" type=\"ifc:IfcPolynomialCurve\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolynomialCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CoefficientsX\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"CoefficientsY\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"CoefficientsZ\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPort\" type=\"ifc:IfcPort\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPort\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPositioningElement\" type=\"ifc:IfcPositioningElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPositioningElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPostalAddress\" type=\"ifc:IfcPostalAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPostalAddress\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AddressLines\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"InternalLocation\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PostalBox\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Town\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Region\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PostalCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Country\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedColour\" type=\"ifc:IfcPreDefinedColour\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedColour\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedCurveFont\" type=\"ifc:IfcPreDefinedCurveFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedCurveFont\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedItem\" type=\"ifc:IfcPreDefinedItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedProperties\" type=\"ifc:IfcPreDefinedProperties\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedProperties\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedPropertySet\" type=\"ifc:IfcPreDefinedPropertySet\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedPropertySet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedTextFont\" type=\"ifc:IfcPreDefinedTextFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedTextFont\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationItem\" type=\"ifc:IfcPresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationLayerAssignment\" type=\"ifc:IfcPresentationLayerAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationLayerAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AssignedItems\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLayeredItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLayeredItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationLayerWithStyle\" type=\"ifc:IfcPresentationLayerWithStyle\" substitutionGroup=\"ifc:IfcPresentationLayerAssignment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationLayerWithStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationLayerAssignment\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LayerStyles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPresentationStyle\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPresentationStyle\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerOn\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LayerFrozen\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LayerBlocked\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationStyle\" type=\"ifc:IfcPresentationStyle\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationStyle\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcedure\" type=\"ifc:IfcProcedure\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcedure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProcedureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcedureType\" type=\"ifc:IfcProcedureType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcedureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProcedureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcess\" type=\"ifc:IfcProcess\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcess\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProduct\" type=\"ifc:IfcProduct\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProduct\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ObjectPlacement\" type=\"ifc:IfcObjectPlacement\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Representation\" type=\"ifc:IfcProductRepresentation\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProductDefinitionShape\" type=\"ifc:IfcProductDefinitionShape\" substitutionGroup=\"ifc:IfcProductRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProductDefinitionShape\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasShapeAspects\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShapeAspect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProductRepresentation\" type=\"ifc:IfcProductRepresentation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProductRepresentation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Representations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentation\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProfileDef\" type=\"ifc:IfcProfileDef\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ProfileType\" type=\"ifc:IfcProfileTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProfileName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProfileProperties\" type=\"ifc:IfcProfileProperties\" substitutionGroup=\"ifc:IfcExtendedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProfileProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtendedProperties\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProject\" type=\"ifc:IfcProject\" substitutionGroup=\"ifc:IfcContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcContext\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectLibrary\" type=\"ifc:IfcProjectLibrary\" substitutionGroup=\"ifc:IfcContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectLibrary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcContext\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectOrder\" type=\"ifc:IfcProjectOrder\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectOrder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProjectOrderTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectedCRS\" type=\"ifc:IfcProjectedCRS\" substitutionGroup=\"ifc:IfcCoordinateReferenceSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectedCRS\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCoordinateReferenceSystem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MapUnit\" type=\"ifc:IfcNamedUnit\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MapProjection\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MapZone\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectionElement\" type=\"ifc:IfcProjectionElement\" substitutionGroup=\"ifc:IfcFeatureElementAddition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectionElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementAddition\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProjectionElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProperty\" type=\"ifc:IfcProperty\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProperty\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Specification\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyAbstraction\" type=\"ifc:IfcPropertyAbstraction\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyAbstraction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyBoundedValue\" type=\"ifc:IfcPropertyBoundedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyBoundedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UpperBoundValue\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LowerBoundValue\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SetPointValue\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyDefinition\" type=\"ifc:IfcPropertyDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyDependencyRelationship\" type=\"ifc:IfcPropertyDependencyRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyDependencyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DependingProperty\" type=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"DependantProperty\" type=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyEnumeratedValue\" type=\"ifc:IfcPropertyEnumeratedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyEnumeratedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EnumerationValues\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EnumerationReference\" type=\"ifc:IfcPropertyEnumeration\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyEnumeration\" type=\"ifc:IfcPropertyEnumeration\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyEnumeration\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyListValue\" type=\"ifc:IfcPropertyListValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyListValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyReferenceValue\" type=\"ifc:IfcPropertyReferenceValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyReferenceValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PropertyReference\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySet\" type=\"ifc:IfcPropertySet\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySetDefinition\" type=\"ifc:IfcPropertySetDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySetDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySetTemplate\" type=\"ifc:IfcPropertySetTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplateDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySetTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplateDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertyTemplates\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyTemplate\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertyTemplate\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcPropertySetTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicableEntity\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySingleValue\" type=\"ifc:IfcPropertySingleValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySingleValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"NominalValue\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTableValue\" type=\"ifc:IfcPropertyTableValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTableValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DefiningValues\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefinedValues\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefiningUnit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefinedUnit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveInterpolation\" type=\"ifc:IfcCurveInterpolationEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTemplate\" type=\"ifc:IfcPropertyTemplate\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyTemplateDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTemplate\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplateDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTemplateDefinition\" type=\"ifc:IfcPropertyTemplateDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTemplateDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDevice\" type=\"ifc:IfcProtectiveDevice\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceTrippingUnit\" type=\"ifc:IfcProtectiveDeviceTrippingUnit\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceTrippingUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceTrippingUnitType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceTrippingUnitType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceType\" type=\"ifc:IfcProtectiveDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPump\" type=\"ifc:IfcPump\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPump\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPumpType\" type=\"ifc:IfcPumpType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPumpType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityArea\" type=\"ifc:IfcQuantityArea\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"AreaValue\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityCount\" type=\"ifc:IfcQuantityCount\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityCount\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"CountValue\" type=\"ifc:IfcCountMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityLength\" type=\"ifc:IfcQuantityLength\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityLength\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"LengthValue\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityNumber\" type=\"ifc:IfcQuantityNumber\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityNumber\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"NumberValue\" type=\"ifc:IfcNumericMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantitySet\" type=\"ifc:IfcQuantitySet\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantitySet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityTime\" type=\"ifc:IfcQuantityTime\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"TimeValue\" type=\"ifc:IfcTimeMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityVolume\" type=\"ifc:IfcQuantityVolume\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityVolume\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"VolumeValue\" type=\"ifc:IfcVolumeMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityWeight\" type=\"ifc:IfcQuantityWeight\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityWeight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"WeightValue\" type=\"ifc:IfcMassMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRail\" type=\"ifc:IfcRail\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRail\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailType\" type=\"ifc:IfcRailType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailing\" type=\"ifc:IfcRailing\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailing\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailingType\" type=\"ifc:IfcRailingType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailway\" type=\"ifc:IfcRailway\" substitutionGroup=\"ifc:IfcFacility\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailway\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacility\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailwayTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailwayPart\" type=\"ifc:IfcRailwayPart\" substitutionGroup=\"ifc:IfcFacilityPart\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailwayPart\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacilityPart\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailwayPartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRamp\" type=\"ifc:IfcRamp\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRamp\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampFlight\" type=\"ifc:IfcRampFlight\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampFlight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampFlightType\" type=\"ifc:IfcRampFlightType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampFlightType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampType\" type=\"ifc:IfcRampType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRationalBSplineCurveWithKnots\" type=\"ifc:IfcRationalBSplineCurveWithKnots\" substitutionGroup=\"ifc:IfcBSplineCurveWithKnots\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRationalBSplineCurveWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurveWithKnots\">\n\t\t\t\t<xs:attribute name=\"WeightsData\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRationalBSplineSurfaceWithKnots\" type=\"ifc:IfcRationalBSplineSurfaceWithKnots\" substitutionGroup=\"ifc:IfcBSplineSurfaceWithKnots\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRationalBSplineSurfaceWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineSurfaceWithKnots\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WeightsData\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\" minOccurs=\"4\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcReal-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangleHollowProfileDef\" type=\"ifc:IfcRectangleHollowProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangleHollowProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InnerFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OuterFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangleProfileDef\" type=\"ifc:IfcRectangleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangularPyramid\" type=\"ifc:IfcRectangularPyramid\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangularPyramid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangularTrimmedSurface\" type=\"ifc:IfcRectangularTrimmedSurface\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangularTrimmedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"U1\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"V1\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"U2\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"V2\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Usense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Vsense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRecurrencePattern\" type=\"ifc:IfcRecurrencePattern\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRecurrencePattern\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TimePeriods\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimePeriod\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTimePeriod\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RecurrenceType\" type=\"ifc:IfcRecurrenceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DayComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcDayInMonthNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"WeekdayComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcDayInWeekNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"MonthComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcMonthInYearNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Position\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Interval\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Occurrences\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReference\" type=\"ifc:IfcReference\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerReference\" type=\"ifc:IfcReference\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TypeIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AttributeIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InstanceName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ListPositions\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReferent\" type=\"ifc:IfcReferent\" substitutionGroup=\"ifc:IfcPositioningElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReferent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPositioningElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReferentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRegularTimeSeries\" type=\"ifc:IfcRegularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRegularTimeSeries\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeriesValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTimeSeriesValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TimeStep\" type=\"ifc:IfcTimeMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcedSoil\" type=\"ifc:IfcReinforcedSoil\" substitutionGroup=\"ifc:IfcEarthworksElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcedSoil\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEarthworksElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcedSoilTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcementBarProperties\" type=\"ifc:IfcReinforcementBarProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcementBarProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:attribute name=\"TotalCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SteelGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EffectiveDepth\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalBarDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarCount\" type=\"ifc:IfcCountMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcementDefinitionProperties\" type=\"ifc:IfcReinforcementDefinitionProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcementDefinitionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReinforcementSectionDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionReinforcementProperties\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSectionReinforcementProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"DefinitionType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingBar\" type=\"ifc:IfcReinforcingBar\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingBar\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingBarTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingBarType\" type=\"ifc:IfcReinforcingBarType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingBarType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BendingParameters\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBendingParameterSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBendingParameterSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingBarTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BendingShapeCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingElement\" type=\"ifc:IfcReinforcingElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"SteelGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingElementType\" type=\"ifc:IfcReinforcingElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingMesh\" type=\"ifc:IfcReinforcingMesh\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingMesh\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"MeshLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingMeshTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingMeshType\" type=\"ifc:IfcReinforcingMeshType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingMeshType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BendingParameters\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBendingParameterSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBendingParameterSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingMeshTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BendingShapeCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAdheresToElement\" type=\"ifc:IfcRelAdheresToElement\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAdheresToElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedSurfaceFeatures\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceFeature\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceFeature\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAggregates\" type=\"ifc:IfcRelAggregates\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAggregates\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssigns\" type=\"ifc:IfcRelAssigns\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssigns\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RelatedObjectsType\" type=\"ifc:IfcObjectTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToActor\" type=\"ifc:IfcRelAssignsToActor\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToActor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingActor\" type=\"ifc:IfcActor\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ActingRole\" type=\"ifc:IfcActorRole\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToControl\" type=\"ifc:IfcRelAssignsToControl\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToControl\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingControl\" type=\"ifc:IfcControl\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToGroup\" type=\"ifc:IfcRelAssignsToGroup\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingGroup\" type=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToGroupByFactor\" type=\"ifc:IfcRelAssignsToGroupByFactor\" substitutionGroup=\"ifc:IfcRelAssignsToGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToGroupByFactor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToGroup\">\n\t\t\t\t<xs:attribute name=\"Factor\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToProcess\" type=\"ifc:IfcRelAssignsToProcess\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToProcess\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcProcessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"QuantityInProcess\" type=\"ifc:IfcMeasureWithUnit\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToProduct\" type=\"ifc:IfcRelAssignsToProduct\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToProduct\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProduct\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcProductSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToResource\" type=\"ifc:IfcRelAssignsToResource\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingResource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociates\" type=\"ifc:IfcRelAssociates\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociates\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinitionSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDefinitionSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesApproval\" type=\"ifc:IfcRelAssociatesApproval\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesApproval\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesClassification\" type=\"ifc:IfcRelAssociatesClassification\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesClassification\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingClassification\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesConstraint\" type=\"ifc:IfcRelAssociatesConstraint\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesConstraint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\" type=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Intent\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesDocument\" type=\"ifc:IfcRelAssociatesDocument\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesDocument\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesLibrary\" type=\"ifc:IfcRelAssociatesLibrary\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesLibrary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingLibrary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLibrarySelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesMaterial\" type=\"ifc:IfcRelAssociatesMaterial\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesMaterial\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMaterialSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesProfileDef\" type=\"ifc:IfcRelAssociatesProfileDef\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProfileDef\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnects\" type=\"ifc:IfcRelConnects\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnects\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsElements\" type=\"ifc:IfcRelConnectsElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPathElements\" type=\"ifc:IfcRelConnectsPathElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPathElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\n\t\t\t\t<xs:attribute name=\"RelatingPriorities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"0\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"RelatedPriorities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"0\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"RelatedConnectionType\" type=\"ifc:IfcConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RelatingConnectionType\" type=\"ifc:IfcConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPortToElement\" type=\"ifc:IfcRelConnectsPortToElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPortToElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPorts\" type=\"ifc:IfcRelConnectsPorts\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPorts\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RealizingElement\" type=\"ifc:IfcElement\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsStructuralActivity\" type=\"ifc:IfcRelConnectsStructuralActivity\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsStructuralActivity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralActivity\" type=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsStructuralMember\" type=\"ifc:IfcRelConnectsStructuralMember\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsStructuralMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingStructuralMember\" type=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralConnection\" type=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" type=\"ifc:IfcBoundaryCondition\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"AdditionalConditions\" type=\"ifc:IfcStructuralConnectionCondition\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ConditionCoordinateSystem\" type=\"ifc:IfcAxis2Placement3D\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SupportedLength\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsWithEccentricity\" type=\"ifc:IfcRelConnectsWithEccentricity\" substitutionGroup=\"ifc:IfcRelConnectsStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsWithEccentricity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConnectionConstraint\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsWithRealizingElements\" type=\"ifc:IfcRelConnectsWithRealizingElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsWithRealizingElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RealizingElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ConnectionType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelContainedInSpatialStructure\" type=\"ifc:IfcRelContainedInSpatialStructure\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelContainedInSpatialStructure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProduct\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelCoversBldgElements\" type=\"ifc:IfcRelCoversBldgElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelCoversBldgElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCovering\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelCoversSpaces\" type=\"ifc:IfcRelCoversSpaces\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelCoversSpaces\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSpace\" type=\"ifc:IfcSpace\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCovering\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDeclares\" type=\"ifc:IfcRelDeclares\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDeclares\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinitionSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDefinitionSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDecomposes\" type=\"ifc:IfcRelDecomposes\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDecomposes\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefines\" type=\"ifc:IfcRelDefines\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefines\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByObject\" type=\"ifc:IfcRelDefinesByObject\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByObject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObject\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByProperties\" type=\"ifc:IfcRelDefinesByProperties\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPropertyDefinition\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPropertySetDefinitionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByTemplate\" type=\"ifc:IfcRelDefinesByTemplate\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedPropertySets\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingTemplate\" type=\"ifc:IfcPropertySetTemplate\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByType\" type=\"ifc:IfcRelDefinesByType\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingType\" type=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelFillsElement\" type=\"ifc:IfcRelFillsElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelFillsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelFlowControlElements\" type=\"ifc:IfcRelFlowControlElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelFlowControlElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedControlElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionControlElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDistributionControlElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingFlowElement\" type=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelInterferesElements\" type=\"ifc:IfcRelInterferesElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelInterferesElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcInterferenceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcInterferenceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"InterferenceGeometry\" type=\"ifc:IfcConnectionGeometry\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InterferenceSpace\" type=\"ifc:IfcSpatialZone\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"InterferenceType\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ImpliedOrder\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelNests\" type=\"ifc:IfcRelNests\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelNests\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelPositions\" type=\"ifc:IfcRelPositions\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelPositions\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPositioningElement\" type=\"ifc:IfcPositioningElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedProducts\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProduct\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelProjectsElement\" type=\"ifc:IfcRelProjectsElement\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelProjectsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedFeatureElement\" type=\"ifc:IfcFeatureElementAddition\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelReferencedInSpatialStructure\" type=\"ifc:IfcRelReferencedInSpatialStructure\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelReferencedInSpatialStructure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpatialReferenceSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSpatialReferenceSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSequence\" type=\"ifc:IfcRelSequence\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSequence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProcess\" type=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedProcess\" type=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TimeLag\" type=\"ifc:IfcLagTime\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SequenceType\" type=\"ifc:IfcSequenceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedSequenceType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelServicesBuildings\" type=\"ifc:IfcRelServicesBuildings\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelServicesBuildings\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSystem\" type=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedBuildings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSpatialElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary\" type=\"ifc:IfcRelSpaceBoundary\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSpace\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpaceBoundarySelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PhysicalOrVirtualBoundary\" type=\"ifc:IfcPhysicalOrVirtualEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InternalOrExternalBoundary\" type=\"ifc:IfcInternalOrExternalEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary1stLevel\" type=\"ifc:IfcRelSpaceBoundary1stLevel\" substitutionGroup=\"ifc:IfcRelSpaceBoundary\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary1stLevel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelSpaceBoundary\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentBoundary\" type=\"ifc:IfcRelSpaceBoundary1stLevel\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary2ndLevel\" type=\"ifc:IfcRelSpaceBoundary2ndLevel\" substitutionGroup=\"ifc:IfcRelSpaceBoundary1stLevel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary2ndLevel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelSpaceBoundary1stLevel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CorrespondingBoundary\" type=\"ifc:IfcRelSpaceBoundary2ndLevel\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelVoidsElement\" type=\"ifc:IfcRelVoidsElement\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelVoidsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedOpeningElement\" type=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelationship\" type=\"ifc:IfcRelationship\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelationship\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReparametrisedCompositeCurveSegment\" type=\"ifc:IfcReparametrisedCompositeCurveSegment\" substitutionGroup=\"ifc:IfcCompositeCurveSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReparametrisedCompositeCurveSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurveSegment\">\n\t\t\t\t<xs:attribute name=\"ParamLength\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentation\" type=\"ifc:IfcRepresentation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContextOfItems\" type=\"ifc:IfcRepresentationContext\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Items\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RepresentationIdentifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RepresentationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationContext\" type=\"ifc:IfcRepresentationContext\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationContext\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"ContextIdentifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ContextType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationItem\" type=\"ifc:IfcRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StyledByItem\" type=\"ifc:IfcStyledItem\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationMap\" type=\"ifc:IfcRepresentationMap\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MappingOrigin\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MappedRepresentation\" type=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResource\" type=\"ifc:IfcResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceApprovalRelationship\" type=\"ifc:IfcResourceApprovalRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceApprovalRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceConstraintRelationship\" type=\"ifc:IfcResourceConstraintRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceConstraintRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\" type=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceLevelRelationship\" type=\"ifc:IfcResourceLevelRelationship\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceLevelRelationship\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceTime\" type=\"ifc:IfcResourceTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"ScheduleWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleContour\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LevelingDelay\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsOverAllocated\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StatusTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Completion\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRevolvedAreaSolid\" type=\"ifc:IfcRevolvedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRevolvedAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcAxis1Placement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Angle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRevolvedAreaSolidTapered\" type=\"ifc:IfcRevolvedAreaSolidTapered\" substitutionGroup=\"ifc:IfcRevolvedAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRevolvedAreaSolidTapered\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRevolvedAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EndSweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRightCircularCone\" type=\"ifc:IfcRightCircularCone\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRightCircularCone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRightCircularCylinder\" type=\"ifc:IfcRightCircularCylinder\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRightCircularCylinder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoad\" type=\"ifc:IfcRoad\" substitutionGroup=\"ifc:IfcFacility\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoad\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacility\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRoadTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoadPart\" type=\"ifc:IfcRoadPart\" substitutionGroup=\"ifc:IfcFacilityPart\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoadPart\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacilityPart\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRoadPartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoof\" type=\"ifc:IfcRoof\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoof\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRoofTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoofType\" type=\"ifc:IfcRoofType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoofType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRoofTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoot\" type=\"ifc:IfcRoot\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoot\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OwnerHistory\" type=\"ifc:IfcOwnerHistory\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"GlobalId\" type=\"ifc:IfcGloballyUniqueId\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoundedRectangleProfileDef\" type=\"ifc:IfcRoundedRectangleProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoundedRectangleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\n\t\t\t\t<xs:attribute name=\"RoundingRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcSIUnit-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:attribute name=\"UnitType\" type=\"ifc:IfcUnitEnum\" use=\"optional\"/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSIUnit\" type=\"ifc:IfcSIUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSIUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSIUnit-temp\">\n\t\t\t\t<xs:attribute name=\"Prefix\" type=\"ifc:IfcSIPrefix\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcSIUnitName\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSanitaryTerminal\" type=\"ifc:IfcSanitaryTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSanitaryTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSanitaryTerminalType\" type=\"ifc:IfcSanitaryTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSanitaryTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSchedulingTime\" type=\"ifc:IfcSchedulingTime\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSchedulingTime\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedDataOrigin\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSeamCurve\" type=\"ifc:IfcSeamCurve\" substitutionGroup=\"ifc:IfcSurfaceCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSeamCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSecondOrderPolynomialSpiral\" type=\"ifc:IfcSecondOrderPolynomialSpiral\" substitutionGroup=\"ifc:IfcSpiral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSecondOrderPolynomialSpiral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpiral\">\n\t\t\t\t<xs:attribute name=\"QuadraticTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstantTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionProperties\" type=\"ifc:IfcSectionProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StartProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"EndProfile\" type=\"ifc:IfcProfileDef\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SectionType\" type=\"ifc:IfcSectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionReinforcementProperties\" type=\"ifc:IfcSectionReinforcementProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionReinforcementProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SectionDefinition\" type=\"ifc:IfcSectionProperties\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CrossSectionReinforcementDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReinforcementBarProperties\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcReinforcementBarProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LongitudinalStartPosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalEndPosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransversePosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReinforcementRole\" type=\"ifc:IfcReinforcingBarRoleEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionedSolid\" type=\"ifc:IfcSectionedSolid\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionedSolid\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CrossSections\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionedSolidHorizontal\" type=\"ifc:IfcSectionedSolidHorizontal\" substitutionGroup=\"ifc:IfcSectionedSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionedSolidHorizontal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSectionedSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CrossSectionPositions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2PlacementLinear\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAxis2PlacementLinear\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionedSpine\" type=\"ifc:IfcSectionedSpine\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionedSpine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SpineCurve\" type=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CrossSections\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CrossSectionPositions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAxis2Placement3D\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionedSurface\" type=\"ifc:IfcSectionedSurface\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CrossSectionPositions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2PlacementLinear\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAxis2PlacementLinear\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CrossSections\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSegment\" type=\"ifc:IfcSegment\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSegment\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:attribute name=\"Transition\" type=\"ifc:IfcTransitionCode\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSegmentedReferenceCurve\" type=\"ifc:IfcSegmentedReferenceCurve\" substitutionGroup=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSegmentedReferenceCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseCurve\" type=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"EndPoint\" type=\"ifc:IfcPlacement\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSensor\" type=\"ifc:IfcSensor\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSensor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSensorType\" type=\"ifc:IfcSensorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSensorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSeventhOrderPolynomialSpiral\" type=\"ifc:IfcSeventhOrderPolynomialSpiral\" substitutionGroup=\"ifc:IfcSpiral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSeventhOrderPolynomialSpiral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpiral\">\n\t\t\t\t<xs:attribute name=\"SepticTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SexticTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"QuinticTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"QuarticTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CubicTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"QuadraticTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstantTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShadingDevice\" type=\"ifc:IfcShadingDevice\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShadingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcShadingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShadingDeviceType\" type=\"ifc:IfcShadingDeviceType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShadingDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcShadingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeAspect\" type=\"ifc:IfcShapeAspect\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeAspect\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeRepresentations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeModel\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShapeModel\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProductDefinitional\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeModel\" type=\"ifc:IfcShapeModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeRepresentation\" type=\"ifc:IfcShapeRepresentation\" substitutionGroup=\"ifc:IfcShapeModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShellBasedSurfaceModel\" type=\"ifc:IfcShellBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShellBasedSurfaceModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SbsmBoundary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSign\" type=\"ifc:IfcSign\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSign\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSignTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSignType\" type=\"ifc:IfcSignType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSignType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSignTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSignal\" type=\"ifc:IfcSignal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSignal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSignalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSignalType\" type=\"ifc:IfcSignalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSignalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSignalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSimpleProperty\" type=\"ifc:IfcSimpleProperty\" abstract=\"true\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSimpleProperty\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProperty\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSimplePropertyTemplate\" type=\"ifc:IfcSimplePropertyTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSimplePropertyTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Enumerators\" type=\"ifc:IfcPropertyEnumeration\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"PrimaryUnit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondaryUnit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcSimplePropertyTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PrimaryMeasureType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondaryMeasureType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AccessState\" type=\"ifc:IfcStateEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSineSpiral\" type=\"ifc:IfcSineSpiral\" substitutionGroup=\"ifc:IfcSpiral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSineSpiral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpiral\">\n\t\t\t\t<xs:attribute name=\"SineTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstantTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSite\" type=\"ifc:IfcSite\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSite\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SiteAddress\" type=\"ifc:IfcPostalAddress\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RefLatitude\" type=\"ifc:IfcCompoundPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RefLongitude\" type=\"ifc:IfcCompoundPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RefElevation\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LandTitleNumber\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlab\" type=\"ifc:IfcSlab\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlab\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlabType\" type=\"ifc:IfcSlabType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlabType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlippageConnectionCondition\" type=\"ifc:IfcSlippageConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlippageConnectionCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t<xs:attribute name=\"SlippageX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SlippageY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SlippageZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolarDevice\" type=\"ifc:IfcSolarDevice\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolarDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSolarDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolarDeviceType\" type=\"ifc:IfcSolarDeviceType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolarDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSolarDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolidModel\" type=\"ifc:IfcSolidModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolidModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpace\" type=\"ifc:IfcSpace\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElevationWithFlooring\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceHeater\" type=\"ifc:IfcSpaceHeater\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceHeater\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceHeaterType\" type=\"ifc:IfcSpaceHeaterType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceHeaterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceType\" type=\"ifc:IfcSpaceType\" substitutionGroup=\"ifc:IfcSpatialStructureElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialElement\" type=\"ifc:IfcSpatialElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContainsElements\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelContainedInSpatialStructure\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelContainedInSpatialStructure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencesElements\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelReferencedInSpatialStructure\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelReferencedInSpatialStructure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialElementType\" type=\"ifc:IfcSpatialElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ElementType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialStructureElement\" type=\"ifc:IfcSpatialStructureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialStructureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\">\n\t\t\t\t<xs:attribute name=\"CompositionType\" type=\"ifc:IfcElementCompositionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialStructureElementType\" type=\"ifc:IfcSpatialStructureElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialStructureElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialZone\" type=\"ifc:IfcSpatialZone\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialZone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpatialZoneTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialZoneType\" type=\"ifc:IfcSpatialZoneType\" substitutionGroup=\"ifc:IfcSpatialElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialZoneType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpatialZoneTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSphere\" type=\"ifc:IfcSphere\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSphere\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSphericalSurface\" type=\"ifc:IfcSphericalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSphericalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpiral\" type=\"ifc:IfcSpiral\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpiral\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStackTerminal\" type=\"ifc:IfcStackTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStackTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStackTerminalType\" type=\"ifc:IfcStackTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStackTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStair\" type=\"ifc:IfcStair\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStair\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairFlight\" type=\"ifc:IfcStairFlight\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairFlight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"NumberOfRisers\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NumberOfTreads\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RiserHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TreadLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairFlightType\" type=\"ifc:IfcStairFlightType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairFlightType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairType\" type=\"ifc:IfcStairType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralAction\" type=\"ifc:IfcStructuralAction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralAction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\">\n\t\t\t\t<xs:attribute name=\"DestabilizingLoad\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralActivity\" type=\"ifc:IfcStructuralActivity\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralActivity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedLoad\" type=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"GlobalOrLocal\" type=\"ifc:IfcGlobalOrLocalEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralAnalysisModel\" type=\"ifc:IfcStructuralAnalysisModel\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralAnalysisModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OrientationOf2DPlane\" type=\"ifc:IfcAxis2Placement3D\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"LoadedBy\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralLoadGroup\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasResults\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralResultGroup\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralResultGroup\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SharedPlacement\" type=\"ifc:IfcObjectPlacement\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAnalysisModelTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralConnection\" type=\"ifc:IfcStructuralConnection\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralConnection\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" type=\"ifc:IfcBoundaryCondition\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralConnectionCondition\" type=\"ifc:IfcStructuralConnectionCondition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralConnectionCondition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveAction\" type=\"ifc:IfcStructuralCurveAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\n\t\t\t\t<xs:attribute name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveConnection\" type=\"ifc:IfcStructuralCurveConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveMember\" type=\"ifc:IfcStructuralCurveMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveMemberVarying\" type=\"ifc:IfcStructuralCurveMemberVarying\" substitutionGroup=\"ifc:IfcStructuralCurveMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveMemberVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveReaction\" type=\"ifc:IfcStructuralCurveReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralItem\" type=\"ifc:IfcStructuralItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLinearAction\" type=\"ifc:IfcStructuralLinearAction\" substitutionGroup=\"ifc:IfcStructuralCurveAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLinearAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoad\" type=\"ifc:IfcStructuralLoad\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoad\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadCase\" type=\"ifc:IfcStructuralLoadCase\" substitutionGroup=\"ifc:IfcStructuralLoadGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadGroup\">\n\t\t\t\t<xs:attribute name=\"SelfWeightCoefficients\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcRatioMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadConfiguration\" type=\"ifc:IfcStructuralLoadConfiguration\" substitutionGroup=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadConfiguration\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadOrResult\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralLoadOrResult\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Locations\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadGroup\" type=\"ifc:IfcStructuralLoadGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLoadGroupTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActionType\" type=\"ifc:IfcActionTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActionSource\" type=\"ifc:IfcActionSourceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Coefficient\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadLinearForce\" type=\"ifc:IfcStructuralLoadLinearForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadLinearForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"LinearForceX\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearForceY\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearForceZ\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentX\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentY\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentZ\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadOrResult\" type=\"ifc:IfcStructuralLoadOrResult\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadOrResult\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadPlanarForce\" type=\"ifc:IfcStructuralLoadPlanarForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadPlanarForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"PlanarForceX\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PlanarForceY\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PlanarForceZ\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacement\" type=\"ifc:IfcStructuralLoadSingleDisplacement\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"DisplacementX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DisplacementY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DisplacementZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRX\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRY\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRZ\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacementDistortion\" type=\"ifc:IfcStructuralLoadSingleDisplacementDistortion\" substitutionGroup=\"ifc:IfcStructuralLoadSingleDisplacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacementDistortion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleDisplacement\">\n\t\t\t\t<xs:attribute name=\"Distortion\" type=\"ifc:IfcCurvatureMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleForce\" type=\"ifc:IfcStructuralLoadSingleForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"ForceX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ForceY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ForceZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentX\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentY\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentZ\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleForceWarping\" type=\"ifc:IfcStructuralLoadSingleForceWarping\" substitutionGroup=\"ifc:IfcStructuralLoadSingleForce\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleForceWarping\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleForce\">\n\t\t\t\t<xs:attribute name=\"WarpingMoment\" type=\"ifc:IfcWarpingMomentMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadStatic\" type=\"ifc:IfcStructuralLoadStatic\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralLoadOrResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadStatic\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadOrResult\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadTemperature\" type=\"ifc:IfcStructuralLoadTemperature\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadTemperature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"DeltaTConstant\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DeltaTY\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DeltaTZ\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralMember\" type=\"ifc:IfcStructuralMember\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralMember\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPlanarAction\" type=\"ifc:IfcStructuralPlanarAction\" substitutionGroup=\"ifc:IfcStructuralSurfaceAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPlanarAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointAction\" type=\"ifc:IfcStructuralPointAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointConnection\" type=\"ifc:IfcStructuralPointConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConditionCoordinateSystem\" type=\"ifc:IfcAxis2Placement3D\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointReaction\" type=\"ifc:IfcStructuralPointReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralReaction\" type=\"ifc:IfcStructuralReaction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralReaction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralResultGroup\" type=\"ifc:IfcStructuralResultGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralResultGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ResultForLoadGroup\" type=\"ifc:IfcStructuralLoadGroup\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TheoryType\" type=\"ifc:IfcAnalysisTheoryTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsLinear\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceAction\" type=\"ifc:IfcStructuralSurfaceAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\n\t\t\t\t<xs:attribute name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceConnection\" type=\"ifc:IfcStructuralSurfaceConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceMember\" type=\"ifc:IfcStructuralSurfaceMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceMemberTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceMemberVarying\" type=\"ifc:IfcStructuralSurfaceMemberVarying\" substitutionGroup=\"ifc:IfcStructuralSurfaceMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceMemberVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceReaction\" type=\"ifc:IfcStructuralSurfaceReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyleModel\" type=\"ifc:IfcStyleModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyleModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyledItem\" type=\"ifc:IfcStyledItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyledItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPresentationStyle\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPresentationStyle\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyledRepresentation\" type=\"ifc:IfcStyledRepresentation\" substitutionGroup=\"ifc:IfcStyleModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyledRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStyleModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubContractResource\" type=\"ifc:IfcSubContractResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubContractResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSubContractResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubContractResourceType\" type=\"ifc:IfcSubContractResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubContractResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSubContractResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubedge\" type=\"ifc:IfcSubedge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubedge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentEdge\" type=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurface\" type=\"ifc:IfcSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceCurve\" type=\"ifc:IfcSurfaceCurve\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Curve3D\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"AssociatedGeometry\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPcurve\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPcurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MasterRepresentation\" type=\"ifc:IfcPreferredSurfaceCurveRepresentation\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceCurveSweptAreaSolid\" type=\"ifc:IfcSurfaceCurveSweptAreaSolid\" substitutionGroup=\"ifc:IfcDirectrixCurveSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceCurveSweptAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDirectrixCurveSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferenceSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceFeature\" type=\"ifc:IfcSurfaceFeature\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceFeature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSurfaceFeatureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceOfLinearExtrusion\" type=\"ifc:IfcSurfaceOfLinearExtrusion\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceOfLinearExtrusion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceOfRevolution\" type=\"ifc:IfcSurfaceOfRevolution\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceOfRevolution\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisPosition\" type=\"ifc:IfcAxis1Placement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceReinforcementArea\" type=\"ifc:IfcSurfaceReinforcementArea\" substitutionGroup=\"ifc:IfcStructuralLoadOrResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceReinforcementArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadOrResult\">\n\t\t\t\t<xs:attribute name=\"SurfaceReinforcement1\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"SurfaceReinforcement2\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"ShearReinforcement\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyle\" type=\"ifc:IfcSurfaceStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\" maxOccurs=\"5\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceStyleElementSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Side\" type=\"ifc:IfcSurfaceSide\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleLighting\" type=\"ifc:IfcSurfaceStyleLighting\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleLighting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"DiffuseReflectionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TransmissionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReflectanceColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleRefraction\" type=\"ifc:IfcSurfaceStyleRefraction\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleRefraction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"RefractionIndex\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DispersionFactor\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleRendering\" type=\"ifc:IfcSurfaceStyleRendering\" substitutionGroup=\"ifc:IfcSurfaceStyleShading\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleRendering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceStyleShading\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DiffuseColour\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TransmissionColour\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReflectionColour\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SpecularColour\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SpecularHighlight\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ReflectanceMethod\" type=\"ifc:IfcReflectanceMethodEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleShading\" type=\"ifc:IfcSurfaceStyleShading\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleShading\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SurfaceColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Transparency\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleWithTextures\" type=\"ifc:IfcSurfaceStyleWithTextures\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleWithTextures\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Textures\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceTexture\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceTexture\" type=\"ifc:IfcSurfaceTexture\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceTexture\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextureTransform\" type=\"ifc:IfcCartesianTransformationOperator2D\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RepeatS\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RepeatT\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Mode\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Parameter\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcIdentifier\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptAreaSolid\" type=\"ifc:IfcSweptAreaSolid\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptAreaSolid\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptDiskSolid\" type=\"ifc:IfcSweptDiskSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptDiskSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InnerRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptDiskSolidPolygonal\" type=\"ifc:IfcSweptDiskSolidPolygonal\" substitutionGroup=\"ifc:IfcSweptDiskSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptDiskSolidPolygonal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptDiskSolid\">\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptSurface\" type=\"ifc:IfcSweptSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SweptCurve\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSwitchingDevice\" type=\"ifc:IfcSwitchingDevice\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSwitchingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSwitchingDeviceType\" type=\"ifc:IfcSwitchingDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSwitchingDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystem\" type=\"ifc:IfcSystem\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystemFurnitureElement\" type=\"ifc:IfcSystemFurnitureElement\" substitutionGroup=\"ifc:IfcFurnishingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystemFurnitureElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSystemFurnitureElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystemFurnitureElementType\" type=\"ifc:IfcSystemFurnitureElementType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystemFurnitureElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSystemFurnitureElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTShapeProfileDef\" type=\"ifc:IfcTShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTable\" type=\"ifc:IfcTable\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTable\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Rows\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableRow\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTableRow\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Columns\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableColumn\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTableColumn\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTableColumn\" type=\"ifc:IfcTableColumn\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTableColumn\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencePath\" type=\"ifc:IfcReference\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTableRow\" type=\"ifc:IfcTableRow\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTableRow\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RowCells\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"IsHeading\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTank\" type=\"ifc:IfcTank\" substitutionGroup=\"ifc:IfcFlowStorageDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTank\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTankType\" type=\"ifc:IfcTankType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTankType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTask\" type=\"ifc:IfcTask\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTask\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TaskTime\" type=\"ifc:IfcTaskTime\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WorkMethod\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsMilestone\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTaskTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskTime\" type=\"ifc:IfcTaskTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"DurationType\" type=\"ifc:IfcTaskDurationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleDuration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FreeFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TotalFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsCritical\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StatusTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualDuration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingTime\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Completion\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskTimeRecurring\" type=\"ifc:IfcTaskTimeRecurring\" substitutionGroup=\"ifc:IfcTaskTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskTimeRecurring\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTaskTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Recurrence\" type=\"ifc:IfcRecurrencePattern\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskType\" type=\"ifc:IfcTaskType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTaskTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WorkMethod\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTelecomAddress\" type=\"ifc:IfcTelecomAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTelecomAddress\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\n\t\t\t\t<xs:attribute name=\"TelephoneNumbers\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"FacsimileNumbers\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PagerNumber\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectronicMailAddresses\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"WWWHomePageURL\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MessagingIDs\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcURIReference\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendon\" type=\"ifc:IfcTendon\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendon\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionForce\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PreStress\" type=\"ifc:IfcPressureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrictionCoefficient\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AnchorageSlip\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MinCurvatureRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonAnchor\" type=\"ifc:IfcTendonAnchor\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonAnchor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonAnchorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonAnchorType\" type=\"ifc:IfcTendonAnchorType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonAnchorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonAnchorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonConduit\" type=\"ifc:IfcTendonConduit\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonConduit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonConduitTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonConduitType\" type=\"ifc:IfcTendonConduitType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonConduitType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonConduitTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonType\" type=\"ifc:IfcTendonType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SheathDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTessellatedFaceSet\" type=\"ifc:IfcTessellatedFaceSet\" abstract=\"true\" substitutionGroup=\"ifc:IfcTessellatedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTessellatedFaceSet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Coordinates\" type=\"ifc:IfcCartesianPointList3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"HasColours\" type=\"ifc:IfcIndexedColourMap\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"HasTextures\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIndexedTextureMap\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIndexedTextureMap\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTessellatedItem\" type=\"ifc:IfcTessellatedItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTessellatedItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextLiteral\" type=\"ifc:IfcTextLiteral\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextLiteral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Placement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Literal\" type=\"ifc:IfcPresentableText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Path\" type=\"ifc:IfcTextPath\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextLiteralWithExtent\" type=\"ifc:IfcTextLiteralWithExtent\" substitutionGroup=\"ifc:IfcTextLiteral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextLiteralWithExtent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextLiteral\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Extent\" type=\"ifc:IfcPlanarExtent\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"BoxAlignment\" type=\"ifc:IfcBoxAlignment\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyle\" type=\"ifc:IfcTextStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextCharacterAppearance\" type=\"ifc:IfcTextStyleForDefinedFont\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TextStyle\" type=\"ifc:IfcTextStyleTextModel\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TextFontStyle\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTextFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelOrDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleFontModel\" type=\"ifc:IfcTextStyleFontModel\" substitutionGroup=\"ifc:IfcPreDefinedTextFont\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleFontModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedTextFont\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FontFamily\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextFontName-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTextFontName-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FontSize\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"FontStyle\" type=\"ifc:IfcFontStyle\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FontVariant\" type=\"ifc:IfcFontVariant\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FontWeight\" type=\"ifc:IfcFontWeight\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleForDefinedFont\" type=\"ifc:IfcTextStyleForDefinedFont\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleForDefinedFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Colour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BackgroundColour\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleTextModel\" type=\"ifc:IfcTextStyleTextModel\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleTextModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextIndent\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LetterSpacing\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WordSpacing\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LineHeight\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TextAlign\" type=\"ifc:IfcTextAlignment\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TextDecoration\" type=\"ifc:IfcTextDecoration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TextTransform\" type=\"ifc:IfcTextTransformation\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinate\" type=\"ifc:IfcTextureCoordinate\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinate\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Maps\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceTexture\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinateGenerator\" type=\"ifc:IfcTextureCoordinateGenerator\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinateGenerator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:attribute name=\"Mode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Parameter\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinateIndices\" type=\"ifc:IfcTextureCoordinateIndices\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinateIndices\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TexCoordsOf\" type=\"ifc:IfcIndexedPolygonalFace\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TexCoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinateIndicesWithVoids\" type=\"ifc:IfcTextureCoordinateIndicesWithVoids\" substitutionGroup=\"ifc:IfcTextureCoordinateIndices\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinateIndicesWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinateIndices\">\n\t\t\t\t<xs:attribute name=\"InnerTexCoordIndices\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureMap\" type=\"ifc:IfcTextureMap\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Vertices\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextureVertex\" minOccurs=\"3\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTextureVertex\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MappedTo\" type=\"ifc:IfcFace\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureVertex\" type=\"ifc:IfcTextureVertex\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureVertex\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Coordinates\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureVertexList\" type=\"ifc:IfcTextureVertexList\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureVertexList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"TexCoordsList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcThirdOrderPolynomialSpiral\" type=\"ifc:IfcThirdOrderPolynomialSpiral\" substitutionGroup=\"ifc:IfcSpiral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcThirdOrderPolynomialSpiral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpiral\">\n\t\t\t\t<xs:attribute name=\"CubicTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"QuadraticTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstantTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimePeriod\" type=\"ifc:IfcTimePeriod\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimePeriod\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndTime\" type=\"ifc:IfcTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimeSeries\" type=\"ifc:IfcTimeSeries\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimeSeries\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeSeriesDataType\" type=\"ifc:IfcTimeSeriesDataTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedDataOrigin\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimeSeriesValue\" type=\"ifc:IfcTimeSeriesValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimeSeriesValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTopologicalRepresentationItem\" type=\"ifc:IfcTopologicalRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTopologicalRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTopologyRepresentation\" type=\"ifc:IfcTopologyRepresentation\" substitutionGroup=\"ifc:IfcShapeModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTopologyRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcToroidalSurface\" type=\"ifc:IfcToroidalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcToroidalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"MajorRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MinorRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrackElement\" type=\"ifc:IfcTrackElement\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrackElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTrackElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrackElementType\" type=\"ifc:IfcTrackElementType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrackElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTrackElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransformer\" type=\"ifc:IfcTransformer\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransformer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransformerType\" type=\"ifc:IfcTransformerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransformerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportElement\" type=\"ifc:IfcTransportElement\" substitutionGroup=\"ifc:IfcTransportationDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTransportationDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportElementType\" type=\"ifc:IfcTransportElementType\" substitutionGroup=\"ifc:IfcTransportationDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTransportationDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportationDevice\" type=\"ifc:IfcTransportationDevice\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportationDevice\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportationDeviceType\" type=\"ifc:IfcTransportationDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportationDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrapeziumProfileDef\" type=\"ifc:IfcTrapeziumProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrapeziumProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"BottomXDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopXDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopXOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTriangulatedFaceSet\" type=\"ifc:IfcTriangulatedFaceSet\" substitutionGroup=\"ifc:IfcTessellatedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTriangulatedFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedFaceSet\">\n\t\t\t\t<xs:attribute name=\"Normals\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Closed\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PnIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTriangulatedIrregularNetwork\" type=\"ifc:IfcTriangulatedIrregularNetwork\" substitutionGroup=\"ifc:IfcTriangulatedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTriangulatedIrregularNetwork\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTriangulatedFaceSet\">\n\t\t\t\t<xs:attribute name=\"Flags\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrimmedCurve\" type=\"ifc:IfcTrimmedCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrimmedCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Trim1\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Trim2\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SenseAgreement\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MasterRepresentation\" type=\"ifc:IfcTrimmingPreference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTubeBundle\" type=\"ifc:IfcTubeBundle\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTubeBundle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTubeBundleType\" type=\"ifc:IfcTubeBundleType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTubeBundleType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeObject\" type=\"ifc:IfcTypeObject\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeObject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertySets\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ApplicableOccurrence\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeProcess\" type=\"ifc:IfcTypeProcess\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeProcess\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProcessType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeProduct\" type=\"ifc:IfcTypeProduct\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeProduct\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepresentationMaps\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationMap\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeResource\" type=\"ifc:IfcTypeResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ResourceType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUShapeProfileDef\" type=\"ifc:IfcUShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitAssignment\" type=\"ifc:IfcUnitAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Units\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryControlElement\" type=\"ifc:IfcUnitaryControlElement\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryControlElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryControlElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryControlElementType\" type=\"ifc:IfcUnitaryControlElementType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryControlElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryControlElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryEquipment\" type=\"ifc:IfcUnitaryEquipment\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryEquipment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryEquipmentType\" type=\"ifc:IfcUnitaryEquipmentType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryEquipmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcValve\" type=\"ifc:IfcValve\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcValve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcValveType\" type=\"ifc:IfcValveType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcValveType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVector\" type=\"ifc:IfcVector\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVector\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Magnitude\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVehicle\" type=\"ifc:IfcVehicle\" substitutionGroup=\"ifc:IfcTransportationDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVehicle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTransportationDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVehicleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVehicleType\" type=\"ifc:IfcVehicleType\" substitutionGroup=\"ifc:IfcTransportationDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVehicleType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTransportationDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVehicleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertex\" type=\"ifc:IfcVertex\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertex\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertexLoop\" type=\"ifc:IfcVertexLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertexLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LoopVertex\" type=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertexPoint\" type=\"ifc:IfcVertexPoint\" substitutionGroup=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertexPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcVertex\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VertexGeometry\" type=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationDamper\" type=\"ifc:IfcVibrationDamper\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationDamper\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVibrationDamperTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationDamperType\" type=\"ifc:IfcVibrationDamperType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationDamperType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVibrationDamperTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationIsolator\" type=\"ifc:IfcVibrationIsolator\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationIsolator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationIsolatorType\" type=\"ifc:IfcVibrationIsolatorType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationIsolatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVirtualElement\" type=\"ifc:IfcVirtualElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVirtualElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVirtualElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVirtualGridIntersection\" type=\"ifc:IfcVirtualGridIntersection\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVirtualGridIntersection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IntersectingAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" minOccurs=\"2\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OffsetDistances\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVoidingFeature\" type=\"ifc:IfcVoidingFeature\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVoidingFeature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVoidingFeatureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWall\" type=\"ifc:IfcWall\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWall\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallStandardCase\" type=\"ifc:IfcWallStandardCase\" substitutionGroup=\"ifc:IfcWall\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWall\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallType\" type=\"ifc:IfcWallType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWasteTerminal\" type=\"ifc:IfcWasteTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWasteTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWasteTerminalType\" type=\"ifc:IfcWasteTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWasteTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindow\" type=\"ifc:IfcWindow\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindow\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWindowTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PartitioningType\" type=\"ifc:IfcWindowTypePartitioningEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPartitioningType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowLiningProperties\" type=\"ifc:IfcWindowLiningProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowLiningProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MullionThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FirstTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FirstMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowPanelProperties\" type=\"ifc:IfcWindowPanelProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowPanelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcWindowPanelOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowType\" type=\"ifc:IfcWindowType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWindowTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PartitioningType\" type=\"ifc:IfcWindowTypePartitioningEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPartitioningType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkCalendar\" type=\"ifc:IfcWorkCalendar\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkCalendar\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WorkingTimes\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcWorkTime\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcWorkTime\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ExceptionTimes\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcWorkTime\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcWorkTime\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkCalendarTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkControl\" type=\"ifc:IfcWorkControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkControl\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Creators\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPerson\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CreationDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Duration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TotalFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FinishTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkPlan\" type=\"ifc:IfcWorkPlan\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkPlan\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkPlanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkSchedule\" type=\"ifc:IfcWorkSchedule\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkScheduleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkTime\" type=\"ifc:IfcWorkTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RecurrencePattern\" type=\"ifc:IfcRecurrencePattern\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"StartDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FinishDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcZShapeProfileDef\" type=\"ifc:IfcZShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcZShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcZone\" type=\"ifc:IfcZone\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcZone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:group name=\"IfcActorSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcAppliedValueSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcAxis2Placement\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcBendingParameterSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcBooleanOperand\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHalfSpaceSolid\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTessellatedFaceSet\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcClassificationReferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcClassificationSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcColour\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcColourOrFactor\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCoordinateReferenceSystemSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCoordinateReferenceSystem\"/>\n\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationContext\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCsgSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveFontOrScaledCurveFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontAndScaling\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveMeasureSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveOnSurface\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCompositeCurveOnSurface\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPcurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveOrEdgeCurve\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEdgeCurve\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveStyleFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDefinitionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDerivedMeasureValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDocumentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcFillStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedHatchStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleHatching\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTiles\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcGeometricSetSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcGridPlacementDirectionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcHatchLineDistanceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcInterferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpatialElement\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLayeredItem\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLibrarySelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLightDistributionDataSourceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLightIntensityDistribution\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMaterialSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialUsageDefinition\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMeasureValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMetricValueSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTable\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfRotationalSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfTranslationalSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcObjectReferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAddress\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTable\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPointOrVertexPoint\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVertexPoint\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProcessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProcess\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeProcess\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProductRepresentationSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProductDefinitionShape\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProductSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProduct\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeProduct\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPropertySetDefinitionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinitionSet-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcResourceObjectSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcActorRole\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\n\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcConversionBasedUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertyAbstraction\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcResourceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcResource\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeResource\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcRotationalStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSegmentIndexSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcArcIndex-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLineIndex-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcShell\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOpenShell\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSimpleValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSizeSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSolidOrShell\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSpaceBoundarySelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternalSpatialElement\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpace\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSpatialReferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcGroup\"/>\n\t\t\t<xs:element ref=\"ifc:IfcProduct\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSpecularHighlightSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcSpecularExponent-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecularRoughness-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcStructuralActivityAssignmentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\n\t\t\t<xs:element ref=\"ifc:IfcStructuralItem\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSurfaceOrFaceSurface\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcFaceBasedSurfaceModel\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFaceSurface\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSurfaceStyleElementSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSurfaceStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleLighting\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleRefraction\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleShading\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleWithTextures\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTextFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedTextFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedTextFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTimeOrRatioSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTranslationalStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTrimmingSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcUnit\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDerivedUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcVectorOrDirection\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcWarpingStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:simpleType name=\"IfcActionRequestTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"email\"/>\n\t\t\t<xs:enumeration value=\"fax\"/>\n\t\t\t<xs:enumeration value=\"phone\"/>\n\t\t\t<xs:enumeration value=\"post\"/>\n\t\t\t<xs:enumeration value=\"verbal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActionSourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"brakes\"/>\n\t\t\t<xs:enumeration value=\"buoyancy\"/>\n\t\t\t<xs:enumeration value=\"completion_g1\"/>\n\t\t\t<xs:enumeration value=\"creep\"/>\n\t\t\t<xs:enumeration value=\"current\"/>\n\t\t\t<xs:enumeration value=\"dead_load_g\"/>\n\t\t\t<xs:enumeration value=\"earthquake_e\"/>\n\t\t\t<xs:enumeration value=\"erection\"/>\n\t\t\t<xs:enumeration value=\"fire\"/>\n\t\t\t<xs:enumeration value=\"ice\"/>\n\t\t\t<xs:enumeration value=\"impact\"/>\n\t\t\t<xs:enumeration value=\"impulse\"/>\n\t\t\t<xs:enumeration value=\"lack_of_fit\"/>\n\t\t\t<xs:enumeration value=\"live_load_q\"/>\n\t\t\t<xs:enumeration value=\"prestressing_p\"/>\n\t\t\t<xs:enumeration value=\"propping\"/>\n\t\t\t<xs:enumeration value=\"rain\"/>\n\t\t\t<xs:enumeration value=\"settlement_u\"/>\n\t\t\t<xs:enumeration value=\"shrinkage\"/>\n\t\t\t<xs:enumeration value=\"snow_s\"/>\n\t\t\t<xs:enumeration value=\"system_imperfection\"/>\n\t\t\t<xs:enumeration value=\"temperature_t\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"wave\"/>\n\t\t\t<xs:enumeration value=\"wind_w\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"extraordinary_a\"/>\n\t\t\t<xs:enumeration value=\"permanent_g\"/>\n\t\t\t<xs:enumeration value=\"variable_q\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActuatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electricactuator\"/>\n\t\t\t<xs:enumeration value=\"handoperatedactuator\"/>\n\t\t\t<xs:enumeration value=\"hydraulicactuator\"/>\n\t\t\t<xs:enumeration value=\"pneumaticactuator\"/>\n\t\t\t<xs:enumeration value=\"thermostaticactuator\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAddressTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"distributionpoint\"/>\n\t\t\t<xs:enumeration value=\"home\"/>\n\t\t\t<xs:enumeration value=\"office\"/>\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirTerminalBoxTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"constantflow\"/>\n\t\t\t<xs:enumeration value=\"variableflowpressuredependant\"/>\n\t\t\t<xs:enumeration value=\"variableflowpressureindependant\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"diffuser\"/>\n\t\t\t<xs:enumeration value=\"grille\"/>\n\t\t\t<xs:enumeration value=\"louvre\"/>\n\t\t\t<xs:enumeration value=\"register\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirToAirHeatRecoveryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fixedplatecounterflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"fixedplatecrossflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"fixedplateparallelflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"heatpipe\"/>\n\t\t\t<xs:enumeration value=\"rotarywheel\"/>\n\t\t\t<xs:enumeration value=\"runaroundcoilloop\"/>\n\t\t\t<xs:enumeration value=\"thermosiphoncoiltypeheatexchangers\"/>\n\t\t\t<xs:enumeration value=\"thermosiphonsealedtubeheatexchangers\"/>\n\t\t\t<xs:enumeration value=\"twintowerenthalpyrecoveryloops\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAlarmTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bell\"/>\n\t\t\t<xs:enumeration value=\"breakglassbutton\"/>\n\t\t\t<xs:enumeration value=\"light\"/>\n\t\t\t<xs:enumeration value=\"manualpullbox\"/>\n\t\t\t<xs:enumeration value=\"railwaycrocodile\"/>\n\t\t\t<xs:enumeration value=\"railwaydetonator\"/>\n\t\t\t<xs:enumeration value=\"siren\"/>\n\t\t\t<xs:enumeration value=\"whistle\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAlignmentCantSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blosscurve\"/>\n\t\t\t<xs:enumeration value=\"constantcant\"/>\n\t\t\t<xs:enumeration value=\"cosinecurve\"/>\n\t\t\t<xs:enumeration value=\"helmertcurve\"/>\n\t\t\t<xs:enumeration value=\"lineartransition\"/>\n\t\t\t<xs:enumeration value=\"sinecurve\"/>\n\t\t\t<xs:enumeration value=\"viennesebend\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAlignmentHorizontalSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blosscurve\"/>\n\t\t\t<xs:enumeration value=\"circulararc\"/>\n\t\t\t<xs:enumeration value=\"clothoid\"/>\n\t\t\t<xs:enumeration value=\"cosinecurve\"/>\n\t\t\t<xs:enumeration value=\"cubic\"/>\n\t\t\t<xs:enumeration value=\"helmertcurve\"/>\n\t\t\t<xs:enumeration value=\"line\"/>\n\t\t\t<xs:enumeration value=\"sinecurve\"/>\n\t\t\t<xs:enumeration value=\"viennesebend\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAlignmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAlignmentVerticalSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"circulararc\"/>\n\t\t\t<xs:enumeration value=\"clothoid\"/>\n\t\t\t<xs:enumeration value=\"constantgradient\"/>\n\t\t\t<xs:enumeration value=\"parabolicarc\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAnalysisModelTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"in_plane_loading_2d\"/>\n\t\t\t<xs:enumeration value=\"loading_3d\"/>\n\t\t\t<xs:enumeration value=\"out_plane_loading_2d\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAnalysisTheoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"first_order_theory\"/>\n\t\t\t<xs:enumeration value=\"full_nonlinear_theory\"/>\n\t\t\t<xs:enumeration value=\"second_order_theory\"/>\n\t\t\t<xs:enumeration value=\"third_order_theory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAnnotationTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"asbuiltarea\"/>\n\t\t\t<xs:enumeration value=\"asbuiltline\"/>\n\t\t\t<xs:enumeration value=\"asbuiltpoint\"/>\n\t\t\t<xs:enumeration value=\"assumedarea\"/>\n\t\t\t<xs:enumeration value=\"assumedline\"/>\n\t\t\t<xs:enumeration value=\"assumedpoint\"/>\n\t\t\t<xs:enumeration value=\"non_physical_signal\"/>\n\t\t\t<xs:enumeration value=\"superelevationevent\"/>\n\t\t\t<xs:enumeration value=\"widthevent\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcArithmeticOperatorEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"add\"/>\n\t\t\t<xs:enumeration value=\"divide\"/>\n\t\t\t<xs:enumeration value=\"multiply\"/>\n\t\t\t<xs:enumeration value=\"subtract\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAssemblyPlaceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"factory\"/>\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAudioVisualApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"amplifier\"/>\n\t\t\t<xs:enumeration value=\"camera\"/>\n\t\t\t<xs:enumeration value=\"communicationterminal\"/>\n\t\t\t<xs:enumeration value=\"display\"/>\n\t\t\t<xs:enumeration value=\"microphone\"/>\n\t\t\t<xs:enumeration value=\"player\"/>\n\t\t\t<xs:enumeration value=\"projector\"/>\n\t\t\t<xs:enumeration value=\"receiver\"/>\n\t\t\t<xs:enumeration value=\"recordingequipment\"/>\n\t\t\t<xs:enumeration value=\"speaker\"/>\n\t\t\t<xs:enumeration value=\"switcher\"/>\n\t\t\t<xs:enumeration value=\"telephone\"/>\n\t\t\t<xs:enumeration value=\"tuner\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBSplineCurveForm\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"circular_arc\"/>\n\t\t\t<xs:enumeration value=\"elliptic_arc\"/>\n\t\t\t<xs:enumeration value=\"hyperbolic_arc\"/>\n\t\t\t<xs:enumeration value=\"parabolic_arc\"/>\n\t\t\t<xs:enumeration value=\"polyline_form\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBSplineSurfaceForm\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"conical_surf\"/>\n\t\t\t<xs:enumeration value=\"cylindrical_surf\"/>\n\t\t\t<xs:enumeration value=\"generalised_cone\"/>\n\t\t\t<xs:enumeration value=\"plane_surf\"/>\n\t\t\t<xs:enumeration value=\"quadric_surf\"/>\n\t\t\t<xs:enumeration value=\"ruled_surf\"/>\n\t\t\t<xs:enumeration value=\"spherical_surf\"/>\n\t\t\t<xs:enumeration value=\"surf_of_linear_extrusion\"/>\n\t\t\t<xs:enumeration value=\"surf_of_revolution\"/>\n\t\t\t<xs:enumeration value=\"toroidal_surf\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBeamTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beam\"/>\n\t\t\t<xs:enumeration value=\"cornice\"/>\n\t\t\t<xs:enumeration value=\"diaphragm\"/>\n\t\t\t<xs:enumeration value=\"edgebeam\"/>\n\t\t\t<xs:enumeration value=\"girder_segment\"/>\n\t\t\t<xs:enumeration value=\"hatstone\"/>\n\t\t\t<xs:enumeration value=\"hollowcore\"/>\n\t\t\t<xs:enumeration value=\"joist\"/>\n\t\t\t<xs:enumeration value=\"lintel\"/>\n\t\t\t<xs:enumeration value=\"piercap\"/>\n\t\t\t<xs:enumeration value=\"spandrel\"/>\n\t\t\t<xs:enumeration value=\"t_beam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBearingTypeDisplacementEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fixed_movement\"/>\n\t\t\t<xs:enumeration value=\"free_movement\"/>\n\t\t\t<xs:enumeration value=\"guided_longitudinal\"/>\n\t\t\t<xs:enumeration value=\"guided_transversal\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBearingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cylindrical\"/>\n\t\t\t<xs:enumeration value=\"disk\"/>\n\t\t\t<xs:enumeration value=\"elastomeric\"/>\n\t\t\t<xs:enumeration value=\"guide\"/>\n\t\t\t<xs:enumeration value=\"pot\"/>\n\t\t\t<xs:enumeration value=\"rocker\"/>\n\t\t\t<xs:enumeration value=\"roller\"/>\n\t\t\t<xs:enumeration value=\"spherical\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBenchmarkEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"equalto\"/>\n\t\t\t<xs:enumeration value=\"greaterthan\"/>\n\t\t\t<xs:enumeration value=\"greaterthanorequalto\"/>\n\t\t\t<xs:enumeration value=\"includedin\"/>\n\t\t\t<xs:enumeration value=\"includes\"/>\n\t\t\t<xs:enumeration value=\"lessthan\"/>\n\t\t\t<xs:enumeration value=\"lessthanorequalto\"/>\n\t\t\t<xs:enumeration value=\"notequalto\"/>\n\t\t\t<xs:enumeration value=\"notincludedin\"/>\n\t\t\t<xs:enumeration value=\"notincludes\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBoilerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"steam\"/>\n\t\t\t<xs:enumeration value=\"water\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBooleanOperator\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"difference\"/>\n\t\t\t<xs:enumeration value=\"intersection\"/>\n\t\t\t<xs:enumeration value=\"union\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBridgePartTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"abutment\"/>\n\t\t\t<xs:enumeration value=\"deck\"/>\n\t\t\t<xs:enumeration value=\"deck_segment\"/>\n\t\t\t<xs:enumeration value=\"foundation\"/>\n\t\t\t<xs:enumeration value=\"pier\"/>\n\t\t\t<xs:enumeration value=\"pier_segment\"/>\n\t\t\t<xs:enumeration value=\"pylon\"/>\n\t\t\t<xs:enumeration value=\"substructure\"/>\n\t\t\t<xs:enumeration value=\"superstructure\"/>\n\t\t\t<xs:enumeration value=\"surfacestructure\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBridgeTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"arched\"/>\n\t\t\t<xs:enumeration value=\"cable_stayed\"/>\n\t\t\t<xs:enumeration value=\"cantilever\"/>\n\t\t\t<xs:enumeration value=\"culvert\"/>\n\t\t\t<xs:enumeration value=\"framework\"/>\n\t\t\t<xs:enumeration value=\"girder\"/>\n\t\t\t<xs:enumeration value=\"suspension\"/>\n\t\t\t<xs:enumeration value=\"truss\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingElementPartTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"apron\"/>\n\t\t\t<xs:enumeration value=\"armourunit\"/>\n\t\t\t<xs:enumeration value=\"insulation\"/>\n\t\t\t<xs:enumeration value=\"precastpanel\"/>\n\t\t\t<xs:enumeration value=\"safetycage\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingElementProxyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"complex\"/>\n\t\t\t<xs:enumeration value=\"element\"/>\n\t\t\t<xs:enumeration value=\"partial\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingSystemTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fenestration\"/>\n\t\t\t<xs:enumeration value=\"foundation\"/>\n\t\t\t<xs:enumeration value=\"loadbearing\"/>\n\t\t\t<xs:enumeration value=\"outershell\"/>\n\t\t\t<xs:enumeration value=\"shading\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuiltSystemTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"erosionprevention\"/>\n\t\t\t<xs:enumeration value=\"fenestration\"/>\n\t\t\t<xs:enumeration value=\"foundation\"/>\n\t\t\t<xs:enumeration value=\"loadbearing\"/>\n\t\t\t<xs:enumeration value=\"mooring\"/>\n\t\t\t<xs:enumeration value=\"outershell\"/>\n\t\t\t<xs:enumeration value=\"prestressing\"/>\n\t\t\t<xs:enumeration value=\"railwayline\"/>\n\t\t\t<xs:enumeration value=\"railwaytrack\"/>\n\t\t\t<xs:enumeration value=\"reinforcing\"/>\n\t\t\t<xs:enumeration value=\"shading\"/>\n\t\t\t<xs:enumeration value=\"trackcircuit\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBurnerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableCarrierFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"cross\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"reducer\"/>\n\t\t\t<xs:enumeration value=\"tee\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableCarrierSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cablebracket\"/>\n\t\t\t<xs:enumeration value=\"cableladdersegment\"/>\n\t\t\t<xs:enumeration value=\"cabletraysegment\"/>\n\t\t\t<xs:enumeration value=\"cabletrunkingsegment\"/>\n\t\t\t<xs:enumeration value=\"catenarywire\"/>\n\t\t\t<xs:enumeration value=\"conduitsegment\"/>\n\t\t\t<xs:enumeration value=\"dropper\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"fanout\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"busbarsegment\"/>\n\t\t\t<xs:enumeration value=\"cablesegment\"/>\n\t\t\t<xs:enumeration value=\"conductorsegment\"/>\n\t\t\t<xs:enumeration value=\"contactwiresegment\"/>\n\t\t\t<xs:enumeration value=\"coresegment\"/>\n\t\t\t<xs:enumeration value=\"fibersegment\"/>\n\t\t\t<xs:enumeration value=\"fibertube\"/>\n\t\t\t<xs:enumeration value=\"opticalcablesegment\"/>\n\t\t\t<xs:enumeration value=\"stitchwire\"/>\n\t\t\t<xs:enumeration value=\"wirepairsegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCaissonFoundationTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"caisson\"/>\n\t\t\t<xs:enumeration value=\"well\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChangeActionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"added\"/>\n\t\t\t<xs:enumeration value=\"deleted\"/>\n\t\t\t<xs:enumeration value=\"modified\"/>\n\t\t\t<xs:enumeration value=\"nochange\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChillerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aircooled\"/>\n\t\t\t<xs:enumeration value=\"heatrecovery\"/>\n\t\t\t<xs:enumeration value=\"watercooled\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChimneyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoilTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dxcoolingcoil\"/>\n\t\t\t<xs:enumeration value=\"electricheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"gasheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"hydroniccoil\"/>\n\t\t\t<xs:enumeration value=\"steamheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"watercoolingcoil\"/>\n\t\t\t<xs:enumeration value=\"waterheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcColumnTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"column\"/>\n\t\t\t<xs:enumeration value=\"pierstem\"/>\n\t\t\t<xs:enumeration value=\"pierstem_segment\"/>\n\t\t\t<xs:enumeration value=\"pilaster\"/>\n\t\t\t<xs:enumeration value=\"standcolumn\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCommunicationsApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"antenna\"/>\n\t\t\t<xs:enumeration value=\"automaton\"/>\n\t\t\t<xs:enumeration value=\"computer\"/>\n\t\t\t<xs:enumeration value=\"fax\"/>\n\t\t\t<xs:enumeration value=\"gateway\"/>\n\t\t\t<xs:enumeration value=\"intelligentperipheral\"/>\n\t\t\t<xs:enumeration value=\"ipnetworkequipment\"/>\n\t\t\t<xs:enumeration value=\"linesideelectronicunit\"/>\n\t\t\t<xs:enumeration value=\"modem\"/>\n\t\t\t<xs:enumeration value=\"networkappliance\"/>\n\t\t\t<xs:enumeration value=\"networkbridge\"/>\n\t\t\t<xs:enumeration value=\"networkhub\"/>\n\t\t\t<xs:enumeration value=\"opticallineterminal\"/>\n\t\t\t<xs:enumeration value=\"opticalnetworkunit\"/>\n\t\t\t<xs:enumeration value=\"printer\"/>\n\t\t\t<xs:enumeration value=\"radioblockcenter\"/>\n\t\t\t<xs:enumeration value=\"repeater\"/>\n\t\t\t<xs:enumeration value=\"router\"/>\n\t\t\t<xs:enumeration value=\"scanner\"/>\n\t\t\t<xs:enumeration value=\"telecommand\"/>\n\t\t\t<xs:enumeration value=\"telephonyexchange\"/>\n\t\t\t<xs:enumeration value=\"transitioncomponent\"/>\n\t\t\t<xs:enumeration value=\"transponder\"/>\n\t\t\t<xs:enumeration value=\"transportequipment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcComplexPropertyTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"p_complex\"/>\n\t\t\t<xs:enumeration value=\"q_complex\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCompressorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"booster\"/>\n\t\t\t<xs:enumeration value=\"dynamic\"/>\n\t\t\t<xs:enumeration value=\"hermetic\"/>\n\t\t\t<xs:enumeration value=\"opentype\"/>\n\t\t\t<xs:enumeration value=\"reciprocating\"/>\n\t\t\t<xs:enumeration value=\"rollingpiston\"/>\n\t\t\t<xs:enumeration value=\"rotary\"/>\n\t\t\t<xs:enumeration value=\"rotaryvane\"/>\n\t\t\t<xs:enumeration value=\"scroll\"/>\n\t\t\t<xs:enumeration value=\"semihermetic\"/>\n\t\t\t<xs:enumeration value=\"singlescrew\"/>\n\t\t\t<xs:enumeration value=\"singlestage\"/>\n\t\t\t<xs:enumeration value=\"trochoidal\"/>\n\t\t\t<xs:enumeration value=\"twinscrew\"/>\n\t\t\t<xs:enumeration value=\"weldedshellhermetic\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCondenserTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aircooled\"/>\n\t\t\t<xs:enumeration value=\"evaporativecooled\"/>\n\t\t\t<xs:enumeration value=\"watercooled\"/>\n\t\t\t<xs:enumeration value=\"watercooledbrazedplate\"/>\n\t\t\t<xs:enumeration value=\"watercooledshellcoil\"/>\n\t\t\t<xs:enumeration value=\"watercooledshelltube\"/>\n\t\t\t<xs:enumeration value=\"watercooledtubeintube\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConnectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"atend\"/>\n\t\t\t<xs:enumeration value=\"atpath\"/>\n\t\t\t<xs:enumeration value=\"atstart\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstraintEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"advisory\"/>\n\t\t\t<xs:enumeration value=\"hard\"/>\n\t\t\t<xs:enumeration value=\"soft\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionEquipmentResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"demolishing\"/>\n\t\t\t<xs:enumeration value=\"earthmoving\"/>\n\t\t\t<xs:enumeration value=\"erecting\"/>\n\t\t\t<xs:enumeration value=\"heating\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"paving\"/>\n\t\t\t<xs:enumeration value=\"pumping\"/>\n\t\t\t<xs:enumeration value=\"transporting\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionMaterialResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aggregates\"/>\n\t\t\t<xs:enumeration value=\"concrete\"/>\n\t\t\t<xs:enumeration value=\"drywall\"/>\n\t\t\t<xs:enumeration value=\"fuel\"/>\n\t\t\t<xs:enumeration value=\"gypsum\"/>\n\t\t\t<xs:enumeration value=\"masonry\"/>\n\t\t\t<xs:enumeration value=\"metal\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionProductResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assembly\"/>\n\t\t\t<xs:enumeration value=\"formwork\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcControllerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floating\"/>\n\t\t\t<xs:enumeration value=\"multiposition\"/>\n\t\t\t<xs:enumeration value=\"programmable\"/>\n\t\t\t<xs:enumeration value=\"proportional\"/>\n\t\t\t<xs:enumeration value=\"twoposition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConveyorSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beltconveyor\"/>\n\t\t\t<xs:enumeration value=\"bucketconveyor\"/>\n\t\t\t<xs:enumeration value=\"chuteconveyor\"/>\n\t\t\t<xs:enumeration value=\"screwconveyor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCooledBeamTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"active\"/>\n\t\t\t<xs:enumeration value=\"passive\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoolingTowerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"mechanicalforceddraft\"/>\n\t\t\t<xs:enumeration value=\"mechanicalinduceddraft\"/>\n\t\t\t<xs:enumeration value=\"naturaldraft\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCostItemTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCostScheduleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"budget\"/>\n\t\t\t<xs:enumeration value=\"costplan\"/>\n\t\t\t<xs:enumeration value=\"estimate\"/>\n\t\t\t<xs:enumeration value=\"pricedbillofquantities\"/>\n\t\t\t<xs:enumeration value=\"scheduleofrates\"/>\n\t\t\t<xs:enumeration value=\"tender\"/>\n\t\t\t<xs:enumeration value=\"unpricedbillofquantities\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCourseTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"armour\"/>\n\t\t\t<xs:enumeration value=\"ballastbed\"/>\n\t\t\t<xs:enumeration value=\"core\"/>\n\t\t\t<xs:enumeration value=\"filter\"/>\n\t\t\t<xs:enumeration value=\"pavement\"/>\n\t\t\t<xs:enumeration value=\"protection\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoveringTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ceiling\"/>\n\t\t\t<xs:enumeration value=\"cladding\"/>\n\t\t\t<xs:enumeration value=\"coping\"/>\n\t\t\t<xs:enumeration value=\"flooring\"/>\n\t\t\t<xs:enumeration value=\"insulation\"/>\n\t\t\t<xs:enumeration value=\"membrane\"/>\n\t\t\t<xs:enumeration value=\"molding\"/>\n\t\t\t<xs:enumeration value=\"roofing\"/>\n\t\t\t<xs:enumeration value=\"skirtingboard\"/>\n\t\t\t<xs:enumeration value=\"sleeving\"/>\n\t\t\t<xs:enumeration value=\"topping\"/>\n\t\t\t<xs:enumeration value=\"wrapping\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCrewResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"office\"/>\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurtainWallTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurveInterpolationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"linear\"/>\n\t\t\t<xs:enumeration value=\"log_linear\"/>\n\t\t\t<xs:enumeration value=\"log_log\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDamperTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"backdraftdamper\"/>\n\t\t\t<xs:enumeration value=\"balancingdamper\"/>\n\t\t\t<xs:enumeration value=\"blastdamper\"/>\n\t\t\t<xs:enumeration value=\"controldamper\"/>\n\t\t\t<xs:enumeration value=\"firedamper\"/>\n\t\t\t<xs:enumeration value=\"firesmokedamper\"/>\n\t\t\t<xs:enumeration value=\"fumehoodexhaust\"/>\n\t\t\t<xs:enumeration value=\"gravitydamper\"/>\n\t\t\t<xs:enumeration value=\"gravityreliefdamper\"/>\n\t\t\t<xs:enumeration value=\"reliefdamper\"/>\n\t\t\t<xs:enumeration value=\"smokedamper\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDataOriginEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"measured\"/>\n\t\t\t<xs:enumeration value=\"predicted\"/>\n\t\t\t<xs:enumeration value=\"simulated\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDerivedUnitEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"accelerationunit\"/>\n\t\t\t<xs:enumeration value=\"angularvelocityunit\"/>\n\t\t\t<xs:enumeration value=\"areadensityunit\"/>\n\t\t\t<xs:enumeration value=\"compoundplaneangleunit\"/>\n\t\t\t<xs:enumeration value=\"curvatureunit\"/>\n\t\t\t<xs:enumeration value=\"dynamicviscosityunit\"/>\n\t\t\t<xs:enumeration value=\"heatfluxdensityunit\"/>\n\t\t\t<xs:enumeration value=\"heatingvalueunit\"/>\n\t\t\t<xs:enumeration value=\"integercountrateunit\"/>\n\t\t\t<xs:enumeration value=\"ionconcentrationunit\"/>\n\t\t\t<xs:enumeration value=\"isothermalmoisturecapacityunit\"/>\n\t\t\t<xs:enumeration value=\"kinematicviscosityunit\"/>\n\t\t\t<xs:enumeration value=\"linearforceunit\"/>\n\t\t\t<xs:enumeration value=\"linearmomentunit\"/>\n\t\t\t<xs:enumeration value=\"linearstiffnessunit\"/>\n\t\t\t<xs:enumeration value=\"linearvelocityunit\"/>\n\t\t\t<xs:enumeration value=\"luminousintensitydistributionunit\"/>\n\t\t\t<xs:enumeration value=\"massdensityunit\"/>\n\t\t\t<xs:enumeration value=\"massflowrateunit\"/>\n\t\t\t<xs:enumeration value=\"massperlengthunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofelasticityunit\"/>\n\t\t\t<xs:enumeration value=\"modulusoflinearsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofrotationalsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"moisturediffusivityunit\"/>\n\t\t\t<xs:enumeration value=\"molecularweightunit\"/>\n\t\t\t<xs:enumeration value=\"momentofinertiaunit\"/>\n\t\t\t<xs:enumeration value=\"phunit\"/>\n\t\t\t<xs:enumeration value=\"planarforceunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalfrequencyunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalmassunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalstiffnessunit\"/>\n\t\t\t<xs:enumeration value=\"sectionareaintegralunit\"/>\n\t\t\t<xs:enumeration value=\"sectionmodulusunit\"/>\n\t\t\t<xs:enumeration value=\"shearmodulusunit\"/>\n\t\t\t<xs:enumeration value=\"soundpowerlevelunit\"/>\n\t\t\t<xs:enumeration value=\"soundpowerunit\"/>\n\t\t\t<xs:enumeration value=\"soundpressurelevelunit\"/>\n\t\t\t<xs:enumeration value=\"soundpressureunit\"/>\n\t\t\t<xs:enumeration value=\"specificheatcapacityunit\"/>\n\t\t\t<xs:enumeration value=\"temperaturegradientunit\"/>\n\t\t\t<xs:enumeration value=\"temperaturerateofchangeunit\"/>\n\t\t\t<xs:enumeration value=\"thermaladmittanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermalconductanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermalexpansioncoefficientunit\"/>\n\t\t\t<xs:enumeration value=\"thermalresistanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermaltransmittanceunit\"/>\n\t\t\t<xs:enumeration value=\"torqueunit\"/>\n\t\t\t<xs:enumeration value=\"vaporpermeabilityunit\"/>\n\t\t\t<xs:enumeration value=\"volumetricflowrateunit\"/>\n\t\t\t<xs:enumeration value=\"warpingconstantunit\"/>\n\t\t\t<xs:enumeration value=\"warpingmomentunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDirectionSenseEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"negative\"/>\n\t\t\t<xs:enumeration value=\"positive\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDiscreteAccessoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchorplate\"/>\n\t\t\t<xs:enumeration value=\"birdprotection\"/>\n\t\t\t<xs:enumeration value=\"bracket\"/>\n\t\t\t<xs:enumeration value=\"cablearranger\"/>\n\t\t\t<xs:enumeration value=\"elastic_cushion\"/>\n\t\t\t<xs:enumeration value=\"expansion_joint_device\"/>\n\t\t\t<xs:enumeration value=\"filler\"/>\n\t\t\t<xs:enumeration value=\"flashing\"/>\n\t\t\t<xs:enumeration value=\"insulator\"/>\n\t\t\t<xs:enumeration value=\"lock\"/>\n\t\t\t<xs:enumeration value=\"panel_strengthening\"/>\n\t\t\t<xs:enumeration value=\"pointmachinemountingdevice\"/>\n\t\t\t<xs:enumeration value=\"point_machine_locking_device\"/>\n\t\t\t<xs:enumeration value=\"railbrace\"/>\n\t\t\t<xs:enumeration value=\"railpad\"/>\n\t\t\t<xs:enumeration value=\"rail_lubrication\"/>\n\t\t\t<xs:enumeration value=\"rail_mechanical_equipment\"/>\n\t\t\t<xs:enumeration value=\"shoe\"/>\n\t\t\t<xs:enumeration value=\"slidingchair\"/>\n\t\t\t<xs:enumeration value=\"soundabsorption\"/>\n\t\t\t<xs:enumeration value=\"tensioningequipment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionBoardTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"consumerunit\"/>\n\t\t\t<xs:enumeration value=\"dispatchingboard\"/>\n\t\t\t<xs:enumeration value=\"distributionboard\"/>\n\t\t\t<xs:enumeration value=\"distributionframe\"/>\n\t\t\t<xs:enumeration value=\"motorcontrolcentre\"/>\n\t\t\t<xs:enumeration value=\"switchboard\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionChamberElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"formedduct\"/>\n\t\t\t<xs:enumeration value=\"inspectionchamber\"/>\n\t\t\t<xs:enumeration value=\"inspectionpit\"/>\n\t\t\t<xs:enumeration value=\"manhole\"/>\n\t\t\t<xs:enumeration value=\"meterchamber\"/>\n\t\t\t<xs:enumeration value=\"sump\"/>\n\t\t\t<xs:enumeration value=\"trench\"/>\n\t\t\t<xs:enumeration value=\"valvechamber\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionPortTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cable\"/>\n\t\t\t<xs:enumeration value=\"cablecarrier\"/>\n\t\t\t<xs:enumeration value=\"duct\"/>\n\t\t\t<xs:enumeration value=\"pipe\"/>\n\t\t\t<xs:enumeration value=\"wireless\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionSystemEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airconditioning\"/>\n\t\t\t<xs:enumeration value=\"audiovisual\"/>\n\t\t\t<xs:enumeration value=\"catenary_system\"/>\n\t\t\t<xs:enumeration value=\"chemical\"/>\n\t\t\t<xs:enumeration value=\"chilledwater\"/>\n\t\t\t<xs:enumeration value=\"communication\"/>\n\t\t\t<xs:enumeration value=\"compressedair\"/>\n\t\t\t<xs:enumeration value=\"condenserwater\"/>\n\t\t\t<xs:enumeration value=\"control\"/>\n\t\t\t<xs:enumeration value=\"conveying\"/>\n\t\t\t<xs:enumeration value=\"data\"/>\n\t\t\t<xs:enumeration value=\"disposal\"/>\n\t\t\t<xs:enumeration value=\"domesticcoldwater\"/>\n\t\t\t<xs:enumeration value=\"domestichotwater\"/>\n\t\t\t<xs:enumeration value=\"drainage\"/>\n\t\t\t<xs:enumeration value=\"earthing\"/>\n\t\t\t<xs:enumeration value=\"electrical\"/>\n\t\t\t<xs:enumeration value=\"electroacoustic\"/>\n\t\t\t<xs:enumeration value=\"exhaust\"/>\n\t\t\t<xs:enumeration value=\"fireprotection\"/>\n\t\t\t<xs:enumeration value=\"fixedtransmissionnetwork\"/>\n\t\t\t<xs:enumeration value=\"fuel\"/>\n\t\t\t<xs:enumeration value=\"gas\"/>\n\t\t\t<xs:enumeration value=\"hazardous\"/>\n\t\t\t<xs:enumeration value=\"heating\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"lightningprotection\"/>\n\t\t\t<xs:enumeration value=\"mobilenetwork\"/>\n\t\t\t<xs:enumeration value=\"monitoringsystem\"/>\n\t\t\t<xs:enumeration value=\"municipalsolidwaste\"/>\n\t\t\t<xs:enumeration value=\"oil\"/>\n\t\t\t<xs:enumeration value=\"operational\"/>\n\t\t\t<xs:enumeration value=\"operationaltelephonysystem\"/>\n\t\t\t<xs:enumeration value=\"overhead_contactline_system\"/>\n\t\t\t<xs:enumeration value=\"powergeneration\"/>\n\t\t\t<xs:enumeration value=\"rainwater\"/>\n\t\t\t<xs:enumeration value=\"refrigeration\"/>\n\t\t\t<xs:enumeration value=\"return_circuit\"/>\n\t\t\t<xs:enumeration value=\"security\"/>\n\t\t\t<xs:enumeration value=\"sewage\"/>\n\t\t\t<xs:enumeration value=\"signal\"/>\n\t\t\t<xs:enumeration value=\"stormwater\"/>\n\t\t\t<xs:enumeration value=\"telephone\"/>\n\t\t\t<xs:enumeration value=\"tv\"/>\n\t\t\t<xs:enumeration value=\"vacuum\"/>\n\t\t\t<xs:enumeration value=\"vent\"/>\n\t\t\t<xs:enumeration value=\"ventilation\"/>\n\t\t\t<xs:enumeration value=\"wastewater\"/>\n\t\t\t<xs:enumeration value=\"watersupply\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDocumentConfidentialityEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"confidential\"/>\n\t\t\t<xs:enumeration value=\"personal\"/>\n\t\t\t<xs:enumeration value=\"public\"/>\n\t\t\t<xs:enumeration value=\"restricted\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDocumentStatusEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"draft\"/>\n\t\t\t<xs:enumeration value=\"final\"/>\n\t\t\t<xs:enumeration value=\"finaldraft\"/>\n\t\t\t<xs:enumeration value=\"revision\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorPanelOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"double_acting\"/>\n\t\t\t<xs:enumeration value=\"fixedpanel\"/>\n\t\t\t<xs:enumeration value=\"folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"sliding\"/>\n\t\t\t<xs:enumeration value=\"swinging\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorPanelPositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"middle\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"boom_barrier\"/>\n\t\t\t<xs:enumeration value=\"door\"/>\n\t\t\t<xs:enumeration value=\"gate\"/>\n\t\t\t<xs:enumeration value=\"trapdoor\"/>\n\t\t\t<xs:enumeration value=\"turnstile\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorTypeOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"double_door_double_swing\"/>\n\t\t\t<xs:enumeration value=\"double_door_folding\"/>\n\t\t\t<xs:enumeration value=\"double_door_lifting_vertical\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_left\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_sliding\"/>\n\t\t\t<xs:enumeration value=\"double_swing_left\"/>\n\t\t\t<xs:enumeration value=\"double_swing_right\"/>\n\t\t\t<xs:enumeration value=\"folding_to_left\"/>\n\t\t\t<xs:enumeration value=\"folding_to_right\"/>\n\t\t\t<xs:enumeration value=\"lifting_horizontal\"/>\n\t\t\t<xs:enumeration value=\"lifting_vertical_left\"/>\n\t\t\t<xs:enumeration value=\"lifting_vertical_right\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"revolving_vertical\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"single_swing_left\"/>\n\t\t\t<xs:enumeration value=\"single_swing_right\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_left\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_right\"/>\n\t\t\t<xs:enumeration value=\"swing_fixed_left\"/>\n\t\t\t<xs:enumeration value=\"swing_fixed_right\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"obstruction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctSilencerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flatoval\"/>\n\t\t\t<xs:enumeration value=\"rectangular\"/>\n\t\t\t<xs:enumeration value=\"round\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEarthworksCutTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"base_excavation\"/>\n\t\t\t<xs:enumeration value=\"cut\"/>\n\t\t\t<xs:enumeration value=\"dredging\"/>\n\t\t\t<xs:enumeration value=\"excavation\"/>\n\t\t\t<xs:enumeration value=\"overexcavation\"/>\n\t\t\t<xs:enumeration value=\"pavementmilling\"/>\n\t\t\t<xs:enumeration value=\"stepexcavation\"/>\n\t\t\t<xs:enumeration value=\"topsoilremoval\"/>\n\t\t\t<xs:enumeration value=\"trench\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEarthworksFillTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"backfill\"/>\n\t\t\t<xs:enumeration value=\"counterweight\"/>\n\t\t\t<xs:enumeration value=\"embankment\"/>\n\t\t\t<xs:enumeration value=\"slopefill\"/>\n\t\t\t<xs:enumeration value=\"subgrade\"/>\n\t\t\t<xs:enumeration value=\"subgradebed\"/>\n\t\t\t<xs:enumeration value=\"transitionsection\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dishwasher\"/>\n\t\t\t<xs:enumeration value=\"electriccooker\"/>\n\t\t\t<xs:enumeration value=\"freestandingelectricheater\"/>\n\t\t\t<xs:enumeration value=\"freestandingfan\"/>\n\t\t\t<xs:enumeration value=\"freestandingwatercooler\"/>\n\t\t\t<xs:enumeration value=\"freestandingwaterheater\"/>\n\t\t\t<xs:enumeration value=\"freezer\"/>\n\t\t\t<xs:enumeration value=\"fridge_freezer\"/>\n\t\t\t<xs:enumeration value=\"handdryer\"/>\n\t\t\t<xs:enumeration value=\"kitchenmachine\"/>\n\t\t\t<xs:enumeration value=\"microwave\"/>\n\t\t\t<xs:enumeration value=\"photocopier\"/>\n\t\t\t<xs:enumeration value=\"refrigerator\"/>\n\t\t\t<xs:enumeration value=\"tumbledryer\"/>\n\t\t\t<xs:enumeration value=\"vendingmachine\"/>\n\t\t\t<xs:enumeration value=\"washingmachine\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricDistributionBoardTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"consumerunit\"/>\n\t\t\t<xs:enumeration value=\"distributionboard\"/>\n\t\t\t<xs:enumeration value=\"motorcontrolcentre\"/>\n\t\t\t<xs:enumeration value=\"switchboard\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricFlowStorageDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"battery\"/>\n\t\t\t<xs:enumeration value=\"capacitor\"/>\n\t\t\t<xs:enumeration value=\"capacitorbank\"/>\n\t\t\t<xs:enumeration value=\"compensator\"/>\n\t\t\t<xs:enumeration value=\"harmonicfilter\"/>\n\t\t\t<xs:enumeration value=\"inductor\"/>\n\t\t\t<xs:enumeration value=\"inductorbank\"/>\n\t\t\t<xs:enumeration value=\"recharger\"/>\n\t\t\t<xs:enumeration value=\"ups\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricFlowTreatmentDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electronicfilter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricGeneratorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"chp\"/>\n\t\t\t<xs:enumeration value=\"enginegenerator\"/>\n\t\t\t<xs:enumeration value=\"standalone\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricMotorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dc\"/>\n\t\t\t<xs:enumeration value=\"induction\"/>\n\t\t\t<xs:enumeration value=\"polyphase\"/>\n\t\t\t<xs:enumeration value=\"reluctancesynchronous\"/>\n\t\t\t<xs:enumeration value=\"synchronous\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricTimeControlTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"relay\"/>\n\t\t\t<xs:enumeration value=\"timeclock\"/>\n\t\t\t<xs:enumeration value=\"timedelay\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElementAssemblyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"abutment\"/>\n\t\t\t<xs:enumeration value=\"accessory_assembly\"/>\n\t\t\t<xs:enumeration value=\"arch\"/>\n\t\t\t<xs:enumeration value=\"beam_grid\"/>\n\t\t\t<xs:enumeration value=\"braced_frame\"/>\n\t\t\t<xs:enumeration value=\"cross_bracing\"/>\n\t\t\t<xs:enumeration value=\"deck\"/>\n\t\t\t<xs:enumeration value=\"dilatationpanel\"/>\n\t\t\t<xs:enumeration value=\"entranceworks\"/>\n\t\t\t<xs:enumeration value=\"girder\"/>\n\t\t\t<xs:enumeration value=\"grid\"/>\n\t\t\t<xs:enumeration value=\"mast\"/>\n\t\t\t<xs:enumeration value=\"pier\"/>\n\t\t\t<xs:enumeration value=\"pylon\"/>\n\t\t\t<xs:enumeration value=\"rail_mechanical_equipment_assembly\"/>\n\t\t\t<xs:enumeration value=\"reinforcement_unit\"/>\n\t\t\t<xs:enumeration value=\"rigid_frame\"/>\n\t\t\t<xs:enumeration value=\"shelter\"/>\n\t\t\t<xs:enumeration value=\"signalassembly\"/>\n\t\t\t<xs:enumeration value=\"slab_field\"/>\n\t\t\t<xs:enumeration value=\"sumpbuster\"/>\n\t\t\t<xs:enumeration value=\"supportingassembly\"/>\n\t\t\t<xs:enumeration value=\"suspensionassembly\"/>\n\t\t\t<xs:enumeration value=\"trackpanel\"/>\n\t\t\t<xs:enumeration value=\"traction_switching_assembly\"/>\n\t\t\t<xs:enumeration value=\"traffic_calming_device\"/>\n\t\t\t<xs:enumeration value=\"truss\"/>\n\t\t\t<xs:enumeration value=\"turnoutpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElementCompositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"complex\"/>\n\t\t\t<xs:enumeration value=\"element\"/>\n\t\t\t<xs:enumeration value=\"partial\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEngineTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"externalcombustion\"/>\n\t\t\t<xs:enumeration value=\"internalcombustion\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEvaporativeCoolerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directevaporativeairwasher\"/>\n\t\t\t<xs:enumeration value=\"directevaporativepackagedrotaryaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativerandommediaaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativerigidmediaaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativeslingerspackagedaircooler\"/>\n\t\t\t<xs:enumeration value=\"indirectdirectcombination\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativecoolingtowerorcoilcooler\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativepackageaircooler\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativewetcoil\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEvaporatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directexpansion\"/>\n\t\t\t<xs:enumeration value=\"directexpansionbrazedplate\"/>\n\t\t\t<xs:enumeration value=\"directexpansionshellandtube\"/>\n\t\t\t<xs:enumeration value=\"directexpansiontubeintube\"/>\n\t\t\t<xs:enumeration value=\"floodedshellandtube\"/>\n\t\t\t<xs:enumeration value=\"shellandcoil\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEventTriggerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"eventcomplex\"/>\n\t\t\t<xs:enumeration value=\"eventmessage\"/>\n\t\t\t<xs:enumeration value=\"eventrule\"/>\n\t\t\t<xs:enumeration value=\"eventtime\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEventTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"endevent\"/>\n\t\t\t<xs:enumeration value=\"intermediateevent\"/>\n\t\t\t<xs:enumeration value=\"startevent\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcExternalSpatialElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"external_earth\"/>\n\t\t\t<xs:enumeration value=\"external_fire\"/>\n\t\t\t<xs:enumeration value=\"external_water\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFacilityPartCommonTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aboveground\"/>\n\t\t\t<xs:enumeration value=\"belowground\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"levelcrossing\"/>\n\t\t\t<xs:enumeration value=\"segment\"/>\n\t\t\t<xs:enumeration value=\"substructure\"/>\n\t\t\t<xs:enumeration value=\"superstructure\"/>\n\t\t\t<xs:enumeration value=\"terminal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFacilityUsageEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"lateral\"/>\n\t\t\t<xs:enumeration value=\"longitudinal\"/>\n\t\t\t<xs:enumeration value=\"region\"/>\n\t\t\t<xs:enumeration value=\"vertical\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFanTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"centrifugalairfoil\"/>\n\t\t\t<xs:enumeration value=\"centrifugalbackwardinclinedcurved\"/>\n\t\t\t<xs:enumeration value=\"centrifugalforwardcurved\"/>\n\t\t\t<xs:enumeration value=\"centrifugalradial\"/>\n\t\t\t<xs:enumeration value=\"propelloraxial\"/>\n\t\t\t<xs:enumeration value=\"tubeaxial\"/>\n\t\t\t<xs:enumeration value=\"vaneaxial\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFastenerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"glue\"/>\n\t\t\t<xs:enumeration value=\"mortar\"/>\n\t\t\t<xs:enumeration value=\"weld\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFilterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airparticlefilter\"/>\n\t\t\t<xs:enumeration value=\"compressedairfilter\"/>\n\t\t\t<xs:enumeration value=\"odorfilter\"/>\n\t\t\t<xs:enumeration value=\"oilfilter\"/>\n\t\t\t<xs:enumeration value=\"strainer\"/>\n\t\t\t<xs:enumeration value=\"waterfilter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFireSuppressionTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"breechinginlet\"/>\n\t\t\t<xs:enumeration value=\"firehydrant\"/>\n\t\t\t<xs:enumeration value=\"firemonitor\"/>\n\t\t\t<xs:enumeration value=\"hosereel\"/>\n\t\t\t<xs:enumeration value=\"sprinkler\"/>\n\t\t\t<xs:enumeration value=\"sprinklerdeflector\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"sink\"/>\n\t\t\t<xs:enumeration value=\"source\"/>\n\t\t\t<xs:enumeration value=\"sourceandsink\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowInstrumentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ammeter\"/>\n\t\t\t<xs:enumeration value=\"combined\"/>\n\t\t\t<xs:enumeration value=\"frequencymeter\"/>\n\t\t\t<xs:enumeration value=\"phaseanglemeter\"/>\n\t\t\t<xs:enumeration value=\"powerfactormeter\"/>\n\t\t\t<xs:enumeration value=\"pressuregauge\"/>\n\t\t\t<xs:enumeration value=\"thermometer\"/>\n\t\t\t<xs:enumeration value=\"voltmeter\"/>\n\t\t\t<xs:enumeration value=\"voltmeter_peak\"/>\n\t\t\t<xs:enumeration value=\"voltmeter_rms\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowMeterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"energymeter\"/>\n\t\t\t<xs:enumeration value=\"gasmeter\"/>\n\t\t\t<xs:enumeration value=\"oilmeter\"/>\n\t\t\t<xs:enumeration value=\"watermeter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFootingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"caisson_foundation\"/>\n\t\t\t<xs:enumeration value=\"footing_beam\"/>\n\t\t\t<xs:enumeration value=\"pad_footing\"/>\n\t\t\t<xs:enumeration value=\"pile_cap\"/>\n\t\t\t<xs:enumeration value=\"strip_footing\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFurnitureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bed\"/>\n\t\t\t<xs:enumeration value=\"chair\"/>\n\t\t\t<xs:enumeration value=\"desk\"/>\n\t\t\t<xs:enumeration value=\"filecabinet\"/>\n\t\t\t<xs:enumeration value=\"shelf\"/>\n\t\t\t<xs:enumeration value=\"sofa\"/>\n\t\t\t<xs:enumeration value=\"table\"/>\n\t\t\t<xs:enumeration value=\"technicalcabinet\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGeographicElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"soil_boring_point\"/>\n\t\t\t<xs:enumeration value=\"terrain\"/>\n\t\t\t<xs:enumeration value=\"vegetation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGeometricProjectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"elevation_view\"/>\n\t\t\t<xs:enumeration value=\"graph_view\"/>\n\t\t\t<xs:enumeration value=\"model_view\"/>\n\t\t\t<xs:enumeration value=\"plan_view\"/>\n\t\t\t<xs:enumeration value=\"reflected_plan_view\"/>\n\t\t\t<xs:enumeration value=\"section_view\"/>\n\t\t\t<xs:enumeration value=\"sketch_view\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGeotechnicalStratumTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"solid\"/>\n\t\t\t<xs:enumeration value=\"void\"/>\n\t\t\t<xs:enumeration value=\"water\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGlobalOrLocalEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"global_coords\"/>\n\t\t\t<xs:enumeration value=\"local_coords\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGridTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"irregular\"/>\n\t\t\t<xs:enumeration value=\"radial\"/>\n\t\t\t<xs:enumeration value=\"rectangular\"/>\n\t\t\t<xs:enumeration value=\"triangular\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatExchangerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plate\"/>\n\t\t\t<xs:enumeration value=\"shellandtube\"/>\n\t\t\t<xs:enumeration value=\"turnoutheating\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHumidifierTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"adiabaticairwasher\"/>\n\t\t\t<xs:enumeration value=\"adiabaticatomizing\"/>\n\t\t\t<xs:enumeration value=\"adiabaticcompressedairnozzle\"/>\n\t\t\t<xs:enumeration value=\"adiabaticpan\"/>\n\t\t\t<xs:enumeration value=\"adiabaticrigidmedia\"/>\n\t\t\t<xs:enumeration value=\"adiabaticultrasonic\"/>\n\t\t\t<xs:enumeration value=\"adiabaticwettedelement\"/>\n\t\t\t<xs:enumeration value=\"assistedbutane\"/>\n\t\t\t<xs:enumeration value=\"assistedelectric\"/>\n\t\t\t<xs:enumeration value=\"assistednaturalgas\"/>\n\t\t\t<xs:enumeration value=\"assistedpropane\"/>\n\t\t\t<xs:enumeration value=\"assistedsteam\"/>\n\t\t\t<xs:enumeration value=\"steaminjection\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcImpactProtectionDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bumper\"/>\n\t\t\t<xs:enumeration value=\"crashcushion\"/>\n\t\t\t<xs:enumeration value=\"dampingsystem\"/>\n\t\t\t<xs:enumeration value=\"fender\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInterceptorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cyclonic\"/>\n\t\t\t<xs:enumeration value=\"grease\"/>\n\t\t\t<xs:enumeration value=\"oil\"/>\n\t\t\t<xs:enumeration value=\"petrol\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInternalOrExternalEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"external_earth\"/>\n\t\t\t<xs:enumeration value=\"external_fire\"/>\n\t\t\t<xs:enumeration value=\"external_water\"/>\n\t\t\t<xs:enumeration value=\"internal\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInventoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assetinventory\"/>\n\t\t\t<xs:enumeration value=\"furnitureinventory\"/>\n\t\t\t<xs:enumeration value=\"spaceinventory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcJunctionBoxTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"data\"/>\n\t\t\t<xs:enumeration value=\"power\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcKnotType\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"piecewise_bezier_knots\"/>\n\t\t\t<xs:enumeration value=\"quasi_uniform_knots\"/>\n\t\t\t<xs:enumeration value=\"uniform_knots\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLaborResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"administration\"/>\n\t\t\t<xs:enumeration value=\"carpentry\"/>\n\t\t\t<xs:enumeration value=\"cleaning\"/>\n\t\t\t<xs:enumeration value=\"concrete\"/>\n\t\t\t<xs:enumeration value=\"drywall\"/>\n\t\t\t<xs:enumeration value=\"electric\"/>\n\t\t\t<xs:enumeration value=\"finishing\"/>\n\t\t\t<xs:enumeration value=\"flooring\"/>\n\t\t\t<xs:enumeration value=\"general\"/>\n\t\t\t<xs:enumeration value=\"hvac\"/>\n\t\t\t<xs:enumeration value=\"landscaping\"/>\n\t\t\t<xs:enumeration value=\"masonry\"/>\n\t\t\t<xs:enumeration value=\"painting\"/>\n\t\t\t<xs:enumeration value=\"paving\"/>\n\t\t\t<xs:enumeration value=\"plumbing\"/>\n\t\t\t<xs:enumeration value=\"roofing\"/>\n\t\t\t<xs:enumeration value=\"sitegrading\"/>\n\t\t\t<xs:enumeration value=\"steelwork\"/>\n\t\t\t<xs:enumeration value=\"surveying\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLampTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\n\t\t\t<xs:enumeration value=\"halogen\"/>\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"led\"/>\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\n\t\t\t<xs:enumeration value=\"oled\"/>\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLayerSetDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"axis1\"/>\n\t\t\t<xs:enumeration value=\"axis2\"/>\n\t\t\t<xs:enumeration value=\"axis3\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightDistributionCurveEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"type_a\"/>\n\t\t\t<xs:enumeration value=\"type_b\"/>\n\t\t\t<xs:enumeration value=\"type_c\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightEmissionSourceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"lightemittingdiode\"/>\n\t\t\t<xs:enumeration value=\"lowpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"lowvoltagehalogen\"/>\n\t\t\t<xs:enumeration value=\"mainvoltagehalogen\"/>\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightFixtureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directionsource\"/>\n\t\t\t<xs:enumeration value=\"pointsource\"/>\n\t\t\t<xs:enumeration value=\"securitylighting\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLiquidTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"hosereel\"/>\n\t\t\t<xs:enumeration value=\"loadingarm\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLoadGroupTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"load_case\"/>\n\t\t\t<xs:enumeration value=\"load_combination\"/>\n\t\t\t<xs:enumeration value=\"load_group\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLogicalOperatorEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"logicaland\"/>\n\t\t\t<xs:enumeration value=\"logicalnotand\"/>\n\t\t\t<xs:enumeration value=\"logicalnotor\"/>\n\t\t\t<xs:enumeration value=\"logicalor\"/>\n\t\t\t<xs:enumeration value=\"logicalxor\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMarineFacilityTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"barrierbeach\"/>\n\t\t\t<xs:enumeration value=\"breakwater\"/>\n\t\t\t<xs:enumeration value=\"canal\"/>\n\t\t\t<xs:enumeration value=\"drydock\"/>\n\t\t\t<xs:enumeration value=\"floatingdock\"/>\n\t\t\t<xs:enumeration value=\"hydrolift\"/>\n\t\t\t<xs:enumeration value=\"jetty\"/>\n\t\t\t<xs:enumeration value=\"launchrecovery\"/>\n\t\t\t<xs:enumeration value=\"marinedefence\"/>\n\t\t\t<xs:enumeration value=\"navigationalchannel\"/>\n\t\t\t<xs:enumeration value=\"port\"/>\n\t\t\t<xs:enumeration value=\"quay\"/>\n\t\t\t<xs:enumeration value=\"revetment\"/>\n\t\t\t<xs:enumeration value=\"shiplift\"/>\n\t\t\t<xs:enumeration value=\"shiplock\"/>\n\t\t\t<xs:enumeration value=\"shipyard\"/>\n\t\t\t<xs:enumeration value=\"slipway\"/>\n\t\t\t<xs:enumeration value=\"waterway\"/>\n\t\t\t<xs:enumeration value=\"waterwayshiplift\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMarinePartTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"abovewaterline\"/>\n\t\t\t<xs:enumeration value=\"anchorage\"/>\n\t\t\t<xs:enumeration value=\"approachchannel\"/>\n\t\t\t<xs:enumeration value=\"belowwaterline\"/>\n\t\t\t<xs:enumeration value=\"berthingstructure\"/>\n\t\t\t<xs:enumeration value=\"chamber\"/>\n\t\t\t<xs:enumeration value=\"cill_level\"/>\n\t\t\t<xs:enumeration value=\"copelevel\"/>\n\t\t\t<xs:enumeration value=\"core\"/>\n\t\t\t<xs:enumeration value=\"crest\"/>\n\t\t\t<xs:enumeration value=\"gatehead\"/>\n\t\t\t<xs:enumeration value=\"gudingstructure\"/>\n\t\t\t<xs:enumeration value=\"highwaterline\"/>\n\t\t\t<xs:enumeration value=\"landfield\"/>\n\t\t\t<xs:enumeration value=\"leewardside\"/>\n\t\t\t<xs:enumeration value=\"lowwaterline\"/>\n\t\t\t<xs:enumeration value=\"manufacturing\"/>\n\t\t\t<xs:enumeration value=\"navigationalarea\"/>\n\t\t\t<xs:enumeration value=\"protection\"/>\n\t\t\t<xs:enumeration value=\"shiptransfer\"/>\n\t\t\t<xs:enumeration value=\"storagearea\"/>\n\t\t\t<xs:enumeration value=\"vehicleservicing\"/>\n\t\t\t<xs:enumeration value=\"waterfield\"/>\n\t\t\t<xs:enumeration value=\"weatherside\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMechanicalFastenerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchorbolt\"/>\n\t\t\t<xs:enumeration value=\"bolt\"/>\n\t\t\t<xs:enumeration value=\"chain\"/>\n\t\t\t<xs:enumeration value=\"coupler\"/>\n\t\t\t<xs:enumeration value=\"dowel\"/>\n\t\t\t<xs:enumeration value=\"nail\"/>\n\t\t\t<xs:enumeration value=\"nailplate\"/>\n\t\t\t<xs:enumeration value=\"railfastening\"/>\n\t\t\t<xs:enumeration value=\"railjoint\"/>\n\t\t\t<xs:enumeration value=\"rivet\"/>\n\t\t\t<xs:enumeration value=\"rope\"/>\n\t\t\t<xs:enumeration value=\"screw\"/>\n\t\t\t<xs:enumeration value=\"shearconnector\"/>\n\t\t\t<xs:enumeration value=\"staple\"/>\n\t\t\t<xs:enumeration value=\"studshearconnector\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMedicalDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airstation\"/>\n\t\t\t<xs:enumeration value=\"feedairunit\"/>\n\t\t\t<xs:enumeration value=\"oxygengenerator\"/>\n\t\t\t<xs:enumeration value=\"oxygenplant\"/>\n\t\t\t<xs:enumeration value=\"vacuumstation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"arch_segment\"/>\n\t\t\t<xs:enumeration value=\"brace\"/>\n\t\t\t<xs:enumeration value=\"chord\"/>\n\t\t\t<xs:enumeration value=\"collar\"/>\n\t\t\t<xs:enumeration value=\"member\"/>\n\t\t\t<xs:enumeration value=\"mullion\"/>\n\t\t\t<xs:enumeration value=\"plate\"/>\n\t\t\t<xs:enumeration value=\"post\"/>\n\t\t\t<xs:enumeration value=\"purlin\"/>\n\t\t\t<xs:enumeration value=\"rafter\"/>\n\t\t\t<xs:enumeration value=\"stay_cable\"/>\n\t\t\t<xs:enumeration value=\"stiffening_rib\"/>\n\t\t\t<xs:enumeration value=\"stringer\"/>\n\t\t\t<xs:enumeration value=\"structuralcable\"/>\n\t\t\t<xs:enumeration value=\"strut\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"suspender\"/>\n\t\t\t<xs:enumeration value=\"suspension_cable\"/>\n\t\t\t<xs:enumeration value=\"tiebar\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMobileTelecommunicationsApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"accesspoint\"/>\n\t\t\t<xs:enumeration value=\"basebandunit\"/>\n\t\t\t<xs:enumeration value=\"basetransceiverstation\"/>\n\t\t\t<xs:enumeration value=\"e_utran_node_b\"/>\n\t\t\t<xs:enumeration value=\"gateway_gprs_support_node\"/>\n\t\t\t<xs:enumeration value=\"masterunit\"/>\n\t\t\t<xs:enumeration value=\"mobileswitchingcenter\"/>\n\t\t\t<xs:enumeration value=\"mscserver\"/>\n\t\t\t<xs:enumeration value=\"packetcontrolunit\"/>\n\t\t\t<xs:enumeration value=\"remoteradiounit\"/>\n\t\t\t<xs:enumeration value=\"remoteunit\"/>\n\t\t\t<xs:enumeration value=\"service_gprs_support_node\"/>\n\t\t\t<xs:enumeration value=\"subscriberserver\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMooringDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bollard\"/>\n\t\t\t<xs:enumeration value=\"linetensioner\"/>\n\t\t\t<xs:enumeration value=\"magneticdevice\"/>\n\t\t\t<xs:enumeration value=\"mooringhooks\"/>\n\t\t\t<xs:enumeration value=\"vacuumdevice\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMotorConnectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beltdrive\"/>\n\t\t\t<xs:enumeration value=\"coupling\"/>\n\t\t\t<xs:enumeration value=\"directdrive\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNavigationElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beacon\"/>\n\t\t\t<xs:enumeration value=\"buoy\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcObjectTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actor\"/>\n\t\t\t<xs:enumeration value=\"control\"/>\n\t\t\t<xs:enumeration value=\"group\"/>\n\t\t\t<xs:enumeration value=\"process\"/>\n\t\t\t<xs:enumeration value=\"product\"/>\n\t\t\t<xs:enumeration value=\"project\"/>\n\t\t\t<xs:enumeration value=\"resource\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcObjectiveEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"codecompliance\"/>\n\t\t\t<xs:enumeration value=\"codewaiver\"/>\n\t\t\t<xs:enumeration value=\"designintent\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"healthandsafety\"/>\n\t\t\t<xs:enumeration value=\"mergeconflict\"/>\n\t\t\t<xs:enumeration value=\"modelview\"/>\n\t\t\t<xs:enumeration value=\"parameter\"/>\n\t\t\t<xs:enumeration value=\"requirement\"/>\n\t\t\t<xs:enumeration value=\"specification\"/>\n\t\t\t<xs:enumeration value=\"triggercondition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOccupantTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assignee\"/>\n\t\t\t<xs:enumeration value=\"assignor\"/>\n\t\t\t<xs:enumeration value=\"lessee\"/>\n\t\t\t<xs:enumeration value=\"lessor\"/>\n\t\t\t<xs:enumeration value=\"lettingagent\"/>\n\t\t\t<xs:enumeration value=\"owner\"/>\n\t\t\t<xs:enumeration value=\"tenant\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOpeningElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"opening\"/>\n\t\t\t<xs:enumeration value=\"recess\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOutletTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"audiovisualoutlet\"/>\n\t\t\t<xs:enumeration value=\"communicationsoutlet\"/>\n\t\t\t<xs:enumeration value=\"dataoutlet\"/>\n\t\t\t<xs:enumeration value=\"poweroutlet\"/>\n\t\t\t<xs:enumeration value=\"telephoneoutlet\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPavementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flexible\"/>\n\t\t\t<xs:enumeration value=\"rigid\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPerformanceHistoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPermeableCoveringOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"grill\"/>\n\t\t\t<xs:enumeration value=\"louver\"/>\n\t\t\t<xs:enumeration value=\"screen\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPermitTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"access\"/>\n\t\t\t<xs:enumeration value=\"building\"/>\n\t\t\t<xs:enumeration value=\"work\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPhysicalOrVirtualEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"physical\"/>\n\t\t\t<xs:enumeration value=\"virtual\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPileConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cast_in_place\"/>\n\t\t\t<xs:enumeration value=\"composite\"/>\n\t\t\t<xs:enumeration value=\"precast_concrete\"/>\n\t\t\t<xs:enumeration value=\"prefab_steel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPileTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bored\"/>\n\t\t\t<xs:enumeration value=\"cohesion\"/>\n\t\t\t<xs:enumeration value=\"driven\"/>\n\t\t\t<xs:enumeration value=\"friction\"/>\n\t\t\t<xs:enumeration value=\"jetgrouting\"/>\n\t\t\t<xs:enumeration value=\"support\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPipeFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"obstruction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPipeSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"culvert\"/>\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\n\t\t\t<xs:enumeration value=\"gutter\"/>\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\n\t\t\t<xs:enumeration value=\"spool\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"base_plate\"/>\n\t\t\t<xs:enumeration value=\"cover_plate\"/>\n\t\t\t<xs:enumeration value=\"curtain_panel\"/>\n\t\t\t<xs:enumeration value=\"flange_plate\"/>\n\t\t\t<xs:enumeration value=\"gusset_plate\"/>\n\t\t\t<xs:enumeration value=\"sheet\"/>\n\t\t\t<xs:enumeration value=\"splice_plate\"/>\n\t\t\t<xs:enumeration value=\"stiffener_plate\"/>\n\t\t\t<xs:enumeration value=\"web_plate\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPreferredSurfaceCurveRepresentation\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curve3d\"/>\n\t\t\t<xs:enumeration value=\"pcurve_s1\"/>\n\t\t\t<xs:enumeration value=\"pcurve_s2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProcedureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"advice_caution\"/>\n\t\t\t<xs:enumeration value=\"advice_note\"/>\n\t\t\t<xs:enumeration value=\"advice_warning\"/>\n\t\t\t<xs:enumeration value=\"calibration\"/>\n\t\t\t<xs:enumeration value=\"diagnostic\"/>\n\t\t\t<xs:enumeration value=\"shutdown\"/>\n\t\t\t<xs:enumeration value=\"startup\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProfileTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"area\"/>\n\t\t\t<xs:enumeration value=\"curve\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectOrderTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"changeorder\"/>\n\t\t\t<xs:enumeration value=\"maintenanceworkorder\"/>\n\t\t\t<xs:enumeration value=\"moveorder\"/>\n\t\t\t<xs:enumeration value=\"purchaseorder\"/>\n\t\t\t<xs:enumeration value=\"workorder\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectedOrTrueLengthEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"projected_length\"/>\n\t\t\t<xs:enumeration value=\"true_length\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectionElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blister\"/>\n\t\t\t<xs:enumeration value=\"deviator\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPropertySetTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pset_materialdriven\"/>\n\t\t\t<xs:enumeration value=\"pset_occurrencedriven\"/>\n\t\t\t<xs:enumeration value=\"pset_performancedriven\"/>\n\t\t\t<xs:enumeration value=\"pset_profiledriven\"/>\n\t\t\t<xs:enumeration value=\"pset_typedrivenonly\"/>\n\t\t\t<xs:enumeration value=\"pset_typedrivenoverride\"/>\n\t\t\t<xs:enumeration value=\"qto_occurrencedriven\"/>\n\t\t\t<xs:enumeration value=\"qto_typedrivenonly\"/>\n\t\t\t<xs:enumeration value=\"qto_typedrivenoverride\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProtectiveDeviceTrippingUnitTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electromagnetic\"/>\n\t\t\t<xs:enumeration value=\"electronic\"/>\n\t\t\t<xs:enumeration value=\"residualcurrent\"/>\n\t\t\t<xs:enumeration value=\"thermal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProtectiveDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anti_arcing_device\"/>\n\t\t\t<xs:enumeration value=\"circuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"earthingswitch\"/>\n\t\t\t<xs:enumeration value=\"earthleakagecircuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"fusedisconnector\"/>\n\t\t\t<xs:enumeration value=\"residualcurrentcircuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"residualcurrentswitch\"/>\n\t\t\t<xs:enumeration value=\"sparkgap\"/>\n\t\t\t<xs:enumeration value=\"varistor\"/>\n\t\t\t<xs:enumeration value=\"voltagelimiter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPumpTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"circulator\"/>\n\t\t\t<xs:enumeration value=\"endsuction\"/>\n\t\t\t<xs:enumeration value=\"splitcase\"/>\n\t\t\t<xs:enumeration value=\"submersiblepump\"/>\n\t\t\t<xs:enumeration value=\"sumppump\"/>\n\t\t\t<xs:enumeration value=\"verticalinline\"/>\n\t\t\t<xs:enumeration value=\"verticalturbine\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRailTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blade\"/>\n\t\t\t<xs:enumeration value=\"checkrail\"/>\n\t\t\t<xs:enumeration value=\"guardrail\"/>\n\t\t\t<xs:enumeration value=\"rackrail\"/>\n\t\t\t<xs:enumeration value=\"rail\"/>\n\t\t\t<xs:enumeration value=\"stockrail\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRailingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"balustrade\"/>\n\t\t\t<xs:enumeration value=\"fence\"/>\n\t\t\t<xs:enumeration value=\"guardrail\"/>\n\t\t\t<xs:enumeration value=\"handrail\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRailwayPartTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dilatationsuperstructure\"/>\n\t\t\t<xs:enumeration value=\"linesidestructure\"/>\n\t\t\t<xs:enumeration value=\"linesidestructurepart\"/>\n\t\t\t<xs:enumeration value=\"plaintracksuperstructure\"/>\n\t\t\t<xs:enumeration value=\"superstructure\"/>\n\t\t\t<xs:enumeration value=\"trackstructure\"/>\n\t\t\t<xs:enumeration value=\"trackstructurepart\"/>\n\t\t\t<xs:enumeration value=\"turnoutsuperstructure\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRailwayTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRampFlightTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"spiral\"/>\n\t\t\t<xs:enumeration value=\"straight\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRampTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"half_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"quarter_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"spiral_ramp\"/>\n\t\t\t<xs:enumeration value=\"straight_run_ramp\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"two_straight_run_ramp\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRecurrenceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"by_day_count\"/>\n\t\t\t<xs:enumeration value=\"by_weekday_count\"/>\n\t\t\t<xs:enumeration value=\"daily\"/>\n\t\t\t<xs:enumeration value=\"monthly_by_day_of_month\"/>\n\t\t\t<xs:enumeration value=\"monthly_by_position\"/>\n\t\t\t<xs:enumeration value=\"weekly\"/>\n\t\t\t<xs:enumeration value=\"yearly_by_day_of_month\"/>\n\t\t\t<xs:enumeration value=\"yearly_by_position\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReferentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"boundary\"/>\n\t\t\t<xs:enumeration value=\"intersection\"/>\n\t\t\t<xs:enumeration value=\"kilopoint\"/>\n\t\t\t<xs:enumeration value=\"landmark\"/>\n\t\t\t<xs:enumeration value=\"milepoint\"/>\n\t\t\t<xs:enumeration value=\"position\"/>\n\t\t\t<xs:enumeration value=\"referencemarker\"/>\n\t\t\t<xs:enumeration value=\"station\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReflectanceMethodEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blinn\"/>\n\t\t\t<xs:enumeration value=\"flat\"/>\n\t\t\t<xs:enumeration value=\"glass\"/>\n\t\t\t<xs:enumeration value=\"matt\"/>\n\t\t\t<xs:enumeration value=\"metal\"/>\n\t\t\t<xs:enumeration value=\"mirror\"/>\n\t\t\t<xs:enumeration value=\"phong\"/>\n\t\t\t<xs:enumeration value=\"physical\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"strauss\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcedSoilTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dynamicallycompacted\"/>\n\t\t\t<xs:enumeration value=\"grouted\"/>\n\t\t\t<xs:enumeration value=\"replaced\"/>\n\t\t\t<xs:enumeration value=\"rollercompacted\"/>\n\t\t\t<xs:enumeration value=\"surchargepreloaded\"/>\n\t\t\t<xs:enumeration value=\"verticallydrained\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarRoleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchoring\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"ligature\"/>\n\t\t\t<xs:enumeration value=\"main\"/>\n\t\t\t<xs:enumeration value=\"punching\"/>\n\t\t\t<xs:enumeration value=\"ring\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarSurfaceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plain\"/>\n\t\t\t<xs:enumeration value=\"textured\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchoring\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"ligature\"/>\n\t\t\t<xs:enumeration value=\"main\"/>\n\t\t\t<xs:enumeration value=\"punching\"/>\n\t\t\t<xs:enumeration value=\"ring\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"spacebar\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingMeshTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRoadPartTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bicyclecrossing\"/>\n\t\t\t<xs:enumeration value=\"bus_stop\"/>\n\t\t\t<xs:enumeration value=\"carriageway\"/>\n\t\t\t<xs:enumeration value=\"centralisland\"/>\n\t\t\t<xs:enumeration value=\"centralreserve\"/>\n\t\t\t<xs:enumeration value=\"hardshoulder\"/>\n\t\t\t<xs:enumeration value=\"intersection\"/>\n\t\t\t<xs:enumeration value=\"layby\"/>\n\t\t\t<xs:enumeration value=\"parkingbay\"/>\n\t\t\t<xs:enumeration value=\"passingbay\"/>\n\t\t\t<xs:enumeration value=\"pedestrian_crossing\"/>\n\t\t\t<xs:enumeration value=\"railwaycrossing\"/>\n\t\t\t<xs:enumeration value=\"refugeisland\"/>\n\t\t\t<xs:enumeration value=\"roadsegment\"/>\n\t\t\t<xs:enumeration value=\"roadside\"/>\n\t\t\t<xs:enumeration value=\"roadsidepart\"/>\n\t\t\t<xs:enumeration value=\"roadwayplateau\"/>\n\t\t\t<xs:enumeration value=\"roundabout\"/>\n\t\t\t<xs:enumeration value=\"shoulder\"/>\n\t\t\t<xs:enumeration value=\"sidewalk\"/>\n\t\t\t<xs:enumeration value=\"softshoulder\"/>\n\t\t\t<xs:enumeration value=\"tollplaza\"/>\n\t\t\t<xs:enumeration value=\"trafficisland\"/>\n\t\t\t<xs:enumeration value=\"trafficlane\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRoadTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRoleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"architect\"/>\n\t\t\t<xs:enumeration value=\"buildingoperator\"/>\n\t\t\t<xs:enumeration value=\"buildingowner\"/>\n\t\t\t<xs:enumeration value=\"civilengineer\"/>\n\t\t\t<xs:enumeration value=\"client\"/>\n\t\t\t<xs:enumeration value=\"commissioningengineer\"/>\n\t\t\t<xs:enumeration value=\"constructionmanager\"/>\n\t\t\t<xs:enumeration value=\"consultant\"/>\n\t\t\t<xs:enumeration value=\"contractor\"/>\n\t\t\t<xs:enumeration value=\"costengineer\"/>\n\t\t\t<xs:enumeration value=\"electricalengineer\"/>\n\t\t\t<xs:enumeration value=\"engineer\"/>\n\t\t\t<xs:enumeration value=\"facilitiesmanager\"/>\n\t\t\t<xs:enumeration value=\"fieldconstructionmanager\"/>\n\t\t\t<xs:enumeration value=\"manufacturer\"/>\n\t\t\t<xs:enumeration value=\"mechanicalengineer\"/>\n\t\t\t<xs:enumeration value=\"owner\"/>\n\t\t\t<xs:enumeration value=\"projectmanager\"/>\n\t\t\t<xs:enumeration value=\"reseller\"/>\n\t\t\t<xs:enumeration value=\"structuralengineer\"/>\n\t\t\t<xs:enumeration value=\"subcontractor\"/>\n\t\t\t<xs:enumeration value=\"supplier\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRoofTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"barrel_roof\"/>\n\t\t\t<xs:enumeration value=\"butterfly_roof\"/>\n\t\t\t<xs:enumeration value=\"dome_roof\"/>\n\t\t\t<xs:enumeration value=\"flat_roof\"/>\n\t\t\t<xs:enumeration value=\"freeform\"/>\n\t\t\t<xs:enumeration value=\"gable_roof\"/>\n\t\t\t<xs:enumeration value=\"gambrel_roof\"/>\n\t\t\t<xs:enumeration value=\"hipped_gable_roof\"/>\n\t\t\t<xs:enumeration value=\"hip_roof\"/>\n\t\t\t<xs:enumeration value=\"mansard_roof\"/>\n\t\t\t<xs:enumeration value=\"pavilion_roof\"/>\n\t\t\t<xs:enumeration value=\"rainbow_roof\"/>\n\t\t\t<xs:enumeration value=\"shed_roof\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSIPrefix\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"atto\"/>\n\t\t\t<xs:enumeration value=\"centi\"/>\n\t\t\t<xs:enumeration value=\"deca\"/>\n\t\t\t<xs:enumeration value=\"deci\"/>\n\t\t\t<xs:enumeration value=\"exa\"/>\n\t\t\t<xs:enumeration value=\"femto\"/>\n\t\t\t<xs:enumeration value=\"giga\"/>\n\t\t\t<xs:enumeration value=\"hecto\"/>\n\t\t\t<xs:enumeration value=\"kilo\"/>\n\t\t\t<xs:enumeration value=\"mega\"/>\n\t\t\t<xs:enumeration value=\"micro\"/>\n\t\t\t<xs:enumeration value=\"milli\"/>\n\t\t\t<xs:enumeration value=\"nano\"/>\n\t\t\t<xs:enumeration value=\"peta\"/>\n\t\t\t<xs:enumeration value=\"pico\"/>\n\t\t\t<xs:enumeration value=\"tera\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSIUnitName\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ampere\"/>\n\t\t\t<xs:enumeration value=\"becquerel\"/>\n\t\t\t<xs:enumeration value=\"candela\"/>\n\t\t\t<xs:enumeration value=\"coulomb\"/>\n\t\t\t<xs:enumeration value=\"cubic_metre\"/>\n\t\t\t<xs:enumeration value=\"degree_celsius\"/>\n\t\t\t<xs:enumeration value=\"farad\"/>\n\t\t\t<xs:enumeration value=\"gram\"/>\n\t\t\t<xs:enumeration value=\"gray\"/>\n\t\t\t<xs:enumeration value=\"henry\"/>\n\t\t\t<xs:enumeration value=\"hertz\"/>\n\t\t\t<xs:enumeration value=\"joule\"/>\n\t\t\t<xs:enumeration value=\"kelvin\"/>\n\t\t\t<xs:enumeration value=\"lumen\"/>\n\t\t\t<xs:enumeration value=\"lux\"/>\n\t\t\t<xs:enumeration value=\"metre\"/>\n\t\t\t<xs:enumeration value=\"mole\"/>\n\t\t\t<xs:enumeration value=\"newton\"/>\n\t\t\t<xs:enumeration value=\"ohm\"/>\n\t\t\t<xs:enumeration value=\"pascal\"/>\n\t\t\t<xs:enumeration value=\"radian\"/>\n\t\t\t<xs:enumeration value=\"second\"/>\n\t\t\t<xs:enumeration value=\"siemens\"/>\n\t\t\t<xs:enumeration value=\"sievert\"/>\n\t\t\t<xs:enumeration value=\"square_metre\"/>\n\t\t\t<xs:enumeration value=\"steradian\"/>\n\t\t\t<xs:enumeration value=\"tesla\"/>\n\t\t\t<xs:enumeration value=\"volt\"/>\n\t\t\t<xs:enumeration value=\"watt\"/>\n\t\t\t<xs:enumeration value=\"weber\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSanitaryTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bath\"/>\n\t\t\t<xs:enumeration value=\"bidet\"/>\n\t\t\t<xs:enumeration value=\"cistern\"/>\n\t\t\t<xs:enumeration value=\"sanitaryfountain\"/>\n\t\t\t<xs:enumeration value=\"shower\"/>\n\t\t\t<xs:enumeration value=\"sink\"/>\n\t\t\t<xs:enumeration value=\"toiletpan\"/>\n\t\t\t<xs:enumeration value=\"urinal\"/>\n\t\t\t<xs:enumeration value=\"washhandbasin\"/>\n\t\t\t<xs:enumeration value=\"wcseat\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"tapered\"/>\n\t\t\t<xs:enumeration value=\"uniform\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSensorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"co2sensor\"/>\n\t\t\t<xs:enumeration value=\"conductancesensor\"/>\n\t\t\t<xs:enumeration value=\"contactsensor\"/>\n\t\t\t<xs:enumeration value=\"cosensor\"/>\n\t\t\t<xs:enumeration value=\"earthquakesensor\"/>\n\t\t\t<xs:enumeration value=\"firesensor\"/>\n\t\t\t<xs:enumeration value=\"flowsensor\"/>\n\t\t\t<xs:enumeration value=\"foreignobjectdetectionsensor\"/>\n\t\t\t<xs:enumeration value=\"frostsensor\"/>\n\t\t\t<xs:enumeration value=\"gassensor\"/>\n\t\t\t<xs:enumeration value=\"heatsensor\"/>\n\t\t\t<xs:enumeration value=\"humiditysensor\"/>\n\t\t\t<xs:enumeration value=\"identifiersensor\"/>\n\t\t\t<xs:enumeration value=\"ionconcentrationsensor\"/>\n\t\t\t<xs:enumeration value=\"levelsensor\"/>\n\t\t\t<xs:enumeration value=\"lightsensor\"/>\n\t\t\t<xs:enumeration value=\"moisturesensor\"/>\n\t\t\t<xs:enumeration value=\"movementsensor\"/>\n\t\t\t<xs:enumeration value=\"obstaclesensor\"/>\n\t\t\t<xs:enumeration value=\"phsensor\"/>\n\t\t\t<xs:enumeration value=\"pressuresensor\"/>\n\t\t\t<xs:enumeration value=\"radiationsensor\"/>\n\t\t\t<xs:enumeration value=\"radioactivitysensor\"/>\n\t\t\t<xs:enumeration value=\"rainsensor\"/>\n\t\t\t<xs:enumeration value=\"smokesensor\"/>\n\t\t\t<xs:enumeration value=\"snowdepthsensor\"/>\n\t\t\t<xs:enumeration value=\"soundsensor\"/>\n\t\t\t<xs:enumeration value=\"temperaturesensor\"/>\n\t\t\t<xs:enumeration value=\"trainsensor\"/>\n\t\t\t<xs:enumeration value=\"turnoutclosuresensor\"/>\n\t\t\t<xs:enumeration value=\"wheelsensor\"/>\n\t\t\t<xs:enumeration value=\"windsensor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSequenceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"finish_finish\"/>\n\t\t\t<xs:enumeration value=\"finish_start\"/>\n\t\t\t<xs:enumeration value=\"start_finish\"/>\n\t\t\t<xs:enumeration value=\"start_start\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcShadingDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"awning\"/>\n\t\t\t<xs:enumeration value=\"jalousie\"/>\n\t\t\t<xs:enumeration value=\"shutter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSignTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"marker\"/>\n\t\t\t<xs:enumeration value=\"mirror\"/>\n\t\t\t<xs:enumeration value=\"pictoral\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSignalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"audio\"/>\n\t\t\t<xs:enumeration value=\"mixed\"/>\n\t\t\t<xs:enumeration value=\"visual\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSimplePropertyTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"p_boundedvalue\"/>\n\t\t\t<xs:enumeration value=\"p_enumeratedvalue\"/>\n\t\t\t<xs:enumeration value=\"p_listvalue\"/>\n\t\t\t<xs:enumeration value=\"p_referencevalue\"/>\n\t\t\t<xs:enumeration value=\"p_singlevalue\"/>\n\t\t\t<xs:enumeration value=\"p_tablevalue\"/>\n\t\t\t<xs:enumeration value=\"q_area\"/>\n\t\t\t<xs:enumeration value=\"q_count\"/>\n\t\t\t<xs:enumeration value=\"q_length\"/>\n\t\t\t<xs:enumeration value=\"q_number\"/>\n\t\t\t<xs:enumeration value=\"q_time\"/>\n\t\t\t<xs:enumeration value=\"q_volume\"/>\n\t\t\t<xs:enumeration value=\"q_weight\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSlabTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"approach_slab\"/>\n\t\t\t<xs:enumeration value=\"baseslab\"/>\n\t\t\t<xs:enumeration value=\"floor\"/>\n\t\t\t<xs:enumeration value=\"landing\"/>\n\t\t\t<xs:enumeration value=\"paving\"/>\n\t\t\t<xs:enumeration value=\"roof\"/>\n\t\t\t<xs:enumeration value=\"sidewalk\"/>\n\t\t\t<xs:enumeration value=\"trackslab\"/>\n\t\t\t<xs:enumeration value=\"wearing\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSolarDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"solarcollector\"/>\n\t\t\t<xs:enumeration value=\"solarpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpaceHeaterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"convector\"/>\n\t\t\t<xs:enumeration value=\"radiator\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpaceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"berth\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"gfa\"/>\n\t\t\t<xs:enumeration value=\"internal\"/>\n\t\t\t<xs:enumeration value=\"parking\"/>\n\t\t\t<xs:enumeration value=\"space\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpatialZoneTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"construction\"/>\n\t\t\t<xs:enumeration value=\"firesafety\"/>\n\t\t\t<xs:enumeration value=\"interference\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"occupancy\"/>\n\t\t\t<xs:enumeration value=\"reservation\"/>\n\t\t\t<xs:enumeration value=\"security\"/>\n\t\t\t<xs:enumeration value=\"thermal\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"ventilation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStackTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"birdcage\"/>\n\t\t\t<xs:enumeration value=\"cowl\"/>\n\t\t\t<xs:enumeration value=\"rainwaterhopper\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStairFlightTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curved\"/>\n\t\t\t<xs:enumeration value=\"freeform\"/>\n\t\t\t<xs:enumeration value=\"spiral\"/>\n\t\t\t<xs:enumeration value=\"straight\"/>\n\t\t\t<xs:enumeration value=\"winder\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStairTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curved_run_stair\"/>\n\t\t\t<xs:enumeration value=\"double_return_stair\"/>\n\t\t\t<xs:enumeration value=\"half_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"half_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"ladder\"/>\n\t\t\t<xs:enumeration value=\"quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"spiral_stair\"/>\n\t\t\t<xs:enumeration value=\"straight_run_stair\"/>\n\t\t\t<xs:enumeration value=\"three_quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"three_quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"two_curved_run_stair\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"two_straight_run_stair\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStateEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"locked\"/>\n\t\t\t<xs:enumeration value=\"readonly\"/>\n\t\t\t<xs:enumeration value=\"readonlylocked\"/>\n\t\t\t<xs:enumeration value=\"readwrite\"/>\n\t\t\t<xs:enumeration value=\"readwritelocked\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralCurveActivityTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"const\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"equidistant\"/>\n\t\t\t<xs:enumeration value=\"linear\"/>\n\t\t\t<xs:enumeration value=\"parabola\"/>\n\t\t\t<xs:enumeration value=\"polygonal\"/>\n\t\t\t<xs:enumeration value=\"sinus\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralCurveMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cable\"/>\n\t\t\t<xs:enumeration value=\"compression_member\"/>\n\t\t\t<xs:enumeration value=\"pin_joined_member\"/>\n\t\t\t<xs:enumeration value=\"rigid_joined_member\"/>\n\t\t\t<xs:enumeration value=\"tension_member\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralSurfaceActivityTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bilinear\"/>\n\t\t\t<xs:enumeration value=\"const\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"isocontour\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralSurfaceMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bending_element\"/>\n\t\t\t<xs:enumeration value=\"membrane_element\"/>\n\t\t\t<xs:enumeration value=\"shell\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSubContractResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"purchase\"/>\n\t\t\t<xs:enumeration value=\"work\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSurfaceFeatureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"defect\"/>\n\t\t\t<xs:enumeration value=\"hatchmarking\"/>\n\t\t\t<xs:enumeration value=\"linemarking\"/>\n\t\t\t<xs:enumeration value=\"mark\"/>\n\t\t\t<xs:enumeration value=\"nonskidsurfacing\"/>\n\t\t\t<xs:enumeration value=\"pavementsurfacemarking\"/>\n\t\t\t<xs:enumeration value=\"rumblestrip\"/>\n\t\t\t<xs:enumeration value=\"symbolmarking\"/>\n\t\t\t<xs:enumeration value=\"tag\"/>\n\t\t\t<xs:enumeration value=\"transverserumblestrip\"/>\n\t\t\t<xs:enumeration value=\"treatment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSurfaceSide\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"both\"/>\n\t\t\t<xs:enumeration value=\"negative\"/>\n\t\t\t<xs:enumeration value=\"positive\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSwitchingDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"contactor\"/>\n\t\t\t<xs:enumeration value=\"dimmerswitch\"/>\n\t\t\t<xs:enumeration value=\"emergencystop\"/>\n\t\t\t<xs:enumeration value=\"keypad\"/>\n\t\t\t<xs:enumeration value=\"momentaryswitch\"/>\n\t\t\t<xs:enumeration value=\"relay\"/>\n\t\t\t<xs:enumeration value=\"selectorswitch\"/>\n\t\t\t<xs:enumeration value=\"starter\"/>\n\t\t\t<xs:enumeration value=\"start_and_stop_equipment\"/>\n\t\t\t<xs:enumeration value=\"switchdisconnector\"/>\n\t\t\t<xs:enumeration value=\"toggleswitch\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSystemFurnitureElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"panel\"/>\n\t\t\t<xs:enumeration value=\"subrack\"/>\n\t\t\t<xs:enumeration value=\"worksurface\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTankTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"basin\"/>\n\t\t\t<xs:enumeration value=\"breakpressure\"/>\n\t\t\t<xs:enumeration value=\"expansion\"/>\n\t\t\t<xs:enumeration value=\"feedandexpansion\"/>\n\t\t\t<xs:enumeration value=\"oilretentiontray\"/>\n\t\t\t<xs:enumeration value=\"pressurevessel\"/>\n\t\t\t<xs:enumeration value=\"storage\"/>\n\t\t\t<xs:enumeration value=\"vessel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTaskDurationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"elapsedtime\"/>\n\t\t\t<xs:enumeration value=\"worktime\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTaskTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"adjustment\"/>\n\t\t\t<xs:enumeration value=\"attendance\"/>\n\t\t\t<xs:enumeration value=\"calibration\"/>\n\t\t\t<xs:enumeration value=\"construction\"/>\n\t\t\t<xs:enumeration value=\"demolition\"/>\n\t\t\t<xs:enumeration value=\"dismantle\"/>\n\t\t\t<xs:enumeration value=\"disposal\"/>\n\t\t\t<xs:enumeration value=\"emergency\"/>\n\t\t\t<xs:enumeration value=\"inspection\"/>\n\t\t\t<xs:enumeration value=\"installation\"/>\n\t\t\t<xs:enumeration value=\"logistic\"/>\n\t\t\t<xs:enumeration value=\"maintenance\"/>\n\t\t\t<xs:enumeration value=\"move\"/>\n\t\t\t<xs:enumeration value=\"operation\"/>\n\t\t\t<xs:enumeration value=\"removal\"/>\n\t\t\t<xs:enumeration value=\"renovation\"/>\n\t\t\t<xs:enumeration value=\"safety\"/>\n\t\t\t<xs:enumeration value=\"shutdown\"/>\n\t\t\t<xs:enumeration value=\"startup\"/>\n\t\t\t<xs:enumeration value=\"testing\"/>\n\t\t\t<xs:enumeration value=\"troubleshooting\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTendonAnchorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"coupler\"/>\n\t\t\t<xs:enumeration value=\"fixed_end\"/>\n\t\t\t<xs:enumeration value=\"tensioning_end\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTendonConduitTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"coupler\"/>\n\t\t\t<xs:enumeration value=\"diabolo\"/>\n\t\t\t<xs:enumeration value=\"duct\"/>\n\t\t\t<xs:enumeration value=\"grouting_duct\"/>\n\t\t\t<xs:enumeration value=\"trumpet\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTendonTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bar\"/>\n\t\t\t<xs:enumeration value=\"coated\"/>\n\t\t\t<xs:enumeration value=\"strand\"/>\n\t\t\t<xs:enumeration value=\"wire\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextPath\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"down\"/>\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"up\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeSeriesDataTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"continuous\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"discretebinary\"/>\n\t\t\t<xs:enumeration value=\"piecewisebinary\"/>\n\t\t\t<xs:enumeration value=\"piecewiseconstant\"/>\n\t\t\t<xs:enumeration value=\"piecewisecontinuous\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTrackElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blockingdevice\"/>\n\t\t\t<xs:enumeration value=\"derailer\"/>\n\t\t\t<xs:enumeration value=\"frog\"/>\n\t\t\t<xs:enumeration value=\"half_set_of_blades\"/>\n\t\t\t<xs:enumeration value=\"sleeper\"/>\n\t\t\t<xs:enumeration value=\"speedregulator\"/>\n\t\t\t<xs:enumeration value=\"trackendofalignment\"/>\n\t\t\t<xs:enumeration value=\"vehiclestop\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransformerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"chopper\"/>\n\t\t\t<xs:enumeration value=\"combined\"/>\n\t\t\t<xs:enumeration value=\"current\"/>\n\t\t\t<xs:enumeration value=\"frequency\"/>\n\t\t\t<xs:enumeration value=\"inverter\"/>\n\t\t\t<xs:enumeration value=\"rectifier\"/>\n\t\t\t<xs:enumeration value=\"voltage\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransitionCode\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"continuous\"/>\n\t\t\t<xs:enumeration value=\"contsamegradient\"/>\n\t\t\t<xs:enumeration value=\"contsamegradientsamecurvature\"/>\n\t\t\t<xs:enumeration value=\"discontinuous\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransportElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"craneway\"/>\n\t\t\t<xs:enumeration value=\"elevator\"/>\n\t\t\t<xs:enumeration value=\"escalator\"/>\n\t\t\t<xs:enumeration value=\"haulinggear\"/>\n\t\t\t<xs:enumeration value=\"liftinggear\"/>\n\t\t\t<xs:enumeration value=\"movingwalkway\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTrimmingPreference\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cartesian\"/>\n\t\t\t<xs:enumeration value=\"parameter\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTubeBundleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"finned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"absorbeddoseunit\"/>\n\t\t\t<xs:enumeration value=\"amountofsubstanceunit\"/>\n\t\t\t<xs:enumeration value=\"areaunit\"/>\n\t\t\t<xs:enumeration value=\"doseequivalentunit\"/>\n\t\t\t<xs:enumeration value=\"electriccapacitanceunit\"/>\n\t\t\t<xs:enumeration value=\"electricchargeunit\"/>\n\t\t\t<xs:enumeration value=\"electricconductanceunit\"/>\n\t\t\t<xs:enumeration value=\"electriccurrentunit\"/>\n\t\t\t<xs:enumeration value=\"electricresistanceunit\"/>\n\t\t\t<xs:enumeration value=\"electricvoltageunit\"/>\n\t\t\t<xs:enumeration value=\"energyunit\"/>\n\t\t\t<xs:enumeration value=\"forceunit\"/>\n\t\t\t<xs:enumeration value=\"frequencyunit\"/>\n\t\t\t<xs:enumeration value=\"illuminanceunit\"/>\n\t\t\t<xs:enumeration value=\"inductanceunit\"/>\n\t\t\t<xs:enumeration value=\"lengthunit\"/>\n\t\t\t<xs:enumeration value=\"luminousfluxunit\"/>\n\t\t\t<xs:enumeration value=\"luminousintensityunit\"/>\n\t\t\t<xs:enumeration value=\"magneticfluxdensityunit\"/>\n\t\t\t<xs:enumeration value=\"magneticfluxunit\"/>\n\t\t\t<xs:enumeration value=\"massunit\"/>\n\t\t\t<xs:enumeration value=\"planeangleunit\"/>\n\t\t\t<xs:enumeration value=\"powerunit\"/>\n\t\t\t<xs:enumeration value=\"pressureunit\"/>\n\t\t\t<xs:enumeration value=\"radioactivityunit\"/>\n\t\t\t<xs:enumeration value=\"solidangleunit\"/>\n\t\t\t<xs:enumeration value=\"thermodynamictemperatureunit\"/>\n\t\t\t<xs:enumeration value=\"timeunit\"/>\n\t\t\t<xs:enumeration value=\"volumeunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitaryControlElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"alarmpanel\"/>\n\t\t\t<xs:enumeration value=\"basestationcontroller\"/>\n\t\t\t<xs:enumeration value=\"combined\"/>\n\t\t\t<xs:enumeration value=\"controlpanel\"/>\n\t\t\t<xs:enumeration value=\"gasdetectionpanel\"/>\n\t\t\t<xs:enumeration value=\"humidistat\"/>\n\t\t\t<xs:enumeration value=\"indicatorpanel\"/>\n\t\t\t<xs:enumeration value=\"mimicpanel\"/>\n\t\t\t<xs:enumeration value=\"thermostat\"/>\n\t\t\t<xs:enumeration value=\"weatherstation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitaryEquipmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airconditioningunit\"/>\n\t\t\t<xs:enumeration value=\"airhandler\"/>\n\t\t\t<xs:enumeration value=\"dehumidifier\"/>\n\t\t\t<xs:enumeration value=\"rooftopunit\"/>\n\t\t\t<xs:enumeration value=\"splitsystem\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcValveTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airrelease\"/>\n\t\t\t<xs:enumeration value=\"antivacuum\"/>\n\t\t\t<xs:enumeration value=\"changeover\"/>\n\t\t\t<xs:enumeration value=\"check\"/>\n\t\t\t<xs:enumeration value=\"commissioning\"/>\n\t\t\t<xs:enumeration value=\"diverting\"/>\n\t\t\t<xs:enumeration value=\"doublecheck\"/>\n\t\t\t<xs:enumeration value=\"doubleregulating\"/>\n\t\t\t<xs:enumeration value=\"drawoffcock\"/>\n\t\t\t<xs:enumeration value=\"faucet\"/>\n\t\t\t<xs:enumeration value=\"flushing\"/>\n\t\t\t<xs:enumeration value=\"gascock\"/>\n\t\t\t<xs:enumeration value=\"gastap\"/>\n\t\t\t<xs:enumeration value=\"isolating\"/>\n\t\t\t<xs:enumeration value=\"mixing\"/>\n\t\t\t<xs:enumeration value=\"pressurereducing\"/>\n\t\t\t<xs:enumeration value=\"pressurerelief\"/>\n\t\t\t<xs:enumeration value=\"regulating\"/>\n\t\t\t<xs:enumeration value=\"safetycutoff\"/>\n\t\t\t<xs:enumeration value=\"steamtrap\"/>\n\t\t\t<xs:enumeration value=\"stopcock\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVehicleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cargo\"/>\n\t\t\t<xs:enumeration value=\"rollingstock\"/>\n\t\t\t<xs:enumeration value=\"vehicle\"/>\n\t\t\t<xs:enumeration value=\"vehicleair\"/>\n\t\t\t<xs:enumeration value=\"vehiclemarine\"/>\n\t\t\t<xs:enumeration value=\"vehicletracked\"/>\n\t\t\t<xs:enumeration value=\"vehiclewheeled\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVibrationDamperTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"axial_yield\"/>\n\t\t\t<xs:enumeration value=\"bending_yield\"/>\n\t\t\t<xs:enumeration value=\"friction\"/>\n\t\t\t<xs:enumeration value=\"rubber\"/>\n\t\t\t<xs:enumeration value=\"shear_yield\"/>\n\t\t\t<xs:enumeration value=\"viscous\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVibrationIsolatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"base\"/>\n\t\t\t<xs:enumeration value=\"compression\"/>\n\t\t\t<xs:enumeration value=\"spring\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVirtualElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"boundary\"/>\n\t\t\t<xs:enumeration value=\"clearance\"/>\n\t\t\t<xs:enumeration value=\"provisionforvoid\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVoidingFeatureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"chamfer\"/>\n\t\t\t<xs:enumeration value=\"cutout\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"hole\"/>\n\t\t\t<xs:enumeration value=\"miter\"/>\n\t\t\t<xs:enumeration value=\"notch\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWallTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"elementedwall\"/>\n\t\t\t<xs:enumeration value=\"movable\"/>\n\t\t\t<xs:enumeration value=\"parapet\"/>\n\t\t\t<xs:enumeration value=\"partitioning\"/>\n\t\t\t<xs:enumeration value=\"plumbingwall\"/>\n\t\t\t<xs:enumeration value=\"polygonal\"/>\n\t\t\t<xs:enumeration value=\"retainingwall\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"solidwall\"/>\n\t\t\t<xs:enumeration value=\"standard\"/>\n\t\t\t<xs:enumeration value=\"wavewall\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWasteTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floortrap\"/>\n\t\t\t<xs:enumeration value=\"floorwaste\"/>\n\t\t\t<xs:enumeration value=\"gullysump\"/>\n\t\t\t<xs:enumeration value=\"gullytrap\"/>\n\t\t\t<xs:enumeration value=\"roofdrain\"/>\n\t\t\t<xs:enumeration value=\"wastedisposalunit\"/>\n\t\t\t<xs:enumeration value=\"wastetrap\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowPanelOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bottomhung\"/>\n\t\t\t<xs:enumeration value=\"fixedcasement\"/>\n\t\t\t<xs:enumeration value=\"otheroperation\"/>\n\t\t\t<xs:enumeration value=\"pivothorizontal\"/>\n\t\t\t<xs:enumeration value=\"pivotvertical\"/>\n\t\t\t<xs:enumeration value=\"removablecasement\"/>\n\t\t\t<xs:enumeration value=\"sidehunglefthand\"/>\n\t\t\t<xs:enumeration value=\"sidehungrighthand\"/>\n\t\t\t<xs:enumeration value=\"slidinghorizontal\"/>\n\t\t\t<xs:enumeration value=\"slidingvertical\"/>\n\t\t\t<xs:enumeration value=\"tiltandturnlefthand\"/>\n\t\t\t<xs:enumeration value=\"tiltandturnrighthand\"/>\n\t\t\t<xs:enumeration value=\"tophung\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowPanelPositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bottom\"/>\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"middle\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"top\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"lightdome\"/>\n\t\t\t<xs:enumeration value=\"skylight\"/>\n\t\t\t<xs:enumeration value=\"window\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowTypePartitioningEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"double_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"double_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"single_panel\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_bottom\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_left\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_right\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_top\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkCalendarTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"firstshift\"/>\n\t\t\t<xs:enumeration value=\"secondshift\"/>\n\t\t\t<xs:enumeration value=\"thirdshift\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkPlanTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actual\"/>\n\t\t\t<xs:enumeration value=\"baseline\"/>\n\t\t\t<xs:enumeration value=\"planned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkScheduleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actual\"/>\n\t\t\t<xs:enumeration value=\"baseline\"/>\n\t\t\t<xs:enumeration value=\"planned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAbsorbedDoseMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAccelerationMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAmountOfSubstanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAngularVelocityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcArcIndex\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcArcIndex\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcArcIndex\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t<xs:maxLength value=\"3\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAreaDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAreaMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcBinary\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:hexBinary\"/>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"IfcBoolean\">\n\t\t<xs:restriction base=\"xs:boolean\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBoxAlignment\">\n\t\t<xs:restriction base=\"ifc:IfcLabel\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCardinalPointReference\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcComplexNumber\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcComplexNumber\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"xs:double\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"array\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcComplexNumber\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"xs:double\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t<xs:maxLength value=\"2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcCompoundPlaneAngleMeasure\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcCompoundPlaneAngleMeasure\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"xs:long\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcCompoundPlaneAngleMeasure\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"xs:long\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t<xs:maxLength value=\"4\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcContextDependentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCountMeasure\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurvatureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDate\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDateTime\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDayInMonthNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDayInWeekNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDescriptiveMeasure\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDimensionCount\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoseEquivalentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuration\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDynamicViscosityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricCapacitanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricChargeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricConductanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricCurrentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricResistanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricVoltageMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEnergyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontStyle\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontVariant\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontWeight\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFrequencyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGloballyUniqueId\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:minLength value=\"22\"/>\n\t\t\t<xs:maxLength value=\"22\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatFluxDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatingValueMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIdentifier\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:maxLength value=\"255\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIlluminanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInductanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInteger\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIntegerCountRateMeasure\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIonConcentrationMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIsothermalMoistureCapacityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcKinematicViscosityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLabel\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:maxLength value=\"255\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLanguageId\">\n\t\t<xs:restriction base=\"ifc:IfcIdentifier\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLengthMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcLineIndex\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcLineIndex\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcLineIndex\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearMomentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearStiffnessMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearVelocityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLogical\">\n\t\t<xs:restriction base=\"ifc:logical\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousFluxMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousIntensityDistributionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousIntensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMagneticFluxDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMagneticFluxMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassFlowRateMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassPerLengthMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfElasticityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMoistureDiffusivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMolecularWeightMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMomentOfInertiaMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMonetaryMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMonthInYearNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNonNegativeLengthMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNormalisedRatioMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNumericMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPHMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcParameterValue\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlanarForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlaneAngleMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveInteger\">\n\t\t<xs:restriction base=\"ifc:IfcInteger\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveLengthMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositivePlaneAngleMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcPlaneAngleMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveRatioMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPowerMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPresentableText\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPressureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcPropertySetDefinitionSet\">\n\t\t<xs:sequence>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t</xs:sequence>\n\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t</xs:complexType>\n\t<xs:simpleType name=\"IfcRadioActivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRatioMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReal\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalFrequencyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalMassMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalStiffnessMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionModulusMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionalAreaIntegralMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcShearModulusMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSolidAngleMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPowerLevelMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPowerMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPressureLevelMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPressureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecificHeatCapacityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecularExponent\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecularRoughness\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTemperatureGradientMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTemperatureRateOfChangeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcText\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextAlignment\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextDecoration\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextFontName\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextTransformation\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalAdmittanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalConductivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalExpansionCoefficientMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalResistanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalTransmittanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermodynamicTemperatureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTime\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeStamp\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTorqueMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcURIReference\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVaporPermeabilityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVolumeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVolumetricFlowRateMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWarpingConstantMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWarpingMomentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"Entity\" type=\"ifc:Entity\" abstract=\"true\" nillable=\"true\"/>\n\t<xs:complexType name=\"Entity\" abstract=\"true\">\n\t\t<xs:attribute name=\"href\" type=\"xs:anyURI\" use=\"optional\"/>\n\t\t<xs:attribute name=\"ref\" type=\"xs:IDREF\" use=\"optional\"/>\n\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t</xs:complexType>\n\t<xs:attributeGroup name=\"instanceAttributes\">\n\t\t<xs:attribute name=\"id\" type=\"xs:ID\" use=\"optional\"/>\n\t\t<xs:attribute name=\"path\" type=\"xs:NMTOKENS\" use=\"optional\"/>\n\t\t<xs:attribute name=\"pos\" use=\"optional\">\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:restriction>\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:list itemType=\"xs:integer\"/>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t<xs:minLength value=\"1\"/>\n\t\t\t\t</xs:restriction>\n\t\t\t</xs:simpleType>\n\t\t</xs:attribute>\n\t</xs:attributeGroup>\n\t<xs:attribute name=\"arraySize\">\n\t\t<xs:simpleType>\n\t\t\t<xs:restriction>\n\t\t\t\t<xs:simpleType>\n\t\t\t\t\t<xs:list itemType=\"xs:integer\"/>\n\t\t\t\t</xs:simpleType>\n\t\t\t\t<xs:minLength value=\"1\"/>\n\t\t\t</xs:restriction>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:attribute name=\"itemType\">\n\t\t<xs:simpleType>\n\t\t\t<xs:list itemType=\"xs:QName\"/>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:attribute name=\"cType\">\n\t\t<xs:simpleType>\n\t\t\t<xs:list itemType=\"ifc:aggregateType\"/>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:simpleType name=\"aggregateType\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:enumeration value=\"array\"/>\n\t\t\t<xs:enumeration value=\"list\"/>\n\t\t\t<xs:enumeration value=\"set\"/>\n\t\t\t<xs:enumeration value=\"bag\"/>\n\t\t\t<xs:enumeration value=\"array-unique\"/>\n\t\t\t<xs:enumeration value=\"array-optional\"/>\n\t\t\t<xs:enumeration value=\"array-optional-unique\"/>\n\t\t\t<xs:enumeration value=\"list-unique\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:complexType name=\"hexBinary\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"xs:hexBinary\">\n\t\t\t\t<xs:attribute name=\"extraBits\" type=\"xs:integer\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"logical\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:enumeration value=\"false\"/>\n\t\t\t<xs:enumeration value=\"true\"/>\n\t\t\t<xs:enumeration value=\"unknown\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"Seq-IfcPositiveInteger\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"3\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcAbsorbedDoseMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAbsorbedDoseMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAccelerationMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAccelerationMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAmountOfSubstanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAmountOfSubstanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAngularVelocityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAngularVelocityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcArcIndex-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcArcIndex\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAreaDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAreaMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcBinary-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBinary\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcBoolean-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBoolean\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcComplexNumber-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcComplexNumber\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCompoundPlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCompoundPlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcContextDependentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcContextDependentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCountMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCountMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCurvatureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCurvatureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDate-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDate\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDateTime-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDateTime\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDescriptiveMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDescriptiveMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDoseEquivalentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDoseEquivalentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDuration-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDuration\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDynamicViscosityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDynamicViscosityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricCapacitanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCapacitanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricChargeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricChargeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricConductanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricConductanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricCurrentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricResistanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricResistanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricVoltageMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricVoltageMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcEnergyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcFrequencyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFrequencyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcHeatFluxDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatFluxDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcHeatingValueMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatingValueMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIdentifier-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIdentifier\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIlluminanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIlluminanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcInductanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInductanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcInteger-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInteger\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIntegerCountRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIntegerCountRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIonConcentrationMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIonConcentrationMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIsothermalMoistureCapacityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcKinematicViscosityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcKinematicViscosityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLabel-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLabel\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLineIndex-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLineIndex\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearMomentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearMomentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearStiffnessMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearStiffnessMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearVelocityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearVelocityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLogical-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLogical\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousFluxMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousFluxMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousIntensityDistributionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityDistributionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousIntensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMagneticFluxDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMagneticFluxMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassFlowRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassFlowRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassPerLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassPerLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfElasticityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfElasticityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfLinearSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMoistureDiffusivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMoistureDiffusivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMolecularWeightMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMolecularWeightMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMomentOfInertiaMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMomentOfInertiaMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMonetaryMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMonetaryMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNonNegativeLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNonNegativeLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNormalisedRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNormalisedRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNumericMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNumericMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPHMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPHMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcParameterValue-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcParameterValue\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPlanarForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlanarForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveInteger-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveInteger\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositivePlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositivePlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPowerMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPowerMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPressureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPressureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPropertySetDefinitionSet-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:complexContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinitionSet\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:complexContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRadioActivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRadioActivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcReal-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcReal\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalFrequencyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalFrequencyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalMassMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalMassMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalStiffnessMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalStiffnessMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSectionModulusMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionModulusMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSectionalAreaIntegralMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionalAreaIntegralMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcShearModulusMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcShearModulusMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSolidAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSolidAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPowerLevelMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerLevelMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPowerMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPressureLevelMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureLevelMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPressureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecificHeatCapacityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecificHeatCapacityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecularExponent-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularExponent\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecularRoughness-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularRoughness\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTemperatureGradientMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureGradientMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTemperatureRateOfChangeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureRateOfChangeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcText-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcText\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTextFontName-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTextFontName\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalAdmittanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalAdmittanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalConductivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalConductivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalExpansionCoefficientMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalExpansionCoefficientMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalResistanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalResistanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalTransmittanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalTransmittanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermodynamicTemperatureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermodynamicTemperatureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTime-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTime\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTimeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTimeStamp-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeStamp\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTorqueMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTorqueMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVaporPermeabilityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVaporPermeabilityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVolumeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVolumetricFlowRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumetricFlowRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcWarpingConstantMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingConstantMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcWarpingMomentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingMomentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n</xs:schema>\n"
  },
  {
    "path": "Install/Program Files to Install/IFCCertifiedEntitiesAndPSets.json",
    "content": "{\n\t\"IFC2X3CV2\" : {\n\t\t\"Version\" : \"V2.0\",\n\t\t\"EntityList\" : [\n\t\t\t\"IfcActorRole\",\n\t\t\t\"IfcActuatorType\",\n\t\t\t\"IfcAirTerminalBoxType\",\n\t\t\t\"IfcAirTerminalType\",\n\t\t\t\"IfcAirToAirHeatRecoveryType\",\n\t\t\t\"IfcAlarmType\",\n\t\t\t\"IfcApplication\",\n\t\t\t\"IfcArbitraryClosedProfileDef\",\n\t\t\t\"IfcArbitraryOpenProfileDef\",\n\t\t\t\"IfcArbitraryProfileDefWithVoids\",\n\t\t\t\"IfcAsymmetricIShapeProfileDef\",\n\t\t\t\"IfcAxis1Placement\",\n\t\t\t\"IfcAxis2Placement2D\",\n\t\t\t\"IfcAxis2Placement3D\",\n\t\t\t\"IfcBeam\",\n\t\t\t\"IfcBeamType\",\n\t\t\t\"IfcBoilerType\",\n\t\t\t\"IfcBooleanClippingResult\",\n\t\t\t\"IfcBooleanResult\",\n\t\t\t\"IfcBoundingBox\",\n\t\t\t\"IfcBuilding\",\n\t\t\t\"IfcBuildingElementPart\",\n\t\t\t\"IfcBuildingElementProxy\",\n\t\t\t\"IfcBuildingElementProxyType\",\n\t\t\t\"IfcBuildingStorey\",\n\t\t\t\"IfcCableCarrierFittingType\",\n\t\t\t\"IfcCableCarrierSegmentType\",\n\t\t\t\"IfcCableSegmentType\",\n\t\t\t\"IfcCartesianPoint\",\n\t\t\t\"IfcCartesianTransformationOperator2D\",\n\t\t\t\"IfcCartesianTransformationOperator2DnonUniform\",\n\t\t\t\"IfcCartesianTransformationOperator3D\",\n\t\t\t\"IfcCartesianTransformationOperator3DnonUniform\",\n\t\t\t\"IfcCenterLineProfileDef\",\n\t\t\t\"IfcChillerType\",\n\t\t\t\"IfcCircle\",\n\t\t\t\"IfcCircleHollowProfileDef\",\n\t\t\t\"IfcCircleProfileDef\",\n\t\t\t\"IfcClassification\",\n\t\t\t\"IfcClassificationReference\",\n\t\t\t\"IfcClosedShell\",\n\t\t\t\"IfcCoilType\",\n\t\t\t\"IfcColourRgb\",\n\t\t\t\"IfcColumn\",\n\t\t\t\"IfcColumnType\",\n\t\t\t\"IfcComplexProperty\",\n\t\t\t\"IfcCompositeCurve\",\n\t\t\t\"IfcCompositeCurveSegment\",\n\t\t\t\"IfcCompositeProfileDef\",\n\t\t\t\"IfcCompressorType\",\n\t\t\t\"IfcCondenserType\",\n\t\t\t\"IfcConnectedFaceSet\",\n\t\t\t\"IfcContextDependentUnit\",\n\t\t\t\"IfcControllerType\",\n\t\t\t\"IfcConversionBasedUnit\",\n\t\t\t\"IfcCooledBeamType\",\n\t\t\t\"IfcCoolingTowerType\",\n\t\t\t\"IfcCovering\",\n\t\t\t\"IfcCoveringType\",\n\t\t\t\"IfcCShapeProfileDef\",\n\t\t\t\"IfcCurtainWall\",\n\t\t\t\"IfcCurtainWallType\",\n\t\t\t\"IfcCurveStyle\",\n\t\t\t\"IfcDamperType\",\n\t\t\t\"IfcDerivedProfileDef\",\n\t\t\t\"IfcDerivedUnit\",\n\t\t\t\"IfcDerivedUnitElement\",\n\t\t\t\"IfcDimensionalExponents\",\n\t\t\t\"IfcDirection\",\n\t\t\t\"IfcDiscreteAccessory\",\n\t\t\t\"IfcDiscreteAccessoryType\",\n\t\t\t\"IfcDistributionChamberElement\",\n\t\t\t\"IfcDistributionChamberElementType\",\n\t\t\t\"IfcDistributionControlElement\",\n\t\t\t\"IfcDistributionElement\",\n\t\t\t\"IfcDistributionElementType\",\n\t\t\t\"IfcDistributionFlowElement\",\n\t\t\t\"IfcDistributionPort\",\n\t\t\t\"IfcDoor\",\n\t\t\t\"IfcDoorLiningProperties\",\n\t\t\t\"IfcDoorPanelProperties\",\n\t\t\t\"IfcDoorStyle\",\n\t\t\t\"IfcDuctFittingType\",\n\t\t\t\"IfcDuctSegmentType\",\n\t\t\t\"IfcDuctSilencerType\",\n\t\t\t\"IfcElectricalElement\",\n\t\t\t\"IfcElectricApplianceType\",\n\t\t\t\"IfcElectricFlowStorageDeviceType\",\n\t\t\t\"IfcElectricGeneratorType\",\n\t\t\t\"IfcElectricMotorType\",\n\t\t\t\"IfcElectricTimeControlType\",\n\t\t\t\"IfcElementAssembly\",\n\t\t\t\"IfcEllipse\",\n\t\t\t\"IfcEllipseProfileDef\",\n\t\t\t\"IfcEnergyConversionDevice\",\n\t\t\t\"IfcEvaporativeCoolerType\",\n\t\t\t\"IfcEvaporatorType\",\n\t\t\t\"IfcExtrudedAreaSolid\",\n\t\t\t\"IfcFace\",\n\t\t\t\"IfcFaceBasedSurfaceModel\",\n\t\t\t\"IfcFaceBound\",\n\t\t\t\"IfcFaceOuterBound\",\n\t\t\t\"IfcFacetedBrep\",\n\t\t\t\"IfcFanType\",\n\t\t\t\"IfcFastener\",\n\t\t\t\"IfcFastenerType\",\n\t\t\t\"IfcFilterType\",\n\t\t\t\"IfcFireSuppressionTerminalType\",\n\t\t\t\"IfcFlowController\",\n\t\t\t\"IfcFlowFitting\",\n\t\t\t\"IfcFlowInstrumentType\",\n\t\t\t\"IfcFlowMeterType\",\n\t\t\t\"IfcFlowMovingDevice\",\n\t\t\t\"IfcFlowSegment\",\n\t\t\t\"IfcFlowStorageDevice\",\n\t\t\t\"IfcFlowTerminal\",\n\t\t\t\"IfcFlowTreatmentDevice\",\n\t\t\t\"IfcFooting\",\n\t\t\t\"IfcFurnishingElement\",\n\t\t\t\"IfcFurnishingElementType\",\n\t\t\t\"IfcGeometricCurveSet\",\n\t\t\t\"IfcGeometricRepresentationContext\",\n\t\t\t\"IfcGeometricRepresentationSubContext\",\n\t\t\t\"IfcGeometricSet\",\n\t\t\t\"IfcGrid\",\n\t\t\t\"IfcGridAxis\",\n\t\t\t\"IfcGroup\",\n\t\t\t\"IfcHalfSpaceSolid\",\n\t\t\t\"IfcHeatExchangerType\",\n\t\t\t\"IfcHumidifierType\",\n\t\t\t\"IfcIShapeProfileDef\",\n\t\t\t\"IfcJunctionBoxType\",\n\t\t\t\"IfcLampType\",\n\t\t\t\"IfcLightFixtureType\",\n\t\t\t\"IfcLine\",\n\t\t\t\"IfcLocalPlacement\",\n\t\t\t\"IfcLoop\",\n\t\t\t\"IfcLShapeProfileDef\",\n\t\t\t\"IfcMappedItem\",\n\t\t\t\"IfcMaterial\",\n\t\t\t\"IfcMaterialClassificationRelationship\",\n\t\t\t\"IfcMaterialDefinitionRepresentation\",\n\t\t\t\"IfcMaterialLayer\",\n\t\t\t\"IfcMaterialLayerSet\",\n\t\t\t\"IfcMaterialLayerSetUsage\",\n\t\t\t\"IfcMaterialList\",\n\t\t\t\"IfcMeasureWithUnit\",\n\t\t\t\"IfcMechanicalFastener\",\n\t\t\t\"IfcMechanicalFastenerType\",\n\t\t\t\"IfcMember\",\n\t\t\t\"IfcMemberType\",\n\t\t\t\"IfcMotorConnectionType\",\n\t\t\t\"IfcOpeningElement\",\n\t\t\t\"IfcOpenShell\",\n\t\t\t\"IfcOrganization\",\n\t\t\t\"IfcOrganizationRelationship\",\n\t\t\t\"IfcOutletType\",\n\t\t\t\"IfcOwnerHistory\",\n\t\t\t\"IfcPerson\",\n\t\t\t\"IfcPersonAndOrganization\",\n\t\t\t\"IfcPile\",\n\t\t\t\"IfcPipeFittingType\",\n\t\t\t\"IfcPipeSegmentType\",\n\t\t\t\"IfcPlane\",\n\t\t\t\"IfcPlate\",\n\t\t\t\"IfcPlateType\",\n\t\t\t\"IfcPolyline\",\n\t\t\t\"IfcPolyLoop\",\n\t\t\t\"IfcPostalAddress\",\n\t\t\t\"IfcPresentationLayerAssignment\",\n\t\t\t\"IfcPresentationLayerWithStyle\",\n\t\t\t\"IfcPresentationStyleAssignment\",\n\t\t\t\"IfcProductDefinitionShape\",\n\t\t\t\"IfcProject\",\n\t\t\t\"IfcPropertyBoundedValue\",\n\t\t\t\"IfcPropertyEnumeratedValue\",\n\t\t\t\"IfcPropertyEnumeration\",\n\t\t\t\"IfcPropertyListValue\",\n\t\t\t\"IfcPropertySet\",\n\t\t\t\"IfcPropertySingleValue\",\n\t\t\t\"IfcPropertyTableValue\",\n\t\t\t\"IfcProtectiveDeviceType\",\n\t\t\t\"IfcPumpType\",\n\t\t\t\"IfcRailing\",\n\t\t\t\"IfcRailingType\",\n\t\t\t\"IfcRamp\",\n\t\t\t\"IfcRampFlight\",\n\t\t\t\"IfcRampFlightType\",\n\t\t\t\"IfcRectangleHollowProfileDef\",\n\t\t\t\"IfcRectangleProfileDef\",\n\t\t\t\"IfcReinforcingBar\",\n\t\t\t\"IfcReinforcingMesh\",\n\t\t\t\"IfcRelAssignsToGroup\",\n\t\t\t\"IfcRelAssociatesClassification\",\n\t\t\t\"IfcRelAssociatesDocument\",\n\t\t\t\"IfcRelAssociatesMaterial\",\n\t\t\t\"IfcRelConnectsElements\",\n\t\t\t\"IfcRelConnectsPathElements\",\n\t\t\t\"IfcRelConnectsPorts\",\n\t\t\t\"IfcRelConnectsPortToElement\",\n\t\t\t\"IfcRelConnectsWithRealizingElements\",\n\t\t\t\"IfcRelContainedInSpatialStructure\",\n\t\t\t\"IfcRelCoversBldgElements\",\n\t\t\t\"IfcRelDefinesByProperties\",\n\t\t\t\"IfcRelDefinesByType\",\n\t\t\t\"IfcRelFillsElement\",\n\t\t\t\"IfcRelFlowControlElements\",\n\t\t\t\"IfcRelServicesBuildings\",\n\t\t\t\"IfcRelVoidsElement\",\n\t\t\t\"IfcRepresentationMap\",\n\t\t\t\"IfcRevolvedAreaSolid\",\n\t\t\t\"IfcRoof\",\n\t\t\t\"IfcRoundedRectangleProfileDef\",\n\t\t\t\"IfcSanitaryTerminalType\",\n\t\t\t\"IfcSensorType\",\n\t\t\t\"IfcShapeRepresentation\",\n\t\t\t\"IfcSite\",\n\t\t\t\"IfcSIUnit\",\n\t\t\t\"IfcSlab\",\n\t\t\t\"IfcSlabType\",\n\t\t\t\"IfcSpace\",\n\t\t\t\"IfcSpaceType\",\n\t\t\t\"IfcStackTerminalType\",\n\t\t\t\"IfcStair\",\n\t\t\t\"IfcStairFlight\",\n\t\t\t\"IfcStairFlightType\",\n\t\t\t\"IfcStyledItem\",\n\t\t\t\"IfcStyledRepresentation\",\n\t\t\t\"IfcSurfaceCurveSweptAreaSolid\",\n\t\t\t\"IfcSurfaceStyle\",\n\t\t\t\"IfcSurfaceStyleRendering\",\n\t\t\t\"IfcSurfaceStyleShading\",\n\t\t\t\"IfcSweptDiskSolid\",\n\t\t\t\"IfcSwitchingDeviceType\",\n\t\t\t\"IfcSystem\",\n\t\t\t\"IfcTankType\",\n\t\t\t\"IfcTelecomAddress\",\n\t\t\t\"IfcTendon\",\n\t\t\t\"IfcTendonAnchor\",\n\t\t\t\"IfcTransformerType\",\n\t\t\t\"IfcTransportElement\",\n\t\t\t\"IfcTransportElementType\",\n\t\t\t\"IfcTrimmedCurve\",\n\t\t\t\"IfcTShapeProfileDef\",\n\t\t\t\"IfcTubeBundleType\",\n\t\t\t\"IfcTypeProduct\",\n\t\t\t\"IfcUnitaryEquipmentType\",\n\t\t\t\"IfcUnitAssignment\",\n\t\t\t\"IfcUShapeProfileDef\",\n\t\t\t\"IfcValveType\",\n\t\t\t\"IfcVector\",\n\t\t\t\"IfcWall\",\n\t\t\t\"IfcWallStandardCase\",\n\t\t\t\"IfcWallType\",\n\t\t\t\"IfcWasteTerminalType\",\n\t\t\t\"IfcWindow\",\n\t\t\t\"IfcWindowLiningProperties\",\n\t\t\t\"IfcWindowPanelProperties\",\n\t\t\t\"IfcWindowStyle\",\n\t\t\t\"IfcZone\",\n\t\t\t\"IfcZShapeProfileDef\"\n\t\t],\n\t\t\"PropertySetList\" : [\n\t\t\t\"Pset_ActionRequest\",\n\t\t\t\"Pset_ActorCommon\",\n\t\t\t\"Pset_ActuatorTypeCommon\",\n\t\t\t\"Pset_ActuatorTypeElectricActuator\",\n\t\t\t\"Pset_ActuatorTypeHydraulicActuator\",\n\t\t\t\"Pset_ActuatorTypeLinearActuation\",\n\t\t\t\"Pset_ActuatorTypePneumaticActuator\",\n\t\t\t\"Pset_ActuatorTypeRotationalActuation\",\n\t\t\t\"Pset_AirSideSystemInformation\",\n\t\t\t\"Pset_AirTerminalBoxPHistory\",\n\t\t\t\"Pset_AirTerminalBoxTypeCommon\",\n\t\t\t\"Pset_AirTerminalPHistory\",\n\t\t\t\"Pset_AirTerminalTypeCommon\",\n\t\t\t\"Pset_AirTerminalTypeRectangular\",\n\t\t\t\"Pset_AirTerminalTypeRound\",\n\t\t\t\"Pset_AirTerminalTypeSlot\",\n\t\t\t\"Pset_AirTerminalTypeSquare\",\n\t\t\t\"Pset_AirToAirHeatRecoveryPHist\",\n\t\t\t\"Pset_AirToAirHeatRecoveryTypeCommon\",\n\t\t\t\"Pset_AnalogInput\",\n\t\t\t\"Pset_AnalogOutput\",\n\t\t\t\"Pset_Asset\",\n\t\t\t\"Pset_BeamCommon\",\n\t\t\t\"Pset_BinaryInput\",\n\t\t\t\"Pset_BinaryOutput\",\n\t\t\t\"Pset_BoilerPHistory\",\n\t\t\t\"Pset_BoilerTypeCommon\",\n\t\t\t\"Pset_BoilerTypeSteam\",\n\t\t\t\"Pset_BuildingCommon\",\n\t\t\t\"Pset_BuildingElementProxyCommon\",\n\t\t\t\"Pset_BuildingStoreyCommon\",\n\t\t\t\"Pset_BuildingUse\",\n\t\t\t\"Pset_BuildingUseAdjacent\",\n\t\t\t\"Pset_BuildingWaterStorage\",\n\t\t\t\"Pset_CableCarrierSegmentTypeCableLadderSegment\",\n\t\t\t\"Pset_CableCarrierSegmentTypeCableTraySegment\",\n\t\t\t\"Pset_CableCarrierSegmentTypeCableTrunkingSegment\",\n\t\t\t\"Pset_CableCarrierSegmentTypeConduitSegment\",\n\t\t\t\"Pset_CableSegmentTypeCableSegment\",\n\t\t\t\"Pset_CableSegmentTypeConductorSegment\",\n\t\t\t\"Pset_ChillerPHistory\",\n\t\t\t\"Pset_ChillerTypeCommon\",\n\t\t\t\"Pset_CoilPHistory\",\n\t\t\t\"Pset_CoilTypeCommon\",\n\t\t\t\"Pset_CoilTypeHydronic\",\n\t\t\t\"Pset_ColumnCommon\",\n\t\t\t\"Pset_CompressorPHistory\",\n\t\t\t\"Pset_CompressorTypeCommon\",\n\t\t\t\"Pset_ConcreteElementGeneral\",\n\t\t\t\"Pset_ConcreteElementQuantityGeneral\",\n\t\t\t\"Pset_ConcreteElementSurfaceFinishQuantityGeneral\",\n\t\t\t\"Pset_CondenserPHistory\",\n\t\t\t\"Pset_CondenserTypeCommon\",\n\t\t\t\"Pset_ControllerTypeCommon\",\n\t\t\t\"Pset_ControllerTypeProportional\",\n\t\t\t\"Pset_ControllerTypeTwoPosition\",\n\t\t\t\"Pset_CooledBeamPHistory\",\n\t\t\t\"Pset_CooledBeamPHistoryActive\",\n\t\t\t\"Pset_CooledBeamTypeActive\",\n\t\t\t\"Pset_CooledBeamTypeCommon\",\n\t\t\t\"Pset_CoolingTowerPHistory\",\n\t\t\t\"Pset_CoolingTowerTypeCommon\",\n\t\t\t\"Pset_CoveringCeiling\",\n\t\t\t\"Pset_CoveringCommon\",\n\t\t\t\"Pset_CoveringFlooring\",\n\t\t\t\"Pset_CurtainWallCommon\",\n\t\t\t\"Pset_DamperPHistory\",\n\t\t\t\"Pset_DamperTypeCommon\",\n\t\t\t\"Pset_DamperTypeControlDamper\",\n\t\t\t\"Pset_DamperTypeFireDamper\",\n\t\t\t\"Pset_DamperTypeFireSmokeDamper\",\n\t\t\t\"Pset_DamperTypeSmokeDamper\",\n\t\t\t\"Pset_DesignPoint\",\n\t\t\t\"Pset_DiscreteAccessoryAnchorBolt\",\n\t\t\t\"Pset_DiscreteAccessoryColumnShoe\",\n\t\t\t\"Pset_DiscreteAccessoryCornerFixingPlate\",\n\t\t\t\"Pset_DiscreteAccessoryDiagonalTrussConnector\",\n\t\t\t\"Pset_DiscreteAccessoryEdgeFixingPlate\",\n\t\t\t\"Pset_DiscreteAccessoryFixingSocket\",\n\t\t\t\"Pset_DiscreteAccessoryLadderTrussConnector\",\n\t\t\t\"Pset_DiscreteAccessoryStandardFixingPlate\",\n\t\t\t\"Pset_DiscreteAccessoryWireLoop\",\n\t\t\t\"Pset_DistributionChamberElementTypeFormedDuct\",\n\t\t\t\"Pset_DistributionChamberElementTypeInspectionChamber\",\n\t\t\t\"Pset_DistributionChamberElementTypeInspectionPit\",\n\t\t\t\"Pset_DistributionChamberElementTypeManhole\",\n\t\t\t\"Pset_DistributionChamberElementTypeMeterChamber\",\n\t\t\t\"Pset_DistributionChamberElementTypeSump\",\n\t\t\t\"Pset_DistributionChamberElementTypeTrench\",\n\t\t\t\"Pset_DistributionChamberElementTypeValveChamber\",\n\t\t\t\"Pset_DistributionFlowElementCommon\",\n\t\t\t\"Pset_DistributionPortDuct\",\n\t\t\t\"Pset_DistributionPortPipe\",\n\t\t\t\"Pset_DoorCommon\",\n\t\t\t\"Pset_DoorWindowGlazingType\",\n\t\t\t\"Pset_DoorWindowShadingType\",\n\t\t\t\"Pset_DrainageCatchment\",\n\t\t\t\"Pset_DrainageCulvert\",\n\t\t\t\"Pset_DrainageOutfall\",\n\t\t\t\"Pset_DrainageReserve\",\n\t\t\t\"Pset_Draughting\",\n\t\t\t\"Pset_DuctConnection\",\n\t\t\t\"Pset_DuctDesignCriteria\",\n\t\t\t\"Pset_DuctFittingPHistory\",\n\t\t\t\"Pset_DuctFittingTypeCommon\",\n\t\t\t\"Pset_DuctSegmentPHistory\",\n\t\t\t\"Pset_DuctSegmentTypeCommon\",\n\t\t\t\"Pset_DuctSilencerPHistory\",\n\t\t\t\"Pset_DuctSilencerTypeCommon\",\n\t\t\t\"Pset_ElectricalCircuit\",\n\t\t\t\"Pset_ElectricalDeviceCommon\",\n\t\t\t\"Pset_ElectricDistributionPointCommon\",\n\t\t\t\"Pset_ElectricGeneratorTypeCommon\",\n\t\t\t\"Pset_ElectricHeaterTypeElectricalCableHeater\",\n\t\t\t\"Pset_ElectricHeaterTypeElectricalMatHeater\",\n\t\t\t\"Pset_ElectricHeaterTypeElectricalPointHeater\",\n\t\t\t\"Pset_ElectricMotorTypeCommon\",\n\t\t\t\"Pset_ElementShading\",\n\t\t\t\"Pset_EnergyConsumptionPHistoryElectricity\",\n\t\t\t\"Pset_EnergyConsumptionPHistoryFuel\",\n\t\t\t\"Pset_EnergyConsumptionPHistorySteam\",\n\t\t\t\"Pset_EnergyConversionDeviceCoil\",\n\t\t\t\"Pset_EnergyConversionDeviceSpaceHeaterPanel\",\n\t\t\t\"Pset_EnergyConversionDeviceSpaceHeaterSectional\",\n\t\t\t\"Pset_EvaporativeCoolerPHistory\",\n\t\t\t\"Pset_EvaporativeCoolerTypeCommon\",\n\t\t\t\"Pset_EvaporatorPHistory\",\n\t\t\t\"Pset_EvaporatorTypeCommon\",\n\t\t\t\"Pset_FanPHistory\",\n\t\t\t\"Pset_FanTypeCommon\",\n\t\t\t\"Pset_FanTypeSmokeControl\",\n\t\t\t\"Pset_FilterPHistory\",\n\t\t\t\"Pset_FilterTypeAirParticleFilter\",\n\t\t\t\"Pset_FilterTypeCommon\",\n\t\t\t\"Pset_FireRatingProperties\",\n\t\t\t\"Pset_FireSuppressionTerminalTypeBreechingInlet\",\n\t\t\t\"Pset_FireSuppressionTerminalTypeFireHydrant\",\n\t\t\t\"Pset_FireSuppressionTerminalTypeHoseReel\",\n\t\t\t\"Pset_FireSuppressionTerminalTypeSprinkler\",\n\t\t\t\"Pset_FlowControllerDamper\",\n\t\t\t\"Pset_FlowControllerFlowMeter\",\n\t\t\t\"Pset_FlowFittingDuctFitting\",\n\t\t\t\"Pset_FlowFittingPipeFitting\",\n\t\t\t\"Pset_FlowInstrumentTypePressureGauge\",\n\t\t\t\"Pset_FlowInstrumentTypeThermometer\",\n\t\t\t\"Pset_FlowMeterTypeCommon\",\n\t\t\t\"Pset_FlowMeterTypeEnergyMeter\",\n\t\t\t\"Pset_FlowMeterTypeGasMeter\",\n\t\t\t\"Pset_FlowMeterTypeOilMeter\",\n\t\t\t\"Pset_FlowMeterTypeWaterMeter\",\n\t\t\t\"Pset_FlowMovingDeviceCompressor\",\n\t\t\t\"Pset_FlowMovingDeviceFan\",\n\t\t\t\"Pset_FlowMovingDeviceFanCentrifugal\",\n\t\t\t\"Pset_FlowMovingDevicePump\",\n\t\t\t\"Pset_FlowSegmentDuctSegment\",\n\t\t\t\"Pset_FlowSegmentPipeSegment\",\n\t\t\t\"Pset_FlowStorageDeviceTank\",\n\t\t\t\"Pset_FlowTerminalAirTerminal\",\n\t\t\t\"Pset_FurnitureTypeChair\",\n\t\t\t\"Pset_FurnitureTypeCommon\",\n\t\t\t\"Pset_FurnitureTypeDesk\",\n\t\t\t\"Pset_FurnitureTypeFileCabinet\",\n\t\t\t\"Pset_FurnitureTypeTable\",\n\t\t\t\"Pset_GasTerminalPHistory\",\n\t\t\t\"Pset_GasTerminalTypeCommon\",\n\t\t\t\"Pset_GasTerminalTypeGasAppliance\",\n\t\t\t\"Pset_GasTerminalTypeGasBurner\",\n\t\t\t\"Pset_HeatExchangerTypeCommon\",\n\t\t\t\"Pset_HeatExchangerTypePlate\",\n\t\t\t\"Pset_HumidifierPHistory\",\n\t\t\t\"Pset_HumidifierTypeCommon\",\n\t\t\t\"Pset_LampTypeCommon\",\n\t\t\t\"Pset_LightFixtureTypeCommon\",\n\t\t\t\"Pset_LightFixtureTypeExitSign\",\n\t\t\t\"Pset_LightFixtureTypeThermal\",\n\t\t\t\"Pset_ManufacturerOccurrence\",\n\t\t\t\"Pset_ManufacturerTypeInformation\",\n\t\t\t\"Pset_MemberCommon\",\n\t\t\t\"Pset_MultiStateInput\",\n\t\t\t\"Pset_MultiStateOutput\",\n\t\t\t\"Pset_OpeningElementCommon\",\n\t\t\t\"Pset_OutletTypeCommon\",\n\t\t\t\"Pset_OutsideDesignCriteria\",\n\t\t\t\"Pset_PackingInstructions\",\n\t\t\t\"Pset_Permit\",\n\t\t\t\"Pset_PipeConnection\",\n\t\t\t\"Pset_PipeConnectionFlanged\",\n\t\t\t\"Pset_PipeFittingPHistory\",\n\t\t\t\"Pset_PipeFittingTypeCommon\",\n\t\t\t\"Pset_PipeSegmentPHistory\",\n\t\t\t\"Pset_PipeSegmentTypeCommon\",\n\t\t\t\"Pset_PipeSegmentTypeGutter\",\n\t\t\t\"Pset_PlateCommon\",\n\t\t\t\"Pset_PrecastConcreteElementGeneral\",\n\t\t\t\"Pset_ProductRequirements\",\n\t\t\t\"Pset_ProjectCommon\",\n\t\t\t\"Pset_ProjectionElementShadingDevicePHistory\",\n\t\t\t\"Pset_ProjectOrderChangeOrder\",\n\t\t\t\"Pset_ProjectOrderMaintenanceWorkOrder\",\n\t\t\t\"Pset_ProjectOrderMoveOrder\",\n\t\t\t\"Pset_ProjectOrderPurchaseOrder\",\n\t\t\t\"Pset_ProjectOrderWorkOrder\",\n\t\t\t\"Pset_PropertyAgreement\",\n\t\t\t\"Pset_ProtectiveDeviceTypeCircuitBreaker\",\n\t\t\t\"Pset_ProtectiveDeviceTypeCommon\",\n\t\t\t\"Pset_ProtectiveDeviceTypeEarthFailureDevice\",\n\t\t\t\"Pset_ProtectiveDeviceTypeFuseDisconnector\",\n\t\t\t\"Pset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker\",\n\t\t\t\"Pset_ProtectiveDeviceTypeResidualCurrentSwitch\",\n\t\t\t\"Pset_ProtectiveDeviceTypeVaristor\",\n\t\t\t\"Pset_ProvisionForVoid\",\n\t\t\t\"Pset_PumpPHistory\",\n\t\t\t\"Pset_PumpTypeCommon\",\n\t\t\t\"Pset_QuantityTakeOff\",\n\t\t\t\"Pset_RailingCommon\",\n\t\t\t\"Pset_RampCommon\",\n\t\t\t\"Pset_RampFlightCommon\",\n\t\t\t\"Pset_ReinforcementBarCountOfIndependentFooting\",\n\t\t\t\"Pset_ReinforcementBarPitchOfBeam\",\n\t\t\t\"Pset_ReinforcementBarPitchOfColumn\",\n\t\t\t\"Pset_ReinforcementBarPitchOfContinuousFooting\",\n\t\t\t\"Pset_ReinforcementBarPitchOfSlab\",\n\t\t\t\"Pset_ReinforcementBarPitchOfWall\",\n\t\t\t\"Pset_ReinforcingBarBendingsBECCommon\",\n\t\t\t\"Pset_ReinforcingBarBendingsBS8666Common\",\n\t\t\t\"Pset_ReinforcingBarBendingsDIN135610Common\",\n\t\t\t\"Pset_ReinforcingBarBendingsISOCD3766Common\",\n\t\t\t\"Pset_Reliability\",\n\t\t\t\"Pset_Risk\",\n\t\t\t\"Pset_RoofCommon\",\n\t\t\t\"Pset_SanitaryTerminalTypeBath\",\n\t\t\t\"Pset_SanitaryTerminalTypeBidet\",\n\t\t\t\"Pset_SanitaryTerminalTypeCistern\",\n\t\t\t\"Pset_SanitaryTerminalTypeSanitaryFountain\",\n\t\t\t\"Pset_SanitaryTerminalTypeShower\",\n\t\t\t\"Pset_SanitaryTerminalTypeSink\",\n\t\t\t\"Pset_SanitaryTerminalTypeToiletPan\",\n\t\t\t\"Pset_SanitaryTerminalTypeUrinal\",\n\t\t\t\"Pset_SanitaryTerminalTypeWashHandBasin\",\n\t\t\t\"Pset_SanitaryTerminalTypeWCSeat\",\n\t\t\t\"Pset_SensorTypeCO2Sensor\",\n\t\t\t\"Pset_SensorTypeFireSensor\",\n\t\t\t\"Pset_SensorTypeGasSensor\",\n\t\t\t\"Pset_SensorTypeHeatSensor\",\n\t\t\t\"Pset_SensorTypeHumiditySensor\",\n\t\t\t\"Pset_SensorTypeLightSensor\",\n\t\t\t\"Pset_SensorTypeMovementSensor\",\n\t\t\t\"Pset_SensorTypePressureSensor\",\n\t\t\t\"Pset_SensorTypeSmokeSensor\",\n\t\t\t\"Pset_SensorTypeSoundSensor\",\n\t\t\t\"Pset_SensorTypeTemperatureSensor\",\n\t\t\t\"Pset_SiteCommon\",\n\t\t\t\"Pset_SlabCommon\",\n\t\t\t\"Pset_SpaceCommon\",\n\t\t\t\"Pset_SpaceFireSafetyRequirements\",\n\t\t\t\"Pset_SpaceHeaterPHistoryCommon\",\n\t\t\t\"Pset_SpaceHeaterTypeCommon\",\n\t\t\t\"Pset_SpaceHeaterTypeHydronic\",\n\t\t\t\"Pset_SpaceLightingRequirements\",\n\t\t\t\"Pset_SpaceOccupancyRequirements\",\n\t\t\t\"Pset_SpaceParking\",\n\t\t\t\"Pset_SpaceParkingAisle\",\n\t\t\t\"Pset_SpaceProgramCommon\",\n\t\t\t\"Pset_SpaceThermalDesign\",\n\t\t\t\"Pset_SpaceThermalPHistory\",\n\t\t\t\"Pset_SpaceThermalRequirements\",\n\t\t\t\"Pset_StairCommon\",\n\t\t\t\"Pset_StairFlightCommon\",\n\t\t\t\"Pset_SwitchingDeviceTypeCommon\",\n\t\t\t\"Pset_SwitchingDeviceTypeContactor\",\n\t\t\t\"Pset_SwitchingDeviceTypeEmergencyStop\",\n\t\t\t\"Pset_SwitchingDeviceTypeStarter\",\n\t\t\t\"Pset_SwitchingDeviceTypeSwitchDisconnector\",\n\t\t\t\"Pset_SwitchingDeviceTypeToggleSwitch\",\n\t\t\t\"Pset_SystemFurnitureElementTypeCommon\",\n\t\t\t\"Pset_SystemFurnitureElementTypePanel\",\n\t\t\t\"Pset_SystemFurnitureElementTypeWorkSurface\",\n\t\t\t\"Pset_TankTypeCommon\",\n\t\t\t\"Pset_TankTypeExpansion\",\n\t\t\t\"Pset_TankTypePreformed\",\n\t\t\t\"Pset_TankTypePressureVessel\",\n\t\t\t\"Pset_TankTypeSectional\",\n\t\t\t\"Pset_ThermalLoadAggregate\",\n\t\t\t\"Pset_ThermalLoadDesignCriteria\",\n\t\t\t\"Pset_TransformerTypeCommon\",\n\t\t\t\"Pset_TransportElementCommon\",\n\t\t\t\"Pset_TransportElementElevator\",\n\t\t\t\"Pset_TubeBundleTypeCommon\",\n\t\t\t\"Pset_TubeBundleTypeFinned\",\n\t\t\t\"Pset_UnitaryEquipmentTypeAirConditioningUnit\",\n\t\t\t\"Pset_UnitaryEquipmentTypeAirHandler\",\n\t\t\t\"Pset_UtilityConsumption\",\n\t\t\t\"Pset_ValvePHistory\",\n\t\t\t\"Pset_ValveTypeAirRelease\",\n\t\t\t\"Pset_ValveTypeCommon\",\n\t\t\t\"Pset_ValveTypeDrawOffCock\",\n\t\t\t\"Pset_ValveTypeFaucet\",\n\t\t\t\"Pset_ValveTypeFlushing\",\n\t\t\t\"Pset_ValveTypeGasTap\",\n\t\t\t\"Pset_ValveTypeIsolating\",\n\t\t\t\"Pset_ValveTypeMixing\",\n\t\t\t\"Pset_ValveTypePressureReducing\",\n\t\t\t\"Pset_ValveTypePressureRelief\",\n\t\t\t\"Pset_VibrationIsolatorTypeCommon\",\n\t\t\t\"Pset_WallCommon\",\n\t\t\t\"Pset_Warranty\",\n\t\t\t\"Pset_WasteTerminalTypeFloorTrap\",\n\t\t\t\"Pset_WasteTerminalTypeFloorWaste\",\n\t\t\t\"Pset_WasteTerminalTypeGreaseInterceptor\",\n\t\t\t\"Pset_WasteTerminalTypeGullySump\",\n\t\t\t\"Pset_WasteTerminalTypeGullyTrap\",\n\t\t\t\"Pset_WasteTerminalTypeOilInterceptor\",\n\t\t\t\"Pset_WasteTerminalTypePetrolInterceptor\",\n\t\t\t\"Pset_WasteTerminalTypeRoofDrain\",\n\t\t\t\"Pset_WasteTerminalTypeWasteDisposalUnit\",\n\t\t\t\"Pset_WasteTerminalTypeWasteTrap\",\n\t\t\t\"Pset_WindowCommon\",\n\t\t\t\"Pset_ZoneCommon\",\n\t\t\t\"Qto_BeamBaseQuantities\",\n\t\t\t\"Qto_BuildingBaseQuantities\",\n\t\t\t\"Qto_BuildingStoreyBaseQuantities\",\n\t\t\t\"Qto_CableCarrierFittingBaseQuantities\",\n\t\t\t\"Qto_CableCarrierSegmentBaseQuantities\",\n\t\t\t\"Qto_CableSegmentBaseQuantities\",\n\t\t\t\"Qto_ColumnBaseQuantities\",\n\t\t\t\"Qto_CoveringBaseQuantities\",\n\t\t\t\"Qto_CurtainWallQuantities\",\n\t\t\t\"Qto_DoorBaseQuantities\",\n\t\t\t\"Qto_DuctFittingBaseQuantities\",\n\t\t\t\"Qto_ElectricApplianceBaseQuantities\",\n\t\t\t\"Qto_MemberBaseQuantities\",\n\t\t\t\"Qto_OpeningElementBaseQuantities\",\n\t\t\t\"Qto_PileBaseQuantities\",\n\t\t\t\"Qto_PlateBaseQuantities\",\n\t\t\t\"Qto_RailingBaseQuantities\",\n\t\t\t\"Qto_RampFlightBaseQuantities\",\n\t\t\t\"Qto_RoofBaseQuantities\",\n\t\t\t\"Qto_SiteBaseQuantities\",\n\t\t\t\"Qto_SlabBaseQuantities\",\n\t\t\t\"Qto_SpaceBaseQuantities\",\n\t\t\t\"Qto_StairFlightBaseQuantities\",\n\t\t\t\"Qto_WallBaseQuantities\",\n\t\t\t\"Qto_WindowBaseQuantities\"\n\t\t]\n\t},\n\t\"IFC4RV\" : {\n\t\t\"Version\" : \"V1.2\",\n\t\t\"EntityList\" : [\n\t\t\t\"IfcActorRole\",\n\t\t\t\"IfcActuator\",\n\t\t\t\"IfcActuatorType\",\n\t\t\t\"IfcAddress\",\n\t\t\t\"IfcAirTerminal\",\n\t\t\t\"IfcAirTerminalBox\",\n\t\t\t\"IfcAirTerminalBoxType\",\n\t\t\t\"IfcAirTerminalType\",\n\t\t\t\"IfcAirToAirHeatRecovery\",\n\t\t\t\"IfcAirToAirHeatRecoveryType\",\n\t\t\t\"IfcAlarm\",\n\t\t\t\"IfcAlarmType\",\n\t\t\t\"IfcApplication\",\n\t\t\t\"IfcArbitraryClosedProfileDef\",\n\t\t\t\"IfcArbitraryProfileDefWithVoids\",\n\t\t\t\"IfcAudioVisualAppliance\",\n\t\t\t\"IfcAudioVisualApplianceType\",\n\t\t\t\"IfcAxis1Placement\",\n\t\t\t\"IfcAxis2Placement3D\",\n\t\t\t\"IfcBeam\",\n\t\t\t\"IfcBeamType\",\n\t\t\t\"IfcBoiler\",\n\t\t\t\"IfcBoilerType\",\n\t\t\t\"IfcBoundedCurve\",\n\t\t\t\"IfcBoundingBox\",\n\t\t\t\"IfcBuilding\",\n\t\t\t\"IfcBuildingElement\",\n\t\t\t\"IfcBuildingElementPart\",\n\t\t\t\"IfcBuildingElementPartType\",\n\t\t\t\"IfcBuildingElementProxy\",\n\t\t\t\"IfcBuildingElementProxyType\",\n\t\t\t\"IfcBuildingElementType\",\n\t\t\t\"IfcBuildingStorey\",\n\t\t\t\"IfcBuildingSystem\",\n\t\t\t\"IfcBurner\",\n\t\t\t\"IfcBurnerType\",\n\t\t\t\"IfcCableCarrierFitting\",\n\t\t\t\"IfcCableCarrierFittingType\",\n\t\t\t\"IfcCableCarrierSegment\",\n\t\t\t\"IfcCableCarrierSegmentType\",\n\t\t\t\"IfcCableFitting\",\n\t\t\t\"IfcCableFittingType\",\n\t\t\t\"IfcCableSegment\",\n\t\t\t\"IfcCableSegmentType\",\n\t\t\t\"IfcCartesianPoint\",\n\t\t\t\"IfcCartesianPointList\",\n\t\t\t\"IfcCartesianPointList2D\",\n\t\t\t\"IfcCartesianPointList3D\",\n\t\t\t\"IfcCartesianTransformationOperator\",\n\t\t\t\"IfcCartesianTransformationOperator3D\",\n\t\t\t\"IfcCartesianTransformationOperator3DnonUniform\",\n\t\t\t\"IfcChiller\",\n\t\t\t\"IfcChillerType\",\n\t\t\t\"IfcChimney\",\n\t\t\t\"IfcChimneyType\",\n\t\t\t\"IfcCircle\",\n\t\t\t\"IfcCivilElement\",\n\t\t\t\"IfcCivilElementType\",\n\t\t\t\"IfcClassification\",\n\t\t\t\"IfcClassificationReference\",\n\t\t\t\"IfcCoil\",\n\t\t\t\"IfcCoilType\",\n\t\t\t\"IfcColourRgb\",\n\t\t\t\"IfcColourRgbList\",\n\t\t\t\"IfcColourSpecification\",\n\t\t\t\"IfcColumn\",\n\t\t\t\"IfcColumnType\",\n\t\t\t\"IfcCommunicationsAppliance\",\n\t\t\t\"IfcCommunicationsApplianceType\",\n\t\t\t\"IfcComplexProperty\",\n\t\t\t\"IfcCompressor\",\n\t\t\t\"IfcCompressorType\",\n\t\t\t\"IfcCondenser\",\n\t\t\t\"IfcCondenserType\",\n\t\t\t\"IfcConic\",\n\t\t\t\"IfcContext\",\n\t\t\t\"IfcController\",\n\t\t\t\"IfcControllerType\",\n\t\t\t\"IfcConversionBasedUnit\",\n\t\t\t\"IfcConversionBasedUnitWithOffset\",\n\t\t\t\"IfcCooledBeam\",\n\t\t\t\"IfcCooledBeamType\",\n\t\t\t\"IfcCoolingTower\",\n\t\t\t\"IfcCoolingTowerType\",\n\t\t\t\"IfcCoordinateOperation\",\n\t\t\t\"IfcCoordinateReferenceSystem\",\n\t\t\t\"IfcCovering\",\n\t\t\t\"IfcCoveringType\",\n\t\t\t\"IfcCurtainWall\",\n\t\t\t\"IfcCurtainWallType\",\n\t\t\t\"IfcCurve\",\n\t\t\t\"IfcDamper\",\n\t\t\t\"IfcDamperType\",\n\t\t\t\"IfcDerivedUnit\",\n\t\t\t\"IfcDerivedUnitElement\",\n\t\t\t\"IfcDimensionalExponents\",\n\t\t\t\"IfcDirection\",\n\t\t\t\"IfcDiscreteAccessory\",\n\t\t\t\"IfcDiscreteAccessoryType\",\n\t\t\t\"IfcDistributionChamberElement\",\n\t\t\t\"IfcDistributionChamberElementType\",\n\t\t\t\"IfcDistributionCircuit\",\n\t\t\t\"IfcDistributionControlElement\",\n\t\t\t\"IfcDistributionControlElementType\",\n\t\t\t\"IfcDistributionElement\",\n\t\t\t\"IfcDistributionElementType\",\n\t\t\t\"IfcDistributionFlowElement\",\n\t\t\t\"IfcDistributionFlowElementType\",\n\t\t\t\"IfcDistributionPort\",\n\t\t\t\"IfcDistributionSystem\",\n\t\t\t\"IfcDoor\",\n\t\t\t\"IfcDoorLiningProperties\",\n\t\t\t\"IfcDoorPanelProperties\",\n\t\t\t\"IfcDoorType\",\n\t\t\t\"IfcDuctFitting\",\n\t\t\t\"IfcDuctFittingType\",\n\t\t\t\"IfcDuctSegment\",\n\t\t\t\"IfcDuctSegmentType\",\n\t\t\t\"IfcDuctSilencer\",\n\t\t\t\"IfcDuctSilencerType\",\n\t\t\t\"IfcElectricAppliance\",\n\t\t\t\"IfcElectricApplianceType\",\n\t\t\t\"IfcElectricDistributionBoard\",\n\t\t\t\"IfcElectricDistributionBoardType\",\n\t\t\t\"IfcElectricFlowStorageDevice\",\n\t\t\t\"IfcElectricFlowStorageDeviceType\",\n\t\t\t\"IfcElectricGenerator\",\n\t\t\t\"IfcElectricGeneratorType\",\n\t\t\t\"IfcElectricMotor\",\n\t\t\t\"IfcElectricMotorType\",\n\t\t\t\"IfcElectricTimeControl\",\n\t\t\t\"IfcElectricTimeControlType\",\n\t\t\t\"IfcElement\",\n\t\t\t\"IfcElementAssembly\",\n\t\t\t\"IfcElementAssemblyType\",\n\t\t\t\"IfcElementComponent\",\n\t\t\t\"IfcElementComponentType\",\n\t\t\t\"IfcElementQuantity\",\n\t\t\t\"IfcElementType\",\n\t\t\t\"IfcEnergyConversionDevice\",\n\t\t\t\"IfcEnergyConversionDeviceType\",\n\t\t\t\"IfcEngine\",\n\t\t\t\"IfcEngineType\",\n\t\t\t\"IfcEvaporativeCooler\",\n\t\t\t\"IfcEvaporativeCoolerType\",\n\t\t\t\"IfcEvaporator\",\n\t\t\t\"IfcEvaporatorType\",\n\t\t\t\"IfcExtendedProperties\",\n\t\t\t\"IfcExternalInformation\",\n\t\t\t\"IfcExternalReference\",\n\t\t\t\"IfcExtrudedAreaSolid\",\n\t\t\t\"IfcFan\",\n\t\t\t\"IfcFanType\",\n\t\t\t\"IfcFastener\",\n\t\t\t\"IfcFastenerType\",\n\t\t\t\"IfcFeatureElement\",\n\t\t\t\"IfcFeatureElementSubtraction\",\n\t\t\t\"IfcFilter\",\n\t\t\t\"IfcFilterType\",\n\t\t\t\"IfcFireSuppressionTerminal\",\n\t\t\t\"IfcFireSuppressionTerminalType\",\n\t\t\t\"IfcFlowController\",\n\t\t\t\"IfcFlowControllerType\",\n\t\t\t\"IfcFlowFitting\",\n\t\t\t\"IfcFlowFittingType\",\n\t\t\t\"IfcFlowInstrument\",\n\t\t\t\"IfcFlowInstrumentType\",\n\t\t\t\"IfcFlowMeter\",\n\t\t\t\"IfcFlowMeterType\",\n\t\t\t\"IfcFlowMovingDevice\",\n\t\t\t\"IfcFlowMovingDeviceType\",\n\t\t\t\"IfcFlowSegment\",\n\t\t\t\"IfcFlowSegmentType\",\n\t\t\t\"IfcFlowStorageDevice\",\n\t\t\t\"IfcFlowStorageDeviceType\",\n\t\t\t\"IfcFlowTerminal\",\n\t\t\t\"IfcFlowTerminalType\",\n\t\t\t\"IfcFlowTreatmentDevice\",\n\t\t\t\"IfcFlowTreatmentDeviceType\",\n\t\t\t\"IfcFooting\",\n\t\t\t\"IfcFootingType\",\n\t\t\t\"IfcFurnishingElement\",\n\t\t\t\"IfcFurnishingElementType\",\n\t\t\t\"IfcFurniture\",\n\t\t\t\"IfcFurnitureType\",\n\t\t\t\"IfcGeographicElement\",\n\t\t\t\"IfcGeographicElementType\",\n\t\t\t\"IfcGeometricCurveSet\",\n\t\t\t\"IfcGeometricRepresentationContext\",\n\t\t\t\"IfcGeometricRepresentationItem\",\n\t\t\t\"IfcGeometricRepresentationSubContext\",\n\t\t\t\"IfcGeometricSet\",\n\t\t\t\"IfcGrid\",\n\t\t\t\"IfcGridAxis\",\n\t\t\t\"IfcGroup\",\n\t\t\t\"IfcHeatExchanger\",\n\t\t\t\"IfcHeatExchangerType\",\n\t\t\t\"IfcHumidifier\",\n\t\t\t\"IfcHumidifierType\",\n\t\t\t\"IfcIndexedColourMap\",\n\t\t\t\"IfcIndexedPolyCurve\",\n\t\t\t\"IfcIndexedPolygonalFace\",\n\t\t\t\"IfcIndexedPolygonalFaceWithVoids\",\n\t\t\t\"IfcInterceptor\",\n\t\t\t\"IfcInterceptorType\",\n\t\t\t\"IfcJunctionBox\",\n\t\t\t\"IfcJunctionBoxType\",\n\t\t\t\"IfcLamp\",\n\t\t\t\"IfcLampType\",\n\t\t\t\"IfcLightFixture\",\n\t\t\t\"IfcLightFixtureType\",\n\t\t\t\"IfcLine\",\n\t\t\t\"IfcLocalPlacement\",\n\t\t\t\"IfcMapConversion\",\n\t\t\t\"IfcMappedItem\",\n\t\t\t\"IfcMaterial\",\n\t\t\t\"IfcMaterialConstituent\",\n\t\t\t\"IfcMaterialConstituentSet\",\n\t\t\t\"IfcMaterialDefinition\",\n\t\t\t\"IfcMaterialProperties\",\n\t\t\t\"IfcMeasureWithUnit\",\n\t\t\t\"IfcMechanicalFastener\",\n\t\t\t\"IfcMechanicalFastenerType\",\n\t\t\t\"IfcMedicalDevice\",\n\t\t\t\"IfcMedicalDeviceType\",\n\t\t\t\"IfcMember\",\n\t\t\t\"IfcMemberType\",\n\t\t\t\"IfcMonetaryUnit\",\n\t\t\t\"IfcMotorConnection\",\n\t\t\t\"IfcMotorConnectionType\",\n\t\t\t\"IfcNamedUnit\",\n\t\t\t\"IfcObject\",\n\t\t\t\"IfcObjectDefinition\",\n\t\t\t\"IfcObjectPlacement\",\n\t\t\t\"IfcOpeningElement\",\n\t\t\t\"IfcOrganization\",\n\t\t\t\"IfcOutlet\",\n\t\t\t\"IfcOutletType\",\n\t\t\t\"IfcOwnerHistory\",\n\t\t\t\"IfcPerson\",\n\t\t\t\"IfcPersonAndOrganization\",\n\t\t\t\"IfcPhysicalComplexQuantity\",\n\t\t\t\"IfcPhysicalQuantity\",\n\t\t\t\"IfcPhysicalSimpleQuantity\",\n\t\t\t\"IfcPile\",\n\t\t\t\"IfcPileType\",\n\t\t\t\"IfcPipeFitting\",\n\t\t\t\"IfcPipeFittingType\",\n\t\t\t\"IfcPipeSegment\",\n\t\t\t\"IfcPipeSegmentType\",\n\t\t\t\"IfcPlacement\",\n\t\t\t\"IfcPlate\",\n\t\t\t\"IfcPlateType\",\n\t\t\t\"IfcPoint\",\n\t\t\t\"IfcPolygonalFaceSet\",\n\t\t\t\"IfcPort\",\n\t\t\t\"IfcPostalAddress\",\n\t\t\t\"IfcPreDefinedPropertySet\",\n\t\t\t\"IfcPresentationItem\",\n\t\t\t\"IfcPresentationLayerAssignment\",\n\t\t\t\"IfcPresentationStyle\",\n\t\t\t\"IfcProduct\",\n\t\t\t\"IfcProductDefinitionShape\",\n\t\t\t\"IfcProductRepresentation\",\n\t\t\t\"IfcProfileDef\",\n\t\t\t\"IfcProject\",\n\t\t\t\"IfcProjectedCRS\",\n\t\t\t\"IfcProperty\",\n\t\t\t\"IfcPropertyAbstraction\",\n\t\t\t\"IfcPropertyBoundedValue\",\n\t\t\t\"IfcPropertyDefinition\",\n\t\t\t\"IfcPropertyEnumeratedValue\",\n\t\t\t\"IfcPropertyEnumeration\",\n\t\t\t\"IfcPropertyListValue\",\n\t\t\t\"IfcPropertySet\",\n\t\t\t\"IfcPropertySetDefinition\",\n\t\t\t\"IfcPropertySingleValue\",\n\t\t\t\"IfcPropertyTableValue\",\n\t\t\t\"IfcProtectiveDevice\",\n\t\t\t\"IfcProtectiveDeviceTrippingUnit\",\n\t\t\t\"IfcProtectiveDeviceTrippingUnitType\",\n\t\t\t\"IfcProtectiveDeviceType\",\n\t\t\t\"IfcPump\",\n\t\t\t\"IfcPumpType\",\n\t\t\t\"IfcQuantityArea\",\n\t\t\t\"IfcQuantityCount\",\n\t\t\t\"IfcQuantityLength\",\n\t\t\t\"IfcQuantitySet\",\n\t\t\t\"IfcQuantityTime\",\n\t\t\t\"IfcQuantityVolume\",\n\t\t\t\"IfcQuantityWeight\",\n\t\t\t\"IfcRailing\",\n\t\t\t\"IfcRailingType\",\n\t\t\t\"IfcRamp\",\n\t\t\t\"IfcRampFlight\",\n\t\t\t\"IfcRampFlightType\",\n\t\t\t\"IfcRampType\",\n\t\t\t\"IfcReinforcingBar\",\n\t\t\t\"IfcReinforcingBarType\",\n\t\t\t\"IfcReinforcingElement\",\n\t\t\t\"IfcReinforcingElementType\",\n\t\t\t\"IfcReinforcingMesh\",\n\t\t\t\"IfcReinforcingMeshType\",\n\t\t\t\"IfcRelAggregates\",\n\t\t\t\"IfcRelAssigns\",\n\t\t\t\"IfcRelAssignsToGroup\",\n\t\t\t\"IfcRelAssociates\",\n\t\t\t\"IfcRelAssociatesClassification\",\n\t\t\t\"IfcRelAssociatesMaterial\",\n\t\t\t\"IfcRelationship\",\n\t\t\t\"IfcRelConnects\",\n\t\t\t\"IfcRelConnectsPorts\",\n\t\t\t\"IfcRelContainedInSpatialStructure\",\n\t\t\t\"IfcRelDeclares\",\n\t\t\t\"IfcRelDecomposes\",\n\t\t\t\"IfcRelDefines\",\n\t\t\t\"IfcRelDefinesByProperties\",\n\t\t\t\"IfcRelDefinesByType\",\n\t\t\t\"IfcRelFillsElement\",\n\t\t\t\"IfcRelNests\",\n\t\t\t\"IfcRelServicesBuildings\",\n\t\t\t\"IfcRelVoidsElement\",\n\t\t\t\"IfcRepresentation\",\n\t\t\t\"IfcRepresentationContext\",\n\t\t\t\"IfcRepresentationItem\",\n\t\t\t\"IfcRepresentationMap\",\n\t\t\t\"IfcRevolvedAreaSolid\",\n\t\t\t\"IfcRoof\",\n\t\t\t\"IfcRoofType\",\n\t\t\t\"IfcRoot\",\n\t\t\t\"IfcSanitaryTerminal\",\n\t\t\t\"IfcSanitaryTerminalType\",\n\t\t\t\"IfcSensor\",\n\t\t\t\"IfcSensorType\",\n\t\t\t\"IfcShadingDevice\",\n\t\t\t\"IfcShadingDeviceType\",\n\t\t\t\"IfcShapeAspect\",\n\t\t\t\"IfcShapeModel\",\n\t\t\t\"IfcShapeRepresentation\",\n\t\t\t\"IfcSimpleProperty\",\n\t\t\t\"IfcSite\",\n\t\t\t\"IfcSIUnit\",\n\t\t\t\"IfcSlab\",\n\t\t\t\"IfcSlabType\",\n\t\t\t\"IfcSolarDevice\",\n\t\t\t\"IfcSolarDeviceType\",\n\t\t\t\"IfcSolidModel\",\n\t\t\t\"IfcSpace\",\n\t\t\t\"IfcSpaceHeater\",\n\t\t\t\"IfcSpaceHeaterType\",\n\t\t\t\"IfcSpaceType\",\n\t\t\t\"IfcSpatialElement\",\n\t\t\t\"IfcSpatialElementType\",\n\t\t\t\"IfcSpatialStructureElement\",\n\t\t\t\"IfcSpatialStructureElementType\",\n\t\t\t\"IfcSpatialZone\",\n\t\t\t\"IfcSpatialZoneType\",\n\t\t\t\"IfcStackTerminal\",\n\t\t\t\"IfcStackTerminalType\",\n\t\t\t\"IfcStair\",\n\t\t\t\"IfcStairFlight\",\n\t\t\t\"IfcStairFlightType\",\n\t\t\t\"IfcStairType\",\n\t\t\t\"IfcStyledItem\",\n\t\t\t\"IfcSurfaceStyle\",\n\t\t\t\"IfcSurfaceStyleRendering\",\n\t\t\t\"IfcSurfaceStyleShading\",\n\t\t\t\"IfcSweptAreaSolid\",\n\t\t\t\"IfcSweptDiskSolid\",\n\t\t\t\"IfcSwitchingDevice\",\n\t\t\t\"IfcSwitchingDeviceType\",\n\t\t\t\"IfcSystem\",\n\t\t\t\"IfcSystemFurnitureElement\",\n\t\t\t\"IfcSystemFurnitureElementType\",\n\t\t\t\"IfcTank\",\n\t\t\t\"IfcTankType\",\n\t\t\t\"IfcTelecomAddress\",\n\t\t\t\"IfcTendon\",\n\t\t\t\"IfcTendonAnchor\",\n\t\t\t\"IfcTendonAnchorType\",\n\t\t\t\"IfcTendonType\",\n\t\t\t\"IfcTessellatedFaceSet\",\n\t\t\t\"IfcTessellatedItem\",\n\t\t\t\"IfcTransformer\",\n\t\t\t\"IfcTransformerType\",\n\t\t\t\"IfcTransportElement\",\n\t\t\t\"IfcTransportElementType\",\n\t\t\t\"IfcTriangulatedFaceSet\",\n\t\t\t\"IfcTubeBundle\",\n\t\t\t\"IfcTubeBundleType\",\n\t\t\t\"IfcTypeObject\",\n\t\t\t\"IfcTypeProduct\",\n\t\t\t\"IfcUnitaryControlElement\",\n\t\t\t\"IfcUnitaryControlElementType\",\n\t\t\t\"IfcUnitaryEquipment\",\n\t\t\t\"IfcUnitaryEquipmentType\",\n\t\t\t\"IfcUnitAssignment\",\n\t\t\t\"IfcValve\",\n\t\t\t\"IfcValveType\",\n\t\t\t\"IfcVector\",\n\t\t\t\"IfcVibrationIsolator\",\n\t\t\t\"IfcVibrationIsolatorType\",\n\t\t\t\"IfcVoidingFeature\",\n\t\t\t\"IfcWall\",\n\t\t\t\"IfcWallType\",\n\t\t\t\"IfcWasteTerminal\",\n\t\t\t\"IfcWasteTerminalType\",\n\t\t\t\"IfcWindow\",\n\t\t\t\"IfcWindowLiningProperties\",\n\t\t\t\"IfcWindowPanelProperties\",\n\t\t\t\"IfcWindowType\",\n\t\t\t\"IfcZone\"\n\t\t],\n\t\t\"PropertySetList\" : [\n\t\t\t\"Pset_ActuatorTypeCommon\",\n\t\t\t\"Pset_ActuatorTypeLinearActuation\",\n\t\t\t\"Pset_ActuatorTypeRotationalActuation\",\n\t\t\t\"Pset_AirTerminalBoxTypeCommon\",\n\t\t\t\"Pset_AirTerminalOccurrence\",\n\t\t\t\"Pset_AirTerminalTypeCommon\",\n\t\t\t\"Pset_AirToAirHeatRecoveryTypeCommon\",\n\t\t\t\"Pset_AlarmTypeCommon\",\n\t\t\t\"Pset_AudioVisualApplianceTypeCommon\",\n\t\t\t\"Pset_BeamCommon\",\n\t\t\t\"Pset_BoilerTypeCommon\",\n\t\t\t\"Pset_BuildingCommon\",\n\t\t\t\"Pset_BuildingElementProxyCommon\",\n\t\t\t\"Pset_BuildingElementProxyProvisionForVoid\",\n\t\t\t\"Pset_BuildingStoreyCommon\",\n\t\t\t\"Pset_BuildingSystemCommon\",\n\t\t\t\"Pset_BuildingUse\",\n\t\t\t\"Pset_BuildingUseAdjacent\",\n\t\t\t\"Pset_BurnerTypeCommon\",\n\t\t\t\"Pset_CableCarrierFittingTypeCommon\",\n\t\t\t\"Pset_CableCarrierSegmentTypeCommon\",\n\t\t\t\"Pset_CableFittingTypeCommon\",\n\t\t\t\"Pset_CableSegmentOccurrence\",\n\t\t\t\"Pset_CableSegmentTypeCommon\",\n\t\t\t\"Pset_ChillerTypeCommon\",\n\t\t\t\"Pset_ChimneyCommon\",\n\t\t\t\"Pset_CivilElementCommon\",\n\t\t\t\"Pset_CoilOccurrence\",\n\t\t\t\"Pset_CoilTypeCommon\",\n\t\t\t\"Pset_CoilTypeHydronic\",\n\t\t\t\"Pset_ColumnCommon\",\n\t\t\t\"Pset_CommunicationsApplianceTypeCommon\",\n\t\t\t\"Pset_CompressorTypeCommon\",\n\t\t\t\"Pset_CondenserTypeCommon\",\n\t\t\t\"Pset_Condition\",\n\t\t\t\"Pset_ControllerTypeCommon\",\n\t\t\t\"Pset_CooledBeamTypeCommon\",\n\t\t\t\"Pset_CoolingTowerTypeCommon\",\n\t\t\t\"Pset_CoveringCommon\",\n\t\t\t\"Pset_CurtainWallCommon\",\n\t\t\t\"Pset_DamperOccurrence\",\n\t\t\t\"Pset_DamperTypeCommon\",\n\t\t\t\"Pset_DistributionChamberElementCommon\",\n\t\t\t\"Pset_DistributionPortCommon\",\n\t\t\t\"Pset_DistributionSystemCommon\",\n\t\t\t\"Pset_DoorCommon\",\n\t\t\t\"Pset_DuctFittingOccurrence\",\n\t\t\t\"Pset_DuctFittingTypeCommon\",\n\t\t\t\"Pset_DuctSegmentOccurrence\",\n\t\t\t\"Pset_DuctSegmentTypeCommon\",\n\t\t\t\"Pset_DuctSilencerTypeCommon\",\n\t\t\t\"Pset_ElectricalDeviceCommon\",\n\t\t\t\"Pset_ElectricApplianceTypeCommon\",\n\t\t\t\"Pset_ElectricDistributionBoardOccurrence\",\n\t\t\t\"Pset_ElectricDistributionBoardTypeCommon\",\n\t\t\t\"Pset_ElectricFlowStorageDeviceTypeCommon\",\n\t\t\t\"Pset_ElectricGeneratorTypeCommon\",\n\t\t\t\"Pset_ElectricMotorTypeCommon\",\n\t\t\t\"Pset_ElectricTimeControlTypeCommon\",\n\t\t\t\"Pset_ElementAssemblyCommon\",\n\t\t\t\"Pset_EngineTypeCommon\",\n\t\t\t\"Pset_EnvironmentalImpactIndicators\",\n\t\t\t\"Pset_EnvironmentalImpactValues\",\n\t\t\t\"Pset_EvaporativeCoolerTypeCommon\",\n\t\t\t\"Pset_EvaporatorTypeCommon\",\n\t\t\t\"Pset_FanOccurrence\",\n\t\t\t\"Pset_FanTypeCommon\",\n\t\t\t\"Pset_FilterTypeCommon\",\n\t\t\t\"Pset_FireSuppressionTerminalTypeCommon\",\n\t\t\t\"Pset_FlowInstrumentTypeCommon\",\n\t\t\t\"Pset_FlowMeterOccurrence\",\n\t\t\t\"Pset_FlowMeterTypeCommon\",\n\t\t\t\"Pset_FootingCommon\",\n\t\t\t\"Pset_FurnitureTypeCommon\",\n\t\t\t\"Pset_HeatExchangerTypeCommon\",\n\t\t\t\"Pset_HumidifierTypeCommon\",\n\t\t\t\"Pset_InterceptorTypeCommon\",\n\t\t\t\"Pset_JunctionBoxTypeCommon\",\n\t\t\t\"Pset_LampTypeCommon\",\n\t\t\t\"Pset_LandRegistration\",\n\t\t\t\"Pset_LightFixtureTypeCommon\",\n\t\t\t\"Pset_ManufacturerOccurrence\",\n\t\t\t\"Pset_ManufacturerTypeInformation\",\n\t\t\t\"Pset_MaterialCombustion\",\n\t\t\t\"Pset_MaterialCommon\",\n\t\t\t\"Pset_MaterialConcrete\",\n\t\t\t\"Pset_MaterialEnergy\",\n\t\t\t\"Pset_MaterialFuel\",\n\t\t\t\"Pset_MaterialHygroscopic\",\n\t\t\t\"Pset_MaterialMechanical\",\n\t\t\t\"Pset_MaterialOptical\",\n\t\t\t\"Pset_MaterialSteel\",\n\t\t\t\"Pset_MaterialThermal\",\n\t\t\t\"Pset_MaterialWater\",\n\t\t\t\"Pset_MaterialWood\",\n\t\t\t\"Pset_MaterialWoodBasedBeam\",\n\t\t\t\"Pset_MaterialWoodBasedPanel\",\n\t\t\t\"Pset_MechanicalFastenerAnchorBolt\",\n\t\t\t\"Pset_MechanicalFastenerBolt\",\n\t\t\t\"Pset_MechanicalFastenerCommon\",\n\t\t\t\"Pset_MedicalDeviceTypeCommon\",\n\t\t\t\"Pset_MemberCommon\",\n\t\t\t\"Pset_MotorConnectionTypeCommon\",\n\t\t\t\"Pset_OpeningElementCommon\",\n\t\t\t\"Pset_OutletTypeCommon\",\n\t\t\t\"Pset_OutsideDesignCriteria\",\n\t\t\t\"Pset_PileCommon\",\n\t\t\t\"Pset_PipeConnectionFlanged\",\n\t\t\t\"Pset_PipeFittingOccurrence\",\n\t\t\t\"Pset_PipeFittingTypeCommon\",\n\t\t\t\"Pset_PipeSegmentOccurrence\",\n\t\t\t\"Pset_PipeSegmentTypeCommon\",\n\t\t\t\"Pset_PlateCommon\",\n\t\t\t\"Pset_PrecastSlab\",\n\t\t\t\"Pset_PropertyAgreement\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitI2TCurve\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitI2TFuseCurve\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitIPICurve\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection\",\n\t\t\t\"Pset_ProtectiveDeviceOccurrence\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionGCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionICurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionLCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionSCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingUnitTypeCommon\",\n\t\t\t\"Pset_ProtectiveDeviceTypeCommon\",\n\t\t\t\"Pset_PumpOccurrence\",\n\t\t\t\"Pset_PumpTypeCommon\",\n\t\t\t\"Pset_RailingCommon\",\n\t\t\t\"Pset_RampCommon\",\n\t\t\t\"Pset_RampFlightCommon\",\n\t\t\t\"Pset_ReinforcementBarCountOfIndependentFooting\",\n\t\t\t\"Pset_ReinforcementBarPitchOfBeam\",\n\t\t\t\"Pset_ReinforcementBarPitchOfColumn\",\n\t\t\t\"Pset_ReinforcementBarPitchOfContinuousFooting\",\n\t\t\t\"Pset_ReinforcementBarPitchOfSlab\",\n\t\t\t\"Pset_ReinforcementBarPitchOfWall\",\n\t\t\t\"Pset_ReinforcingBarCommon\",\n\t\t\t\"Pset_ReinforcingMeshCommon\",\n\t\t\t\"Pset_RoofCommon\",\n\t\t\t\"Pset_SanitaryTerminalTypeCommon\",\n\t\t\t\"Pset_SensorTypeCommon\",\n\t\t\t\"Pset_ServiceLife\",\n\t\t\t\"Pset_ServiceLifeFactors\",\n\t\t\t\"Pset_ShadingDeviceCommon\",\n\t\t\t\"Pset_SiteCommon\",\n\t\t\t\"Pset_SlabCommon\",\n\t\t\t\"Pset_SolarDeviceTypeCommon\",\n\t\t\t\"Pset_SpaceCommon\",\n\t\t\t\"Pset_SpaceCoveringRequirements\",\n\t\t\t\"Pset_SpaceHeaterTypeCommon\",\n\t\t\t\"Pset_SpaceThermalDesign\",\n\t\t\t\"Pset_SpaceThermalLoad\",\n\t\t\t\"Pset_SpatialZoneCommon\",\n\t\t\t\"Pset_StackTerminalTypeCommon\",\n\t\t\t\"Pset_StairCommon\",\n\t\t\t\"Pset_StairFlightCommon\",\n\t\t\t\"Pset_SwitchingDeviceTypeCommon\",\n\t\t\t\"Pset_SystemFurnitureElementTypeCommon\",\n\t\t\t\"Pset_TankOccurrence\",\n\t\t\t\"Pset_TankTypeCommon\",\n\t\t\t\"Pset_TendonAnchorCommon\",\n\t\t\t\"Pset_TendonCommon\",\n\t\t\t\"Pset_ThermalLoadAggregate\",\n\t\t\t\"Pset_ThermalLoadDesignCriteria\",\n\t\t\t\"Pset_TransformerTypeCommon\",\n\t\t\t\"Pset_TransportElementCommon\",\n\t\t\t\"Pset_TubeBundleTypeCommon\",\n\t\t\t\"Pset_UnitaryControlElementTypeCommon\",\n\t\t\t\"Pset_UnitaryEquipmentTypeCommon\",\n\t\t\t\"Pset_ValveTypeCommon\",\n\t\t\t\"Pset_VibrationIsolatorTypeCommon\",\n\t\t\t\"Pset_WallCommon\",\n\t\t\t\"Pset_Warranty\",\n\t\t\t\"Pset_WasteTerminalTypeCommon\",\n\t\t\t\"Pset_WindowCommon\",\n\t\t\t\"Pset_ZoneCommon\",\n\t\t\t\"Qto_ActuatorBaseQuantities\",\n\t\t\t\"Qto_AirTerminalBaseQuantities\",\n\t\t\t\"Qto_AirTerminalBoxTypeBaseQuantities\",\n\t\t\t\"Qto_AirToAirHeatRecoveryBaseQuantities\",\n\t\t\t\"Qto_AlarmBaseQuantities\",\n\t\t\t\"Qto_AudioVisualApplianceBaseQuantities\",\n\t\t\t\"Qto_BeamBaseQuantities\",\n\t\t\t\"Qto_BoilerBaseQuantities\",\n\t\t\t\"Qto_BuildingBaseQuantities\",\n\t\t\t\"Qto_BuildingElementProxyQuantities\",\n\t\t\t\"Qto_BuildingStoreyBaseQuantities\",\n\t\t\t\"Qto_BurnerBaseQuantities\",\n\t\t\t\"Qto_CableCarrierFittingBaseQuantities\",\n\t\t\t\"Qto_CableCarrierSegmentBaseQuantities\",\n\t\t\t\"Qto_CableFittingBaseQuantities\",\n\t\t\t\"Qto_CableSegmentBaseQuantities\",\n\t\t\t\"Qto_ChillerBaseQuantities\",\n\t\t\t\"Qto_ChimneyBaseQuantities\",\n\t\t\t\"Qto_CoilBaseQuantities\",\n\t\t\t\"Qto_ColumnBaseQuantities\",\n\t\t\t\"Qto_CommunicationsApplianceBaseQuantities\",\n\t\t\t\"Qto_CompressorBaseQuantities\",\n\t\t\t\"Qto_CondenserBaseQuantities\",\n\t\t\t\"Qto_ControllerBaseQuantities\",\n\t\t\t\"Qto_CooledBeamBaseQuantities\",\n\t\t\t\"Qto_CoolingTowerBaseQuantities\",\n\t\t\t\"Qto_CoveringBaseQuantities\",\n\t\t\t\"Qto_CurtainWallQuantities\",\n\t\t\t\"Qto_DamperBaseQuantities\",\n\t\t\t\"Qto_DistributionChamberElementBaseQuantities\",\n\t\t\t\"Qto_DoorBaseQuantities\",\n\t\t\t\"Qto_DuctFittingBaseQuantities\",\n\t\t\t\"Qto_DuctSegmentBaseQuantities\",\n\t\t\t\"Qto_DuctSilencerBaseQuantities\",\n\t\t\t\"Qto_ElectricApplianceBaseQuantities\",\n\t\t\t\"Qto_ElectricDistributionBoardBaseQuantities\",\n\t\t\t\"Qto_ElectricFlowStorageDeviceBaseQuantities\",\n\t\t\t\"Qto_ElectricGeneratorBaseQuantities\",\n\t\t\t\"Qto_ElectricMotorBaseQuantities\",\n\t\t\t\"Qto_ElectricTimeControlBaseQuantities\",\n\t\t\t\"Qto_EvaporativeCoolerBaseQuantities\",\n\t\t\t\"Qto_EvaporatorBaseQuantities\",\n\t\t\t\"Qto_FanBaseQuantities\",\n\t\t\t\"Qto_FilterBaseQuantities\",\n\t\t\t\"Qto_FireSuppressionTerminalBaseQuantities\",\n\t\t\t\"Qto_FlowInstrumentBaseQuantities\",\n\t\t\t\"Qto_FlowMeterBaseQuantities\",\n\t\t\t\"Qto_FootingBaseQuantities\",\n\t\t\t\"Qto_HeatExchangerBaseQuantities\",\n\t\t\t\"Qto_HumidifierBaseQuantities\",\n\t\t\t\"Qto_InterceptorBaseQuantities\",\n\t\t\t\"Qto_JunctionBoxBaseQuantities\",\n\t\t\t\"Qto_LampBaseQuantities\",\n\t\t\t\"Qto_LightFixtureBaseQuantities\",\n\t\t\t\"Qto_MemberBaseQuantities\",\n\t\t\t\"Qto_MotorConnectionBaseQuantities\",\n\t\t\t\"Qto_OpeningElementBaseQuantities\",\n\t\t\t\"Qto_OutletBaseQuantities\",\n\t\t\t\"Qto_PileBaseQuantities\",\n\t\t\t\"Qto_PipeFittingBaseQuantities\",\n\t\t\t\"Qto_PipeSegmentBaseQuantities\",\n\t\t\t\"Qto_PlateBaseQuantities\",\n\t\t\t\"Qto_ProtectiveDeviceBaseQuantities\",\n\t\t\t\"Qto_ProtectiveDeviceTrippingUnitBaseQuantities\",\n\t\t\t\"Qto_PumpBaseQuantities\",\n\t\t\t\"Qto_RailingBaseQuantities\",\n\t\t\t\"Qto_RampFlightBaseQuantities\",\n\t\t\t\"Qto_ReinforcingElementBaseQuantities\",\n\t\t\t\"Qto_RoofBaseQuantities\",\n\t\t\t\"Qto_SanitaryTerminalBaseQuantities\",\n\t\t\t\"Qto_SensorBaseQuantities\",\n\t\t\t\"Qto_SiteBaseQuantities\",\n\t\t\t\"Qto_SlabBaseQuantities\",\n\t\t\t\"Qto_SolarDeviceBaseQuantities\",\n\t\t\t\"Qto_SpaceBaseQuantities\",\n\t\t\t\"Qto_SpaceHeaterBaseQuantities\",\n\t\t\t\"Qto_StackTerminalBaseQuantities\",\n\t\t\t\"Qto_StairFlightBaseQuantities\",\n\t\t\t\"Qto_SwitchingDeviceBaseQuantities\",\n\t\t\t\"Qto_TankBaseQuantities\",\n\t\t\t\"Qto_TransformerBaseQuantities\",\n\t\t\t\"Qto_TubeBundleBaseQuantities\",\n\t\t\t\"Qto_UnitaryControlElementBaseQuantities\",\n\t\t\t\"Qto_UnitaryEquipmentBaseQuantities\",\n\t\t\t\"Qto_ValveBaseQuantities\",\n\t\t\t\"Qto_VibrationIsolatorBaseQuantities\",\n\t\t\t\"Qto_WallBaseQuantities\",\n\t\t\t\"Qto_WasteTerminalBaseQuantities\",\n\t\t\t\"Qto_WindowBaseQuantities\"\n\t\t]\n\t},\n\t\"IFCSG\" : {\n\t\t\"Version\" : \"V1.0\",\n\t\t\"EntityList\" : [\n\t\t\t\"IfcActorRole\",\n\t\t\t\"IfcActuator\",\n\t\t\t\"IfcActuatorType\",\n\t\t\t\"IfcAddress\",\n\t\t\t\"IfcAirTerminal\",\n\t\t\t\"IfcAirTerminalBox\",\n\t\t\t\"IfcAirTerminalBoxType\",\n\t\t\t\"IfcAirTerminalType\",\n\t\t\t\"IfcAirToAirHeatRecovery\",\n\t\t\t\"IfcAirToAirHeatRecoveryType\",\n\t\t\t\"IfcAlarm\",\n\t\t\t\"IfcAlarmType\",\n\t\t\t\"IfcApplication\",\n\t\t\t\"IfcArbitraryClosedProfileDef\",\n\t\t\t\"IfcArbitraryProfileDefWithVoids\",\n\t\t\t\"IfcAudioVisualAppliance\",\n\t\t\t\"IfcAudioVisualApplianceType\",\n\t\t\t\"IfcAxis1Placement\",\n\t\t\t\"IfcAxis2Placement3D\",\n\t\t\t\"IfcBeam\",\n\t\t\t\"IfcBeamType\",\n\t\t\t\"IfcBoiler\",\n\t\t\t\"IfcBoilerType\",\n\t\t\t\"IfcBoundedCurve\",\n\t\t\t\"IfcBoundingBox\",\n\t\t\t\"IfcBuilding\",\n\t\t\t\"IfcBuildingElement\",\n\t\t\t\"IfcBuildingElementPart\",\n\t\t\t\"IfcBuildingElementPartType\",\n\t\t\t\"IfcBuildingElementProxy\",\n\t\t\t\"IfcBuildingElementProxyType\",\n\t\t\t\"IfcBuildingElementType\",\n\t\t\t\"IfcBuildingStorey\",\n\t\t\t\"IfcBuildingSystem\",\n\t\t\t\"IfcBurner\",\n\t\t\t\"IfcBurnerType\",\n\t\t\t\"IfcCableCarrierFitting\",\n\t\t\t\"IfcCableCarrierFittingType\",\n\t\t\t\"IfcCableCarrierSegment\",\n\t\t\t\"IfcCableCarrierSegmentType\",\n\t\t\t\"IfcCableFitting\",\n\t\t\t\"IfcCableFittingType\",\n\t\t\t\"IfcCableSegment\",\n\t\t\t\"IfcCableSegmentType\",\n\t\t\t\"IfcCartesianPoint\",\n\t\t\t\"IfcCartesianPointList\",\n\t\t\t\"IfcCartesianPointList2D\",\n\t\t\t\"IfcCartesianPointList3D\",\n\t\t\t\"IfcCartesianTransformationOperator\",\n\t\t\t\"IfcCartesianTransformationOperator3D\",\n\t\t\t\"IfcCartesianTransformationOperator3DnonUniform\",\n\t\t\t\"IfcChiller\",\n\t\t\t\"IfcChillerType\",\n\t\t\t\"IfcChimney\",\n\t\t\t\"IfcChimneyType\",\n\t\t\t\"IfcCircle\",\n\t\t\t\"IfcCivilElement\",\n\t\t\t\"IfcCivilElementType\",\n\t\t\t\"IfcClassification\",\n\t\t\t\"IfcClassificationReference\",\n\t\t\t\"IfcCoil\",\n\t\t\t\"IfcCoilType\",\n\t\t\t\"IfcColourRgb\",\n\t\t\t\"IfcColourRgbList\",\n\t\t\t\"IfcColourSpecification\",\n\t\t\t\"IfcColumn\",\n\t\t\t\"IfcColumnType\",\n\t\t\t\"IfcCommunicationsAppliance\",\n\t\t\t\"IfcCommunicationsApplianceType\",\n\t\t\t\"IfcComplexProperty\",\n\t\t\t\"IfcCompressor\",\n\t\t\t\"IfcCompressorType\",\n\t\t\t\"IfcCondenser\",\n\t\t\t\"IfcCondenserType\",\n\t\t\t\"IfcConic\",\n\t\t\t\"IfcContext\",\n\t\t\t\"IfcController\",\n\t\t\t\"IfcControllerType\",\n\t\t\t\"IfcConversionBasedUnit\",\n\t\t\t\"IfcConversionBasedUnitWithOffset\",\n\t\t\t\"IfcCooledBeam\",\n\t\t\t\"IfcCooledBeamType\",\n\t\t\t\"IfcCoolingTower\",\n\t\t\t\"IfcCoolingTowerType\",\n\t\t\t\"IfcCoordinateOperation\",\n\t\t\t\"IfcCoordinateReferenceSystem\",\n\t\t\t\"IfcCovering\",\n\t\t\t\"IfcCoveringType\",\n\t\t\t\"IfcCurtainWall\",\n\t\t\t\"IfcCurtainWallType\",\n\t\t\t\"IfcCurve\",\n\t\t\t\"IfcDamper\",\n\t\t\t\"IfcDamperType\",\n\t\t\t\"IfcDerivedUnit\",\n\t\t\t\"IfcDerivedUnitElement\",\n\t\t\t\"IfcDimensionalExponents\",\n\t\t\t\"IfcDirection\",\n\t\t\t\"IfcDiscreteAccessory\",\n\t\t\t\"IfcDiscreteAccessoryType\",\n\t\t\t\"IfcDistributionChamberElement\",\n\t\t\t\"IfcDistributionChamberElementType\",\n\t\t\t\"IfcDistributionCircuit\",\n\t\t\t\"IfcDistributionControlElement\",\n\t\t\t\"IfcDistributionControlElementType\",\n\t\t\t\"IfcDistributionElement\",\n\t\t\t\"IfcDistributionElementType\",\n\t\t\t\"IfcDistributionFlowElement\",\n\t\t\t\"IfcDistributionFlowElementType\",\n\t\t\t\"IfcDistributionPort\",\n\t\t\t\"IfcDistributionSystem\",\n\t\t\t\"IfcDoor\",\n\t\t\t\"IfcDoorLiningProperties\",\n\t\t\t\"IfcDoorPanelProperties\",\n\t\t\t\"IfcDoorType\",\n\t\t\t\"IfcDuctFitting\",\n\t\t\t\"IfcDuctFittingType\",\n\t\t\t\"IfcDuctSegment\",\n\t\t\t\"IfcDuctSegmentType\",\n\t\t\t\"IfcDuctSilencer\",\n\t\t\t\"IfcDuctSilencerType\",\n\t\t\t\"IfcElectricAppliance\",\n\t\t\t\"IfcElectricApplianceType\",\n\t\t\t\"IfcElectricDistributionBoard\",\n\t\t\t\"IfcElectricDistributionBoardType\",\n\t\t\t\"IfcElectricFlowStorageDevice\",\n\t\t\t\"IfcElectricFlowStorageDeviceType\",\n\t\t\t\"IfcElectricGenerator\",\n\t\t\t\"IfcElectricGeneratorType\",\n\t\t\t\"IfcElectricMotor\",\n\t\t\t\"IfcElectricMotorType\",\n\t\t\t\"IfcElectricTimeControl\",\n\t\t\t\"IfcElectricTimeControlType\",\n\t\t\t\"IfcElement\",\n\t\t\t\"IfcElementAssembly\",\n\t\t\t\"IfcElementAssemblyType\",\n\t\t\t\"IfcElementComponent\",\n\t\t\t\"IfcElementComponentType\",\n\t\t\t\"IfcElementQuantity\",\n\t\t\t\"IfcElementType\",\n\t\t\t\"IfcEnergyConversionDevice\",\n\t\t\t\"IfcEnergyConversionDeviceType\",\n\t\t\t\"IfcEngine\",\n\t\t\t\"IfcEngineType\",\n\t\t\t\"IfcEvaporativeCooler\",\n\t\t\t\"IfcEvaporativeCoolerType\",\n\t\t\t\"IfcEvaporator\",\n\t\t\t\"IfcEvaporatorType\",\n\t\t\t\"IfcExtendedProperties\",\n\t\t\t\"IfcExternalInformation\",\n\t\t\t\"IfcExternalReference\",\n\t\t\t\"IfcExtrudedAreaSolid\",\n\t\t\t\"IfcFan\",\n\t\t\t\"IfcFanType\",\n\t\t\t\"IfcFastener\",\n\t\t\t\"IfcFastenerType\",\n\t\t\t\"IfcFeatureElement\",\n\t\t\t\"IfcFeatureElementSubtraction\",\n\t\t\t\"IfcFilter\",\n\t\t\t\"IfcFilterType\",\n\t\t\t\"IfcFireSuppressionTerminal\",\n\t\t\t\"IfcFireSuppressionTerminalType\",\n\t\t\t\"IfcFlowController\",\n\t\t\t\"IfcFlowControllerType\",\n\t\t\t\"IfcFlowFitting\",\n\t\t\t\"IfcFlowFittingType\",\n\t\t\t\"IfcFlowInstrument\",\n\t\t\t\"IfcFlowInstrumentType\",\n\t\t\t\"IfcFlowMeter\",\n\t\t\t\"IfcFlowMeterType\",\n\t\t\t\"IfcFlowMovingDevice\",\n\t\t\t\"IfcFlowMovingDeviceType\",\n\t\t\t\"IfcFlowSegment\",\n\t\t\t\"IfcFlowSegmentType\",\n\t\t\t\"IfcFlowStorageDevice\",\n\t\t\t\"IfcFlowStorageDeviceType\",\n\t\t\t\"IfcFlowTerminal\",\n\t\t\t\"IfcFlowTerminalType\",\n\t\t\t\"IfcFlowTreatmentDevice\",\n\t\t\t\"IfcFlowTreatmentDeviceType\",\n\t\t\t\"IfcFooting\",\n\t\t\t\"IfcFootingType\",\n\t\t\t\"IfcFurnishingElement\",\n\t\t\t\"IfcFurnishingElementType\",\n\t\t\t\"IfcFurniture\",\n\t\t\t\"IfcFurnitureType\",\n\t\t\t\"IfcGeographicElement\",\n\t\t\t\"IfcGeographicElementType\",\n\t\t\t\"IfcGeometricCurveSet\",\n\t\t\t\"IfcGeometricRepresentationContext\",\n\t\t\t\"IfcGeometricRepresentationItem\",\n\t\t\t\"IfcGeometricRepresentationSubContext\",\n\t\t\t\"IfcGeometricSet\",\n\t\t\t\"IfcGrid\",\n\t\t\t\"IfcGridAxis\",\n\t\t\t\"IfcGroup\",\n\t\t\t\"IfcHeatExchanger\",\n\t\t\t\"IfcHeatExchangerType\",\n\t\t\t\"IfcHumidifier\",\n\t\t\t\"IfcHumidifierType\",\n\t\t\t\"IfcIndexedColourMap\",\n\t\t\t\"IfcIndexedPolyCurve\",\n\t\t\t\"IfcIndexedPolygonalFace\",\n\t\t\t\"IfcIndexedPolygonalFaceWithVoids\",\n\t\t\t\"IfcInterceptor\",\n\t\t\t\"IfcInterceptorType\",\n\t\t\t\"IfcJunctionBox\",\n\t\t\t\"IfcJunctionBoxType\",\n\t\t\t\"IfcLamp\",\n\t\t\t\"IfcLampType\",\n\t\t\t\"IfcLightFixture\",\n\t\t\t\"IfcLightFixtureType\",\n\t\t\t\"IfcLine\",\n\t\t\t\"IfcLocalPlacement\",\n\t\t\t\"IfcMapConversion\",\n\t\t\t\"IfcMappedItem\",\n\t\t\t\"IfcMaterial\",\n\t\t\t\"IfcMaterialConstituent\",\n\t\t\t\"IfcMaterialConstituentSet\",\n\t\t\t\"IfcMaterialDefinition\",\n\t\t\t\"IfcMaterialProperties\",\n\t\t\t\"IfcMeasureWithUnit\",\n\t\t\t\"IfcMechanicalFastener\",\n\t\t\t\"IfcMechanicalFastenerType\",\n\t\t\t\"IfcMedicalDevice\",\n\t\t\t\"IfcMedicalDeviceType\",\n\t\t\t\"IfcMember\",\n\t\t\t\"IfcMemberType\",\n\t\t\t\"IfcMonetaryUnit\",\n\t\t\t\"IfcMotorConnection\",\n\t\t\t\"IfcMotorConnectionType\",\n\t\t\t\"IfcNamedUnit\",\n\t\t\t\"IfcObject\",\n\t\t\t\"IfcObjectDefinition\",\n\t\t\t\"IfcObjectPlacement\",\n\t\t\t\"IfcOpeningElement\",\n\t\t\t\"IfcOrganization\",\n\t\t\t\"IfcOutlet\",\n\t\t\t\"IfcOutletType\",\n\t\t\t\"IfcOwnerHistory\",\n\t\t\t\"IfcPerson\",\n\t\t\t\"IfcPersonAndOrganization\",\n\t\t\t\"IfcPhysicalComplexQuantity\",\n\t\t\t\"IfcPhysicalQuantity\",\n\t\t\t\"IfcPhysicalSimpleQuantity\",\n\t\t\t\"IfcPile\",\n\t\t\t\"IfcPileType\",\n\t\t\t\"IfcPipeFitting\",\n\t\t\t\"IfcPipeFittingType\",\n\t\t\t\"IfcPipeSegment\",\n\t\t\t\"IfcPipeSegmentType\",\n\t\t\t\"IfcPlacement\",\n\t\t\t\"IfcPlate\",\n\t\t\t\"IfcPlateType\",\n\t\t\t\"IfcPoint\",\n\t\t\t\"IfcPolygonalFaceSet\",\n\t\t\t\"IfcPort\",\n\t\t\t\"IfcPostalAddress\",\n\t\t\t\"IfcPreDefinedPropertySet\",\n\t\t\t\"IfcPresentationItem\",\n\t\t\t\"IfcPresentationLayerAssignment\",\n\t\t\t\"IfcPresentationStyle\",\n\t\t\t\"IfcProduct\",\n\t\t\t\"IfcProductDefinitionShape\",\n\t\t\t\"IfcProductRepresentation\",\n\t\t\t\"IfcProfileDef\",\n\t\t\t\"IfcProject\",\n\t\t\t\"IfcProjectedCRS\",\n\t\t\t\"IfcProperty\",\n\t\t\t\"IfcPropertyAbstraction\",\n\t\t\t\"IfcPropertyBoundedValue\",\n\t\t\t\"IfcPropertyDefinition\",\n\t\t\t\"IfcPropertyEnumeratedValue\",\n\t\t\t\"IfcPropertyEnumeration\",\n\t\t\t\"IfcPropertyListValue\",\n\t\t\t\"IfcPropertySet\",\n\t\t\t\"IfcPropertySetDefinition\",\n\t\t\t\"IfcPropertySingleValue\",\n\t\t\t\"IfcPropertyTableValue\",\n\t\t\t\"IfcProtectiveDevice\",\n\t\t\t\"IfcProtectiveDeviceTrippingUnit\",\n\t\t\t\"IfcProtectiveDeviceTrippingUnitType\",\n\t\t\t\"IfcProtectiveDeviceType\",\n\t\t\t\"IfcPump\",\n\t\t\t\"IfcPumpType\",\n\t\t\t\"IfcQuantityArea\",\n\t\t\t\"IfcQuantityCount\",\n\t\t\t\"IfcQuantityLength\",\n\t\t\t\"IfcQuantitySet\",\n\t\t\t\"IfcQuantityTime\",\n\t\t\t\"IfcQuantityVolume\",\n\t\t\t\"IfcQuantityWeight\",\n\t\t\t\"IfcRailing\",\n\t\t\t\"IfcRailingType\",\n\t\t\t\"IfcRamp\",\n\t\t\t\"IfcRampFlight\",\n\t\t\t\"IfcRampFlightType\",\n\t\t\t\"IfcRampType\",\n\t\t\t\"IfcReinforcingBar\",\n\t\t\t\"IfcReinforcingBarType\",\n\t\t\t\"IfcReinforcingElement\",\n\t\t\t\"IfcReinforcingElementType\",\n\t\t\t\"IfcReinforcingMesh\",\n\t\t\t\"IfcReinforcingMeshType\",\n\t\t\t\"IfcRelAggregates\",\n\t\t\t\"IfcRelAssigns\",\n\t\t\t\"IfcRelAssignsToGroup\",\n\t\t\t\"IfcRelAssociates\",\n\t\t\t\"IfcRelAssociatesClassification\",\n\t\t\t\"IfcRelAssociatesMaterial\",\n\t\t\t\"IfcRelationship\",\n\t\t\t\"IfcRelConnects\",\n\t\t\t\"IfcRelConnectsPorts\",\n\t\t\t\"IfcRelContainedInSpatialStructure\",\n\t\t\t\"IfcRelDeclares\",\n\t\t\t\"IfcRelDecomposes\",\n\t\t\t\"IfcRelDefines\",\n\t\t\t\"IfcRelDefinesByProperties\",\n\t\t\t\"IfcRelDefinesByType\",\n\t\t\t\"IfcRelFillsElement\",\n\t\t\t\"IfcRelNests\",\n\t\t\t\"IfcRelServicesBuildings\",\n\t\t\t\"IfcRelVoidsElement\",\n\t\t\t\"IfcRepresentation\",\n\t\t\t\"IfcRepresentationContext\",\n\t\t\t\"IfcRepresentationItem\",\n\t\t\t\"IfcRepresentationMap\",\n\t\t\t\"IfcRevolvedAreaSolid\",\n\t\t\t\"IfcRoof\",\n\t\t\t\"IfcRoofType\",\n\t\t\t\"IfcRoot\",\n\t\t\t\"IfcSanitaryTerminal\",\n\t\t\t\"IfcSanitaryTerminalType\",\n\t\t\t\"IfcSensor\",\n\t\t\t\"IfcSensorType\",\n\t\t\t\"IfcShadingDevice\",\n\t\t\t\"IfcShadingDeviceType\",\n\t\t\t\"IfcShapeAspect\",\n\t\t\t\"IfcShapeModel\",\n\t\t\t\"IfcShapeRepresentation\",\n\t\t\t\"IfcSimpleProperty\",\n\t\t\t\"IfcSite\",\n\t\t\t\"IfcSIUnit\",\n\t\t\t\"IfcSlab\",\n\t\t\t\"IfcSlabType\",\n\t\t\t\"IfcSolarDevice\",\n\t\t\t\"IfcSolarDeviceType\",\n\t\t\t\"IfcSolidModel\",\n\t\t\t\"IfcSpace\",\n\t\t\t\"IfcSpaceHeater\",\n\t\t\t\"IfcSpaceHeaterType\",\n\t\t\t\"IfcSpaceType\",\n\t\t\t\"IfcSpatialElement\",\n\t\t\t\"IfcSpatialElementType\",\n\t\t\t\"IfcSpatialStructureElement\",\n\t\t\t\"IfcSpatialStructureElementType\",\n\t\t\t\"IfcSpatialZone\",\n\t\t\t\"IfcSpatialZoneType\",\n\t\t\t\"IfcStackTerminal\",\n\t\t\t\"IfcStackTerminalType\",\n\t\t\t\"IfcStair\",\n\t\t\t\"IfcStairFlight\",\n\t\t\t\"IfcStairFlightType\",\n\t\t\t\"IfcStairType\",\n\t\t\t\"IfcStyledItem\",\n\t\t\t\"IfcSurfaceStyle\",\n\t\t\t\"IfcSurfaceStyleRendering\",\n\t\t\t\"IfcSurfaceStyleShading\",\n\t\t\t\"IfcSweptAreaSolid\",\n\t\t\t\"IfcSweptDiskSolid\",\n\t\t\t\"IfcSwitchingDevice\",\n\t\t\t\"IfcSwitchingDeviceType\",\n\t\t\t\"IfcSystem\",\n\t\t\t\"IfcSystemFurnitureElement\",\n\t\t\t\"IfcSystemFurnitureElementType\",\n\t\t\t\"IfcTank\",\n\t\t\t\"IfcTankType\",\n\t\t\t\"IfcTelecomAddress\",\n\t\t\t\"IfcTendon\",\n\t\t\t\"IfcTendonAnchor\",\n\t\t\t\"IfcTendonAnchorType\",\n\t\t\t\"IfcTendonType\",\n\t\t\t\"IfcTessellatedFaceSet\",\n\t\t\t\"IfcTessellatedItem\",\n\t\t\t\"IfcTransformer\",\n\t\t\t\"IfcTransformerType\",\n\t\t\t\"IfcTransportElement\",\n\t\t\t\"IfcTransportElementType\",\n\t\t\t\"IfcTriangulatedFaceSet\",\n\t\t\t\"IfcTubeBundle\",\n\t\t\t\"IfcTubeBundleType\",\n\t\t\t\"IfcTypeObject\",\n\t\t\t\"IfcTypeProduct\",\n\t\t\t\"IfcUnitaryControlElement\",\n\t\t\t\"IfcUnitaryControlElementType\",\n\t\t\t\"IfcUnitaryEquipment\",\n\t\t\t\"IfcUnitaryEquipmentType\",\n\t\t\t\"IfcUnitAssignment\",\n\t\t\t\"IfcValve\",\n\t\t\t\"IfcValveType\",\n\t\t\t\"IfcVector\",\n\t\t\t\"IfcVibrationIsolator\",\n\t\t\t\"IfcVibrationIsolatorType\",\n\t\t\t\"IfcVoidingFeature\",\n\t\t\t\"IfcWall\",\n\t\t\t\"IfcWallType\",\n\t\t\t\"IfcWasteTerminal\",\n\t\t\t\"IfcWasteTerminalType\",\n\t\t\t\"IfcWindow\",\n\t\t\t\"IfcWindowLiningProperties\",\n\t\t\t\"IfcWindowPanelProperties\",\n\t\t\t\"IfcWindowType\",\n\t\t\t\"IfcZone\"\n\t\t],\n\t\t\"PropertySetList\" : [\n\t\t\t\"Pset_ActuatorTypeCommon\",\n\t\t\t\"Pset_ActuatorTypeLinearActuation\",\n\t\t\t\"Pset_ActuatorTypeRotationalActuation\",\n\t\t\t\"Pset_AirTerminalBoxTypeCommon\",\n\t\t\t\"Pset_AirTerminalOccurrence\",\n\t\t\t\"Pset_AirTerminalTypeCommon\",\n\t\t\t\"Pset_AirToAirHeatRecoveryTypeCommon\",\n\t\t\t\"Pset_AlarmTypeCommon\",\n\t\t\t\"Pset_AudioVisualApplianceTypeCommon\",\n\t\t\t\"Pset_BeamCommon\",\n\t\t\t\"Pset_BoilerTypeCommon\",\n\t\t\t\"Pset_BuildingCommon\",\n\t\t\t\"Pset_BuildingElementProxyCommon\",\n\t\t\t\"Pset_BuildingElementProxyProvisionForVoid\",\n\t\t\t\"Pset_BuildingStoreyCommon\",\n\t\t\t\"Pset_BuildingSystemCommon\",\n\t\t\t\"Pset_BuildingUse\",\n\t\t\t\"Pset_BuildingUseAdjacent\",\n\t\t\t\"Pset_BurnerTypeCommon\",\n\t\t\t\"Pset_CableCarrierFittingTypeCommon\",\n\t\t\t\"Pset_CableCarrierSegmentTypeCommon\",\n\t\t\t\"Pset_CableFittingTypeCommon\",\n\t\t\t\"Pset_CableSegmentOccurrence\",\n\t\t\t\"Pset_CableSegmentTypeCommon\",\n\t\t\t\"Pset_ChillerTypeCommon\",\n\t\t\t\"Pset_ChimneyCommon\",\n\t\t\t\"Pset_CivilElementCommon\",\n\t\t\t\"Pset_CoilOccurrence\",\n\t\t\t\"Pset_CoilTypeCommon\",\n\t\t\t\"Pset_CoilTypeHydronic\",\n\t\t\t\"Pset_ColumnCommon\",\n\t\t\t\"Pset_CommunicationsApplianceTypeCommon\",\n\t\t\t\"Pset_CompressorTypeCommon\",\n\t\t\t\"Pset_CondenserTypeCommon\",\n\t\t\t\"Pset_Condition\",\n\t\t\t\"Pset_ControllerTypeCommon\",\n\t\t\t\"Pset_CooledBeamTypeCommon\",\n\t\t\t\"Pset_CoolingTowerTypeCommon\",\n\t\t\t\"Pset_CoveringCommon\",\n\t\t\t\"Pset_CurtainWallCommon\",\n\t\t\t\"Pset_DamperOccurrence\",\n\t\t\t\"Pset_DamperTypeCommon\",\n\t\t\t\"Pset_DistributionChamberElementCommon\",\n\t\t\t\"Pset_DistributionPortCommon\",\n\t\t\t\"Pset_DistributionSystemCommon\",\n\t\t\t\"Pset_DoorCommon\",\n\t\t\t\"Pset_DuctFittingOccurrence\",\n\t\t\t\"Pset_DuctFittingTypeCommon\",\n\t\t\t\"Pset_DuctSegmentOccurrence\",\n\t\t\t\"Pset_DuctSegmentTypeCommon\",\n\t\t\t\"Pset_DuctSilencerTypeCommon\",\n\t\t\t\"Pset_ElectricalDeviceCommon\",\n\t\t\t\"Pset_ElectricApplianceTypeCommon\",\n\t\t\t\"Pset_ElectricDistributionBoardOccurrence\",\n\t\t\t\"Pset_ElectricDistributionBoardTypeCommon\",\n\t\t\t\"Pset_ElectricFlowStorageDeviceTypeCommon\",\n\t\t\t\"Pset_ElectricGeneratorTypeCommon\",\n\t\t\t\"Pset_ElectricMotorTypeCommon\",\n\t\t\t\"Pset_ElectricTimeControlTypeCommon\",\n\t\t\t\"Pset_ElementAssemblyCommon\",\n\t\t\t\"Pset_EngineTypeCommon\",\n\t\t\t\"Pset_EnvironmentalImpactIndicators\",\n\t\t\t\"Pset_EnvironmentalImpactValues\",\n\t\t\t\"Pset_EvaporativeCoolerTypeCommon\",\n\t\t\t\"Pset_EvaporatorTypeCommon\",\n\t\t\t\"Pset_FanOccurrence\",\n\t\t\t\"Pset_FanTypeCommon\",\n\t\t\t\"Pset_FilterTypeCommon\",\n\t\t\t\"Pset_FireSuppressionTerminalTypeCommon\",\n\t\t\t\"Pset_FlowInstrumentTypeCommon\",\n\t\t\t\"Pset_FlowMeterOccurrence\",\n\t\t\t\"Pset_FlowMeterTypeCommon\",\n\t\t\t\"Pset_FootingCommon\",\n\t\t\t\"Pset_FurnitureTypeCommon\",\n\t\t\t\"Pset_HeatExchangerTypeCommon\",\n\t\t\t\"Pset_HumidifierTypeCommon\",\n\t\t\t\"Pset_InterceptorTypeCommon\",\n\t\t\t\"Pset_JunctionBoxTypeCommon\",\n\t\t\t\"Pset_LampTypeCommon\",\n\t\t\t\"Pset_LandRegistration\",\n\t\t\t\"Pset_LightFixtureTypeCommon\",\n\t\t\t\"Pset_ManufacturerOccurrence\",\n\t\t\t\"Pset_ManufacturerTypeInformation\",\n\t\t\t\"Pset_MaterialCombustion\",\n\t\t\t\"Pset_MaterialCommon\",\n\t\t\t\"Pset_MaterialConcrete\",\n\t\t\t\"Pset_MaterialEnergy\",\n\t\t\t\"Pset_MaterialFuel\",\n\t\t\t\"Pset_MaterialHygroscopic\",\n\t\t\t\"Pset_MaterialMechanical\",\n\t\t\t\"Pset_MaterialOptical\",\n\t\t\t\"Pset_MaterialSteel\",\n\t\t\t\"Pset_MaterialThermal\",\n\t\t\t\"Pset_MaterialWater\",\n\t\t\t\"Pset_MaterialWood\",\n\t\t\t\"Pset_MaterialWoodBasedBeam\",\n\t\t\t\"Pset_MaterialWoodBasedPanel\",\n\t\t\t\"Pset_MechanicalFastenerAnchorBolt\",\n\t\t\t\"Pset_MechanicalFastenerBolt\",\n\t\t\t\"Pset_MechanicalFastenerCommon\",\n\t\t\t\"Pset_MedicalDeviceTypeCommon\",\n\t\t\t\"Pset_MemberCommon\",\n\t\t\t\"Pset_MotorConnectionTypeCommon\",\n\t\t\t\"Pset_OpeningElementCommon\",\n\t\t\t\"Pset_OutletTypeCommon\",\n\t\t\t\"Pset_OutsideDesignCriteria\",\n\t\t\t\"Pset_PileCommon\",\n\t\t\t\"Pset_PipeConnectionFlanged\",\n\t\t\t\"Pset_PipeFittingOccurrence\",\n\t\t\t\"Pset_PipeFittingTypeCommon\",\n\t\t\t\"Pset_PipeSegmentOccurrence\",\n\t\t\t\"Pset_PipeSegmentTypeCommon\",\n\t\t\t\"Pset_PlateCommon\",\n\t\t\t\"Pset_PrecastSlab\",\n\t\t\t\"Pset_PropertyAgreement\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitI2TCurve\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitI2TFuseCurve\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitIPICurve\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection\",\n\t\t\t\"Pset_ProtectiveDeviceOccurrence\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionGCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionICurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionLCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionSCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingUnitTypeCommon\",\n\t\t\t\"Pset_ProtectiveDeviceTypeCommon\",\n\t\t\t\"Pset_PumpOccurrence\",\n\t\t\t\"Pset_PumpTypeCommon\",\n\t\t\t\"Pset_RailingCommon\",\n\t\t\t\"Pset_RampCommon\",\n\t\t\t\"Pset_RampFlightCommon\",\n\t\t\t\"Pset_ReinforcementBarCountOfIndependentFooting\",\n\t\t\t\"Pset_ReinforcementBarPitchOfBeam\",\n\t\t\t\"Pset_ReinforcementBarPitchOfColumn\",\n\t\t\t\"Pset_ReinforcementBarPitchOfContinuousFooting\",\n\t\t\t\"Pset_ReinforcementBarPitchOfSlab\",\n\t\t\t\"Pset_ReinforcementBarPitchOfWall\",\n\t\t\t\"Pset_ReinforcingBarCommon\",\n\t\t\t\"Pset_ReinforcingMeshCommon\",\n\t\t\t\"Pset_RoofCommon\",\n\t\t\t\"Pset_SanitaryTerminalTypeCommon\",\n\t\t\t\"Pset_SensorTypeCommon\",\n\t\t\t\"Pset_ServiceLife\",\n\t\t\t\"Pset_ServiceLifeFactors\",\n\t\t\t\"Pset_ShadingDeviceCommon\",\n\t\t\t\"Pset_SiteCommon\",\n\t\t\t\"Pset_SlabCommon\",\n\t\t\t\"Pset_SolarDeviceTypeCommon\",\n\t\t\t\"Pset_SpaceCommon\",\n\t\t\t\"Pset_SpaceCoveringRequirements\",\n\t\t\t\"Pset_SpaceHeaterTypeCommon\",\n\t\t\t\"Pset_SpaceThermalDesign\",\n\t\t\t\"Pset_SpaceThermalLoad\",\n\t\t\t\"Pset_SpatialZoneCommon\",\n\t\t\t\"Pset_StackTerminalTypeCommon\",\n\t\t\t\"Pset_StairCommon\",\n\t\t\t\"Pset_StairFlightCommon\",\n\t\t\t\"Pset_SwitchingDeviceTypeCommon\",\n\t\t\t\"Pset_SystemFurnitureElementTypeCommon\",\n\t\t\t\"Pset_TankOccurrence\",\n\t\t\t\"Pset_TankTypeCommon\",\n\t\t\t\"Pset_TendonAnchorCommon\",\n\t\t\t\"Pset_TendonCommon\",\n\t\t\t\"Pset_ThermalLoadAggregate\",\n\t\t\t\"Pset_ThermalLoadDesignCriteria\",\n\t\t\t\"Pset_TransformerTypeCommon\",\n\t\t\t\"Pset_TransportElementCommon\",\n\t\t\t\"Pset_TubeBundleTypeCommon\",\n\t\t\t\"Pset_UnitaryControlElementTypeCommon\",\n\t\t\t\"Pset_UnitaryEquipmentTypeCommon\",\n\t\t\t\"Pset_ValveTypeCommon\",\n\t\t\t\"Pset_VibrationIsolatorTypeCommon\",\n\t\t\t\"Pset_WallCommon\",\n\t\t\t\"Pset_Warranty\",\n\t\t\t\"Pset_WasteTerminalTypeCommon\",\n\t\t\t\"Pset_WindowCommon\",\n\t\t\t\"Pset_ZoneCommon\",\n\t\t\t\"Qto_ActuatorBaseQuantities\",\n\t\t\t\"Qto_AirTerminalBaseQuantities\",\n\t\t\t\"Qto_AirTerminalBoxTypeBaseQuantities\",\n\t\t\t\"Qto_AirToAirHeatRecoveryBaseQuantities\",\n\t\t\t\"Qto_AlarmBaseQuantities\",\n\t\t\t\"Qto_AudioVisualApplianceBaseQuantities\",\n\t\t\t\"Qto_BeamBaseQuantities\",\n\t\t\t\"Qto_BoilerBaseQuantities\",\n\t\t\t\"Qto_BuildingBaseQuantities\",\n\t\t\t\"Qto_BuildingElementProxyQuantities\",\n\t\t\t\"Qto_BuildingStoreyBaseQuantities\",\n\t\t\t\"Qto_BurnerBaseQuantities\",\n\t\t\t\"Qto_CableCarrierFittingBaseQuantities\",\n\t\t\t\"Qto_CableCarrierSegmentBaseQuantities\",\n\t\t\t\"Qto_CableFittingBaseQuantities\",\n\t\t\t\"Qto_CableSegmentBaseQuantities\",\n\t\t\t\"Qto_ChillerBaseQuantities\",\n\t\t\t\"Qto_ChimneyBaseQuantities\",\n\t\t\t\"Qto_CoilBaseQuantities\",\n\t\t\t\"Qto_ColumnBaseQuantities\",\n\t\t\t\"Qto_CommunicationsApplianceBaseQuantities\",\n\t\t\t\"Qto_CompressorBaseQuantities\",\n\t\t\t\"Qto_CondenserBaseQuantities\",\n\t\t\t\"Qto_ControllerBaseQuantities\",\n\t\t\t\"Qto_CooledBeamBaseQuantities\",\n\t\t\t\"Qto_CoolingTowerBaseQuantities\",\n\t\t\t\"Qto_CoveringBaseQuantities\",\n\t\t\t\"Qto_CurtainWallQuantities\",\n\t\t\t\"Qto_DamperBaseQuantities\",\n\t\t\t\"Qto_DistributionChamberElementBaseQuantities\",\n\t\t\t\"Qto_DoorBaseQuantities\",\n\t\t\t\"Qto_DuctFittingBaseQuantities\",\n\t\t\t\"Qto_DuctSegmentBaseQuantities\",\n\t\t\t\"Qto_DuctSilencerBaseQuantities\",\n\t\t\t\"Qto_ElectricApplianceBaseQuantities\",\n\t\t\t\"Qto_ElectricDistributionBoardBaseQuantities\",\n\t\t\t\"Qto_ElectricFlowStorageDeviceBaseQuantities\",\n\t\t\t\"Qto_ElectricGeneratorBaseQuantities\",\n\t\t\t\"Qto_ElectricMotorBaseQuantities\",\n\t\t\t\"Qto_ElectricTimeControlBaseQuantities\",\n\t\t\t\"Qto_EvaporativeCoolerBaseQuantities\",\n\t\t\t\"Qto_EvaporatorBaseQuantities\",\n\t\t\t\"Qto_FanBaseQuantities\",\n\t\t\t\"Qto_FilterBaseQuantities\",\n\t\t\t\"Qto_FireSuppressionTerminalBaseQuantities\",\n\t\t\t\"Qto_FlowInstrumentBaseQuantities\",\n\t\t\t\"Qto_FlowMeterBaseQuantities\",\n\t\t\t\"Qto_FootingBaseQuantities\",\n\t\t\t\"Qto_HeatExchangerBaseQuantities\",\n\t\t\t\"Qto_HumidifierBaseQuantities\",\n\t\t\t\"Qto_InterceptorBaseQuantities\",\n\t\t\t\"Qto_JunctionBoxBaseQuantities\",\n\t\t\t\"Qto_LampBaseQuantities\",\n\t\t\t\"Qto_LightFixtureBaseQuantities\",\n\t\t\t\"Qto_MemberBaseQuantities\",\n\t\t\t\"Qto_MotorConnectionBaseQuantities\",\n\t\t\t\"Qto_OpeningElementBaseQuantities\",\n\t\t\t\"Qto_OutletBaseQuantities\",\n\t\t\t\"Qto_PileBaseQuantities\",\n\t\t\t\"Qto_PipeFittingBaseQuantities\",\n\t\t\t\"Qto_PipeSegmentBaseQuantities\",\n\t\t\t\"Qto_PlateBaseQuantities\",\n\t\t\t\"Qto_ProtectiveDeviceBaseQuantities\",\n\t\t\t\"Qto_ProtectiveDeviceTrippingUnitBaseQuantities\",\n\t\t\t\"Qto_PumpBaseQuantities\",\n\t\t\t\"Qto_RailingBaseQuantities\",\n\t\t\t\"Qto_RampFlightBaseQuantities\",\n\t\t\t\"Qto_ReinforcingElementBaseQuantities\",\n\t\t\t\"Qto_RoofBaseQuantities\",\n\t\t\t\"Qto_SanitaryTerminalBaseQuantities\",\n\t\t\t\"Qto_SensorBaseQuantities\",\n\t\t\t\"Qto_SiteBaseQuantities\",\n\t\t\t\"Qto_SlabBaseQuantities\",\n\t\t\t\"Qto_SolarDeviceBaseQuantities\",\n\t\t\t\"Qto_SpaceBaseQuantities\",\n\t\t\t\"Qto_SpaceHeaterBaseQuantities\",\n\t\t\t\"Qto_StackTerminalBaseQuantities\",\n\t\t\t\"Qto_StairFlightBaseQuantities\",\n\t\t\t\"Qto_SwitchingDeviceBaseQuantities\",\n\t\t\t\"Qto_TankBaseQuantities\",\n\t\t\t\"Qto_TransformerBaseQuantities\",\n\t\t\t\"Qto_TubeBundleBaseQuantities\",\n\t\t\t\"Qto_UnitaryControlElementBaseQuantities\",\n\t\t\t\"Qto_UnitaryEquipmentBaseQuantities\",\n\t\t\t\"Qto_ValveBaseQuantities\",\n\t\t\t\"Qto_VibrationIsolatorBaseQuantities\",\n\t\t\t\"Qto_WallBaseQuantities\",\n\t\t\t\"Qto_WasteTerminalBaseQuantities\",\n\t\t\t\"Qto_WindowBaseQuantities\"\n\t\t]\n\t},\n\t\"IFC4DTV\" : {\n\t\t\"Version\" : \"V1.0\",\n\t\t\"EntityList\" : [\n\t\t\t\"IfcActorRole\",\n\t\t\t\"IfcActuator\",\n\t\t\t\"IfcActuatorType\",\n\t\t\t\"IfcAddress\",\n\t\t\t\"IfcAdvancedBrep\",\n\t\t\t\"IfcAdvancedFace\",\n\t\t\t\"IfcAirTerminal\",\n\t\t\t\"IfcAirTerminalBox\",\n\t\t\t\"IfcAirTerminalBoxType\",\n\t\t\t\"IfcAirTerminalType\",\n\t\t\t\"IfcAirToAirHeatRecovery\",\n\t\t\t\"IfcAirToAirHeatRecoveryType\",\n\t\t\t\"IfcAlarm\",\n\t\t\t\"IfcAlarmType\",\n\t\t\t\"IfcApplication\",\n\t\t\t\"IfcArbitraryClosedProfileDef\",\n\t\t\t\"IfcArbitraryOpenProfileDef\",\n\t\t\t\"IfcArbitraryProfileDefWithVoids\",\n\t\t\t\"IfcAsymmetricIShapeProfileDef\",\n\t\t\t\"IfcAudioVisualAppliance\",\n\t\t\t\"IfcAudioVisualApplianceType\",\n\t\t\t\"IfcAxis1Placement\",\n\t\t\t\"IfcAxis2Placement2D\",\n\t\t\t\"IfcAxis2Placement3D\",\n\t\t\t\"IfcBeam\",\n\t\t\t\"IfcBeamStandardCase\",\n\t\t\t\"IfcBeamType\",\n\t\t\t\"IfcBlock\",\n\t\t\t\"IfcBoiler\",\n\t\t\t\"IfcBoilerType\",\n\t\t\t\"IfcBooleanClippingResult\",\n\t\t\t\"IfcBooleanResult\",\n\t\t\t\"IfcBoundedCurve\",\n\t\t\t\"IfcBoundedSurface\",\n\t\t\t\"IfcBSplineCurve\",\n\t\t\t\"IfcBSplineCurveWithKnots\",\n\t\t\t\"IfcBSplineSurface\",\n\t\t\t\"IfcBSplineSurfaceWithKnots\",\n\t\t\t\"IfcBuilding\",\n\t\t\t\"IfcBuildingElement\",\n\t\t\t\"IfcBuildingElementPart\",\n\t\t\t\"IfcBuildingElementPartType\",\n\t\t\t\"IfcBuildingElementProxy\",\n\t\t\t\"IfcBuildingElementProxyType\",\n\t\t\t\"IfcBuildingElementType\",\n\t\t\t\"IfcBuildingStorey\",\n\t\t\t\"IfcBuildingSystem\",\n\t\t\t\"IfcBurner\",\n\t\t\t\"IfcBurnerType\",\n\t\t\t\"IfcCableCarrierFitting\",\n\t\t\t\"IfcCableCarrierFittingType\",\n\t\t\t\"IfcCableCarrierSegment\",\n\t\t\t\"IfcCableCarrierSegmentType\",\n\t\t\t\"IfcCableFitting\",\n\t\t\t\"IfcCableFittingType\",\n\t\t\t\"IfcCableSegment\",\n\t\t\t\"IfcCableSegmentType\",\n\t\t\t\"IfcCartesianPoint\",\n\t\t\t\"IfcCartesianPointList\",\n\t\t\t\"IfcCartesianPointList2D\",\n\t\t\t\"IfcCartesianPointList3D\",\n\t\t\t\"IfcCartesianTransformationOperator\",\n\t\t\t\"IfcCartesianTransformationOperator2D\",\n\t\t\t\"IfcCartesianTransformationOperator2DnonUniform\",\n\t\t\t\"IfcCartesianTransformationOperator3D\",\n\t\t\t\"IfcCartesianTransformationOperator3DnonUniform\",\n\t\t\t\"IfcCenterLineProfileDef\",\n\t\t\t\"IfcChiller\",\n\t\t\t\"IfcChillerType\",\n\t\t\t\"IfcChimney\",\n\t\t\t\"IfcChimneyType\",\n\t\t\t\"IfcCircle\",\n\t\t\t\"IfcCircleHollowProfileDef\",\n\t\t\t\"IfcCircleProfileDef\",\n\t\t\t\"IfcCivilElement\",\n\t\t\t\"IfcCivilElementType\",\n\t\t\t\"IfcClassification\",\n\t\t\t\"IfcClassificationReference\",\n\t\t\t\"IfcClosedShell\",\n\t\t\t\"IfcCoil\",\n\t\t\t\"IfcCoilType\",\n\t\t\t\"IfcColourRgb\",\n\t\t\t\"IfcColourRgbList\",\n\t\t\t\"IfcColourSpecification\",\n\t\t\t\"IfcColumn\",\n\t\t\t\"IfcColumnStandardCase\",\n\t\t\t\"IfcColumnType\",\n\t\t\t\"IfcCommunicationsAppliance\",\n\t\t\t\"IfcCommunicationsApplianceType\",\n\t\t\t\"IfcComplexProperty\",\n\t\t\t\"IfcCompositeProfileDef\",\n\t\t\t\"IfcCompressor\",\n\t\t\t\"IfcCompressorType\",\n\t\t\t\"IfcCondenser\",\n\t\t\t\"IfcCondenserType\",\n\t\t\t\"IfcConic\",\n\t\t\t\"IfcConnectedFaceSet\",\n\t\t\t\"IfcConnectionCurveGeometry\",\n\t\t\t\"IfcConnectionGeometry\",\n\t\t\t\"IfcConnectionVolumeGeometry\",\n\t\t\t\"IfcContext\",\n\t\t\t\"IfcController\",\n\t\t\t\"IfcControllerType\",\n\t\t\t\"IfcConversionBasedUnit\",\n\t\t\t\"IfcConversionBasedUnitWithOffset\",\n\t\t\t\"IfcCooledBeam\",\n\t\t\t\"IfcCooledBeamType\",\n\t\t\t\"IfcCoolingTower\",\n\t\t\t\"IfcCoolingTowerType\",\n\t\t\t\"IfcCoordinateOperation\",\n\t\t\t\"IfcCoordinateReferenceSystem\",\n\t\t\t\"IfcCovering\",\n\t\t\t\"IfcCoveringType\",\n\t\t\t\"IfcCsgPrimitive3D\",\n\t\t\t\"IfcCsgSolid\",\n\t\t\t\"IfcCShapeProfileDef\",\n\t\t\t\"IfcCurtainWall\",\n\t\t\t\"IfcCurtainWallType\",\n\t\t\t\"IfcCurve\",\n\t\t\t\"IfcCurveStyle\",\n\t\t\t\"IfcCurveStyleFont\",\n\t\t\t\"IfcCurveStyleFontPattern\",\n\t\t\t\"IfcDamper\",\n\t\t\t\"IfcDamperType\",\n\t\t\t\"IfcDerivedProfileDef\",\n\t\t\t\"IfcDerivedUnit\",\n\t\t\t\"IfcDerivedUnitElement\",\n\t\t\t\"IfcDimensionalExponents\",\n\t\t\t\"IfcDirection\",\n\t\t\t\"IfcDiscreteAccessory\",\n\t\t\t\"IfcDiscreteAccessoryType\",\n\t\t\t\"IfcDistributionChamberElement\",\n\t\t\t\"IfcDistributionChamberElementType\",\n\t\t\t\"IfcDistributionCircuit\",\n\t\t\t\"IfcDistributionControlElement\",\n\t\t\t\"IfcDistributionControlElementType\",\n\t\t\t\"IfcDistributionElement\",\n\t\t\t\"IfcDistributionElementType\",\n\t\t\t\"IfcDistributionFlowElement\",\n\t\t\t\"IfcDistributionFlowElementType\",\n\t\t\t\"IfcDistributionPort\",\n\t\t\t\"IfcDistributionSystem\",\n\t\t\t\"IfcDocumentReference\",\n\t\t\t\"IfcDoor\",\n\t\t\t\"IfcDoorLiningProperties\",\n\t\t\t\"IfcDoorPanelProperties\",\n\t\t\t\"IfcDoorStandardCase\",\n\t\t\t\"IfcDoorType\",\n\t\t\t\"IfcDuctFitting\",\n\t\t\t\"IfcDuctFittingType\",\n\t\t\t\"IfcDuctSegment\",\n\t\t\t\"IfcDuctSegmentType\",\n\t\t\t\"IfcDuctSilencer\",\n\t\t\t\"IfcDuctSilencerType\",\n\t\t\t\"IfcEdge\",\n\t\t\t\"IfcEdgeCurve\",\n\t\t\t\"IfcEdgeLoop\",\n\t\t\t\"IfcElectricAppliance\",\n\t\t\t\"IfcElectricApplianceType\",\n\t\t\t\"IfcElectricDistributionBoard\",\n\t\t\t\"IfcElectricDistributionBoardType\",\n\t\t\t\"IfcElectricFlowStorageDevice\",\n\t\t\t\"IfcElectricFlowStorageDeviceType\",\n\t\t\t\"IfcElectricGenerator\",\n\t\t\t\"IfcElectricGeneratorType\",\n\t\t\t\"IfcElectricMotor\",\n\t\t\t\"IfcElectricMotorType\",\n\t\t\t\"IfcElectricTimeControl\",\n\t\t\t\"IfcElectricTimeControlType\",\n\t\t\t\"IfcElement\",\n\t\t\t\"IfcElementarySurface\",\n\t\t\t\"IfcElementAssembly\",\n\t\t\t\"IfcElementAssemblyType\",\n\t\t\t\"IfcElementComponent\",\n\t\t\t\"IfcElementComponentType\",\n\t\t\t\"IfcElementQuantity\",\n\t\t\t\"IfcElementType\",\n\t\t\t\"IfcEllipseProfileDef\",\n\t\t\t\"IfcEnergyConversionDevice\",\n\t\t\t\"IfcEnergyConversionDeviceType\",\n\t\t\t\"IfcEngine\",\n\t\t\t\"IfcEngineType\",\n\t\t\t\"IfcEvaporativeCooler\",\n\t\t\t\"IfcEvaporativeCoolerType\",\n\t\t\t\"IfcEvaporator\",\n\t\t\t\"IfcEvaporatorType\",\n\t\t\t\"IfcExtendedProperties\",\n\t\t\t\"IfcExternalInformation\",\n\t\t\t\"IfcExternalReference\",\n\t\t\t\"IfcExtrudedAreaSolid\",\n\t\t\t\"IfcExtrudedAreaSolidTapered\",\n\t\t\t\"IfcFace\",\n\t\t\t\"IfcFaceBasedSurfaceModel\",\n\t\t\t\"IfcFaceBound\",\n\t\t\t\"IfcFaceOuterBound\",\n\t\t\t\"IfcFaceSurface\",\n\t\t\t\"IfcFacetedBrep\",\n\t\t\t\"IfcFan\",\n\t\t\t\"IfcFanType\",\n\t\t\t\"IfcFastener\",\n\t\t\t\"IfcFastenerType\",\n\t\t\t\"IfcFeatureElement\",\n\t\t\t\"IfcFeatureElementAddition\",\n\t\t\t\"IfcFeatureElementSubtraction\",\n\t\t\t\"IfcFillAreaStyle\",\n\t\t\t\"IfcFillAreaStyleHatching\",\n\t\t\t\"IfcFilter\",\n\t\t\t\"IfcFilterType\",\n\t\t\t\"IfcFireSuppressionTerminal\",\n\t\t\t\"IfcFireSuppressionTerminalType\",\n\t\t\t\"IfcFixedReferenceSweptAreaSolid\",\n\t\t\t\"IfcFlowController\",\n\t\t\t\"IfcFlowControllerType\",\n\t\t\t\"IfcFlowFitting\",\n\t\t\t\"IfcFlowFittingType\",\n\t\t\t\"IfcFlowInstrument\",\n\t\t\t\"IfcFlowInstrumentType\",\n\t\t\t\"IfcFlowMeter\",\n\t\t\t\"IfcFlowMeterType\",\n\t\t\t\"IfcFlowMovingDevice\",\n\t\t\t\"IfcFlowMovingDeviceType\",\n\t\t\t\"IfcFlowSegment\",\n\t\t\t\"IfcFlowSegmentType\",\n\t\t\t\"IfcFlowStorageDevice\",\n\t\t\t\"IfcFlowStorageDeviceType\",\n\t\t\t\"IfcFlowTerminal\",\n\t\t\t\"IfcFlowTerminalType\",\n\t\t\t\"IfcFlowTreatmentDevice\",\n\t\t\t\"IfcFlowTreatmentDeviceType\",\n\t\t\t\"IfcFooting\",\n\t\t\t\"IfcFootingType\",\n\t\t\t\"IfcFurnishingElement\",\n\t\t\t\"IfcFurnishingElementType\",\n\t\t\t\"IfcFurniture\",\n\t\t\t\"IfcFurnitureType\",\n\t\t\t\"IfcGeographicElement\",\n\t\t\t\"IfcGeographicElementType\",\n\t\t\t\"IfcGeometricCurveSet\",\n\t\t\t\"IfcGeometricRepresentationContext\",\n\t\t\t\"IfcGeometricRepresentationItem\",\n\t\t\t\"IfcGeometricRepresentationSubContext\",\n\t\t\t\"IfcGeometricSet\",\n\t\t\t\"IfcGrid\",\n\t\t\t\"IfcGridAxis\",\n\t\t\t\"IfcGridPlacement\",\n\t\t\t\"IfcGroup\",\n\t\t\t\"IfcHalfSpaceSolid\",\n\t\t\t\"IfcHeatExchanger\",\n\t\t\t\"IfcHeatExchangerType\",\n\t\t\t\"IfcHumidifier\",\n\t\t\t\"IfcHumidifierType\",\n\t\t\t\"IfcImageTexture\",\n\t\t\t\"IfcIndexedColourMap\",\n\t\t\t\"IfcIndexedPolyCurve\",\n\t\t\t\"IfcIndexedTextureMap\",\n\t\t\t\"IfcIndexedTriangleTextureMap\",\n\t\t\t\"IfcInterceptor\",\n\t\t\t\"IfcInterceptorType\",\n\t\t\t\"IfcIShapeProfileDef\",\n\t\t\t\"IfcJunctionBox\",\n\t\t\t\"IfcJunctionBoxType\",\n\t\t\t\"IfcLamp\",\n\t\t\t\"IfcLampType\",\n\t\t\t\"IfcLibraryInformation\",\n\t\t\t\"IfcLibraryReference\",\n\t\t\t\"IfcLightFixture\",\n\t\t\t\"IfcLightFixtureType\",\n\t\t\t\"IfcLine\",\n\t\t\t\"IfcLocalPlacement\",\n\t\t\t\"IfcLoop\",\n\t\t\t\"IfcLShapeProfileDef\",\n\t\t\t\"IfcManifoldSolidBrep\",\n\t\t\t\"IfcMapConversion\",\n\t\t\t\"IfcMappedItem\",\n\t\t\t\"IfcMaterial\",\n\t\t\t\"IfcMaterialConstituent\",\n\t\t\t\"IfcMaterialConstituentSet\",\n\t\t\t\"IfcMaterialDefinition\",\n\t\t\t\"IfcMaterialDefinitionRepresentation\",\n\t\t\t\"IfcMaterialLayer\",\n\t\t\t\"IfcMaterialLayerSet\",\n\t\t\t\"IfcMaterialLayerSetUsage\",\n\t\t\t\"IfcMaterialLayerWithOffsets\",\n\t\t\t\"IfcMaterialProfile\",\n\t\t\t\"IfcMaterialProfileSet\",\n\t\t\t\"IfcMaterialProfileSetUsage\",\n\t\t\t\"IfcMaterialProfileSetUsageTapering\",\n\t\t\t\"IfcMaterialProfileWithOffsets\",\n\t\t\t\"IfcMaterialProperties\",\n\t\t\t\"IfcMaterialUsageDefinition\",\n\t\t\t\"IfcMeasureWithUnit\",\n\t\t\t\"IfcMechanicalFastener\",\n\t\t\t\"IfcMechanicalFastenerType\",\n\t\t\t\"IfcMedicalDevice\",\n\t\t\t\"IfcMedicalDeviceType\",\n\t\t\t\"IfcMember\",\n\t\t\t\"IfcMemberStandardCase\",\n\t\t\t\"IfcMemberType\",\n\t\t\t\"IfcMonetaryUnit\",\n\t\t\t\"IfcMotorConnection\",\n\t\t\t\"IfcMotorConnectionType\",\n\t\t\t\"IfcNamedUnit\",\n\t\t\t\"IfcObject\",\n\t\t\t\"IfcObjectDefinition\",\n\t\t\t\"IfcObjectPlacement\",\n\t\t\t\"IfcOpeningElement\",\n\t\t\t\"IfcOpeningStandardCase\",\n\t\t\t\"IfcOpenShell\",\n\t\t\t\"IfcOrganization\",\n\t\t\t\"IfcOrientedEdge\",\n\t\t\t\"IfcOutlet\",\n\t\t\t\"IfcOutletType\",\n\t\t\t\"IfcOwnerHistory\",\n\t\t\t\"IfcParameterizedProfileDef\",\n\t\t\t\"IfcPcurve\",\n\t\t\t\"IfcPerson\",\n\t\t\t\"IfcPersonAndOrganization\",\n\t\t\t\"IfcPhysicalComplexQuantity\",\n\t\t\t\"IfcPhysicalQuantity\",\n\t\t\t\"IfcPhysicalSimpleQuantity\",\n\t\t\t\"IfcPile\",\n\t\t\t\"IfcPileType\",\n\t\t\t\"IfcPipeFitting\",\n\t\t\t\"IfcPipeFittingType\",\n\t\t\t\"IfcPipeSegment\",\n\t\t\t\"IfcPipeSegmentType\",\n\t\t\t\"IfcPlacement\",\n\t\t\t\"IfcPlane\",\n\t\t\t\"IfcPlate\",\n\t\t\t\"IfcPlateStandardCase\",\n\t\t\t\"IfcPlateType\",\n\t\t\t\"IfcPoint\",\n\t\t\t\"IfcPolygonalBoundedHalfSpace\",\n\t\t\t\"IfcPolyline\",\n\t\t\t\"IfcPolyLoop\",\n\t\t\t\"IfcPort\",\n\t\t\t\"IfcPostalAddress\",\n\t\t\t\"IfcPreDefinedPropertySet\",\n\t\t\t\"IfcPresentationItem\",\n\t\t\t\"IfcPresentationLayerAssignment\",\n\t\t\t\"IfcPresentationStyle\",\n\t\t\t\"IfcPresentationStyleAssignment\",\n\t\t\t\"IfcProduct\",\n\t\t\t\"IfcProductDefinitionShape\",\n\t\t\t\"IfcProductRepresentation\",\n\t\t\t\"IfcProfileDef\",\n\t\t\t\"IfcProfileProperties\",\n\t\t\t\"IfcProject\",\n\t\t\t\"IfcProjectedCRS\",\n\t\t\t\"IfcProjectionElement\",\n\t\t\t\"IfcProjectLibrary\",\n\t\t\t\"IfcProperty\",\n\t\t\t\"IfcPropertyAbstraction\",\n\t\t\t\"IfcPropertyBoundedValue\",\n\t\t\t\"IfcPropertyDefinition\",\n\t\t\t\"IfcPropertyEnumeratedValue\",\n\t\t\t\"IfcPropertyEnumeration\",\n\t\t\t\"IfcPropertyListValue\",\n\t\t\t\"IfcPropertySet\",\n\t\t\t\"IfcPropertySetDefinition\",\n\t\t\t\"IfcPropertySetTemplate\",\n\t\t\t\"IfcPropertySingleValue\",\n\t\t\t\"IfcPropertyTableValue\",\n\t\t\t\"IfcPropertyTemplate\",\n\t\t\t\"IfcPropertyTemplateDefinition\",\n\t\t\t\"IfcProtectiveDevice\",\n\t\t\t\"IfcProtectiveDeviceTrippingUnit\",\n\t\t\t\"IfcProtectiveDeviceTrippingUnitType\",\n\t\t\t\"IfcProtectiveDeviceType\",\n\t\t\t\"IfcPump\",\n\t\t\t\"IfcPumpType\",\n\t\t\t\"IfcQuantityArea\",\n\t\t\t\"IfcQuantityCount\",\n\t\t\t\"IfcQuantityLength\",\n\t\t\t\"IfcQuantitySet\",\n\t\t\t\"IfcQuantityTime\",\n\t\t\t\"IfcQuantityVolume\",\n\t\t\t\"IfcQuantityWeight\",\n\t\t\t\"IfcRailing\",\n\t\t\t\"IfcRailingType\",\n\t\t\t\"IfcRamp\",\n\t\t\t\"IfcRampFlight\",\n\t\t\t\"IfcRampFlightType\",\n\t\t\t\"IfcRampType\",\n\t\t\t\"IfcRectangleHollowProfileDef\",\n\t\t\t\"IfcRectangleProfileDef\",\n\t\t\t\"IfcRectangularPyramid\",\n\t\t\t\"IfcReinforcingBar\",\n\t\t\t\"IfcReinforcingBarType\",\n\t\t\t\"IfcReinforcingElement\",\n\t\t\t\"IfcReinforcingElementType\",\n\t\t\t\"IfcReinforcingMesh\",\n\t\t\t\"IfcReinforcingMeshType\",\n\t\t\t\"IfcRelAggregates\",\n\t\t\t\"IfcRelAssigns\",\n\t\t\t\"IfcRelAssignsToGroup\",\n\t\t\t\"IfcRelAssociates\",\n\t\t\t\"IfcRelAssociatesClassification\",\n\t\t\t\"IfcRelAssociatesDocument\",\n\t\t\t\"IfcRelAssociatesLibrary\",\n\t\t\t\"IfcRelAssociatesMaterial\",\n\t\t\t\"IfcRelationship\",\n\t\t\t\"IfcRelConnects\",\n\t\t\t\"IfcRelConnectsElements\",\n\t\t\t\"IfcRelConnectsPathElements\",\n\t\t\t\"IfcRelConnectsPorts\",\n\t\t\t\"IfcRelConnectsWithRealizingElements\",\n\t\t\t\"IfcRelContainedInSpatialStructure\",\n\t\t\t\"IfcRelCoversBldgElements\",\n\t\t\t\"IfcRelDeclares\",\n\t\t\t\"IfcRelDecomposes\",\n\t\t\t\"IfcRelDefines\",\n\t\t\t\"IfcRelDefinesByProperties\",\n\t\t\t\"IfcRelDefinesByType\",\n\t\t\t\"IfcRelFillsElement\",\n\t\t\t\"IfcRelFlowControlElements\",\n\t\t\t\"IfcRelInterferesElements\",\n\t\t\t\"IfcRelNests\",\n\t\t\t\"IfcRelProjectsElement\",\n\t\t\t\"IfcRelServicesBuildings\",\n\t\t\t\"IfcRelVoidsElement\",\n\t\t\t\"IfcRepresentation\",\n\t\t\t\"IfcRepresentationContext\",\n\t\t\t\"IfcRepresentationItem\",\n\t\t\t\"IfcRepresentationMap\",\n\t\t\t\"IfcRevolvedAreaSolid\",\n\t\t\t\"IfcRevolvedAreaSolidTapered\",\n\t\t\t\"IfcRightCircularCone\",\n\t\t\t\"IfcRightCircularCylinder\",\n\t\t\t\"IfcRoof\",\n\t\t\t\"IfcRoofType\",\n\t\t\t\"IfcRoot\",\n\t\t\t\"IfcRoundedRectangleProfileDef\",\n\t\t\t\"IfcSanitaryTerminal\",\n\t\t\t\"IfcSanitaryTerminalType\",\n\t\t\t\"IfcSensor\",\n\t\t\t\"IfcSensorType\",\n\t\t\t\"IfcShadingDevice\",\n\t\t\t\"IfcShadingDeviceType\",\n\t\t\t\"IfcShapeModel\",\n\t\t\t\"IfcShapeRepresentation\",\n\t\t\t\"IfcShellBasedSurfaceModel\",\n\t\t\t\"IfcSimpleProperty\",\n\t\t\t\"IfcSimplePropertyTemplate\",\n\t\t\t\"IfcSite\",\n\t\t\t\"IfcSIUnit\",\n\t\t\t\"IfcSlab\",\n\t\t\t\"IfcSlabElementedCase\",\n\t\t\t\"IfcSlabStandardCase\",\n\t\t\t\"IfcSlabType\",\n\t\t\t\"IfcSolarDevice\",\n\t\t\t\"IfcSolarDeviceType\",\n\t\t\t\"IfcSolidModel\",\n\t\t\t\"IfcSpace\",\n\t\t\t\"IfcSpaceHeater\",\n\t\t\t\"IfcSpaceHeaterType\",\n\t\t\t\"IfcSpaceType\",\n\t\t\t\"IfcSpatialElement\",\n\t\t\t\"IfcSpatialElementType\",\n\t\t\t\"IfcSpatialStructureElement\",\n\t\t\t\"IfcSpatialStructureElementType\",\n\t\t\t\"IfcSpatialZone\",\n\t\t\t\"IfcSpatialZoneType\",\n\t\t\t\"IfcSphere\",\n\t\t\t\"IfcStackTerminal\",\n\t\t\t\"IfcStackTerminalType\",\n\t\t\t\"IfcStair\",\n\t\t\t\"IfcStairFlight\",\n\t\t\t\"IfcStairFlightType\",\n\t\t\t\"IfcStairType\",\n\t\t\t\"IfcStyledItem\",\n\t\t\t\"IfcStyledRepresentation\",\n\t\t\t\"IfcStyleModel\",\n\t\t\t\"IfcSurface\",\n\t\t\t\"IfcSurfaceCurveSweptAreaSolid\",\n\t\t\t\"IfcSurfaceOfLinearExtrusion\",\n\t\t\t\"IfcSurfaceOfRevolution\",\n\t\t\t\"IfcSurfaceStyle\",\n\t\t\t\"IfcSurfaceStyleRendering\",\n\t\t\t\"IfcSurfaceStyleShading\",\n\t\t\t\"IfcSurfaceStyleWithTextures\",\n\t\t\t\"IfcSurfaceTexture\",\n\t\t\t\"IfcSweptAreaSolid\",\n\t\t\t\"IfcSweptDiskSolid\",\n\t\t\t\"IfcSweptSurface\",\n\t\t\t\"IfcSwitchingDevice\",\n\t\t\t\"IfcSwitchingDeviceType\",\n\t\t\t\"IfcSystem\",\n\t\t\t\"IfcSystemFurnitureElement\",\n\t\t\t\"IfcSystemFurnitureElementType\",\n\t\t\t\"IfcTank\",\n\t\t\t\"IfcTankType\",\n\t\t\t\"IfcTelecomAddress\",\n\t\t\t\"IfcTendon\",\n\t\t\t\"IfcTendonAnchor\",\n\t\t\t\"IfcTendonAnchorType\",\n\t\t\t\"IfcTendonType\",\n\t\t\t\"IfcTessellatedFaceSet\",\n\t\t\t\"IfcTessellatedItem\",\n\t\t\t\"IfcTextureCoordinate\",\n\t\t\t\"IfcTextureVertexList\",\n\t\t\t\"IfcTopologicalRepresentationItem\",\n\t\t\t\"IfcTransformer\",\n\t\t\t\"IfcTransformerType\",\n\t\t\t\"IfcTransportElement\",\n\t\t\t\"IfcTransportElementType\",\n\t\t\t\"IfcTriangulatedFaceSet\",\n\t\t\t\"IfcTrimmedCurve\",\n\t\t\t\"IfcTShapeProfileDef\",\n\t\t\t\"IfcTubeBundle\",\n\t\t\t\"IfcTubeBundleType\",\n\t\t\t\"IfcTypeObject\",\n\t\t\t\"IfcTypeProduct\",\n\t\t\t\"IfcUnitaryControlElement\",\n\t\t\t\"IfcUnitaryControlElementType\",\n\t\t\t\"IfcUnitaryEquipment\",\n\t\t\t\"IfcUnitaryEquipmentType\",\n\t\t\t\"IfcUnitAssignment\",\n\t\t\t\"IfcUShapeProfileDef\",\n\t\t\t\"IfcValve\",\n\t\t\t\"IfcValveType\",\n\t\t\t\"IfcVector\",\n\t\t\t\"IfcVertex\",\n\t\t\t\"IfcVertexPoint\",\n\t\t\t\"IfcVibrationIsolator\",\n\t\t\t\"IfcVibrationIsolatorType\",\n\t\t\t\"IfcVirtualGridIntersection\",\n\t\t\t\"IfcWall\",\n\t\t\t\"IfcWallElementedCase\",\n\t\t\t\"IfcWallStandardCase\",\n\t\t\t\"IfcWallType\",\n\t\t\t\"IfcWasteTerminal\",\n\t\t\t\"IfcWasteTerminalType\",\n\t\t\t\"IfcWindow\",\n\t\t\t\"IfcWindowLiningProperties\",\n\t\t\t\"IfcWindowPanelProperties\",\n\t\t\t\"IfcWindowStandardCase\",\n\t\t\t\"IfcWindowType\",\n\t\t\t\"IfcZone\",\n\t\t\t\"IfcZShapeProfileDef\"\n\t\t],\n\t\t\"PropertySetList\" : [\n\t\t\t\"Pset_ActuatorTypeCommon\",\n\t\t\t\"Pset_ActuatorTypeLinearActuation\",\n\t\t\t\"Pset_ActuatorTypeRotationalActuation\",\n\t\t\t\"Pset_AirTerminalBoxTypeCommon\",\n\t\t\t\"Pset_AirTerminalOccurrence\",\n\t\t\t\"Pset_AirTerminalTypeCommon\",\n\t\t\t\"Pset_AirToAirHeatRecoveryTypeCommon\",\n\t\t\t\"Pset_AlarmTypeCommon\",\n\t\t\t\"Pset_AudioVisualApplianceTypeCommon\",\n\t\t\t\"Pset_BeamCommon\",\n\t\t\t\"Pset_BoilerTypeCommon\",\n\t\t\t\"Pset_BuildingCommon\",\n\t\t\t\"Pset_BuildingElementProxyCommon\",\n\t\t\t\"Pset_BuildingElementProxyProvisionForVoid\",\n\t\t\t\"Pset_BuildingStoreyCommon\",\n\t\t\t\"Pset_BuildingSystemCommon\",\n\t\t\t\"Pset_BuildingUse\",\n\t\t\t\"Pset_BuildingUseAdjacent\",\n\t\t\t\"Pset_BurnerTypeCommon\",\n\t\t\t\"Pset_CableCarrierFittingTypeCommon\",\n\t\t\t\"Pset_CableCarrierSegmentTypeCommon\",\n\t\t\t\"Pset_CableFittingTypeCommon\",\n\t\t\t\"Pset_CableSegmentOccurrence\",\n\t\t\t\"Pset_CableSegmentTypeCommon\",\n\t\t\t\"Pset_ChillerTypeCommon\",\n\t\t\t\"Pset_ChimneyCommon\",\n\t\t\t\"Pset_CoilOccurrence\",\n\t\t\t\"Pset_CoilTypeCommon\",\n\t\t\t\"Pset_CoilTypeHydronic\",\n\t\t\t\"Pset_ColumnCommon\",\n\t\t\t\"Pset_CommunicationsApplianceTypeCommon\",\n\t\t\t\"Pset_CompressorTypeCommon\",\n\t\t\t\"Pset_CondenserTypeCommon\",\n\t\t\t\"Pset_ControllerTypeCommon\",\n\t\t\t\"Pset_CooledBeamTypeCommon\",\n\t\t\t\"Pset_CoolingTowerTypeCommon\",\n\t\t\t\"Pset_CoveringCommon\",\n\t\t\t\"Pset_CurtainWallCommon\",\n\t\t\t\"Pset_DamperOccurrence\",\n\t\t\t\"Pset_DamperTypeCommon\",\n\t\t\t\"Pset_DistributionChamberElementCommon\",\n\t\t\t\"Pset_DistributionPortCommon\",\n\t\t\t\"Pset_DistributionSystemCommon\",\n\t\t\t\"Pset_DoorCommon\",\n\t\t\t\"Pset_DuctFittingOccurrence\",\n\t\t\t\"Pset_DuctFittingTypeCommon\",\n\t\t\t\"Pset_DuctSegmentOccurrence\",\n\t\t\t\"Pset_DuctSegmentTypeCommon\",\n\t\t\t\"Pset_DuctSilencerTypeCommon\",\n\t\t\t\"Pset_ElectricalDeviceCommon\",\n\t\t\t\"Pset_ElectricApplianceTypeCommon\",\n\t\t\t\"Pset_ElectricDistributionBoardOccurrence\",\n\t\t\t\"Pset_ElectricDistributionBoardTypeCommon\",\n\t\t\t\"Pset_ElectricFlowStorageDeviceTypeCommon\",\n\t\t\t\"Pset_ElectricGeneratorTypeCommon\",\n\t\t\t\"Pset_ElectricMotorTypeCommon\",\n\t\t\t\"Pset_ElectricTimeControlTypeCommon\",\n\t\t\t\"Pset_EngineTypeCommon\",\n\t\t\t\"Pset_EnvironmentalImpactIndicators\",\n\t\t\t\"Pset_EnvironmentalImpactValues\",\n\t\t\t\"Pset_EvaporativeCoolerTypeCommon\",\n\t\t\t\"Pset_EvaporatorTypeCommon\",\n\t\t\t\"Pset_FanOccurrence\",\n\t\t\t\"Pset_FanTypeCommon\",\n\t\t\t\"Pset_FilterTypeCommon\",\n\t\t\t\"Pset_FireSuppressionTerminalTypeCommon\",\n\t\t\t\"Pset_FlowInstrumentTypeCommon\",\n\t\t\t\"Pset_FlowMeterOccurrence\",\n\t\t\t\"Pset_FlowMeterTypeCommon\",\n\t\t\t\"Pset_FootingCommon\",\n\t\t\t\"Pset_FurnitureTypeCommon\",\n\t\t\t\"Pset_HeatExchangerTypeCommon\",\n\t\t\t\"Pset_HumidifierTypeCommon\",\n\t\t\t\"Pset_InterceptorTypeCommon\",\n\t\t\t\"Pset_JunctionBoxTypeCommon\",\n\t\t\t\"Pset_LampTypeCommon\",\n\t\t\t\"Pset_LandRegistration\",\n\t\t\t\"Pset_LightFixtureTypeCommon\",\n\t\t\t\"Pset_ManufacturerOccurrence\",\n\t\t\t\"Pset_ManufacturerTypeInformation\",\n\t\t\t\"Pset_MedicalDeviceTypeCommon\",\n\t\t\t\"Pset_MemberCommon\",\n\t\t\t\"Pset_MotorConnectionTypeCommon\",\n\t\t\t\"Pset_OpeningElementCommon\",\n\t\t\t\"Pset_OutletTypeCommon\",\n\t\t\t\"Pset_OutsideDesignCriteria\",\n\t\t\t\"Pset_PileCommon\",\n\t\t\t\"Pset_PipeConnectionFlanged\",\n\t\t\t\"Pset_PipeFittingOccurrence\",\n\t\t\t\"Pset_PipeFittingTypeCommon\",\n\t\t\t\"Pset_PipeSegmentOccurrence\",\n\t\t\t\"Pset_PipeSegmentTypeCommon\",\n\t\t\t\"Pset_PlateCommon\",\n\t\t\t\"Pset_PrecastSlab\",\n\t\t\t\"Pset_PropertyAgreement\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitI2TCurve\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitI2TFuseCurve\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitIPICurve\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection\",\n\t\t\t\"Pset_ProtectiveDeviceOccurrence\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionGCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionICurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionLCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionSCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingUnitTypeCommon\",\n\t\t\t\"Pset_ProtectiveDeviceTypeCommon\",\n\t\t\t\"Pset_PumpOccurrence\",\n\t\t\t\"Pset_PumpTypeCommon\",\n\t\t\t\"Pset_RailingCommon\",\n\t\t\t\"Pset_RampCommon\",\n\t\t\t\"Pset_RampFlightCommon\",\n\t\t\t\"Pset_ReinforcementBarCountOfIndependentFooting\",\n\t\t\t\"Pset_ReinforcementBarPitchOfBeam\",\n\t\t\t\"Pset_ReinforcementBarPitchOfColumn\",\n\t\t\t\"Pset_ReinforcementBarPitchOfContinuousFooting\",\n\t\t\t\"Pset_ReinforcementBarPitchOfSlab\",\n\t\t\t\"Pset_ReinforcementBarPitchOfWall\",\n\t\t\t\"Pset_RoofCommon\",\n\t\t\t\"Pset_SanitaryTerminalTypeCommon\",\n\t\t\t\"Pset_SensorTypeCommon\",\n\t\t\t\"Pset_ServiceLife\",\n\t\t\t\"Pset_ShadingDeviceCommon\",\n\t\t\t\"Pset_SiteCommon\",\n\t\t\t\"Pset_SlabCommon\",\n\t\t\t\"Pset_SolarDeviceTypeCommon\",\n\t\t\t\"Pset_SpaceCommon\",\n\t\t\t\"Pset_SpaceCoveringRequirements\",\n\t\t\t\"Pset_SpaceHeaterTypeCommon\",\n\t\t\t\"Pset_SpaceThermalDesign\",\n\t\t\t\"Pset_SpaceThermalLoad\",\n\t\t\t\"Pset_StackTerminalTypeCommon\",\n\t\t\t\"Pset_StairCommon\",\n\t\t\t\"Pset_StairFlightCommon\",\n\t\t\t\"Pset_SwitchingDeviceTypeCommon\",\n\t\t\t\"Pset_SystemFurnitureElementTypeCommon\",\n\t\t\t\"Pset_TankOccurrence\",\n\t\t\t\"Pset_TankTypeCommon\",\n\t\t\t\"Pset_ThermalLoadAggregate\",\n\t\t\t\"Pset_ThermalLoadDesignCriteria\",\n\t\t\t\"Pset_TransformerTypeCommon\",\n\t\t\t\"Pset_TransportElementCommon\",\n\t\t\t\"Pset_TubeBundleTypeCommon\",\n\t\t\t\"Pset_UnitaryControlElementTypeCommon\",\n\t\t\t\"Pset_UnitaryEquipmentTypeCommon\",\n\t\t\t\"Pset_ValveTypeCommon\",\n\t\t\t\"Pset_VibrationIsolatorTypeCommon\",\n\t\t\t\"Pset_WallCommon\",\n\t\t\t\"Pset_Warranty\",\n\t\t\t\"Pset_WasteTerminalTypeCommon\",\n\t\t\t\"Pset_WindowCommon\",\n\t\t\t\"Pset_ZoneCommon\",\n\t\t\t\"Qto_ActuatorBaseQuantities\",\n\t\t\t\"Qto_AirTerminalBaseQuantities\",\n\t\t\t\"Qto_AirTerminalBoxTypeBaseQuantities\",\n\t\t\t\"Qto_AirToAirHeatRecoveryBaseQuantities\",\n\t\t\t\"Qto_AlarmBaseQuantities\",\n\t\t\t\"Qto_AudioVisualApplianceBaseQuantities\",\n\t\t\t\"Qto_BeamBaseQuantities\",\n\t\t\t\"Qto_BoilerBaseQuantities\",\n\t\t\t\"Qto_BuildingBaseQuantities\",\n\t\t\t\"Qto_BuildingElementProxyQuantities\",\n\t\t\t\"Qto_BuildingStoreyBaseQuantities\",\n\t\t\t\"Qto_BurnerBaseQuantities\",\n\t\t\t\"Qto_CableCarrierFittingBaseQuantities\",\n\t\t\t\"Qto_CableCarrierSegmentBaseQuantities\",\n\t\t\t\"Qto_CableFittingBaseQuantities\",\n\t\t\t\"Qto_CableSegmentBaseQuantities\",\n\t\t\t\"Qto_ChillerBaseQuantities\",\n\t\t\t\"Qto_ChimneyBaseQuantities\",\n\t\t\t\"Qto_CoilBaseQuantities\",\n\t\t\t\"Qto_ColumnBaseQuantities\",\n\t\t\t\"Qto_CommunicationsApplianceBaseQuantities\",\n\t\t\t\"Qto_CompressorBaseQuantities\",\n\t\t\t\"Qto_CondenserBaseQuantities\",\n\t\t\t\"Qto_ConstructionEquipmentResourceBaseQuantities\",\n\t\t\t\"Qto_ConstructionMaterialResourceBaseQuantities\",\n\t\t\t\"Qto_ControllerBaseQuantities\",\n\t\t\t\"Qto_CooledBeamBaseQuantities\",\n\t\t\t\"Qto_CoolingTowerBaseQuantities\",\n\t\t\t\"Qto_CoveringBaseQuantities\",\n\t\t\t\"Qto_CurtainWallQuantities\",\n\t\t\t\"Qto_DamperBaseQuantities\",\n\t\t\t\"Qto_DistributionChamberElementBaseQuantities\",\n\t\t\t\"Qto_DoorBaseQuantities\",\n\t\t\t\"Qto_DuctFittingBaseQuantities\",\n\t\t\t\"Qto_DuctSegmentBaseQuantities\",\n\t\t\t\"Qto_DuctSilencerBaseQuantities\",\n\t\t\t\"Qto_ElectricApplianceBaseQuantities\",\n\t\t\t\"Qto_ElectricDistributionBoardBaseQuantities\",\n\t\t\t\"Qto_ElectricFlowStorageDeviceBaseQuantities\",\n\t\t\t\"Qto_ElectricGeneratorBaseQuantities\",\n\t\t\t\"Qto_ElectricMotorBaseQuantities\",\n\t\t\t\"Qto_ElectricTimeControlBaseQuantities\",\n\t\t\t\"Qto_EvaporativeCoolerBaseQuantities\",\n\t\t\t\"Qto_EvaporatorBaseQuantities\",\n\t\t\t\"Qto_FanBaseQuantities\",\n\t\t\t\"Qto_FilterBaseQuantities\",\n\t\t\t\"Qto_FireSuppressionTerminalBaseQuantities\",\n\t\t\t\"Qto_FlowInstrumentBaseQuantities\",\n\t\t\t\"Qto_FlowMeterBaseQuantities\",\n\t\t\t\"Qto_FootingBaseQuantities\",\n\t\t\t\"Qto_HeatExchangerBaseQuantities\",\n\t\t\t\"Qto_HumidifierBaseQuantities\",\n\t\t\t\"Qto_InterceptorBaseQuantities\",\n\t\t\t\"Qto_JunctionBoxBaseQuantities\",\n\t\t\t\"Qto_LaborResourceBaseQuantities\",\n\t\t\t\"Qto_LampBaseQuantities\",\n\t\t\t\"Qto_LightFixtureBaseQuantities\",\n\t\t\t\"Qto_MemberBaseQuantities\",\n\t\t\t\"Qto_MotorConnectionBaseQuantities\",\n\t\t\t\"Qto_OpeningElementBaseQuantities\",\n\t\t\t\"Qto_OutletBaseQuantities\",\n\t\t\t\"Qto_PileBaseQuantities\",\n\t\t\t\"Qto_PipeFittingBaseQuantities\",\n\t\t\t\"Qto_PipeSegmentBaseQuantities\",\n\t\t\t\"Qto_PlateBaseQuantities\",\n\t\t\t\"Qto_ProjectionElementBaseQuantities\",\n\t\t\t\"Qto_ProtectiveDeviceBaseQuantities\",\n\t\t\t\"Qto_ProtectiveDeviceTrippingUnitBaseQuantities\",\n\t\t\t\"Qto_PumpBaseQuantities\",\n\t\t\t\"Qto_RailingBaseQuantities\",\n\t\t\t\"Qto_RampFlightBaseQuantities\",\n\t\t\t\"Qto_ReinforcingElementBaseQuantities\",\n\t\t\t\"Qto_RoofBaseQuantities\",\n\t\t\t\"Qto_SanitaryTerminalBaseQuantities\",\n\t\t\t\"Qto_SensorBaseQuantities\",\n\t\t\t\"Qto_SiteBaseQuantities\",\n\t\t\t\"Qto_SlabBaseQuantities\",\n\t\t\t\"Qto_SolarDeviceBaseQuantities\",\n\t\t\t\"Qto_SpaceBaseQuantities\",\n\t\t\t\"Qto_SpaceHeaterBaseQuantities\",\n\t\t\t\"Qto_StackTerminalBaseQuantities\",\n\t\t\t\"Qto_StairFlightBaseQuantities\",\n\t\t\t\"Qto_SwitchingDeviceBaseQuantities\",\n\t\t\t\"Qto_TankBaseQuantities\",\n\t\t\t\"Qto_TransformerBaseQuantities\",\n\t\t\t\"Qto_TubeBundleBaseQuantities\",\n\t\t\t\"Qto_UnitaryControlElementBaseQuantities\",\n\t\t\t\"Qto_UnitaryEquipmentBaseQuantities\",\n\t\t\t\"Qto_ValveBaseQuantities\",\n\t\t\t\"Qto_VibrationIsolatorBaseQuantities\",\n\t\t\t\"Qto_WallBaseQuantities\",\n\t\t\t\"Qto_WasteTerminalBaseQuantities\",\n\t\t\t\"Qto_WindowBaseQuantities\"\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "Install/Program Files to Install/IFCExporterUIOverride.addin",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<RevitAddIns>\r\n  <AddIn Type=\"Application\">\r\n    <Name>IFC override</Name>\r\n    <Assembly>.\\IFCExporterUIOverride.dll</Assembly>\r\n    <AddInId>6DC299D6-F746-47BE-AE93-F00DDC714257</AddInId>\r\n    <FullClassName>BIM.IFC.Export.UI.IFCCommandOverrideApplication</FullClassName>\r\n    <VendorId>ADSK</VendorId>\r\n\t<VendorDescription>Autodesk, www.autodesk.com</VendorDescription>\r\n  </AddIn>\r\n</RevitAddIns>"
  },
  {
    "path": "Install/Program Files to Install/LICENSE.rtf",
    "content": "{\\rtf1\\adeflang1025\\ansi\\ansicpg1252\\uc1\\adeff0\\deff0\\stshfdbch31505\\stshfloch31506\\stshfhich31506\\stshfbi0\\deflang1033\\deflangfe1033\\themelang1033\\themelangfe0\\themelangcs0{\\fonttbl{\\f0\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\f1\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020b0604020202020204}Arial;}\r\n{\\f2\\fbidi \\fmodern\\fcharset0\\fprq1{\\*\\panose 02070309020205020404}Courier New;}{\\f3\\fbidi \\froman\\fcharset2\\fprq2{\\*\\panose 05050102010706020507}Symbol;}{\\f34\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02040503050406030204}Cambria Math;}\r\n{\\flomajor\\f31500\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\fdbmajor\\f31501\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\r\n{\\fhimajor\\f31502\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020f0302020204030204}Calibri Light;}{\\fbimajor\\f31503\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\r\n{\\flominor\\f31504\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\fdbminor\\f31505\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\r\n{\\fhiminor\\f31506\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020f0502020204030204}Calibri;}{\\fbiminor\\f31507\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\f43\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE;}\r\n{\\f44\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr;}{\\f46\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek;}{\\f47\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\f48\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}\r\n{\\f49\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}{\\f50\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\f51\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}{\\f53\\fbidi \\fswiss\\fcharset238\\fprq2 Arial CE;}\r\n{\\f54\\fbidi \\fswiss\\fcharset204\\fprq2 Arial Cyr;}{\\f56\\fbidi \\fswiss\\fcharset161\\fprq2 Arial Greek;}{\\f57\\fbidi \\fswiss\\fcharset162\\fprq2 Arial Tur;}{\\f58\\fbidi \\fswiss\\fcharset177\\fprq2 Arial (Hebrew);}\r\n{\\f59\\fbidi \\fswiss\\fcharset178\\fprq2 Arial (Arabic);}{\\f60\\fbidi \\fswiss\\fcharset186\\fprq2 Arial Baltic;}{\\f61\\fbidi \\fswiss\\fcharset163\\fprq2 Arial (Vietnamese);}{\\f63\\fbidi \\fmodern\\fcharset238\\fprq1 Courier New CE;}\r\n{\\f64\\fbidi \\fmodern\\fcharset204\\fprq1 Courier New Cyr;}{\\f66\\fbidi \\fmodern\\fcharset161\\fprq1 Courier New Greek;}{\\f67\\fbidi \\fmodern\\fcharset162\\fprq1 Courier New Tur;}{\\f68\\fbidi \\fmodern\\fcharset177\\fprq1 Courier New (Hebrew);}\r\n{\\f69\\fbidi \\fmodern\\fcharset178\\fprq1 Courier New (Arabic);}{\\f70\\fbidi \\fmodern\\fcharset186\\fprq1 Courier New Baltic;}{\\f71\\fbidi \\fmodern\\fcharset163\\fprq1 Courier New (Vietnamese);}{\\f383\\fbidi \\froman\\fcharset238\\fprq2 Cambria Math CE;}\r\n{\\f384\\fbidi \\froman\\fcharset204\\fprq2 Cambria Math Cyr;}{\\f386\\fbidi \\froman\\fcharset161\\fprq2 Cambria Math Greek;}{\\f387\\fbidi \\froman\\fcharset162\\fprq2 Cambria Math Tur;}{\\f390\\fbidi \\froman\\fcharset186\\fprq2 Cambria Math Baltic;}\r\n{\\f391\\fbidi \\froman\\fcharset163\\fprq2 Cambria Math (Vietnamese);}{\\flomajor\\f31508\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE;}{\\flomajor\\f31509\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr;}\r\n{\\flomajor\\f31511\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek;}{\\flomajor\\f31512\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\flomajor\\f31513\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}\r\n{\\flomajor\\f31514\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}{\\flomajor\\f31515\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\flomajor\\f31516\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}\r\n{\\fdbmajor\\f31518\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE;}{\\fdbmajor\\f31519\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr;}{\\fdbmajor\\f31521\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek;}\r\n{\\fdbmajor\\f31522\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\fdbmajor\\f31523\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}{\\fdbmajor\\f31524\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}\r\n{\\fdbmajor\\f31525\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\fdbmajor\\f31526\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}{\\fhimajor\\f31528\\fbidi \\fswiss\\fcharset238\\fprq2 Calibri Light CE;}\r\n{\\fhimajor\\f31529\\fbidi \\fswiss\\fcharset204\\fprq2 Calibri Light Cyr;}{\\fhimajor\\f31531\\fbidi \\fswiss\\fcharset161\\fprq2 Calibri Light Greek;}{\\fhimajor\\f31532\\fbidi \\fswiss\\fcharset162\\fprq2 Calibri Light Tur;}\r\n{\\fhimajor\\f31533\\fbidi \\fswiss\\fcharset177\\fprq2 Calibri Light (Hebrew);}{\\fhimajor\\f31534\\fbidi \\fswiss\\fcharset178\\fprq2 Calibri Light (Arabic);}{\\fhimajor\\f31535\\fbidi \\fswiss\\fcharset186\\fprq2 Calibri Light Baltic;}\r\n{\\fhimajor\\f31536\\fbidi \\fswiss\\fcharset163\\fprq2 Calibri Light (Vietnamese);}{\\fbimajor\\f31538\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE;}{\\fbimajor\\f31539\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr;}\r\n{\\fbimajor\\f31541\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek;}{\\fbimajor\\f31542\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\fbimajor\\f31543\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}\r\n{\\fbimajor\\f31544\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}{\\fbimajor\\f31545\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\fbimajor\\f31546\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}\r\n{\\flominor\\f31548\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE;}{\\flominor\\f31549\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr;}{\\flominor\\f31551\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek;}\r\n{\\flominor\\f31552\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\flominor\\f31553\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}{\\flominor\\f31554\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}\r\n{\\flominor\\f31555\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\flominor\\f31556\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}{\\fdbminor\\f31558\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE;}\r\n{\\fdbminor\\f31559\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr;}{\\fdbminor\\f31561\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek;}{\\fdbminor\\f31562\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur;}\r\n{\\fdbminor\\f31563\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}{\\fdbminor\\f31564\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}{\\fdbminor\\f31565\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic;}\r\n{\\fdbminor\\f31566\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}{\\fhiminor\\f31568\\fbidi \\fswiss\\fcharset238\\fprq2 Calibri CE;}{\\fhiminor\\f31569\\fbidi \\fswiss\\fcharset204\\fprq2 Calibri Cyr;}\r\n{\\fhiminor\\f31571\\fbidi \\fswiss\\fcharset161\\fprq2 Calibri Greek;}{\\fhiminor\\f31572\\fbidi \\fswiss\\fcharset162\\fprq2 Calibri Tur;}{\\fhiminor\\f31573\\fbidi \\fswiss\\fcharset177\\fprq2 Calibri (Hebrew);}\r\n{\\fhiminor\\f31574\\fbidi \\fswiss\\fcharset178\\fprq2 Calibri (Arabic);}{\\fhiminor\\f31575\\fbidi \\fswiss\\fcharset186\\fprq2 Calibri Baltic;}{\\fhiminor\\f31576\\fbidi \\fswiss\\fcharset163\\fprq2 Calibri (Vietnamese);}\r\n{\\fbiminor\\f31578\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE;}{\\fbiminor\\f31579\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr;}{\\fbiminor\\f31581\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek;}\r\n{\\fbiminor\\f31582\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\fbiminor\\f31583\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew);}{\\fbiminor\\f31584\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic);}\r\n{\\fbiminor\\f31585\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\fbiminor\\f31586\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}}{\\colortbl;\\red0\\green0\\blue0;\\red0\\green0\\blue255;\\red0\\green255\\blue255;\\red0\\green255\\blue0;\r\n\\red255\\green0\\blue255;\\red255\\green0\\blue0;\\red255\\green255\\blue0;\\red255\\green255\\blue255;\\red0\\green0\\blue128;\\red0\\green128\\blue128;\\red0\\green128\\blue0;\\red128\\green0\\blue128;\\red128\\green0\\blue0;\\red128\\green128\\blue0;\\red128\\green128\\blue128;\r\n\\red192\\green192\\blue192;\\red0\\green0\\blue0;\\red0\\green0\\blue0;\\chyperlink\\ctint255\\cshade255\\red5\\green99\\blue193;\\red96\\green94\\blue92;\\red225\\green223\\blue221;\\red53\\green56\\blue42;}{\\*\\defchp \\fs22\\loch\\af31506\\hich\\af31506\\dbch\\af31505 }{\\*\\defpap \r\n\\ql \\li0\\ri0\\sa160\\sl259\\slmult1\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 }\\noqfpromote {\\stylesheet{\\ql \\li0\\ri0\\sa160\\sl259\\slmult1\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \r\n\\af0\\afs22\\alang1025 \\ltrch\\fcs0 \\fs22\\lang1033\\langfe1033\\loch\\f31506\\hich\\af31506\\dbch\\af31505\\cgrid\\langnp1033\\langfenp1033 \\snext0 \\sqformat \\spriority0 \\styrsid11235741 Normal;}{\\*\\cs10 \\additive \\ssemihidden \\sunhideused \\spriority1 \r\nDefault Paragraph Font;}{\\*\\ts11\\tsrowd\\trftsWidthB3\\trpaddl108\\trpaddr108\\trpaddfl3\\trpaddft3\\trpaddfb3\\trpaddfr3\\trcbpat1\\trcfpat1\\tblind0\\tblindtype3\\tsvertalt\\tsbrdrt\\tsbrdrl\\tsbrdrb\\tsbrdrr\\tsbrdrdgl\\tsbrdrdgr\\tsbrdrh\\tsbrdrv \r\n\\ql \\li0\\ri0\\sa160\\sl259\\slmult1\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af0\\afs22\\alang1025 \\ltrch\\fcs0 \\fs22\\lang1033\\langfe1033\\loch\\f31506\\hich\\af31506\\dbch\\af31505\\cgrid\\langnp1033\\langfenp1033 \r\n\\snext11 \\ssemihidden \\sunhideused Normal Table;}{\\*\\cs15 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\ul\\cf19 \\sbasedon10 \\sunhideused \\styrsid6504294 Hyperlink;}{\\*\\cs16 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\cf20\\chshdng0\\chcfpat0\\chcbpat21 \r\n\\sbasedon10 \\ssemihidden \\sunhideused \\styrsid6504294 Unresolved Mention;}}{\\*\\listtable{\\list\\listtemplateid1397647112\\listsimple{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat0\\levelspace0\\levelindent0{\\leveltext\r\n\\'01*;}{\\levelnumbers;}}{\\listname ;}\\listid-2}}{\\*\\listoverridetable{\\listoverride\\listid-2\\listoverridecount1{\\lfolevel\\listoverrideformat{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat0\\levelold\\levelspace0\r\n\\levelindent744{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 }}\\ls1}}{\\*\\rsidtbl \\rsid4415983\\rsid6504294\\rsid11235741}{\\mmathPr\\mmathFont34\\mbrkBin0\\mbrkBinSub0\\msmallFrac0\\mdispDef1\\mlMargin0\\mrMargin0\\mdefJc1\\mwrapIndent1440\\mintLim0\\mnaryLim1}\r\n{\\info{\\operator Oleksii Semenenko}{\\creatim\\yr2021\\mo7\\dy26\\hr17\\min3}{\\revtim\\yr2021\\mo7\\dy26\\hr17\\min15}{\\version3}{\\edmins10}{\\nofpages11}{\\nofwords3935}{\\nofchars22434}{\\nofcharsws26317}{\\vern25}}{\\*\\xmlnstbl {\\xmlns1 http://schemas.microsoft.com/off\r\nice/word/2003/wordml}}\\paperw12240\\paperh15840\\margl1440\\margr1440\\margt1440\\margb1440\\gutter0\\ltrsect \r\n\\widowctrl\\ftnbj\\aenddoc\\trackmoves0\\trackformatting1\\donotembedsysfont0\\relyonvml0\\donotembedlingdata1\\grfdocevents0\\validatexml0\\showplaceholdtext0\\ignoremixedcontent0\\saveinvalidxml0\\showxmlerrors0\\horzdoc\\dghspace120\\dgvspace120\\dghorigin1701\r\n\\dgvorigin1984\\dghshow0\\dgvshow3\\jcompress\\viewkind1\\viewscale100\\rsidroot11235741 \\nouicompat \\fet0{\\*\\wgrffmtfilter 2450}\\nofeaturethrottle1\\ilfomacatclnup0\\ltrpar \\sectd \\ltrsect\\linex0\\sectdefaultcl\\sftnbj {\\*\\pnseclvl1\r\n\\pnucrm\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl2\\pnucltr\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl3\\pndec\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl4\\pnlcltr\\pnstart1\\pnindent720\\pnhang {\\pntxta )}}{\\*\\pnseclvl5\r\n\\pndec\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl6\\pnlcltr\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl7\\pnlcrm\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl8\\pnlcltr\\pnstart1\\pnindent720\\pnhang \r\n{\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl9\\pnlcrm\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}\\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sb240\\sa240\\sl360\\slmult0\\widctlpar\\wrapdefault\\faauto\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af0\\afs22\\alang1025 \\ltrch\\fcs0 \r\n\\fs22\\lang1033\\langfe1033\\loch\\af31506\\hich\\af31506\\dbch\\af31505\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\ul\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 Autodesk.SteelConnections.ASIFC.DLL}{\\rtlch\\fcs1 \r\n\\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\cf22\\insrsid4415983 \r\n\\par }{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 The Autodesk.SteelConnections.ASIFC.DLL is a proprietary file own\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\ned by Autodesk and licensed under the Autodesk Terms of Use.  By using this DLL, you agree to the Autodesk Terms of Use (}{\\field{\\*\\fldinst {\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nHYPERLINK https://www.autodesk.com/company/terms-of-use/en/general-terms }{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\insrsid11235741 {\\*\\datafield \r\n00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b96000000680074007400700073003a002f002f007700770077002e006100750074006f006400650073006b002e0063006f006d002f0063006f006d00700061006e0079002f007400650072006d0073002d006f006600\r\n2d007500730065002f0065006e002f00670065006e006500720061006c002d007400650072006d0073000000795881f43b1d7f48af2c825dc485276300000000a5ab000300}}}{\\fldrslt {\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nhttps://www.autodesk.com/company/terms-of-use/en/general-terms}}}\\sectd \\ltrsect\\linex0\\sectdefaultcl\\sftnbj {\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 ) and the Autodesk Privacy Statement (}\r\n{\\field{\\*\\fldinst {\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 HYPERLINK https://www.autodesk.com/company/legal-notices-trademarks/privacy-statem\\hich\\af1\\dbch\\af31505\\loch\\f1 ent }{\\rtlch\\fcs1 \\af1\\afs24 \r\n\\ltrch\\fcs0 \\f1\\fs24\\insrsid11235741 {\\*\\datafield \r\n00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bb0000000680074007400700073003a002f002f007700770077002e006100750074006f006400650073006b002e0063006f006d002f0063006f006d00700061006e0079002f006c006500670061006c002d006e006f00\r\n740069006300650073002d00740072006100640065006d00610072006b0073002f0070007200690076006100630079002d00730074006100740065006d0065006e0074000000795881f43b1d7f48af2c825dc485276300000000a5ab000300}}}{\\fldrslt {\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \r\n\\f1\\fs24\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 https://www.autodesk.com/company/legal-notices-trademarks/privacy-statement}}}\\sectd \\ltrsect\\linex0\\sectdefaultcl\\sftnbj {\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 ).  You may only use this DL\\hich\\af1\\dbch\\af31505\\loch\\f1 L with the Revit IFC open source project.  Autodesk.SteelConnections.ASIFC.DLL is provided as-is.\r\n\\par }{\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\ul\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 ANTLR 4}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 Revit IFC open source project relies on ANTLR 4 which uses the BSD license.\r\n\\par }{\\field\\flddirty{\\*\\fldinst {\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\ul\\cf2\\insrsid6504294\\charrsid6504294 \\hich\\af1\\dbch\\af31505\\loch\\f1  \\hich\\af1\\dbch\\af31505\\loch\\f1 HYPERLINK \"https://github.com/antlr/antlr4/\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nblob/master/LICENSE.txt\"\\hich\\af1\\dbch\\af31505\\loch\\f1  }{\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\ul\\cf2\\insrsid6504294\\charrsid6504294 {\\*\\datafield \r\n00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b88000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f0061006e0074006c0072002f0061006e0074006c00720034002f0062006c006f0062002f006d00610073007400\r\n650072002f004c004900430045004e00530045002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab0003}}}{\\fldrslt {\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\ul\\cf2\\insrsid4415983\\charrsid6504294 \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nThe \"BSD 3-clause license\"}}}\\sectd \\ltrsect\\linex0\\sectdefaultcl\\sftnbj {\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\ul\\cf2\\insrsid4415983\\charrsid6504294 \r\n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\sb240\\sa240\\sl360\\slmult0\\widctlpar\\wrapdefault\\faauto\\rin0\\lin0\\itap0\\pararsid11235741 {\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid11235741\\charrsid11235741 \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nCopyright (c) 2012-2017 The ANTLR Project. All \\hich\\af1\\dbch\\af31505\\loch\\f1 rights reserved.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid11235741 \r\n\\par {\\pntext\\pard\\plain\\ltrpar \\rtlch\\fcs1 \\ab\\af1 \\ltrch\\fcs0 \\f3\\cf22\\insrsid11235741 \\loch\\af3\\dbch\\af31505\\hich\\f3 \\'b7\\tab}}\\pard \\ltrpar\\ql \\fi-360\\li336\\ri240\\sl312\\slmult0\\nowidctlpar\\wrapdefault{\\*\\pn \\pnlvlblt\\ilvl0\\ls1\\pnrnot0\\pnf3\\pnindent744 \r\n{\\pntxtb \\'b7}}\\faauto\\ls1\\rin240\\lin336\\itap0\\pararsid11235741 {\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid11235741 \\hich\\af1\\dbch\\af31505\\loch\\f1 1.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid11235741 \\~}{\\rtlch\\fcs1 \r\n\\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid11235741\\charrsid11235741 \\hich\\af1\\dbch\\af31505\\loch\\f1 Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.}{\\rtlch\\fcs1 \\af1\\afs24 \r\n\\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid11235741 \r\n\\par {\\pntext\\pard\\plain\\ltrpar \\rtlch\\fcs1 \\ab\\af1 \\ltrch\\fcs0 \\f3\\cf22\\insrsid11235741 \\loch\\af3\\dbch\\af31505\\hich\\f3 \\'b7\\tab}}\\pard \\ltrpar\\ql \\fi-360\\li336\\ri240\\sl312\\slmult0\\nowidctlpar\\wrapdefault{\\*\\pn \\pnlvlblt\\ilvl0\\ls1\\pnrnot0\\pnf3\\pnindent744 \r\n{\\pntxtb \\'b7}}\\faauto\\ls1\\rin240\\lin336\\itap0\\pararsid11235741 {\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid11235741 \\hich\\af1\\dbch\\af31505\\loch\\f1 2.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid11235741 \\~}{\\rtlch\\fcs1 \r\n\\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid11235741\\charrsid11235741 \\hich\\af1\\dbch\\af31505\\loch\\f1 Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaime\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 r in the documentation and/or other materials provided with the distribution.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid11235741 \r\n\\par {\\pntext\\pard\\plain\\ltrpar \\rtlch\\fcs1 \\ab\\af1 \\ltrch\\fcs0 \\f3\\cf22\\insrsid11235741 \\loch\\af3\\dbch\\af31505\\hich\\f3 \\'b7\\tab}}\\pard \\ltrpar\\ql \\fi-360\\li336\\ri240\\sl312\\slmult0\\nowidctlpar\\wrapdefault{\\*\\pn \\pnlvlblt\\ilvl0\\ls1\\pnrnot0\\pnf3\\pnindent744 \r\n{\\pntxtb \\'b7}}\\faauto\\ls1\\rin240\\lin336\\itap0\\pararsid11235741 {\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid11235741 \\hich\\af1\\dbch\\af31505\\loch\\f1 3.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid11235741 \\~}{\\rtlch\\fcs1 \r\n\\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid11235741\\charrsid11235741 \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nNeither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior writt\\hich\\af1\\dbch\\af31505\\loch\\f1 en permission.\r\n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\sb240\\sa240\\sl360\\slmult0\\widctlpar\\wrapdefault{\\*\\pn \\pnlvlcont\\ilvl0\\ls0\\pnrnot0\\pndec }\\faauto\\rin0\\lin0\\itap0\\pararsid11235741 {\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid11235741\\charrsid11235741 \r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTH\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1  \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 =====}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid11235741 \r\n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\sb240\\sa240\\sl360\\slmult0\\widctlpar\\wrapdefault{\\*\\pn \\pnlvlcont\\ilvl0\\ls0\\pnrnot0\\pndec }\\faauto\\rin0\\lin0\\itap0 {\\field{\\*\\fldinst {\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\cf22\\insrsid4415983 \r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 HYPERLINK \"http://www.gnu.org/licenses/lgpl\\hich\\af1\\dbch\\af31505\\loch\\f1 -2.1.html#TOC1\"}{\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\cf22\\insrsid11235741 {\\*\\datafield \r\n00d0c9ea79f9bace118c8200aa004ba90b020000000b000000e0c9ea79f9bace118c8200aa004ba90b6c00000068007400740070003a002f002f007700770077002e0067006e0075002e006f00720067002f006c006900630065006e007300650073002f006c00670070006c002d0032002e0031002e00680074006d006c00\r\n0000795881f43b1d7f48af2c825dc485276300000000a5ab00030500000054004f0043003100000000}}}{\\fldrslt {\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\ul\\cf2\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 GNU LESSER GENERAL PUBLIC LICENSE}}}\\sectd \\ltrsect\r\n\\linex0\\sectdefaultcl\\sftnbj {\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\cf22\\insrsid4415983 \r\n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\sa240\\sl312\\slmult0\\widctlpar\\wrapdefault{\\*\\pn \\pnlvlcont\\ilvl0\\ls0\\pnrnot0\\pndec }\\faauto\\rin0\\lin0\\itap0 {\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nVersion 2.1, February 1999\r\n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\sa240\\sl312\\slmult0\\widctlpar\\tx916\\tx1832\\tx2748\\tx3664\\tx4580\\tx5496\\tx6412\\tx7328\\tx8244\\tx9160\\tx10076\\tx10992\\tx11908\\tx12824\\tx13740\\tx14656\\wrapdefault{\\*\\pn \\pnlvlcont\\ilvl0\\ls0\\pnrnot0\\pndec }\\faauto\\rin0\\lin0\\itap0 {\r\n\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\cf22\\insrsid4415983 \\hich\\af2\\dbch\\af31505\\loch\\f2 Copyright (C) 1991, 1999 Free Software Foundation, Inc.\r\n\\par \\hich\\af2\\dbch\\af31505\\loch\\f2 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n\\par \\hich\\af2\\dbch\\af31505\\loch\\f2 Everyone is permitted to copy and distribute verbatim copies\r\n\\par \\hich\\af2\\dbch\\af31505\\loch\\f2 of this license document, but changing it is not allowed.\r\n\\par \r\n\\par \\hich\\af2\\dbch\\af31505\\loch\\f2 [This is the first released version of the Lesser GPL.  It also counts\r\n\\par \\hich\\af2\\dbch\\af31505\\loch\\f2  as the successor of the GNU Library Public License, version 2, hence\r\n\\par \\hich\\af2\\dbch\\af31505\\loch\\f2  the version number 2.1.]\r\n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\sb240\\sa240\\sl360\\slmult0\\widctlpar\\wrapdefault{\\*\\pn \\pnlvlcont\\ilvl0\\ls0\\pnrnot0\\pndec }\\faauto\\rin0\\lin0\\itap0 {\\field{\\*\\fldinst {\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\cf22\\insrsid4415983 \r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 HYPERLINK \"http://www.gnu.org/\\hich\\af1\\dbch\\af31505\\loch\\f1 licenses/lgpl-2.1.html#TOC2\"}{\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\cf22\\insrsid11235741 {\\*\\datafield \r\n00d0c9ea79f9bace118c8200aa004ba90b020000000b000000e0c9ea79f9bace118c8200aa004ba90b6c00000068007400740070003a002f002f007700770077002e0067006e0075002e006f00720067002f006c006900630065006e007300650073002f006c00670070006c002d0032002e0031002e00680074006d006c00\r\n0000795881f43b1d7f48af2c825dc485276300000000a5ab00030500000054004f0043003200000000}}}{\\fldrslt {\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\ul\\cf2\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 Preamble}}}\\sectd \\ltrsect\\linex0\\sectdefaultcl\\sftnbj {\r\n\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\cf22\\insrsid4415983 \r\n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\sa240\\sl312\\slmult0\\widctlpar\\wrapdefault{\\*\\pn \\pnlvlcont\\ilvl0\\ls0\\pnrnot0\\pndec }\\faauto\\rin0\\lin0\\itap0 {\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nThe licenses for most software are designed to take away your freedom to share and change it. By \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\ncontrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 This license, the Lesser General Public License, applies to some specially designated s\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\noftware packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better str\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 a\\hich\\af1\\dbch\\af31505\\loch\\f1 tegy to use in any particular case, based on the explanations below.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\n software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 To protect y\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nour rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify i\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 t.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nFor example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the librar\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 y, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights.\r\n\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 We protect your rights with a t\\hich\\af1\\dbch\\af31505\\loch\\f1 wo-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library.\r\n\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 To protect each distributor, we want to make it very clear that there is no warranty for the fr\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nee library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by o\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 t\\hich\\af1\\dbch\\af31505\\loch\\f1 hers.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nFinally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we \r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\n, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs.\r\n\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nWhen a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1  \\hich\\af1\\dbch\\af31505\\loch\\f1 only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 We call this license the \"Lesser\" General Public License because it does Less to protect the u\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nser's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries\r\n.\\hich\\af1\\dbch\\af31505\\loch\\f1  However, the Lesser license provides advantages in certain special circumstances.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve thi\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\ns, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use t\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 h\\hich\\af1\\dbch\\af31505\\loch\\f1 e Lesser General Public License.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enab\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 les many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linke\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nd with the Library has the freedom and the wherewithal to run that program using a modified version of the Library.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a \"work ba\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nsed on the library\" and a \"work that uses the library\". The former contains code derived from the library, whereas the latter must be combined with the library in order to run.\r\n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\sb240\\sa240\\sl360\\slmult0\\widctlpar\\wrapdefault{\\*\\pn \\pnlvlcont\\ilvl0\\ls0\\pnrnot0\\pndec }\\faauto\\rin0\\lin0\\itap0 {\\field{\\*\\fldinst {\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\cf22\\insrsid4415983 \r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 HYPERLINK \"http://www.gnu.org/licenses/lgpl-2.1.html#TOC3\"}{\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\cf22\\insrsid11235741 {\\*\\datafield \r\n00d0c9ea79f9bace118c8200aa004ba90b020000000b000000e0c9ea79f9bace118c8200aa004ba90b6c00000068007400740070003a002f002f007700770077002e0067006e0075002e006f00720067002f006c006900630065006e007300650073002f006c00670070006c002d0032002e0031002e00680074006d006c00\r\n0000795881f43b1d7f48af2c825dc485276300000000a5ab00030500000054004f00430033000000ff}}}{\\fldrslt {\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\ul\\cf2\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nTERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION}}}\\sectd \\ltrsect\\linex0\\sectdefaultcl\\sftnbj {\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\cf22\\insrsid4415983 \r\n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\sa240\\sl312\\slmult0\\widctlpar\\wrapdefault{\\*\\pn \\pnlvlcont\\ilvl0\\ls0\\pnrnot0\\pndec }\\faauto\\rin0\\lin0\\itap0 {\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 0.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \r\n\\f1\\fs24\\cf22\\insrsid4415983 \\~\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nThis License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called \"this \r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 L\\hich\\af1\\dbch\\af31505\\loch\\f1 icense\"). Each licensee is addressed as \"you\".\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 A \"library\" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 The \"Librar\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\ny\", below, refers to any such software library or work which has been distributed under these terms. A \"work based on the Library\" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a port\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 i\\hich\\af1\\dbch\\af31505\\loch\\f1 on of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term \"modification\".)\r\n\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 \"Source code\" for a work means the preferred form of the work f\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nor making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 Activiti\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nes other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1  \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nwork based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does.\r\n\\par }{\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 1.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nYou may copy and distribute verbatim copies of the Library\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\n's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the \r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 a\\hich\\af1\\dbch\\af31505\\loch\\f1 bsence of any warranty; and distribute a copy of this License along with the Library.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.\r\n\\par }{\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 2.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\\hich\\af1\\dbch\\af31505\\loch\\f1 You may modify your copy \r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nor copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:\r\n\\par {\\pntext\\pard\\plain\\ltrpar \\rtlch\\fcs1 \\ab\\af1 \\ltrch\\fcs0 \\f3\\cf22\\insrsid4415983 \\loch\\af3\\dbch\\af31505\\hich\\f3 \\'b7\\tab}}\\pard \\ltrpar\\ql \\fi-360\\li336\\ri240\\sl312\\slmult0\\nowidctlpar\\wrapdefault{\\*\\pn \\pnlvlblt\\ilvl0\\ls1\\pnrnot0\\pnf3\\pnindent744 \r\n{\\pntxtb \\'b7}}\\faauto\\ls1\\rin240\\lin336\\itap0\\pararsid11235741 {\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 a)}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 The modified work must itself be a software library.\r\n\\par {\\pntext\\pard\\plain\\ltrpar \\rtlch\\fcs1 \\ab\\af1 \\ltrch\\fcs0 \\f3\\cf22\\insrsid4415983 \\loch\\af3\\dbch\\af31505\\hich\\f3 \\'b7\\tab}}\\pard \\ltrpar\\ql \\fi-360\\li336\\ri240\\sl312\\slmult0\\nowidctlpar\\wrapdefault{\\*\\pn \\pnlvlblt\\ilvl0\\ls1\\pnrnot0\\pnf3\\pnindent744 \r\n{\\pntxtb \\'b7}}\\faauto\\ls1\\rin240\\lin336\\itap0\\pararsid11235741 {\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 b)}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.\r\n\\par {\\pntext\\pard\\plain\\ltrpar \\rtlch\\fcs1 \\ab\\af1 \\ltrch\\fcs0 \\f3\\cf22\\insrsid4415983 \\loch\\af3\\dbch\\af31505\\hich\\f3 \\'b7\\tab}}\\pard \\ltrpar\\ql \\fi-360\\li336\\ri240\\sl312\\slmult0\\nowidctlpar\\wrapdefault{\\*\\pn \\pnlvlblt\\ilvl0\\ls1\\pnrnot0\\pnf3\\pnindent744 \r\n{\\pntxtb \\'b7}}\\faauto\\ls1\\rin240\\lin336\\itap0\\pararsid11235741 {\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 c)}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 You must cause the whole of the work to be licensed at no charge to a\\hich\\af1\\dbch\\af31505\\loch\\f1 ll third parties under the terms of this License.\r\n\\par {\\pntext\\pard\\plain\\ltrpar \\rtlch\\fcs1 \\ab\\af1 \\ltrch\\fcs0 \\f3\\cf22\\insrsid4415983 \\loch\\af3\\dbch\\af31505\\hich\\f3 \\'b7\\tab}}\\pard \\ltrpar\\ql \\fi-360\\li336\\ri240\\sl312\\slmult0\\nowidctlpar\\wrapdefault{\\*\\pn \\pnlvlblt\\ilvl0\\ls1\\pnrnot0\\pnf3\\pnindent744 \r\n{\\pntxtb \\'b7}}\\faauto\\ls1\\rin240\\lin336\\itap0\\pararsid11235741 {\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 d)}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invo\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 ked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful.\r\n\r\n\\par }\\pard \\ltrpar\\ql \\li336\\ri240\\sa240\\sl312\\slmult0\\widctlpar\\wrapdefault{\\*\\pn \\pnlvlcont\\ilvl0\\ls0\\pnrnot0\\pndec }\\faauto\\rin240\\lin336\\itap0 {\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\n(For example, a function in a library\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\n to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supp\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 l\\hich\\af1\\dbch\\af31505\\loch\\f1 y it, the square root function must still compute square roots.)\r\n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\sa240\\sl312\\slmult0\\widctlpar\\wrapdefault{\\*\\pn \\pnlvlcont\\ilvl0\\ls0\\pnrnot0\\pndec }\\faauto\\rin0\\lin0\\itap0 {\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nThese requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate wor\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nks in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1  \\hich\\af1\\dbch\\af31505\\loch\\f1 must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 Thus, it is not the intent of this section to claim rights or contest your rights to work wr\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nitten entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 In addition, mere aggregation of another work not based on the Library with the Library (or with a work b\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nased on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.\r\n\\par }{\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 3.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nYou may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nLibrary. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public Lic\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 e\\hich\\af1\\dbch\\af31505\\loch\\f1 nse has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all s\\hich\\af1\\dbch\\af31505\\loch\\f1 ubsequent copies and derivative works made from that copy.\r\n\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 This option is useful when you wish to copy part of the code of the Library into a program that is not a library.\r\n\\par }{\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 4.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nYou may copy and distribute the Library (or a portion or derivative of it, under\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\n Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a m\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 e\\hich\\af1\\dbch\\af31505\\loch\\f1 dium customarily used for software interchange.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute t\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 he source code, even though third parties are not compelled to copy the source along with the object code.\r\n\\par }{\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 5.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nA program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a \"work that uses the Library\". Such a work, in isolation, is not a derivative work of the Library\r\n,\\hich\\af1\\dbch\\af31505\\loch\\f1  and therefore falls outside the scope of this License.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 However, linking a \"work that uses the Library\" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a \"work that uses \r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 the library\". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 When a \"work that uses the Library\" uses material from a header file that is part of the Library, the object code for the work m\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nay be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1  \\hich\\af1\\dbch\\af31505\\loch\\f1 defined by law.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nIf such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether i\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 t is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms o\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nf Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself.\r\n\\par }{\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 6.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nAs an exception to the Sections above, you may also combine or link a \"work that uses the Library\" with the Lib\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nrary to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.\r\n\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 You\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\n must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must i\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 n\\hich\\af1\\dbch\\af31505\\loch\\f1 clude the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:\r\n\\par {\\pntext\\pard\\plain\\ltrpar \\rtlch\\fcs1 \\ab\\af1 \\ltrch\\fcs0 \\f3\\cf22\\insrsid4415983 \\loch\\af3\\dbch\\af31505\\hich\\f3 \\'b7\\tab}}\\pard \\ltrpar\\ql \\fi-360\\li336\\ri240\\sl312\\slmult0\\nowidctlpar\\wrapdefault{\\*\\pn \\pnlvlblt\\ilvl0\\ls1\\pnrnot0\\pnf3\\pnindent744 \r\n{\\pntxtb \\'b7}}\\faauto\\ls1\\rin240\\lin336\\itap0\\pararsid11235741 {\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 a)}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 Accompany the work with the complete corresponding machine-readable source code for t\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nhe Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable \"work that uses the Library\", as object cod\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 e\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\n and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessaril\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 y\\hich\\af1\\dbch\\af31505\\loch\\f1  be able to recompile the application to use the modified definitions.)\r\n\\par {\\pntext\\pard\\plain\\ltrpar \\rtlch\\fcs1 \\ab\\af1 \\ltrch\\fcs0 \\f3\\cf22\\insrsid4415983 \\loch\\af3\\dbch\\af31505\\hich\\f3 \\'b7\\tab}}\\pard \\ltrpar\\ql \\fi-360\\li336\\ri240\\sl312\\slmult0\\nowidctlpar\\wrapdefault{\\*\\pn \\pnlvlblt\\ilvl0\\ls1\\pnrnot0\\pnf3\\pnindent744 \r\n{\\pntxtb \\'b7}}\\faauto\\ls1\\rin240\\lin336\\itap0\\pararsid11235741 {\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 b)}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's com\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nputer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1  \\hich\\af1\\dbch\\af31505\\loch\\f1 was made with.\r\n\\par {\\pntext\\pard\\plain\\ltrpar \\rtlch\\fcs1 \\ab\\af1 \\ltrch\\fcs0 \\f3\\cf22\\insrsid4415983 \\loch\\af3\\dbch\\af31505\\hich\\f3 \\'b7\\tab}}\\pard \\ltrpar\\ql \\fi-360\\li336\\ri240\\sl312\\slmult0\\nowidctlpar\\wrapdefault{\\*\\pn \\pnlvlblt\\ilvl0\\ls1\\pnrnot0\\pnf3\\pnindent744 \r\n{\\pntxtb \\'b7}}\\faauto\\ls1\\rin240\\lin336\\itap0\\pararsid11235741 {\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 c)}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution.\r\n\\par {\\pntext\\pard\\plain\\ltrpar \\rtlch\\fcs1 \\ab\\af1 \\ltrch\\fcs0 \\f3\\cf22\\insrsid4415983 \\loch\\af3\\dbch\\af31505\\hich\\f3 \\'b7\\tab}}\\pard \\ltrpar\\ql \\fi-360\\li336\\ri240\\sl312\\slmult0\\nowidctlpar\\wrapdefault{\\*\\pn \\pnlvlblt\\ilvl0\\ls1\\pnrnot0\\pnf3\\pnindent744 \r\n{\\pntxtb \\'b7}}\\faauto\\ls1\\rin240\\lin336\\itap0\\pararsid11235741 {\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 d)}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 If distribution of \\hich\\af1\\dbch\\af31505\\loch\\f1 the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place.\r\n\\par {\\pntext\\pard\\plain\\ltrpar \\rtlch\\fcs1 \\ab\\af1 \\ltrch\\fcs0 \\f3\\cf22\\insrsid4415983 \\loch\\af3\\dbch\\af31505\\hich\\f3 \\'b7\\tab}}\\pard \\ltrpar\\ql \\fi-360\\li336\\ri240\\sl312\\slmult0\\nowidctlpar\\wrapdefault{\\*\\pn \\pnlvlblt\\ilvl0\\ls1\\pnrnot0\\pnf3\\pnindent744 \r\n{\\pntxtb \\'b7}}\\faauto\\ls1\\rin240\\lin336\\itap0\\pararsid11235741 {\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 e)}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 Verify that the user has already received a copy of these materials or that you have already sent t\\hich\\af1\\dbch\\af31505\\loch\\f1 his user a copy.\r\n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\sa240\\sl312\\slmult0\\widctlpar\\wrapdefault{\\*\\pn \\pnlvlcont\\ilvl0\\ls0\\pnrnot0\\pndec }\\faauto\\rin0\\lin0\\itap0 {\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nFor an executable, the required form of the \"work that uses the Library\" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not in\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nclude anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 It may happ\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distri\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 b\\hich\\af1\\dbch\\af31505\\loch\\f1 ute.\r\n\\par }{\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 7.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nYou may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distributi\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 on of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things:\r\n\\par {\\pntext\\pard\\plain\\ltrpar \\rtlch\\fcs1 \\ab\\af1 \\ltrch\\fcs0 \\f3\\cf22\\insrsid4415983 \\loch\\af3\\dbch\\af31505\\hich\\f3 \\'b7\\tab}}\\pard \\ltrpar\\ql \\fi-360\\li336\\ri240\\sl312\\slmult0\\nowidctlpar\\wrapdefault{\\*\\pn \\pnlvlblt\\ilvl0\\ls1\\pnrnot0\\pnf3\\pnindent744 \r\n{\\pntxtb \\'b7}}\\faauto\\ls1\\rin240\\lin336\\itap0\\pararsid11235741 {\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 a)}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 Accompany the combined library with a copy of the same work based on the Library, uncombined with any other lib\\hich\\af1\\dbch\\af31505\\loch\\f1 rary facilities. This must be distributed under the terms of the Sections above.\r\n\r\n\\par {\\pntext\\pard\\plain\\ltrpar \\rtlch\\fcs1 \\ab\\af1 \\ltrch\\fcs0 \\f3\\cf22\\insrsid4415983 \\loch\\af3\\dbch\\af31505\\hich\\f3 \\'b7\\tab}}\\pard \\ltrpar\\ql \\fi-360\\li336\\ri240\\sl312\\slmult0\\nowidctlpar\\wrapdefault{\\*\\pn \\pnlvlblt\\ilvl0\\ls1\\pnrnot0\\pnf3\\pnindent744 \r\n{\\pntxtb \\'b7}}\\faauto\\ls1\\rin240\\lin336\\itap0\\pararsid11235741 {\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 b)}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form \\hich\\af1\\dbch\\af31505\\loch\\f1 of the same work.\r\n\r\n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\sa240\\sl312\\slmult0\\widctlpar\\wrapdefault\\faauto\\rin0\\lin0\\itap0 {\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 8.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \r\n\\f1\\fs24\\cf22\\insrsid4415983 \\~\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nYou may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will autom\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 atically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.\r\n\r\n\\par }{\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 9.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\\hich\\af1\\dbch\\af31505\\loch\\f1 You are not required to accep\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nt this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distri\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 b\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nuting the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it.\r\n\\par }{\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 10.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\\hich\\af1\\dbch\\af31505\\loch\\f1 Each time you redistribute the Librar\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\ny (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the \r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 r\\hich\\af1\\dbch\\af31505\\loch\\f1 ecipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License.\r\n\\par }{\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 11.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nIf, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\n patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultane\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 o\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nusly your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who re\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 c\\hich\\af1\\dbch\\af31505\\loch\\f1 eive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 If any portion of this section is held invalid or unenforceable under any particular\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\n circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\n validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of softwa\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 r\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\ne distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 This section is\\hich\\af1\\dbch\\af31505\\loch\\f1  intended to make thoroughly clear what is believed to be a consequence of the rest of this License.\r\n\\par }{\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 12.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nIf the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitati\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 o\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nn excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.\r\n\\par }{\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 13.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\\hich\\af1\\dbch\\af31505\\loch\\f1 The Free Software Foundation may publish revi\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 sed and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.\r\n\\par \\hich\\af1\\dbch\\af31505\\loch\\f1 Each version is given a distinguishing version\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\n number. If the Library specifies a version number of this License which applies to it and \"any later version\", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundat\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 i\\hich\\af1\\dbch\\af31505\\loch\\f1 on. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation.\r\n\\par }{\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 14.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nIf you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompat\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of pr\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 e\\hich\\af1\\dbch\\af31505\\loch\\f1 serving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.\r\n\\par }{\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 NO WARRANTY}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \r\n\\par }{\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 15.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nBECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANT\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 Y\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\n OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROV\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 E\\hich\\af1\\dbch\\af31505\\loch\\f1  DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\r\n\\par }{\\rtlch\\fcs1 \\ab\\af1\\afs24 \\ltrch\\fcs0 \\b\\f1\\fs24\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 16.}{\\rtlch\\fcs1 \\af1\\afs24 \\ltrch\\fcs0 \\f1\\fs24\\cf22\\insrsid4415983 \\~\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nIN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERM\\hich\\af1\\dbch\\af31505\\loch\\f1 \r\nITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SU\r\n\\hich\\af1\\dbch\\af31505\\loch\\f1 S\\hich\\af1\\dbch\\af31505\\loch\\f1 TAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r\n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\sb240\\sa240\\sl360\\slmult0\\widctlpar\\wrapdefault\\faauto\\rin0\\lin0\\itap0 {\\rtlch\\fcs1 \\ab\\af1\\afs38 \\ltrch\\fcs0 \\b\\f1\\fs38\\cf22\\insrsid4415983 \\hich\\af1\\dbch\\af31505\\loch\\f1 END OF TERMS AND CONDITIONS\r\n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\nowidctlpar\\wrapdefault\\faauto\\rin0\\lin0\\itap0 {\\rtlch\\fcs1 \\af2 \\ltrch\\fcs0 \\f2\\insrsid4415983 \r\n\\par }{\\*\\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a\r\n9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad\r\n5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6\r\nb01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0\r\n0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6\r\na7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f\r\nc7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512\r\n0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462\r\na1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865\r\n6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b\r\n4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b\r\n4757e8d3f729e245eb2b260a0238fd010000ffff0300504b030414000600080000002100b6f4679893070000c9200000160000007468656d652f7468656d652f\r\n7468656d65312e786d6cec59cd8b1bc915bf07f23f347d97f5d5ad8fc1f2a24fcfda33b6b164873dd648a5eef2547789aad28cc56208de532e81c026e49085bd\r\ned21842cecc22eb9e48f31d8249b3f22afaa5bdd5552c99e191c3061463074977eefd5afde7bf5de53d5ddcf5e26d4bbc05c1096f6fcfa9d9aefe174ce16248d\r\n7afeb3d9a4d2f13d2151ba4094a5b8e76fb0f03fbbf7eb5fdd454732c609f6403e1547a8e7c752ae8eaa5531876124eeb0154ee1bb25e30992f0caa3ea82a34b\r\nd09bd06aa3566b55134452df4b51026a1f2f97648ebd9952e9dfdb2a1f53784da5500373caa74a35b6243476715e5708b11143cabd0b447b3eccb3609733fc52\r\nfa1e4542c2173dbfa6fffceabdbb5574940b517940d6909be8bf5c2e17589c37f49c3c3a2b260d823068f50bfd1a40e53e6edc1eb7c6ad429f06a0f91c569a71\r\nb175b61bc320c71aa0ecd1a17bd41e35eb16ded0dfdce3dc0fd5c7c26b50a63fd8c34f2643b0a285d7a00c1feee1c3417730b2f56b50866fede1dbb5fe28685b\r\nfa3528a6243ddf43d7c25673b85d6d0159327aec8477c360d26ee4ca4b144443115d6a8a254be5a1584bd00bc6270050408a24493db959e1259a43140f112567\r\n9c7827248a21f056286502866b8ddaa4d684ffea13e827ed5174849121ad780113b137a4f87862cec94af6fc07a0d537206f7ffef9cdeb1fdfbcfee9cd575fbd\r\n79fdf77c6eadca923b466964cafdf2dd1ffef3cd6fbd7ffff0ed2f5fff319b7a172f4cfcbbbffdeedd3ffef93ef5b0e2d2146ffff4fdbb1fbf7ffbe7dfffebaf\r\n5f3bb4f7393a33e1339260e13dc297de5396c0021dfcf119bf9ec42c46c494e8a791402952b338f48f656ca11f6d10450edc00db767cce21d5b880f7d72f2cc2\r\nd398af2571687c182716f094313a60dc6985876a2ec3ccb3751ab927e76b13f714a10bd7dc43945a5e1eaf579063894be530c616cd2714a5124538c5d253dfb1\r\n738c1dabfb8210cbaea764ce99604be97d41bc01224e93ccc899154da5d03149c02f1b1741f0b7659bd3e7de8051d7aa47f8c246c2de40d4417e86a965c6fb68\r\n2d51e252394309350d7e8264ec2239ddf0b9891b0b099e8e3065de78818570c93ce6b05ec3e90f21cdb8dd7e4a37898de4929cbb749e20c64ce4889d0f6394ac\r\n5cd829496313fbb938871045de13265df05366ef10f50e7e40e941773f27d872f787b3c133c8b026a53240d4376beef0e57dccacf89d6ee8126157aae9f3c44a\r\nb17d4e9cd131584756689f604cd1255a60ec3dfbdcc160c05696cd4bd20f62c82ac7d815580f901dabea3dc5027a25d5dcece7c91322ac909de2881de073bad9\r\n493c1b9426881fd2fc08bc6eda7c0ca52e7105c0633a3f37818f08f480102f4ea33c16a0c308ee835a9fc4c82a60ea5db8e375c32dff5d658fc1be7c61d1b8c2\r\nbe04197c6d1948eca6cc7b6d3343d49aa00c9819822ec3956e41c4727f29a28aab165b3be596f6a62ddd00dd91d5f42424fd6007b4d3fb84ffbbde073a8cb77f\r\nf9c6b10f3e4ebfe3566c25ab6b763a8792c9f14e7f7308b7dbd50c195f904fbfa919a175fa04431dd9cf58b73dcd6d4fe3ffdff73487f6f36d2773a8dfb8ed64\r\n7ce8306e3b99fc70e5e3743265f3027d8d3af0c80e7af4b14f72f0d46749289dca0dc527421ffc08f83db398c0a092d3279eb838055cc5f0a8ca1c4c60e1228e\r\nb48cc799fc0d91f134462b381daafb4a492472d591f0564cc0a1911e76ea5678ba4e4ed9223becacd7d5c16656590592e5782d2cc6e1a04a66e856bb3cc02bd4\r\n6bb6913e68dd1250b2d721614c6693683a48b4b783ca48fa58178ce620a157f65158741d2c3a4afdd6557b2c805ae115f8c1edc1cff49e1f06200242701e07cd\r\nf942f92973f5d6bbda991fd3d3878c69450034d8db08283ddd555c0f2e4fad2e0bb52b78da2261849b4d425b46377822869fc17974aad1abd0b8aeafbba54b2d\r\n7aca147a3e08ad9246bbf33e1637f535c8ede6069a9a9982a6de65cf6f35430899395af5fc251c1ac363b282d811ea3717a211dcbccc25cf36fc4d32cb8a0b39\r\n4222ce0cae934e960d122231f728497abe5a7ee1069aea1ca2b9d51b90103e59725d482b9f1a3970baed64bc5ce2b934dd6e8c284b67af90e1b35ce1fc568bdf\r\n1cac24d91adc3d8d1797de195df3a708422c6cd795011744c0dd413db3e682c0655891c8caf8db294c79da356fa3740c65e388ae62945714339967709dca0b3a\r\nfaadb081f196af190c6a98242f8467912ab0a651ad6a5a548d8cc3c1aafb6121653923699635d3ca2aaa6abab39835c3b60cecd8f26645de60b53531e434b3c2\r\n67a97b37e576b7b96ea74f28aa0418bcb09fa3ea5ea12018d4cac92c6a8af17e1a56393b1fb56bc776811fa07695226164fdd656ed8edd8a1ae19c0e066f54f9\r\n416e376a6168b9ed2bb5a5f5adb979b1cdce5e40f2184197bba6526857c2c92e47d0104d754f92a50dd8222f65be35e0c95b73d2f3bfac85fd60d80887955a27\r\n1c57826650ab74c27eb3d20fc3667d1cd66ba341e31514161927f530bbb19fc00506dde4f7f67a7cefee3ed9ded1dc99b3a4caf4dd7c5513d777f7f5c6e1bb7b\r\n8f40d2f9b2d598749bdd41abd26df627956034e854bac3d6a0326a0ddba3c9681876ba9357be77a1c141bf390c5ae34ea5551f0e2b41aba6e877ba9576d068f4\r\n8376bf330efaaff23606569ea58fdc16605ecdebde7f010000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d65\r\n2f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d36\r\n3f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e\r\n3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d985\r\n0528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c020000130000000000000000000000\r\n0000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000000000\r\n000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c0000000000000000000000000019020000\r\n7468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d0014000600080000002100b6f4679893070000c92000001600000000000000\r\n000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b01000027000000\r\n000000000000000000009d0a00007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000980b00000000}\r\n{\\*\\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d\r\n617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169\r\n6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363\r\n656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}\r\n{\\*\\latentstyles\\lsdstimax376\\lsdlockeddef0\\lsdsemihiddendef0\\lsdunhideuseddef0\\lsdqformatdef0\\lsdprioritydef99{\\lsdlockedexcept \\lsdqformat1 \\lsdpriority0 \\lsdlocked0 Normal;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 1;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 3;\\lsdsemihidden1 \\lsdunhideused1 \\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 4;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 6;\\lsdsemihidden1 \\lsdunhideused1 \\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 7;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 8;\\lsdsemihidden1 \\lsdunhideused1 \\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 9;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 1;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 3;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 4;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 5;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 6;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 7;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 8;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 9;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 1;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 3;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 4;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 6;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 7;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 8;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 9;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Normal Indent;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 footnote text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 annotation text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 header;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 footer;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index heading;\\lsdsemihidden1 \\lsdunhideused1 \\lsdqformat1 \\lsdpriority35 \\lsdlocked0 caption;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 table of figures;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 envelope address;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 envelope return;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 footnote reference;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 annotation reference;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 line number;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 page number;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 endnote reference;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 endnote text;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 table of authorities;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 macro;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 toa heading;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List 3;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List 4;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet 3;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet 4;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number 3;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number 4;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number 5;\\lsdqformat1 \\lsdpriority10 \\lsdlocked0 Title;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Closing;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Signature;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority1 \\lsdlocked0 Default Paragraph Font;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text Indent;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue 3;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue 4;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Message Header;\\lsdqformat1 \\lsdpriority11 \\lsdlocked0 Subtitle;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Salutation;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Date;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text First Indent;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text First Indent 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Note Heading;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text 3;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text Indent 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text Indent 3;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Block Text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Hyperlink;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 FollowedHyperlink;\\lsdqformat1 \\lsdpriority22 \\lsdlocked0 Strong;\r\n\\lsdqformat1 \\lsdpriority20 \\lsdlocked0 Emphasis;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Document Map;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Plain Text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 E-mail Signature;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Top of Form;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Bottom of Form;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Normal (Web);\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Acronym;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Address;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Cite;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Code;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Definition;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Keyboard;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Preformatted;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Sample;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Typewriter;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Variable;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 annotation subject;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 No List;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Outline List 1;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Outline List 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Outline List 3;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Balloon Text;\\lsdpriority39 \\lsdlocked0 Table Grid;\r\n\\lsdsemihidden1 \\lsdlocked0 Placeholder Text;\\lsdqformat1 \\lsdpriority1 \\lsdlocked0 No Spacing;\\lsdpriority60 \\lsdlocked0 Light Shading;\\lsdpriority61 \\lsdlocked0 Light List;\\lsdpriority62 \\lsdlocked0 Light Grid;\r\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1;\\lsdpriority64 \\lsdlocked0 Medium Shading 2;\\lsdpriority65 \\lsdlocked0 Medium List 1;\\lsdpriority66 \\lsdlocked0 Medium List 2;\\lsdpriority67 \\lsdlocked0 Medium Grid 1;\\lsdpriority68 \\lsdlocked0 Medium Grid 2;\r\n\\lsdpriority69 \\lsdlocked0 Medium Grid 3;\\lsdpriority70 \\lsdlocked0 Dark List;\\lsdpriority71 \\lsdlocked0 Colorful Shading;\\lsdpriority72 \\lsdlocked0 Colorful List;\\lsdpriority73 \\lsdlocked0 Colorful Grid;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 1;\r\n\\lsdpriority61 \\lsdlocked0 Light List Accent 1;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 1;\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 1;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 1;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 1;\r\n\\lsdsemihidden1 \\lsdlocked0 Revision;\\lsdqformat1 \\lsdpriority34 \\lsdlocked0 List Paragraph;\\lsdqformat1 \\lsdpriority29 \\lsdlocked0 Quote;\\lsdqformat1 \\lsdpriority30 \\lsdlocked0 Intense Quote;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 1;\r\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 1;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 1;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 1;\\lsdpriority70 \\lsdlocked0 Dark List Accent 1;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 1;\r\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 1;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 1;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 2;\\lsdpriority61 \\lsdlocked0 Light List Accent 2;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 2;\r\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 2;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 2;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 2;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 2;\r\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 2;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 2;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 2;\\lsdpriority70 \\lsdlocked0 Dark List Accent 2;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 2;\r\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 2;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 2;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 3;\\lsdpriority61 \\lsdlocked0 Light List Accent 3;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 3;\r\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 3;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 3;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 3;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 3;\r\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 3;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 3;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 3;\\lsdpriority70 \\lsdlocked0 Dark List Accent 3;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 3;\r\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 3;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 3;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 4;\\lsdpriority61 \\lsdlocked0 Light List Accent 4;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 4;\r\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 4;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 4;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 4;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 4;\r\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 4;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 4;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 4;\\lsdpriority70 \\lsdlocked0 Dark List Accent 4;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 4;\r\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 4;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 4;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 5;\\lsdpriority61 \\lsdlocked0 Light List Accent 5;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 5;\r\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 5;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 5;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 5;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 5;\r\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 5;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 5;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 5;\\lsdpriority70 \\lsdlocked0 Dark List Accent 5;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 5;\r\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 5;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 5;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 6;\\lsdpriority61 \\lsdlocked0 Light List Accent 6;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 6;\r\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 6;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 6;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 6;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 6;\r\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 6;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 6;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 6;\\lsdpriority70 \\lsdlocked0 Dark List Accent 6;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 6;\r\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 6;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 6;\\lsdqformat1 \\lsdpriority19 \\lsdlocked0 Subtle Emphasis;\\lsdqformat1 \\lsdpriority21 \\lsdlocked0 Intense Emphasis;\r\n\\lsdqformat1 \\lsdpriority31 \\lsdlocked0 Subtle Reference;\\lsdqformat1 \\lsdpriority32 \\lsdlocked0 Intense Reference;\\lsdqformat1 \\lsdpriority33 \\lsdlocked0 Book Title;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority37 \\lsdlocked0 Bibliography;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdqformat1 \\lsdpriority39 \\lsdlocked0 TOC Heading;\\lsdpriority41 \\lsdlocked0 Plain Table 1;\\lsdpriority42 \\lsdlocked0 Plain Table 2;\\lsdpriority43 \\lsdlocked0 Plain Table 3;\\lsdpriority44 \\lsdlocked0 Plain Table 4;\r\n\\lsdpriority45 \\lsdlocked0 Plain Table 5;\\lsdpriority40 \\lsdlocked0 Grid Table Light;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light;\\lsdpriority47 \\lsdlocked0 Grid Table 2;\\lsdpriority48 \\lsdlocked0 Grid Table 3;\\lsdpriority49 \\lsdlocked0 Grid Table 4;\r\n\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 1;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 1;\r\n\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 1;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 1;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 1;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 1;\r\n\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 1;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 2;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 2;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 2;\r\n\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 2;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 2;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 2;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 2;\r\n\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 3;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 3;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 3;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 3;\r\n\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 3;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 3;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 3;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 4;\r\n\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 4;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 4;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 4;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 4;\r\n\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 4;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 4;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 5;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 5;\r\n\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 5;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 5;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 5;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 5;\r\n\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 5;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 6;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 6;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 6;\r\n\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 6;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 6;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 6;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 6;\r\n\\lsdpriority46 \\lsdlocked0 List Table 1 Light;\\lsdpriority47 \\lsdlocked0 List Table 2;\\lsdpriority48 \\lsdlocked0 List Table 3;\\lsdpriority49 \\lsdlocked0 List Table 4;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark;\r\n\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 1;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 1;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 1;\r\n\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 1;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 1;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 1;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 1;\r\n\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 2;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 2;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 2;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 2;\r\n\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 2;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 2;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 2;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 3;\r\n\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 3;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 3;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 3;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 3;\r\n\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 3;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 3;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 4;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 4;\r\n\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 4;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 4;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 4;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 4;\r\n\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 4;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 5;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 5;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 5;\r\n\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 5;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 5;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 5;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 5;\r\n\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 6;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 6;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 6;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 6;\r\n\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 6;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 6;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 6;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Mention;\r\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Smart Hyperlink;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Hashtag;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Unresolved Mention;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Smart Link;}}{\\*\\datastore 01050000\r\n02000000180000004d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000\r\nd0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nfffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e50000000000000000000000004002\r\n75b02882d701feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000\r\n00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000\r\n000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000\r\n0000000000000000000000000000000000000000000000000105000000000000}}"
  },
  {
    "path": "Install/Program Files to Install/Revit.IFC.addin",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<RevitAddIns>\r\n  <AddIn Type=\"Application\">\r\n    <Name>IFC UI override</Name>\r\n    <Assembly>.\\IFCExporterUIOverride.dll</Assembly>\r\n    <AddInId>6DC299D6-F746-47BE-AE93-F00DDC714257</AddInId>\r\n    <FullClassName>BIM.IFC.Export.UI.IFCCommandOverrideApplication</FullClassName>\r\n    <VendorId>ADSK</VendorId>\r\n    <VendorDescription>Autodesk, www.autodesk.com</VendorDescription>\r\n  </AddIn>\r\n  <AddIn Type=\"DBApplication\">\r\n    <Name>BIM IFC Exporter</Name>\r\n    <Assembly>.\\Revit.IFC.Export.dll</Assembly>\r\n    <ClientId>D2FE9530-A191-4F58-B3C4-1653384A6286</ClientId>\r\n    <FullClassName>Revit.IFC.Export.Exporter.ExporterApplication</FullClassName>\r\n\t<VendorId>ADSK</VendorId>\r\n    <VendorDescription>Autodesk, www.autodesk.com</VendorDescription>\r\n  </AddIn>\r\n  <AddIn Type=\"DBApplication\">\r\n    <Name>BIM IFC Importer</Name>\r\n    <Assembly>.\\Revit.IFC.Import.dll</Assembly>\r\n    <ClientId>8B9FECE3-8BA0-4DC8-BF15-388239213C92</ClientId>\r\n    <FullClassName>Revit.IFC.Import.ImporterApplication</FullClassName>\r\n\t<VendorId>ADSK</VendorId>\r\n    <VendorDescription>Autodesk, www.autodesk.com</VendorDescription>\r\n  </AddIn>\r\n</RevitAddIns>"
  },
  {
    "path": "Install/Program Files to Install/bundle/Contents/Resources/ADSKIFCExporterHelp.htm",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/TR/REC-html40\" xml:lang=\"en\" dir=\"ltr\" class=\"js\">\n<head>\n<meta http-equiv=Content-Type content=\"text/html; charset=utf-8\">\n<title>Revit Exchange - Revit IFC Help</title>\n<style> \nhtml, body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, hr, pre, code, form, fieldset, legend, input, textarea, blockquote, table, th, td {\n  padding: 0;\n  margin: 0;\n}\na{color:#1F5397;text-decoration:none}\nbody {font-family:\"Arial\", \"Helvetica\", \"sans-serif\";font-size:12.0px;margin:15px}\np {font-size:12.0px;line-height:16px;padding:0px;margin:5px 0px 5px 0px}\nol {font-size:12.0px;line-height:16px;padding:0px;margin:5px 0px 5px 20px}\nh1 {font-size:22.0px;height=\"26px\"}\n.separator-line {border-bottom;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#C3C3C3}\nh2 {font-size:16.0px;line-height:18px;height:16px;margin-bottom:3px;margin-top:15px}\nh3 {font-size:14.0px;line-height:16px;height:14px;margin-bottom:3px;margin-top:15px}\n#plugin-icon{float:left;width:94px;height:94px}\n#plugin-name{margin-left:94px}\n#plugin-description{margin-left:94px;margin-top:3px;margin-bottom:40px}\n#navigation{margin-bottom:10px;clear:both}\n.nav-link-spacer {margin:0px 5px 0px 5px}\n.command {margin-top:5px;margin-bottom:3px}\n.command.icon {float:left;width:34px;height:34px}\n.command.name {font-weight:bold;padding-top:4px;margin:0px 0px 0px 34px}\n.command.description {margin:0px 0px 0px 34px}\n.versionset {margin-bottom:5px}\n.version {float:left;width:50px}\n.versioninfo-bullet {margin-left:50px}\n.screenshots {}\n.clearboth {clear:both}\n.thumbnail {float:left; width:207px;margin: 0px 20px 0px 0px}\n.caption { font-weight:bold}\n table.MsoNormalTable\n\t{font-size:10.0pt;\n\tfont-family:\"Calibri\",\"sans-serif\";\n\t}\n li.MsoNormal\n\t{margin-top:0in;\n\tmargin-right:0in;\n\tmargin-bottom:10.0pt;\n\tmargin-left:0in;\n\tline-height:115%;\n\tfont-size:11.0pt;\n\tfont-family:\"Calibri\",\"sans-serif\";\n\t}\n* {\n  box-sizing: border-box;\n}\n\n.column {\n  float: left;\n  width: 30%;\n  padding: 5px;\n}\n\n/* Clearfix (clear floats) */\n.row::after {\n  content: \"\";\n  clear: both;\n  display: table;\n}\n</style>\n<body>\n<div id=\"heading\">\n\t<div id=\"plugin-icon\"><img width=85 height=85 id=\"Rectangle 3\" src=\"IFCExporter.png\"></div>\n\t<div id=\"plugin-name\"><h1 class=\"separator-line\">Revit IFC 2027</h1></div>\n\t<p id=\"plugin-description\">\n\tThis application seamlessly replaces the built-in IFC capabilities of Revit 2027.  It contains enhancements to functionality and defect fixes provided by Autodesk and Open Source contributors that did not appear in the initial shipping version.\n    </p>\n</div>\n\n<div id=\"navigation\">Getting Started<span class=\"nav-link-spacer\">|</span><a href=\"#Install\">Install/Uninstall</a><span class=\"nav-link-spacer\">|</span><a href=\"#AdditionalInfo\">Additional Information</a><span class=\"nav-link-spacer\">|</span><a href=\"#Contact\">Contact</a><span class=\"nav-link-spacer\">|</span><a class=\"navigation-link\" href=\"#VersionHistory\">Version History</a></p>\n\n<h2 id=\"GettingStarted\" name=\"GettingStarted\">Getting Started</h2>\n<div class=\"command\">\n\t<div class=\"command icon\"><img width=32 height=32 src=\"IFCExporter_32.png\" alt=Icon></div>\n\t<div class=\"command name\">Revit IFC</div>\n\t<div class=\"command description\">\n    <p> \n    Revit IFC 2027 contains up-to-date improvements on the default IFC capabilities of Revit contributed by Autodesk and our Open \n    Source contributors.  While this app is not necessary for IFC support, it is recommended that users that depend on the quality of their IFC \n    download this app and keep it up-to-date, as new enhancements and defect fixes are added,  For more information on IFC, \n    please visit the <a href=\"http://buildingsmart.com/standards/ifc\" target=_blank>buildingSMART website</a> or the Revit wiki.\n    </p>\n\t</div>\n</div>\n<div class=\"command\">\n</div>\n<h3>Usage</h3>\n<p>\nThis application seamlessly replaces the built-in IFC mechanism.  Please use the standard IFC import and export UI to access this functionality.</p>\n\nThe export alternate interface is loaded when users access the Export functionality using Revit UI. This alternate interface offers a flexible set of options to configure the export. The options include:</p>\n<p>\n<p><strong>IFC version</strong>:</p>\n<menu>\n<li>IFC 2x3 Coordination View 2.0</li>\n<li>IFC 2x3 Coordination View</li>\n<li>IFC 2x2 Coordination View</li>\n<li>IFC 2x3 GSA Concept Design BIM 2010 – This is a variant of the standard IFC 2x3 used for submitting files to the US Government Services Administration.  Additional property sets will be included.</li> \n<li>IFC 4 Reference View - This version is buildingSMART IFC certification (IFC4 RV 1.2) certified version for Architectural and Structural export Exchange Requirements. MEP export and Import are still on-going</li>\n<li>IFC 4 Design Transfer View</li>\n</menu>\n<p><strong>Exchange Requirement</strong>: Exchange Requirements (only for IFC4 Reference View)</p>\n<menu><li>Architectural Reference Exchange</li>\n<li>Structural Reference Exchange</li>\n<li>MEP Reference Exchange</li>\n<p><strong>File Type</strong>: The file format</p>\n<menu><li>IFC</li>\n<li>IFC XML</li>\n<li>Zipped IFC</li>\n<li>Zipped IFC XML</li></menu>\n<p><strong>Phase to export</strong>: Selects the phase of the document to export, defaulting to the last phase of the document.  If \"Export only elements visible in view\" is selected, the phase of the view will be used and this option greyed out.</p>\n<p><strong>Space boundaries</strong>: The level of room/space boundaries exported:</p>\n<menu>\n<li>None – room/space boundaries are not exported</li>\n<li>1st level – the room/space boundaries are included but are not optimized to split elements with respect to spaces on the opposite side of the boundary</li>\n<li>2nd level – the room/space boundaries are included and are split with respect to spaces on the opposite side of the boundary</li>\n</menu>\n<p><strong>Coordinate Base</strong>: The origin of the exported file.  Can be one of:</p>\n<menu>\n<li>Shared Coordinates (default)</li>\n<li>Survey Point</li>\n<li>Project Base Point</li>\n<li>Internal Origin</li>\n</menu>\n<p><strong>Projected Coordinate System Reference</strong>: Map/GIS Projected Coordinate System used:</p>\n<menu>\n\t\t  <li>Name: the name of the Projected Coordinate System. Auto-populated based on the EPSG Code in the model or user input</li>\n\t\t  <li>Description: description of the Projected Coordinate System. It is auto-populated</li>\n\t\t  <li>EPSG Code: the EPSG Code. It is pre-populated if the Revit file has SiteLocation information, otherwise user input</li>\n\t\t  <li>Geodetic Datum: the geodetic datum used. It is Auto-populated</li>\n\t\t  <li>Eastings: the Easting. It is updated based on the Coordinate Based selected. For a proper geo-reference export, use either Project Based Point or Survey Point</li>\n\t\t  <li>Northings: the Northing. It is updated based on the Coordinate Based selected. For a proper geo-reference export, use either Project Based Point or Survey Point</li>\n\t\t  <li>Reset (button). It resets the Projected Coordinate System setting to the original values</li>\n</menu>\n<p><strong>Split walls and columns by Level</strong>: Whether or not to split walls and columns by building stories.</p>\n<p><strong>Include Steel Elements</strong>: Export Steel connection elements</p>\n\n<p><strong>Export 2D plan view elements</strong>: Checked to include 2D elements supported by IFC export (notes and filled regions), unchecked to exclude them. </p>\n<p><strong>Export Linked Files as Separate IFCs</strong>: Checked to export any Revit links in the project as separate IFCs, unchecked to exclude them.  Each linked instance in the file will export as a separate IFC file with the right positioning relative to the host file.  Multiple instances of the same linked document will export as separate files, identical except for their position and orientation.  Note that linked IFC files will be re-exported, so may suffer data loss on roundtrip.</p>\n<p><strong>Export only elements visible in view</strong>: Checked to export only the visible elements of the current view (based on filtering and/or element and category hiding), unchecked to export the entire model.</p>\n<p><strong>Export rooms, areas and spaces in 3D views</strong>: If the \"export only elements visible in view\" is checked, checking this option will export all of the rooms that are contained inside the section box of the selected 3D view.  If there is no active section box, all rooms will be exported.\n\n<p><strong>Export Revit property sets</strong>: Checked to include the Revit-specific property sets based on parameter groups.  Unchecked to exclude them.</p>\n<p><strong>Export IFC Common property sets</strong>: Checked to include the IFC common property sets, unchecked to exclude them.</p>\n<p><strong>Export base quantities</strong>: Whether or not to include base quantities for model elements in the export data.  Base quantities are generated from model geometry to reflect actual physical quantity values, independent of measurement rules or methods.</p>\n<p><strong>Export Schedules as property sets</strong>: Checked to export schedules as custom property sets.  The name of the schedule is the property set name; the column names are the IFC parameter names.</p>\n<p><strong>Export only schedules containing IFC, Pset, or Common in the title</strong>: When checked, restricts the schedules exported to only those that contain \"IFC\", \"PSet\", or \"Common\" in their title.\n<p><strong>Export user defined property sets</strong>: Checked to export user-defined property set.  If checked, the use can specify the name of a text file that contains the property set definitions.</p>\n<p><strong>Export parameter mapping table</strong>: Export parameter mapping table to a specified file</p>\n\n<p><strong>Level of detail for some element geometry</strong>: Allows control of the level of tessellation for some Revit elements.  Disabling this option will generally result in larger, but more accurate, BRep and profile representations.  The main Revit elements affected by this control are: elbows, floors, pipe fittings, railings, ramps, spaces and stairs.  Highly detailed extrusion profiles are also affected.for these items.</p>\n\n<p><strong>Export parts as building elements</strong>: Checked to export parts as standard IFC elements, Unchecked to export them as IfcBuildingElementPart.</p>\n<p><strong>Allow use of mixed \"Solid Model\" representation</strong>: Checked to allow for mixing BRep and extrusion geometries for an entity.  This can result in smaller IFC files, but which are not strictly within the standard IFC MVDs.</p>\n<p><strong>Use active view when creating geometry</strong>: This option exports the geometry according to the view including view constrained using section box</p>\n<p><strong>Use family and type name for references</strong>: Checked to use the family and type name for references, unchecked to use the type name only.</p>\n<p><strong>Use 2D room boundaries for room volume</strong>: Checked to use a simplified approach to calculation of room volumes (based on extrusion of 2D room boundaries) which is also the default when exporting to IFC 2x2.   Unchecked to use the Revit calculated room geometry to represent the room volumes (which is the default when exporting to IFC 2x3).</p>\n<p><strong>Include IFCSITE elevation in the site local placement origin</strong>: Checked to include the elevation from the Z offset of the IFCSITE local placement, unchecked to exclude it.</p>\n<p><strong>Store IFC GUID in file after export</strong>: Optionally allow storing the generated IFC GUIDs into the project file after export. This will add \"IFC GUID\" parameters to elements and their types, and Project Information for Project, Site, and Building GUIDS. This requires v2.12 of the exporter to add the parameter values, and also requires a manual save. \n</p>\n<p><strong>Export Bounding Box</strong>: Checked to export bounding box representations, Unchecked to exclude them.  This is the default for GSA export.</p>\n<p><strong>Keep Tessellated Geometry as Triangulation</strong>: This option will not optimize Brep to be exported as IfcPolygonalFaceSet in IFC4 RV export. This option may speed up export for models that have large and complex geometries</p>\n<p><strong>Use Type name only for IFCType name</strong>: This option override the default type name using just the name of the type</p>\n<p><strong>Use visible Revit name as the IFCEntity name</strong>: Ths option override the default element name using what shown in Revit as the object name</p>\n\n<p>There are 10 built-in setups in the user interface:</p>    \n<menu>\n<li>IFC 2x3 Coordination View 2.0</li>\n<li>IFC 2x3 Coordination View</li>\n<li>IFC 2x3 GSA Concept Design BIM 2010</li>\n<li>IFC 2x3 Basic FM Handover View</li>\n<li>IFC 2x2 Coordination View</li>\n<li>IFC 2x3 COBie 2.4 Design Deliverable</li>\n<li>IFC 4 Reference View [Architecture]</li>\n<li>IFC 4 Reference View [Structural]</li>\n<li>IFC 4 Reference View [BuildingService]</li>\n<li>IFC 4 Design Transfer View</li>\n\n</menu>\n    <p>These correspond to the file type options in the standard Revit UI. When selected, the individual options will adjust accordingly. \n    These setups cannot be modified or deleted, but they can be duplicated in order to create a modified version.</p>\n    <p>The “In-Session Setup” is a modifiable setup which will not be saved between sessions. You can configure the options as desired.</p>\n    <p>You can add additional named setups using the Setup Configuration dialog box using the New or Duplicate options. \n    These configurations will be added to the active document and saved with the document. \n    The add-in will be able to retrieve and reuse these setups if the same model is being exported. \n    You can also rename and delete named setups from this dialog.</p>\n    <p> The last two options are for experimental use and have fewer settable options than the rest.</p>\n\n\n<h2 id=\"Install\" name=\"Install\">Installation and Uninstallation</h2>\n<p>\nThe installer that ran when you downloaded this plug-in from Revit Exchange \n  has already installed the plug-in. You will need to restart Revit to activate \n  the plug-in.\n</p>\n<p>\nTo uninstall this plug-in, exit Revit if you are currently running it, \n  simply rerun the installer by downloading it again \n  from Exchange, and select the 'Uninstall' button, or you can uninstall it from \n  'Control Panel\\Programs\\Programs and Features' (Windows 7) or Add/Remove \n  Programs (Windows XP), just as you would uninstall any other application from \n  your system.\n  </p>\n  \n<h2 id=\"AdditionalInfo\" name=\"AdditionalInfo\">Additional Information</h2>\n<p>\nFrom Revit 2019 and onward the open source codes have been relocated to Github at the following address: <a href=\"https://github.com/Autodesk/revit-ifc\" target=_blank>https://github.com/Autodesk/revit-ifc</a></p>\nThe older source code for this application (prior to 2019) is still available at the SourceForge project :\n<a href=\"http://sourceforge.net/p/ifcexporter/home/Home/\" target=_blank>http://sourceforge.net/p/ifcexporter/home/Home/</a></p>\n<h3>Known Issues</h3>\n<p>The alternate export UI is currently provided only in English, German and French.  The help is currently provided only in English.</p>\n<p>The third party toolkit we use to write out IFC files has a limit on the maximum size of IFC file it can create.  \nWhile there is no absolute metric for this, in practice it is about 1.5 GB.  The toolkit provider is aware of these issues and is \nworking on expanding and eventually removing this limit, and we will be tracking their progress on this issue.</p>\n<h2 id=\"Contact\" name=\"Contact\">Contact</h2>\n  <p>Autodesk. Please visit us at: <a href=\"http://www.autodesk.com/\" target=_blank>http://www.autodesk.com/</a></p>\n  <p>Autodesk, Inc., is a leader in 3D design, engineering and entertainment software. Customers across the manufacturing, architecture, \n  building, construction, and media and entertainment industries—including the last 16 Academy Award winners for Best Visual Effects—use \n  Autodesk software to design, visualize, and simulate their ideas before they’re ever built or created. From blockbuster visual effects \n  and buildings that create their own energy to electric cars and the batteries that power them, the work of our 3D software customers is everywhere you look.</p>\n  <p>Through our apps for iPhone, iPad, iPod, and Android, we’re also making design technology accessible to professional designers as well as \n  amateur designers, homeowners, students, and casual creators. Whether it’s a kid looking to build a new contraption, a seasoned pro sketching out \n  a great new idea, or someone who just wants to amp up their creative output, we’re taking technology originally built for movie studios, automakers, \n  and architectural firms, and making it available to anyone who wants to create and share their ideas with the world. </p>\n  <p>Since its introduction of AutoCAD software in 1982, Autodesk continues to develop the broadest portfolio of state-of-the-art 3D software for global markets.</p>\n<h3>Support Information</h3>\n<p>Autodesk Services & Support Center: <a href=\"http://usa.autodesk.com/support/\" target=_blank>http://usa.autodesk.com/support/</a></p>\n<p>Login to subscription customer: <a href=\"http://www.autodesk.com/subscriptionlogin\" target= _blank>http://www.autodesk.com/subscriptionlogin</a></p>\n<p>To learn more about subscription: <a href=\"http://www.autodesk.com/subscription\" target=_blank>http://www.autodesk.com/subscription</a></p>\n<p>or if you have an inquiry specific to this add-in, send us an e-mail to: <a href=\"mailto:Revit.apps@autodesk.com\">Revit.apps@autodesk.com</a></p>\n<h2 id=\"VersionHistory\" name=\"VersionHistory\">Version History</h2>\n\n<div class=\"versionset\">\n\t<div class=\"version\">27.0.1.0</div><div class=\"versioninfo-bullet\">\n      <br><p>\n         General:\n\n         </p><ul>\n            <li>This is the first version of IFC Extension for Revit 2027.\n         </li></ul>\n   </div>\n</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "Install/Program Files to Install/bundle/PackageContents.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ApplicationPackage SchemaVersion=\"1.0\" AutodeskProduct=\"Revit\" ProductType=\"Application\" Name=\"IFC Exporter for Revit\" AppVersion=\"27.0.1.0\" Description=\"This application seamlessly replaces the built-in IFC export capabilities of Revit 2027. \" Author=\"Autodesk\" Icon=\".\\Contents\\Resources\\IFCExporter.png\" AppNameSpace=\"appstore.exchange.autodesk.com\" OnlineDocumentation=\"http://www.autodesk.com\" HelpFile=\".\\Contents\\Resources\\ADSKIFCExporterHelp.htm\" ProductCode=\"{F1A1177D-4CE7-4AAA-B4E6-EC318112D7B4}\" UpgradeCode=\"{1A9C2C21-24B8-42D2-0000-992E73C11B3F}\" SupportedLocales=\"Enu\">\r\n  <CompanyDetails Name=\"Autodesk, Inc.\" Phone=\" \" Url=\"http://www.autodesk.com\" Email=\"Revit.apps@autodesk.com\" />\r\n  <RuntimeRequirements OS=\"Win64\" Platform=\"Revit\" SeriesMin=\"R2027\" SeriesMax=\"R2027\" />\r\n  <Components Description=\"2027\">\r\n    <RuntimeRequirements OS=\"Win64\" Platform=\"Revit\" SeriesMin=\"R2027\" SeriesMax=\"R2027\" />\r\n    <ComponentEntry AppName=\"IFC For Revit 2027\" Version=\"27.0.1\" ModuleName=\"./Contents/2027/Revit.IFC.addin\" AppDescription=\"IFC For Revit 2027\" />\r\n  </Components>\r\n</ApplicationPackage>"
  },
  {
    "path": "Install/RevitIFCSetupWix/Product.wxs",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<Wix xmlns=\"http://schemas.microsoft.com/wix/2006/wi\"\r\n     xmlns:util=\"http://schemas.microsoft.com/wix/UtilExtension\">\r\n\r\n   <Product Id=\"1A9C2C21-2701-42D2-0000-992E73C12700\" Name=\"Revit IFC 2027\" Language=\"1033\" Version=\"27.0.1.0\" Manufacturer=\"Autodesk\" UpgradeCode=\"1A9C2C21-27B8-42D2-0000-992E73C11B3F\">\r\n      <Package InstallerVersion=\"200\" Compressed=\"yes\" InstallScope=\"perMachine\" Platform=\"x64\" />\r\n\r\n      <MajorUpgrade DowngradeErrorMessage=\"A newer version of [ProductName] is already installed.\" />\r\n      <MediaTemplate EmbedCab=\"yes\"/>\r\n      <UI>\r\n         <UIRef Id=\"WixUI_InstallDir\" />\r\n         <Publish Dialog=\"ExitDialog\" Control=\"Finish\" Event=\"DoAction\" Value=\"LaunchFile\" Order=\"1\">1</Publish>\r\n      </UI>\r\n      <Property Id=\"WIXUI_INSTALLDIR\" Value =\"INSTALLDIR\"/>\r\n\r\n      <WixVariable Id=\"WixUILicenseRtf\" Value=\"$(var.ProjectDir)..\\Program Files to Install\\LICENSE.rtf\"></WixVariable>\r\n      <WixVariable Id=\"WixUIBannerBmp\" Value=\"$(var.ProjectDir)..\\Program Files to Install\\Autodesk Logo.bmp\" />\r\n      <WixVariable Id=\"WixUIDialogBmp\" Value=\"$(var.ProjectDir)..\\Program Files to Install\\Adsk_sidebar_501x314.jpg\" />\r\n      <WixVariable Id=\"WixUIDefUserDefTxt\" Value=\"$(var.ProjectDir)..\\Program Files to Install\\DefaultUserDefinedParameterSets.txt\"></WixVariable>\r\n      <WixVariable Id=\"WixUICOBieUserDefTxt\" Value=\"$(var.ProjectDir)..\\Program Files to Install\\IFC2x3 Extended FM HandOver View.txt\"></WixVariable>\r\n\r\n      <Feature Id=\"ProductFeature\" Title=\"Revit IFC 2027\" Level=\"1\" ConfigurableDirectory='INSTALLDIR'>\r\n         <ComponentGroupRef Id=\"ProductComponents\" />\r\n         <ComponentGroupRef Id=\"ProductResourceComponents\" />\r\n         <ComponentGroupRef Id=\"ProductFRFiles\" />\r\n         <ComponentGroupRef Id=\"ProductDEFiles\" />\r\n         <?ifdef ForNavisworks2019?>\r\n            <ComponentGroupRef Id=\"AddinComponents\"  />\r\n            <ComponentGroupRef Id=\"AddinComponentsLT\"/>\r\n         <?else?>\r\n            <ComponentGroupRef Id=\"ProductContents\" />\r\n            <ComponentGroupRef Id=\"AddinManifest\" />\r\n         <?endif?>\r\n      </Feature>\r\n      <Feature Id=\"ProductDocumentation\" Title=\"Revit IFC Documentation\" Level=\"1000\" ConfigurableDirectory='INSTALLRESOURCE'>\r\n         <ComponentGroupRef Id=\"ProductResourceComponents\" />\r\n      </Feature>\r\n\r\n      <Property Id='IEXPLORE' Value='Explorer.exe'/>\r\n      <CustomAction Id='LaunchFile' Property='IEXPLORE' ExeCommand='[INSTALLRESOURCE]ADSKIFCExporterHelp.htm' Return='asyncNoWait' />\r\n\r\n   </Product>\r\n\r\n   <?ifdef ForNavisworks2019 ?>\r\n      <Fragment>\r\n         <Directory Id=\"TARGETDIR\" Name=\"SourceDir\">\r\n            <Directory Id=\"ProgramFilesFolder\">\r\n               <Directory Id=\"INSTALLDIR\" Name=\"Revit IFC 2027\">\r\n                  <Directory Id=\"INSTALLRESOURCE\" Name=\"Resource\" />\r\n                  <Directory Id=\"INSTALLFRUI\" Name=\"fr\" />\r\n                  <Directory Id=\"INSTALLDEUI\" Name=\"de\" />\r\n               </Directory>\r\n            </Directory>\r\n\r\n            <Directory Id=\"ProgramFiles64Folder\">\r\n               <Directory Id=\"DIR_ADSK\" Name=\"Autodesk\">\r\n                  <Directory Id=\"DIR_REVIT\" Name=\"Revit\">\r\n                     <Directory Id=\"DIR_ADDINS\" Name=\"Addins\">\r\n                        <Directory Id=\"DIR_Addins\" Name=\"2027\"/>\r\n                     </Directory>\r\n                  </Directory>\r\n                  <Directory Id=\"DIR_REVIT_LT\" Name=\"RevitLT\">\r\n                     <Directory Id=\"DIR_ADDINS_LT\" Name=\"Addins\">\r\n                        <Directory Id=\"DIR_Addins_LT\" Name=\"2027\"/>\r\n                     </Directory>\r\n                  </Directory>\r\n               </Directory>\r\n            </Directory>\r\n         </Directory>\r\n      </Fragment>\r\n   <?else?>\r\n      <Fragment>\r\n         <Directory Id=\"TARGETDIR\" Name=\"SourceDir\">\r\n            <Directory Id=\"CommonAppDataFolder\" Name=\"MyAppDataFolder\">\r\n               <Directory Id=\"DIR_ADSK\" Name=\"Autodesk\">\r\n                  <Directory Id=\"DIR_PLUGINS\" Name=\"ApplicationPlugins\">\r\n                     <Directory Id=\"DIR_PACKAGE\" Name=\"IFC 2027.bundle\">\r\n                        <Directory Id=\"DIR_Contents\" Name=\"Contents\">\r\n                          <Directory Id=\"INSTALLDIR\" Name=\"2027\">\r\n                            <Directory Id=\"INSTALLRESOURCE\" Name=\"Resource\" />\r\n                            <Directory Id=\"INSTALLFRUI\" Name=\"fr\" />\r\n                            <Directory Id=\"INSTALLDEUI\" Name=\"de\" />\r\n                          </Directory>\r\n                        </Directory>\r\n                     </Directory>\r\n                  </Directory>\r\n               </Directory>\r\n            </Directory>\r\n            <Directory Id=\"ProgramFiles64Folder\">\r\n               <Directory Id=\"DIR_ADSK_PF\" Name=\"Autodesk\">\r\n                  <Directory Id=\"DIR_REVIT_PF\" Name=\"Revit\">\r\n                     <Directory Id=\"DIR_ADDINS_PF\" Name=\"Addins\">\r\n                        <Directory Id=\"DIR_Addins_2027\" Name=\"2027\"/>\r\n                     </Directory>\r\n                  </Directory>\r\n               </Directory>\r\n            </Directory>\r\n         </Directory>\r\n      </Fragment>\r\n   <?endif?>\r\n\r\n   <Fragment>\r\n      <ComponentGroup Id=\"ProductComponents\" Directory=\"INSTALLDIR\">\r\n\r\n         <?ifdef OfficialBuild ?>\r\n            <Component Id = \"COMP_IFC_Export_DLL\" Guid=\"D59E44AA-89A3-4CD7-AD9C-8D4D7AC6026B\">\r\n               <File Id =\"FILE_Ifc_Export_DLL\" Name=\"Revit.IFC.Export.dll\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\Revit.IFC.Export.dll\" KeyPath=\"yes\" />\r\n            </Component>\r\n            <Component Id = \"COMP_IFC_Export_Sig\" Guid=\"2EE671F2-165C-4DD6-A216-672FB7567FE1\">\r\n               <File Id =\"FILE_Ifc_Export_Sig\" Name=\"Revit.IFC.Export.sig\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\Revit.IFC.Export.sig\" KeyPath=\"yes\" />\r\n            </Component>\r\n            <Component Id = \"COMP_IFC_Import_DLL\" Guid=\"E2F0633B-F323-430C-A368-76DBF939FD0D\">\r\n               <File Id =\"FILE_Ifc_Import_DLL\" Name=\"Revit.IFC.Import.dll\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\Revit.IFC.Import.dll\" KeyPath=\"yes\" />\r\n            </Component>\r\n            <Component Id = \"COMP_IFC_Import_Sig\" Guid=\"48EE6912-FCF6-4AE5-9A63-F5A98DFEE811\">\r\n               <File Id =\"FILE_Ifc_Import_Sig\" Name=\"Revit.IFC.Import.sig\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\Revit.IFC.Import.sig\" KeyPath=\"yes\" />\r\n            </Component>\r\n            <Component Id = \"COMP_IFC_ExternalUI_Sig\" Guid=\"3159B919-CD50-469D-8DDE-FE339CEBBC1C\">\r\n               <File Id =\"FILE_Ifc_ExternalUI_Sig\" Name=\"IFCExporterUIOverride.sig\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\IFCExporterUIOverride.sig\" KeyPath=\"yes\" />\r\n            </Component>\r\n            <Component Id = \"COMP_IFC_ExternalUI_DLL\" Guid=\"D7F89B58-029F-4062-B226-6F3D2EB7FE5D\">\r\n               <File Id =\"FILE_Ifc_ExternalUI_DLL\" Name=\"IFCExporterUIOverride.dll\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\IFCExporterUIOverride.dll\" KeyPath=\"yes\" />\r\n            </Component>\r\n            <Component Id = \"COMP_IFC_Common_DLL\" Guid=\"C7ED4A2C-DCB1-457E-968F-2DDE9993C1B6\">\r\n               <File Id =\"FILE_Ifc_Common_DLL\" Name=\"Revit.IFC.Common.dll\" Source=\"$(var.Revit.IFC.Common.TargetDir)Revit.IFC.Common.dll\" KeyPath=\"yes\" />\r\n            </Component>\r\n            <Component Id = \"COMP_IFC_Import_Core_DLL\" Guid=\"33DEBE0A-57D1-4BFC-BC99-FDA776B6224E\">\r\n               <File Id =\"FILE_Ifc_Import_Core_DLL\" Name=\"Revit.IFC.Import.Core.dll\" Source=\"$(var.Revit.IFC.Import.Core.TargetDir)Revit.IFC.Import.Core.dll\" KeyPath=\"yes\" />\r\n            </Component>\r\n            <Component Id = \"SteelCon_ASIFC_DLL\" Guid=\"449A672A-2500-4BE7-AAFE-6751B84A77A4\">\r\n               <File Id =\"FILE_SteelCon_ASIFC_DLL\" Name=\"Autodesk.SteelConnections.ASIFC.dll\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\Autodesk.SteelConnections.ASIFC.dll\" KeyPath=\"yes\" />\r\n            </Component>\r\n            <Component Id = \"SteelCon_ASIFC_Sig\" Guid=\"4DFE7524-0FC5-4931-809D-2F50D2C623A8\">\r\n               <File Id =\"FILE_SteelCon_ASIFC_Sig\" Name=\"Autodesk.SteelConnections.ASIFC.sig\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\Autodesk.SteelConnections.ASIFC.sig\" KeyPath=\"yes\" />\r\n            </Component>\r\n         <?else?>\r\n            <Component Id = \"COMP_IFC_Export_DLL\" Guid=\"D59E44AA-89A3-4CD7-AD9C-8D4D7AC6026B\">\r\n               <File Id =\"FILE_Ifc_Export_DLL\" Name=\"Revit.IFC.Export.dll\" Source=\"$(var.Revit.IFC.Export.TargetDir)Revit.IFC.Export.dll\" KeyPath=\"yes\" />\r\n            </Component>\r\n            <Component Id = \"COMP_IFC_Import_DLL\" Guid=\"E2F0633B-F323-430C-A368-76DBF939FD0D\">\r\n               <File Id =\"FILE_Ifc_Import_DLL\" Name=\"Revit.IFC.Import.dll\" Source=\"$(var.Revit.IFC.Import.TargetDir)Revit.IFC.Import.dll\" KeyPath=\"yes\" />\r\n            </Component>\r\n            <Component Id = \"COMP_IFC_ExternalUI_DLL\" Guid=\"D7F89B58-029F-4062-B226-6F3D2EB7FE5D\">\r\n               <File Id =\"FILE_Ifc_ExternalUI_DLL\" Name=\"IFCExporterUIOverride.dll\" Source=\"$(var.IFCExporterUIOverride.TargetDir)IFCExporterUIOverride.dll\" KeyPath=\"yes\" />\r\n            </Component>\r\n            <Component Id = \"COMP_IFC_Common_DLL\" Guid=\"C7ED4A2C-DCB1-457E-968F-2DDE9993C1B6\">\r\n               <File Id =\"FILE_Ifc_Common_DLL\" Name=\"Revit.IFC.Common.dll\" Source=\"$(var.Revit.IFC.Common.TargetDir)Revit.IFC.Common.dll\" KeyPath=\"yes\" />\r\n            </Component>\r\n            <Component Id = \"COMP_IFC_Import_Core_DLL\" Guid=\"33DEBE0A-57D1-4BFC-BC99-FDA776B6224E\">\r\n               <File Id =\"FILE_Ifc_Import_Core_DLL\" Name=\"Revit.IFC.Import.Core.dll\" Source=\"$(var.Revit.IFC.Import.Core.TargetDir)Revit.IFC.Import.Core.dll\" KeyPath=\"yes\" />\r\n            </Component>\r\n            <Component Id = \"SteelCon_ASIFC_DLL\" Guid=\"449A672A-2500-4BE7-AAFE-6751B84A77A4\">\r\n               <File Id =\"FILE_SteelCon_ASIFC_DLL\" Name=\"Autodesk.SteelConnections.ASIFC.dll\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\Autodesk.SteelConnections.ASIFC.dll\" KeyPath=\"yes\" />\r\n            </Component>\r\n         <?endif?>\r\n        \r\n         <Component Id = \"COMP_LICENSE_RTF\" Guid=\"9F0851DD-3A43-4D49-AC8C-8B8D2F394A91\">\r\n            <File Id =\"FILE_LICENSE_RTF\" Name=\"LICENSE.rtf\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\LICENSE.rtf\" KeyPath=\"yes\" />\r\n         </Component>\r\n         <Component Id = \"COMP_DEFAULT_USERDEF_TXT\" Guid=\"A269554D-2E77-4DA1-8942-EBF6CC297C09\">\r\n            <File Id =\"FILE_DEFAULT_USERDEF_TXT\" Name=\"DefaultUserDefinedParameterSets.txt\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\DefaultUserDefinedParameterSets.txt\" KeyPath=\"yes\" />\r\n         </Component>\r\n         <Component Id = \"COMP_COBIE_USERDEF_TXT\" Guid=\"2981DA7F-F990-409A-BFF3-18687A50CE7A\">\r\n            <File Id =\"FILE_COBIE_USERDEF_TXT\" Name=\"IFC2x3 COBie 2.4 Design Deliverable.txt\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\IFC2x3 COBie 2.4 Design Deliverable.txt\" KeyPath=\"yes\" />\r\n         </Component>\r\n         <Component Id = \"COMP_Antlr4Runtime_DLL\" Guid=\"EA19D64B-491C-47AD-A019-57E581734481\">\r\n            <File Id =\"FILE_Antlr4Runtime_DLL\" Name=\"Antlr4.Runtime.dll\" Source=\"$(var.Revit.IFC.Export.TargetDir)Antlr4.Runtime.dll\" KeyPath=\"yes\" />\r\n         </Component>\r\n         <Component Id = \"COMP_ICSharpCode_SharpZipLib_DLL\" Guid=\"B5E27E3B-E9AC-42D6-BFED-55C999B773B8\">\r\n            <File Id =\"FILE_ICSharpCode_SharpZipLib_DLL\" Name=\"ICSharpCode.SharpZipLib.dll\" Source=\"$(var.Revit.IFC.Import.TargetDir)ICSharpCode.SharpZipLib.DLL\" KeyPath=\"yes\" />\r\n         </Component>\r\n         <Component Id = \"COMP_IFC2X2ADD1_XSD\" Guid=\"3BC747BD-9F67-48C2-AC3E-74C9728F9BC5\">\r\n            <File Id =\"FILE_IFC2X2ADD1_XSD\" Name=\"IFC2X2_ADD1.xsd\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\IFC2X2_ADD1.xsd\" KeyPath=\"yes\" />\r\n         </Component>\r\n         <Component Id = \"COMP_IFC2X3TC1_XSD\" Guid=\"AAD139D2-7951-48A9-A466-2E711DFCF184\">\r\n            <File Id =\"FILE_IFC2X3TC1_XSD\" Name=\"IFC2X3_TC1.xsd\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\IFC2X3_TC1.xsd\" KeyPath=\"yes\" />\r\n         </Component>\r\n         <Component Id = \"COMP_IFC4_XSD\" Guid=\"51B549A3-DCB2-412B-9D4D-1B72D901D2B3\">\r\n            <File Id =\"FILE_IFC4_XSD\" Name=\"IFC4.xsd\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\IFC4.xsd\" KeyPath=\"yes\" />\r\n         </Component>\r\n         <Component Id = \"COMP_IFC4RV_XSD\" Guid=\"C23C0681-71CE-44B2-9E22-F0DF87587C1E\">\r\n            <File Id =\"FILE_IFC4RV_XSD\" Name=\"IFC4RV.xsd\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\IFC4RV.xsd\" KeyPath=\"yes\" />\r\n         </Component>\r\n         <Component Id = \"COMP_IFC4X3_XSD\" Guid=\"9531BB44-C7E8-4EEE-AF26-6EBFB5562711\">\r\n            <File Id =\"FILE_IFC4X3_XSD\" Name=\"IFC4X3.xsd\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\IFC4X3.xsd\" KeyPath=\"yes\" />\r\n         </Component>\r\n         <Component Id = \"COMP_IFC_Shared_Parameters_RevitIFCBuiltIn_ALL_TXT\" Guid=\"BD6EB78A-7AED-40C3-9B24-AA74652A3C25\">\r\n            <File Id =\"FILE_IFC_Shared_Parameters_RevitIFCBuiltIn_ALL\" Name=\"IFC Shared Parameters-RevitIFCBuiltIn_ALL.txt\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\IFC Shared Parameters-RevitIFCBuiltIn_ALL.txt\" KeyPath=\"yes\" />\r\n         </Component>\r\n         <Component Id = \"COMP_IFC_Shared_Parameters_RevitIFCBuiltIn_TYPE_ALL_TXT\" Guid=\"FF5BBFF3-033E-4742-8EAE-5BEAE4FF8C81\">\r\n            <File Id =\"FILE_IFC_Shared_Parameters_RevitIFCBuiltIn_TYPE_ALL\" Name=\"IFC Shared Parameters-RevitIFCBuiltIn-Type_ALL.txt\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\IFC Shared Parameters-RevitIFCBuiltIn-Type_ALL.txt\" KeyPath=\"yes\" />\r\n         </Component>\r\n            <Component Id = \"COMP_IFCCertifiedEntitiesAndPSets_JSON\" Guid=\"D7609AF6-AF1B-4190-BE0A-60158CDFDE80\">\r\n            <File Id =\"FILE_IFCCertifiedEntitiesAndPSets_JSON\" Name=\"IFCCertifiedEntitiesAndPSets.json\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\IFCCertifiedEntitiesAndPSets.json\" KeyPath=\"yes\" />\r\n         </Component>\r\n\t\t <Component Id = \"COMP_IFCSG_UserDefinedPsets\" Guid=\"292936D3-1C6E-47A5-8593-D9278E546811\">\r\n          <File Id=\"FILE_IFCSG_UserDefinedPsets\" Name=\"IFC-SG Property Mapping Export.txt\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\IFC-SG Property Mapping Export.txt\" KeyPath=\"yes\" />\r\n       </Component>\r\n      </ComponentGroup>\r\n      \r\n      <?ifndef ForNavisworks2019?>\r\n         <ComponentGroup Id=\"ProductContents\" Directory=\"DIR_PACKAGE\">\r\n           <Component Id = \"COMP_CONTENTS\" Guid=\"A7ED8317-C069-477E-967F-02432B181AAE\">\r\n             <File Id =\"FILE_CONTENTS\" Name=\"PackageContents.xml\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\bundle\\PackageContents.xml\" KeyPath=\"yes\" />\r\n           </Component>\r\n         </ComponentGroup>\r\n\r\n         <ComponentGroup Id=\"AddinManifest\" Directory=\"DIR_Addins_2027\">\r\n            <Component Id = \"COMP_IFC_Addin_manifest\" Guid=\"EC8783CA-DAE8-4233-B714-BB16B5BDBAC3\" Win64=\"yes\">\r\n               <File Id =\"FILE_Export_manifest\" Name=\"Revit.IFC.addin\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\Revit.IFC.addin\" KeyPath=\"yes\" />\r\n               <util:XmlFile Id=\"SetKeyUI\"\r\n                  Action=\"setValue\"\r\n                  ElementPath=\"RevitAddIns/AddIn[\\[]position()=1[\\]]/Assembly\"\r\n                  Value=\"[INSTALLDIR]IFCExporterUIOverride.dll\"\r\n                  File=\"[DIR_Addins_2027]Revit.IFC.addin\"\r\n                  SelectionLanguage=\"XPath\"\r\n                  Sequence=\"1\" />\r\n               <util:XmlFile Id=\"SetKeyExport\"\r\n                  Action=\"setValue\"\r\n                  ElementPath=\"RevitAddIns/AddIn[\\[]position()=2[\\]]/Assembly\"\r\n                  Value=\"[INSTALLDIR]Revit.IFC.Export.dll\"\r\n                  File=\"[DIR_Addins_2027]Revit.IFC.addin\"\r\n                  SelectionLanguage=\"XPath\"\r\n                  Sequence=\"1\" />\r\n               <util:XmlFile Id=\"SetKeyImport\"\r\n                  Action=\"setValue\"\r\n                  ElementPath=\"RevitAddIns/AddIn[\\[]position()=3[\\]]/Assembly\"\r\n                  Value=\"[INSTALLDIR]Revit.IFC.Import.dll\"\r\n                  File=\"[DIR_Addins_2027]Revit.IFC.addin\"\r\n                  SelectionLanguage=\"XPath\"\r\n                  Sequence=\"1\" />\r\n            </Component>\r\n         </ComponentGroup>\r\n      <?endif?>\r\n\r\n      <ComponentGroup Id=\"ProductResourceComponents\" Directory=\"INSTALLRESOURCE\">\r\n         <Component Id = \"COMP_HELP_FILE\" Guid=\"D6D4F404-001B-4B9B-9EA6-F0480FBCF65A\">\r\n            <File Id =\"FILE_HELP_FILE\" Name=\"ADSKIFCExporterHelp.htm\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\bundle\\Contents\\Resources\\ADSKIFCExporterHelp.htm\" KeyPath=\"yes\" />\r\n         </Component>\r\n         <Component Id = \"COMP_IFC_PNG\" Guid=\"444146E3-E660-4B11-8C79-654390CDC4BA\">\r\n            <File Id =\"FILE_IFC_PNG\" Name=\"IFCExporter.png\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\bundle\\Contents\\Resources\\IFCExporter.png\" KeyPath=\"yes\" />\r\n         </Component>\r\n         <Component Id = \"COMP_IFC_32_PNG\" Guid=\"DDAB963F-7F33-47A0-8E80-63FB244D5868\">\r\n            <File Id =\"FILE_IFC_32_PNG\" Name=\"IFCExporter_32.png\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\bundle\\Contents\\Resources\\IFCExporter_32.png\" KeyPath=\"yes\" />\r\n         </Component>\r\n         <Component Id = \"COMP_IFC_16_PNG\" Guid=\"E6CF83A5-A19C-4190-9A88-D54C390A6971\">\r\n            <File Id =\"FILE_IFC_16_PNG\" Name=\"IFCExporter_16.png\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\bundle\\Contents\\Resources\\IFCExporter_16.png\" KeyPath=\"yes\" />\r\n         </Component>\r\n         <Component Id = \"COMP_IFC4RV_A_CERT\" Guid=\"EDC0912A-5AA0-44D6-8272-E8BBB4A99B3B\">\r\n            <File Id =\"FILE_IFC4RV_A_CERT\" Name=\"Software Certification Certificate Revit - Architectural export ER.png\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\bundle\\Contents\\Resources\\Software Certification Certificate Revit - Architectural export ER.png\" KeyPath=\"yes\" />\r\n         </Component>\r\n         <Component Id = \"COMP_IFC4RV_S_CERT\" Guid=\"0D2A0278-2D37-4C20-89C0-5D68AD4A06B3\">\r\n            <File Id =\"FILE_IFC4RV_S_CERT\" Name=\"Software Certification Certificate Revit - Structural export ER.png\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\bundle\\Contents\\Resources\\Software Certification Certificate Revit - Structural export ER.png\" KeyPath=\"yes\" />\r\n         </Component>\r\n      </ComponentGroup>\r\n\r\n      <ComponentGroup Id=\"ProductFRFiles\" Directory=\"INSTALLFRUI\">\r\n         <Component Id = \"COMP_IFC_ResourceFR_DLL\" Guid=\"ACC9C313-F8EF-4DBB-A0DE-55D662E4857D\">\r\n            <File Id =\"FILE_Ifc_ResourceFR_DLL\" Name=\"IFCExporterUIOverride.resources.dll\" Source=\"$(var.IFCExporterUIOverride.TargetDir)fr\\IFCExporterUIOverride.resources.dll\" KeyPath=\"yes\" />\r\n         </Component>\r\n      </ComponentGroup>\r\n      <ComponentGroup Id=\"ProductDEFiles\" Directory=\"INSTALLDEUI\">\r\n         <Component Id = \"COMP_IFC_ResourceDE_DLL\" Guid=\"23BD267A-652F-473A-8DF6-6302C7D14D54\">\r\n            <File Id =\"FILE_Ifc_ResourceDE_DLL\" Name=\"IFCExporterUIOverride.resources.dll\" Source=\"$(var.IFCExporterUIOverride.TargetDir)de\\IFCExporterUIOverride.resources.dll\" KeyPath=\"yes\" />\r\n         </Component>\r\n      </ComponentGroup>\r\n\r\n      <?ifdef ForNavisworks2019?>\r\n         <ComponentGroup Id=\"AddinComponents\" Directory=\"DIR_Addins\">\r\n            <Component Id = \"COMP_IFC_Addin_manifest\" Guid=\"EC8783CA-DAE8-4233-B714-BB16B5BDBAC3\">\r\n               <File Id =\"FILE_Export_manifest\" Name=\"Revit.IFC.addin\" Source=\"$(var.ProjectDir)..\\Program Files to Install\\Revit.IFC.addin\" KeyPath=\"yes\" />\r\n               <util:XmlFile Id=\"SetKeyUI\"\r\n                  Action=\"setValue\"\r\n                  ElementPath=\"RevitAddIns/AddIn[\\[]position()=1[\\]]/Assembly\"\r\n                  Value=\"[INSTALLDIR]IFCExporterUIOverride.dll\"\r\n                  File=\"[#FILE_Export_manifest]\"\r\n                  SelectionLanguage=\"XPath\"\r\n                  Sequence=\"1\" />\r\n               <util:XmlFile Id=\"SetKeyExport\"\r\n                  Action=\"setValue\"\r\n                  ElementPath=\"RevitAddIns/AddIn[\\[]position()=2[\\]]/Assembly\"\r\n                  Value=\"[INSTALLDIR]Revit.IFC.Export.dll\"\r\n                  File=\"[#FILE_Export_manifest]\"\r\n                  SelectionLanguage=\"XPath\"\r\n                  Sequence=\"1\" />\r\n               <util:XmlFile Id=\"SetKeyImport\"\r\n                  Action=\"setValue\"\r\n                  ElementPath=\"RevitAddIns/AddIn[\\[]position()=3[\\]]/Assembly\"\r\n                  Value=\"[INSTALLDIR]Revit.IFC.Import.dll\"\r\n                  File=\"[#FILE_Export_manifest]\"\r\n                  SelectionLanguage=\"XPath\"\r\n                  Sequence=\"1\" />\r\n            </Component>\r\n         </ComponentGroup>\r\n\r\n         <!-- Wix doesn't allow the same file to be installed twice.  As such, we must copy the .addin into the RevitLT addins directory.\r\n         Note that it copies the installed file, before the file modification from util:XmlFile, so that must be duplicated. -->\r\n         <ComponentGroup Id=\"AddinComponentsLT\" Directory=\"DIR_Addins_LT\">\r\n            <Component Id = \"COMP_IFC_External_Addin_manifest_LT\" Guid=\"5BA55F42-2545-4056-8050-B73FA6E6E522\">\r\n               <CopyFile Id=\"CopyAddin\" FileId =\"FILE_Export_manifest\" DestinationProperty=\"DIR_Addins_LT\" />\r\n               <util:XmlFile Id=\"SetKeyUI_LT\"\r\n                  Action=\"setValue\"\r\n                  ElementPath=\"RevitAddIns/AddIn[\\[]position()=1[\\]]/Assembly\"\r\n                  Value=\"[INSTALLDIR]IFCExporterUIOverride.dll\"\r\n                  File=\"[DIR_Addins_LT]Revit.IFC.addin\"\r\n                  SelectionLanguage=\"XPath\"\r\n                  Sequence=\"1\" />\r\n            </Component>\r\n         </ComponentGroup>\r\n      <?endif?>\r\n   </Fragment>\r\n</Wix>"
  },
  {
    "path": "Install/RevitIFCSetupWix/RevitIFCSetupWix.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProjectGuid>{E9A0C4B1-4E40-49BA-92E8-62D7D1057A83}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>RevitIFCSetupWix</RootNamespace>\r\n    <AssemblyName>RevitIFCSetupWix</AssemblyName>\r\n    <TargetFrameworkVersion>v4.7</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <SccAuxPath />\r\n    <TargetFrameworkProfile />\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <PlatformTarget>AnyCPU</PlatformTarget>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <PlatformTarget>AnyCPU</PlatformTarget>\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup>\r\n    <StartupObject />\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"buildInstaller.bat\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"Product.wxs\">\r\n      <SubType>Designer</SubType>\r\n    </Content>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Folder Include=\"Properties\\\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\Source\\IFCExporterUIOverride\\IFCExporterUIOverride.csproj\">\r\n      <Project>{bf694550-5beb-4dcf-8ec2-a5904690dc17}</Project>\r\n      <Name>IFCExporterUIOverride</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Source\\Revit.IFC.Common\\Revit.IFC.Common.csproj\">\r\n      <Project>{032ea4dc-181f-4453-9f93-e08de1c07d95}</Project>\r\n      <Name>Revit.IFC.Common</Name>\r\n      <Private>False</Private>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Source\\Revit.IFC.Export\\Revit.IFC.Export.csproj\">\r\n      <Project>{bce5141a-291b-4cd8-a69b-7b9345aa00e9}</Project>\r\n      <Name>Revit.IFC.Export</Name>\r\n      <Private>False</Private>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Source\\Revit.IFC.Import\\Revit.IFC.Import.csproj\">\r\n      <Project>{7f987d09-9716-4f50-ade0-278e4b537101}</Project>\r\n      <Name>Revit.IFC.Import</Name>\r\n      <Private>False</Private>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <PropertyGroup>\r\n    <PostBuildEvent>call $(ProjectDir)buildInstaller.bat $(SolutionDir) $(ProjectDir)</PostBuildEvent>\r\n  </PropertyGroup>\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "Install/RevitIFCSetupWix/RevitIFCSetupWix.wixproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\r\n    <ProductVersion>3.8</ProductVersion>\r\n    <ProjectGuid>7dfbd495-c588-4c7b-b8f6-5b793adb06f2</ProjectGuid>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <OutputName>IFC for Revit 2027.0.1.0</OutputName>\r\n    <OutputType>Package</OutputType>\r\n    <WixTargetsPath Condition=\" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' \">$(MSBuildExtensionsPath32)\\Microsoft\\WiX\\v3.x\\Wix.targets</WixTargetsPath>\r\n    <WixTargetsPath Condition=\" '$(WixTargetsPath)' == '' \">$(MSBuildExtensionsPath)\\Microsoft\\WiX\\v3.x\\Wix.targets</WixTargetsPath>\r\n    <RunPostBuildEvent>Always</RunPostBuildEvent>\r\n    <SccProjectName>Perforce Project</SccProjectName>\r\n    <SccProvider>MSSCCI:Perforce SCM</SccProvider>\r\n    <SccAuxPath />\r\n    <SccLocalPath>.</SccLocalPath>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\r\n    <OutputPath>bin\\</OutputPath>\r\n    <IntermediateOutputPath>obj\\$(Configuration)\\</IntermediateOutputPath>\r\n    <DefineConstants>Debug</DefineConstants>\r\n    <SuppressAllWarnings>False</SuppressAllWarnings>\r\n    <Pedantic>True</Pedantic>\r\n    <SuppressPdbOutput>True</SuppressPdbOutput>\r\n    <WixVariables>\r\n    </WixVariables>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\r\n    <OutputPath>$(SolutionDir)$(Configuration)$(PlatformName)\\</OutputPath>\r\n    <IntermediateOutputPath>obj\\$(Configuration)\\</IntermediateOutputPath>\r\n    <DefineConstants>_OfficialBuild=true; _ForNavisworks2019=true</DefineConstants>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Product.wxs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <WixExtension Include=\"WixUIExtension\">\r\n      <HintPath>$(WixExtDir)\\WixUIExtension.dll</HintPath>\r\n      <Name>WixUIExtension</Name>\r\n    </WixExtension>\r\n    <WixExtension Include=\"WixUtilExtension\">\r\n      <HintPath>$(WixExtDir)\\WixUtilExtension.dll</HintPath>\r\n      <Name>WixUtilExtension</Name>\r\n    </WixExtension>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"..\\Program Files to Install\\bundle\\PackageContents.xml\">\r\n      <Link>PackageContents.xml</Link>\r\n    </Content>\r\n    <Content Include=\"buildInstaller.bat\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\Source\\IFCExporterUIOverride\\IFCExporterUIOverride.csproj\">\r\n      <Name>IFCExporterUIOverride</Name>\r\n      <Project>{bf694550-5beb-4dcf-8ec2-a5904690dc17}</Project>\r\n      <Private>True</Private>\r\n      <DoNotHarvest>True</DoNotHarvest>\r\n      <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>\r\n      <RefTargetDir>INSTALLFOLDER</RefTargetDir>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Source\\Revit.IFC.Common\\Revit.IFC.Common.csproj\">\r\n      <Name>Revit.IFC.Common</Name>\r\n      <Project>{032ea4dc-181f-4453-9f93-e08de1c07d95}</Project>\r\n      <Private>True</Private>\r\n      <DoNotHarvest>True</DoNotHarvest>\r\n      <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>\r\n      <RefTargetDir>INSTALLFOLDER</RefTargetDir>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Source\\Revit.IFC.Export\\Revit.IFC.Export.csproj\">\r\n      <Name>Revit.IFC.Export</Name>\r\n      <Project>{bce5141a-291b-4cd8-a69b-7b9345aa00e9}</Project>\r\n      <Private>True</Private>\r\n      <DoNotHarvest>True</DoNotHarvest>\r\n      <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>\r\n      <RefTargetDir>INSTALLFOLDER</RefTargetDir>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Source\\Revit.IFC.Import\\Revit.IFC.Import.csproj\">\r\n      <Name>Revit.IFC.Import</Name>\r\n      <Project>{7f987d09-9716-4f50-ade0-278e4b537101}</Project>\r\n      <Private>True</Private>\r\n      <DoNotHarvest>True</DoNotHarvest>\r\n      <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>\r\n      <RefTargetDir>INSTALLFOLDER</RefTargetDir>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Source\\Revit.IFC.Import.Core\\Revit.IFC.Import.Core.csproj\">\r\n      <Name>Revit.IFC.Import.Core</Name>\r\n      <Project>{C0B3C0DC-58EE-4876-9ACD-A0A8C82E92B4}</Project>\r\n      <Private>True</Private>\r\n      <DoNotHarvest>True</DoNotHarvest>\r\n      <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>\r\n      <RefTargetDir>INSTALLFOLDER</RefTargetDir>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(WixTargetsPath)\" />\r\n  <PropertyGroup>\r\n    <PreBuildEvent />\r\n  </PropertyGroup>\r\n  <PropertyGroup>\r\n    <PostBuildEvent />\r\n  </PropertyGroup>\r\n  <!--\r\n\tTo modify your build process, add your task inside one of the targets below and uncomment it.\r\n\tOther similar extension points exist, see Wix.targets.\r\n\t<Target Name=\"BeforeBuild\">\r\n\t</Target>\r\n\t<Target Name=\"AfterBuild\">\r\n\t</Target>\r\n\t-->\r\n</Project>"
  },
  {
    "path": "Install/RevitIFCSetupWix/buildInstaller.bat",
    "content": "echo Build IFC installer\r\n\r\necho %1\r\necho %2\r\n\r\nset ThisBatFileRoot=%~dp0\r\nrem Set this path to your Wix bin directory.\r\nset WixRoot=%ThisBatFileRoot%..\\..\\..\\..\\..\\..\\ThirdParty\\Wix\\\r\n\r\nrem It is necessary to add the Wix bin directory to the system path temporarily to use the -ext flag below.\r\nSET PATH=%PATH%;%WixRoot%\r\n\r\ncandle.exe -dProjectDir=%2 -ext WixUtilExtension %2Product.wxs \r\nlight.exe -ext WixUtilExtension -out RevitIFC2027.0.1.msi product.wixobj -ext WixUIExtension\r\n\r\ncopy RevitIFC2027.0.1.msi %1..\\Releasex64\r\ndel RevitIFC2027.0.1.msi\r\n\r\necho %1..\\Releasex64\\RevitIFC2027.0.1.msi\r\n"
  },
  {
    "path": "README.md",
    "content": "# IFC for Revit and Navisworks (revit-ifc)\n\nThis is the .NET code used by Revit and Revit LT 2019 and later to support IFC. The open-source version overrides the standard version shipped with Revit and its updates. This contains the source code for Link IFC, IFC export, and the IFC export UI. This also works to improve Navisworks import.\n\n_An archive of the original SourceForge forums can be found [here](https://sourceforge.net/p/ifcexporter/discussion/)._\n\n***Note: The most current annual version and two previous versions are supported with fixes/changes. Older versions will not be supported.***\n\n## Releases\nThe latest addon downloads and Release Notes can be found here: [Releases](https://github.com/Autodesk/revit-ifc/releases). New versions of the addon, from 2023 and later, should also be available in the Autodesk Desktop App (ADA) as per your user and license settings.\n\n## Help\nLinks to multilingual versions of the Revit IFC Manual V2.0 can be found here: [Revit Blog](https://blogs.autodesk.com/revit/2022/02/09/now-available-revit-ifc-manual-version-2-0/)\n### Product Documentation (English)\n- [IFC in Revit 2024](https://help.autodesk.com/view/RVT/2024/ENU/?guid=GUID-6EB68CEC-6C17-4B16-A509-30537F666C1F)\n- [IFC in Revit 2023](https://help.autodesk.com/view/RVT/2023/ENU/?guid=GUID-6EB68CEC-6C17-4B16-A509-30537F666C1F)\n- [IFC in Revit 2022](https://help.autodesk.com/view/RVT/2022/ENU/?guid=GUID-6EB68CEC-6C17-4B16-A509-30537F666C1F)\n\n### Building the Solution\n1. **Open the Solution**\n   - Launch Visual Studio and open `Revit.IFC.sln`.\n   - Ensure you are using the correct branch for your Revit version (e.g., `Release_27.x.x` for Revit 2027).\n\n2. **Update Revit Library References**\n   - Set the correct paths for Revit DLL references based on your environment.\n   - The default Revit installation path is typically:\n     ```\n     C:\\Program Files\\Autodesk\\Revit 2027\n     ```\n\n3. **Restore NuGet Packages**\n   - Visual Studio should automatically restore all required NuGet packages.\n   - If not, open `Tools > NuGet Package Manager > Package Manager Console` and run:\n     ```powershell\n     Update-Package -reinstall\n     ```\n\n4. **Set Configuration and Build**\n   - In the toolbar, select the desired configuration (`Debug` or `Release`) and platform (`Any CPU`).\n   - Build the solution by navigating to `Build > Build Solution`.\n   - Verify that the build completes without errors.\n\n### Debugging the Solution\n1. **Set Up Debugging**  \n   - To debug the IFC exporter within Revit, you need to attach Visual Studio to the Revit process.\n\n2. **Prepare DLL for Debugging**  \n   - Build the solution in the `Debug` configuration.  \n   - Copy the resulting DLLs to the add-in folder. The default path is typically:  \n     ```\n     C:\\ProgramData\\Autodesk\\ApplicationPlugins\\IFC 2027.bundle\\Contents\\2027\n     ```\n\n3. **Launch Revit**  \n   - Start Revit.\n\n4. **Attach to Process**  \n   - In Visual Studio, go to `Debug > Attach to Process...`.  \n   - From the list of available processes, locate and select `Revit.exe`.  \n   - Click **Attach**.\n\n5. **Set Breakpoints**  \n   - Open the relevant source files in Visual Studio and set breakpoints to inspect the code during execution.  \n   - Entry points for common operations:  \n     - **Exporting IFC**: Use the `ExportIFC` method in `Exporter.cs`.  \n     - **Importing/Linking IFC**: Use the `ImportIFC` method in `Importer.cs`.  \n   - **Note**: For IFC import, much of the logic is processed internally by Revit and is not open-sourced.\n\n6. **Trigger the Code Path**  \n   - Perform actions in Revit to execute the code where breakpoints are set, such as exporting or linking an IFC file.\n   \n## Issue Submission Templates\nWhen submitting an Issue, users will be asked to choose between the following submission templates:\n- **Problem Report [PR]**: _is a \"bug\", error, or issue found during the use of any aspect of the IFC functionality._\n- **Enhancement Request [ENH]**: _a proposed change to improve functionality, user interface (UI), and/or experience (UX)_\n- **Inquiry [INQ]**: _a question about functionality and/or UI/UX but not a Problem or an Enhancement_\n\nThis will assist the development team with triaging and prioritizing reports.\n\n## Labels\nGitHub labels are used to classify the nature of the Issue and help developers group, sort, and prioritize them. <!-- The **Triage** label is automatically added when reporting an issue.--> Reporting users and staff can add or edit labels. To make the triage and reporting process faster and easier (may also mean getting your issues addressed with higher priority), please use the **Labels** to classify the nature of the Issue to the best of your knowledge.\n\n### Version Label\n- 2024\n- 2023\n- 2022\n- ... *(will expand as more versions are released)*\n\n### Component Labels\n- API\n- coordinate system\n- documentation\n- export \n- geometry \n- GUID\n- IFC mapping\n- import\n- parameters-properties \n- performance\n- UI/UX \n\nMore Labels of this type can be added as needed/requested by users and developers, but this should be a relatively simple list to make high-level sorting and identifying quicker and easier.\n\n### Status Labels\n(set by Autodesk Developers) \n- Rejected \n- In progress (a formal bug has been filed internally. No formal commitment on when/how)\n- Cannot reproduce (unable to reproduce the error on our side)\n- Duplicate (will try to link to similar Issues)\n- Feedback (additional feedback from the reporter is required)\n- Fixed \n- Triage (initial state of labeling and determining priority)\n\nIdeally, each Issue should include Version and Component labels from the reporting user. The Autodesk developers will verify and correct those labels if needed, as well as add a Status label. Developers may also add an internal Autodesk Jira number/link to an Issue, but this is for internal reference and tracking only and not accessible to the general public.\n\n## License\nThe Revit IFC open source uses the Library General Public License version 2.0 (LGPLv2). It relies on ANTLR 4, which uses the BSD license.\nIt also includes Autodesk.SteelConnections.ASIFC.DLL, which is a proprietary file owned by Autodesk and licensed under the Autodesk Terms of Use. By using this DLL, you agree to the Autodesk Terms of Use (https://www.autodesk.com/company/terms-of-use/en/general-terms) and the Autodesk Privacy Statement (https://www.autodesk.com/company/legal-notices-trademarks/privacy-statement). You may only use this DLL with the Revit IFC open-source project. Autodesk.SteelConnections.ASIFC.DLL is provided as-is.\n"
  },
  {
    "path": "Revit.IFC.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.8.34330.188\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FB920B86-AD03-499A-8FF2-13D3A56BC1C3}\") = \"Revit.IFC.Import\", \"Source\\Revit.IFC.Import\\Revit.IFC.Import.csproj\", \"{7F987D09-9716-4F50-ADE0-278E4B537101}\"\r\nEndProject\r\nProject(\"{FB920B86-AD03-499A-8FF2-13D3A56BC1C3}\") = \"Revit.IFC.Export\", \"Source\\Revit.IFC.Export\\Revit.IFC.Export.csproj\", \"{BCE5141A-291B-4CD8-A69B-7B9345AA00E9}\"\r\nEndProject\r\nProject(\"{FB920B86-AD03-499A-8FF2-13D3A56BC1C3}\") = \"Revit.IFC.Common\", \"Source\\Revit.IFC.Common\\Revit.IFC.Common.csproj\", \"{032EA4DC-181F-4453-9F93-E08DE1C07D95}\"\r\nEndProject\r\nProject(\"{FB920B86-AD03-499A-8FF2-13D3A56BC1C3}\") = \"IFCExporterUIOverride\", \"Source\\IFCExporterUIOverride\\IFCExporterUIOverride.csproj\", \"{BF694550-5BEB-4DCF-8EC2-A5904690DC17}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Install\", \"Install\", \"{88C55E9A-2767-48B7-A035-E3D864C4FF09}\"\r\nEndProject\r\nProject(\"{930C7802-8A8C-48F9-8165-68863BCCD9DD}\") = \"RevitIFCSetupWix\", \"Install\\RevitIFCSetupWix\\RevitIFCSetupWix.wixproj\", \"{7DFBD495-C588-4C7B-B8F6-5B793ADB06F2}\"\r\nEndProject\r\nProject(\"{FB920B86-AD03-499A-8FF2-13D3A56BC1C3}\") = \"RevitIFCTools\", \"Source\\RevitIFCTools\\RevitIFCTools.csproj\", \"{FFD592F6-DB2C-4E5D-9C38-9CCC9EABB3EA}\"\r\nEndProject\r\nProject(\"{FB920B86-AD03-499A-8FF2-13D3A56BC1C3}\") = \"Revit.IFC.Import.Core\", \"Source\\Revit.IFC.Import.Core\\Revit.IFC.Import.Core.csproj\", \"{B1E159B7-4B12-45A9-B83F-159E37798D44}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tDebug|Mixed Platforms = Debug|Mixed Platforms\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tDebug|x86 = Debug|x86\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\t\tRelease|Mixed Platforms = Release|Mixed Platforms\r\n\t\tRelease|x64 = Release|x64\r\n\t\tRelease|x86 = Release|x86\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{7F987D09-9716-4F50-ADE0-278E4B537101}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{7F987D09-9716-4F50-ADE0-278E4B537101}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{7F987D09-9716-4F50-ADE0-278E4B537101}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r\n\t\t{7F987D09-9716-4F50-ADE0-278E4B537101}.Debug|Mixed Platforms.Build.0 = Debug|x64\r\n\t\t{7F987D09-9716-4F50-ADE0-278E4B537101}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{7F987D09-9716-4F50-ADE0-278E4B537101}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{7F987D09-9716-4F50-ADE0-278E4B537101}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{7F987D09-9716-4F50-ADE0-278E4B537101}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{7F987D09-9716-4F50-ADE0-278E4B537101}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{7F987D09-9716-4F50-ADE0-278E4B537101}.Release|Mixed Platforms.ActiveCfg = Release|x64\r\n\t\t{7F987D09-9716-4F50-ADE0-278E4B537101}.Release|Mixed Platforms.Build.0 = Release|x64\r\n\t\t{7F987D09-9716-4F50-ADE0-278E4B537101}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{7F987D09-9716-4F50-ADE0-278E4B537101}.Release|x64.Build.0 = Release|x64\r\n\t\t{7F987D09-9716-4F50-ADE0-278E4B537101}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{BCE5141A-291B-4CD8-A69B-7B9345AA00E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BCE5141A-291B-4CD8-A69B-7B9345AA00E9}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BCE5141A-291B-4CD8-A69B-7B9345AA00E9}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r\n\t\t{BCE5141A-291B-4CD8-A69B-7B9345AA00E9}.Debug|Mixed Platforms.Build.0 = Debug|x64\r\n\t\t{BCE5141A-291B-4CD8-A69B-7B9345AA00E9}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{BCE5141A-291B-4CD8-A69B-7B9345AA00E9}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{BCE5141A-291B-4CD8-A69B-7B9345AA00E9}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{BCE5141A-291B-4CD8-A69B-7B9345AA00E9}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{BCE5141A-291B-4CD8-A69B-7B9345AA00E9}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{BCE5141A-291B-4CD8-A69B-7B9345AA00E9}.Release|Mixed Platforms.ActiveCfg = Release|x64\r\n\t\t{BCE5141A-291B-4CD8-A69B-7B9345AA00E9}.Release|Mixed Platforms.Build.0 = Release|x64\r\n\t\t{BCE5141A-291B-4CD8-A69B-7B9345AA00E9}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{BCE5141A-291B-4CD8-A69B-7B9345AA00E9}.Release|x64.Build.0 = Release|x64\r\n\t\t{BCE5141A-291B-4CD8-A69B-7B9345AA00E9}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{032EA4DC-181F-4453-9F93-E08DE1C07D95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{032EA4DC-181F-4453-9F93-E08DE1C07D95}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{032EA4DC-181F-4453-9F93-E08DE1C07D95}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r\n\t\t{032EA4DC-181F-4453-9F93-E08DE1C07D95}.Debug|Mixed Platforms.Build.0 = Debug|x64\r\n\t\t{032EA4DC-181F-4453-9F93-E08DE1C07D95}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{032EA4DC-181F-4453-9F93-E08DE1C07D95}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{032EA4DC-181F-4453-9F93-E08DE1C07D95}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{032EA4DC-181F-4453-9F93-E08DE1C07D95}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{032EA4DC-181F-4453-9F93-E08DE1C07D95}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{032EA4DC-181F-4453-9F93-E08DE1C07D95}.Release|Mixed Platforms.ActiveCfg = Release|x64\r\n\t\t{032EA4DC-181F-4453-9F93-E08DE1C07D95}.Release|Mixed Platforms.Build.0 = Release|x64\r\n\t\t{032EA4DC-181F-4453-9F93-E08DE1C07D95}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{032EA4DC-181F-4453-9F93-E08DE1C07D95}.Release|x64.Build.0 = Release|x64\r\n\t\t{032EA4DC-181F-4453-9F93-E08DE1C07D95}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{BF694550-5BEB-4DCF-8EC2-A5904690DC17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BF694550-5BEB-4DCF-8EC2-A5904690DC17}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BF694550-5BEB-4DCF-8EC2-A5904690DC17}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r\n\t\t{BF694550-5BEB-4DCF-8EC2-A5904690DC17}.Debug|Mixed Platforms.Build.0 = Debug|x64\r\n\t\t{BF694550-5BEB-4DCF-8EC2-A5904690DC17}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{BF694550-5BEB-4DCF-8EC2-A5904690DC17}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{BF694550-5BEB-4DCF-8EC2-A5904690DC17}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{BF694550-5BEB-4DCF-8EC2-A5904690DC17}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{BF694550-5BEB-4DCF-8EC2-A5904690DC17}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{BF694550-5BEB-4DCF-8EC2-A5904690DC17}.Release|Mixed Platforms.ActiveCfg = Release|x64\r\n\t\t{BF694550-5BEB-4DCF-8EC2-A5904690DC17}.Release|Mixed Platforms.Build.0 = Release|x64\r\n\t\t{BF694550-5BEB-4DCF-8EC2-A5904690DC17}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{BF694550-5BEB-4DCF-8EC2-A5904690DC17}.Release|x64.Build.0 = Release|x64\r\n\t\t{BF694550-5BEB-4DCF-8EC2-A5904690DC17}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{7DFBD495-C588-4C7B-B8F6-5B793ADB06F2}.Debug|Any CPU.ActiveCfg = Debug|x86\r\n\t\t{7DFBD495-C588-4C7B-B8F6-5B793ADB06F2}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\r\n\t\t{7DFBD495-C588-4C7B-B8F6-5B793ADB06F2}.Debug|x64.ActiveCfg = Debug|x86\r\n\t\t{7DFBD495-C588-4C7B-B8F6-5B793ADB06F2}.Debug|x86.ActiveCfg = Debug|x86\r\n\t\t{7DFBD495-C588-4C7B-B8F6-5B793ADB06F2}.Debug|x86.Build.0 = Debug|x86\r\n\t\t{7DFBD495-C588-4C7B-B8F6-5B793ADB06F2}.Release|Any CPU.ActiveCfg = Release|x86\r\n\t\t{7DFBD495-C588-4C7B-B8F6-5B793ADB06F2}.Release|Mixed Platforms.ActiveCfg = Release|x86\r\n\t\t{7DFBD495-C588-4C7B-B8F6-5B793ADB06F2}.Release|x64.ActiveCfg = Release|x86\r\n\t\t{7DFBD495-C588-4C7B-B8F6-5B793ADB06F2}.Release|x86.ActiveCfg = Release|x86\r\n\t\t{7DFBD495-C588-4C7B-B8F6-5B793ADB06F2}.Release|x86.Build.0 = Release|x86\r\n\t\t{FFD592F6-DB2C-4E5D-9C38-9CCC9EABB3EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{FFD592F6-DB2C-4E5D-9C38-9CCC9EABB3EA}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{FFD592F6-DB2C-4E5D-9C38-9CCC9EABB3EA}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r\n\t\t{FFD592F6-DB2C-4E5D-9C38-9CCC9EABB3EA}.Debug|Mixed Platforms.Build.0 = Debug|x64\r\n\t\t{FFD592F6-DB2C-4E5D-9C38-9CCC9EABB3EA}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{FFD592F6-DB2C-4E5D-9C38-9CCC9EABB3EA}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{FFD592F6-DB2C-4E5D-9C38-9CCC9EABB3EA}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{FFD592F6-DB2C-4E5D-9C38-9CCC9EABB3EA}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{FFD592F6-DB2C-4E5D-9C38-9CCC9EABB3EA}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{FFD592F6-DB2C-4E5D-9C38-9CCC9EABB3EA}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{FFD592F6-DB2C-4E5D-9C38-9CCC9EABB3EA}.Release|Mixed Platforms.ActiveCfg = Release|x64\r\n\t\t{FFD592F6-DB2C-4E5D-9C38-9CCC9EABB3EA}.Release|Mixed Platforms.Build.0 = Release|x64\r\n\t\t{FFD592F6-DB2C-4E5D-9C38-9CCC9EABB3EA}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{FFD592F6-DB2C-4E5D-9C38-9CCC9EABB3EA}.Release|x64.Build.0 = Release|x64\r\n\t\t{FFD592F6-DB2C-4E5D-9C38-9CCC9EABB3EA}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{FFD592F6-DB2C-4E5D-9C38-9CCC9EABB3EA}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{B1E159B7-4B12-45A9-B83F-159E37798D44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{B1E159B7-4B12-45A9-B83F-159E37798D44}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{B1E159B7-4B12-45A9-B83F-159E37798D44}.Debug|Mixed Platforms.ActiveCfg = Debug|x64\r\n\t\t{B1E159B7-4B12-45A9-B83F-159E37798D44}.Debug|Mixed Platforms.Build.0 = Debug|x64\r\n\t\t{B1E159B7-4B12-45A9-B83F-159E37798D44}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{B1E159B7-4B12-45A9-B83F-159E37798D44}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{B1E159B7-4B12-45A9-B83F-159E37798D44}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{B1E159B7-4B12-45A9-B83F-159E37798D44}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{B1E159B7-4B12-45A9-B83F-159E37798D44}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{B1E159B7-4B12-45A9-B83F-159E37798D44}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{B1E159B7-4B12-45A9-B83F-159E37798D44}.Release|Mixed Platforms.ActiveCfg = Release|x64\r\n\t\t{B1E159B7-4B12-45A9-B83F-159E37798D44}.Release|Mixed Platforms.Build.0 = Release|x64\r\n\t\t{B1E159B7-4B12-45A9-B83F-159E37798D44}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{B1E159B7-4B12-45A9-B83F-159E37798D44}.Release|x64.Build.0 = Release|x64\r\n\t\t{B1E159B7-4B12-45A9-B83F-159E37798D44}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{B1E159B7-4B12-45A9-B83F-159E37798D44}.Release|x86.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(NestedProjects) = preSolution\r\n\t\t{7DFBD495-C588-4C7B-B8F6-5B793ADB06F2} = {88C55E9A-2767-48B7-A035-E3D864C4FF09}\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {B668FD10-EBF0-4486-9314-7799D7850E32}\r\n\tEndGlobalSection\r\n\tGlobalSection(DPCodeReviewSolutionGUID) = preSolution\r\n\t\tDPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/Autodesk.IFC.Export.UI.addin",
    "content": "Content of this file is generated by CreateAddinFile.bat\nIt is copied to outdir in post build event"
  },
  {
    "path": "Source/IFCExporterUIOverride/COBieCompanyInfoTab.xaml",
    "content": "﻿<UserControl x:Class=\"BIM.IFC.Export.UI.COBieCompanyInfoTab\"\r\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n             xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \r\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \r\n             xmlns:local=\"clr-namespace:BIM.IFC.Export.UI\"\r\n             mc:Ignorable=\"d\" \r\n             d:DesignHeight=\"271\" d:DesignWidth=\"594\" >\r\n   <Grid>\r\n      <Grid.ColumnDefinitions>\r\n         <ColumnDefinition Width=\"184*\"/>\r\n         <ColumnDefinition Width=\"379*\"/>\r\n         <ColumnDefinition Width=\"31*\"/>\r\n      </Grid.ColumnDefinitions>\r\n      <Label x:Name=\"label_CompanyType\" Content=\"{x:Static p:Resources.CompanyType}\" HorizontalAlignment=\"Left\" Margin=\"10,10,0,0\" VerticalAlignment=\"Top\" Height=\"26\" Width=\"174\"/>\r\n      <Label x:Name=\"label_CompanyName\" Content=\"{x:Static p:Resources.CompanyName}\" HorizontalAlignment=\"Left\" Margin=\"10,35,0,0\" VerticalAlignment=\"Top\" Height=\"26\" Width=\"174\"/>\r\n      <Label x:Name=\"label_StreetAddress\" Content=\"{x:Static p:Resources.StreetAddress}\" HorizontalAlignment=\"Left\" Margin=\"10,60,0,0\" VerticalAlignment=\"Top\" Height=\"26\" Width=\"174\"/>\r\n      <Label x:Name=\"label_City\" Content=\"{x:Static p:Resources.City}\" HorizontalAlignment=\"Left\" Margin=\"10,85,0,0\" VerticalAlignment=\"Top\" Height=\"26\" Width=\"174\"/>\r\n      <Label x:Name=\"label_State\" Content=\"{x:Static p:Resources.State}\" HorizontalAlignment=\"Left\" Margin=\"10,110,0,0\" VerticalAlignment=\"Top\" Height=\"26\" Width=\"174\"/>\r\n      <Label x:Name=\"label_PostalCode\" Content=\"{x:Static p:Resources.PostalCode}\" HorizontalAlignment=\"Left\" Margin=\"10,135,0,0\" VerticalAlignment=\"Top\" Height=\"26\" Width=\"174\"/>\r\n      <Label x:Name=\"label_Country\" Content=\"{x:Static p:Resources.Country}\" HorizontalAlignment=\"Left\" Margin=\"10,160,0,0\" VerticalAlignment=\"Top\" Height=\"26\" Width=\"174\"/>\r\n      <Label x:Name=\"label_CompanyPhone\" Content=\"{x:Static p:Resources.CompanyPhone}\" HorizontalAlignment=\"Left\" Margin=\"10,185,0,0\" VerticalAlignment=\"Top\" Height=\"26\" Width=\"174\"/>\r\n      <Label x:Name=\"label_CompanyEmail\" Content=\"{x:Static p:Resources.CompanyEmail}\" HorizontalAlignment=\"Left\" Margin=\"10,210,0,0\" VerticalAlignment=\"Top\" Height=\"26\" Width=\"174\"/>\r\n      <TextBox x:Name=\"textBox_CompanyType\" Grid.Column=\"1\" Height=\"23\" Margin=\"10,10,2,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Text=\"example: [Company Type Classification Name]&lt;replace here with code&gt;\" FontStyle=\"Italic\" FontWeight=\"ExtraLight\" GotFocus=\"textBox_CompanyType_GotFocus\"/>\r\n      <TextBox x:Name=\"textBox_CompanyName\" Grid.Column=\"1\" Height=\"23\" Margin=\"10,35,2,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\"/>\r\n      <TextBox x:Name=\"textBox_StreetAddress\" Grid.Column=\"1\" Height=\"23\" Margin=\"10,60,2,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\"/>\r\n      <TextBox x:Name=\"textBox_City\" Grid.Column=\"1\" Height=\"23\" Margin=\"10,85,2,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\"/>\r\n      <TextBox x:Name=\"textBox_State\" Grid.Column=\"1\" Height=\"23\" Margin=\"10,110,2,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\"/>\r\n      <TextBox x:Name=\"textBox_PostalCode\" Grid.Column=\"1\" Height=\"23\" Margin=\"10,135,2,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\"/>\r\n      <TextBox x:Name=\"textBox_Country\" Grid.Column=\"1\" Height=\"23\" Margin=\"10,160,2,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\"/>\r\n      <TextBox x:Name=\"textBox_CompanyPhone\" Grid.Column=\"1\" Height=\"23\" Margin=\"10,185,2,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" LostFocus=\"textBox_CompanyPhone_LostFocus\" FontStyle=\"Italic\" FontWeight=\"ExtraLight\" Text=\"example: +1 (404) 123 4567\" GotFocus=\"textBox_CompanyPhone_GotFocus\"/>\r\n      <TextBox x:Name=\"textBox_CompanyEmail\" Grid.Column=\"1\" Height=\"23\" Margin=\"10,210,2,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Text=\"example: &lt;email name&gt;@&lt;address&gt;\" FontStyle=\"Italic\" FontWeight=\"ExtraLight\" GotFocus=\"textBox_CompanyEmail_GotFocus\" LostFocus=\"textBox_CompanyEmail_LostFocus\"/>\r\n      <TextBox x:Name=\"textBox_CompanyPhoneValidation\" Grid.Column=\"2\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"3,185,0,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Width=\"18\" IsEnabled=\"False\" Foreground=\"#FFFB0404\" FontWeight=\"Bold\" IsReadOnly=\"True\" AcceptsTab=\"True\" BorderThickness=\"0\"/>\r\n      <TextBox x:Name=\"textBox_CompanyEmailValidation\" Grid.Column=\"2\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"3,210,0,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Width=\"18\" Foreground=\"#FFFB0404\" FontWeight=\"Bold\" IsReadOnly=\"True\" AcceptsTab=\"True\" BorderThickness=\"0\" SelectionOpacity=\"-1\" IsEnabled=\"False\"/>\r\n      <!--<TextBox x:Name=\"textBox_TypeSource\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"35,35,0,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Width=\"365\" TextChanged=\"textBox_TypeSource_TextChanged\"/>-->\r\n      <!--<Button x:Name=\"button_TypeSource\" Content=\"Source ...\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Margin=\"324,12,0,0\" VerticalAlignment=\"Top\" Width=\"76\" Click=\"button_TypeSource_Click\"/>\r\n      <ComboBox x:Name=\"comboBox_CompanyType\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Margin=\"10,10,0,0\" VerticalAlignment=\"Top\" Width=\"306\"/>-->\r\n   </Grid>\r\n</UserControl>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/COBieCompanyInfoTab.xaml.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Data;\r\nusing System.Windows.Documents;\r\nusing System.Windows.Input;\r\nusing System.Windows.Media;\r\nusing System.Windows.Media.Imaging;\r\nusing System.Windows.Navigation;\r\nusing System.Windows.Shapes;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// Interaction logic for COBieCompanyInfoTab.xaml\r\n   /// </summary>\r\n   public partial class COBieCompanyInfoTab : UserControl\r\n   {\r\n      COBieCompanyInfo companyInfo;\r\n      public string CompanyInfoStr {\r\n         get\r\n         {\r\n            PopulateCompanyInfo();\r\n            return companyInfo.ToJsonString();\r\n         }\r\n      }\r\n\r\n      public COBieCompanyInfoTab(string compInfoStr)\r\n      {\r\n         InitializeComponent();\r\n         textBox_CompanyPhoneValidation.Visibility = Visibility.Hidden;\r\n         textBox_CompanyEmailValidation.Visibility = Visibility.Hidden;\r\n         textBox_CompanyName.Focus();\r\n         textBox_CompanyType.Text = \"example: [Company Type Classification Name]<replace here with code>\";\r\n\r\n         Autodesk.Revit.DB.ProjectInfo rvtProjectInfo = IFCCommandOverrideApplication.TheDocument.ProjectInformation;\r\n\r\n         if (!string.IsNullOrEmpty(compInfoStr))\r\n         {\r\n            companyInfo = new COBieCompanyInfo(compInfoStr);\r\n         }\r\n         else\r\n            companyInfo = new COBieCompanyInfo();\r\n\r\n         if (string.IsNullOrEmpty(companyInfo.CompanyName))\r\n            companyInfo.CompanyName = rvtProjectInfo.OrganizationName;\r\n\r\n         PopulatePage();\r\n      }\r\n\r\n      private void button_TypeSource_Click(object sender, RoutedEventArgs e)\r\n      {\r\n\r\n      }\r\n\r\n      private void textBox_TypeSource_TextChanged(object sender, TextChangedEventArgs e)\r\n      {\r\n      }\r\n\r\n      bool companyTypeVisited = false;\r\n      private void textBox_CompanyType_GotFocus(object sender, RoutedEventArgs e)\r\n      {\r\n         TextBox tb = sender as TextBox;\r\n         tb.Text = string.Empty;\r\n         tb.GotFocus -= textBox_CompanyType_GotFocus;\r\n         tb.FontStyle = FontStyles.Normal;\r\n         tb.FontWeight = FontWeights.Normal;\r\n         companyTypeVisited = true;\r\n      }\r\n\r\n      bool companyPhoneVisited = false;\r\n      private void textBox_CompanyPhone_GotFocus(object sender, RoutedEventArgs e)\r\n      {\r\n         TextBox tb = sender as TextBox;\r\n         tb.Text = string.Empty;\r\n         tb.GotFocus -= textBox_CompanyPhone_GotFocus;\r\n         tb.FontStyle = FontStyles.Normal;\r\n         tb.FontWeight = FontWeights.Normal;\r\n         companyPhoneVisited = true;\r\n      }\r\n\r\n      bool companyEmailVisited = false;\r\n      private void textBox_CompanyEmail_GotFocus(object sender, RoutedEventArgs e)\r\n      {\r\n         TextBox tb = sender as TextBox;\r\n         tb.Text = string.Empty;\r\n         tb.GotFocus -= textBox_CompanyEmail_GotFocus;\r\n         tb.FontStyle = FontStyles.Normal;\r\n         tb.FontWeight = FontWeights.Normal;\r\n         companyEmailVisited = true;  \r\n      }\r\n\r\n      private void textBox_CompanyPhone_LostFocus(object sender, RoutedEventArgs e)\r\n      {\r\n         TextBox tb = sender as TextBox;\r\n         if (string.IsNullOrEmpty(tb.Text))\r\n            return;\r\n         // Validate phone number format using regular expression\r\n         companyInfo.CompanyPhone = tb.Text;\r\n         ValidateCompanyPhone();\r\n      }\r\n\r\n      private void ValidateCompanyPhone()\r\n      {\r\n         if (!companyInfo.PhoneValidator())\r\n         {\r\n            textBox_CompanyPhoneValidation.Visibility = Visibility.Visible;\r\n            textBox_CompanyPhoneValidation.Text = \"!\";\r\n            textBox_CompanyPhoneValidation.FontWeight = FontWeights.ExtraBold;\r\n            textBox_CompanyPhoneValidation.FontSize = 14;\r\n            textBox_CompanyPhone.ToolTip = \"Phone number is not in a valid format!\";\r\n            textBox_CompanyPhone.Background = Brushes.Red;\r\n         }\r\n         else\r\n         {\r\n            textBox_CompanyPhoneValidation.Visibility = Visibility.Hidden;\r\n            textBox_CompanyPhoneValidation.Text = \"\";\r\n            textBox_CompanyPhone.ToolTip = \"\";\r\n            textBox_CompanyPhone.Background = null;\r\n         }\r\n      }\r\n\r\n      private void textBox_CompanyEmail_LostFocus(object sender, RoutedEventArgs e)\r\n      {\r\n         TextBox tb = sender as TextBox;\r\n         if (string.IsNullOrEmpty(tb.Text))\r\n            return;\r\n         // Validate email format using regular expression\r\n         companyInfo.CompanyEmail = tb.Text;\r\n         ValidateCompanyEmail();\r\n      }\r\n\r\n      private void ValidateCompanyEmail()\r\n      {\r\n         if (!companyInfo.EmailValidator())\r\n         {\r\n            textBox_CompanyEmailValidation.Visibility = Visibility.Visible;\r\n            textBox_CompanyEmailValidation.Text = \"!\";\r\n            textBox_CompanyEmailValidation.FontWeight = FontWeights.ExtraBold;\r\n            textBox_CompanyEmailValidation.FontSize = 14;\r\n            textBox_CompanyEmailValidation.ToolTip = \"Email address is not in a valid format!\";\r\n            textBox_CompanyEmail.Background = Brushes.Red;\r\n         }\r\n         else\r\n         {\r\n            textBox_CompanyEmailValidation.Visibility = Visibility.Hidden;\r\n            textBox_CompanyEmailValidation.Text = \"\";\r\n            textBox_CompanyEmail.ToolTip = \"\";\r\n            textBox_CompanyEmail.Background = null;\r\n         }\r\n      }\r\n\r\n      private void PopulateCompanyInfo()\r\n      {\r\n         companyInfo.CompanyType = companyTypeVisited? textBox_CompanyType.Text : \"\";\r\n         companyInfo.CompanyName = textBox_CompanyName.Text;\r\n         companyInfo.StreetAddress = textBox_StreetAddress.Text;\r\n         companyInfo.City = textBox_City.Text;\r\n         companyInfo.State_Region = textBox_State.Text;\r\n         companyInfo.PostalCode = textBox_PostalCode.Text;\r\n         companyInfo.Country = textBox_Country.Text;\r\n         companyInfo.CompanyPhone = companyPhoneVisited? textBox_CompanyPhone.Text : \"\";\r\n         companyInfo.CompanyEmail = companyEmailVisited? textBox_CompanyEmail.Text : \"\";\r\n      }\r\n\r\n      private void PopulatePage()\r\n      {\r\n         if (!string.IsNullOrEmpty(companyInfo.CompanyType))\r\n         {\r\n            textBox_CompanyType.Text = companyInfo.CompanyType;\r\n            textBox_CompanyType.GotFocus -= textBox_CompanyType_GotFocus;\r\n            textBox_CompanyType.FontStyle = FontStyles.Normal;\r\n            textBox_CompanyType.FontWeight = FontWeights.Normal;\r\n            companyTypeVisited = true;\r\n         }\r\n         textBox_CompanyName.Text = companyInfo.CompanyName;\r\n         textBox_StreetAddress.Text = companyInfo.StreetAddress;\r\n         textBox_City.Text = companyInfo.City;\r\n         textBox_State.Text = companyInfo.State_Region;\r\n         textBox_PostalCode.Text = companyInfo.PostalCode;\r\n         textBox_Country.Text = companyInfo.Country;\r\n         if (!string.IsNullOrEmpty(companyInfo.CompanyPhone))\r\n         {\r\n            textBox_CompanyPhone.Text = companyInfo.CompanyPhone;\r\n            textBox_CompanyPhone.GotFocus -= textBox_CompanyPhone_GotFocus;\r\n            textBox_CompanyPhone.FontStyle = FontStyles.Normal;\r\n            textBox_CompanyPhone.FontWeight = FontWeights.Normal;\r\n            companyPhoneVisited = true;\r\n            ValidateCompanyPhone();\r\n         }\r\n         if (!string.IsNullOrEmpty(companyInfo.CompanyEmail))\r\n         {\r\n            textBox_CompanyEmail.Text = companyInfo.CompanyEmail;\r\n            textBox_CompanyEmail.GotFocus -= textBox_CompanyEmail_GotFocus;\r\n            textBox_CompanyEmail.FontStyle = FontStyles.Normal;\r\n            textBox_CompanyEmail.FontWeight = FontWeights.Normal;\r\n            companyEmailVisited = true;\r\n            ValidateCompanyEmail();\r\n         }\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/COBieProjectInfoTab.xaml",
    "content": "﻿<UserControl x:Class=\"BIM.IFC.Export.UI.COBieProjectInfoTab\"\r\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n             xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \r\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \r\n             xmlns:local=\"clr-namespace:BIM.IFC.Export.UI\"\r\n             mc:Ignorable=\"d\" \r\n             d:DesignHeight=\"271\" d:DesignWidth=\"594\" >\r\n   <Grid>\r\n      <Grid.ColumnDefinitions>\r\n         <ColumnDefinition Width=\"92*\"/>\r\n         <ColumnDefinition Width=\"205*\"/>\r\n      </Grid.ColumnDefinitions>\r\n      <Label x:Name=\"label_BuildingName\" Content=\"{x:Static p:Resources.BuildingName}\" HorizontalAlignment=\"Left\" Margin=\"10,10,0,0\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\" Width=\"184\"/>\r\n      <Label x:Name=\"label_BuildingType\" Content=\"{x:Static p:Resources.BuildingType}\" HorizontalAlignment=\"Left\" Margin=\"10,35,0,0\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\" Width=\"179\"/>\r\n      <Label x:Name=\"label_BuildingDesc\" Content=\"{x:Static p:Resources.BuildingDescription}\" HorizontalAlignment=\"Left\" Margin=\"10,60,0,0\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\" Width=\"179\"/>\r\n      <Label x:Name=\"label_ProjectName\" Content=\"{x:Static p:Resources.ProjectName}\" HorizontalAlignment=\"Left\" Margin=\"10,85,0,0\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\" Width=\"179\"/>\r\n      <Label x:Name=\"label_ProjectDesc\" Content=\"{x:Static p:Resources.ProjectDescription}\" HorizontalAlignment=\"Left\" Margin=\"10,110,0,0\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\" Width=\"179\"/>\r\n      <Label x:Name=\"label_ProjectPhase\" Content=\"{x:Static p:Resources.ProjectPhase}\" HorizontalAlignment=\"Left\" Margin=\"10,135,0,0\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\" Width=\"179\"/>\r\n      <Label x:Name=\"label_SiteLocation\" Content=\"{x:Static p:Resources.SiteLocation}\" HorizontalAlignment=\"Left\" Margin=\"10,160,0,0\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\" Width=\"179\"/>\r\n      <Label x:Name=\"label_SiteDesc\" Content=\"{x:Static p:Resources.SiteDescription}\" HorizontalAlignment=\"Left\" Margin=\"10,185,0,0\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\" Width=\"179\"/>\r\n      <TextBox x:Name=\"textBox_BuildingName\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"10,10,0,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Width=\"390\"/>\r\n      <!--<TextBox x:Name=\"textBox_TypeSource\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"54,60,0,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Width=\"346\" TextChanged=\"textBox_TypeSource_TextChanged\"/>-->\r\n      <TextBox x:Name=\"textBox_BuildingDesc\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"10,60,0,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Width=\"390\"/>\r\n      <TextBox x:Name=\"textBox_ProjectName\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"10,85,0,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Width=\"390\"/>\r\n      <TextBox x:Name=\"textBox_ProjectDesc\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"10,110,0,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Width=\"390\"/>\r\n      <TextBox x:Name=\"textBox_ProjectPhase\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"10,135,0,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Width=\"390\"/>\r\n      <TextBox x:Name=\"textBox_SiteLocation\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"10,160,0,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Width=\"390\"/>\r\n      <TextBox x:Name=\"textBox_SiteDesc\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"10,185,0,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Width=\"390\"/>\r\n      <TextBox x:Name=\"textBox_BuildingType\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"10,35,0,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Width=\"390\" Text=\"example: [Building Type Classification Name]&lt;replace here with code&gt;\" FontWeight=\"ExtraLight\" FontStyle=\"Italic\" TextChanged=\"textBox_BuildingType_TextChanged\" GotFocus=\"textBox_BuildingType_GotFocus\"/>\r\n      <!--<ComboBox x:Name=\"comboBox_BuildingType\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Margin=\"10,35,0,0\" VerticalAlignment=\"Top\" Width=\"291\"/>\r\n      <Button x:Name=\"button_Source\" Content=\"Source ...\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Margin=\"325,35,0,0\" VerticalAlignment=\"Top\" Width=\"75\" Click=\"button_Source_Click\"/>-->\r\n\r\n   </Grid>\r\n</UserControl>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/COBieProjectInfoTab.xaml.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Data;\r\nusing System.Windows.Documents;\r\nusing System.Windows.Input;\r\nusing System.Windows.Media;\r\nusing System.Windows.Media.Imaging;\r\nusing System.Windows.Navigation;\r\nusing System.Windows.Shapes;\r\nusing Revit.IFC.Common.Utility;\r\nusing Autodesk.Revit.DB;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// Interaction logic for COBieProjectInfoTab.xaml\r\n   /// </summary>\r\n   public partial class COBieProjectInfoTab : UserControl\r\n   {\r\n      COBieProjectInfo projectInfo;\r\n      public string ProjectInfoStr\r\n      {\r\n         get\r\n         {\r\n            PopulateProjectInfo();\r\n            return projectInfo.ToJsonString();\r\n         }\r\n      }\r\n\r\n      public COBieProjectInfoTab(string projInfoStr)\r\n      {\r\n         InitializeComponent();\r\n\r\n         ProjectInfo rvtProjectInfo = IFCCommandOverrideApplication.TheDocument.ProjectInformation;\r\n\r\n         if (!string.IsNullOrEmpty(projInfoStr))\r\n         {\r\n            projectInfo = new COBieProjectInfo(projInfoStr);\r\n         }\r\n         else\r\n         {\r\n            projectInfo = new COBieProjectInfo();\r\n         }\r\n\r\n         if (string.IsNullOrEmpty(projectInfo.BuildingName_Number))\r\n            projectInfo.BuildingName_Number = rvtProjectInfo.Number;\r\n\r\n         if (string.IsNullOrEmpty(projectInfo.BuildingDescription))\r\n            projectInfo.BuildingDescription = rvtProjectInfo.BuildingName;\r\n\r\n         if (string.IsNullOrEmpty(projectInfo.ProjectName))\r\n            projectInfo.ProjectName = rvtProjectInfo.Name;\r\n\r\n         if (string.IsNullOrEmpty(projectInfo.ProjectPhase))\r\n            projectInfo.ProjectPhase = rvtProjectInfo.Status;\r\n\r\n         PopulatePage();\r\n      }\r\n\r\n      private void button_Source_Click(object sender, RoutedEventArgs e)\r\n      {\r\n\r\n      }\r\n\r\n      private void textBox_TypeSource_TextChanged(object sender, TextChangedEventArgs e)\r\n      {\r\n\r\n      }\r\n\r\n      private void PopulateProjectInfo()\r\n      {\r\n         projectInfo.BuildingName_Number = textBox_BuildingName.Text;\r\n         projectInfo.BuildingType = buildingTypeVisited? textBox_BuildingType.Text : \"\";\r\n         projectInfo.BuildingDescription = textBox_BuildingDesc.Text;\r\n         projectInfo.ProjectName = textBox_ProjectName.Text;\r\n         projectInfo.ProjectDescription = textBox_ProjectDesc.Text;\r\n         projectInfo.ProjectPhase = textBox_ProjectPhase.Text;\r\n         projectInfo.SiteLocation = textBox_SiteLocation.Text;\r\n         projectInfo.SiteDescription = textBox_SiteDesc.Text;\r\n      }\r\n\r\n      private void PopulatePage()\r\n      {\r\n         textBox_BuildingName.Text = projectInfo.BuildingName_Number;\r\n         if (!string.IsNullOrEmpty(projectInfo.BuildingType))\r\n         {\r\n            textBox_BuildingType.Text = projectInfo.BuildingType;\r\n            textBox_BuildingType.GotFocus -= textBox_BuildingType_GotFocus;\r\n            textBox_BuildingType.FontStyle = FontStyles.Normal;\r\n            textBox_BuildingType.FontWeight = FontWeights.Normal;\r\n            buildingTypeVisited = true;\r\n         }\r\n         textBox_BuildingDesc.Text = projectInfo.BuildingDescription;\r\n         textBox_ProjectName.Text = projectInfo.ProjectName;\r\n         textBox_ProjectDesc.Text = projectInfo.ProjectDescription;\r\n         textBox_ProjectPhase.Text = projectInfo.ProjectPhase;\r\n         textBox_SiteLocation.Text = projectInfo.SiteLocation;\r\n         textBox_SiteDesc.Text = projectInfo.SiteDescription;\r\n\r\n      }\r\n\r\n      private void textBox_BuildingType_TextChanged(object sender, TextChangedEventArgs e)\r\n      {\r\n\r\n      }\r\n\r\n      bool buildingTypeVisited = false;\r\n      private void textBox_BuildingType_GotFocus(object sender, RoutedEventArgs e)\r\n      {\r\n         TextBox tb = sender as TextBox;\r\n         tb.Text = string.Empty;\r\n         tb.GotFocus -= textBox_BuildingType_GotFocus;\r\n         tb.FontStyle = FontStyles.Normal;\r\n         tb.FontWeight = FontWeights.Normal;\r\n         buildingTypeVisited = true;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/CreateAddinFile.bat",
    "content": "echo off\r\nSETLOCAL\r\n\r\nset \"print=for /f %%^\" in (\"\"\"\") do echo(%%~\"\"\r\n(\r\n%print%<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n%print%<RevitAddIns>\r\n%print%  <AddIn Type=\"Application\">\r\n%print%    <Name>IFC override</Name>\r\n%print%    <Assembly>%2</Assembly>\r\n%print%    <AddInId>%3</AddInId>\r\n%print%    <FullClassName>BIM.IFC.Export.UI.IFCCommandOverrideApplication</FullClassName>\r\n%print%    <VendorId>ADSK</VendorId>\r\n%print%    <VendorDescription>Autodesk, www.autodesk.com</VendorDescription>\r\n%print%  </AddIn>\r\n%print%  <ManifestSettings>\r\n%print%     <UseRevitContext>False</UseRevitContext>\r\n%print%     <Dependencies>\r\n%print%       <DependsOnClientId ClientId=\"A8730C97-60FA-4082-BC62-53BAFFBABDBA\">\r\n%print%         <AssemblyName>Newtonsoft.Json.dll</AssemblyName>\r\n%print%       </DependsOnClientId>\r\n%print%     </Dependencies>\r\n%print%  </ManifestSettings>\r\n%print%</RevitAddIns>\r\n) > %1\r\n\r\nENDLOCAL"
  },
  {
    "path": "Source/IFCExporterUIOverride/CreateResource.bat",
    "content": "@echo off\n\nset OutputDir=%~1\nset OutputFileShortName=%~2\nSet CreatedResourceShortName=%~3\nset ToolsFolder=%~4\nset ProjectDir=%~dp0\nset lang=en-US\nset ResBaseName=IFCExportUI.IFCExportUIResources.%lang%\n\npushd %OutputDir%\ncall \"%ToolsFolder%\\SetVCVars.bat\" x86> NUL\n\ncopy ..\\..\\%OutputFileShortName%\n\ncopy %ProjectDir%\\Properties\\Resources.resx %ResBaseName%.resx\n\nResGen %ResBaseName%.resx\nal.exe /nologo /t:lib /c:%lang% /template:%OutputFileShortName% /embedresource:%ResBaseName%.resources  /out:..\\%CreatedResourceShortName%  \n\ndel %OutputFileShortName%\n\nrem Delete .resource and .resx files individually to prevent resources from other projects from being deleted.\ndel %ResBaseName%.resx\ndel %ResBaseName%.resources\n\npopd\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFC2X2_ADD1.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<!-- created with EXPTOOL V20070502 (perl 5 program) written by Thomas Liebich, AEC3, tl@aec3.de -->\r\n<!-- validated with XMLspy2007 sp2 (http://www.xmlspy.com) by Thomas Liebich, AEC3, tl@aec3.de -->\r\n<!-- configuration options used to create the following XML schema definitions following ISO 10303-28ed2 CD -->\r\n<!-- global options within the <option> scoping element -->\r\n<!-- + <inheritance> = \"true\" -->\r\n<!-- + <exp-type> = \"unspecified\" -->\r\n<!-- + <exp-attribute> = \"double-tag\" -->\r\n<!-- + <flatten> = \"false\" -->\r\n<!-- + <sparse> = \"true\" -->\r\n<!-- + <tagless> = \"false\" -->\r\n<!-- + <naming-convention> = \"preserve-case\" -->\r\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:ex=\"urn:iso.org:standard:10303:part(28):version(2):xmlschema:common\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:ifc=\"http://www.iai-tech.org/ifcXML/IFC2x2/FINAL\" targetNamespace=\"http://www.iai-tech.org/ifcXML/IFC2x2/FINAL\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\">\r\n\t<!-- root element declaration (for SCHEMA definitions) -->\r\n\t<xs:import namespace=\"urn:iso.org:standard:10303:part(28):version(2):xmlschema:common\" schemaLocation=\"http://www.iai-tech.org/ifcXML/IFC2x2/FINAL/ex.xsd\"/>\r\n\t<xs:element name=\"uos\" type=\"ifc:uos\" substitutionGroup=\"ex:uos\"/>\r\n\t<xs:complexType name=\"uos\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:uos\">\r\n\t\t\t\t<xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t<xs:element ref=\"ex:Entity\"/>\r\n\t\t\t\t</xs:choice>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<!-- element and complex type declarations (for ENTITY definitions) -->\r\n\t<xs:element name=\"Ifc2DCompositeCurve\" type=\"ifc:Ifc2DCompositeCurve\" substitutionGroup=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"Ifc2DCompositeCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurve\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcActionRequest\" type=\"ifc:IfcActionRequest\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcActionRequest\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RequestID\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcActor\" type=\"ifc:IfcActor\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcActor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TheActor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcActorRole\" type=\"ifc:IfcActorRole\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcActorRole\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Role\" type=\"ifc:IfcRoleEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedRole\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcActuatorType\" type=\"ifc:IfcActuatorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcActuatorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAddress\" type=\"ifc:IfcAddress\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAddress\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Purpose\" type=\"ifc:IfcAddressTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedPurpose\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAirTerminalBoxType\" type=\"ifc:IfcAirTerminalBoxType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAirTerminalBoxType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAirTerminalType\" type=\"ifc:IfcAirTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAirTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAirToAirHeatRecoveryType\" type=\"ifc:IfcAirToAirHeatRecoveryType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAirToAirHeatRecoveryType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAlarmType\" type=\"ifc:IfcAlarmType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAlarmType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAngularDimension\" type=\"ifc:IfcAngularDimension\" substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAngularDimension\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAnnotation\" type=\"ifc:IfcAnnotation\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAnnotation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAnnotationCurveOccurrence\" type=\"ifc:IfcAnnotationCurveOccurrence\" substitutionGroup=\"ifc:IfcAnnotationOccurrence\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAnnotationCurveOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAnnotationFillArea\" type=\"ifc:IfcAnnotationFillArea\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAnnotationFillArea\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Boundaries\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAnnotationFillAreaOccurrence\" type=\"ifc:IfcAnnotationFillAreaOccurrence\" substitutionGroup=\"ifc:IfcAnnotationOccurrence\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAnnotationFillAreaOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FillStyleTarget\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAnnotationOccurrence\" type=\"ifc:IfcAnnotationOccurrence\" abstract=\"true\" substitutionGroup=\"ifc:IfcStyledItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAnnotationOccurrence\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStyledItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAnnotationSurfaceOccurrence\" type=\"ifc:IfcAnnotationSurfaceOccurrence\" substitutionGroup=\"ifc:IfcAnnotationOccurrence\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAnnotationSurfaceOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAnnotationSymbolOccurrence\" type=\"ifc:IfcAnnotationSymbolOccurrence\" substitutionGroup=\"ifc:IfcAnnotationOccurrence\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAnnotationSymbolOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAnnotationTextOccurrence\" type=\"ifc:IfcAnnotationTextOccurrence\" substitutionGroup=\"ifc:IfcAnnotationOccurrence\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAnnotationTextOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcApplication\" type=\"ifc:IfcApplication\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcApplication\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApplicationDeveloper\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Version\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"ApplicationFullName\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"ApplicationIdentifier\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAppliedValue\" type=\"ifc:IfcAppliedValue\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAppliedValue\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"AppliedValue\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UnitBasis\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ApplicableDate\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FixedUntilDate\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAppliedValueRelationship\" type=\"ifc:IfcAppliedValueRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAppliedValueRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ComponentOfTotal\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Components\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ArithmeticOperator\" type=\"ifc:IfcArithmeticOperatorEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcApproval\" type=\"ifc:IfcApproval\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcApproval\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ApprovalDateTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ApprovalStatus\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ApprovalLevel\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ApprovalQualifier\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Identifier\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcApprovalActorRelationship\" type=\"ifc:IfcApprovalActorRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcApprovalActorRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Actor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Approval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Role\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcApprovalPropertyRelationship\" type=\"ifc:IfcApprovalPropertyRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcApprovalPropertyRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApprovedProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Approval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcApprovalRelationship\" type=\"ifc:IfcApprovalRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcApprovalRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedApproval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingApproval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcArbitraryClosedProfileDef\" type=\"ifc:IfcArbitraryClosedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcArbitraryClosedProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OuterCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcArbitraryOpenProfileDef\" type=\"ifc:IfcArbitraryOpenProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcArbitraryOpenProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Curve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcArbitraryProfileDefWithVoids\" type=\"ifc:IfcArbitraryProfileDefWithVoids\" substitutionGroup=\"ifc:IfcArbitraryClosedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcArbitraryProfileDefWithVoids\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryClosedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"InnerCurves\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAsset\" type=\"ifc:IfcAsset\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAsset\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AssetID\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"OriginalValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurrentValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TotalReplacementCost\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Owner\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"User\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ResponsiblePerson\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IncorporationDate\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DepreciatedValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAsymmetricIShapeProfileDef\" type=\"ifc:IfcAsymmetricIShapeProfileDef\" substitutionGroup=\"ifc:IfcIShapeProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAsymmetricIShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcIShapeProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TopFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"TopFlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TopFlangeFilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAxis1Placement\" type=\"ifc:IfcAxis1Placement\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAxis1Placement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Axis\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAxis2Placement2D\" type=\"ifc:IfcAxis2Placement2D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAxis2Placement2D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RefDirection\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcAxis2Placement3D\" type=\"ifc:IfcAxis2Placement3D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcAxis2Placement3D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Axis\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RefDirection\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBSplineCurve\" type=\"ifc:IfcBSplineCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBSplineCurve\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Degree\" type=\"xs:long\"/>\r\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurveForm\" type=\"ifc:IfcBSplineCurveForm\"/>\r\n\t\t\t\t\t<xs:element name=\"ClosedCurve\" type=\"ex:logical\"/>\r\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBeam\" type=\"ifc:IfcBeam\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBeam\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBeamType\" type=\"ifc:IfcBeamType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBeamType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBezierCurve\" type=\"ifc:IfcBezierCurve\" substitutionGroup=\"ifc:IfcBSplineCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBezierCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurve\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoilerType\" type=\"ifc:IfcBoilerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoilerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBooleanClippingResult\" type=\"ifc:IfcBooleanClippingResult\" substitutionGroup=\"ifc:IfcBooleanResult\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBooleanClippingResult\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBooleanResult\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBooleanResult\" type=\"ifc:IfcBooleanResult\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBooleanResult\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Operator\" type=\"ifc:IfcBooleanOperator\"/>\r\n\t\t\t\t\t<xs:element name=\"FirstOperand\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SecondOperand\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoundaryCondition\" type=\"ifc:IfcBoundaryCondition\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoundaryCondition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoundaryEdgeCondition\" type=\"ifc:IfcBoundaryEdgeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoundaryEdgeCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByLengthX\" type=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByLengthY\" type=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByLengthZ\" type=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthX\" type=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthY\" type=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthZ\" type=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoundaryFaceCondition\" type=\"ifc:IfcBoundaryFaceCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoundaryFaceCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByAreaX\" type=\"ifc:IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByAreaY\" type=\"ifc:IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByAreaZ\" type=\"ifc:IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoundaryNodeCondition\" type=\"ifc:IfcBoundaryNodeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoundaryNodeCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessX\" type=\"ifc:IfcLinearStiffnessMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessY\" type=\"ifc:IfcLinearStiffnessMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessZ\" type=\"ifc:IfcLinearStiffnessMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessX\" type=\"ifc:IfcRotationalStiffnessMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessY\" type=\"ifc:IfcRotationalStiffnessMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessZ\" type=\"ifc:IfcRotationalStiffnessMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoundaryNodeConditionWarping\" type=\"ifc:IfcBoundaryNodeConditionWarping\" substitutionGroup=\"ifc:IfcBoundaryNodeCondition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoundaryNodeConditionWarping\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryNodeCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WarpingStiffness\" type=\"ifc:IfcWarpingMomentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoundedCurve\" type=\"ifc:IfcBoundedCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoundedCurve\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoundedSurface\" type=\"ifc:IfcBoundedSurface\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoundedSurface\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurface\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoundingBox\" type=\"ifc:IfcBoundingBox\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoundingBox\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Corner\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"ZDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBoxedHalfSpace\" type=\"ifc:IfcBoxedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBoxedHalfSpace\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Enclosure\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundingBox\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBuilding\" type=\"ifc:IfcBuilding\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBuilding\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ElevationOfRefHeight\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ElevationOfTerrain\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"BuildingAddress\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPostalAddress\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBuildingElement\" type=\"ifc:IfcBuildingElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBuildingElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBuildingElementComponent\" type=\"ifc:IfcBuildingElementComponent\" abstract=\"true\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBuildingElementComponent\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBuildingElementComponentType\" type=\"ifc:IfcBuildingElementComponentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBuildingElementComponentType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBuildingElementPart\" type=\"ifc:IfcBuildingElementPart\" substitutionGroup=\"ifc:IfcBuildingElementComponent\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBuildingElementPart\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementComponent\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBuildingElementProxy\" type=\"ifc:IfcBuildingElementProxy\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBuildingElementProxy\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CompositionType\" type=\"ifc:IfcElementCompositionEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBuildingElementType\" type=\"ifc:IfcBuildingElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBuildingElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcBuildingStorey\" type=\"ifc:IfcBuildingStorey\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcBuildingStorey\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Elevation\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCShapeProfileDef\" type=\"ifc:IfcCShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"Girth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"InternalFilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCableCarrierFittingType\" type=\"ifc:IfcCableCarrierFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCableCarrierFittingType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCableCarrierSegmentType\" type=\"ifc:IfcCableCarrierSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCableCarrierSegmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCableSegmentType\" type=\"ifc:IfcCableSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCableSegmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCalendarDate\" type=\"ifc:IfcCalendarDate\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCalendarDate\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DayComponent\" type=\"ifc:IfcDayInMonthNumber\"/>\r\n\t\t\t\t\t<xs:element name=\"MonthComponent\" type=\"ifc:IfcMonthInYearNumber\"/>\r\n\t\t\t\t\t<xs:element name=\"YearComponent\" type=\"ifc:IfcYearNumber\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCartesianPoint\" type=\"ifc:IfcCartesianPoint\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCartesianPoint\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Coordinates\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\" maxOccurs=\"3\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCartesianTransformationOperator\" type=\"ifc:IfcCartesianTransformationOperator\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Axis1\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Axis2\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LocalOrigin\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Scale\" type=\"xs:double\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCartesianTransformationOperator2D\" type=\"ifc:IfcCartesianTransformationOperator2D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCartesianTransformationOperator2DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator2DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2DnonUniform\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator2D\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Scale2\" type=\"xs:double\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCartesianTransformationOperator3D\" type=\"ifc:IfcCartesianTransformationOperator3D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Axis3\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCartesianTransformationOperator3DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator3DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator3D\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3DnonUniform\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator3D\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Scale2\" type=\"xs:double\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Scale3\" type=\"xs:double\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcChamferEdgeFeature\" type=\"ifc:IfcChamferEdgeFeature\" substitutionGroup=\"ifc:IfcEdgeFeature\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcChamferEdgeFeature\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEdgeFeature\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcChillerType\" type=\"ifc:IfcChillerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcChillerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCircle\" type=\"ifc:IfcCircle\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCircle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCircleHollowProfileDef\" type=\"ifc:IfcCircleHollowProfileDef\" substitutionGroup=\"ifc:IfcCircleProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCircleHollowProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCircleProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCircleProfileDef\" type=\"ifc:IfcCircleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCircleProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcClassification\" type=\"ifc:IfcClassification\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcClassification\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Source\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Edition\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"EditionDate\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcClassificationItem\" type=\"ifc:IfcClassificationItem\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcClassificationItem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Notation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationNotationFacet\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ItemOf\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Title\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcClassificationItemRelationship\" type=\"ifc:IfcClassificationItemRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcClassificationItemRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingItem\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationItem\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedItems\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationItem\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationItem\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcClassificationNotation\" type=\"ifc:IfcClassificationNotation\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcClassificationNotation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NotationFacets\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationNotationFacet\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationNotationFacet\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcClassificationNotationFacet\" type=\"ifc:IfcClassificationNotationFacet\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcClassificationNotationFacet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NotationValue\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcClassificationReference\" type=\"ifc:IfcClassificationReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcClassificationReference\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ReferencedSource\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcClosedShell\" type=\"ifc:IfcClosedShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcClosedShell\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCoilType\" type=\"ifc:IfcCoilType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCoilType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcColourRgb\" type=\"ifc:IfcColourRgb\" substitutionGroup=\"ifc:IfcColourSpecification\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcColourRgb\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcColourSpecification\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Red\" type=\"ifc:IfcNormalisedRatioMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"Green\" type=\"ifc:IfcNormalisedRatioMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"Blue\" type=\"ifc:IfcNormalisedRatioMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcColourSpecification\" type=\"ifc:IfcColourSpecification\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcColourSpecification\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcColumn\" type=\"ifc:IfcColumn\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcColumn\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcColumnType\" type=\"ifc:IfcColumnType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcColumnType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcComplexProperty\" type=\"ifc:IfcComplexProperty\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcComplexProperty\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UsageName\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"HasProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCompositeCurve\" type=\"ifc:IfcCompositeCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCompositeCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Segments\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCompositeCurveSegment\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCompositeCurveSegment\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCompositeCurveSegment\" type=\"ifc:IfcCompositeCurveSegment\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCompositeCurveSegment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Transition\" type=\"ifc:IfcTransitionCode\"/>\r\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"xs:boolean\"/>\r\n\t\t\t\t\t<xs:element name=\"ParentCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCompositeProfileDef\" type=\"ifc:IfcCompositeProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCompositeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Profiles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProfileDef\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Label\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCompressorType\" type=\"ifc:IfcCompressorType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCompressorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCondenserType\" type=\"ifc:IfcCondenserType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCondenserType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCondition\" type=\"ifc:IfcCondition\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConditionCriterion\" type=\"ifc:IfcConditionCriterion\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConditionCriterion\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Criterion\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcConditionCriterionSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CriterionDateTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConic\" type=\"ifc:IfcConic\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConic\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConnectedFaceSet\" type=\"ifc:IfcConnectedFaceSet\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConnectedFaceSet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CfsFaces\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFace\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFace\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConnectionCurveGeometry\" type=\"ifc:IfcConnectionCurveGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConnectionCurveGeometry\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CurveOnRelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurveOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConnectionGeometry\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConnectionPointGeometry\" type=\"ifc:IfcConnectionPointGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConnectionPointGeometry\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PointOnRelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PointOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConnectionPortGeometry\" type=\"ifc:IfcConnectionPortGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConnectionPortGeometry\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LocationAtRelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LocationAtRelatedElement\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ProfileOfPort\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConnectionSurfaceGeometry\" type=\"ifc:IfcConnectionSurfaceGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConnectionSurfaceGeometry\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConstraint\" type=\"ifc:IfcConstraint\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConstraint\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ConstraintGrade\" type=\"ifc:IfcConstraintEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ConstraintSource\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CreatingActor\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CreationTime\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedGrade\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConstraintAggregationRelationship\" type=\"ifc:IfcConstraintAggregationRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConstraintAggregationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedConstraints\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcConstraint\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LogicalAggregator\" type=\"ifc:IfcLogicalOperatorEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConstraintClassificationRelationship\" type=\"ifc:IfcConstraintClassificationRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConstraintClassificationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ClassifiedConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedClassifications\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationNotationSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConstraintRelationship\" type=\"ifc:IfcConstraintRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConstraintRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedConstraints\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcConstraint\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConstructionEquipmentResource\" type=\"ifc:IfcConstructionEquipmentResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConstructionEquipmentResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConstructionMaterialResource\" type=\"ifc:IfcConstructionMaterialResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConstructionMaterialResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Suppliers\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UsageRatio\" type=\"ifc:IfcRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConstructionProductResource\" type=\"ifc:IfcConstructionProductResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConstructionProductResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConstructionResource\" type=\"ifc:IfcConstructionResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcResource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConstructionResource\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcResource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ResourceIdentifier\" type=\"ifc:IfcIdentifier\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ResourceGroup\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ResourceConsumption\" type=\"ifc:IfcResourceConsumptionEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"BaseQuantity\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcContextDependentUnit\" type=\"ifc:IfcContextDependentUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcContextDependentUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcControl\" type=\"ifc:IfcControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcControl\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcControllerType\" type=\"ifc:IfcControllerType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcControllerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcConversionBasedUnit\" type=\"ifc:IfcConversionBasedUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcConversionBasedUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"ConversionFactor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCooledBeamType\" type=\"ifc:IfcCooledBeamType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCooledBeamType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCoolingTowerType\" type=\"ifc:IfcCoolingTowerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCoolingTowerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCoordinatedUniversalTimeOffset\" type=\"ifc:IfcCoordinatedUniversalTimeOffset\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCoordinatedUniversalTimeOffset\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HourOffset\" type=\"ifc:IfcHourInDay\"/>\r\n\t\t\t\t\t<xs:element name=\"MinuteOffset\" type=\"ifc:IfcMinuteInHour\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Sense\" type=\"ifc:IfcAheadOrBehind\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCostItem\" type=\"ifc:IfcCostItem\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCostItem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCostSchedule\" type=\"ifc:IfcCostSchedule\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCostSchedule\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SubmittedBy\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PreparedBy\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SubmittedOn\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Status\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TargetUsers\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UpdateDate\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ID\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCostScheduleTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCostValue\" type=\"ifc:IfcCostValue\" substitutionGroup=\"ifc:IfcAppliedValue\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCostValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CostType\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Condition\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCovering\" type=\"ifc:IfcCovering\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCovering\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCoveringType\" type=\"ifc:IfcCoveringType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCoveringType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCraneRailAShapeProfileDef\" type=\"ifc:IfcCraneRailAShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCraneRailAShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"BaseWidth2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"HeadWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"HeadDepth2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"HeadDepth3\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"BaseWidth4\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth1\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth3\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCraneRailFShapeProfileDef\" type=\"ifc:IfcCraneRailFShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCraneRailFShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"HeadWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"HeadDepth2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"HeadDepth3\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth1\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCrewResource\" type=\"ifc:IfcCrewResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCrewResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCsgSolid\" type=\"ifc:IfcCsgSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCsgSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TreeRootExpression\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCsgSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCurrencyRelationship\" type=\"ifc:IfcCurrencyRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCurrencyRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingMonetaryUnit\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedMonetaryUnit\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ExchangeRate\" type=\"ifc:IfcPositiveRatioMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"RateDateTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RateSource\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCurtainWall\" type=\"ifc:IfcCurtainWall\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCurtainWall\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCurve\" type=\"ifc:IfcCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCurve\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCurveBoundedPlane\" type=\"ifc:IfcCurveBoundedPlane\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCurveBoundedPlane\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPlane\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OuterBoundary\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCurveStyle\" type=\"ifc:IfcCurveStyle\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCurveStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"CurveFont\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurveWidth\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurveColour\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCurveStyleFont\" type=\"ifc:IfcCurveStyleFont\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCurveStyleFont\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PatternList\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontPattern\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurveStyleFontPattern\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCurveStyleFontAndScaling\" type=\"ifc:IfcCurveStyleFontAndScaling\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCurveStyleFontAndScaling\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CurveFont\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurveFontScaling\" type=\"ifc:IfcPositiveRatioMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCurveStyleFontPattern\" type=\"ifc:IfcCurveStyleFontPattern\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcCurveStyleFontPattern\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VisibleSegmentLength\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"InvisibleSegmentLength\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDamperType\" type=\"ifc:IfcDamperType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDamperType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDateAndTime\" type=\"ifc:IfcDateAndTime\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDateAndTime\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DateComponent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeComponent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLocalTime\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDefinedSymbol\" type=\"ifc:IfcDefinedSymbol\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDefinedSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Definition\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinedSymbolSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Target\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator2D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDerivedProfileDef\" type=\"ifc:IfcDerivedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDerivedProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ParentProfile\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Operator\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator2D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Label\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDerivedUnit\" type=\"ifc:IfcDerivedUnit\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDerivedUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Elements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDerivedUnitElement\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDerivedUnitElement\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UnitType\" type=\"ifc:IfcDerivedUnitEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDerivedUnitElement\" type=\"ifc:IfcDerivedUnitElement\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDerivedUnitElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Unit\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Exponent\" type=\"xs:long\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDiameterDimension\" type=\"ifc:IfcDiameterDimension\" substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDiameterDimension\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDimensionCalloutRelationship\" type=\"ifc:IfcDimensionCalloutRelationship\" substitutionGroup=\"ifc:IfcDraughtingCalloutRelationship\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDimensionCalloutRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCalloutRelationship\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDimensionCurve\" type=\"ifc:IfcDimensionCurve\" substitutionGroup=\"ifc:IfcAnnotationCurveOccurrence\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDimensionCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationCurveOccurrence\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDimensionCurveDirectedCallout\" type=\"ifc:IfcDimensionCurveDirectedCallout\" substitutionGroup=\"ifc:IfcDraughtingCallout\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDimensionCurveDirectedCallout\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCallout\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDimensionCurveTerminator\" type=\"ifc:IfcDimensionCurveTerminator\" substitutionGroup=\"ifc:IfcTerminatorSymbol\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDimensionCurveTerminator\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTerminatorSymbol\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Role\" type=\"ifc:IfcDimensionExtentUsage\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDimensionalExponents\" type=\"ifc:IfcDimensionalExponents\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDimensionalExponents\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LengthExponent\" type=\"xs:long\"/>\r\n\t\t\t\t\t<xs:element name=\"MassExponent\" type=\"xs:long\"/>\r\n\t\t\t\t\t<xs:element name=\"TimeExponent\" type=\"xs:long\"/>\r\n\t\t\t\t\t<xs:element name=\"ElectricCurrentExponent\" type=\"xs:long\"/>\r\n\t\t\t\t\t<xs:element name=\"ThermodynamicTemperatureExponent\" type=\"xs:long\"/>\r\n\t\t\t\t\t<xs:element name=\"AmountOfSubstanceExponent\" type=\"xs:long\"/>\r\n\t\t\t\t\t<xs:element name=\"LuminousIntensityExponent\" type=\"xs:long\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDirection\" type=\"ifc:IfcDirection\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDirection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DirectionRatios\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:double-wrapper\" minOccurs=\"2\" maxOccurs=\"3\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:double-wrapper\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDiscreteAccessory\" type=\"ifc:IfcDiscreteAccessory\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDiscreteAccessory\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDiscreteAccessoryType\" type=\"ifc:IfcDiscreteAccessoryType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDiscreteAccessoryType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDistributionChamberElement\" type=\"ifc:IfcDistributionChamberElement\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDistributionChamberElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDistributionChamberElementType\" type=\"ifc:IfcDistributionChamberElementType\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDistributionChamberElementType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDistributionControlElement\" type=\"ifc:IfcDistributionControlElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDistributionControlElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ControlElementId\" type=\"ifc:IfcIdentifier\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDistributionControlElementType\" type=\"ifc:IfcDistributionControlElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDistributionControlElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDistributionElement\" type=\"ifc:IfcDistributionElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDistributionElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDistributionElementType\" type=\"ifc:IfcDistributionElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDistributionElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDistributionFlowElement\" type=\"ifc:IfcDistributionFlowElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDistributionFlowElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDistributionFlowElementType\" type=\"ifc:IfcDistributionFlowElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDistributionFlowElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDistributionPort\" type=\"ifc:IfcDistributionPort\" substitutionGroup=\"ifc:IfcPort\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDistributionPort\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPort\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FlowDirection\" type=\"ifc:IfcFlowDirectionEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDocumentElectronicFormat\" type=\"ifc:IfcDocumentElectronicFormat\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDocumentElectronicFormat\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FileExtension\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MimeContentType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MimeSubtype\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDocumentInformation\" type=\"ifc:IfcDocumentInformation\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDocumentInformation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DocumentId\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DocumentReferences\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDocumentReference\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Purpose\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"IntendedUse\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Scope\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Revision\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DocumentOwner\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Editors\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CreationTime\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LastRevisionTime\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ElectronicFormat\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentElectronicFormat\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ValidFrom\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ValidUntil\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Confidentiality\" type=\"ifc:IfcDocumentConfidentialityEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Status\" type=\"ifc:IfcDocumentStatusEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDocumentInformationRelationship\" type=\"ifc:IfcDocumentInformationRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDocumentInformationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedDocuments\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDocumentInformation\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelationshipType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDocumentReference\" type=\"ifc:IfcDocumentReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDocumentReference\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDoor\" type=\"ifc:IfcDoor\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDoor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDoorLiningProperties\" type=\"ifc:IfcDoorLiningProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDoorLiningProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LiningThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThresholdDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThresholdThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TransomThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TransomOffset\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LiningOffset\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThresholdOffset\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CasingThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CasingDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDoorPanelProperties\" type=\"ifc:IfcDoorPanelProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDoorPanelProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PanelDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PanelOperation\" type=\"ifc:IfcDoorPanelOperationEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"PanelWidth\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PanelPosition\" type=\"ifc:IfcDoorPanelPositionEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDoorStyle\" type=\"ifc:IfcDoorStyle\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDoorStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcDoorStyleOperationEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ConstructionType\" type=\"ifc:IfcDoorStyleConstructionEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ParameterTakesPrecedence\" type=\"xs:boolean\"/>\r\n\t\t\t\t\t<xs:element name=\"Sizeable\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDraughtingCallout\" type=\"ifc:IfcDraughtingCallout\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDraughtingCallout\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Contents\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDraughtingCalloutElement\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDraughtingCalloutElement\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDraughtingCalloutRelationship\" type=\"ifc:IfcDraughtingCalloutRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDraughtingCalloutRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RelatingDraughtingCallout\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDraughtingCallout\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedDraughtingCallout\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDraughtingCallout\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDraughtingPreDefinedColour\" type=\"ifc:IfcDraughtingPreDefinedColour\" substitutionGroup=\"ifc:IfcPreDefinedColour\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDraughtingPreDefinedColour\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedColour\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDraughtingPreDefinedCurveFont\" type=\"ifc:IfcDraughtingPreDefinedCurveFont\" substitutionGroup=\"ifc:IfcPreDefinedCurveFont\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDraughtingPreDefinedCurveFont\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedCurveFont\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDraughtingPreDefinedTextFont\" type=\"ifc:IfcDraughtingPreDefinedTextFont\" substitutionGroup=\"ifc:IfcPreDefinedTextFont\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDraughtingPreDefinedTextFont\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedTextFont\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDuctFittingType\" type=\"ifc:IfcDuctFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDuctFittingType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDuctSegmentType\" type=\"ifc:IfcDuctSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDuctSegmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcDuctSilencerType\" type=\"ifc:IfcDuctSilencerType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcDuctSilencerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEdge\" type=\"ifc:IfcEdge\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEdge\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EdgeStart\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertex\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EdgeEnd\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertex\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEdgeCurve\" type=\"ifc:IfcEdgeCurve\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEdgeCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EdgeGeometry\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEdgeFeature\" type=\"ifc:IfcEdgeFeature\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEdgeFeature\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FeatureLength\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEdgeLoop\" type=\"ifc:IfcEdgeLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEdgeLoop\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EdgeList\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricApplianceType\" type=\"ifc:IfcElectricApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricApplianceType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricDistributionPoint\" type=\"ifc:IfcElectricDistributionPoint\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricDistributionPoint\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DistributionPointFunction\" type=\"ifc:IfcElectricDistributionPointFunctionEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedFunction\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricFlowStorageDeviceType\" type=\"ifc:IfcElectricFlowStorageDeviceType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricFlowStorageDeviceType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricGeneratorType\" type=\"ifc:IfcElectricGeneratorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricGeneratorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricHeaterType\" type=\"ifc:IfcElectricHeaterType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricHeaterType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricHeaterTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricMotorType\" type=\"ifc:IfcElectricMotorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricMotorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricTimeControlType\" type=\"ifc:IfcElectricTimeControlType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricTimeControlType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricalBaseProperties\" type=\"ifc:IfcElectricalBaseProperties\" substitutionGroup=\"ifc:IfcEnergyProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricalBaseProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ElectricCurrentType\" type=\"ifc:IfcElectricCurrentEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"InputVoltage\" type=\"ifc:IfcElectricVoltageMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"InputFrequency\" type=\"ifc:IfcFrequencyMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FullLoadCurrent\" type=\"ifc:IfcElectricCurrentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MinimumCircuitCurrent\" type=\"ifc:IfcElectricCurrentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MaximumPowerInput\" type=\"ifc:IfcPowerMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RatedPowerInput\" type=\"ifc:IfcPowerMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"InputPhase\" type=\"xs:long\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricalCircuit\" type=\"ifc:IfcElectricalCircuit\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricalCircuit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSystem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElectricalElement\" type=\"ifc:IfcElectricalElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElectricalElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElement\" type=\"ifc:IfcElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Tag\" type=\"ifc:IfcIdentifier\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElementAssembly\" type=\"ifc:IfcElementAssembly\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElementAssembly\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElementComponent\" type=\"ifc:IfcElementComponent\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElementComponent\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElementComponentType\" type=\"ifc:IfcElementComponentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElementComponentType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElementQuantity\" type=\"ifc:IfcElementQuantity\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElementQuantity\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MethodOfMeasurement\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Quantities\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElementType\" type=\"ifc:IfcElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ElementType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcElementarySurface\" type=\"ifc:IfcElementarySurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcElementarySurface\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEllipse\" type=\"ifc:IfcEllipse\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEllipse\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEllipseProfileDef\" type=\"ifc:IfcEllipseProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEllipseProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEnergyConversionDevice\" type=\"ifc:IfcEnergyConversionDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEnergyConversionDevice\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEnergyConversionDeviceType\" type=\"ifc:IfcEnergyConversionDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEnergyConversionDeviceType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEnergyProperties\" type=\"ifc:IfcEnergyProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEnergyProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EnergySequence\" type=\"ifc:IfcEnergySequenceEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedEnergySequence\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEnvironmentalImpactValue\" type=\"ifc:IfcEnvironmentalImpactValue\" substitutionGroup=\"ifc:IfcAppliedValue\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEnvironmentalImpactValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ImpactType\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Category\" type=\"ifc:IfcEnvironmentalImpactCategoryEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedCategory\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEquipmentElement\" type=\"ifc:IfcEquipmentElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEquipmentElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEquipmentStandard\" type=\"ifc:IfcEquipmentStandard\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEquipmentStandard\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEvaporativeCoolerType\" type=\"ifc:IfcEvaporativeCoolerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEvaporativeCoolerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcEvaporatorType\" type=\"ifc:IfcEvaporatorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcEvaporatorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcExtendedMaterialProperties\" type=\"ifc:IfcExtendedMaterialProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcExtendedMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ExtendedProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcExternalReference\" type=\"ifc:IfcExternalReference\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcExternalReference\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Location\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ItemReference\" type=\"ifc:IfcIdentifier\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcExternallyDefinedHatchStyle\" type=\"ifc:IfcExternallyDefinedHatchStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcExternallyDefinedHatchStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcExternallyDefinedSufaceStyle\" type=\"ifc:IfcExternallyDefinedSufaceStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcExternallyDefinedSufaceStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcExternallyDefinedSymbol\" type=\"ifc:IfcExternallyDefinedSymbol\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcExternallyDefinedSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcExternallyDefinedTextFont\" type=\"ifc:IfcExternallyDefinedTextFont\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcExternallyDefinedTextFont\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcExtrudedAreaSolid\" type=\"ifc:IfcExtrudedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcExtrudedAreaSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFace\" type=\"ifc:IfcFace\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFace\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Bounds\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFaceBound\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFaceBound\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFaceBasedSurfaceModel\" type=\"ifc:IfcFaceBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFaceBasedSurfaceModel\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FbsmFaces\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectedFaceSet\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcConnectedFaceSet\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFaceBound\" type=\"ifc:IfcFaceBound\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFaceBound\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Bound\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLoop\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFaceOuterBound\" type=\"ifc:IfcFaceOuterBound\" substitutionGroup=\"ifc:IfcFaceBound\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFaceOuterBound\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFaceBound\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFaceSurface\" type=\"ifc:IfcFaceSurface\" substitutionGroup=\"ifc:IfcFace\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFaceSurface\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFace\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FaceSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFacetedBrep\" type=\"ifc:IfcFacetedBrep\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFacetedBrep\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFacetedBrepWithVoids\" type=\"ifc:IfcFacetedBrepWithVoids\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFacetedBrepWithVoids\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Voids\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClosedShell\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFailureConnectionCondition\" type=\"ifc:IfcFailureConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFailureConnectionCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TensionFailureX\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TensionFailureY\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TensionFailureZ\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CompressionFailureX\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CompressionFailureY\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CompressionFailureZ\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFanType\" type=\"ifc:IfcFanType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFanType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFastener\" type=\"ifc:IfcFastener\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFastener\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFastenerType\" type=\"ifc:IfcFastenerType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFastenerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFeatureElement\" type=\"ifc:IfcFeatureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFeatureElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFeatureElementAddition\" type=\"ifc:IfcFeatureElementAddition\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFeatureElementAddition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFeatureElementSubtraction\" type=\"ifc:IfcFeatureElementSubtraction\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFeatureElementSubtraction\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFillAreaStyle\" type=\"ifc:IfcFillAreaStyle\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFillAreaStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FillStyles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFillStyleSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFillAreaStyleHatching\" type=\"ifc:IfcFillAreaStyleHatching\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFillAreaStyleHatching\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HatchLineAppearance\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyle\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartOfNextHatchLine\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOneDirectionRepeatFactor\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PointOfReferenceHatchLine\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PatternStart\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HatchLineAngle\" type=\"ifc:IfcPlaneAngleMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFillAreaStyleTileSymbolWithStyle\" type=\"ifc:IfcFillAreaStyleTileSymbolWithStyle\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFillAreaStyleTileSymbolWithStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Symbol\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAnnotationSymbolOccurrence\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFillAreaStyleTiles\" type=\"ifc:IfcFillAreaStyleTiles\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFillAreaStyleTiles\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TilingPattern\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOneDirectionRepeatFactor\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Tiles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillAreaStyleTileShapeSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFillAreaStyleTileShapeSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TilingScale\" type=\"ifc:IfcPositiveRatioMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFilterType\" type=\"ifc:IfcFilterType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFilterType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFireSuppressionTerminalType\" type=\"ifc:IfcFireSuppressionTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFireSuppressionTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowController\" type=\"ifc:IfcFlowController\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowController\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowControllerType\" type=\"ifc:IfcFlowControllerType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowControllerType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowFitting\" type=\"ifc:IfcFlowFitting\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowFitting\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowFittingType\" type=\"ifc:IfcFlowFittingType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowFittingType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowInstrumentType\" type=\"ifc:IfcFlowInstrumentType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowInstrumentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowMeterType\" type=\"ifc:IfcFlowMeterType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowMeterType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowMovingDevice\" type=\"ifc:IfcFlowMovingDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowMovingDevice\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowMovingDeviceType\" type=\"ifc:IfcFlowMovingDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowMovingDeviceType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowSegment\" type=\"ifc:IfcFlowSegment\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowSegment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowSegmentType\" type=\"ifc:IfcFlowSegmentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowSegmentType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowStorageDevice\" type=\"ifc:IfcFlowStorageDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowStorageDevice\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowStorageDeviceType\" type=\"ifc:IfcFlowStorageDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowStorageDeviceType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowTerminal\" type=\"ifc:IfcFlowTerminal\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowTerminal\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowTerminalType\" type=\"ifc:IfcFlowTerminalType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowTerminalType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowTreatmentDevice\" type=\"ifc:IfcFlowTreatmentDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowTreatmentDevice\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFlowTreatmentDeviceType\" type=\"ifc:IfcFlowTreatmentDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFlowTreatmentDeviceType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFluidFlowProperties\" type=\"ifc:IfcFluidFlowProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFluidFlowProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PropertySource\" type=\"ifc:IfcPropertySourceEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"FlowConditionTimeSeries\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VelocityTimeSeries\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlowrateTimeSeries\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Fluid\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PressureTimeSeries\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedPropertySource\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TemperatureSingleValue\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"WetBulbTemperatureSingleValue\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"WetBulbTemperatureTimeSeries\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TemperatureTimeSeries\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlowrateSingleValue\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDerivedMeasureValue\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlowConditionSingleValue\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"VelocitySingleValue\" type=\"ifc:IfcLinearVelocityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PressureSingleValue\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFooting\" type=\"ifc:IfcFooting\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFooting\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFuelProperties\" type=\"ifc:IfcFuelProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFuelProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CombustionTemperature\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CarbonContent\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LowerHeatingValue\" type=\"ifc:IfcHeatingValueMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"HigherHeatingValue\" type=\"ifc:IfcHeatingValueMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFurnishingElement\" type=\"ifc:IfcFurnishingElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFurnishingElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFurnishingElementType\" type=\"ifc:IfcFurnishingElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFurnishingElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFurnitureStandard\" type=\"ifc:IfcFurnitureStandard\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFurnitureStandard\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcFurnitureType\" type=\"ifc:IfcFurnitureType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcFurnitureType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGasTerminalType\" type=\"ifc:IfcGasTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGasTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcGasTerminalTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGeneralMaterialProperties\" type=\"ifc:IfcGeneralMaterialProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGeneralMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MolecularWeight\" type=\"ifc:IfcMolecularWeightMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Porosity\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MassDensity\" type=\"ifc:IfcMassDensityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGeneralProfileProperties\" type=\"ifc:IfcGeneralProfileProperties\" substitutionGroup=\"ifc:IfcProfileProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGeneralProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PhysicalWeight\" type=\"ifc:IfcMassPerLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Perimeter\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MinimumPlateThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MaximumPlateThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGeometricCurveSet\" type=\"ifc:IfcGeometricCurveSet\" substitutionGroup=\"ifc:IfcGeometricSet\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGeometricCurveSet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricSet\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGeometricRepresentationContext\" type=\"ifc:IfcGeometricRepresentationContext\" substitutionGroup=\"ifc:IfcRepresentationContext\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGeometricRepresentationContext\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationContext\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CoordinateSpaceDimension\" type=\"ifc:IfcDimensionCount\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Precision\" type=\"xs:double\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"WorldCoordinateSystem\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TrueNorth\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGeometricRepresentationItem\" type=\"ifc:IfcGeometricRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGeometricRepresentationItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext-temp\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:restriction base=\"ifc:IfcGeometricRepresentationContext\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ContextIdentifier\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ContextType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:restriction>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGeometricRepresentationSubContext\" type=\"ifc:IfcGeometricRepresentationSubContext\" substitutionGroup=\"ifc:IfcGeometricRepresentationContext\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationSubContext-temp\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ParentContext\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationContext\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TargetScale\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TargetView\" type=\"ifc:IfcGeometricProjectionEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedTargetView\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGeometricSet\" type=\"ifc:IfcGeometricSet\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGeometricSet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Elements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGeometricSetSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGrid\" type=\"ifc:IfcGrid\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGrid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UAxes\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VAxes\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WAxes\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGridAxis\" type=\"ifc:IfcGridAxis\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGridAxis\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AxisTag\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"AxisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"ifc:IfcBoolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGridPlacement\" type=\"ifc:IfcGridPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGridPlacement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PlacementLocation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PlacementRefDirection\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcGroup\" type=\"ifc:IfcGroup\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcGroup\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcHalfSpaceSolid\" type=\"ifc:IfcHalfSpaceSolid\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcHalfSpaceSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BaseSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AgreementFlag\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcHeatExchangerType\" type=\"ifc:IfcHeatExchangerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcHeatExchangerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcHumidifierType\" type=\"ifc:IfcHumidifierType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcHumidifierType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcHygroscopicMaterialProperties\" type=\"ifc:IfcHygroscopicMaterialProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcHygroscopicMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UpperVaporResistanceFactor\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LowerVaporResistanceFactor\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"IsothermalMoistureCapacity\" type=\"ifc:IfcIsothermalMoistureCapacityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"VaporPermeability\" type=\"ifc:IfcVaporPermeabilityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MoistureDiffusivity\" type=\"ifc:IfcMoistureDiffusivityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcIShapeProfileDef\" type=\"ifc:IfcIShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcIShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcImageTexture\" type=\"ifc:IfcImageTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcImageTexture\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UrlReference\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcInventory\" type=\"ifc:IfcInventory\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcInventory\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"InventoryType\" type=\"ifc:IfcInventoryTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"Jurisdiction\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ResponsiblePersons\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPerson\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LastUpdateDate\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurrentValue\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OriginalValue\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcIrregularTimeSeries\" type=\"ifc:IfcIrregularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcIrregularTimeSeries\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Values\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIrregularTimeSeriesValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcIrregularTimeSeriesValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcIrregularTimeSeriesValue\" type=\"ifc:IfcIrregularTimeSeriesValue\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcIrregularTimeSeriesValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TimeStamp\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ListValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcJunctionBoxType\" type=\"ifc:IfcJunctionBoxType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcJunctionBoxType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLShapeProfileDef\" type=\"ifc:IfcLShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"EdgeRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LegSlope\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLaborResource\" type=\"ifc:IfcLaborResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLaborResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SkillSet\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLampType\" type=\"ifc:IfcLampType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLampType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLibraryInformation\" type=\"ifc:IfcLibraryInformation\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLibraryInformation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Version\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Publisher\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VersionDate\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LibraryReference\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLibraryReference\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLibraryReference\" type=\"ifc:IfcLibraryReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLibraryReference\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLightDistributionData\" type=\"ifc:IfcLightDistributionData\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLightDistributionData\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MainPlaneAngle\" type=\"ifc:IfcPlaneAngleMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"SecondaryPlaneAngle\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPlaneAngleMeasure\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LuminousIntensity\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLuminousIntensityDistributionMeasure\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLightFixtureType\" type=\"ifc:IfcLightFixtureType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLightFixtureType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLightIntensityDistribution\" type=\"ifc:IfcLightIntensityDistribution\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLightIntensityDistribution\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LightDistributionCurve\" type=\"ifc:IfcLightDistributionCurveEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"DistributionData\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLightDistributionData\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLightDistributionData\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLightSource\" type=\"ifc:IfcLightSource\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLightSource\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LightColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AmbientIntensity\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Intensity\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLightSourceAmbient\" type=\"ifc:IfcLightSourceAmbient\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLightSourceAmbient\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLightSourceDirectional\" type=\"ifc:IfcLightSourceDirectional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLightSourceDirectional\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Orientation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLightSourceGoniometric\" type=\"ifc:IfcLightSourceGoniometric\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLightSourceGoniometric\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ColourAppearance\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ColourTemperature\" type=\"ifc:IfcThermodynamicTemperatureMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"LuminousFlux\" type=\"ifc:IfcLuminousFluxMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"LightEmissionSource\" type=\"ifc:IfcLightEmissionSourceEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"LightDistributionDataSource\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLightSourcePositional\" type=\"ifc:IfcLightSourcePositional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLightSourcePositional\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"ConstantAttenuation\" type=\"ifc:IfcReal\"/>\r\n\t\t\t\t\t<xs:element name=\"DistanceAttenuation\" type=\"ifc:IfcReal\"/>\r\n\t\t\t\t\t<xs:element name=\"QuadricAttenuation\" type=\"ifc:IfcReal\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLightSourceSpot\" type=\"ifc:IfcLightSourceSpot\" substitutionGroup=\"ifc:IfcLightSourcePositional\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLightSourceSpot\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSourcePositional\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Orientation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConcentrationExponent\" type=\"ifc:IfcReal\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SpreadAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"BeamWidthAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLine\" type=\"ifc:IfcLine\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLine\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Pnt\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Dir\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLinearDimension\" type=\"ifc:IfcLinearDimension\" substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLinearDimension\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLocalPlacement\" type=\"ifc:IfcLocalPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLocalPlacement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PlacementRelTo\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectPlacement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelativePlacement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLocalTime\" type=\"ifc:IfcLocalTime\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLocalTime\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HourComponent\" type=\"ifc:IfcHourInDay\"/>\r\n\t\t\t\t\t<xs:element name=\"MinuteComponent\" type=\"ifc:IfcMinuteInHour\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SecondComponent\" type=\"ifc:IfcSecondInMinute\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Zone\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCoordinatedUniversalTimeOffset\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DaylightSavingOffset\" type=\"ifc:IfcDaylightSavingHour\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcLoop\" type=\"ifc:IfcLoop\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcLoop\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcManifoldSolidBrep\" type=\"ifc:IfcManifoldSolidBrep\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcManifoldSolidBrep\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Outer\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMappedItem\" type=\"ifc:IfcMappedItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMappedItem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MappingSource\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MappingTarget\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMaterial\" type=\"ifc:IfcMaterial\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMaterial\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMaterialClassificationRelationship\" type=\"ifc:IfcMaterialClassificationRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMaterialClassificationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MaterialClassifications\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationNotationSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ClassifiedMaterial\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMaterialLayer\" type=\"ifc:IfcMaterialLayer\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMaterialLayer\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Material\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"IsVentilated\" type=\"ifc:IfcBoolean\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMaterialLayerSet\" type=\"ifc:IfcMaterialLayerSet\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMaterialLayerSet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MaterialLayers\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcMaterialLayer\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerSetName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMaterialLayerSetUsage\" type=\"ifc:IfcMaterialLayerSetUsage\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMaterialLayerSetUsage\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ForLayerSet\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayerSet\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerSetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"DirectionSense\" type=\"ifc:IfcDirectionSenseEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"OffsetFromReferenceLine\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMaterialList\" type=\"ifc:IfcMaterialList\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMaterialList\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Materials\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcMaterial\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMaterialProperties\" type=\"ifc:IfcMaterialProperties\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMaterialProperties\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Material\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMeasureWithUnit\" type=\"ifc:IfcMeasureWithUnit\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMeasureWithUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ValueComponent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UnitComponent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMechanicalConcreteMaterialProperties\" type=\"ifc:IfcMechanicalConcreteMaterialProperties\" substitutionGroup=\"ifc:IfcMechanicalMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMechanicalConcreteMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMechanicalMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CompressiveStrength\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MaxAggregateSize\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"AdmixturesDescription\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Workability\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ProtectivePoreRatio\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"WaterImpermeability\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMechanicalFastener\" type=\"ifc:IfcMechanicalFastener\" substitutionGroup=\"ifc:IfcFastener\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMechanicalFastener\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFastener\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"NominalLength\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMechanicalFastenerType\" type=\"ifc:IfcMechanicalFastenerType\" substitutionGroup=\"ifc:IfcFastenerType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMechanicalFastenerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFastenerType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMechanicalMaterialProperties\" type=\"ifc:IfcMechanicalMaterialProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMechanicalMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DynamicViscosity\" type=\"ifc:IfcDynamicViscosityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"YoungModulus\" type=\"ifc:IfcModulusOfElasticityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShearModulus\" type=\"ifc:IfcModulusOfElasticityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PoissonRatio\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThermalExpansionCoefficient\" type=\"ifc:IfcThermalExpansionCoefficientMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMechanicalSteelMaterialProperties\" type=\"ifc:IfcMechanicalSteelMaterialProperties\" substitutionGroup=\"ifc:IfcMechanicalMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMechanicalSteelMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMechanicalMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"YieldStress\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"UltimateStress\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"UltimateStrain\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"HardeningModule\" type=\"ifc:IfcModulusOfElasticityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ProportionalStress\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PlasticStrain\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Relaxations\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelaxation\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRelaxation\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMember\" type=\"ifc:IfcMember\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMember\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMemberType\" type=\"ifc:IfcMemberType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMemberType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMetric\" type=\"ifc:IfcMetric\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMetric\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Benchmark\" type=\"ifc:IfcBenchmarkEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ValueSource\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DataValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMonetaryUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Currency\" type=\"ifc:IfcCurrencyEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMotorConnectionType\" type=\"ifc:IfcMotorConnectionType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMotorConnectionType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcMove\" type=\"ifc:IfcMove\" substitutionGroup=\"ifc:IfcTask\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcMove\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTask\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MoveFrom\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MoveTo\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PunchList\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcText\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcText\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcNamedUnit\" type=\"ifc:IfcNamedUnit\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcNamedUnit\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Dimensions\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDimensionalExponents\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UnitType\" type=\"ifc:IfcUnitEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcObject\" type=\"ifc:IfcObject\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcObject\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ObjectType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcObjectPlacement\" type=\"ifc:IfcObjectPlacement\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcObjectPlacement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcObjective\" type=\"ifc:IfcObjective\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcObjective\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BenchmarkValues\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMetric\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ResultValues\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMetric\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ObjectiveQualifier\" type=\"ifc:IfcObjectiveEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedQualifier\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOccupant\" type=\"ifc:IfcOccupant\" substitutionGroup=\"ifc:IfcActor\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOccupant\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcActor\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcOccupantTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOffsetCurve2D\" type=\"ifc:IfcOffsetCurve2D\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOffsetCurve2D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Distance\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOffsetCurve3D\" type=\"ifc:IfcOffsetCurve3D\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOffsetCurve3D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Distance\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\"/>\r\n\t\t\t\t\t<xs:element name=\"RefDirection\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOneDirectionRepeatFactor\" type=\"ifc:IfcOneDirectionRepeatFactor\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOneDirectionRepeatFactor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RepeatFactor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOpenShell\" type=\"ifc:IfcOpenShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOpenShell\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOpeningElement\" type=\"ifc:IfcOpeningElement\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOpeningElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOpticalMaterialProperties\" type=\"ifc:IfcOpticalMaterialProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOpticalMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VisibleTransmittance\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SolarTransmittance\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThermalIrTransmittance\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThermalIrEmissivityBack\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThermalIrEmissivityFront\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"VisibleReflectanceBack\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"VisibleReflectanceFront\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SolarReflectanceFront\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SolarReflectanceBack\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOrderAction\" type=\"ifc:IfcOrderAction\" substitutionGroup=\"ifc:IfcTask\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOrderAction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTask\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ActionID\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOrganization\" type=\"ifc:IfcOrganization\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOrganization\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Id\" type=\"ifc:IfcIdentifier\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorRole\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Addresses\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAddress\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOrganizationRelationship\" type=\"ifc:IfcOrganizationRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOrganizationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RelatingOrganization\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedOrganizations\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcOrganization\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:complexType name=\"IfcOrientedEdge-temp\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:restriction base=\"ifc:IfcEdge\">\r\n\t\t\t\t<xs:sequence/>\r\n\t\t\t</xs:restriction>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOrientedEdge\" type=\"ifc:IfcOrientedEdge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOrientedEdge\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcOrientedEdge-temp\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EdgeElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcEdge\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOutletType\" type=\"ifc:IfcOutletType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOutletType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcOwnerHistory\" type=\"ifc:IfcOwnerHistory\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcOwnerHistory\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OwningUser\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OwningApplication\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApplication\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"State\" type=\"ifc:IfcStateEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ChangeAction\" type=\"ifc:IfcChangeActionEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"LastModifiedDate\" type=\"ifc:IfcTimeStamp\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LastModifyingUser\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LastModifyingApplication\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApplication\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CreationDate\" type=\"ifc:IfcTimeStamp\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcParameterizedProfileDef\" type=\"ifc:IfcParameterizedProfileDef\" abstract=\"true\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcParameterizedProfileDef\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPath\" type=\"ifc:IfcPath\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPath\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EdgeList\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPerformanceHistory\" type=\"ifc:IfcPerformanceHistory\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPerformanceHistory\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LifeCyclePhase\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPermeableCoveringProperties\" type=\"ifc:IfcPermeableCoveringProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPermeableCoveringProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcPermeableCoveringOperationEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPermit\" type=\"ifc:IfcPermit\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPermit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PermitID\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPerson\" type=\"ifc:IfcPerson\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPerson\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Id\" type=\"ifc:IfcIdentifier\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FamilyName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"GivenName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MiddleNames\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PrefixTitles\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SuffixTitles\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorRole\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Addresses\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAddress\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPersonAndOrganization\" type=\"ifc:IfcPersonAndOrganization\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPersonAndOrganization\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ThePerson\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TheOrganization\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorRole\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPhysicalComplexQuantity\" type=\"ifc:IfcPhysicalComplexQuantity\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPhysicalComplexQuantity\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HasQuantities\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Discrimination\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Quality\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Usage\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPhysicalQuantity\" type=\"ifc:IfcPhysicalQuantity\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPhysicalQuantity\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPhysicalSimpleQuantity\" type=\"ifc:IfcPhysicalSimpleQuantity\" abstract=\"true\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPhysicalSimpleQuantity\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPile\" type=\"ifc:IfcPile\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPile\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ConstructionType\" type=\"ifc:IfcPileConstructionEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPipeFittingType\" type=\"ifc:IfcPipeFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPipeFittingType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPipeSegmentType\" type=\"ifc:IfcPipeSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPipeSegmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPixelTexture\" type=\"ifc:IfcPixelTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPixelTexture\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Width\" type=\"ifc:IfcInteger\"/>\r\n\t\t\t\t\t<xs:element name=\"Height\" type=\"ifc:IfcInteger\"/>\r\n\t\t\t\t\t<xs:element name=\"ColourComponents\" type=\"ifc:IfcInteger\"/>\r\n\t\t\t\t\t<xs:element name=\"Pixel\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:string-wrapper\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:string-wrapper\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPlacement\" type=\"ifc:IfcPlacement\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPlacement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Location\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPlanarBox\" type=\"ifc:IfcPlanarBox\" substitutionGroup=\"ifc:IfcPlanarExtent\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPlanarBox\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPlanarExtent\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Placement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPlanarExtent\" type=\"ifc:IfcPlanarExtent\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPlanarExtent\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SizeInX\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"SizeInY\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPlane\" type=\"ifc:IfcPlane\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPlane\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPlate\" type=\"ifc:IfcPlate\" substitutionGroup=\"ifc:IfcBuildingElementComponent\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPlate\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementComponent\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPlateType\" type=\"ifc:IfcPlateType\" substitutionGroup=\"ifc:IfcBuildingElementComponentType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPlateType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementComponentType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPoint\" type=\"ifc:IfcPoint\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPoint\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPointOnCurve\" type=\"ifc:IfcPointOnCurve\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPointOnCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PointParameter\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPointOnSurface\" type=\"ifc:IfcPointOnSurface\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPointOnSurface\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PointParameterU\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t\t<xs:element name=\"PointParameterV\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPolyLoop\" type=\"ifc:IfcPolyLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPolyLoop\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Polygon\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"3\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPolygonalBoundedHalfSpace\" type=\"ifc:IfcPolygonalBoundedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPolygonalBoundedHalfSpace\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PolygonalBoundary\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPolyline\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPolyline\" type=\"ifc:IfcPolyline\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPolyline\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Points\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPort\" type=\"ifc:IfcPort\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPort\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPostalAddress\" type=\"ifc:IfcPostalAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPostalAddress\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"InternalLocation\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"AddressLines\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PostalBox\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Town\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Region\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PostalCode\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Country\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPreDefinedColour\" type=\"ifc:IfcPreDefinedColour\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPreDefinedColour\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPreDefinedCurveFont\" type=\"ifc:IfcPreDefinedCurveFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPreDefinedCurveFont\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPreDefinedDimensionSymbol\" type=\"ifc:IfcPreDefinedDimensionSymbol\" substitutionGroup=\"ifc:IfcPreDefinedSymbol\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPreDefinedDimensionSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedSymbol\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPreDefinedItem\" type=\"ifc:IfcPreDefinedItem\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPreDefinedItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPreDefinedPointMarkerSymbol\" type=\"ifc:IfcPreDefinedPointMarkerSymbol\" substitutionGroup=\"ifc:IfcPreDefinedSymbol\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPreDefinedPointMarkerSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedSymbol\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPreDefinedSymbol\" type=\"ifc:IfcPreDefinedSymbol\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPreDefinedSymbol\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPreDefinedTerminatorSymbol\" type=\"ifc:IfcPreDefinedTerminatorSymbol\" substitutionGroup=\"ifc:IfcPreDefinedSymbol\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPreDefinedTerminatorSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedSymbol\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPreDefinedTextFont\" type=\"ifc:IfcPreDefinedTextFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPreDefinedTextFont\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPresentationLayerAssignment\" type=\"ifc:IfcPresentationLayerAssignment\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPresentationLayerAssignment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"AssignedItems\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLayeredItem\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLayeredItem\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPresentationLayerAssignmentWithStyle\" type=\"ifc:IfcPresentationLayerAssignmentWithStyle\" substitutionGroup=\"ifc:IfcPresentationLayerAssignment\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPresentationLayerAssignmentWithStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPresentationLayerAssignment\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LayerNumber\" type=\"xs:long\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LayerOn\" type=\"ex:logical\"/>\r\n\t\t\t\t\t<xs:element name=\"LayerOnInAllViews\" type=\"ex:logical\"/>\r\n\t\t\t\t\t<xs:element name=\"LayerFrozen\" type=\"ex:logical\"/>\r\n\t\t\t\t\t<xs:element name=\"LayerFrozenInAllViews\" type=\"ex:logical\"/>\r\n\t\t\t\t\t<xs:element name=\"LayerBlocked\" type=\"ex:logical\"/>\r\n\t\t\t\t\t<xs:element name=\"LayerColour\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerCurveWidth\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerCurveFont\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPresentationStyleAssignment\" type=\"ifc:IfcPresentationStyleAssignment\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPresentationStyleAssignment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Styles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPresentationStyleSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProcedure\" type=\"ifc:IfcProcedure\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProcedure\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProcedureID\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"ProcedureType\" type=\"ifc:IfcProcedureTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedProcedureType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProcess\" type=\"ifc:IfcProcess\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProcess\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProduct\" type=\"ifc:IfcProduct\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProduct\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ObjectPlacement\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectPlacement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Representation\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProductRepresentation\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProductDefinitionShape\" type=\"ifc:IfcProductDefinitionShape\" substitutionGroup=\"ifc:IfcProductRepresentation\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProductDefinitionShape\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProductRepresentation\" type=\"ifc:IfcProductRepresentation\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProductRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Representations\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentation\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProductsOfCombustionProperties\" type=\"ifc:IfcProductsOfCombustionProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProductsOfCombustionProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SpecificHeatCapacity\" type=\"ifc:IfcSpecificHeatCapacityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"N20Content\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"COContent\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CO2Content\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProfileDef\" type=\"ifc:IfcProfileDef\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProfileDef\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProfileType\" type=\"ifc:IfcProfileTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ProfileName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProfileProperties\" type=\"ifc:IfcProfileProperties\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProfileProperties\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProfileName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ProfileDefinition\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProject\" type=\"ifc:IfcProject\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProject\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LongName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Phase\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RepresentationContexts\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentationContext\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UnitsInContext\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcUnitAssignment\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProjectOrder\" type=\"ifc:IfcProjectOrder\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProjectOrder\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ID\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcProjectOrderTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"Status\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProjectOrderRecord\" type=\"ifc:IfcProjectOrderRecord\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProjectOrderRecord\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Records\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelAssignsToProjectOrder\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRelAssignsToProjectOrder\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcProjectOrderRecordTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProjectionCurve\" type=\"ifc:IfcProjectionCurve\" substitutionGroup=\"ifc:IfcAnnotationCurveOccurrence\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProjectionCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationCurveOccurrence\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProjectionElement\" type=\"ifc:IfcProjectionElement\" substitutionGroup=\"ifc:IfcFeatureElementAddition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProjectionElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementAddition\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProperty\" type=\"ifc:IfcProperty\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProperty\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertyBoundedValue\" type=\"ifc:IfcPropertyBoundedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertyBoundedValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UpperBoundValue\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LowerBoundValue\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertyConstraintRelationship\" type=\"ifc:IfcPropertyConstraintRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertyConstraintRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertyDefinition\" type=\"ifc:IfcPropertyDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertyDefinition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertyDependencyRelationship\" type=\"ifc:IfcPropertyDependencyRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertyDependencyRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DependingProperty\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DependantProperty\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Expression\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertyEnumeratedValue\" type=\"ifc:IfcPropertyEnumeratedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertyEnumeratedValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EnumerationReference\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyEnumeration\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertyEnumeration\" type=\"ifc:IfcPropertyEnumeration\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertyEnumeration\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertyListValue\" type=\"ifc:IfcPropertyListValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertyListValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ListValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertyReferenceValue\" type=\"ifc:IfcPropertyReferenceValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertyReferenceValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UsageName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PropertyReference\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertySet\" type=\"ifc:IfcPropertySet\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertySet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HasProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertySetDefinition\" type=\"ifc:IfcPropertySetDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertySetDefinition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertySingleValue\" type=\"ifc:IfcPropertySingleValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertySingleValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NominalValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPropertyTableValue\" type=\"ifc:IfcPropertyTableValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPropertyTableValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DefiningValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DefinedValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Expression\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DefiningUnit\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DefinedUnit\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProtectiveDeviceType\" type=\"ifc:IfcProtectiveDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProtectiveDeviceType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcProxy\" type=\"ifc:IfcProxy\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcProxy\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProxyType\" type=\"ifc:IfcObjectTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"Tag\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcPumpType\" type=\"ifc:IfcPumpType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcPumpType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcQuantityArea\" type=\"ifc:IfcQuantityArea\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcQuantityArea\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AreaValue\" type=\"ifc:IfcAreaMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcQuantityCount\" type=\"ifc:IfcQuantityCount\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcQuantityCount\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CountValue\" type=\"ifc:IfcCountMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcQuantityLength\" type=\"ifc:IfcQuantityLength\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcQuantityLength\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LengthValue\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcQuantityTime\" type=\"ifc:IfcQuantityTime\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcQuantityTime\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TimeValue\" type=\"ifc:IfcTimeMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcQuantityVolume\" type=\"ifc:IfcQuantityVolume\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcQuantityVolume\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VolumeValue\" type=\"ifc:IfcVolumeMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcQuantityWeight\" type=\"ifc:IfcQuantityWeight\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcQuantityWeight\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WeightValue\" type=\"ifc:IfcMassMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRadiusDimension\" type=\"ifc:IfcRadiusDimension\" substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRadiusDimension\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRailing\" type=\"ifc:IfcRailing\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRailing\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRailingType\" type=\"ifc:IfcRailingType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRailingType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRamp\" type=\"ifc:IfcRamp\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRamp\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShapeType\" type=\"ifc:IfcRampTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRampFlight\" type=\"ifc:IfcRampFlight\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRampFlight\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRampFlightType\" type=\"ifc:IfcRampFlightType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRampFlightType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRationalBezierCurve\" type=\"ifc:IfcRationalBezierCurve\" substitutionGroup=\"ifc:IfcBezierCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRationalBezierCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBezierCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WeightsData\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:double-wrapper\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:double-wrapper\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRectangleHollowProfileDef\" type=\"ifc:IfcRectangleHollowProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRectangleHollowProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"InnerFilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"OuterFilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRectangleProfileDef\" type=\"ifc:IfcRectangleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRectangleProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRectangularTrimmedSurface\" type=\"ifc:IfcRectangularTrimmedSurface\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRectangularTrimmedSurface\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"U1\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t\t<xs:element name=\"V1\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t\t<xs:element name=\"U2\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t\t<xs:element name=\"V2\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t\t<xs:element name=\"Usense\" type=\"xs:boolean\"/>\r\n\t\t\t\t\t<xs:element name=\"Vsense\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcReferencesValueDocument\" type=\"ifc:IfcReferencesValueDocument\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcReferencesValueDocument\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ReferencedDocument\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReferencingValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRegularTimeSeries\" type=\"ifc:IfcRegularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRegularTimeSeries\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TimeStep\" type=\"ifc:IfcTimeMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"Values\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeriesValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTimeSeriesValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcReinforcementBarProperties\" type=\"ifc:IfcReinforcementBarProperties\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcReinforcementBarProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TotalCrossSectionArea\" type=\"ifc:IfcAreaMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"SteelGrade\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"EffectiveDepth\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"NominalBarDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"BarCount\" type=\"ifc:IfcCountMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcReinforcementDefinitionProperties\" type=\"ifc:IfcReinforcementDefinitionProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcReinforcementDefinitionProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DefinitionType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ReinforcementSectionDefinitions\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionReinforcementProperties\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSectionReinforcementProperties\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcReinforcingBar\" type=\"ifc:IfcReinforcingBar\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcReinforcingBar\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"BarLength\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"BarRole\" type=\"ifc:IfcReinforcingBarRoleEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcReinforcingElement\" type=\"ifc:IfcReinforcingElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcBuildingElementComponent\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcReinforcingElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementComponent\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SteelGrade\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcReinforcingMesh\" type=\"ifc:IfcReinforcingMesh\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcReinforcingMesh\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MeshLength\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MeshWidth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAggregates\" type=\"ifc:IfcRelAggregates\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAggregates\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssigns\" type=\"ifc:IfcRelAssigns\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssigns\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcObject\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjectsType\" type=\"ifc:IfcObjectTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssignsTasks\" type=\"ifc:IfcRelAssignsTasks\" substitutionGroup=\"ifc:IfcRelAssignsToControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssignsTasks\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TimeForTask\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcScheduleTimeControl\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssignsToActor\" type=\"ifc:IfcRelAssignsToActor\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssignsToActor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingActor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActor\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ActingRole\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssignsToControl\" type=\"ifc:IfcRelAssignsToControl\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssignsToControl\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingControl\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcControl\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssignsToGroup\" type=\"ifc:IfcRelAssignsToGroup\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssignsToGroup\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingGroup\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGroup\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssignsToProcess\" type=\"ifc:IfcRelAssignsToProcess\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssignsToProcess\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProcess\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"QuantityInProcess\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssignsToProduct\" type=\"ifc:IfcRelAssignsToProduct\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssignsToProduct\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingProduct\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssignsToProjectOrder\" type=\"ifc:IfcRelAssignsToProjectOrder\" substitutionGroup=\"ifc:IfcRelAssignsToControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssignsToProjectOrder\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToControl\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssignsToResource\" type=\"ifc:IfcRelAssignsToResource\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssignsToResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingResource\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcResource\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssociates\" type=\"ifc:IfcRelAssociates\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssociates\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRoot\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRoot\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssociatesAppliedValue\" type=\"ifc:IfcRelAssociatesAppliedValue\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssociatesAppliedValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingAppliedValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssociatesApproval\" type=\"ifc:IfcRelAssociatesApproval\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssociatesApproval\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingApproval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssociatesClassification\" type=\"ifc:IfcRelAssociatesClassification\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssociatesClassification\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingClassification\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssociatesConstraint\" type=\"ifc:IfcRelAssociatesConstraint\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssociatesConstraint\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Intent\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssociatesDocument\" type=\"ifc:IfcRelAssociatesDocument\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssociatesDocument\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssociatesLibrary\" type=\"ifc:IfcRelAssociatesLibrary\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssociatesLibrary\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingLibrary\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLibrarySelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssociatesMaterial\" type=\"ifc:IfcRelAssociatesMaterial\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssociatesMaterial\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMaterialSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelAssociatesProfileProperties\" type=\"ifc:IfcRelAssociatesProfileProperties\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelAssociatesProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingProfileProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileProperties\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ProfileSectionLocation\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelConnects\" type=\"ifc:IfcRelConnects\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelConnects\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelConnectsElements\" type=\"ifc:IfcRelConnectsElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelConnectsElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectionGeometry\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelConnectsPathElements\" type=\"ifc:IfcRelConnectsPathElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelConnectsPathElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingPriorities\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:long-wrapper\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:long-wrapper\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedPriorities\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:long-wrapper\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:long-wrapper\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedConnectionType\" type=\"ifc:IfcConnectionTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"RelatingConnectionType\" type=\"ifc:IfcConnectionTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelConnectsPortToElement\" type=\"ifc:IfcRelConnectsPortToElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelConnectsPortToElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingPort\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPort\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelConnectsPorts\" type=\"ifc:IfcRelConnectsPorts\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelConnectsPorts\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingPort\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPort\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedPort\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPort\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RealizingElement\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelConnectsStructuralActivity\" type=\"ifc:IfcRelConnectsStructuralActivity\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelConnectsStructuralActivity\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedStructuralActivity\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralActivity\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelConnectsStructuralMember\" type=\"ifc:IfcRelConnectsStructuralMember\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelConnectsStructuralMember\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingStructuralMember\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralMember\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedStructuralConnection\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralConnection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCondition\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AdditionalConditions\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralConnectionCondition\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SupportedLength\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ConditionCoordinateSystem\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelConnectsWithRealizingElements\" type=\"ifc:IfcRelConnectsWithRealizingElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelConnectsWithRealizingElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RealizingElements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConnectionType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelContainedInSpatialStructure\" type=\"ifc:IfcRelContainedInSpatialStructure\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelContainedInSpatialStructure\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProduct\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingStructure\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelCoversBldgElements\" type=\"ifc:IfcRelCoversBldgElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelCoversBldgElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCovering\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelDecomposes\" type=\"ifc:IfcRelDecomposes\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelDecomposes\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingObject\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcObject\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelDefines\" type=\"ifc:IfcRelDefines\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelDefines\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcObject\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelDefinesByProperties\" type=\"ifc:IfcRelDefinesByProperties\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelDefinesByProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingPropertyDefinition\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelDefinesByType\" type=\"ifc:IfcRelDefinesByType\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelDefinesByType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingType\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTypeObject\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelFillsElement\" type=\"ifc:IfcRelFillsElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelFillsElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingOpeningElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOpeningElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelFlowControlElements\" type=\"ifc:IfcRelFlowControlElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelFlowControlElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedControlElements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionControlElement\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDistributionControlElement\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingFlowElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionFlowElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelInteractionRequirements\" type=\"ifc:IfcRelInteractionRequirements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelInteractionRequirements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DailyInteraction\" type=\"ifc:IfcCountMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ImportanceRating\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LocationOfInteraction\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedSpaceProgram\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpaceProgram\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingSpaceProgram\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpaceProgram\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelNests\" type=\"ifc:IfcRelNests\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelNests\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelOccupiesSpaces\" type=\"ifc:IfcRelOccupiesSpaces\" substitutionGroup=\"ifc:IfcRelAssignsToActor\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelOccupiesSpaces\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToActor\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelOverridesProperties\" type=\"ifc:IfcRelOverridesProperties\" substitutionGroup=\"ifc:IfcRelDefinesByProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelOverridesProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDefinesByProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverridingProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelProjectsElement\" type=\"ifc:IfcRelProjectsElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelProjectsElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedFeatureElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFeatureElementAddition\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelSchedulesCostItems\" type=\"ifc:IfcRelSchedulesCostItems\" substitutionGroup=\"ifc:IfcRelAssignsToControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelSchedulesCostItems\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToControl\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelSequence\" type=\"ifc:IfcRelSequence\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelSequence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProcess\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedProcess\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProcess\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeLag\" type=\"ifc:IfcTimeMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"SequenceType\" type=\"ifc:IfcSequenceEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelServicesBuildings\" type=\"ifc:IfcRelServicesBuildings\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelServicesBuildings\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingSystem\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSystem\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedBuildings\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSpatialStructureElement\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelSpaceBoundary\" type=\"ifc:IfcRelSpaceBoundary\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelSpaceBoundary\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingSpace\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpace\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectionGeometry\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PhysicalOrVirtualBoundary\" type=\"ifc:IfcPhysicalOrVirtualEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"InternalOrExternalBoundary\" type=\"ifc:IfcInternalOrExternalEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelVoidsElement\" type=\"ifc:IfcRelVoidsElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelVoidsElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedOpeningElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFeatureElementSubtraction\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelationship\" type=\"ifc:IfcRelationship\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelationship\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRelaxation\" type=\"ifc:IfcRelaxation\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRelaxation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelaxationValue\" type=\"ifc:IfcNormalisedRatioMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"InitialStress\" type=\"ifc:IfcNormalisedRatioMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRepresentation\" type=\"ifc:IfcRepresentation\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ContextOfItems\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RepresentationIdentifier\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RepresentationType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Items\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentationItem\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRepresentationContext\" type=\"ifc:IfcRepresentationContext\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRepresentationContext\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ContextIdentifier\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ContextType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRepresentationItem\" type=\"ifc:IfcRepresentationItem\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRepresentationItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRepresentationMap\" type=\"ifc:IfcRepresentationMap\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRepresentationMap\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MappingOrigin\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MappedRepresentation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcResource\" type=\"ifc:IfcResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcResource\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRevolvedAreaSolid\" type=\"ifc:IfcRevolvedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRevolvedAreaSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Axis\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis1Placement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Angle\" type=\"ifc:IfcPlaneAngleMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRibPlateProfileProperties\" type=\"ifc:IfcRibPlateProfileProperties\" substitutionGroup=\"ifc:IfcProfileProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRibPlateProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RibHeight\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RibWidth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RibSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Direction\" type=\"ifc:IfcRibPlateDirectionEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRoof\" type=\"ifc:IfcRoof\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRoof\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShapeType\" type=\"ifc:IfcRoofTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRoot\" type=\"ifc:IfcRoot\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRoot\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"GlobalId\" type=\"ifc:IfcGloballyUniqueId\"/>\r\n\t\t\t\t\t<xs:element name=\"OwnerHistory\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOwnerHistory\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRoundedEdgeFeature\" type=\"ifc:IfcRoundedEdgeFeature\" substitutionGroup=\"ifc:IfcEdgeFeature\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRoundedEdgeFeature\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEdgeFeature\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcRoundedRectangleProfileDef\" type=\"ifc:IfcRoundedRectangleProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcRoundedRectangleProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RoundingRadius\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:complexType name=\"IfcSIUnit-temp\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:restriction base=\"ifc:IfcNamedUnit\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UnitType\" type=\"ifc:IfcUnitEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:restriction>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSIUnit\" type=\"ifc:IfcSIUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSIUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSIUnit-temp\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Prefix\" type=\"ifc:IfcSIPrefix\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcSIUnitName\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSanitaryTerminalType\" type=\"ifc:IfcSanitaryTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSanitaryTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcScheduleTimeControl\" type=\"ifc:IfcScheduleTimeControl\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcScheduleTimeControl\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ActualStart\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EarlyStart\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LateStart\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ScheduleStart\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ActualFinish\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EarlyFinish\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LateFinish\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ScheduleFinish\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ScheduleDuration\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ActualDuration\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RemainingTime\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FreeFloat\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TotalFloat\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"IsCritical\" type=\"xs:boolean\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"StatusTime\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartFloat\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FinishFloat\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Completion\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSectionProperties\" type=\"ifc:IfcSectionProperties\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSectionProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SectionType\" type=\"ifc:IfcSectionTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"StartProfile\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EndProfile\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSectionReinforcementProperties\" type=\"ifc:IfcSectionReinforcementProperties\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSectionReinforcementProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalStartPosition\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalEndPosition\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"TransversePosition\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ReinforcementRole\" type=\"ifc:IfcReinforcingBarRoleEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"SectionDefinition\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionProperties\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionReinforcementDefinitions\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReinforcementBarProperties\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcReinforcementBarProperties\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSectionedSpine\" type=\"ifc:IfcSectionedSpine\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSectionedSpine\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SpineCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCompositeCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CrossSections\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProfileDef\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionPositions\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAxis2Placement3D\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSensorType\" type=\"ifc:IfcSensorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSensorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcServiceLife\" type=\"ifc:IfcServiceLife\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcServiceLife\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ServiceLifeType\" type=\"ifc:IfcServiceLifeTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ServiceLifeDuration\" type=\"ifc:IfcTimeMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcServiceLifeFactor\" type=\"ifc:IfcServiceLifeFactor\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcServiceLifeFactor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcServiceLifeFactorTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"UpperValue\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MostUsedValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LowerValue\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcShapeAspect\" type=\"ifc:IfcShapeAspect\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcShapeAspect\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShapeRepresentations\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeRepresentation\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcShapeRepresentation\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ProductDefinitional\" type=\"ex:logical\"/>\r\n\t\t\t\t\t<xs:element name=\"PartOfProductDefinitionShape\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProductDefinitionShape\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcShapeRepresentation\" type=\"ifc:IfcShapeRepresentation\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcShapeRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcShellBasedSurfaceModel\" type=\"ifc:IfcShellBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcShellBasedSurfaceModel\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SbsmBoundary\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcShell\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcShell\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSimpleProperty\" type=\"ifc:IfcSimpleProperty\" abstract=\"true\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSimpleProperty\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProperty\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSite\" type=\"ifc:IfcSite\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSite\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RefLatitude\" type=\"ifc:IfcCompoundPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RefLongitude\" type=\"ifc:IfcCompoundPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RefElevation\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LandTitleNumber\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SiteAddress\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPostalAddress\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSlab\" type=\"ifc:IfcSlab\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSlab\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSlabType\" type=\"ifc:IfcSlabType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSlabType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSlippageConnectionCondition\" type=\"ifc:IfcSlippageConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSlippageConnectionCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SlippageX\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SlippageY\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SlippageZ\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSolidModel\" type=\"ifc:IfcSolidModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSolidModel\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSoundProperties\" type=\"ifc:IfcSoundProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSoundProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"IsAttenuating\" type=\"ifc:IfcBoolean\"/>\r\n\t\t\t\t\t<xs:element name=\"SoundScale\" type=\"ifc:IfcSoundScaleEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PointOfMeasurement\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLocalPlacement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SoundValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSoundValue\" maxOccurs=\"8\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSoundValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSoundValue\" type=\"ifc:IfcSoundValue\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSoundValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SoundLevelTimeSeries\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Frequency\" type=\"ifc:IfcFrequencyMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"SoundLevelSingleValue\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDerivedMeasureValue\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSpace\" type=\"ifc:IfcSpace\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSpace\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"InteriorOrExteriorSpace\" type=\"ifc:IfcInternalOrExternalEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ElevationWithFlooring\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSpaceHeaterType\" type=\"ifc:IfcSpaceHeaterType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSpaceHeaterType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSpaceProgram\" type=\"ifc:IfcSpaceProgram\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSpaceProgram\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SpaceProgramIdentifier\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"MaxRequiredArea\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MinRequiredArea\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RequestedLocation\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StandardRequiredArea\" type=\"ifc:IfcAreaMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSpaceThermalLoadProperties\" type=\"ifc:IfcSpaceThermalLoadProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSpaceThermalLoadProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApplicableValueRatio\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThermalLoadSource\" type=\"ifc:IfcThermalLoadSourceEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"PropertySource\" type=\"ifc:IfcPropertySourceEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"SourceDescription\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MaximumValue\" type=\"ifc:IfcPowerMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"MinimumValue\" type=\"ifc:IfcPowerMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThermalLoadTimeSeriesValues\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedThermalLoadSource\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedPropertySource\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThermalLoadType\" type=\"ifc:IfcThermalLoadTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSpatialStructureElement\" type=\"ifc:IfcSpatialStructureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSpatialStructureElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LongName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CompositionType\" type=\"ifc:IfcElementCompositionEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStackTerminalType\" type=\"ifc:IfcStackTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStackTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStair\" type=\"ifc:IfcStair\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStair\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShapeType\" type=\"ifc:IfcStairTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStairFlight\" type=\"ifc:IfcStairFlight\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStairFlight\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NumberOfRiser\" type=\"xs:long\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"NumberOfTreads\" type=\"xs:long\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RiserHeight\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TreadLength\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStairFlightType\" type=\"ifc:IfcStairFlightType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStairFlightType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralAction\" type=\"ifc:IfcStructuralAction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralAction\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DestabilizingLoad\" type=\"xs:boolean\"/>\r\n\t\t\t\t\t<xs:element name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"CausedBy\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralReaction\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralActivity\" type=\"ifc:IfcStructuralActivity\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralActivity\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AppliedLoad\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoad\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"GlobalOrLocal\" type=\"ifc:IfcGlobalOrLocalEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralAnalysisModel\" type=\"ifc:IfcStructuralAnalysisModel\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralAnalysisModel\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAnalysisModelTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"OrientationOf2DPlane\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LoadedBy\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralLoadGroup\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HasResults\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralResultGroup\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralResultGroup\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralConnection\" type=\"ifc:IfcStructuralConnection\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralConnection\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCondition\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralConnectionCondition\" type=\"ifc:IfcStructuralConnectionCondition\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralConnectionCondition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralCurveConnection\" type=\"ifc:IfcStructuralCurveConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralCurveConnection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralCurveMember\" type=\"ifc:IfcStructuralCurveMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralCurveMember\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralCurveMemberVarying\" type=\"ifc:IfcStructuralCurveMemberVarying\" substitutionGroup=\"ifc:IfcStructuralCurveMember\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralCurveMemberVarying\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveMember\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralItem\" type=\"ifc:IfcStructuralItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLinearAction\" type=\"ifc:IfcStructuralLinearAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLinearAction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLinearActionVarying\" type=\"ifc:IfcStructuralLinearActionVarying\" substitutionGroup=\"ifc:IfcStructuralLinearAction\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLinearActionVarying\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLinearAction\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VaryingAppliedLoadLocation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SubsequentAppliedLoads\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoad\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralLoad\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoad\" type=\"ifc:IfcStructuralLoad\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoad\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoadGroup\" type=\"ifc:IfcStructuralLoadGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoadGroup\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcLoadGroupTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ActionType\" type=\"ifc:IfcActionTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ActionSource\" type=\"ifc:IfcActionSourceTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"Coefficient\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Purpose\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoadLinearForce\" type=\"ifc:IfcStructuralLoadLinearForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoadLinearForce\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LinearForceX\" type=\"ifc:IfcLinearForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearForceY\" type=\"ifc:IfcLinearForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearForceZ\" type=\"ifc:IfcLinearForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearMomentX\" type=\"ifc:IfcLinearMomentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearMomentY\" type=\"ifc:IfcLinearMomentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LinearMomentZ\" type=\"ifc:IfcLinearMomentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoadPlanarForce\" type=\"ifc:IfcStructuralLoadPlanarForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoadPlanarForce\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PlanarForceX\" type=\"ifc:IfcPlanarForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PlanarForceY\" type=\"ifc:IfcPlanarForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PlanarForceZ\" type=\"ifc:IfcPlanarForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacement\" type=\"ifc:IfcStructuralLoadSingleDisplacement\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DisplacementX\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DisplacementY\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DisplacementZ\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RotationalDisplacementRX\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RotationalDisplacementRY\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"RotationalDisplacementRZ\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacementDistortion\" type=\"ifc:IfcStructuralLoadSingleDisplacementDistortion\" substitutionGroup=\"ifc:IfcStructuralLoadSingleDisplacement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacementDistortion\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleDisplacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Distortion\" type=\"ifc:IfcCurvatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoadSingleForce\" type=\"ifc:IfcStructuralLoadSingleForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoadSingleForce\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ForceX\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ForceY\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ForceZ\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MomentX\" type=\"ifc:IfcTorqueMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MomentY\" type=\"ifc:IfcTorqueMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MomentZ\" type=\"ifc:IfcTorqueMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoadSingleForceWarping\" type=\"ifc:IfcStructuralLoadSingleForceWarping\" substitutionGroup=\"ifc:IfcStructuralLoadSingleForce\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoadSingleForceWarping\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleForce\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WarpingMoment\" type=\"ifc:IfcWarpingMomentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoadStatic\" type=\"ifc:IfcStructuralLoadStatic\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoadStatic\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralLoadTemperature\" type=\"ifc:IfcStructuralLoadTemperature\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralLoadTemperature\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DeltaT_Constant\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DeltaT_Y\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DeltaT_Z\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralMember\" type=\"ifc:IfcStructuralMember\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralMember\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralPlanarAction\" type=\"ifc:IfcStructuralPlanarAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralPlanarAction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralPlanarActionVarying\" type=\"ifc:IfcStructuralPlanarActionVarying\" substitutionGroup=\"ifc:IfcStructuralPlanarAction\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralPlanarActionVarying\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralPlanarAction\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VaryingAppliedLoadLocation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SubsequentAppliedLoads\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoad\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralLoad\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralPointAction\" type=\"ifc:IfcStructuralPointAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralPointAction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralPointConnection\" type=\"ifc:IfcStructuralPointConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralPointConnection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralPointReaction\" type=\"ifc:IfcStructuralPointReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralPointReaction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralProfileProperties\" type=\"ifc:IfcStructuralProfileProperties\" substitutionGroup=\"ifc:IfcGeneralProfileProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeneralProfileProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TorsionalConstantX\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MomentOfInertiaYZ\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MomentOfInertiaY\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MomentOfInertiaZ\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"WarpingConstant\" type=\"ifc:IfcWarpingConstantMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShearCentreZ\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShearCentreY\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShearDeformationAreaZ\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShearDeformationAreaY\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MaximumSectionModulusY\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MinimumSectionModulusY\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MaximumSectionModulusZ\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MinimumSectionModulusZ\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TorsionalSectionModulus\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralReaction\" type=\"ifc:IfcStructuralReaction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralReaction\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralResultGroup\" type=\"ifc:IfcStructuralResultGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralResultGroup\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TheoryType\" type=\"ifc:IfcAnalysisTheoryTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ResultForLoadGroup\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IsLinear\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralSteelProfileProperties\" type=\"ifc:IfcStructuralSteelProfileProperties\" substitutionGroup=\"ifc:IfcStructuralProfileProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralSteelProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralProfileProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShearAreaZ\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShearAreaY\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PlasticShapeFactorY\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PlasticShapeFactorZ\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralSurfaceConnection\" type=\"ifc:IfcStructuralSurfaceConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralSurfaceConnection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralSurfaceMember\" type=\"ifc:IfcStructuralSurfaceMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralSurfaceMember\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuralSurfaceMemberVarying\" type=\"ifc:IfcStructuralSurfaceMemberVarying\" substitutionGroup=\"ifc:IfcStructuralSurfaceMember\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuralSurfaceMemberVarying\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceMember\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SubsequentThickness\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VaryingThicknessLocation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStructuredDimensionCallout\" type=\"ifc:IfcStructuredDimensionCallout\" substitutionGroup=\"ifc:IfcDraughtingCallout\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStructuredDimensionCallout\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCallout\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStyledItem\" type=\"ifc:IfcStyledItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStyledItem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Item\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Styles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPresentationStyleAssignment\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPresentationStyleAssignment\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcStyledRepresentation\" type=\"ifc:IfcStyledRepresentation\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcStyledRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSubContractResource\" type=\"ifc:IfcSubContractResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSubContractResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SubContractor\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"JobDescription\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSubedge\" type=\"ifc:IfcSubedge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSubedge\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ParentEdge\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcEdge\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurface\" type=\"ifc:IfcSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurface\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceCurveSweptAreaSolid\" type=\"ifc:IfcSurfaceCurveSweptAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceCurveSweptAreaSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Directrix\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartParam\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t\t<xs:element name=\"EndParam\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t\t<xs:element name=\"ReferenceSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceOfLinearExtrusion\" type=\"ifc:IfcSurfaceOfLinearExtrusion\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceOfLinearExtrusion\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceOfRevolution\" type=\"ifc:IfcSurfaceOfRevolution\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceOfRevolution\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AxisPosition\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis1Placement\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceStyle\" type=\"ifc:IfcSurfaceStyle\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Side\" type=\"ifc:IfcSurfaceSide\"/>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Styles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\" maxOccurs=\"5\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSurfaceStyleElementSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceStyleLighting\" type=\"ifc:IfcSurfaceStyleLighting\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceStyleLighting\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DiffuseReflectionColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransmissionColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReflectanceColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceStyleRefraction\" type=\"ifc:IfcSurfaceStyleRefraction\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceStyleRefraction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RefractionIndex\" type=\"ifc:IfcReal\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DispersionFactor\" type=\"ifc:IfcReal\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceStyleRendering\" type=\"ifc:IfcSurfaceStyleRendering\" substitutionGroup=\"ifc:IfcSurfaceStyleShading\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceStyleRendering\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceStyleShading\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Transparency\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DiffuseColour\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransmissionColour\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReflectionColour\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SpecularColour\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SpecularHighlight\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReflectanceMethod\" type=\"ifc:IfcReflectanceMethodEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceStyleShading\" type=\"ifc:IfcSurfaceStyleShading\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceStyleShading\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SurfaceColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceStyleWithTextures\" type=\"ifc:IfcSurfaceStyleWithTextures\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceStyleWithTextures\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Textures\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSurfaceTexture\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSurfaceTexture\" type=\"ifc:IfcSurfaceTexture\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSurfaceTexture\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RepeatS\" type=\"xs:boolean\"/>\r\n\t\t\t\t\t<xs:element name=\"RepeatT\" type=\"xs:boolean\"/>\r\n\t\t\t\t\t<xs:element name=\"TextureType\" type=\"ifc:IfcSurfaceTextureEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"TextureTransform\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator2D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSweptAreaSolid\" type=\"ifc:IfcSweptAreaSolid\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSweptAreaSolid\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SweptArea\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSweptDiskSolid\" type=\"ifc:IfcSweptDiskSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSweptDiskSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Directrix\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"InnerRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"StartParam\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t\t<xs:element name=\"EndParam\" type=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSweptSurface\" type=\"ifc:IfcSweptSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSweptSurface\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SweptCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSwitchingDeviceType\" type=\"ifc:IfcSwitchingDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSwitchingDeviceType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSymbolStyle\" type=\"ifc:IfcSymbolStyle\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSymbolStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"StyleOfSymbol\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSymbolStyleSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSystem\" type=\"ifc:IfcSystem\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSystem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcSystemFurnitureElementType\" type=\"ifc:IfcSystemFurnitureElementType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcSystemFurnitureElementType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTShapeProfileDef\" type=\"ifc:IfcTShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeEdgeRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"WebEdgeRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"WebSlope\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTable\" type=\"ifc:IfcTable\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTable\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"xs:normalizedString\"/>\r\n\t\t\t\t\t<xs:element name=\"Rows\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableRow\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTableRow\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTableRow\" type=\"ifc:IfcTableRow\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTableRow\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RowCells\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IsHeading\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTankType\" type=\"ifc:IfcTankType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTankType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTask\" type=\"ifc:IfcTask\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTask\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TaskId\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"Status\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"WorkMethod\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"IsMilestone\" type=\"xs:boolean\"/>\r\n\t\t\t\t\t<xs:element name=\"Priority\" type=\"xs:long\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTelecomAddress\" type=\"ifc:IfcTelecomAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTelecomAddress\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TelephoneNumbers\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FacsimileNumbers\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PagerNumber\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ElectronicMailAddresses\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WWWHomePageURL\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTendon\" type=\"ifc:IfcTendon\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTendon\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"TensionForce\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PreStress\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FrictionCoefficient\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"AnchorageSlip\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MinCurvatureRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTendonAnchor\" type=\"ifc:IfcTendonAnchor\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTendonAnchor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTerminatorSymbol\" type=\"ifc:IfcTerminatorSymbol\" substitutionGroup=\"ifc:IfcAnnotationSymbolOccurrence\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTerminatorSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationSymbolOccurrence\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AnnotatedCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAnnotationCurveOccurrence\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextLiteral\" type=\"ifc:IfcTextLiteral\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextLiteral\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Literal\" type=\"ifc:IfcPresentableText\"/>\r\n\t\t\t\t\t<xs:element name=\"Placement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Alignment\" type=\"ifc:IfcTextAlignment\"/>\r\n\t\t\t\t\t<xs:element name=\"Path\" type=\"ifc:IfcTextPath\"/>\r\n\t\t\t\t\t<xs:element name=\"Font\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFontSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextLiteralWithExtent\" type=\"ifc:IfcTextLiteralWithExtent\" substitutionGroup=\"ifc:IfcTextLiteral\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextLiteralWithExtent\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTextLiteral\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Extent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPlanarExtent\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextStyle\" type=\"ifc:IfcTextStyle\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"CharacterGlyphAppearance\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCharacterStyleSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TextStyles\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTextStyleSelect\" maxOccurs=\"3\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTextStyleSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextStyleWithBoxCharacteristics\" type=\"ifc:IfcTextStyleWithBoxCharacteristics\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextStyleWithBoxCharacteristics\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BoxHeight\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"BoxWidth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"BoxSlantAngle\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"BoxRotateAngle\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextStyleWithMirror\" type=\"ifc:IfcTextStyleWithMirror\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextStyleWithMirror\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MirrorPlacement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextStyleWithSpacing\" type=\"ifc:IfcTextStyleWithSpacing\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextStyleWithSpacing\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CharacterSpacing\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCharacterSpacingSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextureCoordinate\" type=\"ifc:IfcTextureCoordinate\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextureCoordinate\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Texture\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleWithTextures\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextureCoordinateGenerator\" type=\"ifc:IfcTextureCoordinateGenerator\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextureCoordinateGenerator\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Mode\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Parameter\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSimpleValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSimpleValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextureMap\" type=\"ifc:IfcTextureMap\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextureMap\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VertexBasedTextures\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertexBasedTextureMap\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcVertexBasedTextureMap\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTextureVertex\" type=\"ifc:IfcTextureVertex\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTextureVertex\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Coordinates\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcParameterValue\" minOccurs=\"2\" maxOccurs=\"2\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcParameterValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcThermalMaterialProperties\" type=\"ifc:IfcThermalMaterialProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcThermalMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SpecificHeatCapacity\" type=\"ifc:IfcSpecificHeatCapacityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"BoilingPoint\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FreezingPoint\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ThermalConductivity\" type=\"ifc:IfcThermalConductivityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTimeSeries\" type=\"ifc:IfcTimeSeries\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTimeSeries\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\r\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"StartTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EndTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeSeriesDataType\" type=\"ifc:IfcTimeSeriesDataTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedDataOrigin\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTimeSeriesReferenceRelationship\" type=\"ifc:IfcTimeSeriesReferenceRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTimeSeriesReferenceRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ReferencedTimeSeries\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeSeriesReferences\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDocumentSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTimeSeriesSchedule\" type=\"ifc:IfcTimeSeriesSchedule\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTimeSeriesSchedule\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApplicableDates\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeSeriesScheduleType\" type=\"ifc:IfcTimeSeriesScheduleTypeEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"TimeSeries\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTimeSeriesValue\" type=\"ifc:IfcTimeSeriesValue\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTimeSeriesValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ListValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTopologicalRepresentationItem\" type=\"ifc:IfcTopologicalRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTopologicalRepresentationItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTopologyRepresentation\" type=\"ifc:IfcTopologyRepresentation\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTopologyRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTransformerType\" type=\"ifc:IfcTransformerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTransformerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTransportElement\" type=\"ifc:IfcTransportElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTransportElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcTransportElementTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CapacityByWeight\" type=\"ifc:IfcMassMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CapacityByNumber\" type=\"ifc:IfcCountMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTransportElementType\" type=\"ifc:IfcTransportElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTransportElementType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTrapeziumProfileDef\" type=\"ifc:IfcTrapeziumProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTrapeziumProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BottomXDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"TopXDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"TopXOffset\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTrimmedCurve\" type=\"ifc:IfcTrimmedCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTrimmedCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Trim1\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Trim2\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SenseAgreement\" type=\"xs:boolean\"/>\r\n\t\t\t\t\t<xs:element name=\"MasterRepresentation\" type=\"ifc:IfcTrimmingPreference\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTubeBundleType\" type=\"ifc:IfcTubeBundleType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTubeBundleType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTwoDirectionRepeatFactor\" type=\"ifc:IfcTwoDirectionRepeatFactor\" substitutionGroup=\"ifc:IfcOneDirectionRepeatFactor\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTwoDirectionRepeatFactor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcOneDirectionRepeatFactor\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SecondRepeatFactor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTypeObject\" type=\"ifc:IfcTypeObject\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTypeObject\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApplicableOccurrence\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"HasPropertySets\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcTypeProduct\" type=\"ifc:IfcTypeProduct\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcTypeProduct\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RepresentationMaps\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentationMap\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Tag\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcUShapeProfileDef\" type=\"ifc:IfcUShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcUShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"EdgeRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcUnitAssignment\" type=\"ifc:IfcUnitAssignment\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcUnitAssignment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Units\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcUnit\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcUnitaryEquipmentType\" type=\"ifc:IfcUnitaryEquipmentType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcUnitaryEquipmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcValveType\" type=\"ifc:IfcValveType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcValveType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcVector\" type=\"ifc:IfcVector\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcVector\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Orientation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Magnitude\" type=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcVertex\" type=\"ifc:IfcVertex\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcVertex\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcVertexBasedTextureMap\" type=\"ifc:IfcVertexBasedTextureMap\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcVertexBasedTextureMap\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TextureVertices\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextureVertex\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTextureVertex\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VertexBasedGeometry\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPolyLoop\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcVertexLoop\" type=\"ifc:IfcVertexLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcVertexLoop\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LoopVertex\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertex\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcVertexPoint\" type=\"ifc:IfcVertexPoint\" substitutionGroup=\"ifc:IfcVertex\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcVertexPoint\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcVertex\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VertexGeometry\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcVibrationIsolatorType\" type=\"ifc:IfcVibrationIsolatorType\" substitutionGroup=\"ifc:IfcDiscreteAccessoryType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcVibrationIsolatorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDiscreteAccessoryType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcVirtualElement\" type=\"ifc:IfcVirtualElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcVirtualElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcVirtualGridIntersection\" type=\"ifc:IfcVirtualGridIntersection\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcVirtualGridIntersection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"IntersectingAxes\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" minOccurs=\"2\" maxOccurs=\"2\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OffsetDistances\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\" minOccurs=\"2\" maxOccurs=\"3\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWall\" type=\"ifc:IfcWall\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWall\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWallStandardCase\" type=\"ifc:IfcWallStandardCase\" substitutionGroup=\"ifc:IfcWall\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWallStandardCase\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcWall\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWallType\" type=\"ifc:IfcWallType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWallType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWasteTerminalType\" type=\"ifc:IfcWasteTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWasteTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWaterProperties\" type=\"ifc:IfcWaterProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWaterProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"IsPotable\" type=\"xs:boolean\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Hardness\" type=\"ifc:IfcIonConcentrationMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"AlkalinityConcentration\" type=\"ifc:IfcIonConcentrationMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"AcidityConcentration\" type=\"ifc:IfcIonConcentrationMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ImpuritiesContent\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"PHLevel\" type=\"ifc:IfcPHMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"DissolvedSolidsContent\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWindow\" type=\"ifc:IfcWindow\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWindow\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWindowLiningProperties\" type=\"ifc:IfcWindowLiningProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWindowLiningProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"LiningThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TransomThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"MullionThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FirstTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SecondTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FirstMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"SecondMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWindowPanelProperties\" type=\"ifc:IfcWindowPanelProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWindowPanelProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcWindowPanelOperationEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWindowStyle\" type=\"ifc:IfcWindowStyle\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWindowStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ConstructionType\" type=\"ifc:IfcWindowStyleConstructionEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcWindowStyleOperationEnum\"/>\r\n\t\t\t\t\t<xs:element name=\"ParameterTakesPrecedence\" type=\"xs:boolean\"/>\r\n\t\t\t\t\t<xs:element name=\"Sizeable\" type=\"xs:boolean\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWorkControl\" type=\"ifc:IfcWorkControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWorkControl\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Identifier\" type=\"ifc:IfcIdentifier\"/>\r\n\t\t\t\t\t<xs:element name=\"CreationDate\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Creators\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPerson\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Purpose\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"Duration\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"TotalFloat\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"StartTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FinishTime\" nillable=\"true\" minOccurs=\"0\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WorkControlType\" type=\"ifc:IfcWorkControlTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedControlType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWorkPlan\" type=\"ifc:IfcWorkPlan\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWorkPlan\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcWorkSchedule\" type=\"ifc:IfcWorkSchedule\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcWorkSchedule\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcZShapeProfileDef\" type=\"ifc:IfcZShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcZShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t\t<xs:element name=\"EdgeRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcZone\" type=\"ifc:IfcZone\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\r\n\t<xs:complexType name=\"IfcZone\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\"/>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<!-- group declarations (for SELECT data type definitions) -->\r\n\t<xs:complexType name=\"IfcActorSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcActorSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcAppliedValueSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcAppliedValueSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcAxis2Placement\">\r\n\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcAxis2Placement\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcBooleanOperand\">\r\n\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcBooleanOperand\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcHalfSpaceSolid\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcCharacterSpacingSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcCharacterSpacingSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCharacterSpacingSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcCharacterStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcCharacterStyleSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCharacterStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcClassificationNotationSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcClassificationNotationSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcClassificationNotation\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcColour\">\r\n\t\t<xs:group ref=\"ifc:IfcColour\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcColour\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcColourOrFactor\">\r\n\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcColourOrFactor\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcConditionCriterionSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcConditionCriterionSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcConditionCriterionSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcLabel\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcCsgSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcCsgSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCsgSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcCurveFontOrScaledCurveFontSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCurveFontOrScaledCurveFontSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontAndScaling\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcCurveStyleFontSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCurveStyleFontSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcDateTimeSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDateTimeSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLocalTime\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcDefinedSymbolSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcDefinedSymbolSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDefinedSymbolSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedSymbol\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSymbol\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcDerivedMeasureValue\">\r\n\t\t<xs:group ref=\"ifc:IfcDerivedMeasureValue\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDerivedMeasureValue\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcDocumentSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcDocumentSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDocumentSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcDraughtingCalloutElement\">\r\n\t\t<xs:group ref=\"ifc:IfcDraughtingCalloutElement\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDraughtingCalloutElement\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcAnnotationCurveOccurrence\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAnnotationTextOccurrence\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAnnotationSymbolOccurrence\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcFillAreaStyleTileShapeSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcFillAreaStyleTileShapeSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcFillAreaStyleTileShapeSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTileSymbolWithStyle\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcFillStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcFillStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleHatching\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTiles\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedHatchStyle\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcFontSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcFontSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcFontSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedTextFont\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedTextFont\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcGeometricSetSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcGeometricSetSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcLayeredItem\">\r\n\t\t<xs:group ref=\"ifc:IfcLayeredItem\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcLayeredItem\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRepresentation\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcLibrarySelect\">\r\n\t\t<xs:group ref=\"ifc:IfcLibrarySelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcLibrarySelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcLightDistributionDataSourceSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcLightDistributionDataSourceSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLightIntensityDistribution\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcMaterialSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcMaterialSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcMaterialSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterial\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayerSetUsage\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayerSet\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcMeasureValue\">\r\n\t\t<xs:group ref=\"ifc:IfcMeasureValue\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcMeasureValue\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcMetricValueSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcMetricValueSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLocalTime\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTable\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcText\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcObjectReferenceSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcObjectReferenceSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterial\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLocalTime\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAddress\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcPresentationStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcPresentationStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcNullStyle\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyle\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSymbolStyle\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyle\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTextStyle\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyle\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcShell\">\r\n\t\t<xs:group ref=\"ifc:IfcShell\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcShell\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcOpenShell\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcSimpleValue\">\r\n\t\t<xs:group ref=\"ifc:IfcSimpleValue\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSimpleValue\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcInteger\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcReal\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcBoolean\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcText\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLabel\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLogical\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcSizeSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSizeSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcSpecularHighlightSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSpecularHighlightSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcSpecularExponent\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSpecularRoughness\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcStructuralActivityAssignmentSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcStructuralActivityAssignmentSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcStructuralItem\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcBuildingElement\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcSurfaceStyleElementSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSurfaceStyleElementSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleShading\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleLighting\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleWithTextures\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSufaceStyle\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleRefraction\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcSymbolStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcSymbolStyleSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSymbolStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcTextStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcTextStyleSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcTextStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcTextStyleWithMirror\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTextStyleWithSpacing\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTextStyleWithBoxCharacteristics\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcTrimmingSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcTrimmingSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcUnit\">\r\n\t\t<xs:group ref=\"ifc:IfcUnit\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcUnit\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcDerivedUnit\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcValue\">\r\n\t\t<xs:group ref=\"ifc:IfcValue\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcValue\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcInteger\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcReal\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcBoolean\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcText\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLabel\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLogical\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<xs:complexType name=\"IfcVectorOrDirection\">\r\n\t\t<xs:group ref=\"ifc:IfcVectorOrDirection\"/>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcVectorOrDirection\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\r\n\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\t<!-- enumeration type declarations (for ENUMERATION data type definitions) -->\r\n\t<xs:element name=\"IfcActionSourceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcActionSourceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcActionSourceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dead_load_g\"/>\r\n\t\t\t<xs:enumeration value=\"completion_g1\"/>\r\n\t\t\t<xs:enumeration value=\"live_load_q\"/>\r\n\t\t\t<xs:enumeration value=\"snow_s\"/>\r\n\t\t\t<xs:enumeration value=\"wind_w\"/>\r\n\t\t\t<xs:enumeration value=\"prestressing_p\"/>\r\n\t\t\t<xs:enumeration value=\"settlement_u\"/>\r\n\t\t\t<xs:enumeration value=\"temperature_t\"/>\r\n\t\t\t<xs:enumeration value=\"earthquake_e\"/>\r\n\t\t\t<xs:enumeration value=\"fire\"/>\r\n\t\t\t<xs:enumeration value=\"impulse\"/>\r\n\t\t\t<xs:enumeration value=\"impact\"/>\r\n\t\t\t<xs:enumeration value=\"transport\"/>\r\n\t\t\t<xs:enumeration value=\"erection\"/>\r\n\t\t\t<xs:enumeration value=\"propping\"/>\r\n\t\t\t<xs:enumeration value=\"system_imperfection\"/>\r\n\t\t\t<xs:enumeration value=\"shrinkage\"/>\r\n\t\t\t<xs:enumeration value=\"creep\"/>\r\n\t\t\t<xs:enumeration value=\"lack_of_fit\"/>\r\n\t\t\t<xs:enumeration value=\"buoyancy\"/>\r\n\t\t\t<xs:enumeration value=\"ice\"/>\r\n\t\t\t<xs:enumeration value=\"current\"/>\r\n\t\t\t<xs:enumeration value=\"wave\"/>\r\n\t\t\t<xs:enumeration value=\"rain\"/>\r\n\t\t\t<xs:enumeration value=\"brakes\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcActionTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcActionTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcActionTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"permanent_g\"/>\r\n\t\t\t<xs:enumeration value=\"variable_q\"/>\r\n\t\t\t<xs:enumeration value=\"extraordinary_a\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcActuatorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcActuatorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcActuatorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"electricactuator\"/>\r\n\t\t\t<xs:enumeration value=\"handoperatedactuator\"/>\r\n\t\t\t<xs:enumeration value=\"hydraulicactuator\"/>\r\n\t\t\t<xs:enumeration value=\"pneumaticactuator\"/>\r\n\t\t\t<xs:enumeration value=\"thermostaticactuator\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAddressTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAddressTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAddressTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"office\"/>\r\n\t\t\t<xs:enumeration value=\"site\"/>\r\n\t\t\t<xs:enumeration value=\"home\"/>\r\n\t\t\t<xs:enumeration value=\"distributionpoint\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAheadOrBehind\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAheadOrBehind\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAheadOrBehind\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"ahead\"/>\r\n\t\t\t<xs:enumeration value=\"behind\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAirTerminalBoxTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAirTerminalBoxTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAirTerminalBoxTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"constantflow\"/>\r\n\t\t\t<xs:enumeration value=\"variableflowpressuredependant\"/>\r\n\t\t\t<xs:enumeration value=\"variableflowpressureindependant\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAirTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAirTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAirTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"grille\"/>\r\n\t\t\t<xs:enumeration value=\"register\"/>\r\n\t\t\t<xs:enumeration value=\"diffuser\"/>\r\n\t\t\t<xs:enumeration value=\"eyeball\"/>\r\n\t\t\t<xs:enumeration value=\"iris\"/>\r\n\t\t\t<xs:enumeration value=\"lineargrille\"/>\r\n\t\t\t<xs:enumeration value=\"lineardiffuser\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAirToAirHeatRecoveryTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAirToAirHeatRecoveryTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"fixedplatecounterflowexchanger\"/>\r\n\t\t\t<xs:enumeration value=\"fixedplatecrossflowexchanger\"/>\r\n\t\t\t<xs:enumeration value=\"fixedplateparallelflowexchanger\"/>\r\n\t\t\t<xs:enumeration value=\"rotarywheel\"/>\r\n\t\t\t<xs:enumeration value=\"runaroundcoilloop\"/>\r\n\t\t\t<xs:enumeration value=\"heatpipe\"/>\r\n\t\t\t<xs:enumeration value=\"twintowerenthalpyrecoveryloops\"/>\r\n\t\t\t<xs:enumeration value=\"thermosiphonsealedtubeheatexchangers\"/>\r\n\t\t\t<xs:enumeration value=\"thermosiphoncoiltypeheatexchangers\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAlarmTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAlarmTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAlarmTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bell\"/>\r\n\t\t\t<xs:enumeration value=\"breakglassbutton\"/>\r\n\t\t\t<xs:enumeration value=\"light\"/>\r\n\t\t\t<xs:enumeration value=\"manualpullbox\"/>\r\n\t\t\t<xs:enumeration value=\"siren\"/>\r\n\t\t\t<xs:enumeration value=\"whistle\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAnalysisModelTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAnalysisModelTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAnalysisModelTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"in_plane_loading_2d\"/>\r\n\t\t\t<xs:enumeration value=\"out_plane_loading_2d\"/>\r\n\t\t\t<xs:enumeration value=\"loading_3d\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAnalysisTheoryTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAnalysisTheoryTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAnalysisTheoryTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"first_order_theory\"/>\r\n\t\t\t<xs:enumeration value=\"second_order_theory\"/>\r\n\t\t\t<xs:enumeration value=\"third_order_theory\"/>\r\n\t\t\t<xs:enumeration value=\"full_nonlinear_theory\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcArithmeticOperatorEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcArithmeticOperatorEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcArithmeticOperatorEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"add\"/>\r\n\t\t\t<xs:enumeration value=\"divide\"/>\r\n\t\t\t<xs:enumeration value=\"multiply\"/>\r\n\t\t\t<xs:enumeration value=\"subtract\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAssemblyPlaceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAssemblyPlaceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAssemblyPlaceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"site\"/>\r\n\t\t\t<xs:enumeration value=\"factory\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcBSplineCurveForm\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBSplineCurveForm\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcBSplineCurveForm\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"polyline_form\"/>\r\n\t\t\t<xs:enumeration value=\"circular_arc\"/>\r\n\t\t\t<xs:enumeration value=\"elliptic_arc\"/>\r\n\t\t\t<xs:enumeration value=\"parabolic_arc\"/>\r\n\t\t\t<xs:enumeration value=\"hyperbolic_arc\"/>\r\n\t\t\t<xs:enumeration value=\"unspecified\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcBeamTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBeamTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcBeamTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"beam\"/>\r\n\t\t\t<xs:enumeration value=\"joist\"/>\r\n\t\t\t<xs:enumeration value=\"lintel\"/>\r\n\t\t\t<xs:enumeration value=\"t_beam\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcBenchmarkEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBenchmarkEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcBenchmarkEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"greaterthan\"/>\r\n\t\t\t<xs:enumeration value=\"greaterthanorequalto\"/>\r\n\t\t\t<xs:enumeration value=\"lessthan\"/>\r\n\t\t\t<xs:enumeration value=\"lessthanorequalto\"/>\r\n\t\t\t<xs:enumeration value=\"equalto\"/>\r\n\t\t\t<xs:enumeration value=\"notequalto\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcBoilerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBoilerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcBoilerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"water\"/>\r\n\t\t\t<xs:enumeration value=\"steam\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcBooleanOperator\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBooleanOperator\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcBooleanOperator\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"union\"/>\r\n\t\t\t<xs:enumeration value=\"intersection\"/>\r\n\t\t\t<xs:enumeration value=\"difference\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCableCarrierFittingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCableCarrierFittingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCableCarrierFittingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bend\"/>\r\n\t\t\t<xs:enumeration value=\"cross\"/>\r\n\t\t\t<xs:enumeration value=\"reducer\"/>\r\n\t\t\t<xs:enumeration value=\"tee\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCableCarrierSegmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCableCarrierSegmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCableCarrierSegmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cableladdersegment\"/>\r\n\t\t\t<xs:enumeration value=\"cabletraysegment\"/>\r\n\t\t\t<xs:enumeration value=\"cabletrunkingsegment\"/>\r\n\t\t\t<xs:enumeration value=\"conduitsegment\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCableSegmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCableSegmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCableSegmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cablesegment\"/>\r\n\t\t\t<xs:enumeration value=\"conductorsegment\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcChangeActionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcChangeActionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcChangeActionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"nochange\"/>\r\n\t\t\t<xs:enumeration value=\"modified\"/>\r\n\t\t\t<xs:enumeration value=\"added\"/>\r\n\t\t\t<xs:enumeration value=\"deleted\"/>\r\n\t\t\t<xs:enumeration value=\"modifiedadded\"/>\r\n\t\t\t<xs:enumeration value=\"modifieddeleted\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcChillerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcChillerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcChillerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"aircooled\"/>\r\n\t\t\t<xs:enumeration value=\"watercooled\"/>\r\n\t\t\t<xs:enumeration value=\"heatrecovery\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCoilTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCoilTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCoilTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dxcoolingcoil\"/>\r\n\t\t\t<xs:enumeration value=\"watercoolingcoil\"/>\r\n\t\t\t<xs:enumeration value=\"steamheatingcoil\"/>\r\n\t\t\t<xs:enumeration value=\"waterheatingcoil\"/>\r\n\t\t\t<xs:enumeration value=\"electricheatingcoil\"/>\r\n\t\t\t<xs:enumeration value=\"gasheatingcoil\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcColumnTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcColumnTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcColumnTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"column\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCompressorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCompressorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCompressorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dynamic\"/>\r\n\t\t\t<xs:enumeration value=\"reciprocating\"/>\r\n\t\t\t<xs:enumeration value=\"rotary\"/>\r\n\t\t\t<xs:enumeration value=\"scroll\"/>\r\n\t\t\t<xs:enumeration value=\"trochoidal\"/>\r\n\t\t\t<xs:enumeration value=\"singlestage\"/>\r\n\t\t\t<xs:enumeration value=\"booster\"/>\r\n\t\t\t<xs:enumeration value=\"opentype\"/>\r\n\t\t\t<xs:enumeration value=\"hermetic\"/>\r\n\t\t\t<xs:enumeration value=\"semihermetic\"/>\r\n\t\t\t<xs:enumeration value=\"weldedshellhermetic\"/>\r\n\t\t\t<xs:enumeration value=\"rollingpiston\"/>\r\n\t\t\t<xs:enumeration value=\"rotaryvane\"/>\r\n\t\t\t<xs:enumeration value=\"singlescrew\"/>\r\n\t\t\t<xs:enumeration value=\"twinscrew\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCondenserTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCondenserTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCondenserTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"watercooledshelltube\"/>\r\n\t\t\t<xs:enumeration value=\"watercooledshellcoil\"/>\r\n\t\t\t<xs:enumeration value=\"watercooledtubeintube\"/>\r\n\t\t\t<xs:enumeration value=\"watercooledbrazedplate\"/>\r\n\t\t\t<xs:enumeration value=\"aircooled\"/>\r\n\t\t\t<xs:enumeration value=\"evaporativecooled\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcConnectionTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcConnectionTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcConnectionTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"atpath\"/>\r\n\t\t\t<xs:enumeration value=\"atstart\"/>\r\n\t\t\t<xs:enumeration value=\"atend\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcConstraintEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcConstraintEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcConstraintEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"hard\"/>\r\n\t\t\t<xs:enumeration value=\"soft\"/>\r\n\t\t\t<xs:enumeration value=\"advisory\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcControllerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcControllerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcControllerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"floating\"/>\r\n\t\t\t<xs:enumeration value=\"proportional\"/>\r\n\t\t\t<xs:enumeration value=\"proportionalintegral\"/>\r\n\t\t\t<xs:enumeration value=\"proportionalintegralderivative\"/>\r\n\t\t\t<xs:enumeration value=\"timedtwoposition\"/>\r\n\t\t\t<xs:enumeration value=\"twoposition\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCooledBeamTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCooledBeamTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCooledBeamTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"active\"/>\r\n\t\t\t<xs:enumeration value=\"passive\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCoolingTowerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCoolingTowerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCoolingTowerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"naturaldraft\"/>\r\n\t\t\t<xs:enumeration value=\"mechanicalinduceddraft\"/>\r\n\t\t\t<xs:enumeration value=\"mechanicalforceddraft\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCostScheduleTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCostScheduleTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCostScheduleTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"budget\"/>\r\n\t\t\t<xs:enumeration value=\"costplan\"/>\r\n\t\t\t<xs:enumeration value=\"estimate\"/>\r\n\t\t\t<xs:enumeration value=\"tender\"/>\r\n\t\t\t<xs:enumeration value=\"pricedbillofquantities\"/>\r\n\t\t\t<xs:enumeration value=\"unpricedbillofquantities\"/>\r\n\t\t\t<xs:enumeration value=\"scheduleofrates\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCoveringTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCoveringTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCoveringTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"ceiling\"/>\r\n\t\t\t<xs:enumeration value=\"flooring\"/>\r\n\t\t\t<xs:enumeration value=\"cladding\"/>\r\n\t\t\t<xs:enumeration value=\"roofing\"/>\r\n\t\t\t<xs:enumeration value=\"insulation\"/>\r\n\t\t\t<xs:enumeration value=\"membrane\"/>\r\n\t\t\t<xs:enumeration value=\"sleeving\"/>\r\n\t\t\t<xs:enumeration value=\"wrapping\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCurrencyEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCurrencyEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCurrencyEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"aed\"/>\r\n\t\t\t<xs:enumeration value=\"aes\"/>\r\n\t\t\t<xs:enumeration value=\"ats\"/>\r\n\t\t\t<xs:enumeration value=\"aud\"/>\r\n\t\t\t<xs:enumeration value=\"bbd\"/>\r\n\t\t\t<xs:enumeration value=\"beg\"/>\r\n\t\t\t<xs:enumeration value=\"bgl\"/>\r\n\t\t\t<xs:enumeration value=\"bhd\"/>\r\n\t\t\t<xs:enumeration value=\"bmd\"/>\r\n\t\t\t<xs:enumeration value=\"bnd\"/>\r\n\t\t\t<xs:enumeration value=\"brl\"/>\r\n\t\t\t<xs:enumeration value=\"bsd\"/>\r\n\t\t\t<xs:enumeration value=\"bwp\"/>\r\n\t\t\t<xs:enumeration value=\"bzd\"/>\r\n\t\t\t<xs:enumeration value=\"cad\"/>\r\n\t\t\t<xs:enumeration value=\"cbd\"/>\r\n\t\t\t<xs:enumeration value=\"chf\"/>\r\n\t\t\t<xs:enumeration value=\"clp\"/>\r\n\t\t\t<xs:enumeration value=\"cny\"/>\r\n\t\t\t<xs:enumeration value=\"cys\"/>\r\n\t\t\t<xs:enumeration value=\"czk\"/>\r\n\t\t\t<xs:enumeration value=\"ddp\"/>\r\n\t\t\t<xs:enumeration value=\"dem\"/>\r\n\t\t\t<xs:enumeration value=\"dkk\"/>\r\n\t\t\t<xs:enumeration value=\"egl\"/>\r\n\t\t\t<xs:enumeration value=\"est\"/>\r\n\t\t\t<xs:enumeration value=\"eur\"/>\r\n\t\t\t<xs:enumeration value=\"fak\"/>\r\n\t\t\t<xs:enumeration value=\"fim\"/>\r\n\t\t\t<xs:enumeration value=\"fjd\"/>\r\n\t\t\t<xs:enumeration value=\"fkp\"/>\r\n\t\t\t<xs:enumeration value=\"frf\"/>\r\n\t\t\t<xs:enumeration value=\"gbp\"/>\r\n\t\t\t<xs:enumeration value=\"gip\"/>\r\n\t\t\t<xs:enumeration value=\"gmd\"/>\r\n\t\t\t<xs:enumeration value=\"grx\"/>\r\n\t\t\t<xs:enumeration value=\"hkd\"/>\r\n\t\t\t<xs:enumeration value=\"huf\"/>\r\n\t\t\t<xs:enumeration value=\"ick\"/>\r\n\t\t\t<xs:enumeration value=\"idr\"/>\r\n\t\t\t<xs:enumeration value=\"ils\"/>\r\n\t\t\t<xs:enumeration value=\"inr\"/>\r\n\t\t\t<xs:enumeration value=\"irp\"/>\r\n\t\t\t<xs:enumeration value=\"itl\"/>\r\n\t\t\t<xs:enumeration value=\"jmd\"/>\r\n\t\t\t<xs:enumeration value=\"jod\"/>\r\n\t\t\t<xs:enumeration value=\"jpy\"/>\r\n\t\t\t<xs:enumeration value=\"kes\"/>\r\n\t\t\t<xs:enumeration value=\"krw\"/>\r\n\t\t\t<xs:enumeration value=\"kwd\"/>\r\n\t\t\t<xs:enumeration value=\"kyd\"/>\r\n\t\t\t<xs:enumeration value=\"lkr\"/>\r\n\t\t\t<xs:enumeration value=\"luf\"/>\r\n\t\t\t<xs:enumeration value=\"mtl\"/>\r\n\t\t\t<xs:enumeration value=\"mur\"/>\r\n\t\t\t<xs:enumeration value=\"mxn\"/>\r\n\t\t\t<xs:enumeration value=\"myr\"/>\r\n\t\t\t<xs:enumeration value=\"nlg\"/>\r\n\t\t\t<xs:enumeration value=\"nzd\"/>\r\n\t\t\t<xs:enumeration value=\"omr\"/>\r\n\t\t\t<xs:enumeration value=\"pgk\"/>\r\n\t\t\t<xs:enumeration value=\"php\"/>\r\n\t\t\t<xs:enumeration value=\"pkr\"/>\r\n\t\t\t<xs:enumeration value=\"pln\"/>\r\n\t\t\t<xs:enumeration value=\"ptn\"/>\r\n\t\t\t<xs:enumeration value=\"qar\"/>\r\n\t\t\t<xs:enumeration value=\"rur\"/>\r\n\t\t\t<xs:enumeration value=\"sar\"/>\r\n\t\t\t<xs:enumeration value=\"scr\"/>\r\n\t\t\t<xs:enumeration value=\"sek\"/>\r\n\t\t\t<xs:enumeration value=\"sgd\"/>\r\n\t\t\t<xs:enumeration value=\"skp\"/>\r\n\t\t\t<xs:enumeration value=\"thb\"/>\r\n\t\t\t<xs:enumeration value=\"trl\"/>\r\n\t\t\t<xs:enumeration value=\"ttd\"/>\r\n\t\t\t<xs:enumeration value=\"twd\"/>\r\n\t\t\t<xs:enumeration value=\"usd\"/>\r\n\t\t\t<xs:enumeration value=\"veb\"/>\r\n\t\t\t<xs:enumeration value=\"vnd\"/>\r\n\t\t\t<xs:enumeration value=\"xeu\"/>\r\n\t\t\t<xs:enumeration value=\"zar\"/>\r\n\t\t\t<xs:enumeration value=\"zwd\"/>\r\n\t\t\t<xs:enumeration value=\"nok\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDamperTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDamperTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDamperTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"controldamper\"/>\r\n\t\t\t<xs:enumeration value=\"firedamper\"/>\r\n\t\t\t<xs:enumeration value=\"smokedamper\"/>\r\n\t\t\t<xs:enumeration value=\"firesmokedamper\"/>\r\n\t\t\t<xs:enumeration value=\"backdraftdamper\"/>\r\n\t\t\t<xs:enumeration value=\"reliefdamper\"/>\r\n\t\t\t<xs:enumeration value=\"blastdamper\"/>\r\n\t\t\t<xs:enumeration value=\"gravitydamper\"/>\r\n\t\t\t<xs:enumeration value=\"gravityreliefdamper\"/>\r\n\t\t\t<xs:enumeration value=\"balancingdamper\"/>\r\n\t\t\t<xs:enumeration value=\"fumehoodexhaust\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDataOriginEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDataOriginEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDataOriginEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"measured\"/>\r\n\t\t\t<xs:enumeration value=\"predicted\"/>\r\n\t\t\t<xs:enumeration value=\"simulated\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDerivedUnitEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDerivedUnitEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDerivedUnitEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"angularvelocityunit\"/>\r\n\t\t\t<xs:enumeration value=\"compoundplaneangleunit\"/>\r\n\t\t\t<xs:enumeration value=\"dynamicviscosityunit\"/>\r\n\t\t\t<xs:enumeration value=\"heatfluxdensityunit\"/>\r\n\t\t\t<xs:enumeration value=\"integercountrateunit\"/>\r\n\t\t\t<xs:enumeration value=\"isothermalmoisturecapacityunit\"/>\r\n\t\t\t<xs:enumeration value=\"kinematicviscosityunit\"/>\r\n\t\t\t<xs:enumeration value=\"linearvelocityunit\"/>\r\n\t\t\t<xs:enumeration value=\"massdensityunit\"/>\r\n\t\t\t<xs:enumeration value=\"massflowrateunit\"/>\r\n\t\t\t<xs:enumeration value=\"moisturediffusivityunit\"/>\r\n\t\t\t<xs:enumeration value=\"molecularweightunit\"/>\r\n\t\t\t<xs:enumeration value=\"specificheatcapacityunit\"/>\r\n\t\t\t<xs:enumeration value=\"thermaladmittanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"thermalconductanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"thermalresistanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"thermaltransmittanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"vaporpermeabilityunit\"/>\r\n\t\t\t<xs:enumeration value=\"volumetricflowrateunit\"/>\r\n\t\t\t<xs:enumeration value=\"rotationalfrequencyunit\"/>\r\n\t\t\t<xs:enumeration value=\"torqueunit\"/>\r\n\t\t\t<xs:enumeration value=\"momentofinertiaunit\"/>\r\n\t\t\t<xs:enumeration value=\"linearmomentunit\"/>\r\n\t\t\t<xs:enumeration value=\"linearforceunit\"/>\r\n\t\t\t<xs:enumeration value=\"planarforceunit\"/>\r\n\t\t\t<xs:enumeration value=\"modulusofelasticityunit\"/>\r\n\t\t\t<xs:enumeration value=\"shearmodulusunit\"/>\r\n\t\t\t<xs:enumeration value=\"linearstiffnessunit\"/>\r\n\t\t\t<xs:enumeration value=\"rotationalstiffnessunit\"/>\r\n\t\t\t<xs:enumeration value=\"modulusofsubgradereactionunit\"/>\r\n\t\t\t<xs:enumeration value=\"accelerationunit\"/>\r\n\t\t\t<xs:enumeration value=\"curvatureunit\"/>\r\n\t\t\t<xs:enumeration value=\"heatingvalueunit\"/>\r\n\t\t\t<xs:enumeration value=\"ionconcentrationunit\"/>\r\n\t\t\t<xs:enumeration value=\"luminousintensitydistributionunit\"/>\r\n\t\t\t<xs:enumeration value=\"massperlengthunit\"/>\r\n\t\t\t<xs:enumeration value=\"modulusoflinearsubgradereactionunit\"/>\r\n\t\t\t<xs:enumeration value=\"modulusofrotationalsubgradereactionunit\"/>\r\n\t\t\t<xs:enumeration value=\"phunit\"/>\r\n\t\t\t<xs:enumeration value=\"rotationalmassunit\"/>\r\n\t\t\t<xs:enumeration value=\"sectionareaintegralunit\"/>\r\n\t\t\t<xs:enumeration value=\"sectionmodulusunit\"/>\r\n\t\t\t<xs:enumeration value=\"soundpowerunit\"/>\r\n\t\t\t<xs:enumeration value=\"soundpressureunit\"/>\r\n\t\t\t<xs:enumeration value=\"temperaturegradientunit\"/>\r\n\t\t\t<xs:enumeration value=\"thermalexpansioncoefficientunit\"/>\r\n\t\t\t<xs:enumeration value=\"warpingconstantunit\"/>\r\n\t\t\t<xs:enumeration value=\"warpingmomentunit\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDimensionExtentUsage\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDimensionExtentUsage\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDimensionExtentUsage\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"origin\"/>\r\n\t\t\t<xs:enumeration value=\"target\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDirectionSenseEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDirectionSenseEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDirectionSenseEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"positive\"/>\r\n\t\t\t<xs:enumeration value=\"negative\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDistributionChamberElementTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDistributionChamberElementTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDistributionChamberElementTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"formedduct\"/>\r\n\t\t\t<xs:enumeration value=\"inspectionchamber\"/>\r\n\t\t\t<xs:enumeration value=\"inspectionpit\"/>\r\n\t\t\t<xs:enumeration value=\"manhole\"/>\r\n\t\t\t<xs:enumeration value=\"meterchamber\"/>\r\n\t\t\t<xs:enumeration value=\"sump\"/>\r\n\t\t\t<xs:enumeration value=\"trench\"/>\r\n\t\t\t<xs:enumeration value=\"valvechamber\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDocumentConfidentialityEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDocumentConfidentialityEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDocumentConfidentialityEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"public\"/>\r\n\t\t\t<xs:enumeration value=\"restricted\"/>\r\n\t\t\t<xs:enumeration value=\"confidential\"/>\r\n\t\t\t<xs:enumeration value=\"personal\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDocumentStatusEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDocumentStatusEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDocumentStatusEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"draft\"/>\r\n\t\t\t<xs:enumeration value=\"finaldraft\"/>\r\n\t\t\t<xs:enumeration value=\"final\"/>\r\n\t\t\t<xs:enumeration value=\"revision\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDoorPanelOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorPanelOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDoorPanelOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"swinging\"/>\r\n\t\t\t<xs:enumeration value=\"double_acting\"/>\r\n\t\t\t<xs:enumeration value=\"sliding\"/>\r\n\t\t\t<xs:enumeration value=\"folding\"/>\r\n\t\t\t<xs:enumeration value=\"revolving\"/>\r\n\t\t\t<xs:enumeration value=\"rollingup\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDoorPanelPositionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorPanelPositionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDoorPanelPositionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"left\"/>\r\n\t\t\t<xs:enumeration value=\"middle\"/>\r\n\t\t\t<xs:enumeration value=\"right\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDoorStyleConstructionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorStyleConstructionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDoorStyleConstructionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"aluminium\"/>\r\n\t\t\t<xs:enumeration value=\"high_grade_steel\"/>\r\n\t\t\t<xs:enumeration value=\"steel\"/>\r\n\t\t\t<xs:enumeration value=\"wood\"/>\r\n\t\t\t<xs:enumeration value=\"aluminium_wood\"/>\r\n\t\t\t<xs:enumeration value=\"aluminium_plastic\"/>\r\n\t\t\t<xs:enumeration value=\"plastic\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDoorStyleOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorStyleOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDoorStyleOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"single_swing_left\"/>\r\n\t\t\t<xs:enumeration value=\"single_swing_right\"/>\r\n\t\t\t<xs:enumeration value=\"double_door_single_swing\"/>\r\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_left\"/>\r\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_right\"/>\r\n\t\t\t<xs:enumeration value=\"double_swing_left\"/>\r\n\t\t\t<xs:enumeration value=\"double_swing_right\"/>\r\n\t\t\t<xs:enumeration value=\"double_door_double_swing\"/>\r\n\t\t\t<xs:enumeration value=\"sliding_to_left\"/>\r\n\t\t\t<xs:enumeration value=\"sliding_to_right\"/>\r\n\t\t\t<xs:enumeration value=\"double_door_sliding\"/>\r\n\t\t\t<xs:enumeration value=\"folding_to_left\"/>\r\n\t\t\t<xs:enumeration value=\"folding_to_right\"/>\r\n\t\t\t<xs:enumeration value=\"double_door_folding\"/>\r\n\t\t\t<xs:enumeration value=\"revolving\"/>\r\n\t\t\t<xs:enumeration value=\"rollingup\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDuctFittingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDuctFittingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDuctFittingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bend\"/>\r\n\t\t\t<xs:enumeration value=\"connector\"/>\r\n\t\t\t<xs:enumeration value=\"entry\"/>\r\n\t\t\t<xs:enumeration value=\"exit\"/>\r\n\t\t\t<xs:enumeration value=\"junction\"/>\r\n\t\t\t<xs:enumeration value=\"obstruction\"/>\r\n\t\t\t<xs:enumeration value=\"transition\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDuctSegmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDuctSegmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDuctSegmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\r\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDuctSilencerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDuctSilencerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDuctSilencerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"flatoval\"/>\r\n\t\t\t<xs:enumeration value=\"rectangular\"/>\r\n\t\t\t<xs:enumeration value=\"round\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricApplianceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricApplianceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricApplianceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"computer\"/>\r\n\t\t\t<xs:enumeration value=\"directwaterheater\"/>\r\n\t\t\t<xs:enumeration value=\"dishwasher\"/>\r\n\t\t\t<xs:enumeration value=\"electriccooker\"/>\r\n\t\t\t<xs:enumeration value=\"electricheater\"/>\r\n\t\t\t<xs:enumeration value=\"facsimile\"/>\r\n\t\t\t<xs:enumeration value=\"freestandingfan\"/>\r\n\t\t\t<xs:enumeration value=\"freezer\"/>\r\n\t\t\t<xs:enumeration value=\"fridge_freezer\"/>\r\n\t\t\t<xs:enumeration value=\"handdryer\"/>\r\n\t\t\t<xs:enumeration value=\"indirectwaterheater\"/>\r\n\t\t\t<xs:enumeration value=\"microwave\"/>\r\n\t\t\t<xs:enumeration value=\"photocopier\"/>\r\n\t\t\t<xs:enumeration value=\"printer\"/>\r\n\t\t\t<xs:enumeration value=\"refrigerator\"/>\r\n\t\t\t<xs:enumeration value=\"radiantheater\"/>\r\n\t\t\t<xs:enumeration value=\"scanner\"/>\r\n\t\t\t<xs:enumeration value=\"telephone\"/>\r\n\t\t\t<xs:enumeration value=\"tumbledryer\"/>\r\n\t\t\t<xs:enumeration value=\"tv\"/>\r\n\t\t\t<xs:enumeration value=\"vendingmachine\"/>\r\n\t\t\t<xs:enumeration value=\"washingmachine\"/>\r\n\t\t\t<xs:enumeration value=\"waterheater\"/>\r\n\t\t\t<xs:enumeration value=\"watercooler\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricCurrentEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricCurrentEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"alternating\"/>\r\n\t\t\t<xs:enumeration value=\"direct\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricDistributionPointFunctionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricDistributionPointFunctionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricDistributionPointFunctionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"alarmpanel\"/>\r\n\t\t\t<xs:enumeration value=\"consumerunit\"/>\r\n\t\t\t<xs:enumeration value=\"controlpanel\"/>\r\n\t\t\t<xs:enumeration value=\"distributionboard\"/>\r\n\t\t\t<xs:enumeration value=\"gasdetectorpanel\"/>\r\n\t\t\t<xs:enumeration value=\"indicatorpanel\"/>\r\n\t\t\t<xs:enumeration value=\"mimicpanel\"/>\r\n\t\t\t<xs:enumeration value=\"motorcontrolcentre\"/>\r\n\t\t\t<xs:enumeration value=\"switchboard\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricFlowStorageDeviceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricFlowStorageDeviceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"battery\"/>\r\n\t\t\t<xs:enumeration value=\"capacitorbank\"/>\r\n\t\t\t<xs:enumeration value=\"harmonicfilter\"/>\r\n\t\t\t<xs:enumeration value=\"inductorbank\"/>\r\n\t\t\t<xs:enumeration value=\"ups\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricGeneratorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricGeneratorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricGeneratorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricHeaterTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricHeaterTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricHeaterTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"electricpointheater\"/>\r\n\t\t\t<xs:enumeration value=\"electriccableheater\"/>\r\n\t\t\t<xs:enumeration value=\"electricmatheater\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricMotorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricMotorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricMotorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dc\"/>\r\n\t\t\t<xs:enumeration value=\"induction\"/>\r\n\t\t\t<xs:enumeration value=\"polyphase\"/>\r\n\t\t\t<xs:enumeration value=\"reluctancesynchronous\"/>\r\n\t\t\t<xs:enumeration value=\"synchronous\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricTimeControlTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricTimeControlTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricTimeControlTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"timeclock\"/>\r\n\t\t\t<xs:enumeration value=\"timedelay\"/>\r\n\t\t\t<xs:enumeration value=\"relay\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElementAssemblyTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElementAssemblyTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElementAssemblyTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"accessory_assembly\"/>\r\n\t\t\t<xs:enumeration value=\"arch\"/>\r\n\t\t\t<xs:enumeration value=\"beam_grid\"/>\r\n\t\t\t<xs:enumeration value=\"braced_frame\"/>\r\n\t\t\t<xs:enumeration value=\"girder\"/>\r\n\t\t\t<xs:enumeration value=\"reinforcement_unit\"/>\r\n\t\t\t<xs:enumeration value=\"rigid_frame\"/>\r\n\t\t\t<xs:enumeration value=\"slab_field\"/>\r\n\t\t\t<xs:enumeration value=\"truss\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElementCompositionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElementCompositionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElementCompositionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"complex\"/>\r\n\t\t\t<xs:enumeration value=\"element\"/>\r\n\t\t\t<xs:enumeration value=\"partial\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcEnergySequenceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergySequenceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcEnergySequenceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"primary\"/>\r\n\t\t\t<xs:enumeration value=\"secondary\"/>\r\n\t\t\t<xs:enumeration value=\"tertiary\"/>\r\n\t\t\t<xs:enumeration value=\"auxiliary\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcEnvironmentalImpactCategoryEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEnvironmentalImpactCategoryEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcEnvironmentalImpactCategoryEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"combinedvalue\"/>\r\n\t\t\t<xs:enumeration value=\"disposal\"/>\r\n\t\t\t<xs:enumeration value=\"extraction\"/>\r\n\t\t\t<xs:enumeration value=\"installation\"/>\r\n\t\t\t<xs:enumeration value=\"manufacture\"/>\r\n\t\t\t<xs:enumeration value=\"transportation\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcEvaporativeCoolerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEvaporativeCoolerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcEvaporativeCoolerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"directevaporativerandommediaaircooler\"/>\r\n\t\t\t<xs:enumeration value=\"directevaporativerigidmediaaircooler\"/>\r\n\t\t\t<xs:enumeration value=\"directevaporativeslingerspackagedaircooler\"/>\r\n\t\t\t<xs:enumeration value=\"directevaporativepackagedrotaryaircooler\"/>\r\n\t\t\t<xs:enumeration value=\"directevaporativeairwasher\"/>\r\n\t\t\t<xs:enumeration value=\"indirectevaporativepackageaircooler\"/>\r\n\t\t\t<xs:enumeration value=\"indirectevaporativewetcoil\"/>\r\n\t\t\t<xs:enumeration value=\"indirectevaporativecoolingtowerorcoilcooler\"/>\r\n\t\t\t<xs:enumeration value=\"indirectdirectcombination\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcEvaporatorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEvaporatorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcEvaporatorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"directexpansionshellandtube\"/>\r\n\t\t\t<xs:enumeration value=\"directexpansiontubeintube\"/>\r\n\t\t\t<xs:enumeration value=\"directexpansionbrazedplate\"/>\r\n\t\t\t<xs:enumeration value=\"floodedshellandtube\"/>\r\n\t\t\t<xs:enumeration value=\"shellandcoil\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcFanTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFanTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcFanTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"centrifugalforwardcurved\"/>\r\n\t\t\t<xs:enumeration value=\"centrifugalradial\"/>\r\n\t\t\t<xs:enumeration value=\"centrifugalbackwardinclinedcurved\"/>\r\n\t\t\t<xs:enumeration value=\"centrifugalairfoil\"/>\r\n\t\t\t<xs:enumeration value=\"tubeaxial\"/>\r\n\t\t\t<xs:enumeration value=\"vaneaxial\"/>\r\n\t\t\t<xs:enumeration value=\"propelloraxial\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcFilterTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFilterTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcFilterTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"airparticlefilter\"/>\r\n\t\t\t<xs:enumeration value=\"odorfilter\"/>\r\n\t\t\t<xs:enumeration value=\"oilfilter\"/>\r\n\t\t\t<xs:enumeration value=\"strainer\"/>\r\n\t\t\t<xs:enumeration value=\"waterfilter\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcFireSuppressionTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFireSuppressionTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcFireSuppressionTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"breechinginlet\"/>\r\n\t\t\t<xs:enumeration value=\"firehydrant\"/>\r\n\t\t\t<xs:enumeration value=\"hosereel\"/>\r\n\t\t\t<xs:enumeration value=\"sprinkler\"/>\r\n\t\t\t<xs:enumeration value=\"sprinklerdeflector\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcFlowDirectionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFlowDirectionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcFlowDirectionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"source\"/>\r\n\t\t\t<xs:enumeration value=\"sink\"/>\r\n\t\t\t<xs:enumeration value=\"sourceandsink\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcFlowInstrumentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFlowInstrumentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcFlowInstrumentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"pressuregauge\"/>\r\n\t\t\t<xs:enumeration value=\"thermometer\"/>\r\n\t\t\t<xs:enumeration value=\"ammeter\"/>\r\n\t\t\t<xs:enumeration value=\"frequencymeter\"/>\r\n\t\t\t<xs:enumeration value=\"powerfactormeter\"/>\r\n\t\t\t<xs:enumeration value=\"phaseanglemeter\"/>\r\n\t\t\t<xs:enumeration value=\"voltmeter_peak\"/>\r\n\t\t\t<xs:enumeration value=\"voltmeter_rms\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcFlowMeterTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFlowMeterTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcFlowMeterTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"electricmeter\"/>\r\n\t\t\t<xs:enumeration value=\"energymeter\"/>\r\n\t\t\t<xs:enumeration value=\"flowmeter\"/>\r\n\t\t\t<xs:enumeration value=\"gasmeter\"/>\r\n\t\t\t<xs:enumeration value=\"oilmeter\"/>\r\n\t\t\t<xs:enumeration value=\"watermeter\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcFootingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFootingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcFootingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"footing_beam\"/>\r\n\t\t\t<xs:enumeration value=\"pad_footing\"/>\r\n\t\t\t<xs:enumeration value=\"pile_cap\"/>\r\n\t\t\t<xs:enumeration value=\"strip_footing\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcGasTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcGasTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcGasTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"gasappliance\"/>\r\n\t\t\t<xs:enumeration value=\"gasbooster\"/>\r\n\t\t\t<xs:enumeration value=\"gasburner\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcGeometricProjectionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcGeometricProjectionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcGeometricProjectionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"graph_view\"/>\r\n\t\t\t<xs:enumeration value=\"sketch_view\"/>\r\n\t\t\t<xs:enumeration value=\"model_view\"/>\r\n\t\t\t<xs:enumeration value=\"plan_view\"/>\r\n\t\t\t<xs:enumeration value=\"reflected_plan_view\"/>\r\n\t\t\t<xs:enumeration value=\"section_view\"/>\r\n\t\t\t<xs:enumeration value=\"elevation_view\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcGlobalOrLocalEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcGlobalOrLocalEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcGlobalOrLocalEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"global_coords\"/>\r\n\t\t\t<xs:enumeration value=\"local_coords\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcHeatExchangerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatExchangerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcHeatExchangerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"plate\"/>\r\n\t\t\t<xs:enumeration value=\"shellandtube\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcHumidifierTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHumidifierTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcHumidifierTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"steaminjection\"/>\r\n\t\t\t<xs:enumeration value=\"adiabaticairwasher\"/>\r\n\t\t\t<xs:enumeration value=\"adiabaticpan\"/>\r\n\t\t\t<xs:enumeration value=\"adiabaticwettedelement\"/>\r\n\t\t\t<xs:enumeration value=\"adiabaticatomizing\"/>\r\n\t\t\t<xs:enumeration value=\"adiabaticultrasonic\"/>\r\n\t\t\t<xs:enumeration value=\"adiabaticrigidmedia\"/>\r\n\t\t\t<xs:enumeration value=\"adiabaticcompressedairnozzle\"/>\r\n\t\t\t<xs:enumeration value=\"assistedelectric\"/>\r\n\t\t\t<xs:enumeration value=\"assistednaturalgas\"/>\r\n\t\t\t<xs:enumeration value=\"assistedpropane\"/>\r\n\t\t\t<xs:enumeration value=\"assistedbutane\"/>\r\n\t\t\t<xs:enumeration value=\"assistedsteam\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcInternalOrExternalEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcInternalOrExternalEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcInternalOrExternalEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"internal\"/>\r\n\t\t\t<xs:enumeration value=\"external\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcInventoryTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcInventoryTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcInventoryTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"assetinventory\"/>\r\n\t\t\t<xs:enumeration value=\"spaceinventory\"/>\r\n\t\t\t<xs:enumeration value=\"furnitureinventory\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcJunctionBoxTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcJunctionBoxTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcJunctionBoxTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLampTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLampTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLampTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\r\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\r\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\r\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\r\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\r\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLayerSetDirectionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLayerSetDirectionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLayerSetDirectionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"axis1\"/>\r\n\t\t\t<xs:enumeration value=\"axis2\"/>\r\n\t\t\t<xs:enumeration value=\"axis3\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLightDistributionCurveEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLightDistributionCurveEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLightDistributionCurveEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"type_a\"/>\r\n\t\t\t<xs:enumeration value=\"type_b\"/>\r\n\t\t\t<xs:enumeration value=\"type_c\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLightEmissionSourceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLightEmissionSourceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLightEmissionSourceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\r\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\r\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\r\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\r\n\t\t\t<xs:enumeration value=\"lightemittingdiode\"/>\r\n\t\t\t<xs:enumeration value=\"lowpressuresodium\"/>\r\n\t\t\t<xs:enumeration value=\"lowvoltagehalogen\"/>\r\n\t\t\t<xs:enumeration value=\"mainvoltagehalogen\"/>\r\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\r\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLightFixtureTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLightFixtureTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLightFixtureTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"pointsource\"/>\r\n\t\t\t<xs:enumeration value=\"directionsource\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLoadGroupTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLoadGroupTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLoadGroupTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"load_group\"/>\r\n\t\t\t<xs:enumeration value=\"load_case\"/>\r\n\t\t\t<xs:enumeration value=\"load_combination_group\"/>\r\n\t\t\t<xs:enumeration value=\"load_combination\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLogicalOperatorEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLogicalOperatorEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLogicalOperatorEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"logicaland\"/>\r\n\t\t\t<xs:enumeration value=\"logicalor\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMemberTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMemberTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMemberTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"brace\"/>\r\n\t\t\t<xs:enumeration value=\"chord\"/>\r\n\t\t\t<xs:enumeration value=\"collar\"/>\r\n\t\t\t<xs:enumeration value=\"member\"/>\r\n\t\t\t<xs:enumeration value=\"plate\"/>\r\n\t\t\t<xs:enumeration value=\"post\"/>\r\n\t\t\t<xs:enumeration value=\"purlin\"/>\r\n\t\t\t<xs:enumeration value=\"rafter\"/>\r\n\t\t\t<xs:enumeration value=\"stringer\"/>\r\n\t\t\t<xs:enumeration value=\"strut\"/>\r\n\t\t\t<xs:enumeration value=\"stud\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMotorConnectionTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMotorConnectionTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMotorConnectionTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"beltdrive\"/>\r\n\t\t\t<xs:enumeration value=\"coupling\"/>\r\n\t\t\t<xs:enumeration value=\"directdrive\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcNullStyle\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcNullStyle\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcNullStyle\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"null\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcObjectTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcObjectTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcObjectTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"product\"/>\r\n\t\t\t<xs:enumeration value=\"process\"/>\r\n\t\t\t<xs:enumeration value=\"control\"/>\r\n\t\t\t<xs:enumeration value=\"resource\"/>\r\n\t\t\t<xs:enumeration value=\"actor\"/>\r\n\t\t\t<xs:enumeration value=\"group\"/>\r\n\t\t\t<xs:enumeration value=\"project\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcObjectiveEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcObjectiveEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcObjectiveEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"codecompliance\"/>\r\n\t\t\t<xs:enumeration value=\"designintent\"/>\r\n\t\t\t<xs:enumeration value=\"healthandsafety\"/>\r\n\t\t\t<xs:enumeration value=\"requirement\"/>\r\n\t\t\t<xs:enumeration value=\"specification\"/>\r\n\t\t\t<xs:enumeration value=\"triggercondition\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcOccupantTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcOccupantTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcOccupantTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"assignee\"/>\r\n\t\t\t<xs:enumeration value=\"assignor\"/>\r\n\t\t\t<xs:enumeration value=\"lessee\"/>\r\n\t\t\t<xs:enumeration value=\"lessor\"/>\r\n\t\t\t<xs:enumeration value=\"lettingagent\"/>\r\n\t\t\t<xs:enumeration value=\"owner\"/>\r\n\t\t\t<xs:enumeration value=\"tenant\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcOutletTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcOutletTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcOutletTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"audiovisualoutlet\"/>\r\n\t\t\t<xs:enumeration value=\"communicationsoutlet\"/>\r\n\t\t\t<xs:enumeration value=\"poweroutlet\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPermeableCoveringOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPermeableCoveringOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPermeableCoveringOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"grill\"/>\r\n\t\t\t<xs:enumeration value=\"louver\"/>\r\n\t\t\t<xs:enumeration value=\"screen\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPhysicalOrVirtualEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPhysicalOrVirtualEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPhysicalOrVirtualEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"physical\"/>\r\n\t\t\t<xs:enumeration value=\"virtual\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPileConstructionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPileConstructionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPileConstructionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cast_in_place\"/>\r\n\t\t\t<xs:enumeration value=\"composite\"/>\r\n\t\t\t<xs:enumeration value=\"precast_concrete\"/>\r\n\t\t\t<xs:enumeration value=\"prefab_steel\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPileTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPileTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPileTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cohesion\"/>\r\n\t\t\t<xs:enumeration value=\"friction\"/>\r\n\t\t\t<xs:enumeration value=\"support\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPipeFittingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPipeFittingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPipeFittingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bend\"/>\r\n\t\t\t<xs:enumeration value=\"connector\"/>\r\n\t\t\t<xs:enumeration value=\"entry\"/>\r\n\t\t\t<xs:enumeration value=\"exit\"/>\r\n\t\t\t<xs:enumeration value=\"junction\"/>\r\n\t\t\t<xs:enumeration value=\"obstruction\"/>\r\n\t\t\t<xs:enumeration value=\"transition\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPipeSegmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPipeSegmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPipeSegmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\r\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\r\n\t\t\t<xs:enumeration value=\"gutter\"/>\r\n\t\t\t<xs:enumeration value=\"spool\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPlateTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPlateTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPlateTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcProcedureTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProcedureTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcProcedureTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"advice_caution\"/>\r\n\t\t\t<xs:enumeration value=\"advice_note\"/>\r\n\t\t\t<xs:enumeration value=\"advice_warning\"/>\r\n\t\t\t<xs:enumeration value=\"calibration\"/>\r\n\t\t\t<xs:enumeration value=\"diagnostic\"/>\r\n\t\t\t<xs:enumeration value=\"shutdown\"/>\r\n\t\t\t<xs:enumeration value=\"startup\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcProfileTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProfileTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcProfileTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"curve\"/>\r\n\t\t\t<xs:enumeration value=\"area\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcProjectOrderRecordTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProjectOrderRecordTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcProjectOrderRecordTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"change\"/>\r\n\t\t\t<xs:enumeration value=\"maintenance\"/>\r\n\t\t\t<xs:enumeration value=\"move\"/>\r\n\t\t\t<xs:enumeration value=\"purchase\"/>\r\n\t\t\t<xs:enumeration value=\"work\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcProjectOrderTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProjectOrderTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcProjectOrderTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"changeorder\"/>\r\n\t\t\t<xs:enumeration value=\"maintenanceworkorder\"/>\r\n\t\t\t<xs:enumeration value=\"moveorder\"/>\r\n\t\t\t<xs:enumeration value=\"purchaseorder\"/>\r\n\t\t\t<xs:enumeration value=\"workorder\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcProjectedOrTrueLengthEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProjectedOrTrueLengthEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcProjectedOrTrueLengthEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"projected_length\"/>\r\n\t\t\t<xs:enumeration value=\"true_length\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPropertySourceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPropertySourceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPropertySourceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"design\"/>\r\n\t\t\t<xs:enumeration value=\"designmaximum\"/>\r\n\t\t\t<xs:enumeration value=\"designminimum\"/>\r\n\t\t\t<xs:enumeration value=\"simulated\"/>\r\n\t\t\t<xs:enumeration value=\"asbuilt\"/>\r\n\t\t\t<xs:enumeration value=\"commissioning\"/>\r\n\t\t\t<xs:enumeration value=\"measured\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notknown\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcProtectiveDeviceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProtectiveDeviceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcProtectiveDeviceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"fusedisconnector\"/>\r\n\t\t\t<xs:enumeration value=\"circuitbreaker\"/>\r\n\t\t\t<xs:enumeration value=\"earthfailuredevice\"/>\r\n\t\t\t<xs:enumeration value=\"residualcurrentcircuitbreaker\"/>\r\n\t\t\t<xs:enumeration value=\"residualcurrentswitch\"/>\r\n\t\t\t<xs:enumeration value=\"varistor\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPumpTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPumpTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPumpTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"circulator\"/>\r\n\t\t\t<xs:enumeration value=\"endsuction\"/>\r\n\t\t\t<xs:enumeration value=\"splitcase\"/>\r\n\t\t\t<xs:enumeration value=\"verticalinline\"/>\r\n\t\t\t<xs:enumeration value=\"verticalturbine\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRailingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRailingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRailingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"handrail\"/>\r\n\t\t\t<xs:enumeration value=\"guardrail\"/>\r\n\t\t\t<xs:enumeration value=\"balustrade\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRampFlightTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRampFlightTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRampFlightTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"straight\"/>\r\n\t\t\t<xs:enumeration value=\"spiral\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRampTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRampTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRampTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"straight_run_ramp\"/>\r\n\t\t\t<xs:enumeration value=\"two_straight_run_ramp\"/>\r\n\t\t\t<xs:enumeration value=\"quarter_turn_ramp\"/>\r\n\t\t\t<xs:enumeration value=\"two_quarter_turn_ramp\"/>\r\n\t\t\t<xs:enumeration value=\"half_turn_ramp\"/>\r\n\t\t\t<xs:enumeration value=\"spiral_ramp\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcReflectanceMethodEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcReflectanceMethodEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcReflectanceMethodEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"blinn\"/>\r\n\t\t\t<xs:enumeration value=\"flat\"/>\r\n\t\t\t<xs:enumeration value=\"glass\"/>\r\n\t\t\t<xs:enumeration value=\"matt\"/>\r\n\t\t\t<xs:enumeration value=\"metal\"/>\r\n\t\t\t<xs:enumeration value=\"mirror\"/>\r\n\t\t\t<xs:enumeration value=\"phong\"/>\r\n\t\t\t<xs:enumeration value=\"plastic\"/>\r\n\t\t\t<xs:enumeration value=\"strauss\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcReinforcingBarRoleEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcReinforcingBarRoleEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcReinforcingBarRoleEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"main\"/>\r\n\t\t\t<xs:enumeration value=\"shear\"/>\r\n\t\t\t<xs:enumeration value=\"ligature\"/>\r\n\t\t\t<xs:enumeration value=\"stud\"/>\r\n\t\t\t<xs:enumeration value=\"punching\"/>\r\n\t\t\t<xs:enumeration value=\"edge\"/>\r\n\t\t\t<xs:enumeration value=\"ring\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcReinforcingBarSurfaceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcReinforcingBarSurfaceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcReinforcingBarSurfaceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"plain\"/>\r\n\t\t\t<xs:enumeration value=\"textured\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcResourceConsumptionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcResourceConsumptionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcResourceConsumptionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"consumed\"/>\r\n\t\t\t<xs:enumeration value=\"partiallyconsumed\"/>\r\n\t\t\t<xs:enumeration value=\"notconsumed\"/>\r\n\t\t\t<xs:enumeration value=\"occupied\"/>\r\n\t\t\t<xs:enumeration value=\"partiallyoccupied\"/>\r\n\t\t\t<xs:enumeration value=\"notoccupied\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRibPlateDirectionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRibPlateDirectionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRibPlateDirectionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"direction_x\"/>\r\n\t\t\t<xs:enumeration value=\"direction_y\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRoleEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRoleEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRoleEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"supplier\"/>\r\n\t\t\t<xs:enumeration value=\"manufacturer\"/>\r\n\t\t\t<xs:enumeration value=\"contractor\"/>\r\n\t\t\t<xs:enumeration value=\"subcontractor\"/>\r\n\t\t\t<xs:enumeration value=\"architect\"/>\r\n\t\t\t<xs:enumeration value=\"structuralengineer\"/>\r\n\t\t\t<xs:enumeration value=\"costengineer\"/>\r\n\t\t\t<xs:enumeration value=\"client\"/>\r\n\t\t\t<xs:enumeration value=\"buildingowner\"/>\r\n\t\t\t<xs:enumeration value=\"buildingoperator\"/>\r\n\t\t\t<xs:enumeration value=\"mechanicalengineer\"/>\r\n\t\t\t<xs:enumeration value=\"electricalengineer\"/>\r\n\t\t\t<xs:enumeration value=\"projectmanager\"/>\r\n\t\t\t<xs:enumeration value=\"facilitiesmanager\"/>\r\n\t\t\t<xs:enumeration value=\"civilengineer\"/>\r\n\t\t\t<xs:enumeration value=\"comissioningengineer\"/>\r\n\t\t\t<xs:enumeration value=\"engineer\"/>\r\n\t\t\t<xs:enumeration value=\"owner\"/>\r\n\t\t\t<xs:enumeration value=\"consultant\"/>\r\n\t\t\t<xs:enumeration value=\"constructionmanager\"/>\r\n\t\t\t<xs:enumeration value=\"fieldconstructionmanager\"/>\r\n\t\t\t<xs:enumeration value=\"reseller\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRoofTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRoofTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRoofTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"flat_roof\"/>\r\n\t\t\t<xs:enumeration value=\"shed_roof\"/>\r\n\t\t\t<xs:enumeration value=\"gable_roof\"/>\r\n\t\t\t<xs:enumeration value=\"hip_roof\"/>\r\n\t\t\t<xs:enumeration value=\"hipped_gable_roof\"/>\r\n\t\t\t<xs:enumeration value=\"gambrel_roof\"/>\r\n\t\t\t<xs:enumeration value=\"mansard_roof\"/>\r\n\t\t\t<xs:enumeration value=\"barrel_roof\"/>\r\n\t\t\t<xs:enumeration value=\"rainbow_roof\"/>\r\n\t\t\t<xs:enumeration value=\"butterfly_roof\"/>\r\n\t\t\t<xs:enumeration value=\"pavilion_roof\"/>\r\n\t\t\t<xs:enumeration value=\"dome_roof\"/>\r\n\t\t\t<xs:enumeration value=\"freeform\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSIPrefix\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSIPrefix\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSIPrefix\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"exa\"/>\r\n\t\t\t<xs:enumeration value=\"peta\"/>\r\n\t\t\t<xs:enumeration value=\"tera\"/>\r\n\t\t\t<xs:enumeration value=\"giga\"/>\r\n\t\t\t<xs:enumeration value=\"mega\"/>\r\n\t\t\t<xs:enumeration value=\"kilo\"/>\r\n\t\t\t<xs:enumeration value=\"hecto\"/>\r\n\t\t\t<xs:enumeration value=\"deca\"/>\r\n\t\t\t<xs:enumeration value=\"deci\"/>\r\n\t\t\t<xs:enumeration value=\"centi\"/>\r\n\t\t\t<xs:enumeration value=\"milli\"/>\r\n\t\t\t<xs:enumeration value=\"micro\"/>\r\n\t\t\t<xs:enumeration value=\"nano\"/>\r\n\t\t\t<xs:enumeration value=\"pico\"/>\r\n\t\t\t<xs:enumeration value=\"femto\"/>\r\n\t\t\t<xs:enumeration value=\"atto\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSIUnitName\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSIUnitName\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSIUnitName\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"ampere\"/>\r\n\t\t\t<xs:enumeration value=\"becquerel\"/>\r\n\t\t\t<xs:enumeration value=\"candela\"/>\r\n\t\t\t<xs:enumeration value=\"coulomb\"/>\r\n\t\t\t<xs:enumeration value=\"cubic_metre\"/>\r\n\t\t\t<xs:enumeration value=\"degree_celsius\"/>\r\n\t\t\t<xs:enumeration value=\"farad\"/>\r\n\t\t\t<xs:enumeration value=\"gram\"/>\r\n\t\t\t<xs:enumeration value=\"gray\"/>\r\n\t\t\t<xs:enumeration value=\"henry\"/>\r\n\t\t\t<xs:enumeration value=\"hertz\"/>\r\n\t\t\t<xs:enumeration value=\"joule\"/>\r\n\t\t\t<xs:enumeration value=\"kelvin\"/>\r\n\t\t\t<xs:enumeration value=\"lumen\"/>\r\n\t\t\t<xs:enumeration value=\"lux\"/>\r\n\t\t\t<xs:enumeration value=\"metre\"/>\r\n\t\t\t<xs:enumeration value=\"mole\"/>\r\n\t\t\t<xs:enumeration value=\"newton\"/>\r\n\t\t\t<xs:enumeration value=\"ohm\"/>\r\n\t\t\t<xs:enumeration value=\"pascal\"/>\r\n\t\t\t<xs:enumeration value=\"radian\"/>\r\n\t\t\t<xs:enumeration value=\"second\"/>\r\n\t\t\t<xs:enumeration value=\"siemens\"/>\r\n\t\t\t<xs:enumeration value=\"sievert\"/>\r\n\t\t\t<xs:enumeration value=\"square_metre\"/>\r\n\t\t\t<xs:enumeration value=\"steradian\"/>\r\n\t\t\t<xs:enumeration value=\"tesla\"/>\r\n\t\t\t<xs:enumeration value=\"volt\"/>\r\n\t\t\t<xs:enumeration value=\"watt\"/>\r\n\t\t\t<xs:enumeration value=\"weber\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSanitaryTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSanitaryTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSanitaryTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bath\"/>\r\n\t\t\t<xs:enumeration value=\"bidet\"/>\r\n\t\t\t<xs:enumeration value=\"cistern\"/>\r\n\t\t\t<xs:enumeration value=\"shower\"/>\r\n\t\t\t<xs:enumeration value=\"sink\"/>\r\n\t\t\t<xs:enumeration value=\"sanitaryfountain\"/>\r\n\t\t\t<xs:enumeration value=\"toiletpan\"/>\r\n\t\t\t<xs:enumeration value=\"urinal\"/>\r\n\t\t\t<xs:enumeration value=\"washhandbasin\"/>\r\n\t\t\t<xs:enumeration value=\"wcseat\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSectionTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSectionTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"uniform\"/>\r\n\t\t\t<xs:enumeration value=\"tapered\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSensorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSensorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSensorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"co2sensor\"/>\r\n\t\t\t<xs:enumeration value=\"firesensor\"/>\r\n\t\t\t<xs:enumeration value=\"flowsensor\"/>\r\n\t\t\t<xs:enumeration value=\"gassensor\"/>\r\n\t\t\t<xs:enumeration value=\"heatsensor\"/>\r\n\t\t\t<xs:enumeration value=\"humiditysensor\"/>\r\n\t\t\t<xs:enumeration value=\"lightsensor\"/>\r\n\t\t\t<xs:enumeration value=\"moisturesensor\"/>\r\n\t\t\t<xs:enumeration value=\"movementsensor\"/>\r\n\t\t\t<xs:enumeration value=\"pressuresensor\"/>\r\n\t\t\t<xs:enumeration value=\"smokesensor\"/>\r\n\t\t\t<xs:enumeration value=\"soundsensor\"/>\r\n\t\t\t<xs:enumeration value=\"temperaturesensor\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSequenceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSequenceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSequenceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"start_start\"/>\r\n\t\t\t<xs:enumeration value=\"start_finish\"/>\r\n\t\t\t<xs:enumeration value=\"finish_start\"/>\r\n\t\t\t<xs:enumeration value=\"finish_finish\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcServiceLifeFactorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcServiceLifeFactorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcServiceLifeFactorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"a_qualityofcomponents\"/>\r\n\t\t\t<xs:enumeration value=\"b_designlevel\"/>\r\n\t\t\t<xs:enumeration value=\"c_workexecutionlevel\"/>\r\n\t\t\t<xs:enumeration value=\"d_indoorenvironment\"/>\r\n\t\t\t<xs:enumeration value=\"e_outdoorenvironment\"/>\r\n\t\t\t<xs:enumeration value=\"f_inuseconditions\"/>\r\n\t\t\t<xs:enumeration value=\"g_maintenancelevel\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcServiceLifeTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcServiceLifeTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcServiceLifeTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"actualservicelife\"/>\r\n\t\t\t<xs:enumeration value=\"expectedservicelife\"/>\r\n\t\t\t<xs:enumeration value=\"optimisticreferenceservicelife\"/>\r\n\t\t\t<xs:enumeration value=\"pessimisticreferenceservicelife\"/>\r\n\t\t\t<xs:enumeration value=\"referenceservicelife\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSlabTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSlabTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSlabTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"floor\"/>\r\n\t\t\t<xs:enumeration value=\"roof\"/>\r\n\t\t\t<xs:enumeration value=\"landing\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSoundScaleEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundScaleEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSoundScaleEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dba\"/>\r\n\t\t\t<xs:enumeration value=\"dbb\"/>\r\n\t\t\t<xs:enumeration value=\"dbc\"/>\r\n\t\t\t<xs:enumeration value=\"nc\"/>\r\n\t\t\t<xs:enumeration value=\"nr\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSpaceHeaterTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSpaceHeaterTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSpaceHeaterTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"sectionalradiator\"/>\r\n\t\t\t<xs:enumeration value=\"panelradiator\"/>\r\n\t\t\t<xs:enumeration value=\"tubularradiator\"/>\r\n\t\t\t<xs:enumeration value=\"convector\"/>\r\n\t\t\t<xs:enumeration value=\"baseboardheater\"/>\r\n\t\t\t<xs:enumeration value=\"finnedtubeunit\"/>\r\n\t\t\t<xs:enumeration value=\"unitheater\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcStackTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStackTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcStackTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"birdcage\"/>\r\n\t\t\t<xs:enumeration value=\"cowl\"/>\r\n\t\t\t<xs:enumeration value=\"rainwaterhopper\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcStairFlightTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStairFlightTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcStairFlightTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"straight\"/>\r\n\t\t\t<xs:enumeration value=\"winder\"/>\r\n\t\t\t<xs:enumeration value=\"spiral\"/>\r\n\t\t\t<xs:enumeration value=\"curved\"/>\r\n\t\t\t<xs:enumeration value=\"freeform\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcStairTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStairTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcStairTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"straight_run_stair\"/>\r\n\t\t\t<xs:enumeration value=\"two_straight_run_stair\"/>\r\n\t\t\t<xs:enumeration value=\"quarter_winding_stair\"/>\r\n\t\t\t<xs:enumeration value=\"quarter_turn_stair\"/>\r\n\t\t\t<xs:enumeration value=\"half_winding_stair\"/>\r\n\t\t\t<xs:enumeration value=\"half_turn_stair\"/>\r\n\t\t\t<xs:enumeration value=\"two_quarter_winding_stair\"/>\r\n\t\t\t<xs:enumeration value=\"two_quarter_turn_stair\"/>\r\n\t\t\t<xs:enumeration value=\"three_quarter_winding_stair\"/>\r\n\t\t\t<xs:enumeration value=\"three_quarter_turn_stair\"/>\r\n\t\t\t<xs:enumeration value=\"spiral_stair\"/>\r\n\t\t\t<xs:enumeration value=\"double_return_stair\"/>\r\n\t\t\t<xs:enumeration value=\"curved_run_stair\"/>\r\n\t\t\t<xs:enumeration value=\"two_curved_run_stair\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcStateEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStateEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcStateEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"readwrite\"/>\r\n\t\t\t<xs:enumeration value=\"readonly\"/>\r\n\t\t\t<xs:enumeration value=\"locked\"/>\r\n\t\t\t<xs:enumeration value=\"readwritelocked\"/>\r\n\t\t\t<xs:enumeration value=\"readonlylocked\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcStructuralCurveTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcStructuralCurveTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"rigid_joined_member\"/>\r\n\t\t\t<xs:enumeration value=\"pin_joined_member\"/>\r\n\t\t\t<xs:enumeration value=\"cable\"/>\r\n\t\t\t<xs:enumeration value=\"tension_member\"/>\r\n\t\t\t<xs:enumeration value=\"compression_member\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcStructuralSurfaceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcStructuralSurfaceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bending_element\"/>\r\n\t\t\t<xs:enumeration value=\"membrane_element\"/>\r\n\t\t\t<xs:enumeration value=\"shell\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSurfaceSide\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSurfaceSide\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSurfaceSide\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"positive\"/>\r\n\t\t\t<xs:enumeration value=\"negative\"/>\r\n\t\t\t<xs:enumeration value=\"both\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSurfaceTextureEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSurfaceTextureEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSurfaceTextureEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bump\"/>\r\n\t\t\t<xs:enumeration value=\"opacity\"/>\r\n\t\t\t<xs:enumeration value=\"reflection\"/>\r\n\t\t\t<xs:enumeration value=\"selfillumination\"/>\r\n\t\t\t<xs:enumeration value=\"shininess\"/>\r\n\t\t\t<xs:enumeration value=\"specular\"/>\r\n\t\t\t<xs:enumeration value=\"texture\"/>\r\n\t\t\t<xs:enumeration value=\"transparencymap\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSwitchingDeviceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSwitchingDeviceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSwitchingDeviceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"contactor\"/>\r\n\t\t\t<xs:enumeration value=\"emergencystop\"/>\r\n\t\t\t<xs:enumeration value=\"starter\"/>\r\n\t\t\t<xs:enumeration value=\"switchdisconnector\"/>\r\n\t\t\t<xs:enumeration value=\"toggleswitch\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTankTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTankTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTankTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"preformed\"/>\r\n\t\t\t<xs:enumeration value=\"sectional\"/>\r\n\t\t\t<xs:enumeration value=\"expansion\"/>\r\n\t\t\t<xs:enumeration value=\"pressurevessel\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTendonTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTendonTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTendonTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"strand\"/>\r\n\t\t\t<xs:enumeration value=\"wire\"/>\r\n\t\t\t<xs:enumeration value=\"bar\"/>\r\n\t\t\t<xs:enumeration value=\"coated\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTextPath\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTextPath\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTextPath\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"left\"/>\r\n\t\t\t<xs:enumeration value=\"right\"/>\r\n\t\t\t<xs:enumeration value=\"up\"/>\r\n\t\t\t<xs:enumeration value=\"down\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcThermalLoadSourceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalLoadSourceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcThermalLoadSourceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"people\"/>\r\n\t\t\t<xs:enumeration value=\"lighting\"/>\r\n\t\t\t<xs:enumeration value=\"equipment\"/>\r\n\t\t\t<xs:enumeration value=\"ventilationindoorair\"/>\r\n\t\t\t<xs:enumeration value=\"ventilationoutsideair\"/>\r\n\t\t\t<xs:enumeration value=\"recirculatedair\"/>\r\n\t\t\t<xs:enumeration value=\"exhaustair\"/>\r\n\t\t\t<xs:enumeration value=\"airexchangerate\"/>\r\n\t\t\t<xs:enumeration value=\"drybulbtemperature\"/>\r\n\t\t\t<xs:enumeration value=\"relativehumidity\"/>\r\n\t\t\t<xs:enumeration value=\"infiltration\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcThermalLoadTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalLoadTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcThermalLoadTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"sensible\"/>\r\n\t\t\t<xs:enumeration value=\"latent\"/>\r\n\t\t\t<xs:enumeration value=\"radiant\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTimeSeriesDataTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeSeriesDataTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTimeSeriesDataTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"continuous\"/>\r\n\t\t\t<xs:enumeration value=\"discrete\"/>\r\n\t\t\t<xs:enumeration value=\"discretebinary\"/>\r\n\t\t\t<xs:enumeration value=\"piecewisebinary\"/>\r\n\t\t\t<xs:enumeration value=\"piecewiseconstant\"/>\r\n\t\t\t<xs:enumeration value=\"piecewisecontinuous\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTimeSeriesScheduleTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeSeriesScheduleTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTimeSeriesScheduleTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"annual\"/>\r\n\t\t\t<xs:enumeration value=\"monthly\"/>\r\n\t\t\t<xs:enumeration value=\"weekly\"/>\r\n\t\t\t<xs:enumeration value=\"daily\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTransformerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTransformerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTransformerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"current\"/>\r\n\t\t\t<xs:enumeration value=\"frequency\"/>\r\n\t\t\t<xs:enumeration value=\"voltage\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTransitionCode\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTransitionCode\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTransitionCode\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"discontinuous\"/>\r\n\t\t\t<xs:enumeration value=\"continuous\"/>\r\n\t\t\t<xs:enumeration value=\"contsamegradient\"/>\r\n\t\t\t<xs:enumeration value=\"contsamegradientsamecurvature\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTransportElementTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTransportElementTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTransportElementTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"elevator\"/>\r\n\t\t\t<xs:enumeration value=\"escalator\"/>\r\n\t\t\t<xs:enumeration value=\"movingwalkway\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTrimmingPreference\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTrimmingPreference\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTrimmingPreference\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cartesian\"/>\r\n\t\t\t<xs:enumeration value=\"parameter\"/>\r\n\t\t\t<xs:enumeration value=\"unspecified\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTubeBundleTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTubeBundleTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTubeBundleTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"finned\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcUnitEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcUnitEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcUnitEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"absorbeddoseunit\"/>\r\n\t\t\t<xs:enumeration value=\"amountofsubstanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"areaunit\"/>\r\n\t\t\t<xs:enumeration value=\"doseequivalentunit\"/>\r\n\t\t\t<xs:enumeration value=\"electriccapacitanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"electricchargeunit\"/>\r\n\t\t\t<xs:enumeration value=\"electricconductanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"electriccurrentunit\"/>\r\n\t\t\t<xs:enumeration value=\"electricresistanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"electricvoltageunit\"/>\r\n\t\t\t<xs:enumeration value=\"energyunit\"/>\r\n\t\t\t<xs:enumeration value=\"forceunit\"/>\r\n\t\t\t<xs:enumeration value=\"frequencyunit\"/>\r\n\t\t\t<xs:enumeration value=\"illuminanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"inductanceunit\"/>\r\n\t\t\t<xs:enumeration value=\"lengthunit\"/>\r\n\t\t\t<xs:enumeration value=\"luminousfluxunit\"/>\r\n\t\t\t<xs:enumeration value=\"luminousintensityunit\"/>\r\n\t\t\t<xs:enumeration value=\"magneticfluxdensityunit\"/>\r\n\t\t\t<xs:enumeration value=\"magneticfluxunit\"/>\r\n\t\t\t<xs:enumeration value=\"massunit\"/>\r\n\t\t\t<xs:enumeration value=\"planeangleunit\"/>\r\n\t\t\t<xs:enumeration value=\"powerunit\"/>\r\n\t\t\t<xs:enumeration value=\"pressureunit\"/>\r\n\t\t\t<xs:enumeration value=\"radioactivityunit\"/>\r\n\t\t\t<xs:enumeration value=\"solidangleunit\"/>\r\n\t\t\t<xs:enumeration value=\"thermodynamictemperatureunit\"/>\r\n\t\t\t<xs:enumeration value=\"timeunit\"/>\r\n\t\t\t<xs:enumeration value=\"volumeunit\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcUnitaryEquipmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcUnitaryEquipmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcUnitaryEquipmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"airhandler\"/>\r\n\t\t\t<xs:enumeration value=\"airconditioningunit\"/>\r\n\t\t\t<xs:enumeration value=\"splitsystem\"/>\r\n\t\t\t<xs:enumeration value=\"rooftopunit\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcValveTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcValveTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcValveTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"airrelease\"/>\r\n\t\t\t<xs:enumeration value=\"antivacuum\"/>\r\n\t\t\t<xs:enumeration value=\"changeover\"/>\r\n\t\t\t<xs:enumeration value=\"check\"/>\r\n\t\t\t<xs:enumeration value=\"commissioning\"/>\r\n\t\t\t<xs:enumeration value=\"diverting\"/>\r\n\t\t\t<xs:enumeration value=\"drawoffcock\"/>\r\n\t\t\t<xs:enumeration value=\"doublecheck\"/>\r\n\t\t\t<xs:enumeration value=\"doubleregulating\"/>\r\n\t\t\t<xs:enumeration value=\"faucet\"/>\r\n\t\t\t<xs:enumeration value=\"flushing\"/>\r\n\t\t\t<xs:enumeration value=\"gascock\"/>\r\n\t\t\t<xs:enumeration value=\"gastap\"/>\r\n\t\t\t<xs:enumeration value=\"isolating\"/>\r\n\t\t\t<xs:enumeration value=\"mixing\"/>\r\n\t\t\t<xs:enumeration value=\"pressurereducing\"/>\r\n\t\t\t<xs:enumeration value=\"pressurerelief\"/>\r\n\t\t\t<xs:enumeration value=\"regulating\"/>\r\n\t\t\t<xs:enumeration value=\"safetycutoff\"/>\r\n\t\t\t<xs:enumeration value=\"steamtrap\"/>\r\n\t\t\t<xs:enumeration value=\"stopcock\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcVibrationIsolatorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcVibrationIsolatorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcVibrationIsolatorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"compression\"/>\r\n\t\t\t<xs:enumeration value=\"spring\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcWallTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWallTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcWallTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"standard\"/>\r\n\t\t\t<xs:enumeration value=\"polygonal\"/>\r\n\t\t\t<xs:enumeration value=\"shear\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcWasteTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWasteTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcWasteTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"floortrap\"/>\r\n\t\t\t<xs:enumeration value=\"floorwaste\"/>\r\n\t\t\t<xs:enumeration value=\"gullysump\"/>\r\n\t\t\t<xs:enumeration value=\"gullytrap\"/>\r\n\t\t\t<xs:enumeration value=\"greaseinterceptor\"/>\r\n\t\t\t<xs:enumeration value=\"oilinterceptor\"/>\r\n\t\t\t<xs:enumeration value=\"petrolinterceptor\"/>\r\n\t\t\t<xs:enumeration value=\"roofdrain\"/>\r\n\t\t\t<xs:enumeration value=\"wastedisposalunit\"/>\r\n\t\t\t<xs:enumeration value=\"wastetrap\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcWindowPanelOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowPanelOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcWindowPanelOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"sidehungrighthand\"/>\r\n\t\t\t<xs:enumeration value=\"sidehunglefthand\"/>\r\n\t\t\t<xs:enumeration value=\"tiltandturnrighthand\"/>\r\n\t\t\t<xs:enumeration value=\"tiltandturnlefthand\"/>\r\n\t\t\t<xs:enumeration value=\"tophung\"/>\r\n\t\t\t<xs:enumeration value=\"bottomhung\"/>\r\n\t\t\t<xs:enumeration value=\"pivothorizontal\"/>\r\n\t\t\t<xs:enumeration value=\"pivotvertical\"/>\r\n\t\t\t<xs:enumeration value=\"slidinghorizontal\"/>\r\n\t\t\t<xs:enumeration value=\"slidingvertical\"/>\r\n\t\t\t<xs:enumeration value=\"removablecasement\"/>\r\n\t\t\t<xs:enumeration value=\"fixedcasement\"/>\r\n\t\t\t<xs:enumeration value=\"otheroperation\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcWindowPanelPositionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowPanelPositionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcWindowPanelPositionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"left\"/>\r\n\t\t\t<xs:enumeration value=\"middle\"/>\r\n\t\t\t<xs:enumeration value=\"right\"/>\r\n\t\t\t<xs:enumeration value=\"bottom\"/>\r\n\t\t\t<xs:enumeration value=\"top\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcWindowStyleConstructionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowStyleConstructionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcWindowStyleConstructionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"aluminium\"/>\r\n\t\t\t<xs:enumeration value=\"high_grade_steel\"/>\r\n\t\t\t<xs:enumeration value=\"steel\"/>\r\n\t\t\t<xs:enumeration value=\"wood\"/>\r\n\t\t\t<xs:enumeration value=\"aluminium_wood\"/>\r\n\t\t\t<xs:enumeration value=\"plastic\"/>\r\n\t\t\t<xs:enumeration value=\"other_construction\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcWindowStyleOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowStyleOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcWindowStyleOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"single_panel\"/>\r\n\t\t\t<xs:enumeration value=\"double_panel_vertical\"/>\r\n\t\t\t<xs:enumeration value=\"double_panel_horizontal\"/>\r\n\t\t\t<xs:enumeration value=\"triple_panel_vertical\"/>\r\n\t\t\t<xs:enumeration value=\"triple_panel_bottom\"/>\r\n\t\t\t<xs:enumeration value=\"triple_panel_top\"/>\r\n\t\t\t<xs:enumeration value=\"triple_panel_left\"/>\r\n\t\t\t<xs:enumeration value=\"triple_panel_right\"/>\r\n\t\t\t<xs:enumeration value=\"triple_panel_horizontal\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcWorkControlTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWorkControlTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcWorkControlTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"actual\"/>\r\n\t\t\t<xs:enumeration value=\"baseline\"/>\r\n\t\t\t<xs:enumeration value=\"planned\"/>\r\n\t\t\t<xs:enumeration value=\"userdefined\"/>\r\n\t\t\t<xs:enumeration value=\"notdefined\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<!-- simple type declarations (for TYPE defined data type definitions) -->\r\n\t<xs:element name=\"IfcAbsorbedDoseMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAbsorbedDoseMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAbsorbedDoseMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAccelerationMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAccelerationMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAccelerationMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAmountOfSubstanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAmountOfSubstanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAmountOfSubstanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAngularVelocityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAngularVelocityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAngularVelocityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcAreaMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcAreaMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcBoolean\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBoolean\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcBoolean\">\r\n\t\t<xs:restriction base=\"xs:boolean\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcComplexNumber\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:complexContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcComplexNumber\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:complexContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcComplexNumber\">\r\n\t\t<xs:sequence>\r\n\t\t\t<xs:element ref=\"ex:double-wrapper\" minOccurs=\"2\" maxOccurs=\"2\"/>\r\n\t\t</xs:sequence>\r\n\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:double-wrapper\"/>\r\n\t\t<xs:attribute ref=\"ex:cType\" fixed=\"array\"/>\r\n\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcCompoundPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:complexContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCompoundPlaneAngleMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:complexContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCompoundPlaneAngleMeasure\">\r\n\t\t<xs:sequence>\r\n\t\t\t<xs:element ref=\"ex:long-wrapper\" minOccurs=\"3\" maxOccurs=\"3\"/>\r\n\t\t</xs:sequence>\r\n\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:long-wrapper\"/>\r\n\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\r\n\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\r\n\t</xs:complexType>\r\n\t<xs:element name=\"IfcContextDependentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcContextDependentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcContextDependentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCountMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCountMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCountMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcCurvatureMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCurvatureMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcCurvatureMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDayInMonthNumber\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDayInMonthNumber\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDayInMonthNumber\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDaylightSavingHour\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDaylightSavingHour\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDaylightSavingHour\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDescriptiveMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDescriptiveMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDescriptiveMeasure\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDimensionCount\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDimensionCount\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDimensionCount\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDoseEquivalentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoseEquivalentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDoseEquivalentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcDynamicViscosityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDynamicViscosityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcDynamicViscosityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricCapacitanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCapacitanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricCapacitanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricChargeMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricChargeMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricChargeMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricConductanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricConductanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricConductanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricCurrentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricCurrentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricResistanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricResistanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricResistanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcElectricVoltageMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricVoltageMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcElectricVoltageMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcEnergyMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergyMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcEnergyMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcForceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcForceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcForceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcFrequencyMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFrequencyMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcFrequencyMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcGloballyUniqueId\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcGloballyUniqueId\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcGloballyUniqueId\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t\t<xs:minLength value=\"22\"/>\r\n\t\t\t<xs:maxLength value=\"22\"/>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcHeatFluxDensityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatFluxDensityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcHeatFluxDensityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcHeatingValueMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatingValueMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcHeatingValueMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcHourInDay\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHourInDay\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcHourInDay\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcIdentifier\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcIdentifier\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcIlluminanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIlluminanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcIlluminanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcInductanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcInductanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcInductanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcInteger\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcInteger\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcInteger\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcIntegerCountRateMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIntegerCountRateMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcIntegerCountRateMeasure\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcIonConcentrationMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIonConcentrationMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcIonConcentrationMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcIsothermalMoistureCapacityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcIsothermalMoistureCapacityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcKinematicViscosityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcKinematicViscosityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcKinematicViscosityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLabel\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLabel\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLabel\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLengthMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLengthMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLinearForceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearForceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLinearForceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLinearMomentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearMomentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLinearMomentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLinearStiffnessMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearStiffnessMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLinearStiffnessMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLinearVelocityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearVelocityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLinearVelocityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLogical\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLogical\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLogical\">\r\n\t\t<xs:restriction base=\"ex:logical\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLuminousFluxMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousFluxMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLuminousFluxMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLuminousIntensityDistributionMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityDistributionMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLuminousIntensityDistributionMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcLuminousIntensityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcLuminousIntensityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMagneticFluxDensityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxDensityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMagneticFluxDensityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMagneticFluxMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMagneticFluxMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMassDensityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMassDensityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMassDensityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMassFlowRateMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMassFlowRateMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMassFlowRateMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMassMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMassMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMassMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMassPerLengthMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMassPerLengthMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMassPerLengthMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMinuteInHour\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMinuteInHour\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMinuteInHour\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcModulusOfElasticityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfElasticityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcModulusOfElasticityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcModulusOfLinearSubgradeReactionMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcModulusOfRotationalSubgradeReactionMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcModulusOfSubgradeReactionMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMoistureDiffusivityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMoistureDiffusivityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMoistureDiffusivityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMolecularWeightMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMolecularWeightMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMolecularWeightMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMomentOfInertiaMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMomentOfInertiaMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMomentOfInertiaMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMonetaryMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMonetaryMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMonetaryMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcMonthInYearNumber\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMonthInYearNumber\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcMonthInYearNumber\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcNormalisedRatioMeasure\">\r\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcNumericMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcNumericMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcNumericMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPHMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPHMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPHMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcParameterValue\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcParameterValue\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPlanarForceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPlanarForceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPlanarForceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPlaneAngleMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPositiveLengthMeasure\">\r\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPositivePlaneAngleMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPositivePlaneAngleMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPositivePlaneAngleMeasure\">\r\n\t\t<xs:restriction base=\"ifc:IfcPlaneAngleMeasure\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveRatioMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPositiveRatioMeasure\">\r\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPowerMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPowerMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPowerMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPresentableText\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPresentableText\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPresentableText\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcPressureMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPressureMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcPressureMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRadioActivityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRadioActivityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRadioActivityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRatioMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRatioMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRatioMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcReal\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcReal\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcReal\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRotationalFrequencyMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalFrequencyMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRotationalFrequencyMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRotationalMassMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalMassMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRotationalMassMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcRotationalStiffnessMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalStiffnessMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcRotationalStiffnessMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSecondInMinute\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSecondInMinute\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSecondInMinute\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSectionModulusMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionModulusMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSectionModulusMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSectionalAreaIntegralMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionalAreaIntegralMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSectionalAreaIntegralMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcShearModulusMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcShearModulusMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcShearModulusMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSolidAngleMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSolidAngleMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSolidAngleMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSoundPowerMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSoundPowerMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSoundPressureMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSoundPressureMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSpecificHeatCapacityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecificHeatCapacityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSpecificHeatCapacityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSpecularExponent\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularExponent\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSpecularExponent\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcSpecularRoughness\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularRoughness\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcSpecularRoughness\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTemperatureGradientMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureGradientMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTemperatureGradientMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcText\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcText\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcText\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTextAlignment\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTextAlignment\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTextAlignment\">\r\n\t\t<xs:restriction base=\"ifc:IfcLabel\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcThermalAdmittanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalAdmittanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcThermalAdmittanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcThermalConductivityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalConductivityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcThermalConductivityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcThermalExpansionCoefficientMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalExpansionCoefficientMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcThermalExpansionCoefficientMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcThermalResistanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalResistanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcThermalResistanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcThermalTransmittanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalTransmittanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcThermalTransmittanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermodynamicTemperatureMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcThermodynamicTemperatureMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTimeMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTimeMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTimeStamp\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeStamp\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTimeStamp\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcTorqueMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTorqueMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcTorqueMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcVaporPermeabilityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcVaporPermeabilityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcVaporPermeabilityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcVolumeMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumeMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcVolumeMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcVolumetricFlowRateMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumetricFlowRateMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcVolumetricFlowRateMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcWarpingConstantMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingConstantMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcWarpingConstantMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcWarpingMomentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingMomentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcWarpingMomentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\"/>\r\n\t</xs:simpleType>\r\n\t<xs:element name=\"IfcYearNumber\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcYearNumber\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\t<xs:simpleType name=\"IfcYearNumber\">\r\n\t\t<xs:restriction base=\"xs:long\"/>\r\n\t</xs:simpleType>\r\n</xs:schema>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFC2X3_TC1.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<!-- created with EXPTOOL V20070502 (perl 5 program) written by Thomas Liebich, AEC3, tl@aec3.de -->\r\n<!-- validated with XMLspy2007 sp2 (http://www.xmlspy.com) by Thomas Liebich, AEC3, tl@aec3.de -->\r\n<!-- configuration options used to create the following XML schema definitions following ISO 10303-28ed2 CD -->\r\n<!-- global options within the <option> scoping element -->\r\n<!-- + <inheritance> = \"true\" -->\r\n<!-- + <exp-type> = \"unspecified\" -->\r\n<!-- + <exp-attribute> = \"double-tag\" -->\r\n<!-- + <flatten> = \"false\" -->\r\n<!-- + <sparse> = \"true\" -->\r\n<!-- + <tagless> = \"false\" -->\r\n<!-- + <naming-convention> = \"preserve-case\" -->\r\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\" xmlns:ex=\"urn:iso.org:standard:10303:part(28):version(2):xmlschema:common\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:ifc=\"http://www.iai-tech.org/ifcXML/IFC2x3/FINAL\" attributeFormDefault=\"unqualified\" targetNamespace=\"http://www.iai-tech.org/ifcXML/IFC2x3/FINAL\">\r\n\r\n\r\n<!-- root element declaration (for SCHEMA definitions) -->\r\n\r\n\t<xs:import namespace=\"urn:iso.org:standard:10303:part(28):version(2):xmlschema:common\" schemaLocation=\"http://www.iai-tech.org/ifcXML/IFC2x3/FINAL/ex.xsd\">\r\n\t</xs:import>\r\n\t<xs:element substitutionGroup=\"ex:uos\" name=\"uos\" type=\"ifc:uos\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"uos\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:uos\">\r\n\t\t\t\t<xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t<xs:element ref=\"ex:Entity\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:choice>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\r\n\r\n<!-- element and complex type declarations (for ENTITY definitions) -->\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCompositeCurve\" name=\"Ifc2DCompositeCurve\" nillable=\"true\" type=\"ifc:Ifc2DCompositeCurve\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"Ifc2DCompositeCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurve\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcActionRequest\" nillable=\"true\" type=\"ifc:IfcActionRequest\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcActionRequest\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RequestID\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcActor\" nillable=\"true\" type=\"ifc:IfcActor\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcActor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TheActor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcActorRole\" nillable=\"true\" type=\"ifc:IfcActorRole\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcActorRole\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Role\" type=\"ifc:IfcRoleEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedRole\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionControlElementType\" name=\"IfcActuatorType\" nillable=\"true\" type=\"ifc:IfcActuatorType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcActuatorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcAddress\" nillable=\"true\" type=\"ifc:IfcAddress\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAddress\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Purpose\" minOccurs=\"0\" type=\"ifc:IfcAddressTypeEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedPurpose\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcAirTerminalBoxType\" nillable=\"true\" type=\"ifc:IfcAirTerminalBoxType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAirTerminalBoxType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcAirTerminalType\" nillable=\"true\" type=\"ifc:IfcAirTerminalType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAirTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcAirToAirHeatRecoveryType\" nillable=\"true\" type=\"ifc:IfcAirToAirHeatRecoveryType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAirToAirHeatRecoveryType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionControlElementType\" name=\"IfcAlarmType\" nillable=\"true\" type=\"ifc:IfcAlarmType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAlarmType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" name=\"IfcAngularDimension\" nillable=\"true\" type=\"ifc:IfcAngularDimension\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAngularDimension\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcAnnotation\" nillable=\"true\" type=\"ifc:IfcAnnotation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAnnotation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationOccurrence\" name=\"IfcAnnotationCurveOccurrence\" nillable=\"true\" type=\"ifc:IfcAnnotationCurveOccurrence\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAnnotationCurveOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcAnnotationFillArea\" nillable=\"true\" type=\"ifc:IfcAnnotationFillArea\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAnnotationFillArea\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OuterBoundary\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationOccurrence\" name=\"IfcAnnotationFillAreaOccurrence\" nillable=\"true\" type=\"ifc:IfcAnnotationFillAreaOccurrence\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAnnotationFillAreaOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"FillStyleTarget\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPoint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"GlobalOrLocal\" minOccurs=\"0\" type=\"ifc:IfcGlobalOrLocalEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStyledItem\" name=\"IfcAnnotationOccurrence\" nillable=\"true\" type=\"ifc:IfcAnnotationOccurrence\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAnnotationOccurrence\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStyledItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcAnnotationSurface\" nillable=\"true\" type=\"ifc:IfcAnnotationSurface\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAnnotationSurface\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Item\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TextureCoordinates\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextureCoordinate\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationOccurrence\" name=\"IfcAnnotationSurfaceOccurrence\" nillable=\"true\" type=\"ifc:IfcAnnotationSurfaceOccurrence\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAnnotationSurfaceOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationOccurrence\" name=\"IfcAnnotationSymbolOccurrence\" nillable=\"true\" type=\"ifc:IfcAnnotationSymbolOccurrence\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAnnotationSymbolOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationOccurrence\" name=\"IfcAnnotationTextOccurrence\" nillable=\"true\" type=\"ifc:IfcAnnotationTextOccurrence\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAnnotationTextOccurrence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcApplication\" nillable=\"true\" type=\"ifc:IfcApplication\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcApplication\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApplicationDeveloper\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Version\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ApplicationFullName\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ApplicationIdentifier\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcAppliedValue\" nillable=\"true\" type=\"ifc:IfcAppliedValue\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAppliedValue\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"AppliedValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"UnitBasis\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ApplicableDate\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"FixedUntilDate\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcAppliedValueRelationship\" nillable=\"true\" type=\"ifc:IfcAppliedValueRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAppliedValueRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ComponentOfTotal\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Components\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAppliedValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ArithmeticOperator\" type=\"ifc:IfcArithmeticOperatorEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcApproval\" nillable=\"true\" type=\"ifc:IfcApproval\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcApproval\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ApprovalDateTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ApprovalStatus\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ApprovalLevel\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ApprovalQualifier\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Identifier\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcApprovalActorRelationship\" nillable=\"true\" type=\"ifc:IfcApprovalActorRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcApprovalActorRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Actor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Approval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Role\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcApprovalPropertyRelationship\" nillable=\"true\" type=\"ifc:IfcApprovalPropertyRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcApprovalPropertyRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApprovedProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Approval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcApprovalRelationship\" nillable=\"true\" type=\"ifc:IfcApprovalRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcApprovalRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedApproval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingApproval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProfileDef\" name=\"IfcArbitraryClosedProfileDef\" nillable=\"true\" type=\"ifc:IfcArbitraryClosedProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcArbitraryClosedProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OuterCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProfileDef\" name=\"IfcArbitraryOpenProfileDef\" nillable=\"true\" type=\"ifc:IfcArbitraryOpenProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcArbitraryOpenProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Curve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcArbitraryClosedProfileDef\" name=\"IfcArbitraryProfileDefWithVoids\" nillable=\"true\" type=\"ifc:IfcArbitraryProfileDefWithVoids\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcArbitraryProfileDefWithVoids\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryClosedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"InnerCurves\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcAsset\" nillable=\"true\" type=\"ifc:IfcAsset\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAsset\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AssetID\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OriginalValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurrentValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TotalReplacementCost\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Owner\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"User\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ResponsiblePerson\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IncorporationDate\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DepreciatedValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcIShapeProfileDef\" name=\"IfcAsymmetricIShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcAsymmetricIShapeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAsymmetricIShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcIShapeProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TopFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TopFlangeThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TopFlangeFilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPlacement\" name=\"IfcAxis1Placement\" nillable=\"true\" type=\"ifc:IfcAxis1Placement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAxis1Placement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Axis\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPlacement\" name=\"IfcAxis2Placement2D\" nillable=\"true\" type=\"ifc:IfcAxis2Placement2D\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAxis2Placement2D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"RefDirection\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPlacement\" name=\"IfcAxis2Placement3D\" nillable=\"true\" type=\"ifc:IfcAxis2Placement3D\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcAxis2Placement3D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Axis\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"RefDirection\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundedCurve\" name=\"IfcBSplineCurve\" nillable=\"true\" type=\"ifc:IfcBSplineCurve\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBSplineCurve\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Degree\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" maxOccurs=\"unbounded\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurveForm\" type=\"ifc:IfcBSplineCurveForm\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ClosedCurve\" type=\"ex:logical\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcBeam\" nillable=\"true\" type=\"ifc:IfcBeam\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBeam\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcBeamType\" nillable=\"true\" type=\"ifc:IfcBeamType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBeamType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBSplineCurve\" name=\"IfcBezierCurve\" nillable=\"true\" type=\"ifc:IfcBezierCurve\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBezierCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurve\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSurfaceTexture\" name=\"IfcBlobTexture\" nillable=\"true\" type=\"ifc:IfcBlobTexture\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBlobTexture\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RasterFormat\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RasterCode\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCsgPrimitive3D\" name=\"IfcBlock\" nillable=\"true\" type=\"ifc:IfcBlock\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBlock\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ZLength\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcBoilerType\" nillable=\"true\" type=\"ifc:IfcBoilerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoilerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBooleanResult\" name=\"IfcBooleanClippingResult\" nillable=\"true\" type=\"ifc:IfcBooleanClippingResult\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBooleanClippingResult\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBooleanResult\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcBooleanResult\" nillable=\"true\" type=\"ifc:IfcBooleanResult\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBooleanResult\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Operator\" type=\"ifc:IfcBooleanOperator\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FirstOperand\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SecondOperand\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcBoundaryCondition\" nillable=\"true\" type=\"ifc:IfcBoundaryCondition\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoundaryCondition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundaryCondition\" name=\"IfcBoundaryEdgeCondition\" nillable=\"true\" type=\"ifc:IfcBoundaryEdgeCondition\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoundaryEdgeCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByLengthX\" minOccurs=\"0\" type=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByLengthY\" minOccurs=\"0\" type=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByLengthZ\" minOccurs=\"0\" type=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthX\" minOccurs=\"0\" type=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthY\" minOccurs=\"0\" type=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthZ\" minOccurs=\"0\" type=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundaryCondition\" name=\"IfcBoundaryFaceCondition\" nillable=\"true\" type=\"ifc:IfcBoundaryFaceCondition\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoundaryFaceCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByAreaX\" minOccurs=\"0\" type=\"ifc:IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByAreaY\" minOccurs=\"0\" type=\"ifc:IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByAreaZ\" minOccurs=\"0\" type=\"ifc:IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundaryCondition\" name=\"IfcBoundaryNodeCondition\" nillable=\"true\" type=\"ifc:IfcBoundaryNodeCondition\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoundaryNodeCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessX\" minOccurs=\"0\" type=\"ifc:IfcLinearStiffnessMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessY\" minOccurs=\"0\" type=\"ifc:IfcLinearStiffnessMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearStiffnessZ\" minOccurs=\"0\" type=\"ifc:IfcLinearStiffnessMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessX\" minOccurs=\"0\" type=\"ifc:IfcRotationalStiffnessMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessY\" minOccurs=\"0\" type=\"ifc:IfcRotationalStiffnessMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessZ\" minOccurs=\"0\" type=\"ifc:IfcRotationalStiffnessMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundaryNodeCondition\" name=\"IfcBoundaryNodeConditionWarping\" nillable=\"true\" type=\"ifc:IfcBoundaryNodeConditionWarping\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoundaryNodeConditionWarping\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryNodeCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WarpingStiffness\" minOccurs=\"0\" type=\"ifc:IfcWarpingMomentMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCurve\" name=\"IfcBoundedCurve\" nillable=\"true\" type=\"ifc:IfcBoundedCurve\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoundedCurve\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSurface\" name=\"IfcBoundedSurface\" nillable=\"true\" type=\"ifc:IfcBoundedSurface\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoundedSurface\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcBoundingBox\" nillable=\"true\" type=\"ifc:IfcBoundingBox\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoundingBox\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Corner\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ZDim\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcHalfSpaceSolid\" name=\"IfcBoxedHalfSpace\" nillable=\"true\" type=\"ifc:IfcBoxedHalfSpace\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBoxedHalfSpace\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Enclosure\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundingBox\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSpatialStructureElement\" name=\"IfcBuilding\" nillable=\"true\" type=\"ifc:IfcBuilding\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBuilding\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ElevationOfRefHeight\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ElevationOfTerrain\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"BuildingAddress\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPostalAddress\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcBuildingElement\" nillable=\"true\" type=\"ifc:IfcBuildingElement\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBuildingElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcBuildingElementComponent\" nillable=\"true\" type=\"ifc:IfcBuildingElementComponent\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBuildingElementComponent\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementComponent\" name=\"IfcBuildingElementPart\" nillable=\"true\" type=\"ifc:IfcBuildingElementPart\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBuildingElementPart\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementComponent\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcBuildingElementProxy\" nillable=\"true\" type=\"ifc:IfcBuildingElementProxy\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBuildingElementProxy\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CompositionType\" minOccurs=\"0\" type=\"ifc:IfcElementCompositionEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcBuildingElementProxyType\" nillable=\"true\" type=\"ifc:IfcBuildingElementProxyType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBuildingElementProxyType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcBuildingElementProxyTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementType\" name=\"IfcBuildingElementType\" nillable=\"true\" type=\"ifc:IfcBuildingElementType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBuildingElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSpatialStructureElement\" name=\"IfcBuildingStorey\" nillable=\"true\" type=\"ifc:IfcBuildingStorey\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcBuildingStorey\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Elevation\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcCShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcCShapeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Girth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InternalFilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowFittingType\" name=\"IfcCableCarrierFittingType\" nillable=\"true\" type=\"ifc:IfcCableCarrierFittingType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCableCarrierFittingType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowSegmentType\" name=\"IfcCableCarrierSegmentType\" nillable=\"true\" type=\"ifc:IfcCableCarrierSegmentType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCableCarrierSegmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowSegmentType\" name=\"IfcCableSegmentType\" nillable=\"true\" type=\"ifc:IfcCableSegmentType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCableSegmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcCalendarDate\" nillable=\"true\" type=\"ifc:IfcCalendarDate\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCalendarDate\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DayComponent\" type=\"ifc:IfcDayInMonthNumber\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MonthComponent\" type=\"ifc:IfcMonthInYearNumber\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"YearComponent\" type=\"ifc:IfcYearNumber\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPoint\" name=\"IfcCartesianPoint\" nillable=\"true\" type=\"ifc:IfcCartesianPoint\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCartesianPoint\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Coordinates\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\" maxOccurs=\"3\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcCartesianTransformationOperator\" nillable=\"true\" type=\"ifc:IfcCartesianTransformationOperator\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Axis1\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Axis2\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LocalOrigin\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Scale\" minOccurs=\"0\" type=\"xs:double\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" name=\"IfcCartesianTransformationOperator2D\" nillable=\"true\" type=\"ifc:IfcCartesianTransformationOperator2D\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCartesianTransformationOperator2D\" name=\"IfcCartesianTransformationOperator2DnonUniform\" nillable=\"true\" type=\"ifc:IfcCartesianTransformationOperator2DnonUniform\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2DnonUniform\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator2D\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Scale2\" minOccurs=\"0\" type=\"xs:double\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" name=\"IfcCartesianTransformationOperator3D\" nillable=\"true\" type=\"ifc:IfcCartesianTransformationOperator3D\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Axis3\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCartesianTransformationOperator3D\" name=\"IfcCartesianTransformationOperator3DnonUniform\" nillable=\"true\" type=\"ifc:IfcCartesianTransformationOperator3DnonUniform\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3DnonUniform\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator3D\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Scale2\" minOccurs=\"0\" type=\"xs:double\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Scale3\" minOccurs=\"0\" type=\"xs:double\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcArbitraryOpenProfileDef\" name=\"IfcCenterLineProfileDef\" nillable=\"true\" type=\"ifc:IfcCenterLineProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCenterLineProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryOpenProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEdgeFeature\" name=\"IfcChamferEdgeFeature\" nillable=\"true\" type=\"ifc:IfcChamferEdgeFeature\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcChamferEdgeFeature\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEdgeFeature\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Width\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Height\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcChillerType\" nillable=\"true\" type=\"ifc:IfcChillerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcChillerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConic\" name=\"IfcCircle\" nillable=\"true\" type=\"ifc:IfcCircle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCircle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCircleProfileDef\" name=\"IfcCircleHollowProfileDef\" nillable=\"true\" type=\"ifc:IfcCircleHollowProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCircleHollowProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCircleProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcCircleProfileDef\" nillable=\"true\" type=\"ifc:IfcCircleProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCircleProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcClassification\" nillable=\"true\" type=\"ifc:IfcClassification\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcClassification\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Source\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Edition\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EditionDate\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcClassificationItem\" nillable=\"true\" type=\"ifc:IfcClassificationItem\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcClassificationItem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Notation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationNotationFacet\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ItemOf\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassification\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Title\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcClassificationItemRelationship\" nillable=\"true\" type=\"ifc:IfcClassificationItemRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcClassificationItemRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingItem\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationItem\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedItems\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationItem\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationItem\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcClassificationNotation\" nillable=\"true\" type=\"ifc:IfcClassificationNotation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcClassificationNotation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NotationFacets\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationNotationFacet\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationNotationFacet\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcClassificationNotationFacet\" nillable=\"true\" type=\"ifc:IfcClassificationNotationFacet\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcClassificationNotationFacet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NotationValue\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcClassificationReference\" nillable=\"true\" type=\"ifc:IfcClassificationReference\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcClassificationReference\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ReferencedSource\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassification\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConnectedFaceSet\" name=\"IfcClosedShell\" nillable=\"true\" type=\"ifc:IfcClosedShell\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcClosedShell\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcCoilType\" nillable=\"true\" type=\"ifc:IfcCoilType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCoilType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcColourSpecification\" name=\"IfcColourRgb\" nillable=\"true\" type=\"ifc:IfcColourRgb\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcColourRgb\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcColourSpecification\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Red\" type=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Green\" type=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Blue\" type=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcColourSpecification\" nillable=\"true\" type=\"ifc:IfcColourSpecification\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcColourSpecification\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcColumn\" nillable=\"true\" type=\"ifc:IfcColumn\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcColumn\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcColumnType\" nillable=\"true\" type=\"ifc:IfcColumnType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcColumnType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProperty\" name=\"IfcComplexProperty\" nillable=\"true\" type=\"ifc:IfcComplexProperty\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcComplexProperty\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UsageName\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HasProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundedCurve\" name=\"IfcCompositeCurve\" nillable=\"true\" type=\"ifc:IfcCompositeCurve\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCompositeCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Segments\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCompositeCurveSegment\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCompositeCurveSegment\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcCompositeCurveSegment\" nillable=\"true\" type=\"ifc:IfcCompositeCurveSegment\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCompositeCurveSegment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Transition\" type=\"ifc:IfcTransitionCode\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ParentCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProfileDef\" name=\"IfcCompositeProfileDef\" nillable=\"true\" type=\"ifc:IfcCompositeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCompositeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Profiles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" maxOccurs=\"unbounded\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProfileDef\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Label\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" name=\"IfcCompressorType\" nillable=\"true\" type=\"ifc:IfcCompressorType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCompressorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcCondenserType\" nillable=\"true\" type=\"ifc:IfcCondenserType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCondenserType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcCondition\" nillable=\"true\" type=\"ifc:IfcCondition\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcConditionCriterion\" nillable=\"true\" type=\"ifc:IfcConditionCriterion\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConditionCriterion\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Criterion\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcConditionCriterionSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CriterionDateTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCurve\" name=\"IfcConic\" nillable=\"true\" type=\"ifc:IfcConic\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConic\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcConnectedFaceSet\" nillable=\"true\" type=\"ifc:IfcConnectedFaceSet\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConnectedFaceSet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CfsFaces\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFace\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFace\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConnectionGeometry\" name=\"IfcConnectionCurveGeometry\" nillable=\"true\" type=\"ifc:IfcConnectionCurveGeometry\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConnectionCurveGeometry\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CurveOnRelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CurveOnRelatedElement\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcConnectionGeometry\" nillable=\"true\" type=\"ifc:IfcConnectionGeometry\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConnectionGeometry\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConnectionPointGeometry\" name=\"IfcConnectionPointEccentricity\" nillable=\"true\" type=\"ifc:IfcConnectionPointEccentricity\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConnectionPointEccentricity\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectionPointGeometry\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EccentricityInX\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EccentricityInY\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EccentricityInZ\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConnectionGeometry\" name=\"IfcConnectionPointGeometry\" nillable=\"true\" type=\"ifc:IfcConnectionPointGeometry\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConnectionPointGeometry\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PointOnRelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PointOnRelatedElement\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConnectionGeometry\" name=\"IfcConnectionPortGeometry\" nillable=\"true\" type=\"ifc:IfcConnectionPortGeometry\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConnectionPortGeometry\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LocationAtRelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LocationAtRelatedElement\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ProfileOfPort\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConnectionGeometry\" name=\"IfcConnectionSurfaceGeometry\" nillable=\"true\" type=\"ifc:IfcConnectionSurfaceGeometry\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConnectionSurfaceGeometry\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SurfaceOnRelatedElement\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcConstraint\" nillable=\"true\" type=\"ifc:IfcConstraint\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConstraint\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConstraintGrade\" type=\"ifc:IfcConstraintEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConstraintSource\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CreatingActor\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CreationTime\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedGrade\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcConstraintAggregationRelationship\" nillable=\"true\" type=\"ifc:IfcConstraintAggregationRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConstraintAggregationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedConstraints\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcConstraint\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LogicalAggregator\" type=\"ifc:IfcLogicalOperatorEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcConstraintClassificationRelationship\" nillable=\"true\" type=\"ifc:IfcConstraintClassificationRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConstraintClassificationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ClassifiedConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedClassifications\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationNotationSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcConstraintRelationship\" nillable=\"true\" type=\"ifc:IfcConstraintRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConstraintRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedConstraints\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcConstraint\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConstructionResource\" name=\"IfcConstructionEquipmentResource\" nillable=\"true\" type=\"ifc:IfcConstructionEquipmentResource\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConstructionEquipmentResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConstructionResource\" name=\"IfcConstructionMaterialResource\" nillable=\"true\" type=\"ifc:IfcConstructionMaterialResource\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConstructionMaterialResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Suppliers\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UsageRatio\" minOccurs=\"0\" type=\"ifc:IfcRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConstructionResource\" name=\"IfcConstructionProductResource\" nillable=\"true\" type=\"ifc:IfcConstructionProductResource\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConstructionProductResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcResource\" name=\"IfcConstructionResource\" nillable=\"true\" type=\"ifc:IfcConstructionResource\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConstructionResource\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcResource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ResourceIdentifier\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ResourceGroup\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ResourceConsumption\" minOccurs=\"0\" type=\"ifc:IfcResourceConsumptionEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"BaseQuantity\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcNamedUnit\" name=\"IfcContextDependentUnit\" nillable=\"true\" type=\"ifc:IfcContextDependentUnit\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcContextDependentUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcControl\" nillable=\"true\" type=\"ifc:IfcControl\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcControl\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionControlElementType\" name=\"IfcControllerType\" nillable=\"true\" type=\"ifc:IfcControllerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcControllerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcNamedUnit\" name=\"IfcConversionBasedUnit\" nillable=\"true\" type=\"ifc:IfcConversionBasedUnit\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcConversionBasedUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConversionFactor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcCooledBeamType\" nillable=\"true\" type=\"ifc:IfcCooledBeamType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCooledBeamType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcCoolingTowerType\" nillable=\"true\" type=\"ifc:IfcCoolingTowerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCoolingTowerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcCoordinatedUniversalTimeOffset\" nillable=\"true\" type=\"ifc:IfcCoordinatedUniversalTimeOffset\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCoordinatedUniversalTimeOffset\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HourOffset\" type=\"ifc:IfcHourInDay\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MinuteOffset\" minOccurs=\"0\" type=\"ifc:IfcMinuteInHour\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Sense\" type=\"ifc:IfcAheadOrBehind\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcCostItem\" nillable=\"true\" type=\"ifc:IfcCostItem\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCostItem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcCostSchedule\" nillable=\"true\" type=\"ifc:IfcCostSchedule\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCostSchedule\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SubmittedBy\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PreparedBy\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SubmittedOn\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Status\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TargetUsers\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"UpdateDate\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ID\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCostScheduleTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAppliedValue\" name=\"IfcCostValue\" nillable=\"true\" type=\"ifc:IfcCostValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCostValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CostType\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Condition\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcCovering\" nillable=\"true\" type=\"ifc:IfcCovering\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCovering\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" minOccurs=\"0\" type=\"ifc:IfcCoveringTypeEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcCoveringType\" nillable=\"true\" type=\"ifc:IfcCoveringType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCoveringType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcCraneRailAShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcCraneRailAShapeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCraneRailAShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BaseWidth2\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Radius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HeadWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HeadDepth2\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HeadDepth3\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BaseWidth4\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth1\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth2\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth3\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcCraneRailFShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcCraneRailFShapeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCraneRailFShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HeadWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Radius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HeadDepth2\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HeadDepth3\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth1\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BaseDepth2\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConstructionResource\" name=\"IfcCrewResource\" nillable=\"true\" type=\"ifc:IfcCrewResource\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCrewResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcCsgPrimitive3D\" nillable=\"true\" type=\"ifc:IfcCsgPrimitive3D\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCsgPrimitive3D\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSolidModel\" name=\"IfcCsgSolid\" nillable=\"true\" type=\"ifc:IfcCsgSolid\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCsgSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TreeRootExpression\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCsgSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcCurrencyRelationship\" nillable=\"true\" type=\"ifc:IfcCurrencyRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCurrencyRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingMonetaryUnit\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedMonetaryUnit\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ExchangeRate\" type=\"ifc:IfcPositiveRatioMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RateDateTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"RateSource\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcCurtainWall\" nillable=\"true\" type=\"ifc:IfcCurtainWall\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCurtainWall\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcCurtainWallType\" nillable=\"true\" type=\"ifc:IfcCurtainWallType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCurtainWallType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCurtainWallTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcCurve\" nillable=\"true\" type=\"ifc:IfcCurve\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCurve\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundedSurface\" name=\"IfcCurveBoundedPlane\" nillable=\"true\" type=\"ifc:IfcCurveBoundedPlane\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCurveBoundedPlane\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPlane\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OuterBoundary\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\" minOccurs=\"0\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPresentationStyle\" name=\"IfcCurveStyle\" nillable=\"true\" type=\"ifc:IfcCurveStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCurveStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CurveFont\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CurveWidth\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CurveColour\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcCurveStyleFont\" nillable=\"true\" type=\"ifc:IfcCurveStyleFont\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCurveStyleFont\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PatternList\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontPattern\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurveStyleFontPattern\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcCurveStyleFontAndScaling\" nillable=\"true\" type=\"ifc:IfcCurveStyleFontAndScaling\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCurveStyleFontAndScaling\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurveFont\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CurveFontScaling\" type=\"ifc:IfcPositiveRatioMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcCurveStyleFontPattern\" nillable=\"true\" type=\"ifc:IfcCurveStyleFontPattern\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcCurveStyleFontPattern\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VisibleSegmentLength\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InvisibleSegmentLength\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcDamperType\" nillable=\"true\" type=\"ifc:IfcDamperType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDamperType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDateAndTime\" nillable=\"true\" type=\"ifc:IfcDateAndTime\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDateAndTime\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DateComponent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeComponent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLocalTime\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcDefinedSymbol\" nillable=\"true\" type=\"ifc:IfcDefinedSymbol\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDefinedSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Definition\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinedSymbolSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Target\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator2D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProfileDef\" name=\"IfcDerivedProfileDef\" nillable=\"true\" type=\"ifc:IfcDerivedProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDerivedProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ParentProfile\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Operator\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator2D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Label\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDerivedUnit\" nillable=\"true\" type=\"ifc:IfcDerivedUnit\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDerivedUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Elements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDerivedUnitElement\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDerivedUnitElement\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UnitType\" type=\"ifc:IfcDerivedUnitEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDerivedUnitElement\" nillable=\"true\" type=\"ifc:IfcDerivedUnitElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDerivedUnitElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Unit\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Exponent\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" name=\"IfcDiameterDimension\" nillable=\"true\" type=\"ifc:IfcDiameterDimension\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDiameterDimension\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDraughtingCalloutRelationship\" name=\"IfcDimensionCalloutRelationship\" nillable=\"true\" type=\"ifc:IfcDimensionCalloutRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDimensionCalloutRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCalloutRelationship\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationCurveOccurrence\" name=\"IfcDimensionCurve\" nillable=\"true\" type=\"ifc:IfcDimensionCurve\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDimensionCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationCurveOccurrence\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDraughtingCallout\" name=\"IfcDimensionCurveDirectedCallout\" nillable=\"true\" type=\"ifc:IfcDimensionCurveDirectedCallout\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDimensionCurveDirectedCallout\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCallout\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTerminatorSymbol\" name=\"IfcDimensionCurveTerminator\" nillable=\"true\" type=\"ifc:IfcDimensionCurveTerminator\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDimensionCurveTerminator\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTerminatorSymbol\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Role\" type=\"ifc:IfcDimensionExtentUsage\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDraughtingCalloutRelationship\" name=\"IfcDimensionPair\" nillable=\"true\" type=\"ifc:IfcDimensionPair\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDimensionPair\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCalloutRelationship\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDimensionalExponents\" nillable=\"true\" type=\"ifc:IfcDimensionalExponents\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDimensionalExponents\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LengthExponent\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MassExponent\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeExponent\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ElectricCurrentExponent\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThermodynamicTemperatureExponent\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AmountOfSubstanceExponent\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LuminousIntensityExponent\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcDirection\" nillable=\"true\" type=\"ifc:IfcDirection\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDirection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DirectionRatios\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:double-wrapper\" maxOccurs=\"3\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:double-wrapper\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementComponent\" name=\"IfcDiscreteAccessory\" nillable=\"true\" type=\"ifc:IfcDiscreteAccessory\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDiscreteAccessory\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementComponentType\" name=\"IfcDiscreteAccessoryType\" nillable=\"true\" type=\"ifc:IfcDiscreteAccessoryType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDiscreteAccessoryType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcDistributionChamberElement\" nillable=\"true\" type=\"ifc:IfcDistributionChamberElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDistributionChamberElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcDistributionChamberElementType\" nillable=\"true\" type=\"ifc:IfcDistributionChamberElementType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDistributionChamberElementType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionElement\" name=\"IfcDistributionControlElement\" nillable=\"true\" type=\"ifc:IfcDistributionControlElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDistributionControlElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ControlElementId\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionElementType\" name=\"IfcDistributionControlElementType\" nillable=\"true\" type=\"ifc:IfcDistributionControlElementType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDistributionControlElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcDistributionElement\" nillable=\"true\" type=\"ifc:IfcDistributionElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDistributionElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementType\" name=\"IfcDistributionElementType\" nillable=\"true\" type=\"ifc:IfcDistributionElementType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDistributionElementType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionElement\" name=\"IfcDistributionFlowElement\" nillable=\"true\" type=\"ifc:IfcDistributionFlowElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDistributionFlowElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionElementType\" name=\"IfcDistributionFlowElementType\" nillable=\"true\" type=\"ifc:IfcDistributionFlowElementType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDistributionFlowElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPort\" name=\"IfcDistributionPort\" nillable=\"true\" type=\"ifc:IfcDistributionPort\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDistributionPort\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPort\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FlowDirection\" minOccurs=\"0\" type=\"ifc:IfcFlowDirectionEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDocumentElectronicFormat\" nillable=\"true\" type=\"ifc:IfcDocumentElectronicFormat\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDocumentElectronicFormat\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FileExtension\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MimeContentType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MimeSubtype\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDocumentInformation\" nillable=\"true\" type=\"ifc:IfcDocumentInformation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDocumentInformation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DocumentId\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DocumentReferences\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDocumentReference\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Purpose\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IntendedUse\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Scope\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Revision\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"DocumentOwner\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Editors\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CreationTime\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LastRevisionTime\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ElectronicFormat\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentElectronicFormat\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ValidFrom\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ValidUntil\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Confidentiality\" minOccurs=\"0\" type=\"ifc:IfcDocumentConfidentialityEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Status\" minOccurs=\"0\" type=\"ifc:IfcDocumentStatusEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDocumentInformationRelationship\" nillable=\"true\" type=\"ifc:IfcDocumentInformationRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDocumentInformationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedDocuments\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDocumentInformation\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelationshipType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcDocumentReference\" nillable=\"true\" type=\"ifc:IfcDocumentReference\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDocumentReference\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcDoor\" nillable=\"true\" type=\"ifc:IfcDoor\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDoor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallHeight\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OverallWidth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcDoorLiningProperties\" nillable=\"true\" type=\"ifc:IfcDoorLiningProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDoorLiningProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LiningDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LiningThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThresholdDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThresholdThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransomThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransomOffset\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LiningOffset\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThresholdOffset\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CasingThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CasingDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ShapeAspectStyle\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcDoorPanelProperties\" nillable=\"true\" type=\"ifc:IfcDoorPanelProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDoorPanelProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PanelDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PanelOperation\" type=\"ifc:IfcDoorPanelOperationEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PanelWidth\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PanelPosition\" type=\"ifc:IfcDoorPanelPositionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ShapeAspectStyle\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTypeProduct\" name=\"IfcDoorStyle\" nillable=\"true\" type=\"ifc:IfcDoorStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDoorStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcDoorStyleOperationEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConstructionType\" type=\"ifc:IfcDoorStyleConstructionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ParameterTakesPrecedence\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Sizeable\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcDraughtingCallout\" nillable=\"true\" type=\"ifc:IfcDraughtingCallout\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDraughtingCallout\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Contents\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDraughtingCalloutElement\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDraughtingCalloutElement\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDraughtingCalloutRelationship\" nillable=\"true\" type=\"ifc:IfcDraughtingCalloutRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDraughtingCalloutRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingDraughtingCallout\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDraughtingCallout\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedDraughtingCallout\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDraughtingCallout\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedColour\" name=\"IfcDraughtingPreDefinedColour\" nillable=\"true\" type=\"ifc:IfcDraughtingPreDefinedColour\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDraughtingPreDefinedColour\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedColour\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedCurveFont\" name=\"IfcDraughtingPreDefinedCurveFont\" nillable=\"true\" type=\"ifc:IfcDraughtingPreDefinedCurveFont\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDraughtingPreDefinedCurveFont\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedCurveFont\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedTextFont\" name=\"IfcDraughtingPreDefinedTextFont\" nillable=\"true\" type=\"ifc:IfcDraughtingPreDefinedTextFont\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDraughtingPreDefinedTextFont\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedTextFont\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowFittingType\" name=\"IfcDuctFittingType\" nillable=\"true\" type=\"ifc:IfcDuctFittingType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDuctFittingType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowSegmentType\" name=\"IfcDuctSegmentType\" nillable=\"true\" type=\"ifc:IfcDuctSegmentType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDuctSegmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" name=\"IfcDuctSilencerType\" nillable=\"true\" type=\"ifc:IfcDuctSilencerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcDuctSilencerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcEdge\" nillable=\"true\" type=\"ifc:IfcEdge\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEdge\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EdgeStart\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertex\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EdgeEnd\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertex\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEdge\" name=\"IfcEdgeCurve\" nillable=\"true\" type=\"ifc:IfcEdgeCurve\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEdgeCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EdgeGeometry\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" name=\"IfcEdgeFeature\" nillable=\"true\" type=\"ifc:IfcEdgeFeature\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEdgeFeature\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FeatureLength\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcLoop\" name=\"IfcEdgeLoop\" nillable=\"true\" type=\"ifc:IfcEdgeLoop\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEdgeLoop\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EdgeList\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcOrientedEdge\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcElectricApplianceType\" nillable=\"true\" type=\"ifc:IfcElectricApplianceType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricApplianceType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowController\" name=\"IfcElectricDistributionPoint\" nillable=\"true\" type=\"ifc:IfcElectricDistributionPoint\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricDistributionPoint\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DistributionPointFunction\" type=\"ifc:IfcElectricDistributionPointFunctionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedFunction\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" name=\"IfcElectricFlowStorageDeviceType\" nillable=\"true\" type=\"ifc:IfcElectricFlowStorageDeviceType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricFlowStorageDeviceType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcElectricGeneratorType\" nillable=\"true\" type=\"ifc:IfcElectricGeneratorType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricGeneratorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcElectricHeaterType\" nillable=\"true\" type=\"ifc:IfcElectricHeaterType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricHeaterType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricHeaterTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcElectricMotorType\" nillable=\"true\" type=\"ifc:IfcElectricMotorType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricMotorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcElectricTimeControlType\" nillable=\"true\" type=\"ifc:IfcElectricTimeControlType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricTimeControlType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyProperties\" name=\"IfcElectricalBaseProperties\" nillable=\"true\" type=\"ifc:IfcElectricalBaseProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricalBaseProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ElectricCurrentType\" minOccurs=\"0\" type=\"ifc:IfcElectricCurrentEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InputVoltage\" type=\"ifc:IfcElectricVoltageMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InputFrequency\" type=\"ifc:IfcFrequencyMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FullLoadCurrent\" minOccurs=\"0\" type=\"ifc:IfcElectricCurrentMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MinimumCircuitCurrent\" minOccurs=\"0\" type=\"ifc:IfcElectricCurrentMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MaximumPowerInput\" minOccurs=\"0\" type=\"ifc:IfcPowerMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RatedPowerInput\" minOccurs=\"0\" type=\"ifc:IfcPowerMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InputPhase\" type=\"xs:long\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSystem\" name=\"IfcElectricalCircuit\" nillable=\"true\" type=\"ifc:IfcElectricalCircuit\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricalCircuit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcElectricalElement\" nillable=\"true\" type=\"ifc:IfcElectricalElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElectricalElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcElement\" nillable=\"true\" type=\"ifc:IfcElement\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Tag\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcElementAssembly\" nillable=\"true\" type=\"ifc:IfcElementAssembly\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElementAssembly\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AssemblyPlace\" minOccurs=\"0\" type=\"ifc:IfcAssemblyPlaceEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcElementComponent\" nillable=\"true\" type=\"ifc:IfcElementComponent\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElementComponent\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementType\" name=\"IfcElementComponentType\" nillable=\"true\" type=\"ifc:IfcElementComponentType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElementComponentType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcElementQuantity\" nillable=\"true\" type=\"ifc:IfcElementQuantity\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElementQuantity\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MethodOfMeasurement\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Quantities\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPhysicalQuantity\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTypeProduct\" name=\"IfcElementType\" nillable=\"true\" type=\"ifc:IfcElementType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ElementType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSurface\" name=\"IfcElementarySurface\" nillable=\"true\" type=\"ifc:IfcElementarySurface\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcElementarySurface\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConic\" name=\"IfcEllipse\" nillable=\"true\" type=\"ifc:IfcEllipse\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEllipse\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcEllipseProfileDef\" nillable=\"true\" type=\"ifc:IfcEllipseProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEllipseProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcEnergyConversionDevice\" nillable=\"true\" type=\"ifc:IfcEnergyConversionDevice\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEnergyConversionDevice\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcEnergyConversionDeviceType\" nillable=\"true\" type=\"ifc:IfcEnergyConversionDeviceType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEnergyConversionDeviceType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcEnergyProperties\" nillable=\"true\" type=\"ifc:IfcEnergyProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEnergyProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EnergySequence\" minOccurs=\"0\" type=\"ifc:IfcEnergySequenceEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedEnergySequence\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAppliedValue\" name=\"IfcEnvironmentalImpactValue\" nillable=\"true\" type=\"ifc:IfcEnvironmentalImpactValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEnvironmentalImpactValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ImpactType\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Category\" type=\"ifc:IfcEnvironmentalImpactCategoryEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedCategory\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcEquipmentElement\" nillable=\"true\" type=\"ifc:IfcEquipmentElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEquipmentElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcEquipmentStandard\" nillable=\"true\" type=\"ifc:IfcEquipmentStandard\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEquipmentStandard\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcEvaporativeCoolerType\" nillable=\"true\" type=\"ifc:IfcEvaporativeCoolerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEvaporativeCoolerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcEvaporatorType\" nillable=\"true\" type=\"ifc:IfcEvaporatorType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcEvaporatorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcExtendedMaterialProperties\" nillable=\"true\" type=\"ifc:IfcExtendedMaterialProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcExtendedMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ExtendedProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcExternalReference\" nillable=\"true\" type=\"ifc:IfcExternalReference\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcExternalReference\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Location\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ItemReference\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcExternallyDefinedHatchStyle\" nillable=\"true\" type=\"ifc:IfcExternallyDefinedHatchStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcExternallyDefinedHatchStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcExternallyDefinedSurfaceStyle\" nillable=\"true\" type=\"ifc:IfcExternallyDefinedSurfaceStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcExternallyDefinedSurfaceStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcExternallyDefinedSymbol\" nillable=\"true\" type=\"ifc:IfcExternallyDefinedSymbol\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcExternallyDefinedSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcExternallyDefinedTextFont\" nillable=\"true\" type=\"ifc:IfcExternallyDefinedTextFont\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcExternallyDefinedTextFont\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSweptAreaSolid\" name=\"IfcExtrudedAreaSolid\" nillable=\"true\" type=\"ifc:IfcExtrudedAreaSolid\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcExtrudedAreaSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcFace\" nillable=\"true\" type=\"ifc:IfcFace\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFace\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Bounds\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFaceBound\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFaceBound\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcFaceBasedSurfaceModel\" nillable=\"true\" type=\"ifc:IfcFaceBasedSurfaceModel\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFaceBasedSurfaceModel\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FbsmFaces\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectedFaceSet\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcConnectedFaceSet\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcFaceBound\" nillable=\"true\" type=\"ifc:IfcFaceBound\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFaceBound\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Bound\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLoop\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFaceBound\" name=\"IfcFaceOuterBound\" nillable=\"true\" type=\"ifc:IfcFaceOuterBound\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFaceOuterBound\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFaceBound\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFace\" name=\"IfcFaceSurface\" nillable=\"true\" type=\"ifc:IfcFaceSurface\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFaceSurface\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFace\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FaceSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcManifoldSolidBrep\" name=\"IfcFacetedBrep\" nillable=\"true\" type=\"ifc:IfcFacetedBrep\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFacetedBrep\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcManifoldSolidBrep\" name=\"IfcFacetedBrepWithVoids\" nillable=\"true\" type=\"ifc:IfcFacetedBrepWithVoids\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFacetedBrepWithVoids\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Voids\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClosedShell\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" name=\"IfcFailureConnectionCondition\" nillable=\"true\" type=\"ifc:IfcFailureConnectionCondition\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFailureConnectionCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TensionFailureX\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TensionFailureY\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TensionFailureZ\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CompressionFailureX\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CompressionFailureY\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CompressionFailureZ\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" name=\"IfcFanType\" nillable=\"true\" type=\"ifc:IfcFanType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFanType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementComponent\" name=\"IfcFastener\" nillable=\"true\" type=\"ifc:IfcFastener\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFastener\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementComponentType\" name=\"IfcFastenerType\" nillable=\"true\" type=\"ifc:IfcFastenerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFastenerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcFeatureElement\" nillable=\"true\" type=\"ifc:IfcFeatureElement\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFeatureElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFeatureElement\" name=\"IfcFeatureElementAddition\" nillable=\"true\" type=\"ifc:IfcFeatureElementAddition\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFeatureElementAddition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFeatureElement\" name=\"IfcFeatureElementSubtraction\" nillable=\"true\" type=\"ifc:IfcFeatureElementSubtraction\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFeatureElementSubtraction\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPresentationStyle\" name=\"IfcFillAreaStyle\" nillable=\"true\" type=\"ifc:IfcFillAreaStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFillAreaStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FillStyles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFillStyleSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcFillAreaStyleHatching\" nillable=\"true\" type=\"ifc:IfcFillAreaStyleHatching\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFillAreaStyleHatching\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HatchLineAppearance\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyle\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartOfNextHatchLine\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcHatchLineDistanceSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PointOfReferenceHatchLine\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PatternStart\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HatchLineAngle\" type=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcFillAreaStyleTileSymbolWithStyle\" nillable=\"true\" type=\"ifc:IfcFillAreaStyleTileSymbolWithStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFillAreaStyleTileSymbolWithStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Symbol\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAnnotationSymbolOccurrence\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcFillAreaStyleTiles\" nillable=\"true\" type=\"ifc:IfcFillAreaStyleTiles\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFillAreaStyleTiles\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TilingPattern\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOneDirectionRepeatFactor\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Tiles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillAreaStyleTileShapeSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFillAreaStyleTileShapeSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TilingScale\" type=\"ifc:IfcPositiveRatioMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" name=\"IfcFilterType\" nillable=\"true\" type=\"ifc:IfcFilterType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFilterType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcFireSuppressionTerminalType\" nillable=\"true\" type=\"ifc:IfcFireSuppressionTerminalType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFireSuppressionTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowController\" nillable=\"true\" type=\"ifc:IfcFlowController\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowController\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowControllerType\" nillable=\"true\" type=\"ifc:IfcFlowControllerType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowControllerType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowFitting\" nillable=\"true\" type=\"ifc:IfcFlowFitting\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowFitting\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowFittingType\" nillable=\"true\" type=\"ifc:IfcFlowFittingType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowFittingType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionControlElementType\" name=\"IfcFlowInstrumentType\" nillable=\"true\" type=\"ifc:IfcFlowInstrumentType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowInstrumentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcFlowMeterType\" nillable=\"true\" type=\"ifc:IfcFlowMeterType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowMeterType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowMovingDevice\" nillable=\"true\" type=\"ifc:IfcFlowMovingDevice\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowMovingDevice\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowMovingDeviceType\" nillable=\"true\" type=\"ifc:IfcFlowMovingDeviceType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowMovingDeviceType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowSegment\" nillable=\"true\" type=\"ifc:IfcFlowSegment\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowSegment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowSegmentType\" nillable=\"true\" type=\"ifc:IfcFlowSegmentType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowSegmentType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowStorageDevice\" nillable=\"true\" type=\"ifc:IfcFlowStorageDevice\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowStorageDevice\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowStorageDeviceType\" nillable=\"true\" type=\"ifc:IfcFlowStorageDeviceType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowStorageDeviceType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowTerminal\" nillable=\"true\" type=\"ifc:IfcFlowTerminal\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowTerminal\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowTerminalType\" nillable=\"true\" type=\"ifc:IfcFlowTerminalType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowTerminalType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowTreatmentDevice\" nillable=\"true\" type=\"ifc:IfcFlowTreatmentDevice\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowTreatmentDevice\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowTreatmentDeviceType\" nillable=\"true\" type=\"ifc:IfcFlowTreatmentDeviceType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFlowTreatmentDeviceType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcFluidFlowProperties\" nillable=\"true\" type=\"ifc:IfcFluidFlowProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFluidFlowProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PropertySource\" type=\"ifc:IfcPropertySourceEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"FlowConditionTimeSeries\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"VelocityTimeSeries\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"FlowrateTimeSeries\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Fluid\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PressureTimeSeries\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedPropertySource\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TemperatureSingleValue\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WetBulbTemperatureSingleValue\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"WetBulbTemperatureTimeSeries\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TemperatureTimeSeries\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"FlowrateSingleValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDerivedMeasureValue\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlowConditionSingleValue\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VelocitySingleValue\" minOccurs=\"0\" type=\"ifc:IfcLinearVelocityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PressureSingleValue\" minOccurs=\"0\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcFooting\" nillable=\"true\" type=\"ifc:IfcFooting\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFooting\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcFuelProperties\" nillable=\"true\" type=\"ifc:IfcFuelProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFuelProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CombustionTemperature\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CarbonContent\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LowerHeatingValue\" minOccurs=\"0\" type=\"ifc:IfcHeatingValueMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HigherHeatingValue\" minOccurs=\"0\" type=\"ifc:IfcHeatingValueMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcFurnishingElement\" nillable=\"true\" type=\"ifc:IfcFurnishingElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFurnishingElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementType\" name=\"IfcFurnishingElementType\" nillable=\"true\" type=\"ifc:IfcFurnishingElementType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFurnishingElementType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcFurnitureStandard\" nillable=\"true\" type=\"ifc:IfcFurnitureStandard\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFurnitureStandard\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFurnishingElementType\" name=\"IfcFurnitureType\" nillable=\"true\" type=\"ifc:IfcFurnitureType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcFurnitureType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcGasTerminalType\" nillable=\"true\" type=\"ifc:IfcGasTerminalType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGasTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcGasTerminalTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcGeneralMaterialProperties\" nillable=\"true\" type=\"ifc:IfcGeneralMaterialProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGeneralMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MolecularWeight\" minOccurs=\"0\" type=\"ifc:IfcMolecularWeightMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Porosity\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MassDensity\" minOccurs=\"0\" type=\"ifc:IfcMassDensityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProfileProperties\" name=\"IfcGeneralProfileProperties\" nillable=\"true\" type=\"ifc:IfcGeneralProfileProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGeneralProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PhysicalWeight\" minOccurs=\"0\" type=\"ifc:IfcMassPerLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Perimeter\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MinimumPlateThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MaximumPlateThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionArea\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricSet\" name=\"IfcGeometricCurveSet\" nillable=\"true\" type=\"ifc:IfcGeometricCurveSet\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGeometricCurveSet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricSet\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentationContext\" name=\"IfcGeometricRepresentationContext\" nillable=\"true\" type=\"ifc:IfcGeometricRepresentationContext\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGeometricRepresentationContext\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationContext\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CoordinateSpaceDimension\" minOccurs=\"0\" type=\"ifc:IfcDimensionCount\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Precision\" minOccurs=\"0\" type=\"xs:double\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"WorldCoordinateSystem\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TrueNorth\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentationItem\" name=\"IfcGeometricRepresentationItem\" nillable=\"true\" type=\"ifc:IfcGeometricRepresentationItem\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGeometricRepresentationItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext-temp\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:restriction base=\"ifc:IfcGeometricRepresentationContext\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ContextIdentifier\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ContextType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:restriction>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationContext\" name=\"IfcGeometricRepresentationSubContext\" nillable=\"true\" type=\"ifc:IfcGeometricRepresentationSubContext\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationSubContext-temp\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ParentContext\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationContext\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TargetScale\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TargetView\" type=\"ifc:IfcGeometricProjectionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedTargetView\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcGeometricSet\" nillable=\"true\" type=\"ifc:IfcGeometricSet\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGeometricSet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Elements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGeometricSetSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcGrid\" nillable=\"true\" type=\"ifc:IfcGrid\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGrid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UAxes\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VAxes\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WAxes\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcGridAxis\" nillable=\"true\" type=\"ifc:IfcGridAxis\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGridAxis\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AxisTag\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AxisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"ifc:IfcBoolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObjectPlacement\" name=\"IfcGridPlacement\" nillable=\"true\" type=\"ifc:IfcGridPlacement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGridPlacement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PlacementLocation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PlacementRefDirection\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcGroup\" nillable=\"true\" type=\"ifc:IfcGroup\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcGroup\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcHalfSpaceSolid\" nillable=\"true\" type=\"ifc:IfcHalfSpaceSolid\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcHalfSpaceSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BaseSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AgreementFlag\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcHeatExchangerType\" nillable=\"true\" type=\"ifc:IfcHeatExchangerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcHeatExchangerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcHumidifierType\" nillable=\"true\" type=\"ifc:IfcHumidifierType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcHumidifierType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcHygroscopicMaterialProperties\" nillable=\"true\" type=\"ifc:IfcHygroscopicMaterialProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcHygroscopicMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UpperVaporResistanceFactor\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LowerVaporResistanceFactor\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IsothermalMoistureCapacity\" minOccurs=\"0\" type=\"ifc:IfcIsothermalMoistureCapacityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VaporPermeability\" minOccurs=\"0\" type=\"ifc:IfcVaporPermeabilityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MoistureDiffusivity\" minOccurs=\"0\" type=\"ifc:IfcMoistureDiffusivityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcIShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcIShapeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcIShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSurfaceTexture\" name=\"IfcImageTexture\" nillable=\"true\" type=\"ifc:IfcImageTexture\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcImageTexture\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UrlReference\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcInventory\" nillable=\"true\" type=\"ifc:IfcInventory\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcInventory\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"InventoryType\" type=\"ifc:IfcInventoryTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Jurisdiction\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ResponsiblePersons\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPerson\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LastUpdateDate\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CurrentValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"OriginalValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTimeSeries\" name=\"IfcIrregularTimeSeries\" nillable=\"true\" type=\"ifc:IfcIrregularTimeSeries\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcIrregularTimeSeries\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Values\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIrregularTimeSeriesValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcIrregularTimeSeriesValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcIrregularTimeSeriesValue\" nillable=\"true\" type=\"ifc:IfcIrregularTimeSeriesValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcIrregularTimeSeriesValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TimeStamp\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ListValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowFittingType\" name=\"IfcJunctionBoxType\" nillable=\"true\" type=\"ifc:IfcJunctionBoxType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcJunctionBoxType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcLShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcLShapeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Width\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EdgeRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LegSlope\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConstructionResource\" name=\"IfcLaborResource\" nillable=\"true\" type=\"ifc:IfcLaborResource\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLaborResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SkillSet\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcLampType\" nillable=\"true\" type=\"ifc:IfcLampType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLampType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcLibraryInformation\" nillable=\"true\" type=\"ifc:IfcLibraryInformation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLibraryInformation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Version\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Publisher\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"VersionDate\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LibraryReference\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLibraryReference\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcLibraryReference\" nillable=\"true\" type=\"ifc:IfcLibraryReference\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLibraryReference\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcLightDistributionData\" nillable=\"true\" type=\"ifc:IfcLightDistributionData\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLightDistributionData\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MainPlaneAngle\" type=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SecondaryPlaneAngle\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LuminousIntensity\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLuminousIntensityDistributionMeasure\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcLightFixtureType\" nillable=\"true\" type=\"ifc:IfcLightFixtureType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLightFixtureType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcLightIntensityDistribution\" nillable=\"true\" type=\"ifc:IfcLightIntensityDistribution\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLightIntensityDistribution\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LightDistributionCurve\" type=\"ifc:IfcLightDistributionCurveEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DistributionData\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLightDistributionData\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLightDistributionData\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcLightSource\" nillable=\"true\" type=\"ifc:IfcLightSource\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLightSource\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LightColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AmbientIntensity\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Intensity\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcLightSource\" name=\"IfcLightSourceAmbient\" nillable=\"true\" type=\"ifc:IfcLightSourceAmbient\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLightSourceAmbient\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcLightSource\" name=\"IfcLightSourceDirectional\" nillable=\"true\" type=\"ifc:IfcLightSourceDirectional\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLightSourceDirectional\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Orientation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcLightSource\" name=\"IfcLightSourceGoniometric\" nillable=\"true\" type=\"ifc:IfcLightSourceGoniometric\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLightSourceGoniometric\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ColourAppearance\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ColourTemperature\" type=\"ifc:IfcThermodynamicTemperatureMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LuminousFlux\" type=\"ifc:IfcLuminousFluxMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LightEmissionSource\" type=\"ifc:IfcLightEmissionSourceEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LightDistributionDataSource\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcLightSource\" name=\"IfcLightSourcePositional\" nillable=\"true\" type=\"ifc:IfcLightSourcePositional\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLightSourcePositional\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConstantAttenuation\" type=\"ifc:IfcReal\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DistanceAttenuation\" type=\"ifc:IfcReal\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"QuadricAttenuation\" type=\"ifc:IfcReal\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcLightSourcePositional\" name=\"IfcLightSourceSpot\" nillable=\"true\" type=\"ifc:IfcLightSourceSpot\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLightSourceSpot\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLightSourcePositional\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Orientation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConcentrationExponent\" minOccurs=\"0\" type=\"ifc:IfcReal\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SpreadAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BeamWidthAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCurve\" name=\"IfcLine\" nillable=\"true\" type=\"ifc:IfcLine\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLine\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Pnt\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Dir\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" name=\"IfcLinearDimension\" nillable=\"true\" type=\"ifc:IfcLinearDimension\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLinearDimension\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObjectPlacement\" name=\"IfcLocalPlacement\" nillable=\"true\" type=\"ifc:IfcLocalPlacement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLocalPlacement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PlacementRelTo\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectPlacement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelativePlacement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcLocalTime\" nillable=\"true\" type=\"ifc:IfcLocalTime\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLocalTime\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HourComponent\" type=\"ifc:IfcHourInDay\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MinuteComponent\" minOccurs=\"0\" type=\"ifc:IfcMinuteInHour\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SecondComponent\" minOccurs=\"0\" type=\"ifc:IfcSecondInMinute\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Zone\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCoordinatedUniversalTimeOffset\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DaylightSavingOffset\" minOccurs=\"0\" type=\"ifc:IfcDaylightSavingHour\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcLoop\" nillable=\"true\" type=\"ifc:IfcLoop\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcLoop\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSolidModel\" name=\"IfcManifoldSolidBrep\" nillable=\"true\" type=\"ifc:IfcManifoldSolidBrep\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcManifoldSolidBrep\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Outer\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentationItem\" name=\"IfcMappedItem\" nillable=\"true\" type=\"ifc:IfcMappedItem\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMappedItem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MappingSource\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MappingTarget\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterial\" nillable=\"true\" type=\"ifc:IfcMaterial\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMaterial\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterialClassificationRelationship\" nillable=\"true\" type=\"ifc:IfcMaterialClassificationRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMaterialClassificationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MaterialClassifications\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationNotationSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ClassifiedMaterial\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProductRepresentation\" name=\"IfcMaterialDefinitionRepresentation\" nillable=\"true\" type=\"ifc:IfcMaterialDefinitionRepresentation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMaterialDefinitionRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RepresentedMaterial\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterialLayer\" nillable=\"true\" type=\"ifc:IfcMaterialLayer\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMaterialLayer\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Material\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IsVentilated\" minOccurs=\"0\" type=\"ifc:IfcLogical\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterialLayerSet\" nillable=\"true\" type=\"ifc:IfcMaterialLayerSet\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMaterialLayerSet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MaterialLayers\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcMaterialLayer\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerSetName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterialLayerSetUsage\" nillable=\"true\" type=\"ifc:IfcMaterialLayerSetUsage\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMaterialLayerSetUsage\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ForLayerSet\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayerSet\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerSetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DirectionSense\" type=\"ifc:IfcDirectionSenseEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OffsetFromReferenceLine\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterialList\" nillable=\"true\" type=\"ifc:IfcMaterialList\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMaterialList\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Materials\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcMaterial\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterialProperties\" nillable=\"true\" type=\"ifc:IfcMaterialProperties\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMaterialProperties\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Material\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMeasureWithUnit\" nillable=\"true\" type=\"ifc:IfcMeasureWithUnit\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMeasureWithUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ValueComponent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UnitComponent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMechanicalMaterialProperties\" name=\"IfcMechanicalConcreteMaterialProperties\" nillable=\"true\" type=\"ifc:IfcMechanicalConcreteMaterialProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMechanicalConcreteMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMechanicalMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CompressiveStrength\" minOccurs=\"0\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MaxAggregateSize\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AdmixturesDescription\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Workability\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ProtectivePoreRatio\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WaterImpermeability\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFastener\" name=\"IfcMechanicalFastener\" nillable=\"true\" type=\"ifc:IfcMechanicalFastener\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMechanicalFastener\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFastener\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NominalDiameter\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"NominalLength\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFastenerType\" name=\"IfcMechanicalFastenerType\" nillable=\"true\" type=\"ifc:IfcMechanicalFastenerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMechanicalFastenerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFastenerType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcMechanicalMaterialProperties\" nillable=\"true\" type=\"ifc:IfcMechanicalMaterialProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMechanicalMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DynamicViscosity\" minOccurs=\"0\" type=\"ifc:IfcDynamicViscosityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"YoungModulus\" minOccurs=\"0\" type=\"ifc:IfcModulusOfElasticityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ShearModulus\" minOccurs=\"0\" type=\"ifc:IfcModulusOfElasticityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PoissonRatio\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThermalExpansionCoefficient\" minOccurs=\"0\" type=\"ifc:IfcThermalExpansionCoefficientMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMechanicalMaterialProperties\" name=\"IfcMechanicalSteelMaterialProperties\" nillable=\"true\" type=\"ifc:IfcMechanicalSteelMaterialProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMechanicalSteelMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMechanicalMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"YieldStress\" minOccurs=\"0\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UltimateStress\" minOccurs=\"0\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UltimateStrain\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HardeningModule\" minOccurs=\"0\" type=\"ifc:IfcModulusOfElasticityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ProportionalStress\" minOccurs=\"0\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PlasticStrain\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Relaxations\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelaxation\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRelaxation\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcMember\" nillable=\"true\" type=\"ifc:IfcMember\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMember\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcMemberType\" nillable=\"true\" type=\"ifc:IfcMemberType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMemberType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConstraint\" name=\"IfcMetric\" nillable=\"true\" type=\"ifc:IfcMetric\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMetric\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Benchmark\" type=\"ifc:IfcBenchmarkEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ValueSource\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DataValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMonetaryUnit\" nillable=\"true\" type=\"ifc:IfcMonetaryUnit\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMonetaryUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Currency\" type=\"ifc:IfcCurrencyEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcMotorConnectionType\" nillable=\"true\" type=\"ifc:IfcMotorConnectionType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMotorConnectionType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTask\" name=\"IfcMove\" nillable=\"true\" type=\"ifc:IfcMove\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcMove\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTask\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MoveFrom\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MoveTo\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PunchList\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcText\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcText\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcNamedUnit\" nillable=\"true\" type=\"ifc:IfcNamedUnit\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcNamedUnit\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Dimensions\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDimensionalExponents\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UnitType\" type=\"ifc:IfcUnitEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObjectDefinition\" name=\"IfcObject\" nillable=\"true\" type=\"ifc:IfcObject\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcObject\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ObjectType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRoot\" name=\"IfcObjectDefinition\" nillable=\"true\" type=\"ifc:IfcObjectDefinition\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcObjectDefinition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcObjectPlacement\" nillable=\"true\" type=\"ifc:IfcObjectPlacement\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcObjectPlacement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConstraint\" name=\"IfcObjective\" nillable=\"true\" type=\"ifc:IfcObjective\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcObjective\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"BenchmarkValues\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMetric\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ResultValues\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMetric\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ObjectiveQualifier\" type=\"ifc:IfcObjectiveEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedQualifier\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcActor\" name=\"IfcOccupant\" nillable=\"true\" type=\"ifc:IfcOccupant\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOccupant\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcActor\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcOccupantTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCurve\" name=\"IfcOffsetCurve2D\" nillable=\"true\" type=\"ifc:IfcOffsetCurve2D\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOffsetCurve2D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Distance\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCurve\" name=\"IfcOffsetCurve3D\" nillable=\"true\" type=\"ifc:IfcOffsetCurve3D\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOffsetCurve3D\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Distance\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RefDirection\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcOneDirectionRepeatFactor\" nillable=\"true\" type=\"ifc:IfcOneDirectionRepeatFactor\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOneDirectionRepeatFactor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RepeatFactor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConnectedFaceSet\" name=\"IfcOpenShell\" nillable=\"true\" type=\"ifc:IfcOpenShell\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOpenShell\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" name=\"IfcOpeningElement\" nillable=\"true\" type=\"ifc:IfcOpeningElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOpeningElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcOpticalMaterialProperties\" nillable=\"true\" type=\"ifc:IfcOpticalMaterialProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOpticalMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VisibleTransmittance\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SolarTransmittance\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThermalIrTransmittance\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThermalIrEmissivityBack\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThermalIrEmissivityFront\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VisibleReflectanceBack\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VisibleReflectanceFront\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SolarReflectanceFront\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SolarReflectanceBack\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTask\" name=\"IfcOrderAction\" nillable=\"true\" type=\"ifc:IfcOrderAction\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOrderAction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTask\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ActionID\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcOrganization\" nillable=\"true\" type=\"ifc:IfcOrganization\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOrganization\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Id\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Roles\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorRole\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Addresses\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAddress\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcOrganizationRelationship\" nillable=\"true\" type=\"ifc:IfcOrganizationRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOrganizationRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingOrganization\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedOrganizations\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcOrganization\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:complexType name=\"IfcOrientedEdge-temp\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:restriction base=\"ifc:IfcEdge\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:restriction>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element substitutionGroup=\"ifc:IfcEdge\" name=\"IfcOrientedEdge\" nillable=\"true\" type=\"ifc:IfcOrientedEdge\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOrientedEdge\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcOrientedEdge-temp\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EdgeElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcEdge\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcOutletType\" nillable=\"true\" type=\"ifc:IfcOutletType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOutletType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcOwnerHistory\" nillable=\"true\" type=\"ifc:IfcOwnerHistory\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcOwnerHistory\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OwningUser\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OwningApplication\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApplication\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"State\" minOccurs=\"0\" type=\"ifc:IfcStateEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ChangeAction\" type=\"ifc:IfcChangeActionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LastModifiedDate\" minOccurs=\"0\" type=\"ifc:IfcTimeStamp\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LastModifyingUser\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LastModifyingApplication\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApplication\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CreationDate\" type=\"ifc:IfcTimeStamp\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProfileDef\" name=\"IfcParameterizedProfileDef\" nillable=\"true\" type=\"ifc:IfcParameterizedProfileDef\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcParameterizedProfileDef\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcPath\" nillable=\"true\" type=\"ifc:IfcPath\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPath\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EdgeList\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcOrientedEdge\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcPerformanceHistory\" nillable=\"true\" type=\"ifc:IfcPerformanceHistory\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPerformanceHistory\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LifeCyclePhase\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcPermeableCoveringProperties\" nillable=\"true\" type=\"ifc:IfcPermeableCoveringProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPermeableCoveringProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcPermeableCoveringOperationEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FrameDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FrameThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ShapeAspectStyle\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcPermit\" nillable=\"true\" type=\"ifc:IfcPermit\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPermit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PermitID\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPerson\" nillable=\"true\" type=\"ifc:IfcPerson\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPerson\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Id\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FamilyName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"GivenName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MiddleNames\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PrefixTitles\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SuffixTitles\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Roles\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorRole\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Addresses\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAddress\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPersonAndOrganization\" nillable=\"true\" type=\"ifc:IfcPersonAndOrganization\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPersonAndOrganization\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ThePerson\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TheOrganization\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Roles\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorRole\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalQuantity\" name=\"IfcPhysicalComplexQuantity\" nillable=\"true\" type=\"ifc:IfcPhysicalComplexQuantity\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPhysicalComplexQuantity\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HasQuantities\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPhysicalQuantity\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Discrimination\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Quality\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Usage\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPhysicalQuantity\" nillable=\"true\" type=\"ifc:IfcPhysicalQuantity\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPhysicalQuantity\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalQuantity\" name=\"IfcPhysicalSimpleQuantity\" nillable=\"true\" type=\"ifc:IfcPhysicalSimpleQuantity\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPhysicalSimpleQuantity\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Unit\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcPile\" nillable=\"true\" type=\"ifc:IfcPile\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPile\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConstructionType\" minOccurs=\"0\" type=\"ifc:IfcPileConstructionEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowFittingType\" name=\"IfcPipeFittingType\" nillable=\"true\" type=\"ifc:IfcPipeFittingType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPipeFittingType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowSegmentType\" name=\"IfcPipeSegmentType\" nillable=\"true\" type=\"ifc:IfcPipeSegmentType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPipeSegmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSurfaceTexture\" name=\"IfcPixelTexture\" nillable=\"true\" type=\"ifc:IfcPixelTexture\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPixelTexture\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Width\" type=\"ifc:IfcInteger\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Height\" type=\"ifc:IfcInteger\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ColourComponents\" type=\"ifc:IfcInteger\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Pixel\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:hexBinary-wrapper\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:hexBinary-wrapper\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcPlacement\" nillable=\"true\" type=\"ifc:IfcPlacement\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPlacement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Location\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPlanarExtent\" name=\"IfcPlanarBox\" nillable=\"true\" type=\"ifc:IfcPlanarBox\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPlanarBox\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPlanarExtent\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Placement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcPlanarExtent\" nillable=\"true\" type=\"ifc:IfcPlanarExtent\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPlanarExtent\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SizeInX\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SizeInY\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementarySurface\" name=\"IfcPlane\" nillable=\"true\" type=\"ifc:IfcPlane\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPlane\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcPlate\" nillable=\"true\" type=\"ifc:IfcPlate\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPlate\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcPlateType\" nillable=\"true\" type=\"ifc:IfcPlateType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPlateType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcPoint\" nillable=\"true\" type=\"ifc:IfcPoint\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPoint\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPoint\" name=\"IfcPointOnCurve\" nillable=\"true\" type=\"ifc:IfcPointOnCurve\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPointOnCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PointParameter\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPoint\" name=\"IfcPointOnSurface\" nillable=\"true\" type=\"ifc:IfcPointOnSurface\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPointOnSurface\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PointParameterU\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PointParameterV\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcLoop\" name=\"IfcPolyLoop\" nillable=\"true\" type=\"ifc:IfcPolyLoop\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPolyLoop\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Polygon\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" maxOccurs=\"unbounded\" minOccurs=\"3\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcHalfSpaceSolid\" name=\"IfcPolygonalBoundedHalfSpace\" nillable=\"true\" type=\"ifc:IfcPolygonalBoundedHalfSpace\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPolygonalBoundedHalfSpace\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PolygonalBoundary\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundedCurve\" name=\"IfcPolyline\" nillable=\"true\" type=\"ifc:IfcPolyline\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPolyline\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Points\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" maxOccurs=\"unbounded\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcPort\" nillable=\"true\" type=\"ifc:IfcPort\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPort\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAddress\" name=\"IfcPostalAddress\" nillable=\"true\" type=\"ifc:IfcPostalAddress\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPostalAddress\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"InternalLocation\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AddressLines\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PostalBox\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Town\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Region\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PostalCode\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Country\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedItem\" name=\"IfcPreDefinedColour\" nillable=\"true\" type=\"ifc:IfcPreDefinedColour\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPreDefinedColour\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedItem\" name=\"IfcPreDefinedCurveFont\" nillable=\"true\" type=\"ifc:IfcPreDefinedCurveFont\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPreDefinedCurveFont\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedSymbol\" name=\"IfcPreDefinedDimensionSymbol\" nillable=\"true\" type=\"ifc:IfcPreDefinedDimensionSymbol\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPreDefinedDimensionSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedSymbol\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPreDefinedItem\" nillable=\"true\" type=\"ifc:IfcPreDefinedItem\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPreDefinedItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedSymbol\" name=\"IfcPreDefinedPointMarkerSymbol\" nillable=\"true\" type=\"ifc:IfcPreDefinedPointMarkerSymbol\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPreDefinedPointMarkerSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedSymbol\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedItem\" name=\"IfcPreDefinedSymbol\" nillable=\"true\" type=\"ifc:IfcPreDefinedSymbol\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPreDefinedSymbol\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedSymbol\" name=\"IfcPreDefinedTerminatorSymbol\" nillable=\"true\" type=\"ifc:IfcPreDefinedTerminatorSymbol\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPreDefinedTerminatorSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedSymbol\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedItem\" name=\"IfcPreDefinedTextFont\" nillable=\"true\" type=\"ifc:IfcPreDefinedTextFont\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPreDefinedTextFont\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPresentationLayerAssignment\" nillable=\"true\" type=\"ifc:IfcPresentationLayerAssignment\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPresentationLayerAssignment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AssignedItems\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLayeredItem\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLayeredItem\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Identifier\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPresentationLayerAssignment\" name=\"IfcPresentationLayerWithStyle\" nillable=\"true\" type=\"ifc:IfcPresentationLayerWithStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPresentationLayerWithStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPresentationLayerAssignment\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LayerOn\" type=\"ex:logical\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerFrozen\" type=\"ex:logical\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerBlocked\" type=\"ex:logical\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LayerStyles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\" maxOccurs=\"unbounded\" minOccurs=\"0\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPresentationStyleSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPresentationStyle\" nillable=\"true\" type=\"ifc:IfcPresentationStyle\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPresentationStyle\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPresentationStyleAssignment\" nillable=\"true\" type=\"ifc:IfcPresentationStyleAssignment\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPresentationStyleAssignment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Styles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPresentationStyleSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProcess\" name=\"IfcProcedure\" nillable=\"true\" type=\"ifc:IfcProcedure\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProcedure\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProcedureID\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ProcedureType\" type=\"ifc:IfcProcedureTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedProcedureType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcProcess\" nillable=\"true\" type=\"ifc:IfcProcess\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProcess\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcProduct\" nillable=\"true\" type=\"ifc:IfcProduct\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProduct\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ObjectPlacement\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectPlacement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Representation\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProductRepresentation\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProductRepresentation\" name=\"IfcProductDefinitionShape\" nillable=\"true\" type=\"ifc:IfcProductDefinitionShape\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProductDefinitionShape\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcProductRepresentation\" nillable=\"true\" type=\"ifc:IfcProductRepresentation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProductRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Representations\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentation\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcProductsOfCombustionProperties\" nillable=\"true\" type=\"ifc:IfcProductsOfCombustionProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProductsOfCombustionProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SpecificHeatCapacity\" minOccurs=\"0\" type=\"ifc:IfcSpecificHeatCapacityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"N20Content\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"COContent\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CO2Content\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcProfileDef\" nillable=\"true\" type=\"ifc:IfcProfileDef\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProfileDef\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProfileType\" type=\"ifc:IfcProfileTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ProfileName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcProfileProperties\" nillable=\"true\" type=\"ifc:IfcProfileProperties\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProfileProperties\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProfileName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ProfileDefinition\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcProject\" nillable=\"true\" type=\"ifc:IfcProject\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProject\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LongName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Phase\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RepresentationContexts\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentationContext\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UnitsInContext\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcUnitAssignment\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcProjectOrder\" nillable=\"true\" type=\"ifc:IfcProjectOrder\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProjectOrder\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ID\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcProjectOrderTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Status\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcProjectOrderRecord\" nillable=\"true\" type=\"ifc:IfcProjectOrderRecord\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProjectOrderRecord\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Records\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelAssignsToProjectOrder\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRelAssignsToProjectOrder\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcProjectOrderRecordTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationCurveOccurrence\" name=\"IfcProjectionCurve\" nillable=\"true\" type=\"ifc:IfcProjectionCurve\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProjectionCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationCurveOccurrence\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFeatureElementAddition\" name=\"IfcProjectionElement\" nillable=\"true\" type=\"ifc:IfcProjectionElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProjectionElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementAddition\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcProperty\" nillable=\"true\" type=\"ifc:IfcProperty\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProperty\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSimpleProperty\" name=\"IfcPropertyBoundedValue\" nillable=\"true\" type=\"ifc:IfcPropertyBoundedValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertyBoundedValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"UpperBoundValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LowerBoundValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Unit\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPropertyConstraintRelationship\" nillable=\"true\" type=\"ifc:IfcPropertyConstraintRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertyConstraintRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRoot\" name=\"IfcPropertyDefinition\" nillable=\"true\" type=\"ifc:IfcPropertyDefinition\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertyDefinition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPropertyDependencyRelationship\" nillable=\"true\" type=\"ifc:IfcPropertyDependencyRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertyDependencyRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DependingProperty\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DependantProperty\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Expression\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSimpleProperty\" name=\"IfcPropertyEnumeratedValue\" nillable=\"true\" type=\"ifc:IfcPropertyEnumeratedValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertyEnumeratedValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EnumerationReference\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyEnumeration\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPropertyEnumeration\" nillable=\"true\" type=\"ifc:IfcPropertyEnumeration\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertyEnumeration\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Unit\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSimpleProperty\" name=\"IfcPropertyListValue\" nillable=\"true\" type=\"ifc:IfcPropertyListValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertyListValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ListValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Unit\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSimpleProperty\" name=\"IfcPropertyReferenceValue\" nillable=\"true\" type=\"ifc:IfcPropertyReferenceValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertyReferenceValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UsageName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PropertyReference\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcPropertySet\" nillable=\"true\" type=\"ifc:IfcPropertySet\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertySet\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"HasProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertyDefinition\" name=\"IfcPropertySetDefinition\" nillable=\"true\" type=\"ifc:IfcPropertySetDefinition\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertySetDefinition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSimpleProperty\" name=\"IfcPropertySingleValue\" nillable=\"true\" type=\"ifc:IfcPropertySingleValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertySingleValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"NominalValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Unit\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSimpleProperty\" name=\"IfcPropertyTableValue\" nillable=\"true\" type=\"ifc:IfcPropertyTableValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPropertyTableValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DefiningValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DefinedValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Expression\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"DefiningUnit\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"DefinedUnit\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcProtectiveDeviceType\" nillable=\"true\" type=\"ifc:IfcProtectiveDeviceType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProtectiveDeviceType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcProxy\" nillable=\"true\" type=\"ifc:IfcProxy\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcProxy\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProxyType\" type=\"ifc:IfcObjectTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Tag\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" name=\"IfcPumpType\" nillable=\"true\" type=\"ifc:IfcPumpType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcPumpType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" name=\"IfcQuantityArea\" nillable=\"true\" type=\"ifc:IfcQuantityArea\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcQuantityArea\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AreaValue\" type=\"ifc:IfcAreaMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" name=\"IfcQuantityCount\" nillable=\"true\" type=\"ifc:IfcQuantityCount\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcQuantityCount\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"CountValue\" type=\"ifc:IfcCountMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" name=\"IfcQuantityLength\" nillable=\"true\" type=\"ifc:IfcQuantityLength\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcQuantityLength\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LengthValue\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" name=\"IfcQuantityTime\" nillable=\"true\" type=\"ifc:IfcQuantityTime\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcQuantityTime\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TimeValue\" type=\"ifc:IfcTimeMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" name=\"IfcQuantityVolume\" nillable=\"true\" type=\"ifc:IfcQuantityVolume\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcQuantityVolume\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VolumeValue\" type=\"ifc:IfcVolumeMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" name=\"IfcQuantityWeight\" nillable=\"true\" type=\"ifc:IfcQuantityWeight\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcQuantityWeight\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WeightValue\" type=\"ifc:IfcMassMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" name=\"IfcRadiusDimension\" nillable=\"true\" type=\"ifc:IfcRadiusDimension\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRadiusDimension\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcRailing\" nillable=\"true\" type=\"ifc:IfcRailing\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRailing\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" minOccurs=\"0\" type=\"ifc:IfcRailingTypeEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcRailingType\" nillable=\"true\" type=\"ifc:IfcRailingType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRailingType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcRamp\" nillable=\"true\" type=\"ifc:IfcRamp\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRamp\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShapeType\" type=\"ifc:IfcRampTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcRampFlight\" nillable=\"true\" type=\"ifc:IfcRampFlight\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRampFlight\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcRampFlightType\" nillable=\"true\" type=\"ifc:IfcRampFlightType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRampFlightType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBezierCurve\" name=\"IfcRationalBezierCurve\" nillable=\"true\" type=\"ifc:IfcRationalBezierCurve\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRationalBezierCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBezierCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WeightsData\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:double-wrapper\" maxOccurs=\"unbounded\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:double-wrapper\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRectangleProfileDef\" name=\"IfcRectangleHollowProfileDef\" nillable=\"true\" type=\"ifc:IfcRectangleHollowProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRectangleHollowProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InnerFilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OuterFilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcRectangleProfileDef\" nillable=\"true\" type=\"ifc:IfcRectangleProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRectangleProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCsgPrimitive3D\" name=\"IfcRectangularPyramid\" nillable=\"true\" type=\"ifc:IfcRectangularPyramid\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRectangularPyramid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundedSurface\" name=\"IfcRectangularTrimmedSurface\" nillable=\"true\" type=\"ifc:IfcRectangularTrimmedSurface\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRectangularTrimmedSurface\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"U1\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"V1\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"U2\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"V2\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Usense\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Vsense\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcReferencesValueDocument\" nillable=\"true\" type=\"ifc:IfcReferencesValueDocument\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcReferencesValueDocument\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ReferencedDocument\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReferencingValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAppliedValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTimeSeries\" name=\"IfcRegularTimeSeries\" nillable=\"true\" type=\"ifc:IfcRegularTimeSeries\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRegularTimeSeries\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TimeStep\" type=\"ifc:IfcTimeMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Values\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeriesValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTimeSeriesValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcReinforcementBarProperties\" nillable=\"true\" type=\"ifc:IfcReinforcementBarProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcReinforcementBarProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TotalCrossSectionArea\" type=\"ifc:IfcAreaMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SteelGrade\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BarSurface\" minOccurs=\"0\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EffectiveDepth\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"NominalBarDiameter\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BarCount\" minOccurs=\"0\" type=\"ifc:IfcCountMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcReinforcementDefinitionProperties\" nillable=\"true\" type=\"ifc:IfcReinforcementDefinitionProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcReinforcementDefinitionProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DefinitionType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReinforcementSectionDefinitions\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionReinforcementProperties\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSectionReinforcementProperties\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcReinforcingElement\" name=\"IfcReinforcingBar\" nillable=\"true\" type=\"ifc:IfcReinforcingBar\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcReinforcingBar\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BarLength\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BarRole\" type=\"ifc:IfcReinforcingBarRoleEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BarSurface\" minOccurs=\"0\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementComponent\" name=\"IfcReinforcingElement\" nillable=\"true\" type=\"ifc:IfcReinforcingElement\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcReinforcingElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementComponent\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SteelGrade\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcReinforcingElement\" name=\"IfcReinforcingMesh\" nillable=\"true\" type=\"ifc:IfcReinforcingMesh\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcReinforcingMesh\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MeshLength\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MeshWidth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelDecomposes\" name=\"IfcRelAggregates\" nillable=\"true\" type=\"ifc:IfcRelAggregates\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAggregates\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelationship\" name=\"IfcRelAssigns\" nillable=\"true\" type=\"ifc:IfcRelAssigns\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssigns\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcObjectDefinition\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjectsType\" minOccurs=\"0\" type=\"ifc:IfcObjectTypeEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssignsToControl\" name=\"IfcRelAssignsTasks\" nillable=\"true\" type=\"ifc:IfcRelAssignsTasks\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssignsTasks\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TimeForTask\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcScheduleTimeControl\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssigns\" name=\"IfcRelAssignsToActor\" nillable=\"true\" type=\"ifc:IfcRelAssignsToActor\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssignsToActor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingActor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActor\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ActingRole\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssigns\" name=\"IfcRelAssignsToControl\" nillable=\"true\" type=\"ifc:IfcRelAssignsToControl\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssignsToControl\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingControl\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcControl\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssigns\" name=\"IfcRelAssignsToGroup\" nillable=\"true\" type=\"ifc:IfcRelAssignsToGroup\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssignsToGroup\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingGroup\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGroup\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssigns\" name=\"IfcRelAssignsToProcess\" nillable=\"true\" type=\"ifc:IfcRelAssignsToProcess\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssignsToProcess\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProcess\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"QuantityInProcess\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssigns\" name=\"IfcRelAssignsToProduct\" nillable=\"true\" type=\"ifc:IfcRelAssignsToProduct\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssignsToProduct\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingProduct\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssignsToControl\" name=\"IfcRelAssignsToProjectOrder\" nillable=\"true\" type=\"ifc:IfcRelAssignsToProjectOrder\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssignsToProjectOrder\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToControl\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssigns\" name=\"IfcRelAssignsToResource\" nillable=\"true\" type=\"ifc:IfcRelAssignsToResource\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssignsToResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingResource\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcResource\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelationship\" name=\"IfcRelAssociates\" nillable=\"true\" type=\"ifc:IfcRelAssociates\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssociates\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRoot\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRoot\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesAppliedValue\" nillable=\"true\" type=\"ifc:IfcRelAssociatesAppliedValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssociatesAppliedValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingAppliedValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesApproval\" nillable=\"true\" type=\"ifc:IfcRelAssociatesApproval\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssociatesApproval\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingApproval\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesClassification\" nillable=\"true\" type=\"ifc:IfcRelAssociatesClassification\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssociatesClassification\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingClassification\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesConstraint\" nillable=\"true\" type=\"ifc:IfcRelAssociatesConstraint\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssociatesConstraint\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Intent\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesDocument\" nillable=\"true\" type=\"ifc:IfcRelAssociatesDocument\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssociatesDocument\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesLibrary\" nillable=\"true\" type=\"ifc:IfcRelAssociatesLibrary\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssociatesLibrary\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingLibrary\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLibrarySelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesMaterial\" nillable=\"true\" type=\"ifc:IfcRelAssociatesMaterial\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssociatesMaterial\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMaterialSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesProfileProperties\" nillable=\"true\" type=\"ifc:IfcRelAssociatesProfileProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelAssociatesProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingProfileProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileProperties\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ProfileSectionLocation\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ProfileOrientation\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcOrientationSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelationship\" name=\"IfcRelConnects\" nillable=\"true\" type=\"ifc:IfcRelConnects\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnects\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelConnectsElements\" nillable=\"true\" type=\"ifc:IfcRelConnectsElements\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnectsElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ConnectionGeometry\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnectsElements\" name=\"IfcRelConnectsPathElements\" nillable=\"true\" type=\"ifc:IfcRelConnectsPathElements\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnectsPathElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingPriorities\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:long-wrapper\" maxOccurs=\"unbounded\" minOccurs=\"0\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:long-wrapper\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedPriorities\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:long-wrapper\" maxOccurs=\"unbounded\" minOccurs=\"0\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:long-wrapper\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedConnectionType\" type=\"ifc:IfcConnectionTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingConnectionType\" type=\"ifc:IfcConnectionTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelConnectsPortToElement\" nillable=\"true\" type=\"ifc:IfcRelConnectsPortToElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnectsPortToElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingPort\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPort\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelConnectsPorts\" nillable=\"true\" type=\"ifc:IfcRelConnectsPorts\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnectsPorts\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingPort\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPort\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedPort\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPort\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"RealizingElement\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelConnectsStructuralActivity\" nillable=\"true\" type=\"ifc:IfcRelConnectsStructuralActivity\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnectsStructuralActivity\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedStructuralActivity\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralActivity\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelConnectsStructuralElement\" nillable=\"true\" type=\"ifc:IfcRelConnectsStructuralElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnectsStructuralElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedStructuralMember\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralMember\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelConnectsStructuralMember\" nillable=\"true\" type=\"ifc:IfcRelConnectsStructuralMember\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnectsStructuralMember\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingStructuralMember\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralMember\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedStructuralConnection\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralConnection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"AppliedCondition\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCondition\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"AdditionalConditions\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralConnectionCondition\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SupportedLength\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ConditionCoordinateSystem\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnectsStructuralMember\" name=\"IfcRelConnectsWithEccentricity\" nillable=\"true\" type=\"ifc:IfcRelConnectsWithEccentricity\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnectsWithEccentricity\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsStructuralMember\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ConnectionConstraint\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnectsElements\" name=\"IfcRelConnectsWithRealizingElements\" nillable=\"true\" type=\"ifc:IfcRelConnectsWithRealizingElements\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelConnectsWithRealizingElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RealizingElements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ConnectionType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelContainedInSpatialStructure\" nillable=\"true\" type=\"ifc:IfcRelContainedInSpatialStructure\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelContainedInSpatialStructure\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProduct\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingStructure\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelCoversBldgElements\" nillable=\"true\" type=\"ifc:IfcRelCoversBldgElements\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelCoversBldgElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCovering\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelCoversSpaces\" nillable=\"true\" type=\"ifc:IfcRelCoversSpaces\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelCoversSpaces\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedSpace\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpace\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCovering\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelationship\" name=\"IfcRelDecomposes\" nillable=\"true\" type=\"ifc:IfcRelDecomposes\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelDecomposes\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingObject\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcObjectDefinition\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelationship\" name=\"IfcRelDefines\" nillable=\"true\" type=\"ifc:IfcRelDefines\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelDefines\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcObject\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelDefines\" name=\"IfcRelDefinesByProperties\" nillable=\"true\" type=\"ifc:IfcRelDefinesByProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelDefinesByProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingPropertyDefinition\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelDefines\" name=\"IfcRelDefinesByType\" nillable=\"true\" type=\"ifc:IfcRelDefinesByType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelDefinesByType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingType\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTypeObject\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelFillsElement\" nillable=\"true\" type=\"ifc:IfcRelFillsElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelFillsElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingOpeningElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOpeningElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelFlowControlElements\" nillable=\"true\" type=\"ifc:IfcRelFlowControlElements\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelFlowControlElements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedControlElements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionControlElement\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDistributionControlElement\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingFlowElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionFlowElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelInteractionRequirements\" nillable=\"true\" type=\"ifc:IfcRelInteractionRequirements\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelInteractionRequirements\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DailyInteraction\" minOccurs=\"0\" type=\"ifc:IfcCountMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ImportanceRating\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LocationOfInteraction\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedSpaceProgram\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpaceProgram\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingSpaceProgram\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpaceProgram\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelDecomposes\" name=\"IfcRelNests\" nillable=\"true\" type=\"ifc:IfcRelNests\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelNests\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssignsToActor\" name=\"IfcRelOccupiesSpaces\" nillable=\"true\" type=\"ifc:IfcRelOccupiesSpaces\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelOccupiesSpaces\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToActor\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelDefinesByProperties\" name=\"IfcRelOverridesProperties\" nillable=\"true\" type=\"ifc:IfcRelOverridesProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelOverridesProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelDefinesByProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverridingProperties\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelProjectsElement\" nillable=\"true\" type=\"ifc:IfcRelProjectsElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelProjectsElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedFeatureElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFeatureElementAddition\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelReferencedInSpatialStructure\" nillable=\"true\" type=\"ifc:IfcRelReferencedInSpatialStructure\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelReferencedInSpatialStructure\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProduct\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatingStructure\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssignsToControl\" name=\"IfcRelSchedulesCostItems\" nillable=\"true\" type=\"ifc:IfcRelSchedulesCostItems\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelSchedulesCostItems\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToControl\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelSequence\" nillable=\"true\" type=\"ifc:IfcRelSequence\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelSequence\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProcess\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedProcess\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProcess\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeLag\" type=\"ifc:IfcTimeMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SequenceType\" type=\"ifc:IfcSequenceEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelServicesBuildings\" nillable=\"true\" type=\"ifc:IfcRelServicesBuildings\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelServicesBuildings\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingSystem\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSystem\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedBuildings\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelSpaceBoundary\" nillable=\"true\" type=\"ifc:IfcRelSpaceBoundary\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelSpaceBoundary\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingSpace\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpace\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"RelatedBuildingElement\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ConnectionGeometry\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectionGeometry\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PhysicalOrVirtualBoundary\" type=\"ifc:IfcPhysicalOrVirtualEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InternalOrExternalBoundary\" type=\"ifc:IfcInternalOrExternalEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelVoidsElement\" nillable=\"true\" type=\"ifc:IfcRelVoidsElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelVoidsElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RelatedOpeningElement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFeatureElementSubtraction\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRoot\" name=\"IfcRelationship\" nillable=\"true\" type=\"ifc:IfcRelationship\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelationship\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcRelaxation\" nillable=\"true\" type=\"ifc:IfcRelaxation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRelaxation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RelaxationValue\" type=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InitialStress\" type=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcRepresentation\" nillable=\"true\" type=\"ifc:IfcRepresentation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ContextOfItems\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RepresentationIdentifier\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RepresentationType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Items\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentationItem\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcRepresentationContext\" nillable=\"true\" type=\"ifc:IfcRepresentationContext\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRepresentationContext\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ContextIdentifier\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ContextType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcRepresentationItem\" nillable=\"true\" type=\"ifc:IfcRepresentationItem\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRepresentationItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcRepresentationMap\" nillable=\"true\" type=\"ifc:IfcRepresentationMap\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRepresentationMap\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"MappingOrigin\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MappedRepresentation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcResource\" nillable=\"true\" type=\"ifc:IfcResource\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcResource\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSweptAreaSolid\" name=\"IfcRevolvedAreaSolid\" nillable=\"true\" type=\"ifc:IfcRevolvedAreaSolid\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRevolvedAreaSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Axis\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis1Placement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Angle\" type=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProfileProperties\" name=\"IfcRibPlateProfileProperties\" nillable=\"true\" type=\"ifc:IfcRibPlateProfileProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRibPlateProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProfileProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Thickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RibHeight\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RibWidth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RibSpacing\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Direction\" type=\"ifc:IfcRibPlateDirectionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCsgPrimitive3D\" name=\"IfcRightCircularCone\" nillable=\"true\" type=\"ifc:IfcRightCircularCone\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRightCircularCone\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BottomRadius\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCsgPrimitive3D\" name=\"IfcRightCircularCylinder\" nillable=\"true\" type=\"ifc:IfcRightCircularCylinder\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRightCircularCylinder\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcRoof\" nillable=\"true\" type=\"ifc:IfcRoof\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRoof\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShapeType\" type=\"ifc:IfcRoofTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcRoot\" nillable=\"true\" type=\"ifc:IfcRoot\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRoot\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"GlobalId\" type=\"ifc:IfcGloballyUniqueId\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OwnerHistory\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOwnerHistory\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEdgeFeature\" name=\"IfcRoundedEdgeFeature\" nillable=\"true\" type=\"ifc:IfcRoundedEdgeFeature\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRoundedEdgeFeature\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEdgeFeature\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Radius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRectangleProfileDef\" name=\"IfcRoundedRectangleProfileDef\" nillable=\"true\" type=\"ifc:IfcRoundedRectangleProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcRoundedRectangleProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RoundingRadius\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:complexType name=\"IfcSIUnit-temp\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:restriction base=\"ifc:IfcNamedUnit\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"UnitType\" type=\"ifc:IfcUnitEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:restriction>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\t<xs:element substitutionGroup=\"ifc:IfcNamedUnit\" name=\"IfcSIUnit\" nillable=\"true\" type=\"ifc:IfcSIUnit\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSIUnit\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSIUnit-temp\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Prefix\" minOccurs=\"0\" type=\"ifc:IfcSIPrefix\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcSIUnitName\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcSanitaryTerminalType\" nillable=\"true\" type=\"ifc:IfcSanitaryTerminalType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSanitaryTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcScheduleTimeControl\" nillable=\"true\" type=\"ifc:IfcScheduleTimeControl\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcScheduleTimeControl\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ActualStart\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EarlyStart\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LateStart\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ScheduleStart\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ActualFinish\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EarlyFinish\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LateFinish\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ScheduleFinish\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ScheduleDuration\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ActualDuration\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RemainingTime\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FreeFloat\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TotalFloat\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IsCritical\" minOccurs=\"0\" type=\"xs:boolean\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"StatusTime\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartFloat\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FinishFloat\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Completion\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSectionProperties\" nillable=\"true\" type=\"ifc:IfcSectionProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSectionProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SectionType\" type=\"ifc:IfcSectionTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartProfile\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EndProfile\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSectionReinforcementProperties\" nillable=\"true\" type=\"ifc:IfcSectionReinforcementProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSectionReinforcementProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalStartPosition\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LongitudinalEndPosition\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransversePosition\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReinforcementRole\" type=\"ifc:IfcReinforcingBarRoleEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SectionDefinition\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionProperties\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionReinforcementDefinitions\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReinforcementBarProperties\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcReinforcementBarProperties\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcSectionedSpine\" nillable=\"true\" type=\"ifc:IfcSectionedSpine\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSectionedSpine\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SpineCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCompositeCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CrossSections\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" maxOccurs=\"unbounded\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProfileDef\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionPositions\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\" maxOccurs=\"unbounded\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionControlElementType\" name=\"IfcSensorType\" nillable=\"true\" type=\"ifc:IfcSensorType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSensorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcServiceLife\" nillable=\"true\" type=\"ifc:IfcServiceLife\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcServiceLife\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ServiceLifeType\" type=\"ifc:IfcServiceLifeTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ServiceLifeDuration\" type=\"ifc:IfcTimeMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcServiceLifeFactor\" nillable=\"true\" type=\"ifc:IfcServiceLifeFactor\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcServiceLifeFactor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcServiceLifeFactorTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"UpperValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MostUsedValue\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LowerValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcShapeAspect\" nillable=\"true\" type=\"ifc:IfcShapeAspect\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcShapeAspect\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShapeRepresentations\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeModel\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcShapeModel\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ProductDefinitional\" type=\"ex:logical\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PartOfProductDefinitionShape\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProductDefinitionShape\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentation\" name=\"IfcShapeModel\" nillable=\"true\" type=\"ifc:IfcShapeModel\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcShapeModel\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcShapeModel\" name=\"IfcShapeRepresentation\" nillable=\"true\" type=\"ifc:IfcShapeRepresentation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcShapeRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcShellBasedSurfaceModel\" nillable=\"true\" type=\"ifc:IfcShellBasedSurfaceModel\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcShellBasedSurfaceModel\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SbsmBoundary\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcShell\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcShell\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProperty\" name=\"IfcSimpleProperty\" nillable=\"true\" type=\"ifc:IfcSimpleProperty\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSimpleProperty\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProperty\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSpatialStructureElement\" name=\"IfcSite\" nillable=\"true\" type=\"ifc:IfcSite\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSite\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RefLatitude\" minOccurs=\"0\" type=\"ifc:IfcCompoundPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RefLongitude\" minOccurs=\"0\" type=\"ifc:IfcCompoundPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RefElevation\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LandTitleNumber\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SiteAddress\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPostalAddress\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcSlab\" nillable=\"true\" type=\"ifc:IfcSlab\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSlab\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" minOccurs=\"0\" type=\"ifc:IfcSlabTypeEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcSlabType\" nillable=\"true\" type=\"ifc:IfcSlabType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSlabType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" name=\"IfcSlippageConnectionCondition\" nillable=\"true\" type=\"ifc:IfcSlippageConnectionCondition\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSlippageConnectionCondition\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SlippageX\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SlippageY\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SlippageZ\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcSolidModel\" nillable=\"true\" type=\"ifc:IfcSolidModel\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSolidModel\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcSoundProperties\" nillable=\"true\" type=\"ifc:IfcSoundProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSoundProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"IsAttenuating\" type=\"ifc:IfcBoolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SoundScale\" minOccurs=\"0\" type=\"ifc:IfcSoundScaleEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SoundValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSoundValue\" maxOccurs=\"8\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSoundValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcSoundValue\" nillable=\"true\" type=\"ifc:IfcSoundValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSoundValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SoundLevelTimeSeries\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Frequency\" type=\"ifc:IfcFrequencyMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SoundLevelSingleValue\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDerivedMeasureValue\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSpatialStructureElement\" name=\"IfcSpace\" nillable=\"true\" type=\"ifc:IfcSpace\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSpace\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"InteriorOrExteriorSpace\" type=\"ifc:IfcInternalOrExternalEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ElevationWithFlooring\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcSpaceHeaterType\" nillable=\"true\" type=\"ifc:IfcSpaceHeaterType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSpaceHeaterType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcSpaceProgram\" nillable=\"true\" type=\"ifc:IfcSpaceProgram\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSpaceProgram\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SpaceProgramIdentifier\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MaxRequiredArea\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MinRequiredArea\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"RequestedLocation\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StandardRequiredArea\" type=\"ifc:IfcAreaMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcSpaceThermalLoadProperties\" nillable=\"true\" type=\"ifc:IfcSpaceThermalLoadProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSpaceThermalLoadProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApplicableValueRatio\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThermalLoadSource\" type=\"ifc:IfcThermalLoadSourceEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PropertySource\" type=\"ifc:IfcPropertySourceEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SourceDescription\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MaximumValue\" type=\"ifc:IfcPowerMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MinimumValue\" minOccurs=\"0\" type=\"ifc:IfcPowerMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ThermalLoadTimeSeriesValues\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedThermalLoadSource\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedPropertySource\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThermalLoadType\" type=\"ifc:IfcThermalLoadTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSpatialStructureElementType\" name=\"IfcSpaceType\" nillable=\"true\" type=\"ifc:IfcSpaceType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSpaceType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSpaceTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcSpatialStructureElement\" nillable=\"true\" type=\"ifc:IfcSpatialStructureElement\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSpatialStructureElement\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LongName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CompositionType\" type=\"ifc:IfcElementCompositionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementType\" name=\"IfcSpatialStructureElementType\" nillable=\"true\" type=\"ifc:IfcSpatialStructureElementType\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSpatialStructureElementType\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcCsgPrimitive3D\" name=\"IfcSphere\" nillable=\"true\" type=\"ifc:IfcSphere\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSphere\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcStackTerminalType\" nillable=\"true\" type=\"ifc:IfcStackTerminalType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStackTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcStair\" nillable=\"true\" type=\"ifc:IfcStair\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStair\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShapeType\" type=\"ifc:IfcStairTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcStairFlight\" nillable=\"true\" type=\"ifc:IfcStairFlight\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStairFlight\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"NumberOfRiser\" minOccurs=\"0\" type=\"xs:long\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"NumberOfTreads\" minOccurs=\"0\" type=\"xs:long\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RiserHeight\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TreadLength\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcStairFlightType\" nillable=\"true\" type=\"ifc:IfcStairFlightType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStairFlightType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralActivity\" name=\"IfcStructuralAction\" nillable=\"true\" type=\"ifc:IfcStructuralAction\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralAction\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DestabilizingLoad\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CausedBy\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralReaction\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcStructuralActivity\" nillable=\"true\" type=\"ifc:IfcStructuralActivity\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralActivity\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AppliedLoad\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoad\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"GlobalOrLocal\" type=\"ifc:IfcGlobalOrLocalEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSystem\" name=\"IfcStructuralAnalysisModel\" nillable=\"true\" type=\"ifc:IfcStructuralAnalysisModel\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralAnalysisModel\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAnalysisModelTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"OrientationOf2DPlane\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LoadedBy\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralLoadGroup\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HasResults\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralResultGroup\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralResultGroup\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralItem\" name=\"IfcStructuralConnection\" nillable=\"true\" type=\"ifc:IfcStructuralConnection\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralConnection\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"AppliedCondition\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCondition\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcStructuralConnectionCondition\" nillable=\"true\" type=\"ifc:IfcStructuralConnectionCondition\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralConnectionCondition\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralConnection\" name=\"IfcStructuralCurveConnection\" nillable=\"true\" type=\"ifc:IfcStructuralCurveConnection\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralCurveConnection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralMember\" name=\"IfcStructuralCurveMember\" nillable=\"true\" type=\"ifc:IfcStructuralCurveMember\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralCurveMember\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralCurveMember\" name=\"IfcStructuralCurveMemberVarying\" nillable=\"true\" type=\"ifc:IfcStructuralCurveMemberVarying\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralCurveMemberVarying\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveMember\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcStructuralItem\" nillable=\"true\" type=\"ifc:IfcStructuralItem\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralAction\" name=\"IfcStructuralLinearAction\" nillable=\"true\" type=\"ifc:IfcStructuralLinearAction\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLinearAction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLinearAction\" name=\"IfcStructuralLinearActionVarying\" nillable=\"true\" type=\"ifc:IfcStructuralLinearActionVarying\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLinearActionVarying\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLinearAction\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VaryingAppliedLoadLocation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SubsequentAppliedLoads\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoad\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralLoad\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcStructuralLoad\" nillable=\"true\" type=\"ifc:IfcStructuralLoad\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoad\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcStructuralLoadGroup\" nillable=\"true\" type=\"ifc:IfcStructuralLoadGroup\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoadGroup\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcLoadGroupTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ActionType\" type=\"ifc:IfcActionTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ActionSource\" type=\"ifc:IfcActionSourceTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Coefficient\" minOccurs=\"0\" type=\"ifc:IfcRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Purpose\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadStatic\" name=\"IfcStructuralLoadLinearForce\" nillable=\"true\" type=\"ifc:IfcStructuralLoadLinearForce\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoadLinearForce\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LinearForceX\" minOccurs=\"0\" type=\"ifc:IfcLinearForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearForceY\" minOccurs=\"0\" type=\"ifc:IfcLinearForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearForceZ\" minOccurs=\"0\" type=\"ifc:IfcLinearForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearMomentX\" minOccurs=\"0\" type=\"ifc:IfcLinearMomentMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearMomentY\" minOccurs=\"0\" type=\"ifc:IfcLinearMomentMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LinearMomentZ\" minOccurs=\"0\" type=\"ifc:IfcLinearMomentMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadStatic\" name=\"IfcStructuralLoadPlanarForce\" nillable=\"true\" type=\"ifc:IfcStructuralLoadPlanarForce\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoadPlanarForce\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PlanarForceX\" minOccurs=\"0\" type=\"ifc:IfcPlanarForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PlanarForceY\" minOccurs=\"0\" type=\"ifc:IfcPlanarForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PlanarForceZ\" minOccurs=\"0\" type=\"ifc:IfcPlanarForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadStatic\" name=\"IfcStructuralLoadSingleDisplacement\" nillable=\"true\" type=\"ifc:IfcStructuralLoadSingleDisplacement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DisplacementX\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DisplacementY\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DisplacementZ\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RotationalDisplacementRX\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RotationalDisplacementRY\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RotationalDisplacementRZ\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadSingleDisplacement\" name=\"IfcStructuralLoadSingleDisplacementDistortion\" nillable=\"true\" type=\"ifc:IfcStructuralLoadSingleDisplacementDistortion\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacementDistortion\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleDisplacement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Distortion\" minOccurs=\"0\" type=\"ifc:IfcCurvatureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadStatic\" name=\"IfcStructuralLoadSingleForce\" nillable=\"true\" type=\"ifc:IfcStructuralLoadSingleForce\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoadSingleForce\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ForceX\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ForceY\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ForceZ\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MomentX\" minOccurs=\"0\" type=\"ifc:IfcTorqueMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MomentY\" minOccurs=\"0\" type=\"ifc:IfcTorqueMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MomentZ\" minOccurs=\"0\" type=\"ifc:IfcTorqueMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadSingleForce\" name=\"IfcStructuralLoadSingleForceWarping\" nillable=\"true\" type=\"ifc:IfcStructuralLoadSingleForceWarping\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoadSingleForceWarping\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleForce\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"WarpingMoment\" minOccurs=\"0\" type=\"ifc:IfcWarpingMomentMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoad\" name=\"IfcStructuralLoadStatic\" nillable=\"true\" type=\"ifc:IfcStructuralLoadStatic\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoadStatic\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadStatic\" name=\"IfcStructuralLoadTemperature\" nillable=\"true\" type=\"ifc:IfcStructuralLoadTemperature\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralLoadTemperature\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DeltaT_Constant\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DeltaT_Y\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DeltaT_Z\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralItem\" name=\"IfcStructuralMember\" nillable=\"true\" type=\"ifc:IfcStructuralMember\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralMember\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralAction\" name=\"IfcStructuralPlanarAction\" nillable=\"true\" type=\"ifc:IfcStructuralPlanarAction\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralPlanarAction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralPlanarAction\" name=\"IfcStructuralPlanarActionVarying\" nillable=\"true\" type=\"ifc:IfcStructuralPlanarActionVarying\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralPlanarActionVarying\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralPlanarAction\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VaryingAppliedLoadLocation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SubsequentAppliedLoads\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoad\" maxOccurs=\"unbounded\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralLoad\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralAction\" name=\"IfcStructuralPointAction\" nillable=\"true\" type=\"ifc:IfcStructuralPointAction\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralPointAction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralConnection\" name=\"IfcStructuralPointConnection\" nillable=\"true\" type=\"ifc:IfcStructuralPointConnection\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralPointConnection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralReaction\" name=\"IfcStructuralPointReaction\" nillable=\"true\" type=\"ifc:IfcStructuralPointReaction\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralPointReaction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeneralProfileProperties\" name=\"IfcStructuralProfileProperties\" nillable=\"true\" type=\"ifc:IfcStructuralProfileProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeneralProfileProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TorsionalConstantX\" minOccurs=\"0\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MomentOfInertiaYZ\" minOccurs=\"0\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MomentOfInertiaY\" minOccurs=\"0\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MomentOfInertiaZ\" minOccurs=\"0\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WarpingConstant\" minOccurs=\"0\" type=\"ifc:IfcWarpingConstantMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ShearCentreZ\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ShearCentreY\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ShearDeformationAreaZ\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ShearDeformationAreaY\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MaximumSectionModulusY\" minOccurs=\"0\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MinimumSectionModulusY\" minOccurs=\"0\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MaximumSectionModulusZ\" minOccurs=\"0\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MinimumSectionModulusZ\" minOccurs=\"0\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TorsionalSectionModulus\" minOccurs=\"0\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralActivity\" name=\"IfcStructuralReaction\" nillable=\"true\" type=\"ifc:IfcStructuralReaction\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralReaction\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcStructuralResultGroup\" nillable=\"true\" type=\"ifc:IfcStructuralResultGroup\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralResultGroup\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TheoryType\" type=\"ifc:IfcAnalysisTheoryTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ResultForLoadGroup\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IsLinear\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralProfileProperties\" name=\"IfcStructuralSteelProfileProperties\" nillable=\"true\" type=\"ifc:IfcStructuralSteelProfileProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralSteelProfileProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralProfileProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ShearAreaZ\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ShearAreaY\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PlasticShapeFactorY\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PlasticShapeFactorZ\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralConnection\" name=\"IfcStructuralSurfaceConnection\" nillable=\"true\" type=\"ifc:IfcStructuralSurfaceConnection\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralSurfaceConnection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralMember\" name=\"IfcStructuralSurfaceMember\" nillable=\"true\" type=\"ifc:IfcStructuralSurfaceMember\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralSurfaceMember\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Thickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralSurfaceMember\" name=\"IfcStructuralSurfaceMemberVarying\" nillable=\"true\" type=\"ifc:IfcStructuralSurfaceMemberVarying\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuralSurfaceMemberVarying\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceMember\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SubsequentThickness\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\" maxOccurs=\"unbounded\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"VaryingThicknessLocation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDraughtingCallout\" name=\"IfcStructuredDimensionCallout\" nillable=\"true\" type=\"ifc:IfcStructuredDimensionCallout\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStructuredDimensionCallout\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCallout\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentation\" name=\"IfcStyleModel\" nillable=\"true\" type=\"ifc:IfcStyleModel\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStyleModel\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentationItem\" name=\"IfcStyledItem\" nillable=\"true\" type=\"ifc:IfcStyledItem\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStyledItem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Item\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Styles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPresentationStyleAssignment\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPresentationStyleAssignment\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcStyleModel\" name=\"IfcStyledRepresentation\" nillable=\"true\" type=\"ifc:IfcStyledRepresentation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcStyledRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcStyleModel\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcConstructionResource\" name=\"IfcSubContractResource\" nillable=\"true\" type=\"ifc:IfcSubContractResource\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSubContractResource\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SubContractor\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"JobDescription\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEdge\" name=\"IfcSubedge\" nillable=\"true\" type=\"ifc:IfcSubedge\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSubedge\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ParentEdge\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcEdge\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcSurface\" nillable=\"true\" type=\"ifc:IfcSurface\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurface\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSweptAreaSolid\" name=\"IfcSurfaceCurveSweptAreaSolid\" nillable=\"true\" type=\"ifc:IfcSurfaceCurveSweptAreaSolid\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceCurveSweptAreaSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Directrix\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartParam\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EndParam\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReferenceSurface\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSweptSurface\" name=\"IfcSurfaceOfLinearExtrusion\" nillable=\"true\" type=\"ifc:IfcSurfaceOfLinearExtrusion\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceOfLinearExtrusion\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSweptSurface\" name=\"IfcSurfaceOfRevolution\" nillable=\"true\" type=\"ifc:IfcSurfaceOfRevolution\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceOfRevolution\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AxisPosition\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis1Placement\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPresentationStyle\" name=\"IfcSurfaceStyle\" nillable=\"true\" type=\"ifc:IfcSurfaceStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Side\" type=\"ifc:IfcSurfaceSide\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Styles\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\" maxOccurs=\"5\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSurfaceStyleElementSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSurfaceStyleLighting\" nillable=\"true\" type=\"ifc:IfcSurfaceStyleLighting\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceStyleLighting\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DiffuseReflectionColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransmissionColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReflectanceColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSurfaceStyleRefraction\" nillable=\"true\" type=\"ifc:IfcSurfaceStyleRefraction\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceStyleRefraction\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RefractionIndex\" minOccurs=\"0\" type=\"ifc:IfcReal\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DispersionFactor\" minOccurs=\"0\" type=\"ifc:IfcReal\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSurfaceStyleShading\" name=\"IfcSurfaceStyleRendering\" nillable=\"true\" type=\"ifc:IfcSurfaceStyleRendering\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceStyleRendering\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceStyleShading\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Transparency\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"DiffuseColour\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TransmissionColour\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"DiffuseTransmissionColour\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ReflectionColour\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SpecularColour\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SpecularHighlight\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ReflectanceMethod\" type=\"ifc:IfcReflectanceMethodEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSurfaceStyleShading\" nillable=\"true\" type=\"ifc:IfcSurfaceStyleShading\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceStyleShading\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SurfaceColour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSurfaceStyleWithTextures\" nillable=\"true\" type=\"ifc:IfcSurfaceStyleWithTextures\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceStyleWithTextures\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Textures\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSurfaceTexture\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSurfaceTexture\" nillable=\"true\" type=\"ifc:IfcSurfaceTexture\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSurfaceTexture\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RepeatS\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"RepeatT\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TextureType\" type=\"ifc:IfcSurfaceTextureEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TextureTransform\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator2D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSolidModel\" name=\"IfcSweptAreaSolid\" nillable=\"true\" type=\"ifc:IfcSweptAreaSolid\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSweptAreaSolid\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SweptArea\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSolidModel\" name=\"IfcSweptDiskSolid\" nillable=\"true\" type=\"ifc:IfcSweptDiskSolid\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSweptDiskSolid\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Directrix\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"InnerRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartParam\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EndParam\" type=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcSurface\" name=\"IfcSweptSurface\" nillable=\"true\" type=\"ifc:IfcSweptSurface\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSweptSurface\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SweptCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Position\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcSwitchingDeviceType\" nillable=\"true\" type=\"ifc:IfcSwitchingDeviceType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSwitchingDeviceType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPresentationStyle\" name=\"IfcSymbolStyle\" nillable=\"true\" type=\"ifc:IfcSymbolStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSymbolStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"StyleOfSymbol\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSymbolStyleSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcSystem\" nillable=\"true\" type=\"ifc:IfcSystem\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSystem\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFurnishingElementType\" name=\"IfcSystemFurnitureElementType\" nillable=\"true\" type=\"ifc:IfcSystemFurnitureElementType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcSystemFurnitureElementType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcTShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcTShapeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeEdgeRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WebEdgeRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WebSlope\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeSlope\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTable\" nillable=\"true\" type=\"ifc:IfcTable\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTable\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"xs:normalizedString\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Rows\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableRow\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTableRow\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTableRow\" nillable=\"true\" type=\"ifc:IfcTableRow\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTableRow\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RowCells\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IsHeading\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" name=\"IfcTankType\" nillable=\"true\" type=\"ifc:IfcTankType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTankType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcProcess\" name=\"IfcTask\" nillable=\"true\" type=\"ifc:IfcTask\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTask\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TaskId\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Status\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WorkMethod\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"IsMilestone\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Priority\" minOccurs=\"0\" type=\"xs:long\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAddress\" name=\"IfcTelecomAddress\" nillable=\"true\" type=\"ifc:IfcTelecomAddress\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTelecomAddress\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TelephoneNumbers\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FacsimileNumbers\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PagerNumber\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ElectronicMailAddresses\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WWWHomePageURL\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcReinforcingElement\" name=\"IfcTendon\" nillable=\"true\" type=\"ifc:IfcTendon\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTendon\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TensionForce\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PreStress\" minOccurs=\"0\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FrictionCoefficient\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AnchorageSlip\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MinCurvatureRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcReinforcingElement\" name=\"IfcTendonAnchor\" nillable=\"true\" type=\"ifc:IfcTendonAnchor\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTendonAnchor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationSymbolOccurrence\" name=\"IfcTerminatorSymbol\" nillable=\"true\" type=\"ifc:IfcTerminatorSymbol\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTerminatorSymbol\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationSymbolOccurrence\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"AnnotatedCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAnnotationCurveOccurrence\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcTextLiteral\" nillable=\"true\" type=\"ifc:IfcTextLiteral\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextLiteral\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Literal\" type=\"ifc:IfcPresentableText\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Placement\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Path\" type=\"ifc:IfcTextPath\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTextLiteral\" name=\"IfcTextLiteralWithExtent\" nillable=\"true\" type=\"ifc:IfcTextLiteralWithExtent\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextLiteralWithExtent\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTextLiteral\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Extent\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPlanarExtent\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BoxAlignment\" type=\"ifc:IfcBoxAlignment\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPresentationStyle\" name=\"IfcTextStyle\" nillable=\"true\" type=\"ifc:IfcTextStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TextCharacterAppearance\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCharacterStyleSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TextStyle\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTextStyleSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TextFontStyle\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTextFontSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedTextFont\" name=\"IfcTextStyleFontModel\" nillable=\"true\" type=\"ifc:IfcTextStyleFontModel\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextStyleFontModel\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedTextFont\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"FontFamily\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextFontName\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTextFontName\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FontStyle\" minOccurs=\"0\" type=\"ifc:IfcFontStyle\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FontVariant\" minOccurs=\"0\" type=\"ifc:IfcFontVariant\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FontWeight\" minOccurs=\"0\" type=\"ifc:IfcFontWeight\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FontSize\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTextStyleForDefinedFont\" nillable=\"true\" type=\"ifc:IfcTextStyleForDefinedFont\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextStyleForDefinedFont\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Colour\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"BackgroundColour\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTextStyleTextModel\" nillable=\"true\" type=\"ifc:IfcTextStyleTextModel\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextStyleTextModel\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TextIndent\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TextAlign\" minOccurs=\"0\" type=\"ifc:IfcTextAlignment\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TextDecoration\" minOccurs=\"0\" type=\"ifc:IfcTextDecoration\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LetterSpacing\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"WordSpacing\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TextTransform\" minOccurs=\"0\" type=\"ifc:IfcTextTransformation\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LineHeight\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTextStyleWithBoxCharacteristics\" nillable=\"true\" type=\"ifc:IfcTextStyleWithBoxCharacteristics\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextStyleWithBoxCharacteristics\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BoxHeight\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BoxWidth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BoxSlantAngle\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BoxRotateAngle\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CharacterSpacing\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTextureCoordinate\" nillable=\"true\" type=\"ifc:IfcTextureCoordinate\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextureCoordinate\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTextureCoordinate\" name=\"IfcTextureCoordinateGenerator\" nillable=\"true\" type=\"ifc:IfcTextureCoordinateGenerator\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextureCoordinateGenerator\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Mode\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Parameter\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSimpleValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSimpleValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTextureCoordinate\" name=\"IfcTextureMap\" nillable=\"true\" type=\"ifc:IfcTextureMap\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextureMap\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TextureMaps\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertexBasedTextureMap\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcVertexBasedTextureMap\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTextureVertex\" nillable=\"true\" type=\"ifc:IfcTextureVertex\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTextureVertex\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Coordinates\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcParameterValue\" maxOccurs=\"2\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcThermalMaterialProperties\" nillable=\"true\" type=\"ifc:IfcThermalMaterialProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcThermalMaterialProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SpecificHeatCapacity\" minOccurs=\"0\" type=\"ifc:IfcSpecificHeatCapacityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"BoilingPoint\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FreezingPoint\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ThermalConductivity\" minOccurs=\"0\" type=\"ifc:IfcThermalConductivityMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTimeSeries\" nillable=\"true\" type=\"ifc:IfcTimeSeries\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTimeSeries\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EndTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeSeriesDataType\" type=\"ifc:IfcTimeSeriesDataTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedDataOrigin\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Unit\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTimeSeriesReferenceRelationship\" nillable=\"true\" type=\"ifc:IfcTimeSeriesReferenceRelationship\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTimeSeriesReferenceRelationship\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ReferencedTimeSeries\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeSeriesReferences\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDocumentSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcTimeSeriesSchedule\" nillable=\"true\" type=\"ifc:IfcTimeSeriesSchedule\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTimeSeriesSchedule\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApplicableDates\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeSeriesScheduleType\" type=\"ifc:IfcTimeSeriesScheduleTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TimeSeries\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTimeSeriesValue\" nillable=\"true\" type=\"ifc:IfcTimeSeriesValue\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTimeSeriesValue\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ListValues\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentationItem\" name=\"IfcTopologicalRepresentationItem\" nillable=\"true\" type=\"ifc:IfcTopologicalRepresentationItem\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTopologicalRepresentationItem\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcShapeModel\" name=\"IfcTopologyRepresentation\" nillable=\"true\" type=\"ifc:IfcTopologyRepresentation\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTopologyRepresentation\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcTransformerType\" nillable=\"true\" type=\"ifc:IfcTransformerType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTransformerType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcTransportElement\" nillable=\"true\" type=\"ifc:IfcTransportElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTransportElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" minOccurs=\"0\" type=\"ifc:IfcTransportElementTypeEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CapacityByWeight\" minOccurs=\"0\" type=\"ifc:IfcMassMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CapacityByNumber\" minOccurs=\"0\" type=\"ifc:IfcCountMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElementType\" name=\"IfcTransportElementType\" nillable=\"true\" type=\"ifc:IfcTransportElementType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTransportElementType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcTrapeziumProfileDef\" nillable=\"true\" type=\"ifc:IfcTrapeziumProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTrapeziumProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BottomXDim\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TopXDim\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TopXOffset\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBoundedCurve\" name=\"IfcTrimmedCurve\" nillable=\"true\" type=\"ifc:IfcTrimmedCurve\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTrimmedCurve\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Trim1\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTrimmingSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Trim2\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTrimmingSelect\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SenseAgreement\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MasterRepresentation\" type=\"ifc:IfcTrimmingPreference\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcTubeBundleType\" nillable=\"true\" type=\"ifc:IfcTubeBundleType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTubeBundleType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcOneDirectionRepeatFactor\" name=\"IfcTwoDirectionRepeatFactor\" nillable=\"true\" type=\"ifc:IfcTwoDirectionRepeatFactor\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTwoDirectionRepeatFactor\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcOneDirectionRepeatFactor\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"SecondRepeatFactor\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcObjectDefinition\" name=\"IfcTypeObject\" nillable=\"true\" type=\"ifc:IfcTypeObject\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTypeObject\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ApplicableOccurrence\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"HasPropertySets\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTypeObject\" name=\"IfcTypeProduct\" nillable=\"true\" type=\"ifc:IfcTypeProduct\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcTypeProduct\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"RepresentationMaps\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentationMap\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Tag\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcUShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcUShapeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcUShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EdgeRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeSlope\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcUnitAssignment\" nillable=\"true\" type=\"ifc:IfcUnitAssignment\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcUnitAssignment\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Units\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcUnit\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcUnitaryEquipmentType\" nillable=\"true\" type=\"ifc:IfcUnitaryEquipmentType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcUnitaryEquipmentType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcValveType\" nillable=\"true\" type=\"ifc:IfcValveType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcValveType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcVector\" nillable=\"true\" type=\"ifc:IfcVector\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcVector\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Orientation\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Magnitude\" type=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcVertex\" nillable=\"true\" type=\"ifc:IfcVertex\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcVertex\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcVertexBasedTextureMap\" nillable=\"true\" type=\"ifc:IfcVertexBasedTextureMap\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcVertexBasedTextureMap\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"TextureVertices\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextureVertex\" maxOccurs=\"unbounded\" minOccurs=\"3\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTextureVertex\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TexturePoints\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" maxOccurs=\"unbounded\" minOccurs=\"3\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcLoop\" name=\"IfcVertexLoop\" nillable=\"true\" type=\"ifc:IfcVertexLoop\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcVertexLoop\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LoopVertex\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertex\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcVertex\" name=\"IfcVertexPoint\" nillable=\"true\" type=\"ifc:IfcVertexPoint\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcVertexPoint\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcVertex\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"VertexGeometry\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPoint\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcDiscreteAccessoryType\" name=\"IfcVibrationIsolatorType\" nillable=\"true\" type=\"ifc:IfcVibrationIsolatorType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcVibrationIsolatorType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcDiscreteAccessoryType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcVirtualElement\" nillable=\"true\" type=\"ifc:IfcVirtualElement\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcVirtualElement\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcVirtualGridIntersection\" nillable=\"true\" type=\"ifc:IfcVirtualGridIntersection\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcVirtualGridIntersection\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ex:Entity\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"IntersectingAxes\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"2\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OffsetDistances\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\" maxOccurs=\"3\" minOccurs=\"2\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcWall\" nillable=\"true\" type=\"ifc:IfcWall\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWall\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcWall\" name=\"IfcWallStandardCase\" nillable=\"true\" type=\"ifc:IfcWallStandardCase\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWallStandardCase\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcWall\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcWallType\" nillable=\"true\" type=\"ifc:IfcWallType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWallType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcWasteTerminalType\" nillable=\"true\" type=\"ifc:IfcWasteTerminalType\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWasteTerminalType\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcWaterProperties\" nillable=\"true\" type=\"ifc:IfcWaterProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWaterProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"IsPotable\" minOccurs=\"0\" type=\"xs:boolean\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Hardness\" minOccurs=\"0\" type=\"ifc:IfcIonConcentrationMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AlkalinityConcentration\" minOccurs=\"0\" type=\"ifc:IfcIonConcentrationMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"AcidityConcentration\" minOccurs=\"0\" type=\"ifc:IfcIonConcentrationMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ImpuritiesContent\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PHLevel\" minOccurs=\"0\" type=\"ifc:IfcPHMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"DissolvedSolidsContent\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcWindow\" nillable=\"true\" type=\"ifc:IfcWindow\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWindow\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OverallHeight\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OverallWidth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcWindowLiningProperties\" nillable=\"true\" type=\"ifc:IfcWindowLiningProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWindowLiningProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"LiningDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"LiningThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TransomThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"MullionThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FirstTransomOffset\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SecondTransomOffset\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FirstMullionOffset\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"SecondMullionOffset\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ShapeAspectStyle\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcWindowPanelProperties\" nillable=\"true\" type=\"ifc:IfcWindowPanelProperties\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWindowPanelProperties\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcWindowPanelOperationEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FrameDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FrameThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ShapeAspectStyle\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:choice>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:choice>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcTypeProduct\" name=\"IfcWindowStyle\" nillable=\"true\" type=\"ifc:IfcWindowStyle\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWindowStyle\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"ConstructionType\" type=\"ifc:IfcWindowStyleConstructionEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcWindowStyleOperationEnum\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"ParameterTakesPrecedence\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Sizeable\" type=\"xs:boolean\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcWorkControl\" nillable=\"true\" type=\"ifc:IfcWorkControl\" abstract=\"true\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWorkControl\" abstract=\"true\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Identifier\" type=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"CreationDate\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Creators\" minOccurs=\"0\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\">\r\n\t\t\t\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t\t\t</xs:sequence>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPerson\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t\t\t\t\t\t</xs:attribute>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Purpose\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"Duration\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"TotalFloat\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"StartTime\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"FinishTime\" nillable=\"true\">\r\n\t\t\t\t\t\t<xs:complexType>\r\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t\t\t\t\t\t</xs:group>\r\n\t\t\t\t\t\t</xs:complexType>\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WorkControlType\" minOccurs=\"0\" type=\"ifc:IfcWorkControlTypeEnum\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"UserDefinedControlType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcWorkControl\" name=\"IfcWorkPlan\" nillable=\"true\" type=\"ifc:IfcWorkPlan\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWorkPlan\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcWorkControl\" name=\"IfcWorkSchedule\" nillable=\"true\" type=\"ifc:IfcWorkSchedule\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcWorkSchedule\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcZShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcZShapeProfileDef\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcZShapeProfileDef\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\r\n\t\t\t\t<xs:sequence>\r\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"FilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t\t<xs:element name=\"EdgeRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t\t\t\t</xs:element>\r\n\t\t\t\t</xs:sequence>\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcZone\" nillable=\"true\" type=\"ifc:IfcZone\">\r\n\t</xs:element>\r\n\t<xs:complexType name=\"IfcZone\">\r\n\t\t<xs:complexContent>\r\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\r\n\t\t\t</xs:extension>\r\n\t\t</xs:complexContent>\r\n\t</xs:complexType>\r\n\r\n\r\n\r\n<!-- group declarations (for SELECT data type definitions) -->\r\n\r\n\t<xs:complexType name=\"IfcActorSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcActorSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcActorSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPerson\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcAppliedValueSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcAppliedValueSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcAxis2Placement\">\r\n\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcAxis2Placement\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcBooleanOperand\">\r\n\t\t<xs:group ref=\"ifc:IfcBooleanOperand\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcBooleanOperand\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcHalfSpaceSolid\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcCharacterStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcCharacterStyleSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCharacterStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcTextStyleForDefinedFont\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcClassificationNotationSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcClassificationNotationSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcClassificationNotation\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcColour\">\r\n\t\t<xs:group ref=\"ifc:IfcColour\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcColour\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcColourOrFactor\">\r\n\t\t<xs:group ref=\"ifc:IfcColourOrFactor\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcColourOrFactor\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcConditionCriterionSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcConditionCriterionSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcConditionCriterionSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcLabel\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcCsgSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcCsgSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCsgSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcCurveFontOrScaledCurveFontSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCurveFontOrScaledCurveFontSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontAndScaling\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcCurveOrEdgeCurve\">\r\n\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCurveOrEdgeCurve\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcEdgeCurve\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcCurveStyleFontSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcCurveStyleFontSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcDateTimeSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDateTimeSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLocalTime\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcDefinedSymbolSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcDefinedSymbolSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDefinedSymbolSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedSymbol\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSymbol\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcDerivedMeasureValue\">\r\n\t\t<xs:group ref=\"ifc:IfcDerivedMeasureValue\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDerivedMeasureValue\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcDocumentSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcDocumentSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDocumentSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcDraughtingCalloutElement\">\r\n\t\t<xs:group ref=\"ifc:IfcDraughtingCalloutElement\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcDraughtingCalloutElement\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcAnnotationCurveOccurrence\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAnnotationTextOccurrence\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAnnotationSymbolOccurrence\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcFillAreaStyleTileShapeSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcFillAreaStyleTileShapeSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcFillAreaStyleTileShapeSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTileSymbolWithStyle\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcFillStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcFillStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleHatching\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTiles\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedHatchStyle\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcGeometricSetSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcGeometricSetSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPoint\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurve\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurface\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcHatchLineDistanceSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcHatchLineDistanceSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcHatchLineDistanceSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcOneDirectionRepeatFactor\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcLayeredItem\">\r\n\t\t<xs:group ref=\"ifc:IfcLayeredItem\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcLayeredItem\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRepresentation\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcLibrarySelect\">\r\n\t\t<xs:group ref=\"ifc:IfcLibrarySelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcLibrarySelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcLightDistributionDataSourceSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcLightDistributionDataSourceSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLightIntensityDistribution\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcMaterialSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcMaterialSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcMaterialSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayerSetUsage\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayerSet\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcMeasureValue\">\r\n\t\t<xs:group ref=\"ifc:IfcMeasureValue\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcMeasureValue\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcMetricValueSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcMetricValueSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLocalTime\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTable\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcText\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcObjectReferenceSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcObjectReferenceSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPerson\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLocalTime\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAddress\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcOrientationSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcOrientationSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcOrientationSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcPointOrVertexPoint\">\r\n\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcPointOrVertexPoint\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPoint\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcVertexPoint\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcPresentationStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcPresentationStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcNullStyle\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyle\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSymbolStyle\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyle\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTextStyle\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyle\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcShell\">\r\n\t\t<xs:group ref=\"ifc:IfcShell\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcShell\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcOpenShell\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcSimpleValue\">\r\n\t\t<xs:group ref=\"ifc:IfcSimpleValue\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSimpleValue\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcInteger\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcReal\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcBoolean\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcText\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLabel\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLogical\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcSizeSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSizeSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcSpecularHighlightSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSpecularHighlightSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcSpecularExponent\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSpecularRoughness\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcStructuralActivityAssignmentSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcStructuralActivityAssignmentSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcStructuralItem\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElement\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcSurfaceOrFaceSurface\">\r\n\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSurfaceOrFaceSurface\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurface\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcFaceSurface\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcFaceBasedSurfaceModel\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcSurfaceStyleElementSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSurfaceStyleElementSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleShading\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleLighting\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleWithTextures\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSurfaceStyle\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleRefraction\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcSymbolStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcSymbolStyleSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcSymbolStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcTextFontSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcTextFontSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcTextFontSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedTextFont\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedTextFont\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcTextStyleSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcTextStyleSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcTextStyleSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcTextStyleWithBoxCharacteristics\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTextStyleTextModel\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcTrimmingSelect\">\r\n\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcTrimmingSelect\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcUnit\">\r\n\t\t<xs:group ref=\"ifc:IfcUnit\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcUnit\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcDerivedUnit\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcValue\">\r\n\t\t<xs:group ref=\"ifc:IfcValue\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcValue\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcInteger\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcReal\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcBoolean\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcText\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLabel\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLogical\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\t<xs:complexType name=\"IfcVectorOrDirection\">\r\n\t\t<xs:group ref=\"ifc:IfcVectorOrDirection\">\r\n\t\t</xs:group>\r\n\t</xs:complexType>\r\n\t<xs:group name=\"IfcVectorOrDirection\">\r\n\t\t<xs:choice>\r\n\t\t\t<xs:element ref=\"ifc:IfcDirection\">\r\n\t\t\t</xs:element>\r\n\t\t\t<xs:element ref=\"ifc:IfcVector\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:choice>\r\n\t</xs:group>\r\n\r\n\r\n\r\n<!-- enumeration type declarations (for ENUMERATION data type definitions) -->\r\n\r\n\t<xs:element name=\"IfcActionSourceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcActionSourceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcActionSourceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dead_load_g\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"completion_g1\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"live_load_q\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"snow_s\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"wind_w\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"prestressing_p\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"settlement_u\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"temperature_t\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"earthquake_e\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fire\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"impulse\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"impact\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"transport\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"erection\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"propping\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"system_imperfection\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shrinkage\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"creep\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lack_of_fit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"buoyancy\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ice\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"current\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"wave\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rain\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"brakes\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcActionTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcActionTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcActionTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"permanent_g\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"variable_q\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"extraordinary_a\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcActuatorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcActuatorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcActuatorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"electricactuator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"handoperatedactuator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"hydraulicactuator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pneumaticactuator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermostaticactuator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAddressTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAddressTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAddressTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"office\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"site\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"home\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"distributionpoint\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAheadOrBehind\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAheadOrBehind\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAheadOrBehind\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"ahead\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"behind\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAirTerminalBoxTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAirTerminalBoxTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAirTerminalBoxTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"constantflow\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"variableflowpressuredependant\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"variableflowpressureindependant\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAirTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAirTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAirTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"grille\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"register\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"diffuser\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"eyeball\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"iris\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lineargrille\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lineardiffuser\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAirToAirHeatRecoveryTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAirToAirHeatRecoveryTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"fixedplatecounterflowexchanger\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fixedplatecrossflowexchanger\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fixedplateparallelflowexchanger\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rotarywheel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"runaroundcoilloop\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"heatpipe\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"twintowerenthalpyrecoveryloops\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermosiphonsealedtubeheatexchangers\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermosiphoncoiltypeheatexchangers\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAlarmTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAlarmTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAlarmTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bell\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"breakglassbutton\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"light\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"manualpullbox\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"siren\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"whistle\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAnalysisModelTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAnalysisModelTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAnalysisModelTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"in_plane_loading_2d\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"out_plane_loading_2d\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"loading_3d\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAnalysisTheoryTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAnalysisTheoryTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAnalysisTheoryTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"first_order_theory\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"second_order_theory\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"third_order_theory\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"full_nonlinear_theory\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcArithmeticOperatorEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcArithmeticOperatorEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcArithmeticOperatorEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"add\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"divide\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"multiply\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"subtract\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAssemblyPlaceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAssemblyPlaceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAssemblyPlaceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"site\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"factory\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcBSplineCurveForm\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBSplineCurveForm\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcBSplineCurveForm\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"polyline_form\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"circular_arc\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"elliptic_arc\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"parabolic_arc\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"hyperbolic_arc\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"unspecified\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcBeamTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBeamTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcBeamTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"beam\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"joist\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lintel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"t_beam\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcBenchmarkEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBenchmarkEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcBenchmarkEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"greaterthan\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"greaterthanorequalto\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lessthan\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lessthanorequalto\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"equalto\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notequalto\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcBoilerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBoilerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcBoilerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"water\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"steam\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcBooleanOperator\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBooleanOperator\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcBooleanOperator\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"union\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"intersection\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"difference\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcBuildingElementProxyTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBuildingElementProxyTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcBuildingElementProxyTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCableCarrierFittingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCableCarrierFittingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCableCarrierFittingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bend\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cross\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"reducer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tee\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCableCarrierSegmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCableCarrierSegmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCableCarrierSegmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cableladdersegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cabletraysegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cabletrunkingsegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"conduitsegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCableSegmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCableSegmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCableSegmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cablesegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"conductorsegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcChangeActionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcChangeActionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcChangeActionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"nochange\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"modified\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"added\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"deleted\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"modifiedadded\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"modifieddeleted\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcChillerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcChillerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcChillerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"aircooled\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"watercooled\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"heatrecovery\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCoilTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCoilTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCoilTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dxcoolingcoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"watercoolingcoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"steamheatingcoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"waterheatingcoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electricheatingcoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gasheatingcoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcColumnTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcColumnTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcColumnTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"column\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCompressorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCompressorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCompressorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dynamic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"reciprocating\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rotary\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"scroll\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"trochoidal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"singlestage\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"booster\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"opentype\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"hermetic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"semihermetic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"weldedshellhermetic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rollingpiston\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rotaryvane\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"singlescrew\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"twinscrew\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCondenserTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCondenserTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCondenserTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"watercooledshelltube\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"watercooledshellcoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"watercooledtubeintube\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"watercooledbrazedplate\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"aircooled\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"evaporativecooled\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcConnectionTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcConnectionTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcConnectionTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"atpath\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"atstart\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"atend\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcConstraintEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcConstraintEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcConstraintEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"hard\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"soft\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"advisory\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcControllerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcControllerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcControllerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"floating\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"proportional\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"proportionalintegral\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"proportionalintegralderivative\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"timedtwoposition\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"twoposition\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCooledBeamTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCooledBeamTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCooledBeamTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"active\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"passive\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCoolingTowerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCoolingTowerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCoolingTowerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"naturaldraft\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mechanicalinduceddraft\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mechanicalforceddraft\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCostScheduleTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCostScheduleTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCostScheduleTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"budget\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"costplan\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"estimate\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tender\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pricedbillofquantities\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"unpricedbillofquantities\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"scheduleofrates\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCoveringTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCoveringTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCoveringTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"ceiling\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"flooring\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cladding\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"roofing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"insulation\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"membrane\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sleeving\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"wrapping\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCurrencyEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCurrencyEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCurrencyEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"aed\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"aes\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ats\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"aud\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bbd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"beg\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bgl\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bhd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bmd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bnd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"brl\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bsd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bwp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bzd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cad\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cbd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"chf\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"clp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cny\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cys\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"czk\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ddp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"dem\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"dkk\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"egl\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"est\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"eur\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fak\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fim\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fjd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fkp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"frf\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gbp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gip\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gmd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"grx\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"hkd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"huf\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ick\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"idr\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ils\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"inr\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"irp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"itl\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"jmd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"jod\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"jpy\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"kes\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"krw\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"kwd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"kyd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lkr\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"luf\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mtl\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mur\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mxn\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"myr\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"nlg\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"nzd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"omr\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pgk\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"php\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pkr\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pln\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ptn\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"qar\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rur\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sar\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"scr\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sek\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sgd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"skp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thb\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"trl\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ttd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"twd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"usd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"veb\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"vnd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"xeu\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"zar\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"zwd\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"nok\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCurtainWallTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCurtainWallTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCurtainWallTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDamperTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDamperTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDamperTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"controldamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"firedamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"smokedamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"firesmokedamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"backdraftdamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"reliefdamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"blastdamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gravitydamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gravityreliefdamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"balancingdamper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fumehoodexhaust\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDataOriginEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDataOriginEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDataOriginEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"measured\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"predicted\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"simulated\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDerivedUnitEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDerivedUnitEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDerivedUnitEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"angularvelocityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"compoundplaneangleunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"dynamicviscosityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"heatfluxdensityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"integercountrateunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"isothermalmoisturecapacityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"kinematicviscosityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"linearvelocityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"massdensityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"massflowrateunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"moisturediffusivityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"molecularweightunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"specificheatcapacityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermaladmittanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermalconductanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermalresistanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermaltransmittanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"vaporpermeabilityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"volumetricflowrateunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rotationalfrequencyunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"torqueunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"momentofinertiaunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"linearmomentunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"linearforceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"planarforceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"modulusofelasticityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shearmodulusunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"linearstiffnessunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rotationalstiffnessunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"modulusofsubgradereactionunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"accelerationunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"curvatureunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"heatingvalueunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ionconcentrationunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"luminousintensitydistributionunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"massperlengthunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"modulusoflinearsubgradereactionunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"modulusofrotationalsubgradereactionunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"phunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rotationalmassunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sectionareaintegralunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sectionmodulusunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"soundpowerunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"soundpressureunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"temperaturegradientunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermalexpansioncoefficientunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"warpingconstantunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"warpingmomentunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDimensionExtentUsage\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDimensionExtentUsage\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDimensionExtentUsage\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"origin\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"target\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDirectionSenseEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDirectionSenseEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDirectionSenseEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"positive\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"negative\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDistributionChamberElementTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDistributionChamberElementTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDistributionChamberElementTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"formedduct\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"inspectionchamber\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"inspectionpit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"manhole\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"meterchamber\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sump\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"trench\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"valvechamber\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDocumentConfidentialityEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDocumentConfidentialityEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDocumentConfidentialityEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"public\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"restricted\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"confidential\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"personal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDocumentStatusEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDocumentStatusEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDocumentStatusEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"draft\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"finaldraft\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"final\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"revision\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDoorPanelOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorPanelOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDoorPanelOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"swinging\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_acting\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sliding\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"folding\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"revolving\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rollingup\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDoorPanelPositionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorPanelPositionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDoorPanelPositionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"left\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"middle\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"right\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDoorStyleConstructionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorStyleConstructionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDoorStyleConstructionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"aluminium\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"high_grade_steel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"steel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"wood\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"aluminium_wood\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"aluminium_plastic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"plastic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDoorStyleOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorStyleOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDoorStyleOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"single_swing_left\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"single_swing_right\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_door_single_swing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_left\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_right\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_swing_left\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_swing_right\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_door_double_swing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sliding_to_left\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sliding_to_right\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_door_sliding\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"folding_to_left\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"folding_to_right\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_door_folding\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"revolving\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rollingup\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDuctFittingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDuctFittingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDuctFittingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bend\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"connector\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"entry\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"exit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"junction\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"obstruction\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"transition\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDuctSegmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDuctSegmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDuctSegmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"rigidsegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"flexiblesegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDuctSilencerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDuctSilencerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDuctSilencerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"flatoval\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rectangular\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"round\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricApplianceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricApplianceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricApplianceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"computer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"directwaterheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"dishwasher\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electriccooker\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electricheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"facsimile\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"freestandingfan\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"freezer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fridge_freezer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"handdryer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"indirectwaterheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"microwave\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"photocopier\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"printer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"refrigerator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"radiantheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"scanner\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"telephone\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tumbledryer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tv\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"vendingmachine\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"washingmachine\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"waterheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"watercooler\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricCurrentEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricCurrentEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"alternating\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"direct\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricDistributionPointFunctionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricDistributionPointFunctionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricDistributionPointFunctionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"alarmpanel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"consumerunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"controlpanel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"distributionboard\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gasdetectorpanel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"indicatorpanel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mimicpanel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"motorcontrolcentre\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"switchboard\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricFlowStorageDeviceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricFlowStorageDeviceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"battery\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"capacitorbank\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"harmonicfilter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"inductorbank\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ups\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricGeneratorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricGeneratorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricGeneratorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricHeaterTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricHeaterTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricHeaterTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"electricpointheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electriccableheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electricmatheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricMotorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricMotorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricMotorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dc\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"induction\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"polyphase\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"reluctancesynchronous\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"synchronous\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricTimeControlTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricTimeControlTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricTimeControlTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"timeclock\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"timedelay\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"relay\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElementAssemblyTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElementAssemblyTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElementAssemblyTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"accessory_assembly\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"arch\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"beam_grid\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"braced_frame\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"girder\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"reinforcement_unit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rigid_frame\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"slab_field\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"truss\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElementCompositionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElementCompositionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElementCompositionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"complex\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"element\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"partial\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcEnergySequenceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergySequenceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcEnergySequenceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"primary\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"secondary\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tertiary\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"auxiliary\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcEnvironmentalImpactCategoryEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEnvironmentalImpactCategoryEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcEnvironmentalImpactCategoryEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"combinedvalue\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"disposal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"extraction\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"installation\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"manufacture\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"transportation\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcEvaporativeCoolerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEvaporativeCoolerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcEvaporativeCoolerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"directevaporativerandommediaaircooler\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"directevaporativerigidmediaaircooler\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"directevaporativeslingerspackagedaircooler\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"directevaporativepackagedrotaryaircooler\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"directevaporativeairwasher\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"indirectevaporativepackageaircooler\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"indirectevaporativewetcoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"indirectevaporativecoolingtowerorcoilcooler\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"indirectdirectcombination\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcEvaporatorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEvaporatorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcEvaporatorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"directexpansionshellandtube\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"directexpansiontubeintube\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"directexpansionbrazedplate\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"floodedshellandtube\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shellandcoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFanTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFanTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFanTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"centrifugalforwardcurved\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"centrifugalradial\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"centrifugalbackwardinclinedcurved\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"centrifugalairfoil\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tubeaxial\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"vaneaxial\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"propelloraxial\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFilterTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFilterTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFilterTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"airparticlefilter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"odorfilter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"oilfilter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"strainer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"waterfilter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFireSuppressionTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFireSuppressionTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFireSuppressionTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"breechinginlet\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"firehydrant\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"hosereel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sprinkler\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sprinklerdeflector\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFlowDirectionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFlowDirectionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFlowDirectionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"source\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sink\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sourceandsink\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFlowInstrumentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFlowInstrumentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFlowInstrumentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"pressuregauge\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermometer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ammeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"frequencymeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"powerfactormeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"phaseanglemeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"voltmeter_peak\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"voltmeter_rms\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFlowMeterTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFlowMeterTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFlowMeterTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"electricmeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"energymeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"flowmeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gasmeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"oilmeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"watermeter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFootingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFootingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFootingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"footing_beam\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pad_footing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pile_cap\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"strip_footing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcGasTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcGasTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcGasTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"gasappliance\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gasbooster\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gasburner\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcGeometricProjectionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcGeometricProjectionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcGeometricProjectionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"graph_view\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sketch_view\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"model_view\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"plan_view\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"reflected_plan_view\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"section_view\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"elevation_view\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcGlobalOrLocalEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcGlobalOrLocalEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcGlobalOrLocalEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"global_coords\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"local_coords\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcHeatExchangerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatExchangerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcHeatExchangerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"plate\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shellandtube\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcHumidifierTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHumidifierTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcHumidifierTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"steaminjection\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"adiabaticairwasher\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"adiabaticpan\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"adiabaticwettedelement\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"adiabaticatomizing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"adiabaticultrasonic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"adiabaticrigidmedia\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"adiabaticcompressedairnozzle\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"assistedelectric\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"assistednaturalgas\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"assistedpropane\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"assistedbutane\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"assistedsteam\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcInternalOrExternalEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcInternalOrExternalEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcInternalOrExternalEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"internal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"external\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcInventoryTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcInventoryTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcInventoryTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"assetinventory\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"spaceinventory\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"furnitureinventory\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcJunctionBoxTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcJunctionBoxTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcJunctionBoxTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLampTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLampTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLampTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"compactfluorescent\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fluorescent\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"highpressuremercury\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"highpressuresodium\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"metalhalide\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tungstenfilament\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLayerSetDirectionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLayerSetDirectionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLayerSetDirectionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"axis1\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"axis2\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"axis3\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLightDistributionCurveEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLightDistributionCurveEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLightDistributionCurveEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"type_a\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"type_b\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"type_c\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLightEmissionSourceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLightEmissionSourceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLightEmissionSourceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"compactfluorescent\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fluorescent\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"highpressuremercury\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"highpressuresodium\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lightemittingdiode\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lowpressuresodium\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lowvoltagehalogen\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mainvoltagehalogen\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"metalhalide\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tungstenfilament\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLightFixtureTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLightFixtureTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLightFixtureTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"pointsource\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"directionsource\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLoadGroupTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLoadGroupTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLoadGroupTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"load_group\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"load_case\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"load_combination_group\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"load_combination\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLogicalOperatorEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLogicalOperatorEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLogicalOperatorEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"logicaland\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"logicalor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMemberTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMemberTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMemberTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"brace\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"chord\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"collar\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"member\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mullion\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"plate\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"post\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"purlin\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rafter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"stringer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"strut\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"stud\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMotorConnectionTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMotorConnectionTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMotorConnectionTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"beltdrive\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"coupling\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"directdrive\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcNullStyle\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcNullStyle\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcNullStyle\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"null\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcObjectTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcObjectTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcObjectTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"product\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"process\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"control\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"resource\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"actor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"group\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"project\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcObjectiveEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcObjectiveEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcObjectiveEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"codecompliance\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"designintent\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"healthandsafety\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"requirement\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"specification\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"triggercondition\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcOccupantTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcOccupantTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcOccupantTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"assignee\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"assignor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lessee\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lessor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lettingagent\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"owner\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tenant\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcOutletTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcOutletTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcOutletTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"audiovisualoutlet\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"communicationsoutlet\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"poweroutlet\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPermeableCoveringOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPermeableCoveringOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPermeableCoveringOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"grill\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"louver\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"screen\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPhysicalOrVirtualEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPhysicalOrVirtualEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPhysicalOrVirtualEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"physical\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"virtual\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPileConstructionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPileConstructionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPileConstructionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cast_in_place\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"composite\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"precast_concrete\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"prefab_steel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPileTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPileTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPileTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cohesion\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"friction\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"support\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPipeFittingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPipeFittingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPipeFittingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bend\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"connector\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"entry\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"exit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"junction\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"obstruction\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"transition\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPipeSegmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPipeSegmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPipeSegmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"flexiblesegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rigidsegment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gutter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"spool\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPlateTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPlateTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPlateTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"curtain_panel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sheet\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcProcedureTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProcedureTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcProcedureTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"advice_caution\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"advice_note\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"advice_warning\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"calibration\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"diagnostic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shutdown\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"startup\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcProfileTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProfileTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcProfileTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"curve\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"area\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcProjectOrderRecordTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProjectOrderRecordTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcProjectOrderRecordTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"change\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"maintenance\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"move\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"purchase\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"work\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcProjectOrderTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProjectOrderTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcProjectOrderTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"changeorder\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"maintenanceworkorder\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"moveorder\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"purchaseorder\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"workorder\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcProjectedOrTrueLengthEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProjectedOrTrueLengthEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcProjectedOrTrueLengthEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"projected_length\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"true_length\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPropertySourceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPropertySourceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPropertySourceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"design\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"designmaximum\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"designminimum\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"simulated\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"asbuilt\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"commissioning\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"measured\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notknown\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcProtectiveDeviceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcProtectiveDeviceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcProtectiveDeviceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"fusedisconnector\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"circuitbreaker\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"earthfailuredevice\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"residualcurrentcircuitbreaker\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"residualcurrentswitch\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"varistor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPumpTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPumpTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPumpTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"circulator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"endsuction\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"splitcase\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"verticalinline\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"verticalturbine\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRailingTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRailingTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRailingTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"handrail\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"guardrail\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"balustrade\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRampFlightTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRampFlightTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRampFlightTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"straight\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"spiral\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRampTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRampTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRampTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"straight_run_ramp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"two_straight_run_ramp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"quarter_turn_ramp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"two_quarter_turn_ramp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"half_turn_ramp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"spiral_ramp\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcReflectanceMethodEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcReflectanceMethodEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcReflectanceMethodEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"blinn\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"flat\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"glass\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"matt\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"metal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mirror\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"phong\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"plastic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"strauss\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcReinforcingBarRoleEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcReinforcingBarRoleEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcReinforcingBarRoleEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"main\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shear\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ligature\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"stud\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"punching\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"edge\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ring\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcReinforcingBarSurfaceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcReinforcingBarSurfaceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcReinforcingBarSurfaceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"plain\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"textured\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcResourceConsumptionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcResourceConsumptionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcResourceConsumptionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"consumed\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"partiallyconsumed\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notconsumed\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"occupied\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"partiallyoccupied\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notoccupied\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRibPlateDirectionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRibPlateDirectionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRibPlateDirectionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"direction_x\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"direction_y\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRoleEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRoleEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRoleEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"supplier\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"manufacturer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"contractor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"subcontractor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"architect\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"structuralengineer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"costengineer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"client\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"buildingowner\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"buildingoperator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mechanicalengineer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electricalengineer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"projectmanager\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"facilitiesmanager\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"civilengineer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"comissioningengineer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"engineer\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"owner\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"consultant\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"constructionmanager\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fieldconstructionmanager\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"reseller\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRoofTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRoofTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRoofTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"flat_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shed_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gable_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"hip_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"hipped_gable_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gambrel_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mansard_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"barrel_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rainbow_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"butterfly_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pavilion_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"dome_roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"freeform\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSIPrefix\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSIPrefix\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSIPrefix\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"exa\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"peta\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tera\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"giga\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mega\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"kilo\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"hecto\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"deca\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"deci\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"centi\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"milli\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"micro\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"nano\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pico\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"femto\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"atto\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSIUnitName\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSIUnitName\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSIUnitName\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"ampere\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"becquerel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"candela\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"coulomb\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cubic_metre\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"degree_celsius\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"farad\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gram\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gray\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"henry\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"hertz\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"joule\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"kelvin\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lumen\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lux\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"metre\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mole\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"newton\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ohm\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pascal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"radian\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"second\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"siemens\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sievert\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"square_metre\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"steradian\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tesla\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"volt\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"watt\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"weber\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSanitaryTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSanitaryTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSanitaryTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bath\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bidet\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cistern\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shower\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sink\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sanitaryfountain\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"toiletpan\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"urinal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"washhandbasin\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"wcseat\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSectionTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSectionTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"uniform\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tapered\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSensorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSensorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSensorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"co2sensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"firesensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"flowsensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gassensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"heatsensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"humiditysensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lightsensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"moisturesensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"movementsensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pressuresensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"smokesensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"soundsensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"temperaturesensor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSequenceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSequenceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSequenceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"start_start\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"start_finish\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"finish_start\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"finish_finish\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcServiceLifeFactorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcServiceLifeFactorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcServiceLifeFactorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"a_qualityofcomponents\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"b_designlevel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"c_workexecutionlevel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"d_indoorenvironment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"e_outdoorenvironment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"f_inuseconditions\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"g_maintenancelevel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcServiceLifeTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcServiceLifeTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcServiceLifeTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"actualservicelife\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"expectedservicelife\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"optimisticreferenceservicelife\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pessimisticreferenceservicelife\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"referenceservicelife\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSlabTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSlabTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSlabTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"floor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"roof\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"landing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"baseslab\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSoundScaleEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundScaleEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSoundScaleEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"dba\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"dbb\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"dbc\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"nc\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"nr\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSpaceHeaterTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSpaceHeaterTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSpaceHeaterTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"sectionalradiator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"panelradiator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tubularradiator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"convector\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"baseboardheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"finnedtubeunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"unitheater\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSpaceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSpaceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSpaceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcStackTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStackTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcStackTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"birdcage\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cowl\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rainwaterhopper\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcStairFlightTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStairFlightTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcStairFlightTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"straight\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"winder\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"spiral\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"curved\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"freeform\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcStairTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStairTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcStairTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"straight_run_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"two_straight_run_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"quarter_winding_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"quarter_turn_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"half_winding_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"half_turn_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"two_quarter_winding_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"two_quarter_turn_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"three_quarter_winding_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"three_quarter_turn_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"spiral_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_return_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"curved_run_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"two_curved_run_stair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcStateEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStateEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcStateEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"readwrite\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"readonly\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"locked\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"readwritelocked\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"readonlylocked\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcStructuralCurveTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcStructuralCurveTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"rigid_joined_member\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pin_joined_member\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"cable\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tension_member\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"compression_member\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcStructuralSurfaceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcStructuralSurfaceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bending_element\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"membrane_element\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shell\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSurfaceSide\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSurfaceSide\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSurfaceSide\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"positive\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"negative\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"both\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSurfaceTextureEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSurfaceTextureEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSurfaceTextureEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"bump\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"opacity\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"reflection\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"selfillumination\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shininess\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"specular\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"texture\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"transparencymap\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSwitchingDeviceTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSwitchingDeviceTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSwitchingDeviceTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"contactor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"emergencystop\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"starter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"switchdisconnector\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"toggleswitch\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTankTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTankTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTankTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"preformed\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sectional\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"expansion\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pressurevessel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTendonTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTendonTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTendonTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"strand\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"wire\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bar\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"coated\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTextPath\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTextPath\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTextPath\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"left\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"right\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"up\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"down\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcThermalLoadSourceEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalLoadSourceEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcThermalLoadSourceEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"people\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lighting\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"equipment\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ventilationindoorair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"ventilationoutsideair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"recirculatedair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"exhaustair\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"airexchangerate\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"drybulbtemperature\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"relativehumidity\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"infiltration\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcThermalLoadTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalLoadTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcThermalLoadTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"sensible\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"latent\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"radiant\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTimeSeriesDataTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeSeriesDataTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTimeSeriesDataTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"continuous\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"discrete\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"discretebinary\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"piecewisebinary\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"piecewiseconstant\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"piecewisecontinuous\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTimeSeriesScheduleTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeSeriesScheduleTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTimeSeriesScheduleTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"annual\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"monthly\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"weekly\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"daily\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTransformerTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTransformerTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTransformerTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"current\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"frequency\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"voltage\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTransitionCode\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTransitionCode\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTransitionCode\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"discontinuous\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"continuous\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"contsamegradient\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"contsamegradientsamecurvature\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTransportElementTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTransportElementTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTransportElementTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"elevator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"escalator\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"movingwalkway\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTrimmingPreference\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTrimmingPreference\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTrimmingPreference\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"cartesian\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"parameter\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"unspecified\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTubeBundleTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTubeBundleTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTubeBundleTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"finned\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcUnitEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcUnitEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcUnitEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"absorbeddoseunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"amountofsubstanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"areaunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"doseequivalentunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electriccapacitanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electricchargeunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electricconductanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electriccurrentunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electricresistanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"electricvoltageunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"energyunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"forceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"frequencyunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"illuminanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"inductanceunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"lengthunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"luminousfluxunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"luminousintensityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"magneticfluxdensityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"magneticfluxunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"massunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"planeangleunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"powerunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pressureunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"radioactivityunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"solidangleunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"thermodynamictemperatureunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"timeunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"volumeunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcUnitaryEquipmentTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcUnitaryEquipmentTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcUnitaryEquipmentTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"airhandler\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"airconditioningunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"splitsystem\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"rooftopunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcValveTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcValveTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcValveTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"airrelease\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"antivacuum\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"changeover\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"check\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"commissioning\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"diverting\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"drawoffcock\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"doublecheck\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"doubleregulating\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"faucet\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"flushing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gascock\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gastap\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"isolating\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"mixing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pressurereducing\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pressurerelief\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"regulating\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"safetycutoff\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"steamtrap\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"stopcock\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcVibrationIsolatorTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcVibrationIsolatorTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcVibrationIsolatorTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"compression\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"spring\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcWallTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWallTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcWallTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"standard\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"polygonal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"shear\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"elementedwall\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"plumbingwall\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcWasteTerminalTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWasteTerminalTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcWasteTerminalTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"floortrap\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"floorwaste\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gullysump\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"gullytrap\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"greaseinterceptor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"oilinterceptor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"petrolinterceptor\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"roofdrain\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"wastedisposalunit\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"wastetrap\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcWindowPanelOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowPanelOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcWindowPanelOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"sidehungrighthand\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"sidehunglefthand\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tiltandturnrighthand\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tiltandturnlefthand\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"tophung\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bottomhung\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pivothorizontal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"pivotvertical\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"slidinghorizontal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"slidingvertical\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"removablecasement\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"fixedcasement\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"otheroperation\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcWindowPanelPositionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowPanelPositionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcWindowPanelPositionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"left\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"middle\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"right\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"bottom\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"top\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcWindowStyleConstructionEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowStyleConstructionEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcWindowStyleConstructionEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"aluminium\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"high_grade_steel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"steel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"wood\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"aluminium_wood\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"plastic\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"other_construction\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcWindowStyleOperationEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowStyleOperationEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcWindowStyleOperationEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"single_panel\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_panel_vertical\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"double_panel_horizontal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"triple_panel_vertical\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"triple_panel_bottom\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"triple_panel_top\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"triple_panel_left\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"triple_panel_right\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"triple_panel_horizontal\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcWorkControlTypeEnum\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWorkControlTypeEnum\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcWorkControlTypeEnum\">\r\n\t\t<xs:restriction base=\"xs:string\">\r\n\t\t\t<xs:enumeration value=\"actual\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"baseline\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"planned\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"userdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t\t<xs:enumeration value=\"notdefined\">\r\n\t\t\t</xs:enumeration>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\r\n\r\n<!-- simple type declarations (for TYPE defined data type definitions) -->\r\n\r\n\t<xs:element name=\"IfcAbsorbedDoseMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAbsorbedDoseMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAbsorbedDoseMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAccelerationMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAccelerationMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAccelerationMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAmountOfSubstanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAmountOfSubstanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAmountOfSubstanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAngularVelocityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAngularVelocityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAngularVelocityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcAreaMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcAreaMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcBoolean\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBoolean\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcBoolean\">\r\n\t\t<xs:restriction base=\"xs:boolean\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcBoxAlignment\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcBoxAlignment\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcBoxAlignment\">\r\n\t\t<xs:restriction base=\"ifc:IfcLabel\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcComplexNumber\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:complexContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcComplexNumber\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:complexContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:complexType name=\"IfcComplexNumber\">\r\n\t\t<xs:sequence>\r\n\t\t\t<xs:element ref=\"ex:double-wrapper\" maxOccurs=\"2\" minOccurs=\"2\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:sequence>\r\n\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:double-wrapper\">\r\n\t\t</xs:attribute>\r\n\t\t<xs:attribute ref=\"ex:cType\" fixed=\"array\">\r\n\t\t</xs:attribute>\r\n\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t</xs:attribute>\r\n\t</xs:complexType>\r\n\r\n\r\n\t<xs:element name=\"IfcCompoundPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:complexContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCompoundPlaneAngleMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:complexContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:complexType name=\"IfcCompoundPlaneAngleMeasure\">\r\n\t\t<xs:sequence>\r\n\t\t\t<xs:element ref=\"ex:long-wrapper\" maxOccurs=\"4\" minOccurs=\"3\">\r\n\t\t\t</xs:element>\r\n\t\t</xs:sequence>\r\n\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:long-wrapper\">\r\n\t\t</xs:attribute>\r\n\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\r\n\t\t</xs:attribute>\r\n\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\r\n\t\t</xs:attribute>\r\n\t</xs:complexType>\r\n\r\n\r\n\t<xs:element name=\"IfcContextDependentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcContextDependentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcContextDependentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCountMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCountMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCountMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcCurvatureMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcCurvatureMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcCurvatureMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDayInMonthNumber\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDayInMonthNumber\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDayInMonthNumber\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDaylightSavingHour\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDaylightSavingHour\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDaylightSavingHour\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDescriptiveMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDescriptiveMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDescriptiveMeasure\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDimensionCount\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDimensionCount\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDimensionCount\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDoseEquivalentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDoseEquivalentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDoseEquivalentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcDynamicViscosityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcDynamicViscosityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcDynamicViscosityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricCapacitanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCapacitanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricCapacitanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricChargeMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricChargeMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricChargeMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricConductanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricConductanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricConductanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricCurrentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricCurrentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricResistanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricResistanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricResistanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcElectricVoltageMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricVoltageMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcElectricVoltageMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcEnergyMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergyMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcEnergyMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFontStyle\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFontStyle\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFontStyle\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFontVariant\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFontVariant\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFontVariant\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFontWeight\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFontWeight\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFontWeight\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcForceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcForceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcForceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcFrequencyMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcFrequencyMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcFrequencyMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcGloballyUniqueId\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcGloballyUniqueId\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcGloballyUniqueId\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t\t<xs:minLength value=\"22\">\r\n\t\t\t</xs:minLength>\r\n\t\t\t<xs:maxLength value=\"22\">\r\n\t\t\t</xs:maxLength>\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcHeatFluxDensityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatFluxDensityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcHeatFluxDensityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcHeatingValueMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatingValueMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcHeatingValueMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcHourInDay\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcHourInDay\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcHourInDay\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcIdentifier\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIdentifier\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcIdentifier\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcIlluminanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIlluminanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcIlluminanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcInductanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcInductanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcInductanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcInteger\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcInteger\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcInteger\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcIntegerCountRateMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIntegerCountRateMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcIntegerCountRateMeasure\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcIonConcentrationMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIonConcentrationMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcIonConcentrationMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcIsothermalMoistureCapacityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcIsothermalMoistureCapacityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcKinematicViscosityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcKinematicViscosityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcKinematicViscosityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLabel\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLabel\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLabel\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLengthMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLengthMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLengthMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLinearForceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearForceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLinearForceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLinearMomentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearMomentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLinearMomentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLinearStiffnessMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearStiffnessMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLinearStiffnessMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLinearVelocityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearVelocityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLinearVelocityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLogical\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLogical\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLogical\">\r\n\t\t<xs:restriction base=\"ex:logical\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLuminousFluxMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousFluxMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLuminousFluxMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLuminousIntensityDistributionMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityDistributionMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLuminousIntensityDistributionMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcLuminousIntensityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcLuminousIntensityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMagneticFluxDensityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxDensityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMagneticFluxDensityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMagneticFluxMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMagneticFluxMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMassDensityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMassDensityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMassDensityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMassFlowRateMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMassFlowRateMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMassFlowRateMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMassMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMassMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMassMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMassPerLengthMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMassPerLengthMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMassPerLengthMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMinuteInHour\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMinuteInHour\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMinuteInHour\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcModulusOfElasticityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfElasticityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcModulusOfElasticityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcModulusOfLinearSubgradeReactionMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcModulusOfRotationalSubgradeReactionMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcModulusOfSubgradeReactionMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMoistureDiffusivityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMoistureDiffusivityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMoistureDiffusivityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMolecularWeightMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMolecularWeightMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMolecularWeightMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMomentOfInertiaMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMomentOfInertiaMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMomentOfInertiaMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMonetaryMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMonetaryMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMonetaryMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcMonthInYearNumber\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcMonthInYearNumber\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcMonthInYearNumber\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcNormalisedRatioMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcNormalisedRatioMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcNormalisedRatioMeasure\">\r\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcNumericMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcNumericMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcNumericMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPHMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPHMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPHMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcParameterValue\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcParameterValue\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcParameterValue\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPlanarForceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPlanarForceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPlanarForceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPlaneAngleMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPlaneAngleMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPositiveLengthMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveLengthMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPositiveLengthMeasure\">\r\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPositivePlaneAngleMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPositivePlaneAngleMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPositivePlaneAngleMeasure\">\r\n\t\t<xs:restriction base=\"ifc:IfcPlaneAngleMeasure\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPositiveRatioMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveRatioMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPositiveRatioMeasure\">\r\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPowerMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPowerMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPowerMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPresentableText\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPresentableText\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPresentableText\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcPressureMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcPressureMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcPressureMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRadioActivityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRadioActivityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRadioActivityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRatioMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRatioMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRatioMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcReal\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcReal\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcReal\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRotationalFrequencyMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalFrequencyMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRotationalFrequencyMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRotationalMassMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalMassMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRotationalMassMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcRotationalStiffnessMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalStiffnessMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcRotationalStiffnessMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSecondInMinute\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSecondInMinute\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSecondInMinute\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSectionModulusMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionModulusMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSectionModulusMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSectionalAreaIntegralMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionalAreaIntegralMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSectionalAreaIntegralMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcShearModulusMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcShearModulusMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcShearModulusMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSolidAngleMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSolidAngleMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSolidAngleMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSoundPowerMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSoundPowerMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSoundPressureMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSoundPressureMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSpecificHeatCapacityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecificHeatCapacityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSpecificHeatCapacityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSpecularExponent\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularExponent\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSpecularExponent\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcSpecularRoughness\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularRoughness\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcSpecularRoughness\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTemperatureGradientMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureGradientMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTemperatureGradientMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcText\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcText\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcText\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTextAlignment\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTextAlignment\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTextAlignment\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTextDecoration\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTextDecoration\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTextDecoration\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTextFontName\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTextFontName\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTextFontName\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTextTransformation\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTextTransformation\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTextTransformation\">\r\n\t\t<xs:restriction base=\"xs:normalizedString\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcThermalAdmittanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalAdmittanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcThermalAdmittanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcThermalConductivityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalConductivityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcThermalConductivityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcThermalExpansionCoefficientMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalExpansionCoefficientMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcThermalExpansionCoefficientMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcThermalResistanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalResistanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcThermalResistanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcThermalTransmittanceMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalTransmittanceMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcThermalTransmittanceMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcThermodynamicTemperatureMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcThermodynamicTemperatureMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTimeMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTimeMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTimeStamp\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeStamp\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTimeStamp\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcTorqueMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcTorqueMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcTorqueMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcVaporPermeabilityMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcVaporPermeabilityMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcVaporPermeabilityMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcVolumeMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumeMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcVolumeMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcVolumetricFlowRateMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumetricFlowRateMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcVolumetricFlowRateMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcWarpingConstantMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingConstantMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcWarpingConstantMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcWarpingMomentMeasure\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingMomentMeasure\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcWarpingMomentMeasure\">\r\n\t\t<xs:restriction base=\"xs:double\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n\t<xs:element name=\"IfcYearNumber\" nillable=\"true\">\r\n\t\t<xs:complexType>\r\n\t\t\t<xs:simpleContent>\r\n\t\t\t\t<xs:extension base=\"ifc:IfcYearNumber\">\r\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\r\n\t\t\t\t\t</xs:attributeGroup>\r\n\t\t\t\t</xs:extension>\r\n\t\t\t</xs:simpleContent>\r\n\t\t</xs:complexType>\r\n\t</xs:element>\r\n\r\n\t<xs:simpleType name=\"IfcYearNumber\">\r\n\t\t<xs:restriction base=\"xs:long\">\r\n\t\t</xs:restriction>\r\n\t</xs:simpleType>\r\n\r\n\r\n</xs:schema>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFC4.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:ifc=\"http://www.buildingsmart-tech.org/ifc/IFC4/Add2TC1\" targetNamespace=\"http://www.buildingsmart-tech.org/ifc/IFC4/Add2TC1\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\" >\n<!-- created with IFCDOC 11.7 at buildingsmart-tech.org -->\n\n<!--\nCopyright by:\nbuildingSMART International Limited, 1996-2017\n\nAny technical documentation made available by buildingSMART International Limited\nis the copyrighted work of buildingSMART International Limited and is owned by the \nbuildingSMART International Limited. It may be photocopied, used in software development, \nor translated into another computer language without prior written consent from \nbuildingSMART International Limited provided that full attribution is given. \nPrior written consent is required if changes are made to the technical specification.\n\nThis material is delivered to you as is and buildingSMART International Limited makes \nno warranty of any kind with regard to it, including, but not limited to, the implied \nwarranties as to its accuracy or fitness for a particular purpose. Any use of the \ntechnical documentation or the information contained therein is at the risk of the user. \nDocumentation may include technical or other inaccuracies or typographical errors. \nbuildingSMART International Limited shall not be liable for errors contained therein or \nfor incidental consequential damages in connection with the furnishing, performance or use \nof the material. The information contained in this document is subject to change without notice.\n-->\n\n\t<!-- root element declaration (for SCHEMA definitions) -->\n\t<xs:element name=\"uos\" type=\"ifc:uos\" abstract=\"true\"/>\n    <xs:simpleType name=\"Seq-anyURI\">\n        <xs:list itemType=\"xs:anyURI\"/>\n    </xs:simpleType>\n\t<xs:complexType name=\"uos\" abstract=\"true\">\n\t\t<xs:sequence>\n\t\t\t<xs:element name=\"header\" minOccurs=\"0\">\n\t\t\t\t<xs:complexType>\n\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t<xs:element name=\"name\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"time_stamp\" type=\"xs:dateTime\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"author\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"organization\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"preprocessor_version\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"originating_system\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"authorization\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"documentation\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t</xs:sequence>\n\t\t\t\t</xs:complexType>\n\t\t\t</xs:element>\n\t\t</xs:sequence>\n\t\t<xs:attribute name=\"id\" type=\"xs:ID\" use=\"optional\"/>\n\t\t<xs:attribute name=\"express\" type=\"ifc:Seq-anyURI\" use=\"optional\"/>\n\t\t<xs:attribute name=\"configuration\" type=\"ifc:Seq-anyURI\" use=\"optional\"/>\n\t</xs:complexType>\n\t<xs:element name=\"ifcXML\" type=\"ifc:ifcXML\" substitutionGroup=\"ifc:uos\"/>\n\t<xs:complexType name=\"ifcXML\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:uos\">\n\t\t\t\t<xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n\t\t\t\t\t<xs:element ref=\"ifc:Entity\"/>\n\t\t\t\t</xs:choice>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<!-- element and complex type declarations (for ENTITY definitions) -->\n\t<xs:element name=\"IfcActionRequest\" type=\"ifc:IfcActionRequest\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActionRequest\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActionRequestTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActor\" type=\"ifc:IfcActor\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TheActor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActorRole\" type=\"ifc:IfcActorRole\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActorRole\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Role\" type=\"ifc:IfcRoleEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedRole\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActuator\" type=\"ifc:IfcActuator\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActuator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActuatorType\" type=\"ifc:IfcActuatorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActuatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAddress\" type=\"ifc:IfcAddress\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAddress\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcAddressTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPurpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedBrep\" type=\"ifc:IfcAdvancedBrep\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedBrep\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedBrepWithVoids\" type=\"ifc:IfcAdvancedBrepWithVoids\" substitutionGroup=\"ifc:IfcAdvancedBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedBrepWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAdvancedBrep\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Voids\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClosedShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedFace\" type=\"ifc:IfcAdvancedFace\" substitutionGroup=\"ifc:IfcFaceSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFaceSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminal\" type=\"ifc:IfcAirTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalBox\" type=\"ifc:IfcAirTerminalBox\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalBoxType\" type=\"ifc:IfcAirTerminalBoxType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalBoxType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalType\" type=\"ifc:IfcAirTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirToAirHeatRecovery\" type=\"ifc:IfcAirToAirHeatRecovery\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirToAirHeatRecovery\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirToAirHeatRecoveryType\" type=\"ifc:IfcAirToAirHeatRecoveryType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirToAirHeatRecoveryType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlarm\" type=\"ifc:IfcAlarm\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlarm\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlarmType\" type=\"ifc:IfcAlarmType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlarmType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotation\" type=\"ifc:IfcAnnotation\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotationFillArea\" type=\"ifc:IfcAnnotationFillArea\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotationFillArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OuterBoundary\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApplication\" type=\"ifc:IfcApplication\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApplication\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ApplicationDeveloper\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Version\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicationFullName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicationIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAppliedValue\" type=\"ifc:IfcAppliedValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAppliedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitBasis\" type=\"ifc:IfcMeasureWithUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Components\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicableDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FixedUntilDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Condition\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ArithmeticOperator\" type=\"ifc:IfcArithmeticOperatorEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApproval\" type=\"ifc:IfcApproval\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApproval\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RequestingApproval\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"GivingApproval\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeOfApproval\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Level\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Qualifier\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApprovalRelationship\" type=\"ifc:IfcApprovalRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApprovalRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedApprovals\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcApproval\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryClosedProfileDef\" type=\"ifc:IfcArbitraryClosedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryClosedProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OuterCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryOpenProfileDef\" type=\"ifc:IfcArbitraryOpenProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryOpenProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Curve\" type=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryProfileDefWithVoids\" type=\"ifc:IfcArbitraryProfileDefWithVoids\" substitutionGroup=\"ifc:IfcArbitraryClosedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryProfileDefWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryClosedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerCurves\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAsset\" type=\"ifc:IfcAsset\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAsset\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OriginalValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CurrentValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TotalReplacementCost\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Owner\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"User\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResponsiblePerson\" type=\"ifc:IfcPerson\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"DepreciatedValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IncorporationDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAsymmetricIShapeProfileDef\" type=\"ifc:IfcAsymmetricIShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAsymmetricIShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"BottomFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAudioVisualAppliance\" type=\"ifc:IfcAudioVisualAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAudioVisualAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAudioVisualApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAudioVisualApplianceType\" type=\"ifc:IfcAudioVisualApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAudioVisualApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAudioVisualApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis1Placement\" type=\"ifc:IfcAxis1Placement\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis1Placement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis2Placement2D\" type=\"ifc:IfcAxis2Placement2D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis2Placement2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis2Placement3D\" type=\"ifc:IfcAxis2Placement3D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis2Placement3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineCurve\" type=\"ifc:IfcBSplineCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Degree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveForm\" type=\"ifc:IfcBSplineCurveForm\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ClosedCurve\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineCurveWithKnots\" type=\"ifc:IfcBSplineCurveWithKnots\" substitutionGroup=\"ifc:IfcBSplineCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineCurveWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurve\">\n\t\t\t\t<xs:attribute name=\"KnotMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Knots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"KnotSpec\" type=\"ifc:IfcKnotType\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineSurface\" type=\"ifc:IfcBSplineSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"4\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UDegree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VDegree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SurfaceForm\" type=\"ifc:IfcBSplineSurfaceForm\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UClosed\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VClosed\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineSurfaceWithKnots\" type=\"ifc:IfcBSplineSurfaceWithKnots\" substitutionGroup=\"ifc:IfcBSplineSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineSurfaceWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineSurface\">\n\t\t\t\t<xs:attribute name=\"UMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"VMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"UKnots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"VKnots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"KnotSpec\" type=\"ifc:IfcKnotType\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeam\" type=\"ifc:IfcBeam\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeam\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeamStandardCase\" type=\"ifc:IfcBeamStandardCase\" substitutionGroup=\"ifc:IfcBeam\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeamStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBeam\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeamType\" type=\"ifc:IfcBeamType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeamType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBlobTexture\" type=\"ifc:IfcBlobTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBlobTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RasterCode\" type=\"ifc:IfcBinary\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RasterFormat\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBlock\" type=\"ifc:IfcBlock\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBlock\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ZLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoiler\" type=\"ifc:IfcBoiler\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoiler\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoilerType\" type=\"ifc:IfcBoilerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoilerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBooleanClippingResult\" type=\"ifc:IfcBooleanClippingResult\" substitutionGroup=\"ifc:IfcBooleanResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBooleanClippingResult\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBooleanResult\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBooleanResult\" type=\"ifc:IfcBooleanResult\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBooleanResult\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FirstOperand\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondOperand\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Operator\" type=\"ifc:IfcBooleanOperator\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryCondition\" type=\"ifc:IfcBoundaryCondition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryCondition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryCurve\" type=\"ifc:IfcBoundaryCurve\" substitutionGroup=\"ifc:IfcCompositeCurveOnSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurveOnSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryEdgeCondition\" type=\"ifc:IfcBoundaryEdgeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryEdgeCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryFaceCondition\" type=\"ifc:IfcBoundaryFaceCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryFaceCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryNodeCondition\" type=\"ifc:IfcBoundaryNodeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryNodeCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryNodeConditionWarping\" type=\"ifc:IfcBoundaryNodeConditionWarping\" substitutionGroup=\"ifc:IfcBoundaryNodeCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryNodeConditionWarping\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryNodeCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WarpingStiffness\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcWarpingStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundedCurve\" type=\"ifc:IfcBoundedCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundedCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundedSurface\" type=\"ifc:IfcBoundedSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundedSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundingBox\" type=\"ifc:IfcBoundingBox\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundingBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Corner\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ZDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoxedHalfSpace\" type=\"ifc:IfcBoxedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoxedHalfSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Enclosure\" type=\"ifc:IfcBoundingBox\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuilding\" type=\"ifc:IfcBuilding\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuilding\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BuildingAddress\" type=\"ifc:IfcPostalAddress\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ElevationOfRefHeight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElevationOfTerrain\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElement\" type=\"ifc:IfcBuildingElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementPart\" type=\"ifc:IfcBuildingElementPart\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementPart\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementPartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementPartType\" type=\"ifc:IfcBuildingElementPartType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementPartType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementPartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementProxy\" type=\"ifc:IfcBuildingElementProxy\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementProxy\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementProxyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementProxyType\" type=\"ifc:IfcBuildingElementProxyType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementProxyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementProxyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementType\" type=\"ifc:IfcBuildingElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingStorey\" type=\"ifc:IfcBuildingStorey\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingStorey\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"Elevation\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingSystem\" type=\"ifc:IfcBuildingSystem\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingSystemTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBurner\" type=\"ifc:IfcBurner\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBurner\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBurnerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBurnerType\" type=\"ifc:IfcBurnerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBurnerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBurnerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCShapeProfileDef\" type=\"ifc:IfcCShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Girth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InternalFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierFitting\" type=\"ifc:IfcCableCarrierFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierFittingType\" type=\"ifc:IfcCableCarrierFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierSegment\" type=\"ifc:IfcCableCarrierSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierSegmentType\" type=\"ifc:IfcCableCarrierSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableFitting\" type=\"ifc:IfcCableFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableFittingType\" type=\"ifc:IfcCableFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableSegment\" type=\"ifc:IfcCableSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableSegmentType\" type=\"ifc:IfcCableSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPoint\" type=\"ifc:IfcCartesianPoint\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:attribute name=\"Coordinates\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList\" type=\"ifc:IfcCartesianPointList\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList2D\" type=\"ifc:IfcCartesianPointList2D\" substitutionGroup=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianPointList\">\n\t\t\t\t<xs:attribute name=\"CoordList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList3D\" type=\"ifc:IfcCartesianPointList3D\" substitutionGroup=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianPointList\">\n\t\t\t\t<xs:attribute name=\"CoordList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator\" type=\"ifc:IfcCartesianTransformationOperator\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis1\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Axis2\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LocalOrigin\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Scale\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator2D\" type=\"ifc:IfcCartesianTransformationOperator2D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator2DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator2DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2DnonUniform\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator2D\">\n\t\t\t\t<xs:attribute name=\"Scale2\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator3D\" type=\"ifc:IfcCartesianTransformationOperator3D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis3\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator3DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator3DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3DnonUniform\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator3D\">\n\t\t\t\t<xs:attribute name=\"Scale2\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scale3\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCenterLineProfileDef\" type=\"ifc:IfcCenterLineProfileDef\" substitutionGroup=\"ifc:IfcArbitraryOpenProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCenterLineProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryOpenProfileDef\">\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChiller\" type=\"ifc:IfcChiller\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChiller\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChillerType\" type=\"ifc:IfcChillerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChillerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChimney\" type=\"ifc:IfcChimney\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChimney\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChimneyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChimneyType\" type=\"ifc:IfcChimneyType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChimneyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChimneyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircle\" type=\"ifc:IfcCircle\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircleHollowProfileDef\" type=\"ifc:IfcCircleHollowProfileDef\" substitutionGroup=\"ifc:IfcCircleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircleHollowProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCircleProfileDef\">\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircleProfileDef\" type=\"ifc:IfcCircleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCivilElement\" type=\"ifc:IfcCivilElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCivilElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCivilElementType\" type=\"ifc:IfcCivilElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCivilElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassification\" type=\"ifc:IfcClassification\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassification\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferenceTokens\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasReferences\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationReference\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Source\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Edition\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EditionDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassificationReference\" type=\"ifc:IfcClassificationReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassificationReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasReferences\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationReference\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Sort\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClosedShell\" type=\"ifc:IfcClosedShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClosedShell\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoil\" type=\"ifc:IfcCoil\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoil\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoilType\" type=\"ifc:IfcCoilType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoilType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourRgb\" type=\"ifc:IfcColourRgb\" substitutionGroup=\"ifc:IfcColourSpecification\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourRgb\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcColourSpecification\">\n\t\t\t\t<xs:attribute name=\"Red\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Green\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Blue\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourRgbList\" type=\"ifc:IfcColourRgbList\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourRgbList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"ColourList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcNormalisedRatioMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourSpecification\" type=\"ifc:IfcColourSpecification\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourSpecification\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumn\" type=\"ifc:IfcColumn\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumn\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumnStandardCase\" type=\"ifc:IfcColumnStandardCase\" substitutionGroup=\"ifc:IfcColumn\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumnStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcColumn\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumnType\" type=\"ifc:IfcColumnType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumnType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCommunicationsAppliance\" type=\"ifc:IfcCommunicationsAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCommunicationsAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCommunicationsApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCommunicationsApplianceType\" type=\"ifc:IfcCommunicationsApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCommunicationsApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCommunicationsApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcComplexProperty\" type=\"ifc:IfcComplexProperty\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcComplexProperty\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcComplexPropertyTemplate\" type=\"ifc:IfcComplexPropertyTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcComplexPropertyTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertyTemplates\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyTemplate\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertyTemplate\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcComplexPropertyTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurve\" type=\"ifc:IfcCompositeCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Segments\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCompositeCurveSegment\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCompositeCurveSegment\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurveOnSurface\" type=\"ifc:IfcCompositeCurveOnSurface\" substitutionGroup=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurveOnSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurveSegment\" type=\"ifc:IfcCompositeCurveSegment\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurveSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Transition\" type=\"ifc:IfcTransitionCode\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeProfileDef\" type=\"ifc:IfcCompositeProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Profiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Label\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompressor\" type=\"ifc:IfcCompressor\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompressor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompressorType\" type=\"ifc:IfcCompressorType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompressorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCondenser\" type=\"ifc:IfcCondenser\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCondenser\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCondenserType\" type=\"ifc:IfcCondenserType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCondenserType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConic\" type=\"ifc:IfcConic\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConic\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectedFaceSet\" type=\"ifc:IfcConnectedFaceSet\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectedFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CfsFaces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFace\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFace\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionCurveGeometry\" type=\"ifc:IfcConnectionCurveGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionCurveGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionGeometry\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionPointEccentricity\" type=\"ifc:IfcConnectionPointEccentricity\" substitutionGroup=\"ifc:IfcConnectionPointGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionPointEccentricity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionPointGeometry\">\n\t\t\t\t<xs:attribute name=\"EccentricityInX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EccentricityInY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EccentricityInZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionPointGeometry\" type=\"ifc:IfcConnectionPointGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionPointGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PointOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionSurfaceGeometry\" type=\"ifc:IfcConnectionSurfaceGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionSurfaceGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionVolumeGeometry\" type=\"ifc:IfcConnectionVolumeGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionVolumeGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VolumeOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSolidOrShell\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VolumeOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSolidOrShell\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstraint\" type=\"ifc:IfcConstraint\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstraint\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CreatingActor\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstraintGrade\" type=\"ifc:IfcConstraintEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstraintSource\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionEquipmentResource\" type=\"ifc:IfcConstructionEquipmentResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionEquipmentResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionEquipmentResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionEquipmentResourceType\" type=\"ifc:IfcConstructionEquipmentResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionEquipmentResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionEquipmentResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionMaterialResource\" type=\"ifc:IfcConstructionMaterialResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionMaterialResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionMaterialResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionMaterialResourceType\" type=\"ifc:IfcConstructionMaterialResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionMaterialResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionMaterialResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionProductResource\" type=\"ifc:IfcConstructionProductResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionProductResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionProductResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionProductResourceType\" type=\"ifc:IfcConstructionProductResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionProductResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionProductResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionResource\" type=\"ifc:IfcConstructionResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Usage\" type=\"ifc:IfcResourceTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"BaseCosts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseQuantity\" type=\"ifc:IfcPhysicalQuantity\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionResourceType\" type=\"ifc:IfcConstructionResourceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionResourceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseCosts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseQuantity\" type=\"ifc:IfcPhysicalQuantity\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcContext\" type=\"ifc:IfcContext\" abstract=\"true\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcContext\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepresentationContexts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationContext\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitsInContext\" type=\"ifc:IfcUnitAssignment\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"IsDefinedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDefinesByProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDefinesByProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Declares\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDeclares\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDeclares\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ObjectType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Phase\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcContextDependentUnit\" type=\"ifc:IfcContextDependentUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcContextDependentUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcControl\" type=\"ifc:IfcControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcControl\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcController\" type=\"ifc:IfcController\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcController\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcControllerType\" type=\"ifc:IfcControllerType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcControllerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConversionBasedUnit\" type=\"ifc:IfcConversionBasedUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConversionBasedUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConversionFactor\" type=\"ifc:IfcMeasureWithUnit\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConversionBasedUnitWithOffset\" type=\"ifc:IfcConversionBasedUnitWithOffset\" substitutionGroup=\"ifc:IfcConversionBasedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConversionBasedUnitWithOffset\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConversionBasedUnit\">\n\t\t\t\t<xs:attribute name=\"ConversionOffset\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCooledBeam\" type=\"ifc:IfcCooledBeam\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCooledBeam\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCooledBeamType\" type=\"ifc:IfcCooledBeamType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCooledBeamType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoolingTower\" type=\"ifc:IfcCoolingTower\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoolingTower\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoolingTowerType\" type=\"ifc:IfcCoolingTowerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoolingTowerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoordinateOperation\" type=\"ifc:IfcCoordinateOperation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoordinateOperation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TargetCRS\" type=\"ifc:IfcCoordinateReferenceSystem\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoordinateReferenceSystem\" type=\"ifc:IfcCoordinateReferenceSystem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoordinateReferenceSystem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"GeodeticDatum\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VerticalDatum\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostItem\" type=\"ifc:IfcCostItem\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CostValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCostValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CostQuantities\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCostItemTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostSchedule\" type=\"ifc:IfcCostSchedule\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCostScheduleTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SubmittedOn\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UpdateDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostValue\" type=\"ifc:IfcCostValue\" substitutionGroup=\"ifc:IfcAppliedValue\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCovering\" type=\"ifc:IfcCovering\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCovering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoveringType\" type=\"ifc:IfcCoveringType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoveringType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCrewResource\" type=\"ifc:IfcCrewResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCrewResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCrewResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCrewResourceType\" type=\"ifc:IfcCrewResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCrewResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCrewResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCsgPrimitive3D\" type=\"ifc:IfcCsgPrimitive3D\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCsgPrimitive3D\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCsgSolid\" type=\"ifc:IfcCsgSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCsgSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TreeRootExpression\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCsgSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurrencyRelationship\" type=\"ifc:IfcCurrencyRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurrencyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RateSource\" type=\"ifc:IfcLibraryInformation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ExchangeRate\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RateDateTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurtainWall\" type=\"ifc:IfcCurtainWall\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurtainWall\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCurtainWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurtainWallType\" type=\"ifc:IfcCurtainWallType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurtainWallType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCurtainWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurve\" type=\"ifc:IfcCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveBoundedPlane\" type=\"ifc:IfcCurveBoundedPlane\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveBoundedPlane\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcPlane\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"OuterBoundary\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveBoundedSurface\" type=\"ifc:IfcCurveBoundedSurface\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveBoundedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Boundaries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBoundaryCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ImplicitOuter\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyle\" type=\"ifc:IfcCurveStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveFont\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveWidth\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelOrDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFont\" type=\"ifc:IfcCurveStyleFont\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PatternList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontPattern\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurveStyleFontPattern\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFontAndScaling\" type=\"ifc:IfcCurveStyleFontAndScaling\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFontAndScaling\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveFont\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveFontScaling\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFontPattern\" type=\"ifc:IfcCurveStyleFontPattern\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFontPattern\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"VisibleSegmentLength\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InvisibleSegmentLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCylindricalSurface\" type=\"ifc:IfcCylindricalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCylindricalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDamper\" type=\"ifc:IfcDamper\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDamper\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDamperType\" type=\"ifc:IfcDamperType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDamperType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedProfileDef\" type=\"ifc:IfcDerivedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Operator\" type=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Label\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedUnit\" type=\"ifc:IfcDerivedUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDerivedUnitElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDerivedUnitElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UnitType\" type=\"ifc:IfcDerivedUnitEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedUnitElement\" type=\"ifc:IfcDerivedUnitElement\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedUnitElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" type=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Exponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDimensionalExponents\" type=\"ifc:IfcDimensionalExponents\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDimensionalExponents\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"LengthExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MassExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectricCurrentExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThermodynamicTemperatureExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AmountOfSubstanceExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LuminousIntensityExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDirection\" type=\"ifc:IfcDirection\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDirection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:attribute name=\"DirectionRatios\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDiscreteAccessory\" type=\"ifc:IfcDiscreteAccessory\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDiscreteAccessory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDiscreteAccessoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDiscreteAccessoryType\" type=\"ifc:IfcDiscreteAccessoryType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDiscreteAccessoryType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDiscreteAccessoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionChamberElement\" type=\"ifc:IfcDistributionChamberElement\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionChamberElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionChamberElementType\" type=\"ifc:IfcDistributionChamberElementType\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionChamberElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionCircuit\" type=\"ifc:IfcDistributionCircuit\" substitutionGroup=\"ifc:IfcDistributionSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionCircuit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionSystem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionControlElement\" type=\"ifc:IfcDistributionControlElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionControlElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionControlElementType\" type=\"ifc:IfcDistributionControlElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionControlElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionElement\" type=\"ifc:IfcDistributionElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionElementType\" type=\"ifc:IfcDistributionElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionFlowElement\" type=\"ifc:IfcDistributionFlowElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionFlowElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionFlowElementType\" type=\"ifc:IfcDistributionFlowElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionFlowElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionPort\" type=\"ifc:IfcDistributionPort\" substitutionGroup=\"ifc:IfcPort\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionPort\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPort\">\n\t\t\t\t<xs:attribute name=\"FlowDirection\" type=\"ifc:IfcFlowDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionPortTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SystemType\" type=\"ifc:IfcDistributionSystemEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionSystem\" type=\"ifc:IfcDistributionSystem\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionSystemEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentInformation\" type=\"ifc:IfcDocumentInformation\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentInformation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DocumentOwner\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Editors\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IntendedUse\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scope\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Revision\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastRevisionTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectronicFormat\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValidFrom\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValidUntil\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Confidentiality\" type=\"ifc:IfcDocumentConfidentialityEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcDocumentStatusEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentInformationRelationship\" type=\"ifc:IfcDocumentInformationRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentInformationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingDocument\" type=\"ifc:IfcDocumentInformation\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedDocuments\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDocumentInformation\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RelationshipType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentReference\" type=\"ifc:IfcDocumentReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedDocument\" type=\"ifc:IfcDocumentInformation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoor\" type=\"ifc:IfcDoor\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDoorTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorTypeOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedOperationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorLiningProperties\" type=\"ifc:IfcDoorLiningProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorLiningProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CasingThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CasingDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorPanelProperties\" type=\"ifc:IfcDoorPanelProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorPanelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PanelDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelOperation\" type=\"ifc:IfcDoorPanelOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelWidth\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcDoorPanelPositionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorStandardCase\" type=\"ifc:IfcDoorStandardCase\" substitutionGroup=\"ifc:IfcDoor\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDoor\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorStyle\" type=\"ifc:IfcDoorStyle\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorStyleOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstructionType\" type=\"ifc:IfcDoorStyleConstructionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Sizeable\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorType\" type=\"ifc:IfcDoorType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDoorTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorTypeOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedOperationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingPreDefinedColour\" type=\"ifc:IfcDraughtingPreDefinedColour\" substitutionGroup=\"ifc:IfcPreDefinedColour\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedColour\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingPreDefinedCurveFont\" type=\"ifc:IfcDraughtingPreDefinedCurveFont\" substitutionGroup=\"ifc:IfcPreDefinedCurveFont\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedCurveFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctFitting\" type=\"ifc:IfcDuctFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctFittingType\" type=\"ifc:IfcDuctFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSegment\" type=\"ifc:IfcDuctSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSegmentType\" type=\"ifc:IfcDuctSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSilencer\" type=\"ifc:IfcDuctSilencer\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSilencer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSilencerType\" type=\"ifc:IfcDuctSilencerType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSilencerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdge\" type=\"ifc:IfcEdge\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeStart\" type=\"ifc:IfcVertex\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"EdgeEnd\" type=\"ifc:IfcVertex\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdgeCurve\" type=\"ifc:IfcEdgeCurve\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdgeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeGeometry\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdgeLoop\" type=\"ifc:IfcEdgeLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdgeLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricAppliance\" type=\"ifc:IfcElectricAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricApplianceType\" type=\"ifc:IfcElectricApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricDistributionBoard\" type=\"ifc:IfcElectricDistributionBoard\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricDistributionBoard\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricDistributionBoardTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricDistributionBoardType\" type=\"ifc:IfcElectricDistributionBoardType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricDistributionBoardType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricDistributionBoardTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowStorageDevice\" type=\"ifc:IfcElectricFlowStorageDevice\" substitutionGroup=\"ifc:IfcFlowStorageDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowStorageDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowStorageDeviceType\" type=\"ifc:IfcElectricFlowStorageDeviceType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowStorageDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricGenerator\" type=\"ifc:IfcElectricGenerator\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricGenerator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricGeneratorType\" type=\"ifc:IfcElectricGeneratorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricGeneratorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricMotor\" type=\"ifc:IfcElectricMotor\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricMotor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricMotorType\" type=\"ifc:IfcElectricMotorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricMotorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricTimeControl\" type=\"ifc:IfcElectricTimeControl\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricTimeControl\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricTimeControlType\" type=\"ifc:IfcElectricTimeControlType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricTimeControlType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElement\" type=\"ifc:IfcElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProjections\" type=\"ifc:IfcRelProjectsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"HasOpenings\" type=\"ifc:IfcRelVoidsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementAssembly\" type=\"ifc:IfcElementAssembly\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementAssembly\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementAssemblyType\" type=\"ifc:IfcElementAssemblyType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementAssemblyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementComponent\" type=\"ifc:IfcElementComponent\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementComponent\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementComponentType\" type=\"ifc:IfcElementComponentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementComponentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementQuantity\" type=\"ifc:IfcElementQuantity\" substitutionGroup=\"ifc:IfcQuantitySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementQuantity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcQuantitySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Quantities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MethodOfMeasurement\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementType\" type=\"ifc:IfcElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ElementType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementarySurface\" type=\"ifc:IfcElementarySurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementarySurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEllipse\" type=\"ifc:IfcEllipse\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEllipse\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\n\t\t\t\t<xs:attribute name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEllipseProfileDef\" type=\"ifc:IfcEllipseProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEllipseProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEnergyConversionDevice\" type=\"ifc:IfcEnergyConversionDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEnergyConversionDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEnergyConversionDeviceType\" type=\"ifc:IfcEnergyConversionDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEnergyConversionDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEngine\" type=\"ifc:IfcEngine\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEngine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEngineTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEngineType\" type=\"ifc:IfcEngineType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEngineType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEngineTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporativeCooler\" type=\"ifc:IfcEvaporativeCooler\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporativeCooler\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporativeCoolerType\" type=\"ifc:IfcEvaporativeCoolerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporativeCoolerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporator\" type=\"ifc:IfcEvaporator\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporatorType\" type=\"ifc:IfcEvaporatorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvent\" type=\"ifc:IfcEvent\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EventOccurenceTime\" type=\"ifc:IfcEventTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEventTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EventTriggerType\" type=\"ifc:IfcEventTriggerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedEventTriggerType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEventTime\" type=\"ifc:IfcEventTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEventTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"ActualDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEventType\" type=\"ifc:IfcEventType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEventType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEventTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EventTriggerType\" type=\"ifc:IfcEventTriggerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedEventTriggerType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtendedProperties\" type=\"ifc:IfcExtendedProperties\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtendedProperties\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Properties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalInformation\" type=\"ifc:IfcExternalInformation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalInformation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalReference\" type=\"ifc:IfcExternalReference\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalReference\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalReferenceRelationship\" type=\"ifc:IfcExternalReferenceRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalReferenceRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingReference\" type=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalSpatialElement\" type=\"ifc:IfcExternalSpatialElement\" substitutionGroup=\"ifc:IfcExternalSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalSpatialElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcExternalSpatialElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalSpatialStructureElement\" type=\"ifc:IfcExternalSpatialStructureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalSpatialStructureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedHatchStyle\" type=\"ifc:IfcExternallyDefinedHatchStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedHatchStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedSurfaceStyle\" type=\"ifc:IfcExternallyDefinedSurfaceStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedSurfaceStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedTextFont\" type=\"ifc:IfcExternallyDefinedTextFont\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedTextFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtrudedAreaSolid\" type=\"ifc:IfcExtrudedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtrudedAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtrudedAreaSolidTapered\" type=\"ifc:IfcExtrudedAreaSolidTapered\" substitutionGroup=\"ifc:IfcExtrudedAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtrudedAreaSolidTapered\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtrudedAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EndSweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFace\" type=\"ifc:IfcFace\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Bounds\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFaceBound\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFaceBound\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceBasedSurfaceModel\" type=\"ifc:IfcFaceBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceBasedSurfaceModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FbsmFaces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectedFaceSet\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcConnectedFaceSet\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceBound\" type=\"ifc:IfcFaceBound\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceBound\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Bound\" type=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Orientation\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceOuterBound\" type=\"ifc:IfcFaceOuterBound\" substitutionGroup=\"ifc:IfcFaceBound\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceOuterBound\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFaceBound\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceSurface\" type=\"ifc:IfcFaceSurface\" substitutionGroup=\"ifc:IfcFace\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFace\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FaceSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacetedBrep\" type=\"ifc:IfcFacetedBrep\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacetedBrep\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacetedBrepWithVoids\" type=\"ifc:IfcFacetedBrepWithVoids\" substitutionGroup=\"ifc:IfcFacetedBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacetedBrepWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacetedBrep\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Voids\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClosedShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFailureConnectionCondition\" type=\"ifc:IfcFailureConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFailureConnectionCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t<xs:attribute name=\"TensionFailureX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionFailureY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionFailureZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFan\" type=\"ifc:IfcFan\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFan\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFanType\" type=\"ifc:IfcFanType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFanType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFastener\" type=\"ifc:IfcFastener\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFastener\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFastenerType\" type=\"ifc:IfcFastenerType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFastenerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElement\" type=\"ifc:IfcFeatureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElementAddition\" type=\"ifc:IfcFeatureElementAddition\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElementAddition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElementSubtraction\" type=\"ifc:IfcFeatureElementSubtraction\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElementSubtraction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyle\" type=\"ifc:IfcFillAreaStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FillStyles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFillStyleSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelorDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyleHatching\" type=\"ifc:IfcFillAreaStyleHatching\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyleHatching\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HatchLineAppearance\" type=\"ifc:IfcCurveStyle\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"StartOfNextHatchLine\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcHatchLineDistanceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointOfReferenceHatchLine\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PatternStart\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"HatchLineAngle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyleTiles\" type=\"ifc:IfcFillAreaStyleTiles\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyleTiles\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TilingPattern\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\" minOccurs=\"2\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcVector\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Tiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStyledItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStyledItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TilingScale\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFilter\" type=\"ifc:IfcFilter\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFilter\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFilterType\" type=\"ifc:IfcFilterType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFilterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFireSuppressionTerminal\" type=\"ifc:IfcFireSuppressionTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFireSuppressionTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFireSuppressionTerminalType\" type=\"ifc:IfcFireSuppressionTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFireSuppressionTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFixedReferenceSweptAreaSolid\" type=\"ifc:IfcFixedReferenceSweptAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFixedReferenceSweptAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"FixedReference\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"StartParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowController\" type=\"ifc:IfcFlowController\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowController\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowControllerType\" type=\"ifc:IfcFlowControllerType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowControllerType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowFitting\" type=\"ifc:IfcFlowFitting\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowFittingType\" type=\"ifc:IfcFlowFittingType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowFittingType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowInstrument\" type=\"ifc:IfcFlowInstrument\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowInstrument\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowInstrumentType\" type=\"ifc:IfcFlowInstrumentType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowInstrumentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMeter\" type=\"ifc:IfcFlowMeter\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMeter\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMeterType\" type=\"ifc:IfcFlowMeterType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMeterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMovingDevice\" type=\"ifc:IfcFlowMovingDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMovingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMovingDeviceType\" type=\"ifc:IfcFlowMovingDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMovingDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowSegment\" type=\"ifc:IfcFlowSegment\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowSegmentType\" type=\"ifc:IfcFlowSegmentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowSegmentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowStorageDevice\" type=\"ifc:IfcFlowStorageDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowStorageDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowStorageDeviceType\" type=\"ifc:IfcFlowStorageDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowStorageDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTerminal\" type=\"ifc:IfcFlowTerminal\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTerminalType\" type=\"ifc:IfcFlowTerminalType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTerminalType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTreatmentDevice\" type=\"ifc:IfcFlowTreatmentDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTreatmentDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTreatmentDeviceType\" type=\"ifc:IfcFlowTreatmentDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTreatmentDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFooting\" type=\"ifc:IfcFooting\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFooting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFootingType\" type=\"ifc:IfcFootingType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFootingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnishingElement\" type=\"ifc:IfcFurnishingElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnishingElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnishingElementType\" type=\"ifc:IfcFurnishingElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnishingElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurniture\" type=\"ifc:IfcFurniture\" substitutionGroup=\"ifc:IfcFurnishingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurniture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFurnitureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnitureType\" type=\"ifc:IfcFurnitureType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnitureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\n\t\t\t\t<xs:attribute name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFurnitureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeographicElement\" type=\"ifc:IfcGeographicElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeographicElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGeographicElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeographicElementType\" type=\"ifc:IfcGeographicElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeographicElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGeographicElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricCurveSet\" type=\"ifc:IfcGeometricCurveSet\" substitutionGroup=\"ifc:IfcGeometricSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricCurveSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationContext\" type=\"ifc:IfcGeometricRepresentationContext\" substitutionGroup=\"ifc:IfcRepresentationContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationContext\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WorldCoordinateSystem\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TrueNorth\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"HasSubContexts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationSubContext\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGeometricRepresentationSubContext\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasCoordinateOperation\" type=\"ifc:IfcCoordinateOperation\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CoordinateSpaceDimension\" type=\"ifc:IfcDimensionCount\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Precision\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationItem\" type=\"ifc:IfcGeometricRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcGeometricRepresentationContext\">\n\t\t\t\t<xs:sequence/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationSubContext\" type=\"ifc:IfcGeometricRepresentationSubContext\" substitutionGroup=\"ifc:IfcGeometricRepresentationContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationSubContext-temp\">\n\t\t\t\t<xs:attribute name=\"TargetScale\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TargetView\" type=\"ifc:IfcGeometricProjectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedTargetView\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricSet\" type=\"ifc:IfcGeometricSet\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGeometricSetSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGrid\" type=\"ifc:IfcGrid\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGrid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WAxes\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGridTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGridAxis\" type=\"ifc:IfcGridAxis\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGridAxis\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"AxisTag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGridPlacement\" type=\"ifc:IfcGridPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGridPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlacementLocation\" type=\"ifc:IfcVirtualGridIntersection\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"PlacementRefDirection\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGridPlacementDirectionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGroup\" type=\"ifc:IfcGroup\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHalfSpaceSolid\" type=\"ifc:IfcHalfSpaceSolid\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHalfSpaceSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"AgreementFlag\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHeatExchanger\" type=\"ifc:IfcHeatExchanger\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHeatExchanger\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHeatExchangerType\" type=\"ifc:IfcHeatExchangerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHeatExchangerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHumidifier\" type=\"ifc:IfcHumidifier\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHumidifier\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHumidifierType\" type=\"ifc:IfcHumidifierType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHumidifierType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIShapeProfileDef\" type=\"ifc:IfcIShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcImageTexture\" type=\"ifc:IfcImageTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcImageTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:attribute name=\"URLReference\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedColourMap\" type=\"ifc:IfcIndexedColourMap\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedColourMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Colours\" type=\"ifc:IfcColourRgbList\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Opacity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ColourIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolyCurve\" type=\"ifc:IfcIndexedPolyCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolyCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Points\" type=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Segments\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSegmentIndexSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSegmentIndexSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolygonalFace\" type=\"ifc:IfcIndexedPolygonalFace\" substitutionGroup=\"ifc:IfcTessellatedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolygonalFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedItem\">\n\t\t\t\t<xs:attribute name=\"CoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolygonalFaceWithVoids\" type=\"ifc:IfcIndexedPolygonalFaceWithVoids\" substitutionGroup=\"ifc:IfcIndexedPolygonalFace\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolygonalFaceWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcIndexedPolygonalFace\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerCoordIndices\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element name=\"Seq-IfcPositiveInteger-wrapper\" type=\"ifc:Seq-IfcPositiveInteger\" maxOccurs=\"unbounded\" />\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedTextureMap\" type=\"ifc:IfcIndexedTextureMap\" abstract=\"true\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedTextureMap\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TexCoords\" type=\"ifc:IfcTextureVertexList\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedTriangleTextureMap\" type=\"ifc:IfcIndexedTriangleTextureMap\" substitutionGroup=\"ifc:IfcIndexedTextureMap\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedTriangleTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcIndexedTextureMap\">\n\t\t\t\t<xs:attribute name=\"TexCoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInterceptor\" type=\"ifc:IfcInterceptor\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInterceptor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInterceptorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInterceptorType\" type=\"ifc:IfcInterceptorType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInterceptorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInterceptorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIntersectionCurve\" type=\"ifc:IfcIntersectionCurve\" substitutionGroup=\"ifc:IfcSurfaceCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIntersectionCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInventory\" type=\"ifc:IfcInventory\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInventory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Jurisdiction\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResponsiblePersons\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPerson\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurrentValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"OriginalValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInventoryTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastUpdateDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIrregularTimeSeries\" type=\"ifc:IfcIrregularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIrregularTimeSeries\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIrregularTimeSeriesValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIrregularTimeSeriesValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIrregularTimeSeriesValue\" type=\"ifc:IfcIrregularTimeSeriesValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIrregularTimeSeriesValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TimeStamp\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcJunctionBox\" type=\"ifc:IfcJunctionBox\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcJunctionBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcJunctionBoxType\" type=\"ifc:IfcJunctionBoxType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcJunctionBoxType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLShapeProfileDef\" type=\"ifc:IfcLShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LegSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLaborResource\" type=\"ifc:IfcLaborResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLaborResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLaborResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLaborResourceType\" type=\"ifc:IfcLaborResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLaborResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLaborResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLagTime\" type=\"ifc:IfcLagTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLagTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LagValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTimeOrRatioSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"DurationType\" type=\"ifc:IfcTaskDurationEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLamp\" type=\"ifc:IfcLamp\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLamp\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLampType\" type=\"ifc:IfcLampType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLampType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLibraryInformation\" type=\"ifc:IfcLibraryInformation\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLibraryInformation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Publisher\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Version\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VersionDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLibraryReference\" type=\"ifc:IfcLibraryReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLibraryReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedLibrary\" type=\"ifc:IfcLibraryInformation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Language\" type=\"ifc:IfcLanguageId\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightDistributionData\" type=\"ifc:IfcLightDistributionData\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightDistributionData\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"MainPlaneAngle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondaryPlaneAngle\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPlaneAngleMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"LuminousIntensity\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLuminousIntensityDistributionMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightFixture\" type=\"ifc:IfcLightFixture\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightFixture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightFixtureType\" type=\"ifc:IfcLightFixtureType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightFixtureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightIntensityDistribution\" type=\"ifc:IfcLightIntensityDistribution\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightIntensityDistribution\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DistributionData\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLightDistributionData\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLightDistributionData\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LightDistributionCurve\" type=\"ifc:IfcLightDistributionCurveEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSource\" type=\"ifc:IfcLightSource\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LightColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AmbientIntensity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Intensity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceAmbient\" type=\"ifc:IfcLightSourceAmbient\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceAmbient\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceDirectional\" type=\"ifc:IfcLightSourceDirectional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceDirectional\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceGoniometric\" type=\"ifc:IfcLightSourceGoniometric\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceGoniometric\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ColourAppearance\" type=\"ifc:IfcColourRgb\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LightDistributionDataSource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ColourTemperature\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LuminousFlux\" type=\"ifc:IfcLuminousFluxMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LightEmissionSource\" type=\"ifc:IfcLightEmissionSourceEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourcePositional\" type=\"ifc:IfcLightSourcePositional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourcePositional\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstantAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DistanceAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"QuadricAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceSpot\" type=\"ifc:IfcLightSourceSpot\" substitutionGroup=\"ifc:IfcLightSourcePositional\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceSpot\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSourcePositional\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ConcentrationExponent\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SpreadAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BeamWidthAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLine\" type=\"ifc:IfcLine\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Pnt\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Dir\" type=\"ifc:IfcVector\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLocalPlacement\" type=\"ifc:IfcLocalPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLocalPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlacementRelTo\" type=\"ifc:IfcObjectPlacement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RelativePlacement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLoop\" type=\"ifc:IfcLoop\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcManifoldSolidBrep\" type=\"ifc:IfcManifoldSolidBrep\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcManifoldSolidBrep\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Outer\" type=\"ifc:IfcClosedShell\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMapConversion\" type=\"ifc:IfcMapConversion\" substitutionGroup=\"ifc:IfcCoordinateOperation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMapConversion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCoordinateOperation\">\n\t\t\t\t<xs:attribute name=\"Eastings\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Northings\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OrthogonalHeight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"XAxisAbscissa\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"XAxisOrdinate\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scale\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMappedItem\" type=\"ifc:IfcMappedItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMappedItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MappingSource\" type=\"ifc:IfcRepresentationMap\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"MappingTarget\" type=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterial\" type=\"ifc:IfcMaterial\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterial\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasRepresentation\" type=\"ifc:IfcMaterialDefinitionRepresentation\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialClassificationRelationship\" type=\"ifc:IfcMaterialClassificationRelationship\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialClassificationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialClassifications\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ClassifiedMaterial\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialConstituent\" type=\"ifc:IfcMaterialConstituent\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialConstituent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Fraction\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialConstituentSet\" type=\"ifc:IfcMaterialConstituentSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialConstituentSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialConstituents\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialConstituent\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialConstituent\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialDefinition\" type=\"ifc:IfcMaterialDefinition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialDefinitionRepresentation\" type=\"ifc:IfcMaterialDefinitionRepresentation\" substitutionGroup=\"ifc:IfcProductRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialDefinitionRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayer\" type=\"ifc:IfcMaterialLayer\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsVentilated\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerSet\" type=\"ifc:IfcMaterialLayerSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialLayers\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialLayer\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerSetName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerSetUsage\" type=\"ifc:IfcMaterialLayerSetUsage\" substitutionGroup=\"ifc:IfcMaterialUsageDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerSetUsage\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialUsageDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForLayerSet\" type=\"ifc:IfcMaterialLayerSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerSetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DirectionSense\" type=\"ifc:IfcDirectionSenseEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OffsetFromReferenceLine\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReferenceExtent\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerWithOffsets\" type=\"ifc:IfcMaterialLayerWithOffsets\" substitutionGroup=\"ifc:IfcMaterialLayer\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerWithOffsets\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialLayer\">\n\t\t\t\t<xs:attribute name=\"OffsetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OffsetValues\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialList\" type=\"ifc:IfcMaterialList\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Materials\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfile\" type=\"ifc:IfcMaterialProfile\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfile\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Profile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSet\" type=\"ifc:IfcMaterialProfileSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialProfiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialProfile\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialProfile\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CompositeProfile\" type=\"ifc:IfcCompositeProfileDef\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSetUsage\" type=\"ifc:IfcMaterialProfileSetUsage\" substitutionGroup=\"ifc:IfcMaterialUsageDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSetUsage\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialUsageDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForProfileSet\" type=\"ifc:IfcMaterialProfileSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CardinalPoint\" type=\"ifc:IfcCardinalPointReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReferenceExtent\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSetUsageTapering\" type=\"ifc:IfcMaterialProfileSetUsageTapering\" substitutionGroup=\"ifc:IfcMaterialProfileSetUsage\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSetUsageTapering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProfileSetUsage\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForProfileEndSet\" type=\"ifc:IfcMaterialProfileSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CardinalEndPoint\" type=\"ifc:IfcCardinalPointReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileWithOffsets\" type=\"ifc:IfcMaterialProfileWithOffsets\" substitutionGroup=\"ifc:IfcMaterialProfile\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileWithOffsets\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProfile\">\n\t\t\t\t<xs:attribute name=\"OffsetValues\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProperties\" type=\"ifc:IfcMaterialProperties\" substitutionGroup=\"ifc:IfcExtendedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtendedProperties\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialRelationship\" type=\"ifc:IfcMaterialRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedMaterials\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialUsageDefinition\" type=\"ifc:IfcMaterialUsageDefinition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialUsageDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMeasureWithUnit\" type=\"ifc:IfcMeasureWithUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMeasureWithUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ValueComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalFastener\" type=\"ifc:IfcMechanicalFastener\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalFastener\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMechanicalFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalFastenerType\" type=\"ifc:IfcMechanicalFastenerType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalFastenerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMechanicalFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMedicalDevice\" type=\"ifc:IfcMedicalDevice\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMedicalDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMedicalDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMedicalDeviceType\" type=\"ifc:IfcMedicalDeviceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMedicalDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMedicalDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMember\" type=\"ifc:IfcMember\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMemberStandardCase\" type=\"ifc:IfcMemberStandardCase\" substitutionGroup=\"ifc:IfcMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMemberStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMemberType\" type=\"ifc:IfcMemberType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMemberType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMetric\" type=\"ifc:IfcMetric\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMetric\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DataValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencePath\" type=\"ifc:IfcReference\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Benchmark\" type=\"ifc:IfcBenchmarkEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValueSource\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcMirroredProfileDef-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcDerivedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMirroredProfileDef\" type=\"ifc:IfcMirroredProfileDef\" substitutionGroup=\"ifc:IfcDerivedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMirroredProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMirroredProfileDef-temp\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMonetaryUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Currency\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMotorConnection\" type=\"ifc:IfcMotorConnection\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMotorConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMotorConnectionType\" type=\"ifc:IfcMotorConnectionType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMotorConnectionType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcNamedUnit\" type=\"ifc:IfcNamedUnit\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcNamedUnit\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Dimensions\" type=\"ifc:IfcDimensionalExponents\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UnitType\" type=\"ifc:IfcUnitEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObject\" type=\"ifc:IfcObject\" abstract=\"true\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObject\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IsDeclaredBy\" type=\"ifc:IfcRelDefinesByObject\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"IsTypedBy\" type=\"ifc:IfcRelDefinesByType\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"IsDefinedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDefinesByProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDefinesByProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ObjectType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjectDefinition\" type=\"ifc:IfcObjectDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjectDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IsNestedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelNests\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelNests\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"IsDecomposedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelAggregates\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelAggregates\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjectPlacement\" type=\"ifc:IfcObjectPlacement\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjectPlacement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjective\" type=\"ifc:IfcObjective\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjective\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BenchmarkValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcConstraint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LogicalAggregator\" type=\"ifc:IfcLogicalOperatorEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ObjectiveQualifier\" type=\"ifc:IfcObjectiveEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedQualifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOccupant\" type=\"ifc:IfcOccupant\" substitutionGroup=\"ifc:IfcActor\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOccupant\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcActor\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOccupantTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurve2D\" type=\"ifc:IfcOffsetCurve2D\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurve2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Distance\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurve3D\" type=\"ifc:IfcOffsetCurve3D\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurve3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Distance\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpenShell\" type=\"ifc:IfcOpenShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpenShell\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpeningElement\" type=\"ifc:IfcOpeningElement\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpeningElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasFillings\" type=\"ifc:IfcRelFillsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOpeningElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpeningStandardCase\" type=\"ifc:IfcOpeningStandardCase\" substitutionGroup=\"ifc:IfcOpeningElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpeningStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOpeningElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrganization\" type=\"ifc:IfcOrganization\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrganization\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Addresses\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAddress\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrganizationRelationship\" type=\"ifc:IfcOrganizationRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrganizationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingOrganization\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedOrganizations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrganization\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcOrientedEdge-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrientedEdge\" type=\"ifc:IfcOrientedEdge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrientedEdge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOrientedEdge-temp\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeElement\" type=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Orientation\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOuterBoundaryCurve\" type=\"ifc:IfcOuterBoundaryCurve\" substitutionGroup=\"ifc:IfcBoundaryCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOuterBoundaryCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOutlet\" type=\"ifc:IfcOutlet\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOutlet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOutletType\" type=\"ifc:IfcOutletType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOutletType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOwnerHistory\" type=\"ifc:IfcOwnerHistory\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOwnerHistory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OwningUser\" type=\"ifc:IfcPersonAndOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"OwningApplication\" type=\"ifc:IfcApplication\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"LastModifyingUser\" type=\"ifc:IfcPersonAndOrganization\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LastModifyingApplication\" type=\"ifc:IfcApplication\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"State\" type=\"ifc:IfcStateEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ChangeAction\" type=\"ifc:IfcChangeActionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastModifiedDate\" type=\"ifc:IfcTimeStamp\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationDate\" type=\"ifc:IfcTimeStamp\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcParameterizedProfileDef\" type=\"ifc:IfcParameterizedProfileDef\" abstract=\"true\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcParameterizedProfileDef\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement2D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPath\" type=\"ifc:IfcPath\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPath\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPcurve\" type=\"ifc:IfcPcurve\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPcurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReferenceCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPerformanceHistory\" type=\"ifc:IfcPerformanceHistory\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPerformanceHistory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"LifeCyclePhase\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPerformanceHistoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPermeableCoveringProperties\" type=\"ifc:IfcPermeableCoveringProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPermeableCoveringProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcPermeableCoveringOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPermit\" type=\"ifc:IfcPermit\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPermit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPermitTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPerson\" type=\"ifc:IfcPerson\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPerson\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Addresses\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAddress\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FamilyName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"GivenName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MiddleNames\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PrefixTitles\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"SuffixTitles\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPersonAndOrganization\" type=\"ifc:IfcPersonAndOrganization\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPersonAndOrganization\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ThePerson\" type=\"ifc:IfcPerson\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TheOrganization\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalComplexQuantity\" type=\"ifc:IfcPhysicalComplexQuantity\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalComplexQuantity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasQuantities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Discrimination\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Quality\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Usage\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalQuantity\" type=\"ifc:IfcPhysicalQuantity\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalQuantity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalSimpleQuantity\" type=\"ifc:IfcPhysicalSimpleQuantity\" abstract=\"true\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalSimpleQuantity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" type=\"ifc:IfcNamedUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPile\" type=\"ifc:IfcPile\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPile\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstructionType\" type=\"ifc:IfcPileConstructionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPileType\" type=\"ifc:IfcPileType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPileType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeFitting\" type=\"ifc:IfcPipeFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeFittingType\" type=\"ifc:IfcPipeFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeSegment\" type=\"ifc:IfcPipeSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeSegmentType\" type=\"ifc:IfcPipeSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPixelTexture\" type=\"ifc:IfcPixelTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPixelTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ColourComponents\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Pixel\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"xs:hexBinary\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlacement\" type=\"ifc:IfcPlacement\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlacement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Location\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlanarBox\" type=\"ifc:IfcPlanarBox\" substitutionGroup=\"ifc:IfcPlanarExtent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlanarBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlanarExtent\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Placement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlanarExtent\" type=\"ifc:IfcPlanarExtent\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlanarExtent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:attribute name=\"SizeInX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SizeInY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlane\" type=\"ifc:IfcPlane\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlane\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlate\" type=\"ifc:IfcPlate\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlateStandardCase\" type=\"ifc:IfcPlateStandardCase\" substitutionGroup=\"ifc:IfcPlate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlateStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlate\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlateType\" type=\"ifc:IfcPlateType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlateType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPoint\" type=\"ifc:IfcPoint\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPoint\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPointOnCurve\" type=\"ifc:IfcPointOnCurve\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPointOnCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PointParameter\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPointOnSurface\" type=\"ifc:IfcPointOnSurface\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPointOnSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PointParameterU\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PointParameterV\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolyLoop\" type=\"ifc:IfcPolyLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolyLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Polygon\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"3\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolygonalBoundedHalfSpace\" type=\"ifc:IfcPolygonalBoundedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolygonalBoundedHalfSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"PolygonalBoundary\" type=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolygonalFaceSet\" type=\"ifc:IfcPolygonalFaceSet\" substitutionGroup=\"ifc:IfcTessellatedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolygonalFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedFaceSet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Faces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIndexedPolygonalFace\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIndexedPolygonalFace\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Closed\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PnIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolyline\" type=\"ifc:IfcPolyline\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolyline\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Points\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPort\" type=\"ifc:IfcPort\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPort\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPostalAddress\" type=\"ifc:IfcPostalAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPostalAddress\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AddressLines\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"InternalLocation\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PostalBox\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Town\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Region\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PostalCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Country\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedColour\" type=\"ifc:IfcPreDefinedColour\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedColour\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedCurveFont\" type=\"ifc:IfcPreDefinedCurveFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedCurveFont\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedItem\" type=\"ifc:IfcPreDefinedItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedProperties\" type=\"ifc:IfcPreDefinedProperties\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedProperties\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedPropertySet\" type=\"ifc:IfcPreDefinedPropertySet\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedPropertySet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedTextFont\" type=\"ifc:IfcPreDefinedTextFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedTextFont\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationItem\" type=\"ifc:IfcPresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationLayerAssignment\" type=\"ifc:IfcPresentationLayerAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationLayerAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AssignedItems\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLayeredItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLayeredItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationLayerWithStyle\" type=\"ifc:IfcPresentationLayerWithStyle\" substitutionGroup=\"ifc:IfcPresentationLayerAssignment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationLayerWithStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationLayerAssignment\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LayerStyles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPresentationStyle\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPresentationStyle\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerOn\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LayerFrozen\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LayerBlocked\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationStyle\" type=\"ifc:IfcPresentationStyle\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationStyle\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationStyleAssignment\" type=\"ifc:IfcPresentationStyleAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationStyleAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPresentationStyleSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcedure\" type=\"ifc:IfcProcedure\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcedure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProcedureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcedureType\" type=\"ifc:IfcProcedureType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcedureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProcedureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcess\" type=\"ifc:IfcProcess\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcess\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProduct\" type=\"ifc:IfcProduct\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProduct\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ObjectPlacement\" type=\"ifc:IfcObjectPlacement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Representation\" type=\"ifc:IfcProductRepresentation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProductDefinitionShape\" type=\"ifc:IfcProductDefinitionShape\" substitutionGroup=\"ifc:IfcProductRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProductDefinitionShape\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasShapeAspects\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShapeAspect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProductRepresentation\" type=\"ifc:IfcProductRepresentation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProductRepresentation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Representations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentation\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProfileDef\" type=\"ifc:IfcProfileDef\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ProfileType\" type=\"ifc:IfcProfileTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProfileName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProfileProperties\" type=\"ifc:IfcProfileProperties\" substitutionGroup=\"ifc:IfcExtendedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProfileProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtendedProperties\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProject\" type=\"ifc:IfcProject\" substitutionGroup=\"ifc:IfcContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcContext\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectLibrary\" type=\"ifc:IfcProjectLibrary\" substitutionGroup=\"ifc:IfcContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectLibrary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcContext\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectOrder\" type=\"ifc:IfcProjectOrder\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectOrder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProjectOrderTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectedCRS\" type=\"ifc:IfcProjectedCRS\" substitutionGroup=\"ifc:IfcCoordinateReferenceSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectedCRS\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCoordinateReferenceSystem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MapUnit\" type=\"ifc:IfcNamedUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MapProjection\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MapZone\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectionElement\" type=\"ifc:IfcProjectionElement\" substitutionGroup=\"ifc:IfcFeatureElementAddition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectionElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementAddition\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProjectionElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProperty\" type=\"ifc:IfcProperty\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProperty\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyAbstraction\" type=\"ifc:IfcPropertyAbstraction\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyAbstraction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyBoundedValue\" type=\"ifc:IfcPropertyBoundedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyBoundedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UpperBoundValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LowerBoundValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SetPointValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyDefinition\" type=\"ifc:IfcPropertyDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyDependencyRelationship\" type=\"ifc:IfcPropertyDependencyRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyDependencyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DependingProperty\" type=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"DependantProperty\" type=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyEnumeratedValue\" type=\"ifc:IfcPropertyEnumeratedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyEnumeratedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EnumerationValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EnumerationReference\" type=\"ifc:IfcPropertyEnumeration\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyEnumeration\" type=\"ifc:IfcPropertyEnumeration\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyEnumeration\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyListValue\" type=\"ifc:IfcPropertyListValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyListValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyReferenceValue\" type=\"ifc:IfcPropertyReferenceValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyReferenceValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PropertyReference\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySet\" type=\"ifc:IfcPropertySet\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySetDefinition\" type=\"ifc:IfcPropertySetDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySetDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySetTemplate\" type=\"ifc:IfcPropertySetTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplateDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySetTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplateDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertyTemplates\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyTemplate\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertyTemplate\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcPropertySetTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicableEntity\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySingleValue\" type=\"ifc:IfcPropertySingleValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySingleValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"NominalValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTableValue\" type=\"ifc:IfcPropertyTableValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTableValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DefiningValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefinedValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefiningUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefinedUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveInterpolation\" type=\"ifc:IfcCurveInterpolationEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTemplate\" type=\"ifc:IfcPropertyTemplate\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyTemplateDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTemplate\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplateDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTemplateDefinition\" type=\"ifc:IfcPropertyTemplateDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTemplateDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDevice\" type=\"ifc:IfcProtectiveDevice\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceTrippingUnit\" type=\"ifc:IfcProtectiveDeviceTrippingUnit\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceTrippingUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceTrippingUnitType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceTrippingUnitType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceType\" type=\"ifc:IfcProtectiveDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProxy\" type=\"ifc:IfcProxy\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProxy\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:attribute name=\"ProxyType\" type=\"ifc:IfcObjectTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPump\" type=\"ifc:IfcPump\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPump\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPumpType\" type=\"ifc:IfcPumpType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPumpType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityArea\" type=\"ifc:IfcQuantityArea\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"AreaValue\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityCount\" type=\"ifc:IfcQuantityCount\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityCount\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"CountValue\" type=\"ifc:IfcCountMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityLength\" type=\"ifc:IfcQuantityLength\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityLength\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"LengthValue\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantitySet\" type=\"ifc:IfcQuantitySet\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantitySet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityTime\" type=\"ifc:IfcQuantityTime\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"TimeValue\" type=\"ifc:IfcTimeMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityVolume\" type=\"ifc:IfcQuantityVolume\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityVolume\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"VolumeValue\" type=\"ifc:IfcVolumeMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityWeight\" type=\"ifc:IfcQuantityWeight\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityWeight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"WeightValue\" type=\"ifc:IfcMassMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailing\" type=\"ifc:IfcRailing\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailing\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailingType\" type=\"ifc:IfcRailingType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRamp\" type=\"ifc:IfcRamp\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRamp\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampFlight\" type=\"ifc:IfcRampFlight\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampFlight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampFlightType\" type=\"ifc:IfcRampFlightType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampFlightType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampType\" type=\"ifc:IfcRampType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRationalBSplineCurveWithKnots\" type=\"ifc:IfcRationalBSplineCurveWithKnots\" substitutionGroup=\"ifc:IfcBSplineCurveWithKnots\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRationalBSplineCurveWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurveWithKnots\">\n\t\t\t\t<xs:attribute name=\"WeightsData\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRationalBSplineSurfaceWithKnots\" type=\"ifc:IfcRationalBSplineSurfaceWithKnots\" substitutionGroup=\"ifc:IfcBSplineSurfaceWithKnots\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRationalBSplineSurfaceWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineSurfaceWithKnots\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WeightsData\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\" minOccurs=\"4\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcReal-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangleHollowProfileDef\" type=\"ifc:IfcRectangleHollowProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangleHollowProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InnerFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OuterFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangleProfileDef\" type=\"ifc:IfcRectangleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangularPyramid\" type=\"ifc:IfcRectangularPyramid\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangularPyramid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangularTrimmedSurface\" type=\"ifc:IfcRectangularTrimmedSurface\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangularTrimmedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"U1\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"V1\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"U2\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"V2\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Usense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Vsense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRecurrencePattern\" type=\"ifc:IfcRecurrencePattern\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRecurrencePattern\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TimePeriods\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimePeriod\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTimePeriod\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RecurrenceType\" type=\"ifc:IfcRecurrenceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DayComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcDayInMonthNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"WeekdayComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcDayInWeekNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"MonthComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcMonthInYearNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Position\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Interval\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Occurrences\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReference\" type=\"ifc:IfcReference\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerReference\" type=\"ifc:IfcReference\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TypeIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AttributeIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InstanceName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ListPositions\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRegularTimeSeries\" type=\"ifc:IfcRegularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRegularTimeSeries\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeriesValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTimeSeriesValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TimeStep\" type=\"ifc:IfcTimeMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcementBarProperties\" type=\"ifc:IfcReinforcementBarProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcementBarProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:attribute name=\"TotalCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SteelGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EffectiveDepth\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalBarDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarCount\" type=\"ifc:IfcCountMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcementDefinitionProperties\" type=\"ifc:IfcReinforcementDefinitionProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcementDefinitionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReinforcementSectionDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionReinforcementProperties\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSectionReinforcementProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"DefinitionType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingBar\" type=\"ifc:IfcReinforcingBar\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingBar\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingBarTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingBarType\" type=\"ifc:IfcReinforcingBarType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingBarType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BendingParameters\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBendingParameterSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBendingParameterSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingBarTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BendingShapeCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingElement\" type=\"ifc:IfcReinforcingElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"SteelGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingElementType\" type=\"ifc:IfcReinforcingElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingMesh\" type=\"ifc:IfcReinforcingMesh\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingMesh\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"MeshLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingMeshTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingMeshType\" type=\"ifc:IfcReinforcingMeshType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingMeshType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BendingParameters\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBendingParameterSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBendingParameterSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingMeshTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BendingShapeCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAggregates\" type=\"ifc:IfcRelAggregates\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAggregates\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssigns\" type=\"ifc:IfcRelAssigns\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssigns\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RelatedObjectsType\" type=\"ifc:IfcObjectTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToActor\" type=\"ifc:IfcRelAssignsToActor\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToActor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingActor\" type=\"ifc:IfcActor\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ActingRole\" type=\"ifc:IfcActorRole\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToControl\" type=\"ifc:IfcRelAssignsToControl\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToControl\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingControl\" type=\"ifc:IfcControl\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToGroup\" type=\"ifc:IfcRelAssignsToGroup\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingGroup\" type=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToGroupByFactor\" type=\"ifc:IfcRelAssignsToGroupByFactor\" substitutionGroup=\"ifc:IfcRelAssignsToGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToGroupByFactor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToGroup\">\n\t\t\t\t<xs:attribute name=\"Factor\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToProcess\" type=\"ifc:IfcRelAssignsToProcess\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToProcess\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcProcessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"QuantityInProcess\" type=\"ifc:IfcMeasureWithUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToProduct\" type=\"ifc:IfcRelAssignsToProduct\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToProduct\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProduct\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcProductSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToResource\" type=\"ifc:IfcRelAssignsToResource\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingResource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociates\" type=\"ifc:IfcRelAssociates\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociates\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinitionSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDefinitionSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesApproval\" type=\"ifc:IfcRelAssociatesApproval\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesApproval\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesClassification\" type=\"ifc:IfcRelAssociatesClassification\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesClassification\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingClassification\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesConstraint\" type=\"ifc:IfcRelAssociatesConstraint\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesConstraint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\" type=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Intent\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesDocument\" type=\"ifc:IfcRelAssociatesDocument\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesDocument\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesLibrary\" type=\"ifc:IfcRelAssociatesLibrary\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesLibrary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingLibrary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLibrarySelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesMaterial\" type=\"ifc:IfcRelAssociatesMaterial\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesMaterial\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMaterialSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnects\" type=\"ifc:IfcRelConnects\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnects\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsElements\" type=\"ifc:IfcRelConnectsElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RelatingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPathElements\" type=\"ifc:IfcRelConnectsPathElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPathElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\n\t\t\t\t<xs:attribute name=\"RelatingPriorities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"0\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"RelatedPriorities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"0\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"RelatedConnectionType\" type=\"ifc:IfcConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RelatingConnectionType\" type=\"ifc:IfcConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPortToElement\" type=\"ifc:IfcRelConnectsPortToElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPortToElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPorts\" type=\"ifc:IfcRelConnectsPorts\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPorts\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RealizingElement\" type=\"ifc:IfcElement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsStructuralActivity\" type=\"ifc:IfcRelConnectsStructuralActivity\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsStructuralActivity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralActivity\" type=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsStructuralMember\" type=\"ifc:IfcRelConnectsStructuralMember\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsStructuralMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingStructuralMember\" type=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralConnection\" type=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" type=\"ifc:IfcBoundaryCondition\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"AdditionalConditions\" type=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ConditionCoordinateSystem\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SupportedLength\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsWithEccentricity\" type=\"ifc:IfcRelConnectsWithEccentricity\" substitutionGroup=\"ifc:IfcRelConnectsStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsWithEccentricity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConnectionConstraint\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsWithRealizingElements\" type=\"ifc:IfcRelConnectsWithRealizingElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsWithRealizingElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RealizingElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ConnectionType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelContainedInSpatialStructure\" type=\"ifc:IfcRelContainedInSpatialStructure\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelContainedInSpatialStructure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProduct\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelCoversBldgElements\" type=\"ifc:IfcRelCoversBldgElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelCoversBldgElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCovering\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelCoversSpaces\" type=\"ifc:IfcRelCoversSpaces\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelCoversSpaces\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSpace\" type=\"ifc:IfcSpace\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCovering\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDeclares\" type=\"ifc:IfcRelDeclares\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDeclares\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinitionSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDefinitionSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDecomposes\" type=\"ifc:IfcRelDecomposes\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDecomposes\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefines\" type=\"ifc:IfcRelDefines\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefines\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByObject\" type=\"ifc:IfcRelDefinesByObject\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByObject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObject\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByProperties\" type=\"ifc:IfcRelDefinesByProperties\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPropertyDefinition\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPropertySetDefinitionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByTemplate\" type=\"ifc:IfcRelDefinesByTemplate\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedPropertySets\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingTemplate\" type=\"ifc:IfcPropertySetTemplate\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByType\" type=\"ifc:IfcRelDefinesByType\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingType\" type=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelFillsElement\" type=\"ifc:IfcRelFillsElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelFillsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelFlowControlElements\" type=\"ifc:IfcRelFlowControlElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelFlowControlElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedControlElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionControlElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDistributionControlElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingFlowElement\" type=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelInterferesElements\" type=\"ifc:IfcRelInterferesElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelInterferesElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InterferenceGeometry\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"InterferenceType\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ImpliedOrder\" type=\"ifc:logical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelNests\" type=\"ifc:IfcRelNests\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelNests\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelProjectsElement\" type=\"ifc:IfcRelProjectsElement\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelProjectsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedFeatureElement\" type=\"ifc:IfcFeatureElementAddition\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelReferencedInSpatialStructure\" type=\"ifc:IfcRelReferencedInSpatialStructure\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelReferencedInSpatialStructure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProduct\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSequence\" type=\"ifc:IfcRelSequence\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSequence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProcess\" type=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedProcess\" type=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TimeLag\" type=\"ifc:IfcLagTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SequenceType\" type=\"ifc:IfcSequenceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedSequenceType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelServicesBuildings\" type=\"ifc:IfcRelServicesBuildings\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelServicesBuildings\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSystem\" type=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedBuildings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSpatialElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary\" type=\"ifc:IfcRelSpaceBoundary\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSpace\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpaceBoundarySelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PhysicalOrVirtualBoundary\" type=\"ifc:IfcPhysicalOrVirtualEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InternalOrExternalBoundary\" type=\"ifc:IfcInternalOrExternalEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary1stLevel\" type=\"ifc:IfcRelSpaceBoundary1stLevel\" substitutionGroup=\"ifc:IfcRelSpaceBoundary\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary1stLevel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelSpaceBoundary\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentBoundary\" type=\"ifc:IfcRelSpaceBoundary1stLevel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary2ndLevel\" type=\"ifc:IfcRelSpaceBoundary2ndLevel\" substitutionGroup=\"ifc:IfcRelSpaceBoundary1stLevel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary2ndLevel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelSpaceBoundary1stLevel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CorrespondingBoundary\" type=\"ifc:IfcRelSpaceBoundary2ndLevel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelVoidsElement\" type=\"ifc:IfcRelVoidsElement\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelVoidsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedOpeningElement\" type=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelationship\" type=\"ifc:IfcRelationship\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelationship\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReparametrisedCompositeCurveSegment\" type=\"ifc:IfcReparametrisedCompositeCurveSegment\" substitutionGroup=\"ifc:IfcCompositeCurveSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReparametrisedCompositeCurveSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurveSegment\">\n\t\t\t\t<xs:attribute name=\"ParamLength\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentation\" type=\"ifc:IfcRepresentation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContextOfItems\" type=\"ifc:IfcRepresentationContext\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Items\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RepresentationIdentifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RepresentationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationContext\" type=\"ifc:IfcRepresentationContext\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationContext\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"ContextIdentifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ContextType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationItem\" type=\"ifc:IfcRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StyledByItem\" type=\"ifc:IfcStyledItem\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationMap\" type=\"ifc:IfcRepresentationMap\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MappingOrigin\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MappedRepresentation\" type=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResource\" type=\"ifc:IfcResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceApprovalRelationship\" type=\"ifc:IfcResourceApprovalRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceApprovalRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceConstraintRelationship\" type=\"ifc:IfcResourceConstraintRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceConstraintRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\" type=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceLevelRelationship\" type=\"ifc:IfcResourceLevelRelationship\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceLevelRelationship\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceTime\" type=\"ifc:IfcResourceTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"ScheduleWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleContour\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LevelingDelay\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsOverAllocated\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StatusTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Completion\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRevolvedAreaSolid\" type=\"ifc:IfcRevolvedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRevolvedAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcAxis1Placement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Angle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRevolvedAreaSolidTapered\" type=\"ifc:IfcRevolvedAreaSolidTapered\" substitutionGroup=\"ifc:IfcRevolvedAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRevolvedAreaSolidTapered\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRevolvedAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EndSweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRightCircularCone\" type=\"ifc:IfcRightCircularCone\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRightCircularCone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRightCircularCylinder\" type=\"ifc:IfcRightCircularCylinder\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRightCircularCylinder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoof\" type=\"ifc:IfcRoof\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoof\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRoofTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoofType\" type=\"ifc:IfcRoofType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoofType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRoofTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoot\" type=\"ifc:IfcRoot\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoot\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OwnerHistory\" type=\"ifc:IfcOwnerHistory\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"GlobalId\" type=\"ifc:IfcGloballyUniqueId\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoundedRectangleProfileDef\" type=\"ifc:IfcRoundedRectangleProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoundedRectangleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\n\t\t\t\t<xs:attribute name=\"RoundingRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcSIUnit-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:sequence/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSIUnit\" type=\"ifc:IfcSIUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSIUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSIUnit-temp\">\n\t\t\t\t<xs:attribute name=\"Prefix\" type=\"ifc:IfcSIPrefix\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcSIUnitName\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSanitaryTerminal\" type=\"ifc:IfcSanitaryTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSanitaryTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSanitaryTerminalType\" type=\"ifc:IfcSanitaryTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSanitaryTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSchedulingTime\" type=\"ifc:IfcSchedulingTime\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSchedulingTime\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedDataOrigin\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSeamCurve\" type=\"ifc:IfcSeamCurve\" substitutionGroup=\"ifc:IfcSurfaceCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSeamCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionProperties\" type=\"ifc:IfcSectionProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StartProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"EndProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SectionType\" type=\"ifc:IfcSectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionReinforcementProperties\" type=\"ifc:IfcSectionReinforcementProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionReinforcementProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SectionDefinition\" type=\"ifc:IfcSectionProperties\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CrossSectionReinforcementDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReinforcementBarProperties\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcReinforcementBarProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LongitudinalStartPosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalEndPosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransversePosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReinforcementRole\" type=\"ifc:IfcReinforcingBarRoleEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionedSpine\" type=\"ifc:IfcSectionedSpine\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionedSpine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SpineCurve\" type=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CrossSections\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CrossSectionPositions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAxis2Placement3D\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSensor\" type=\"ifc:IfcSensor\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSensor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSensorType\" type=\"ifc:IfcSensorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSensorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShadingDevice\" type=\"ifc:IfcShadingDevice\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShadingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcShadingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShadingDeviceType\" type=\"ifc:IfcShadingDeviceType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShadingDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcShadingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeAspect\" type=\"ifc:IfcShapeAspect\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeAspect\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeRepresentations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeModel\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShapeModel\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProductDefinitional\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeModel\" type=\"ifc:IfcShapeModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeRepresentation\" type=\"ifc:IfcShapeRepresentation\" substitutionGroup=\"ifc:IfcShapeModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShellBasedSurfaceModel\" type=\"ifc:IfcShellBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShellBasedSurfaceModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SbsmBoundary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSimpleProperty\" type=\"ifc:IfcSimpleProperty\" abstract=\"true\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSimpleProperty\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProperty\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSimplePropertyTemplate\" type=\"ifc:IfcSimplePropertyTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSimplePropertyTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Enumerators\" type=\"ifc:IfcPropertyEnumeration\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PrimaryUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondaryUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcSimplePropertyTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PrimaryMeasureType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondaryMeasureType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AccessState\" type=\"ifc:IfcStateEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSite\" type=\"ifc:IfcSite\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSite\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SiteAddress\" type=\"ifc:IfcPostalAddress\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RefLatitude\" type=\"ifc:List-IfcCompoundPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RefLongitude\" type=\"ifc:List-IfcCompoundPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RefElevation\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LandTitleNumber\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlab\" type=\"ifc:IfcSlab\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlab\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlabElementedCase\" type=\"ifc:IfcSlabElementedCase\" substitutionGroup=\"ifc:IfcSlab\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlabElementedCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSlab\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlabStandardCase\" type=\"ifc:IfcSlabStandardCase\" substitutionGroup=\"ifc:IfcSlab\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlabStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSlab\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlabType\" type=\"ifc:IfcSlabType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlabType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlippageConnectionCondition\" type=\"ifc:IfcSlippageConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlippageConnectionCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t<xs:attribute name=\"SlippageX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SlippageY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SlippageZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolarDevice\" type=\"ifc:IfcSolarDevice\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolarDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSolarDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolarDeviceType\" type=\"ifc:IfcSolarDeviceType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolarDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSolarDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolidModel\" type=\"ifc:IfcSolidModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolidModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpace\" type=\"ifc:IfcSpace\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElevationWithFlooring\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceHeater\" type=\"ifc:IfcSpaceHeater\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceHeater\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceHeaterType\" type=\"ifc:IfcSpaceHeaterType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceHeaterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceType\" type=\"ifc:IfcSpaceType\" substitutionGroup=\"ifc:IfcSpatialStructureElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialElement\" type=\"ifc:IfcSpatialElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContainsElements\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelContainedInSpatialStructure\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelContainedInSpatialStructure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencesElements\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelReferencedInSpatialStructure\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelReferencedInSpatialStructure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialElementType\" type=\"ifc:IfcSpatialElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ElementType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialStructureElement\" type=\"ifc:IfcSpatialStructureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialStructureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\">\n\t\t\t\t<xs:attribute name=\"CompositionType\" type=\"ifc:IfcElementCompositionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialStructureElementType\" type=\"ifc:IfcSpatialStructureElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialStructureElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialZone\" type=\"ifc:IfcSpatialZone\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialZone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpatialZoneTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialZoneType\" type=\"ifc:IfcSpatialZoneType\" substitutionGroup=\"ifc:IfcSpatialElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialZoneType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpatialZoneTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSphere\" type=\"ifc:IfcSphere\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSphere\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSphericalSurface\" type=\"ifc:IfcSphericalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSphericalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStackTerminal\" type=\"ifc:IfcStackTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStackTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStackTerminalType\" type=\"ifc:IfcStackTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStackTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStair\" type=\"ifc:IfcStair\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStair\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairFlight\" type=\"ifc:IfcStairFlight\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairFlight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"NumberOfRisers\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NumberOfTreads\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RiserHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TreadLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairFlightType\" type=\"ifc:IfcStairFlightType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairFlightType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairType\" type=\"ifc:IfcStairType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralAction\" type=\"ifc:IfcStructuralAction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralAction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\">\n\t\t\t\t<xs:attribute name=\"DestabilizingLoad\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralActivity\" type=\"ifc:IfcStructuralActivity\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralActivity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedLoad\" type=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"GlobalOrLocal\" type=\"ifc:IfcGlobalOrLocalEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralAnalysisModel\" type=\"ifc:IfcStructuralAnalysisModel\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralAnalysisModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OrientationOf2DPlane\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LoadedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralLoadGroup\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasResults\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralResultGroup\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralResultGroup\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SharedPlacement\" type=\"ifc:IfcObjectPlacement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAnalysisModelTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralConnection\" type=\"ifc:IfcStructuralConnection\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralConnection\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" type=\"ifc:IfcBoundaryCondition\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralConnectionCondition\" type=\"ifc:IfcStructuralConnectionCondition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralConnectionCondition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveAction\" type=\"ifc:IfcStructuralCurveAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\n\t\t\t\t<xs:attribute name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveConnection\" type=\"ifc:IfcStructuralCurveConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveMember\" type=\"ifc:IfcStructuralCurveMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveMemberVarying\" type=\"ifc:IfcStructuralCurveMemberVarying\" substitutionGroup=\"ifc:IfcStructuralCurveMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveMemberVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveReaction\" type=\"ifc:IfcStructuralCurveReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralItem\" type=\"ifc:IfcStructuralItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLinearAction\" type=\"ifc:IfcStructuralLinearAction\" substitutionGroup=\"ifc:IfcStructuralCurveAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLinearAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoad\" type=\"ifc:IfcStructuralLoad\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoad\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadCase\" type=\"ifc:IfcStructuralLoadCase\" substitutionGroup=\"ifc:IfcStructuralLoadGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadGroup\">\n\t\t\t\t<xs:attribute name=\"SelfWeightCoefficients\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcRatioMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadConfiguration\" type=\"ifc:IfcStructuralLoadConfiguration\" substitutionGroup=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadConfiguration\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadOrResult\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralLoadOrResult\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Locations\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\" minOccurs=\"1\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadGroup\" type=\"ifc:IfcStructuralLoadGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLoadGroupTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActionType\" type=\"ifc:IfcActionTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActionSource\" type=\"ifc:IfcActionSourceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Coefficient\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadLinearForce\" type=\"ifc:IfcStructuralLoadLinearForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadLinearForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"LinearForceX\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearForceY\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearForceZ\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentX\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentY\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentZ\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadOrResult\" type=\"ifc:IfcStructuralLoadOrResult\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadOrResult\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadPlanarForce\" type=\"ifc:IfcStructuralLoadPlanarForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadPlanarForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"PlanarForceX\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PlanarForceY\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PlanarForceZ\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacement\" type=\"ifc:IfcStructuralLoadSingleDisplacement\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"DisplacementX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DisplacementY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DisplacementZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRX\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRY\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRZ\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacementDistortion\" type=\"ifc:IfcStructuralLoadSingleDisplacementDistortion\" substitutionGroup=\"ifc:IfcStructuralLoadSingleDisplacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacementDistortion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleDisplacement\">\n\t\t\t\t<xs:attribute name=\"Distortion\" type=\"ifc:IfcCurvatureMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleForce\" type=\"ifc:IfcStructuralLoadSingleForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"ForceX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ForceY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ForceZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentX\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentY\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentZ\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleForceWarping\" type=\"ifc:IfcStructuralLoadSingleForceWarping\" substitutionGroup=\"ifc:IfcStructuralLoadSingleForce\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleForceWarping\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleForce\">\n\t\t\t\t<xs:attribute name=\"WarpingMoment\" type=\"ifc:IfcWarpingMomentMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadStatic\" type=\"ifc:IfcStructuralLoadStatic\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralLoadOrResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadStatic\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadOrResult\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadTemperature\" type=\"ifc:IfcStructuralLoadTemperature\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadTemperature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"DeltaTConstant\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DeltaTY\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DeltaTZ\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralMember\" type=\"ifc:IfcStructuralMember\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralMember\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPlanarAction\" type=\"ifc:IfcStructuralPlanarAction\" substitutionGroup=\"ifc:IfcStructuralSurfaceAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPlanarAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointAction\" type=\"ifc:IfcStructuralPointAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointConnection\" type=\"ifc:IfcStructuralPointConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConditionCoordinateSystem\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointReaction\" type=\"ifc:IfcStructuralPointReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralReaction\" type=\"ifc:IfcStructuralReaction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralReaction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralResultGroup\" type=\"ifc:IfcStructuralResultGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralResultGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ResultForLoadGroup\" type=\"ifc:IfcStructuralLoadGroup\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TheoryType\" type=\"ifc:IfcAnalysisTheoryTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsLinear\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceAction\" type=\"ifc:IfcStructuralSurfaceAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\n\t\t\t\t<xs:attribute name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceConnection\" type=\"ifc:IfcStructuralSurfaceConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceMember\" type=\"ifc:IfcStructuralSurfaceMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceMemberTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceMemberVarying\" type=\"ifc:IfcStructuralSurfaceMemberVarying\" substitutionGroup=\"ifc:IfcStructuralSurfaceMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceMemberVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceReaction\" type=\"ifc:IfcStructuralSurfaceReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyleModel\" type=\"ifc:IfcStyleModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyleModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyledItem\" type=\"ifc:IfcStyledItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyledItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcStyleAssignmentSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStyleAssignmentSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyledRepresentation\" type=\"ifc:IfcStyledRepresentation\" substitutionGroup=\"ifc:IfcStyleModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyledRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStyleModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubContractResource\" type=\"ifc:IfcSubContractResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubContractResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSubContractResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubContractResourceType\" type=\"ifc:IfcSubContractResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubContractResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSubContractResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubedge\" type=\"ifc:IfcSubedge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubedge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentEdge\" type=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurface\" type=\"ifc:IfcSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceCurve\" type=\"ifc:IfcSurfaceCurve\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Curve3D\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"AssociatedGeometry\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPcurve\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPcurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MasterRepresentation\" type=\"ifc:IfcPreferredSurfaceCurveRepresentation\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceCurveSweptAreaSolid\" type=\"ifc:IfcSurfaceCurveSweptAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceCurveSweptAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReferenceSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"StartParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceFeature\" type=\"ifc:IfcSurfaceFeature\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceFeature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSurfaceFeatureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceOfLinearExtrusion\" type=\"ifc:IfcSurfaceOfLinearExtrusion\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceOfLinearExtrusion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceOfRevolution\" type=\"ifc:IfcSurfaceOfRevolution\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceOfRevolution\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisPosition\" type=\"ifc:IfcAxis1Placement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceReinforcementArea\" type=\"ifc:IfcSurfaceReinforcementArea\" substitutionGroup=\"ifc:IfcStructuralLoadOrResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceReinforcementArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadOrResult\">\n\t\t\t\t<xs:attribute name=\"SurfaceReinforcement1\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"SurfaceReinforcement2\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"ShearReinforcement\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyle\" type=\"ifc:IfcSurfaceStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\" maxOccurs=\"5\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceStyleElementSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Side\" type=\"ifc:IfcSurfaceSide\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleLighting\" type=\"ifc:IfcSurfaceStyleLighting\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleLighting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"DiffuseReflectionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TransmissionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReflectanceColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleRefraction\" type=\"ifc:IfcSurfaceStyleRefraction\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleRefraction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"RefractionIndex\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DispersionFactor\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleRendering\" type=\"ifc:IfcSurfaceStyleRendering\" substitutionGroup=\"ifc:IfcSurfaceStyleShading\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleRendering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceStyleShading\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DiffuseColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TransmissionColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReflectionColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SpecularColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SpecularHighlight\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ReflectanceMethod\" type=\"ifc:IfcReflectanceMethodEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleShading\" type=\"ifc:IfcSurfaceStyleShading\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleShading\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SurfaceColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Transparency\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleWithTextures\" type=\"ifc:IfcSurfaceStyleWithTextures\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleWithTextures\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Textures\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceTexture\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceTexture\" type=\"ifc:IfcSurfaceTexture\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceTexture\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextureTransform\" type=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RepeatS\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RepeatT\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Mode\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Parameter\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcIdentifier\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptAreaSolid\" type=\"ifc:IfcSweptAreaSolid\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptAreaSolid\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptDiskSolid\" type=\"ifc:IfcSweptDiskSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptDiskSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InnerRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptDiskSolidPolygonal\" type=\"ifc:IfcSweptDiskSolidPolygonal\" substitutionGroup=\"ifc:IfcSweptDiskSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptDiskSolidPolygonal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptDiskSolid\">\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptSurface\" type=\"ifc:IfcSweptSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SweptCurve\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSwitchingDevice\" type=\"ifc:IfcSwitchingDevice\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSwitchingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSwitchingDeviceType\" type=\"ifc:IfcSwitchingDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSwitchingDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystem\" type=\"ifc:IfcSystem\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystemFurnitureElement\" type=\"ifc:IfcSystemFurnitureElement\" substitutionGroup=\"ifc:IfcFurnishingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystemFurnitureElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSystemFurnitureElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystemFurnitureElementType\" type=\"ifc:IfcSystemFurnitureElementType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystemFurnitureElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSystemFurnitureElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTShapeProfileDef\" type=\"ifc:IfcTShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTable\" type=\"ifc:IfcTable\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTable\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Rows\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableRow\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTableRow\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Columns\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableColumn\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTableColumn\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTableColumn\" type=\"ifc:IfcTableColumn\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTableColumn\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencePath\" type=\"ifc:IfcReference\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTableRow\" type=\"ifc:IfcTableRow\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTableRow\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RowCells\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"IsHeading\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTank\" type=\"ifc:IfcTank\" substitutionGroup=\"ifc:IfcFlowStorageDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTank\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTankType\" type=\"ifc:IfcTankType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTankType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTask\" type=\"ifc:IfcTask\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTask\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TaskTime\" type=\"ifc:IfcTaskTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WorkMethod\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsMilestone\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTaskTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskTime\" type=\"ifc:IfcTaskTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"DurationType\" type=\"ifc:IfcTaskDurationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleDuration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FreeFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TotalFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsCritical\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StatusTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualDuration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingTime\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Completion\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskTimeRecurring\" type=\"ifc:IfcTaskTimeRecurring\" substitutionGroup=\"ifc:IfcTaskTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskTimeRecurring\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTaskTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Recurrence\" type=\"ifc:IfcRecurrencePattern\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskType\" type=\"ifc:IfcTaskType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTaskTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WorkMethod\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTelecomAddress\" type=\"ifc:IfcTelecomAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTelecomAddress\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\n\t\t\t\t<xs:attribute name=\"TelephoneNumbers\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"FacsimileNumbers\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PagerNumber\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectronicMailAddresses\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"WWWHomePageURL\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MessagingIDs\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcURIReference\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendon\" type=\"ifc:IfcTendon\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendon\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionForce\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PreStress\" type=\"ifc:IfcPressureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrictionCoefficient\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AnchorageSlip\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MinCurvatureRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonAnchor\" type=\"ifc:IfcTendonAnchor\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonAnchor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonAnchorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonAnchorType\" type=\"ifc:IfcTendonAnchorType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonAnchorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonAnchorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonType\" type=\"ifc:IfcTendonType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SheathDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTessellatedFaceSet\" type=\"ifc:IfcTessellatedFaceSet\" abstract=\"true\" substitutionGroup=\"ifc:IfcTessellatedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTessellatedFaceSet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Coordinates\" type=\"ifc:IfcCartesianPointList3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"HasColours\" type=\"ifc:IfcIndexedColourMap\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"HasTextures\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIndexedTextureMap\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIndexedTextureMap\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTessellatedItem\" type=\"ifc:IfcTessellatedItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTessellatedItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextLiteral\" type=\"ifc:IfcTextLiteral\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextLiteral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Placement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Literal\" type=\"ifc:IfcPresentableText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Path\" type=\"ifc:IfcTextPath\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextLiteralWithExtent\" type=\"ifc:IfcTextLiteralWithExtent\" substitutionGroup=\"ifc:IfcTextLiteral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextLiteralWithExtent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextLiteral\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Extent\" type=\"ifc:IfcPlanarExtent\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"BoxAlignment\" type=\"ifc:IfcBoxAlignment\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyle\" type=\"ifc:IfcTextStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextCharacterAppearance\" type=\"ifc:IfcTextStyleForDefinedFont\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TextStyle\" type=\"ifc:IfcTextStyleTextModel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TextFontStyle\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTextFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelOrDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleFontModel\" type=\"ifc:IfcTextStyleFontModel\" substitutionGroup=\"ifc:IfcPreDefinedTextFont\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleFontModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedTextFont\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FontFamily\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextFontName-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTextFontName-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FontSize\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"FontStyle\" type=\"ifc:IfcFontStyle\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FontVariant\" type=\"ifc:IfcFontVariant\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FontWeight\" type=\"ifc:IfcFontWeight\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleForDefinedFont\" type=\"ifc:IfcTextStyleForDefinedFont\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleForDefinedFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Colour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BackgroundColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleTextModel\" type=\"ifc:IfcTextStyleTextModel\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleTextModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextIndent\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LetterSpacing\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WordSpacing\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LineHeight\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TextAlign\" type=\"ifc:IfcTextAlignment\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TextDecoration\" type=\"ifc:IfcTextDecoration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TextTransform\" type=\"ifc:IfcTextTransformation\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinate\" type=\"ifc:IfcTextureCoordinate\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinate\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Maps\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceTexture\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinateGenerator\" type=\"ifc:IfcTextureCoordinateGenerator\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinateGenerator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:attribute name=\"Mode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Parameter\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureMap\" type=\"ifc:IfcTextureMap\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Vertices\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextureVertex\" minOccurs=\"3\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTextureVertex\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MappedTo\" type=\"ifc:IfcFace\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureVertex\" type=\"ifc:IfcTextureVertex\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureVertex\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Coordinates\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureVertexList\" type=\"ifc:IfcTextureVertexList\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureVertexList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"TexCoordsList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimePeriod\" type=\"ifc:IfcTimePeriod\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimePeriod\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndTime\" type=\"ifc:IfcTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimeSeries\" type=\"ifc:IfcTimeSeries\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimeSeries\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeSeriesDataType\" type=\"ifc:IfcTimeSeriesDataTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedDataOrigin\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimeSeriesValue\" type=\"ifc:IfcTimeSeriesValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimeSeriesValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTopologicalRepresentationItem\" type=\"ifc:IfcTopologicalRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTopologicalRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTopologyRepresentation\" type=\"ifc:IfcTopologyRepresentation\" substitutionGroup=\"ifc:IfcShapeModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTopologyRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcToroidalSurface\" type=\"ifc:IfcToroidalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcToroidalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"MajorRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MinorRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransformer\" type=\"ifc:IfcTransformer\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransformer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransformerType\" type=\"ifc:IfcTransformerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransformerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportElement\" type=\"ifc:IfcTransportElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportElementType\" type=\"ifc:IfcTransportElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrapeziumProfileDef\" type=\"ifc:IfcTrapeziumProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrapeziumProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"BottomXDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopXDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopXOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTriangulatedFaceSet\" type=\"ifc:IfcTriangulatedFaceSet\" substitutionGroup=\"ifc:IfcTessellatedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTriangulatedFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedFaceSet\">\n\t\t\t\t<xs:attribute name=\"Normals\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Closed\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PnIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrimmedCurve\" type=\"ifc:IfcTrimmedCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrimmedCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Trim1\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Trim2\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SenseAgreement\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MasterRepresentation\" type=\"ifc:IfcTrimmingPreference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTubeBundle\" type=\"ifc:IfcTubeBundle\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTubeBundle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTubeBundleType\" type=\"ifc:IfcTubeBundleType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTubeBundleType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeObject\" type=\"ifc:IfcTypeObject\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeObject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertySets\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ApplicableOccurrence\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeProcess\" type=\"ifc:IfcTypeProcess\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeProcess\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProcessType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeProduct\" type=\"ifc:IfcTypeProduct\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeProduct\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepresentationMaps\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationMap\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeResource\" type=\"ifc:IfcTypeResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ResourceType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUShapeProfileDef\" type=\"ifc:IfcUShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitAssignment\" type=\"ifc:IfcUnitAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Units\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryControlElement\" type=\"ifc:IfcUnitaryControlElement\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryControlElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryControlElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryControlElementType\" type=\"ifc:IfcUnitaryControlElementType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryControlElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryControlElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryEquipment\" type=\"ifc:IfcUnitaryEquipment\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryEquipment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryEquipmentType\" type=\"ifc:IfcUnitaryEquipmentType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryEquipmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcValve\" type=\"ifc:IfcValve\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcValve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcValveType\" type=\"ifc:IfcValveType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcValveType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVector\" type=\"ifc:IfcVector\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVector\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Magnitude\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertex\" type=\"ifc:IfcVertex\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertex\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertexLoop\" type=\"ifc:IfcVertexLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertexLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LoopVertex\" type=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertexPoint\" type=\"ifc:IfcVertexPoint\" substitutionGroup=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertexPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcVertex\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VertexGeometry\" type=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationIsolator\" type=\"ifc:IfcVibrationIsolator\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationIsolator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationIsolatorType\" type=\"ifc:IfcVibrationIsolatorType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationIsolatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVirtualElement\" type=\"ifc:IfcVirtualElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVirtualElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVirtualGridIntersection\" type=\"ifc:IfcVirtualGridIntersection\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVirtualGridIntersection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IntersectingAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" minOccurs=\"2\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OffsetDistances\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVoidingFeature\" type=\"ifc:IfcVoidingFeature\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVoidingFeature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVoidingFeatureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWall\" type=\"ifc:IfcWall\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWall\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallElementedCase\" type=\"ifc:IfcWallElementedCase\" substitutionGroup=\"ifc:IfcWall\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallElementedCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWall\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallStandardCase\" type=\"ifc:IfcWallStandardCase\" substitutionGroup=\"ifc:IfcWall\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWall\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallType\" type=\"ifc:IfcWallType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWasteTerminal\" type=\"ifc:IfcWasteTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWasteTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWasteTerminalType\" type=\"ifc:IfcWasteTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWasteTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindow\" type=\"ifc:IfcWindow\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindow\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWindowTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PartitioningType\" type=\"ifc:IfcWindowTypePartitioningEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPartitioningType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowLiningProperties\" type=\"ifc:IfcWindowLiningProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowLiningProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MullionThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FirstTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FirstMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowPanelProperties\" type=\"ifc:IfcWindowPanelProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowPanelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcWindowPanelOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowStandardCase\" type=\"ifc:IfcWindowStandardCase\" substitutionGroup=\"ifc:IfcWindow\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWindow\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowStyle\" type=\"ifc:IfcWindowStyle\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ConstructionType\" type=\"ifc:IfcWindowStyleConstructionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcWindowStyleOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Sizeable\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowType\" type=\"ifc:IfcWindowType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWindowTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PartitioningType\" type=\"ifc:IfcWindowTypePartitioningEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPartitioningType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkCalendar\" type=\"ifc:IfcWorkCalendar\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkCalendar\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WorkingTimes\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcWorkTime\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcWorkTime\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ExceptionTimes\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcWorkTime\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcWorkTime\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkCalendarTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkControl\" type=\"ifc:IfcWorkControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkControl\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Creators\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPerson\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CreationDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Duration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TotalFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FinishTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkPlan\" type=\"ifc:IfcWorkPlan\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkPlan\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkPlanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkSchedule\" type=\"ifc:IfcWorkSchedule\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkScheduleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkTime\" type=\"ifc:IfcWorkTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RecurrencePattern\" type=\"ifc:IfcRecurrencePattern\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Start\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Finish\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcZShapeProfileDef\" type=\"ifc:IfcZShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcZShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcZone\" type=\"ifc:IfcZone\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcZone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<!-- group declarations (for SELECT data type definitions) -->\n\t<xs:group name=\"IfcActorSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcAppliedValueSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcAxis2Placement\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcBendingParameterSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcBooleanOperand\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHalfSpaceSolid\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTessellatedFaceSet\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcClassificationReferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcClassificationSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcColour\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcColourOrFactor\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCoordinateReferenceSystemSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCoordinateReferenceSystem\"/>\n\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationContext\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCsgSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveFontOrScaledCurveFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontAndScaling\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveOnSurface\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCompositeCurveOnSurface\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPcurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveOrEdgeCurve\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEdgeCurve\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveStyleFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDefinitionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDerivedMeasureValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDocumentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcFillStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedHatchStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleHatching\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTiles\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcGeometricSetSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcGridPlacementDirectionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcHatchLineDistanceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLayeredItem\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLibrarySelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLightDistributionDataSourceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLightIntensityDistribution\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMaterialSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialUsageDefinition\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMeasureValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMetricValueSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTable\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfRotationalSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfTranslationalSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcObjectReferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAddress\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTable\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPointOrVertexPoint\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVertexPoint\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPresentationStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNullStyle-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTextStyle\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProcessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProcess\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeProcess\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProductRepresentationSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProductDefinitionShape\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProductSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProduct\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeProduct\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPropertySetDefinitionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinitionSet-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcResourceObjectSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcActorRole\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\n\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcConversionBasedUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertyAbstraction\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcResourceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcResource\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeResource\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcRotationalStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSegmentIndexSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcArcIndex-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLineIndex-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcShell\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOpenShell\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSimpleValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSizeSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSolidOrShell\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSpaceBoundarySelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternalSpatialElement\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpace\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSpecularHighlightSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcSpecularExponent-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecularRoughness-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcStructuralActivityAssignmentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\n\t\t\t<xs:element ref=\"ifc:IfcStructuralItem\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcStyleAssignmentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPresentationStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPresentationStyleAssignment\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSurfaceOrFaceSurface\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcFaceBasedSurfaceModel\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFaceSurface\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSurfaceStyleElementSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSurfaceStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleLighting\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleRefraction\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleShading\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleWithTextures\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTextFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedTextFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedTextFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTimeOrRatioSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTranslationalStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTrimmingSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcUnit\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDerivedUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcVectorOrDirection\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcWarpingStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<!-- enumeration type declarations (for ENUMERATION data type definitions) -->\n\t<xs:simpleType name=\"IfcActionRequestTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"email\"/>\n\t\t\t<xs:enumeration value=\"fax\"/>\n\t\t\t<xs:enumeration value=\"phone\"/>\n\t\t\t<xs:enumeration value=\"post\"/>\n\t\t\t<xs:enumeration value=\"verbal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActionSourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dead_load_g\"/>\n\t\t\t<xs:enumeration value=\"completion_g1\"/>\n\t\t\t<xs:enumeration value=\"live_load_q\"/>\n\t\t\t<xs:enumeration value=\"snow_s\"/>\n\t\t\t<xs:enumeration value=\"wind_w\"/>\n\t\t\t<xs:enumeration value=\"prestressing_p\"/>\n\t\t\t<xs:enumeration value=\"settlement_u\"/>\n\t\t\t<xs:enumeration value=\"temperature_t\"/>\n\t\t\t<xs:enumeration value=\"earthquake_e\"/>\n\t\t\t<xs:enumeration value=\"fire\"/>\n\t\t\t<xs:enumeration value=\"impulse\"/>\n\t\t\t<xs:enumeration value=\"impact\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"erection\"/>\n\t\t\t<xs:enumeration value=\"propping\"/>\n\t\t\t<xs:enumeration value=\"system_imperfection\"/>\n\t\t\t<xs:enumeration value=\"shrinkage\"/>\n\t\t\t<xs:enumeration value=\"creep\"/>\n\t\t\t<xs:enumeration value=\"lack_of_fit\"/>\n\t\t\t<xs:enumeration value=\"buoyancy\"/>\n\t\t\t<xs:enumeration value=\"ice\"/>\n\t\t\t<xs:enumeration value=\"current\"/>\n\t\t\t<xs:enumeration value=\"wave\"/>\n\t\t\t<xs:enumeration value=\"rain\"/>\n\t\t\t<xs:enumeration value=\"brakes\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"permanent_g\"/>\n\t\t\t<xs:enumeration value=\"variable_q\"/>\n\t\t\t<xs:enumeration value=\"extraordinary_a\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActuatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electricactuator\"/>\n\t\t\t<xs:enumeration value=\"handoperatedactuator\"/>\n\t\t\t<xs:enumeration value=\"hydraulicactuator\"/>\n\t\t\t<xs:enumeration value=\"pneumaticactuator\"/>\n\t\t\t<xs:enumeration value=\"thermostaticactuator\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAddressTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"office\"/>\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"home\"/>\n\t\t\t<xs:enumeration value=\"distributionpoint\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirTerminalBoxTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"constantflow\"/>\n\t\t\t<xs:enumeration value=\"variableflowpressuredependant\"/>\n\t\t\t<xs:enumeration value=\"variableflowpressureindependant\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"diffuser\"/>\n\t\t\t<xs:enumeration value=\"grille\"/>\n\t\t\t<xs:enumeration value=\"louvre\"/>\n\t\t\t<xs:enumeration value=\"register\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirToAirHeatRecoveryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fixedplatecounterflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"fixedplatecrossflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"fixedplateparallelflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"rotarywheel\"/>\n\t\t\t<xs:enumeration value=\"runaroundcoilloop\"/>\n\t\t\t<xs:enumeration value=\"heatpipe\"/>\n\t\t\t<xs:enumeration value=\"twintowerenthalpyrecoveryloops\"/>\n\t\t\t<xs:enumeration value=\"thermosiphonsealedtubeheatexchangers\"/>\n\t\t\t<xs:enumeration value=\"thermosiphoncoiltypeheatexchangers\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAlarmTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bell\"/>\n\t\t\t<xs:enumeration value=\"breakglassbutton\"/>\n\t\t\t<xs:enumeration value=\"light\"/>\n\t\t\t<xs:enumeration value=\"manualpullbox\"/>\n\t\t\t<xs:enumeration value=\"siren\"/>\n\t\t\t<xs:enumeration value=\"whistle\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAnalysisModelTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"in_plane_loading_2d\"/>\n\t\t\t<xs:enumeration value=\"out_plane_loading_2d\"/>\n\t\t\t<xs:enumeration value=\"loading_3d\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAnalysisTheoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"first_order_theory\"/>\n\t\t\t<xs:enumeration value=\"second_order_theory\"/>\n\t\t\t<xs:enumeration value=\"third_order_theory\"/>\n\t\t\t<xs:enumeration value=\"full_nonlinear_theory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcArithmeticOperatorEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"add\"/>\n\t\t\t<xs:enumeration value=\"divide\"/>\n\t\t\t<xs:enumeration value=\"multiply\"/>\n\t\t\t<xs:enumeration value=\"subtract\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAssemblyPlaceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"factory\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAudioVisualApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"amplifier\"/>\n\t\t\t<xs:enumeration value=\"camera\"/>\n\t\t\t<xs:enumeration value=\"display\"/>\n\t\t\t<xs:enumeration value=\"microphone\"/>\n\t\t\t<xs:enumeration value=\"player\"/>\n\t\t\t<xs:enumeration value=\"projector\"/>\n\t\t\t<xs:enumeration value=\"receiver\"/>\n\t\t\t<xs:enumeration value=\"speaker\"/>\n\t\t\t<xs:enumeration value=\"switcher\"/>\n\t\t\t<xs:enumeration value=\"telephone\"/>\n\t\t\t<xs:enumeration value=\"tuner\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBSplineCurveForm\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"polyline_form\"/>\n\t\t\t<xs:enumeration value=\"circular_arc\"/>\n\t\t\t<xs:enumeration value=\"elliptic_arc\"/>\n\t\t\t<xs:enumeration value=\"parabolic_arc\"/>\n\t\t\t<xs:enumeration value=\"hyperbolic_arc\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBSplineSurfaceForm\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plane_surf\"/>\n\t\t\t<xs:enumeration value=\"cylindrical_surf\"/>\n\t\t\t<xs:enumeration value=\"conical_surf\"/>\n\t\t\t<xs:enumeration value=\"spherical_surf\"/>\n\t\t\t<xs:enumeration value=\"toroidal_surf\"/>\n\t\t\t<xs:enumeration value=\"surf_of_revolution\"/>\n\t\t\t<xs:enumeration value=\"ruled_surf\"/>\n\t\t\t<xs:enumeration value=\"generalised_cone\"/>\n\t\t\t<xs:enumeration value=\"quadric_surf\"/>\n\t\t\t<xs:enumeration value=\"surf_of_linear_extrusion\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBeamTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beam\"/>\n\t\t\t<xs:enumeration value=\"joist\"/>\n\t\t\t<xs:enumeration value=\"hollowcore\"/>\n\t\t\t<xs:enumeration value=\"lintel\"/>\n\t\t\t<xs:enumeration value=\"spandrel\"/>\n\t\t\t<xs:enumeration value=\"t_beam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBenchmarkEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"greaterthan\"/>\n\t\t\t<xs:enumeration value=\"greaterthanorequalto\"/>\n\t\t\t<xs:enumeration value=\"lessthan\"/>\n\t\t\t<xs:enumeration value=\"lessthanorequalto\"/>\n\t\t\t<xs:enumeration value=\"equalto\"/>\n\t\t\t<xs:enumeration value=\"notequalto\"/>\n\t\t\t<xs:enumeration value=\"includes\"/>\n\t\t\t<xs:enumeration value=\"notincludes\"/>\n\t\t\t<xs:enumeration value=\"includedin\"/>\n\t\t\t<xs:enumeration value=\"notincludedin\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBoilerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"water\"/>\n\t\t\t<xs:enumeration value=\"steam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBooleanOperator\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"union\"/>\n\t\t\t<xs:enumeration value=\"intersection\"/>\n\t\t\t<xs:enumeration value=\"difference\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingElementPartTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"insulation\"/>\n\t\t\t<xs:enumeration value=\"precastpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingElementProxyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"complex\"/>\n\t\t\t<xs:enumeration value=\"element\"/>\n\t\t\t<xs:enumeration value=\"partial\"/>\n\t\t\t<xs:enumeration value=\"provisionforvoid\"/>\n\t\t\t<xs:enumeration value=\"provisionforspace\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingSystemTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fenestration\"/>\n\t\t\t<xs:enumeration value=\"foundation\"/>\n\t\t\t<xs:enumeration value=\"loadbearing\"/>\n\t\t\t<xs:enumeration value=\"outershell\"/>\n\t\t\t<xs:enumeration value=\"shading\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBurnerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableCarrierFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"cross\"/>\n\t\t\t<xs:enumeration value=\"reducer\"/>\n\t\t\t<xs:enumeration value=\"tee\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableCarrierSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cableladdersegment\"/>\n\t\t\t<xs:enumeration value=\"cabletraysegment\"/>\n\t\t\t<xs:enumeration value=\"cabletrunkingsegment\"/>\n\t\t\t<xs:enumeration value=\"conduitsegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"busbarsegment\"/>\n\t\t\t<xs:enumeration value=\"cablesegment\"/>\n\t\t\t<xs:enumeration value=\"conductorsegment\"/>\n\t\t\t<xs:enumeration value=\"coresegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChangeActionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"nochange\"/>\n\t\t\t<xs:enumeration value=\"modified\"/>\n\t\t\t<xs:enumeration value=\"added\"/>\n\t\t\t<xs:enumeration value=\"deleted\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChillerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aircooled\"/>\n\t\t\t<xs:enumeration value=\"watercooled\"/>\n\t\t\t<xs:enumeration value=\"heatrecovery\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChimneyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoilTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dxcoolingcoil\"/>\n\t\t\t<xs:enumeration value=\"electricheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"gasheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"hydroniccoil\"/>\n\t\t\t<xs:enumeration value=\"steamheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"watercoolingcoil\"/>\n\t\t\t<xs:enumeration value=\"waterheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcColumnTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"column\"/>\n\t\t\t<xs:enumeration value=\"pilaster\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCommunicationsApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"antenna\"/>\n\t\t\t<xs:enumeration value=\"computer\"/>\n\t\t\t<xs:enumeration value=\"fax\"/>\n\t\t\t<xs:enumeration value=\"gateway\"/>\n\t\t\t<xs:enumeration value=\"modem\"/>\n\t\t\t<xs:enumeration value=\"networkappliance\"/>\n\t\t\t<xs:enumeration value=\"networkbridge\"/>\n\t\t\t<xs:enumeration value=\"networkhub\"/>\n\t\t\t<xs:enumeration value=\"printer\"/>\n\t\t\t<xs:enumeration value=\"repeater\"/>\n\t\t\t<xs:enumeration value=\"router\"/>\n\t\t\t<xs:enumeration value=\"scanner\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcComplexPropertyTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"p_complex\"/>\n\t\t\t<xs:enumeration value=\"q_complex\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCompressorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dynamic\"/>\n\t\t\t<xs:enumeration value=\"reciprocating\"/>\n\t\t\t<xs:enumeration value=\"rotary\"/>\n\t\t\t<xs:enumeration value=\"scroll\"/>\n\t\t\t<xs:enumeration value=\"trochoidal\"/>\n\t\t\t<xs:enumeration value=\"singlestage\"/>\n\t\t\t<xs:enumeration value=\"booster\"/>\n\t\t\t<xs:enumeration value=\"opentype\"/>\n\t\t\t<xs:enumeration value=\"hermetic\"/>\n\t\t\t<xs:enumeration value=\"semihermetic\"/>\n\t\t\t<xs:enumeration value=\"weldedshellhermetic\"/>\n\t\t\t<xs:enumeration value=\"rollingpiston\"/>\n\t\t\t<xs:enumeration value=\"rotaryvane\"/>\n\t\t\t<xs:enumeration value=\"singlescrew\"/>\n\t\t\t<xs:enumeration value=\"twinscrew\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCondenserTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aircooled\"/>\n\t\t\t<xs:enumeration value=\"evaporativecooled\"/>\n\t\t\t<xs:enumeration value=\"watercooled\"/>\n\t\t\t<xs:enumeration value=\"watercooledbrazedplate\"/>\n\t\t\t<xs:enumeration value=\"watercooledshellcoil\"/>\n\t\t\t<xs:enumeration value=\"watercooledshelltube\"/>\n\t\t\t<xs:enumeration value=\"watercooledtubeintube\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConnectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"atpath\"/>\n\t\t\t<xs:enumeration value=\"atstart\"/>\n\t\t\t<xs:enumeration value=\"atend\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstraintEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"hard\"/>\n\t\t\t<xs:enumeration value=\"soft\"/>\n\t\t\t<xs:enumeration value=\"advisory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionEquipmentResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"demolishing\"/>\n\t\t\t<xs:enumeration value=\"earthmoving\"/>\n\t\t\t<xs:enumeration value=\"erecting\"/>\n\t\t\t<xs:enumeration value=\"heating\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"paving\"/>\n\t\t\t<xs:enumeration value=\"pumping\"/>\n\t\t\t<xs:enumeration value=\"transporting\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionMaterialResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aggregates\"/>\n\t\t\t<xs:enumeration value=\"concrete\"/>\n\t\t\t<xs:enumeration value=\"drywall\"/>\n\t\t\t<xs:enumeration value=\"fuel\"/>\n\t\t\t<xs:enumeration value=\"gypsum\"/>\n\t\t\t<xs:enumeration value=\"masonry\"/>\n\t\t\t<xs:enumeration value=\"metal\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionProductResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assembly\"/>\n\t\t\t<xs:enumeration value=\"formwork\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcControllerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floating\"/>\n\t\t\t<xs:enumeration value=\"programmable\"/>\n\t\t\t<xs:enumeration value=\"proportional\"/>\n\t\t\t<xs:enumeration value=\"multiposition\"/>\n\t\t\t<xs:enumeration value=\"twoposition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCooledBeamTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"active\"/>\n\t\t\t<xs:enumeration value=\"passive\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoolingTowerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"naturaldraft\"/>\n\t\t\t<xs:enumeration value=\"mechanicalinduceddraft\"/>\n\t\t\t<xs:enumeration value=\"mechanicalforceddraft\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCostItemTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCostScheduleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"budget\"/>\n\t\t\t<xs:enumeration value=\"costplan\"/>\n\t\t\t<xs:enumeration value=\"estimate\"/>\n\t\t\t<xs:enumeration value=\"tender\"/>\n\t\t\t<xs:enumeration value=\"pricedbillofquantities\"/>\n\t\t\t<xs:enumeration value=\"unpricedbillofquantities\"/>\n\t\t\t<xs:enumeration value=\"scheduleofrates\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoveringTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ceiling\"/>\n\t\t\t<xs:enumeration value=\"flooring\"/>\n\t\t\t<xs:enumeration value=\"cladding\"/>\n\t\t\t<xs:enumeration value=\"roofing\"/>\n\t\t\t<xs:enumeration value=\"molding\"/>\n\t\t\t<xs:enumeration value=\"skirtingboard\"/>\n\t\t\t<xs:enumeration value=\"insulation\"/>\n\t\t\t<xs:enumeration value=\"membrane\"/>\n\t\t\t<xs:enumeration value=\"sleeving\"/>\n\t\t\t<xs:enumeration value=\"wrapping\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCrewResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"office\"/>\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurtainWallTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurveInterpolationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"linear\"/>\n\t\t\t<xs:enumeration value=\"log_linear\"/>\n\t\t\t<xs:enumeration value=\"log_log\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDamperTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"backdraftdamper\"/>\n\t\t\t<xs:enumeration value=\"balancingdamper\"/>\n\t\t\t<xs:enumeration value=\"blastdamper\"/>\n\t\t\t<xs:enumeration value=\"controldamper\"/>\n\t\t\t<xs:enumeration value=\"firedamper\"/>\n\t\t\t<xs:enumeration value=\"firesmokedamper\"/>\n\t\t\t<xs:enumeration value=\"fumehoodexhaust\"/>\n\t\t\t<xs:enumeration value=\"gravitydamper\"/>\n\t\t\t<xs:enumeration value=\"gravityreliefdamper\"/>\n\t\t\t<xs:enumeration value=\"reliefdamper\"/>\n\t\t\t<xs:enumeration value=\"smokedamper\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDataOriginEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"measured\"/>\n\t\t\t<xs:enumeration value=\"predicted\"/>\n\t\t\t<xs:enumeration value=\"simulated\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDerivedUnitEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"angularvelocityunit\"/>\n\t\t\t<xs:enumeration value=\"areadensityunit\"/>\n\t\t\t<xs:enumeration value=\"compoundplaneangleunit\"/>\n\t\t\t<xs:enumeration value=\"dynamicviscosityunit\"/>\n\t\t\t<xs:enumeration value=\"heatfluxdensityunit\"/>\n\t\t\t<xs:enumeration value=\"integercountrateunit\"/>\n\t\t\t<xs:enumeration value=\"isothermalmoisturecapacityunit\"/>\n\t\t\t<xs:enumeration value=\"kinematicviscosityunit\"/>\n\t\t\t<xs:enumeration value=\"linearvelocityunit\"/>\n\t\t\t<xs:enumeration value=\"massdensityunit\"/>\n\t\t\t<xs:enumeration value=\"massflowrateunit\"/>\n\t\t\t<xs:enumeration value=\"moisturediffusivityunit\"/>\n\t\t\t<xs:enumeration value=\"molecularweightunit\"/>\n\t\t\t<xs:enumeration value=\"specificheatcapacityunit\"/>\n\t\t\t<xs:enumeration value=\"thermaladmittanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermalconductanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermalresistanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermaltransmittanceunit\"/>\n\t\t\t<xs:enumeration value=\"vaporpermeabilityunit\"/>\n\t\t\t<xs:enumeration value=\"volumetricflowrateunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalfrequencyunit\"/>\n\t\t\t<xs:enumeration value=\"torqueunit\"/>\n\t\t\t<xs:enumeration value=\"momentofinertiaunit\"/>\n\t\t\t<xs:enumeration value=\"linearmomentunit\"/>\n\t\t\t<xs:enumeration value=\"linearforceunit\"/>\n\t\t\t<xs:enumeration value=\"planarforceunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofelasticityunit\"/>\n\t\t\t<xs:enumeration value=\"shearmodulusunit\"/>\n\t\t\t<xs:enumeration value=\"linearstiffnessunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalstiffnessunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"accelerationunit\"/>\n\t\t\t<xs:enumeration value=\"curvatureunit\"/>\n\t\t\t<xs:enumeration value=\"heatingvalueunit\"/>\n\t\t\t<xs:enumeration value=\"ionconcentrationunit\"/>\n\t\t\t<xs:enumeration value=\"luminousintensitydistributionunit\"/>\n\t\t\t<xs:enumeration value=\"massperlengthunit\"/>\n\t\t\t<xs:enumeration value=\"modulusoflinearsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofrotationalsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"phunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalmassunit\"/>\n\t\t\t<xs:enumeration value=\"sectionareaintegralunit\"/>\n\t\t\t<xs:enumeration value=\"sectionmodulusunit\"/>\n\t\t\t<xs:enumeration value=\"soundpowerlevelunit\"/>\n\t\t\t<xs:enumeration value=\"soundpowerunit\"/>\n\t\t\t<xs:enumeration value=\"soundpressurelevelunit\"/>\n\t\t\t<xs:enumeration value=\"soundpressureunit\"/>\n\t\t\t<xs:enumeration value=\"temperaturegradientunit\"/>\n\t\t\t<xs:enumeration value=\"temperaturerateofchangeunit\"/>\n\t\t\t<xs:enumeration value=\"thermalexpansioncoefficientunit\"/>\n\t\t\t<xs:enumeration value=\"warpingconstantunit\"/>\n\t\t\t<xs:enumeration value=\"warpingmomentunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDirectionSenseEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"positive\"/>\n\t\t\t<xs:enumeration value=\"negative\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDiscreteAccessoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchorplate\"/>\n\t\t\t<xs:enumeration value=\"bracket\"/>\n\t\t\t<xs:enumeration value=\"shoe\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionChamberElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"formedduct\"/>\n\t\t\t<xs:enumeration value=\"inspectionchamber\"/>\n\t\t\t<xs:enumeration value=\"inspectionpit\"/>\n\t\t\t<xs:enumeration value=\"manhole\"/>\n\t\t\t<xs:enumeration value=\"meterchamber\"/>\n\t\t\t<xs:enumeration value=\"sump\"/>\n\t\t\t<xs:enumeration value=\"trench\"/>\n\t\t\t<xs:enumeration value=\"valvechamber\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionPortTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cable\"/>\n\t\t\t<xs:enumeration value=\"cablecarrier\"/>\n\t\t\t<xs:enumeration value=\"duct\"/>\n\t\t\t<xs:enumeration value=\"pipe\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionSystemEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airconditioning\"/>\n\t\t\t<xs:enumeration value=\"audiovisual\"/>\n\t\t\t<xs:enumeration value=\"chemical\"/>\n\t\t\t<xs:enumeration value=\"chilledwater\"/>\n\t\t\t<xs:enumeration value=\"communication\"/>\n\t\t\t<xs:enumeration value=\"compressedair\"/>\n\t\t\t<xs:enumeration value=\"condenserwater\"/>\n\t\t\t<xs:enumeration value=\"control\"/>\n\t\t\t<xs:enumeration value=\"conveying\"/>\n\t\t\t<xs:enumeration value=\"data\"/>\n\t\t\t<xs:enumeration value=\"disposal\"/>\n\t\t\t<xs:enumeration value=\"domesticcoldwater\"/>\n\t\t\t<xs:enumeration value=\"domestichotwater\"/>\n\t\t\t<xs:enumeration value=\"drainage\"/>\n\t\t\t<xs:enumeration value=\"earthing\"/>\n\t\t\t<xs:enumeration value=\"electrical\"/>\n\t\t\t<xs:enumeration value=\"electroacoustic\"/>\n\t\t\t<xs:enumeration value=\"exhaust\"/>\n\t\t\t<xs:enumeration value=\"fireprotection\"/>\n\t\t\t<xs:enumeration value=\"fuel\"/>\n\t\t\t<xs:enumeration value=\"gas\"/>\n\t\t\t<xs:enumeration value=\"hazardous\"/>\n\t\t\t<xs:enumeration value=\"heating\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"lightningprotection\"/>\n\t\t\t<xs:enumeration value=\"municipalsolidwaste\"/>\n\t\t\t<xs:enumeration value=\"oil\"/>\n\t\t\t<xs:enumeration value=\"operational\"/>\n\t\t\t<xs:enumeration value=\"powergeneration\"/>\n\t\t\t<xs:enumeration value=\"rainwater\"/>\n\t\t\t<xs:enumeration value=\"refrigeration\"/>\n\t\t\t<xs:enumeration value=\"security\"/>\n\t\t\t<xs:enumeration value=\"sewage\"/>\n\t\t\t<xs:enumeration value=\"signal\"/>\n\t\t\t<xs:enumeration value=\"stormwater\"/>\n\t\t\t<xs:enumeration value=\"telephone\"/>\n\t\t\t<xs:enumeration value=\"tv\"/>\n\t\t\t<xs:enumeration value=\"vacuum\"/>\n\t\t\t<xs:enumeration value=\"vent\"/>\n\t\t\t<xs:enumeration value=\"ventilation\"/>\n\t\t\t<xs:enumeration value=\"wastewater\"/>\n\t\t\t<xs:enumeration value=\"watersupply\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDocumentConfidentialityEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"public\"/>\n\t\t\t<xs:enumeration value=\"restricted\"/>\n\t\t\t<xs:enumeration value=\"confidential\"/>\n\t\t\t<xs:enumeration value=\"personal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDocumentStatusEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"draft\"/>\n\t\t\t<xs:enumeration value=\"finaldraft\"/>\n\t\t\t<xs:enumeration value=\"final\"/>\n\t\t\t<xs:enumeration value=\"revision\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorPanelOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"swinging\"/>\n\t\t\t<xs:enumeration value=\"double_acting\"/>\n\t\t\t<xs:enumeration value=\"sliding\"/>\n\t\t\t<xs:enumeration value=\"folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"fixedpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorPanelPositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"middle\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorStyleConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aluminium\"/>\n\t\t\t<xs:enumeration value=\"high_grade_steel\"/>\n\t\t\t<xs:enumeration value=\"steel\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"aluminium_wood\"/>\n\t\t\t<xs:enumeration value=\"aluminium_plastic\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorStyleOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_swing_left\"/>\n\t\t\t<xs:enumeration value=\"single_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_left\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_right\"/>\n\t\t\t<xs:enumeration value=\"double_swing_left\"/>\n\t\t\t<xs:enumeration value=\"double_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_double_swing\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_left\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_sliding\"/>\n\t\t\t<xs:enumeration value=\"folding_to_left\"/>\n\t\t\t<xs:enumeration value=\"folding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"door\"/>\n\t\t\t<xs:enumeration value=\"gate\"/>\n\t\t\t<xs:enumeration value=\"trapdoor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorTypeOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_swing_left\"/>\n\t\t\t<xs:enumeration value=\"single_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_left\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_right\"/>\n\t\t\t<xs:enumeration value=\"double_swing_left\"/>\n\t\t\t<xs:enumeration value=\"double_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_double_swing\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_left\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_sliding\"/>\n\t\t\t<xs:enumeration value=\"folding_to_left\"/>\n\t\t\t<xs:enumeration value=\"folding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"swing_fixed_left\"/>\n\t\t\t<xs:enumeration value=\"swing_fixed_right\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"obstruction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctSilencerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flatoval\"/>\n\t\t\t<xs:enumeration value=\"rectangular\"/>\n\t\t\t<xs:enumeration value=\"round\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dishwasher\"/>\n\t\t\t<xs:enumeration value=\"electriccooker\"/>\n\t\t\t<xs:enumeration value=\"freestandingelectricheater\"/>\n\t\t\t<xs:enumeration value=\"freestandingfan\"/>\n\t\t\t<xs:enumeration value=\"freestandingwaterheater\"/>\n\t\t\t<xs:enumeration value=\"freestandingwatercooler\"/>\n\t\t\t<xs:enumeration value=\"freezer\"/>\n\t\t\t<xs:enumeration value=\"fridge_freezer\"/>\n\t\t\t<xs:enumeration value=\"handdryer\"/>\n\t\t\t<xs:enumeration value=\"kitchenmachine\"/>\n\t\t\t<xs:enumeration value=\"microwave\"/>\n\t\t\t<xs:enumeration value=\"photocopier\"/>\n\t\t\t<xs:enumeration value=\"refrigerator\"/>\n\t\t\t<xs:enumeration value=\"tumbledryer\"/>\n\t\t\t<xs:enumeration value=\"vendingmachine\"/>\n\t\t\t<xs:enumeration value=\"washingmachine\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricDistributionBoardTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"consumerunit\"/>\n\t\t\t<xs:enumeration value=\"distributionboard\"/>\n\t\t\t<xs:enumeration value=\"motorcontrolcentre\"/>\n\t\t\t<xs:enumeration value=\"switchboard\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricFlowStorageDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"battery\"/>\n\t\t\t<xs:enumeration value=\"capacitorbank\"/>\n\t\t\t<xs:enumeration value=\"harmonicfilter\"/>\n\t\t\t<xs:enumeration value=\"inductorbank\"/>\n\t\t\t<xs:enumeration value=\"ups\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricGeneratorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"chp\"/>\n\t\t\t<xs:enumeration value=\"enginegenerator\"/>\n\t\t\t<xs:enumeration value=\"standalone\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricMotorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dc\"/>\n\t\t\t<xs:enumeration value=\"induction\"/>\n\t\t\t<xs:enumeration value=\"polyphase\"/>\n\t\t\t<xs:enumeration value=\"reluctancesynchronous\"/>\n\t\t\t<xs:enumeration value=\"synchronous\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricTimeControlTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"timeclock\"/>\n\t\t\t<xs:enumeration value=\"timedelay\"/>\n\t\t\t<xs:enumeration value=\"relay\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElementAssemblyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"accessory_assembly\"/>\n\t\t\t<xs:enumeration value=\"arch\"/>\n\t\t\t<xs:enumeration value=\"beam_grid\"/>\n\t\t\t<xs:enumeration value=\"braced_frame\"/>\n\t\t\t<xs:enumeration value=\"girder\"/>\n\t\t\t<xs:enumeration value=\"reinforcement_unit\"/>\n\t\t\t<xs:enumeration value=\"rigid_frame\"/>\n\t\t\t<xs:enumeration value=\"slab_field\"/>\n\t\t\t<xs:enumeration value=\"truss\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElementCompositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"complex\"/>\n\t\t\t<xs:enumeration value=\"element\"/>\n\t\t\t<xs:enumeration value=\"partial\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEngineTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"externalcombustion\"/>\n\t\t\t<xs:enumeration value=\"internalcombustion\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEvaporativeCoolerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directevaporativerandommediaaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativerigidmediaaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativeslingerspackagedaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativepackagedrotaryaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativeairwasher\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativepackageaircooler\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativewetcoil\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativecoolingtowerorcoilcooler\"/>\n\t\t\t<xs:enumeration value=\"indirectdirectcombination\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEvaporatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directexpansion\"/>\n\t\t\t<xs:enumeration value=\"directexpansionshellandtube\"/>\n\t\t\t<xs:enumeration value=\"directexpansiontubeintube\"/>\n\t\t\t<xs:enumeration value=\"directexpansionbrazedplate\"/>\n\t\t\t<xs:enumeration value=\"floodedshellandtube\"/>\n\t\t\t<xs:enumeration value=\"shellandcoil\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEventTriggerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"eventrule\"/>\n\t\t\t<xs:enumeration value=\"eventmessage\"/>\n\t\t\t<xs:enumeration value=\"eventtime\"/>\n\t\t\t<xs:enumeration value=\"eventcomplex\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEventTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"startevent\"/>\n\t\t\t<xs:enumeration value=\"endevent\"/>\n\t\t\t<xs:enumeration value=\"intermediateevent\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcExternalSpatialElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"external_earth\"/>\n\t\t\t<xs:enumeration value=\"external_water\"/>\n\t\t\t<xs:enumeration value=\"external_fire\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFanTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"centrifugalforwardcurved\"/>\n\t\t\t<xs:enumeration value=\"centrifugalradial\"/>\n\t\t\t<xs:enumeration value=\"centrifugalbackwardinclinedcurved\"/>\n\t\t\t<xs:enumeration value=\"centrifugalairfoil\"/>\n\t\t\t<xs:enumeration value=\"tubeaxial\"/>\n\t\t\t<xs:enumeration value=\"vaneaxial\"/>\n\t\t\t<xs:enumeration value=\"propelloraxial\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFastenerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"glue\"/>\n\t\t\t<xs:enumeration value=\"mortar\"/>\n\t\t\t<xs:enumeration value=\"weld\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFilterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airparticlefilter\"/>\n\t\t\t<xs:enumeration value=\"compressedairfilter\"/>\n\t\t\t<xs:enumeration value=\"odorfilter\"/>\n\t\t\t<xs:enumeration value=\"oilfilter\"/>\n\t\t\t<xs:enumeration value=\"strainer\"/>\n\t\t\t<xs:enumeration value=\"waterfilter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFireSuppressionTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"breechinginlet\"/>\n\t\t\t<xs:enumeration value=\"firehydrant\"/>\n\t\t\t<xs:enumeration value=\"hosereel\"/>\n\t\t\t<xs:enumeration value=\"sprinkler\"/>\n\t\t\t<xs:enumeration value=\"sprinklerdeflector\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"source\"/>\n\t\t\t<xs:enumeration value=\"sink\"/>\n\t\t\t<xs:enumeration value=\"sourceandsink\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowInstrumentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pressuregauge\"/>\n\t\t\t<xs:enumeration value=\"thermometer\"/>\n\t\t\t<xs:enumeration value=\"ammeter\"/>\n\t\t\t<xs:enumeration value=\"frequencymeter\"/>\n\t\t\t<xs:enumeration value=\"powerfactormeter\"/>\n\t\t\t<xs:enumeration value=\"phaseanglemeter\"/>\n\t\t\t<xs:enumeration value=\"voltmeter_peak\"/>\n\t\t\t<xs:enumeration value=\"voltmeter_rms\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowMeterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"energymeter\"/>\n\t\t\t<xs:enumeration value=\"gasmeter\"/>\n\t\t\t<xs:enumeration value=\"oilmeter\"/>\n\t\t\t<xs:enumeration value=\"watermeter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFootingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"caisson_foundation\"/>\n\t\t\t<xs:enumeration value=\"footing_beam\"/>\n\t\t\t<xs:enumeration value=\"pad_footing\"/>\n\t\t\t<xs:enumeration value=\"pile_cap\"/>\n\t\t\t<xs:enumeration value=\"strip_footing\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFurnitureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"chair\"/>\n\t\t\t<xs:enumeration value=\"table\"/>\n\t\t\t<xs:enumeration value=\"desk\"/>\n\t\t\t<xs:enumeration value=\"bed\"/>\n\t\t\t<xs:enumeration value=\"filecabinet\"/>\n\t\t\t<xs:enumeration value=\"shelf\"/>\n\t\t\t<xs:enumeration value=\"sofa\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGeographicElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"terrain\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGeometricProjectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"graph_view\"/>\n\t\t\t<xs:enumeration value=\"sketch_view\"/>\n\t\t\t<xs:enumeration value=\"model_view\"/>\n\t\t\t<xs:enumeration value=\"plan_view\"/>\n\t\t\t<xs:enumeration value=\"reflected_plan_view\"/>\n\t\t\t<xs:enumeration value=\"section_view\"/>\n\t\t\t<xs:enumeration value=\"elevation_view\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGlobalOrLocalEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"global_coords\"/>\n\t\t\t<xs:enumeration value=\"local_coords\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGridTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rectangular\"/>\n\t\t\t<xs:enumeration value=\"radial\"/>\n\t\t\t<xs:enumeration value=\"triangular\"/>\n\t\t\t<xs:enumeration value=\"irregular\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatExchangerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plate\"/>\n\t\t\t<xs:enumeration value=\"shellandtube\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHumidifierTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"steaminjection\"/>\n\t\t\t<xs:enumeration value=\"adiabaticairwasher\"/>\n\t\t\t<xs:enumeration value=\"adiabaticpan\"/>\n\t\t\t<xs:enumeration value=\"adiabaticwettedelement\"/>\n\t\t\t<xs:enumeration value=\"adiabaticatomizing\"/>\n\t\t\t<xs:enumeration value=\"adiabaticultrasonic\"/>\n\t\t\t<xs:enumeration value=\"adiabaticrigidmedia\"/>\n\t\t\t<xs:enumeration value=\"adiabaticcompressedairnozzle\"/>\n\t\t\t<xs:enumeration value=\"assistedelectric\"/>\n\t\t\t<xs:enumeration value=\"assistednaturalgas\"/>\n\t\t\t<xs:enumeration value=\"assistedpropane\"/>\n\t\t\t<xs:enumeration value=\"assistedbutane\"/>\n\t\t\t<xs:enumeration value=\"assistedsteam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInterceptorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cyclonic\"/>\n\t\t\t<xs:enumeration value=\"grease\"/>\n\t\t\t<xs:enumeration value=\"oil\"/>\n\t\t\t<xs:enumeration value=\"petrol\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInternalOrExternalEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"internal\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"external_earth\"/>\n\t\t\t<xs:enumeration value=\"external_water\"/>\n\t\t\t<xs:enumeration value=\"external_fire\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInventoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assetinventory\"/>\n\t\t\t<xs:enumeration value=\"spaceinventory\"/>\n\t\t\t<xs:enumeration value=\"furnitureinventory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcJunctionBoxTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"data\"/>\n\t\t\t<xs:enumeration value=\"power\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcKnotType\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"uniform_knots\"/>\n\t\t\t<xs:enumeration value=\"quasi_uniform_knots\"/>\n\t\t\t<xs:enumeration value=\"piecewise_bezier_knots\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLaborResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"administration\"/>\n\t\t\t<xs:enumeration value=\"carpentry\"/>\n\t\t\t<xs:enumeration value=\"cleaning\"/>\n\t\t\t<xs:enumeration value=\"concrete\"/>\n\t\t\t<xs:enumeration value=\"drywall\"/>\n\t\t\t<xs:enumeration value=\"electric\"/>\n\t\t\t<xs:enumeration value=\"finishing\"/>\n\t\t\t<xs:enumeration value=\"flooring\"/>\n\t\t\t<xs:enumeration value=\"general\"/>\n\t\t\t<xs:enumeration value=\"hvac\"/>\n\t\t\t<xs:enumeration value=\"landscaping\"/>\n\t\t\t<xs:enumeration value=\"masonry\"/>\n\t\t\t<xs:enumeration value=\"painting\"/>\n\t\t\t<xs:enumeration value=\"paving\"/>\n\t\t\t<xs:enumeration value=\"plumbing\"/>\n\t\t\t<xs:enumeration value=\"roofing\"/>\n\t\t\t<xs:enumeration value=\"sitegrading\"/>\n\t\t\t<xs:enumeration value=\"steelwork\"/>\n\t\t\t<xs:enumeration value=\"surveying\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLampTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\n\t\t\t<xs:enumeration value=\"halogen\"/>\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"led\"/>\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\n\t\t\t<xs:enumeration value=\"oled\"/>\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLayerSetDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"axis1\"/>\n\t\t\t<xs:enumeration value=\"axis2\"/>\n\t\t\t<xs:enumeration value=\"axis3\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightDistributionCurveEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"type_a\"/>\n\t\t\t<xs:enumeration value=\"type_b\"/>\n\t\t\t<xs:enumeration value=\"type_c\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightEmissionSourceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"lightemittingdiode\"/>\n\t\t\t<xs:enumeration value=\"lowpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"lowvoltagehalogen\"/>\n\t\t\t<xs:enumeration value=\"mainvoltagehalogen\"/>\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightFixtureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pointsource\"/>\n\t\t\t<xs:enumeration value=\"directionsource\"/>\n\t\t\t<xs:enumeration value=\"securitylighting\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLoadGroupTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"load_group\"/>\n\t\t\t<xs:enumeration value=\"load_case\"/>\n\t\t\t<xs:enumeration value=\"load_combination\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLogicalOperatorEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"logicaland\"/>\n\t\t\t<xs:enumeration value=\"logicalor\"/>\n\t\t\t<xs:enumeration value=\"logicalxor\"/>\n\t\t\t<xs:enumeration value=\"logicalnotand\"/>\n\t\t\t<xs:enumeration value=\"logicalnotor\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMechanicalFastenerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchorbolt\"/>\n\t\t\t<xs:enumeration value=\"bolt\"/>\n\t\t\t<xs:enumeration value=\"dowel\"/>\n\t\t\t<xs:enumeration value=\"nail\"/>\n\t\t\t<xs:enumeration value=\"nailplate\"/>\n\t\t\t<xs:enumeration value=\"rivet\"/>\n\t\t\t<xs:enumeration value=\"screw\"/>\n\t\t\t<xs:enumeration value=\"shearconnector\"/>\n\t\t\t<xs:enumeration value=\"staple\"/>\n\t\t\t<xs:enumeration value=\"studshearconnector\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMedicalDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airstation\"/>\n\t\t\t<xs:enumeration value=\"feedairunit\"/>\n\t\t\t<xs:enumeration value=\"oxygengenerator\"/>\n\t\t\t<xs:enumeration value=\"oxygenplant\"/>\n\t\t\t<xs:enumeration value=\"vacuumstation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"brace\"/>\n\t\t\t<xs:enumeration value=\"chord\"/>\n\t\t\t<xs:enumeration value=\"collar\"/>\n\t\t\t<xs:enumeration value=\"member\"/>\n\t\t\t<xs:enumeration value=\"mullion\"/>\n\t\t\t<xs:enumeration value=\"plate\"/>\n\t\t\t<xs:enumeration value=\"post\"/>\n\t\t\t<xs:enumeration value=\"purlin\"/>\n\t\t\t<xs:enumeration value=\"rafter\"/>\n\t\t\t<xs:enumeration value=\"stringer\"/>\n\t\t\t<xs:enumeration value=\"strut\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMotorConnectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beltdrive\"/>\n\t\t\t<xs:enumeration value=\"coupling\"/>\n\t\t\t<xs:enumeration value=\"directdrive\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNullStyle\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"null\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcObjectTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"product\"/>\n\t\t\t<xs:enumeration value=\"process\"/>\n\t\t\t<xs:enumeration value=\"control\"/>\n\t\t\t<xs:enumeration value=\"resource\"/>\n\t\t\t<xs:enumeration value=\"actor\"/>\n\t\t\t<xs:enumeration value=\"group\"/>\n\t\t\t<xs:enumeration value=\"project\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcObjectiveEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"codecompliance\"/>\n\t\t\t<xs:enumeration value=\"codewaiver\"/>\n\t\t\t<xs:enumeration value=\"designintent\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"healthandsafety\"/>\n\t\t\t<xs:enumeration value=\"mergeconflict\"/>\n\t\t\t<xs:enumeration value=\"modelview\"/>\n\t\t\t<xs:enumeration value=\"parameter\"/>\n\t\t\t<xs:enumeration value=\"requirement\"/>\n\t\t\t<xs:enumeration value=\"specification\"/>\n\t\t\t<xs:enumeration value=\"triggercondition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOccupantTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assignee\"/>\n\t\t\t<xs:enumeration value=\"assignor\"/>\n\t\t\t<xs:enumeration value=\"lessee\"/>\n\t\t\t<xs:enumeration value=\"lessor\"/>\n\t\t\t<xs:enumeration value=\"lettingagent\"/>\n\t\t\t<xs:enumeration value=\"owner\"/>\n\t\t\t<xs:enumeration value=\"tenant\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOpeningElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"opening\"/>\n\t\t\t<xs:enumeration value=\"recess\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOutletTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"audiovisualoutlet\"/>\n\t\t\t<xs:enumeration value=\"communicationsoutlet\"/>\n\t\t\t<xs:enumeration value=\"poweroutlet\"/>\n\t\t\t<xs:enumeration value=\"dataoutlet\"/>\n\t\t\t<xs:enumeration value=\"telephoneoutlet\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPerformanceHistoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPermeableCoveringOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"grill\"/>\n\t\t\t<xs:enumeration value=\"louver\"/>\n\t\t\t<xs:enumeration value=\"screen\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPermitTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"access\"/>\n\t\t\t<xs:enumeration value=\"building\"/>\n\t\t\t<xs:enumeration value=\"work\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPhysicalOrVirtualEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"physical\"/>\n\t\t\t<xs:enumeration value=\"virtual\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPileConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cast_in_place\"/>\n\t\t\t<xs:enumeration value=\"composite\"/>\n\t\t\t<xs:enumeration value=\"precast_concrete\"/>\n\t\t\t<xs:enumeration value=\"prefab_steel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPileTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bored\"/>\n\t\t\t<xs:enumeration value=\"driven\"/>\n\t\t\t<xs:enumeration value=\"jetgrouting\"/>\n\t\t\t<xs:enumeration value=\"cohesion\"/>\n\t\t\t<xs:enumeration value=\"friction\"/>\n\t\t\t<xs:enumeration value=\"support\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPipeFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"obstruction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPipeSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"culvert\"/>\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\n\t\t\t<xs:enumeration value=\"gutter\"/>\n\t\t\t<xs:enumeration value=\"spool\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curtain_panel\"/>\n\t\t\t<xs:enumeration value=\"sheet\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPreferredSurfaceCurveRepresentation\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curve3d\"/>\n\t\t\t<xs:enumeration value=\"pcurve_s1\"/>\n\t\t\t<xs:enumeration value=\"pcurve_s2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProcedureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"advice_caution\"/>\n\t\t\t<xs:enumeration value=\"advice_note\"/>\n\t\t\t<xs:enumeration value=\"advice_warning\"/>\n\t\t\t<xs:enumeration value=\"calibration\"/>\n\t\t\t<xs:enumeration value=\"diagnostic\"/>\n\t\t\t<xs:enumeration value=\"shutdown\"/>\n\t\t\t<xs:enumeration value=\"startup\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProfileTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curve\"/>\n\t\t\t<xs:enumeration value=\"area\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectOrderTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"changeorder\"/>\n\t\t\t<xs:enumeration value=\"maintenanceworkorder\"/>\n\t\t\t<xs:enumeration value=\"moveorder\"/>\n\t\t\t<xs:enumeration value=\"purchaseorder\"/>\n\t\t\t<xs:enumeration value=\"workorder\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectedOrTrueLengthEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"projected_length\"/>\n\t\t\t<xs:enumeration value=\"true_length\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectionElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPropertySetTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pset_typedrivenonly\"/>\n\t\t\t<xs:enumeration value=\"pset_typedrivenoverride\"/>\n\t\t\t<xs:enumeration value=\"pset_occurrencedriven\"/>\n\t\t\t<xs:enumeration value=\"pset_performancedriven\"/>\n\t\t\t<xs:enumeration value=\"qto_typedrivenonly\"/>\n\t\t\t<xs:enumeration value=\"qto_typedrivenoverride\"/>\n\t\t\t<xs:enumeration value=\"qto_occurrencedriven\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProtectiveDeviceTrippingUnitTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electronic\"/>\n\t\t\t<xs:enumeration value=\"electromagnetic\"/>\n\t\t\t<xs:enumeration value=\"residualcurrent\"/>\n\t\t\t<xs:enumeration value=\"thermal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProtectiveDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"circuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"earthleakagecircuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"earthingswitch\"/>\n\t\t\t<xs:enumeration value=\"fusedisconnector\"/>\n\t\t\t<xs:enumeration value=\"residualcurrentcircuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"residualcurrentswitch\"/>\n\t\t\t<xs:enumeration value=\"varistor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPumpTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"circulator\"/>\n\t\t\t<xs:enumeration value=\"endsuction\"/>\n\t\t\t<xs:enumeration value=\"splitcase\"/>\n\t\t\t<xs:enumeration value=\"submersiblepump\"/>\n\t\t\t<xs:enumeration value=\"sumppump\"/>\n\t\t\t<xs:enumeration value=\"verticalinline\"/>\n\t\t\t<xs:enumeration value=\"verticalturbine\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRailingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"handrail\"/>\n\t\t\t<xs:enumeration value=\"guardrail\"/>\n\t\t\t<xs:enumeration value=\"balustrade\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRampFlightTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight\"/>\n\t\t\t<xs:enumeration value=\"spiral\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRampTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight_run_ramp\"/>\n\t\t\t<xs:enumeration value=\"two_straight_run_ramp\"/>\n\t\t\t<xs:enumeration value=\"quarter_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"half_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"spiral_ramp\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRecurrenceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"daily\"/>\n\t\t\t<xs:enumeration value=\"weekly\"/>\n\t\t\t<xs:enumeration value=\"monthly_by_day_of_month\"/>\n\t\t\t<xs:enumeration value=\"monthly_by_position\"/>\n\t\t\t<xs:enumeration value=\"by_day_count\"/>\n\t\t\t<xs:enumeration value=\"by_weekday_count\"/>\n\t\t\t<xs:enumeration value=\"yearly_by_day_of_month\"/>\n\t\t\t<xs:enumeration value=\"yearly_by_position\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReflectanceMethodEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blinn\"/>\n\t\t\t<xs:enumeration value=\"flat\"/>\n\t\t\t<xs:enumeration value=\"glass\"/>\n\t\t\t<xs:enumeration value=\"matt\"/>\n\t\t\t<xs:enumeration value=\"metal\"/>\n\t\t\t<xs:enumeration value=\"mirror\"/>\n\t\t\t<xs:enumeration value=\"phong\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"strauss\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarRoleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"main\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"ligature\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"punching\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"ring\"/>\n\t\t\t<xs:enumeration value=\"anchoring\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarSurfaceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plain\"/>\n\t\t\t<xs:enumeration value=\"textured\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchoring\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"ligature\"/>\n\t\t\t<xs:enumeration value=\"main\"/>\n\t\t\t<xs:enumeration value=\"punching\"/>\n\t\t\t<xs:enumeration value=\"ring\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingMeshTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRoleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"supplier\"/>\n\t\t\t<xs:enumeration value=\"manufacturer\"/>\n\t\t\t<xs:enumeration value=\"contractor\"/>\n\t\t\t<xs:enumeration value=\"subcontractor\"/>\n\t\t\t<xs:enumeration value=\"architect\"/>\n\t\t\t<xs:enumeration value=\"structuralengineer\"/>\n\t\t\t<xs:enumeration value=\"costengineer\"/>\n\t\t\t<xs:enumeration value=\"client\"/>\n\t\t\t<xs:enumeration value=\"buildingowner\"/>\n\t\t\t<xs:enumeration value=\"buildingoperator\"/>\n\t\t\t<xs:enumeration value=\"mechanicalengineer\"/>\n\t\t\t<xs:enumeration value=\"electricalengineer\"/>\n\t\t\t<xs:enumeration value=\"projectmanager\"/>\n\t\t\t<xs:enumeration value=\"facilitiesmanager\"/>\n\t\t\t<xs:enumeration value=\"civilengineer\"/>\n\t\t\t<xs:enumeration value=\"commissioningengineer\"/>\n\t\t\t<xs:enumeration value=\"engineer\"/>\n\t\t\t<xs:enumeration value=\"owner\"/>\n\t\t\t<xs:enumeration value=\"consultant\"/>\n\t\t\t<xs:enumeration value=\"constructionmanager\"/>\n\t\t\t<xs:enumeration value=\"fieldconstructionmanager\"/>\n\t\t\t<xs:enumeration value=\"reseller\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRoofTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flat_roof\"/>\n\t\t\t<xs:enumeration value=\"shed_roof\"/>\n\t\t\t<xs:enumeration value=\"gable_roof\"/>\n\t\t\t<xs:enumeration value=\"hip_roof\"/>\n\t\t\t<xs:enumeration value=\"hipped_gable_roof\"/>\n\t\t\t<xs:enumeration value=\"gambrel_roof\"/>\n\t\t\t<xs:enumeration value=\"mansard_roof\"/>\n\t\t\t<xs:enumeration value=\"barrel_roof\"/>\n\t\t\t<xs:enumeration value=\"rainbow_roof\"/>\n\t\t\t<xs:enumeration value=\"butterfly_roof\"/>\n\t\t\t<xs:enumeration value=\"pavilion_roof\"/>\n\t\t\t<xs:enumeration value=\"dome_roof\"/>\n\t\t\t<xs:enumeration value=\"freeform\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSIPrefix\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"exa\"/>\n\t\t\t<xs:enumeration value=\"peta\"/>\n\t\t\t<xs:enumeration value=\"tera\"/>\n\t\t\t<xs:enumeration value=\"giga\"/>\n\t\t\t<xs:enumeration value=\"mega\"/>\n\t\t\t<xs:enumeration value=\"kilo\"/>\n\t\t\t<xs:enumeration value=\"hecto\"/>\n\t\t\t<xs:enumeration value=\"deca\"/>\n\t\t\t<xs:enumeration value=\"deci\"/>\n\t\t\t<xs:enumeration value=\"centi\"/>\n\t\t\t<xs:enumeration value=\"milli\"/>\n\t\t\t<xs:enumeration value=\"micro\"/>\n\t\t\t<xs:enumeration value=\"nano\"/>\n\t\t\t<xs:enumeration value=\"pico\"/>\n\t\t\t<xs:enumeration value=\"femto\"/>\n\t\t\t<xs:enumeration value=\"atto\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSIUnitName\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ampere\"/>\n\t\t\t<xs:enumeration value=\"becquerel\"/>\n\t\t\t<xs:enumeration value=\"candela\"/>\n\t\t\t<xs:enumeration value=\"coulomb\"/>\n\t\t\t<xs:enumeration value=\"cubic_metre\"/>\n\t\t\t<xs:enumeration value=\"degree_celsius\"/>\n\t\t\t<xs:enumeration value=\"farad\"/>\n\t\t\t<xs:enumeration value=\"gram\"/>\n\t\t\t<xs:enumeration value=\"gray\"/>\n\t\t\t<xs:enumeration value=\"henry\"/>\n\t\t\t<xs:enumeration value=\"hertz\"/>\n\t\t\t<xs:enumeration value=\"joule\"/>\n\t\t\t<xs:enumeration value=\"kelvin\"/>\n\t\t\t<xs:enumeration value=\"lumen\"/>\n\t\t\t<xs:enumeration value=\"lux\"/>\n\t\t\t<xs:enumeration value=\"metre\"/>\n\t\t\t<xs:enumeration value=\"mole\"/>\n\t\t\t<xs:enumeration value=\"newton\"/>\n\t\t\t<xs:enumeration value=\"ohm\"/>\n\t\t\t<xs:enumeration value=\"pascal\"/>\n\t\t\t<xs:enumeration value=\"radian\"/>\n\t\t\t<xs:enumeration value=\"second\"/>\n\t\t\t<xs:enumeration value=\"siemens\"/>\n\t\t\t<xs:enumeration value=\"sievert\"/>\n\t\t\t<xs:enumeration value=\"square_metre\"/>\n\t\t\t<xs:enumeration value=\"steradian\"/>\n\t\t\t<xs:enumeration value=\"tesla\"/>\n\t\t\t<xs:enumeration value=\"volt\"/>\n\t\t\t<xs:enumeration value=\"watt\"/>\n\t\t\t<xs:enumeration value=\"weber\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSanitaryTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bath\"/>\n\t\t\t<xs:enumeration value=\"bidet\"/>\n\t\t\t<xs:enumeration value=\"cistern\"/>\n\t\t\t<xs:enumeration value=\"shower\"/>\n\t\t\t<xs:enumeration value=\"sink\"/>\n\t\t\t<xs:enumeration value=\"sanitaryfountain\"/>\n\t\t\t<xs:enumeration value=\"toiletpan\"/>\n\t\t\t<xs:enumeration value=\"urinal\"/>\n\t\t\t<xs:enumeration value=\"washhandbasin\"/>\n\t\t\t<xs:enumeration value=\"wcseat\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"uniform\"/>\n\t\t\t<xs:enumeration value=\"tapered\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSensorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cosensor\"/>\n\t\t\t<xs:enumeration value=\"co2sensor\"/>\n\t\t\t<xs:enumeration value=\"conductancesensor\"/>\n\t\t\t<xs:enumeration value=\"contactsensor\"/>\n\t\t\t<xs:enumeration value=\"firesensor\"/>\n\t\t\t<xs:enumeration value=\"flowsensor\"/>\n\t\t\t<xs:enumeration value=\"frostsensor\"/>\n\t\t\t<xs:enumeration value=\"gassensor\"/>\n\t\t\t<xs:enumeration value=\"heatsensor\"/>\n\t\t\t<xs:enumeration value=\"humiditysensor\"/>\n\t\t\t<xs:enumeration value=\"identifiersensor\"/>\n\t\t\t<xs:enumeration value=\"ionconcentrationsensor\"/>\n\t\t\t<xs:enumeration value=\"levelsensor\"/>\n\t\t\t<xs:enumeration value=\"lightsensor\"/>\n\t\t\t<xs:enumeration value=\"moisturesensor\"/>\n\t\t\t<xs:enumeration value=\"movementsensor\"/>\n\t\t\t<xs:enumeration value=\"phsensor\"/>\n\t\t\t<xs:enumeration value=\"pressuresensor\"/>\n\t\t\t<xs:enumeration value=\"radiationsensor\"/>\n\t\t\t<xs:enumeration value=\"radioactivitysensor\"/>\n\t\t\t<xs:enumeration value=\"smokesensor\"/>\n\t\t\t<xs:enumeration value=\"soundsensor\"/>\n\t\t\t<xs:enumeration value=\"temperaturesensor\"/>\n\t\t\t<xs:enumeration value=\"windsensor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSequenceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"start_start\"/>\n\t\t\t<xs:enumeration value=\"start_finish\"/>\n\t\t\t<xs:enumeration value=\"finish_start\"/>\n\t\t\t<xs:enumeration value=\"finish_finish\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcShadingDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"jalousie\"/>\n\t\t\t<xs:enumeration value=\"shutter\"/>\n\t\t\t<xs:enumeration value=\"awning\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSimplePropertyTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"p_singlevalue\"/>\n\t\t\t<xs:enumeration value=\"p_enumeratedvalue\"/>\n\t\t\t<xs:enumeration value=\"p_boundedvalue\"/>\n\t\t\t<xs:enumeration value=\"p_listvalue\"/>\n\t\t\t<xs:enumeration value=\"p_tablevalue\"/>\n\t\t\t<xs:enumeration value=\"p_referencevalue\"/>\n\t\t\t<xs:enumeration value=\"q_length\"/>\n\t\t\t<xs:enumeration value=\"q_area\"/>\n\t\t\t<xs:enumeration value=\"q_volume\"/>\n\t\t\t<xs:enumeration value=\"q_count\"/>\n\t\t\t<xs:enumeration value=\"q_weight\"/>\n\t\t\t<xs:enumeration value=\"q_time\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSlabTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floor\"/>\n\t\t\t<xs:enumeration value=\"roof\"/>\n\t\t\t<xs:enumeration value=\"landing\"/>\n\t\t\t<xs:enumeration value=\"baseslab\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSolarDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"solarcollector\"/>\n\t\t\t<xs:enumeration value=\"solarpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpaceHeaterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"convector\"/>\n\t\t\t<xs:enumeration value=\"radiator\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpaceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"space\"/>\n\t\t\t<xs:enumeration value=\"parking\"/>\n\t\t\t<xs:enumeration value=\"gfa\"/>\n\t\t\t<xs:enumeration value=\"internal\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpatialZoneTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"construction\"/>\n\t\t\t<xs:enumeration value=\"firesafety\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"occupancy\"/>\n\t\t\t<xs:enumeration value=\"security\"/>\n\t\t\t<xs:enumeration value=\"thermal\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"ventilation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStackTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"birdcage\"/>\n\t\t\t<xs:enumeration value=\"cowl\"/>\n\t\t\t<xs:enumeration value=\"rainwaterhopper\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStairFlightTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight\"/>\n\t\t\t<xs:enumeration value=\"winder\"/>\n\t\t\t<xs:enumeration value=\"spiral\"/>\n\t\t\t<xs:enumeration value=\"curved\"/>\n\t\t\t<xs:enumeration value=\"freeform\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStairTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight_run_stair\"/>\n\t\t\t<xs:enumeration value=\"two_straight_run_stair\"/>\n\t\t\t<xs:enumeration value=\"quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"half_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"half_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"three_quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"three_quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"spiral_stair\"/>\n\t\t\t<xs:enumeration value=\"double_return_stair\"/>\n\t\t\t<xs:enumeration value=\"curved_run_stair\"/>\n\t\t\t<xs:enumeration value=\"two_curved_run_stair\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStateEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"readwrite\"/>\n\t\t\t<xs:enumeration value=\"readonly\"/>\n\t\t\t<xs:enumeration value=\"locked\"/>\n\t\t\t<xs:enumeration value=\"readwritelocked\"/>\n\t\t\t<xs:enumeration value=\"readonlylocked\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralCurveActivityTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"const\"/>\n\t\t\t<xs:enumeration value=\"linear\"/>\n\t\t\t<xs:enumeration value=\"polygonal\"/>\n\t\t\t<xs:enumeration value=\"equidistant\"/>\n\t\t\t<xs:enumeration value=\"sinus\"/>\n\t\t\t<xs:enumeration value=\"parabola\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralCurveMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rigid_joined_member\"/>\n\t\t\t<xs:enumeration value=\"pin_joined_member\"/>\n\t\t\t<xs:enumeration value=\"cable\"/>\n\t\t\t<xs:enumeration value=\"tension_member\"/>\n\t\t\t<xs:enumeration value=\"compression_member\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralSurfaceActivityTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"const\"/>\n\t\t\t<xs:enumeration value=\"bilinear\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"isocontour\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralSurfaceMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bending_element\"/>\n\t\t\t<xs:enumeration value=\"membrane_element\"/>\n\t\t\t<xs:enumeration value=\"shell\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSubContractResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"purchase\"/>\n\t\t\t<xs:enumeration value=\"work\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSurfaceFeatureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"mark\"/>\n\t\t\t<xs:enumeration value=\"tag\"/>\n\t\t\t<xs:enumeration value=\"treatment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSurfaceSide\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"positive\"/>\n\t\t\t<xs:enumeration value=\"negative\"/>\n\t\t\t<xs:enumeration value=\"both\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSwitchingDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"contactor\"/>\n\t\t\t<xs:enumeration value=\"dimmerswitch\"/>\n\t\t\t<xs:enumeration value=\"emergencystop\"/>\n\t\t\t<xs:enumeration value=\"keypad\"/>\n\t\t\t<xs:enumeration value=\"momentaryswitch\"/>\n\t\t\t<xs:enumeration value=\"selectorswitch\"/>\n\t\t\t<xs:enumeration value=\"starter\"/>\n\t\t\t<xs:enumeration value=\"switchdisconnector\"/>\n\t\t\t<xs:enumeration value=\"toggleswitch\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSystemFurnitureElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"panel\"/>\n\t\t\t<xs:enumeration value=\"worksurface\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTankTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"basin\"/>\n\t\t\t<xs:enumeration value=\"breakpressure\"/>\n\t\t\t<xs:enumeration value=\"expansion\"/>\n\t\t\t<xs:enumeration value=\"feedandexpansion\"/>\n\t\t\t<xs:enumeration value=\"pressurevessel\"/>\n\t\t\t<xs:enumeration value=\"storage\"/>\n\t\t\t<xs:enumeration value=\"vessel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTaskDurationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"elapsedtime\"/>\n\t\t\t<xs:enumeration value=\"worktime\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTaskTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"attendance\"/>\n\t\t\t<xs:enumeration value=\"construction\"/>\n\t\t\t<xs:enumeration value=\"demolition\"/>\n\t\t\t<xs:enumeration value=\"dismantle\"/>\n\t\t\t<xs:enumeration value=\"disposal\"/>\n\t\t\t<xs:enumeration value=\"installation\"/>\n\t\t\t<xs:enumeration value=\"logistic\"/>\n\t\t\t<xs:enumeration value=\"maintenance\"/>\n\t\t\t<xs:enumeration value=\"move\"/>\n\t\t\t<xs:enumeration value=\"operation\"/>\n\t\t\t<xs:enumeration value=\"removal\"/>\n\t\t\t<xs:enumeration value=\"renovation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTendonAnchorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"coupler\"/>\n\t\t\t<xs:enumeration value=\"fixed_end\"/>\n\t\t\t<xs:enumeration value=\"tensioning_end\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTendonTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bar\"/>\n\t\t\t<xs:enumeration value=\"coated\"/>\n\t\t\t<xs:enumeration value=\"strand\"/>\n\t\t\t<xs:enumeration value=\"wire\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextPath\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"up\"/>\n\t\t\t<xs:enumeration value=\"down\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeSeriesDataTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"continuous\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"discretebinary\"/>\n\t\t\t<xs:enumeration value=\"piecewisebinary\"/>\n\t\t\t<xs:enumeration value=\"piecewiseconstant\"/>\n\t\t\t<xs:enumeration value=\"piecewisecontinuous\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransformerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"current\"/>\n\t\t\t<xs:enumeration value=\"frequency\"/>\n\t\t\t<xs:enumeration value=\"inverter\"/>\n\t\t\t<xs:enumeration value=\"rectifier\"/>\n\t\t\t<xs:enumeration value=\"voltage\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransitionCode\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"discontinuous\"/>\n\t\t\t<xs:enumeration value=\"continuous\"/>\n\t\t\t<xs:enumeration value=\"contsamegradient\"/>\n\t\t\t<xs:enumeration value=\"contsamegradientsamecurvature\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransportElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"elevator\"/>\n\t\t\t<xs:enumeration value=\"escalator\"/>\n\t\t\t<xs:enumeration value=\"movingwalkway\"/>\n\t\t\t<xs:enumeration value=\"craneway\"/>\n\t\t\t<xs:enumeration value=\"liftinggear\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTrimmingPreference\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cartesian\"/>\n\t\t\t<xs:enumeration value=\"parameter\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTubeBundleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"finned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"absorbeddoseunit\"/>\n\t\t\t<xs:enumeration value=\"amountofsubstanceunit\"/>\n\t\t\t<xs:enumeration value=\"areaunit\"/>\n\t\t\t<xs:enumeration value=\"doseequivalentunit\"/>\n\t\t\t<xs:enumeration value=\"electriccapacitanceunit\"/>\n\t\t\t<xs:enumeration value=\"electricchargeunit\"/>\n\t\t\t<xs:enumeration value=\"electricconductanceunit\"/>\n\t\t\t<xs:enumeration value=\"electriccurrentunit\"/>\n\t\t\t<xs:enumeration value=\"electricresistanceunit\"/>\n\t\t\t<xs:enumeration value=\"electricvoltageunit\"/>\n\t\t\t<xs:enumeration value=\"energyunit\"/>\n\t\t\t<xs:enumeration value=\"forceunit\"/>\n\t\t\t<xs:enumeration value=\"frequencyunit\"/>\n\t\t\t<xs:enumeration value=\"illuminanceunit\"/>\n\t\t\t<xs:enumeration value=\"inductanceunit\"/>\n\t\t\t<xs:enumeration value=\"lengthunit\"/>\n\t\t\t<xs:enumeration value=\"luminousfluxunit\"/>\n\t\t\t<xs:enumeration value=\"luminousintensityunit\"/>\n\t\t\t<xs:enumeration value=\"magneticfluxdensityunit\"/>\n\t\t\t<xs:enumeration value=\"magneticfluxunit\"/>\n\t\t\t<xs:enumeration value=\"massunit\"/>\n\t\t\t<xs:enumeration value=\"planeangleunit\"/>\n\t\t\t<xs:enumeration value=\"powerunit\"/>\n\t\t\t<xs:enumeration value=\"pressureunit\"/>\n\t\t\t<xs:enumeration value=\"radioactivityunit\"/>\n\t\t\t<xs:enumeration value=\"solidangleunit\"/>\n\t\t\t<xs:enumeration value=\"thermodynamictemperatureunit\"/>\n\t\t\t<xs:enumeration value=\"timeunit\"/>\n\t\t\t<xs:enumeration value=\"volumeunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitaryControlElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"alarmpanel\"/>\n\t\t\t<xs:enumeration value=\"controlpanel\"/>\n\t\t\t<xs:enumeration value=\"gasdetectionpanel\"/>\n\t\t\t<xs:enumeration value=\"indicatorpanel\"/>\n\t\t\t<xs:enumeration value=\"mimicpanel\"/>\n\t\t\t<xs:enumeration value=\"humidistat\"/>\n\t\t\t<xs:enumeration value=\"thermostat\"/>\n\t\t\t<xs:enumeration value=\"weatherstation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitaryEquipmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airhandler\"/>\n\t\t\t<xs:enumeration value=\"airconditioningunit\"/>\n\t\t\t<xs:enumeration value=\"dehumidifier\"/>\n\t\t\t<xs:enumeration value=\"splitsystem\"/>\n\t\t\t<xs:enumeration value=\"rooftopunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcValveTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airrelease\"/>\n\t\t\t<xs:enumeration value=\"antivacuum\"/>\n\t\t\t<xs:enumeration value=\"changeover\"/>\n\t\t\t<xs:enumeration value=\"check\"/>\n\t\t\t<xs:enumeration value=\"commissioning\"/>\n\t\t\t<xs:enumeration value=\"diverting\"/>\n\t\t\t<xs:enumeration value=\"drawoffcock\"/>\n\t\t\t<xs:enumeration value=\"doublecheck\"/>\n\t\t\t<xs:enumeration value=\"doubleregulating\"/>\n\t\t\t<xs:enumeration value=\"faucet\"/>\n\t\t\t<xs:enumeration value=\"flushing\"/>\n\t\t\t<xs:enumeration value=\"gascock\"/>\n\t\t\t<xs:enumeration value=\"gastap\"/>\n\t\t\t<xs:enumeration value=\"isolating\"/>\n\t\t\t<xs:enumeration value=\"mixing\"/>\n\t\t\t<xs:enumeration value=\"pressurereducing\"/>\n\t\t\t<xs:enumeration value=\"pressurerelief\"/>\n\t\t\t<xs:enumeration value=\"regulating\"/>\n\t\t\t<xs:enumeration value=\"safetycutoff\"/>\n\t\t\t<xs:enumeration value=\"steamtrap\"/>\n\t\t\t<xs:enumeration value=\"stopcock\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVibrationIsolatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compression\"/>\n\t\t\t<xs:enumeration value=\"spring\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVoidingFeatureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cutout\"/>\n\t\t\t<xs:enumeration value=\"notch\"/>\n\t\t\t<xs:enumeration value=\"hole\"/>\n\t\t\t<xs:enumeration value=\"miter\"/>\n\t\t\t<xs:enumeration value=\"chamfer\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWallTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"movable\"/>\n\t\t\t<xs:enumeration value=\"parapet\"/>\n\t\t\t<xs:enumeration value=\"partitioning\"/>\n\t\t\t<xs:enumeration value=\"plumbingwall\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"solidwall\"/>\n\t\t\t<xs:enumeration value=\"standard\"/>\n\t\t\t<xs:enumeration value=\"polygonal\"/>\n\t\t\t<xs:enumeration value=\"elementedwall\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWasteTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floortrap\"/>\n\t\t\t<xs:enumeration value=\"floorwaste\"/>\n\t\t\t<xs:enumeration value=\"gullysump\"/>\n\t\t\t<xs:enumeration value=\"gullytrap\"/>\n\t\t\t<xs:enumeration value=\"roofdrain\"/>\n\t\t\t<xs:enumeration value=\"wastedisposalunit\"/>\n\t\t\t<xs:enumeration value=\"wastetrap\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowPanelOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"sidehungrighthand\"/>\n\t\t\t<xs:enumeration value=\"sidehunglefthand\"/>\n\t\t\t<xs:enumeration value=\"tiltandturnrighthand\"/>\n\t\t\t<xs:enumeration value=\"tiltandturnlefthand\"/>\n\t\t\t<xs:enumeration value=\"tophung\"/>\n\t\t\t<xs:enumeration value=\"bottomhung\"/>\n\t\t\t<xs:enumeration value=\"pivothorizontal\"/>\n\t\t\t<xs:enumeration value=\"pivotvertical\"/>\n\t\t\t<xs:enumeration value=\"slidinghorizontal\"/>\n\t\t\t<xs:enumeration value=\"slidingvertical\"/>\n\t\t\t<xs:enumeration value=\"removablecasement\"/>\n\t\t\t<xs:enumeration value=\"fixedcasement\"/>\n\t\t\t<xs:enumeration value=\"otheroperation\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowPanelPositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"middle\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"bottom\"/>\n\t\t\t<xs:enumeration value=\"top\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowStyleConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aluminium\"/>\n\t\t\t<xs:enumeration value=\"high_grade_steel\"/>\n\t\t\t<xs:enumeration value=\"steel\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"aluminium_wood\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"other_construction\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowStyleOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_panel\"/>\n\t\t\t<xs:enumeration value=\"double_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"double_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_bottom\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_top\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_left\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_right\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"window\"/>\n\t\t\t<xs:enumeration value=\"skylight\"/>\n\t\t\t<xs:enumeration value=\"lightdome\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowTypePartitioningEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_panel\"/>\n\t\t\t<xs:enumeration value=\"double_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"double_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_bottom\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_top\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_left\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_right\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkCalendarTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"firstshift\"/>\n\t\t\t<xs:enumeration value=\"secondshift\"/>\n\t\t\t<xs:enumeration value=\"thirdshift\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkPlanTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actual\"/>\n\t\t\t<xs:enumeration value=\"baseline\"/>\n\t\t\t<xs:enumeration value=\"planned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkScheduleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actual\"/>\n\t\t\t<xs:enumeration value=\"baseline\"/>\n\t\t\t<xs:enumeration value=\"planned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<!-- simple type declarations (for TYPE defined data type definitions) -->\n\t<xs:simpleType name=\"IfcAbsorbedDoseMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAccelerationMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAmountOfSubstanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAngularVelocityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcArcIndex\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcArcIndex\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcArcIndex\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t<xs:maxLength value=\"3\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAreaDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAreaMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcBinary\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:hexBinary\">\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"IfcBoolean\">\n\t\t<xs:restriction base=\"xs:boolean\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBoxAlignment\">\n\t\t<xs:restriction base=\"ifc:IfcLabel\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCardinalPointReference\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcComplexNumber\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcComplexNumber\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"xs:double\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"array\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcComplexNumber\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"xs:double\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t<xs:maxLength value=\"2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcCompoundPlaneAngleMeasure\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcCompoundPlaneAngleMeasure\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"xs:long\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcCompoundPlaneAngleMeasure\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"xs:long\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t<xs:maxLength value=\"4\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcContextDependentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCountMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurvatureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDate\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDateTime\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDayInMonthNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDayInWeekNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDescriptiveMeasure\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDimensionCount\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoseEquivalentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuration\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDynamicViscosityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricCapacitanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricChargeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricConductanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricCurrentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricResistanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricVoltageMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEnergyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontStyle\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontVariant\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontWeight\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFrequencyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGloballyUniqueId\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:minLength value=\"22\"/>\n\t\t\t<xs:maxLength value=\"22\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatFluxDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatingValueMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIdentifier\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:maxLength value=\"255\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIlluminanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInductanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInteger\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIntegerCountRateMeasure\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIonConcentrationMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIsothermalMoistureCapacityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcKinematicViscosityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLabel\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:maxLength value=\"255\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLanguageId\">\n\t\t<xs:restriction base=\"ifc:IfcIdentifier\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLengthMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcLineIndex\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcLineIndex\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcLineIndex\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearMomentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearStiffnessMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearVelocityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLogical\">\n\t\t<xs:restriction base=\"ifc:logical\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousFluxMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousIntensityDistributionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousIntensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMagneticFluxDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMagneticFluxMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassFlowRateMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassPerLengthMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfElasticityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMoistureDiffusivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMolecularWeightMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMomentOfInertiaMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMonetaryMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMonthInYearNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNonNegativeLengthMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNormalisedRatioMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNumericMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPHMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcParameterValue\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlanarForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlaneAngleMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveInteger\">\n\t\t<xs:restriction base=\"ifc:IfcInteger\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveLengthMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositivePlaneAngleMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcPlaneAngleMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveRatioMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPowerMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPresentableText\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPressureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcPropertySetDefinitionSet\">\n\t\t<xs:sequence>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t</xs:sequence>\n\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t</xs:complexType>\n\t<xs:simpleType name=\"IfcRadioActivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRatioMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReal\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalFrequencyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalMassMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalStiffnessMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionModulusMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionalAreaIntegralMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcShearModulusMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSolidAngleMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPowerLevelMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPowerMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPressureLevelMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPressureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecificHeatCapacityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecularExponent\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecularRoughness\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTemperatureGradientMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTemperatureRateOfChangeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcText\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextAlignment\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextDecoration\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextFontName\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextTransformation\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalAdmittanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalConductivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalExpansionCoefficientMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalResistanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalTransmittanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermodynamicTemperatureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTime\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeStamp\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTorqueMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcURIReference\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVaporPermeabilityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVolumeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVolumetricFlowRateMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWarpingConstantMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWarpingMomentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<!-- base entity and entity attribute declaration (for embeded base schema definitions) -->\n\t<xs:element name=\"Entity\" type=\"ifc:Entity\" abstract=\"true\" nillable=\"true\"/>\n\t<xs:complexType name=\"Entity\" abstract=\"true\">\n\t\t<xs:attribute name=\"href\" type=\"xs:anyURI\" use=\"optional\"/>\n\t\t<xs:attribute name=\"ref\" type=\"xs:IDREF\" use=\"optional\"/>\n\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t</xs:complexType>\n\t<!-- base global attribute declaration (for embeded base schema definitions) -->\n\t<xs:attributeGroup name=\"instanceAttributes\">\n\t\t<xs:attribute name=\"id\" type=\"xs:ID\" use=\"optional\"/>\n\t\t<xs:attribute name=\"path\" type=\"xs:NMTOKENS\" use=\"optional\"/>\n\t\t<xs:attribute name=\"pos\" use=\"optional\">\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:restriction>\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:list itemType=\"xs:integer\"/>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t<xs:minLength value=\"1\"/>\n\t\t\t\t</xs:restriction>\n\t\t\t</xs:simpleType>\n\t\t</xs:attribute>\n\t</xs:attributeGroup>\n\t<xs:attribute name=\"arraySize\">\n\t\t<xs:simpleType>\n\t\t\t<xs:restriction>\n\t\t\t\t<xs:simpleType>\n\t\t\t\t\t<xs:list itemType=\"xs:integer\"/>\n\t\t\t\t</xs:simpleType>\n\t\t\t\t<xs:minLength value=\"1\"/>\n\t\t\t</xs:restriction>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:attribute name=\"itemType\">\n\t\t<xs:simpleType>\n\t\t\t<xs:list itemType=\"xs:QName\"/>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:attribute name=\"cType\">\n\t\t<xs:simpleType>\n\t\t\t<xs:list itemType=\"ifc:aggregateType\"/>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:simpleType name=\"aggregateType\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:enumeration value=\"array\"/>\n\t\t\t<xs:enumeration value=\"list\"/>\n\t\t\t<xs:enumeration value=\"set\"/>\n\t\t\t<xs:enumeration value=\"bag\"/>\n\t\t\t<xs:enumeration value=\"array-unique\"/>\n\t\t\t<xs:enumeration value=\"array-optional\"/>\n\t\t\t<xs:enumeration value=\"array-optional-unique\"/>\n\t\t\t<xs:enumeration value=\"list-unique\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<!-- base global simple type declaration (for embeded base schema definitions) -->\n\t<xs:complexType name=\"hexBinary\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"xs:hexBinary\">\n\t\t\t\t<xs:attribute name=\"extraBits\" type=\"xs:integer\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"logical\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:enumeration value=\"false\"/>\n\t\t\t<xs:enumeration value=\"true\"/>\n\t\t\t<xs:enumeration value=\"unknown\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n    <xs:simpleType name=\"Seq-IfcPositiveInteger\">\n        <xs:restriction>\n            <xs:simpleType>\n                <xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n            </xs:simpleType>\n            <xs:minLength value=\"3\"/>\n        </xs:restriction>\n    </xs:simpleType>\n\t<!-- base global wrapper declaration for atomic simple types (for embeded base schema definitions) -->\n\t<xs:element name=\"IfcAbsorbedDoseMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAbsorbedDoseMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAccelerationMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAccelerationMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAmountOfSubstanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAmountOfSubstanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAngularVelocityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAngularVelocityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcArcIndex-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcArcIndex\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAreaDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAreaMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcBinary-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBinary\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcBoolean-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBoolean\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcComplexNumber-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcComplexNumber\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCompoundPlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCompoundPlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcContextDependentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcContextDependentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCountMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCountMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCurvatureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCurvatureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDate-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDate\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDateTime-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDateTime\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDescriptiveMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDescriptiveMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDoseEquivalentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDoseEquivalentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDuration-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDuration\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDynamicViscosityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDynamicViscosityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricCapacitanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCapacitanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricChargeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricChargeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricConductanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricConductanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricCurrentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricResistanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricResistanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricVoltageMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricVoltageMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcEnergyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcFrequencyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFrequencyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcHeatFluxDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatFluxDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcHeatingValueMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatingValueMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIdentifier-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIdentifier\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIlluminanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIlluminanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcInductanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInductanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcInteger-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInteger\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIntegerCountRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIntegerCountRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIonConcentrationMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIonConcentrationMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIsothermalMoistureCapacityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcKinematicViscosityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcKinematicViscosityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLabel-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLabel\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLineIndex-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLineIndex\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearMomentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearMomentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearStiffnessMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearStiffnessMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearVelocityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearVelocityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLogical-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLogical\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousFluxMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousFluxMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousIntensityDistributionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityDistributionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousIntensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMagneticFluxDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMagneticFluxMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassFlowRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassFlowRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassPerLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassPerLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfElasticityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfElasticityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfLinearSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMoistureDiffusivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMoistureDiffusivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMolecularWeightMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMolecularWeightMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMomentOfInertiaMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMomentOfInertiaMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMonetaryMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMonetaryMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNonNegativeLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNonNegativeLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNormalisedRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNormalisedRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNullStyle-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNullStyle\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNumericMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNumericMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPHMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPHMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcParameterValue-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcParameterValue\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPlanarForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlanarForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveInteger-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveInteger\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositivePlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositivePlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPowerMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPowerMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPressureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPressureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPropertySetDefinitionSet-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:complexContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinitionSet\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:complexContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRadioActivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRadioActivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcReal-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcReal\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalFrequencyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalFrequencyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalMassMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalMassMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalStiffnessMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalStiffnessMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSectionModulusMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionModulusMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSectionalAreaIntegralMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionalAreaIntegralMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcShearModulusMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcShearModulusMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSolidAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSolidAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPowerLevelMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerLevelMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPowerMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPressureLevelMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureLevelMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPressureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecificHeatCapacityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecificHeatCapacityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecularExponent-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularExponent\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecularRoughness-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularRoughness\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTemperatureGradientMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureGradientMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTemperatureRateOfChangeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureRateOfChangeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcText-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcText\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTextFontName-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTextFontName\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalAdmittanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalAdmittanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalConductivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalConductivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalExpansionCoefficientMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalExpansionCoefficientMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalResistanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalResistanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalTransmittanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalTransmittanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermodynamicTemperatureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermodynamicTemperatureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTime-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTime\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTimeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTimeStamp-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeStamp\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTorqueMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTorqueMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVaporPermeabilityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVaporPermeabilityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVolumeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVolumetricFlowRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumetricFlowRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcWarpingConstantMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingConstantMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcWarpingMomentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingMomentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n</xs:schema>\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCAddressInformationUI.xaml",
    "content": "﻿<auiw:ChildWindow  x:Class=\"BIM.IFC.Export.UI.IFCAddressInformation\"\r\n                   xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n                   xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n                   xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n                   xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\r\n                   xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n                   xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \r\n                   Title=\"{x:Static p:Resources.AddressInformation}\" \r\n                   ResizeMode =\"NoResize\" \r\n                   Name=\"AddressTab\" \r\n                   SaveWindowSettings=\"True\"\r\n                   mc:Ignorable=\"d\" \r\n                   Initialized=\"AddressTab_Initialized\" \r\n                   d:DesignWidth=\"560\" \r\n                   SizeToContent=\"WidthAndHeight\" \r\n                   HorizontalAlignment=\"Stretch\" \r\n                   Margin=\"10,5,5,1\" \r\n                   Height=\"571.839\" \r\n                   Loaded=\"OnInit\">\r\n    <Grid Margin=\"0,0,1,0\" HorizontalAlignment=\"Right\" Width=\"551\" Height=\"540\" VerticalAlignment=\"Top\">\r\n        <Grid.RowDefinitions>\r\n            <RowDefinition Height=\"499*\"/>\r\n            <RowDefinition Height=\"41*\"/>\r\n        </Grid.RowDefinitions>\r\n        <Grid.ColumnDefinitions>\r\n            <ColumnDefinition Width=\"216*\"/>\r\n            <ColumnDefinition Width=\"335*\"/>\r\n        </Grid.ColumnDefinitions>\r\n        <Label Content=\"{x:Static p:Resources.Purpose}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"21,10,0,0\" x:Name=\"labelPurpose\" VerticalAlignment=\"Top\" Width=\"147\"/>\r\n        <Label Content=\"{x:Static p:Resources.UserDefinedPurpose}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"21,43,0,0\" x:Name=\"labelUserDefinedPurpose\" VerticalAlignment=\"Top\" Width=\"195\" />\r\n        <TextBox Text=\"{Binding UserDefinedPurpose, UpdateSourceTrigger=PropertyChanged}\" LostFocus=\"UserDefinedPurposeTextBox_LostFocus\" Height=\"23\" Margin=\"14,45,10,0\" x:Name=\"UserDefinedPurposeTextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" ToolTip=\"{x:Static p:Resources.AddressInformationTooltip}\" Grid.Column=\"1\"/>\r\n        <Label Content=\"{x:Static p:Resources.Description}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"21,75,0,0\" x:Name=\"labelDescription\" VerticalAlignment=\"Top\" Width=\"152\"/>\r\n        <TextBox Text=\"{Binding Description, UpdateSourceTrigger=PropertyChanged}\" Height=\"23\" HorizontalAlignment=\"Stretch\" Margin=\"15,80,10,0\" x:Name=\"DescriptionTextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"1\"/>\r\n        <Label Content=\"{x:Static p:Resources.AddressLine1}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"21,110,0,0\" x:Name=\"labelAddressLine1\" VerticalAlignment=\"Top\" Width=\"152\"/>\r\n        <TextBox Text=\"{Binding AddressLine1, UpdateSourceTrigger=PropertyChanged}\" Height=\"23\" HorizontalAlignment=\"Right\" Margin=\"0,115,10,0\" x:Name=\"AddressLine1TextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Width=\"310\" Grid.Column=\"1\" />\r\n        <Label Content=\"{x:Static p:Resources.AddressLine2}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"21,145,0,0\" x:Name=\"labelAddressLine2\" VerticalAlignment=\"Top\" Width=\"152\"/>\r\n        <TextBox Text=\"{Binding AddressLine2, UpdateSourceTrigger=PropertyChanged}\" Height=\"23\" HorizontalAlignment=\"Stretch\" Margin=\"15,150,10,0\" x:Name=\"AddressLine2TextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"1\"/>\r\n        <Label Content=\"{x:Static p:Resources.POBox}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"21,180,0,0\" x:Name=\"labelPOBox\" VerticalAlignment=\"Top\" Width=\"152\"/>\r\n        <TextBox Text=\"{Binding POBox, UpdateSourceTrigger=PropertyChanged}\" Height=\"23\" HorizontalAlignment=\"Stretch\" Margin=\"15,185,10,0\" x:Name=\"POBoxTextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"1\"/>\r\n        <Label Content=\"{x:Static p:Resources.City}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"21,217,0,0\" x:Name=\"labelCity\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Top\" Width=\"147\"/>\r\n        <TextBox Text=\"{Binding TownOrCity, UpdateSourceTrigger=PropertyChanged}\" Height=\"23\" HorizontalAlignment=\"Stretch\" Margin=\"15,220,10,0\" x:Name=\"CityTextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"1\"/>\r\n        <Label Content=\"{x:Static p:Resources.State}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"21,290,0,0\" x:Name=\"labelState\" VerticalAlignment=\"Top\" Width=\"147\" />\r\n        <TextBox Text=\"{Binding RegionOrState, UpdateSourceTrigger=PropertyChanged}\" Height=\"23\" HorizontalAlignment=\"Stretch\" Margin=\"15,295,10,0\" x:Name=\"StateTextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"1\"/>\r\n        <Label Content=\"{x:Static p:Resources.PostalCode}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"21,250,0,0\" x:Name=\"labelPostalCode\" VerticalAlignment=\"Top\" Width=\"147\" />\r\n        <TextBox Text=\"{Binding PostalCode, UpdateSourceTrigger=PropertyChanged}\" Height=\"23\" HorizontalAlignment=\"Stretch\" Margin=\"15,255,10,0\" x:Name=\"PostalCodeTextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"1\"/>\r\n        <Label Content=\"{x:Static p:Resources.Country}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"21,327,0,0\" x:Name=\"labelCountry\" VerticalAlignment=\"Top\" Width=\"147\" />\r\n        <TextBox Text=\"{Binding Country, UpdateSourceTrigger=PropertyChanged}\" Height=\"23\" HorizontalAlignment=\"Stretch\" Margin=\"15,332,10,0\" x:Name=\"CountryTextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"1\"/>\r\n        <Label Content=\"{x:Static p:Resources.InternalLocation}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"21,367,0,0\" x:Name=\"labelInternalLocation\" VerticalAlignment=\"Top\" Width=\"147\" />\r\n        <TextBox Text=\"{Binding InternalLocation, UpdateSourceTrigger=PropertyChanged}\" Height=\"23\" Margin=\"15,372,10,0\" x:Name=\"InternalLocationTextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"1\"/>\r\n        <ComboBox  ItemsSource=\"{Binding}\" Height=\"23\" HorizontalAlignment=\"Stretch\" Margin=\"15,10,10,0\" x:Name=\"PurposeComboBox\" VerticalAlignment=\"Top\" SelectionChanged=\"PurposeComboBox_SelectionChanged\" Initialized=\"PurposeComboBox_Initialized\" Grid.Column=\"1\" />\r\n        <CheckBox Content=\"{x:Static p:Resources.UpdateProjectInformation}\" Height=\"16\" x:Name=\"UpdateProjInfocheckBox\" Margin=\"21,427,0,0\" Checked=\"UpdateProjInfocheckBox_Checked\" Unchecked=\"UpdateProjInfocheckBox_Unchecked\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\" HorizontalAlignment=\"Left\" Width=\"299\"/>\r\n        <Button Content=\"{x:Static p:Resources.OK}\" x:Name=\"buttonOK\" Click=\"buttonOK_Click\" Margin=\"180,10,85,8\" Grid.Column=\"1\" Grid.Row=\"1\"/>\r\n        <Button Content=\"{x:Static p:Resources.Cancel}\" x:Name=\"buttonCancel\" Click=\"bottonCancel_Click\" Margin=\"255,10,10,8\" Grid.Column=\"1\" Grid.Row=\"1\" />\r\n        <CheckBox Content=\"{x:Static p:Resources.AssignAddressToBuilding}\" Height=\"16\" x:Name=\"Checkbox_AssignToBuilding\" Margin=\"0,427,10,0\" VerticalAlignment=\"Top\" Grid.Column=\"1\" HorizontalAlignment=\"Right\" Width=\"250\" IsChecked=\"True\" Checked=\"Checkbox_AssignToBuilding_Checked\" Unchecked=\"Checkbox_AssignToBuilding_Unchecked\"/>\r\n        <CheckBox Content=\"{x:Static p:Resources.AssignAddressToSite}\" Height=\"16\" x:Name=\"Checkbox_AssignToSite\" Margin=\"0,448,10,0\" VerticalAlignment=\"Top\" Grid.Column=\"1\" HorizontalAlignment=\"Right\" Width=\"250\" Checked=\"Checkbox_AssignToSite_Checked\" Unchecked=\"Checkbox_AssignToSite_Unchecked\"/>\r\n    </Grid>\r\n</auiw:ChildWindow>"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCAddressInformationUI.xaml.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.UI.Windows;\r\nusing Revit.IFC.Common.Extensions;\r\nusing Revit.IFC.Export.Utility;\r\nusing System;\r\nusing System.Linq;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// Interaction logic for File Header Tab in IFCAddressInformationUI.xaml\r\n   /// </summary>\r\n   public partial class IFCAddressInformation : ChildWindow\r\n   {\r\n      private string[] ifcPurposeList = { \"OFFICE\", \"SITE\", \"HOME\", \"DISTRIBUTIONPOINT\", \"USERDEFINED\" };\r\n      private string[] purposeList =\r\n      {\r\n         Properties.Resources.Office,\r\n         Properties.Resources.Site,\r\n         Properties.Resources.Home,\r\n         Properties.Resources.DistributionPoint,\r\n         Properties.Resources.UserDefined\r\n      };\r\n\r\n      private IFCAddress m_newAddress = new IFCAddress();\r\n      private IFCAddressItem m_newAddressItem = new IFCAddressItem();\r\n      private IFCAddressItem m_savedAddressItem = new IFCAddressItem();\r\n      private IFCExportConfiguration m_parentConfiguration = null;\r\n\r\n      private string getUserDefinedStringFromIFCPurposeList()\r\n      {\r\n         return ifcPurposeList[4];\r\n      }\r\n\r\n      /// <summary>\r\n      /// initialization of IFCAssignemt class\r\n      /// </summary>\r\n      /// <param name=\"document\"></param>\r\n      public IFCAddressInformation(IFCExportConfiguration configuration)\r\n      {\r\n         InitializeComponent();\r\n         m_parentConfiguration = configuration;\r\n\r\n         if ((configuration.ProjectAddress.HasData() && !m_newAddressItem.HasData()) \r\n            || (configuration.ProjectAddress.HasData() && m_newAddressItem.HasData() && !configuration.ProjectAddress.isUnchanged(m_newAddressItem)))\r\n            m_newAddressItem = configuration.ProjectAddress;\r\n\r\n         // This is a short list, so we just do an O(n) search.\r\n         int numItems = ifcPurposeList.Count();\r\n         for (int ii = 0; ii < numItems; ii++)\r\n         {\r\n            if (m_newAddressItem.Purpose == ifcPurposeList[ii])\r\n            {\r\n               PurposeComboBox.SelectedIndex = ii;\r\n               break;\r\n            }\r\n         }\r\n\r\n         // Initialize options from the configuration\r\n         Checkbox_AssignToBuilding.IsChecked = configuration.ProjectAddress.AssignAddressToBuilding;\r\n         Checkbox_AssignToSite.IsChecked = configuration.ProjectAddress.AssignAddressToSite;\r\n         UpdateProjInfocheckBox.IsChecked = configuration.ProjectAddress.UpdateProjectInformation;\r\n      }\r\n\r\n      private void OnInit(object sender, RoutedEventArgs e)\r\n      {\r\n         DataContext = m_newAddressItem;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Event when the Purpose combo box is initialized. The list of enum text for Purpose is added here\r\n      /// </summary>\r\n      /// <param name=\"sender\"></param>\r\n      /// <param name=\"e\"></param>\r\n      private void PurposeComboBox_Initialized(object sender, EventArgs e)\r\n      {\r\n         foreach (string currPurpose in purposeList)\r\n         {\r\n            PurposeComboBox.Items.Add(currPurpose);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Event when selection of combo box item is changed\r\n      /// </summary>\r\n      /// <param name=\"sender\"></param>\r\n      /// <param name=\"e\"></param>\r\n      private void PurposeComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         m_newAddressItem.Purpose = ifcPurposeList[PurposeComboBox.SelectedIndex];\r\n         if (String.Compare(m_newAddressItem.Purpose, getUserDefinedStringFromIFCPurposeList()) != 0) // ifcPurposeList == \"USERDEFINED\"\r\n         {\r\n            m_newAddressItem.UserDefinedPurpose = \"\";         // Set User Defined Purpose field to empty if the Purpose is changed to other values\r\n            UserDefinedPurposeTextBox.IsEnabled = false;\r\n         }\r\n         else\r\n         {\r\n            UserDefinedPurposeTextBox.IsEnabled = true;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Event when OK button is pressed\r\n      /// </summary>\r\n      /// <param name=\"sender\"></param>\r\n      /// <param name=\"args\"></param>\r\n      private void buttonOK_Click(object sender, RoutedEventArgs args)\r\n      {\r\n         if (Checkbox_AssignToBuilding.IsChecked.HasValue && Checkbox_AssignToBuilding.IsChecked.Value == true)\r\n            m_newAddressItem.AssignAddressToBuilding = true;\r\n         else\r\n            m_newAddressItem.AssignAddressToBuilding = false;\r\n\r\n         if (Checkbox_AssignToSite.IsChecked.HasValue && Checkbox_AssignToSite.IsChecked.Value == true)\r\n            m_newAddressItem.AssignAddressToSite = true;\r\n         else\r\n            m_newAddressItem.AssignAddressToSite = false;\r\n\r\n         // Saved changes to both Address Tab items and File Header Tab items if they have changed\r\n\r\n         if (m_newAddressItem.isUnchanged(m_savedAddressItem) == false)\r\n         {\r\n            m_newAddress.UpdateAddress(IFCCommandOverrideApplication.TheDocument, m_newAddressItem);\r\n         }\r\n\r\n         if (m_newAddressItem.UpdateProjectInformation == true)\r\n         {\r\n            // Format IFC address and update it into Project Information: Project Address\r\n            String address = null;\r\n            String geographicMapLocation = null;\r\n            bool addNewLine = false;\r\n\r\n            if (String.IsNullOrEmpty(m_newAddressItem.AddressLine1) == false)\r\n               address += string.Format(\"{0}\\r\\n\", m_newAddressItem.AddressLine1);\r\n            if (String.IsNullOrEmpty(m_newAddressItem.AddressLine2) == false)\r\n               address += string.Format(\"{0}\\r\\n\", m_newAddressItem.AddressLine2);\r\n            if (String.IsNullOrEmpty(m_newAddressItem.POBox) == false)\r\n               address += string.Format(\"{0}\\r\\n\", m_newAddressItem.POBox);\r\n            if (String.IsNullOrEmpty(m_newAddressItem.TownOrCity) == false)\r\n            {\r\n               address += string.Format(\"{0}\", m_newAddressItem.TownOrCity);\r\n               addNewLine = true;\r\n            }\r\n            if (String.IsNullOrEmpty(m_newAddressItem.RegionOrState) == false)\r\n            {\r\n               address += string.Format(\", {0}\", m_newAddressItem.RegionOrState);\r\n               addNewLine = true;\r\n            }\r\n            if (String.IsNullOrEmpty(m_newAddressItem.PostalCode) == false)\r\n            {\r\n               address += string.Format(\" {0}\", m_newAddressItem.PostalCode);\r\n               addNewLine = true;\r\n            }\r\n            if (addNewLine == true)\r\n            {\r\n               address += string.Format(\"\\r\\n\");\r\n               addNewLine = false;\r\n            }\r\n\r\n            if (String.IsNullOrEmpty(m_newAddressItem.Country) == false)\r\n               address += string.Format(\"{0}\\r\\n\", m_newAddressItem.Country);\r\n\r\n            if (String.IsNullOrEmpty(m_newAddressItem.InternalLocation) == false)\r\n               address += string.Format(\"\\r\\n{0}: {1}\\r\\n\",\r\n                  Properties.Resources.InternalAddress, m_newAddressItem.InternalLocation);\r\n\r\n            if (String.IsNullOrEmpty(m_newAddressItem.TownOrCity) == false)\r\n               geographicMapLocation = m_newAddressItem.TownOrCity;\r\n\r\n            if (String.IsNullOrEmpty(m_newAddressItem.RegionOrState) == false)\r\n            {\r\n               if (String.IsNullOrEmpty(geographicMapLocation) == false)\r\n                  geographicMapLocation = geographicMapLocation + \", \" + m_newAddressItem.RegionOrState;\r\n               else\r\n                  geographicMapLocation = m_newAddressItem.RegionOrState;\r\n            }\r\n\r\n            if (String.IsNullOrEmpty(m_newAddressItem.Country) == false)\r\n            {\r\n               if (String.IsNullOrEmpty(geographicMapLocation) == false)\r\n                  geographicMapLocation = geographicMapLocation + \", \" + m_newAddressItem.Country;\r\n               else\r\n                  geographicMapLocation = m_newAddressItem.Country;\r\n            };\r\n\r\n            Transaction transaction = new Transaction(IFCCommandOverrideApplication.TheDocument, Properties.Resources.UpdateProjectAddress);\r\n            transaction.Start();\r\n\r\n            ProjectInfo projectInfo = IFCCommandOverrideApplication.TheDocument.ProjectInformation;\r\n            projectInfo.Address = address;    // set project address information using the IFC Address Information when requested\r\n\r\n            if (String.IsNullOrEmpty(geographicMapLocation) == false)\r\n               IFCCommandOverrideApplication.TheDocument.ActiveProjectLocation.GetSiteLocation().PlaceName = geographicMapLocation;    // Update also Revit Site location on the Map using City, State and Country when they are not null\r\n\r\n            transaction.Commit();\r\n         }\r\n         m_parentConfiguration.ProjectAddress = m_newAddressItem;\r\n         Close();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Event when Cancel button is pressed\r\n      /// </summary>\r\n      /// <param name=\"sender\"></param>\r\n      /// <param name=\"e\"></param>\r\n      private void bottonCancel_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         Close();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Event when update project information is checked\r\n      /// </summary>\r\n      /// <param name=\"sender\"></param>\r\n      /// <param name=\"e\"></param>\r\n      private void UpdateProjInfocheckBox_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         m_newAddressItem.UpdateProjectInformation = true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Event when the update project information is unchecked\r\n      /// </summary>\r\n      /// <param name=\"sender\"></param>\r\n      /// <param name=\"e\"></param>\r\n      private void UpdateProjInfocheckBox_Unchecked(object sender, RoutedEventArgs e)\r\n      {\r\n         m_newAddressItem.UpdateProjectInformation = false;\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Upon AddressTab initialization\r\n      /// </summary>\r\n      /// <param name=\"sender\"></param>\r\n      /// <param name=\"e\"></param>\r\n      private void AddressTab_Initialized(object sender, EventArgs e)\r\n      {\r\n         bool hasSavedItem = m_newAddress.GetSavedAddress(IFCCommandOverrideApplication.TheDocument, out m_newAddressItem);\r\n         if (hasSavedItem == true)\r\n         {\r\n            //keep a copy of the original saved items for checking for any value changed later on\r\n            m_savedAddressItem = m_newAddressItem.Clone();\r\n\r\n            // We won't initialize PurposeComboBox.SelectedIndex, as otherwise that will change the value\r\n            // of m_newAddressItem.Purpose to the first item in the list, which we don't want.   It is\r\n            // OK for this to be \"uninitialized\".\r\n\r\n            // This is a short list, so we just do an O(n) search.\r\n            int numItems = ifcPurposeList.Count();\r\n            for (int ii = 0; ii < numItems; ii++)\r\n            {\r\n               if (m_newAddressItem.Purpose == ifcPurposeList[ii])\r\n               {\r\n                  PurposeComboBox.SelectedIndex = ii;\r\n                  break;\r\n               }\r\n            }\r\n         }\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Update the Purpose Combo Box value to USERDEFINED when the value is set to something else \r\n      /// </summary>\r\n      /// <param name=\"sender\"></param>\r\n      /// <param name=\"e\"></param>\r\n      private void UserDefinedPurposeTextBox_LostFocus(object sender, RoutedEventArgs e)\r\n      {\r\n         if (String.IsNullOrEmpty(this.m_newAddressItem.UserDefinedPurpose) == false)\r\n         {\r\n            m_newAddressItem.Purpose = getUserDefinedStringFromIFCPurposeList();\r\n            PurposeComboBox.SelectedItem = Properties.Resources.UserDefined;\r\n         }\r\n      }\r\n\r\n      private void Checkbox_AssignToBuilding_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         m_newAddressItem.AssignAddressToBuilding = true;\r\n      }\r\n\r\n      private void Checkbox_AssignToSite_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         m_newAddressItem.AssignAddressToSite = true;\r\n      }\r\n\r\n      private void Checkbox_AssignToBuilding_Unchecked(object sender, RoutedEventArgs e)\r\n      {\r\n         m_newAddressItem.AssignAddressToBuilding = false;\r\n      }\r\n\r\n      private void Checkbox_AssignToSite_Unchecked(object sender, RoutedEventArgs e)\r\n      {\r\n         m_newAddressItem.AssignAddressToSite = false;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCCategoryMapping/IFCCategoryMapping.xaml",
    "content": "<auiw:ChildWindow x:Class=\"BIM.IFC.Export.UI.IFCCategoryMapping\"\r\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"        \r\n        xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\r\n        xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n        xmlns:local=\"clr-namespace:BIM.IFC.Export.UI\"\r\n        xmlns:weaveRoot=\"clr-namespace:Autodesk.Weave.Wpf;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:weave=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:ctrl=\"clr-namespace:Autodesk.Weave.Wpf.Controls;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:weave_d=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties.DesignTime;assembly=Autodesk.Weave.Wpf\"\r\n        weave:FrameworkElementProperties.ApplyWeaveStyles=\"True\"\r\n        weave_d:FrameworkElementProperties.DesignTimeWeaveTheme=\"WeaveLightGray\"\r\n        mc:Ignorable=\"d\"\r\n        Title=\"{x:Static p:Resources.ManageIFCExportMappingSettings}\"\r\n        SaveWindowSettings=\"True\"\r\n        Height=\"559\" Width=\"947\" MinHeight=\"283\" MinWidth=\"730\"\r\n        Closing=\"ChildWindow_Closing\" PreviewKeyDown=\"ChildWindow_PreviewKeyDown\">\r\n   <Grid weave:PanelProperties.Spacing=\"S\">\r\n\r\n      <Grid.Resources>\r\n         <local:LevelToMarginConverter x:Key=\"LevelToMarginConverter\"/>\r\n         <local:CheckBoxLevelToMarginConverter x:Key=\"CheckBoxLevelToMarginConverter\"/>\r\n         <local:RowIndexConverter x:Key=\"RowIndexConverter\"/>\r\n         \r\n         <Style x:Key=\"ToggleButtonStyle\" TargetType=\"{x:Type ToggleButton}\">\r\n            <Setter Property=\"Template\">\r\n               <Setter.Value>\r\n                  <ControlTemplate TargetType=\"ToggleButton\">\r\n                     <Border Background=\"Transparent\">\r\n                        <ContentPresenter />\r\n                     </Border>\r\n                  </ControlTemplate>\r\n               </Setter.Value>\r\n            </Setter>\r\n         </Style>\r\n         \r\n         <Style x:Key=\"ListBoxItemStyle\" TargetType=\"ListBoxItem\" BasedOn=\"{x:Static weaveRoot:Styles.ListBoxItemStyle}\">\r\n            <Setter Property=\"ToolTip\" Value=\"{Binding}\"/>\r\n         </Style>\r\n\r\n         <Style x:Key=\"DataGridCellStyle\" TargetType=\"DataGridCell\" BasedOn=\"{x:Static weaveRoot:Styles.DataGridCellStyle}\">\r\n            <Setter Property=\"Margin\" Value=\"12,0,0,0\"/>\r\n         </Style>\r\n         \r\n         <Style x:Key=\"CheckBoxStyle\" TargetType=\"{x:Type CheckBox}\" BasedOn=\"{x:Static weaveRoot:Styles.CheckBoxStyle}\">\r\n            <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\r\n            <Setter Property=\"Margin\" Value=\"{Binding Level, Converter={StaticResource CheckBoxLevelToMarginConverter}}\"/>\r\n         </Style>\r\n         \r\n      </Grid.Resources>\r\n\r\n      <Grid.RowDefinitions>\r\n         <RowDefinition Height=\"271*\"/>\r\n         <RowDefinition Height=\"Auto\"/>\r\n      </Grid.RowDefinitions>\r\n      <Grid.ColumnDefinitions>\r\n         <ColumnDefinition Width=\"Auto\"/>\r\n         <ColumnDefinition Width=\"*\"/>\r\n      </Grid.ColumnDefinitions>\r\n      <Grid Grid.Column=\"0\">\r\n         <DockPanel>\r\n            <StackPanel Orientation=\"Horizontal\" DockPanel.Dock=\"Top\" Margin=\"0,10,0,4\">\r\n               <TextBlock Text=\"{x:Static p:Resources.ExportMappingTemplates}\" weave:TextBlockProperties.Variant=\"BodyBold\"/>\r\n            </StackPanel>\r\n            <StackPanel Name=\"stackPanel_buttons\" Orientation=\"Horizontal\" DockPanel.Dock=\"Top\" Margin=\"0,4,0,4\">\r\n               <ctrl:IconButton Name=\"button_Add\" IconName=\"AddS\" Click=\"button_Add_Click\">\r\n                  <Button.ToolTip>\r\n                     <ToolTip Content=\"{x:Static p:Resources.CreateNewTemplateTooltip}\" Placement=\"Top\"/>\r\n                  </Button.ToolTip>\r\n               </ctrl:IconButton>\r\n               <ctrl:IconButton Name=\"button_Import\" IconName=\"ImportS\" Click=\"button_Import_Click\">\r\n                  <Button.ToolTip>\r\n                     <ToolTip Content=\"{x:Static p:Resources.ImportTemplateTooltip}\" Placement=\"Top\"/>\r\n                  </Button.ToolTip>\r\n               </ctrl:IconButton>\r\n               <ctrl:IconButton Name=\"button_Copy\" IconName=\"CopyS\" Click=\"button_Copy_Click\">\r\n                  <Button.ToolTip>\r\n                     <ToolTip Content=\"{x:Static p:Resources.CopyTemplateTooltip}\" Placement=\"Top\"/>\r\n                  </Button.ToolTip>\r\n               </ctrl:IconButton>\r\n               <ctrl:IconButton Name=\"button_Save\" IconName=\"SaveS\" Click=\"button_Save_Click\">\r\n                  <Button.ToolTip>\r\n                     <ToolTip Content=\"{x:Static p:Resources.SaveTemplateTooltip}\" Placement=\"Top\"/>\r\n                  </Button.ToolTip>\r\n               </ctrl:IconButton>\r\n               <ctrl:IconButton Name=\"button_Export\" IconName=\"ExportMoveS\" Click=\"button_Export_Click\">\r\n                  <Button.ToolTip>\r\n                     <ToolTip Content=\"{x:Static p:Resources.ExportTemplateTooltip}\" Placement=\"Top\"/>\r\n                  </Button.ToolTip>\r\n               </ctrl:IconButton>\r\n               <ctrl:IconButton Name=\"button_Rename\" IconName=\"RenameS\" Click=\"button_Rename_Click\">\r\n                  <Button.ToolTip>\r\n                     <ToolTip Content=\"{x:Static p:Resources.RenameTemplateTooltip}\" Placement=\"Top\"/>\r\n                  </Button.ToolTip>\r\n               </ctrl:IconButton>\r\n               <ctrl:IconButton Name=\"button_Delete\" IconName=\"TrashS\" Click=\"button_Delete_Click\">\r\n                  <Button.ToolTip>\r\n                     <ToolTip Content=\"{x:Static p:Resources.DeleteTemplateTooltip}\" Placement=\"Top\"/>\r\n                  </Button.ToolTip>\r\n               </ctrl:IconButton>\r\n            </StackPanel>\r\n            <ListBox Name=\"listBox_MappingTemplates\" ItemContainerStyle=\"{StaticResource ListBoxItemStyle}\" \r\n                     Width=\"{Binding ActualWidth, ElementName=stackPanel_buttons}\" ScrollViewer.VerticalScrollBarVisibility=\"Auto\"\r\n                     SelectionChanged=\"listBox_MappingTemplates_SelectionChanged\"\r\n                     Background=\"{DynamicResource AdskComponentSurface200BackgroundColor}\" Margin=\"0,4,0,4\">\r\n               <ListBox.Resources>\r\n                  <Style TargetType=\"ToolTip\" BasedOn=\"{x:Static weaveRoot:Styles.ToolTipStyle}\">\r\n                     <Setter Property=\"Placement\" Value=\"Bottom\"/>\r\n                  </Style>\r\n                </ListBox.Resources>\r\n            </ListBox>\r\n         </DockPanel>\r\n      </Grid>\r\n\r\n      <Grid Grid.Column=\"1\">\r\n         <DockPanel>\r\n            <StackPanel Orientation=\"Horizontal\" DockPanel.Dock=\"Top\" Margin=\"0,10,0,4\">\r\n               <TextBlock Text=\"{x:Static p:Resources.TemplateSettings}\" weave:TextBlockProperties.Variant=\"BodyBold\"/>\r\n            </StackPanel>\r\n            <DockPanel DockPanel.Dock=\"Top\" HorizontalAlignment=\"Stretch\" Margin=\"0,4,0,4\">\r\n               <ctrl:Search Name=\"textBox_Search\" HintText=\"{x:Static p:Resources.Search}\" Width=\"335\" TextChanged=\"textBox_Search_TextChanged\" VerticalAlignment=\"Center\"/>\r\n               <Button Name=\"button_ResetAll\" HorizontalAlignment=\"Right\" VerticalContentAlignment=\"Center\" weave:ButtonProperties.Variant=\"Flat\" Click=\"button_ResetAll_Click\" VerticalAlignment=\"Center\">\r\n                  <StackPanel Orientation=\"Horizontal\" Width=\"Auto\" VerticalAlignment=\"Center\">\r\n                     <Image Source=\"../icons/data-refresh.png\" Width=\"Auto\" HorizontalAlignment=\"Stretch\"/>\r\n                     <Label Name=\"label_ResetAll\" Content=\"{x:Static p:Resources.ResetAll}\" Margin=\"4,0,0,0\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\"/>\r\n                  </StackPanel>\r\n                  <Button.ToolTip>\r\n                     <ToolTip Content=\"{x:Static p:Resources.ResetToDefault}\" Placement=\"Left\"/>\r\n                  </Button.ToolTip>\r\n               </Button>\r\n            </DockPanel>\r\n\r\n            <DataGrid Name=\"dataGrid_CategoryMapping\" SelectionMode=\"Single\" AutoGenerateColumns=\"False\"\r\n                      HeadersVisibility=\"Column\" ScrollViewer.VerticalScrollBarVisibility=\"Auto\" \r\n                      CanUserAddRows=\"False\" CanUserSortColumns=\"False\" CanUserReorderColumns=\"False\"\r\n                      weave:DataGridProperties.Stripped=\"True\" RowHeight=\"27\" Margin=\"0,4,0,4\">\r\n               <DataGrid.Columns>\r\n\r\n                  <DataGridTemplateColumn IsReadOnly=\"True\">\r\n                     <DataGridTemplateColumn.CellTemplate>\r\n                        <DataTemplate>\r\n                           <StackPanel Orientation=\"Horizontal\">\r\n                              <CheckBox Name=\"checkBox_ExportFlag\" IsChecked=\"{Binding MappingInfo.ExportFlag, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\r\n                                        Click=\"ExportFlagClick\" Style=\"{StaticResource CheckBoxStyle}\"\r\n                                        AutomationProperties.AutomationId=\"{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, \r\n                                                                           StringFormat=checkBox_ExportFlag_{0}, \r\n                                                                           Converter={StaticResource RowIndexConverter} }\">\r\n                                 <CheckBox.ToolTip>\r\n                                    <ToolTip Content=\"{x:Static p:Resources.SelectedCheckboxTooltip}\" Placement=\"Bottom\"/>\r\n                                 </CheckBox.ToolTip>\r\n                              </CheckBox>\r\n                           </StackPanel>\r\n                        </DataTemplate>\r\n                     </DataGridTemplateColumn.CellTemplate>\r\n\r\n                     <DataGridTemplateColumn.HeaderTemplate>\r\n                        <DataTemplate>\r\n                           <StackPanel Orientation=\"Horizontal\">\r\n                              <CheckBox Name=\"checkBox_ExportFlagAll\" Style=\"{StaticResource CheckBoxStyle}\" \r\n                                        IsChecked=\"{Binding DataContext.ExportFlagAll, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}\">\r\n                                 <CheckBox.ToolTip>\r\n                                    <ToolTip Content=\"{x:Static p:Resources.SelectedCheckboxTooltip}\" Placement=\"Bottom\"/>\r\n                                 </CheckBox.ToolTip>\r\n                              </CheckBox>\r\n                              <ToggleButton Click=\"ExpandAllClick\" Name=\"button_ExpandAll\" Style=\"{StaticResource ToggleButtonStyle}\" Width=\"12\" Height=\"12\" VerticalAlignment=\"Center\" Margin=\"0,2,0,2\" Padding=\"1\" BorderThickness=\"0\" Background=\"Transparent\">\r\n                                 <Image>\r\n                                    <Image.Style>\r\n                                       <Style TargetType=\"{x:Type Image}\">\r\n                                          <Style.Triggers>\r\n                                             <DataTrigger Binding=\"{Binding Path=IsChecked, ElementName=button_ExpandAll}\" Value=\"True\">\r\n                                                <Setter Property=\"Source\" Value=\"../icons/arrow_down.png\"/>\r\n                                             </DataTrigger>\r\n                                             <DataTrigger Binding=\"{Binding Path=IsChecked, ElementName=button_ExpandAll}\" Value=\"False\">\r\n                                                <Setter Property=\"Source\" Value=\"../icons/arrow_right.png\"/>\r\n                                             </DataTrigger>\r\n                                          </Style.Triggers>\r\n                                       </Style>\r\n                                    </Image.Style>\r\n                                 </Image>\r\n                              </ToggleButton>\r\n                           </StackPanel>\r\n                        </DataTemplate>\r\n                     </DataGridTemplateColumn.HeaderTemplate>\r\n\r\n                     <DataGridTemplateColumn.CellStyle>\r\n                        <Style TargetType=\"DataGridCell\" BasedOn=\"{x:Static weaveRoot:Styles.DataGridCellStyle}\">\r\n                           <Setter Property=\"Template\">\r\n                              <Setter.Value>\r\n                                 <ControlTemplate TargetType=\"DataGridCell\">\r\n                                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\"\r\n                                        BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                                        Background=\"{TemplateBinding Background}\"\r\n                                        SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\">\r\n\r\n                                       <StackPanel Orientation=\"Horizontal\" Margin=\"{TemplateBinding Padding}\">\r\n                                          <ContentPresenter ContentTemplate=\"{TemplateBinding ContentTemplate}\"\r\n                                                        Content=\"{TemplateBinding Content}\"\r\n                                                        ContentStringFormat=\"{TemplateBinding ContentStringFormat}\"\r\n                                                        SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"\r\n                                                        VerticalAlignment=\"{TemplateBinding VerticalAlignment}\" />\r\n\r\n                                          <ToggleButton Name=\"button_RowExpand\" Width=\"12\" Height=\"12\" VerticalAlignment=\"Center\" Margin=\"0,2,0,2\" Padding=\"1\" BorderThickness=\"0\" Background=\"Transparent\"\r\n                                            IsChecked=\"{Binding Path=IsExpanded, UpdateSourceTrigger=PropertyChanged}\"\r\n                                            ClickMode=\"Press\" Style=\"{StaticResource ToggleButtonStyle}\">\r\n                                             <Image>\r\n                                                <Image.Style>\r\n                                                   <Style TargetType=\"{x:Type Image}\">\r\n                                                      <Style.Triggers>\r\n                                                         <DataTrigger Binding=\"{Binding IsExpanded}\" Value=\"true\">\r\n                                                            <Setter Property=\"Source\" Value=\"../icons/arrow_down.png\"/>\r\n                                                         </DataTrigger>\r\n                                                         <DataTrigger Binding=\"{Binding IsExpanded}\" Value=\"false\">\r\n                                                            <Setter Property=\"Source\" Value=\"../icons/arrow_right.png\"/>\r\n                                                         </DataTrigger>\r\n                                                      </Style.Triggers>\r\n                                                   </Style>\r\n                                                </Image.Style>\r\n                                             </Image>\r\n                                          </ToggleButton>\r\n                                       </StackPanel>\r\n                                    </Border>\r\n                                    <ControlTemplate.Triggers>\r\n                                       <DataTrigger Binding=\"{Binding HasChildren}\" Value=\"False\">\r\n                                          <Setter TargetName=\"button_RowExpand\" Property=\"Visibility\" Value=\"Hidden\"/>\r\n                                       </DataTrigger>\r\n                                    </ControlTemplate.Triggers>\r\n                                 </ControlTemplate>\r\n                              </Setter.Value>\r\n                           </Setter>\r\n                        </Style>\r\n                     </DataGridTemplateColumn.CellStyle>\r\n                  </DataGridTemplateColumn>\r\n\r\n                  <DataGridTextColumn Header=\"{x:Static p:Resources.RevitCategory}\" Binding=\"{Binding MappingInfo.CategoryName}\" Width=\"*\" IsReadOnly=\"True\"\r\n                                      EditingElementStyle=\"{x:Static  weaveRoot:Styles.DataGridTextColumnEditingElementStyle}\" CellStyle=\"{StaticResource DataGridCellStyle}\">\r\n\r\n                     <DataGridTextColumn.ElementStyle>\r\n                        <Style TargetType=\"TextBlock\" BasedOn=\"{x:Static weaveRoot:Styles.DataGridTextColumnElementStyle}\">\r\n                           <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\r\n                           <Setter Property=\"Margin\" Value=\"{Binding Level,Converter={StaticResource LevelToMarginConverter}}\" />\r\n                        </Style>\r\n                     </DataGridTextColumn.ElementStyle>\r\n                  </DataGridTextColumn>\r\n\r\n                  <DataGridTemplateColumn Header=\"{x:Static p:Resources.IFCClass}\" Width=\"*\" IsReadOnly=\"True\" CellStyle=\"{StaticResource DataGridCellStyle}\">\r\n                     <DataGridTemplateColumn.CellTemplate>\r\n                        <DataTemplate>\r\n                           <Grid>\r\n                              <Grid.Resources>\r\n                                 <local:IFCClassNameConverter x:Key=\"IFCClassNameConverter\"/>\r\n                              </Grid.Resources>\r\n\r\n                              <Grid.ColumnDefinitions>\r\n                                 <ColumnDefinition Width=\"*\"/>\r\n                                 <ColumnDefinition Width=\"auto\"/>\r\n                              </Grid.ColumnDefinitions>\r\n\r\n                              <Border Grid.Column=\"0\">\r\n                                 <Label Name=\"IFCClass\" Content=\"{Binding MappingInfo.IfcClass, Converter={StaticResource IFCClassNameConverter}}\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\"/>\r\n                              </Border>\r\n                              <Border Grid.Column=\"1\">\r\n                                 <ctrl:IconButton Name=\"button_IFCClass\" Click=\"EntityPicker\" IconName=\"MoreS\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\">\r\n                                    <Button.ToolTip>\r\n                                       <ToolTip Content=\"{x:Static p:Resources.MoreTooltip}\" Placement=\"Bottom\"/>\r\n                                    </Button.ToolTip>\r\n                                 </ctrl:IconButton>\r\n                              </Border>\r\n                           </Grid>\r\n                        </DataTemplate>\r\n                     </DataGridTemplateColumn.CellTemplate>\r\n                  </DataGridTemplateColumn>\r\n\r\n                  <DataGridTemplateColumn Header=\"{x:Static p:Resources.PredefinedType}\" Width=\"*\" IsReadOnly=\"True\" CellStyle=\"{StaticResource DataGridCellStyle}\">\r\n                     <DataGridTemplateColumn.CellTemplate>\r\n                        <DataTemplate>\r\n                           <Grid>\r\n                              <Grid.ColumnDefinitions>\r\n                                 <ColumnDefinition Width=\"*\"/>\r\n                                 <ColumnDefinition Width=\"auto\"/>\r\n                              </Grid.ColumnDefinitions>\r\n\r\n                              <Border Grid.Column=\"0\">\r\n                                 <Label Name=\"PredefinedType\" Content=\"{Binding MappingInfo.PredefinedType}\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" />\r\n                              </Border>\r\n                              <Border Grid.Column=\"1\">\r\n                                 <ctrl:IconButton Name=\"button_PredefinedType\" Click=\"EntityPicker\" IconName=\"MoreS\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\">\r\n                                    <Button.ToolTip>\r\n                                       <ToolTip Content=\"{x:Static p:Resources.MoreTooltip}\" Placement=\"Bottom\"/>\r\n                                    </Button.ToolTip>\r\n                                 </ctrl:IconButton>\r\n                              </Border>\r\n                           </Grid>\r\n                        </DataTemplate>\r\n                     </DataGridTemplateColumn.CellTemplate>\r\n                  </DataGridTemplateColumn>\r\n\r\n                  <DataGridTemplateColumn Header=\"{x:Static p:Resources.UserDefinedType}\" Width=\"*\" IsReadOnly=\"True\">\r\n                     <DataGridTemplateColumn.CellTemplate>\r\n                        <DataTemplate>\r\n                           <TextBox Name=\"textBox_UserDefined\" Text=\"{Binding MappingInfo.UserDefinedType, UpdateSourceTrigger=PropertyChanged}\" IsEnabled=\"{Binding MappingInfo.UserDefinedTypeEnabled}\"/>\r\n                        </DataTemplate>\r\n                     </DataGridTemplateColumn.CellTemplate>\r\n                  </DataGridTemplateColumn>\r\n\r\n                  <DataGridTemplateColumn Header=\"{x:Static p:Resources.Reset}\" IsReadOnly=\"True\">\r\n                     <DataGridTemplateColumn.CellTemplate>\r\n                        <DataTemplate>\r\n                           <ctrl:IconButton Name=\"button_Reset\" IconName=\"DataRefreshS\" Click=\"button_Reset_Click\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\r\n                              <Button.ToolTip>\r\n                                 <ToolTip Content=\"{x:Static p:Resources.ResetRowToDefault}\" Placement=\"Bottom\"/>\r\n                              </Button.ToolTip>\r\n                           </ctrl:IconButton>\r\n                        </DataTemplate>\r\n                     </DataGridTemplateColumn.CellTemplate>\r\n                  </DataGridTemplateColumn>\r\n\r\n               </DataGrid.Columns>\r\n            </DataGrid>\r\n         </DockPanel>\r\n      </Grid>\r\n\r\n      <StackPanel Orientation=\"Horizontal\" Grid.Row=\"1\" Grid.ColumnSpan=\"2\" VerticalAlignment=\"Center\">\r\n         <ctrl:WeaveIcon IconName=\"InfoS\" VerticalAlignment=\"Top\" Margin=\"0,0,5,0\"/>\r\n         <TextBlock Name=\"textBlock_Help\" HorizontalAlignment=\"Left\" >\r\n         <Hyperlink Click=\"OnHelpClick\">\r\n            <Run Name=\"run_Help\" Text=\"{x:Static p:Resources.CategoryMappingHelp}\" x:Uid=\"LearnMoreHyperlink\"/>\r\n         </Hyperlink>\r\n         </TextBlock>\r\n      </StackPanel>\r\n\r\n\r\n      <StackPanel Orientation=\"Horizontal\" Grid.Column=\"1\" Grid.Row=\"1\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\" weave:PanelProperties.Spacing=\"S\">\r\n         <Button x:Name=\"button_Ok\" Content=\"{x:Static p:Resources.OK}\" HorizontalAlignment=\"Left\" weave:ButtonProperties.Variant=\"Solid\" Click=\"button_Ok_Click\" IsDefault=\"True\"/>\r\n         <Button x:Name=\"button_Cancel\" Content=\"{x:Static p:Resources.Cancel}\" HorizontalAlignment=\"Left\" weave:ButtonProperties.Variant=\"Outline\" Click=\"button_Cancel_Click\" Margin=\"0,0,7,0\" IsCancel=\"True\"/>\r\n      </StackPanel>\r\n\r\n   </Grid>\r\n</auiw:ChildWindow>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCCategoryMapping/IFCCategoryMapping.xaml.cs",
    "content": "using Autodesk.Revit.DB;\r\nusing Autodesk.Revit.UI;\r\nusing Autodesk.UI.Windows;\r\nusing BIM.IFC.Export.UI.Properties;\r\nusing Revit.IFC.Export.Utility;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.IO;\r\nusing System.Globalization;\r\nusing System.Linq;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Data;\r\nusing System.Windows;\r\nusing System;\r\nusing System.Windows.Input;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   public class IFCMappingInfo : INotifyPropertyChanged\r\n   {\r\n      private string m_IfcClass = null;\r\n\r\n      private string m_PredefinedType = null;\r\n\r\n      private bool? m_ExportFlag = false;\r\n\r\n      /// <summary>\r\n      /// Flag to determine if a category is exported or not.\r\n      /// </summary>\r\n      public bool? ExportFlag\r\n      {\r\n         get { return m_ExportFlag; }\r\n         set\r\n         {\r\n            m_ExportFlag = value;\r\n            OnPropertyChanged();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Revit category name.\r\n      /// </summary>\r\n      public string CategoryName { get; set; }\r\n\r\n      /// <summary>\r\n      /// The corresponding IFC entity name.\r\n      /// </summary>\r\n      public string IfcClass\r\n      {\r\n         get { return m_IfcClass; }\r\n         set\r\n         {\r\n            m_IfcClass = value;\r\n            OnPropertyChanged();\r\n         }\r\n      }\r\n\r\n      public bool UserDefinedTypeEnabled\r\n      {\r\n         get\r\n         {\r\n            return (string.Compare(m_PredefinedType, \"USERDEFINED\") == 0);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The predefined type associated to the IFC entity name.\r\n      /// </summary>\r\n      public string PredefinedType\r\n      {\r\n         get { return m_PredefinedType; }\r\n         set\r\n         {\r\n            m_PredefinedType = value;\r\n            if (string.Compare(m_PredefinedType, \"USERDEFINED\") != 0)\r\n            {\r\n               UserDefinedType = string.Empty;\r\n            }\r\n            OnPropertyChanged();\r\n            OnPropertyChanged(\"UserDefinedTypeEnabled\");\r\n         }\r\n      }\r\n\r\n      private string m_UserDefinedType = null;\r\n\r\n      /// <summary>\r\n      /// An arbitrary type string, if PredefinedType is user defined.\r\n      /// </summary>\r\n      public string UserDefinedType \r\n      { \r\n         get \r\n         { \r\n            return m_UserDefinedType; \r\n         } \r\n         set\r\n         {\r\n            m_UserDefinedType = value;\r\n            OnPropertyChanged();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Custom subcategory Id for extra categories\r\n      /// </summary>\r\n      public CustomSubCategoryId CustomSubCategoryId { get; set; }\r\n\r\n\r\n      public event PropertyChangedEventHandler PropertyChanged;\r\n\r\n      protected void OnPropertyChanged([CallerMemberName] string name = null)\r\n      {\r\n         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));\r\n      }\r\n   }\r\n\r\n\r\n   /// <summary>\r\n   /// Interaction logic for IFCCategoryMapping.xaml\r\n   /// </summary>\r\n   public partial class IFCCategoryMapping : ChildWindow, INotifyPropertyChanged\r\n   {\r\n      private bool? m_ExportFlagAll = false;\r\n\r\n      /// <summary>\r\n      /// Flag to determine if all categories are exported or not.\r\n      /// </summary>\r\n      public bool? ExportFlagAll\r\n      {\r\n         get { return m_ExportFlagAll; }\r\n         set\r\n         {\r\n            m_ExportFlagAll = value;\r\n            OnPropertyChanged(nameof(ExportFlagAll));\r\n            ExportFlagAllClick();\r\n         }\r\n      }\r\n\r\n      public event PropertyChangedEventHandler PropertyChanged;\r\n\r\n      protected void OnPropertyChanged([CallerMemberName] string name = null)\r\n      {\r\n         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));\r\n      }\r\n\r\n      /// <summary>\r\n      /// The IFC Export Configuration\r\n      /// </summary>\r\n      private IFCExportConfiguration _ifcExportConfiguration = new();\r\n\r\n      private TransactionGroup groupTransaction;\r\n      private Transaction templateTransaction;\r\n\r\n      public IFCCategoryMapping(Window owner, IFCExportConfiguration configuration)\r\n      {\r\n         Owner = owner;\r\n         _ifcExportConfiguration = configuration;\r\n\r\n         Initialize();\r\n      }\r\n\r\n      public IFCCategoryMapping(Autodesk.Revit.UI.UIApplication app)\r\n      {\r\n         SetParent(app.MainWindowHandle);\r\n         Initialize();\r\n      }\r\n\r\n      private void Initialize()\r\n      {\r\n         InitializeComponent();\r\n         DataContext = this;\r\n         groupTransaction = new TransactionGroup(IFCCommandOverrideApplication.TheDocument);\r\n         templateTransaction = new Transaction(IFCCommandOverrideApplication.TheDocument, Properties.Resources.ModifyIFCCategoryMapping);\r\n         StartTransactionGroup();\r\n\r\n         textBox_Search.Focus();\r\n\r\n         IFCCategoryTemplate currentTemplate = GetMappingTemplateFromConfiguration(IFCCommandOverrideApplication.TheDocument, _ifcExportConfiguration);\r\n         InitializeTemplateList(currentTemplate?.Name);\r\n      }\r\n\r\n      private static IFCCategoryTemplate GetMappingTemplateFromConfiguration(Document doc, IFCExportConfiguration configuration)\r\n      {\r\n         if (configuration == null || doc == null)\r\n            return null;\r\n\r\n         IFCCategoryTemplate currentTemplate = null;\r\n\r\n         string configurationTemplateName = configuration.CategoryMapping;\r\n         if (!string.IsNullOrEmpty(configurationTemplateName))\r\n            currentTemplate = IFCCategoryTemplate.FindByName(doc, configurationTemplateName);\r\n\r\n         currentTemplate ??= IFCCategoryTemplate.GetOrCreateInSessionTemplate(doc);\r\n\r\n         return currentTemplate;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes the mapping templates listbox.\r\n      /// </summary>\r\n      private void InitializeTemplateList(string activeTemplateName)\r\n      {\r\n         listBox_MappingTemplates.Items.Clear();\r\n\r\n         IFCCategoryTemplate inSessionTemplate = IFCCategoryTemplate.GetOrCreateInSessionTemplate(IFCCommandOverrideApplication.TheDocument);\r\n         if (inSessionTemplate == null)\r\n            return;\r\n\r\n         string inSessionName = inSessionTemplate.Name;\r\n         listBox_MappingTemplates.Items.Add(inSessionName);\r\n         IList<string> templateNames = IFCCategoryTemplate.ListNames(IFCCommandOverrideApplication.TheDocument);\r\n         foreach (string name in templateNames)\r\n            listBox_MappingTemplates.Items.Add(name);\r\n\r\n         // Update category list to include possibly added categories\r\n         inSessionTemplate.UpdateCategoryList(IFCCommandOverrideApplication.TheDocument);\r\n         foreach (string name in templateNames)\r\n         {\r\n            IFCCategoryTemplate template = IFCCategoryTemplate.FindByName(IFCCommandOverrideApplication.TheDocument, name);\r\n            if (template == null)\r\n               return;\r\n\r\n            template.UpdateCategoryList(IFCCommandOverrideApplication.TheDocument);\r\n         }\r\n\r\n         if (activeTemplateName == null || !templateNames.Contains(activeTemplateName))\r\n            listBox_MappingTemplates.SelectedItem = inSessionName;\r\n         else\r\n            listBox_MappingTemplates.SelectedItem = activeTemplateName;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes the mapping data grid.\r\n      /// </summary>\r\n      private void InitializeMappingGrid()\r\n      {\r\n         IFCCategoryTemplate currentTemplate = GetCurrentTemplate();\r\n         if (currentTemplate == null)\r\n            return;\r\n\r\n         IDictionary<ExportIFCCategoryKey, ExportIFCCategoryInfo> mappingTable = currentTemplate.GetCategoryMappingTable(IFCCommandOverrideApplication.TheDocument);\r\n         CategoryMappingManager categoryManager = new CategoryMappingManager();\r\n\r\n         // Save last category node to fill it with children\r\n         // The dictionary is sorted (sub-categories are met after the corresponding category)\r\n         Tuple<string, CategoryMappingNode> lastCategoryNode = null;\r\n         ExportFlagAll = true;\r\n\r\n         foreach (var mappingPair in mappingTable)\r\n         {\r\n            bool isCategory = string.IsNullOrEmpty(mappingPair.Key.SubCategoryName);\r\n            bool isSpecialSubCategory = (mappingPair.Key.CustomSubCategoryId != CustomSubCategoryId.None);\r\n            \r\n            string categoryName;\r\n            if (isCategory)\r\n            {\r\n               categoryName = mappingPair.Key.CategoryName;\r\n            }\r\n            else if (isSpecialSubCategory)\r\n            {\r\n               categoryName = mappingPair.Key.CategoryName + \" (\" + mappingPair.Key.SubCategoryName + \")\";\r\n            }\r\n            else\r\n            {\r\n               categoryName = mappingPair.Key.SubCategoryName;\r\n            }\r\n            \r\n\r\n            // Export all checkbox becomes indeterminate\r\n            if ((!mappingPair.Value.IFCExportFlag) && (ExportFlagAll != null))\r\n               ExportFlagAll = null;\r\n\r\n            CategoryMappingNode createdNode = new CategoryMappingNode()\r\n            {\r\n               MappingInfo = new IFCMappingInfo\r\n               {\r\n                  ExportFlag = mappingPair.Value.IFCExportFlag,\r\n                  CategoryName = categoryName,\r\n                  IfcClass = mappingPair.Value.IFCEntityName,\r\n                  PredefinedType = mappingPair.Value.IFCPredefinedType,\r\n                  UserDefinedType = mappingPair.Value.IFCUserDefinedType,\r\n                  CustomSubCategoryId = mappingPair.Key.CustomSubCategoryId\r\n               },\r\n               DataManager = categoryManager\r\n            };\r\n\r\n            if (isCategory)\r\n            {\r\n               categoryManager.Data.Add(createdNode);\r\n               lastCategoryNode = Tuple.Create(mappingPair.Key.CategoryName, createdNode);\r\n            }\r\n            else\r\n            {\r\n               string lastCategoryName = lastCategoryNode?.Item1;\r\n               if (lastCategoryName?.Equals(mappingPair.Key.CategoryName) ?? false)\r\n               {\r\n                  lastCategoryNode.Item2.AddChild(createdNode);\r\n               }\r\n            }\r\n         }\r\n\r\n         foreach (var node in categoryManager.Data)\r\n         {\r\n            node.IsVisible = true;\r\n            node.IsExpanded = false;\r\n         }\r\n\r\n         categoryManager.Initialize();\r\n         dataGrid_CategoryMapping.ItemsSource = categoryManager;\r\n         textBox_Search.Text = string.Empty;\r\n      }\r\n\r\n      protected override bool OnContextHelp()\r\n      {\r\n         ContextualHelp help = new ContextualHelp(ContextualHelpType.ContextId, \"HDialog_IFC_CategoryMapping\");\r\n         help.Launch();\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns true is the name is equal to in-session template name\r\n      /// </summary>\r\n      static bool IsInSessionTemplate(string templateName)\r\n      {\r\n         string inSessionName = GetInSessionTemplateName();\r\n         return templateName.Equals(inSessionName);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns in-session template name\r\n      /// </summary>\r\n      static string GetInSessionTemplateName()\r\n      {\r\n         IFCCategoryTemplate inSessionTemplate = IFCCategoryTemplate.GetOrCreateInSessionTemplate(IFCCommandOverrideApplication.TheDocument);\r\n         return inSessionTemplate?.Name ?? string.Empty;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the list of templates in the document including the in-session one\r\n      /// </summary>\r\n      static IList<string> GetAllTemplateNames()\r\n      {\r\n         IList<string> templateNames = IFCCategoryTemplate.ListNames(IFCCommandOverrideApplication.TheDocument) ?? new List<string>();\r\n         templateNames.Add(GetInSessionTemplateName());\r\n\r\n         return templateNames;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get template active in list\r\n      /// </summary>\r\n      private IFCCategoryTemplate GetCurrentTemplate()\r\n      {\r\n         return GetTemplateByName(listBox_MappingTemplates.SelectedItem as string);\r\n      }\r\n\r\n      private IFCCategoryTemplate GetTemplateByName(string templateName)\r\n      {\r\n         if (string.IsNullOrEmpty(templateName))\r\n            return null;\r\n\r\n         IFCCategoryTemplate foundTemplate = null;\r\n         if (IsInSessionTemplate(templateName))\r\n            foundTemplate = IFCCategoryTemplate.GetOrCreateInSessionTemplate(IFCCommandOverrideApplication.TheDocument);\r\n         else\r\n            foundTemplate = IFCCategoryTemplate.FindByName(IFCCommandOverrideApplication.TheDocument, templateName);\r\n\r\n         return foundTemplate;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the controls.\r\n      /// </summary>\r\n      /// <param name=\"isInSession\">Value of whether the configuration is in-session or not.</param>\r\n      private void UpdateTemplateControls(bool isInSessionSelected)\r\n      {\r\n         button_Rename.IsEnabled = !isInSessionSelected;\r\n         button_Delete.IsEnabled = !isInSessionSelected;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns true if the name is valid\r\n      /// </summary>\r\n      public static bool IsValidName(string templateName, IList<string> existingNames)\r\n      {\r\n         templateName = templateName?.TrimStart()?.TrimEnd();\r\n         return (!(string.IsNullOrWhiteSpace(templateName)\r\n            || (existingNames?.Contains(templateName, System.StringComparer.OrdinalIgnoreCase) ?? false)))\r\n            && IFCCategoryTemplate.IsValidName(IFCCommandOverrideApplication.TheDocument, templateName);\r\n      }\r\n\r\n      private void listBox_MappingTemplates_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)\r\n      {\r\n         // Save current template before switching to new one\r\n         if (e.RemovedItems.Count > 0)\r\n         {\r\n            string prevTemplateName = e.RemovedItems[0] as string;\r\n            if (!string.IsNullOrEmpty(prevTemplateName))\r\n            {\r\n               UpdateTemplateFromGrid(prevTemplateName);\r\n\r\n               if (templateTransaction.HasStarted())\r\n                  templateTransaction.Commit();\r\n\r\n               if (templateTransaction.HasEnded())\r\n                  templateTransaction.Start();\r\n            }\r\n         }\r\n\r\n         IFCCategoryTemplate currTemplate = GetCurrentTemplate();\r\n         if (currTemplate == null)\r\n            return;\r\n\r\n         InitializeMappingGrid();\r\n\r\n         bool isInSessionSelected = IsInSessionTemplate(currTemplate.Name);\r\n         UpdateTemplateControls(isInSessionSelected);\r\n\r\n         if (isInSessionSelected)\r\n            IFCCategoryTemplate.ResetActiveTemplate(IFCCommandOverrideApplication.TheDocument);\r\n         else\r\n            currTemplate.SetActiveTemplate();\r\n      }\r\n\r\n      private void textBox_Search_TextChanged(object sender, TextChangedEventArgs e)\r\n      {\r\n         string partialWord = textBox_Search.Text ?? string.Empty;\r\n\r\n         CategoryMappingManager currentManager = dataGrid_CategoryMapping.ItemsSource as CategoryMappingManager;\r\n\r\n         currentManager.Reset(resetVisibility: true);\r\n\r\n         foreach (CategoryMappingNode parentNode in currentManager.Data)\r\n         {\r\n            bool parentMatches = parentNode.MappingInfo.CategoryName.Contains(partialWord, StringComparison.InvariantCultureIgnoreCase);\r\n            if (parentMatches)\r\n            {\r\n               // Show expanded parent with all its children\r\n               parentNode.IsVisible = true;\r\n               parentNode.IsExpanded = true;\r\n               continue;\r\n            }\r\n\r\n\r\n            IList<CategoryMappingNode> matchedChildren = parentNode.Children\r\n               .Where(x => x.MappingInfo.CategoryName.Contains(partialWord, StringComparison.InvariantCultureIgnoreCase)).ToList();\r\n\r\n            if (matchedChildren.Count > 0)\r\n            {\r\n               // Show expanded parent with matched children only\r\n               parentNode.IsVisible = true;\r\n               parentNode.IsExpanded = true;\r\n               foreach (CategoryMappingNode child in parentNode.Children)\r\n               {\r\n                  if (!matchedChildren.Contains(child))\r\n                  {\r\n                     child.IsVisible = false;\r\n                     child.IsHiddenByFilter = true;\r\n                  }\r\n               }\r\n            }\r\n            else\r\n            {\r\n               foreach (CategoryMappingNode child in parentNode.Children)\r\n               {\r\n                  child.IsHiddenByFilter = true;\r\n               }\r\n               parentNode.IsHiddenByFilter = true;\r\n            }\r\n         }\r\n\r\n         currentManager.Initialize();\r\n      }\r\n\r\n      private void button_Add_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCTemplateData data = new(Properties.Resources.NewTemplateDefaultName, \r\n            IFCCategoryTemplate.ListNames(IFCCommandOverrideApplication.TheDocument), \r\n            isCategoryMapping: true, IFCTemplateData.DialogTypeEnum.Template);\r\n         IFCNewTemplate settingsTemplateDialog = new(data);\r\n         settingsTemplateDialog.Owner = this;\r\n         bool? ret = settingsTemplateDialog.ShowDialog();\r\n         if (ret.HasValue && ret.Value == true)\r\n         {\r\n            string templateName = settingsTemplateDialog.Data.NewName;\r\n            if (!string.IsNullOrEmpty(templateName) && !listBox_MappingTemplates.Items.Contains(templateName))\r\n            {\r\n               IFCCategoryTemplate newCategoryTemplate = IFCCategoryTemplate.Create(IFCCommandOverrideApplication.TheDocument, templateName);\r\n               newCategoryTemplate?.UpdateCategoryList(IFCCommandOverrideApplication.TheDocument);\r\n               listBox_MappingTemplates.Items.Add(templateName);\r\n               listBox_MappingTemplates.SelectedItem = newCategoryTemplate.Name;\r\n            }\r\n         }\r\n      }\r\n\r\n      private void ExportFlagClick(object sender, RoutedEventArgs e)\r\n      {\r\n         CategoryMappingManager currentManager = dataGrid_CategoryMapping.ItemsSource as CategoryMappingManager;\r\n\r\n         CheckBox checkBox = sender as CheckBox;\r\n         if (checkBox == null)\r\n            return;\r\n\r\n         CategoryMappingNode currMappingNode = checkBox.DataContext as CategoryMappingNode;\r\n         if (currMappingNode == null)\r\n            return;\r\n\r\n         IFCMappingInfo mappingInfo = currMappingNode.MappingInfo;\r\n         if (mappingInfo == null)\r\n            return;\r\n\r\n         bool exportFlag = mappingInfo.ExportFlag ?? true;\r\n\r\n         if (currMappingNode.HasChildren)\r\n         {\r\n            // If the parent is expanded, then we will skip invisible children.\r\n            // Otherwise we will include them in the search.\r\n            bool isExpanded = currMappingNode.IsExpanded;\r\n\r\n            foreach (CategoryMappingNode child in currMappingNode.Children)\r\n            {\r\n               IFCMappingInfo childMappingInfo = child.MappingInfo;\r\n               if (childMappingInfo == null)\r\n                  continue;\r\n\r\n               if (isExpanded && !currentManager.Contains(child))\r\n                  continue;\r\n\r\n               childMappingInfo.ExportFlag = exportFlag;\r\n            }\r\n         }\r\n         else if (currMappingNode.Parent != null && exportFlag)\r\n         {\r\n            IFCMappingInfo parentMappingInfo = currMappingNode.Parent.MappingInfo;\r\n            if (parentMappingInfo != null)\r\n               parentMappingInfo.ExportFlag = true;\r\n         }\r\n\r\n         if (currMappingNode.Parent != null)\r\n         {\r\n            // Set node's parent checkbox to indeterminate state if needed\r\n            IFCMappingInfo parentMappingInfo = currMappingNode.Parent.MappingInfo;\r\n            if (parentMappingInfo != null)\r\n               parentMappingInfo.ExportFlag = UpdateCheckboxFlag(currMappingNode.Parent.Children);\r\n         }\r\n         \r\n         ExportFlagAll = UpdateCheckboxFlag(currentManager.ToList());\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates indeterminate state if needed.\r\n      /// </summary>\r\n      private bool? UpdateCheckboxFlag(List<CategoryMappingNode> nodesList)\r\n      {\r\n         bool existsUnchecked = nodesList?.Any(node => (node.MappingInfo?.ExportFlag == false)) ?? false;\r\n         if (existsUnchecked)\r\n            return null;\r\n         \r\n         return true;\r\n      }\r\n\r\n      private void ExportFlagAllClick()\r\n      {\r\n         bool? newState = ExportFlagAll;\r\n         if (!newState.HasValue)\r\n            return;\r\n\r\n         CategoryMappingManager currentManager = dataGrid_CategoryMapping.ItemsSource as CategoryMappingManager;\r\n         if (currentManager == null)\r\n            return;\r\n\r\n         foreach (CategoryMappingNode currMappingNode in currentManager.Data)\r\n         {\r\n            if (currMappingNode == null)\r\n               continue;\r\n\r\n            if (currMappingNode.IsVisible == false)\r\n               continue;\r\n\r\n            foreach (var childNode in currMappingNode.Children)\r\n            {\r\n               // Skip expanded but not visible children.\r\n               // Note that in case of newState == false we don't skip any children\r\n               // because unchecked parent can't have checked children\r\n               if (newState.Value\r\n                  && currMappingNode.IsExpanded && !currentManager.Contains(childNode))\r\n                  continue;\r\n\r\n               if (childNode?.MappingInfo != null)\r\n                  childNode.MappingInfo.ExportFlag = newState.Value;\r\n            }\r\n\r\n            IFCMappingInfo mappingInfo = currMappingNode.MappingInfo;\r\n            if (mappingInfo == null)\r\n               continue;\r\n\r\n            mappingInfo.ExportFlag = newState.Value;\r\n         }\r\n      }\r\n\r\n      private void ExpandAllClick(object sender, RoutedEventArgs e)\r\n      {\r\n         bool? newState = (sender as System.Windows.Controls.Primitives.ToggleButton)?.IsChecked;\r\n         if (!newState.HasValue)\r\n            return;\r\n\r\n         CategoryMappingManager currentManager = dataGrid_CategoryMapping.ItemsSource as CategoryMappingManager;\r\n\r\n         foreach (CategoryMappingNode currMappingNode in currentManager.Data)\r\n         {\r\n            if (currMappingNode == null)\r\n               continue;\r\n\r\n            if (currMappingNode.IsVisible == false)\r\n               continue;\r\n\r\n            currMappingNode.IsExpanded = newState.Value;\r\n         }\r\n      }\r\n\r\n      private void button_Save_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         SaveDialogChanges();\r\n         StartTransactionGroup();\r\n      }\r\n\r\n      private void button_Ok_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         SaveDialogChanges();\r\n         Close();\r\n      }\r\n\r\n      private void StartTransactionGroup()\r\n      {\r\n         // Restart the transactions\r\n         if (!groupTransaction.HasStarted())\r\n            groupTransaction.Start();\r\n\r\n         if (!templateTransaction.HasStarted())\r\n            templateTransaction.Start();\r\n      }\r\n\r\n      private void CommitTransactionGroup()\r\n      {\r\n         // Save template changes\r\n         if (templateTransaction.HasStarted())\r\n            templateTransaction.Commit();\r\n\r\n         // Save all the dialog changes\r\n         if (groupTransaction.HasStarted())\r\n            groupTransaction.Assimilate();\r\n      }\r\n\r\n      private void DiscardTransactionsGroup()\r\n      {\r\n         // Roll back template changes\r\n         if (templateTransaction.HasStarted())\r\n            templateTransaction.RollBack();\r\n\r\n         // Roll back all the dialog changes after the last 'Save' pressing\r\n         if (groupTransaction.HasStarted())\r\n            groupTransaction.RollBack();\r\n      }\r\n\r\n      private void SaveDialogChanges()\r\n      {\r\n         UpdateTemplateFromGrid();\r\n         _ifcExportConfiguration.CategoryMapping = (string)listBox_MappingTemplates.SelectedItem;\r\n         CommitTransactionGroup();\r\n      }\r\n\r\n      private void button_Cancel_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         DiscardTransactionsGroup();\r\n         Close();\r\n      }\r\n\r\n      private void ChildWindow_PreviewKeyDown(object sender, KeyEventArgs e)\r\n      {\r\n         if (e.Key == Key.Escape)\r\n         {\r\n            e.Handled = true;\r\n            button_Cancel_Click(button_Cancel, new RoutedEventArgs());\r\n         }\r\n      }\r\n\r\n      private void ChildWindow_Closing(object sender, CancelEventArgs e)\r\n      {\r\n         DiscardTransactionsGroup();\r\n      }\r\n\r\n      private void UpdateTemplateFromGrid(string templateName = null)\r\n      {\r\n         IFCCategoryTemplate templateToUpdate = null;\r\n\r\n         // Update Current template is the name isn't specified\r\n         if (templateName == null)\r\n            templateToUpdate = GetCurrentTemplate();\r\n         else\r\n            templateToUpdate = GetTemplateByName(templateName);\r\n\r\n         if (templateToUpdate == null)\r\n            return;\r\n\r\n         IDictionary<ExportIFCCategoryKey, ExportIFCCategoryInfo> gridMap = new Dictionary<ExportIFCCategoryKey, ExportIFCCategoryInfo>();\r\n\r\n         // Not supported yet.\r\n         string presentationLayerName = string.Empty;\r\n\r\n         CategoryMappingManager currentManager = dataGrid_CategoryMapping.ItemsSource as CategoryMappingManager;\r\n         foreach (CategoryMappingNode node in currentManager.Data)\r\n         {\r\n            IFCMappingInfo info = node.MappingInfo;\r\n            gridMap.Add(new ExportIFCCategoryKey(info.CategoryName, \"\", info.CustomSubCategoryId),\r\n               new ExportIFCCategoryInfo(info.ExportFlag ?? true, info.IfcClass, info.PredefinedType, info.UserDefinedType, presentationLayerName));\r\n            foreach (CategoryMappingNode subNode in node.Children)\r\n            {\r\n               IFCMappingInfo subInfo = subNode.MappingInfo;\r\n               string subCategoryNameToUse = (info.CustomSubCategoryId == CustomSubCategoryId.None) ?\r\n                  subInfo.CategoryName : string.Empty;\r\n               gridMap.Add(new ExportIFCCategoryKey(info.CategoryName, subCategoryNameToUse, subInfo.CustomSubCategoryId),\r\n                  new ExportIFCCategoryInfo(subInfo.ExportFlag ?? true, subInfo.IfcClass, subInfo.PredefinedType, subInfo.UserDefinedType, presentationLayerName));\r\n            }\r\n         }\r\n         templateToUpdate.SetMappingInfo(gridMap);\r\n      }\r\n\r\n      private void EntityPicker(object sender, RoutedEventArgs e)\r\n      {\r\n         CategoryMappingNode currMappingNode = dataGrid_CategoryMapping.SelectedItem as CategoryMappingNode;\r\n         if (currMappingNode == null)\r\n            return;\r\n\r\n         IFCMappingInfo mappingInfo = currMappingNode.MappingInfo;\r\n         if (mappingInfo == null)\r\n            return;\r\n\r\n         EntityTree entityTree = new EntityTree(currMappingNode)\r\n         {\r\n            Owner = this,\r\n            Title = Properties.Resources.IFCEntitySelection\r\n         };\r\n         entityTree.PredefinedTypeTreeView.Visibility = System.Windows.Visibility.Visible;\r\n\r\n         bool? ret = entityTree.ShowDialog();\r\n         if (ret.HasValue && ret.Value == true)\r\n         {\r\n            mappingInfo.IfcClass = entityTree.GetSelectedEntity();\r\n            mappingInfo.PredefinedType = entityTree.GetSelectedPredefinedType();\r\n         }\r\n      }\r\n\r\n      private void button_Export_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCCategoryTemplate currTemplate = GetCurrentTemplate();\r\n         if (currTemplate == null)\r\n            return;\r\n\r\n         UpdateTemplateFromGrid();\r\n\r\n         FileSaveDialog saveDialog = new FileSaveDialog(Properties.Resources.ExportCategoryMappingFilter);\r\n         saveDialog.Title = Properties.Resources.ExportCategoryMappingDialogName;\r\n         saveDialog.InitialFileName = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + \"\\\\\" + currTemplate.Name + \".txt\";\r\n\r\n         if (saveDialog.Show() == ItemSelectionDialogResult.Confirmed)\r\n         {\r\n            try\r\n            {\r\n               // TODO: Support (or warn) on cloud paths.\r\n               ModelPath modelPath = saveDialog.GetSelectedModelPath();\r\n               string fileName = ModelPathUtils.ConvertModelPathToUserVisiblePath(modelPath);\r\n               currTemplate.ExportToFile(IFCCommandOverrideApplication.TheDocument, fileName);\r\n            }\r\n            catch (Exception)\r\n            {\r\n               return;\r\n            }\r\n         }\r\n      }\r\n\r\n      private void button_Import_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         FileOpenDialog openDialog = new FileOpenDialog(Properties.Resources.ExportCategoryMappingFilter);\r\n         openDialog.Title = Properties.Resources.ImportCategoryMappingDialogName;\r\n         \r\n         if (openDialog.Show() == ItemSelectionDialogResult.Confirmed)\r\n         {\r\n            // TODO: Support cloud paths.\r\n            string fileName = ModelPathUtils.ConvertModelPathToUserVisiblePath(openDialog.GetSelectedModelPath());\r\n            string uniqueTemplateName = IFCPropertyMapping.GetUniqueNameFromFile(fileName, isCategoryMapping: true);\r\n            if (string.IsNullOrWhiteSpace(uniqueTemplateName))\r\n               return;\r\n\r\n            try\r\n            {\r\n               IFCCategoryTemplate importedTemplate = IFCCategoryTemplate.ImportFromFile(IFCCommandOverrideApplication.TheDocument, fileName, uniqueTemplateName);\r\n               \r\n               if (importedTemplate != null && !importedTemplate.IsValidCategoryMappingFile)\r\n               {\r\n                  using (Autodesk.Revit.UI.TaskDialog taskDialog = new Autodesk.Revit.UI.TaskDialog(Properties.Resources.IFCExport))\r\n                  {\r\n                     taskDialog.MainInstruction = Properties.Resources.IFCInvalidCategoryMappingFile;\r\n                     taskDialog.MainIcon = Autodesk.Revit.UI.TaskDialogIcon.TaskDialogIconWarning;\r\n                     taskDialog.TitleAutoPrefix = false;\r\n                     TaskDialogResult taskDialogResult = taskDialog.Show();\r\n                  }\r\n               }\r\n\r\n               importedTemplate?.UpdateCategoryList(IFCCommandOverrideApplication.TheDocument);\r\n            }\r\n            catch (Exception)\r\n            {\r\n               return;\r\n            }\r\n\r\n            listBox_MappingTemplates.Items.Add(uniqueTemplateName);\r\n            listBox_MappingTemplates.SelectedItem = uniqueTemplateName;\r\n         }\r\n\r\n      }\r\n\r\n      private void button_Copy_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCCategoryTemplate currentTemplate = GetCurrentTemplate();\r\n         if (currentTemplate == null)\r\n            return;\r\n\r\n         UpdateTemplateFromGrid();\r\n\r\n         IFCTemplateData data = new(currentTemplate.Name, GetAllTemplateNames(), \r\n            isCategoryMapping: true, IFCTemplateData.DialogTypeEnum.Template);\r\n         data.MakeUniqueName();\r\n\r\n         IFCCopyTemplate copyTemplateDialog = new IFCCopyTemplate(data)\r\n         {\r\n            Owner = this\r\n         };\r\n\r\n         bool? ret = copyTemplateDialog.ShowDialog();\r\n         if (ret.HasValue && ret.Value == true)\r\n         {\r\n            string copyTemplateName = copyTemplateDialog.Data.NewName;\r\n            try\r\n            {\r\n               IFCCategoryTemplate importedTemplate = currentTemplate.CopyTemplate(IFCCommandOverrideApplication.TheDocument, copyTemplateName);\r\n            }\r\n            catch (Exception)\r\n            {\r\n               return;\r\n            }\r\n            \r\n            listBox_MappingTemplates.Items.Add(copyTemplateName);\r\n            listBox_MappingTemplates.SelectedItem = copyTemplateName;\r\n         }\r\n      }\r\n\r\n      private void button_Rename_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCCategoryTemplate currentTemplate = GetCurrentTemplate();\r\n         if (currentTemplate == null)\r\n            return;\r\n\r\n         string previousName = currentTemplate.Name;\r\n         IFCTemplateData data = new(previousName, IFCCategoryTemplate.ListNames(IFCExport.TheDocument),\r\n            isCategoryMapping: true, IFCTemplateData.DialogTypeEnum.Template);\r\n\r\n         IFCRenameTemplate renameTemplateDialog = new(data);\r\n         renameTemplateDialog.Owner = this;\r\n         bool? ret = renameTemplateDialog.ShowDialog();\r\n         if (ret.HasValue && ret.Value && !string.IsNullOrWhiteSpace(renameTemplateDialog.Data.NewName))\r\n         {\r\n            string newName = renameTemplateDialog.Data.NewName;\r\n            currentTemplate.Name = newName;\r\n            int index = listBox_MappingTemplates.SelectedIndex;\r\n            listBox_MappingTemplates.Items[index] = newName;\r\n            listBox_MappingTemplates.SelectedItem = newName;\r\n         }\r\n      }\r\n\r\n      private ExportIFCCategoryKey CreateKeyFromMappingNode(CategoryMappingNode currMappingNode)\r\n      {\r\n         IFCMappingInfo info = currMappingNode?.MappingInfo;\r\n         if (info == null)\r\n         {\r\n            return null;\r\n         }\r\n\r\n         IFCMappingInfo parentInfo = currMappingNode.Parent?.MappingInfo;\r\n\r\n         string categoryName = (parentInfo == null) ? info.CategoryName : parentInfo.CategoryName;\r\n         string subCategoryName = (parentInfo == null || info.CustomSubCategoryId != CustomSubCategoryId.None) ? string.Empty : info.CategoryName;\r\n\r\n         return new ExportIFCCategoryKey(categoryName, subCategoryName, info.CustomSubCategoryId);\r\n      }\r\n\r\n      private void ResetOneRow(IFCCategoryTemplate currentTemplate, CategoryMappingNode currMappingNode, bool canExport)\r\n      {\r\n         IFCMappingInfo info = currMappingNode?.MappingInfo;\r\n         if (info == null)\r\n         {\r\n            return;\r\n         }\r\n         \r\n         ExportIFCCategoryKey key = CreateKeyFromMappingNode(currMappingNode);\r\n         if (key == null)\r\n         {\r\n            return;\r\n         }\r\n\r\n         ExportIFCCategoryInfo resetInfo = currentTemplate?.ResetCategoryToDefault(key) ?? null;\r\n         if (resetInfo == null)\r\n         {\r\n            return;\r\n         }\r\n\r\n         info.ExportFlag = canExport && resetInfo.IFCExportFlag;\r\n         info.IfcClass = resetInfo.IFCEntityName;\r\n         info.PredefinedType = resetInfo.IFCPredefinedType;\r\n      }\r\n\r\n      private void ResetOneRowWithChildren(IFCCategoryTemplate currentTemplate, CategoryMappingNode currMappingNode)\r\n      {\r\n         // If currMappingNode represents a parent node, then parentFlag controls\r\n         // the reset of the children, so that a child isn't set to export if the\r\n         // parent isn't set to export.\r\n\r\n         // If currMappingNode represents a child node, then originalParentFlag\r\n         // controls the reset of this node, so that it isn't set to export if the\r\n         // parent isn't set to export.\r\n\r\n         bool originalParentFlag = currMappingNode.Parent?.MappingInfo?.ExportFlag ?? true;\r\n         ResetOneRow(currentTemplate, currMappingNode, originalParentFlag);\r\n\r\n         bool parentFlag = currMappingNode.MappingInfo?.ExportFlag ?? true;\r\n\r\n         if (currMappingNode.HasChildren)\r\n         {\r\n            CategoryMappingManager currentManager = dataGrid_CategoryMapping.ItemsSource as CategoryMappingManager;\r\n\r\n            // If the parent is expanded, then we will skip invisible children.\r\n            // Otherwise we will include them in the search.\r\n            bool isExpanded = currMappingNode.IsExpanded;\r\n\r\n            foreach (CategoryMappingNode child in currMappingNode.Children)\r\n            {\r\n               IFCMappingInfo childMappingInfo = child.MappingInfo;\r\n               if (childMappingInfo == null)\r\n                  continue;\r\n\r\n               if (isExpanded && !currentManager.Contains(child))\r\n                  continue;\r\n\r\n               ResetOneRow(currentTemplate, child, parentFlag);\r\n            }\r\n         }\r\n\r\n         if (currMappingNode.Parent != null)\r\n         {\r\n            // Set node's parent checkbox to indeterminate state if needed\r\n            IFCMappingInfo parentMappingInfo = currMappingNode.Parent.MappingInfo;\r\n            if (parentMappingInfo != null)\r\n               parentMappingInfo.ExportFlag = UpdateCheckboxFlag(currMappingNode.Parent.Children);\r\n         }\r\n      }\r\n         \r\n      private void button_Reset_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCCategoryTemplate currentTemplate = GetCurrentTemplate();\r\n         if (currentTemplate == null)\r\n            return;\r\n\r\n         CategoryMappingNode currMappingNode = dataGrid_CategoryMapping.SelectedItem as CategoryMappingNode;\r\n         if (currMappingNode == null)\r\n            return;\r\n\r\n         ResetOneRowWithChildren(currentTemplate, currMappingNode);\r\n\r\n         CategoryMappingManager currentManager = dataGrid_CategoryMapping.ItemsSource as CategoryMappingManager;\r\n         if (currentManager == null)\r\n            return;\r\n\r\n         ExportFlagAll = UpdateCheckboxFlag(currentManager.ToList());\r\n      }\r\n\r\n      private void button_ResetAll_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCCategoryTemplate currentTemplate = GetCurrentTemplate();\r\n         if (currentTemplate == null)\r\n         {\r\n            return;\r\n         }\r\n\r\n         CategoryMappingManager currentManager = dataGrid_CategoryMapping.ItemsSource as CategoryMappingManager;\r\n         foreach (CategoryMappingNode currMappingNode in currentManager.Data)\r\n         {\r\n            if ((currMappingNode?.IsVisible ?? false) == false)\r\n               continue;\r\n\r\n            ResetOneRowWithChildren(currentTemplate, currMappingNode);\r\n         }\r\n\r\n         ExportFlagAll = UpdateCheckboxFlag(currentManager.ToList());\r\n      }\r\n\r\n      private void button_Delete_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCCategoryTemplate currentTemplate = GetCurrentTemplate();\r\n         if (currentTemplate == null)\r\n            return;\r\n\r\n         IFCDeleteTemplate deleteTemplateDialog = new IFCDeleteTemplate(currentTemplate.Name);\r\n         deleteTemplateDialog.Owner = this;\r\n         bool? ret = deleteTemplateDialog.ShowDialog();\r\n         if (ret.HasValue && ret.Value == true)\r\n         {\r\n            listBox_MappingTemplates.Items.Remove(currentTemplate.Name);\r\n            IFCCommandOverrideApplication.TheDocument.Delete(currentTemplate.Id);\r\n            listBox_MappingTemplates.SelectedIndex = 0;\r\n         }\r\n      }\r\n   }\r\n\r\n\r\n   /// <summary>\r\n   /// Represents the row in category mapping table\r\n   /// </summary>\r\n   public class CategoryMappingNode : INotifyPropertyChanged\r\n   {\r\n      /// <summary>\r\n      /// Default constructor\r\n      /// </summary>\r\n      public CategoryMappingNode()\r\n      {\r\n         Children = new List<CategoryMappingNode>();\r\n      }\r\n\r\n      /// <summary>\r\n      /// The mapping info from Revit category to Ifc entity\r\n      /// </summary>\r\n      public IFCMappingInfo MappingInfo { get; set; }\r\n\r\n      /// <summary>\r\n      /// Parent node\r\n      /// </summary>\r\n      public CategoryMappingNode Parent { get; set; }\r\n\r\n      /// <summary>\r\n      /// Children nodes\r\n      /// </summary>\r\n      public List<CategoryMappingNode> Children { get; set; }\r\n\r\n      /// <summary>\r\n      /// Reference to data manager\r\n      /// </summary>\r\n      public CategoryMappingManager DataManager { get; set; }\r\n\r\n      /// <summary>\r\n      /// The node level (number of parents)\r\n      /// </summary>\r\n      private int _level = -1;\r\n      public int Level\r\n      {\r\n         get\r\n         {\r\n            if (_level == -1)\r\n            {\r\n               _level = (Parent != null) ? Parent.Level + 1 : 0;\r\n            }\r\n            return _level;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// If the node is expanded (otherwise - it is collapsed)\r\n      /// </summary>\r\n      private bool _expanded = true;\r\n      public bool IsExpanded\r\n      {\r\n         get { return _expanded; }\r\n         set\r\n         {\r\n            if (_expanded != value)\r\n            {\r\n               _expanded = value;\r\n               if (_expanded == true)\r\n                  Expand();\r\n               else\r\n                  Collapse();\r\n\r\n               OnPropertyChanged();\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// If the node is visible (otherwise - its parent is collapsed)\r\n      /// </summary>\r\n      private bool _visible = false;\r\n\r\n      public bool IsVisible\r\n      {\r\n         get { return _visible; }\r\n         set\r\n         {\r\n            if (_visible != value)\r\n            {\r\n               _visible = value;\r\n               if (_visible)\r\n                  ShowChildren();\r\n               else\r\n                  HideChildren();\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// If the node is hidden by filter\r\n      /// </summary>\r\n      public bool IsHiddenByFilter { get; set; } = false;\r\n\r\n      public event PropertyChangedEventHandler PropertyChanged;\r\n      protected void OnPropertyChanged([CallerMemberName] string name = null)\r\n      {\r\n         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));\r\n      }\r\n\r\n      /// <summary>\r\n      /// If the node has any children (controls expand button visibility)\r\n      /// </summary>\r\n      public bool HasChildren { get { return Children.Count > 0; } }\r\n\r\n      /// <summary>\r\n      /// Get the list of visible children nodes\r\n      /// </summary>\r\n      public IEnumerable<CategoryMappingNode> VisibleDescendants\r\n      {\r\n         get\r\n         {\r\n            return Children\r\n                .Where(x => x.IsVisible)\r\n                .SelectMany(x => (new[] { x }).Concat(x.VisibleDescendants));\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add child node\r\n      /// </summary>\r\n      public void AddChild(CategoryMappingNode node)\r\n      {\r\n         node.Parent = this;\r\n         Children.Add(node);\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Collapse this node (IsExpanded has been switched to false)\r\n      /// </summary>\r\n      private void Collapse()\r\n      {\r\n         DataManager.RemoveChildren(this);\r\n         foreach (CategoryMappingNode child in Children)\r\n            child.IsVisible = false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collapse this node (IsExpanded has been switched to true)\r\n      /// </summary>\r\n      private void Expand()\r\n      {\r\n         DataManager.AddChildren(this);\r\n         foreach (CategoryMappingNode child in Children)\r\n         {\r\n            if (!child.IsHiddenByFilter)\r\n               child.IsVisible = true;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Hide children of expanded node (IsVisible has been switched to false)\r\n      /// </summary>\r\n      private void HideChildren()\r\n      {\r\n         if (IsExpanded)\r\n         {\r\n            DataManager.RemoveChildren(this);\r\n            foreach (CategoryMappingNode child in Children)\r\n               child.IsVisible = false;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Show children of expanded node (IsVisible has been switched to true)\r\n      /// </summary>\r\n      private void ShowChildren()\r\n      {\r\n         if (IsExpanded)\r\n         {\r\n            DataManager.AddChildren(this);\r\n            foreach (CategoryMappingNode child in Children)\r\n               child.IsVisible = true;\r\n         }\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// This class implements the logic to support hierarchical structure of the data grid\r\n   /// Controls the data to show basing on node's IsExpanded property\r\n   /// </summary>\r\n   public class CategoryMappingManager : ObservableCollection<CategoryMappingNode>\r\n   {\r\n      /// <summary>\r\n      /// Default constructor\r\n      /// </summary>\r\n      public CategoryMappingManager() { Data = new List<CategoryMappingNode>(); }\r\n\r\n      /// <summary>\r\n      /// Entire category tree\r\n      /// </summary>\r\n      public List<CategoryMappingNode> Data { get; set; }\r\n\r\n      /// <summary>\r\n      /// Fill the observable collection with all the visible entries\r\n      /// </summary>\r\n      public void Initialize()\r\n      {\r\n         this.Clear();\r\n         foreach (CategoryMappingNode node in Data.Where(x => x.IsVisible).SelectMany(y => new[] { y }.Concat(y.VisibleDescendants)))\r\n         {\r\n            this.Add(node);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Clear the observable collection\r\n      /// </summary>\r\n      public void Reset(bool resetVisibility)\r\n      {\r\n         this.Clear();\r\n\r\n         if (resetVisibility)\r\n         {\r\n            foreach (CategoryMappingNode node in Data)\r\n            {\r\n               node.IsVisible = false;\r\n               node.IsExpanded = false;\r\n               node.IsHiddenByFilter = false;\r\n\r\n               foreach (CategoryMappingNode child in node.Children)\r\n               {\r\n                  child.IsHiddenByFilter = false;\r\n               }\r\n            }\r\n\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add children of the node to observable collection\r\n      /// </summary>\r\n      public void AddChildren(CategoryMappingNode node)\r\n      {\r\n         if (!this.Contains(node))\r\n            return;\r\n\r\n         int parentIndex = this.IndexOf(node);\r\n         foreach (CategoryMappingNode child in node.Children)\r\n         {\r\n            if (!child.IsHiddenByFilter)\r\n            {\r\n               parentIndex += 1;\r\n               this.Insert(parentIndex, child);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Remove children of the node from observable collection\r\n      /// </summary>\r\n      public void RemoveChildren(CategoryMappingNode node)\r\n      {\r\n         foreach (CategoryMappingNode child in node.Children)\r\n         {\r\n            if (this.Contains(child))\r\n               this.Remove(child);\r\n         }\r\n      }\r\n   }\r\n\r\n   #region Converters\r\n   /// <summary>\r\n   /// Converts node level value to row indent\r\n   /// </summary>\r\n   public class LevelToMarginConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\r\n      {\r\n         if (value is int)\r\n            return new Thickness((int)value * 15, 0, 0, 0);\r\n\r\n         return null;\r\n      }\r\n\r\n      public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Converts node level value to row indent\r\n   /// </summary>\r\n   public class CheckBoxLevelToMarginConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\r\n      {\r\n         if (value is int)\r\n            return new Thickness((int)value * 12, 0, 0, 0);\r\n\r\n         return null;\r\n      }\r\n\r\n      public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Extracts the row index from the DataGridRow item.\r\n   /// It is used too set AutomationId for valid journal playback.\r\n   /// </summary>\r\n   public class RowIndexConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter,\r\n                            System.Globalization.CultureInfo culture)\r\n      {\r\n         DependencyObject item = (DependencyObject)value;\r\n         ItemsControl ic = ItemsControl.ItemsControlFromItemContainer(item);\r\n\r\n         return ic.ItemContainerGenerator.IndexFromContainer(item);\r\n      }\r\n\r\n      public object ConvertBack(object value, Type targetType, object parameter,\r\n                                System.Globalization.CultureInfo culture)\r\n      {\r\n         return null;\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Replaces the ifc category name with <By Category> if it is empty\r\n   /// </summary>\r\n   public class IFCClassNameConverter : IValueConverter\r\n   {\r\n      object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         string ifcClassName = (string)value;\r\n         if (string.IsNullOrEmpty(ifcClassName))\r\n         {\r\n            return Resources.ByCategory;\r\n         }\r\n\r\n         return ifcClassName;\r\n      }\r\n\r\n      object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         return string.Empty;\r\n      }\r\n   }\r\n   #endregion\r\n\r\n}"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCCategoryMapping/IFCCopyTemplate.xaml",
    "content": "﻿<local:BaseTemplate x:Class=\"BIM.IFC.Export.UI.IFCCopyTemplate\"\r\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\r\n        xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\r\n        xmlns:local=\"clr-namespace:BIM.IFC.Export.UI\"\r\n        xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n        xmlns:weave=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:weave_d=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties.DesignTime;assembly=Autodesk.Weave.Wpf\"\r\n        weave:FrameworkElementProperties.ApplyWeaveStyles=\"True\"\r\n        weave_d:FrameworkElementProperties.DesignTimeWeaveTheme=\"WeaveLightGray\"\r\n        mc:Ignorable=\"d\"\r\n        ResizeMode=\"NoResize\" SizeToContent=\"WidthAndHeight\">\r\n   <StackPanel Width=\"317\" VerticalAlignment=\"Center\" Margin=\"0,10,0,0\">\r\n      <StackPanel.Resources>\r\n         <local:ReservedPsetToLightErrorConverter x:Key=\"ReservedPsetToLightErrorConverter\"/>\r\n      </StackPanel.Resources>\r\n      <StackPanel>\r\n         <Label Name=\"label_NewName\" Content=\"{x:Static p:Resources.TemplateName}\" weave:LabelProperties.Variant=\"Top\"/>\r\n         <TextBox Name=\"textBox_NewName\" IsEnabled=\"True\" Text=\"{Binding NewName, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}\"\r\n                  weave:TextBoxProperties.ErrorLighter=\"{Binding Text, ElementName=textBox_NewName, Converter={StaticResource ReservedPsetToLightErrorConverter}}\">\r\n            <TextBox.ToolTip>\r\n               <ToolTip Content=\"{x:Static p:Resources.TemplateNameTooltip}\" Placement=\"Bottom\"/>\r\n            </TextBox.ToolTip>\r\n         </TextBox>\r\n      </StackPanel>\r\n\r\n      <StackPanel Orientation=\"Horizontal\" HorizontalAlignment=\"Right\">\r\n         <Button x:Name=\"button_Save\" Content=\"{x:Static p:Resources.Save}\" weave:ButtonProperties.Variant=\"Solid\" IsDefault=\"True\" IsEnabled=\"True\"/>\r\n         <Button x:Name=\"button_Cancel\" Content=\"{x:Static p:Resources.Cancel}\" IsCancel=\"True\" weave:ButtonProperties.Variant=\"Outline\"/>\r\n      </StackPanel>\r\n   </StackPanel>\r\n</local:BaseTemplate>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCCategoryMapping/IFCCopyTemplate.xaml.cs",
    "content": "﻿using System.Windows;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// Interaction logic for IFCCopyTemplate.xaml\r\n   /// </summary>\r\n   public partial class IFCCopyTemplate : BaseTemplate\r\n   {\r\n      public IFCCopyTemplate(IFCTemplateData data):base(data)\r\n      {\r\n         InitializeComponent();\r\n         base.OnInit(this);\r\n\r\n         Title = GetDialogTitle();\r\n         label_NewName.Content = GetLabelContent();\r\n\r\n         textBox_NewName.Focus();\r\n         textBox_NewName.CaretIndex = textBox_NewName.Text.Length;\r\n         textBox_NewName.ToolTip = GetToolTip();\r\n         \r\n         // Set up event handlers\r\n         SetupEnterKeyHandler(textBox_NewName, button_Save);\r\n         SetupSaveClickHandler(button_Save, textBox_NewName);\r\n         SetupCancelClickHandler(button_Cancel);\r\n      }\r\n\r\n      private string GetDialogTitle()\r\n      {\r\n         switch (Data.DialogType)\r\n         {\r\n            case IFCTemplateData.DialogTypeEnum.Template:\r\n               return Properties.Resources.IFCCopyTemplate;\r\n            case IFCTemplateData.DialogTypeEnum.PropertySet:\r\n               return Properties.Resources.IFCCreateDuplicate;\r\n            default:\r\n               return string.Empty;\r\n         }\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCCategoryMapping/IFCDeleteTemplate.xaml",
    "content": "﻿<auiw:ChildWindow x:Class=\"BIM.IFC.Export.UI.IFCDeleteTemplate\"\r\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\r\n        xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\r\n        xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n        xmlns:weave=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:weave_d=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties.DesignTime;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:ctrl=\"clr-namespace:Autodesk.Weave.Wpf.Controls;assembly=Autodesk.Weave.Wpf\"\r\n        weave:FrameworkElementProperties.ApplyWeaveStyles=\"True\"\r\n        weave_d:FrameworkElementProperties.DesignTimeWeaveTheme=\"WeaveLightGray\"\r\n        mc:Ignorable=\"d\"\r\n        Title=\"{x:Static p:Resources.IFCDeleteTemplate}\"\r\n        Name=\"deleteDialog\" ResizeMode=\"NoResize\" SizeToContent=\"WidthAndHeight\">\r\n\r\n   <StackPanel Width=\"317\" Orientation=\"Vertical\" VerticalAlignment=\"Center\" Margin=\"0,10,0,0\">\r\n      <StackPanel Orientation=\"Horizontal\" HorizontalAlignment=\"Center\">\r\n         <ctrl:WeaveIcon IconName=\"AlertS\" Margin=\"0,0,5,0\"/>\r\n         <TextBlock Name=\"textBlock_MsgText\" weave:TextBlockProperties.Variant=\"BodyBold\"/>\r\n      </StackPanel>\r\n\r\n      <StackPanel Orientation=\"Horizontal\" HorizontalAlignment=\"Center\">\r\n         <Button x:Name=\"button_Ok\" Content=\"{x:Static p:Resources.OK}\" Width=\"95\" weave:ButtonProperties.Variant=\"Solid\" Click=\"button_Ok_Click\" IsDefault=\"True\"/>\r\n         <Button x:Name=\"button_Cancel\" Content=\"{x:Static p:Resources.Cancel}\" Width=\"102\" IsCancel=\"True\" weave:ButtonProperties.Variant=\"Outline\" Click=\"button_Cancel_Click\"/>\r\n      </StackPanel>\r\n   </StackPanel>\r\n\r\n</auiw:ChildWindow>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCCategoryMapping/IFCDeleteTemplate.xaml.cs",
    "content": "﻿using Autodesk.UI.Windows;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Data;\r\nusing System.Windows.Documents;\r\nusing System.Windows.Input;\r\nusing System.Windows.Media;\r\nusing System.Windows.Media.Imaging;\r\nusing System.Windows.Shapes;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// Interaction logic for IFCDeleteTemplate.xaml\r\n   /// </summary>\r\n   public partial class IFCDeleteTemplate : ChildWindow\r\n   {\r\n      public IFCDeleteTemplate(String templateName)\r\n      {\r\n         InitializeComponent();\r\n         textBlock_MsgText.Text = string.Format(Properties.Resources.IFCDeleteTemplateMessage, templateName);\r\n      }\r\n\r\n      private void button_Ok_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         DialogResult = true;\r\n         Close();\r\n      }\r\n\r\n      private void button_Cancel_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         DialogResult = false;\r\n         Close();\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCCategoryMapping/IFCNewTemplate.xaml",
    "content": "﻿<local:BaseTemplate x:Class=\"BIM.IFC.Export.UI.IFCNewTemplate\"\r\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\r\n        xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\r\n        xmlns:local=\"clr-namespace:BIM.IFC.Export.UI\"\r\n        xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n        xmlns:weave=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:weave_d=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties.DesignTime;assembly=Autodesk.Weave.Wpf\"\r\n        weave:FrameworkElementProperties.ApplyWeaveStyles=\"True\"\r\n        weave_d:FrameworkElementProperties.DesignTimeWeaveTheme=\"WeaveLightGray\"\r\n        mc:Ignorable=\"d\"\r\n        ResizeMode=\"NoResize\" SizeToContent=\"WidthAndHeight\">\r\n   <StackPanel Width=\"317\" VerticalAlignment=\"Center\" Margin=\"0,10,0,0\">\r\n      <StackPanel.Resources>\r\n         <local:ReservedPsetToLightErrorConverter x:Key=\"ReservedPsetToLightErrorConverter\"/>\r\n      </StackPanel.Resources>\r\n      <StackPanel>\r\n         <Label Name=\"label_NewName\" Content=\"{x:Static p:Resources.TemplateName}\" weave:LabelProperties.Variant=\"Top\"/>\r\n         <TextBox Name=\"textBox_NewName\" IsEnabled=\"True\"\r\n                  Text=\"{Binding NewName, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}\"\r\n                  weave:TextBoxProperties.ErrorLighter=\"{Binding Text, ElementName=textBox_NewName, Converter={StaticResource ReservedPsetToLightErrorConverter}}\">\r\n            <TextBox.ToolTip>\r\n               <ToolTip Content=\"{x:Static p:Resources.TemplateNameTooltip}\" Placement=\"Bottom\"/>\r\n            </TextBox.ToolTip>\r\n         </TextBox>\r\n         <ComboBox x:Name=\"comboBox_PropertySetType\" SelectedValue=\"{Binding SelectedIfcPropertySetType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\r\n      </StackPanel>\r\n\r\n      <StackPanel Orientation=\"Horizontal\" HorizontalAlignment=\"Right\">\r\n         <Button x:Name=\"button_Save\" Content=\"{x:Static p:Resources.Save}\" weave:ButtonProperties.Variant=\"Solid\" IsDefault=\"True\" IsEnabled=\"True\"/>\r\n         <Button x:Name=\"button_Cancel\" Content=\"{x:Static p:Resources.Cancel}\" IsCancel=\"True\" weave:ButtonProperties.Variant=\"Outline\"/>\r\n      </StackPanel>\r\n   </StackPanel>\r\n</local:BaseTemplate>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCCategoryMapping/IFCNewTemplate.xaml.cs",
    "content": "﻿using System;\r\nusing Revit.IFC.Export.Utility;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Threading;\r\nusing static BIM.IFC.Export.UI.IFCPropertySetType;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// Interaction logic for IFCNewTemplate.xaml\r\n   /// </summary>\r\n   public partial class IFCNewTemplate : BaseTemplate\r\n   {\r\n      private IFCPropertySetType _selectedIfcPropertySetType;\r\n      public IFCPropertySetType SelectedIfcPropertySetType\r\n      {\r\n         get { return _selectedIfcPropertySetType; }\r\n         set\r\n         {\r\n            _selectedIfcPropertySetType = value;\r\n            OnPropertyChanged(nameof(SelectedIfcPropertySetType));\r\n         }\r\n      }\r\n\r\n      public IFCNewTemplate(IFCTemplateData data) : base(data)\r\n      {\r\n         InitializeComponent();\r\n         base.OnInit(this);\r\n\r\n         if (data?.DialogType != IFCTemplateData.DialogTypeEnum.PropertySet)\r\n            comboBox_PropertySetType.Visibility = Visibility.Collapsed;\r\n         else\r\n            InitializePropertySetTypes();\r\n\r\n         Title = GetDialogTitle();\r\n         label_NewName.Content = GetLabelContent();\r\n         textBox_NewName.ToolTip = GetToolTip();\r\n\r\n         NewName = Data.MakeUniqueName(); \r\n         textBox_NewName.Focus();\r\n         textBox_NewName.CaretIndex = textBox_NewName.Text.Length;\r\n         textBox_NewName.Dispatcher.BeginInvoke(new Action(() => textBox_NewName.SelectAll()), DispatcherPriority.ContextIdle);\r\n         \r\n         // Set up event handlers\r\n         SetupEnterKeyHandler(textBox_NewName, button_Save);\r\n         SetupSaveClickHandler(button_Save, textBox_NewName);\r\n         SetupCancelClickHandler(button_Cancel);\r\n      }\r\n\r\n      private void InitializePropertySetTypes()\r\n      {\r\n         if (!comboBox_PropertySetType.HasItems)\r\n         {\r\n            comboBox_PropertySetType.Items.Add(new IFCPropertySetType(PropertySetType.PropertySet));\r\n            comboBox_PropertySetType.Items.Add(new IFCPropertySetType(PropertySetType.QuantitySet));\r\n            comboBox_PropertySetType.Items.Add(new IFCPropertySetType(PropertySetType.IFCAttributes));\r\n         }\r\n\r\n         SelectedIfcPropertySetType = (IFCPropertySetType)comboBox_PropertySetType.Items[0];\r\n      }\r\n\r\n      private void button_Save_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         if (!Data.IsValidName(textBox_NewName.Text))\r\n            return;\r\n\r\n         Data.UpdateName(textBox_NewName.Text);\r\n         DialogResult = true;\r\n         Close();\r\n      }\r\n\r\n      private void button_Cancel_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         DialogResult = false;\r\n         Close();\r\n      }\r\n\r\n      private string GetDialogTitle()\r\n      {\r\n         switch (Data.DialogType)\r\n         {\r\n            case IFCTemplateData.DialogTypeEnum.Template:\r\n               return Properties.Resources.IFCNewTemplate;\r\n            case IFCTemplateData.DialogTypeEnum.PropertySet:\r\n               return Properties.Resources.IFCCreateNewPropertySet;\r\n            default:\r\n               return string.Empty;\r\n         }\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Keeps data to initialize PropertySetType.\r\n   /// </summary>\r\n   public class IFCPropertySetType\r\n   {\r\n      public enum PropertySetType\r\n      {\r\n         PropertySet,\r\n         QuantitySet,\r\n         IFCAttributes\r\n      }\r\n      public PropertySetType CurrentPropertySetType { get; set; }\r\n\r\n      public IFCPropertySetType(PropertySetType propertySetType)\r\n      {\r\n         CurrentPropertySetType = propertySetType;\r\n      }\r\n\r\n      public override string ToString()\r\n      {\r\n         switch (CurrentPropertySetType)\r\n         {\r\n            case PropertySetType.PropertySet:\r\n               return Properties.Resources.PropertySet;\r\n            case PropertySetType.QuantitySet:\r\n               return Properties.Resources.QuantitySet;\r\n            case PropertySetType.IFCAttributes:\r\n               return Properties.Resources.IFCAttributes;\r\n            default:\r\n               return string.Empty;\r\n         }\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCCategoryMapping/IFCRenameTemplate.xaml",
    "content": "﻿<local:BaseTemplate x:Class=\"BIM.IFC.Export.UI.IFCRenameTemplate\"\r\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\r\n        xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\r\n        xmlns:local=\"clr-namespace:BIM.IFC.Export.UI\"\r\n        xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n        xmlns:weave=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:weave_d=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties.DesignTime;assembly=Autodesk.Weave.Wpf\"\r\n        weave:FrameworkElementProperties.ApplyWeaveStyles=\"True\"\r\n        weave_d:FrameworkElementProperties.DesignTimeWeaveTheme=\"WeaveLightGray\"\r\n        mc:Ignorable=\"d\"\r\n        Title=\"{x:Static p:Resources.IFCRenameTemplate}\"\r\n        ResizeMode=\"NoResize\" SizeToContent=\"WidthAndHeight\">\r\n   <StackPanel Width=\"317\" VerticalAlignment=\"Center\" Margin=\"0,10,0,0\">\r\n      <StackPanel.Resources>\r\n         <local:ReservedPsetToLightErrorConverter x:Key=\"ReservedPsetToLightErrorConverter\"/>\r\n      </StackPanel.Resources>\r\n      <StackPanel>\r\n         <Label Name=\"label_PreviousName\" Content=\"{x:Static p:Resources.RenamePreviousName}\" weave:LabelProperties.Variant=\"Top\"/>\r\n         <TextBox Name=\"textBox_PreviousName\" IsEnabled=\"False\"/>\r\n      </StackPanel>\r\n\r\n      <StackPanel>\r\n         <Label Name=\"label_NewName\" Content=\"{x:Static p:Resources.RenameNewName}\" weave:LabelProperties.Variant=\"Top\"/>\r\n         <TextBox Name=\"textBox_NewName\" IsEnabled=\"True\" Text=\"{Binding NewName, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}\"\r\n                  weave:TextBoxProperties.ErrorLighter=\"{Binding Text, ElementName=textBox_NewName, Converter={StaticResource ReservedPsetToLightErrorConverter}}\">\r\n            <TextBox.ToolTip>\r\n               <ToolTip Content=\"{x:Static p:Resources.TemplateNameTooltip}\" Placement=\"Bottom\"/>\r\n            </TextBox.ToolTip>\r\n         </TextBox>\r\n      </StackPanel>\r\n\r\n      <StackPanel Orientation=\"Horizontal\" HorizontalAlignment=\"Right\">\r\n         <Button x:Name=\"button_Save\" Content=\"{x:Static p:Resources.Save}\" weave:ButtonProperties.Variant=\"Solid\" IsDefault=\"True\" IsEnabled=\"True\"/>\r\n         <Button x:Name=\"button_Cancel\" Content=\"{x:Static p:Resources.Cancel}\" IsCancel=\"True\" weave:ButtonProperties.Variant=\"Outline\"/>\r\n      </StackPanel>\r\n   </StackPanel>\r\n</local:BaseTemplate>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCCategoryMapping/IFCRenameTemplate.xaml.cs",
    "content": "﻿using System;\r\nusing System.Windows;\r\nusing System.Windows.Threading;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// Interaction logic for IFCRenameTemplate.xaml\r\n   /// </summary>\r\n   public partial class IFCRenameTemplate : BaseTemplate\r\n   {\r\n      public IFCRenameTemplate(IFCTemplateData data) : base(data)\r\n      {\r\n         InitializeComponent();\r\n         base.OnInit(this);\r\n\r\n         textBox_PreviousName.Text = data.NewName;\r\n         NewName = data.MakeUniqueName();\r\n         textBox_NewName.Focus();\r\n         textBox_NewName.CaretIndex = textBox_NewName.Text.Length;\r\n         textBox_NewName.Dispatcher.BeginInvoke(new Action(() => textBox_NewName.SelectAll()), DispatcherPriority.ContextIdle);\r\n         textBox_NewName.ToolTip = GetToolTip();\r\n         \r\n         // Set up event handlers\r\n         SetupEnterKeyHandler(textBox_NewName, button_Save);\r\n         SetupSaveClickHandler(button_Save, textBox_NewName);\r\n         SetupCancelClickHandler(button_Cancel);\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCClassificationUI.xaml",
    "content": "﻿<auiw:ChildWindow x:Class=\"BIM.IFC.Export.UI.IFCClassificationWindow\"\r\n                  xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n                  xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n                  xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n                  xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\r\n                  xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \r\n                  xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \r\n                  mc:Ignorable=\"d\" \r\n                  Title=\"{x:Static p:Resources.ClassificationSetting}\" \r\n                  Name=\"ClassificationTab\" \r\n                  Initialized=\"ClassificationTab_Initialized\" \r\n                  Loaded=\"Window_Loaded\" \r\n                  d:DesignWidth=\"570\" \r\n                  SizeToContent=\"WidthAndHeight\" \r\n                  HorizontalAlignment=\"Stretch\" \r\n                  Margin=\"10,5,5,10\" \r\n                  Height=\"315\">\r\n   <Grid Height=\"276\" VerticalAlignment=\"Top\" Margin=\"0,7,0,0\" Grid.RowSpan=\"2\">\r\n      <Grid.ColumnDefinitions>\r\n         <ColumnDefinition Width=\"239*\"/>\r\n         <ColumnDefinition Width=\"331*\"/>\r\n      </Grid.ColumnDefinitions>\r\n      <Label Content=\"{x:Static p:Resources.Name}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"16,10,0,0\" Name=\"ClassificationName\" VerticalAlignment=\"Top\"  Width=\"235\" Grid.ColumnSpan=\"2\" />\r\n      <TextBox Text=\"{Binding Path=ClassificationName, UpdateSourceTrigger=PropertyChanged}\" Height=\"23\" Margin=\"10,10,26,0\" Name=\"ClassificationNameTextBox\" VerticalAlignment=\"Top\" HorizontalContentAlignment=\"Stretch\" ToolTip=\"{x:Static p:Resources.ClassificationSystemName}\" Grid.Column=\"1\" />\r\n      <Label Content=\"{x:Static p:Resources.SourcePublisher}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"16,39,0,0\" Name=\"SourceOrPublisher\" VerticalAlignment=\"Top\" Width=\"235\" Grid.ColumnSpan=\"2\" />\r\n      <TextBox Text=\"{Binding Path=ClassificationSource, UpdateSourceTrigger=PropertyChanged}\" Height=\"23\" Margin=\"10,39,26,0\" Name=\"ClassificationSourceTextBox\" VerticalAlignment=\"Top\" HorizontalContentAlignment=\"Stretch\" ToolTip=\"{x:Static p:Resources.ClassificationSystemSource}\" Grid.Column=\"1\" />\r\n      <Label Content=\"{x:Static p:Resources.Edition}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"16,68,0,0\" Name=\"Edition\" VerticalAlignment=\"Top\" IsEnabled=\"True\"  Width=\"235\" Grid.ColumnSpan=\"2\" />\r\n      <TextBox Text=\"{Binding Path=ClassificationEdition, UpdateSourceTrigger=PropertyChanged}\" Height=\"23\" Margin=\"10,68,26,0\" Name=\"ClassificationEditionTextBox\" VerticalAlignment=\"Top\" HorizontalContentAlignment=\"Stretch\" ToolTip=\"{x:Static p:Resources.ClassificationSystemEdition}\" Grid.Column=\"1\" />\r\n      <Label Content=\"{x:Static p:Resources.EditionDate}\" Height=\"35\" HorizontalAlignment=\"Left\" Margin=\"16,96,0,0\" Name=\"EditionDate\" VerticalAlignment=\"Top\" RenderTransformOrigin=\"0.441,0.466\" Width=\"235\" />\r\n      <DatePicker Height=\"25\" Margin=\"10,97,200,0\" Name=\"datePicker1\" VerticalAlignment=\"Top\" Grid.Column=\"1\" SelectedDateChanged=\"datePicker1_SelectedDateChanged\"/>\r\n      <Label Content=\"{x:Static p:Resources.DocumentationLocation}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"16,132,0,0\" Name=\"location\" VerticalAlignment=\"Top\" Width=\"235\" />\r\n      <TextBox Text=\"{Binding Path=ClassificationLocation, UpdateSourceTrigger=PropertyChanged}\" Height=\"28\" Margin=\"10,132,26,0\" Name=\"ClassificationLocationtextBox\" VerticalAlignment=\"Top\" ToolTip=\"{x:Static p:Resources.ClassificationAltLocation}\" Grid.Column=\"1\"/>\r\n      <Label Content=\"{x:Static p:Resources.ClassificationFieldName}\" HorizontalAlignment=\"Left\" Margin=\"16,165,0,0\" Name=\"Label_FieldName\" VerticalAlignment=\"Top\" Width=\"235\" Height=\"26\" />\r\n      <TextBox Text=\"{Binding Path=ClassificationFieldName, UpdateSourceTrigger=PropertyChanged}\" Height=\"28\" Margin=\"10,165,26,0\" Name=\"TextBox_FieldName\" VerticalAlignment=\"Top\" ToolTip=\"{x:Static p:Resources.ClassificationAltName}\" Grid.Column=\"1\"/>\r\n      <Button Content=\"{x:Static p:Resources.OK}\" Height=\"22\" x:Name=\"buttonOK\" Width=\"75\" Click=\"buttonOK_Click\" Margin=\"0,0,106,12\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Bottom\" Grid.Column=\"1\"/>\r\n      <Button Content=\"{x:Static p:Resources.Cancel}\" Height=\"22\" Name=\"buttonCancel\" Width=\"75\" Click=\"bottonCancel_Click\" RenderTransformOrigin=\"0.507,-4.636\" Margin=\"0,0,26,12\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Bottom\" Grid.Column=\"1\"/>\r\n   </Grid>\r\n</auiw:ChildWindow>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCClassificationUI.xaml.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n\r\nusing Autodesk.UI.Windows;\r\nusing Revit.IFC.Common.Extensions;\r\nusing Revit.IFC.Export.Utility;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// Interaction logic for File Header Tab in IFClassificationUI.xaml\r\n   /// </summary>\r\n   public partial class IFCClassificationWindow : ChildWindow\r\n   {\r\n\r\n      private IFCClassification m_newClassification = new IFCClassification();\r\n      private IList<IFCClassification> m_newClassificationList = new List<IFCClassification>();\r\n      private IFCClassification m_savedClassification = new IFCClassification();\r\n\r\n\r\n      /// <summary>\r\n      /// initialization of IFCAssignemt class\r\n      /// </summary>\r\n      /// <param name=\"document\"></param>\r\n      public IFCClassificationWindow(IFCExportConfiguration configuration)\r\n      {\r\n         InitializeComponent();\r\n         m_newClassification = configuration.ClassificationSettings;\r\n\r\n         if (m_newClassification.ClassificationEditionDate <= DateTime.MinValue || m_newClassification.ClassificationEditionDate >= DateTime.MaxValue)\r\n         {\r\n            m_newClassification.ClassificationEditionDate = DateTime.Now.Date;\r\n         }\r\n         datePicker1.SelectedDate = m_newClassification.ClassificationEditionDate.Date;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Event when Window is loaded\r\n      /// </summary>\r\n      /// <param name=\"sender\"></param>\r\n      /// <param name=\"e\"></param>\r\n      private void Window_Loaded(object sender, RoutedEventArgs e)\r\n      {\r\n         ClassificationTab.DataContext = m_newClassification;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Event when OK button is pressed\r\n      /// </summary>\r\n      /// <param name=\"sender\"></param>\r\n      /// <param name=\"args\"></param>\r\n      private void buttonOK_Click(object sender, RoutedEventArgs args)\r\n      {\r\n\r\n         // Update Classification if it has changed or the mandatory fields are filled. If mandatory fields are not filled we will ignore the classification.\r\n         if (!m_newClassification.IsUnchanged(m_savedClassification))\r\n         {\r\n            if (!m_newClassification.AreMandatoryFieldsFilled())\r\n            {\r\n               fillMandatoryFields(m_newClassification);\r\n            }\r\n            if (datePicker1?.SelectedDate != null)\r\n            {\r\n               m_newClassification.ClassificationEditionDate = datePicker1.SelectedDate.Value.Date;\r\n            }\r\n            IFCClassificationMgr.UpdateClassification(IFCCommandOverrideApplication.TheDocument, m_newClassification);\r\n         }\r\n\r\n         Close();\r\n      }\r\n\r\n      /// <summary>\r\n      /// If any of the mandatory fields have been modified, it adds a default blank value to the empty field.\r\n      /// </summary>\r\n      /// <param name=\"IFCClassification\"></param>\r\n      private void fillMandatoryFields(IFCClassification newClassification)\r\n      {\r\n         if (String.IsNullOrWhiteSpace(newClassification.ClassificationName))\r\n         {\r\n            newClassification.ClassificationName = \"\";\r\n         }\r\n         if (String.IsNullOrWhiteSpace(newClassification.ClassificationSource))\r\n         {\r\n            newClassification.ClassificationSource = \"\";\r\n         }\r\n         if (String.IsNullOrWhiteSpace(newClassification.ClassificationEdition))\r\n         {\r\n            newClassification.ClassificationEdition = \"\";\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Event when Cancel button is pressed\r\n      /// </summary>\r\n      /// <param name=\"sender\"></param>\r\n      /// <param name=\"e\"></param>\r\n      private void bottonCancel_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         Close();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initialization of the Classification Tab when there is saved item\r\n      /// </summary>\r\n      /// <param name=\"sender\"></param>\r\n      /// <param name=\"e\"></param>\r\n      private void ClassificationTab_Initialized(object sender, EventArgs e)\r\n      {\r\n         bool hasSavedItem = IFCClassificationMgr.GetSavedClassifications(IFCCommandOverrideApplication.TheDocument, null, out m_newClassificationList);\r\n         m_newClassification = m_newClassificationList[0];                        // Set the default first Classification item to the first member of the List\r\n\r\n         if (hasSavedItem == true)\r\n         {\r\n            m_savedClassification = m_newClassification.Clone();\r\n         }\r\n      }\r\n\r\n      private void datePicker1_SelectedDateChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)\r\n      {\r\n         var picker = sender as DatePicker;\r\n         if (picker?.SelectedDate != null)\r\n         {\r\n            m_newClassification.ClassificationEditionDate = picker.SelectedDate.Value.Date; // Picker only use the Date\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCCommandOverrideApplication.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.IO;\r\nusing System.Reflection;\r\nusing System.Security.AccessControl;\r\nusing System.Security.Principal;\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.Events;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.UI;\r\nusing Autodesk.Revit.UI.Events;\r\nusing Revit.IFC.Common.Extensions;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\nusing Autodesk.Revit.DB.ExternalService;\r\n\r\nusing View = Autodesk.Revit.DB.View;\r\n\r\nusing System.Windows.Forms;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// This class implements the methods of interface IExternalApplication to register the IFC export alternate UI to override the IFC export command in Autodesk Revit.\r\n   /// </summary>\r\n   public class IFCCommandOverrideApplication : IExternalApplication\r\n   {\r\n      #region IExternalApplication Members\r\n\r\n      /// <summary>\r\n      /// The binding to the Export IFC command in Revit.\r\n      /// </summary>\r\n      private AddInCommandBinding m_ifcCommandBinding;\r\n\r\n      /// <summary>\r\n      /// Implementation of Shutdown for the external application.\r\n      /// </summary>\r\n      /// <param name=\"application\">The Revit application.</param>\r\n      /// <returns>The result (typically Succeeded).</returns>\r\n      public Result OnShutdown(UIControlledApplication application)\r\n      {\r\n         // Clean up\r\n         m_ifcCommandBinding.Executed -= OnIFCExport;\r\n         \r\n         return Result.Succeeded;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Implementation of Startup for the external application.\r\n      /// </summary>\r\n      /// <param name=\"application\">The Revit application.</param>\r\n      /// <returns>The result (typically Succeeded).</returns>\r\n      public Result OnStartup(UIControlledApplication application)\r\n      {\r\n         // Register execution override\r\n         RevitCommandId commandId = RevitCommandId.LookupCommandId(\"ID_EXPORT_IFC\");\r\n         try\r\n         {\r\n            m_ifcCommandBinding = application.CreateAddInCommandBinding(commandId);\r\n\r\n         }\r\n         catch\r\n         {\r\n            return Result.Failed;\r\n         }\r\n\r\n         m_ifcCommandBinding.Executed += OnIFCExport;\r\n\r\n         // Register IFCEntityTreeUI server\r\n         application.ControlledApplication.ApplicationInitialized += ApplicationInitialized;\r\n\r\n         return Result.Succeeded;\r\n      }\r\n\r\n      private void ApplicationInitialized(object sender, ApplicationInitializedEventArgs e)\r\n      {\r\n         // Register the IFC Entity selection server\r\n         SingleServerService entUIService = ExternalServiceRegistry.GetService(ExternalServices.BuiltInExternalServices.IFCEntityTreeUIService) as SingleServerService;\r\n         if (entUIService != null)\r\n         {\r\n            try\r\n            {\r\n               IFCEntityTree.BrowseIFCEntityServer browseIFCEntityServer = new IFCEntityTree.BrowseIFCEntityServer();\r\n               entUIService.AddServer(browseIFCEntityServer);\r\n               entUIService.SetActiveServer(browseIFCEntityServer.GetServerId());\r\n            }\r\n            catch { }\r\n         }\r\n      }\r\n\r\n      #endregion\r\n\r\n      public static bool PotentiallyUpdatedConfigurations { get; set; }\r\n\r\n      /// <summary>\r\n      /// The active document for this export.\r\n      /// </summary>\r\n      public static Document TheDocument { get; set; }\r\n\r\n      /// <summary>\r\n      /// The last successful export location\r\n      /// </summary>\r\n      private static String m_mruExportPath = null;\r\n\r\n      /// <summary>\r\n      /// The last successful export location\r\n      /// </summary>\r\n      public static String MruExportPath\r\n      {\r\n         get { return m_mruExportPath; }\r\n         set { m_mruExportPath = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The last selected configuration\r\n      /// </summary>\r\n      private String m_mruConfiguration = null;\r\n\r\n      private ElementId GenerateActiveViewIdFromDocument(Document doc)\r\n      {\r\n         try\r\n         {\r\n            View activeView = doc.ActiveView;\r\n            ElementId activeViewId = (activeView == null) ? ElementId.InvalidElementId : activeView.Id;\r\n            return activeViewId;\r\n         }\r\n         catch\r\n         {\r\n            return ElementId.InvalidElementId;\r\n         }\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Implementation of the command binding event for the IFC export command.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The event sender (Revit UIApplication).</param>\r\n      /// <param name=\"args\">The arguments (command binding).</param>\r\n      public void OnIFCExport(object sender, CommandEventArgs args)\r\n      {\r\n         try\r\n         {\r\n            // Prepare basic objects\r\n            UIApplication uiApp = sender as UIApplication;\r\n\r\n#pragma warning disable CS0618 // Type or member is obsolete\r\n            if (uiApp.IsViewerModeActive)\r\n            {\r\n               using (Autodesk.Revit.UI.TaskDialog taskDialog = new Autodesk.Revit.UI.TaskDialog(Properties.Resources.String_Revit_CurrentLicenseStatusTitle))\r\n               {\r\n                  taskDialog.MainInstruction = string.Format(Properties.Resources.String_Revit_CurrentLicenseStatus_MainInstruction,\r\n                     uiApp.Application.VersionName, uiApp.Application.VersionBuild, uiApp.Application.VersionName);\r\n                  taskDialog.MainIcon = Autodesk.Revit.UI.TaskDialogIcon.TaskDialogIconWarning;\r\n                  taskDialog.TitleAutoPrefix = false;\r\n                  taskDialog.MainContent = Properties.Resources.String_Revit_CurrentLicenseStatus_MainContent;\r\n                  TaskDialogResult result = taskDialog.Show();\r\n                  return;\r\n               }\r\n            }\r\n#pragma warning restore CS0618 // Type or member is obsolete\r\n\r\n            UIDocument uiDoc = uiApp.ActiveUIDocument;\r\n            Document activeDoc = uiDoc.Document;\r\n\r\n            TheDocument = activeDoc;\r\n\r\n            // Note that when exporting multiple documents, we are still going to use the configurations from the\r\n            // active document.  \r\n            IFCExportConfigurationsMap configurationsMap = new IFCExportConfigurationsMap(TheDocument);\r\n            configurationsMap.AddOrReplace(IFCExportConfiguration.GetInSession());\r\n            configurationsMap.AddBuiltInConfigurations();\r\n            configurationsMap.AddSavedConfigurations(IFCExport.LastSelectedConfig);\r\n\r\n            String mruSelection = null;\r\n            if (m_mruConfiguration != null && configurationsMap.HasName(m_mruConfiguration))\r\n               mruSelection = m_mruConfiguration;\r\n\r\n            PotentiallyUpdatedConfigurations = false;\r\n            IFCExport mainWindow = new IFCExport(uiApp, configurationsMap, mruSelection);\r\n\r\n            mainWindow.ShowDialog();\r\n\r\n            // If user chose to continue\r\n            if (mainWindow.Result == IFCExportResult.ExportAndSaveSettings)\r\n            {\r\n               int docsToExport = mainWindow.DocumentsToExport.Count;\r\n\r\n               // This shouldn't happen, but just to be safe.\r\n               if (docsToExport == 0)\r\n                  return;\r\n\r\n               bool multipleFiles = docsToExport > 1;\r\n\r\n               // If user chooses to continue\r\n\r\n\r\n               // change options\r\n               IFCExportConfiguration selectedConfig = mainWindow.GetSelectedConfiguration();\r\n\r\n               // Prompt the user for the file location and path\r\n               string defaultExt = mainWindow.DefaultExt;\r\n               string fullName = mainWindow.ExportFilePathName;\r\n               string path = Path.GetDirectoryName(fullName);\r\n               string fileName = multipleFiles ? Properties.Resources.MultipleFiles : Path.GetFileName(fullName);\r\n\r\n               // Check if the user has write access to the directory\r\n               if (!CanWriteFilesInDirectory(path))\r\n               {\r\n                  using (Autodesk.Revit.UI.TaskDialog taskDialog = new Autodesk.Revit.UI.TaskDialog(Properties.Resources.IFCExport))\r\n                  {\r\n                     taskDialog.MainInstruction = string.Format(Properties.Resources.IFCExportProcessNoWriteAccess, fileName);\r\n                     taskDialog.MainIcon = Autodesk.Revit.UI.TaskDialogIcon.TaskDialogIconWarning;\r\n                     taskDialog.TitleAutoPrefix = false;\r\n                     TaskDialogResult result = taskDialog.Show();\r\n                     return;\r\n                  }\r\n               }\r\n\r\n               // This option should be rarely used, and is only for consistency with old files.  As such, it is set by environment variable only.\r\n               string use2009GUID = Environment.GetEnvironmentVariable(\"Assign2009GUIDToBuildingStoriesOnIFCExport\");\r\n               bool use2009BuildingStoreyGUIDs = (use2009GUID != null && use2009GUID == \"1\");\r\n\r\n               string unsuccesfulExports = string.Empty;\r\n\r\n               // In rare occasions, there may be two projects loaded into Revit with the same name.  This isn't supposed to be allowed, but can happen if,\r\n               // e.g., a user creates a new project, exports it to IFC, and then calls Open IFC.  In this case, if we export both projects, we will overwrite\r\n               // one of the exports.  Prevent that by keeping track of the exported file names.\r\n               ISet<string> exportedFileNames = new HashSet<string>();\r\n\r\n               bool exportLinks =\r\n                  selectedConfig.ExportLinkedFiles != LinkedFileExportAs.DontExport;\r\n               bool exportSeparateLinks =\r\n                  selectedConfig.ExportLinkedFiles == LinkedFileExportAs.ExportAsSeparate;\r\n               bool doFederatedExport = exportLinks && !exportSeparateLinks;\r\n\r\n               foreach (Document document in mainWindow.DocumentsToExport)\r\n               {\r\n                  TheDocument = document;\r\n\r\n                  // Call this before the Export IFC transaction starts, as it has its own transaction.\r\n                  IFCClassificationMgr.DeleteObsoleteSchemas(document);\r\n                  IFCClassificationMgr.UpdateClassification(document, selectedConfig.ClassificationSettings);\r\n\r\n                  Transaction transaction = new Transaction(document, \"Export IFC\");\r\n                  transaction.Start();\r\n\r\n                  FailureHandlingOptions failureOptions = transaction.GetFailureHandlingOptions();\r\n                  failureOptions.SetClearAfterRollback(false);\r\n                  transaction.SetFailureHandlingOptions(failureOptions);\r\n\r\n                  // Normally the transaction will be rolled back, but there are cases where we do update the document.\r\n                  // There is no UI option for this, but these two options can be useful for debugging/investigating\r\n                  // issues in specific file export.  The first one supports export of only one element\r\n                  //exportOptions.AddOption(\"SingleElement\", \"174245\");\r\n                  // The second one supports export only of a list of elements\r\n                  //exportOptions.AddOption(\"ElementsForExport\", \"174245;205427\");\r\n\r\n                  if (multipleFiles)\r\n                  {\r\n                     fileName = IFCUISettings.GenerateFileNameFromDocument(document, exportedFileNames) + \".\" + defaultExt;\r\n                     fullName = path + \"\\\\\" + fileName;\r\n                  }\r\n\r\n                  // Prepare the export options\r\n                  IFCExportOptions exportOptions = new();\r\n\r\n                  ElementId activeViewId = GenerateActiveViewIdFromDocument(document);\r\n                  selectedConfig.ActiveViewId = selectedConfig.UseActiveViewGeometry ? activeViewId : ElementId.InvalidElementId;\r\n                  selectedConfig.UpdateOptions(document, exportOptions, activeViewId, !OptionsUtil.UseLegacyParameterMapping());\r\n\r\n                  IDictionary<ElementId, string> linkGUIDsCache =\r\n                     new Dictionary<ElementId, string>();\r\n\r\n                  IDictionary<RevitLinkInstance, Transform> linkInstanceTranforms = null;\r\n                  string errorMessage = null;\r\n                  int numBadInstances = 0;\r\n\r\n                  if (exportLinks)\r\n                  {\r\n                     // Cache for links guids\r\n                     FilteredElementCollector collector = new FilteredElementCollector(document);\r\n                     ElementFilter elementFilter = new ElementClassFilter(typeof(RevitLinkInstance));\r\n                     List<RevitLinkInstance> rvtLinkInstances =\r\n                        collector.WherePasses(elementFilter).Cast<RevitLinkInstance>().ToList();\r\n\r\n                     string linkGuidOptionString = string.Empty;\r\n\r\n                     // Get the transforms of the links we can export, and error message information,\r\n                     // including number, for the ones we can't.\r\n                     (linkInstanceTranforms, errorMessage, numBadInstances) =\r\n                        GetLinkedInstanceInfo(rvtLinkInstances);\r\n\r\n                     ISet<string> existingGUIDs = new HashSet<string>();\r\n\r\n                     foreach (RevitLinkInstance linkInstance in linkInstanceTranforms.Keys)\r\n                     {\r\n                        Parameter parameter = linkInstance.get_Parameter(BuiltInParameter.IFC_GUID);\r\n\r\n                        string sGUID = GUIDUtil.GetSimpleElementIFCGUID(linkInstance);\r\n\r\n                        string sGUIDlower = sGUID.ToLower();\r\n\r\n                        while (existingGUIDs.Contains(sGUIDlower))\r\n                        {\r\n                           sGUID += \"-\";\r\n                           sGUIDlower += \"-\";\r\n                        }\r\n                        existingGUIDs.Add(sGUIDlower);\r\n\r\n                        if (doFederatedExport)\r\n                           linkGuidOptionString += linkInstance.Id.ToString() + \",\" + sGUID + \";\";\r\n                        else\r\n                           linkGUIDsCache.Add(linkInstance.Id, sGUID);\r\n                     }\r\n\r\n                     if (doFederatedExport)\r\n                     {\r\n                        exportOptions.AddOption(\"ExportingLinks\", selectedConfig.ExportLinkedFiles.ToString());\r\n                        exportOptions.AddOption(\"FederatedLinkInfo\", linkGuidOptionString);\r\n                     }\r\n                  }\r\n\r\n                  bool result = document.Export(path, fileName, exportOptions);\r\n\r\n                  if (!result)\r\n                  {\r\n                     unsuccesfulExports += fullName + \"\\n\";\r\n                  }\r\n\r\n                  // Roll back the transaction started earlier, unless certain options are set.\r\n                  if (result && (use2009BuildingStoreyGUIDs || selectedConfig.StoreIFCGUID))\r\n                     transaction.Commit();\r\n                  else\r\n                     transaction.RollBack();\r\n\r\n                  // Export links as separate files\r\n                  if (exportSeparateLinks)\r\n                  {\r\n                     // We can't use the FilterViewId for linked documents, because the\r\n                     // intermediate code assumes that it is in the exported document.  As such,\r\n                     // we will pass it in a special place.\r\n                     ElementId originalFilterViewId = exportOptions.FilterViewId;\r\n                     if (originalFilterViewId != ElementId.InvalidElementId)\r\n                     {\r\n                        exportOptions.AddOption(\"HostViewId\", exportOptions.FilterViewId.ToString());\r\n                        exportOptions.FilterViewId = ElementId.InvalidElementId;\r\n                     }\r\n                     ExportOptionsCache.HostDocument = document;\r\n                     exportOptions.AddOption(\"ExportingLinks\", LinkedFileExportAs.ExportAsSeparate.ToString());\r\n                     ExportLinkedDocuments(document, fullName, linkGUIDsCache, linkInstanceTranforms,\r\n                        exportOptions, originalFilterViewId);\r\n                  }\r\n\r\n                  // Show user errors, if any.\r\n                  if (!string.IsNullOrEmpty(errorMessage))\r\n                  {\r\n                     using (Autodesk.Revit.UI.TaskDialog taskDialog = new Autodesk.Revit.UI.TaskDialog(Properties.Resources.IFCExport))\r\n                     {\r\n                        taskDialog.MainInstruction = string.Format(Properties.Resources.LinkInstanceExportErrorMain, numBadInstances);\r\n                        taskDialog.MainIcon = Autodesk.Revit.UI.TaskDialogIcon.TaskDialogIconWarning;\r\n                        taskDialog.TitleAutoPrefix = false;\r\n\r\n                        taskDialog.ExpandedContent = errorMessage;\r\n                        taskDialog.Show();\r\n                     }\r\n                  }\r\n               }\r\n\r\n               if (!string.IsNullOrWhiteSpace(unsuccesfulExports))\r\n               {\r\n                  using (Autodesk.Revit.UI.TaskDialog taskDialog = new Autodesk.Revit.UI.TaskDialog(Properties.Resources.IFCExport))\r\n                  {\r\n                     taskDialog.MainInstruction = string.Format(Properties.Resources.IFCExportProcessError, unsuccesfulExports);\r\n                     taskDialog.MainIcon = Autodesk.Revit.UI.TaskDialogIcon.TaskDialogIconWarning;\r\n                     TaskDialogResult taskDialogResult = taskDialog.Show();\r\n                  }\r\n               }\r\n\r\n               // Remember last successful export location\r\n               m_mruExportPath = path;\r\n\r\n            }\r\n\r\n            // The cancel button should cancel the export, not any \"OK\"ed setup changes.\r\n            if (mainWindow.Result == IFCExportResult.ExportAndSaveSettings || mainWindow.Result == IFCExportResult.Cancel)\r\n            {\r\n               m_mruConfiguration = mainWindow.GetSelectedConfiguration().Name;\r\n            }\r\n         }\r\n         catch (Exception e)\r\n         {\r\n            using (Autodesk.Revit.UI.TaskDialog taskDialog = new Autodesk.Revit.UI.TaskDialog(Properties.Resources.IFCExport))\r\n            {\r\n               taskDialog.MainInstruction = Properties.Resources.IFCExportProcessGenericError;\r\n               taskDialog.MainIcon = Autodesk.Revit.UI.TaskDialogIcon.TaskDialogIconWarning;\r\n               taskDialog.ExpandedContent = e.ToString();\r\n               TaskDialogResult result = taskDialog.Show();\r\n            }\r\n         }\r\n      }\r\n\r\n      private string FileNameListToString(IList<string> fileNames)\r\n      {\r\n         string fileNameListString = \"\";\r\n         foreach (string fileName in fileNames)\r\n         {\r\n            if (fileNameListString != \"\")\r\n               fileNameListString += \"; \";\r\n            fileNameListString += fileNames;\r\n         }\r\n         return fileNameListString;\r\n      }\r\n\r\n      private string ElementIdListToString(IList<ElementId> elementIds)\r\n      {\r\n         string elementString = \"\";\r\n         foreach (ElementId elementId in elementIds)\r\n         {\r\n            if (elementString != \"\")\r\n               elementString += \", \";\r\n            elementString += elementId.ToString();\r\n         }\r\n         return elementString;\r\n      }\r\n\r\n      // This modifies an existing string to display an expanded error message to the user.\r\n      private void AddExpandedStringContent(ref string messageString, string formatString, IList<string> items)\r\n      {\r\n         if (messageString != \"\")\r\n            messageString += \"\\n\";\r\n\r\n         if (items.Count > 0)\r\n            messageString += string.Format(formatString, FileNameListToString(items));\r\n      }\r\n\r\n      // This modifies an existing string to display an expanded error message to the user.\r\n      private void AddExpandedElementIdContent(ref string messageString, string formatString, IList<ElementId> items)\r\n      {\r\n         if (messageString != \"\")\r\n            messageString += \"\\n\";\r\n\r\n         if (items.Count > 0)\r\n            messageString += string.Format(formatString, ElementIdListToString(items));\r\n      }\r\n\r\n      private string GetLinkFileName(Document linkDocument, string linkPathName)\r\n      {\r\n         int index = linkPathName.LastIndexOf(\"\\\\\");\r\n         if (index <= 0)\r\n            return linkDocument.Title;\r\n\r\n         string linkFileName = linkPathName.Substring(index + 1);\r\n         // remove the extension\r\n         index = linkFileName.LastIndexOf('.');\r\n         if (index > 0)\r\n            linkFileName = linkFileName.Substring(0, index);\r\n         return linkFileName;\r\n      }\r\n\r\n      private (IDictionary<RevitLinkInstance, Transform>, string, int) GetLinkedInstanceInfo(\r\n         IList<RevitLinkInstance> linkInstances)\r\n      {\r\n         IDictionary<RevitLinkInstance, Transform> linkedInstanceTransforms =\r\n            new SortedDictionary<RevitLinkInstance, Transform>(new ElementComparer());\r\n\r\n         // We will keep track of the instances we can't export.\r\n         // Reasons we can't export:\r\n         // 1. Couldn't create a temporary document for exporting the linked instance.\r\n         // 2. The document for the linked instance can't be found.\r\n         // 3. The linked instance is mirrored, non-conformal, or scaled.\r\n         IList<string> noTempDoc = new List<string>();\r\n\r\n         IList<ElementId> nonConformalInst = new List<ElementId>();\r\n         IList<ElementId> scaledInst = new List<ElementId>();\r\n         IList<ElementId> instHasReflection = new List<ElementId>();\r\n\r\n         int numBadInstances = 0;\r\n\r\n         foreach (RevitLinkInstance currRvtLinkInstance in linkInstances)\r\n         {\r\n            // Nothing to report if the element itself is null.\r\n            if (currRvtLinkInstance == null)\r\n               continue;\r\n\r\n            // get the link document and the unit scale\r\n            Document linkDocument = currRvtLinkInstance.GetLinkDocument();\r\n            if (linkDocument == null)\r\n            {\r\n               // We can't distinguish between unloaded and an error condition, so we\r\n               // won't get a likely extraneous error.\r\n               continue;\r\n            }\r\n\r\n            double lengthScaleFactorLink = UnitUtils.ConvertFromInternalUnits(\r\n               1.0,\r\n               linkDocument.GetUnits().GetFormatOptions(SpecTypeId.Length).GetUnitTypeId());\r\n\r\n            // get the link transform\r\n            Transform tr = currRvtLinkInstance.GetTransform();\r\n\r\n            // We can't handle non-conformal, scaled, or mirrored transforms.\r\n            ElementId instanceId = currRvtLinkInstance.Id;\r\n            if (!tr.IsConformal)\r\n            {\r\n               nonConformalInst.Add(instanceId);\r\n               numBadInstances++;\r\n               continue;\r\n            }\r\n\r\n            if (tr.HasReflection)\r\n            {\r\n               instHasReflection.Add(instanceId);\r\n               numBadInstances++;\r\n               continue;\r\n            }\r\n\r\n            if (!MathUtil.IsAlmostEqual(tr.Determinant, 1.0))\r\n            {\r\n               scaledInst.Add(instanceId);\r\n               numBadInstances++;\r\n               continue;\r\n            }\r\n\r\n            // scale the transform origin\r\n            tr.Origin *= lengthScaleFactorLink;\r\n\r\n            linkedInstanceTransforms[currRvtLinkInstance] = tr;\r\n         }\r\n\r\n         // Show user errors, if any.\r\n         string expandedContent = string.Empty;\r\n         AddExpandedStringContent(ref expandedContent, Properties.Resources.LinkInstanceExportCantCreateDoc, noTempDoc);\r\n         AddExpandedElementIdContent(ref expandedContent, Properties.Resources.LinkInstanceExportNonConformal, nonConformalInst);\r\n         AddExpandedElementIdContent(ref expandedContent, Properties.Resources.LinkInstanceExportScaled, scaledInst);\r\n         AddExpandedElementIdContent(ref expandedContent, Properties.Resources.LinkInstanceExportHasReflection, instHasReflection);\r\n\r\n         return (linkedInstanceTransforms, expandedContent, numBadInstances);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if element is visible for certain view.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>True if the element is visible, false otherwise.</returns>\r\n      public bool IsLinkVisible(Element element, View filterView)\r\n      {\r\n         if (filterView == null)\r\n            return true;\r\n\r\n         if (element.IsHidden(filterView))\r\n            return false;\r\n\r\n         if (!(element.Category?.get_Visible(filterView) ?? false))\r\n            return false;\r\n\r\n         return filterView.IsElementVisibleInTemporaryViewMode(TemporaryViewMode.TemporaryHideIsolate, element.Id);\r\n      }\r\n\r\n      public void ExportLinkedDocuments(Document document, string fileName,\r\n         IDictionary<ElementId, string> linkGUIDsCache,\r\n         IDictionary<RevitLinkInstance, Transform> idToTransform,\r\n         IFCExportOptions exportOptions, ElementId originalFilterViewId)\r\n      {\r\n         // get the extension\r\n         int index = fileName.LastIndexOf('.');\r\n         if (index <= 0)\r\n            return;\r\n         string sExtension = fileName.Substring(index);\r\n         fileName = fileName.Substring(0, index);\r\n\r\n         // Check view overrides for linked instance \r\n         bool existsViewOverrides = false;\r\n\r\n         // get all the revit link instances\r\n         IDictionary<string, int> rvtLinkNamesDict = new Dictionary<string, int>();\r\n         IDictionary<string, List<RevitLinkInstance>> rvtLinkNamesToInstancesDict =\r\n            new Dictionary<string, List<RevitLinkInstance>>();\r\n\r\n         try\r\n         {\r\n            View filterView = document.GetElement(originalFilterViewId) as View;\r\n            foreach (RevitLinkInstance rvtLinkInstance in idToTransform.Keys)\r\n            {\r\n               if (!IsLinkVisible(rvtLinkInstance, filterView))\r\n                  continue;\r\n\r\n               // get the link document\r\n               Document linkDocument = rvtLinkInstance.GetLinkDocument();\r\n               if (linkDocument == null)\r\n                  continue;\r\n\r\n               if (!existsViewOverrides && filterView != null)\r\n               {\r\n                  RevitLinkGraphicsSettings settings = filterView.GetLinkOverrides(rvtLinkInstance.Id);\r\n                  if (settings != null)\r\n                     existsViewOverrides = true;\r\n               }\r\n\r\n               // get the link file path and name\r\n               String linkPathName = \"\";\r\n               Parameter originalFileNameParam = linkDocument.ProjectInformation.LookupParameter(\"Original IFC File Name\");\r\n               if (originalFileNameParam != null && originalFileNameParam.StorageType == StorageType.String)\r\n                  linkPathName = originalFileNameParam.AsString();\r\n               else\r\n                  linkPathName = linkDocument.PathName;\r\n\r\n               // get the link file name\r\n               string linkFileName = GetLinkFileName(linkDocument, linkPathName);\r\n\r\n               // add to names count dictionary\r\n               if (!rvtLinkNamesDict.Keys.Contains(linkFileName))\r\n                  rvtLinkNamesDict.Add(linkFileName, 0);\r\n               rvtLinkNamesDict[linkFileName]++;\r\n\r\n               // add to names instances dictionary\r\n               if (!rvtLinkNamesToInstancesDict.Keys.Contains(linkPathName))\r\n                  rvtLinkNamesToInstancesDict.Add(linkPathName, new List<RevitLinkInstance>());\r\n               rvtLinkNamesToInstancesDict[linkPathName].Add(rvtLinkInstance);\r\n            }\r\n         }\r\n         catch\r\n         {\r\n         }\r\n\r\n         foreach (KeyValuePair<string, List<RevitLinkInstance>> linkPathNames in rvtLinkNamesToInstancesDict)\r\n         {\r\n            string linkPathName = linkPathNames.Key;\r\n\r\n            // get the link instances\r\n            List<RevitLinkInstance> currRvtLinkInstances = rvtLinkNamesToInstancesDict[linkPathName];\r\n            IList<string> linkFileNames = new List<string>();\r\n            IList<Tuple<ElementId, string>> serTransforms = new List<Tuple<ElementId, string>>();\r\n\r\n            Document linkDocument = null;\r\n\r\n            foreach (RevitLinkInstance currRvtLinkInstance in currRvtLinkInstances)\r\n            {\r\n               // Nothing to report if the element itself is null.\r\n               if (currRvtLinkInstance == null)\r\n                  continue;\r\n\r\n               ElementId instanceId = currRvtLinkInstance.Id;\r\n\r\n               // get the link document and the unit scale\r\n               linkDocument = linkDocument ?? currRvtLinkInstance.GetLinkDocument();\r\n\r\n               // get the link file path and name\r\n               string linkFileName = GetLinkFileName(linkDocument, linkPathName);\r\n\r\n               //if link was an IFC file then make a different formating to the file name\r\n               if ((linkPathName.Length >= 4 && linkPathName.Substring(linkPathName.Length - 4).ToLower() == \".ifc\") ||\r\n                   (linkPathName.Length >= 7 && linkPathName.Substring(linkPathName.Length - 7).ToLower() == \".ifcxml\") ||\r\n                   (linkPathName.Length >= 7 && linkPathName.Substring(linkPathName.Length - 7).ToLower() == \".ifczip\"))\r\n               {\r\n                  string fName = fileName;\r\n\r\n                  //get output path and add to the new file name \r\n                  index = fName.LastIndexOf(\"\\\\\");\r\n                  if (index > 0)\r\n                     fName = fName.Substring(0, index + 1);\r\n                  else\r\n                     fName = \"\";\r\n\r\n                  //construct IFC file name\r\n                  linkFileName = fName + linkFileName + \"-\";\r\n\r\n                  //add guid\r\n                  linkFileName += linkGUIDsCache[instanceId];\r\n               }\r\n               else\r\n               {\r\n                  // check if there are multiple instances with the same name\r\n                  bool bMultiple = (rvtLinkNamesDict[linkFileName] > 1);\r\n\r\n                  // add the path\r\n                  linkFileName = fileName + \"-\" + linkFileName;\r\n\r\n                  // add the guid\r\n                  if (bMultiple)\r\n                  {\r\n                     linkFileName += \"-\";\r\n                     linkFileName += linkGUIDsCache[instanceId];\r\n                  }\r\n               }\r\n\r\n               // add the extension\r\n               linkFileName += sExtension;\r\n\r\n               linkFileNames.Add(linkFileName);\r\n\r\n               // serialize transform\r\n               serTransforms.Add(Tuple.Create(instanceId, SerializeTransform(idToTransform[currRvtLinkInstance])));\r\n            }\r\n\r\n            if (linkDocument != null)\r\n            {\r\n               // export\r\n               try\r\n               {\r\n                  int numLinkInstancesToExport = linkFileNames.Count;\r\n\r\n                  // Pass in the first value; the rest will  be in the options.\r\n                  string path_ = Path.GetDirectoryName(linkFileNames[0]);\r\n                  string fileName_ = Path.GetFileName(linkFileNames[0]);\r\n\r\n                  if (existsViewOverrides)\r\n                  {\r\n                     // Current linked instance.\r\n                     exportOptions.AddOption(\"NumberOfExportedLinkInstances\", \"1\");\r\n\r\n                     //If view is overridden export linked instances individually.\r\n                     for (int ind = 0; ind < numLinkInstancesToExport; ind++)\r\n                     {\r\n                        path_ = Path.GetDirectoryName(linkFileNames[ind]);\r\n                        fileName_ = Path.GetFileName(linkFileNames[ind]);\r\n\r\n                        RevitLinkInstance rvtLinkInstance = document.GetElement(serTransforms[ind].Item1) as RevitLinkInstance;\r\n                        if (rvtLinkInstance == null)\r\n                           continue;\r\n\r\n                        string optionName = \"ExportLinkId\";\r\n                        exportOptions.AddOption(optionName, serTransforms[ind].Item1.ToString());\r\n\r\n                        optionName = \"ExportLinkInstanceTransform\";\r\n                        exportOptions.AddOption(optionName, serTransforms[ind].Item2);\r\n\r\n                        optionName = \"ExportLinkInstanceFileName\";\r\n                        exportOptions.AddOption(optionName, linkFileNames[ind]);\r\n\r\n                        ExportLinkedDocument(linkDocument, path_, fileName_, exportOptions);\r\n                     }\r\n                  }\r\n                  else\r\n                  {\r\n                     // Optimized version to avoid extra copies of the IFC file.\r\n                     exportOptions.AddOption(\"NumberOfExportedLinkInstances\", numLinkInstancesToExport.ToString());\r\n\r\n                     for (int ind = 0; ind < numLinkInstancesToExport; ind++)\r\n                     {\r\n                        string optionName = (ind == 0) ? \"ExportLinkId\" : \"ExportLinkId\" + (ind + 1).ToString();\r\n                        exportOptions.AddOption(optionName, serTransforms[ind].Item1.ToString());\r\n\r\n                        optionName = (ind == 0) ? \"ExportLinkInstanceTransform\" : \"ExportLinkInstanceTransform\" + (ind + 1).ToString();\r\n                        exportOptions.AddOption(optionName, serTransforms[ind].Item2);\r\n\r\n                        // Don't pass in file name for the first link instance.\r\n                        if (ind == 0)\r\n                           continue;\r\n\r\n                        optionName = \"ExportLinkInstanceFileName\" + (ind + 1).ToString();\r\n                        exportOptions.AddOption(optionName, linkFileNames[ind]);\r\n                     }\r\n\r\n                     ExportLinkedDocument(linkDocument, path_, fileName_, exportOptions);\r\n                  }\r\n               }\r\n               catch\r\n               {\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      private void ExportLinkedDocument(Document linkDocument, string path, string fileName, IFCExportOptions exportOptions)\r\n      {\r\n         // Normally, IFC export would need a transaction, even if no permanent\r\n         // changes are made.  For linked documents, though, that's handled by the\r\n         // export itself.\r\n         using (IFCLinkDocumentExportScope scope = new IFCLinkDocumentExportScope(linkDocument))\r\n         {\r\n            linkDocument.Export(path, fileName, exportOptions);\r\n         }\r\n      }\r\n\r\n      public static string SerializeXYZ(XYZ value)\r\n      {\r\n         //transform to string\r\n         return value.ToString();\r\n      }\r\n\r\n      public static string SerializeTransform(Transform tr)\r\n      {\r\n         string retVal = string.Empty;\r\n         //serialize the transform values\r\n         retVal += SerializeXYZ(tr.Origin) + \";\";\r\n         retVal += SerializeXYZ(tr.BasisX) + \";\";\r\n         retVal += SerializeXYZ(tr.BasisY) + \";\";\r\n         retVal += SerializeXYZ(tr.BasisZ) + \";\";\r\n         return retVal;\r\n      }\r\n\r\n      static public bool CanWriteFilesInDirectory(string directoryPath)\r\n      {\r\n         if (string.IsNullOrEmpty(directoryPath))\r\n            return false;\r\n\r\n         try\r\n         {\r\n            DirectoryInfo dirInfo = new DirectoryInfo(directoryPath);\r\n            AuthorizationRuleCollection rules =\r\n                FileSystemAclExtensions.GetAccessControl(dirInfo).GetAccessRules(true, true, typeof(SecurityIdentifier));\r\n\r\n            WindowsIdentity identity = WindowsIdentity.GetCurrent();\r\n            bool isAllowed = false;\r\n\r\n            foreach (FileSystemAccessRule rule in rules)\r\n            {\r\n               if (identity.Groups.Contains(rule.IdentityReference) ||\r\n                   identity.User.Value == rule.IdentityReference.ToString())\r\n               {\r\n                  if ((FileSystemRights.Write & rule.FileSystemRights) == FileSystemRights.Write)\r\n                  {\r\n                     if (rule.AccessControlType == AccessControlType.Deny)\r\n                        return false;\r\n\r\n                     if (rule.AccessControlType == AccessControlType.Allow)\r\n                        isAllowed = true;\r\n                  }\r\n               }\r\n            }\r\n\r\n            return isAllowed;\r\n         }\r\n         catch { }\r\n\r\n         return false;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCEntityTree/BrowseIFCEntityServer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Autodesk.Revit.UI;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.ExternalService;\nusing System.Windows.Interop;\nusing System.Windows;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Export.Utility;\n\nnamespace BIM.IFC.Export.UI.IFCEntityTree\n{\n   public class BrowseIFCEntityServer : IIFCEntityTreeUIServer\n   {\n      private (bool, string, string) ShowDialogCommon(bool showTypeNodeOnly,\n         string preSelectEnt, string preSelectPDef, IFCExternalServiceUIData data)\n      {\n         IFCCommandOverrideApplication.TheDocument = data.Document;\n\n         EntityTree theTree = new EntityTree(data.GetRevitElementIds(), showTypeNodeOnly, preSelectEnt, preSelectPDef, null);\n\n         bool? ret = theTree.ShowDialog();\n         if (ret.HasValue && ret.Value == true)\n         {\n            string selEntity = theTree.GetSelectedEntity();\n            string selPDef = theTree.GetSelectedPredefinedType();\n            data.IsReset = theTree.IsReset;\n            return (true, selEntity, selPDef);\n         }\n\n         return (false, null, null);\n      }\n\n      /// <summary>\n      /// Launches the IFC Entity tree browser.\n      /// </summary>\n      /// <param name=\"data\">The IFCExternalServiceUIData from the native code.</param>\n      /// <returns>The return status of the dialog window.</returns>\n      public bool ShowDialog(IFCExternalServiceUIData data)\n      {\n         HashSet<string> assignedEntities = new HashSet<string>();\n         HashSet<string> assignedPredef = new HashSet<string>();\n         string preSelectEnt = null;\n         string preSelectPDef = null;\n\n         Document document = data.Document;\n         if (document == null)\n            return false;\n\n         if (document.IsFamilyDocument)\n         {\n            using (Transaction tr = new Transaction(document))\n            {\n               try\n               {\n                  tr.Start(\"IFC Entity Selection\");\n               }\n               catch { }\n\n               FamilyManager familyManager = document.FamilyManager;\n               FamilyType familyType = familyManager.CurrentType;\n\n               FamilyParameter exportTypeAs = familyManager?.get_Parameter(BuiltInParameter.IFC_EXPORT_ELEMENT_TYPE_AS);\n               FamilyParameter exportPredefinedTypeAs = familyManager?.get_Parameter(BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE_TYPE);\n\n               if ((exportTypeAs?.StorageType != StorageType.String) ||\n                  (exportPredefinedTypeAs?.StorageType != StorageType.String))\n                  return false;\n\n               preSelectEnt = familyType?.AsString(exportTypeAs);\n               preSelectPDef = familyType?.AsString(exportPredefinedTypeAs);\n\n               (bool ret, string selEntity, string selPDef) =\n                  ShowDialogCommon(true, preSelectEnt, preSelectPDef, data);\n\n               if (ret)\n               {\n                  if (data.ParamId.Value == (long)BuiltInParameter.IFC_EXPORT_ELEMENT_TYPE_AS)\n                  {\n                     familyManager.Set(exportPredefinedTypeAs, selPDef);\n                     data.SelectedIFCItem = selEntity;\n                  }\n                  else if (data.ParamId.Value == (long)BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE_TYPE)\n                  {\n                     familyManager.Set(exportTypeAs, selEntity);\n                     data.SelectedIFCItem = selPDef;\n                  }\n               }\n\n               if (tr.HasStarted())\n                  tr.Commit();\n\n               return true;\n            }\n         }\n\n         foreach (ElementId elemId in data.GetRevitElementIds())\n         {\n            Element elem = data.Document.GetElement(elemId);\n            if (elem == null)\n               continue;\n\n            // Collect existing assignments to the \"IFC Export Element* As\" and \"IFC Export Predefined Type*\"\n            BuiltInParameter paramName = (elem is ElementType) ? BuiltInParameter.IFC_EXPORT_ELEMENT_TYPE_AS : BuiltInParameter.IFC_EXPORT_ELEMENT_AS;\n            string assignedEnt = elem?.get_Parameter(paramName)?.AsString();\n            if (string.IsNullOrEmpty(assignedEnt))\n               assignedEntities.Add(\"<null>\");\n            else\n               assignedEntities.Add(assignedEnt);\n\n            BuiltInParameter pdefParName = (elem is ElementType) ? BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE_TYPE : BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE;\n            string pdefSel = elem?.get_Parameter(pdefParName)?.AsString();\n            if (string.IsNullOrEmpty(pdefSel))\n               assignedPredef.Add(\"<null>\");\n            else\n               assignedPredef.Add(pdefSel);\n         }\n\n         // Set the entity and predefined type if they are all the same and not null. This is to be used to preselect them in the UI\n         if (assignedEntities.Count == 1 && !assignedEntities.First().Equals(\"<null>\"))\n            preSelectEnt = assignedEntities.First();\n\n         if (assignedPredef.Count == 1 && !assignedPredef.First().Equals(\"<null>\"))\n            preSelectPDef = assignedPredef.First();\n\n         using (Transaction tr = new Transaction(document))\n         {\n            try\n            {\n               tr.Start(\"IFC Entity Selection\");\n            }\n            catch {}\n\n            bool showTypeNodeOnly = data.ParamId.Value == (long)BuiltInParameter.IFC_EXPORT_ELEMENT_TYPE_AS\n                                    || data.ParamId.Value == (long)BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE_TYPE;\n\n            (bool ret, string selEntity, string selPDef) =\n               ShowDialogCommon(showTypeNodeOnly, preSelectEnt, preSelectPDef, data);\n\n            if (ret)\n            {\n               foreach (ElementId elemId in data.GetRevitElementIds())\n               {\n                  Element elem = data.Document.GetElement(elemId);\n                  if (elem == null)\n                     continue;\n\n                  if (data.ParamId.Value == (long)BuiltInParameter.IFC_EXPORT_ELEMENT_TYPE_AS\n                     || data.ParamId.Value == (long)BuiltInParameter.IFC_EXPORT_ELEMENT_AS)\n                  {\n                     BuiltInParameter paramName = (elem is ElementType) ? BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE_TYPE : BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE;\n                     elem?.get_Parameter(paramName)?.Set(selPDef);\n                     data.SelectedIFCItem = selEntity;\n                  }\n                  else if (data.ParamId.Value == (long)BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE_TYPE\n                     || data.ParamId.Value == (long)BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE)\n                  {\n                     BuiltInParameter paramName = (elem is ElementType) ? BuiltInParameter.IFC_EXPORT_ELEMENT_TYPE_AS : BuiltInParameter.IFC_EXPORT_ELEMENT_AS;\n                     elem?.get_Parameter(paramName)?.Set(selEntity);\n                     data.SelectedIFCItem = selPDef;\n                  }\n               }\n\n               if (tr.HasStarted())\n                  tr.Commit();\n\n               return true;\n            }\n         }\n         return false;\n      }\n\n      /// <summary>\n      /// Get the server Id\n      /// </summary>\n      /// <returns>the server guid</returns>\n      public Guid GetServerId()\n      {\n#if IFC_OPENSOURCE\n         return new Guid(\"{22CAF64D-50B7-4C9E-9C4B-D4D92041650E}\");\n#else\n         return new Guid(\"{DB5C5B21-BB95-4520-972D-ED6889A7A543}\");\n#endif\n      }\n\n      /// <summary>\n      /// Get the service id this server is responding to\n      /// </summary>\n      /// <returns>the service id</returns>\n      public ExternalServiceId GetServiceId()\n      {\n         return ExternalServices.BuiltInExternalServices.IFCEntityTreeUIService;\n      }\n\n      /// <summary>\n      /// Get the name of this server\n      /// </summary>\n      /// <returns></returns>\n      public string GetName()\n      {\n         return \"Browse IFCEntity UI\";\n      }\n\n      /// <summary>\n      /// Get the vendor id\n      /// </summary>\n      /// <returns>the vendor id</returns>\n      public string GetVendorId()\n      {\n         return \"ADSK\";\n      }\n\n      /// <summary>\n      /// Get the description of this server\n      /// </summary>\n      /// <returns>the description</returns>\n      public string GetDescription()\n      {\n         return Properties.Resources.IFCEntitySelection;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCEntityTree/EntityTree.xaml",
    "content": "﻿<auiw:ChildWindow x:Class=\"BIM.IFC.Export.UI.EntityTree\"\n                  xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                  xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                  xmlns:System=\"clr-namespace:System;assembly=mscorlib\"\n                  xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n                  xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n                  xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\n                  xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\n                  mc:Ignorable=\"d\"\n                  Title=\"{x:Static p:Resources.SelectSingleElement}\"\n                  Height=\"649\"\n                  Width=\"750\"\n                  MinHeight=\"600\" \n                  MinWidth=\"650\"\n                  ResizeMode=\"CanResize\"\n                  WindowStyle=\"SingleBorderWindow\"\n                  SaveWindowSettings=\"True\">\n   <Grid x:Name=\"Grid_Main\" Margin=\"0,0,2,0\">\n      <Grid.ColumnDefinitions>\n         <ColumnDefinition Width=\"248\"/>\n         <ColumnDefinition MinWidth=\"200\" Width=\"2*\"/>\n         <ColumnDefinition MinWidth=\"300\" Width=\"3*\"/>\n      </Grid.ColumnDefinitions>\n      <Grid.RowDefinitions>\n         <RowDefinition Height=\"0\"/>\n         <RowDefinition Height=\"39\"/>\n         <RowDefinition Height=\"39\"/>\n         <RowDefinition Height=\"39\"/>\n         <RowDefinition MinHeight=\"400\" Height=\"400*\"/>\n         <RowDefinition MinHeight=\"40\" Height=\"Auto\"/>\n      </Grid.RowDefinitions>\n      <GridSplitter HorizontalAlignment=\"Left\" Grid.Column=\"2\" Grid.Row=\"4\" Background=\"Gainsboro\" Margin=\"44,0,0,3\" Width=\"2\" />\n      <Label x:Name=\"Label_IFCSchema\" Content=\"{x:Static p:Resources.IFCSchemaVersion}\" Margin=\"0,10,0,5\" Grid.Row=\"1\" HorizontalAlignment=\"Center\" MinWidth=\"140\" Width=\"228\"/>\n      <ComboBox x:Name=\"ComboBox_IFCSchema\" Margin=\"10,10,10,5\" SelectionChanged=\"ComboBox_IFCSchema_SelectionChanged\" Grid.Column=\"1\" Grid.Row=\"1\"/>\n      <Border BorderBrush=\"Gainsboro\" BorderThickness=\"1\" Grid.Row=\"4\" Grid.ColumnSpan=\"2\" Margin=\"5,3,1,3\" >\n         <TreeView x:Name=\"IFCEntityTreeView\" Background=\"White\" BorderBrush=\"White\" SelectedItemChanged=\"IFCEntityTreeView_SelectedItemChanged\" Margin=\"0,0,0,0\" />\n      </Border>\n      <Border BorderBrush=\"Gainsboro\" BorderThickness=\"1\" Grid.Row=\"4\" Grid.Column=\"2\" Margin=\"1,3,5,3\" MinWidth=\"200\" >\n         <TreeView x:Name=\"PredefinedTypeTreeView\" Background=\"White\" BorderBrush=\"White\" Margin=\"0,0,0,0\" />\n      </Border>\n      <Label x:Name=\"Label_Search\" Content=\"{x:Static p:Resources.Search}\" Margin=\"10,0,0,0\" Grid.Row=\"2\" HorizontalAlignment=\"Left\" Width=\"140\" Height=\"25\" VerticalAlignment=\"Center\"/>\n      <TextBox x:Name=\"textBox_Search\" Grid.Column=\"1\" Height=\"26\" Margin=\"10,0,10,0\" Grid.Row=\"2\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\" TextChanged=\"textBox_Search_TextChanged\" />\n      <TextBlock Name=\"textBlock_Help\" VerticalAlignment=\"Center\" Grid.Row=\"5\" Margin=\"5,0,0,0\" Height=\"23\" Grid.ColumnSpan=\"2\" HorizontalAlignment=\"Left\" MinWidth=\"259\">\n         <Hyperlink Click=\"OnHelpClick\">\n            <Run Name=\"HelpRun\" Text=\"{x:Static p:Resources.HelpAssignIfcEntity}\" x:Uid=\"LearnMoreHyperlink\" />\n         </Hyperlink>\n      </TextBlock>\n      <StackPanel Grid.ColumnSpan=\"3\" Margin=\"5,5,0,0\" Orientation=\"Horizontal\" Grid.Row=\"3\" HorizontalAlignment=\"Left\" Width=\"730\" Height=\"26\" VerticalAlignment=\"Top\">\n         <Button x:Name=\"button_ExpandAll\" HorizontalAlignment=\"Left\" Margin=\"0,2,0,0\" MinWidth=\"80\" Padding=\"1\" VerticalAlignment=\"Top\" ToolTip=\"{x:Static p:Resources.ExpandAll}\" \n            Click=\"button_ExpandAll_Click\" Content=\"{x:Static p:Resources.ExpandAll}\" UseLayoutRounding=\"False\" Height=\"24\" >\n         </Button>\n         <Button x:Name=\"button_CollapseAll\" HorizontalAlignment=\"Left\" Margin=\"5,2,0,0\" MinWidth=\"82\" Padding=\"1\" VerticalAlignment=\"Top\" ToolTip=\"{x:Static p:Resources.CollapseAll}\" \n            Click=\"button_CollapseAll_Click\" Content=\"{x:Static p:Resources.CollapseAll}\" Height=\"24\">\n         </Button>\n         <Label x:Name=\"label_Show\" Content=\"{x:Static p:Resources.Show}\" VerticalAlignment=\"Top\" Margin=\"20,2,0,0\"/>\n         <ComboBox x:Name=\"comboBox_ShowItems\" Margin=\"15,2,0,0\" VerticalAlignment=\"Top\" Width=\"150\" Height=\"24\" SelectionChanged=\"comboBox_ShowItems_SelectionChanged\" />\n      </StackPanel>\n      <StackPanel Name=\"Action_buttons\" Margin=\"30,8,20,10\" Orientation=\"Horizontal\" Grid.Row=\"5\" HorizontalAlignment=\"Right\" MinWidth=\"260\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\">\n         <Button x:Name=\"button_Reset\" Content=\"{x:Static p:Resources.Reset}\" HorizontalAlignment=\"Left\" Width=\"80\" Click=\"button_Reset_Click\" Margin=\"0,0,10,0\" />\n         <Button x:Name=\"Button_OK\" Content=\"{x:Static p:Resources.OK}\" HorizontalAlignment=\"Left\" Width=\"80\" Click=\"Button_OK_Click\" Padding=\"1\" Margin=\"0,0,10,0\"/>\n         <Button x:Name=\"Button_Cancel\" Content=\"{x:Static p:Resources.Cancel}\" HorizontalAlignment=\"Left\" Width=\"80\" Click=\"Button_Cancel_Click\" Padding=\"1\"/>\n      </StackPanel>\n      <CheckBox x:Name=\"CheckBox_ByCategory\" Content=\"{x:Static p:Resources.ByCategoryNoBrackets}\" Margin=\"110,10,10,5\" Grid.Column=\"2\" Grid.Row=\"1\" HorizontalAlignment=\"Right\" Click=\"CheckBox_ByCategory_Clicked\" />\n   </Grid>\n</auiw:ChildWindow>"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCEntityTree/EntityTree.xaml.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.IO;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Controls.Primitives;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Common.Utility;\r\nusing Autodesk.UI.Windows;\r\nusing System.Printing;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// Interaction logic for EntityTree.xaml\r\n   /// </summary>\r\n   public partial class EntityTree : ChildWindow\r\n   {\r\n      private TreeView TreeView { get; } = new TreeView();\r\n\r\n      private TreeViewItem PrevSelPDefItem { get; set; } = null;\r\n\r\n      private IDictionary<string, TreeViewItem> TreeViewItemDict { get; set; } = new Dictionary<string, TreeViewItem>(StringComparer.OrdinalIgnoreCase);\r\n\r\n      private IFCEntityTrie m_EntityTrie = null;\r\n\r\n      public string CurrentIFCVersion { get; private set; } = null;\r\n\r\n      private HashSet<string> PreselectedSet { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Indicates whether preselection should be propagated to child nodes.\r\n      /// </summary>\r\n      private bool PropagatePreselection { get; set; } = false;\r\n\r\n      private TreeViewItem PrevSelEntityItem { get; set; } = null;\r\n\r\n      private string TreeSelectionDesc { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Option to define if the tree is used for a single node selection\r\n      /// </summary>\r\n      private bool SingleNodeSelection { get; set; } = false;\r\n\r\n      public enum SelectionStrategyType\r\n      {\r\n         Exclusion,\r\n         Inclusion,\r\n      }\r\n\r\n      /// <summary>\r\n      /// Option to select the strategy for selection, i.e. is the primary intention to include or exclude some intities.\r\n      /// </summary>\r\n      private SelectionStrategyType SelectionStrategy { get; set; } = SelectionStrategyType.Exclusion;\r\n\r\n      private bool DefaultCheckedState { get; set; } = true;\r\n\r\n      /// <summary>\r\n      /// Option to synchronize selection of type entity, i.e. if the Type is checked/unchecked\r\n      /// the associated Entity will be checked/unchecked too and vice versa.\r\n      /// </summary>\r\n      private bool SynchronizeSelectionWithType { get; set; } = true;\r\n\r\n      /// <summary>\r\n      /// Option to show IfcTypeObject tree only\r\n      /// </summary>\r\n      private bool ShowTypeNodeOnly { get; set; } = false;\r\n\r\n      private bool AllowIfcAnnotation { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Flag to indicate that the null selection is meant to reset the selected entity\r\n      /// </summary>\r\n      public bool IsReset { get; private set; } = false;\r\n\r\n      /// <summary>\r\n      /// A list of localized names for categories that allow mapping to IfcAnnotation.\r\n      /// </summary>\r\n      private static ISet<BuiltInCategory> AllowedCategoryIdsForIfcAnnotation = new HashSet<BuiltInCategory>();\r\n\r\n      /// <summary>\r\n      /// A list of localized names for categories that allow mapping to IfcAnnotation.\r\n      /// </summary>\r\n      private static ISet<string> AllowedCategoriesForIfcAnnotation = new HashSet<string>();\r\n\r\n      private static string VersionForSession { get; set; } = IfcSchemaEntityTree.SchemaName(IFCVersion.IFC4x3RV);\r\n\r\n      private static void InitAllowedCategoryIdsForIfcAnnotation()\r\n      {\r\n         if (AllowedCategoryIdsForIfcAnnotation.Count == 0)\r\n         {\r\n            AllowedCategoryIdsForIfcAnnotation = new HashSet<BuiltInCategory>()\r\n            {\r\n               BuiltInCategory.OST_Lines,\r\n               BuiltInCategory.OST_SiteProperty\r\n            };\r\n         }\r\n      }\r\n\r\n      private static void InitAllowedCategoriesForIfcAnnotation(Document document)\r\n      {\r\n         if (AllowedCategoriesForIfcAnnotation.Count == 0)\r\n         {\r\n            AllowedCategoriesForIfcAnnotation = new HashSet<string>();\r\n            foreach (BuiltInCategory categoryId in AllowedCategoryIdsForIfcAnnotation)\r\n            {\r\n               AllowedCategoriesForIfcAnnotation.Add(\r\n                  Category.GetCategory(document, categoryId).Name);\r\n            };\r\n         }\r\n      }\r\n\r\n      private static bool IsIfcAnnotationAllowedForCategory(Document document, string categoryName)\r\n      {\r\n         if (categoryName == null)\r\n         {\r\n            return false;\r\n         }\r\n\r\n         InitAllowedCategoryIdsForIfcAnnotation();\r\n\r\n         InitAllowedCategoriesForIfcAnnotation(document);\r\n\r\n         return AllowedCategoriesForIfcAnnotation.Contains(categoryName);\r\n      }\r\n\r\n      private static bool IsIfcAnnotationAllowedForCategoryId(BuiltInCategory categoryId)\r\n      {\r\n         InitAllowedCategoryIdsForIfcAnnotation();\r\n\r\n         return AllowedCategoryIdsForIfcAnnotation.Contains(categoryId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructor for initializing EntityTree\r\n      /// </summary>\r\n      /// <param name=\"preSelectPdef\">Pre-select the predefined type</param>\r\n      /// <param name=\"preSelectEntity\">Pre-select the entities</param>\r\n      /// <param name=\"showTypeNodeOnly\">Option to show IfcTypeObject tree only</param>\r\n      /// <param name=\"byCategory\">Show the \"By Category\" checkbox if not null, and set value appropriately.</param>\r\n      public EntityTree(IList<ElementId> elementIds, bool showTypeNodeOnly, string preSelectEntity, string preSelectPdef,\r\n         bool? byCategory)\r\n      {\r\n         AllowIfcAnnotation = true;\r\n         Document document = IFCCommandOverrideApplication.TheDocument;\r\n         foreach (ElementId elementId in elementIds)\r\n         {\r\n            Element element = document.GetElement(elementId);\r\n            (_, ElementId categoryId) = ExporterUtil.GetSpecificCategoryForElement(element);\r\n\r\n            BuiltInCategory builtInCategory = (BuiltInCategory)categoryId.Value;\r\n            if (!IsIfcAnnotationAllowedForCategoryId(builtInCategory))\r\n            {\r\n               AllowIfcAnnotation = false;\r\n               break;\r\n            }\r\n         }\r\n\r\n         CurrentIFCVersion = null;\r\n         PreselectedSet = FillSetFromList(null);\r\n         SingleNodeSelection = true;\r\n         TreeSelectionDesc = null;\r\n         ShowTypeNodeOnly = showTypeNodeOnly;\r\n         SelectionStrategy = SelectionStrategyType.Exclusion;\r\n         DefaultCheckedState = SelectionStrategy == SelectionStrategyType.Exclusion;\r\n         SynchronizeSelectionWithType = true;\r\n         InitializeEntityTree(preSelectEntity, preSelectPdef, byCategory);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructor for initializing EntityTree\r\n      /// </summary>\r\n      /// <param name=\"currMappingNode\">The category mapping node.</param>\r\n      public EntityTree(CategoryMappingNode currMappingNode)\r\n      {\r\n         IFCMappingInfo mappingInfo = currMappingNode.MappingInfo;\r\n         CategoryMappingNode parentNode = currMappingNode.Parent;\r\n\r\n         bool? byCategory = null;\r\n\r\n         Document document = IFCCommandOverrideApplication.TheDocument;\r\n         AllowIfcAnnotation = IsIfcAnnotationAllowedForCategory(document, mappingInfo.CategoryName);\r\n\r\n         if (parentNode != null)\r\n         {\r\n            byCategory = string.IsNullOrEmpty(mappingInfo.IfcClass);\r\n            AllowIfcAnnotation = AllowIfcAnnotation || IsIfcAnnotationAllowedForCategory(document, parentNode.MappingInfo.CategoryName);\r\n         }\r\n\r\n         CurrentIFCVersion = null;\r\n         PreselectedSet = FillSetFromList(null);\r\n         SingleNodeSelection = true;\r\n         TreeSelectionDesc = null;\r\n         ShowTypeNodeOnly = false;\r\n         SelectionStrategy = SelectionStrategyType.Exclusion;\r\n         DefaultCheckedState = SelectionStrategy == SelectionStrategyType.Exclusion;\r\n         SynchronizeSelectionWithType = true;\r\n         InitializeEntityTree(mappingInfo.IfcClass, mappingInfo.PredefinedType, byCategory);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructor for initializing EntityTree\r\n      /// </summary>\r\n      /// <param name=\"ifcVersion\">the selected IFC version, if given. This will \"lock\" the schema version in the dialog</param>\r\n      /// <param name=\"preselectFilter\">the initial list of the choosen entities. Can be used to initialize the setting</param>\r\n      /// <param name=\"singleNodeSelection\">true if the tree is used for a single node selection</param>\r\n      /// <param name=\"selectionStrategy\">the selection strategy</param>\r\n      /// <param name=\"synchronizeSelectionWithType\">pre-select the predefined type</param>\r\n      /// <param name=\"propagatePreselection\">initial selection of a node selects all its children</param>\r\n      public EntityTree(IFCVersion? ifcVersion, string preselectFilter, string desc, bool singleNodeSelection,\r\n         SelectionStrategyType selectionStrategy, bool synchronizeSelectionWithType, bool propagatePreselection)\r\n      {\r\n         CurrentIFCVersion = ifcVersion.HasValue ? IfcSchemaEntityTree.SchemaName(ifcVersion.Value) : string.Empty;\r\n         PreselectedSet = FillSetFromList(preselectFilter);\r\n         PropagatePreselection = propagatePreselection;\r\n         SingleNodeSelection = singleNodeSelection;\r\n         TreeSelectionDesc = desc;\r\n         ShowTypeNodeOnly = false;\r\n         SelectionStrategy = selectionStrategy;\r\n         DefaultCheckedState = SelectionStrategy == SelectionStrategyType.Exclusion;\r\n         SynchronizeSelectionWithType = synchronizeSelectionWithType;\r\n         InitializeEntityTree(null, null, null);\r\n      }\r\n\r\n      void InitializeEntityTree(string preSelectEntity, string preSelectPDef, bool? byCategory)\r\n      {\r\n         IfcSchemaEntityTree.GetAllEntityDict();\r\n         InitializeComponent();\r\n\r\n         textBox_Search.Focus();\r\n\r\n         CheckBox_ByCategory.Visibility = (byCategory != null) ? System.Windows.Visibility.Visible :\r\n            System.Windows.Visibility.Hidden;\r\n         CheckBox_ByCategory.IsChecked = byCategory.GetValueOrDefault(false);\r\n\r\n         if (SingleNodeSelection)\r\n         {\r\n            label_Show.Visibility = System.Windows.Visibility.Hidden;\r\n            comboBox_ShowItems.Visibility = System.Windows.Visibility.Hidden;\r\n         }\r\n         else\r\n         {\r\n            HelpRun.Text = Properties.Resources.HelpSelectEntityForExport;\r\n            comboBox_ShowItems.ItemsSource = new List<string>() { Properties.Resources.ShowAll, Properties.Resources.ShowChecked, Properties.Resources.ShowUnchecked };\r\n            comboBox_ShowItems.SelectedIndex = 0;  // Default selection to show All\r\n         }\r\n\r\n         // If the IFC schema version is selected for export, the combobox will be disabled for selection\r\n         ComboBox_IFCSchema.IsEnabled = false;\r\n         // Assign default\r\n\r\n         if (string.IsNullOrEmpty(CurrentIFCVersion))\r\n         {\r\n            CurrentIFCVersion = VersionForSession;\r\n            ComboBox_IFCSchema.IsEnabled = true;\r\n         }\r\n\r\n         ComboBox_IFCSchema.ItemsSource = IfcSchemaEntityTree.GetAllCachedSchemaNames();\r\n         ComboBox_IFCSchema.SelectedItem = CurrentIFCVersion;\r\n         if (SingleNodeSelection)\r\n         {\r\n            Grid_Main.ColumnDefinitions[2].MinWidth = 200;\r\n         }\r\n         else\r\n         {\r\n            // In multi-selection mode, hide the TreView panel for the PredefinedType\r\n            Grid_Main.ColumnDefinitions[2].MinWidth = 0;\r\n            GridLengthConverter grLenConv = new GridLengthConverter();\r\n            GridLength grLen = (GridLength)grLenConv.ConvertFrom(0);\r\n            Grid_Main.ColumnDefinitions[2].Width = grLen;\r\n         }\r\n\r\n         LoadTreeviewFilterElement();\r\n         PreSelectItem(preSelectEntity, preSelectPDef);\r\n         IfcSchemaEntityTree.GenerateEntityTrie(ref m_EntityTrie);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Pre-select the Entity (and Predefined Type) if they are set by the server (only valid for single selection mode)\r\n      /// </summary>\r\n      /// <param name=\"preSelectEntity\">Entity to be pre-selected</param>\r\n      /// <param name=\"preSelectPDef\">Predefined Type to be pre-selected</param>\r\n      void PreSelectItem(string preSelectEntity, string preSelectPDef)\r\n      {\r\n         if (SingleNodeSelection && !string.IsNullOrEmpty(preSelectEntity))\r\n         {\r\n            if (TreeViewItemDict.TryGetValue(preSelectEntity, out TreeViewItem assocTypeItem))\r\n            {\r\n               (assocTypeItem.Header as ToggleButton).IsChecked = true;\r\n               assocTypeItem.BringIntoView();\r\n\r\n               if (!string.IsNullOrEmpty(preSelectPDef))\r\n               {\r\n                  foreach (TreeViewItem tvi in PredefinedTypeTreeView.Items)\r\n                  {\r\n                     foreach (TreeViewItem predefItem in tvi.Items)\r\n                     {\r\n                        if (predefItem.Name.Equals(preSelectPDef))\r\n                        {\r\n                           RadioButton cbElem = predefItem.Header as RadioButton;\r\n                           cbElem.IsChecked = true;\r\n                           return;\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n            else\r\n            {\r\n               PredefinedTypeTreeView.ItemsSource = null;\r\n               PrevSelPDefItem = null;\r\n            }\r\n         }\r\n         else if (!SingleNodeSelection && !string.IsNullOrEmpty(preSelectEntity))\r\n         {\r\n            if (TreeViewItemDict.TryGetValue(preSelectEntity, out TreeViewItem assocTypeItem))\r\n               assocTypeItem.BringIntoView();\r\n         }\r\n      }\r\n\r\n      private bool AllowSelection()\r\n      {\r\n         if (CheckBox_ByCategory.Visibility == System.Windows.Visibility.Hidden)\r\n            return true;\r\n\r\n         return !CheckBox_ByCategory.IsChecked.GetValueOrDefault(false);\r\n      }\r\n\r\n      private (TreeViewItem, IfcSchemaEntityNode) AddTreeViewItem(bool add, string name,\r\n         IfcSchemaEntityTree ifcEntityTree, bool recurse)\r\n      {\r\n         if (!add)\r\n            return (null, null);\r\n\r\n         IfcSchemaEntityNode entityNode;\r\n         if (!ifcEntityTree.IfcEntityDict.TryGetValue(name, out entityNode))\r\n            return (null, null);\r\n\r\n         // From IfcProductNode, recursively get all the children nodes and assign them into the treeview node (they are similar in the form)\r\n         TreeViewItem treeViewItem = new TreeViewItem();\r\n         treeViewItem.Name = name;\r\n         if (SingleNodeSelection)\r\n         {\r\n            treeViewItem.Header = entityNode.Name + \" \" + TreeSelectionDesc;\r\n         }\r\n         else\r\n         {\r\n            ToggleButton itemNode = new CheckBox();\r\n            itemNode.Name = name;\r\n            itemNode.Content = name;\r\n            itemNode.IsChecked = DefaultCheckedState;\r\n            treeViewItem.Header = itemNode;\r\n            itemNode.Checked += new RoutedEventHandler(TreeViewItem_HandleChecked);\r\n            itemNode.Unchecked += new RoutedEventHandler(TreeViewItem_HandleUnchecked);\r\n         }\r\n         treeViewItem.IsExpanded = true;\r\n         treeViewItem.FontWeight = FontWeights.Bold;\r\n\r\n         if (recurse)\r\n         {\r\n            TreeView.Items.Add(GetNode(entityNode, treeViewItem, PreselectedSet));\r\n         }\r\n         else\r\n         {\r\n            TreeView.Items.Add(treeViewItem);\r\n         }\r\n\r\n         return (treeViewItem, entityNode);\r\n      }\r\n\r\n      void LoadTreeviewFilterElement()\r\n      {\r\n         button_Reset.IsEnabled = true;\r\n         try\r\n         {\r\n            // Search for IfcProduct in ifcXML schema and build TreeView beginning\r\n            // from that node. Allow checks for the tree nodes. Grey out (and Italic) abstract\r\n            // entities.\r\n            m_EntityTrie = new IFCEntityTrie();\r\n            IfcSchemaEntityTree ifcEntityTree = IfcSchemaEntityTree.GetEntityDictFor(CurrentIFCVersion);\r\n            if (ifcEntityTree != null || TreeView.Items.Count == 0)\r\n            {\r\n               TreeView.Items.Clear();\r\n               TreeViewItemDict.Clear();\r\n\r\n               AddTreeViewItem(!ShowTypeNodeOnly, \"IfcProduct\", ifcEntityTree, true);\r\n               AddTreeViewItem(true, \"IfcTypeProduct\", ifcEntityTree, true);\r\n\r\n               TreeViewItem groupHeader;\r\n               IfcSchemaEntityNode ifcGroupNode;\r\n               (groupHeader, ifcGroupNode) = AddTreeViewItem(!ShowTypeNodeOnly, \"IfcGroup\", ifcEntityTree, false);\r\n\r\n               if (groupHeader != null && ifcGroupNode != null)\r\n               {\r\n                  // From IfcGroup Node, recursively get all the children nodes and assign them\r\n                  // into the treeview node (they are similar in the form)\r\n                  TreeViewItem groupNode = new TreeViewItem();\r\n                  ToggleButton groupNodeItem;\r\n                  if (SingleNodeSelection)\r\n                     groupNodeItem = new RadioButton();\r\n                  else\r\n                     groupNodeItem = new CheckBox();\r\n                  groupNode.Name = \"IfcGroup\";\r\n                  groupNode.Header = groupNodeItem;\r\n                  groupNode.IsExpanded = true;\r\n                  TreeViewItemDict.Add(groupNode.Name, groupNode);\r\n                  m_EntityTrie.AddIFCEntityToDict(groupNode.Name);\r\n\r\n                  groupNodeItem.Name = \"IfcGroup\";\r\n                  groupNodeItem.Content = \"IfcGroup\";\r\n                  groupNodeItem.FontWeight = FontWeights.Normal;\r\n                  groupNodeItem.IsChecked = DefaultCheckedState;\r\n                  if (SingleNodeSelection)\r\n                     groupNodeItem.IsChecked = false;\r\n\r\n                  if (PreselectedSet.Contains(groupNode.Name))\r\n                     groupNodeItem.IsChecked = !DefaultCheckedState;     // remember the earlier choice\r\n\r\n                  groupNodeItem.Checked += new RoutedEventHandler(TreeViewItem_HandleChecked);\r\n                  groupNodeItem.Unchecked += new RoutedEventHandler(TreeViewItem_HandleUnchecked);\r\n\r\n                  groupHeader.Items.Add(GetNode(ifcGroupNode, groupNode, PreselectedSet));//, forcePreselection));\r\n               }\r\n            }\r\n            else\r\n            {\r\n               // Check all elements that have been selected before for this configuration\r\n               foreach (TreeViewItem tvItem in TreeView.Items)\r\n               {\r\n                  ProcessPreselectedNode(tvItem, PreselectedSet);\r\n               }\r\n            }\r\n\r\n            bool isEnabled = AllowSelection();\r\n            TreeView.IsEnabled = isEnabled;\r\n            IFCEntityTreeView.IsEnabled = isEnabled;\r\n         }\r\n         catch\r\n         {\r\n            // Error above in processing - disable the tree view.\r\n            CheckBox_ByCategory.IsEnabled = false;\r\n            IFCEntityTreeView.IsEnabled = false;\r\n            TreeView.IsEnabled = false;\r\n         }\r\n\r\n         IFCEntityTreeView.ItemsSource = TreeView.Items;\r\n      }\r\n\r\n      void ProcessPreselectedNode(TreeViewItem node, HashSet<string> preselectedSet)\r\n      {\r\n         // No need to do anything for single selection mode\r\n         if (SingleNodeSelection)\r\n            return;\r\n\r\n         CheckBox chkbox = node.Header as CheckBox;\r\n         if (chkbox != null)\r\n         {\r\n            if (preselectedSet.Contains(chkbox.Name))\r\n               chkbox.IsChecked = false;\r\n         }\r\n         foreach (TreeViewItem nodeChld in node.Items)\r\n            ProcessPreselectedNode(nodeChld, preselectedSet);\r\n      }\r\n\r\n      TreeViewItem GetNode(IfcSchemaEntityNode ifcNode, TreeViewItem thisNode, HashSet<string> preselectedSet)\r\n      {\r\n         Document document = IFCCommandOverrideApplication.TheDocument;\r\n         bool foundIfcAnnotation = false;\r\n         foreach (IfcSchemaEntityNode ifcNodeChild in ifcNode.GetChildren())\r\n         {\r\n            string ifcClassName = ifcNodeChild.Name;\r\n\r\n            // Skip deprecated entity\r\n            if (IfcSchemaEntityTree.IsDeprecatedOrUnsupported(CurrentIFCVersion, ifcClassName))\r\n            {\r\n               continue;\r\n            }\r\n\r\n            if (!AllowIfcAnnotation && !foundIfcAnnotation && string.Compare(ifcClassName, \"IfcAnnotation\") == 0)\r\n            {\r\n               foundIfcAnnotation = true;\r\n               continue;\r\n            }\r\n\r\n            TreeViewItem childNode = new TreeViewItem();\r\n            if (SingleNodeSelection)\r\n            {\r\n               childNode.Name = ifcClassName;\r\n               TreeViewItemDict.Add(ifcClassName, childNode);\r\n               m_EntityTrie.AddIFCEntityToDict(ifcClassName);\r\n\r\n               if (ifcNodeChild.isAbstract)\r\n               {\r\n                  childNode.Header = ifcClassName;\r\n                  childNode.FontWeight = FontWeights.Normal;\r\n               }\r\n               else\r\n               {\r\n                  ToggleButton childNodeItem = new RadioButton();\r\n                  childNodeItem.Name = ifcClassName;\r\n                  childNodeItem.Content = ifcClassName;\r\n                  childNodeItem.FontWeight = FontWeights.Normal;\r\n                  childNodeItem.IsChecked = false;\r\n                  childNodeItem.Checked += new RoutedEventHandler(TreeViewItem_HandleChecked);\r\n                  childNodeItem.Unchecked += new RoutedEventHandler(TreeViewItem_HandleUnchecked);\r\n                  childNode.Header = childNodeItem;\r\n               }\r\n            }\r\n            else\r\n            {\r\n               childNode.Name = ifcNodeChild.Name;\r\n               TreeViewItemDict.Add(childNode.Name, childNode);\r\n               m_EntityTrie.AddIFCEntityToDict(ifcNodeChild.Name);\r\n\r\n               ToggleButton childNodeItem;\r\n               childNodeItem = new CheckBox\r\n               {\r\n                  Name = ifcNodeChild.Name,\r\n                  Content = ifcNodeChild.Name,\r\n                  FontWeight = FontWeights.Normal,\r\n                  IsChecked = DefaultCheckedState\r\n               };\r\n                              \r\n               if (preselectedSet.Contains(ifcNodeChild.Name) ||\r\n                  PropagatePreselection && IsNodeInNonDefaultCheckedState(thisNode))\r\n               {\r\n                  childNodeItem.IsChecked = !DefaultCheckedState;\r\n               }\r\n               \r\n               childNodeItem.Checked += new RoutedEventHandler(TreeViewItem_HandleChecked);\r\n               childNodeItem.Unchecked += new RoutedEventHandler(TreeViewItem_HandleUnchecked);\r\n               childNode.Header = childNodeItem;\r\n            }\r\n\r\n            childNode.IsExpanded = true;\r\n            childNode = GetNode(ifcNodeChild, childNode, preselectedSet);\r\n            thisNode.Items.Add(childNode);\r\n         }\r\n         return thisNode;\r\n      }\r\n\r\n      bool IsNodeInNonDefaultCheckedState(TreeViewItem node)\r\n      {\r\n         var toggleButton = node?.Header as ToggleButton;\r\n         bool isChecked = toggleButton?.IsChecked ?? DefaultCheckedState;\r\n         return isChecked != DefaultCheckedState;\r\n      }\r\n\r\n      void TreeViewItem_HandleChecked(object sender, RoutedEventArgs eventArgs)\r\n      {\r\n         ToggleButton cbItem = sender as ToggleButton;\r\n         TreeViewItem node = cbItem.Parent as TreeViewItem;\r\n         if (SingleNodeSelection)\r\n            CheckUncheckSingleSelection(node, true);\r\n         else\r\n            CheckOrUnCheckThisNodeAndBelow(node, isChecked: true);\r\n      }\r\n\r\n      void TreeViewItem_HandleUnchecked(object sender, RoutedEventArgs eventArgs)\r\n      {\r\n         ToggleButton cbItem = sender as ToggleButton;\r\n         TreeViewItem node = cbItem.Parent as TreeViewItem;\r\n         if (SingleNodeSelection)\r\n            CheckOrUnCheckThisNodeAndBelow(node, false);\r\n         else\r\n            CheckOrUnCheckThisNodeAndBelow(node, isChecked: false);\r\n      }\r\n\r\n      void CheckUncheckSingleSelection(TreeViewItem thisNode, bool isChecked)\r\n      {\r\n         if (PrevSelEntityItem != null)\r\n         {\r\n            ToggleButton prevCBSel = (PrevSelEntityItem.Header as ToggleButton);\r\n            if (prevCBSel != null)\r\n               prevCBSel.IsChecked = false;    // Reset the previous selection if any\r\n         }\r\n         (thisNode.Header as ToggleButton).IsChecked = isChecked;\r\n         if (isChecked)\r\n         {\r\n            PrevSelEntityItem = thisNode;\r\n            InitializePreDefinedTypeSelection(CurrentIFCVersion, thisNode.Name);\r\n         }\r\n      }\r\n\r\n      void CheckOrUnCheckThisNodeAndBelow(TreeViewItem thisNode, bool isChecked)\r\n      {\r\n         ToggleButton item = thisNode.Header as ToggleButton;\r\n         if (item == null)\r\n            return;\r\n\r\n         item.IsChecked = isChecked;\r\n\r\n         if (SynchronizeSelectionWithType)\r\n         {\r\n            // Here, to make sure the exclusion/inclusion is consistent for IfcProduct and IfcTypeProduct, \r\n            // if the Type is checked/unchecked the associated Entity will be checked/unchecked too\r\n            // and the other way round too: if the Entity is checked/unchecked the associated Type will be checked/unchecked\r\n            string clName = thisNode.Name.Substring(thisNode.Name.Length - 4, 4).Equals(\"Type\", StringComparison.CurrentCultureIgnoreCase) ? thisNode.Name.Substring(0, thisNode.Name.Length - 4) : thisNode.Name;\r\n            string tyName = thisNode.Name.Substring(thisNode.Name.Length - 4, 4).Equals(\"Type\", StringComparison.CurrentCultureIgnoreCase) ? thisNode.Name : thisNode.Name + \"Type\";\r\n            if (thisNode.Name.Equals(clName))\r\n            {\r\n               TreeViewItem assocTypeItem;\r\n               if (TreeViewItemDict.TryGetValue(tyName, out assocTypeItem))\r\n               {\r\n                  ToggleButton assocType = assocTypeItem.Header as ToggleButton;\r\n                  if (assocType != null)\r\n                     assocType.IsChecked = isChecked;\r\n               }\r\n            }\r\n            else if (thisNode.Name.Equals(tyName))\r\n            {\r\n               TreeViewItem assocEntityItem;\r\n               if (TreeViewItemDict.TryGetValue(clName, out assocEntityItem))\r\n               {\r\n                  ToggleButton assocType = assocEntityItem.Header as ToggleButton;\r\n                  if (assocType != null)\r\n                     assocType.IsChecked = isChecked;\r\n               }\r\n            }\r\n         }\r\n\r\n         foreach (TreeViewItem tvItem in thisNode.Items)\r\n            CheckOrUnCheckThisNodeAndBelow(tvItem, isChecked);\r\n      }\r\n\r\n      void EnableOrDisableThisNodeAndBelow(TreeViewItem thisNode, bool enable)\r\n      {\r\n         bool toEnable = enable;\r\n\r\n         // Always disable selection for the *StandardCase entities to avoid this type of confusion \"what it means when IfcWall is selected but not the IfcWallStandardCase?\"\r\n         if (thisNode.Name.Length > 12)\r\n            if (string.Compare(thisNode.Name, (thisNode.Name.Length - 12), \"StandardCase\", 0, 12, true) == 0)\r\n               toEnable = false;\r\n\r\n         // Must check if it is null (the first level in the tree is not a checkbox)\r\n         ToggleButton chkbox = thisNode.Header as ToggleButton;\r\n         if (chkbox != null)\r\n            chkbox.IsEnabled = toEnable;\r\n\r\n         // Here, to make sure the exclusion/inclusion is consistent for IfcProduct and IfcTypeProduct, \r\n         // if the Type is checked/unchecked the associated Entity will be checked/unchecked too\r\n         // and the other way round too: if the Entity is checked/unchecked the associated Type will be checked/unchecked\r\n         string clName = thisNode.Name.Substring(thisNode.Name.Length - 4, 4).Equals(\"Type\", StringComparison.CurrentCultureIgnoreCase) ? thisNode.Name.Substring(0, thisNode.Name.Length - 4) : thisNode.Name;\r\n         string tyName = thisNode.Name.Substring(thisNode.Name.Length - 4, 4).Equals(\"Type\", StringComparison.CurrentCultureIgnoreCase) ? thisNode.Name : thisNode.Name + \"Type\";\r\n         if (thisNode.Name.Equals(clName))\r\n         {\r\n            TreeViewItem assocTypeItem;\r\n            if (TreeViewItemDict.TryGetValue(tyName, out assocTypeItem))\r\n            {\r\n               ToggleButton assocType = assocTypeItem.Header as ToggleButton;\r\n               if (assocType != null)\r\n                  assocType.IsEnabled = toEnable;\r\n            }\r\n         }\r\n         else if (thisNode.Name.Equals(tyName))\r\n         {\r\n            TreeViewItem assocEntityItem;\r\n            if (TreeViewItemDict.TryGetValue(clName, out assocEntityItem))\r\n            {\r\n               ToggleButton assocType = assocEntityItem.Header as ToggleButton;\r\n               if (assocType != null)\r\n                  assocType.IsEnabled = toEnable;\r\n            }\r\n         }\r\n\r\n         foreach (TreeViewItem tvItem in thisNode.Items)\r\n            EnableOrDisableThisNodeAndBelow(tvItem, enable);\r\n      }\r\n\r\n      bool IsAllDescendantsChecked(TreeViewItem thisNode)\r\n      {\r\n         bool isAllChecked = true;\r\n\r\n         foreach (TreeViewItem tvItem in thisNode.Items)\r\n         {\r\n            ToggleButton itemCheckBox = tvItem.Header as ToggleButton;\r\n            if (itemCheckBox == null)\r\n               continue;\r\n\r\n            bool checkBoxIsChecked = false;\r\n            if (itemCheckBox.IsChecked.HasValue)\r\n               checkBoxIsChecked = itemCheckBox.IsChecked.Value;\r\n\r\n            isAllChecked = isAllChecked && checkBoxIsChecked;\r\n            if (!isAllChecked)\r\n               return false;\r\n\r\n            isAllChecked = isAllChecked && IsAllDescendantsChecked(tvItem);   // Do recursive check\r\n            if (!isAllChecked)\r\n               return false;\r\n         }\r\n         return true;\r\n      }\r\n\r\n      bool IsAllDescendantsUnhecked(TreeViewItem thisNode)\r\n      {\r\n         bool hasSomechecked = false;\r\n\r\n         foreach (TreeViewItem tvItem in thisNode.Items)\r\n         {\r\n            ToggleButton itemCheckBox = tvItem.Header as ToggleButton;\r\n            if (itemCheckBox == null)\r\n               continue;\r\n\r\n            bool checkBoxIsChecked = false;\r\n            if (itemCheckBox.IsChecked.HasValue)\r\n               checkBoxIsChecked = itemCheckBox.IsChecked.Value;\r\n\r\n            hasSomechecked = hasSomechecked || checkBoxIsChecked;\r\n            if (hasSomechecked)\r\n               return false;\r\n\r\n            hasSomechecked = hasSomechecked || IsAllDescendantsUnhecked(tvItem);    // Do recursive check\r\n            if (hasSomechecked)\r\n               return false;\r\n         }\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the list of entities that have been unselected\r\n      /// </summary>\r\n      /// <returns>the string containing the list of entity separated by \";\"</returns>\r\n      public string GetUnSelectedEntity()\r\n      {\r\n         string filteredElemList = string.Empty;\r\n         if (!DialogResult.HasValue || DialogResult.Value == false)\r\n            return filteredElemList;\r\n\r\n         foreach (TreeViewItem tvChld in TreeView.Items)\r\n            filteredElemList += GetSelectedEntity(tvChld, false);\r\n         return filteredElemList;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get selected entity in the string. It should be returning a single entity\r\n      /// </summary>\r\n      /// <returns>the string of the selected entity</returns>\r\n      public string GetSelectedEntity()\r\n      {\r\n         string filteredElemList = string.Empty;\r\n         if (!DialogResult.HasValue || DialogResult.Value == false)\r\n            return filteredElemList;\r\n\r\n         foreach (TreeViewItem tvChld in TreeView.Items)\r\n            filteredElemList += GetSelectedEntity(tvChld, true);\r\n         if (filteredElemList.EndsWith(\";\"))\r\n            filteredElemList = filteredElemList.Remove(filteredElemList.Length - 1);\r\n         return filteredElemList;\r\n      }\r\n\r\n      public string GetSelectedEntityParents()\r\n      {\r\n         string filteredElemList = string.Empty;\r\n         if (!DialogResult.HasValue || DialogResult.Value == false)\r\n            return filteredElemList;\r\n\r\n         foreach (TreeViewItem tvChld in TreeView.Items)\r\n         {\r\n            (string str, bool bl) = GetSelectedEntityParents(tvChld, true);\r\n            filteredElemList += str;\r\n         }\r\n\r\n         if (filteredElemList.EndsWith(\";\"))\r\n            filteredElemList = filteredElemList.Remove(filteredElemList.Length - 1);\r\n         return filteredElemList;\r\n      }\r\n\r\n      (string, bool) GetSelectedEntityParents(TreeViewItem tvItem, bool isChecked)\r\n      {\r\n         bool allChildrenChecked = true;\r\n         string filteredElemList = string.Empty;\r\n         ToggleButton cbElem = tvItem.Header as ToggleButton;\r\n\r\n         bool isLeaf = tvItem.Items.Count == 0;\r\n\r\n         if (isLeaf)\r\n         {\r\n            allChildrenChecked = false;\r\n            if (cbElem != null && cbElem.IsChecked.HasValue && cbElem.IsChecked.Value == isChecked)\r\n            {\r\n               filteredElemList += cbElem.Name + \";\";\r\n               allChildrenChecked = true;\r\n            }\r\n         }\r\n         else\r\n         {\r\n            foreach (TreeViewItem tvChld in tvItem.Items)\r\n            {\r\n               (string str, bool bl) = GetSelectedEntityParents(tvChld, isChecked);\r\n               filteredElemList += str;\r\n\r\n               if (allChildrenChecked && !bl)\r\n                  allChildrenChecked = false;\r\n            }\r\n         }\r\n\r\n         return (allChildrenChecked) ? (cbElem.Name + \";\", true) : (filteredElemList, false);\r\n      }\r\n\r\n      string GetSelectedEntity(TreeViewItem tvItem, bool isChecked)\r\n      {\r\n         string filteredElemList = string.Empty;\r\n         ToggleButton cbElem = tvItem.Header as ToggleButton;\r\n         if (cbElem != null)\r\n         {\r\n            if (cbElem.IsChecked.HasValue)\r\n               if (cbElem.IsChecked.Value == isChecked)\r\n                  filteredElemList += cbElem.Name + \";\";\r\n         }\r\n         foreach (TreeViewItem tvChld in tvItem.Items)\r\n            filteredElemList += GetSelectedEntity(tvChld, isChecked);\r\n\r\n         return filteredElemList;\r\n      }\r\n\r\n      void ClearTreeViewChecked()\r\n      {\r\n         foreach (TreeViewItem tvItem in TreeView.Items)\r\n            ClearTreeviewChecked(tvItem);\r\n      }\r\n\r\n      /// <summary>\r\n      /// This will clear any select/unselect and returns to the default which is ALL checked\r\n      /// </summary>\r\n      /// <param name=\"tv\"></param>\r\n      void ClearTreeviewChecked(TreeViewItem tv)\r\n      {\r\n         foreach (TreeViewItem tvItem in tv.Items)\r\n         {\r\n            ToggleButton cbElem = tvItem.Header as ToggleButton;\r\n            if (cbElem != null)\r\n               cbElem.IsChecked = false;\r\n\r\n            ClearTreeviewChecked(tvItem);\r\n         }\r\n      }\r\n\r\n      HashSet<string> FillSetFromList(string elemList)\r\n      {\r\n         HashSet<string> entitiesSet = new();\r\n         if (!string.IsNullOrEmpty(elemList))\r\n         {\r\n            elemList = elemList.TrimEnd(';');   // Remove the ending semicolon ';'\r\n            string[] eList = elemList.Split(';');\r\n            foreach (string elem in eList)\r\n               entitiesSet.Add(elem);\r\n         }\r\n         return entitiesSet;\r\n      }\r\n\r\n      private void IFCEntityTreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)\r\n      {\r\n\r\n      }\r\n\r\n      private void Button_Cancel_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         DialogResult = false;\r\n         IsReset = false;\r\n         Close();\r\n      }\r\n\r\n      private void Button_OK_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         DialogResult = true;\r\n         if (SingleNodeSelection)\r\n         {\r\n            IsReset = string.IsNullOrEmpty(GetSelectedEntity()) ||\r\n               string.IsNullOrEmpty(GetSelectedPredefinedType());\r\n         }\r\n         Close();\r\n      }\r\n      private void CheckBox_ByCategory_Clicked(object sender, RoutedEventArgs e)\r\n      {\r\n         bool byCategory = !AllowSelection();\r\n         if (byCategory)\r\n         {\r\n            ClearTreeViewChecked();\r\n            PredefinedTypeTreeView.ItemsSource = null;\r\n            PrevSelPDefItem = null;\r\n         }\r\n         IFCEntityTreeView.IsEnabled = !byCategory;\r\n         PredefinedTypeTreeView.IsEnabled = !byCategory;\r\n      }\r\n\r\n      private void ComboBox_IFCSchema_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         string currSelEntity = null;\r\n         string currSelPdef = null;\r\n         if (SingleNodeSelection)\r\n         {\r\n            currSelEntity = PrevSelEntityItem?.Name;\r\n            currSelPdef = PrevSelPDefItem?.Name;\r\n         }\r\n\r\n         string selIFCSchema = ComboBox_IFCSchema.SelectedItem.ToString();\r\n         if (!CurrentIFCVersion.Equals(selIFCSchema))\r\n         {\r\n            CurrentIFCVersion = selIFCSchema;\r\n            VersionForSession = CurrentIFCVersion;\r\n            m_EntityTrie = new IFCEntityTrie();\r\n            LoadTreeviewFilterElement();\r\n\r\n            if (SingleNodeSelection)\r\n            {\r\n               PreSelectItem(currSelEntity, currSelPdef);\r\n            }\r\n            else\r\n            {\r\n               PredefinedTypeTreeView.ItemsSource = null;\r\n               PrevSelPDefItem = null;\r\n            }\r\n            IfcSchemaEntityTree.GenerateEntityTrie(ref m_EntityTrie);\r\n         }\r\n      }\r\n\r\n      void InitializePreDefinedTypeSelection(string ifcSchema, string ifcEntitySelected)\r\n      {\r\n         if (string.IsNullOrEmpty(ifcEntitySelected))\r\n            return;\r\n\r\n         TreeView predefinedTypeTreeView = new TreeView();\r\n         IfcSchemaEntityTree ifcEntityTree = IfcSchemaEntityTree.GetEntityDictFor(ifcSchema);\r\n         IList<string> predefinedTypeList = IfcSchemaEntityTree.GetPredefinedTypeList(ifcEntityTree, ifcEntitySelected);\r\n\r\n         if (predefinedTypeList != null && predefinedTypeList.Count > 0)\r\n         {\r\n            TreeViewItem ifcEntityViewItem = new TreeViewItem();\r\n            ifcEntityViewItem.Name = ifcEntitySelected;\r\n            ifcEntityViewItem.Header = ifcEntitySelected + \".PREDEFINEDTYPE\";\r\n            ifcEntityViewItem.IsExpanded = true;\r\n            predefinedTypeTreeView.Items.Add(ifcEntityViewItem);\r\n\r\n            foreach (string predefItem in predefinedTypeList)\r\n            {\r\n               string deprecated = string.Empty;\r\n               // Mark deprecated predifined types as such.\r\n               if (IfcSchemaEntityTree.IsDeprecatedPredefinedType(CurrentIFCVersion, ifcEntitySelected, predefItem))\r\n               {\r\n                  deprecated = string.Format(\" ({0})\", Properties.Resources.DeprecatedMark);\r\n               }\r\n\r\n               TreeViewItem childNode = new TreeViewItem();\r\n               RadioButton childNodeItem = new RadioButton();\r\n               childNode.Name = predefItem;\r\n               childNodeItem.Name = predefItem;\r\n               childNodeItem.Content = predefItem + deprecated;\r\n               childNodeItem.Checked += new RoutedEventHandler(PredefSelected_Checked);\r\n               childNodeItem.Unchecked += new RoutedEventHandler(PredefSelected_Unchecked);\r\n               childNode.Header = childNodeItem;\r\n               ifcEntityViewItem.Items.Add(childNode);\r\n            }\r\n         }\r\n         else\r\n         {\r\n            TreeViewItem ifcEntityViewItem = new TreeViewItem();\r\n            ifcEntityViewItem.Name = ifcEntitySelected;\r\n            ifcEntityViewItem.Header = Properties.Resources.NoPredefinedType;\r\n            predefinedTypeTreeView.Items.Add(ifcEntityViewItem);\r\n         }\r\n         PredefinedTypeTreeView.ItemsSource = predefinedTypeTreeView.Items;\r\n      }\r\n\r\n      void PredefSelected_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         RadioButton cbElem = sender as RadioButton;\r\n         if (cbElem != null)\r\n         {\r\n            // Clear previously selected item first\r\n            if (PrevSelPDefItem != null)\r\n            {\r\n               RadioButton prevCBSel = PrevSelPDefItem.Header as RadioButton;\r\n               if (prevCBSel != null)\r\n                  prevCBSel.IsChecked = false;\r\n            }\r\n            cbElem.IsChecked = true;\r\n            PrevSelPDefItem = cbElem.Parent as TreeViewItem;\r\n         }\r\n      }\r\n\r\n      void PredefSelected_Unchecked(object sender, RoutedEventArgs e)\r\n      {\r\n         RadioButton cbElem = sender as RadioButton;\r\n         if (cbElem != null)\r\n            cbElem.IsChecked = false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the selected Predefined Type\r\n      /// </summary>\r\n      /// <returns>The selected Predefined Type string</returns>\r\n      public string GetSelectedPredefinedType()\r\n      {\r\n         if (PredefinedTypeTreeView.Items == null)\r\n            return null;\r\n\r\n         foreach (TreeViewItem tvi in PredefinedTypeTreeView.Items)\r\n         {\r\n            foreach (TreeViewItem predefItem in tvi.Items)\r\n            {\r\n               RadioButton cbElem = predefItem.Header as RadioButton;\r\n               if (cbElem != null && cbElem.IsChecked == true)\r\n                  return cbElem.Name;\r\n            }\r\n         }\r\n         return \"\";\r\n      }\r\n\r\n      private void TreeViewReturnToDefault()\r\n      {\r\n         IFCEntityTreeView.ItemsSource = TreeView.Items;\r\n         button_Reset.IsEnabled = true;\r\n         button_CollapseAll.IsEnabled = true;\r\n         button_ExpandAll.IsEnabled = true;\r\n      }\r\n\r\n      private void textBox_Search_TextChanged(object sender, TextChangedEventArgs e)\r\n      {\r\n         string partialWord = textBox_Search.Text;\r\n         if (string.IsNullOrWhiteSpace(partialWord))\r\n         {\r\n            TreeViewReturnToDefault();\r\n            return;\r\n         }\r\n\r\n         TreeView searchTreeView = new TreeView();\r\n         IList<string> searchResults = m_EntityTrie.PartialWordSearch(partialWord);\r\n\r\n         if (searchResults != null && searchResults.Count > 0)\r\n         {\r\n            foreach (string item in searchResults)\r\n            {\r\n               ToggleButton origItem = TreeViewItemDict[item].Header as ToggleButton;\r\n               if (origItem == null)\r\n                  continue;   // Skip non-ToggleButton item\r\n\r\n               TreeViewItem childNode = new TreeViewItem();\r\n               ToggleButton childNodeItem;\r\n               if (SingleNodeSelection)\r\n                  childNodeItem = new RadioButton();\r\n               else\r\n                  childNodeItem = new CheckBox();\r\n\r\n               childNode.Name = item;\r\n               childNodeItem.Name = item;\r\n               childNodeItem.Content = item;\r\n\r\n               // set check status following the original selection           \r\n               childNodeItem.IsChecked = origItem.IsChecked;\r\n               if (SingleNodeSelection && origItem.IsChecked == true)\r\n                  prevSelItem = childNode;\r\n\r\n               childNodeItem.Checked += new RoutedEventHandler(SearchItem_Checked);\r\n               childNodeItem.Unchecked += new RoutedEventHandler(SearchItem_Unchecked);\r\n               childNode.Header = childNodeItem;\r\n               searchTreeView.Items.Add(childNode);\r\n            }\r\n            IFCEntityTreeView.ItemsSource = searchTreeView.Items;\r\n         }\r\n         else\r\n            IFCEntityTreeView.ItemsSource = null;\r\n\r\n         button_Reset.IsEnabled = false;\r\n         button_CollapseAll.IsEnabled = false;\r\n         button_ExpandAll.IsEnabled = false;\r\n      }\r\n\r\n      TreeViewItem prevSelItem;\r\n\r\n      void SearchItem_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         ToggleButton cbElem = sender as ToggleButton;\r\n         if (cbElem != null)\r\n         {\r\n            // Clear previously selected item first\r\n            if (prevSelItem != null && SingleNodeSelection)\r\n            {\r\n               ToggleButton prevCBSel = prevSelItem.Header as ToggleButton;\r\n               if (prevCBSel != null)\r\n                  prevCBSel.IsChecked = false;\r\n            }\r\n            cbElem.IsChecked = true;\r\n            prevSelItem = cbElem.Parent as TreeViewItem;\r\n\r\n            // Set the selection status of the node in the original tree as well\r\n            TreeViewItem origTreeNode = TreeViewItemDict[prevSelItem.Name];\r\n            ToggleButton origTreeNodeTB = origTreeNode.Header as ToggleButton;\r\n            if (origTreeNodeTB != null)\r\n               origTreeNodeTB.IsChecked = true;\r\n         }\r\n         if (SingleNodeSelection)\r\n            InitializePreDefinedTypeSelection(CurrentIFCVersion, PrevSelEntityItem.Name);\r\n      }\r\n\r\n      void SearchItem_Unchecked(object sender, RoutedEventArgs e)\r\n      {\r\n         ToggleButton cbElem = sender as ToggleButton;\r\n         if (cbElem != null)\r\n            cbElem.IsChecked = false;\r\n         PredefinedTypeTreeView.ItemsSource = null;\r\n\r\n         // Set the selection status of the node in the original tree as well\r\n         // Note that when we change schema, the selected item may no longer exist.\r\n         string name = (cbElem.Parent as TreeViewItem).Name;\r\n         if (TreeViewItemDict.TryGetValue(name, out TreeViewItem origTreeNode))\r\n         {\r\n            ToggleButton origTreeNodeTB = origTreeNode.Header as ToggleButton;\r\n            if (origTreeNodeTB != null)\r\n               origTreeNodeTB.IsChecked = false;\r\n         }\r\n      }\r\n\r\n      private void button_Reset_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         LoadTreeviewFilterElement();\r\n         PredefinedTypeTreeView.ItemsSource = null;\r\n         PrevSelPDefItem = null;\r\n         prevSelItem = null;\r\n      }\r\n\r\n      void ExpandOrCollapseThisNodeAndBelow(TreeViewItem thisNode, bool expand)\r\n      {\r\n         thisNode.IsExpanded = expand;\r\n         foreach (TreeViewItem tvItem in thisNode.Items)\r\n            ExpandOrCollapseThisNodeAndBelow(tvItem, expand);\r\n      }\r\n\r\n      private void button_ExpandAll_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         foreach (TreeViewItem item in TreeView.Items)\r\n            ExpandOrCollapseThisNodeAndBelow(item, true);\r\n      }\r\n\r\n      private void button_CollapseAll_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         foreach (TreeViewItem item in TreeView.Items)\r\n            ExpandOrCollapseThisNodeAndBelow(item, false);\r\n      }\r\n\r\n      private void ShowCheckedOrUnChecked(bool checkFlag)\r\n      {\r\n         TreeView searchTreeView = new TreeView();\r\n         // Essentially collect all entities (containing ifc)\r\n         IList<string> searchResults = m_EntityTrie.PartialWordSearch(\"ifc\");\r\n\r\n         if (searchResults != null && searchResults.Count > 0)\r\n         {\r\n            foreach (string item in searchResults)\r\n            {\r\n               ToggleButton origItem = TreeViewItemDict[item].Header as ToggleButton;\r\n               if (origItem == null)\r\n                  continue;   // Skip non-ToggleButton item\r\n\r\n               if (!origItem.IsChecked.HasValue\r\n                  || (checkFlag && origItem.IsChecked.Value == !checkFlag)\r\n                  || (!checkFlag && origItem.IsChecked.Value == !checkFlag))\r\n                  continue;\r\n\r\n               TreeViewItem childNode = new TreeViewItem();\r\n               ToggleButton childNodeItem;\r\n               childNodeItem = new CheckBox();\r\n\r\n               childNode.Name = item;\r\n               childNodeItem.Name = item;\r\n               childNodeItem.Content = item;\r\n\r\n               // set check status following the original selection           \r\n               childNodeItem.IsChecked = origItem.IsChecked;\r\n\r\n               childNodeItem.Checked += new RoutedEventHandler(SearchItem_Checked);\r\n               childNodeItem.Unchecked += new RoutedEventHandler(SearchItem_Unchecked);\r\n               childNode.Header = childNodeItem;\r\n               searchTreeView.Items.Add(childNode);\r\n            }\r\n            IFCEntityTreeView.ItemsSource = searchTreeView.Items;\r\n         }\r\n         else\r\n            IFCEntityTreeView.ItemsSource = null;\r\n\r\n         button_Reset.IsEnabled = false;\r\n         button_CollapseAll.IsEnabled = false;\r\n         button_ExpandAll.IsEnabled = false;\r\n      }\r\n\r\n      protected override bool OnContextHelp()\r\n      {\r\n         string contextIdName = null;\r\n         if (SingleNodeSelection)\r\n            contextIdName = \"IFC_EntityAndPredefinedType\";\r\n         else\r\n            contextIdName = \"IFC_EntitiesToExport\";\r\n\r\n         // launch help\r\n         Autodesk.Revit.UI.ContextualHelp help = new Autodesk.Revit.UI.ContextualHelp(Autodesk.Revit.UI.ContextualHelpType.ContextId, \"HDialog_\" + contextIdName);\r\n         help.Launch();\r\n\r\n         return true;\r\n      }\r\n\r\n      private void comboBox_ShowItems_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         switch (comboBox_ShowItems.SelectedIndex)\r\n         {\r\n            case 0:\r\n               TreeViewReturnToDefault();\r\n               break;\r\n            case 1:\r\n               ShowCheckedOrUnChecked(true);\r\n               break;\r\n            case 2:\r\n               ShowCheckedOrUnChecked(false);\r\n               break;\r\n         }\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCEntityTree/PredefinedTypeSelection.xaml",
    "content": "﻿<auiw:ChildWindow x:Class=\"BIM.IFC.Export.UI.PredefinedTypeSelection\"\n                  xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                  xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                  xmlns:System=\"clr-namespace:System;assembly=mscorlib\"\n                  xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n                  xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n                  xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\n                  xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\n                  mc:Ignorable=\"d\"\n                  Title=\"{x:Static p:Resources.PredefinedTypeSelection}\"\n                  Height=\"400\"\n                  Width=\"250\"\n                  MinHeight=\"400\" \n                  MinWidth=\"250\"\n                  WindowStyle=\"SingleBorderWindow\"\n                  SaveWindowSettings=\"True\" d:DesignWidth=\"360\">\n\n   <Grid>\n      <Grid.RowDefinitions>\n         <RowDefinition Height=\"Auto\"/>\n         <RowDefinition Height=\"300*\" MinHeight=\"300\"/>\n         <RowDefinition Height=\"Auto\"/>\n      </Grid.RowDefinitions>\n      <TreeView x:Name=\"TreeView_PredefinedType\" Margin=\"0,4,0,8\" Grid.Row=\"1\"/>\n      <StackPanel Margin=\"0,8,8,8\" Orientation=\"Horizontal\" Grid.Row=\"2\" HorizontalAlignment=\"Right\" Width=\"174\">\n         <Button x:Name=\"Button_OK\" Content=\"{x:Static p:Resources.OK}\" HorizontalAlignment=\"Right\" Click=\"Button_OK_Click\" Margin=\"0,0,20,0\" Padding=\"30,0,30,0\"/>\n         <Button x:Name=\"Button_Cancel\" Content=\"{x:Static p:Resources.Cancel}\" Click=\"Button_Cancel_Click\"  HorizontalAlignment=\"Right\" Width=\"75\" Margin=\"0,0,0,0\" Padding=\"10,0,10,0\"/>\n      </StackPanel>\n   </Grid>\n</auiw:ChildWindow>\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCEntityTree/PredefinedTypeSelection.xaml.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Windows;\nusing System.Windows.Controls;\nusing Autodesk.Revit.DB;\nusing Revit.IFC.Common.Utility;\nusing Autodesk.UI.Windows;\n\nnamespace BIM.IFC.Export.UI\n{ \n   /// <summary>\n   /// Interaction logic for PredefinedTypeSelection.xaml\n   /// </summary>\n   public partial class PredefinedTypeSelection : ChildWindow\n   {\n      TreeView m_TreeView = new TreeView();\n      TreeViewItem prevSelectedItem = null;\n\n      /// <summary>\n      /// Initialization for the class for PredefinedType selection without specific IFCVersion\n      /// </summary>\n      /// <param name=\"ifcEntitySelected\">selected entity for predefinedtype</param>\n      public PredefinedTypeSelection(string ifcEntitySelected)\n      {\n         string ifcSchema = IfcSchemaEntityTree.SchemaName(IFCVersion.Default);\n         InitializePreDefinedTypeSelection(ifcSchema, ifcEntitySelected);\n      }\n\n      /// <summary>\n      /// Initialization for the class for PredefinedType selection\n      /// </summary>\n      /// <param name=\"ifcVersion\">the IFC version selected. If it is specific, it will be locked</param>\n      /// <param name=\"ifcEntitySelected\">the ifc entity to find the predefinedtype</param>\n      public PredefinedTypeSelection(IFCVersion ifcVersion, string ifcEntitySelected)\n      {\n         string ifcSchema = IfcSchemaEntityTree.SchemaName(ifcVersion);\n         InitializePreDefinedTypeSelection(ifcSchema, ifcEntitySelected);\n      }\n\n      /// <summary>\n      /// Initialization for the class for PredefinedType selection using the IFC schema file name (must be correct or it will return null)\n      /// </summary>\n      /// <param name=\"ifcSchema\">the supported schema file (without extension). Currently: IFC4, IFC2X3_TC1, IFC2X2_ADD1</param>\n      /// <param name=\"ifcEntitySelected\">the ifc entity to find the predefinedtype</param>\n      public PredefinedTypeSelection(string ifcSchema, string ifcEntitySelected)\n      {\n         InitializePreDefinedTypeSelection(ifcSchema, ifcEntitySelected);\n      }\n\n      void InitializePreDefinedTypeSelection(string ifcSchema, string ifcEntitySelected)\n      {\n         if (string.IsNullOrEmpty(ifcEntitySelected))\n            return;\n         \n         InitializeComponent();\n         IfcSchemaEntityTree ifcEntityTree = IfcSchemaEntityTree.GetEntityDictFor(ifcSchema);\n\n         IList<string> predefinedTypeList = IfcSchemaEntityTree.GetPredefinedTypeList(ifcEntityTree, ifcEntitySelected);\n\n         if (predefinedTypeList != null && predefinedTypeList.Count > 0)\n         {\n            TreeViewItem ifcEntityViewItem = new TreeViewItem();\n            ifcEntityViewItem.Name = ifcEntitySelected;\n            ifcEntityViewItem.Header = ifcEntitySelected + \".PREDEFINEDTYPE\";\n            ifcEntityViewItem.IsExpanded = true;\n            m_TreeView.Items.Add(ifcEntityViewItem);\n\n            foreach(string predefItem in predefinedTypeList)\n            {\n               TreeViewItem childNode = new TreeViewItem();\n               RadioButton childNodeItem = new RadioButton();\n               childNode.Name = predefItem;\n               childNodeItem.Name = predefItem;\n               childNodeItem.Content = predefItem;\n               childNodeItem.Checked += new RoutedEventHandler(PredefSelected_Checked);\n               childNodeItem.Unchecked += new RoutedEventHandler(PredefSelected_Unchecked);\n               childNode.Header = childNodeItem;\n               ifcEntityViewItem.Items.Add(childNode);\n            }\n         }\n         TreeView_PredefinedType.ItemsSource = m_TreeView.Items;\n      }\n\n      void PredefSelected_Checked(object sender, RoutedEventArgs e)\n      {\n         RadioButton cbElem = sender as RadioButton;\n         if (cbElem != null)\n         {\n            // Clear previously selected item first\n            if (prevSelectedItem != null)\n            {\n               RadioButton prevCBSel = prevSelectedItem.Header as RadioButton;\n               if (prevCBSel != null)\n                  prevCBSel.IsChecked = false;\n            }\n            cbElem.IsChecked = true;\n            prevSelectedItem = cbElem.Parent as TreeViewItem;\n         }\n      }\n\n      void PredefSelected_Unchecked(object sender, RoutedEventArgs e)\n      {\n         RadioButton cbElem = sender as RadioButton;\n         if (cbElem != null)\n            cbElem.IsChecked = false;\n      }\n\n\n      private void Button_Cancel_Click(object sender, RoutedEventArgs e)\n      {\n         DialogResult = false;\n         Close();\n      }\n\n      private void Button_OK_Click(object sender, RoutedEventArgs e)\n      {\n         DialogResult = true;\n         Close();\n      }\n\n      /// <summary>\n      /// Get the selected Predefined Type\n      /// </summary>\n      /// <returns>the string containinf the predefinedtype</returns>\n      public string GetSelectedPredefinedType()\n      {\n         if (!DialogResult.HasValue || DialogResult.Value == false)\n            return null;\n\n         foreach (TreeViewItem tvi in m_TreeView.Items)\n         {\n            foreach (TreeViewItem predefItem in tvi.Items)\n            {\n               RadioButton cbElem = predefItem.Header as RadioButton;\n               if (cbElem != null && cbElem.IsChecked == true)\n                  return cbElem.Name;\n            }\n         }\n         return null;\n      }\n\n      /// <summary>\n      /// Check that the selected entity actually has predefinedType\n      /// </summary>\n      /// <returns>true if it has predefinedtype</returns>\n      public bool HasPredefinedType()\n      {\n         return m_TreeView.Items.Count > 0;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCExport.xaml",
    "content": "﻿<!-- TODO: use resources to govern externalized strings.  (static initialization failure when loaded into Revit even though it shows perfectly well in the Dialog editor) -->\r\n<auiw:ChildWindow x:Class=\"BIM.IFC.Export.UI.IFCExport\"\r\n                  xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n                  xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n                  xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" \r\n                  xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\r\n                  xmlns:System=\"clr-namespace:System;assembly=mscorlib\" \r\n                  xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \r\n                  xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \r\n                  mc:Ignorable=\"d\" \r\n                  Title=\"{x:Static p:Resources.IFCExport}\" \r\n                  WindowStyle=\"SingleBorderWindow\" \r\n                  ContentRendered=\"ChildWindow_ContentRendered\"\r\n                  SaveWindowSettings=\"True\" \r\n                  Height=\"438\" \r\n                  Width=\"730\" MinWidth=\"550\" MinHeight=\"305\">\r\n   <Grid Margin=\"10,0\" RenderTransformOrigin=\"0,0\">\r\n      <Label Content=\"{x:Static p:Resources.FileName}\" HorizontalAlignment=\"Left\" Margin=\"0,12,0,0\" x:Name=\"label_FileName\" Height=\"28\" VerticalAlignment=\"Top\" Width=\"202\" VerticalContentAlignment=\"Top\" RenderTransformOrigin=\"0.462,0.478\"/>\r\n      <TextBox Height=\"23\" Margin=\"210,12,125,0\" Name=\"textBoxSetupFileName\" VerticalAlignment=\"Top\" IsEnabled=\"True\"  TextWrapping=\"NoWrap\" VerticalContentAlignment=\"Center\"/>\r\n      <Button Content=\"{x:Static p:Resources.Browse}\" Height=\"23\" Margin=\"0,12,11,0\" Name=\"buttonBrowse\" VerticalAlignment=\"Top\" Click=\"buttonBrowse_Click\" HorizontalAlignment=\"Right\" Width=\"107\" />\r\n      <Label Content=\"{x:Static p:Resources.CurrentSelectedSetup}\" HorizontalAlignment=\"Left\" Margin=\"0,45,0,0\" Name=\"label1\" Height=\"28\" VerticalAlignment=\"Top\" Width=\"202\" />\r\n      <ComboBox Height=\"23\" Margin=\"210,48,202,0\" Name=\"currentSelectedSetup\" VerticalAlignment=\"Top\" SelectionChanged=\"currentSelectedSetup_SelectionChanged\" ItemsSource=\"{Binding}\" DataContext=\"{Binding}\" />\r\n      <Button Content=\"{x:Static p:Resources.ModifySetup}\" Height=\"23\" Margin=\"0,48,11,0\" Name=\"buttonEditSetup\" VerticalAlignment=\"Top\" Click=\"buttonEditSetup_Click\" HorizontalAlignment=\"Right\" Width=\"184\" />\r\n      <Label Content=\"{x:Static p:Resources.IFCVersionSelected}\" HorizontalAlignment=\"Left\" Margin=\"0,78,0,0\" x:Name=\"label1_Copy1\" Height=\"28\" VerticalAlignment=\"Top\" Width=\"202\" VerticalContentAlignment=\"Top\" />\r\n      <TextBox Height=\"28\" \r\n               Margin=\"210,78,10,0\" \r\n               Name=\"textBoxSetupDescription\" \r\n               VerticalAlignment=\"Top\" \r\n               IsEnabled=\"True\" \r\n               IsReadOnly=\"True\" \r\n               TextWrapping=\"WrapWithOverflow\" \r\n               TextChanged=\"textBoxSetupDescription_TextChanged\" BorderThickness=\"0\" \r\n               VerticalContentAlignment=\"Center\" \r\n               Background=\"Transparent\"/>\r\n      <Label Content=\"{x:Static p:Resources.ProjectToExport}\" HorizontalAlignment=\"Left\" Margin=\"0,171,0,0\" x:Name=\"label1_Copy\" Height=\"28\" VerticalAlignment=\"Top\" Width=\"666\" />\r\n      <ListView Margin=\"0,204,11,55\" ScrollViewer.VerticalScrollBarVisibility=\"Auto\" x:Name=\"listViewDocuments\"/>\r\n      <TextBlock VerticalAlignment=\"Bottom\" Margin=\"0,0,0,40\" Height=\"15\" HorizontalAlignment=\"Left\">\r\n         <Label Name=\"versionLabel\" FontSize=\"10\" Padding=\"0\" Opacity=\"0.5\"/>\r\n      </TextBlock>\r\n      <TextBlock VerticalAlignment=\"Bottom\"  Margin=\"0,0,0,10\" Height=\"20\" HorizontalAlignment=\"Left\" Width=\"515\">\r\n         <Hyperlink Click=\"OnHelpClick\">\r\n            <Run Text=\"{x:Static p:Resources.Help}\" x:Uid=\"LearnMoreHyperlink\" />\r\n         </Hyperlink>\r\n      </TextBlock>\r\n      <Button Content=\"{x:Static p:Resources.Export}\" Margin=\"0,0,93,10\" Name=\"buttonNext\" Click=\"buttonExport_Click\" Height=\"23\" VerticalAlignment=\"Bottom\" HorizontalAlignment=\"Right\" Width=\"77\" />\r\n      <Button Content=\"{x:Static p:Resources.Cancel}\" Margin=\"0,0,11,10\" Name=\"buttonCancel\" Click=\"buttonCancel_Click\" Height=\"23\" VerticalAlignment=\"Bottom\" HorizontalAlignment=\"Right\" Width=\"77\" />\r\n      <Label Content=\"{x:Static p:Resources.ProjectOrigin}\" HorizontalAlignment=\"Left\" Margin=\"0,111,0,0\" x:Name=\"label1_Copy2\" Height=\"28\" VerticalAlignment=\"Top\" Width=\"202\" VerticalContentAlignment=\"Top\" />\r\n      <TextBox Height=\"28\" \r\n         Margin=\"210,111,10,0\" \r\n         x:Name=\"textBoxSetupCoordinateBase\" \r\n         VerticalAlignment=\"Top\" \r\n         IsEnabled=\"True\" \r\n         IsReadOnly=\"True\" \r\n         TextWrapping=\"WrapWithOverflow\" \r\n         TextChanged=\"textBoxSetupDescription_TextChanged\" \r\n         BorderThickness=\"0\" \r\n         VerticalContentAlignment=\"Center\" \r\n         Background=\"Transparent\"/>\r\n      <Label Content=\"{x:Static p:Resources.ProjectSite}\" HorizontalAlignment=\"Left\" Margin=\"0,141,0,0\" x:Name=\"label_ProjectLocation\" Height=\"28\" VerticalAlignment=\"Top\" Width=\"202\" VerticalContentAlignment=\"Top\" />\r\n      <TextBox Height=\"28\" \r\n         Margin=\"210,141,10,0\" \r\n         x:Name=\"textBoxSetupProjectLocation\" \r\n         VerticalAlignment=\"Top\" \r\n         IsEnabled=\"True\" \r\n         IsReadOnly=\"True\" \r\n         TextWrapping=\"WrapWithOverflow\"\r\n         BorderThickness=\"0\" \r\n         VerticalContentAlignment=\"Center\" \r\n         Background=\"Transparent\"/>\r\n   </Grid>\r\n\r\n   <auiw:ChildWindow.Resources>\r\n      <System:String x:Key=\"ifcExportWindowTitle\">{x:Static p:Resources.IFCExport}</System:String>\r\n      <System:String x:Key=\"currentSelectedSetup\">{x:Static p:Resources.CurrentSelectedSetup}</System:String>\r\n      <System:String x:Key=\"next\">{x:Static p:Resources.Next}</System:String>\r\n      <System:String x:Key=\"saveSetupAndClose\">{x:Static p:Resources.SaveSetupAndClose}</System:String>\r\n      <System:String x:Key=\"cancel\">{x:Static p:Resources.Cancel}</System:String>\r\n   </auiw:ChildWindow.Resources>\r\n</auiw:ChildWindow>"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCExport.xaml.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.UI;\r\nusing Autodesk.UI.Windows;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Windows;\r\nusing System.Windows.Automation;\r\nusing System.Windows.Controls;\r\nusing Revit.IFC.Common.Extensions;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nusing SaveFileDialog = Microsoft.Win32.SaveFileDialog;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// Interaction logic for IFCExport.xaml\r\n   /// </summary>\r\n   public partial class IFCExport : ChildWindow\r\n   {\r\n      // The list of available configurations\r\n      IFCExportConfigurationsMap m_configMap;\r\n\r\n      // The list of the initial config Map (either from built-in config, or from the Extensible Storage)\r\n      public IFCExportConfigurationsMap InitialConfigMap { get; private set; } \r\n\r\n      /// <summary>\r\n      /// Keep the cache for the last selected configuration regardless whether it is built-in or not\r\n      /// </summary>\r\n      public static IDictionary<string, IFCExportConfiguration> LastSelectedConfig { get; } = new Dictionary<string, IFCExportConfiguration>();\r\n\r\n      /// <summary>\r\n      /// The dialog result.\r\n      /// </summary>\r\n      IFCExportResult m_Result = IFCExportResult.Invalid;\r\n\r\n      /// <summary>\r\n      /// The list of documents to export as chosen by the user.\r\n      /// </summary>\r\n      private IList<Document> m_DocumentsToExport = null;\r\n\r\n      /// <summary>\r\n      /// The list of exportable documents ordered by the order displayed in the UI.\r\n      /// </summary>\r\n      private IList<Document> m_OrderedDocuments = null;\r\n\r\n      /// <summary>\r\n      /// The active document for this export.\r\n      /// </summary>\r\n      public static Document TheDocument\r\n      {\r\n         get;\r\n         protected set;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The File Name of the File to be Exported\r\n      /// </summary>\r\n      private String m_FileFullName;\r\n\r\n      /// <summary>\r\n      /// The Path of the File to be Exported\r\n      /// </summary>\r\n      private String m_FilePath;\r\n\r\n      /// <summary>\r\n      /// The File Name for the File to be Exported\r\n      /// </summary>\r\n      private String m_FileName;\r\n\r\n      /// <summary>\r\n      /// The last successful export location\r\n      /// </summary>\r\n      private String m_ExportPath = null;\r\n\r\n      /// <summary>\r\n      /// Identification whether the IFCExporterUIWindow (Modify setup) is visited\r\n      /// </summary>\r\n      private bool m_EditConfigVisited { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// The default Extension of the file\r\n      /// </summary>\r\n      private String m_defaultExt;\r\n\r\n      /// <summary>\r\n      /// The result for the file dialog\r\n      /// </summary>\r\n      private bool? m_FileDialogResult;\r\n\r\n      /// <summary>\r\n      /// The result for file dialog\r\n      /// </summary>\r\n      public bool? FileDialogResult\r\n      {\r\n         get { return m_FileDialogResult; }\r\n         protected set { m_FileDialogResult = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The File Name of the File to be Exported\r\n      /// </summary>\r\n      public String FileFullName\r\n      {\r\n         get { return m_FileFullName; }\r\n         protected set { m_FileFullName = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Path of the File to be Exported\r\n      /// </summary>\r\n      public String FilePath\r\n      {\r\n         get { return m_FilePath; }\r\n         protected set { m_FilePath = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The File Name of the File to be Exported\r\n      /// </summary>\r\n      public String FileName\r\n      {\r\n         get { return m_FileName; }\r\n         protected set { m_FileName = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The default Extension of the file\r\n      /// </summary>\r\n      public String DefaultExt\r\n      {\r\n         get { return m_defaultExt; }\r\n         protected set { m_defaultExt = value; }\r\n      }\r\n\r\n      public String ExportFilePathName\r\n      {\r\n         get { return textBoxSetupFileName.Text; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Update the current selected configuration in the combobox. \r\n      /// </summary>\r\n      /// <param name=\"selected\">The name of selected configuration.</param>\r\n      private void UpdateCurrentSelectedSetupCombo(String selected)\r\n      {\r\n         // TODO: support additional user saved configurations.\r\n\r\n         foreach (IFCExportConfiguration curr in m_configMap.Values)\r\n         {\r\n            currentSelectedSetup.Items.Add(curr.Name);\r\n         }\r\n         if (selected == null || !currentSelectedSetup.Items.Contains(selected))\r\n            currentSelectedSetup.SelectedIndex = 0;\r\n         else\r\n            currentSelectedSetup.SelectedItem = selected;\r\n\r\n         // The following lines fix the IFC Version label that doesn't update when changing the <In-Session setup>\r\n         IFCExportConfiguration selectedConfig = GetSelectedConfiguration();\r\n\r\n         UpdateTextBoxesContent(selectedConfig);\r\n      }\r\n\r\n      private void UpdateTextBoxesContent(IFCExportConfiguration config)\r\n      {\r\n         if (config != null)\r\n         {\r\n            textBoxSetupDescription.Text = config.FileVersionDescription;\r\n            if (LastSelectedConfig.ContainsKey(config.Name))\r\n            {\r\n               textBoxSetupCoordinateBase.Text = (new IFCSitePlacementAttributes(LastSelectedConfig[config.Name].SitePlacement)).ToString();\r\n               textBoxSetupProjectLocation.Text = LastSelectedConfig[config.Name].SelectedSite;\r\n            }\r\n            else\r\n            {\r\n               textBoxSetupCoordinateBase.Text = (new IFCSitePlacementAttributes(config.SitePlacement)).ToString();\r\n               textBoxSetupProjectLocation.Text = config.SelectedSite;\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The list of documents to export as chosen by the user.\r\n      /// </summary>\r\n      public IList<Document> DocumentsToExport\r\n      {\r\n         get\r\n         {\r\n            if (m_DocumentsToExport == null)\r\n               m_DocumentsToExport = new List<Document>();\r\n            return m_DocumentsToExport;\r\n         }\r\n         set { m_DocumentsToExport = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The list of exportable documents ordered by the order displayed in the UI.\r\n      /// </summary>\r\n      public IList<Document> OrderedDocuments\r\n      {\r\n         get\r\n         {\r\n            if (m_OrderedDocuments == null)\r\n               m_OrderedDocuments = new List<Document>();\r\n\r\n            return m_OrderedDocuments;\r\n         }\r\n         set { m_OrderedDocuments = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Construction of the main export dialog.\r\n      /// </summary>\r\n      /// <param name=\"app\">The UIApplication that contains a list of all documents.</param>\r\n      /// <param name=\"configurationsMap\">The configurations to show in the dialog.</param>\r\n      /// <param name=\"selectedConfigName\">The current selected configuration name.</param>\r\n      public IFCExport(Autodesk.Revit.UI.UIApplication app, IFCExportConfigurationsMap configurationsMap, String selectedConfigName)\r\n      {\r\n         m_configMap = configurationsMap;\r\n         InitialConfigMap = new IFCExportConfigurationsMap(configurationsMap);\r\n\r\n         SetParent(app.MainWindowHandle);\r\n\r\n         InitializeComponent();\r\n\r\n         currentSelectedSetup.SelectionChanged -= currentSelectedSetup_SelectionChanged;\r\n\r\n         UpdateCurrentSelectedSetupCombo(selectedConfigName);\r\n         UpdateOpenedProjectsListView(app);\r\n\r\n         Title = Properties.Resources.ExportIFC;\r\n#if IFC_OPENSOURCE\r\n         versionLabel.Content = IFCUISettings.GetAssemblyVersionForUI();\r\n#endif\r\n         TheDocument = UpdateOpenedProject(app);\r\n\r\n         int docToExport = GetDocumentExportCount();\r\n         updateFileName();\r\n      }\r\n\r\n\r\n      private CheckBox createCheckBoxForDocument(Document doc, int id)\r\n      {\r\n         CheckBox cb = new CheckBox();\r\n\r\n         cb.Content = doc.Title;\r\n         if (!String.IsNullOrEmpty(doc.PathName))\r\n         {\r\n            // If the user saves the file, the path where the document is saved is displayed\r\n            // with a ToolTip, else it displays a message that the file is not saved.\r\n            cb.ToolTip = doc.PathName;\r\n         }\r\n         else\r\n         {\r\n            cb.ToolTip = Properties.Resources.DocNotSaved;\r\n         }\r\n         ToolTipService.SetShowOnDisabled(cb, true);\r\n         cb.SetValue(AutomationProperties.AutomationIdProperty, \"projectToExportCheckBox\" + id);\r\n         cb.Click += new RoutedEventHandler(listView_Click);\r\n         return cb;\r\n      }\r\n\r\n      private bool CanExportDocument(Document doc)\r\n      {\r\n         return (doc != null && !doc.IsFamilyDocument && !doc.IsLinked);\r\n      }\r\n\r\n      private Document UpdateOpenedProject(Autodesk.Revit.UI.UIApplication app)\r\n      {\r\n         DocumentSet docSet = app.Application.Documents;\r\n\r\n         Document activeDocument = app.ActiveUIDocument.Document;\r\n\r\n         return activeDocument;\r\n      }\r\n\r\n      private void UpdateOpenedProjectsListView(Autodesk.Revit.UI.UIApplication app)\r\n      {\r\n         DocumentSet docSet = app.Application.Documents;\r\n\r\n         Document activeDocument = app.ActiveUIDocument.Document;\r\n         List<CheckBox> checkBoxes = new List<CheckBox>();\r\n         int exportDocumentCount = 0;\r\n\r\n         OrderedDocuments = null;\r\n         foreach (Document doc in docSet)\r\n         {\r\n            if (CanExportDocument(doc))\r\n            {\r\n               // Count the number of Documents which can be exported\r\n               exportDocumentCount++;\r\n            }\r\n         }\r\n\r\n         foreach (Document doc in docSet)\r\n         {\r\n            if (CanExportDocument(doc))\r\n            {\r\n               CheckBox cb = createCheckBoxForDocument(doc, OrderedDocuments.Count);\r\n\r\n               // Add the active document as the top item.\r\n               if (doc.Equals(activeDocument))\r\n               {\r\n                  // This should only be hit once\r\n                  cb.IsChecked = true;\r\n                  checkBoxes.Insert(0, cb);\r\n\r\n                  if (exportDocumentCount == 1)\r\n                  {\r\n                     // If a single project is to be exported, make it read only\r\n                     cb.IsEnabled = false;\r\n                  }\r\n                  OrderedDocuments.Insert(0, doc);\r\n               }\r\n               else\r\n               {\r\n                  checkBoxes.Add(cb);\r\n                  OrderedDocuments.Add(doc);\r\n               }\r\n\r\n            }\r\n         }\r\n\r\n         this.listViewDocuments.ItemsSource = checkBoxes;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add a configuration to the map list to show in dialog.\r\n      /// </summary>\r\n      /// <param name=\"configuration\">The configuration to add.</param>\r\n      private void AddToConfigList(IFCExportConfiguration configuration)\r\n      {\r\n         m_configMap.AddOrReplace(configuration);\r\n      }\r\n\r\n      /// <summary>\r\n      /// The dialog result for continue or cancel.\r\n      /// </summary>\r\n      public IFCExportResult Result\r\n      {\r\n         get { return m_Result; }\r\n         protected set { m_Result = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the configuration map.\r\n      /// </summary>\r\n      /// <returns>The configuration map.</returns>\r\n      public IFCExportConfigurationsMap GetModifiedConfigurations()\r\n      {\r\n         return m_configMap;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the selected configuration.\r\n      /// </summary>\r\n      /// <returns>The selected configuration.</returns>\r\n      public IFCExportConfiguration GetSelectedConfiguration()\r\n      {\r\n         String selectedConfigName = (String)currentSelectedSetup.SelectedItem;\r\n         if (selectedConfigName == null)\r\n            return null;\r\n\r\n         return m_configMap[selectedConfigName];\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the name of selected configuration.\r\n      /// </summary>\r\n      /// <returns>The name of selected configuration.</returns>\r\n      public String GetSelectedConfigurationName()\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration == null)\r\n            return null;\r\n         return configuration.Name;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the file extension from selected configuration.\r\n      /// </summary>\r\n      /// <returns>The file extension of selected configuration.</returns>\r\n      public String GetFileExtension()\r\n      {\r\n         IFCExportConfiguration selectedConfig = GetSelectedConfiguration();\r\n         IFCFileFormatAttributes selectedItem = new IFCFileFormatAttributes(selectedConfig.IFCFileType);\r\n         return selectedItem.GetFileExtension();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the file filters for save dialog.\r\n      /// </summary>\r\n      /// <returns>The file filter.</returns>\r\n      public String GetFileFilter()\r\n      {\r\n         IFCExportConfiguration selectedConfig = GetSelectedConfiguration();\r\n         IFCFileFormatAttributes selectedItem = new IFCFileFormatAttributes(selectedConfig.IFCFileType);\r\n         return selectedItem.GetFileFilter();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Shows the IFC export setup window when clicking the buttonEditSetup.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"args\">Event arguments that contains the event data.</param>\r\n      private void buttonEditSetup_Click(object sender, RoutedEventArgs args)\r\n      {\r\n         IFCExportConfiguration selectedConfig = GetSelectedConfiguration();\r\n         IFCExportConfigurationsMap configurationsMap = new IFCExportConfigurationsMap(m_configMap);\r\n         IFCExporterUIWindow editorWindow = new IFCExporterUIWindow(configurationsMap, selectedConfig.Name);\r\n\r\n         // the SelectionChanged event will be temporary disabled when the Modify Config Window is active \r\n         //   (it is particularly useful for COBie v2.4 setup to avoid the function is called repeatedly) \r\n         currentSelectedSetup.SelectionChanged -= currentSelectedSetup_SelectionChanged;\r\n\r\n         editorWindow.Owner = this;\r\n         bool? ret = editorWindow.ShowDialog();\r\n         if (ret.HasValue)\r\n            m_EditConfigVisited = ret.Value;\r\n\r\n         if (editorWindow.DialogResult.HasValue && editorWindow.DialogResult.Value)\r\n         {\r\n            // Check here for changes in configurations. If changed, the changes will be saved into the storage\r\n            configurationsMap.UpdateSavedConfigurations(m_configMap);\r\n            currentSelectedSetup.Items.Clear();\r\n            m_configMap = configurationsMap;\r\n            string selectedConfigName = editorWindow.GetSelectedConfigurationName();\r\n\r\n            UpdateCurrentSelectedSetupCombo(selectedConfigName);\r\n         }\r\n\r\n         // The SelectionChanged event will be activated again after the Modify Config Window is closed\r\n         currentSelectedSetup.SelectionChanged += currentSelectedSetup_SelectionChanged;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports as an IFC file on clicking OK.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"args\">Event arguments that contains the event data.</param>\r\n      private void buttonExport_Click(object sender, RoutedEventArgs args)\r\n      {\r\n         string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(textBoxSetupFileName.Text);\r\n         string filePath = Path.GetDirectoryName(textBoxSetupFileName.Text);\r\n\r\n         // Show Path is invalid message if the path is blank or invalid.\r\n         if (!string.IsNullOrWhiteSpace(filePath) && !Directory.Exists(filePath))\r\n         {\r\n            TaskDialog taskDialog = new TaskDialog(Properties.Resources.IFCExportProcessGenericError);\r\n            taskDialog.MainInstruction = Properties.Resources.ValidPathExists;\r\n            taskDialog.TitleAutoPrefix = false;\r\n            taskDialog.Show();\r\n         }\r\n         else\r\n         {\r\n            // Create a default .ifc file if the file name is blank\r\n            if (String.IsNullOrWhiteSpace(filePath))\r\n            {\r\n               updateFileName();\r\n            }\r\n\r\n            // Check for a valid IFC File format, if it does not exists, append the default IFC file format to export to the file\r\n            if (Path.GetExtension(textBoxSetupFileName.Text).IndexOf(Properties.Resources.IFC, StringComparison.CurrentCultureIgnoreCase) == -1)\r\n               textBoxSetupFileName.Text = textBoxSetupFileName.Text.ToString() + \".\" + m_defaultExt;\r\n\r\n            // Prompt for overwriting the file if it is already present in the directory.\r\n            if (File.Exists(textBoxSetupFileName.Text))\r\n            {\r\n               TaskDialog taskDialog = new TaskDialog(Properties.Resources.IFCExport);\r\n               taskDialog.MainInstruction = String.Format(Properties.Resources.FileExists, textBoxSetupFileName.Text);\r\n               taskDialog.CommonButtons = TaskDialogCommonButtons.Yes | TaskDialogCommonButtons.No;\r\n               taskDialog.TitleAutoPrefix = false;\r\n\r\n               TaskDialogResult taskDialogResult = taskDialog.Show();\r\n               if (taskDialogResult == TaskDialogResult.No)\r\n               {\r\n                  return;\r\n               }\r\n            }\r\n            if(Win32API.RtlIsDosDeviceName_U(textBoxSetupFileName.Text) != 0)\r\n            {\r\n               TaskDialog taskDialog = new TaskDialog(Properties.Resources.IFCExport);\r\n               taskDialog.MainInstruction = String.Format(Properties.Resources.ReservedDeviceName, textBoxSetupFileName.Text);\r\n               taskDialog.TitleAutoPrefix = false;\r\n               taskDialog.Show();\r\n               return;\r\n            }\r\n\r\n            TheDocument.Application.WriteJournalComment(@\"Jrn.Data \"\"File Name\"\", \"\"IDOK\"\", \" + @\"\"\"\" + textBoxSetupFileName.Text + @\"\"\"\", true);\r\n\r\n            IFCExportConfiguration selectedConfig = GetSelectedConfiguration();\r\n            if (OptionsUtil.ExportAs4DesignTransferView(selectedConfig.IFCVersion) || OptionsUtil.ExportAs4x3DesignTransferView(selectedConfig.IFCVersion))\r\n            {\r\n               TaskDialog taskDialog = new TaskDialog(Properties.Resources.IFCExportGenericWarning);\r\n               taskDialog.MainInstruction = String.Format(Properties.Resources.IFC4DTVWarning, selectedConfig.FileVersionDescription);\r\n               taskDialog.CommonButtons = TaskDialogCommonButtons.Ok | TaskDialogCommonButtons.Cancel;\r\n               taskDialog.DefaultButton = TaskDialogResult.Ok;\r\n               taskDialog.TitleAutoPrefix = false;\r\n\r\n               TaskDialogResult taskDialogResult = taskDialog.Show();\r\n               if (taskDialogResult == TaskDialogResult.Cancel)\r\n               {\r\n                  return;\r\n               }\r\n            }\r\n\r\n            if (m_EditConfigVisited && LastSelectedConfig.ContainsKey(selectedConfig.Name))\r\n               selectedConfig = LastSelectedConfig[selectedConfig.Name];\r\n\r\n            // This check will be done only for IFC4 and above as this only affects IfcMapConversion use that starts in IFC4 onward\r\n            if (!OptionsUtil.ExportAsOlderThanIFC4(selectedConfig.IFCVersion) &&\r\n               !string.IsNullOrWhiteSpace(selectedConfig.GeoRefEPSGCode))\r\n            {\r\n               // Check whether the resulting offset (to wcs) will be too large due to geo-reference information, raise warning\r\n               BasePoint surveyPoint = BasePoint.GetSurveyPoint(TheDocument);\r\n               BasePoint projectBasePoint = BasePoint.GetProjectBasePoint(TheDocument);\r\n               {\r\n                  XYZ deltaOffset = XYZ.Zero;\r\n                  switch (selectedConfig.SitePlacement)\r\n                  {\r\n                     case SiteTransformBasis.Internal:\r\n                        deltaOffset = projectBasePoint.Position;\r\n                        break;\r\n                     case SiteTransformBasis.Project:\r\n                        // Offset from Project point is Zero, unchanged from the initial value\r\n                        break;\r\n                     case SiteTransformBasis.ProjectInTN:\r\n                        // Offset from Project point is Zero, unchanged from the initial value\r\n                        break;\r\n                     case SiteTransformBasis.Site:\r\n                        deltaOffset = projectBasePoint.Position - surveyPoint.Position;\r\n                        break;\r\n                     case SiteTransformBasis.Shared:\r\n                        deltaOffset = projectBasePoint.SharedPosition;\r\n                        break;\r\n                     default:\r\n                        break;\r\n                  }\r\n\r\n                  if (!XYZ.IsWithinLengthLimits(deltaOffset))\r\n                  {\r\n                     TaskDialog taskDialog = new TaskDialog(Properties.Resources.IFCExport);\r\n                     taskDialog.MainInstruction = Properties.Resources.OffsetDistanceTooLarge;\r\n                     taskDialog.CommonButtons = TaskDialogCommonButtons.Ok | TaskDialogCommonButtons.Cancel;\r\n                     taskDialog.TitleAutoPrefix = false;\r\n\r\n                     TaskDialogResult taskDialogResult = taskDialog.Show();\r\n                     if (taskDialogResult == TaskDialogResult.Cancel)\r\n                     {\r\n                        return;\r\n                     }\r\n                  }\r\n               } \r\n            }\r\n\r\n            Result = IFCExportResult.ExportAndSaveSettings;\r\n            Close();\r\n\r\n            IFCFileHeaderItem fileHeaderItem;\r\n\r\n            // For backward compatibility in case the document contains saved FileHeaderItem from the previous version\r\n            IFCFileHeader ifcFileHeader = new IFCFileHeader();\r\n            if (!ifcFileHeader.GetSavedFileHeader(IFCCommandOverrideApplication.TheDocument, out fileHeaderItem))\r\n            {\r\n               // Do minimum initialization if the header item is not initialized\r\n               fileHeaderItem = new IFCFileHeaderItem(IFCCommandOverrideApplication.TheDocument);\r\n            }\r\n\r\n            // Set the selected Coordinate Base into IFC File Header Description\r\n            string coordBase = \"CoordinateBase: \" + new IFCSitePlacementAttributes(selectedConfig.SitePlacement);\r\n\r\n            // Set the selected Project Site into IFC File Header Description\r\n            if (!string.IsNullOrEmpty(selectedConfig.SelectedSite))\r\n            {\r\n               coordBase = string.Join(\", \", coordBase, \"ProjectSite: \" + selectedConfig.SelectedSite);\r\n            }\r\n\r\n            fileHeaderItem.FileDescriptions.Add(\"CoordinateReference [\" + coordBase + \"]\");\r\n\r\n            // Set IFC File header with the selected exchange requirement\r\n            if (selectedConfig.ExchangeRequirement != KnownERNames.NotDefined)\r\n            {\r\n               string newExchangeRequirement = \"ExchangeRequirement [\" + selectedConfig.ExchangeRequirement.ToString() + \"]\";\r\n               fileHeaderItem.AddOrReplaceDescriptionItem(newExchangeRequirement);\r\n            }\r\n\r\n            OptionsUtil.FileHeaderIFC = fileHeaderItem;\r\n\r\n            LastSelectedConfig[selectedConfig.Name] = selectedConfig;\r\n            TheDocument.Application.WriteJournalComment(\"Dialog Closed\", true);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets the dialog result when clicking the Cancel button.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"args\">Event arguments that contains the event data.</param>\r\n      private void buttonCancel_Click(object sender, RoutedEventArgs args)\r\n      {\r\n         Result = IFCExportResult.Cancel;\r\n         IFCExportConfiguration selectedConfig = GetSelectedConfiguration();\r\n         LastSelectedConfig[selectedConfig.Name] = selectedConfig;\r\n         Close();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Count the number of open documents\r\n      /// </summary>\r\n      private int GetDocumentExportCount()\r\n      {\r\n         DocumentsToExport = null;\r\n         List<CheckBox> cbList = this.listViewDocuments.Items.Cast<CheckBox>().ToList();\r\n         int count = 0;\r\n         int docToExport = 0;\r\n         foreach (CheckBox cb in cbList)\r\n         {\r\n            if ((bool)cb.IsChecked)\r\n            {\r\n               DocumentsToExport.Add(OrderedDocuments[count]);\r\n               docToExport++;\r\n            }\r\n            count++;\r\n         }\r\n\r\n         return docToExport;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Generate the file name for export.\r\n      /// If the number of documents to export is greater than 1, export as Multiple Files.\r\n      /// </summary>\r\n      private String GetFileName()\r\n      {\r\n         int docToExport = GetDocumentExportCount();\r\n         bool multipleFiles = docToExport > 1;\r\n         String fileName = multipleFiles ? Properties.Resources.MultipleFiles : IFCUISettings.GenerateFileNameFromDocument(DocumentsToExport[0], null);\r\n         return fileName;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Generate the default directory where the export takes place\r\n      /// </summary>\r\n      private String GetDefaultDirectory()\r\n      {\r\n         // If the session has a previous path, open the File Dialog using the path available in the session\r\n         m_ExportPath = IFCCommandOverrideApplication.MruExportPath != null ? IFCCommandOverrideApplication.MruExportPath : null;\r\n\r\n         // For the file dialog check if the path exists or not\r\n         String defaultDirectory = m_ExportPath != null ? m_ExportPath : null;\r\n\r\n         // If the defaultDirectory is null, find the path of the revit file\r\n         if (defaultDirectory == null)\r\n         {\r\n            String revitFilePath = TheDocument.PathName;\r\n            if (!String.IsNullOrEmpty(revitFilePath))\r\n            {\r\n               defaultDirectory = Path.GetDirectoryName(revitFilePath);\r\n            }\r\n         }\r\n\r\n         if (string.IsNullOrEmpty(defaultDirectory) && TheDocument.IsDetached)\r\n         {\r\n            defaultDirectory = Directory.GetCurrentDirectory();\r\n         }\r\n\r\n         if ((defaultDirectory == null) || (!System.IO.Directory.Exists(defaultDirectory)))\r\n            defaultDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);\r\n\r\n         return defaultDirectory;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets the dialog result when clicking the Browse button.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"args\">Event arguments that contains the event data.</param>\r\n      private void buttonBrowse_Click(object sender, RoutedEventArgs args)\r\n      {\r\n\r\n         int docToExport = GetDocumentExportCount();\r\n\r\n         if (docToExport == 0)\r\n         {\r\n            MessageBox.Show(Properties.Resources.SelectOneOrMoreProjects, Properties.Resources.IFCExport, MessageBoxButton.OK, MessageBoxImage.Error);\r\n            return;\r\n         }\r\n\r\n         SaveFileDialog fileDialog = new SaveFileDialog();\r\n         fileDialog.AddExtension = true;\r\n\r\n         bool multipleFiles = docToExport > 1;\r\n         m_defaultExt = GetFileExtension();\r\n         fileDialog.DefaultExt = m_defaultExt;\r\n         fileDialog.Filter = GetFileFilter();\r\n         string filePathName = textBoxSetupFileName.Text;\r\n         // If the file extension does not contain a valid IFC file extension\r\n         // it appends a valid extension to the file inorder to export it.\r\n         if (Path.GetExtension(filePathName).IndexOf(Properties.Resources.IFC, StringComparison.CurrentCultureIgnoreCase) != -1)\r\n         {\r\n            fileDialog.FileName = Path.GetFileName(filePathName);\r\n         }\r\n         else\r\n         {\r\n            fileDialog.FileName = Path.GetFileName(filePathName) + \".\" + m_defaultExt;\r\n         }\r\n         fileDialog.InitialDirectory = GetDefaultDirectory();\r\n         fileDialog.OverwritePrompt = false;\r\n\r\n         m_FileDialogResult = fileDialog.ShowDialog();\r\n\r\n         if (m_FileDialogResult.HasValue && m_FileDialogResult.Value)\r\n         {\r\n            FileFullName = fileDialog.FileName;\r\n            FilePath = Path.GetDirectoryName(m_FileFullName);\r\n            FileName = multipleFiles ? Properties.Resources.MultipleFiles : Path.GetFileName(m_FileFullName);\r\n\r\n            m_ExportPath = m_FilePath;\r\n         }\r\n\r\n         // Display the FilePath and the FileName which the user chooses\r\n         if (m_FileDialogResult.HasValue && m_FileDialogResult.Value)\r\n         {\r\n            if (Path.GetExtension(FileName).IndexOf(Properties.Resources.IFC, StringComparison.CurrentCultureIgnoreCase) != -1)\r\n            {\r\n               textBoxSetupFileName.Text = FilePath + \"\\\\\" + FileName;\r\n            }\r\n            else\r\n            {\r\n               textBoxSetupFileName.Text = FilePath + \"\\\\\" + FileName + \".\" + m_defaultExt;\r\n            }\r\n\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the description when current configuration change.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"args\">Event arguments that contains the event data.</param>\r\n      private void currentSelectedSetup_SelectionChanged(object sender, SelectionChangedEventArgs args)\r\n      {\r\n         IFCExportConfiguration selectedConfig = GetSelectedConfiguration();\r\n\r\n         if (selectedConfig != null)\r\n         {\r\n            if (!IFCPhaseAttributes.Validate(selectedConfig.ActivePhaseId, IFCCommandOverrideApplication.TheDocument))\r\n               selectedConfig.ActivePhaseId = ElementId.InvalidElementId.Value;\r\n\r\n            UpdateTextBoxesContent(selectedConfig);\r\n\r\n            IFCExportConfiguration prevConfig = null;\r\n            if (args.RemovedItems.Count > 0)\r\n               prevConfig = m_configMap[args.RemovedItems[0].ToString()];\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Changes the name of the IFC files to be exported on clicking the checkboxes.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void listView_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         buttonBrowse.IsEnabled = true;\r\n         textBoxSetupFileName.Text = null;\r\n         textBoxSetupFileName.IsEnabled = true;\r\n         DocumentsToExport = null;\r\n         int docToExport = GetDocumentExportCount();\r\n         bool multipleFiles = docToExport > 1;\r\n\r\n         if (docToExport != 0)\r\n         {\r\n            FileFullName = GetDefaultDirectory() + \"\\\\\" + GetFileName() + \".\" + m_defaultExt;\r\n            FilePath = Path.GetDirectoryName(m_FileFullName);\r\n            FileName = multipleFiles ? Properties.Resources.MultipleFiles : Path.GetFileName(m_FileFullName);\r\n            textBoxSetupFileName.Text = FilePath + \"\\\\\" + FileName;\r\n         }\r\n         else\r\n         {\r\n            textBoxSetupFileName.IsEnabled = false;\r\n            buttonBrowse.IsEnabled = false;\r\n            return;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the file name as required.\r\n      /// </summary>\r\n      private void updateFileName()\r\n      {\r\n         int docToExport = GetDocumentExportCount();\r\n         bool multipleFiles = docToExport > 1;\r\n         FilePath = GetDefaultDirectory();\r\n         m_defaultExt = GetFileExtension();\r\n         if (!String.IsNullOrWhiteSpace(textBoxSetupFileName.Text))\r\n         {\r\n            // Gets the file name without extension if the file extension is a valid IFC File format.\r\n            if (Path.GetExtension(textBoxSetupFileName.Text).IndexOf(Properties.Resources.IFC, StringComparison.CurrentCultureIgnoreCase) != -1)\r\n               FileName = multipleFiles ? Properties.Resources.MultipleFiles : Path.GetFileNameWithoutExtension(textBoxSetupFileName.Text);\r\n            else\r\n               FileName = multipleFiles ? Properties.Resources.MultipleFiles : Path.GetFileName(textBoxSetupFileName.Text);\r\n         }\r\n         else\r\n         {\r\n            FileName = GetFileName();\r\n         }\r\n\r\n         textBoxSetupFileName.Text = FilePath + \"\\\\\" + FileName + \".\" + m_defaultExt;\r\n      }\r\n\r\n      private void textBoxSetupDescription_TextChanged(object sender, TextChangedEventArgs e)\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Handler for the system Help command; launches the Revit contextual help with the right context and returns true\r\n      /// so the parent doesn't launch its own help on top of ours\r\n      /// </summary>\r\n      /// <returns></returns>\r\n      protected override bool OnContextHelp()\r\n      {\r\n         // launch help\r\n         Autodesk.Revit.UI.ContextualHelp help = new Autodesk.Revit.UI.ContextualHelp(Autodesk.Revit.UI.ContextualHelpType.ContextId, \"HID_EXPORT_IFC\");\r\n         help.Launch();\r\n\r\n         return true;\r\n      }\r\n\r\n      private void ChildWindow_ContentRendered(object sender, EventArgs e)\r\n      {\r\n         // For COBie, we will always pop up the configuration window to make sure all items are initialized and user update them if necessary,\r\n         //   and this should only happen after IFCexport window has been completely rendered\r\n         //if (GetSelectedConfiguration().IFCVersion == IFCVersion.IFC2x3FM)\r\n         //{\r\n            //buttonEditSetup_Click(sender, e as RoutedEventArgs);\r\n         //}\r\n\r\n         // The SelectionChanged event will be activated after the Modify Config Window is closed\r\n         currentSelectedSetup.SelectionChanged += currentSelectedSetup_SelectionChanged;\r\n      }\r\n\r\n   }\r\n}"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCExportResult.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// The available user choices from the IFCExporter main export dialog.\r\n   /// </summary>\r\n   public enum IFCExportResult\r\n   {\r\n      /// <summary>\r\n      /// Invalid selection before dialog is closed.\r\n      /// </summary>\r\n      Invalid,\r\n\r\n      /// <summary>\r\n      /// Export and save settings (if modified)\r\n      /// </summary>\r\n      ExportAndSaveSettings,\r\n\r\n      /// <summary>\r\n      /// Cancel all changes\r\n      /// </summary>\r\n      Cancel\r\n   }\r\n}"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCExporterUI.csproj",
    "content": "﻿<Project Sdk=\"\">\n  <PropertyGroup>\n    <AddinGUID>e78da2e3-7e89-464c-97cd-2212c8be3fa8</AddinGUID>\n    <AddinType>INT</AddinType>\n    <RootNamespace>BIM.IFC.Export.UI</RootNamespace>\n    <IFCExporterUIAssemblyName>Autodesk.IFC.Export.UI</IFCExporterUIAssemblyName>\n    <AssemblyName>$(IFCExporterUIAssemblyName)</AssemblyName>\n    <AssociatedParentPath>IFCExporterUI</AssociatedParentPath>\n    <UseWPF>true</UseWPF>\n    <UseWindowsForms>true</UseWindowsForms>\n  </PropertyGroup>\n  <Import Project=\"$(SolutionDir)VSProps\\Revit.CSharp.Sdk.props\" />\n  <ItemGroup>\n    <Reference Include=\"Autodesk.UI.Windows\">\n      <HintPath>$(RevitExePath)\\Autodesk.UI.Windows.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"Autodesk.Weave.Wpf\">\n      <HintPath>$(RevitExePath)\\Autodesk.Weave.Wpf.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <FrameworkReference Include=\"Microsoft.WindowsDesktop.App.WindowsForms\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Update=\"COBieCompanyInfoTab.xaml.cs\">\n      <DependentUpon>COBieCompanyInfoTab.xaml</DependentUpon>\n    </Compile>\n    <Compile Update=\"COBieProjectInfoTab.xaml.cs\">\n      <DependentUpon>COBieProjectInfoTab.xaml</DependentUpon>\n    </Compile>\n    <Compile Update=\"IFCAddressInformationUI.xaml.cs\">\n      <DependentUpon>IFCAddressInformationUI.xaml</DependentUpon>\n    </Compile>\n    <Compile Update=\"IFCClassificationUI.xaml.cs\">\n      <DependentUpon>IFCClassificationUI.xaml</DependentUpon>\n    </Compile>\n    <Compile Update=\"IFCEntityTree\\EntityTree.xaml.cs\">\n      <DependentUpon>EntityTree.xaml</DependentUpon>\n    </Compile>\n    <Compile Update=\"IFCFileHeaderInformationUI.xaml.cs\">\n      <DependentUpon>IFCFileHeaderInformationUI.xaml</DependentUpon>\n    </Compile>\n    <Compile Update=\"IFCRenameExportSetup.xaml.cs\">\n      <DependentUpon>IFCRenameExportSetup.xaml</DependentUpon>\n    </Compile>\n    <Compile Update=\"IFCNewExportSetup.xaml.cs\">\n      <DependentUpon>IFCNewExportSetup.xaml</DependentUpon>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Update=\"IFCExport.xaml.cs\">\n      <DependentUpon>IFCExport.xaml</DependentUpon>\n    </Compile>\n    <Compile Update=\"IFCExporterUIWindow.xaml.cs\">\n      <DependentUpon>IFCExporterUIWindow.xaml</DependentUpon>\n    </Compile>\n    <Compile Update=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n    <Compile Update=\"Properties\\Settings.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Settings.settings</DependentUpon>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n    </Compile>\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>PublicResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n      <SubType>Designer</SubType>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <Resource Include=\"icons\\arrow_down.png\" />\n    <Resource Include=\"icons\\arrow_right.png\" />\n    <Resource Include=\"icons\\create.ico\" />\n    <Resource Include=\"icons\\data-refresh.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Resource Include=\"icons\\delete.ico\" />\n    <Resource Include=\"icons\\duplicate_ico.ico\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Resource Include=\"icons\\rename.ico\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Resource Include=\"icons\\load.ico\" />\n    <Resource Include=\"icons\\save.ico\" />\n    <Resource Include=\"icons\\empty-state.png\" />\n    <Content Include=\"Autodesk.IFC.Export.UI.addin\">\n      <SubType>Designer</SubType>\n    </Content>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Foundation\\UserInterfaceUtility\\UserInterfaceUtility.csproj\">\n      <Private>False</Private>\n      <ExcludeAssets>All</ExcludeAssets>\n      <PrivateAssets>All</PrivateAssets>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\".\\IFCExporterUI.props\" />\n  <PropertyGroup>\n    <PostBuildEvent>\n      $(ProjectDir)CreateAddinFile.bat $(OutDir)$(TargetName).addin $(AssemblyName).dll $(AddinGUID)\n   </PostBuildEvent>\n  </PropertyGroup>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ItemGroup>\n    <Compile Remove=\"IFCVersionExtensions.cs\" />\n    <Compile Remove=\"IFCEntityTree\\PredefinedTypeSelection.xaml.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Remove=\"icons\\alert.png\" />\n    <None Remove=\"icons\\arrow_down.png\" />\n    <None Remove=\"icons\\arrow_right.png\" />\n    <None Remove=\"icons\\data-refresh.png\" />\n    <None Remove=\"icons\\duplicate_ico.ico\" />\n    <None Remove=\"icons\\empty-state.png\" />\n    <None Remove=\"icons\\search.png\" />\n    <None Remove=\"icons\\template_add.png\" />\n    <None Remove=\"icons\\template_copy.png\" />\n    <None Remove=\"icons\\template_delete.png\" />\n    <None Remove=\"icons\\template_export.png\" />\n    <None Remove=\"icons\\template_import.png\" />\n    <None Remove=\"icons\\template_save.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Page Remove=\"IFCEntityTree\\PredefinedTypeSelection.xaml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"13.0.1\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Update=\"Properties\\Settings.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <LastGenOutput>Settings.Designer.cs</LastGenOutput>\n    </None>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCExporterUI.props",
    "content": "<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Reference Include=\"RevitAPI\">\n      <SpecificVersion>False</SpecificVersion>\n\t  <HintPath>..\\..\\..\\API\\2027\\RevitAPI.dll</HintPath>\n\t  <Private>False</Private>\n    </Reference>\n    <Reference Include=\"RevitAPIUI\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\..\\API\\2027\\RevitAPIUI.dll</HintPath>\n\t  <Private>False</Private>\n    </Reference>\n    <Reference Include=\"RevitAPIIFC\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\..\\API\\2027\\RevitAPIIFC.dll</HintPath>\r\n\t  <Private>False</Private>\r\n    </Reference>\r\n    <Reference Include=\"UIFramework\">\n      <HintPath>..\\..\\..\\API\\2027\\UIFramework.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"AdWindows\">\n      <HintPath>..\\..\\..\\API\\2027\\AdWindows.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\r\n  </ItemGroup>\n  <ItemGroup />\n    <!--\n    Always Import the appropriate *.OutputPath.targets file BEFORE the\n    Revit.CSharp.targets file, otherwise VisualStudio will complain\n    about missing OutputPath tags.\n    -->\n  <Import Project=\"$(SolutionDir)VSProps\\Revit.CSharp.Sdk.targets\" />\n</Project>\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCExporterUIOverride.csproj",
    "content": "<Project Sdk=\"\">\r\n  <PropertyGroup>\r\n    <AddinGUID>6DC299D6-F746-47BE-AE93-F00DDC714257</AddinGUID>\r\n    <AddinType>LT</AddinType>\r\n    <DisableCreateSatellite>true</DisableCreateSatellite>\r\n    <RootNamespace>BIM.IFC.Export.UI</RootNamespace>\r\n    <IFCExporterUIAssemblyName>$(MSBuildProjectName)</IFCExporterUIAssemblyName>\r\n    <AssemblyName>$(IFCExporterUIAssemblyName)</AssemblyName>\r\n    <AssociatedParentPath>$(MSBuildProjectName)\\SubFolderToPreventLoadingDll</AssociatedParentPath>\r\n    <UseWPF>true</UseWPF>\r\n    <UseWindowsForms>true</UseWindowsForms>\r\n    <IncludePackageReferencesDuringMarkupCompilation>false</IncludePackageReferencesDuringMarkupCompilation>\r\n    <EmbedUntrackedSources>false</EmbedUntrackedSources>\r\n    <NotACoreAssembly>True</NotACoreAssembly>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\r\n    <DefineConstants>IFC_OPENSOURCE</DefineConstants>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\r\n    <DefineConstants>IFC_OPENSOURCE</DefineConstants>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Slow_Debug|x64'\">\r\n    <DefineConstants>IFC_OPENSOURCE</DefineConstants>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(SolutionDir)VSProps\\Revit.CSharp.Sdk.props\" />\r\n  <ItemGroup>\r\n    <FrameworkReference Include=\"Microsoft.WindowsDesktop.App.WindowsForms\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Update=\"COBieCompanyInfoTab.xaml.cs\">\r\n      <DependentUpon>COBieCompanyInfoTab.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Update=\"COBieProjectInfoTab.xaml.cs\">\r\n      <DependentUpon>COBieProjectInfoTab.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Update=\"IFCAddressInformationUI.xaml.cs\">\r\n      <DependentUpon>IFCAddressInformationUI.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Update=\"IFCClassificationUI.xaml.cs\">\r\n      <DependentUpon>IFCClassificationUI.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Update=\"IFCEntityTree\\EntityTree.xaml.cs\">\r\n      <DependentUpon>EntityTree.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Update=\"IFCFileHeaderInformationUI.xaml.cs\">\r\n      <DependentUpon>IFCFileHeaderInformationUI.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Update=\"IFCRenameExportSetup.xaml.cs\">\r\n      <DependentUpon>IFCRenameExportSetup.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Update=\"IFCNewExportSetup.xaml.cs\">\r\n      <DependentUpon>IFCNewExportSetup.xaml</DependentUpon>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Update=\"IFCExport.xaml.cs\">\r\n      <DependentUpon>IFCExport.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Update=\"IFCExporterUIWindow.xaml.cs\">\r\n      <DependentUpon>IFCExporterUIWindow.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Update=\"Properties\\Resources.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Resources.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Update=\"Properties\\Settings.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DependentUpon>Settings.settings</DependentUpon>\r\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\r\n    </Compile>\r\n    <EmbeddedResource Include=\"Properties\\Resources.de.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.fr.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\r\n      <SubType>Designer</SubType>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Resource Include=\"icons\\arrow_down.png\" />\r\n    <Resource Include=\"icons\\arrow_right.png\" />\r\n    <Resource Include=\"icons\\create.ico\" />\r\n    <Resource Include=\"icons\\data-refresh.png\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Resource Include=\"icons\\delete.ico\" />\r\n    <Resource Include=\"icons\\duplicate_ico.ico\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Resource Include=\"icons\\rename.ico\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Resource Include=\"icons\\load.ico\" />\r\n    <Resource Include=\"icons\\save.ico\" />\r\n    <Resource Include=\"icons\\empty-state.png\" />\r\n    <Content Include=\"Autodesk.IFC.Export.UI.addin\">\r\n      <SubType>Designer</SubType>\r\n    </Content>\r\n  </ItemGroup>\r\n  <Import Project=\".\\IFCExporterUI.props\" />\r\n  <PropertyGroup>\r\n    <PostBuildEvent>\r\n$(ProjectDir)CreateAddinFile.bat $(OutDir)$(TargetName).addin $(AssemblyName).dll $(AddinGUID)\r\n</PostBuildEvent>\r\n    <BaseOutputPath>C:\\ProgramData\\Autodesk\\ApplicationPlugins\\IFC 2027.bundle\\Contents\\2027</BaseOutputPath>\r\n  </PropertyGroup>\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n  <ItemGroup>\r\n    <Compile Remove=\"IFCVersionExtensions.cs\" />\r\n    <Compile Remove=\"IFCEntityTree\\PredefinedTypeSelection.xaml.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Remove=\"icons\\alert.png\" />\r\n    <None Remove=\"icons\\arrow_down.png\" />\r\n    <None Remove=\"icons\\arrow_right.png\" />\r\n    <None Remove=\"icons\\data-refresh.png\" />\r\n    <None Remove=\"icons\\duplicate_ico.ico\" />\r\n    <None Remove=\"icons\\empty-state.png\" />\r\n    <None Remove=\"icons\\search.png\" />\r\n    <None Remove=\"icons\\template_add.png\" />\r\n    <None Remove=\"icons\\template_copy.png\" />\r\n    <None Remove=\"icons\\template_delete.png\" />\r\n    <None Remove=\"icons\\template_export.png\" />\r\n    <None Remove=\"icons\\template_import.png\" />\r\n    <None Remove=\"icons\\template_save.png\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Page Remove=\"IFCEntityTree\\PredefinedTypeSelection.xaml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"13.0.1\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\Revit.IFC.Common\\Revit.IFC.Common.csproj\" />\r\n    <ProjectReference Include=\"..\\Revit.IFC.Export\\Revit.IFC.Export.csproj\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"Autodesk.UI.Windows\">\r\n      <HintPath>..\\..\\..\\API\\2027\\Autodesk.UI.Windows.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Autodesk.Weave.Wpf\">\r\n      <HintPath>..\\..\\..\\API\\2027\\Autodesk.Weave.Wpf.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"UserInterfaceUtility\">\r\n      <HintPath>..\\..\\..\\API\\2027\\UserInterfaceUtility.dll</HintPath>\r\n    </Reference>\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCExporterUIWindow.xaml",
    "content": "﻿<auiw:ChildWindow x:Class=\"BIM.IFC.Export.UI.IFCExporterUIWindow\"\r\n                  xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n                  xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n                  xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n                  xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\r\n                  xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \r\n                  xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \r\n                  xmlns:weaveRoot=\"clr-namespace:Autodesk.Weave.Wpf;assembly=Autodesk.Weave.Wpf\"\r\n                  xmlns:weave=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties;assembly=Autodesk.Weave.Wpf\"\r\n                  xmlns:ctrl=\"clr-namespace:Autodesk.Weave.Wpf.Controls;assembly=Autodesk.Weave.Wpf\"\r\n                  xmlns:weave_d=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties.DesignTime;assembly=Autodesk.Weave.Wpf\"\r\n                  mc:Ignorable=\"d\" \r\n                  Title=\"{x:Static p:Resources.ModifySetupTitle}\" \r\n                  Height=\"560\"\r\n                  Width=\"987\" \r\n                  WindowStyle=\"SingleBorderWindow\" \r\n                  ResizeMode=\"NoResize\">\r\n   <Grid Margin=\"4,4,4,4\">\r\n      <Grid.RowDefinitions>\r\n         <RowDefinition Height=\"479*\"/>\r\n         <RowDefinition Height=\"44*\"/>\r\n      </Grid.RowDefinitions>\r\n      <TabControl Name=\"tabControl\" Margin=\"269,11,10,3\">\r\n         <TabItem Header=\"{x:Static p:Resources.General}\" Name=\"General\">\r\n            <Grid Margin=\"0,0,0,0\">\r\n               <Label Content=\"{x:Static p:Resources.IFCVersion}\" Margin=\"10,5,0,0\" Name=\"label1\" HorizontalAlignment=\"Left\" Width=\"275\" Height=\"26\" VerticalAlignment=\"Top\" />\r\n               <ComboBox Margin=\"0,5,10,0\" Name=\"comboboxIfcType\" Text=\"\" SelectionChanged=\"comboboxIfcType_SelectionChanged\" HorizontalAlignment=\"Right\" Width=\"298\" Height=\"23\" VerticalAlignment=\"Top\" />\r\n               <Label Content=\"{x:Static p:Resources.ExchangeRequirement}\" Margin=\"10,36,0,0\" Name=\"labelExchangeRequirement\" HorizontalAlignment=\"Left\" Width=\"176\" Height=\"28\" VerticalAlignment=\"Top\" />\r\n               <ComboBox Margin=\"0,36,10,0\" Name=\"comboBoxExchangeRequirement\" Text=\"\" SelectionChanged=\"comboBoxExchangeRequirement_SelectionChanged\" HorizontalAlignment=\"Right\" Width=\"298\" Height=\"23\" VerticalAlignment=\"Top\"/>\r\n               <Label Content=\"{x:Static p:Resources.CategoryMapping}\" Margin=\"10,67,0,0\" x:Name=\"labelCategoryMapping\" HorizontalAlignment=\"Left\" Width=\"176\" Height=\"28\" VerticalAlignment=\"Top\"/>\r\n               <ComboBox Margin=\"0,67,38,0\" Name=\"comboBoxCategoryMapping\" SelectionChanged=\"comboBoxCategoryMapping_SelectionChanged\" HorizontalAlignment=\"Right\" Width=\"270\" Height=\"23\" VerticalAlignment=\"Top\"/>\r\n               <Button Content=\"{x:Static p:Resources.Ellipses}\" Margin=\"10,67,10,0\" x:Name=\"buttonCategoryMapping\" Click=\"buttonCategoryMapping_Click\" HorizontalAlignment=\"Right\" Width=\"23\" Height=\"23\" VerticalAlignment=\"Top\"/>\r\n               <Label Content=\"{x:Static p:Resources.PropertyMapping}\" Margin=\"10,98,0,0\" x:Name=\"labelPropertyMappingSetups\" HorizontalAlignment=\"Left\" Width=\"190\" Height=\"28\" VerticalAlignment=\"Top\"/>\r\n               <ComboBox Margin=\"0,98,38,0\" Name=\"comboBoxPropertyMappingSetups\" SelectionChanged=\"comboBoxPropertyMappingSetups_SelectionChanged\" HorizontalAlignment=\"Right\" Width=\"270\" Height=\"23\" VerticalAlignment=\"Top\"/>\r\n               <Button Content=\"{x:Static p:Resources.Ellipses}\" Margin=\"10,98,10,0\" Name=\"buttonPropertyMappingSetups\" Click=\"buttonPropertyMappingSetups_Click\" HorizontalAlignment=\"Right\" Width=\"23\" Height=\"23\" VerticalAlignment=\"Top\"/>\r\n               <Label Content=\"{x:Static p:Resources.FileType}\" Margin=\"10,129,0,0\" Name=\"labelFileType\" HorizontalAlignment=\"Left\" Width=\"275\" Height=\"26\" VerticalAlignment=\"Top\" />\r\n               <ComboBox Margin=\"0,129,10,0\" Name=\"comboboxFileType\" Text=\"\" SelectionChanged=\"comboboxFileType_SelectionChanged\" HorizontalAlignment=\"Right\" Width=\"298\" Height=\"23\" VerticalAlignment=\"Top\" />\r\n               <Label Content=\"{x:Static p:Resources.PhaseToExport}\" Margin=\"10,160,0,0\" x:Name=\"labelPhaseToExport\" RenderTransformOrigin=\"0.738,0.586\" HorizontalAlignment=\"Left\" Width=\"275\" Height=\"26\" VerticalAlignment=\"Top\"/>\r\n               <ComboBox Margin=\"0,160,10,0\" Name=\"comboboxActivePhase\" Text=\"\" SelectionChanged=\"comboboxActivePhase_SelectionChanged\" HorizontalAlignment=\"Right\" Width=\"298\" Height=\"23\" VerticalAlignment=\"Top\"/>\r\n               <Label Content=\"{x:Static p:Resources.SpaceBoundaries}\" Margin=\"10,190,0,0\" Name=\"labelSpaceBoundaries\" HorizontalAlignment=\"Left\" Width=\"275\" Height=\"26\" VerticalAlignment=\"Top\" />\r\n               <ComboBox Margin=\"0,191,10,0\" Name=\"comboboxSpaceBoundaries\" ItemsSource=\"{Binding}\" SelectionChanged=\"comboboxSpaceBoundaries_SelectionChanged\" HorizontalAlignment=\"Right\" Width=\"298\" Height=\"23\" VerticalAlignment=\"Top\" />\r\n               <Label Content=\"{x:Static p:Resources.FacilityType}\" Margin=\"10,222,0,0\" x:Name=\"labelFacilityType\" HorizontalAlignment=\"Left\" Width=\"176\" Height=\"28\" VerticalAlignment=\"Top\" />\r\n               <ComboBox Margin=\"0,222,10,0\" Name=\"comboBoxFacilityType\" SelectionChanged=\"comboBoxFacilityType_SelectionChanged\" HorizontalAlignment=\"Right\" Width=\"298\" Height=\"23\" VerticalAlignment=\"Top\"/>\r\n               <Label Content=\"{x:Static p:Resources.FacilityPredefinedType}\" Margin=\"10,253,0,0\" x:Name=\"labelFacilityPredefinedType\" HorizontalAlignment=\"Left\" Width=\"176\" Height=\"28\" VerticalAlignment=\"Top\"/>\r\n               <ComboBox Margin=\"0,253,10,0\" Name=\"comboBoxFacilityPredefinedType\" SelectionChanged=\"comboBoxFacilityPredefinedType_SelectionChanged\" HorizontalAlignment=\"Right\" Width=\"298\" Height=\"22\" VerticalAlignment=\"Top\"/>\r\n               <CheckBox Content=\"{x:Static p:Resources.SplitWallsColumsDuctsByLevel}\" Name=\"checkboxSplitWalls\" Checked=\"checkboxSplitWalls_Checked\" Unchecked=\"checkboxSplitWalls_Checked\" HorizontalAlignment=\"Left\" Width=\"574\" Height=\"16\" VerticalAlignment=\"Top\" Margin=\"10,284,0,0\"/>\r\n               <Button Content=\"{x:Static p:Resources.FileHeaderInformation}\" Margin=\"0,0,10,40\" Name=\"fileHeaderInformation\" Click=\"buttonFileHeader_Click\" RenderTransformOrigin=\"0.505,0.367\" HorizontalAlignment=\"Right\" Width=\"257\" Height=\"23\" VerticalAlignment=\"Bottom\"/>\r\n               <Button Content=\"{x:Static p:Resources.Address}\" Margin=\"0,0,10,9\" Name=\"addressInformation\" Click=\"buttonAddressInformation_Click\" HorizontalAlignment=\"Right\" Width=\"257\" Height=\"23\" VerticalAlignment=\"Bottom\"/>\r\n               <Button Content=\"{x:Static p:Resources.Classification}\" Margin=\"10,0,0,10\" Name=\"classification_Button\" Click=\"buttonClassification_Click\" Height=\"23\" VerticalAlignment=\"Bottom\" HorizontalAlignment=\"Left\" Width=\"231\"/>\r\n            </Grid>\r\n         </TabItem>\r\n         <TabItem Header=\"{x:Static p:Resources.AdditionalContent}\" x:Name=\"whatToExport\">\r\n            <Grid Margin=\"0,0,-10,0\">\r\n               <CheckBox Content=\"{x:Static p:Resources.ExportVisibleElementsInView}\" Margin=\"10,50,0,0\" Name=\"checkboxVisibleElementsCurrView\" Checked=\"checkboxVisibleElementsCurrView_Checked\" Unchecked=\"checkboxVisibleElementsCurrView_Checked\" RenderTransformOrigin=\"0.634,0.968\" HorizontalAlignment=\"Left\" Width=\"570\" Height=\"16\" VerticalAlignment=\"Top\" />\r\n               <CheckBox Content=\"{x:Static p:Resources.ExportRoomsInView}\" Margin=\"30,71,0,0\" x:Name=\"checkBoxExportRoomsInView\" Checked=\"checkBoxExportRoomsInView_Checked\" Unchecked=\"checkBoxExportRoomsInView_Checked\" IsEnabled=\"False\" HorizontalAlignment=\"Left\" Width=\"550\" Height=\"16\" VerticalAlignment=\"Top\" />\r\n               <CheckBox Content=\"{x:Static p:Resources.IncludeSteelElements}\" Margin=\"10,92,0,0\" x:Name=\"checkboxIncludeSteelElements\" Checked=\"checkboxIncludeSteelElements_Checked\" Unchecked=\"checkboxIncludeSteelElements_Unchecked\" HorizontalAlignment=\"Left\" Width=\"373\" Height=\"16\" VerticalAlignment=\"Top\"/>\r\n               <CheckBox Content=\"{x:Static p:Resources.ExportPlanViewElements}\" Margin=\"10,113,0,0\" x:Name=\"checkbox2dElements\" Checked=\"checkbox2dElements_Checked\" Unchecked=\"checkbox2dElements_Checked\" RenderTransformOrigin=\"0.634,0.968\" HorizontalAlignment=\"Left\" Width=\"578\" Height=\"16\" VerticalAlignment=\"Top\" />\r\n               <CheckBox Content=\"{x:Static p:Resources.ExportCeilingGrids}\" Margin=\"10,134,0,0\" x:Name=\"checkboxExportCeilingGrids\" Checked=\"checkboxExportCeilingGrids_Checked\" Unchecked=\"checkboxExportCeilingGrids_Checked\" RenderTransformOrigin=\"0.634,0.968\" HorizontalAlignment=\"Left\" Width=\"578\" Height=\"16\" VerticalAlignment=\"Top\" />\r\n               <ComboBox Margin=\"0,5,20,0\" x:Name=\"comboboxLinkedFiles\" Text=\"\" SelectionChanged=\"comboboxLinkedFiles_SelectionChanged\" HorizontalAlignment=\"Right\" Width=\"298\" Height=\"23\" VerticalAlignment=\"Top\" />\r\n               <Label Content=\"{x:Static p:Resources.LinkedFiles}\" Margin=\"10,5,0,0\" x:Name=\"linkedFiles\" HorizontalAlignment=\"Left\" Width=\"275\" Height=\"26\" VerticalAlignment=\"Top\" />\r\n            </Grid>\r\n         </TabItem>\r\n         <TabItem Header=\"{x:Static p:Resources.PropertySets}\"  x:Name=\"PropertySets\">\r\n            <Grid Margin=\"0,0,-10,0\">\r\n               <Grid.ColumnDefinitions>\r\n                  <ColumnDefinition Width=\"27*\"/>\r\n                  <ColumnDefinition Width=\"19*\"/>\r\n               </Grid.ColumnDefinitions>\r\n               <CheckBox Content=\"{x:Static p:Resources.ExportRevitPropertySets}\" Margin=\"10,7,0,0\" x:Name=\"checkboxInternalPropertySets\" Checked=\"checkboxInternalPropertySets_Checked\" Unchecked=\"checkboxInternalPropertySets_Checked\" Height=\"16\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" Width=\"588\" Grid.ColumnSpan=\"2\" />\r\n               <CheckBox Content=\"{x:Static p:Resources.ExportIFCCommonPropertySets}\" Margin=\"10,28,0,0\" x:Name=\"checkboxIFCCommonPropertySets\" Checked=\"checkboxIFCCommonPropertySets_Checked\" Unchecked=\"checkboxIFCCommonPropertySets_Checked\" Height=\"16\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" Width=\"588\" Grid.ColumnSpan=\"2\"/>\r\n               <CheckBox Content=\"{x:Static p:Resources.ExportBaseQuantities}\" Margin=\"10,49,0,0\" x:Name=\"checkboxExportBaseQuantities\" Checked=\"checkboxExportBaseQuantities_Checked\" Unchecked=\"checkboxExportBaseQuantities_Checked\" Height=\"16\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" Width=\"588\" Grid.ColumnSpan=\"2\" />\r\n               <CheckBox Content=\"{x:Static p:Resources.ExportMaterialPropertySets}\" Margin=\"10,70,0,0\" x:Name=\"checkboxExportMaterialPsets\" VerticalAlignment=\"Top\"  Checked=\"checkboxExportMaterialPsets_Checked\" Unchecked=\"checkboxExportMaterialPsets_Checked\" Height=\"16\" HorizontalAlignment=\"Left\" Width=\"588\" Grid.ColumnSpan=\"2\" />\r\n               <CheckBox Content=\"{x:Static p:Resources.ExportSchedulesAsPropertySets}\" Margin=\"10,91,0,0\" x:Name=\"checkboxExportSchedulesAsPsets\" VerticalAlignment=\"Top\"  Checked=\"checkboxExportSchedulesAsPsets_Checked\" Unchecked=\"checkboxExportSchedulesAsPsets_Checked\" Height=\"16\" HorizontalAlignment=\"Left\" Width=\"588\" Grid.ColumnSpan=\"2\" />\r\n               <CheckBox Content=\"{x:Static p:Resources.ExportSpecificSchedules}\" Margin=\"30,112,0,0\" x:Name=\"checkBoxExportSpecificSchedules\" VerticalAlignment=\"Top\"  Checked=\"checkBoxExportSpecificSchedules_Checked\" Unchecked=\"checkBoxExportSpecificSchedules_Checked\" Height=\"16\" HorizontalAlignment=\"Left\" Width=\"568\" Grid.ColumnSpan=\"2\" />\r\n               <CheckBox Content=\"{x:Static p:Resources.ExportUserDefinedPropertySets}\" Margin=\"10,141,0,0\" Height=\"16\" x:Name=\"checkboxExportUserDefinedPset\" VerticalAlignment=\"Top\" Checked=\"checkboxExportUserDefinedPset_Checked\" Unchecked=\"checkboxExportUserDefinedPset_Checked\" HorizontalAlignment=\"Left\" Width=\"588\" Grid.ColumnSpan=\"2\"/>\r\n               <CheckBox Content=\"{x:Static p:Resources.UseTypePropertiesInInstacePSets}\" Margin=\"30,162,0,0\" x:Name=\"checkboxUseTypePropertiesInInstacePSets\" VerticalAlignment=\"Top\" Checked=\"checkboxUseTypePropertiesInInstacePSets_Checked\" Unchecked=\"checkboxUseTypePropertiesInInstacePSets_Checked\" HorizontalAlignment=\"Left\" Width=\"588\" Height=\"16\" Grid.ColumnSpan=\"2\"/>\r\n               <TextBox Height=\"23\" Margin=\"30,183,0,0\" x:Name=\"userDefinedPropertySetFileName\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" Width=\"436\" Grid.ColumnSpan=\"2\" />\r\n               <Button Content=\"{x:Static p:Resources.Browse}\" x:Name=\"buttonBrowse\" Width=\"107\" IsDefault=\"True\" Click=\"buttonBrowse_Click\" Height=\"23\" VerticalAlignment=\"Top\" Margin=\"0,183,20,0\" HorizontalAlignment=\"Right\" Grid.Column=\"1\"/>\r\n               <CheckBox Content=\"{x:Static p:Resources.ExportUserDefinedParameterMappingTable}\" Height=\"16\" Margin=\"10,222,0,0\" x:Name=\"checkBoxExportUserDefinedParameterMapping\" VerticalAlignment=\"Top\" Checked=\"checkBoxExportUserDefinedParameterMapping_Checked\" Unchecked=\"checkBoxExportUserDefinedParameterMapping_Checked\" HorizontalAlignment=\"Left\" Width=\"588\" Grid.ColumnSpan=\"2\"/>\r\n               <TextBox Height=\"23\" Margin=\"30,243,0,0\" x:Name=\"userDefinedParameterMappingTable\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" Width=\"436\" Grid.ColumnSpan=\"2\"/>\r\n               <Button Content=\"{x:Static p:Resources.Browse}\" Margin=\"0,243,20,0\" x:Name=\"buttonParameterMappingBrowse\" Click=\"buttonParameterMappingBrowse_Click\" Width=\"107\" IsDefault=\"True\" Height=\"23\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Right\" Grid.Column=\"1\"/>\r\n               <Button Content=\"{x:Static p:Resources.Classification}\" Margin=\"10,0,0,10\" Name=\"classificationButton\" Click=\"buttonClassification_Click\" Height=\"23\" VerticalAlignment=\"Bottom\" HorizontalAlignment=\"Left\" Width=\"231\"/>\r\n            </Grid>\r\n         </TabItem>\r\n         <TabItem Header=\"{x:Static p:Resources.LevelOfDetail}\" x:Name=\"levelOfDetail\">\r\n            <Grid Margin=\"0,0,-10,0\">\r\n               <Label Content=\"{x:Static p:Resources.TessellationDetails}\" HorizontalAlignment=\"Left\" Margin=\"10,10,0,0\" x:Name=\"checkBoxLevelOfDetails\" Grid.ColumnSpan=\"2\" Width=\"368\" VerticalAlignment=\"Top\" Height=\"26\"/>\r\n               <ComboBox Name=\"comboBoxLOD\" VerticalAlignment=\"Top\"  Height=\"25\"  Margin=\"0,10,20,0\" SelectionChanged=\"comboBoxLOD_SelectionChanged\" HorizontalAlignment=\"Right\" Width=\"198\"/>\r\n            </Grid>\r\n         </TabItem>\r\n         <TabItem Header=\"{x:Static p:Resources.Advanced}\" x:Name=\"Advanced\">\r\n            <Grid Margin=\"0,0,-10,0\">\r\n               <CheckBox Content=\"{x:Static p:Resources.ExportPartsAsBuildingElements}\" HorizontalAlignment=\"Left\" Margin=\"10,7,0,0\" x:Name=\"checkBoxExportPartsAsBuildingElements\" VerticalAlignment=\"Top\" Checked=\"checkBoxExportPartsAsBuildingElements_Checked\" Unchecked=\"checkBoxExportPartsAsBuildingElements_Checked\" Visibility=\"Visible\" Height=\"16\" Width=\"569\" Grid.ColumnSpan=\"2\" />\r\n               <CheckBox Content=\"{x:Static p:Resources.ExportSolidModelsWhenPossible}\" HorizontalAlignment=\"Left\" Margin=\"10,28,0,0\" x:Name=\"checkboxExportSolidModelRep\" VerticalAlignment=\"Top\"  Checked=\"checkboxExportSolidModelRep_Checked\" Unchecked=\"checkboxExportSolidModelRep_Checked\" Width=\"569\" Height=\"16\" Grid.ColumnSpan=\"2\" />\r\n               <CheckBox Content=\"{x:Static p:Resources.UseActiveViewForGeometry}\"  Height=\"16\" HorizontalAlignment=\"Left\" Margin=\"10,49,0,0\" VerticalAlignment=\"Top\" x:Name=\"checkBoxUseActiveViewGeometry\" Checked=\"checkBoxUseActiveViewGeometry_Checked\" Unchecked=\"checkBoxUseActiveViewGeometry_Checked\" ToolTip=\"{x:Static p:Resources.UseActiveViewForGeometryTooltip}\" Width=\"569\" Grid.ColumnSpan=\"2\"/>\r\n               <CheckBox Content=\"{x:Static p:Resources.UseFamilyAndTypeNameForReference}\" HorizontalAlignment=\"Left\" Margin=\"10,70,0,0\" x:Name=\"checkBoxFamilyAndTypeName\" Checked=\"checkBoxFamilyAndTypeName_Checked\" Unchecked=\"checkBoxFamilyAndTypeName_Checked\" Height=\"16\" VerticalAlignment=\"Top\" Width=\"569\" Grid.ColumnSpan=\"2\" />\r\n               <CheckBox Content=\"{x:Static p:Resources.UseRoomBoundariesForRoomVolume}\" Height=\"16\" HorizontalAlignment=\"Left\" Margin=\"10,91,0,0\" x:Name=\"checkBoxUse2DRoomVolumes\" VerticalAlignment=\"Top\" Checked=\"checkBoxUse2DRoomVolumes_Checked\" Unchecked=\"checkBoxUse2DRoomVolumes_Checked\" Width=\"569\" Grid.ColumnSpan=\"2\" />\r\n               <CheckBox Content=\"{x:Static p:Resources.IncludeIfcSiteElevation}\" Height=\"16\" HorizontalAlignment=\"Left\" Margin=\"10,112,0,0\" x:Name=\"checkboxIncludeIfcSiteElevation\" VerticalAlignment=\"Top\" Checked=\"checkboxIfcSiteElevation_Checked\" Unchecked=\"checkboxIfcSiteElevation_Checked\" Width=\"569\" Grid.ColumnSpan=\"2\" />\r\n               <CheckBox Content=\"{x:Static p:Resources.StoreIFCGUID}\" Height=\"16\" HorizontalAlignment=\"Left\" Margin=\"10,133,0,0\" x:Name=\"checkboxStoreIFCGUID\" VerticalAlignment=\"Top\" Checked=\"checkboxStoreIFCGUID_Checked\" Unchecked=\"checkboxStoreIFCGUID_Checked\" Width=\"569\" Grid.ColumnSpan=\"2\"  />\r\n               <CheckBox Content=\"{x:Static p:Resources.ExportBoundingBox}\" Height=\"16\" HorizontalAlignment=\"Left\" Margin=\"10,154,0,0\" Name=\"checkboxExportBoundingBox\" VerticalAlignment=\"Top\" Checked=\"checkboxExportBoundingBox_Checked\" Unchecked=\"checkboxExportBoundingBox_Checked\" Width=\"569\" Grid.ColumnSpan=\"2\" />\r\n               <CheckBox Content=\"{x:Static p:Resources.UseOnlyTriangulation}\" Margin=\"10,175,0,0\" x:Name=\"checkBox_TriangulationOnly\" Checked=\"checkBox_TriangulationOnly_Checked\" Unchecked=\"checkBox_TriangulationOnly_Unchecked\" ToolTip=\"{x:Static p:Resources.TriangulationOnlyTooltip}\" HorizontalAlignment=\"Left\" Width=\"588\" Height=\"15\" VerticalAlignment=\"Top\"/>\r\n               <CheckBox Content=\"{x:Static p:Resources.UseTypeNameOnlyForIfcType}\" Margin=\"10,196,0,0\" x:Name=\"checkbox_UseTypeNameOnly\" Checked=\"Checkbox_UseTypeNameOnly_Checked\" Unchecked=\"Checkbox_UseTypeNameOnly_Unchecked\" ToolTip=\"{x:Static p:Resources.UseTypeNameOnlyTooltip}\" HorizontalAlignment=\"Left\" Width=\"588\" Height=\"15\" VerticalAlignment=\"Top\"/>\r\n               <CheckBox Content=\"{x:Static p:Resources.UseVisibleRevitNameAsEntityName}\" Margin=\"10,217,0,0\" x:Name=\"checkbox_UseVisibleRevitNameAsEntityName\" Checked=\"Checkbox_UseVisibleRevitName_Checked\" Unchecked=\"Checkbox_UseVisibleRevitName_Unchecked\" ToolTip=\"{x:Static p:Resources.UseVisibleRevitNameTooltip}\" Height=\"19\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" Width=\"588\"/>\r\n               <CheckBox Content=\"{x:Static p:Resources.ExportHostsAsSingleEntity}\" Margin=\"10,238,0,0\" x:Name=\"checkbox_ExportHostAsSingleEntity\" Checked=\"Checkbox_ExportHostAsSingleEntity_Checked\" Unchecked=\"Checkbox_ExportHostAsSingleEntity_Unchecked\" ToolTip=\"{x:Static p:Resources.ExportHostAsSingleEntityTooltip}\" Height=\"19\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" Width=\"588\"/>\r\n               <CheckBox Content=\"{x:Static p:Resources.OwnerHistoryLastModified}\" Margin=\"10,259,0,0\" x:Name=\"checkbox_OwnerHistoryLastModified\" Checked=\"Checkbox_OwnerHistoryLastModified_Checked\" Unchecked=\"Checkbox_OwnerHistoryLastModified_Unchecked\" ToolTip=\"{x:Static p:Resources.OwnerHistoryLastModifiedTooltip}\" Height=\"19\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" Width=\"588\"/>\r\n               <CheckBox Content=\"{x:Static p:Resources.ExportBarsInUniformRebarSetsAsSeparateIFCEntities}\" Margin=\"10,280,0,0\" x:Name=\"checkbox_ExportBarsInUniformSetsAsSeparateIFCEntities\" Checked=\"checkbox_ExportBarsInUniformSetsAsSeparateIFCEntities_Checked\" Unchecked=\"checkbox_ExportBarsInUniformSetsAsSeparateIFCEntities_Unchecked\" ToolTip=\"{x:Static p:Resources.ExportBarsInUniformRebarSetsAsSeparateIFCEntitiesToopTip}\" Height=\"19\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" Width=\"588\"/>\r\n               <Button x:Name=\"button_ExcludeElement\" Content=\"{x:Static p:Resources.ExcludeEntitySelection}\" Margin=\"16,0,0,12\" Height=\"23\" VerticalAlignment=\"Bottom\" HorizontalAlignment=\"Left\" Padding=\"5,0,5,0\" Click=\"button_ExcludeElement_Click\"/>\r\n            </Grid>\r\n         </TabItem>\r\n         <TabItem Header=\"{x:Static p:Resources.GeoReference}\" HorizontalAlignment=\"Stretch\" Height=\"21\" VerticalAlignment=\"Top\" Margin=\"-2,0,0,0\">\r\n            <Grid Margin=\"0,0,0,0\">\r\n               <Grid.ColumnDefinitions>\r\n                  <ColumnDefinition Width=\"251*\"/>\r\n                  <ColumnDefinition Width=\"86*\"/>\r\n                  <ColumnDefinition Width=\"261*\"/>\r\n               </Grid.ColumnDefinitions>\r\n               <Rectangle Stroke=\"#FF706F6F\" Margin=\"10,106,10,10\" Grid.ColumnSpan=\"3\"/>\r\n               <Label Content=\"{x:Static p:Resources.ProjectOrigin}\" Margin=\"10,45,0,0\" x:Name=\"label_SiteOrigin\" RenderTransformOrigin=\"0.738,0.586\" HorizontalAlignment=\"Left\" Width=\"275\" Height=\"26\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\"/>\r\n               <ComboBox Margin=\"10,45,10,0\" x:Name=\"comboBoxSitePlacement\" SelectionChanged=\"comboBoxPlacement_SelectionChanged\" Height=\"23\" VerticalAlignment=\"Top\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\"/>\r\n               <Label Content=\"{x:Static p:Resources.ProjectedCRS}\" Margin=\"10,75,0,0\" x:Name=\"label_ProjectedCRS\" RenderTransformOrigin=\"0.738,0.586\" HorizontalAlignment=\"Left\" Width=\"568\" Height=\"26\" VerticalAlignment=\"Top\" FontWeight=\"Bold\" Grid.ColumnSpan=\"3\"/>\r\n\r\n               <Label Content=\"{x:Static p:Resources.ProjectedCRSName}\" Margin=\"20,142,0,0\" HorizontalAlignment=\"Left\" Width=\"307\" Height=\"28\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\"/>\r\n               <TextBox x:Name=\"TextBox_CRSName\" Margin=\"10,142,15,0\" TextWrapping=\"Wrap\" IsReadOnly=\"True\" BorderThickness=\"0\" Height=\"28\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"2\"/>\r\n               <Label Content=\"{x:Static p:Resources.ProjectedCRSDesc}\" Margin=\"20,172,0,0\" HorizontalAlignment=\"Left\" Width=\"307\" Height=\"28\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\"/>\r\n               <TextBox x:Name=\"TextBox_CRSDesc\" Margin=\"10,172,15,0\" TextWrapping=\"Wrap\" IsReadOnly=\"True\" BorderThickness=\"0\" Height=\"45\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"2\"/>\r\n               <Label Content=\"{x:Static p:Resources.EPSGCode}\" Margin=\"21,112,0,0\" HorizontalAlignment=\"Left\" Width=\"306\" Height=\"28\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\"/>\r\n               <TextBox x:Name=\"TextBox_EPSG\" Margin=\"10.438,112,15,0\" TextWrapping=\"Wrap\" LostKeyboardFocus=\"TextBox_EPSG_LostKeyboardFocus\" TextChanged=\"TextBox_EPSG_TextChanged\" Height=\"28\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"2\"/>\r\n               <Label Content=\"{x:Static p:Resources.GeodeticDatum}\" Margin=\"20,222,0,0\" HorizontalAlignment=\"Left\" Width=\"307\" Height=\"28\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\"/>\r\n               <TextBox x:Name=\"TextBox_GeoDatum\" Margin=\"9,222,15,0\" TextWrapping=\"Wrap\" IsReadOnly=\"True\" BorderThickness=\"0\" Height=\"28\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"2\"/>\r\n               <Label Content=\"{x:Static p:Resources.Eastings}\" Margin=\"21,252,0,0\" Height=\"28\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" Width=\"306\" Grid.ColumnSpan=\"2\"/>\r\n               <TextBox x:Name=\"TextBox_Eastings\" Margin=\"10,252,15,0\" TextWrapping=\"Wrap\" IsReadOnly=\"True\" BorderThickness=\"0\" Height=\"28\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"2\"/>\r\n               <Label Content=\"{x:Static p:Resources.Northings}\" Margin=\"21,282,0,0\" Height=\"28\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" Width=\"306\" Grid.ColumnSpan=\"2\"/>\r\n               <TextBox x:Name=\"TextBox_Northings\" Margin=\"10,283,15,0\" TextWrapping=\"Wrap\" IsReadOnly=\"True\" BorderThickness=\"0\" Height=\"28\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"2\"/>\r\n               <Label Content=\"{x:Static p:Resources.ProjectSite}\" Margin=\"10,15,0,0\" x:Name=\"Label_ProjectSites\" RenderTransformOrigin=\"0.738,0.586\" HorizontalAlignment=\"Left\" Width=\"275\" Height=\"26\" VerticalAlignment=\"Top\" IsEnabled=\"False\" Foreground=\"Black\" Grid.ColumnSpan=\"2\"/>\r\n               <ComboBox Margin=\"10,15,10,0\" x:Name=\"comboBoxProjectSite\" SelectionChanged=\"comboBoxProjectSite_SelectionChanged\" Height=\"23\" VerticalAlignment=\"Top\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\"/>\r\n               <Label x:Name=\"Label_RefElevation\" Content=\"{x:Static p:Resources.Elevation}\" Margin=\"21,312,0,0\" Height=\"28\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" Width=\"306\" Grid.ColumnSpan=\"2\"/>\r\n               <TextBox x:Name=\"TextBox_RefElevation\" Margin=\"10,312,15,0\" TextWrapping=\"Wrap\" IsReadOnly=\"True\" BorderThickness=\"0\" Height=\"28\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"2\"/>\r\n               <Label x:Name=\"Label_AngleFromNorth\" Content=\"{x:Static p:Resources.AngleTrueNorth}\" Margin=\"21,342,0,0\" Height=\"28\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" Width=\"306\" Grid.ColumnSpan=\"2\"/>\r\n               <TextBox x:Name=\"TextBox_AngleFromTN\" Margin=\"10,342,15,0\" TextWrapping=\"Wrap\" IsReadOnly=\"True\" BorderThickness=\"0\" Height=\"28\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"2\"/>\r\n               <StackPanel Grid.Column=\"2\" Margin=\"0,0,9.562,19\" Orientation=\"Horizontal\" Height=\"26\" VerticalAlignment=\"Bottom\" HorizontalAlignment=\"Right\" Width=\"237\" >\r\n                  <Button x:Name=\"Button_CRSOverride\" Content=\"{x:Static p:Resources.Override}\" Click=\"Button_CRSOverride_Click\" HorizontalAlignment=\"Stretch\" Padding=\"10,0,10,0\" Margin=\"0,0,10,0\" Height=\"23\" VerticalAlignment=\"Bottom\" MinWidth=\"100\"/>\r\n                  <Button x:Name=\"Button_CRSReset\" Content=\"{x:Static p:Resources.Reset}\" ToolTip=\"{x:Static p:Resources.ResetOverrideToolTip}\" Click=\"Button_CRSReset_Click\" HorizontalAlignment=\"Stretch\" Padding=\"10,0,10,0\" Margin=\"0,0,0,0\"  Height=\"23\" VerticalAlignment=\"Bottom\" MinWidth=\"100\"/>\r\n               </StackPanel>\r\n            </Grid>\r\n         </TabItem>\r\n      </TabControl>\r\n      <StackPanel Margin=\"0,9\" Orientation=\"Horizontal\" HorizontalAlignment=\"Right\" Width=\"383\" Grid.Row=\"1\">\r\n         <Button Content=\"{x:Static p:Resources.ResetToOriginals}\" x:Name=\"button_ResetConfigurations\" ToolTip=\"{x:Static p:Resources.ResetConfigToolTip}\" VerticalAlignment=\"Bottom\" Height=\"23\" HorizontalAlignment=\"Stretch\" Padding=\"10,0,10,0\" Margin=\"0,0,50,0\" Click=\"button_ResetConfigurations_Click\" MinWidth=\"100\"/>\r\n         <Button Content=\"{x:Static p:Resources.OK}\" HorizontalAlignment=\"Stretch\" x:Name=\"buttonOK\" Padding=\"20,0,20,0\" Margin=\"0,0,10,0\" Click=\"buttonOK_Click\" RenderTransformOrigin=\"1.16,0.409\" Height=\"23\" VerticalAlignment=\"Bottom\" MinWidth=\"100\" />\r\n         <Button Content=\"{x:Static p:Resources.Cancel}\" HorizontalAlignment=\"Stretch\" x:Name=\"buttonCancel\" Padding=\"10,0,10,0\" Margin=\"0,0,10,0\" Click=\"buttonCancel_Click\" Height=\"23\" VerticalAlignment=\"Bottom\" MinWidth=\"100\" />\r\n      </StackPanel>\r\n      <ListBox Margin=\"8,11,704,3\" Name=\"listBoxConfigurations\" SelectionChanged=\"listBoxConfigurations_SelectionChanged\" />\r\n      <Button Height=\"23\" HorizontalAlignment=\"Left\" Margin=\"13,7,0,0\" Name=\"buttonNewSetup\" VerticalAlignment=\"Top\" Width=\"25\" Click=\"buttonNewSetup_Click\" ToolTip=\"{x:Static p:Resources.CreateNewSetup}\" BorderThickness=\"0\" Background=\"Transparent\" Style=\"{StaticResource {x:Static ToolBar.ButtonStyleKey}}\" Grid.Row=\"1\">\r\n         <Image HorizontalAlignment=\"Stretch\" Name=\"image1\" Stretch=\"Fill\" VerticalAlignment=\"Stretch\" Source=\"icons/create.ico\" Width=\"16\" Height=\"16\" />\r\n      </Button>\r\n      <Button Height=\"23\" HorizontalAlignment=\"Left\" Margin=\"43,7,0,0\" Name=\"buttonDuplicateSetup\" VerticalAlignment=\"Top\" Width=\"25\" Click=\"buttonDuplicateSetup_Click\" ToolTip=\"{x:Static p:Resources.CloneSetup}\" BorderThickness=\"0\" Background=\"Transparent\" Style=\"{StaticResource {x:Static ToolBar.ButtonStyleKey}}\" Grid.Row=\"1\">\r\n         <Image HorizontalAlignment=\"Stretch\" Name=\"image2\" Stretch=\"Fill\" VerticalAlignment=\"Stretch\" Source=\"icons/duplicate_ico.ico\" Width=\"16\" Height=\"16\"/>\r\n      </Button>\r\n      <Button Height=\"23\" HorizontalAlignment=\"Left\" Margin=\"73,7,0,0\" Name=\"buttonRenameSetup\" VerticalAlignment=\"Top\" Width=\"25\" Click=\"buttonRenameSetup_Click\" ToolTip=\"{x:Static p:Resources.RenameSelectedSetup}\" BorderThickness=\"0\" Background=\"Transparent\" Style=\"{StaticResource {x:Static ToolBar.ButtonStyleKey}}\" Grid.Row=\"1\">\r\n         <Image HorizontalAlignment=\"Stretch\" Name=\"image3\" Stretch=\"Fill\" VerticalAlignment=\"Stretch\" Source=\"icons/rename.ico\" Width=\"16\" Height=\"16\" />\r\n      </Button>\r\n      <Button Height=\"23\" HorizontalAlignment=\"Left\" Margin=\"103,7,0,0\" Name=\"buttonDeleteSetup\" VerticalAlignment=\"Top\" Width=\"25\" Click=\"buttonDeleteSetup_Click\" ToolTip=\"{x:Static p:Resources.DeleteSelectedSetup}\" BorderThickness=\"0\" Background=\"Transparent\" Style=\"{StaticResource {x:Static ToolBar.ButtonStyleKey}}\" Grid.Row=\"1\">\r\n         <Image HorizontalAlignment=\"Stretch\" Name=\"image4\" Stretch=\"Fill\" VerticalAlignment=\"Stretch\" Source=\"icons/delete.ico\" Width=\"16\" Height=\"16\" RenderTransformOrigin=\"0.5,0.688\" />\r\n      </Button>\r\n      <Button Height=\"23\" HorizontalAlignment=\"Left\" Margin=\"133,7,0,0\" Name=\"buttonLoadSetup\" VerticalAlignment=\"Top\" Width=\"25\" Click=\"buttonLoadSetup_Click\" ToolTip=\"{x:Static p:Resources.LoadSetup}\" BorderThickness=\"0\" Background=\"Transparent\" Style=\"{StaticResource {x:Static ToolBar.ButtonStyleKey}}\" Grid.Row=\"1\">\r\n         <Image HorizontalAlignment=\"Stretch\" Name=\"image6\" Stretch=\"Fill\" VerticalAlignment=\"Stretch\" Source=\"icons/load.ico\" Width=\"16\" Height=\"16\" RenderTransformOrigin=\"0.5,0.688\" />\r\n      </Button>\r\n      <Button Height=\"23\" HorizontalAlignment=\"Left\" Margin=\"164,7,0,0\" Name=\"buttonSaveSetup\" VerticalAlignment=\"Top\" Width=\"25\" Click=\"buttonSaveSetup_Click\" ToolTip=\"{x:Static p:Resources.ExportSelectedSetup}\" BorderThickness=\"0\" Background=\"Transparent\" Style=\"{StaticResource {x:Static ToolBar.ButtonStyleKey}}\" Grid.Row=\"1\">\r\n         <Image HorizontalAlignment=\"Stretch\" Name=\"image5\" Stretch=\"Fill\" VerticalAlignment=\"Stretch\" Source=\"icons/save.ico\" Width=\"16\" Height=\"16\" RenderTransformOrigin=\"0.5,0.688\" />\r\n      </Button>\r\n   </Grid>\r\n</auiw:ChildWindow>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCExporterUIWindow.xaml.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.UI;\r\nusing Autodesk.UI.Windows;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\nusing System;\r\nusing System.IO;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing UserInterfaceUtility.Json;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Extensions;\r\nusing Newtonsoft.Json;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// The IFC export UI options window.\r\n   /// </summary>\r\n   public partial class IFCExporterUIWindow : ChildWindow\r\n   {\r\n      // This is intended to be a placeholder for treeView_FilterElement XAML code that isn't ready for release.\r\n      // The code will populate this but the user will have no control.\r\n      static TreeView treeView_FilterElement = new TreeView();\r\n\r\n      /// <summary>\r\n      /// The map contains the configurations.\r\n      /// </summary>\r\n      IFCExportConfigurationsMap m_configurationsMap;\r\n\r\n      IDictionary<string, ProjectLocation> m_SiteLocations = new Dictionary<string, ProjectLocation>();\r\n      IList<string> m_SiteNames = new List<string>();\r\n\r\n      IDictionary<string, TreeViewItem> m_TreeViewItemDict = new Dictionary<string, TreeViewItem>();\r\n\r\n      /// <summary>\r\n      /// Constructs a new IFC export options window.\r\n      /// </summary>\r\n      /// <param name=\"exportOptions\">The export options that will be populated by settings in the window.</param>\r\n      /// <param name=\"currentViewId\">The Revit current view id.</param>\r\n      public IFCExporterUIWindow(IFCExportConfigurationsMap configurationsMap, String currentConfigName)\r\n      {\r\n         InitializeComponent();\r\n         m_configurationsMap = configurationsMap;\r\n         Document doc = IFCExport.TheDocument;\r\n         foreach (ProjectLocation pLoc in doc.ProjectLocations.Cast<ProjectLocation>().ToList())\r\n         {\r\n            // There seem to be a possibility that the Site Locations can have the same name (UI does not allow it though)\r\n            // In this case, it will skip the duplicate since there is no way for this to know which one is exactly selected\r\n            if (!m_SiteLocations.ContainsKey(pLoc.Name))\r\n            {\r\n               m_SiteNames.Add(pLoc.Name);\r\n               m_SiteLocations.Add(pLoc.Name, pLoc);\r\n            }\r\n         }\r\n         comboBoxProjectSite.ItemsSource = m_SiteNames;\r\n\r\n         ResetToOriginalConfigSettings(currentConfigName);\r\n\r\n         InitParameterMappingUI();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds new Parameter Mapping Tab\r\n      /// </summary>\r\n      private void InitParameterMappingUI()\r\n      {\r\n         if (!OptionsUtil.UseLegacyParameterMapping())\r\n         {\r\n            PropertySets.Visibility = System.Windows.Visibility.Collapsed;\r\n            classificationButton.Visibility = System.Windows.Visibility.Hidden;\r\n            checkBoxExportSpecificSchedules.Visibility = System.Windows.Visibility.Hidden;\r\n            checkboxUseTypePropertiesInInstacePSets.Visibility = System.Windows.Visibility.Hidden;\r\n\r\n            // TODO: Revisit layout adjustments once legacy mapping support is removed.\r\n            UpdateMargin(checkboxExportUserDefinedPset, 29);\r\n            UpdateMargin(userDefinedPropertySetFileName, 50);\r\n            UpdateMargin(buttonBrowse, 50);\r\n         }\r\n         else\r\n         {\r\n            PropertySets.Visibility = System.Windows.Visibility.Visible;\r\n            labelPropertyMappingSetups.Visibility = System.Windows.Visibility.Hidden;\r\n            comboBoxPropertyMappingSetups.Visibility = System.Windows.Visibility.Hidden;\r\n            buttonPropertyMappingSetups.Visibility = System.Windows.Visibility.Hidden;\r\n\r\n            // Adjust layout to account for hidden parameter mapping controls in legacy mode.\r\n            double topMarginValue = 31;\r\n            UpdateMargin(labelFileType, topMarginValue);\r\n            UpdateMargin(comboboxFileType, topMarginValue);\r\n            UpdateMargin(labelPhaseToExport, topMarginValue);\r\n            UpdateMargin(comboboxActivePhase, topMarginValue);\r\n            UpdateMargin(labelSpaceBoundaries, topMarginValue);\r\n            UpdateMargin(comboboxSpaceBoundaries, topMarginValue);\r\n            UpdateMargin(labelFacilityType, topMarginValue);\r\n            UpdateMargin(comboBoxFacilityType, topMarginValue);\r\n            UpdateMargin(labelFacilityPredefinedType, topMarginValue);\r\n            UpdateMargin(comboBoxFacilityPredefinedType, topMarginValue);\r\n            UpdateMargin(checkboxSplitWalls, topMarginValue);\r\n\r\n            // TODO: Rename classification_Button to classificationButton when legacy UI is retired.\r\n            classification_Button.Visibility = System.Windows.Visibility.Hidden;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Change Top value for Margin\r\n      /// </summary>\r\n      /// <param name=\"currentConfigName\">The current selected configuration</param>\r\n      private void UpdateMargin(FrameworkElement userControl, double topMarginValue)\r\n      {\r\n         Thickness controlMargin = userControl.Margin;\r\n         controlMargin.Top -= topMarginValue;\r\n         userControl.Margin = controlMargin;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Reset the configuration settings back to the original settings\r\n      /// </summary>\r\n      /// <param name=\"currentConfigName\">The current selected configuration</param>\r\n      public void ResetToOriginalConfigSettings(string currentConfigName)\r\n      {\r\n         InitializeConfigurationList(currentConfigName);\r\n\r\n         IFCExportConfiguration originalConfiguration = m_configurationsMap[currentConfigName];\r\n         InitializeConfigurationOptions();\r\n         if (IFCExport.LastSelectedConfig.ContainsKey(originalConfiguration.Name))\r\n         {\r\n            IFCExportConfiguration selectedConfig = IFCExport.LastSelectedConfig[originalConfiguration.Name];\r\n            UpdateActiveConfigurationOptions(selectedConfig);\r\n            SetupGeoReferenceInfo(selectedConfig);\r\n         }\r\n         else\r\n         {\r\n            IFCExport.LastSelectedConfig.Add(originalConfiguration.Name, originalConfiguration);\r\n            originalConfiguration.SelectedSite = IFCExport.TheDocument.ActiveProjectLocation.Name;\r\n            UpdateActiveConfigurationOptions(originalConfiguration);\r\n            GetGeoReferenceInfo(originalConfiguration);\r\n         }\r\n      }\r\n\r\n      private void GetGeoReferenceInfo(IFCExportConfiguration configuration, string newEPSGCode = \"\", SiteLocation siteLoc = null)\r\n      {\r\n         // if the SiteLocation is not specified, default will be taken from the Document, which will be the default/current Site\r\n         Document doc = IFCExport.TheDocument;\r\n         if (siteLoc == null)\r\n            siteLoc = doc.SiteLocation;\r\n\r\n         var crsInfoNull = ValueTuple.Create<string, string, string, string, string>(null, null, null, null, null);\r\n         (string projectedCRSName, string projectedCRSDesc, string epsgCode, string geodeticDatum, string uom) crsInfo =\r\n               OptionsUtil.GetEPSGCodeFromGeoCoordDef(siteLoc);\r\n         if (!crsInfo.Equals(crsInfoNull))\r\n         {\r\n            if (!string.IsNullOrWhiteSpace(crsInfo.projectedCRSName))\r\n               configuration.GeoRefCRSName = crsInfo.projectedCRSName;\r\n            if (!string.IsNullOrWhiteSpace(crsInfo.projectedCRSDesc))\r\n               configuration.GeoRefCRSDesc = crsInfo.projectedCRSDesc;\r\n            if (!string.IsNullOrWhiteSpace(crsInfo.geodeticDatum))\r\n               configuration.GeoRefGeodeticDatum = crsInfo.geodeticDatum;\r\n            if (!string.IsNullOrWhiteSpace(crsInfo.uom))\r\n               configuration.GeoRefMapUnit = crsInfo.uom;\r\n            if (!string.IsNullOrWhiteSpace(crsInfo.epsgCode))\r\n            {\r\n               configuration.GeoRefEPSGCode = crsInfo.epsgCode;\r\n            }\r\n            else\r\n            {\r\n               configuration.GeoRefEPSGCode = newEPSGCode;\r\n            }\r\n         }\r\n\r\n         SetupGeoReferenceInfo(configuration);\r\n      }\r\n\r\n      private void SetupGeoReferenceInfo(IFCExportConfiguration configuration)\r\n      {\r\n         if (OptionsUtil.PreIFC4Version(configuration.IFCVersion))\r\n         {\r\n            TextBox_CRSName.Text = \"\";\r\n            TextBox_CRSDesc.Text = \"\";\r\n            TextBox_EPSG.Text = \"\";\r\n            TextBox_EPSG.IsEnabled = false;\r\n            TextBox_GeoDatum.Text = \"\";\r\n         }\r\n         else\r\n         {\r\n            TextBox_CRSName.Text = configuration.GeoRefCRSName;\r\n            TextBox_CRSDesc.Text = configuration.GeoRefCRSDesc;\r\n            TextBox_EPSG.Text = configuration.GeoRefEPSGCode;\r\n            TextBox_EPSG.IsEnabled = true;\r\n            TextBox_GeoDatum.Text = configuration.GeoRefGeodeticDatum;\r\n         }\r\n\r\n         SetupEastingsNorthings(configuration);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes the listbox by filling the available configurations from the map.\r\n      /// </summary>\r\n      /// <param name=\"currentConfigName\">The current configuration name.</param>\r\n      private void InitializeConfigurationList(String currentConfigName)\r\n      {\r\n         foreach (IFCExportConfiguration configuration in m_configurationsMap.Values)\r\n         {\r\n            configuration.Name = configuration.Name;\r\n            listBoxConfigurations.Items.Add(configuration);\r\n            if (configuration.Name == currentConfigName)\r\n               listBoxConfigurations.SelectedItem = configuration;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates and resets the listbox.\r\n      /// </summary>\r\n      /// <param name=\"currentConfigName\">The current configuration name.</param>\r\n      private void UpdateConfigurationsList(String currentConfigName)\r\n      {\r\n         listBoxConfigurations.Items.Clear();\r\n         InitializeConfigurationList(currentConfigName);\r\n      }\r\n\r\n      private void InitComboBoxCategoryMapping(Document document)\r\n      {\r\n         string originalSelectedItem = GetSelectedConfiguration()?.CategoryMapping;\r\n         if (string.IsNullOrEmpty(originalSelectedItem))\r\n            originalSelectedItem = (string)comboBoxCategoryMapping.SelectedItem;\r\n\r\n         comboBoxCategoryMapping.SelectedItem = null;\r\n         comboBoxCategoryMapping.Items.Clear();\r\n\r\n         comboBoxCategoryMapping.Items.Add(Properties.Resources.InSessionConfiguration);\r\n\r\n         IList<string> mappingList = IFCCategoryTemplate.ListNames(document);\r\n         if (mappingList != null)\r\n         {\r\n            foreach (string mappingName in mappingList)\r\n            {\r\n               comboBoxCategoryMapping.Items.Add(mappingName);\r\n            }\r\n         }\r\n\r\n         comboBoxCategoryMapping.SelectedItem = originalSelectedItem != null && comboBoxCategoryMapping.Items.Contains(originalSelectedItem) ?\r\n            originalSelectedItem : Properties.Resources.InSessionConfiguration;\r\n      }\r\n\r\n      private void UpdateComboBoxPropertyMappingSetups(Document document, IFCExportConfiguration configuration)\r\n      {\r\n         comboBoxPropertyMappingSetups.Items.Clear();\r\n         if (configuration.IsBuiltIn)\r\n         {\r\n            comboBoxCategoryMapping.IsEnabled = false;\r\n            comboBoxPropertyMappingSetups.Items.Add(Properties.Resources.IFCDefaultSetup);\r\n            string propertyMapping = Properties.Resources.IFCDefaultSetup;\r\n            comboBoxPropertyMappingSetups.SelectedItem = propertyMapping;\r\n         }\r\n         else\r\n         {\r\n            comboBoxPropertyMappingSetups.Items.Clear();\r\n            comboBoxPropertyMappingSetups.Items.Add(Properties.Resources.InSessionConfiguration);\r\n\r\n            IList<string> mappingList = IFCParameterTemplate.ListNames(document);\r\n            foreach (string mappingName in mappingList ?? Enumerable.Empty<string>())\r\n            {\r\n               comboBoxPropertyMappingSetups.Items.Add(mappingName);\r\n            }\r\n\r\n            string selectedSetup = configuration.PropertyMapping;\r\n            comboBoxPropertyMappingSetups.SelectedItem = selectedSetup != null && comboBoxPropertyMappingSetups.Items.Contains(selectedSetup) ?\r\n               selectedSetup : Properties.Resources.InSessionConfiguration;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes the comboboxes via the configuration options.\r\n      /// </summary>\r\n      private void InitializeConfigurationOptions()\r\n      {\r\n         Document document = IFCExport.TheDocument;\r\n\r\n         if (!comboboxIfcType.HasItems)\r\n         {\r\n            comboboxIfcType.Items.Add(new IFCVersionAttributes(IFCVersion.IFC2x2));\r\n            comboboxIfcType.Items.Add(new IFCVersionAttributes(IFCVersion.IFC2x3));\r\n            comboboxIfcType.Items.Add(new IFCVersionAttributes(IFCVersion.IFC2x3CV2));\r\n            comboboxIfcType.Items.Add(new IFCVersionAttributes(IFCVersion.IFCCOBIE));\r\n            comboboxIfcType.Items.Add(new IFCVersionAttributes(IFCVersion.IFC2x3BFM));\r\n            comboboxIfcType.Items.Add(new IFCVersionAttributes(IFCVersion.IFC2x3FM));\r\n            comboboxIfcType.Items.Add(new IFCVersionAttributes(IFCVersion.IFC4RV));\r\n            comboboxIfcType.Items.Add(new IFCVersionAttributes(IFCVersion.IFC4DTV));\r\n            comboboxIfcType.Items.Add(new IFCVersionAttributes(IFCVersion.IFC4x3RV));\r\n            comboboxIfcType.Items.Add(new IFCVersionAttributes(IFCVersion.IFC4x3DTV));\r\n            comboboxIfcType.Items.Add(new IFCVersionAttributes(IFCVersion.IFCSG));\r\n\r\n            // \"Hidden\" switch to enable the general IFC4 export that does not use any MVD restriction\r\n            string nonMVDOption = Environment.GetEnvironmentVariable(\"AllowNonMVDOption\");\r\n            if (!string.IsNullOrEmpty(nonMVDOption) && nonMVDOption.Equals(\"true\", StringComparison.InvariantCultureIgnoreCase))\r\n               comboboxIfcType.Items.Add(new IFCVersionAttributes(IFCVersion.IFC4));\r\n         }\r\n\r\n         if (!comboboxFileType.HasItems)\r\n         {\r\n            foreach (IFCFileFormat fileType in Enum.GetValues(typeof(IFCFileFormat)))\r\n            {\r\n               IFCFileFormatAttributes item = new IFCFileFormatAttributes(fileType);\r\n               comboboxFileType.Items.Add(item);\r\n            }\r\n         }\r\n\r\n         if (!comboboxSpaceBoundaries.HasItems)\r\n         {\r\n            for (int level = 0; level <= 2; level++)\r\n            {\r\n               IFCSpaceBoundariesAttributes item = new IFCSpaceBoundariesAttributes(level);\r\n               comboboxSpaceBoundaries.Items.Add(item);\r\n            }\r\n         }\r\n\r\n         if (!comboboxActivePhase.HasItems)\r\n         {\r\n            PhaseArray phaseArray = document.Phases; \r\n            comboboxActivePhase.Items.Add(new IFCPhaseAttributes(ElementId.InvalidElementId, IFCCommandOverrideApplication.TheDocument));  // Default.\r\n            foreach (Phase phase in phaseArray)\r\n            {\r\n               comboboxActivePhase.Items.Add(new IFCPhaseAttributes(phase.Id, IFCCommandOverrideApplication.TheDocument));\r\n            }\r\n         }\r\n\r\n         // Initialize level of detail combo box\r\n         if (!comboBoxLOD.HasItems)\r\n         {\r\n            comboBoxLOD.Items.Add(Properties.Resources.DetailLevelExtraLow);\r\n            comboBoxLOD.Items.Add(Properties.Resources.DetailLevelLow);\r\n            comboBoxLOD.Items.Add(Properties.Resources.DetailLevelMedium);\r\n            comboBoxLOD.Items.Add(Properties.Resources.DetailLevelHigh);\r\n         }\r\n\r\n         if (!comboBoxProjectSite.HasItems)\r\n         {\r\n            foreach (ProjectLocation pLoc in document.ProjectLocations.Cast<ProjectLocation>().ToList())\r\n            {\r\n               // There seem to be a possibility that the Site Locations can have the same name (UI does not allow it though)\r\n               // In this case, it will skip the duplicate since there is no way for this to know which one is exactly selected\r\n               if (!m_SiteLocations.ContainsKey(pLoc.Name))\r\n               {\r\n                  m_SiteNames.Add(pLoc.Name);\r\n                  m_SiteLocations.Add(pLoc.Name, pLoc);\r\n               }\r\n            }\r\n            comboBoxProjectSite.ItemsSource = m_SiteNames;\r\n         }\r\n\r\n         if (!comboBoxSitePlacement.HasItems)\r\n         {\r\n            comboBoxSitePlacement.Items.Add(new IFCSitePlacementAttributes(SiteTransformBasis.Shared));\r\n            comboBoxSitePlacement.Items.Add(new IFCSitePlacementAttributes(SiteTransformBasis.Site));\r\n            comboBoxSitePlacement.Items.Add(new IFCSitePlacementAttributes(SiteTransformBasis.Project));\r\n            comboBoxSitePlacement.Items.Add(new IFCSitePlacementAttributes(SiteTransformBasis.Internal));\r\n            comboBoxSitePlacement.Items.Add(new IFCSitePlacementAttributes(SiteTransformBasis.ProjectInTN));\r\n            comboBoxSitePlacement.Items.Add(new IFCSitePlacementAttributes(SiteTransformBasis.InternalInTN));\r\n         }\r\n\r\n         if (!comboboxLinkedFiles.HasItems)\r\n         {\r\n            comboboxLinkedFiles.Items.Add(new IFCLinkedFileExportAs(LinkedFileExportAs.DontExport));\r\n            comboboxLinkedFiles.Items.Add(new IFCLinkedFileExportAs(LinkedFileExportAs.ExportAsSeparate));\r\n            comboboxLinkedFiles.Items.Add(new IFCLinkedFileExportAs(LinkedFileExportAs.ExportSameProject));\r\n            comboboxLinkedFiles.Items.Add(new IFCLinkedFileExportAs(LinkedFileExportAs.ExportSameSite));\r\n         }\r\n\r\n         if (!comboBoxCategoryMapping.HasItems)\r\n         {\r\n            InitComboBoxCategoryMapping(document);\r\n         }\r\n      }\r\n\r\n      private void UpdatePhaseAttributes(IFCExportConfiguration configuration)\r\n      {\r\n         if (configuration.VisibleElementsOfCurrentView)\r\n         {\r\n            UIDocument uiDoc = new UIDocument(IFCExport.TheDocument);\r\n            Parameter currPhase = uiDoc.ActiveView.get_Parameter(BuiltInParameter.VIEW_PHASE);\r\n            if (currPhase != null)\r\n               configuration.ActivePhaseId = currPhase.AsElementId().Value;\r\n            else\r\n               configuration.ActivePhaseId = ElementId.InvalidElementId.Value;\r\n         }\r\n\r\n         if (!IFCPhaseAttributes.Validate(configuration.ActivePhaseId, IFCCommandOverrideApplication.TheDocument))\r\n            configuration.ActivePhaseId = ElementId.InvalidElementId.Value;\r\n\r\n         foreach (IFCPhaseAttributes attribute in comboboxActivePhase.Items.Cast<IFCPhaseAttributes>())\r\n         {\r\n            if (configuration.ActivePhaseId == attribute.PhaseId.Value)\r\n            {\r\n               comboboxActivePhase.SelectedItem = attribute;\r\n               break;\r\n            }\r\n         }\r\n\r\n         comboboxActivePhase.IsEnabled = !configuration.VisibleElementsOfCurrentView;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the active configuration options to the controls.\r\n      /// </summary>\r\n      /// <param name=\"configuration\">The active configuration.</param>\r\n      private void UpdateActiveConfigurationOptions(IFCExportConfiguration configuration)\r\n      {\r\n         foreach (IFCVersionAttributes attribute in comboboxIfcType.Items.Cast<IFCVersionAttributes>())\r\n         {\r\n            if (attribute.Version == configuration.IFCVersion)\r\n            {\r\n               comboboxIfcType.SelectedItem = attribute;\r\n               break;\r\n            }\r\n         }\r\n\r\n         UpdateExchangeRequirement(configuration);\r\n\r\n         UpdateFacilityType(configuration);\r\n\r\n         foreach (IFCFileFormatAttributes format in comboboxFileType.Items.Cast<IFCFileFormatAttributes>())\r\n         {\r\n            if (configuration.IFCFileType == format.FileType)\r\n            {\r\n               comboboxFileType.SelectedItem = format;\r\n               break;\r\n            }\r\n         }\r\n\r\n         foreach (IFCSpaceBoundariesAttributes attribute in comboboxSpaceBoundaries.Items.Cast<IFCSpaceBoundariesAttributes>())\r\n         {\r\n            if (configuration.SpaceBoundaries == attribute.Level)\r\n            {\r\n               comboboxSpaceBoundaries.SelectedItem = attribute;\r\n               break;\r\n            }\r\n         }\r\n\r\n         foreach (IFCLinkedFileExportAs attribute in comboboxLinkedFiles.Items.Cast<IFCLinkedFileExportAs>())\r\n         {\r\n            if (configuration.ExportLinkedFiles == attribute.ExportAs)\r\n            {\r\n               comboboxLinkedFiles.SelectedItem = attribute.ToString();\r\n               break;\r\n            }\r\n         }\r\n\r\n         ProjectLocation projectLocation = null;\r\n         if (!string.IsNullOrEmpty(configuration.SelectedSite))\r\n            m_SiteLocations.TryGetValue(configuration.SelectedSite, out projectLocation);\r\n\r\n         if (string.IsNullOrEmpty(configuration.SelectedSite) || projectLocation == null)\r\n            configuration.SelectedSite = IFCExport.TheDocument.ActiveProjectLocation.Name;\r\n\r\n         comboBoxProjectSite.SelectedItem = configuration.SelectedSite;\r\n\r\n         foreach (IFCSitePlacementAttributes attribute in comboBoxSitePlacement.Items.Cast<IFCSitePlacementAttributes>())\r\n         {\r\n            if (configuration.SitePlacement == attribute.TransformBasis)\r\n            {\r\n               comboBoxSitePlacement.SelectedItem = attribute.ToString();\r\n               break;\r\n            }\r\n         }\r\n\r\n         string categoryMapping = configuration.CategoryMapping ?? Properties.Resources.InSessionConfiguration;\r\n         comboBoxCategoryMapping.SelectedItem = categoryMapping;\r\n\r\n         UpdateComboBoxPropertyMappingSetups(IFCExport.TheDocument, configuration);\r\n        \r\n         UpdatePhaseAttributes(configuration);\r\n         checkboxIFCCommonPropertySets.IsChecked = configuration.ExportIFCCommonPropertySets;\r\n         checkboxInternalPropertySets.IsChecked = configuration.ExportInternalRevitPropertySets;\r\n         checkboxExportBaseQuantities.IsChecked = configuration.ExportBaseQuantities;\r\n         checkboxExportMaterialPsets.IsChecked = configuration.ExportMaterialPsets;\r\n         checkboxExportSchedulesAsPsets.IsChecked = configuration.ExportSchedulesAsPsets;\r\n         checkboxExportUserDefinedPset.IsChecked = configuration.ExportUserDefinedPsets;\r\n         checkboxSplitWalls.IsChecked = configuration.SplitWallsAndColumns;\r\n         checkbox2dElements.IsChecked = configuration.Export2DElements;\r\n         checkboxExportCeilingGrids.IsChecked = configuration.ExportCeilingGrids;\r\n         checkboxVisibleElementsCurrView.IsChecked = configuration.VisibleElementsOfCurrentView;\r\n         checkBoxUse2DRoomVolumes.IsChecked = configuration.Use2DRoomBoundaryForVolume;\r\n         checkBoxFamilyAndTypeName.IsChecked = configuration.UseFamilyAndTypeNameForReference;\r\n         checkBoxExportPartsAsBuildingElements.IsChecked = configuration.ExportPartsAsBuildingElements;\r\n         checkBoxUseActiveViewGeometry.IsChecked = configuration.UseActiveViewGeometry;\r\n         checkboxExportBoundingBox.IsChecked = configuration.ExportBoundingBox;\r\n         checkboxExportSolidModelRep.IsChecked = configuration.ExportSolidModelRep;\r\n         checkBoxExportSpecificSchedules.IsChecked = configuration.ExportSpecificSchedules;\r\n         userDefinedPropertySetFileName.Text = configuration.ExportUserDefinedPsetsFileName;\r\n         checkboxUseTypePropertiesInInstacePSets.IsChecked = configuration.UseTypePropertiesInInstacePSets;\r\n         checkboxIncludeIfcSiteElevation.IsChecked = configuration.IncludeSiteElevation;\r\n         checkboxStoreIFCGUID.IsChecked = configuration.StoreIFCGUID;\r\n         checkBoxExportRoomsInView.IsChecked = configuration.ExportRoomsInView;\r\n         comboBoxLOD.SelectedIndex = (int)(Math.Round(configuration.TessellationLevelOfDetail * 4) - 1);\r\n         checkboxIncludeSteelElements.IsChecked = configuration.IncludeSteelElements;\r\n         comboBoxSitePlacement.SelectedIndex = (int)configuration.SitePlacement;\r\n         comboboxLinkedFiles.SelectedIndex = (int)configuration.ExportLinkedFiles;\r\n         if ((configuration.IFCVersion == IFCVersion.IFC4 || configuration.IFCVersion == IFCVersion.IFC4DTV || configuration.IFCVersion == IFCVersion.IFC4RV)\r\n            && !configuration.IsBuiltIn)\r\n            checkBox_TriangulationOnly.IsEnabled = true;\r\n         else\r\n            checkBox_TriangulationOnly.IsEnabled = false;\r\n         checkBox_TriangulationOnly.IsChecked = configuration.UseOnlyTriangulation;\r\n\r\n         checkbox_UseVisibleRevitNameAsEntityName.IsChecked = configuration.UseVisibleRevitNameAsEntityName;\r\n         checkbox_UseTypeNameOnly.IsChecked = configuration.UseTypeNameOnlyForIfcType;\r\n         userDefinedParameterMappingTable.Text = configuration.ExportUserDefinedParameterMappingFileName;\r\n         checkBoxExportUserDefinedParameterMapping.IsChecked = configuration.ExportUserDefinedParameterMapping;\r\n\r\n         checkbox_ExportHostAsSingleEntity.IsChecked = configuration.ExportHostAsSingleEntity;\r\n\r\n         checkbox_OwnerHistoryLastModified.IsChecked = configuration.OwnerHistoryLastModified;\r\n\r\n         checkbox_ExportBarsInUniformSetsAsSeparateIFCEntities.IsChecked = configuration.ExportBarsInUniformSetsAsSeparateIFCEntities;\r\n\r\n         // Keep old behavior where by default we looked for ParameterMappingTable.txt in the current directory if ExportUserDefinedParameterMappingFileName\r\n         // isn't set.\r\n         if (string.IsNullOrWhiteSpace(configuration.ExportUserDefinedParameterMappingFileName))\r\n         {\r\n            string pathName = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @\"\\ParameterMappingTable.txt\";\r\n            if (File.Exists(pathName))\r\n            {\r\n               checkBoxExportUserDefinedParameterMapping.IsChecked = true;\r\n               userDefinedParameterMappingTable.Text = configuration.ExportUserDefinedParameterMappingFileName;\r\n            }\r\n         }\r\n\r\n         UIElement[] configurationElements = new UIElement[]{comboboxIfcType,\r\n                                                                comboboxFileType,\r\n                                                                comboboxSpaceBoundaries,\r\n                                                                checkboxExportBaseQuantities,\r\n                                                                checkboxSplitWalls,\r\n                                                                checkbox2dElements,\r\n                                                                checkboxInternalPropertySets,\r\n                                                                checkboxIFCCommonPropertySets,\r\n                                                                checkboxVisibleElementsCurrView,\r\n                                                                checkBoxExportPartsAsBuildingElements,\r\n                                                                checkBoxUse2DRoomVolumes,\r\n                                                                checkBoxFamilyAndTypeName,\r\n                                                                checkboxExportBoundingBox,\r\n                                                                checkboxExportSolidModelRep,\r\n                                                                checkboxIncludeIfcSiteElevation,\r\n                                                                checkboxStoreIFCGUID,\r\n                                                                checkboxExportMaterialPsets,\r\n                                                                checkboxExportSchedulesAsPsets,\r\n                                                                checkBoxExportSpecificSchedules,\r\n                                                                checkBoxExportRoomsInView,\r\n                                                                checkBoxLevelOfDetails,\r\n                                                                comboboxActivePhase,\r\n                                                                checkboxExportUserDefinedPset,\r\n                                                                userDefinedPropertySetFileName,\r\n                                                                checkboxUseTypePropertiesInInstacePSets,\r\n                                                                checkBoxExportUserDefinedParameterMapping,\r\n                                                                userDefinedParameterMappingTable,\r\n                                                                buttonBrowse,\r\n                                                                buttonParameterMappingBrowse,\r\n                                                                comboBoxLOD,\r\n                                                                checkBoxUseActiveViewGeometry,\r\n                                                                checkBoxExportSpecificSchedules,\r\n                                                                checkBox_TriangulationOnly,\r\n                                                                checkbox_UseTypeNameOnly,\r\n                                                                checkbox_UseVisibleRevitNameAsEntityName,\r\n                                                                checkbox_ExportHostAsSingleEntity,\r\n                                                                checkbox_OwnerHistoryLastModified,\r\n                                                                checkbox_ExportBarsInUniformSetsAsSeparateIFCEntities,\r\n                                                                comboBoxCategoryMapping,\r\n                                                                comboBoxPropertyMappingSetups,\r\n                                                                buttonCategoryMapping\r\n            };\r\n\r\n         foreach (UIElement element in configurationElements)\r\n         {\r\n            element.IsEnabled = !configuration.IsBuiltIn;\r\n         }\r\n         comboboxActivePhase.IsEnabled = comboboxActivePhase.IsEnabled && !configuration.VisibleElementsOfCurrentView;\r\n         checkboxUseTypePropertiesInInstacePSets.IsEnabled = checkboxUseTypePropertiesInInstacePSets.IsEnabled && configuration.ExportUserDefinedPsets;\r\n         userDefinedPropertySetFileName.IsEnabled = userDefinedPropertySetFileName.IsEnabled && configuration.ExportUserDefinedPsets;\r\n         userDefinedParameterMappingTable.IsEnabled = userDefinedParameterMappingTable.IsEnabled && configuration.ExportUserDefinedParameterMapping;\r\n         buttonBrowse.IsEnabled = buttonBrowse.IsEnabled && configuration.ExportUserDefinedPsets;\r\n         buttonParameterMappingBrowse.IsEnabled = buttonParameterMappingBrowse.IsEnabled && configuration.ExportUserDefinedParameterMapping;\r\n         \r\n         // ExportRoomsInView option will only be enabled if it is not currently disabled AND the \"export elements visible in view\" option is checked\r\n         bool? cboVisibleElementInCurrentView = checkboxVisibleElementsCurrView.IsChecked;\r\n         checkBoxExportRoomsInView.IsEnabled = checkBoxExportRoomsInView.IsEnabled && cboVisibleElementInCurrentView.HasValue ? cboVisibleElementInCurrentView.Value : false;\r\n         bool? triangulationOnly = checkBox_TriangulationOnly.IsChecked;\r\n\r\n         if ((configuration.IFCVersion == IFCVersion.IFC2x3) \r\n            || (configuration.IFCVersion == IFCVersion.IFCCOBIE) \r\n            || (configuration.IFCVersion == IFCVersion.IFC2x3FM) \r\n            || (configuration.IFCVersion == IFCVersion.IFC2x3BFM) \r\n            || (configuration.IFCVersion == IFCVersion.IFC2x3CV2)\r\n            || (configuration.IFCVersion == IFCVersion.IFC4RV)\r\n            || (configuration.IFCVersion == IFCVersion.IFC4DTV)\r\n            || (configuration.IFCVersion == IFCVersion.IFC4x3)\r\n            || (configuration.IFCVersion == IFCVersion.IFC4x3RV)\r\n            || (configuration.IFCVersion == IFCVersion.IFC4x3DTV))\r\n         {\r\n            checkboxIncludeSteelElements.IsChecked = configuration.IncludeSteelElements;\r\n            checkboxIncludeSteelElements.IsEnabled = true;\r\n         }\r\n         else\r\n         {\r\n            checkboxIncludeSteelElements.IsChecked = false;\r\n            checkboxIncludeSteelElements.IsEnabled = false;\r\n         }\r\n\r\n         checkbox_UseTypeNameOnly.IsChecked = configuration.UseTypeNameOnlyForIfcType;\r\n         checkbox_UseTypeNameOnly.IsEnabled = true;\r\n\r\n         checkbox_UseVisibleRevitNameAsEntityName.IsChecked = configuration.UseVisibleRevitNameAsEntityName;\r\n         checkbox_UseVisibleRevitNameAsEntityName.IsEnabled = true;\r\n\r\n         checkbox_ExportHostAsSingleEntity.IsChecked = configuration.ExportHostAsSingleEntity;\r\n         checkbox_ExportHostAsSingleEntity.IsEnabled = true;\r\n\r\n         checkbox_OwnerHistoryLastModified.IsChecked = configuration.OwnerHistoryLastModified;\r\n         checkbox_OwnerHistoryLastModified.IsEnabled = true;\r\n\r\n         checkbox_ExportBarsInUniformSetsAsSeparateIFCEntities.IsChecked = configuration.ExportBarsInUniformSetsAsSeparateIFCEntities;\r\n         checkbox_ExportBarsInUniformSetsAsSeparateIFCEntities.IsEnabled = true;\r\n\r\n         if (configuration.IFCVersion.Equals(IFCVersion.IFC2x3FM))\r\n         {\r\n            DoCOBieSpecificSetup(configuration);\r\n         }\r\n         else\r\n         {\r\n            // Possibly we need to remove the additional COBie specific setup\r\n            UndoCOBieSpecificSetup(configuration);\r\n         }\r\n      }\r\n\r\n      TabItem companyInfoItem;\r\n      TabItem projectInfoItem;\r\n\r\n      private void DoCOBieSpecificSetup(IFCExportConfiguration config)\r\n      {\r\n         if (companyInfoItem == null || !tabControl.Items.Contains(companyInfoItem))\r\n         {\r\n            // Add CompanyInfo tab\r\n            companyInfoItem = new TabItem();\r\n            companyInfoItem.Header = Properties.Resources.CompanyInfo;\r\n            companyInfoItem.Content = new COBieCompanyInfoTab(config.COBieCompanyInfo);\r\n            companyInfoItem.Unloaded += COBieCompanyInfoUnloaded;\r\n            companyInfoItem.LostFocus += COBieCompanyInfoLostFocus;\r\n            tabControl.Items.Add(companyInfoItem);\r\n         }\r\n\r\n         if (projectInfoItem == null || !tabControl.Items.Contains(projectInfoItem))\r\n         {\r\n            // Add ProjectInfo tab\r\n            projectInfoItem = new TabItem();\r\n            projectInfoItem.Header = Properties.Resources.ProjectInfo;\r\n            projectInfoItem.Content = new COBieProjectInfoTab(config.COBieProjectInfo);\r\n            projectInfoItem.Unloaded += COBieProjectInfoUnloaded;\r\n            projectInfoItem.LostFocus += COBieProjectInfoLostFocus;\r\n            tabControl.Items.Add(projectInfoItem);\r\n         }\r\n      }\r\n\r\n      private void UndoCOBieSpecificSetup(IFCExportConfiguration config)\r\n      {\r\n         // Remove the COBie specific tabs\r\n         if (companyInfoItem != null)\r\n         {\r\n            tabControl.Items.Remove(companyInfoItem);\r\n            companyInfoItem = null;\r\n         }\r\n         if (projectInfoItem != null)\r\n         {\r\n            tabControl.Items.Remove(projectInfoItem);\r\n            projectInfoItem = null;\r\n         }\r\n      }\r\n\r\n      void COBieCompanyInfoUnloaded(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration.COBieCompanyInfo != null)\r\n         {\r\n            TabItem tItem = sender as TabItem;\r\n            if (tItem != null)\r\n            {\r\n               configuration.COBieCompanyInfo = (tItem.Content as COBieCompanyInfoTab).CompanyInfoStr;\r\n\r\n            }\r\n         }\r\n      }\r\n\r\n      void COBieCompanyInfoLostFocus(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         configuration.COBieCompanyInfo = (companyInfoItem.Content as COBieCompanyInfoTab).CompanyInfoStr;\r\n      }\r\n\r\n      void COBieProjectInfoUnloaded(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration.COBieProjectInfo != null)\r\n         {\r\n            TabItem tItem = sender as TabItem;\r\n            if (tItem != null)\r\n               configuration.COBieProjectInfo = (tItem.Content as COBieProjectInfoTab).ProjectInfoStr;\r\n         }\r\n      }\r\n\r\n      void COBieProjectInfoLostFocus(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         configuration.COBieProjectInfo = (projectInfoItem.Content as COBieProjectInfoTab).ProjectInfoStr;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the controls.\r\n      /// </summary>\r\n      /// <param name=\"isBuiltIn\">Value of whether the configuration is builtIn or not.</param>\r\n      /// <param name=\"isInSession\">Value of whether the configuration is in-session or not.</param>\r\n      private void UpdateConfigurationControls(bool isBuiltIn, bool isInSession)\r\n      {\r\n         buttonDeleteSetup.IsEnabled = !isBuiltIn && !isInSession;\r\n         buttonRenameSetup.IsEnabled = !isBuiltIn && !isInSession;\r\n         buttonSaveSetup.IsEnabled = !isBuiltIn;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Helper method to convert CheckBox.IsChecked to usable bool.\r\n      /// </summary>\r\n      /// <param name=\"checkBox\">The check box.</param>\r\n      /// <returns>True if the box is checked, false if unchecked or uninitialized.</returns>\r\n      private bool GetCheckbuttonChecked(CheckBox checkBox)\r\n      {\r\n         if (checkBox.IsChecked.HasValue)\r\n            return checkBox.IsChecked.Value;\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Helper method to convert RadioButton.IsChecked to usable bool.\r\n      /// </summary>\r\n      /// <param name=\"checkBox\">The check box.</param>\r\n      /// <returns>True if the box is checked, false if unchecked or uninitialized.</returns>\r\n      private bool GetRadiobuttonChecked(RadioButton checkBox)\r\n      {\r\n         if (checkBox.IsChecked.HasValue)\r\n            return checkBox.IsChecked.Value;\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The OK button callback.\r\n      /// </summary>\r\n      /// <param name=\"sender\">Event sender.</param>\r\n      /// <param name=\"e\">Event args.</param>\r\n      private void buttonOK_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n\r\n         // close the window\r\n         DialogResult = true;\r\n\r\n         // Copy the contents of the text windows into the active configuration, if any.\r\n         if (configuration != null)\r\n         {\r\n            configuration.ExportUserDefinedPsetsFileName = userDefinedPropertySetFileName.Text;\r\n            configuration.ExportUserDefinedParameterMappingFileName = userDefinedParameterMappingTable.Text;\r\n            if (CRSOverride)\r\n            {\r\n               configuration.GeoRefEPSGCode = TextBox_EPSG.Text;\r\n               configuration.GeoRefCRSName = TextBox_CRSName.Text;\r\n               configuration.GeoRefCRSDesc = TextBox_CRSDesc.Text;\r\n               configuration.GeoRefGeodeticDatum = TextBox_GeoDatum.Text;\r\n            }\r\n            IFCExport.LastSelectedConfig[configuration.Name] = configuration;\r\n         }\r\n\r\n         Close();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Cancel button callback.\r\n      /// </summary>\r\n      /// <param name=\"sender\">Event sender.</param>\r\n      /// <param name=\"e\">Event args.</param>\r\n      private void buttonCancel_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         // close the window\r\n         DialogResult = false;\r\n         Close();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Remove a configuration from the listbox and the map.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void buttonDeleteSetup_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = (IFCExportConfiguration)listBoxConfigurations.SelectedItem;\r\n         m_configurationsMap.Remove(configuration.Name);\r\n         listBoxConfigurations.Items.Remove(configuration);\r\n         listBoxConfigurations.SelectedIndex = 0;\r\n         IFCExport.LastSelectedConfig.Remove(configuration.Name);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Generate the default directory where the export takes place\r\n      /// </summary>\r\n      private string GetDefaultDirectory()\r\n      {\r\n         // If the session has a previous path, open the File Dialog using the path available in the session\r\n         string exportPath = IFCCommandOverrideApplication.MruExportPath != null ? IFCCommandOverrideApplication.MruExportPath : null;\r\n\r\n         // For the file dialog check if the path exists or not\r\n         String defaultDirectory = exportPath != null ? exportPath : null;\r\n\r\n         if ((defaultDirectory == null) || (!System.IO.Directory.Exists(defaultDirectory)))\r\n            defaultDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);\r\n\r\n         return defaultDirectory;\r\n      }\r\n\r\n      private void buttonSaveSetup_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = (IFCExportConfiguration)listBoxConfigurations.SelectedItem;\r\n         if (configuration.IsBuiltIn)\r\n         {\r\n            // This shouldn't happen; the button is disabled.\r\n            return;\r\n         }\r\n\r\n         FileSaveDialog fileSaveDialog = new FileSaveDialog(Properties.Resources.ConfigurationFilePrefix + \" (*.json)|*.json\");\r\n         fileSaveDialog.InitialFileName = GetDefaultDirectory() + \"\\\\\" + Properties.Resources.ConfigurationFilePrefix + \" - \" + configuration.Name + \".json\";\r\n         \r\n         if (fileSaveDialog.Show() == ItemSelectionDialogResult.Confirmed)\r\n         {\r\n            try\r\n            {\r\n               ModelPath modelPath = fileSaveDialog.GetSelectedModelPath();\r\n               string fileName = ModelPathUtils.ConvertModelPathToUserVisiblePath(modelPath);\r\n               IFCExportConfiguration configToSave = configuration.Clone();\r\n               configToSave.Name = Path.GetFileNameWithoutExtension(fileName);\r\n               using (StreamWriter sw = new StreamWriter(fileName))\r\n               {\r\n                  JsonSerializerSettings dateFormatSettings = new JsonSerializerSettings\r\n                  {\r\n                     DateFormatHandling = DateFormatHandling.MicrosoftDateFormat\r\n                  };\r\n                  sw.Write(SerializerUtils.FormatOutput(JsonConvert.SerializeObject(configToSave, dateFormatSettings)));\r\n               }\r\n            }\r\n            catch\r\n            {\r\n               // TODO: Give error.\r\n            }\r\n         }\r\n      }\r\n      private void buttonLoadSetup_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         FileOpenDialog fileOpenDialog = new FileOpenDialog(Properties.Resources.ConfigurationFilePrefix + \" (*.json)|*.json\");\r\n         fileOpenDialog.Title = Properties.Resources.LoadSetup;\r\n\r\n         // Display OpenFileDialog by calling ShowDialog method \r\n         if (fileOpenDialog.Show() == ItemSelectionDialogResult.Confirmed)\r\n         {\r\n            // Get the selected file name and display in a TextBox \r\n            try\r\n            {\r\n               ModelPath modelPath = fileOpenDialog.GetSelectedModelPath();\r\n               string fileName = ModelPathUtils.ConvertModelPathToUserVisiblePath(modelPath);\r\n\r\n               using (StreamReader sr = new StreamReader(fileName))\r\n               {\r\n                  IFCExportConfiguration configuration = JsonConvert.DeserializeObject<IFCExportConfiguration>(sr.ReadToEnd(), new IFCExportConfigurationConverter());\r\n                  if (configuration != null)\r\n                  {\r\n                     if (m_configurationsMap.HasName(configuration.Name))\r\n                        configuration.Name = GetFirstIncrementalName(configuration.Name);\r\n                     if (configuration.IFCVersion == IFCVersion.IFCBCA)\r\n                        configuration.IFCVersion = IFCVersion.IFC2x3CV2;\r\n                     m_configurationsMap.AddOrReplace(configuration);\r\n\r\n                     // set new configuration as selected\r\n                     listBoxConfigurations.Items.Add(configuration);\r\n                     listBoxConfigurations.SelectedItem = configuration;\r\n                     IFCClassificationMgr.UpdateClassification(IFCExport.TheDocument, configuration.ClassificationSettings);\r\n                  }\r\n               }\r\n            }\r\n            catch (Exception)\r\n            {\r\n\r\n            }\r\n         }\r\n      }\r\n      /// <summary>\r\n      /// Shows the rename control and updates with the results.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void buttonRenameSetup_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         String oldName = configuration.Name;\r\n         RenameExportSetupWindow renameWindow = new RenameExportSetupWindow(m_configurationsMap, oldName);\r\n         renameWindow.Owner = this;\r\n         renameWindow.ShowDialog();\r\n         if (renameWindow.DialogResult.HasValue && renameWindow.DialogResult.Value)\r\n         {\r\n            String newName = renameWindow.GetName();\r\n            configuration.Name = newName;\r\n            m_configurationsMap.Remove(oldName);\r\n            m_configurationsMap.AddOrReplace(configuration);\r\n            UpdateConfigurationsList(newName);\r\n            if (IFCExport.LastSelectedConfig.ContainsKey(oldName))\r\n               IFCExport.LastSelectedConfig.Remove(oldName);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Shows the duplicate control and updates with the results.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void buttonDuplicateSetup_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         String name = GetDuplicateSetupName(null);\r\n         NewExportSetupWindow nameWindow = new NewExportSetupWindow(m_configurationsMap, name);\r\n         nameWindow.Owner = this;\r\n         nameWindow.ShowDialog();\r\n         if (nameWindow.DialogResult.HasValue && nameWindow.DialogResult.Value)\r\n         {\r\n            CreateNewEditableConfiguration(GetSelectedConfiguration(), nameWindow.GetName());\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Shows the new setup control and updates with the results.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void buttonNewSetup_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         String name = GetNewSetupName();\r\n         NewExportSetupWindow nameWindow = new NewExportSetupWindow(m_configurationsMap, name);\r\n         nameWindow.Owner = this;\r\n         nameWindow.ShowDialog();\r\n         if (nameWindow.DialogResult.HasValue && nameWindow.DialogResult.Value)\r\n         {\r\n            CreateNewEditableConfiguration(null, nameWindow.GetName());\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the new setup name.\r\n      /// </summary>\r\n      /// <returns>The new setup name.</returns>\r\n      private String GetNewSetupName()\r\n      {\r\n         return GetFirstIncrementalName(Properties.Resources.Setup);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the new duplicated setup name.\r\n      /// </summary>\r\n      /// <param name=\"configuration\">The configuration to duplicate.</param>\r\n      /// <returns>The new duplicated setup name.</returns>\r\n      private String GetDuplicateSetupName(IFCExportConfiguration configuration)\r\n      {\r\n         if (configuration == null)\r\n            configuration = GetSelectedConfiguration();\r\n         return GetFirstIncrementalName(configuration.Name);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the new incremental name for configuration.\r\n      /// </summary>\r\n      /// <param name=\"nameRoot\">The name of a configuration.</param>\r\n      /// <returns>the new incremental name for configuration.</returns>\r\n      private String GetFirstIncrementalName(String nameRoot)\r\n      {\r\n         bool found = true;\r\n         int number = 0;\r\n         String newName = \"\";\r\n         do\r\n         {\r\n            number++;\r\n            newName = nameRoot + \" \" + number;\r\n            if (!m_configurationsMap.HasName(newName))\r\n               found = false;\r\n         }\r\n         while (found);\r\n\r\n         return newName;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a new configuration, either a default or a copy configuration.\r\n      /// </summary>\r\n      /// <param name=\"configuration\">The specific configuration, null to create a defult configuration.</param>\r\n      /// <param name=\"name\">The name of the new configuration.</param>\r\n      /// <returns>The new configuration.</returns>\r\n      private IFCExportConfiguration CreateNewEditableConfiguration(IFCExportConfiguration configuration, String name)\r\n      {\r\n         // create new configuration based on input, or default configuration.\r\n         IFCExportConfiguration newConfiguration;\r\n         if (configuration == null)\r\n         {\r\n            newConfiguration = IFCExportConfiguration.CreateDefaultConfiguration();\r\n            newConfiguration.Name = name;\r\n         }\r\n         else\r\n            newConfiguration = configuration.Duplicate(name, makeEditable:true);\r\n         m_configurationsMap.AddOrReplace(newConfiguration);\r\n\r\n         // set new configuration as selected\r\n         listBoxConfigurations.Items.Add(newConfiguration);\r\n         listBoxConfigurations.SelectedItem = newConfiguration;\r\n         return configuration;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the selected configuration from the list box.\r\n      /// </summary>\r\n      /// <returns>The selected configuration.</returns>\r\n      private IFCExportConfiguration GetSelectedConfiguration()\r\n      {\r\n         IFCExportConfiguration configuration = (IFCExportConfiguration)listBoxConfigurations.SelectedItem;\r\n         if (configuration == null)\r\n         {\r\n            configuration = IFCExportConfiguration.GetInSession();\r\n            listBoxConfigurations.SelectedItem = configuration;\r\n         }\r\n         return configuration;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the name of selected configuration.\r\n      /// </summary>\r\n      /// <returns>The selected configuration name.</returns>\r\n      public String GetSelectedConfigurationName()\r\n      {\r\n         return GetSelectedConfiguration().Name;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the controls after listbox selection changed.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void listBoxConfigurations_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         // Keep the selected list before switching the config\r\n         IFCExportConfiguration prevConfig;\r\n         if (e.RemovedItems.Count > 0)\r\n         {\r\n            prevConfig = e.RemovedItems[0] as IFCExportConfiguration;\r\n            if (prevConfig != null)\r\n            {\r\n               // Keep COBie specific data from the special tabs\r\n               if (prevConfig.IFCVersion == IFCVersion.IFC2x3FM)\r\n               {\r\n                  if (companyInfoItem != null && tabControl.Items.Contains(companyInfoItem))\r\n                     prevConfig.COBieCompanyInfo = (companyInfoItem.Content as COBieCompanyInfoTab).CompanyInfoStr;\r\n\r\n                  if (projectInfoItem != null && tabControl.Items.Contains(projectInfoItem))\r\n                     prevConfig.COBieProjectInfo = (projectInfoItem.Content as COBieProjectInfoTab).ProjectInfoStr;\r\n               }\r\n            }\r\n         }\r\n\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            if (IFCExport.LastSelectedConfig.ContainsKey(configuration.Name))\r\n               configuration = IFCExport.LastSelectedConfig[configuration.Name];\r\n\r\n            UpdateActiveConfigurationOptions(configuration);\r\n            UpdateConfigurationControls(configuration.IsBuiltIn, configuration.IsInSession);\r\n            SetupGeoReferenceInfo(configuration);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the result after the ExportBaseQuantities is picked.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void checkboxExportBaseQuantities_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.ExportBaseQuantities = GetCheckbuttonChecked(checkBox);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the result after the ExportCeilingGrids is picked.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void checkboxExportCeilingGrids_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.ExportCeilingGrids = GetCheckbuttonChecked(checkBox);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the result after the SplitWalls is picked.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void checkboxSplitWalls_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.SplitWallsAndColumns = GetCheckbuttonChecked(checkBox);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the result after the InternalPropertySets is picked.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void checkboxInternalPropertySets_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.ExportInternalRevitPropertySets = GetCheckbuttonChecked(checkBox);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the result after the InternalPropertySets is picked.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void checkboxIFCCommonPropertySets_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.ExportIFCCommonPropertySets = GetCheckbuttonChecked(checkBox);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the result after the 2dElements is picked.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void checkbox2dElements_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.Export2DElements = GetCheckbuttonChecked(checkBox);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the result after the VisibleElementsCurrView is picked.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void checkboxVisibleElementsCurrView_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.VisibleElementsOfCurrentView = GetCheckbuttonChecked(checkBox);\r\n            if (!configuration.VisibleElementsOfCurrentView)\r\n            {\r\n               configuration.ExportPartsAsBuildingElements = false;\r\n               checkBoxExportPartsAsBuildingElements.IsChecked = false;\r\n               comboboxActivePhase.IsEnabled = true;\r\n               checkBoxExportRoomsInView.IsEnabled = false;\r\n               checkBoxExportRoomsInView.IsChecked = false;\r\n            }\r\n            else\r\n            {\r\n               checkBoxExportRoomsInView.IsEnabled = true;\r\n               UpdatePhaseAttributes(configuration);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the result after the Use2DRoomVolumes is picked.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void checkBoxUse2DRoomVolumes_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.Use2DRoomBoundaryForVolume = GetCheckbuttonChecked(checkBox);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the result after the FamilyAndTypeName is picked.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void checkBoxFamilyAndTypeName_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.UseFamilyAndTypeNameForReference = GetCheckbuttonChecked(checkBox);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the configuration IFCVersion when IFCType changed in the combobox.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void comboboxIfcType_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         // Keep the selected list before switching the config\r\n         IFCExportConfiguration prevConfig;\r\n         if (e.RemovedItems.Count > 0)\r\n         {\r\n            prevConfig = e.RemovedItems[0] as IFCExportConfiguration;\r\n         }\r\n\r\n         IFCVersionAttributes attributes = (IFCVersionAttributes)comboboxIfcType.SelectedItem;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.IFCVersion = attributes.Version;\r\n            if ((configuration.IFCVersion == IFCVersion.IFC4 || configuration.IFCVersion == IFCVersion.IFC4DTV || configuration.IFCVersion == IFCVersion.IFC4RV)\r\n               && !configuration.IsBuiltIn)\r\n            {\r\n               checkBox_TriangulationOnly.IsEnabled = true;\r\n            }\r\n            else\r\n            {\r\n               checkBox_TriangulationOnly.IsChecked = false;\r\n               checkBox_TriangulationOnly.IsEnabled = false;\r\n            }\r\n\r\n            UpdateExchangeRequirement(configuration);\r\n\r\n            UpdateFacilityType(configuration);\r\n         }\r\n\r\n         if (configuration.IFCVersion.Equals(IFCVersion.IFC2x3FM))\r\n         {\r\n            DoCOBieSpecificSetup(configuration);\r\n         }\r\n         else\r\n         {\r\n            // Possibly we need to remove the additional COBie specific setup\r\n            UndoCOBieSpecificSetup(configuration);\r\n         }\r\n\r\n         SetupGeoReferenceInfo(configuration);\r\n      }\r\n\r\n      private void comboBoxPlacement_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         IFCSitePlacementAttributes attributes = (IFCSitePlacementAttributes)comboBoxSitePlacement.SelectedItem;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (attributes != null && configuration != null)\r\n         {\r\n            configuration.SitePlacement = attributes.TransformBasis;\r\n            SetupEastingsNorthings(configuration);\r\n         }\r\n      }\r\n\r\n      private void SetupEastingsNorthings(IFCExportConfiguration configuration)\r\n      {\r\n         if (OptionsUtil.PreIFC4Version(configuration.IFCVersion))\r\n         {\r\n            TextBox_Eastings.Text = \"\";\r\n            TextBox_Northings.Text = \"\";\r\n         }\r\n         else\r\n         { \r\n            Document doc = IFCExport.TheDocument;\r\n\r\n            if (comboBoxProjectSite.SelectedItem == null)\r\n            {\r\n               ProjectLocation projectLocation = null;\r\n               if (!string.IsNullOrEmpty(configuration.SelectedSite))\r\n                  m_SiteLocations.TryGetValue(configuration.SelectedSite, out projectLocation);\r\n\r\n               if (string.IsNullOrEmpty(configuration.SelectedSite) || projectLocation == null)\r\n                  configuration.SelectedSite = IFCExport.TheDocument.ActiveProjectLocation.Name;\r\n\r\n               comboBoxProjectSite.SelectedItem = configuration.SelectedSite;\r\n            }\r\n\r\n            ProjectLocation projLocation = m_SiteLocations[comboBoxProjectSite.SelectedItem.ToString()];\r\n            (double eastings, double northings, double orthogonalHeight, double angleTN, double origAngleTN) geoRefInfo =\r\n               OptionsUtil.ScaledGeoReferenceInformation(doc, configuration.SitePlacement, projLocation);\r\n            TextBox_Eastings.Text = geoRefInfo.eastings.ToString(\"F4\");\r\n            TextBox_Northings.Text = geoRefInfo.northings.ToString(\"F4\");\r\n            TextBox_RefElevation.Text = geoRefInfo.orthogonalHeight.ToString(\"F4\");\r\n            TextBox_AngleFromTN.Text = geoRefInfo.angleTN.ToString(\"F4\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the configuration IFCFileType when FileType changed in the combobox.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void comboboxFileType_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         IFCFileFormatAttributes attributes = (IFCFileFormatAttributes)comboboxFileType.SelectedItem;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.IFCFileType = attributes.FileType;\r\n         }\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Updates the configuration SpaceBoundaries when the space boundary level changed in the combobox.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void comboboxSpaceBoundaries_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         IFCSpaceBoundariesAttributes attributes = (IFCSpaceBoundariesAttributes)comboboxSpaceBoundaries.SelectedItem;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.SpaceBoundaries = attributes.Level;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the configuration ActivePhase when the active phase changed in the combobox.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void comboboxActivePhase_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         IFCPhaseAttributes attributes = (IFCPhaseAttributes)comboboxActivePhase.SelectedItem;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.ActivePhaseId = attributes.PhaseId.Value;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the configuration ExportPartsAsBuildingElements when the Export separate parts changed in the combobox.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void checkBoxExportPartsAsBuildingElements_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.ExportPartsAsBuildingElements = GetCheckbuttonChecked(checkBox);\r\n            if (configuration.ExportPartsAsBuildingElements)\r\n            {\r\n               configuration.VisibleElementsOfCurrentView = true;\r\n               checkboxVisibleElementsCurrView.IsChecked = true;\r\n            }\r\n         }\r\n      }\r\n\r\n      private void checkBoxUseActiveViewGeometry_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.UseActiveViewGeometry = GetCheckbuttonChecked(checkBox);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the configuration ExportBoundingBox when the Export Bounding Box changed in the check box.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void checkboxExportBoundingBox_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.ExportBoundingBox = GetCheckbuttonChecked(checkBox);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the configuration ExportSolidModelRep when the \"Export Solid Models when Possible\" option changed in the check box.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void checkboxExportSolidModelRep_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.ExportSolidModelRep = GetCheckbuttonChecked(checkBox);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the configuration ExportMaterialPsets when the \"Export material property sets\" option changed in the check box.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void checkboxExportMaterialPsets_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.ExportMaterialPsets = GetCheckbuttonChecked(checkBox);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the configuration ExportSchedulesAsPsets when the \"Export schedules as property sets\" option changed in the check box.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void checkboxExportSchedulesAsPsets_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.ExportSchedulesAsPsets = GetCheckbuttonChecked(checkBox);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the configuration IncludeSiteElevation when the Export Bounding Box changed in the check box.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void checkboxIfcSiteElevation_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.IncludeSiteElevation = GetCheckbuttonChecked(checkBox);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the configuration StoreIFCGUID when the Store IFC GUID changed in the check box.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void checkboxStoreIFCGUID_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.StoreIFCGUID = GetCheckbuttonChecked(checkBox);\r\n         }\r\n      }\r\n\r\n      private void checkBoxExportSpecificSchedules_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.ExportSpecificSchedules = GetCheckbuttonChecked(checkBox);\r\n            if ((bool)configuration.ExportSpecificSchedules)\r\n            {\r\n               configuration.ExportSchedulesAsPsets = true;\r\n               checkboxExportSchedulesAsPsets.IsChecked = true;\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Update checkbox for user-defined Pset option\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void checkboxExportUserDefinedPset_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.ExportUserDefinedPsets = GetCheckbuttonChecked(checkBox);\r\n            userDefinedPropertySetFileName.IsEnabled = configuration.ExportUserDefinedPsets;\r\n            buttonBrowse.IsEnabled = configuration.ExportUserDefinedPsets;\r\n            checkboxUseTypePropertiesInInstacePSets.IsEnabled = configuration.ExportUserDefinedPsets;\r\n            checkboxUseTypePropertiesInInstacePSets.IsChecked = false;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Update checkbox for exporting type properties for the instances\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void checkboxUseTypePropertiesInInstacePSets_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.UseTypePropertiesInInstacePSets = GetCheckbuttonChecked(checkBox);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Update checkbox for user-defined parameter mapping table option\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contain the event data.</param>\r\n      private void checkBoxExportUserDefinedParameterMapping_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.ExportUserDefinedParameterMapping = GetCheckbuttonChecked(checkBox);\r\n            userDefinedParameterMappingTable.IsEnabled = configuration.ExportUserDefinedParameterMapping;\r\n            buttonParameterMappingBrowse.IsEnabled = configuration.ExportUserDefinedParameterMapping;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Shows the new setup control and updates with the results.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The source of the event.</param>\r\n      /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n      private void buttonBrowse_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n\r\n         Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();\r\n\r\n         // Set filter for file extension and default file extension \r\n         dlg.DefaultExt = \".txt\";\r\n         dlg.Filter = Properties.Resources.UserDefinedParameterSets + @\"|*.txt\"; //@\"|*.txt; *.ifcxml; *.ifcjson\";\r\n         if (configuration != null && !string.IsNullOrWhiteSpace(configuration.ExportUserDefinedPsetsFileName))\r\n         {\r\n            string pathName = System.IO.Path.GetDirectoryName(configuration.ExportUserDefinedPsetsFileName);\r\n            if (Directory.Exists(pathName))\r\n               dlg.InitialDirectory = pathName;\r\n            if (File.Exists(configuration.ExportUserDefinedPsetsFileName))\r\n            {\r\n               string fileName = System.IO.Path.GetFileName(configuration.ExportUserDefinedPsetsFileName);\r\n               dlg.FileName = fileName;\r\n            }\r\n         }\r\n\r\n         // Display OpenFileDialog by calling ShowDialog method \r\n         bool? result = dlg.ShowDialog();\r\n\r\n         // Get the selected file name and display in a TextBox \r\n         if (result.HasValue && result.Value)\r\n         {\r\n            string filename = dlg.FileName;\r\n            userDefinedPropertySetFileName.Text = filename;\r\n            if (configuration != null)\r\n               configuration.ExportUserDefinedPsetsFileName = filename;\r\n         }\r\n      }\r\n\r\n\r\n      private void buttonParameterMappingBrowse_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n\r\n         Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();\r\n\r\n         dlg.DefaultExt = \".txt\";\r\n         dlg.Filter = Properties.Resources.UserDefinedParameterMappingTable + @\"|*.txt\";\r\n\r\n         if (configuration != null && !string.IsNullOrWhiteSpace(configuration.ExportUserDefinedParameterMappingFileName))\r\n         {\r\n            string pathName = System.IO.Path.GetDirectoryName(configuration.ExportUserDefinedParameterMappingFileName);\r\n            if (Directory.Exists(pathName))\r\n            {\r\n               dlg.InitialDirectory = pathName;\r\n            }\r\n            if (File.Exists(configuration.ExportUserDefinedParameterMappingFileName))\r\n            {\r\n               string fileName = System.IO.Path.GetFileName(configuration.ExportUserDefinedParameterMappingFileName);\r\n               dlg.FileName = fileName;\r\n            }\r\n         }\r\n\r\n         bool? result = dlg.ShowDialog();\r\n\r\n         // Get the selected file name and display in a TextBox \r\n         if (result.HasValue && result.Value)\r\n         {\r\n            string filename = dlg.FileName;\r\n            userDefinedParameterMappingTable.Text = filename;\r\n            if (configuration != null)\r\n               configuration.ExportUserDefinedParameterMappingFileName = filename;\r\n         }\r\n      }\r\n\r\n\r\n      private void checkBoxExportRoomsInView_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         CheckBox checkBox = (CheckBox)sender;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.ExportRoomsInView = GetCheckbuttonChecked(checkBox);\r\n         }\r\n      }\r\n\r\n      private void comboBoxLOD_SelectionChanged(object sender, RoutedEventArgs e)\r\n      {\r\n         string selectedItem = (string)comboBoxLOD.SelectedItem;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            double levelOfDetail = 0;\r\n            if (string.Compare(selectedItem, Properties.Resources.DetailLevelExtraLow) == 0)\r\n               levelOfDetail = 0.25;\r\n            else if (string.Compare(selectedItem, Properties.Resources.DetailLevelLow) == 0)\r\n               levelOfDetail = 0.5;\r\n            else if (string.Compare(selectedItem, Properties.Resources.DetailLevelMedium) == 0)\r\n               levelOfDetail = 0.75;\r\n            else\r\n               // detail level is high\r\n               levelOfDetail = 1;\r\n            configuration.TessellationLevelOfDetail = levelOfDetail;\r\n         }\r\n      }\r\n\r\n      private void buttonFileHeader_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCFileHeaderInformation fileHeaderWindow = new IFCFileHeaderInformation();\r\n         fileHeaderWindow.Owner = this;\r\n         fileHeaderWindow.ShowDialog();\r\n      }\r\n\r\n      private void buttonAddressInformation_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         IFCAddressInformation addressInformationWindow = new IFCAddressInformation(configuration)\r\n         {\r\n            Owner = this\r\n         };\r\n         addressInformationWindow.ShowDialog();\r\n      }\r\n\r\n      private void buttonCategoryMapping_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         ShowCategoryMappingDialog();\r\n      }\r\n\r\n      private void ShowCategoryMappingDialog()\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         IFCCategoryMapping categoryMapping = new(owner: this, configuration);\r\n         categoryMapping.ShowDialog();\r\n\r\n         // Refresh the category mapping pulldown in case we deleted an option.\r\n         InitComboBoxCategoryMapping(IFCExport.TheDocument);\r\n      }\r\n\r\n      private void ShowPropertyMappingDialog()\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         IFCPropertyMapping propertyMapping = new(owner: this, configuration);\r\n         propertyMapping.ShowDialog();\r\n\r\n         // Refresh the property mapping pulldown in case we deleted an option.\r\n         UpdateComboBoxPropertyMappingSetups(IFCExport.TheDocument, configuration);\r\n      }\r\n\r\n      private void buttonPropertyMappingSetups_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         ShowPropertyMappingDialog();\r\n      }\r\n\r\n      private void buttonClassification_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         IFCClassificationWindow classificationInformationWindow = new IFCClassificationWindow(configuration);\r\n         classificationInformationWindow.Owner = this;\r\n         classificationInformationWindow.ShowDialog();\r\n      }\r\n\r\n      private void checkBox_TriangulationOnly_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         configuration.UseOnlyTriangulation = true;\r\n      }\r\n\r\n      private void checkBox_TriangulationOnly_Unchecked(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         configuration.UseOnlyTriangulation = false;\r\n      }\r\n\r\n\r\n      private void checkboxIncludeSteelElements_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         configuration.IncludeSteelElements = true;\r\n      }\r\n\r\n      private void checkboxIncludeSteelElements_Unchecked(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         configuration.IncludeSteelElements = false;\r\n      }\r\n\r\n      private void Checkbox_UseTypeNameOnly_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         configuration.UseTypeNameOnlyForIfcType = true;\r\n      }\r\n\r\n      private void Checkbox_UseTypeNameOnly_Unchecked(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         configuration.UseTypeNameOnlyForIfcType = false;\r\n      }\r\n\r\n      private void Checkbox_ExportHostAsSingleEntity_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         configuration.ExportHostAsSingleEntity = true;\r\n      }\r\n\r\n      private void Checkbox_ExportHostAsSingleEntity_Unchecked(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         configuration.ExportHostAsSingleEntity = false;\r\n      }\r\n\r\n      private void Checkbox_OwnerHistoryLastModified_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         configuration.OwnerHistoryLastModified = true;\r\n      }\r\n\r\n      private void Checkbox_OwnerHistoryLastModified_Unchecked(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         configuration.OwnerHistoryLastModified = false;\r\n      }\r\n\r\n      private void checkbox_ExportBarsInUniformSetsAsSeparateIFCEntities_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         configuration.ExportBarsInUniformSetsAsSeparateIFCEntities = true;\r\n      }\r\n\r\n      private void checkbox_ExportBarsInUniformSetsAsSeparateIFCEntities_Unchecked(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         configuration.ExportBarsInUniformSetsAsSeparateIFCEntities = false;\r\n      }\r\n\r\n      private void Checkbox_UseVisibleRevitName_Checked(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         configuration.UseVisibleRevitNameAsEntityName = true;\r\n      }\r\n\r\n      private void Checkbox_UseVisibleRevitName_Unchecked(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         configuration.UseVisibleRevitNameAsEntityName = false;\r\n      }\r\n\r\n      private void comboBoxExchangeRequirement_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         if (comboBoxExchangeRequirement.SelectedValue != null)\r\n         {\r\n            IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n            configuration.ExchangeRequirement = IFCExchangeRequirements.GetEREnum(comboBoxExchangeRequirement.SelectedValue.ToString());\r\n         } \r\n      }\r\n\r\n      private void comboBoxFacilityType_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         if (comboBoxFacilityType.SelectedValue != null)\r\n         {\r\n            IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n            configuration.FacilityType = IFCFacilityTypes.GetFacilityEnum(comboBoxFacilityType.SelectedValue.ToString());\r\n            UpdateFacilityPredefinedType(configuration);\r\n         }\r\n      }\r\n\r\n      private void comboBoxFacilityPredefinedType_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         if (comboBoxFacilityPredefinedType.SelectedValue != null)\r\n         {\r\n            IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n            configuration.FacilityPredefinedType = \r\n               IFCFacilityTypes.GetFacilityPredefinedTypeEnum(configuration.FacilityType, \r\n               comboBoxFacilityPredefinedType.SelectedValue.ToString());\r\n         }\r\n      }\r\n\r\n      private void comboBoxCategoryMapping_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         if (comboBoxCategoryMapping.SelectedValue != null)\r\n         {\r\n            Document doc = IFCExport.TheDocument;\r\n            IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n            string categoryMappingName = (string)comboBoxCategoryMapping.SelectedItem;\r\n\r\n            try\r\n            {\r\n               if (!string.IsNullOrWhiteSpace(categoryMappingName) &&\r\n                  IFCCategoryTemplate.FindByName(doc, categoryMappingName) != null)\r\n               {\r\n                  configuration.CategoryMapping = categoryMappingName;\r\n               }\r\n               else\r\n               {\r\n                  configuration.CategoryMapping = null;\r\n               }\r\n            }\r\n            catch\r\n            {\r\n               configuration.CategoryMapping = null;\r\n            }\r\n         }\r\n      }\r\n\r\n      private void comboBoxPropertyMappingSetups_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         if (comboBoxPropertyMappingSetups.SelectedValue != null)\r\n         {\r\n            Document doc = IFCExport.TheDocument;\r\n            IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n            string propertyMappingSetupName = (string)comboBoxPropertyMappingSetups.SelectedItem;\r\n\r\n            try\r\n            {\r\n               if (!string.IsNullOrWhiteSpace(propertyMappingSetupName) &&\r\n                  IFCParameterTemplate.FindByName(doc, propertyMappingSetupName) != null)\r\n               {\r\n                  configuration.PropertyMapping = propertyMappingSetupName;\r\n               }\r\n               else\r\n               {\r\n                  configuration.PropertyMapping = null;\r\n               }\r\n            }\r\n            catch\r\n            {\r\n               configuration.PropertyMapping = null;\r\n            }\r\n         }\r\n      }\r\n      private void UpdateExchangeRequirement(IFCExportConfiguration configuration)\r\n      {\r\n         if (IFCExchangeRequirements.ExchangeRequirements.TryGetValue(configuration.IFCVersion, out IList<KnownERNames> erList) &&\r\n            (erList?.Count > 0)) \r\n         {\r\n            if (configuration.ExchangeRequirement == KnownERNames.NotDefined)\r\n            {\r\n               configuration.ExchangeRequirement = erList.First();\r\n            }\r\n            comboBoxExchangeRequirement.ItemsSource = IFCExchangeRequirements.ExchangeRequirementListForUI(configuration.IFCVersion);\r\n            comboBoxExchangeRequirement.SelectedItem = configuration.ExchangeRequirement.ToFullLabel();\r\n         }\r\n         else\r\n         {\r\n            configuration.ExchangeRequirement = KnownERNames.NotDefined;\r\n            comboBoxExchangeRequirement.ItemsSource = null;\r\n            comboBoxExchangeRequirement.SelectedItem = null;\r\n         }\r\n\r\n         comboBoxExchangeRequirement.IsEnabled = !configuration.IsBuiltIn;\r\n      }\r\n\r\n      private void UpdateFacilityPredefinedType(IFCExportConfiguration configuration)\r\n      {\r\n         System.Windows.Visibility predefinedTypeVisibility = System.Windows.Visibility.Hidden;\r\n         KnownFacilityTypes facilityType = configuration.FacilityType;\r\n         if (IFCFacilityTypes.FacilityTypes.ContainsKey(configuration.IFCVersion))\r\n         {\r\n            IList<string> facilityPredefinedTypes = IFCFacilityTypes.FacilityPredefinedTypesForUI(facilityType);\r\n            comboBoxFacilityPredefinedType.ItemsSource = facilityPredefinedTypes;\r\n            comboBoxFacilityPredefinedType.SelectedItem = IFCFacilityTypes.ToFullLabel(facilityType, configuration.FacilityPredefinedType);\r\n\r\n            if ((facilityPredefinedTypes?.Count ?? 0) > 0)\r\n            {\r\n               predefinedTypeVisibility = System.Windows.Visibility.Visible;\r\n            }\r\n         }\r\n\r\n         comboBoxFacilityPredefinedType.Visibility = predefinedTypeVisibility;\r\n         labelFacilityPredefinedType.Visibility = predefinedTypeVisibility;\r\n      }\r\n      private void UpdateFacilityType(IFCExportConfiguration configuration)\r\n      {\r\n         if (IFCFacilityTypes.FacilityTypes.ContainsKey(configuration.IFCVersion))\r\n         {\r\n            comboBoxFacilityType.ItemsSource = IFCFacilityTypes.FacilityTypesForUI(configuration.IFCVersion);\r\n            comboBoxFacilityType.SelectedItem = configuration.FacilityType.ToFullLabel();\r\n\r\n            comboBoxFacilityType.Visibility = System.Windows.Visibility.Visible;\r\n            labelFacilityType.Visibility = System.Windows.Visibility.Visible;\r\n         }\r\n         else\r\n         {\r\n            comboBoxFacilityType.ItemsSource = null;\r\n            comboBoxFacilityType.SelectedItem = null;\r\n\r\n            comboBoxFacilityType.Visibility = System.Windows.Visibility.Hidden;\r\n            labelFacilityType.Visibility = System.Windows.Visibility.Hidden;\r\n         }\r\n\r\n         UpdateFacilityPredefinedType(configuration);\r\n         comboBoxFacilityType.IsEnabled = true;\r\n      }\r\n\r\n      private void TextBox_EPSG_TextChanged(object sender, TextChangedEventArgs e)\r\n      {\r\n      }\r\n\r\n      private void TextBox_EPSG_LostKeyboardFocus(object sender, System.Windows.Input.KeyboardFocusChangedEventArgs e)\r\n      {\r\n         if (!string.IsNullOrEmpty(TextBox_EPSG.Text))\r\n         {\r\n            // Check a valid EPSG code format (either just a number, or EPSG:<number>)\r\n            string epsgStr = null;\r\n            int epsgId = -1;\r\n            if (int.TryParse(TextBox_EPSG.Text, out epsgId))\r\n               epsgStr = TextBox_EPSG.Text;\r\n            else if (TextBox_EPSG.Text.StartsWith(\"EPSG\", StringComparison.InvariantCultureIgnoreCase))\r\n            {\r\n               string[] tok = TextBox_EPSG.Text.Split(' ', ':');\r\n               if (int.TryParse(tok[tok.Length - 1], out epsgId))\r\n                  epsgStr = tok[tok.Length - 1];\r\n            }\r\n\r\n            if (!string.IsNullOrEmpty(epsgStr))\r\n            {\r\n               Document doc = IFCExport.TheDocument;\r\n               // If it is a valid EPSG code, get the relevant geo reference information and temporarily set the SiteLocation\r\n               using (Transaction tmpSiteLoc = new Transaction(doc, \"Temp Set GeoRefeference\"))\r\n               {\r\n                  tmpSiteLoc.Start();\r\n                  try\r\n                  {\r\n                     doc.SiteLocation.SetGeoCoordinateSystem(epsgStr);\r\n                     IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n                     GetGeoReferenceInfo(configuration, epsgStr);    // Some time the XML data does not provide the appropriate Authority element with EPSG code. in this case use the original string\r\n                  }\r\n                  catch\r\n                  {\r\n                     TextBox_EPSG.Text = \"\"; //Invalid epsg code, reset the textbox\r\n                  }\r\n                  tmpSiteLoc.RollBack();    // We are not saving the changes, the above code only called temporarily to get the appropriate geoRef information\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      private void button_GeoRefReset_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         GetGeoReferenceInfo(configuration);\r\n      }\r\n\r\n      private void button_ResetConfigurations_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         m_configurationsMap = new IFCExportConfigurationsMap(IFCCommandOverrideApplication.TheDocument);\r\n         if (listBoxConfigurations.HasItems)\r\n            listBoxConfigurations.Items.Clear();\r\n         IFCExport.LastSelectedConfig.Clear();\r\n\r\n         m_configurationsMap.AddOrReplace(IFCExportConfiguration.GetInSession());\r\n         m_configurationsMap.AddBuiltInConfigurations();\r\n\r\n         if (configuration != null && m_configurationsMap.HasName(configuration.Name))\r\n            ResetToOriginalConfigSettings(configuration.Name);\r\n         else\r\n            ResetToOriginalConfigSettings(Properties.Resources.InSessionConfiguration);\r\n      }\r\n\r\n      private void comboBoxProjectSite_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         ProjectLocation selectedProjLocation = m_SiteLocations[comboBoxProjectSite.SelectedItem.ToString()];\r\n         SiteLocation siteLoc = null;\r\n         // Get the SiteLocation from the selected Site \r\n         if (selectedProjLocation != null)\r\n         {\r\n            siteLoc = selectedProjLocation.GetSiteLocation();\r\n         }\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (configuration != null)\r\n         {\r\n            configuration.SelectedSite = comboBoxProjectSite.SelectedItem.ToString();\r\n            GetGeoReferenceInfo(configuration, siteLoc: siteLoc);    // Some time the XML data does not provide the appropriate Authority element with EPSG code. in this case use the original string\r\n         }\r\n      }\r\n\r\n      bool CRSOverride = false;\r\n      private void Button_CRSReset_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         // Clear the existing GeoRef information in the configuration to reset\r\n         configuration.GeoRefCRSName = \"\";\r\n         configuration.GeoRefCRSDesc = \"\";\r\n         configuration.GeoRefEPSGCode = \"\";\r\n         configuration.GeoRefGeodeticDatum = \"\";\r\n         configuration.GeoRefMapUnit = \"\";\r\n         GetGeoReferenceInfo(configuration);\r\n         TextBox_CRSName.IsReadOnly = true;\r\n         TextBox_CRSName.BorderThickness = new Thickness(0);\r\n         TextBox_CRSDesc.IsReadOnly = true;\r\n         TextBox_CRSDesc.BorderThickness = new Thickness(0);\r\n         TextBox_GeoDatum.IsReadOnly = true;\r\n         TextBox_GeoDatum.BorderThickness = new Thickness(0);\r\n         TextBox_EPSG.IsReadOnly = false;\r\n         TextBox_EPSG.LostKeyboardFocus += TextBox_EPSG_LostKeyboardFocus;\r\n         CRSOverride = false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Manual override of the CRS values in the cases that our database is incomplete or out-of-date\r\n      /// </summary>\r\n      /// <param name=\"sender\"></param>\r\n      /// <param name=\"e\"></param>\r\n      private void Button_CRSOverride_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         TextBox_CRSName.IsReadOnly = false;\r\n         TextBox_CRSName.BorderThickness = new Thickness(1);\r\n         TextBox_CRSDesc.IsReadOnly = false;\r\n         TextBox_CRSDesc.BorderThickness = new Thickness(1);\r\n         TextBox_GeoDatum.IsReadOnly = false;\r\n         TextBox_GeoDatum.BorderThickness = new Thickness(1);\r\n         TextBox_EPSG.IsReadOnly = false;\r\n         TextBox_EPSG.LostKeyboardFocus -= TextBox_EPSG_LostKeyboardFocus;\r\n         CRSOverride = true;\r\n      }\r\n\r\n      private void button_ExcludeElement_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n\r\n         EntityTree entityTree = new(configuration.IFCVersion, configuration.ExcludeFilter, \r\n            desc: \"\", singleNodeSelection: false, EntityTree.SelectionStrategyType.Exclusion,\r\n            synchronizeSelectionWithType: true, propagatePreselection: false)\r\n         {\r\n            Owner = this,\r\n            Title = Properties.Resources.IFCEntitySelection\r\n         };\r\n         entityTree.PredefinedTypeTreeView.Visibility = System.Windows.Visibility.Hidden;\r\n         bool? ret = entityTree.ShowDialog();\r\n         if (ret.HasValue && ret.Value == true)\r\n            configuration.ExcludeFilter = entityTree.GetUnSelectedEntity();\r\n      }\r\n\r\n      private void comboboxLinkedFiles_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         IFCLinkedFileExportAs attributes = (IFCLinkedFileExportAs)comboboxLinkedFiles.SelectedItem;\r\n         IFCExportConfiguration configuration = GetSelectedConfiguration();\r\n         if (attributes != null && configuration != null)\r\n         {\r\n            configuration.ExportLinkedFiles = attributes.ExportAs;\r\n         }\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCFileFormatAttributes.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// Represents the types of files that can be produced during IFC export.\r\n   /// </summary>\r\n   public class IFCFileFormatAttributes\r\n   {\r\n      /// <summary>\r\n      /// The IFC file format into which a file may be exported.\r\n      /// </summary>\r\n      public IFCFileFormat FileType { get; set; }\r\n\r\n      /// <summary>\r\n      /// Constructs the file format choices.\r\n      /// </summary>\r\n      /// <param name=\"fileType\"></param>\r\n      public IFCFileFormatAttributes(IFCFileFormat fileType)\r\n      {\r\n         FileType = fileType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts the IFCFileFormat to string.\r\n      /// </summary>\r\n      /// <returns>The string of IFCFileFormat.</returns>\r\n      public override String ToString()\r\n      {\r\n         switch (FileType)\r\n         {\r\n            case IFCFileFormat.Ifc:\r\n               return Properties.Resources.IFC;\r\n            case IFCFileFormat.IfcXML:\r\n               return Properties.Resources.IFCXML;\r\n            case IFCFileFormat.IfcZIP:\r\n               return Properties.Resources.IFCZIP;\r\n            case IFCFileFormat.IfcXMLZIP:\r\n               return Properties.Resources.IFCXMLZIP;\r\n            default:\r\n               return Properties.Resources.IFCUnknown;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the string of IFCFileFormat extension.\r\n      /// </summary>\r\n      /// <returns>The string of IFCFileFormat extension.</returns>\r\n      public String GetFileExtension()\r\n      {\r\n         switch (FileType)\r\n         {\r\n            case IFCFileFormat.Ifc:\r\n               return Properties.Resources.IFCExt;\r\n            case IFCFileFormat.IfcXML:\r\n               return Properties.Resources.IFCXMLExt;\r\n            case IFCFileFormat.IfcZIP:\r\n               return Properties.Resources.IFCZIPExt;\r\n            case IFCFileFormat.IfcXMLZIP:\r\n               return Properties.Resources.IFCXMLZIPExt;\r\n            default:\r\n               return Properties.Resources.IFCUnknown;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the string of IFCFileFormat filter.\r\n      /// </summary>\r\n      /// <returns>The string of IFCFileFormat filter.</returns>\r\n      public String GetFileFilter()\r\n      {\r\n         switch (FileType)\r\n         {\r\n            case IFCFileFormat.Ifc:\r\n               return Properties.Resources.IFCFiles;\r\n            case IFCFileFormat.IfcXML:\r\n               return Properties.Resources.IFCXMLFiles;\r\n            case IFCFileFormat.IfcZIP:\r\n               return Properties.Resources.IFCZIPFiles;\r\n            case IFCFileFormat.IfcXMLZIP:\r\n               return Properties.Resources.IFCZIPFiles;\r\n            default:\r\n               return Properties.Resources.IFCUnknown;\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCFileHeaderInformationUI.xaml",
    "content": "﻿<auiw:ChildWindow x:Class=\"BIM.IFC.Export.UI.IFCFileHeaderInformation\"\r\n                  xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n                  xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n                  xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n                  xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\r\n                  xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \r\n                  xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \r\n                  mc:Ignorable=\"d\" \r\n                  Title=\"{x:Static p:Resources.FileHeader}\" \r\n                  ResizeMode =\"NoResize\" \r\n                  Name=\"FileHeaderTab\" \r\n                  Loaded=\"Window_Loaded\" \r\n                  SaveWindowSettings=\"False\"\r\n                  Initialized=\"FileHeaderTab_Initialized\" \r\n                  SizeToContent=\"WidthAndHeight\" \r\n                  HorizontalAlignment=\"Stretch\" \r\n                  Margin=\"10,5,5,10\" \r\n                  Height=\"419.499\" \r\n                  Width=\"567\">\r\n    <Grid Name=\"grid1\" Width=\"551\" Margin=\"6,2,2,-10\">\r\n        <Grid.RowDefinitions>\r\n            <RowDefinition Height=\"331*\" />\r\n            <RowDefinition Height=\"65*\" />\r\n        </Grid.RowDefinitions>\r\n        <Grid Margin=\"14,0,15,20\" Grid.RowSpan=\"2\">\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"104*\" />\r\n                <ColumnDefinition Width=\"418*\" />\r\n            </Grid.ColumnDefinitions>\r\n            <Label Content=\"{x:Static p:Resources.FileDescription}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"0,17,0,0\" Name=\"labelFileDescription\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\" Width=\"176\" />\r\n            <TextBox Text=\"{Binding Path=FileDescription, UpdateSourceTrigger=PropertyChanged, TargetNullValue={x:Static p:Resources.ValueSetByExportOption}}\" Height=\"23\" HorizontalAlignment=\"Stretch\" Margin=\"72,19,33,0\" Name=\"FileDescriptionTextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" IsReadOnly=\"True\" Grid.Column=\"1\" Background=\"#FFE8E8E8\" FontStyle=\"Italic\" Opacity=\"0.7\" />\r\n            <Label Content=\"{x:Static p:Resources.SourceFileName}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"0,46,0,0\" Name=\"labelSourceFileName\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\" Width=\"176\" />\r\n            <TextBox Text=\"{Binding Path=SourceFileName, UpdateSourceTrigger=PropertyChanged, TargetNullValue={x:Static p:Resources.ValueSetOnExport}}\" Height=\"23\" HorizontalAlignment=\"Stretch\" Margin=\"72,48,33,0\" Name=\"SourceFileNameTextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" IsReadOnly=\"True\" Grid.Column=\"1\" Background=\"#FFE8E8E8\" FontStyle=\"Italic\" Opacity=\"0.7\" />\r\n            <Label Content=\"{x:Static p:Resources.AuthorsName}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"0,75,0,0\" Name=\"labelAuthorFirstName\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\" Width=\"176\" />\r\n            <TextBox Text=\"{Binding Path=AuthorName, UpdateSourceTrigger=PropertyChanged}\" Height=\"23\" HorizontalAlignment=\"Stretch\" Margin=\"72,77,33,0\" Name=\"AuthorNameTextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"1\" />\r\n            <Label Content=\"{x:Static p:Resources.AuthorsEMail}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"0,104,0,0\" Name=\"labelAuthorLastName\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\" Width=\"176\" />\r\n            <TextBox Text=\"{Binding Path=AuthorEmail, UpdateSourceTrigger=PropertyChanged}\" Height=\"23\" HorizontalAlignment=\"Stretch\" Margin=\"72,106,33,0\" Name=\"AuthorEmailTextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"1\" />\r\n            <Label Content=\"{x:Static p:Resources.Organization}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"0,133,0,0\" Name=\"labelOrganization\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\" Width=\"176\" />\r\n            <TextBox Text=\"{Binding Path=Organization, UpdateSourceTrigger=PropertyChanged}\" Height=\"23\" HorizontalAlignment=\"Stretch\" Margin=\"72,135,33,0\" Name=\"OrganizationTextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"1\" />\r\n            <Label Content=\"{x:Static p:Resources.Authorization}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"0,162,0,0\" Name=\"labelAuthorization\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\" Width=\"176\" />\r\n            <TextBox Text=\"{Binding Path=Authorization, UpdateSourceTrigger=PropertyChanged}\" Height=\"23\" HorizontalAlignment=\"Stretch\" Margin=\"72,164,33,0\" Name=\"AuthorizationTextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"1\" />\r\n            <Label Content=\"{x:Static p:Resources.ApplicationName}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"0,191,0,0\" Name=\"labelApplicationName\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\" Width=\"176\" />\r\n            <TextBox Text=\"{Binding Path=ApplicationName, UpdateSourceTrigger=PropertyChanged}\" Height=\"23\" HorizontalAlignment=\"Stretch\" Margin=\"72,193,33,0\" Name=\"ApplicationNameTextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" IsReadOnly=\"True\" Grid.Column=\"1\" Background=\"#FFE8E8E8\" Opacity=\"0.7\" />\r\n            <Label Content=\"{x:Static p:Resources.VersionNumber}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"0,220,0,0\" Name=\"labelVersionNumber\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\" Width=\"176\" />\r\n            <TextBox Text=\"{Binding Path=VersionNumber, UpdateSourceTrigger=PropertyChanged}\" Height=\"23\" HorizontalAlignment=\"Stretch\" Margin=\"72,222,33,0\" Name=\"VersionNumberTextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" IsReadOnly=\"True\" Grid.Column=\"1\" Background=\"#FFE8E8E8\" Opacity=\"0.7\" />\r\n            <Label Content=\"{x:Static p:Resources.FileSchema}\" Height=\"28\" HorizontalAlignment=\"Left\" Margin=\"0,249,0,0\" Name=\"labelLocation\" VerticalAlignment=\"Top\" Grid.ColumnSpan=\"2\" Width=\"176\" />\r\n            <TextBox Text=\"{Binding Path=FileSchema, UpdateSourceTrigger=PropertyChanged, TargetNullValue={x:Static p:Resources.ValueSetByExportOption}}\" Height=\"23\" HorizontalAlignment=\"Stretch\" Margin=\"72,251,33,0\" Name=\"FileSchemaTextBox\" VerticalAlignment=\"Top\" VerticalContentAlignment=\"Center\" Grid.Column=\"1\" IsReadOnly=\"True\" Background=\"#FFE8E8E8\" FontStyle=\"Italic\" Opacity=\"0.7\" />\r\n            <Button Content=\"{x:Static p:Resources.OK}\" Height=\"22\" Name=\"buttonOK\" Width=\"75\" Click=\"buttonOK_Click\" RenderTransformOrigin=\"0.48,-5.227\" Grid.Column=\"1\" Margin=\"230,343,113,11\"/>\r\n            <Button Content=\"{x:Static p:Resources.Cancel}\" Height=\"22\" x:Name=\"buttonCancel\" Width=\"75\" Click=\"bottonCancel_Click\" Margin=\"310,343,33,11\" Grid.Column=\"1\" RenderTransformOrigin=\"0.547,1.273\"/>\r\n        </Grid>\r\n    </Grid>\r\n</auiw:ChildWindow>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCFileHeaderInformationUI.xaml.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n\r\nusing Autodesk.UI.Windows;\r\nusing Revit.IFC.Common.Extensions;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// Interaction logic for File Header Tab in IFCAssignmentUI.xaml\r\n   /// </summary>\r\n   public partial class IFCFileHeaderInformation : ChildWindow\r\n   {\r\n\r\n      private IFCFileHeader m_newFileHeader = new IFCFileHeader();\r\n      private IFCFileHeaderItem m_newFileHeaderItem = new IFCFileHeaderItem();\r\n      private IFCFileHeaderItem m_savedFileHeaderItem = new IFCFileHeaderItem();\r\n\r\n      /// <summary>\r\n      /// initialization of IFCAssignemt class\r\n      /// </summary>\r\n      /// <param name=\"document\"></param>\r\n      public IFCFileHeaderInformation()\r\n      {\r\n         InitializeComponent();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Event when Window is loaded\r\n      /// </summary>\r\n      /// <param name=\"sender\"></param>\r\n      /// <param name=\"e\"></param>\r\n      private void Window_Loaded(object sender, RoutedEventArgs e)\r\n      {\r\n         FileHeaderTab.DataContext = m_newFileHeaderItem;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Event when OK button is pressed\r\n      /// </summary>\r\n      /// <param name=\"sender\"></param>\r\n      /// <param name=\"args\"></param>\r\n      private void buttonOK_Click(object sender, RoutedEventArgs args)\r\n      {\r\n         // Saved changes to both Address Tab items and File Header Tab items if they have changed\r\n         if (m_newFileHeaderItem.isUnchanged(m_savedFileHeaderItem) == false)\r\n         {\r\n            m_newFileHeader.UpdateFileHeader(IFCCommandOverrideApplication.TheDocument, m_newFileHeaderItem);\r\n         }\r\n\r\n         Close();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Event when Cancel button is pressed\r\n      /// </summary>\r\n      /// <param name=\"sender\"></param>\r\n      /// <param name=\"e\"></param>\r\n      private void bottonCancel_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         Close();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initialization of File Header tab\r\n      /// </summary>\r\n      /// <param name=\"sender\"></param>\r\n      /// <param name=\"e\"></param>\r\n      private void FileHeaderTab_Initialized(object sender, EventArgs e)\r\n      {\r\n         bool hasSavedItem = m_newFileHeader.GetSavedFileHeader(IFCCommandOverrideApplication.TheDocument, out m_newFileHeaderItem);\r\n         if (hasSavedItem == true)\r\n         {\r\n            m_savedFileHeaderItem = m_newFileHeaderItem.Clone();\r\n         }\r\n\r\n         // File Description and Source File name are assigned by exporter later on and therefore needs to be set to null for the UI for the null value text to be displayed\r\n         m_newFileHeaderItem.FileDescriptions = new List<string>();\r\n         m_newFileHeaderItem.SourceFileName = null;\r\n         m_newFileHeaderItem.FileSchema = null;\r\n\r\n         // Application Name and Number are fixed for the software release and will not change, therefore they are always forced set here\r\n         m_newFileHeaderItem.ApplicationName = IFCCommandOverrideApplication.TheDocument.Application.VersionName;\r\n         m_newFileHeaderItem.VersionNumber = IFCCommandOverrideApplication.TheDocument.Application.VersionBuild;\r\n      }\r\n   }\r\n}\r\n\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCLinkedFileExportAs.cs",
    "content": "﻿//\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\n// Copyright (C) 2016  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\nusing BIM.IFC.Export.UI.Properties;\nusing Revit.IFC.Export.Utility;\n\nnamespace BIM.IFC.Export.UI\n{\n   public class IFCLinkedFileExportAs\n   {\n\n      public LinkedFileExportAs ExportAs { get; set; }\n\n      public IFCLinkedFileExportAs(LinkedFileExportAs exportAs)\n      {\n         ExportAs = exportAs;\n      }\n\n      public override string ToString()\n      {\n         switch (ExportAs)\n         {\n            case LinkedFileExportAs.DontExport:\n               return Resources.LinkedFilesDontExport;\n            case LinkedFileExportAs.ExportAsSeparate:\n               return Resources.LinkedFilesSeparate;\n            case LinkedFileExportAs.ExportSameProject:\n               return Resources.LinkedFilesSameProject;\n            case LinkedFileExportAs.ExportSameSite:\n               return Resources.LinkedFilesSameSite;\n            default:\n               return Resources.LinkedFilesDontExport;\n         }\n      }\n   }\n}\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCNewExportSetup.xaml",
    "content": "﻿<auiw:ChildWindow x:Class=\"BIM.IFC.Export.UI.NewExportSetupWindow\"\r\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n        xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n        xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\r\n        Title=\"{x:Static p:Resources.NewExportSetup}\" \r\n        Height=\"131\" Width=\"347\" ResizeMode=\"NoResize\">\r\n    <Grid>\r\n      <Button Content=\"{x:Static p:Resources.Cancel}\" Height=\"23\" HorizontalAlignment=\"Left\" Margin=\"238,57,0,0\" Name=\"buttonCancel\" VerticalAlignment=\"Top\" Width=\"75\" Click=\"buttonCancel_Click\" />\r\n      <Button Content=\"{x:Static p:Resources.OK}\" Height=\"23\" HorizontalAlignment=\"Left\" Margin=\"157,57,0,0\" Name=\"buttonOK\" VerticalAlignment=\"Top\" Width=\"75\" Click=\"buttonOK_Click\" IsDefault=\"True\" />\r\n        <TextBox Height=\"23\" HorizontalAlignment=\"Left\" Margin=\"12,28,0,0\" Name=\"textBoxNewSetupName\" VerticalAlignment=\"Top\" Width=\"301\" TextChanged=\"textBoxNewSetupName_TextChanged\" />\r\n      <Label Content=\"{x:Static p:Resources.Name}\" Height=\"33\" HorizontalAlignment=\"Left\" Margin=\"12,0,0,0\" Name=\"label1\" VerticalAlignment=\"Top\" />\r\n    </Grid>\r\n</auiw:ChildWindow>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCNewExportSetup.xaml.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.UI.Windows;\r\nusing Revit.IFC.Export.Utility;\r\nusing System;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n    /// <summary>\r\n    /// Interaction logic for Window1.xaml\r\n    /// </summary>\r\n    public partial class NewExportSetupWindow : ChildWindow\r\n    {\r\n        private String m_newName;\r\n        private IFCExportConfigurationsMap m_configurationMap;\r\n\r\n        /// <summary>\r\n        /// Constructs the new setup name dialog.\r\n        /// </summary>\r\n        /// <param name=\"configurationMap\">The configuration map.</param>\r\n        /// <param name=\"initialName\">The initial name for the setup.</param>\r\n        public NewExportSetupWindow(IFCExportConfigurationsMap configurationMap, String initialName)\r\n        {\r\n            m_configurationMap = configurationMap;\r\n            m_newName = initialName;\r\n            InitializeComponent();\r\n            textBoxNewSetupName.Text = m_newName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The new name of the setup.\r\n        /// </summary>\r\n        /// <returns>The new name of the setup.</returns>\r\n        public String GetName()\r\n        {\r\n            return m_newName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// OK button click.\r\n        /// </summary>\r\n        /// <param name=\"sender\">The source of the event.</param>\r\n        /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n        private void buttonOK_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            m_newName = textBoxNewSetupName.Text;\r\n            DialogResult = true;\r\n            Close();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Cancel button click.\r\n        /// </summary>\r\n        /// <param name=\"sender\">The source of the event.</param>\r\n        /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n        private void buttonCancel_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            DialogResult = false;\r\n            Close();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Updates ok button when the textbox changed.\r\n        /// </summary>\r\n        /// <param name=\"sender\">The source of the event.</param>\r\n        /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n        private void textBoxNewSetupName_TextChanged(object sender, TextChangedEventArgs e)\r\n        {\r\n            String textName = textBoxNewSetupName.Text;\r\n            if (String.IsNullOrWhiteSpace(textName) || m_configurationMap.HasName(textName))\r\n            {\r\n                buttonOK.IsEnabled = false;\r\n            }\r\n            else\r\n            {\r\n                buttonOK.IsEnabled = true;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCPropertyMapping/ComboBoxFilteringUtilities.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.Linq;\r\nusing System.Windows.Controls;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// Static helper class for ComboBox filtering operations\r\n   /// </summary>\r\n   public static class ComboBoxFilteringUtilities\r\n   {\r\n      private static readonly Dictionary<ComboBox, ObservableCollection<string>> _collections = new();\r\n\r\n      /// <summary>\r\n      /// Gets or creates an individual filtered collection for the specified ComboBox.\r\n      /// </summary>\r\n      public static ObservableCollection<string> GetOrCreateCollection(ComboBox comboBox, ObservableCollection<string> masterData)\r\n      {\r\n         if (comboBox == null || masterData == null)\r\n            return new();\r\n\r\n         if (!_collections.ContainsKey(comboBox))\r\n         {\r\n            _collections[comboBox] = new(masterData);\r\n            comboBox.ItemsSource = _collections[comboBox];\r\n         }\r\n         return _collections[comboBox];\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the current caret position in a ComboBox's internal TextBox\r\n      /// </summary>\r\n      public static int GetCaretPosition(ComboBox comboBox)\r\n      {\r\n         if (comboBox?.Template?.FindName(\"PART_EditableTextBox\", comboBox) is TextBox textBox)\r\n         {\r\n            return textBox.CaretIndex;\r\n         }\r\n         return 0;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets the caret position in a ComboBox's internal TextBox\r\n      /// </summary>\r\n      public static void SetCaretPosition(ComboBox comboBox, int position)\r\n      {\r\n         if (comboBox?.Template?.FindName(\"PART_EditableTextBox\", comboBox) is TextBox textBox)\r\n         {\r\n            int safePosition = Math.Max(0, Math.Min(position, textBox.Text?.Length ?? 0));\r\n            textBox.CaretIndex = safePosition;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Opens ComboBox dropdown while suppressing automatic text highlighting\r\n      /// and preserving saved caret position\r\n      /// </summary>\r\n      public static void OpenDropDownSuppressingHighlight(ComboBox comboBox)\r\n      {\r\n         if (comboBox == null || comboBox.IsDropDownOpen)\r\n            return;\r\n\r\n         int savedCaretPosition = GetCaretPosition(comboBox);\r\n\r\n         comboBox.IsDropDownOpen = true;\r\n\r\n         if (comboBox.Template?.FindName(\"PART_EditableTextBox\", comboBox) is TextBox textBox)\r\n         {\r\n            textBox.Select(savedCaretPosition, 0);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Attaches TextChanged handler to ComboBox's internal TextBox\r\n      /// </summary>\r\n      public static void AttachTextChangedHandler(ComboBox comboBox, Action<ComboBox, TextChangedEventArgs> handler)\r\n      {\r\n         if (comboBox == null || handler == null)\r\n            return;\r\n\r\n         // Apply template to ensure visual tree is created\r\n         comboBox.ApplyTemplate();\r\n\r\n         if (comboBox.Template?.FindName(\"PART_EditableTextBox\", comboBox) is not TextBox textBox)\r\n            return;\r\n\r\n         textBox.TextChanged += (sender, e) => handler(comboBox, e);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Filters a ComboBox collection based on text input with smart incremental updates\r\n      /// </summary>\r\n      /// <param name=\"comboBox\">The ComboBox to filter</param>\r\n      /// <param name=\"targetCollection\">The collection bound to the ComboBox (will be modified)</param>\r\n      /// <param name=\"masterData\">The master data source to filter from</param>\r\n      /// <param name=\"filterText\">The text to filter by (case-insensitive substring match)</param>\r\n      /// <param name=\"forceFullList\">If true, shows full list regardless of filterText</param>\r\n      public static void FilterCollection(ComboBox comboBox, ObservableCollection<string> targetCollection,\r\n         ObservableCollection<string> masterData, string filterText, bool forceFullList)\r\n      {\r\n         if (comboBox == null || targetCollection == null || masterData == null)\r\n            return;\r\n\r\n         bool wantFullList = string.IsNullOrEmpty(filterText) || forceFullList;\r\n\r\n         // If we want full list and already have it, skip the work\r\n         if (wantFullList && targetCollection.Count == masterData.Count)\r\n            return;\r\n\r\n         // Determine what items should be in the filtered collection\r\n         HashSet<string> targetItems = wantFullList\r\n            ? new(masterData)\r\n            : new(masterData.Where(item =>\r\n               item?.IndexOf(filterText ?? string.Empty, StringComparison.OrdinalIgnoreCase) >= 0));\r\n\r\n         // Remove items that shouldn't be there\r\n         string selectedItemText = comboBox?.SelectedItem?.ToString() ?? \"\";\r\n         bool selectedItemWillBeRemoved = !string.IsNullOrEmpty(selectedItemText) && !targetItems.Contains(selectedItemText);\r\n         if (selectedItemWillBeRemoved)\r\n         {\r\n            RemoveSelectedItemPreservingText(comboBox, targetCollection, targetItems);\r\n         }\r\n\r\n         // Remove remaining non-matching items \r\n         for (int i = targetCollection.Count - 1; i >= 0; i--)\r\n         {\r\n            if (!targetItems.Contains(targetCollection[i]))\r\n            {\r\n               targetCollection.RemoveAt(i);\r\n            }\r\n         }\r\n\r\n         // Add missing items in correct sorted position\r\n         foreach (var item in targetItems.OrderBy(x => x))\r\n         {\r\n            if (targetCollection.Contains(item))\r\n               continue;\r\n\r\n            // Find correct insertion position to maintain sort order\r\n            int insertIndex = 0;\r\n            for (int i = 0; i < targetCollection.Count; i++)\r\n            {\r\n               if (string.Compare(item, targetCollection[i], StringComparison.OrdinalIgnoreCase) < 0)\r\n               {\r\n                  insertIndex = i;\r\n                  break;\r\n               }\r\n               insertIndex = i + 1;\r\n            }\r\n            targetCollection.Insert(insertIndex, item);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Removes the selected item from collection while preserving ComboBox text and caret position\r\n      /// </summary>\r\n      /// <param name=\"comboBox\">The ComboBox whose selected item will be removed</param>\r\n      /// <param name=\"targetCollection\">The collection to remove the item from</param>\r\n      /// <param name=\"targetItems\">The items that should remain (used for validation)</param>\r\n      public static void RemoveSelectedItemPreservingText(ComboBox comboBox, ObservableCollection<string> targetCollection, HashSet<string> targetItems)\r\n      {\r\n         if (comboBox?.SelectedItem == null || targetCollection == null)\r\n            return;\r\n\r\n         string selectedItem = comboBox.SelectedItem.ToString() ?? string.Empty;\r\n         string savedText = comboBox.Text ?? \"\";\r\n         int savedCaretPosition = GetCaretPosition(comboBox);\r\n\r\n         // Remove the selected item specifically\r\n         targetCollection.Remove(selectedItem);\r\n\r\n         // Restore text and caret position after ComboBox cleared it when selected item was removed\r\n         if (string.IsNullOrEmpty(comboBox.Text) && !string.IsNullOrEmpty(savedText))\r\n         {\r\n            comboBox.Text = savedText;\r\n            SetCaretPosition(comboBox, savedCaretPosition);\r\n         }\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCPropertyMapping/IFCNotificationMessageBox.xaml",
    "content": "﻿<auiw:ChildWindow x:Class=\"BIM.IFC.Export.UI.IFCNotificationMessageBox\"\r\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\r\n        xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\r\n        xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n        xmlns:weave=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:weave_d=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties.DesignTime;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:ctrl=\"clr-namespace:Autodesk.Weave.Wpf.Controls;assembly=Autodesk.Weave.Wpf\"\r\n        weave:FrameworkElementProperties.ApplyWeaveStyles=\"True\"\r\n        weave_d:FrameworkElementProperties.DesignTimeWeaveTheme=\"WeaveLightGray\"\r\n        mc:Ignorable=\"d\"\r\n        Title=\"{x:Static p:Resources.IFCNotificationMessageBox}\"\r\n        Name=\"ifcNotificationMessageBox\" ResizeMode=\"NoResize\" SizeToContent=\"WidthAndHeight\">\r\n\r\n   <StackPanel Width=\"Auto\" Orientation=\"Vertical\" VerticalAlignment=\"Center\" Margin=\"0,10,0,0\">\r\n      <StackPanel Orientation=\"Horizontal\" HorizontalAlignment=\"Center\">\r\n         <ctrl:WeaveIcon IconName=\"AlertS\" Margin=\"0,0,5,0\"/>\r\n         <TextBlock Name=\"textBlock_MsgText\" weave:TextBlockProperties.Variant=\"BodyBold\"/>\r\n      </StackPanel>\r\n\r\n      <StackPanel Orientation=\"Horizontal\" HorizontalAlignment=\"Center\">\r\n         <Button x:Name=\"button_Ok\" Content=\"{x:Static p:Resources.OK}\" Width=\"95\" weave:ButtonProperties.Variant=\"Solid\" Click=\"button_Ok_Click\" IsDefault=\"True\"/>\r\n         <Button x:Name=\"button_Cancel\" Content=\"{x:Static p:Resources.Cancel}\" Width=\"102\" IsCancel=\"True\" weave:ButtonProperties.Variant=\"Outline\" Click=\"button_Cancel_Click\"/>\r\n      </StackPanel>\r\n   </StackPanel>\r\n\r\n</auiw:ChildWindow>\r\n\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCPropertyMapping/IFCNotificationMessageBox.xaml.cs",
    "content": "﻿using Autodesk.UI.Windows;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// Interaction logic for IFCNotificationMessageBox.xaml\r\n   /// </summary>   \r\n   public partial class IFCNotificationMessageBox : ChildWindow\r\n   {\r\n      public IFCNotificationMessageBox(String messageText)\r\n      {\r\n         InitializeComponent();\r\n         textBlock_MsgText.Text = messageText;\r\n      }\r\n\r\n      private void button_Ok_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         DialogResult = true;\r\n         Close();\r\n      }\r\n\r\n      private void button_Cancel_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         DialogResult = false;\r\n         Close();\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCPropertyMapping/IFCPropertyFilter.xaml",
    "content": "﻿<auiw:ChildWindow x:Class=\"BIM.IFC.Export.UI.IFCPropertyFilter\"\r\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\r\n        xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n        xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\r\n        xmlns:local=\"clr-namespace:BIM.IFC.Export.UI\"\r\n        xmlns:weaveRoot=\"clr-namespace:Autodesk.Weave.Wpf;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:weave=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:ctrl=\"clr-namespace:Autodesk.Weave.Wpf.Controls;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:weave_d=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties.DesignTime;assembly=Autodesk.Weave.Wpf\"\r\n        mc:Ignorable=\"d\"\r\n        weave:FrameworkElementProperties.ApplyWeaveStyles=\"True\"\r\n        weave_d:FrameworkElementProperties.DesignTimeWeaveTheme=\"WeaveLightGray\"\r\n        Title=\"{x:Static p:Resources.Filter}\" \r\n        Height=\"210\" Width=\"210\" \r\n        MinHeight=\"200\" MinWidth=\"200\">\r\n   <Grid>\r\n      <Grid.RowDefinitions>\r\n         <RowDefinition Height=\"*\"/>\r\n         <RowDefinition Height=\"auto\"/>\r\n      </Grid.RowDefinitions>\r\n      \r\n      <StackPanel Grid.Row=\"0\">\r\n         <Label Name=\"label_PropertySet\" \r\n                Content=\"{x:Static p:Resources.PropertySet}\" \r\n                weave:LabelProperties.Variant=\"Top\"/>\r\n         <Grid HorizontalAlignment=\"Stretch\">\r\n            <TextBox Name=\"textBox_PropertySet\" \r\n                  weave:TextBoxProperties.Variant=\"Box\" \r\n                  Padding=\"0,0,24,0\"\r\n                  MinWidth=\"80\"\r\n                  HorizontalAlignment=\"Stretch\"\r\n                  weave:TextBoxProperties.HintText=\"{x:Static p:Resources.Value}\"/>\r\n            <ctrl:IconButton Name =\"button_PropertySetClean\" \r\n                             IconName=\"CloseSUI\" \r\n                             HorizontalAlignment=\"Right\" \r\n                             Click=\"button_PropertySetClean_Click\"/>\r\n         </Grid>\r\n         \r\n         <Label Name=\"label_Parameter\" \r\n                Content=\"{x:Static p:Resources.Parameter}\" \r\n                weave:LabelProperties.Variant=\"Top\"/>\r\n         <Grid HorizontalAlignment=\"Stretch\">\r\n            <TextBox Name=\"textBox_Parameter\" \r\n                     weave:TextBoxProperties.Variant=\"Box\" \r\n                     Padding=\"0,0,24,0\"\r\n                     MinWidth=\"80\"\r\n                     HorizontalAlignment=\"Stretch\"\r\n                     weave:TextBoxProperties.HintText=\"{x:Static p:Resources.Value}\"/>\r\n            <ctrl:IconButton Name =\"button_ParamaterClean\" \r\n                             IconName=\"CloseSUI\" \r\n                             HorizontalAlignment=\"Right\" \r\n                             Click=\"button_ParamaterClean_Click\"/>\r\n         </Grid>\r\n      </StackPanel>\r\n\r\n      <StackPanel Grid.Row=\"1\" Orientation=\"Horizontal\" HorizontalAlignment=\"Right\">\r\n         <Button x:Name=\"button_Remove\" \r\n                 Content=\"{x:Static p:Resources.Remove}\" \r\n                 weave:ButtonProperties.Variant=\"Solid\" \r\n                 Click=\"button_Remove_Click\"/>\r\n         <Button x:Name=\"button_Apply\" \r\n                 Content=\"{x:Static p:Resources.Apply}\"\r\n                 weave:ButtonProperties.Variant=\"Outline\"\r\n                 Click=\"button_Apply_Click\"/>\r\n      </StackPanel>\r\n   </Grid>\r\n</auiw:ChildWindow>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCPropertyMapping/IFCPropertyFilter.xaml.cs",
    "content": "﻿using Autodesk.Revit.DB;\nusing Autodesk.UI.Windows;\nusing System.ComponentModel;\nusing System.Runtime.CompilerServices;\nusing System.Windows;\n\nnamespace BIM.IFC.Export.UI\n{\n   /// <summary>\n   /// Interaction logic for IFCPropertyFilter.xaml\n   /// </summary>\n   public partial class IFCPropertyFilter : ChildWindow\n   {\n      public string PropertySetFilter { get; set; }\n\n      public string ParameterFilter { get; set; }\n\n      public IFCPropertyFilter(string propertySetFilter, string parameterFilter)\n      {\n         DataContext = this;\n         InitializeComponent();\n\n         PropertySetFilter = propertySetFilter;\n         ParameterFilter = parameterFilter;\n\n         textBox_PropertySet.Text = PropertySetFilter;\n         textBox_Parameter.Text = ParameterFilter;\n      }\n\n      private void button_Apply_Click(object sender, RoutedEventArgs e)\n      {\n         PropertySetFilter = textBox_PropertySet.Text;\n         ParameterFilter = textBox_Parameter.Text;\n      }\n\n      private void button_Remove_Click(object sender, RoutedEventArgs e)\n      {\n         textBox_PropertySet.Text = string.Empty;\n         textBox_Parameter.Text = string.Empty;\n      }\n\n      private void button_ParamaterClean_Click(object sender, RoutedEventArgs e)\n      {\n         textBox_Parameter.Text = string.Empty;\n      }\n\n      private void button_PropertySetClean_Click(object sender, RoutedEventArgs e)\n      {\n         textBox_PropertySet.Text = string.Empty;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCPropertyMapping/IFCPropertyMapping.xaml",
    "content": "﻿<auiw:ChildWindow x:Class=\"BIM.IFC.Export.UI.IFCPropertyMapping\"\r\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"        \r\n        xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\r\n        xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n        xmlns:local=\"clr-namespace:BIM.IFC.Export.UI\"\r\n        xmlns:weaveRoot=\"clr-namespace:Autodesk.Weave.Wpf;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:weave=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:ctrl=\"clr-namespace:Autodesk.Weave.Wpf.Controls;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:weave_d=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties.DesignTime;assembly=Autodesk.Weave.Wpf\"\r\n        d:DataContext=\"{d:DesignInstance Type=local:IFCPropertyMapping}\"\r\n        weave:FrameworkElementProperties.ApplyWeaveStyles=\"True\"\r\n        weave_d:FrameworkElementProperties.DesignTimeWeaveTheme=\"WeaveLightGray\"\r\n        mc:Ignorable=\"d\"\r\n        Title=\"{x:Static p:Resources.ManageDefaultPropertySets}\"\r\n        SaveWindowSettings=\"True\"\r\n        Height=\"559\" Width=\"947\" MinHeight=\"283\" MinWidth=\"730\" Closing=\"ChildWindow_Closing\" PreviewKeyDown=\"ChildWindow_PreviewKeyDown\" weave:WindowProperties.ContentPadding=\"None\">\r\n\r\n   <Grid weave:PanelProperties.Spacing=\"None\">\r\n\r\n      <Grid.Resources>\r\n         <local:EditButtonVisibilityConverter x:Key=\"EditButtonVisibilityConverter\"/>\r\n         <local:IsIFCColumnReadOnlyConverter x:Key=\"IsIFCColumnReadOnlyConverter\"/>\r\n         <local:EmptyToDefaulConverter x:Key=\"EmptyToDefaulConverter\"/>\r\n         <local:SetupNameToButtonVisibilityConverter x:Key=\"SetupNameToButtonVisibilityConverter\"/>\r\n         <local:SelectedSetupToFilterVisibilityConverter x:Key=\"SelectedSetupToFilterVisibilityConverter\"/>\r\n         <local:BoolToRowBackgroundColorConverter x:Key=\"BoolToRowBackgroundColorConverter\"/>\r\n         <local:BoolToGlyphColorConverter x:Key=\"BoolToGlyphColorConverter\"/>\r\n         <local:RowIndexConverter x:Key=\"RowIndexConverter\"/>\r\n         <local:TreeViewIndexConverter x:Key=\"TreeViewIndexConverter\"/>\r\n         <local:ElementIdToTooltipConverter x:Key=\"ElementIdToTooltipConverter\"/>\r\n         <SolidColorBrush x:Key=\"RowOutlineFocusedColor\">#FF38ABDF</SolidColorBrush>\r\n\r\n         <Style x:Key=\"TreeViewStyle\" TargetType=\"TreeView\" BasedOn=\"{x:Static weaveRoot:Styles.TreeViewStyle}\">\r\n            <Setter Property=\"OverridesDefaultStyle\" Value=\"True\"/>\r\n            <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\r\n            <Setter Property=\"ScrollViewer.VerticalScrollBarVisibility\" Value=\"Auto\"/>\r\n            <Setter Property=\"Template\">\r\n               <Setter.Value>\r\n                  <ControlTemplate TargetType=\"TreeView\">\r\n                     <Border Name=\"Border\" CornerRadius=\"1\" BorderThickness=\"1\">\r\n                        <ScrollViewer Focusable=\"False\" CanContentScroll=\"False\" Padding=\"4\" HorizontalScrollBarVisibility=\"Auto\">\r\n                           <ItemsPresenter />\r\n                        </ScrollViewer>\r\n                     </Border>\r\n                  </ControlTemplate>\r\n               </Setter.Value>\r\n            </Setter>\r\n         </Style>\r\n\r\n         <Style x:Key=\"ExpandCollapseToggleStyle\" TargetType=\"ToggleButton\">\r\n            <Setter Property=\"Focusable\" Value=\"False\"/>\r\n            <Setter Property=\"VerticalAlignment\" Value=\"Top\"/>\r\n            <Setter Property=\"Margin\" Value=\"0,6,0,0\"/>\r\n            <Setter Property=\"Template\">\r\n               <Setter.Value>\r\n                  <ControlTemplate TargetType=\"ToggleButton\">\r\n                     <Grid Width=\"15\"\r\n                          Height=\"13\"\r\n                          Background=\"Transparent\">\r\n                        <VisualStateManager.VisualStateGroups>\r\n                           <VisualStateGroup x:Name=\"CheckStates\">\r\n                              <VisualState x:Name=\"Checked\">\r\n                                 <Storyboard>\r\n                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty=\"(UIElement.Visibility)\"\r\n                                                                   Storyboard.TargetName=\"Collapsed\">\r\n                                       <DiscreteObjectKeyFrame KeyTime=\"0\"\r\n                                        Value=\"{x:Static Visibility.Hidden}\"/>\r\n                                    </ObjectAnimationUsingKeyFrames>\r\n                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty=\"(UIElement.Visibility)\"\r\n                                                                   Storyboard.TargetName=\"Expanded\">\r\n                                       <DiscreteObjectKeyFrame KeyTime=\"0\"\r\n                                                               Value=\"{x:Static Visibility.Visible}\"/>\r\n                                    </ObjectAnimationUsingKeyFrames>\r\n                                 </Storyboard>\r\n                              </VisualState>\r\n                              <VisualState x:Name=\"Unchecked\"/>\r\n                              <VisualState x:Name=\"Indeterminate\"/>\r\n                           </VisualStateGroup>\r\n                        </VisualStateManager.VisualStateGroups>\r\n                        <Path x:Name=\"Collapsed\"\r\n                              HorizontalAlignment=\"Left\"\r\n                              VerticalAlignment=\"Center\"\r\n                              Margin=\"1,1,1,1\"\r\n                              Data=\"M 4 0 L 8 4 L 4 8 Z\">\r\n                           <Path.Resources>\r\n                              <SolidColorBrush x:Key=\"GlyphColor\">#FF444444</SolidColorBrush>\r\n                              <SolidColorBrush x:Key=\"GlyphColorDark\">#FFFFFFFF</SolidColorBrush>\r\n                           </Path.Resources>\r\n                           <Path.Fill>\r\n                              <MultiBinding Converter=\"{StaticResource BoolToGlyphColorConverter}\">\r\n                                 <Binding Path=\"IsRevitThemeDark\" RelativeSource=\"{RelativeSource Mode=FindAncestor,AncestorType=Window}\"/>\r\n                                 <Binding RelativeSource=\"{RelativeSource Self}\"/>\r\n                              </MultiBinding>\r\n                           </Path.Fill>\r\n                        </Path>\r\n                        <Path x:Name=\"Expanded\"\r\n                              HorizontalAlignment=\"Left\"\r\n                              VerticalAlignment=\"Center\"\r\n                              Margin=\"1,1,1,1\"\r\n                              Data=\"M 0 4 L 8 4 L 4 8 Z\"\r\n                              Visibility=\"Hidden\">\r\n\r\n                           <Path.Resources>\r\n                              <SolidColorBrush x:Key=\"GlyphColor\">#FF444444</SolidColorBrush>\r\n                              <SolidColorBrush x:Key=\"GlyphColorDark\">#FFFFFFFF</SolidColorBrush>\r\n                           </Path.Resources>\r\n                           <Path.Fill>\r\n                              <MultiBinding Converter=\"{StaticResource BoolToGlyphColorConverter}\">\r\n                                 <Binding Path=\"IsRevitThemeDark\" RelativeSource=\"{RelativeSource Mode=FindAncestor,AncestorType=Window}\"/>\r\n                                 <Binding RelativeSource=\"{RelativeSource Self}\"/>\r\n                              </MultiBinding>\r\n                           </Path.Fill>\r\n                        </Path>\r\n                     </Grid>\r\n                  </ControlTemplate>\r\n               </Setter.Value>\r\n            </Setter>\r\n         </Style>\r\n\r\n         <Style x:Key=\"TreeViewItemFocusVisual\">\r\n            <Setter Property=\"Control.Template\">\r\n               <Setter.Value>\r\n                  <ControlTemplate>\r\n                     <Border>\r\n                        <Rectangle Margin=\"0,0,0,0\"\r\n                                   StrokeThickness=\"5\"\r\n                                   Stroke=\"Black\"\r\n                                   StrokeDashArray=\"1 2\"\r\n                                   Opacity=\"0\"/>\r\n                     </Border>\r\n                  </ControlTemplate>\r\n               </Setter.Value>\r\n            </Setter>\r\n         </Style>\r\n\r\n         <Style x:Key=\"{x:Type TreeViewItem}\" TargetType=\"{x:Type TreeViewItem}\" BasedOn=\"{x:Static weaveRoot:Styles.TreeViewItemStyle}\">\r\n            <Setter Property=\"Background\" Value=\"Transparent\"/>\r\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"{Binding Path=HorizontalContentAlignment,\r\n               RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}\"/>\r\n            <Setter Property=\"VerticalContentAlignment\" Value=\"{Binding Path=VerticalContentAlignment,\r\n               RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}\"/>\r\n            <Setter Property=\"Padding\" Value=\"1,0,0,0\"/>\r\n            <Setter Property=\"Foreground\" Value=\"{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}\"/>\r\n            <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource TreeViewItemFocusVisual}\"/>\r\n            <Setter Property=\"Template\">\r\n               <Setter.Value>\r\n                  <ControlTemplate TargetType=\"{x:Type TreeViewItem}\">\r\n                     <Grid>\r\n                        <Grid.ColumnDefinitions>\r\n                           <ColumnDefinition Width=\"Auto\"/>\r\n                           <ColumnDefinition MinWidth=\"19\" MaxWidth=\"19\"/>\r\n                           <ColumnDefinition Width=\"*\"/>\r\n                        </Grid.ColumnDefinitions>\r\n                        <Grid.RowDefinitions>\r\n                           <RowDefinition Height=\"Auto\"/>\r\n                           <RowDefinition/>\r\n                        </Grid.RowDefinitions>\r\n                        <VisualStateManager.VisualStateGroups>\r\n                           <VisualStateGroup x:Name=\"ExpansionStates\">\r\n                              <VisualState x:Name=\"Expanded\">\r\n                                 <Storyboard>\r\n                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty=\"(UIElement.Visibility)\"\r\n                                                                   Storyboard.TargetName=\"ItemsHost\">\r\n                                       <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{x:Static Visibility.Visible}\"/>\r\n                                    </ObjectAnimationUsingKeyFrames>\r\n                                 </Storyboard>\r\n                              </VisualState>\r\n                              <VisualState x:Name=\"Collapsed\"/>\r\n                           </VisualStateGroup>\r\n                        </VisualStateManager.VisualStateGroups>\r\n\r\n                        <Rectangle x:Name=\"RowBackground\" Grid.ColumnSpan=\"1\" SnapsToDevicePixels=\"true\" StrokeThickness=\"0\"\r\n                                    Width=\"Auto\">\r\n                           <Rectangle.Resources>\r\n                              <SolidColorBrush x:Key=\"RowBackgroundFocusedColor\">#CDEAF7</SolidColorBrush>\r\n                              <SolidColorBrush x:Key=\"RowBackgroundFocusedColorDark\">#006EAF</SolidColorBrush>\r\n                           </Rectangle.Resources>\r\n                        </Rectangle>\r\n                        <ToggleButton x:Name=\"Expander\" Style=\"{StaticResource ExpandCollapseToggleStyle}\"\r\n                                      ClickMode=\"Press\"\r\n                                      Grid.Column=\"1\"\r\n                                      IsChecked=\"{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}\"/>\r\n                        <Border x:Name=\"Bd\"\r\n                                Grid.Column=\"0\"\r\n                                Background=\"{TemplateBinding Background}\"\r\n                                BorderBrush=\"{TemplateBinding BorderBrush}\"\r\n                                BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                                Padding=\"{TemplateBinding Padding}\">\r\n                           <ContentPresenter x:Name=\"PART_Header\"\r\n                                              ContentSource=\"Header\"\r\n                                              HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"/>\r\n                        </Border>\r\n                        <ItemsPresenter x:Name=\"ItemsHost\"\r\n                                        Grid.Row=\"1\"\r\n                                        Grid.Column=\"0\"\r\n                                        Grid.ColumnSpan=\"20\"\r\n                                        Visibility=\"Collapsed\"/>\r\n                     </Grid>\r\n                     <ControlTemplate.Triggers>\r\n                        <Trigger Property=\"HasItems\" Value=\"false\">\r\n                           <Setter TargetName=\"Expander\"\r\n                                    Property=\"Visibility\"\r\n                                    Value=\"Hidden\"/>\r\n                        </Trigger>\r\n                        <MultiTrigger>\r\n                           <MultiTrigger.Conditions>\r\n                              <Condition Property=\"HasHeader\" Value=\"false\"/>\r\n                              <Condition Property=\"Width\" Value=\"Auto\"/>\r\n                           </MultiTrigger.Conditions>\r\n                           <Setter TargetName=\"PART_Header\"\r\n                                    Property=\"MinWidth\"\r\n                                    Value=\"75\"/>\r\n                        </MultiTrigger>\r\n                        <MultiTrigger>\r\n                           <MultiTrigger.Conditions>\r\n                              <Condition Property=\"HasHeader\" Value=\"false\"/>\r\n                              <Condition Property=\"Height\" Value=\"Auto\"/>\r\n                           </MultiTrigger.Conditions>\r\n                           <Setter TargetName=\"PART_Header\"\r\n                                    Property=\"MinHeight\"\r\n                                    Value=\"19\"/>\r\n                        </MultiTrigger>\r\n\r\n                        <MultiDataTrigger>\r\n                           <MultiDataTrigger.Conditions>\r\n                              <Condition Binding=\"{Binding IsMouseOver, RelativeSource={RelativeSource Self}}\" Value=\"True\"/>\r\n                              <Condition Binding=\"{Binding IsMouseOver, ElementName=ItemsHost}\" Value=\"false\"/>\r\n                           </MultiDataTrigger.Conditions>\r\n                           <Setter Property=\"Fill\" TargetName=\"RowBackground\" Value=\"#1a808080\"/>\r\n                        </MultiDataTrigger>\r\n\r\n                        <MultiDataTrigger>\r\n                           <MultiDataTrigger.Conditions>\r\n                              <Condition Binding=\"{Binding IsFocused, RelativeSource={RelativeSource Self}}\" Value=\"True\"/>\r\n                              <Condition Binding=\"{Binding IsFocused, ElementName=ItemsHost}\" Value=\"false\"/>\r\n                              <Condition Binding=\"{Binding IsSelected, RelativeSource={RelativeSource Self}}\" Value=\"True\"/>\r\n                           </MultiDataTrigger.Conditions>\r\n\r\n                           <Setter Property=\"Fill\" TargetName=\"RowBackground\">\r\n                              <Setter.Value>\r\n                                 <MultiBinding Converter=\"{StaticResource BoolToRowBackgroundColorConverter}\">\r\n                                    <Binding Path=\"IsRevitThemeDark\" RelativeSource=\"{RelativeSource Mode=FindAncestor, AncestorType=Window}\"/>\r\n                                    <Binding RelativeSource=\"{RelativeSource Self}\"/>\r\n                                 </MultiBinding>\r\n                              </Setter.Value>\r\n                           </Setter>\r\n                           <Setter Property=\"BorderBrush\" TargetName=\"Bd\" Value=\"{StaticResource RowOutlineFocusedColor}\"/>\r\n                        </MultiDataTrigger>\r\n\r\n                     </ControlTemplate.Triggers>\r\n                  </ControlTemplate>\r\n               </Setter.Value>\r\n            </Setter>\r\n         </Style>\r\n\r\n         <Style TargetType=\"{x:Type ListBox}\" BasedOn=\"{x:Static weaveRoot:Styles.ListBoxStyle}\"/>\r\n         <Style x:Key=\"ListBoxItemStyle\" TargetType=\"ListBoxItem\" BasedOn=\"{x:Static weaveRoot:Styles.ListBoxItemStyle}\">\r\n            <Setter Property=\"ToolTip\" Value=\"{Binding}\"/>\r\n         </Style>\r\n         <Style TargetType=\"{x:Type CheckBox}\" BasedOn=\"{x:Static weaveRoot:Styles.CheckBoxStyle}\"/>\r\n         <Style x:Key=\"CheckBoxStyle\" TargetType=\"{x:Type CheckBox}\" BasedOn=\"{x:Static weaveRoot:Styles.CheckBoxStyle}\">\r\n            <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\r\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\r\n         </Style>\r\n         <Style TargetType=\"{x:Type Button}\" BasedOn=\"{x:Static weaveRoot:Styles.ButtonStyle}\"/>\r\n         <Style TargetType=\"{x:Type ComboBox}\" BasedOn=\"{x:Static weaveRoot:Styles.ComboBoxStyle}\"/>\r\n         <Style TargetType=\"{x:Type Label}\" BasedOn=\"{x:Static weaveRoot:Styles.LabelStyle}\"/>\r\n         <Style TargetType=\"{x:Type TextBox}\" BasedOn=\"{x:Static weaveRoot:Styles.TextBoxStyle}\"/>\r\n         <Style TargetType=\"{x:Type TextBlock}\" BasedOn=\"{x:Static weaveRoot:Styles.TextBlockStyle}\"/>\r\n         <Style x:Key=\"TextBlockStyle\" TargetType=\"{x:Type TextBlock}\" BasedOn=\"{x:Static weaveRoot:Styles.TextBlockStyle}\">\r\n            <Setter Property=\"Margin\" Value=\"0,5,0,0\"/>\r\n            <Setter Property=\"weave:TextBlockProperties.Variant\" Value=\"BodyRegular\"/>\r\n         </Style>\r\n         <Style x:Key=\"DataGridCellStyle\" TargetType=\"DataGridCell\" BasedOn=\"{x:Static weaveRoot:Styles.DataGridCellStyle}\">\r\n            <Setter Property=\"Margin\" Value=\"0,0,0,0\"/>\r\n         </Style>\r\n         <Style x:Key=\"DataGridColumnHeaderStyle\" TargetType=\"DataGridColumnHeader\" BasedOn=\"{x:Static weaveRoot:Styles.DataGridColumnHeaderStyle}\">\r\n            <Setter Property=\"Margin\" Value=\"0,0,0,0\"/>\r\n         </Style>\r\n         <Style x:Key=\"StackPanelStyle\" TargetType=\"{x:Type StackPanel}\">\r\n            <Setter Property=\"Orientation\" Value=\"Horizontal\"/>\r\n         </Style>\r\n      </Grid.Resources>\r\n\r\n      <Grid.RowDefinitions>\r\n         <RowDefinition Height=\"*\"/>\r\n         <RowDefinition Height=\"Auto\"/>\r\n      </Grid.RowDefinitions>\r\n      <Grid.ColumnDefinitions>\r\n         <ColumnDefinition Width=\"1*\" MaxWidth=\"280\" MinWidth=\"{Binding ActualWidth, ElementName=dockPanelMappingTemplates}\"/>\r\n         <ColumnDefinition Width=\"1*\" MinWidth=\"{Binding MinWidth, ElementName=dockPanelPropertySetups}\"/>\r\n         <ColumnDefinition Width=\"2*\"/>\r\n      </Grid.ColumnDefinitions>\r\n\r\n      <Border Grid.Column=\"0\" weave:BorderProperties.SurfaceLevel=\"Level250\">\r\n         <DockPanel Margin=\"8,0,0,0\">\r\n            <DockPanel Name=\"dockPanelMappingTemplates\" MinWidth=\"222\" Margin=\"0,8,0,0\">\r\n               <StackPanel Orientation=\"Horizontal\" DockPanel.Dock=\"Top\" Margin=\"0,0,0,4\">\r\n                  <TextBlock Text=\"{x:Static p:Resources.ParameterMappingSettings}\" weave:TextBlockProperties.Variant=\"BodyRegular\"/>\r\n               </StackPanel>\r\n               <StackPanel Name=\"stackPanel_buttons\" Orientation=\"Horizontal\" DockPanel.Dock=\"Top\" Margin=\"0,4,0,4\" HorizontalAlignment=\"Stretch\">\r\n                  <ctrl:IconButton Name=\"button_Add\" IconName=\"AddS\" Click=\"button_Add_Click\">\r\n                     <Button.ToolTip>\r\n                        <ToolTip Content=\"{x:Static p:Resources.CreateNewTemplateTooltip}\" Placement=\"Top\"/>\r\n                     </Button.ToolTip>\r\n                  </ctrl:IconButton>\r\n                  <ctrl:IconButton Name=\"button_Import\" IconName=\"ImportS\" Click=\"button_Import_Click\">\r\n                     <Button.ToolTip>\r\n                        <ToolTip Content=\"{x:Static p:Resources.ImportTemplateTooltip}\" Placement=\"Top\"/>\r\n                     </Button.ToolTip>\r\n                  </ctrl:IconButton>\r\n                  <ctrl:IconButton Name=\"button_Copy\" IconName=\"CopyS\" Click=\"button_Copy_Click\">\r\n                     <Button.ToolTip>\r\n                        <ToolTip Content=\"{x:Static p:Resources.CopyTemplateTooltip}\" Placement=\"Top\"/>\r\n                     </Button.ToolTip>\r\n                  </ctrl:IconButton>\r\n                  <ctrl:IconButton Name=\"button_Save\" IconName=\"SaveS\" Click=\"button_Save_Click\">\r\n                     <Button.ToolTip>\r\n                        <ToolTip Content=\"{x:Static p:Resources.SaveTemplateTooltip}\" Placement=\"Top\"/>\r\n                     </Button.ToolTip>\r\n                  </ctrl:IconButton>\r\n                  <ctrl:IconButton Name=\"button_Export\" IconName=\"ExportMoveS\" Click=\"button_Export_Click\">\r\n                     <Button.ToolTip>\r\n                        <ToolTip Content=\"{x:Static p:Resources.ExportTemplateTooltip}\" Placement=\"Top\"/>\r\n                     </Button.ToolTip>\r\n                  </ctrl:IconButton>\r\n                  <ctrl:IconButton Name=\"button_Rename\" IconName=\"RenameS\" Click=\"button_Rename_Click\">\r\n                     <Button.ToolTip>\r\n                        <ToolTip Content=\"{x:Static p:Resources.RenameTemplateTooltip}\" Placement=\"Top\"/>\r\n                     </Button.ToolTip>\r\n                  </ctrl:IconButton>\r\n                  <ctrl:IconButton Name=\"button_Delete\" IconName=\"TrashS\" Click=\"button_Delete_Click\">\r\n                     <Button.ToolTip>\r\n                        <ToolTip Content=\"{x:Static p:Resources.DeleteTemplateTooltip}\" Placement=\"Top\"/>\r\n                     </Button.ToolTip>\r\n                  </ctrl:IconButton>\r\n               </StackPanel>\r\n               <ListBox Name=\"listBox_MappingTemplates\" ItemContainerStyle=\"{StaticResource ListBoxItemStyle}\" \r\n                      ScrollViewer.HorizontalScrollBarVisibility=\"Auto\" HorizontalContentAlignment=\"Left\"\r\n                      ScrollViewer.VerticalScrollBarVisibility=\"Auto\"\r\n                     SelectionChanged=\"listBox_MappingTemplates_SelectionChanged\"\r\n                     Margin=\"0,4,0,4\">\r\n                  <ListBox.Resources>\r\n                     <Style TargetType=\"ToolTip\" BasedOn=\"{x:Static weaveRoot:Styles.ToolTipStyle}\">\r\n                        <Setter Property=\"Placement\" Value=\"Bottom\"/>\r\n                     </Style>\r\n                  </ListBox.Resources>\r\n               </ListBox>\r\n            </DockPanel>\r\n         </DockPanel>\r\n      </Border>\r\n\r\n      <Border Grid.Column=\"1\" weave:BorderProperties.SurfaceLevel=\"Level200\">\r\n         <DockPanel Name=\"dockPanelPropertySetups\" weave:PanelProperties.Spacing=\"S\" Margin=\"0,0,0,0\" MinWidth=\"225\" HorizontalAlignment=\"Stretch\">\r\n            <TextBlock Name=\"textBlock_SelectedTemplateName\" weave:TextBlockProperties.Variant=\"BodyRegular\" Margin=\"13,0,0,3\" DockPanel.Dock=\"Top\"/>\r\n            <StackPanel Orientation=\"Horizontal\" Width=\"Auto\" Margin=\"13,0,0,6\" DockPanel.Dock=\"Top\">\r\n               <TextBlock x:Name=\"textBlock_Schema\" Text=\"{x:Static p:Resources.IFCSchema}\" weave:TextBlockProperties.Variant=\"CaptionRegular\" VerticalAlignment=\"Center\"/>\r\n               <ComboBox x:Name=\"comboBox_IFCSchema\" ItemsSource=\"{Binding IfcSchemas}\" Margin=\"10,0,0,0\" SelectedValue=\"{Binding SelectedIfcSchema}\" SelectionChanged=\"comboBox_IFCSchema_SelectionChanged\" VerticalContentAlignment=\"Center\" VerticalAlignment=\"Top\"/>\r\n            </StackPanel>\r\n            <Grid Margin=\"13,2,8,0\" DockPanel.Dock=\"Top\">\r\n               <Grid.ColumnDefinitions>\r\n                  <ColumnDefinition Width=\"Auto\"/>\r\n                  <ColumnDefinition Width=\"*\"/>\r\n               </Grid.ColumnDefinitions>\r\n               <ctrl:IconButton Name=\"button_Filter\" IconName=\"FilterS\" Grid.Column=\"0\" Margin=\"0,0,0,0\"/>\r\n               <Grid Grid.Column=\"1\" Margin=\"8,0,0,0\" HorizontalAlignment=\"Stretch\">\r\n                  <TextBox Name=\"textBox_Search\" HorizontalAlignment=\"Stretch\"\r\n                                 Height=\"Auto\" Padding=\"0,0,20,0\"\r\n                                 MinWidth=\"80\"\r\n                                 weave:TextBoxProperties.Variant=\"Box\" \r\n                                 weave:TextBoxProperties.HintText=\"{x:Static p:Resources.TypeToFilter}\" \r\n                                 TextChanged=\"textBox_Search_TextChanged\" VerticalAlignment=\"Top\"/>\r\n                  <ctrl:IconButton Name =\"button_PropertySetClean\"\r\n                                IconName=\"CloseSUI\" \r\n                                HorizontalAlignment=\"Right\" Click=\"button_PropertySetClean_Click\" VerticalAlignment=\"Center\"/>\r\n               </Grid>\r\n            </Grid>\r\n\r\n            <TreeView Name=\"treeView_PropertySetups\" Margin=\"0,5,0,0\" DockPanel.Dock=\"Top\" Style=\"{StaticResource TreeViewStyle}\"\r\n                            ItemsSource=\"{Binding SetupInfos}\" weave:TreeViewProperties.ShowGuidelines=\"False\" \r\n                            weave:TreeViewProperties.Indicator=\"Caret\"\r\n                            SelectedItemChanged=\"treeView_PropertySetups_SelectedItemChanged\">\r\n               <TreeView.ItemTemplate>\r\n                  <HierarchicalDataTemplate ItemsSource=\"{Binding PSetMappingInfos}\">\r\n                     <StackPanel Orientation=\"Vertical\">\r\n                        <StackPanel Style=\"{StaticResource StackPanelStyle}\">\r\n                           <CheckBox IsChecked=\"{Binding ExportSetup}\"\r\n                                     IsEnabled=\"{Binding DataContext.IsCustomConfiguration, RelativeSource={RelativeSource AncestorType=Window}}\"\r\n                                     AutomationProperties.AutomationId=\"{Binding RelativeSource={RelativeSource AncestorType=TreeViewItem},\r\n                                     StringFormat=checkBox_Setup_{0}, Converter={StaticResource TreeViewIndexConverter} }\">\r\n                              <CheckBox.ToolTip>\r\n                                 <ToolTip Content=\"{x:Static p:Resources.SelectedPropertySetCheckboxTooltip}\" Placement=\"Bottom\"/>\r\n                              </CheckBox.ToolTip>\r\n                           </CheckBox>\r\n                           <TextBlock Text=\"{Binding SetupName}\" Style=\"{StaticResource TextBlockStyle}\"/>\r\n                        </StackPanel>\r\n                        <Button Name=\"button_AddPropertySet\" HorizontalAlignment=\"Left\" Margin=\"25,4,4,4\"\r\n                                Content=\"{x:Static p:Resources.AddPropertySet}\" weave:ButtonProperties.Variant=\"Outline\"\r\n                                Click=\"button_AddPropertySet_Click\"\r\n                                Visibility=\"{Binding PropertySetup, Converter={StaticResource SetupNameToButtonVisibilityConverter}}\"\r\n                                AutomationProperties.AutomationId=\"{Binding RelativeSource={RelativeSource AncestorType=TreeViewItem},\r\n                                StringFormat=button_AddPropertySet_{0}, Converter={StaticResource TreeViewIndexConverter} }\"/>\r\n                     </StackPanel>\r\n                     <HierarchicalDataTemplate.ItemTemplate>\r\n                        <DataTemplate>\r\n                           <StackPanel Style=\"{StaticResource StackPanelStyle}\" Margin=\"20,0,0,0\">\r\n                              <CheckBox IsChecked=\"{Binding ExportFlag}\"\r\n                                       IsEnabled=\"{Binding DataContext.IsCustomConfiguration, RelativeSource={RelativeSource AncestorType=Window}}\"\r\n                                       AutomationProperties.AutomationId=\"{Binding AutomationId}\"\r\n                                       Click=\"checkBox_PropertySet_Click\">\r\n                                 <CheckBox.ToolTip>\r\n                                    <ToolTip Content=\"{x:Static p:Resources.SelectedPropertySetCheckboxTooltip}\" Placement=\"Bottom\"/>\r\n                                 </CheckBox.ToolTip>\r\n                              </CheckBox>\r\n                              <TextBlock Text=\"{Binding Name}\" Style=\"{StaticResource TextBlockStyle}\"/>\r\n                           </StackPanel>\r\n                        </DataTemplate>\r\n                     </HierarchicalDataTemplate.ItemTemplate>\r\n                  </HierarchicalDataTemplate>\r\n               </TreeView.ItemTemplate>\r\n            </TreeView>\r\n         </DockPanel>\r\n      </Border>\r\n\r\n      <Border Grid.Column=\"2\" weave:BorderProperties.SurfaceLevel=\"Level100\" Margin=\"0,8,0,0\">\r\n         <DockPanel Margin=\"8,0,8,0\">\r\n            <Grid DockPanel.Dock=\"Top\" Margin=\"0,4,0,4\">\r\n               <Grid.ColumnDefinitions>\r\n                  <ColumnDefinition Width=\"*\"/>\r\n                  <ColumnDefinition Width=\"Auto\"/>\r\n               </Grid.ColumnDefinitions>\r\n               <StackPanel Grid.Column=\"0\" Orientation=\"Vertical\">\r\n                  <TextBlock Name=\"textBlock_PropertySetName\" \r\n                             weave:TextBlockProperties.Variant=\"BodyRegular\" Width=\"Auto\"  Margin=\"0,0,0,4\"/>\r\n                  <StackPanel Name=\"filterCategoryStackPanel\" Margin=\"0,4,0,0\"\r\n                              Orientation=\"Vertical\"\r\n                              weave:PanelProperties.Spacing=\"Xs\"\r\n                              Visibility=\"{Binding ElementName=treeView_PropertySetups, Path=SelectedItem, Converter={StaticResource SelectedSetupToFilterVisibilityConverter}}\">\r\n                     <TextBlock Name=\"textBlock_PropertySetFilterLabel\"\r\n                             Text=\"{x:Static p:Resources.FilterByCategory}\"\r\n                             weave:TextBlockProperties.Variant=\"CaptionRegular\" Width=\"Auto\"\r\n                              Visibility=\"{Binding ElementName=button_ResetAll, Path=Visibility}\"/>\r\n                     <ComboBox Name=\"comboBox_CategoryName\"  Width=\"200\"\r\n                            HorizontalAlignment=\"Left\"\r\n                            VerticalAlignment=\"Center\"\r\n                            IsEnabled=\"{Binding IsCustomConfiguration}\" \r\n                            Visibility=\"{Binding ElementName=button_ResetAll, Path=Visibility}\"\r\n                            SelectionChanged=\"comboBox_CategoryName_SelectionChanged\"/>\r\n                  </StackPanel>\r\n               </StackPanel>\r\n               <Button Grid.Column=\"1\" Name=\"button_ResetAll\" Margin=\"4,0,-4,0\" weave:ButtonProperties.Variant=\"Flat\" Click=\"button_ResetAll_Click\" HorizontalAlignment=\"Right\" VerticalContentAlignment=\"Center\" VerticalAlignment=\"Center\">\r\n                  <StackPanel Orientation=\"Horizontal\" Width=\"Auto\" VerticalAlignment=\"Center\">\r\n                     <Image Source=\"../icons/data-refresh.png\" Width=\"Auto\" HorizontalAlignment=\"Stretch\"/>\r\n                     <TextBlock Name=\"label_ResetAll\" Text=\"{x:Static p:Resources.ResetAll}\" weave:TextBlockProperties.Variant=\"BodyRegular\"  Margin=\"4,0,-4,0\" HorizontalAlignment=\"Right\"/>\r\n                  </StackPanel>\r\n                  <Button.ToolTip>\r\n                     <ToolTip Content=\"{x:Static p:Resources.ResetToDefault}\" Placement=\"Left\"/>\r\n                  </Button.ToolTip>\r\n               </Button>\r\n            </Grid>\r\n\r\n            <StackPanel Orientation=\"Vertical\">\r\n               <TextBlock Name=\"textBlock_EmptyStatePsetsInfo\" HorizontalAlignment=\"Center\" weave:TextBlockProperties.Variant=\"H3Medium\" TextWrapping=\"Wrap\" TextAlignment=\"Center\" Margin=\"8\"/>\r\n               <Image Name=\"image_EmptyStatePsets\" Width=\"488\" Height=\"266\" Source=\"../icons/empty-state.png\" HorizontalAlignment=\"Stretch\" Margin=\"4\"/>\r\n               <TextBlock Name=\"textBlock_EmptyStatePsets\" Text=\"{x:Static p:Resources.EmptyStatePropertySet}\" HorizontalAlignment=\"Center\" weave:TextBlockProperties.Variant=\"H3Regular\"\r\n                          TextWrapping=\"Wrap\" TextAlignment=\"Center\" Margin=\"8\"/>\r\n            </StackPanel>\r\n\r\n            <DataGrid Name=\"dataGrid_PropertyMapping\" ItemsSource=\"{Binding ObservableProperties}\"\r\n                      weave:FrameworkElementProperties.ApplyWeaveStyles=\"True\"\r\n                      AutoGenerateColumns=\"False\"                      \r\n                      HorizontalAlignment=\"Center\"\r\n                      CanUserAddRows=\"False\"\r\n                      CanUserDeleteRows=\"False\"\r\n                      CanUserResizeRows=\"False\"\r\n                      CanUserReorderColumns=\"False\"\r\n                      CanUserResizeColumns=\"True\"\r\n                      CanUserSortColumns=\"True\"\r\n                      weave:DataGridProperties.Stripped=\"False\"\r\n                      weave:DataGridProperties.SelectAllVisibility=\"True\"\r\n                      weave:DataGridProperties.ShowColumnContextMenu=\"True\"\r\n                      SelectionMode=\"Single\"\r\n                      HeadersVisibility=\"Column\" \r\n                      SnapsToDevicePixels=\"True\"\r\n                      RowHeight=\"27\" Margin=\"0,4,0,4\">\r\n\r\n               <DataGrid.Columns>\r\n                  <DataGridTemplateColumn>\r\n                     <DataGridTemplateColumn.HeaderTemplate>\r\n                        <DataTemplate>\r\n                           <StackPanel Orientation=\"Horizontal\">\r\n                              <CheckBox Name=\"checkBox_ExportFlagAll\" IsChecked=\"{Binding DataContext.ExportFlagAll, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}\"\r\n                                       IsEnabled=\"{Binding DataContext.IsCustomConfiguration, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}\">\r\n                                 <CheckBox.ToolTip>\r\n                                    <ToolTip Content=\"{x:Static p:Resources.SelectedPropertiesCheckboxTooltip}\" Placement=\"Bottom\"/>\r\n                                 </CheckBox.ToolTip>\r\n                              </CheckBox>\r\n                           </StackPanel>\r\n                        </DataTemplate>\r\n                     </DataGridTemplateColumn.HeaderTemplate>\r\n                     <DataGridTemplateColumn.CellStyle>\r\n                        <Style TargetType=\"DataGridCell\" BasedOn=\"{x:Static weaveRoot:Styles.DataGridCellStyle}\">\r\n                           <Setter Property=\"Template\">\r\n                              <Setter.Value>\r\n                                 <ControlTemplate TargetType=\"DataGridCell\">\r\n                                    <StackPanel Orientation=\"Horizontal\" Margin=\"{TemplateBinding Padding}\">\r\n                                       <CheckBox Name=\"checkBox_ExportFlag\" Style=\"{StaticResource CheckBoxStyle}\" IsChecked=\"{Binding Path=ExportFlag, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\r\n                                                 IsEnabled=\"{Binding DataContext.IsCustomConfiguration, RelativeSource={RelativeSource AncestorType=DataGrid}}\"\r\n                                                 Click=\"ExportFlagClick\" HorizontalAlignment=\"Stretch\"\r\n                                                  AutomationProperties.AutomationId=\"{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, \r\n                                                                                      StringFormat=checkBox_ExportFlag_{0}, \r\n                                                                                      Converter={StaticResource RowIndexConverter} }\">\r\n                                          <CheckBox.ToolTip>\r\n                                             <ToolTip Content=\"{x:Static p:Resources.SelectedPropertiesCheckboxTooltip}\" Placement=\"Bottom\"/>\r\n                                          </CheckBox.ToolTip>\r\n                                       </CheckBox>\r\n                                    </StackPanel>\r\n                                 </ControlTemplate>\r\n                              </Setter.Value>\r\n                           </Setter>\r\n                        </Style>\r\n                     </DataGridTemplateColumn.CellStyle>\r\n                  </DataGridTemplateColumn>\r\n\r\n                  <DataGridTemplateColumn Header=\"{x:Static p:Resources.IFCProperty}\" Width=\"*\"\r\n                                          CellStyle=\"{StaticResource DataGridCellStyle}\" HeaderStyle=\"{StaticResource DataGridColumnHeaderStyle}\">\r\n                     <DataGridTemplateColumn.CellTemplate>\r\n                        <DataTemplate>\r\n                           <Grid Background=\"{Binding ElementName=textBox_IFCProperty, Path=Background}\">\r\n                              <Grid.ColumnDefinitions>\r\n                                 <ColumnDefinition Width=\"*\"/>\r\n                                 <ColumnDefinition Width=\"auto\"/>\r\n                              </Grid.ColumnDefinitions>\r\n\r\n                              <Border Grid.Column=\"0\" Background=\"{Binding ElementName=textBox_IFCProperty, Path=Background}\">\r\n                                 <TextBox Name=\"textBox_IFCProperty\" HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Center\" BorderThickness=\"0\"\r\n                                          Text=\"{Binding Path=IFCPropertyName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource EmptyToDefaulConverter}}\"\r\n                                          IsReadOnly=\"{Binding ElementName=treeView_PropertySetups, Path=SelectedItem, Converter={StaticResource IsIFCColumnReadOnlyConverter}}\"\r\n                                          AutomationProperties.AutomationId=\"{Binding RelativeSource={RelativeSource AncestorType=DataGridRow},\r\n                                                                              StringFormat=textBox_IFCProperty_{0}, \r\n                                                                              Converter={StaticResource RowIndexConverter} }\">\r\n                                    <TextBox.Style>\r\n                                       <Style TargetType=\"TextBox\" BasedOn=\"{StaticResource {x:Type TextBox}}\">\r\n                                          <Style.Triggers>\r\n                                             <DataTrigger Binding=\"{Binding ElementName=treeView_PropertySetups, Path=SelectedItem, Converter={StaticResource EditButtonVisibilityConverter}, ConverterParameter=false}\"\r\n                                                          Value=\"Hidden\">\r\n                                                <Setter Property=\"Background\" Value=\"Transparent\"/>\r\n                                             </DataTrigger>\r\n                                          </Style.Triggers>\r\n                                       </Style>\r\n                                    </TextBox.Style>\r\n                                 </TextBox>\r\n                              </Border>\r\n                              <Border Grid.Column=\"1\" Background=\"{Binding ElementName=textBox_IFCProperty, Path=Background}\">\r\n                                 <ctrl:IconButton Name=\"button_IFCPropertyEdit\" IconName=\"EditS\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\"\r\n                                         IsEnabled=\"{Binding DataContext.IsCustomConfiguration, RelativeSource={RelativeSource AncestorType=DataGrid}}\"\r\n                                         Background=\"{Binding ElementName=textBox_IFCProperty, Path=Background}\"\r\n                                         Visibility=\"{Binding ElementName=treeView_PropertySetups, Path=SelectedItem, Converter={StaticResource EditButtonVisibilityConverter}, ConverterParameter=false}\">\r\n                                    <Button.ToolTip>\r\n                                       <ToolTip Content=\"{x:Static p:Resources.Edit}\" Placement=\"Bottom\"/>\r\n                                    </Button.ToolTip>\r\n                                 </ctrl:IconButton>\r\n                              </Border>\r\n                           </Grid>\r\n                        </DataTemplate>\r\n                     </DataGridTemplateColumn.CellTemplate>\r\n                  </DataGridTemplateColumn>\r\n\r\n                  <DataGridTextColumn Header=\"{x:Static p:Resources.DataType}\" Binding=\"{Binding Path=PropertyDataType}\" Width=\"*\" IsReadOnly=\"True\"\r\n                                      CellStyle=\"{StaticResource DataGridCellStyle}\" HeaderStyle=\"{StaticResource DataGridColumnHeaderStyle}\"/>\r\n\r\n                  <DataGridTemplateColumn Header=\"{x:Static p:Resources.RevitProperty}\" Width=\"*\" CellStyle=\"{StaticResource DataGridCellStyle}\" HeaderStyle=\"{StaticResource DataGridColumnHeaderStyle}\">\r\n                     <DataGridTemplateColumn.CellTemplate>\r\n                        <DataTemplate>\r\n                           <Grid Background=\"{Binding ElementName=textBox_RevitProperty, Path=Background}\">\r\n                              <Grid.Resources>\r\n                              </Grid.Resources>\r\n\r\n                              <Grid.ColumnDefinitions>\r\n                                 <ColumnDefinition Width=\"*\"/>\r\n                                 <ColumnDefinition Width=\"auto\"/>\r\n                              </Grid.ColumnDefinitions>\r\n\r\n                              <Border Grid.Column=\"0\" Background=\"{Binding ElementName=textBox_RevitProperty, Path=Background}\">\r\n                                 <TextBox Name=\"textBox_RevitProperty\" HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Center\" BorderThickness=\"0\" IsReadOnly=\"True\"\r\n                                          Text=\"{Binding Path=RevitPropertyName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource EmptyToDefaulConverter}}\"\r\n                                          ToolTip=\"{Binding Converter={StaticResource ElementIdToTooltipConverter}}\">\r\n                                    <TextBox.Style>\r\n                                       <Style TargetType=\"TextBox\" BasedOn=\"{StaticResource {x:Type TextBox}}\">\r\n                                          <Style.Triggers>\r\n                                             <DataTrigger Binding=\"{Binding ElementName=treeView_PropertySetups, Path=SelectedItem, Converter={StaticResource EditButtonVisibilityConverter}, ConverterParameter=true}\"\r\n                                                          Value=\"Hidden\">\r\n                                                <Setter Property=\"Background\" Value=\"Transparent\"/>\r\n                                             </DataTrigger>\r\n                                          </Style.Triggers>\r\n                                       </Style>\r\n                                    </TextBox.Style>\r\n                                 </TextBox>\r\n                              </Border>\r\n                              <Border Grid.Column=\"1\" Background=\"{Binding ElementName=textBox_RevitProperty, Path=Background}\">\r\n                                 <ctrl:IconButton Name=\"button_RevitPropertyEdit\" Click=\"button_RevitPropertyEdit_Click\" IconName=\"EditS\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\"\r\n                                         IsEnabled=\"{Binding DataContext.IsCustomConfiguration, RelativeSource={RelativeSource AncestorType=DataGrid}}\"\r\n                                         Background=\"{Binding ElementName=textBox_RevitProperty, Path=Background}\"\r\n                                         Visibility=\"{Binding ElementName=treeView_PropertySetups, Path=SelectedItem, Converter={StaticResource EditButtonVisibilityConverter}, ConverterParameter=true}\">\r\n                                    <Button.ToolTip>\r\n                                       <ToolTip Content=\"{x:Static p:Resources.Edit}\" Placement=\"Bottom\"/>\r\n                                    </Button.ToolTip>\r\n                                 </ctrl:IconButton>\r\n                              </Border>\r\n                           </Grid>\r\n                        </DataTemplate>\r\n                     </DataGridTemplateColumn.CellTemplate>\r\n                  </DataGridTemplateColumn>\r\n\r\n                  <DataGridTemplateColumn Header=\"{x:Static p:Resources.Reset}\">\r\n                     <DataGridTemplateColumn.CellTemplate>\r\n                        <DataTemplate>\r\n                           <ctrl:IconButton Name=\"button_Reset\" IconName=\"DataRefreshS\" Click=\"button_Reset_Click\" HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\"\r\n                                           IsEnabled=\"{Binding DataContext.IsCustomConfiguration, RelativeSource={RelativeSource AncestorType=DataGrid}}\">\r\n                              <Button.ToolTip>\r\n                                 <ToolTip Content=\"{x:Static p:Resources.ResetRowToDefault}\" Placement=\"Bottom\"/>\r\n                              </Button.ToolTip>\r\n                           </ctrl:IconButton>\r\n                        </DataTemplate>\r\n                     </DataGridTemplateColumn.CellTemplate>\r\n                  </DataGridTemplateColumn>\r\n               </DataGrid.Columns>\r\n            </DataGrid>\r\n         </DockPanel>\r\n      </Border>\r\n\r\n      <StackPanel Orientation=\"Horizontal\" Grid.Row=\"1\" Grid.ColumnSpan=\"2\" VerticalAlignment=\"Center\" Margin=\"8,8,0,8\">\r\n         <ctrl:WeaveIcon IconName=\"InfoS\" VerticalAlignment=\"Top\"/>\r\n         <TextBlock Name=\"textBlock_Help\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\">\r\n            <Hyperlink Click=\"OnHelpClick\">\r\n               <Run Name=\"run_Help\" Text=\"{x:Static p:Resources.ParameterMappingHelp}\" x:Uid=\"LearnMoreHyperlink\"/>\r\n            </Hyperlink>\r\n         </TextBlock>\r\n      </StackPanel>\r\n\r\n      <StackPanel Margin=\"0,8,0,8\" Orientation=\"Horizontal\" Grid.Column=\"2\" Grid.Row=\"1\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\" weave:PanelProperties.Spacing=\"S\">\r\n         <Button x:Name=\"button_Ok\" Content=\"{x:Static p:Resources.OK}\" HorizontalAlignment=\"Left\" weave:ButtonProperties.Variant=\"Solid\" Click=\"button_Ok_Click\"/>\r\n         <Button x:Name=\"button_Cancel\" Content=\"{x:Static p:Resources.Cancel}\" HorizontalAlignment=\"Left\" weave:ButtonProperties.Variant=\"Outline\" Click=\"button_Cancel_Click\" Margin=\"0,0,7,0\"/>\r\n      </StackPanel>\r\n\r\n   </Grid>\r\n\r\n</auiw:ChildWindow>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCPropertyMapping/IFCPropertyMapping.xaml.cs",
    "content": "﻿using Autodesk.Revit.DB;\r\nusing Autodesk.Revit.UI;\r\nusing Autodesk.UI.Windows;\r\nusing BIM.IFC.Export.UI.Properties;\r\nusing Revit.IFC.Export.Utility;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Globalization;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Text.RegularExpressions;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Data;\r\nusing System.Windows.Media;\r\nusing System.Windows.Input;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// Interaction logic for IFCPropertyMapping.xaml\r\n   /// </summary>\r\n   public partial class IFCPropertyMapping : ChildWindow, INotifyPropertyChanged\r\n   {\r\n      /// <summary>\r\n      /// The Mapping Model\r\n      /// </summary>\r\n      private IFCPropertyMappingModel _model = new();\r\n\r\n      /// <summary>\r\n      /// The IFC Export Configuration\r\n      /// </summary>\r\n      private IFCExportConfiguration _ifcExportConfiguration = null;\r\n\r\n      /// <summary>\r\n      /// The Property Setup info used by TreeView\r\n      /// </summary>\r\n      public ObservableCollection<SetupMappingInfo> SetupInfos { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// Selected Property Setup.\r\n      /// </summary>\r\n      private PropertySetupType _selectedPropertySetup;\r\n\r\n      /// <summary>\r\n      /// Property Setups.\r\n      /// </summary>\r\n      private List<PropertySetupType> _propertySetups = new();\r\n\r\n      /// <summary>\r\n      /// Property Set list.\r\n      /// </summary>\r\n      private static PSetMappingInfo _selectedPropertySet;\r\n      public static PSetMappingInfo SelectedPropertySet\r\n      {\r\n         get => _selectedPropertySet;\r\n         private set => _selectedPropertySet = value;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Property mappings\r\n      /// </summary>\r\n      public ObservableCollection<PropertyMappingInfo> ObservableProperties { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// IFC schema list.\r\n      /// </summary>\r\n      private IFCVersion _selectedIfcSchema = IFCVersion.IFC2x3;\r\n      public IFCVersion SelectedIfcSchema\r\n      {\r\n         get { return _selectedIfcSchema; }\r\n         set\r\n         {\r\n            _selectedIfcSchema = value;\r\n            OnPropertyChanged();\r\n         }\r\n      }\r\n      private List<IFCVersion> _ifcSchemas;\r\n      public List<IFCVersion> IfcSchemas\r\n      {\r\n         get { return _ifcSchemas; }\r\n      }\r\n\r\n      private bool? m_ExportFlagAll = true;\r\n\r\n      /// <summary>\r\n      /// Flag to determine if all properties are exported or not.\r\n      /// </summary>\r\n      public bool? ExportFlagAll\r\n      {\r\n         get { return m_ExportFlagAll; }\r\n         set\r\n         {\r\n            m_ExportFlagAll = value;\r\n            OnPropertyChanged();\r\n            ExportFlagAllClick();\r\n         }\r\n      }\r\n\r\n      private string m_filterTextPropertySet;\r\n      public string FilterTextPropertySet\r\n      {\r\n         get { return m_filterTextPropertySet; }\r\n         set\r\n         {\r\n            m_filterTextPropertySet = value;\r\n            OnPropertyChanged();\r\n            foreach (var setupInfo in SetupInfos)\r\n               setupInfo.PropertySetCollection.Refresh();\r\n         }\r\n      }\r\n\r\n      private bool _isRevitThemeDark = false;\r\n\r\n      /// <summary>\r\n      /// Flag to determine if Dark theme is applied based on the Revit and system settings.\r\n      /// </summary>\r\n      public bool IsRevitThemeDark\r\n      {\r\n         get { return _isRevitThemeDark; }\r\n         set\r\n         {\r\n            if (_isRevitThemeDark != value)\r\n            {\r\n               _isRevitThemeDark = value;\r\n               OnPropertyChanged();\r\n            }\r\n         }\r\n      }\r\n\r\n      private bool _isCustomConfiguration = true;\r\n\r\n      /// <summary>\r\n      /// Flag to determine if the current configuration is custom (modifiable).\r\n      /// True when the configuration can be modified, false when it's built-in.\r\n      /// </summary>\r\n      public bool IsCustomConfiguration\r\n      {\r\n         get { return _isCustomConfiguration; }\r\n         set\r\n         {\r\n            if (_isCustomConfiguration != value)\r\n            {\r\n               _isCustomConfiguration = value;\r\n               OnPropertyChanged();\r\n            }\r\n         }\r\n      }\r\n\r\n      public event PropertyChangedEventHandler PropertyChanged;\r\n      protected void OnPropertyChanged([CallerMemberName] string name = null)\r\n      {\r\n         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));\r\n      }\r\n\r\n      private TransactionGroup groupTransaction;\r\n      private Transaction templateTransaction;\r\n\r\n      /// <summary>\r\n      /// Cache for IFCParameterTemplate objects for built-in configurations.\r\n      /// </summary>\r\n      private readonly Dictionary<string, IFCParameterTemplate> _builtInTemplateCache = new();\r\n\r\n      public ObservableCollection<string> RevitCategoryFilters { get; } = new();\r\n      private readonly Dictionary<string, CategoryParameterSet> _categoryParameterLookup = new(StringComparer.CurrentCultureIgnoreCase);\r\n      private readonly List<PropertyMappingInfo> _subscribedPropertyMappings = new();\r\n      private readonly PropertyChangedEventHandler _propertyMappingChangedHandler;\r\n      private string _currentCategoryFilter = Properties.Resources.DefaultCategoryFilterTxt;\r\n      private bool _suppressCategoryFilterSelectionChanged;\r\n      private bool _suppressPropertyMappingChanged;\r\n\r\n      /// <summary>\r\n      /// Constructor.\r\n      /// </summary>\r\n      public IFCPropertyMapping(Window owner, IFCExportConfiguration configuration)\r\n      {\r\n         InitializeComponent();\r\n         _propertyMappingChangedHandler = OnPropertyMappingChanged;\r\n         Owner = owner;\r\n         _ifcExportConfiguration = configuration;\r\n         IsCustomConfiguration = !configuration.IsBuiltIn;\r\n         IsRevitThemeDark = UIThemeManager.CurrentTheme == UITheme.Dark;\r\n         DataContext = this;\r\n\r\n         Document doc = IFCCommandOverrideApplication.TheDocument;\r\n         groupTransaction = new TransactionGroup(doc);\r\n         templateTransaction = new Transaction(doc, Properties.Resources.ModifyIFCPropertyMapping);\r\n         StartTransactionGroup();\r\n\r\n         IFCRevitPropertySelector.InitEntityToCategoriesCache(_ifcExportConfiguration.CategoryMapping);\r\n\r\n         _model.ClearCache();\r\n\r\n         InitializeSchemaList();\r\n         InitializePropertySetupsList();\r\n\r\n         IFCParameterTemplate currentTemplate = GetMappingTemplateFromConfiguration(doc, configuration);\r\n\r\n         InitializeTemplateList(currentTemplate?.Name);\r\n         InitializeCategoryFilter();\r\n\r\n         UpdateControlsEnabledState();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes the mapping templates listbox.\r\n      /// </summary>\r\n      private void InitializeTemplateList(string activeTemplateName)\r\n      {\r\n         listBox_MappingTemplates.Items.Clear();\r\n\r\n         if (!IsCustomConfiguration)\r\n         {\r\n            listBox_MappingTemplates.Items.Add(activeTemplateName);\r\n            listBox_MappingTemplates.SelectedItem = activeTemplateName;\r\n            return;\r\n         }\r\n\r\n         IFCParameterTemplate inSessionTemplate = IFCParameterTemplate.GetOrCreateInSessionTemplate(IFCCommandOverrideApplication.TheDocument);\r\n         if (inSessionTemplate == null)\r\n            return;\r\n\r\n         string inSessionName = inSessionTemplate.Name;\r\n         listBox_MappingTemplates.Items.Add(inSessionName);\r\n         IList<string> templateNames = IFCParameterTemplate.ListNames(IFCCommandOverrideApplication.TheDocument);\r\n         foreach (string name in templateNames)\r\n            listBox_MappingTemplates.Items.Add(name);\r\n\r\n         if (activeTemplateName == null || !templateNames.Contains(activeTemplateName))\r\n            listBox_MappingTemplates.SelectedItem = inSessionName;\r\n         else\r\n            listBox_MappingTemplates.SelectedItem = activeTemplateName;\r\n      }\r\n\r\n      private void InitializeCategoryFilter()\r\n      {\r\n         _suppressCategoryFilterSelectionChanged = true;\r\n\r\n         string previousSelection = _currentCategoryFilter;\r\n\r\n         RevitCategoryFilters.Clear();\r\n         _categoryParameterLookup.Clear();\r\n\r\n         RevitCategoryFilters.Add(Properties.Resources.DefaultCategoryFilterTxt);\r\n\r\n         if (SelectedPropertySet?.PropertyInfos != null &&\r\n            SelectedPropertySet.ParentSetup?.PropertySetup == PropertySetupType.RevitElementParameters)\r\n         {\r\n            IReadOnlyDictionary<ElementId, List<RevitParameterData>> categoryParameters =\r\n               IFCRevitPropertySelector.GetCategoryParametersCacheSnapshot();\r\n\r\n            if (categoryParameters != null)\r\n            {\r\n               foreach (var entry in categoryParameters)\r\n               {\r\n                  string categoryName = GetCategoryDisplayName(entry.Key);\r\n                  if (string.IsNullOrEmpty(categoryName))\r\n                     continue;\r\n\r\n                  if (_categoryParameterLookup.TryGetValue(categoryName, out CategoryParameterSet existingSet))\r\n                     existingSet.AddParameters(entry.Value);\r\n                  else\r\n                     _categoryParameterLookup.Add(categoryName, new CategoryParameterSet(entry.Value));\r\n               }\r\n\r\n               List<string> categoryNames = new();\r\n               foreach (var entry in _categoryParameterLookup.ToList())\r\n               {\r\n                  if (!(SelectedPropertySet.PropertyInfos?.Any(entry.Value.Contains) ?? false))\r\n                  {\r\n                     _categoryParameterLookup.Remove(entry.Key);\r\n                     continue;\r\n                  }\r\n\r\n                  categoryNames.Add(entry.Key);\r\n               }\r\n\r\n               foreach (string categoryName in categoryNames.OrderBy(name => name, StringComparer.CurrentCultureIgnoreCase))\r\n                  RevitCategoryFilters.Add(categoryName);\r\n            }\r\n         }\r\n\r\n         comboBox_CategoryName.ItemsSource = RevitCategoryFilters;\r\n         string selectionToApply = (!string.IsNullOrEmpty(previousSelection) && RevitCategoryFilters.Contains(previousSelection)) ?\r\n            previousSelection : Properties.Resources.DefaultCategoryFilterTxt;\r\n         comboBox_CategoryName.SelectedItem = selectionToApply;\r\n\r\n         _currentCategoryFilter = selectionToApply;\r\n         _suppressCategoryFilterSelectionChanged = false;\r\n      }\r\n\r\n      private void button_Add_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCTemplateData data = new(Properties.Resources.NewTemplateDefaultName,\r\n            IFCParameterTemplate.ListNames(IFCCommandOverrideApplication.TheDocument),\r\n            isCategoryMapping: false, IFCTemplateData.DialogTypeEnum.Template);\r\n         IFCNewTemplate newTempalteDialog = new(data);\r\n         newTempalteDialog.Owner = this;\r\n         bool? ret = newTempalteDialog.ShowDialog();\r\n         if (ret.HasValue && ret.Value == true)\r\n         {\r\n            string templateName = newTempalteDialog.Data.NewName;\r\n            if (!string.IsNullOrEmpty(templateName) && !listBox_MappingTemplates.Items.Contains(templateName))\r\n            {\r\n               IFCParameterTemplate newParameterTemplate = IFCParameterTemplate.Create(IFCCommandOverrideApplication.TheDocument, templateName);\r\n               if (newParameterTemplate == null)\r\n                  return;\r\n\r\n               listBox_MappingTemplates.Items.Add(templateName);\r\n               listBox_MappingTemplates.SelectedItem = newParameterTemplate.Name;\r\n            }\r\n         }\r\n      }\r\n\r\n      private void button_Import_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         FileOpenDialog openDialog = new FileOpenDialog(Properties.Resources.ExportPropertyMappingFilter);\r\n         openDialog.Title = Properties.Resources.ImportPropertyMappingDialogName;\r\n\r\n         if (openDialog.Show() == ItemSelectionDialogResult.Confirmed)\r\n         {\r\n            // TODO: Support cloud paths.\r\n            string fileName = ModelPathUtils.ConvertModelPathToUserVisiblePath(openDialog.GetSelectedModelPath());\r\n            string uniqueTemplateName = GetUniqueNameFromFile(fileName, isCategoryMapping: false);\r\n            if (string.IsNullOrWhiteSpace(uniqueTemplateName))\r\n               return;\r\n\r\n            try\r\n            {\r\n               IFCParameterTemplate importedTemplate = IFCParameterTemplate.ImportFromFile(IFCCommandOverrideApplication.TheDocument, fileName, uniqueTemplateName);\r\n\r\n               if (importedTemplate != null && !importedTemplate.IsValidParameterMappingFile)\r\n               {\r\n                  using (Autodesk.Revit.UI.TaskDialog taskDialog = new Autodesk.Revit.UI.TaskDialog(Properties.Resources.IFCExport))\r\n                  {\r\n                     taskDialog.MainInstruction = Properties.Resources.IFCInvalidPropertyMappingFile;\r\n                     taskDialog.MainIcon = Autodesk.Revit.UI.TaskDialogIcon.TaskDialogIconWarning;\r\n                     taskDialog.TitleAutoPrefix = false;\r\n                     taskDialog.CommonButtons = Autodesk.Revit.UI.TaskDialogCommonButtons.Cancel;\r\n                     TaskDialogResult taskDialogResult = taskDialog.Show();\r\n                     if (taskDialogResult == TaskDialogResult.Cancel)\r\n                        return;\r\n                  }\r\n               }\r\n            }\r\n            catch (Exception)\r\n            {\r\n               return;\r\n            }\r\n\r\n            listBox_MappingTemplates.Items.Add(uniqueTemplateName);\r\n            listBox_MappingTemplates.SelectedItem = uniqueTemplateName;\r\n         }\r\n      }\r\n\r\n      private void button_Copy_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCParameterTemplate currentTemplate = GetCurrentTemplate();\r\n         if (currentTemplate == null)\r\n            return;\r\n\r\n         WriteMappingInfoToTemplate(currentTemplate);\r\n         IFCTemplateData data = new(currentTemplate.Name, GetAllTemplateNames(),\r\n            isCategoryMapping: false, IFCTemplateData.DialogTypeEnum.Template);\r\n         data.MakeUniqueName();\r\n\r\n         IFCCopyTemplate copyTemplateDialog = new IFCCopyTemplate(data)\r\n         {\r\n            Owner = this\r\n         };\r\n\r\n         bool? ret = copyTemplateDialog.ShowDialog();\r\n         if (ret.HasValue && ret.Value == true)\r\n         {\r\n            string copyTemplateName = copyTemplateDialog.Data.NewName;\r\n            try\r\n            {\r\n               IFCParameterTemplate importedTemplate = currentTemplate.CopyTemplate(IFCCommandOverrideApplication.TheDocument, copyTemplateName);\r\n            }\r\n            catch (Exception)\r\n            {\r\n               return;\r\n            }\r\n\r\n            listBox_MappingTemplates.Items.Add(copyTemplateName);\r\n            listBox_MappingTemplates.SelectedItem = copyTemplateName;\r\n         }\r\n      }\r\n\r\n      private void button_Save_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         SaveDialogChanges();\r\n         StartTransactionGroup();\r\n      }\r\n\r\n      private void button_Export_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCParameterTemplate currTemplate = GetCurrentTemplate();\r\n         if (currTemplate == null)\r\n            return;\r\n\r\n         WriteMappingInfoToTemplate(currTemplate);\r\n\r\n         FileSaveDialog saveDialog = new FileSaveDialog(Properties.Resources.ExportPropertyMappingFilter);\r\n         saveDialog.Title = Properties.Resources.ExportPropertyMappingDialogName;\r\n         saveDialog.InitialFileName = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + \"\\\\\" + currTemplate.Name + \".txt\";\r\n\r\n         if (saveDialog.Show() == ItemSelectionDialogResult.Confirmed)\r\n         {\r\n            try\r\n            {\r\n               // TODO: Support (or warn) on cloud paths.\r\n               ModelPath modelPath = saveDialog.GetSelectedModelPath();\r\n               string fileName = ModelPathUtils.ConvertModelPathToUserVisiblePath(modelPath);\r\n               currTemplate.ExportToFile(fileName);\r\n            }\r\n            catch (Exception)\r\n            {\r\n               return;\r\n            }\r\n         }\r\n      }\r\n\r\n      private void button_Rename_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCParameterTemplate currentTemplate = GetCurrentTemplate();\r\n         if (currentTemplate == null)\r\n            return;\r\n\r\n         string previousName = currentTemplate.Name;\r\n         IFCTemplateData data = new(previousName, IFCParameterTemplate.ListNames(IFCExport.TheDocument),\r\n            isCategoryMapping: false, IFCTemplateData.DialogTypeEnum.Template);\r\n\r\n         IFCRenameTemplate renameTemplateDialog = new(data);\r\n         renameTemplateDialog.Owner = this;\r\n         bool? ret = renameTemplateDialog.ShowDialog();\r\n         if (ret.HasValue && ret.Value && !string.IsNullOrWhiteSpace(renameTemplateDialog.Data.NewName))\r\n         {\r\n            string newName = renameTemplateDialog.Data.NewName;\r\n            currentTemplate.Name = newName;\r\n            int index = listBox_MappingTemplates.SelectedIndex;\r\n            listBox_MappingTemplates.Items[index] = newName;\r\n            listBox_MappingTemplates.SelectedItem = newName;\r\n         }\r\n      }\r\n\r\n      private void button_Delete_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCParameterTemplate currentTemplate = GetCurrentTemplate();\r\n         if (currentTemplate == null)\r\n            return;\r\n\r\n         IFCDeleteTemplate deleteTemplateDialog = new IFCDeleteTemplate(currentTemplate.Name);\r\n         deleteTemplateDialog.Owner = this;\r\n         bool? ret = deleteTemplateDialog.ShowDialog();\r\n         if (ret.HasValue && ret.Value == true)\r\n         {\r\n            listBox_MappingTemplates.Items.Remove(currentTemplate.Name);\r\n            IFCCommandOverrideApplication.TheDocument.Delete(currentTemplate.Id);\r\n            listBox_MappingTemplates.SelectedIndex = 0;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns true if the name is valid\r\n      /// </summary>\r\n      public static bool IsValidName(string templateName, IList<string> existingNames)\r\n      {\r\n         templateName = templateName?.TrimStart()?.TrimEnd();\r\n         return (!(string.IsNullOrWhiteSpace(templateName)\r\n            || (existingNames?.Contains(templateName, System.StringComparer.OrdinalIgnoreCase) ?? false)))\r\n            && IFCParameterTemplate.IsValidName(IFCCommandOverrideApplication.TheDocument, templateName);\r\n      }\r\n\r\n      private void listBox_MappingTemplates_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)\r\n      {\r\n         // Save current template before switching to new one\r\n         if (e.RemovedItems.Count > 0)\r\n         {\r\n            string prevTemplateName = e.RemovedItems[0] as string;\r\n            if (!string.IsNullOrEmpty(prevTemplateName))\r\n            {\r\n               WriteMappingInfoToTemplate(prevTemplateName);\r\n\r\n               if (templateTransaction.HasStarted())\r\n                  templateTransaction.Commit();\r\n\r\n               if (templateTransaction.HasEnded())\r\n                  templateTransaction.Start();\r\n            }\r\n         }\r\n\r\n         SetSelectedPropertySet(null);\r\n\r\n         IFCParameterTemplate currTemplate = GetCurrentTemplate();\r\n         if (currTemplate == null)\r\n            return;\r\n\r\n         UpdateTemplateControls(currTemplate);\r\n\r\n         InitializeSetupInfo(currTemplate);\r\n\r\n         UpdateControlsVisibilityState(VisibilityState.NothingSelected);\r\n         UpdateSelectedTemplateCaption();\r\n      }\r\n\r\n      private void UpdateSelectedTemplateCaption()\r\n      {\r\n         string templateName = listBox_MappingTemplates.SelectedItem?.ToString();\r\n         textBlock_SelectedTemplateName.Text = string.Format(\"{0} {1}\", templateName, Properties.Resources.TemplateSelections);\r\n      }\r\n\r\n      public void InitializeSetupInfo(IFCParameterTemplate template)\r\n      {\r\n         PopulateSetupInfo(SelectedIfcSchema);\r\n         ReadMappingInfoFromTemplate(template);\r\n      }\r\n\r\n      private Dictionary<PropertySetupType, HashSet<string>> CreateTemplateDataCache(IFCParameterTemplate template)\r\n      {\r\n         Dictionary<PropertySetupType, HashSet<string>> _templatePsets = new();\r\n         if (template == null)\r\n            return _templatePsets;\r\n\r\n         foreach (PropertySetupType propertySetup in _propertySetups)\r\n         {\r\n            IList<string> templatePSetNames = template.GetPropertySetNames(propertySetup, PropertySelectionType.All);\r\n            _templatePsets.Add(propertySetup, templatePSetNames.ToHashSet());\r\n         }\r\n\r\n         return _templatePsets;\r\n      }\r\n\r\n      public void PopulateSetupInfo(IFCVersion ifcVersion)\r\n      {\r\n         Dictionary<string, bool> expandedStates = SaveExpandedState();\r\n         string previouslySelectedPsetName = SelectedPropertySet?.Name;\r\n         PropertySetupType? previouslySelectedSetup = SelectedPropertySet?.ParentSetup?.PropertySetup;\r\n\r\n         SetSelectedPropertySet(null);\r\n         SetupInfos.Clear();\r\n\r\n         foreach (PropertySetupType propertySetup in _propertySetups)\r\n            SetupInfos.Add(CreateSetupInfo(propertySetup, ifcVersion));\r\n\r\n         // The SetupInfos was reinitialized, so we need to restore the selected property set\r\n         // and the expanded states of the tree view items\r\n         RestoreSelectedPSet(previouslySelectedSetup, previouslySelectedPsetName);\r\n         RestoreExpandedState(expandedStates);\r\n      }\r\n\r\n      private void RestoreSelectedPSet(PropertySetupType? previousSetupType, string previousPsetName)\r\n      {\r\n         if (!previousSetupType.HasValue || string.IsNullOrEmpty(previousPsetName))\r\n            return;\r\n\r\n         foreach (var setupInfo in SetupInfos)\r\n         {\r\n            if (setupInfo.PropertySetup != previousSetupType.Value)\r\n               continue;\r\n\r\n            foreach (var psetInfo in setupInfo.PSetMappingInfos)\r\n            {\r\n               if (psetInfo.Name == previousPsetName)\r\n               {\r\n                  SetSelectedPropertySet(psetInfo);\r\n                  return;\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      private Dictionary<string, bool> SaveExpandedState()\r\n      {\r\n         var expandedStates = new Dictionary<string, bool>();\r\n         foreach (SetupMappingInfo setupInfo in treeView_PropertySetups.Items)\r\n         {\r\n            if (setupInfo == null)\r\n               continue;\r\n\r\n            TreeViewItem treeViewItem = treeView_PropertySetups.ItemContainerGenerator.ContainerFromItem(setupInfo) as TreeViewItem;\r\n            if (treeViewItem == null)\r\n               continue;\r\n\r\n            expandedStates[setupInfo.SetupName] = treeViewItem.IsExpanded;\r\n         }\r\n\r\n         return expandedStates;\r\n      }\r\n\r\n      private void RestoreExpandedState(Dictionary<string, bool> expandedStates)\r\n      {\r\n         if (expandedStates == null)\r\n            return;\r\n\r\n         foreach (SetupMappingInfo setupInfo in treeView_PropertySetups.Items)\r\n         {\r\n            if (setupInfo == null)\r\n               continue;\r\n\r\n            TreeViewItem treeViewItem = treeView_PropertySetups.ItemContainerGenerator.ContainerFromItem(setupInfo) as TreeViewItem;\r\n            if (treeViewItem == null)\r\n               continue;\r\n\r\n            if (expandedStates.TryGetValue(setupInfo.SetupName, out var isExpanded))\r\n               treeViewItem.IsExpanded = isExpanded;\r\n         }\r\n      }\r\n\r\n      private void SetSelectedPropertySet(PSetMappingInfo newSelectedSet)\r\n      {\r\n         if (ReferenceEquals(SelectedPropertySet, newSelectedSet))\r\n            return;\r\n\r\n         UnsubscribeFromPropertyMappingChanges();\r\n\r\n         _currentCategoryFilter = Properties.Resources.DefaultCategoryFilterTxt;\r\n         SelectedPropertySet = newSelectedSet;\r\n\r\n         if (SelectedPropertySet?.ParentSetup != null)\r\n            _selectedPropertySetup = SelectedPropertySet.ParentSetup.PropertySetup;\r\n\r\n         if (SelectedPropertySet?.PropertyInfos == null)\r\n         {\r\n            InitializePropertyDataGrid();\r\n            return;\r\n         }\r\n\r\n         foreach (PropertyMappingInfo propertyInfo in SelectedPropertySet.PropertyInfos)\r\n         {\r\n            if (propertyInfo == null)\r\n               continue;\r\n\r\n            propertyInfo.PropertyChanged += _propertyMappingChangedHandler;\r\n            _subscribedPropertyMappings.Add(propertyInfo);\r\n         }\r\n\r\n         InitializePropertyDataGrid();\r\n      }\r\n\r\n      private void UnsubscribeFromPropertyMappingChanges()\r\n      {\r\n         if (_subscribedPropertyMappings.Count == 0)\r\n            return;\r\n\r\n         foreach (PropertyMappingInfo propertyInfo in _subscribedPropertyMappings)\r\n         {\r\n            if (propertyInfo == null)\r\n               continue;\r\n\r\n            propertyInfo.PropertyChanged -= _propertyMappingChangedHandler;\r\n         }\r\n\r\n         _subscribedPropertyMappings.Clear();\r\n      }\r\n\r\n      private void OnPropertyMappingChanged(object sender, PropertyChangedEventArgs e)\r\n      {\r\n         if (_suppressPropertyMappingChanged)\r\n            return;\r\n\r\n         if (e == null)\r\n            return;\r\n\r\n         if (!string.Equals(e.PropertyName, nameof(PropertyMappingInfo.RevitPropertyName), StringComparison.Ordinal) &&\r\n             !string.Equals(e.PropertyName, nameof(PropertyMappingInfo.RevitPropertyId), StringComparison.Ordinal))\r\n            return;\r\n\r\n         InitializePropertyDataGrid();\r\n      }\r\n\r\n      public SetupMappingInfo CreateSetupInfo(PropertySetupType propertySetup, IFCVersion ifcVersion)\r\n      {\r\n         SetupMappingInfo setupInfo = null;\r\n         switch (propertySetup)\r\n         {\r\n            case PropertySetupType.IfcCommonPropertySets:\r\n               setupInfo = _model.InitializeIFCCommonPropertySets(ifcVersion); break;\r\n            case PropertySetupType.RevitElementParameters:\r\n               setupInfo = _model.InitializeRevitPropertySetsList(); break;\r\n            case PropertySetupType.IfcBaseQuantities:\r\n               setupInfo = _model.InitializeBaseQuantities(ifcVersion); break;\r\n            case PropertySetupType.RevitMaterialParameters:\r\n               setupInfo = _model.InitializeMaterialPropertySets(); break;\r\n            case PropertySetupType.RevitSchedules:\r\n               setupInfo = _model.InitializeSchedules(); break;\r\n            case PropertySetupType.UserDefinedPropertySets:\r\n               setupInfo = _model.InitializeUserDefinedPropertySets(); break;\r\n         }\r\n         if (setupInfo != null)\r\n            setupInfo.PropertySetCollection.Filter = FilterPropertySet;\r\n\r\n         return setupInfo ?? new SetupMappingInfo();\r\n      }\r\n\r\n      public void ReadMappingInfoFromTemplate(IFCParameterTemplate template)\r\n      {\r\n         if (template == null)\r\n            return;\r\n\r\n         _suppressPropertyMappingChanged = true;\r\n         try\r\n         {\r\n            Dictionary<PropertySetupType, HashSet<string>> templatePsetsNames = CreateTemplateDataCache(template);\r\n\r\n            foreach (SetupMappingInfo setupInfo in SetupInfos)\r\n            {\r\n               PropertySetupType propertySetup = setupInfo.PropertySetup;\r\n\r\n               setupInfo.ExportSetup = ReadSetupExportFlagFromTemplate(template, propertySetup);\r\n\r\n               templatePsetsNames.TryGetValue(propertySetup, out HashSet<string> templateModifiedPSets);\r\n               if ((templateModifiedPSets?.Count ?? 0) == 0)\r\n                  continue;\r\n\r\n               foreach (PSetMappingInfo psetInfo in setupInfo.PSetMappingInfos)\r\n               {\r\n                  string psetName =\r\n                     (setupInfo.IfcVersion == IFCVersion.IFC2x3 && propertySetup == PropertySetupType.IfcBaseQuantities) ?\r\n                     PSetMappingInfo.ConvertQuantitySetNameFrom2x3(psetInfo.Name) : psetInfo.Name;\r\n\r\n                  if (string.IsNullOrEmpty(psetName))\r\n                     continue;\r\n\r\n                  if (!templateModifiedPSets.Contains(psetName))\r\n                     continue;\r\n\r\n                  psetInfo.ExportFlag = template.IsExportingPropertySet(propertySetup, psetName);\r\n\r\n                  IList<IFCPropertyMappingInfo> templatePropertyInfos =\r\n                     template.GetPropertyMappingInfos(propertySetup, psetName, PropertySelectionType.All);\r\n\r\n                  if ((templatePropertyInfos?.Count ?? 0) == 0)\r\n                     continue;\r\n\r\n                  foreach (IFCPropertyMappingInfo templatePropertyInfo in templatePropertyInfos)\r\n                  {\r\n                     if (!psetInfo.TryGetProperty(templatePropertyInfo, out PropertyMappingInfo modelPropertyInfo))\r\n                        continue;\r\n\r\n                     modelPropertyInfo.Assign(templatePropertyInfo);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         finally\r\n         {\r\n            _suppressPropertyMappingChanged = false;\r\n         }\r\n\r\n         InitializePropertyDataGrid();\r\n      }\r\n\r\n\r\n      private void treeView_PropertySetups_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)\r\n      {\r\n         object newSelectedItem = e.NewValue;\r\n         if (newSelectedItem is SetupMappingInfo newSelectedSetup)\r\n         {\r\n            _selectedPropertySetup = newSelectedSetup.PropertySetup;\r\n            if (_selectedPropertySetup != PropertySetupType.RevitElementParameters)\r\n               ResetCategoryFilterSelection();\r\n            SetSelectedPropertySet(null);\r\n\r\n            VisibilityState visibilityState = VisibilityState.NothingSelected;\r\n            if (newSelectedSetup.PSetMappingInfos.Count == 0 &&\r\n               (_selectedPropertySetup == PropertySetupType.RevitMaterialParameters ||\r\n               _selectedPropertySetup == PropertySetupType.RevitSchedules))\r\n            {\r\n               visibilityState = _selectedPropertySetup == PropertySetupType.RevitMaterialParameters ?\r\n                  VisibilityState.EmptyStateMaterials : VisibilityState.EmptyStateSchedules;\r\n            }\r\n            UpdateControlsVisibilityState(visibilityState);\r\n         }\r\n         else if (newSelectedItem is PSetMappingInfo newSelectedPset)\r\n         {\r\n            if (newSelectedPset.ParentSetup == null)\r\n               return;\r\n\r\n            _selectedPropertySetup = newSelectedPset.ParentSetup.PropertySetup;\r\n            if (_selectedPropertySetup != PropertySetupType.RevitElementParameters)\r\n               ResetCategoryFilterSelection();\r\n            SetSelectedPropertySet(newSelectedPset);\r\n            UpdateControlsVisibilityState(VisibilityState.Default);\r\n         }\r\n      }\r\n\r\n      private void checkBox_PropertySet_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         if (sender is CheckBox checkBox)\r\n         {\r\n            // Find the parent TreeViewItem and select it\r\n            DependencyObject parent = VisualTreeHelper.GetParent(checkBox);\r\n            while (parent != null && parent is not TreeViewItem)\r\n            {\r\n               parent = VisualTreeHelper.GetParent(parent);\r\n            }\r\n\r\n            if (parent is TreeViewItem treeViewItem)\r\n            {\r\n               // Clicking the checkbox now triggers treeView_PropertySetups_SelectedItemChanged, which in turn updates the data grid.\r\n               treeViewItem.IsSelected = true;\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the controls.\r\n      /// </summary>\r\n      /// <param name=\"template\">The current template being used.</param>\r\n      private void UpdateTemplateControls(IFCParameterTemplate template)\r\n      {\r\n         // If configuration is built-in, disable all controls\r\n         if (!IsCustomConfiguration)\r\n         {\r\n            UpdateControlsEnabledState();\r\n            return;\r\n         }\r\n\r\n         bool isInSessionSelected = IsInSessionTemplate(template?.Name);\r\n\r\n         button_Delete.IsEnabled = !isInSessionSelected;\r\n         button_Rename.IsEnabled = !isInSessionSelected;\r\n      }\r\n\r\n      private void UpdateControlsEnabledState()\r\n      {\r\n         if (!IsCustomConfiguration)\r\n         {\r\n            button_Add.IsEnabled = false;\r\n            button_Import.IsEnabled = false;\r\n            button_Copy.IsEnabled = false;\r\n            button_Save.IsEnabled = false;\r\n            button_Export.IsEnabled = false;\r\n            button_Rename.IsEnabled = false;\r\n            button_Delete.IsEnabled = false;\r\n\r\n            comboBox_IFCSchema.IsEnabled = false;\r\n            button_PropertySetClean.IsEnabled = false;\r\n\r\n            button_ResetAll.IsEnabled = false;\r\n         }\r\n      }\r\n\r\n      private void InitializeSchemaList()\r\n      {\r\n         _ifcSchemas = new()\r\n         {\r\n         IFCVersion.IFC2x2,\r\n         IFCVersion.IFC2x3,\r\n         IFCVersion.IFC4,\r\n         IFCVersion.IFC4x3\r\n         };\r\n\r\n         switch (_ifcExportConfiguration.IFCVersion)\r\n         {\r\n            case IFCVersion.IFC2x2:\r\n               {\r\n                  SelectedIfcSchema = IFCVersion.IFC2x2;\r\n                  break;\r\n               }\r\n            case IFCVersion.IFC2x3:\r\n            case IFCVersion.IFC2x3CV2:\r\n            case IFCVersion.IFCCOBIE:\r\n            case IFCVersion.IFC2x3BFM:\r\n            case IFCVersion.IFC2x3FM:\r\n               {\r\n                  SelectedIfcSchema = IFCVersion.IFC2x3;\r\n                  break;\r\n               }\r\n            case IFCVersion.IFC4RV:\r\n            case IFCVersion.IFC4DTV:\r\n            case IFCVersion.IFC4:\r\n            case IFCVersion.IFCSG:\r\n               {\r\n                  SelectedIfcSchema = IFCVersion.IFC4;\r\n                  break;\r\n               }\r\n            case IFCVersion.IFC4x3:\r\n            case IFCVersion.IFC4x3RV:\r\n            case IFCVersion.IFC4x3DTV:\r\n               {\r\n                  SelectedIfcSchema = IFCVersion.IFC4x3;\r\n                  break;\r\n               }\r\n            default:\r\n               break;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initialize listBox with Property Setups list\r\n      /// </summary>\r\n      private void InitializePropertySetupsList()\r\n      {\r\n         _propertySetups.Add(PropertySetupType.IfcCommonPropertySets);\r\n         _propertySetups.Add(PropertySetupType.RevitElementParameters);\r\n         _propertySetups.Add(PropertySetupType.IfcBaseQuantities);\r\n         _propertySetups.Add(PropertySetupType.RevitMaterialParameters);\r\n         _propertySetups.Add(PropertySetupType.RevitSchedules);\r\n         _propertySetups.Add(PropertySetupType.UserDefinedPropertySets);\r\n         _selectedPropertySetup = _propertySetups.FirstOrDefault();\r\n      }\r\n\r\n      #region Visibility states\r\n      public enum VisibilityState\r\n      {\r\n         // Show all controls except empty states\r\n         Default = 0,\r\n         // Display empty state image for Schedules\r\n         EmptyStateSchedules = 1,\r\n         // Display empty state image for Materials\r\n         EmptyStateMaterials = 2,\r\n         // Display empty state image for not selected setup\r\n         NothingSelected\r\n      }\r\n\r\n      private void UpdateControlsVisibilityState(VisibilityState state)\r\n      {\r\n         switch (state)\r\n         {\r\n            case VisibilityState.Default:\r\n               {\r\n                  dataGrid_PropertyMapping.Visibility = System.Windows.Visibility.Visible;\r\n                  button_ResetAll.Visibility = System.Windows.Visibility.Visible;\r\n                  image_EmptyStatePsets.Visibility = System.Windows.Visibility.Collapsed;\r\n                  textBlock_EmptyStatePsetsInfo.Visibility = System.Windows.Visibility.Collapsed;\r\n                  textBlock_EmptyStatePsets.Visibility = System.Windows.Visibility.Collapsed;\r\n                  textBlock_EmptyStatePsets.Visibility = System.Windows.Visibility.Collapsed;\r\n                  break;\r\n               }\r\n            case VisibilityState.EmptyStateSchedules:\r\n               {\r\n                  dataGrid_PropertyMapping.Visibility = System.Windows.Visibility.Collapsed;\r\n                  image_EmptyStatePsets.Visibility = System.Windows.Visibility.Visible;\r\n                  textBlock_EmptyStatePsetsInfo.Visibility = System.Windows.Visibility.Visible;\r\n                  textBlock_EmptyStatePsets.Visibility = System.Windows.Visibility.Visible;\r\n                  textBlock_EmptyStatePsetsInfo.Text = Properties.Resources.EmptyStateScheduleInfo;\r\n                  textBlock_EmptyStatePsets.Text = Properties.Resources.EmptyStateSchedulePsets;\r\n                  button_ResetAll.Visibility = System.Windows.Visibility.Hidden;\r\n                  textBlock_PropertySetName.Text = string.Empty;\r\n                  break;\r\n               }\r\n            case VisibilityState.EmptyStateMaterials:\r\n               {\r\n                  dataGrid_PropertyMapping.Visibility = System.Windows.Visibility.Collapsed;\r\n                  image_EmptyStatePsets.Visibility = System.Windows.Visibility.Visible;\r\n                  textBlock_EmptyStatePsetsInfo.Visibility = System.Windows.Visibility.Visible;\r\n                  textBlock_EmptyStatePsets.Visibility = System.Windows.Visibility.Visible;\r\n                  textBlock_EmptyStatePsetsInfo.Text = Properties.Resources.EmptyStateMaterialPsets;\r\n                  textBlock_EmptyStatePsets.Text = Properties.Resources.EmptyStateMaterialInfo;\r\n                  button_ResetAll.Visibility = System.Windows.Visibility.Hidden;\r\n                  textBlock_PropertySetName.Text = string.Empty;\r\n                  break;\r\n               }\r\n            case VisibilityState.NothingSelected:\r\n               {\r\n                  dataGrid_PropertyMapping.Visibility = System.Windows.Visibility.Collapsed;\r\n                  image_EmptyStatePsets.Visibility = System.Windows.Visibility.Visible;\r\n                  textBlock_EmptyStatePsetsInfo.Visibility = System.Windows.Visibility.Collapsed;\r\n                  textBlock_EmptyStatePsets.Visibility = System.Windows.Visibility.Visible;\r\n                  textBlock_EmptyStatePsets.Text = Properties.Resources.EmptyStatePropertySet;\r\n                  button_ResetAll.Visibility = System.Windows.Visibility.Hidden;\r\n                  textBlock_PropertySetName.Text = string.Empty;\r\n                  break;\r\n               }\r\n            default:\r\n               break;\r\n         }\r\n      }\r\n\r\n      private VisibilityState GetVisibilityStateForCurrentSelection()\r\n      {\r\n         if (SelectedPropertySet != null)\r\n            return VisibilityState.Default;\r\n\r\n         if (treeView_PropertySetups.SelectedItem is SetupMappingInfo selectedSetup)\r\n         {\r\n            _selectedPropertySetup = selectedSetup.PropertySetup;\r\n\r\n            if (selectedSetup.PSetMappingInfos.Count == 0 &&\r\n               (_selectedPropertySetup == PropertySetupType.RevitMaterialParameters ||\r\n               _selectedPropertySetup == PropertySetupType.RevitSchedules))\r\n            {\r\n               return _selectedPropertySetup == PropertySetupType.RevitMaterialParameters ?\r\n                  VisibilityState.EmptyStateMaterials : VisibilityState.EmptyStateSchedules;\r\n            }\r\n         }\r\n\r\n         return VisibilityState.NothingSelected;\r\n      }\r\n      #endregion\r\n\r\n      private void InitializePropertyDataGrid()\r\n      {\r\n         textBlock_PropertySetName.Text = SelectedPropertySet?.Name ?? string.Empty;\r\n\r\n         InitializeCategoryFilter();\r\n         RefreshPropertyGridForCategoryFilter();\r\n      }\r\n\r\n      private void RefreshPropertyGridForCategoryFilter()\r\n      {\r\n         if (ObservableProperties.Count > 0)\r\n            ObservableProperties.Clear();\r\n\r\n         if (SelectedPropertySet == null)\r\n         {\r\n            ExportFlagAll = UpdateHeaderCheckboxFlag(ObservableProperties);\r\n            return;\r\n         }\r\n\r\n         foreach (PropertyMappingInfo propertyInfo in GetPropertyInfosWithCategoryFilter())\r\n            ObservableProperties.Add(propertyInfo);\r\n\r\n         ExportFlagAll = UpdateHeaderCheckboxFlag(ObservableProperties);\r\n      }\r\n\r\n      private IEnumerable<PropertyMappingInfo> GetPropertyInfosWithCategoryFilter()\r\n      {\r\n         if (SelectedPropertySet == null)\r\n            yield break;\r\n\r\n         List<PropertyMappingInfo> propertyInfos = SelectedPropertySet.PropertyInfos ?? new List<PropertyMappingInfo>();\r\n\r\n         if (SelectedPropertySet?.ParentSetup?.PropertySetup != PropertySetupType.RevitElementParameters)\r\n         {\r\n            foreach (PropertyMappingInfo propertyInfo in propertyInfos)\r\n               yield return propertyInfo;\r\n            yield break;\r\n         }\r\n\r\n         if (string.IsNullOrEmpty(_currentCategoryFilter) ||\r\n            string.Equals(_currentCategoryFilter, Properties.Resources.DefaultCategoryFilterTxt, StringComparison.CurrentCultureIgnoreCase) ||\r\n            !_categoryParameterLookup.TryGetValue(_currentCategoryFilter, out CategoryParameterSet parameterSet))\r\n         {\r\n            foreach (PropertyMappingInfo propertyInfo in propertyInfos)\r\n               yield return propertyInfo;\r\n            yield break;\r\n         }\r\n\r\n         foreach (PropertyMappingInfo propertyInfo in propertyInfos)\r\n         {\r\n            if (parameterSet.Contains(propertyInfo))\r\n               yield return propertyInfo;\r\n         }\r\n      }\r\n\r\n      private static string GetCategoryDisplayName(ElementId categoryId)\r\n      {\r\n         if (categoryId == null || categoryId == ElementId.InvalidElementId)\r\n            return string.Empty;\r\n         Document document = IFCCommandOverrideApplication.TheDocument;\r\n         if (document == null)\r\n            return string.Empty;\r\n         Category category = Category.GetCategory(document, categoryId);\r\n         if (category == null)\r\n            return string.Empty;\r\n\r\n         string categoryName = category.Name ?? string.Empty;\r\n         string parentName = category.Parent?.Name;\r\n\r\n         if (!string.IsNullOrEmpty(parentName) &&\r\n            !string.Equals(parentName, categoryName, StringComparison.CurrentCultureIgnoreCase))\r\n            return $\"{parentName}: {categoryName}\";\r\n\r\n         return categoryName;\r\n      }\r\n\r\n      private void ResetCategoryFilterSelection()\r\n      {\r\n         _suppressCategoryFilterSelectionChanged = true;\r\n         _currentCategoryFilter = Properties.Resources.DefaultCategoryFilterTxt;\r\n\r\n         if (comboBox_CategoryName.ItemsSource != null && comboBox_CategoryName.Items.Count > 0)\r\n            comboBox_CategoryName.SelectedIndex = 0;\r\n\r\n         _suppressCategoryFilterSelectionChanged = false;\r\n      }\r\n\r\n      private void comboBox_CategoryName_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         if (_suppressCategoryFilterSelectionChanged)\r\n            return;\r\n\r\n         string selectedFilter = comboBox_CategoryName.SelectedItem as string ?? Properties.Resources.DefaultCategoryFilterTxt;\r\n         if (string.Equals(_currentCategoryFilter, selectedFilter, StringComparison.CurrentCultureIgnoreCase))\r\n            return;\r\n\r\n         _currentCategoryFilter = selectedFilter;\r\n         RefreshPropertyGridForCategoryFilter();\r\n      }\r\n\r\n      private sealed class CategoryParameterSet\r\n      {\r\n         private readonly HashSet<long> _parameterIds = new();\r\n         private readonly HashSet<string> _parameterNames = new(StringComparer.CurrentCultureIgnoreCase);\r\n\r\n         public CategoryParameterSet(IEnumerable<RevitParameterData> parameters)\r\n         {\r\n            AddParameters(parameters);\r\n         }\r\n\r\n         public void AddParameters(IEnumerable<RevitParameterData> parameters)\r\n         {\r\n            if (parameters == null)\r\n               return;\r\n\r\n            foreach (RevitParameterData parameter in parameters)\r\n            {\r\n               if (parameter == null)\r\n                  continue;\r\n\r\n               ElementId parameterId = parameter.Id;\r\n               if (parameterId != null && parameterId != ElementId.InvalidElementId)\r\n                  _parameterIds.Add(parameterId.Value);\r\n\r\n               string parameterName = parameter.Name;\r\n               if (!string.IsNullOrEmpty(parameterName))\r\n                  _parameterNames.Add(parameterName);\r\n            }\r\n         }\r\n\r\n         public bool Contains(PropertyMappingInfo propertyInfo)\r\n         {\r\n            if (propertyInfo == null)\r\n               return false;\r\n\r\n            ElementId propertyId = propertyInfo.RevitPropertyId;\r\n            if (propertyId != ElementId.InvalidElementId && _parameterIds.Contains(propertyId.Value))\r\n               return true;\r\n\r\n            string propertyName = propertyInfo.RevitPropertyName;\r\n            if (!string.IsNullOrEmpty(propertyName) && _parameterNames.Contains(propertyName))\r\n               return true;\r\n\r\n            return false;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns true is the name is equal to in-session template name\r\n      /// </summary>\r\n      static bool IsInSessionTemplate(string templateName)\r\n      {\r\n         if (string.IsNullOrEmpty(templateName))\r\n            return false;\r\n\r\n         string inSessionName = GetInSessionTemplateName();\r\n         return templateName.Equals(inSessionName);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns in-session template name\r\n      /// </summary>\r\n      static string GetInSessionTemplateName()\r\n      {\r\n         IFCParameterTemplate inSessionTemplate = IFCParameterTemplate.GetOrCreateInSessionTemplate(IFCCommandOverrideApplication.TheDocument);\r\n         return inSessionTemplate?.Name ?? string.Empty;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the list of templates in the document including the in-session one\r\n      /// </summary>\r\n      static IList<string> GetAllTemplateNames()\r\n      {\r\n         IList<string> templateNames = IFCParameterTemplate.ListNames(IFCCommandOverrideApplication.TheDocument) ?? new List<string>();\r\n         templateNames.Add(GetInSessionTemplateName());\r\n\r\n         return templateNames;\r\n      }\r\n\r\n      private static string CleanTemplateName(string templateName)\r\n      {\r\n         // Use regex to remove angle brackets and square brackets in one operation\r\n         return string.IsNullOrEmpty(templateName) ? templateName :\r\n                Regex.Replace(templateName, @\"[<>\\[\\]]\", \"\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get template active in list\r\n      /// </summary>\r\n      private IFCParameterTemplate GetCurrentTemplate()\r\n      {\r\n         return GetTemplateByName(listBox_MappingTemplates.SelectedItem as string);\r\n      }\r\n\r\n      private IFCParameterTemplate GetTemplateByName(string templateName)\r\n      {\r\n         if (string.IsNullOrEmpty(templateName))\r\n            return null;\r\n\r\n         if (!IsCustomConfiguration)\r\n         {\r\n            if (_builtInTemplateCache.TryGetValue(templateName, out IFCParameterTemplate cachedTemplate))\r\n            {\r\n               return cachedTemplate;\r\n            }\r\n            return null;\r\n         }\r\n\r\n         IFCParameterTemplate foundTemplate = IsInSessionTemplate(templateName) ?\r\n            IFCParameterTemplate.GetOrCreateInSessionTemplate(IFCCommandOverrideApplication.TheDocument) :\r\n            IFCParameterTemplate.FindByName(IFCCommandOverrideApplication.TheDocument, templateName);\r\n\r\n         return foundTemplate;\r\n      }\r\n\r\n      private IFCParameterTemplate GetMappingTemplateFromConfiguration(Document doc, IFCExportConfiguration configuration)\r\n      {\r\n         if (configuration == null || doc == null)\r\n            return null;\r\n\r\n         IFCParameterTemplate currentTemplate = null;\r\n\r\n         if (!IsCustomConfiguration)\r\n         {\r\n            string builtInTemplateName = CleanTemplateName(configuration.Name);\r\n            if (!IFCParameterTemplate.IsValidName(doc, builtInTemplateName))\r\n               builtInTemplateName = CleanTemplateName(Properties.Resources.IFCDefaultSetup);\r\n\r\n            // Check cache first\r\n            if (_builtInTemplateCache.TryGetValue(builtInTemplateName, out currentTemplate))\r\n            {\r\n               return currentTemplate;\r\n            }\r\n\r\n            // Create new template and cache it\r\n            currentTemplate = new IFCParameterTemplate(doc);\r\n            try\r\n            {\r\n               currentTemplate.Name = builtInTemplateName;\r\n               _builtInTemplateCache[builtInTemplateName] = currentTemplate;\r\n            }\r\n            catch (Exception)\r\n            {\r\n            }\r\n            return currentTemplate;\r\n         }\r\n\r\n         string configurationTemplateName = configuration.PropertyMapping;\r\n         if (!string.IsNullOrEmpty(configurationTemplateName))\r\n            currentTemplate = IFCParameterTemplate.FindByName(doc, configurationTemplateName);\r\n\r\n         currentTemplate ??= IFCParameterTemplate.GetOrCreateInSessionTemplate(doc);\r\n\r\n         return currentTemplate;\r\n      }\r\n\r\n      private void WriteMappingInfoToTemplate(string templateName)\r\n      {\r\n         if (string.IsNullOrEmpty(templateName))\r\n            return;\r\n\r\n         IFCParameterTemplate template = GetTemplateByName(templateName);\r\n         WriteMappingInfoToTemplate(template);\r\n      }\r\n\r\n      private void WriteMappingInfoToTemplate(IFCParameterTemplate template)\r\n      {\r\n         if (template == null || !IsCustomConfiguration)\r\n            return;\r\n\r\n         // After this clean the template contain only the mappings that don't exist in\r\n         // current SetupInfos, so now simply write to template each not default mapping.\r\n         CleanMappingTemplate(template);\r\n\r\n         HashSet<ElementId> usedRevitPropertyIds = new();\r\n\r\n         foreach (SetupMappingInfo setupInfo in SetupInfos)\r\n         {\r\n            PropertySetupType propertySetup = setupInfo.PropertySetup;\r\n\r\n            foreach (PSetMappingInfo psetInfo in setupInfo.PSetMappingInfos)\r\n            {\r\n               string psetName =\r\n                  (setupInfo.IfcVersion == IFCVersion.IFC2x3 && propertySetup == PropertySetupType.IfcBaseQuantities) ?\r\n                  PSetMappingInfo.ConvertQuantitySetNameFrom2x3(psetInfo.Name) : psetInfo.Name;\r\n\r\n               if (string.IsNullOrEmpty(psetName))\r\n                  continue;\r\n\r\n               List<PropertyMappingInfo> propertyInfos = psetInfo.PropertyInfos;\r\n               if (propertyInfos == null)\r\n                  continue;\r\n\r\n               bool isExportingPset = psetInfo.ExportFlag;\r\n\r\n               List<IFCPropertyMappingInfo> modifiedPropertyMappings = [];\r\n               foreach (var propertyInfo in propertyInfos)\r\n               {\r\n                  if (propertyInfo.IsDefault())\r\n                     continue;\r\n\r\n                  // Hopefully this is redundant, but not checking could case a crash in the Add function.\r\n                  ElementId revitPropertyId = propertyInfo.RevitPropertyId;\r\n                  if (usedRevitPropertyIds.Contains(revitPropertyId))\r\n                     continue;\r\n\r\n                  modifiedPropertyMappings.Add(new IFCPropertyMappingInfo\r\n                  {\r\n                     ExportFlag = propertyInfo.ExportFlag,\r\n                     IFCPropertyName = propertyInfo.IFCPropertyName,\r\n                     RevitPropertyId = revitPropertyId,\r\n                     RevitPropertyName = propertyInfo.RevitPropertyName\r\n                  });\r\n                  usedRevitPropertyIds.Add(revitPropertyId);\r\n               }\r\n\r\n               if (!NeedToWritePSetToTemplate(isExportingPset, modifiedPropertyMappings, setupInfo))\r\n               {\r\n                  // The property set is in default state\r\n                  continue;\r\n               }\r\n\r\n               if (template.IsPropertySetAMemberOfTemplate(propertySetup, psetName))\r\n               {\r\n                  template.SetPropertySetExportingFlag(propertySetup, psetName, isExportingPset);\r\n               }\r\n               else\r\n               {\r\n                  template.AddPropertySet(propertySetup, isExportingPset, psetName);\r\n               }\r\n\r\n               foreach (IFCPropertyMappingInfo modifiedPropertyMapping in modifiedPropertyMappings)\r\n               {\r\n                  if (!IFCPropertyMappingInfo.IsValidMappingInfo(modifiedPropertyMapping))\r\n                     continue;\r\n\r\n                  template.AddPropertyMappingInfo(propertySetup, psetName, modifiedPropertyMapping);\r\n               }\r\n            }\r\n\r\n            bool exportSetup = !setupInfo.ExportSetup.HasValue || setupInfo.ExportSetup.Value;\r\n            WriteSetupExportFlagToTemplate(template, propertySetup, exportSetup);\r\n         }\r\n      }\r\n\r\n      private static bool NeedToWritePSetToTemplate(bool isExportingPset, List<IFCPropertyMappingInfo> modifiedPropertyMappings,\r\n         SetupMappingInfo setupInfo)\r\n      {\r\n         // If there are modified Properties in the Property Set, we need to write it to the template\r\n         if (modifiedPropertyMappings.Count > 0)\r\n            return true;\r\n\r\n         // If the Property Set is not exporting, we need to write it to the template,\r\n         // but only when the Setup is enabled (when the setup is disabled all its Property Sets\r\n         // are disabled too, no need to keep all of them in the Template in this case)\r\n         bool setupIsDisabled = setupInfo.ExportSetup.HasValue && !setupInfo.ExportSetup.Value;\r\n         if (setupIsDisabled)\r\n            return false;\r\n\r\n         return !isExportingPset;\r\n      }\r\n\r\n      private static void WriteSetupExportFlagToTemplate(IFCParameterTemplate template, PropertySetupType propertySetup, bool exportFlag)\r\n      {\r\n         switch (propertySetup)\r\n         {\r\n            case PropertySetupType.IfcCommonPropertySets:\r\n               template.ExportIFCCommonPropertySets = exportFlag;\r\n               break;\r\n            case PropertySetupType.RevitElementParameters:\r\n               template.ExportRevitElementParameters = exportFlag;\r\n               break;\r\n            case PropertySetupType.IfcBaseQuantities:\r\n               template.ExportIFCBaseQuantities = exportFlag;\r\n               break;\r\n            case PropertySetupType.RevitMaterialParameters:\r\n               template.ExportRevitMaterialParameters = exportFlag;\r\n               break;\r\n            case PropertySetupType.RevitSchedules:\r\n               template.ExportRevitSchedules = exportFlag;\r\n               break;\r\n            case PropertySetupType.UserDefinedPropertySets:\r\n               template.ExportUserDefinedPropertySets = exportFlag;\r\n               break;\r\n         }\r\n      }\r\n\r\n      private static bool ReadSetupExportFlagFromTemplate(IFCParameterTemplate template, PropertySetupType propertySetup)\r\n      {\r\n         switch (propertySetup)\r\n         {\r\n            case PropertySetupType.IfcCommonPropertySets:\r\n               return template.ExportIFCCommonPropertySets;\r\n            case PropertySetupType.RevitElementParameters:\r\n               return template.ExportRevitElementParameters;\r\n            case PropertySetupType.IfcBaseQuantities:\r\n               return template.ExportIFCBaseQuantities;\r\n            case PropertySetupType.RevitMaterialParameters:\r\n               return template.ExportRevitMaterialParameters;\r\n            case PropertySetupType.RevitSchedules:\r\n               return template.ExportRevitSchedules;\r\n            case PropertySetupType.UserDefinedPropertySets:\r\n               return template.ExportUserDefinedPropertySets;\r\n            default:\r\n               return true;\r\n         }\r\n      }\r\n\r\n      // A template can already store property mappings including \r\n      // the property mappings for other IFC schemas.\r\n      // Here we want to preserve the existing in template property mappings\r\n      // if they are not represented in the current SetupInfos\r\n      private void CleanMappingTemplate(IFCParameterTemplate template)\r\n      {\r\n         if (template == null)\r\n            return;\r\n\r\n         foreach (PropertySetupType propertySetup in _propertySetups)\r\n         {\r\n            IList<string> templatePSetNames = template.GetPropertySetNames(propertySetup, PropertySelectionType.All);\r\n\r\n            foreach (string templatePsetName in templatePSetNames)\r\n            {\r\n               PSetMappingInfo psetInfo = FindPSetInfo(propertySetup, templatePsetName);\r\n               if (psetInfo == null)\r\n                  continue;\r\n\r\n               IList<IFCPropertyMappingInfo> templatePropertyInfos =\r\n                  template.GetPropertyMappingInfos(propertySetup, templatePsetName, PropertySelectionType.All);\r\n\r\n               List<IFCPropertyMappingInfo> templatePropertiesToKeep = [];\r\n               foreach (IFCPropertyMappingInfo templatePropertyInfo in templatePropertyInfos)\r\n               {\r\n                  if (!psetInfo.TryGetProperty(templatePropertyInfo, out _))\r\n                     templatePropertiesToKeep.Add(templatePropertyInfo);\r\n               }\r\n\r\n               template.RemovePropertySet(propertySetup, templatePsetName);\r\n\r\n               if (templatePropertiesToKeep.Count > 0)\r\n               {\r\n                  template.AddPropertySet(propertySetup, psetInfo.ExportFlag, templatePsetName);\r\n\r\n                  foreach (IFCPropertyMappingInfo templatePropertyToKeep in templatePropertiesToKeep)\r\n                  {\r\n                     if (!IFCPropertyMappingInfo.IsValidMappingInfo(templatePropertyToKeep))\r\n                        continue;\r\n\r\n                     template.AddPropertyMappingInfo(propertySetup, templatePsetName, templatePropertyToKeep);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      public PSetMappingInfo FindPSetInfo(PropertySetupType propertySetup, string psetName)\r\n      {\r\n         foreach (SetupMappingInfo setupInfo in SetupInfos)\r\n         {\r\n            if (setupInfo.PropertySetup != propertySetup)\r\n               continue;\r\n\r\n            string displayedPsetName =\r\n               (setupInfo.IfcVersion == IFCVersion.IFC2x3 && propertySetup == PropertySetupType.IfcBaseQuantities) ?\r\n               PSetMappingInfo.ConvertQuantitySetNameTo2x3(psetName) : psetName;\r\n\r\n            foreach (PSetMappingInfo psetInfo in setupInfo.PSetMappingInfos)\r\n            {\r\n               if (psetInfo.Name == displayedPsetName)\r\n                  return psetInfo;\r\n            }\r\n         }\r\n         return null;\r\n      }\r\n\r\n      private void button_Ok_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         SaveDialogChanges();\r\n         Close();\r\n      }\r\n\r\n      private void button_Cancel_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         DiscardTransactionsGroup();\r\n         Close();\r\n      }\r\n\r\n      protected override bool OnContextHelp()\r\n      {\r\n         ContextualHelp help = new ContextualHelp(ContextualHelpType.ContextId, \"HDialog_IFC_PropertyMapping\");\r\n         help.Launch();\r\n\r\n         return true;\r\n      }\r\n\r\n      private void ChildWindow_PreviewKeyDown(object sender, KeyEventArgs e)\r\n      {\r\n         if (e.Key == Key.Escape)\r\n         {\r\n            e.Handled = true;\r\n            button_Cancel_Click(button_Cancel, new RoutedEventArgs());\r\n         }\r\n      }\r\n\r\n      private void ChildWindow_Closing(object sender, CancelEventArgs e)\r\n      {\r\n         UnsubscribeFromPropertyMappingChanges();\r\n         DiscardTransactionsGroup();\r\n      }\r\n\r\n      private void SaveDialogChanges()\r\n      {\r\n         IFCParameterTemplate currentTemplate = GetCurrentTemplate();\r\n         if (currentTemplate == null)\r\n            return;\r\n\r\n         WriteMappingInfoToTemplate(currentTemplate);\r\n         if (IsCustomConfiguration)\r\n         {\r\n            _ifcExportConfiguration.PropertyMapping = (string)listBox_MappingTemplates.SelectedItem;\r\n         }\r\n         CommitTransactionGroup();\r\n      }\r\n\r\n      private void StartTransactionGroup()\r\n      {\r\n         // Restart the transactions\r\n         if (!groupTransaction.HasStarted())\r\n            groupTransaction.Start();\r\n\r\n         if (!templateTransaction.HasStarted())\r\n            templateTransaction.Start();\r\n      }\r\n\r\n      private void CommitTransactionGroup()\r\n      {\r\n         // Save template changes\r\n         if (templateTransaction.HasStarted())\r\n            templateTransaction.Commit();\r\n\r\n         // Save all the dialog changes\r\n         if (groupTransaction.HasStarted())\r\n            groupTransaction.Assimilate();\r\n      }\r\n\r\n      private void DiscardTransactionsGroup()\r\n      {\r\n         // Roll back template changes\r\n         if (templateTransaction.HasStarted())\r\n            templateTransaction.RollBack();\r\n\r\n         // Roll back all the dialog changes after the last 'Save' pressing\r\n         if (groupTransaction.HasStarted())\r\n            groupTransaction.RollBack();\r\n      }\r\n\r\n      private void comboBox_IFCSchema_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         IFCParameterTemplate currentTemplate = GetCurrentTemplate();\r\n         if (currentTemplate == null)\r\n            return;\r\n\r\n         if (e.RemovedItems.Count > 0)\r\n            WriteMappingInfoToTemplate(currentTemplate);\r\n\r\n         InitializeSetupInfo(currentTemplate);\r\n\r\n         UpdateControlsVisibilityState(GetVisibilityStateForCurrentSelection());\r\n      }\r\n\r\n      private void textBox_Search_TextChanged(object sender, TextChangedEventArgs e)\r\n      {\r\n         string partialWord = textBox_Search.Text ?? string.Empty;\r\n\r\n         if (FilterTextPropertySet != partialWord)\r\n            FilterTextPropertySet = partialWord;\r\n      }\r\n\r\n      private void button_PropertySetClean_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         ResetSearch();\r\n      }\r\n\r\n      /// <summary>\r\n      /// This modifies ExportFlag for all PropertyMappingInfos \r\n      /// </summary>\r\n      private void ExportFlagAllClick()\r\n      {\r\n         bool? newState = ExportFlagAll;\r\n         if (!newState.HasValue)\r\n            return;\r\n\r\n         foreach (PropertyMappingInfo currMappingInfo in ObservableProperties)\r\n         {\r\n            if (currMappingInfo == null)\r\n               continue;\r\n\r\n            currMappingInfo.ExportFlag = newState.Value;\r\n         }\r\n      }\r\n\r\n      private void ExportFlagClick(object sender, RoutedEventArgs e)\r\n      {\r\n         ExportFlagAll = UpdateHeaderCheckboxFlag(ObservableProperties);\r\n      }\r\n\r\n      private void button_Reset_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         PropertyMappingInfo propertyMappingInfo = dataGrid_PropertyMapping.SelectedItem as PropertyMappingInfo;\r\n         if (propertyMappingInfo == null || propertyMappingInfo.IsDefault())\r\n            return;\r\n\r\n         // Resets one property mapping raw\r\n         propertyMappingInfo.ResetToDefault();\r\n         ExportFlagAll = UpdateHeaderCheckboxFlag(ObservableProperties);\r\n\r\n         // Refresh bindings (updates tooltips)\r\n         dataGrid_PropertyMapping.Items.Refresh();\r\n      }\r\n\r\n      private void button_ResetAll_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         if (SelectedPropertySet == null)\r\n            return;\r\n\r\n         SelectedPropertySet.ResetToDefault();\r\n\r\n         if (_selectedPropertySetup == PropertySetupType.RevitElementParameters)\r\n            ResetCategoryFilterSelection();\r\n\r\n         InitializePropertyDataGrid();\r\n         ResetSearch();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Clears the text in the search field \r\n      /// </summary>\r\n      private void ResetSearch()\r\n      {\r\n         textBox_Search.Text = string.Empty;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates indeterminate state if needed.\r\n      /// </summary>\r\n      private bool? UpdateHeaderCheckboxFlag(ObservableCollection<PropertyMappingInfo> propertyMappings)\r\n      {\r\n         if ((propertyMappings?.Count ?? 0) == 0)\r\n            return true;\r\n\r\n         bool foundChecked = propertyMappings.Any(node => node.ExportFlag);\r\n         bool foundUnchecked = propertyMappings.Any(node => !node.ExportFlag);\r\n         if (foundChecked && foundUnchecked)\r\n            return null;\r\n\r\n         return foundChecked;\r\n      }\r\n\r\n      private void button_RevitPropertyEdit_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         PropertyMappingInfo mappingInfo = dataGrid_PropertyMapping.SelectedItem as PropertyMappingInfo;\r\n         if (mappingInfo == null || mappingInfo.Type != IFCPropertyMappingModel.MappingType.IfcToRevit)\r\n            return;\r\n\r\n         if (SelectedPropertySet == null)\r\n            return;\r\n\r\n         IList<string> applicableEntities = GetApplicableEntitiesIfExist(SelectedPropertySet);\r\n         bool isTableProperty = IsTableUserDefinedProperty(SelectedPropertySet.Name, mappingInfo.IFCPropertyName);\r\n\r\n         IFCRevitPropertySelector propertySelector = new(\r\n            new RevitParameterInfo(mappingInfo.RevitPropertyName, mappingInfo.RevitPropertyId),\r\n            SelectedPropertySet.Name, mappingInfo.IFCPropertyName, mappingInfo.PropertyDataType, SelectedIfcSchema,\r\n            _selectedPropertySetup, applicableEntities, isTableProperty)\r\n         {\r\n            Owner = this,\r\n         };\r\n\r\n         bool? ret = propertySelector.ShowDialog();\r\n         if (ret.HasValue && ret.Value == true)\r\n         {\r\n            if (propertySelector.SelectedRevitParameter == null)\r\n               return;\r\n\r\n            (mappingInfo.RevitPropertyId, mappingInfo.RevitPropertyName) =\r\n               (propertySelector.SelectedRevitParameter.Id, propertySelector.SelectedRevitParameter.Name);\r\n\r\n            // Refresh bindings (updates tooltips)\r\n            dataGrid_PropertyMapping.Items.Refresh();\r\n         }\r\n      }\r\n\r\n      private static bool IsTableUserDefinedProperty(string propertySetName, string propertyName)\r\n      {\r\n         if (string.IsNullOrEmpty(propertySetName) || string.IsNullOrEmpty(propertyName))\r\n            return false;\r\n\r\n         IFCUserDefinedPropertySet propertySet =\r\n            IFCUserDefinedPropertySet.FindPropertySetByName(IFCCommandOverrideApplication.TheDocument, propertySetName);\r\n\r\n         IFCUserDefinedProperty foundProperty = propertySet?.FindPropertyByName(propertyName);\r\n         if (foundProperty == null)\r\n            return false;\r\n\r\n         return foundProperty.PropertyType == IFCUserDefinedPropertyType.Table;\r\n      }\r\n\r\n      private IList<string> GetApplicableEntitiesIfExist(PSetMappingInfo propertySetInfo)\r\n      {\r\n         if (string.IsNullOrEmpty(propertySetInfo?.Name))\r\n            return null;\r\n\r\n         PropertySetupType? setupType = propertySetInfo?.ParentSetup?.PropertySetup;\r\n         if (!setupType.HasValue || setupType != PropertySetupType.UserDefinedPropertySets)\r\n            return null;\r\n\r\n         IFCUserDefinedPropertySet userDefinedSet =\r\n            IFCUserDefinedPropertySet.FindPropertySetByName(IFCCommandOverrideApplication.TheDocument, propertySetInfo?.Name);\r\n         if (userDefinedSet == null)\r\n            return null;\r\n\r\n         return userDefinedSet.GetApplicableEntities();\r\n      }\r\n\r\n      public bool FilterPropertySet(object obj)\r\n      {\r\n         if (!string.IsNullOrEmpty(FilterTextPropertySet))\r\n         {\r\n            PSetMappingInfo psetItem = obj as PSetMappingInfo;\r\n            if (psetItem != null)\r\n            {\r\n               // Process Property Set Filter text\r\n               if (!string.IsNullOrEmpty(FilterTextPropertySet))\r\n               {\r\n                  bool passPSetFilter = psetItem.Name.Contains(FilterTextPropertySet, StringComparison.OrdinalIgnoreCase);\r\n                  if (!passPSetFilter)\r\n                     return false;\r\n               }\r\n            }\r\n         }\r\n         return true;\r\n      }\r\n\r\n      private void button_AddPropertySet_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCParameterTemplate currTemplate = GetCurrentTemplate();\r\n         if (currTemplate == null)\r\n            return;\r\n\r\n         WriteMappingInfoToTemplate(currTemplate);\r\n\r\n         if (templateTransaction.HasStarted())\r\n            templateTransaction.Commit();\r\n\r\n         IFCUserDefinedPropertyMapping userDefinedPropertyMapping = new()\r\n         {\r\n            Owner = this\r\n         };\r\n\r\n         userDefinedPropertyMapping.ShowDialog();\r\n         if (userDefinedPropertyMapping.IsModified)\r\n         {\r\n            InitializeSetupInfo(currTemplate);\r\n         }\r\n\r\n         if (templateTransaction.HasEnded())\r\n            templateTransaction.Start();\r\n      }\r\n\r\n      private static string GetCaseSensitiveFileNameOnDisk(string filePath)\r\n      {\r\n         if (string.IsNullOrEmpty(filePath))\r\n            return filePath;\r\n\r\n         string directory = Path.GetDirectoryName(filePath);\r\n         string fileName = Path.GetFileName(filePath);\r\n\r\n         if (string.IsNullOrEmpty(directory) || string.IsNullOrEmpty(fileName))\r\n            return filePath;\r\n\r\n         try\r\n         {\r\n            foreach (var entry in Directory.EnumerateFileSystemEntries(directory))\r\n            {\r\n               string entryName = Path.GetFileName(entry);\r\n               if (string.Equals(entryName, fileName, StringComparison.OrdinalIgnoreCase))\r\n                  return entry;\r\n            }\r\n         }\r\n         catch\r\n         {\r\n         }\r\n         return filePath;\r\n      }\r\n\r\n      public static string GetUniqueNameFromFile(string fullFileName, bool isCategoryMapping)\r\n      {\r\n         if (fullFileName == null)\r\n            return null;\r\n\r\n         string caseSensitiveFileName = GetCaseSensitiveFileNameOnDisk(fullFileName);\r\n         string fileNameOnly = Path.GetFileNameWithoutExtension(caseSensitiveFileName);\r\n\r\n         IFCTemplateData data = new(fileNameOnly, GetAllTemplateNames(),\r\n            isCategoryMapping, IFCTemplateData.DialogTypeEnum.Template);\r\n\r\n         return data.MakeUniqueName();\r\n      }\r\n   }\r\n\r\n   #region Converters\r\n   public class EditButtonVisibilityConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         if (!bool.TryParse((parameter as string), out bool isRevitParameterColumn))\r\n            return null;\r\n\r\n         IFCPropertyMappingModel.MappingType mappingType;\r\n\r\n         PSetMappingInfo mappingInfo = value as PSetMappingInfo;\r\n         if (mappingInfo != null)\r\n            mappingType = mappingInfo.Type;\r\n         else\r\n         {\r\n            SetupMappingInfo setupInfo = value as SetupMappingInfo;\r\n            if (setupInfo == null)\r\n            {\r\n               // special case when closing User-defined Property Set dialog\r\n               setupInfo = IFCPropertyMapping.SelectedPropertySet?.ParentSetup;\r\n               if (setupInfo == null)\r\n                  return null;\r\n            }\r\n\r\n            mappingType = IFCPropertyMappingModel.GetMappingType(setupInfo.PropertySetup);\r\n         }\r\n\r\n         return ((mappingType == IFCPropertyMappingModel.MappingType.IfcToRevit) ^ isRevitParameterColumn) ?\r\n               System.Windows.Visibility.Hidden : System.Windows.Visibility.Visible;\r\n      }\r\n\r\n      public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n   }\r\n\r\n   public class IsIFCColumnReadOnlyConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         IFCPropertyMappingModel.MappingType mappingType;\r\n\r\n         PSetMappingInfo mappingInfo = value as PSetMappingInfo;\r\n         if (mappingInfo != null)\r\n            mappingType = mappingInfo.Type;\r\n         else\r\n         {\r\n            SetupMappingInfo setupInfo = value as SetupMappingInfo;\r\n            if (setupInfo == null)\r\n               return null;\r\n\r\n            mappingType = IFCPropertyMappingModel.GetMappingType(setupInfo.PropertySetup);\r\n         }\r\n\r\n         return mappingType == IFCPropertyMappingModel.MappingType.IfcToRevit;\r\n      }\r\n\r\n      public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Replaces empty mapping with <default> string.\r\n   /// </summary>\r\n   public class EmptyToDefaulConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         string mappedName = (string)value;\r\n         if (string.IsNullOrEmpty(mappedName))\r\n         {\r\n            return Resources.DefaultMapping;\r\n         }\r\n\r\n         return mappedName;\r\n      }\r\n\r\n      object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         return value;\r\n      }\r\n   }\r\n\r\n   public class SetupNameToButtonVisibilityConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         PropertySetupType setupType = (PropertySetupType)value;\r\n         if (setupType == PropertySetupType.UserDefinedPropertySets)\r\n         {\r\n            return System.Windows.Visibility.Visible;\r\n         }\r\n\r\n         return System.Windows.Visibility.Collapsed;\r\n      }\r\n\r\n      object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         return string.Empty;\r\n      }\r\n   }\r\n\r\n   public class SelectedSetupToFilterVisibilityConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         PropertySetupType? setupType = null;\r\n\r\n         if (value is SetupMappingInfo setupInfo)\r\n            setupType = setupInfo.PropertySetup;\r\n         else if (value is PSetMappingInfo pSetInfo)\r\n            setupType = pSetInfo.ParentSetup?.PropertySetup;\r\n\r\n         if (!setupType.HasValue)\r\n            return System.Windows.Visibility.Collapsed;\r\n\r\n         return setupType.Value == PropertySetupType.RevitElementParameters ?\r\n            System.Windows.Visibility.Visible :\r\n            System.Windows.Visibility.Collapsed;\r\n      }\r\n\r\n      public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Replaces focused color of TreeViewItem based on Revit Theme.\r\n   /// </summary>\r\n   public class BoolToRowBackgroundColorConverter : IMultiValueConverter\r\n   {\r\n      public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         SolidColorBrush defaultColorBrush = Brushes.Transparent;\r\n\r\n         if (values == null || values[0] == null || values[1] == null)\r\n            return defaultColorBrush;\r\n\r\n         bool isRevitThemeDark = (bool)values[0];\r\n         FrameworkElement callingElement = (FrameworkElement)values[1];\r\n\r\n         if (isRevitThemeDark)\r\n         {\r\n            var resourceColor = callingElement.TryFindResource(\"RowBackgroundFocusedColorDark\");\r\n            if (resourceColor != null)\r\n               return resourceColor;\r\n         }\r\n         else\r\n         {\r\n            var resourceColor = callingElement.TryFindResource(\"RowBackgroundFocusedColor\");\r\n            if (resourceColor != null)\r\n               return resourceColor;\r\n         }\r\n         return defaultColorBrush;\r\n      }\r\n\r\n      public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Replaces glyph color of ToggleButton based on Revit Theme.\r\n   /// </summary>\r\n   public class BoolToGlyphColorConverter : IMultiValueConverter\r\n   {\r\n      public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         SolidColorBrush defaultColorBrush = Brushes.Transparent;\r\n\r\n         if (values == null || values[0] == null || values[1] == null)\r\n            return null;\r\n\r\n         bool isRevitThemeDark = (bool)values[0];\r\n         FrameworkElement callingElement = (FrameworkElement)values[1];\r\n\r\n\r\n         if (isRevitThemeDark)\r\n         {\r\n            var resourceColor = callingElement.TryFindResource(\"GlyphColorDark\");\r\n            if (resourceColor != null)\r\n               return resourceColor;\r\n         }\r\n         else\r\n         {\r\n            var resourceColor = callingElement.TryFindResource(\"GlyphColor\");\r\n            if (resourceColor != null)\r\n               return resourceColor;\r\n         }\r\n         return defaultColorBrush;\r\n      }\r\n\r\n      public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n   }\r\n\r\n   public class TreeViewIndexConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type TargetType, object parameter, CultureInfo culture)\r\n      {\r\n         TreeViewItem item = (TreeViewItem)value;\r\n         TreeView treeView = ItemsControl.ItemsControlFromItemContainer(item) as TreeView;\r\n         int index = treeView?.ItemContainerGenerator?.IndexFromContainer(item) ?? 0;\r\n         return index.ToString();\r\n      }\r\n\r\n      public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Converts ElementId to parameter tooltip text.\r\n   /// </summary>\r\n   public class ElementIdToTooltipConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         string parameterTooltip = null;\r\n         if (value is PropertyMappingInfo propertyInfo)\r\n         {\r\n            parameterTooltip = IFCPropertyMappingModel.GetParameterTooltip(propertyInfo.RevitPropertyId, propertyInfo.RevitPropertyName);\r\n         }\r\n\r\n         return string.IsNullOrEmpty(parameterTooltip) ? Resources.DefaultMapping : parameterTooltip;\r\n      }\r\n\r\n      public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n   }\r\n\r\n   #endregion\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCPropertyMapping/IFCPropertyMappingModel.cs",
    "content": "﻿using Autodesk.Revit.DB;\r\nusing Autodesk.Windows;\r\nusing BIM.IFC.Export.UI.Properties;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Export.Utility;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text.RegularExpressions;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Data;\r\nusing System.Windows.Media;\r\nusing UIFramework;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// This class is used for extraction, holding mapping information and writing it to a mapping template.\r\n   /// </summary>\r\n   public class IFCPropertyMappingModel : INotifyPropertyChanged\r\n   {\r\n      /// <summary>\r\n      /// Represents the types of property mapping.\r\n      /// IfcToRevit - IFC property info is readonly and unique, Revit property info is arbitrary (e.g. IFCCommonPropertySets).\r\n      /// RevitToIfc - Revit property info is readonly and unique, IFC propertyproperty info is arbitrary (e.g. RevitPropertySets).\r\n      /// </summary>\r\n      public enum MappingType\r\n      {\r\n         IfcToRevit,\r\n         RevitToIfc\r\n      }\r\n\r\n      /// <summary>\r\n      /// The IFC Common property set cache.\r\n      /// </summary>\r\n      private static Dictionary<IFCVersion, IList<IList<PropertySetDescription>>> IfcCommonPropertySetCache { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// The Base Quantities cache.\r\n      /// </summary>\r\n      private static Dictionary<IFCVersion, IList<IList<QuantityDescription>>> BaseQuantitiesCache { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// The built-in Revit parameters cache.\r\n      /// </summary>\r\n      private static SortedDictionary<string, List<(ElementId parameterId, (string parameterName, string dataTypeName))>> BuiltInParametersCache { get; set; }\r\n\r\n      /// <summary>\r\n      /// The all Revit parameters cache.\r\n      /// </summary>\r\n      private static SortedDictionary<string, List<(ElementId parameterId, (string parameterName, string dataTypeName))>> AllParametersCache { get; set; }\r\n\r\n      /// <summary>\r\n      /// The non built-in Revit parameters cache.\r\n      /// </summary>\r\n      private static SortedDictionary<string, List<(string, string)>> NonBuiltInParametersCache { get; set; }\r\n\r\n      /// <summary>\r\n      /// The built-in parameter tooltip cache.\r\n      /// </summary>\r\n      private static Dictionary<ElementId, string> ParameterTooltipsCache { get; set; }\r\n\r\n      /// <summary>\r\n      /// The hardcoded Property Setup to Mapping type matching\r\n      /// </summary>\r\n      static readonly Dictionary<PropertySetupType, MappingType> SetupMappingTypes = new()\r\n      {\r\n         { PropertySetupType.IfcCommonPropertySets, MappingType.IfcToRevit },\r\n         { PropertySetupType.RevitElementParameters, MappingType.RevitToIfc },\r\n         { PropertySetupType.IfcBaseQuantities, MappingType.IfcToRevit },\r\n         { PropertySetupType.RevitMaterialParameters, MappingType.RevitToIfc },\r\n         { PropertySetupType.RevitSchedules, MappingType.RevitToIfc },\r\n         { PropertySetupType.UserDefinedPropertySets, MappingType.IfcToRevit }\r\n      };\r\n\r\n      public event PropertyChangedEventHandler PropertyChanged;\r\n      protected void OnPropertyChanged([CallerMemberName] string name = null)\r\n      {\r\n         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get mapping type of a property setup.\r\n      /// </summary>\r\n      public static MappingType GetMappingType(PropertySetupType propertySetup)\r\n      {\r\n         if (SetupMappingTypes.ContainsKey(propertySetup))\r\n            return SetupMappingTypes[propertySetup];\r\n\r\n         return MappingType.IfcToRevit;\r\n      }\r\n\r\n      private static IList<IList<PropertySetDescription>> GetOrCreateCachedIfcCommonPropertySets(IFCVersion ifcVersion)\r\n      {\r\n         if (IfcCommonPropertySetCache.TryGetValue(ifcVersion, out IList<IList<PropertySetDescription>> allPropertySets))\r\n            return allPropertySets;\r\n\r\n         allPropertySets = new List<IList<PropertySetDescription>>();\r\n         ExporterInitializer.PopulateIFCCommonPropertySets(ifcVersion, allPropertySets);\r\n         IfcCommonPropertySetCache[ifcVersion] = allPropertySets;\r\n\r\n         return allPropertySets;\r\n      }\r\n\r\n      public static PropertySetDescription GetCachedIfcCommonPSetDescription(string psetName, IFCVersion ifcVersion)\r\n      {\r\n         IList<IList<PropertySetDescription>> allPropertySets = GetOrCreateCachedIfcCommonPropertySets(ifcVersion);\r\n\r\n         if (allPropertySets == null)\r\n            return null;\r\n\r\n         foreach (var psetList in allPropertySets)\r\n         {\r\n            foreach (var psetDescription in psetList)\r\n            {\r\n               if (psetDescription.Name == psetName)\r\n                  return psetDescription;\r\n            }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      private static IList<IList<QuantityDescription>> GetOrCreateCachedBaseQuantities(IFCVersion ifcVersion)\r\n      {\r\n         if (BaseQuantitiesCache.TryGetValue(ifcVersion, out IList<IList<QuantityDescription>> allQuantitySets))\r\n            return allQuantitySets;\r\n\r\n         allQuantitySets = new List<IList<QuantityDescription>>();\r\n         ExporterInitializer.PopulateBaseQuantitiesPropertySets(ifcVersion, allQuantitySets);\r\n         BaseQuantitiesCache[ifcVersion] = allQuantitySets;\r\n\r\n         return allQuantitySets;\r\n      }\r\n\r\n      public static QuantityDescription GetCachedBaseQuantityDescription(string psetName, IFCVersion ifcVersion)\r\n      {\r\n         IList<IList<QuantityDescription>> allQuantitySets = GetOrCreateCachedBaseQuantities(ifcVersion);\r\n\r\n         if (allQuantitySets == null)\r\n            return null;\r\n\r\n         foreach (var quantitiesList in allQuantitySets)\r\n         {\r\n            foreach (var quantitiyDescription in quantitiesList)\r\n            {\r\n               if (quantitiyDescription.Name == psetName)\r\n                  return quantitiyDescription;\r\n            }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      public SetupMappingInfo InitializeIFCCommonPropertySets(IFCVersion ifcVersion)\r\n      {\r\n         PropertySetupType propertySetup = PropertySetupType.IfcCommonPropertySets;\r\n\r\n         SetupMappingInfo setupInfo = new()\r\n         {\r\n            SetupName = GetPropertySetupName(propertySetup),\r\n            PropertySetup = propertySetup,\r\n            IfcVersion = ifcVersion\r\n         };\r\n\r\n         IList<IList<PropertySetDescription>> allPropertySets = GetOrCreateCachedIfcCommonPropertySets(ifcVersion);\r\n         if ((allPropertySets?.Count ?? 0) == 0 || allPropertySets[0] == null)\r\n            return setupInfo;\r\n\r\n         foreach (var setDescription in allPropertySets[0])\r\n         {\r\n            if ((setDescription?.Entries?.Count ?? 0) == 0)\r\n               continue;\r\n\r\n            string setName = setDescription.Name;\r\n            List<PropertyMappingInfo> propertyInfos = new();\r\n            foreach (var entry in setDescription.Entries)\r\n            {\r\n               propertyInfos.Add(new PropertyMappingInfo(entry.PropertyName, string.Empty, ElementId.InvalidElementId, propertySetup,\r\n                  entry.PropertyType.ToString()));\r\n            }\r\n\r\n            setupInfo.PSetMappingInfos.Add(new PSetMappingInfo(setName, propertySetup, propertyInfos, setupInfo));\r\n         }\r\n         return setupInfo;\r\n      }\r\n\r\n      public SetupMappingInfo InitializeRevitPropertySetsList()\r\n      {\r\n         PropertySetupType propertySetup = PropertySetupType.RevitElementParameters;\r\n\r\n         SetupMappingInfo setupInfo = new()\r\n         {\r\n            SetupName = GetPropertySetupName(propertySetup),\r\n            PropertySetup = propertySetup,\r\n         };\r\n\r\n         SortedDictionary<string, List<(ElementId parameterId, (string parameterName, string dataType))>> allParameters = GetGroupedRevitParameters();\r\n\r\n         foreach (var group in allParameters)\r\n         {\r\n            List<PropertyMappingInfo> propertyInfos = group.Value\r\n               .Select(param => new PropertyMappingInfo(string.Empty, param.Item2.parameterName, param.parameterId, propertySetup,\r\n               param.Item2.dataType))\r\n               .ToList();\r\n            setupInfo.PSetMappingInfos.Add(new PSetMappingInfo(group.Key, propertySetup, propertyInfos, setupInfo));\r\n         }\r\n\r\n         return setupInfo;\r\n      }\r\n\r\n      public SetupMappingInfo InitializeBaseQuantities(IFCVersion ifcVersion)\r\n      {\r\n         PropertySetupType propertySetup = PropertySetupType.IfcBaseQuantities;\r\n\r\n         SetupMappingInfo setupInfo = new()\r\n         {\r\n            SetupName = GetPropertySetupName(propertySetup),\r\n            PropertySetup = propertySetup,\r\n            IfcVersion = ifcVersion\r\n         };\r\n\r\n         IList<IList<QuantityDescription>> allQuantitySets = GetOrCreateCachedBaseQuantities(ifcVersion);\r\n         if ((allQuantitySets?.Count ?? 0) == 0 || allQuantitySets[0] == null)\r\n            return setupInfo;\r\n\r\n         foreach (var setDescription in allQuantitySets[0])\r\n         {\r\n            if ((setDescription?.Entries?.Count ?? 0) == 0)\r\n               continue;\r\n\r\n            string setName = setDescription.Name;\r\n            List<PropertyMappingInfo> propertyInfos = new();\r\n            foreach (var entry in setDescription.Entries)\r\n            {\r\n               propertyInfos.Add(new PropertyMappingInfo(entry.PropertyName, string.Empty, ElementId.InvalidElementId, propertySetup,\r\n                  entry.QuantityType.ToString()));\r\n            }\r\n            setupInfo.PSetMappingInfos.Add(new PSetMappingInfo(setName, propertySetup, propertyInfos, setupInfo));\r\n         }\r\n\r\n         return setupInfo;\r\n      }\r\n\r\n      public SetupMappingInfo InitializeMaterialPropertySets()\r\n      {\r\n         PropertySetupType propertySetup = PropertySetupType.RevitMaterialParameters;\r\n\r\n         SetupMappingInfo setupInfo = new()\r\n         {\r\n            SetupName = GetPropertySetupName(propertySetup),\r\n            PropertySetup = propertySetup,\r\n         };\r\n\r\n         Dictionary<string, List<(BuiltInParameter parameterId, string parameterName, string dataType)>> allParameters =\r\n            MaterialPropertiesUtil.GetGroupedMaterialParameters(IFCCommandOverrideApplication.TheDocument);\r\n\r\n         if (allParameters == null)\r\n            return setupInfo;\r\n\r\n         foreach (var group in allParameters)\r\n         {\r\n            Dictionary<BuiltInParameter, (string parameterName, string dataType)> sortedParameters = new();\r\n            foreach ((BuiltInParameter parameterId, string parameterName, string dataType) parameterInfo in group.Value)\r\n            {\r\n               if (sortedParameters.TryGetValue(parameterInfo.parameterId, out var parameterValue))\r\n               {\r\n                  // If there are duplicate built-in parameters, keep the one with data type.\r\n                  if (string.IsNullOrEmpty(parameterValue.dataType) && !string.IsNullOrEmpty(parameterInfo.dataType))\r\n                     sortedParameters[parameterInfo.parameterId] = (parameterInfo.parameterName, parameterInfo.dataType);\r\n               }\r\n               else\r\n               {\r\n                  sortedParameters[parameterInfo.parameterId] = (parameterInfo.parameterName, parameterInfo.dataType);\r\n               }\r\n            }\r\n\r\n            List<PropertyMappingInfo> propertyInfos = sortedParameters\r\n               .Select(param => new PropertyMappingInfo(string.Empty, param.Value.parameterName, new ElementId(param.Key), propertySetup,\r\n               param.Value.dataType))\r\n               .ToList();\r\n            setupInfo.PSetMappingInfos.Add(new PSetMappingInfo(group.Key, propertySetup, propertyInfos, setupInfo));\r\n         }\r\n\r\n         return setupInfo;\r\n      }\r\n\r\n      public SetupMappingInfo InitializeSchedules()\r\n      {\r\n         Document document = IFCCommandOverrideApplication.TheDocument;\r\n         PropertySetupType propertySetup = PropertySetupType.RevitSchedules;\r\n         SetupMappingInfo setupInfo = new()\r\n         {\r\n            SetupName = GetPropertySetupName(propertySetup),\r\n            PropertySetup = propertySetup,\r\n         };\r\n\r\n         List<(string, ScheduleDefinition)> collectedSchedules = ExporterUtil.CollectSchedules(IFCCommandOverrideApplication.TheDocument);\r\n         if ((collectedSchedules?.Count ?? 0) == 0)\r\n            return setupInfo;\r\n\r\n         foreach ((string scheduleName, ScheduleDefinition scheduleDefinition) in collectedSchedules)\r\n         {\r\n            if (string.IsNullOrWhiteSpace(scheduleName) || scheduleDefinition == null)\r\n               continue;\r\n\r\n            int fieldCount = scheduleDefinition.GetFieldCount();\r\n            if (fieldCount == 0)\r\n               continue;\r\n\r\n            List<PropertyMappingInfo> propertyInfos = [];\r\n            HashSet<ElementId> processedScheduleIds = new();\r\n\r\n            for (int ii = 0; ii < fieldCount; ii++)\r\n            {\r\n               ScheduleField field = scheduleDefinition.GetField(ii);\r\n               if (!ExporterInitializer.IsSupportedScheduleField(field))\r\n                  continue;\r\n\r\n               string propertyName = field.ColumnHeading;\r\n               if (string.IsNullOrEmpty(propertyName))\r\n                  continue;\r\n\r\n               string typeString = string.Empty;\r\n               ElementId parameterId = field.ParameterId;\r\n\r\n               switch (field.FieldType)\r\n               {\r\n                  case ScheduleFieldType.CombinedParameter:\r\n                     {\r\n                        typeString = \"Text\";\r\n                        break;\r\n                     }\r\n                  default:\r\n                     {\r\n                        if (parameterId == ElementId.InvalidElementId)\r\n                           continue;\r\n\r\n                        if (processedScheduleIds.Contains(parameterId))\r\n                           continue;\r\n\r\n                        InternalDefinition paramDefinition = null;\r\n                        if (ParameterUtils.IsBuiltInParameter(parameterId))\r\n                        {\r\n                           ForgeTypeId paramTypeId = ParameterUtils.GetParameterTypeId((BuiltInParameter)parameterId.Value);\r\n                           if (paramTypeId?.Empty() ?? true)\r\n                              continue;\r\n\r\n                           paramDefinition = ParameterUtils.GetDefinition(paramTypeId);\r\n\r\n                        }\r\n                        else\r\n                        {\r\n                           Element element = document.GetElement(new ElementId(parameterId.Value));\r\n                           if (element is not ParameterElement paramElement)\r\n                              continue;\r\n\r\n                           paramDefinition = paramElement?.GetDefinition();\r\n                        }\r\n\r\n                        ForgeTypeId dataTypeId = paramDefinition?.GetDataType();\r\n                        if ((dataTypeId?.Empty() ?? true) == false)\r\n                           typeString = LabelUtils.GetLabelForSpec(dataTypeId);\r\n\r\n                        processedScheduleIds.Add(parameterId);\r\n                        break;\r\n                     }\r\n               }\r\n\r\n               propertyInfos.Add(new PropertyMappingInfo(string.Empty, propertyName, parameterId,\r\n                  propertySetup, typeString));\r\n            }\r\n\r\n            if (propertyInfos.Count > 0)\r\n               setupInfo.PSetMappingInfos.Add(new PSetMappingInfo(scheduleName, propertySetup, propertyInfos, setupInfo));\r\n         }\r\n         \r\n         return setupInfo;\r\n      }\r\n\r\n      public SetupMappingInfo InitializeUserDefinedPropertySets()\r\n      {\r\n         PropertySetupType propertySetup = PropertySetupType.UserDefinedPropertySets;\r\n\r\n         SetupMappingInfo setupInfo = new()\r\n         {\r\n            SetupName = GetPropertySetupName(propertySetup),\r\n            PropertySetup = propertySetup,\r\n         };\r\n\r\n         Document document = IFCCommandOverrideApplication.TheDocument;\r\n\r\n         IList<string> propertySetNames = IFCUserDefinedPropertySet.ListPropertySetNames(document);\r\n         if ((propertySetNames?.Count ?? 0) == 0)\r\n            return setupInfo;\r\n\r\n         foreach (var psetName in propertySetNames)\r\n         {\r\n            IFCUserDefinedPropertySet userDefinedPSet = IFCUserDefinedPropertySet.FindPropertySetByName(document, psetName);\r\n            if (userDefinedPSet == null)\r\n               continue;\r\n\r\n            IList<IFCUserDefinedProperty> properties = userDefinedPSet.GetProperties();\r\n            if ((properties?.Count ?? 0) == 0)\r\n               continue;\r\n\r\n            List<PropertyMappingInfo> propertyInfos = new();\r\n\r\n            foreach (var property in properties)\r\n            {\r\n               if (property == null)\r\n                  continue;\r\n\r\n               string propertyName = property.IFCPropertyName;\r\n               if (string.IsNullOrEmpty(propertyName))\r\n                  continue;\r\n\r\n               string revitPropertyName = property.RevitPropertyName ?? string.Empty;\r\n               ElementId revitPropertyId = property.RevitPropertyId ?? ElementId.InvalidElementId;\r\n\r\n               propertyInfos.Add(new PropertyMappingInfo(propertyName, revitPropertyName, revitPropertyId, propertySetup, property.DataType));\r\n            }\r\n\r\n            setupInfo.PSetMappingInfos.Add(new PSetMappingInfo(psetName, propertySetup, propertyInfos, setupInfo));\r\n         }\r\n\r\n         return setupInfo;\r\n      }\r\n\r\n\r\n      public static SortedDictionary<string, List<(ElementId parameterId, (string parameterName, string dataTypeName))>> GetGroupedRevitParameters()\r\n      {\r\n         if (AllParametersCache != null)\r\n            return AllParametersCache;\r\n\r\n         AllParametersCache = GetBuiltInParameters();\r\n         SortedDictionary<string, List<(string parameterName, string dataTypeName)>> nonBuiltInParameters = GetNonBuiltInParameters();\r\n\r\n         foreach (var group in nonBuiltInParameters)\r\n         {\r\n            string groupName = group.Key;\r\n            var parametersToAdd = group.Value.Select(x => (ElementId.InvalidElementId, x)).ToList();\r\n            if (AllParametersCache.ContainsKey(groupName))\r\n            {\r\n               AllParametersCache[groupName] = AllParametersCache[groupName].Union(parametersToAdd).ToList();\r\n            }\r\n            else\r\n            {\r\n               AllParametersCache.Add(groupName, parametersToAdd);\r\n            }\r\n         }\r\n\r\n         // Sort parameter list\r\n         foreach (var group in AllParametersCache)\r\n         {\r\n            group.Value.Sort((a, b) =>\r\n            {\r\n               int namesCmp = string.Compare(a.Item2.parameterName, b.Item2.parameterName, false);\r\n               return namesCmp != 0 ? namesCmp : a.parameterId.Value.CompareTo(b.parameterId.Value);\r\n            });\r\n         }\r\n\r\n         return AllParametersCache;\r\n      }\r\n\r\n      public static SortedDictionary<string, List<(ElementId parameterId, (string parameterName, string dataTypeName))>> GetBuiltInParameters()\r\n      {\r\n         if (BuiltInParametersCache != null)\r\n            return BuiltInParametersCache;\r\n\r\n         BuiltInParametersCache = new();\r\n\r\n         foreach (ForgeTypeId paramTypeId in ParameterUtils.GetAllBuiltInParameters())\r\n         {\r\n            if (paramTypeId?.Empty() ?? true)\r\n               continue;\r\n\r\n            string paramName = LabelUtils.GetLabelForBuiltInParameter(paramTypeId);\r\n            if (string.IsNullOrEmpty(paramName))\r\n               continue;\r\n\r\n            ElementId paramId = new(ParameterUtils.GetBuiltInParameter(paramTypeId));\r\n            if (paramId.Equals(ElementId.InvalidElementId))\r\n               continue;\r\n\r\n            InternalDefinition paramDefinition = ParameterUtils.GetDefinition(paramTypeId);\r\n            if (paramDefinition == null)\r\n               continue;\r\n\r\n            string dataTypeName = string.Empty;\r\n            ForgeTypeId dataTypeId = paramDefinition.GetDataType();\r\n            if (!dataTypeId?.Empty() ?? false)\r\n               dataTypeName = LabelUtils.GetLabelForSpec(dataTypeId);\r\n\r\n            ForgeTypeId groupTypeId = ParameterUtils.GetBuiltInParameterGroupTypeId(paramTypeId);\r\n            if (groupTypeId == null)\r\n               continue;\r\n\r\n            string groupName = LabelUtils.GetLabelForGroup(groupTypeId);\r\n            if (string.IsNullOrEmpty(groupName))\r\n               continue;\r\n\r\n            BuiltInParametersCache.TryGetValue(groupName, out var parameterList);\r\n            if (parameterList == null)\r\n            {\r\n               parameterList = new();\r\n               BuiltInParametersCache.Add(groupName, parameterList);\r\n            }\r\n            parameterList.Add((paramId, (paramName, dataTypeName)));\r\n         }\r\n\r\n         return BuiltInParametersCache;\r\n      }\r\n\r\n      public static SortedDictionary<string, List<(string, string)>> GetNonBuiltInParameters()\r\n      {\r\n         if (NonBuiltInParametersCache != null)\r\n            return NonBuiltInParametersCache;\r\n\r\n         NonBuiltInParametersCache = new();\r\n\r\n         FilteredElementCollector collectorParam = new FilteredElementCollector(IFCCommandOverrideApplication.TheDocument);\r\n         FilteredElementCollector parameterFilter = collectorParam.OfClass(typeof(ParameterElement));\r\n\r\n         FilteredElementCollector collectorGlobalParam = new FilteredElementCollector(IFCCommandOverrideApplication.TheDocument);\r\n         FilteredElementCollector globalParameterFilter = collectorGlobalParam.OfClass(typeof(GlobalParameter));\r\n         if ((globalParameterFilter?.ToElementIds()?.Count ?? 0) > 0)\r\n            parameterFilter = parameterFilter.Excluding(globalParameterFilter.ToElementIds());\r\n\r\n         foreach (var filteredElement in parameterFilter)\r\n         {\r\n            ParameterElement parameterElement = filteredElement as ParameterElement;\r\n            if (parameterElement == null)\r\n               continue;\r\n\r\n            InternalDefinition paramDefinition = parameterElement.GetDefinition();\r\n            if (paramDefinition == null)\r\n               continue;\r\n\r\n            string dataTypeName = string.Empty;\r\n            ForgeTypeId dataTypeId = paramDefinition.GetDataType();\r\n            if ((dataTypeId?.Empty() ?? true) == false)\r\n               dataTypeName = LabelUtils.GetLabelForSpec(dataTypeId);\r\n\r\n            ForgeTypeId groupTypeId = paramDefinition?.GetGroupTypeId();\r\n            if (groupTypeId?.Empty() ?? true)\r\n               continue;\r\n\r\n            string groupName = LabelUtils.GetLabelForGroup(groupTypeId);\r\n            if (string.IsNullOrEmpty(groupName))\r\n               continue;\r\n\r\n            string paramName = paramDefinition.Name;\r\n            if (string.IsNullOrEmpty(paramName))\r\n               continue;\r\n\r\n            NonBuiltInParametersCache.TryGetValue(groupName, out var parameterList);\r\n            if (parameterList == null)\r\n            {\r\n               parameterList = new();\r\n               NonBuiltInParametersCache.Add(groupName, parameterList);\r\n            }\r\n            parameterList.Add((paramName, dataTypeName));\r\n         }\r\n\r\n         return NonBuiltInParametersCache;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Clear the cache of data that can be changed between dialog openings.\r\n      /// </summary>\r\n      public void ClearCache()\r\n      {\r\n         NonBuiltInParametersCache = null;\r\n         AllParametersCache = null;\r\n         ParameterTooltipsCache = null;\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Gets tooltip text for a parameter by its ElementId.\r\n      /// </summary>\r\n      public static string GetParameterTooltip(ElementId paramId, string parameterName)\r\n      {\r\n         if (paramId == ElementId.InvalidElementId)\r\n            return parameterName;\r\n\r\n         if (ParameterTooltipsCache == null)\r\n            ParameterTooltipsCache = new Dictionary<ElementId, string>();\r\n\r\n         if (ParameterTooltipsCache.TryGetValue(paramId, out string cachedTooltip))\r\n            return cachedTooltip;\r\n\r\n         string tooltipText = GetTooltipFromParameterId(paramId.Value);\r\n         if (string.IsNullOrEmpty(tooltipText))\r\n            tooltipText = parameterName;\r\n\r\n         ParameterTooltipsCache[paramId] = tooltipText;\r\n\r\n         return tooltipText;\r\n      }\r\n\r\n\r\n      public static string ExtractTextFromTooltip(RibbonToolTip tooltip)\r\n      {\r\n         if (tooltip?.Content == null)\r\n            return string.Empty;\r\n\r\n         if (tooltip.Content is TextBlock directTextBlock)\r\n         {\r\n            return directTextBlock.Text;\r\n         }\r\n\r\n         if (tooltip.Content is StackPanel stackPanel)\r\n         {\r\n            var textBlocks = FindTextBlocks(stackPanel);\r\n            return string.Join(\" \", textBlocks.Select(tb => tb.Text).Where(text => !string.IsNullOrEmpty(text)));\r\n         }\r\n\r\n         return string.Empty;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Helper method to recursively find TextBlocks in a DependencyObject.\r\n      /// </summary>\r\n      private static List<TextBlock> FindTextBlocks(DependencyObject parent)\r\n      {\r\n         List<TextBlock> textBlocks = new();\r\n\r\n         for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)\r\n         {\r\n            var child = VisualTreeHelper.GetChild(parent, i);\r\n\r\n            if (child is TextBlock textBlock)\r\n            {\r\n               textBlocks.Add(textBlock);\r\n            }\r\n         }\r\n\r\n         return textBlocks;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets tooltip text from a parameter id using Revit's built-in tooltip system.\r\n      /// </summary>\r\n      public static string GetTooltipFromParameterId(long paramId)\r\n      {\r\n         if (!Enum.IsDefined(typeof(BuiltInParameter), paramId))\r\n            return string.Empty;\r\n\r\n         string builtInName = Enum.GetName(typeof(BuiltInParameter), paramId) ?? string.Empty;\r\n         RibbonToolTip tooltip = RvtTooltip.LoadToolTip(builtInName);\r\n         return ExtractTextFromTooltip(tooltip);\r\n      }\r\n\r\n      private static string GetPropertySetupName(PropertySetupType propertySetup)\r\n      {\r\n         switch (propertySetup)\r\n         {\r\n            case PropertySetupType.IfcCommonPropertySets:\r\n               return Resources.IFCCommonPropertySets;\r\n            case PropertySetupType.RevitElementParameters:\r\n               return Resources.RevitPropertySets;\r\n            case PropertySetupType.IfcBaseQuantities:\r\n               return Resources.BaseQuantities;\r\n            case PropertySetupType.RevitMaterialParameters:\r\n               return Resources.MaterialPropertySets;\r\n            case PropertySetupType.RevitSchedules:\r\n               return Resources.Schedules;\r\n            case PropertySetupType.UserDefinedPropertySets:\r\n               return Resources.UserDefinedPropertySets;\r\n            default:\r\n               return string.Empty;\r\n         }\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Property Setup mapping information\r\n   /// </summary>\r\n   public class SetupMappingInfo : INotifyPropertyChanged\r\n   {\r\n      /// <summary>\r\n      /// The localized name of the property setup.\r\n      /// </summary>\r\n      public string SetupName { get; set; } = String.Empty;\r\n\r\n      /// <summary>\r\n      /// The property setup type.\r\n      /// </summary>\r\n      public PropertySetupType PropertySetup { get; set; } = new();\r\n      /// <summary>\r\n      /// The IFC version of the property setup.\r\n      /// </summary>\r\n      public IFCVersion IfcVersion { get; set; } = IFCVersion.Default;\r\n\r\n      /// <summary>\r\n      /// List of property set mapping information.\r\n      /// </summary>\r\n      public List<PSetMappingInfo> PSetMappingInfos { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// Flag to determine if a property setup is exported or not.\r\n      /// </summary>\r\n      private bool? m_ExportSetup = true;\r\n      public bool? ExportSetup\r\n      {\r\n         get { return m_ExportSetup; }\r\n         set\r\n         {\r\n            if (m_ExportSetup != value)\r\n            {\r\n               m_ExportSetup = value;\r\n               OnPropertyChanged();\r\n               if (value != null && !ParentUpdateInProgress)\r\n               {\r\n                  UpdateChildren(value.Value);\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      // Flags to avoid recursive calls when updating children and parent checkboxes\r\n      public static bool ChildrenUpdateInProgress { get; private set; } = false;\r\n      public static bool ParentUpdateInProgress { get; private set; } = false;\r\n\r\n      private void UpdateChildren(bool value)\r\n      {\r\n         ChildrenUpdateInProgress = true;\r\n         foreach (var child in PSetMappingInfos)\r\n         {\r\n            child.ExportFlag = value;\r\n         }\r\n         ChildrenUpdateInProgress = false;\r\n      }\r\n\r\n      public void UpdateParent()\r\n      {\r\n         if ((PSetMappingInfos?.Count ?? 0) == 0)\r\n            return;\r\n\r\n         ParentUpdateInProgress = true;\r\n         bool? newParentState = PSetMappingInfos[0].ExportFlag;\r\n         foreach (var psetInfo in PSetMappingInfos)\r\n         {\r\n            if (newParentState != psetInfo.ExportFlag)\r\n            {\r\n               newParentState = null;\r\n               break;\r\n            }\r\n         }\r\n         ExportSetup = newParentState;\r\n         ParentUpdateInProgress = false;\r\n      }\r\n\r\n      public ICollectionView PropertySetCollection => CollectionViewSource.GetDefaultView(PSetMappingInfos);\r\n\r\n      public event PropertyChangedEventHandler PropertyChanged;\r\n      protected void OnPropertyChanged([CallerMemberName] string name = null)\r\n      {\r\n         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Property Set mapping information\r\n   /// </summary>\r\n   public class PSetMappingInfo : INotifyPropertyChanged\r\n   {\r\n      /// <summary>\r\n      /// The name of the property set.\r\n      /// </summary>\r\n      public string Name { get; set; }\r\n\r\n      /// <summary>\r\n      /// Flag to determine if a property set is exported or not.\r\n      /// </summary>\r\n      private bool m_ExportFlag = true;\r\n      public bool ExportFlag\r\n      {\r\n         get { return m_ExportFlag; }\r\n         set\r\n         {\r\n            if (m_ExportFlag != value)\r\n            {\r\n               m_ExportFlag = value;\r\n               OnPropertyChanged();\r\n               if (!SetupMappingInfo.ChildrenUpdateInProgress)\r\n                  ParentSetup?.UpdateParent();\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// List of property mapping information.\r\n      /// </summary>\r\n      public List<PropertyMappingInfo> PropertyInfos { get; set; }\r\n\r\n      /// <summary>\r\n      /// The mapping type of the property set.\r\n      /// </summary>\r\n      public IFCPropertyMappingModel.MappingType Type { get; set; }\r\n\r\n      /// <summary>\r\n      /// The parent property setup mapping information.\r\n      /// </summary>\r\n      public SetupMappingInfo ParentSetup { get; set; }\r\n\r\n      public string AutomationId { get; set; }\r\n\r\n      public PSetMappingInfo(string name, PropertySetupType propertySetup, List<PropertyMappingInfo> propertyInfos, SetupMappingInfo parentSetup)\r\n      {\r\n         Name = name;\r\n         Type = IFCPropertyMappingModel.GetMappingType(propertySetup);\r\n         PropertyInfos = propertyInfos;\r\n         ParentSetup = parentSetup;\r\n         AutomationId = \"checkBox_PSet_\" + (int)propertySetup + @\"\\\" + name;\r\n      }\r\n\r\n      public bool TryGetProperty(IFCPropertyMappingInfo templatePropertyInfo, out PropertyMappingInfo modelPropertyInfo)\r\n      {\r\n         return TryGetProperty(templatePropertyInfo.IFCPropertyName, templatePropertyInfo.RevitPropertyId, templatePropertyInfo.RevitPropertyName, out modelPropertyInfo);\r\n      }\r\n\r\n      public bool TryGetProperty(string ifcPropertyName, ElementId revitPropertyId, string revitPropertyName, out PropertyMappingInfo modelPropertyInfo)\r\n      {\r\n         modelPropertyInfo = null;\r\n         if ((PropertyInfos?.Count ?? 0) == 0)\r\n            return false;\r\n\r\n         Func<PropertyMappingInfo, bool> keyComparator = PropertyMappingInfo.GetPropertyMappingKeyComparator(Type, ifcPropertyName, revitPropertyId, revitPropertyName);\r\n         modelPropertyInfo = PropertyInfos.FirstOrDefault(keyComparator);\r\n         return modelPropertyInfo != null;\r\n      }\r\n      public void ResetToDefault()\r\n      {\r\n         ExportFlag = true;\r\n\r\n         if ((PropertyInfos?.Count ?? 0) == 0)\r\n            return;\r\n\r\n         foreach (var mappingInfo in PropertyInfos)\r\n            mappingInfo.ResetToDefault();\r\n      }\r\n\r\n      // Converts IfcBeam.BaseQuantities to Qto_BeamBaseQuantities\r\n      public static string ConvertQuantitySetNameFrom2x3(string quantitySet2x3Name)\r\n      {\r\n         string pattern = @\"Ifc(\\w+)\\.BaseQuantities\";\r\n         string replacement = @\"Qto_$1BaseQuantities\";\r\n\r\n         return Regex.Replace(quantitySet2x3Name, pattern, replacement);\r\n      }\r\n\r\n      // Converts Qto_BeamBaseQuantities to IfcBeam.BaseQuantities\r\n      public static string ConvertQuantitySetNameTo2x3(string quantitySetName)\r\n      {\r\n         string pattern = @\"Qto_(\\w+)BaseQuantities\";\r\n         string replacement = @\"Ifc$1.BaseQuantities\";\r\n\r\n         return Regex.Replace(quantitySetName, pattern, replacement);\r\n      }\r\n\r\n      public event PropertyChangedEventHandler PropertyChanged;\r\n\r\n      protected void OnPropertyChanged([CallerMemberName] string name = null)\r\n      {\r\n         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));\r\n      }\r\n   }\r\n\r\n\r\n   /// <summary>\r\n   /// Property mapping information\r\n   /// </summary>\r\n   public class PropertyMappingInfo : INotifyPropertyChanged\r\n   {\r\n      /// <summary>\r\n      /// The default IFC property name for the mapping.\r\n      /// </summary>\r\n      private readonly string _defaultIfcPropertyName;\r\n\r\n      /// <summary>\r\n      /// Flag to determine if a PropertyMappingInfo is exported or not.\r\n      /// </summary>\r\n      private bool m_ExportFlag = true;\r\n      public bool ExportFlag\r\n      {\r\n         get { return m_ExportFlag; }\r\n         set\r\n         {\r\n            m_ExportFlag = value;\r\n            OnPropertyChanged();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The IFC property name.\r\n      /// </summary>\r\n      private string m_IFCPropertyName = null;\r\n      public string IFCPropertyName\r\n      {\r\n         get { return m_IFCPropertyName; }\r\n         set\r\n         {\r\n            m_IFCPropertyName = value;\r\n            OnPropertyChanged();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Revit property name.\r\n      /// </summary>\r\n      private string m_RevitPropertyName = null;\r\n      public string RevitPropertyName\r\n      {\r\n         get { return m_RevitPropertyName; }\r\n         set\r\n         {\r\n            m_RevitPropertyName = value;\r\n            OnPropertyChanged();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Revit property id.\r\n      /// </summary>\r\n      private ElementId m_RevitPropertyId = ElementId.InvalidElementId;\r\n      public ElementId RevitPropertyId\r\n      {\r\n         get { return m_RevitPropertyId; }\r\n         set\r\n         {\r\n            m_RevitPropertyId = value;\r\n            OnPropertyChanged();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The property data type.\r\n      /// </summary>\r\n      public string PropertyDataType { get; set; } = string.Empty;\r\n\r\n      /// <summary>\r\n      /// The property mapping type.\r\n      /// </summary>\r\n      public IFCPropertyMappingModel.MappingType Type { get; set; }\r\n\r\n      public PropertyMappingInfo(string ifcPropertyName, string revitPropertyName, ElementId revitPropertyId, PropertySetupType propertySetup, string propertyDataType)\r\n      {\r\n         string cleanedIfcPropertyName = ifcPropertyName ?? string.Empty;\r\n         string cleanedRevitPropertyName = revitPropertyName ?? string.Empty;\r\n\r\n         Type = IFCPropertyMappingModel.GetMappingType(propertySetup);\r\n\r\n         RevitPropertyName = cleanedRevitPropertyName;\r\n         RevitPropertyId = revitPropertyId;\r\n         PropertyDataType = propertyDataType ?? string.Empty;\r\n\r\n         if (Type == IFCPropertyMappingModel.MappingType.RevitToIfc)\r\n         {\r\n            _defaultIfcPropertyName = cleanedRevitPropertyName;\r\n            IFCPropertyName = string.IsNullOrEmpty(cleanedIfcPropertyName) ? _defaultIfcPropertyName : cleanedIfcPropertyName;\r\n         }\r\n         else\r\n         {\r\n            _defaultIfcPropertyName = cleanedIfcPropertyName;\r\n            IFCPropertyName = cleanedIfcPropertyName;\r\n         }\r\n      }\r\n\r\n      public void Assign(IFCPropertyMappingInfo templatePropertyInfo)\r\n      {\r\n         IFCPropertyName = templatePropertyInfo.IFCPropertyName;\r\n         RevitPropertyName = templatePropertyInfo.RevitPropertyName;\r\n         RevitPropertyId = templatePropertyInfo.RevitPropertyId;\r\n         ExportFlag = templatePropertyInfo.ExportFlag;\r\n      }\r\n\r\n      public static Func<PropertyMappingInfo, bool> GetPropertyMappingKeyComparator(IFCPropertyMappingModel.MappingType mappingType, string ifcPropertyName, ElementId revitPropertyId, string revitPropertyName)\r\n      {\r\n         return (mappingType == IFCPropertyMappingModel.MappingType.IfcToRevit) ?\r\n            (x => x.IFCPropertyName == ifcPropertyName) :\r\n            (x => x.RevitPropertyId == revitPropertyId && x.RevitPropertyName == revitPropertyName);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns true if mapping info is not modified.\r\n      /// </summary>\r\n      public bool IsDefault()\r\n      {\r\n         if (!ExportFlag)\r\n            return false;\r\n\r\n         if (Type == IFCPropertyMappingModel.MappingType.IfcToRevit)\r\n         {\r\n            if (RevitPropertyId != ElementId.InvalidElementId ||\r\n               !string.IsNullOrEmpty(RevitPropertyName))\r\n               return false;\r\n         }\r\n         else\r\n         {\r\n            if (!string.Equals(IFCPropertyName ?? string.Empty, _defaultIfcPropertyName ?? string.Empty, StringComparison.Ordinal))\r\n               return false;\r\n         }\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Resets current mapping info to default values.\r\n      /// </summary>\r\n      public void ResetToDefault()\r\n      {\r\n         if (!ExportFlag)\r\n            ExportFlag = true;\r\n\r\n         if (Type == IFCPropertyMappingModel.MappingType.IfcToRevit)\r\n         {\r\n            RevitPropertyName = string.Empty;\r\n            RevitPropertyId = ElementId.InvalidElementId;\r\n         }\r\n         else\r\n            IFCPropertyName = _defaultIfcPropertyName ?? string.Empty;\r\n      }\r\n\r\n      public event PropertyChangedEventHandler PropertyChanged;\r\n\r\n      protected void OnPropertyChanged([CallerMemberName] string name = null)\r\n      {\r\n         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCPropertyMapping/IFCRevitPropertySelector.xaml",
    "content": "﻿<auiw:ChildWindow x:Class=\"BIM.IFC.Export.UI.IFCRevitPropertySelector\"\r\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\r\n        xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\r\n        xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n        xmlns:local=\"clr-namespace:BIM.IFC.Export.UI\"\r\n        xmlns:weave=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:weave_d=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties.DesignTime;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:ctrl=\"clr-namespace:Autodesk.Weave.Wpf.Controls;assembly=Autodesk.Weave.Wpf\"\r\n        weave:FrameworkElementProperties.ApplyWeaveStyles=\"True\"\r\n        weave_d:FrameworkElementProperties.DesignTimeWeaveTheme=\"WeaveLightGray\"\r\n        Height=\"500\" Width=\"350\" MinHeight=\"200\" MinWidth=\"200\"\r\n        Title=\"{x:Static p:Resources.Properties}\" Closing=\"PropertySelectorWindow_Closing\">\r\n   <Grid Margin=\"0,10,0,0\">\r\n      <Grid.RowDefinitions>\r\n         <RowDefinition Height=\"Auto\"/>\r\n         <RowDefinition Height=\"Auto\"/>\r\n         <RowDefinition Height=\"Auto\"/>\r\n         <RowDefinition Height=\"*\"/>\r\n         <RowDefinition Height=\"Auto\"/>\r\n      </Grid.RowDefinitions>\r\n      <Grid.ColumnDefinitions>\r\n         <ColumnDefinition Width=\"*\"/>\r\n      </Grid.ColumnDefinitions>\r\n\r\n      <Grid.Resources>\r\n         <local:ListBoxIndexConverter x:Key=\"ListBoxIndexConverter\"/>\r\n      </Grid.Resources>\r\n\r\n      <TextBlock Text=\"{x:Static p:Resources.SelectCategory}\" \r\n                 Grid.Row=\"0\"\r\n                 weave:TextBlockProperties.Variant=\"BodyBold\"/>\r\n\r\n      <Grid Grid.Row=\"1\">\r\n         <Grid.ColumnDefinitions>\r\n            <ColumnDefinition Width=\"Auto\"/>\r\n            <ColumnDefinition Width=\"*\"/>\r\n         </Grid.ColumnDefinitions>\r\n         <TextBlock Text=\"{x:Static p:Resources.Category}\" \r\n                    weave:TextBlockProperties.Variant=\"CaptionRegular\"  \r\n                    VerticalAlignment=\"Center\"/>\r\n         <ComboBox x:Name=\"comboBox_Category\"\r\n                   Grid.Column=\"1\"\r\n                   HorizontalAlignment=\"Stretch\"\r\n                   SelectedValue=\"{Binding Path=SelectedCategory}\"\r\n                   SelectionChanged=\"comboBox_Category_SelectionChanged\"/>\r\n      </Grid>\r\n       \r\n       <StackPanel Grid.Row=\"2\" Orientation=\"Horizontal\">\r\n         <ctrl:IconButton x:Name=\"button_PropertyFilter\" IconName=\"FilterS\" />\r\n         <StackPanel>\r\n            <ComboBox x:Name=\"comboBox_PropertyFilter\" weave:ComboBoxProperties.Variant=\"Line\"\r\n                      ItemsSource=\"{Binding ParametersFilter, Mode=TwoWay}\" DisplayMemberPath=\"Name\"\r\n                      SelectionChanged =\"comboBox_PropertyFilter_SelectionChanged\"/>\r\n         </StackPanel>\r\n      </StackPanel>\r\n       \r\n      <ListBox x:Name=\"listBox_Parameters\"\r\n               Grid.Row=\"3\"\r\n               ItemsSource=\"{Binding SelectedItem.Items, ElementName=comboBox_PropertyFilter}\"\r\n               MinHeight=\"100\"\r\n               VirtualizingStackPanel.IsVirtualizing=\"False\">\r\n         <ListBox.ItemTemplate>\r\n            <DataTemplate>\r\n               <RadioButton x:Name=\"radioButton_Parameter\"\r\n                            GroupName=\"radioList\"\r\n                            IsChecked=\"{Binding IsChecked}\"\r\n                            Checked=\"radioButton_Parameter_Checked\"\r\n                            AutomationProperties.AutomationId=\"{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem}, \r\n                                   StringFormat=radioButton_Parameter_{0}, \r\n                                   Converter={StaticResource ListBoxIndexConverter} }\">\r\n                  <TextBlock Text=\"{Binding Name}\" />\r\n               </RadioButton>\r\n            </DataTemplate>\r\n         </ListBox.ItemTemplate>\r\n      </ListBox>\r\n\r\n      <StackPanel \r\n         Orientation=\"Horizontal\" \r\n         Grid.Row=\"4\" HorizontalAlignment=\"Right\" \r\n         weave:PanelProperties.Spacing=\"S\">\r\n         <Button x:Name=\"button_Ok\" \r\n                 Content=\"{x:Static p:Resources.OK}\" \r\n                 HorizontalAlignment=\"Left\" \r\n                 weave:ButtonProperties.Variant=\"Solid\" \r\n                 IsDefault=\"True\"\r\n                 Click=\"button_Ok_Click\"/>\r\n         <Button x:Name=\"button_Cancel\" \r\n                 Content=\"{x:Static p:Resources.Cancel}\" \r\n                 HorizontalAlignment=\"Left\" \r\n                 weave:ButtonProperties.Variant=\"Outline\"\r\n                 IsCancel=\"True\"\r\n                 Click=\"button_Cancel_Click\" Margin=\"0,0,7,0\"/>\r\n      </StackPanel>\r\n\r\n\r\n   </Grid>\r\n</auiw:ChildWindow>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCPropertyMapping/IFCRevitPropertySelector.xaml.cs",
    "content": "﻿using Autodesk.Revit.DB;\nusing Autodesk.UI.Windows;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Export.Exporter;\nusing Revit.IFC.Export.Exporter.PropertySet;\nusing Revit.IFC.Export.Utility;\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Globalization;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing static BIM.IFC.Export.UI.PropertySelectorModel;\n\nnamespace BIM.IFC.Export.UI\n{\n   /// <summary>\n   /// The class represents the item of property selector list.\n   /// </summary>\n   public class ParameterListItem : INotifyPropertyChanged\n   {  \n      public ParameterListItem() { }\n      public ParameterListItem(string name, ElementId id, bool isChecked)\n      {\n         Name = name;\n         Id = id;\n         IsChecked = isChecked;\n      }\n      public string Name { get; set; }\n      public ElementId Id { get; set; }\n\n      private bool _isChecked;\n      public bool IsChecked\n      {\n         get { return _isChecked; }\n         set\n         {\n            _isChecked = value;\n            OnPropertyChanged(nameof(IsChecked));\n         }\n      }\n\n      public event PropertyChangedEventHandler PropertyChanged;\n      protected void OnPropertyChanged([CallerMemberName] string name = null)\n      {\n         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));\n      }\n   }\n\n   /// <summary>\n   /// An enumeration that filters the type of parameter as built-in, instance or type.\n   /// </summary>\n   /// <remarks>\n   /// The Revit API does not provide a performant way to determine if built-in parameters are instace or type\n   /// parameters, so we group them separately.</remarks>\n   public enum ParameterType\n   {\n      Builtin,\n      Instance,\n      Type,\n      Unknown\n   };\n\n   /// <summary>\n   /// The class keeps the Revit parameter data that is used in the property selector.\n   /// </summary>\n   public class RevitParameterData\n   {\n      public string Name { get; set; } = string.Empty;\n      public ElementId Id { get; set; } = ElementId.InvalidElementId;\n      public ParameterType ParameterType { get; set; } = ParameterType.Unknown;\n      public StorageType StorageType { get; set; } = StorageType.None;\n      public ForgeTypeId DataType { get; set; } = null;\n   }\n\n   /// <summary>\n   /// The model that contains the property selector data.\n   /// </summary>\n   public class PropertySelectorModel\n   {\n      /// <summary>\n      /// Used to indicate which parameters to display in UI\n      /// </summary>\n      public enum PropertyFilterEnum\n      {\n         [Description(\"All\")]\n         All,\n         [Description(\"Built-in\")]\n         Builtin,\n         [Description(\"Instance\")]\n         Instance,\n         [Description(\"Type\")]\n         Type\n      }\n\n      public SortedDictionary<string, Dictionary<PropertyFilterEnum, List<ParameterListItem>>> Data = new();\n\n      /// <summary>\n      /// Initializes the model from the parameter data grouped by categories.\n      /// </summary>\n      public void InitializeFromParameterData(Dictionary<ElementId, List<RevitParameterData>> categoryParametersData)\n      {\n         Data.Clear();\n\n         if ((categoryParametersData?.Count ?? 0) == 0)\n            return;\n\n         Document doc = IFCCommandOverrideApplication.TheDocument;\n\n         foreach ((ElementId categoryId, List<RevitParameterData> parameterData) in categoryParametersData)\n         {\n            Category category = Category.GetCategory(doc, categoryId);\n\n            string categoryName = category?.Name;\n            if (string.IsNullOrEmpty(categoryName) || (parameterData?.Count ?? 0) == 0)\n               continue;\n\n            string categoryParentName = category?.Parent?.Name;\n            string fullCategoryName = string.IsNullOrEmpty(categoryParentName) ?\n               categoryName : categoryParentName + \": \" + categoryName;\n\n            // Create parameter items from the data\n            List<ParameterListItem> typeParameterItems =\n               parameterData.Where(param => !string.IsNullOrEmpty(param?.Name) && param.ParameterType == ParameterType.Type)\n               .Select(data => new ParameterListItem(data.Name, data.Id, isChecked: false))\n               .OrderBy(x => x.Name, StringComparer.CurrentCulture).ToList();\n\n            List<ParameterListItem> instanceParameterItems =\n               parameterData.Where(param => !string.IsNullOrEmpty(param?.Name) && param.ParameterType == ParameterType.Instance)\n               .Select(data => new ParameterListItem(data.Name, data.Id, isChecked: false))\n               .OrderBy(x => x.Name, StringComparer.CurrentCulture).ToList();\n\n            List<ParameterListItem> builtinParameterItems =\n               parameterData.Where(param => !string.IsNullOrEmpty(param?.Name) && param.ParameterType == ParameterType.Builtin)\n               .Select(data => new ParameterListItem(data.Name, data.Id, isChecked: false))\n               .OrderBy(x => x.Name, StringComparer.CurrentCulture).ToList();\n\n            List<ParameterListItem> allParameterItems = typeParameterItems.Union(instanceParameterItems).Union(builtinParameterItems)\n               .OrderBy(x => x.Name, StringComparer.CurrentCulture).ToList();\n\n            Dictionary<PropertyFilterEnum, List<ParameterListItem>> filterOptionPairs = new()\n            {\n               { PropertyFilterEnum.All, allParameterItems },\n               { PropertyFilterEnum.Builtin, builtinParameterItems},\n               { PropertyFilterEnum.Instance, instanceParameterItems },\n               { PropertyFilterEnum.Type, typeParameterItems }\n            };\n\n            Data.TryAdd(fullCategoryName, filterOptionPairs);\n         }\n      }\n   }\n\n   /// <summary>\n   /// Interaction logic for IFCRevitPropertySelector.xaml\n   /// </summary>\n   public partial class IFCRevitPropertySelector : ChildWindow, INotifyPropertyChanged\n   {\n      private PropertySelectorModel _model = new();\n\n      public string SelectedCategory { get; set; } = Properties.Settings.Default.LastSelectedCategory;\n\n      public RevitParameterInfo SelectedRevitParameter { get; set; }\n\n      public bool DisableParameterFilter { get; set; } = false;\n\n      private readonly string SelectedProperty = string.Empty;\n\n      private readonly bool IsTableProperty = false;\n\n      private static Dictionary<BuiltInCategory, string> sSpecificMappings = new()\n      {\n         { BuiltInCategory.OST_StructuralFraming, \"IfcBeam\" }\n      };\n\n      /// <summary>\n      /// The map that keeps the IFC entity type to Revit categories mapping.\n      /// </summary>\n      private static Dictionary<string, HashSet<ElementId>> _ifcEntityToCategoriesMap = new();\n\n      private static ElementId _defaultCategoryId = null;\n\n      /// <summary>\n      /// The cache that keeps the Revit parameters data of each category.\n      /// </summary>\n      private static Dictionary<ElementId, List<RevitParameterData>> _categoryParametersCache = new();\n\n      private ObservableCollection<RevitParameterFilter> _parametersFilter = new();\n      public ObservableCollection<RevitParameterFilter> ParametersFilter\n      {\n         get { return _parametersFilter; }\n         set\n         {\n            _parametersFilter = value;\n            OnPropertyChanged(nameof(ParametersFilter));\n         }\n      }\n\n      public event PropertyChangedEventHandler PropertyChanged;\n      protected void OnPropertyChanged([CallerMemberName] string name = null)\n      {\n         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));\n      }\n\n      public IFCRevitPropertySelector(RevitParameterInfo selectedRevitParameter, string selectedPSet,\n         string selectedProperty, string propertyDataType, IFCVersion ifcVersion, PropertySetupType propertySetup,\n         IList<string> applicableEntities, bool isTableProperty)\n      {\n         SelectedRevitParameter = selectedRevitParameter;\n         SelectedProperty = selectedProperty;\n         IsTableProperty = isTableProperty;\n\n\n         InitializeComponent();\n         DataContext = this;\n         Document doc = IFCCommandOverrideApplication.TheDocument;\n         if (doc == null)\n            return;\n\n         // 1. Get the information that defines the applicable Revit parameters for this property/quantity.\n         ApplicableParameterInfo applicableParamInfo =\n            CreateApplicableParameterInfo(propertySetup, selectedPSet, SelectedProperty, propertyDataType, ifcVersion, applicableEntities);\n\n         if (applicableParamInfo == null)\n            return;\n\n         // The list of Revit categories exported to applicable IFC entity types.\n         HashSet<ElementId> applicableCategories = GetApplicableCategories(applicableParamInfo.EntityTypes, ifcVersion);\n         if ((applicableCategories?.Count ?? 0) == 0)\n            return;\n\n         // 2. Get all parameters of each category\n         Dictionary<ElementId, List<RevitParameterData>> categoryParametersData = GetCategoryParameters(applicableCategories, applicableParamInfo);\n\n         // 3. Filter parameters by applicable info.\n         Dictionary<ElementId, List<RevitParameterData>> filteredCategoryParametersData = categoryParametersData?\n            .Where(pair => pair.Value != null && pair.Value.Count > 0)\n            .ToDictionary(pair => pair.Key, pair => pair.Value\n               .Where(param => applicableParamInfo.IsApplicableParameter(param))\n               .ToList());\n\n         // 4. Populate the model with parameters of each category.\n         _model.InitializeFromParameterData(filteredCategoryParametersData);\n\n         comboBox_Category.ItemsSource = _model.Data.Keys;\n\n         if (!PreselectParameter() && _model.Data.Count > 0)\n         {\n            if (String.IsNullOrEmpty(SelectedCategory) || !_model.Data.ContainsKey(SelectedCategory))\n               SelectedCategory = _model.Data.Keys.First();\n         }\n      }\n\n      public ApplicableParameterInfo CreateApplicableParameterInfo(PropertySetupType propertySetup,\n         string propertySetName, string propertyName, string propertyDataType, IFCVersion ifcVersion, IList<string> applicableEntities)\n      {\n         ApplicableParameterInfo applicableInfo = new();\n         switch (propertySetup)\n         {\n            case PropertySetupType.IfcCommonPropertySets:\n               {\n                  PropertySetDescription psetDescription =\n                     IFCPropertyMappingModel.GetCachedIfcCommonPSetDescription(propertySetName, ifcVersion);\n\n                  if (psetDescription == null)\n                     return null;\n\n                  foreach (PropertySetEntry entry in psetDescription.Entries)\n                  {\n                     if (entry.PropertyName != propertyName)\n                        continue;\n\n                     var (success, storageType, dataTypes) = GetApplicableDataType(entry.PropertyType);\n                     if (!success)\n                        return null;\n\n                     applicableInfo.StorageType = storageType;\n                     applicableInfo.DataTypes = dataTypes;\n\n                     break;\n                  }\n\n                  applicableInfo.EntityTypes = psetDescription.EntityTypes;\n                  break;\n               }\n            case PropertySetupType.IfcBaseQuantities:\n               {\n                  QuantityDescription quantityDescription =\n                     IFCPropertyMappingModel.GetCachedBaseQuantityDescription(propertySetName, ifcVersion);\n\n                  if (quantityDescription == null)\n                     return null;\n\n                  foreach (QuantityEntry entry in quantityDescription.Entries)\n                  {\n                     if (entry.PropertyName != propertyName)\n                        continue;\n\n                     QuantityType quantityType = entry.QuantityType;\n                     if (!UnitMappingUtil.GetRevitDataTypeFromIfcQuantityType(quantityType,\n                        out var applicableStorageType, out var applicableDataTypes))\n                        return null;\n\n                     applicableInfo.StorageType = applicableStorageType;\n                     applicableInfo.DataTypes = applicableDataTypes;\n                     break;\n                  }\n\n                  applicableInfo.EntityTypes = quantityDescription.EntityTypes;\n                  break;\n               }\n            case PropertySetupType.UserDefinedPropertySets:\n               {\n                  if ((applicableEntities?.Count ?? 0) == 0)\n                     return null;\n\n                  applicableInfo.EntityTypes =\n                     ExporterInitializer.GetIfcEntityTypesFromStrings(applicableEntities, exportPre4: false);\n\n                  if (!Enum.TryParse(propertyDataType, true, out PropertyType propertyType))\n                     return null;\n\n                  var (success, storageType, dataTypes) = GetApplicableDataType(propertyType);\n                  if (!success)\n                     return null;\n\n                  applicableInfo.StorageType = storageType;\n                  applicableInfo.DataTypes = dataTypes;\n\n                  break;\n               }\n         }\n\n         return applicableInfo;\n      }\n\n      public (bool success, StorageType, HashSet<ForgeTypeId>) GetApplicableDataType(PropertyType propertyType)\n      {\n         StorageType storageType = StorageType.None;\n         HashSet<ForgeTypeId> dataTypes = new HashSet<ForgeTypeId>();\n\n         if (IsTableProperty)\n         {\n            storageType = StorageType.String;\n            dataTypes = [SpecTypeId.String.MultilineText];\n         }\n         else\n         {\n            if (!UnitMappingUtil.GetRevitDataTypeFromIfcPropertyType(propertyType,\n               out var applicableStorageType, out var applicableDataTypes))\n               return (false, storageType, dataTypes);\n\n            storageType = applicableStorageType;\n            dataTypes = applicableDataTypes;\n         }\n         return (true, storageType, dataTypes);\n      }\n\n      private HashSet<ElementId> GetApplicableCategories(HashSet<IFCEntityType> applicableEntityTypes, IFCVersion ifcVersion)\n      {\n         if ((applicableEntityTypes?.Count ?? 0) == 0)\n            return null;\n\n         HashSet<ElementId> applicableCategories = new();\n         foreach (IFCEntityType applicableEntityType in applicableEntityTypes)\n         {\n            IFCEntityType entityType = GetEntityFromEntityType(applicableEntityType, ifcVersion);\n            if (entityType == IFCEntityType.UnKnown)\n               continue;\n\n            // Add categories that are exported to exact ifc entity type \n            if (_ifcEntityToCategoriesMap.TryGetValue(entityType.ToString(), out HashSet<ElementId> categories) && categories != null)\n               applicableCategories.UnionWith(categories);\n\n            // Add categories that are exported to subtypes of the ifc entity type\n            foreach ((string entityName, HashSet<ElementId> categorySet) in _ifcEntityToCategoriesMap)\n            {\n               if (!Enum.TryParse(entityName, out IFCEntityType mappedEntityType) ||\n                  !IfcSchemaEntityTree.IsSubTypeOf(ifcVersion, mappedEntityType, entityType, strict: true))\n                  continue;\n\n               applicableCategories.UnionWith(categorySet);\n            }\n         }\n\n         if (applicableCategories.Count == 0 && _defaultCategoryId != null)\n            applicableCategories.Add(_defaultCategoryId);\n\n         return applicableCategories;\n      }\n\n      private IFCEntityType GetEntityFromEntityType(IFCEntityType applicableEntityType, IFCVersion ifcVersion)\n      {\n         string entityName = applicableEntityType.ToString();\n         IfcSchemaEntityTree theTree = IfcSchemaEntityTree.GetEntityDictFor(ifcVersion);\n         int typeLen = 4;\n         bool isType = entityName.EndsWith(\"Type\", StringComparison.CurrentCultureIgnoreCase);\n         if (!isType)\n         {\n            if (entityName.Equals(\"IfcDoorStyle\", StringComparison.InvariantCultureIgnoreCase)\n               || entityName.Equals(\"IfcWindowStyle\", StringComparison.InvariantCultureIgnoreCase))\n            {\n               isType = true;\n               typeLen = 5;\n            }\n         }\n\n         if (!isType)\n            return applicableEntityType;\n\n         IFCEntityType instanceType = IFCEntityType.UnKnown;\n\n         // Get the instance\n         string instName = entityName.Substring(0, entityName.Length - typeLen);\n         IfcSchemaEntityNode node = theTree.Find(instName);\n         if (node != null && !node.isAbstract)\n         {\n            IFCEntityType instType = IFCEntityType.UnKnown;\n            if (IFCEntityType.TryParse(instName, true, out instType))\n               instanceType = instType;\n         }\n         else\n         {\n            // If not found, try non-abstract supertype derived from the type\n            node = IfcSchemaEntityTree.FindNonAbsInstanceSuperType(ifcVersion, instName);\n            if (node != null)\n            {\n               IFCEntityType instType = IFCEntityType.UnKnown;\n               if (IFCEntityType.TryParse(node.Name, true, out instType))\n                  instanceType = instType;\n            }\n         }\n\n         return instanceType;\n      }\n\n      private Dictionary<ElementId, List<RevitParameterData>> GetCategoryParameters(HashSet<ElementId> applicableCategories, ApplicableParameterInfo applicableParamInfo)\n      {\n         if ((applicableCategories?.Count ?? 0) == 0 || applicableParamInfo == null)\n            return null;\n\n         Dictionary<ElementId, List<RevitParameterData>> categoryParameters = new();\n\n         Document doc = IFCCommandOverrideApplication.TheDocument;\n         foreach (ElementId categoryId in applicableCategories)\n         {\n            Category category = Category.GetCategory(doc, categoryId);\n            if (category == null)\n               continue;\n\n            List<RevitParameterData> applicableParameters = GetSingleCategoryParameters(category);\n\n            // Get parameters from parent category if nothing was found \n            Category categoryToAdd = category;\n            if ((applicableParameters?.Count ?? 0) == 0)\n            {\n               Category parentCategory = category.Parent;\n               if (parentCategory != null && !categoryParameters.ContainsKey(parentCategory.Id))\n               {\n                  applicableParameters = GetSingleCategoryParameters(parentCategory);\n                  categoryToAdd = parentCategory;\n               }\n            }\n\n            if ((applicableParameters?.Count ?? 0) == 0)\n               continue;\n            categoryParameters.Add(categoryToAdd.Id, applicableParameters);\n         }\n\n         return categoryParameters;\n      }\n\n      private static List<RevitParameterData> GetSingleCategoryParameters(Category category)\n      {\n         if (_categoryParametersCache.TryGetValue(category.Id, out List<RevitParameterData> applicableParameters))\n            return applicableParameters;\n\n         applicableParameters = [];\n\n         Document document = IFCCommandOverrideApplication.TheDocument;\n\n         List<ElementId> categories = new List<ElementId>() { category.Id };\n\n         // This isn't perfect, but it is the best API we can use at the moment.  It only gets filterable parameters,\n         // but that should be the vast majority of available parameters.\n         ICollection<ElementId> parameters = ParameterFilterUtilities.GetFilterableParametersInCommon(document, categories);\n         foreach (ElementId parameterId in parameters)\n         {\n            // For positive id parameters, we will get them from ElementBinding, which will tell us instance vs. type.\n            if (parameterId.Value > 0)\n               continue;\n\n            BuiltInParameter builtInParameter = (BuiltInParameter)parameterId.Value;\n            ForgeTypeId forgeTypeId = ParameterUtils.GetParameterTypeId(builtInParameter);\n            if (forgeTypeId?.Empty() ?? true)\n               continue;\n            \n            applicableParameters.Add(new RevitParameterData()\n            {\n               Name = LabelUtils.GetLabelFor(builtInParameter),\n               Id = parameterId,\n               ParameterType = ParameterType.Builtin,\n               StorageType = document.GetTypeOfStorage(forgeTypeId),\n               DataType = null\n            });\n         }\n\n         BindingMap map = document.ParameterBindings;\n         DefinitionBindingMapIterator it = map.ForwardIterator();\n         while (it.MoveNext())\n         {\n            InternalDefinition definition = it.Key as InternalDefinition;\n            ElementBinding binding = it.Current as ElementBinding;\n            \n            if (binding == null || definition == null)\n               continue;\n\n            if (!binding.Categories?.Contains(category) ?? true)\n               continue;\n\n            // The parameter exists in the document, but it hasn't been bound yet.\n            ForgeTypeId paramTypeId = definition.GetParameterTypeId();\n            if (paramTypeId?.Empty() ?? true)\n               continue;\n\n            applicableParameters.Add(new RevitParameterData()\n            {\n               Name = definition.Name,\n               Id = definition.Id,\n               ParameterType = (binding is TypeBinding) ? ParameterType.Type : ParameterType.Instance,\n               StorageType = document.GetTypeOfStorage(paramTypeId),\n               DataType = definition.GetDataType()\n            });\n         }\n\n         _categoryParametersCache.Add(category.Id, applicableParameters);\n\n         return applicableParameters;\n      }\n\n      private bool PreselectParameter()\n      {\n         if (SelectedRevitParameter == null ||\n            SelectedRevitParameter.Id == null || string.IsNullOrEmpty(SelectedRevitParameter.Name))\n            return false;\n\n         PropertyFilterEnum filterEnum = PropertyFilterEnum.All;\n         foreach (var group in _model.Data)\n         {\n            if (!group.Value.ContainsKey(filterEnum))\n               continue;\n\n            var initialSelection = SelectedRevitParameter.Id.Equals(ElementId.InvalidElementId) ?\n                group.Value[filterEnum].FirstOrDefault(x => x.Name == SelectedRevitParameter.Name) :\n                group.Value[filterEnum].FirstOrDefault(x => x.Id == SelectedRevitParameter.Id);\n\n            if (initialSelection == null)\n               continue;\n\n            initialSelection.IsChecked = true;\n            SelectedCategory = group.Key;\n            listBox_Parameters.ScrollIntoView(initialSelection);\n            return true;\n         }\n         return false;\n      }\n\n      private void comboBox_Category_SelectionChanged(object sender, SelectionChangedEventArgs e)\n      {\n         if (!_model.Data.TryGetValue(SelectedCategory, out var parameters) ||\n            !parameters.TryGetValue(PropertyFilterEnum.All, out var allParameters) ||\n            !parameters.TryGetValue(PropertyFilterEnum.Builtin, out var builtinParameters) ||\n            !parameters.TryGetValue(PropertyFilterEnum.Instance, out var instanceParameters) ||\n            !parameters.TryGetValue(PropertyFilterEnum.Type, out var typeParameters))\n            return;\n\n         ParametersFilter.Clear();\n         ParametersFilter.Add(new RevitParameterFilter { Name = Properties.Resources.FilterAllProperties, Items = allParameters });\n         ParametersFilter.Add(new RevitParameterFilter { Name = Properties.Resources.FilterBuiltinProperties, Items = builtinParameters });\n         ParametersFilter.Add(new RevitParameterFilter { Name = Properties.Resources.FilterInstanceProperties, Items = instanceParameters });\n         ParametersFilter.Add(new RevitParameterFilter { Name = Properties.Resources.FilterTypeProperties, Items = typeParameters });\n\n         comboBox_PropertyFilter.SelectedIndex = 0;\n         comboBox_PropertyFilter.Items.Refresh();\n      }\n\n      internal static IReadOnlyDictionary<ElementId, List<RevitParameterData>> GetCategoryParametersCacheSnapshot()\n      {\n         EnsureCategoryParametersCacheInitialized();\n         return _categoryParametersCache;\n      }\n\n      private static void EnsureCategoryParametersCacheInitialized()\n      {\n         Document document = IFCCommandOverrideApplication.TheDocument;\n         if (document == null)\n            return;\n\n         HashSet<long> processedCategoryIds = new();\n         List<Category> categoriesToProcess = new();\n\n         foreach (var categorySet in _ifcEntityToCategoriesMap.Values)\n         {\n            if (categorySet == null)\n               continue;\n\n            foreach (ElementId categoryId in categorySet)\n            {\n               if (categoryId == null || categoryId == ElementId.InvalidElementId)\n                  continue;\n\n               long categoryKey = categoryId?.Value ?? -1;\n               if (categoryKey == -1 || processedCategoryIds.Contains(categoryKey))\n                  continue;\n\n               Category category = Category.GetCategory(document, categoryId);\n               if (category == null)\n                  continue;\n\n               processedCategoryIds.Add(categoryKey);\n               categoriesToProcess.Add(category);\n            }\n         }\n\n         if (categoriesToProcess.Count == 0)\n         {\n            List<Category> exportableCategories = GetExportableCategories();\n            if (exportableCategories != null)\n            {\n               foreach (Category category in exportableCategories)\n               {\n                  if (category == null)\n                     continue;\n\n                  long categoryId = category.Id?.Value ?? -1;\n                  if (categoryId == -1 || processedCategoryIds.Contains(categoryId))\n                     continue;\n\n                  processedCategoryIds.Add(categoryId);\n                  categoriesToProcess.Add(category);\n               }\n            }\n         }\n\n         foreach (Category category in categoriesToProcess)\n         {\n            ElementId categoryId = category?.Id;\n            if (category == null || categoryId == null || categoryId == ElementId.InvalidElementId || _categoryParametersCache.ContainsKey(categoryId))\n               continue;\n\n            List<RevitParameterData> parameters = GetSingleCategoryParameters(category);\n            _categoryParametersCache[categoryId] = parameters ?? new List<RevitParameterData>();\n         }\n      }\n\n      private void button_Ok_Click(object sender, RoutedEventArgs e)\n      {\n         bool foundSelected = false;\n         PropertyFilterEnum filterEnum = PropertyFilterEnum.All;\n         foreach (var groupedParameters in _model.Data.Values)\n         {\n            if (!groupedParameters.ContainsKey(filterEnum))\n               continue;\n\n            foreach (var parameter in groupedParameters[filterEnum])\n            {\n               if (parameter.IsChecked)\n               {\n                  SelectedRevitParameter = new RevitParameterInfo(parameter.Name, parameter.Id);\n                  foundSelected = true;\n                  break;\n               }\n            }\n            if (foundSelected)\n               break;\n         }\n\n         if (SelectedRevitParameter == null ||\n            SelectedRevitParameter.Id != null && !string.IsNullOrEmpty(SelectedRevitParameter.Name))\n            DialogResult = true;\n\n         Close();\n      }\n\n      private void button_Cancel_Click(object sender, RoutedEventArgs e)\n      {\n         Close();\n      }\n\n      private void radioButton_Parameter_Checked(object sender, RoutedEventArgs e)\n      {\n         RadioButton radioButton = sender as RadioButton;\n         if (e == null || radioButton == null)\n            return;\n\n         ParameterListItem checkedListItem = radioButton.DataContext as ParameterListItem;\n         if (checkedListItem == null)\n            return;\n\n         ElementId checkedItemId = checkedListItem.Id;\n         string checkedItemName = checkedListItem.Name;\n         bool hasValidId = checkedItemId != ElementId.InvalidElementId;\n\n         foreach (var groupedParameters in _model.Data.Values)\n         {\n            if (!groupedParameters.ContainsKey(PropertyFilterEnum.All))\n               continue;\n\n            foreach (var parameter in groupedParameters[PropertyFilterEnum.All])\n            {\n               parameter.IsChecked =\n                  (hasValidId && parameter.Id == checkedItemId ||\n                  !hasValidId && parameter.Name == checkedItemName);\n            }\n         }\n      }\n\n      private void PropertySelectorWindow_Closing(object sender, CancelEventArgs e)\n      {\n         Properties.Settings.Default.LastSelectedCategory = SelectedCategory;\n         Properties.Settings.Default.Save();\n      }\n\n      private void comboBox_PropertyFilter_SelectionChanged(object sender, SelectionChangedEventArgs e)\n      {\n         if (SelectedRevitParameter == null || (SelectedRevitParameter.Id != null\n            && !string.IsNullOrEmpty(SelectedRevitParameter.Name))\n            || string.IsNullOrEmpty(SelectedProperty))\n            return;\n\n         RevitParameterFilter revitParameters = comboBox_PropertyFilter.SelectedItem as RevitParameterFilter;\n         if (revitParameters == null)\n            return;\n\n         ParameterListItem parameterItem = revitParameters.Items?.FirstOrDefault(x => string.Compare(x.Name, SelectedProperty) == 0);\n         if (parameterItem == null)\n            return;\n\n         parameterItem.IsChecked = true;\n         listBox_Parameters.ScrollIntoView(parameterItem);\n      }\n\n      /// <summary>\n      /// Initializes the cache that maps IFC entity types to Revit categories.\n      public static void InitEntityToCategoriesCache(string categoryMappingTemplateName)\n      {\n         _categoryParametersCache.Clear();\n         _ifcEntityToCategoriesMap.Clear();\n\n         List<Category> categories = GetExportableCategories();\n         if ((categories?.Count ?? 0) == 0)\n            return;\n\n         GetCategoryEntityAndPopulateCache(categories, categoryMappingTemplateName);\n      }\n\n      private static List<Category> GetExportableCategories()\n      {\n         List<Category> categories = new();\n\n         Categories settingsCategories = IFCCommandOverrideApplication.TheDocument.Settings.Categories;\n         if (settingsCategories == null)\n            return categories;\n\n         // Get top-level categories from the settings\n         List<Category> topLevelCategories = settingsCategories.Cast<Category>().ToList();\n         if (topLevelCategories == null)\n            return categories;\n\n         // Add subcategories to the list\n         List<Category> allCategories = new();\n         foreach (Category category in topLevelCategories)\n         {\n            if (category == null || category.Id == ElementId.InvalidElementId)\n               continue;\n\n            allCategories.Add(category);\n\n            CategoryNameMapIterator it = category.SubCategories.ForwardIterator();\n            while (it.MoveNext())\n            {\n               Category subCategory = it.Current as Category;\n\n               if (subCategory == null || subCategory.Id == ElementId.InvalidElementId)\n                  continue;\n\n               allCategories.Add(subCategory);\n            }\n         }\n\n         // Filter categories based on exportability to IFC\n         return allCategories.Where(c =>\n            c != null &&\n            c.IsValid &&\n            c.IsVisibleInUI &&\n            !c.IsTagCategory &&\n            c.CategoryType != CategoryType.Invalid &&\n            c.CategoryType != CategoryType.AnalyticalModel ||\n            IsValidCategoryForParameterMapping(c))\n            .ToList();\n      }\n\n      private static void GetCategoryEntityAndPopulateCache(List<Category> categories, string categoryMappingTemplateName)\n      {\n         if ((categories?.Count ?? 0) == 0)\n            return;\n\n         ExporterCacheManager.Clear(fullClear: true);\n         ExporterCacheManager.ExportOptionsCache.CategoryMappingTemplateName = categoryMappingTemplateName;\n         ExporterCacheManager.Document = IFCCommandOverrideApplication.TheDocument;\n\n         foreach (Category category in categories)\n         {\n            if (category == null || category.Id == ElementId.InvalidElementId)\n               continue;\n\n            if (category.BuiltInCategory == BuiltInCategory.OST_GenericModel)\n               _defaultCategoryId = category.Id;\n\n            // Get export info for the category\n            if (!ExporterUtil.GetCategoryInfoById(category.Id, null, out ExportIFCCategoryInfo exportInfo))\n               ExporterUtil.GetCategoryInfoById(category, out exportInfo);\n\n            ProcessSpecialCases(category, ref exportInfo);\n\n            if (string.IsNullOrEmpty(exportInfo?.IFCEntityName ?? null))\n               continue;\n\n            // Add to the cache\n            if (!_ifcEntityToCategoriesMap.TryGetValue(exportInfo.IFCEntityName, out HashSet<ElementId> categorySet))\n            {\n               categorySet = new HashSet<ElementId>();\n               _ifcEntityToCategoriesMap.Add(exportInfo.IFCEntityName, categorySet);\n            }\n            categorySet.Add(category.Id);\n         }\n      }\n\n      private static void ProcessSpecialCases(Category category, ref ExportIFCCategoryInfo exportInfo)\n      {\n         if (category?.Parent == null || exportInfo == null)\n            return;\n\n         string entityName = exportInfo.IFCEntityName;\n\n         if (!sSpecificMappings.TryGetValue(category.Parent.BuiltInCategory, out string specificEntityName))\n            return;\n\n         if (string.IsNullOrEmpty(entityName) || entityName == \"IfcBuildingElementProxy\")\n         {\n            exportInfo.IFCEntityName = specificEntityName;\n         }\n      }\n\n      private static bool IsValidCategoryForParameterMapping(Category category)\n      {\n         if (category == null)\n            return false;\n\n         if (category.BuiltInCategory == BuiltInCategory.OST_ProjectInformation)\n            return true;\n\n         return false;\n      }\n   }\n\n   /// <summary>\n   /// The class that keeps groups of All/Instance/Type Revit parameters for UI filter option\n   /// </summary>\n   public class RevitParameterFilter\n   {\n      public string Name { get; set; }\n      public List<ParameterListItem> Items { get; set; }\n   }\n\n   /// <summary>\n   /// The class keeps the Revit parameter criterias and is used \n   /// in Revit parameter to Ifc property mapping.\n   /// </summary>\n   public class ApplicableParameterInfo\n   {\n      public HashSet<IFCEntityType> EntityTypes { get; set; }\n      public StorageType StorageType { get; set; }\n      public HashSet<ForgeTypeId> DataTypes { get; set; }\n\n\n      public bool IsApplicableParameter(RevitParameterData parameterData)\n      {\n         if (parameterData == null)\n            return false;\n\n         bool unsetDataType = parameterData.DataType == null || parameterData.DataType.Empty();\n         bool unsetStorageType = parameterData.StorageType == StorageType.None;\n\n         if (unsetDataType && unsetStorageType)\n            return false;\n\n         bool elementIdMatchesString = StorageType == StorageType.String && parameterData.StorageType == StorageType.ElementId;\n\n         if (!unsetStorageType && parameterData.StorageType != StorageType && !elementIdMatchesString)\n            return false;\n\n         if (elementIdMatchesString)\n            return true;\n\n         bool anyDataType = (DataTypes?.Count ?? 0) == 0 || unsetDataType;\n         if (anyDataType)\n            return true;\n\n         if (DataTypes.Contains(parameterData.DataType))\n            return true;\n\n         return false;\n      }\n\n   }\n\n   public class ListBoxIndexConverter : IValueConverter\n   {\n      public object Convert(object value, Type TargetType, object parameter, CultureInfo culture)\n      {\n         ListBoxItem item = (ListBoxItem)value;\n         ListBox listBox = ItemsControl.ItemsControlFromItemContainer(item) as ListBox;\n         int index = listBox.ItemContainerGenerator.IndexFromContainer(item);\n         return index.ToString();\n      }\n\n      public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n      {\n         throw new NotImplementedException();\n      }\n   }\n}\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCPropertyMapping/IFCUserDefinedPropertyMapping.xaml",
    "content": "﻿<auiw:ChildWindow x:Class=\"BIM.IFC.Export.UI.IFCUserDefinedPropertyMapping\"\r\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"        \r\n        xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\r\n        xmlns:system=\"clr-namespace:System;assembly=mscorlib\"\r\n        xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n        xmlns:local=\"clr-namespace:BIM.IFC.Export.UI\"\r\n        xmlns:weaveRoot=\"clr-namespace:Autodesk.Weave.Wpf;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:weave=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:ctrl=\"clr-namespace:Autodesk.Weave.Wpf.Controls;assembly=Autodesk.Weave.Wpf\"\r\n        xmlns:weave_d=\"clr-namespace:Autodesk.Weave.Wpf.ElementProperties.DesignTime;assembly=Autodesk.Weave.Wpf\"\r\n        weave:FrameworkElementProperties.ApplyWeaveStyles=\"True\"\r\n        weave_d:FrameworkElementProperties.DesignTimeWeaveTheme=\"WeaveLightGray\"\r\n        mc:Ignorable=\"d\"\r\n        Title=\"{x:Static p:Resources.IFCManageUserDefinedPropertySeets}\"\r\n        SaveWindowSettings=\"True\"\r\n        weave:WindowProperties.ContentPadding=\"None\"\r\n        Closing=\"ChildWindow_Closing\" PreviewKeyDown=\"ChildWindow_PreviewKeyDown\"\r\n        Height=\"559\" Width=\"947\" MinHeight=\"283\" MinWidth=\"730\">\r\n   <Grid weave:PanelProperties.Spacing=\"None\">\r\n      <Grid.Resources>\r\n\r\n         <Style x:Key=\"ListBoxItemStyle\" TargetType=\"ListBoxItem\" BasedOn=\"{x:Static weaveRoot:Styles.ListBoxItemStyle}\">\r\n            <Setter Property=\"ToolTip\" Value=\"{Binding}\"/>\r\n         </Style>\r\n         <Style x:Key=\"ListBoxItemEntitiesStyle\" TargetType=\"ListBoxItem\" BasedOn=\"{x:Static weaveRoot:Styles.ListBoxItemStyle}\">\r\n            <Setter Property=\"Padding\" Value=\"0\"/>\r\n            <Setter Property=\"ToolTip\" Value=\"{Binding}\"/>\r\n         </Style>\r\n\r\n         <local:IsPropertySetSelectedConverter x:Key=\"IsPropertySetSelectedConverter\"/>\r\n         <local:RevitParameterConverter x:Key=\"RevitParameterConverter\"/>\r\n         <local:RowIndexConverter x:Key=\"RowIndexConverter\"/>\r\n         <local:RowIndexSelectedConverter x:Key=\"RowIndexSelectedConverter\"/>\r\n         <local:QuantityLabelVisibilityConverter x:Key=\"QuantityLabelVisibilityConverter\"/>\r\n         <local:IFCAttributesLabelVisibilityConverter x:Key=\"IFCAttributesLabelVisibilityConverter\"/>\r\n         <local:IFCAttributesColumnReadOnlyConverter x:Key=\"IFCAttributesColumnReadOnlyConverter\"/>\r\n         <local:TablePropertyTypeVisibilityConverter x:Key=\"TablePropertyTypeVisibilityConverter\"/>\r\n         <local:TablePropertyTypeEnabledConverter x:Key=\"TablePropertyTypeEnabledConverter\"/>\r\n\r\n         <Style x:Key=\"CheckBoxStyle\" TargetType=\"{x:Type CheckBox}\" BasedOn=\"{x:Static weaveRoot:Styles.CheckBoxStyle}\">\r\n            <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\r\n            <Setter Property=\"HorizontalAlignment\" Value=\"Left\"/>\r\n         </Style>\r\n      </Grid.Resources>\r\n\r\n      <Grid.RowDefinitions>\r\n         <RowDefinition Height=\"271*\"/>\r\n         <RowDefinition Height=\"Auto\"/>\r\n      </Grid.RowDefinitions>\r\n      <Grid.ColumnDefinitions>\r\n         <ColumnDefinition Width=\"1*\"/>\r\n         <ColumnDefinition Width=\"1*\"/>\r\n         <ColumnDefinition Width=\"2*\"/>\r\n         \r\n      </Grid.ColumnDefinitions>\r\n\r\n      <Border Grid.Column=\"0\" weave:BorderProperties.SurfaceLevel=\"Level250\">\r\n         <DockPanel Margin=\"8\">\r\n            <StackPanel Orientation=\"Horizontal\" DockPanel.Dock=\"Top\">\r\n               <TextBlock Text=\"{x:Static p:Resources.PropertySets}\" weave:TextBlockProperties.Variant=\"BodyRegular\"/>\r\n            </StackPanel>\r\n            <StackPanel Name=\"stackPanel_buttons\" Orientation=\"Horizontal\" DockPanel.Dock=\"Top\" Margin=\"0,8,0,4\">\r\n               <ctrl:IconButton Name=\"button_Add\" IconName=\"AddS\" Click=\"button_Add_Click\">\r\n                  <Button.ToolTip>\r\n                     <ToolTip Content=\"{x:Static p:Resources.CreateNewPropertySetTooltip}\" Placement=\"Top\"/>\r\n                  </Button.ToolTip>\r\n               </ctrl:IconButton>\r\n               <ctrl:IconButton Name=\"button_Import\" IconName=\"ImportS\" Click=\"button_Import_Click\">\r\n                  <Button.ToolTip>\r\n                     <ToolTip Content=\"{x:Static p:Resources.ImportPropertySetsTooltip}\" Placement=\"Top\"/>\r\n                  </Button.ToolTip>\r\n               </ctrl:IconButton>\r\n               <ctrl:IconButton Name=\"button_Copy\" IconName=\"CopyS\" Click=\"button_Copy_Click\">\r\n                  <Button.ToolTip>\r\n                     <ToolTip Content=\"{x:Static p:Resources.CopyPropertySetTooltip}\" Placement=\"Top\"/>\r\n                  </Button.ToolTip>\r\n               </ctrl:IconButton>\r\n               <ctrl:IconButton Name=\"button_Save\" IconName=\"SaveS\" Click=\"button_Save_Click\">\r\n                  <Button.ToolTip>\r\n                     <ToolTip Content=\"{x:Static p:Resources.SavePropertySetTooltip}\" Placement=\"Top\"/>\r\n                  </Button.ToolTip>\r\n               </ctrl:IconButton>\r\n               <ctrl:IconButton Name=\"button_Export\" IconName=\"ExportMoveS\" Click=\"button_Export_Click\">\r\n                  <Button.ToolTip>\r\n                     <ToolTip Content=\"{x:Static p:Resources.ExportPropertySetsTooltip}\" Placement=\"Top\"/>\r\n                  </Button.ToolTip>\r\n               </ctrl:IconButton>\r\n               <ctrl:IconButton Name=\"button_Rename\" IconName=\"RenameS\" Click=\"button_Rename_Click\"\r\n                                IsEnabled=\"{Binding Path=SelectedPropertySet, Converter={StaticResource IsPropertySetSelectedConverter}}\">\r\n                  <Button.ToolTip>\r\n                     <ToolTip Content=\"{x:Static p:Resources.RenamePropertySetTooltip}\" Placement=\"Top\"/>\r\n                  </Button.ToolTip>\r\n               </ctrl:IconButton>\r\n               <ctrl:IconButton Name=\"button_Delete\" IconName=\"TrashS\" Click=\"button_Delete_Click\"\r\n                                IsEnabled=\"{Binding Path=SelectedPropertySet, Converter={StaticResource IsPropertySetSelectedConverter}}\">\r\n                  <Button.ToolTip>\r\n                     <ToolTip Content=\"{x:Static p:Resources.DeletePropertySetTooltip}\" Placement=\"Top\"/>\r\n                  </Button.ToolTip>\r\n               </ctrl:IconButton>\r\n            </StackPanel>\r\n            <ListBox Name=\"listBox_PropertySets\" ItemContainerStyle=\"{StaticResource ListBoxItemStyle}\" \r\n                     ItemsSource=\"{Binding ObservablePropertySets}\" SelectedItem=\"{Binding SelectedPropertySet}\"\r\n                     Width=\"{Binding ActualWidth, ElementName=stackPanel_buttons}\" ScrollViewer.VerticalScrollBarVisibility=\"Auto\"\r\n                     SelectionChanged=\"listBox_PropertySets_SelectionChanged\" Margin=\"0,4,0,4\">\r\n               <ListBox.Resources>\r\n                  <Style TargetType=\"ToolTip\" BasedOn=\"{x:Static weaveRoot:Styles.ToolTipStyle}\">\r\n                     <Setter Property=\"Placement\" Value=\"Bottom\"/>\r\n                  </Style>\r\n               </ListBox.Resources>\r\n            </ListBox>\r\n         </DockPanel>\r\n      </Border>\r\n\r\n      <Border Grid.Column=\"1\" weave:BorderProperties.SurfaceLevel=\"Level200\">\r\n         <DockPanel Margin=\"8\">\r\n            <StackPanel Orientation=\"Horizontal\" DockPanel.Dock=\"Top\">\r\n               <TextBlock Text=\"{x:Static p:Resources.ApplicableEntities}\" weave:TextBlockProperties.Variant=\"BodyBold\"/>\r\n               <ctrl:IconButton Name=\"button_EditEntities\" IconName=\"EditS\" Click=\"button_SelectEnitites_Click\"\r\n                          IsEnabled=\"{Binding Path=SelectedPropertySet, Converter={StaticResource IsPropertySetSelectedConverter}}\">\r\n                  <Button.ToolTip>\r\n                     <ToolTip Content=\"{x:Static p:Resources.SelectApplicableEntities}\" Placement=\"Top\"/>\r\n                  </Button.ToolTip>\r\n               </ctrl:IconButton>\r\n               <ctrl:IconButton Name=\"button_ResetEntities\" IconName=\"DataRefreshS\" Click=\"button_ResetEnitites_Click\"\r\n                          IsEnabled=\"{Binding Path=SelectedPropertySet, Converter={StaticResource IsPropertySetSelectedConverter}}\">\r\n                  <Button.ToolTip>\r\n                     <ToolTip Content=\"{x:Static p:Resources.ResetApplicableEntities}\" Placement=\"Top\"/>\r\n                  </Button.ToolTip>\r\n               </ctrl:IconButton>\r\n            </StackPanel>\r\n\r\n            <ListBox Name=\"listBox_SelectedIFCEntities\"\r\n               ItemsSource=\"{Binding ObservableApplicableEntities}\"\r\n               ItemContainerStyle=\"{StaticResource ListBoxItemEntitiesStyle}\" \r\n               ScrollViewer.VerticalScrollBarVisibility=\"Auto\">\r\n               <ListBox.Resources>\r\n                  <Style TargetType=\"ToolTip\" BasedOn=\"{x:Static weaveRoot:Styles.ToolTipStyle}\">\r\n                     <Setter Property=\"Placement\" Value=\"Bottom\"/>\r\n                  </Style>\r\n               </ListBox.Resources>\r\n\r\n               <ListBox.ItemTemplate>\r\n                  <DataTemplate>\r\n                      <Button Content=\"{Binding}\" weave:ButtonProperties.Variant=\"Flat\" Margin=\"0\"\r\n                              Click=\"button_RemoveEntity_Click\" HorizontalAlignment=\"Left\" HorizontalContentAlignment=\"Left\"\r\n                              weave:ButtonProperties.ContentType=\"IconLeft\" weave:ButtonProperties.IconName=\"OperatorMinusXSUI\"/>\r\n                  </DataTemplate>\r\n               </ListBox.ItemTemplate>\r\n\r\n            </ListBox>\r\n         </DockPanel>\r\n      </Border>\r\n      \r\n      <Border Grid.Column=\"2\" weave:BorderProperties.SurfaceLevel=\"Level100\">\r\n         <DockPanel Margin=\"8\">\r\n            <!-- Dummy element to access DataContext for converter binding -->\r\n            <FrameworkElement x:Name=\"dummyElement\" Visibility=\"Collapsed\"/>\r\n\r\n            <TextBlock Text=\"{x:Static p:Resources.PropertySetDetails}\" weave:TextBlockProperties.Variant=\"BodyRegular\" DockPanel.Dock=\"Top\"/>\r\n            <Grid DockPanel.Dock=\"Top\">\r\n               <TextBlock Text=\"{x:Static p:Resources.QuantitySet}\" weave:TextBlockProperties.Variant=\"BodyMedium\"\r\n                          VerticalAlignment=\"Center\" \r\n                          Visibility=\"{Binding Path=SelectedPropertySet, Converter={StaticResource QuantityLabelVisibilityConverter}}\"/>\r\n               <TextBlock Text=\"{x:Static p:Resources.IFCAttributes}\" weave:TextBlockProperties.Variant=\"BodyMedium\"\r\n                          VerticalAlignment=\"Center\" \r\n                          Visibility=\"{Binding Path=SelectedPropertySet, Converter={StaticResource IFCAttributesLabelVisibilityConverter}}\"/>\r\n\r\n               <Button Name=\"button_RemoveRow\" Content=\"{x:Static p:Resources.RemoveRow}\" weave:ButtonProperties.Variant=\"Flat\"\r\n                       Click=\"button_RemoveRow_Click\" HorizontalAlignment=\"Right\" weave:ButtonProperties.ContentType=\"IconLeft\"\r\n                       weave:ButtonProperties.IconName=\"TrashS\"\r\n                       IsEnabled=\"{Binding Path=SelectedProperty, Converter={StaticResource RowIndexSelectedConverter}, ConverterParameter=true}\"/>\r\n            </Grid>\r\n\r\n            <Grid DockPanel.Dock=\"Top\" VerticalAlignment=\"Top\">\r\n               <Grid.RowDefinitions>\r\n                  <RowDefinition Height=\"1*\"/>\r\n                  <RowDefinition Height=\"Auto\"/>\r\n               </Grid.RowDefinitions>\r\n\r\n               <DataGrid Name=\"dataGrid_UserDefinedProperties\" Grid.Row=\"0\"\r\n                      ItemsSource=\"{Binding ObservableProperties, Mode=TwoWay}\"\r\n                      SelectedItem=\"{Binding SelectedProperty}\"\r\n                      weave:FrameworkElementProperties.ApplyWeaveStyles=\"True\"\r\n                      AutoGenerateColumns=\"False\"                      \r\n                      HorizontalAlignment=\"Center\"\r\n                      CanUserAddRows=\"False\"\r\n                      CanUserDeleteRows=\"False\"\r\n                      CanUserResizeRows=\"False\"\r\n                      CanUserReorderColumns=\"False\"\r\n                      CanUserResizeColumns=\"True\"\r\n                      CanUserSortColumns=\"True\"\r\n                      weave:DataGridProperties.Stripped=\"False\"\r\n                      weave:DataGridProperties.SelectAllVisibility=\"True\"\r\n                      weave:DataGridProperties.ShowColumnContextMenu=\"True\"\r\n                      SelectionMode=\"Single\"\r\n                      HeadersVisibility=\"Column\"                      \r\n                      RowHeight=\"27\" Margin=\"0,4,0,4\"\r\n                      >\r\n                  <DataGrid.Columns>\r\n                     <DataGridTemplateColumn Header=\"{x:Static p:Resources.IFCProperty}\" Width=\"*\">\r\n                        <DataGridTemplateColumn.CellTemplate>\r\n                           <DataTemplate>\r\n                              <TextBox Name=\"textBox_IFCPropertyName\" \r\n                                       Text=\"{Binding Path=IFCPropertyName, UpdateSourceTrigger=PropertyChanged}\"\r\n                                       IsReadOnly=\"{Binding ElementName=listBox_PropertySets, Path=SelectedItem, Converter={StaticResource IFCAttributesColumnReadOnlyConverter}}\"\r\n                                       AutomationProperties.AutomationId=\"{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, \r\n                                                                           StringFormat=textBox_IFCPropertyName_{0}, \r\n                                                                           Converter={StaticResource RowIndexConverter}}\"/>\r\n                           </DataTemplate>\r\n                        </DataGridTemplateColumn.CellTemplate>\r\n                     </DataGridTemplateColumn>\r\n\r\n                     <DataGridTemplateColumn Header=\"{x:Static p:Resources.PropertyType}\" Width=\"*\">\r\n                        <DataGridTemplateColumn.CellTemplate>\r\n                           <DataTemplate>\r\n                              <ComboBox x:Name=\"comboBox_PropertyType\"\r\n                                        ItemsSource=\"{Binding RelativeSource={RelativeSource AncestorType=auiw:ChildWindow}, Path=AvailablePropertyTypes}\"\r\n                                        SelectedValue=\"{Binding PropertyType, UpdateSourceTrigger=PropertyChanged}\"\r\n                                        IsEnabled=\"{Binding ElementName=listBox_PropertySets, Path=SelectedItem, Converter={StaticResource IFCAttributesColumnReadOnlyConverter}, ConverterParameter=invert}\"\r\n                                        AutomationProperties.AutomationId=\"{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, \r\n                                 StringFormat=comboBox_PropertyType_{0}, \r\n                                 Converter={StaticResource RowIndexConverter}}\"/>\r\n                           </DataTemplate>\r\n                        </DataGridTemplateColumn.CellTemplate>\r\n                     </DataGridTemplateColumn>\r\n\r\n                     <DataGridTemplateColumn Header=\"{x:Static p:Resources.DataType}\" Width=\"*\">\r\n                        <DataGridTemplateColumn.CellTemplate>\r\n                           <DataTemplate>\r\n                              <ComboBox x:Name=\"comboBox_DataType\"\r\n                                        IsEnabled=\"{Binding ElementName=listBox_PropertySets, Path=SelectedItem, Converter={StaticResource IFCAttributesColumnReadOnlyConverter}, ConverterParameter=invert}\"\r\n                                        IsEditable=\"True\"\r\n                                        IsTextSearchEnabled=\"False\"\r\n                                        StaysOpenOnEdit=\"True\"\r\n                                        Loaded=\"ComboBox_DataType_Loaded\"\r\n                                        SelectionChanged=\"ComboBox_DataType_SelectionChanged\"\r\n                                        DropDownOpened=\"ComboBox_DataType_DropDownOpened\"\r\n                                        AutomationProperties.AutomationId=\"{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, \r\n                                 StringFormat=comboBox_DataType_{0}, \r\n                                 Converter={StaticResource RowIndexConverter}}\"/>\r\n                           </DataTemplate>\r\n                        </DataGridTemplateColumn.CellTemplate>\r\n                     </DataGridTemplateColumn>\r\n\r\n                     <DataGridTemplateColumn Header=\"{x:Static p:Resources.RevitProperty}\" Width=\"*\">\r\n                        <DataGridTemplateColumn.CellTemplate>\r\n                           <DataTemplate>\r\n                              <Grid>\r\n                                 <Grid.ColumnDefinitions>\r\n                                    <ColumnDefinition Width=\"*\"/>\r\n                                    <ColumnDefinition Width=\"auto\"/>\r\n                                 </Grid.ColumnDefinitions>\r\n                                 <TextBox Name=\"textBox_RevitProperty\" Grid.ColumnSpan=\"2\" HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\" \r\n                                          IsReadOnly=\"True\"\r\n                                          Text=\"{Binding Path=RevitParameterInfo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource RevitParameterConverter}}\"/>\r\n                                 <ctrl:IconButton Name=\"button_RevitPropertyEdit\" Grid.Column=\"1\" Click=\"button_RevitPropertyEdit_Click\" IconName=\"EditS\" \r\n                                                  HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\" Margin=\"0,0,2,0\"\r\n                                                  Background=\"Transparent\" BorderThickness=\"0\">\r\n                                    <Button.ToolTip>\r\n                                       <ToolTip Content=\"{x:Static p:Resources.Edit}\" Placement=\"Bottom\"/>\r\n                                    </Button.ToolTip>\r\n                                 </ctrl:IconButton>\r\n                              </Grid>\r\n                           </DataTemplate>\r\n                        </DataGridTemplateColumn.CellTemplate>\r\n                     </DataGridTemplateColumn>\r\n\r\n                     <DataGridTemplateColumn Header=\"{x:Static p:Resources.DefinedDataType}\" Width=\"*\"\r\n                                              Visibility=\"{Binding DataContext.HasTableProperties, Source={x:Reference dummyElement}, Converter={StaticResource TablePropertyTypeVisibilityConverter}}\">\r\n                        <DataGridTemplateColumn.CellTemplate>\r\n                           <DataTemplate>\r\n                              <ComboBox x:Name=\"comboBox_DataTypeDefined\"\r\n                                        IsEnabled=\"{Binding PropertyType, Converter={StaticResource TablePropertyTypeEnabledConverter}}\"\r\n                                        IsEditable=\"True\"\r\n                                        IsTextSearchEnabled=\"False\"\r\n                                        StaysOpenOnEdit=\"True\"\r\n                                        Loaded=\"ComboBox_DataType_Loaded\"\r\n                                        SelectionChanged=\"ComboBox_DataType_SelectionChanged\"\r\n                                        DropDownOpened=\"ComboBox_DataType_DropDownOpened\"\r\n                                        AutomationProperties.AutomationId=\"{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, \r\n                                 StringFormat=comboBox_DataTypeDefined_{0}, \r\n                                 Converter={StaticResource RowIndexConverter}}\"/>\r\n                           </DataTemplate>\r\n                        </DataGridTemplateColumn.CellTemplate>\r\n                     </DataGridTemplateColumn>\r\n\r\n                  </DataGrid.Columns>\r\n               </DataGrid>\r\n\r\n               <Button Name=\"button_AddRow\" Content=\"{x:Static p:Resources.AddRow}\" weave:ButtonProperties.Variant=\"Flat\" Grid.Row=\"1\"\r\n                     Click=\"button_AddRow_Click\" HorizontalAlignment=\"Left\" weave:ButtonProperties.ContentType=\"IconLeft\"\r\n                     weave:ButtonProperties.IconName=\"AddS\"\r\n                     IsEnabled=\"{Binding Path=SelectedPropertySet, Converter={StaticResource IsPropertySetSelectedConverter}, ConverterParameter=true}\">\r\n               </Button>\r\n            </Grid>\r\n         </DockPanel>\r\n      </Border>\r\n\r\n      <StackPanel Orientation=\"Horizontal\" Grid.Row=\"1\" Grid.ColumnSpan=\"2\" VerticalAlignment=\"Center\">\r\n         <ctrl:WeaveIcon IconName=\"InfoS\" VerticalAlignment=\"Top\" Margin=\"8,0,5,0\"/>\r\n         <TextBlock Name=\"textBlock_Help\" HorizontalAlignment=\"Left\" >\r\n         <Hyperlink Click=\"OnHelpClick\">\r\n            <Run Name=\"run_Help\" Text=\"{x:Static p:Resources.UserDefinedHelp}\" x:Uid=\"LearnMoreHyperlink\"/>\r\n         </Hyperlink>\r\n         </TextBlock>\r\n      </StackPanel>\r\n\r\n      <StackPanel Orientation=\"Horizontal\" Grid.Column=\"2\" Grid.Row=\"1\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\" Margin=\"0,8,0,8\">\r\n         <Button x:Name=\"button_Ok\" Content=\"{x:Static p:Resources.OK}\" HorizontalAlignment=\"Left\" weave:ButtonProperties.Variant=\"Solid\" Click=\"button_Ok_Click\"/>\r\n         <Button x:Name=\"button_Cancel\" Content=\"{x:Static p:Resources.Cancel}\" HorizontalAlignment=\"Left\" weave:ButtonProperties.Variant=\"Outline\" Click=\"button_Cancel_Click\" Margin=\"0,0,7,0\"/>\r\n      </StackPanel>\r\n\r\n   </Grid>\r\n</auiw:ChildWindow>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCPropertyMapping/IFCUserDefinedPropertyMapping.xaml.cs",
    "content": "﻿using Autodesk.Revit.DB;\r\nusing Autodesk.Revit.UI;\r\nusing Autodesk.UI.Windows;\r\nusing BIM.IFC.Export.UI.Properties;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Globalization;\r\nusing System.Linq;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Data;\r\nusing System.Windows.Input;\r\nusing static BIM.IFC.Export.UI.IFCPropertySetType;\r\nusing ComboBox = System.Windows.Controls.ComboBox;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// Validates user-defined property sets to ensure correct creation and modification.\r\n   /// </summary>\r\n   public class UserDefinedPropertySetValidator\r\n   {\r\n      /// <summary>\r\n      /// Modification allowed to properties within property set.\r\n      /// </summary>\r\n      public enum PropertyModificationOperation\r\n      {\r\n         AllowExport,\r\n         RevitPropertyName,\r\n         IFCPropertyName,\r\n         PropertyApplicationType\r\n      }\r\n\r\n      /// <summary>\r\n      /// String to identify reserved property set names.\r\n      /// </summary>\r\n      private static string PropertySetReservedString => \"PSet_\";\r\n\r\n      /// <summary>\r\n      /// Indicates if the property set is reserved or not.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// Reserved property sets begin with \"PSet_\".\r\n      /// </remarks>\r\n      /// <param name=\"propertySet\">Name of property set.</param>\r\n      /// <returns>True if property set is reserved, false otherwise.</returns>\r\n      public static bool IsReserved(string propertySet)\r\n      {\r\n         if (string.IsNullOrWhiteSpace(propertySet) || propertySet.Length < PropertySetReservedString.Length)\r\n            return false;\r\n\r\n         return (propertySet.StartsWith(PropertySetReservedString, StringComparison.OrdinalIgnoreCase));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Extends the property set name if it is a reserved property set (starts with \"PSet_\").\r\n      /// </summary>\r\n      /// <param name=\"propertySet\">Name of the property set.</param>\r\n      /// <returns>Extended property set name if the property set name is reserved, the original property set name otherwise.</returns>\r\n      public (string, bool) ExtendPropertySetNameIfNeeded(string propertySet)\r\n      {\r\n         if (!IsReserved(propertySet))\r\n            return (propertySet, false);\r\n\r\n         string extendedPropertyset = $\"e{propertySet}\";\r\n         DelayedValidationWarnings.Add(string.Format(Resources.IFCExportWarningCannotAddUserDefinedPropertySet, propertySet, PropertySetReservedString, extendedPropertyset));\r\n         return (extendedPropertyset, true);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Indicates whether the property can be added to the property set.\r\n      /// </summary>\r\n      /// <param name=\"propertySet\">Property set name.</param>\r\n      /// <param name=\"property\">New property name.</param>\r\n      /// <returns>True if property can be added to property set, false otherwise.</returns>\r\n      public bool CanAddProperty(string propertySet, string property)\r\n      {\r\n         if (!IsReserved(propertySet))\r\n            return true;\r\n\r\n         DelayedValidationWarnings.Add(string.Format(Resources.IFCExportWarningCannotAddPropertyToReservedPropertySet, property, propertySet));\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Indicates whether the property within the property set can be modified.\r\n      /// </summary>\r\n      /// <param name=\"propertySet\">Property set name.</param>\r\n      /// <param name=\"property\">Property name.</param>\r\n      /// <param name=\"operation\">Operation to be performed on property set.</param>\r\n      /// <returns>True if operation is allowed, false otherwise.</returns>\r\n      public bool CanModifyProperty(string propertySet, string property, PropertyModificationOperation operation)\r\n      {\r\n         if (!IsReserved(propertySet) || (operation == PropertyModificationOperation.AllowExport))\r\n            return true;\r\n\r\n         DelayedValidationWarnings.Add(string.Format(Resources.IFCExportWarningCannotModifyPropertySetProperty, property, propertySet));\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Warnings that may be posted when Dialog is closed.\r\n      /// </summary>\r\n      public List<string> DelayedValidationWarnings { get; set; } = new List<string>();\r\n   }\r\n\r\n   /// <summary>\r\n   /// User-defined property information.\r\n   /// </summary>\r\n   public class UserDefinedPropertyInfo : INotifyPropertyChanged\r\n   {\r\n      public static readonly string DefaultDataTypeProperty = \"Text\";\r\n      public static readonly string DefaultDataTypeQuantity = \"Length\";\r\n\r\n      private string _ifcPropertyName = string.Empty;\r\n      /// <summary>\r\n      /// The IFC property name.\r\n      /// </summary>\r\n      public string IFCPropertyName\r\n      {\r\n         get { return _ifcPropertyName; }\r\n         set\r\n         {\r\n            if (string.Equals(_ifcPropertyName, value, StringComparison.Ordinal))\r\n               return;\r\n\r\n            _ifcPropertyName = value;\r\n            OnPropertyChanged();\r\n         }\r\n      }\r\n\r\n      private string _propertyDataType = DefaultDataTypeProperty;\r\n      /// <summary>\r\n      /// The property data type.\r\n      /// </summary>\r\n      public string PropertyDataType\r\n      {\r\n         get { return _propertyDataType; }\r\n         set\r\n         {\r\n            if (string.Equals(_propertyDataType, value, StringComparison.Ordinal))\r\n               return;\r\n\r\n            _propertyDataType = value;\r\n            OnPropertyChanged();\r\n            ResetRevitParameterInfoIfAssigned();\r\n         }\r\n      }\r\n\r\n      private IFCUserDefinedPropertyType _propertyType = IFCUserDefinedPropertyType.Single;\r\n      /// <summary>\r\n      /// The type of the property.\r\n      /// </summary>\r\n      public IFCUserDefinedPropertyType PropertyType\r\n      {\r\n         get { return _propertyType; }\r\n         set\r\n         {\r\n            if (_propertyType == value)\r\n               return;\r\n\r\n            _propertyType = value;\r\n            OnPropertyChanged();\r\n            ResetRevitParameterInfoIfAssigned();\r\n         }\r\n      }\r\n\r\n      private string _propertyDataTypeDefined = DefaultDataTypeProperty;\r\n      /// <summary>\r\n      /// The defined value data type of the table property.\r\n      /// </summary>\r\n      public string PropertyDataTypeDefined\r\n      {\r\n         get { return _propertyDataTypeDefined; }\r\n         set\r\n         {\r\n            if (string.Equals(_propertyDataTypeDefined, value, StringComparison.Ordinal))\r\n               return;\r\n\r\n            _propertyDataTypeDefined = value;\r\n            OnPropertyChanged();\r\n            if (_propertyType == IFCUserDefinedPropertyType.Table)\r\n               ResetRevitParameterInfoIfAssigned();\r\n         }\r\n      }\r\n\r\n      // <summary>\r\n      // The Revit parameter.\r\n      // </summary>\r\n      private RevitParameterInfo m_revitParameterInfo = new();\r\n      public RevitParameterInfo RevitParameterInfo\r\n      {\r\n         get { return m_revitParameterInfo; }\r\n         set\r\n         {\r\n            if (m_revitParameterInfo != null && value != null &&\r\n               m_revitParameterInfo.Id == value.Id &&\r\n               string.Equals(m_revitParameterInfo.Name, value.Name, StringComparison.Ordinal))\r\n               return;\r\n\r\n            m_revitParameterInfo = value;\r\n            OnPropertyChanged();\r\n         }\r\n      }\r\n\r\n      private void ResetRevitParameterInfoIfAssigned()\r\n      {\r\n         if (m_revitParameterInfo == null)\r\n            return;\r\n\r\n         bool parameterIsAssigned = m_revitParameterInfo.Id != ElementId.InvalidElementId ||\r\n            !string.IsNullOrWhiteSpace(m_revitParameterInfo.Name);\r\n         if (!parameterIsAssigned)\r\n            return;\r\n\r\n         m_revitParameterInfo = new RevitParameterInfo();\r\n         OnPropertyChanged(nameof(RevitParameterInfo));\r\n      }\r\n\r\n      public event PropertyChangedEventHandler PropertyChanged;\r\n      protected void OnPropertyChanged([CallerMemberName] string name = null)\r\n      {\r\n         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));\r\n      }\r\n   }\r\n\r\n\r\n   /// <summary>\r\n   /// Revit parameter information.\r\n   /// </summary>\r\n   public class RevitParameterInfo\r\n   {\r\n      public string Name = string.Empty;\r\n\r\n      public ElementId Id = ElementId.InvalidElementId;\r\n\r\n      public RevitParameterInfo()\r\n      {\r\n         Name = string.Empty;\r\n         Id = ElementId.InvalidElementId;\r\n      }\r\n\r\n      public RevitParameterInfo(string name, ElementId id)\r\n      {\r\n         Name = name;\r\n         Id = id;\r\n      }\r\n   }\r\n\r\n\r\n   /// <summary>\r\n   /// Interaction logic for IFCUserDefinedPropertyMapping.xaml\r\n   /// </summary>\r\n   public partial class IFCUserDefinedPropertyMapping : ChildWindow, INotifyPropertyChanged\r\n   {\r\n      public ObservableCollection<string> ObservablePropertySets { get; set; } = new();\r\n\r\n      private ObservableCollection<UserDefinedPropertyInfo> _observableProperties = new();\r\n      public ObservableCollection<UserDefinedPropertyInfo> ObservableProperties\r\n      {\r\n         get { return _observableProperties; }\r\n         set\r\n         {\r\n            // Unsubscribe from old collection items\r\n            if (_observableProperties != null)\r\n            {\r\n               foreach (var item in _observableProperties)\r\n               {\r\n                  item.PropertyChanged -= OnPropertyInfoChanged;\r\n               }\r\n               _observableProperties.CollectionChanged -= OnObservablePropertiesCollectionChanged;\r\n            }\r\n\r\n            _observableProperties = value;\r\n\r\n            // Subscribe to new collection items\r\n            if (_observableProperties != null)\r\n            {\r\n               foreach (var item in _observableProperties)\r\n               {\r\n                  item.PropertyChanged += OnPropertyInfoChanged;\r\n               }\r\n               _observableProperties.CollectionChanged += OnObservablePropertiesCollectionChanged;\r\n            }\r\n\r\n            OnPropertyChanged();\r\n            OnPropertyChanged(nameof(HasTableProperties));\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Property to trigger TablePropertyTypeVisibilityConverter when any PropertyType changes\r\n      /// </summary>\r\n      public bool HasTableProperties\r\n      {\r\n         get\r\n         {\r\n            return ObservableProperties?.Any(prop => prop.PropertyType == IFCUserDefinedPropertyType.Table) ?? false;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Handle property changes on individual UserDefinedPropertyInfo items\r\n      /// </summary>\r\n      private void OnPropertyInfoChanged(object sender, PropertyChangedEventArgs e)\r\n      {\r\n         if (e.PropertyName == nameof(UserDefinedPropertyInfo.PropertyType))\r\n         {\r\n            OnPropertyChanged(nameof(HasTableProperties));\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Handle items added/removed from ObservableProperties collection\r\n      /// </summary>\r\n      private void OnObservablePropertiesCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)\r\n      {\r\n         // Subscribe to PropertyChanged for new items\r\n         if (e.NewItems != null)\r\n         {\r\n            foreach (UserDefinedPropertyInfo item in e.NewItems)\r\n            {\r\n               item.PropertyChanged += OnPropertyInfoChanged;\r\n            }\r\n         }\r\n\r\n         // Unsubscribe from PropertyChanged for removed items\r\n         if (e.OldItems != null)\r\n         {\r\n            foreach (UserDefinedPropertyInfo item in e.OldItems)\r\n            {\r\n               item.PropertyChanged -= OnPropertyInfoChanged;\r\n            }\r\n         }\r\n\r\n         OnPropertyChanged(nameof(HasTableProperties));\r\n      }\r\n\r\n      public ObservableCollection<string> ObservableApplicableEntities { get; set; } = new();\r\n\r\n      private static Dictionary<bool, ObservableCollection<string>> _dataTypesCache = null;\r\n\r\n      private ObservableCollection<string> _allDataTypes = new();\r\n      public ObservableCollection<string> AllDataTypes\r\n      {\r\n         get { return _allDataTypes; }\r\n         set\r\n         {\r\n            _allDataTypes = value;\r\n            OnPropertyChanged();\r\n         }\r\n      }\r\n\r\n      public ObservableCollection<IFCUserDefinedPropertyType> AvailablePropertyTypes { get; } = new ObservableCollection<IFCUserDefinedPropertyType>()\r\n      {\r\n         IFCUserDefinedPropertyType.Single,\r\n         IFCUserDefinedPropertyType.Bounded,\r\n         IFCUserDefinedPropertyType.List,\r\n         IFCUserDefinedPropertyType.Table\r\n      };\r\n\r\n      UserDefinedPropertySetValidator validator = new();\r\n\r\n      private string _selectedPropertySet;\r\n      public string SelectedPropertySet\r\n      {\r\n         get { return _selectedPropertySet; }\r\n         set\r\n         {\r\n            _selectedPropertySet = value;\r\n            OnPropertyChanged();\r\n         }\r\n      }\r\n\r\n      private IFCVersion EntityTreeVersion { get; set; } = IFCVersion.Default;\r\n\r\n      private UserDefinedPropertyInfo _selectedProperty;\r\n      public UserDefinedPropertyInfo SelectedProperty\r\n      {\r\n         get { return _selectedProperty; }\r\n         set\r\n         {\r\n            _selectedProperty = value;\r\n            OnPropertyChanged();\r\n         }\r\n      }\r\n\r\n      public event PropertyChangedEventHandler PropertyChanged;\r\n      protected void OnPropertyChanged([CallerMemberName] string name = null)\r\n      {\r\n         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));\r\n      }\r\n\r\n      public bool IsModified { get; private set; } = false;\r\n\r\n      private Transaction _transaction;\r\n\r\n      public IFCUserDefinedPropertyMapping()\r\n      {\r\n         InitializeComponent();\r\n         DataContext = this;\r\n\r\n         // Initialize collection change subscription\r\n         _observableProperties.CollectionChanged += OnObservablePropertiesCollectionChanged;\r\n\r\n         Document doc = IFCCommandOverrideApplication.TheDocument;\r\n         _transaction = new Transaction(doc, Properties.Resources.ModifyIFCPropertyMapping);\r\n         StartTransaction();\r\n\r\n         InitializePropertySetList();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes the mapping templates listbox.\r\n      /// </summary>\r\n      private void InitializePropertySetList()\r\n      {\r\n         ObservablePropertySets.Clear();\r\n\r\n         Document document = IFCCommandOverrideApplication.TheDocument;\r\n         IList<string> propertySetNames = IFCUserDefinedPropertySet.ListPropertySetNames(document);\r\n         if ((propertySetNames?.Count ?? 0) == 0)\r\n            return;\r\n\r\n         foreach (var psetName in propertySetNames)\r\n         {\r\n            ObservablePropertySets.Add(psetName);\r\n         }\r\n\r\n         SelectedPropertySet = ObservablePropertySets.Count > 0 ? ObservablePropertySets[0] : string.Empty;\r\n      }\r\n\r\n      private void button_Add_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCTemplateData data = new(Properties.Resources.IFCNewPropertySet,\r\n            IFCUserDefinedPropertySet.ListPropertySetNames(IFCCommandOverrideApplication.TheDocument),\r\n            isCategoryMapping: false, IFCTemplateData.DialogTypeEnum.PropertySet);\r\n\r\n         IFCNewTemplate newDialog = new(data);\r\n         newDialog.Owner = this;\r\n         bool? ret = newDialog.ShowDialog();\r\n         if (ret.HasValue && ret.Value == true)\r\n         {\r\n            string newPSetName = newDialog.Data.NewName;\r\n            if (!string.IsNullOrEmpty(newPSetName) && !ObservablePropertySets.Contains(newPSetName))\r\n            {\r\n               IFCUserDefinedPropertySet newParameterTemplate = IFCUserDefinedPropertySet.Create(IFCCommandOverrideApplication.TheDocument, newPSetName);\r\n               if (newParameterTemplate == null)\r\n                  return;\r\n\r\n               PropertySetType selectedPropertySet = newDialog.SelectedIfcPropertySetType.CurrentPropertySetType;\r\n               switch (selectedPropertySet)\r\n               {\r\n                  case PropertySetType.QuantitySet:\r\n                     {\r\n                        newParameterTemplate.PropertySetType = IFCUserDefinedPropertySetType.QuantitySet;\r\n                        break;\r\n                     }\r\n                  case PropertySetType.IFCAttributes:\r\n                     {\r\n                        newParameterTemplate.PropertySetType = IFCUserDefinedPropertySetType.IFCAttributeSet;\r\n                        break;\r\n                     }\r\n                  default:\r\n                     {\r\n                        newParameterTemplate.PropertySetType = IFCUserDefinedPropertySetType.PropertySet;\r\n                        break;\r\n                     }\r\n               }\r\n\r\n               ObservablePropertySets.Add(newPSetName);\r\n               SelectedPropertySet = newPSetName;\r\n\r\n               // Init attributes only after SelectedPropertySet is set, due to saving of current template before switching to new one\r\n               // it is done in listBox_PropertySets_SelectionChanged()\r\n               if (newParameterTemplate.PropertySetType == IFCUserDefinedPropertySetType.IFCAttributeSet)\r\n                  InitializeIFCAttributes(newParameterTemplate);\r\n\r\n               InitData();\r\n            }\r\n         }\r\n      }\r\n\r\n      public void InitializeIFCAttributes(IFCUserDefinedPropertySet newParameterTemplate)\r\n      {\r\n         if (newParameterTemplate == null)\r\n            return;\r\n\r\n         newParameterTemplate.AddProperty(new IFCUserDefinedProperty(\"Name\", ElementId.InvalidElementId, string.Empty, \"Label\", IFCUserDefinedPropertyType.Single, string.Empty));\r\n         newParameterTemplate.AddProperty(new IFCUserDefinedProperty(\"LongName\", ElementId.InvalidElementId, string.Empty, \"Label\", IFCUserDefinedPropertyType.Single, string.Empty));\r\n         newParameterTemplate.AddProperty(new IFCUserDefinedProperty(\"Description\", ElementId.InvalidElementId, string.Empty, \"Text\", IFCUserDefinedPropertyType.Single, string.Empty));\r\n         newParameterTemplate.AddProperty(new IFCUserDefinedProperty(\"ObjectType\", ElementId.InvalidElementId, string.Empty, \"Label\", IFCUserDefinedPropertyType.Single, string.Empty));\r\n\r\n         InitializeObservableProperties(newParameterTemplate.GetProperties());\r\n      }\r\n\r\n      private void button_Import_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         FileOpenDialog openDialog = new FileOpenDialog(Properties.Resources.IFCUserDefinedPropertySetsFilter);\r\n         openDialog.Title = Properties.Resources.ImportIFCUserDefinedMappingDialogName;\r\n\r\n         if (openDialog.Show() == ItemSelectionDialogResult.Confirmed)\r\n         {\r\n            // TODO: Support cloud paths.\r\n            ModelPath modelPath = openDialog.GetSelectedModelPath();\r\n            string fileName = ModelPathUtils.ConvertModelPathToUserVisiblePath(modelPath);\r\n\r\n            try\r\n            {\r\n               IList<IFCUserDefinedPropertySet> importedList = IFCUserDefinedPropertySet.ImportFromFile(IFCCommandOverrideApplication.TheDocument, fileName, out bool isValidFile);\r\n               if (importedList == null)\r\n                  return;\r\n\r\n               if (!isValidFile)\r\n               {\r\n                  using (Autodesk.Revit.UI.TaskDialog taskDialog = new Autodesk.Revit.UI.TaskDialog(Properties.Resources.IFCExport))\r\n                  {\r\n                     taskDialog.MainInstruction = Properties.Resources.IFCInvalidUserDefinedMappingFile;\r\n                     taskDialog.MainIcon = Autodesk.Revit.UI.TaskDialogIcon.TaskDialogIconWarning;\r\n                     taskDialog.TitleAutoPrefix = false;\r\n                     TaskDialogResult taskDialogResult = taskDialog.Show();\r\n                     return;\r\n                  }\r\n               }\r\n\r\n               importedList.ToList().ForEach(x =>\r\n               { \r\n                  if(IFCTemplateData.ContainsInvalidTemplateCharacters(x.Name))\r\n                     x.Name = IFCTemplateData.RemoveInvalidCharacters(x.Name);\r\n                  }\r\n               );\r\n\r\n               bool containsReservedPSets = false;\r\n               foreach (var item in importedList)\r\n               {\r\n                  (string psetName, bool changed) = validator.ExtendPropertySetNameIfNeeded(item.Name);\r\n                  if (ObservablePropertySets.Contains(psetName))\r\n                     continue;\r\n\r\n                  containsReservedPSets |= changed;\r\n                  ObservablePropertySets.Add(psetName);\r\n               }\r\n               \r\n               if (containsReservedPSets)\r\n               {\r\n                  IFCNotificationMessageBox notificationMessageBox = new(Properties.Resources.ReservedPropertySetTooltip)\r\n                  {\r\n                     Owner = this,\r\n                     Title = Properties.Resources.ImportIFCUserDefinedMappingDialogName\r\n                  };\r\n                  bool? ret = notificationMessageBox.ShowDialog();\r\n                  if (!ret.HasValue || ret.Value == false)\r\n                  {\r\n                     return;\r\n                  }\r\n               }\r\n                \r\n               // Initialize observable collections with imported data before selection changes\r\n               InitData();\r\n\r\n               SelectedPropertySet = ObservablePropertySets.FirstOrDefault();\r\n            }\r\n            catch (Exception)\r\n            {\r\n               return;\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes data.\r\n      /// </summary>\r\n      private void InitData()\r\n      {\r\n         InitializeDataTypes();\r\n         InitializePropertyGrid();\r\n         InitializeApplicableEntitiesList();\r\n      }\r\n\r\n      private void button_Copy_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCUserDefinedPropertySet currentPSet = GetCurrentPropertySet();\r\n         if (currentPSet == null)\r\n            return;\r\n\r\n         WritePropertyInfoToPropertySet(SelectedPropertySet);\r\n         IFCTemplateData data = new(currentPSet.Name, IFCUserDefinedPropertySet.ListPropertySetNames(IFCCommandOverrideApplication.TheDocument),\r\n            isCategoryMapping: false, IFCTemplateData.DialogTypeEnum.PropertySet);\r\n         data.MakeUniqueName();\r\n\r\n         IFCCopyTemplate copyDialog = new(data)\r\n         {\r\n            Owner = this\r\n         };\r\n\r\n         bool? ret = copyDialog.ShowDialog();\r\n         if (ret.HasValue && ret.Value == true)\r\n         {\r\n            string copyName = copyDialog.Data.NewName;\r\n            try\r\n            {\r\n               IFCUserDefinedPropertySet importedTemplate = currentPSet.CopyPropertySet(IFCCommandOverrideApplication.TheDocument, copyName);\r\n            }\r\n            catch (Exception)\r\n            {\r\n               return;\r\n            }\r\n\r\n            ObservablePropertySets.Add(copyName);\r\n            SelectedPropertySet = copyName;\r\n         }\r\n      }\r\n\r\n      private void button_Save_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         SaveDialogChanges();\r\n         CommitTransaction();\r\n         StartTransaction();\r\n      }\r\n\r\n      private void button_Export_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         SaveDialogChanges();\r\n\r\n         FileSaveDialog saveDialog = new FileSaveDialog(Properties.Resources.IFCUserDefinedPropertySetsFilter);\r\n         saveDialog.Title = Properties.Resources.ExportIFCUserDefinedMappingDialogName;\r\n\r\n         if (saveDialog.Show() == ItemSelectionDialogResult.Confirmed)\r\n         {\r\n            try\r\n            {\r\n               // TODO: Support (or warn) on cloud paths.\r\n               ModelPath modelPath = saveDialog.GetSelectedModelPath();\r\n               string fileName = ModelPathUtils.ConvertModelPathToUserVisiblePath(modelPath);\r\n               IFCUserDefinedPropertySet.ExportToFile(IFCCommandOverrideApplication.TheDocument, fileName);\r\n            }\r\n            catch (Exception)\r\n            {\r\n               return;\r\n            }\r\n         }\r\n      }\r\n\r\n      private void button_Delete_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCUserDefinedPropertySet currentPSet = GetCurrentPropertySet();\r\n         if (currentPSet == null)\r\n            return;\r\n\r\n         IFCDeleteTemplate deleteTemplateDialog = new(currentPSet.Name)\r\n         {\r\n            Owner = this\r\n         };\r\n         bool? ret = deleteTemplateDialog.ShowDialog();\r\n         if (ret.HasValue && ret.Value == true)\r\n         {\r\n            ObservablePropertySets.Remove(currentPSet.Name);\r\n            IFCCommandOverrideApplication.TheDocument.Delete(currentPSet.Id);\r\n            SelectedPropertySet = ObservablePropertySets.Count > 0 ? ObservablePropertySets[0] : string.Empty;\r\n         }\r\n      }\r\n\r\n      private IFCUserDefinedPropertySet GetCurrentPropertySet()\r\n      {\r\n         if (string.IsNullOrEmpty(SelectedPropertySet))\r\n            return null;\r\n\r\n         return IFCUserDefinedPropertySet.FindPropertySetByName(IFCCommandOverrideApplication.TheDocument, SelectedPropertySet);\r\n      }\r\n\r\n      private void button_Ok_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         foreach (string delayedWarning in validator.DelayedValidationWarnings)\r\n            IFCExport.TheDocument.Application.WriteJournalComment(delayedWarning, true);\r\n\r\n         SaveDialogChanges();\r\n         CommitTransaction();\r\n         Close();\r\n      }\r\n\r\n      private void button_Cancel_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         DiscardTransactions();\r\n         Close();\r\n      }\r\n\r\n      protected override bool OnContextHelp()\r\n      {\r\n         ContextualHelp help = new ContextualHelp(ContextualHelpType.ContextId, \"HDialog_IFC_UserDefinedPropertyMapping\");\r\n         help.Launch();\r\n\r\n         return true;\r\n      }\r\n\r\n      private void ChildWindow_PreviewKeyDown(object sender, KeyEventArgs e)\r\n      {\r\n         if (e.Key == Key.Escape)\r\n         {\r\n            e.Handled = true;\r\n            button_Cancel_Click(button_Cancel, new RoutedEventArgs());\r\n         }\r\n      }\r\n\r\n      private void ChildWindow_Closing(object sender, CancelEventArgs e)\r\n      {\r\n         DiscardTransactions();\r\n      }\r\n\r\n      private void button_SelectEnitites_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCVersion? versionToUse = ObservableApplicableEntities.Count > 0 ? EntityTreeVersion : null;\r\n         EntityTree entityTree = new(versionToUse,\r\n            GetSelectedEnititesString(), desc: \"\", singleNodeSelection: false, EntityTree.SelectionStrategyType.Inclusion,\r\n            synchronizeSelectionWithType: false, propagatePreselection: true)\r\n         {\r\n            Owner = this,\r\n            Title = Properties.Resources.IFCEntitySelection\r\n         };\r\n         entityTree.PredefinedTypeTreeView.Visibility = System.Windows.Visibility.Hidden;\r\n\r\n         bool? ret = entityTree.ShowDialog();\r\n\r\n         if (ret.HasValue && ret.Value == true)\r\n         {\r\n            EntityTreeVersion = IfcSchemaEntityTree.VersionName(entityTree.CurrentIFCVersion);\r\n            ObservableApplicableEntities.Clear();\r\n            foreach (string entity in entityTree.GetSelectedEntityParents().Split(';'))\r\n            {\r\n               if (string.IsNullOrEmpty(entity))\r\n                  continue;\r\n               ObservableApplicableEntities.Add(entity);\r\n            }\r\n         }\r\n      }\r\n\r\n      private string GetSelectedEnititesString()\r\n      {\r\n         string selectedEntities = \"\";\r\n         foreach (string entity in ObservableApplicableEntities)\r\n         {\r\n            selectedEntities += entity + \";\";\r\n         }\r\n         return selectedEntities;\r\n      }\r\n\r\n      private void button_Rename_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         IFCUserDefinedPropertySet currentPSet = GetCurrentPropertySet();\r\n         if (currentPSet == null)\r\n            return;\r\n\r\n         string previousName = currentPSet.Name;\r\n         IFCTemplateData data = new(previousName, IFCUserDefinedPropertySet.ListPropertySetNames(IFCCommandOverrideApplication.TheDocument),\r\n            isCategoryMapping: false, IFCTemplateData.DialogTypeEnum.PropertySet);\r\n\r\n         IFCRenameTemplate renamePSetDialog = new(data)\r\n         {\r\n            Owner = this\r\n         };\r\n         bool? ret = renamePSetDialog.ShowDialog();\r\n         if (ret.HasValue && ret.Value && !string.IsNullOrWhiteSpace(renamePSetDialog.Data.NewName))\r\n         {\r\n            string newName = renamePSetDialog.Data.NewName;\r\n            currentPSet.Name = newName;\r\n            int ind = ObservablePropertySets.IndexOf(previousName);\r\n            if (ind >= 0)\r\n            {\r\n               ObservablePropertySets.RemoveAt(ind);\r\n               ObservablePropertySets.Insert(ind, newName);\r\n               SelectedPropertySet = newName;\r\n            }\r\n         }\r\n\r\n      }\r\n\r\n      private void button_ResetEnitites_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         ObservableApplicableEntities.Clear();\r\n      }\r\n\r\n      private void button_RevitPropertyEdit_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         UserDefinedPropertyInfo propertyInfo = dataGrid_UserDefinedProperties.SelectedItem as UserDefinedPropertyInfo;\r\n         if (propertyInfo == null)\r\n            return;\r\n\r\n         bool isTableProperty = propertyInfo.PropertyType == IFCUserDefinedPropertyType.Table;\r\n\r\n         IFCRevitPropertySelector propertySelector = new(\r\n           propertyInfo.RevitParameterInfo, SelectedPropertySet, SelectedProperty.IFCPropertyName, SelectedProperty.PropertyDataType,\r\n           EntityTreeVersion, PropertySetupType.UserDefinedPropertySets, ObservableApplicableEntities.ToList(), isTableProperty)\r\n         {\r\n            Owner = this,\r\n         };\r\n\r\n         bool? ret = propertySelector.ShowDialog();\r\n         if (ret.HasValue && ret.Value == true)\r\n         {\r\n            propertyInfo.RevitParameterInfo = propertySelector.SelectedRevitParameter;\r\n\r\n            // Default to the Revit property name if it isn't set.\r\n            if (string.IsNullOrEmpty(propertyInfo.IFCPropertyName))\r\n               propertyInfo.IFCPropertyName = propertySelector.SelectedRevitParameter.Name;\r\n         }\r\n      }\r\n\r\n      private void button_AddRow_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         if (string.IsNullOrEmpty(SelectedPropertySet))\r\n            return;\r\n\r\n         ObservableProperties.Add(CreatePropertyInfoForSelectedSet());\r\n      }\r\n\r\n      private UserDefinedPropertyInfo CreatePropertyInfoForSelectedSet()\r\n      {\r\n         UserDefinedPropertyInfo newProperty = new();\r\n\r\n         if (string.IsNullOrEmpty(SelectedPropertySet))\r\n            return newProperty;\r\n\r\n         if ((AllDataTypes?.Count ?? 0) == 0)\r\n            return newProperty;\r\n\r\n         bool? isQuantitySet = IsQuantitySetSelected(SelectedPropertySet);\r\n         string defaultDataType = (isQuantitySet.HasValue && isQuantitySet.Value) ?\r\n            UserDefinedPropertyInfo.DefaultDataTypeQuantity : UserDefinedPropertyInfo.DefaultDataTypeProperty;\r\n\r\n         if (!AllDataTypes.Contains(defaultDataType))\r\n            defaultDataType = AllDataTypes[0];\r\n\r\n         newProperty.PropertyDataType = defaultDataType;\r\n         newProperty.PropertyDataTypeDefined = defaultDataType;\r\n\r\n         return newProperty;\r\n      }\r\n\r\n      public static bool IsValidPropertySetName(string propertySetName, IList<string> existingNames)\r\n      {\r\n         propertySetName = propertySetName?.TrimStart()?.TrimEnd();\r\n         return (!(string.IsNullOrWhiteSpace(propertySetName)\r\n            || (existingNames?.Contains(propertySetName, System.StringComparer.OrdinalIgnoreCase) ?? false)))\r\n            && NamingUtils.IsValidName(propertySetName)\r\n            && IFCUserDefinedPropertySet.IsValidName(IFCCommandOverrideApplication.TheDocument, propertySetName)\r\n            && !UserDefinedPropertySetValidator.IsReserved(propertySetName);\r\n      }\r\n\r\n      public static bool IsValidPropertyName(string propertyName, IList<string> existingNames)\r\n      {\r\n         propertyName = propertyName?.TrimStart()?.TrimEnd();\r\n         return (!(string.IsNullOrWhiteSpace(propertyName)\r\n            || (existingNames?.Contains(propertyName, System.StringComparer.OrdinalIgnoreCase) ?? false)));\r\n      }\r\n\r\n      private void SaveDialogChanges()\r\n      {\r\n         WritePropertyInfoToPropertySet(SelectedPropertySet);\r\n      }\r\n\r\n      private void StartTransaction()\r\n      {\r\n         if (!_transaction.HasStarted())\r\n            _transaction.Start();\r\n      }\r\n\r\n      private void CommitTransaction()\r\n      {\r\n         // Save template changes\r\n         if (_transaction.HasStarted())\r\n         {\r\n            _transaction.Commit();\r\n            IsModified = true;\r\n         }\r\n      }\r\n\r\n      private void DiscardTransactions()\r\n      {\r\n         // Roll back template changes\r\n         if (_transaction.HasStarted())\r\n            _transaction.RollBack();\r\n      }\r\n\r\n      private void listBox_PropertySets_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         // Save current template before switching to new one\r\n         if (e.RemovedItems.Count > 0)\r\n         {\r\n            string prevPSetName = e.RemovedItems[0] as string;\r\n            if (!string.IsNullOrEmpty(prevPSetName))\r\n            {\r\n               WritePropertyInfoToPropertySet(prevPSetName);\r\n\r\n               if (_transaction.HasStarted())\r\n                  _transaction.Commit();\r\n\r\n               if (_transaction.HasEnded())\r\n                  _transaction.Start();\r\n            }\r\n         }\r\n\r\n         InitData();\r\n      }\r\n\r\n      private void InitializeDataTypes()\r\n      {\r\n         AllDataTypes.Clear();\r\n\r\n         if (SelectedPropertySet == null)\r\n            return;\r\n\r\n         bool? isQuantitySet = IsQuantitySetSelected(SelectedPropertySet);\r\n         if (!isQuantitySet.HasValue)\r\n            return;\r\n\r\n         ObservableCollection<string> dataTypes = GetDataTypesFromCache(isQuantitySet.Value);\r\n\r\n         // Sort the data types alphabetically before adding to AllDataTypes\r\n         var sortedDataTypes = dataTypes.OrderBy(x => x).ToList();\r\n\r\n         foreach (string dataType in sortedDataTypes)\r\n         {\r\n            AllDataTypes.Add(dataType);\r\n         }\r\n      }\r\n\r\n      private ObservableCollection<string> GetDataTypesFromCache(bool isQuantitySet)\r\n      {\r\n         if (_dataTypesCache == null)\r\n         {\r\n            _dataTypesCache = new Dictionary<bool, ObservableCollection<string>>();\r\n\r\n            _dataTypesCache.TryAdd(false, new(Enum.GetNames(typeof(PropertyType)).ToList()));\r\n            _dataTypesCache.TryAdd(true, new(Enum.GetNames(typeof(QuantityType)).ToList()));\r\n         }\r\n\r\n         return (_dataTypesCache.ContainsKey(isQuantitySet)) ? _dataTypesCache[isQuantitySet] : new();\r\n      }\r\n\r\n      public static bool? IsQuantitySetSelected(string selectedSetName)\r\n      {\r\n         if (string.IsNullOrEmpty(selectedSetName))\r\n            return null;\r\n\r\n         IFCUserDefinedPropertySet propertySet =\r\n            IFCUserDefinedPropertySet.FindPropertySetByName(IFCCommandOverrideApplication.TheDocument, selectedSetName);\r\n\r\n         if (propertySet == null)\r\n            return null;\r\n\r\n         return propertySet.PropertySetType == IFCUserDefinedPropertySetType.QuantitySet;\r\n      }\r\n\r\n      public static bool? IsIFCAttributeSetSelected(string selectedSetName)\r\n      {\r\n         if (string.IsNullOrEmpty(selectedSetName))\r\n            return null;\r\n\r\n         IFCUserDefinedPropertySet propertySet =\r\n            IFCUserDefinedPropertySet.FindPropertySetByName(IFCCommandOverrideApplication.TheDocument, selectedSetName);\r\n\r\n         if (propertySet == null)\r\n            return null;\r\n\r\n         return propertySet.PropertySetType == IFCUserDefinedPropertySetType.IFCAttributeSet;\r\n      }\r\n\r\n      private void WritePropertyInfoToPropertySet(string psetName)\r\n      {\r\n         if (string.IsNullOrEmpty(psetName))\r\n            return;\r\n\r\n         IFCUserDefinedPropertySet userDefinedPSet = IFCUserDefinedPropertySet.FindPropertySetByName(IFCCommandOverrideApplication.TheDocument, psetName);\r\n         if (userDefinedPSet == null)\r\n            return;\r\n\r\n         WritePropertyInfoToPropertySet(userDefinedPSet);\r\n      }\r\n\r\n      private void WritePropertyInfoToPropertySet(IFCUserDefinedPropertySet userDefinedPSet)\r\n      {\r\n         if (userDefinedPSet == null)\r\n            return;\r\n\r\n         userDefinedPSet.ClearPropertySet();\r\n\r\n         foreach (UserDefinedPropertyInfo propertyInfo in ObservableProperties)\r\n         {\r\n            string propertyName = propertyInfo.IFCPropertyName;\r\n            if (string.IsNullOrEmpty(propertyName) || userDefinedPSet.IsPropertyAMemberOfPropertySet(propertyName))\r\n               continue;\r\n\r\n            userDefinedPSet.AddProperty(new IFCUserDefinedProperty(propertyName, propertyInfo.RevitParameterInfo.Id,\r\n               propertyInfo.RevitParameterInfo.Name, propertyInfo.PropertyDataType, propertyInfo.PropertyType,\r\n               propertyInfo.PropertyDataTypeDefined));\r\n         }\r\n         userDefinedPSet.SetApplicableEntities(ObservableApplicableEntities.ToList());\r\n      }\r\n\r\n      private void InitializePropertyGrid()\r\n      {\r\n         if (string.IsNullOrEmpty(SelectedPropertySet))\r\n            return;\r\n\r\n         ObservableProperties.Clear();\r\n\r\n         IList<IFCUserDefinedProperty> properties =\r\n            IFCUserDefinedPropertySet.FindPropertySetByName(IFCCommandOverrideApplication.TheDocument, SelectedPropertySet)?.GetProperties();\r\n\r\n         InitializeObservableProperties(properties);\r\n      }\r\n\r\n      private void InitializeObservableProperties(IList<IFCUserDefinedProperty> dataBaseProperties)\r\n      {\r\n         if ((dataBaseProperties?.Count ?? 0) == 0)\r\n            return;\r\n\r\n         foreach (var property in dataBaseProperties)\r\n         {\r\n            ObservableProperties.Add(new()\r\n            {\r\n               IFCPropertyName = property.IFCPropertyName,\r\n               PropertyDataType = property.DataType,\r\n               PropertyType = property.PropertyType,\r\n               PropertyDataTypeDefined = property.DataTypeDefined,\r\n               RevitParameterInfo = new RevitParameterInfo(property.RevitPropertyName, property.RevitPropertyId),\r\n            });\r\n         }\r\n      }\r\n\r\n      private void InitializeApplicableEntitiesList()\r\n      {\r\n         ObservableApplicableEntities.Clear();\r\n\r\n         if (string.IsNullOrEmpty(SelectedPropertySet))\r\n            return;\r\n\r\n         IList<string> applicableEntities =\r\n            IFCUserDefinedPropertySet.FindPropertySetByName(IFCCommandOverrideApplication.TheDocument, SelectedPropertySet)?.GetApplicableEntities();\r\n\r\n         if (applicableEntities == null)\r\n            return;\r\n\r\n         foreach (var entity in applicableEntities)\r\n         {\r\n            ObservableApplicableEntities.Add(entity);\r\n         }\r\n      }\r\n\r\n      private void button_RemoveRow_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         if (SelectedProperty == null)\r\n            return;\r\n\r\n         ObservableProperties.Remove(SelectedProperty);\r\n      }\r\n\r\n      private void button_RemoveEntity_Click(object sender, RoutedEventArgs e)\r\n      {\r\n         if (sender is not Button button || button.DataContext is not string entity)\r\n            return;\r\n\r\n         ObservableApplicableEntities.Remove(entity);\r\n      }\r\n\r\n      #region ComboBox_DataType Event Handlers\r\n\r\n      private bool _isFilteringInProgress = false; // Prevent cascade TextChanged during filtering\r\n\r\n      private void FilterDataTypes(string filterText, ComboBox comboBox, bool forceFullList)\r\n      {\r\n         var targetFilteredCollection = ComboBoxFilteringUtilities.GetOrCreateCollection(comboBox, AllDataTypes);\r\n         ComboBoxFilteringUtilities.FilterCollection(comboBox, targetFilteredCollection, AllDataTypes, filterText, forceFullList);\r\n      }\r\n\r\n      private void ComboBox_DataType_Loaded(object sender, RoutedEventArgs e)\r\n      {\r\n         if (sender is not ComboBox comboBox)\r\n            return;\r\n\r\n         ComboBoxFilteringUtilities.GetOrCreateCollection(comboBox, AllDataTypes);\r\n\r\n         ComboBoxFilteringUtilities.AttachTextChangedHandler(comboBox, ComboBox_DataType_TextChanged);\r\n\r\n         if (comboBox.DataContext is not UserDefinedPropertyInfo dataContext)\r\n            return;\r\n\r\n         // Set initial selection from appropriate property when ComboBox loads\r\n         string initialValue = IsTableSpecificDataType(comboBox) ?\r\n            dataContext.PropertyDataTypeDefined : dataContext.PropertyDataType;\r\n\r\n         if (!string.IsNullOrEmpty(initialValue))\r\n         {\r\n            comboBox.SelectedItem = initialValue;\r\n            comboBox.Text = initialValue;\r\n         }\r\n      }\r\n\r\n      private void ComboBox_DataType_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n      {\r\n         if (sender is not ComboBox comboBox ||\r\n            e.AddedItems.Count == 0 || comboBox.SelectedItem == null ||\r\n            comboBox.DataContext is not UserDefinedPropertyInfo dataContext)\r\n            return;\r\n\r\n         string newValue = comboBox.SelectedItem.ToString() ?? string.Empty;\r\n\r\n         // Update the correct property based on ComboBox type\r\n         if (IsTableSpecificDataType(comboBox))\r\n            dataContext.PropertyDataTypeDefined = newValue;\r\n         else\r\n            dataContext.PropertyDataType = newValue;\r\n      }\r\n\r\n      private static bool IsTableSpecificDataType(ComboBox comboBox)\r\n      {\r\n         return comboBox?.Name == \"comboBox_DataTypeDefined\";\r\n      }\r\n\r\n      private void ComboBox_DataType_DropDownOpened(object sender, EventArgs e)\r\n      {\r\n         if (sender is not ComboBox comboBox)\r\n            return;\r\n\r\n         // If user manually opened dropdown (not programmatically by our TextChanged)\r\n         // AND current selected item is an exact match, then show full list\r\n         if (!_isFilteringInProgress && comboBox.SelectedItem != null)\r\n         {\r\n            string selectedItemText = comboBox.SelectedItem.ToString() ?? string.Empty;\r\n            bool isExactMatch = AllDataTypes?.Any(item => string.Equals(item, selectedItemText, StringComparison.OrdinalIgnoreCase)) ?? false;\r\n            if (isExactMatch)\r\n            {\r\n               FilterDataTypes(selectedItemText, comboBox, forceFullList: true);\r\n            }\r\n         }\r\n      }\r\n\r\n      private void ComboBox_DataType_TextChanged(ComboBox comboBox, TextChangedEventArgs e)\r\n      {\r\n         if (comboBox == null)\r\n            return;\r\n\r\n         // Prevent cascade: Ignore TextChanged events that occur during filtering\r\n         if (_isFilteringInProgress)\r\n            return;\r\n\r\n         _isFilteringInProgress = true;\r\n\r\n         try\r\n         {\r\n            string currentText = comboBox.Text ?? \"\";\r\n            FilterDataTypes(currentText, comboBox, forceFullList: false);\r\n\r\n            // Open dropdown to show filtered results - but no for programmatic text changes (like initial loading)\r\n            if (comboBox.IsKeyboardFocusWithin)\r\n            {\r\n               ComboBoxFilteringUtilities.OpenDropDownSuppressingHighlight(comboBox);\r\n            }\r\n         }\r\n         finally\r\n         {\r\n            // Always reset flag, even if exception occurs\r\n            _isFilteringInProgress = false;\r\n         }\r\n      }\r\n      #endregion\r\n   }\r\n\r\n\r\n   /// <summary>\r\n   /// Extracts the row index from the DataGridRow item.\r\n   /// It is used to set AutomationId for valid journal playback.\r\n   /// </summary>\r\n   public class RowIndexValueConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter,\r\n                            System.Globalization.CultureInfo culture)\r\n      {\r\n         DependencyObject item = (DependencyObject)value;\r\n         ItemsControl ic = ItemsControl.ItemsControlFromItemContainer(item);\r\n\r\n         return ic.ItemContainerGenerator.IndexFromContainer(item);\r\n      }\r\n\r\n      public object ConvertBack(object value, Type targetType, object parameter,\r\n                                System.Globalization.CultureInfo culture)\r\n      {\r\n         return null;\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Extracts the row index from the DataGridRow item.\r\n   /// It is used too set AutomationId for valid journal playback.\r\n   /// </summary>\r\n   public class RowIndexSelectedConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter,\r\n                            System.Globalization.CultureInfo culture)\r\n      {\r\n         return value != null;\r\n      }\r\n\r\n      public object ConvertBack(object value, Type targetType, object parameter,\r\n                                System.Globalization.CultureInfo culture)\r\n      {\r\n         return false;\r\n      }\r\n   }\r\n\r\n   #region Converters\r\n   public class IsPropertySetSelectedConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         string mappedName = (string)value;\r\n         if (string.IsNullOrEmpty(mappedName))\r\n         {\r\n            return false;\r\n         }\r\n\r\n         if (bool.TryParse((parameter as string), out bool isParameterVal) && isParameterVal)\r\n         {\r\n            IFCUserDefinedPropertySet propertySet = IFCUserDefinedPropertySet.FindPropertySetByName(IFCCommandOverrideApplication.TheDocument, mappedName);\r\n            if (propertySet == null || (propertySet.PropertySetType == IFCUserDefinedPropertySetType.IFCAttributeSet))\r\n            {\r\n               return false;\r\n            }\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n   }\r\n\r\n\r\n   public class RevitParameterConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         if (value is RevitParameterInfo revitParameter)\r\n         {\r\n            return revitParameter.Name;\r\n         }\r\n\r\n         return string.Empty;\r\n      }\r\n\r\n      public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         return value;\r\n      }\r\n   }\r\n\r\n   public class QuantityLabelVisibilityConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         string selectedPropertySet = (string)value;\r\n\r\n         if (string.IsNullOrEmpty(selectedPropertySet))\r\n            return System.Windows.Visibility.Hidden;\r\n\r\n         bool? isQuantitySet = IFCUserDefinedPropertyMapping.IsQuantitySetSelected(selectedPropertySet);\r\n\r\n         return isQuantitySet.HasValue && isQuantitySet.Value ?\r\n            System.Windows.Visibility.Visible : System.Windows.Visibility.Hidden;\r\n      }\r\n\r\n      object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         return string.Empty;\r\n      }\r\n   }\r\n\r\n   public class IFCAttributesLabelVisibilityConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         string selectedPropertySet = (string)value;\r\n\r\n         if (string.IsNullOrEmpty(selectedPropertySet))\r\n            return System.Windows.Visibility.Hidden;\r\n\r\n         bool? isIFCAttributeSet = IFCUserDefinedPropertyMapping.IsIFCAttributeSetSelected(selectedPropertySet);\r\n\r\n         return isIFCAttributeSet.HasValue && isIFCAttributeSet.Value ?\r\n            System.Windows.Visibility.Visible : System.Windows.Visibility.Hidden;\r\n      }\r\n\r\n      object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         return string.Empty;\r\n      }\r\n   }\r\n\r\n   public class IFCAttributesColumnReadOnlyConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         string selectedPropertySet = (string)value;\r\n\r\n         bool result;\r\n         if (string.IsNullOrEmpty(selectedPropertySet))\r\n            result = true;\r\n         else\r\n         {\r\n            bool? isIFCAttributeSet = IFCUserDefinedPropertyMapping.IsIFCAttributeSetSelected(selectedPropertySet);\r\n            result = (isIFCAttributeSet.HasValue && isIFCAttributeSet.Value);\r\n         }\r\n\r\n         // If parameter is \"invert\", return the opposite (for IsEnabled property)\r\n         if (parameter != null &&\r\n             parameter.ToString().Equals(\"invert\", StringComparison.OrdinalIgnoreCase))\r\n         {\r\n            return !result;\r\n         }\r\n\r\n         return result;\r\n      }\r\n\r\n      object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n   }\r\n\r\n   public class TablePropertyTypeVisibilityConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         if (value is bool hasTableProperties)\r\n         {\r\n            return hasTableProperties ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed;\r\n         }\r\n\r\n         return System.Windows.Visibility.Collapsed;\r\n      }\r\n\r\n      public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n   }\r\n\r\n   public class TablePropertyTypeEnabledConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         if (value is IFCUserDefinedPropertyType propertyType)\r\n         {\r\n            return propertyType == IFCUserDefinedPropertyType.Table;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n   }\r\n   #endregion\r\n\r\n\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCPropertySets.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing BIM.IFC.Export.UI.Properties;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// Represents the choices for the property sets exported by IFC export.\r\n   ///    (0) None – neither internal Revit nor IFC common property sets are exported;\r\n   ///    (1) InternalRevit – only internal Revit parameter groups are exported\r\n   ///    (2) IFCCommon – only IFC Common property sets are exported\r\n   ///    (3) RevitPlusIFC - both internal Revit parameter groups and IFC Common property sets are exported \r\n   /// </summary>\r\n   public class IFCExportedPropertySets\r\n   {\r\n      /// <summary>\r\n      /// The level of the property sets exported.\r\n      /// </summary>\r\n      private int ExportedPropertySets { get; set; }\r\n\r\n      /// <summary>\r\n      /// Constructs the property set option.\r\n      /// </summary>\r\n      /// <param name=\"exportInternalRevit\">if true, internal Revit parameter groups are exported.</param>\r\n      /// <param name=\"exportIFCCommon\">if true, IFC Common property sets are exported.</param>\r\n      /// <param name=\"exportSchedules\">if true, schedules are exported.</param>\r\n      /// <param name=\"exportSchedules\">if true, user defined property sets are exported.</param>\r\n      public IFCExportedPropertySets(bool exportInternalRevit, bool exportIFCCommon, bool exportSchedules, bool exportUserDefined)\r\n      {\r\n         ExportedPropertySets = ((exportInternalRevit) ? 1 : 0) + ((exportIFCCommon) ? 2 : 0) + ((exportSchedules) ? 4 : 0) + ((exportUserDefined) ? 8 : 0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts the property set level to a string.\r\n      /// </summary>\r\n      /// <returns>The string of exported property sets.</returns>\r\n      public override string ToString()\r\n      {\r\n         switch (ExportedPropertySets)\r\n         {\r\n            case 0:\r\n               return Resources.PropertySetsNone;\r\n            case 1:\r\n               return Resources.PropertySetsInternalRevit;\r\n            case 2:\r\n               return Resources.PropertySetsIFCCommon;\r\n            case 3:\r\n               return Resources.PropertySetsRevitPlusIFC;\r\n            case 4:\r\n               return Resources.PropertySetsSchedules;\r\n            case 5:\r\n               return Resources.PropertySetsSchedulesPlusRevit;\r\n            case 6:\r\n               return Resources.PropertySetsSchedulesPlusIFC;\r\n            case 7:\r\n               return Resources.PropertySetsSchedulesPlusRevitPlusIFC;\r\n            case 8:\r\n               return Resources.PropertySetsUserDefined;\r\n            case 9:\r\n               return Resources.PropertySetsInternalRevitPlusUserDefined;\r\n            case 10:\r\n               return Resources.PropertySetsIFCCommonPlusUserDefined;\r\n            case 11:\r\n               return Resources.PropertySetsRevitPlusIFCPlusUserDefined;\r\n            case 12:\r\n               return Resources.PropertySetsSchedulesPlusUserDefined;\r\n            case 13:\r\n               return Resources.PropertySetsSchedulesPlusRevitPlusUserDefined;\r\n            case 14:\r\n               return Resources.PropertySetsSchedulesPlusIFCPlusUserDefined;\r\n            case 15:\r\n               return Resources.PropertySetsSchedulesPlusRevitPlusIFCPlusUserDefined;\r\n            default:\r\n               return Resources.PropertySetsUnrecognized;\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCRenameExportSetup.xaml",
    "content": "﻿<auiw:ChildWindow x:Class=\"BIM.IFC.Export.UI.RenameExportSetupWindow\"\r\n                  xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n                  xmlns:p=\"clr-namespace:BIM.IFC.Export.UI.Properties\"\r\n                  xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n                  xmlns:auiw=\"clr-namespace:Autodesk.UI.Windows;assembly=Autodesk.UI.Windows\"\r\n        Title=\"{x:Static p:Resources.RenameExportSetup}\" Height=\"184\" Width=\"347\" Name=\"Rename\" ResizeMode=\"NoResize\">\r\n    <Grid>\r\n      <Button Content=\"{x:Static p:Resources.Cancel}\" Height=\"23\" HorizontalAlignment=\"Left\" Margin=\"238,116,0,0\" Name=\"buttonCancel\" VerticalAlignment=\"Top\" Width=\"75\" Click=\"buttonCancel_Click\" />\r\n      <Button Content=\"{x:Static p:Resources.OK}\" Height=\"23\" HorizontalAlignment=\"Left\" Margin=\"157,116,0,0\" Name=\"buttonOK\" VerticalAlignment=\"Top\" Width=\"75\" Click=\"buttonOK_Click\" IsDefault=\"True\" />\r\n        <TextBox Height=\"23\" HorizontalAlignment=\"Left\" Margin=\"12,28,0,0\" Name=\"textBoxOriginalName\" VerticalAlignment=\"Top\" Width=\"301\" IsEnabled=\"False\" />\r\n      <Label Content=\"{x:Static p:Resources.OriginalName}\" Height=\"33\" HorizontalAlignment=\"Left\" Margin=\"12,0,0,0\" Name=\"labelOriginalName\" VerticalAlignment=\"Top\" />\r\n      <TextBox Height=\"23\" HorizontalAlignment=\"Left\" Margin=\"12,81,0,0\" Name=\"textBoxNewName\" VerticalAlignment=\"Top\" Width=\"301\" TextChanged=\"textBoxNewName_TextChanged\" ToolTip=\"{x:Static p:Resources.TemplateNameTooltip}\"/>\r\n      <Label Content=\"{x:Static p:Resources.NewName}\" Height=\"33\" HorizontalAlignment=\"Left\" Margin=\"12,57,0,0\" Name=\"labelNewName\" VerticalAlignment=\"Top\" />\r\n    </Grid>\r\n</auiw:ChildWindow>\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCRenameExportSetup.xaml.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.UI.Windows;\r\nusing System;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n    /// <summary>\r\n    /// Interaction logic for Window1.xaml\r\n    /// </summary>\r\n    public partial class RenameExportSetupWindow : ChildWindow\r\n    {\r\n        private String m_newName;\r\n        private IFCExportConfigurationsMap m_configurationMap;\r\n\r\n        /// <summary>\r\n        /// Constructs the rename dialog.\r\n        /// </summary>\r\n        /// <param name=\"configurationMap\">The configuration map.</param>\r\n        /// <param name=\"initialName\">The initial name.</param>\r\n        public RenameExportSetupWindow(IFCExportConfigurationsMap configurationMap, String initialName)\r\n        {\r\n            m_configurationMap = configurationMap;\r\n            m_newName = initialName;           \r\n            InitializeComponent();\r\n            textBoxOriginalName.Text = m_newName;\r\n            textBoxNewName.Text = m_newName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The new name of the setup.\r\n        /// </summary>\r\n        /// <returns>The new name of the setup.</returns>\r\n        public String GetName()\r\n        {\r\n            return m_newName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// OK button click.\r\n        /// </summary>\r\n        /// <param name=\"sender\">The source of the event.</param>\r\n        /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n        private void buttonOK_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            m_newName = textBoxNewName.Text;\r\n            DialogResult = true;\r\n            Close();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Cancel button click.\r\n        /// </summary>\r\n        /// <param name=\"sender\">The source of the event.</param>\r\n        /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n        private void buttonCancel_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            DialogResult = false;\r\n            Close();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Updates ok button when the textbox changed.\r\n        /// </summary>\r\n        /// <param name=\"sender\">The source of the event.</param>\r\n        /// <param name=\"e\">Event arguments that contains the event data.</param>\r\n        private void textBoxNewName_TextChanged(object sender, TextChangedEventArgs e)\r\n        {\r\n            String textName = textBoxNewName.Text;\r\n            if (String.IsNullOrWhiteSpace(textName) || m_configurationMap.HasName(textName))\r\n            {\r\n                buttonOK.IsEnabled = false;\r\n            }\r\n            else\r\n            {\r\n                buttonOK.IsEnabled = true;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCSitePlacementAttributes.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing BIM.IFC.Export.UI.Properties;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n\r\n   public class IFCSitePlacementAttributes\r\n   {\r\n\r\n      public SiteTransformBasis TransformBasis { get; set; }\r\n\r\n      public IFCSitePlacementAttributes(SiteTransformBasis transformBasis)\r\n      {\r\n         TransformBasis = transformBasis;\r\n      }\r\n\r\n      public override string ToString()\r\n      {\r\n         switch (TransformBasis)\r\n         {\r\n            case SiteTransformBasis.Shared:\r\n               return Resources.SharedCoordinates;\r\n            case SiteTransformBasis.Site:\r\n               return Resources.SiteSurveyPoint;\r\n            case SiteTransformBasis.Project:\r\n               return Resources.ProjectBasePoint;\r\n            case SiteTransformBasis.ProjectInTN:\r\n               return Resources.ProjectInTN;\r\n            case SiteTransformBasis.InternalInTN:\r\n               return Resources.InternalCoordinatesInTN;\r\n            default:\r\n               return Resources.InternalCoordinates;\r\n         }\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCSpaceBoundaryAttributes.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing BIM.IFC.Export.UI.Properties;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// Represents the choices for the space boundary levels supported by IFC export.\r\n   ///    None – room/space boundaries are not exported;\r\n   ///    1st level – the room/space boundaries are included but are not optimized to split elements with respect to spaces on the opposite side of the boundary;\r\n   ///    2nd level – the room/space boundaries are included and are split with respect to spaces on the opposite side of the boundary.\r\n   /// </summary>\r\n   public class IFCSpaceBoundariesAttributes\r\n   {\r\n      /// <summary>\r\n      /// The level of room/space boundaries exported.\r\n      /// </summary>\r\n      public int Level { get; set; }\r\n\r\n      /// <summary>\r\n      /// Constructs the space boundary levels.\r\n      /// </summary>\r\n      /// <param name=\"level\"></param>\r\n      public IFCSpaceBoundariesAttributes(int level)\r\n      {\r\n         Level = level;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts the space boundary levels to string.\r\n      /// </summary>\r\n      /// <returns>The string of space boundary level.</returns>\r\n      public override string ToString()\r\n      {\r\n         switch (Level)\r\n         {\r\n            case 0:\r\n               return Resources.SpaceBoundariesNone;\r\n            case 1:\r\n               return Resources.SpaceBoundaries1stLevel;\r\n            case 2:\r\n               return Resources.SpaceBoundaries2ndLevel;\r\n            default:\r\n               return Resources.SpaceBoundariesUnrecognized;\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCTemplateData.cs",
    "content": "﻿using Autodesk.UI.Windows;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Text;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Data;\r\nusing System.Windows.Input;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   public abstract class BaseTemplate : ChildWindow, IDataErrorInfo, INotifyPropertyChanged\r\n   {\r\n      public IFCTemplateData Data { get; protected set; } = null;\r\n\r\n      private readonly UserDefinedPropertySetValidator validator = new();\r\n\r\n      public BaseTemplate(IFCTemplateData data)\r\n      {\r\n         Data = data;\r\n         NewName = data.NewName;\r\n      }\r\n\r\n      internal void OnInit(object obj)\r\n      {\r\n         this.DataContext = obj;\r\n      }\r\n\r\n      private string m_newName = String.Empty;\r\n      public string NewName\r\n      {\r\n         get { return m_newName; }\r\n         set\r\n         {\r\n            m_newName = value;\r\n            OnPropertyChanged();\r\n         }\r\n      }\r\n\r\n      public event PropertyChangedEventHandler PropertyChanged;\r\n\r\n      protected void OnPropertyChanged([CallerMemberName] string name = null)\r\n      {\r\n         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));\r\n      }\r\n\r\n      #region VALIDATION\r\n\r\n      /// <summary>\r\n      /// Error message indicating what's wrong with the object\r\n      /// </summary>\r\n      public string Error\r\n      {\r\n         get\r\n         {\r\n            return string.Empty;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Error message for the property with the given name\r\n      /// </summary>\r\n      /// <param name=\"columnName\">The name of the property</param>\r\n      /// <returns></returns>\r\n      public string this[string columnName]\r\n      {\r\n         get\r\n         {\r\n            string result = string.Empty;\r\n            if (columnName == \"NewName\")\r\n            {\r\n               if (!Data.IsValidName(NewName))\r\n               {\r\n                  result = GetToolTip();\r\n               }\r\n            }\r\n\r\n            return result;\r\n         }\r\n      }\r\n      #endregion\r\n\r\n      public string GetToolTip()\r\n      {\r\n         switch (Data.DialogType)\r\n         {\r\n            case IFCTemplateData.DialogTypeEnum.Template:\r\n               if (IFCTemplateData.ContainsInvalidTemplateCharacters(NewName))\r\n                  return Properties.Resources.TemplateNameInvalidTooltip;\r\n               return Properties.Resources.TemplateNameTooltip;\r\n            case IFCTemplateData.DialogTypeEnum.PropertySet:\r\n               { \r\n                  if (UserDefinedPropertySetValidator.IsReserved(NewName))\r\n                     return Properties.Resources.ReservedPropertySetTooltip;\r\n                  else if (IFCTemplateData.ContainsInvalidTemplateCharacters(NewName))\r\n                     return Properties.Resources.PropertySetInvalidNameTooltip;\r\n                  return Properties.Resources.PropertySetNameTooltip;\r\n               }\r\n            default:\r\n               return string.Empty;\r\n         }\r\n      }\r\n\r\n      public string GetLabelContent()\r\n      {\r\n         switch (Data.DialogType)\r\n         {\r\n            case IFCTemplateData.DialogTypeEnum.Template:\r\n               return Properties.Resources.TemplateName;\r\n            case IFCTemplateData.DialogTypeEnum.PropertySet:\r\n               return Properties.Resources.PropertySetName;\r\n            default:\r\n               return string.Empty;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets up a KeyDown event handler on the textbox to ensure proper focus event order when pressing Enter.\r\n      /// This fixes an issue where the journal record would get swapped\r\n      /// if the button click event fired before the textbox lost keyboard focus.\r\n      /// </summary>\r\n      protected void SetupEnterKeyHandler(TextBox textBox, Button saveButton)\r\n      {\r\n         if (textBox == null || saveButton == null)\r\n            return;\r\n\r\n         textBox.KeyDown += (sender, e) =>\r\n         {\r\n            if (e.Key == Key.Enter)\r\n            {\r\n               saveButton.Focus();\r\n            }\r\n         };\r\n      }\r\n      \r\n      protected void SetupSaveClickHandler(Button saveButton, TextBox textBox)\r\n      {\r\n         if (textBox == null || saveButton == null)\r\n            return;\r\n            \r\n         saveButton.Click += (sender, e) =>\r\n         {\r\n            if (!Data.IsValidName(textBox.Text))\r\n            {\r\n               (textBox.Text, _) = validator.ExtendPropertySetNameIfNeeded(textBox.Text);\r\n               return;\r\n            }\r\n\r\n            Data.UpdateName(textBox.Text);\r\n            DialogResult = true;\r\n            Close();\r\n         };\r\n      }\r\n      \r\n      protected void SetupCancelClickHandler(Button cancelButton)\r\n      {\r\n         if (cancelButton == null)\r\n            return;\r\n            \r\n         cancelButton.Click += (sender, e) =>\r\n         {\r\n            DialogResult = false;\r\n            Close();\r\n         };\r\n      }\r\n  \r\n   }\r\n\r\n   /// <summary>\r\n   /// Common data storage for IFCCategoryTemplate classes.\r\n   /// </summary>\r\n   public partial class IFCTemplateData\r\n   {\r\n      public enum DialogTypeEnum\r\n      {\r\n         Template,\r\n         PropertySet\r\n      }\r\n\r\n      public DialogTypeEnum DialogType { get; set; } = DialogTypeEnum.Template;\r\n\r\n      private IList<string> ExistingNames { get; set; } = null;\r\n\r\n      private bool IsCategoryMapping { get; set; } = true;\r\n      /// <summary>\r\n      /// The new template name\r\n      /// </summary>\r\n      public string NewName { get; private set; } = null;\r\n\r\n      public IFCTemplateData(string newName, IList<string> existingNames, bool isCategoryMapping, DialogTypeEnum dialogType)\r\n      {\r\n         NewName = newName;\r\n         ExistingNames = existingNames;\r\n         IsCategoryMapping = isCategoryMapping;\r\n         DialogType = dialogType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check that a potential name is valid for a template.\r\n      /// </summary>\r\n      /// <param name=\"name\">The potential name.</param>\r\n      /// <returns>True if it is valid.</returns>\r\n      public bool IsValidName(string name)\r\n      {\r\n         switch (DialogType)\r\n         {\r\n            case DialogTypeEnum.Template:\r\n               {\r\n                  if (ContainsInvalidTemplateCharacters(name))\r\n                     return false;\r\n\r\n                  return (IsCategoryMapping) ? IFCCategoryMapping.IsValidName(name, ExistingNames) :\r\n                  IFCPropertyMapping.IsValidName(name, ExistingNames);\r\n               }\r\n            case DialogTypeEnum.PropertySet:\r\n               {\r\n                  return IFCUserDefinedPropertyMapping.IsValidPropertySetName(name, ExistingNames);\r\n               }\r\n            default:\r\n               return false;\r\n         }\r\n\r\n      }\r\n\r\n      private (string, int) RemoveDuplicateNumberIfItExists(string initName)\r\n      {\r\n         if (!initName.EndsWith(')'))\r\n         {\r\n            return (initName, 1);\r\n         }\r\n\r\n         int startParenloc = initName.LastIndexOf('(');\r\n         if (startParenloc == -1)\r\n         {\r\n            return (initName, 1);\r\n         }\r\n\r\n         int startOfPotentialInt = startParenloc + 1;\r\n         int endOfPotentialInt = initName.Length - 2;\r\n         int potentialIntLen = endOfPotentialInt - startOfPotentialInt + 1;\r\n         if (int.TryParse(initName.Substring(startOfPotentialInt, potentialIntLen), out int num))\r\n         {\r\n            return (initName.Substring(0, startOfPotentialInt - 1).TrimStart().TrimEnd(), num);\r\n         }\r\n\r\n         return (initName, 1);\r\n      }\r\n\r\n      public void UpdateName(string newName)\r\n      {\r\n         NewName = newName?.TrimStart()?.TrimEnd();\r\n      }\r\n\r\n      public string MakeUniqueName()\r\n      {\r\n         NewName = NewName?.TrimStart()?.TrimEnd();\r\n         if (DialogType == DialogTypeEnum.Template)\r\n            NewName = RemoveInvalidCharacters(NewName);\r\n         if (string.IsNullOrWhiteSpace(NewName))\r\n         {\r\n            NewName = GetNewNameFromResources();\r\n            if (DialogType == DialogTypeEnum.Template)\r\n               NewName = RemoveInvalidCharacters(NewName);\r\n         }\r\n\r\n         if (IsValidName(NewName))\r\n         {\r\n            return NewName;\r\n         }\r\n\r\n         int numPasses = ExistingNames.Count + 1;\r\n\r\n         (string baseName, int baseNum) = RemoveDuplicateNumberIfItExists(NewName);\r\n         if (DialogType == DialogTypeEnum.Template)\r\n            baseName = RemoveInvalidCharacters(baseName);\r\n         for (int ii = 1; ii <= numPasses; ii++)\r\n         {\r\n            NewName = baseName + \" (\" + (ii+baseNum).ToString() + \")\";\r\n            if (DialogType == DialogTypeEnum.Template)\r\n               NewName = RemoveInvalidCharacters(NewName);\r\n            if (IsValidName(NewName))\r\n            {\r\n               return NewName;\r\n            }\r\n         }\r\n\r\n         // We shouldn't ever get here. One of the names above is guaranteed to be unique.\r\n         NewName = null;\r\n         return null;\r\n      }\r\n      private string GetNewNameFromResources()\r\n      {\r\n         switch (DialogType)\r\n         {\r\n            case DialogTypeEnum.Template:\r\n               return Properties.Resources.NewTemplateDefaultName;\r\n            case DialogTypeEnum.PropertySet:\r\n               return Properties.Resources.IFCNewPropertySet;\r\n            default:\r\n               return string.Empty;\r\n         }\r\n      }\r\n   }\r\n\r\n   public partial class IFCTemplateData\r\n   {\r\n      const string InvalidTemplateCharacters = \"\\\\/:*?\\\"<>|\";\r\n\r\n      public static bool ContainsInvalidTemplateCharacters(string name)\r\n      {\r\n         if (string.IsNullOrEmpty(name))\r\n            return false;\r\n\r\n         foreach (char ch in name)\r\n         {\r\n            if (InvalidTemplateCharacters.IndexOf(ch) >= 0)\r\n               return true;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      public static string RemoveInvalidCharacters(string name)\r\n      {\r\n         if (string.IsNullOrEmpty(name))\r\n            return name;\r\n\r\n         if (!ContainsInvalidTemplateCharacters(name))\r\n            return name;\r\n\r\n         StringBuilder builder = new();\r\n         foreach (char ch in name)\r\n         {\r\n            if (InvalidTemplateCharacters.IndexOf(ch) < 0)\r\n               builder.Append(ch);\r\n         }\r\n\r\n         return builder.ToString();\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Converts ReservedPset validation result to bool\r\n   /// </summary>\r\n   public class ReservedPsetToLightErrorConverter : IValueConverter\r\n   {\r\n      public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\r\n      {\r\n         var str = value as string;\r\n         return string.IsNullOrEmpty(str) ? null : UserDefinedPropertySetValidator.IsReserved(str);\r\n      }\r\n\r\n      public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\r\n      {\r\n         return value;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCUIUtility.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.IO;\r\nusing System.IO.IsolatedStorage;\r\nusing System.Windows;\r\nusing System.Diagnostics;\r\nusing Autodesk.Revit.DB;\r\n\r\nnamespace BIM.IFC.Export.UI\r\n{\r\n   /// <summary>\r\n   /// The utilities of setting the UI.\r\n   /// </summary>\r\n   static public class IFCUISettings\r\n   {\r\n      /// <summary>\r\n      /// Get the assembly version of the UI.\r\n      /// </summary>\r\n      /// <returns>The version string.</returns>\r\n      static public string GetAssemblyVersion()\r\n      {\r\n         string assemblyFile = typeof(IFCCommandOverrideApplication).Assembly.Location;\r\n         string uiVersion = Properties.Resources.UnkownAltUIVer;\r\n         if (File.Exists(assemblyFile))\r\n         {\r\n            uiVersion = Properties.Resources.AltUIVer + \" \" + FileVersionInfo.GetVersionInfo(assemblyFile).FileVersion;\r\n         }\r\n         return uiVersion;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the assembly version of the UI.\r\n      /// </summary>\r\n      /// <returns>The version string.</returns>\r\n      static public string GetAssemblyVersionForUI()\r\n      {\r\n         string assemblyFile = typeof(IFCCommandOverrideApplication).Assembly.Location;\r\n         string uiVersion = Properties.Resources.Version;\r\n         if (File.Exists(assemblyFile))\r\n         {\r\n            uiVersion = Properties.Resources.Version + \" \" + FileVersionInfo.GetVersionInfo(assemblyFile).FileVersion;\r\n         }\r\n         return uiVersion;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the File Name from the Documents from a set of Documents\r\n      /// </summary>\r\n      /// <returns>The File Name</returns>\r\n      static public string GenerateFileNameFromDocument(Document doc, ISet<string> exportedFileNames)\r\n      {\r\n         // Note that exportedFileNames can be null.\r\n         string title = null;\r\n         try\r\n         {\r\n            title = doc.Title;\r\n            if (!String.IsNullOrEmpty(title))\r\n               title = Path.GetFileNameWithoutExtension(title);\r\n         }\r\n         catch\r\n         {\r\n            title = null;\r\n         }\r\n\r\n         if (exportedFileNames != null && exportedFileNames.Contains(title))\r\n            title += \"-\" + Guid.NewGuid().ToString();\r\n         if (String.IsNullOrEmpty(title))\r\n            title = Properties.Resources.DefaultFileName + \"-\" + Guid.NewGuid().ToString();\r\n\r\n         if (exportedFileNames != null)\r\n            exportedFileNames.Add(title);\r\n\r\n         return title;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/IFCExporterUIOverride/IFCVersionExtensions.cs",
    "content": "﻿//\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\n// Copyright (C) 2016  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing Autodesk.Revit.DB;\nusing BIM.IFC.Export.UI.Properties;\n\nnamespace BIM.IFC.Export.UI\n{\n   internal static class IFCVersionExtensions\n   {\n      /// <summary>\n      /// Converts the IFCVersion to string.\n      /// </summary>\n      /// <returns>The string of IFCVersion.</returns>\n      public static string ToLabel(this IFCVersion version)\n      {\n         switch (version)\n         {\n            case IFCVersion.IFC2x2:\n               return Resources.IFCVersion2x2;\n            case IFCVersion.IFC2x3:\n               return Resources.IFCVersion2x3;\n            case IFCVersion.IFCBCA:\n            case IFCVersion.IFC2x3CV2:\n               return Resources.IFCMVD2x3CV2;\n            case IFCVersion.IFC4:\n               return Resources.IFCMVD4CV2;\n            case IFCVersion.IFCCOBIE:\n               return Resources.IFCMVDGSA;\n            case IFCVersion.IFC2x3FM:\n               return Resources.IFC2x3FM;\n            case IFCVersion.IFC4DTV:\n               return Resources.IFC4DTV;\n            case IFCVersion.IFC4RV:\n               return Resources.IFC4RV;\n            case IFCVersion.IFC2x3BFM:\n               return Resources.IFCMVDFMHandOver;\n            default:\n               return Resources.IFCVersionUnrecognized;\n         }\n      }\n   }\n}\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/Properties/AssemblyInfo.cs",
    "content": "//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.Reflection;\r\nusing System.Runtime.InteropServices;\r\nusing System.Windows;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"Autodesk.IFC.Export.UI\")]\r\n[assembly: AssemblyDescription(\"IFC Exporter for Revit Project\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n\r\n// Company, Product and Copyright info can now be found in Foundation\\RevitENU\\Version.cs\r\n#if IFC_OPENSOURCE\r\n[assembly: AssemblyCompany(\"Autodesk, Inc.\")]\r\n[assembly: AssemblyProduct(\"Autodesk.IFC.Export.UI\")]\r\n[assembly: AssemblyCopyright(\" 2012-2026 Autodesk, Inc. All rights reserved.\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n#endif\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n//In order to begin building localizable applications, set \r\n//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file\r\n//inside a <PropertyGroup>.  For example, if you are using US english\r\n//in your source files, set the <UICulture> to en-US.  Then uncomment\r\n//the NeutralResourceLanguage attribute below.  Update the \"en-US\" in\r\n//the line below to match the UICulture setting in the project file.\r\n\r\n//[assembly: NeutralResourcesLanguage(\"en-US\", UltimateResourceFallbackLocation.Satellite)]\r\n\r\n\r\n[assembly: ThemeInfo(\r\n    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located\r\n    //(used if a resource is not found in the page, \r\n    // or application resource dictionaries)\r\n    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located\r\n    //(used if a resource is not found in the page, \r\n    // app, or any theme specific resource dictionaries)\r\n)]\r\n\r\n[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute(\"windows7.0\")]\r\n// Version information can now be found in Foundation\\RevitENU\\Version.cs\r\n#if IFC_OPENSOURCE\r\n// The following information is used in the Open Source version as the release version number.\r\n// The number will show up in the Title bar of the export dialog as well as at the IFC header file\r\n// This number must be manually updated prior to releasing the new version\r\n[assembly: AssemblyVersion(\"27.0.1.0\")]\r\n[assembly: AssemblyFileVersion(\"27.0.1.0\")]\r\n#endif"
  },
  {
    "path": "Source/IFCExporterUIOverride/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.42000\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace BIM.IFC.Export.UI.Properties {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    public class Resources {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Resources() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        public static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"BIM.IFC.Export.UI.Properties.Resources\", typeof(Resources).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        public static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Phase to export.\r\n        /// </summary>\r\n        public static string ActivePhase {\r\n            get {\r\n                return ResourceManager.GetString(\"ActivePhase\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Additional Content.\r\n        /// </summary>\r\n        public static string AdditionalContent {\r\n            get {\r\n                return ResourceManager.GetString(\"AdditionalContent\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Add property set.\r\n        /// </summary>\r\n        public static string AddPropertySet {\r\n            get {\r\n                return ResourceManager.GetString(\"AddPropertySet\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Project Address....\r\n        /// </summary>\r\n        public static string Address {\r\n            get {\r\n                return ResourceManager.GetString(\"Address\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Project Address.\r\n        /// </summary>\r\n        public static string AddressInformation {\r\n            get {\r\n                return ResourceManager.GetString(\"AddressInformation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Entering a value here will reset the Purpose field to &quot;USERDEFINED&quot;..\r\n        /// </summary>\r\n        public static string AddressInformationTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"AddressInformationTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Address line 1.\r\n        /// </summary>\r\n        public static string AddressLine1 {\r\n            get {\r\n                return ResourceManager.GetString(\"AddressLine1\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Address line 2.\r\n        /// </summary>\r\n        public static string AddressLine2 {\r\n            get {\r\n                return ResourceManager.GetString(\"AddressLine2\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Add Row.\r\n        /// </summary>\r\n        public static string AddRow {\r\n            get {\r\n                return ResourceManager.GetString(\"AddRow\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Advanced.\r\n        /// </summary>\r\n        public static string Advanced {\r\n            get {\r\n                return ResourceManager.GetString(\"Advanced\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Alternate UI.\r\n        /// </summary>\r\n        public static string AltUIVer {\r\n            get {\r\n                return ResourceManager.GetString(\"AltUIVer\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Angle from True North.\r\n        /// </summary>\r\n        public static string AngleTrueNorth {\r\n            get {\r\n                return ResourceManager.GetString(\"AngleTrueNorth\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Applicable Entities.\r\n        /// </summary>\r\n        public static string ApplicableEntities {\r\n            get {\r\n                return ResourceManager.GetString(\"ApplicableEntities\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Application name.\r\n        /// </summary>\r\n        public static string ApplicationName {\r\n            get {\r\n                return ResourceManager.GetString(\"ApplicationName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Apply.\r\n        /// </summary>\r\n        public static string Apply {\r\n            get {\r\n                return ResourceManager.GetString(\"Apply\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Assign address to building.\r\n        /// </summary>\r\n        public static string AssignAddressToBuilding {\r\n            get {\r\n                return ResourceManager.GetString(\"AssignAddressToBuilding\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Assign address to site.\r\n        /// </summary>\r\n        public static string AssignAddressToSite {\r\n            get {\r\n                return ResourceManager.GetString(\"AssignAddressToSite\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Assignments....\r\n        /// </summary>\r\n        public static string Assignments {\r\n            get {\r\n                return ResourceManager.GetString(\"Assignments\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Authorization.\r\n        /// </summary>\r\n        public static string Authorization {\r\n            get {\r\n                return ResourceManager.GetString(\"Authorization\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Author&apos;s email.\r\n        /// </summary>\r\n        public static string AuthorsEMail {\r\n            get {\r\n                return ResourceManager.GetString(\"AuthorsEMail\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Author&apos;s name.\r\n        /// </summary>\r\n        public static string AuthorsName {\r\n            get {\r\n                return ResourceManager.GetString(\"AuthorsName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Base Quantities.\r\n        /// </summary>\r\n        public static string BaseQuantities {\r\n            get {\r\n                return ResourceManager.GetString(\"BaseQuantities\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Arched (ARCHED).\r\n        /// </summary>\r\n        public static string BridgeArched {\r\n            get {\r\n                return ResourceManager.GetString(\"BridgeArched\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cable Stayed (CABLESTAYED).\r\n        /// </summary>\r\n        public static string BridgeCableStayed {\r\n            get {\r\n                return ResourceManager.GetString(\"BridgeCableStayed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cantilever (CANTILEVER).\r\n        /// </summary>\r\n        public static string BridgeCantilever {\r\n            get {\r\n                return ResourceManager.GetString(\"BridgeCantilever\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Culvert (CULVERT).\r\n        /// </summary>\r\n        public static string BridgeCulvert {\r\n            get {\r\n                return ResourceManager.GetString(\"BridgeCulvert\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Framework (FRAMEWORK).\r\n        /// </summary>\r\n        public static string BridgeFramework {\r\n            get {\r\n                return ResourceManager.GetString(\"BridgeFramework\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Girder (GIRDER).\r\n        /// </summary>\r\n        public static string BridgeGirder {\r\n            get {\r\n                return ResourceManager.GetString(\"BridgeGirder\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Suspension (SUSPENSION).\r\n        /// </summary>\r\n        public static string BridgeSuspension {\r\n            get {\r\n                return ResourceManager.GetString(\"BridgeSuspension\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Truss (TRUSS).\r\n        /// </summary>\r\n        public static string BridgeTruss {\r\n            get {\r\n                return ResourceManager.GetString(\"BridgeTruss\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Browse ....\r\n        /// </summary>\r\n        public static string Browse {\r\n            get {\r\n                return ResourceManager.GetString(\"Browse\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Building description.\r\n        /// </summary>\r\n        public static string BuildingDescription {\r\n            get {\r\n                return ResourceManager.GetString(\"BuildingDescription\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Building name/number.\r\n        /// </summary>\r\n        public static string BuildingName {\r\n            get {\r\n                return ResourceManager.GetString(\"BuildingName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Building type.\r\n        /// </summary>\r\n        public static string BuildingType {\r\n            get {\r\n                return ResourceManager.GetString(\"BuildingType\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &lt;By Category&gt;.\r\n        /// </summary>\r\n        public static string ByCategory {\r\n            get {\r\n                return ResourceManager.GetString(\"ByCategory\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to By Category.\r\n        /// </summary>\r\n        public static string ByCategoryNoBrackets {\r\n            get {\r\n                return ResourceManager.GetString(\"ByCategoryNoBrackets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cancel.\r\n        /// </summary>\r\n        public static string Cancel {\r\n            get {\r\n                return ResourceManager.GetString(\"Cancel\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Category.\r\n        /// </summary>\r\n        public static string Category {\r\n            get {\r\n                return ResourceManager.GetString(\"Category\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Category Mapping.\r\n        /// </summary>\r\n        public static string CategoryMapping {\r\n            get {\r\n                return ResourceManager.GetString(\"CategoryMapping\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to How do I modify IFC export mapping settings?.\r\n        /// </summary>\r\n        public static string CategoryMappingHelp {\r\n            get {\r\n                return ResourceManager.GetString(\"CategoryMappingHelp\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to City.\r\n        /// </summary>\r\n        public static string City {\r\n            get {\r\n                return ResourceManager.GetString(\"City\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Classification Settings....\r\n        /// </summary>\r\n        public static string Classification {\r\n            get {\r\n                return ResourceManager.GetString(\"Classification\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Location of the documentation (usually URL).\r\n        /// </summary>\r\n        public static string ClassificationAltLocation {\r\n            get {\r\n                return ResourceManager.GetString(\"ClassificationAltLocation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The optional alternate shared parameter name for this classification (default: ClassificationCode).\r\n        /// </summary>\r\n        public static string ClassificationAltName {\r\n            get {\r\n                return ResourceManager.GetString(\"ClassificationAltName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Classification field name.\r\n        /// </summary>\r\n        public static string ClassificationFieldName {\r\n            get {\r\n                return ResourceManager.GetString(\"ClassificationFieldName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Classification Settings.\r\n        /// </summary>\r\n        public static string ClassificationSetting {\r\n            get {\r\n                return ResourceManager.GetString(\"ClassificationSetting\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Edition number of the Classification system.\r\n        /// </summary>\r\n        public static string ClassificationSystemEdition {\r\n            get {\r\n                return ResourceManager.GetString(\"ClassificationSystemEdition\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Name of the Classification System.\r\n        /// </summary>\r\n        public static string ClassificationSystemName {\r\n            get {\r\n                return ResourceManager.GetString(\"ClassificationSystemName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Source or publisher of the Classification System.\r\n        /// </summary>\r\n        public static string ClassificationSystemSource {\r\n            get {\r\n                return ResourceManager.GetString(\"ClassificationSystemSource\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Create a new setup based on the selected setup..\r\n        /// </summary>\r\n        public static string CloneSetup {\r\n            get {\r\n                return ResourceManager.GetString(\"CloneSetup\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Collapse All.\r\n        /// </summary>\r\n        public static string CollapseAll {\r\n            get {\r\n                return ResourceManager.GetString(\"CollapseAll\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Company email.\r\n        /// </summary>\r\n        public static string CompanyEmail {\r\n            get {\r\n                return ResourceManager.GetString(\"CompanyEmail\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Company Info.\r\n        /// </summary>\r\n        public static string CompanyInfo {\r\n            get {\r\n                return ResourceManager.GetString(\"CompanyInfo\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Company name.\r\n        /// </summary>\r\n        public static string CompanyName {\r\n            get {\r\n                return ResourceManager.GetString(\"CompanyName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Company phone.\r\n        /// </summary>\r\n        public static string CompanyPhone {\r\n            get {\r\n                return ResourceManager.GetString(\"CompanyPhone\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Company type.\r\n        /// </summary>\r\n        public static string CompanyType {\r\n            get {\r\n                return ResourceManager.GetString(\"CompanyType\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Configuration.\r\n        /// </summary>\r\n        public static string ConfigurationFilePrefix {\r\n            get {\r\n                return ResourceManager.GetString(\"ConfigurationFilePrefix\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Duplicate property set.\r\n        /// </summary>\r\n        public static string CopyPropertySetTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"CopyPropertySetTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Duplicate template.\r\n        /// </summary>\r\n        public static string CopyTemplateTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"CopyTemplateTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Country.\r\n        /// </summary>\r\n        public static string Country {\r\n            get {\r\n                return ResourceManager.GetString(\"Country\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Create new property set.\r\n        /// </summary>\r\n        public static string CreateNewPropertySetTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"CreateNewPropertySetTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Create a new setup..\r\n        /// </summary>\r\n        public static string CreateNewSetup {\r\n            get {\r\n                return ResourceManager.GetString(\"CreateNewSetup\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Create new template.\r\n        /// </summary>\r\n        public static string CreateNewTemplateTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"CreateNewTemplateTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Current options:.\r\n        /// </summary>\r\n        public static string CurrentOptions {\r\n            get {\r\n                return ResourceManager.GetString(\"CurrentOptions\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export setup:.\r\n        /// </summary>\r\n        public static string CurrentSelectedSetup {\r\n            get {\r\n                return ResourceManager.GetString(\"CurrentSelectedSetup\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Data Type.\r\n        /// </summary>\r\n        public static string DataType {\r\n            get {\r\n                return ResourceManager.GetString(\"DataType\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Default ({0}).\r\n        /// </summary>\r\n        public static string Default {\r\n            get {\r\n                return ResourceManager.GetString(\"Default\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Select.\r\n        /// </summary>\r\n        public static string DefaultCategoryFilterTxt {\r\n            get {\r\n                return ResourceManager.GetString(\"DefaultCategoryFilterTxt\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Project.\r\n        /// </summary>\r\n        public static string DefaultFileName {\r\n            get {\r\n                return ResourceManager.GetString(\"DefaultFileName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &lt;default&gt;.\r\n        /// </summary>\r\n        public static string DefaultMapping {\r\n            get {\r\n                return ResourceManager.GetString(\"DefaultMapping\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Default phase to export.\r\n        /// </summary>\r\n        public static string DefaultPhase {\r\n            get {\r\n                return ResourceManager.GetString(\"DefaultPhase\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Defined Data Type.\r\n        /// </summary>\r\n        public static string DefinedDataType {\r\n            get {\r\n                return ResourceManager.GetString(\"DefinedDataType\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Delete old configuration.\r\n        /// </summary>\r\n        public static string DeleteOldConfiguration {\r\n            get {\r\n                return ResourceManager.GetString(\"DeleteOldConfiguration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Delete old IFC export setups.\r\n        /// </summary>\r\n        public static string DeleteOldSetups {\r\n            get {\r\n                return ResourceManager.GetString(\"DeleteOldSetups\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Delete property set.\r\n        /// </summary>\r\n        public static string DeletePropertySetTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"DeletePropertySetTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Delete the selected setup..\r\n        /// </summary>\r\n        public static string DeleteSelectedSetup {\r\n            get {\r\n                return ResourceManager.GetString(\"DeleteSelectedSetup\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Delete template.\r\n        /// </summary>\r\n        public static string DeleteTemplateTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"DeleteTemplateTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Deprecated.\r\n        /// </summary>\r\n        public static string DeprecatedMark {\r\n            get {\r\n                return ResourceManager.GetString(\"DeprecatedMark\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Description.\r\n        /// </summary>\r\n        public static string Description {\r\n            get {\r\n                return ResourceManager.GetString(\"Description\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Extra Low.\r\n        /// </summary>\r\n        public static string DetailLevelExtraLow {\r\n            get {\r\n                return ResourceManager.GetString(\"DetailLevelExtraLow\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to High.\r\n        /// </summary>\r\n        public static string DetailLevelHigh {\r\n            get {\r\n                return ResourceManager.GetString(\"DetailLevelHigh\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Low.\r\n        /// </summary>\r\n        public static string DetailLevelLow {\r\n            get {\r\n                return ResourceManager.GetString(\"DetailLevelLow\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Medium.\r\n        /// </summary>\r\n        public static string DetailLevelMedium {\r\n            get {\r\n                return ResourceManager.GetString(\"DetailLevelMedium\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Distribution Point.\r\n        /// </summary>\r\n        public static string DistributionPoint {\r\n            get {\r\n                return ResourceManager.GetString(\"DistributionPoint\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Document Not Saved.\r\n        /// </summary>\r\n        public static string DocNotSaved {\r\n            get {\r\n                return ResourceManager.GetString(\"DocNotSaved\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Documentation location.\r\n        /// </summary>\r\n        public static string DocumentationLocation {\r\n            get {\r\n                return ResourceManager.GetString(\"DocumentationLocation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Eastings.\r\n        /// </summary>\r\n        public static string Eastings {\r\n            get {\r\n                return ResourceManager.GetString(\"Eastings\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Edit.\r\n        /// </summary>\r\n        public static string Edit {\r\n            get {\r\n                return ResourceManager.GetString(\"Edit\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Edition.\r\n        /// </summary>\r\n        public static string Edition {\r\n            get {\r\n                return ResourceManager.GetString(\"Edition\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Edition date.\r\n        /// </summary>\r\n        public static string EditionDate {\r\n            get {\r\n                return ResourceManager.GetString(\"EditionDate\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Elevation.\r\n        /// </summary>\r\n        public static string Elevation {\r\n            get {\r\n                return ResourceManager.GetString(\"Elevation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ....\r\n        /// </summary>\r\n        public static string Ellipses {\r\n            get {\r\n                return ResourceManager.GetString(\"Ellipses\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to There are no materials in this project..\r\n        /// </summary>\r\n        public static string EmptyStateMaterialInfo {\r\n            get {\r\n                return ResourceManager.GetString(\"EmptyStateMaterialInfo\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Add one or more materials to use this option..\r\n        /// </summary>\r\n        public static string EmptyStateMaterialPsets {\r\n            get {\r\n                return ResourceManager.GetString(\"EmptyStateMaterialPsets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Select a property set from one of the setups to choose mapping settings..\r\n        /// </summary>\r\n        public static string EmptyStatePropertySet {\r\n            get {\r\n                return ResourceManager.GetString(\"EmptyStatePropertySet\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to There are no schedules in this project..\r\n        /// </summary>\r\n        public static string EmptyStateScheduleInfo {\r\n            get {\r\n                return ResourceManager.GetString(\"EmptyStateScheduleInfo\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Add one or more schedules to use this option..\r\n        /// </summary>\r\n        public static string EmptyStateSchedulePsets {\r\n            get {\r\n                return ResourceManager.GetString(\"EmptyStateSchedulePsets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to EPSG Code.\r\n        /// </summary>\r\n        public static string EPSGCode {\r\n            get {\r\n                return ResourceManager.GetString(\"EPSGCode\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Architectural Reference Exchange.\r\n        /// </summary>\r\n        public static string ER_Architecture {\r\n            get {\r\n                return ResourceManager.GetString(\"ER_Architecture\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Architecture.\r\n        /// </summary>\r\n        public static string ER_ArchitectureShort {\r\n            get {\r\n                return ResourceManager.GetString(\"ER_ArchitectureShort\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to MEP Reference Exchange.\r\n        /// </summary>\r\n        public static string ER_BuildingService {\r\n            get {\r\n                return ResourceManager.GetString(\"ER_BuildingService\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to BuildingService.\r\n        /// </summary>\r\n        public static string ER_BuildingServiceShort {\r\n            get {\r\n                return ResourceManager.GetString(\"ER_BuildingServiceShort\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Structural Reference Exchange.\r\n        /// </summary>\r\n        public static string ER_Structural {\r\n            get {\r\n                return ResourceManager.GetString(\"ER_Structural\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Structural.\r\n        /// </summary>\r\n        public static string ER_StructuralShort {\r\n            get {\r\n                return ResourceManager.GetString(\"ER_StructuralShort\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Error.\r\n        /// </summary>\r\n        public static string Error {\r\n            get {\r\n                return ResourceManager.GetString(\"Error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Exchange Requirement.\r\n        /// </summary>\r\n        public static string ExchangeRequirement {\r\n            get {\r\n                return ResourceManager.GetString(\"ExchangeRequirement\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Entities to Export ....\r\n        /// </summary>\r\n        public static string ExcludeEntitySelection {\r\n            get {\r\n                return ResourceManager.GetString(\"ExcludeEntitySelection\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Expand All.\r\n        /// </summary>\r\n        public static string ExpandAll {\r\n            get {\r\n                return ResourceManager.GetString(\"ExpandAll\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export.\r\n        /// </summary>\r\n        public static string Export {\r\n            get {\r\n                return ResourceManager.GetString(\"Export\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export bars in uniform rebar sets as separate IFC entities.\r\n        /// </summary>\r\n        public static string ExportBarsInUniformRebarSetsAsSeparateIFCEntities {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportBarsInUniformRebarSetsAsSeparateIFCEntities\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use this option to export bars in uniform rebar sets as separate IFC entities..\r\n        /// </summary>\r\n        public static string ExportBarsInUniformRebarSetsAsSeparateIFCEntitiesToopTip {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportBarsInUniformRebarSetsAsSeparateIFCEntitiesToopTip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export base quantities.\r\n        /// </summary>\r\n        public static string ExportBaseQuantities {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportBaseQuantities\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export bounding box.\r\n        /// </summary>\r\n        public static string ExportBoundingBox {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportBoundingBox\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export IFC Category Mapping.\r\n        /// </summary>\r\n        public static string ExportCategoryMappingDialogName {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportCategoryMappingDialogName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Category Mapping Files (*.txt)|*.txt.\r\n        /// </summary>\r\n        public static string ExportCategoryMappingFilter {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportCategoryMappingFilter\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export Ceiling Grids.\r\n        /// </summary>\r\n        public static string ExportCeilingGrids {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportCeilingGrids\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export only elements visible in current view.\r\n        /// </summary>\r\n        public static string ExportElementsVisibleInView {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportElementsVisibleInView\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to If this option is checked, don&apos;t create a container for floors and roofs unless exporting parts..\r\n        /// </summary>\r\n        public static string ExportHostAsSingleEntityTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportHostAsSingleEntityTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Always export faceted floors and roofs as a single IFC entity.\r\n        /// </summary>\r\n        public static string ExportHostsAsSingleEntity {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportHostsAsSingleEntity\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export IFC.\r\n        /// </summary>\r\n        public static string ExportIFC {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportIFC\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export IFC common property sets.\r\n        /// </summary>\r\n        public static string ExportIFCCommonPropertySets {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportIFCCommonPropertySets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export IFC Property Mapping Setup.\r\n        /// </summary>\r\n        public static string ExportIFCPropertyMappingDialogName {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportIFCPropertyMappingDialogName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export IFC User - defined Property Sets.\r\n        /// </summary>\r\n        public static string ExportIFCUserDefinedMappingDialogName {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportIFCUserDefinedMappingDialogName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export internal Revit property sets.\r\n        /// </summary>\r\n        public static string ExportInternalRevitPropertySets {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportInternalRevitPropertySets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export linked files as separate IFCs.\r\n        /// </summary>\r\n        public static string ExportLinkedFiles {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportLinkedFiles\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export Mapping Templates.\r\n        /// </summary>\r\n        public static string ExportMappingTemplates {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportMappingTemplates\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export material property sets.\r\n        /// </summary>\r\n        public static string ExportMaterialPropertySets {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportMaterialPropertySets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export parts as building elements.\r\n        /// </summary>\r\n        public static string ExportPartsAsBuildingElements {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportPartsAsBuildingElements\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export 2D plan view elements.\r\n        /// </summary>\r\n        public static string ExportPlanViewElements {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportPlanViewElements\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export IFC Property Mapping.\r\n        /// </summary>\r\n        public static string ExportPropertyMappingDialogName {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportPropertyMappingDialogName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Property Mapping Files (*.txt)|*.txt.\r\n        /// </summary>\r\n        public static string ExportPropertyMappingFilter {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportPropertyMappingFilter\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export property sets.\r\n        /// </summary>\r\n        public static string ExportPropertySetsTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportPropertySetsTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export Revit property sets.\r\n        /// </summary>\r\n        public static string ExportRevitPropertySets {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportRevitPropertySets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export rooms, areas and spaces in 3D views.\r\n        /// </summary>\r\n        public static string ExportRoomsInView {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportRoomsInView\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export schedules as property sets.\r\n        /// </summary>\r\n        public static string ExportSchedulesAsPropertySets {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportSchedulesAsPropertySets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export schedules as property sets.\r\n        /// </summary>\r\n        public static string ExportSchedulesAsPsets {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportSchedulesAsPsets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Save selected setup ....\r\n        /// </summary>\r\n        public static string ExportSelectedSetup {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportSelectedSetup\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Allow use of mixed &quot;Solid Model&quot; representation.\r\n        /// </summary>\r\n        public static string ExportSolidModelsWhenPossible {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportSolidModelsWhenPossible\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export only schedules containing IFC, Pset, or Common in the title.\r\n        /// </summary>\r\n        public static string ExportSpecificSchedules {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportSpecificSchedules\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export template.\r\n        /// </summary>\r\n        public static string ExportTemplateTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportTemplateTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export parameter mapping table.\r\n        /// </summary>\r\n        public static string ExportUserDefinedParameterMappingTable {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportUserDefinedParameterMappingTable\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export user defined property sets.\r\n        /// </summary>\r\n        public static string ExportUserDefinedPropertySets {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportUserDefinedPropertySets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to User-defined property set file name.\r\n        /// </summary>\r\n        public static string ExportUserDefinedPsetsFileName {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportUserDefinedPsetsFileName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export only elements visible in view.\r\n        /// </summary>\r\n        public static string ExportVisibleElementsInView {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportVisibleElementsInView\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Bridge (IfcBridge).\r\n        /// </summary>\r\n        public static string FacilityBridge {\r\n            get {\r\n                return ResourceManager.GetString(\"FacilityBridge\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Building (IfcBuilding).\r\n        /// </summary>\r\n        public static string FacilityBuilding {\r\n            get {\r\n                return ResourceManager.GetString(\"FacilityBuilding\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Marine Facility (IfcMarineFacility).\r\n        /// </summary>\r\n        public static string FacilityMarineFacility {\r\n            get {\r\n                return ResourceManager.GetString(\"FacilityMarineFacility\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Facility Predefined Type.\r\n        /// </summary>\r\n        public static string FacilityPredefinedType {\r\n            get {\r\n                return ResourceManager.GetString(\"FacilityPredefinedType\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Railway (IfcRailway).\r\n        /// </summary>\r\n        public static string FacilityRailway {\r\n            get {\r\n                return ResourceManager.GetString(\"FacilityRailway\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Road (IfcRoad).\r\n        /// </summary>\r\n        public static string FacilityRoad {\r\n            get {\r\n                return ResourceManager.GetString(\"FacilityRoad\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Facility Type.\r\n        /// </summary>\r\n        public static string FacilityType {\r\n            get {\r\n                return ResourceManager.GetString(\"FacilityType\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to File description.\r\n        /// </summary>\r\n        public static string FileDescription {\r\n            get {\r\n                return ResourceManager.GetString(\"FileDescription\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0} already exists. Do you want to replace it?.\r\n        /// </summary>\r\n        public static string FileExists {\r\n            get {\r\n                return ResourceManager.GetString(\"FileExists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to File Header.\r\n        /// </summary>\r\n        public static string FileHeader {\r\n            get {\r\n                return ResourceManager.GetString(\"FileHeader\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to File Header Information....\r\n        /// </summary>\r\n        public static string FileHeaderInformation {\r\n            get {\r\n                return ResourceManager.GetString(\"FileHeaderInformation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to File name:.\r\n        /// </summary>\r\n        public static string FileName {\r\n            get {\r\n                return ResourceManager.GetString(\"FileName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to File schema.\r\n        /// </summary>\r\n        public static string FileSchema {\r\n            get {\r\n                return ResourceManager.GetString(\"FileSchema\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to File type.\r\n        /// </summary>\r\n        public static string FileType {\r\n            get {\r\n                return ResourceManager.GetString(\"FileType\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to File version.\r\n        /// </summary>\r\n        public static string FileVersion {\r\n            get {\r\n                return ResourceManager.GetString(\"FileVersion\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Filter.\r\n        /// </summary>\r\n        public static string Filter {\r\n            get {\r\n                return ResourceManager.GetString(\"Filter\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to All properties.\r\n        /// </summary>\r\n        public static string FilterAllProperties {\r\n            get {\r\n                return ResourceManager.GetString(\"FilterAllProperties\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Built-in properties.\r\n        /// </summary>\r\n        public static string FilterBuiltinProperties {\r\n            get {\r\n                return ResourceManager.GetString(\"FilterBuiltinProperties\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Filter by category.\r\n        /// </summary>\r\n        public static string FilterByCategory {\r\n            get {\r\n                return ResourceManager.GetString(\"FilterByCategory\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Instance properties.\r\n        /// </summary>\r\n        public static string FilterInstanceProperties {\r\n            get {\r\n                return ResourceManager.GetString(\"FilterInstanceProperties\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Type properties.\r\n        /// </summary>\r\n        public static string FilterTypeProperties {\r\n            get {\r\n                return ResourceManager.GetString(\"FilterTypeProperties\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to General.\r\n        /// </summary>\r\n        public static string General {\r\n            get {\r\n                return ResourceManager.GetString(\"General\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Geodetic Datum.\r\n        /// </summary>\r\n        public static string GeodeticDatum {\r\n            get {\r\n                return ResourceManager.GetString(\"GeodeticDatum\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Geographic Reference.\r\n        /// </summary>\r\n        public static string GeoReference {\r\n            get {\r\n                return ResourceManager.GetString(\"GeoReference\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to How do I specify an export setup?.\r\n        /// </summary>\r\n        public static string Help {\r\n            get {\r\n                return ResourceManager.GetString(\"Help\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to How do I assign IFC Entity and Predefined Type?.\r\n        /// </summary>\r\n        public static string HelpAssignIfcEntity {\r\n            get {\r\n                return ResourceManager.GetString(\"HelpAssignIfcEntity\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to How do IFC Entity selections affect export?.\r\n        /// </summary>\r\n        public static string HelpSelectEntityForExport {\r\n            get {\r\n                return ResourceManager.GetString(\"HelpSelectEntityForExport\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Home.\r\n        /// </summary>\r\n        public static string Home {\r\n            get {\r\n                return ResourceManager.GetString(\"Home\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Identity.\r\n        /// </summary>\r\n        public static string IdentityMaterialParams {\r\n            get {\r\n                return ResourceManager.GetString(\"IdentityMaterialParams\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC.\r\n        /// </summary>\r\n        public static string IFC {\r\n            get {\r\n                return ResourceManager.GetString(\"IFC\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC2x3 COBie 2.4 Design Deliverable View.\r\n        /// </summary>\r\n        public static string IFC2x3FM {\r\n            get {\r\n                return ResourceManager.GetString(\"IFC2x3FM\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC4 for General Use.\r\n        /// </summary>\r\n        public static string IFC4 {\r\n            get {\r\n                return ResourceManager.GetString(\"IFC4\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC4 Design Transfer View [Unofficial].\r\n        /// </summary>\r\n        public static string IFC4DTV {\r\n            get {\r\n                return ResourceManager.GetString(\"IFC4DTV\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The selected export setup is not supported by buildingSMART International. Files created using this setup may not be usable by other software..\r\n        /// </summary>\r\n        public static string IFC4DTVWarning {\r\n            get {\r\n                return ResourceManager.GetString(\"IFC4DTVWarning\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC4 Reference View.\r\n        /// </summary>\r\n        public static string IFC4RV {\r\n            get {\r\n                return ResourceManager.GetString(\"IFC4RV\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC4.3 Design Transfer View [Unofficial].\r\n        /// </summary>\r\n        public static string IFC4x3DTV {\r\n            get {\r\n                return ResourceManager.GetString(\"IFC4x3DTV\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC4.3 Reference View.\r\n        /// </summary>\r\n        public static string IFC4x3RV {\r\n            get {\r\n                return ResourceManager.GetString(\"IFC4x3RV\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Assignments.\r\n        /// </summary>\r\n        public static string IFCAssignments {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCAssignments\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Attributes.\r\n        /// </summary>\r\n        public static string IFCAttributes {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCAttributes\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Class.\r\n        /// </summary>\r\n        public static string IFCClass {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCClass\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Common Property Sets.\r\n        /// </summary>\r\n        public static string IFCCommonPropertySets {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCCommonPropertySets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Copy Property Template.\r\n        /// </summary>\r\n        public static string IFCCopyPropertyTemplate {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCCopyPropertyTemplate\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Copy.\r\n        /// </summary>\r\n        public static string IFCCopyTemplate {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCCopyTemplate\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Create duplicate.\r\n        /// </summary>\r\n        public static string IFCCreateDuplicate {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCCreateDuplicate\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Create New Property Set.\r\n        /// </summary>\r\n        public static string IFCCreateNewPropertySet {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCCreateNewPropertySet\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Create New Template.\r\n        /// </summary>\r\n        public static string IFCCreateNewTemplate {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCCreateNewTemplate\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &lt;Default&gt;.\r\n        /// </summary>\r\n        public static string IFCDefaultSetup {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCDefaultSetup\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Delete.\r\n        /// </summary>\r\n        public static string IFCDeleteTemplate {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCDeleteTemplate\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Delete {0} ?.\r\n        /// </summary>\r\n        public static string IFCDeleteTemplateMessage {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCDeleteTemplateMessage\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Entity Selection.\r\n        /// </summary>\r\n        public static string IFCEntitySelection {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCEntitySelection\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC export.\r\n        /// </summary>\r\n        public static string IFCExport {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCExport\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Export Warning.\r\n        /// </summary>\r\n        public static string IFCExportGenericWarning {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCExportGenericWarning\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The IFC export process encountered an error for: {0}..\r\n        /// </summary>\r\n        public static string IFCExportProcessError {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCExportProcessError\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The IFC export process encountered an error..\r\n        /// </summary>\r\n        public static string IFCExportProcessGenericError {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCExportProcessGenericError\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to write to {0} because it is read-only or owned by someone else..\r\n        /// </summary>\r\n        public static string IFCExportProcessNoWriteAccess {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCExportProcessNoWriteAccess\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot add new Property {0} to Reserved Property Set {1}..\r\n        /// </summary>\r\n        public static string IFCExportWarningCannotAddPropertyToReservedPropertySet {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCExportWarningCannotAddPropertyToReservedPropertySet\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to User-defined Property Set {0} contains reserved string {1}.  Extending property set name to {2}..\r\n        /// </summary>\r\n        public static string IFCExportWarningCannotAddUserDefinedPropertySet {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCExportWarningCannotAddUserDefinedPropertySet\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot modify Property {0} in Reserved Property Set {1}..\r\n        /// </summary>\r\n        public static string IFCExportWarningCannotModifyPropertySetProperty {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCExportWarningCannotModifyPropertySetProperty\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ifc.\r\n        /// </summary>\r\n        public static string IFCExt {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCExt\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC-SPF|*.ifc.\r\n        /// </summary>\r\n        public static string IFCFiles {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCFiles\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to This is not a valid category mapping file..\r\n        /// </summary>\r\n        public static string IFCInvalidCategoryMappingFile {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCInvalidCategoryMappingFile\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Attempting to load an invalid template..\r\n        /// </summary>\r\n        public static string IFCInvalidPropertyMappingFile {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCInvalidPropertyMappingFile\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to This is not a valid property mapping file..\r\n        /// </summary>\r\n        public static string IFCInvalidUserDefinedMappingFile {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCInvalidUserDefinedMappingFile\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Manage User-defined Property Sets.\r\n        /// </summary>\r\n        public static string IFCManageUserDefinedPropertySeets {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCManageUserDefinedPropertySeets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC 2x3 Coordination View 2.0.\r\n        /// </summary>\r\n        public static string IFCMVD2x3CV2 {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCMVD2x3CV2\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC 4 Coordination View 2.0.\r\n        /// </summary>\r\n        public static string IFCMVD4CV2 {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCMVD4CV2\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC2x3 COBie 2.4 Design Deliverable View.\r\n        /// </summary>\r\n        public static string IFCMVDFMExtendedHandOver {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCMVDFMExtendedHandOver\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC 2x3 Basic FM Handover View.\r\n        /// </summary>\r\n        public static string IFCMVDFMHandOver {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCMVDFMHandOver\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC 2x3 GSA Concept Design BIM 2010.\r\n        /// </summary>\r\n        public static string IFCMVDGSA {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCMVDGSA\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to New Property Set.\r\n        /// </summary>\r\n        public static string IFCNewPropertySet {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCNewPropertySet\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to New Settings Template.\r\n        /// </summary>\r\n        public static string IFCNewTemplate {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCNewTemplate\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Notification.\r\n        /// </summary>\r\n        public static string IFCNotificationMessageBox {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCNotificationMessageBox\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Property.\r\n        /// </summary>\r\n        public static string IFCProperty {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCProperty\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Property Mapping Setups (*.txt)|*.txt.\r\n        /// </summary>\r\n        public static string IFCPropertyMappingSetupsFilter {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCPropertyMappingSetupsFilter\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Rename.\r\n        /// </summary>\r\n        public static string IFCRenameTemplate {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCRenameTemplate\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Schema.\r\n        /// </summary>\r\n        public static string IFCSchema {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCSchema\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Schema version.\r\n        /// </summary>\r\n        public static string IFCSchemaVersion {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCSchemaVersion\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Select Entities.\r\n        /// </summary>\r\n        public static string IFCSelectEntities {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCSelectEntities\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC+SG Regulatory Requirements View.\r\n        /// </summary>\r\n        public static string IFCSG {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCSG\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unrecognized file type option.\r\n        /// </summary>\r\n        public static string IFCUnknown {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCUnknown\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC User-defined property sets files (*.txt)|*.txt.\r\n        /// </summary>\r\n        public static string IFCUserDefinedPropertySetsFilter {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCUserDefinedPropertySetsFilter\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC version.\r\n        /// </summary>\r\n        public static string IFCVersion {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCVersion\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC 2x2 Coordination View.\r\n        /// </summary>\r\n        public static string IFCVersion2x2 {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCVersion2x2\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC 2x3 Coordination View.\r\n        /// </summary>\r\n        public static string IFCVersion2x3 {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCVersion2x3\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC4x3.\r\n        /// </summary>\r\n        public static string IFCVersion4x3 {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCVersion4x3\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Version: .\r\n        /// </summary>\r\n        public static string IFCVersionSelected {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCVersionSelected\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unrecognized IFC version.\r\n        /// </summary>\r\n        public static string IFCVersionUnrecognized {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCVersionUnrecognized\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC XML.\r\n        /// </summary>\r\n        public static string IFCXML {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCXML\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ifcxml.\r\n        /// </summary>\r\n        public static string IFCXMLExt {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCXMLExt\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Industry Foundation Classes XML(.ifcxml)|*.ifcxml.\r\n        /// </summary>\r\n        public static string IFCXMLFiles {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCXMLFiles\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Zipped IFC XML.\r\n        /// </summary>\r\n        public static string IFCXMLZIP {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCXMLZIP\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ifczip.\r\n        /// </summary>\r\n        public static string IFCXMLZIPExt {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCXMLZIPExt\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Zipped Industry Foundation Classes XML(.ifczip)|*.ifczip.\r\n        /// </summary>\r\n        public static string IFCXMLZIPFiles {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCXMLZIPFiles\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Zipped IFC.\r\n        /// </summary>\r\n        public static string IFCZIP {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCZIP\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ifczip.\r\n        /// </summary>\r\n        public static string IFCZIPExt {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCZIPExt\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Zipped Industry Foundation Classes(.ifczip)|*.ifczip.\r\n        /// </summary>\r\n        public static string IFCZIPFiles {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCZIPFiles\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Import IFC Category Mapping.\r\n        /// </summary>\r\n        public static string ImportCategoryMappingDialogName {\r\n            get {\r\n                return ResourceManager.GetString(\"ImportCategoryMappingDialogName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Import IFC Property Mapping Setup.\r\n        /// </summary>\r\n        public static string ImportIFCPropertyMappingDialogName {\r\n            get {\r\n                return ResourceManager.GetString(\"ImportIFCPropertyMappingDialogName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Import IFC User-defined Property Sets.\r\n        /// </summary>\r\n        public static string ImportIFCUserDefinedMappingDialogName {\r\n            get {\r\n                return ResourceManager.GetString(\"ImportIFCUserDefinedMappingDialogName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Import IFC Property Mapping.\r\n        /// </summary>\r\n        public static string ImportPropertyMappingDialogName {\r\n            get {\r\n                return ResourceManager.GetString(\"ImportPropertyMappingDialogName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Import property sets.\r\n        /// </summary>\r\n        public static string ImportPropertySetsTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"ImportPropertySetsTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Import template.\r\n        /// </summary>\r\n        public static string ImportTemplateTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"ImportTemplateTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Include IFCSite elevation in the site local placement origin.\r\n        /// </summary>\r\n        public static string IncludeIfcSiteElevation {\r\n            get {\r\n                return ResourceManager.GetString(\"IncludeIfcSiteElevation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Include space boundaries.\r\n        /// </summary>\r\n        public static string IncludeSpaceBoundaries {\r\n            get {\r\n                return ResourceManager.GetString(\"IncludeSpaceBoundaries\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Include Steel Elements.\r\n        /// </summary>\r\n        public static string IncludeSteelElements {\r\n            get {\r\n                return ResourceManager.GetString(\"IncludeSteelElements\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &lt;In-Session Setup&gt;.\r\n        /// </summary>\r\n        public static string InSessionConfiguration {\r\n            get {\r\n                return ResourceManager.GetString(\"InSessionConfiguration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Instance/Type.\r\n        /// </summary>\r\n        public static string InstanceOrType {\r\n            get {\r\n                return ResourceManager.GetString(\"InstanceOrType\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Internal address.\r\n        /// </summary>\r\n        public static string InternalAddress {\r\n            get {\r\n                return ResourceManager.GetString(\"InternalAddress\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Internal Origin.\r\n        /// </summary>\r\n        public static string InternalCoordinates {\r\n            get {\r\n                return ResourceManager.GetString(\"InternalCoordinates\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Internal Origin oriented in True North.\r\n        /// </summary>\r\n        public static string InternalCoordinatesInTN {\r\n            get {\r\n                return ResourceManager.GetString(\"InternalCoordinatesInTN\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Internal location.\r\n        /// </summary>\r\n        public static string InternalLocation {\r\n            get {\r\n                return ResourceManager.GetString(\"InternalLocation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Keep tessellated geometry as triangulation.\r\n        /// </summary>\r\n        public static string KeepTessellatedAsTriangulation {\r\n            get {\r\n                return ResourceManager.GetString(\"KeepTessellatedAsTriangulation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Level of Detail.\r\n        /// </summary>\r\n        public static string LevelOfDetail {\r\n            get {\r\n                return ResourceManager.GetString(\"LevelOfDetail\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Linked files.\r\n        /// </summary>\r\n        public static string LinkedFiles {\r\n            get {\r\n                return ResourceManager.GetString(\"LinkedFiles\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Do not export.\r\n        /// </summary>\r\n        public static string LinkedFilesDontExport {\r\n            get {\r\n                return ResourceManager.GetString(\"LinkedFilesDontExport\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export in same IFCProject.\r\n        /// </summary>\r\n        public static string LinkedFilesSameProject {\r\n            get {\r\n                return ResourceManager.GetString(\"LinkedFilesSameProject\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export in same IFCSite.\r\n        /// </summary>\r\n        public static string LinkedFilesSameSite {\r\n            get {\r\n                return ResourceManager.GetString(\"LinkedFilesSameSite\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export as separate IFCs.\r\n        /// </summary>\r\n        public static string LinkedFilesSeparate {\r\n            get {\r\n                return ResourceManager.GetString(\"LinkedFilesSeparate\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Could not create a temporary document for exporting the linked instance(s) for ids: {0}.\r\n        /// </summary>\r\n        public static string LinkInstanceExportCantCreateDoc {\r\n            get {\r\n                return ResourceManager.GetString(\"LinkInstanceExportCantCreateDoc\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The document for the linked instance(s) could not be found for ids: {0}..\r\n        /// </summary>\r\n        public static string LinkInstanceExportCantFindDoc {\r\n            get {\r\n                return ResourceManager.GetString(\"LinkInstanceExportCantFindDoc\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0} linked instance(s) could not be exported..\r\n        /// </summary>\r\n        public static string LinkInstanceExportErrorMain {\r\n            get {\r\n                return ResourceManager.GetString(\"LinkInstanceExportErrorMain\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The path for the linked instance(s) did not exist for ids: {0}..\r\n        /// </summary>\r\n        public static string LinkInstanceExportErrorPath {\r\n            get {\r\n                return ResourceManager.GetString(\"LinkInstanceExportErrorPath\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The linked instance(s) were mirrored for ids: {0}.  To export a mirrored linked instance, mirror the linked geometry and link in the new document..\r\n        /// </summary>\r\n        public static string LinkInstanceExportHasReflection {\r\n            get {\r\n                return ResourceManager.GetString(\"LinkInstanceExportHasReflection\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The linked instance(s) were non-conformal for ids: {0}..\r\n        /// </summary>\r\n        public static string LinkInstanceExportNonConformal {\r\n            get {\r\n                return ResourceManager.GetString(\"LinkInstanceExportNonConformal\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The linked instance(s) were scaled for ids: {0}..\r\n        /// </summary>\r\n        public static string LinkInstanceExportScaled {\r\n            get {\r\n                return ResourceManager.GetString(\"LinkInstanceExportScaled\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Import setup ....\r\n        /// </summary>\r\n        public static string LoadSetup {\r\n            get {\r\n                return ResourceManager.GetString(\"LoadSetup\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Manage Default Property Sets.\r\n        /// </summary>\r\n        public static string ManageDefaultPropertySets {\r\n            get {\r\n                return ResourceManager.GetString(\"ManageDefaultPropertySets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Manage IFC Export Mapping Settings.\r\n        /// </summary>\r\n        public static string ManageIFCExportMappingSettings {\r\n            get {\r\n                return ResourceManager.GetString(\"ManageIFCExportMappingSettings\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Mandatory fields Name, Source or Publisher, and Edition cannot be empty..\r\n        /// </summary>\r\n        public static string ManditoryFieldsNotEmpty {\r\n            get {\r\n                return ResourceManager.GetString(\"ManditoryFieldsNotEmpty\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Barrier Beach (BARRIERBEACH).\r\n        /// </summary>\r\n        public static string MarineFacilityBarrierBeach {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityBarrierBeach\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Breakwater (BREAKWATER).\r\n        /// </summary>\r\n        public static string MarineFacilityBreakwater {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityBreakwater\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Canal (CANAL).\r\n        /// </summary>\r\n        public static string MarineFacilityCanal {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityCanal\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Dry Dock (DRYDOCK).\r\n        /// </summary>\r\n        public static string MarineFacilityDryDock {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityDryDock\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Floating Dock (FLOATINGDOCK).\r\n        /// </summary>\r\n        public static string MarineFacilityFloatingDock {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityFloatingDock\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Hydrolift (HYDROLIFT).\r\n        /// </summary>\r\n        public static string MarineFacilityHydrolift {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityHydrolift\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Jetty (JETTY).\r\n        /// </summary>\r\n        public static string MarineFacilityJetty {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityJetty\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Launch Recovery Facility (LAUNCHRECOVERYFACILITY).\r\n        /// </summary>\r\n        public static string MarineFacilityLaunchRecovery {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityLaunchRecovery\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Marine Defense (MARINEDEFENCE).\r\n        /// </summary>\r\n        public static string MarineFacilityMarineDefense {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityMarineDefense\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Navigational Channel (NAVIGATIONALCHANNEL).\r\n        /// </summary>\r\n        public static string MarineFacilityNavigationalChannel {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityNavigationalChannel\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Port (PORT).\r\n        /// </summary>\r\n        public static string MarineFacilityPort {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityPort\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Quay (QUAY).\r\n        /// </summary>\r\n        public static string MarineFacilityQuay {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityQuay\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Revetment (REVETMENT).\r\n        /// </summary>\r\n        public static string MarineFacilityRevetment {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityRevetment\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Shiplift (SHIPLIFT).\r\n        /// </summary>\r\n        public static string MarineFacilityShipLift {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityShipLift\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Ship Lock (SHIPLOCK).\r\n        /// </summary>\r\n        public static string MarineFacilityShipLock {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityShipLock\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Shipyard (SHIPYARD).\r\n        /// </summary>\r\n        public static string MarineFacilityShipyard {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityShipyard\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Slipway (SLIPWAY).\r\n        /// </summary>\r\n        public static string MarineFacilitySlipway {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilitySlipway\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Waterway (WATERWAY).\r\n        /// </summary>\r\n        public static string MarineFacilityWaterway {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityWaterway\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Waterway Shiplift (WATERWAYSHIPLIFT).\r\n        /// </summary>\r\n        public static string MarineFacilityWaterwayShiplift {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityWaterwayShiplift\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Material Property Sets.\r\n        /// </summary>\r\n        public static string MaterialPropertySets {\r\n            get {\r\n                return ResourceManager.GetString(\"MaterialPropertySets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Modify IFC category mapping template.\r\n        /// </summary>\r\n        public static string ModifyIFCCategoryMapping {\r\n            get {\r\n                return ResourceManager.GetString(\"ModifyIFCCategoryMapping\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Modify IFC property mapping template.\r\n        /// </summary>\r\n        public static string ModifyIFCPropertyMapping {\r\n            get {\r\n                return ResourceManager.GetString(\"ModifyIFCPropertyMapping\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Modify setup ....\r\n        /// </summary>\r\n        public static string ModifySetup {\r\n            get {\r\n                return ResourceManager.GetString(\"ModifySetup\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Modify Setup.\r\n        /// </summary>\r\n        public static string ModifySetupTitle {\r\n            get {\r\n                return ResourceManager.GetString(\"ModifySetupTitle\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to More.\r\n        /// </summary>\r\n        public static string MoreTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"MoreTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Multiple assignments found in the selected objects..\r\n        /// </summary>\r\n        public static string MultipleAssignments {\r\n            get {\r\n                return ResourceManager.GetString(\"MultipleAssignments\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Multiple files.\r\n        /// </summary>\r\n        public static string MultipleFiles {\r\n            get {\r\n                return ResourceManager.GetString(\"MultipleFiles\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Name.\r\n        /// </summary>\r\n        public static string Name {\r\n            get {\r\n                return ResourceManager.GetString(\"Name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to New export setup.\r\n        /// </summary>\r\n        public static string NewExportSetup {\r\n            get {\r\n                return ResourceManager.GetString(\"NewExportSetup\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to New name.\r\n        /// </summary>\r\n        public static string NewName {\r\n            get {\r\n                return ResourceManager.GetString(\"NewName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to New Template.\r\n        /// </summary>\r\n        public static string NewTemplateDefaultName {\r\n            get {\r\n                return ResourceManager.GetString(\"NewTemplateDefaultName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Next....\r\n        /// </summary>\r\n        public static string Next {\r\n            get {\r\n                return ResourceManager.GetString(\"Next\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Entity does not have predefined type.\r\n        /// </summary>\r\n        public static string NoPredefinedType {\r\n            get {\r\n                return ResourceManager.GetString(\"NoPredefinedType\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Northings.\r\n        /// </summary>\r\n        public static string Northings {\r\n            get {\r\n                return ResourceManager.GetString(\"Northings\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Not Defined.\r\n        /// </summary>\r\n        public static string NotDefined {\r\n            get {\r\n                return ResourceManager.GetString(\"NotDefined\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Office.\r\n        /// </summary>\r\n        public static string Office {\r\n            get {\r\n                return ResourceManager.GetString(\"Office\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The elements in this model are very far from the origin in this exported file, which may cause display issues in the receiving software. Please consider using the project base point or site survey point as your coodinate basis..\r\n        /// </summary>\r\n        public static string OffsetDistanceTooLarge {\r\n            get {\r\n                return ResourceManager.GetString(\"OffsetDistanceTooLarge\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to OK.\r\n        /// </summary>\r\n        public static string OK {\r\n            get {\r\n                return ResourceManager.GetString(\"OK\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Options.\r\n        /// </summary>\r\n        public static string Options {\r\n            get {\r\n                return ResourceManager.GetString(\"Options\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Organization.\r\n        /// </summary>\r\n        public static string Organization {\r\n            get {\r\n                return ResourceManager.GetString(\"Organization\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Original name.\r\n        /// </summary>\r\n        public static string OriginalName {\r\n            get {\r\n                return ResourceManager.GetString(\"OriginalName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Override.\r\n        /// </summary>\r\n        public static string Override {\r\n            get {\r\n                return ResourceManager.GetString(\"Override\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Set &quot;Last Modified&quot; user to the Author in Project Information.\r\n        /// </summary>\r\n        public static string OwnerHistoryLastModified {\r\n            get {\r\n                return ResourceManager.GetString(\"OwnerHistoryLastModified\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Populate the IfcOwnerHistory &quot;LastModified&quot; attribute with the Author information set in Project Information.\r\n        /// </summary>\r\n        public static string OwnerHistoryLastModifiedTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"OwnerHistoryLastModifiedTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Parameter.\r\n        /// </summary>\r\n        public static string Parameter {\r\n            get {\r\n                return ResourceManager.GetString(\"Parameter\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Parameter Mapping.\r\n        /// </summary>\r\n        public static string ParameterMapping {\r\n            get {\r\n                return ResourceManager.GetString(\"ParameterMapping\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to How do I modify IFC export parameter mapping settings?.\r\n        /// </summary>\r\n        public static string ParameterMappingHelp {\r\n            get {\r\n                return ResourceManager.GetString(\"ParameterMappingHelp\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Parameter Mapping Settings.\r\n        /// </summary>\r\n        public static string ParameterMappingSettings {\r\n            get {\r\n                return ResourceManager.GetString(\"ParameterMappingSettings\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Phase to export.\r\n        /// </summary>\r\n        public static string PhaseToExport {\r\n            get {\r\n                return ResourceManager.GetString(\"PhaseToExport\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Physical.\r\n        /// </summary>\r\n        public static string PhysicalMaterialParams {\r\n            get {\r\n                return ResourceManager.GetString(\"PhysicalMaterialParams\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to P. O. Box.\r\n        /// </summary>\r\n        public static string POBox {\r\n            get {\r\n                return ResourceManager.GetString(\"POBox\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Postal code.\r\n        /// </summary>\r\n        public static string PostalCode {\r\n            get {\r\n                return ResourceManager.GetString(\"PostalCode\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Predefined Type.\r\n        /// </summary>\r\n        public static string PredefinedType {\r\n            get {\r\n                return ResourceManager.GetString(\"PredefinedType\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to PredefinedType selection.\r\n        /// </summary>\r\n        public static string PredefinedTypeSelection {\r\n            get {\r\n                return ResourceManager.GetString(\"PredefinedTypeSelection\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Project Base Point.\r\n        /// </summary>\r\n        public static string ProjectBasePoint {\r\n            get {\r\n                return ResourceManager.GetString(\"ProjectBasePoint\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Project description.\r\n        /// </summary>\r\n        public static string ProjectDescription {\r\n            get {\r\n                return ResourceManager.GetString(\"ProjectDescription\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Projected Coordinate System Reference.\r\n        /// </summary>\r\n        public static string ProjectedCRS {\r\n            get {\r\n                return ResourceManager.GetString(\"ProjectedCRS\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Description.\r\n        /// </summary>\r\n        public static string ProjectedCRSDesc {\r\n            get {\r\n                return ResourceManager.GetString(\"ProjectedCRSDesc\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Name.\r\n        /// </summary>\r\n        public static string ProjectedCRSName {\r\n            get {\r\n                return ResourceManager.GetString(\"ProjectedCRSName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Project Info.\r\n        /// </summary>\r\n        public static string ProjectInfo {\r\n            get {\r\n                return ResourceManager.GetString(\"ProjectInfo\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Project Base Point oriented in True North.\r\n        /// </summary>\r\n        public static string ProjectInTN {\r\n            get {\r\n                return ResourceManager.GetString(\"ProjectInTN\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Project name.\r\n        /// </summary>\r\n        public static string ProjectName {\r\n            get {\r\n                return ResourceManager.GetString(\"ProjectName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Coordinate Base.\r\n        /// </summary>\r\n        public static string ProjectOrigin {\r\n            get {\r\n                return ResourceManager.GetString(\"ProjectOrigin\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Project phase.\r\n        /// </summary>\r\n        public static string ProjectPhase {\r\n            get {\r\n                return ResourceManager.GetString(\"ProjectPhase\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Project Site.\r\n        /// </summary>\r\n        public static string ProjectSite {\r\n            get {\r\n                return ResourceManager.GetString(\"ProjectSite\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Projects to export:.\r\n        /// </summary>\r\n        public static string ProjectToExport {\r\n            get {\r\n                return ResourceManager.GetString(\"ProjectToExport\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Properties.\r\n        /// </summary>\r\n        public static string Properties {\r\n            get {\r\n                return ResourceManager.GetString(\"Properties\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Property Mapping.\r\n        /// </summary>\r\n        public static string PropertyMapping {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertyMapping\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Property Set.\r\n        /// </summary>\r\n        public static string PropertySet {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySet\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Property Set Details.\r\n        /// </summary>\r\n        public static string PropertySetDetails {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetDetails\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Enter valid property set name..\r\n        /// </summary>\r\n        public static string PropertySetInvalidNameTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetInvalidNameTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Property Set name.\r\n        /// </summary>\r\n        public static string PropertySetName {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Enter unique property set name..\r\n        /// </summary>\r\n        public static string PropertySetNameTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetNameTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Property Sets.\r\n        /// </summary>\r\n        public static string PropertySets {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC common only.\r\n        /// </summary>\r\n        public static string PropertySetsIFCCommon {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetsIFCCommon\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC common, User-defined.\r\n        /// </summary>\r\n        public static string PropertySetsIFCCommonPlusUserDefined {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetsIFCCommonPlusUserDefined\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Internal Revit only.\r\n        /// </summary>\r\n        public static string PropertySetsInternalRevit {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetsInternalRevit\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Internal Revit, User-defined.\r\n        /// </summary>\r\n        public static string PropertySetsInternalRevitPlusUserDefined {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetsInternalRevitPlusUserDefined\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to None.\r\n        /// </summary>\r\n        public static string PropertySetsNone {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetsNone\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Internal Revit, IFC common.\r\n        /// </summary>\r\n        public static string PropertySetsRevitPlusIFC {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetsRevitPlusIFC\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Internal Revit, IFC common, User-defined.\r\n        /// </summary>\r\n        public static string PropertySetsRevitPlusIFCPlusUserDefined {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetsRevitPlusIFCPlusUserDefined\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Schedules only.\r\n        /// </summary>\r\n        public static string PropertySetsSchedules {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetsSchedules\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Common, Schedules.\r\n        /// </summary>\r\n        public static string PropertySetsSchedulesPlusIFC {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetsSchedulesPlusIFC\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Common, Schedules, User-defined.\r\n        /// </summary>\r\n        public static string PropertySetsSchedulesPlusIFCPlusUserDefined {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetsSchedulesPlusIFCPlusUserDefined\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Internal Revit, Schedules.\r\n        /// </summary>\r\n        public static string PropertySetsSchedulesPlusRevit {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetsSchedulesPlusRevit\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Internal Revit, IFC common, Schedules.\r\n        /// </summary>\r\n        public static string PropertySetsSchedulesPlusRevitPlusIFC {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetsSchedulesPlusRevitPlusIFC\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Internal Revit, IFC common, Schedules, User-defined.\r\n        /// </summary>\r\n        public static string PropertySetsSchedulesPlusRevitPlusIFCPlusUserDefined {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetsSchedulesPlusRevitPlusIFCPlusUserDefined\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Internal Revit, Schedules, User-defined.\r\n        /// </summary>\r\n        public static string PropertySetsSchedulesPlusRevitPlusUserDefined {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetsSchedulesPlusRevitPlusUserDefined\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Schedules, User-defined.\r\n        /// </summary>\r\n        public static string PropertySetsSchedulesPlusUserDefined {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetsSchedulesPlusUserDefined\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unrecognized property sets.\r\n        /// </summary>\r\n        public static string PropertySetsUnrecognized {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetsUnrecognized\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to User-defined only.\r\n        /// </summary>\r\n        public static string PropertySetsUserDefined {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetsUserDefined\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Property Setups.\r\n        /// </summary>\r\n        public static string PropertySetups {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetups\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Property Type.\r\n        /// </summary>\r\n        public static string PropertyType {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertyType\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Purpose.\r\n        /// </summary>\r\n        public static string Purpose {\r\n            get {\r\n                return ResourceManager.GetString(\"Purpose\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Quantity Set.\r\n        /// </summary>\r\n        public static string QuantitySet {\r\n            get {\r\n                return ResourceManager.GetString(\"QuantitySet\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Remove.\r\n        /// </summary>\r\n        public static string Remove {\r\n            get {\r\n                return ResourceManager.GetString(\"Remove\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Remove Row.\r\n        /// </summary>\r\n        public static string RemoveRow {\r\n            get {\r\n                return ResourceManager.GetString(\"RemoveRow\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Rename export setup.\r\n        /// </summary>\r\n        public static string RenameExportSetup {\r\n            get {\r\n                return ResourceManager.GetString(\"RenameExportSetup\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to New.\r\n        /// </summary>\r\n        public static string RenameNewName {\r\n            get {\r\n                return ResourceManager.GetString(\"RenameNewName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Previous.\r\n        /// </summary>\r\n        public static string RenamePreviousName {\r\n            get {\r\n                return ResourceManager.GetString(\"RenamePreviousName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Rename property set.\r\n        /// </summary>\r\n        public static string RenamePropertySetTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"RenamePropertySetTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Rename the selected setup..\r\n        /// </summary>\r\n        public static string RenameSelectedSetup {\r\n            get {\r\n                return ResourceManager.GetString(\"RenameSelectedSetup\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Rename template.\r\n        /// </summary>\r\n        public static string RenameTemplateTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"RenameTemplateTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0} is a reserved Windows device name. Choose another name and try again..\r\n        /// </summary>\r\n        public static string ReservedDeviceName {\r\n            get {\r\n                return ResourceManager.GetString(\"ReservedDeviceName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Property set names cannot start with any uppercase or lowercase variation of &apos;pset&apos;..\r\n        /// </summary>\r\n        public static string ReservedPropertySetTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"ReservedPropertySetTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Reset.\r\n        /// </summary>\r\n        public static string Reset {\r\n            get {\r\n                return ResourceManager.GetString(\"Reset\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Reset all.\r\n        /// </summary>\r\n        public static string ResetAll {\r\n            get {\r\n                return ResourceManager.GetString(\"ResetAll\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Reset applicable entities.\r\n        /// </summary>\r\n        public static string ResetApplicableEntities {\r\n            get {\r\n                return ResourceManager.GetString(\"ResetApplicableEntities\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Reset configurations back to the original settings.\r\n        /// </summary>\r\n        public static string ResetConfigToolTip {\r\n            get {\r\n                return ResourceManager.GetString(\"ResetConfigToolTip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Reset override values.\r\n        /// </summary>\r\n        public static string ResetOverrideToolTip {\r\n            get {\r\n                return ResourceManager.GetString(\"ResetOverrideToolTip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Reset row to Revit default settings.\r\n        /// </summary>\r\n        public static string ResetRowToDefault {\r\n            get {\r\n                return ResourceManager.GetString(\"ResetRowToDefault\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Reset table to Revit default settings.\r\n        /// </summary>\r\n        public static string ResetToDefault {\r\n            get {\r\n                return ResourceManager.GetString(\"ResetToDefault\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Reset.\r\n        /// </summary>\r\n        public static string ResetToOriginals {\r\n            get {\r\n                return ResourceManager.GetString(\"ResetToOriginals\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Revit Category.\r\n        /// </summary>\r\n        public static string RevitCategory {\r\n            get {\r\n                return ResourceManager.GetString(\"RevitCategory\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Revit Property.\r\n        /// </summary>\r\n        public static string RevitProperty {\r\n            get {\r\n                return ResourceManager.GetString(\"RevitProperty\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Revit Property Sets.\r\n        /// </summary>\r\n        public static string RevitPropertySets {\r\n            get {\r\n                return ResourceManager.GetString(\"RevitPropertySets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Save.\r\n        /// </summary>\r\n        public static string Save {\r\n            get {\r\n                return ResourceManager.GetString(\"Save\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Save Changes.\r\n        /// </summary>\r\n        public static string SaveChanges {\r\n            get {\r\n                return ResourceManager.GetString(\"SaveChanges\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Save changes to the configurations into the document.\r\n        /// </summary>\r\n        public static string SaveChangesTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"SaveChangesTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Save changes to IFC export configuration.\r\n        /// </summary>\r\n        public static string SaveConfigurationChanges {\r\n            get {\r\n                return ResourceManager.GetString(\"SaveConfigurationChanges\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Save changes to property set..\r\n        /// </summary>\r\n        public static string SavePropertySetTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"SavePropertySetTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Save Setup &amp;amp; Close.\r\n        /// </summary>\r\n        public static string SaveSetupAndClose {\r\n            get {\r\n                return ResourceManager.GetString(\"SaveSetupAndClose\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Save changes to template.\r\n        /// </summary>\r\n        public static string SaveTemplateTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"SaveTemplateTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Schedules.\r\n        /// </summary>\r\n        public static string Schedules {\r\n            get {\r\n                return ResourceManager.GetString(\"Schedules\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Search.\r\n        /// </summary>\r\n        public static string Search {\r\n            get {\r\n                return ResourceManager.GetString(\"Search\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Select applicable entities.\r\n        /// </summary>\r\n        public static string SelectApplicableEntities {\r\n            get {\r\n                return ResourceManager.GetString(\"SelectApplicableEntities\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Select a category to filter the properties list..\r\n        /// </summary>\r\n        public static string SelectCategory {\r\n            get {\r\n                return ResourceManager.GetString(\"SelectCategory\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Selected categories will be exported.\r\n        /// </summary>\r\n        public static string SelectedCheckboxTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"SelectedCheckboxTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Selected properties will be exported.\r\n        /// </summary>\r\n        public static string SelectedPropertiesCheckboxTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"SelectedPropertiesCheckboxTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Selected property set will be exported.\r\n        /// </summary>\r\n        public static string SelectedPropertySetCheckboxTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"SelectedPropertySetCheckboxTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Please select at least one project to export..\r\n        /// </summary>\r\n        public static string SelectOneOrMoreProjects {\r\n            get {\r\n                return ResourceManager.GetString(\"SelectOneOrMoreProjects\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Select Export As IFC Entity.\r\n        /// </summary>\r\n        public static string SelectSingleElement {\r\n            get {\r\n                return ResourceManager.GetString(\"SelectSingleElement\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Setup.\r\n        /// </summary>\r\n        public static string Setup {\r\n            get {\r\n                return ResourceManager.GetString(\"Setup\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Shared Coordinates.\r\n        /// </summary>\r\n        public static string SharedCoordinates {\r\n            get {\r\n                return ResourceManager.GetString(\"SharedCoordinates\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Show.\r\n        /// </summary>\r\n        public static string Show {\r\n            get {\r\n                return ResourceManager.GetString(\"Show\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to All.\r\n        /// </summary>\r\n        public static string ShowAll {\r\n            get {\r\n                return ResourceManager.GetString(\"ShowAll\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Checked entities.\r\n        /// </summary>\r\n        public static string ShowChecked {\r\n            get {\r\n                return ResourceManager.GetString(\"ShowChecked\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Un-checked entities.\r\n        /// </summary>\r\n        public static string ShowUnchecked {\r\n            get {\r\n                return ResourceManager.GetString(\"ShowUnchecked\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Site.\r\n        /// </summary>\r\n        public static string Site {\r\n            get {\r\n                return ResourceManager.GetString(\"Site\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Site description.\r\n        /// </summary>\r\n        public static string SiteDescription {\r\n            get {\r\n                return ResourceManager.GetString(\"SiteDescription\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Site location.\r\n        /// </summary>\r\n        public static string SiteLocation {\r\n            get {\r\n                return ResourceManager.GetString(\"SiteLocation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Survey Point.\r\n        /// </summary>\r\n        public static string SiteSurveyPoint {\r\n            get {\r\n                return ResourceManager.GetString(\"SiteSurveyPoint\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Source file name.\r\n        /// </summary>\r\n        public static string SourceFileName {\r\n            get {\r\n                return ResourceManager.GetString(\"SourceFileName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Source (Publisher).\r\n        /// </summary>\r\n        public static string SourcePublisher {\r\n            get {\r\n                return ResourceManager.GetString(\"SourcePublisher\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Space boundaries.\r\n        /// </summary>\r\n        public static string SpaceBoundaries {\r\n            get {\r\n                return ResourceManager.GetString(\"SpaceBoundaries\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to 1st Level.\r\n        /// </summary>\r\n        public static string SpaceBoundaries1stLevel {\r\n            get {\r\n                return ResourceManager.GetString(\"SpaceBoundaries1stLevel\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to 2nd Level.\r\n        /// </summary>\r\n        public static string SpaceBoundaries2ndLevel {\r\n            get {\r\n                return ResourceManager.GetString(\"SpaceBoundaries2ndLevel\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to None.\r\n        /// </summary>\r\n        public static string SpaceBoundariesNone {\r\n            get {\r\n                return ResourceManager.GetString(\"SpaceBoundariesNone\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unrecognized space boundary level.\r\n        /// </summary>\r\n        public static string SpaceBoundariesUnrecognized {\r\n            get {\r\n                return ResourceManager.GetString(\"SpaceBoundariesUnrecognized\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Split Walls, Columns, Ducts by Level.\r\n        /// </summary>\r\n        public static string SplitWallsColumsDuctsByLevel {\r\n            get {\r\n                return ResourceManager.GetString(\"SplitWallsColumsDuctsByLevel\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to State/Region.\r\n        /// </summary>\r\n        public static string State {\r\n            get {\r\n                return ResourceManager.GetString(\"State\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Store the IFC GUID in an element parameter after export.\r\n        /// </summary>\r\n        public static string StoreIFCGUID {\r\n            get {\r\n                return ResourceManager.GetString(\"StoreIFCGUID\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Street address.\r\n        /// </summary>\r\n        public static string StreetAddress {\r\n            get {\r\n                return ResourceManager.GetString(\"StreetAddress\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Viewer mode allows all functionality of Revit, except the following: save or save as in all cases; exporting or publishing modified projects; exporting or publishing any projects to a format containing model data that can be modified; or printing projects after changes are made..\r\n        /// </summary>\r\n        public static string String_Revit_CurrentLicenseStatus_MainContent {\r\n            get {\r\n                return ResourceManager.GetString(\"String_Revit_CurrentLicenseStatus_MainContent\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}\r\n        ///Build: {1}\r\n        ///\r\n        ///{0} is in viewer mode..\r\n        /// </summary>\r\n        public static string String_Revit_CurrentLicenseStatus_MainInstruction {\r\n            get {\r\n                return ResourceManager.GetString(\"String_Revit_CurrentLicenseStatus_MainInstruction\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Revit Current License Status.\r\n        /// </summary>\r\n        public static string String_Revit_CurrentLicenseStatusTitle {\r\n            get {\r\n                return ResourceManager.GetString(\"String_Revit_CurrentLicenseStatusTitle\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Template name.\r\n        /// </summary>\r\n        public static string TemplateName {\r\n            get {\r\n                return ResourceManager.GetString(\"TemplateName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Enter valid template name..\r\n        /// </summary>\r\n        public static string TemplateNameInvalidTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"TemplateNameInvalidTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Enter unique template name..\r\n        /// </summary>\r\n        public static string TemplateNameTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"TemplateNameTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to selections.\r\n        /// </summary>\r\n        public static string TemplateSelections {\r\n            get {\r\n                return ResourceManager.GetString(\"TemplateSelections\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Template Settings.\r\n        /// </summary>\r\n        public static string TemplateSettings {\r\n            get {\r\n                return ResourceManager.GetString(\"TemplateSettings\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Level of detail for some element geometry.\r\n        /// </summary>\r\n        public static string TessellationDetails {\r\n            get {\r\n                return ResourceManager.GetString(\"TessellationDetails\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Thermal.\r\n        /// </summary>\r\n        public static string ThermalMaterialParams {\r\n            get {\r\n                return ResourceManager.GetString(\"ThermalMaterialParams\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use this option if any tessellated geometry should remain as triangulated faces, or if the export performance is affected..\r\n        /// </summary>\r\n        public static string TriangulationOnlyTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"TriangulationOnlyTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Type to filter.\r\n        /// </summary>\r\n        public static string TypeToFilter {\r\n            get {\r\n                return ResourceManager.GetString(\"TypeToFilter\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown alternate UI version.\r\n        /// </summary>\r\n        public static string UnkownAltUIVer {\r\n            get {\r\n                return ResourceManager.GetString(\"UnkownAltUIVer\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Update IFC export setups.\r\n        /// </summary>\r\n        public static string UpdateExportSetups {\r\n            get {\r\n                return ResourceManager.GetString(\"UpdateExportSetups\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Update project address.\r\n        /// </summary>\r\n        public static string UpdateProjectAddress {\r\n            get {\r\n                return ResourceManager.GetString(\"UpdateProjectAddress\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Update project information.\r\n        /// </summary>\r\n        public static string UpdateProjectInformation {\r\n            get {\r\n                return ResourceManager.GetString(\"UpdateProjectInformation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use 2D room boundaries for room volume.\r\n        /// </summary>\r\n        public static string Use2DRoomBoundariesForRoomVolume {\r\n            get {\r\n                return ResourceManager.GetString(\"Use2DRoomBoundariesForRoomVolume\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use active view when creating geometry.\r\n        /// </summary>\r\n        public static string UseActiveViewForGeometry {\r\n            get {\r\n                return ResourceManager.GetString(\"UseActiveViewForGeometry\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Uses the geometry in the active view to export elements such as cable trays with more detailed geometry.\r\n        /// </summary>\r\n        public static string UseActiveViewForGeometryTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"UseActiveViewForGeometryTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use coarse tessellation for some BReps.\r\n        /// </summary>\r\n        public static string UseCoarseTessellation {\r\n            get {\r\n                return ResourceManager.GetString(\"UseCoarseTessellation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use coarse tessellation for some BReps and profiles.\r\n        /// </summary>\r\n        public static string UseCoarseTessellationForBReps {\r\n            get {\r\n                return ResourceManager.GetString(\"UseCoarseTessellationForBReps\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use family and type name for reference.\r\n        /// </summary>\r\n        public static string UseFamilyAndTypeNameForReference {\r\n            get {\r\n                return ResourceManager.GetString(\"UseFamilyAndTypeNameForReference\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use family and type name for references.\r\n        /// </summary>\r\n        public static string UseFamilyAndTypeNameForReferences {\r\n            get {\r\n                return ResourceManager.GetString(\"UseFamilyAndTypeNameForReferences\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Keep Tessellated Geometry as Triangulation.\r\n        /// </summary>\r\n        public static string UseOnlyTriangulation {\r\n            get {\r\n                return ResourceManager.GetString(\"UseOnlyTriangulation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to User Defined.\r\n        /// </summary>\r\n        public static string UserDefined {\r\n            get {\r\n                return ResourceManager.GetString(\"UserDefined\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to How do I Manage User-Defined Property Sets?.\r\n        /// </summary>\r\n        public static string UserDefinedHelp {\r\n            get {\r\n                return ResourceManager.GetString(\"UserDefinedHelp\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Custom parameter mapping table.\r\n        /// </summary>\r\n        public static string UserDefinedParameterMappingTable {\r\n            get {\r\n                return ResourceManager.GetString(\"UserDefinedParameterMappingTable\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Custom parameter sets.\r\n        /// </summary>\r\n        public static string UserDefinedParameterSets {\r\n            get {\r\n                return ResourceManager.GetString(\"UserDefinedParameterSets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to User-defined Property Mapping.\r\n        /// </summary>\r\n        public static string UserDefinedPropertyMapping {\r\n            get {\r\n                return ResourceManager.GetString(\"UserDefinedPropertyMapping\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to User Defined Property Sets.\r\n        /// </summary>\r\n        public static string UserDefinedPropertySets {\r\n            get {\r\n                return ResourceManager.GetString(\"UserDefinedPropertySets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to User-defined purpose.\r\n        /// </summary>\r\n        public static string UserDefinedPurpose {\r\n            get {\r\n                return ResourceManager.GetString(\"UserDefinedPurpose\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to User-defined Type.\r\n        /// </summary>\r\n        public static string UserDefinedType {\r\n            get {\r\n                return ResourceManager.GetString(\"UserDefinedType\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use 2D room boundaries for room volume.\r\n        /// </summary>\r\n        public static string UseRoomBoundariesForRoomVolume {\r\n            get {\r\n                return ResourceManager.GetString(\"UseRoomBoundariesForRoomVolume\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use Type name only for IFCType name.\r\n        /// </summary>\r\n        public static string UseTypeNameOnlyForIfcType {\r\n            get {\r\n                return ResourceManager.GetString(\"UseTypeNameOnlyForIfcType\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use this option to export the IFC type name as the Revit type name without the family name..\r\n        /// </summary>\r\n        public static string UseTypeNameOnlyTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"UseTypeNameOnlyTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Allow use of type properties in instance property sets.\r\n        /// </summary>\r\n        public static string UseTypePropertiesInInstacePSets {\r\n            get {\r\n                return ResourceManager.GetString(\"UseTypePropertiesInInstacePSets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use visible Revit name as the IFCEntity name.\r\n        /// </summary>\r\n        public static string UseVisibleRevitNameAsEntityName {\r\n            get {\r\n                return ResourceManager.GetString(\"UseVisibleRevitNameAsEntityName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use this option to export IFC entity name as the visible Revit name..\r\n        /// </summary>\r\n        public static string UseVisibleRevitNameTooltip {\r\n            get {\r\n                return ResourceManager.GetString(\"UseVisibleRevitNameTooltip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Path does not exist.\r\n        /// </summary>\r\n        public static string ValidPathExists {\r\n            get {\r\n                return ResourceManager.GetString(\"ValidPathExists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Value.\r\n        /// </summary>\r\n        public static string Value {\r\n            get {\r\n                return ResourceManager.GetString(\"Value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ...value is set according to export option.\r\n        /// </summary>\r\n        public static string ValueSetByExportOption {\r\n            get {\r\n                return ResourceManager.GetString(\"ValueSetByExportOption\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ...value will be set on export.\r\n        /// </summary>\r\n        public static string ValueSetOnExport {\r\n            get {\r\n                return ResourceManager.GetString(\"ValueSetOnExport\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to v..\r\n        /// </summary>\r\n        public static string Version {\r\n            get {\r\n                return ResourceManager.GetString(\"Version\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Version number.\r\n        /// </summary>\r\n        public static string VersionNumber {\r\n            get {\r\n                return ResourceManager.GetString(\"VersionNumber\", resourceCulture);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/Properties/Resources.de.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ExportBaseQuantities\" xml:space=\"preserve\">\n    <value>Basismengen exportieren</value>\n  </data>\n  <data name=\"ExportPlanViewElements\" xml:space=\"preserve\">\n    <value>2D-Draufsichtselemente exportieren</value>\n  </data>\n  <data name=\"ExportRevitPropertySets\" xml:space=\"preserve\">\n    <value>Revit-Eigenschaftensätze exportieren</value>\n  </data>\n  <data name=\"FileType\" xml:space=\"preserve\">\n    <value>Dateityp</value>\n  </data>\n  <data name=\"FileVersion\" xml:space=\"preserve\">\n    <value>Dateiversion</value>\n  </data>\n  <data name=\"IFCMVD2x3CV2\" xml:space=\"preserve\">\n    <value>IFC 2x3 Coordination View 2.0</value>\n  </data>\n  <data name=\"IFCMVDBCA\" xml:space=\"preserve\">\n    <value>IFC 2x2 Singapore BCA e-Plan Check</value>\n  </data>\n  <data name=\"IFCMVDGSA\" xml:space=\"preserve\">\n    <value>IFC 2x3 GSA Concept Design BIM 2010</value>\n  </data>\n  <data name=\"IFCVersion2x2\" xml:space=\"preserve\">\n    <value>IFC 2x2 Coordination View</value>\n  </data>\n  <data name=\"IFCVersion2x3\" xml:space=\"preserve\">\n    <value>IFC 2x3 Coordination View</value>\n  </data>\n  <data name=\"IFCVersionUnrecognized\" xml:space=\"preserve\">\n    <value>Unbekannte IFC-Version</value>\n  </data>\n  <data name=\"IncludeSpaceBoundaries\" xml:space=\"preserve\">\n    <value>Raumbegrenzungen</value>\n  </data>\n  <data name=\"InSessionConfiguration\" xml:space=\"preserve\">\n    <value>&lt;Aktuelle Einstellungen&gt;</value>\n  </data>\n  <data name=\"SpaceBoundaries\" xml:space=\"preserve\">\n    <value>Raumbegrenzungen</value>\n  </data>\n  <data name=\"SpaceBoundaries1stLevel\" xml:space=\"preserve\">\n    <value>1. Ebene</value>\n  </data>\n  <data name=\"SpaceBoundaries2ndLevel\" xml:space=\"preserve\">\n    <value>2. Ebene</value>\n  </data>\n  <data name=\"SpaceBoundariesNone\" xml:space=\"preserve\">\n    <value>Keine</value>\n  </data>\n  <data name=\"SpaceBoundariesUnrecognized\" xml:space=\"preserve\">\n    <value>Unbekannte Raumbegrenzungsebene</value>\n  </data>\n  <data name=\"Use2DRoomBoundariesForRoomVolume\" xml:space=\"preserve\">\n    <value>2D-Raumbegrenzungen für Raumvolumen verwenden</value>\n  </data>\n  <data name=\"UseFamilyAndTypeNameForReferences\" xml:space=\"preserve\">\n    <value>Familien- und Typnamen als Referenzen verwenden</value>\n  </data>\n  <data name=\"ExportVisibleElementsInView\" xml:space=\"preserve\">\n    <value>Nur in der Ansicht sichtbare Elemente exportieren</value>\n  </data>\n  <data name=\"ExportPartsAsBuildingElements\" xml:space=\"preserve\">\n    <value>Teile als Gebäudeelemente exportieren</value>\n  </data>\n  <data name=\"ExportIFCCommonPropertySets\" xml:space=\"preserve\">\n    <value>Allgemeine IFC-Eigenschaftensätze exportieren</value>\n  </data>\n  <data name=\"IFCMVDFMHandOver\" xml:space=\"preserve\">\n    <value>IFC 2x3 Basic FM Handover View</value>\n  </data>\n  <data name=\"ExportBoundingBox\" xml:space=\"preserve\">\n    <value>Begrenzungsrahmen exportieren</value>\n  </data>\n  <data name=\"ExportSchedulesAsPsets\" xml:space=\"preserve\">\n    <value>Bauteillisten als Eigenschaftensätze exportieren</value>\n  </data>\n  <data name=\"IncludeIfcSiteElevation\" xml:space=\"preserve\">\n    <value>IFCSITE-Höhe in lokalen Plazierungsursprung auf Grundstück mit einbeziehen</value>\n  </data>\n  <data name=\"UseCoarseTessellation\" xml:space=\"preserve\">\n    <value>Grobe Tesselierung für einige BReps verwenden</value>\n  </data>\n  <data name=\"StoreIFCGUID\" xml:space=\"preserve\">\n    <value>IFC-GUID nach dem Export in einem Elementparameter speichern</value>\n  </data>\n  <data name=\"IFCMVD4CV2\" xml:space=\"preserve\">\n    <value>IFC 4 Coordination View 2.0</value>\n  </data>\n  <data name=\"PropertySets\" xml:space=\"preserve\">\n    <value>Eigenschaftensätze</value>\n  </data>\n  <data name=\"PropertySetsIFCCommon\" xml:space=\"preserve\">\n    <value>Nur allgemeine IFC-Eigenschaftensätze</value>\n  </data>\n  <data name=\"PropertySetsInternalRevit\" xml:space=\"preserve\">\n    <value>Nur Revit-Eigenschaftensätze</value>\n  </data>\n  <data name=\"PropertySetsNone\" xml:space=\"preserve\">\n    <value>Keine</value>\n  </data>\n  <data name=\"PropertySetsRevitPlusIFC\" xml:space=\"preserve\">\n    <value>Revit-Eigenschaftensätze, allgemeine IFC-Eigenschaftensätze</value>\n  </data>\n  <data name=\"PropertySetsSchedules\" xml:space=\"preserve\">\n    <value>Nur Bauteillisten-Eigenschaftensätze</value>\n  </data>\n  <data name=\"PropertySetsSchedulesPlusRevit\" xml:space=\"preserve\">\n    <value>Revit-Eigenschaftensätze, allgemeine IFC-Eigenschaftensätze</value>\n  </data>\n  <data name=\"PropertySetsSchedulesPlusIFC\" xml:space=\"preserve\">\n    <value>Allgmeine IFC-Eigenschaftensätze, Bauteillisten-Eigenschaftensätze</value>\n  </data>\n  <data name=\"PropertySetsSchedulesPlusRevitPlusIFC\" xml:space=\"preserve\">\n    <value>Revit-Eigenschaftensätze, allgemeine IFC-Eigenschaftensätze, Bauteillisten-Eigenschaftensätze</value>\n  </data>\n  <data name=\"PropertySetsUnrecognized\" xml:space=\"preserve\">\n    <value>Unbekannte Eigenschaftensätze</value>\n  </data>\n  <data name=\"ActivePhase\" xml:space=\"preserve\">\n    <value>Zu exportierende Phase</value>\n  </data>\n  <data name=\"DefaultPhase\" xml:space=\"preserve\">\n    <value>Standardeinstellung</value>\n  </data>\n  <data name=\"Default\" xml:space=\"preserve\">\n    <value>Voreingestellt {0}</value>\n  </data>\n  <data name=\"PropertySetsIFCCommonPlusUserDefined\" xml:space=\"preserve\">\n    <value>Allgemeine IFC, benutzerdefiniert</value>\n  </data>\n  <data name=\"PropertySetsInternalRevitPlusUserDefined\" xml:space=\"preserve\">\n    <value>Revit-Eigenschaftensätze, benutzerdefinierte Eigenschaftensätze</value>\n  </data>\n  <data name=\"PropertySetsRevitPlusIFCPlusUserDefined\" xml:space=\"preserve\">\n    <value>Revit-Eigenschaftensätze, allgemeine IFC-Eigenschaftensätze, benutzerdefinierte Eigenschaftensätze</value>\n  </data>\n  <data name=\"PropertySetsSchedulesPlusIFCPlusUserDefined\" xml:space=\"preserve\">\n    <value>Allgmeine IFC-Eigenschaftensätze, Bauteillisten-Eigenschaftensätze, benutzerdefinierte Eigenschaftensätze</value>\n  </data>\n  <data name=\"PropertySetsSchedulesPlusRevitPlusIFCPlusUserDefined\" xml:space=\"preserve\">\n    <value>Revit-Eigenschaftensätze, allgemeine IFC-Eigenschaftensätze, Bauteillisten-Eigenschaftensätze, benutzerdefinierte Eigenschaftensätze</value>\n  </data>\n  <data name=\"PropertySetsSchedulesPlusRevitPlusUserDefined\" xml:space=\"preserve\">\n    <value>Revit-Eigenschaftensätze, Bauteillisten-Eigenschaftensätze</value>\n  </data>\n  <data name=\"PropertySetsSchedulesPlusUserDefined\" xml:space=\"preserve\">\n    <value>Bauteillisten-Eigenschaftensätze, benutzerdefinierte Eigenschaftensätze</value>\n  </data>\n  <data name=\"PropertySetsUserDefined\" xml:space=\"preserve\">\n    <value>Nur benutzerdefinierte Eigenschaftensätze</value>\n  </data>\n  <data name=\"ExportLinkedFiles\" xml:space=\"preserve\">\n    <value>Verknüpfte Dateien als separate IFC's exportieren</value>\n  </data>\n  <data name=\"ExportUserDefinedPsetsFileName\" xml:space=\"preserve\">\n    <value>Dateiname der benutzerdefinierten Eigenschaftensätze</value>\n  </data>\n  <data name=\"UserDefinedParameterSets\" xml:space=\"preserve\">\n    <value>Benutzerdefinierte Parametersätze</value>\n  </data>\n  <data name=\"IFCExportProcessError\" xml:space=\"preserve\">\n    <value>Der IFC Export-Vorgang hat einen Fehler verursacht: {0}.</value>\n  </data>\n  <data name=\"LinkInstanceExportCantCreateDoc\" xml:space=\"preserve\">\n    <value>Es konnte keine temporäre Datei für den Export der Referenz erstellt werden. ID: {0}</value>\n  </data>\n  <data name=\"LinkInstanceExportCantFindDoc\" xml:space=\"preserve\">\n    <value>Die Referenz konnte nicht gefudnen werden. ID {0}</value>\n  </data>\n  <data name=\"LinkInstanceExportErrorMain\" xml:space=\"preserve\">\n    <value>{0} Referenzen konnten nicht exportiert werden</value>\n  </data>\n  <data name=\"LinkInstanceExportErrorPath\" xml:space=\"preserve\">\n    <value>Der Pfad für die Referenz existiert nicht. ID:{0}</value>\n  </data>\n  <data name=\"LinkInstanceExportNonConformal\" xml:space=\"preserve\">\n    <value>Folgende Referenzen waren nicht konform: ID {0}.</value>\n  </data>\n  <data name=\"LinkInstanceExportHasReflection\" xml:space=\"preserve\">\n    <value>Die Referenz(en) wurden gespiegelt: ID:{0}. Um gespiegelte Referenzen zu exportieren, spiegeln Sie die referenzierte Geometrie im Ursprungsdokument und referenzieren Sie diese Datei erneut.</value>\n  </data>\n  <data name=\"LinkInstanceExportScaled\" xml:space=\"preserve\">\n    <value>Folgende referenzen wurden angepasst: ID {0}.</value>\n  </data>\n  <data name=\"IFCExport\" xml:space=\"preserve\">\n    <value>IFC exportieren</value>\n  </data>\n  <data name=\"Classification\" xml:space=\"preserve\">\n    <value>Klassifizierungseinstellungen…</value>\n  </data>\n  <data name=\"DistributionPoint\" xml:space=\"preserve\">\n    <value>Vertriebsstelle</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Hauptseite</value>\n  </data>\n  <data name=\"InternalAddress\" xml:space=\"preserve\">\n    <value>Interne Adresse</value>\n  </data>\n  <data name=\"ManditoryFieldsNotEmpty\" xml:space=\"preserve\">\n    <value>Pflichtfelder wie Name, Quelle (Herausgeber) und Edition können nicht leer sein.</value>\n  </data>\n  <data name=\"Office\" xml:space=\"preserve\">\n    <value>Büro</value>\n  </data>\n  <data name=\"Site\" xml:space=\"preserve\">\n    <value>Grundstück</value>\n  </data>\n  <data name=\"UpdateProjectAddress\" xml:space=\"preserve\">\n    <value>Priojektadresse aktualisieren</value>\n  </data>\n  <data name=\"UserDefined\" xml:space=\"preserve\">\n    <value>Benutzerdefiniert</value>\n  </data>\n  <data name=\"Address\" xml:space=\"preserve\">\n    <value>Projektadresse…</value>\n  </data>\n  <data name=\"AddressLine1\" xml:space=\"preserve\">\n    <value>Adresse Zeile 1</value>\n  </data>\n  <data name=\"AddressLine2\" xml:space=\"preserve\">\n    <value>Adresse Zeile 2</value>\n  </data>\n  <data name=\"Advanced\" xml:space=\"preserve\">\n    <value>Erweitert</value>\n  </data>\n  <data name=\"AltUIVer\" xml:space=\"preserve\">\n    <value>Alternative Benutzeroberfläche</value>\n  </data>\n  <data name=\"ApplicationName\" xml:space=\"preserve\">\n    <value>Name der Anwendung</value>\n  </data>\n  <data name=\"Assignments\" xml:space=\"preserve\">\n    <value>Zuweisungen</value>\n  </data>\n  <data name=\"Authorization\" xml:space=\"preserve\">\n    <value>Autorisierung</value>\n  </data>\n  <data name=\"AuthorsEMail\" xml:space=\"preserve\">\n    <value>E-Mail des Verfassers</value>\n  </data>\n  <data name=\"AuthorsName\" xml:space=\"preserve\">\n    <value>Name des Verfassers</value>\n  </data>\n  <data name=\"Browse\" xml:space=\"preserve\">\n    <value>Durchsuchen…</value>\n  </data>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>Abbrechen</value>\n  </data>\n  <data name=\"City\" xml:space=\"preserve\">\n    <value>Stadt</value>\n  </data>\n  <data name=\"ClassificationFieldName\" xml:space=\"preserve\">\n    <value>Klassifizierungsfeldname</value>\n  </data>\n  <data name=\"Country\" xml:space=\"preserve\">\n    <value>Land</value>\n  </data>\n  <data name=\"CurrentSelectedSetup\" xml:space=\"preserve\">\n    <value>Aktuell ausgewählte Einstellungen</value>\n  </data>\n  <data name=\"DeleteOldSetups\" xml:space=\"preserve\">\n    <value>Alte IFC-Export Einstellungen löschen</value>\n  </data>\n  <data name=\"Description\" xml:space=\"preserve\">\n    <value>Beschreibung</value>\n  </data>\n  <data name=\"DocumentationLocation\" xml:space=\"preserve\">\n    <value>Speicherort der Dateien</value>\n  </data>\n  <data name=\"Edition\" xml:space=\"preserve\">\n    <value>Edition</value>\n  </data>\n  <data name=\"EditionDate\" xml:space=\"preserve\">\n    <value>Editionsdatum</value>\n  </data>\n  <data name=\"Export\" xml:space=\"preserve\">\n    <value>Export</value>\n  </data>\n  <data name=\"ExportElementsVisibleInView\" xml:space=\"preserve\">\n    <value>Nur in der Ansicht sichtbare Elemente exportieren</value>\n  </data>\n  <data name=\"ExportInternalRevitPropertySets\" xml:space=\"preserve\">\n    <value>Interne Revit-Eingeschaftensätze exportieren</value>\n  </data>\n  <data name=\"ExportSchedulesAsPropertySets\" xml:space=\"preserve\">\n    <value>Bauteillisten als Eigenschaftensätze exportieren</value>\n  </data>\n  <data name=\"ExportSolidModelsWhenPossible\" xml:space=\"preserve\">\n    <value>Verwendung der kombinierten Körpermodelldarstellung zulassen</value>\n  </data>\n  <data name=\"ExportUserDefinedPropertySets\" xml:space=\"preserve\">\n    <value>Benutzerdefinierte Eigenschaftensätze exportierem</value>\n  </data>\n  <data name=\"FileDescription\" xml:space=\"preserve\">\n    <value>Dateibeschreibung</value>\n  </data>\n  <data name=\"FileHeader\" xml:space=\"preserve\">\n    <value>Dateikopfzeile</value>\n  </data>\n  <data name=\"FileSchema\" xml:space=\"preserve\">\n    <value>Dateischema</value>\n  </data>\n  <data name=\"IFC\" xml:space=\"preserve\">\n    <value>IFC</value>\n  </data>\n  <data name=\"IFCAssignments\" xml:space=\"preserve\">\n    <value>IFC Zuweisungen</value>\n  </data>\n  <data name=\"IFCExt\" xml:space=\"preserve\">\n    <value>ifc</value>\n  </data>\n  <data name=\"IFCFiles\" xml:space=\"preserve\">\n    <value>IFC-SPF|*.ifc</value>\n  </data>\n  <data name=\"IFCMVDFMExtendedHandOver\" xml:space=\"preserve\">\n    <value>IFC2x3 COBie 2.4 Design Deliverable View</value>\n  </data>\n  <data name=\"IFCUnknown\" xml:space=\"preserve\">\n    <value>Unbekannte Einstellung für den Dateityp</value>\n  </data>\n  <data name=\"IFCVersion\" xml:space=\"preserve\">\n    <value>IFC-Version</value>\n  </data>\n  <data name=\"IFCXML\" xml:space=\"preserve\">\n    <value>IFC XML</value>\n  </data>\n  <data name=\"IFCXMLExt\" xml:space=\"preserve\">\n    <value>ifcxml</value>\n  </data>\n  <data name=\"IFCXMLFiles\" xml:space=\"preserve\">\n    <value>Industry Foundation Classes XML(.ifcxml)|*.ifcxml</value>\n  </data>\n  <data name=\"IFCXMLZIP\" xml:space=\"preserve\">\n    <value>Komprimierte IFC-XML</value>\n  </data>\n  <data name=\"IFCXMLZIPExt\" xml:space=\"preserve\">\n    <value>ifczip</value>\n  </data>\n  <data name=\"IFCZIP\" xml:space=\"preserve\">\n    <value>IFC zippé</value>\n  </data>\n  <data name=\"IFCZIPExt\" xml:space=\"preserve\">\n    <value>ifczip</value>\n  </data>\n  <data name=\"IFCZIPFiles\" xml:space=\"preserve\">\n    <value>Zipped Industry Foundation Classes XML(.ifczip)|*.ifczip</value>\n  </data>\n  <data name=\"InternalLocation\" xml:space=\"preserve\">\n    <value>Interner Standort</value>\n  </data>\n  <data name=\"ModifySetup\" xml:space=\"preserve\">\n    <value>Einstellungen ändern…</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"NewExportSetup\" xml:space=\"preserve\">\n    <value>Neue Export Einstellungen</value>\n  </data>\n  <data name=\"NewName\" xml:space=\"preserve\">\n    <value>Neuer Name</value>\n  </data>\n  <data name=\"OK\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"Options\" xml:space=\"preserve\">\n    <value>Einstellungen</value>\n  </data>\n  <data name=\"Organization\" xml:space=\"preserve\">\n    <value>Unternehmen</value>\n  </data>\n  <data name=\"OriginalName\" xml:space=\"preserve\">\n    <value>Ursprünglicher Name</value>\n  </data>\n  <data name=\"PhaseToExport\" xml:space=\"preserve\">\n    <value>Zu exportierende Phase</value>\n  </data>\n  <data name=\"POBox\" xml:space=\"preserve\">\n    <value>Postfach</value>\n  </data>\n  <data name=\"PostalCode\" xml:space=\"preserve\">\n    <value>Postleitzahl</value>\n  </data>\n  <data name=\"Purpose\" xml:space=\"preserve\">\n    <value>Zweck</value>\n  </data>\n  <data name=\"RenameExportSetup\" xml:space=\"preserve\">\n    <value>Export-Einstellung umbenennen</value>\n  </data>\n  <data name=\"SourceFileName\" xml:space=\"preserve\">\n    <value>Name von Quelldatei</value>\n  </data>\n  <data name=\"SourcePublisher\" xml:space=\"preserve\">\n    <value>Quelle (Herausgeber)</value>\n  </data>\n  <data name=\"SplitWallsColumsDuctsByLevel\" xml:space=\"preserve\">\n    <value>Wände, Stützen, Luftkanäle nach Ebene teilen</value>\n  </data>\n  <data name=\"State\" xml:space=\"preserve\">\n    <value>Region</value>\n  </data>\n  <data name=\"UnkownAltUIVer\" xml:space=\"preserve\">\n    <value>Unbekannte alternative Benutzeroberflächenversion</value>\n  </data>\n  <data name=\"UpdateExportSetups\" xml:space=\"preserve\">\n    <value>IFC Export Einstellung aktualisieren</value>\n  </data>\n  <data name=\"UpdateProjectInformation\" xml:space=\"preserve\">\n    <value>Projektinformationen aktualisieren</value>\n  </data>\n  <data name=\"UseCoarseTessellationForBReps\" xml:space=\"preserve\">\n    <value>Grobe Tesselierung für einige Breps und Profile verwenden</value>\n  </data>\n  <data name=\"UseFamilyAndTypeNameForReference\" xml:space=\"preserve\">\n    <value>Familien- und Typnamen als Referenz verwenden</value>\n  </data>\n  <data name=\"UserDefinedPurpose\" xml:space=\"preserve\">\n    <value>Benutzerdefinierte Absicht</value>\n  </data>\n  <data name=\"UseRoomBoundariesForRoomVolume\" xml:space=\"preserve\">\n    <value>2D-Raumbegrenzungen für Raumvolumen verwenden</value>\n  </data>\n  <data name=\"VersionNumber\" xml:space=\"preserve\">\n    <value>Versionsnummer</value>\n  </data>\n  <data name=\"ValueSetByExportOption\" xml:space=\"preserve\">\n    <value>…Wert wurde entsprechend der Exporteinstellungen gesetzt</value>\n  </data>\n  <data name=\"ValueSetOnExport\" xml:space=\"preserve\">\n    <value>…Wert wird beim Export gesetzt</value>\n  </data>\n  <data name=\"ClassificationAltName\" xml:space=\"preserve\">\n    <value>Optionaler gemeinsam genutzer Parameter für die Klassifzierung (Vorgabe: ClassificationCode)</value>\n  </data>\n  <data name=\"ClassificationSystemEdition\" xml:space=\"preserve\">\n    <value>Edition</value>\n  </data>\n  <data name=\"ClassificationSystemName\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"ClassificationSystemSource\" xml:space=\"preserve\">\n    <value>Quelle (Herausgeber)</value>\n  </data>\n  <data name=\"CloneSetup\" xml:space=\"preserve\">\n    <value>Erstelle eine neue Einstellung basierend auf der ausgewählten Einstellung</value>\n  </data>\n  <data name=\"CreateNewSetup\" xml:space=\"preserve\">\n    <value>Neue Export Einstellungen</value>\n  </data>\n  <data name=\"DeleteSelectedSetup\" xml:space=\"preserve\">\n    <value>Ausgewählte Einstellung löschen.</value>\n  </data>\n  <data name=\"Next\" xml:space=\"preserve\">\n    <value>Weiter…</value>\n  </data>\n  <data name=\"RenameSelectedSetup\" xml:space=\"preserve\">\n    <value>Ausgewählte Export-Einstellung umbenennen</value>\n  </data>\n  <data name=\"SaveSetupAndClose\" xml:space=\"preserve\">\n    <value>Speichern und Schließen</value>\n  </data>\n  <data name=\"General\" xml:space=\"preserve\">\n    <value>Allgemeine IFC-Eigenschaftensätze exportieren</value>\n  </data>\n  <data name=\"ExportRoomsInView\" xml:space=\"preserve\">\n    <value>Räume in 3D-Ansichten exportieren</value>\n  </data>\n  <data name=\"UseActiveViewForGeometry\" xml:space=\"preserve\">\n    <value>Aktive Ansicht beim Erstellen von Geomatrie verwenden</value>\n  </data>\n  <data name=\"MultipleFiles\" xml:space=\"preserve\">\n    <value>Mehrere Dateien</value>\n  </data>\n  <data name=\"TessellationDetails\" xml:space=\"preserve\">\n    <value>Detailgenauigkeit für einige Geometrieelemente</value>\n  </data>\n  <data name=\"DetailLevelExtraLow\" xml:space=\"preserve\">\n    <value>Sehr niedrig</value>\n  </data>\n  <data name=\"DetailLevelHigh\" xml:space=\"preserve\">\n    <value>Hoch</value>\n  </data>\n  <data name=\"DetailLevelLow\" xml:space=\"preserve\">\n    <value>Niedrig</value>\n  </data>\n  <data name=\"DetailLevelMedium\" xml:space=\"preserve\">\n    <value>Mittel</value>\n  </data>\n  <data name=\"DefaultFileName\" xml:space=\"preserve\">\n    <value>Projekt</value>\n  </data>\n  <data name=\"CurrentOptions\" xml:space=\"preserve\">\n    <value>Aktuelle Einstellungen</value>\n  </data>\n  <data name=\"ProjectToExport\" xml:space=\"preserve\">\n    <value>Zu exportierende Projekte</value>\n  </data>\n  <data name=\"SelectOneOrMoreProjects\" xml:space=\"preserve\">\n    <value>Bitte wählen Sie mindestens ein Projekt zum Exportieren aus</value>\n  </data>\n  <data name=\"IFCExportProcessGenericError\" xml:space=\"preserve\">\n    <value>Der IFC Export-Vorgang hat einen Fehler verursacht.</value>\n  </data>\n  <data name=\"IFCVersionSelected\" xml:space=\"preserve\">\n    <value>IFC-Version:</value>\n  </data>\n  <data name=\"DocNotSaved\" xml:space=\"preserve\">\n    <value>Datei nicht gespeichert</value>\n  </data>\n  <data name=\"IFC2x3FM\" xml:space=\"preserve\">\n    <value>IFC2x3 COBie 2.4 Design Deliverable View</value>\n  </data>\n  <data name=\"IFC4DTV\" xml:space=\"preserve\">\n    <value>IFC4 Design Transfer View</value>\n  </data>\n  <data name=\"IFC4RV\" xml:space=\"preserve\">\n    <value>IFC4 Reference View</value>\n  </data>\n  <data name=\"Help\" xml:space=\"preserve\">\n    <value>Wie gebe ich eine Export Einstellungen an?</value>\n  </data>\n  <data name=\"ExportSpecificSchedules\" xml:space=\"preserve\">\n    <value>Nur Bauteillisten mit IFC, Pset oder Allgemein im Titel exportieren</value>\n  </data>\n  <data name=\"AdditionalContent\" xml:space=\"preserve\">\n    <value>Zusätzliche Inhalte</value>\n  </data>\n  <data name=\"AddressInformation\" xml:space=\"preserve\">\n    <value>Projektadresse</value>\n  </data>\n  <data name=\"ClassificationSetting\" xml:space=\"preserve\">\n    <value>Klassifizierungseinstellungen</value>\n  </data>\n  <data name=\"ExportUserDefinedParameterMappingTable\" xml:space=\"preserve\">\n    <value>Parameterzuordnungstabelle exportieren</value>\n  </data>\n  <data name=\"FileHeaderInformation\" xml:space=\"preserve\">\n    <value>Kopfzeileninformationen…</value>\n  </data>\n  <data name=\"FileName\" xml:space=\"preserve\">\n    <value>Dateiname:</value>\n  </data>\n  <data name=\"IFCXMLZIPFiles\" xml:space=\"preserve\">\n    <value>Industry Foundation Classes XML zippé (.ifczip)|*.ifczip</value>\n  </data>\n  <data name=\"LevelOfDetail\" xml:space=\"preserve\">\n    <value>Detailgenauigkeit</value>\n  </data>\n  <data name=\"ModifySetupTitle\" xml:space=\"preserve\">\n    <value>Einstellungen ändern…</value>\n  </data>\n  <data name=\"FileExists\" xml:space=\"preserve\">\n    <value>{0} ist bereits vorhanden. Möchten Sie die Datei ersetzen?</value>\n  </data>\n  <data name=\"Setup\" xml:space=\"preserve\">\n    <value>Setup</value>\n  </data>\n  <data name=\"UserDefinedParameterMappingTable\" xml:space=\"preserve\">\n    <value>Benutzerdefinierte Parameterzuordnungstabelle</value>\n  </data>\n  <data name=\"ValidPathExists\" xml:space=\"preserve\">\n    <value>Pfad ist nicht vorhanden</value>\n  </data>\n  <data name=\"Version\" xml:space=\"preserve\">\n    <value>v.</value>\n  </data>\n  <data name=\"ExportIFC\" xml:space=\"preserve\">\n    <value>Exportieren</value>\n  </data>\n  <data name=\"BuildingDescription\" xml:space=\"preserve\">\n    <value>Gebäudebeschreibung</value>\n  </data>\n  <data name=\"BuildingName\" xml:space=\"preserve\">\n    <value>Gebäudename / Gebäudenummer</value>\n  </data>\n  <data name=\"BuildingType\" xml:space=\"preserve\">\n    <value>Gebäudeart</value>\n  </data>\n  <data name=\"CompanyEmail\" xml:space=\"preserve\">\n    <value>E-Mail des Unternehmens</value>\n  </data>\n  <data name=\"CompanyInfo\" xml:space=\"preserve\">\n    <value>Unternehmensinformation</value>\n  </data>\n  <data name=\"CompanyName\" xml:space=\"preserve\">\n    <value>Name des Unternehmens</value>\n  </data>\n  <data name=\"CompanyPhone\" xml:space=\"preserve\">\n    <value>Telefonnummer des Unternehmens</value>\n  </data>\n  <data name=\"CompanyType\" xml:space=\"preserve\">\n    <value>Art des Unternehmens</value>\n  </data>\n  <data name=\"ConfigurationFilePrefix\" xml:space=\"preserve\">\n    <value>IFC Konfiguration</value>\n  </data>\n  <data name=\"ER_Architecture\" xml:space=\"preserve\">\n    <value>Architektur Referenz Austausch</value>\n  </data>\n  <data name=\"ER_BuildingService\" xml:space=\"preserve\">\n    <value>Gebäudetechnik Referenz Austausch</value>\n  </data>\n  <data name=\"ER_Structural\" xml:space=\"preserve\">\n    <value>Tragwerk Referenz Austausch</value>\n  </data>\n  <data name=\"ExchangeRequirement\" xml:space=\"preserve\">\n    <value>Anforderung für Austausch</value>\n  </data>\n  <data name=\"ExportSelectedSetup\" xml:space=\"preserve\">\n    <value>Aktuelle Einstellungen speichern ...</value>\n  </data>\n  <data name=\"InternalCoordinates\" xml:space=\"preserve\">\n    <value>Interne Koordinaten</value>\n  </data>\n  <data name=\"KeepTessellatedAsTriangulation\" xml:space=\"preserve\">\n    <value>Tesselierte Geomatrie als Triangulation beibehalten</value>\n  </data>\n  <data name=\"LoadSetup\" xml:space=\"preserve\">\n    <value>Einstellungen importieren…</value>\n  </data>\n  <data name=\"ProjectBasePoint\" xml:space=\"preserve\">\n    <value>Basispunkt des Projektes</value>\n  </data>\n  <data name=\"ProjectDescription\" xml:space=\"preserve\">\n    <value>Projektbeschreibung</value>\n  </data>\n  <data name=\"ProjectInfo\" xml:space=\"preserve\">\n    <value>Projektinformation</value>\n  </data>\n  <data name=\"ProjectName\" xml:space=\"preserve\">\n    <value>Projektname</value>\n  </data>\n  <data name=\"ProjectOrigin\" xml:space=\"preserve\">\n    <value>Projektursprung</value>\n  </data>\n  <data name=\"ProjectPhase\" xml:space=\"preserve\">\n    <value>Phase des Projektes</value>\n  </data>\n  <data name=\"SharedCoordinates\" xml:space=\"preserve\">\n    <value>Aktuelle gemeinsam genutzte Koordinaten</value>\n  </data>\n  <data name=\"SiteDescription\" xml:space=\"preserve\">\n    <value>Beschreibung des Grundstücks</value>\n  </data>\n  <data name=\"SiteLocation\" xml:space=\"preserve\">\n    <value>Lage des Grundstücks</value>\n  </data>\n  <data name=\"SiteSurveyPoint\" xml:space=\"preserve\">\n    <value>Vermessungspunkt</value>\n  </data>\n  <data name=\"StreetAddress\" xml:space=\"preserve\">\n    <value>Straße</value>\n  </data>\n  <data name=\"AssignAddressToBuilding\" xml:space=\"preserve\">\n    <value>Adresse dem Gebäude zuweisen</value>\n  </data>\n  <data name=\"AssignAddressToSite\" xml:space=\"preserve\">\n    <value>Adresse dem Grundstück zuweisen</value>\n  </data>\n  <data name=\"IncludeSteelElements\" xml:space=\"preserve\">\n    <value>Stahlbauteile inkludieren</value>\n  </data>\n  <data name=\"UseOnlyTriangulation\" xml:space=\"preserve\">\n    <value>Triangulation erzwingen</value>\n  </data>\n  <data name=\"ER_ArchitectureShort\" xml:space=\"preserve\">\n    <value>Architecture</value>\n  </data>\n  <data name=\"ER_BuildingServiceShort\" xml:space=\"preserve\">\n    <value>BuildingService</value>\n  </data>\n  <data name=\"ER_StructuralShort\" xml:space=\"preserve\">\n    <value>Structural</value>\n  </data>\n  <data name=\"GeoReference\" xml:space=\"preserve\">\n    <value>Geografische Referenz</value>\n  </data>\n  <data name=\"HelpAssignIfcEntity\" xml:space=\"preserve\">\n    <value>Wie kann ich die IFC-Klasse und den vordefinierten Typ zuordnen?</value>\n  </data>\n  <data name=\"ExpandAll\" xml:space=\"preserve\">\n    <value>Alle ausklappen</value>\n  </data>\n  <data name=\"ExcludeEntitySelection\" xml:space=\"preserve\">\n    <value>Zu exportierende IFC-Klassen ...</value>\n  </data>\n  <data name=\"Elevation\" xml:space=\"preserve\">\n    <value>Höhe</value>\n  </data>\n  <data name=\"Eastings\" xml:space=\"preserve\">\n    <value>Rechtswert</value>\n  </data>\n  <data name=\"Northings\" xml:space=\"preserve\">\n    <value>Hochwert</value>\n  </data>\n  <data name=\"AngleTrueNorth\" xml:space=\"preserve\">\n    <value>Winkel vom geografischen Norden</value>\n  </data>\n  <data name=\"CollapseAll\" xml:space=\"preserve\">\n    <value>Alle zusammenklappen</value>\n  </data>\n  <data name=\"DeleteOldConfiguration\" xml:space=\"preserve\">\n    <value>Alte Konfiguration löschen</value>\n  </data>\n  <data name=\"GeodeticDatum\" xml:space=\"preserve\">\n    <value>Geodätisches Datum</value>\n  </data>\n  <data name=\"HelpSelectEntityForExport\" xml:space=\"preserve\">\n    <value>Wie wirken sich die Auswahl der zu exportierenden IFC-Klassen auf den Export?</value>\n  </data>\n  <data name=\"IFCSchemaVersion\" xml:space=\"preserve\">\n    <value>IFC Schema Version</value>\n  </data>\n  <data name=\"InternalCoordinatesInTN\" xml:space=\"preserve\">\n    <value>Interne Koordinaten an den geografischen Norden orientiert</value>\n  </data>\n  <data name=\"MultipleAssignments\" xml:space=\"preserve\">\n    <value>Mehrfache Zuweisung wurde bei den ausgewählten Objekten gefunden !</value>\n  </data>\n  <data name=\"NoPredefinedType\" xml:space=\"preserve\">\n    <value>IFC-Klasse besitzt keinen vordefinierten Typ</value>\n  </data>\n  <data name=\"Override\" xml:space=\"preserve\">\n    <value>Überschreiben</value>\n  </data>\n  <data name=\"PredefinedTypeSelection\" xml:space=\"preserve\">\n    <value>Auswahl des vordefinierten Typs</value>\n  </data>\n  <data name=\"ProjectedCRSDesc\" xml:space=\"preserve\">\n    <value>Beschreibung</value>\n  </data>\n  <data name=\"ProjectInTN\" xml:space=\"preserve\">\n    <value>Projektbasispunkt an den geografischen Norden orientiert</value>\n  </data>\n  <data name=\"ProjectSite\" xml:space=\"preserve\">\n    <value>Vermessungspunkt</value>\n  </data>\n  <data name=\"UseTypeNameOnlyForIfcType\" xml:space=\"preserve\">\n    <value>Den Typnamen nur für IFC-Typnamen verwenden</value>\n  </data>\n  <data name=\"UseVisibleRevitNameAsEntityName\" xml:space=\"preserve\">\n    <value>Sichtbaren Namen in Revit als IFC-Entitätsname verwenden</value>\n  </data>\n  <data name=\"Search\" xml:space=\"preserve\">\n    <value>Suchen</value>\n  </data>\n  <data name=\"SaveConfigurationChanges\" xml:space=\"preserve\">\n    <value>Änderungen in die IFC-Exporteinrichtung speichern</value>\n  </data>\n  <data name=\"SaveChanges\" xml:space=\"preserve\">\n    <value>Änderungen speichern</value>\n  </data>\n  <data name=\"ResetToOriginals\" xml:space=\"preserve\">\n    <value>Zurücksetzen</value>\n  </data>\n</root>"
  },
  {
    "path": "Source/IFCExporterUIOverride/Properties/Resources.fr.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ExportBaseQuantities\" xml:space=\"preserve\">\r\n    <value>Exporter les quantités de base</value>\r\n  </data>\r\n  <data name=\"ExportPlanViewElements\" xml:space=\"preserve\">\r\n    <value>Exporter les éléments de vues en plan 2D</value>\r\n  </data>\r\n  <data name=\"ExportRevitPropertySets\" xml:space=\"preserve\">\r\n    <value>Exporter les jeux de propriétés Revit</value>\r\n  </data>\r\n  <data name=\"FileType\" xml:space=\"preserve\">\r\n    <value>Type de fichier</value>\r\n  </data>\r\n  <data name=\"FileVersion\" xml:space=\"preserve\">\r\n    <value>Version du fichier</value>\r\n  </data>\r\n  <data name=\"IFCMVD2x3CV2\" xml:space=\"preserve\">\r\n    <value>IFC 2x3 Coordination View 2.0</value>\r\n  </data>\r\n  <data name=\"IFCMVDBCA\" xml:space=\"preserve\">\r\n    <value>IFC 2x2 Singapore BCA e-Plan Check</value>\r\n    <comment>Utilisé à Singapour pour la vérification des modèles par la Building Code Authority</comment>\r\n  </data>\r\n  <data name=\"IFCMVDGSA\" xml:space=\"preserve\">\r\n    <value>IFC 2x3 GSA Concept Design BIM 2010</value>\r\n    <comment>Utilisé par les Services de l'Administration Générale des Etats-Unis (GSA)</comment>\r\n  </data>\r\n  <data name=\"IFCVersion2x2\" xml:space=\"preserve\">\r\n    <value>IFC 2x2 Coordination View</value>\r\n  </data>\r\n  <data name=\"IFCVersion2x3\" xml:space=\"preserve\">\r\n    <value>IFC 2x3 Coordination View</value>\r\n  </data>\r\n  <data name=\"IFCVersionUnrecognized\" xml:space=\"preserve\">\r\n    <value>Version IFC non reconnue</value>\r\n  </data>\r\n  <data name=\"IncludeSpaceBoundaries\" xml:space=\"preserve\">\r\n    <value>Inclure les limites d'espaces</value>\r\n  </data>\r\n  <data name=\"InSessionConfiguration\" xml:space=\"preserve\">\r\n    <value>&lt;Réglages session en cours&gt;</value>\r\n  </data>\r\n  <data name=\"SpaceBoundaries\" xml:space=\"preserve\">\r\n    <value>Limites d'espaces</value>\r\n  </data>\r\n  <data name=\"SpaceBoundaries1stLevel\" xml:space=\"preserve\">\r\n    <value>1er étage</value>\r\n  </data>\r\n  <data name=\"SpaceBoundaries2ndLevel\" xml:space=\"preserve\">\r\n    <value>2ème étage</value>\r\n  </data>\r\n  <data name=\"SpaceBoundariesNone\" xml:space=\"preserve\">\r\n    <value>Aucun</value>\r\n  </data>\r\n  <data name=\"SpaceBoundariesUnrecognized\" xml:space=\"preserve\">\r\n    <value>Niveau de la limite d'espace non reconnue</value>\r\n  </data>\r\n  <data name=\"Use2DRoomBoundariesForRoomVolume\" xml:space=\"preserve\">\r\n    <value>Utiliser des contours de pièces 2D pour le volume de la pièce</value>\r\n  </data>\r\n  <data name=\"UseFamilyAndTypeNameForReferences\" xml:space=\"preserve\">\r\n    <value>Utiliser les noms de familles et de types en tant que références</value>\r\n  </data>\r\n  <data name=\"ExportVisibleElementsInView\" xml:space=\"preserve\">\r\n    <value>Exporter les éléments visibles dans la vue</value>\r\n  </data>\r\n  <data name=\"ExportPartsAsBuildingElements\" xml:space=\"preserve\">\r\n    <value>Exporter les éléments comme éléments du bâtiment</value>\r\n  </data>\r\n  <data name=\"ExportIFCCommonPropertySets\" xml:space=\"preserve\">\r\n    <value>Exporter les jeux de propriétés communs  IFC</value>\r\n  </data>\r\n  <data name=\"IFCMVDFMHandOver\" xml:space=\"preserve\">\r\n    <value>IFC 2x3 Basique - Vue pour gestion de patrimoine</value>\r\n  </data>\r\n  <data name=\"ExportBoundingBox\" xml:space=\"preserve\">\r\n    <value>Exporter la zone de définition</value>\r\n  </data>\r\n  <data name=\"ExportSchedulesAsPsets\" xml:space=\"preserve\">\r\n    <value>Exporter les nomenclatures en tant que jeux de propriétés</value>\r\n  </data>\r\n  <data name=\"IncludeIfcSiteElevation\" xml:space=\"preserve\">\r\n    <value>Inclure l'élévation de l'IFCSITE dans l'origine de placement du plan masse</value>\r\n  </data>\r\n  <data name=\"UseCoarseTessellation\" xml:space=\"preserve\">\r\n    <value>Utiliser une triangulation basique pour certains Breps</value>\r\n  </data>\r\n  <data name=\"StoreIFCGUID\" xml:space=\"preserve\">\r\n    <value>Stocker le GUID IFC dans un élément paramètre après export</value>\r\n  </data>\r\n  <data name=\"IFCMVD4CV2\" xml:space=\"preserve\">\r\n    <value>IFC 4 Coordination View 2.0</value>\r\n  </data>\r\n  <data name=\"PropertySets\" xml:space=\"preserve\">\r\n    <value>Export jeux de propriétés</value>\r\n  </data>\r\n  <data name=\"PropertySetsIFCCommon\" xml:space=\"preserve\">\r\n    <value>IFC common seulement</value>\r\n  </data>\r\n  <data name=\"PropertySetsInternalRevit\" xml:space=\"preserve\">\r\n    <value>Interne Revit seulement</value>\r\n  </data>\r\n  <data name=\"PropertySetsNone\" xml:space=\"preserve\">\r\n    <value>Aucun</value>\r\n  </data>\r\n  <data name=\"PropertySetsRevitPlusIFC\" xml:space=\"preserve\">\r\n    <value>Interne Revit, IFC Common</value>\r\n  </data>\r\n  <data name=\"PropertySetsSchedules\" xml:space=\"preserve\">\r\n    <value>Nomenclatures seulement</value>\r\n  </data>\r\n  <data name=\"PropertySetsSchedulesPlusRevit\" xml:space=\"preserve\">\r\n    <value>Interne Revit, nomenclatures</value>\r\n  </data>\r\n  <data name=\"PropertySetsSchedulesPlusIFC\" xml:space=\"preserve\">\r\n    <value>IFC common, nomenclatures</value>\r\n  </data>\r\n  <data name=\"PropertySetsSchedulesPlusRevitPlusIFC\" xml:space=\"preserve\">\r\n    <value>Interne Revit, IFC common, nomenclatures</value>\r\n  </data>\r\n  <data name=\"PropertySetsUnrecognized\" xml:space=\"preserve\">\r\n    <value>Jeux de propriétés non reconnus</value>\r\n  </data>\r\n  <data name=\"ActivePhase\" xml:space=\"preserve\">\r\n    <value>Phase à exporter</value>\r\n  </data>\r\n  <data name=\"DefaultPhase\" xml:space=\"preserve\">\r\n    <value>Phase par défaut à exporter</value>\r\n  </data>\r\n  <data name=\"Default\" xml:space=\"preserve\">\r\n    <value>Défaut ({0})</value>\r\n  </data>\r\n  <data name=\"PropertySetsIFCCommonPlusUserDefined\" xml:space=\"preserve\">\r\n    <value>IFC common, défini par l'utilisateur</value>\r\n  </data>\r\n  <data name=\"PropertySetsInternalRevitPlusUserDefined\" xml:space=\"preserve\">\r\n    <value>Interne Revit, défini par l'utilisateur</value>\r\n  </data>\r\n  <data name=\"PropertySetsRevitPlusIFCPlusUserDefined\" xml:space=\"preserve\">\r\n    <value>Interne Revit, IFC Common, défini par l'utilsateur</value>\r\n  </data>\r\n  <data name=\"PropertySetsSchedulesPlusIFCPlusUserDefined\" xml:space=\"preserve\">\r\n    <value>IFC common, nomenclatures, définies par l'utilisateur</value>\r\n  </data>\r\n  <data name=\"PropertySetsSchedulesPlusRevitPlusIFCPlusUserDefined\" xml:space=\"preserve\">\r\n    <value>Interne Revit, IFC Common,nomenclatures, définies par l'utilisateur</value>\r\n  </data>\r\n  <data name=\"PropertySetsSchedulesPlusRevitPlusUserDefined\" xml:space=\"preserve\">\r\n    <value>Interne Revit, nomenclatures, définies par l'utilisateur</value>\r\n  </data>\r\n  <data name=\"PropertySetsSchedulesPlusUserDefined\" xml:space=\"preserve\">\r\n    <value>Nomenclatures, définies par l'utilisateur</value>\r\n  </data>\r\n  <data name=\"PropertySetsUserDefined\" xml:space=\"preserve\">\r\n    <value>Défini par l'utilisateur seulement</value>\r\n  </data>\r\n  <data name=\"ExportLinkedFiles\" xml:space=\"preserve\">\r\n    <value>Exporter les fichiers liés comme des fichiers IFCs séparés</value>\r\n  </data>\r\n  <data name=\"ExportUserDefinedPsetsFileName\" xml:space=\"preserve\">\r\n    <value>Nom du fichier des jeux de propriétés définis par l'utilisateur</value>\r\n  </data>\r\n  <data name=\"UserDefinedParameterSets\" xml:space=\"preserve\">\r\n    <value>Jeux de paramètres personnalisés</value>\r\n    <comment>Jeux de paramètres définis par l'utilisateur</comment>\r\n  </data>\r\n  <data name=\"IFCExportProcessError\" xml:space=\"preserve\">\r\n    <value>Une erreur est survenue lors du processus d'export IFC pour: {0}.</value>\r\n  </data>\r\n  <data name=\"LinkInstanceExportCantCreateDoc\" xml:space=\"preserve\">\r\n    <value>Un document temporaire n'a pu être créé pour exporter l'(les)instance(s) liée(s) ayant pour ids: {0}</value>\r\n  </data>\r\n  <data name=\"LinkInstanceExportCantFindDoc\" xml:space=\"preserve\">\r\n    <value>Le document pour l'(les) instance(s) liée(s) n'a pu être trouvé pour les ids: {0}.</value>\r\n  </data>\r\n  <data name=\"LinkInstanceExportErrorMain\" xml:space=\"preserve\">\r\n    <value>{0} L'(les) instance(s) liée(s) n'a(ont) pu être exportée(s).</value>\r\n  </data>\r\n  <data name=\"LinkInstanceExportErrorPath\" xml:space=\"preserve\">\r\n    <value>Le chemin pour l'(les) instance(s) liée(s) n'existai(en)t par pour les ids: {0}.</value>\r\n  </data>\r\n  <data name=\"LinkInstanceExportNonConformal\" xml:space=\"preserve\">\r\n    <value>L'(les) instance(s) liée(s) étaient non-conformes pour les ids: {0}.</value>\r\n  </data>\r\n  <data name=\"LinkInstanceExportHasReflection\" xml:space=\"preserve\">\r\n    <value>L'(les) instance(s) liée(s) étaient en miroir (symétrie inversée) pour les ids: {0}.  Afin d'exporter une instance liée en miroir inversé, faites un miroir de la géométrie liée et liez-là dans le nouveau document.</value>\r\n  </data>\r\n  <data name=\"LinkInstanceExportScaled\" xml:space=\"preserve\">\r\n    <value>L'(les) instance(s) liée(s) étaient homotétiées pour les ids: {0}.</value>\r\n  </data>\r\n  <data name=\"IFCExport\" xml:space=\"preserve\">\r\n    <value>Exporter IFC</value>\r\n  </data>\r\n  <data name=\"Classification\" xml:space=\"preserve\">\r\n    <value>Réglages classification...</value>\r\n  </data>\r\n  <data name=\"DistributionPoint\" xml:space=\"preserve\">\r\n    <value>Point de distribution</value>\r\n  </data>\r\n  <data name=\"Home\" xml:space=\"preserve\">\r\n    <value>Début</value>\r\n  </data>\r\n  <data name=\"InternalAddress\" xml:space=\"preserve\">\r\n    <value>Adresse interne</value>\r\n  </data>\r\n  <data name=\"ManditoryFieldsNotEmpty\" xml:space=\"preserve\">\r\n    <value>Les champs obligatoires tels que nom, source ou éditeur, et édition ne peuvent être vides.</value>\r\n  </data>\r\n  <data name=\"Office\" xml:space=\"preserve\">\r\n    <value>Bureau</value>\r\n  </data>\r\n  <data name=\"Site\" xml:space=\"preserve\">\r\n    <value>Terrain</value>\r\n  </data>\r\n  <data name=\"UpdateProjectAddress\" xml:space=\"preserve\">\r\n    <value>Mettre à jour adresse de projet</value>\r\n  </data>\r\n  <data name=\"UserDefined\" xml:space=\"preserve\">\r\n    <value>Défini par l'utilisateur</value>\r\n  </data>\r\n  <data name=\"Address\" xml:space=\"preserve\">\r\n    <value>Adresse du projet...</value>\r\n  </data>\r\n  <data name=\"AddressLine1\" xml:space=\"preserve\">\r\n    <value>Adresse 1</value>\r\n  </data>\r\n  <data name=\"AddressLine2\" xml:space=\"preserve\">\r\n    <value>Adresse 2</value>\r\n  </data>\r\n  <data name=\"Advanced\" xml:space=\"preserve\">\r\n    <value>Avancé</value>\r\n  </data>\r\n  <data name=\"AltUIVer\" xml:space=\"preserve\">\r\n    <value>Interface alternative d'export</value>\r\n  </data>\r\n  <data name=\"ApplicationName\" xml:space=\"preserve\">\r\n    <value>Nom de l'application</value>\r\n  </data>\r\n  <data name=\"Assignments\" xml:space=\"preserve\">\r\n    <value>Assignations…</value>\r\n  </data>\r\n  <data name=\"Authorization\" xml:space=\"preserve\">\r\n    <value>Autorisation</value>\r\n  </data>\r\n  <data name=\"AuthorsEMail\" xml:space=\"preserve\">\r\n    <value>E-mail de l'auteur</value>\r\n  </data>\r\n  <data name=\"AuthorsName\" xml:space=\"preserve\">\r\n    <value>Nom de l'auteur</value>\r\n  </data>\r\n  <data name=\"Browse\" xml:space=\"preserve\">\r\n    <value>Parcourir ...</value>\r\n  </data>\r\n  <data name=\"Cancel\" xml:space=\"preserve\">\r\n    <value>Annuler</value>\r\n  </data>\r\n  <data name=\"City\" xml:space=\"preserve\">\r\n    <value>Ville</value>\r\n  </data>\r\n  <data name=\"ClassificationFieldName\" xml:space=\"preserve\">\r\n    <value>Nom du champ de classification</value>\r\n  </data>\r\n  <data name=\"Country\" xml:space=\"preserve\">\r\n    <value>Pays</value>\r\n  </data>\r\n  <data name=\"CurrentSelectedSetup\" xml:space=\"preserve\">\r\n    <value>Paramétrage d'export courant</value>\r\n  </data>\r\n  <data name=\"DeleteOldSetups\" xml:space=\"preserve\">\r\n    <value>Supprimer les anciens paramétrages d'export IFC</value>\r\n  </data>\r\n  <data name=\"Description\" xml:space=\"preserve\">\r\n    <value>Description</value>\r\n  </data>\r\n  <data name=\"DocumentationLocation\" xml:space=\"preserve\">\r\n    <value>Emplacement documentation</value>\r\n  </data>\r\n  <data name=\"Edition\" xml:space=\"preserve\">\r\n    <value>Edition</value>\r\n  </data>\r\n  <data name=\"EditionDate\" xml:space=\"preserve\">\r\n    <value>Date d'édition</value>\r\n  </data>\r\n  <data name=\"Export\" xml:space=\"preserve\">\r\n    <value>Exporter…</value>\r\n  </data>\r\n  <data name=\"ExportElementsVisibleInView\" xml:space=\"preserve\">\r\n    <value>Exporter uniquement les éléments visibles  dans la vue actuelle</value>\r\n  </data>\r\n  <data name=\"ExportInternalRevitPropertySets\" xml:space=\"preserve\">\r\n    <value>Exporter les jeux de propriétés internes Revit</value>\r\n  </data>\r\n  <data name=\"ExportSchedulesAsPropertySets\" xml:space=\"preserve\">\r\n    <value>Exporter les nomenclatures comme des jeux de propriétés</value>\r\n  </data>\r\n  <data name=\"ExportSolidModelsWhenPossible\" xml:space=\"preserve\">\r\n    <value>Autoriser l'utilisation de représentation de \"modèles solides\" mixtes</value>\r\n  </data>\r\n  <data name=\"ExportUserDefinedPropertySets\" xml:space=\"preserve\">\r\n    <value>Exporter les jeux de propriétés définis par l'utilisateur</value>\r\n  </data>\r\n  <data name=\"FileDescription\" xml:space=\"preserve\">\r\n    <value>Description du fichier</value>\r\n  </data>\r\n  <data name=\"FileHeader\" xml:space=\"preserve\">\r\n    <value>En-tête fichier</value>\r\n  </data>\r\n  <data name=\"FileSchema\" xml:space=\"preserve\">\r\n    <value>Schéma du fichier</value>\r\n  </data>\r\n  <data name=\"IFC\" xml:space=\"preserve\">\r\n    <value>IFC</value>\r\n  </data>\r\n  <data name=\"IFCAssignments\" xml:space=\"preserve\">\r\n    <value>Assignations IFC</value>\r\n  </data>\r\n  <data name=\"IFCExt\" xml:space=\"preserve\">\r\n    <value>ifc</value>\r\n  </data>\r\n  <data name=\"IFCFiles\" xml:space=\"preserve\">\r\n    <value>IFC-SPF|*.ifc</value>\r\n  </data>\r\n  <data name=\"IFCMVDFMExtendedHandOver\" xml:space=\"preserve\">\r\n    <value>IFC2x3 Extended - Vue gestion de patrimoine</value>\r\n  </data>\r\n  <data name=\"IFCUnknown\" xml:space=\"preserve\">\r\n    <value>Option de type de fichier non reconnue</value>\r\n  </data>\r\n  <data name=\"IFCVersion\" xml:space=\"preserve\">\r\n    <value>Version IFC</value>\r\n  </data>\r\n  <data name=\"IFCXML\" xml:space=\"preserve\">\r\n    <value>IFC XML</value>\r\n  </data>\r\n  <data name=\"IFCXMLExt\" xml:space=\"preserve\">\r\n    <value>ifcxml</value>\r\n  </data>\r\n  <data name=\"IFCXMLFiles\" xml:space=\"preserve\">\r\n    <value>Industry Foundation Classes XML(.ifcxml)|*.ifcxml</value>\r\n  </data>\r\n  <data name=\"IFCXMLZIP\" xml:space=\"preserve\">\r\n    <value>IFC XML zippé</value>\r\n  </data>\r\n  <data name=\"IFCXMLZIPExt\" xml:space=\"preserve\">\r\n    <value>ifczip</value>\r\n  </data>\r\n  <data name=\"IFCZIP\" xml:space=\"preserve\">\r\n    <value>IFC zippé</value>\r\n  </data>\r\n  <data name=\"IFCZIPExt\" xml:space=\"preserve\">\r\n    <value>ifczip</value>\r\n  </data>\r\n  <data name=\"IFCZIPFiles\" xml:space=\"preserve\">\r\n    <value>Industry Foundation Classes zippé (.ifczip)|*.ifczip</value>\r\n  </data>\r\n  <data name=\"InternalLocation\" xml:space=\"preserve\">\r\n    <value>Coordonnées internes</value>\r\n  </data>\r\n  <data name=\"ModifySetup\" xml:space=\"preserve\">\r\n    <value>Modifier réglages…</value>\r\n  </data>\r\n  <data name=\"Name\" xml:space=\"preserve\">\r\n    <value>Nom</value>\r\n  </data>\r\n  <data name=\"NewExportSetup\" xml:space=\"preserve\">\r\n    <value>Nouveau paramétrage d'export</value>\r\n  </data>\r\n  <data name=\"NewName\" xml:space=\"preserve\">\r\n    <value>Nouveau nom</value>\r\n  </data>\r\n  <data name=\"OK\" xml:space=\"preserve\">\r\n    <value>OK</value>\r\n  </data>\r\n  <data name=\"Options\" xml:space=\"preserve\">\r\n    <value>Options</value>\r\n  </data>\r\n  <data name=\"Organization\" xml:space=\"preserve\">\r\n    <value>Société</value>\r\n  </data>\r\n  <data name=\"OriginalName\" xml:space=\"preserve\">\r\n    <value>Nom d'origine</value>\r\n  </data>\r\n  <data name=\"PhaseToExport\" xml:space=\"preserve\">\r\n    <value>Phase pour export</value>\r\n  </data>\r\n  <data name=\"POBox\" xml:space=\"preserve\">\r\n    <value>Boite postale</value>\r\n  </data>\r\n  <data name=\"PostalCode\" xml:space=\"preserve\">\r\n    <value>Code postal</value>\r\n  </data>\r\n  <data name=\"Purpose\" xml:space=\"preserve\">\r\n    <value>But</value>\r\n  </data>\r\n  <data name=\"RenameExportSetup\" xml:space=\"preserve\">\r\n    <value>Renommer paramétrages d'export</value>\r\n  </data>\r\n  <data name=\"SourceFileName\" xml:space=\"preserve\">\r\n    <value>Nom du fichier source</value>\r\n  </data>\r\n  <data name=\"SourcePublisher\" xml:space=\"preserve\">\r\n    <value>Source (Editeur)</value>\r\n  </data>\r\n  <data name=\"SplitWallsColumsDuctsByLevel\" xml:space=\"preserve\">\r\n    <value>Scinder les murs, poteaux, gaines par niveau</value>\r\n  </data>\r\n  <data name=\"State\" xml:space=\"preserve\">\r\n    <value>Etat/Région</value>\r\n  </data>\r\n  <data name=\"UnkownAltUIVer\" xml:space=\"preserve\">\r\n    <value>Version d'interface alternative d'export inconnue</value>\r\n  </data>\r\n  <data name=\"UpdateExportSetups\" xml:space=\"preserve\">\r\n    <value>Mettre à jour paramétrages d'exports</value>\r\n  </data>\r\n  <data name=\"UpdateProjectInformation\" xml:space=\"preserve\">\r\n    <value>Mettre à jour informations du projet</value>\r\n  </data>\r\n  <data name=\"UseCoarseTessellationForBReps\" xml:space=\"preserve\">\r\n    <value>Utiliser une triangulation basse pour certains BReps et profils</value>\r\n  </data>\r\n  <data name=\"UseFamilyAndTypeNameForReference\" xml:space=\"preserve\">\r\n    <value>Utiliser la famille et le nom du type en référence</value>\r\n  </data>\r\n  <data name=\"UserDefinedPurpose\" xml:space=\"preserve\">\r\n    <value>Objectif défini par utilisateur</value>\r\n  </data>\r\n  <data name=\"UseRoomBoundariesForRoomVolume\" xml:space=\"preserve\">\r\n    <value>Utiliser des contours de pièces 2D pour les volumes de pièces</value>\r\n  </data>\r\n  <data name=\"VersionNumber\" xml:space=\"preserve\">\r\n    <value>Numéro de version</value>\r\n  </data>\r\n  <data name=\"ValueSetByExportOption\" xml:space=\"preserve\">\r\n    <value>...la valeur est définie en fonction des paramètres de l'export</value>\r\n  </data>\r\n  <data name=\"ValueSetOnExport\" xml:space=\"preserve\">\r\n    <value>...La valeur sera définie au moment de l'export</value>\r\n  </data>\r\n  <data name=\"ClassificationAltName\" xml:space=\"preserve\">\r\n    <value>Le nom de paramètre partagé alternatif optionnel pour cette classification (défaut: ClassificationCode)</value>\r\n  </data>\r\n  <data name=\"ClassificationSystemEdition\" xml:space=\"preserve\">\r\n    <value>Numéro d'Edition du système de classification</value>\r\n  </data>\r\n  <data name=\"ClassificationSystemName\" xml:space=\"preserve\">\r\n    <value>Nom du système de classification</value>\r\n  </data>\r\n  <data name=\"ClassificationSystemSource\" xml:space=\"preserve\">\r\n    <value>Source ou éditeur du système de classification</value>\r\n  </data>\r\n  <data name=\"CloneSetup\" xml:space=\"preserve\">\r\n    <value>Crée un nouveau réglage sur la base du réglage sélectionné.</value>\r\n  </data>\r\n  <data name=\"CreateNewSetup\" xml:space=\"preserve\">\r\n    <value>Crée un nouveau réglage.</value>\r\n  </data>\r\n  <data name=\"DeleteSelectedSetup\" xml:space=\"preserve\">\r\n    <value>Supprime le réglage sélectionné.</value>\r\n  </data>\r\n  <data name=\"Next\" xml:space=\"preserve\">\r\n    <value>Suivant...</value>\r\n  </data>\r\n  <data name=\"RenameSelectedSetup\" xml:space=\"preserve\">\r\n    <value>Renommez le réglage sélectionné.</value>\r\n  </data>\r\n  <data name=\"SaveSetupAndClose\" xml:space=\"preserve\">\r\n    <value>Enregistrer réglages &amp;amp; Fermer</value>\r\n  </data>\r\n  <data name=\"General\" xml:space=\"preserve\">\r\n    <value>Général</value>\r\n  </data>\r\n  <data name=\"ExportRoomsInView\" xml:space=\"preserve\">\r\n    <value>Exporter les pièces dans les vues 3D</value>\r\n  </data>\r\n  <data name=\"UseActiveViewForGeometry\" xml:space=\"preserve\">\r\n    <value>Utiliser la vue active pour la création de la géométrie</value>\r\n  </data>\r\n  <data name=\"MultipleFiles\" xml:space=\"preserve\">\r\n    <value>Plusieurs fichiers</value>\r\n  </data>\r\n  <data name=\"TessellationDetails\" xml:space=\"preserve\">\r\n    <value>Niveau de détail de la géométrie de l'élément</value>\r\n  </data>\r\n  <data name=\"DetailLevelExtraLow\" xml:space=\"preserve\">\r\n    <value>Très bas</value>\r\n  </data>\r\n  <data name=\"DetailLevelHigh\" xml:space=\"preserve\">\r\n    <value>Élevé</value>\r\n  </data>\r\n  <data name=\"DetailLevelLow\" xml:space=\"preserve\">\r\n    <value>Bas</value>\r\n  </data>\r\n  <data name=\"DetailLevelMedium\" xml:space=\"preserve\">\r\n    <value>Moyen</value>\r\n  </data>\r\n  <data name=\"DefaultFileName\" xml:space=\"preserve\">\r\n    <value>Projet</value>\r\n  </data>\r\n  <data name=\"CurrentOptions\" xml:space=\"preserve\">\r\n    <value>Options actuelles:</value>\r\n  </data>\r\n  <data name=\"ProjectToExport\" xml:space=\"preserve\">\r\n    <value>Projets à exporter:</value>\r\n  </data>\r\n  <data name=\"SelectOneOrMoreProjects\" xml:space=\"preserve\">\r\n    <value>Sélectionner au moins un projet à exporter SVP.</value>\r\n  </data>\r\n  <data name=\"IFCExportProcessGenericError\" xml:space=\"preserve\">\r\n    <value>Une erreur est survenue lors du processus d'export IFC.</value>\r\n  </data>\r\n  <data name=\"IFCVersionSelected\" xml:space=\"preserve\">\r\n    <value>Version IFC:</value>\r\n  </data>\r\n  <data name=\"DocNotSaved\" xml:space=\"preserve\">\r\n    <value>Document non sauvegardé</value>\r\n  </data>\r\n  <data name=\"IFC2x3FM\" xml:space=\"preserve\">\r\n    <value>IFC2x3 COBie 2.4 Design Deliverable View</value>\r\n  </data>\r\n  <data name=\"IFC4DTV\" xml:space=\"preserve\">\r\n    <value>IFC4 Design Transfer View</value>\r\n  </data>\r\n  <data name=\"IFC4RV\" xml:space=\"preserve\">\r\n    <value>IFC4 Reference View</value>\r\n  </data>\r\n  <data name=\"Help\" xml:space=\"preserve\">\r\n    <value>Comment puis-je spécifier une configuration d'export?</value>\r\n  </data>\r\n  <data name=\"ExportSpecificSchedules\" xml:space=\"preserve\">\r\n    <value>Exporter seulement les nomenclatures contenant IFC, Pset ou Common dans leur titre</value>\r\n  </data>\r\n  <data name=\"AdditionalContent\" xml:space=\"preserve\">\r\n    <value>Contenu additionnel</value>\r\n  </data>\r\n  <data name=\"AddressInformation\" xml:space=\"preserve\">\r\n    <value>Adresse du projet</value>\r\n  </data>\r\n  <data name=\"ClassificationSetting\" xml:space=\"preserve\">\r\n    <value>Paramétrages de classification</value>\r\n  </data>\r\n  <data name=\"ExportUserDefinedParameterMappingTable\" xml:space=\"preserve\">\r\n    <value>Exporter table de correspondance de paramètre</value>\r\n  </data>\r\n  <data name=\"FileHeaderInformation\" xml:space=\"preserve\">\r\n    <value>Information d'en-tête de fichier…</value>\r\n  </data>\r\n  <data name=\"FileName\" xml:space=\"preserve\">\r\n    <value>Nom du fichier:</value>\r\n  </data>\r\n  <data name=\"IFCXMLZIPFiles\" xml:space=\"preserve\">\r\n    <value>Industry Foundation Classes XML zippé (.ifczip)|*.ifczip</value>\r\n  </data>\r\n  <data name=\"LevelOfDetail\" xml:space=\"preserve\">\r\n    <value>Niveau de détail</value>\r\n  </data>\r\n  <data name=\"ModifySetupTitle\" xml:space=\"preserve\">\r\n    <value>Modifier réglages</value>\r\n  </data>\r\n  <data name=\"FileExists\" xml:space=\"preserve\">\r\n    <value>{0} existe déjà.  Voulez-vous le remplacer ?</value>\r\n  </data>\r\n  <data name=\"Setup\" xml:space=\"preserve\">\r\n    <value>Setup</value>\r\n    <comment>NOTE: This needs to be localized as {0} Paramétrage</comment>\r\n  </data>\r\n  <data name=\"UserDefinedParameterMappingTable\" xml:space=\"preserve\">\r\n    <value>Table de correspondance de paramètres d’export</value>\r\n  </data>\r\n  <data name=\"ValidPathExists\" xml:space=\"preserve\">\r\n    <value>Le chemin d’accès n’existe pas</value>\r\n  </data>\r\n  <data name=\"Version\" xml:space=\"preserve\">\r\n    <value>v.</value>\r\n  </data>\r\n  <data name=\"ExportIFC\" xml:space=\"preserve\">\r\n    <value>Exporter IFC</value>\r\n  </data>\r\n  <data name=\"BuildingDescription\" xml:space=\"preserve\">\r\n    <value>Description du bâtiment</value>\r\n  </data>\r\n  <data name=\"BuildingName\" xml:space=\"preserve\">\r\n    <value>Nom du bâtiment/Numéro</value>\r\n  </data>\r\n  <data name=\"BuildingType\" xml:space=\"preserve\">\r\n    <value>Type de bâtiment</value>\r\n  </data>\r\n  <data name=\"CompanyEmail\" xml:space=\"preserve\">\r\n    <value>E-mail Société</value>\r\n  </data>\r\n  <data name=\"CompanyInfo\" xml:space=\"preserve\">\r\n    <value>Informations sur la Société</value>\r\n  </data>\r\n  <data name=\"CompanyName\" xml:space=\"preserve\">\r\n    <value>Nom de la société</value>\r\n  </data>\r\n  <data name=\"CompanyPhone\" xml:space=\"preserve\">\r\n    <value>Téléphone Société</value>\r\n  </data>\r\n  <data name=\"CompanyType\" xml:space=\"preserve\">\r\n    <value>Type de société</value>\r\n  </data>\r\n  <data name=\"ConfigurationFilePrefix\" xml:space=\"preserve\">\r\n    <value>Configuration IFC</value>\r\n  </data>\r\n  <data name=\"ER_Architecture\" xml:space=\"preserve\">\r\n    <value>Echange de référence Architectural</value>\r\n  </data>\r\n  <data name=\"ER_BuildingService\" xml:space=\"preserve\">\r\n    <value>Echange de référence MEP</value>\r\n  </data>\r\n  <data name=\"ER_Structural\" xml:space=\"preserve\">\r\n    <value>Echange de référence Structurel</value>\r\n  </data>\r\n  <data name=\"ExchangeRequirement\" xml:space=\"preserve\">\r\n    <value>Exigences d’échange</value>\r\n  </data>\r\n  <data name=\"ExportSelectedSetup\" xml:space=\"preserve\">\r\n    <value>Sauvegarder configuration sélectionnée</value>\r\n  </data>\r\n  <data name=\"InternalCoordinates\" xml:space=\"preserve\">\r\n    <value>Système de coordonnées interne</value>\r\n  </data>\r\n  <data name=\"KeepTessellatedAsTriangulation\" xml:space=\"preserve\">\r\n    <value>Garder la géométrie tessellée en tant que triangulation</value>\r\n  </data>\r\n  <data name=\"LoadSetup\" xml:space=\"preserve\">\r\n    <value>Importer configuration</value>\r\n  </data>\r\n  <data name=\"ProjectBasePoint\" xml:space=\"preserve\">\r\n    <value>Point de base du projet</value>\r\n  </data>\r\n  <data name=\"ProjectDescription\" xml:space=\"preserve\">\r\n    <value>Description du projet</value>\r\n  </data>\r\n  <data name=\"ProjectInfo\" xml:space=\"preserve\">\r\n    <value>Informations sur le projet</value>\r\n  </data>\r\n  <data name=\"ProjectName\" xml:space=\"preserve\">\r\n    <value>Nom du projet</value>\r\n  </data>\r\n  <data name=\"ProjectOrigin\" xml:space=\"preserve\">\r\n    <value>Origine Projet</value>\r\n  </data>\r\n  <data name=\"ProjectPhase\" xml:space=\"preserve\">\r\n    <value>Phase du projet</value>\r\n  </data>\r\n  <data name=\"SharedCoordinates\" xml:space=\"preserve\">\r\n    <value>Coordonnées partagées actuelles</value>\r\n  </data>\r\n  <data name=\"SiteDescription\" xml:space=\"preserve\">\r\n    <value>Description du site</value>\r\n  </data>\r\n  <data name=\"SiteLocation\" xml:space=\"preserve\">\r\n    <value>Adresse du site</value>\r\n  </data>\r\n  <data name=\"SiteSurveyPoint\" xml:space=\"preserve\">\r\n    <value>Point de topographie</value>\r\n  </data>\r\n  <data name=\"StreetAddress\" xml:space=\"preserve\">\r\n    <value>Adresse</value>\r\n  </data>\r\n  <data name=\"AssignAddressToBuilding\" xml:space=\"preserve\">\r\n    <value>Définir l’adresse du bâtiment</value>\r\n  </data>\r\n  <data name=\"AssignAddressToSite\" xml:space=\"preserve\">\r\n    <value>Définir l’adresse du terrain</value>\r\n  </data>\r\n  <data name=\"IncludeSteelElements\" xml:space=\"preserve\">\r\n    <value>Intègre des éléments acier</value>\r\n  </data>\r\n  <data name=\"UseOnlyTriangulation\" xml:space=\"preserve\">\r\n    <value>Garder la tessellation de la géométrie en tant que triangulation</value>\r\n  </data>\r\n  <data name=\"ER_ArchitectureShort\" xml:space=\"preserve\">\r\n    <value>Architecture</value>\r\n  </data>\r\n  <data name=\"ER_BuildingServiceShort\" xml:space=\"preserve\">\r\n    <value>BuildingService</value>\r\n  </data>\r\n  <data name=\"ER_StructuralShort\" xml:space=\"preserve\">\r\n    <value>Structural</value>\r\n  </data>\r\n  <data name=\"AngleTrueNorth\" xml:space=\"preserve\">\r\n    <value>Angle depuis le nord géographique</value>\r\n  </data>\r\n  <data name=\"CollapseAll\" xml:space=\"preserve\">\r\n    <value>Tout refermer</value>\r\n  </data>\r\n  <data name=\"DeleteOldConfiguration\" xml:space=\"preserve\">\r\n    <value>Supprimer l'ancienne configuration</value>\r\n  </data>\r\n  <data name=\"Eastings\" xml:space=\"preserve\">\r\n    <value>Coordonnées Est</value>\r\n  </data>\r\n  <data name=\"Elevation\" xml:space=\"preserve\">\r\n    <value>Façade</value>\r\n  </data>\r\n  <data name=\"ExcludeEntitySelection\" xml:space=\"preserve\">\r\n    <value>Entités à exporter...</value>\r\n  </data>\r\n  <data name=\"ExpandAll\" xml:space=\"preserve\">\r\n    <value>Tout déployer</value>\r\n  </data>\r\n  <data name=\"GeodeticDatum\" xml:space=\"preserve\">\r\n    <value>Données géodésiques</value>\r\n  </data>\r\n  <data name=\"GeoReference\" xml:space=\"preserve\">\r\n    <value>Référence géographique</value>\r\n  </data>\r\n  <data name=\"HelpAssignIfcEntity\" xml:space=\"preserve\">\r\n    <value>Comment attribuer une entité IFC et un type prédéfini ?</value>\r\n  </data>\r\n  <data name=\"HelpSelectEntityForExport\" xml:space=\"preserve\">\r\n    <value>Comment les sélections d’entités IFC affectent-elles l’export ?</value>\r\n  </data>\r\n  <data name=\"IFCSchemaVersion\" xml:space=\"preserve\">\r\n    <value>Version du schéma IFC</value>\r\n  </data>\r\n  <data name=\"InternalCoordinatesInTN\" xml:space=\"preserve\">\r\n    <value>Origine interne orientée vers le nord géographique</value>\r\n  </data>\r\n  <data name=\"MultipleAssignments\" xml:space=\"preserve\">\r\n    <value>Affectations multiples trouvées dans les objets sélectionnés.</value>\r\n  </data>\r\n  <data name=\"NoPredefinedType\" xml:space=\"preserve\">\r\n    <value>L'entité n'a pas de type prédéfini</value>\r\n  </data>\r\n  <data name=\"Northings\" xml:space=\"preserve\">\r\n    <value>Coordonnées Nord</value>\r\n  </data>\r\n  <data name=\"Override\" xml:space=\"preserve\">\r\n    <value>Ecraser</value>\r\n  </data>\r\n  <data name=\"PredefinedTypeSelection\" xml:space=\"preserve\">\r\n    <value>Sélection du type prédéfini</value>\r\n  </data>\r\n  <data name=\"ProjectedCRSDesc\" xml:space=\"preserve\">\r\n    <value>Description</value>\r\n  </data>\r\n  <data name=\"ProjectInTN\" xml:space=\"preserve\">\r\n    <value>Point de base du projet orienté vers le nord géographique</value>\r\n  </data>\r\n  <data name=\"ProjectSite\" xml:space=\"preserve\">\r\n    <value>Site du projet</value>\r\n  </data>\r\n  <data name=\"ResetToOriginals\" xml:space=\"preserve\">\r\n    <value>Réinitialiser</value>\r\n  </data>\r\n  <data name=\"SaveChanges\" xml:space=\"preserve\">\r\n    <value>Sauvegarder les modifications</value>\r\n  </data>\r\n  <data name=\"SaveConfigurationChanges\" xml:space=\"preserve\">\r\n    <value>Enregistrer les modifications apportées à la configuration de l'export IFC</value>\r\n  </data>\r\n  <data name=\"Search\" xml:space=\"preserve\">\r\n    <value>Recherche</value>\r\n  </data>\r\n  <data name=\"UseTypeNameOnlyForIfcType\" xml:space=\"preserve\">\r\n    <value>Utiliser le nom du type uniquement pour le nom du type IFC</value>\r\n  </data>\r\n  <data name=\"UseVisibleRevitNameAsEntityName\" xml:space=\"preserve\">\r\n    <value>Utiliser le nom Revit visible comme nom de l'IFCEntity</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Source/IFCExporterUIOverride/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ExportBaseQuantities\" xml:space=\"preserve\">\r\n    <value>Export base quantities</value>\r\n  </data>\r\n  <data name=\"ExportPlanViewElements\" xml:space=\"preserve\">\r\n    <value>Export 2D plan view elements</value>\r\n  </data>\r\n  <data name=\"ExportRevitPropertySets\" xml:space=\"preserve\">\r\n    <value>Export Revit property sets</value>\r\n  </data>\r\n  <data name=\"FileType\" xml:space=\"preserve\">\r\n    <value>File type</value>\r\n  </data>\r\n  <data name=\"FileVersion\" xml:space=\"preserve\">\r\n    <value>File version</value>\r\n  </data>\r\n  <data name=\"IFCMVD2x3CV2\" xml:space=\"preserve\">\r\n    <value>IFC 2x3 Coordination View 2.0</value>\r\n  </data>\r\n  <data name=\"IFCMVDGSA\" xml:space=\"preserve\">\r\n    <value>IFC 2x3 GSA Concept Design BIM 2010</value>\r\n    <comment>Used by the United States General Services Administration</comment>\r\n  </data>\r\n  <data name=\"IFCVersion2x2\" xml:space=\"preserve\">\r\n    <value>IFC 2x2 Coordination View</value>\r\n  </data>\r\n  <data name=\"IFCVersion2x3\" xml:space=\"preserve\">\r\n    <value>IFC 2x3 Coordination View</value>\r\n  </data>\r\n  <data name=\"IFCVersionUnrecognized\" xml:space=\"preserve\">\r\n    <value>Unrecognized IFC version</value>\r\n  </data>\r\n  <data name=\"IncludeSpaceBoundaries\" xml:space=\"preserve\">\r\n    <value>Include space boundaries</value>\r\n  </data>\r\n  <data name=\"InSessionConfiguration\" xml:space=\"preserve\">\r\n    <value>&lt;In-Session Setup&gt;</value>\r\n  </data>\r\n  <data name=\"SpaceBoundaries\" xml:space=\"preserve\">\r\n    <value>Space boundaries</value>\r\n  </data>\r\n  <data name=\"SpaceBoundaries1stLevel\" xml:space=\"preserve\">\r\n    <value>1st Level</value>\r\n  </data>\r\n  <data name=\"SpaceBoundaries2ndLevel\" xml:space=\"preserve\">\r\n    <value>2nd Level</value>\r\n  </data>\r\n  <data name=\"SpaceBoundariesNone\" xml:space=\"preserve\">\r\n    <value>None</value>\r\n  </data>\r\n  <data name=\"SpaceBoundariesUnrecognized\" xml:space=\"preserve\">\r\n    <value>Unrecognized space boundary level</value>\r\n  </data>\r\n  <data name=\"UseFamilyAndTypeNameForReferences\" xml:space=\"preserve\">\r\n    <value>Use family and type name for references</value>\r\n  </data>\r\n  <data name=\"ExportVisibleElementsInView\" xml:space=\"preserve\">\r\n    <value>Export only elements visible in view</value>\r\n  </data>\r\n  <data name=\"ExportPartsAsBuildingElements\" xml:space=\"preserve\">\r\n    <value>Export parts as building elements</value>\r\n  </data>\r\n  <data name=\"ExportIFCCommonPropertySets\" xml:space=\"preserve\">\r\n    <value>Export IFC common property sets</value>\r\n  </data>\r\n  <data name=\"IFCMVDFMHandOver\" xml:space=\"preserve\">\r\n    <value>IFC 2x3 Basic FM Handover View</value>\r\n  </data>\r\n  <data name=\"ExportBoundingBox\" xml:space=\"preserve\">\r\n    <value>Export bounding box</value>\r\n  </data>\r\n  <data name=\"ExportSchedulesAsPsets\" xml:space=\"preserve\">\r\n    <value>Export schedules as property sets</value>\r\n  </data>\r\n  <data name=\"IncludeIfcSiteElevation\" xml:space=\"preserve\">\r\n    <value>Include IFCSite elevation in the site local placement origin</value>\r\n  </data>\r\n  <data name=\"UseCoarseTessellation\" xml:space=\"preserve\">\r\n    <value>Use coarse tessellation for some BReps</value>\r\n  </data>\r\n  <data name=\"StoreIFCGUID\" xml:space=\"preserve\">\r\n    <value>Store the IFC GUID in an element parameter after export</value>\r\n  </data>\r\n  <data name=\"IFCMVD4CV2\" xml:space=\"preserve\">\r\n    <value>IFC 4 Coordination View 2.0</value>\r\n  </data>\r\n  <data name=\"PropertySets\" xml:space=\"preserve\">\r\n    <value>Property Sets</value>\r\n  </data>\r\n  <data name=\"PropertySetsIFCCommon\" xml:space=\"preserve\">\r\n    <value>IFC common only</value>\r\n  </data>\r\n  <data name=\"PropertySetsInternalRevit\" xml:space=\"preserve\">\r\n    <value>Internal Revit only</value>\r\n  </data>\r\n  <data name=\"PropertySetsNone\" xml:space=\"preserve\">\r\n    <value>None</value>\r\n  </data>\r\n  <data name=\"PropertySetsRevitPlusIFC\" xml:space=\"preserve\">\r\n    <value>Internal Revit, IFC common</value>\r\n  </data>\r\n  <data name=\"PropertySetsSchedules\" xml:space=\"preserve\">\r\n    <value>Schedules only</value>\r\n  </data>\r\n  <data name=\"PropertySetsSchedulesPlusRevit\" xml:space=\"preserve\">\r\n    <value>Internal Revit, Schedules</value>\r\n  </data>\r\n  <data name=\"PropertySetsSchedulesPlusIFC\" xml:space=\"preserve\">\r\n    <value>IFC Common, Schedules</value>\r\n  </data>\r\n  <data name=\"PropertySetsSchedulesPlusRevitPlusIFC\" xml:space=\"preserve\">\r\n    <value>Internal Revit, IFC common, Schedules</value>\r\n  </data>\r\n  <data name=\"PropertySetsUnrecognized\" xml:space=\"preserve\">\r\n    <value>Unrecognized property sets</value>\r\n  </data>\r\n  <data name=\"ActivePhase\" xml:space=\"preserve\">\r\n    <value>Phase to export</value>\r\n  </data>\r\n  <data name=\"DefaultPhase\" xml:space=\"preserve\">\r\n    <value>Default phase to export</value>\r\n  </data>\r\n  <data name=\"Default\" xml:space=\"preserve\">\r\n    <value>Default ({0})</value>\r\n  </data>\r\n  <data name=\"PropertySetsIFCCommonPlusUserDefined\" xml:space=\"preserve\">\r\n    <value>IFC common, User-defined</value>\r\n  </data>\r\n  <data name=\"PropertySetsInternalRevitPlusUserDefined\" xml:space=\"preserve\">\r\n    <value>Internal Revit, User-defined</value>\r\n  </data>\r\n  <data name=\"PropertySetsRevitPlusIFCPlusUserDefined\" xml:space=\"preserve\">\r\n    <value>Internal Revit, IFC common, User-defined</value>\r\n  </data>\r\n  <data name=\"PropertySetsSchedulesPlusIFCPlusUserDefined\" xml:space=\"preserve\">\r\n    <value>IFC Common, Schedules, User-defined</value>\r\n  </data>\r\n  <data name=\"PropertySetsSchedulesPlusRevitPlusIFCPlusUserDefined\" xml:space=\"preserve\">\r\n    <value>Internal Revit, IFC common, Schedules, User-defined</value>\r\n  </data>\r\n  <data name=\"PropertySetsSchedulesPlusRevitPlusUserDefined\" xml:space=\"preserve\">\r\n    <value>Internal Revit, Schedules, User-defined</value>\r\n  </data>\r\n  <data name=\"PropertySetsSchedulesPlusUserDefined\" xml:space=\"preserve\">\r\n    <value>Schedules, User-defined</value>\r\n  </data>\r\n  <data name=\"PropertySetsUserDefined\" xml:space=\"preserve\">\r\n    <value>User-defined only</value>\r\n  </data>\r\n  <data name=\"ExportLinkedFiles\" xml:space=\"preserve\">\r\n    <value>Export linked files as separate IFCs</value>\r\n  </data>\r\n  <data name=\"ExportUserDefinedPsetsFileName\" xml:space=\"preserve\">\r\n    <value>User-defined property set file name</value>\r\n  </data>\r\n  <data name=\"UserDefinedParameterSets\" xml:space=\"preserve\">\r\n    <value>Custom parameter sets</value>\r\n    <comment>User Defined Parameter Sets</comment>\r\n  </data>\r\n  <data name=\"LinkInstanceExportCantCreateDoc\" xml:space=\"preserve\">\r\n    <value>Could not create a temporary document for exporting the linked instance(s) for ids: {0}</value>\r\n  </data>\r\n  <data name=\"LinkInstanceExportCantFindDoc\" xml:space=\"preserve\">\r\n    <value>The document for the linked instance(s) could not be found for ids: {0}.</value>\r\n  </data>\r\n  <data name=\"LinkInstanceExportErrorMain\" xml:space=\"preserve\">\r\n    <value>{0} linked instance(s) could not be exported.</value>\r\n  </data>\r\n  <data name=\"LinkInstanceExportErrorPath\" xml:space=\"preserve\">\r\n    <value>The path for the linked instance(s) did not exist for ids: {0}.</value>\r\n  </data>\r\n  <data name=\"LinkInstanceExportNonConformal\" xml:space=\"preserve\">\r\n    <value>The linked instance(s) were non-conformal for ids: {0}.</value>\r\n  </data>\r\n  <data name=\"LinkInstanceExportHasReflection\" xml:space=\"preserve\">\r\n    <value>The linked instance(s) were mirrored for ids: {0}.  To export a mirrored linked instance, mirror the linked geometry and link in the new document.</value>\r\n  </data>\r\n  <data name=\"LinkInstanceExportScaled\" xml:space=\"preserve\">\r\n    <value>The linked instance(s) were scaled for ids: {0}.</value>\r\n  </data>\r\n  <data name=\"IFCExport\" xml:space=\"preserve\">\r\n    <value>IFC export</value>\r\n  </data>\r\n  <data name=\"IFCExportProcessError\" xml:space=\"preserve\">\r\n    <value>The IFC export process encountered an error for: {0}.</value>\r\n  </data>\r\n  <data name=\"IFCExportProcessGenericError\" xml:space=\"preserve\">\r\n    <value>The IFC export process encountered an error.</value>\r\n  </data>\r\n  <data name=\"IFCExportGenericWarning\" xml:space=\"preserve\">\r\n    <value>IFC Export Warning</value>\r\n  </data>\r\n  <data name=\"Address\" xml:space=\"preserve\">\r\n    <value>Project Address...</value>\r\n  </data>\r\n  <data name=\"AddressLine1\" xml:space=\"preserve\">\r\n    <value>Address line 1</value>\r\n  </data>\r\n  <data name=\"AddressLine2\" xml:space=\"preserve\">\r\n    <value>Address line 2</value>\r\n  </data>\r\n  <data name=\"Advanced\" xml:space=\"preserve\">\r\n    <value>Advanced</value>\r\n  </data>\r\n  <data name=\"AltUIVer\" xml:space=\"preserve\">\r\n    <value>Alternate UI</value>\r\n  </data>\r\n  <data name=\"ApplicationName\" xml:space=\"preserve\">\r\n    <value>Application name</value>\r\n  </data>\r\n  <data name=\"Assignments\" xml:space=\"preserve\">\r\n    <value>Assignments...</value>\r\n  </data>\r\n  <data name=\"Authorization\" xml:space=\"preserve\">\r\n    <value>Authorization</value>\r\n  </data>\r\n  <data name=\"AuthorsEMail\" xml:space=\"preserve\">\r\n    <value>Author's email</value>\r\n  </data>\r\n  <data name=\"AuthorsName\" xml:space=\"preserve\">\r\n    <value>Author's name</value>\r\n  </data>\r\n  <data name=\"Browse\" xml:space=\"preserve\">\r\n    <value>Browse ...</value>\r\n  </data>\r\n  <data name=\"Cancel\" xml:space=\"preserve\">\r\n    <value>Cancel</value>\r\n  </data>\r\n  <data name=\"City\" xml:space=\"preserve\">\r\n    <value>City</value>\r\n  </data>\r\n  <data name=\"Classification\" xml:space=\"preserve\">\r\n    <value>Classification Settings...</value>\r\n  </data>\r\n  <data name=\"ClassificationFieldName\" xml:space=\"preserve\">\r\n    <value>Classification field name</value>\r\n  </data>\r\n  <data name=\"Country\" xml:space=\"preserve\">\r\n    <value>Country</value>\r\n  </data>\r\n  <data name=\"CurrentSelectedSetup\" xml:space=\"preserve\">\r\n    <value>Export setup:</value>\r\n  </data>\r\n  <data name=\"DeleteOldSetups\" xml:space=\"preserve\">\r\n    <value>Delete old IFC export setups</value>\r\n  </data>\r\n  <data name=\"Description\" xml:space=\"preserve\">\r\n    <value>Description</value>\r\n  </data>\r\n  <data name=\"DistributionPoint\" xml:space=\"preserve\">\r\n    <value>Distribution Point</value>\r\n  </data>\r\n  <data name=\"DocumentationLocation\" xml:space=\"preserve\">\r\n    <value>Documentation location</value>\r\n  </data>\r\n  <data name=\"Edition\" xml:space=\"preserve\">\r\n    <value>Edition</value>\r\n  </data>\r\n  <data name=\"EditionDate\" xml:space=\"preserve\">\r\n    <value>Edition date</value>\r\n  </data>\r\n  <data name=\"Export\" xml:space=\"preserve\">\r\n    <value>Export</value>\r\n  </data>\r\n  <data name=\"ExportElementsVisibleInView\" xml:space=\"preserve\">\r\n    <value>Export only elements visible in current view</value>\r\n  </data>\r\n  <data name=\"ExportInternalRevitPropertySets\" xml:space=\"preserve\">\r\n    <value>Export internal Revit property sets</value>\r\n  </data>\r\n  <data name=\"ExportSchedulesAsPropertySets\" xml:space=\"preserve\">\r\n    <value>Export schedules as property sets</value>\r\n  </data>\r\n  <data name=\"ExportSolidModelsWhenPossible\" xml:space=\"preserve\">\r\n    <value>Allow use of mixed \"Solid Model\" representation</value>\r\n  </data>\r\n  <data name=\"ExportUserDefinedPropertySets\" xml:space=\"preserve\">\r\n    <value>Export user defined property sets</value>\r\n  </data>\r\n  <data name=\"FileDescription\" xml:space=\"preserve\">\r\n    <value>File description</value>\r\n  </data>\r\n  <data name=\"FileHeader\" xml:space=\"preserve\">\r\n    <value>File Header</value>\r\n  </data>\r\n  <data name=\"FileSchema\" xml:space=\"preserve\">\r\n    <value>File schema</value>\r\n  </data>\r\n  <data name=\"Home\" xml:space=\"preserve\">\r\n    <value>Home</value>\r\n  </data>\r\n  <data name=\"IFC\" xml:space=\"preserve\">\r\n    <value>IFC</value>\r\n  </data>\r\n  <data name=\"IFCAssignments\" xml:space=\"preserve\">\r\n    <value>IFC Assignments</value>\r\n  </data>\r\n  <data name=\"IFCExt\" xml:space=\"preserve\">\r\n    <value>ifc</value>\r\n  </data>\r\n  <data name=\"IFCFiles\" xml:space=\"preserve\">\r\n    <value>IFC-SPF|*.ifc</value>\r\n  </data>\r\n  <data name=\"IFCMVDFMExtendedHandOver\" xml:space=\"preserve\">\r\n    <value>IFC2x3 COBie 2.4 Design Deliverable View</value>\r\n  </data>\r\n  <data name=\"IFCUnknown\" xml:space=\"preserve\">\r\n    <value>Unrecognized file type option</value>\r\n  </data>\r\n  <data name=\"IFCVersion\" xml:space=\"preserve\">\r\n    <value>IFC version</value>\r\n  </data>\r\n  <data name=\"IFCXML\" xml:space=\"preserve\">\r\n    <value>IFC XML</value>\r\n  </data>\r\n  <data name=\"IFCXMLExt\" xml:space=\"preserve\">\r\n    <value>ifcxml</value>\r\n  </data>\r\n  <data name=\"IFCXMLFiles\" xml:space=\"preserve\">\r\n    <value>Industry Foundation Classes XML(.ifcxml)|*.ifcxml</value>\r\n  </data>\r\n  <data name=\"IFCXMLZIP\" xml:space=\"preserve\">\r\n    <value>Zipped IFC XML</value>\r\n  </data>\r\n  <data name=\"IFCXMLZIPExt\" xml:space=\"preserve\">\r\n    <value>ifczip</value>\r\n  </data>\r\n  <data name=\"IFCZIP\" xml:space=\"preserve\">\r\n    <value>Zipped IFC</value>\r\n  </data>\r\n  <data name=\"IFCZIPExt\" xml:space=\"preserve\">\r\n    <value>ifczip</value>\r\n  </data>\r\n  <data name=\"IFCZIPFiles\" xml:space=\"preserve\">\r\n    <value>Zipped Industry Foundation Classes(.ifczip)|*.ifczip</value>\r\n  </data>\r\n  <data name=\"InternalAddress\" xml:space=\"preserve\">\r\n    <value>Internal address</value>\r\n  </data>\r\n  <data name=\"InternalLocation\" xml:space=\"preserve\">\r\n    <value>Internal location</value>\r\n  </data>\r\n  <data name=\"ManditoryFieldsNotEmpty\" xml:space=\"preserve\">\r\n    <value>Mandatory fields Name, Source or Publisher, and Edition cannot be empty.</value>\r\n  </data>\r\n  <data name=\"ModifySetup\" xml:space=\"preserve\">\r\n    <value>Modify setup ...</value>\r\n  </data>\r\n  <data name=\"Name\" xml:space=\"preserve\">\r\n    <value>Name</value>\r\n  </data>\r\n  <data name=\"NewExportSetup\" xml:space=\"preserve\">\r\n    <value>New export setup</value>\r\n  </data>\r\n  <data name=\"NewName\" xml:space=\"preserve\">\r\n    <value>New name</value>\r\n  </data>\r\n  <data name=\"Office\" xml:space=\"preserve\">\r\n    <value>Office</value>\r\n  </data>\r\n  <data name=\"OK\" xml:space=\"preserve\">\r\n    <value>OK</value>\r\n  </data>\r\n  <data name=\"Options\" xml:space=\"preserve\">\r\n    <value>Options</value>\r\n  </data>\r\n  <data name=\"Organization\" xml:space=\"preserve\">\r\n    <value>Organization</value>\r\n  </data>\r\n  <data name=\"OriginalName\" xml:space=\"preserve\">\r\n    <value>Original name</value>\r\n  </data>\r\n  <data name=\"PhaseToExport\" xml:space=\"preserve\">\r\n    <value>Phase to export</value>\r\n  </data>\r\n  <data name=\"POBox\" xml:space=\"preserve\">\r\n    <value>P. O. Box</value>\r\n  </data>\r\n  <data name=\"PostalCode\" xml:space=\"preserve\">\r\n    <value>Postal code</value>\r\n  </data>\r\n  <data name=\"Purpose\" xml:space=\"preserve\">\r\n    <value>Purpose</value>\r\n  </data>\r\n  <data name=\"RenameExportSetup\" xml:space=\"preserve\">\r\n    <value>Rename export setup</value>\r\n  </data>\r\n  <data name=\"Site\" xml:space=\"preserve\">\r\n    <value>Site</value>\r\n  </data>\r\n  <data name=\"SourceFileName\" xml:space=\"preserve\">\r\n    <value>Source file name</value>\r\n  </data>\r\n  <data name=\"SourcePublisher\" xml:space=\"preserve\">\r\n    <value>Source (Publisher)</value>\r\n  </data>\r\n  <data name=\"State\" xml:space=\"preserve\">\r\n    <value>State/Region</value>\r\n  </data>\r\n  <data name=\"UnkownAltUIVer\" xml:space=\"preserve\">\r\n    <value>Unknown alternate UI version</value>\r\n  </data>\r\n  <data name=\"UpdateExportSetups\" xml:space=\"preserve\">\r\n    <value>Update IFC export setups</value>\r\n  </data>\r\n  <data name=\"UpdateProjectAddress\" xml:space=\"preserve\">\r\n    <value>Update project address</value>\r\n  </data>\r\n  <data name=\"UpdateProjectInformation\" xml:space=\"preserve\">\r\n    <value>Update project information</value>\r\n  </data>\r\n  <data name=\"UseCoarseTessellationForBReps\" xml:space=\"preserve\">\r\n    <value>Use coarse tessellation for some BReps and profiles</value>\r\n  </data>\r\n  <data name=\"UserDefined\" xml:space=\"preserve\">\r\n    <value>User Defined</value>\r\n  </data>\r\n  <data name=\"UserDefinedPurpose\" xml:space=\"preserve\">\r\n    <value>User-defined purpose</value>\r\n  </data>\r\n  <data name=\"UseRoomBoundariesForRoomVolume\" xml:space=\"preserve\">\r\n    <value>Use 2D room boundaries for room volume</value>\r\n  </data>\r\n  <data name=\"VersionNumber\" xml:space=\"preserve\">\r\n    <value>Version number</value>\r\n  </data>\r\n  <data name=\"ValueSetByExportOption\" xml:space=\"preserve\">\r\n    <value>...value is set according to export option</value>\r\n  </data>\r\n  <data name=\"ValueSetOnExport\" xml:space=\"preserve\">\r\n    <value>...value will be set on export</value>\r\n  </data>\r\n  <data name=\"ClassificationAltName\" xml:space=\"preserve\">\r\n    <value>The optional alternate shared parameter name for this classification (default: ClassificationCode)</value>\r\n  </data>\r\n  <data name=\"ClassificationSystemEdition\" xml:space=\"preserve\">\r\n    <value>Edition number of the Classification system</value>\r\n  </data>\r\n  <data name=\"ClassificationSystemName\" xml:space=\"preserve\">\r\n    <value>Name of the Classification System</value>\r\n  </data>\r\n  <data name=\"ClassificationSystemSource\" xml:space=\"preserve\">\r\n    <value>Source or publisher of the Classification System</value>\r\n  </data>\r\n  <data name=\"CloneSetup\" xml:space=\"preserve\">\r\n    <value>Create a new setup based on the selected setup.</value>\r\n  </data>\r\n  <data name=\"CreateNewSetup\" xml:space=\"preserve\">\r\n    <value>Create a new setup.</value>\r\n  </data>\r\n  <data name=\"DeleteSelectedSetup\" xml:space=\"preserve\">\r\n    <value>Delete the selected setup.</value>\r\n  </data>\r\n  <data name=\"Next\" xml:space=\"preserve\">\r\n    <value>Next...</value>\r\n  </data>\r\n  <data name=\"RenameSelectedSetup\" xml:space=\"preserve\">\r\n    <value>Rename the selected setup.</value>\r\n  </data>\r\n  <data name=\"SaveSetupAndClose\" xml:space=\"preserve\">\r\n    <value>Save Setup &amp;amp; Close</value>\r\n  </data>\r\n  <data name=\"General\" xml:space=\"preserve\">\r\n    <value>General</value>\r\n  </data>\r\n  <data name=\"ExportRoomsInView\" xml:space=\"preserve\">\r\n    <value>Export rooms, areas and spaces in 3D views</value>\r\n  </data>\r\n  <data name=\"UseActiveViewForGeometry\" xml:space=\"preserve\">\r\n    <value>Use active view when creating geometry</value>\r\n  </data>\r\n  <data name=\"UseActiveViewForGeometryTooltip\" xml:space=\"preserve\">\r\n    <value>Uses the geometry in the active view to export elements such as cable trays with more detailed geometry</value>\r\n  </data>\r\n  <data name=\"ExportSpecificSchedules\" xml:space=\"preserve\">\r\n    <value>Export only schedules containing IFC, Pset, or Common in the title</value>\r\n  </data>\r\n  <data name=\"MultipleFiles\" xml:space=\"preserve\">\r\n    <value>Multiple files</value>\r\n  </data>\r\n  <data name=\"TessellationDetails\" xml:space=\"preserve\">\r\n    <value>Level of detail for some element geometry</value>\r\n  </data>\r\n  <data name=\"DetailLevelExtraLow\" xml:space=\"preserve\">\r\n    <value>Extra Low</value>\r\n  </data>\r\n  <data name=\"DetailLevelHigh\" xml:space=\"preserve\">\r\n    <value>High</value>\r\n  </data>\r\n  <data name=\"DetailLevelLow\" xml:space=\"preserve\">\r\n    <value>Low</value>\r\n  </data>\r\n  <data name=\"DetailLevelMedium\" xml:space=\"preserve\">\r\n    <value>Medium</value>\r\n  </data>\r\n  <data name=\"CurrentOptions\" xml:space=\"preserve\">\r\n    <value>Current options:</value>\r\n  </data>\r\n  <data name=\"ProjectToExport\" xml:space=\"preserve\">\r\n    <value>Projects to export:</value>\r\n  </data>\r\n  <data name=\"DefaultFileName\" xml:space=\"preserve\">\r\n    <value>Project</value>\r\n  </data>\r\n  <data name=\"SelectOneOrMoreProjects\" xml:space=\"preserve\">\r\n    <value>Please select at least one project to export.</value>\r\n  </data>\r\n  <data name=\"Use2DRoomBoundariesForRoomVolume\" xml:space=\"preserve\">\r\n    <value>Use 2D room boundaries for room volume</value>\r\n  </data>\r\n  <data name=\"UseFamilyAndTypeNameForReference\" xml:space=\"preserve\">\r\n    <value>Use family and type name for reference</value>\r\n  </data>\r\n  <data name=\"IFCVersionSelected\" xml:space=\"preserve\">\r\n    <value>IFC Version: </value>\r\n  </data>\r\n  <data name=\"DocNotSaved\" xml:space=\"preserve\">\r\n    <value>Document Not Saved</value>\r\n  </data>\r\n  <data name=\"ExportUserDefinedParameterMappingTable\" xml:space=\"preserve\">\r\n    <value>Export parameter mapping table</value>\r\n  </data>\r\n  <data name=\"UserDefinedParameterMappingTable\" xml:space=\"preserve\">\r\n    <value>Custom parameter mapping table</value>\r\n  </data>\r\n  <data name=\"IFC2x3FM\" xml:space=\"preserve\">\r\n    <value>IFC2x3 COBie 2.4 Design Deliverable View</value>\r\n  </data>\r\n  <data name=\"IFC4DTV\" xml:space=\"preserve\">\r\n    <value>IFC4 Design Transfer View [Unofficial]</value>\r\n  </data>\r\n  <data name=\"IFC4DTVWarning\" xml:space=\"preserve\">\r\n    <value>The selected export setup is not supported by buildingSMART International. Files created using this setup may not be usable by other software.</value>\r\n  </data>\r\n  <data name=\"IFC4RV\" xml:space=\"preserve\">\r\n    <value>IFC4 Reference View</value>\r\n  </data>\r\n  <data name=\"FileName\" xml:space=\"preserve\">\r\n    <value>File name:</value>\r\n  </data>\r\n  <data name=\"ValidPathExists\" xml:space=\"preserve\">\r\n    <value>Path does not exist</value>\r\n  </data>\r\n  <data name=\"FileExists\" xml:space=\"preserve\">\r\n    <value>{0} already exists. Do you want to replace it?</value>\r\n  </data>\r\n  <data name=\"Version\" xml:space=\"preserve\">\r\n    <value>v.</value>\r\n  </data>\r\n  <data name=\"FileHeaderInformation\" xml:space=\"preserve\">\r\n    <value>File Header Information...</value>\r\n  </data>\r\n  <data name=\"LevelOfDetail\" xml:space=\"preserve\">\r\n    <value>Level of Detail</value>\r\n  </data>\r\n  <data name=\"SplitWallsColumsDuctsByLevel\" xml:space=\"preserve\">\r\n    <value>Split Walls, Columns, Ducts by Level</value>\r\n  </data>\r\n  <data name=\"IFCXMLZIPFiles\" xml:space=\"preserve\">\r\n    <value>Zipped Industry Foundation Classes XML(.ifczip)|*.ifczip</value>\r\n  </data>\r\n  <data name=\"AdditionalContent\" xml:space=\"preserve\">\r\n    <value>Additional Content</value>\r\n  </data>\r\n  <data name=\"AddressInformation\" xml:space=\"preserve\">\r\n    <value>Project Address</value>\r\n  </data>\r\n  <data name=\"ClassificationSetting\" xml:space=\"preserve\">\r\n    <value>Classification Settings</value>\r\n  </data>\r\n  <data name=\"ModifySetupTitle\" xml:space=\"preserve\">\r\n    <value>Modify Setup</value>\r\n  </data>\r\n  <data name=\"Setup\" xml:space=\"preserve\">\r\n    <value>Setup</value>\r\n  </data>\r\n  <data name=\"Help\" xml:space=\"preserve\">\r\n    <value>How do I specify an export setup?</value>\r\n  </data>\r\n  <data name=\"ExportIFC\" xml:space=\"preserve\">\r\n    <value>Export IFC</value>\r\n  </data>\r\n  <data name=\"ER_Architecture\" xml:space=\"preserve\">\r\n    <value>Architectural Reference Exchange</value>\r\n  </data>\r\n  <data name=\"ER_BuildingService\" xml:space=\"preserve\">\r\n    <value>MEP Reference Exchange</value>\r\n  </data>\r\n  <data name=\"ER_Structural\" xml:space=\"preserve\">\r\n    <value>Structural Reference Exchange</value>\r\n  </data>\r\n  <data name=\"ExchangeRequirement\" xml:space=\"preserve\">\r\n    <value>Exchange Requirement</value>\r\n  </data>\r\n  <data name=\"ExportSelectedSetup\" xml:space=\"preserve\">\r\n    <value>Save selected setup ...</value>\r\n  </data>\r\n  <data name=\"InternalCoordinates\" xml:space=\"preserve\">\r\n    <value>Internal Origin</value>\r\n  </data>\r\n  <data name=\"LoadSetup\" xml:space=\"preserve\">\r\n    <value>Import setup ...</value>\r\n  </data>\r\n  <data name=\"ProjectBasePoint\" xml:space=\"preserve\">\r\n    <value>Project Base Point</value>\r\n  </data>\r\n  <data name=\"ProjectOrigin\" xml:space=\"preserve\">\r\n    <value>Coordinate Base</value>\r\n  </data>\r\n  <data name=\"SiteSurveyPoint\" xml:space=\"preserve\">\r\n    <value>Survey Point</value>\r\n  </data>\r\n  <data name=\"BuildingDescription\" xml:space=\"preserve\">\r\n    <value>Building description</value>\r\n  </data>\r\n  <data name=\"BuildingName\" xml:space=\"preserve\">\r\n    <value>Building name/number</value>\r\n  </data>\r\n  <data name=\"BuildingType\" xml:space=\"preserve\">\r\n    <value>Building type</value>\r\n  </data>\r\n  <data name=\"CompanyEmail\" xml:space=\"preserve\">\r\n    <value>Company email</value>\r\n  </data>\r\n  <data name=\"CompanyInfo\" xml:space=\"preserve\">\r\n    <value>Company Info</value>\r\n  </data>\r\n  <data name=\"CompanyName\" xml:space=\"preserve\">\r\n    <value>Company name</value>\r\n  </data>\r\n  <data name=\"CompanyPhone\" xml:space=\"preserve\">\r\n    <value>Company phone</value>\r\n  </data>\r\n  <data name=\"CompanyType\" xml:space=\"preserve\">\r\n    <value>Company type</value>\r\n  </data>\r\n  <data name=\"ConfigurationFilePrefix\" xml:space=\"preserve\">\r\n    <value>IFC Configuration</value>\r\n  </data>\r\n  <data name=\"KeepTessellatedAsTriangulation\" xml:space=\"preserve\">\r\n    <value>Keep tessellated geometry as triangulation</value>\r\n  </data>\r\n  <data name=\"ProjectDescription\" xml:space=\"preserve\">\r\n    <value>Project description</value>\r\n  </data>\r\n  <data name=\"ProjectInfo\" xml:space=\"preserve\">\r\n    <value>Project Info</value>\r\n  </data>\r\n  <data name=\"ProjectName\" xml:space=\"preserve\">\r\n    <value>Project name</value>\r\n  </data>\r\n  <data name=\"ProjectPhase\" xml:space=\"preserve\">\r\n    <value>Project phase</value>\r\n  </data>\r\n  <data name=\"SharedCoordinates\" xml:space=\"preserve\">\r\n    <value>Shared Coordinates</value>\r\n  </data>\r\n  <data name=\"SiteDescription\" xml:space=\"preserve\">\r\n    <value>Site description</value>\r\n  </data>\r\n  <data name=\"SiteLocation\" xml:space=\"preserve\">\r\n    <value>Site location</value>\r\n  </data>\r\n  <data name=\"StreetAddress\" xml:space=\"preserve\">\r\n    <value>Street address</value>\r\n  </data>\r\n  <data name=\"AssignAddressToBuilding\" xml:space=\"preserve\">\r\n    <value>Assign address to building</value>\r\n  </data>\r\n  <data name=\"AssignAddressToSite\" xml:space=\"preserve\">\r\n    <value>Assign address to site</value>\r\n  </data>\r\n  <data name=\"IncludeSteelElements\" xml:space=\"preserve\">\r\n    <value>Include Steel Elements</value>\r\n  </data>\r\n  <data name=\"UseOnlyTriangulation\" xml:space=\"preserve\">\r\n    <value>Keep Tessellated Geometry as Triangulation</value>\r\n  </data>\r\n  <data name=\"IFC4\" xml:space=\"preserve\">\r\n    <value>IFC4 for General Use</value>\r\n  </data>\r\n  <data name=\"UseTypeNameOnlyForIfcType\" xml:space=\"preserve\">\r\n    <value>Use Type name only for IFCType name</value>\r\n  </data>\r\n  <data name=\"UseVisibleRevitNameAsEntityName\" xml:space=\"preserve\">\r\n    <value>Use visible Revit name as the IFCEntity name</value>\r\n  </data>\r\n  <data name=\"ClassificationAltLocation\" xml:space=\"preserve\">\r\n    <value>Location of the documentation (usually URL)</value>\r\n  </data>\r\n  <data name=\"ReservedDeviceName\" xml:space=\"preserve\">\r\n    <value>{0} is a reserved Windows device name. Choose another name and try again.</value>\r\n  </data>\r\n  <data name=\"OffsetDistanceTooLarge\" xml:space=\"preserve\">\r\n    <value>The elements in this model are very far from the origin in this exported file, which may cause display issues in the receiving software. Please consider using the project base point or site survey point as your coodinate basis.</value>\r\n  </data>\r\n  <data name=\"Eastings\" xml:space=\"preserve\">\r\n    <value>Eastings</value>\r\n  </data>\r\n  <data name=\"EPSGCode\" xml:space=\"preserve\">\r\n    <value>EPSG Code</value>\r\n  </data>\r\n  <data name=\"GeodeticDatum\" xml:space=\"preserve\">\r\n    <value>Geodetic Datum</value>\r\n  </data>\r\n  <data name=\"Northings\" xml:space=\"preserve\">\r\n    <value>Northings</value>\r\n  </data>\r\n  <data name=\"ProjectedCRS\" xml:space=\"preserve\">\r\n    <value>Projected Coordinate System Reference</value>\r\n  </data>\r\n  <data name=\"ProjectedCRSDesc\" xml:space=\"preserve\">\r\n    <value>Description</value>\r\n  </data>\r\n  <data name=\"ProjectedCRSName\" xml:space=\"preserve\">\r\n    <value>Name</value>\r\n  </data>\r\n  <data name=\"Reset\" xml:space=\"preserve\">\r\n    <value>Reset</value>\r\n  </data>\r\n  <data name=\"ResetToOriginals\" xml:space=\"preserve\">\r\n    <value>Reset</value>\r\n  </data>\r\n  <data name=\"AngleTrueNorth\" xml:space=\"preserve\">\r\n    <value>Angle from True North</value>\r\n  </data>\r\n  <data name=\"Elevation\" xml:space=\"preserve\">\r\n    <value>Elevation</value>\r\n  </data>\r\n  <data name=\"GeoReference\" xml:space=\"preserve\">\r\n    <value>Geographic Reference</value>\r\n  </data>\r\n  <data name=\"Override\" xml:space=\"preserve\">\r\n    <value>Override</value>\r\n  </data>\r\n  <data name=\"ProjectSite\" xml:space=\"preserve\">\r\n    <value>Project Site</value>\r\n  </data>\r\n  <data name=\"ResetConfigToolTip\" xml:space=\"preserve\">\r\n    <value>Reset configurations back to the original settings</value>\r\n  </data>\r\n  <data name=\"ResetOverrideToolTip\" xml:space=\"preserve\">\r\n    <value>Reset override values</value>\r\n  </data>\r\n  <data name=\"SaveChanges\" xml:space=\"preserve\">\r\n    <value>Save Changes</value>\r\n  </data>\r\n  <data name=\"SaveChangesTooltip\" xml:space=\"preserve\">\r\n    <value>Save changes to the configurations into the document</value>\r\n  </data>\r\n  <data name=\"ProjectInTN\" xml:space=\"preserve\">\r\n    <value>Project Base Point oriented in True North</value>\r\n  </data>\r\n  <data name=\"InternalCoordinatesInTN\" xml:space=\"preserve\">\r\n    <value>Internal Origin oriented in True North</value>\r\n  </data>\r\n  <data name=\"ER_ArchitectureShort\" xml:space=\"preserve\">\r\n    <value>Architecture</value>\r\n  </data>\r\n  <data name=\"ER_BuildingServiceShort\" xml:space=\"preserve\">\r\n    <value>BuildingService</value>\r\n  </data>\r\n  <data name=\"ER_StructuralShort\" xml:space=\"preserve\">\r\n    <value>Structural</value>\r\n  </data>\r\n  <data name=\"IFCEntitySelection\" xml:space=\"preserve\">\r\n    <value>IFC Entity Selection</value>\r\n  </data>\r\n  <data name=\"ExcludeEntitySelection\" xml:space=\"preserve\">\r\n    <value>Entities to Export ...</value>\r\n  </data>\r\n  <data name=\"IFCSchemaVersion\" xml:space=\"preserve\">\r\n    <value>IFC Schema version</value>\r\n  </data>\r\n  <data name=\"PredefinedTypeSelection\" xml:space=\"preserve\">\r\n    <value>PredefinedType selection</value>\r\n  </data>\r\n  <data name=\"SelectSingleElement\" xml:space=\"preserve\">\r\n    <value>Select Export As IFC Entity</value>\r\n  </data>\r\n  <data name=\"DeleteOldConfiguration\" xml:space=\"preserve\">\r\n    <value>Delete old configuration</value>\r\n  </data>\r\n  <data name=\"SaveConfigurationChanges\" xml:space=\"preserve\">\r\n    <value>Save changes to IFC export configuration</value>\r\n  </data>\r\n  <data name=\"Error\" xml:space=\"preserve\">\r\n    <value>Error</value>\r\n  </data>\r\n  <data name=\"MultipleAssignments\" xml:space=\"preserve\">\r\n    <value>Multiple assignments found in the selected objects.</value>\r\n  </data>\r\n  <data name=\"Search\" xml:space=\"preserve\">\r\n    <value>Search</value>\r\n  </data>\r\n  <data name=\"CollapseAll\" xml:space=\"preserve\">\r\n    <value>Collapse All</value>\r\n  </data>\r\n  <data name=\"ExpandAll\" xml:space=\"preserve\">\r\n    <value>Expand All</value>\r\n  </data>\r\n  <data name=\"HelpAssignIfcEntity\" xml:space=\"preserve\">\r\n    <value>How do I assign IFC Entity and Predefined Type?</value>\r\n  </data>\r\n  <data name=\"HelpSelectEntityForExport\" xml:space=\"preserve\">\r\n    <value>How do IFC Entity selections affect export?</value>\r\n  </data>\r\n  <data name=\"NoPredefinedType\" xml:space=\"preserve\">\r\n    <value>Entity does not have predefined type</value>\r\n  </data>\r\n  <data name=\"ShowAll\" xml:space=\"preserve\">\r\n    <value>All</value>\r\n  </data>\r\n  <data name=\"ShowChecked\" xml:space=\"preserve\">\r\n    <value>Checked entities</value>\r\n  </data>\r\n  <data name=\"ShowUnchecked\" xml:space=\"preserve\">\r\n    <value>Un-checked entities</value>\r\n  </data>\r\n  <data name=\"Show\" xml:space=\"preserve\">\r\n    <value>Show</value>\r\n  </data>\r\n  <data name=\"LinkedFiles\" xml:space=\"preserve\">\r\n    <value>Linked files</value>\r\n  </data>\r\n  <data name=\"LinkedFilesDontExport\" xml:space=\"preserve\">\r\n    <value>Do not export</value>\r\n  </data>\r\n  <data name=\"LinkedFilesSameProject\" xml:space=\"preserve\">\r\n    <value>Export in same IFCProject</value>\r\n  </data>\r\n  <data name=\"LinkedFilesSameSite\" xml:space=\"preserve\">\r\n    <value>Export in same IFCSite</value>\r\n  </data>\r\n  <data name=\"LinkedFilesSeparate\" xml:space=\"preserve\">\r\n    <value>Export as separate IFCs</value>\r\n  </data>\r\n  <data name=\"IFCVersion4x3\" xml:space=\"preserve\">\r\n    <value>IFC4x3</value>\r\n  </data>\r\n  <data name=\"ExportMaterialPropertySets\" xml:space=\"preserve\">\r\n    <value>Export material property sets</value>\r\n  </data>\r\n  <data name=\"IFCSG\" xml:space=\"preserve\">\r\n    <value>IFC+SG Regulatory Requirements View</value>\r\n  </data>\r\n  <data name=\"ExportHostsAsSingleEntity\" xml:space=\"preserve\">\r\n    <value>Always export faceted floors and roofs as a single IFC entity</value>\r\n  </data>\r\n  <data name=\"AddressInformationTooltip\" xml:space=\"preserve\">\r\n    <value>Entering a value here will reset the Purpose field to \"USERDEFINED\".</value>\r\n  </data>\r\n  <data name=\"ExportHostAsSingleEntityTooltip\" xml:space=\"preserve\">\r\n    <value>If this option is checked, don't create a container for floors and roofs unless exporting parts.</value>\r\n  </data>\r\n  <data name=\"TriangulationOnlyTooltip\" xml:space=\"preserve\">\r\n    <value>Use this option if any tessellated geometry should remain as triangulated faces, or if the export performance is affected.</value>\r\n  </data>\r\n  <data name=\"UseTypeNameOnlyTooltip\" xml:space=\"preserve\">\r\n    <value>Use this option to export the IFC type name as the Revit type name without the family name.</value>\r\n  </data>\r\n  <data name=\"UseVisibleRevitNameTooltip\" xml:space=\"preserve\">\r\n    <value>Use this option to export IFC entity name as the visible Revit name.</value>\r\n  </data>\r\n  <data name=\"ExportMappingTemplates\" xml:space=\"preserve\">\r\n    <value>Export Mapping Templates</value>\r\n  </data>\r\n  <data name=\"IFCClass\" xml:space=\"preserve\">\r\n    <value>IFC Class</value>\r\n  </data>\r\n  <data name=\"ManageIFCExportMappingSettings\" xml:space=\"preserve\">\r\n    <value>Manage IFC Export Mapping Settings</value>\r\n  </data>\r\n  <data name=\"PredefinedType\" xml:space=\"preserve\">\r\n    <value>Predefined Type</value>\r\n  </data>\r\n  <data name=\"RevitCategory\" xml:space=\"preserve\">\r\n    <value>Revit Category</value>\r\n  </data>\r\n  <data name=\"TemplateSettings\" xml:space=\"preserve\">\r\n    <value>Template Settings</value>\r\n  </data>\r\n  <data name=\"UserDefinedType\" xml:space=\"preserve\">\r\n    <value>User-defined Type</value>\r\n  </data>\r\n  <data name=\"FacilityBridge\" xml:space=\"preserve\">\r\n    <value>Bridge (IfcBridge)</value>\r\n  </data>\r\n  <data name=\"FacilityBuilding\" xml:space=\"preserve\">\r\n    <value>Building (IfcBuilding)</value>\r\n  </data>\r\n  <data name=\"FacilityMarineFacility\" xml:space=\"preserve\">\r\n    <value>Marine Facility (IfcMarineFacility)</value>\r\n  </data>\r\n  <data name=\"FacilityRailway\" xml:space=\"preserve\">\r\n    <value>Railway (IfcRailway)</value>\r\n  </data>\r\n  <data name=\"FacilityRoad\" xml:space=\"preserve\">\r\n    <value>Road (IfcRoad)</value>\r\n  </data>\r\n  <data name=\"FacilityType\" xml:space=\"preserve\">\r\n    <value>Facility Type</value>\r\n  </data>\r\n  <data name=\"BridgeArched\" xml:space=\"preserve\">\r\n    <value>Arched (ARCHED)</value>\r\n  </data>\r\n  <data name=\"BridgeCableStayed\" xml:space=\"preserve\">\r\n    <value>Cable Stayed (CABLESTAYED)</value>\r\n  </data>\r\n  <data name=\"BridgeCantilever\" xml:space=\"preserve\">\r\n    <value>Cantilever (CANTILEVER)</value>\r\n  </data>\r\n  <data name=\"BridgeCulvert\" xml:space=\"preserve\">\r\n    <value>Culvert (CULVERT)</value>\r\n  </data>\r\n  <data name=\"BridgeFramework\" xml:space=\"preserve\">\r\n    <value>Framework (FRAMEWORK)</value>\r\n  </data>\r\n  <data name=\"BridgeGirder\" xml:space=\"preserve\">\r\n    <value>Girder (GIRDER)</value>\r\n  </data>\r\n  <data name=\"BridgeSuspension\" xml:space=\"preserve\">\r\n    <value>Suspension (SUSPENSION)</value>\r\n  </data>\r\n  <data name=\"BridgeTruss\" xml:space=\"preserve\">\r\n    <value>Truss (TRUSS)</value>\r\n  </data>\r\n  <data name=\"FacilityPredefinedType\" xml:space=\"preserve\">\r\n    <value>Facility Predefined Type</value>\r\n  </data>\r\n  <data name=\"MarineFacilityBarrierBeach\" xml:space=\"preserve\">\r\n    <value>Barrier Beach (BARRIERBEACH)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityBreakwater\" xml:space=\"preserve\">\r\n    <value>Breakwater (BREAKWATER)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityCanal\" xml:space=\"preserve\">\r\n    <value>Canal (CANAL)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityDryDock\" xml:space=\"preserve\">\r\n    <value>Dry Dock (DRYDOCK)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityFloatingDock\" xml:space=\"preserve\">\r\n    <value>Floating Dock (FLOATINGDOCK)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityHydrolift\" xml:space=\"preserve\">\r\n    <value>Hydrolift (HYDROLIFT)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityJetty\" xml:space=\"preserve\">\r\n    <value>Jetty (JETTY)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityLaunchRecovery\" xml:space=\"preserve\">\r\n    <value>Launch Recovery Facility (LAUNCHRECOVERYFACILITY)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityMarineDefense\" xml:space=\"preserve\">\r\n    <value>Marine Defense (MARINEDEFENCE)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityNavigationalChannel\" xml:space=\"preserve\">\r\n    <value>Navigational Channel (NAVIGATIONALCHANNEL)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityPort\" xml:space=\"preserve\">\r\n    <value>Port (PORT)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityQuay\" xml:space=\"preserve\">\r\n    <value>Quay (QUAY)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityRevetment\" xml:space=\"preserve\">\r\n    <value>Revetment (REVETMENT)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityShipLift\" xml:space=\"preserve\">\r\n    <value>Shiplift (SHIPLIFT)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityShipLock\" xml:space=\"preserve\">\r\n    <value>Ship Lock (SHIPLOCK)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityShipyard\" xml:space=\"preserve\">\r\n    <value>Shipyard (SHIPYARD)</value>\r\n  </data>\r\n  <data name=\"MarineFacilitySlipway\" xml:space=\"preserve\">\r\n    <value>Slipway (SLIPWAY)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityWaterway\" xml:space=\"preserve\">\r\n    <value>Waterway (WATERWAY)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityWaterwayShiplift\" xml:space=\"preserve\">\r\n    <value>Waterway Shiplift (WATERWAYSHIPLIFT)</value>\r\n  </data>\r\n  <data name=\"NotDefined\" xml:space=\"preserve\">\r\n    <value>Not Defined</value>\r\n  </data>\r\n  <data name=\"ModifyIFCCategoryMapping\" xml:space=\"preserve\">\r\n    <value>Modify IFC category mapping template</value>\r\n  </data>\r\n  <data name=\"OwnerHistoryLastModified\" xml:space=\"preserve\">\r\n    <value>Set \"Last Modified\" user to the Author in Project Information</value>\r\n  </data>\r\n  <data name=\"OwnerHistoryLastModifiedTooltip\" xml:space=\"preserve\">\r\n    <value>Populate the IfcOwnerHistory \"LastModified\" attribute with the Author information set in Project Information</value>\r\n  </data>\r\n  <data name=\"CategoryMapping\" xml:space=\"preserve\">\r\n    <value>Category Mapping</value>\r\n  </data>\r\n  <data name=\"Ellipses\" xml:space=\"preserve\">\r\n    <value>...</value>\r\n  </data>\r\n  <data name=\"ByCategory\" xml:space=\"preserve\">\r\n    <value>&lt;By Category&gt;</value>\r\n  </data>\r\n  <data name=\"ByCategoryNoBrackets\" xml:space=\"preserve\">\r\n    <value>By Category</value>\r\n  </data>\r\n  <data name=\"ExportCategoryMappingDialogName\" xml:space=\"preserve\">\r\n    <value>Export IFC Category Mapping</value>\r\n  </data>\r\n  <data name=\"ExportCategoryMappingFilter\" xml:space=\"preserve\">\r\n    <value>IFC Category Mapping Files (*.txt)|*.txt</value>\r\n  </data>\r\n  <data name=\"CategoryMappingHelp\" xml:space=\"preserve\">\r\n    <value>How do I modify IFC export mapping settings?</value>\r\n  </data>\r\n  <data name=\"ImportCategoryMappingDialogName\" xml:space=\"preserve\">\r\n    <value>Import IFC Category Mapping</value>\r\n  </data>\r\n  <data name=\"IFCNewTemplate\" xml:space=\"preserve\">\r\n    <value>New Settings Template</value>\r\n  </data>\r\n  <data name=\"Save\" xml:space=\"preserve\">\r\n    <value>Save</value>\r\n  </data>\r\n  <data name=\"TemplateName\" xml:space=\"preserve\">\r\n    <value>Template name</value>\r\n  </data>\r\n  <data name=\"IFCRenameTemplate\" xml:space=\"preserve\">\r\n    <value>Rename</value>\r\n  </data>\r\n  <data name=\"RenamePreviousName\" xml:space=\"preserve\">\r\n    <value>Previous</value>\r\n  </data>\r\n  <data name=\"RenameNewName\" xml:space=\"preserve\">\r\n    <value>New</value>\r\n  </data>\r\n  <data name=\"IFCCopyTemplate\" xml:space=\"preserve\">\r\n    <value>Copy</value>\r\n  </data>\r\n  <data name=\"IFCDeleteTemplate\" xml:space=\"preserve\">\r\n    <value>Delete</value>\r\n  </data>\r\n  <data name=\"ResetAll\" xml:space=\"preserve\">\r\n    <value>Reset all</value>\r\n  </data>\r\n  <data name=\"ResetToDefault\" xml:space=\"preserve\">\r\n    <value>Reset table to Revit default settings</value>\r\n  </data>\r\n  <data name=\"IFCDeleteTemplateMessage\" xml:space=\"preserve\">\r\n    <value>Delete {0} ?</value>\r\n  </data>\r\n  <data name=\"ResetRowToDefault\" xml:space=\"preserve\">\r\n    <value>Reset row to Revit default settings</value>\r\n  </data>\r\n  <data name=\"TemplateNameTooltip\" xml:space=\"preserve\">\r\n    <value>Enter unique template name.</value>\r\n  </data>\r\n  <data name=\"CopyTemplateTooltip\" xml:space=\"preserve\">\r\n    <value>Duplicate template</value>\r\n  </data>\r\n  <data name=\"CreateNewTemplateTooltip\" xml:space=\"preserve\">\r\n    <value>Create new template</value>\r\n  </data>\r\n  <data name=\"DeleteTemplateTooltip\" xml:space=\"preserve\">\r\n    <value>Delete template</value>\r\n  </data>\r\n  <data name=\"ExportTemplateTooltip\" xml:space=\"preserve\">\r\n    <value>Export template</value>\r\n  </data>\r\n  <data name=\"ImportTemplateTooltip\" xml:space=\"preserve\">\r\n    <value>Import template</value>\r\n  </data>\r\n  <data name=\"MoreTooltip\" xml:space=\"preserve\">\r\n    <value>More</value>\r\n  </data>\r\n  <data name=\"RenameTemplateTooltip\" xml:space=\"preserve\">\r\n    <value>Rename template</value>\r\n  </data>\r\n  <data name=\"SaveTemplateTooltip\" xml:space=\"preserve\">\r\n    <value>Save changes to template</value>\r\n  </data>\r\n  <data name=\"SelectedCheckboxTooltip\" xml:space=\"preserve\">\r\n    <value>Selected categories will be exported</value>\r\n  </data>\r\n  <data name=\"IFCInvalidCategoryMappingFile\" xml:space=\"preserve\">\r\n    <value>This is not a valid category mapping file.</value>\r\n  </data>\r\n  <data name=\"IFCExportProcessNoWriteAccess\" xml:space=\"preserve\">\r\n    <value>Unable to write to {0} because it is read-only or owned by someone else.</value>\r\n  </data>\r\n  <data name=\"ExportCeilingGrids\" xml:space=\"preserve\">\r\n    <value>Export Ceiling Grids</value>\r\n  </data>\r\n  <data name=\"ExportBarsInUniformRebarSetsAsSeparateIFCEntities\" xml:space=\"preserve\">\r\n    <value>Export bars in uniform rebar sets as separate IFC entities</value>\r\n  </data>\r\n  <data name=\"ExportBarsInUniformRebarSetsAsSeparateIFCEntitiesToopTip\" xml:space=\"preserve\">\r\n    <value>Use this option to export bars in uniform rebar sets as separate IFC entities.</value>\r\n  </data>\r\n  <data name=\"ParameterMapping\" xml:space=\"preserve\">\r\n    <value>Parameter Mapping</value>\r\n  </data>\r\n  <data name=\"PropertySetups\" xml:space=\"preserve\">\r\n    <value>Property Setups</value>\r\n  </data>\r\n  <data name=\"BaseQuantities\" xml:space=\"preserve\">\r\n    <value>Base Quantities</value>\r\n  </data>\r\n  <data name=\"IFCCommonPropertySets\" xml:space=\"preserve\">\r\n    <value>IFC Common Property Sets</value>\r\n  </data>\r\n  <data name=\"MaterialPropertySets\" xml:space=\"preserve\">\r\n    <value>Material Property Sets</value>\r\n  </data>\r\n  <data name=\"ParameterMappingHelp\" xml:space=\"preserve\">\r\n    <value>How do I modify IFC export parameter mapping settings?</value>\r\n  </data>\r\n  <data name=\"RevitPropertySets\" xml:space=\"preserve\">\r\n    <value>Revit Property Sets</value>\r\n  </data>\r\n  <data name=\"Schedules\" xml:space=\"preserve\">\r\n    <value>Schedules</value>\r\n  </data>\r\n  <data name=\"ManageDefaultPropertySets\" xml:space=\"preserve\">\r\n    <value>Manage Default Property Sets</value>\r\n  </data>\r\n  <data name=\"UserDefinedPropertyMapping\" xml:space=\"preserve\">\r\n    <value>User-defined Property Mapping</value>\r\n  </data>\r\n  <data name=\"Filter\" xml:space=\"preserve\">\r\n    <value>Filter</value>\r\n  </data>\r\n  <data name=\"IFCSchema\" xml:space=\"preserve\">\r\n    <value>IFC Schema</value>\r\n  </data>\r\n  <data name=\"CopyPropertySetTooltip\" xml:space=\"preserve\">\r\n    <value>Duplicate property set</value>\r\n  </data>\r\n  <data name=\"CreateNewPropertySetTooltip\" xml:space=\"preserve\">\r\n    <value>Create new property set</value>\r\n  </data>\r\n  <data name=\"DeletePropertySetTooltip\" xml:space=\"preserve\">\r\n    <value>Delete property set</value>\r\n  </data>\r\n  <data name=\"ExportIFCPropertyMappingDialogName\" xml:space=\"preserve\">\r\n    <value>Export IFC Property Mapping Setup</value>\r\n  </data>\r\n  <data name=\"ExportPropertySetsTooltip\" xml:space=\"preserve\">\r\n    <value>Export property sets</value>\r\n  </data>\r\n  <data name=\"ApplicableEntities\" xml:space=\"preserve\">\r\n    <value>Applicable Entities</value>\r\n  </data>\r\n  <data name=\"IFCManageUserDefinedPropertySeets\" xml:space=\"preserve\">\r\n    <value>Manage User-defined Property Sets</value>\r\n  </data>\r\n  <data name=\"IFCProperty\" xml:space=\"preserve\">\r\n    <value>IFC Property</value>\r\n  </data>\r\n  <data name=\"IFCPropertyMappingSetupsFilter\" xml:space=\"preserve\">\r\n    <value>IFC Property Mapping Setups (*.txt)|*.txt</value>\r\n  </data>\r\n  <data name=\"ImportIFCPropertyMappingDialogName\" xml:space=\"preserve\">\r\n    <value>Import IFC Property Mapping Setup</value>\r\n  </data>\r\n  <data name=\"ImportPropertySetsTooltip\" xml:space=\"preserve\">\r\n    <value>Import property sets</value>\r\n  </data>\r\n  <data name=\"InstanceOrType\" xml:space=\"preserve\">\r\n    <value>Instance/Type</value>\r\n  </data>\r\n  <data name=\"PropertySetDetails\" xml:space=\"preserve\">\r\n    <value>Property Set Details</value>\r\n  </data>\r\n  <data name=\"RevitProperty\" xml:space=\"preserve\">\r\n    <value>Revit Property</value>\r\n  </data>\r\n  <data name=\"UserDefinedHelp\" xml:space=\"preserve\">\r\n    <value>How do I Manage User-Defined Property Sets?</value>\r\n  </data>\r\n  <data name=\"Edit\" xml:space=\"preserve\">\r\n    <value>Edit</value>\r\n  </data>\r\n  <data name=\"IFCSelectEntities\" xml:space=\"preserve\">\r\n    <value>Select Entities</value>\r\n  </data>\r\n  <data name=\"SelectedPropertiesCheckboxTooltip\" xml:space=\"preserve\">\r\n    <value>Selected properties will be exported</value>\r\n  </data>\r\n  <data name=\"PropertySet\" xml:space=\"preserve\">\r\n    <value>Property Set</value>\r\n  </data>\r\n  <data name=\"Parameter\" xml:space=\"preserve\">\r\n    <value>Parameter</value>\r\n  </data>\r\n  <data name=\"Apply\" xml:space=\"preserve\">\r\n    <value>Apply</value>\r\n  </data>\r\n  <data name=\"Remove\" xml:space=\"preserve\">\r\n    <value>Remove</value>\r\n  </data>\r\n  <data name=\"Value\" xml:space=\"preserve\">\r\n    <value>Value</value>\r\n  </data>\r\n  <data name=\"UseTypePropertiesInInstacePSets\" xml:space=\"preserve\">\r\n    <value>Allow use of type properties in instance property sets</value>\r\n  </data>\r\n  <data name=\"IdentityMaterialParams\" xml:space=\"preserve\">\r\n    <value>Identity</value>\r\n  </data>\r\n  <data name=\"PhysicalMaterialParams\" xml:space=\"preserve\">\r\n    <value>Physical</value>\r\n  </data>\r\n  <data name=\"ThermalMaterialParams\" xml:space=\"preserve\">\r\n    <value>Thermal</value>\r\n  </data>\r\n  <data name=\"TypeToFilter\" xml:space=\"preserve\">\r\n    <value>Type to filter</value>\r\n  </data>\r\n  <data name=\"Category\" xml:space=\"preserve\">\r\n    <value>Category</value>\r\n  </data>\r\n  <data name=\"Properties\" xml:space=\"preserve\">\r\n    <value>Properties</value>\r\n  </data>\r\n  <data name=\"SelectCategory\" xml:space=\"preserve\">\r\n    <value>Select a category to filter the properties list.</value>\r\n  </data>\r\n  <data name=\"ParameterMappingSettings\" xml:space=\"preserve\">\r\n    <value>Parameter Mapping Settings</value>\r\n  </data>\r\n  <data name=\"ModifyIFCPropertyMapping\" xml:space=\"preserve\">\r\n    <value>Modify IFC property mapping template</value>\r\n  </data>\r\n  <data name=\"IFCCopyPropertyTemplate\" xml:space=\"preserve\">\r\n    <value>Copy Property Template</value>\r\n  </data>\r\n  <data name=\"IFC4x3DTV\" xml:space=\"preserve\">\r\n    <value>IFC4.3 Design Transfer View [Unofficial]</value>\r\n  </data>\r\n  <data name=\"IFC4x3RV\" xml:space=\"preserve\">\r\n    <value>IFC4.3 Reference View</value>\r\n  </data>\r\n  <data name=\"IFCExportWarningCannotAddPropertyToReservedPropertySet\" xml:space=\"preserve\">\r\n    <value>Cannot add new Property {0} to Reserved Property Set {1}.</value>\r\n  </data>\r\n  <data name=\"IFCExportWarningCannotAddUserDefinedPropertySet\" xml:space=\"preserve\">\r\n    <value>User-defined Property Set {0} contains reserved string {1}.  Extending property set name to {2}.</value>\r\n  </data>\r\n  <data name=\"IFCExportWarningCannotModifyPropertySetProperty\" xml:space=\"preserve\">\r\n    <value>Cannot modify Property {0} in Reserved Property Set {1}.</value>\r\n  </data>\r\n  <data name=\"ExportPropertyMappingFilter\" xml:space=\"preserve\">\r\n    <value>IFC Property Mapping Files (*.txt)|*.txt</value>\r\n  </data>\r\n  <data name=\"ImportPropertyMappingDialogName\" xml:space=\"preserve\">\r\n    <value>Import IFC Property Mapping</value>\r\n  </data>\r\n  <data name=\"IFCInvalidPropertyMappingFile\" xml:space=\"preserve\">\r\n    <value>Attempting to load an invalid template.</value>\r\n  </data>\r\n  <data name=\"ExportPropertyMappingDialogName\" xml:space=\"preserve\">\r\n    <value>Export IFC Property Mapping</value>\r\n  </data>\r\n  <data name=\"TemplateSelections\" xml:space=\"preserve\">\r\n    <value>selections</value>\r\n  </data>\r\n  <data name=\"SelectedPropertySetCheckboxTooltip\" xml:space=\"preserve\">\r\n    <value>Selected property set will be exported</value>\r\n  </data>\r\n  <data name=\"String_Revit_CurrentLicenseStatus_MainContent\" xml:space=\"preserve\">\r\n    <value>Viewer mode allows all functionality of Revit, except the following: save or save as in all cases; exporting or publishing modified projects; exporting or publishing any projects to a format containing model data that can be modified; or printing projects after changes are made.</value>\r\n  </data>\r\n  <data name=\"String_Revit_CurrentLicenseStatusTitle\" xml:space=\"preserve\">\r\n    <value>Revit Current License Status</value>\r\n  </data>\r\n  <data name=\"String_Revit_CurrentLicenseStatus_MainInstruction\" xml:space=\"preserve\">\r\n    <value>{0}\r\nBuild: {1}\r\n\r\n{0} is in viewer mode.</value>\r\n  </data>\r\n  <data name=\"DefaultMapping\" xml:space=\"preserve\">\r\n    <value>&lt;default&gt;</value>\r\n  </data>\r\n  <data name=\"RenamePropertySetTooltip\" xml:space=\"preserve\">\r\n    <value>Rename property set</value>\r\n  </data>\r\n  <data name=\"DataType\" xml:space=\"preserve\">\r\n    <value>Data Type</value>\r\n  </data>\r\n  <data name=\"SelectApplicableEntities\" xml:space=\"preserve\">\r\n    <value>Select applicable entities</value>\r\n  </data>\r\n  <data name=\"ResetApplicableEntities\" xml:space=\"preserve\">\r\n    <value>Reset applicable entities</value>\r\n  </data>\r\n  <data name=\"UserDefinedPropertySets\" xml:space=\"preserve\">\r\n    <value>User Defined Property Sets</value>\r\n  </data>\r\n  <data name=\"IFCNewPropertySet\" xml:space=\"preserve\">\r\n    <value>New Property Set</value>\r\n  </data>\r\n  <data name=\"AddRow\" xml:space=\"preserve\">\r\n    <value>Add Row</value>\r\n  </data>\r\n  <data name=\"SavePropertySetTooltip\" xml:space=\"preserve\">\r\n    <value>Save changes to property set.</value>\r\n  </data>\r\n  <data name=\"PropertySetNameTooltip\" xml:space=\"preserve\">\r\n    <value>Enter unique property set name.</value>\r\n  </data>\r\n  <data name=\"PropertySetName\" xml:space=\"preserve\">\r\n    <value>Property Set name</value>\r\n  </data>\r\n  <data name=\"FilterAllProperties\" xml:space=\"preserve\">\r\n    <value>All properties</value>\r\n  </data>\r\n  <data name=\"FilterInstanceProperties\" xml:space=\"preserve\">\r\n    <value>Instance properties</value>\r\n  </data>\r\n  <data name=\"FilterTypeProperties\" xml:space=\"preserve\">\r\n    <value>Type properties</value>\r\n  </data>\r\n  <data name=\"IFCCreateNewTemplate\" xml:space=\"preserve\">\r\n    <value>Create New Template</value>\r\n  </data>\r\n  <data name=\"IFCCreateNewPropertySet\" xml:space=\"preserve\">\r\n    <value>Create New Property Set</value>\r\n  </data>\r\n  <data name=\"IFCCreateDuplicate\" xml:space=\"preserve\">\r\n    <value>Create duplicate</value>\r\n  </data>\r\n  <data name=\"NewTemplateDefaultName\" xml:space=\"preserve\">\r\n    <value>New Template</value>\r\n  </data>\r\n  <data name=\"RemoveRow\" xml:space=\"preserve\">\r\n    <value>Remove Row</value>\r\n  </data>\r\n  <data name=\"PropertyMapping\" xml:space=\"preserve\">\r\n    <value>Property Mapping</value>\r\n  </data>\r\n  <data name=\"AddPropertySet\" xml:space=\"preserve\">\r\n    <value>Add property set</value>\r\n  </data>\r\n  <data name=\"ImportIFCUserDefinedMappingDialogName\" xml:space=\"preserve\">\r\n    <value>Import IFC User-defined Property Sets</value>\r\n  </data>\r\n  <data name=\"ExportIFCUserDefinedMappingDialogName\" xml:space=\"preserve\">\r\n    <value>Export IFC User - defined Property Sets</value>\r\n  </data>\r\n  <data name=\"IFCUserDefinedPropertySetsFilter\" xml:space=\"preserve\">\r\n    <value>IFC User-defined property sets files (*.txt)|*.txt</value>\r\n  </data>\r\n  <data name=\"QuantitySet\" xml:space=\"preserve\">\r\n    <value>Quantity Set</value>\r\n  </data>\r\n  <data name=\"IFCAttributes\" xml:space=\"preserve\">\r\n    <value>IFC Attributes</value>\r\n  </data>\r\n  <data name=\"DeprecatedMark\" xml:space=\"preserve\">\r\n    <value>Deprecated</value>\r\n  </data>\r\n  <data name=\"PropertyType\" xml:space=\"preserve\">\r\n    <value>Property Type</value>\r\n  </data>\r\n  <data name=\"DefinedDataType\" xml:space=\"preserve\">\r\n    <value>Defined Data Type</value>\r\n  </data>\r\n  <data name=\"ReservedPropertySetTooltip\" xml:space=\"preserve\">\r\n    <value>Property set names cannot start with any uppercase or lowercase variation of 'pset'.</value>\r\n  </data>\r\n  <data name=\"IFCNotificationMessageBox\" xml:space=\"preserve\">\r\n    <value>Notification</value>\r\n  </data>\r\n  <data name=\"IFCDefaultSetup\" xml:space=\"preserve\">\r\n    <value>&lt;Default&gt;</value>\r\n  </data>\r\n  <data name=\"IFCInvalidUserDefinedMappingFile\" xml:space=\"preserve\">\r\n    <value>This is not a valid property mapping file.</value>\r\n  </data>\r\n  <data name=\"PropertySetInvalidNameTooltip\" xml:space=\"preserve\">\r\n    <value>Enter valid property set name.</value>\r\n  </data>\r\n  <data name=\"TemplateNameInvalidTooltip\" xml:space=\"preserve\">\r\n    <value>Enter valid template name.</value>\r\n  </data>\r\n  <data name=\"EmptyStatePropertySet\" xml:space=\"preserve\">\r\n    <value>Select a property set from one of the setups to choose mapping settings.</value>\r\n  </data>\r\n  <data name=\"EmptyStateSchedulePsets\" xml:space=\"preserve\">\r\n    <value>Add one or more schedules to use this option.</value>\r\n  </data>\r\n  <data name=\"EmptyStateScheduleInfo\" xml:space=\"preserve\">\r\n    <value>There are no schedules in this project.</value>\r\n  </data>\r\n  <data name=\"EmptyStateMaterialInfo\" xml:space=\"preserve\">\r\n    <value>There are no materials in this project.</value>\r\n  </data>\r\n  <data name=\"EmptyStateMaterialPsets\" xml:space=\"preserve\">\r\n    <value>Add one or more materials to use this option.</value>\r\n  </data>\r\n  <data name=\"FilterByCategory\" xml:space=\"preserve\">\r\n    <value>Filter by category</value>\r\n  </data>\r\n  <data name=\"DefaultCategoryFilterTxt\" xml:space=\"preserve\">\r\n    <value>Select</value>\r\n  </data>\r\n  <data name=\"FilterBuiltinProperties\" xml:space=\"preserve\">\r\n    <value>Built-in properties</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Source/IFCExporterUIOverride/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.42000\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace BIM.IFC.Export.UI.Properties {\r\n    \r\n    \r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"17.14.0.0\")]\r\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\r\n        \r\n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\r\n        \r\n        public static Settings Default {\r\n            get {\r\n                return defaultInstance;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"\\\"\\\"\")]\r\n        public string LastSelectedCategory {\r\n            get {\r\n                return ((string)(this[\"LastSelectedCategory\"]));\r\n            }\r\n            set {\r\n                this[\"LastSelectedCategory\"] = value;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/IFCExporterUIOverride/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\r\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\" GeneratedClassNamespace=\"BIM.IFC.Export.UI.Properties\" GeneratedClassName=\"Settings\">\r\n  <Profiles />\r\n  <Settings>\r\n    <Setting Name=\"LastSelectedCategory\" Type=\"System.String\" Scope=\"User\">\r\n      <Value Profile=\"(Default)\">\"\"</Value>\r\n    </Setting>\r\n  </Settings>\r\n</SettingsFile>"
  },
  {
    "path": "Source/IFCExporterUIOverride/Win32API.cs",
    "content": "// (C) Copyright 1994-2014 by Autodesk, Inc. All rights reserved.\n//\n// Permission to use, copy, modify, and distribute this software in\n// object code form for any purpose and without fee is hereby granted\n// provided that the above copyright notice appears in all copies and\n// that both that copyright notice and the limited warranty and\n// restricted rights notice below appear in all supporting\n// documentation.\n//\n// AUTODESK PROVIDES THIS PROGRAM 'AS IS' AND WITH ALL ITS FAULTS.\n// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF\n// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.\n// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE\n// UNINTERRUPTED OR ERROR FREE.\n//\n// Use, duplication, or disclosure by the U.S. Government is subject to\n// restrictions set forth in FAR 52.227-19 (Commercial Computer\n// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)\n// (Rights in Technical Data and Computer Software), as applicable.\n//\n\nusing System.Runtime.InteropServices;\n\npublic class Win32API\n{\n   #region Import DLL\n   /// <summary>\n   /// Checks if filename is one of the reserved device names such as\n   /// CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9.\n   /// https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN#naming-conventions\n   /// </summary>\n   /// <returns> \n   /// Returns 0 if name is not valid DOS device name, or DWORD with\n   /// offset in bytes to DOS device name from beginning of buffer in high word\n   /// and size in bytes of DOS device name in low word\n   /// </returns>\n   [DllImport(\"ntdll.dll\")]\n   public static extern uint RtlIsDosDeviceName_U([MarshalAs(UnmanagedType.LPWStr)] string path);\n\n   #endregion\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Common/Enums/CommonEnum.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Revit.IFC.Common.Enums\n{\n   /// <summary>\n   /// Enumeration for the basis of WCS reference coordinates\n   /// </summary>\n   public enum SiteTransformBasis\n   {\n      Shared = 0,\n      Site = 1,\n      Project = 2,\n      Internal = 3,\n      ProjectInTN = 4,\n      InternalInTN = 5\n   }\n\n   public enum IFCRepresentationIdentifier\n   {\n      Annotation,\n      Axis,\n      Body,\n      BodyFallback, // Body-Fallback.\n      Box,\n      Clearance,\n      CoG,  // Center of gravity\n      FootPrint,\n      Lighting,\n      Profile,\n      Reference,\n      Style,\n      Surface,\n      Other,\n\n      None  // The top level value.\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Common/Enums/IFC2X2_ADD1EntityType.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace Revit.IFC.Common.Enums.IFC2X2_ADD1\n{\n   /// <summary>\n   /// List of Entities for IFC2X2_ADD1\n   /// </summary>\n   public enum IFCEntityType\n   {\n      Ifc2DCompositeCurve,\n      IfcActionTimeControl,\n      IfcActor,\n      IfcActorRole,\n      IfcActuator,\n      IfcAddress,\n      IfcAirFilter,\n      IfcAirTerminal,\n      IfcAirTerminalBox,\n      IfcApplication,\n      IfcApproval,\n      IfcApprovalUsage,\n      IfcArbitraryClosedProfileDef,\n      IfcArbitraryOpenProfileDef,\n      IfcArbitraryProfileDefWithVoids,\n      IfcAssessory,\n      IfcAsset,\n      IfcAxis1Placement,\n      IfcAxis2Placement2D,\n      IfcAxis2Placement3D,\n      IfcBeam,\n      IfcBoiler,\n      IfcBooleanClippingResult,\n      IfcBooleanResult,\n      IfcBoundedCurve,\n      IfcBoundedSurface,\n      IfcBoundingBox,\n      IfcBoxedHalfSpace,\n      IfcBudget,\n      IfcBuilding,\n      IfcBuildingElement,\n      IfcBuildingElementProxy,\n      IfcBuildingStorey,\n      IfcBuiltIn,\n      IfcCMDocPackage,\n      IfcCalendarDate,\n      IfcCartesianPoint,\n      IfcCartesianTransformationOperator,\n      IfcCartesianTransformationOperator2D,\n      IfcCartesianTransformationOperator2DnonUniform,\n      IfcCartesianTransformationOperator3D,\n      IfcCartesianTransformationOperator3DnonUniform,\n      IfcChangeOrder,\n      IfcChiller,\n      IfcCircle,\n      IfcCircleProfileDef,\n      IfcClassification,\n      IfcClassificationItem,\n      IfcClassificationItemRelationship,\n      IfcClassificationNotation,\n      IfcClassificationNotationFacet,\n      IfcClassificationReference,\n      IfcClosedShell,\n      IfcCoil,\n      IfcColumn,\n      IfcCompartment,\n      IfcComplexProperty,\n      IfcCompositeCurve,\n      IfcCompositeCurveSegment,\n      IfcCompositeProfileDef,\n      IfcCompressor,\n      IfcConic,\n      IfcConnectedFaceSet,\n      IfcConnectionConstraint,\n      IfcConnectionCurveGeometry,\n      IfcConnectionGeometry,\n      IfcConnectionPointGeometry,\n      IfcConnectionPortGeometry,\n      IfcConnectionSurfaceGeometry,\n      IfcConstraint,\n      IfcConstraintAggregationRelationship,\n      IfcConstraintUsage,\n      IfcConstructionEquipmentResource,\n      IfcConstructionMaterialResource,\n      IfcConstructionProductResource,\n      IfcContextDependentUnit,\n      IfcControl,\n      IfcControlElement,\n      IfcController,\n      IfcConversionBasedUnit,\n      IfcCoolingTower,\n      IfcCoordinatedUniversalTimeOffset,\n      IfcCost,\n      IfcCostModifier,\n      IfcCostModifierValue,\n      IfcCostQuantity,\n      IfcCostSchedule,\n      IfcCostValue,\n      IfcCostValueRelationship,\n      IfcCovering,\n      IfcCrewResource,\n      IfcCsgSolid,\n      IfcCurtainWall,\n      IfcCurve,\n      IfcCurveBoundedPlane,\n      IfcDamper,\n      IfcDateAndTime,\n      IfcDerivedProfileDef,\n      IfcDerivedUnit,\n      IfcDerivedUnitElement,\n      IfcDimensionalExponents,\n      IfcDirection,\n      IfcDirectionalLightSource,\n      IfcDiscreteElement,\n      IfcDistributionElement,\n      IfcDistributionFlowElement,\n      IfcDocumentElectronicFormat,\n      IfcDocumentInformation,\n      IfcDocumentInformationRelationship,\n      IfcDocumentReference,\n      IfcDoor,\n      IfcDoorLiningProperties,\n      IfcDoorPanelProperties,\n      IfcDoorStyle,\n      IfcEdge,\n      IfcEdgeCurve,\n      IfcElectricMotor,\n      IfcElectricalAppliance,\n      IfcElectricalBaseProperties,\n      IfcElectricalElement,\n      IfcElectricalExtendedProperties,\n      IfcElement,\n      IfcElementQuantity,\n      IfcElementarySurface,\n      IfcEllipse,\n      IfcEllipseProfileDef,\n      IfcEquipmentElement,\n      IfcEquipmentStandard,\n      IfcExtendedMaterialProperties,\n      IfcExternalReference,\n      IfcExtrudedAreaSolid,\n      IfcFace,\n      IfcFaceBasedSurfaceModel,\n      IfcFaceBound,\n      IfcFaceOuterBound,\n      IfcFaceSurface,\n      IfcFacetedBrep,\n      IfcFacetedBrepWithVoids,\n      IfcFan,\n      IfcFlowController,\n      IfcFlowFitting,\n      IfcFlowSegment,\n      IfcFlowTerminal,\n      IfcFluidFlowProperties,\n      IfcFluidMovingDevice,\n      IfcFurnishingElement,\n      IfcFurniture,\n      IfcFurnitureStandard,\n      IfcGeneralMaterialProperties,\n      IfcGeometricRepresentationContext,\n      IfcGeometricRepresentationItem,\n      IfcGeometricSet,\n      IfcGrid,\n      IfcGridAxis,\n      IfcGridPlacement,\n      IfcGroup,\n      IfcHalfSpaceSolid,\n      IfcHeatExchanger,\n      IfcHeatTransferDevice,\n      IfcHydronicHeater,\n      IfcHygroscopicMaterialProperties,\n      IfcInventory,\n      IfcIshapeProfileDef,\n      IfcLaborResource,\n      IfcLibraryInformation,\n      IfcLibraryReference,\n      IfcLightFixture,\n      IfcLine,\n      IfcLocalPlacement,\n      IfcLocalTime,\n      IfcLoop,\n      IfcMaintenanceRecord,\n      IfcMaintenanceWorkOrder,\n      IfcManifoldSolidBrep,\n      IfcManufacturerInformation,\n      IfcMappedItem,\n      IfcMaterial,\n      IfcMaterialClassificationRelationship,\n      IfcMaterialLayer,\n      IfcMaterialLayerSet,\n      IfcMaterialLayerSetUsage,\n      IfcMaterialList,\n      IfcMaterialProperties,\n      IfcMeasureWithUnit,\n      IfcMechanicalMaterialProperties,\n      IfcMetric,\n      IfcMetricBenchmark,\n      IfcMetricValue,\n      IfcMonetaryUnit,\n      IfcMove,\n      IfcNamedUnit,\n      IfcObject,\n      IfcObjectPlacement,\n      IfcObjective,\n      IfcOccupant,\n      IfcOffsetCurve2D,\n      IfcOffsetCurve3D,\n      IfcOpenShell,\n      IfcOpeningElement,\n      IfcOpticalMaterialProperties,\n      IfcOrganization,\n      IfcOrganizationRelationship,\n      IfcOrientedEdge,\n      IfcOutlet,\n      IfcOwnerHistory,\n      IfcPath,\n      IfcPermeableCoveringProperties,\n      IfcPerson,\n      IfcPersonAndOrganization,\n      IfcPhysicalQuantity,\n      IfcPlacement,\n      IfcPlane,\n      IfcPoint,\n      IfcPointLightSource,\n      IfcPolyLoop,\n      IfcPolygonalBoundedHalfSpace,\n      IfcPolyline,\n      IfcPostalAddress,\n      IfcPresentationLightSource,\n      IfcProcess,\n      IfcProduct,\n      IfcProductDefinitionShape,\n      IfcProductRepresentation,\n      IfcProfileDef,\n      IfcProject,\n      IfcProjectOrder,\n      IfcProperty,\n      IfcPropertyBoundedValue,\n      IfcPropertyDefinition,\n      IfcPropertyEnumeratedValue,\n      IfcPropertyEnumeration,\n      IfcPropertyReferenceValue,\n      IfcPropertySet,\n      IfcPropertySetDefinition,\n      IfcPropertySingleValue,\n      IfcPropertyTableValue,\n      IfcProxy,\n      IfcPump,\n      IfcPurchaseOrder,\n      IfcQuantityArea,\n      IfcQuantityCount,\n      IfcQuantityLength,\n      IfcQuantityVolume,\n      IfcQuantityWeight,\n      IfcRailing,\n      IfcRamp,\n      IfcRampFlight,\n      IfcRectangleProfileDef,\n      IfcRectangularTrimmedSurface,\n      IfcReferenceEdge,\n      IfcReferenceFace,\n      IfcReferenceGeometry,\n      IfcReferenceVertex,\n      IfcReferencesCostDocument,\n      IfcRelAggregates,\n      IfcRelAggregatesResources,\n      IfcRelAssigns,\n      IfcRelAssignsFMStandard,\n      IfcRelAssignsTasks,\n      IfcRelAssignsToActor,\n      IfcRelAssignsToControl,\n      IfcRelAssignsToGroup,\n      IfcRelAssignsToProcess,\n      IfcRelAssignsToProduct,\n      IfcRelAssignsToResource,\n      IfcRelAssociates,\n      IfcRelAssociatesClassification,\n      IfcRelAssociatesDocument,\n      IfcRelAssociatesLibrary,\n      IfcRelAssociatesMaterial,\n      IfcRelConnects,\n      IfcRelConnectsElements,\n      IfcRelConnectsPathElements,\n      IfcRelConnectsPorts,\n      IfcRelContainedInSpatialStructure,\n      IfcRelCostsObjects,\n      IfcRelCoversBldgElements,\n      IfcRelDecomposes,\n      IfcRelDefines,\n      IfcRelDefinesByProperties,\n      IfcRelDefinesByType,\n      IfcRelFillsElement,\n      IfcRelFlowControlElements,\n      IfcRelInteractionRequirements,\n      IfcRelMaintenanceEvent,\n      IfcRelNests,\n      IfcRelOccupiesSpaces,\n      IfcRelOverridesProperties,\n      IfcRelSequence,\n      IfcRelServicesBuildings,\n      IfcRelSpaceBoundary,\n      IfcRelUsesResource,\n      IfcRelVoidsElement,\n      IfcRelationship,\n      IfcRepresentation,\n      IfcRepresentationContext,\n      IfcRepresentationItem,\n      IfcRepresentationMap,\n      IfcResource,\n      IfcRevolvedAreaSolid,\n      IfcRoof,\n      IfcRoot,\n      IfcRoundedRectangleProfileDef,\n      IfcSIUnit,\n      IfcSanitaryTerminal,\n      IfcScheduleTimeControl,\n      IfcSectionedSpine,\n      IfcSensor,\n      IfcShapeAspect,\n      IfcShapeRepresentation,\n      IfcShellBasedSurfaceModel,\n      IfcSimpleProperty,\n      IfcSite,\n      IfcSlab,\n      IfcSolidModel,\n      IfcSpace,\n      IfcSpaceProgram,\n      IfcSpaceProgramGroup,\n      IfcSpaceThermalLoad,\n      IfcSpatialStructureElement,\n      IfcSpotLightSource,\n      IfcStair,\n      IfcStairFlight,\n      IfcStorageDevice,\n      IfcSubContractResource,\n      IfcSurface,\n      IfcSurfaceExtendedProperties,\n      IfcSurfaceOfLinearExtrusion,\n      IfcSurfaceOfRevolution,\n      IfcSurfaceRenderingProperties,\n      IfcSurfaceShadingProperties,\n      IfcSurfaceStyle,\n      IfcSurfaceStyleProperties,\n      IfcSurfaceStyleUsage,\n      IfcSweptAreaSolid,\n      IfcSweptSurface,\n      IfcSystem,\n      IfcSystemFurnitureElement,\n      IfcTable,\n      IfcTableRow,\n      IfcTank,\n      IfcTask,\n      IfcTelecomAddress,\n      IfcThermalMaterialProperties,\n      IfcTopologicalRepresentationItem,\n      IfcTransportElement,\n      IfcTrapeziumProfileDef,\n      IfcTreatmentDevice,\n      IfcTrimmedCurve,\n      IfcTubeBundle,\n      IfcTypeObject,\n      IfcTypeProduct,\n      IfcUnitAssignment,\n      IfcUnitHeater,\n      IfcValve,\n      IfcVector,\n      IfcVertex,\n      IfcVertexPoint,\n      IfcVirtualGridIntersection,\n      IfcWall,\n      IfcWallStandardCase,\n      IfcWindow,\n      IfcWindowLiningProperties,\n      IfcWindowPanelProperties,\n      IfcWindowStyle,\n      IfcWorkControl,\n      IfcWorkOrder,\n      IfcWorkPlan,\n      IfcWorkSchedule,\n      IfcZone,\n      Unknown,\n      DontExport\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Enums/IFC2X3_TC1EntityType.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace Revit.IFC.Common.Enums.IFC2X3_TC1\n{\n   /// <summary>\n   /// List of Entities for IFC2X3_TC1\n   /// </summary>\n   public enum IFCEntityType\n   {\n      Ifc2DCompositeCurve,\n      IfcActionRequest,\n      IfcActor,\n      IfcActorRole,\n      IfcActuatorType,\n      IfcAddress,\n      IfcAirTerminalBoxType,\n      IfcAirTerminalType,\n      IfcAirToAirHeatRecoveryType,\n      IfcAlarmType,\n      IfcAngularDimension,\n      IfcAnnotation,\n      IfcAnnotationCurveOccurrence,\n      IfcAnnotationFillArea,\n      IfcAnnotationFillAreaOccurrence,\n      IfcAnnotationOccurrence,\n      IfcAnnotationSurface,\n      IfcAnnotationSurfaceOccurrence,\n      IfcAnnotationSymbolOccurrence,\n      IfcAnnotationTextOccurrence,\n      IfcApplication,\n      IfcAppliedValue,\n      IfcAppliedValueRelationship,\n      IfcApproval,\n      IfcApprovalActorRelationship,\n      IfcApprovalPropertyRelationship,\n      IfcApprovalRelationship,\n      IfcArbitraryClosedProfileDef,\n      IfcArbitraryOpenProfileDef,\n      IfcArbitraryProfileDefWithVoids,\n      IfcAsset,\n      IfcAsymmetricIShapeProfileDef,\n      IfcAxis1Placement,\n      IfcAxis2Placement2D,\n      IfcAxis2Placement3D,\n      IfcBSplineCurve,\n      IfcBeam,\n      IfcBeamType,\n      IfcBezierCurve,\n      IfcBlobTexture,\n      IfcBlock,\n      IfcBoilerType,\n      IfcBooleanClippingResult,\n      IfcBooleanResult,\n      IfcBoundaryCondition,\n      IfcBoundaryEdgeCondition,\n      IfcBoundaryFaceCondition,\n      IfcBoundaryNodeCondition,\n      IfcBoundaryNodeConditionWarping,\n      IfcBoundedCurve,\n      IfcBoundedSurface,\n      IfcBoundingBox,\n      IfcBoxedHalfSpace,\n      IfcBuilding,\n      IfcBuildingElement,\n      IfcBuildingElementComponent,\n      IfcBuildingElementPart,\n      IfcBuildingElementProxy,\n      IfcBuildingElementProxyType,\n      IfcBuildingElementType,\n      IfcBuildingStorey,\n      IfcCShapeProfileDef,\n      IfcCableCarrierFittingType,\n      IfcCableCarrierSegmentType,\n      IfcCableSegmentType,\n      IfcCalendarDate,\n      IfcCartesianPoint,\n      IfcCartesianTransformationOperator,\n      IfcCartesianTransformationOperator2D,\n      IfcCartesianTransformationOperator2DnonUniform,\n      IfcCartesianTransformationOperator3D,\n      IfcCartesianTransformationOperator3DnonUniform,\n      IfcCenterLineProfileDef,\n      IfcChamferEdgeFeature,\n      IfcChillerType,\n      IfcCircle,\n      IfcCircleHollowProfileDef,\n      IfcCircleProfileDef,\n      IfcClassification,\n      IfcClassificationItem,\n      IfcClassificationItemRelationship,\n      IfcClassificationNotation,\n      IfcClassificationNotationFacet,\n      IfcClassificationReference,\n      IfcClosedShell,\n      IfcCoilType,\n      IfcColourRgb,\n      IfcColourSpecification,\n      IfcColumn,\n      IfcColumnType,\n      IfcComplexProperty,\n      IfcCompositeCurve,\n      IfcCompositeCurveSegment,\n      IfcCompositeProfileDef,\n      IfcCompressorType,\n      IfcCondenserType,\n      IfcCondition,\n      IfcConditionCriterion,\n      IfcConic,\n      IfcConnectedFaceSet,\n      IfcConnectionCurveGeometry,\n      IfcConnectionGeometry,\n      IfcConnectionPointEccentricity,\n      IfcConnectionPointGeometry,\n      IfcConnectionPortGeometry,\n      IfcConnectionSurfaceGeometry,\n      IfcConstraint,\n      IfcConstraintAggregationRelationship,\n      IfcConstraintClassificationRelationship,\n      IfcConstraintRelationship,\n      IfcConstructionEquipmentResource,\n      IfcConstructionMaterialResource,\n      IfcConstructionProductResource,\n      IfcConstructionResource,\n      IfcContextDependentUnit,\n      IfcControl,\n      IfcControllerType,\n      IfcConversionBasedUnit,\n      IfcCooledBeamType,\n      IfcCoolingTowerType,\n      IfcCoordinatedUniversalTimeOffset,\n      IfcCostItem,\n      IfcCostSchedule,\n      IfcCostValue,\n      IfcCovering,\n      IfcCoveringType,\n      IfcCraneRailAShapeProfileDef,\n      IfcCraneRailFShapeProfileDef,\n      IfcCrewResource,\n      IfcCsgPrimitive3D,\n      IfcCsgSolid,\n      IfcCurrencyRelationship,\n      IfcCurtainWall,\n      IfcCurtainWallType,\n      IfcCurve,\n      IfcCurveBoundedPlane,\n      IfcCurveStyle,\n      IfcCurveStyleFont,\n      IfcCurveStyleFontAndScaling,\n      IfcCurveStyleFontPattern,\n      IfcDamperType,\n      IfcDateAndTime,\n      IfcDefinedSymbol,\n      IfcDerivedProfileDef,\n      IfcDerivedUnit,\n      IfcDerivedUnitElement,\n      IfcDiameterDimension,\n      IfcDimensionCalloutRelationship,\n      IfcDimensionCurve,\n      IfcDimensionCurveDirectedCallout,\n      IfcDimensionCurveTerminator,\n      IfcDimensionPair,\n      IfcDimensionalExponents,\n      IfcDirection,\n      IfcDiscreteAccessory,\n      IfcDiscreteAccessoryType,\n      IfcDistributionChamberElement,\n      IfcDistributionChamberElementType,\n      IfcDistributionControlElement,\n      IfcDistributionControlElementType,\n      IfcDistributionElement,\n      IfcDistributionElementType,\n      IfcDistributionFlowElement,\n      IfcDistributionFlowElementType,\n      IfcDistributionPort,\n      IfcDocumentElectronicFormat,\n      IfcDocumentInformation,\n      IfcDocumentInformationRelationship,\n      IfcDocumentReference,\n      IfcDoor,\n      IfcDoorLiningProperties,\n      IfcDoorPanelProperties,\n      IfcDoorStyle,\n      IfcDraughtingCallout,\n      IfcDraughtingCalloutRelationship,\n      IfcDraughtingPreDefinedColour,\n      IfcDraughtingPreDefinedCurveFont,\n      IfcDraughtingPreDefinedTextFont,\n      IfcDuctFittingType,\n      IfcDuctSegmentType,\n      IfcDuctSilencerType,\n      IfcEdge,\n      IfcEdgeCurve,\n      IfcEdgeFeature,\n      IfcEdgeLoop,\n      IfcElectricApplianceType,\n      IfcElectricDistributionPoint,\n      IfcElectricFlowStorageDeviceType,\n      IfcElectricGeneratorType,\n      IfcElectricHeaterType,\n      IfcElectricMotorType,\n      IfcElectricTimeControlType,\n      IfcElectricalBaseProperties,\n      IfcElectricalCircuit,\n      IfcElectricalElement,\n      IfcElement,\n      IfcElementAssembly,\n      IfcElementComponent,\n      IfcElementComponentType,\n      IfcElementQuantity,\n      IfcElementType,\n      IfcElementarySurface,\n      IfcEllipse,\n      IfcEllipseProfileDef,\n      IfcEnergyConversionDevice,\n      IfcEnergyConversionDeviceType,\n      IfcEnergyProperties,\n      IfcEnvironmentalImpactValue,\n      IfcEquipmentElement,\n      IfcEquipmentStandard,\n      IfcEvaporativeCoolerType,\n      IfcEvaporatorType,\n      IfcExtendedMaterialProperties,\n      IfcExternalReference,\n      IfcExternallyDefinedHatchStyle,\n      IfcExternallyDefinedSurfaceStyle,\n      IfcExternallyDefinedSymbol,\n      IfcExternallyDefinedTextFont,\n      IfcExtrudedAreaSolid,\n      IfcFace,\n      IfcFaceBasedSurfaceModel,\n      IfcFaceBound,\n      IfcFaceOuterBound,\n      IfcFaceSurface,\n      IfcFacetedBrep,\n      IfcFacetedBrepWithVoids,\n      IfcFailureConnectionCondition,\n      IfcFanType,\n      IfcFastener,\n      IfcFastenerType,\n      IfcFeatureElement,\n      IfcFeatureElementAddition,\n      IfcFeatureElementSubtraction,\n      IfcFillAreaStyle,\n      IfcFillAreaStyleHatching,\n      IfcFillAreaStyleTileSymbolWithStyle,\n      IfcFillAreaStyleTiles,\n      IfcFilterType,\n      IfcFireSuppressionTerminalType,\n      IfcFlowController,\n      IfcFlowControllerType,\n      IfcFlowFitting,\n      IfcFlowFittingType,\n      IfcFlowInstrumentType,\n      IfcFlowMeterType,\n      IfcFlowMovingDevice,\n      IfcFlowMovingDeviceType,\n      IfcFlowSegment,\n      IfcFlowSegmentType,\n      IfcFlowStorageDevice,\n      IfcFlowStorageDeviceType,\n      IfcFlowTerminal,\n      IfcFlowTerminalType,\n      IfcFlowTreatmentDevice,\n      IfcFlowTreatmentDeviceType,\n      IfcFluidFlowProperties,\n      IfcFooting,\n      IfcFuelProperties,\n      IfcFurnishingElement,\n      IfcFurnishingElementType,\n      IfcFurnitureStandard,\n      IfcFurnitureType,\n      IfcGasTerminalType,\n      IfcGeneralMaterialProperties,\n      IfcGeneralProfileProperties,\n      IfcGeometricCurveSet,\n      IfcGeometricRepresentationContext,\n      IfcGeometricRepresentationItem,\n      IfcGeometricRepresentationSubContext,\n      IfcGeometricSet,\n      IfcGrid,\n      IfcGridAxis,\n      IfcGridPlacement,\n      IfcGroup,\n      IfcHalfSpaceSolid,\n      IfcHeatExchangerType,\n      IfcHumidifierType,\n      IfcHygroscopicMaterialProperties,\n      IfcIShapeProfileDef,\n      IfcImageTexture,\n      IfcInventory,\n      IfcIrregularTimeSeries,\n      IfcIrregularTimeSeriesValue,\n      IfcJunctionBoxType,\n      IfcLShapeProfileDef,\n      IfcLaborResource,\n      IfcLampType,\n      IfcLibraryInformation,\n      IfcLibraryReference,\n      IfcLightDistributionData,\n      IfcLightFixtureType,\n      IfcLightIntensityDistribution,\n      IfcLightSource,\n      IfcLightSourceAmbient,\n      IfcLightSourceDirectional,\n      IfcLightSourceGoniometric,\n      IfcLightSourcePositional,\n      IfcLightSourceSpot,\n      IfcLine,\n      IfcLinearDimension,\n      IfcLocalPlacement,\n      IfcLocalTime,\n      IfcLoop,\n      IfcManifoldSolidBrep,\n      IfcMappedItem,\n      IfcMaterial,\n      IfcMaterialClassificationRelationship,\n      IfcMaterialDefinitionRepresentation,\n      IfcMaterialLayer,\n      IfcMaterialLayerSet,\n      IfcMaterialLayerSetUsage,\n      IfcMaterialList,\n      IfcMaterialProperties,\n      IfcMeasureWithUnit,\n      IfcMechanicalConcreteMaterialProperties,\n      IfcMechanicalFastener,\n      IfcMechanicalFastenerType,\n      IfcMechanicalMaterialProperties,\n      IfcMechanicalSteelMaterialProperties,\n      IfcMember,\n      IfcMemberType,\n      IfcMetric,\n      IfcMonetaryUnit,\n      IfcMotorConnectionType,\n      IfcMove,\n      IfcNamedUnit,\n      IfcObject,\n      IfcObjectDefinition,\n      IfcObjectPlacement,\n      IfcObjective,\n      IfcOccupant,\n      IfcOffsetCurve2D,\n      IfcOffsetCurve3D,\n      IfcOneDirectionRepeatFactor,\n      IfcOpenShell,\n      IfcOpeningElement,\n      IfcOpticalMaterialProperties,\n      IfcOrderAction,\n      IfcOrganization,\n      IfcOrganizationRelationship,\n      IfcOrientedEdge,\n      IfcOutletType,\n      IfcOwnerHistory,\n      IfcParameterizedProfileDef,\n      IfcPath,\n      IfcPerformanceHistory,\n      IfcPermeableCoveringProperties,\n      IfcPermit,\n      IfcPerson,\n      IfcPersonAndOrganization,\n      IfcPhysicalComplexQuantity,\n      IfcPhysicalQuantity,\n      IfcPhysicalSimpleQuantity,\n      IfcPile,\n      IfcPipeFittingType,\n      IfcPipeSegmentType,\n      IfcPixelTexture,\n      IfcPlacement,\n      IfcPlanarBox,\n      IfcPlanarExtent,\n      IfcPlane,\n      IfcPlate,\n      IfcPlateType,\n      IfcPoint,\n      IfcPointOnCurve,\n      IfcPointOnSurface,\n      IfcPolyLoop,\n      IfcPolygonalBoundedHalfSpace,\n      IfcPolyline,\n      IfcPort,\n      IfcPostalAddress,\n      IfcPreDefinedColour,\n      IfcPreDefinedCurveFont,\n      IfcPreDefinedDimensionSymbol,\n      IfcPreDefinedItem,\n      IfcPreDefinedPointMarkerSymbol,\n      IfcPreDefinedSymbol,\n      IfcPreDefinedTerminatorSymbol,\n      IfcPreDefinedTextFont,\n      IfcPresentationLayerAssignment,\n      IfcPresentationLayerWithStyle,\n      IfcPresentationStyle,\n      IfcPresentationStyleAssignment,\n      IfcProcedure,\n      IfcProcess,\n      IfcProduct,\n      IfcProductDefinitionShape,\n      IfcProductRepresentation,\n      IfcProductsOfCombustionProperties,\n      IfcProfileDef,\n      IfcProfileProperties,\n      IfcProject,\n      IfcProjectOrder,\n      IfcProjectOrderRecord,\n      IfcProjectionCurve,\n      IfcProjectionElement,\n      IfcProperty,\n      IfcPropertyBoundedValue,\n      IfcPropertyConstraintRelationship,\n      IfcPropertyDefinition,\n      IfcPropertyDependencyRelationship,\n      IfcPropertyEnumeratedValue,\n      IfcPropertyEnumeration,\n      IfcPropertyListValue,\n      IfcPropertyReferenceValue,\n      IfcPropertySet,\n      IfcPropertySetDefinition,\n      IfcPropertySingleValue,\n      IfcPropertyTableValue,\n      IfcProtectiveDeviceType,\n      IfcProxy,\n      IfcPumpType,\n      IfcQuantityArea,\n      IfcQuantityCount,\n      IfcQuantityLength,\n      IfcQuantityTime,\n      IfcQuantityVolume,\n      IfcQuantityWeight,\n      IfcRadiusDimension,\n      IfcRailing,\n      IfcRailingType,\n      IfcRamp,\n      IfcRampFlight,\n      IfcRampFlightType,\n      IfcRationalBezierCurve,\n      IfcRectangleHollowProfileDef,\n      IfcRectangleProfileDef,\n      IfcRectangularPyramid,\n      IfcRectangularTrimmedSurface,\n      IfcReferencesValueDocument,\n      IfcRegularTimeSeries,\n      IfcReinforcementBarProperties,\n      IfcReinforcementDefinitionProperties,\n      IfcReinforcingBar,\n      IfcReinforcingElement,\n      IfcReinforcingMesh,\n      IfcRelAggregates,\n      IfcRelAssigns,\n      IfcRelAssignsTasks,\n      IfcRelAssignsToActor,\n      IfcRelAssignsToControl,\n      IfcRelAssignsToGroup,\n      IfcRelAssignsToProcess,\n      IfcRelAssignsToProduct,\n      IfcRelAssignsToProjectOrder,\n      IfcRelAssignsToResource,\n      IfcRelAssociates,\n      IfcRelAssociatesAppliedValue,\n      IfcRelAssociatesApproval,\n      IfcRelAssociatesClassification,\n      IfcRelAssociatesConstraint,\n      IfcRelAssociatesDocument,\n      IfcRelAssociatesLibrary,\n      IfcRelAssociatesMaterial,\n      IfcRelAssociatesProfileProperties,\n      IfcRelConnects,\n      IfcRelConnectsElements,\n      IfcRelConnectsPathElements,\n      IfcRelConnectsPortToElement,\n      IfcRelConnectsPorts,\n      IfcRelConnectsStructuralActivity,\n      IfcRelConnectsStructuralElement,\n      IfcRelConnectsStructuralMember,\n      IfcRelConnectsWithEccentricity,\n      IfcRelConnectsWithRealizingElements,\n      IfcRelContainedInSpatialStructure,\n      IfcRelCoversBldgElements,\n      IfcRelCoversSpaces,\n      IfcRelDecomposes,\n      IfcRelDefines,\n      IfcRelDefinesByProperties,\n      IfcRelDefinesByType,\n      IfcRelFillsElement,\n      IfcRelFlowControlElements,\n      IfcRelInteractionRequirements,\n      IfcRelNests,\n      IfcRelOccupiesSpaces,\n      IfcRelOverridesProperties,\n      IfcRelProjectsElement,\n      IfcRelReferencedInSpatialStructure,\n      IfcRelSchedulesCostItems,\n      IfcRelSequence,\n      IfcRelServicesBuildings,\n      IfcRelSpaceBoundary,\n      IfcRelVoidsElement,\n      IfcRelationship,\n      IfcRelaxation,\n      IfcRepresentation,\n      IfcRepresentationContext,\n      IfcRepresentationItem,\n      IfcRepresentationMap,\n      IfcResource,\n      IfcRevolvedAreaSolid,\n      IfcRibPlateProfileProperties,\n      IfcRightCircularCone,\n      IfcRightCircularCylinder,\n      IfcRoof,\n      IfcRoot,\n      IfcRoundedEdgeFeature,\n      IfcRoundedRectangleProfileDef,\n      IfcSIUnit,\n      IfcSanitaryTerminalType,\n      IfcScheduleTimeControl,\n      IfcSectionProperties,\n      IfcSectionReinforcementProperties,\n      IfcSectionedSpine,\n      IfcSensorType,\n      IfcServiceLife,\n      IfcServiceLifeFactor,\n      IfcShapeAspect,\n      IfcShapeModel,\n      IfcShapeRepresentation,\n      IfcShellBasedSurfaceModel,\n      IfcSimpleProperty,\n      IfcSite,\n      IfcSlab,\n      IfcSlabType,\n      IfcSlippageConnectionCondition,\n      IfcSolidModel,\n      IfcSoundProperties,\n      IfcSoundValue,\n      IfcSpace,\n      IfcSpaceHeaterType,\n      IfcSpaceProgram,\n      IfcSpaceThermalLoadProperties,\n      IfcSpaceType,\n      IfcSpatialStructureElement,\n      IfcSpatialStructureElementType,\n      IfcSphere,\n      IfcStackTerminalType,\n      IfcStair,\n      IfcStairFlight,\n      IfcStairFlightType,\n      IfcStructuralAction,\n      IfcStructuralActivity,\n      IfcStructuralAnalysisModel,\n      IfcStructuralConnection,\n      IfcStructuralConnectionCondition,\n      IfcStructuralCurveConnection,\n      IfcStructuralCurveMember,\n      IfcStructuralCurveMemberVarying,\n      IfcStructuralItem,\n      IfcStructuralLinearAction,\n      IfcStructuralLinearActionVarying,\n      IfcStructuralLoad,\n      IfcStructuralLoadGroup,\n      IfcStructuralLoadLinearForce,\n      IfcStructuralLoadPlanarForce,\n      IfcStructuralLoadSingleDisplacement,\n      IfcStructuralLoadSingleDisplacementDistortion,\n      IfcStructuralLoadSingleForce,\n      IfcStructuralLoadSingleForceWarping,\n      IfcStructuralLoadStatic,\n      IfcStructuralLoadTemperature,\n      IfcStructuralMember,\n      IfcStructuralPlanarAction,\n      IfcStructuralPlanarActionVarying,\n      IfcStructuralPointAction,\n      IfcStructuralPointConnection,\n      IfcStructuralPointReaction,\n      IfcStructuralProfileProperties,\n      IfcStructuralReaction,\n      IfcStructuralResultGroup,\n      IfcStructuralSteelProfileProperties,\n      IfcStructuralSurfaceConnection,\n      IfcStructuralSurfaceMember,\n      IfcStructuralSurfaceMemberVarying,\n      IfcStructuredDimensionCallout,\n      IfcStyleModel,\n      IfcStyledItem,\n      IfcStyledRepresentation,\n      IfcSubContractResource,\n      IfcSubedge,\n      IfcSurface,\n      IfcSurfaceCurveSweptAreaSolid,\n      IfcSurfaceOfLinearExtrusion,\n      IfcSurfaceOfRevolution,\n      IfcSurfaceStyle,\n      IfcSurfaceStyleLighting,\n      IfcSurfaceStyleRefraction,\n      IfcSurfaceStyleRendering,\n      IfcSurfaceStyleShading,\n      IfcSurfaceStyleWithTextures,\n      IfcSurfaceTexture,\n      IfcSweptAreaSolid,\n      IfcSweptDiskSolid,\n      IfcSweptSurface,\n      IfcSwitchingDeviceType,\n      IfcSymbolStyle,\n      IfcSystem,\n      IfcSystemFurnitureElementType,\n      IfcTShapeProfileDef,\n      IfcTable,\n      IfcTableRow,\n      IfcTankType,\n      IfcTask,\n      IfcTelecomAddress,\n      IfcTendon,\n      IfcTendonAnchor,\n      IfcTerminatorSymbol,\n      IfcTextLiteral,\n      IfcTextLiteralWithExtent,\n      IfcTextStyle,\n      IfcTextStyleFontModel,\n      IfcTextStyleForDefinedFont,\n      IfcTextStyleTextModel,\n      IfcTextStyleWithBoxCharacteristics,\n      IfcTextureCoordinate,\n      IfcTextureCoordinateGenerator,\n      IfcTextureMap,\n      IfcTextureVertex,\n      IfcThermalMaterialProperties,\n      IfcTimeSeries,\n      IfcTimeSeriesReferenceRelationship,\n      IfcTimeSeriesSchedule,\n      IfcTimeSeriesValue,\n      IfcTopologicalRepresentationItem,\n      IfcTopologyRepresentation,\n      IfcTransformerType,\n      IfcTransportElement,\n      IfcTransportElementType,\n      IfcTrapeziumProfileDef,\n      IfcTrimmedCurve,\n      IfcTubeBundleType,\n      IfcTwoDirectionRepeatFactor,\n      IfcTypeObject,\n      IfcTypeProduct,\n      IfcUShapeProfileDef,\n      IfcUnitAssignment,\n      IfcUnitaryEquipmentType,\n      IfcValveType,\n      IfcVector,\n      IfcVertex,\n      IfcVertexBasedTextureMap,\n      IfcVertexLoop,\n      IfcVertexPoint,\n      IfcVibrationIsolatorType,\n      IfcVirtualElement,\n      IfcVirtualGridIntersection,\n      IfcWall,\n      IfcWallStandardCase,\n      IfcWallType,\n      IfcWasteTerminalType,\n      IfcWaterProperties,\n      IfcWindow,\n      IfcWindowLiningProperties,\n      IfcWindowPanelProperties,\n      IfcWindowStyle,\n      IfcWorkControl,\n      IfcWorkPlan,\n      IfcWorkSchedule,\n      IfcZShapeProfileDef,\n      IfcZone,\n      Unknown,\n      DontExport\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Enums/IFC2xEntityType.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace Revit.IFC.Common.Enums.IFC2x\r\n{\r\n   /// <summary>\r\n   /// IFC entity types.\r\n   /// </summary>\r\n   public enum IFCEntityType\r\n   {\r\n      Ifc2DCompositeCurve,\r\n      IfcActionRequest,\r\n      IfcActionTimeControl,\r\n      IfcActor,\r\n      IfcActorRole,\r\n      IfcActuator,\r\n      IfcActuatorType,\r\n      IfcAddress,\r\n      IfcAirFilter,\r\n      IfcAirTerminal,\r\n      IfcAirTerminalBox,\r\n      IfcAirTerminalBoxType,\r\n      IfcAirTerminalType,\r\n      IfcAirToAirHeatRecoveryType,\r\n      IfcAlarmType,\r\n      IfcAngularDimension,\r\n      IfcAnnotation,\r\n      IfcAnnotationCurveOccurrence,\r\n      IfcAnnotationFillArea,\r\n      IfcAnnotationFillAreaOccurrence,\r\n      IfcAnnotationOccurrence,\r\n      IfcAnnotationSurface,\r\n      IfcAnnotationSurfaceOccurrence,\r\n      IfcAnnotationSymbolOccurrence,\r\n      IfcAnnotationTextOccurrence,\r\n      IfcApplication,\r\n      IfcAppliedValue,\r\n      IfcAppliedValueRelationship,\r\n      IfcApproval,\r\n      IfcApprovalActorRelationship,\r\n      IfcApprovalPropertyRelationship,\r\n      IfcApprovalRelationship,\r\n      IfcApprovalUsage,\r\n      IfcArbitraryClosedProfileDef,\r\n      IfcArbitraryOpenProfileDef,\r\n      IfcArbitraryProfileDefWithVoids,\r\n      IfcAssessory,\r\n      IfcAsset,\r\n      IfcAsymmetricIShapeProfileDef,\r\n      IfcAxis1Placement,\r\n      IfcAxis2Placement2D,\r\n      IfcAxis2Placement3D,\r\n      IfcBSplineCurve,\r\n      IfcBeam,\r\n      IfcBeamType,\r\n      IfcBezierCurve,\r\n      IfcBlobTexture,\r\n      IfcBlock,\r\n      IfcBoiler,\r\n      IfcBoilerType,\r\n      IfcBooleanClippingResult,\r\n      IfcBooleanResult,\r\n      IfcBoundaryCondition,\r\n      IfcBoundaryEdgeCondition,\r\n      IfcBoundaryFaceCondition,\r\n      IfcBoundaryNodeCondition,\r\n      IfcBoundaryNodeConditionWarping,\r\n      IfcBoundedCurve,\r\n      IfcBoundedSurface,\r\n      IfcBoundingBox,\r\n      IfcBoxedHalfSpace,\r\n      IfcBudget,\r\n      IfcBuilding,\r\n      IfcBuildingElement,\r\n      IfcBuildingElementComponent,\r\n      IfcBuildingElementPart,\r\n      IfcBuildingElementProxy,\r\n      IfcBuildingElementProxyType,\r\n      IfcBuildingElementType,\r\n      IfcBuildingStorey,\r\n      IfcBuiltIn,\r\n      IfcCShapeProfileDef,\r\n      IfcCableCarrierFittingType,\r\n      IfcCableCarrierSegmentType,\r\n      IfcCableSegmentType,\r\n      IfcCalendarDate,\r\n      IfcCartesianPoint,\r\n      IfcCartesianTransformationOperator,\r\n      IfcCartesianTransformationOperator2D,\r\n      IfcCartesianTransformationOperator2DnonUniform,\r\n      IfcCartesianTransformationOperator3D,\r\n      IfcCartesianTransformationOperator3DnonUniform,\r\n      IfcCenterLineProfileDef,\r\n      IfcChamferEdgeFeature,\r\n      IfcChangeOrder,\r\n      IfcChiller,\r\n      IfcChillerType,\r\n      IfcCircle,\r\n      IfcCircleHollowProfileDef,\r\n      IfcCircleProfileDef,\r\n      IfcClassification,\r\n      IfcClassificationItem,\r\n      IfcClassificationItemRelationship,\r\n      IfcClassificationNotation,\r\n      IfcClassificationNotationFacet,\r\n      IfcClassificationReference,\r\n      IfcClosedShell,\r\n      IfcCMDocPackage,\r\n      IfcCoil,\r\n      IfcCoilType,\r\n      IfcColourRgb,\r\n      IfcColourSpecification,\r\n      IfcColumn,\r\n      IfcColumnType,\r\n      IfcCompartment,\r\n      IfcComplexProperty,\r\n      IfcCompositeCurve,\r\n      IfcCompositeCurveSegment,\r\n      IfcCompositeProfileDef,\r\n      IfcCompressor,\r\n      IfcCompressorType,\r\n      IfcCondenserType,\r\n      IfcCondition,\r\n      IfcConditionCriterion,\r\n      IfcConic,\r\n      IfcConnectedFaceSet,\r\n      IfcConnectionConstraint,\r\n      IfcConnectionCurveGeometry,\r\n      IfcConnectionGeometry,\r\n      IfcConnectionPointEccentricity,\r\n      IfcConnectionPointGeometry,\r\n      IfcConnectionPortGeometry,\r\n      IfcConnectionSurfaceGeometry,\r\n      IfcConstraint,\r\n      IfcConstraintAggregationRelationship,\r\n      IfcConstraintClassificationRelationship,\r\n      IfcConstraintRelationship,\r\n      IfcConstraintUsage,\r\n      IfcConstructionEquipmentResource,\r\n      IfcConstructionMaterialResource,\r\n      IfcConstructionProductResource,\r\n      IfcConstructionResource,\r\n      IfcContextDependentUnit,\r\n      IfcControl,\r\n      IfcControlElement,\r\n      IfcController,\r\n      IfcControllerType,\r\n      IfcConversionBasedUnit,\r\n      IfcCooledBeamType,\r\n      IfcCoolingTower,\r\n      IfcCoolingTowerType,\r\n      IfcCoordinatedUniversalTimeOffset,\r\n      IfcCost,\r\n      IfcCostItem,\r\n      IfcCostModifier,\r\n      IfcCostModifierValue,\r\n      IfcCostQuantity,\r\n      IfcCostSchedule,\r\n      IfcCostValue,\r\n      IfcCostValueRelationship,\r\n      IfcCovering,\r\n      IfcCoveringType,\r\n      IfcCraneRailAShapeProfileDef,\r\n      IfcCraneRailFShapeProfileDef,\r\n      IfcCrewResource,\r\n      IfcCsgPrimitive3D,\r\n      IfcCsgSolid,\r\n      IfcCurrencyRelationship,\r\n      IfcCurtainWall,\r\n      IfcCurtainWallType,\r\n      IfcCurve,\r\n      IfcCurveBoundedPlane,\r\n      IfcCurveStyle,\r\n      IfcCurveStyleFont,\r\n      IfcCurveStyleFontAndScaling,\r\n      IfcCurveStyleFontPattern,\r\n      IfcDamper,\r\n      IfcDamperType,\r\n      IfcDateAndTime,\r\n      IfcDefinedSymbol,\r\n      IfcDerivedProfileDef,\r\n      IfcDerivedUnit,\r\n      IfcDerivedUnitElement,\r\n      IfcDiameterDimension,\r\n      IfcDimensionCalloutRelationship,\r\n      IfcDimensionCurve,\r\n      IfcDimensionCurveDirectedCallout,\r\n      IfcDimensionCurveTerminator,\r\n      IfcDimensionPair,\r\n      IfcDimensionalExponents,\r\n      IfcDirection,\r\n      IfcDirectionalLightSource,\r\n      IfcDiscreteAccessory,\r\n      IfcDiscreteAccessoryType,\r\n      IfcDiscreteElement,\r\n      IfcDistributionChamberElement,\r\n      IfcDistributionChamberElementType,\r\n      IfcDistributionControlElement,\r\n      IfcDistributionControlElementType,\r\n      IfcDistributionElement,\r\n      IfcDistributionElementType,\r\n      IfcDistributionFlowElement,\r\n      IfcDistributionFlowElementType,\r\n      IfcDistributionPort,\r\n      IfcDocumentElectronicFormat,\r\n      IfcDocumentInformation,\r\n      IfcDocumentInformationRelationship,\r\n      IfcDocumentReference,\r\n      IfcDoor,\r\n      IfcDoorLiningProperties,\r\n      IfcDoorPanelProperties,\r\n      IfcDoorStyle,\r\n      IfcDraughtingCallout,\r\n      IfcDraughtingCalloutRelationship,\r\n      IfcDraughtingPreDefinedColour,\r\n      IfcDraughtingPreDefinedCurveFont,\r\n      IfcDraughtingPreDefinedTextFont,\r\n      IfcDuctFittingType,\r\n      IfcDuctSegmentType,\r\n      IfcDuctSilencerType,\r\n      IfcEdge,\r\n      IfcEdgeCurve,\r\n      IfcEdgeFeature,\r\n      IfcEdgeLoop,\r\n      IfcElectricalAppliance,\r\n      IfcElectricalBaseProperties,\r\n      IfcElectricalCircuit,\r\n      IfcElectricalElement,\r\n      IfcElectricalExtendedProperties,\r\n      IfcElectricApplianceType,\r\n      IfcElectricDistributionPoint,\r\n      IfcElectricFlowStorageDeviceType,\r\n      IfcElectricGeneratorType,\r\n      IfcElectricHeaterType,\r\n      IfcElectricMotor,\r\n      IfcElectricMotorType,\r\n      IfcElectricTimeControlType,\r\n      IfcElement,\r\n      IfcElementAssembly,\r\n      IfcElementComponent,\r\n      IfcElementComponentType,\r\n      IfcElementQuantity,\r\n      IfcElementType,\r\n      IfcElementarySurface,\r\n      IfcEllipse,\r\n      IfcEllipseProfileDef,\r\n      IfcEnergyConversionDevice,\r\n      IfcEnergyConversionDeviceType,\r\n      IfcEnergyProperties,\r\n      IfcEnvironmentalImpactValue,\r\n      IfcEquipmentElement,\r\n      IfcEquipmentStandard,\r\n      IfcEvaporativeCoolerType,\r\n      IfcEvaporatorType,\r\n      IfcExtendedMaterialProperties,\r\n      IfcExternalReference,\r\n      IfcExternallyDefinedHatchStyle,\r\n      IfcExternallyDefinedSurfaceStyle,\r\n      IfcExternallyDefinedSymbol,\r\n      IfcExternallyDefinedTextFont,\r\n      IfcExtrudedAreaSolid,\r\n      IfcFace,\r\n      IfcFaceBasedSurfaceModel,\r\n      IfcFaceBound,\r\n      IfcFaceOuterBound,\r\n      IfcFaceSurface,\r\n      IfcFacetedBrep,\r\n      IfcFacetedBrepWithVoids,\r\n      IfcFailureConnectionCondition,\r\n      IfcFan,\r\n      IfcFanType,\r\n      IfcFastener,\r\n      IfcFastenerType,\r\n      IfcFeatureElement,\r\n      IfcFeatureElementAddition,\r\n      IfcFeatureElementSubtraction,\r\n      IfcFillAreaStyle,\r\n      IfcFillAreaStyleHatching,\r\n      IfcFillAreaStyleTileSymbolWithStyle,\r\n      IfcFillAreaStyleTiles,\r\n      IfcFilterType,\r\n      IfcFireSuppressionTerminalType,\r\n      IfcFlowController,\r\n      IfcFlowControllerType,\r\n      IfcFlowFitting,\r\n      IfcFlowFittingType,\r\n      IfcFlowInstrumentType,\r\n      IfcFlowMeterType,\r\n      IfcFlowMovingDevice,\r\n      IfcFlowMovingDeviceType,\r\n      IfcFlowSegment,\r\n      IfcFlowSegmentType,\r\n      IfcFlowStorageDevice,\r\n      IfcFlowStorageDeviceType,\r\n      IfcFlowTerminal,\r\n      IfcFlowTerminalType,\r\n      IfcFlowTreatmentDevice,\r\n      IfcFlowTreatmentDeviceType,\r\n      IfcFluidFlowProperties,\r\n      IfcFluidMovingDevice,\r\n      IfcFooting,\r\n      IfcFuelProperties,\r\n      IfcFurnishingElement,\r\n      IfcFurnishingElementType,\r\n      IfcFurniture,\r\n      IfcFurnitureStandard,\r\n      IfcFurnitureType,\r\n      IfcGasTerminalType,\r\n      IfcGeneralMaterialProperties,\r\n      IfcGeneralProfileProperties,\r\n      IfcGeometricCurveSet,\r\n      IfcGeometricRepresentationContext,\r\n      IfcGeometricRepresentationItem,\r\n      IfcGeometricRepresentationSubContext,\r\n      IfcGeometricSet,\r\n      IfcGrid,\r\n      IfcGridAxis,\r\n      IfcGridPlacement,\r\n      IfcGroup,\r\n      IfcHalfSpaceSolid,\r\n      IfcHeatExchanger,\r\n      IfcHeatExchangerType,\r\n      IfcHeatTransferDevice,\r\n      IfcHumidifierType,\r\n      IfcHydronicHeater,\r\n      IfcHygroscopicMaterialProperties,\r\n      IfcImageTexture,\r\n      IfcInventory,\r\n      IfcIrregularTimeSeries,\r\n      IfcIrregularTimeSeriesValue,\r\n      IfcIShapeProfileDef,\r\n      IfcIshapeProfileDef,\r\n      IfcJunctionBoxType,\r\n      IfcLShapeProfileDef,\r\n      IfcLaborResource,\r\n      IfcLampType,\r\n      IfcLibraryInformation,\r\n      IfcLibraryReference,\r\n      IfcLightDistributionData,\r\n      IfcLightFixture,\r\n      IfcLightFixtureType,\r\n      IfcLightIntensityDistribution,\r\n      IfcLightSource,\r\n      IfcLightSourceAmbient,\r\n      IfcLightSourceDirectional,\r\n      IfcLightSourceGoniometric,\r\n      IfcLightSourcePositional,\r\n      IfcLightSourceSpot,\r\n      IfcLine,\r\n      IfcLinearDimension,\r\n      IfcLocalPlacement,\r\n      IfcLocalTime,\r\n      IfcLoop,\r\n      IfcMaintenanceRecord,\r\n      IfcMaintenanceWorkOrder,\r\n      IfcManifoldSolidBrep,\r\n      IfcManufacturerInformation,\r\n      IfcMappedItem,\r\n      IfcMaterial,\r\n      IfcMaterialClassificationRelationship,\r\n      IfcMaterialDefinitionRepresentation,\r\n      IfcMaterialLayer,\r\n      IfcMaterialLayerSet,\r\n      IfcMaterialLayerSetUsage,\r\n      IfcMaterialList,\r\n      IfcMaterialProperties,\r\n      IfcMeasureWithUnit,\r\n      IfcMechanicalConcreteMaterialProperties,\r\n      IfcMechanicalFastener,\r\n      IfcMechanicalFastenerType,\r\n      IfcMechanicalMaterialProperties,\r\n      IfcMechanicalSteelMaterialProperties,\r\n      IfcMember,\r\n      IfcMemberType,\r\n      IfcMetric,\r\n      IfcMetricBenchmark,\r\n      IfcMetricValue,\r\n      IfcMonetaryUnit,\r\n      IfcMotorConnectionType,\r\n      IfcMove,\r\n      IfcNamedUnit,\r\n      IfcObject,\r\n      IfcObjectDefinition,\r\n      IfcObjectPlacement,\r\n      IfcObjective,\r\n      IfcOccupant,\r\n      IfcOffsetCurve2D,\r\n      IfcOffsetCurve3D,\r\n      IfcOneDirectionRepeatFactor,\r\n      IfcOpenShell,\r\n      IfcOpeningElement,\r\n      IfcOpticalMaterialProperties,\r\n      IfcOrderAction,\r\n      IfcOrganization,\r\n      IfcOrganizationRelationship,\r\n      IfcOrientedEdge,\r\n      IfcOutlet,\r\n      IfcOutletType,\r\n      IfcOwnerHistory,\r\n      IfcParameterizedProfileDef,\r\n      IfcPath,\r\n      IfcPerformanceHistory,\r\n      IfcPermeableCoveringProperties,\r\n      IfcPermit,\r\n      IfcPerson,\r\n      IfcPersonAndOrganization,\r\n      IfcPhysicalComplexQuantity,\r\n      IfcPhysicalQuantity,\r\n      IfcPhysicalSimpleQuantity,\r\n      IfcPile,\r\n      IfcPipeFittingType,\r\n      IfcPipeSegmentType,\r\n      IfcPixelTexture,\r\n      IfcPlacement,\r\n      IfcPlanarBox,\r\n      IfcPlanarExtent,\r\n      IfcPlane,\r\n      IfcPlate,\r\n      IfcPlateType,\r\n      IfcPoint,\r\n      IfcPointLightSource,\r\n      IfcPointOnCurve,\r\n      IfcPointOnSurface,\r\n      IfcPolyLoop,\r\n      IfcPolygonalBoundedHalfSpace,\r\n      IfcPolyline,\r\n      IfcPort,\r\n      IfcPostalAddress,\r\n      IfcPreDefinedColour,\r\n      IfcPreDefinedCurveFont,\r\n      IfcPreDefinedDimensionSymbol,\r\n      IfcPreDefinedItem,\r\n      IfcPreDefinedPointMarkerSymbol,\r\n      IfcPreDefinedSymbol,\r\n      IfcPreDefinedTerminatorSymbol,\r\n      IfcPreDefinedTextFont,\r\n      IfcPresentationLayerAssignment,\r\n      IfcPresentationLayerWithStyle,\r\n      IfcPresentationLightSource,\r\n      IfcPresentationStyle,\r\n      IfcPresentationStyleAssignment,\r\n      IfcProcedure,\r\n      IfcProcess,\r\n      IfcProduct,\r\n      IfcProductDefinitionShape,\r\n      IfcProductRepresentation,\r\n      IfcProductsOfCombustionProperties,\r\n      IfcProfileDef,\r\n      IfcProfileProperties,\r\n      IfcProject,\r\n      IfcProjectOrder,\r\n      IfcProjectOrderRecord,\r\n      IfcProjectionCurve,\r\n      IfcProjectionElement,\r\n      IfcProperty,\r\n      IfcPropertyBoundedValue,\r\n      IfcPropertyConstraintRelationship,\r\n      IfcPropertyDefinition,\r\n      IfcPropertyDependencyRelationship,\r\n      IfcPropertyEnumeratedValue,\r\n      IfcPropertyEnumeration,\r\n      IfcPropertyListValue,\r\n      IfcPropertyReferenceValue,\r\n      IfcPropertySet,\r\n      IfcPropertySetDefinition,\r\n      IfcPropertySingleValue,\r\n      IfcPropertyTableValue,\r\n      IfcProtectiveDeviceType,\r\n      IfcProxy,\r\n      IfcPump,\r\n      IfcPumpType,\r\n      IfcPurchaseOrder,\r\n      IfcQuantityArea,\r\n      IfcQuantityCount,\r\n      IfcQuantityLength,\r\n      IfcQuantityTime,\r\n      IfcQuantityVolume,\r\n      IfcQuantityWeight,\r\n      IfcRadiusDimension,\r\n      IfcRailing,\r\n      IfcRailingType,\r\n      IfcRamp,\r\n      IfcRampFlight,\r\n      IfcRampFlightType,\r\n      IfcRationalBezierCurve,\r\n      IfcRectangleHollowProfileDef,\r\n      IfcRectangleProfileDef,\r\n      IfcRectangularPyramid,\r\n      IfcRectangularTrimmedSurface,\r\n      IfcReferenceEdge,\r\n      IfcReferenceFace,\r\n      IfcReferenceGeometry,\r\n      IfcReferencesCostDocument,\r\n      IfcReferencesValueDocument,\r\n      IfcReferenceVertex,\r\n      IfcRegularTimeSeries,\r\n      IfcReinforcementBarProperties,\r\n      IfcReinforcementDefinitionProperties,\r\n      IfcReinforcingBar,\r\n      IfcReinforcingElement,\r\n      IfcReinforcingMesh,\r\n      IfcRelAggregates,\r\n      IfcRelAggregatesResources,\r\n      IfcRelAssigns,\r\n      IfcRelAssignsFMStandard,\r\n      IfcRelAssignsTasks,\r\n      IfcRelAssignsToActor,\r\n      IfcRelAssignsToControl,\r\n      IfcRelAssignsToGroup,\r\n      IfcRelAssignsToProcess,\r\n      IfcRelAssignsToProduct,\r\n      IfcRelAssignsToProjectOrder,\r\n      IfcRelAssignsToResource,\r\n      IfcRelAssociates,\r\n      IfcRelAssociatesAppliedValue,\r\n      IfcRelAssociatesApproval,\r\n      IfcRelAssociatesClassification,\r\n      IfcRelAssociatesConstraint,\r\n      IfcRelAssociatesDocument,\r\n      IfcRelAssociatesLibrary,\r\n      IfcRelAssociatesMaterial,\r\n      IfcRelAssociatesProfileProperties,\r\n      IfcRelConnects,\r\n      IfcRelConnectsElements,\r\n      IfcRelConnectsPathElements,\r\n      IfcRelConnectsPortToElement,\r\n      IfcRelConnectsPorts,\r\n      IfcRelConnectsStructuralActivity,\r\n      IfcRelConnectsStructuralElement,\r\n      IfcRelConnectsStructuralMember,\r\n      IfcRelConnectsWithEccentricity,\r\n      IfcRelConnectsWithRealizingElements,\r\n      IfcRelContainedInSpatialStructure,\r\n      IfcRelCostsObjects,\r\n      IfcRelCoversBldgElements,\r\n      IfcRelCoversSpaces,\r\n      IfcRelDecomposes,\r\n      IfcRelDefines,\r\n      IfcRelDefinesByProperties,\r\n      IfcRelDefinesByType,\r\n      IfcRelFillsElement,\r\n      IfcRelFlowControlElements,\r\n      IfcRelInteractionRequirements,\r\n      IfcRelMaintenanceEvent,\r\n      IfcRelNests,\r\n      IfcRelOccupiesSpaces,\r\n      IfcRelOverridesProperties,\r\n      IfcRelProjectsElement,\r\n      IfcRelReferencedInSpatialStructure,\r\n      IfcRelSchedulesCostItems,\r\n      IfcRelSequence,\r\n      IfcRelServicesBuildings,\r\n      IfcRelSpaceBoundary,\r\n      IfcRelUsesResource,\r\n      IfcRelVoidsElement,\r\n      IfcRelationship,\r\n      IfcRelaxation,\r\n      IfcRepresentation,\r\n      IfcRepresentationContext,\r\n      IfcRepresentationItem,\r\n      IfcRepresentationMap,\r\n      IfcResource,\r\n      IfcRevolvedAreaSolid,\r\n      IfcRibPlateProfileProperties,\r\n      IfcRightCircularCone,\r\n      IfcRightCircularCylinder,\r\n      IfcRoof,\r\n      IfcRoot,\r\n      IfcRoundedEdgeFeature,\r\n      IfcRoundedRectangleProfileDef,\r\n      IfcSIUnit,\r\n      IfcSanitaryTerminal,\r\n      IfcSanitaryTerminalType,\r\n      IfcScheduleTimeControl,\r\n      IfcSectionProperties,\r\n      IfcSectionReinforcementProperties,\r\n      IfcSectionedSpine,\r\n      IfcSensor,\r\n      IfcSensorType,\r\n      IfcServiceLife,\r\n      IfcServiceLifeFactor,\r\n      IfcShapeAspect,\r\n      IfcShapeModel,\r\n      IfcShapeRepresentation,\r\n      IfcShellBasedSurfaceModel,\r\n      IfcSimpleProperty,\r\n      IfcSite,\r\n      IfcSlab,\r\n      IfcSlabType,\r\n      IfcSlippageConnectionCondition,\r\n      IfcSolidModel,\r\n      IfcSoundProperties,\r\n      IfcSoundValue,\r\n      IfcSpace,\r\n      IfcSpaceHeaterType,\r\n      IfcSpaceProgram,\r\n      IfcSpaceProgramGroup,\r\n      IfcSpaceThermalLoad,\r\n      IfcSpaceThermalLoadProperties,\r\n      IfcSpaceType,\r\n      IfcSpatialStructureElement,\r\n      IfcSpatialStructureElementType,\r\n      IfcSphere,\r\n      IfcSpotLightSource,\r\n      IfcStackTerminalType,\r\n      IfcStair,\r\n      IfcStairFlight,\r\n      IfcStairFlightType,\r\n      IfcStorageDevice,\r\n      IfcStructuralAction,\r\n      IfcStructuralActivity,\r\n      IfcStructuralAnalysisModel,\r\n      IfcStructuralConnection,\r\n      IfcStructuralConnectionCondition,\r\n      IfcStructuralCurveConnection,\r\n      IfcStructuralCurveMember,\r\n      IfcStructuralCurveMemberVarying,\r\n      IfcStructuralItem,\r\n      IfcStructuralLinearAction,\r\n      IfcStructuralLinearActionVarying,\r\n      IfcStructuralLoad,\r\n      IfcStructuralLoadGroup,\r\n      IfcStructuralLoadLinearForce,\r\n      IfcStructuralLoadPlanarForce,\r\n      IfcStructuralLoadSingleDisplacement,\r\n      IfcStructuralLoadSingleDisplacementDistortion,\r\n      IfcStructuralLoadSingleForce,\r\n      IfcStructuralLoadSingleForceWarping,\r\n      IfcStructuralLoadStatic,\r\n      IfcStructuralLoadTemperature,\r\n      IfcStructuralMember,\r\n      IfcStructuralPlanarAction,\r\n      IfcStructuralPlanarActionVarying,\r\n      IfcStructuralPointAction,\r\n      IfcStructuralPointConnection,\r\n      IfcStructuralPointReaction,\r\n      IfcStructuralProfileProperties,\r\n      IfcStructuralReaction,\r\n      IfcStructuralResultGroup,\r\n      IfcStructuralSteelProfileProperties,\r\n      IfcStructuralSurfaceConnection,\r\n      IfcStructuralSurfaceMember,\r\n      IfcStructuralSurfaceMemberVarying,\r\n      IfcStructuredDimensionCallout,\r\n      IfcStyleModel,\r\n      IfcStyledItem,\r\n      IfcStyledRepresentation,\r\n      IfcSubContractResource,\r\n      IfcSubedge,\r\n      IfcSurface,\r\n      IfcSurfaceCurveSweptAreaSolid,\r\n      IfcSurfaceExtendedProperties,\r\n      IfcSurfaceOfLinearExtrusion,\r\n      IfcSurfaceOfRevolution,\r\n      IfcSurfaceRenderingProperties,\r\n      IfcSurfaceShadingProperties,\r\n      IfcSurfaceStyle,\r\n      IfcSurfaceStyleLighting,\r\n      IfcSurfaceStyleProperties,\r\n      IfcSurfaceStyleRefraction,\r\n      IfcSurfaceStyleRendering,\r\n      IfcSurfaceStyleShading,\r\n      IfcSurfaceStyleUsage,\r\n      IfcSurfaceStyleWithTextures,\r\n      IfcSurfaceTexture,\r\n      IfcSweptAreaSolid,\r\n      IfcSweptDiskSolid,\r\n      IfcSweptSurface,\r\n      IfcSwitchingDeviceType,\r\n      IfcSymbolStyle,\r\n      IfcSystem,\r\n      IfcSystemFurnitureElement,\r\n      IfcSystemFurnitureElementType,\r\n      IfcTShapeProfileDef,\r\n      IfcTable,\r\n      IfcTableRow,\r\n      IfcTank,\r\n      IfcTankType,\r\n      IfcTask,\r\n      IfcTelecomAddress,\r\n      IfcTendon,\r\n      IfcTendonAnchor,\r\n      IfcTerminatorSymbol,\r\n      IfcTextLiteral,\r\n      IfcTextLiteralWithExtent,\r\n      IfcTextStyle,\r\n      IfcTextStyleFontModel,\r\n      IfcTextStyleForDefinedFont,\r\n      IfcTextStyleTextModel,\r\n      IfcTextStyleWithBoxCharacteristics,\r\n      IfcTextureCoordinate,\r\n      IfcTextureCoordinateGenerator,\r\n      IfcTextureMap,\r\n      IfcTextureVertex,\r\n      IfcThermalMaterialProperties,\r\n      IfcTimeSeries,\r\n      IfcTimeSeriesReferenceRelationship,\r\n      IfcTimeSeriesSchedule,\r\n      IfcTimeSeriesValue,\r\n      IfcTopologicalRepresentationItem,\r\n      IfcTopologyRepresentation,\r\n      IfcTransformerType,\r\n      IfcTransportElement,\r\n      IfcTransportElementType,\r\n      IfcTrapeziumProfileDef,\r\n      IfcTreatmentDevice,\r\n      IfcTrimmedCurve,\r\n      IfcTubeBundle,\r\n      IfcTubeBundleType,\r\n      IfcTwoDirectionRepeatFactor,\r\n      IfcTypeObject,\r\n      IfcTypeProduct,\r\n      IfcUShapeProfileDef,\r\n      IfcUnitAssignment,\r\n      IfcUnitHeater,\r\n      IfcUnitaryEquipmentType,\r\n      IfcValve,\r\n      IfcValveType,\r\n      IfcVector,\r\n      IfcVertex,\r\n      IfcVertexBasedTextureMap,\r\n      IfcVertexLoop,\r\n      IfcVertexPoint,\r\n      IfcVibrationIsolatorType,\r\n      IfcVirtualElement,\r\n      IfcVirtualGridIntersection,\r\n      IfcWall,\r\n      IfcWallStandardCase,\r\n      IfcWallType,\r\n      IfcWasteTerminalType,\r\n      IfcWaterProperties,\r\n      IfcWindow,\r\n      IfcWindowLiningProperties,\r\n      IfcWindowPanelProperties,\r\n      IfcWindowStyle,\r\n      IfcWorkControl,\r\n      IfcWorkOrder,\r\n      IfcWorkPlan,\r\n      IfcWorkSchedule,\r\n      IfcZShapeProfileDef,\r\n      IfcZone,\r\n      UnKnown\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Enums/IFC4EntityType.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace Revit.IFC.Common.Enums.IFC4\r\n{\r\n   /// <summary>\r\n   /// List of Entities for IFC4\r\n   /// </summary>\r\n   public enum IFCEntityType\r\n   {\r\n      IfcActionRequest,\r\n      IfcActor,\r\n      IfcActorRole,\r\n      IfcActuator,\r\n      IfcActuatorType,\r\n      IfcAddress,\r\n      IfcAdvancedBrep,\r\n      IfcAdvancedBrepWithVoids,\r\n      IfcAdvancedFace,\r\n      IfcAirTerminal,\r\n      IfcAirTerminalBox,\r\n      IfcAirTerminalBoxType,\r\n      IfcAirTerminalType,\r\n      IfcAirToAirHeatRecovery,\r\n      IfcAirToAirHeatRecoveryType,\r\n      IfcAlarm,\r\n      IfcAlarmType,\r\n      IfcAnnotation,\r\n      IfcAnnotationFillArea,\r\n      IfcApplication,\r\n      IfcAppliedValue,\r\n      IfcApproval,\r\n      IfcApprovalRelationship,\r\n      IfcArbitraryClosedProfileDef,\r\n      IfcArbitraryOpenProfileDef,\r\n      IfcArbitraryProfileDefWithVoids,\r\n      IfcAsset,\r\n      IfcAsymmetricIShapeProfileDef,\r\n      IfcAudioVisualAppliance,\r\n      IfcAudioVisualApplianceType,\r\n      IfcAxis1Placement,\r\n      IfcAxis2Placement2D,\r\n      IfcAxis2Placement3D,\r\n      IfcBeam,\r\n      IfcBeamStandardCase,\r\n      IfcBeamType,\r\n      IfcBlobTexture,\r\n      IfcBlock,\r\n      IfcBoiler,\r\n      IfcBoilerType,\r\n      IfcBooleanClippingResult,\r\n      IfcBooleanResult,\r\n      IfcBoundaryCondition,\r\n      IfcBoundaryCurve,\r\n      IfcBoundaryEdgeCondition,\r\n      IfcBoundaryFaceCondition,\r\n      IfcBoundaryNodeCondition,\r\n      IfcBoundaryNodeConditionWarping,\r\n      IfcBoundedCurve,\r\n      IfcBoundedSurface,\r\n      IfcBoundingBox,\r\n      IfcBoxedHalfSpace,\r\n      IfcBSplineCurve,\r\n      IfcBSplineCurveWithKnots,\r\n      IfcBSplineSurface,\r\n      IfcBSplineSurfaceWithKnots,\r\n      IfcBuilding,\r\n      IfcBuildingElement,\r\n      IfcBuildingElementPart,\r\n      IfcBuildingElementPartType,\r\n      IfcBuildingElementProxy,\r\n      IfcBuildingElementProxyType,\r\n      IfcBuildingElementType,\r\n      IfcBuildingStorey,\r\n      IfcBuildingSystem,\r\n      IfcBurner,\r\n      IfcBurnerType,\r\n      IfcCableCarrierFitting,\r\n      IfcCableCarrierFittingType,\r\n      IfcCableCarrierSegment,\r\n      IfcCableCarrierSegmentType,\r\n      IfcCableFitting,\r\n      IfcCableFittingType,\r\n      IfcCableSegment,\r\n      IfcCableSegmentType,\r\n      IfcCartesianPoint,\r\n      IfcCartesianPointList,\r\n      IfcCartesianPointList2D,\r\n      IfcCartesianPointList3D,\r\n      IfcCartesianTransformationOperator,\r\n      IfcCartesianTransformationOperator2D,\r\n      IfcCartesianTransformationOperator2DnonUniform,\r\n      IfcCartesianTransformationOperator3D,\r\n      IfcCartesianTransformationOperator3DnonUniform,\r\n      IfcCenterLineProfileDef,\r\n      IfcChiller,\r\n      IfcChillerType,\r\n      IfcChimney,\r\n      IfcChimneyType,\r\n      IfcCircle,\r\n      IfcCircleHollowProfileDef,\r\n      IfcCircleProfileDef,\r\n      IfcCivilElement,\r\n      IfcCivilElementType,\r\n      IfcClassification,\r\n      IfcClassificationReference,\r\n      IfcClosedShell,\r\n      IfcCoil,\r\n      IfcCoilType,\r\n      IfcColourRgb,\r\n      IfcColourRgbList,\r\n      IfcColourSpecification,\r\n      IfcColumn,\r\n      IfcColumnStandardCase,\r\n      IfcColumnType,\r\n      IfcCommunicationsAppliance,\r\n      IfcCommunicationsApplianceType,\r\n      IfcComplexProperty,\r\n      IfcComplexPropertyTemplate,\r\n      IfcCompositeCurve,\r\n      IfcCompositeCurveOnSurface,\r\n      IfcCompositeCurveSegment,\r\n      IfcCompositeProfileDef,\r\n      IfcCompressor,\r\n      IfcCompressorType,\r\n      IfcCondenser,\r\n      IfcCondenserType,\r\n      IfcConic,\r\n      IfcConnectedFaceSet,\r\n      IfcConnectionCurveGeometry,\r\n      IfcConnectionGeometry,\r\n      IfcConnectionPointEccentricity,\r\n      IfcConnectionPointGeometry,\r\n      IfcConnectionSurfaceGeometry,\r\n      IfcConnectionVolumeGeometry,\r\n      IfcConstraint,\r\n      IfcConstructionEquipmentResource,\r\n      IfcConstructionEquipmentResourceType,\r\n      IfcConstructionMaterialResource,\r\n      IfcConstructionMaterialResourceType,\r\n      IfcConstructionProductResource,\r\n      IfcConstructionProductResourceType,\r\n      IfcConstructionResource,\r\n      IfcConstructionResourceType,\r\n      IfcContext,\r\n      IfcContextDependentUnit,\r\n      IfcControl,\r\n      IfcController,\r\n      IfcControllerType,\r\n      IfcConversionBasedUnit,\r\n      IfcConversionBasedUnitWithOffset,\r\n      IfcCooledBeam,\r\n      IfcCooledBeamType,\r\n      IfcCoolingTower,\r\n      IfcCoolingTowerType,\r\n      IfcCoordinateOperation,\r\n      IfcCoordinateReferenceSystem,\r\n      IfcCostItem,\r\n      IfcCostSchedule,\r\n      IfcCostValue,\r\n      IfcCovering,\r\n      IfcCoveringType,\r\n      IfcCrewResource,\r\n      IfcCrewResourceType,\r\n      IfcCsgPrimitive3D,\r\n      IfcCsgSolid,\r\n      IfcCShapeProfileDef,\r\n      IfcCurrencyRelationship,\r\n      IfcCurtainWall,\r\n      IfcCurtainWallType,\r\n      IfcCurve,\r\n      IfcCurveBoundedPlane,\r\n      IfcCurveBoundedSurface,\r\n      IfcCurveStyle,\r\n      IfcCurveStyleFont,\r\n      IfcCurveStyleFontAndScaling,\r\n      IfcCurveStyleFontPattern,\r\n      IfcCylindricalSurface,\r\n      IfcDamper,\r\n      IfcDamperType,\r\n      IfcDerivedProfileDef,\r\n      IfcDerivedUnit,\r\n      IfcDerivedUnitElement,\r\n      IfcDimensionalExponents,\r\n      IfcDirection,\r\n      IfcDiscreteAccessory,\r\n      IfcDiscreteAccessoryType,\r\n      IfcDistributionChamberElement,\r\n      IfcDistributionChamberElementType,\r\n      IfcDistributionCircuit,\r\n      IfcDistributionControlElement,\r\n      IfcDistributionControlElementType,\r\n      IfcDistributionElement,\r\n      IfcDistributionElementType,\r\n      IfcDistributionFlowElement,\r\n      IfcDistributionFlowElementType,\r\n      IfcDistributionPort,\r\n      IfcDistributionSystem,\r\n      IfcDocumentInformation,\r\n      IfcDocumentInformationRelationship,\r\n      IfcDocumentReference,\r\n      IfcDoor,\r\n      IfcDoorLiningProperties,\r\n      IfcDoorPanelProperties,\r\n      IfcDoorStandardCase,\r\n      IfcDoorStyle,\r\n      IfcDoorType,\r\n      IfcDraughtingPreDefinedColour,\r\n      IfcDraughtingPreDefinedCurveFont,\r\n      IfcDuctFitting,\r\n      IfcDuctFittingType,\r\n      IfcDuctSegment,\r\n      IfcDuctSegmentType,\r\n      IfcDuctSilencer,\r\n      IfcDuctSilencerType,\r\n      IfcEdge,\r\n      IfcEdgeCurve,\r\n      IfcEdgeLoop,\r\n      IfcElectricAppliance,\r\n      IfcElectricApplianceType,\r\n      IfcElectricDistributionBoard,\r\n      IfcElectricDistributionBoardType,\r\n      IfcElectricFlowStorageDevice,\r\n      IfcElectricFlowStorageDeviceType,\r\n      IfcElectricGenerator,\r\n      IfcElectricGeneratorType,\r\n      IfcElectricMotor,\r\n      IfcElectricMotorType,\r\n      IfcElectricTimeControl,\r\n      IfcElectricTimeControlType,\r\n      IfcElement,\r\n      IfcElementarySurface,\r\n      IfcElementAssembly,\r\n      IfcElementAssemblyType,\r\n      IfcElementComponent,\r\n      IfcElementComponentType,\r\n      IfcElementQuantity,\r\n      IfcElementType,\r\n      IfcEllipse,\r\n      IfcEllipseProfileDef,\r\n      IfcEnergyConversionDevice,\r\n      IfcEnergyConversionDeviceType,\r\n      IfcEngine,\r\n      IfcEngineType,\r\n      IfcEvaporativeCooler,\r\n      IfcEvaporativeCoolerType,\r\n      IfcEvaporator,\r\n      IfcEvaporatorType,\r\n      IfcEvent,\r\n      IfcEventTime,\r\n      IfcEventType,\r\n      IfcExtendedProperties,\r\n      IfcExternalInformation,\r\n      IfcExternallyDefinedHatchStyle,\r\n      IfcExternallyDefinedSurfaceStyle,\r\n      IfcExternallyDefinedTextFont,\r\n      IfcExternalReference,\r\n      IfcExternalReferenceRelationship,\r\n      IfcExternalSpatialElement,\r\n      IfcExternalSpatialStructureElement,\r\n      IfcExtrudedAreaSolid,\r\n      IfcExtrudedAreaSolidTapered,\r\n      IfcFace,\r\n      IfcFaceBasedSurfaceModel,\r\n      IfcFaceBound,\r\n      IfcFaceOuterBound,\r\n      IfcFaceSurface,\r\n      IfcFacetedBrep,\r\n      IfcFacetedBrepWithVoids,\r\n      IfcFailureConnectionCondition,\r\n      IfcFan,\r\n      IfcFanType,\r\n      IfcFastener,\r\n      IfcFastenerType,\r\n      IfcFeatureElement,\r\n      IfcFeatureElementAddition,\r\n      IfcFeatureElementSubtraction,\r\n      IfcFillAreaStyle,\r\n      IfcFillAreaStyleHatching,\r\n      IfcFillAreaStyleTiles,\r\n      IfcFilter,\r\n      IfcFilterType,\r\n      IfcFireSuppressionTerminal,\r\n      IfcFireSuppressionTerminalType,\r\n      IfcFixedReferenceSweptAreaSolid,\r\n      IfcFlowController,\r\n      IfcFlowControllerType,\r\n      IfcFlowFitting,\r\n      IfcFlowFittingType,\r\n      IfcFlowInstrument,\r\n      IfcFlowInstrumentType,\r\n      IfcFlowMeter,\r\n      IfcFlowMeterType,\r\n      IfcFlowMovingDevice,\r\n      IfcFlowMovingDeviceType,\r\n      IfcFlowSegment,\r\n      IfcFlowSegmentType,\r\n      IfcFlowStorageDevice,\r\n      IfcFlowStorageDeviceType,\r\n      IfcFlowTerminal,\r\n      IfcFlowTerminalType,\r\n      IfcFlowTreatmentDevice,\r\n      IfcFlowTreatmentDeviceType,\r\n      IfcFooting,\r\n      IfcFootingType,\r\n      IfcFurnishingElement,\r\n      IfcFurnishingElementType,\r\n      IfcFurniture,\r\n      IfcFurnitureType,\r\n      IfcGeographicElement,\r\n      IfcGeographicElementType,\r\n      IfcGeometricCurveSet,\r\n      IfcGeometricRepresentationContext,\r\n      IfcGeometricRepresentationItem,\r\n      IfcGeometricRepresentationSubContext,\r\n      IfcGeometricSet,\r\n      IfcGrid,\r\n      IfcGridAxis,\r\n      IfcGridPlacement,\r\n      IfcGroup,\r\n      IfcHalfSpaceSolid,\r\n      IfcHeatExchanger,\r\n      IfcHeatExchangerType,\r\n      IfcHumidifier,\r\n      IfcHumidifierType,\r\n      IfcImageTexture,\r\n      IfcIndexedColourMap,\r\n      IfcIndexedPolyCurve,\r\n      IfcIndexedPolygonalFace,\r\n      IfcIndexedPolygonalFaceWithVoids,\r\n      IfcIndexedTextureMap,\r\n      IfcIndexedTriangleTextureMap,\r\n      IfcInterceptor,\r\n      IfcInterceptorType,\r\n      IfcIntersectionCurve,\r\n      IfcInventory,\r\n      IfcIrregularTimeSeries,\r\n      IfcIrregularTimeSeriesValue,\r\n      IfcIShapeProfileDef,\r\n      IfcJunctionBox,\r\n      IfcJunctionBoxType,\r\n      IfcLaborResource,\r\n      IfcLaborResourceType,\r\n      IfcLagTime,\r\n      IfcLamp,\r\n      IfcLampType,\r\n      IfcLibraryInformation,\r\n      IfcLibraryReference,\r\n      IfcLightDistributionData,\r\n      IfcLightFixture,\r\n      IfcLightFixtureType,\r\n      IfcLightIntensityDistribution,\r\n      IfcLightSource,\r\n      IfcLightSourceAmbient,\r\n      IfcLightSourceDirectional,\r\n      IfcLightSourceGoniometric,\r\n      IfcLightSourcePositional,\r\n      IfcLightSourceSpot,\r\n      IfcLine,\r\n      IfcLocalPlacement,\r\n      IfcLoop,\r\n      IfcLShapeProfileDef,\r\n      IfcManifoldSolidBrep,\r\n      IfcMapConversion,\r\n      IfcMappedItem,\r\n      IfcMaterial,\r\n      IfcMaterialClassificationRelationship,\r\n      IfcMaterialConstituent,\r\n      IfcMaterialConstituentSet,\r\n      IfcMaterialDefinition,\r\n      IfcMaterialDefinitionRepresentation,\r\n      IfcMaterialLayer,\r\n      IfcMaterialLayerSet,\r\n      IfcMaterialLayerSetUsage,\r\n      IfcMaterialLayerWithOffsets,\r\n      IfcMaterialList,\r\n      IfcMaterialProfile,\r\n      IfcMaterialProfileSet,\r\n      IfcMaterialProfileSetUsage,\r\n      IfcMaterialProfileSetUsageTapering,\r\n      IfcMaterialProfileWithOffsets,\r\n      IfcMaterialProperties,\r\n      IfcMaterialRelationship,\r\n      IfcMaterialUsageDefinition,\r\n      IfcMeasureWithUnit,\r\n      IfcMechanicalFastener,\r\n      IfcMechanicalFastenerType,\r\n      IfcMedicalDevice,\r\n      IfcMedicalDeviceType,\r\n      IfcMember,\r\n      IfcMemberStandardCase,\r\n      IfcMemberType,\r\n      IfcMetric,\r\n      IfcMirroredProfileDef,\r\n      IfcMonetaryUnit,\r\n      IfcMotorConnection,\r\n      IfcMotorConnectionType,\r\n      IfcNamedUnit,\r\n      IfcObject,\r\n      IfcObjectDefinition,\r\n      IfcObjective,\r\n      IfcObjectPlacement,\r\n      IfcOccupant,\r\n      IfcOffsetCurve2D,\r\n      IfcOffsetCurve3D,\r\n      IfcOpeningElement,\r\n      IfcOpeningStandardCase,\r\n      IfcOpenShell,\r\n      IfcOrganization,\r\n      IfcOrganizationRelationship,\r\n      IfcOrientedEdge,\r\n      IfcOuterBoundaryCurve,\r\n      IfcOutlet,\r\n      IfcOutletType,\r\n      IfcOwnerHistory,\r\n      IfcParameterizedProfileDef,\r\n      IfcPath,\r\n      IfcPcurve,\r\n      IfcPerformanceHistory,\r\n      IfcPermeableCoveringProperties,\r\n      IfcPermit,\r\n      IfcPerson,\r\n      IfcPersonAndOrganization,\r\n      IfcPhysicalComplexQuantity,\r\n      IfcPhysicalQuantity,\r\n      IfcPhysicalSimpleQuantity,\r\n      IfcPile,\r\n      IfcPileType,\r\n      IfcPipeFitting,\r\n      IfcPipeFittingType,\r\n      IfcPipeSegment,\r\n      IfcPipeSegmentType,\r\n      IfcPixelTexture,\r\n      IfcPlacement,\r\n      IfcPlanarBox,\r\n      IfcPlanarExtent,\r\n      IfcPlane,\r\n      IfcPlate,\r\n      IfcPlateStandardCase,\r\n      IfcPlateType,\r\n      IfcPoint,\r\n      IfcPointOnCurve,\r\n      IfcPointOnSurface,\r\n      IfcPolygonalBoundedHalfSpace,\r\n      IfcPolygonalFaceSet,\r\n      IfcPolyline,\r\n      IfcPolyLoop,\r\n      IfcPort,\r\n      IfcPostalAddress,\r\n      IfcPreDefinedColour,\r\n      IfcPreDefinedCurveFont,\r\n      IfcPreDefinedItem,\r\n      IfcPreDefinedProperties,\r\n      IfcPreDefinedPropertySet,\r\n      IfcPreDefinedTextFont,\r\n      IfcPresentationItem,\r\n      IfcPresentationLayerAssignment,\r\n      IfcPresentationLayerWithStyle,\r\n      IfcPresentationStyle,\r\n      IfcPresentationStyleAssignment,\r\n      IfcProcedure,\r\n      IfcProcedureType,\r\n      IfcProcess,\r\n      IfcProduct,\r\n      IfcProductDefinitionShape,\r\n      IfcProductRepresentation,\r\n      IfcProfileDef,\r\n      IfcProfileProperties,\r\n      IfcProject,\r\n      IfcProjectedCRS,\r\n      IfcProjectionElement,\r\n      IfcProjectLibrary,\r\n      IfcProjectOrder,\r\n      IfcProperty,\r\n      IfcPropertyAbstraction,\r\n      IfcPropertyBoundedValue,\r\n      IfcPropertyDefinition,\r\n      IfcPropertyDependencyRelationship,\r\n      IfcPropertyEnumeratedValue,\r\n      IfcPropertyEnumeration,\r\n      IfcPropertyListValue,\r\n      IfcPropertyReferenceValue,\r\n      IfcPropertySet,\r\n      IfcPropertySetDefinition,\r\n      IfcPropertySetTemplate,\r\n      IfcPropertySingleValue,\r\n      IfcPropertyTableValue,\r\n      IfcPropertyTemplate,\r\n      IfcPropertyTemplateDefinition,\r\n      IfcProtectiveDevice,\r\n      IfcProtectiveDeviceTrippingUnit,\r\n      IfcProtectiveDeviceTrippingUnitType,\r\n      IfcProtectiveDeviceType,\r\n      IfcProxy,\r\n      IfcPump,\r\n      IfcPumpType,\r\n      IfcQuantityArea,\r\n      IfcQuantityCount,\r\n      IfcQuantityLength,\r\n      IfcQuantitySet,\r\n      IfcQuantityTime,\r\n      IfcQuantityVolume,\r\n      IfcQuantityWeight,\r\n      IfcRailing,\r\n      IfcRailingType,\r\n      IfcRamp,\r\n      IfcRampFlight,\r\n      IfcRampFlightType,\r\n      IfcRampType,\r\n      IfcRationalBSplineCurveWithKnots,\r\n      IfcRationalBSplineSurfaceWithKnots,\r\n      IfcRectangleHollowProfileDef,\r\n      IfcRectangleProfileDef,\r\n      IfcRectangularPyramid,\r\n      IfcRectangularTrimmedSurface,\r\n      IfcRecurrencePattern,\r\n      IfcReference,\r\n      IfcRegularTimeSeries,\r\n      IfcReinforcementBarProperties,\r\n      IfcReinforcementDefinitionProperties,\r\n      IfcReinforcingBar,\r\n      IfcReinforcingBarType,\r\n      IfcReinforcingElement,\r\n      IfcReinforcingElementType,\r\n      IfcReinforcingMesh,\r\n      IfcReinforcingMeshType,\r\n      IfcRelAggregates,\r\n      IfcRelAssigns,\r\n      IfcRelAssignsToActor,\r\n      IfcRelAssignsToControl,\r\n      IfcRelAssignsToGroup,\r\n      IfcRelAssignsToGroupByFactor,\r\n      IfcRelAssignsToProcess,\r\n      IfcRelAssignsToProduct,\r\n      IfcRelAssignsToResource,\r\n      IfcRelAssociates,\r\n      IfcRelAssociatesApproval,\r\n      IfcRelAssociatesClassification,\r\n      IfcRelAssociatesConstraint,\r\n      IfcRelAssociatesDocument,\r\n      IfcRelAssociatesLibrary,\r\n      IfcRelAssociatesMaterial,\r\n      IfcRelationship,\r\n      IfcRelConnects,\r\n      IfcRelConnectsElements,\r\n      IfcRelConnectsPathElements,\r\n      IfcRelConnectsPorts,\r\n      IfcRelConnectsPortToElement,\r\n      IfcRelConnectsStructuralActivity,\r\n      IfcRelConnectsStructuralMember,\r\n      IfcRelConnectsWithEccentricity,\r\n      IfcRelConnectsWithRealizingElements,\r\n      IfcRelContainedInSpatialStructure,\r\n      IfcRelCoversBldgElements,\r\n      IfcRelCoversSpaces,\r\n      IfcRelDeclares,\r\n      IfcRelDecomposes,\r\n      IfcRelDefines,\r\n      IfcRelDefinesByObject,\r\n      IfcRelDefinesByProperties,\r\n      IfcRelDefinesByTemplate,\r\n      IfcRelDefinesByType,\r\n      IfcRelFillsElement,\r\n      IfcRelFlowControlElements,\r\n      IfcRelInterferesElements,\r\n      IfcRelNests,\r\n      IfcRelProjectsElement,\r\n      IfcRelReferencedInSpatialStructure,\r\n      IfcRelSequence,\r\n      IfcRelServicesBuildings,\r\n      IfcRelSpaceBoundary,\r\n      IfcRelSpaceBoundary1stLevel,\r\n      IfcRelSpaceBoundary2ndLevel,\r\n      IfcRelVoidsElement,\r\n      IfcReparametrisedCompositeCurveSegment,\r\n      IfcRepresentation,\r\n      IfcRepresentationContext,\r\n      IfcRepresentationItem,\r\n      IfcRepresentationMap,\r\n      IfcResource,\r\n      IfcResourceApprovalRelationship,\r\n      IfcResourceConstraintRelationship,\r\n      IfcResourceLevelRelationship,\r\n      IfcResourceTime,\r\n      IfcRevolvedAreaSolid,\r\n      IfcRevolvedAreaSolidTapered,\r\n      IfcRightCircularCone,\r\n      IfcRightCircularCylinder,\r\n      IfcRoof,\r\n      IfcRoofType,\r\n      IfcRoot,\r\n      IfcRoundedRectangleProfileDef,\r\n      IfcSanitaryTerminal,\r\n      IfcSanitaryTerminalType,\r\n      IfcSchedulingTime,\r\n      IfcSeamCurve,\r\n      IfcSectionedSpine,\r\n      IfcSectionProperties,\r\n      IfcSectionReinforcementProperties,\r\n      IfcSensor,\r\n      IfcSensorType,\r\n      IfcShadingDevice,\r\n      IfcShadingDeviceType,\r\n      IfcShapeAspect,\r\n      IfcShapeModel,\r\n      IfcShapeRepresentation,\r\n      IfcShellBasedSurfaceModel,\r\n      IfcSimpleProperty,\r\n      IfcSimplePropertyTemplate,\r\n      IfcSite,\r\n      IfcSIUnit,\r\n      IfcSlab,\r\n      IfcSlabElementedCase,\r\n      IfcSlabStandardCase,\r\n      IfcSlabType,\r\n      IfcSlippageConnectionCondition,\r\n      IfcSolarDevice,\r\n      IfcSolarDeviceType,\r\n      IfcSolidModel,\r\n      IfcSpace,\r\n      IfcSpaceHeater,\r\n      IfcSpaceHeaterType,\r\n      IfcSpaceType,\r\n      IfcSpatialElement,\r\n      IfcSpatialElementType,\r\n      IfcSpatialStructureElement,\r\n      IfcSpatialStructureElementType,\r\n      IfcSpatialZone,\r\n      IfcSpatialZoneType,\r\n      IfcSphere,\r\n      IfcSphericalSurface,\r\n      IfcStackTerminal,\r\n      IfcStackTerminalType,\r\n      IfcStair,\r\n      IfcStairFlight,\r\n      IfcStairFlightType,\r\n      IfcStairType,\r\n      IfcStructuralAction,\r\n      IfcStructuralActivity,\r\n      IfcStructuralAnalysisModel,\r\n      IfcStructuralConnection,\r\n      IfcStructuralConnectionCondition,\r\n      IfcStructuralCurveAction,\r\n      IfcStructuralCurveConnection,\r\n      IfcStructuralCurveMember,\r\n      IfcStructuralCurveMemberVarying,\r\n      IfcStructuralCurveReaction,\r\n      IfcStructuralItem,\r\n      IfcStructuralLinearAction,\r\n      IfcStructuralLoad,\r\n      IfcStructuralLoadCase,\r\n      IfcStructuralLoadConfiguration,\r\n      IfcStructuralLoadGroup,\r\n      IfcStructuralLoadLinearForce,\r\n      IfcStructuralLoadOrResult,\r\n      IfcStructuralLoadPlanarForce,\r\n      IfcStructuralLoadSingleDisplacement,\r\n      IfcStructuralLoadSingleDisplacementDistortion,\r\n      IfcStructuralLoadSingleForce,\r\n      IfcStructuralLoadSingleForceWarping,\r\n      IfcStructuralLoadStatic,\r\n      IfcStructuralLoadTemperature,\r\n      IfcStructuralMember,\r\n      IfcStructuralPlanarAction,\r\n      IfcStructuralPointAction,\r\n      IfcStructuralPointConnection,\r\n      IfcStructuralPointReaction,\r\n      IfcStructuralReaction,\r\n      IfcStructuralResultGroup,\r\n      IfcStructuralSurfaceAction,\r\n      IfcStructuralSurfaceConnection,\r\n      IfcStructuralSurfaceMember,\r\n      IfcStructuralSurfaceMemberVarying,\r\n      IfcStructuralSurfaceReaction,\r\n      IfcStyledItem,\r\n      IfcStyledRepresentation,\r\n      IfcStyleModel,\r\n      IfcSubContractResource,\r\n      IfcSubContractResourceType,\r\n      IfcSubedge,\r\n      IfcSurface,\r\n      IfcSurfaceCurve,\r\n      IfcSurfaceCurveSweptAreaSolid,\r\n      IfcSurfaceFeature,\r\n      IfcSurfaceOfLinearExtrusion,\r\n      IfcSurfaceOfRevolution,\r\n      IfcSurfaceReinforcementArea,\r\n      IfcSurfaceStyle,\r\n      IfcSurfaceStyleLighting,\r\n      IfcSurfaceStyleRefraction,\r\n      IfcSurfaceStyleRendering,\r\n      IfcSurfaceStyleShading,\r\n      IfcSurfaceStyleWithTextures,\r\n      IfcSurfaceTexture,\r\n      IfcSweptAreaSolid,\r\n      IfcSweptDiskSolid,\r\n      IfcSweptDiskSolidPolygonal,\r\n      IfcSweptSurface,\r\n      IfcSwitchingDevice,\r\n      IfcSwitchingDeviceType,\r\n      IfcSystem,\r\n      IfcSystemFurnitureElement,\r\n      IfcSystemFurnitureElementType,\r\n      IfcTable,\r\n      IfcTableColumn,\r\n      IfcTableRow,\r\n      IfcTank,\r\n      IfcTankType,\r\n      IfcTask,\r\n      IfcTaskTime,\r\n      IfcTaskTimeRecurring,\r\n      IfcTaskType,\r\n      IfcTelecomAddress,\r\n      IfcTendon,\r\n      IfcTendonAnchor,\r\n      IfcTendonAnchorType,\r\n      IfcTendonType,\r\n      IfcTessellatedFaceSet,\r\n      IfcTessellatedItem,\r\n      IfcTextLiteral,\r\n      IfcTextLiteralWithExtent,\r\n      IfcTextStyle,\r\n      IfcTextStyleFontModel,\r\n      IfcTextStyleForDefinedFont,\r\n      IfcTextStyleTextModel,\r\n      IfcTextureCoordinate,\r\n      IfcTextureCoordinateGenerator,\r\n      IfcTextureMap,\r\n      IfcTextureVertex,\r\n      IfcTextureVertexList,\r\n      IfcTimePeriod,\r\n      IfcTimeSeries,\r\n      IfcTimeSeriesValue,\r\n      IfcTopologicalRepresentationItem,\r\n      IfcTopologyRepresentation,\r\n      IfcToroidalSurface,\r\n      IfcTransformer,\r\n      IfcTransformerType,\r\n      IfcTransportElement,\r\n      IfcTransportElementType,\r\n      IfcTrapeziumProfileDef,\r\n      IfcTriangulatedFaceSet,\r\n      IfcTrimmedCurve,\r\n      IfcTShapeProfileDef,\r\n      IfcTubeBundle,\r\n      IfcTubeBundleType,\r\n      IfcTypeObject,\r\n      IfcTypeProcess,\r\n      IfcTypeProduct,\r\n      IfcTypeResource,\r\n      IfcUnitaryControlElement,\r\n      IfcUnitaryControlElementType,\r\n      IfcUnitaryEquipment,\r\n      IfcUnitaryEquipmentType,\r\n      IfcUnitAssignment,\r\n      IfcUShapeProfileDef,\r\n      IfcValve,\r\n      IfcValveType,\r\n      IfcVector,\r\n      IfcVertex,\r\n      IfcVertexLoop,\r\n      IfcVertexPoint,\r\n      IfcVibrationIsolator,\r\n      IfcVibrationIsolatorType,\r\n      IfcVirtualElement,\r\n      IfcVirtualGridIntersection,\r\n      IfcVoidingFeature,\r\n      IfcWall,\r\n      IfcWallElementedCase,\r\n      IfcWallStandardCase,\r\n      IfcWallType,\r\n      IfcWasteTerminal,\r\n      IfcWasteTerminalType,\r\n      IfcWindow,\r\n      IfcWindowLiningProperties,\r\n      IfcWindowPanelProperties,\r\n      IfcWindowStandardCase,\r\n      IfcWindowStyle,\r\n      IfcWindowType,\r\n      IfcWorkCalendar,\r\n      IfcWorkControl,\r\n      IfcWorkPlan,\r\n      IfcWorkSchedule,\r\n      IfcWorkTime,\r\n      IfcZone,\r\n      IfcZShapeProfileDef,\r\n      Unknown,\r\n      DontExport\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Enums/IFC4x1EntityType.cs",
    "content": "﻿//\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace Revit.IFC.Common.Enums.IFC4x1\n{\n   /// <summary>\n   /// IFC4x1 entity types.\n   /// <remarks>\n   /// Schema IFC4x1 currently withdrawn <see cref=\"https://technical.buildingsmart.org/standards/ifc/ifc-schema-specifications/\"/>\n   /// </remarks>\n   /// </summary>\n   public enum IFCEntityType\n   {\n      IfcActionRequest,\n      IfcActor,\n      IfcActorRole,\n      IfcActuator,\n      IfcActuatorType,\n      IfcAddress,\n      IfcAdvancedBrep,\n      IfcAdvancedBrepWithVoids,\n      IfcAdvancedFace,\n      IfcAirTerminal,\n      IfcAirTerminalBox,\n      IfcAirTerminalBoxType,\n      IfcAirTerminalType,\n      IfcAirToAirHeatRecovery,\n      IfcAirToAirHeatRecoveryType,\n      IfcAlarm,\n      IfcAlarmType,\n      IfcAlignment,\n      IfcAlignment2DHorizontal,\n      IfcAlignment2DHorizontalSegment,\n      IfcAlignment2DSegment,\n      IfcAlignment2DVerSegCircularArc,\n      IfcAlignment2DVerSegLine,\n      IfcAlignment2DVerSegParabolicArc,\n      IfcAlignment2DVertical,\n      IfcAlignment2DVerticalSegment,\n      IfcAlignmentCurve,\n      IfcAnnotation,\n      IfcAnnotationFillArea,\n      IfcApplication,\n      IfcAppliedValue,\n      IfcApproval,\n      IfcApprovalRelationship,\n      IfcArbitraryClosedProfileDef,\n      IfcArbitraryOpenProfileDef,\n      IfcArbitraryProfileDefWithVoids,\n      IfcAsset,\n      IfcAsymmetricIShapeProfileDef,\n      IfcAudioVisualAppliance,\n      IfcAudioVisualApplianceType,\n      IfcAxis1Placement,\n      IfcAxis2Placement2D,\n      IfcAxis2Placement3D,\n      IfcBeam,\n      IfcBeamStandardCase,\n      IfcBeamType,\n      IfcBlobTexture,\n      IfcBlock,\n      IfcBoiler,\n      IfcBoilerType,\n      IfcBooleanClippingResult,\n      IfcBooleanResult,\n      IfcBoundaryCondition,\n      IfcBoundaryCurve,\n      IfcBoundaryEdgeCondition,\n      IfcBoundaryFaceCondition,\n      IfcBoundaryNodeCondition,\n      IfcBoundaryNodeConditionWarping,\n      IfcBoundedCurve,\n      IfcBoundedSurface,\n      IfcBoundingBox,\n      IfcBoxedHalfSpace,\n      IfcBSplineCurve,\n      IfcBSplineCurveWithKnots,\n      IfcBSplineSurface,\n      IfcBSplineSurfaceWithKnots,\n      IfcBuilding,\n      IfcBuildingElement,\n      IfcBuildingElementPart,\n      IfcBuildingElementPartType,\n      IfcBuildingElementProxy,\n      IfcBuildingElementProxyType,\n      IfcBuildingElementType,\n      IfcBuildingStorey,\n      IfcBuildingSystem,\n      IfcBurner,\n      IfcBurnerType,\n      IfcCableCarrierFitting,\n      IfcCableCarrierFittingType,\n      IfcCableCarrierSegment,\n      IfcCableCarrierSegmentType,\n      IfcCableFitting,\n      IfcCableFittingType,\n      IfcCableSegment,\n      IfcCableSegmentType,\n      IfcCartesianPoint,\n      IfcCartesianPointList,\n      IfcCartesianPointList2D,\n      IfcCartesianPointList3D,\n      IfcCartesianTransformationOperator,\n      IfcCartesianTransformationOperator2D,\n      IfcCartesianTransformationOperator2DnonUniform,\n      IfcCartesianTransformationOperator3D,\n      IfcCartesianTransformationOperator3DnonUniform,\n      IfcCenterLineProfileDef,\n      IfcChiller,\n      IfcChillerType,\n      IfcChimney,\n      IfcChimneyType,\n      IfcCircle,\n      IfcCircleHollowProfileDef,\n      IfcCircleProfileDef,\n      IfcCircularArcSegment2D,\n      IfcCivilElement,\n      IfcCivilElementType,\n      IfcClassification,\n      IfcClassificationReference,\n      IfcClosedShell,\n      IfcCoil,\n      IfcCoilType,\n      IfcColourRgb,\n      IfcColourRgbList,\n      IfcColourSpecification,\n      IfcColumn,\n      IfcColumnStandardCase,\n      IfcColumnType,\n      IfcCommunicationsAppliance,\n      IfcCommunicationsApplianceType,\n      IfcComplexProperty,\n      IfcComplexPropertyTemplate,\n      IfcCompositeCurve,\n      IfcCompositeCurveOnSurface,\n      IfcCompositeCurveSegment,\n      IfcCompositeProfileDef,\n      IfcCompressor,\n      IfcCompressorType,\n      IfcCondenser,\n      IfcCondenserType,\n      IfcConic,\n      IfcConnectedFaceSet,\n      IfcConnectionCurveGeometry,\n      IfcConnectionGeometry,\n      IfcConnectionPointEccentricity,\n      IfcConnectionPointGeometry,\n      IfcConnectionSurfaceGeometry,\n      IfcConnectionVolumeGeometry,\n      IfcConstraint,\n      IfcConstructionEquipmentResource,\n      IfcConstructionEquipmentResourceType,\n      IfcConstructionMaterialResource,\n      IfcConstructionMaterialResourceType,\n      IfcConstructionProductResource,\n      IfcConstructionProductResourceType,\n      IfcConstructionResource,\n      IfcConstructionResourceType,\n      IfcContext,\n      IfcContextDependentUnit,\n      IfcControl,\n      IfcController,\n      IfcControllerType,\n      IfcConversionBasedUnit,\n      IfcConversionBasedUnitWithOffset,\n      IfcCooledBeam,\n      IfcCooledBeamType,\n      IfcCoolingTower,\n      IfcCoolingTowerType,\n      IfcCoordinateOperation,\n      IfcCoordinateReferenceSystem,\n      IfcCostItem,\n      IfcCostSchedule,\n      IfcCostValue,\n      IfcCovering,\n      IfcCoveringType,\n      IfcCrewResource,\n      IfcCrewResourceType,\n      IfcCsgPrimitive3D,\n      IfcCsgSolid,\n      IfcCShapeProfileDef,\n      IfcCurrencyRelationship,\n      IfcCurtainWall,\n      IfcCurtainWallType,\n      IfcCurve,\n      IfcCurveBoundedPlane,\n      IfcCurveBoundedSurface,\n      IfcCurveSegment2D,\n      IfcCurveStyle,\n      IfcCurveStyleFont,\n      IfcCurveStyleFontAndScaling,\n      IfcCurveStyleFontPattern,\n      IfcCylindricalSurface,\n      IfcDamper,\n      IfcDamperType,\n      IfcDerivedProfileDef,\n      IfcDerivedUnit,\n      IfcDerivedUnitElement,\n      IfcDimensionalExponents,\n      IfcDirection,\n      IfcDiscreteAccessory,\n      IfcDiscreteAccessoryType,\n      IfcDistanceExpression,\n      IfcDistributionChamberElement,\n      IfcDistributionChamberElementType,\n      IfcDistributionCircuit,\n      IfcDistributionControlElement,\n      IfcDistributionControlElementType,\n      IfcDistributionElement,\n      IfcDistributionElementType,\n      IfcDistributionFlowElement,\n      IfcDistributionFlowElementType,\n      IfcDistributionPort,\n      IfcDistributionSystem,\n      IfcDocumentInformation,\n      IfcDocumentInformationRelationship,\n      IfcDocumentReference,\n      IfcDoor,\n      IfcDoorLiningProperties,\n      IfcDoorPanelProperties,\n      IfcDoorStandardCase,\n      IfcDoorStyle,\n      IfcDoorType,\n      IfcDraughtingPreDefinedColour,\n      IfcDraughtingPreDefinedCurveFont,\n      IfcDuctFitting,\n      IfcDuctFittingType,\n      IfcDuctSegment,\n      IfcDuctSegmentType,\n      IfcDuctSilencer,\n      IfcDuctSilencerType,\n      IfcEdge,\n      IfcEdgeCurve,\n      IfcEdgeLoop,\n      IfcElectricAppliance,\n      IfcElectricApplianceType,\n      IfcElectricDistributionBoard,\n      IfcElectricDistributionBoardType,\n      IfcElectricFlowStorageDevice,\n      IfcElectricFlowStorageDeviceType,\n      IfcElectricGenerator,\n      IfcElectricGeneratorType,\n      IfcElectricMotor,\n      IfcElectricMotorType,\n      IfcElectricTimeControl,\n      IfcElectricTimeControlType,\n      IfcElement,\n      IfcElementarySurface,\n      IfcElementAssembly,\n      IfcElementAssemblyType,\n      IfcElementComponent,\n      IfcElementComponentType,\n      IfcElementQuantity,\n      IfcElementType,\n      IfcEllipse,\n      IfcEllipseProfileDef,\n      IfcEnergyConversionDevice,\n      IfcEnergyConversionDeviceType,\n      IfcEngine,\n      IfcEngineType,\n      IfcEvaporativeCooler,\n      IfcEvaporativeCoolerType,\n      IfcEvaporator,\n      IfcEvaporatorType,\n      IfcEvent,\n      IfcEventTime,\n      IfcEventType,\n      IfcExtendedProperties,\n      IfcExternalInformation,\n      IfcExternallyDefinedHatchStyle,\n      IfcExternallyDefinedSurfaceStyle,\n      IfcExternallyDefinedTextFont,\n      IfcExternalReference,\n      IfcExternalReferenceRelationship,\n      IfcExternalSpatialElement,\n      IfcExternalSpatialStructureElement,\n      IfcExtrudedAreaSolid,\n      IfcExtrudedAreaSolidTapered,\n      IfcFace,\n      IfcFaceBasedSurfaceModel,\n      IfcFaceBound,\n      IfcFaceOuterBound,\n      IfcFaceSurface,\n      IfcFacetedBrep,\n      IfcFacetedBrepWithVoids,\n      IfcFailureConnectionCondition,\n      IfcFan,\n      IfcFanType,\n      IfcFastener,\n      IfcFastenerType,\n      IfcFeatureElement,\n      IfcFeatureElementAddition,\n      IfcFeatureElementSubtraction,\n      IfcFillAreaStyle,\n      IfcFillAreaStyleHatching,\n      IfcFillAreaStyleTiles,\n      IfcFilter,\n      IfcFilterType,\n      IfcFireSuppressionTerminal,\n      IfcFireSuppressionTerminalType,\n      IfcFixedReferenceSweptAreaSolid,\n      IfcFlowController,\n      IfcFlowControllerType,\n      IfcFlowFitting,\n      IfcFlowFittingType,\n      IfcFlowInstrument,\n      IfcFlowInstrumentType,\n      IfcFlowMeter,\n      IfcFlowMeterType,\n      IfcFlowMovingDevice,\n      IfcFlowMovingDeviceType,\n      IfcFlowSegment,\n      IfcFlowSegmentType,\n      IfcFlowStorageDevice,\n      IfcFlowStorageDeviceType,\n      IfcFlowTerminal,\n      IfcFlowTerminalType,\n      IfcFlowTreatmentDevice,\n      IfcFlowTreatmentDeviceType,\n      IfcFooting,\n      IfcFootingType,\n      IfcFurnishingElement,\n      IfcFurnishingElementType,\n      IfcFurniture,\n      IfcFurnitureType,\n      IfcGeographicElement,\n      IfcGeographicElementType,\n      IfcGeometricCurveSet,\n      IfcGeometricRepresentationContext,\n      IfcGeometricRepresentationItem,\n      IfcGeometricRepresentationSubContext,\n      IfcGeometricSet,\n      IfcGrid,\n      IfcGridAxis,\n      IfcGridPlacement,\n      IfcGroup,\n      IfcHalfSpaceSolid,\n      IfcHeatExchanger,\n      IfcHeatExchangerType,\n      IfcHumidifier,\n      IfcHumidifierType,\n      IfcImageTexture,\n      IfcIndexedColourMap,\n      IfcIndexedPolyCurve,\n      IfcIndexedPolygonalFace,\n      IfcIndexedPolygonalFaceWithVoids,\n      IfcIndexedTextureMap,\n      IfcIndexedTriangleTextureMap,\n      IfcInterceptor,\n      IfcInterceptorType,\n      IfcIntersectionCurve,\n      IfcInventory,\n      IfcIrregularTimeSeries,\n      IfcIrregularTimeSeriesValue,\n      IfcIShapeProfileDef,\n      IfcJunctionBox,\n      IfcJunctionBoxType,\n      IfcLaborResource,\n      IfcLaborResourceType,\n      IfcLagTime,\n      IfcLamp,\n      IfcLampType,\n      IfcLibraryInformation,\n      IfcLibraryReference,\n      IfcLightDistributionData,\n      IfcLightFixture,\n      IfcLightFixtureType,\n      IfcLightIntensityDistribution,\n      IfcLightSource,\n      IfcLightSourceAmbient,\n      IfcLightSourceDirectional,\n      IfcLightSourceGoniometric,\n      IfcLightSourcePositional,\n      IfcLightSourceSpot,\n      IfcLine,\n      IfcLinearPlacement,\n      IfcLinearPositioningElement,\n      IfcLineSegment2D,\n      IfcLocalPlacement,\n      IfcLoop,\n      IfcLShapeProfileDef,\n      IfcManifoldSolidBrep,\n      IfcMapConversion,\n      IfcMappedItem,\n      IfcMaterial,\n      IfcMaterialClassificationRelationship,\n      IfcMaterialConstituent,\n      IfcMaterialConstituentSet,\n      IfcMaterialDefinition,\n      IfcMaterialDefinitionRepresentation,\n      IfcMaterialLayer,\n      IfcMaterialLayerSet,\n      IfcMaterialLayerSetUsage,\n      IfcMaterialLayerWithOffsets,\n      IfcMaterialList,\n      IfcMaterialProfile,\n      IfcMaterialProfileSet,\n      IfcMaterialProfileSetUsage,\n      IfcMaterialProfileSetUsageTapering,\n      IfcMaterialProfileWithOffsets,\n      IfcMaterialProperties,\n      IfcMaterialRelationship,\n      IfcMaterialUsageDefinition,\n      IfcMeasureWithUnit,\n      IfcMechanicalFastener,\n      IfcMechanicalFastenerType,\n      IfcMedicalDevice,\n      IfcMedicalDeviceType,\n      IfcMember,\n      IfcMemberStandardCase,\n      IfcMemberType,\n      IfcMetric,\n      IfcMirroredProfileDef,\n      IfcMonetaryUnit,\n      IfcMotorConnection,\n      IfcMotorConnectionType,\n      IfcNamedUnit,\n      IfcObject,\n      IfcObjectDefinition,\n      IfcObjective,\n      IfcObjectPlacement,\n      IfcOccupant,\n      IfcOffsetCurve,\n      IfcOffsetCurve2D,\n      IfcOffsetCurve3D,\n      IfcOffsetCurveByDistances,\n      IfcOpeningElement,\n      IfcOpeningStandardCase,\n      IfcOpenShell,\n      IfcOrganization,\n      IfcOrganizationRelationship,\n      IfcOrientationExpression,\n      IfcOrientedEdge,\n      IfcOuterBoundaryCurve,\n      IfcOutlet,\n      IfcOutletType,\n      IfcOwnerHistory,\n      IfcParameterizedProfileDef,\n      IfcPath,\n      IfcPcurve,\n      IfcPerformanceHistory,\n      IfcPermeableCoveringProperties,\n      IfcPermit,\n      IfcPerson,\n      IfcPersonAndOrganization,\n      IfcPhysicalComplexQuantity,\n      IfcPhysicalQuantity,\n      IfcPhysicalSimpleQuantity,\n      IfcPile,\n      IfcPileType,\n      IfcPipeFitting,\n      IfcPipeFittingType,\n      IfcPipeSegment,\n      IfcPipeSegmentType,\n      IfcPixelTexture,\n      IfcPlacement,\n      IfcPlanarBox,\n      IfcPlanarExtent,\n      IfcPlane,\n      IfcPlate,\n      IfcPlateStandardCase,\n      IfcPlateType,\n      IfcPoint,\n      IfcPointOnCurve,\n      IfcPointOnSurface,\n      IfcPolygonalBoundedHalfSpace,\n      IfcPolygonalFaceSet,\n      IfcPolyline,\n      IfcPolyLoop,\n      IfcPort,\n      IfcPositioningElement,\n      IfcPostalAddress,\n      IfcPreDefinedColour,\n      IfcPreDefinedCurveFont,\n      IfcPreDefinedItem,\n      IfcPreDefinedProperties,\n      IfcPreDefinedPropertySet,\n      IfcPreDefinedTextFont,\n      IfcPresentationItem,\n      IfcPresentationLayerAssignment,\n      IfcPresentationLayerWithStyle,\n      IfcPresentationStyle,\n      IfcPresentationStyleAssignment,\n      IfcProcedure,\n      IfcProcedureType,\n      IfcProcess,\n      IfcProduct,\n      IfcProductDefinitionShape,\n      IfcProductRepresentation,\n      IfcProfileDef,\n      IfcProfileProperties,\n      IfcProject,\n      IfcProjectedCRS,\n      IfcProjectionElement,\n      IfcProjectLibrary,\n      IfcProjectOrder,\n      IfcProperty,\n      IfcPropertyAbstraction,\n      IfcPropertyBoundedValue,\n      IfcPropertyDefinition,\n      IfcPropertyDependencyRelationship,\n      IfcPropertyEnumeratedValue,\n      IfcPropertyEnumeration,\n      IfcPropertyListValue,\n      IfcPropertyReferenceValue,\n      IfcPropertySet,\n      IfcPropertySetDefinition,\n      IfcPropertySetTemplate,\n      IfcPropertySingleValue,\n      IfcPropertyTableValue,\n      IfcPropertyTemplate,\n      IfcPropertyTemplateDefinition,\n      IfcProtectiveDevice,\n      IfcProtectiveDeviceTrippingUnit,\n      IfcProtectiveDeviceTrippingUnitType,\n      IfcProtectiveDeviceType,\n      IfcProxy,\n      IfcPump,\n      IfcPumpType,\n      IfcQuantityArea,\n      IfcQuantityCount,\n      IfcQuantityLength,\n      IfcQuantitySet,\n      IfcQuantityTime,\n      IfcQuantityVolume,\n      IfcQuantityWeight,\n      IfcRailing,\n      IfcRailingType,\n      IfcRamp,\n      IfcRampFlight,\n      IfcRampFlightType,\n      IfcRampType,\n      IfcRationalBSplineCurveWithKnots,\n      IfcRationalBSplineSurfaceWithKnots,\n      IfcRectangleHollowProfileDef,\n      IfcRectangleProfileDef,\n      IfcRectangularPyramid,\n      IfcRectangularTrimmedSurface,\n      IfcRecurrencePattern,\n      IfcReference,\n      IfcReferent,\n      IfcRegularTimeSeries,\n      IfcReinforcementBarProperties,\n      IfcReinforcementDefinitionProperties,\n      IfcReinforcingBar,\n      IfcReinforcingBarType,\n      IfcReinforcingElement,\n      IfcReinforcingElementType,\n      IfcReinforcingMesh,\n      IfcReinforcingMeshType,\n      IfcRelAggregates,\n      IfcRelAssigns,\n      IfcRelAssignsToActor,\n      IfcRelAssignsToControl,\n      IfcRelAssignsToGroup,\n      IfcRelAssignsToGroupByFactor,\n      IfcRelAssignsToProcess,\n      IfcRelAssignsToProduct,\n      IfcRelAssignsToResource,\n      IfcRelAssociates,\n      IfcRelAssociatesApproval,\n      IfcRelAssociatesClassification,\n      IfcRelAssociatesConstraint,\n      IfcRelAssociatesDocument,\n      IfcRelAssociatesLibrary,\n      IfcRelAssociatesMaterial,\n      IfcRelationship,\n      IfcRelConnects,\n      IfcRelConnectsElements,\n      IfcRelConnectsPathElements,\n      IfcRelConnectsPorts,\n      IfcRelConnectsPortToElement,\n      IfcRelConnectsStructuralActivity,\n      IfcRelConnectsStructuralMember,\n      IfcRelConnectsWithEccentricity,\n      IfcRelConnectsWithRealizingElements,\n      IfcRelContainedInSpatialStructure,\n      IfcRelCoversBldgElements,\n      IfcRelCoversSpaces,\n      IfcRelDeclares,\n      IfcRelDecomposes,\n      IfcRelDefines,\n      IfcRelDefinesByObject,\n      IfcRelDefinesByProperties,\n      IfcRelDefinesByTemplate,\n      IfcRelDefinesByType,\n      IfcRelFillsElement,\n      IfcRelFlowControlElements,\n      IfcRelInterferesElements,\n      IfcRelNests,\n      IfcRelProjectsElement,\n      IfcRelReferencedInSpatialStructure,\n      IfcRelSequence,\n      IfcRelServicesBuildings,\n      IfcRelSpaceBoundary,\n      IfcRelSpaceBoundary1stLevel,\n      IfcRelSpaceBoundary2ndLevel,\n      IfcRelVoidsElement,\n      IfcReparametrisedCompositeCurveSegment,\n      IfcRepresentation,\n      IfcRepresentationContext,\n      IfcRepresentationItem,\n      IfcRepresentationMap,\n      IfcResource,\n      IfcResourceApprovalRelationship,\n      IfcResourceConstraintRelationship,\n      IfcResourceLevelRelationship,\n      IfcResourceTime,\n      IfcRevolvedAreaSolid,\n      IfcRevolvedAreaSolidTapered,\n      IfcRightCircularCone,\n      IfcRightCircularCylinder,\n      IfcRoof,\n      IfcRoofType,\n      IfcRoot,\n      IfcRoundedRectangleProfileDef,\n      IfcSanitaryTerminal,\n      IfcSanitaryTerminalType,\n      IfcSchedulingTime,\n      IfcSeamCurve,\n      IfcSectionedSolid,\n      IfcSectionedSolidHorizontal,\n      IfcSectionedSpine,\n      IfcSectionProperties,\n      IfcSectionReinforcementProperties,\n      IfcSensor,\n      IfcSensorType,\n      IfcShadingDevice,\n      IfcShadingDeviceType,\n      IfcShapeAspect,\n      IfcShapeModel,\n      IfcShapeRepresentation,\n      IfcShellBasedSurfaceModel,\n      IfcSimpleProperty,\n      IfcSimplePropertyTemplate,\n      IfcSite,\n      IfcSIUnit,\n      IfcSlab,\n      IfcSlabElementedCase,\n      IfcSlabStandardCase,\n      IfcSlabType,\n      IfcSlippageConnectionCondition,\n      IfcSolarDevice,\n      IfcSolarDeviceType,\n      IfcSolidModel,\n      IfcSpace,\n      IfcSpaceHeater,\n      IfcSpaceHeaterType,\n      IfcSpaceType,\n      IfcSpatialElement,\n      IfcSpatialElementType,\n      IfcSpatialStructureElement,\n      IfcSpatialStructureElementType,\n      IfcSpatialZone,\n      IfcSpatialZoneType,\n      IfcSphere,\n      IfcSphericalSurface,\n      IfcStackTerminal,\n      IfcStackTerminalType,\n      IfcStair,\n      IfcStairFlight,\n      IfcStairFlightType,\n      IfcStairType,\n      IfcStructuralAction,\n      IfcStructuralActivity,\n      IfcStructuralAnalysisModel,\n      IfcStructuralConnection,\n      IfcStructuralConnectionCondition,\n      IfcStructuralCurveAction,\n      IfcStructuralCurveConnection,\n      IfcStructuralCurveMember,\n      IfcStructuralCurveMemberVarying,\n      IfcStructuralCurveReaction,\n      IfcStructuralItem,\n      IfcStructuralLinearAction,\n      IfcStructuralLoad,\n      IfcStructuralLoadCase,\n      IfcStructuralLoadConfiguration,\n      IfcStructuralLoadGroup,\n      IfcStructuralLoadLinearForce,\n      IfcStructuralLoadOrResult,\n      IfcStructuralLoadPlanarForce,\n      IfcStructuralLoadSingleDisplacement,\n      IfcStructuralLoadSingleDisplacementDistortion,\n      IfcStructuralLoadSingleForce,\n      IfcStructuralLoadSingleForceWarping,\n      IfcStructuralLoadStatic,\n      IfcStructuralLoadTemperature,\n      IfcStructuralMember,\n      IfcStructuralPlanarAction,\n      IfcStructuralPointAction,\n      IfcStructuralPointConnection,\n      IfcStructuralPointReaction,\n      IfcStructuralReaction,\n      IfcStructuralResultGroup,\n      IfcStructuralSurfaceAction,\n      IfcStructuralSurfaceConnection,\n      IfcStructuralSurfaceMember,\n      IfcStructuralSurfaceMemberVarying,\n      IfcStructuralSurfaceReaction,\n      IfcStyledItem,\n      IfcStyledRepresentation,\n      IfcStyleModel,\n      IfcSubContractResource,\n      IfcSubContractResourceType,\n      IfcSubedge,\n      IfcSurface,\n      IfcSurfaceCurve,\n      IfcSurfaceCurveSweptAreaSolid,\n      IfcSurfaceFeature,\n      IfcSurfaceOfLinearExtrusion,\n      IfcSurfaceOfRevolution,\n      IfcSurfaceReinforcementArea,\n      IfcSurfaceStyle,\n      IfcSurfaceStyleLighting,\n      IfcSurfaceStyleRefraction,\n      IfcSurfaceStyleRendering,\n      IfcSurfaceStyleShading,\n      IfcSurfaceStyleWithTextures,\n      IfcSurfaceTexture,\n      IfcSweptAreaSolid,\n      IfcSweptDiskSolid,\n      IfcSweptDiskSolidPolygonal,\n      IfcSweptSurface,\n      IfcSwitchingDevice,\n      IfcSwitchingDeviceType,\n      IfcSystem,\n      IfcSystemFurnitureElement,\n      IfcSystemFurnitureElementType,\n      IfcTable,\n      IfcTableColumn,\n      IfcTableRow,\n      IfcTank,\n      IfcTankType,\n      IfcTask,\n      IfcTaskTime,\n      IfcTaskTimeRecurring,\n      IfcTaskType,\n      IfcTelecomAddress,\n      IfcTendon,\n      IfcTendonAnchor,\n      IfcTendonAnchorType,\n      IfcTendonType,\n      IfcTessellatedFaceSet,\n      IfcTessellatedItem,\n      IfcTextLiteral,\n      IfcTextLiteralWithExtent,\n      IfcTextStyle,\n      IfcTextStyleFontModel,\n      IfcTextStyleForDefinedFont,\n      IfcTextStyleTextModel,\n      IfcTextureCoordinate,\n      IfcTextureCoordinateGenerator,\n      IfcTextureMap,\n      IfcTextureVertex,\n      IfcTextureVertexList,\n      IfcTimePeriod,\n      IfcTimeSeries,\n      IfcTimeSeriesValue,\n      IfcTopologicalRepresentationItem,\n      IfcTopologyRepresentation,\n      IfcToroidalSurface,\n      IfcTransformer,\n      IfcTransformerType,\n      IfcTransitionCurveSegment2D,\n      IfcTransportElement,\n      IfcTransportElementType,\n      IfcTrapeziumProfileDef,\n      IfcTriangulatedFaceSet,\n      IfcTriangulatedIrregularNetwork,\n      IfcTrimmedCurve,\n      IfcTShapeProfileDef,\n      IfcTubeBundle,\n      IfcTubeBundleType,\n      IfcTypeObject,\n      IfcTypeProcess,\n      IfcTypeProduct,\n      IfcTypeResource,\n      IfcUnitaryControlElement,\n      IfcUnitaryControlElementType,\n      IfcUnitaryEquipment,\n      IfcUnitaryEquipmentType,\n      IfcUnitAssignment,\n      IfcUShapeProfileDef,\n      IfcValve,\n      IfcValveType,\n      IfcVector,\n      IfcVertex,\n      IfcVertexLoop,\n      IfcVertexPoint,\n      IfcVibrationIsolator,\n      IfcVibrationIsolatorType,\n      IfcVirtualElement,\n      IfcVirtualGridIntersection,\n      IfcVoidingFeature,\n      IfcWall,\n      IfcWallElementedCase,\n      IfcWallStandardCase,\n      IfcWallType,\n      IfcWasteTerminal,\n      IfcWasteTerminalType,\n      IfcWindow,\n      IfcWindowLiningProperties,\n      IfcWindowPanelProperties,\n      IfcWindowStandardCase,\n      IfcWindowStyle,\n      IfcWindowType,\n      IfcWorkCalendar,\n      IfcWorkControl,\n      IfcWorkPlan,\n      IfcWorkSchedule,\n      IfcWorkTime,\n      IfcZone,\n      IfcZShapeProfileDef,\n      UnKnown\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Common/Enums/IFC4x2EntityType.cs",
    "content": "﻿//\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace Revit.IFC.Common.Enums.IFC4x2\n{\n   /// <summary>\n   /// IFC4x2 entity types.\n   /// <remarks>\n   /// Schema IFC4x2 currently withdrawn <see cref=\"https://technical.buildingsmart.org/standards/ifc/ifc-schema-specifications/\"/>\n   /// </remarks>\n   /// </summary>\n   public enum IFCEntityType\n   {\n      IfcActionRequest,\n      IfcActor,\n      IfcActorRole,\n      IfcActuator,\n      IfcActuatorType,\n      IfcAddress,\n      IfcAdvancedBrep,\n      IfcAdvancedBrepWithVoids,\n      IfcAdvancedFace,\n      IfcAirTerminal,\n      IfcAirTerminalBox,\n      IfcAirTerminalBoxType,\n      IfcAirTerminalType,\n      IfcAirToAirHeatRecovery,\n      IfcAirToAirHeatRecoveryType,\n      IfcAlarm,\n      IfcAlarmType,\n      IfcAlignment,\n      IfcAlignment2DHorizontal,\n      IfcAlignment2DHorizontalSegment,\n      IfcAlignment2DSegment,\n      IfcAlignment2DVerSegCircularArc,\n      IfcAlignment2DVerSegLine,\n      IfcAlignment2DVerSegParabolicArc,\n      IfcAlignment2DVertical,\n      IfcAlignment2DVerticalSegment,\n      IfcAlignmentCurve,\n      IfcAnnotation,\n      IfcAnnotationFillArea,\n      IfcApplication,\n      IfcAppliedValue,\n      IfcApproval,\n      IfcApprovalRelationship,\n      IfcArbitraryClosedProfileDef,\n      IfcArbitraryOpenProfileDef,\n      IfcArbitraryProfileDefWithVoids,\n      IfcAsset,\n      IfcAsymmetricIShapeProfileDef,\n      IfcAudioVisualAppliance,\n      IfcAudioVisualApplianceType,\n      IfcAxis1Placement,\n      IfcAxis2Placement2D,\n      IfcAxis2Placement3D,\n      IfcBeam,\n      IfcBeamStandardCase,\n      IfcBeamType,\n      IfcBearing,\n      IfcBearingType,\n      IfcBlobTexture,\n      IfcBlock,\n      IfcBoiler,\n      IfcBoilerType,\n      IfcBooleanClippingResult,\n      IfcBooleanResult,\n      IfcBoundaryCondition,\n      IfcBoundaryCurve,\n      IfcBoundaryEdgeCondition,\n      IfcBoundaryFaceCondition,\n      IfcBoundaryNodeCondition,\n      IfcBoundaryNodeConditionWarping,\n      IfcBoundedCurve,\n      IfcBoundedSurface,\n      IfcBoundingBox,\n      IfcBoxedHalfSpace,\n      IfcBridge,\n      IfcBridgePart,\n      IfcBSplineCurve,\n      IfcBSplineCurveWithKnots,\n      IfcBSplineSurface,\n      IfcBSplineSurfaceWithKnots,\n      IfcBuilding,\n      IfcBuildingElement,\n      IfcBuildingElementPart,\n      IfcBuildingElementPartType,\n      IfcBuildingElementProxy,\n      IfcBuildingElementProxyType,\n      IfcBuildingElementType,\n      IfcBuildingStorey,\n      IfcBuildingSystem,\n      IfcBurner,\n      IfcBurnerType,\n      IfcCableCarrierFitting,\n      IfcCableCarrierFittingType,\n      IfcCableCarrierSegment,\n      IfcCableCarrierSegmentType,\n      IfcCableFitting,\n      IfcCableFittingType,\n      IfcCableSegment,\n      IfcCableSegmentType,\n      IfcCaissonFoundation,\n      IfcCaissonFoundationType,\n      IfcCartesianPoint,\n      IfcCartesianPointList,\n      IfcCartesianPointList2D,\n      IfcCartesianPointList3D,\n      IfcCartesianTransformationOperator,\n      IfcCartesianTransformationOperator2D,\n      IfcCartesianTransformationOperator2DnonUniform,\n      IfcCartesianTransformationOperator3D,\n      IfcCartesianTransformationOperator3DnonUniform,\n      IfcCenterLineProfileDef,\n      IfcChiller,\n      IfcChillerType,\n      IfcChimney,\n      IfcChimneyType,\n      IfcCircle,\n      IfcCircleHollowProfileDef,\n      IfcCircleProfileDef,\n      IfcCircularArcSegment2D,\n      IfcCivilElement,\n      IfcCivilElementType,\n      IfcClassification,\n      IfcClassificationReference,\n      IfcClosedShell,\n      IfcCoil,\n      IfcCoilType,\n      IfcColourRgb,\n      IfcColourRgbList,\n      IfcColourSpecification,\n      IfcColumn,\n      IfcColumnStandardCase,\n      IfcColumnType,\n      IfcCommunicationsAppliance,\n      IfcCommunicationsApplianceType,\n      IfcComplexProperty,\n      IfcComplexPropertyTemplate,\n      IfcCompositeCurve,\n      IfcCompositeCurveOnSurface,\n      IfcCompositeCurveSegment,\n      IfcCompositeProfileDef,\n      IfcCompressor,\n      IfcCompressorType,\n      IfcCondenser,\n      IfcCondenserType,\n      IfcConic,\n      IfcConnectedFaceSet,\n      IfcConnectionCurveGeometry,\n      IfcConnectionGeometry,\n      IfcConnectionPointEccentricity,\n      IfcConnectionPointGeometry,\n      IfcConnectionSurfaceGeometry,\n      IfcConnectionVolumeGeometry,\n      IfcConstraint,\n      IfcConstructionEquipmentResource,\n      IfcConstructionEquipmentResourceType,\n      IfcConstructionMaterialResource,\n      IfcConstructionMaterialResourceType,\n      IfcConstructionProductResource,\n      IfcConstructionProductResourceType,\n      IfcConstructionResource,\n      IfcConstructionResourceType,\n      IfcContext,\n      IfcContextDependentUnit,\n      IfcControl,\n      IfcController,\n      IfcControllerType,\n      IfcConversionBasedUnit,\n      IfcConversionBasedUnitWithOffset,\n      IfcCooledBeam,\n      IfcCooledBeamType,\n      IfcCoolingTower,\n      IfcCoolingTowerType,\n      IfcCoordinateOperation,\n      IfcCoordinateReferenceSystem,\n      IfcCostItem,\n      IfcCostSchedule,\n      IfcCostValue,\n      IfcCovering,\n      IfcCoveringType,\n      IfcCrewResource,\n      IfcCrewResourceType,\n      IfcCsgPrimitive3D,\n      IfcCsgSolid,\n      IfcCShapeProfileDef,\n      IfcCurrencyRelationship,\n      IfcCurtainWall,\n      IfcCurtainWallType,\n      IfcCurve,\n      IfcCurveBoundedPlane,\n      IfcCurveBoundedSurface,\n      IfcCurveSegment2D,\n      IfcCurveStyle,\n      IfcCurveStyleFont,\n      IfcCurveStyleFontAndScaling,\n      IfcCurveStyleFontPattern,\n      IfcCylindricalSurface,\n      IfcDamper,\n      IfcDamperType,\n      IfcDeepFoundation,\n      IfcDeepFoundationType,\n      IfcDerivedProfileDef,\n      IfcDerivedUnit,\n      IfcDerivedUnitElement,\n      IfcDimensionalExponents,\n      IfcDirection,\n      IfcDiscreteAccessory,\n      IfcDiscreteAccessoryType,\n      IfcDistanceExpression,\n      IfcDistributionChamberElement,\n      IfcDistributionChamberElementType,\n      IfcDistributionCircuit,\n      IfcDistributionControlElement,\n      IfcDistributionControlElementType,\n      IfcDistributionElement,\n      IfcDistributionElementType,\n      IfcDistributionFlowElement,\n      IfcDistributionFlowElementType,\n      IfcDistributionPort,\n      IfcDistributionSystem,\n      IfcDocumentInformation,\n      IfcDocumentInformationRelationship,\n      IfcDocumentReference,\n      IfcDoor,\n      IfcDoorLiningProperties,\n      IfcDoorPanelProperties,\n      IfcDoorStandardCase,\n      IfcDoorStyle,\n      IfcDoorType,\n      IfcDraughtingPreDefinedColour,\n      IfcDraughtingPreDefinedCurveFont,\n      IfcDuctFitting,\n      IfcDuctFittingType,\n      IfcDuctSegment,\n      IfcDuctSegmentType,\n      IfcDuctSilencer,\n      IfcDuctSilencerType,\n      IfcEdge,\n      IfcEdgeCurve,\n      IfcEdgeLoop,\n      IfcElectricAppliance,\n      IfcElectricApplianceType,\n      IfcElectricDistributionBoard,\n      IfcElectricDistributionBoardType,\n      IfcElectricFlowStorageDevice,\n      IfcElectricFlowStorageDeviceType,\n      IfcElectricGenerator,\n      IfcElectricGeneratorType,\n      IfcElectricMotor,\n      IfcElectricMotorType,\n      IfcElectricTimeControl,\n      IfcElectricTimeControlType,\n      IfcElement,\n      IfcElementarySurface,\n      IfcElementAssembly,\n      IfcElementAssemblyType,\n      IfcElementComponent,\n      IfcElementComponentType,\n      IfcElementQuantity,\n      IfcElementType,\n      IfcEllipse,\n      IfcEllipseProfileDef,\n      IfcEnergyConversionDevice,\n      IfcEnergyConversionDeviceType,\n      IfcEngine,\n      IfcEngineType,\n      IfcEvaporativeCooler,\n      IfcEvaporativeCoolerType,\n      IfcEvaporator,\n      IfcEvaporatorType,\n      IfcEvent,\n      IfcEventTime,\n      IfcEventType,\n      IfcExtendedProperties,\n      IfcExternalInformation,\n      IfcExternallyDefinedHatchStyle,\n      IfcExternallyDefinedSurfaceStyle,\n      IfcExternallyDefinedTextFont,\n      IfcExternalReference,\n      IfcExternalReferenceRelationship,\n      IfcExternalSpatialElement,\n      IfcExternalSpatialStructureElement,\n      IfcExtrudedAreaSolid,\n      IfcExtrudedAreaSolidTapered,\n      IfcFace,\n      IfcFaceBasedSurfaceModel,\n      IfcFaceBound,\n      IfcFaceOuterBound,\n      IfcFaceSurface,\n      IfcFacetedBrep,\n      IfcFacetedBrepWithVoids,\n      IfcFacility,\n      IfcFacilityPart,\n      IfcFailureConnectionCondition,\n      IfcFan,\n      IfcFanType,\n      IfcFastener,\n      IfcFastenerType,\n      IfcFeatureElement,\n      IfcFeatureElementAddition,\n      IfcFeatureElementSubtraction,\n      IfcFillAreaStyle,\n      IfcFillAreaStyleHatching,\n      IfcFillAreaStyleTiles,\n      IfcFilter,\n      IfcFilterType,\n      IfcFireSuppressionTerminal,\n      IfcFireSuppressionTerminalType,\n      IfcFixedReferenceSweptAreaSolid,\n      IfcFlowController,\n      IfcFlowControllerType,\n      IfcFlowFitting,\n      IfcFlowFittingType,\n      IfcFlowInstrument,\n      IfcFlowInstrumentType,\n      IfcFlowMeter,\n      IfcFlowMeterType,\n      IfcFlowMovingDevice,\n      IfcFlowMovingDeviceType,\n      IfcFlowSegment,\n      IfcFlowSegmentType,\n      IfcFlowStorageDevice,\n      IfcFlowStorageDeviceType,\n      IfcFlowTerminal,\n      IfcFlowTerminalType,\n      IfcFlowTreatmentDevice,\n      IfcFlowTreatmentDeviceType,\n      IfcFooting,\n      IfcFootingType,\n      IfcFurnishingElement,\n      IfcFurnishingElementType,\n      IfcFurniture,\n      IfcFurnitureType,\n      IfcGeographicElement,\n      IfcGeographicElementType,\n      IfcGeometricCurveSet,\n      IfcGeometricRepresentationContext,\n      IfcGeometricRepresentationItem,\n      IfcGeometricRepresentationSubContext,\n      IfcGeometricSet,\n      IfcGrid,\n      IfcGridAxis,\n      IfcGridPlacement,\n      IfcGroup,\n      IfcHalfSpaceSolid,\n      IfcHeatExchanger,\n      IfcHeatExchangerType,\n      IfcHumidifier,\n      IfcHumidifierType,\n      IfcImageTexture,\n      IfcIndexedColourMap,\n      IfcIndexedPolyCurve,\n      IfcIndexedPolygonalFace,\n      IfcIndexedPolygonalFaceWithVoids,\n      IfcIndexedTextureMap,\n      IfcIndexedTriangleTextureMap,\n      IfcInterceptor,\n      IfcInterceptorType,\n      IfcIntersectionCurve,\n      IfcInventory,\n      IfcIrregularTimeSeries,\n      IfcIrregularTimeSeriesValue,\n      IfcIShapeProfileDef,\n      IfcJunctionBox,\n      IfcJunctionBoxType,\n      IfcLaborResource,\n      IfcLaborResourceType,\n      IfcLagTime,\n      IfcLamp,\n      IfcLampType,\n      IfcLibraryInformation,\n      IfcLibraryReference,\n      IfcLightDistributionData,\n      IfcLightFixture,\n      IfcLightFixtureType,\n      IfcLightIntensityDistribution,\n      IfcLightSource,\n      IfcLightSourceAmbient,\n      IfcLightSourceDirectional,\n      IfcLightSourceGoniometric,\n      IfcLightSourcePositional,\n      IfcLightSourceSpot,\n      IfcLine,\n      IfcLinearPlacement,\n      IfcLinearPositioningElement,\n      IfcLineSegment2D,\n      IfcLocalPlacement,\n      IfcLoop,\n      IfcLShapeProfileDef,\n      IfcManifoldSolidBrep,\n      IfcMapConversion,\n      IfcMappedItem,\n      IfcMaterial,\n      IfcMaterialClassificationRelationship,\n      IfcMaterialConstituent,\n      IfcMaterialConstituentSet,\n      IfcMaterialDefinition,\n      IfcMaterialDefinitionRepresentation,\n      IfcMaterialLayer,\n      IfcMaterialLayerSet,\n      IfcMaterialLayerSetUsage,\n      IfcMaterialLayerWithOffsets,\n      IfcMaterialList,\n      IfcMaterialProfile,\n      IfcMaterialProfileSet,\n      IfcMaterialProfileSetUsage,\n      IfcMaterialProfileSetUsageTapering,\n      IfcMaterialProfileWithOffsets,\n      IfcMaterialProperties,\n      IfcMaterialRelationship,\n      IfcMaterialUsageDefinition,\n      IfcMeasureWithUnit,\n      IfcMechanicalFastener,\n      IfcMechanicalFastenerType,\n      IfcMedicalDevice,\n      IfcMedicalDeviceType,\n      IfcMember,\n      IfcMemberStandardCase,\n      IfcMemberType,\n      IfcMetric,\n      IfcMirroredProfileDef,\n      IfcMonetaryUnit,\n      IfcMotorConnection,\n      IfcMotorConnectionType,\n      IfcNamedUnit,\n      IfcObject,\n      IfcObjectDefinition,\n      IfcObjective,\n      IfcObjectPlacement,\n      IfcOccupant,\n      IfcOffsetCurve,\n      IfcOffsetCurve2D,\n      IfcOffsetCurve3D,\n      IfcOffsetCurveByDistances,\n      IfcOpeningElement,\n      IfcOpeningStandardCase,\n      IfcOpenShell,\n      IfcOrganization,\n      IfcOrganizationRelationship,\n      IfcOrientationExpression,\n      IfcOrientedEdge,\n      IfcOuterBoundaryCurve,\n      IfcOutlet,\n      IfcOutletType,\n      IfcOwnerHistory,\n      IfcParameterizedProfileDef,\n      IfcPath,\n      IfcPcurve,\n      IfcPerformanceHistory,\n      IfcPermeableCoveringProperties,\n      IfcPermit,\n      IfcPerson,\n      IfcPersonAndOrganization,\n      IfcPhysicalComplexQuantity,\n      IfcPhysicalQuantity,\n      IfcPhysicalSimpleQuantity,\n      IfcPile,\n      IfcPileType,\n      IfcPipeFitting,\n      IfcPipeFittingType,\n      IfcPipeSegment,\n      IfcPipeSegmentType,\n      IfcPixelTexture,\n      IfcPlacement,\n      IfcPlanarBox,\n      IfcPlanarExtent,\n      IfcPlane,\n      IfcPlate,\n      IfcPlateStandardCase,\n      IfcPlateType,\n      IfcPoint,\n      IfcPointOnCurve,\n      IfcPointOnSurface,\n      IfcPolygonalBoundedHalfSpace,\n      IfcPolygonalFaceSet,\n      IfcPolyline,\n      IfcPolyLoop,\n      IfcPort,\n      IfcPositioningElement,\n      IfcPostalAddress,\n      IfcPreDefinedColour,\n      IfcPreDefinedCurveFont,\n      IfcPreDefinedItem,\n      IfcPreDefinedProperties,\n      IfcPreDefinedPropertySet,\n      IfcPreDefinedTextFont,\n      IfcPresentationItem,\n      IfcPresentationLayerAssignment,\n      IfcPresentationLayerWithStyle,\n      IfcPresentationStyle,\n      IfcPresentationStyleAssignment,\n      IfcProcedure,\n      IfcProcedureType,\n      IfcProcess,\n      IfcProduct,\n      IfcProductDefinitionShape,\n      IfcProductRepresentation,\n      IfcProfileDef,\n      IfcProfileProperties,\n      IfcProject,\n      IfcProjectedCRS,\n      IfcProjectionElement,\n      IfcProjectLibrary,\n      IfcProjectOrder,\n      IfcProperty,\n      IfcPropertyAbstraction,\n      IfcPropertyBoundedValue,\n      IfcPropertyDefinition,\n      IfcPropertyDependencyRelationship,\n      IfcPropertyEnumeratedValue,\n      IfcPropertyEnumeration,\n      IfcPropertyListValue,\n      IfcPropertyReferenceValue,\n      IfcPropertySet,\n      IfcPropertySetDefinition,\n      IfcPropertySetTemplate,\n      IfcPropertySingleValue,\n      IfcPropertyTableValue,\n      IfcPropertyTemplate,\n      IfcPropertyTemplateDefinition,\n      IfcProtectiveDevice,\n      IfcProtectiveDeviceTrippingUnit,\n      IfcProtectiveDeviceTrippingUnitType,\n      IfcProtectiveDeviceType,\n      IfcProxy,\n      IfcPump,\n      IfcPumpType,\n      IfcQuantityArea,\n      IfcQuantityCount,\n      IfcQuantityLength,\n      IfcQuantitySet,\n      IfcQuantityTime,\n      IfcQuantityVolume,\n      IfcQuantityWeight,\n      IfcRailing,\n      IfcRailingType,\n      IfcRamp,\n      IfcRampFlight,\n      IfcRampFlightType,\n      IfcRampType,\n      IfcRationalBSplineCurveWithKnots,\n      IfcRationalBSplineSurfaceWithKnots,\n      IfcRectangleHollowProfileDef,\n      IfcRectangleProfileDef,\n      IfcRectangularPyramid,\n      IfcRectangularTrimmedSurface,\n      IfcRecurrencePattern,\n      IfcReference,\n      IfcReferent,\n      IfcRegularTimeSeries,\n      IfcReinforcementBarProperties,\n      IfcReinforcementDefinitionProperties,\n      IfcReinforcingBar,\n      IfcReinforcingBarType,\n      IfcReinforcingElement,\n      IfcReinforcingElementType,\n      IfcReinforcingMesh,\n      IfcReinforcingMeshType,\n      IfcRelAggregates,\n      IfcRelAssigns,\n      IfcRelAssignsToActor,\n      IfcRelAssignsToControl,\n      IfcRelAssignsToGroup,\n      IfcRelAssignsToGroupByFactor,\n      IfcRelAssignsToProcess,\n      IfcRelAssignsToProduct,\n      IfcRelAssignsToResource,\n      IfcRelAssociates,\n      IfcRelAssociatesApproval,\n      IfcRelAssociatesClassification,\n      IfcRelAssociatesConstraint,\n      IfcRelAssociatesDocument,\n      IfcRelAssociatesLibrary,\n      IfcRelAssociatesMaterial,\n      IfcRelationship,\n      IfcRelConnects,\n      IfcRelConnectsElements,\n      IfcRelConnectsPathElements,\n      IfcRelConnectsPorts,\n      IfcRelConnectsPortToElement,\n      IfcRelConnectsStructuralActivity,\n      IfcRelConnectsStructuralMember,\n      IfcRelConnectsWithEccentricity,\n      IfcRelConnectsWithRealizingElements,\n      IfcRelContainedInSpatialStructure,\n      IfcRelCoversBldgElements,\n      IfcRelCoversSpaces,\n      IfcRelDeclares,\n      IfcRelDecomposes,\n      IfcRelDefines,\n      IfcRelDefinesByObject,\n      IfcRelDefinesByProperties,\n      IfcRelDefinesByTemplate,\n      IfcRelDefinesByType,\n      IfcRelFillsElement,\n      IfcRelFlowControlElements,\n      IfcRelInterferesElements,\n      IfcRelNests,\n      IfcRelPositions,\n      IfcRelProjectsElement,\n      IfcRelReferencedInSpatialStructure,\n      IfcRelSequence,\n      IfcRelServicesBuildings,\n      IfcRelSpaceBoundary,\n      IfcRelSpaceBoundary1stLevel,\n      IfcRelSpaceBoundary2ndLevel,\n      IfcRelVoidsElement,\n      IfcReparametrisedCompositeCurveSegment,\n      IfcRepresentation,\n      IfcRepresentationContext,\n      IfcRepresentationItem,\n      IfcRepresentationMap,\n      IfcResource,\n      IfcResourceApprovalRelationship,\n      IfcResourceConstraintRelationship,\n      IfcResourceLevelRelationship,\n      IfcResourceTime,\n      IfcRevolvedAreaSolid,\n      IfcRevolvedAreaSolidTapered,\n      IfcRightCircularCone,\n      IfcRightCircularCylinder,\n      IfcRoof,\n      IfcRoofType,\n      IfcRoot,\n      IfcRoundedRectangleProfileDef,\n      IfcSanitaryTerminal,\n      IfcSanitaryTerminalType,\n      IfcSchedulingTime,\n      IfcSeamCurve,\n      IfcSectionedSolid,\n      IfcSectionedSolidHorizontal,\n      IfcSectionedSpine,\n      IfcSectionProperties,\n      IfcSectionReinforcementProperties,\n      IfcSensor,\n      IfcSensorType,\n      IfcShadingDevice,\n      IfcShadingDeviceType,\n      IfcShapeAspect,\n      IfcShapeModel,\n      IfcShapeRepresentation,\n      IfcShellBasedSurfaceModel,\n      IfcSimpleProperty,\n      IfcSimplePropertyTemplate,\n      IfcSite,\n      IfcSIUnit,\n      IfcSlab,\n      IfcSlabElementedCase,\n      IfcSlabStandardCase,\n      IfcSlabType,\n      IfcSlippageConnectionCondition,\n      IfcSolarDevice,\n      IfcSolarDeviceType,\n      IfcSolidModel,\n      IfcSpace,\n      IfcSpaceHeater,\n      IfcSpaceHeaterType,\n      IfcSpaceType,\n      IfcSpatialElement,\n      IfcSpatialElementType,\n      IfcSpatialStructureElement,\n      IfcSpatialStructureElementType,\n      IfcSpatialZone,\n      IfcSpatialZoneType,\n      IfcSphere,\n      IfcSphericalSurface,\n      IfcStackTerminal,\n      IfcStackTerminalType,\n      IfcStair,\n      IfcStairFlight,\n      IfcStairFlightType,\n      IfcStairType,\n      IfcStructuralAction,\n      IfcStructuralActivity,\n      IfcStructuralAnalysisModel,\n      IfcStructuralConnection,\n      IfcStructuralConnectionCondition,\n      IfcStructuralCurveAction,\n      IfcStructuralCurveConnection,\n      IfcStructuralCurveMember,\n      IfcStructuralCurveMemberVarying,\n      IfcStructuralCurveReaction,\n      IfcStructuralItem,\n      IfcStructuralLinearAction,\n      IfcStructuralLoad,\n      IfcStructuralLoadCase,\n      IfcStructuralLoadConfiguration,\n      IfcStructuralLoadGroup,\n      IfcStructuralLoadLinearForce,\n      IfcStructuralLoadOrResult,\n      IfcStructuralLoadPlanarForce,\n      IfcStructuralLoadSingleDisplacement,\n      IfcStructuralLoadSingleDisplacementDistortion,\n      IfcStructuralLoadSingleForce,\n      IfcStructuralLoadSingleForceWarping,\n      IfcStructuralLoadStatic,\n      IfcStructuralLoadTemperature,\n      IfcStructuralMember,\n      IfcStructuralPlanarAction,\n      IfcStructuralPointAction,\n      IfcStructuralPointConnection,\n      IfcStructuralPointReaction,\n      IfcStructuralReaction,\n      IfcStructuralResultGroup,\n      IfcStructuralSurfaceAction,\n      IfcStructuralSurfaceConnection,\n      IfcStructuralSurfaceMember,\n      IfcStructuralSurfaceMemberVarying,\n      IfcStructuralSurfaceReaction,\n      IfcStyledItem,\n      IfcStyledRepresentation,\n      IfcStyleModel,\n      IfcSubContractResource,\n      IfcSubContractResourceType,\n      IfcSubedge,\n      IfcSurface,\n      IfcSurfaceCurve,\n      IfcSurfaceCurveSweptAreaSolid,\n      IfcSurfaceFeature,\n      IfcSurfaceOfLinearExtrusion,\n      IfcSurfaceOfRevolution,\n      IfcSurfaceReinforcementArea,\n      IfcSurfaceStyle,\n      IfcSurfaceStyleLighting,\n      IfcSurfaceStyleRefraction,\n      IfcSurfaceStyleRendering,\n      IfcSurfaceStyleShading,\n      IfcSurfaceStyleWithTextures,\n      IfcSurfaceTexture,\n      IfcSweptAreaSolid,\n      IfcSweptDiskSolid,\n      IfcSweptDiskSolidPolygonal,\n      IfcSweptSurface,\n      IfcSwitchingDevice,\n      IfcSwitchingDeviceType,\n      IfcSystem,\n      IfcSystemFurnitureElement,\n      IfcSystemFurnitureElementType,\n      IfcTable,\n      IfcTableColumn,\n      IfcTableRow,\n      IfcTank,\n      IfcTankType,\n      IfcTask,\n      IfcTaskTime,\n      IfcTaskTimeRecurring,\n      IfcTaskType,\n      IfcTelecomAddress,\n      IfcTendon,\n      IfcTendonAnchor,\n      IfcTendonAnchorType,\n      IfcTendonConduit,\n      IfcTendonConduitType,\n      IfcTendonType,\n      IfcTessellatedFaceSet,\n      IfcTessellatedItem,\n      IfcTextLiteral,\n      IfcTextLiteralWithExtent,\n      IfcTextStyle,\n      IfcTextStyleFontModel,\n      IfcTextStyleForDefinedFont,\n      IfcTextStyleTextModel,\n      IfcTextureCoordinate,\n      IfcTextureCoordinateGenerator,\n      IfcTextureMap,\n      IfcTextureVertex,\n      IfcTextureVertexList,\n      IfcTimePeriod,\n      IfcTimeSeries,\n      IfcTimeSeriesValue,\n      IfcTopologicalRepresentationItem,\n      IfcTopologyRepresentation,\n      IfcToroidalSurface,\n      IfcTransformer,\n      IfcTransformerType,\n      IfcTransitionCurveSegment2D,\n      IfcTransportElement,\n      IfcTransportElementType,\n      IfcTrapeziumProfileDef,\n      IfcTriangulatedFaceSet,\n      IfcTriangulatedIrregularNetwork,\n      IfcTrimmedCurve,\n      IfcTShapeProfileDef,\n      IfcTubeBundle,\n      IfcTubeBundleType,\n      IfcTypeObject,\n      IfcTypeProcess,\n      IfcTypeProduct,\n      IfcTypeResource,\n      IfcUnitaryControlElement,\n      IfcUnitaryControlElementType,\n      IfcUnitaryEquipment,\n      IfcUnitaryEquipmentType,\n      IfcUnitAssignment,\n      IfcUShapeProfileDef,\n      IfcValve,\n      IfcValveType,\n      IfcVector,\n      IfcVertex,\n      IfcVertexLoop,\n      IfcVertexPoint,\n      IfcVibrationDamper,\n      IfcVibrationDamperType,\n      IfcVibrationIsolator,\n      IfcVibrationIsolatorType,\n      IfcVirtualElement,\n      IfcVirtualGridIntersection,\n      IfcVoidingFeature,\n      IfcWall,\n      IfcWallElementedCase,\n      IfcWallStandardCase,\n      IfcWallType,\n      IfcWasteTerminal,\n      IfcWasteTerminalType,\n      IfcWindow,\n      IfcWindowLiningProperties,\n      IfcWindowPanelProperties,\n      IfcWindowStandardCase,\n      IfcWindowStyle,\n      IfcWindowType,\n      IfcWorkCalendar,\n      IfcWorkControl,\n      IfcWorkPlan,\n      IfcWorkSchedule,\n      IfcWorkTime,\n      IfcZone,\n      IfcZShapeProfileDef,\n      UnKnown\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Common/Enums/IFC4x3EntityType.cs",
    "content": "namespace Revit.IFC.Common.Enums.IFC4x3\n{\n   /// <summary>\n   /// List of Entities for IFC4x3\n   /// </summary>\n   public enum IFCEntityType\n   {\n      IfcActionRequest,\n      IfcActor,\n      IfcActorRole,\n      IfcActuator,\n      IfcActuatorType,\n      IfcAddress,\n      IfcAdvancedBrep,\n      IfcAdvancedBrepWithVoids,\n      IfcAdvancedFace,\n      IfcAirTerminal,\n      IfcAirTerminalBox,\n      IfcAirTerminalBoxType,\n      IfcAirTerminalType,\n      IfcAirToAirHeatRecovery,\n      IfcAirToAirHeatRecoveryType,\n      IfcAlarm,\n      IfcAlarmType,\n      IfcAlignment,\n      IfcAlignmentCant,\n      IfcAlignmentCantSegment,\n      IfcAlignmentHorizontal,\n      IfcAlignmentHorizontalSegment,\n      IfcAlignmentParameterSegment,\n      IfcAlignmentSegment,\n      IfcAlignmentVertical,\n      IfcAlignmentVerticalSegment,\n      IfcAnnotation,\n      IfcAnnotationFillArea,\n      IfcApplication,\n      IfcAppliedValue,\n      IfcApproval,\n      IfcApprovalRelationship,\n      IfcArbitraryClosedProfileDef,\n      IfcArbitraryOpenProfileDef,\n      IfcArbitraryProfileDefWithVoids,\n      IfcAsset,\n      IfcAsymmetricIShapeProfileDef,\n      IfcAudioVisualAppliance,\n      IfcAudioVisualApplianceType,\n      IfcAxis1Placement,\n      IfcAxis2Placement2D,\n      IfcAxis2Placement3D,\n      IfcAxis2PlacementLinear,\n      IfcBSplineCurve,\n      IfcBSplineCurveWithKnots,\n      IfcBSplineSurface,\n      IfcBSplineSurfaceWithKnots,\n      IfcBeam,\n      IfcBeamType,\n      IfcBearing,\n      IfcBearingType,\n      IfcBlobTexture,\n      IfcBlock,\n      IfcBoiler,\n      IfcBoilerType,\n      IfcBooleanClippingResult,\n      IfcBooleanResult,\n      IfcBorehole,\n      IfcBoundaryCondition,\n      IfcBoundaryCurve,\n      IfcBoundaryEdgeCondition,\n      IfcBoundaryFaceCondition,\n      IfcBoundaryNodeCondition,\n      IfcBoundaryNodeConditionWarping,\n      IfcBoundedCurve,\n      IfcBoundedSurface,\n      IfcBoundingBox,\n      IfcBoxedHalfSpace,\n      IfcBridge,\n      IfcBridgePart,\n      IfcBuilding,\n      IfcBuildingElementPart,\n      IfcBuildingElementPartType,\n      IfcBuildingElementProxy,\n      IfcBuildingElementProxyType,\n      IfcBuildingStorey,\n      IfcBuildingSystem,\n      IfcBuiltElement,\n      IfcBuiltElementType,\n      IfcBuiltSystem,\n      IfcBurner,\n      IfcBurnerType,\n      IfcCShapeProfileDef,\n      IfcCableCarrierFitting,\n      IfcCableCarrierFittingType,\n      IfcCableCarrierSegment,\n      IfcCableCarrierSegmentType,\n      IfcCableFitting,\n      IfcCableFittingType,\n      IfcCableSegment,\n      IfcCableSegmentType,\n      IfcCaissonFoundation,\n      IfcCaissonFoundationType,\n      IfcCartesianPoint,\n      IfcCartesianPointList,\n      IfcCartesianPointList2D,\n      IfcCartesianPointList3D,\n      IfcCartesianTransformationOperator,\n      IfcCartesianTransformationOperator2D,\n      IfcCartesianTransformationOperator2DnonUniform,\n      IfcCartesianTransformationOperator3D,\n      IfcCartesianTransformationOperator3DnonUniform,\n      IfcCenterLineProfileDef,\n      IfcChiller,\n      IfcChillerType,\n      IfcChimney,\n      IfcChimneyType,\n      IfcCircle,\n      IfcCircleHollowProfileDef,\n      IfcCircleProfileDef,\n      IfcCivilElement,\n      IfcCivilElementType,\n      IfcClassification,\n      IfcClassificationReference,\n      IfcClosedShell,\n      IfcClothoid,\n      IfcCoil,\n      IfcCoilType,\n      IfcColourRgb,\n      IfcColourRgbList,\n      IfcColourSpecification,\n      IfcColumn,\n      IfcColumnType,\n      IfcCommunicationsAppliance,\n      IfcCommunicationsApplianceType,\n      IfcComplexProperty,\n      IfcComplexPropertyTemplate,\n      IfcCompositeCurve,\n      IfcCompositeCurveOnSurface,\n      IfcCompositeCurveSegment,\n      IfcCompositeProfileDef,\n      IfcCompressor,\n      IfcCompressorType,\n      IfcCondenser,\n      IfcCondenserType,\n      IfcConic,\n      IfcConnectedFaceSet,\n      IfcConnectionCurveGeometry,\n      IfcConnectionGeometry,\n      IfcConnectionPointEccentricity,\n      IfcConnectionPointGeometry,\n      IfcConnectionSurfaceGeometry,\n      IfcConnectionVolumeGeometry,\n      IfcConstraint,\n      IfcConstructionEquipmentResource,\n      IfcConstructionEquipmentResourceType,\n      IfcConstructionMaterialResource,\n      IfcConstructionMaterialResourceType,\n      IfcConstructionProductResource,\n      IfcConstructionProductResourceType,\n      IfcConstructionResource,\n      IfcConstructionResourceType,\n      IfcContext,\n      IfcContextDependentUnit,\n      IfcControl,\n      IfcController,\n      IfcControllerType,\n      IfcConversionBasedUnit,\n      IfcConversionBasedUnitWithOffset,\n      IfcConveyorSegment,\n      IfcConveyorSegmentType,\n      IfcCooledBeam,\n      IfcCooledBeamType,\n      IfcCoolingTower,\n      IfcCoolingTowerType,\n      IfcCoordinateOperation,\n      IfcCoordinateReferenceSystem,\n      IfcCosineSpiral,\n      IfcCostItem,\n      IfcCostSchedule,\n      IfcCostValue,\n      IfcCourse,\n      IfcCourseType,\n      IfcCovering,\n      IfcCoveringType,\n      IfcCrewResource,\n      IfcCrewResourceType,\n      IfcCsgPrimitive3D,\n      IfcCsgSolid,\n      IfcCurrencyRelationship,\n      IfcCurtainWall,\n      IfcCurtainWallType,\n      IfcCurve,\n      IfcCurveBoundedPlane,\n      IfcCurveBoundedSurface,\n      IfcCurveSegment,\n      IfcCurveStyle,\n      IfcCurveStyleFont,\n      IfcCurveStyleFontAndScaling,\n      IfcCurveStyleFontPattern,\n      IfcCylindricalSurface,\n      IfcDamper,\n      IfcDamperType,\n      IfcDeepFoundation,\n      IfcDeepFoundationType,\n      IfcDerivedProfileDef,\n      IfcDerivedUnit,\n      IfcDerivedUnitElement,\n      IfcDimensionalExponents,\n      IfcDirection,\n      IfcDirectrixCurveSweptAreaSolid,\n      IfcDirectrixDerivedReferenceSweptAreaSolid,\n      IfcDiscreteAccessory,\n      IfcDiscreteAccessoryType,\n      IfcDistributionBoard,\n      IfcDistributionBoardType,\n      IfcDistributionChamberElement,\n      IfcDistributionChamberElementType,\n      IfcDistributionCircuit,\n      IfcDistributionControlElement,\n      IfcDistributionControlElementType,\n      IfcDistributionElement,\n      IfcDistributionElementType,\n      IfcDistributionFlowElement,\n      IfcDistributionFlowElementType,\n      IfcDistributionPort,\n      IfcDistributionSystem,\n      IfcDocumentInformation,\n      IfcDocumentInformationRelationship,\n      IfcDocumentReference,\n      IfcDoor,\n      IfcDoorLiningProperties,\n      IfcDoorPanelProperties,\n      IfcDoorType,\n      IfcDraughtingPreDefinedColour,\n      IfcDraughtingPreDefinedCurveFont,\n      IfcDuctFitting,\n      IfcDuctFittingType,\n      IfcDuctSegment,\n      IfcDuctSegmentType,\n      IfcDuctSilencer,\n      IfcDuctSilencerType,\n      IfcEarthworksCut,\n      IfcEarthworksElement,\n      IfcEarthworksFill,\n      IfcEdge,\n      IfcEdgeCurve,\n      IfcEdgeLoop,\n      IfcElectricAppliance,\n      IfcElectricApplianceType,\n      IfcElectricDistributionBoard,\n      IfcElectricDistributionBoardType,\n      IfcElectricFlowStorageDevice,\n      IfcElectricFlowStorageDeviceType,\n      IfcElectricFlowTreatmentDevice,\n      IfcElectricFlowTreatmentDeviceType,\n      IfcElectricGenerator,\n      IfcElectricGeneratorType,\n      IfcElectricMotor,\n      IfcElectricMotorType,\n      IfcElectricTimeControl,\n      IfcElectricTimeControlType,\n      IfcElement,\n      IfcElementAssembly,\n      IfcElementAssemblyType,\n      IfcElementComponent,\n      IfcElementComponentType,\n      IfcElementQuantity,\n      IfcElementType,\n      IfcElementarySurface,\n      IfcEllipse,\n      IfcEllipseProfileDef,\n      IfcEnergyConversionDevice,\n      IfcEnergyConversionDeviceType,\n      IfcEngine,\n      IfcEngineType,\n      IfcEvaporativeCooler,\n      IfcEvaporativeCoolerType,\n      IfcEvaporator,\n      IfcEvaporatorType,\n      IfcEvent,\n      IfcEventTime,\n      IfcEventType,\n      IfcExtendedProperties,\n      IfcExternalInformation,\n      IfcExternalReference,\n      IfcExternalReferenceRelationship,\n      IfcExternalSpatialElement,\n      IfcExternalSpatialStructureElement,\n      IfcExternallyDefinedHatchStyle,\n      IfcExternallyDefinedSurfaceStyle,\n      IfcExternallyDefinedTextFont,\n      IfcExtrudedAreaSolid,\n      IfcExtrudedAreaSolidTapered,\n      IfcFace,\n      IfcFaceBasedSurfaceModel,\n      IfcFaceBound,\n      IfcFaceOuterBound,\n      IfcFaceSurface,\n      IfcFacetedBrep,\n      IfcFacetedBrepWithVoids,\n      IfcFacility,\n      IfcFacilityPart,\n      IfcFacilityPartCommon,\n      IfcFailureConnectionCondition,\n      IfcFan,\n      IfcFanType,\n      IfcFastener,\n      IfcFastenerType,\n      IfcFeatureElement,\n      IfcFeatureElementAddition,\n      IfcFeatureElementSubtraction,\n      IfcFillAreaStyle,\n      IfcFillAreaStyleHatching,\n      IfcFillAreaStyleTiles,\n      IfcFilter,\n      IfcFilterType,\n      IfcFireSuppressionTerminal,\n      IfcFireSuppressionTerminalType,\n      IfcFixedReferenceSweptAreaSolid,\n      IfcFlowController,\n      IfcFlowControllerType,\n      IfcFlowFitting,\n      IfcFlowFittingType,\n      IfcFlowInstrument,\n      IfcFlowInstrumentType,\n      IfcFlowMeter,\n      IfcFlowMeterType,\n      IfcFlowMovingDevice,\n      IfcFlowMovingDeviceType,\n      IfcFlowSegment,\n      IfcFlowSegmentType,\n      IfcFlowStorageDevice,\n      IfcFlowStorageDeviceType,\n      IfcFlowTerminal,\n      IfcFlowTerminalType,\n      IfcFlowTreatmentDevice,\n      IfcFlowTreatmentDeviceType,\n      IfcFooting,\n      IfcFootingType,\n      IfcFurnishingElement,\n      IfcFurnishingElementType,\n      IfcFurniture,\n      IfcFurnitureType,\n      IfcGeographicElement,\n      IfcGeographicElementType,\n      IfcGeometricCurveSet,\n      IfcGeometricRepresentationContext,\n      IfcGeometricRepresentationItem,\n      IfcGeometricRepresentationSubContext,\n      IfcGeometricSet,\n      IfcGeomodel,\n      IfcGeoslice,\n      IfcGeotechnicalAssembly,\n      IfcGeotechnicalElement,\n      IfcGeotechnicalStratum,\n      IfcGradientCurve,\n      IfcGrid,\n      IfcGridAxis,\n      IfcGridPlacement,\n      IfcGroup,\n      IfcHalfSpaceSolid,\n      IfcHeatExchanger,\n      IfcHeatExchangerType,\n      IfcHumidifier,\n      IfcHumidifierType,\n      IfcIShapeProfileDef,\n      IfcImageTexture,\n      IfcImpactProtectionDevice,\n      IfcImpactProtectionDeviceType,\n      IfcIndexedColourMap,\n      IfcIndexedPolyCurve,\n      IfcIndexedPolygonalFace,\n      IfcIndexedPolygonalFaceWithVoids,\n      IfcIndexedPolygonalTextureMap,\n      IfcIndexedTextureMap,\n      IfcIndexedTriangleTextureMap,\n      IfcInterceptor,\n      IfcInterceptorType,\n      IfcIntersectionCurve,\n      IfcInventory,\n      IfcIrregularTimeSeries,\n      IfcIrregularTimeSeriesValue,\n      IfcJunctionBox,\n      IfcJunctionBoxType,\n      IfcKerb,\n      IfcKerbType,\n      IfcLShapeProfileDef,\n      IfcLaborResource,\n      IfcLaborResourceType,\n      IfcLagTime,\n      IfcLamp,\n      IfcLampType,\n      IfcLibraryInformation,\n      IfcLibraryReference,\n      IfcLightDistributionData,\n      IfcLightFixture,\n      IfcLightFixtureType,\n      IfcLightIntensityDistribution,\n      IfcLightSource,\n      IfcLightSourceAmbient,\n      IfcLightSourceDirectional,\n      IfcLightSourceGoniometric,\n      IfcLightSourcePositional,\n      IfcLightSourceSpot,\n      IfcLine,\n      IfcLinearElement,\n      IfcLinearPlacement,\n      IfcLinearPositioningElement,\n      IfcLiquidTerminal,\n      IfcLiquidTerminalType,\n      IfcLocalPlacement,\n      IfcLoop,\n      IfcManifoldSolidBrep,\n      IfcMapConversion,\n      IfcMappedItem,\n      IfcMarineFacility,\n      IfcMarinePart,\n      IfcMaterial,\n      IfcMaterialClassificationRelationship,\n      IfcMaterialConstituent,\n      IfcMaterialConstituentSet,\n      IfcMaterialDefinition,\n      IfcMaterialDefinitionRepresentation,\n      IfcMaterialLayer,\n      IfcMaterialLayerSet,\n      IfcMaterialLayerSetUsage,\n      IfcMaterialLayerWithOffsets,\n      IfcMaterialList,\n      IfcMaterialProfile,\n      IfcMaterialProfileSet,\n      IfcMaterialProfileSetUsage,\n      IfcMaterialProfileSetUsageTapering,\n      IfcMaterialProfileWithOffsets,\n      IfcMaterialProperties,\n      IfcMaterialRelationship,\n      IfcMaterialUsageDefinition,\n      IfcMeasureWithUnit,\n      IfcMechanicalFastener,\n      IfcMechanicalFastenerType,\n      IfcMedicalDevice,\n      IfcMedicalDeviceType,\n      IfcMember,\n      IfcMemberType,\n      IfcMetric,\n      IfcMirroredProfileDef,\n      IfcMobileTelecommunicationsAppliance,\n      IfcMobileTelecommunicationsApplianceType,\n      IfcMonetaryUnit,\n      IfcMooringDevice,\n      IfcMooringDeviceType,\n      IfcMotorConnection,\n      IfcMotorConnectionType,\n      IfcNamedUnit,\n      IfcNavigationElement,\n      IfcNavigationElementType,\n      IfcObject,\n      IfcObjectDefinition,\n      IfcObjectPlacement,\n      IfcObjective,\n      IfcOccupant,\n      IfcOffsetCurve,\n      IfcOffsetCurve2D,\n      IfcOffsetCurve3D,\n      IfcOffsetCurveByDistances,\n      IfcOpenCrossProfileDef,\n      IfcOpenShell,\n      IfcOpeningElement,\n      IfcOrganization,\n      IfcOrganizationRelationship,\n      IfcOrientedEdge,\n      IfcOuterBoundaryCurve,\n      IfcOutlet,\n      IfcOutletType,\n      IfcOwnerHistory,\n      IfcParameterizedProfileDef,\n      IfcPath,\n      IfcPavement,\n      IfcPavementType,\n      IfcPcurve,\n      IfcPerformanceHistory,\n      IfcPermeableCoveringProperties,\n      IfcPermit,\n      IfcPerson,\n      IfcPersonAndOrganization,\n      IfcPhysicalComplexQuantity,\n      IfcPhysicalQuantity,\n      IfcPhysicalSimpleQuantity,\n      IfcPile,\n      IfcPileType,\n      IfcPipeFitting,\n      IfcPipeFittingType,\n      IfcPipeSegment,\n      IfcPipeSegmentType,\n      IfcPixelTexture,\n      IfcPlacement,\n      IfcPlanarBox,\n      IfcPlanarExtent,\n      IfcPlane,\n      IfcPlate,\n      IfcPlateType,\n      IfcPoint,\n      IfcPointByDistanceExpression,\n      IfcPointOnCurve,\n      IfcPointOnSurface,\n      IfcPolyLoop,\n      IfcPolygonalBoundedHalfSpace,\n      IfcPolygonalFaceSet,\n      IfcPolyline,\n      IfcPolynomialCurve,\n      IfcPort,\n      IfcPositioningElement,\n      IfcPostalAddress,\n      IfcPreDefinedColour,\n      IfcPreDefinedCurveFont,\n      IfcPreDefinedItem,\n      IfcPreDefinedProperties,\n      IfcPreDefinedPropertySet,\n      IfcPreDefinedTextFont,\n      IfcPresentationItem,\n      IfcPresentationLayerAssignment,\n      IfcPresentationLayerWithStyle,\n      IfcPresentationStyle,\n      IfcProcedure,\n      IfcProcedureType,\n      IfcProcess,\n      IfcProduct,\n      IfcProductDefinitionShape,\n      IfcProductRepresentation,\n      IfcProfileDef,\n      IfcProfileProperties,\n      IfcProject,\n      IfcProjectLibrary,\n      IfcProjectOrder,\n      IfcProjectedCRS,\n      IfcProjectionElement,\n      IfcProperty,\n      IfcPropertyAbstraction,\n      IfcPropertyBoundedValue,\n      IfcPropertyDefinition,\n      IfcPropertyDependencyRelationship,\n      IfcPropertyEnumeratedValue,\n      IfcPropertyEnumeration,\n      IfcPropertyListValue,\n      IfcPropertyReferenceValue,\n      IfcPropertySet,\n      IfcPropertySetDefinition,\n      IfcPropertySetTemplate,\n      IfcPropertySingleValue,\n      IfcPropertyTableValue,\n      IfcPropertyTemplate,\n      IfcPropertyTemplateDefinition,\n      IfcProtectiveDevice,\n      IfcProtectiveDeviceTrippingUnit,\n      IfcProtectiveDeviceTrippingUnitType,\n      IfcProtectiveDeviceType,\n      IfcPump,\n      IfcPumpType,\n      IfcQuantityArea,\n      IfcQuantityCount,\n      IfcQuantityLength,\n      IfcQuantityNumber,\n      IfcQuantitySet,\n      IfcQuantityTime,\n      IfcQuantityVolume,\n      IfcQuantityWeight,\n      IfcRail,\n      IfcRailType,\n      IfcRailing,\n      IfcRailingType,\n      IfcRailway,\n      IfcRailwayPart,\n      IfcRamp,\n      IfcRampFlight,\n      IfcRampFlightType,\n      IfcRampType,\n      IfcRationalBSplineCurveWithKnots,\n      IfcRationalBSplineSurfaceWithKnots,\n      IfcRectangleHollowProfileDef,\n      IfcRectangleProfileDef,\n      IfcRectangularPyramid,\n      IfcRectangularTrimmedSurface,\n      IfcRecurrencePattern,\n      IfcReference,\n      IfcReferent,\n      IfcRegularTimeSeries,\n      IfcReinforcedSoil,\n      IfcReinforcementBarProperties,\n      IfcReinforcementDefinitionProperties,\n      IfcReinforcingBar,\n      IfcReinforcingBarType,\n      IfcReinforcingElement,\n      IfcReinforcingElementType,\n      IfcReinforcingMesh,\n      IfcReinforcingMeshType,\n      IfcRelAdheresToElement,\n      IfcRelAggregates,\n      IfcRelAssigns,\n      IfcRelAssignsToActor,\n      IfcRelAssignsToControl,\n      IfcRelAssignsToGroup,\n      IfcRelAssignsToGroupByFactor,\n      IfcRelAssignsToProcess,\n      IfcRelAssignsToProduct,\n      IfcRelAssignsToResource,\n      IfcRelAssociates,\n      IfcRelAssociatesApproval,\n      IfcRelAssociatesClassification,\n      IfcRelAssociatesConstraint,\n      IfcRelAssociatesDocument,\n      IfcRelAssociatesLibrary,\n      IfcRelAssociatesMaterial,\n      IfcRelAssociatesProfileDef,\n      IfcRelConnects,\n      IfcRelConnectsElements,\n      IfcRelConnectsPathElements,\n      IfcRelConnectsPortToElement,\n      IfcRelConnectsPorts,\n      IfcRelConnectsStructuralActivity,\n      IfcRelConnectsStructuralMember,\n      IfcRelConnectsWithEccentricity,\n      IfcRelConnectsWithRealizingElements,\n      IfcRelContainedInSpatialStructure,\n      IfcRelCoversBldgElements,\n      IfcRelCoversSpaces,\n      IfcRelDeclares,\n      IfcRelDecomposes,\n      IfcRelDefines,\n      IfcRelDefinesByObject,\n      IfcRelDefinesByProperties,\n      IfcRelDefinesByTemplate,\n      IfcRelDefinesByType,\n      IfcRelFillsElement,\n      IfcRelFlowControlElements,\n      IfcRelInterferesElements,\n      IfcRelNests,\n      IfcRelPositions,\n      IfcRelProjectsElement,\n      IfcRelReferencedInSpatialStructure,\n      IfcRelSequence,\n      IfcRelServicesBuildings,\n      IfcRelSpaceBoundary,\n      IfcRelSpaceBoundary1stLevel,\n      IfcRelSpaceBoundary2ndLevel,\n      IfcRelVoidsElement,\n      IfcRelationship,\n      IfcReparametrisedCompositeCurveSegment,\n      IfcRepresentation,\n      IfcRepresentationContext,\n      IfcRepresentationItem,\n      IfcRepresentationMap,\n      IfcResource,\n      IfcResourceApprovalRelationship,\n      IfcResourceConstraintRelationship,\n      IfcResourceLevelRelationship,\n      IfcResourceTime,\n      IfcRevolvedAreaSolid,\n      IfcRevolvedAreaSolidTapered,\n      IfcRightCircularCone,\n      IfcRightCircularCylinder,\n      IfcRoad,\n      IfcRoadPart,\n      IfcRoof,\n      IfcRoofType,\n      IfcRoot,\n      IfcRoundedRectangleProfileDef,\n      IfcSIUnit,\n      IfcSanitaryTerminal,\n      IfcSanitaryTerminalType,\n      IfcSchedulingTime,\n      IfcSeamCurve,\n      IfcSecondOrderPolynomialSpiral,\n      IfcSectionProperties,\n      IfcSectionReinforcementProperties,\n      IfcSectionedSolid,\n      IfcSectionedSolidHorizontal,\n      IfcSectionedSpine,\n      IfcSectionedSurface,\n      IfcSegment,\n      IfcSegmentedReferenceCurve,\n      IfcSensor,\n      IfcSensorType,\n      IfcSeventhOrderPolynomialSpiral,\n      IfcShadingDevice,\n      IfcShadingDeviceType,\n      IfcShapeAspect,\n      IfcShapeModel,\n      IfcShapeRepresentation,\n      IfcShellBasedSurfaceModel,\n      IfcSign,\n      IfcSignType,\n      IfcSignal,\n      IfcSignalType,\n      IfcSimpleProperty,\n      IfcSimplePropertyTemplate,\n      IfcSineSpiral,\n      IfcSite,\n      IfcSlab,\n      IfcSlabType,\n      IfcSlippageConnectionCondition,\n      IfcSolarDevice,\n      IfcSolarDeviceType,\n      IfcSolidModel,\n      IfcSpace,\n      IfcSpaceHeater,\n      IfcSpaceHeaterType,\n      IfcSpaceType,\n      IfcSpatialElement,\n      IfcSpatialElementType,\n      IfcSpatialStructureElement,\n      IfcSpatialStructureElementType,\n      IfcSpatialZone,\n      IfcSpatialZoneType,\n      IfcSphere,\n      IfcSphericalSurface,\n      IfcSpiral,\n      IfcStackTerminal,\n      IfcStackTerminalType,\n      IfcStair,\n      IfcStairFlight,\n      IfcStairFlightType,\n      IfcStairType,\n      IfcStructuralAction,\n      IfcStructuralActivity,\n      IfcStructuralAnalysisModel,\n      IfcStructuralConnection,\n      IfcStructuralConnectionCondition,\n      IfcStructuralCurveAction,\n      IfcStructuralCurveConnection,\n      IfcStructuralCurveMember,\n      IfcStructuralCurveMemberVarying,\n      IfcStructuralCurveReaction,\n      IfcStructuralItem,\n      IfcStructuralLinearAction,\n      IfcStructuralLoad,\n      IfcStructuralLoadCase,\n      IfcStructuralLoadConfiguration,\n      IfcStructuralLoadGroup,\n      IfcStructuralLoadLinearForce,\n      IfcStructuralLoadOrResult,\n      IfcStructuralLoadPlanarForce,\n      IfcStructuralLoadSingleDisplacement,\n      IfcStructuralLoadSingleDisplacementDistortion,\n      IfcStructuralLoadSingleForce,\n      IfcStructuralLoadSingleForceWarping,\n      IfcStructuralLoadStatic,\n      IfcStructuralLoadTemperature,\n      IfcStructuralMember,\n      IfcStructuralPlanarAction,\n      IfcStructuralPointAction,\n      IfcStructuralPointConnection,\n      IfcStructuralPointReaction,\n      IfcStructuralReaction,\n      IfcStructuralResultGroup,\n      IfcStructuralSurfaceAction,\n      IfcStructuralSurfaceConnection,\n      IfcStructuralSurfaceMember,\n      IfcStructuralSurfaceMemberVarying,\n      IfcStructuralSurfaceReaction,\n      IfcStyleModel,\n      IfcStyledItem,\n      IfcStyledRepresentation,\n      IfcSubContractResource,\n      IfcSubContractResourceType,\n      IfcSubedge,\n      IfcSurface,\n      IfcSurfaceCurve,\n      IfcSurfaceCurveSweptAreaSolid,\n      IfcSurfaceFeature,\n      IfcSurfaceOfLinearExtrusion,\n      IfcSurfaceOfRevolution,\n      IfcSurfaceReinforcementArea,\n      IfcSurfaceStyle,\n      IfcSurfaceStyleLighting,\n      IfcSurfaceStyleRefraction,\n      IfcSurfaceStyleRendering,\n      IfcSurfaceStyleShading,\n      IfcSurfaceStyleWithTextures,\n      IfcSurfaceTexture,\n      IfcSweptAreaSolid,\n      IfcSweptDiskSolid,\n      IfcSweptDiskSolidPolygonal,\n      IfcSweptSurface,\n      IfcSwitchingDevice,\n      IfcSwitchingDeviceType,\n      IfcSystem,\n      IfcSystemFurnitureElement,\n      IfcSystemFurnitureElementType,\n      IfcTShapeProfileDef,\n      IfcTable,\n      IfcTableColumn,\n      IfcTableRow,\n      IfcTank,\n      IfcTankType,\n      IfcTask,\n      IfcTaskTime,\n      IfcTaskTimeRecurring,\n      IfcTaskType,\n      IfcTelecomAddress,\n      IfcTendon,\n      IfcTendonAnchor,\n      IfcTendonAnchorType,\n      IfcTendonConduit,\n      IfcTendonConduitType,\n      IfcTendonType,\n      IfcTessellatedFaceSet,\n      IfcTessellatedItem,\n      IfcTextLiteral,\n      IfcTextLiteralWithExtent,\n      IfcTextStyle,\n      IfcTextStyleFontModel,\n      IfcTextStyleForDefinedFont,\n      IfcTextStyleTextModel,\n      IfcTextureCoordinate,\n      IfcTextureCoordinateGenerator,\n      IfcTextureCoordinateIndices,\n      IfcTextureCoordinateIndicesWithVoids,\n      IfcTextureMap,\n      IfcTextureVertex,\n      IfcTextureVertexList,\n      IfcThirdOrderPolynomialSpiral,\n      IfcTimePeriod,\n      IfcTimeSeries,\n      IfcTimeSeriesValue,\n      IfcTopologicalRepresentationItem,\n      IfcTopologyRepresentation,\n      IfcToroidalSurface,\n      IfcTrackElement,\n      IfcTrackElementType,\n      IfcTransformer,\n      IfcTransformerType,\n      IfcTransportElement,\n      IfcTransportElementType,\n      IfcTransportationDevice,\n      IfcTransportationDeviceType,\n      IfcTrapeziumProfileDef,\n      IfcTriangulatedFaceSet,\n      IfcTriangulatedIrregularNetwork,\n      IfcTrimmedCurve,\n      IfcTubeBundle,\n      IfcTubeBundleType,\n      IfcTypeObject,\n      IfcTypeProcess,\n      IfcTypeProduct,\n      IfcTypeResource,\n      IfcUShapeProfileDef,\n      IfcUnitAssignment,\n      IfcUnitaryControlElement,\n      IfcUnitaryControlElementType,\n      IfcUnitaryEquipment,\n      IfcUnitaryEquipmentType,\n      IfcValve,\n      IfcValveType,\n      IfcVector,\n      IfcVehicle,\n      IfcVehicleType,\n      IfcVertex,\n      IfcVertexLoop,\n      IfcVertexPoint,\n      IfcVibrationDamper,\n      IfcVibrationDamperType,\n      IfcVibrationIsolator,\n      IfcVibrationIsolatorType,\n      IfcVirtualElement,\n      IfcVirtualGridIntersection,\n      IfcVoidingFeature,\n      IfcWall,\n      IfcWallStandardCase,\n      IfcWallType,\n      IfcWasteTerminal,\n      IfcWasteTerminalType,\n      IfcWindow,\n      IfcWindowLiningProperties,\n      IfcWindowPanelProperties,\n      IfcWindowType,\n      IfcWorkCalendar,\n      IfcWorkControl,\n      IfcWorkPlan,\n      IfcWorkSchedule,\n      IfcWorkTime,\n      IfcZShapeProfileDef,\n      IfcZone,\n      Unknown,\n      DontExport\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Enums/IFCEntityType.cs",
    "content": "﻿namespace Revit.IFC.Common.Enums\r\n{\r\n   /// <summary>\r\n   /// IFC entity types. Combining IFC2x2_ADD1, IFC2x3_TC1, IFC4 (Add2) and IFC4x entities, which are non-abstract \r\n   /// and subtypes of IfcGroup, IfcProduct and IfcTypeProduct \r\n   /// List of Entities for IFC4 is found in IFC2x2_ADD1EntityType.cs\r\n   /// List of Entities for IFC4 is found in IFC2x3_TC1EntityType.cs\r\n   /// List of Entities for IFC4 is found in IFC4EntityType.cs\r\n   /// List of Entities for IFC4x3 is found in IFC4x3EntityType.cs\r\n   /// </summary>\r\n   public enum IFCEntityType\r\n   {\r\n      Ifc2DCompositeCurve,\r\n      IfcActionRequest,\r\n      IfcActionTimeControl,\r\n      IfcActor,\r\n      IfcActorRole,\r\n      IfcActuator,\r\n      IfcActuatorType,\r\n      IfcAddress,\r\n      IfcAdvancedBrep,\r\n      IfcAdvancedBrepWithVoids,\r\n      IfcAdvancedFace,\r\n      IfcAirFilter,\r\n      IfcAirTerminal,\r\n      IfcAirTerminalBox,\r\n      IfcAirTerminalBoxType,\r\n      IfcAirTerminalType,\r\n      IfcAirToAirHeatRecovery,\r\n      IfcAirToAirHeatRecoveryType,\r\n      IfcAlarm,\r\n      IfcAlarmType,\r\n      IfcAlignment,\r\n      IfcAlignmentCant,\r\n      IfcAlignmentCantSegment,\r\n      IfcAlignmentHorizontal,\r\n      IfcAlignmentHorizontalSegment,\r\n      IfcAlignmentParameterSegment,\r\n      IfcAlignmentSegment,\r\n      IfcAlignmentVertical,\r\n      IfcAlignmentVerticalSegment,\r\n      IfcAngularDimension,\r\n      IfcAnnotation,\r\n      IfcAnnotationCurveOccurrence,\r\n      IfcAnnotationFillArea,\r\n      IfcAnnotationFillAreaOccurrence,\r\n      IfcAnnotationOccurrence,\r\n      IfcAnnotationSurface,\r\n      IfcAnnotationSurfaceOccurrence,\r\n      IfcAnnotationSymbolOccurrence,\r\n      IfcAnnotationTextOccurrence,\r\n      IfcApplication,\r\n      IfcAppliedValue,\r\n      IfcAppliedValueRelationship,\r\n      IfcApproval,\r\n      IfcApprovalActorRelationship,\r\n      IfcApprovalPropertyRelationship,\r\n      IfcApprovalRelationship,\r\n      IfcApprovalUsage,\r\n      IfcArbitraryClosedProfileDef,\r\n      IfcArbitraryOpenProfileDef,\r\n      IfcArbitraryProfileDefWithVoids,\r\n      IfcAssessory,\r\n      IfcAsset,\r\n      IfcAsymmetricIShapeProfileDef,\r\n      IfcAudioVisualAppliance,\r\n      IfcAudioVisualApplianceType,\r\n      IfcAxis1Placement,\r\n      IfcAxis2Placement2D,\r\n      IfcAxis2Placement3D,\r\n      IfcAxis2PlacementLinear,\r\n      IfcBeam,\r\n      IfcBeamStandardCase,\r\n      IfcBeamType,\r\n      IfcBearing,\r\n      IfcBearingType,\r\n      IfcBezierCurve,\r\n      IfcBlobTexture,\r\n      IfcBlock,\r\n      IfcBoiler,\r\n      IfcBoilerType,\r\n      IfcBooleanClippingResult,\r\n      IfcBooleanResult,\r\n      IfcBorehole,\r\n      IfcBoundaryCondition,\r\n      IfcBoundaryCurve,\r\n      IfcBoundaryEdgeCondition,\r\n      IfcBoundaryFaceCondition,\r\n      IfcBoundaryNodeCondition,\r\n      IfcBoundaryNodeConditionWarping,\r\n      IfcBoundedCurve,\r\n      IfcBoundedSurface,\r\n      IfcBoundingBox,\r\n      IfcBoxedHalfSpace,\r\n      IfcBridge,\r\n      IfcBridgePart,\r\n      IfcBSplineCurve,\r\n      IfcBSplineCurveWithKnots,\r\n      IfcBSplineSurface,\r\n      IfcBSplineSurfaceWithKnots,\r\n      IfcBudget,\r\n      IfcBuilding,\r\n      IfcBuildingElement,\r\n      IfcBuildingElementComponent,\r\n      IfcBuildingElementPart,\r\n      IfcBuildingElementPartType,\r\n      IfcBuildingElementProxy,\r\n      IfcBuildingElementProxyType,\r\n      IfcBuildingElementType,\r\n      IfcBuildingStorey,\r\n      IfcBuildingSystem,\r\n      IfcBuiltElement,\r\n      IfcBuiltElementType,\r\n      IfcBuiltIn,\r\n      IfcBuiltSystem,\r\n      IfcBurner,\r\n      IfcBurnerType,\r\n      IfcCableCarrierFitting,\r\n      IfcCableCarrierFittingType,\r\n      IfcCableCarrierSegment,\r\n      IfcCableCarrierSegmentType,\r\n      IfcCableFitting,\r\n      IfcCableFittingType,\r\n      IfcCableSegment,\r\n      IfcCableSegmentType,\r\n      IfcCaissonFoundation,\r\n      IfcCaissonFoundationType,\r\n      IfcCalendarDate,\r\n      IfcCartesianPoint,\r\n      IfcCartesianPointList,\r\n      IfcCartesianPointList2D,\r\n      IfcCartesianPointList3D,\r\n      IfcCartesianTransformationOperator,\r\n      IfcCartesianTransformationOperator2D,\r\n      IfcCartesianTransformationOperator2DnonUniform,\r\n      IfcCartesianTransformationOperator3D,\r\n      IfcCartesianTransformationOperator3DnonUniform,\r\n      IfcCenterLineProfileDef,\r\n      IfcChamferEdgeFeature,\r\n      IfcChangeOrder,\r\n      IfcChiller,\r\n      IfcChillerType,\r\n      IfcChimney,\r\n      IfcChimneyType,\r\n      IfcCircle,\r\n      IfcCircleHollowProfileDef,\r\n      IfcCircleProfileDef,\r\n      IfcCivilElement,\r\n      IfcCivilElementType,\r\n      IfcClassification,\r\n      IfcClassificationItem,\r\n      IfcClassificationItemRelationship,\r\n      IfcClassificationNotation,\r\n      IfcClassificationNotationFacet,\r\n      IfcClassificationReference,\r\n      IfcClosedShell,\r\n      IfcClothoid,\r\n      IfcCMDocPackage,\r\n      IfcCoil,\r\n      IfcCoilType,\r\n      IfcColourRgb,\r\n      IfcColourRgbList,\r\n      IfcColourSpecification,\r\n      IfcColumn,\r\n      IfcColumnStandardCase,\r\n      IfcColumnType,\r\n      IfcCommunicationsAppliance,\r\n      IfcCommunicationsApplianceType,\r\n      IfcCompartment,\r\n      IfcComplexProperty,\r\n      IfcComplexPropertyTemplate,\r\n      IfcCompositeCurve,\r\n      IfcCompositeCurveOnSurface,\r\n      IfcCompositeCurveSegment,\r\n      IfcCompositeProfileDef,\r\n      IfcCompressor,\r\n      IfcCompressorType,\r\n      IfcCondenser,\r\n      IfcCondenserType,\r\n      IfcCondition,\r\n      IfcConditionCriterion,\r\n      IfcConic,\r\n      IfcConnectedFaceSet,\r\n      IfcConnectionConstraint,\r\n      IfcConnectionCurveGeometry,\r\n      IfcConnectionGeometry,\r\n      IfcConnectionPointEccentricity,\r\n      IfcConnectionPointGeometry,\r\n      IfcConnectionPortGeometry,\r\n      IfcConnectionSurfaceGeometry,\r\n      IfcConnectionVolumeGeometry,\r\n      IfcConstraint,\r\n      IfcConstraintAggregationRelationship,\r\n      IfcConstraintClassificationRelationship,\r\n      IfcConstraintRelationship,\r\n      IfcConstraintUsage,\r\n      IfcConstructionEquipmentResource,\r\n      IfcConstructionEquipmentResourceType,\r\n      IfcConstructionMaterialResource,\r\n      IfcConstructionMaterialResourceType,\r\n      IfcConstructionProductResource,\r\n      IfcConstructionProductResourceType,\r\n      IfcConstructionResource,\r\n      IfcConstructionResourceType,\r\n      IfcContext,\r\n      IfcContextDependentUnit,\r\n      IfcControl,\r\n      IfcControlElement,\r\n      IfcController,\r\n      IfcControllerType,\r\n      IfcConversionBasedUnit,\r\n      IfcConversionBasedUnitWithOffset,\r\n      IfcConveyorSegment,\r\n      IfcConveyorSegmentType,\r\n      IfcCooledBeam,\r\n      IfcCooledBeamType,\r\n      IfcCoolingTower,\r\n      IfcCoolingTowerType,\r\n      IfcCoordinatedUniversalTimeOffset,\r\n      IfcCoordinateOperation,\r\n      IfcCoordinateReferenceSystem,\r\n      IfcCosineSpiral,\r\n      IfcCost,\r\n      IfcCostItem,\r\n      IfcCostModifier,\r\n      IfcCostModifierValue,\r\n      IfcCostQuantity,\r\n      IfcCostSchedule,\r\n      IfcCostValue,\r\n      IfcCostValueRelationship,\r\n      IfcCourse,\r\n      IfcCourseType,\r\n      IfcCovering,\r\n      IfcCoveringType,\r\n      IfcCraneRailAShapeProfileDef,\r\n      IfcCraneRailFShapeProfileDef,\r\n      IfcCrewResource,\r\n      IfcCrewResourceType,\r\n      IfcCsgPrimitive3D,\r\n      IfcCsgSolid,\r\n      IfcCShapeProfileDef,\r\n      IfcCurrencyRelationship,\r\n      IfcCurtainWall,\r\n      IfcCurtainWallType,\r\n      IfcCurve,\r\n      IfcCurveBoundedPlane,\r\n      IfcCurveBoundedSurface,\r\n      IfcCurveSegment,\r\n      IfcCurveStyle,\r\n      IfcCurveStyleFont,\r\n      IfcCurveStyleFontAndScaling,\r\n      IfcCurveStyleFontPattern,\r\n      IfcCylindricalSurface,\r\n      IfcDamper,\r\n      IfcDamperType,\r\n      IfcDateAndTime,\r\n      IfcDeepFoundation,\r\n      IfcDeepFoundationType,\r\n      IfcDefinedSymbol,\r\n      IfcDerivedProfileDef,\r\n      IfcDerivedUnit,\r\n      IfcDerivedUnitElement,\r\n      IfcDiameterDimension,\r\n      IfcDimensionalExponents,\r\n      IfcDimensionCalloutRelationship,\r\n      IfcDimensionCurve,\r\n      IfcDimensionCurveDirectedCallout,\r\n      IfcDimensionCurveTerminator,\r\n      IfcDimensionPair,\r\n      IfcDirection,\r\n      IfcDirectionalLightSource,\r\n      IfcDirectrixCurveSweptAreaSolid,\r\n      IfcDirectrixDerivedReferenceSweptAreaSolid,\r\n      IfcDiscreteAccessory,\r\n      IfcDiscreteAccessoryType,\r\n      IfcDiscreteElement,\r\n      IfcDistributionBoard,\r\n      IfcDistributionBoardType,\r\n      IfcDistributionChamberElement,\r\n      IfcDistributionChamberElementType,\r\n      IfcDistributionCircuit,\r\n      IfcDistributionControlElement,\r\n      IfcDistributionControlElementType,\r\n      IfcDistributionElement,\r\n      IfcDistributionElementType,\r\n      IfcDistributionFlowElement,\r\n      IfcDistributionFlowElementType,\r\n      IfcDistributionPort,\r\n      IfcDistributionSystem,\r\n      IfcDocumentElectronicFormat,\r\n      IfcDocumentInformation,\r\n      IfcDocumentInformationRelationship,\r\n      IfcDocumentReference,\r\n      IfcDoor,\r\n      IfcDoorLiningProperties,\r\n      IfcDoorPanelProperties,\r\n      IfcDoorStandardCase,\r\n      IfcDoorStyle,\r\n      IfcDoorType,\r\n      IfcDraughtingCallout,\r\n      IfcDraughtingCalloutRelationship,\r\n      IfcDraughtingPreDefinedColour,\r\n      IfcDraughtingPreDefinedCurveFont,\r\n      IfcDraughtingPreDefinedTextFont,\r\n      IfcDuctFitting,\r\n      IfcDuctFittingType,\r\n      IfcDuctSegment,\r\n      IfcDuctSegmentType,\r\n      IfcDuctSilencer,\r\n      IfcDuctSilencerType,\r\n      IfcEarthworksCut,\r\n      IfcEarthworksElement,\r\n      IfcEarthworksFill,\r\n      IfcEdge,\r\n      IfcEdgeCurve,\r\n      IfcEdgeFeature,\r\n      IfcEdgeLoop,\r\n      IfcElectricalAppliance,\r\n      IfcElectricalBaseProperties,\r\n      IfcElectricalCircuit,\r\n      IfcElectricalElement,\r\n      IfcElectricalExtendedProperties,\r\n      IfcElectricAppliance,\r\n      IfcElectricApplianceType,\r\n      IfcElectricDistributionBoard,\r\n      IfcElectricDistributionBoardType,\r\n      IfcElectricDistributionPoint,\r\n      IfcElectricFlowStorageDevice,\r\n      IfcElectricFlowStorageDeviceType,\r\n      IfcElectricFlowTreatmentDevice,\r\n      IfcElectricFlowTreatmentDeviceType,\r\n      IfcElectricGenerator,\r\n      IfcElectricGeneratorType,\r\n      IfcElectricHeaterType,\r\n      IfcElectricMotor,\r\n      IfcElectricMotorType,\r\n      IfcElectricTimeControl,\r\n      IfcElectricTimeControlType,\r\n      IfcElement,\r\n      IfcElementarySurface,\r\n      IfcElementAssembly,\r\n      IfcElementAssemblyType,\r\n      IfcElementComponent,\r\n      IfcElementComponentType,\r\n      IfcElementQuantity,\r\n      IfcElementType,\r\n      IfcEllipse,\r\n      IfcEllipseProfileDef,\r\n      IfcEnergyConversionDevice,\r\n      IfcEnergyConversionDeviceType,\r\n      IfcEnergyProperties,\r\n      IfcEngine,\r\n      IfcEngineType,\r\n      IfcEnvironmentalImpactValue,\r\n      IfcEquipmentElement,\r\n      IfcEquipmentStandard,\r\n      IfcEvaporativeCooler,\r\n      IfcEvaporativeCoolerType,\r\n      IfcEvaporator,\r\n      IfcEvaporatorType,\r\n      IfcEvent,\r\n      IfcEventTime,\r\n      IfcEventType,\r\n      IfcExtendedMaterialProperties,\r\n      IfcExtendedProperties,\r\n      IfcExternalInformation,\r\n      IfcExternallyDefinedHatchStyle,\r\n      IfcExternallyDefinedSurfaceStyle,\r\n      IfcExternallyDefinedSymbol,\r\n      IfcExternallyDefinedTextFont,\r\n      IfcExternalReference,\r\n      IfcExternalReferenceRelationship,\r\n      IfcExternalSpatialElement,\r\n      IfcExternalSpatialStructureElement,\r\n      IfcExtrudedAreaSolid,\r\n      IfcExtrudedAreaSolidTapered,\r\n      IfcFace,\r\n      IfcFaceBasedSurfaceModel,\r\n      IfcFaceBound,\r\n      IfcFaceOuterBound,\r\n      IfcFaceSurface,\r\n      IfcFacetedBrep,\r\n      IfcFacetedBrepWithVoids,\r\n      IfcFacility,\r\n      IfcFacilityPart,\r\n      IfcFacilityPartCommon,\r\n      IfcFailureConnectionCondition,\r\n      IfcFan,\r\n      IfcFanType,\r\n      IfcFastener,\r\n      IfcFastenerType,\r\n      IfcFeatureElement,\r\n      IfcFeatureElementAddition,\r\n      IfcFeatureElementSubtraction,\r\n      IfcFillAreaStyle,\r\n      IfcFillAreaStyleHatching,\r\n      IfcFillAreaStyleTiles,\r\n      IfcFillAreaStyleTileSymbolWithStyle,\r\n      IfcFilter,\r\n      IfcFilterType,\r\n      IfcFireSuppressionTerminal,\r\n      IfcFireSuppressionTerminalType,\r\n      IfcFixedReferenceSweptAreaSolid,\r\n      IfcFlowController,\r\n      IfcFlowControllerType,\r\n      IfcFlowFitting,\r\n      IfcFlowFittingType,\r\n      IfcFlowInstrument,\r\n      IfcFlowInstrumentType,\r\n      IfcFlowMeter,\r\n      IfcFlowMeterType,\r\n      IfcFlowMovingDevice,\r\n      IfcFlowMovingDeviceType,\r\n      IfcFlowSegment,\r\n      IfcFlowSegmentType,\r\n      IfcFlowStorageDevice,\r\n      IfcFlowStorageDeviceType,\r\n      IfcFlowTerminal,\r\n      IfcFlowTerminalType,\r\n      IfcFlowTreatmentDevice,\r\n      IfcFlowTreatmentDeviceType,\r\n      IfcFluidFlowProperties,\r\n      IfcFluidMovingDevice,\r\n      IfcFooting,\r\n      IfcFootingType,\r\n      IfcFuelProperties,\r\n      IfcFurnishingElement,\r\n      IfcFurnishingElementType,\r\n      IfcFurniture,\r\n      IfcFurnitureStandard,\r\n      IfcFurnitureType,\r\n      IfcGasTerminalType,\r\n      IfcGeneralMaterialProperties,\r\n      IfcGeneralProfileProperties,\r\n      IfcGeographicElement,\r\n      IfcGeographicElementType,\r\n      IfcGeometricCurveSet,\r\n      IfcGeometricRepresentationContext,\r\n      IfcGeometricRepresentationItem,\r\n      IfcGeometricRepresentationSubContext,\r\n      IfcGeometricSet,\r\n      IfcGeomodel,\r\n      IfcGeoslice,\r\n      IfcGeotechnicalAssembly,\r\n      IfcGeotechnicalElement,\r\n      IfcGeotechnicalStratum,\r\n      IfcGradientCurve,\r\n      IfcGrid,\r\n      IfcGridAxis,\r\n      IfcGridPlacement,\r\n      IfcGroup,\r\n      IfcHalfSpaceSolid,\r\n      IfcHeatExchanger,\r\n      IfcHeatExchangerType,\r\n      IfcHeatTransferDevice,\r\n      IfcHumidifier,\r\n      IfcHumidifierType,\r\n      IfcHydronicHeater,\r\n      IfcHygroscopicMaterialProperties,\r\n      IfcImageTexture,\r\n      IfcImpactProtectionDevice,\r\n      IfcImpactProtectionDeviceType,\r\n      IfcIndexedColourMap,\r\n      IfcIndexedPolyCurve,\r\n      IfcIndexedPolygonalFace,\r\n      IfcIndexedPolygonalFaceWithVoids,\r\n      IfcIndexedPolygonalTextureMap,\r\n      IfcIndexedTextureMap,\r\n      IfcIndexedTriangleTextureMap,\r\n      IfcInterceptor,\r\n      IfcInterceptorType,\r\n      IfcIntersectionCurve,\r\n      IfcInventory,\r\n      IfcIrregularTimeSeries,\r\n      IfcIrregularTimeSeriesValue,\r\n      IfcIShapeProfileDef,\r\n      IfcJunctionBox,\r\n      IfcJunctionBoxType,\r\n      IfcKerb,\r\n      IfcKerbType,\r\n      IfcLaborResource,\r\n      IfcLaborResourceType,\r\n      IfcLagTime,\r\n      IfcLamp,\r\n      IfcLampType,\r\n      IfcLibraryInformation,\r\n      IfcLibraryReference,\r\n      IfcLightDistributionData,\r\n      IfcLightFixture,\r\n      IfcLightFixtureType,\r\n      IfcLightIntensityDistribution,\r\n      IfcLightSource,\r\n      IfcLightSourceAmbient,\r\n      IfcLightSourceDirectional,\r\n      IfcLightSourceGoniometric,\r\n      IfcLightSourcePositional,\r\n      IfcLightSourceSpot,\r\n      IfcLine,\r\n      IfcLinearDimension,\r\n      IfcLinearElement,\r\n      IfcLinearPlacement,\r\n      IfcLinearPositioningElement,\r\n      IfcLiquidTerminal,\r\n      IfcLiquidTerminalType,\r\n      IfcLocalPlacement,\r\n      IfcLocalTime,\r\n      IfcLoop,\r\n      IfcLShapeProfileDef,\r\n      IfcMaintenanceRecord,\r\n      IfcMaintenanceWorkOrder,\r\n      IfcManifoldSolidBrep,\r\n      IfcManufacturerInformation,\r\n      IfcMapConversion,\r\n      IfcMappedItem,\r\n      IfcMarineFacility,\r\n      IfcMarinePart,\r\n      IfcMaterial,\r\n      IfcMaterialClassificationRelationship,\r\n      IfcMaterialConstituent,\r\n      IfcMaterialConstituentSet,\r\n      IfcMaterialDefinition,\r\n      IfcMaterialDefinitionRepresentation,\r\n      IfcMaterialLayer,\r\n      IfcMaterialLayerSet,\r\n      IfcMaterialLayerSetUsage,\r\n      IfcMaterialLayerWithOffsets,\r\n      IfcMaterialList,\r\n      IfcMaterialProfile,\r\n      IfcMaterialProfileSet,\r\n      IfcMaterialProfileSetUsage,\r\n      IfcMaterialProfileSetUsageTapering,\r\n      IfcMaterialProfileWithOffsets,\r\n      IfcMaterialProperties,\r\n      IfcMaterialRelationship,\r\n      IfcMaterialUsageDefinition,\r\n      IfcMeasureWithUnit,\r\n      IfcMechanicalConcreteMaterialProperties,\r\n      IfcMechanicalFastener,\r\n      IfcMechanicalFastenerType,\r\n      IfcMechanicalMaterialProperties,\r\n      IfcMechanicalSteelMaterialProperties,\r\n      IfcMedicalDevice,\r\n      IfcMedicalDeviceType,\r\n      IfcMember,\r\n      IfcMemberStandardCase,\r\n      IfcMemberType,\r\n      IfcMetric,\r\n      IfcMetricBenchmark,\r\n      IfcMetricValue,\r\n      IfcMirroredProfileDef,\r\n      IfcMobileTelecommunicationsAppliance,\r\n      IfcMobileTelecommunicationsApplianceType,\r\n      IfcMonetaryUnit,\r\n      IfcMooringDevice,\r\n      IfcMooringDeviceType,\r\n      IfcMotorConnection,\r\n      IfcMotorConnectionType,\r\n      IfcMove,\r\n      IfcNamedUnit,\r\n      IfcNavigationElement,\r\n      IfcNavigationElementType,\r\n      IfcObject,\r\n      IfcObjectDefinition,\r\n      IfcObjective,\r\n      IfcObjectPlacement,\r\n      IfcOccupant,\r\n      IfcOffsetCurve,\r\n      IfcOffsetCurve2D,\r\n      IfcOffsetCurve3D,\r\n      IfcOffsetCurveByDistances,\r\n      IfcOneDirectionRepeatFactor,\r\n      IfcOpenCrossProfileDef,\r\n      IfcOpeningElement,\r\n      IfcOpeningStandardCase,\r\n      IfcOpenShell,\r\n      IfcOpticalMaterialProperties,\r\n      IfcOrderAction,\r\n      IfcOrganization,\r\n      IfcOrganizationRelationship,\r\n      IfcOrientedEdge,\r\n      IfcOuterBoundaryCurve,\r\n      IfcOutlet,\r\n      IfcOutletType,\r\n      IfcOwnerHistory,\r\n      IfcParameterizedProfileDef,\r\n      IfcPath,\r\n      IfcPavement,\r\n      IfcPavementType,\r\n      IfcPcurve,\r\n      IfcPerformanceHistory,\r\n      IfcPermeableCoveringProperties,\r\n      IfcPermit,\r\n      IfcPerson,\r\n      IfcPersonAndOrganization,\r\n      IfcPhysicalComplexQuantity,\r\n      IfcPhysicalQuantity,\r\n      IfcPhysicalSimpleQuantity,\r\n      IfcPile,\r\n      IfcPileType,\r\n      IfcPipeFitting,\r\n      IfcPipeFittingType,\r\n      IfcPipeSegment,\r\n      IfcPipeSegmentType,\r\n      IfcPixelTexture,\r\n      IfcPlacement,\r\n      IfcPlanarBox,\r\n      IfcPlanarExtent,\r\n      IfcPlane,\r\n      IfcPlate,\r\n      IfcPlateStandardCase,\r\n      IfcPlateType,\r\n      IfcPoint,\r\n      IfcPointByDistanceExpression,\r\n      IfcPointLightSource,\r\n      IfcPointOnCurve,\r\n      IfcPointOnSurface,\r\n      IfcPolygonalBoundedHalfSpace,\r\n      IfcPolygonalFaceSet,\r\n      IfcPolyline,\r\n      IfcPolyLoop,\r\n      IfcPolynomialCurve,\r\n      IfcPort,\r\n      IfcPositioningElement,\r\n      IfcPostalAddress,\r\n      IfcPreDefinedColour,\r\n      IfcPreDefinedCurveFont,\r\n      IfcPreDefinedDimensionSymbol,\r\n      IfcPreDefinedItem,\r\n      IfcPreDefinedPointMarkerSymbol,\r\n      IfcPreDefinedProperties,\r\n      IfcPreDefinedPropertySet,\r\n      IfcPreDefinedSymbol,\r\n      IfcPreDefinedTerminatorSymbol,\r\n      IfcPreDefinedTextFont,\r\n      IfcPresentationItem,\r\n      IfcPresentationLayerAssignment,\r\n      IfcPresentationLayerWithStyle,\r\n      IfcPresentationLightSource,\r\n      IfcPresentationStyle,\r\n      IfcPresentationStyleAssignment,\r\n      IfcProcedure,\r\n      IfcProcedureType,\r\n      IfcProcess,\r\n      IfcProduct,\r\n      IfcProductDefinitionShape,\r\n      IfcProductRepresentation,\r\n      IfcProductsOfCombustionProperties,\r\n      IfcProfileDef,\r\n      IfcProfileProperties,\r\n      IfcProject,\r\n      IfcProjectedCRS,\r\n      IfcProjectionCurve,\r\n      IfcProjectionElement,\r\n      IfcProjectLibrary,\r\n      IfcProjectOrder,\r\n      IfcProjectOrderRecord,\r\n      IfcProperty,\r\n      IfcPropertyAbstraction,\r\n      IfcPropertyBoundedValue,\r\n      IfcPropertyConstraintRelationship,\r\n      IfcPropertyDefinition,\r\n      IfcPropertyDependencyRelationship,\r\n      IfcPropertyEnumeratedValue,\r\n      IfcPropertyEnumeration,\r\n      IfcPropertyListValue,\r\n      IfcPropertyReferenceValue,\r\n      IfcPropertySet,\r\n      IfcPropertySetDefinition,\r\n      IfcPropertySetTemplate,\r\n      IfcPropertySingleValue,\r\n      IfcPropertyTableValue,\r\n      IfcPropertyTemplate,\r\n      IfcPropertyTemplateDefinition,\r\n      IfcProtectiveDevice,\r\n      IfcProtectiveDeviceTrippingUnit,\r\n      IfcProtectiveDeviceTrippingUnitType,\r\n      IfcProtectiveDeviceType,\r\n      IfcProxy,\r\n      IfcPump,\r\n      IfcPumpType,\r\n      IfcPurchaseOrder,\r\n      IfcQuantityArea,\r\n      IfcQuantityCount,\r\n      IfcQuantityLength,\r\n      IfcQuantityNumber,\r\n      IfcQuantitySet,\r\n      IfcQuantityTime,\r\n      IfcQuantityVolume,\r\n      IfcQuantityWeight,\r\n      IfcRadiusDimension,\r\n      IfcRail,\r\n      IfcRailing,\r\n      IfcRailingType,\r\n      IfcRailType,\r\n      IfcRailway,\r\n      IfcRailwayPart,\r\n      IfcRamp,\r\n      IfcRampFlight,\r\n      IfcRampFlightType,\r\n      IfcRampType,\r\n      IfcRationalBezierCurve,\r\n      IfcRationalBSplineCurveWithKnots,\r\n      IfcRationalBSplineSurfaceWithKnots,\r\n      IfcRectangleHollowProfileDef,\r\n      IfcRectangleProfileDef,\r\n      IfcRectangularPyramid,\r\n      IfcRectangularTrimmedSurface,\r\n      IfcRecurrencePattern,\r\n      IfcReference,\r\n      IfcReferenceEdge,\r\n      IfcReferenceFace,\r\n      IfcReferenceGeometry,\r\n      IfcReferencesCostDocument,\r\n      IfcReferencesValueDocument,\r\n      IfcReferenceVertex,\r\n      IfcReferent,\r\n      IfcRegularTimeSeries,\r\n      IfcReinforcedSoil,\r\n      IfcReinforcementBarProperties,\r\n      IfcReinforcementDefinitionProperties,\r\n      IfcReinforcingBar,\r\n      IfcReinforcingBarType,\r\n      IfcReinforcingElement,\r\n      IfcReinforcingElementType,\r\n      IfcReinforcingMesh,\r\n      IfcReinforcingMeshType,\r\n      IfcRelAdheresToElement,\r\n      IfcRelAggregates,\r\n      IfcRelAggregatesResources,\r\n      IfcRelAssigns,\r\n      IfcRelAssignsFMStandard,\r\n      IfcRelAssignsTasks,\r\n      IfcRelAssignsToActor,\r\n      IfcRelAssignsToControl,\r\n      IfcRelAssignsToGroup,\r\n      IfcRelAssignsToGroupByFactor,\r\n      IfcRelAssignsToProcess,\r\n      IfcRelAssignsToProduct,\r\n      IfcRelAssignsToProjectOrder,\r\n      IfcRelAssignsToResource,\r\n      IfcRelAssociates,\r\n      IfcRelAssociatesAppliedValue,\r\n      IfcRelAssociatesApproval,\r\n      IfcRelAssociatesClassification,\r\n      IfcRelAssociatesConstraint,\r\n      IfcRelAssociatesDocument,\r\n      IfcRelAssociatesLibrary,\r\n      IfcRelAssociatesMaterial,\r\n      IfcRelAssociatesProfileDef,\r\n      IfcRelAssociatesProfileProperties,\r\n      IfcRelationship,\r\n      IfcRelaxation,\r\n      IfcRelConnects,\r\n      IfcRelConnectsElements,\r\n      IfcRelConnectsPathElements,\r\n      IfcRelConnectsPorts,\r\n      IfcRelConnectsPortToElement,\r\n      IfcRelConnectsStructuralActivity,\r\n      IfcRelConnectsStructuralElement,\r\n      IfcRelConnectsStructuralMember,\r\n      IfcRelConnectsWithEccentricity,\r\n      IfcRelConnectsWithRealizingElements,\r\n      IfcRelContainedInSpatialStructure,\r\n      IfcRelCostsObjects,\r\n      IfcRelCoversBldgElements,\r\n      IfcRelCoversSpaces,\r\n      IfcRelDeclares,\r\n      IfcRelDecomposes,\r\n      IfcRelDefines,\r\n      IfcRelDefinesByObject,\r\n      IfcRelDefinesByProperties,\r\n      IfcRelDefinesByTemplate,\r\n      IfcRelDefinesByType,\r\n      IfcRelFillsElement,\r\n      IfcRelFlowControlElements,\r\n      IfcRelInteractionRequirements,\r\n      IfcRelInterferesElements,\r\n      IfcRelMaintenanceEvent,\r\n      IfcRelNests,\r\n      IfcRelOccupiesSpaces,\r\n      IfcRelOverridesProperties,\r\n      IfcRelPositions,\r\n      IfcRelProjectsElement,\r\n      IfcRelReferencedInSpatialStructure,\r\n      IfcRelSchedulesCostItems,\r\n      IfcRelSequence,\r\n      IfcRelServicesBuildings,\r\n      IfcRelSpaceBoundary,\r\n      IfcRelSpaceBoundary1stLevel,\r\n      IfcRelSpaceBoundary2ndLevel,\r\n      IfcRelUsesResource,\r\n      IfcRelVoidsElement,\r\n      IfcReparametrisedCompositeCurveSegment,\r\n      IfcRepresentation,\r\n      IfcRepresentationContext,\r\n      IfcRepresentationItem,\r\n      IfcRepresentationMap,\r\n      IfcResource,\r\n      IfcResourceApprovalRelationship,\r\n      IfcResourceConstraintRelationship,\r\n      IfcResourceLevelRelationship,\r\n      IfcResourceTime,\r\n      IfcRevolvedAreaSolid,\r\n      IfcRevolvedAreaSolidTapered,\r\n      IfcRibPlateProfileProperties,\r\n      IfcRightCircularCone,\r\n      IfcRightCircularCylinder,\r\n      IfcRoad,\r\n      IfcRoadPart,\r\n      IfcRoof,\r\n      IfcRoofType,\r\n      IfcRoot,\r\n      IfcRoundedEdgeFeature,\r\n      IfcRoundedRectangleProfileDef,\r\n      IfcSanitaryTerminal,\r\n      IfcSanitaryTerminalType,\r\n      IfcScheduleTimeControl,\r\n      IfcSchedulingTime,\r\n      IfcSeamCurve,\r\n      IfcSecondOrderPolynomialSpiral,\r\n      IfcSectionedSolid,\r\n      IfcSectionedSolidHorizontal,\r\n      IfcSectionedSpine,\r\n      IfcSectionedSurface,\r\n      IfcSectionProperties,\r\n      IfcSectionReinforcementProperties,\r\n      IfcSegment,\r\n      IfcSegmentedReferenceCurve,\r\n      IfcSensor,\r\n      IfcSensorType,\r\n      IfcServiceLife,\r\n      IfcServiceLifeFactor,\r\n      IfcSeventhOrderPolynomialSpiral,\r\n      IfcShadingDevice,\r\n      IfcShadingDeviceType,\r\n      IfcShapeAspect,\r\n      IfcShapeModel,\r\n      IfcShapeRepresentation,\r\n      IfcShellBasedSurfaceModel,\r\n      IfcSign,\r\n      IfcSignal,\r\n      IfcSignalType,\r\n      IfcSignType,\r\n      IfcSimpleProperty,\r\n      IfcSimplePropertyTemplate,\r\n      IfcSineSpiral,\r\n      IfcSite,\r\n      IfcSIUnit,\r\n      IfcSlab,\r\n      IfcSlabElementedCase,\r\n      IfcSlabStandardCase,\r\n      IfcSlabType,\r\n      IfcSlippageConnectionCondition,\r\n      IfcSolarDevice,\r\n      IfcSolarDeviceType,\r\n      IfcSolidModel,\r\n      IfcSoundProperties,\r\n      IfcSoundValue,\r\n      IfcSpace,\r\n      IfcSpaceHeater,\r\n      IfcSpaceHeaterType,\r\n      IfcSpaceProgram,\r\n      IfcSpaceProgramGroup,\r\n      IfcSpaceThermalLoad,\r\n      IfcSpaceThermalLoadProperties,\r\n      IfcSpaceType,\r\n      IfcSpatialElement,\r\n      IfcSpatialElementType,\r\n      IfcSpatialStructureElement,\r\n      IfcSpatialStructureElementType,\r\n      IfcSpatialZone,\r\n      IfcSpatialZoneType,\r\n      IfcSphere,\r\n      IfcSphericalSurface,\r\n      IfcSpiral,\r\n      IfcSpotLightSource,\r\n      IfcStackTerminal,\r\n      IfcStackTerminalType,\r\n      IfcStair,\r\n      IfcStairFlight,\r\n      IfcStairFlightType,\r\n      IfcStairType,\r\n      IfcStorageDevice,\r\n      IfcStructuralAction,\r\n      IfcStructuralActivity,\r\n      IfcStructuralAnalysisModel,\r\n      IfcStructuralConnection,\r\n      IfcStructuralConnectionCondition,\r\n      IfcStructuralCurveAction,\r\n      IfcStructuralCurveConnection,\r\n      IfcStructuralCurveMember,\r\n      IfcStructuralCurveMemberVarying,\r\n      IfcStructuralCurveReaction,\r\n      IfcStructuralItem,\r\n      IfcStructuralLinearAction,\r\n      IfcStructuralLinearActionVarying,\r\n      IfcStructuralLoad,\r\n      IfcStructuralLoadCase,\r\n      IfcStructuralLoadConfiguration,\r\n      IfcStructuralLoadGroup,\r\n      IfcStructuralLoadLinearForce,\r\n      IfcStructuralLoadOrResult,\r\n      IfcStructuralLoadPlanarForce,\r\n      IfcStructuralLoadSingleDisplacement,\r\n      IfcStructuralLoadSingleDisplacementDistortion,\r\n      IfcStructuralLoadSingleForce,\r\n      IfcStructuralLoadSingleForceWarping,\r\n      IfcStructuralLoadStatic,\r\n      IfcStructuralLoadTemperature,\r\n      IfcStructuralMember,\r\n      IfcStructuralPlanarAction,\r\n      IfcStructuralPlanarActionVarying,\r\n      IfcStructuralPointAction,\r\n      IfcStructuralPointConnection,\r\n      IfcStructuralPointReaction,\r\n      IfcStructuralProfileProperties,\r\n      IfcStructuralReaction,\r\n      IfcStructuralResultGroup,\r\n      IfcStructuralSteelProfileProperties,\r\n      IfcStructuralSurfaceAction,\r\n      IfcStructuralSurfaceConnection,\r\n      IfcStructuralSurfaceMember,\r\n      IfcStructuralSurfaceMemberVarying,\r\n      IfcStructuralSurfaceReaction,\r\n      IfcStructuredDimensionCallout,\r\n      IfcStyledItem,\r\n      IfcStyledRepresentation,\r\n      IfcStyleModel,\r\n      IfcSubContractResource,\r\n      IfcSubContractResourceType,\r\n      IfcSubedge,\r\n      IfcSurface,\r\n      IfcSurfaceCurve,\r\n      IfcSurfaceCurveSweptAreaSolid,\r\n      IfcSurfaceExtendedProperties,\r\n      IfcSurfaceFeature,\r\n      IfcSurfaceOfLinearExtrusion,\r\n      IfcSurfaceOfRevolution,\r\n      IfcSurfaceReinforcementArea,\r\n      IfcSurfaceRenderingProperties,\r\n      IfcSurfaceShadingProperties,\r\n      IfcSurfaceStyle,\r\n      IfcSurfaceStyleLighting,\r\n      IfcSurfaceStyleProperties,\r\n      IfcSurfaceStyleRefraction,\r\n      IfcSurfaceStyleRendering,\r\n      IfcSurfaceStyleShading,\r\n      IfcSurfaceStyleUsage,\r\n      IfcSurfaceStyleWithTextures,\r\n      IfcSurfaceTexture,\r\n      IfcSweptAreaSolid,\r\n      IfcSweptDiskSolid,\r\n      IfcSweptDiskSolidPolygonal,\r\n      IfcSweptSurface,\r\n      IfcSwitchingDevice,\r\n      IfcSwitchingDeviceType,\r\n      IfcSymbolStyle,\r\n      IfcSystem,\r\n      IfcSystemFurnitureElement,\r\n      IfcSystemFurnitureElementType,\r\n      IfcTable,\r\n      IfcTableColumn,\r\n      IfcTableRow,\r\n      IfcTank,\r\n      IfcTankType,\r\n      IfcTask,\r\n      IfcTaskTime,\r\n      IfcTaskTimeRecurring,\r\n      IfcTaskType,\r\n      IfcTelecomAddress,\r\n      IfcTendon,\r\n      IfcTendonAnchor,\r\n      IfcTendonAnchorType,\r\n      IfcTendonConduit,\r\n      IfcTendonConduitType,\r\n      IfcTendonType,\r\n      IfcTerminatorSymbol,\r\n      IfcTessellatedFaceSet,\r\n      IfcTessellatedItem,\r\n      IfcTextLiteral,\r\n      IfcTextLiteralWithExtent,\r\n      IfcTextStyle,\r\n      IfcTextStyleFontModel,\r\n      IfcTextStyleForDefinedFont,\r\n      IfcTextStyleTextModel,\r\n      IfcTextStyleWithBoxCharacteristics,\r\n      IfcTextureCoordinate,\r\n      IfcTextureCoordinateGenerator,\r\n      IfcTextureCoordinateIndices,\r\n      IfcTextureCoordinateIndicesWithVoids,\r\n      IfcTextureMap,\r\n      IfcTextureVertex,\r\n      IfcTextureVertexList,\r\n      IfcThermalMaterialProperties,\r\n      IfcThirdOrderPolynomialSpiral,\r\n      IfcTimePeriod,\r\n      IfcTimeSeries,\r\n      IfcTimeSeriesReferenceRelationship,\r\n      IfcTimeSeriesSchedule,\r\n      IfcTimeSeriesValue,\r\n      IfcTopologicalRepresentationItem,\r\n      IfcTopologyRepresentation,\r\n      IfcToroidalSurface,\r\n      IfcTrackElement,\r\n      IfcTrackElementType,\r\n      IfcTransformer,\r\n      IfcTransformerType,\r\n      IfcTransportationDevice,\r\n      IfcTransportationDeviceType,\r\n      IfcTransportElement,\r\n      IfcTransportElementType,\r\n      IfcTrapeziumProfileDef,\r\n      IfcTreatmentDevice,\r\n      IfcTriangulatedFaceSet,\r\n      IfcTriangulatedIrregularNetwork,\r\n      IfcTrimmedCurve,\r\n      IfcTShapeProfileDef,\r\n      IfcTubeBundle,\r\n      IfcTubeBundleType,\r\n      IfcTwoDirectionRepeatFactor,\r\n      IfcTypeObject,\r\n      IfcTypeProcess,\r\n      IfcTypeProduct,\r\n      IfcTypeResource,\r\n      IfcUnitaryControlElement,\r\n      IfcUnitaryControlElementType,\r\n      IfcUnitaryEquipment,\r\n      IfcUnitaryEquipmentType,\r\n      IfcUnitAssignment,\r\n      IfcUnitHeater,\r\n      IfcUShapeProfileDef,\r\n      IfcValve,\r\n      IfcValveType,\r\n      IfcVector,\r\n      IfcVehicle,\r\n      IfcVehicleType,\r\n      IfcVertex,\r\n      IfcVertexBasedTextureMap,\r\n      IfcVertexLoop,\r\n      IfcVertexPoint,\r\n      IfcVibrationDamper,\r\n      IfcVibrationDamperType,\r\n      IfcVibrationIsolator,\r\n      IfcVibrationIsolatorType,\r\n      IfcVirtualElement,\r\n      IfcVirtualGridIntersection,\r\n      IfcVoidingFeature,\r\n      IfcWall,\r\n      IfcWallElementedCase,\r\n      IfcWallStandardCase,\r\n      IfcWallType,\r\n      IfcWasteTerminal,\r\n      IfcWasteTerminalType,\r\n      IfcWaterProperties,\r\n      IfcWindow,\r\n      IfcWindowLiningProperties,\r\n      IfcWindowPanelProperties,\r\n      IfcWindowStandardCase,\r\n      IfcWindowStyle,\r\n      IfcWindowType,\r\n      IfcWorkCalendar,\r\n      IfcWorkControl,\r\n      IfcWorkOrder,\r\n      IfcWorkPlan,\r\n      IfcWorkSchedule,\r\n      IfcWorkTime,\r\n      IfcZone,\r\n      IfcZShapeProfileDef,\r\n      UnKnown,\r\n      DontExport\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Enums/IFCKnownMVDAndER.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Revit.IFC.Common.Enums\n{\n   /// <summary>\n   /// Enumeration for known Exchange Requirements\n   /// </summary>\n   public enum KnownERNames\n   {\n      Architecture,\n      BuildingService,\n      Structural,\n      NotDefined\n   }\n\n   public enum KnownFacilityTypes\n   {\n      NotDefined,\n      Building,\n      Bridge,\n      Railway,\n      Road,\n      MarineFacility\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Common/Extension/IFCAddress.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.ExtensibleStorage;\r\n\r\n\r\nnamespace Revit.IFC.Common.Extensions\r\n{\r\n   public class IFCAddress\r\n   {\r\n      private Schema m_schema = null;\r\n      private static Guid s_schemaId = new Guid(\"79EE6AD8-8A45-49B1-AB13-DDDB128A9EFE\");\r\n      private const String s_addressMapField = \"IFCAddressMapField\";  // Don't change this name, it affects the schema.\r\n\r\n      private const String s_addressPurpose = \"Purpose\";\r\n      private const String s_addressDescription = \"Description\";\r\n      private const String s_addressUserDefinedPurpose = \"UserDefinedPurpose\";\r\n      private const String s_addressInternalLocation = \"InternalLocation\";\r\n      private const String s_addressAddressLine1 = \"AddressLine1\";\r\n      private const String s_addressAddressLine2 = \"AddressLine2\";\r\n      private const String s_addressPOBox = \"PostalBox\";\r\n      private const String s_addressTownOrCity = \"Town\";\r\n      private const String s_addressRegionOrState = \"Region\";\r\n      private const String s_addressPostalCode = \"PostalCode\";\r\n      private const String s_addressCountry = \"Country\";\r\n      private const String s_saveAddrToBldg = \"SaveToIfcBuilding\";\r\n      private const String s_saveAddrToSite = \"SaveToIfcSite\";\r\n\r\n      /// <summary>\r\n      /// IFC address initialization\r\n      /// </summary>\r\n      public IFCAddress()\r\n      {\r\n         if (m_schema == null)\r\n         {\r\n            m_schema = Schema.Lookup(s_schemaId);\r\n         }\r\n         if (m_schema == null)\r\n         {\r\n            SchemaBuilder addressBuilder = new SchemaBuilder(s_schemaId);\r\n            addressBuilder.SetSchemaName(\"IFCAddress\");\r\n            addressBuilder.AddMapField(s_addressMapField, typeof(String), typeof(String));\r\n            m_schema = addressBuilder.Finish();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get saved addresses in Storage. Currently only one address is supported \r\n      /// </summary>\r\n      /// <param name=\"document\">The document storing the saved address.</param>\r\n      /// <param name=\"schema\">The schema for address.</param>\r\n      /// <returns>List of stored addresses</returns>\r\n      private IList<DataStorage> GetAddressInStorage(Document document, Schema schema)\r\n      {\r\n         FilteredElementCollector collector = new FilteredElementCollector(document);\r\n         collector.OfClass(typeof(DataStorage));\r\n         Func<DataStorage, bool> hasTargetData = ds => (ds.GetEntity(schema) != null && ds.GetEntity(schema).IsValid());\r\n\r\n         return collector.Cast<DataStorage>().Where<DataStorage>(hasTargetData).ToList<DataStorage>();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Update the address saved into the extensible storage using values from the UI \r\n      /// </summary>\r\n      /// <param name=\"document\">The document storing the saved address.</param>\r\n      /// <param name=\"addressItem\">address information from the UI to be saved into extensible storage</param>\r\n      public void UpdateAddress(Document document, IFCAddressItem addressItem)\r\n      {\r\n         if (m_schema == null)\r\n         {\r\n            m_schema = Schema.Lookup(s_schemaId);\r\n         }\r\n\r\n         if (m_schema != null)\r\n         {\r\n            Transaction transaction = new Transaction(document, \"Update saved IFC Address\");\r\n            transaction.Start();\r\n\r\n            IList<DataStorage> oldSavedAddress = GetAddressInStorage(document, m_schema);\r\n            if (oldSavedAddress.Count > 0)\r\n            {\r\n               List<ElementId> dataStorageToDelete = new List<ElementId>();\r\n               foreach (DataStorage dataStorage in oldSavedAddress)\r\n               {\r\n                  dataStorageToDelete.Add(dataStorage.Id);\r\n               }\r\n               document.Delete(dataStorageToDelete);\r\n            }\r\n         \r\n            DataStorage addressStorage = DataStorage.Create(document);\r\n\r\n            Entity mapEntity = new Entity(m_schema);\r\n            IDictionary<string, string> mapData = new Dictionary<string, string>();\r\n            if (addressItem.Purpose != null) mapData.Add(s_addressPurpose, addressItem.Purpose.ToString());\r\n            if (addressItem.Description != null) mapData.Add(s_addressDescription, addressItem.Description.ToString());\r\n            if (addressItem.UserDefinedPurpose != null) mapData.Add(s_addressUserDefinedPurpose, addressItem.UserDefinedPurpose.ToString());\r\n            if (addressItem.InternalLocation != null) mapData.Add(s_addressInternalLocation, addressItem.InternalLocation.ToString());\r\n            if (addressItem.AddressLine1 != null) mapData.Add(s_addressAddressLine1, addressItem.AddressLine1.ToString());\r\n            if (addressItem.AddressLine2 != null) mapData.Add(s_addressAddressLine2, addressItem.AddressLine2.ToString());\r\n            if (addressItem.POBox != null) mapData.Add(s_addressPOBox, addressItem.POBox.ToString());\r\n            if (addressItem.TownOrCity != null) mapData.Add(s_addressTownOrCity, addressItem.TownOrCity.ToString());\r\n            if (addressItem.RegionOrState != null) mapData.Add(s_addressRegionOrState, addressItem.RegionOrState.ToString());\r\n            if (addressItem.PostalCode != null) mapData.Add(s_addressPostalCode, addressItem.PostalCode.ToString());\r\n            if (addressItem.Country != null) mapData.Add(s_addressCountry, addressItem.Country.ToString());\r\n            if (addressItem.AssignAddressToBuilding) mapData.Add(s_saveAddrToBldg, \"Y\");\r\n            if (addressItem.AssignAddressToSite) mapData.Add(s_saveAddrToSite, \"Y\");\r\n\r\n            mapEntity.Set<IDictionary<string, String>>(s_addressMapField, mapData);\r\n            addressStorage.SetEntity(mapEntity);\r\n\r\n            transaction.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get saved IFC address from the extensible storage.\r\n      /// </summary>\r\n      /// <param name=\"document\">The document storing the saved address.</param>\r\n      /// <param name=\"address\">saved address information from the extensible storage.</param>\r\n      /// <returns>returns status whether there is any saved address in the extensible storage.</returns>\r\n      public bool GetSavedAddress(Document document, out IFCAddressItem address)\r\n      {\r\n         IFCAddressItem addressItemSaved = new IFCAddressItem();\r\n\r\n         if (m_schema == null)\r\n         {\r\n            m_schema = Schema.Lookup(s_schemaId);\r\n         }\r\n         if (m_schema != null)\r\n         {\r\n            IList<DataStorage> addressStorage = GetAddressInStorage(document, m_schema);\r\n\r\n            if (addressStorage.Count > 0)\r\n            {\r\n               // Expected only one address in the storage\r\n               Entity savedAddress = addressStorage[0].GetEntity(m_schema);\r\n               IDictionary<string, string> savedAddressMap = savedAddress.Get<IDictionary<string, string>>(s_addressMapField);\r\n               if (savedAddressMap.ContainsKey(s_addressPurpose))\r\n                  addressItemSaved.Purpose = savedAddressMap[s_addressPurpose];\r\n               if (savedAddressMap.ContainsKey(s_addressDescription))\r\n                  addressItemSaved.Description = savedAddressMap[s_addressDescription];\r\n               if (savedAddressMap.ContainsKey(s_addressUserDefinedPurpose))\r\n                  addressItemSaved.UserDefinedPurpose = savedAddressMap[s_addressUserDefinedPurpose];\r\n               if (savedAddressMap.ContainsKey(s_addressInternalLocation))\r\n                  addressItemSaved.InternalLocation = savedAddressMap[s_addressInternalLocation];\r\n               if (savedAddressMap.ContainsKey(s_addressAddressLine1))\r\n                  addressItemSaved.AddressLine1 = savedAddressMap[s_addressAddressLine1];\r\n               if (savedAddressMap.ContainsKey(s_addressAddressLine2))\r\n                  addressItemSaved.AddressLine2 = savedAddressMap[s_addressAddressLine2];\r\n               if (savedAddressMap.ContainsKey(s_addressPOBox))\r\n                  addressItemSaved.POBox = savedAddressMap[s_addressPOBox];\r\n               if (savedAddressMap.ContainsKey(s_addressTownOrCity))\r\n                  addressItemSaved.TownOrCity = savedAddressMap[s_addressTownOrCity];\r\n               if (savedAddressMap.ContainsKey(s_addressRegionOrState))\r\n                  addressItemSaved.RegionOrState = savedAddressMap[s_addressRegionOrState];\r\n               if (savedAddressMap.ContainsKey(s_addressPostalCode))\r\n                  addressItemSaved.PostalCode = savedAddressMap[s_addressPostalCode];\r\n               if (savedAddressMap.ContainsKey(s_addressCountry))\r\n                  addressItemSaved.Country = savedAddressMap[s_addressCountry];\r\n               if (savedAddressMap.ContainsKey(s_saveAddrToBldg))\r\n                  addressItemSaved.AssignAddressToBuilding = savedAddressMap[s_saveAddrToBldg].Equals(\"Y\");\r\n               if (savedAddressMap.ContainsKey(s_saveAddrToSite))\r\n                  addressItemSaved.AssignAddressToSite = savedAddressMap[s_saveAddrToSite].Equals(\"Y\");\r\n               address = addressItemSaved;\r\n               return true;\r\n            }\r\n         }\r\n\r\n         address = addressItemSaved;\r\n         return false;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Extension/IFCAddressItem.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.ComponentModel;\r\nusing Newtonsoft.Json;\r\n\r\nnamespace Revit.IFC.Common.Extensions\r\n{\r\n\r\n   public class IFCAddressItem : INotifyPropertyChanged\r\n   {\r\n      public event PropertyChangedEventHandler PropertyChanged;\r\n\r\n      /// <summary>\r\n      /// The purpose of the address.\r\n      /// </summary>\r\n      private string m_purpose = null;\r\n      [JsonIgnore]\r\n      public string Purpose\r\n      {\r\n         get { return m_purpose; }\r\n         set\r\n         {\r\n            m_purpose = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"PurposeComboBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The description of the address.\r\n      /// </summary>\r\n      private string m_description = null;\r\n      [JsonIgnore]\r\n      public string Description\r\n      {\r\n         get { return m_description; }\r\n         set\r\n         {\r\n            m_description = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"DescriptionTextBox\");\r\n         }\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// The user defined purpose of the address.\r\n      /// </summary>\r\n      private string m_userDefinedPurpose = null;\r\n      [JsonIgnore]\r\n      public string UserDefinedPurpose\r\n      {\r\n         get { return m_userDefinedPurpose; }\r\n         set\r\n         {\r\n            m_userDefinedPurpose = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"UserDefinedPurposeTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The internal location of the address.\r\n      /// </summary>\r\n      private string m_internalLocation = null;\r\n      [JsonIgnore]\r\n      public string InternalLocation\r\n      {\r\n         get { return m_internalLocation; }\r\n         set\r\n         {\r\n            m_internalLocation = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"InternalLocationTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// First line for the address.\r\n      /// </summary>\r\n      private string m_addressLine1 = string.Empty;\r\n      [JsonIgnore]\r\n      public string AddressLine1\r\n      {\r\n         get { return m_addressLine1; }\r\n         set\r\n         {\r\n            m_addressLine1 = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"AddressLine1TextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Second line for the address. We limit to just 2 line addresses typically done in many applications.\r\n      /// </summary>\r\n      private string m_addressLine2 = string.Empty;\r\n      [JsonIgnore]\r\n      public string AddressLine2\r\n      {\r\n         get { return m_addressLine2; }\r\n         set\r\n         {\r\n            m_addressLine2 = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"AddressLines2TextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// PO Box address\r\n      /// </summary>\r\n      private string m_pOBox = null;\r\n      [JsonIgnore]\r\n      public string POBox\r\n      {\r\n         get { return m_pOBox; }\r\n         set\r\n         {\r\n            m_pOBox = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"POBoxTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The city of the address.\r\n      /// </summary>\r\n      private string m_townOrCity = null;\r\n      [JsonIgnore]\r\n      public string TownOrCity\r\n      {\r\n         get { return m_townOrCity; }\r\n         set\r\n         {\r\n            m_townOrCity = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"CityTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Region, province or state of the address.\r\n      /// </summary>\r\n      private string m_regionOrState = null;\r\n      [JsonIgnore]\r\n      public string RegionOrState\r\n      {\r\n         get { return m_regionOrState; }\r\n         set\r\n         {\r\n            m_regionOrState = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"StateTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The postal code or zip code of the address\r\n      /// </summary>\r\n      private string m_postalCode = null;\r\n      [JsonIgnore]\r\n      public string PostalCode\r\n      {\r\n         get { return m_postalCode; }\r\n         set\r\n         {\r\n            m_postalCode = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"PostalCodeTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The country of the address.\r\n      /// </summary>\r\n      private string m_country = null;\r\n      [JsonIgnore]\r\n      public string Country\r\n      {\r\n         get { return m_country; }\r\n         set\r\n         {\r\n            m_country = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"CountryTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Checkbox for updating Project Information.\r\n      /// </summary>\r\n      public Boolean UpdateProjectInformation { get; set; }\r\n\r\n      /// <summary>\r\n      /// The Checkbox to indicate that the Address should be assigned to IfcSite\r\n      /// </summary>\r\n      public bool AssignAddressToSite { get; set; }\r\n\r\n      /// <summary>\r\n      /// The Checkbox to indicate that the Address should be assigned to IfcBuilding (this is the default in the original code)\r\n      /// </summary>\r\n      public bool AssignAddressToBuilding { get; set; } = true;\r\n\r\n      /// <summary>\r\n      /// Check whether the addresses are the same\r\n      /// </summary>\r\n      public Boolean isUnchanged(IFCAddressItem addressToCheck)\r\n      {\r\n         if (this.Equals(addressToCheck))\r\n            return true;\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check whether the address data has any value\r\n      /// </summary>\r\n      /// <returns>true/false</returns>\r\n      public bool HasData()\r\n      {\r\n         if (string.IsNullOrWhiteSpace(m_purpose) && string.IsNullOrWhiteSpace(m_description)\r\n               && string.IsNullOrWhiteSpace(m_userDefinedPurpose) && string.IsNullOrWhiteSpace(m_addressLine1)\r\n               && string.IsNullOrWhiteSpace(m_addressLine2) && string.IsNullOrWhiteSpace(POBox)\r\n               && string.IsNullOrWhiteSpace(m_townOrCity) && string.IsNullOrWhiteSpace(m_regionOrState)\r\n               && string.IsNullOrWhiteSpace(PostalCode) && string.IsNullOrWhiteSpace(m_country))\r\n            return false;\r\n         else\r\n            return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Handler for property change event\r\n      /// </summary>\r\n      protected void OnPropertyChanged(string name)\r\n      {\r\n         PropertyChangedEventHandler handler = PropertyChanged;\r\n         if (handler != null)\r\n         {\r\n            handler(this, new PropertyChangedEventArgs(name));\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// To clone the same object.\r\n      /// </summary>\r\n      /// <returns></returns>\r\n      public IFCAddressItem Clone()\r\n      {\r\n         return new IFCAddressItem(this);\r\n      }\r\n\r\n      public IFCAddressItem()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// To initialized object that is cloned\r\n      /// </summary>\r\n      /// <param name=\"other\">object to clone.</param>\r\n      private IFCAddressItem(IFCAddressItem other)\r\n      {\r\n         this.Purpose = other.Purpose;\r\n         this.Description = other.Description;\r\n         this.UserDefinedPurpose = other.UserDefinedPurpose;\r\n         this.AddressLine1 = other.AddressLine1;\r\n         this.AddressLine2 = other.AddressLine2;\r\n         this.POBox = other.POBox;\r\n         this.TownOrCity = other.TownOrCity;\r\n         this.RegionOrState = other.RegionOrState;\r\n         this.PostalCode = other.PostalCode;\r\n         this.Country = other.Country;\r\n         this.UpdateProjectInformation = other.UpdateProjectInformation;\r\n         this.AssignAddressToBuilding = other.AssignAddressToBuilding;\r\n         this.AssignAddressToSite = other.AssignAddressToSite;\r\n      }\r\n\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Extension/IFCClassification.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.ComponentModel;\r\nusing Newtonsoft.Json;\r\n\r\nnamespace Revit.IFC.Common.Extensions\r\n{\r\n   public class IFCClassification : INotifyPropertyChanged\r\n   {\r\n      public event PropertyChangedEventHandler PropertyChanged;\r\n\r\n      /// <summary>\r\n      /// The Classification system name, e.g. DIN or STABU\r\n      /// </summary>\r\n      private string classificationName;\r\n      public string ClassificationName\r\n      {\r\n         get { return classificationName; }\r\n         set\r\n         {\r\n            classificationName = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"ClassificationNameTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Classification system edition number.\r\n      /// </summary>\r\n      private string classificationEdition;\r\n      public string ClassificationEdition\r\n      {\r\n         get { return classificationEdition; }\r\n         set\r\n         {\r\n            classificationEdition = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"ClassificationEditionTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Source or publisher of the Classification system, usually in form of URL.\r\n      /// </summary>\r\n      private string classificationSource;\r\n      public string ClassificationSource\r\n      {\r\n         get { return classificationSource; }\r\n         set\r\n         {\r\n            classificationSource = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"ClassificationSourceTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The edition date (optional).\r\n      /// </summary>\r\n      private DateTime classificationEditionDate;\r\n      public DateTime ClassificationEditionDate\r\n      {\r\n         get { return classificationEditionDate; }\r\n         set\r\n         {\r\n            classificationEditionDate = new DateTime(value.Ticks, DateTimeKind.Utc);\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"datePicker1\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Classification location\r\n      /// </summary>\r\n      private string classificationLocation;\r\n      public string ClassificationLocation\r\n      {\r\n         get { return classificationLocation; }\r\n         set\r\n         {\r\n            classificationLocation = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"ClassificationLocationTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The (optional) Classification field name, to override \"ClassificationCode\".\r\n      /// </summary>\r\n      private string m_ClassificationFieldName;\r\n      public string ClassificationFieldName\r\n      {\r\n         get { return m_ClassificationFieldName; }\r\n         set\r\n         {\r\n            m_ClassificationFieldName = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"ClassificationFieldNameTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// This property is only used for the UI message. It will not be stored in the schema\r\n      /// </summary>\r\n      private string classificationTabMsg;\r\n      [JsonIgnore]\r\n      public string ClassificationTabMsg\r\n      {\r\n         get { return classificationTabMsg; }\r\n         set\r\n         {\r\n            classificationTabMsg = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"ClassificationTabMsg\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check whether the items are the same\r\n      /// </summary>\r\n      public bool IsUnchanged(IFCClassification classificationToCheck)\r\n      {\r\n         // Only check 4 properties that are stored into the schema.\r\n\r\n         if (string.Compare(this.ClassificationName, classificationToCheck.ClassificationName) == 0\r\n             && string.Compare(this.ClassificationSource, classificationToCheck.ClassificationSource) == 0\r\n             && string.Compare(this.ClassificationEdition, classificationToCheck.ClassificationEdition) == 0\r\n             && this.ClassificationEditionDate.Equals(classificationToCheck.ClassificationEditionDate)\r\n             && string.Compare(this.ClassificationLocation, classificationToCheck.ClassificationLocation) == 0\r\n             && string.Compare(this.ClassificationFieldName, classificationToCheck.ClassificationFieldName) == 0)\r\n            return true;\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if any field in the classificaiton has been filled.\r\n      /// </summary>\r\n      /// <returns>True if it is empty, false otherwise.</returns>\r\n      /// <remarks>The date field isn't checked, as it will always have some value.</remarks>\r\n      public bool IsClassificationEmpty()\r\n      {\r\n         return (string.IsNullOrEmpty(ClassificationName)\r\n             && string.IsNullOrEmpty(ClassificationSource)\r\n             && string.IsNullOrEmpty(ClassificationEdition)\r\n             && string.IsNullOrEmpty(ClassificationLocation)\r\n             && string.IsNullOrEmpty(ClassificationFieldName));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if any of the mandatory fields are filled in.\r\n      /// </summary>\r\n      /// <returns>True if they are, false otherwise.</returns>\r\n      public bool AreMandatoryFieldsFilled()\r\n      {\r\n         if (string.IsNullOrEmpty(ClassificationName)\r\n             || string.IsNullOrEmpty(ClassificationSource)\r\n             || string.IsNullOrEmpty(ClassificationEdition))\r\n            return false;\r\n         else\r\n            return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if none of the mandatory fields are filled in.\r\n      /// </summary>\r\n      /// <returns>True is none of the fields are fillesd out, false otherwise.</returns>\r\n      public bool IsMandatoryEmpty()\r\n      {\r\n         return (string.IsNullOrEmpty(ClassificationName)\r\n             && string.IsNullOrEmpty(ClassificationSource)\r\n             && string.IsNullOrEmpty(ClassificationEdition));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Event handler when the property is changed.\r\n      /// </summary>\r\n      /// <param name=\"name\">name of the property.</param>\r\n      protected void OnPropertyChanged(string name)\r\n      {\r\n         PropertyChangedEventHandler handler = PropertyChanged;\r\n         if (handler != null)\r\n         {\r\n            handler(this, new PropertyChangedEventArgs(name));\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// To clone the IFC Classification\r\n      /// </summary>\r\n      /// <returns></returns>\r\n      public IFCClassification Clone()\r\n      {\r\n         return new IFCClassification(this);\r\n      }\r\n\r\n      public IFCClassification()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Actual copy/clone of the IFC Classification.\r\n      /// </summary>\r\n      /// <param name=\"other\">the source File header to clone.</param>\r\n      private IFCClassification(IFCClassification other)\r\n      {\r\n         this.ClassificationName = other.ClassificationName;\r\n         this.ClassificationSource = other.ClassificationSource;\r\n         this.ClassificationEdition = other.ClassificationEdition;\r\n         this.ClassificationEditionDate = other.ClassificationEditionDate;\r\n         this.ClassificationLocation = other.ClassificationLocation;\r\n         this.ClassificationFieldName = other.ClassificationFieldName;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Extension/IFCClassificationMgr.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.ExtensibleStorage;\r\n\r\n\r\nnamespace Revit.IFC.Common.Extensions\r\n{\r\n   public class IFCClassificationMgr\r\n   {\r\n      // old schema\r\n      private static Guid s_schemaIdV1 = new Guid(\"2CC3F098-1D06-4771-815D-D39128193A14\");\r\n\r\n      // Current schema\r\n      private static Guid s_schemaId = new Guid(\"9A5A28C2-DDAC-4828-8B8A-3EE97118017A\");\r\n\r\n      private const String s_ClassificationName = \"ClassificationName\";\r\n      private const String s_ClassificationSource = \"ClassificationSource\";\r\n      private const String s_ClassificationEdition = \"ClassificationEdition\";\r\n      private const String s_ClassificationEditionDate_Day = \"ClassificationEditionDate_Day\";\r\n      private const String s_ClassificationEditionDate_Month = \"ClassificationEditionDate_Month\";\r\n      private const String s_ClassificationEditionDate_Year = \"ClassificationEditionDate_Year\";\r\n      private const String s_ClassificationLocation = \"ClassificationLocation\";\r\n      // Not in v1.\r\n      private const String s_ClassificationFieldName = \"ClassificationFieldName\";\r\n\r\n      private static Schema GetSchema()\r\n      {\r\n         Schema schema = Schema.Lookup(s_schemaId);\r\n         if (schema == null)\r\n         {\r\n            SchemaBuilder classificationBuilder = new SchemaBuilder(s_schemaId);\r\n            classificationBuilder.SetSchemaName(\"IFCClassification\");\r\n            classificationBuilder.AddSimpleField(s_ClassificationName, typeof(string));\r\n            classificationBuilder.AddSimpleField(s_ClassificationSource, typeof(string));\r\n            classificationBuilder.AddSimpleField(s_ClassificationEdition, typeof(string));\r\n            classificationBuilder.AddSimpleField(s_ClassificationEditionDate_Day, typeof(Int32));\r\n            classificationBuilder.AddSimpleField(s_ClassificationEditionDate_Month, typeof(Int32));\r\n            classificationBuilder.AddSimpleField(s_ClassificationEditionDate_Year, typeof(Int32));\r\n            classificationBuilder.AddSimpleField(s_ClassificationLocation, typeof(string));\r\n            classificationBuilder.AddSimpleField(s_ClassificationFieldName, typeof(string));\r\n            schema = classificationBuilder.Finish();\r\n         }\r\n         return schema;\r\n      }\r\n\r\n      private static Schema GetSchemaV1()\r\n      {\r\n         return Schema.Lookup(s_schemaIdV1);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Delete any obsolete schemas in the document.\r\n      /// </summary>\r\n      /// <param name=\"document\">The document.</param>\r\n      /// <remarks>This creates a transaction, so it should be called outside of a transaction.</remarks>\r\n      public static void DeleteObsoleteSchemas(Document document)\r\n      {\r\n         Schema schemaV1 = GetSchemaV1();\r\n         // Potentially delete obsolete schema.\r\n         if (schemaV1 != null)\r\n         {\r\n            Schema schema = GetSchema();\r\n\r\n            IList<IFCClassification> classifications;\r\n            bool hasOldClassifications = GetSavedClassifications(document, schemaV1, out classifications);\r\n            if (hasOldClassifications)\r\n            {\r\n               try\r\n               {\r\n                  Transaction transaction = new Transaction(document, \"Upgrade saved IFC classification\");\r\n                  transaction.Start();\r\n\r\n                  IList<DataStorage> oldSchemaData = GetClassificationInStorage(document, schemaV1);\r\n                  IList<ElementId> oldDataToDelete = new List<ElementId>();\r\n\r\n                  foreach (DataStorage oldData in oldSchemaData)\r\n                  {\r\n                     Entity savedClassification = oldData.GetEntity(schemaV1);\r\n\r\n                     DataStorage classificationStorage = DataStorage.Create(document);\r\n                     Entity entIFCClassification = new Entity(schema);\r\n                     string classificationName = savedClassification.Get<string>(s_ClassificationName);\r\n                     if (classificationName != null) entIFCClassification.Set<string>(s_ClassificationName, classificationName);\r\n\r\n                     string classificationSource = savedClassification.Get<string>(s_ClassificationSource);\r\n                     if (classificationSource != null) entIFCClassification.Set<string>(s_ClassificationSource, classificationSource);\r\n\r\n                     string classificationEdition = savedClassification.Get<string>(s_ClassificationEdition);\r\n                     if (classificationEdition != null) entIFCClassification.Set<string>(s_ClassificationEdition, classificationEdition);\r\n\r\n                     Int32 classificationEditionDateDay = savedClassification.Get<Int32>(s_ClassificationEditionDate_Day);\r\n                     Int32 classificationEditionDateMonth = savedClassification.Get<Int32>(s_ClassificationEditionDate_Month);\r\n                     Int32 classificationEditionDateYear = savedClassification.Get<Int32>(s_ClassificationEditionDate_Year);\r\n\r\n                     entIFCClassification.Set<Int32>(s_ClassificationEditionDate_Day, classificationEditionDateDay);\r\n                     entIFCClassification.Set<Int32>(s_ClassificationEditionDate_Month, classificationEditionDateMonth);\r\n                     entIFCClassification.Set<Int32>(s_ClassificationEditionDate_Year, classificationEditionDateYear);\r\n\r\n                     string classificationLocation = savedClassification.Get<string>(s_ClassificationLocation);\r\n                     if (classificationLocation != null) entIFCClassification.Set<string>(s_ClassificationLocation, classificationLocation);\r\n\r\n                     classificationStorage.SetEntity(entIFCClassification);\r\n                     oldDataToDelete.Add(oldData.Id);\r\n                  }\r\n\r\n                  if (oldDataToDelete.Count > 0)\r\n                     document.Delete(oldDataToDelete);\r\n                  transaction.Commit();\r\n               }\r\n               catch\r\n               {\r\n                  // We don't really care if it fails, but we don't want it to crash export.  Eventually we should log this.\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get IFC Classification Information from the Extensible Storage in Revit document.\r\n      /// </summary>\r\n      /// <param name=\"document\">The document storing the Classification.</param>\r\n      /// <param name=\"schema\">The schema for storing Classification.</param>\r\n      /// <returns>Returns list of IFC Classification in the storage.</returns>\r\n      private static IList<DataStorage> GetClassificationInStorage(Document document, Schema schema)\r\n      {\r\n         FilteredElementCollector collector = new FilteredElementCollector(document);\r\n         collector.OfClass(typeof(DataStorage));\r\n         Func<DataStorage, bool> hasTargetData = ds => (ds.GetEntity(schema) != null && ds.GetEntity(schema).IsValid());\r\n\r\n         return collector.Cast<DataStorage>().Where<DataStorage>(hasTargetData).ToList<DataStorage>();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Update the IFC Classification (from the UI) into the document.\r\n      /// </summary>\r\n      /// <param name=\"document\">The document storing the saved Classification.</param>\r\n      /// <param name=\"fileHeaderItem\">The Classification item to save.</param>\r\n      public static void UpdateClassification(Document document, IFCClassification classification)\r\n      {\r\n         // TO DO: To handle individual item and not the whole since in the future we may support multiple classification systems!!!\r\n         Schema schema = GetSchema();\r\n         if (schema != null)\r\n         {\r\n            IList<DataStorage> oldSavedClassification = GetClassificationInStorage(document, schema);\r\n\r\n            if (oldSavedClassification.Count == 0 && classification.IsClassificationEmpty())\r\n               return;\r\n\r\n            Transaction transaction = new Transaction(document, \"Update saved IFC classification\");\r\n            transaction.Start();\r\n\r\n            if (oldSavedClassification.Count > 0)\r\n            {\r\n               List<ElementId> dataStorageToDelete = new List<ElementId>();\r\n               foreach (DataStorage dataStorage in oldSavedClassification)\r\n               {\r\n                  dataStorageToDelete.Add(dataStorage.Id);\r\n               }\r\n               document.Delete(dataStorageToDelete);\r\n            }\r\n         \r\n            DataStorage classificationStorage = DataStorage.Create(document);\r\n\r\n            Entity entIFCClassification = new Entity(schema);\r\n            if (classification.ClassificationName != null) entIFCClassification.Set<string>(s_ClassificationName, classification.ClassificationName.ToString());\r\n            if (classification.ClassificationSource != null) entIFCClassification.Set<string>(s_ClassificationSource, classification.ClassificationSource.ToString());\r\n            if (classification.ClassificationEdition != null) entIFCClassification.Set<string>(s_ClassificationEdition, classification.ClassificationEdition.ToString());\r\n            if (classification.ClassificationEditionDate != null)\r\n            {\r\n               entIFCClassification.Set<Int32>(s_ClassificationEditionDate_Day, classification.ClassificationEditionDate.Day);\r\n               entIFCClassification.Set<Int32>(s_ClassificationEditionDate_Month, classification.ClassificationEditionDate.Month);\r\n               entIFCClassification.Set<Int32>(s_ClassificationEditionDate_Year, classification.ClassificationEditionDate.Year);\r\n            }\r\n            if (classification.ClassificationLocation != null) entIFCClassification.Set<string>(s_ClassificationLocation, classification.ClassificationLocation.ToString());\r\n            if (classification.ClassificationFieldName != null) entIFCClassification.Set<string>(s_ClassificationFieldName, classification.ClassificationFieldName.ToString());\r\n            classificationStorage.SetEntity(entIFCClassification);\r\n            transaction.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the List of Classifications saved in the Extensible Storage\r\n      /// </summary>\r\n      /// <param name=\"document\">The document.</param>\r\n      /// <param name=\"schema\">The schema.  If null is passed in, the default schema is used.</param>\r\n      /// <param name=\"classifications\">The list of classifications.</param>\r\n      /// <returns>True if any classifications were found.<returns>\r\n      public static bool GetSavedClassifications(Document document, Schema schema, out IList<IFCClassification> classifications)\r\n      {\r\n         IList<IFCClassification> ifcClassificationSaved = new List<IFCClassification>();\r\n         Boolean ret = false;\r\n\r\n         if (schema == null)\r\n            schema = GetSchema();\r\n\r\n         if (schema != null)\r\n         {\r\n            Schema schemaV1 = GetSchemaV1();\r\n\r\n            // This section handles multiple definitions of Classifications, but at the moment not in the UI\r\n            IList<DataStorage> classificationStorage = GetClassificationInStorage(document, schema);\r\n\r\n            for (int noClass = 0; noClass < classificationStorage.Count; noClass++)\r\n            {\r\n               Entity savedClassification = classificationStorage[noClass].GetEntity(schema);\r\n\r\n               ifcClassificationSaved.Add(new IFCClassification());\r\n\r\n               ifcClassificationSaved[noClass].ClassificationName = savedClassification.Get<string>(schema.GetField(s_ClassificationName));\r\n               ifcClassificationSaved[noClass].ClassificationSource = savedClassification.Get<string>(schema.GetField(s_ClassificationSource));\r\n               ifcClassificationSaved[noClass].ClassificationEdition = savedClassification.Get<string>(schema.GetField(s_ClassificationEdition));\r\n\r\n               Int32 cldateDay = savedClassification.Get<Int32>(schema.GetField(s_ClassificationEditionDate_Day));\r\n               Int32 cldateMonth = savedClassification.Get<Int32>(schema.GetField(s_ClassificationEditionDate_Month));\r\n               Int32 cldateYear = savedClassification.Get<Int32>(schema.GetField(s_ClassificationEditionDate_Year));\r\n               try\r\n               {\r\n                  ifcClassificationSaved[noClass].ClassificationEditionDate = new DateTime(cldateYear, cldateMonth, cldateDay);\r\n               }\r\n               catch\r\n               {\r\n                  ifcClassificationSaved[noClass].ClassificationEditionDate = DateTime.Now.Date;\r\n               }\r\n\r\n               ifcClassificationSaved[noClass].ClassificationLocation = savedClassification.Get<string>(schema.GetField(s_ClassificationLocation));\r\n               // Only for newest schema.\r\n               if (schemaV1 == null || (schema.GUID != schemaV1.GUID))\r\n                  ifcClassificationSaved[noClass].ClassificationFieldName = savedClassification.Get<string>(schema.GetField(s_ClassificationFieldName));\r\n               ret = true;\r\n            }\r\n         }\r\n\r\n         // Create at least one new Classification in the List, otherwise caller may fail\r\n         if (ifcClassificationSaved.Count == 0)\r\n            ifcClassificationSaved.Add(new IFCClassification());\r\n\r\n         classifications = ifcClassificationSaved;\r\n         return ret;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Extension/IFCFileHeader.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.ExtensibleStorage;\r\n\r\n\r\nnamespace Revit.IFC.Common.Extensions\r\n{\r\n   public class IFCFileHeader\r\n   {\r\n      private Schema m_schema = null;\r\n      private static Guid s_schemaId = new Guid(\"81527F52-A20F-4BDF-9F01-E7CE1022840A\");\r\n      private const String s_FileHeaderMapField = \"IFCFileHeaderMapField\";  // Don't change this name, it affects the schema.\r\n\r\n      private const String s_FileDescription = \"FileDescription\";\r\n      private const String s_SourceFileName = \"SourceFileName\";\r\n      private const String s_AuthorName = \"AuthorName\";\r\n      private const String s_AuthorEmail = \"AuthorEmail\";\r\n      private const String s_Organization = \"Organization\";\r\n      private const String s_Authorization = \"Authorization\";\r\n      private const String s_ApplicationName = \"ApplicationName\";\r\n      private const String s_VersionNumber = \"VersionNumber\";\r\n      private const String s_FileSchema = \"FileSchema\";\r\n\r\n\r\n      /// <summary>\r\n      /// the IFC File Header\r\n      /// </summary>\r\n      public IFCFileHeader()\r\n      {\r\n         if (m_schema == null)\r\n         {\r\n            m_schema = Schema.Lookup(s_schemaId);\r\n         }\r\n         if (m_schema == null)\r\n         {\r\n            SchemaBuilder fileHeaderBuilder = new SchemaBuilder(s_schemaId);\r\n            fileHeaderBuilder.SetSchemaName(\"IFCFileHeader\");\r\n            fileHeaderBuilder.AddMapField(s_FileHeaderMapField, typeof(String), typeof(String));\r\n            m_schema = fileHeaderBuilder.Finish();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get File Header Information from the Extensible Storage in Revit document. Limited to just one file header item.\r\n      /// </summary>\r\n      /// <param name=\"document\">The document storing the saved address.</param>\r\n      /// <param name=\"schema\">The schema for storing File Header.</param>\r\n      /// <returns>Returns list of File headers in the storage.</returns>\r\n      private IList<DataStorage> GetFileHeaderInStorage(Document document, Schema schema)\r\n      {\r\n         FilteredElementCollector collector = new FilteredElementCollector(document);\r\n         collector.OfClass(typeof(DataStorage));\r\n         Func<DataStorage, bool> hasTargetData = ds => (ds.GetEntity(schema) != null && ds.GetEntity(schema).IsValid());\r\n\r\n         return collector.Cast<DataStorage>().Where<DataStorage>(hasTargetData).ToList<DataStorage>();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Update the file Header (from the UI) into the document \r\n      /// </summary>\r\n      /// <param name=\"document\">The document storing the saved File Header.</param>\r\n      /// <param name=\"fileHeaderItem\">The File Header item to save.</param>\r\n      public void UpdateFileHeader(Document document, IFCFileHeaderItem fileHeaderItem)\r\n      {\r\n         if (m_schema == null)\r\n         {\r\n            m_schema = Schema.Lookup(s_schemaId);\r\n         }\r\n\r\n         if (m_schema != null)\r\n         {\r\n            Transaction transaction = new Transaction(document, \"Update saved IFC File Header\");\r\n            transaction.Start();\r\n\r\n            IList<DataStorage> oldSavedFileHeader = GetFileHeaderInStorage(document, m_schema);\r\n            if (oldSavedFileHeader.Count > 0)\r\n            {\r\n               List<ElementId> dataStorageToDelete = new List<ElementId>();\r\n               foreach (DataStorage dataStorage in oldSavedFileHeader)\r\n               {\r\n                  dataStorageToDelete.Add(dataStorage.Id);\r\n               }\r\n               document.Delete(dataStorageToDelete);\r\n            }\r\n\r\n            DataStorage fileHeaderStorage = DataStorage.Create(document);\r\n\r\n            Entity mapEntity = new Entity(m_schema);\r\n            IDictionary<string, string> mapData = new Dictionary<string, string>();\r\n            if (fileHeaderItem.FileDescriptions.Count > 0) mapData.Add(s_FileDescription, string.Join(\"|\", fileHeaderItem.FileDescriptions.ToArray()));\r\n            if (fileHeaderItem.SourceFileName != null) mapData.Add(s_SourceFileName, fileHeaderItem.SourceFileName.ToString());\r\n            if (fileHeaderItem.AuthorName != null) mapData.Add(s_AuthorName, fileHeaderItem.AuthorName.ToString());\r\n            if (fileHeaderItem.AuthorEmail != null) mapData.Add(s_AuthorEmail, fileHeaderItem.AuthorEmail.ToString());\r\n            if (fileHeaderItem.Organization != null) mapData.Add(s_Organization, fileHeaderItem.Organization.ToString());\r\n            if (fileHeaderItem.Authorization != null) mapData.Add(s_Authorization, fileHeaderItem.Authorization.ToString());\r\n            if (fileHeaderItem.ApplicationName != null) mapData.Add(s_ApplicationName, fileHeaderItem.ApplicationName.ToString());\r\n            if (fileHeaderItem.VersionNumber != null) mapData.Add(s_VersionNumber, fileHeaderItem.VersionNumber.ToString());\r\n            if (fileHeaderItem.FileSchema != null) mapData.Add(s_FileSchema, fileHeaderItem.FileSchema.ToString());\r\n\r\n            mapEntity.Set<IDictionary<string, String>>(s_FileHeaderMapField, mapData);\r\n            fileHeaderStorage.SetEntity(mapEntity);\r\n\r\n            transaction.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get saved IFC File Header\r\n      /// </summary>\r\n      /// <param name=\"document\">The document where File Header information is stored.</param>\r\n      /// <param name=\"fileHeader\">Output of the saved File Header from the extensible storage.</param>\r\n      /// <returns>Status whether there is existing saved File Header.</returns>\r\n      public bool GetSavedFileHeader(Document document, out IFCFileHeaderItem fileHeader)\r\n      {\r\n         fileHeader = new IFCFileHeaderItem();\r\n\r\n         if (m_schema == null)\r\n         {\r\n            m_schema = Schema.Lookup(s_schemaId);\r\n         }\r\n\r\n         if (m_schema == null)\r\n         {\r\n            return false;\r\n         }\r\n\r\n         IList<DataStorage> fileHeaderStorage = GetFileHeaderInStorage(document, m_schema);\r\n\r\n         if (fileHeaderStorage.Count == 0)\r\n            return false;\r\n\r\n         try\r\n         {\r\n            // expected only one File Header information in the storage\r\n            Entity savedFileHeader = fileHeaderStorage[0].GetEntity(m_schema);\r\n            IDictionary<string, string> savedFileHeaderMap = savedFileHeader.Get<IDictionary<string, string>>(s_FileHeaderMapField);\r\n            if (savedFileHeaderMap.ContainsKey(s_FileDescription))\r\n               fileHeader.FileDescriptions = savedFileHeaderMap[s_FileDescription].Split('|').ToList();\r\n            if (savedFileHeaderMap.ContainsKey(s_SourceFileName))\r\n               fileHeader.SourceFileName = savedFileHeaderMap[s_SourceFileName];\r\n            if (savedFileHeaderMap.ContainsKey(s_AuthorName))\r\n               fileHeader.AuthorName = savedFileHeaderMap[s_AuthorName];\r\n            if (savedFileHeaderMap.ContainsKey(s_AuthorEmail))\r\n               fileHeader.AuthorEmail = savedFileHeaderMap[s_AuthorEmail];\r\n            if (savedFileHeaderMap.ContainsKey(s_Organization))\r\n               fileHeader.Organization = savedFileHeaderMap[s_Organization];\r\n            if (savedFileHeaderMap.ContainsKey(s_Authorization))\r\n               fileHeader.Authorization = savedFileHeaderMap[s_Authorization];\r\n            if (savedFileHeaderMap.ContainsKey(s_ApplicationName))\r\n               fileHeader.ApplicationName = savedFileHeaderMap[s_ApplicationName];\r\n            if (savedFileHeaderMap.ContainsKey(s_VersionNumber))\r\n               fileHeader.VersionNumber = savedFileHeaderMap[s_VersionNumber];\r\n            if (savedFileHeaderMap.ContainsKey(s_FileSchema))\r\n               fileHeader.FileSchema = savedFileHeaderMap[s_FileSchema];\r\n         }\r\n         catch (Exception)\r\n         {\r\n            document.Application.WriteJournalComment(\"IFC error: Cannot read IFCFileHeader schema\", true);\r\n         }\r\n\r\n         return true;\r\n      } \r\n   }   \r\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Extension/IFCFileHeaderItem.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.ComponentModel;\r\nusing Autodesk.Revit.DB;\r\n\r\nnamespace Revit.IFC.Common.Extensions\r\n{\r\n   public class IFCFileHeaderItem : INotifyPropertyChanged\r\n   {\r\n      public event PropertyChangedEventHandler PropertyChanged;\r\n\r\n      /// <summary>\r\n      /// The File Description field of IFC File header.\r\n      /// </summary>\r\n      public IList<string> FileDescriptions { get; set; } = new List<string>();\r\n\r\n      /// <summary>\r\n      /// Add a description item into the list\r\n      /// </summary>\r\n      /// <param name=\"descriptionItem\">the string to be added to the description</param>\r\n      public void AddDescription(string descriptionItem)\r\n      {\r\n         if (!string.IsNullOrEmpty(descriptionItem))\r\n            FileDescriptions.Add(descriptionItem);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Remove description item based on a keyword\r\n      /// </summary>\r\n      /// <param name=\"keyword\">the keyword to be searched</param>\r\n      /// <returns>true if keyword found and removed successfully, false if not found</returns>\r\n      public bool AddOrReplaceDescriptionItem(string newDescItem)\r\n      {\r\n         bool ret = false;\r\n         string[] descItemToken = newDescItem.TrimStart().Split(':', ' ');\r\n         if (descItemToken.Length >= 1 && !string.IsNullOrEmpty(descItemToken[0]))\r\n         {\r\n            string keyword = descItemToken[0];\r\n            for (int idx = 0; idx < FileDescriptions.Count; ++idx)\r\n            {\r\n               string descriptionItem = FileDescriptions[idx];\r\n               // Items are the same, no need to do any replacement\r\n               if (descriptionItem.Equals(newDescItem))\r\n               {\r\n                  ret = true;\r\n                  break;\r\n               }\r\n\r\n               if (descriptionItem.TrimStart().StartsWith(keyword, StringComparison.InvariantCultureIgnoreCase))\r\n               {\r\n                  FileDescriptions.RemoveAt(idx);\r\n                  FileDescriptions.Add(newDescItem);\r\n                  ret = true;\r\n                  break;\r\n               }\r\n            }\r\n            if (!ret)\r\n            {\r\n               FileDescriptions.Add(newDescItem);\r\n               ret = true;\r\n            }\r\n         }\r\n         return ret;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Source file name field of IFC File header.\r\n      /// </summary>\r\n      private string sourceFileName;\r\n      public string SourceFileName\r\n      {\r\n         get { return sourceFileName; }\r\n         set\r\n         {\r\n            sourceFileName = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"SourceFileNameTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Thee Author's first name field of IFC File header.\r\n      /// </summary>\r\n      private string authorName;\r\n      public string AuthorName\r\n      {\r\n         get { return authorName; }\r\n         set\r\n         {\r\n            authorName = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"AuthorNameTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Author's last name field of IFC File header.\r\n      /// </summary>\r\n      private string authorEmail;\r\n      public string AuthorEmail\r\n      {\r\n         get { return authorEmail; }\r\n         set\r\n         {\r\n            authorEmail = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"AuthorEmailTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Organization field of IFC File header.\r\n      /// </summary>\r\n      private string organization;\r\n      public string Organization\r\n      {\r\n         get { return organization; }\r\n         set\r\n         {\r\n            organization = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"OrganizationTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Authorization field of IFC File header.\r\n      /// </summary>\r\n      private string authorization;\r\n      public string Authorization\r\n      {\r\n         get { return authorization; }\r\n         set\r\n         {\r\n            authorization = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"AuthorizationTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Application Name field of IFC File header.\r\n      /// </summary>\r\n      private string applicationName;\r\n      public string ApplicationName\r\n      {\r\n         get { return applicationName; }\r\n         set\r\n         {\r\n            applicationName = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"ApplicationNameTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Version number field of IFC File header.\r\n      /// </summary>\r\n      private string versionNumber;\r\n      public string VersionNumber\r\n      {\r\n         get { return versionNumber; }\r\n         set\r\n         {\r\n            versionNumber = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"VersionNumberTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Location field of IFC File header.\r\n      /// </summary>\r\n      private string fileSchema;\r\n      public string FileSchema\r\n      {\r\n         get { return fileSchema; }\r\n         set\r\n         {\r\n            fileSchema = value;\r\n            // Call OnPropertyChanged whenever the property is updated\r\n            OnPropertyChanged(\"fileSchemaTextBox\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check whether the addresses are the same\r\n      /// </summary>\r\n      public Boolean isUnchanged(IFCFileHeaderItem headerToCheck)\r\n      {\r\n         if (this.Equals(headerToCheck))\r\n            return true;\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Event handler when the property is changed.\r\n      /// </summary>\r\n      /// <param name=\"name\">name of the property.</param>\r\n      protected void OnPropertyChanged(string name)\r\n      {\r\n         PropertyChangedEventHandler handler = PropertyChanged;\r\n         if (handler != null)\r\n         {\r\n            handler(this, new PropertyChangedEventArgs(name));\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// To clone the File header information.\r\n      /// </summary>\r\n      /// <returns></returns>\r\n      public IFCFileHeaderItem Clone()\r\n      {\r\n         return new IFCFileHeaderItem(this);\r\n      }\r\n\r\n      public IFCFileHeaderItem()\r\n      {\r\n      }\r\n\r\n      public IFCFileHeaderItem(Document doc)\r\n      {\r\n         // Application Name and Number are fixed for the software release and will not change, therefore they are always forced set here\r\n         ApplicationName = doc.Application.VersionName;\r\n         VersionNumber = doc.Application.VersionBuild;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Actual copy/clone of the Header information.\r\n      /// </summary>\r\n      /// <param name=\"other\">the source File header to clone.</param>\r\n      private IFCFileHeaderItem(IFCFileHeaderItem other)\r\n      {\r\n         FileDescriptions = other.FileDescriptions;\r\n         SourceFileName = other.SourceFileName;\r\n         AuthorName = other.AuthorName;\r\n         AuthorEmail = other.AuthorEmail;\r\n         Organization = other.Organization;\r\n         Authorization = other.Authorization;\r\n         ApplicationName = other.ApplicationName;\r\n         VersionNumber = other.VersionNumber;\r\n         FileSchema = other.FileSchema;\r\n      }\r\n\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Properties/AssemblyInfo.cs",
    "content": "#if IFC_OPENSOURCE\r\nusing System.Reflection;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"IFC Common for Revit\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"Autodesk\")]\r\n[assembly: AssemblyProduct(\"IFC Import/Exporter for Revit\")]\r\n[assembly: AssemblyCopyright(\" 2012-2026 Autodesk, Inc.All rights reserved.\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n[assembly: AssemblyVersion(\"27.0.1.0\")]\r\n[assembly: AssemblyFileVersion(\"27.0.1.0\")]\r\n#endif\r\n\r\n\r\n// Version information can now be found in Source\\Foundation\\RevitENU\\Version.cs\r\n//\r\n\r\n"
  },
  {
    "path": "Source/Revit.IFC.Common/Revit.IFC.Common.csproj",
    "content": "<Project Sdk=\"\">\r\n  <PropertyGroup>\r\n    <RootNamespace>Revit.IFC.Common</RootNamespace>\r\n    <AssemblyName>Revit.IFC.Common</AssemblyName>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(SolutionDir)VSProps\\Revit.CSharp.Sdk.props\" />\r\n   <ItemGroup>\r\n      <FrameworkReference Include=\"Microsoft.WindowsDesktop.App\" />\r\n   </ItemGroup>\r\n  <Import Project=\"$(SolutionDir)VSProps\\Revit.CSharp.Sdk.targets\" />\r\n  <ItemGroup>\r\n    <Compile Remove=\"Enums\\IFC4x1EntityType.cs\" />\r\n    <Compile Remove=\"Enums\\IFC4x2EntityType.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"13.0.1\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"RevitAPI\">\r\n      <HintPath>..\\..\\..\\API\\2027\\RevitAPI.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"RevitAPIIFC\">\r\n      <HintPath>..\\..\\..\\API\\2027\\RevitAPIIFC.dll</HintPath>\r\n    </Reference>\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "Source/Revit.IFC.Common/Utility/AllocatedGeometryObjectCache.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nusing Autodesk.Revit.DB;\n\nnamespace Revit.IFC.Common.Utility\n{\n   /// <summary>\n   /// This class aggregates all allocated geometry objects so that they can be disposed of before returning from the IFC export.\n   /// Although the garbage collector would eventually catch up and dispose of these objects on its own, doing it preemptively is \n   /// necessary in order to avoid debug errors triggered by Revit when running automated tests.\n   /// </summary>\n   public class AllocatedGeometryObjectCache\n   {\n      private List<GeometryObject> GeometryObjects { get; set; } = new List<GeometryObject>();\n\n      /// <summary>\n      /// Adds a new object to the cache.   \n      /// </summary>\n      /// <param name=\"geometryObject\">The object.</param>\n      public void AddGeometryObject(GeometryObject geometryObject)\n      {\n         GeometryObjects.Add(geometryObject);\n      }\n\n      /// <summary>\n      /// Executes Dispose for all geometry objects contained in the cache.\n      /// </summary>\n      public void DisposeCache()\n      {\n         foreach (GeometryObject geometryObject in GeometryObjects)\n         {\n            geometryObject.Dispose();\n         }\n\n         GeometryObjects.Clear();\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Utility/COBieCompanyInfo.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Text.RegularExpressions;\r\nusing System.Threading.Tasks;\r\nusing Newtonsoft.Json;\r\n\r\nnamespace Revit.IFC.Common.Utility\r\n{\r\n   public class COBieCompanyInfo\r\n   {\r\n      public string CompanyType { get; set; }\r\n      public string CompanyName { get; set; }\r\n      public string StreetAddress { get; set; }\r\n      public string City { get; set; }\r\n      public string State_Region { get; set; }\r\n      public string PostalCode { get; set; }\r\n      public string Country { get; set; }\r\n      public string CompanyPhone { get; set; }\r\n      public string CompanyEmail { get; set; }\r\n\r\n      public COBieCompanyInfo()\r\n      {\r\n\r\n      }\r\n\r\n      public COBieCompanyInfo(string compInfoStr)\r\n      {\r\n         if (!string.IsNullOrEmpty(compInfoStr))\r\n         {\r\n            COBieCompanyInfo compInfo = JsonConvert.DeserializeObject<COBieCompanyInfo>(compInfoStr);\r\n            CompanyType = compInfo.CompanyType;\r\n            CompanyName = compInfo.CompanyName;\r\n            StreetAddress = compInfo.StreetAddress;\r\n            City = compInfo.City;\r\n            State_Region = compInfo.State_Region;\r\n            PostalCode = compInfo.PostalCode;\r\n            Country = compInfo.Country;\r\n            CompanyPhone = compInfo.CompanyPhone;\r\n            CompanyEmail = compInfo.CompanyEmail;\r\n         }\r\n      }\r\n\r\n      public bool EmailValidator()\r\n      {\r\n         Regex emailRegex = new Regex(\"([A-Z0-9a-z_(-)(.)]+)@([A-Z0-9a-z_(-)]+)(.[A-Z0-9a-z_(-)]+)+\");\r\n         Match m = emailRegex.Match(CompanyEmail);\r\n         if (m.Success)\r\n            return true;\r\n         return false;\r\n      }\r\n\r\n      public bool PhoneValidator()\r\n      {\r\n         Regex phoneRegex = new Regex(\"(?<IDDCode>[+][0-9]{1,3}[ ]*)?(?<AreaCode>[(][0-9]{1,4}[)])?[ ]*(?<PhoneNumber>[0-9]{3,5}(?:-|[ ]*)[0-9]{3,4})\");\r\n         Match m = phoneRegex.Match(CompanyPhone);\r\n         if (m.Success)\r\n            return true;\r\n         return false;\r\n      }\r\n\r\n      public string ToJsonString()\r\n      {\r\n         return JsonConvert.SerializeObject(this);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Utility/COBieProjectInfo.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing Newtonsoft.Json;\r\n\r\nnamespace Revit.IFC.Common.Utility\r\n{\r\n   public class COBieProjectInfo\r\n   {\r\n      public string BuildingName_Number { get; set; }\r\n      public string BuildingType { get; set; }\r\n      public string BuildingDescription { get; set; }\r\n      public string ProjectName { get; set; }\r\n      public string ProjectDescription { get; set; }\r\n      public string ProjectPhase { get; set; }\r\n      public string SiteLocation { get; set; }\r\n      public string SiteDescription { get; set; }\r\n\r\n      public COBieProjectInfo()\r\n      {\r\n\r\n      }\r\n\r\n      public COBieProjectInfo(string projInfoStr)\r\n      {\r\n         if (!string.IsNullOrEmpty(projInfoStr))\r\n         {\r\n            COBieProjectInfo projInfo = JsonConvert.DeserializeObject<COBieProjectInfo>(projInfoStr);\r\n            BuildingName_Number = projInfo.BuildingName_Number;\r\n            BuildingType = projInfo.BuildingType;\r\n            BuildingDescription = projInfo.BuildingDescription;\r\n            ProjectName = projInfo.ProjectName;\r\n            ProjectDescription = projInfo.ProjectDescription;\r\n            ProjectPhase = projInfo.ProjectPhase;\r\n            SiteLocation = projInfo.SiteLocation;\r\n            SiteDescription = projInfo.SiteDescription;\r\n         }\r\n      }\r\n\r\n      public string ToJsonString()\r\n      {\r\n         return JsonConvert.SerializeObject(this);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Utility/CoordReferenceInfo.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Runtime.Serialization;\nusing System.Runtime.Serialization.Formatters.Binary;\nusing Autodesk.Revit.DB;\n\n\nnamespace Revit.IFC.Common.Utility\n{\n   /// <summary>\n   /// Class to keep Coordinate Reference Information and the Geo Reference data from the main model\n   /// for use in the export option where the Link file(s) is exported together\n   /// </summary>\n   public class CoordReferenceInfo\n   {\n      /// <summary>\n      /// Transform data for the GeoReference or WCS (unscaled)\n      /// </summary>\n      public static Transform MainModelGeoRefOrWCS { get; set; } = Transform.Identity;\n\n      /// <summary>\n      /// True North angel of the main model that may be needed later to transaform back the coord reference offset\n      /// </summary>\n      public static double MainModelTNAngle { get; set; } = 0.0;\n\n      /// <summary>\n      /// Transform data of the main model the Site placement. This is needed to correctly positioned the link model(s)\n      /// when different coordinate reference is used (unscaled)\n      /// </summary>\n      public static Transform MainModelCoordReferenceOffset { get; set; } = Transform.Identity;\n\n      /// <summary>\n      /// Information to create IfcProjectedCRS\n      /// </summary>\n      public class CRSInfo\n      {\n         /// <summary>\n         /// Projected Map coordinate system name\n         /// </summary>\n         public string GeoRefCRSName { get; set; }\n         \n         /// <summary>\n         /// Projected Map system description\n         /// </summary>\n         public string GeoRefCRSDesc { get; set; }\n\n         /// <summary>\n         /// Geodetic datum\n         /// </summary>\n         public string GeoRefGeodeticDatum { get; set; }\n         \n         /// <summary>\n         /// Vertical Datum\n         /// </summary>\n         public string GeoRefVerticalDatum { get; set; }\n\n         /// <summary>\n         /// Map unit\n         /// </summary>\n         public string GeoRefMapUnit { get; set; }\n\n         /// <summary>\n         /// Map projection name\n         /// </summary>\n         public string GeoRefMapProjection { get; set; }\n\n         /// <summary>\n         /// Map zone name\n         /// </summary>\n         public string GeoRefMapZone { get; set; }\n\n         /// <summary>\n         /// Clear the values\n         /// </summary>\n         public void Clear()\n         {\n            if (MainModelGeoRefOrWCS != null)\n               MainModelGeoRefOrWCS = Transform.Identity;\n            if (MainModelCoordReferenceOffset != null)\n               MainModelCoordReferenceOffset = Transform.Identity;\n            GeoRefCRSName = null;\n            GeoRefCRSDesc = null;\n            GeoRefGeodeticDatum = null;\n            GeoRefVerticalDatum = null;\n            GeoRefMapUnit = null;\n            GeoRefMapProjection = null;\n            GeoRefMapZone = null;\n         }\n\n         /// <summary>\n         /// Check whether CRS info is set/used\n         /// </summary>\n         public bool CrsInfoNotSet\n         {\n            get\n            {\n               return (GeoRefCRSName == null);\n            }\n         }\n      }\n\n      /// <summary>\n      /// Projected CRS information\n      /// </summary>\n      public static CRSInfo CrsInfo { get; set; } = new CRSInfo();\n\n\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Common/Utility/DirectoryUtil.cs",
    "content": "﻿//\r\n// Revit IFC Common library: this library works with Autodesk(R) Revit(R) IFC import and export.\r\n// Copyright (C) 2012 Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.IO;\r\n\r\nnamespace Revit.IFC.Common.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides static methods for accessing Revit program directories.\r\n   /// </summary>\r\n   public class DirectoryUtil\r\n   {\r\n      /// <summary>\r\n      /// Gets the Revit program path.\r\n      /// </summary>\r\n      public static string RevitProgramPath\r\n      {\r\n         get\r\n         {\r\n            return Path.GetDirectoryName(typeof(Autodesk.Revit.ApplicationServices.Application).Assembly.Location);\r\n         }\r\n      }\r\n\r\n      public static string IFCSchemaLocation\r\n      {\r\n         get\r\n         {\r\n#if IFC_OPENSOURCE\r\n            // For the open source code, search it from the IfcExporter install folder\r\n            string schemaLoc = Path.GetDirectoryName(System.Reflection.Assembly.GetCallingAssembly().Location);\r\n            if (!string.IsNullOrEmpty(schemaLoc))\r\n            {\r\n               return schemaLoc;\r\n            }\r\n#endif\r\n            return Path.Combine(RevitProgramPath, \"IFC\");\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Utility/ElementComparer.cs",
    "content": "﻿//\n// Revit IFC Common library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2022  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing Autodesk.Revit.DB;\nusing System.Collections.Generic;\n\nnamespace Revit.IFC.Common.Utility\n{\n   /// <summary>\n   /// The comparer for comparing XYZ.\n   /// </summary>\n   public struct ElementComparer : IComparer<Element>\n   {\n      /// <summary>\n      /// Check if 2 Elements are almost equal by checking their ids.\n      /// </summary>\n      /// <param name=\"elem1\">The first element.</param>\n      /// <param name=\"elem2\">The second element.</param>\n      /// <returns>-1 if elem1 has a lower element id than elem2, \n      /// 1 if elem1 has a higher element id than elem2, \n      /// and 0 they have the same element id.</returns>\n      public int Compare(Element elem1, Element elem2)\n      {\n         long id1 = elem1?.Id?.Value ?? -1;\n         long id2 = elem2?.Id?.Value ?? -1;\n\n         if (id1 < id2)\n            return -1;\n         if (id2 < id1)\n            return 1;\n         return 0;\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Utility/IFCAnyHandleUtil.cs",
    "content": "﻿//\r\n// Revit IFC Common library: this library works with Autodesk(R) Revit(R) IFC import and export.\r\n// Copyright (C) 2012 Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Common.Enums;\r\nusing Autodesk.Revit.DB.Visual;\r\n\r\nnamespace Revit.IFC.Common.Utility\r\n{\r\n   public static class ListExtensions\r\n   {\r\n      /// <summary>\r\n      /// Add an IFCAnyHandle to a list if the handle is valid.\r\n      /// </summary>\r\n      /// <typeparam name=\"IFCAnyHandle\"></typeparam>\r\n      /// <param name=\"myList\">The list.</param>\r\n      /// <param name=\"hnd\">The handle to conditionally add.</param>\r\n      /// <returns>True if an item was added, false if not.</returns>\r\n      public static bool AddIfNotNull<T>(this IList<T> myList, T hnd) where T : IFCAnyHandle\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(hnd))\r\n            return false;\r\n\r\n         myList.Add(hnd);\r\n         return true;\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Class containing convenience function for IDictionary of IFCAnyHandle.\r\n   /// </summary>\r\n   public static class DictionaryExtensionsClass\r\n   {\r\n      public static bool AddIfNotNullAndNewKey<T>(this IDictionary<string, T> myDictionary, \r\n         string key, T hnd) where T : IFCAnyHandle\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(hnd))\r\n            return false;\r\n         \r\n         if (myDictionary.ContainsKey(key))\r\n            return false;\r\n\r\n         myDictionary[key] = hnd;\r\n         return true;\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Class containing convenience function for ISet of IFCAnyHandle.\r\n   /// </summary>\r\n   public static class SetExtensions\r\n   {\r\n      /// <summary>\r\n      /// Add an IFCAnyHandle to a set if the handle is valid.\r\n      /// </summary>\r\n      /// <typeparam name=\"IFCAnyHandle\"></typeparam>\r\n      /// <param name=\"mySet\">The set.</param>\r\n      /// <param name=\"hnd\">The handle to conditionally add.</param>\r\n      /// <returns>True if an item was added, false if not.</returns>\r\n      public static bool AddIfNotNull<T>(this ISet<T> mySet, T hnd) where T : IFCAnyHandle\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(hnd))\r\n            return false;\r\n\r\n         mySet.Add(hnd);\r\n         return true;\r\n      }\r\n   }\r\n\r\n   public class IFCLimits\r\n   {\r\n      /// <summary>\r\n      /// Maximum length of STRING data type allowed by IFC spec.\r\n      /// This is the length of properly escaped or recoded string eligible for writing to IFC file.\r\n      /// All symbols beyond this limit must be truncated.\r\n      /// </summary>\r\n      public const int MAX_RECODED_STR_LEN = 32767;\r\n\r\n      public const int MAX_IFCLABEL_STR_LEN = 255;\r\n      public const int MAX_IFCIDENTIFIER_STR_LEN = 255;\r\n\r\n      /// <summary>\r\n      /// Calculates max length of given string which can be exported to IFC file.\r\n      /// Length is limited by IFC spec. Algorithm consequently transforms each char of input string to recoded form eligible for writing to IFC file and calculates resulting length.\r\n      /// Once recoded length limit is reached algorithm stops calculation and return index of current symbol. It is the maximum length of original string which can be exported.\r\n      /// </summary>\r\n      /// <param name=\"str\">String for determining how much chars can be exported to IFC.</param>\r\n      /// <returns>The name.</returns>\r\n      public static int CalculateMaxAllowedSize(string str)\r\n      {\r\n         if (str == null)\r\n            return 0;\r\n\r\n         //1. Check if recoded form of input string can theoretically exceed MAX_RECODED_STR_LEN.\r\n\r\n         //Recoded form of string with original length <= 3854 will never be greater than MAX_RECODED_STR_LEN.\r\n         //So it is safe.\r\n         const int maxSafeLenOfInputStr = 3854;\r\n         int inputStrLen = str.Length;\r\n\r\n         if (inputStrLen <= maxSafeLenOfInputStr)\r\n            return inputStrLen;\r\n\r\n         //2. It was identified that there is a chance that recoded string can exceed limit MAX_RECODED_STR_LEN.\r\n         //   To find that out for sure the code below calculates exact recoded length.\r\n\r\n         // check if encoding is required\r\n         Char[] charsThatMustBeEscaped = { '\\\\', '\\'', '\\r', '\\n', '\\t' };\r\n         bool needRecoding = str.Any(ch => (ch & 0xFF80) != 0 || charsThatMustBeEscaped.Contains(ch));\r\n\r\n         if (!needRecoding)\r\n            return Math.Min(IFCLimits.MAX_RECODED_STR_LEN, inputStrLen);\r\n\r\n         int recodedStrLen = 0;\r\n         bool unicode = false; // flag for indicating whether to store as unicode\r\n\r\n         for (int i = 0; i < inputStrLen; i++)\r\n         {\r\n            Char ch = str[i];\r\n\r\n            // handle unicode\r\n            if (ch > 255)\r\n            {\r\n               // extended encoding\r\n               if (!unicode)\r\n               {\r\n                  //8 - total size of \"\\X2\\\" and \"\\X0\\\"\r\n                  recodedStrLen += 8;\r\n                  unicode = true;\r\n               }\r\n\r\n               // unicode symbol is encoded as 4 digit HEX number\r\n               recodedStrLen += 4;\r\n            }\r\n            else if (unicode)\r\n            {\r\n               // end of unicode; terminate\r\n               unicode = false;\r\n            }\r\n\r\n            // then all other modes\r\n            if (ch == '\\\\')\r\n            {\r\n               // back-slash is escaped as \"\\\\\"\r\n               recodedStrLen += 2;\r\n            }\r\n            else if (ch == '\\'')\r\n            {\r\n               // single-quote is escaped as \"''\"\r\n               recodedStrLen += 2;\r\n            }\r\n            else if (ch >= 32 && ch < 126)\r\n            {\r\n               // direct encoding\r\n               recodedStrLen += 1;\r\n            }\r\n            else if (ch >= 128 + 32 && ch <= 128 + 126)\r\n            {\r\n               // shifted encoding. Symbol is encoded as \"\\S\\\" plus (ch & 0x007F)\r\n               recodedStrLen += 4;\r\n            }\r\n            else if (ch < 255)\r\n            {\r\n               // other character encoded as \"\\X\\\" plus 2 hex digits\r\n               recodedStrLen += 5;\r\n            }\r\n\r\n            if (recodedStrLen > IFCLimits.MAX_RECODED_STR_LEN)\r\n            {\r\n               return i;\r\n            }\r\n         }\r\n\r\n         return inputStrLen;\r\n      }\r\n   }\r\n   public class IFCAnyHandleUtil\r\n   {\r\n      public class IfcPointList\r\n      {\r\n         public enum PointDimension\r\n         {\r\n            NotSet,\r\n            D2,\r\n            D3\r\n         };\r\n         public PointDimension Dimensionality { get; protected set; } = PointDimension.NotSet;\r\n         public List<PointBase> Points { get; protected set; } = new List<PointBase>();\r\n         public int Count { get { return Points.Count; } }\r\n         public PointBase Last() { return Points.Last(); }\r\n         public PointBase this[int key]\r\n         {\r\n            get => Points[key];\r\n            set => Points[key] = value;\r\n         }\r\n         /// <summary>\r\n         /// Sets dimension of points stored in container if it has never been set before.\r\n         /// Once set this function checks input dimension for compatibility with current dimension.\r\n         /// Throws exception if dimensions are not compatible.\r\n         /// </summary>\r\n         /// <param name=\"dim\">Input dimension to be set or compared with.</param>\r\n         private void SetOrCheckPointDim(PointDimension dim)\r\n         {\r\n            if (Dimensionality != dim)\r\n            {\r\n               if (Dimensionality != PointDimension.NotSet)\r\n                  throw new ArgumentException(\"Input point dimension is not equal to container's point dimension\");\r\n\r\n               Dimensionality = dim;\r\n            }\r\n         }\r\n\r\n         public void AddPoints(UV beg, UV end)\r\n         {\r\n            SetOrCheckPointDim(PointDimension.D2);\r\n\r\n            Points.Add(new Point2D(beg));\r\n            Points.Add(new Point2D(end));\r\n         }\r\n         public void AddPoints(XYZ beg, XYZ end)\r\n         {\r\n            SetOrCheckPointDim(PointDimension.D3);\r\n\r\n            Points.Add(new Point3D(beg));\r\n            Points.Add(new Point3D(end));\r\n         }\r\n         public void AddPoints(IList<XYZ> points)\r\n         {\r\n            SetOrCheckPointDim(PointDimension.D3);\r\n\r\n            foreach (var point in points)\r\n               Points.Add(new Point3D(point));\r\n         }\r\n         public void AddPoints(IList<UV> points)\r\n         {\r\n            SetOrCheckPointDim(PointDimension.D2);\r\n\r\n            foreach (var point in points)\r\n               Points.Add(new Point2D(point));\r\n         }\r\n         public void AddPoints(UV start, UV mid, UV end)\r\n         {\r\n            SetOrCheckPointDim(PointDimension.D2);\r\n\r\n            Points.Add(new Point2D(start));\r\n            Points.Add(new Point2D(mid));\r\n            Points.Add(new Point2D(end));\r\n         }\r\n         public void AddPoints(XYZ start, XYZ mid, XYZ end)\r\n         {\r\n            SetOrCheckPointDim(PointDimension.D3);\r\n\r\n            Points.Add(new Point3D(start));\r\n            Points.Add(new Point3D(mid));\r\n            Points.Add(new Point3D(end));\r\n         }\r\n         public void AddPointList(IfcPointList list)\r\n         {\r\n            SetOrCheckPointDim(list.Dimensionality);\r\n\r\n            Points.AddRange(list.Points);\r\n         }\r\n         public void InsertPointList(int index, IfcPointList list)\r\n         {\r\n            SetOrCheckPointDim(list.Dimensionality);\r\n\r\n            Points.InsertRange(index, list.Points);\r\n         }\r\n      }\r\n      static Dictionary<IFCEntityType, string> m_sIFCEntityTypeToNames = new Dictionary<IFCEntityType, string>();\r\n\r\n      static Dictionary<string, IFCEntityType> m_sIFCEntityNameToTypes = new Dictionary<string, IFCEntityType>();\r\n\r\n      /// <summary>\r\n      /// Event is fired when code reduces length of string to maximal allowed size.\r\n      /// It sends information string which can be logged or shown to user.\r\n      /// </summary>\r\n      /// /// <param name=\"warnText\">Information string with diangostic info about truncation happened.</param>\r\n      public delegate void Notify(string warnText);\r\n      public static event Notify IFCStringTooLongWarn;\r\n      private static void OnIFCStringTooLongWarn(int stepID, string attrName, string val, int reducedToSize)\r\n      {\r\n         string warnMsg = String.Format(\"IFC warning: Size of string \\\"{0}\\\" was reduced to {1} and assigned to attribute \\\"{2}\\\" of IFC entity {3}\", val, reducedToSize, attrName, stepID);\r\n         IFCStringTooLongWarn?.Invoke(warnMsg);\r\n      }\r\n      public static void EventClear()\r\n      {\r\n         IFCStringTooLongWarn = null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets an IFC entity name.\r\n      /// </summary>\r\n      /// <param name=\"entityType\">The entity type.</param>\r\n      /// <returns>The name.</returns>\r\n      public static string GetIFCEntityTypeName(IFCEntityType entityType)\r\n      {\r\n         string entityTypeName;\r\n         if (!m_sIFCEntityTypeToNames.TryGetValue(entityType, out entityTypeName))\r\n         {\r\n            entityTypeName = entityType.ToString();\r\n            m_sIFCEntityTypeToNames[entityType] = entityTypeName;\r\n         }\r\n         return entityTypeName;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets an IFC entity type from a name.\r\n      /// </summary>\r\n      /// <param name=\"entityTypeName\">The entity name.</param>\r\n      /// <returns>The type.</returns>\r\n      public static IFCEntityType GetIFCEntityTypeFromName(string entityTypeName)\r\n      {\r\n         IFCEntityType entityType;\r\n         if (!m_sIFCEntityNameToTypes.TryGetValue(entityTypeName, out entityType))\r\n         {\r\n            entityType = (IFCEntityType)Enum.Parse(typeof(IFCEntityType), entityTypeName, true);\r\n            m_sIFCEntityNameToTypes[entityTypeName] = entityType;\r\n         }\r\n         return entityType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFC instance and cache its type enum.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"type\">The type.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateInstance(IFCFile file, IFCEntityType type)\r\n      {\r\n         IFCAnyHandle hnd = file.CreateInstance(GetIFCEntityTypeName(type));\r\n         return hnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Override the name attribute of a particular handle to a non-null string value.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle, which is assumed to have an attribute called \"Name\".</param>\r\n      /// <param name=\"value\">The non-null value.</param>\r\n      public static void OverrideNameAttribute(IFCAnyHandle handle, string value)\r\n      {\r\n         if (value == null)\r\n            return;\r\n         IFCAnyHandleUtil.SetAttribute(handle, \"Name\", value);\r\n      }\r\n\r\n      /// <summary>\r\n      /// New overload for ValidateSubType that takes the string of IFC type instead of the enum. String must be validated first!\r\n      /// </summary>\r\n      /// <param name=\"handle\"></param>\r\n      /// <param name=\"nullAllowed\"></param>\r\n      /// <param name=\"types\"></param>\r\n      public static void ValidateSubTypeOf(IFCAnyHandle handle, bool nullAllowed, params string[] types)\r\n      {\r\n         if (handle == null)\r\n         {\r\n            if (!nullAllowed)\r\n               throw new ArgumentNullException(\"handle\");\r\n\r\n            return;\r\n         }\r\n         else\r\n         {\r\n            for (int ii = 0; ii < types.Length; ii++)\r\n            {\r\n               if (handle.IsSubTypeOf(types[ii]))\r\n                  return;\r\n            }\r\n         }\r\n         throw new ArgumentException(\"Handle is not SubType of anything.\", \"handle\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Validates if the handle is one of the desired entity type.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"nullAllowed\">True if allow handle to be null, false if not.</param>\r\n      /// <param name=\"types\">The entity types.</param>\r\n      public static void ValidateSubTypeOf(IFCAnyHandle handle, bool nullAllowed, params IFCEntityType[] types)\r\n      {\r\n         if (handle == null)\r\n         {\r\n            if (!nullAllowed)\r\n               throw new ArgumentNullException(\"handle\");\r\n\r\n            return;\r\n         }\r\n         else\r\n         {\r\n            for (int ii = 0; ii < types.Length; ii++)\r\n            {\r\n               if (IsSubTypeOf(handle, types[ii]))\r\n                  return;\r\n            }\r\n         }\r\n         throw new ArgumentException(\"Invalid handle.\", \"handle\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Validates if all the handles in the collection are the instances of the desired entity type.\r\n      /// </summary>\r\n      /// <param name=\"handles\">The handles.</param>\r\n      /// <param name=\"nullAllowed\">True if allow handles to be null, false if not.</param>\r\n      /// <param name=\"types\">The entity types.</param>\r\n      public static void ValidateSubTypeOf(ICollection<IFCAnyHandle> handles, bool nullAllowed, params IFCEntityType[] types)\r\n      {\r\n         if (handles == null)\r\n         {\r\n            if (!nullAllowed)\r\n               throw new ArgumentNullException(\"handles\");\r\n\r\n            return;\r\n         }\r\n         else\r\n         {\r\n            foreach (IFCAnyHandle handle in handles)\r\n            {\r\n               bool foundIsSubType = false;\r\n               for (int ii = 0; ii < types.Length; ii++)\r\n               {\r\n                  if (IsSubTypeOf(handle, types[ii]))\r\n                     foundIsSubType = true;\r\n               }\r\n               if (!foundIsSubType)\r\n                  throw new ArgumentException(\"Contains invalid handle.\", \"handles\");\r\n            }\r\n         }\r\n      }\r\n\r\n      public static void ValidateSubTypeOf(ICollection<IFCAnyHandle> handles, bool nullAllowed, out ICollection<IFCAnyHandle> badEntries, params IFCEntityType[] types)\r\n      {\r\n         badEntries = null;\r\n         if (handles == null)\r\n         {\r\n            if (!nullAllowed)\r\n               throw new ArgumentNullException(\"handles\");\r\n\r\n            return;\r\n         }\r\n         else\r\n         {\r\n            int count = 0;\r\n            foreach (IFCAnyHandle handle in handles)\r\n            {\r\n               bool foundIsSubType = false;\r\n               for (int ii = 0; ii < types.Length; ii++)\r\n               {\r\n                  if (IsSubTypeOf(handle, types[ii]))\r\n                     foundIsSubType = true;\r\n               }\r\n               count++;\r\n               if (!foundIsSubType)\r\n               {\r\n                  //throw new ArgumentException(\"Contains invalid handle.\", \"handles\");\r\n                  if (badEntries == null)\r\n                     badEntries = new HashSet<IFCAnyHandle>();\r\n                  badEntries.Add(handle);\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets string attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If value is null, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"value\">The value.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, string value)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         // This allows you to set empty strings, which may not always be intended, but should be allowed.\r\n         if (value != null)\r\n         {\r\n            int maxStrLen = IFCLimits.CalculateMaxAllowedSize(value);\r\n            if (value.Length > maxStrLen)\r\n            {\r\n               OnIFCStringTooLongWarn(handle.StepId, name, value, maxStrLen);\r\n               value = value.Remove(maxStrLen);\r\n            }\r\n\r\n            handle.SetAttribute(name, IFCData.CreateString(value));\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets enumeration attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If value is null or empty, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"value\">The enumeration value.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, Enum value)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (value != null)\r\n            handle.SetAttribute(name, IFCData.CreateEnumeration(value.ToString()));\r\n      }\r\n\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, string value, bool forEnum)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (value != null && forEnum)\r\n            handle.SetAttribute(name, IFCData.CreateEnumeration(value));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets logical attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If value is null or empty, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"value\">The logical value.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, IFCLogical value)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         handle.SetAttribute(name, IFCData.CreateLogical(value));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets logical attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If value is null or empty, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"value\">The logical value.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, IFCLogical? value)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (value != null)\r\n            handle.SetAttribute(name, IFCData.CreateLogical((IFCLogical)value));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets instance attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If value is null, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"value\">The value.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, IFCAnyHandle value)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (!IsNullOrHasNoValue(value))\r\n            handle.SetAttribute(name, value);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets double attribute for the handle.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"value\">The value.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, double value)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         handle.SetAttribute(name, value);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets double attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If value is null, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"value\">The value.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, double? value)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (value != null)\r\n            handle.SetAttribute(name, (double)value);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets boolean attribute for the handle.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"value\">The boolean value.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, bool value)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         handle.SetAttribute(name, value);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets boolean attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If value is null, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"value\">The boolean value.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, bool? value)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (value != null)\r\n            handle.SetAttribute(name, (bool)value);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets integer attribute for the handle.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"value\">The intereger value.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, int value)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         handle.SetAttribute(name, value);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets integer attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If value is null, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"value\">The intereger value.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, int? value)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (value != null)\r\n            handle.SetAttribute(name, (int)value);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets instance aggregate attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If values collection is null, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"values\">The values.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      /// <exception cref=\"ArgumentException\">If the collection contains null object.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, IList<IFCAnyHandle> values)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (values != null)\r\n         {\r\n            if (values.Contains(null))\r\n               throw new ArgumentException(\"The collection contains null values.\", \"values\");\r\n\r\n            handle.SetAttribute(name, values);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets integer aggregate attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If values collection is null, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"values\">The values.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, IList<int> values)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (values != null)\r\n         {\r\n            handle.SetAttribute(name, values);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets double aggregate attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If values collection is null, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"values\">The values.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, IList<double> values)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (values != null)\r\n         {\r\n            handle.SetAttribute(name, values);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets List of List of double value attribute for the handle\r\n      /// </summary>\r\n      /// <param name=\"handle\">the handle</param>\r\n      /// <param name=\"name\">The attribute name</param>\r\n      /// <param name=\"values\">The values</param>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, IList<IList<double>> values,\r\n          int? outerListMin, int? outerListMax, int? innerListMin, int? innerListMax)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (values != null)\r\n         {\r\n            if (outerListMax != null)\r\n               if (values.Count > outerListMax)\r\n                  throw new ArgumentException(\"The outer List is larger than max. bound\");\r\n            if (outerListMin != null)\r\n               if (values.Count < outerListMin)\r\n                  throw new ArgumentException(\"The outer List is less than min. bound\");\r\n\r\n            IFCAggregate outerList = handle.CreateAggregateAttribute(name);\r\n\r\n            foreach (List<double> valuesItem in values)\r\n            {\r\n               if (innerListMax != null)\r\n                  if (valuesItem.Count > innerListMax)\r\n                     throw new ArgumentException(\"The inner List is larger than max. bound\");\r\n               if (innerListMin != null)\r\n                  if (valuesItem.Count < innerListMin)\r\n                     throw new ArgumentException(\"The inner List is less than min. bound\");\r\n\r\n               IFCAggregate innerList = outerList.AddAggregate();\r\n\r\n               foreach (double Dvalue in valuesItem)\r\n               {\r\n                  try\r\n                  {\r\n                     innerList.Add(IFCData.CreateDouble(Dvalue));\r\n                  }\r\n                  catch\r\n                  {\r\n                  }\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets List of List of double value attribute for the handle\r\n      /// </summary>\r\n      /// <param name=\"handle\">the handle</param>\r\n      /// <param name=\"name\">The attribute name</param>\r\n      /// <param name=\"pointList\">The points</param>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, IFCAnyHandleUtil.IfcPointList pointList,\r\n          int? outerListMin, int? outerListMax)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (pointList != null)\r\n         {\r\n            if (outerListMax != null)\r\n               if (pointList.Count > outerListMax)\r\n                  throw new ArgumentException(\"The outer List is larger than max. bound\");\r\n            if (outerListMin != null)\r\n               if (pointList.Count < outerListMin)\r\n                  throw new ArgumentException(\"The outer List is less than min. bound\");\r\n\r\n            IFCAggregate outerList = handle.CreateAggregateAttribute(name);\r\n\r\n            if (pointList.Dimensionality == IfcPointList.PointDimension.D3)\r\n            {\r\n               foreach (PointBase point in pointList.Points)\r\n               {\r\n                  Point3D point3D = point as Point3D;\r\n\r\n                  XYZ xyz = point3D.coords;\r\n                  IFCAggregate innerList = outerList.AddAggregate();\r\n                  innerList.Add(IFCData.CreateDouble(xyz.X));\r\n                  innerList.Add(IFCData.CreateDouble(xyz.Y));\r\n                  innerList.Add(IFCData.CreateDouble(xyz.Z));\r\n               }\r\n            }\r\n            else if (pointList.Dimensionality == IfcPointList.PointDimension.D2)\r\n            {\r\n               foreach (PointBase point in pointList.Points)\r\n               {\r\n                  Point2D point2D = point as Point2D;\r\n\r\n                  UV uv = point2D.coords;\r\n                  IFCAggregate innerList = outerList.AddAggregate();\r\n                  innerList.Add(IFCData.CreateDouble(uv.U));\r\n                  innerList.Add(IFCData.CreateDouble(uv.V));\r\n               }\r\n            }\r\n            else\r\n               throw new ArgumentException(\"Incorrect point dimension requirement\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets List of List of integer value attribute for the handle\r\n      /// </summary>\r\n      /// <param name=\"handle\">the handle</param>\r\n      /// <param name=\"name\">the attribute name</param>\r\n      /// <param name=\"values\">the attribute value to set</param>\r\n      /// <param name=\"outerListMin\">the the array list lower bound for the outer list</param>\r\n      /// <param name=\"outerListMax\">the the array list upper bound for the outer list</param>\r\n      /// <param name=\"innerListMin\">the the array list lower bound for the inner list</param>\r\n      /// <param name=\"innerListMax\">the the array list upper bound for the inner list</param>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, IList<IList<int>> values,\r\n                  int? outerListMin, int? outerListMax, int? innerListMin, int? innerListMax)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (values != null)\r\n         {\r\n            if (outerListMax != null)\r\n               if (values.Count > outerListMax)\r\n                  throw new ArgumentException(\"The outer List is larger than max. bound\");\r\n            if (outerListMin != null)\r\n               if (values.Count < outerListMin)\r\n                  throw new ArgumentException(\"The outer List is less than min. bound\");\r\n\r\n            IFCAggregate outerList = handle.CreateAggregateAttribute(name);\r\n\r\n            foreach (IList<int> valuesItem in values)\r\n            {\r\n               if (innerListMax != null)\r\n                  if (valuesItem.Count > innerListMax)\r\n                     throw new ArgumentException(\"The inner List is larger than max. bound\");\r\n               if (innerListMin != null)\r\n                  if (valuesItem.Count < innerListMin)\r\n                     throw new ArgumentException(\"The inner List is less than min. bound\");\r\n\r\n               IFCAggregate innerList = outerList.AddAggregate();\r\n\r\n               foreach (int Ivalue in valuesItem)\r\n               {\r\n                  try\r\n                  {\r\n                     innerList.Add(IFCData.CreateInteger(Ivalue));\r\n                  }\r\n                  catch\r\n                  {\r\n                  }\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets List of List of any IFC instance attribute for the handle\r\n      /// </summary>\r\n      /// <param name=\"handle\">the handle</param>\r\n      /// <param name=\"name\">the attribute name</param>\r\n      /// <param name=\"values\">the attribute value to set</param>\r\n      /// <param name=\"outerListMin\">the the array list lower bound for the outer list</param>\r\n      /// <param name=\"outerListMax\">the the array list upper bound for the outer list</param>\r\n      /// <param name=\"innerListMin\">the the array list lower bound for the inner list</param>\r\n      /// <param name=\"innerListMax\">the the array list upper bound for the inner list</param>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, IList<IList<IFCAnyHandle>> values,\r\n          int? outerListMin, int? outerListMax, int? innerListMin, int? innerListMax)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (values != null)\r\n         {\r\n            if (outerListMax != null)\r\n               if (values.Count > outerListMax)\r\n                  throw new ArgumentException(\"The outer List is larger than max. bound\");\r\n            if (outerListMin != null)\r\n               if (values.Count < outerListMin)\r\n                  throw new ArgumentException(\"The outer List is less than min. bound\");\r\n\r\n            IFCAggregate outerList = handle.CreateAggregateAttribute(name);\r\n\r\n            foreach (List<IFCAnyHandle> valuesItem in values)\r\n            {\r\n               if (innerListMax != null)\r\n                  if (valuesItem.Count > innerListMax)\r\n                     throw new ArgumentException(\"The inner List is larger than max. bound\");\r\n               if (innerListMin != null)\r\n                  if (valuesItem.Count < innerListMin)\r\n                     throw new ArgumentException(\"The inner List is less than min. bound\");\r\n\r\n               IFCAggregate innerList = outerList.AddAggregate();\r\n\r\n               foreach (IFCAnyHandle AHvalue in valuesItem)\r\n               {\r\n                  try\r\n                  {\r\n                     innerList.Add(IFCData.CreateIFCAnyHandle(AHvalue));\r\n                  }\r\n                  catch { }\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets string aggregate attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If values collection is null, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"values\">The values.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, IList<string> values)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (values != null)\r\n         {\r\n            handle.SetAttribute(name, values);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets IFCValue aggregate attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If values collection is null, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"values\">The values.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, IList<IFCData> values)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (values != null)\r\n         {\r\n            if (values.Contains(null))\r\n               throw new ArgumentException(\"The collection contains null values.\", \"values\");\r\n\r\n            IFCAggregate aggregateAttribute = handle.CreateAggregateAttribute(name);\r\n            if (aggregateAttribute != null)\r\n            {\r\n               foreach (IFCData value in values)\r\n               {\r\n                  aggregateAttribute.Add(value);\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets instance aggregate attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If values collection is null, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"values\">The values.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      /// <exception cref=\"ArgumentException\">If the collection contains null object.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, ISet<IFCAnyHandle> values)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (values != null)\r\n         {\r\n            if (values.Contains(null))\r\n               throw new ArgumentException(\"The collection contains null values.\", \"values\");\r\n\r\n            handle.SetAttribute(name, values);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets integer aggregate attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If values collection is null, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"values\">The values.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, ISet<int> values)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (values != null)\r\n         {\r\n            handle.SetAttribute(name, values);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets double aggregate attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If values collection is null, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"values\">The values.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, ISet<double> values)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (values != null)\r\n         {\r\n            handle.SetAttribute(name, values);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets string aggregate attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If values collection is null, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"values\">The values.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, ISet<string> values)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (values != null)\r\n         {\r\n            handle.SetAttribute(name, values);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets IFCValue aggregate attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If values collection is null, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"values\">The values.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, ISet<IFCData> values)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (values != null)\r\n         {\r\n            if (values.Contains(null))\r\n               throw new ArgumentException(\"The collection contains null values.\", \"values\");\r\n\r\n            IFCAggregate aggregateAttribute = handle.CreateAggregateAttribute(name);\r\n            if (aggregateAttribute != null)\r\n            {\r\n               foreach (IFCData value in values)\r\n               {\r\n                  aggregateAttribute.Add(value);\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets IFCValue attribute for the handle.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If value is null, the attribute will be unset.\r\n      /// </remarks>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"value\">The value.</param>\r\n      /// <exception cref=\"ArgumentException\">If the name is null or empty.</exception>\r\n      public static void SetAttribute(IFCAnyHandle handle, string name, IFCData value)\r\n      {\r\n         if (String.IsNullOrEmpty(name))\r\n            throw new ArgumentException(\"The name is empty.\", \"name\");\r\n\r\n         if (value != null)\r\n         {\r\n            handle.SetAttribute(name, value);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets aggregate attribute values from a handle.\r\n      /// </summary>\r\n      /// <typeparam name=\"T\">The return type.</typeparam>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The collection of attribute values.</returns>\r\n      public static T GetAggregateAttribute<T>(IFCAnyHandle handle, string name) where T : ICollection<IFCData>, new()\r\n      {\r\n         if (IsNullOrHasNoValue(handle))\r\n            throw new ArgumentException(\"Invalid handle.\");\r\n\r\n         IFCData ifcData = handle.GetAttribute(name);\r\n\r\n         T aggregateAttribute = default(T);\r\n\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.Aggregate)\r\n         {\r\n            IFCAggregate aggregate = ifcData.AsAggregate();\r\n            if (aggregate != null)\r\n            {\r\n               aggregateAttribute = new T();\r\n               foreach (IFCData val in aggregate)\r\n               {\r\n                  aggregateAttribute.Add(val);\r\n               }\r\n            }\r\n         }\r\n         return aggregateAttribute;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets aggregate attribute int values from a handle.\r\n      /// </summary>\r\n      /// <typeparam name=\"T\">The return type.</typeparam>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The collection of attribute values.</returns>\r\n      public static T GetAggregateIntAttribute<T>(IFCAnyHandle handle, string name) where T : ICollection<int>, new()\r\n      {\r\n         if (IsNullOrHasNoValue(handle))\r\n            throw new ArgumentException(\"Invalid handle.\");\r\n\r\n         IFCData ifcData = handle.GetAttribute(name);\r\n\r\n         T aggregateAttribute = default(T);\r\n\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.Aggregate)\r\n         {\r\n            IFCAggregate aggregate = ifcData.AsAggregate();\r\n            if (aggregate != null)\r\n            {\r\n               aggregateAttribute = new T();\r\n               foreach (IFCData val in aggregate)\r\n               {\r\n                  if (val.PrimitiveType == IFCDataPrimitiveType.Integer)\r\n                  {\r\n                     aggregateAttribute.Add(val.AsInteger());\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         return aggregateAttribute;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets aggregate attribute double values from a handle.\r\n      /// </summary>\r\n      /// <typeparam name=\"T\">The return type.</typeparam>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The collection of attribute values.</returns>\r\n      public static T GetAggregateDoubleAttribute<T>(IFCAnyHandle handle, string name) where T : ICollection<double>, new()\r\n      {\r\n         if (IsNullOrHasNoValue(handle))\r\n            throw new ArgumentException(\"Invalid handle.\");\r\n\r\n         IFCData ifcData = handle.GetAttribute(name);\r\n\r\n         T aggregateAttribute = default(T);\r\n\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.Aggregate)\r\n         {\r\n            IFCAggregate aggregate = ifcData.AsAggregate();\r\n            if (aggregate != null)\r\n            {\r\n               aggregateAttribute = new T();\r\n               foreach (IFCData val in aggregate)\r\n               {\r\n                  if (val.PrimitiveType == IFCDataPrimitiveType.Double)\r\n                  {\r\n                     aggregateAttribute.Add(val.AsDouble());\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         return aggregateAttribute;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets aggregate attribute string values from a handle.\r\n      /// </summary>\r\n      /// <typeparam name=\"T\">The return type.</typeparam>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The collection of attribute values.</returns>\r\n      public static T GetAggregateStringAttribute<T>(IFCAnyHandle handle, string name) where T : ICollection<string>, new()\r\n      {\r\n         if (IsNullOrHasNoValue(handle))\r\n            throw new ArgumentException(\"Invalid handle.\");\r\n\r\n         IFCData ifcData = handle.GetAttribute(name);\r\n\r\n         T aggregateAttribute = default(T);\r\n\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.Aggregate)\r\n         {\r\n            IFCAggregate aggregate = ifcData.AsAggregate();\r\n            if (aggregate != null)\r\n            {\r\n               aggregateAttribute = new T();\r\n               foreach (IFCData val in aggregate)\r\n               {\r\n                  if (val.PrimitiveType == IFCDataPrimitiveType.String)\r\n                  {\r\n                     aggregateAttribute.Add(val.AsString());\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         return aggregateAttribute;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets aggregate attribute instance values from a handle.\r\n      /// </summary>\r\n      /// <typeparam name=\"T\">The return type.</typeparam>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The collection of attribute values.</returns>\r\n      public static T GetValidAggregateInstanceAttribute<T>(IFCAnyHandle handle, string name) where T : ICollection<IFCAnyHandle>, new()\r\n      {\r\n         IFCData ifcData = handle.GetAttribute(name);\r\n\r\n         T aggregateAttribute = default(T);\r\n\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.Aggregate)\r\n         {\r\n            IFCAggregate aggregate = ifcData.AsAggregate();\r\n            if (aggregate != null)\r\n            {\r\n               aggregateAttribute = new T();\r\n               foreach (IFCData val in aggregate)\r\n               {\r\n                  if (val.PrimitiveType == IFCDataPrimitiveType.Instance)\r\n                  {\r\n                     aggregateAttribute.Add(val.AsInstance());\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         return aggregateAttribute;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets aggregate attribute instance values from a handle.\r\n      /// </summary>\r\n      /// <typeparam name=\"T\">The return type.</typeparam>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The collection of attribute values.</returns>\r\n      public static T GetAggregateInstanceAttribute<T>(IFCAnyHandle handle, string name) where T : ICollection<IFCAnyHandle>, new()\r\n      {\r\n         if (IsNullOrHasNoValue(handle))\r\n            throw new ArgumentException(\"Invalid handle.\");\r\n\r\n         return GetValidAggregateInstanceAttribute<T>(handle, name);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the IFCEntityType of a handle.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <returns>The IFCEntityType.</returns>\r\n      public static IFCEntityType GetEntityType(IFCAnyHandle handle)\r\n      {\r\n         if (handle == null)\r\n            throw new ArgumentNullException(\"handle\");\r\n\r\n         // We used to check .HasValue here and throw, but handle.TypeName will\r\n         // throw an InvalidOperationException here anyway, so this seems\r\n         // like a redundant step.\r\n\r\n         IFCEntityType entityType = GetIFCEntityTypeFromName(handle.TypeName);\r\n\r\n         return entityType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the object type of a handle.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <returns>The object type, or null if it doesn't exist.</returns>\r\n      public static string GetObjectType(IFCAnyHandle handle)\r\n      {\r\n         if (!IsSubTypeOf(handle, IFCEntityType.IfcObject))\r\n            return null;\r\n\r\n         IFCData ifcData = handle.GetAttribute(\"ObjectType\");\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.String)\r\n            return ifcData.AsString();\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the coordinates of an IfcCartesianPoint.\r\n      /// </summary>\r\n      /// <param name=\"axisPlacement\">The IfcCartesianPoint.</param>\r\n      /// <returns>The list of coordinates.</returns>\r\n      public static IList<double> GetCoordinates(IFCAnyHandle cartesianPoint)\r\n      {\r\n         IList<double> coordinates = null;\r\n\r\n         if (!IsSubTypeOf(cartesianPoint, IFCEntityType.IfcCartesianPoint))\r\n            throw new ArgumentException(\"Not an IfcCartesianPoint handle.\");\r\n\r\n         IFCData ifcData = cartesianPoint.GetAttribute(\"Coordinates\");\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.Aggregate)\r\n         {\r\n            IFCAggregate aggregate = ifcData.AsAggregate();\r\n            if (aggregate != null && aggregate.Count > 0)\r\n            {\r\n               coordinates = new List<double>();\r\n               foreach (IFCData val in aggregate)\r\n               {\r\n                  if (val.PrimitiveType == IFCDataPrimitiveType.Double)\r\n                  {\r\n                     coordinates.Add(val.AsDouble());\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         return coordinates;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets an arbitrary instance attribute.\r\n      /// </summary>\r\n      /// <param name=\"name\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The handle to the attribute.</returns>\r\n      public static IFCAnyHandle GetValidInstanceAttribute(IFCAnyHandle hnd, string name)\r\n      {\r\n         try\r\n         {\r\n            IFCData ifcData = hnd.GetAttribute(name);\r\n            if (ifcData.PrimitiveType == IFCDataPrimitiveType.Instance)\r\n               return ifcData.AsInstance();\r\n         }\r\n         catch { }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets an arbitrary instance attribute.\r\n      /// </summary>\r\n      /// <param name=\"name\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The handle to the attribute.</returns>\r\n      public static IFCAnyHandle GetInstanceAttribute(IFCAnyHandle hnd, string name)\r\n      {\r\n         if (IsNullOrHasNoValue(hnd))\r\n            throw new ArgumentException(\"Invalid handle.\");\r\n\r\n         return GetValidInstanceAttribute(hnd, name);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets an arbitrary string attribute.\r\n      /// </summary>\r\n      /// <param name=\"name\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The string.</returns>\r\n      public static string GetStringAttribute(IFCAnyHandle hnd, string name)\r\n      {\r\n         if (IsNullOrHasNoValue(hnd))\r\n            throw new ArgumentException(\"Invalid handle.\");\r\n\r\n         try\r\n         {\r\n            IFCData ifcData = hnd.GetAttribute(name);\r\n            if (ifcData.PrimitiveType == IFCDataPrimitiveType.String)\r\n               return ifcData.AsString();\r\n         }\r\n         catch { }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets an arbitrary integer attribute.\r\n      /// </summary>\r\n      /// <param name=\"name\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The integer.</returns>\r\n      public static int? GetIntAttribute(IFCAnyHandle hnd, string name)\r\n      {\r\n         if (IsNullOrHasNoValue(hnd))\r\n            throw new ArgumentException(\"Invalid handle.\");\r\n\r\n         try\r\n         {\r\n            IFCData ifcData = hnd.GetAttribute(name);\r\n            if (ifcData.PrimitiveType == IFCDataPrimitiveType.Integer)\r\n               return ifcData.AsInteger();\r\n         }\r\n         catch { }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets an arbitrary double attribute.\r\n      /// </summary>\r\n      /// <param name=\"hnd\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The double.</returns>\r\n      public static double? GetDoubleAttribute(IFCAnyHandle hnd, string name)\r\n      {\r\n         if (IsNullOrHasNoValue(hnd))\r\n            throw new ArgumentException(\"Invalid handle.\");\r\n\r\n         try\r\n         {\r\n            IFCData ifcData = hnd.GetAttribute(name);\r\n            if (ifcData.PrimitiveType == IFCDataPrimitiveType.Double)\r\n               return ifcData.AsDouble();\r\n         }\r\n         catch { }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets a boolean attribute.\r\n      /// </summary>\r\n      /// <param name=\"hnd\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The boolean value.</returns>\r\n      public static bool? GetBooleanAttribute(IFCAnyHandle hnd, string name)\r\n      {\r\n         if (IsNullOrHasNoValue(hnd))\r\n            throw new ArgumentException(\"Invalid handle.\");\r\n\r\n         try\r\n         {\r\n            IFCData ifcData = hnd.GetAttribute(name);\r\n            if (ifcData.PrimitiveType == IFCDataPrimitiveType.Boolean)\r\n               return ifcData.AsBoolean();\r\n         }\r\n         catch { }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets an IFCLogical attribute.\r\n      /// </summary>\r\n      /// <param name=\"hnd\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The boolean value.</returns>\r\n      public static IFCLogical? GetLogicalAttribute(IFCAnyHandle hnd, string name)\r\n      {\r\n         if (IsNullOrHasNoValue(hnd))\r\n            throw new ArgumentException(\"Invalid handle.\");\r\n\r\n         try\r\n         {\r\n            IFCData ifcData = hnd.GetAttribute(name);\r\n            if (ifcData.PrimitiveType == IFCDataPrimitiveType.Logical)\r\n               return ifcData.AsLogical();\r\n         }\r\n         catch { }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets an arbitrary enumeration attribute.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// This function returns the string value of the enumeration.  It must be then manually\r\n      /// converted to the appropriate enum value by the called.\r\n      /// </remarks>\r\n      /// <param name=\"name\">The handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The string.</returns>\r\n      public static string GetEnumerationAttribute(IFCAnyHandle hnd, string name)\r\n      {\r\n         if (IsNullOrHasNoValue(hnd))\r\n            throw new ArgumentException(\"Invalid handle.\");\r\n\r\n         try\r\n         {\r\n            IFCData ifcData = hnd.GetAttribute(name);\r\n            if (ifcData.PrimitiveType == IFCDataPrimitiveType.Enumeration)\r\n               return ifcData.AsString();\r\n         }\r\n         catch { }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the location of an IfcPlacement.\r\n      /// </summary>\r\n      /// <param name=\"axisPlacement\">The IfcPlacement.</param>\r\n      /// <returns>The IfcCartesianPoint.</returns>\r\n      public static IFCAnyHandle GetLocation(IFCAnyHandle axisPlacement)\r\n      {\r\n         if (!IsSubTypeOf(axisPlacement, IFCEntityType.IfcPlacement))\r\n            throw new ArgumentException(\"Not an IfcPlacement handle.\");\r\n\r\n         return GetInstanceAttribute(axisPlacement, \"Location\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the ObjectPlacement of an IfcProduct.\r\n      /// </summary>\r\n      /// <param name=\"product\">The IfcProduct.</param>\r\n      /// <returns>The IfcObjectPlacement.</returns>\r\n      public static IFCAnyHandle GetObjectPlacement(IFCAnyHandle product)\r\n      {\r\n         if (!IsSubTypeOf(product, IFCEntityType.IfcProduct))\r\n            throw new ArgumentException(\"Not an IfcProduct handle.\");\r\n\r\n         return GetInstanceAttribute(product, \"ObjectPlacement\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if an object handle has IfcRelDecomposes.\r\n      /// </summary>\r\n      /// <param name=\"objectHandle\">The object handle.</param>\r\n      /// <returns>True if it has, false if not.</returns>\r\n      public static bool HasRelDecomposes(IFCAnyHandle objectHandle)\r\n      {\r\n         if (!IsSubTypeOf(objectHandle, IFCEntityType.IfcObject) &&\r\n             !IsSubTypeOf(objectHandle, IFCEntityType.IfcTypeObject))\r\n            throw new ArgumentException(\"The operation is not valid for this handle.\");\r\n\r\n         IFCData ifcData = objectHandle.GetAttribute(\"Decomposes\");\r\n\r\n         if (!ifcData.HasValue)\r\n            return false;\r\n         else if (ifcData.PrimitiveType == IFCDataPrimitiveType.Aggregate)\r\n         {\r\n            IFCAggregate aggregate = ifcData.AsAggregate();\r\n            if (aggregate != null && aggregate.Count > 0)\r\n               return true;\r\n            else\r\n               return false;\r\n         }\r\n\r\n         throw new InvalidOperationException(\"Failed to get decomposes.\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets IfcRelDecomposes of an object handle.\r\n      /// </summary>\r\n      /// <param name=\"objectHandle\">The object handle.</param>\r\n      /// <returns>The collection of IfcRelDecomposes.</returns>\r\n      public static HashSet<IFCAnyHandle> GetRelDecomposes(IFCAnyHandle objectHandle)\r\n      {\r\n         if (!IsSubTypeOf(objectHandle, IFCEntityType.IfcObject) &&\r\n             !IsSubTypeOf(objectHandle, IFCEntityType.IfcTypeObject))\r\n            throw new ArgumentException(\"The operation is not valid for this handle.\");\r\n\r\n         HashSet<IFCAnyHandle> decomposes = new HashSet<IFCAnyHandle>();\r\n         IFCData ifcData = objectHandle.GetAttribute(\"IsDecomposedBy\");\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.Aggregate)\r\n         {\r\n            IFCAggregate aggregate = ifcData.AsAggregate();\r\n            if (aggregate != null && aggregate.Count > 0)\r\n            {\r\n               foreach (IFCData val in aggregate)\r\n               {\r\n                  if (val.PrimitiveType == IFCDataPrimitiveType.Instance)\r\n                  {\r\n                     decomposes.Add(val.AsInstance());\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         return decomposes;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets IfcMaterialDefinitionRepresentation inverse set of an IfcMaterial handle.\r\n      /// </summary>\r\n      /// <param name=\"objectHandle\">The IfcMaterial handle.</param>\r\n      /// <returns>The collection of IfcMaterialDefinitionRepresentation.</returns>\r\n      public static HashSet<IFCAnyHandle> GetHasRepresentation(IFCAnyHandle objectHandle)\r\n      {\r\n         if (!IsSubTypeOf(objectHandle, IFCEntityType.IfcMaterial))\r\n            throw new ArgumentException(\"The operation is not valid for this handle.\");\r\n\r\n         HashSet<IFCAnyHandle> hasRepresentation = new HashSet<IFCAnyHandle>();\r\n         IFCData ifcData = objectHandle.GetAttribute(\"HasRepresentation\");\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.Aggregate)\r\n         {\r\n            IFCAggregate aggregate = ifcData.AsAggregate();\r\n            if (aggregate != null && aggregate.Count > 0)\r\n            {\r\n               foreach (IFCData val in aggregate)\r\n               {\r\n                  if (val.PrimitiveType == IFCDataPrimitiveType.Instance)\r\n                  {\r\n                     hasRepresentation.Add(val.AsInstance());\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         return hasRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets representation of a product handle.\r\n      /// </summary>\r\n      /// <param name=\"productHandle\">The product handle.</param>\r\n      /// <returns>The representation handle.</returns>\r\n      public static IFCAnyHandle GetRepresentation(IFCAnyHandle productHandle)\r\n      {\r\n         if (!IsSubTypeOf(productHandle, IFCEntityType.IfcProduct))\r\n            throw new ArgumentException(\"The operation is not valid for this handle.\");\r\n\r\n         IFCData ifcData = productHandle.GetAttribute(\"Representation\");\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.Instance)\r\n         {\r\n            return ifcData.AsInstance();\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets ContextOfItems of a representation handle.\r\n      /// </summary>\r\n      /// <param name=\"representation\">The representation.</param>\r\n      /// <returns>The ContextOfItems handle.</returns>\r\n      public static IFCAnyHandle GetContextOfItems(IFCAnyHandle representation)\r\n      {\r\n         if (!IsSubTypeOf(representation, IFCEntityType.IfcRepresentation))\r\n            throw new ArgumentException(\"The operation is not valid for this handle.\");\r\n\r\n         IFCData ifcData = representation.GetAttribute(\"ContextOfItems\");\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.Instance)\r\n         {\r\n            return ifcData.AsInstance();\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets Identifier of a representation handle.\r\n      /// </summary>\r\n      /// <param name=\"representation\">The representation item.</param>\r\n      /// <returns>The RepresentationIdentifier string.</returns>\r\n      public static string GetRepresentationIdentifier(IFCAnyHandle representation)\r\n      {\r\n         if (!IsSubTypeOf(representation, IFCEntityType.IfcRepresentation))\r\n            throw new ArgumentException(\"The operation is not valid for this handle.\");\r\n\r\n         IFCData ifcData = representation.GetAttribute(\"RepresentationIdentifier\");\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.String)\r\n         {\r\n            return ifcData.AsString();\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets RepresentationType of a representation handle.\r\n      /// </summary>\r\n      /// <param name=\"representation\">The representation.</param>\r\n      /// <returns>The RepresentationType string.</returns>\r\n      public static string GetRepresentationType(IFCAnyHandle representation)\r\n      {\r\n         if (!IsSubTypeOf(representation, IFCEntityType.IfcRepresentation))\r\n            throw new ArgumentException(\"The operation is not valid for this handle.\");\r\n\r\n         IFCData ifcData = representation.GetAttribute(\"RepresentationType\");\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.String)\r\n         {\r\n            return ifcData.AsString();\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the base representation in case of MappedItem\r\n      /// </summary>\r\n      /// <param name=\"representation\">the representation</param>\r\n      /// <returns>the base representation type</returns>\r\n      /// <exception cref=\"ArgumentException\"></exception>\r\n      public static string GetBaseRepresentationType(IFCAnyHandle representation)\r\n      {\r\n         if (!IsSubTypeOf(representation, IFCEntityType.IfcRepresentation))\r\n            throw new ArgumentException(\"The operation is not valid for this handle.\");\r\n\r\n         IFCData ifcData = representation.GetAttribute(\"RepresentationType\");\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.String)\r\n         {\r\n            string repType = ifcData.AsString();\r\n            if (repType.Equals(\"MappedRepresentation\", StringComparison.InvariantCultureIgnoreCase))\r\n            {\r\n               HashSet<IFCAnyHandle> mapItems = GetItems(representation);\r\n               if (mapItems.Count > 0)\r\n               {\r\n                  // The mapped representation should be of the same type. Use the first one will suffice\r\n                  IFCAnyHandle mapSrc = GetInstanceAttribute(mapItems.First(), \"MappingSource\");\r\n                  if (!IsNullOrHasNoValue(mapSrc))\r\n                  {\r\n                     IFCAnyHandle mapRep = GetInstanceAttribute(mapSrc, \"MappedRepresentation\");\r\n                     if (!IsNullOrHasNoValue(mapRep))\r\n                     {\r\n                        repType = GetRepresentationType(mapRep);\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n            return repType;\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets set of Items of a representation handle.\r\n      /// </summary>\r\n      /// <param name=\"representation\">The representation handle.</param>\r\n      /// <returns>The set of items.</returns>\r\n      public static HashSet<IFCAnyHandle> GetItems(IFCAnyHandle representation)\r\n      {\r\n         if (!IsSubTypeOf(representation, IFCEntityType.IfcRepresentation))\r\n            throw new ArgumentException(\"The operation is not valid for this handle.\");\r\n\r\n         HashSet<IFCAnyHandle> items = new HashSet<IFCAnyHandle>();\r\n         IFCData ifcData = representation.GetAttribute(\"Items\");\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.Aggregate)\r\n         {\r\n            IFCAggregate aggregate = ifcData.AsAggregate();\r\n            if (aggregate != null && aggregate.Count > 0)\r\n            {\r\n               foreach (IFCData val in aggregate)\r\n               {\r\n                  if (val.PrimitiveType == IFCDataPrimitiveType.Instance)\r\n                  {\r\n                     items.Add(val.AsInstance());\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         return items;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets representations of a representation handle.\r\n      /// </summary>\r\n      /// <param name=\"representation\">The representation handle.</param>\r\n      /// <returns>The list of representations.</returns>\r\n      public static List<IFCAnyHandle> GetRepresentations(IFCAnyHandle representation)\r\n      {\r\n         if (!IsSubTypeOf(representation, IFCEntityType.IfcProductRepresentation))\r\n            throw new ArgumentException(\"The operation is not valid for this handle.\");\r\n\r\n         List<IFCAnyHandle> representations = new List<IFCAnyHandle>();\r\n         IFCData ifcData = representation.GetAttribute(\"Representations\");\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.Aggregate)\r\n         {\r\n            IFCAggregate aggregate = ifcData.AsAggregate();\r\n            if (aggregate != null && aggregate.Count > 0)\r\n            {\r\n               foreach (IFCData val in aggregate)\r\n               {\r\n                  if (val.PrimitiveType == IFCDataPrimitiveType.Instance)\r\n                  {\r\n                     representations.Add(val.AsInstance());\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         return representations;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets Opening representations of a representation handle.\r\n      /// </summary>\r\n      /// <param name=\"representation\">The representation handle.</param>\r\n      /// <returns>The list of representations.</returns>\r\n      public static List<IFCAnyHandle> GetOpenings(IFCAnyHandle ifcElement)\r\n      {\r\n         if (!IsSubTypeOf(ifcElement, IFCEntityType.IfcElement))\r\n            throw new ArgumentException(\"The operation is not valid for this handle.\");\r\n\r\n         List<IFCAnyHandle> openings = new List<IFCAnyHandle>();\r\n         IFCData ifcData = ifcElement.GetAttribute(\"HasOpenings\");\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.Aggregate)\r\n         {\r\n            IFCAggregate aggregate = ifcData.AsAggregate();\r\n            if (aggregate != null && aggregate.Count > 0)\r\n            {\r\n               foreach (IFCData val in aggregate)\r\n               {\r\n                  if (val.PrimitiveType == IFCDataPrimitiveType.Instance)\r\n                  {\r\n                     IFCAnyHandle relVoidElement = val.AsInstance();\r\n                     IFCData openingElementData = relVoidElement.GetAttribute(\"RelatedOpeningElement\");\r\n                     openings.Add(openingElementData.AsInstance());\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         return openings;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds representations of a product representation.\r\n      /// </summary>\r\n      /// <param name=\"productRepresentation\">The product representation handle.</param>\r\n      /// <param name=\"representations\">The representations handle.</param>\r\n      public static void AddRepresentations(IFCAnyHandle productRepresentation, IList<IFCAnyHandle> representations)\r\n      {\r\n         if (representations == null)\r\n            throw new ArgumentNullException(\"representations\");\r\n\r\n         if (!IsSubTypeOf(productRepresentation, IFCEntityType.IfcProductRepresentation))\r\n            throw new ArgumentException(\"The operation is not valid for this handle.\");\r\n\r\n         IFCAggregate representationsAggr = productRepresentation.GetAttribute(\"Representations\").AsAggregate();\r\n         if (representationsAggr == null)\r\n         {\r\n            productRepresentation.SetAttribute(\"Representations\", representations);\r\n         }\r\n         else\r\n         {\r\n            foreach (IFCAnyHandle representation in representations)\r\n            {\r\n               representationsAggr.Add(IFCData.CreateIFCAnyHandle(representation));\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets Name of an IfcProductDefinitionShape handle.\r\n      /// </summary>\r\n      /// <param name=\"representation\">The IfcProductDefinitionShape.</param>\r\n      /// <returns>The Name string.</returns>\r\n      public static string GetProductDefinitionShapeName(IFCAnyHandle productDefinitionShape)\r\n      {\r\n         if (!IsSubTypeOf(productDefinitionShape, IFCEntityType.IfcProductDefinitionShape))\r\n            throw new ArgumentException(\"The operation is not valid for this handle.\");\r\n\r\n         IFCData ifcData = productDefinitionShape.GetAttribute(\"Name\");\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.String)\r\n         {\r\n            return ifcData.AsString();\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets Description of an IfcProductDefinitionShape handle.\r\n      /// </summary>\r\n      /// <param name=\"representation\">The IfcProductDefinitionShape.</param>\r\n      /// <returns>The Description string.</returns>\r\n      public static string GetProductDefinitionShapeDescription(IFCAnyHandle productDefinitionShape)\r\n      {\r\n         if (!IsSubTypeOf(productDefinitionShape, IFCEntityType.IfcProductDefinitionShape))\r\n            throw new ArgumentException(\"The operation is not valid for this handle.\");\r\n\r\n         IFCData ifcData = productDefinitionShape.GetAttribute(\"Description\");\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.String)\r\n         {\r\n            return ifcData.AsString();\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets representations of a product handle.\r\n      /// </summary>\r\n      /// <param name=\"productHandle\">The product handle.</param>\r\n      /// <returns>The list of representations.</returns>\r\n      public static List<IFCAnyHandle> GetProductRepresentations(IFCAnyHandle productHandle)\r\n      {\r\n         if (!IsSubTypeOf(productHandle, IFCEntityType.IfcProduct))\r\n            throw new ArgumentException(\"The operation is not valid for this handle.\");\r\n\r\n         IFCAnyHandle representation = GetRepresentation(productHandle);\r\n         if (!IsNullOrHasNoValue(representation))\r\n         {\r\n            return GetRepresentations(representation);\r\n         }\r\n\r\n         return new List<IFCAnyHandle>();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds representations to a product handle.\r\n      /// </summary>\r\n      /// <param name=\"productHandle\">The product handle.</param>\r\n      /// <param name=\"productHandle\">The collection of representation handles.</param>\r\n      public static void AddProductRepresentations(IFCAnyHandle productHandle, IList<IFCAnyHandle> representations)\r\n      {\r\n         if (!IsSubTypeOf(productHandle, IFCEntityType.IfcProduct))\r\n            throw new ArgumentException(\"The operation is not valid for this handle.\");\r\n\r\n         IFCAnyHandle representation = GetRepresentation(productHandle);\r\n         if (!IsNullOrHasNoValue(representation))\r\n         {\r\n            AddRepresentations(representation, representations);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the handle is null or has no value.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <returns>True if it is null or has no value, false otherwise.</returns>\r\n      public static bool IsNullOrHasNoValue(IFCAnyHandle handle)\r\n      {\r\n         return !(handle?.HasValue ?? false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the handle is an entity of exactly the given type (not including its sub-types).\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle to be checked.</param>\r\n      /// <param name=\"type\">The entity type to be checked against.</param>\r\n      /// <returns>True if the handle entity is an entity of the given type (not including its sub-types).</returns>\r\n      public static bool IsTypeOf(IFCAnyHandle handle, IFCEntityType type)\r\n      {\r\n         if (IsNullOrHasNoValue(handle))\r\n            return false;\r\n\r\n         return handle.IsTypeOf(GetIFCEntityTypeName(type));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the handle is an entity of exactly one of the given type (not including its sub-types).\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle to be checked.</param>\r\n      /// <param name=\"types\">The entity types to be checked against.</param>\r\n      /// <returns>True if the handle entity is an entity one of the given type (not including its sub-types).</returns>\r\n      public static bool IsTypeOneOf(IFCAnyHandle handle, ISet<IFCEntityType> types)\r\n      {\r\n         if (IsNullOrHasNoValue(handle) || types == null)\r\n            return false;\r\n\r\n         foreach (var entityType in types)\r\n         {\r\n            if (handle.IsTypeOf(GetIFCEntityTypeName(entityType)))\r\n               return true;\r\n         }\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the handle is an entity of either the given type or one of its sub-types.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle to be checked.</param>\r\n      /// <param name=\"type\">The entity type to be checked against.</param>\r\n      /// <returns>True if the handle entity is an entity of either the given type or one of its sub-types.</returns>\r\n      public static bool IsSubTypeOf(IFCAnyHandle handle, IFCEntityType type)\r\n      {\r\n         if (IsNullOrHasNoValue(handle))\r\n            return false;\r\n\r\n         return IsValidSubTypeOf(handle, type);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the handle is an entity of either the given type or one of its sub-types.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle to be checked.</param>\r\n      /// <param name=\"type\">The entity type to be checked against.</param>\r\n      /// <returns>True if the handle entity is an entity of either the given type or one of its sub-types.</returns>\r\n      public static bool IsValidSubTypeOf(IFCAnyHandle handle, IFCEntityType type)\r\n      {\r\n         return handle.IsSubTypeOf(GetIFCEntityTypeName(type));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the handle is an entity of either the given type or one of its sub-types.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle to be checked.</param>\r\n      /// <param name=\"handleType\">The handle's entity type.</param>\r\n      /// <param name=\"type\">The entity type to be checked against.</param>\r\n      /// <returns>True if the handle entity is an entity of either the given type or one of its sub-types.</returns>\r\n      /// <remarks>Use this function if the handle's entity type has already been generated.\r\n      /// If so, we can avoid the call into native code.</remarks>\r\n      public static bool IsValidSubTypeOf(IFCAnyHandle handle, IFCEntityType handleType, IFCEntityType type)\r\n      {\r\n         if (handleType == type)\r\n            return true;\r\n         return handle.IsSubTypeOf(GetIFCEntityTypeName(type));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the project information.\r\n      /// </summary>\r\n      /// <param name=\"project\">The project.</param>\r\n      /// <param name=\"projectName\">The project name.</param>\r\n      /// <param name=\"projectLongName\">The project long name.</param>\r\n      /// <param name=\"projectStatus\">The project status.</param>\r\n      public static void UpdateProject(IFCAnyHandle project, string projectName, string projectLongName,\r\n          string projectStatus)\r\n      {\r\n         if (IsSubTypeOf(project, IFCEntityType.IfcProject))\r\n         {\r\n            SetAttribute(project, \"Name\", projectName);\r\n            SetAttribute(project, \"LongName\", projectLongName);\r\n            SetAttribute(project, \"Phase\", projectStatus);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Remove the entity associated with an IFCAnyHandle from the IFC database and empty out the IFCAnyHandle.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      public static void Delete(IFCAnyHandle handle)\r\n      {\r\n         if (!IsNullOrHasNoValue(handle))\r\n            handle.Delete();\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Common/Utility/IFCCompatibilityType.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Common.Utility\r\n{\r\n   public static class IFCCompatibilityType\r\n   {\r\n      /// <summary>\r\n      /// Dictionary that keeps the mapping of which subtypes are to be created as the supertype in the earlier schema version prior to IFC4\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// Note that this class assumes that it is mapping from IFC4 to IFC2x/IFC2x2/IFC2x3.  It is the caller's responsibility to ensure that.\r\n      /// Note also that as future versions are added, this routine will likely need to be generalized.</remarks>\r\n      private static Dictionary<IFCEntityType, IFCEntityType> SuperTypeCompatibility =\r\n         new Dictionary<IFCEntityType, IFCEntityType>() {\r\n            { IFCEntityType.IfcActuator, IFCEntityType.IfcDistributionControlElement },\r\n            { IFCEntityType.IfcAlarm, IFCEntityType.IfcDistributionControlElement },\r\n            { IFCEntityType.IfcController, IFCEntityType.IfcDistributionControlElement },\r\n            { IFCEntityType.IfcFlowInstrument, IFCEntityType.IfcDistributionControlElement },\r\n            { IFCEntityType.IfcProtectiveDeviceTrippingUnit, IFCEntityType.IfcDistributionControlElement },\r\n            { IFCEntityType.IfcSensor, IFCEntityType.IfcDistributionControlElement },\r\n            { IFCEntityType.IfcUnitaryControlElement, IFCEntityType.IfcDistributionControlElement },\r\n            { IFCEntityType.IfcDistributionControlElement, IFCEntityType.IfcDistributionControlElement },   //itself\r\n            { IFCEntityType.IfcAirToAirHeatRecovery, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcBoiler, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcBurner, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcChiller, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcCoil, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcCondenser, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcCooledBeam, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcCoolingTower, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcElectricGenerator, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcElectricMotor, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcEngine, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcEvaporativeCooler, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcEvaporator, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcHeatExchanger, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcHumidifier, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcMotorConnection, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcSolarDevice, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcTransformer, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcTubeBundle, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcUnitaryEquipment, IFCEntityType.IfcEnergyConversionDevice },\r\n            { IFCEntityType.IfcEnergyConversionDevice, IFCEntityType.IfcEnergyConversionDevice },   //itself\r\n            { IFCEntityType.IfcAirTerminalBox, IFCEntityType.IfcFlowController },\r\n            { IFCEntityType.IfcDamper, IFCEntityType.IfcFlowController },\r\n            { IFCEntityType.IfcElectricDistributionBoard, IFCEntityType.IfcElectricDistributionPoint },\r\n            { IFCEntityType.IfcElectricTimeControl, IFCEntityType.IfcFlowController },\r\n            { IFCEntityType.IfcFlowMeter, IFCEntityType.IfcFlowController },\r\n            { IFCEntityType.IfcProtectiveDevice, IFCEntityType.IfcFlowController },\r\n            { IFCEntityType.IfcSwitchingDevice, IFCEntityType.IfcFlowController },\r\n            { IFCEntityType.IfcValve, IFCEntityType.IfcFlowController },\r\n            { IFCEntityType.IfcFlowController, IFCEntityType.IfcFlowController },   //itself   \r\n            { IFCEntityType.IfcCableCarrierFitting, IFCEntityType.IfcFlowFitting },\r\n            { IFCEntityType.IfcCableFitting, IFCEntityType.IfcFlowFitting },\r\n            { IFCEntityType.IfcDuctFitting, IFCEntityType.IfcFlowFitting },\r\n            { IFCEntityType.IfcJunctionBox, IFCEntityType.IfcFlowFitting },\r\n            { IFCEntityType.IfcPipeFitting, IFCEntityType.IfcFlowFitting },\r\n            { IFCEntityType.IfcFlowFitting, IFCEntityType.IfcFlowFitting },     //itself\r\n            { IFCEntityType.IfcCompressor, IFCEntityType.IfcFlowMovingDevice },\r\n            { IFCEntityType.IfcFan, IFCEntityType.IfcFlowMovingDevice },\r\n            { IFCEntityType.IfcPump, IFCEntityType.IfcFlowMovingDevice },\r\n            { IFCEntityType.IfcFlowMovingDevice, IFCEntityType.IfcFlowMovingDevice },   //itself\r\n            { IFCEntityType.IfcCableCarrierSegment, IFCEntityType.IfcFlowSegment },\r\n            { IFCEntityType.IfcCableSegment, IFCEntityType.IfcFlowSegment },\r\n            { IFCEntityType.IfcDuctSegment, IFCEntityType.IfcFlowSegment },\r\n            { IFCEntityType.IfcPipeSegment, IFCEntityType.IfcFlowSegment },\r\n            { IFCEntityType.IfcFlowSegment, IFCEntityType.IfcFlowSegment },   //itself\r\n            { IFCEntityType.IfcElectricFlowStorageDevice, IFCEntityType.IfcFlowStorageDevice },\r\n            { IFCEntityType.IfcTank, IFCEntityType.IfcFlowStorageDevice },\r\n            { IFCEntityType.IfcFlowStorageDevice, IFCEntityType.IfcFlowStorageDevice },   //itself\r\n            { IFCEntityType.IfcAirTerminal, IFCEntityType.IfcFlowTerminal },\r\n            { IFCEntityType.IfcAudioVisualAppliance, IFCEntityType.IfcFlowTerminal },\r\n            { IFCEntityType.IfcCommunicationsAppliance, IFCEntityType.IfcFlowTerminal },\r\n            { IFCEntityType.IfcElectricAppliance, IFCEntityType.IfcFlowTerminal },\r\n            { IFCEntityType.IfcFireSuppressionTerminal, IFCEntityType.IfcFlowTerminal },\r\n            { IFCEntityType.IfcLamp, IFCEntityType.IfcFlowTerminal },\r\n            { IFCEntityType.IfcLightFixture, IFCEntityType.IfcFlowTerminal },\r\n            { IFCEntityType.IfcMedicalDevice, IFCEntityType.IfcFlowTerminal },\r\n            { IFCEntityType.IfcOutlet, IFCEntityType.IfcFlowTerminal },\r\n            { IFCEntityType.IfcSanitaryTerminal, IFCEntityType.IfcFlowTerminal },\r\n            { IFCEntityType.IfcSpaceHeater, IFCEntityType.IfcFlowTerminal },\r\n            { IFCEntityType.IfcStackTerminal, IFCEntityType.IfcFlowTerminal },\r\n            { IFCEntityType.IfcWasteTerminal, IFCEntityType.IfcFlowTerminal },\r\n            { IFCEntityType.IfcFlowTerminal, IFCEntityType.IfcFlowTerminal },   //itself\r\n            { IFCEntityType.IfcDuctSilencer, IFCEntityType.IfcFlowTreatmentDevice },\r\n            { IFCEntityType.IfcFilter, IFCEntityType.IfcFlowTreatmentDevice },\r\n            { IFCEntityType.IfcInterceptor, IFCEntityType.IfcFlowTreatmentDevice },\r\n            { IFCEntityType.IfcFlowTreatmentDevice, IFCEntityType.IfcFlowTreatmentDevice },   //itself\r\n            { IFCEntityType.IfcFurniture, IFCEntityType.IfcFurnishingElement },   //itself\r\n            { IFCEntityType.IfcSystemFurnitureElement, IFCEntityType.IfcFurnishingElement },\r\n            { IFCEntityType.IfcFurnishingElement, IFCEntityType.IfcFurnishingElement },   //itself\r\n            { IFCEntityType.IfcElementAssemblyType, IFCEntityType.IfcTypeProduct },\r\n            { IFCEntityType.IfcReinforcingBarType, IFCEntityType.IfcTypeProduct },\r\n            { IFCEntityType.IfcReinforcingMeshType, IFCEntityType.IfcTypeProduct }\r\n         };\r\n\r\n\r\n      /// <summary>\r\n      /// Check compatible type (supertype) when the entity is exported prior to IFC4 schema version\r\n      /// </summary>\r\n      /// <param name=\"typeToCheck\">IFC Entity Type Enum</param>\r\n      /// <param name=\"typeToUse\">IFC Entity Type Enum for compatibility with IFC2x3 and IFC2x3.</param>\r\n      /// <returns></returns>\r\n      public static bool CheckCompatibleType(IFCEntityType typeToCheck, out IFCEntityType typeToUse)\r\n      {\r\n         typeToUse = typeToCheck;\r\n\r\n         if (SuperTypeCompatibility.TryGetValue(typeToCheck, out IFCEntityType overrideValue))\r\n         {\r\n            typeToUse = overrideValue;\r\n            return true;\r\n         }\r\n\r\n         return false;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Utility/IFCEntityTrie.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Revit.IFC.Common.Utility\n{\n   /// <summary>\n   /// A simple implementation of Trie (similar to radix tree, or inverted index) structure for IFC Entity list.\n   /// This is used for a fast filter in the search field\n   /// </summary>\n   public class IFCEntityTrie\n   {\n      /// <summary>\n      /// the \"valid\" (or relevant) IFC entities are kept in this Dictionary \n      /// </summary>\n      public IDictionary<short, string> FilteredIFCEntityDict { get; private set; } = new Dictionary<short, string>();\n\n      private readonly IFCEntityTrieNode m_Root = new IFCEntityTrieNode();\n\n      /// <summary>\n      /// IFCEntityTrie Constructor\n      /// </summary>\n      public IFCEntityTrie()\n      {\n      }\n\n      /// <summary>\n      /// Add the valid/relevant IFC entity into the Dictionary\n      /// </summary>\n      /// <param name=\"ifcEntity\">the IFC entity string</param>\n      public void AddIFCEntityToDict(string ifcEntity)\n      {\n         FilteredIFCEntityDict.Add((short) FilteredIFCEntityDict.Count, ifcEntity);\n      }\n\n      /// <summary>\n      /// Add the IFC entity string into the Trie \n      /// </summary>\n      /// <param name=\"word\">the IFC entity name</param>\n      public void AddEntry(string word)\n      {\n         for (int wordcharCnt = 0; wordcharCnt < word.Length; wordcharCnt++)\n         {\n            IFCEntityTrieNode currNode = m_Root;\n            for (int cnt = wordcharCnt; cnt < word.Length; cnt++)\n            {\n               currNode = currNode.GetChild(word[cnt], FilteredIFCEntityDict, true);\n               if (currNode == null)\n                  break;\n            }\n         }\n      }\n\n      /// <summary>\n      /// Get the list of IFC entities given the partial name\n      /// </summary>\n      /// <param name=\"partialWord\">partial word to search</param>\n      /// <returns>the list of IFC entities that contain the partial word</returns>\n      public IList<string> PartialWordSearch(string partialWord)\n      {\n         SortedList<string, string> foundItems = new SortedList<string, string>();\n         IFCEntityTrieNode currNode = m_Root;\n         for (int cnt = 0; cnt < partialWord.Length; cnt++)\n         {\n            currNode = currNode.GetChild(partialWord[cnt], FilteredIFCEntityDict);\n            if (currNode == null)\n               break;\n         }\n\n         if (currNode != null)\n         {\n            foreach (short idx in currNode.IndexItemsWithSubstring)\n               foundItems.Add(FilteredIFCEntityDict[idx], null);\n         }\n\n         return foundItems.Keys.ToList();\n      }\n\n      public string dumpInvertedIndex()\n      {\n         return dumpInvertedIndex(m_Root);\n      }\n\n      string dumpInvertedIndex(IFCEntityTrieNode node)\n      {\n         string dumpString = null;\n         IFCEntityTrieNode currNode = node;\n         dumpString += currNode.PrintIndexedItems(FilteredIFCEntityDict);\n\n         if (currNode.Children.Count > 0)\n         {\n            foreach(IFCEntityTrieNode childNode in currNode.Children)\n            {\n               dumpString += dumpInvertedIndex(childNode);\n            }\n         }\n\n         return dumpString;\n      }\n   }\n\n   public class IFCEntityTrieNode\n   {\n      private IFCEntityTrieNode Parent = null;\n      public IList<IFCEntityTrieNode> Children { get; private set; } = new List<IFCEntityTrieNode>();\n      char Data;\n      public IList<short> IndexItemsWithSubstring { private set; get; } = new List<short>();\n\n      public IFCEntityTrieNode(char inputChar = ' ', IFCEntityTrieNode parent = null)\n      {\n         Parent = parent;\n         Data = inputChar;\n      }\n\n      /// <summary>\n      /// Get the child node of the Trie node\n      /// </summary>\n      /// <param name=\"inputChar\">the input character</param>\n      /// <param name=\"nonABSEntDict\">the dict of all valid entities</param>\n      /// <param name=\"createIfNotExist\">flag to indicate whether the node is to be created if it does not yet exist</param>\n      /// <returns>the Trie node found or created</returns>\n      public IFCEntityTrieNode GetChild(char inputChar, IDictionary<short, string> entDict, bool createIfNotExist = false)\n      {\n         foreach (IFCEntityTrieNode child in Children)\n         {\n            if (child.Data == char.ToUpperInvariant(inputChar) || child.Data == char.ToLowerInvariant(inputChar))\n               return child;\n         }\n\n         if (createIfNotExist)\n            return CreateChild(inputChar, entDict, this.IndexItemsWithSubstring);\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create a child node of the Trie\n      /// </summary>\n      /// <param name=\"inputChar\">the input character</param>\n      /// <param name=\"nonABSEntDict\">the dict of all valid entities</param>\n      /// <returns>the created Trie node</returns>\n      public IFCEntityTrieNode CreateChild(char inputChar, IDictionary<short, string> entDict, IList<short> idxWithSubstring)\n      {\n         string thePrefix = Prefix();\n         thePrefix = thePrefix + inputChar;\n         IList<short> idxEntries = new List<short>();\n\n         // At the first node, the list is empty: use the list from the original Dict\n         if (this.Parent == null)\n            idxWithSubstring = entDict.Keys.ToList();\n\n         // Collect the index with the intended prefix\n         foreach (short idx in idxWithSubstring)\n         {\n            string ent = entDict[idx];\n            if (ent.IndexOf(thePrefix, StringComparison.OrdinalIgnoreCase) >= 0)\n               idxEntries.Add(idx);\n         }\n\n         // Don't create any node if there is no corresponding entry in the dict\n         if (idxEntries.Count == 0)\n            return null;\n\n         IFCEntityTrieNode child = new IFCEntityTrieNode(inputChar, this);\n         child.IndexItemsWithSubstring = idxEntries;\n         Children.Add(child);\n\n         return child;\n      }\n\n      string Prefix()\n      {\n         string thePrefix = \"\" + Data;\n         IFCEntityTrieNode currParent = Parent;\n         while (currParent != null)\n         {\n            thePrefix = currParent.Data + thePrefix;\n            currParent = currParent.Parent;\n         }\n\n         return thePrefix.Trim();\n      }\n\n      public string PrintIndexedItems(IDictionary<short, string> entDict)\n      {\n         string indexedItems = Prefix() + \" : \";\n\n         foreach (short idx in IndexItemsWithSubstring)\n            indexedItems += entDict[idx] + \",\";\n\n         indexedItems += \"\\n\";\n\n         return indexedItems;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Common/Utility/IFCFuzzyXYZ.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n\r\nusing Autodesk.Revit.DB;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace Revit.IFC.Common.Utility\r\n{\r\n   /// <summary>\r\n   /// A common class that allows inexact comparisons of XYZ values.\r\n   /// </summary>\r\n   public class IFCXYZFuzzyCompare\r\n   {\r\n      /// <summary>\r\n      /// A comparison function for two XYZ values.\r\n      /// </summary>\r\n      /// <param name=\"first\">The first XYZ value.</param>\r\n      /// <param name=\"second\">The second xyz value.</param>\r\n      /// <param name=\"tol\">The acceptable tolerance.</param>\r\n      /// <returns>A signed comparison between the 2 XYZ values.</returns>\r\n      public static int Compare(XYZ first, XYZ second, double tol)\r\n      {\r\n         if (first == null)\r\n            return (second == null) ? 0 : -1;\r\n         if (second == null)\r\n            return 1;\r\n\r\n         for (int ii = 0; ii < 3; ii++)\r\n         {\r\n            double diff = first[ii] - second[ii];\r\n            if (diff < -tol)\r\n               return -1;\r\n            if (diff > tol)\r\n               return 1;\r\n         }\r\n\r\n         return 0;\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// A comparer class for comparing XYZ values with a tolerance.\r\n   /// </summary>\r\n   public class IFCXYZFuzzyComparer : IComparer<XYZ>\r\n   {\r\n      private double Tolerance { get; set; }\r\n\r\n      /// <summary>\r\n      /// The constructor.\r\n      /// </summary>\r\n      /// <param name=\"tol\">The tolerance.</param>\r\n      /// <remarks>If the tolerance is less than MathUtil.Eps(), it will be set to MathUtil.Eps().</remarks>\r\n      public IFCXYZFuzzyComparer(double tol)\r\n      {\r\n         // Disallow setting a tolerance less than 1e-9.\r\n         Tolerance = Math.Max(tol, MathUtil.Eps());\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Compare function.\r\n      /// </summary>\r\n      /// <param name=\"first\">The first XYZ value.</param>\r\n      /// <param name=\"second\">The second XYZ value.</param>\r\n      /// <returns>-1 if first < second, 1 if second < first, 0 otherwise.</returns>\r\n      public int Compare(XYZ first, XYZ second)\r\n      {\r\n         return IFCXYZFuzzyCompare.Compare(first, second, Tolerance);\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// A class to allow comparison of XYZ values based on a static epsilon value\r\n   /// The static epsilon value should be set before using these values.\r\n   /// </summary>\r\n   public class IFCFuzzyXYZ : XYZ, IComparable\r\n   {\r\n      static private double m_IFCFuzzyXYZEpsilon = 0.0;\r\n\r\n      static public double IFCFuzzyXYZEpsilon\r\n      {\r\n         get { return m_IFCFuzzyXYZEpsilon; }\r\n         set\r\n         {\r\n            if (value > 0.0)\r\n               m_IFCFuzzyXYZEpsilon = value;\r\n         }\r\n      }\r\n\r\n      private double? CustomTolerance { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Base constructor.\r\n      /// </summary>\r\n      public IFCFuzzyXYZ() : base() { }\r\n\r\n      /// <summary>\r\n      /// Base constructor for converting an XYZ to an IFCFuzzyXYZ.\r\n      /// </summary>\r\n      /// <param name=\"xyz\">The XYZ value.</param>\r\n      /// <param name=\"tol\">If supplied, a custom tolerance value that overrides the global value.</param>\r\n      public IFCFuzzyXYZ(XYZ xyz, double? tol = null) : base(xyz.X, xyz.Y, xyz.Z) \r\n      {\r\n         CustomTolerance = tol;\r\n      }\r\n      \r\n      /// <summary>\r\n      /// Compare an IFCFuzzyXYZ with an XYZ value by checking that their individual X,Y, and Z components are within an epsilon value of each other.\r\n      /// </summary>\r\n      /// <param name=\"obj\">The other value, an XYZ or IFCFuzzyXYZ.</param>\r\n      /// <returns>0 if they are equal, -1 if this is smaller than obj, and 1 if this is larger than obj.</returns>\r\n      public int CompareTo(Object obj)\r\n      {\r\n         if (obj == null || (!(obj is XYZ)))\r\n            return 1;\r\n\r\n         double tol = (CustomTolerance != null) ? CustomTolerance.Value : IFCFuzzyXYZEpsilon;\r\n         return IFCXYZFuzzyCompare.Compare(this, obj as XYZ, tol);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Utility/IfcSchemaEntityNode.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing System.Xml.Schema;\r\n\r\nnamespace Revit.IFC.Common.Utility\r\n{\r\n   /// <summary>\r\n   /// A Class that represent a node in the Ifc schema entity tree\r\n   /// </summary>\r\n   public class IfcSchemaEntityNode\r\n   {\r\n      IfcSchemaEntityNode superType = null;\r\n      IList<IfcSchemaEntityNode> subType = null;\r\n\r\n      /// <summary>\r\n      /// Entity node name\r\n      /// </summary>\r\n      public string Name { get; }\r\n\r\n      /// <summary>\r\n      /// The status whether the entity is Abstract type\r\n      /// </summary>\r\n      public bool isAbstract { get; set; }\r\n\r\n      /// <summary>\r\n      /// The predefined type\r\n      /// </summary>\r\n      public string PredefinedType { get; set; }\r\n\r\n      /// <summary>\r\n      /// Create the class with only the entityname\r\n      /// </summary>\r\n      /// <param name=\"nodeName\">the entity name</param>\r\n      /// <param name=\"abstractEntity\">optional: whether the entity is an abstract type (default is false)</param>\r\n      public IfcSchemaEntityNode(string nodeName, bool abstractEntity = false)\r\n      {\r\n         Name = nodeName;\r\n         isAbstract = abstractEntity;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create the class with the information about the parent (supertype)\r\n      /// </summary>\r\n      /// <param name=\"nodeName\">the entity name</param>\r\n      /// <param name=\"parentNode\">the supertype entity name</param>\r\n      /// <param name=\"abstractEntity\">optional: whether the entity is an abstract type (default is false)</param>\r\n      public IfcSchemaEntityNode(string nodeName, IfcSchemaEntityNode parentNode, string predefTypeEnum, bool abstractEntity = false)\r\n      {\r\n         Name = nodeName;\r\n         isAbstract = abstractEntity;\r\n         if (parentNode != null)\r\n            superType = parentNode;\r\n         if (predefTypeEnum != null)\r\n            PredefinedType = predefTypeEnum;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add the subtype node into this node\r\n      /// </summary>\r\n      /// <param name=\"childNode\">the subtype entity node</param>\r\n      public void AddChildNode(IfcSchemaEntityNode childNode)\r\n      {\r\n         if (childNode != null)\r\n         {\r\n            if (subType == null)\r\n               subType = new List<IfcSchemaEntityNode>();\r\n            subType.Add(childNode);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set the supertype node into this node\r\n      /// </summary>\r\n      /// <param name=\"parentNode\">the supertype entity node</param>\r\n      public void SetParentNode(IfcSchemaEntityNode parentNode)\r\n      {\r\n         if (superType != null)\r\n            throw new System.Exception(\"parentNode cannot be null!\");\r\n\r\n         if (superType == null)\r\n            if (parentNode != null)\r\n               superType = parentNode;\r\n      }\r\n\r\n      /// <summary>\r\n      /// get the supertype node of the this node\r\n      /// </summary>\r\n      /// <returns>the supertype entity node</returns>\r\n      public IfcSchemaEntityNode GetParent()\r\n      {\r\n         return superType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// get the list of the subtypes entity nodes\r\n      /// </summary>\r\n      /// <returns>the list of subtype nodes</returns>\r\n      public IList<IfcSchemaEntityNode> GetChildren()\r\n      {\r\n         if (subType == null)\r\n            return new List<IfcSchemaEntityNode>();\r\n\r\n         return subType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get all the subtype branch of this entity\r\n      /// </summary>\r\n      /// <returns>the list of all the subtype nodes</returns>\r\n      public IList<IfcSchemaEntityNode> GetAllDescendants()\r\n      {\r\n         List<IfcSchemaEntityNode> res = new List<IfcSchemaEntityNode>();\r\n         foreach (IfcSchemaEntityNode child in subType)\r\n         {\r\n            res.AddRange(child.GetAllDescendants());\r\n         }\r\n\r\n         return res;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get all the supertype line of this entity\r\n      /// </summary>\r\n      /// <returns>the list of supertype following the level order</returns>\r\n      public IList<IfcSchemaEntityNode> GetAllAncestors()\r\n      {\r\n         List<IfcSchemaEntityNode> res = new List<IfcSchemaEntityNode>();\r\n\r\n         IfcSchemaEntityNode node = this;\r\n         while (node.superType != null)\r\n         {\r\n            res.Add(superType);\r\n            node = superType;\r\n         }\r\n\r\n         return res;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Test whether the supertTypeName is the valid supertype of this entity\r\n      /// </summary>\r\n      /// <param name=\"superTypeName\">the name of the potential supertype</param>\r\n      /// <returns>true: is the valid supertype</returns>\r\n      public bool IsSubTypeOf(string superTypeName, bool strict = true)\r\n      {\r\n         bool res = false;\r\n\r\n         IfcSchemaEntityNode node = this;\r\n         while (node.superType != null)\r\n         {\r\n            if (strict)\r\n            {\r\n               if (superTypeName.Equals(node.superType.Name, StringComparison.InvariantCultureIgnoreCase))\r\n               {\r\n                  return true;\r\n            }\r\n            }\r\n            else\r\n            {\r\n               if (superTypeName.Equals(node.superType.Name, StringComparison.InvariantCultureIgnoreCase)\r\n                  || superTypeName.Equals(node.Name, StringComparison.InvariantCultureIgnoreCase))\r\n               {\r\n                  return true;\r\n               }\r\n            }\r\n            \r\n            node = node.superType;\r\n         }\r\n\r\n         return res;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Test whether the subtype name is the valid subtype of this entity\r\n      /// </summary>\r\n      /// <param name=\"subTypeName\">the name of the potential subtype</param>\r\n      /// <returns>true: is the valid subtype</returns>\r\n      public bool IsSuperTypeOf(string subTypeName)\r\n      {\r\n         return CheckChildNode(subTypeName);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Print the branch starting from this entity node. The print is formatted using tab indentation to represent the hierarchical level\r\n      /// </summary>\r\n      /// <param name=\"level\">the level number</param>\r\n      /// <returns>the tree structure of the banch in a string</returns>\r\n      public string PrintBranch(int level = 0)\r\n      {\r\n         string res = string.Empty;\r\n\r\n         // Print itself first and then followed by each subtypes\r\n         IfcSchemaEntityNode node = this;\r\n         string abs = string.Empty;\r\n         if (node.isAbstract)\r\n            abs = \" (ABS)\";\r\n\r\n         res += \"\\n\";\r\n         for (int i = 0; i < level; ++i)\r\n            res += \"\\t\";\r\n         res += node.Name + abs;\r\n\r\n         if (node.subType == null)\r\n            return res;\r\n\r\n         foreach (IfcSchemaEntityNode sub in node.subType)\r\n         {\r\n            for (int i = 0; i < level; ++i)\r\n               res += \"\\t\";\r\n            string br = sub.PrintBranch(level + 1);\r\n            if (!string.IsNullOrWhiteSpace(br))\r\n               res += br;\r\n         }\r\n         return res;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the entities in the branch starting of this entity node in a set\r\n      /// </summary>\r\n      /// <returns>a set that contains all the subtype entity names</returns>\r\n      public HashSet<string> GetBranch()\r\n      {\r\n         HashSet<string> resSet = new HashSet<string>();\r\n\r\n         IfcSchemaEntityNode node = this;\r\n         resSet.Add(node.Name);\r\n\r\n         if (node.subType == null)\r\n            return resSet;\r\n\r\n         foreach (IfcSchemaEntityNode sub in node.subType)\r\n         {\r\n            HashSet<string> br = sub.GetBranch();\r\n            if (br.Count > 0)\r\n               resSet.UnionWith(br);\r\n         }\r\n         return resSet;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check whether an entityName is found in this entity and its subtypes\r\n      /// </summary>\r\n      /// <param name=\"entityName\">the entity name to check</param>\r\n      /// <returns>true: the entityName is found in this entity or tits subtype</returns>\r\n      public bool CheckChildNode(string entityName)\r\n      {\r\n         IfcSchemaEntityNode node = this;\r\n         if (string.Compare(node.Name, entityName, ignoreCase: true) == 0)\r\n            return true;\r\n\r\n         if (node.subType == null)\r\n            return false;\r\n\r\n         foreach (IfcSchemaEntityNode sub in node.subType)\r\n         {\r\n            if (sub.CheckChildNode(entityName))\r\n               return true;\r\n         }\r\n         return false;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Utility/IfcSchemaEntityTree.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing System.IO;\r\nusing System.Xml;\r\nusing System.Xml.Schema;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Common.Utility\r\n{\r\n   /// <summary>\r\n   /// It is a class that captures IFC entities in their respective hierarchical inheritance structure, to be captured from the IFCXML schema\r\n   /// It uses static dictionary and set!!\r\n   /// </summary>\r\n   public class IfcSchemaEntityTree\r\n   {\r\n      /// <summary>\r\n      /// The IFC Entity Dictionary\r\n      /// </summary>\r\n      public IDictionary<string, IfcSchemaEntityNode> IfcEntityDict { get; private set; } = new Dictionary<string, IfcSchemaEntityNode>(StringComparer.OrdinalIgnoreCase);\r\n\r\n      /// <summary>\r\n      /// The Predefined Type enumeration Dictionary\r\n      /// </summary>\r\n      public IDictionary<string, IList<string>> PredefinedTypeEnumDict { get; private set; } = new Dictionary<string, IList<string>>();\r\n\r\n      /// <summary>\r\n      /// The set of the entity nodes in the tree\r\n      /// </summary>\r\n      public HashSet<IfcSchemaEntityNode> TheTree { get; set; } = new HashSet<IfcSchemaEntityNode>();\r\n\r\n      static string Ifc2x2Schema = \"IFC2X2_ADD1\";\r\n      static string Ifc2x3Schema = \"IFC2X3_TC1\";\r\n      static string Ifc4Schema = \"IFC4\";\r\n      static string Ifc4RV = \"IFC4RV\";\r\n      static string Ifc4x3Schema = \"IFC4X3\";\r\n\r\n      /// <summary>\r\n      /// Reset the static Dictionary and Set. To be done before parsing another IFC schema\r\n      /// </summary>\r\n      public IfcSchemaEntityTree()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add Predefined Type and the list of enumeration values\r\n      /// </summary>\r\n      /// <param name=\"enumType\">Predefined Type</param>\r\n      /// <param name=\"enumList\">The list of Predefined Type enumeration values</param>\r\n      public void AddPredefinedTypeEnum(string enumType, IList<string> enumList)\r\n      {\r\n         if (enumType == null || enumList == null || enumList.Count == 0)\r\n            return;\r\n\r\n         if (PredefinedTypeEnumDict.ContainsKey(enumType))\r\n         {\r\n            PredefinedTypeEnumDict[enumType] = enumList;\r\n         }\r\n         else\r\n         {\r\n            PredefinedTypeEnumDict.Add(enumType, enumList);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add a new node into the tree\r\n      /// </summary>\r\n      /// <param name=\"entityName\">the entity name</param>\r\n      /// <param name=\"parentNodeName\">the name of the supertype entity</param>\r\n      public void Add(string entityName, string parentNodeName, string predefTypeEnum, bool isAbstract = false)\r\n      {\r\n         if (string.IsNullOrEmpty(entityName))\r\n            return;\r\n\r\n         // We will skip the entityname or its parent name that does not start with Ifc (except Entity)\r\n         if (string.Compare(entityName, 0, \"Ifc\", 0, 3, ignoreCase: true) != 0\r\n            || (string.Compare(parentNodeName, 0, \"Ifc\", 0, 3, ignoreCase: true) != 0 && string.Compare(parentNodeName, \"Entity\", ignoreCase: true) != 0))\r\n            return;\r\n\r\n         IfcSchemaEntityNode parentNode = null;\r\n         if (!string.IsNullOrEmpty(parentNodeName))\r\n         {\r\n            // skip if the parent name does not start with Ifc\r\n            if (string.Compare(parentNodeName, 0, \"Ifc\", 0, 3, ignoreCase: true) == 0)\r\n            {\r\n               if (!IfcEntityDict.TryGetValue(parentNodeName, out parentNode))\r\n               {\r\n                  // Parent node does not exist yet, create\r\n                  parentNode = new IfcSchemaEntityNode(parentNodeName);\r\n\r\n                  IfcEntityDict.Add(parentNodeName, parentNode);\r\n                  TheTree.Add(parentNode);    // Add first into the rootNodes because the parent is null at this stage, we will remove it later is not the case\r\n               }\r\n            }\r\n         }\r\n\r\n         IfcSchemaEntityNode entityNode;\r\n         if (!IfcEntityDict.TryGetValue(entityName, out entityNode))\r\n         {\r\n            if (parentNode != null)\r\n            {\r\n               entityNode = new IfcSchemaEntityNode(entityName, parentNode, predefTypeEnum, abstractEntity: isAbstract);\r\n               parentNode.AddChildNode(entityNode);\r\n            }\r\n            else\r\n            {\r\n               entityNode = new IfcSchemaEntityNode(entityName, abstractEntity: isAbstract);\r\n               // Add into the set of root nodes when parent is null/no parent\r\n               TheTree.Add(entityNode);\r\n            }\r\n\r\n            IfcEntityDict.Add(entityName, entityNode);\r\n         }\r\n         else\r\n         {\r\n            // Update the node's isAbstract property and the parent node (if any)\r\n            entityNode.isAbstract = isAbstract;\r\n            if (parentNode != null)\r\n            {\r\n               entityNode.SetParentNode(parentNode);\r\n               if (TheTree.Contains(entityNode))\r\n                  TheTree.Remove(entityNode);\r\n               parentNode.AddChildNode(entityNode);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Find whether an entity is already created before\r\n      /// </summary>\r\n      /// <param name=\"entityName\">the entity in concern</param>\r\n      /// <returns>the entity node in the tree</returns>\r\n      public IfcSchemaEntityNode Find(string entityName)\r\n      {\r\n         IfcSchemaEntityNode res = null;\r\n         IfcEntityDict.TryGetValue(entityName, out res);\r\n         return res;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Dump the IFC entity names in a list\r\n      /// </summary>\r\n      /// <param name=\"listName\">a name of the list</param>\r\n      /// <returns>the list dump in a string</returns>\r\n      public string DumpEntityDict(string listName)\r\n      {\r\n         string entityList;\r\n         entityList = \"namespace Revit.IFC.Common.Enums.\" + listName\r\n                     + \"\\n{\"\r\n                        + \"\\n\\t/// <summary>\"\r\n                        + \"\\n\\t/// List of Entities for \" + listName\r\n                        + \"\\n\\t/// </summary>\"\r\n                        + \"\\n\\tpublic enum IFCEntityType\"\r\n                     + \"\\n\\t{\";\r\n\r\n         foreach (KeyValuePair<string, IfcSchemaEntityNode> ent in IfcEntityDict)\r\n         {\r\n            entityList += \"\\n\\t\\t/// <summary>\"\r\n                           + \"\\n\\t\\t/// \" + ent.Key + \" enumeration\"\r\n                           + \"\\n\\t\\t/// </summary>\"\r\n                           + \"\\n\\t\\t\" + ent.Key + \",\\n\";\r\n         }\r\n         entityList += \"\\n\\t\\tUnknown\"\r\n                     + \"\\n\\t}\"\r\n                     + \"\\n}\";\r\n\r\n         return entityList;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Dump the IFC entity hierarchical tree\r\n      /// </summary>\r\n      /// <returns>the IFC entity tree in a string</returns>\r\n      public string DumpTree()\r\n      {\r\n         string tree = string.Empty;\r\n         foreach (IfcSchemaEntityNode rootNode in TheTree)\r\n         {\r\n            tree += rootNode.PrintBranch();\r\n         }\r\n\r\n         return tree;\r\n      }\r\n\r\n      #region static_functions\r\n\r\n      static IDictionary<string, HashSet<string>> DeprecatedOrUnsupportedDict = new Dictionary<string, HashSet<string>>()\r\n      {\r\n         { Ifc4x3Schema, new HashSet<string>() { \"IfcProxy\", \"IfcOpeningStandardCase\", \"IfcBeamStandardCase\", \"IfcColumnStandardCase\", \"IfcDoorStandardCase\",\r\n            \"IfcMemberStandardCase\", \"IfcPlateStandardCase\", \"IfcSlabElementedCase\", \"IfcSlabStandardCase\", \"IfcWallElementedCase\",\r\n            \"IfcWallStandardCase\", \"IfcWindowStandardCase\", \"IfcDoorStyle\", \"IfcWindowStyle\", \"IfcBuilding\", \"IfcBuildingStorey\" } },\r\n         { Ifc4Schema, new HashSet<string>() { \"IfcProxy\", \"IfcOpeningStandardCase\", \"IfcBeamStandardCase\", \"IfcColumnStandardCase\", \"IfcDoorStandardCase\",\r\n            \"IfcMemberStandardCase\", \"IfcPlateStandardCase\", \"IfcSlabElementedCase\", \"IfcSlabStandardCase\", \"IfcWallElementedCase\",\r\n            \"IfcWallStandardCase\", \"IfcWindowStandardCase\", \"IfcDoorStyle\", \"IfcWindowStyle\", \"IfcBuilding\", \"IfcBuildingStorey\" } },\r\n         { Ifc2x3Schema, new HashSet<string>(){ \"IfcElectricalElement\", \"IfcEquipmentElement\", \"IfcBuilding\", \"IfcBuildingStorey\" } },\r\n         { Ifc2x2Schema, new HashSet<string>(){ \"IfcBuilding\", \"IfcBuildingStorey\" } }\r\n      };\r\n\r\n      static IDictionary<string, Dictionary<string, HashSet<string>>> DeprecatedPredefinedType = new Dictionary<string, Dictionary<string, HashSet<string>>>()\r\n      {\r\n         {\r\n            Ifc4x3Schema,\r\n            new Dictionary<string, HashSet<string>>()\r\n            {\r\n               { \"IfcBuildingElementProxy\", new HashSet<string>()\r\n                  { \"COMPLEX\", \"ELEMENT\", \"PARTIAL\" }\r\n               },\r\n               { \"IfcBuildingElementProxyType\", new HashSet<string>()\r\n                  { \"COMPLEX\", \"ELEMENT\", \"PARTIAL\" }\r\n               },\r\n               { \"IfcCableCarrierFitting\", new HashSet<string>()\r\n                  { \"CROSS\", \"REDUCER\", \"TEE\" }\r\n               },\r\n               { \"IfcCableCarrierFittingType\", new HashSet<string>()\r\n                  { \"CROSS\", \"REDUCER\", \"TEE\" }\r\n               },\r\n               { \"IfcFireSuppressionTerminal\", new HashSet<string>()\r\n                  { \"SPRINKLERDEFLECTOR\" }\r\n               },\r\n               { \"IfcFireSuppressionTerminalType\", new HashSet<string>()\r\n                  { \"SPRINKLERDEFLECTOR\" }\r\n               },\r\n               { \"IfcFooting\", new HashSet<string>()\r\n                  { \"CAISSON_FOUNDATION\" }\r\n               },\r\n               { \"IfcFootingType\", new HashSet<string>()\r\n                  { \"CAISSON_FOUNDATION\" }\r\n               },\r\n               { \"IfcGeographicElement\", new HashSet<string>()\r\n                  { \"SOIL_BORING_POINT\" }\r\n               },\r\n               { \"IfcGeographicElementType\", new HashSet<string>()\r\n                  { \"SOIL_BORING_POINT\" }\r\n               },\r\n               { \"IfcWall\", new HashSet<string>()\r\n                  { \"POLYGONAL\", \"STANDARD\" }\r\n               },\r\n               { \"IfcWallType\", new HashSet<string>()\r\n                  { \"POLYGONAL\", \"STANDARD\" }\r\n               },\r\n            }\r\n         }\r\n      };\r\n\r\n      static IDictionary<string, IfcSchemaEntityTree> IFCSchemaDict { get; set; } =\r\n         new Dictionary<string, IfcSchemaEntityTree>();\r\n\r\n      static IDictionary<string, IFCEntityTrie> IFCSchemaTries { get; set; }\r\n\r\n      static IDictionary<string, IDictionary<string, IList<string>>> IFCEntityPredefTypeDict = new Dictionary<string, IDictionary<string, IList<string>>>();\r\n\r\n      /// <summary>\r\n      /// return the standardized IFC schema name based on the various enumeration of IFCVersion\r\n      /// </summary>\r\n      /// <param name=\"ifcFileVersion\">IFCVersion</param>\r\n      /// <returns>the standardized IFC schema name</returns>\r\n      static public string SchemaName(IFCVersion ifcFileVersion)\r\n      {\r\n         string schemaFile = string.Empty;\r\n         switch (ifcFileVersion)\r\n         {\r\n            case IFCVersion.IFC2x2:\r\n               schemaFile = Ifc2x2Schema;\r\n               break;\r\n            case IFCVersion.IFC2x3:\r\n            case IFCVersion.IFC2x3BFM:\r\n            case IFCVersion.IFC2x3CV2:\r\n            case IFCVersion.IFC2x3FM:\r\n            case IFCVersion.IFCCOBIE:\r\n               schemaFile = Ifc2x3Schema;\r\n               break;\r\n            case IFCVersion.IFC4:\r\n            case IFCVersion.IFC4DTV:\r\n               schemaFile = Ifc4Schema;\r\n               break;\r\n            case IFCVersion.IFC4RV:\r\n            case IFCVersion.IFCSG:\r\n               schemaFile = Ifc4RV;\r\n               break;\r\n            case IFCVersion.IFC4x3:\r\n            case IFCVersion.IFC4x3RV:\r\n            case IFCVersion.IFC4x3DTV:\r\n               schemaFile = Ifc4x3Schema;\r\n               break;\r\n            default:\r\n               schemaFile = Ifc4Schema;\r\n               break;\r\n         }\r\n         return schemaFile;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the moat general IFCVersion associated with an IFC schema name.\r\n      /// </summary>\r\n      /// <param name=\"ifcFileVersion\">IFCVersion</param>\r\n      /// <returns>the standardized IFC schema name</returns>\r\n      static public IFCVersion VersionName(string schemaName)\r\n      {\r\n         if (string.Compare(schemaName, Ifc4x3Schema, true) == 0)\r\n            return IFCVersion.IFC4x3;\r\n         if (string.Compare(schemaName, Ifc4RV, true) == 0)\r\n            return IFCVersion.IFC4RV;\r\n         if (string.Compare(schemaName, Ifc4Schema, true) == 0)\r\n            return IFCVersion.IFC4;\r\n         if (string.Compare(schemaName, Ifc2x3Schema, true) == 0)\r\n            return IFCVersion.IFC2x3;\r\n         if (string.Compare(schemaName, Ifc2x2Schema, true) == 0)\r\n            return IFCVersion.IFC2x2;\r\n         return IFCVersion.Default;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the IFC entity Dictionary for a particular IFC version\r\n      /// </summary>\r\n      /// <param name=\"ifcFileVersion\">the IFC version</param>\r\n      /// <returns>the entity Dictionary</returns>\r\n      static public IfcSchemaEntityTree GetEntityDictFor(IFCVersion ifcFileVersion)\r\n      {\r\n         string schemaFile = SchemaName(ifcFileVersion);\r\n         return GetEntityDictFor(schemaFile);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the IFC Entity Dictionary for the given IFC version specified by the schema file name (without extension)\r\n      /// </summary>\r\n      /// <param name=\"schemaFile\">the IFC schema file name (without extension). Caller must make sure it is the supported schema file</param>\r\n      /// <returns>the tree, or null if the schema file is not found</returns>\r\n      static public IfcSchemaEntityTree GetEntityDictFor(string schemaFile, string schemaLoc = null)\r\n      {\r\n         schemaFile = schemaFile.ToUpper();\r\n         if (IFCSchemaDict.ContainsKey(schemaFile))\r\n            return IFCSchemaDict[schemaFile];\r\n\r\n         // if not found, process the file and add into the static dictionary\r\n         IfcSchemaEntityTree entityTree = PopulateEntityDictFor(schemaFile, schemaLoc);\r\n         if (entityTree == null)\r\n            return null;\r\n\r\n         IFCSchemaDict.Add(schemaFile, entityTree);\r\n         IFCEntityPredefTypeDict.Add(schemaFile, entityTree.PredefinedTypeEnumDict);\r\n         return entityTree;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the IFC entity Dictionary for a particular IFC version from the schema file\r\n      /// </summary>\r\n      /// <param name=\"schemaFile\">the schema file name</param>\r\n      /// <returns>the entity Dictionary</returns>\r\n      static IfcSchemaEntityTree PopulateEntityDictFor(string schemaFile, string schemaLoc = null)\r\n      {\r\n         IfcSchemaEntityTree entityTree = null;\r\n\r\n         // Process IFCXml schema here, then search for IfcProduct and build TreeView beginning from that node. Allow checks for the tree nodes. Grey out (and Italic) the abstract entity\r\n         string schemaFilePath;\r\n         FileInfo schemaFileInfo;\r\n\r\n         if (string.IsNullOrEmpty(schemaLoc))\r\n            schemaLoc = Path.GetDirectoryName(System.Reflection.Assembly.GetCallingAssembly().Location);\r\n         schemaFilePath = Path.Combine(schemaLoc, schemaFile + \".xsd\");\r\n         schemaFileInfo = new FileInfo(schemaFilePath);\r\n         if (!schemaFileInfo.Exists)\r\n         {\r\n            schemaFilePath = Path.Combine(DirectoryUtil.IFCSchemaLocation, schemaFile + \".xsd\");\r\n            schemaFileInfo = new FileInfo(schemaFilePath);\r\n         }\r\n\r\n         if (schemaFileInfo.Exists)\r\n         {\r\n            entityTree = new IfcSchemaEntityTree();\r\n            bool success = ProcessIFCXMLSchema.ProcessIFCSchema(schemaFileInfo, ref entityTree);\r\n         }\r\n\r\n         return entityTree;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Generate the IFC entiry Trie data\r\n      /// </summary>\r\n      /// <param name=\"entityTrie\">the IFCEntityTrie</param>\r\n      public static void GenerateEntityTrie(ref IFCEntityTrie entityTrie)\r\n      {\r\n         foreach (KeyValuePair<short, string> entEntry in entityTrie.FilteredIFCEntityDict)\r\n         {\r\n            entityTrie.AddEntry(entEntry.Value);\r\n         }\r\n      }\r\n\r\n      static void ProcessSchemaFile(string dirLocation, ref HashSet<string> schemaProcessed)\r\n      {\r\n         DirectoryInfo dirInfo = new DirectoryInfo(dirLocation);\r\n         if (dirInfo == null)\r\n            return;\r\n\r\n         foreach (FileInfo fileInfo in dirInfo.GetFiles(\"*.xsd\"))\r\n         {\r\n            string schemaId = Path.GetFileNameWithoutExtension(fileInfo.Name).ToUpper();\r\n            if (!schemaProcessed.Contains(fileInfo.Name) && !IFCSchemaDict.ContainsKey(schemaId))\r\n            {\r\n               IfcSchemaEntityTree entityTree = new IfcSchemaEntityTree();\r\n               bool success = ProcessIFCXMLSchema.ProcessIFCSchema(fileInfo, ref entityTree);\r\n               if (success)\r\n               {\r\n                  schemaProcessed.Add(fileInfo.Name);\r\n                  IFCSchemaDict.Add(schemaId, entityTree);\r\n                  IFCEntityPredefTypeDict.Add(schemaId, entityTree.PredefinedTypeEnumDict);\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      static bool AllIFCSchemaProcessed { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Get All IFC schema inside the designated folder. They will be cached\r\n      /// </summary>\r\n      static public void GetAllEntityDict()\r\n      {\r\n         if (AllIFCSchemaProcessed)\r\n            return;\r\n\r\n         HashSet<string> schemaProcessed = new HashSet<string>();\r\n\r\n#if IFC_OPENSOURCE\r\n         // For the open source code, search it from the IfcExporter install folder\r\n         string schemaLoc = Path.GetDirectoryName(System.Reflection.Assembly.GetCallingAssembly().Location);\r\n         ProcessSchemaFile(schemaLoc, ref schemaProcessed);\r\n#endif\r\n         {\r\n            ProcessSchemaFile(DirectoryUtil.IFCSchemaLocation, ref schemaProcessed);\r\n         }\r\n\r\n         if (schemaProcessed.Count == IFCSchemaDict.Count)\r\n            AllIFCSchemaProcessed = true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get all the cached IFC schema trees\r\n      /// </summary>\r\n      /// <returns>The list of the schema trees</returns>\r\n      static public IList<IfcSchemaEntityTree> GetAllCachedSchemaTrees()\r\n      {\r\n         return IFCSchemaDict.Select(x => x.Value).ToList();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get all the names of the cached IFC schema trees\r\n      /// </summary>\r\n      /// <returns>the list of IFC schema names</returns>\r\n      static public IList<string> GetAllCachedSchemaNames()\r\n      {\r\n         return IFCSchemaDict.Select(x => x.Key).ToList();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Find a Non ABS supertype entity from the input type name\r\n      /// </summary>\r\n      /// <param name=\"context\">the IFC schema context</param>\r\n      /// <param name=\"typeName\">the type name</param>\r\n      /// <returns>the non-abs supertype instance node</returns>\r\n      static public IfcSchemaEntityNode FindNonAbsInstanceSuperType(IFCVersion context, string typeName)\r\n      {\r\n         string contextName = SchemaName(context);\r\n         return FindNonAbsInstanceSuperType(contextName, typeName);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Generate the Entity type name corresponding to an instance.\r\n      /// </summary>\r\n      /// <param name=\"instanceName\">The instance name.</param>\r\n      /// <returns>The type name.</returns>\r\n      /// <remarks>\r\n      /// This is done in a heuristic fashion, so we will need to \r\n      /// make sure exceptions are dealt with.\r\n      /// </remarks>\r\n      public static string GetTypeNameFromInstanceName(string instanceName, bool exportAsOlderThanIFC4)\r\n      {\r\n         // Deal with exceptions.\r\n         if (string.Compare(instanceName, \"IfcProduct\", true) == 0)\r\n            return \"IfcTypeProduct\";\r\n         else if (string.Compare(instanceName, \"IfcObject\", true) == 0)\r\n            return \"IfcTypeObject\";\r\n         // IFCDoorType and IFCWindowType are available since IFC4.\r\n         else if (string.Compare(instanceName, \"IfcWindow\", true) == 0 && exportAsOlderThanIFC4)\r\n            return \"IfcWindowStyle\";\r\n         else if (string.Compare(instanceName, \"IFCDoor\", true) == 0 && exportAsOlderThanIFC4)\r\n            return \"IFCDoorStyle\";\r\n         // IfcReinforcingBarType, IfcReinforcingMeshType, IfcTendonAnchorType, and IfcTendonType\r\n         // are type entities introduced only in IFC 4. For older schemas, we use the basic type entity instead.\r\n         else if (exportAsOlderThanIFC4 &&\r\n            ((string.Compare(instanceName, \"IfcReinforcingBar\", true) == 0) ||\r\n            (string.Compare(instanceName, \"IfcReinforcingMesh\", true) == 0) ||\r\n            (string.Compare(instanceName, \"IfcTendonAnchor\", true) == 0) ||\r\n            (string.Compare(instanceName, \"IfcTendon\", true) == 0)))\r\n            return \"IfcReinforcingElementType\";\r\n\r\n         return instanceName + \"Type\";\r\n      }\r\n\r\n      /// <summary>\r\n      /// Find a Non ABS supertype entity from the input type name\r\n      /// </summary>\r\n      /// <param name=\"context\">the IFC schema context</param>\r\n      /// <param name=\"typeName\">the type name</param>\r\n      /// <returns>the non-abs supertype instance node</returns>\r\n      static public IfcSchemaEntityNode FindNonAbsInstanceSuperType(string context, string typeName)\r\n      {\r\n         IfcSchemaEntityTree ifcEntitySchemaTree = GetEntityDictFor(context);\r\n         IfcSchemaEntityNode res = null;\r\n\r\n         // Note: Implementer's agreement #CV-2x3-166 changes IfcSpaceHeaterType from IfcEnergyConversionDevice to IfcFlowTerminal.\r\n         if (context.Equals(Ifc2x3Schema, StringComparison.InvariantCultureIgnoreCase)\r\n             && typeName.Equals(\"IfcSpaceHeaterType\", StringComparison.InvariantCultureIgnoreCase))\r\n         {\r\n            res = ifcEntitySchemaTree.Find(\"IfcFlowTerminal\");\r\n            if (res.isAbstract)\r\n               return null;\r\n            return res;\r\n         }\r\n\r\n\r\n         bool schemaOlderThanIFC4 = context.Equals(Ifc2x3Schema, StringComparison.InvariantCultureIgnoreCase)\r\n            || context.Equals(Ifc2x2Schema, StringComparison.InvariantCultureIgnoreCase);\r\n\r\n         string theTypeName = typeName.EndsWith(\"Type\", StringComparison.CurrentCultureIgnoreCase) ?\r\n            typeName : GetTypeNameFromInstanceName(typeName, schemaOlderThanIFC4);\r\n\r\n         IfcSchemaEntityNode entNode = ifcEntitySchemaTree.Find(theTypeName);\r\n         if (entNode != null)\r\n         {\r\n            while (true)\r\n            {\r\n               res = entNode.GetParent();\r\n               // no more parent node to get\r\n               if (res == null)\r\n                  break;\r\n\r\n               entNode = ifcEntitySchemaTree.Find(res.Name.Substring(0, res.Name.Length - 4));\r\n               if (entNode != null && !entNode.isAbstract)\r\n               {\r\n                  res = entNode;\r\n                  break;\r\n               }\r\n               else\r\n                  entNode = res;    // put back the Type Node\r\n            }\r\n         }\r\n\r\n         return res;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Find a Non-Abstract Super Type in the current IFC Schema\r\n      /// </summary>\r\n      /// <param name=\"context\">the IFC schema context</param>\r\n      /// <param name=\"typeName\">the entity name</param>\r\n      /// <param name=\"stopNode\">optional list of entity name(s) to stop the search</param>\r\n      /// <returns>the appropriate node or null</returns>\r\n      static public IfcSchemaEntityNode FindNonAbsSuperType(IFCVersion context, string entityName, params string[] stopNode)\r\n      {\r\n         string contextName = SchemaName(context);\r\n         return FindNonAbsSuperType(contextName, entityName, stopNode);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Find a Non-Abstract Super Type in the current IFC Schema\r\n      /// </summary>\r\n      /// <param name=\"context\">the IFC schema context</param>\r\n      /// <param name=\"typeName\">the entity name</param>\r\n      /// <param name=\"stopNode\">optional list of entity name(s) to stop the search</param>\r\n      /// <returns>the appropriate node or null</returns>\r\n      static public IfcSchemaEntityNode FindNonAbsSuperType(string context, string entityName, params string[] stopNode)\r\n      {\r\n         IfcSchemaEntityTree ifcEntitySchemaTree = GetEntityDictFor(context);\r\n         IfcSchemaEntityNode res = null;\r\n\r\n         IfcSchemaEntityNode entNode = ifcEntitySchemaTree.Find(entityName);\r\n\r\n         if (entNode != null)\r\n         {\r\n            foreach (string stopCond in stopNode)\r\n               if (entNode.Name.Equals(stopCond, StringComparison.InvariantCultureIgnoreCase))\r\n                  return res;\r\n\r\n            while (true)\r\n            {\r\n               entNode = entNode.GetParent();\r\n               // no more parent node to get\r\n               if (entNode == null)\r\n                  break;\r\n\r\n               foreach (string stopCond in stopNode)\r\n                  if (entNode.Name.Equals(stopCond, StringComparison.InvariantCultureIgnoreCase))\r\n                     break;\r\n\r\n               if (entNode != null && !entNode.isAbstract)\r\n               {\r\n                  res = entNode;\r\n                  break;\r\n               }\r\n            }\r\n         }\r\n         return res;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collect all the supertype of an entity node\r\n      /// </summary>\r\n      /// <param name=\"entityName\">the entity</param>\r\n      /// <param name=\"stopNode\">array of the stop node(s)</param>\r\n      /// <returns>List of the supertypes</returns>\r\n      static public IList<IfcSchemaEntityNode> FindAllSuperTypes(IFCVersion context, string entityName, params string[] stopNode)\r\n      {\r\n         string contextName = SchemaName(context);\r\n         return FindAllSuperTypes(contextName, entityName, stopNode);\r\n      }\r\n\r\n      static public IList<IfcSchemaEntityNode> FindAllSuperTypes(string context, string entityName, params string[] stopNode)\r\n      {\r\n         IfcSchemaEntityTree ifcEntitySchemaTree = GetEntityDictFor(context);\r\n         IList<IfcSchemaEntityNode> res = new List<IfcSchemaEntityNode>();\r\n\r\n         IfcSchemaEntityNode entNode = ifcEntitySchemaTree.Find(entityName);\r\n\r\n         if (entNode != null)\r\n         {\r\n            // return the list when it reaches the stop node\r\n            foreach (string stopCond in stopNode)\r\n               if (entNode.Name.Equals(stopCond, StringComparison.InvariantCultureIgnoreCase))\r\n                  return res;\r\n\r\n            bool continueSearch = true;\r\n            while (continueSearch)\r\n            {\r\n               entNode = entNode.GetParent();\r\n               // no more parent node to get\r\n               if (entNode == null)\r\n                  break;\r\n\r\n               // Stop the search when it reaches the stop node\r\n               foreach (string stopCond in stopNode)\r\n               {\r\n                  if (entNode.Name.Equals(stopCond, StringComparison.InvariantCultureIgnoreCase))\r\n                  {\r\n                     continueSearch = false;\r\n                     break;\r\n                  }\r\n               }\r\n               if (entNode != null)\r\n               {\r\n                  res.Add(entNode);\r\n               }\r\n            }\r\n         }\r\n         return res;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check whether an entity is a subtype of another entity\r\n      /// </summary>\r\n      /// <param name=\"subTypeName\">candidate of the subtype entity</param>\r\n      /// <param name=\"superTypeName\">candidate of the supertype entity</param>\r\n      /// <returns>true: if the the subTypeName is the subtype of supertTypeName</returns>\r\n      static public bool IsSubTypeOf(IFCVersion ifcVersion, IFCEntityType subType, IFCEntityType superType, bool strict = true)\r\n      {\r\n         return IsSubTypeOf(ifcVersion, subType.ToString(), superType.ToString(), strict);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check whether an entity (string) is a subtype of another entity\r\n      /// </summary>\r\n      /// <param name=\"context\">the IFC version in context for the check</param>\r\n      /// <param name=\"subTypeName\">the subtype name</param>\r\n      /// <param name=\"superTypeName\">the supertype name</param>\r\n      /// <param name=\"strict\">whether the subtype is strictly subtype. Set to false if it \"supertype == subtype\" is acceptable</param>\r\n      /// <returns>true if it is subtype</returns>\r\n      static public bool IsSubTypeOf(IFCVersion context, string subTypeName, string superTypeName, bool strict = true)\r\n      {\r\n         string contextName = SchemaName(context);\r\n         return IsSubTypeOf(contextName, subTypeName, superTypeName, strict);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check whether an entity (string) is a subtype of another entity\r\n      /// </summary>\r\n      /// <param name=\"context\">the IFC version in context for the check</param>\r\n      /// <param name=\"subTypeName\">the subtype name</param>\r\n      /// <param name=\"superTypeName\">the supertype name</param>\r\n      /// <param name=\"strict\">whether the subtype is strictly subtype. Set to false if it \"supertype == subtype\" is acceptable</param>\r\n      /// <returns>true if it is subtype</returns>\r\n      static public bool IsSubTypeOf(string context, string subTypeName, string superTypeName, bool strict = true)\r\n      {\r\n         IfcSchemaEntityTree ifcEntitySchemaTree = GetEntityDictFor(context);\r\n         //var ifcEntitySchemaTree = IfcSchemaEntityTree.GetEntityDictFor(context);\r\n         if (ifcEntitySchemaTree == null || ifcEntitySchemaTree.IfcEntityDict == null || ifcEntitySchemaTree.IfcEntityDict.Count == 0)\r\n            throw new Exception(\"Unable to locate IFC Schema xsd file! Make sure the relevant xsd \" + context + \" exists.\");\r\n\r\n         IfcSchemaEntityNode theNode = ifcEntitySchemaTree.Find(subTypeName);\r\n         if (theNode != null)\r\n         {\r\n            if (strict)\r\n               return theNode.IsSubTypeOf(superTypeName);\r\n            else\r\n               return theNode.Name.Equals(superTypeName, StringComparison.InvariantCultureIgnoreCase) || theNode.IsSubTypeOf(superTypeName);\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check whether an entity (string) is a supertype of another entity\r\n      /// </summary>\r\n      /// <param name=\"context\">the IFC version in context for the check</param>\r\n      /// <param name=\"superTypeName\">the supertype name</param>\r\n      /// <param name=\"subTypeName\">the subtype name</param>\r\n      /// <param name=\"strict\">whether the supertype is strictly supertype. Set to false if it \"supertype == subtype\" is acceptable</param>\r\n      /// <returns>true if it is supertype</returns>\r\n      static public bool IsSuperTypeOf(IFCVersion context, string superTypeName, string subTypeName, bool strict = true)\r\n      {\r\n         string contextName = SchemaName(context);\r\n         return IsSuperTypeOf(contextName, subTypeName, superTypeName, strict);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check whether an entity (string) is a supertype of another entity\r\n      /// </summary>\r\n      /// <param name=\"context\">the IFC version in context for the check</param>\r\n      /// <param name=\"superTypeName\">the supertype name</param>\r\n      /// <param name=\"subTypeName\">the subtype name</param>\r\n      /// <param name=\"strict\">whether the supertype is strictly supertype. Set to false if it \"supertype == subtype\" is acceptable</param>\r\n      /// <returns>true if it is supertype</returns>\r\n      static public bool IsSuperTypeOf(string context, string superTypeName, string subTypeName, bool strict = true)\r\n      {\r\n         IfcSchemaEntityTree ifcEntitySchemaTree = GetEntityDictFor(context);\r\n         //var ifcEntitySchemaTree = IfcSchemaEntityTree.GetEntityDictFor(context);\r\n         if (ifcEntitySchemaTree == null || ifcEntitySchemaTree.IfcEntityDict == null || ifcEntitySchemaTree.IfcEntityDict.Count == 0)\r\n            throw new Exception(\"Unable to locate IFC Schema xsd file! Make sure the relevant xsd \" + context + \" exists.\");\r\n\r\n         IfcSchemaEntityNode theNode = ifcEntitySchemaTree.Find(superTypeName);\r\n         if (theNode != null)\r\n         {\r\n            if (strict)\r\n               return theNode.IsSuperTypeOf(subTypeName);\r\n            else\r\n               return theNode.Name.Equals(subTypeName, StringComparison.InvariantCultureIgnoreCase) || theNode.IsSuperTypeOf(subTypeName);\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the PredefinedType list from the processed schema\r\n      /// </summary>\r\n      /// <param name=\"context\"></param>\r\n      /// <param name=\"ifcEntity\"></param>\r\n      /// <returns></returns>\r\n      static public IList<string> GetPredefinedTypeList(IFCVersion context, string ifcEntity)\r\n      {\r\n         IfcSchemaEntityTree ifcEntitySchemaTree = GetEntityDictFor(context);\r\n         return GetPredefinedTypeList(ifcEntitySchemaTree, ifcEntity);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the PredefinedType list from the given Ifc Entity tree\r\n      /// </summary>\r\n      /// <param name=\"context\">The IFC version</param>\r\n      /// <param name=\"ifcEntity\">the specific Entity to get the PredefinedType list from</param>\r\n      /// <returns>List of PredefinedType strings</returns>\r\n      static public IList<string> GetPredefinedTypeList(IfcSchemaEntityTree ifcEntitySchemaTree, string ifcEntity)\r\n      {\r\n         if ((ifcEntitySchemaTree?.IfcEntityDict?.Count ?? 0) == 0)\r\n            throw new Exception(\"Unable to locate IFC Schema xsd file! Make sure the relevant xsd exists.\");\r\n\r\n         if (string.IsNullOrEmpty(ifcEntity))\r\n            return null;\r\n\r\n         // Check for both <name>Enum, and <name>TypeEnum\r\n         string entEnum;\r\n         string entTypeEnum;\r\n         if (ifcEntity.EndsWith(\"Type\", StringComparison.InvariantCultureIgnoreCase))\r\n         {\r\n            entTypeEnum = ifcEntity + \"Enum\";\r\n            entEnum = ifcEntity.Remove(ifcEntity.Length - 4) + \"Enum\";\r\n         }\r\n         else\r\n         {\r\n            entEnum = ifcEntity + \"Enum\";\r\n            entTypeEnum = ifcEntity + \"TypeEnum\";\r\n         }\r\n         if (ifcEntitySchemaTree.PredefinedTypeEnumDict.ContainsKey(entEnum))\r\n            return ifcEntitySchemaTree.PredefinedTypeEnumDict[entEnum];\r\n         if (ifcEntitySchemaTree.PredefinedTypeEnumDict.ContainsKey(entTypeEnum))\r\n            return ifcEntitySchemaTree.PredefinedTypeEnumDict[entTypeEnum];\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return status whether an entity has been deprecated (according to the IFC documentation)\r\n      /// </summary>\r\n      /// <param name=\"entityName\">the entity name to check</param>\r\n      /// <returns>deprecation status</returns>\r\n      public static bool IsDeprecatedOrUnsupported(string schemaName, string entityName)\r\n      {\r\n         if (DeprecatedOrUnsupportedDict.ContainsKey(schemaName))\r\n         {\r\n            return DeprecatedOrUnsupportedDict[schemaName].Contains(entityName);\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks whether the specified predefined type of an entity is marked as deprecated \r\n      /// for the given schema.\r\n      /// </summary>\r\n      /// <param name=\"schemaName\">The name of the schema.</param>\r\n      /// <param name=\"entityName\">The name of the entity.</param>\r\n      /// <param name=\"predefinedTypeName\">The predefined type to check.</param>\r\n      /// <returns>\r\n      /// <c>true</c> if the specified predefined type is deprecated in the given schema; otherwise, <c>false</c>.\r\n      /// </returns>\r\n      public static bool IsDeprecatedPredefinedType(string schemaName, string entityName, string predefinedTypeName)\r\n      {\r\n         if (DeprecatedPredefinedType.TryGetValue(schemaName, out var entities))\r\n         {\r\n            if (entities.TryGetValue(entityName, out var predefinedTypes))\r\n            {\r\n               return predefinedTypes.Contains(predefinedTypeName);\r\n            }\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      #endregion\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Common/Utility/MathUtil.cs",
    "content": "﻿//\r\n// Revit IFC Common library: this library works with Autodesk(R) Revit(R) IFC import and export.\r\n// Copyright (C) 2012 Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing Autodesk.Revit;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\n\r\nnamespace Revit.IFC.Common.Utility\r\n{\r\n   /// <summary>\r\n   /// Simple wrapper for UV and XYZ.\r\n   /// The only purpose of it is to introduce common base class for them in order to have possibility to write generic code for UV and XYZ.\r\n   /// </summary>\r\n   public abstract class PointBase\r\n   { }\r\n   public class Point2D : PointBase\r\n   {\r\n      public Point2D(UV uv) { coords = uv; }\r\n      public UV coords { get; protected set; }\r\n   }\r\n   public class Point3D : PointBase\r\n   {\r\n      public Point3D(XYZ xyz) { coords = xyz; }\r\n      public XYZ coords { get; protected set; }\r\n   }\r\n   /// <summary>\r\n   /// Provides static methods for mathematical functions.\r\n   /// </summary>\r\n   public class MathUtil\r\n   {\r\n      /// <summary>\r\n      /// Returns a small value for use in comparing doubles.\r\n      /// </summary>\r\n      /// <returns>The value.</returns>\r\n      public static double Eps() => 1.0e-9;\r\n\r\n      public static double SmallGap()\r\n      {\r\n         return Eps() * 10;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check if two double variables are almost equal.\r\n      /// </summary>\r\n      /// <param name=\"d1\">The first value.</param>\r\n      /// <param name=\"d2\">The second value.</param>\r\n      /// <returns>\r\n      /// True if they are almost equal, false otherwise.\r\n      /// </returns>\r\n      public static bool IsAlmostEqual(double d1, double d2)\r\n      {\r\n         return IsAlmostEqual(d1, d2, Eps());\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check if two double variables are almost equal within a relative eps tolerance.\r\n      /// </summary>\r\n      /// <param name=\"d1\">The first value.</param>\r\n      /// <param name=\"d2\">The second value.</param>\r\n      /// <param name=\"eps\">The tolerance value.</param>\r\n      /// <returns>\r\n      /// True if they are almost equal, false otherwise.\r\n      /// </returns>\r\n      public static bool IsAlmostEqual(double d1, double d2, double eps)\r\n      {\r\n         double sum = Math.Abs(d1) + Math.Abs(d2);\r\n         if (sum < eps)\r\n            return true;\r\n         return (Math.Abs(d1 - d2) <= sum * eps);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check if two UV variables are almost equal.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// True if they are almost equal, false otherwise.\r\n      /// </returns>\r\n      public static bool IsAlmostEqual(UV uv1, UV uv2)\r\n      {\r\n         return IsAlmostEqual(uv1.U, uv2.U) && IsAlmostEqual(uv1.V, uv2.V);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check if two points are almost equal, regardless of scale of points.\r\n      /// </summary>\r\n      /// <param name=\"xyz1\">The first point.</param>\r\n      /// <param name=\"xyz2\">The second point.</param>\r\n      /// <returns>\r\n      /// True if they are almost equal, false otherwise.\r\n      /// </returns>\r\n      /// <remarks>\r\n      /// This function does an absolute, not relative, equality\r\n      /// comparision.  This can generate different results\r\n      /// than xyz1.IsAlmostEqualTo(xyz2) for large coordinates.</remarks>\r\n      public static bool IsAlmostEqualAbsolute(XYZ xyz1, XYZ xyz2)\r\n      {\r\n         if (xyz1 == null || xyz2 == null)\r\n            return (xyz1 == null && xyz2 == null);\r\n\r\n         return (xyz1 - xyz2).IsZeroLength();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check if the double variable is almost equal to zero.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// True if the value is almost zero, false otherwise.\r\n      /// </returns>\r\n      public static bool IsAlmostZero(double dd)\r\n      {\r\n         return Math.Abs(dd) <= Eps();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check if the double variable is almost equal to the closest (floor) integer.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>True if the value is almost equal to the closest (floor) integer, false otherwise.</returns>\r\n      public static bool IsAlmostInteger(double value)\r\n      {\r\n         return (MathUtil.IsAlmostEqual(value, Math.Floor(value)));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check if the area value is almost equal to zero.\r\n      /// </summary>\r\n      /// <param name=\"area\">The area.</param>\r\n      /// <returns>True if the value is almost zero, false otherwise.</returns>\r\n      public static bool AreaIsAlmostZero(double area)\r\n      {\r\n         return Math.Abs(area) < Eps() * Eps();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check if the volume value is almost equal to zero.\r\n      /// </summary>\r\n      /// <param name=\"volume\">The volume.</param>\r\n      /// <returns>True if the value is almost zero, false otherwise.</returns>\r\n      public static bool VolumeIsAlmostZero(double volume)\r\n      {\r\n         return Math.Abs(volume) < Eps() * Eps() * Eps();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns number in range [midRange-period/2, midRange+period/2].\r\n      /// </summary>\r\n      /// <param name=\"number\">The number.</param>\r\n      /// <param name=\"midRange\">The middle range.</param>\r\n      /// <param name=\"period\">The period.</param>\r\n      /// <returns>The number in range.</returns>\r\n      public static double PutInRange(double number, double midRange, double period)\r\n      {\r\n         if (period < Eps())\r\n            return number;\r\n\r\n         double halfPeriod = 0.5 * period;\r\n         double[] range = new double[2] { midRange - halfPeriod, midRange + halfPeriod };\r\n\r\n         for (int ii = 0; ii < 2; ii++)\r\n         {\r\n            if (IsAlmostEqual(number, range[ii]))\r\n               return range[ii];\r\n         }\r\n\r\n         double shiftCountAsDouble = 0.0;\r\n         if (number < range[0])\r\n            shiftCountAsDouble += (1.0 + Math.Floor((range[0] - number) / period));\r\n         if (number >= range[1])\r\n            shiftCountAsDouble -= (1.0 + Math.Floor((number - range[1]) / period));\r\n\r\n         number += period * shiftCountAsDouble;\r\n\r\n         if (number > (range[1] + Eps()) || number < (range[0] - Eps()))\r\n            throw new InvalidOperationException(\"Failed to put number into range.\");\r\n\r\n         return number;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if two vectors are parallel or not.\r\n      /// </summary>\r\n      /// <param name=\"a\">The one vector.</param>\r\n      /// <param name=\"b\">The other vector.</param>\r\n      /// <returns>True if they are parallel, false if not.</returns>\r\n      public static bool VectorsAreParallel(XYZ a, XYZ b)\r\n      {\r\n         int ret = VectorsAreParallel2(a, b);\r\n\r\n         return ret == 1 || ret == -1;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns an integer to indicate if two vectors are parallel, antiparallel or not.\r\n      /// </summary>\r\n      /// <param name=\"a\">The one vector.</param>\r\n      /// <param name=\"b\">The other vector.</param>\r\n      /// <returns>1 parallel, -1 antiparallel, 0 not parallel.</returns>\r\n      public static int VectorsAreParallel2(XYZ a, XYZ b)\r\n      {\r\n         if (a == null || b == null)\r\n            return 0;\r\n\r\n         double aa, bb, ab;\r\n         double epsSq = Eps() * Eps();\r\n         double angleEps = Math.PI / 1800.0;\r\n\r\n         aa = a.DotProduct(a);\r\n         bb = b.DotProduct(b);\r\n\r\n         if (aa < epsSq || bb < epsSq)\r\n            return 0;\r\n\r\n         ab = a.DotProduct(b);\r\n         double cosAngleSq = (ab / aa) * (ab / bb);\r\n         if (cosAngleSq < 1.0 - angleEps * angleEps)\r\n            return 0;\r\n\r\n         return ab > 0 ? 1 : -1;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if two vectors are orthogonal or not.\r\n      /// </summary>\r\n      /// <param name=\"a\">The one vector.</param>\r\n      /// <param name=\"b\">The other vector.</param>\r\n      /// <returns>True if they are orthogonal, false if not.</returns>\r\n      public static bool VectorsAreOrthogonal(XYZ a, XYZ b)\r\n      {\r\n         if (a == null || b == null)\r\n            return false;\r\n\r\n         if (a.IsAlmostEqualTo(XYZ.Zero) || b.IsAlmostEqualTo(XYZ.Zero))\r\n            return true;\r\n\r\n         double ab = a.DotProduct(b);\r\n         double aa = a.DotProduct(a);\r\n         double bb = b.DotProduct(b);\r\n         double angleEps = Math.PI / 1800.0;\r\n\r\n         return (ab * ab < aa * angleEps * bb * angleEps) ? true : false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Swaps the values of two variables.\r\n      /// </summary>\r\n      /// <typeparam name=\"T\">The type.</typeparam>\r\n      /// <param name=\"left\">The first variable.</param>\r\n      /// <param name=\"right\">The second variable.</param>\r\n      public static void Swap<T>(ref T left, ref T right)\r\n      {\r\n         T temp;\r\n         temp = left;\r\n         left = right;\r\n         right = temp;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Do an arccosine operation that allows for input values slightly smaller than -1 and slightly bigger than 1.\r\n      /// </summary>\r\n      /// <param name=\"val\">The value.</param>\r\n      /// <returns>The arccosine of the value.</returns>\r\n      /// <remarks>If the input number is outside the range of -1.0 - Eps() to 1.0 + Eps(), it will still return NaN.</remarks>\r\n      public static double SafeAcos(double val)\r\n      {\r\n         // We only want to change values outside of the range, not valid values close to but not equal to -1 or 1.\r\n         if (val >= 1.0 && (val - 1.0) < Eps())\r\n            return 0.0;\r\n         if (val <= -1.0 && (-val - 1.0) < Eps())\r\n            return Math.PI;\r\n         return Math.Acos(val);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Do an arcsine operation that allows for input values slightly smaller than -1 and slightly bigger than 1.\r\n      /// </summary>\r\n      /// <param name=\"val\">The value.</param>\r\n      /// <returns>The arcsine of the value.</returns>\r\n      /// <remarks>If the input number is outside the range of -1.0 - Eps() to 1.0 + Eps(), it will still return NaN.</remarks>\r\n      public static double SafeAsin(double val)\r\n      {\r\n         // We only want to change values outside of the range, not valid values close to but not equal to -1 or 1.\r\n         if (val >= 1.0 && (val - 1.0) < Eps())\r\n            return Math.PI / 2.0;\r\n         if (val <= -1.0 && (-val - 1.0) < Eps())\r\n            return -Math.PI / 2.0;\r\n         return Math.Asin(val);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Utility/OptionsUtil.cs",
    "content": "﻿//\r\n// Revit IFC Common library: this library works with Autodesk(R) Revit(R) IFC import and export.\r\n// Copyright (C) 2012 Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Xml;\r\nusing System.IO;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Extensions;\r\n\r\nnamespace Revit.IFC.Common.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides static methods for dealing with import/export options.\r\n   /// </summary>\r\n   public class OptionsUtil\r\n   {\r\n      private const string LegacyParameterMappingFileName = \"IFCParameterMapping\";\r\n      private const string NewParameterMappingFileName = \"IFCNewParameterMapping\";\r\n\r\n      /// <summary>\r\n      /// Determines whether legacy parameter mapping should be used based on the current debug mode.\r\n      /// </summary>\r\n      public static bool UseLegacyParameterMapping()\r\n      {\r\n         IFCExportOptions exportOptions = new()\r\n         {\r\n            FamilyMappingFile = LegacyParameterMappingFileName\r\n         };\r\n\r\n         IFCExportOptions assignedOptions = new();\r\n         assignedOptions.Assign(exportOptions);\r\n\r\n         return !string.Equals(assignedOptions.FamilyMappingFile, NewParameterMappingFileName,\r\n            StringComparison.InvariantCultureIgnoreCase);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Utility for processing a Boolean option from the options collection.\r\n      /// </summary>\r\n      /// <param name=\"options\">The collection of named options for IFC export.</param>\r\n      /// <param name=\"optionName\">The name of the target option.</param>\r\n      /// <returns>The value of the option, or null if the option is not set.</returns>\r\n      public static bool? GetNamedBooleanOption(IDictionary<String, String> options, String optionName)\r\n      {\r\n         string optionString;\r\n         if (options.TryGetValue(optionName, out optionString))\r\n         {\r\n            bool option;\r\n            if (bool.TryParse(optionString, out option))\r\n               return option;\r\n\r\n            // TODO: consider logging this error later and handling results better.\r\n            throw new Exception(\"Option '\" + optionName + \"' could not be parsed to Boolean.\");\r\n         }\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Utility for processing a string option from the options collection.\r\n      /// </summary>\r\n      /// <param name=\"options\">The collection of named options for IFC export.</param>\r\n      /// <param name=\"optionName\">The name of the target option.</param>\r\n      /// <returns>The value of the option, or null if the option is not set.</returns>\r\n      public static string GetNamedStringOption(IDictionary<string, string> options, String optionName)\r\n      {\r\n         string optionString;\r\n         options.TryGetValue(optionName, out optionString);\r\n         return optionString;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Utility for processing integer option from the options collection.\r\n      /// </summary>\r\n      /// <param name=\"options\">The collection of named options for IFC export.</param>\r\n      /// <param name=\"optionName\">The name of the target option.</param>\r\n      /// <returns>The value of the option, or null if the option is not set.</returns>\r\n      public static int? GetNamedIntOption(IDictionary<String, String> options, String optionName)\r\n      {\r\n         String optionString;\r\n         if (options.TryGetValue(optionName, out optionString))\r\n         {\r\n            int option;\r\n            if (int.TryParse(optionString, out option))\r\n               return option;\r\n\r\n            // TODO: consider logging this error later and handling results better.\r\n            throw new Exception(\"Option '\" + optionName + \"' could not be parsed to int\");\r\n         }\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Utility for processing a signed 64-bit integer option from the options collection.\r\n      /// </summary>\r\n      /// <param name=\"options\">The collection of named options for IFC export.</param>\r\n      /// <param name=\"optionName\">The name of the target option.</param>\r\n      /// <param name=\"throwOnError\">True if we should throw if we can't parse the value.</param>\r\n      /// <returns>The value of the option, or null if the option is not set.</returns>\r\n      public static Int64? GetNamedInt64Option(IDictionary<string, string> options, string optionName, bool throwOnError)\r\n      {\r\n         string optionString;\r\n         if (options.TryGetValue(optionName, out optionString))\r\n         {\r\n            Int64 option;\r\n            if (Int64.TryParse(optionString, out option))\r\n               return option;\r\n\r\n            // TODO: consider logging this error later and handling results better.\r\n            if (throwOnError)\r\n               throw new Exception(\"Option '\" + optionName + \"' could not be parsed to int.\");\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Utility for processing double option from the options collection.\r\n      /// </summary>\r\n      /// <param name=\"options\">The collection of named options for IFC export</param>\r\n      /// <param name=\"optionName\">The name of the target option</param>\r\n      /// <returns>the value of the option, or null if the option is not set</returns>\r\n      public static double? GetNamedDoubleOption(IDictionary<String, String> options, String optionName)\r\n      {\r\n         String optionString;\r\n         if (options.TryGetValue(optionName, out optionString))\r\n         {\r\n            double option;\r\n            if (double.TryParse(optionString, out option))\r\n               return option;\r\n\r\n            // TODO: consider logging this error later and handling results better.\r\n            throw new Exception(\"Option '\" + optionName + \"' could not be parsed to double\");\r\n         }\r\n         return null;\r\n      }\r\n\r\n      #region ExportFileVersion\r\n      /// <summary>\r\n      /// Identifies if the schema version being exported is IFC 2x2.\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">The file version</param>\r\n      public static bool ExportAs2x2 (IFCVersion fileVersion)\r\n      {\r\n         return fileVersion == IFCVersion.IFC2x2;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema version being exported is IFC 2x3 Coordination View 1.0.\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">The file version</param>\r\n      public static bool ExportAs2x3CoordinationView1 (IFCVersion fileVersion)\r\n      {\r\n         return (fileVersion == IFCVersion.IFC2x3);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema version being exported is IFC 2x3 Coordination View 2.0.\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">The file version</param>\r\n      public static bool ExportAs2x3CoordinationView2 (IFCVersion fileVersion)\r\n      {\r\n         return (fileVersion == IFCVersion.IFC2x3CV2 || fileVersion == IFCVersion.IFCBCA);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema version being exported is IFC 2x3 Extended FM Handover View (e.g., UK COBie).\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">The file version</param>\r\n      public static bool ExportAs2x3ExtendedFMHandoverView (IFCVersion fileVersion)\r\n      {\r\n         return (fileVersion == IFCVersion.IFC2x3FM);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema version and MVD being exported is IFC 2x3 Coordination View 2.0 or any IFC 4 MVD.\r\n      /// </summary>\r\n      /// <remarks>IFC 4 Coordination View 2.0 is not a real MVD; this was a placeholder and is obsolete.</remarks>\r\n      /// <param name=\"fileVersion\">The file version</param>\r\n      public static bool ExportAsCoordinationView2 (IFCVersion fileVersion)\r\n      {\r\n         return (fileVersion == IFCVersion.IFC2x3CV2) || (fileVersion == IFCVersion.IFC4) || (fileVersion == IFCVersion.IFC2x3FM)\r\n            || (fileVersion == IFCVersion.IFC2x3BFM) || (fileVersion == IFCVersion.IFCBCA);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the IFC schema version is older than IFC 4.\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">The file version</param>\r\n      public static bool ExportAsOlderThanIFC4 (IFCVersion fileVersion)\r\n      {\r\n         return ExportAs2x2(fileVersion) || ExportAs2x3(fileVersion);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the IFC schema version is older than IFC 4x3\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">The file version</param>\r\n      public static bool ExportAsOlderThanIFC4x3(IFCVersion fileVersion)\r\n      {\r\n         return ExportAs2x2(fileVersion) || ExportAs2x3(fileVersion) || ExportAs4(fileVersion);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the IFC schema version being exported is IFC 4.\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">The file version</param>\r\n      public static bool ExportAs4 (IFCVersion fileVersion)\r\n      {\r\n         return (fileVersion == IFCVersion.IFC4) || (fileVersion == IFCVersion.IFC4RV) || (fileVersion == IFCVersion.IFC4DTV) ||\r\n            (fileVersion == IFCVersion.IFCSG);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema used is IFC 2x3.\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">The file version</param>\r\n      public static bool ExportAs2x3 (IFCVersion fileVersion)\r\n      {\r\n         return ((fileVersion == IFCVersion.IFC2x3) || (fileVersion == IFCVersion.IFCCOBIE) || (fileVersion == IFCVersion.IFC2x3FM) \r\n            || (fileVersion == IFCVersion.IFC2x3BFM) || (fileVersion == IFCVersion.IFC2x3CV2));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema and MVD used is the IFC 2x3 GSA 2010 COBie specification.\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">The file version</param>\r\n      public static bool ExportAsCOBIE (IFCVersion fileVersion)\r\n      {\r\n         return (fileVersion == IFCVersion.IFCCOBIE);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema and MVD used is the IFC 4 Reference View.\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">The file version</param>\r\n      public static bool ExportAs4ReferenceView (IFCVersion fileVersion)\r\n      {\r\n         return (fileVersion == IFCVersion.IFC4RV) || (fileVersion == IFCVersion.IFCSG);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema and MVD used is the IFC 4 Design Transfer View.\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">The file version</param>\r\n      public static bool ExportAs4DesignTransferView (IFCVersion fileVersion)\r\n      {\r\n         return (fileVersion == IFCVersion.IFC4DTV);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Option to be used for general IFC4 export (not specific to RV or DTV MVDs). Useful when there is a need to export entities that are not strictly valid within RV or DTV\r\n      /// It should work like IFC2x3, except that it will use IFC4 tessellated geometry instead of IFC2x3 BREP\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">The file version</param>\r\n      public static bool ExportAs4General (IFCVersion fileVersion)\r\n      {\r\n         return (fileVersion == IFCVersion.IFC4);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Option to export to IFC4x3 schema\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">the file version</param>\r\n      /// <returns></returns>\r\n      public static bool ExportAs4x3(IFCVersion fileVersion)\r\n      {\r\n         return (fileVersion == IFCVersion.IFC4x3) \r\n            || (fileVersion == IFCVersion.IFC4x3RV) \r\n            || (fileVersion == IFCVersion.IFC4x3DTV);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema and MVD used is the IFC 4.3 Design Transfer View.\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">The file version</param>\r\n      public static bool ExportAs4x3DesignTransferView(IFCVersion fileVersion)\r\n      {\r\n         return (fileVersion == IFCVersion.IFC4x3DTV);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema and MVD used is the IFC 4.3 Reference View.\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">The file version</param>\r\n      public static bool ExportAs4x3ReferenceView(IFCVersion fileVersion)\r\n      {\r\n         return (fileVersion == IFCVersion.IFC4x3RV);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema and MVD used is the IFC 2x3 COBie 2.4 Design Deliverable.\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">The file version</param>\r\n      public static bool ExportAs2x3COBIE24DesignDeliverable (IFCVersion fileVersion)\r\n      {\r\n         return (fileVersion == IFCVersion.IFC2x3FM);\r\n      }\r\n      #endregion\r\n\r\n      /// <summary>\r\n      /// Get EPSG code from SiteLocation.GeoCoordinateSystemDefinition which is a full definition in XML regarding a specific Projected Coordinate System\r\n      /// IFC expects only EPSG code as described in the schema https://standards.buildingsmart.org/MVD/RELEASE/IFC4/ADD2_TC1/RV1_2/HTML/schema/ifcrepresentationresource/lexical/ifccoordinatereferencesystem.htm\r\n      /// </summary>\r\n      /// <param name=\"siteLocation\">The project SiteLocation</param>\r\n      /// <returns>returns EPSG string if found, null otherwise</returns>\r\n      public static (string projectedCRSName, string projectedCRSDesc, string epsgCode, string geodeticDatum, string uom) GetEPSGCodeFromGeoCoordDef(SiteLocation siteLocation)\r\n      {\r\n         string projectedCRSName = null;\r\n         string projectedCRSDesc = null;\r\n         string epsgStr = null;\r\n         string geodeticDatum = null;\r\n         string uom = null;\r\n         string xmlGeoCoordDef = siteLocation.GeoCoordinateSystemDefinition;\r\n         if (string.IsNullOrEmpty(xmlGeoCoordDef))\r\n            return (projectedCRSName, projectedCRSDesc, epsgStr, geodeticDatum, uom);\r\n\r\n         // The XML file may have a number of \"Authority\"s in it.  We want to take the correct one.\r\n         int authorityDepth = int.MaxValue; \r\n         XmlTextReader reader = new XmlTextReader(new StringReader(xmlGeoCoordDef));\r\n         while (reader.Read())\r\n         {\r\n            if (reader.NodeType != XmlNodeType.Element)\r\n               continue;\r\n\r\n            if (reader.Name.Equals(\"Alias\", StringComparison.InvariantCultureIgnoreCase) && reader.Depth < authorityDepth)\r\n            {\r\n               int aliasReadDepth = reader.Depth;\r\n\r\n               string idAsString = reader.GetAttribute(\"id\");\r\n               int.TryParse(idAsString, out int id);\r\n               while (reader.Read() && reader.Depth > aliasReadDepth)\r\n               {\r\n                  if (reader.NodeType != XmlNodeType.Element)\r\n                  {\r\n                     continue;\r\n                  }\r\n\r\n                  if (reader.Name.Equals(\"NameSpace\", StringComparison.InvariantCultureIgnoreCase))\r\n                  {\r\n                     string nameSpaceValue = reader.ReadElementContentAsString();\r\n                     if (nameSpaceValue.Equals(\"EPSG Code\", StringComparison.InvariantCultureIgnoreCase))\r\n                     {\r\n                        epsgStr = \"EPSG:\" + idAsString;\r\n                        authorityDepth = aliasReadDepth;\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n               \r\n            if (!reader.Name.Equals(\"ProjectedCoordinateSystem\", StringComparison.InvariantCultureIgnoreCase))\r\n               continue;\r\n\r\n            int startDepth = reader.Depth;\r\n            while (reader.Read() && reader.Depth > startDepth)\r\n            {\r\n               if (reader.NodeType != XmlNodeType.Element)\r\n               {\r\n                  continue;\r\n               }\r\n\r\n               if (reader.Name.Equals(\"Name\", StringComparison.InvariantCultureIgnoreCase))\r\n               {\r\n                  if (string.IsNullOrEmpty(projectedCRSName))        // Prevent from being overwritten\r\n                     projectedCRSName = reader.ReadElementContentAsString();\r\n               }\r\n               else if (reader.Name.Equals(\"Authority\", StringComparison.InvariantCultureIgnoreCase) &&\r\n                  reader.Depth < authorityDepth)\r\n               {\r\n                  string authVal = reader.ReadElementContentAsString();\r\n                  if (authVal.StartsWith(\"EPSG\", StringComparison.InvariantCultureIgnoreCase))\r\n                  {\r\n                     // The Authority value may vary in format. We are looking for the item that is whole number\r\n                     string[] tokens = authVal.Split(' ', ',');\r\n                     foreach (string tok in tokens)\r\n                     {\r\n                        // Look for pure code/number for the EPSG number\r\n                        int epsgCode = -1;\r\n                        if (int.TryParse(tok, out epsgCode))\r\n                        {\r\n                           epsgStr = \"EPSG:\" + tok;\r\n                           authorityDepth = reader.Depth;\r\n                           break;\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n               else if (reader.Name.Equals(\"Description\", StringComparison.InvariantCultureIgnoreCase))\r\n               {\r\n                  if (string.IsNullOrEmpty(projectedCRSDesc))        // Prevent from being overwritten\r\n                     projectedCRSDesc = reader.ReadElementContentAsString();\r\n               }\r\n               else if (reader.Name.Equals(\"DatumId\", StringComparison.InvariantCultureIgnoreCase))\r\n               {\r\n                  if (string.IsNullOrEmpty(geodeticDatum))        // Prevent from being overwritten\r\n                     geodeticDatum = reader.ReadElementContentAsString();\r\n               }\r\n               else if (reader.Name.Equals(\"Axis\", StringComparison.InvariantCultureIgnoreCase))\r\n               {\r\n                  uom = reader.GetAttribute(\"uom\").ToUpper();\r\n                  uom = uom.Replace(\"METER\", \"METRE\");\r\n               }\r\n            }\r\n         }\r\n\r\n         return (projectedCRSName, projectedCRSDesc, epsgStr, geodeticDatum, uom);\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Compute the Eastings, Northings, OrthogonalHeight from the selected SiteTransformationBasis and scale values\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document</param>\r\n      /// <param name=\"wcsBasis\">The selected coordinate base</param>\r\n      /// <returns>A Tuple of scaled values for Eastings, Northings, and OrthogonalHeight</returns>\r\n      public static (double eastings, double northings, double orthogonalHeight, double angleTN, double origAngleTN) ScaledGeoReferenceInformation\r\n         (Document doc, SiteTransformBasis wcsBasis, ProjectLocation projLocation = null)\r\n      {\r\n         (double eastings, double northings, double orthogonalHeight, double angleTN, double origAngleTN) geoRef = GeoReferenceInformation(doc, wcsBasis, projLocation);\r\n         FormatOptions lenFormatOptions = doc.GetUnits().GetFormatOptions(SpecTypeId.Length);\r\n         ForgeTypeId lengthUnit = lenFormatOptions.GetUnitTypeId();\r\n         geoRef.eastings = UnitUtils.ConvertFromInternalUnits(geoRef.eastings, lengthUnit);\r\n         geoRef.northings = UnitUtils.ConvertFromInternalUnits(geoRef.northings, lengthUnit);\r\n         geoRef.orthogonalHeight = UnitUtils.ConvertFromInternalUnits(geoRef.orthogonalHeight, lengthUnit);\r\n\r\n         FormatOptions angleFormatOptions = doc.GetUnits().GetFormatOptions(SpecTypeId.Angle);\r\n         ForgeTypeId angleUnit = angleFormatOptions.GetUnitTypeId();\r\n         geoRef.angleTN = UnitUtils.ConvertFromInternalUnits(geoRef.angleTN, angleUnit);\r\n         return (geoRef);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get ProjectLocation details for both Survey Point and Project Base Point\r\n      /// It will try to duplicate a SiteLocation if it is not good (e.g. NonConformal) in some of the old data\r\n      /// </summary>\r\n      /// <param name=\"doc\"></param>\r\n      /// <param name=\"svPosition\"></param>\r\n      /// <param name=\"pbPosition\"></param>\r\n      /// <returns></returns>\r\n      public static (double svNorthings, double svEastings, double svElevation, double svAngle, double pbNorthings, double pbEastings, double pbElevation, double pbAngle) ProjectLocationInfo \r\n         (Document doc, XYZ svPosition, XYZ pbPosition)\r\n      {\r\n         double svNorthings = 0.0;\r\n         double svEastings = 0.0;\r\n         double svAngle = 0.0;\r\n         double svElevation = 0.0;\r\n         double pbNorthings = 0.0;\r\n         double pbEastings = 0.0;\r\n         double pbElevation = 0.0;\r\n         double pbAngle = 0.0;\r\n\r\n         try\r\n         {\r\n            ProjectPosition surveyPos = doc.ActiveProjectLocation.GetProjectPosition(svPosition);\r\n            svNorthings = surveyPos.NorthSouth;\r\n            svEastings = surveyPos.EastWest;\r\n            svElevation = surveyPos.Elevation;\r\n            svAngle = surveyPos.Angle;\r\n\r\n            ProjectPosition projectBasePos = doc.ActiveProjectLocation.GetProjectPosition(pbPosition);\r\n            pbNorthings = projectBasePos.NorthSouth;\r\n            pbEastings = projectBasePos.EastWest;\r\n            pbElevation = projectBasePos.Elevation;\r\n            pbAngle = projectBasePos.Angle;\r\n         }\r\n         catch (Autodesk.Revit.Exceptions.InvalidOperationException)\r\n         {\r\n            // If the exception is due to not good data that causes Transform not formed correctly, duplicating it may actually solve the problem\r\n            try\r\n            {\r\n               ProjectLocation duplProjectLocation = doc.ActiveProjectLocation.Duplicate(doc.ActiveProjectLocation.Name + \"-Copy\");\r\n               doc.ActiveProjectLocation = duplProjectLocation;\r\n\r\n               ProjectPosition surveyPos = doc.ActiveProjectLocation.GetProjectPosition(svPosition);\r\n               svNorthings = surveyPos.NorthSouth;\r\n               svEastings = surveyPos.EastWest;\r\n               svAngle = surveyPos.Angle;\r\n               svElevation = surveyPos.Elevation;\r\n\r\n               ProjectPosition projectBasePos = doc.ActiveProjectLocation.GetProjectPosition(pbPosition);\r\n               pbNorthings = projectBasePos.NorthSouth;\r\n               pbEastings = projectBasePos.EastWest;\r\n               pbAngle = projectBasePos.Angle;\r\n               pbElevation = projectBasePos.Elevation;\r\n            }\r\n            catch { }\r\n         }\r\n\r\n         return (svNorthings, svEastings, svElevation, svAngle, pbNorthings, pbEastings, pbElevation, pbAngle);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Compute the Eastings, Northings, OrthogonalHeight from the selected SiteTransformationBasis\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document</param>\r\n      /// <param name=\"wcsBasis\">The selected coordinate base</param>\r\n      /// <returns>A Tuple for Eastings, Northings, and OrthogonalHeight</returns>\r\n      public static (double eastings, double northings, double orthogonalHeight, double angleTN, double origAngleTN) GeoReferenceInformation\r\n         (Document doc, SiteTransformBasis wcsBasis, ProjectLocation projLocation = null)\r\n      {\r\n         double eastings = 0.0;\r\n         double northings = 0.0;\r\n         double orthogonalHeight = 0.0;\r\n         double angleTN = 0.0;\r\n         double origAngleTN = 0.0;\r\n\r\n         using (Transaction tr = new Transaction(doc))\r\n         {\r\n            try\r\n            {\r\n               tr.Start(\"Temp Project Location change\");\r\n            }\r\n            catch { }\r\n\r\n            using (SubTransaction tempSiteLocTr = new SubTransaction(doc))\r\n            {\r\n               tempSiteLocTr.Start();\r\n               if (projLocation != null)\r\n                  doc.ActiveProjectLocation = projLocation;\r\n\r\n               BasePoint surveyPoint = BasePoint.GetSurveyPoint(doc);\r\n               BasePoint projectBasePoint = BasePoint.GetProjectBasePoint(doc);\r\n               if (surveyPoint == null || projectBasePoint == null)\r\n                  return (eastings, northings, orthogonalHeight, angleTN, origAngleTN);\r\n\r\n               (double svNorthings, double svEastings, double svElevation, double svAngle, double pbNorthings, \r\n                  double pbEastings, double pbElevation, double pbAngle) = ProjectLocationInfo(doc, surveyPoint.Position, projectBasePoint.Position);\r\n               origAngleTN = pbAngle;\r\n\r\n               switch (wcsBasis)\r\n               {\r\n                  case SiteTransformBasis.Internal:\r\n                     Transform rotationTrfAtInternal = Transform.CreateRotationAtPoint(new XYZ(0, 0, 1), svAngle, XYZ.Zero);\r\n                     XYZ intPointOffset = rotationTrfAtInternal.OfPoint(surveyPoint.Position);\r\n                     northings = svNorthings - intPointOffset.Y;\r\n                     eastings = svEastings - intPointOffset.X;\r\n                     orthogonalHeight = surveyPoint.SharedPosition.Z - surveyPoint.Position.Z;\r\n                     angleTN = -svAngle;\r\n                     break;\r\n                  case SiteTransformBasis.InternalInTN:\r\n                     rotationTrfAtInternal = Transform.CreateRotationAtPoint(new XYZ(0, 0, 1), svAngle, XYZ.Zero);\r\n                     intPointOffset = rotationTrfAtInternal.OfPoint(surveyPoint.Position);\r\n                     northings = svNorthings - intPointOffset.Y;\r\n                     eastings = svEastings - intPointOffset.X;\r\n                     orthogonalHeight = surveyPoint.SharedPosition.Z - surveyPoint.Position.Z;\r\n                     angleTN = 0.0;\r\n                     break;\r\n                  case SiteTransformBasis.Project:\r\n                     northings = pbNorthings;\r\n                     eastings = pbEastings;\r\n                     orthogonalHeight = pbElevation;\r\n                     angleTN = -pbAngle;\r\n                     break;\r\n                  case SiteTransformBasis.ProjectInTN:\r\n                     northings = pbNorthings;\r\n                     eastings = pbEastings;\r\n                     orthogonalHeight = pbElevation;\r\n                     angleTN = 0.0;\r\n                     break;\r\n                  case SiteTransformBasis.Shared:\r\n                     northings = 0.0;\r\n                     eastings = 0.0;\r\n                     orthogonalHeight = 0.0;\r\n                     angleTN = 0.0;\r\n                     break;\r\n                  case SiteTransformBasis.Site:\r\n                     northings = svNorthings;\r\n                     eastings = svEastings;\r\n                     orthogonalHeight = svElevation;\r\n                     angleTN = 0.0;\r\n                     break;\r\n                  default:\r\n                     northings = 0.0;\r\n                     eastings = 0.0;\r\n                     orthogonalHeight = 0.0;\r\n                     angleTN = 0.0;\r\n                     break;\r\n               }\r\n               tempSiteLocTr.RollBack();\r\n            }\r\n         }\r\n\r\n         return (eastings, northings, orthogonalHeight, angleTN, origAngleTN);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check IFC File Version pre-IFC4\r\n      /// </summary>\r\n      /// <param name=\"ifcVersion\">The IFCVersion</param>\r\n      /// <returns>true if the version is prior to IFC4</returns>\r\n      public static bool PreIFC4Version(IFCVersion ifcVersion)\r\n      {\r\n         return (ifcVersion == IFCVersion.IFC2x2\r\n            || ifcVersion == IFCVersion.IFC2x3\r\n            || ifcVersion == IFCVersion.IFC2x3BFM\r\n            || ifcVersion == IFCVersion.IFC2x3CV2\r\n            || ifcVersion == IFCVersion.IFC2x3FM\r\n            || ifcVersion == IFCVersion.IFCBCA\r\n            || ifcVersion == IFCVersion.IFCCOBIE);\r\n      }\r\n\r\n      /// <summary>\r\n      /// IFC File header using Options instead of Extensible Storage\r\n      /// </summary>\r\n      public static IFCFileHeaderItem FileHeaderIFC { get; set; } = new IFCFileHeaderItem();\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Utility/ProcessIFCXMLSchema.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing System.IO;\r\nusing System.Xml;\r\nusing System.Xml.Schema;\r\n\r\nnamespace Revit.IFC.Common.Utility\r\n{\r\n   public class ProcessIFCXMLSchema\r\n   {\r\n      /// <summary>\r\n      /// Process an IFCXML schema file\r\n      /// </summary>\r\n      /// <param name=\"ifcxmlSchemaFile\">the IfcXML schema file info</param>\r\n      /// <param name=\"theTree\">the IFC Entity tree</param>\r\n      public static bool ProcessIFCSchema(FileInfo ifcxmlSchemaFile, ref IfcSchemaEntityTree theTree)\r\n      {\r\n         string loadedSchema = Path.GetFileNameWithoutExtension(ifcxmlSchemaFile.Name);\r\n         XmlTextReader reader = new XmlTextReader(ifcxmlSchemaFile.FullName);\r\n         XmlSchema theSchema = XmlSchema.Read(reader, ValidationCallback);\r\n         foreach (XmlSchemaObject item in theSchema.Items)\r\n         {\r\n            if (item is XmlSchemaComplexType)\r\n            {\r\n\r\n            XmlSchemaComplexType ct = item as XmlSchemaComplexType;\r\n            string entityName = ct.Name;\r\n\r\n            if (string.Compare(entityName, 0, \"Ifc\", 0, 3, ignoreCase: true) != 0)\r\n               continue;\r\n\r\n            string parentName = string.Empty;\r\n\r\n            if (ct.ContentModel == null)\r\n               continue;\r\n\r\n            if (ct.ContentModel.Parent == null)\r\n               continue;\r\n\r\n               string predefTypeEnum = null;\r\n            if (ct.ContentModel.Parent is XmlSchemaComplexType)\r\n            {\r\n               XmlSchemaComplexType parent = ct.ContentModel.Parent as XmlSchemaComplexType;\r\n               XmlSchemaSimpleContentExtension parentSimpleType = parent.ContentModel.Content as XmlSchemaSimpleContentExtension;\r\n               XmlSchemaComplexContentExtension parentComplexType = parent.ContentModel.Content as XmlSchemaComplexContentExtension;\r\n               if (parentSimpleType != null)\r\n                  {\r\n                  parentName = parentSimpleType.BaseTypeName.Name;\r\n                     foreach (XmlSchemaAttribute attr in parentSimpleType.Attributes)\r\n                     {\r\n                        if (attr.Name != null && attr.Name.Equals(\"PredefinedType\", StringComparison.InvariantCultureIgnoreCase))\r\n                           predefTypeEnum = attr.SchemaTypeName.Name;\r\n                     }\r\n                  }\r\n               if (parentComplexType != null)\r\n                  {\r\n                  parentName = parentComplexType.BaseTypeName.Name;\r\n                     foreach (XmlSchemaAttribute attr in parentComplexType.Attributes)\r\n                     {\r\n                        if (attr.Name != null && attr.Name.Equals(\"PredefinedType\", StringComparison.InvariantCultureIgnoreCase))\r\n                        {\r\n                           predefTypeEnum = attr.SchemaTypeName.Name;\r\n                           break;\r\n                        }\r\n                     }\r\n\r\n                     if (string.IsNullOrEmpty(predefTypeEnum) && parentComplexType.Particle != null)\r\n                     { \r\n                        XmlSchemaSequence seq = parentComplexType.Particle as XmlSchemaSequence;\r\n                        if (seq != null)\r\n                        {\r\n                           foreach (XmlSchemaElement elem in seq.Items)\r\n                           {\r\n                              if (elem.Name != null && elem.Name.Equals(\"PredefinedType\", StringComparison.InvariantCultureIgnoreCase))\r\n                              {\r\n                                 predefTypeEnum = elem.SchemaTypeName.Name;\r\n                                 break;\r\n                              }\r\n                           }\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n\r\n               theTree.Add(entityName, parentName, predefTypeEnum, isAbstract: ct.IsAbstract);\r\n            }\r\n            else if (item is XmlSchemaSimpleType)\r\n            {\r\n               XmlSchemaSimpleType st = item as XmlSchemaSimpleType;\r\n               if (st.Name.StartsWith(\"Ifc\", StringComparison.InvariantCultureIgnoreCase)\r\n                  && st.Name.EndsWith(\"Enum\", StringComparison.InvariantCultureIgnoreCase))\r\n               {\r\n                  string enumName = st.Name;\r\n                  XmlSchemaSimpleTypeRestriction enums = st.Content as XmlSchemaSimpleTypeRestriction;\r\n                  if (enums != null)\r\n                  {\r\n                     IList<string> enumValueList = new List<string>();\r\n                     foreach (XmlSchemaEnumerationFacet enumFacet in enums.Facets)\r\n                     {\r\n                        if (theTree.PredefinedTypeEnumDict.ContainsKey(enumName))\r\n                        {\r\n                           theTree.PredefinedTypeEnumDict[enumName].Add(enumFacet.Value.ToUpper());\r\n                        }\r\n                        else\r\n                        {\r\n                           enumValueList.Add(enumFacet.Value.ToUpper());\r\n                        }\r\n                     }\r\n                     if (enumValueList.Count > 0)\r\n                        theTree.PredefinedTypeEnumDict.Add(enumName, enumValueList);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         return true;\r\n      }\r\n\r\n      static void ValidationCallback(object sender, ValidationEventArgs args)\r\n      {\r\n         Console.WriteLine(args.Message);\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Common/Utility/RevitStatusBar.cs",
    "content": "﻿//\r\n// Revit IFC Common library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace Revit.IFC.Common.Utility\r\n{\r\n   /// <summary>\r\n   /// Utilities for overwriting the Revit status bar.\r\n   /// Code inspired by: http://thebuildingcoder.typepad.com/blog/2011/02/status-bar-text.html\r\n   /// </summary>\r\n   public class RevitStatusBar\r\n   {\r\n\r\n      [DllImport(\"user32.dll\",\r\n        SetLastError = true)]\r\n      static extern IntPtr FindWindowEx(\r\n        IntPtr hwndParent,\r\n        IntPtr hwndChildAfter,\r\n        string lpszClass,\r\n        string lpszWindow);\r\n\r\n      [DllImport(\"user32.dll\",\r\n         SetLastError = true,\r\n         CharSet = CharSet.Auto)]\r\n      static extern int SetWindowText(\r\n        IntPtr hWnd,\r\n        string lpString);\r\n\r\n      private IntPtr m_StatusBar = IntPtr.Zero;\r\n\r\n      protected RevitStatusBar()\r\n      {\r\n         // Find the status bar, so we can add messages.\r\n         IntPtr revitHandle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;\r\n         if (revitHandle != IntPtr.Zero)\r\n            m_StatusBar = FindWindowEx(revitHandle, IntPtr.Zero, \"msctls_statusbar32\", \"\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set the value of the status bar, if there is a valid handle to it.\r\n      /// </summary>\r\n      /// <param name=\"msg\">The message.</param>\r\n      public void Set(string msg)\r\n      {\r\n         if (m_StatusBar != IntPtr.Zero)\r\n         {\r\n            SetWindowText(m_StatusBar, msg);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a new RevitStatusBar.\r\n      /// </summary>\r\n      /// <returns>The RevitStatusBar.</returns>\r\n      public static RevitStatusBar Create()\r\n      {\r\n         return new RevitStatusBar();\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Common/Utility/SolidMeshGeometryInfo.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\n\nnamespace Revit.IFC.Common.Utility\n{\n   /// <summary>\n   /// A solid with extra pertinant information.\n   /// </summary>\n   public class SolidInfo\n   {\n      /// <summary>\n      /// The constructor.\n      /// </summary>\n      /// <param name=\"solid\">The solid.</param>\n      /// <param name=\"ownerElement\">The optional owner element for this solid.</param>\n      public SolidInfo(Solid solid, Element ownerElement)\n      {\n         Solid = solid;\n         OwnerElement = ownerElement;\n      }\n\n      /// <summary>\n      /// The contained solid.\n      /// </summary>\n      public Solid Solid { get; protected set; }\n\n      /// <summary>\n      /// The element that contains the solid in its GeometryElement.\n      /// This is optional, and can be unset (null).\n      /// </summary>\n      public Element OwnerElement { get; protected set; }\n   }\n\n   /// <summary>\n   /// A container class for lists of solids and meshes.\n   /// </summary>\n   /// <remarks>\n   /// Added in 2013, this is a migration from the IFCSolidMeshGeometryInfo class \n   /// that is used within the BeamExporter, BodyExporter, WallExporter, \n   /// FamilyInstanceExporter and RepresentationUtil classes.\n   /// </remarks>\n   public class SolidMeshGeometryInfo\n   {\n      // A list of collected solids, and the external element (if any) that generated them.\n      // In general, this will be this will be non-null if the geometry come from an\n      // Instance/Symbol pair, and will be the element that contains the geometry\n      // that the Instance is pointing to.\n      public IList<SolidInfo> SolidInfoList { get; set; } = new List<SolidInfo>();\n\n      // A list of collected meshes.\n      public List<Mesh> MeshesList { get; protected set; } = new List<Mesh>();\n\n      /// <summary>\n      /// Creates a default SolidMeshGeometryInfo with empty solidsList and meshesList. \n      /// </summary>\n      public SolidMeshGeometryInfo()\n      {\n      }\n\n      /// <summary>\n      /// Appends a given Solid to the solidsList.\n      /// </summary>\n      /// <param name=\"geomElem\">\n      /// The Solid we are appending to the solidsList.\n      /// </param>\n      public void AddSolid(Solid solidToAdd, Element externalElement)\n      {\n         SolidInfoList.Add(new SolidInfo(solidToAdd, externalElement));\n      }\n\n      /// <summary>\n      /// Appends a given Mesh to the meshesList. \n      /// </summary>\n      /// <param name=\"meshToAdd\">\n      /// The Mesh we are appending to the meshesList.\n      /// </param>\n      public void AddMesh(Mesh meshToAdd)\n      {\n         MeshesList.Add(meshToAdd);\n      }\n\n      /// <summary>\n      /// Returns the list of Solids and their generating external elements. \n      /// </summary>\n      /// <remarks>We return a List instead of an IList for the AddRange functionality.</remarks>\n      public List<Solid> GetSolids()\n      {\n         List<Solid> solids = new List<Solid>();\n         foreach (SolidInfo solidInfo in SolidInfoList)\n         {\n            solids.Add(solidInfo.Solid);\n         }\n         return solids;\n      }\n\n      /// <summary>\n      /// Returns the list of Meshes. \n      /// </summary>\n      public List<Mesh> GetMeshes()\n      {\n         return MeshesList;\n      }\n\n      /// <summary>\n      /// Returns the number of Solids in solidsList.\n      /// </summary>\n      public int SolidsCount()\n      {\n         return SolidInfoList.Count;\n      }\n\n      /// <summary>\n      /// Returns the number of Meshes in meshesList.\n      /// </summary>\n      public int MeshesCount()\n      {\n         return MeshesList.Count;\n      }\n\n      /// <summary>\n      /// This method takes the solidsList and clips all of its solids between the given range.\n      /// </summary>\n      /// <param name=\"elem\">The Element from which we obtain our BoundingBoxXYZ.</param>\n      /// <param name=\"geomElem\">The top-level GeometryElement from which to gather X and Y \n      /// coordinates for the intersecting solid.</param>\n      /// <param name=\"range\">The IFCRange whose Z values we use to create an intersecting \n      /// solid to clip the solids in this class's internal solidsList.\n      /// If range boundaries are equal, method returns, performing no clippings.</param>\n      public void ClipSolidsList(GeometryElement geomElem, IFCRange range)\n      {\n         if (geomElem == null)\n         {\n            throw new ArgumentNullException(\"geomElemToUse\");\n         }\n\n         if (MathUtil.IsAlmostEqual(range.Start, range.End) || SolidsCount() == 0)\n         {\n            return;\n         }\n\n         double bottomZ;\n         double boundDifference;\n         if (range.Start < range.End)\n         {\n            bottomZ = range.Start;\n            boundDifference = range.End - range.Start;\n         }\n         else\n         {\n            bottomZ = range.End;\n            boundDifference = range.Start - range.End;\n         }\n\n         // create a new solid using the X and Y of the bounding box on the top level GeometryElement and the Z of the IFCRange\n         BoundingBoxXYZ elemBoundingBox = geomElem.GetBoundingBox();\n         XYZ pointA = new XYZ(elemBoundingBox.Min.X, elemBoundingBox.Min.Y, bottomZ);\n         XYZ pointB = new XYZ(elemBoundingBox.Max.X, elemBoundingBox.Min.Y, bottomZ);\n         XYZ pointC = new XYZ(elemBoundingBox.Max.X, elemBoundingBox.Max.Y, bottomZ);\n         XYZ pointD = new XYZ(elemBoundingBox.Min.X, elemBoundingBox.Max.Y, bottomZ);\n\n         List<Curve> perimeter = new List<Curve>();\n\n         try\n         {\n            perimeter.Add(Line.CreateBound(pointA, pointB));\n            perimeter.Add(Line.CreateBound(pointB, pointC));\n            perimeter.Add(Line.CreateBound(pointC, pointD));\n            perimeter.Add(Line.CreateBound(pointD, pointA));\n         }\n         catch\n         {\n            // One of the boundary lines was invalid.  Do nothing.\n            return;\n         }\n\n         List<CurveLoop> boxPerimeterList = new List<CurveLoop>();\n         boxPerimeterList.Add(CurveLoop.Create(perimeter));\n         Solid intersectionSolid = GeometryCreationUtilities.CreateExtrusionGeometry(boxPerimeterList, XYZ.BasisZ, boundDifference);\n\n         // cycle through the elements in solidsList and intersect them against intersectionSolid to create a new list\n         List<SolidInfo> clippedSolidsList = new List<SolidInfo>();\n         Solid currSolid;\n\n         foreach (SolidInfo solidAndElement in SolidInfoList)\n         {\n            Solid solid = solidAndElement.Solid;\n\n            try\n            {\n               // ExecuteBooleanOperation can throw if it fails.  In this case, just ignore the clipping.\n               currSolid = BooleanOperationsUtils.ExecuteBooleanOperation(solid, intersectionSolid, BooleanOperationsType.Intersect);\n               if (currSolid != null && currSolid.Volume != 0)\n               {\n                  clippedSolidsList.Add(new SolidInfo(currSolid, solidAndElement.OwnerElement));\n               }\n            }\n            catch\n            {\n               // unable to perform intersection, add original solid instead\n               clippedSolidsList.Add(solidAndElement);\n            }\n         }\n\n         SolidInfoList = clippedSolidsList;\n      }\n\n      /// <summary>\n      /// Transforms a geometry by a given transform.\n      /// </summary>\n      /// <remarks>The geometry element created by \"GetTransformed\" is a copy which will have its own allocated\n      /// membership - this needs to be stored and disposed of (see AllocatedGeometryObjectCache\n      /// for details)</remarks>\n      /// <param name=\"geomElem\">The geometry.</param>\n      /// <param name=\"trf\">The transform.</param>\n      /// <param name=\"geometryObjectCache\">The cache that will prevent the data from being disposed.</param>\n      /// <returns>The transformed geometry.</returns>\n      public static GeometryElement GetTransformedGeometry(GeometryElement geomElem, \n         Transform trf, AllocatedGeometryObjectCache geometryObjectCache)\n      {\n         if (geomElem == null)\n            return null;\n\n         GeometryElement currGeomElem = geomElem.GetTransformed(trf);\n         geometryObjectCache.AddGeometryObject(currGeomElem);\n         return currGeomElem;\n      }\n\n\n      /// <summary>\n      /// Collects all solids and meshes within all nested levels of a given GeometryElement.\n      /// </summary>\n      /// <remarks>\n      /// This is intended as a private helper method for the GetSolidMeshGeometry type collection methods.\n      /// </remarks>\n      /// <param name=\"geomElem\">The GeometryElement we are collecting solids and meshes from.</param>\n      /// <param name=\"containingElement\">The element that contains the geomElem.  It can be null.</param>\n      /// <param name=\"trf\">The initial Transform applied on the GeometryElement.</param>\n      /// <param name=\"geometryObjectCache\">The cache that will prevent the data from being disposed.</param>\n      private void CollectSolidMeshGeometry(GeometryElement geomElem,\n         Element containingElement, Transform trf, AllocatedGeometryObjectCache geometryObjectCache)\n      {\n         if (geomElem == null)\n            return;\n\n         GeometryElement currGeomElem = geomElem;\n         Transform localTrf = trf;\n         if (localTrf == null)\n            localTrf = Transform.Identity;\n         else if (!localTrf.IsIdentity)\n            currGeomElem = GetTransformedGeometry(geomElem, localTrf, geometryObjectCache);\n\n         // iterate through the GeometryObjects contained in the GeometryElement\n         foreach (GeometryObject geomObj in currGeomElem)\n         {\n            // Add try catch here because in a rare cases we find solid that throws exception/invalid solid.Faces\n            try\n            {\n               Solid solid = geomObj as Solid;\n               if (solid != null && solid.Faces.Size > 0)\n               {\n                  AddSolid(solid, containingElement);\n               }\n               else\n               {\n                  Mesh mesh = geomObj as Mesh;\n                  if (mesh != null)\n                  {\n                     AddMesh(mesh);\n                  }\n                  else\n                  {\n                     // if the current geomObj is castable as a GeometryInstance, then we perform the same collection on its symbol geometry\n                     GeometryInstance inst = geomObj as GeometryInstance;\n\n                     if (inst != null)\n                     {\n                        try\n                        {\n                           GeometryElement instanceSymbol = inst.GetSymbolGeometry();\n                           if (instanceSymbol != null && instanceSymbol.Count() != 0)\n                           {\n                              Transform instanceTransform = localTrf.Multiply(inst.Transform);\n                              Element symbol = inst.GetDocument()?.GetElement(inst.GetSymbolGeometryId().SymbolId);\n                              CollectSolidMeshGeometry(instanceSymbol, symbol,\n                                 instanceTransform, geometryObjectCache);\n                           }\n                        }\n                        catch\n                        {\n                        }\n                     }\n                  }\n               }\n            }\n            catch\n            {\n            }\n         }\n      }\n\n      /// <summary>\n      /// Collects all solids and meshes within all nested levels of a given GeometryElement.\n      /// </summary>\n      /// <remarks>\n      /// This is intended as a helper method for the GetSolidMeshGeometry type collection methods.\n      /// </remarks>\n      /// <param name=\"geomElem\">The GeometryElement we are collecting solids and meshes from.</param>\n      public void CollectSolidMeshGeometry(GeometryElement geomElem, AllocatedGeometryObjectCache geometryObjectCache)\n      {\n         CollectSolidMeshGeometry(geomElem, null, Transform.Identity, geometryObjectCache);\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/AreaSchemeExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Mechanical;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export an AreaScheme element as IfcGroup.\r\n   /// </summary>\r\n   class AreaSchemeExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports an element as a group.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC File object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportAreaScheme(IFCFile file, AreaScheme element,\r\n          ProductWrapper productWrapper)\r\n      {\r\n         if (element == null)\r\n            return;\r\n\r\n         if (!ExporterCacheManager.AreaSchemeCache.TryGetValue(element.Id, out HashSet<IFCAnyHandle> areaHandles))\r\n            return;\r\n\r\n         if (areaHandles == null || areaHandles.Count == 0)\r\n            return;\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         Common.Enums.IFCEntityType elementClassTypeEnum = Common.Enums.IFCEntityType.IfcGroup;\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n            return;\r\n\r\n         using (IFCTransaction tr = new(file))\r\n         {\r\n            string guid = GUIDUtil.CreateGUID(element);\r\n            IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n            string name = NamingUtil.GetNameOverride(element, element.Name);\r\n            string description = NamingUtil.GetDescriptionOverride(element, null);\r\n            string objectType = NamingUtil.GetDefaultObjectType(element);\r\n\r\n            string elementTag = NamingUtil.CreateIFCElementId(element);\r\n\r\n            IFCAnyHandle areaScheme = IFCInstanceExporter.CreateGroup(file, guid,\r\n                ownerHistory, name, description, objectType);\r\n            IFCExportInfoPair exportInfo = new(elementClassTypeEnum);\r\n            productWrapper.AddElement(element, areaScheme, exportInfo);\r\n\r\n            string groupGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAssignsToGroup, areaScheme));\r\n            IFCInstanceExporter.CreateRelAssignsToGroup(file, groupGuid, ownerHistory,\r\n                null, null, areaHandles, null, areaScheme);\r\n\r\n            tr.Commit();\r\n            return;\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/AssemblyInstanceExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export a Revit element as IfcElementAssembly.\r\n   /// </summary>\r\n   class AssemblyInstanceExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports an element as an IFC assembly.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <returns>True if exported successfully, false otherwise.</returns>\r\n      public static bool ExportAssemblyInstanceElement(ExporterIFC exporterIFC, AssemblyInstance element,\r\n          ProductWrapper productWrapper)\r\n      {\r\n         if (element == null)\r\n            return false;\r\n\r\n         if (ExporterCacheManager.AssemblyInstanceCache.TryGetValue(element.Id,\r\n            out AssemblyInstanceInfo info) &&\r\n            !IFCAnyHandleUtil.IsNullOrHasNoValue(info.AssemblyInstanceHandle))\r\n            return true;      // Already processed before\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction tr = new(file))\r\n         {\r\n            IFCAnyHandle assemblyInstanceHnd = null;\r\n\r\n            string guid = GUIDUtil.CreateGUID(element);\r\n            IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n            IFCAnyHandle localPlacement = null;\r\n            PlacementSetter placementSetter = null;\r\n            IFCLevelInfo levelInfo = null;\r\n            bool relateToLevel = true;\r\n            ElementId overrideContainerId = ElementId.InvalidElementId;\r\n\r\n            IFCExportInfoPair exportAs = ExporterUtil.GetObjectExportType(element, out string ifcEnumType);\r\n            if (exportAs.ExportInstance == IFCEntityType.IfcSystem)\r\n            {\r\n               string name = NamingUtil.GetNameOverride(element, NamingUtil.GetIFCName(element));\r\n               string description = NamingUtil.GetDescriptionOverride(element, null);\r\n               string objectType = NamingUtil.GetDefaultObjectType(element);\r\n               assemblyInstanceHnd = IFCInstanceExporter.CreateSystem(file, guid, ownerHistory, name, description, objectType);\r\n\r\n               HashSet<IFCAnyHandle> relatedBuildings = new() { ExporterCacheManager.BuildingHandle };\r\n               \r\n               string relServicesBuildingsGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelServicesBuildings, assemblyInstanceHnd));\r\n               IFCAnyHandle relServicesBuildings = IFCInstanceExporter.CreateRelServicesBuildings(file,\r\n                  relServicesBuildingsGuid, ExporterCacheManager.OwnerHistoryHandle, null, null, \r\n                  assemblyInstanceHnd, relatedBuildings);\r\n\r\n               relateToLevel = false; // Already related to the building via IfcRelServicesBuildings.\r\n            }\r\n            else\r\n            {\r\n               // Check for containment override\r\n               overrideContainerId = ParameterUtil.OverrideContainmentParameter(element, out IFCAnyHandle overrideContainerHnd);\r\n\r\n               if (overrideContainerId == null || overrideContainerId == ElementId.InvalidElementId)\r\n                  overrideContainerId = ExporterCacheManager.LevelInfoCache.GetLevelIdOfObject(element);\r\n               using (placementSetter = PlacementSetter.Create(exporterIFC, element, null, null, overrideContainerId, overrideContainerHnd))\r\n               {\r\n                  IFCAnyHandle representation = null;\r\n\r\n                  // We have limited support for exporting assemblies as other container types.\r\n                  localPlacement = placementSetter.LocalPlacement;\r\n                  levelInfo = placementSetter.LevelInfo;\r\n\r\n                  assemblyInstanceHnd = IFCInstanceExporter.CreateGenericIFCEntity(exportAs, file, element, guid,\r\n                     ownerHistory, localPlacement, representation);\r\n               }\r\n            }\r\n\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(assemblyInstanceHnd))\r\n               return false;\r\n\r\n            // Create classification reference when the Assembly has classification field name assigned to it\r\n            ClassificationUtil.CreateClassification(exporterIFC, file, element,\r\n               assemblyInstanceHnd);\r\n\r\n            // relateToLevel depends on how the AssemblyInstance is being mapped to IFC, above.\r\n            productWrapper.AddElement(element, assemblyInstanceHnd, levelInfo, null,\r\n               relateToLevel, exportAs);\r\n\r\n            ExporterCacheManager.AssemblyInstanceCache.RegisterAssemblyInstance(element.Id,\r\n               assemblyInstanceHnd, overrideContainerId);\r\n\r\n            IFCAnyHandle typeHnd = ExporterUtil.CreateGenericTypeFromElement(element, exportAs, \r\n               file, productWrapper);\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(typeHnd))\r\n            {\r\n               ExporterCacheManager.TypeRelationsCache.Add(typeHnd, assemblyInstanceHnd);\r\n            }\r\n\r\n            tr.Commit();\r\n            return true;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Update the local placements of the members of an assembly relative to the assembly.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporerIFC.</param>\r\n      /// <param name=\"assemblyPlacement\">The assembly local placement handle.</param>\r\n      /// <param name=\"elementPlacements\">The member local placement handles.</param>\r\n      public static void SetLocalPlacementsRelativeToAssembly(ExporterIFC exporterIFC, IFCAnyHandle assemblyPlacement, ICollection<IFCAnyHandle> elementPlacements)\r\n      {\r\n         foreach (IFCAnyHandle elementHandle in elementPlacements)\r\n         {\r\n            IFCAnyHandle elementPlacement = null;\r\n            try\r\n            {\r\n               // The assembly may contain nested groups, that don't have an object placement.  In this case, continue.\r\n               elementPlacement = IFCAnyHandleUtil.GetObjectPlacement(elementHandle);\r\n            }\r\n            catch\r\n            {\r\n               continue;\r\n            }\r\n\r\n            Transform relTrf = ExporterUtil.GetRelativePlacementOffsetTransform(exporterIFC, assemblyPlacement, elementPlacement);\r\n            Transform inverseTrf = relTrf.Inverse;\r\n\r\n            IFCFile file = exporterIFC.GetFile();\r\n            IFCAnyHandle relLocalPlacement = ExporterUtil.CreateAxis2Placement3D(file, inverseTrf.Origin, inverseTrf.BasisZ, inverseTrf.BasisX);\r\n\r\n            // NOTE: caution that old IFCAXIS2PLACEMENT3D may be unused as the new one replace it. \r\n            // But we cannot delete it safely yet because we don't know if any handle is referencing it.\r\n            GeometryUtil.SetRelativePlacement(elementPlacement, relLocalPlacement);\r\n\r\n            GeometryUtil.SetPlacementRelTo(elementPlacement, assemblyPlacement);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a truss as an IFC assembly.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"truss\">The truss element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportTrussElement(ExporterIFC exporterIFC, Truss truss,\r\n          ProductWrapper productWrapper)\r\n      {\r\n         if (truss == null)\r\n            return;\r\n\r\n         ICollection<ElementId> trussMemberIds = truss.Members;\r\n         ExportAssemblyInstanceWithMembers(exporterIFC, truss, trussMemberIds, IFCElementAssemblyType.Truss, productWrapper);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a beam system as an IFC assembly.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"beamSystem\">The beam system.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportBeamSystem(ExporterIFC exporterIFC, BeamSystem beamSystem,\r\n          ProductWrapper productWrapper)\r\n      {\r\n         if (beamSystem == null)\r\n            return;\r\n\r\n         ICollection<ElementId> beamMemberIds = beamSystem.GetBeamIds();\r\n         ExportAssemblyInstanceWithMembers(exporterIFC, beamSystem, beamMemberIds, IFCElementAssemblyType.Beam_Grid, productWrapper);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports an element as an IFC assembly with its members.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"assemblyElem\">The element to be exported as IFC assembly.</param>\r\n      /// <param name=\"memberIds\">The member element ids.</param>\r\n      /// <param name=\"assemblyType\">The IFC assembly type.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      static void ExportAssemblyInstanceWithMembers(ExporterIFC exporterIFC, Element assemblyElem,\r\n          ICollection<ElementId> memberIds, IFCElementAssemblyType assemblyType, ProductWrapper productWrapper)\r\n      {\r\n         HashSet<IFCAnyHandle> memberHnds = new();\r\n\r\n         foreach (ElementId memberId in memberIds)\r\n         {\r\n            memberHnds.AddIfNotNull(ExporterCacheManager.ElementToHandleCache.Find(memberId));\r\n         }\r\n\r\n         if (memberHnds.Count == 0)\r\n            return;\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         IFCEntityType elementClassTypeEnum = IFCEntityType.IfcElementAssembly;\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            // Check for containment override\r\n            IFCAnyHandle overrideContainerHnd = null;\r\n            ElementId overrideContainerId = ParameterUtil.OverrideContainmentParameter(assemblyElem, out overrideContainerHnd);\r\n\r\n            using (PlacementSetter placementSetter = PlacementSetter.Create(exporterIFC, assemblyElem, null, null, overrideContainerId, overrideContainerHnd))\r\n            {\r\n               IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n               IFCAnyHandle localPlacement = placementSetter.LocalPlacement;\r\n\r\n               string guid = GUIDUtil.CreateGUID(assemblyElem);\r\n\r\n\r\n               IFCAnyHandle assemblyInstanceHnd = IFCInstanceExporter.CreateElementAssembly(exporterIFC, assemblyElem, guid,\r\n                   ownerHistory, localPlacement, null, IFCAssemblyPlace.NotDefined, assemblyType);\r\n               IFCExportInfoPair exportInfo = new IFCExportInfoPair(elementClassTypeEnum, assemblyType.ToString());\r\n\r\n               productWrapper.AddElement(assemblyElem, assemblyInstanceHnd, placementSetter.LevelInfo, null, true, exportInfo);\r\n\r\n               string aggregateGuid = GUIDUtil.CreateSubElementGUID(assemblyElem, (int)IFCAssemblyInstanceSubElements.RelAggregates);\r\n               IFCInstanceExporter.CreateRelAggregates(file, aggregateGuid, ownerHistory, null, null, assemblyInstanceHnd, memberHnds);\r\n\r\n               ExporterCacheManager.ElementsInAssembliesCache.UnionWith(memberHnds);\r\n\r\n               // Update member local placements to be relative to the assembly.\r\n               SetLocalPlacementsRelativeToAssembly(exporterIFC, localPlacement, memberHnds);\r\n            }\r\n            tr.Commit();\r\n         }\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/AssemblyInstanceInfo.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to import and export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   public class AssemblyInstanceInfo\r\n   {\r\n      private IFCAnyHandle m_AssemblyInstanceHandle = null;\r\n\r\n      private HashSet<IFCAnyHandle> m_ElementHandles = new HashSet<IFCAnyHandle>();\r\n      public ElementId AssignedLevelId { get; set; }\r\n\r\n      /// <summary>\r\n      /// The Assembly Instance handle.\r\n      /// </summary>\r\n      public IFCAnyHandle AssemblyInstanceHandle\r\n      {\r\n         get { return m_AssemblyInstanceHandle; }\r\n         set { m_AssemblyInstanceHandle = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Assembly Instance handle.\r\n      /// </summary>\r\n      public HashSet<IFCAnyHandle> ElementHandles\r\n      {\r\n         get { return m_ElementHandles; }\r\n         set { m_ElementHandles = value; }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/BeamExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export beams.\r\n   /// </summary>\r\n   public class BeamExporter\r\n   {\r\n      /// <summary>\r\n      /// A structure to contain information about the defining axis of a beam.\r\n      /// </summary>\r\n      public class BeamAxisInfo\r\n      {\r\n         /// <summary>\r\n         /// The default constructor.\r\n         /// </summary>\r\n         public BeamAxisInfo()\r\n         {\r\n            Axis = null;\r\n            LCSAsTransform = null;\r\n            AxisDirection = null;\r\n            AxisNormal = null;\r\n         }\r\n\r\n         /// <summary>\r\n         /// The curve that represents the beam axis.\r\n         /// </summary>\r\n         public Curve Axis { get; set; }\r\n\r\n         /// <summary>\r\n         /// The local coordinate system of the beam used for IFC export as a transform.\r\n         /// </summary>\r\n         public Transform LCSAsTransform { get; set; }\r\n\r\n         /// <summary>\r\n         /// The tangent to the axis at the start parameter of the axis curve.\r\n         /// </summary>\r\n         public XYZ AxisDirection { get; set; }\r\n\r\n         /// <summary>\r\n         /// The normal to the axis at the start parameter of the axis curve.\r\n         /// </summary>\r\n         public XYZ AxisNormal { get; set; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// A structure to contain the body representation of the beam, if it can be expressed as an extrusion, potentially with clippings and openings.\r\n      /// </summary>\r\n      private class BeamBodyAsExtrusionInfo\r\n      {\r\n         /// <summary>\r\n         /// The default constructor.\r\n         /// </summary>\r\n         public BeamBodyAsExtrusionInfo()\r\n         {\r\n            RepresentationHandle = null;\r\n            Materials = null;\r\n            Slope = 0.0;\r\n            DontExport = false;\r\n         }\r\n\r\n         /// <summary>\r\n         /// The IFC handle representing the created extrusion, potentially with clippings.\r\n         /// </summary>\r\n         public IFCAnyHandle RepresentationHandle { get; set; }\r\n\r\n         /// <summary>\r\n         /// The set of material ids for the beam.  This should usually only contain one material id. (Probably will be deprecated, replaced with MaterialProfile)\r\n         /// </summary>\r\n         public ICollection<ElementId> Materials { get; set; }\r\n\r\n         /// <summary>\r\n         /// The material profile set for the extruded Beam\r\n         /// </summary>\r\n         public MaterialAndProfile MaterialAndProfile { get; set; }\r\n\r\n         /// <summary>\r\n         /// The calculated slope of the beam along its axis, relative to the XY plane.\r\n         /// </summary>\r\n         public double Slope { get; set; }\r\n\r\n         /// <summary>\r\n         /// True if the beam has no geometry to export, and as such attempts to export should stop.\r\n         /// </summary>\r\n         public bool DontExport { get; set; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get information about the beam axis, if possible.\r\n      /// </summary>\r\n      /// <param name=\"element\">The beam element.</param>\r\n      /// <returns>The BeamAxisInfo structure, or null if the beam has no axis, or it is not a Line or Arc.</returns>\r\n      public static BeamAxisInfo GetBeamAxisTransform(Element element)\r\n      {\r\n         BeamAxisInfo axisInfo = null;\r\n\r\n         Transform orientTrf = Transform.Identity;\r\n         XYZ beamDirection = null;\r\n         XYZ projDir = null;\r\n         Curve curve = null;\r\n\r\n         LocationCurve locCurve = element.Location as LocationCurve;\r\n         bool canExportAxis = (locCurve != null);\r\n\r\n         if (canExportAxis)\r\n         {\r\n            curve = locCurve.Curve;\r\n            if (curve is Line)\r\n            {\r\n               Line line = curve as Line;\r\n               XYZ planeY, planeOrig;\r\n               planeOrig = line.GetEndPoint(0);\r\n               beamDirection = line.Direction;\r\n               beamDirection = beamDirection.Normalize();\r\n               if (Math.Abs(beamDirection.Z) < 0.707)  // approx 1.0/sqrt(2.0)\r\n               {\r\n                  planeY = XYZ.BasisZ.CrossProduct(beamDirection);\r\n               }\r\n               else\r\n               {\r\n                  planeY = XYZ.BasisX.CrossProduct(beamDirection);\r\n               }\r\n               planeY = planeY.Normalize();\r\n               projDir = beamDirection.CrossProduct(planeY);\r\n               orientTrf.BasisX = beamDirection; orientTrf.BasisY = planeY; orientTrf.BasisZ = projDir; orientTrf.Origin = planeOrig;\r\n            }\r\n            else if (curve is Arc)\r\n            {\r\n               XYZ yDir, center;\r\n               Arc arc = curve as Arc;\r\n               beamDirection = arc.XDirection; yDir = arc.YDirection; projDir = arc.Normal; center = arc.Center;\r\n               beamDirection = beamDirection.Normalize();\r\n               yDir = yDir.Normalize();\r\n               if (!MathUtil.IsAlmostZero(beamDirection.DotProduct(yDir)))\r\n               {\r\n                  // ensure that beamDirection and yDir are orthogonal\r\n                  yDir = projDir.CrossProduct(beamDirection);\r\n                  yDir = yDir.Normalize();\r\n               }\r\n               orientTrf.BasisX = beamDirection; orientTrf.BasisY = yDir; orientTrf.BasisZ = projDir; orientTrf.Origin = center;\r\n            }\r\n            else\r\n               canExportAxis = false;\r\n         }\r\n\r\n         if (canExportAxis)\r\n         {\r\n            axisInfo = new BeamAxisInfo();\r\n            axisInfo.Axis = curve;\r\n            axisInfo.AxisDirection = beamDirection;\r\n            axisInfo.AxisNormal = projDir;\r\n            axisInfo.LCSAsTransform = orientTrf;\r\n         }\r\n\r\n         return axisInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create the handle corresponding to the \"Axis\" IfcRepresentation for a beam, if possible.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC class.</param>\r\n      /// <param name=\"element\">The beam element.</param>\r\n      /// <param name=\"catId\">The beam category id.</param>\r\n      /// <param name=\"axisInfo\">The optional beam axis information.</param>\r\n      /// <param name=\"offsetTransform\">The optional offset transform applied to the \"Body\" representation.</param>\r\n      /// <param name=\"elevation\">The optional level elevation.</param>\r\n      /// <returns>The handle, or null if not created.</returns>\r\n      private static IFCAnyHandle CreateBeamAxis(ExporterIFC exporterIFC, Element element, ElementId catId, BeamAxisInfo axisInfo, Transform offsetTransform, double elevation)\r\n      {\r\n         if (axisInfo == null)\r\n            return null;\r\n\r\n         Curve curve = axisInfo.Axis;\r\n         XYZ projDir = axisInfo.AxisNormal;\r\n         Transform lcs = axisInfo.LCSAsTransform;\r\n\r\n         string representationTypeOpt = \"Curve2D\";  // This is by IFC2x2+ convention.\r\n\r\n         XYZ curveOffset = XYZ.Zero;\r\n         if (offsetTransform != null)\r\n         {\r\n            curveOffset = -(offsetTransform.Origin);\r\n            curveOffset -= new XYZ(0, 0, elevation);\r\n         }\r\n         else\r\n         {\r\n            // Note that we do not have to have any scaling adjustment here, since the curve origin is in the \r\n            // same internal coordinate system as the curve.\r\n            curveOffset = -lcs.Origin;\r\n         }\r\n\r\n         Transform offsetLCS = new Transform(lcs);\r\n         offsetLCS.Origin = XYZ.Zero;\r\n         IList<IFCAnyHandle> axis_items = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n         {\r\n            IFCAnyHandle axisHnd = GeometryUtil.CreatePolyCurveFromCurve(exporterIFC, curve);\r\n            axis_items = new List<IFCAnyHandle>();\r\n            if (axis_items.AddIfNotNull(axisHnd))\r\n            {\r\n               representationTypeOpt = \"Curve3D\";        // We use Curve3D for IFC4RV Axis\r\n            }\r\n         }\r\n         else\r\n         {\r\n            IFCGeometryInfo info = IFCGeometryInfo.CreateCurveGeometryInfo(exporterIFC, offsetLCS, projDir, false);\r\n            ExporterIFCUtils.CollectGeometryInfo(exporterIFC, info, curve, curveOffset, true);\r\n\r\n            axis_items = info.GetCurves();\r\n         }\r\n\r\n         if (axis_items.Count > 0)\r\n         {\r\n            IFCRepresentationIdentifier identifier = IFCRepresentationIdentifier.Axis;\r\n            string identifierOpt = identifier.ToString();   // This is by IFC2x2+ convention.\r\n            IFCAnyHandle contextHandle3d = ExporterCacheManager.Get3DContextHandle(identifier);\r\n            IFCAnyHandle axisRep = RepresentationUtil.CreateShapeRepresentation(exporterIFC, \r\n               element, catId, contextHandle3d, identifierOpt, representationTypeOpt, \r\n               axis_items);\r\n            return axisRep;\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create the \"Body\" IfcRepresentation for a beam if it is representable by an extrusion, possibly with clippings and openings.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporterIFC class.</param>\r\n      /// <param name=\"element\">The beam element.T</param>\r\n      /// <param name=\"catId\">The category id.</param>\r\n      /// <param name=\"geomObjects\">The list of solids and meshes representing the beam's geometry.\r\n      /// <param name=\"axisInfo\">The beam axis information.</param>\r\n      /// <returns>The BeamBodyAsExtrusionInfo class which contains the created handle (if any) and other information, or null.</returns>\r\n      private static BeamBodyAsExtrusionInfo CreateBeamGeometryAsExtrusion(ExporterIFC exporterIFC, Element element, ElementId catId,\r\n            IList<GeometryObject> geomObjects, BeamAxisInfo axisInfo, out IFCExportBodyParams extrusionData)\r\n      {\r\n         extrusionData = null;\r\n         // If we have a beam with a Linear location line that only has one solid geometry,\r\n         // we will try to use the ExtrusionAnalyzer to generate an extrusion with 0 or more clippings.\r\n         // This code is currently limited in that it will not process beams with openings, so we\r\n         // use other methods below if this one fails.\r\n         if (geomObjects == null || geomObjects.Count != 1 || (!(geomObjects[0] is Solid)) || axisInfo == null || !(axisInfo.Axis is Line))\r\n            return null;\r\n\r\n         BeamBodyAsExtrusionInfo info = new BeamBodyAsExtrusionInfo();\r\n         info.DontExport = false;\r\n         info.Materials = new HashSet<ElementId>();\r\n         info.Slope = 0.0;\r\n\r\n         Transform orientTrf = axisInfo.LCSAsTransform;\r\n\r\n         Solid solid = geomObjects[0] as Solid;\r\n\r\n         XYZ beamDirection = orientTrf.BasisX;\r\n         XYZ planeXVec = orientTrf.BasisY.Normalize();\r\n         XYZ planeYVec = orientTrf.BasisZ.Normalize();\r\n\r\n         MaterialAndProfile materialAndProfile = null;\r\n         FootPrintInfo footPrintInfo = null;\r\n\r\n         string profileName = NamingUtil.GetProfileName(element);\r\n\r\n         Plane beamExtrusionBasePlane = GeometryUtil.CreatePlaneByXYVectorsAtOrigin(planeXVec, planeYVec);\r\n         GenerateAdditionalInfo addInfo = GenerateAdditionalInfo.GenerateBody | GenerateAdditionalInfo.GenerateProfileDef;\r\n         ExtrusionExporter.ExtraClippingData extraClippingData = null;\r\n         info.RepresentationHandle = ExtrusionExporter.CreateExtrusionWithClipping(exporterIFC, element, false,\r\n             catId, solid, beamExtrusionBasePlane, orientTrf.Origin, beamDirection, null, \r\n             out extraClippingData,\r\n             out footPrintInfo, out materialAndProfile, out extrusionData, addInfo: addInfo, profileName: profileName);\r\n         if (extraClippingData.CompletelyClipped)\r\n         {\r\n            info.DontExport = true;\r\n            return null;\r\n         }\r\n\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(info.RepresentationHandle))\r\n         {\r\n            // This is used by the BeamSlopeCalculator.  This should probably be generated automatically by\r\n            // CreateExtrusionWithClipping.\r\n            IFCExtrusionBasis bestAxis = (Math.Abs(beamDirection[0]) > Math.Abs(beamDirection[1])) ?\r\n                IFCExtrusionBasis.BasisX : IFCExtrusionBasis.BasisY;\r\n            info.Slope = GeometryUtil.GetSimpleExtrusionSlope(beamDirection, bestAxis);\r\n            ElementId materialId = BodyExporter.GetBestMaterialIdFromGeometryOrParameter(solid, element);\r\n            if (materialId != ElementId.InvalidElementId)\r\n               info.Materials.Add(materialId);\r\n         }\r\n\r\n         if (materialAndProfile != null)\r\n            info.MaterialAndProfile = materialAndProfile;\r\n\r\n         return info;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines the beam geometry to export after removing invisible geometry.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The beam element to be exported.</param>\r\n      /// <param name=\"geometryElement\">The geometry element that contains the beam geometry.</param>\r\n      /// <param name=\"dontExport\">An output value that says that the element shouldn't be exported at all.</param>\r\n      private static IList<GeometryObject> BeamGeometryToExport(ExporterIFC exporterIFC, Element element,\r\n         GeometryElement geometryElement, out bool dontExport)\r\n      {\r\n         dontExport = true;\r\n         if (element == null || geometryElement == null)\r\n            return null;\r\n\r\n         IList<GeometryObject> visibleGeomObjects = new List<GeometryObject>();\r\n         {\r\n            SolidMeshGeometryInfo solidMeshInfo = GeometryUtil.GetSplitSolidMeshGeometry(geometryElement);\r\n\r\n            IList<Solid> solids = solidMeshInfo.GetSolids();\r\n            IList<Mesh> meshes = solidMeshInfo.GetMeshes();\r\n\r\n            visibleGeomObjects = FamilyExporterUtil.RemoveInvisibleSolidsAndMeshes(element.Document, exporterIFC, ref solids, ref meshes);\r\n\r\n            // If we found solids and meshes, and they are all invisible, don't export the beam.\r\n            // If we didn't find solids and meshes, we won't export the beam with ExportBeamAsStandardElement, but will allow the generic\r\n            // family export routine to work.\r\n            if (((visibleGeomObjects?.Count ?? 0) == 0) && (solids.Count > 0 || meshes.Count > 0))\r\n               return null;\r\n         }\r\n\r\n         dontExport = false;\r\n         return visibleGeomObjects;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a new type entity appropriate to the object and relates it to the current element.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"wrapper\">The ProductWrapper class.</param>\r\n      /// <param name=\"elementHandle\">The element handle.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"overrideMaterialId\">The material id used for the element type.</param>\r\n      public static void ExportBeamType(ExporterIFC exporterIFC, ProductWrapper wrapper, IFCAnyHandle elementHandle, \r\n         Element element, IFCExportInfoPair exportType)\r\n      {\r\n         if (elementHandle == null)\r\n            return;\r\n\r\n         ElementType elementType = element?.Document?.GetElement(element?.GetTypeId()) as ElementType;\r\n         if (elementType == null)\r\n            return;\r\n\r\n         IFCAnyHandle beamType = ExporterCacheManager.ElementTypeToHandleCache.Find(elementType, exportType);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(beamType))\r\n         {\r\n            ExporterCacheManager.TypeRelationsCache.Add(beamType, elementHandle);\r\n            return;\r\n         }\r\n\r\n         // Property sets will be set later.\r\n         beamType = IFCInstanceExporter.CreateGenericIFCType(exportType, elementType, null, exporterIFC.GetFile(),\r\n            null, null);\r\n\r\n         wrapper.RegisterHandleWithElementType(elementType, exportType, beamType, null);\r\n\r\n         ExporterCacheManager.TypeRelationsCache.Add(beamType, elementHandle);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a beam to IFC beam if it has an axis representation and only one Solid as its geometry, ideally as an extrusion, potentially with clippings and openings.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element to be exported.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <param name=\"dontExport\">An output value that says that the element shouldn't be exported at all.</param>\r\n      /// <returns>The created handle.</returns>\r\n      /// <remarks>In the original implementation, the ExportBeam function would export each beam as its own individual geometry (that is, not use representation maps).\r\n      /// For non-standard beams, this could result in massive IFC files.  Now, we use the ExportBeamAsStandardElement function and limit its scope, and instead\r\n      /// resort to the standard FamilyInstanceExporter.ExportFamilyInstanceAsMappedItem for more complicated objects categorized as beams.  This has the following pros and cons:\r\n      /// Pro: possiblity for massively reduced file sizes for files containing repeated complex beam families\r\n      /// Con: some beams that may have had an \"Axis\" representation before will no longer have them, although this possibility is minimized.\r\n      /// Con: some beams that have 1 Solid and an axis, but that Solid will be heavily faceted, won't be helped by this improvement.\r\n      /// It is intended that we phase out this routine entirely and instead teach ExportFamilyInstanceAsMappedItem how to sometimes export the Axis representation for beams.</remarks>\r\n      public static IFCAnyHandle ExportBeamAsStandardElement(ExporterIFC exporterIFC,\r\n         Element element, IFCExportInfoPair exportType, GeometryElement geometryElement, ProductWrapper productWrapper, out bool dontExport)\r\n      {\r\n         dontExport = true;\r\n         IList<GeometryObject> geomObjects = BeamGeometryToExport(exporterIFC, element, geometryElement, out dontExport);\r\n         if (dontExport)\r\n            return null;\r\n\r\n         IFCAnyHandle beam = null;\r\n         IFCFile file = exporterIFC.GetFile();\r\n         MaterialAndProfile materialAndProfile = null;\r\n         IFCAnyHandle materialProfileSet = null;\r\n\r\n         using (IFCTransaction transaction = new IFCTransaction(file))\r\n         {\r\n            BeamAxisInfo axisInfo = GetBeamAxisTransform(element);\r\n            bool canExportAxis = (axisInfo != null);\r\n\r\n            Curve curve = canExportAxis ? axisInfo.Axis : null;\r\n            XYZ beamDirection = canExportAxis ? axisInfo.AxisDirection : null;\r\n            Transform orientTrf = canExportAxis ? axisInfo.LCSAsTransform : null;\r\n\r\n            // Check for containment override\r\n            using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, element, orientTrf))\r\n            {\r\n               IFCAnyHandle localPlacement = setter.LocalPlacement;\r\n               using (IFCExportBodyParams extrusionCreationData = new IFCExportBodyParams())\r\n               {\r\n                  extrusionCreationData.SetLocalPlacement(localPlacement);\r\n                  if (canExportAxis && (orientTrf.BasisX != null))\r\n                  {\r\n                     extrusionCreationData.CustomAxis = beamDirection;\r\n                     extrusionCreationData.PossibleExtrusionAxes = IFCExtrusionAxes.TryCustom;\r\n                  }\r\n                  else\r\n                     extrusionCreationData.PossibleExtrusionAxes = IFCExtrusionAxes.TryXY;\r\n\r\n                  ElementId catId = CategoryUtil.GetSafeCategoryId(element);\r\n\r\n                  // There may be an offset to make the local coordinate system\r\n                  // be near the origin.  This offset will be used to move the axis to the new LCS.\r\n                  Transform offsetTransform = null;\r\n\r\n                  // The list of materials in the solids or meshes.\r\n                  ICollection<ElementId> materialIds = null;\r\n\r\n                  // If the beam is a FamilyInstance, and it uses transformed FamilySymbol geometry only, then\r\n                  // let's only try to CreateBeamGeometryAsExtrusion unsuccesfully once.  Otherwise, we can spend a lot of time trying\r\n                  // unsuccessfully to do so.\r\n                  bool tryToCreateBeamGeometryAsExtrusion = true;\r\n\r\n                  //bool useFamilySymbolGeometry = (element is FamilyInstance) ? !ExporterIFCUtils.UsesInstanceGeometry(element as FamilyInstance) : false;\r\n                  bool useFamilySymbolGeometry = (element is FamilyInstance) && !GeometryUtil.UsesInstanceGeometry(element as FamilyInstance);\r\n                  ElementId beamTypeId = element.GetTypeId();\r\n                  if (useFamilySymbolGeometry)\r\n                  {\r\n                     tryToCreateBeamGeometryAsExtrusion = !ExporterCacheManager.CanExportBeamGeometryAsExtrusionCache.ContainsKey(beamTypeId) ||\r\n                        ExporterCacheManager.CanExportBeamGeometryAsExtrusionCache[beamTypeId];\r\n                  }\r\n\r\n                  // The representation handle generated from one of the methods below.\r\n                  BeamBodyAsExtrusionInfo extrusionInfo = null;\r\n                  IFCExportBodyParams extrusionData = null;\r\n                  if (tryToCreateBeamGeometryAsExtrusion)\r\n                  {\r\n                     extrusionInfo = CreateBeamGeometryAsExtrusion(exporterIFC, element, catId, geomObjects, axisInfo, out extrusionData);\r\n                     if (useFamilySymbolGeometry)\r\n                        ExporterCacheManager.CanExportBeamGeometryAsExtrusionCache[beamTypeId] = (extrusionInfo != null);\r\n                  }\r\n\r\n                  if (extrusionInfo != null && extrusionInfo.DontExport)\r\n                  {\r\n                     dontExport = true;\r\n                     return null;\r\n                  }\r\n\r\n                  if (extrusionData != null)\r\n                  {\r\n                     extrusionCreationData.ScaledLength = extrusionData.ScaledLength;\r\n                     extrusionCreationData.ScaledOuterPerimeter = extrusionData.ScaledOuterPerimeter;\r\n                  }\r\n\r\n                  IFCAnyHandle repHnd = extrusionInfo?.RepresentationHandle;\r\n\r\n                  if (!IFCAnyHandleUtil.IsNullOrHasNoValue(repHnd))\r\n                  {\r\n                     materialIds = extrusionInfo.Materials;\r\n                     extrusionCreationData.Slope = extrusionInfo.Slope;\r\n                     if (extrusionInfo?.MaterialAndProfile?.CrossSectionArea != null)\r\n                        extrusionCreationData.ScaledArea = extrusionInfo.MaterialAndProfile.CrossSectionArea.Value;\r\n                  }\r\n                  else\r\n                  {\r\n                     // Here is where we limit the scope of how complex a case we will still try to export as a standard element.\r\n                     // This is explicitly added so that many curved beams that can be represented by a reasonable facetation because of the\r\n                     // SweptSolidExporter can still have an Axis representation.\r\n                     BodyData bodyData = null;\r\n\r\n                     BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n                     if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n                        bodyExporterOptions.CollectMaterialAndProfile = false;\r\n                     else\r\n                        bodyExporterOptions.CollectMaterialAndProfile = true;\r\n\r\n                     if (geomObjects != null && geomObjects.Count == 1 && geomObjects[0] is Solid)\r\n                     {\r\n                        bodyData = BodyExporter.ExportBody(exporterIFC, element, catId, ElementId.InvalidElementId,\r\n                            geomObjects[0], bodyExporterOptions, extrusionCreationData);\r\n\r\n                        repHnd = bodyData.RepresentationHnd;\r\n                        materialIds = bodyData.MaterialIds;\r\n                        if (!bodyData.OffsetTransform.IsIdentity)\r\n                           offsetTransform = bodyData.OffsetTransform;\r\n                        materialAndProfile = bodyData.MaterialAndProfile;\r\n                     }\r\n                  }\r\n\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(repHnd))\r\n                  {\r\n                     extrusionCreationData.ClearOpenings();\r\n                     return null;\r\n                  }\r\n\r\n                  IList<IFCAnyHandle> representations = new List<IFCAnyHandle>();\r\n                  double elevation = (setter.LevelInfo != null) ? setter.LevelInfo.Elevation : 0.0;\r\n                  IFCAnyHandle axisRep = CreateBeamAxis(exporterIFC, element, catId, axisInfo, offsetTransform, elevation);\r\n                  representations.AddIfNotNull(axisRep);\r\n                  representations.Add(repHnd);\r\n\r\n                  Transform boundingBoxTrf = offsetTransform?.Inverse ?? Transform.Identity;\r\n                  IFCAnyHandle boundingBoxRep = BoundingBoxExporter.ExportBoundingBox(exporterIFC, geometryElement, boundingBoxTrf);\r\n                  if (boundingBoxRep != null)\r\n                     representations.Add(boundingBoxRep);\r\n\r\n                  IFCAnyHandle prodRep = IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, representations);\r\n\r\n                  string instanceGUID = GUIDUtil.CreateGUID(element);\r\n                  beam = IFCInstanceExporter.CreateGenericIFCEntity(exportType, file, element, instanceGUID,\r\n                     ExporterCacheManager.OwnerHistoryHandle, extrusionCreationData.GetLocalPlacement(), prodRep);\r\n\r\n                  IFCAnyHandle mpSetUsage;\r\n                  if (materialProfileSet != null)\r\n                     mpSetUsage = IFCInstanceExporter.CreateMaterialProfileSetUsage(file, materialProfileSet, null, null);\r\n\r\n                  productWrapper.AddElement(element, beam, setter, extrusionCreationData, true, exportType);\r\n\r\n                  ExportBeamType(exporterIFC, productWrapper, beam, element, exportType);\r\n\r\n                  OpeningUtil.CreateOpeningsIfNecessary(beam, element, extrusionCreationData, offsetTransform, exporterIFC,\r\n                      extrusionCreationData.GetLocalPlacement(), setter, productWrapper);\r\n\r\n                  FamilyTypeInfo typeInfo = new FamilyTypeInfo();\r\n                  typeInfo.extraParams = extrusionCreationData;\r\n                  PropertyUtil.CreateBeamColumnBaseQuantities(exporterIFC, beam, element, typeInfo, null);\r\n\r\n                  if (materialIds.Count != 0)\r\n                     CategoryUtil.CreateMaterialAssociation(exporterIFC, element, beam, materialIds);\r\n\r\n                  // Register the beam's IFC handle for later use by truss and beam system export.\r\n                  ExporterCacheManager.ElementToHandleCache.Register(element.Id, beam, exportType);\r\n               }\r\n            }\r\n\r\n            transaction.Commit();\r\n            return beam;\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/BodyData.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Enums of shape representation type (according to the list defined in IFC4)\r\n   /// </summary>\r\n   public enum ShapeRepresentationType\r\n   {\r\n      Undefined,\r\n      Point,\r\n      PointCloud,\r\n      Curve,\r\n      Curve2D,\r\n      Curve3D,\r\n      Surface,\r\n      Surface2D,\r\n      Surface3D,\r\n      FillArea,\r\n      Text,\r\n      AdvancedSurface,\r\n      GeometricSet,\r\n      GeometricCurveSet,\r\n      Annotation2D,\r\n      SurfaceModel,\r\n      Tessellation,\r\n      SolidModel,\r\n      SweptSolid,\r\n      AdvancedSweptSolid,\r\n      Brep,\r\n      AdvancedBrep,\r\n      CSG,\r\n      Clipping,\r\n      // additional types\r\n      BoundingBox,\r\n      SectionedSpine,\r\n      LightSource,\r\n      MappedRepresentation,\r\n      // Misc. - non standard\r\n      Mesh,\r\n      Facetation\r\n   }\r\n\r\n   /// <summary>\r\n   /// This class contains output information from the ExportBody functions.\r\n   /// </summary>\r\n   public class BodyData\r\n   {\r\n      /// <summary>\r\n      /// The created shape representation handle.\r\n      /// </summary>\r\n      public IFCAnyHandle RepresentationHnd { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The representation type of the created shape representation handle.\r\n      /// </summary>\r\n      public ShapeRepresentationType ShapeRepresentationType { get; set; } = ShapeRepresentationType.Undefined;\r\n\r\n      /// <summary>\r\n      /// The new offset transform, if the local placement was shifted to closer to the exported geometry location.\r\n      /// </summary>\r\n      public Transform OffsetTransform { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Material Ids in a list to maintain its order and allows duplicate item (similar to MaterialIds)\r\n      /// </summary>\r\n      public IList<ElementId> MaterialIds { get; set; } = new List<ElementId>();\r\n\r\n      /// <summary>\r\n      /// Set of pair(s) of (Sub)Category name and the MaterialId of geometry object, which is part of a family\r\n      /// </summary>\r\n      public HashSet<Tuple<MaterialConstituentInfo, IFCAnyHandle>> RepresentationItemInfo { get; private set; } = new HashSet<Tuple<MaterialConstituentInfo, IFCAnyHandle>>();\r\n\r\n      /// <summary>\r\n      /// A handle for the Footprint representation\r\n      /// </summary>\r\n      public FootPrintInfo FootprintInfo { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// A Dictionary for Material Profile\r\n      /// </summary>\r\n      public MaterialAndProfile MaterialAndProfile { get; set; } = new MaterialAndProfile();\r\n\r\n      /// <summary>\r\n      /// Constructs a default BodyData object.\r\n      /// </summary>\r\n      public BodyData() { }\r\n\r\n      /// <summary>\r\n      /// Constructs a BodyData object.\r\n      /// </summary>\r\n      /// <param name=\"representationHnd\">The representation handle.</param>\r\n      /// <param name=\"offsetTransform\">The offset transform.</param>\r\n      /// <param name=\"materialIds\">The material ids.</param>\r\n      public BodyData(IFCAnyHandle representationHnd, Transform offsetTransform, HashSet<ElementId> materialIds)\r\n      {\r\n         RepresentationHnd = representationHnd;\r\n         if (offsetTransform != null)\r\n            OffsetTransform = offsetTransform;\r\n         if (materialIds != null)\r\n         {\r\n            MaterialIds = new List<ElementId>(materialIds);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Copies a BodyData object.\r\n      /// </summary>\r\n      /// <param name=\"representationHnd\">The representation handle.</param>\r\n      /// <param name=\"offsetTransform\">The offset transform.</param>\r\n      /// <param name=\"materialIds\">The material ids.</param>\r\n      public BodyData(BodyData bodyData)\r\n      {\r\n         RepresentationHnd = bodyData.RepresentationHnd;\r\n         ShapeRepresentationType = bodyData.ShapeRepresentationType;\r\n         OffsetTransform = bodyData.OffsetTransform;\r\n         MaterialIds = bodyData.MaterialIds;\r\n         RepresentationItemInfo = bodyData.RepresentationItemInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add a material id to the set of material ids.\r\n      /// </summary>\r\n      /// <param name=\"matId\">The new material id.</param>\r\n      public void AddMaterial(ElementId matId)\r\n      {\r\n         MaterialIds.Add(matId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// </summary>\r\n      /// <param name=\"materialId\">The material id</param>\r\n      public void AddRepresentationItemInfo(Document document, GraphicsStyle style, ElementId materialId,\r\n         IFCAnyHandle repItem)\r\n      {\r\n         // Set with the proper category name if any\r\n         string catName = style?.GraphicsStyleCategory?.Name;         \r\n\r\n         if (catName == null)\r\n         {\r\n            Material material = document.GetElement(materialId) as Material;\r\n            catName = (material != null) ? NamingUtil.GetMaterialName(material) : \"<Unnamed>\";    // Default name to the Material name if not null or <Unnamed>\r\n         }\r\n\r\n         RepresentationItemInfo.Add(Tuple.Create(new MaterialConstituentInfo(catName, materialId), repItem));\r\n         AddMaterial(materialId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Material and Profile information for IfcMaterialProfile\r\n      /// </summary>\r\n      public MaterialAndProfile materialAndProfile\r\n      {\r\n         get\r\n         {\r\n            if (MaterialAndProfile == null)\r\n            {\r\n               MaterialAndProfile = new MaterialAndProfile();\r\n            }\r\n            return MaterialAndProfile;\r\n         }\r\n         set { MaterialAndProfile = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Static function to create a new copy of BodyData\r\n      /// </summary>\r\n      /// <param name=\"bodyDataIn\">the input BodyData</param>\r\n      /// <param name=\"resetMaterials\">indicates whether we want to clear the MaterialIds </param>\r\n      /// <returns>the new copy of BodyData</returns>\r\n      public static BodyData Create(BodyData bodyDataIn, bool resetMaterials)\r\n      {\r\n         BodyData retBodyData = new BodyData(bodyDataIn);   // create a new copy of bodyDataIn\r\n         if (resetMaterials)\r\n            retBodyData.MaterialIds.Clear();\r\n         return retBodyData;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/BodyExporter.cs",
    "content": "//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Properties;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Exporter.PropertySet.IFC4X3;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export geometries to body representation.\r\n   /// </summary>\r\n   class BodyExporter\r\n   {\r\n      class FaceSetInfo\r\n      {\r\n         public FaceSetInfo(HashSet<IFCAnyHandle> faceSetHandles, bool isClosed)\r\n         {\r\n            FaceSetHandles = faceSetHandles;\r\n            IsClosed = isClosed;\r\n         }\r\n\r\n         public HashSet<IFCAnyHandle> FaceSetHandles { get; } = new(); \r\n\r\n         public bool IsClosed { get; } = false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets best material id for current export state.\r\n      /// </summary>\r\n      /// <param name=\"geometryObject\">The geometry object to get the best material id.</param>\r\n      /// <param name=\"element\">The element to get its structual material if no material found in its geometry.</param>\r\n      /// <param name=\"overrideMaterialId\">The material id to override the one gets from geometry object.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <returns>The material id.</returns>\r\n      public static ElementId SetBestMaterialIdInExporter(GeometryObject geometryObject, Element element, ElementId overrideMaterialId, ExporterIFC exporterIFC)\r\n      {\r\n         ElementId materialId = overrideMaterialId != ElementId.InvalidElementId ? overrideMaterialId :\r\n             GetBestMaterialIdFromGeometryOrParameter(geometryObject, element);\r\n\r\n         exporterIFC.SetMaterialIdForCurrentExportState(materialId);\r\n\r\n         return materialId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the best material id for the geometry.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// The best material ID for a list of solid and meshes is not invalid if all solids and meshes with an ID have the same one.\r\n      /// </remarks>\r\n      /// <param name=\"solids\">List of solids.</param>\r\n      /// <param name=\"meshes\">List of meshes.</param>\r\n      /// <returns>The material id.</returns>\r\n      public static ElementId GetBestMaterialIdForGeometry(IList<Solid> solids, IList<Mesh> meshes)\r\n      {\r\n         ElementId bestMaterialId = ElementId.InvalidElementId;\r\n         int numSolids = solids.Count;\r\n         int numMeshes = meshes.Count;\r\n         if (numSolids + numMeshes == 0)\r\n            return bestMaterialId;\r\n\r\n         int currentMesh = 0;\r\n         for (; (currentMesh < numMeshes); currentMesh++)\r\n         {\r\n            ElementId currentMaterialId = meshes[currentMesh].MaterialElementId;\r\n            if (currentMaterialId != ElementId.InvalidElementId)\r\n            {\r\n               bestMaterialId = currentMaterialId;\r\n               break;\r\n            }\r\n         }\r\n\r\n         int currentSolid = 0;\r\n         if (bestMaterialId == ElementId.InvalidElementId)\r\n         {\r\n            for (; (currentSolid < numSolids); currentSolid++)\r\n            {\r\n               if (solids[currentSolid].Faces.Size > 0)\r\n               {\r\n                  bestMaterialId = GetBestMaterialIdForGeometry(solids[currentSolid]);\r\n                  break;\r\n               }\r\n            }\r\n         }\r\n\r\n         if (bestMaterialId != ElementId.InvalidElementId)\r\n         {\r\n            for (currentMesh++; (currentMesh < numMeshes); currentMesh++)\r\n            {\r\n               ElementId currentMaterialId = meshes[currentMesh].MaterialElementId;\r\n               if (currentMaterialId != ElementId.InvalidElementId && currentMaterialId != bestMaterialId)\r\n               {\r\n                  bestMaterialId = ElementId.InvalidElementId;\r\n                  break;\r\n               }\r\n            }\r\n         }\r\n\r\n         if (bestMaterialId != ElementId.InvalidElementId)\r\n         {\r\n            for (currentSolid++; (currentSolid < numSolids); currentSolid++)\r\n            {\r\n               if (solids[currentSolid].Faces.Size > 0)\r\n                  continue;\r\n\r\n               ElementId currentMaterialId = GetBestMaterialIdForGeometry(solids[currentSolid]);\r\n               if (currentMaterialId != ElementId.InvalidElementId && currentMaterialId != bestMaterialId)\r\n               {\r\n                  bestMaterialId = ElementId.InvalidElementId;\r\n                  break;\r\n               }\r\n            }\r\n         }\r\n\r\n         if (ExporterUtil.IsElementIdBuiltInOrInvalid(bestMaterialId))\r\n            bestMaterialId = ElementId.InvalidElementId;\r\n\r\n         return bestMaterialId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the best material id for the geometry.\r\n      /// </summary>\r\n      /// <param name=\"geometryElement\">The geometry object to get the best material id.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"range\">The range to get the clipped geometry.</param>\r\n      /// <returns>The material id.</returns>\r\n      public static ElementId GetBestMaterialIdForGeometry(GeometryElement geometryElement,\r\n         IFCRange range)\r\n      {\r\n         SolidMeshGeometryInfo solidMeshCapsule = (range == null) ?\r\n            GeometryUtil.GetSolidMeshGeometry(geometryElement, Transform.Identity) :\r\n            GeometryUtil.GetClippedSolidMeshGeometry(geometryElement, range);\r\n\r\n\r\n         IList<Solid> solids = solidMeshCapsule.GetSolids();\r\n         IList<Mesh> polyMeshes = solidMeshCapsule.GetMeshes();\r\n\r\n         ElementId id = GetBestMaterialIdForGeometry(solids, polyMeshes);\r\n\r\n         return id;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the best material id for the geometry.\r\n      /// </summary>\r\n      /// <param name=\"geometryObject\">The geometry object to get the best material id.</param>\r\n      /// <returns>The material id.</returns>\r\n      public static ElementId GetBestMaterialIdForGeometry(GeometryObject geometryObject)\r\n      {\r\n         if (geometryObject is GeometryElement)\r\n            return GetBestMaterialIdForGeometry(geometryObject as GeometryElement, null);\r\n\r\n         if (!(geometryObject is Solid))\r\n         {\r\n            ElementId matId = ElementId.InvalidElementId;\r\n            if (geometryObject is Mesh)\r\n            {\r\n               matId = (geometryObject as Mesh).MaterialElementId;\r\n            }\r\n            else if (geometryObject is Face)\r\n            {\r\n               matId = (geometryObject as Face).MaterialElementId;\r\n            }\r\n\r\n            return ExporterUtil.IsElementIdBuiltInOrInvalid(matId) ? ElementId.InvalidElementId : \r\n               matId;\r\n         }\r\n\r\n         Solid solid = geometryObject as Solid;\r\n\r\n         // If there is only one material, we won't bother doing area calculations.\r\n         Dictionary<ElementId, List<Face>> materialToFaceMap = new();\r\n         foreach (Face face in solid.Faces)\r\n         {\r\n            if (face == null)\r\n               continue;\r\n\r\n            ElementId currentMaterialId = face.MaterialElementId;\r\n            if (currentMaterialId == ElementId.InvalidElementId)\r\n               continue;\r\n\r\n            if (materialToFaceMap.TryGetValue(currentMaterialId, out List<Face> faceList))\r\n            {\r\n               faceList.Add(face);\r\n            }\r\n            else\r\n            {\r\n               materialToFaceMap[currentMaterialId] = new() { face };\r\n            }\r\n         }\r\n          \r\n         if (materialToFaceMap.Count == 1)\r\n         {\r\n            return materialToFaceMap.First().Key;\r\n         }\r\n\r\n         // We need to figure out the most common material id for the internal faces.\r\n         // Other faces will override this.\r\n\r\n         // We store the \"most popular\" material id.\r\n         // We used to do this by counting how many faces had each id, and taking\r\n         // the material that was used by the most faces.  However, this can result in\r\n         // a material that is used on a very large face being overwhelmed by a material\r\n         // that is used by a large number of small faces.  So we are replacing count\r\n         // with total area.\r\n         Dictionary<ElementId, double> countMap = new();\r\n         ElementId mostPopularId = ElementId.InvalidElementId;\r\n         double mostPopularTotalArea = 0.0;\r\n\r\n         foreach (KeyValuePair<ElementId, List<Face>> materialFaces in materialToFaceMap)\r\n         {\r\n            ElementId currentMaterialId = materialFaces.Key;\r\n            \r\n            double currentTotalArea = 0.0;\r\n            foreach (Face face in materialFaces.Value)\r\n            {\r\n               // We will try to get the area of the face, but it may not be available.\r\n               // If it is not available, we will skip this face.\r\n               try\r\n               {\r\n                  currentTotalArea += face.Area;\r\n               }\r\n               catch\r\n               {\r\n                  continue;\r\n               }\r\n            }\r\n\r\n            countMap[currentMaterialId] = currentTotalArea;\r\n            \r\n            // We add a small tolerance for stability, in cases where there\r\n            // are two areas that are almost equal.  In this case, we use the smaller ElementId.\r\n            if (MathUtil.IsAlmostEqual(currentTotalArea, mostPopularTotalArea))\r\n            {\r\n               mostPopularId = new ElementId(\r\n                  Math.Min(currentMaterialId.Value, mostPopularId.Value));\r\n            }\r\n            else if (currentTotalArea > mostPopularTotalArea)\r\n            {\r\n               mostPopularId = currentMaterialId;\r\n               mostPopularTotalArea = currentTotalArea;\r\n            }\r\n         }\r\n\r\n         if (ExporterUtil.IsElementIdBuiltInOrInvalid(mostPopularId))\r\n            mostPopularId = ElementId.InvalidElementId;\r\n\r\n         return mostPopularId;\r\n      }\r\n\r\n      private static bool IsDuctCategory(ElementId categoryId)\r\n      {\r\n         long categoryValue = categoryId.Value;\r\n         return categoryValue == (long)BuiltInCategory.OST_DuctAccessory ||\r\n            categoryValue == (long)BuiltInCategory.OST_DuctCurves ||\r\n            categoryValue == (long)BuiltInCategory.OST_DuctFitting ||\r\n            categoryValue == (long)BuiltInCategory.OST_DuctInsulations ||\r\n            categoryValue == (long)BuiltInCategory.OST_DuctLinings ||\r\n            categoryValue == (long)BuiltInCategory.OST_DuctTerminal ||\r\n            categoryValue == (long)BuiltInCategory.OST_FlexDuctCurves ||\r\n            categoryValue == (long)BuiltInCategory.OST_PlaceHolderDucts;\r\n      }\r\n\r\n      private static bool IsPipeCategory(ElementId categoryId)\r\n      {\r\n         long categoryValue = categoryId.Value;\r\n         return categoryValue == (long)BuiltInCategory.OST_AnalyticalPipeConnections ||\r\n            categoryValue == (long)BuiltInCategory.OST_FlexPipeCurves ||\r\n            categoryValue == (long)BuiltInCategory.OST_PipeCurves ||\r\n            categoryValue == (long)BuiltInCategory.OST_PlaceHolderPipes ||\r\n            categoryValue == (long)BuiltInCategory.OST_PlumbingFixtures ||\r\n            categoryValue == (long)BuiltInCategory.OST_PipeAccessory ||\r\n            categoryValue == (long)BuiltInCategory.OST_PipeFitting ||\r\n            categoryValue == (long)BuiltInCategory.OST_PipeInsulations ||\r\n            categoryValue == (long)BuiltInCategory.OST_Sprinklers;\r\n      }\r\n\r\n      private static bool CategoryHasMaterialIdParam(ElementId categoryId)\r\n      {\r\n         // OST_Cornices also has a MaterialId parameter, but Revit doesn't want us\r\n         // to ask for it.\r\n         long categoryValue = categoryId.Value;\r\n         return categoryValue == (long)BuiltInCategory.OST_Rebar ||\r\n            categoryValue == (long)BuiltInCategory.OST_FabricReinforcement ||\r\n            categoryValue == (long)BuiltInCategory.OST_Fascia ||\r\n            categoryValue == (long)BuiltInCategory.OST_Gutter ||\r\n            categoryValue == (long)BuiltInCategory.OST_EdgeSlab ||\r\n            categoryValue == (long)BuiltInCategory.OST_Parts ||\r\n            categoryValue == (long)BuiltInCategory.OST_PipeInsulations ||\r\n            categoryValue == (long)BuiltInCategory.OST_DuctInsulations ||\r\n            categoryValue == (long)BuiltInCategory.OST_DuctLinings;\r\n      }\r\n\r\n      private static bool CategoryHasStructuralMaterialParam(ElementId categoryId)\r\n      {\r\n         long categoryValue = categoryId.Value;\r\n         return categoryValue == (long)BuiltInCategory.OST_AnalyticalMember ||\r\n            categoryValue == (long)BuiltInCategory.OST_AnalyticalPanel ||\r\n            categoryValue == (long)BuiltInCategory.OST_BuildingPad ||\r\n            categoryValue == (long)BuiltInCategory.OST_Ceilings ||\r\n            categoryValue == (long)BuiltInCategory.OST_Floors ||\r\n            categoryValue == (long)BuiltInCategory.OST_Roofs ||\r\n            categoryValue == (long)BuiltInCategory.OST_StructConnectionAnchors ||\r\n            categoryValue == (long)BuiltInCategory.OST_StructConnectionBolts ||\r\n            categoryValue == (long)BuiltInCategory.OST_StructConnectionPlates ||\r\n            categoryValue == (long)BuiltInCategory.OST_StructConnectionProfiles ||\r\n            categoryValue == (long)BuiltInCategory.OST_StructConnectionShearStuds ||\r\n            categoryValue == (long)BuiltInCategory.OST_StructuralColumns ||\r\n            categoryValue == (long)BuiltInCategory.OST_StructuralFoundation ||\r\n            categoryValue == (long)BuiltInCategory.OST_StructuralFraming ||\r\n            categoryValue == (long)BuiltInCategory.OST_Walls;\r\n      }\r\n\r\n      private static ElementId GetBestMaterialIdFromParameter(Element element)\r\n      {\r\n         if (element == null)\r\n         {\r\n            return ElementId.InvalidElementId;\r\n         }\r\n\r\n         ElementId id = element.Id;\r\n         if (ExporterCacheManager.ElementIdMaterialParameterCache.TryGetValue(id, out ElementId matId))\r\n         {\r\n            return matId;\r\n         }\r\n\r\n         matId = CalcBestMaterialIdFromParameter(element);\r\n         ExporterCacheManager.ElementIdMaterialParameterCache[id] = matId;\r\n         return matId;\r\n      }\r\n\r\n      private static ElementId CalcBestMaterialIdFromParameter(Element element)\r\n      {\r\n         ElementId matId = ExporterUtil.GetSingleMaterial(element);\r\n         if (matId != ElementId.InvalidElementId)\r\n         {\r\n            return matId;\r\n         }\r\n\r\n         // Try to get it from the category of the element first.\r\n         ElementId categoryId = CategoryUtil.GetSafeCategoryId(element);\r\n         if (CategoryHasMaterialIdParam(categoryId) || element is MEPSystemType)\r\n         {\r\n            ParameterUtil.GetElementIdValueFromElementOrSymbol(element, BuiltInParameter.MATERIAL_ID_PARAM, out matId);\r\n         }\r\n         else if (CategoryHasStructuralMaterialParam(categoryId))\r\n         {\r\n            ParameterUtil.GetElementIdValueFromElementOrSymbol(element, BuiltInParameter.STRUCTURAL_MATERIAL_PARAM, out matId);\r\n         }\r\n\r\n         if (matId != ElementId.InvalidElementId)\r\n         {\r\n            return matId;\r\n         }\r\n\r\n         // If not, try to get it from the system.\r\n         ElementId systemTypeId = ElementId.InvalidElementId;\r\n         if (IsDuctCategory(categoryId))\r\n         {\r\n            ParameterUtil.GetElementIdValueFromElement(element, BuiltInParameter.RBS_DUCT_SYSTEM_TYPE_PARAM, out systemTypeId);\r\n         }\r\n         else if (IsPipeCategory(categoryId))\r\n         {\r\n            ParameterUtil.GetElementIdValueFromElement(element, BuiltInParameter.RBS_PIPING_SYSTEM_TYPE_PARAM, out systemTypeId);\r\n         }\r\n\r\n         if (systemTypeId != ElementId.InvalidElementId)\r\n         {\r\n            Element systemType = element.Document.GetElement(systemTypeId);\r\n            if (systemType != null)\r\n            {\r\n               matId = GetBestMaterialIdFromParameter(systemType);\r\n               return matId;\r\n            }\r\n         }\r\n\r\n         return matId;\r\n      }\r\n      \r\n      /// <summary>\r\n      /// Gets the best material id from the geometry or its structural material parameter.\r\n      /// </summary>\r\n      /// <param name=\"solids\">List of solids.</param>\r\n      /// <param name=\"meshes\">List of meshes.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The material id.</returns>\r\n      public static ElementId GetBestMaterialIdFromGeometryOrParameter(IList<Solid> solids, IList<Mesh> meshes, Element element)\r\n      {\r\n         ElementId matId = GetBestMaterialIdForGeometry(solids, meshes);\r\n         if (matId == ElementId.InvalidElementId && element != null)\r\n            matId = GetBestMaterialIdFromParameter(element);\r\n         return matId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the best material id from the geometry or its structural material parameter.\r\n      /// </summary>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"range\">The range to get the clipped geometry.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The material id.</returns>\r\n      public static ElementId GetBestMaterialIdFromGeometryOrParameter(GeometryElement geometryElement,\r\n         IFCRange range, Element element)\r\n      {\r\n         ElementId matId = GetBestMaterialIdForGeometry(geometryElement, range);\r\n         if (matId == ElementId.InvalidElementId && element != null)\r\n            matId = GetBestMaterialIdFromParameter(element);\r\n         return matId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the best material id from the geometry or its structural material parameter.\r\n      /// </summary>\r\n      /// <param name=\"geometryObject\">The geometry object.</param>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The material id.</returns>\r\n      public static ElementId GetBestMaterialIdFromGeometryOrParameter(GeometryObject geometryObject,\r\n         Element element)\r\n      {\r\n         ElementId matId = GetBestMaterialIdForGeometry(geometryObject);\r\n         if (matId == ElementId.InvalidElementId && element != null)\r\n            matId = GetBestMaterialIdFromParameter(element);\r\n         return matId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets a material id from a geometry or element parameters.\r\n      /// </summary>\r\n      /// <param name=\"geometryObject\">The geometry object.</param>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"elementType\">The element, usually a type element.</param>\r\n      /// <param name=\"element\">A fallback element to check, usually an instance element.</param>\r\n      /// <returns>The material id.</returns>\r\n      public static ElementId GetBestMaterialIdFromGeometryOrParameter(GeometryObject geometryObject,\r\n         Element elementType, Element element)\r\n      {\r\n         ElementId matId = GetBestMaterialIdFromGeometryOrParameter(geometryObject, elementType);\r\n         if (matId == ElementId.InvalidElementId)\r\n            matId = GetBestMaterialIdFromGeometryOrParameter(geometryObject, element);\r\n         return matId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets a list of material ids from the geometry or the element parameters.\r\n      /// </summary>\r\n      /// <param name=\"geometryObject\">The geometry object.</param>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"elementType\">The element, usually a type element.</param>\r\n      /// <param name=\"element\">A fallback element to check, usually an instance element.</param>\r\n      /// <returns>The material ids.</returns>\r\n      public static IList<ElementId> GetMaterialIdsFromGeometryOrParameters(GeometryObject geometryObject,\r\n      Element elementType, Element element)\r\n      {\r\n         ElementId matId = GetBestMaterialIdFromGeometryOrParameter(geometryObject, elementType, element);\r\n\r\n         // Also get the materials from Parameters\r\n         IList<ElementId> matIds = ParameterUtil.FindMaterialParameters(elementType);\r\n         if (matIds.Count == 0)\r\n            matIds = ParameterUtil.FindMaterialParameters(element);\r\n\r\n         // Combine the material ids\r\n         if (matId != ElementId.InvalidElementId && !matIds.Contains(matId))\r\n            matIds.Add(matId);\r\n\r\n         return matIds;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates the related IfcSurfaceStyle for a representation item.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"document\">The document.</param>\r\n      /// <param name=\"isVoid\">True if the representation item represents a void (a space or an opening).</param>\r\n      /// <param name=\"repItemHnd\">The representation item.</param>\r\n      /// <param name=\"overrideMatId\">The material id to use instead of the one in the exporter, if provided.</param>\r\n      public static void CreateSurfaceStyleForRepItem(ExporterIFC exporterIFC, Document document,\r\n         bool isVoid, IFCAnyHandle repItemHnd, ElementId overrideMatId)\r\n      {\r\n         if (isVoid || repItemHnd == null || ExporterCacheManager.ExportOptionsCache.ExportAs2x2)\r\n            return;\r\n\r\n         // Restrict material to proper subtypes.\r\n         if (!IFCAnyHandleUtil.IsSubTypeOf(repItemHnd, IFCEntityType.IfcSolidModel) &&\r\n             !IFCAnyHandleUtil.IsSubTypeOf(repItemHnd, IFCEntityType.IfcFaceBasedSurfaceModel) &&\r\n             !IFCAnyHandleUtil.IsSubTypeOf(repItemHnd, IFCEntityType.IfcShellBasedSurfaceModel) &&\r\n             !IFCAnyHandleUtil.IsSubTypeOf(repItemHnd, IFCEntityType.IfcSurface) &&\r\n             !IFCAnyHandleUtil.IsSubTypeOf(repItemHnd, IFCEntityType.IfcTessellatedItem))\r\n         {\r\n            throw new InvalidOperationException(\"Attempting to set surface style for unknown item.\");\r\n         }\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         ElementId materialId = (overrideMatId != ElementId.InvalidElementId) ? overrideMatId : exporterIFC.GetMaterialIdForCurrentExportState();\r\n         if (materialId == ElementId.InvalidElementId)\r\n            return;\r\n\r\n         IFCAnyHandle presStyleHnd = ExporterCacheManager.PresentationStyleAssignmentCache.Find(materialId);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(presStyleHnd))\r\n         {\r\n            IFCAnyHandle surfStyleHnd = CategoryUtil.GetOrCreateMaterialStyle(document, file, materialId);\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(surfStyleHnd))\r\n               return;\r\n\r\n            ISet<IFCAnyHandle> styles = new HashSet<IFCAnyHandle>() { surfStyleHnd };\r\n\r\n            if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            {\r\n               presStyleHnd = IFCInstanceExporter.CreatePresentationStyleAssignment(file, styles);\r\n               ExporterCacheManager.PresentationStyleAssignmentCache.Register(materialId, presStyleHnd);\r\n            }\r\n            else\r\n            {\r\n               // IFC4: Using IfcPresentationStyleAssignment is deprecated, use the direct assignment of a subtype of IfcPresentationStyle instead.\r\n               presStyleHnd = surfStyleHnd;\r\n               ExporterCacheManager.PresentationStyleAssignmentCache.Register(materialId, surfStyleHnd);\r\n            }\r\n         }\r\n\r\n         if (presStyleHnd != null)\r\n         {\r\n            // WR11: Restricts the number of styles to 1, so create new HashSet with the last one.\r\n            HashSet<IFCAnyHandle> presStyleSet = new HashSet<IFCAnyHandle>() { presStyleHnd };\r\n\r\n            // Check if the IfcStyledItem has already been set for this representation item.  If so, don't set it\r\n            // again.  This can happen in BodyExporter in certain cases where we call CreateSurfaceStyleForRepItem twice.\r\n            HashSet<IFCAnyHandle> styledByItemHandles = IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(repItemHnd, \"StyledByItem\");\r\n            if (styledByItemHandles == null || styledByItemHandles.Count == 0)\r\n            {\r\n               IFCInstanceExporter.CreateStyledItem(file, repItemHnd, presStyleSet, null);\r\n            }\r\n            else\r\n            {\r\n               IFCAnyHandle styledItem = styledByItemHandles.First();\r\n               IFCAnyHandleUtil.SetAttribute(styledItem, \"Styles\", presStyleSet);\r\n            }\r\n         }\r\n         return;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates the related IfcCurveStyle for a representation item.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"repItemHnd\">The representation item.</param>\r\n      /// <param name=\"curveWidth\">The curve width.</param>\r\n      /// <param name=\"colorHnd\">The curve color handle.</param>\r\n      /// <returns>The IfcCurveStyle handle.</returns>\r\n      public static IFCAnyHandle CreateCurveStyleForRepItem(ExporterIFC exporterIFC, IFCAnyHandle repItemHnd, IFCData curveWidth, IFCAnyHandle colorHnd)\r\n      {\r\n         // Styled Item is not allowed in IFC4RV\r\n         if (repItemHnd == null || ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n            return null;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         IFCAnyHandle curveStyleHnd = IFCInstanceExporter.CreateCurveStyle(file, null, null, curveWidth, colorHnd);\r\n         ISet<IFCAnyHandle> styles = new HashSet<IFCAnyHandle>() { curveStyleHnd };\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            IFCAnyHandle presStyleHnd = IFCInstanceExporter.CreatePresentationStyleAssignment(file, styles);\r\n            HashSet<IFCAnyHandle> presStyleSet = new HashSet<IFCAnyHandle>() { presStyleHnd };\r\n\r\n            return IFCInstanceExporter.CreateStyledItem(file, repItemHnd, presStyleSet, null);\r\n         }\r\n         else\r\n         {\r\n            return IFCInstanceExporter.CreateStyledItem(file, repItemHnd, styles as HashSet<IFCAnyHandle>, null);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the faces can create a closed shell.\r\n      /// </summary>\r\n      /// <param name=\"mesh\">The mesh.</param>\r\n      /// <returns>True if can, false if can't.</returns>\r\n      public static bool CanCreateClosedShell(Mesh mesh)\r\n      {\r\n         int numFaces = mesh.NumTriangles;\r\n\r\n         // Do simple checks first.\r\n         if (numFaces < 4)\r\n            return false;\r\n\r\n         // Try to match up edges.\r\n         HashSet<Tuple<uint, uint>> matchedEdges = new();\r\n         Dictionary<uint, IList<uint>> unmatchedEdges = new();\r\n         int unmatchedEdgeSz = 0;\r\n\r\n         for (int ii = 0; ii < numFaces; ii++)\r\n         {\r\n            MeshTriangle meshTriangle = mesh.get_Triangle(ii);\r\n            for (int jj = 0; jj < 3; jj++)\r\n            {\r\n               uint pt1 = meshTriangle.get_Index(jj);\r\n               uint pt2 = meshTriangle.get_Index((jj + 1) % 3);\r\n\r\n               // Every edge shall be referenced exactly twice by the loops of the face.\r\n               if (matchedEdges.Contains(new Tuple<uint, uint>(pt1, pt2)) ||\r\n                  matchedEdges.Contains(new Tuple<uint, uint>(pt2, pt1)))\r\n                  return false;\r\n\r\n               if (unmatchedEdges.TryGetValue(pt2, out IList<uint> unmatchedEdgesPt2) &&\r\n                  unmatchedEdgesPt2.Contains(pt1))\r\n               {\r\n                  unmatchedEdgesPt2.Remove(pt1);\r\n                  matchedEdges.Add(new Tuple<uint, uint>(pt1, pt2));\r\n                  unmatchedEdgeSz--;\r\n               }\r\n               else\r\n               {\r\n                  IList<uint> unmatchedEdgesPt1 = null;\r\n                  if (unmatchedEdges.TryGetValue(pt1, out unmatchedEdgesPt1) && unmatchedEdgesPt1.Contains(pt2))\r\n                  {\r\n                     // An edge with the same orientation exists twice; can't create solid.\r\n                     return false;\r\n                  }\r\n\r\n                  if (unmatchedEdgesPt1 == null)\r\n                  {\r\n                     unmatchedEdgesPt1 = new List<uint>();\r\n                     unmatchedEdges[pt1] = unmatchedEdgesPt1;\r\n                  }\r\n\r\n                  unmatchedEdgesPt1.Add(pt2);\r\n                  unmatchedEdgeSz++;\r\n               }\r\n            }\r\n         }\r\n\r\n         return (unmatchedEdgeSz == 0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the faces can create a closed shell.\r\n      /// </summary>\r\n      /// <param name=\"faceSetIndices\">The collection of face set indices.</param>\r\n      /// <returns>True if can, false if can't.</returns>\r\n      /// <remarks>This is an optimized version of CanCreateClosedShell(ICollection<IFCAnyHandle> faceSet). </remarks>\r\n      public static bool CanCreateClosedShell(ICollection<IList<IList<int>>> faceSetIndices)\r\n      {\r\n         int numFaces = faceSetIndices.Count;\r\n\r\n         // Do simple checks first.\r\n         if (numFaces < 4)\r\n            return false;\r\n\r\n         // Try to match up edges.\r\n         HashSet<Tuple<int, int>> matchedEdges = new();\r\n         Dictionary<int, IList<int>> unmatchedEdges = new();\r\n         int unmatchedEdgeSz = 0;\r\n\r\n         foreach (IList<IList<int>> face in faceSetIndices)\r\n         {\r\n            foreach (IList<int> points in face)\r\n            {\r\n               int sizeOfBoundary = points.Count;\r\n               if (sizeOfBoundary < 3)\r\n                  return false;\r\n\r\n               for (int ii = 0; ii < sizeOfBoundary; ii++)\r\n               {\r\n                  int pt1 = points[ii];\r\n                  int pt2 = points[(ii + 1) % sizeOfBoundary];\r\n\r\n                  // Every edge shall be referenced exactly twice by the loops of the face.\r\n                  if (matchedEdges.Contains(new Tuple<int, int>(pt1, pt2)) ||\r\n                     matchedEdges.Contains(new Tuple<int, int>(pt2, pt1)))\r\n                      return false;\r\n\r\n                  if (unmatchedEdges.TryGetValue(pt2, out IList<int> unmatchedEdgesPt2) &&\r\n                     unmatchedEdgesPt2.Contains(pt1))\r\n                  {\r\n                     unmatchedEdgesPt2.Remove(pt1);\r\n                     matchedEdges.Add(new Tuple<int, int>(pt1, pt2));\r\n                     unmatchedEdgeSz--;\r\n                  }\r\n                  else\r\n                  {\r\n                     if (unmatchedEdges.TryGetValue(pt1, out IList<int> unmatchedEdgesPt1) &&\r\n                        unmatchedEdgesPt1.Contains(pt2))\r\n                     {\r\n                        // An edge with the same orientation exists twice; can't create solid.\r\n                        return false;\r\n                     }\r\n\r\n                     if (unmatchedEdgesPt1 == null)\r\n                     {\r\n                        unmatchedEdgesPt1 = new List<int>();\r\n                        unmatchedEdges[pt1] = unmatchedEdgesPt1;\r\n                     }\r\n\r\n                     unmatchedEdgesPt1.Add(pt2);\r\n                     unmatchedEdgeSz++;\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         return (unmatchedEdgeSz == 0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the faces can create a closed shell.\r\n      /// </summary>\r\n      /// <param name=\"faceSet\">The collection of face handles.</param>\r\n      /// <returns>True if can, false if can't.</returns>\r\n      public static bool CanCreateClosedShell(ICollection<IFCAnyHandle> faceSet)\r\n      {\r\n         int numFaces = faceSet.Count;\r\n\r\n         // Do simple checks first.\r\n         if (numFaces < 4)\r\n            return false;\r\n\r\n         foreach (IFCAnyHandle face in faceSet)\r\n         {\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(face))\r\n               return false;\r\n         }\r\n\r\n         // Try to match up edges.\r\n         HashSet<Tuple<int, int>> matchedEdges = new();\r\n         Dictionary<int, IList<int>> unmatchedEdges = new();\r\n         int unmatchedEdgeSz = 0;\r\n\r\n         foreach (IFCAnyHandle face in faceSet)\r\n         {\r\n            HashSet<IFCAnyHandle> currFaceBounds = GeometryUtil.GetFaceBounds(face);\r\n            foreach (IFCAnyHandle boundary in currFaceBounds)\r\n            {\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(boundary))\r\n                  return false;\r\n\r\n               IList<IFCAnyHandle> points = GeometryUtil.GetBoundaryPolygon(boundary);\r\n               int sizeOfBoundary = points.Count;\r\n               if (sizeOfBoundary < 3)\r\n                  return false;\r\n\r\n               bool reverse = !GeometryUtil.BoundaryHasSameSense(boundary);\r\n               for (int ii = 0; ii < sizeOfBoundary; ii++)\r\n               {\r\n                  int pt1 = reverse ? points[(ii + 1) % sizeOfBoundary].Id : points[ii].Id;\r\n                  int pt2 = reverse ? points[ii].Id : points[(ii + 1) % sizeOfBoundary].Id;\r\n\r\n                  // Every edge shall be referenced exactly twice by the loops of the face.\r\n                  if (matchedEdges.Contains(new Tuple<int, int>(pt1, pt2)) ||\r\n                     matchedEdges.Contains(new Tuple<int, int>(pt2, pt1)))\r\n                     return false;\r\n\r\n                  if (unmatchedEdges.TryGetValue(pt2, out IList<int> unmatchedEdgesPt2) &&\r\n                     unmatchedEdgesPt2.Contains(pt1))\r\n                  {\r\n                     unmatchedEdgesPt2.Remove(pt1);\r\n                     matchedEdges.Add(new Tuple<int, int>(pt1, pt2));\r\n                     unmatchedEdgeSz--;\r\n                  }\r\n                  else\r\n                  {\r\n                     if (unmatchedEdges.TryGetValue(pt1, out IList<int> unmatchedEdgesPt1) &&\r\n                        unmatchedEdgesPt1.Contains(pt2))\r\n                     {\r\n                        // An edge with the same orientation exists twice; can't create solid.\r\n                        return false;\r\n                     }\r\n\r\n                     if (unmatchedEdgesPt1 == null)\r\n                     {\r\n                        unmatchedEdgesPt1 = new List<int>();\r\n                        unmatchedEdges[pt1] = unmatchedEdgesPt1;\r\n                     }\r\n\r\n                     unmatchedEdgesPt1.Add(pt2);\r\n                     unmatchedEdgeSz++;\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         return (unmatchedEdgeSz == 0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Projects a point onto the infinite plane described by a planar surface, even if it is outside of the planar \r\n      /// surface bounds.\r\n      /// </summary>\r\n      /// <param name=\"face\">The face.</param>\r\n      /// <param name=\"originalPoint\">The point to project.</param>\r\n      /// <returns>A point on the unbounded plane.</returns>\r\n      private static XYZ SafeProjection(PlanarFace face, XYZ originalPoint)\r\n      {\r\n         XYZ xVector = face.XVector;\r\n         XYZ yVector = face.YVector;\r\n         XYZ origin = face.Origin;\r\n         XYZ relativePoint = originalPoint - origin;\r\n         xVector *= xVector.DotProduct(relativePoint);\r\n         yVector *= yVector.DotProduct(relativePoint);\r\n         return origin + xVector + yVector;\r\n      }\r\n\r\n      // This is a simplified routine for solids that are composed of planar faces with\r\n      // polygonal edges.  This allows us to use the edges as the boundaries of the faces.\r\n      private static bool ExportPlanarBodyIfPossible(ExporterIFC exporterIFC, Solid solid,\r\n          IList<FaceSetInfo> currentFaceHashSetList, Transform lcs)\r\n      {\r\n         List<PlanarFace> planarFaces = [];\r\n         foreach (Face face in solid.Faces)\r\n         {\r\n            PlanarFace planarFace = face as PlanarFace;\r\n            if (planarFace == null)\r\n               return false;\r\n\r\n            planarFaces.Add(planarFace);\r\n         }\r\n\r\n         IFCXYZFuzzyComparer ifcXYZFuzzyComparer = new(ExporterCacheManager.LengthPrecision);\r\n         \r\n         // Prepare polyloop data and check the polyloops for duplicate points before creating\r\n         // IFC instances to avoid unnecessary points and faces in the IFC document.\r\n         Dictionary<PlanarFace, IList<IList<XYZ>>> polyloops = new();\r\n         HashSet<IList<IList<int>>> faceSetIndices = new();\r\n         foreach (PlanarFace planarFace in planarFaces)\r\n         {\r\n            EdgeArrayArray edgeArrayArray = planarFace.EdgeLoops;\r\n            List<IList<XYZ>> edgeArrayVertices = [];\r\n\r\n            foreach (EdgeArray edgeArray in edgeArrayArray)\r\n            {\r\n               SortedSet<XYZ> uniqueVertices = new(ifcXYZFuzzyComparer);\r\n               List<XYZ> vertices = [];\r\n\r\n               foreach (Edge edge in edgeArray)\r\n               {\r\n                  Curve curve = edge.AsCurveFollowingFace(planarFace);\r\n                  IList<XYZ> curvePoints = curve.Tessellate();\r\n                  int numPoints = curvePoints.Count;\r\n                  // Don't add last point to vertices, as this will be added in the next edge.\r\n                  for (int idx = 0; idx < numPoints - 1; idx++)\r\n                  {\r\n                     XYZ pointOnPlane = SafeProjection(planarFace, curvePoints[idx]);\r\n                     uniqueVertices.Add(pointOnPlane);\r\n                     vertices.Add(pointOnPlane);\r\n                  }\r\n               }\r\n\r\n               // Polyloop contains mostly duplicates or small edges\r\n               if (uniqueVertices.Count < 3)\r\n               {\r\n                  return false;\r\n               }\r\n\r\n               edgeArrayVertices.Add(vertices);\r\n            }\r\n\r\n            polyloops.Add(planarFace, edgeArrayVertices);\r\n         }\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         HashSet<IFCAnyHandle> currentFaceSet = new();\r\n         SortedDictionary<XYZ, IFCAnyHandle> vertexCache = new(ifcXYZFuzzyComparer);\r\n         foreach (KeyValuePair<PlanarFace, IList<IList<XYZ>>> polyloop in polyloops)\r\n         {\r\n            List<IList<int>> planarFaceIndices = [];\r\n\r\n            HashSet<IFCAnyHandle> faceBounds = new();\r\n            List<IList<IFCAnyHandle>> edgeArrayVertices = [];\r\n            XYZ faceNormal = polyloop.Key.FaceNormal;\r\n            int outerEdgeArrayIndex = 0;\r\n            int edgeArraySize = polyloop.Value.Count;\r\n            double? maxArea = null; // Only used/set if edgeArraySize > 1.\r\n\r\n            foreach (IList<XYZ> edgeLoop in polyloop.Value)\r\n            {\r\n               List<int> edgeLoopIndices = [];\r\n\r\n               List<IFCAnyHandle> vertices = [];\r\n               List<XYZ> vertexXYZs = [];\r\n\r\n               foreach (XYZ vertex in edgeLoop)\r\n               {\r\n                  if (!vertexCache.TryGetValue(vertex, out IFCAnyHandle pointHandle))\r\n                  {\r\n                     XYZ scaledPoint = TransformAndScalePoint(exporterIFC, vertex, lcs);\r\n                     pointHandle = ExporterUtil.CreateCartesianPoint(file, scaledPoint);\r\n                     vertexCache[vertex] = pointHandle;\r\n                  }\r\n\r\n                  vertices.Add(pointHandle);\r\n                  edgeLoopIndices.Add(pointHandle.Id);\r\n                  vertexXYZs.Add(vertex);\r\n               }\r\n\r\n               if (edgeArraySize > 1)\r\n               {\r\n                  double currArea = Math.Abs(GeometryUtil.ComputePolygonalLoopArea(vertexXYZs, faceNormal, vertexXYZs[0]));\r\n                  if (currArea > (maxArea ?? 0.0))\r\n                  {\r\n                     outerEdgeArrayIndex = edgeArrayVertices.Count;\r\n                     maxArea = currArea;\r\n                  }\r\n               }\r\n\r\n               edgeArrayVertices.Add(vertices);\r\n               planarFaceIndices.Add(edgeLoopIndices);\r\n            }\r\n\r\n            for (int ii = 0; ii < edgeArraySize; ii++)\r\n            {\r\n               if (edgeArrayVertices[ii].Count < 3)\r\n               {\r\n                  // TODO: when we implement logging, log an error here - an invalid edge loop.\r\n                  continue;\r\n               }\r\n\r\n               IFCAnyHandle faceLoop = IFCInstanceExporter.CreatePolyLoop(file, edgeArrayVertices[ii]);\r\n               IFCAnyHandle faceBound = (ii == outerEdgeArrayIndex) ?\r\n                   IFCInstanceExporter.CreateFaceOuterBound(file, faceLoop, true) :\r\n                   IFCInstanceExporter.CreateFaceBound(file, faceLoop, true);\r\n\r\n               faceBounds.Add(faceBound);\r\n            }\r\n\r\n            if (faceBounds.Count > 0)\r\n            {\r\n               IFCAnyHandle currFace = IFCInstanceExporter.CreateFace(file, faceBounds);\r\n               currentFaceSet.Add(currFace);\r\n            }\r\n\r\n            faceSetIndices.Add(planarFaceIndices);\r\n         }\r\n\r\n         if (currentFaceSet.Count > 0)\r\n         {\r\n            bool canCreateClosedShell = CanCreateClosedShell(faceSetIndices);\r\n            currentFaceHashSetList.Add(new FaceSetInfo(currentFaceSet, canCreateClosedShell));\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      // This class allows us to merge points that are equal within a small tolerance.\r\n      private class FuzzyPoint\r\n      {\r\n         XYZ m_Point;\r\n\r\n         public FuzzyPoint(XYZ point)\r\n         {\r\n            m_Point = point;\r\n         }\r\n\r\n         public XYZ Point\r\n         {\r\n            get { return m_Point; }\r\n            set { m_Point = value; }\r\n         }\r\n\r\n         static public bool operator ==(FuzzyPoint first, FuzzyPoint second)\r\n         {\r\n            Object lhsObject = first;\r\n            Object rhsObject = second;\r\n            if (null == lhsObject)\r\n            {\r\n               if (null == rhsObject)\r\n                  return true;\r\n               return false;\r\n            }\r\n            if (null == rhsObject)\r\n               return false;\r\n\r\n            if (!first.Point.IsAlmostEqualTo(second.Point))\r\n               return false;\r\n\r\n            return true;\r\n         }\r\n\r\n         static public bool operator !=(FuzzyPoint first, FuzzyPoint second)\r\n         {\r\n            return !(first == second);\r\n         }\r\n\r\n         public override bool Equals(object obj)\r\n         {\r\n            if (obj == null)\r\n               return false;\r\n\r\n            FuzzyPoint second = obj as FuzzyPoint;\r\n            return (this == second);\r\n         }\r\n\r\n         public override int GetHashCode()\r\n         {\r\n            double total = Point.X + Point.Y + Point.Z;\r\n            return Math.Floor(total * 10000.0 + 0.3142).GetHashCode();\r\n         }\r\n      }\r\n\r\n      // This class allows us to merge Planes that have normals and origins that are equal within a small tolerance.\r\n      private class PlanarKey\r\n      {\r\n         readonly FuzzyPoint m_Norm;\r\n         readonly FuzzyPoint m_Origin;\r\n\r\n         public PlanarKey(XYZ norm, XYZ origin)\r\n         {\r\n            m_Norm = new FuzzyPoint(norm);\r\n            m_Origin = new FuzzyPoint(origin);\r\n         }\r\n\r\n         public XYZ Norm\r\n         {\r\n            get { return m_Norm.Point; }\r\n            set { m_Norm.Point = value; }\r\n         }\r\n\r\n         public XYZ Origin\r\n         {\r\n            get { return m_Origin.Point; }\r\n            set { m_Origin.Point = value; }\r\n         }\r\n\r\n         static public bool operator ==(PlanarKey first, PlanarKey second)\r\n         {\r\n            Object lhsObject = first;\r\n            Object rhsObject = second;\r\n            if (null == lhsObject)\r\n            {\r\n               if (null == rhsObject)\r\n                  return true;\r\n               return false;\r\n            }\r\n            if (null == rhsObject)\r\n               return false;\r\n\r\n            if (first.m_Origin != second.m_Origin)\r\n               return false;\r\n\r\n            if (first.m_Norm != second.m_Norm)\r\n               return false;\r\n\r\n            return true;\r\n         }\r\n\r\n         static public bool operator !=(PlanarKey first, PlanarKey second)\r\n         {\r\n            return !(first == second);\r\n         }\r\n\r\n         public override bool Equals(object obj)\r\n         {\r\n            if (obj == null)\r\n               return false;\r\n\r\n            PlanarKey second = obj as PlanarKey;\r\n            return (this == second);\r\n         }\r\n\r\n         public override int GetHashCode()\r\n         {\r\n            return m_Origin.GetHashCode() + m_Norm.GetHashCode();\r\n         }\r\n      }\r\n\r\n      // This class contains a listing of the indices of the triangles on the plane, and some simple\r\n      // connection information to speed up sewing.\r\n      private class PlanarInfo\r\n      {\r\n         public IList<int> TriangleList = new List<int>();\r\n\r\n         public Dictionary<int, HashSet<int>> TrianglesAtVertexList = new Dictionary<int, HashSet<int>>();\r\n\r\n         public void AddTriangleIndexToVertexGrouping(int triangleIndex, int vertex)\r\n         {\r\n            if (TrianglesAtVertexList.TryGetValue(vertex, out HashSet<int> trianglesAtVertex))\r\n               trianglesAtVertex.Add(triangleIndex);\r\n            else\r\n            {\r\n               trianglesAtVertex = new HashSet<int>() { triangleIndex };\r\n               TrianglesAtVertexList[vertex] = trianglesAtVertex;\r\n            }\r\n         }\r\n      }\r\n\r\n      private static IList<int> GetVertexList(TriangleInShellComponent triangle)\r\n      {\r\n         return [triangle.VertexIndex0,\r\n            triangle.VertexIndex1,\r\n            triangle.VertexIndex2];\r\n      }\r\n\r\n      // This routine is inefficient, so we will cap how much work we allow it to do.\r\n      private static IList<IList<int>> ConvertTrianglesToPlanarFacets(TriangulatedShellComponent tsComponent)\r\n      {\r\n         List<IList<int>> facets = [];\r\n\r\n         int numTriangles = tsComponent.TriangleCount;\r\n\r\n         // sort triangles by normals.\r\n\r\n         // This is a list of triangles whose planes are difficult to calculate, so we won't try to optimize them.\r\n         List<int> sliverTriangles = [];\r\n\r\n         // PlanarKey allows for planes with almost equal normals and origins to be merged.\r\n         Dictionary<PlanarKey, PlanarInfo> planarGroupings = new();\r\n\r\n         IList<XYZ> points = tsComponent.GetVertices();\r\n         List<TriangleInShellComponent> components = [];\r\n\r\n         for (int ii = 0; ii < numTriangles; ii++)\r\n         {\r\n            TriangleInShellComponent currTriangle = tsComponent.GetTriangle(ii);\r\n            components.Add(currTriangle);\r\n         }\r\n\r\n         for (int ii = 0; ii < numTriangles; ii++)\r\n         {\r\n            TriangleInShellComponent currTriangle = components[ii];\r\n\r\n            // Normalize fails if the length is less than 1e-8 or so.  As such, normalilze the vectors\r\n            // along the way to make sure the CrossProduct length isn't too small. \r\n            int vertex0 = currTriangle.VertexIndex0;\r\n            int vertex1 = currTriangle.VertexIndex1;\r\n            int vertex2 = currTriangle.VertexIndex2;\r\n\r\n            XYZ pt1 = points[vertex0];\r\n            XYZ pt2 = points[vertex1];\r\n            XYZ pt3 = points[vertex2];\r\n            XYZ norm = null;\r\n\r\n            try\r\n            {\r\n               XYZ xDir = (pt2 - pt1).Normalize();\r\n               norm = xDir.CrossProduct((pt3 - pt1).Normalize());\r\n               norm = norm.Normalize();\r\n            }\r\n            catch\r\n            {\r\n               sliverTriangles.Add(ii);\r\n               continue;\r\n            }\r\n\r\n            double distToOrig = norm.DotProduct(pt1);\r\n            XYZ origin = new XYZ(norm.X * distToOrig, norm.Y * distToOrig, norm.Z * distToOrig);\r\n\r\n            // Go through map of existing planes and add triangle.\r\n            PlanarKey currKey = new PlanarKey(norm, origin);\r\n            if (planarGroupings.TryGetValue(currKey, out PlanarInfo planarGrouping))\r\n            {\r\n               planarGrouping.TriangleList.Add(ii);\r\n            }\r\n            else\r\n            {\r\n               planarGrouping = new();\r\n               planarGrouping.TriangleList.Add(ii);\r\n               planarGroupings[currKey] = planarGrouping;\r\n            }\r\n\r\n            planarGrouping.AddTriangleIndexToVertexGrouping(ii, vertex0);\r\n            planarGrouping.AddTriangleIndexToVertexGrouping(ii, vertex1);\r\n            planarGrouping.AddTriangleIndexToVertexGrouping(ii, vertex2);\r\n         }\r\n\r\n         foreach (PlanarInfo planarGroupingInfo in planarGroupings.Values)\r\n         {\r\n            IList<int> planarGrouping = planarGroupingInfo.TriangleList;\r\n\r\n            // All the visited triangles in the current group.\r\n            HashSet<int> visitedTriangles = new();\r\n            int numCurrTriangles = planarGrouping.Count;\r\n\r\n            for (int ii = 0; ii < numCurrTriangles; ii++)\r\n            {\r\n               int idx = planarGrouping[ii];\r\n               if (visitedTriangles.Contains(idx))\r\n                  continue;\r\n\r\n               // The visited but not added yet triangles. Used when we have to revert merging.\r\n               HashSet<int> visitedNewTriangles = new();\r\n\r\n               TriangleInShellComponent currTriangle = components[idx];\r\n\r\n               IList<int> currFacet = GetVertexList(currTriangle);\r\n\r\n               // If only one triangle, a common case, add the facet and break out.\r\n               if (numCurrTriangles == 1)\r\n               {\r\n                  facets.Add(currFacet);\r\n                  break;\r\n               }\r\n\r\n               // If there are too many triangles, we won't try to be fancy until this routine is optimized.\r\n               if (numCurrTriangles > 150)\r\n               {\r\n                  facets.Add(currFacet);\r\n                  continue;\r\n               }\r\n\r\n               HashSet<int> currFacetVertices = new()\r\n               {\r\n                  currTriangle.VertexIndex0,\r\n                  currTriangle.VertexIndex1,\r\n                  currTriangle.VertexIndex2\r\n               };\r\n\r\n               visitedTriangles.Add(idx);\r\n               visitedNewTriangles.Add(idx);\r\n\r\n               bool foundTriangle;\r\n               do\r\n               {\r\n                  foundTriangle = false;\r\n\r\n                  // For each pair of adjacent vertices in the triangle, see if there is a triangle that shares that edge.\r\n                  int sizeOfCurrBoundary = currFacet.Count;\r\n                  foreach (int currVertexIndex in currFacet)\r\n                  {\r\n                     HashSet<int> trianglesAtCurrVertex = planarGroupingInfo.TrianglesAtVertexList[currVertexIndex];\r\n                     foreach (int potentialNeighbor in trianglesAtCurrVertex)\r\n                     {\r\n                        if (visitedTriangles.Contains(potentialNeighbor))\r\n                           continue;\r\n\r\n                        TriangleInShellComponent candidateTriangle = components[potentialNeighbor];\r\n                        int oldVertex = -1, newVertex = -1;\r\n\r\n                        // Same normal, unvisited face - see if we have a matching edge.\r\n                        if (currFacetVertices.Contains(candidateTriangle.VertexIndex0))\r\n                        {\r\n                           if (currFacetVertices.Contains(candidateTriangle.VertexIndex1))\r\n                           {\r\n                              oldVertex = candidateTriangle.VertexIndex1;\r\n                              newVertex = candidateTriangle.VertexIndex2;\r\n                           }\r\n                           else if (currFacetVertices.Contains(candidateTriangle.VertexIndex2))\r\n                           {\r\n                              oldVertex = candidateTriangle.VertexIndex0;\r\n                              newVertex = candidateTriangle.VertexIndex1;\r\n                           }\r\n                        }\r\n                        else if (currFacetVertices.Contains(candidateTriangle.VertexIndex1))\r\n                        {\r\n                           if (currFacetVertices.Contains(candidateTriangle.VertexIndex2))\r\n                           {\r\n                              oldVertex = candidateTriangle.VertexIndex2;\r\n                              newVertex = candidateTriangle.VertexIndex0;\r\n                           }\r\n                        }\r\n\r\n                        if (oldVertex == -1 || newVertex == -1)\r\n                           continue;\r\n\r\n                        // Found a matching edge, insert it into the existing list.\r\n                        int pos;\r\n                        for (pos = 0; pos < sizeOfCurrBoundary; pos++)\r\n                        {\r\n                           if (currFacet[pos] == oldVertex)\r\n                              break;\r\n                        }\r\n\r\n                        bool atEnd = pos == sizeOfCurrBoundary - 1;\r\n                        currFacet.Add(atEnd ? newVertex : currFacet[sizeOfCurrBoundary - 1]);\r\n                        if (!atEnd)\r\n                        {\r\n                           for (int loc = sizeOfCurrBoundary - 1; loc > pos + 1; loc--)\r\n                           {\r\n                              currFacet[loc] = currFacet[loc - 1];\r\n                           }\r\n                           currFacet[pos + 1] = newVertex;\r\n                        }\r\n                        sizeOfCurrBoundary++;\r\n\r\n                        foundTriangle = true;\r\n                        visitedTriangles.Add(potentialNeighbor);\r\n                        visitedNewTriangles.Add(potentialNeighbor);\r\n                        currFacetVertices.Add(newVertex);\r\n\r\n                        break;\r\n                     }\r\n\r\n                     if (foundTriangle)\r\n                        break;\r\n                  }\r\n               } while (foundTriangle);\r\n\r\n               // Check the validity of the facets.  For now, if we have a duplicated vertex,\r\n               // revert to the original triangles.  TODO: split the facet into outer and inner\r\n               // loops and remove unnecessary edges.\r\n               if (currFacet.Count == currFacetVertices.Count)\r\n               {\r\n                  facets.Add(currFacet);\r\n               }\r\n               else\r\n               {\r\n                  foreach (int visitedIdx in visitedNewTriangles)\r\n                  {\r\n                     TriangleInShellComponent visitedTriangle = components[visitedIdx];\r\n\r\n                     IList<int> visitedFacet = GetVertexList(visitedTriangle);\r\n\r\n                     facets.Add(visitedFacet);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         // Add in slivery triangles.\r\n         foreach (int sliverIdx in sliverTriangles)\r\n         {\r\n            TriangleInShellComponent currTriangle = components[sliverIdx];\r\n\r\n            IList<int> currFacet = GetVertexList(currTriangle);\r\n\r\n            facets.Add(currFacet);\r\n         }\r\n\r\n         return facets;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IfcFace with one outer loop whose vertices are defined by the vertices array.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"vertices\">The vertices.</param>\r\n      /// <returns>An IfcFace handle.</returns>\r\n      public static IFCAnyHandle CreateFaceFromVertexList(IFCFile file, IList<IFCAnyHandle> vertices)\r\n      {\r\n         IList<IFCAnyHandle> cleanedList = new List<IFCAnyHandle>();\r\n         ISet<int> foundIds = new HashSet<int>();\r\n\r\n         int count = vertices.Count;\r\n         for (int ii = 0; ii < count; ii++)\r\n         {\r\n            IFCAnyHandle currentVertex = vertices[ii];\r\n            int id = currentVertex.Id;\r\n            if (id == vertices[(ii + 1) % count].Id)\r\n            {\r\n               continue;\r\n            }\r\n\r\n            if (foundIds.Contains(id))\r\n            {\r\n               return null;\r\n            }\r\n\r\n            foundIds.Add(id);\r\n            cleanedList.Add(currentVertex);\r\n         }\r\n\r\n         if (cleanedList.Count < 3)\r\n         {\r\n            return null;\r\n         }\r\n\r\n         IFCAnyHandle faceOuterLoop = IFCInstanceExporter.CreatePolyLoop(file, cleanedList);\r\n         IFCAnyHandle faceOuterBound = IFCInstanceExporter.CreateFaceOuterBound(file, faceOuterLoop, true);\r\n         HashSet<IFCAnyHandle> faceBounds = new HashSet<IFCAnyHandle>() { faceOuterBound };\r\n         return IFCInstanceExporter.CreateFace(file, faceBounds);\r\n      }\r\n\r\n      private static bool ExportPlanarFacetsIfPossible(IFCFile file, TriangulatedShellComponent component, IList<IFCAnyHandle> vertexHandles,\r\n         HashSet<IFCAnyHandle> currentFaceSet, out bool canExportAsClosedShell)\r\n      {\r\n         canExportAsClosedShell = false;\r\n         IList<IList<int>> facets = null;\r\n         try\r\n         {\r\n            facets = ConvertTrianglesToPlanarFacets(component);\r\n         }\r\n         catch\r\n         {\r\n            return false;\r\n         }\r\n\r\n         if (facets == null)\r\n            return false;\r\n\r\n         HashSet<IList<IList<int>>> faceSetIndices = new();\r\n\r\n         foreach (List<int> facet in facets)\r\n         {\r\n            List<IList<int>> planarFaceIndices = new();\r\n\r\n            IList<IFCAnyHandle> vertices = new List<IFCAnyHandle>();\r\n            int numVertices = facet.Count;\r\n            if (numVertices < 3)\r\n            {\r\n               continue;\r\n            }\r\n\r\n            List<int> edgeLoopIndices = new();\r\n            foreach (int vertexIndex in facet)\r\n            {\r\n               vertices.Add(vertexHandles[vertexIndex]);\r\n               edgeLoopIndices.Add(vertexHandles[vertexIndex].Id);\r\n            }\r\n\r\n            IFCAnyHandle face = CreateFaceFromVertexList(file, vertices);\r\n            currentFaceSet.AddIfNotNull(face);\r\n\r\n            planarFaceIndices.Add(edgeLoopIndices);\r\n            faceSetIndices.Add(planarFaceIndices);\r\n         }\r\n\r\n         canExportAsClosedShell = CanCreateClosedShell(faceSetIndices);\r\n\r\n         return true;\r\n      }\r\n\r\n      private static IFCAnyHandle CreateEdgeCurveFromCurve(IFCFile file, ExporterIFC exporterIFC, Curve curve, IFCAnyHandle edgeStart, IFCAnyHandle edgeEnd,\r\n         bool sameSense, IDictionary<IFCFuzzyXYZ, IFCAnyHandle> cartesianPoints)\r\n      {\r\n         bool allowAdvancedCurve = !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4;\r\n         const GeometryUtil.TrimCurvePreference trimCurvePreference = GeometryUtil.TrimCurvePreference.BaseCurve;\r\n         IFCAnyHandle baseCurve = GeometryUtil.CreateIFCCurveFromRevitCurve(file, \r\n            exporterIFC, curve, allowAdvancedCurve, cartesianPoints, trimCurvePreference);\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(baseCurve))\r\n            return null;\r\n\r\n         IFCAnyHandle edgeCurve = IFCInstanceExporter.CreateEdgeCurve(file, edgeStart, edgeEnd, baseCurve, sameSense);\r\n         return edgeCurve;\r\n      }\r\n\r\n      private static IFCAnyHandle CreateProfileCurveFromCurve(IFCFile file, ExporterIFC exporterIFC, Curve curve, string profileName,\r\n         IDictionary<IFCFuzzyXYZ, IFCAnyHandle> cartesianPoints)\r\n      {\r\n         bool allowAdvancedCurve = !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4;\r\n         const GeometryUtil.TrimCurvePreference trimCurvePreference = GeometryUtil.TrimCurvePreference.TrimmedCurve;\r\n         IFCAnyHandle ifcCurve = GeometryUtil.CreateIFCCurveFromRevitCurve(file, exporterIFC,\r\n            curve, allowAdvancedCurve, cartesianPoints, trimCurvePreference);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcCurve))\r\n            return null;\r\n         \r\n         IFCAnyHandle sweptCurve = null;\r\n\r\n         bool isBound = false;\r\n\r\n         IFCAnyHandle curveStart = null;\r\n         IFCAnyHandle curveEnd = null;\r\n\r\n         if (!curve.IsBound)\r\n         {\r\n            isBound = false;\r\n         }\r\n         else\r\n         {\r\n            XYZ startPoint = curve.GetEndPoint(0);\r\n            XYZ endPoint = curve.GetEndPoint(1);\r\n\r\n            if (startPoint.IsAlmostEqualTo(endPoint))\r\n            {\r\n               isBound = false;\r\n            }\r\n            else\r\n            {\r\n               curveStart = GeometryUtil.XYZtoIfcCartesianPoint(exporterIFC, curve.GetEndPoint(0), cartesianPoints, GeometryUtil.Dimension.Dim3D);\r\n               curveEnd = GeometryUtil.XYZtoIfcCartesianPoint(exporterIFC, curve.GetEndPoint(1), cartesianPoints, GeometryUtil.Dimension.Dim3D);\r\n               isBound = true;\r\n            }\r\n         }\r\n\r\n         if (!isBound)\r\n         {\r\n            sweptCurve = IFCInstanceExporter.CreateArbitraryClosedProfileDef(file, IFCProfileType.Curve, profileName, ifcCurve);\r\n         }\r\n         else\r\n         {\r\n            sweptCurve = IFCInstanceExporter.CreateArbitraryOpenProfileDef(file, IFCProfileType.Curve, profileName, ifcCurve);\r\n         }\r\n\r\n         return sweptCurve;\r\n      }\r\n\r\n      private static void ConvertRevitKnotsToIFCKnots(IList<double> originalKnots, IList<double> ifcKnots, IList<int> ifcKnotMultiplicities)\r\n      {\r\n         int lastIndex = -1;\r\n         double lastValue = 0.0;\r\n         foreach (double originalKnot in originalKnots)\r\n         {\r\n            if (lastIndex >= 0 && MathUtil.IsAlmostEqual(lastValue, originalKnot))\r\n            {\r\n               ifcKnotMultiplicities[lastIndex]++;\r\n            }\r\n            else\r\n            {\r\n               ifcKnots.Add(originalKnot);\r\n               ifcKnotMultiplicities.Add(1);\r\n               lastIndex++;\r\n               lastValue = originalKnot;\r\n            }\r\n         }\r\n      }\r\n\r\n      private static IFCAnyHandle CreateNURBSSurfaceFromFace(ExporterIFC exporterIFC, IFCFile file, Face face)\r\n      {\r\n         Toolkit.IFC4.IFCBSplineSurfaceForm surfaceForm;\r\n         if (face is RuledFace)\r\n            surfaceForm = Toolkit.IFC4.IFCBSplineSurfaceForm.RULED_SURF;\r\n         else\r\n            surfaceForm = Toolkit.IFC4.IFCBSplineSurfaceForm.UNSPECIFIED;\r\n\r\n         try\r\n         {\r\n            NurbsSurfaceData nurbsSurfaceData = ExportUtils.GetNurbsSurfaceDataForSurface(face.GetSurface());\r\n\r\n            int uDegree = nurbsSurfaceData.DegreeU;\r\n            int vDegree = nurbsSurfaceData.DegreeV;\r\n\r\n            IList<double> originalKnotsU = nurbsSurfaceData.GetKnotsU();\r\n            IList<double> originalKnotsV = nurbsSurfaceData.GetKnotsV();\r\n\r\n            int originalKnotsUSz = originalKnotsU.Count;\r\n            int originalKnotsVSz = originalKnotsV.Count;\r\n\r\n            int numControlPointsU = originalKnotsUSz - uDegree - 1;\r\n            int numControlPointsV = originalKnotsVSz - vDegree - 1;\r\n            int numControlPoints = numControlPointsU * numControlPointsV;\r\n\r\n            // controlPointsList and weightsData\r\n            IList<XYZ> controlPoints = nurbsSurfaceData.GetControlPoints();\r\n            if (controlPoints.Count != numControlPoints)\r\n               return null;\r\n\r\n            IList<double> weights = nurbsSurfaceData.GetWeights();\r\n            if (weights.Count != numControlPoints)\r\n               return null;\r\n\r\n            IList<IList<IFCAnyHandle>> controlPointsList = new List<IList<IFCAnyHandle>>();\r\n            IList<IList<double>> weightsData = new List<IList<double>>();\r\n\r\n            int indexU = 0;\r\n            int indexV = 0;\r\n            int controlPointListSize = 0;\r\n            for (int ii = 0; ii < numControlPoints; ii++)\r\n            {\r\n               IFCAnyHandle controlPointHnd = GeometryUtil.XYZtoIfcCartesianPoint(exporterIFC, controlPoints[ii], null, GeometryUtil.Dimension.Dim3D);\r\n               if (indexU == controlPointListSize)\r\n               {\r\n                  controlPointsList.Add(new List<IFCAnyHandle>());\r\n                  weightsData.Add(new List<double>());\r\n                  controlPointListSize++;\r\n               }\r\n\r\n               controlPointsList[indexU].Add(controlPointHnd);\r\n               weightsData[indexU].Add(weights[ii]);\r\n\r\n               indexV++;\r\n               if (indexV == numControlPointsV)\r\n               {\r\n                  indexU++;\r\n                  indexV = 0;\r\n               }\r\n            }\r\n\r\n            // uKnots and uMultiplicities\r\n            IList<double> uKnots = new List<double>();\r\n            IList<int> uMultiplicities = new List<int>();\r\n\r\n            ConvertRevitKnotsToIFCKnots(originalKnotsU, uKnots, uMultiplicities);\r\n\r\n            // vKnots and vMultiplicities\r\n            IList<double> vKnots = new List<double>();\r\n            IList<int> vMultiplicities = new List<int>();\r\n\r\n\r\n            ConvertRevitKnotsToIFCKnots(originalKnotsV, vKnots, vMultiplicities);\r\n\r\n            // Rest of values.\r\n            IFCLogical uClosed = IFCLogical.False;\r\n            IFCLogical vClosed = IFCLogical.False;\r\n            IFCLogical selfIntersect = IFCLogical.Unknown;\r\n\r\n            Toolkit.IFC4.IFCKnotType knotType = Toolkit.IFC4.IFCKnotType.UNSPECIFIED;\r\n\r\n            return IFCInstanceExporter.CreateRationalBSplineSurfaceWithKnots(file, uDegree, vDegree,\r\n               controlPointsList, surfaceForm, uClosed, vClosed, selfIntersect,\r\n               uMultiplicities, vMultiplicities, uKnots, vKnots, knotType, weightsData);\r\n         }\r\n         catch\r\n         {\r\n            return null;\r\n         }\r\n      }\r\n\r\n      private static IFCAnyHandle CreatePositionForFace(ExporterIFC exporterIFC, IFCAnyHandle location, XYZ zdir, XYZ xdir)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(location) || zdir == null || xdir == null)\r\n            return null;\r\n\r\n         IFCAnyHandle axisHandle = GeometryUtil.VectorToIfcDirection(exporterIFC, zdir);\r\n         IFCAnyHandle refDirection = GeometryUtil.VectorToIfcDirection(exporterIFC, xdir);\r\n         IFCAnyHandle position = IFCInstanceExporter.CreateAxis2Placement3D(exporterIFC.GetFile(), location, axisHandle, refDirection);\r\n         return position;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns not-singular UV point for given Revit Face or null if function fails.\r\n      /// </summary>\r\n      /// <param name=\"face\">face</param>\r\n      /// <param name=\"testPointUV\">UV test point created here and returned as out param</param>\r\n      private static void GetNonSingularUVPointForRevitFace(Face face, out UV revitTestUV)\r\n      {\r\n         // The point we use to test will be the middle point of the first \"not short\" edge of this face\r\n\r\n         revitTestUV = null;\r\n\r\n         EdgeArrayArray faceEdgeLoops = face.EdgeLoops;\r\n         if (faceEdgeLoops == null || faceEdgeLoops.Size == 0)\r\n            return;\r\n         for (int ii = 0; ii < faceEdgeLoops.Size && revitTestUV == null; ii++)\r\n         {\r\n            EdgeArray edgeLoop = faceEdgeLoops.get_Item(ii);\r\n            if (edgeLoop == null)\r\n               continue;                               // is it possible case?\r\n            for (int jj = 0; jj < edgeLoop.Size && revitTestUV == null; jj++)\r\n            {\r\n               Edge edge = edgeLoop.get_Item(jj);\r\n               if (edge == null)\r\n                  continue;\r\n               // TO DO Find possibility to indicate short edges to skip. \r\n               //               if (< edge is too short>)               \r\n               //                  continue;\r\n               revitTestUV = edge.EvaluateOnFace(0.5, face);\r\n            }\r\n         }\r\n         return;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Uses information about surface of revolution (including Cylinder and Cone) to realize if it is right-handed one or not.\r\n      /// </summary>\r\n      /// <param name=\"testPointXYZ\">XYZ test point on the surface</param>\r\n      /// <param name=\"axis\">surface's axis</param>\r\n      /// <param name=\"origin\">surface's origin</param>\r\n      /// <param name=\"uDeriv\">u derivative in the testPoint</param>\r\n      /// <returns> bool == true if coordinate system is right-handed, otherwise retuns false</returns>\r\n      private static bool IsRightHanded(XYZ testPoint, XYZ axis, XYZ origin, XYZ uDeriv)\r\n      {\r\n         XYZ testDir = (testPoint - origin);\r\n\r\n         // This is the rotation direction at the test point for a right handed system\r\n         XYZ tetsDeriv = axis.CrossProduct(testDir);\r\n         // uDeriv is the actual rotation direction\r\n         return tetsDeriv.DotProduct(uDeriv) > 0.0;\r\n      }\r\n\r\n      private static XYZ GetOneSurfaceNormal(Face face, out Transform testPointDerivatives, out bool sameSenseAF)\r\n      {\r\n         testPointDerivatives = null;\r\n         sameSenseAF = true;\r\n\r\n         // calculate sameSense by getting a point on the Revit Surface and compute the normal of the Revit Face and the surface at that point\r\n         // if these two vectors agree, then sameSense is true.\r\n         // The point we use to test will be the middle point of the first appropriate edge in the in all loops of Revit Face\r\n         GetNonSingularUVPointForRevitFace(face, out UV revitTestUV);\r\n         if (revitTestUV == null)\r\n         {\r\n            return null;\r\n         }\r\n         \r\n         // Compute the normal of the SURFACE at revitTestUV\r\n         testPointDerivatives = face.ComputeDerivatives(revitTestUV);\r\n\r\n         sameSenseAF = face.OrientationMatchesSurfaceOrientation;\r\n         return testPointDerivatives.BasisX.CrossProduct(testPointDerivatives.BasisY);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns a handle for creation of an AdvancedBrep with AdvancedFace and assigns it to the file\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">exporter IFC</param>\r\n      /// <param name=\"element\">the element</param>\r\n      /// <param name=\"options\">exporter option</param>\r\n      /// <param name=\"geomObject\">the geometry object</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle ExportBodyAsAdvancedBrep(ExporterIFC exporterIFC, Element element,\r\n          GeometryObject geomObject)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         Document document = element.Document;\r\n\r\n         // IFCFuzzyXYZ will be used in this routine to compare 2 XYZs, we consider two points are the same if their distance\r\n         // is within this tolerance\r\n         IFCFuzzyXYZ.IFCFuzzyXYZEpsilon = document.Application.VertexTolerance;\r\n\r\n         IFCAnyHandle advancedBrep = null;\r\n\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            try\r\n            {\r\n               if (!(geomObject is Solid))\r\n               {\r\n                  return null;\r\n               }\r\n               HashSet<IFCAnyHandle> cfsFaces = new();\r\n               Solid geomSolid = geomObject as Solid;\r\n               FaceArray faces = geomSolid.Faces;\r\n\r\n               // Check for supported curve and face types before creating an advanced BRep.\r\n               List<KeyValuePair<Edge, Curve>> edgesAndCurves = [];\r\n               foreach (Edge edge in geomSolid.Edges)\r\n               {\r\n                  Curve currCurve = edge.AsCurve();\r\n                  if (currCurve == null)\r\n                     return null;\r\n\r\n                  bool isValidCurve = !(currCurve is CylindricalHelix);\r\n                  if (!isValidCurve)\r\n                     return null;\r\n\r\n                  // based on the definition of IfcAdvancedBrep in IFC 4 specification, an IfcAdvancedBrep must contain a closed shell, so we\r\n                  // have a test to reject all open shells here.\r\n                  // we check that geomSolid is an actual solid and not an open shell by verifying that each edge is shared by exactly 2 faces.\r\n                  for (int ii = 0; ii < 2; ii++)\r\n                  {\r\n                     if (edge.GetFace(ii) == null)\r\n                        return null;\r\n                  }\r\n\r\n                  edgesAndCurves.Add(new(edge, currCurve));\r\n               }\r\n\r\n               foreach (Face face in geomSolid.Faces)\r\n               {\r\n                  bool isValidFace = (face is PlanarFace) || (face is CylindricalFace) || (face is RuledFace) || (face is HermiteFace) || (face is RevolvedFace) || (face is ConicalFace);\r\n                  if (!isValidFace)\r\n                  {\r\n                     return null;\r\n                  }\r\n               }\r\n\r\n               Dictionary<Face, IList<Edge>> faceToEdges = new();\r\n               Dictionary<Edge, IFCAnyHandle> edgeToIfcEdgeCurve = new();\r\n\r\n               // A map of already created IfcCartesianPoints, to avoid duplication.  This is used for vertex points and other geometry in the BRep.\r\n               // We do not share IfcCartesianPoints across BReps.\r\n               SortedDictionary<IFCFuzzyXYZ, IFCAnyHandle> cartesianPoints = new();\r\n\r\n               // A map of already created IfcVertexPoints, to avoid duplication.\r\n               SortedDictionary<IFCFuzzyXYZ, IFCAnyHandle> vertices = new();\r\n\r\n               // First phase: get all the vertices:\r\n               foreach (KeyValuePair<Edge, Curve> edgeAndCurve in edgesAndCurves)\r\n               {\r\n                  Edge edge = edgeAndCurve.Key;\r\n                  Curve currCurve = edgeAndCurve.Value;\r\n\r\n                  // Note that currCurve's parameter bounds may extend beyond the edge.\r\n                  // This is allowed since the edge's start and end points are also used\r\n                  // as part of the overall definition of the IFC edge. At present (February 2018),\r\n                  // this does in fact happen, since convertCurveToGNurbSpline ignores a Hermite spline\r\n                  // curve's bounds (though it shouldn't - see JIRA item REVIT-125815 and related items).\r\n                  // In light of this, we must use the edge's start and end points, not currCurve's\r\n                  // start and end points.\r\n                  //\r\n                  // Also note that this code seems to be intended to use an edge's parametric orientation,\r\n                  // as opposed to its topological orientation on one of its faces (given that it's\r\n                  // processing the list of edges independently of faces).\r\n                  XYZ startPoint = edge.Evaluate(0.0);\r\n                  XYZ endPoint = edge.Evaluate(1.0);\r\n\r\n                  IFCFuzzyXYZ fuzzyStartPoint = new(startPoint);\r\n                  IFCFuzzyXYZ fuzzyEndPoint = new(endPoint);\r\n                  IFCAnyHandle edgeStart = null;\r\n                  IFCAnyHandle edgeEnd = null;\r\n\r\n                  if (!vertices.TryGetValue(fuzzyStartPoint, out edgeStart))\r\n                  {\r\n                     IFCAnyHandle edgeStartCP = GeometryUtil.XYZtoIfcCartesianPoint(exporterIFC, startPoint, cartesianPoints, GeometryUtil.Dimension.Dim3D);\r\n                     edgeStart = IFCInstanceExporter.CreateVertexPoint(file, edgeStartCP);\r\n                     vertices.Add(fuzzyStartPoint, edgeStart);\r\n                  }\r\n                  \r\n                  if (!vertices.TryGetValue(fuzzyEndPoint, out edgeEnd))\r\n                  {\r\n                     IFCAnyHandle edgeEndCP = GeometryUtil.XYZtoIfcCartesianPoint(exporterIFC, endPoint, cartesianPoints, GeometryUtil.Dimension.Dim3D);\r\n                     edgeEnd = IFCInstanceExporter.CreateVertexPoint(file, edgeEndCP);\r\n                     vertices.Add(fuzzyEndPoint, edgeEnd);\r\n                  }\r\n\r\n                  IFCAnyHandle edgeCurve = CreateEdgeCurveFromCurve(file, exporterIFC, currCurve, edgeStart, edgeEnd, true, cartesianPoints);\r\n\r\n                  edgeToIfcEdgeCurve.Add(edge, edgeCurve);\r\n\r\n                  Face face = null;\r\n                  for (int ii = 0; ii < 2; ii++)\r\n                  {\r\n                     face = edge.GetFace(ii);\r\n                     if (!faceToEdges.TryGetValue(face, out IList<Edge> edges))\r\n                     {\r\n                        edges = new List<Edge>();\r\n                        faceToEdges.Add(face, edges);\r\n                     }\r\n                     edges.Add(edge);\r\n                  }\r\n               }\r\n\r\n               // Second phase: create IfcFaceOuterBound, IfcFaceInnerBound, IfcAdvancedFace and IfcAdvancedBrep\r\n               foreach (Face face in geomSolid.Faces)\r\n               {\r\n                  // List of created IfcEdgeLoops of this face\r\n                  List<IFCAnyHandle> edgeLoopList = [];\r\n\r\n                  // List of created IfcOrientedEdge in one loop\r\n                  List<IFCAnyHandle> orientedEdgeList = [];\r\n\r\n                  IFCAnyHandle surface = null;\r\n                  \r\n                  // We are creating at first IFC Surface and then IFC Face. IFC Face should have the same orientation(normal) as Revit face.\r\n                  // The IFC face has the SameSense flag(sameSenseAF), which tells if the IFC Face Normal is the same or opposite of the IFC Surface Normal. \r\n                  // If IFC Surface has same normal direction (ifcSurfaceNormalDir) as Revit Face (revitFaceNormal) we are setting sameSenseAF to True. \r\n                  // Otherwise to False. See the code below just before IFC Face creation. \r\n                  // Note: All Revit surfaces may be right-handed. Some of them may be left-handed too as well as right-handed. IFC surfaces are always right-handed. \r\n                  // In case when Revit surface is right-handed IFC Surface Normal match the Revit Surface Parametric Normal. Otherwise they are opposite ones.\r\n                  // Note: instead of IFC surface normal we are using vector ifcSurfaceNormalDir with the same direction but not normalized.\r\n                  // Note: We will compute the ifcSurfaceNormalDir as Revit Surface Parametric Normal direction using cross product of Revit Surface derivatives.\r\n                  // For left-handed Revit Surfaces we flip ifcSurfaceNormalDir. \r\n                  // Note: Instead of checking that revitFaceNormal and IFCSurfaceNormal are exactly same we are checking if the dot product \r\n                  // of revitSurfaceNormal and ifcSurfaceNormalDir is positive or not (see below).\r\n                  List<HashSet<IFCAnyHandle>> boundsCollection = [];\r\n                  Transform testPointDerivatives = null;\r\n                  bool sameSenseAF = true;\r\n                  \r\n                  XYZ ifcSurfaceNormalDir = (face as PlanarFace)?.FaceNormal ?? \r\n                     GetOneSurfaceNormal(face, out testPointDerivatives, out sameSenseAF);\r\n                  if (ifcSurfaceNormalDir.IsZeroLength())\r\n                  {\r\n                     return null;\r\n                  }\r\n\r\n                  var sortedEdgeLoop = GeometryUtil.GetOuterLoopsWithInnerLoops(face);\r\n                  if (sortedEdgeLoop == null)\r\n                  {\r\n                     return null;\r\n                  }\r\n\r\n                  // check that we get back the same number of edgeloop\r\n                  int numberOfSortedEdgeLoop = 0;\r\n\r\n                  foreach (var (outerLoop, innerLoops) in sortedEdgeLoop)\r\n                  {\r\n                     numberOfSortedEdgeLoop += 1 + innerLoops.Count;\r\n                  }\r\n\r\n                  if (numberOfSortedEdgeLoop != face.EdgeLoops.Size)\r\n                  {\r\n                     return null;\r\n                  }\r\n\r\n                  foreach (var (outerLoop, loops) in sortedEdgeLoop)\r\n                  {\r\n                     if (outerLoop == null || loops == null)\r\n                        return null;\r\n\r\n                     HashSet<IFCAnyHandle> bounds = new();\r\n\r\n                     // Append the outerloop at the beginning of the list of inner loop\r\n                     loops.Insert(0, outerLoop);\r\n\r\n                     // Process each inner loop\r\n                     foreach (EdgeArray edgeArray in loops)\r\n                     {\r\n                        // Map each edge in this loop back to its corresponding edge curve and then calculate its orientation to create IfcOrientedEdge\r\n                        foreach (Edge edge in edgeArray)\r\n                        {\r\n                           // The reason why edgeToIfcEdgeCurve cannot find edge is that either we haven't created the IfcOrientedEdge\r\n                           // corresponding to that edge OR we already have but the dictionary cannot find the edge as its key because \r\n                           // Face.EdgeLoop and geomSolid.Edges return different pointers for the same edge. This can be avoided if \r\n                           // Equals() method is implemented for Edge\r\n                           if (!edgeToIfcEdgeCurve.ContainsKey(edge))\r\n                              return null;\r\n\r\n                           IFCAnyHandle edgeCurve = edgeToIfcEdgeCurve[edge];\r\n\r\n                           Curve currCurve = edge.AsCurve();\r\n                           Curve curveInCurrentFace = edge.AsCurveFollowingFace(face);\r\n\r\n                           if (currCurve == null || curveInCurrentFace == null)\r\n                              return null;\r\n\r\n                           // if the curve length is 0, ignore it.\r\n                           if (MathUtil.IsAlmostZero(currCurve.ApproximateLength))\r\n                              continue;\r\n\r\n                           // if the curve is unbound, it means that the solid may be corrupted, we shouldn't process it anymore\r\n                           if (!currCurve.IsBound)\r\n                              return null;\r\n\r\n                           // Manually comparing the curves' start points isn't ideal,\r\n                           // though it will usually suffice in practice. Instead, AsCurveFollowingFace\r\n                           // should optionally indicate if its output curve has the same or opposite\r\n                           // orientation as the curve returned by AsCurve. Note that the curves returned\r\n                           // by those two functions are the same (to within Revit's tolerance) up to a\r\n                           // reversal of orientation.\r\n                           bool orientation = currCurve.GetEndPoint(0).IsAlmostEqualTo(curveInCurrentFace.GetEndPoint(0));\r\n\r\n                           IFCAnyHandle orientedEdge = IFCInstanceExporter.CreateOrientedEdge(file, edgeCurve, orientation);\r\n                           orientedEdgeList.Add(orientedEdge);\r\n                        }\r\n\r\n                        IFCAnyHandle edgeLoop = IFCInstanceExporter.CreateEdgeLoop(file, orientedEdgeList);\r\n                        edgeLoopList.Add(edgeLoop);\r\n\r\n                        IFCAnyHandle faceBound = null;\r\n\r\n                        // EdgeLoopList has only 1 element indicates that this is the outer loop\r\n                        if (edgeLoopList.Count == 1)\r\n                           faceBound = IFCInstanceExporter.CreateFaceOuterBound(file, edgeLoop, true);\r\n                        else\r\n                        {\r\n                           //Outer loops go CCW around face normal, inner loops CW. Orientation flag on IfcFaceBound\r\n                           //does not indicate this orientation. Rather, it indicates whether or not the loop is used\r\n                           //by the face the way it was first created. Since we create a new IfcFaceBound for each revit\r\n                           //face loop and since each revit loop is oriented w.r.t. the face normal as demanded by IFC,\r\n                           //this is always the case.\r\n                           faceBound = IFCInstanceExporter.CreateFaceBound(file, edgeLoop, true);\r\n                        }\r\n\r\n                        bounds.Add(faceBound);\r\n\r\n                        // After finishing processing one loop, clear orientedEdgeList\r\n                        orientedEdgeList.Clear();\r\n                     }\r\n                     boundsCollection.Add(bounds);\r\n                  }\r\n\r\n                  edgeLoopList.Clear();\r\n\r\n                  // TODO: create a new face processing method to factor out this code\r\n                  // process the face now\r\n                  if (face is PlanarFace plFace)\r\n                  {\r\n                     IFCAnyHandle location = GeometryUtil.XYZtoIfcCartesianPoint(exporterIFC, plFace.Origin, cartesianPoints, GeometryUtil.Dimension.Dim3D);\r\n\r\n                     // We create IFC Plane with the same normal as Revit face.\r\n                     XYZ zdir = ifcSurfaceNormalDir;\r\n                     XYZ xdir = plFace.XVector;\r\n\r\n                     IFCAnyHandle position = CreatePositionForFace(exporterIFC, location, zdir, xdir);\r\n\r\n                     surface = IFCInstanceExporter.CreatePlane(file, position);\r\n                  }\r\n                  else if (face is CylindricalFace cylFace)\r\n                  {\r\n                     // get radius-x and axis vectors and the position of the origin\r\n                     XYZ origin = cylFace.Origin;\r\n                     IFCAnyHandle location = GeometryUtil.XYZtoIfcCartesianPoint(exporterIFC, origin, cartesianPoints, GeometryUtil.Dimension.Dim3D);\r\n\r\n                     XYZ rad = UnitUtil.ScaleLength(cylFace.get_Radius(0));\r\n                     double radius = rad.GetLength();\r\n\r\n                     XYZ zdir = cylFace.Axis;\r\n                     XYZ xdir = rad.Normalize();\r\n\r\n                     IFCAnyHandle position = CreatePositionForFace(exporterIFC, location, zdir, xdir);\r\n\r\n                     surface = IFCInstanceExporter.CreateCylindricalSurface(file, position, radius);\r\n                     bool isRightHanded = IsRightHanded(testPointDerivatives.Origin, zdir, origin, testPointDerivatives.BasisX);\r\n                     ifcSurfaceNormalDir *= isRightHanded ? 1.0 : -1.0;\r\n                  }\r\n                  else if (face is ConicalFace conicalFace)\r\n                  {\r\n                     XYZ origin = conicalFace.Origin;\r\n                     IFCAnyHandle location = GeometryUtil.XYZtoIfcCartesianPoint(exporterIFC, origin, cartesianPoints, GeometryUtil.Dimension.Dim3D);\r\n\r\n                     XYZ zdir = conicalFace.Axis;\r\n                     if (zdir == null)\r\n                        return null;\r\n\r\n                     // Create a finite profile curve for the cone based on the bounding box.\r\n                     BoundingBoxUV coneUV = conicalFace.GetBoundingBox();\r\n                     if (coneUV == null)\r\n                        return null;\r\n\r\n                     XYZ startPoint = conicalFace.Evaluate(new UV(0, coneUV.Min.V));\r\n                     XYZ endPoint = conicalFace.Evaluate(new UV(0, coneUV.Max.V));\r\n\r\n                     Curve profileCurve = Line.CreateBound(startPoint, endPoint);\r\n\r\n                     IFCAnyHandle axis = GeometryUtil.VectorToIfcDirection(exporterIFC, zdir);\r\n\r\n                     IFCAnyHandle axisPosition = IFCInstanceExporter.CreateAxis1Placement(file, location, axis);\r\n\r\n                     IFCAnyHandle sweptCurve = CreateProfileCurveFromCurve(file, exporterIFC, profileCurve, Resources.ConicalFaceProfileCurve, cartesianPoints);\r\n                     if (IFCAnyHandleUtil.IsNullOrHasNoValue(sweptCurve))\r\n                     {\r\n                        return null;\r\n                     }\r\n\r\n                     // The profile position is optional in IFC4+.\r\n                     surface = IFCInstanceExporter.CreateSurfaceOfRevolution(file, sweptCurve, null, axisPosition);\r\n                     bool isRightHanded = IsRightHanded(testPointDerivatives.Origin, zdir, origin, testPointDerivatives.BasisX);\r\n                     ifcSurfaceNormalDir *= isRightHanded ? 1.0 : -1.0;\r\n                  }\r\n                  else if (face is RevolvedFace revFace)\r\n                  {\r\n                     XYZ origin = revFace.Origin;\r\n                     IFCAnyHandle location = GeometryUtil.XYZtoIfcCartesianPoint(exporterIFC, origin, cartesianPoints, GeometryUtil.Dimension.Dim3D);\r\n\r\n                     XYZ zdir = revFace.Axis;\r\n                     if (zdir == null)\r\n                        return null;\r\n\r\n                     // Note that the returned curve is in the coordinate system of the face.\r\n                     Curve curve = revFace.Curve;\r\n                     if (curve == null)\r\n                        return null;\r\n\r\n                     // Create arbitrary plane with z direction as normal.\r\n                     Plane arbitraryPlane = GeometryUtil.CreatePlaneByNormalAtOrigin(zdir);\r\n\r\n                     Transform revitTransform = Transform.Identity;\r\n                     revitTransform.BasisX = arbitraryPlane.XVec;\r\n                     revitTransform.BasisY = arbitraryPlane.YVec;\r\n                     revitTransform.BasisZ = zdir;\r\n                     revitTransform.Origin = origin;\r\n                     Curve profileCurve = curve.CreateTransformed(revitTransform);\r\n\r\n                     IFCAnyHandle axis = GeometryUtil.VectorToIfcDirection(exporterIFC, zdir);\r\n\r\n                     IFCAnyHandle axisPosition = IFCInstanceExporter.CreateAxis1Placement(file, location, axis);\r\n\r\n                     IFCAnyHandle sweptCurve = CreateProfileCurveFromCurve(file, exporterIFC, profileCurve, Resources.RevolvedFaceProfileCurve, cartesianPoints);\r\n                     if (IFCAnyHandleUtil.IsNullOrHasNoValue(sweptCurve))\r\n                     {\r\n                        return null;\r\n                     }\r\n\r\n                     // The profile position is optional in IFC4+.\r\n                     surface = IFCInstanceExporter.CreateSurfaceOfRevolution(file, sweptCurve, null, axisPosition);\r\n                     bool isRightHanded = IsRightHanded(testPointDerivatives.Origin, zdir, origin, testPointDerivatives.BasisX);\r\n                     ifcSurfaceNormalDir *= isRightHanded ? 1.0 : -1.0;\r\n                  }\r\n                  else if (face is RuledFace ruledFace)\r\n                  {\r\n                     // If this face is an extruded ruled face, we will export it as an IfcSurfaceOfLinearExtrusion, else, we will\r\n                     // convert it to NURBS surface and then export it to IFC as IfcBSplineSurface\r\n                     if (ruledFace.IsExtruded)\r\n                     {\r\n                        // To create an IFCSurfaceOfLinearExtrusion, we need to know the profile curve, the extrusion direction\r\n                        // and the depth of the extrusion, (position is optional)\r\n                        // To calculate the extrusion direction and the extrusion depth we first get the start points of the 2 \r\n                        // profile curves. The vector connecting these two points will represent the extrusion direction while\r\n                        // its length will be the extrusion depth\r\n                        Curve firstProfileCurve = ruledFace.get_Curve(0);\r\n                        Curve secondProfileCurve = ruledFace.get_Curve(1);\r\n                        if (firstProfileCurve == null || secondProfileCurve == null)\r\n                        {\r\n                           // If IsExtruded is true then both profile curves have to exist, but if one of them is null then the \r\n                           // input is invalid, reject here\r\n                           return null;\r\n                        }\r\n\r\n                        // For the position of the surface, we set its location to be the start point of the first curve, its \r\n                        // axis to be the extrusion direction and its ref direction to be the 90-degree rotaion of the extrusion\r\n                        // direction\r\n                        IFCAnyHandle location = GeometryUtil.XYZtoIfcCartesianPoint(exporterIFC, firstProfileCurve.GetEndPoint(0), cartesianPoints, GeometryUtil.Dimension.Dim3D);\r\n\r\n                        XYZ xDir = (firstProfileCurve.GetEndPoint(1) - firstProfileCurve.GetEndPoint(0)).Normalize();\r\n                        XYZ v2 = xDir;\r\n                        double paramStart = 1.0;\r\n                        while (xDir.IsAlmostEqualTo(v2))\r\n                        {\r\n                           paramStart /= 2;\r\n                           v2 = (firstProfileCurve.Evaluate(paramStart, true) - firstProfileCurve.GetEndPoint(0)).Normalize();\r\n                        }\r\n                        XYZ zdir = xDir.CrossProduct(v2).Normalize();\r\n\r\n                        IFCAnyHandle sweptCurvePosition = CreatePositionForFace(exporterIFC, location, zdir, xDir);\r\n\r\n                        // Set the base plane of the swept curve transform\r\n                        Transform basePlaneTrf = Transform.Identity;\r\n                        var xDirIFC = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, xDir);\r\n                        var zDirIFC = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, zdir);\r\n                        basePlaneTrf.BasisZ = zDirIFC;\r\n                        basePlaneTrf.BasisX = xDirIFC;\r\n                        basePlaneTrf.BasisY = zDirIFC.CrossProduct(xDirIFC);\r\n\r\n                        IList<double> locationOrds = IFCAnyHandleUtil.GetCoordinates(location);\r\n                        basePlaneTrf.Origin = new XYZ(locationOrds[0], locationOrds[1], locationOrds[2]);\r\n\r\n                        // Transform the dir to follow to the face transform\r\n                        XYZ endsDiff = secondProfileCurve.GetEndPoint(0) - firstProfileCurve.GetEndPoint(0);\r\n\r\n                        double depth = UnitUtil.ScaleLength(endsDiff.GetLength());\r\n\r\n                        XYZ dir = endsDiff.Normalize();\r\n                        if (dir == null || MathUtil.IsAlmostZero(dir.GetLength()))\r\n                        {\r\n                           // The extrusion direction is either null or too small to normalize\r\n                           return null;\r\n                        }\r\n                        XYZ dirIFC = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, dir);\r\n                        dirIFC = basePlaneTrf.Inverse.OfVector(dirIFC);\r\n\r\n                        IFCAnyHandle direction = ExporterUtil.CreateDirection(file, dirIFC, GeometryUtil.Dimension.Dim3D);\r\n                        Curve transformedCurve = firstProfileCurve.CreateTransformed(basePlaneTrf.Inverse);\r\n                        IFCAnyHandle sweptCurve = CreateProfileCurveFromCurve(file, exporterIFC, transformedCurve, Resources.RuledFaceProfileCurve, cartesianPoints);\r\n                        if (IFCAnyHandleUtil.IsNullOrHasNoValue(sweptCurve))\r\n                        {\r\n                           return null;\r\n                        }\r\n\r\n                        surface = IFCInstanceExporter.CreateSurfaceOfLinearExtrusion(file, sweptCurve, sweptCurvePosition, direction, depth);\r\n                     }\r\n                     else\r\n                     {\r\n                        surface = CreateNURBSSurfaceFromFace(exporterIFC, file, face);\r\n                     }\r\n                  }\r\n                  else if (face is HermiteFace)\r\n                  {\r\n                     surface = CreateNURBSSurfaceFromFace(exporterIFC, file, face);\r\n                  }\r\n                  else\r\n                  {\r\n                     return null;\r\n                  }\r\n\r\n                  // If we had trouble creating a surface, stop trying.\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(surface))\r\n                     return null;\r\n\r\n\r\n                  // For Revit surfaces that are converted to IFC spline surfaces or IFC extrusions, CreateNURBSSurfaceFromFace and CreateSurfaceOfLinearExtrusion create a IFC surfaces with the same \r\n                  // parametric orientation as the parametric orientation of the initial Revit surface. Combined with the fact that IFC surfaces always use their parametric orientation, \r\n                  // this implies that the IFC surface oriented normal is equal to the Revit surface's parametric normal, which is what ifcSurfaceNormalDir has been set to for spline surface.                  \r\n                  foreach (HashSet<IFCAnyHandle> faceBound in boundsCollection)\r\n                  {\r\n                     IFCAnyHandle advancedFace = IFCInstanceExporter.CreateAdvancedFace(file, faceBound, surface, sameSenseAF);\r\n                     cfsFaces.Add(advancedFace);\r\n                  }\r\n               }\r\n\r\n               // create advancedBrep\r\n               IFCAnyHandle closedShell = IFCInstanceExporter.CreateClosedShell(file, cfsFaces);\r\n               advancedBrep = IFCInstanceExporter.CreateAdvancedBrep(file, closedShell);\r\n\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(advancedBrep))\r\n                  tr.RollBack();\r\n               else\r\n                  tr.Commit();\r\n\r\n               return advancedBrep;\r\n            }\r\n            catch\r\n            {\r\n               return null;\r\n            }\r\n         }\r\n      }\r\n\r\n      private static IList<GeometryObject> GetGeometriesFromGeometryElement(\r\n         ExporterIFC exporterIFC, Document document,\r\n         GeometryObject geomObject, bool hideInvisible, out bool allNotToBeExported)\r\n      {\r\n         // TODO: Determine why for polygonal face sets hideInvisible is true, but for\r\n         // triangulated face sets, fideInvisible is false.\r\n         IList<Solid> solidGeom = new List<Solid>();\r\n         IList<Mesh> meshGeom = new List<Mesh>();\r\n         bool geometryToSort = false;\r\n\r\n         // If the geomObject is GeometryELement or GeometryInstance, we need to collect their primitive Solid and Mesh first\r\n         allNotToBeExported = false;\r\n         List<GeometryObject> geomObjectPrimitives = new List<GeometryObject>();\r\n         if (geomObject is GeometryElement)\r\n         {\r\n            geomObjectPrimitives.AddRange(GetGeometryObjectListFromGeometryElement(document, exporterIFC, geomObject as GeometryElement, out allNotToBeExported));\r\n         }\r\n         else if (geomObject is GeometryInstance)\r\n         {\r\n            GeometryInstance geomInst = geomObject as GeometryInstance;\r\n            geomObjectPrimitives.AddRange(GetGeometryObjectListFromGeometryElement(document, exporterIFC, geomInst.GetInstanceGeometry(), out allNotToBeExported));\r\n         }\r\n         else if (geomObject is Solid)\r\n         {\r\n            if (hideInvisible)\r\n            {\r\n               solidGeom.Add(geomObject as Solid);\r\n               geometryToSort = true;\r\n            }\r\n            else\r\n            {\r\n               geomObjectPrimitives.Add(geomObject);\r\n            }\r\n         }\r\n         else if (geomObject is Mesh)\r\n         {\r\n            if (hideInvisible)\r\n            {\r\n               meshGeom.Add(geomObject as Mesh);\r\n               geometryToSort = true;\r\n            }\r\n            else\r\n            {\r\n               geomObjectPrimitives.Add(geomObject);\r\n            }\r\n         }\r\n\r\n         if (hideInvisible && geometryToSort)\r\n         {\r\n            IList<GeometryObject> visibleSolids = FamilyExporterUtil.RemoveInvisibleSolidsAndMeshes(document, exporterIFC, ref solidGeom, ref meshGeom);\r\n            if (visibleSolids != null && visibleSolids.Count > 0)\r\n               geomObjectPrimitives.AddRange(visibleSolids);\r\n            else\r\n               allNotToBeExported = true;\r\n         }\r\n\r\n         return geomObjectPrimitives;\r\n      }\r\n\r\n      private static IEnumerable<PlanarFace> GetDataForExportPlanarSolidAsPolygonalFaceSet(Solid solid)\r\n      {\r\n         IEnumerable<PlanarFace> faces = solid.Faces.OfType<PlanarFace>();\r\n         if (faces.Count() != solid.Faces.Size) // Not all faces in the solid were planar\r\n            return null;\r\n\r\n         return faces;\r\n      }\r\n\r\n      private static (IFCAnyHandle, int) ExportPlanarSolidAsPolygonalFaceSet(ExporterIFC exporterIFC,\r\n         IEnumerable<PlanarFace> faces, Transform trfToUse)\r\n      {\r\n         if (faces == null)\r\n         {\r\n            return (null, 0);\r\n         }\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         bool isClosed = true;\r\n\r\n         List<IFCAnyHandle> ifcFaceHandles = new List<IFCAnyHandle>();\r\n         // List of all unique vertex XYZs. Each item in this list is an average of all XYZs obtained from adjacent edge end-points.\r\n         List<XYZ> vertexPositions = new List<XYZ>();\r\n         // Dictionary that relates end-points of each edge to an index pointing to a vertex position in the vertexPositions list\r\n         Dictionary<EdgeEndPoint, int> vertexInfoCache = new Dictionary<EdgeEndPoint, int>(new GeometryUtil.EdgeEndPointComparer());\r\n         // List of loops to export with outer loop index\r\n         List<Tuple<IList<IList<int>>, int>> loopsCache = new List<Tuple<IList<IList<int>>, int>>();\r\n\r\n         try\r\n         {\r\n            foreach (PlanarFace face in faces)\r\n            {\r\n               // Used to determine which loop is the outer one\r\n               double maxArea = 0.0;\r\n               int outerEdgeLoopIndex = 0;\r\n\r\n               // Loops will be collected as lists of 1-based indices that point to vertex positions in the \"vertexPositions\" list\r\n               List<IList<int>> indexedLoops = new List<IList<int>>();\r\n               foreach (EdgeArray loop in face.EdgeLoops)\r\n               {\r\n                  List<int> indexedLoop = new List<int>();\r\n                  foreach (Edge edge in loop)\r\n                  {\r\n                     // This function isn't applicable to breps with non-linear curves\r\n                     if (!(edge.AsCurve() is Line))\r\n                        return (null, 0);\r\n\r\n                     isClosed = isClosed && (edge.GetFace(0) != null && edge.GetFace(1) != null);\r\n\r\n                     int ifcVertexIdx = -1;\r\n\r\n                     // Process the vertex at the topological start of this edge on the current face\r\n                     int endIdx = edge.IsFlippedOnFace(face) ? 1 : 0;\r\n                     EdgeEndPoint endPnt = new EdgeEndPoint(edge, endIdx);\r\n                     if (!vertexInfoCache.TryGetValue(endPnt, out ifcVertexIdx))\r\n                     {\r\n                        IList<EdgeEndPoint> allEndPnts = SolidUtils.FindAllEdgeEndPointsAtVertex(endPnt);\r\n                        if (allEndPnts.Count == 0)\r\n                           return (null, 0);\r\n\r\n                        // Use the average of all positions for the vertex location\r\n                        XYZ vertexPosition = XYZ.Zero;\r\n                        foreach (EdgeEndPoint adjacentEndPnt in allEndPnts)\r\n                           vertexPosition += adjacentEndPnt.Evaluate();\r\n                        vertexPosition /= allEndPnts.Count;\r\n\r\n                        vertexPositions.Add(vertexPosition);\r\n\r\n                        // IFC indices start from 1, so new vertex index is taken as vertices.Count instead of vertices.Count - 1\r\n                        ifcVertexIdx = vertexPositions.Count;\r\n                        foreach (EdgeEndPoint adjacentEndPnt in allEndPnts)\r\n                           vertexInfoCache.Add(adjacentEndPnt, ifcVertexIdx);\r\n                     }\r\n\r\n                     indexedLoop.Add(ifcVertexIdx);\r\n                  }\r\n                  indexedLoops.Add(indexedLoop);\r\n\r\n                  // The loop with the largest area will be considered the outer one.\r\n                  // Typically SplitVolumes should be called before this function, so faces shouldn't have multiple outer loops.\r\n                  if (face.EdgeLoops.Size > 1)\r\n                  {\r\n                     List<XYZ> loopOutline = indexedLoop.Select(x => vertexPositions[x - 1]).ToList();\r\n                     double currArea = Math.Abs(GeometryUtil.ComputePolygonalLoopArea(loopOutline, face.FaceNormal, loopOutline[0]));\r\n                     if (currArea > maxArea)\r\n                     {\r\n                        outerEdgeLoopIndex = indexedLoops.Count - 1;\r\n                        maxArea = currArea;\r\n                     }\r\n                  }\r\n               }\r\n\r\n               if (indexedLoops.Count > 0)\r\n                  loopsCache.Add(new Tuple<IList<IList<int>>, int>(indexedLoops, outerEdgeLoopIndex));\r\n               else\r\n                  return (null, 0);\r\n            }\r\n         }\r\n         catch\r\n         {\r\n            // If anything unexpected handles the caller should move on to export the body as a tessellation\r\n            return (null, 0);\r\n         }\r\n\r\n         // Create faces\r\n         foreach (Tuple<IList<IList<int>>, int> loops in loopsCache)\r\n         {\r\n            if (loops.Item1.Count > 1)\r\n               ifcFaceHandles.Add(IFCInstanceExporter.CreateIndexedPolygonalFaceWithVoids(file, loops.Item1[loops.Item2],\r\n                  loops.Item1.Except(new List<IList<int>>() { loops.Item1[loops.Item2] }).ToList()));\r\n            else if (loops.Item1.Count == 1)\r\n               ifcFaceHandles.Add(IFCInstanceExporter.CreateIndexedPolygonalFace(file, loops.Item1[0]));\r\n         }\r\n\r\n         // Convert vertices to IFC representation\r\n         List<IList<double>> vertexCoords = new List<IList<double>>();\r\n         foreach (XYZ vertex in vertexPositions)\r\n         {\r\n            XYZ vertexScaled = TransformAndScalePoint(exporterIFC, vertex, trfToUse);\r\n            vertexCoords.Add(new List<double>() { vertexScaled.X, vertexScaled.Y, vertexScaled.Z });\r\n         }\r\n\r\n         int numFaces = ifcFaceHandles.Count;\r\n         if (numFaces == 0 || vertexCoords.Count == 0)\r\n            return (null, 0);\r\n\r\n         IFCAnyHandle coordinatesHnd = IFCInstanceExporter.CreateCartesianPointList3D(file, vertexCoords);\r\n         IFCAnyHandle polygonalFaceSet = IFCInstanceExporter.CreatePolygonalFaceSet(file, coordinatesHnd, isClosed, ifcFaceHandles, null);\r\n         return (polygonalFaceSet, numFaces);\r\n      }\r\n\r\n      private static void AddStyleToFaceSet(ExporterIFC exporterIFC, IFCFile file,\r\n         Document document, BodyExporterOptions options, IFCAnyHandle polygonalFaceSet, \r\n         IFCAnyHandle ifcColourRgbList, double opacity, ElementId matId, int numFaces)\r\n      {\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(ifcColourRgbList))\r\n         {\r\n            IList<int> colourIndex = Enumerable.Repeat(1, numFaces).ToList();\r\n            IFCInstanceExporter.CreateIndexedColourMap(file, polygonalFaceSet, opacity, ifcColourRgbList, colourIndex);\r\n         }\r\n         CreateSurfaceStyleForRepItem(exporterIFC, document, options.CreatingVoid, polygonalFaceSet, matId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export Planar Solid geometry as IfcPolygonalFaceSet (IFC4-Add2)\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">the exporterIFC</param>\r\n      /// <param name=\"element\">the element</param>\r\n      /// <param name=\"options\">exporter options</param>\r\n      /// <param name=\"geomObject\">the geometry object of the element</param>\r\n      /// <returns>a handle to the created IFCPolygonalFaceSet</returns>\r\n      public static IList<IFCAnyHandle> ExportBodyAsPolygonalFaceSet(ExporterIFC exporterIFC, Element element, BodyExporterOptions options,\r\n         GeometryObject geomObject, Transform trfToUse = null)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         \r\n         Document document = element.Document;\r\n         List<IFCAnyHandle> polygonalFaceSetList = new List<IFCAnyHandle>();\r\n\r\n         // If the geomObject is GeometryELement or GeometryInstance, we need to collect their primitive Solid and Mesh first\r\n         IList<GeometryObject> geomObjectPrimitives = GetGeometriesFromGeometryElement(\r\n            exporterIFC, document, geomObject, false, out bool allNotToBeExported);\r\n\r\n         // Pre-check that no non-planar solids are too big.\r\n         bool exportAsSurface = false;\r\n         foreach (GeometryObject geom in geomObjectPrimitives)\r\n         {\r\n            Solid solid = geom as Solid;\r\n            if (solid == null)\r\n            {\r\n               continue;\r\n            }\r\n\r\n            if (TooManyFaces(solid, options))\r\n            {\r\n               // We in theory could do this twice, which is a performance hit, but in practice, we\r\n               // don't expect a lot of cases of giant planar data, which will be relatively fast anyway.\r\n               IEnumerable<PlanarFace> planarFaceData = GetDataForExportPlanarSolidAsPolygonalFaceSet(solid);\r\n               if (planarFaceData == null)\r\n               {\r\n                  exportAsSurface = true;\r\n                  break;\r\n               }\r\n            }\r\n         }\r\n\r\n         if (!exportAsSurface)\r\n         {\r\n            // At this point all collected geometry will only contains Solid and/or Mesh\r\n            foreach (GeometryObject geom in geomObjectPrimitives)\r\n            {\r\n               try\r\n               {\r\n                  IList<IFCAnyHandle> polygonalFaceSets = new List<IFCAnyHandle>();\r\n\r\n                  IList<(TriangleMergeUtil, bool)> triangleComponents =\r\n                     new List<(TriangleMergeUtil, bool)>();\r\n                  IEnumerable<PlanarFace> planarFaceData = null;\r\n\r\n                  if (geom is Solid)\r\n                  {\r\n                     Solid solid = geom as Solid;\r\n\r\n                     planarFaceData = GetDataForExportPlanarSolidAsPolygonalFaceSet(solid);\r\n                     if (planarFaceData == null)\r\n                     {\r\n                        TriangulatedSolidOrShell solidFacetation = GetOptimalTessellation(solid, options);\r\n\r\n                        for (int ii = 0; ii < solidFacetation.ShellComponentCount; ++ii)\r\n                        {\r\n                           TriangulatedShellComponent component = solidFacetation.GetShellComponent(ii);\r\n                           triangleComponents.Add((new TriangleMergeUtil(component), component.IsClosed));\r\n                        }\r\n                     }\r\n                  }\r\n                  else if (geom is Mesh)\r\n                  {\r\n                     Mesh mesh = geom as Mesh;\r\n                     triangleComponents.Add((new TriangleMergeUtil(mesh), mesh.IsClosed));\r\n                  }\r\n\r\n                  if (planarFaceData == null && triangleComponents.Count == 0)\r\n                  {\r\n                     continue;\r\n                  }\r\n\r\n                  IFCAnyHandle ifcColourRgbList = GetBestColourAndOpacity(file, element, geom,\r\n                     out double opacity, out ElementId matId);\r\n\r\n                  if (planarFaceData != null)\r\n                  {\r\n                     (IFCAnyHandle polygonalFaceSet, int numFaces) =\r\n                        ExportPlanarSolidAsPolygonalFaceSet(exporterIFC, planarFaceData, trfToUse);\r\n                     if (!IFCAnyHandleUtil.IsNullOrHasNoValue(polygonalFaceSet))\r\n                     {\r\n                        polygonalFaceSets.Add(polygonalFaceSet);\r\n                        AddStyleToFaceSet(exporterIFC, file, document, options, polygonalFaceSet,\r\n                           ifcColourRgbList, opacity, matId, numFaces);\r\n                     }\r\n                  }\r\n\r\n                  foreach ((TriangleMergeUtil triMerge, bool isClosed) in triangleComponents)\r\n                  {\r\n                     IList<IFCAnyHandle> ifcFaces = MergeAndCreateIfcFaces(file, triMerge);\r\n\r\n                     IList<IList<double>> coordList = new List<IList<double>>();\r\n                     foreach (XYZ vertex in triMerge.GetVertices())\r\n                     {\r\n                        XYZ vertexScaled = TransformAndScalePoint(exporterIFC, vertex, trfToUse);\r\n                        coordList.Add(new List<double>() { vertexScaled.X, vertexScaled.Y, vertexScaled.Z });\r\n                     }\r\n\r\n                     IFCAnyHandle coordinatesHnd = IFCInstanceExporter.CreateCartesianPointList3D(file, coordList);\r\n                     IFCAnyHandle polygonalFaceSet = IFCInstanceExporter.CreatePolygonalFaceSet(file, coordinatesHnd, isClosed, ifcFaces, null);\r\n                     if (!IFCAnyHandleUtil.IsNullOrHasNoValue(polygonalFaceSet))\r\n                     {\r\n                        polygonalFaceSets.Add(polygonalFaceSet);\r\n                        AddStyleToFaceSet(exporterIFC, file, document, options, polygonalFaceSet,\r\n                           ifcColourRgbList, opacity, matId, ifcFaces.Count);\r\n                     }\r\n                  }\r\n\r\n                  polygonalFaceSetList.AddRange(polygonalFaceSets);\r\n               }\r\n               catch\r\n               {\r\n                  // Failed! Likely because either the tessellation or coplanar face merge failed.\r\n                  // Try to create from the FaceSet instead.\r\n                  polygonalFaceSetList.Clear();\r\n                  break;\r\n               }\r\n            }\r\n         }\r\n\r\n         if (polygonalFaceSetList.Count == 0 && !allNotToBeExported)\r\n         {\r\n            if (exportAsSurface)\r\n            {\r\n               options.TessellationLevel = BodyExporterOptions.BodyTessellationLevel.Coarse;\r\n            }\r\n\r\n            // It is not from Solid, so we will use the faces to export. It works for Surface export too\r\n            polygonalFaceSetList.AddRange(ExportSurfaceAsTriangulatedFaceSet(exporterIFC, element,\r\n               options, geomObject, trfToUse));\r\n         }\r\n\r\n         return polygonalFaceSetList;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Tesselate the solid decreasing the number of facets if necessary.\r\n      /// </summary>\r\n      /// <param name=\"solid\">The Solid</param>\r\n      /// <param name=\"options\">The body exported options.</param>\r\n      /// <returns>Solid tessellation</returns>\r\n      private static TriangulatedSolidOrShell GetOptimalTessellation(Solid solid, BodyExporterOptions options)\r\n      {\r\n         TriangulatedSolidOrShell solidFacetation = SolidUtils.TessellateSolidOrShell(solid, options.TessellationControls);\r\n\r\n         SolidOrShellTessellationControls coarseTessellationControls = ExporterUtil.CopyTessellationControls(options.TessellationControls);\r\n         BodyExporterOptions.SetDefaultCoarseTessellationControls(coarseTessellationControls);\r\n\r\n         if (AreTessellationControlsEqual(coarseTessellationControls, options.TessellationControls))\r\n         {\r\n            // The tessellation controls are already at the coarsest level.\r\n            return solidFacetation;\r\n         }\r\n\r\n         bool useCoarseTessellation = false;\r\n         int totalNumberOfFacets = 0;\r\n         for (int ii = 0; ii < solidFacetation.ShellComponentCount; ii++)\r\n         {\r\n            TriangulatedShellComponent component = solidFacetation.GetShellComponent(ii);\r\n            int numFacets = component.TriangleCount;\r\n            totalNumberOfFacets += numFacets;\r\n            if (TooManyFacets(numFacets, totalNumberOfFacets, options))\r\n            {\r\n               useCoarseTessellation = true;\r\n               break;\r\n            }\r\n         }\r\n\r\n         if (useCoarseTessellation)\r\n         {\r\n            solidFacetation = SolidUtils.TessellateSolidOrShell(solid, coarseTessellationControls);\r\n         }\r\n\r\n         return solidFacetation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collect Solid and/or Mesh from GeometryElement\r\n      /// </summary>\r\n      /// <param name=\"geomElement\">the GeometryElement</param>\r\n      /// <returns>list of Solid and/or Mesh</returns>\r\n      private static List<GeometryObject> GetGeometryObjectListFromGeometryElement(Document doc, ExporterIFC exporterIFC, GeometryElement geomElement, out bool allNotToBeExported)\r\n      {\r\n         List<GeometryObject> geomObjectPrimitives = new List<GeometryObject>();\r\n         SolidMeshGeometryInfo solidMeshCapsule = GeometryUtil.GetSplitSolidMeshGeometry(geomElement);\r\n         int initialSolidMeshCount = solidMeshCapsule.GetSolids().Count + solidMeshCapsule.GetMeshes().Count;\r\n         IList<Solid> solids = solidMeshCapsule.GetSolids();\r\n         IList<Mesh> meshes = solidMeshCapsule.GetMeshes();\r\n         geomObjectPrimitives = FamilyExporterUtil.RemoveInvisibleSolidsAndMeshes(doc, exporterIFC, ref solids, ref meshes);\r\n         allNotToBeExported = initialSolidMeshCount > 0 && geomObjectPrimitives.Count == 0;\r\n\r\n         return geomObjectPrimitives;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Merges faces in TriangleMergeUtil and exports them as a list of IFC faces\r\n      /// </summary>\r\n      /// <param name=\"file\">the File</param>\r\n      /// <param name=\"triMerge\">TriangleMergeUtil instance with initialized geometry</param>\r\n      /// <returns>List of IFC face handles</returns>\r\n      private static IList<IFCAnyHandle> MergeAndCreateIfcFaces(IFCFile file, TriangleMergeUtil triMerge)\r\n      {\r\n         // TODO: Look at performance implications of large facetations.\r\n         IList<IFCAnyHandle> faces = new List<IFCAnyHandle>();\r\n\r\n         const bool tryToMerge = true;\r\n         if (!triMerge.SimplifyAndMergeFaces(tryToMerge))\r\n         {\r\n            triMerge.Reset();\r\n            triMerge.SimplifyAndMergeFaces(!tryToMerge);\r\n         }\r\n\r\n\r\n         for (int jj = 0; jj < triMerge.NoOfFaces; ++jj)\r\n         {\r\n            IFCAnyHandle faceHandle = null;\r\n            IList<IList<int>> innerBoundariesOfFace = triMerge.IndexInnerBoundariesOfFaceAt(jj);\r\n            bool faceWithHole = (innerBoundariesOfFace?.Count ?? 0) > 0;\r\n\r\n            IList<int> outerBound = triMerge.IndexOuterboundOfFaceAt(jj).Select(x => x + 1).ToList();\r\n            if (!faceWithHole)\r\n            {\r\n               faceHandle = IFCInstanceExporter.CreateIndexedPolygonalFace(file, outerBound);\r\n            }\r\n            else\r\n            {\r\n               IList<IList<int>> innerBounds = new List<IList<int>>();\r\n               foreach (IList<int> inner in innerBoundariesOfFace)\r\n                  innerBounds.Add(inner.Select(x => x + 1).ToList());\r\n\r\n               faceHandle = IFCInstanceExporter.CreateIndexedPolygonalFaceWithVoids(file, outerBound, innerBounds);\r\n            }\r\n\r\n            faces.Add(faceHandle);\r\n         }\r\n\r\n         return faces;\r\n      }\r\n\r\n      private static bool TooManyFaces(Solid solid, BodyExporterOptions options)\r\n      {\r\n         // We are going to limit the number of faces to 1250 for Coarse tessellation, and 2500 otherwise.  \r\n         // These are arbitrary numbers that should prevent the solid faceter from creating too many extra triangles to sew the surfaces.\r\n         // We may evaluate these numbers over time.\r\n         return (solid?.Faces?.Size ?? 0) >=\r\n            ((options.TessellationLevel == BodyExporterOptions.BodyTessellationLevel.Coarse) ? 1250 : 2500);\r\n      }\r\n\r\n      private static bool TooManyFacets(int numFacets, BodyExporterOptions options)\r\n      {\r\n         bool isCoarse = options.TessellationLevel == BodyExporterOptions.BodyTessellationLevel.Coarse;\r\n\r\n         // We are going to limit the number of triangles to 10000 for Coarse tessellation, and 20000 otherwise.  \r\n         // These are arbitrary numbers that should prevent the solid faceter from creating too many extra triangles to sew the surfaces.\r\n         // We may evaluate these numbers over time.\r\n         return numFacets >= (isCoarse ? 10000 : 20000);\r\n      }\r\n\r\n      private static bool TooManyFacets(int numFacets, int numTotalFacets, BodyExporterOptions options)\r\n      {\r\n         bool isCoarse = options.TessellationLevel == BodyExporterOptions.BodyTessellationLevel.Coarse;\r\n\r\n         // We are going to limit the total number of triangles to 25000 for Coarse tessellation, and 50000 otherwise.  \r\n         // We may evaluate these numbers over time.\r\n         if (numTotalFacets >= (isCoarse ? 25000 : 50000))\r\n            return true;\r\n\r\n         return TooManyFacets(numFacets, options);\r\n      }\r\n\r\n      private static (IList<IList<double>>, IList<IList<int>>) GetMeshCoordinateInfo(\r\n         ExporterIFC exporterIFC, Mesh mesh, Transform lcs, BodyExporterOptions options)\r\n      {\r\n         // Note that this function has two possible return values:\r\n         // (coordList, coordIdx) == (empty, empty): Unhandled or empty mesh.\r\n         // Anything else: valid data.\r\n         List<IList<double>> coordList = [];\r\n         List<IList<int>> coordIdx = [];\r\n\r\n         int numberOfTriangles = mesh.NumTriangles;\r\n         int numberOfVertices = mesh.Vertices.Count;\r\n\r\n         // We are going to limit the number of triangles to prevent the solid faceter from creating too many extra triangles to sew the surfaces.\r\n         if (numberOfTriangles == 0 || numberOfVertices == 0 || TooManyFacets(numberOfTriangles, options))\r\n         {\r\n            return (coordList, coordIdx);\r\n         }\r\n\r\n         // create list of vertices first.\r\n         foreach (XYZ vertex in mesh.Vertices)\r\n         {\r\n            XYZ vertexScaled = TransformAndScalePoint(exporterIFC, vertex, lcs);\r\n            coordList.Add(new List<double>(3) { vertexScaled.X, vertexScaled.Y, vertexScaled.Z });\r\n         }\r\n         // Create the entity IfcCartesianPointList3D from the List of List<double> and assign it to attribute Coordinates of IfcTriangulatedFaceSet\r\n\r\n         // Export all of the triangles\r\n         for (int ii = 0; ii < numberOfTriangles; ii++)\r\n         {\r\n            MeshTriangle triangle = mesh.get_Triangle(ii);\r\n            // IFC uses index that starts with 1 instead of 0 (following similar standard in X3D)\r\n            coordIdx.Add(new List<int>(3)\r\n                     {\r\n                        (int)triangle.get_Index(0) + 1,\r\n                        (int)triangle.get_Index(1) + 1,\r\n                        (int)triangle.get_Index(2) + 1\r\n                     });\r\n         }\r\n\r\n         return (coordList, coordIdx);\r\n      }\r\n\r\n      private static (IList<IList<double>>, IList<IList<int>>) GetSolidCoordinateInfo(\r\n         ExporterIFC exporterIFC, Solid solid, Transform lcs, BodyExporterOptions options)\r\n      {\r\n         // Note that this function has three possible return values:\r\n         // (coordList, coordIdx) == (null, null): Exception thrown because of invalid data.\r\n         // (coordList, coordIdx) == (empty, empty): Unhandled or empty geometry.\r\n         // Anything else: valid data.\r\n         List<IList<double>> coordList = [];\r\n         List<IList<int>> coordIdx = [];\r\n\r\n         try\r\n         {\r\n            SolidOrShellTessellationControls tessellationControls = options.TessellationControls;\r\n            TriangulatedSolidOrShell solidFacetation =\r\n                SolidUtils.TessellateSolidOrShell(solid, tessellationControls);\r\n\r\n            // Only handle one solid or shell.\r\n            if (solidFacetation.ShellComponentCount != 1)\r\n            {\r\n               return (coordList, coordIdx);\r\n            }\r\n\r\n            TriangulatedShellComponent component = solidFacetation.GetShellComponent(0);\r\n            int numberOfTriangles = component.TriangleCount;\r\n            int numberOfVertices = component.VertexCount;\r\n\r\n            // We are going to limit the number of triangles to prevent the solid faceter from creating too many extra triangles to sew the surfaces.\r\n            if (numberOfTriangles == 0 || numberOfVertices == 0 || TooManyFacets(numberOfTriangles, options))\r\n            {\r\n               return (coordList, coordIdx);\r\n            }\r\n\r\n            // create list of vertices first.\r\n            for (int ii = 0; ii < numberOfVertices; ii++)\r\n            {\r\n               XYZ vertex = component.GetVertex(ii);\r\n               XYZ vertexScaled = TransformAndScalePoint(exporterIFC, vertex, lcs);\r\n               coordList.Add(new List<double>(3) { vertexScaled.X, vertexScaled.Y, vertexScaled.Z });\r\n            }\r\n            // Create the entity IfcCartesianPointList3D from the List of List<double> and assign it to attribute Coordinates of IfcTriangulatedFaceSet\r\n\r\n            // Export all of the triangles\r\n            for (int ii = 0; ii < numberOfTriangles; ii++)\r\n            {\r\n               TriangleInShellComponent triangle = component.GetTriangle(ii);\r\n               // IFC uses index that starts with 1 instead of 0 (following similar standard in X3D)\r\n               coordIdx.Add(new List<int>(3) { triangle.VertexIndex0 + 1, triangle.VertexIndex1 + 1, triangle.VertexIndex2 + 1 });\r\n            }\r\n         }\r\n         catch\r\n         {\r\n            return (null, null);\r\n         }\r\n\r\n         return (coordList, coordIdx);\r\n      }\r\n\r\n      private static (IList<IList<double>>, IList<IList<int>>) GetGeometryCoordinateInfo(\r\n         ExporterIFC exporterIFC, GeometryObject geom, Transform lcs, BodyExporterOptions options)\r\n      {\r\n         if (geom is Solid)\r\n         {\r\n            return GetSolidCoordinateInfo(exporterIFC, geom as Solid, lcs, options);\r\n         }\r\n         else if (geom is Mesh)\r\n         {\r\n            return GetMeshCoordinateInfo(exporterIFC, geom as Mesh, lcs, options);\r\n         }\r\n\r\n         // Return an empty list, to signify no error, just ignored.  Really shouldn't get here.\r\n         return (new List<IList<double>>(), new List<IList<int>>());\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export Geometry in IFC4 Triangulated tessellation\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">the exporter</param>\r\n      /// <param name=\"element\">the element</param>\r\n      /// <param name=\"options\">the options</param>\r\n      /// <param name=\"geomObject\">geometry objects</param>\r\n      /// <returns>returns a handle</returns>\r\n      public static IList<IFCAnyHandle> ExportBodyAsTriangulatedFaceSet(ExporterIFC exporterIFC,\r\n         Element element, BodyExporterOptions options, GeometryObject geomObject, Transform lcs = null)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         Document document = element.Document;\r\n\r\n         List<IFCAnyHandle> triangulatedBodyList = new List<IFCAnyHandle>();\r\n\r\n         List<int> colourIndex = new List<int>();\r\n\r\n         // We need to collect all Solids and Meshes from the GeometryObject if it is of types GeometryElement or GeometryInstance\r\n         // If the geomObject is GeometryELement or GeometryInstance, we need to collect their primitive Solid and Mesh first\r\n         IList<GeometryObject> geomObjectPrimitives = GetGeometriesFromGeometryElement(\r\n            exporterIFC, document, geomObject, true, out bool allNotToBeExported);\r\n\r\n         // At this point the collection will only contains Solids and/or Meshes.\r\n         // Loop through each of them.\r\n         // Note that we will collect all of the coordList and coordIdx first since if any fail,\r\n         // we will fall back to ExportSurfaceAsTriangulatedFaceSet.\r\n\r\n         List<(GeometryObject, IList<IList<double>>, IList<IList<int>>)> coordListsAndIndices = [];\r\n         foreach (GeometryObject geom in geomObjectPrimitives)\r\n         {\r\n            (IList<IList<double>> coordList, IList<IList<int>> coordIdx) =\r\n               GetGeometryCoordinateInfo(exporterIFC, geom, lcs, options);\r\n\r\n            // Failed; go to fallback.\r\n            if (coordList == null || coordIdx == null)\r\n            {\r\n               coordListsAndIndices.Clear();\r\n               break;\r\n            }\r\n\r\n            if (coordList.Count > 0 && coordIdx.Count > 0)\r\n            {\r\n               coordListsAndIndices.Add((geom, coordList, coordIdx));\r\n            }\r\n         }\r\n\r\n         foreach ((GeometryObject geom, IList<IList<double>> coordList, IList<IList<int>> coordIdx) in coordListsAndIndices)\r\n         {\r\n            IFCAnyHandle coordPointLists = IFCAnyHandleUtil.CreateInstance(file, IFCEntityType.IfcCartesianPointList3D);\r\n            IFCAnyHandleUtil.SetAttribute(coordPointLists, \"CoordList\", coordList, 1, null, 3, 3);\r\n\r\n            IFCAnyHandle triangulatedBody = IFCAnyHandleUtil.CreateInstance(file, IFCEntityType.IfcTriangulatedFaceSet);\r\n            IFCAnyHandleUtil.SetAttribute(triangulatedBody, \"Coordinates\", coordPointLists);\r\n            IFCAnyHandleUtil.SetAttribute(triangulatedBody, \"CoordIndex\", coordIdx, 1, null, 3, 3);\r\n\r\n            triangulatedBodyList.Add(triangulatedBody);\r\n\r\n            IFCAnyHandle ifcColourRgbList = GetBestColourAndOpacity(file, element,\r\n               geom, out double opacity, out ElementId matId);\r\n\r\n            // Currently each face will refer to just a single color in ColourRgbList\r\n            colourIndex.AddRange(Enumerable.Repeat(1, coordIdx.Count));\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(ifcColourRgbList) &&\r\n               !IFCAnyHandleUtil.IsNullOrHasNoValue(triangulatedBody))\r\n            {\r\n               IFCInstanceExporter.CreateIndexedColourMap(file, triangulatedBody, opacity, ifcColourRgbList, colourIndex);\r\n            }\r\n\r\n            if (matId != ElementId.InvalidElementId)\r\n            {\r\n               CreateSurfaceStyleForRepItem(exporterIFC, document, options.CreatingVoid,\r\n                  triangulatedBody, matId);\r\n            }\r\n         }\r\n\r\n         if (triangulatedBodyList.Count == 0 && !allNotToBeExported)\r\n         {\r\n            triangulatedBodyList.AddRange(ExportSurfaceAsTriangulatedFaceSet(exporterIFC, element,\r\n               options, geomObject, lcs));\r\n         }\r\n         \r\n         return triangulatedBodyList;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export Geometry in IFC4 tessellation. Internally will decide to try to export as an IfcPolygonalFaceSet only when the Solid is all plannar\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">the exporter</param>\r\n      /// <param name=\"element\">the element</param>\r\n      /// <param name=\"options\">the options</param>\r\n      /// <param name=\"geomObject\">geometry objects</param>\r\n      /// <returns>returns a handle</returns>\r\n      public static IList<IFCAnyHandle> ExportBodyAsTessellatedFaceSet(ExporterIFC exporterIFC, Element element, BodyExporterOptions options,\r\n         GeometryObject geomObject, Transform lcs = null)\r\n      {\r\n         IList<IFCAnyHandle> tessellatedBodyList = null;\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 && !ExporterCacheManager.ExportOptionsCache.UseOnlyTriangulation)\r\n         {\r\n            tessellatedBodyList = ExportBodyAsPolygonalFaceSet(exporterIFC, element, options, geomObject, lcs);\r\n         }\r\n         else\r\n         {\r\n            tessellatedBodyList = ExportBodyAsTriangulatedFaceSet(exporterIFC, element, options, geomObject, lcs);\r\n         }\r\n\r\n         return tessellatedBodyList;\r\n      }\r\n\r\n      private static (Color, double, ElementId) GetBestColourAndOpacity(Element element,\r\n         GeometryObject geometryObject)\r\n      {\r\n         ElementId bestMaterialId = GetBestMaterialIdFromGeometryOrParameter(geometryObject, element);\r\n\r\n         Color exportColor = null;\r\n         Material matElem = (bestMaterialId != null && bestMaterialId != ElementId.InvalidElementId) ?\r\n            element.Document.GetElement(bestMaterialId) as Material : null;\r\n         if (matElem == null)\r\n         {\r\n            // If the material for the element is null, don't guess a color; null is OK.\r\n            matElem = CategoryUtil.GetSafeCategory(element)?.Material;\r\n            exportColor = matElem?.Color;\r\n         }\r\n         else\r\n         {\r\n            exportColor = CategoryUtil.GetSafeColor(matElem.Color);\r\n         }\r\n\r\n         double opacity = (double)(100 - (matElem?.Transparency ?? 0)) / 100;\r\n\r\n         // For now we will only support a single color for the tessellation since there is no \r\n         // good way to associate the face and the color.\r\n         return (exportColor, opacity, bestMaterialId);\r\n      }\r\n\r\n      private static IFCAnyHandle GetBestColourAndOpacity(IFCFile file, Element element, \r\n         GeometryObject geometryObject, out double opacity, out ElementId bestMaterialId)\r\n      {\r\n         Color exportColor;\r\n         (exportColor, opacity, bestMaterialId) = GetBestColourAndOpacity(element, geometryObject);\r\n\r\n         return (exportColor == null) ? null : ColourRgbListFromColor(file, exportColor);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return a list of triangulated face sets from the geometry.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporterIFC class.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"options\">The body exporter options.</param>\r\n      /// <param name=\"geomObject\">The geometry object.</param>\r\n      /// <returns>Returns a list of handles.</returns>\r\n      private static IList<IFCAnyHandle> ExportSurfaceAsTriangulatedFaceSet(\r\n         ExporterIFC exporterIFC, Element element, BodyExporterOptions options,\r\n         GeometryObject geomObject, Transform trfToUse = null)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IList<IFCAnyHandle> listOfIndexedTriangles = new List<IFCAnyHandle>();\r\n\r\n         List<(List<List<XYZ>>, Color, double, ElementId)> triangleLists = \r\n            new List<(List<List<XYZ>>, Color, double, ElementId)>();\r\n\r\n         if (geomObject is GeometryElement)\r\n         {\r\n            // There is also a possibility that the geomObject is an GeometryElement thaat is a\r\n            // collection of GeometryObjects. Go through the collection and get the Meshes, Solids,\r\n            // and Faces.  We will skip everything else.\r\n\r\n            // NOTE: We might have some \"duplicate\" colors in the list below.  For now, we will\r\n            // allow that, since it is really a very minor optimization to compact the colors.\r\n            foreach (GeometryObject geom in (geomObject as GeometryElement))\r\n            {\r\n               if (geom is Solid)\r\n               {\r\n                  triangleLists.AddRange(GetTriangleListsFromSolid(exporterIFC, element, geom, options, trfToUse));\r\n               }\r\n               else if (geom is Mesh)\r\n               {\r\n                  triangleLists.Add(GetTriangleListFromMesh(exporterIFC, element, geom, trfToUse, null));\r\n               }\r\n               else if (geom is Face)\r\n               {\r\n                  Mesh faceMesh = (geom as Face).Triangulate();\r\n                  triangleLists.Add(GetTriangleListFromMesh(exporterIFC, element, faceMesh, trfToUse, geom));\r\n               }\r\n               else\r\n               {\r\n                  continue;\r\n               }\r\n            }\r\n         }\r\n         else\r\n         {\r\n            if (geomObject is Solid)\r\n            {\r\n               triangleLists.AddRange(GetTriangleListsFromSolid(exporterIFC, element, geomObject, options, trfToUse));\r\n            }\r\n            else if (geomObject is Mesh)\r\n            {\r\n               triangleLists.Add(GetTriangleListFromMesh(exporterIFC, element, geomObject, trfToUse, null));\r\n            }\r\n            else\r\n            {\r\n               return listOfIndexedTriangles;\r\n            }\r\n         }\r\n\r\n         Document document = element?.Document;\r\n         foreach ((List<List<XYZ>> triangleList, Color color, double opacity, \r\n            ElementId matId) in triangleLists)\r\n         {\r\n            if (triangleList.Count == 0)\r\n            {\r\n               continue;\r\n            }\r\n\r\n            IFCAnyHandle indexedTriangles = GeometryUtil.GetIndexedTriangles(file, triangleList);\r\n\r\n            IFCAnyHandle ifcColourRgbList = ColourRgbListFromColor(file, color);\r\n\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(indexedTriangles))\r\n            {\r\n               List<int> colourIndex = Enumerable.Repeat(1, triangleList.Count).ToList();\r\n\r\n               listOfIndexedTriangles.Add(indexedTriangles);\r\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(ifcColourRgbList))\r\n               {\r\n                  IFCInstanceExporter.CreateIndexedColourMap(file, indexedTriangles, opacity, ifcColourRgbList, colourIndex);\r\n               }\r\n\r\n               if (matId != ElementId.InvalidElementId)\r\n               {\r\n                  CreateSurfaceStyleForRepItem(exporterIFC, document, options.CreatingVoid,\r\n                     indexedTriangles, matId);\r\n               }\r\n            }\r\n         }\r\n\r\n         return listOfIndexedTriangles;\r\n      }\r\n\r\n      private static bool AreTessellationControlsEqual(SolidOrShellTessellationControls first, SolidOrShellTessellationControls second)\r\n      {\r\n         if (first.UseLevelOfDetail() != second.UseLevelOfDetail())\r\n            return false;\r\n\r\n         if (first.UseLevelOfDetail() && !MathUtil.IsAlmostEqual(first.LevelOfDetail, second.LevelOfDetail))\r\n            return false;\r\n\r\n         if (!MathUtil.IsAlmostEqual(first.Accuracy, second.Accuracy))\r\n            return false;\r\n\r\n         if (!MathUtil.IsAlmostEqual(first.MinAngleInTriangle, second.MinAngleInTriangle))\r\n            return false;\r\n\r\n         if (!MathUtil.IsAlmostEqual(first.MinExternalAngleBetweenTriangles, second.MinExternalAngleBetweenTriangles))\r\n            return false;\r\n\r\n         return true;\r\n      }\r\n\r\n      private static (bool exported, bool forceCoarse) ExportBodyAsSolid(ExporterIFC exporterIFC, Element element, \r\n         BodyExporterOptions options, IList<FaceSetInfo> currentFaceHashSetList, Solid solid, Transform lcs,\r\n         ref int numTotalFacets)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         Document document = element.Document;\r\n\r\n         SolidOrShellTessellationControls tessellationControlsOriginal = options.TessellationControls;\r\n         SolidOrShellTessellationControls tessellationControls = ExporterUtil.GetTessellationControl(element, tessellationControlsOriginal);\r\n\r\n         TriangulatedSolidOrShell solidFacetation = null;\r\n         TriangulatedShellComponent component = null;\r\n         int numberOfTriangles = 0;\r\n         int numberOfVertices = 0;\r\n\r\n         // We will make (up to) 3 attempts.  \r\n         // 1. First we will use tessellationControls.\r\n         // 2. Try tessellationControlsOriginal, but only if they are different.\r\n         // 3. Try a coarse tessellation, but only if the original wasn't coarse.\r\n         bool useSolidTessellation = false;\r\n         bool forceCoarse = false;\r\n\r\n         const int finalPass = 2;\r\n         for (int pass = 0; pass <= finalPass; pass++)\r\n         {\r\n            SolidOrShellTessellationControls tessellationControlsToUse = null;\r\n\r\n            switch (pass)\r\n            {\r\n               case 0:\r\n                  tessellationControlsToUse = tessellationControls;\r\n                  break;\r\n               case 1:\r\n                  if (!AreTessellationControlsEqual(tessellationControls, tessellationControlsOriginal))\r\n                     tessellationControlsToUse = tessellationControlsOriginal;\r\n                  break;\r\n               case 2:\r\n                  SolidOrShellTessellationControls coarseTessellationControls =\r\n                     ExporterUtil.CopyTessellationControls(tessellationControlsOriginal);\r\n                  BodyExporterOptions.SetDefaultCoarseTessellationControls(coarseTessellationControls);\r\n                  if (!AreTessellationControlsEqual(coarseTessellationControls, tessellationControlsOriginal))\r\n                     tessellationControlsToUse = coarseTessellationControls;\r\n                  break;\r\n            }\r\n\r\n            if (tessellationControlsToUse == null)\r\n               continue;\r\n\r\n            try\r\n            {\r\n               solidFacetation = SolidUtils.TessellateSolidOrShell(solid, tessellationControlsToUse);\r\n               // Only handle one solid or shell.\r\n               if (solidFacetation == null || solidFacetation.ShellComponentCount != 1)\r\n                  return (false, false);\r\n\r\n               component = solidFacetation.GetShellComponent(0);\r\n               numberOfTriangles = component.TriangleCount;\r\n               numberOfVertices = component.VertexCount;\r\n\r\n               if (numberOfTriangles > 0 && numberOfVertices > 0)\r\n               {\r\n                  numTotalFacets += numberOfTriangles;\r\n                  if (!TooManyFacets(numberOfTriangles, numTotalFacets, options))\r\n                  {\r\n                     useSolidTessellation = true;\r\n                     break;\r\n                  }\r\n                  else\r\n                  {\r\n                     forceCoarse = true;\r\n                  }\r\n               }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n               string errMsg = String.Format(\"Pass {0}: TessellateSolidOrShell failed in IFC export for reason: \\\"{1}\\\" in element \\\"{2}\\\" with id {3}\", pass, ex.Message, element.Name, element.Id);\r\n               document.Application.WriteJournalComment(errMsg, false/*timestamp*/);\r\n\r\n               // If the facetation failed, but we can try again, lets do so.\r\n               if (pass == finalPass)\r\n               {\r\n                  return (false, false);\r\n               }\r\n               continue;\r\n            }\r\n         }\r\n\r\n         // We are going to limit the number of triangles to prevent the solid faceter from creating \r\n         // too many extra triangles to sew the surfaces.\r\n         if (!useSolidTessellation)\r\n            return (false, forceCoarse);\r\n\r\n         IList<IFCAnyHandle> vertexHandles = new List<IFCAnyHandle>();\r\n         HashSet<IFCAnyHandle> currentFaceSet = new HashSet<IFCAnyHandle>();\r\n         bool canExportAsClosedShell = true;\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView || ExporterCacheManager.ExportOptionsCache.ExportAs4General)\r\n         {\r\n            List<List<double>> coordList = new List<List<double>>();\r\n\r\n            // create list of vertices first.\r\n            for (int ii = 0; ii < numberOfVertices; ii++)\r\n            {\r\n               XYZ vertex = component.GetVertex(ii);\r\n               XYZ vertexScaled = TransformAndScalePoint(exporterIFC, vertex, lcs);\r\n               coordList.Add(new List<double>(3) { vertexScaled.X, vertexScaled.Y, vertexScaled.Z });\r\n            }\r\n         }\r\n         else\r\n         {\r\n            IFCXYZFuzzyComparer ifcXYZFuzzyComparer = new IFCXYZFuzzyComparer(ExporterCacheManager.LengthPrecision);\r\n\r\n            SortedDictionary<XYZ, IFCAnyHandle> createdVertices = new SortedDictionary<XYZ, IFCAnyHandle>(ifcXYZFuzzyComparer);\r\n\r\n            // create list of vertices first.\r\n            // Note that because we combine duplicate points, it is possible that a facet will have duplicate points.\r\n            // We will need to remove those later.\r\n            for (int ii = 0; ii < numberOfVertices; ii++)\r\n            {\r\n               IFCAnyHandle vertexHandle;\r\n               XYZ vertex = component.GetVertex(ii);\r\n               if (!createdVertices.TryGetValue(vertex, out vertexHandle))\r\n               {\r\n                  XYZ vertexScaled = TransformAndScalePoint(exporterIFC, vertex, lcs);\r\n                  vertexHandle = ExporterUtil.CreateCartesianPoint(file, vertexScaled);\r\n                  createdVertices[vertex] = vertexHandle;\r\n               }\r\n               vertexHandles.Add(vertexHandle);\r\n            }\r\n\r\n            if (!ExportPlanarFacetsIfPossible(file, component, vertexHandles, currentFaceSet, out canExportAsClosedShell))\r\n            {\r\n               HashSet<IList<IList<int>>> faceSetIndices = new();\r\n               // Export all of the triangles instead.\r\n               for (int ii = 0; ii < numberOfTriangles; ii++)\r\n               {\r\n                  TriangleInShellComponent triangle = component.GetTriangle(ii);\r\n\r\n                  IFCAnyHandle vertex0 = vertexHandles[triangle.VertexIndex0];\r\n                  IFCAnyHandle vertex1 = vertexHandles[triangle.VertexIndex1];\r\n                  IFCAnyHandle vertex2 = vertexHandles[triangle.VertexIndex2];\r\n\r\n                  List<IFCAnyHandle> vertices = new(3) { vertex0, vertex1, vertex2 };\r\n\r\n                  IFCAnyHandle face = CreateFaceFromVertexList(file, vertices);\r\n                  currentFaceSet.AddIfNotNull(face);\r\n\r\n                  List<IList<int>> planarFaceIndices = new();\r\n                  List<int> edgeLoopIndices = new(3) { vertex0.Id, vertex1.Id, vertex2.Id };\r\n\r\n                  planarFaceIndices.Add(edgeLoopIndices);\r\n                  faceSetIndices.Add(planarFaceIndices);\r\n               }\r\n\r\n               // Typically Solids in Revit are fully enclosed volumes,\r\n               // but a shell or partially bounded volume can also be encountered\r\n               canExportAsClosedShell = CanCreateClosedShell(faceSetIndices);\r\n            }\r\n         }\r\n\r\n         currentFaceHashSetList.Add(new FaceSetInfo(currentFaceSet, canExportAsClosedShell));\r\n\r\n         // Call GC.KeepAlive(solidFacetation) at this point to maintain a reference to solidFacetation\r\n         // and prevent the object deletion by the garbage collector after try-catch block.\r\n         GC.KeepAlive(solidFacetation);\r\n\r\n         return (true, forceCoarse);\r\n      }\r\n\r\n\r\n      private static BodyData ExportBodyAsBRep(ExporterIFC exporterIFC, IList<GeometryObject> splitGeometryList,\r\n          IList<KeyValuePair<int, SimpleSweptSolidAnalyzer>> exportAsBRep, IList<IFCAnyHandle> bodyItems,\r\n          Element element, ElementId categoryId, ElementId overrideMaterialId, IFCAnyHandle contextOfItems, double eps,\r\n          BodyExporterOptions originalOptions, BodyData bodyDataIn, bool instanceGeometry = true)\r\n      {\r\n         bool exportAsBReps = true;\r\n         bool hasTriangulatedGeometry = false;\r\n         bool hasAdvancedBrepGeometry = false;\r\n         IFCFile file = exporterIFC.GetFile();\r\n         Document document = element.Document;\r\n\r\n         // Can't resetMaterials if we already have partially populated our body items with extrusions (canExportSolidModelRep)\r\n         int numExtrusions = bodyItems.Count;\r\n         bool resetMaterials = numExtrusions == 0;\r\n         List<FaceSetInfo> currentFaceHashSetList = [];\r\n         List<int> startIndexForObject = [];\r\n\r\n         BodyData bodyData = BodyData.Create(bodyDataIn, resetMaterials);\r\n\r\n         IList<ElementId> materialIds = new List<ElementId>();\r\n\r\n         // We copy the options because we may force a change to coarse.\r\n         BodyExporterOptions options = originalOptions;\r\n         bool isCoarse = options.TessellationLevel == BodyExporterOptions.BodyTessellationLevel.Coarse;\r\n\r\n         int numBRepsToExport = exportAsBRep.Count;\r\n         bool selectiveBRepExport = (numBRepsToExport > 0);\r\n         int numGeoms = selectiveBRepExport ? numBRepsToExport : splitGeometryList.Count;\r\n         int numTotalFacets = 0;\r\n\r\n         bool elementIsSpatial = element is SpatialElement;\r\n         bool canExportAsAdvancedGeometry = ExporterCacheManager.ExportOptionsCache.ExportAs4DesignTransferView || ExporterCacheManager.ExportOptionsCache.ExportAs4x3DesignTransferView;\r\n         bool canExportAsTessellatedFaceSet = (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView || ExporterCacheManager.ExportOptionsCache.ExportAs4General) && !elementIsSpatial;\r\n\r\n         bool creatingVoid = originalOptions.CreatingVoid;\r\n\r\n         // We will cycle through all of the geometries one at a time, doing the best export we can for each.\r\n         for (int index = 0; index < numGeoms; index++)\r\n         {\r\n            int brepIndex = selectiveBRepExport ? exportAsBRep[index].Key : index;\r\n            SimpleSweptSolidAnalyzer currAnalyzer = selectiveBRepExport ? exportAsBRep[index].Value : null;\r\n\r\n            GeometryObject geomObject = splitGeometryList[brepIndex];\r\n\r\n            // A simple test to see if the geometry is a valid solid.  This will save a lot of time in CanCreateClosedShell later.\r\n            if (exportAsBReps && (geomObject is Solid))\r\n            {\r\n               try\r\n               {\r\n                  // We don't care what the value is here.  What we care about is whether or not it can be calculated.  If it can't be calculated,\r\n                  // it is probably not a valid solid.\r\n                  double volume = (geomObject as Solid).Volume;\r\n\r\n                  // Current code should already prevent 0 volume solids from coming here, but may as well play it safe.\r\n                  if (volume <= MathUtil.Eps())\r\n                     exportAsBReps = false;\r\n               }\r\n               catch\r\n               {\r\n                  exportAsBReps = false;\r\n               }\r\n            }\r\n\r\n            startIndexForObject.Add(currentFaceHashSetList.Count);\r\n\r\n            ElementId materialId = SetBestMaterialIdInExporter(geomObject, element, overrideMaterialId, exporterIFC);\r\n            materialIds.Add(materialId);\r\n            bodyData.AddMaterial(materialId);\r\n\r\n            bool alreadyExported = false;\r\n            bool forceCoarse = false;\r\n\r\n            // First, see if this could be represented as a simple swept solid.\r\n            if (exportAsBReps && (currAnalyzer != null))\r\n            {\r\n               SweptSolidExporter sweptSolidExporter = SweptSolidExporter.Create(exporterIFC, element, currAnalyzer, \r\n                  geomObject, GenerateAdditionalInfo.GenerateBody, isCoarse);\r\n               HashSet<IFCAnyHandle> facetHnds = sweptSolidExporter?.Facets;\r\n               if (facetHnds != null && facetHnds.Count != 0)\r\n               {\r\n                  // Current assumption: SweptSolidExporter produces valid solid geometry.\r\n                  currentFaceHashSetList.Add(new FaceSetInfo(facetHnds, true));\r\n                  alreadyExported = true;\r\n                  GraphicsStyle style = document.GetElement(geomObject.GraphicsStyleId) as GraphicsStyle;\r\n                  bodyData.AddRepresentationItemInfo(document, style, materialId, sweptSolidExporter.RepresentationItem);\r\n               }\r\n            }\r\n\r\n            // Next, try to represent as an AdvancedBRep.\r\n            if (!alreadyExported && canExportAsAdvancedGeometry)\r\n            {\r\n               IFCAnyHandle advancedBrepBodyItem = ExportBodyAsAdvancedBrep(exporterIFC, element, geomObject);\r\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(advancedBrepBodyItem))\r\n               {\r\n                  bodyItems.Add(advancedBrepBodyItem);\r\n                  alreadyExported = true;\r\n                  hasAdvancedBrepGeometry = true;\r\n                  CreateSurfaceStyleForRepItem(exporterIFC, document, creatingVoid, advancedBrepBodyItem, materialId);\r\n                  GraphicsStyle style = document.GetElement(geomObject.GraphicsStyleId) as GraphicsStyle;\r\n                  bodyData.AddRepresentationItemInfo(document, style, materialId, advancedBrepBodyItem);\r\n               }\r\n            }\r\n\r\n            // When element is FamilyInstance and geometry from symbol is used and the object is part of the Assembly, the transform needs to be Identity matrix\r\n            Transform trfToUse = null;\r\n            if (instanceGeometry)\r\n               trfToUse = GeometryUtil.GetScaledTransform(exporterIFC);\r\n            else if (!instanceGeometry && ExporterUtil.IsContainedInAssembly(element) && (element is FamilyInstance))\r\n               trfToUse = Transform.Identity;\r\n\r\n            // If we are using the Reference View, try a triangulated face set.\r\n            // In theory, we could export a tessellated face set for geometry in the Design Transfer View that failed above.\r\n            // However, FacetedBReps do hold more information (and aren't only triangles).\r\n            if (!alreadyExported && canExportAsTessellatedFaceSet)\r\n            {\r\n               IList<IFCAnyHandle> triangulatedBodyItems = ExportBodyAsTessellatedFaceSet(exporterIFC, element, options, geomObject, trfToUse);\r\n               if ((triangulatedBodyItems?.Count ?? 0) > 0)\r\n               {\r\n                  GraphicsStyle style = document.GetElement(geomObject.GraphicsStyleId) as GraphicsStyle;\r\n                  foreach (IFCAnyHandle triangulatedBodyItem in triangulatedBodyItems)\r\n                  {\r\n                     bodyItems.Add(triangulatedBodyItem);\r\n                     bodyData.AddRepresentationItemInfo(document, style, materialId, triangulatedBodyItem);\r\n                  }\r\n                  alreadyExported = true;\r\n                  hasTriangulatedGeometry = true;\r\n               }\r\n\r\n               // We should log here that we couldn't export a geometry.  We aren't allowed to use the traditional methods below.\r\n               if (!alreadyExported)\r\n                  continue;\r\n            }\r\n\r\n            // If the above options do not generate any body, do the traditional step for Brep\r\n            if (!alreadyExported && (exportAsBReps || isCoarse))\r\n            {\r\n               Solid solid = geomObject as Solid;\r\n               if (solid != null)\r\n               {\r\n                  if (ExportPlanarBodyIfPossible(exporterIFC, solid, currentFaceHashSetList, trfToUse))\r\n                  {\r\n                     alreadyExported = true;\r\n                  }\r\n                  else if (!TooManyFaces(solid, options))\r\n                  {\r\n                     (alreadyExported, forceCoarse) = ExportBodyAsSolid(exporterIFC, element, options, \r\n                        currentFaceHashSetList, solid, trfToUse,ref numTotalFacets);\r\n                  }\r\n                  else if (!isCoarse)\r\n                  {\r\n                     forceCoarse = true;\r\n                  }\r\n               }\r\n            }\r\n\r\n            if (forceCoarse)\r\n            {\r\n               options = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n               options.TessellationLevel = BodyExporterOptions.BodyTessellationLevel.Coarse;\r\n               isCoarse = true;\r\n            }\r\n\r\n            // If all else fails, use the internal routine to go through the faces.  This will likely create a surface model.\r\n            if (!alreadyExported)\r\n            {\r\n               IFCGeometryInfo faceListInfo = IFCGeometryInfo.CreateFaceGeometryInfo(eps, isCoarse);\r\n               ExporterIFCUtils.CollectGeometryInfo(exporterIFC, faceListInfo, geomObject, XYZ.Zero, false);\r\n\r\n               IList<ICollection<IFCAnyHandle>> faceSetList = faceListInfo.GetFaces();\r\n\r\n               int numBReps = faceSetList.Count;\r\n               if (numBReps == 0)\r\n                  continue;\r\n\r\n               foreach (ICollection<IFCAnyHandle> currentFaceSet in faceSetList)\r\n               {\r\n                  if (currentFaceSet.Count == 0)\r\n                     continue;\r\n\r\n                  // Default is true until we see that it is false.  This generally maintains\r\n                  // current behavior, but probably needs to be improved.\r\n                  bool canExportAsClosedShell = true;\r\n\r\n                  if (exportAsBReps)\r\n                  {\r\n                     canExportAsClosedShell = (currentFaceSet.Count >= 4);\r\n                     if (canExportAsClosedShell)\r\n                     {\r\n                        if ((geomObject is Mesh) && (numBReps == 1))\r\n                        {\r\n                           // use optimized version.\r\n                           canExportAsClosedShell = CanCreateClosedShell(geomObject as Mesh);\r\n                        }\r\n                        else\r\n                        {\r\n                           canExportAsClosedShell = CanCreateClosedShell(currentFaceSet);\r\n                        }\r\n                     }\r\n\r\n                     if (!canExportAsClosedShell)\r\n                     {\r\n                        exportAsBReps = false;\r\n\r\n                        // We'll need to invalidate the extrusions we created and replace them with BReps.\r\n                        if (selectiveBRepExport && (numGeoms != splitGeometryList.Count))\r\n                        {\r\n                           for (int fixIndex = 0; fixIndex < numExtrusions; fixIndex++)\r\n                           {\r\n                              RepresentationUtil.DeleteShapeRepresentation(bodyItems[0]);     // Use this instead of deleting directly because it may have entry in PresentationLayerSetCache\r\n                              bodyItems.RemoveAt(0);\r\n                           }\r\n                           numExtrusions = 0;\r\n                           numGeoms = splitGeometryList.Count;\r\n                           int currBRepIndex = 0;\r\n                           for (int fixIndex = 0; fixIndex < numGeoms; fixIndex++)\r\n                           {\r\n                              bool outOfRange = (currBRepIndex >= numBRepsToExport);\r\n                              if (!outOfRange && (exportAsBRep[currBRepIndex].Key == fixIndex))\r\n                              {\r\n                                 currBRepIndex++;\r\n                                 continue;\r\n                              }\r\n                              SimpleSweptSolidAnalyzer fixAnalyzer = outOfRange ? null : exportAsBRep[currBRepIndex].Value;\r\n                              exportAsBRep.Add(new KeyValuePair<int, SimpleSweptSolidAnalyzer>(fixIndex, fixAnalyzer));\r\n                           }\r\n                           numBRepsToExport = exportAsBRep.Count;\r\n                        }\r\n                     }\r\n                  }\r\n\r\n                  currentFaceHashSetList.Add(new FaceSetInfo(new HashSet<IFCAnyHandle>(currentFaceSet), canExportAsClosedShell));\r\n               }\r\n            }\r\n         }\r\n\r\n         if (hasTriangulatedGeometry)\r\n         {\r\n            HashSet<IFCAnyHandle> bodyItemSet = new HashSet<IFCAnyHandle>();\r\n            bodyItemSet.UnionWith(bodyItems);\r\n            if (bodyItemSet.Count > 0)\r\n            {\r\n               bodyData.RepresentationHnd = RepresentationUtil.CreateTessellatedRep(exporterIFC, element, categoryId, contextOfItems, bodyItemSet, null);\r\n               bodyData.ShapeRepresentationType = ShapeRepresentationType.Tessellation;\r\n               //bodyData.RepresentationItems = bodyItemSet;\r\n            }\r\n         }\r\n         else if (hasAdvancedBrepGeometry)\r\n         {\r\n            HashSet<IFCAnyHandle> bodyItemSet = new HashSet<IFCAnyHandle>();\r\n            bodyItemSet.UnionWith(bodyItems);\r\n            if (bodyItemSet.Count > 0)\r\n            {\r\n               bodyData.RepresentationHnd = RepresentationUtil.CreateAdvancedBRepRep(exporterIFC, element, categoryId, contextOfItems, bodyItemSet, null);\r\n               bodyData.ShapeRepresentationType = ShapeRepresentationType.AdvancedBrep;\r\n            }\r\n         }\r\n         else\r\n         {\r\n            int size = currentFaceHashSetList.Count;\r\n            startIndexForObject.Add(size);  // end index for last object.\r\n\r\n            for (int ii = 0; ii < size && exportAsBReps; ii++)\r\n            {\r\n               if (!currentFaceHashSetList[ii].IsClosed)\r\n               {\r\n                  exportAsBReps = false;\r\n               }\r\n            }\r\n\r\n            // Export all spatial elements using IfcFacetedBRep, if possible.\r\n            if (elementIsSpatial)\r\n               exportAsBReps = true;\r\n\r\n            IList<IFCAnyHandle> repMapItems = new List<IFCAnyHandle>();\r\n\r\n            if (exportAsBReps)\r\n            {\r\n               int brepIndex = -1;\r\n               ElementId currMatId = ElementId.InvalidElementId;\r\n               GraphicsStyle currStyle = null;\r\n               for (int ii = 0; ii < size; ii++)\r\n               {\r\n                  if (startIndexForObject[brepIndex + 1] == ii)\r\n                  {\r\n                     brepIndex++;\r\n                     currMatId = materialIds[brepIndex];\r\n                     currStyle = document.GetElement(splitGeometryList[brepIndex].GraphicsStyleId) as GraphicsStyle;\r\n                  }\r\n\r\n                  // If the face set is not closed for the spatial element, do not export it.\r\n                  if (elementIsSpatial && !currentFaceHashSetList[ii].IsClosed)\r\n                     continue;\r\n\r\n                  HashSet<IFCAnyHandle> currentFaceHashSet = currentFaceHashSetList[ii].FaceSetHandles;\r\n                  IFCAnyHandle faceOuter = IFCInstanceExporter.CreateClosedShell(file, currentFaceHashSet);\r\n                  IFCAnyHandle brepHnd = RepresentationUtil.CreateFacetedBRep(exporterIFC,\r\n                     document, options.CreatingVoid, faceOuter, currMatId);\r\n\r\n                  if (bodyItems.AddIfNotNull(brepHnd))\r\n                  {\r\n                     bodyData.AddRepresentationItemInfo(document, currStyle, currMatId, brepHnd);\r\n                  }\r\n               }\r\n            }\r\n            else\r\n            {\r\n               IDictionary<ElementId, HashSet<IFCAnyHandle>> faceSets = new Dictionary<ElementId, HashSet<IFCAnyHandle>>();\r\n               int matToUse = -1;\r\n               for (int ii = 0; ii < size; ii++)\r\n               {\r\n                  HashSet<IFCAnyHandle> currentFaceHashSet = currentFaceHashSetList[ii].FaceSetHandles;\r\n                  if (startIndexForObject[matToUse + 1] == ii)\r\n                     matToUse++;\r\n\r\n                  IFCAnyHandle faceSetHnd = IFCInstanceExporter.CreateConnectedFaceSet(file, currentFaceHashSet);\r\n                  if (faceSets.TryGetValue(materialIds[matToUse], out HashSet<IFCAnyHandle> surfaceSet))\r\n                  {\r\n                     surfaceSet.Add(faceSetHnd);\r\n                  }\r\n                  else\r\n                  {\r\n                     surfaceSet = new HashSet<IFCAnyHandle>() { faceSetHnd };\r\n                     faceSets[materialIds[matToUse]] = surfaceSet;\r\n                  }\r\n               }\r\n\r\n               if (faceSets.Count > 0)\r\n               {\r\n                  foreach (KeyValuePair<ElementId, HashSet<IFCAnyHandle>> faceSet in faceSets)\r\n                  {\r\n                     IFCAnyHandle surfaceModel = IFCInstanceExporter.CreateFaceBasedSurfaceModel(file, faceSet.Value);\r\n                     CreateSurfaceStyleForRepItem(exporterIFC, document, options.CreatingVoid, surfaceModel, faceSet.Key);\r\n\r\n                     bodyItems.Add(surfaceModel);\r\n                  }\r\n               }\r\n            }\r\n\r\n            if (bodyItems.Count == 0)\r\n               return bodyData;\r\n\r\n            HashSet<IFCAnyHandle> bodyItemSet = new HashSet<IFCAnyHandle>();\r\n            bodyItemSet.UnionWith(bodyItems);\r\n\r\n            bodyData.ShapeRepresentationType = ShapeRepresentationType.Brep;\r\n            if (exportAsBReps)\r\n            {\r\n               if (numExtrusions > 0)\r\n                  bodyData.RepresentationHnd = RepresentationUtil.CreateSolidModelRep(exporterIFC, element, categoryId, contextOfItems, bodyItemSet);\r\n               else\r\n                  bodyData.RepresentationHnd = RepresentationUtil.CreateBRepRep(exporterIFC, element, categoryId, contextOfItems, bodyItemSet);\r\n            }\r\n            else\r\n            {\r\n               bodyData.RepresentationHnd = RepresentationUtil.CreateSurfaceRep(exporterIFC, element, categoryId, contextOfItems, bodyItemSet, false, null);\r\n               bodyData.ShapeRepresentationType = ShapeRepresentationType.SurfaceModel;\r\n            }\r\n         }\r\n\r\n         return bodyData;\r\n      }\r\n\r\n      private class SolidMetrics\r\n      {\r\n         int m_NumEdges;\r\n         int m_NumFaces;\r\n         double m_SurfaceArea;\r\n         double m_Volume;\r\n\r\n         public SolidMetrics(Solid solid)\r\n         {\r\n            NumEdges = solid.Edges.Size;\r\n            NumFaces = solid.Faces.Size;\r\n            SurfaceArea = solid.SurfaceArea;\r\n            Volume = solid.Volume;\r\n         }\r\n\r\n         public int NumEdges\r\n         {\r\n            get { return m_NumEdges; }\r\n            set { m_NumEdges = value; }\r\n         }\r\n\r\n         public int NumFaces\r\n         {\r\n            get { return m_NumFaces; }\r\n            set { m_NumFaces = value; }\r\n         }\r\n\r\n         public double SurfaceArea\r\n         {\r\n            get { return m_SurfaceArea; }\r\n            set { m_SurfaceArea = value; }\r\n         }\r\n\r\n         public double Volume\r\n         {\r\n            get { return m_Volume; }\r\n            set { m_Volume = value; }\r\n         }\r\n\r\n         static public bool operator ==(SolidMetrics first, SolidMetrics second)\r\n         {\r\n            Object lhsObject = first;\r\n            Object rhsObject = second;\r\n            if (null == lhsObject)\r\n            {\r\n               if (null == rhsObject)\r\n                  return true;\r\n               return false;\r\n            }\r\n            if (null == rhsObject)\r\n               return false;\r\n\r\n            if (first.NumEdges != second.NumEdges)\r\n               return false;\r\n\r\n            if (first.NumFaces != second.NumFaces)\r\n               return false;\r\n\r\n            if (!MathUtil.IsAlmostEqual(first.SurfaceArea, second.SurfaceArea))\r\n            {\r\n               return false;\r\n            }\r\n\r\n            if (!MathUtil.IsAlmostEqual(first.Volume, second.Volume))\r\n            {\r\n               return false;\r\n            }\r\n\r\n            return true;\r\n         }\r\n\r\n         static public bool operator !=(SolidMetrics first, SolidMetrics second)\r\n         {\r\n            return !(first == second);\r\n         }\r\n\r\n         public override bool Equals(object obj)\r\n         {\r\n            if (obj == null)\r\n               return false;\r\n\r\n            SolidMetrics second = obj as SolidMetrics;\r\n            return (this == second);\r\n         }\r\n\r\n         public override int GetHashCode()\r\n         {\r\n            double total = NumFaces + NumEdges + SurfaceArea + Volume;\r\n            return (Math.Floor(total) * 100.0).GetHashCode();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports list of geometries to IFC body representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"geometryListIn\">The geometry list.</param>\r\n      /// <param name=\"options\">The settings for how to export the body.</param>\r\n      /// <param name=\"exportBodyParams\">The extrusion creation data.</param>\r\n      /// <returns>The BodyData containing the handle, offset and material ids.</returns>\r\n      public static BodyData ExportBody(ExporterIFC exporterIFC,\r\n         Element element,\r\n         ElementId categoryId,\r\n         ElementId overrideMaterialId,\r\n         IList<GeometryObject> geometryList,\r\n         BodyExporterOptions options,\r\n         IFCExportBodyParams exportBodyParams,\r\n         GeometryObject potentialPathGeom = null,\r\n         string profileName = null,\r\n         bool instanceGeometry = true)\r\n      {\r\n         BodyData bodyData = new();\r\n         if (geometryList.Count == 0)\r\n            return bodyData;\r\n\r\n         Document document = element.Document;\r\n         \r\n         bool tryToExportAsExtrusion = options.TryToExportAsExtrusion;\r\n         bool canExportSolidModelRep = tryToExportAsExtrusion && ExporterCacheManager.ExportOptionsCache.CanExportSolidModelRep;\r\n\r\n         // If we are exporting a coarse tessellation, or regardless if the level of detail isn't set to the highest level,\r\n         // we will try to see if we can use an optimized BRep created from a swept solid.\r\n         bool isCoarse = options.TessellationLevel == BodyExporterOptions.BodyTessellationLevel.Coarse;\r\n         bool allowExportAsOptimizedBRep = (options.TessellationLevel == BodyExporterOptions.BodyTessellationLevel.Coarse ||\r\n            ExporterCacheManager.ExportOptionsCache.LevelOfDetail < ExportOptionsCache.ExportTessellationLevel.High);\r\n         bool allowAdvancedBReps = !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4\r\n                                    && !ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView\r\n                                    && !ExporterCacheManager.ExportOptionsCache.ExportAs4General;\r\n\r\n         // We will try to export as a swept solid if the option is set, and we are either exporting to a schema that allows it,\r\n         // or we are using a coarse tessellation, in which case we will export the swept solid as an optimzed BRep.\r\n         bool tryToExportAsSweptSolid = options.TryToExportAsSweptSolid && (allowAdvancedBReps || allowExportAsOptimizedBRep);\r\n\r\n         // We will allow exporting swept solids as BReps or TriangulatedFaceSet if we are exporting to a schema before IFC4, or to a Reference View MVD, \r\n         // and we allow coarse representations.  In the future, we may allow more control here.\r\n         // Note that we disable IFC4 because in IFC4, we will export it as a true swept solid instead, except for the Reference View MVD.\r\n         bool tryToExportAsSweptSolidAsTessellation = tryToExportAsSweptSolid && allowExportAsOptimizedBRep && !allowAdvancedBReps;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle contextOfItems = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Body);\r\n\r\n         double eps = UnitUtil.ScaleLength(document.Application.VertexTolerance);\r\n\r\n         bool allFaces = true;\r\n         foreach (GeometryObject geomObject in geometryList)\r\n         {\r\n            if (!(geomObject is Face))\r\n            {\r\n               allFaces = false;\r\n               break;\r\n            }\r\n         }\r\n\r\n         IList<IFCAnyHandle> bodyItems = new List<IFCAnyHandle>();\r\n         IList<ElementId> materialIdsForExtrusions = new List<ElementId>();\r\n\r\n         // This is a list of geometries that can be exported using the coarse facetation of the SweptSolidExporter.\r\n         IList<KeyValuePair<int, SimpleSweptSolidAnalyzer>> exportAsBRep = new List<KeyValuePair<int, SimpleSweptSolidAnalyzer>>();\r\n\r\n         List<int> exportAsSweptSolid = [];\r\n         List<int> exportAsExtrusion = [];\r\n\r\n         bool hasExtrusions = false;\r\n         bool hasSweptSolids = false;\r\n         bool hasSweptSolidsAsBReps = false;\r\n         ShapeRepresentationType hasRepresentationType = ShapeRepresentationType.Undefined;\r\n\r\n         BoundingBoxXYZ bbox = GeometryUtil.GetBBoxOfGeometries(geometryList);\r\n         XYZ unscaledTrfOrig = new();\r\n\r\n         int numItems = geometryList.Count;\r\n         bool tryExtrusionAnalyzer = tryToExportAsExtrusion && (options.ExtrusionLocalCoordinateSystem != null) && (numItems == 1) && (geometryList[0] is Solid);\r\n         bool supportOffsetTransformForExtrusions = !(tryExtrusionAnalyzer || tryToExportAsSweptSolidAsTessellation);\r\n         bool useOffsetTransformForExtrusions = options.AllowOffsetTransform && supportOffsetTransformForExtrusions && (exportBodyParams != null);\r\n\r\n         MaterialAndProfile materialAndProfile = null;\r\n         HashSet<FootPrintInfo> footprintInfoSet = new();\r\n         Plane extrusionBasePlane = null;\r\n         XYZ extrusionDirection = XYZ.BasisX;\r\n\r\n         using (IFCTransaction tr = new(file))\r\n         {\r\n            // generate \"bottom corner\" of bbox; create new local placement if passed in.\r\n            // need to transform, but not scale, this point to make it the new origin.\r\n            using (TransformSetter transformSetter = TransformSetter.Create())\r\n            {\r\n               if (useOffsetTransformForExtrusions)\r\n               {\r\n                  bodyData.OffsetTransform = transformSetter.InitializeFromBoundingBox(exporterIFC, bbox, \r\n                     exportBodyParams, element.Location, instanceGeometry, out unscaledTrfOrig);\r\n               }\r\n               else\r\n               {\r\n                  bodyData.OffsetTransform = Transform.Identity;\r\n               }\r\n\r\n               // If we passed in an ExtrusionLocalCoordinateSystem, and we have 1 Solid, we will try to create an extrusion using the ExtrusionAnalyzer.\r\n               // If we succeed, we will skip the rest of the routine, otherwise we will try with the backup extrusion method.\r\n               // This doesn't yet create fallback information for solid models that are hybrid extrusions and BReps.\r\n               if (tryToExportAsExtrusion)\r\n               {\r\n                  if (tryExtrusionAnalyzer)\r\n                  {\r\n                     using (IFCTransaction extrusionTransaction = new IFCTransaction(file))\r\n                     {\r\n                        if (exportBodyParams != null && exportBodyParams.PossibleExtrusionAxes == IFCExtrusionAxes.TryZ)\r\n                        {\r\n                           XYZ planeXVec = options.ExtrusionLocalCoordinateSystem.BasisX.Normalize();\r\n                           XYZ planeYVec = options.ExtrusionLocalCoordinateSystem.BasisY.Normalize();\r\n\r\n                           extrusionBasePlane = GeometryUtil.CreatePlaneByXYVectorsAtOrigin(planeXVec, planeYVec);\r\n                           extrusionDirection = options.ExtrusionLocalCoordinateSystem.BasisZ;\r\n                        }\r\n                        else if (exportBodyParams != null && exportBodyParams.PossibleExtrusionAxes == IFCExtrusionAxes.TryY)\r\n                        {\r\n                           XYZ planeXVec = options.ExtrusionLocalCoordinateSystem.BasisX.Normalize();\r\n                           XYZ planeYVec = options.ExtrusionLocalCoordinateSystem.BasisZ.Normalize();\r\n\r\n                           extrusionBasePlane = GeometryUtil.CreatePlaneByXYVectorsAtOrigin(planeXVec, planeYVec);\r\n                           extrusionDirection = options.ExtrusionLocalCoordinateSystem.BasisY;\r\n                        }\r\n                        else\r\n                        {\r\n                           XYZ planeXVec = options.ExtrusionLocalCoordinateSystem.BasisY.Normalize();\r\n                           XYZ planeYVec = options.ExtrusionLocalCoordinateSystem.BasisZ.Normalize();\r\n\r\n                           extrusionBasePlane = GeometryUtil.CreatePlaneByXYVectorsAtOrigin(planeXVec, planeYVec);\r\n                           extrusionDirection = options.ExtrusionLocalCoordinateSystem.BasisX;\r\n                        }\r\n\r\n                        GenerateAdditionalInfo footprintOrProfile = GenerateAdditionalInfo.GenerateBody;\r\n                        if (options.CollectFootprintHandle)\r\n                           footprintOrProfile |= GenerateAdditionalInfo.GenerateFootprint;\r\n                        if (options.CollectMaterialAndProfile)\r\n                           footprintOrProfile |= GenerateAdditionalInfo.GenerateProfileDef;\r\n\r\n                        ExtrusionExporter.ExtraClippingData extraClippingData = null;\r\n                        // Why is this different from categoryId?\r\n                        ElementId catId = CategoryUtil.GetSafeCategoryId(element);\r\n\r\n                        HandleAndData extrusionData = ExtrusionExporter.CreateExtrusionWithClippingAndProperties(\r\n                           exporterIFC, element, options.CreatingVoid, catId, geometryList[0] as Solid, \r\n                           extrusionBasePlane, options.ExtrusionLocalCoordinateSystem.Origin, extrusionDirection, \r\n                           null, out extraClippingData, addInfo: footprintOrProfile, profileName: profileName);\r\n                        if (!extraClippingData.CompletelyClipped && !IFCAnyHandleUtil.IsNullOrHasNoValue(extrusionData.Handle))\r\n                        {\r\n                           // There are two valid cases here:\r\n                           // 1. We actually created an extrusion.\r\n                           // 2. We are in the Reference View, and we created a TriangulatedFaceSet.\r\n                           if (extrusionData.BaseRepresentationItems != null && extrusionData.BaseRepresentationItems.Count == 1)\r\n                           {\r\n                              IList<ElementId> materialIds = extrusionData.MaterialIds;\r\n\r\n                              // We skip setting and getting the material id from the exporter as unnecessary.\r\n                              ElementId matIdFromGeom = (materialIds != null && materialIds.Count > 0) ? materialIds.First() : ElementId.InvalidElementId;\r\n                              ElementId matId = (overrideMaterialId != ElementId.InvalidElementId) ? overrideMaterialId : matIdFromGeom;\r\n\r\n                              materialIdsForExtrusions.Add(matId);\r\n                              if (matId != ElementId.InvalidElementId)\r\n                              {\r\n                                 GraphicsStyle style = document.GetElement(geometryList[0].GraphicsStyleId) as GraphicsStyle;\r\n                                 bodyData.AddRepresentationItemInfo(document, style, matId, extrusionData.BaseRepresentationItems[0]);\r\n                              }\r\n                              bodyData.RepresentationHnd = extrusionData.Handle;\r\n                              bodyData.ShapeRepresentationType = extrusionData.ShapeRepresentationType;\r\n                              bodyData.MaterialAndProfile = extrusionData.MaterialAndProfile;\r\n                              bodyData.FootprintInfo = extrusionData.FootprintInfo;\r\n                              HashSet<IFCAnyHandle> items = new HashSet<IFCAnyHandle>();\r\n                              items.UnionWith(extrusionData.BaseRepresentationItems);\r\n\r\n                              bodyItems.Add(extrusionData.BaseRepresentationItems[0]);\r\n\r\n                              if (exportBodyParams != null && extrusionData.Data != null)\r\n                              {\r\n                                 exportBodyParams.Slope = extrusionData.Data.Slope;\r\n                                 exportBodyParams.ScaledLength = extrusionData.Data.ScaledLength;\r\n                                 exportBodyParams.ExtrusionDirection = extrusionData.Data.ExtrusionDirection;\r\n\r\n                                 exportBodyParams.ScaledHeight = extrusionData.Data.ScaledHeight;\r\n                                 exportBodyParams.ScaledWidth = extrusionData.Data.ScaledWidth;\r\n\r\n                                 exportBodyParams.ScaledArea = extrusionData.Data.ScaledArea;\r\n                                 exportBodyParams.ScaledInnerPerimeter = extrusionData.Data.ScaledInnerPerimeter;\r\n                                 exportBodyParams.ScaledOuterPerimeter = extrusionData.Data.ScaledOuterPerimeter;\r\n                              }\r\n\r\n                              hasExtrusions = true;\r\n                              if ((footprintOrProfile & GenerateAdditionalInfo.GenerateFootprint) != 0)\r\n                                 footprintInfoSet.Add(extrusionData.FootprintInfo);\r\n                              if ((footprintOrProfile & GenerateAdditionalInfo.GenerateProfileDef) != 0)\r\n                                 materialAndProfile = extrusionData.MaterialAndProfile;\r\n\r\n                              extrusionTransaction.Commit();\r\n                           }\r\n                        }\r\n\r\n                        if (!hasExtrusions)\r\n                           extrusionTransaction.RollBack();\r\n                     }\r\n                  }\r\n\r\n                  // Only try if ExtrusionAnalyzer wasn't called, or failed.\r\n                  if (!hasExtrusions)\r\n                  {\r\n                     // Check to see if we have Geometries or GFaces.\r\n                     // We will have the specific all GFaces case and then the generic case.\r\n                     IList<Face> faces = null;\r\n\r\n                     if (allFaces)\r\n                     {\r\n                        faces = new List<Face>();\r\n                        foreach (GeometryObject geometryObject in geometryList)\r\n                        {\r\n                           faces.Add(geometryObject as Face);\r\n                        }\r\n                     }\r\n\r\n                     // Options used if we try to export extrusions.\r\n                     IFCExtrusionAxes axesToExtrudeIn = exportBodyParams != null ? exportBodyParams.PossibleExtrusionAxes : IFCExtrusionAxes.TryDefault;\r\n                     XYZ directionToExtrudeIn = XYZ.Zero;\r\n                     if (exportBodyParams != null && exportBodyParams.HasCustomAxis)\r\n                        directionToExtrudeIn = exportBodyParams.CustomAxis;\r\n\r\n                     double lengthScale = UnitUtil.ScaleLengthForRevitAPI();\r\n                     IFCExtrusionCalculatorOptions extrusionOptions =\r\n                        new IFCExtrusionCalculatorOptions(exporterIFC, axesToExtrudeIn, directionToExtrudeIn, lengthScale);\r\n\r\n                     int numExtrusionsToCreate = allFaces ? 1 : geometryList.Count;\r\n\r\n                     IList<IList<IFCExtrusionData>> extrusionLists = new List<IList<IFCExtrusionData>>();\r\n                     for (int ii = 0; ii < numExtrusionsToCreate; ii++)\r\n                     {\r\n                        IList<IFCExtrusionData> extrusionList = new List<IFCExtrusionData>();\r\n\r\n                        if (tryToExportAsExtrusion)\r\n                        {\r\n                           if (allFaces)\r\n                              extrusionList = IFCExtrusionCalculatorUtils.CalculateExtrusionData(extrusionOptions, faces);\r\n                           else\r\n                              extrusionList = IFCExtrusionCalculatorUtils.CalculateExtrusionData(extrusionOptions, geometryList[ii]);\r\n                        }\r\n\r\n                        if (extrusionList.Count == 0)\r\n                        {\r\n                           // If we are trying to create swept solids, we will keep going, but we won't try to create more extrusions unless we are also exporting a solid model.\r\n                           if (tryToExportAsSweptSolid)\r\n                           {\r\n                              if (!canExportSolidModelRep)\r\n                                 tryToExportAsExtrusion = false;\r\n                              exportAsSweptSolid.Add(ii);\r\n                           }\r\n                           else if (!canExportSolidModelRep)\r\n                           {\r\n                              tryToExportAsExtrusion = false;\r\n                              break;\r\n                           }\r\n                           else\r\n                              exportAsBRep.Add(new KeyValuePair<int, SimpleSweptSolidAnalyzer>(ii, null));\r\n                        }\r\n                        else\r\n                        {\r\n                           extrusionLists.Add(extrusionList);\r\n                           exportAsExtrusion.Add(ii);\r\n                        }\r\n                     }\r\n\r\n                     int numCreatedExtrusions = extrusionLists.Count;\r\n                     for (int ii = 0; ii < numCreatedExtrusions && tryToExportAsExtrusion; ii++)\r\n                     {\r\n                        int geomIndex = exportAsExtrusion[ii];\r\n\r\n                        ElementId matId = SetBestMaterialIdInExporter(geometryList[geomIndex], element, overrideMaterialId, exporterIFC);\r\n\r\n                        if (exportBodyParams != null && exportBodyParams.AreInnerRegionsOpenings)\r\n                        {\r\n                           IList<CurveLoop> curveLoops = extrusionLists[ii][0].GetLoops();\r\n                           XYZ extrudedDirection = extrusionLists[ii][0].ExtrusionDirection;\r\n\r\n                           int numLoops = curveLoops.Count;\r\n                           for (int jj = numLoops - 1; jj > 0; jj--)\r\n                           {\r\n                              ExtrusionExporter.AddOpeningData(exportBodyParams, extrusionLists[ii][0], curveLoops[jj]);\r\n                              extrusionLists[ii][0].RemoveLoopAt(jj);\r\n                           }\r\n                        }\r\n\r\n                        bool exportedAsExtrusion = false;\r\n                        IFCExtrusionBasis whichBasis = extrusionLists[ii][0].ExtrusionBasis;\r\n                        if (whichBasis >= 0)\r\n                        {\r\n                           Transform lcs = Transform.Identity;\r\n                           IFCAnyHandle extrusionHandle = ExtrusionExporter.CreateExtrudedSolidFromExtrusionData(exporterIFC,\r\n                              element, extrusionLists[ii][0], out lcs, profileName: profileName);\r\n                           if (bodyItems.AddIfNotNull(extrusionHandle))\r\n                           {\r\n                              materialIdsForExtrusions.Add(exporterIFC.GetMaterialIdForCurrentExportState());\r\n\r\n                              IList<CurveLoop> curveLoops = extrusionLists[ii][0].GetLoops();\r\n                              extrusionDirection = extrusionLists[ii][0].ExtrusionDirection;\r\n                              if (options.CollectFootprintHandle)\r\n                              {\r\n                                 FootPrintInfo fInfo = new FootPrintInfo(curveLoops, lcs);\r\n                                 footprintInfoSet.Add(fInfo);\r\n                              }\r\n                              if (options.CollectMaterialAndProfile)\r\n                              {\r\n                                 // Get the handle to the extrusion Swept Area needed for creation of IfcMaterialProfile\r\n                                 IFCData extrArea = extrusionHandle.GetAttribute(\"SweptArea\");\r\n                                 if (materialAndProfile == null)\r\n                                    materialAndProfile = new MaterialAndProfile();\r\n                                 materialAndProfile.Add(exporterIFC.GetMaterialIdForCurrentExportState(), extrArea.AsInstance());\r\n                              }\r\n\r\n                              if (exportBodyParams != null)\r\n                              {\r\n                                 double slope = GeometryUtil.GetSimpleExtrusionSlope(extrusionDirection, whichBasis);\r\n                                 if (slope <= MathUtil.Eps())\r\n                                 { \r\n                                    GeometryObject geomObj = geometryList[geomIndex];\r\n                                    Face largestTopFace = GeometryUtil.GetLargestFaceInSolid(geomObj, new XYZ(0, 0, 1));\r\n                                    if(largestTopFace !=null)\r\n                                    {\r\n                                       XYZ faceNormal = largestTopFace.ComputeNormal(new UV());\r\n                                       XYZ faceNormalProjXYPlane = new XYZ(faceNormal.X, faceNormal.Y, 0.0).Normalize();\r\n                                       slope = GeometryUtil.GetAngleOfFace(largestTopFace, faceNormalProjXYPlane);\r\n                                    }\r\n                                 }\r\n\r\n                                 exportBodyParams.Slope = slope;\r\n                                 exportBodyParams.ScaledLength = extrusionLists[ii][0].ScaledExtrusionLength;\r\n                                 exportBodyParams.ExtrusionDirection = extrusionDirection;\r\n                                 for (int kk = 1; kk < extrusionLists[ii].Count; kk++)\r\n                                 {\r\n                                    ExtrusionExporter.AddOpeningData(exportBodyParams, extrusionLists[ii][kk]);\r\n                                 }\r\n\r\n                                 double height = 0.0, width = 0.0;\r\n                                 if (GeometryUtil.ComputeHeightWidthOfCurveLoop(curveLoops[0], exportBodyParams.PreferredWidthDirection, out height, out width))\r\n                                 {\r\n                                    exportBodyParams.ScaledHeight = UnitUtil.ScaleLength(height);\r\n                                    exportBodyParams.ScaledWidth = UnitUtil.ScaleLength(width);\r\n                                 }\r\n\r\n                                 double area = ExporterIFCUtils.ComputeAreaOfCurveLoops(new[] { curveLoops[0] });\r\n                                 if (area > 0.0)\r\n                                 {\r\n                                    exportBodyParams.ScaledArea = UnitUtil.ScaleArea(area);\r\n                                 }\r\n\r\n                                 double innerPerimeter = ExtrusionExporter.ComputeInnerPerimeterOfCurveLoops(curveLoops);\r\n                                 double outerPerimeter = ExtrusionExporter.ComputeOuterPerimeterOfCurveLoops(curveLoops);\r\n                                 if (innerPerimeter > 0.0)\r\n                                    exportBodyParams.ScaledInnerPerimeter = UnitUtil.ScaleLength(innerPerimeter);\r\n                                 if (outerPerimeter > 0.0)\r\n                                    exportBodyParams.ScaledOuterPerimeter = UnitUtil.ScaleLength(outerPerimeter);\r\n                              }\r\n                              exportedAsExtrusion = true;\r\n                              hasExtrusions = true;\r\n                              GraphicsStyle style = document.GetElement(geometryList[geomIndex].GraphicsStyleId) as GraphicsStyle;\r\n\r\n                              bodyData.AddRepresentationItemInfo(document, style, matId, extrusionHandle);\r\n                           }\r\n                        }\r\n\r\n                        if (!exportedAsExtrusion)\r\n                        {\r\n                           if (tryToExportAsSweptSolid)\r\n                              exportAsSweptSolid.Add(ii);\r\n                           else if (!canExportSolidModelRep)\r\n                           {\r\n                              tryToExportAsExtrusion = false;\r\n                              break;\r\n                           }\r\n                           else\r\n                              exportAsBRep.Add(new KeyValuePair<int, SimpleSweptSolidAnalyzer>(ii, null));\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n\r\n               if (tryToExportAsSweptSolid)\r\n               {\r\n                  int numCreatedSweptSolids = exportAsSweptSolid.Count;\r\n                  for (int ii = 0; (ii < numCreatedSweptSolids) && tryToExportAsSweptSolid; ii++)\r\n                  {\r\n                     bool exported = false;\r\n                     int geomIndex = exportAsSweptSolid[ii];\r\n                     Solid solid = geometryList[geomIndex] as Solid;\r\n                     SimpleSweptSolidAnalyzer simpleSweptSolidAnalyzer = null;\r\n                     // TODO: allFaces to SweptSolid\r\n                     if (solid != null)\r\n                     {\r\n                        // TODO: give normal hint below if we have an idea.\r\n                        XYZ directrixPlaneNormal = (potentialPathGeom != null && potentialPathGeom is Arc) ? (potentialPathGeom as Arc).Normal : null;\r\n                        if (directrixPlaneNormal == null)\r\n                           directrixPlaneNormal = (potentialPathGeom != null && potentialPathGeom is Ellipse) ? (potentialPathGeom as Ellipse).Normal : null;\r\n                        simpleSweptSolidAnalyzer = SweptSolidExporter.CanExportAsSweptSolid(exporterIFC, solid, directrixPlaneNormal, potentialPathGeom);\r\n\r\n                        // If we are exporting as a BRep, we will keep the analyzer for later, if it isn't null.\r\n                        if (simpleSweptSolidAnalyzer != null)\r\n                        {\r\n                           if (!tryToExportAsSweptSolidAsTessellation)\r\n                           {\r\n                              GenerateAdditionalInfo addInfo = GenerateAdditionalInfo.GenerateBody;   // Default\r\n                              if (options.CollectFootprintHandle)\r\n                                 addInfo |= GenerateAdditionalInfo.GenerateFootprint;\r\n\r\n                              SweptSolidExporter sweptSolidExporter = SweptSolidExporter.Create(exporterIFC, element, \r\n                                 simpleSweptSolidAnalyzer, solid, addInfo, isCoarse);\r\n                              IFCAnyHandle sweptHandle = sweptSolidExporter?.RepresentationItem;\r\n\r\n                              if (bodyItems.AddIfNotNull(sweptHandle))\r\n                              {\r\n                                 ElementId matId = exporterIFC.GetMaterialIdForCurrentExportState();\r\n                                 materialIdsForExtrusions.Add(matId);\r\n                                 GraphicsStyle style = document.GetElement(solid.GraphicsStyleId) as GraphicsStyle;\r\n                                 bodyData.AddRepresentationItemInfo(document, style, matId, sweptHandle);\r\n                                 exported = true;\r\n                                 hasRepresentationType = sweptSolidExporter.RepresentationType;\r\n\r\n                                 // These are the only two valid cases for true sweep export: either an extrusion or a sweep.\r\n                                 // We don't expect regular BReps or triangulated face sets here.\r\n                                 if (sweptSolidExporter.isSpecificRepresentationType(ShapeRepresentationType.SweptSolid))\r\n                                    hasExtrusions = true;\r\n                                 else if (sweptSolidExporter.isSpecificRepresentationType(ShapeRepresentationType.AdvancedSweptSolid))\r\n                                    hasSweptSolids = true;\r\n\r\n                                 if (options.CollectFootprintHandle)\r\n                                 {\r\n                                    if (sweptSolidExporter.FootprintInfo != null)\r\n                                       footprintInfoSet.Add(sweptSolidExporter.FootprintInfo);\r\n                                 }\r\n                                 if (options.CollectMaterialAndProfile)\r\n                                 {\r\n                                    // Get the handle to the extrusion Swept Area needed for creation of IfcMaterialProfile\r\n                                    IFCData extrArea = sweptHandle.GetAttribute(\"SweptArea\");\r\n                                    if (materialAndProfile == null)\r\n                                       materialAndProfile = new MaterialAndProfile();\r\n                                    materialAndProfile.Add(exporterIFC.GetMaterialIdForCurrentExportState(), extrArea.AsInstance());\r\n                                    materialAndProfile.PathCurve = simpleSweptSolidAnalyzer.PathCurve;\r\n                                 }\r\n                              }\r\n                              else\r\n                                 simpleSweptSolidAnalyzer = null;    // Didn't work for some reason.\r\n                           }\r\n                        }\r\n                     }\r\n\r\n                     if (!exported)\r\n                     {\r\n                        exportAsBRep.Add(new KeyValuePair<int, SimpleSweptSolidAnalyzer>(geomIndex, simpleSweptSolidAnalyzer));\r\n                        hasSweptSolidsAsBReps |= (simpleSweptSolidAnalyzer != null);\r\n                     }\r\n                  }\r\n               }\r\n\r\n               bool exportSucceeded = (exportAsBRep.Count == 0) && (tryToExportAsExtrusion || tryToExportAsSweptSolid)\r\n                  && (hasExtrusions || hasSweptSolids || hasRepresentationType != ShapeRepresentationType.Undefined);\r\n               if (exportSucceeded || canExportSolidModelRep)\r\n               {\r\n                  int sz = bodyItems.Count();\r\n                  for (int ii = 0; ii < sz; ii++)\r\n                     CreateSurfaceStyleForRepItem(exporterIFC, document, options.CreatingVoid, bodyItems[ii], materialIdsForExtrusions[ii]);\r\n\r\n                  if (exportSucceeded)\r\n                  {\r\n                     if (bodyData.RepresentationHnd == null)\r\n                     {\r\n                        HashSet<IFCAnyHandle> bodyItemSet = new HashSet<IFCAnyHandle>();\r\n                        bodyItemSet.UnionWith(bodyItems);\r\n                        if (hasExtrusions && !hasSweptSolids)\r\n                        {\r\n                           bodyData.RepresentationHnd =\r\n                              RepresentationUtil.CreateSweptSolidRep(exporterIFC, element, categoryId, contextOfItems, bodyItemSet, bodyData.RepresentationHnd, exportBodyParams?.IFCCADLayerOverride);\r\n                           bodyData.ShapeRepresentationType = ShapeRepresentationType.SweptSolid;\r\n                           bodyData = SaveMaterialAndFootprintInfo(bodyData, materialAndProfile, footprintInfoSet, options.CollectFootprintHandle);\r\n                        }\r\n                        else if (hasSweptSolids && !hasExtrusions)\r\n                        {\r\n                           bodyData.RepresentationHnd =\r\n                              RepresentationUtil.CreateAdvancedSweptSolidRep(exporterIFC, element, categoryId, contextOfItems, bodyItemSet, bodyData.RepresentationHnd);\r\n                           bodyData.ShapeRepresentationType = ShapeRepresentationType.AdvancedSweptSolid;\r\n                           bodyData = SaveMaterialAndFootprintInfo(bodyData, materialAndProfile, footprintInfoSet, options.CollectFootprintHandle);\r\n                        }\r\n                        else if (hasRepresentationType == ShapeRepresentationType.Tessellation)\r\n                        {\r\n                           bodyData.RepresentationHnd =\r\n                              RepresentationUtil.CreateTessellatedRep(exporterIFC, element, categoryId, contextOfItems, bodyItemSet, bodyData.RepresentationHnd);\r\n                           bodyData.ShapeRepresentationType = ShapeRepresentationType.Tessellation;\r\n                        }\r\n                        else\r\n                        {\r\n                           bodyData.RepresentationHnd =\r\n                              RepresentationUtil.CreateSolidModelRep(exporterIFC, element, categoryId, contextOfItems, bodyItemSet);\r\n                           bodyData.ShapeRepresentationType = ShapeRepresentationType.SolidModel;\r\n                        }\r\n                     }\r\n\r\n                     // TODO: include BRep, CSG, Clipping\r\n\r\n                     XYZ lpOrig = ((bodyData != null) && (bodyData.OffsetTransform != null)) ? UnitUtil.ScaleLength(bodyData.OffsetTransform.Origin) : new XYZ();\r\n                     transformSetter.CreateLocalPlacementFromOffset(exporterIFC, bbox, exportBodyParams, lpOrig, unscaledTrfOrig);\r\n                     tr.Commit();\r\n\r\n                     return bodyData;\r\n                  }\r\n               }\r\n\r\n               // If we are going to export a solid model, keep the created items.\r\n               if (!canExportSolidModelRep)\r\n                  tr.RollBack();\r\n               else\r\n                  tr.Commit();\r\n            }\r\n\r\n            // We couldn't export it as an extrusion; export as a solid, brep, or a surface model.\r\n            if (!canExportSolidModelRep)\r\n            {\r\n               exportAsExtrusion.Clear();\r\n               bodyItems.Clear();\r\n               if (exportBodyParams != null)\r\n                  exportBodyParams.ClearOpenings();\r\n            }\r\n\r\n            if (exportAsExtrusion.Count == 0)\r\n            {\r\n               // We used to clear exportAsBRep, but we need the SimpleSweptSolidAnalyzer information, so we will fill out the rest.\r\n               int numGeoms = geometryList.Count;\r\n               IList<KeyValuePair<int, SimpleSweptSolidAnalyzer>> newExportAsBRep = new List<KeyValuePair<int, SimpleSweptSolidAnalyzer>>(numGeoms);\r\n               int exportAsBRepCount = exportAsBRep.Count;\r\n               int currIndex = 0;\r\n               for (int ii = 0; ii < numGeoms; ii++)\r\n               {\r\n                  if ((currIndex < exportAsBRepCount) && (ii == exportAsBRep[currIndex].Key))\r\n                  {\r\n                     newExportAsBRep.Add(exportAsBRep[currIndex]);\r\n                     currIndex++;\r\n                  }\r\n                  else\r\n                     newExportAsBRep.Add(new KeyValuePair<int, SimpleSweptSolidAnalyzer>(ii, null));\r\n               }\r\n               exportAsBRep = newExportAsBRep;\r\n            }\r\n         }\r\n\r\n         // If we created some extrusions that we are using (e.g., creating a solid model), and we didn't use an offset transform for the extrusions, don't do it here either.\r\n         bool supportOffsetTransformForBreps = !hasSweptSolidsAsBReps;\r\n         bool disallowOffsetTransformForBreps = ((exportAsExtrusion.Count > 0) && !useOffsetTransformForExtrusions)\r\n               || (element is Part && ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView);\r\n         bool useOffsetTransformForBReps = options.AllowOffsetTransform && supportOffsetTransformForBreps && !disallowOffsetTransformForBreps;\r\n\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            using (TransformSetter transformSetter = TransformSetter.Create())\r\n            {\r\n               if (useOffsetTransformForBReps)\r\n                  bodyData.OffsetTransform = transformSetter.InitializeFromBoundingBox(exporterIFC, bbox, exportBodyParams, element.Location, instanceGeometry, out unscaledTrfOrig);\r\n\r\n               BodyData brepBodyData = ExportBodyAsBRep(exporterIFC, geometryList, exportAsBRep, bodyItems, element, categoryId, overrideMaterialId,\r\n                  contextOfItems, eps, options, bodyData, instanceGeometry:instanceGeometry);\r\n               if (brepBodyData == null)\r\n                  tr.RollBack();\r\n               else\r\n               {\r\n                  XYZ lpOrig = ((bodyData != null) && (bodyData.OffsetTransform != null)) ? UnitUtil.ScaleLength(bodyData.OffsetTransform.Origin) : new XYZ();\r\n                  transformSetter.CreateLocalPlacementFromOffset(exporterIFC, bbox, exportBodyParams, lpOrig, unscaledTrfOrig);\r\n                  tr.Commit();\r\n               }\r\n\r\n               return brepBodyData;\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports list of solids and meshes to IFC body representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"solids\">The solids.</param>\r\n      /// <param name=\"meshes\">The meshes.</param>\r\n      /// <param name=\"options\">The settings for how to export the body.</param>\r\n      /// <param name=\"exportBodyParams\">The extrusion creation data.</param>\r\n      /// <returns>The body data.</returns>\r\n      public static BodyData ExportBody(ExporterIFC exporterIFC,\r\n          Element element,\r\n          ElementId categoryId,\r\n          ElementId overrideMaterialId,\r\n          IList<Solid> solids,\r\n          IList<Mesh> meshes,\r\n          BodyExporterOptions options,\r\n          IFCExportBodyParams exportBodyParams)\r\n      {\r\n         IList<GeometryObject> objects = new List<GeometryObject>();\r\n         foreach (Solid solid in solids)\r\n            objects.Add(solid);\r\n         foreach (Mesh mesh in meshes)\r\n            objects.Add(mesh);\r\n\r\n         return ExportBody(exporterIFC, element, categoryId, overrideMaterialId, objects, options, exportBodyParams);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a geometry object to IFC body representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"geometryObject\">The geometry object.</param>\r\n      /// <param name=\"options\">The settings for how to export the body.</param>\r\n      /// <param name=\"exportBodyParams\">The extrusion creation data.</param>\r\n      /// <returns>The body data.</returns>\r\n      public static BodyData ExportBody(ExporterIFC exporterIFC,\r\n         Element element, ElementId categoryId, ElementId overrideMaterialId,\r\n         GeometryObject geometryObject, BodyExporterOptions options,\r\n         IFCExportBodyParams exportBodyParams)\r\n      {\r\n         IList<GeometryObject> geomList = new List<GeometryObject>();\r\n         if (geometryObject is Solid)\r\n         {\r\n            IList<Solid> splitVolumes = GeometryUtil.SplitVolumes(geometryObject as Solid);\r\n            foreach (Solid solid in splitVolumes)\r\n               geomList.Add(solid);\r\n         }\r\n         else\r\n            geomList.Add(geometryObject);\r\n         return ExportBody(exporterIFC, element, categoryId, overrideMaterialId, geomList, options, exportBodyParams);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a geometry object to IFC body representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"options\">The settings for how to export the body.</param>\r\n      /// <param name=\"exportBodyParams\">The extrusion creation data.</param>\r\n      /// <param name=\"offsetTransform\">The transform used to shift the body to the local origin.</param>\r\n      /// <returns>The body data.</returns>\r\n      public static BodyData ExportBody(ExporterIFC exporterIFC,\r\n         Element element, ElementId categoryId, ElementId overrideMaterialId,\r\n         GeometryElement geometryElement, BodyExporterOptions options,\r\n         IFCExportBodyParams exportBodyParams)\r\n      {\r\n         SolidMeshGeometryInfo info = null;\r\n         IList<GeometryObject> geomList = new List<GeometryObject>();\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAs2x2)\r\n         {\r\n            info = GeometryUtil.GetSplitSolidMeshGeometry(geometryElement);\r\n            IList<Mesh> meshes = info.GetMeshes();\r\n            if (meshes.Count == 0)\r\n            {\r\n               IList<Solid> solidList = info.GetSolids();\r\n               geomList = FamilyExporterUtil.RemoveInvisibleSolidsAndMeshes(element.Document, exporterIFC, ref solidList, ref meshes);\r\n            }\r\n         }\r\n\r\n         if (geomList.Count == 0)\r\n            geomList.Add(geometryElement);\r\n\r\n         return ExportBody(exporterIFC, element, categoryId, overrideMaterialId, geomList,\r\n             options, exportBodyParams);\r\n      }\r\n\r\n      static BodyData SaveMaterialAndFootprintInfo(BodyData bodyData, MaterialAndProfile materialAndProfile, HashSet<FootPrintInfo> footprintInfoSet, bool collectFootprintOption)\r\n      {\r\n         if (materialAndProfile != null)\r\n            bodyData.MaterialAndProfile = materialAndProfile;\r\n         // Export of item with Footprint identifier only in IFC4\r\n         if ((!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4) && (footprintInfoSet.Count > 0 && collectFootprintOption))\r\n         {\r\n            List<CurveLoop> footprintCurveLoops = new List<CurveLoop>();\r\n            foreach (FootPrintInfo finfo in footprintInfoSet)\r\n            {\r\n               footprintCurveLoops.AddRange(finfo.ExtrusionBaseLoops);\r\n            }\r\n            if (bodyData.FootprintInfo != null)\r\n               footprintCurveLoops.AddRange(bodyData.FootprintInfo.ExtrusionBaseLoops);\r\n\r\n            bodyData.FootprintInfo = new FootPrintInfo(footprintCurveLoops, bodyData.OffsetTransform);\r\n         }\r\n\r\n         return bodyData;\r\n      }\r\n\r\n      static IList<(List<List<XYZ>>, Color, double, ElementId)> GetTriangleListsFromSolid(\r\n         ExporterIFC exporterIFC, Element element, GeometryObject geomObject, \r\n         BodyExporterOptions options, Transform trfToUse)\r\n      {\r\n         IDictionary<long, Tuple<List<List<XYZ>>, Color, double>> triangleListDict = \r\n            new SortedDictionary<long, Tuple<List<List<XYZ>>, Color, double>>();\r\n\r\n         Solid geomSolid = geomObject as Solid;\r\n         FaceArray faces = geomSolid.Faces;\r\n\r\n         // The default tessellationLevel is -1, which is illegal for Triangulate.  Get a value in range. \r\n         double tessellationLevel = options.TessellationControls.LevelOfDetail;\r\n         if (tessellationLevel < 0.0)\r\n         {\r\n            tessellationLevel = ((double)ExporterCacheManager.ExportOptionsCache.LevelOfDetail) / 4.0;\r\n         }\r\n\r\n         foreach (Face face in faces)\r\n         {\r\n            Mesh faceTriangulation = face.Triangulate(tessellationLevel);\r\n            if (faceTriangulation == null)\r\n            {\r\n               continue;\r\n            }\r\n\r\n            (List<List<XYZ>> triangleList, Color color, double opacity, ElementId matId) =\r\n               GetTriangleListFromMesh(exporterIFC, element, faceTriangulation, trfToUse, face);\r\n            long matIdAsLong = matId.Value;\r\n            if (!triangleListDict.TryGetValue(matIdAsLong, out Tuple<List<List<XYZ>>, Color, double> currList))\r\n            {\r\n               List<List<XYZ>> emptyTriangleList = new List<List<XYZ>>();\r\n               currList = Tuple.Create(emptyTriangleList, color, opacity);\r\n               triangleListDict[matIdAsLong] = currList;\r\n            }\r\n            currList.Item1.AddRange(triangleList);\r\n         }\r\n\r\n         IList<(List<List<XYZ>>, Color, double, ElementId)> triangleLists = new\r\n            List<(List<List<XYZ>>, Color, double, ElementId)>();\r\n\r\n         foreach (KeyValuePair<long, Tuple<List<List<XYZ>>, Color, double>> data in triangleListDict)\r\n         {\r\n            (List<List<XYZ>>, Color, double, ElementId) triangleList =\r\n               (data.Value.Item1, data.Value.Item2, data.Value.Item3, new ElementId(data.Key));\r\n            triangleLists.Add(triangleList);\r\n         }\r\n\r\n         return triangleLists;\r\n      }\r\n\r\n      static (List<List<XYZ>>, Color, double, ElementId) GetTriangleListFromMesh(\r\n         ExporterIFC exporterIFC, Element element, GeometryObject geomObject, Transform trfToUse, GeometryObject parentObject)\r\n      {\r\n         List<List<XYZ>> triangleList = new List<List<XYZ>>();\r\n         Mesh geomMesh = geomObject as Mesh;\r\n\r\n         for (int ii = 0; ii < geomMesh.NumTriangles; ++ii)\r\n         {\r\n            List<XYZ> triangleVertices = new List<XYZ>();\r\n            MeshTriangle triangle = geomMesh.get_Triangle(ii);\r\n            for (int tri = 0; tri < 3; ++tri)\r\n            {\r\n               XYZ vert = TransformAndScalePoint(exporterIFC, triangle.get_Vertex(tri), trfToUse);\r\n               triangleVertices.Add(vert);\r\n            }\r\n            triangleList.Add(triangleVertices);\r\n         }\r\n\r\n         (Color color, double opacity, ElementId matId) = GetBestColourAndOpacity(element, parentObject ?? geomObject);\r\n         return (triangleList, color, opacity, matId);\r\n      }\r\n\r\n      static IList<double> ColorToRgb(Color color)\r\n      {\r\n         double blueVal = (color?.Blue ?? 127.0) / 255.0;\r\n         double greenVal = (color?.Green ?? 127.0) / 255.0;\r\n         double redVal = (color?.Red ?? 127.0) / 255.0;\r\n         return new List<double>() { redVal, greenVal, blueVal };\r\n      }\r\n\r\n      static IFCAnyHandle ColourRgbListFromColor(IFCFile file, Color matColor)\r\n      {\r\n         IList<IList<double>> colourRgbList = new List<IList<double>>() { ColorToRgb(matColor) };\r\n         return IFCInstanceExporter.CreateColourRgbList(file, colourRgbList);\r\n      }\r\n\r\n      static IFCAnyHandle ColourRgbListFromColors(IFCFile file, IList<Color> matColors)\r\n      {\r\n         IList<IList<double>> colourRgbList = new List<IList<double>>();\r\n         foreach (Color matColor in matColors)\r\n         {\r\n            colourRgbList.Add(ColorToRgb(matColor));\r\n         }\r\n         return IFCInstanceExporter.CreateColourRgbList(file, colourRgbList);\r\n      }\r\n\r\n      static XYZ TransformAndScalePoint(ExporterIFC exporterIFC, XYZ vertex, Transform trf)\r\n      {\r\n         XYZ vertexScaled;\r\n         if (trf == null)\r\n            vertexScaled = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, vertex);\r\n         else\r\n         {\r\n            vertexScaled = trf.OfPoint(UnitUtil.ScaleLength(vertex)); // scale first since the Trf is already scaled;\r\n         }\r\n\r\n         return vertexScaled;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/BodyExporterOptions.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// The class contains input parameters to ExportBody\r\n   /// </summary>\r\n   public class BodyExporterOptions\r\n   {\r\n      public enum BodyTessellationLevel\r\n      {\r\n         Default,\r\n         Coarse\r\n      }\r\n\r\n      /// <summary>\r\n      /// The parameters used in the solid faceter.\r\n      /// </summary>\r\n      private SolidOrShellTessellationControls m_TessellationControls = null;\r\n\r\n      /// <summary>\r\n      /// The tessellation level, used to set the SolidOrShellTessellationControls, and for internal facetation.\r\n      /// </summary>\r\n      private BodyTessellationLevel m_TessellationLevel = BodyTessellationLevel.Default;\r\n\r\n      /// <summary>\r\n      /// Constructs a default BodyExporterOptions object.\r\n      /// </summary>\r\n      private BodyExporterOptions() { }\r\n\r\n      /// <summary>\r\n      /// Constructs a copy of a BodyExporterOptions object.\r\n      /// </summary>\r\n      public BodyExporterOptions(BodyExporterOptions options)\r\n      {\r\n         AllowOffsetTransform = options.AllowOffsetTransform;\r\n         CollectFootprintHandle = options.CollectFootprintHandle;\r\n         CollectMaterialAndProfile = options.CollectMaterialAndProfile;\r\n         CreatingVoid = options.CreatingVoid;\r\n         ExtrusionLocalCoordinateSystem = options.ExtrusionLocalCoordinateSystem;\r\n         TessellationControls = options.TessellationControls;\r\n         TessellationLevel = options.TessellationLevel;\r\n         TryToExportAsExtrusion = options.TryToExportAsExtrusion;\r\n         TryToExportAsSweptSolid = options.TryToExportAsSweptSolid;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set SolidOrShellTessellationControls to use Coarse options. \r\n      /// </summary>\r\n      /// <param name=\"tessellationControls\">The SolidOrShellTessellationControls to modify.</param>\r\n      static public void SetDefaultCoarseTessellationControls(SolidOrShellTessellationControls tessellationControls)\r\n      {\r\n         // Note that this is consistent to how setting Coarse currently works; there could \r\n         // potentially be other options we'd want to tweak upon switching to coarse, but this \r\n         // routine will let us make those changes in one code location.\r\n         tessellationControls.LevelOfDetail = 0.25;\r\n         tessellationControls.MinAngleInTriangle = 0;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs a BodyExporterOptions object with the tryToExportAsExtrusion parameter overridden.\r\n      /// </summary>\r\n      /// <param name=\"tryToExportAsExtrusion\">Export as extrusion if possible.</param>\r\n      /// <param name=\"coarseThreshhold\">The ExportOptionsCache LevelOfDetail value to force coarse vs. default tessellation at.</param>\r\n      /// <remarks>The LevelOfDetail goes ExtraLow, Low, Medium, High.  Setting coarseThreshhold to a value of ExtraLow will force\r\n      /// coarse tessellation for only ExtraLow level of detail.  Setting it to Medium will force coarse tessellation for all but High\r\n      /// level of detail.</remarks>\r\n      public BodyExporterOptions(bool tryToExportAsExtrusion, ExportOptionsCache.ExportTessellationLevel coarseThreshhold)\r\n      {\r\n         TryToExportAsExtrusion = tryToExportAsExtrusion;\r\n         if (ExporterCacheManager.ExportOptionsCache.LevelOfDetail <= coarseThreshhold)\r\n            TessellationLevel = BodyTessellationLevel.Coarse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// True if we are creating void (instead of solid) geometry.\r\n      /// </summary>\r\n      public bool CreatingVoid { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Try to export the solids as extrusions, if possible.\r\n      /// </summary>\r\n      public bool TryToExportAsExtrusion { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// A local coordinate system that, if supplied, allows use of ExtrusionAnalyzer to try to generate extrusion.\r\n      /// </summary>\r\n      public Transform ExtrusionLocalCoordinateSystem { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Try to export the solids as swept solids, if possible.\r\n      /// </summary>\r\n      public bool TryToExportAsSweptSolid { get; set; } = true;\r\n\r\n      /// <summary>\r\n      /// Allow an offset transform for the body.  Set this to false if BodyData is not processed on return.\r\n      /// </summary>\r\n      public bool AllowOffsetTransform { get; set; } = true;\r\n\r\n      /// <summary>\r\n      /// The accuracy parameter used in the solid faceter.\r\n      /// </summary>\r\n      public SolidOrShellTessellationControls TessellationControls\r\n      {\r\n         get\r\n         {\r\n            if (m_TessellationControls == null)\r\n            {\r\n               // Note that, in general, the LevelOfDetail is unused here (it is left at the\r\n               // default -1).  This needs to be taken into account for routines that\r\n               // actually need a valid LevelOfDetail value (from 0 to 1), such as Face.Triangulate().\r\n               m_TessellationControls = new SolidOrShellTessellationControls();\r\n            }\r\n            return m_TessellationControls;\r\n         }\r\n         set { m_TessellationControls = value; }\r\n      }\r\n\r\n      public BodyTessellationLevel TessellationLevel\r\n      {\r\n         get { return m_TessellationLevel; }\r\n\r\n         set\r\n         {\r\n            m_TessellationLevel = value;\r\n            switch (m_TessellationLevel)\r\n            {\r\n               case BodyTessellationLevel.Coarse:\r\n                  {\r\n                     SetDefaultCoarseTessellationControls(TessellationControls);\r\n                     //TessellationControls.MinExternalAngleBetweenTriangles = 2.0 * Math.PI;\r\n                     return;\r\n                  }\r\n               case BodyTessellationLevel.Default:\r\n                  {\r\n                     TessellationControls = null;    // will be recreated by getter if necessary.\r\n                     return;\r\n                  }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Flag to tell whether Material and Profile are to be collected when creating extrusion body. Needed for Ifc*StandardCase (Column, Beam, Member)\r\n      /// </summary>\r\n      public bool CollectMaterialAndProfile { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Flag to tell whether Footprint geometry is to be collected for Ifc*StandardCase (Slab, Plate) \r\n      /// </summary>\r\n      public bool CollectFootprintHandle { get; set; } = false;\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/BoundingBoxExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export the bounding box of a geometry.\r\n   /// </summary>\r\n   public class BoundingBoxExporter\r\n   {\r\n      private static IFCAnyHandle ExportBoundingBoxBase(ExporterIFC exporterIFC, XYZ cornerXYZ, double xDim, double yDim, double zDim)\r\n      {\r\n         double eps = MathUtil.Eps();\r\n         if (xDim < eps || yDim < eps || zDim < eps)\r\n            return null;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle cornerHnd = ExporterUtil.CreateCartesianPoint(file, cornerXYZ);\r\n         IFCAnyHandle boundingBoxItem = IFCInstanceExporter.CreateBoundingBox(file, cornerHnd, xDim, yDim, zDim);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(boundingBoxItem))\r\n            return null;\r\n\r\n         IFCAnyHandle contextOfItems = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Box);\r\n         return RepresentationUtil.CreateBoundingBoxRep(exporterIFC, contextOfItems, boundingBoxItem);\r\n      }\r\n\r\n      private static Transform GetLocalTransform(ExporterIFC exporterIFC)\r\n      {\r\n         // We want to transform the geometry into the current local coordinate system.\r\n         Transform geomTrf = Transform.Identity;\r\n         geomTrf.BasisX = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, XYZ.BasisX);\r\n         geomTrf.BasisY = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, XYZ.BasisY);\r\n         geomTrf.BasisZ = geomTrf.BasisX.CrossProduct(geomTrf.BasisY);\r\n         XYZ scaledOrigin = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, XYZ.Zero);\r\n         geomTrf.Origin = UnitUtil.UnscaleLength(scaledOrigin);\r\n         return geomTrf;\r\n      }\r\n\r\n      private static XYZ NewMinBound(XYZ oldMinBound, IList<XYZ> vertices)\r\n      {\r\n         XYZ minBound = oldMinBound;\r\n         foreach (XYZ vertex in vertices)\r\n            minBound = new XYZ(Math.Min(minBound.X, vertex.X), Math.Min(minBound.Y, vertex.Y), Math.Min(minBound.Z, vertex.Z));\r\n         return minBound;\r\n      }\r\n\r\n      private static XYZ NewMaxBound(XYZ oldMaxBound, IList<XYZ> vertices)\r\n      {\r\n         XYZ maxBound = oldMaxBound;\r\n         foreach (XYZ vertex in vertices)\r\n            maxBound = new XYZ(Math.Max(maxBound.X, vertex.X), Math.Max(maxBound.Y, vertex.Y), Math.Max(maxBound.Z, vertex.Z));\r\n         return maxBound;\r\n      }\r\n\r\n      private static IList<XYZ> TransformVertexList(IList<XYZ> vertices, Transform trf)\r\n      {\r\n         IList<XYZ> transformedVertices = new List<XYZ>();\r\n         foreach (XYZ vertex in vertices)\r\n            transformedVertices.Add(trf.OfPoint(vertex));\r\n         return transformedVertices;\r\n      }\r\n\r\n      // Handles Solid, Mesh, and Face.\r\n      private static BoundingBoxXYZ ComputeApproximateBoundingBox(IList<Solid> solids, IList<Mesh> polymeshes, IList<Face> independentFaces, Transform trf)\r\n      {\r\n         XYZ minBound = new XYZ(1000000000, 1000000000, 1000000000);\r\n         XYZ maxBound = new XYZ(-1000000000, -1000000000, -1000000000);\r\n\r\n         IList<Face> planarFaces = new List<Face>();\r\n         IList<Face> nonPlanarFaces = new List<Face>();\r\n         ICollection<Edge> edgesToTesselate = new HashSet<Edge>();\r\n\r\n         foreach (Face face in independentFaces)\r\n         {\r\n            if (face is PlanarFace)\r\n               planarFaces.Add(face);\r\n            else\r\n               nonPlanarFaces.Add(face);\r\n         }\r\n\r\n         foreach (Solid solid in solids)\r\n         {\r\n            FaceArray faces = solid.Faces;\r\n            IList<Face> solidPlanarFaces = new List<Face>();\r\n            foreach (Face face in faces)\r\n            {\r\n               if (face is PlanarFace)\r\n                  solidPlanarFaces.Add(face);\r\n               else\r\n                  nonPlanarFaces.Add(face);\r\n            }\r\n\r\n            if (solidPlanarFaces.Count() == faces.Size)\r\n            {\r\n               foreach (Edge edge in solid.Edges)\r\n                  edgesToTesselate.Add(edge);\r\n            }\r\n            else\r\n            {\r\n               foreach (Face planarFace in solidPlanarFaces)\r\n                  planarFaces.Add(planarFace);\r\n            }\r\n         }\r\n\r\n         foreach (Face planarFace in planarFaces)\r\n         {\r\n            EdgeArrayArray edgeLoops = planarFace.EdgeLoops;\r\n            foreach (EdgeArray edgeLoop in edgeLoops)\r\n            {\r\n               foreach (Edge edge in edgeLoop)\r\n                  edgesToTesselate.Add(edge);\r\n            }\r\n         }\r\n\r\n         foreach (Edge edge in edgesToTesselate)\r\n         {\r\n            IList<XYZ> edgeVertices = edge.Tessellate();\r\n            IList<XYZ> transformedEdgeVertices = TransformVertexList(edgeVertices, trf);\r\n            minBound = NewMinBound(minBound, transformedEdgeVertices);\r\n            maxBound = NewMaxBound(maxBound, transformedEdgeVertices);\r\n         }\r\n\r\n         foreach (Face nonPlanarFace in nonPlanarFaces)\r\n         {\r\n            Mesh faceMesh = nonPlanarFace.Triangulate();\r\n            polymeshes.Add(faceMesh);\r\n         }\r\n\r\n         foreach (Mesh mesh in polymeshes)\r\n         {\r\n            IList<XYZ> vertices = mesh.Vertices;\r\n            IList<XYZ> transformedVertices = TransformVertexList(vertices, trf);\r\n            minBound = NewMinBound(minBound, transformedVertices);\r\n            maxBound = NewMaxBound(maxBound, transformedVertices);\r\n         }\r\n\r\n         BoundingBoxXYZ boundingBox = new BoundingBoxXYZ();\r\n         boundingBox.set_Bounds(0, minBound);\r\n         boundingBox.set_Bounds(1, maxBound);\r\n         return boundingBox;\r\n      }\r\n\r\n      private static IFCAnyHandle ExportBoundingBoxFromGeometry(ExporterIFC exporterIFC, IList<Solid> solids, IList<Mesh> meshes, IList<Face> faces,\r\n          Transform trf)\r\n      {\r\n         if (solids.Count == 0 && meshes.Count == 0 && faces.Count == 0)\r\n            return null;\r\n\r\n         Transform geomTrf = GetLocalTransform(exporterIFC);\r\n         geomTrf = geomTrf.Multiply(trf);\r\n\r\n         // We want to transform the geometry into the current local coordinate system.\r\n         BoundingBoxXYZ boundingBox = ComputeApproximateBoundingBox(solids, meshes, faces, geomTrf);\r\n\r\n         XYZ cornerXYZ = UnitUtil.ScaleLength(boundingBox.Min);\r\n         XYZ sizeXYZ = UnitUtil.ScaleLength(boundingBox.Max) - cornerXYZ;\r\n         return ExportBoundingBoxBase(exporterIFC, cornerXYZ, sizeXYZ.X, sizeXYZ.Y, sizeXYZ.Z);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates the bounding box representation corresponding to a particular geometry.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporterIFC.</param>\r\n      /// <param name=\"geomElement\">The geometry of the element.</param>\r\n      /// <param name=\"trf\">An extra transform to apply, generally used for families.</param>\r\n      /// <returns>The handle to the bounding box representation, or null if not valid or not exported.</returns>\r\n      public static IFCAnyHandle ExportBoundingBox(ExporterIFC exporterIFC, GeometryElement geomElement, Transform trf)\r\n      {\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportBoundingBox)\r\n            return null;\r\n\r\n         if (geomElement == null)\r\n            return null;\r\n\r\n         SolidMeshGeometryInfo solidMeshCapsule = GeometryUtil.GetSolidMeshGeometry(geomElement, Transform.Identity);\r\n         IList<Solid> solids = solidMeshCapsule.GetSolids();\r\n         IList<Mesh> meshes = solidMeshCapsule.GetMeshes();\r\n         IList<Face> faces = new List<Face>();\r\n         return ExportBoundingBoxFromGeometry(exporterIFC, solids, meshes, faces, trf);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates the bounding box representation corresponding to a particular geometry.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporterIFC.</param>\r\n      /// <param name=\"solids\">The list of solids.</param>\r\n      /// <param name=\"meshes\">The list of meshes.</param>\r\n      /// <param name=\"trf\">An extra transform to apply, generally used for families.</param>\r\n      /// <returns>The handle to the bounding box representation, or null if not valid or not exported.</returns>\r\n      public static IFCAnyHandle ExportBoundingBox(ExporterIFC exporterIFC, IList<Solid> solids, IList<Mesh> meshes, Transform trf)\r\n      {\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportBoundingBox)\r\n            return null;\r\n\r\n         IList<Face> faces = new List<Face>();\r\n         return ExportBoundingBoxFromGeometry(exporterIFC, solids, meshes, faces, trf);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates the bounding box representation corresponding to a particular geometry.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// Only handle Solid, Mesh, and Face GeometryObjects.\r\n      /// </remarks>\r\n      /// <param name=\"exporterIFC\">The exporterIFC.</param>\r\n      /// <param name=\"geometryObjects\">The list of objects.</param>\r\n      /// <param name=\"trf\">An extra transform to apply, generally used for families.</param>\r\n      /// <returns>The handle to the bounding box representation, or null if not valid or not exported.</returns>\r\n      public static IFCAnyHandle ExportBoundingBox(ExporterIFC exporterIFC, IList<GeometryObject> geometryObjects, Transform trf)\r\n      {\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportBoundingBox)\r\n            return null;\r\n\r\n         IList<Solid> solids = new List<Solid>();\r\n         IList<Mesh> meshes = new List<Mesh>();\r\n         IList<Face> faces = new List<Face>();\r\n\r\n         foreach (GeometryObject geometryObject in geometryObjects)\r\n         {\r\n            if (geometryObject is Solid)\r\n               solids.Add(geometryObject as Solid);\r\n            else if (geometryObject is Mesh)\r\n               meshes.Add(geometryObject as Mesh);\r\n            else if (geometryObject is Face)\r\n               faces.Add(geometryObject as Face);\r\n         }\r\n\r\n         return ExportBoundingBoxFromGeometry(exporterIFC, solids, meshes, faces, trf);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/CeilingExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Enums;\r\nusing System.Windows.Forms;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export ceilings.\r\n   /// </summary>\r\n   class CeilingExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports a ceiling to IFC covering.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"ceiling\">\r\n      /// The ceiling element to be exported.\r\n      /// </param>\r\n      /// <param name=\"geomElement\">\r\n      /// The geometry element.\r\n      /// </param>\r\n      /// <param name=\"productWrapper\">\r\n      /// The ProductWrapper.\r\n      /// </param>\r\n      public static void ExportCeilingElement(ExporterIFC exporterIFC, Ceiling ceiling, ref GeometryElement geomElement, ProductWrapper productWrapper)\r\n      {\r\n         string ifcEnumType = ExporterUtil.GetIFCTypeFromExportTable(ceiling);\r\n         string pdefFromParam = ExporterUtil.GetExportTypeFromTypeParameter(ceiling, null);\r\n         if (!string.IsNullOrEmpty(pdefFromParam))\r\n            ifcEnumType = pdefFromParam;\r\n         if (string.IsNullOrEmpty(ifcEnumType))\r\n            ifcEnumType = \"CEILING\";\r\n         ExportCovering(exporterIFC, ceiling, ref geomElement, ifcEnumType, productWrapper);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports an element as IFC covering.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element to be exported.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportCovering(ExporterIFC exporterIFC, Element element, ref GeometryElement geomElem, string ifcEnumType, ProductWrapper productWrapper)\r\n      {\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         IFCEntityType elementClassTypeEnum = IFCEntityType.IfcCovering;\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         MaterialLayerSetInfo layersetInfo = new(exporterIFC, element, productWrapper);\r\n\r\n         using (IFCTransaction transaction = new(file))\r\n         {\r\n            // For IFC4RV export, Element will be split into its parts(temporarily) in order to export the wall by its parts\r\n            ExporterUtil.ExportPartAs exportPartAs = ExporterUtil.CanExportParts(element);\r\n            bool exportByComponents = exportPartAs == ExporterUtil.ExportPartAs.ShapeAspect;\r\n            bool exportParts = exportPartAs == ExporterUtil.ExportPartAs.Part;\r\n            // If Parts are created by code and not by user then their name should be equal to Material name.\r\n            bool setMaterialNameToPartName = false;\r\n            if (ExporterCacheManager.TemporaryPartsCache.HasTemporaryParts(element.Id))\r\n            {\r\n               setMaterialNameToPartName = true;\r\n               ExporterCacheManager.TemporaryPartsCache.SetPartExportType(element.Id, exportPartAs);\r\n            }\r\n\r\n            if (exportParts && !PartExporter.CanExportElementInPartExport(element, element.LevelId, false))\r\n            {\r\n               return;\r\n            }\r\n\r\n            // Check for containment override\r\n            List<IFCAnyHandle> representations = new();\r\n\r\n            using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, element, null))\r\n            {\r\n               using (IFCExportBodyParams ecData = new())\r\n               {\r\n                  ElementId categoryId = CategoryUtil.GetSafeCategoryId(element);\r\n\r\n                  IFCAnyHandle prodRep = null;\r\n                  if (!exportParts)\r\n                  {\r\n                     ecData.SetLocalPlacement(setter.LocalPlacement);\r\n                     ecData.PossibleExtrusionAxes = (element is FamilyInstance) ? IFCExtrusionAxes.TryXYZ : IFCExtrusionAxes.TryZ;\r\n\r\n                     BodyExporterOptions bodyExporterOptions = new(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n                     if (!exportByComponents)\r\n                     {\r\n                        //When elements are part of an assembly, their relative positions to other assembly components must be preserved exactly.\r\n                        //Applying offset transformations could misalign components within the assembly.\r\n                        bool allowOffsetTransform = !ExporterUtil.IsContainedInAssembly(element);\r\n\r\n                        prodRep = RepresentationUtil.CreateAppropriateProductDefinitionShape(exporterIFC, element,\r\n                            categoryId, geomElem, bodyExporterOptions, null, ecData, allowOffsetTransform);\r\n                        if (IFCAnyHandleUtil.IsNullOrHasNoValue(prodRep))\r\n                        {\r\n                           ecData.ClearOpenings();\r\n                           return;\r\n                        }\r\n                     }\r\n                  }\r\n\r\n                  // We will use the category of the element to set a default value for the covering.\r\n                  string defaultCoveringEnumType = null;\r\n\r\n                  if (categoryId == new ElementId(BuiltInCategory.OST_Ceilings))\r\n                     defaultCoveringEnumType = \"CEILING\";\r\n                  else if (categoryId == new ElementId(BuiltInCategory.OST_Floors))\r\n                     defaultCoveringEnumType = \"FLOORING\";\r\n                  else if (categoryId == new ElementId(BuiltInCategory.OST_Roofs))\r\n                     defaultCoveringEnumType = \"ROOFING\";\r\n\r\n                  string instanceGUID = GUIDUtil.CreateGUID(element);\r\n                  string coveringType = IFCValidateEntry.GetValidIFCPredefinedTypeType(ifcEnumType, defaultCoveringEnumType, \"IfcCoveringType\");\r\n\r\n                  if (exportByComponents)\r\n                  {\r\n                     prodRep = RepresentationUtil.CreateProductDefinitionShapeWithoutBodyRep(exporterIFC, element, categoryId, geomElem, representations);\r\n                     IFCAnyHandle hostShapeRepFromParts = PartExporter.ExportHostPartAsShapeAspects(exporterIFC, \r\n                        element, prodRep, ElementId.InvalidElementId, layersetInfo, ecData);\r\n                  }\r\n\r\n                  if (ExporterCacheManager.ExportCeilingGrids())\r\n                  {\r\n                     IList<Curve> ceilingGridLines = (element as Ceiling)?.GetCeilingGridLines(true);\r\n                     HashSet<IFCAnyHandle> repItems = new();\r\n                     if (ceilingGridLines != null)\r\n                     {\r\n                        Transform localPlacementOffset = ExporterUtil.GetTransformFromLocalPlacementHnd(setter.LocalPlacement, true);\r\n                        if (localPlacementOffset.IsIdentity)\r\n                        {\r\n                           localPlacementOffset = null;\r\n                        }\r\n                        else\r\n                        {\r\n                           localPlacementOffset = localPlacementOffset.Inverse;\r\n                        }\r\n\r\n                        foreach (Curve ceilingGrid in ceilingGridLines)\r\n                        {\r\n                           Curve transformedCeilingGrid = \r\n                              localPlacementOffset != null ? ceilingGrid.CreateTransformed(localPlacementOffset) : ceilingGrid;\r\n                           repItems.AddIfNotNull(GeometryUtil.CreateIFCCurveFromRevitCurve(file, exporterIFC,\r\n                              transformedCeilingGrid, false, null, GeometryUtil.TrimCurvePreference.UsePolyLineOrTrim));\r\n                        }\r\n                     }\r\n\r\n                     if (repItems.Count > 0)\r\n                     {\r\n                        IFCAnyHandle contextOfItemsFootprint = exporterIFC.Get3DContextHandle(\"FootPrint\");\r\n                        IFCAnyHandle footprintShapeRep = RepresentationUtil.CreateBaseShapeRepresentation(exporterIFC, contextOfItemsFootprint,\r\n                           \"FootPrint\", \"Curve2D\", repItems);\r\n                        List<IFCAnyHandle> newRep = new() { footprintShapeRep };\r\n                        IFCAnyHandleUtil.AddRepresentations(prodRep, newRep);\r\n                     }\r\n                  }\r\n\r\n\r\n                  IFCAnyHandle covering = IFCInstanceExporter.CreateCovering(exporterIFC, element, instanceGUID, ExporterCacheManager.OwnerHistoryHandle,\r\n                      setter.LocalPlacement, prodRep, coveringType);\r\n\r\n                  ExporterCacheManager.ElementToHandleCache.Register(element.Id, covering);\r\n\r\n                  if (exportParts)\r\n                  {\r\n                     PartExporter.ExportHostPart(exporterIFC, element, covering, setter, setter.LocalPlacement, null, setMaterialNameToPartName);\r\n                  }\r\n                  \r\n\r\n                  ExporterUtil.AddIntoComplexPropertyCache(covering, layersetInfo);\r\n\r\n                  IFCExportInfoPair exportInfo = new(IFCEntityType.IfcCovering, IFCEntityType.IfcCoveringType, coveringType);\r\n                  IFCAnyHandle typeHnd = ExporterUtil.CreateGenericTypeFromElement(element, exportInfo, file, productWrapper);\r\n                  ExporterCacheManager.TypeRelationsCache.Add(typeHnd, covering);\r\n\r\n                  bool containInSpace = false;\r\n                  IFCAnyHandle localPlacementToUse = setter.LocalPlacement;\r\n\r\n                  // Ceiling containment in Space is generally required and not specific to any view\r\n                  if (ExporterCacheManager.CeilingSpaceRelCache.ContainsKey(element.Id))\r\n                  {\r\n                     IList<ElementId> roomlist = ExporterCacheManager.CeilingSpaceRelCache[element.Id];\r\n\r\n                     // Process Ceiling to be contained in a Space only when it is exactly bounding one Space\r\n                     if (roomlist.Count == 1)\r\n                     {\r\n                        productWrapper.AddElement(element, covering, setter, ecData, false, exportInfo);\r\n\r\n                        // Modify the Ceiling placement to be relative to the Space that it bounds \r\n                        IFCAnyHandle roomPlacement = IFCAnyHandleUtil.GetObjectPlacement(ExporterCacheManager.SpaceInfoCache.FindSpaceHandle(roomlist[0]));\r\n                        Transform relTrf = ExporterIFCUtils.GetRelativeLocalPlacementOffsetTransform(roomPlacement, localPlacementToUse);\r\n                        Transform inverseTrf = relTrf.Inverse;\r\n                        IFCAnyHandle relLocalPlacement = ExporterUtil.CreateAxis2Placement3D(file, inverseTrf.Origin, inverseTrf.BasisZ, inverseTrf.BasisX);\r\n                        IFCAnyHandleUtil.SetAttribute(localPlacementToUse, \"PlacementRelTo\", roomPlacement);\r\n                        GeometryUtil.SetRelativePlacement(localPlacementToUse, relLocalPlacement);\r\n\r\n                        ExporterCacheManager.SpaceInfoCache.RelateToSpace(roomlist[0], covering);\r\n                        containInSpace = true;\r\n                     }\r\n                  }\r\n\r\n                  // if not contained in Space, assign it to default containment in Level\r\n                  if (!containInSpace)\r\n                     productWrapper.AddElement(element, covering, setter, ecData, true, exportInfo);\r\n\r\n                  if (!exportParts)\r\n                  {\r\n                     Ceiling ceiling = element as Ceiling;\r\n                     if (ceiling != null)\r\n                     {\r\n                        HostObjectExporter.ExportHostObjectMaterials(exporterIFC, ceiling, covering,\r\n                            geomElem, productWrapper, ElementId.InvalidElementId, IFCLayerSetDirection.Axis3, null, null);\r\n                     }\r\n                     else\r\n                     {\r\n                        ElementId matId = BodyExporter.GetBestMaterialIdFromGeometryOrParameter(geomElem, element);\r\n                        CategoryUtil.CreateMaterialAssociation(exporterIFC, covering, matId);\r\n                     }\r\n                  }\r\n\r\n                  OpeningUtil.CreateOpeningsIfNecessary(covering, element, ecData, null,\r\n                      exporterIFC, ecData.GetLocalPlacement(), setter, productWrapper);\r\n               }\r\n            }\r\n            transaction.Commit();\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/ConnectorExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Mechanical;\r\nusing Autodesk.Revit.DB.Plumbing;\r\nusing Autodesk.Revit.DB.Electrical;\r\nusing Autodesk.Revit;\r\n\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export MEP Connectors.\r\n   /// </summary>\r\n   class ConnectorExporter\r\n   {\r\n      private static IDictionary<IFCAnyHandle, IList<IFCAnyHandle>> m_NestedMembershipDict = new Dictionary<IFCAnyHandle, IList<IFCAnyHandle>>();\r\n\r\n      private static IDictionary<string, IList<Toolkit.IFC4.IFCDistributionSystem>> m_SystemClassificationToIFC;\r\n\r\n      private static bool ExportPorts = true;\r\n      /// <summary>\r\n      /// Exports a connector instance. Almost verbatim exmaple from Revit 2012 API for Connector Class\r\n      /// Works only for HVAC and Piping for now\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      public static void Export(ExporterIFC exporterIFC)\r\n      {\r\n         ExportPorts = !ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(IFCEntityType.IfcDistributionPort);\r\n\r\n         foreach (ConnectorSet connectorSet in ExporterCacheManager.MEPCache.MEPConnectors)\r\n         {\r\n            Export(exporterIFC, connectorSet);\r\n         }\r\n\r\n         foreach (KeyValuePair<Connector, IFCAnyHandle> connector in ExporterCacheManager.MEPCache.ConnectorCache)\r\n         {\r\n            ExportConnectorProperties(exporterIFC, connector.Key, connector.Value);\r\n         }\r\n\r\n\r\n         // Create all the IfcRelNests relationships from the Dictionary for Port connection in IFC4\r\n         CreateRelNestsFromCache(exporterIFC.GetFile());\r\n\r\n         // clear local cache \r\n         ConnectorExporter.ClearConnections();\r\n      }\r\n\r\n      // If originalConnector != null, use that connector for AddConnection routine, instead of connector.\r\n      private static void ProcessConnections(ExporterIFC exporterIFC, Connector connector, Connector originalConnector)\r\n      {\r\n         // Port connection is not allowed for IFC4RV MVD\r\n         bool isIFC4AndAbove = !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4;\r\n\r\n         Domain domain = connector.Domain;\r\n         bool isElectricalDomain = (domain == Domain.DomainElectrical);\r\n         bool supportsDirection = (domain == Domain.DomainHvac || domain == Domain.DomainPiping);\r\n\r\n         ConnectorType connectorType = connector.ConnectorType;\r\n         if (connectorType == ConnectorType.End ||\r\n            connectorType == ConnectorType.Curve ||\r\n            connectorType == ConnectorType.Physical)\r\n         {\r\n\r\n            Connector originalConnectorToUse = originalConnector ?? connector;\r\n            FlowDirectionType flowDirection = supportsDirection ? connector.Direction : FlowDirectionType.Bidirectional;\r\n            bool isBiDirectional = (flowDirection == FlowDirectionType.Bidirectional);\r\n            if (connector.IsConnected)\r\n            {\r\n               ConnectorSet connectorSet = connector.AllRefs;\r\n               ConnectorSetIterator csi = connectorSet.ForwardIterator();\r\n\r\n               while (csi.MoveNext())\r\n               {\r\n                  Connector connected = csi.Current as Connector;\r\n                  if (connected != null && connected.Owner != null && connector.Owner != null)\r\n                  {\r\n                     if (connected.Owner.Id != connector.Owner.Id)\r\n                     {\r\n                        // look for physical connections\r\n                        ConnectorType connectedType = connected.ConnectorType;\r\n                        if (connectedType == ConnectorType.End ||\r\n                           connectedType == ConnectorType.Curve ||\r\n                           connectedType == ConnectorType.Physical)\r\n                        {\r\n                           if (flowDirection == FlowDirectionType.Out)\r\n                           {\r\n                              AddConnection(exporterIFC, connected, originalConnectorToUse, false, isElectricalDomain);\r\n                           }\r\n                           else\r\n                           {\r\n                              AddConnection(exporterIFC, originalConnectorToUse, connected, isBiDirectional, isElectricalDomain);\r\n                           }\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n            else\r\n            {\r\n               Element hostElement = connector.Owner;\r\n               IFCAnyHandle hostElementIFCHandle = ExporterCacheManager.MEPCache.Find(hostElement.Id);               \r\n               // Orphaned ports aren't allowed in IFC\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(hostElementIFCHandle))\r\n                  return;\r\n\r\n               IFCAnyHandle portHnd = null;\r\n               if (ExportPorts)\r\n               {\r\n                  IFCFlowDirection flowDir = (isBiDirectional) ? IFCFlowDirection.SourceAndSink : (flowDirection == FlowDirectionType.Out ? IFCFlowDirection.Source : IFCFlowDirection.Sink);\r\n                  string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n                     GUIDUtil.CreateGUIDString(hostElement,\r\n                     IFCEntityType.IfcDistributionPort.ToString() + \" Connector: \" + connector.Id.ToString()));\r\n\r\n                  IFCAnyHandle localPlacement = CreateLocalPlacementForConnector(exporterIFC, connector, hostElementIFCHandle, flowDir);\r\n                  IFCFile ifcFile = exporterIFC.GetFile();\r\n                  IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n                  portHnd = IFCInstanceExporter.CreateDistributionPort(exporterIFC, null, guid,\r\n                     ownerHistory, localPlacement, null, flowDir);\r\n                  string portType = \"Flow\";   // Assigned as Port.Description\r\n                  ExporterCacheManager.MEPCache.CacheConnectorHandle(connector, portHnd);\r\n                  SetDistributionPortAttributes(portHnd, connector, portType, hostElement.Id, ref flowDir);\r\n\r\n\r\n                  // Port connection is changed in IFC4 to use IfcRelNests for static connection. IfcRelConnectsPortToElement is used for a dynamic connection and it is restricted to IfcDistributionElement\r\n                  // The following code collects the ports that are nested to the object to be assigned later\r\n                  if (isIFC4AndAbove)\r\n                  {\r\n                     AddNestedMembership(hostElementIFCHandle, portHnd);\r\n                  }\r\n                  else\r\n                  {\r\n                     // Attach the port to the element\r\n                     string relGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                        GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelConnectsPortToElement, connector.Id.ToString(), portHnd));\r\n                     string connectionName = hostElement.Id + \"|\" + guid;\r\n                     IFCInstanceExporter.CreateRelConnectsPortToElement(ifcFile, relGuid, ownerHistory, connectionName, portType, portHnd, hostElementIFCHandle);\r\n                  }\r\n               }\r\n\r\n               HashSet<MEPSystem> systemList = new HashSet<MEPSystem>();\r\n               try\r\n               {\r\n                  MEPSystem system = connector.MEPSystem;\r\n                  if (system != null)\r\n                     systemList.Add(system);\r\n               }\r\n               catch\r\n               {\r\n               }\r\n\r\n               if (isElectricalDomain)\r\n               {\r\n                  foreach (MEPSystem system in systemList)\r\n                  {\r\n                     ExporterCacheManager.SystemsCache.AddElectricalSystem(system.Id);\r\n                     ExporterCacheManager.SystemsCache.AddHandleToElectricalSystem(system.Id, hostElementIFCHandle);\r\n                     ExporterCacheManager.SystemsCache.AddHandleToElectricalSystem(system.Id, portHnd);\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  foreach (MEPSystem system in systemList)\r\n                  {\r\n                     ExporterCacheManager.SystemsCache.AddHandleToBuiltInSystem(system, hostElementIFCHandle);\r\n                     ExporterCacheManager.SystemsCache.AddHandleToBuiltInSystem(system, portHnd);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      private class ConnectorComparer : IComparer<Connector>\r\n      {\r\n         /// <summary>\r\n         /// Compares 2 Connectors.\r\n         /// </summary>\r\n         /// <param name=\"c1\">The first Connector.</param>\r\n         /// <param name=\"c2\">The second Connector.</param>\r\n         /// <returns>-1 if c1 is less than c2, 1 if c1 is greater than c2, and 0 if c1 is c2.</returns>\r\n         public int Compare(Connector c1, Connector c2)\r\n         {\r\n            long c1OwnerId = c1?.Owner?.Id.Value ?? -1;\r\n            long c2OwnerId = c2?.Owner?.Id.Value ?? -1;\r\n            if (c1OwnerId < c2OwnerId)\r\n               return -1;\r\n            if (c1OwnerId > c2OwnerId)\r\n               return 1;\r\n\r\n            int c1ConnectorId = c1?.Id ?? -1;\r\n            int c2ConnectorId = c2?.Id ?? -1;\r\n            if (c1ConnectorId < c2ConnectorId)\r\n               return -1;\r\n            if (c1ConnectorId > c2ConnectorId)\r\n               return 1;\r\n            return 0;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a connector instance. Almost verbatim exmaple from Revit 2012 API for Connector Class\r\n      /// Works only for HVAC and Piping for now\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"connectors\">The ConnectorSet object.</param>\r\n      private static void Export(ExporterIFC exporterIFC, ConnectorSet connectors)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            ISet<Connector> stableSortedConnectors = new SortedSet<Connector>(new ConnectorComparer());\r\n            foreach (Connector connector in connectors)\r\n            {\r\n               if (connector != null)\r\n                  stableSortedConnectors.Add(connector);\r\n            }\r\n               \r\n            foreach (Connector connector in stableSortedConnectors)\r\n            {\r\n               try\r\n               {\r\n                  ProcessConnections(exporterIFC, connector, null);\r\n               }\r\n               catch (Exception)\r\n               {\r\n                  // Log an error here\r\n               }\r\n            }\r\n            tr.Commit();\r\n         }\r\n      }\r\n\r\n      static IFCAnyHandle CreateLocalPlacementForConnector(ExporterIFC exporterIFC, Connector connector, IFCAnyHandle elementHandle,\r\n         IFCFlowDirection flowDir)\r\n      {\r\n         try\r\n         {\r\n            IFCFile file = exporterIFC.GetFile();\r\n\r\n            IFCAnyHandle elementPlacement = IFCAnyHandleUtil.GetObjectPlacement(elementHandle);\r\n            Transform origTrf = ExporterIFCUtils.GetUnscaledTransform(exporterIFC, elementPlacement);\r\n\r\n            Transform connectorCoordinateSystem = connector.CoordinateSystem;\r\n            if (flowDir == IFCFlowDirection.Sink)\r\n            {\r\n               // Reverse the direction of the connector.\r\n               connectorCoordinateSystem.BasisX = -connectorCoordinateSystem.BasisX;\r\n               connectorCoordinateSystem.BasisZ = -connectorCoordinateSystem.BasisZ;\r\n            }\r\n\r\n            Transform relTransform = origTrf.Inverse.Multiply(connectorCoordinateSystem);\r\n            XYZ scaledOrigin = UnitUtil.ScaleLength(relTransform.Origin);\r\n\r\n            IFCAnyHandle relLocalPlacement = ExporterUtil.CreateAxis2Placement3D(file,\r\n               scaledOrigin, relTransform.BasisZ, relTransform.BasisX);\r\n\r\n            return IFCInstanceExporter.CreateLocalPlacement(file, elementPlacement, relLocalPlacement);\r\n         }\r\n         catch\r\n         {\r\n\r\n         }\r\n         return null;\r\n      }\r\n\r\n      static void AddConnection(ExporterIFC exporterIFC, Connector connector, Connector connected, bool isBiDirectional, bool isElectricalDomain)\r\n      {\r\n         // Port connection is changed in IFC4 to use IfcRelNests for static connection. IfcRelConnectsPortToElement is used for a dynamic connection and it is restricted to IfcDistributionElement\r\n         bool isIFC4AndAbove = !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4;\r\n\r\n         Element inElement = connector.Owner;\r\n         Element outElement = connected.Owner;\r\n\r\n         if (isElectricalDomain)\r\n         {\r\n            // We may get a connection back to the original element.  Ignore it.\r\n            if (inElement.Id == outElement.Id)\r\n               return;\r\n\r\n            // Check the outElement to see if it is a Wire; if so, get its connections and \"skip\" the wire.\r\n            Wire wire = outElement as Wire;\r\n            if (wire != null)\r\n            {\r\n               if (m_ProcessedWires.Contains(outElement.Id))\r\n                  return;\r\n               m_ProcessedWires.Add(outElement.Id);\r\n\r\n               MEPSystem system = wire.MEPSystem;\r\n               if (system != null)\r\n               {\r\n                  ExporterCacheManager.SystemsCache.AddElectricalSystem(system.Id);\r\n               }\r\n\r\n               try\r\n               {\r\n                  ConnectorSet wireConnectorSet = MEPCache.GetConnectorsForWire(wire);\r\n                  if (wireConnectorSet != null)\r\n                  {\r\n                     foreach (Connector connectedToWire in wireConnectorSet)\r\n                        ProcessConnections(exporterIFC, connectedToWire, connector);\r\n                  }\r\n               }\r\n               catch\r\n               {\r\n               }\r\n               return;\r\n            }\r\n         }\r\n\r\n         // Check if the connection already exist\r\n         if (ConnectionExists(inElement.Id, outElement.Id))\r\n            return;\r\n\r\n         if (isBiDirectional)\r\n         {\r\n            if (ConnectionExists(outElement.Id, inElement.Id))\r\n               return;\r\n         }\r\n\r\n         IFCAnyHandle inElementIFCHandle = ExporterCacheManager.MEPCache.Find(inElement.Id);\r\n         IFCAnyHandle outElementIFCHandle = ExporterCacheManager.MEPCache.Find(outElement.Id);\r\n\r\n         // Note: In IFC4 the IfcRelConnectsPortToElement should be used for a dynamic connection. The static connection should use IfcRelNests\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            if (inElementIFCHandle == null || outElementIFCHandle == null ||\r\n               !IFCAnyHandleUtil.IsSubTypeOf(inElementIFCHandle, IFCEntityType.IfcObjectDefinition)\r\n               || !IFCAnyHandleUtil.IsSubTypeOf(outElementIFCHandle, IFCEntityType.IfcObjectDefinition))\r\n               return;\r\n         }\r\n         else\r\n         {\r\n            if (inElementIFCHandle == null || outElementIFCHandle == null ||\r\n               !IFCAnyHandleUtil.IsSubTypeOf(inElementIFCHandle, IFCEntityType.IfcElement)\r\n               || !IFCAnyHandleUtil.IsSubTypeOf(outElementIFCHandle, IFCEntityType.IfcElement))\r\n               return;\r\n         }\r\n\r\n         IFCFile ifcFile = exporterIFC.GetFile();\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n         IFCAnyHandle portOut = null;\r\n         IFCAnyHandle portIn = null;\r\n\r\n         if (ExportPorts)\r\n         {\r\n\r\n            // Note: the GUIDs below are stable under the assumption that there is only one distribution\r\n            // port from element A to element B.  Also, note that we don't need the \"real\" GUIDs for these\r\n            // elements, just stable ones.\r\n            string inGuid = ExportUtils.GetExportId(inElement.Document, inElement.Id).ToString();\r\n            string outGuid = ExportUtils.GetExportId(outElement.Document, outElement.Id).ToString();\r\n\r\n            string portInGuid = null;\r\n            string portOutGuid = null;\r\n\r\n            // ----------------------- In Port ----------------------\r\n            {\r\n               portInGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(\"InPort\" + connector.Id, inElement, outElement));\r\n               IFCFlowDirection flowDir = (isBiDirectional) ? IFCFlowDirection.SourceAndSink : IFCFlowDirection.Sink;\r\n\r\n               IFCAnyHandle localPlacement = CreateLocalPlacementForConnector(exporterIFC, connector, inElementIFCHandle, flowDir);\r\n\r\n               portIn = IFCInstanceExporter.CreateDistributionPort(exporterIFC, null, portInGuid, ownerHistory, localPlacement, null, flowDir);\r\n               string portType = \"Flow\";   // Assigned as Port.Description\r\n               ExporterCacheManager.MEPCache.CacheConnectorHandle(connector, portIn);\r\n               SetDistributionPortAttributes(portIn, connector, portType, inElement.Id, ref flowDir);\r\n\r\n               // Attach the port to the element\r\n               string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(\"InPortRelConnects\" + connector.Id, inElement, outElement));\r\n               string connectionName = inElement.Id + \"|\" + guid;\r\n\r\n               // Port connection is changed in IFC4 to use IfcRelNests for static connection. IfcRelConnectsPortToElement is used for a dynamic connection and it is restricted to IfcDistributionElement\r\n               // The following code collects the ports that are nested to the object to be assigned later\r\n               if (isIFC4AndAbove)\r\n                  AddNestedMembership(inElementIFCHandle, portIn);\r\n               else\r\n                  IFCInstanceExporter.CreateRelConnectsPortToElement(ifcFile, guid, ownerHistory, connectionName, portType, portIn, inElementIFCHandle);\r\n            }\r\n\r\n            // ----------------------- Out Port----------------------\r\n            {\r\n               portOutGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(\"OutPort\" + connector.Id, outElement, inElement));\r\n               IFCFlowDirection flowDir = (isBiDirectional) ? IFCFlowDirection.SourceAndSink : IFCFlowDirection.Source;\r\n\r\n               IFCAnyHandle localPlacement = CreateLocalPlacementForConnector(exporterIFC, connected, outElementIFCHandle, flowDir);\r\n\r\n               portOut = IFCInstanceExporter.CreateDistributionPort(exporterIFC, null, portOutGuid, ownerHistory, localPlacement, null, flowDir);\r\n               string portType = \"Flow\";   // Assigned as Port.Description\r\n               ExporterCacheManager.MEPCache.CacheConnectorHandle(connected, portOut);\r\n               SetDistributionPortAttributes(portOut, connected, portType, outElement.Id, ref flowDir);\r\n\r\n               // Attach the port to the element\r\n               string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(\"OutPortRelConnects\" + connector.Id.ToString(), outElement, inElement));\r\n               string connectionName = outElement.Id + \"|\" + guid;\r\n\r\n               // Port connection is changed in IFC4 to use IfcRelNests for static connection. IfcRelConnectsPortToElement is used for a dynamic connection and it is restricted to IfcDistributionElement\r\n               // The following code collects the ports that are nested to the object to be assigned later\r\n               if (isIFC4AndAbove)\r\n                  AddNestedMembership(outElementIFCHandle, portOut);\r\n               else\r\n                  IFCInstanceExporter.CreateRelConnectsPortToElement(ifcFile, guid, ownerHistory, connectionName, portType, portOut, outElementIFCHandle);\r\n            }\r\n\r\n            //  ----------------------- Out Port -> In Port ----------------------\r\n            if (portOut != null && portIn != null)\r\n            {\r\n               IFCAnyHandle realizingElement = null;\r\n               string connectionName = portInGuid + \"|\" + portOutGuid;\r\n               string connectionType = \"Flow\";   // Assigned as Description\r\n               string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelConnectsPorts, portIn, portOut));\r\n               IFCInstanceExporter.CreateRelConnectsPorts(ifcFile, guid, ownerHistory, connectionName, connectionType, portIn, portOut, realizingElement);\r\n               AddConnectionInternal(inElement.Id, outElement.Id);\r\n            }\r\n         }\r\n\r\n         // Add the handles to the connector system.\r\n         HashSet<MEPSystem> systemList = new HashSet<MEPSystem>();\r\n         try\r\n         {\r\n            MEPSystem system = connector.MEPSystem;\r\n            if (system != null)\r\n               systemList.Add(system);\r\n         }\r\n         catch\r\n         {\r\n         }\r\n\r\n         if (isElectricalDomain)\r\n         {\r\n            foreach (MEPSystem system in systemList)\r\n            {\r\n               ExporterCacheManager.SystemsCache.AddElectricalSystem(system.Id);\r\n               ExporterCacheManager.SystemsCache.AddHandleToElectricalSystem(system.Id, inElementIFCHandle);\r\n               ExporterCacheManager.SystemsCache.AddHandleToElectricalSystem(system.Id, outElementIFCHandle);\r\n               ExporterCacheManager.SystemsCache.AddHandleToElectricalSystem(system.Id, portIn);\r\n               ExporterCacheManager.SystemsCache.AddHandleToElectricalSystem(system.Id, portOut);\r\n            }\r\n         }\r\n         else\r\n         {\r\n            foreach (MEPSystem system in systemList)\r\n            {\r\n               ExporterCacheManager.SystemsCache.AddHandleToBuiltInSystem(system, inElementIFCHandle);\r\n               ExporterCacheManager.SystemsCache.AddHandleToBuiltInSystem(system, outElementIFCHandle);\r\n               ExporterCacheManager.SystemsCache.AddHandleToBuiltInSystem(system, portIn);\r\n               ExporterCacheManager.SystemsCache.AddHandleToBuiltInSystem(system, portOut);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Keeps track of created connection to prevent duplicate connections, \r\n      /// might not be necessary\r\n      /// </summary>\r\n      private static HashSet<string> m_ConnectionExists = new HashSet<string>();\r\n\r\n      /// <summary>\r\n      /// Keeps track of created connection to prevent duplicate connections, \r\n      /// might not be necessary\r\n      /// </summary>\r\n      private static HashSet<ElementId> m_ProcessedWires = new HashSet<ElementId>();\r\n\r\n      /// <summary>\r\n      /// Checks existance of the connects\r\n      /// </summary>\r\n      /// <param name=\"inID\">ElementId of the incoming Element</param>\r\n      /// <param name=\"outID\">ElementId of the outgoing Element</param>\r\n      /// <returns>True if the connection exists already</returns>\r\n      private static bool ConnectionExists(ElementId inID, ElementId outID)\r\n      {\r\n         string elementIdKey = inID.ToString() + \"_\" + outID.ToString();\r\n         return m_ConnectionExists.Contains(elementIdKey);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add new Connection\r\n      /// </summary>\r\n      /// <param name=\"inID\"></param>\r\n      /// <param name=\"outID\"></param>\r\n      private static void AddConnectionInternal(ElementId inID, ElementId outID)\r\n      {\r\n         string elementIdKey = inID.ToString() + \"_\" + outID.ToString();\r\n         m_ConnectionExists.Add(elementIdKey);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Clear the connection cache\r\n      /// </summary>\r\n      public static void ClearConnections()\r\n      {\r\n         m_ConnectionExists.Clear();\r\n         m_ProcessedWires.Clear();\r\n         m_NestedMembershipDict.Clear();\r\n      }\r\n\r\n      private static void AddNestedMembership(IFCAnyHandle hostElement, IFCAnyHandle nestedElement)\r\n      {\r\n         if (m_NestedMembershipDict.ContainsKey(hostElement))\r\n         {\r\n            IList<IFCAnyHandle> nestedElements = m_NestedMembershipDict[hostElement];\r\n            nestedElements.Add(nestedElement);\r\n         }\r\n         else\r\n         {\r\n            IList<IFCAnyHandle> nestedElements = new List<IFCAnyHandle>();\r\n            nestedElements.Add(nestedElement);\r\n            m_NestedMembershipDict.Add(hostElement, nestedElements);\r\n         }\r\n\r\n      }\r\n\r\n      private static void CreateRelNestsFromCache(IFCFile file)\r\n      {\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n         string name = \"NestedPorts\";\r\n         string description = \"Flow\";\r\n\r\n         foreach (KeyValuePair<IFCAnyHandle, IList<IFCAnyHandle>> relNests in m_NestedMembershipDict)\r\n         {\r\n            string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelNests, relNests.Key));\r\n            IFCInstanceExporter.CreateRelNests(file, guid, ownerHistory, name, description, relNests.Key, relNests.Value);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Reads the parameter by parsing connector's description string\r\n      /// </summary>\r\n      /// <param name=\"connector\">The Connector object.</param>\r\n      /// <param name=\"parameterName\">The name of parameter to search.</param>\r\n      /// <returns>String assigned to parameterName.</returns>\r\n      public static string GetConnectorParameterFromDescription(Connector connector, string parameterName)\r\n      {\r\n         string parameterValue = String.Empty;\r\n         if (String.IsNullOrEmpty(parameterName) || connector == null)\r\n            return parameterValue;\r\n\r\n         string parsedValue = String.Empty;\r\n         // For the connectors of pipes or fittings we extract the parameters from the connector's owner\r\n         // for others - from the connector itself\r\n         if (!ExporterCacheManager.MEPCache.ConnectorDescriptionCache.TryGetValue(connector, out parsedValue))\r\n         {\r\n            Element owner = connector.Owner;\r\n            if (owner is Pipe ||\r\n               owner is Duct ||\r\n               owner is FamilyInstance && (owner as FamilyInstance).MEPModel is MechanicalFitting)\r\n            {\r\n               // Read description from the parameter with the name based on connector ID\r\n               int connectorId = connector.Id;\r\n               // ID's if pipe connectors are zero-based\r\n               if (owner is Pipe || owner is Duct)\r\n                  connectorId++;\r\n\r\n               string descriptionParameter = \"PortDescription \" + connectorId.ToString();\r\n               ParameterUtil.GetStringValueFromElementOrSymbol(owner, descriptionParameter, out parsedValue);\r\n            }\r\n            else\r\n            {\r\n               parsedValue = connector.Description;\r\n            }\r\n            ExporterCacheManager.MEPCache.ConnectorDescriptionCache.Add(connector, parsedValue);\r\n         }\r\n\r\n        \r\n         if (String.IsNullOrEmpty(parsedValue))\r\n            return parameterValue;\r\n\r\n         int ind = parsedValue.IndexOf(parameterName + '=');\r\n         if (ind > -1)\r\n         {\r\n            parsedValue = parsedValue.Substring(ind + parameterName.Length + 1);\r\n            if (!String.IsNullOrEmpty(parsedValue))\r\n            {\r\n               int delimiterInd = parsedValue.IndexOf(',');\r\n               if (delimiterInd > -1)\r\n                  parameterValue = parsedValue.Substring(0, delimiterInd);\r\n               else\r\n                  parameterValue = parsedValue;\r\n            }\r\n         }\r\n\r\n         return parameterValue;\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Export porterty sets for the connector\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"connector\">The connector to export properties for.</param>\r\n      /// <param name=\"handle\">The ifc handle of exported connector.</param>\r\n      private static void ExportConnectorProperties(ExporterIFC exporterIFC, Connector connector,\r\n         IFCAnyHandle handle)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(handle))\r\n            return;\r\n         \r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction transaction = new IFCTransaction(file))\r\n         {\r\n            IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n            IList<PropertySetDescription> currPsetsToCreate =\r\n               ExporterUtil.GetCurrPSetsToCreate(handle, PSetsToProcess.Both); \r\n            if (currPsetsToCreate.Count == 0)\r\n               return;\r\n\r\n            foreach (PropertySetDescription currDesc in currPsetsToCreate)\r\n            {\r\n               ElementOrConnector elementOrConnector = new ElementOrConnector(connector);\r\n               ISet<IFCAnyHandle> props = currDesc.ProcessEntries(file, exporterIFC, null, \r\n                  elementOrConnector, null, handle);\r\n               if (props.Count < 1)\r\n                  continue;\r\n\r\n               string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(IFCEntityType.IfcPropertySet, currDesc.Name, handle));\r\n               IFCAnyHandle propertySet = IFCInstanceExporter.CreatePropertySet(file, \r\n                  guid, ownerHistory, currDesc.Name, currDesc.DescriptionOfSet,\r\n                  props);\r\n               if (propertySet == null)\r\n                  continue;\r\n\r\n               HashSet<IFCAnyHandle> relatedObjects = new HashSet<IFCAnyHandle>() { handle };\r\n               ExporterUtil.CreateRelDefinesByProperties(file, ownerHistory, null, null, \r\n                  relatedObjects, propertySet);\r\n            }\r\n            transaction.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gererates port name from connector data\r\n      /// </summary>\r\n      /// <param name=\"flowDirection\">The direction of the connector.</param>\r\n      /// <param name=\"hostId\">The connector's host id.</param>\r\n      /// <param name=\"connectorId\">The connector's id.</param>\r\n      /// <returns>Generated port name.</returns>\r\n      private static string GetPortNameFromFlowDirection(IFCFlowDirection flowDirection, ElementId hostId, int connectorId)\r\n      {\r\n         string portAutoName = \"Port_\";\r\n         if (flowDirection == IFCFlowDirection.Sink)\r\n            portAutoName = \"InPort_\";\r\n         else if (flowDirection == IFCFlowDirection.Source)\r\n            portAutoName = \"OutPort_\";\r\n\r\n         portAutoName += hostId + \"_\" + connectorId;\r\n         return portAutoName;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set few attributes for already created distribution port\r\n      /// </summary>\r\n      /// <param name=\"port\">The handle of exported connector.</param>\r\n      /// <param name=\"connector\">The Connector object.</param>\r\n      /// <param name=\"portAutoName\">The auto gerated name with id.</param>\r\n      /// <param name=\"portDescription\">The description string to set.</param>\r\n      private static void SetDistributionPortAttributes(IFCAnyHandle port, Connector connector, string portDescription, ElementId hostId, ref IFCFlowDirection flowDir)\r\n      {\r\n         // \"Description\"\r\n         IFCAnyHandleUtil.SetAttribute(port, \"Description\", portDescription);\r\n\r\n         // \"Flow\" (only for Electrical connectors)\r\n         if (connector.Domain == Domain.DomainElectrical)\r\n         {\r\n            string flowString = ConnectorExporter.GetConnectorParameterFromDescription(connector, \"Flow\");\r\n            IFCFlowDirection parsedFlow;\r\n            if (Enum.TryParse(flowString, true, out parsedFlow) &&\r\n               (parsedFlow == IFCFlowDirection.Sink || parsedFlow == IFCFlowDirection.Source))\r\n            {\r\n               flowDir = parsedFlow;\r\n               IFCAnyHandleUtil.SetAttribute(port, \"FlowDirection\", flowDir);\r\n            }\r\n         }\r\n\r\n         // \"Name\"\r\n         string portName = ConnectorExporter.GetConnectorParameterFromDescription(connector, \"PortName\");\r\n         if (String.IsNullOrEmpty(portName))\r\n            portName = ConnectorExporter.GetPortNameFromFlowDirection(flowDir, hostId, connector.Id);\r\n         IFCAnyHandleUtil.OverrideNameAttribute(port, portName);\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            // \"PredefinedType\"\r\n            Toolkit.IFC4.IFCDistributionPortType portType = GetMappedIFCDistributionPortType(connector.Domain);\r\n            string validatedPredefinedType = IFCValidateEntry.ValidateStrEnum<Toolkit.IFC4.IFCDistributionPortType>(portType.ToString());\r\n            IFCAnyHandleUtil.SetAttribute(port, \"PredefinedType\", validatedPredefinedType, true);\r\n\r\n            // \"SystemType\" from description\r\n            string systemTypeFromDescription = ConnectorExporter.GetConnectorParameterFromDescription(connector, \"SystemType\");\r\n            string validatedSystemType = IFCValidateEntry.ValidateStrEnum<Toolkit.IFC4.IFCDistributionSystem>(systemTypeFromDescription);\r\n            if (String.IsNullOrEmpty(validatedSystemType))\r\n            {\r\n               // \"SystemType\" from revit system classification\r\n               Toolkit.IFC4.IFCDistributionSystem systemType = GetMappedIFCDistributionSystem(connector);\r\n               validatedSystemType = IFCValidateEntry.ValidateStrEnum<Toolkit.IFC4.IFCDistributionSystem>(systemType.ToString());\r\n            }\r\n            if (!String.IsNullOrEmpty(validatedSystemType))\r\n               IFCAnyHandleUtil.SetAttribute(port, \"SystemType\", validatedSystemType, true);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get ifc distribution port type from connector type domain\r\n      /// </summary>\r\n      /// <param name=\"connectorDomain\">The type of connector domain.</param>\r\n      /// <returns>ifc distribution port type.</returns>\r\n      private static Toolkit.IFC4.IFCDistributionPortType GetMappedIFCDistributionPortType(Domain connectorDomain)\r\n      {\r\n         Toolkit.IFC4.IFCDistributionPortType portType = Toolkit.IFC4.IFCDistributionPortType.NOTDEFINED;\r\n         switch (connectorDomain)\r\n         {\r\n            case Domain.DomainHvac:\r\n               portType = Toolkit.IFC4.IFCDistributionPortType.DUCT;\r\n               break;\r\n            case Domain.DomainElectrical:\r\n               portType = Toolkit.IFC4.IFCDistributionPortType.CABLE;\r\n               break;\r\n            case Domain.DomainPiping:\r\n               portType = Toolkit.IFC4.IFCDistributionPortType.PIPE;\r\n               break;\r\n            case Domain.DomainCableTrayConduit:\r\n               portType = Toolkit.IFC4.IFCDistributionPortType.CABLECARRIER;\r\n               break;\r\n         }\r\n         return portType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get ifc distribution system type from connector\r\n      /// </summary>\r\n      /// <param name=\"connector\">The connector.</param>\r\n      /// <returns>ifc distribution system type.</returns>\r\n      private static Toolkit.IFC4.IFCDistributionSystem GetMappedIFCDistributionSystem(Connector connector)\r\n      {\r\n         Toolkit.IFC4.IFCDistributionSystem systemType = Toolkit.IFC4.IFCDistributionSystem.NOTDEFINED;\r\n\r\n         string systemClassificationString = \"UndefinedSystemClassification\";\r\n         try\r\n         {\r\n            switch (connector.Domain)\r\n            {\r\n               case Domain.DomainHvac:\r\n                  systemClassificationString = connector.DuctSystemType.ToString();\r\n                  break;\r\n               case Domain.DomainElectrical:\r\n                  systemClassificationString = connector.ElectricalSystemType.ToString();\r\n                  break;\r\n               case Domain.DomainPiping:\r\n                  systemClassificationString = connector.PipeSystemType.ToString();\r\n                  break;\r\n               case Domain.DomainCableTrayConduit:\r\n                  systemClassificationString = \"CableTrayConduit\";\r\n                  break;\r\n            }\r\n\r\n            systemType = GetSystemTypeFromDictionary(systemClassificationString);\r\n         }\r\n         catch\r\n         {\r\n         }\r\n         return systemType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get ifc distribution system type from system\r\n      /// </summary>\r\n      /// <param name=\"systemElement\">The system element.</param>\r\n      /// <returns>ifc distribution system type.</returns>\r\n      public static Toolkit.IFC4.IFCDistributionSystem GetMappedIFCDistributionSystemFromElement(MEPSystem systemElement)\r\n      {\r\n         string systemClassificationString = \"UndefinedSystemClassification\";\r\n\r\n         if (systemElement is MechanicalSystem)\r\n            systemClassificationString = (systemElement as MechanicalSystem).SystemType.ToString();\r\n         else if (systemElement is ElectricalSystem)\r\n            systemClassificationString = (systemElement as ElectricalSystem).SystemType.ToString();\r\n         else if (systemElement is PipingSystem)\r\n            systemClassificationString = (systemElement as PipingSystem).SystemType.ToString();\r\n\r\n         return GetSystemTypeFromDictionary(systemClassificationString);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get ifc distribution system type from connector's system classification string\r\n      /// </summary>\r\n      /// <param name=\"revitSystemString\">The connector's system classification string.</param>\r\n      /// <returns>ifc distribution system type.</returns>\r\n      private static Toolkit.IFC4.IFCDistributionSystem GetSystemTypeFromDictionary(string revitSystemString)\r\n      {\r\n         Toolkit.IFC4.IFCDistributionSystem systemType = Toolkit.IFC4.IFCDistributionSystem.NOTDEFINED;\r\n\r\n         if (m_SystemClassificationToIFC == null)\r\n            InitializeSystemClassifications();\r\n\r\n         if (m_SystemClassificationToIFC.ContainsKey(revitSystemString))\r\n         {\r\n            systemType = m_SystemClassificationToIFC[revitSystemString].First();\r\n         }\r\n\r\n         return systemType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes the mapping between revit system classification and ifc distribution system\r\n      /// </summary>\r\n      private static void InitializeSystemClassifications()\r\n      {\r\n         m_SystemClassificationToIFC = new Dictionary<string, IList<Toolkit.IFC4.IFCDistributionSystem>>()\r\n         {\r\n            { \"UndefinedSystemClassification\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.NOTDEFINED,\r\n               Toolkit.IFC4.IFCDistributionSystem.CHEMICAL,\r\n               Toolkit.IFC4.IFCDistributionSystem.CHILLEDWATER,\r\n               Toolkit.IFC4.IFCDistributionSystem.DISPOSAL,\r\n               Toolkit.IFC4.IFCDistributionSystem.EARTHING,\r\n               Toolkit.IFC4.IFCDistributionSystem.FUEL,\r\n               Toolkit.IFC4.IFCDistributionSystem.GAS,\r\n               Toolkit.IFC4.IFCDistributionSystem.HAZARDOUS,\r\n               Toolkit.IFC4.IFCDistributionSystem.LIGHTNINGPROTECTION,\r\n               Toolkit.IFC4.IFCDistributionSystem.VACUUM }\r\n            } ,\r\n            { \"SupplyAir\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.VENTILATION }\r\n            } ,\r\n            { \"ReturnAir\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.VENTILATION }\r\n            } ,\r\n            { \"ExhaustAir\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.EXHAUST }\r\n            } ,\r\n            { \"OtherAir\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.USERDEFINED,\r\n               Toolkit.IFC4.IFCDistributionSystem.AIRCONDITIONING,\r\n               Toolkit.IFC4.IFCDistributionSystem.COMPRESSEDAIR }\r\n            } ,\r\n            { \"Data\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.DATA,\r\n               Toolkit.IFC4.IFCDistributionSystem.SIGNAL }\r\n            } ,\r\n            { \"PowerCircuit\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.ELECTRICAL,\r\n               Toolkit.IFC4.IFCDistributionSystem.LIGHTING }\r\n            } ,\r\n            { \"SupplyHydronic\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.HEATING }\r\n            } ,\r\n            { \"ReturnHydronic\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.HEATING }\r\n            } ,\r\n            { \"Telephone\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.COMMUNICATION,\r\n               Toolkit.IFC4.IFCDistributionSystem.ELECTROACOUSTIC }\r\n            } ,\r\n            { \"Security\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.SECURITY }\r\n            } ,\r\n            { \"FireAlarm\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.ELECTROACOUSTIC }\r\n            } ,\r\n            { \"NurseCall\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.COMMUNICATION }\r\n            } ,\r\n            { \"Controls\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.CONTROL }\r\n            } ,\r\n            { \"Communication\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.VENTILATION,\r\n               Toolkit.IFC4.IFCDistributionSystem.AUDIOVISUAL,\r\n               Toolkit.IFC4.IFCDistributionSystem.TV }\r\n            } ,\r\n            { \"CondensateDrain\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.CONDENSERWATER }\r\n            } ,\r\n            { \"Sanitary\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.SEWAGE,\r\n               Toolkit.IFC4.IFCDistributionSystem.WASTEWATER }\r\n            } ,\r\n            { \"Vent\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.VENT }\r\n            } ,\r\n            { \"Storm\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.STORMWATER,\r\n               Toolkit.IFC4.IFCDistributionSystem.RAINWATER,\r\n               Toolkit.IFC4.IFCDistributionSystem.DRAINAGE }\r\n            } ,\r\n            { \"DomesticHotWater\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.DOMESTICHOTWATER }\r\n            } ,\r\n            { \"DomesticColdWater\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.DOMESTICCOLDWATER,\r\n               Toolkit.IFC4.IFCDistributionSystem.WATERSUPPLY }\r\n            } ,\r\n            { \"Recirculation\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.NOTDEFINED }\r\n            } ,\r\n            { \"OtherPipe\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.USERDEFINED }\r\n            } ,\r\n            { \"FireProtectWet\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.FIREPROTECTION }\r\n            } ,\r\n            { \"FireProtectDry\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.FIREPROTECTION }\r\n            } ,\r\n            { \"FireProtectPreaction\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.FIREPROTECTION }\r\n            } ,\r\n            { \"FireProtectOther\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.USERDEFINED }\r\n            } ,\r\n            { \"SwitchTopology\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.CONTROL}\r\n            } ,\r\n            { \"PowerBalanced\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.ELECTRICAL }\r\n            } ,\r\n            { \"PowerUnBalanced\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.ELECTRICAL }\r\n            } ,\r\n            { \"CableTrayConduit\", new List<Toolkit.IFC4.IFCDistributionSystem>\r\n               {\r\n               Toolkit.IFC4.IFCDistributionSystem.CONVEYING }\r\n            }\r\n         };\r\n      }\r\n\r\n   }   \r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/CurtainSystemExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing System.Linq;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export curtain systems.\r\n   /// </summary>\r\n   class CurtainSystemExporter\r\n   {\r\n      /// Exports a curtain object as container.\r\n      /// </summary>\r\n      /// <param name=\"allSubElements\">Collection of elements contained in the host curtain element.</param>\r\n      /// <param name=\"wallElement\">The curtain system element.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportCurtainObjectCommonAsContainer(ICollection<ElementId> allSubElements, Element wallElement,\r\n         ExporterIFC exporterIFC, ProductWrapper origWrapper, PlacementSetter currSetter)\r\n      {\r\n         if (wallElement == null)\r\n            return;\r\n\r\n         string overrideCADLayer = RepresentationUtil.GetPresentationLayerOverride(wallElement);\r\n\r\n         using (ExporterStateManager.CADLayerOverrideSetter layerSetter = new ExporterStateManager.CADLayerOverrideSetter(overrideCADLayer))\r\n         {\r\n            HashSet<ElementId> alreadyVisited = new HashSet<ElementId>();  // just in case.\r\n            Options geomOptions = GeometryUtil.GetIFCExportGeometryOptions();\r\n            {\r\n               foreach (ElementId subElemId in allSubElements)\r\n               {\r\n                  using (ProductWrapper productWrapper = ProductWrapper.Create(origWrapper))\r\n                  {\r\n                     // This element has already been filtered out, don't look again.\r\n                     if (!ExporterCacheManager.NonSpatialElements.Contains(subElemId))\r\n                        continue;\r\n\r\n                     Element subElem = wallElement.Document.GetElement(subElemId);\r\n                     if (subElem == null)\r\n                        continue;\r\n\r\n                     if (alreadyVisited.Contains(subElemId))\r\n                        continue;\r\n                     alreadyVisited.Add(subElemId);\r\n\r\n                     // Respect element visibility settings.\r\n                     if (!ElementFilteringUtil.CanExportElement(subElem, false) || !ElementFilteringUtil.IsElementVisible(subElem))\r\n                        continue;\r\n\r\n                     GeometryElement geomElem = subElem.get_Geometry(geomOptions);\r\n                     if (geomElem == null)\r\n                        continue;\r\n\r\n                     try\r\n                     {\r\n                        if (subElem is FamilyInstance)\r\n                        {\r\n                           IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(subElem, out _);\r\n\r\n                           IFCAnyHandle currLocalPlacement = currSetter.LocalPlacement;\r\n                           using (IFCExportBodyParams extraParams = new IFCExportBodyParams())\r\n                           {\r\n                              FamilyInstanceExporter.ExportFamilyInstanceAsMappedItem(exporterIFC,\r\n                                 subElem as FamilyInstance, exportType, productWrapper, ElementId.InvalidElementId, null, currLocalPlacement);\r\n                           }\r\n                        }\r\n                        else if (subElem is CurtainGridLine)\r\n                        {\r\n                           ProxyElementExporter.Export(exporterIFC, subElem, geomElem, productWrapper);\r\n                        }\r\n                        else if (subElem is Wall)\r\n                        {\r\n                           WallExporter.ExportWall(exporterIFC, null, subElem, null, ref geomElem, productWrapper);\r\n                        }\r\n                     }\r\n                     catch \r\n                     {\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports curtain object as one Brep.\r\n      /// </summary>\r\n      /// <param name=\"allSubElements\">Collection of elements contained in the host curtain element.</param>\r\n      /// <param name=\"wallElement\">The curtain wall element.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"setter\">The PlacementSetter object.</param>\r\n      /// <param name=\"localPlacement\">The local placement handle.</param>\r\n      public static void ExportCurtainObjectAsOneEntity(IFCAnyHandle parentHnd,\r\n         ICollection<ElementId> allSubElements, Element wallElement, ExporterIFC exporterIFC)\r\n      {\r\n         IFCAnyHandle prodDefRep = null;\r\n         Document document = wallElement.Document;\r\n         double eps = UnitUtil.ScaleLength(document.Application.VertexTolerance);\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle contextOfItems = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Body);\r\n         \r\n         IFCGeometryInfo info = IFCGeometryInfo.CreateFaceGeometryInfo(eps);\r\n\r\n         ISet<IFCAnyHandle> bodyItems = new HashSet<IFCAnyHandle>();\r\n\r\n         // Want to make sure we don't accidentally add a mullion or curtain line more than once.\r\n         HashSet<ElementId> alreadyVisited = new HashSet<ElementId>();\r\n         bool useFallbackBREP = true;\r\n         Options geomOptions = GeometryUtil.GetIFCExportGeometryOptions();\r\n\r\n         foreach (ElementId subElemId in allSubElements)\r\n         {\r\n            Element subElem = wallElement.Document.GetElement(subElemId);\r\n            GeometryElement geomElem = subElem.get_Geometry(geomOptions);\r\n            if (geomElem == null || alreadyVisited.Contains(subElemId))\r\n            {\r\n               continue;\r\n            }\r\n            alreadyVisited.Add(subElemId);\r\n\r\n\r\n            // Export tessellated geometry when IFC4 Reference View is selected\r\n            if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView || ExporterCacheManager.ExportOptionsCache.ExportAs4General)\r\n            {\r\n               BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(false, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n               IList<IFCAnyHandle> triFaceSet = BodyExporter.ExportBodyAsTessellatedFaceSet(exporterIFC, subElem, bodyExporterOptions, geomElem);\r\n               if (triFaceSet != null && triFaceSet.Count > 0)\r\n               {\r\n                  foreach (IFCAnyHandle triFaceSetItem in triFaceSet)\r\n                  {\r\n                     bodyItems.Add(triFaceSetItem);\r\n                  }\r\n                  useFallbackBREP = false;    // no need to do Brep since it is successful\r\n               }\r\n            }\r\n            // Export AdvancedFace before use fallback BREP\r\n            else if (ExporterCacheManager.ExportOptionsCache.ExportAs4DesignTransferView || ExporterCacheManager.ExportOptionsCache.ExportAs4x3DesignTransferView)\r\n            {\r\n               IFCAnyHandle advancedBRep = BodyExporter.ExportBodyAsAdvancedBrep(exporterIFC, subElem, geomElem);\r\n               if (bodyItems.AddIfNotNull(advancedBRep))\r\n               {\r\n                  useFallbackBREP = false;    // no need to do Brep since it is successful\r\n               }\r\n            }\r\n\r\n            if (useFallbackBREP)\r\n            {\r\n               ExporterIFCUtils.CollectGeometryInfo(exporterIFC, info, geomElem, XYZ.Zero, false);\r\n\r\n               IList<ICollection<IFCAnyHandle>> faceSetList = info.GetFaces();\r\n               foreach (ICollection<IFCAnyHandle> faces in faceSetList)\r\n               {\r\n                  IFCAnyHandle outer = IFCInstanceExporter.CreateClosedShell(file, faces.ToHashSet());\r\n\r\n                  if (!IFCAnyHandleUtil.IsNullOrHasNoValue(outer))\r\n                  {\r\n                     bodyItems.Add(RepresentationUtil.CreateFacetedBRep(exporterIFC, document,\r\n                        false, outer, ElementId.InvalidElementId));\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         if (bodyItems.Count == 0)\r\n         {\r\n            return;\r\n         }\r\n\r\n         ElementId catId = CategoryUtil.GetSafeCategoryId(wallElement);\r\n         IFCAnyHandle shapeRep;\r\n\r\n         // Use tessellated geometry in Reference View\r\n         if ((ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView || ExporterCacheManager.ExportOptionsCache.ExportAs4General) && !useFallbackBREP)\r\n         {\r\n            shapeRep = RepresentationUtil.CreateTessellatedRep(exporterIFC, wallElement, catId, contextOfItems, bodyItems, null);\r\n         }\r\n         else if ((ExporterCacheManager.ExportOptionsCache.ExportAs4DesignTransferView || ExporterCacheManager.ExportOptionsCache.ExportAs4x3DesignTransferView) \r\n            && !useFallbackBREP)\r\n\r\n         {\r\n            shapeRep = RepresentationUtil.CreateAdvancedBRepRep(exporterIFC, wallElement, catId, contextOfItems, bodyItems, null);\r\n         }\r\n         else\r\n         {\r\n            shapeRep = RepresentationUtil.CreateBRepRep(exporterIFC, wallElement, catId, contextOfItems, bodyItems);\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(shapeRep))\r\n         {\r\n            return;\r\n         }\r\n\r\n         IList<IFCAnyHandle> shapeReps = new List<IFCAnyHandle>() { shapeRep };\r\n\r\n         IFCAnyHandle boundingBoxRep = BoundingBoxExporter.ExportBoundingBox(exporterIFC, wallElement.get_Geometry(geomOptions), Transform.Identity);\r\n         if (boundingBoxRep != null)\r\n         {\r\n            shapeReps.Add(boundingBoxRep);\r\n         }\r\n\r\n         prodDefRep = IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, shapeReps);\r\n         IFCAnyHandleUtil.SetAttribute(parentHnd, \"Representation\", prodDefRep);\r\n      }\r\n\r\n      private static readonly HashSet<IFCEntityType> AllowedContainerTypes =\r\n         [\r\n            IFCEntityType.IfcCurtainWall,\r\n            IFCEntityType.IfcRamp,\r\n            IFCEntityType.IfcRoof,\r\n            IFCEntityType.IfcStair,\r\n            IFCEntityType.IfcWall,\r\n            IFCEntityType.IfcWallStandardCase\r\n         ];\r\n\r\n      /// <summary>\r\n      /// Checks if the curtain element can be exported as container.\r\n      /// </summary>\r\n      /// <remarks>It checks if all sub elements to be exported have geometries.</remarks>\r\n      /// <param name=\"allSubElements\">Collection of elements contained in the host curtain element.</param>\r\n      /// <param name=\"document\">The Revit document.</param>\r\n      /// <returns>True if it can be exported as container, false otherwise.</returns>\r\n      private static bool CanExportCurtainWallAsContainer(Document document, IFCExportInfoPair exportType, \r\n         ICollection<ElementId> allSubElements)\r\n      {\r\n         if (!AllowedContainerTypes.Contains(exportType.ExportInstance))\r\n         {\r\n            return false;\r\n         }\r\n\r\n         Options geomOptions = GeometryUtil.GetIFCExportGeometryOptions();\r\n\r\n         FilteredElementCollector collector = new FilteredElementCollector(document, allSubElements);\r\n\r\n         List<Type> curtainWallSubElementTypes = new List<Type>()\r\n            { typeof(FamilyInstance), typeof(CurtainGridLine), typeof(Wall) };\r\n\r\n         ElementMulticlassFilter multiclassFilter = new ElementMulticlassFilter(curtainWallSubElementTypes, true);\r\n         collector.WherePasses(multiclassFilter);\r\n         ICollection<ElementId> filteredSubElemments = collector.ToElementIds();\r\n         foreach (ElementId subElemId in filteredSubElemments)\r\n         {\r\n            if (document?.GetElement(subElemId)?.get_Geometry(geomOptions) == null)\r\n               return false;\r\n         }\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export Curtain Walls and Roofs.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"exportType\">The IFC entity to export to.</param>\r\n      /// <param name=\"allSubElements\">Collection of elements contained in the host curtain element.</param>\r\n      /// <param name=\"element\">The element to be exported.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      private static void ExportBase(ExporterIFC exporterIFC, IFCExportInfoPair exportType, \r\n         ICollection<ElementId> allSubElements, Element element, ProductWrapper wrapper)\r\n      {\r\n         if (exportType.IsUnKnown ||\r\n            ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(exportType.ExportInstance))\r\n         {\r\n            return;\r\n         }\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n         PlacementSetter setter = null;\r\n\r\n         using (ProductWrapper curtainWallSubWrapper = ProductWrapper.Create(wrapper, false))\r\n         {\r\n            try\r\n            {\r\n               Transform orientationTrf = Transform.Identity;\r\n               IFCAnyHandle localPlacement = null;\r\n\r\n               // Check for containment override\r\n               setter = PlacementSetter.Create(exporterIFC, element, orientationTrf);\r\n               localPlacement = setter.LocalPlacement;\r\n\r\n               string objectType = NamingUtil.GetDefaultObjectType(element);\r\n\r\n               IFCAnyHandle prodRepHnd = null;\r\n               string elemGUID = GUIDUtil.CreateGUID(element);\r\n               IFCAnyHandle elemHnd = IFCInstanceExporter.CreateGenericIFCEntity(exportType,\r\n                  file, element, elemGUID, ownerHistory, localPlacement, prodRepHnd);\r\n\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(elemHnd))\r\n                  return;\r\n\r\n               wrapper.AddElement(element, elemHnd, setter, null, true, null);\r\n\r\n               bool canExportCurtainWallAsContainer = CanExportCurtainWallAsContainer(element.Document, exportType, allSubElements); \r\n               if (!canExportCurtainWallAsContainer)\r\n               {\r\n                  ExportCurtainObjectAsOneEntity(elemHnd, allSubElements, element, exporterIFC);\r\n               }\r\n               else\r\n               {\r\n                  ExportCurtainObjectCommonAsContainer(allSubElements, element, exporterIFC, curtainWallSubWrapper, setter);\r\n               }\r\n\r\n               ICollection<IFCAnyHandle> relatedElementIds = curtainWallSubWrapper.GetAllObjects();\r\n               if (relatedElementIds.Count > 0)\r\n               {\r\n                  string guid = GUIDUtil.CreateSubElementGUID(element, (int)IFCCurtainWallSubElements.RelAggregates);\r\n                  HashSet<IFCAnyHandle> relatedElementIdSet = new HashSet<IFCAnyHandle>(relatedElementIds);\r\n                  IFCInstanceExporter.CreateRelAggregates(file, guid, ownerHistory, null, null, elemHnd, relatedElementIdSet);\r\n               }\r\n\r\n               ExportCurtainWallType(exporterIFC, wrapper, elemHnd, element);\r\n               SpaceBoundingElementUtil.RegisterSpaceBoundingElementHandle(exporterIFC, elemHnd, element.Id, ElementId.InvalidElementId);\r\n            }\r\n            finally\r\n            {\r\n               if (setter != null)\r\n                  setter.Dispose();\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns all of the active curtain panels for a CurtainGrid.\r\n      /// </summary>\r\n      /// <param name=\"curtainGrid\">The CurtainGrid element.</param>\r\n      /// <param name=\"document\">The active document.</param>\r\n      /// <returns>The element ids of the active curtain panels.</returns>\r\n      /// <remarks>CurtainGrid.GetPanelIds() returns the element ids of the curtain panels that are directly contained in the CurtainGrid.\r\n      /// Some of these panels however, are placeholders for \"host\" panels.  From a user point of view, the host panels are the real panels,\r\n      /// and should replace these internal panels for export purposes.</remarks>\r\n      public static ICollection<ElementId> GetVisiblePanelsForGrid(CurtainGrid curtainGrid,\r\n         Document document)\r\n      {\r\n         ICollection<ElementId> panelIdsIn = curtainGrid.GetPanelIds();\r\n         if (panelIdsIn == null)\r\n            return null;\r\n\r\n         HashSet<ElementId> visiblePanelIds = new HashSet<ElementId>();\r\n         foreach (ElementId panelId in panelIdsIn)\r\n         {\r\n            Element element = document.GetElement(panelId);\r\n            if (element == null)\r\n               continue;\r\n\r\n            ElementId hostPanelId = ElementId.InvalidElementId;\r\n            if (element is Panel)\r\n               hostPanelId = (element as Panel).FindHostPanel();\r\n\r\n            if (hostPanelId != ElementId.InvalidElementId)\r\n            {\r\n               // If the host panel is itself a curtain wall, then we have to recursively collect its element ids.\r\n               Element hostPanel = document.GetElement(hostPanelId);\r\n               if (IsCurtainSystem(hostPanel))\r\n               {\r\n                  CurtainGridSet gridSet = GetCurtainGridSet(hostPanel);\r\n                  if (gridSet == null || gridSet.Size == 0)\r\n                  {\r\n                     visiblePanelIds.Add(hostPanelId);\r\n                  }\r\n                  else\r\n                  {\r\n                     ICollection<ElementId> allSubElements = GetSubElements(gridSet, document);\r\n                     visiblePanelIds.UnionWith(allSubElements);\r\n                  }\r\n               }\r\n               else\r\n                  visiblePanelIds.Add(hostPanelId);\r\n            }\r\n            else\r\n               visiblePanelIds.Add(panelId);\r\n         }\r\n\r\n         return visiblePanelIds;\r\n      }\r\n\r\n      private static ICollection<ElementId> GetSubElements(CurtainGridSet gridSet,\r\n         Document document)\r\n      {\r\n         HashSet<ElementId> allSubElements = new HashSet<ElementId>();\r\n         \r\n         foreach (CurtainGrid grid in gridSet)\r\n         {\r\n            allSubElements.UnionWith(GetVisiblePanelsForGrid(grid, document));\r\n            allSubElements.UnionWith(grid.GetMullionIds());\r\n         }\r\n\r\n         return allSubElements;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export non-legacy Curtain Walls and Roofs.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"allSubElements\">Collection of elements contained in the host curtain element.</param>\r\n      /// <param name=\"element\">The element to be exported.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      private static void ExportBaseWithGrids(ExporterIFC exporterIFC, Element hostElement, \r\n         IFCExportInfoPair exportType, ProductWrapper productWrapper)\r\n      {\r\n         // Don't export the Curtain Wall itself, which has no useful geometry; instead export all of the GReps of the\r\n         // mullions and panels.\r\n         CurtainGridSet gridSet = GetCurtainGridSet(hostElement);\r\n         if (gridSet == null)\r\n         {\r\n            if (hostElement is Wall)\r\n            {\r\n               ExportLegacyCurtainElement(exporterIFC, hostElement as Wall, productWrapper);\r\n            }\r\n            return;\r\n         }\r\n\r\n         if (gridSet.Size == 0)\r\n         {\r\n            return;\r\n         }\r\n\r\n         ICollection<ElementId> allSubElements = GetSubElements(gridSet, hostElement.Document);\r\n         ExportBase(exporterIFC, exportType, allSubElements, hostElement, productWrapper);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a curtain wall to IFC curtain wall.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"hostElement\">The host object element to be exported.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportWall(ExporterIFC exporterIFC, Wall hostElement, ProductWrapper productWrapper)\r\n      {\r\n         IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(hostElement, out _);\r\n         ExportBaseWithGrids(exporterIFC, hostElement, exportType, productWrapper);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a curtain roof to IFC curtain wall.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"hostElement\">The host object element to be exported.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportCurtainRoof(ExporterIFC exporterIFC, RoofBase hostElement, ProductWrapper productWrapper)\r\n      {\r\n         IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(hostElement, out _);\r\n         ExportBaseWithGrids(exporterIFC, hostElement, exportType, productWrapper);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a curtain system to IFC curtain system.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"hostElement\">The curtain system element to be exported.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportCurtainSystem(ExporterIFC exporterIFC, CurtainSystem curtainSystem, ProductWrapper productWrapper)\r\n      {\r\n         IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(curtainSystem, out _);\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(exportType.ExportInstance))\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction transaction = new IFCTransaction(file))\r\n         {\r\n            ExportBaseWithGrids(exporterIFC, curtainSystem, exportType, productWrapper);\r\n            transaction.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a legacy curtain element to IFC curtain wall.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"curtainElement\">The curtain element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportLegacyCurtainElement(ExporterIFC exporterIFC, Element curtainElement, ProductWrapper productWrapper)\r\n      {\r\n         IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(curtainElement, out _);\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(exportType.ExportInstance))\r\n            return;\r\n\r\n         ICollection<ElementId> allSubElements = ExporterIFCUtils.GetLegacyCurtainSubElements(curtainElement);\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction transaction = new IFCTransaction(file))\r\n         {\r\n            ExportBase(exporterIFC, exportType, allSubElements, curtainElement, productWrapper);\r\n            transaction.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the element is legacy curtain element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>True if it is legacy curtain element.</returns>\r\n      public static bool IsLegacyCurtainElement(Element element)\r\n      {\r\n         //for now, it is sufficient to check its category.\r\n         return (CategoryUtil.GetSafeCategoryId(element) == new ElementId(BuiltInCategory.OST_Curtain_Systems));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the wall is legacy curtain wall.\r\n      /// </summary>\r\n      /// <param name=\"wall\">The wall.</param>\r\n      /// <returns>True if it is legacy curtain wall, false otherwise.</returns>\r\n      public static bool IsLegacyCurtainWall(Wall wall)\r\n      {\r\n         try\r\n         {\r\n            CurtainGrid curtainGrid = wall.CurtainGrid;\r\n            if (curtainGrid != null)\r\n            {\r\n               // The point of this code is to potentially throw an exception. If it does, we have a legacy curtain wall.\r\n               curtainGrid.GetPanelIds();\r\n            }\r\n            else\r\n               return false;\r\n         }\r\n         catch (Autodesk.Revit.Exceptions.InvalidOperationException ex)\r\n         {\r\n            if (ex.Message == \"The host object is obsolete.\")\r\n               return true;\r\n            else\r\n               throw;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns if an element is a curtain system of any element type known to Revit API.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>True if it is a curtain system of any base element type, false otherwise.</returns>\r\n      /// <remarks>There are some legacy types not covered here, see IsLegacyCurtainElement.</remarks>\r\n      public static bool IsCurtainSystem(Element element)\r\n      {\r\n         if (element == null)\r\n            return false;\r\n\r\n         CurtainGridSet curtainGridSet = GetCurtainGridSet(element);\r\n         if (curtainGridSet == null)\r\n            return (element is Wall);\r\n         return (curtainGridSet.Size > 0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Provides a unified interface to get the curtain grids associated with an element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The host element.</param>\r\n      /// <returns>A CurtainGridSet with 0 or more CurtainGrids, or null if invalid.</returns>\r\n      public static CurtainGridSet GetCurtainGridSet(Element element)\r\n      {\r\n         CurtainGridSet curtainGridSet = null;\r\n         if (element is Wall)\r\n         {\r\n            Wall wall = element as Wall;\r\n            if (!IsLegacyCurtainWall(wall))\r\n            {\r\n               CurtainGrid curtainGrid = wall.CurtainGrid;\r\n               curtainGridSet = new CurtainGridSet();\r\n               if (curtainGrid != null)\r\n                  curtainGridSet.Insert(curtainGrid);\r\n            }\r\n         }\r\n         else if (element is FootPrintRoof)\r\n         {\r\n            FootPrintRoof footPrintRoof = element as FootPrintRoof;\r\n            curtainGridSet = footPrintRoof.CurtainGrids;\r\n         }\r\n         else if (element is ExtrusionRoof)\r\n         {\r\n            ExtrusionRoof extrusionRoof = element as ExtrusionRoof;\r\n            curtainGridSet = extrusionRoof.CurtainGrids;\r\n         }\r\n         else if (element is CurtainSystem)\r\n         {\r\n            CurtainSystem curtainSystem = element as CurtainSystem;\r\n            curtainGridSet = curtainSystem.CurtainGrids;\r\n         }\r\n\r\n         return curtainGridSet;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports curtain wall types to IfcCurtainWallType.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"wrapper\">The ProductWrapper class.</param>\r\n      /// <param name=\"elementHandle\">The element handle.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      public static void ExportCurtainWallType(ExporterIFC exporterIFC, ProductWrapper wrapper, IFCAnyHandle elementHandle, Element element)\r\n      {\r\n         if (elementHandle == null || element == null)\r\n            return;\r\n\r\n         Document doc = element.Document;\r\n         ElementId typeElemId = element.GetTypeId();\r\n         ElementType elementType = doc.GetElement(typeElemId) as ElementType;\r\n         if (elementType == null)\r\n            return;\r\n\r\n         IFCExportInfoPair exportType = new IFCExportInfoPair(IFCEntityType.IfcCurtainWallType);\r\n         IFCAnyHandle wallType = ExporterCacheManager.ElementTypeToHandleCache.Find(elementType, exportType);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(wallType))\r\n         {\r\n            ExporterCacheManager.TypeRelationsCache.Add(wallType, elementHandle);\r\n            return;\r\n         }\r\n\r\n         string elemElementType = NamingUtil.GetElementTypeOverride(elementType, null);\r\n\r\n         // Property sets will be set later.\r\n         wallType = IFCInstanceExporter.CreateCurtainWallType(exporterIFC.GetFile(), elementType,\r\n             null, null, null, elemElementType, (elemElementType != null) ? \"USERDEFINED\" : \"NOTDEFINED\");\r\n\r\n         wrapper.RegisterHandleWithElementType(elementType, exportType, wallType, null);\r\n\r\n         ExporterCacheManager.TypeRelationsCache.Add(wallType, elementHandle);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/CurveElementExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export curve elements.\r\n   /// </summary>\r\n   class CurveElementExporter\r\n   {\r\n      /// <summary>\r\n      /// Checks if the curve element should be exported.\r\n      /// </summary>\r\n      /// <param name=\"curveElement\">The curve element.</param>\r\n      /// <returns>True if the curve element should be exported, false otherwise.</returns>\r\n      private static bool ShouldCurveElementBeExported(CurveElement curveElement)\r\n      {\r\n         CurveElementType curveElementType = curveElement.CurveElementType;\r\n         if (curveElementType != CurveElementType.ModelCurve &&\r\n            curveElementType != CurveElementType.CurveByPoints)\r\n            return false;\r\n\r\n         // Confirm curve is not used by another element\r\n         if (ExporterIFCUtils.IsCurveFromOtherElementSketch(curveElement))\r\n            return false;\r\n\r\n         // Confirm the geometry curve is valid.\r\n         Curve curve = curveElement.GeometryCurve;\r\n         if (curve == null)\r\n            return false;\r\n\r\n         if (curve is Line)\r\n         {\r\n            if (!curve.IsBound)\r\n               return false;\r\n\r\n            XYZ end1 = curve.GetEndPoint(0);\r\n            XYZ end2 = curve.GetEndPoint(1);\r\n            if (end1.IsAlmostEqualTo(end2))\r\n               return false;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      private static void ExportCurveBasedElementCommon(ExporterIFC exporterIFC, Element element,\r\n         GeometryElement geometryElement, ProductWrapper productWrapper, SketchPlane sketchPlane)\r\n      {\r\n         string ifcEnumType = null;\r\n         IFCExportInfoPair exportType =\r\n            ExporterUtil.GetProductExportType(element, out ifcEnumType);\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(exportType.ExportInstance))\r\n            return;\r\n\r\n         ElementId categoryId = CategoryUtil.GetSafeCategoryId(element);\r\n         ElementId sketchPlaneId = sketchPlane?.Id ?? ElementId.InvalidElementId;\r\n\r\n         // If we are exporting an IfcAnnotation, we will do a little extra work to get the local placement close\r\n         // to the sketch plane origin, if there is a sketch plane.  We could also do this in the generic case, \r\n         // but for now just keeping the existing IfcAnnotation code more or less the same.\r\n         bool exportingAnnotation = exportType.ExportInstance == IFCEntityType.IfcAnnotation;\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         using (IFCTransaction transaction = new IFCTransaction(file))\r\n         {\r\n            // Check for containment override\r\n            using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, element, null))\r\n            {\r\n               IFCAnyHandle localPlacement = setter.LocalPlacement;\r\n\r\n               bool allowAdvancedCurve = !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4;\r\n               const GeometryUtil.TrimCurvePreference trimCurvePreference = GeometryUtil.TrimCurvePreference.UsePolyLineOrTrim;\r\n\r\n               IList<IFCAnyHandle> curves = new List<IFCAnyHandle>();\r\n               List<Curve> curvesFromGeomElem =\r\n                  GeometryUtil.GetCurvesFromGeometryElement(geometryElement);\r\n               foreach (Curve curve in curvesFromGeomElem)\r\n               {\r\n                  curves.AddIfNotNull(GeometryUtil.CreateIFCCurveFromRevitCurve(file,\r\n                     exporterIFC, curve, allowAdvancedCurve, null, trimCurvePreference));\r\n               }\r\n\r\n               HashSet<IFCAnyHandle> curveSet = new HashSet<IFCAnyHandle>(curves);\r\n               IFCAnyHandle repItemHnd = IFCInstanceExporter.CreateGeometricCurveSet(file, curveSet);\r\n\r\n               IFCAnyHandle curveStyle = file.CreateStyle(exporterIFC, repItemHnd);\r\n\r\n               if (exportingAnnotation)\r\n               {\r\n                  CurveAnnotationCache annotationCache = ExporterCacheManager.CurveAnnotationCache;\r\n                  IFCAnyHandle curveAnno = annotationCache.GetAnnotation(sketchPlaneId, curveStyle);\r\n                  if (!IFCAnyHandleUtil.IsNullOrHasNoValue(curveAnno))\r\n                  {\r\n                     AddCurvesToAnnotation(curveAnno, curves);\r\n                  }\r\n                  else\r\n                  {\r\n                     curveAnno = CreateCurveAnnotation(exporterIFC, element,\r\n                        categoryId, Transform.Identity, setter,\r\n                        localPlacement, repItemHnd, ifcEnumType);\r\n                     productWrapper.AddAnnotation(curveAnno, setter.LevelInfo, true);\r\n\r\n                     annotationCache.AddAnnotation(sketchPlaneId, curveStyle, curveAnno);\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  string guid = GUIDUtil.CreateGUID(element);\r\n                  IFCAnyHandle productHandle = CreateAnnotationProductRepresentation(exporterIFC,\r\n                     file, element, categoryId, repItemHnd);\r\n                  IFCAnyHandle curveHandle = IFCInstanceExporter.CreateGenericIFCEntity(exportType,\r\n                     file, element, guid, ExporterCacheManager.OwnerHistoryHandle,\r\n                     localPlacement, productHandle);\r\n                  productWrapper.AddElement(element, curveHandle, setter.LevelInfo, null, true, exportType);\r\n               }\r\n            }\r\n            transaction.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a curve element to the appropriate IFC entity.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"curveElement\">The curve element to be exported.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportCurveElement(ExporterIFC exporterIFC, CurveElement curveElement, \r\n         GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         if (geometryElement == null || !ShouldCurveElementBeExported(curveElement))\r\n            return;\r\n\r\n         SketchPlane sketchPlane = curveElement.SketchPlane;\r\n         if (sketchPlane == null)\r\n            return;\r\n\r\n         ExportCurveBasedElementCommon(exporterIFC, curveElement, geometryElement, productWrapper, sketchPlane);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a site property line element to the appropriate IFC entity.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"propertyLine\">The site property line element to be exported.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportPropertyLineElement(ExporterIFC exporterIFC, PropertyLine propertyLine,\r\n         GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         if (geometryElement == null)\r\n            return;\r\n\r\n         ExportCurveBasedElementCommon(exporterIFC, propertyLine, geometryElement, productWrapper, null);\r\n      }\r\n\r\n      static IFCAnyHandle CreateAnnotationProductRepresentation(ExporterIFC exporterIFC, \r\n         IFCFile file, Element curveElement, ElementId categoryId, IFCAnyHandle repItemHnd)\r\n      {\r\n         HashSet<IFCAnyHandle> bodyItems = new HashSet<IFCAnyHandle>() { repItemHnd };\r\n         IFCAnyHandle contextOfItems =\r\n            ExporterCacheManager.GetOrCreate3DContextHandle(exporterIFC, IFCRepresentationIdentifier.Annotation);\r\n\r\n         // Property lines are 2D plan view objects in Revit, so they should stay as such.\r\n         bool is3D = !(curveElement is PropertyLine);\r\n         IFCAnyHandle bodyRepHnd = RepresentationUtil.CreateAnnotationSetRep(exporterIFC,\r\n            curveElement, categoryId, contextOfItems, bodyItems, is3D);\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(bodyRepHnd))\r\n            throw new Exception(\"Failed to create shape representation.\");\r\n\r\n         List<IFCAnyHandle> shapes = new List<IFCAnyHandle>() { bodyRepHnd };\r\n\r\n         return IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, shapes);\r\n      }\r\n\r\n      /// <summary>\r\n      ///  Creates a new IfcAnnotation object.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"curveElement\">The curve element.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"sketchPlaneId\">The sketch plane id.</param>\r\n      /// <param name=\"curveLCS\">The curve local coordinate system.</param>\r\n      /// <param name=\"curveStyle\">The curve style.</param>\r\n      /// <param name=\"placementSetter\">The placemenet setter.</param>\r\n      /// <param name=\"localPlacement\">The local placement.</param>\r\n      /// <param name=\"repItemHnd\">The representation item.</param>\r\n      /// <returns>The handle.</returns>\r\n      static IFCAnyHandle CreateCurveAnnotation(ExporterIFC exporterIFC, Element curveElement, \r\n         ElementId categoryId, Transform curveLCS, \r\n         PlacementSetter placementSetter, IFCAnyHandle localPlacement, \r\n         IFCAnyHandle repItemHnd, string predefinedType)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle prodShapeHnd = CreateAnnotationProductRepresentation(exporterIFC, file,\r\n            curveElement, categoryId, repItemHnd);\r\n\r\n         XYZ xDir = curveLCS.BasisX; XYZ zDir = curveLCS.BasisZ; XYZ origin = curveLCS.Origin;\r\n\r\n         // subtract out level origin if we didn't already before.\r\n         IFCLevelInfo levelInfo = placementSetter.LevelInfo;\r\n         if (levelInfo != null && !MathUtil.IsAlmostEqual(zDir.Z, 1.0))\r\n         {\r\n            zDir -= new XYZ(0, 0, levelInfo.Elevation);\r\n         }\r\n\r\n         origin = UnitUtil.ScaleLength(origin);\r\n         IFCAnyHandle relativePlacement = ExporterUtil.CreateAxis(file, origin, zDir, xDir);\r\n         GeometryUtil.SetRelativePlacement(localPlacement, relativePlacement);\r\n\r\n         string guid = GUIDUtil.CreateGUID(curveElement);\r\n         IFCAnyHandle annotation = IFCInstanceExporter.CreateAnnotation(exporterIFC, curveElement, guid,\r\n            ExporterCacheManager.OwnerHistoryHandle, localPlacement, prodShapeHnd, predefinedType);\r\n\r\n         return annotation;\r\n      }\r\n\r\n      /// <summary>\r\n      ///  Adds IfcCurve handles to the IfcAnnotation handle.\r\n      /// </summary>\r\n      /// <param name=\"annotation\">The annotation.</param>\r\n      /// <param name=\"curves\">The curves.</param>\r\n      static void AddCurvesToAnnotation(IFCAnyHandle annotation, IList<IFCAnyHandle> curves)\r\n      {\r\n         if ((curves?.Count ?? 0) == 0)\r\n            return;\r\n\r\n         IFCAnyHandleUtil.ValidateSubTypeOf(annotation, false, IFCEntityType.IfcAnnotation);\r\n\r\n         IFCAnyHandle prodShapeHnd = IFCAnyHandleUtil.GetRepresentation(annotation);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(prodShapeHnd))\r\n            throw new InvalidOperationException(\"Couldn't find IfcAnnotation.\");\r\n\r\n         List<IFCAnyHandle> repList = IFCAnyHandleUtil.GetRepresentations(prodShapeHnd);\r\n         if (repList.Count != 1)\r\n            throw new InvalidOperationException(\"Invalid repList for IfcAnnotation.\");\r\n\r\n         HashSet<IFCAnyHandle> repItemSet = IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(repList[0], \"Items\");\r\n         if (repItemSet.Count != 1)\r\n            throw new InvalidOperationException(\"Invalid repItemSet for IfcAnnotation.\");\r\n\r\n         IFCAnyHandle repItemHnd = repItemSet.ElementAt(0);\r\n         if (!IFCAnyHandleUtil.IsSubTypeOf(repItemHnd, IFCEntityType.IfcGeometricSet))\r\n            throw new InvalidOperationException(\"Expected GeometricSet for IfcAnnotation.\");\r\n\r\n         HashSet<IFCAnyHandle> newElements = IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(repItemHnd, \"Elements\");\r\n         foreach (IFCAnyHandle curve in curves)\r\n         {\r\n            newElements.Add(curve);\r\n         }\r\n         IFCAnyHandleUtil.SetAttribute(repItemHnd, \"Elements\", newElements);\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/DoorWindowExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export doors and windows.\r\n   /// </summary>\r\n   class DoorWindowExporter\r\n   {\r\n      public static DoorWindowInfo CreateDoor(ExporterIFC exporterIFC, FamilyInstance famInst, HostObject hostObj,\r\n          ElementId overrideLevelId, Transform trf, IFCExportInfoPair exportType)\r\n      {\r\n         return DoorWindowInfo.CreateDoor(exporterIFC, famInst, hostObj, overrideLevelId, trf, exportType);\r\n      }\r\n\r\n      public static DoorWindowInfo CreateWindow(ExporterIFC exporterIFC, FamilyInstance famInst, HostObject hostObj,\r\n          ElementId overrideLevelId, Transform trf, IFCExportInfoPair exportType)\r\n      {\r\n         return DoorWindowInfo.CreateWindow(exporterIFC, famInst, hostObj, overrideLevelId, trf, exportType);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/DuctInsulationExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export a Revit insulation element.\r\n   /// </summary>\r\n   class DuctInsulationExporter : InsulationExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports an element as a covering of type insulation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <returns>True if exported successfully, false otherwise.</returns>\r\n      public static bool ExportDuctInsulation(ExporterIFC exporterIFC, Element element,\r\n          GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         return ExportInsulation(exporterIFC, element, geometryElement, productWrapper);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/DuctLiningExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export a Revit lining element.\r\n   /// </summary>\r\n   class DuctLiningExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports an element as a covering of type insulation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <returns>True if exported successfully, false otherwise.</returns>\r\n      public static bool ExportDuctLining(ExporterIFC exporterIFC, Element element,\r\n          GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         return GenericElementExporter.ExportElement(exporterIFC, element, geometryElement, productWrapper);\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/Exporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\nusing AddInLoader;\r\nusing Autodesk.Revit.ApplicationServices;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.Analysis;\r\nusing Autodesk.Revit.DB.Architecture;\r\nusing Autodesk.Revit.DB.Electrical;\r\nusing Autodesk.Revit.DB.ExternalService;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Mechanical;\r\nusing Autodesk.Revit.DB.Plumbing;\r\nusing Autodesk.Revit.DB.Steel;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Extensions;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Export.Properties;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Utility;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Xml;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// This class implements the methods of interface IExternalDBApplication to register the IFC export client to Autodesk Revit.\r\n   /// </summary>\r\n   class ExporterApplication : IExternalDBApplication\r\n   {\r\n      #region IExternalDBApplication Members\r\n\r\n      /// <summary>\r\n      /// The method called when Autodesk Revit exits.\r\n      /// </summary>\r\n      /// <param name=\"application\">Controlled application to be shutdown.</param>\r\n      /// <returns>Return the status of the external application.</returns>\r\n      public ExternalDBApplicationResult OnShutdown(Autodesk.Revit.ApplicationServices.ControlledApplication application)\r\n      {\r\n         return ExternalDBApplicationResult.Succeeded;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The method called when Autodesk Revit starts.\r\n      /// </summary>\r\n      /// <param name=\"application\">Controlled application to be loaded to Autodesk Revit process.</param>\r\n      /// <returns>Return the status of the external application.</returns>\r\n      public ExternalDBApplicationResult OnStartup(Autodesk.Revit.ApplicationServices.ControlledApplication application)\r\n      {\r\n         // As an ExternalServer, the exporter cannot be registered until full application initialization. Setup an event callback to do this\r\n         // at the appropriate time.\r\n         application.ApplicationInitialized += OnApplicationInitialized;\r\n         return ExternalDBApplicationResult.Succeeded;\r\n      }\r\n\r\n      #endregion\r\n\r\n      /// <summary>\r\n      /// The action taken on application initialization.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The sender.</param>\r\n      /// <param name=\"eventArgs\">The event args.</param>\r\n      private void OnApplicationInitialized(object sender, EventArgs eventArgs)\r\n      {\r\n         SingleServerService service = ExternalServiceRegistry.GetService(ExternalServices.BuiltInExternalServices.IFCExporterService) as SingleServerService;\r\n         if (service != null)\r\n         {\r\n            Exporter exporter = new Exporter();\r\n            service.AddServer(exporter);\r\n            service.SetActiveServer(exporter.GetServerId());\r\n         }\r\n         // TODO log this failure accordingly\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// This class implements the method of interface IExporterIFC to perform an export to IFC.\r\n   /// </summary>\r\n   public class Exporter : IExporterIFC\r\n   {\r\n      RevitStatusBar statusBar = null;\r\n\r\n      // Used for debugging tool \"WriteIFCExportedElements\"\r\n      private StreamWriter m_Writer;\r\n\r\n      private IFCFile m_IfcFile;\r\n\r\n      // Allow a derived class to add Element exporter routines.\r\n      public delegate void ElementExporter(ExporterIFC exporterIFC, Autodesk.Revit.DB.Document document);\r\n\r\n      protected ElementExporter m_ElementExporter = null;\r\n\r\n      // Allow a derived class to add property sets.\r\n      public delegate void PropertySetsToExport(IList<IList<PropertySetDescription>> propertySets);\r\n\r\n      // Allow a derived class to add predefined property sets.\r\n      public delegate void PreDefinedPropertySetsToExport(IList<IList<PreDefinedPropertySetDescription>> propertySets);\r\n\r\n      // Allow a derived class to add quantities.\r\n      public delegate void QuantitiesToExport(IList<IList<QuantityDescription>> propertySets);\r\n\r\n      protected QuantitiesToExport m_QuantitiesToExport = null;\r\n\r\n      #region IExporterIFC Members\r\n\r\n      /// <summary>\r\n      /// Create the list of element export routines.  Each routine will export a subset of Revit elements,\r\n      /// allowing for a choice of which elements are exported, and in what order.\r\n      /// This routine is protected, so it could be overriden by an Exporter class that inherits from this base class.\r\n      /// </summary>\r\n      protected virtual void InitializeElementExporters()\r\n      {\r\n         // Allow another function to potentially add exporters before ExportSpatialElements.\r\n         if (m_ElementExporter == null)\r\n            m_ElementExporter = ExportSpatialElements;\r\n         else\r\n            m_ElementExporter += ExportSpatialElements;\r\n\r\n         // Before we export non-spatial elements, we have to temporarily create all parts if we are\r\n         // going to use them.  This is because parts are affected by other elements.\r\n         m_ElementExporter += ExportParts;\r\n\r\n         m_ElementExporter += ExportNonSpatialElements;\r\n         m_ElementExporter += ExportContainers;\r\n         m_ElementExporter += ExportGrids;\r\n         m_ElementExporter += ExportConnectors;\r\n         // export AdvanceSteel elements\r\n         m_ElementExporter += ExportAdvanceSteelElements;\r\n      }\r\n\r\n      private void ExportHostDocument(ExporterIFC exporterIFC, Document document, View filterView)\r\n      {\r\n         BeginExport(exporterIFC, document, filterView);\r\n         BeginHostDocumentExport(exporterIFC, document);\r\n\r\n         m_ElementExporter?.Invoke(exporterIFC, document);\r\n\r\n         EndHostDocumentExport(exporterIFC, document);\r\n      }\r\n\r\n      private void ExportLinkedDocument(ExporterIFC exporterIFC, ElementId linkId, Document document,\r\n         string guid, Transform linkTrf)\r\n      {\r\n         using (IFCLinkDocumentExportScope linkScope = new IFCLinkDocumentExportScope(document))\r\n         {\r\n            ExporterStateManager.CurrentLinkId = linkId;\r\n            exporterIFC.SetCurrentExportedDocument(document);\r\n\r\n            BeginLinkedDocumentExport(exporterIFC, document, guid);\r\n            m_ElementExporter?.Invoke(exporterIFC, document);\r\n            EndLinkedDocumentExport(exporterIFC, document, linkTrf);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Implements the method that Autodesk Revit will invoke to perform an export to IFC.\r\n      /// </summary>\r\n      /// <param name=\"document\">The document to export.</param>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"filterView\">The view whose filter visibility settings govern the export.</param>\r\n      /// <remarks>Note that filterView doesn't control the exported geometry; it only controls which elements\r\n      /// are visible or not. That allows us to, e.g., choose a plan view but get 3D geometry.</remarks>\r\n      public void ExportIFC(Document document, ExporterIFC exporterIFC, View filterView)\r\n      {\r\n         // Make sure our static caches are clear at the start, and end, of export.\r\n         ExporterCacheManager.Clear(true);\r\n         ExporterStateManager.Clear();\r\n\r\n         try\r\n         {\r\n            ExporterCacheManager.ExporterIFC = exporterIFC;\r\n\r\n            IFCAnyHandleUtil.IFCStringTooLongWarn += (_1) => { document.Application.WriteJournalComment(_1, true); };\r\n            IFCDataUtil.IFCStringTooLongWarn += (_1) => { document.Application.WriteJournalComment(_1, true); };\r\n\r\n            ParamExprListener.ResetParamExprInternalDicts();\r\n            InitializeElementExporters();\r\n\r\n            ExportHostDocument(exporterIFC, document, filterView);\r\n\r\n            IDictionary<long, string> linkInfos =\r\n               ExporterCacheManager.ExportOptionsCache.FederatedLinkInfo;\r\n            if (linkInfos != null)\r\n            {\r\n               foreach (KeyValuePair<long, string> linkInfo in linkInfos)\r\n               {\r\n                  // TODO: Filter out link types that we don't support, and warn, like we\r\n                  // do when exporting separate links.\r\n                  ElementId linkId = new ElementId(linkInfo.Key);\r\n                  RevitLinkInstance rvtLinkInstance = document.GetElement(linkId) as RevitLinkInstance;\r\n                  if (rvtLinkInstance == null)\r\n                     continue;\r\n\r\n                  // Don't export the link if it is hidden in the view.  The standard \r\n                  // filter to determine if we can export an element will return false for\r\n                  // links.\r\n                  GeometryElement geomElem = null;\r\n                  if (filterView != null)\r\n                  {\r\n                     Options options = new Options() { View = filterView };\r\n                     geomElem = rvtLinkInstance.get_Geometry(options);\r\n                     if (geomElem == null)\r\n                        continue;\r\n                  }\r\n\r\n                  Document linkedDocument = rvtLinkInstance.GetLinkDocument();\r\n                  if (linkedDocument != null)\r\n                  {\r\n                     Transform linkTrf = rvtLinkInstance.GetTransform();\r\n                     ExporterCacheManager.Clear(false);\r\n                     ExportLinkedDocument(exporterIFC, rvtLinkInstance.Id, linkedDocument,\r\n                        linkInfo.Value, linkTrf);\r\n                  }\r\n               }\r\n            }\r\n\r\n            IFCFileDocumentInfo ifcFileDocumentInfo = new IFCFileDocumentInfo(document);\r\n            WriteIFCFile(m_IfcFile, ifcFileDocumentInfo);\r\n         }\r\n         catch\r\n         {\r\n            // As of Revit 2022.1, there are no EDM errors to report, because we use ODA.\r\n            FailureMessage fm = new FailureMessage(BuiltInFailures.ExportFailures.IFCFatalExportError);\r\n            document.PostFailure(fm);\r\n         }\r\n         finally\r\n         {\r\n            ExporterCacheManager.Clear(true);\r\n            ExporterStateManager.Clear();\r\n\r\n            DelegateClear();\r\n            IFCAnyHandleUtil.EventClear();\r\n            IFCDataUtil.EventClear();\r\n\r\n            m_Writer?.Close();\r\n\r\n            m_IfcFile?.Close();\r\n            m_IfcFile = null;\r\n         }\r\n      }\r\n\r\n      public virtual string GetDescription()\r\n      {\r\n         return \"IFC open source exporter\";\r\n      }\r\n\r\n      public virtual string GetName()\r\n      {\r\n         return \"IFC exporter\";\r\n      }\r\n\r\n      public virtual Guid GetServerId()\r\n      {\r\n         return new Guid(\"BBE27F6B-E887-4F68-9152-1E664DAD29C3\");\r\n      }\r\n\r\n      public virtual string GetVendorId()\r\n      {\r\n         return \"IFCX\";\r\n      }\r\n\r\n      // This is not virtual, and should not be overriden.\r\n      public Autodesk.Revit.DB.ExternalService.ExternalServiceId GetServiceId()\r\n      {\r\n         return Autodesk.Revit.DB.ExternalService.ExternalServices.BuiltInExternalServices.IFCExporterService;\r\n      }\r\n\r\n      #endregion\r\n\r\n      /// <summary>\r\n      /// Exports the AdvanceSteel specific elements\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporterIFC class.</param>\r\n      /// <param name=\"document\">The Revit document.</param>\r\n      protected void ExportAdvanceSteelElements(ExporterIFC exporterIFC, Autodesk.Revit.DB.Document document)\r\n      {\r\n         // verify if Steel elements should be exported\r\n         if (ExporterCacheManager.ExportOptionsCache.IncludeSteelElements)\r\n         {\r\n            try\r\n            {\r\n               var assembly = AddInLoadContext.ResolvePublicAssembly(new AssemblyName(\"Autodesk.SteelConnections.ASIFC\"));\r\n               if (assembly != null)\r\n               {\r\n                  Type type = assembly.GetType(\"Autodesk.SteelConnections.ASIFC.ASExporter\");\r\n                  if (type != null)\r\n                  {\r\n                     MethodInfo method = type.GetMethod(\"ExportASElements\");\r\n                     if (method != null)\r\n                        method.Invoke(null, new object[] { exporterIFC, document });\r\n                  }\r\n               }\r\n            }\r\n            catch\r\n            { }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if a spatial element is contained inside a section box, if the box exists.\r\n      /// </summary>\r\n      /// <param name=\"sectionBox\">The section box.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>False if there is a section box and the element can be determined to not be inside it.</returns>\r\n      private bool SpatialElementInSectionBox(BoundingBoxXYZ sectionBox, Element element)\r\n      {\r\n         if (sectionBox == null)\r\n            return true;\r\n\r\n         BoundingBoxXYZ elementBBox = element.get_BoundingBox(null);\r\n         if (elementBBox == null)\r\n         {\r\n            // Areas don't have bounding box geometry.  For these, try their location point.\r\n            LocationPoint locationPoint = element.Location as LocationPoint;\r\n            if (locationPoint == null)\r\n               return false;\r\n\r\n            elementBBox = new BoundingBoxXYZ();\r\n            elementBBox.set_Bounds(0, locationPoint.Point);\r\n            elementBBox.set_Bounds(1, locationPoint.Point);\r\n         }\r\n\r\n         return GeometryUtil.BoundingBoxesOverlap(elementBBox, sectionBox);\r\n      }\r\n\r\n      private bool ShouldCreateTemporaryParts(Element element, IFCExportInfoPair exportType)\r\n      {\r\n\r\n         if (exportType.ExportInstance == IFCEntityType.IfcCovering ||\r\n            exportType.ExportInstance == IFCEntityType.IfcRoof ||\r\n            exportType.ExportInstance == IFCEntityType.IfcSlab ||\r\n            exportType.ExportInstance == IFCEntityType.IfcWall ||\r\n            exportType.ExportInstance == IFCEntityType.IfcWallStandardCase)\r\n         {\r\n            return true;\r\n         }\r\n\r\n         ElementId categoryId = CategoryUtil.GetSafeCategoryId(element);\r\n         if (categoryId == new ElementId(BuiltInCategory.OST_Ceilings) ||\r\n            categoryId == new ElementId(BuiltInCategory.OST_Roofs) ||\r\n            categoryId == new ElementId(BuiltInCategory.OST_Floors) ||\r\n            categoryId == new ElementId(BuiltInCategory.OST_Walls))\r\n         {\r\n            return true;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      private bool NeedBuilding()\r\n      {\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(ExporterCacheManager.BuildingHandle))\r\n         {\r\n            return false;\r\n         }\r\n\r\n         if (!ExporterCacheManager.SiteExportInfo.IsSiteExported())\r\n         {\r\n            return true;\r\n         }\r\n\r\n         return ExporterCacheManager.ExportOptionsCache.ExportLinkedFileAs == LinkedFileExportAs.ExportSameSite;\r\n      }\r\n\r\n      private void ExportSite(ExporterIFC exporterIFC, Document document)\r\n      {\r\n         // First create IfcSite with TopographySurface if any.\r\n         // Second examine all Elements in document that would be exported.  If any of them would be exported to IfcSite, do that.\r\n         // Finally, export default IfcSite if the above doesn't apply.\r\n         // \r\n         // Site and Building need to be created first to ensure containment override to work\r\n         ICollection<ElementId> nonSpatialElementIds = ElementFilteringUtil.GetNonSpatialElements(document, exporterIFC);\r\n\r\n         foreach (ElementId topoElemId in nonSpatialElementIds)\r\n         {\r\n            // Note that the TopographySurface exporter in ExportElementImpl does nothing if the\r\n            // element has already been processed here.\r\n            Element topoElem = document.GetElement(topoElemId);\r\n            if (!(topoElem is TopographySurface))\r\n            {\r\n               continue;\r\n            }\r\n\r\n            if (ExportElement(exporterIFC, topoElem))\r\n            {\r\n               ExporterCacheManager.SiteExportInfo.SiteElementId = topoElemId;\r\n               break; // Process only the first exportable one to create the IfcSite\r\n            }\r\n         }\r\n\r\n         // Next check if there are any non-spatial Elements that are \"Exporting As\" IfcSite.  If one is found, Export default\r\n         // IfcSite on behalf of that Element.\r\n         if (!ExporterCacheManager.SiteExportInfo.IsSiteExported())\r\n         {\r\n            foreach (ElementId elementId in nonSpatialElementIds)\r\n            {\r\n               Element element = document.GetElement(elementId);\r\n               if (element == null)\r\n                  continue;\r\n\r\n               if (SiteExporter.ShouldExportElementAsSite(element))\r\n               {\r\n                  ExporterCacheManager.SiteExportInfo.PotentialSiteElementId = elementId;\r\n                  if (ExportElement(exporterIFC, element))\r\n                  {\r\n                     ExporterCacheManager.SiteExportInfo.EstablishPotentialSiteElement();\r\n                     break;\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         // Finally, just export a Default IfcSite if no other Elements export as IfcSite.\r\n         if (!ExporterCacheManager.SiteExportInfo.IsSiteExported())\r\n         {\r\n            using (ProductWrapper productWrapper = ProductWrapper.Create(exporterIFC, true))\r\n            {\r\n               SiteExporter.ExportDefaultSite(exporterIFC, document, productWrapper);\r\n               ExporterUtil.ExportRelatedProperties(exporterIFC, document.ProjectInformation, productWrapper);\r\n            }\r\n         }\r\n      }\r\n\r\n      protected void ExportSpatialElements(ExporterIFC exporterIFC, Document document)\r\n      {\r\n         ExportSite(exporterIFC, document);\r\n\r\n         // Create IfcBuilding first here\r\n         if (NeedBuilding())\r\n         {\r\n            CreateFacilityFromProjectInfo(exporterIFC, document, true, out _);\r\n         }\r\n\r\n         ExportOptionsCache exportOptionsCache = ExporterCacheManager.ExportOptionsCache;\r\n         View filterView = exportOptionsCache.FilterViewForExport;\r\n\r\n         bool exportIfBoundingBoxIsWithinViewExtent = (exportOptionsCache.ExportRoomsInView && filterView is View3D);\r\n         // We don't want to use the filter view for exporting spaces if exportOptionsCache.ExportRoomsInView\r\n         // is true and we have a 3D view.\r\n         bool useFilterViewInCollector = !exportIfBoundingBoxIsWithinViewExtent;\r\n\r\n         ISet<ElementId> exportedSpaces = null;\r\n         if (exportOptionsCache.SpaceBoundaryLevel == 2)\r\n            exportedSpaces = SpatialElementExporter.ExportSpatialElement2ndLevel(this, exporterIFC, document);\r\n\r\n         // Export all spatial elements for no or 1st level room boundaries; for 2nd level, export spaces that \r\n         // couldn't be exported above.\r\n         // Note that FilteredElementCollector is one use only, so we need to create a new one here.\r\n         FilteredElementCollector spatialElementCollector = ElementFilteringUtil.GetExportElementCollector(document, useFilterViewInCollector);\r\n         SpatialElementExporter.InitializeSpatialElementGeometryCalculator(document);\r\n         ElementFilter spatialElementFilter = ElementFilteringUtil.GetSpatialElementFilter(document, exporterIFC);\r\n         spatialElementCollector.WherePasses(spatialElementFilter);\r\n\r\n         // if the view is 3D and section box is active, then set the section box\r\n         BoundingBoxXYZ sectionBox = null;\r\n         if (exportIfBoundingBoxIsWithinViewExtent)\r\n         {\r\n            View3D currentView = filterView as View3D;\r\n            sectionBox = currentView != null && currentView.IsSectionBoxActive ? currentView.GetSectionBox() : null;\r\n         }\r\n\r\n         int numOfSpatialElements = spatialElementCollector.Count<Element>();\r\n         int spatialElementCount = 1;\r\n\r\n         foreach (Element element in spatialElementCollector)\r\n         {\r\n            statusBar.Set(string.Format(Resources.IFCProcessingSpatialElements, spatialElementCount, numOfSpatialElements, element.Id));\r\n            spatialElementCount++;\r\n\r\n            if ((element == null) || (exportedSpaces != null && exportedSpaces.Contains(element.Id)))\r\n               continue;\r\n            if (ElementFilteringUtil.IsRoomInInvalidPhase(element))\r\n               continue;\r\n            // If the element's bounding box doesn't intersect the section box then ignore it.\r\n            // If the section box isn't active, then we export the element.\r\n            if (!SpatialElementInSectionBox(sectionBox, element))\r\n               continue;\r\n            ExportElement(exporterIFC, element);\r\n         }\r\n\r\n         SpatialElementExporter.DestroySpatialElementGeometryCalculator();\r\n      }\r\n\r\n      protected void ExportParts(ExporterIFC exporterIFC, Document document)\r\n      {\r\n         // This is only for IFC4 Reference View.\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n            return;\r\n\r\n         // This is non-optimized for now.\r\n         ICollection<ElementId> nonSpatialElementIds = ElementFilteringUtil.GetNonSpatialElements(document, exporterIFC);\r\n         List<ElementId> hostIds = new();\r\n\r\n         foreach (ElementId nonSpatialElementId in nonSpatialElementIds)\r\n         {\r\n            // We only support a few entities, check here.\r\n            Element element = document.GetElement(nonSpatialElementId);\r\n            IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(element, out _);\r\n            if (!ShouldCreateTemporaryParts(element, exportType))\r\n            {\r\n               continue;\r\n            }\r\n\r\n            // Already has parts, no need to create.\r\n            ICollection<ElementId> associatedParts = PartUtils.GetAssociatedParts(document, nonSpatialElementId, false, true);\r\n            if (associatedParts.Count > 0)\r\n            {\r\n               continue;\r\n            }\r\n\r\n            List<ElementId> ids = new() { nonSpatialElementId };\r\n            if (!PartUtils.AreElementsValidForCreateParts(document, ids))\r\n            {\r\n               continue;\r\n            }\r\n\r\n            hostIds.Add(nonSpatialElementId);\r\n         }\r\n\r\n         int numPartIds = hostIds.Count;\r\n         if (numPartIds == 0)\r\n         {\r\n            return;\r\n         }\r\n\r\n         using (SubTransaction st = new SubTransaction(document))\r\n         {\r\n            st.Start();\r\n\r\n            PartUtils.CreateParts(document, hostIds);\r\n            document.Regenerate();\r\n\r\n            foreach (ElementId hostId in hostIds)\r\n            {\r\n               List<GeometryElement> partGeometries = [];\r\n\r\n               ICollection<ElementId> associatedPartIds = PartUtils.GetAssociatedParts(document, hostId, false, true);\r\n               foreach (ElementId associatedPartId in associatedPartIds)\r\n               {\r\n                  Element part = document.GetElement(associatedPartId);\r\n                  if (part == null)\r\n                     continue;\r\n\r\n                  View ownerView = ExporterUtil.GetViewForElementGeometry(part);\r\n                  Options options = (ownerView == null) ?\r\n                     GeometryUtil.GetIFCExportGeometryOptions() :\r\n                     new() { View = ownerView };\r\n\r\n                  GeometryElement geomElem = part.get_Geometry(options);\r\n                  if (geomElem == null)\r\n                     continue;\r\n\r\n                  GeometryElement geomElemClone = geomElem.GetTransformed(Transform.Identity);\r\n\r\n                  ExporterCacheManager.TemporaryPartsCache.CollectTemporaryPartInfo(exporterIFC, geomElemClone, part);\r\n\r\n                  if (ExporterCacheManager.TemporaryPartsCache.TemporaryPartPresentationLayer == null)\r\n                     ExporterCacheManager.TemporaryPartsCache.TemporaryPartPresentationLayer =\r\n                        exporterIFC.GetLayerNameForPresentationLayer(part, CategoryUtil.GetSafeCategoryId(part)) ?? \"\";\r\n\r\n                  partGeometries.Add(geomElemClone);\r\n\r\n               }\r\n               ExporterCacheManager.TemporaryPartsCache.Register(hostId, partGeometries);\r\n            }\r\n\r\n            st.RollBack();\r\n         }\r\n      }\r\n\r\n      protected void ExportNonSpatialElements(ExporterIFC exporterIFC, Document document)\r\n      {\r\n         // Cache non-spatial Elements for later usage.\r\n         ICollection<ElementId> nonSpatialElements = ElementFilteringUtil.GetNonSpatialElements(document, exporterIFC);\r\n\r\n         int numNonSpatialElements = nonSpatialElements.Count;\r\n         int otherElementCollectorCount = 1;\r\n         foreach (ElementId elementId in nonSpatialElements)\r\n         {\r\n            statusBar.Set(string.Format(Resources.IFCProcessingNonSpatialElements, otherElementCollectorCount, numNonSpatialElements, elementId));\r\n\r\n            if (ExporterCacheManager.SiteExportInfo.IsSiteElementId(elementId))\r\n               continue;\r\n\r\n            otherElementCollectorCount++;\r\n            Element element = document.GetElement(elementId);\r\n            if (element != null)\r\n            {\r\n               ExportElement(exporterIFC, element);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export various containers that depend on individual element export.\r\n      /// </summary>\r\n      /// <param name=\"document\">The Revit document.</param>\r\n      /// <param name=\"exporterIFC\">The exporterIFC class.</param>\r\n      protected void ExportContainers(ExporterIFC exporterIFC, Document document)\r\n      {\r\n         using (ExporterStateManager.ForceElementExport forceElementExport = new ExporterStateManager.ForceElementExport())\r\n         {\r\n            ExportCachedRailings(exporterIFC, document);\r\n            ExportCachedFabricAreas(exporterIFC, document);\r\n            ExportTrusses(exporterIFC, document);\r\n            ExportBeamSystems(exporterIFC, document);\r\n            ExportAreaSchemes(exporterIFC, document);\r\n            ExportGroups(exporterIFC, document);\r\n            ExportZones(exporterIFC, document);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export railings cached during spatial element export.  \r\n      /// Railings are exported last as their containment is not known until all stairs have been exported.\r\n      /// This is a very simple sorting, and further containment issues could require a more robust solution in the future.\r\n      /// </summary>\r\n      /// <param name=\"document\">The Revit document.</param>\r\n      /// <param name=\"exporterIFC\">The exporterIFC class.</param>\r\n      protected void ExportCachedRailings(ExporterIFC exporterIFC, Autodesk.Revit.DB.Document document)\r\n      {\r\n         HashSet<ElementId> railingCollection = ExporterCacheManager.RailingCache;\r\n         int railingIndex = 1;\r\n         int railingCollectionCount = railingCollection.Count;\r\n         foreach (ElementId elementId in ExporterCacheManager.RailingCache)\r\n         {\r\n            statusBar.Set(string.Format(Resources.IFCProcessingRailings, railingIndex, railingCollectionCount, elementId));\r\n            railingIndex++;\r\n            Element element = document.GetElement(elementId);\r\n            ExportElement(exporterIFC, element);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export FabricAreas cached during non-spatial element export.  \r\n      /// We export whatever FabricAreas actually have handles as IfcGroup.\r\n      /// </summary>\r\n      /// <param name=\"document\">The Revit document.</param>\r\n      /// <param name=\"exporterIFC\">The exporterIFC class.</param>\r\n      protected void ExportCachedFabricAreas(ExporterIFC exporterIFC, Autodesk.Revit.DB.Document document)\r\n      {\r\n         IDictionary<ElementId, HashSet<IFCAnyHandle>> fabricAreaCollection = ExporterCacheManager.FabricAreaHandleCache;\r\n         int fabricAreaIndex = 1;\r\n         int fabricAreaCollectionCount = fabricAreaCollection.Count;\r\n         foreach (ElementId elementId in ExporterCacheManager.FabricAreaHandleCache.Keys)\r\n         {\r\n            statusBar.Set(string.Format(Resources.IFCProcessingFabricAreas, fabricAreaIndex, fabricAreaCollectionCount, elementId));\r\n            fabricAreaIndex++;\r\n            Element element = document.GetElement(elementId);\r\n            ExportElement(exporterIFC, element);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export Trusses.  These could be in assemblies, so do before assembly export, but after beams and members are exported.\r\n      /// </summary>\r\n      /// <param name=\"document\">The Revit document.</param>\r\n      /// <param name=\"exporterIFC\">The exporterIFC class.</param>\r\n      protected void ExportTrusses(ExporterIFC exporterIFC, Autodesk.Revit.DB.Document document)\r\n      {\r\n         HashSet<ElementId> trussCollection = ExporterCacheManager.TrussCache;\r\n         int trussIndex = 1;\r\n         int trussCollectionCount = trussCollection.Count;\r\n         foreach (ElementId elementId in ExporterCacheManager.TrussCache)\r\n         {\r\n            statusBar.Set(string.Format(Resources.IFCProcessingTrusses, trussIndex, trussCollectionCount, elementId));\r\n            trussIndex++;\r\n            Element element = document.GetElement(elementId);\r\n            ExportElement(exporterIFC, element);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export BeamSystems.  These could be in assemblies, so do before assembly export, but after beams are exported.\r\n      /// </summary>\r\n      /// <param name=\"document\">The Revit document.</param>\r\n      /// <param name=\"exporterIFC\">The exporterIFC class.</param>\r\n      protected void ExportBeamSystems(ExporterIFC exporterIFC, Autodesk.Revit.DB.Document document)\r\n      {\r\n         HashSet<ElementId> beamSystemCollection = ExporterCacheManager.BeamSystemCache;\r\n         int beamSystemIndex = 1;\r\n         int beamSystemCollectionCount = beamSystemCollection.Count;\r\n         foreach (ElementId elementId in ExporterCacheManager.BeamSystemCache)\r\n         {\r\n            statusBar.Set(string.Format(Resources.IFCProcessingBeamSystems, beamSystemIndex, beamSystemCollectionCount, elementId));\r\n            beamSystemIndex++;\r\n            Element element = document.GetElement(elementId);\r\n            ExportElement(exporterIFC, element);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export Groups.\r\n      /// </summary>\r\n      /// <param name=\"document\">The Revit document.</param>\r\n      /// <param name=\"exporterIFC\">The exporterIFC class.</param>\r\n      protected void ExportGroups(ExporterIFC exporterIFC, Autodesk.Revit.DB.Document document)\r\n      {\r\n         HashSet<ElementId> nonEmptyGroups = new(); // all non-empty groups are exported\r\n         Dictionary<ElementId, bool> emptyGroups = new(); // <group id, exportFlag> some empty groups are exported\r\n\r\n         foreach (ElementId groupId in ExporterCacheManager.GroupCache.Keys)\r\n         {\r\n            if (ExporterCacheManager.GroupCache.IsEmptyGroup(groupId))\r\n               emptyGroups.Add(groupId, false);\r\n            else\r\n               nonEmptyGroups.Add(groupId);\r\n         }\r\n\r\n         // Export groups that are super groups of non-empty groups should be exported\r\n         foreach (ElementId groupId in nonEmptyGroups)\r\n         {\r\n            Element groupElement = document.GetElement(groupId);\r\n            ElementId parentGroupId = groupElement?.GroupId ?? ElementId.InvalidElementId;\r\n\r\n            while (parentGroupId != ElementId.InvalidElementId)\r\n            {\r\n               if (emptyGroups.ContainsKey(parentGroupId))\r\n                  emptyGroups[parentGroupId] = true; // mark to export\r\n\r\n               Element parentGroupElement = document.GetElement(parentGroupId);\r\n               parentGroupId = parentGroupElement.GroupId ?? ElementId.InvalidElementId;\r\n            }\r\n         }\r\n\r\n         List<ElementId> groupsToExport = emptyGroups\r\n            .Where(k => k.Value == true)\r\n            .Select(x => x.Key)\r\n            .Union(nonEmptyGroups)\r\n            .ToList();\r\n\r\n         // Export non-empty groups\r\n         int groupIndex = 1;\r\n         int groupCollectionCount = groupsToExport.Count;\r\n         foreach (ElementId elementId in groupsToExport)\r\n         {\r\n            statusBar.Set(string.Format(Resources.IFCProcessingGroups, groupIndex, groupCollectionCount, elementId));\r\n            groupIndex++;\r\n            Element element = document.GetElement(elementId);\r\n            ExportElement(exporterIFC, element);\r\n         }\r\n\r\n         // Relate group elements to exported group entities\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n         foreach (KeyValuePair<ElementId, GroupInfo> groupEntry in ExporterCacheManager.GroupCache)\r\n         {\r\n            GroupInfo groupInfo = groupEntry.Value;\r\n            IFCAnyHandle groupHandle = groupInfo?.GroupHandle;\r\n            HashSet<IFCAnyHandle> elementHandles = groupInfo?.ElementHandles;\r\n\r\n            if (groupHandle == null ||\r\n               (elementHandles?.Count ?? 0) == 0 ||\r\n               (groupInfo.GroupType?.ExportInstance ?? IFCEntityType.UnKnown) == IFCEntityType.UnKnown)\r\n               continue;\r\n\r\n            if (elementHandles.Contains(groupHandle))\r\n            {\r\n               elementHandles.Remove(groupHandle);\r\n               if (elementHandles.Count == 0)\r\n                  continue;\r\n            }\r\n\r\n            // Group may be exported as IfcFurniture which contains IfcSystemFurnitureElements, so they need a RelAggregates relationship\r\n            if (groupEntry.Value.GroupType.ExportInstance == IFCEntityType.IfcFurniture)\r\n            {\r\n               string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAssignsToGroup, groupHandle));\r\n               IFCInstanceExporter.CreateRelAggregates(file, guid, ownerHistory, null, null, groupHandle, elementHandles);\r\n            }\r\n            else\r\n            {\r\n               Element group = document.GetElement(groupEntry.Key);\r\n               string guid = GUIDUtil.CreateSubElementGUID(group, (int)IFCGroupSubElements.RelAssignsToGroup);\r\n               IFCInstanceExporter.CreateRelAssignsToGroup(file, guid, ownerHistory, null, null, elementHandles, null, groupHandle);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export Zones.\r\n      /// </summary>\r\n      /// <param name=\"document\">The Revit document.</param>\r\n      /// <param name=\"exporterIFC\">The exporterIFC class.</param>\r\n      protected void ExportZones(ExporterIFC exporterIFC, Autodesk.Revit.DB.Document document)\r\n      {\r\n         HashSet<ElementId> zoneCollection = ExporterCacheManager.ZoneCache;\r\n         int zoneIndex = 1;\r\n         int zoneCollectionCount = zoneCollection.Count;\r\n         foreach (ElementId elementId in ExporterCacheManager.ZoneCache)\r\n         {\r\n            statusBar.Set(string.Format(Resources.IFCProcessingExportZones, zoneIndex, zoneCollectionCount, elementId));\r\n            zoneIndex++;\r\n            Element element = document.GetElement(elementId);\r\n            ExportElement(exporterIFC, element);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export Area Schemes.\r\n      /// </summary>\r\n      /// <param name=\"document\">The Revit document.</param>\r\n      /// <param name=\"exporterIFC\">The exporterIFC class.</param>\r\n      protected void ExportAreaSchemes(ExporterIFC exporterIFC, Autodesk.Revit.DB.Document document)\r\n      {\r\n         foreach (ElementId elementId in ExporterCacheManager.AreaSchemeCache.Keys)\r\n         {\r\n            Element element = document.GetElement(elementId);\r\n            ExportElement(exporterIFC, element);\r\n         }\r\n      }\r\n\r\n      protected void ExportGrids(ExporterIFC exporterIFC, Autodesk.Revit.DB.Document document)\r\n      {\r\n         // Export the grids\r\n         GridExporter.Export(exporterIFC, document);\r\n      }\r\n\r\n      protected void ExportConnectors(ExporterIFC exporterIFC, Autodesk.Revit.DB.Document document)\r\n      {\r\n         ConnectorExporter.Export(exporterIFC);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines if the selected element meets extra criteria for export.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter class.</param>\r\n      /// <param name=\"element\">The current element to export.</param>\r\n      /// <returns>True if the element should be exported.</returns>\r\n      protected virtual bool CanExportElement(ExporterIFC exporterIFC, Autodesk.Revit.DB.Element element)\r\n      {\r\n         // Skip the export of AdvanceSteel elements, they will be exported by ExportASElements\r\n         if (ExporterCacheManager.ExportOptionsCache.IncludeSteelElements)\r\n         {\r\n            // In case Autodesk.Revit.DB.Steel is missing, continue the export.\r\n            try\r\n            {\r\n               SteelElementProperties cell = SteelElementProperties.GetSteelElementProperties(element);\r\n               if (cell != null)\r\n               {\r\n                  bool hasGraphics = false;\r\n                  PropertyInfo graphicsCell = cell.GetType().GetProperty(\"HasGraphics\", BindingFlags.Instance | BindingFlags.NonPublic);\r\n                  if (graphicsCell != null) // Concrete elements with cell that have HasGraphics set to true, must be handled by Revit exporter.\r\n                     hasGraphics = (bool)graphicsCell.GetValue(cell, null);\r\n\r\n                  if (hasGraphics)\r\n                     return false;\r\n               }\r\n            }\r\n            catch\r\n            { }\r\n         }\r\n\r\n         return ElementFilteringUtil.CanExportElement(element, false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Performs the export of elements, including spatial and non-spatial elements.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"element\">The element to export.</param>\r\n      /// <returns>False if the element can't be exported at all, true otherwise.</returns>\r\n      /// <remarks>A true return value doesn't mean something was exported, but that the\r\n      /// routine did a quick reject on the element, or an exception occurred.</remarks>\r\n      public virtual bool ExportElement(ExporterIFC exporterIFC, Element element)\r\n      {\r\n         if (!CanExportElement(exporterIFC, element))\r\n         {\r\n            if (element is RevitLinkInstance && ExporterUtil.ExportingHostModel())\r\n            {\r\n               bool bStoreIFCGUID = ExporterCacheManager.ExportOptionsCache.GUIDOptions.StoreIFCGUID;\r\n               ExporterCacheManager.ExportOptionsCache.GUIDOptions.StoreIFCGUID = true;\r\n               GUIDUtil.CreateGUID(element);\r\n               ExporterCacheManager.ExportOptionsCache.GUIDOptions.StoreIFCGUID = bStoreIFCGUID;\r\n            }\r\n            return false;\r\n         }\r\n\r\n         //WriteIFCExportedElements\r\n         if (m_Writer != null)\r\n         {\r\n            string categoryName = CategoryUtil.GetCategoryName(element);\r\n            m_Writer.WriteLine(string.Format(\"{0},{1},{2}\", element.Id, string.IsNullOrEmpty(categoryName) ? \"null\" : categoryName, element.GetType().Name));\r\n         }\r\n\r\n         try\r\n         {\r\n            using (ProductWrapper productWrapper = ProductWrapper.Create(exporterIFC, true))\r\n            {\r\n               ExportElementImpl(exporterIFC, element, productWrapper);\r\n               ExporterUtil.ExportRelatedProperties(exporterIFC, element, productWrapper);\r\n            }\r\n\r\n            // We are going to clear the parameter cache for the element (not the type) after the export.\r\n            // We do not expect to need the parameters for this element again, so we can free up the space.\r\n            if (!(element is ElementType) && !ExporterStateManager.ShouldPreserveElementParameterCache(element))\r\n               ParameterUtil.RemoveElementFromCache(element);\r\n         }\r\n         catch (System.Exception ex)\r\n         {\r\n            HandleUnexpectedException(ex, element);\r\n            return false;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Handles the unexpected Exception.\r\n      /// </summary>\r\n      /// <param name=\"ex\">The unexpected exception.</param>\r\n      /// <param name=\"element \">The element got the exception.</param>\r\n      internal void HandleUnexpectedException(Exception exception, Element element)\r\n      {\r\n         Document document = element.Document;\r\n         string errMsg = string.Format(\"IFC error: Exporting element \\\"{0}\\\",{1} - {2}\", element.Name, element.Id, exception.ToString());\r\n         element.Document.Application.WriteJournalComment(errMsg, true);\r\n\r\n         FailureMessage fm = new FailureMessage(BuiltInFailures.ExportFailures.IFCGenericExportWarning);\r\n         fm.SetFailingElement(element.Id);\r\n         document.PostFailure(fm);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Take all the cached Delayed Warnings created during export and writes them to the journal.\r\n      /// </summary>\r\n      private void HandleDelayedExportWarnings()\r\n      {\r\n         Document document = ExporterCacheManager.Document;\r\n         IList<string> delayedWarnings = ExporterCacheManager.DelayedWarnings;\r\n         if ((document == null) || ((delayedWarnings?.Count ?? 0) == 0))\r\n            return;\r\n\r\n         bool warnOnReservedPropertySet = false;\r\n         bool warnOnNewProperty = false;\r\n         string warningMessage = string.Empty;\r\n         foreach (string warning in delayedWarnings)\r\n         {\r\n            if (string.IsNullOrWhiteSpace(warning))\r\n               continue;\r\n\r\n            document.Application.WriteJournalComment(warning, true);\r\n\r\n            if (string.IsNullOrWhiteSpace(UserDefinedPropertySetValidator.ReservedString))\r\n               continue;\r\n\r\n            if (warning.Contains(UserDefinedPropertySetValidator.ReservedString))\r\n            {\r\n               warnOnReservedPropertySet = true;\r\n            }\r\n            else\r\n            {\r\n               warnOnNewProperty = true;\r\n            }\r\n         }\r\n\r\n         if (warnOnReservedPropertySet)\r\n         {\r\n            FailureMessage fm = new FailureMessage(BuiltInFailures.ExportFailures.UserDefinedPropertySetReserved);\r\n            document.PostFailure(fm);\r\n         }\r\n\r\n         if (warnOnNewProperty)\r\n         {\r\n            FailureMessage fm = new FailureMessage(BuiltInFailures.ExportFailures.CannotAddPropertyToReservedPropertySet);\r\n            document.PostFailure(fm);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the element is MEP type.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"element\">The element to check.</param>\r\n      /// <returns>True for MEP type of elements.</returns>\r\n      private bool IsMEPType(Element element, IFCExportInfoPair exportType)\r\n      {\r\n         return (ElementFilteringUtil.IsMEPType(exportType) || ElementFilteringUtil.ProxyForMEPType(element, exportType));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if exporting an element as building elment proxy.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>True for exporting as proxy element.</returns>\r\n      private bool ExportAsProxy(Element element, IFCExportInfoPair exportType)\r\n      {\r\n         // FaceWall should be exported as IfcWall.\r\n         return ((element is FaceWall) || (element is ModelText) || (exportType.ExportInstance == IFCEntityType.IfcBuildingElementProxy) || (exportType.ExportType == IFCEntityType.IfcBuildingElementProxyType));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if exporting an element of Stairs category.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>True if element is of category OST_Stairs.</returns>\r\n      private bool IsStairs(Element element)\r\n      {\r\n         return (CategoryUtil.GetSafeCategoryId(element) == new ElementId(BuiltInCategory.OST_Stairs));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the element is one of the types that contain structural rebar.\r\n      /// </summary>\r\n      /// <param name=\"element\"></param>\r\n      /// <returns></returns>\r\n      private bool IsRebarType(Element element)\r\n      {\r\n         return (element is AreaReinforcement || element is PathReinforcement || element is Rebar || element is RebarContainer);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Implements the export of element.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"element\">The element to export.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper object.</param>\r\n      public virtual void ExportElementImpl(ExporterIFC exporterIFC, Element element, ProductWrapper productWrapper)\r\n      {\r\n         View ownerView = ExporterUtil.GetViewForElementGeometry(element);\r\n         Options options = (ownerView == null) ?\r\n            GeometryUtil.GetIFCExportGeometryOptions() :\r\n            new Options() { View = ownerView };\r\n         \r\n         GeometryElement geomElem = element.get_Geometry(options);\r\n\r\n         // Default: we don't preserve the element parameter cache after export.\r\n         bool shouldPreserveParameterCache = false;\r\n\r\n         try\r\n         {\r\n            exporterIFC.PushExportState(element, geomElem);\r\n            IFCFile file = exporterIFC.GetFile();\r\n\r\n            Document doc = element.Document;\r\n            using (SubTransaction st = new SubTransaction(doc))\r\n            {\r\n               st.Start();\r\n\r\n               // A very quick check if we happen to be exporting only geometry.\r\n               if (ExporterCacheManager.ExportOptionsCache.ExportGeometryOnly)\r\n               {\r\n                  IFCExportInfoPair exportType = new(IFCEntityType.IfcBuildingElementProxy, \"ELEMENT\");\r\n                  ProxyElementExporter.Export(exporterIFC, element, geomElem, productWrapper);\r\n               }\r\n\r\n               // A long list of supported elements.  Please keep in alphabetical order by the first item in the list..\r\n               // Exception:  before handling the List of Elements, check to see if this should be exported as a Main Site.\r\n               // TopologySUrface should be handled in its own method, since it has extra processing.\r\n               else if (ExporterCacheManager.SiteExportInfo.IsPotentialSiteElementId(element.Id))\r\n               {\r\n                  SiteExporter.ExportGenericElementAsSite(exporterIFC, element, geomElem, productWrapper);\r\n               }\r\n               else if (element is AreaScheme)\r\n               {\r\n                  AreaSchemeExporter.ExportAreaScheme(file, element as AreaScheme, productWrapper);\r\n               }\r\n               else if (element is AssemblyInstance)\r\n               {\r\n                  AssemblyInstance assemblyInstance = element as AssemblyInstance;\r\n                  AssemblyInstanceExporter.ExportAssemblyInstanceElement(exporterIFC, assemblyInstance, productWrapper);\r\n               }\r\n               else if (element is BeamSystem)\r\n               {\r\n                  if (ExporterCacheManager.BeamSystemCache.Contains(element.Id))\r\n                     AssemblyInstanceExporter.ExportBeamSystem(exporterIFC, element as BeamSystem, productWrapper);\r\n                  else\r\n                  {\r\n                     ExporterCacheManager.BeamSystemCache.Add(element.Id);\r\n                     shouldPreserveParameterCache = true;\r\n                  }\r\n               }\r\n               else if (element is Ceiling)\r\n               {\r\n                  Ceiling ceiling = element as Ceiling;\r\n                  CeilingExporter.ExportCeilingElement(exporterIFC, ceiling, ref geomElem, productWrapper);\r\n               }\r\n               else if (element is CeilingAndFloor || element is Floor)\r\n               {\r\n                  // This covers both Floors and Building Pads.\r\n                  CeilingAndFloor hostObject = element as CeilingAndFloor;\r\n                  FloorExporter.ExportCeilingAndFloorElement(exporterIFC, hostObject, ref geomElem, productWrapper);\r\n               }\r\n               else if (element is WallFoundation)\r\n               {\r\n                  WallFoundation footing = element as WallFoundation;\r\n                  FootingExporter.ExportFootingElement(exporterIFC, footing, geomElem, productWrapper);\r\n               }\r\n               else if (element is CurveElement)\r\n               {\r\n                  CurveElement curveElem = element as CurveElement;\r\n                  CurveElementExporter.ExportCurveElement(exporterIFC, curveElem, geomElem, productWrapper);\r\n               }\r\n               else if (element is CurtainSystem)\r\n               {\r\n                  CurtainSystem curtainSystem = element as CurtainSystem;\r\n                  CurtainSystemExporter.ExportCurtainSystem(exporterIFC, curtainSystem, productWrapper);\r\n               }\r\n               else if (CurtainSystemExporter.IsLegacyCurtainElement(element))\r\n               {\r\n                  CurtainSystemExporter.ExportLegacyCurtainElement(exporterIFC, element, productWrapper);\r\n               }\r\n               else if (element is DuctInsulation)\r\n               {\r\n                  DuctInsulation ductInsulation = element as DuctInsulation;\r\n                  DuctInsulationExporter.ExportDuctInsulation(exporterIFC, ductInsulation, geomElem, productWrapper);\r\n               }\r\n               else if (element is DuctLining)\r\n               {\r\n                  DuctLining ductLining = element as DuctLining;\r\n                  DuctLiningExporter.ExportDuctLining(exporterIFC, ductLining, geomElem, productWrapper);\r\n               }\r\n               else if (element is ElectricalSystem)\r\n               {\r\n                  ExporterCacheManager.SystemsCache.AddElectricalSystem(element.Id);\r\n               }\r\n               else if (element is FabricArea)\r\n               {\r\n                  // We are exporting the fabric area as a group only.\r\n                  FabricSheetExporter.ExportFabricArea(exporterIFC, element, productWrapper);\r\n               }\r\n               else if (element is FabricSheet)\r\n               {\r\n                  FabricSheet fabricSheet = element as FabricSheet;\r\n                  FabricSheetExporter.ExportFabricSheet(exporterIFC, fabricSheet, geomElem, productWrapper);\r\n               }\r\n               else if (element is FaceWall)\r\n               {\r\n                  WallExporter.ExportWall(exporterIFC, null, element, null, ref geomElem, productWrapper);\r\n               }\r\n               else if (element is FamilyInstance)\r\n               {\r\n                  FamilyInstance familyInstanceElem = element as FamilyInstance;\r\n                  FamilyInstanceExporter.ExportFamilyInstanceElement(exporterIFC, familyInstanceElem, ref geomElem, productWrapper);\r\n               }\r\n               else if (element is FilledRegion)\r\n               {\r\n                  FilledRegion filledRegion = element as FilledRegion;\r\n                  FilledRegionExporter.Export(exporterIFC, filledRegion, productWrapper);\r\n               }\r\n               else if (element is Grid)\r\n               {\r\n                  ExporterCacheManager.GridCache.Add(element);\r\n               }\r\n               else if (element is Group)\r\n               {\r\n                  if (ExporterCacheManager.GroupCache.GetExportFlag(element.Id))\r\n                     GroupExporter.ExportGroupElement(exporterIFC, element as Group, productWrapper);\r\n                  else\r\n                  {\r\n                     ExporterCacheManager.GroupCache.SetExportFlag(element.Id);\r\n                     shouldPreserveParameterCache = true;\r\n                  }\r\n                  \r\n               }\r\n               else if (element is HostedSweep)\r\n               {\r\n                  HostedSweep hostedSweep = element as HostedSweep;\r\n                  HostedSweepExporter.Export(exporterIFC, hostedSweep, geomElem, productWrapper);\r\n               }\r\n               else if (element is Part)\r\n               {\r\n                  Part part = element as Part;\r\n                  if (ExporterCacheManager.ExportOptionsCache.ExportPartsAsBuildingElements)\r\n                     PartExporter.ExportPartAsBuildingElement(exporterIFC, part, geomElem, productWrapper);\r\n                  else\r\n                     PartExporter.ExportStandalonePart(exporterIFC, part, geomElem, productWrapper);\r\n               }\r\n               else if (element is PipeInsulation)\r\n               {\r\n                  PipeInsulation pipeInsulation = element as PipeInsulation;\r\n                  PipeInsulationExporter.ExportPipeInsulation(exporterIFC, pipeInsulation, geomElem, productWrapper);\r\n               }\r\n               else if (element is PropertyLine)\r\n               {\r\n                  PropertyLine propertyLine = element as PropertyLine;\r\n                  CurveElementExporter.ExportPropertyLineElement(exporterIFC, propertyLine, geomElem, productWrapper);\r\n               }\r\n               else if (element is Railing)\r\n               {\r\n                  if (ExporterCacheManager.RailingCache.Contains(element.Id))\r\n                     RailingExporter.ExportRailingElement(exporterIFC, element as Railing, productWrapper);\r\n                  else\r\n                  {\r\n                     ExporterCacheManager.RailingCache.Add(element.Id);\r\n                     RailingExporter.AddSubElementsToCache(element as Railing);\r\n                     shouldPreserveParameterCache = true;\r\n                  }\r\n               }\r\n               else if (RampExporter.IsRamp(element))\r\n               {\r\n                  RampExporter.Export(exporterIFC, element, geomElem, productWrapper);\r\n               }\r\n               else if (IsRebarType(element))\r\n               {\r\n                  RebarExporter.Export(exporterIFC, element, productWrapper);\r\n               }\r\n               else if (element is RebarCoupler)\r\n               {\r\n                  RebarCoupler couplerElem = element as RebarCoupler;\r\n                  RebarCouplerExporter.ExportCoupler(exporterIFC, couplerElem, productWrapper);\r\n               }\r\n               else if (element is RoofBase)\r\n               {\r\n                  RoofBase roofElement = element as RoofBase;\r\n                  RoofExporter.Export(exporterIFC, roofElement, ref geomElem, productWrapper);\r\n               }\r\n               else if (element is SpatialElement)\r\n               {\r\n                  SpatialElement spatialElem = element as SpatialElement;\r\n                  SpatialElementExporter.ExportSpatialElement(exporterIFC, spatialElem, productWrapper);\r\n               }\r\n               else if (IsStairs(element))\r\n               {\r\n                  StairsExporter.Export(exporterIFC, element, geomElem, productWrapper);\r\n               }\r\n               else if (element is TextNote)\r\n               {\r\n                  TextNote textNote = element as TextNote;\r\n                  TextNoteExporter.Export(exporterIFC, textNote, productWrapper);\r\n               }\r\n               else if (element is TopographySurface)\r\n               {\r\n                  TopographySurface topSurface = element as TopographySurface;\r\n                  SiteExporter.ExportTopographySurface(exporterIFC, topSurface, geomElem, productWrapper);\r\n               }\r\n               else if (element is Truss)\r\n               {\r\n                  if (ExporterCacheManager.TrussCache.Contains(element.Id))\r\n                     AssemblyInstanceExporter.ExportTrussElement(exporterIFC, element as Truss, productWrapper);\r\n                  else\r\n                  {\r\n                     ExporterCacheManager.TrussCache.Add(element.Id);\r\n                     shouldPreserveParameterCache = true;\r\n                  }\r\n               }\r\n               else if (element is Wall)\r\n               {\r\n                  Wall wallElem = element as Wall;\r\n                  WallExporter.Export(exporterIFC, wallElem, ref geomElem, productWrapper);\r\n               }\r\n               else if (element is WallSweep)\r\n               {\r\n                  WallSweep wallSweep = element as WallSweep;\r\n                  WallSweepExporter.Export(exporterIFC, wallSweep, geomElem, productWrapper);\r\n               }\r\n               else if (element is GenericZone)\r\n               {\r\n                  if (ExporterCacheManager.ZoneCache.Contains(element.Id))\r\n                     ZoneExporter.ExportZone(exporterIFC, element as GenericZone, productWrapper);\r\n                  else\r\n                  {\r\n                     ExporterCacheManager.ZoneCache.Add(element.Id);\r\n                     shouldPreserveParameterCache = true;\r\n                  }\r\n               }\r\n               else if (element is FabricationPartInsulationLining)\r\n               {\r\n                  FabricationPartInsulationLining fabInsulationOrLining = element as FabricationPartInsulationLining;\r\n                  FabricationPartExporter.ExportFabricationInsulationOrLining(exporterIFC, fabInsulationOrLining, geomElem, productWrapper);\r\n               }\r\n               else if (element is FabricationPart)\r\n               {\r\n                  FabricationPart fabricationPart = element as FabricationPart;\r\n                  FabricationPartExporter.ExportFabricationPart(exporterIFC, fabricationPart, geomElem, productWrapper);\r\n               }\r\n               else\r\n               {\r\n                  string ifcEnumType;\r\n                  IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(element, out ifcEnumType);\r\n\r\n                  // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n                  IFCEntityType elementClassTypeEnum;\r\n                  if (Enum.TryParse(exportType.ExportInstance.ToString(), out elementClassTypeEnum)\r\n                        || Enum.TryParse(exportType.ExportType.ToString(), out elementClassTypeEnum))\r\n                     if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n                        return;\r\n\r\n                  // The intention with the code below is to make this the \"generic\" element exporter, which would export any Revit element as any IFC instance.\r\n                  // We would then in addition have specialized functions that would convert specific Revit elements to specific IFC instances where extra information\r\n                  // could be gathered from the element.\r\n                  bool exported = false;\r\n                  if (IsMEPType(element, exportType))\r\n                  {\r\n                     exported = GenericMEPExporter.Export(exporterIFC, element, geomElem, exportType, ifcEnumType, productWrapper);\r\n                  }\r\n                  else if (ExportAsProxy(element, exportType))\r\n                  {\r\n                     // Note that we currently export FaceWalls as proxies, and that FaceWalls are HostObjects, so we need\r\n                     // to have this check before the (element is HostObject check.\r\n                     exported = ProxyElementExporter.Export(exporterIFC, element, geomElem, productWrapper, exportType);\r\n                  }\r\n                  else if ((element is HostObject) || (element is DirectShape) || (element is MassLevelData))\r\n                  {\r\n                     exported = GenericElementExporter.ExportElement(exporterIFC, element, geomElem, productWrapper);\r\n                  }\r\n\r\n                  if (exported)\r\n                  {\r\n                     // For ducts and pipes, we will add a IfcRelCoversBldgElements during the end of export.\r\n                     if (element is Duct || element is Pipe)\r\n                     {\r\n                        ExporterCacheManager.MEPCache.CoveredElementsCache[element.Id] = element.Category?.Id ?? ElementId.InvalidElementId;\r\n                     }\r\n                     // For cable trays and conduits, we might create systems during the end of export.\r\n                     if (element is CableTray || element is Conduit)\r\n                     {\r\n                        ExporterCacheManager.MEPCache.CableElementsCache.Add(element.Id);\r\n                     }\r\n                  }\r\n               }\r\n\r\n               if (element.AssemblyInstanceId != ElementId.InvalidElementId)\r\n                  ExporterCacheManager.AssemblyInstanceCache.RegisterElements(element.AssemblyInstanceId, productWrapper);\r\n               if (element.GroupId != ElementId.InvalidElementId)\r\n                  ExporterCacheManager.GroupCache.RegisterElements(element.GroupId, productWrapper);\r\n\r\n               st.RollBack();\r\n            }\r\n         }\r\n         finally\r\n         {\r\n            exporterIFC.PopExportState();\r\n            ExporterStateManager.PreserveElementParameterCache(element, shouldPreserveParameterCache);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets the schema information for the current export options.  This can be overridden.\r\n      /// </summary>\r\n      protected virtual IFCFileModelOptions CreateIFCFileModelOptions(ExporterIFC exporterIFC)\r\n      {\r\n         IFCFileModelOptions modelOptions = new IFCFileModelOptions();\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2)\r\n         {\r\n            modelOptions.SchemaName = \"IFC2x2_FINAL\";\r\n         }\r\n         else if (ExporterCacheManager.ExportOptionsCache.ExportAs4)\r\n         {\r\n            modelOptions.SchemaName = \"IFC4\";\r\n         }\r\n         else if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3)\r\n         {\r\n            modelOptions.SchemaName = \"IFC4x3\";   // Temporary until the ODA Toolkit version used supports the final version\r\n         }\r\n         else\r\n         {\r\n            // We leave IFC2x3 as default until IFC4 is finalized and generally supported across platforms.\r\n            modelOptions.SchemaName = \"IFC2x3\";\r\n         }\r\n         return modelOptions;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets the lists of property sets to be exported.  This can be overriden.\r\n      /// </summary>\r\n      protected virtual void InitializePropertySets()\r\n      {\r\n         ExporterInitializer.InitPropertySets();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets the lists of quantities to be exported.  This can be overriden.\r\n      /// </summary>\r\n      protected virtual void InitializeQuantities(IFCVersion fileVersion)\r\n      {\r\n         ExporterInitializer.InitQuantities(m_QuantitiesToExport, ExporterCacheManager.ExportIFCBaseQuantities());\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes the common properties at the beginning of the export process.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"document\">The current document.</param>\r\n      /// <param name=\"filterView\">The optional filter view.</param>\r\n      private void BeginExport(ExporterIFC exporterIFC, Document document, View filterView)\r\n      {\r\n         statusBar = RevitStatusBar.Create();\r\n\r\n         ElementFilteringUtil.InitCategoryVisibilityCache();\r\n         NamingUtil.InitNameIncrNumberCache();\r\n\r\n         string writeIFCExportedElementsVar = Environment.GetEnvironmentVariable(\"WriteIFCExportedElements\");\r\n         if (writeIFCExportedElementsVar != null && writeIFCExportedElementsVar.Length > 0)\r\n         {\r\n            m_Writer = new StreamWriter(@\"c:\\ifc-output-filters.txt\");\r\n         }\r\n\r\n         // cache options\r\n         ExportOptionsCache exportOptionsCache = ExportOptionsCache.Create(exporterIFC, document, filterView);\r\n         ExporterCacheManager.ExportOptionsCache = exportOptionsCache;\r\n\r\n         IFCFileModelOptions modelOptions = CreateIFCFileModelOptions(exporterIFC);\r\n\r\n         m_IfcFile = IFCFile.Create(modelOptions);\r\n         exporterIFC.SetFile(m_IfcFile);\r\n      }\r\n\r\n      private bool ExportBuilding(IList<Level> allLevels)\r\n      {\r\n         foreach (Level level in allLevels)\r\n         {\r\n            if (LevelUtil.IsBuildingStory(level))\r\n               return true;\r\n         }\r\n         return false;\r\n      }\r\n\r\n      private void BeginHostDocumentExport(ExporterIFC exporterIFC, Document document)\r\n      {\r\n         ExporterCacheManager.ExportOptionsCache.UpdateForDocument(exporterIFC, document, null);\r\n\r\n         // Set language.\r\n         Application app = document.Application;\r\n         string pathName = document.PathName;\r\n         LanguageType langType = LanguageType.Unknown;\r\n         if (!string.IsNullOrEmpty(pathName))\r\n         {\r\n            try\r\n            {\r\n               BasicFileInfo basicFileInfo = BasicFileInfo.Extract(pathName);\r\n               if (basicFileInfo != null)\r\n                  langType = basicFileInfo.LanguageWhenSaved;\r\n            }\r\n            catch\r\n            {\r\n            }\r\n         }\r\n         if (langType == LanguageType.Unknown)\r\n            langType = app.Language;\r\n         ExporterCacheManager.LanguageType = langType;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle applicationHandle = CreateApplicationInformation(file, document);\r\n\r\n         // Initialize common properties before creating any rooted entities.\r\n         InitializePropertySets();\r\n         InitializeQuantities(ExporterCacheManager.ExportOptionsCache.FileVersion);\r\n\r\n         CreateProject(exporterIFC, document, applicationHandle);\r\n\r\n         BeginDocumentExportCommon(exporterIFC, document);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes the common properties at the beginning of the export process.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"document\">The document to export.</param>\r\n      private void BeginLinkedDocumentExport(ExporterIFC exporterIFC, Document document, string guid)\r\n      {\r\n         ExporterCacheManager.ExportOptionsCache.UpdateForDocument(exporterIFC, document, guid);\r\n\r\n         BeginDocumentExportCommon(exporterIFC, document);\r\n      }\r\n\r\n      private IFCAnyHandle CreateFacilityPart(ExporterIFC exporterIFC, Level level, string objectType,\r\n         IFCAnyHandle objectPlacement, IFCElementComposition compositionType, double elevation, string predefinedType)\r\n      {\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4x3)\r\n         {\r\n            switch (ExporterCacheManager.ExportOptionsCache.FacilityType)\r\n            {\r\n               case KnownFacilityTypes.Bridge:\r\n                  {\r\n                     return IFCInstanceExporter.CreateBridgePart(exporterIFC, level, ownerHistory, objectType,\r\n                        objectPlacement, compositionType, predefinedType);\r\n                  }\r\n               case KnownFacilityTypes.MarineFacility:\r\n                  {\r\n                     return IFCInstanceExporter.CreateMarinePart(exporterIFC, level, ownerHistory, objectType,\r\n                        objectPlacement, compositionType);\r\n                  }\r\n               case KnownFacilityTypes.Railway:\r\n                  {\r\n                     return IFCInstanceExporter.CreateRailwayPart(exporterIFC, level, ownerHistory, objectType,\r\n                        objectPlacement, compositionType);\r\n                  }\r\n               case KnownFacilityTypes.Road:\r\n                  {\r\n                     return IFCInstanceExporter.CreateRoadPart(exporterIFC, level, ownerHistory, objectType,\r\n                        objectPlacement, compositionType);\r\n                  }\r\n            }\r\n         }\r\n\r\n         return IFCInstanceExporter.CreateBuildingStorey(exporterIFC, level,\r\n            ownerHistory, objectType, objectPlacement, compositionType, elevation);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes the common properties at the beginning of the export process.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"document\">The document to export.</param>\r\n      private void BeginDocumentExportCommon(ExporterIFC exporterIFC, Document document)\r\n      {\r\n         // Force GC to avoid finalizer thread blocking and different export time for equal exports\r\n         ForceGarbageCollection();\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction transaction = new IFCTransaction(file))\r\n         {\r\n            // create building\r\n            IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n            // create levels\r\n            // Check if there is any level assigned as a building storey, if no at all, model will be exported without Building and BuildingStorey, all containment will be to Site\r\n            List<Level> allLevels = !ExporterCacheManager.ExportOptionsCache.ExportGeometryOnly ? LevelUtil.FindAllLevels(document) : [];\r\n\r\n            bool exportBuilding = ExportBuilding(allLevels);\r\n\r\n            // Skip Building if there is no Storey to be exported\r\n            if (CreateFacilityFromProjectInfo(exporterIFC, document, exportBuilding, out IFCAnyHandle facilityPlacement) != null)\r\n            {        \r\n               IList<Element> unassignedBaseLevels = new List<Element>();\r\n\r\n               double lengthScale = UnitUtil.ScaleLengthForRevitAPI();\r\n\r\n               IFCAnyHandle prevBuildingStorey = null;\r\n               IFCAnyHandle prevPlacement = null;\r\n               double prevHeight = 0.0;\r\n               double prevElev = 0.0;\r\n\r\n               int numLevels = allLevels?.Count ?? 0;\r\n               \r\n               // When exporting to IFC 2x3, we have a limited capability to export some Revit view-specific\r\n               // elements, specifically Filled Regions and Text.  However, we do not have the\r\n               // capability to choose which views to export.  As such, we will choose (up to) one DBView per\r\n               // exported level.\r\n               // TODO: Let user choose which view(s) to export.  Ensure that the user know that only one view\r\n               // per level is supported.\r\n               IDictionary<ElementId, View> views = \r\n                  LevelUtil.FindViewsForLevels(document, ViewType.FloorPlan, allLevels);\r\n\r\n               for (int ii = 0; ii < numLevels; ii++)\r\n               {\r\n                  Level level = allLevels[ii];\r\n                  if (level == null)\r\n                     continue;\r\n\r\n                  IFCLevelInfo levelInfo = null;\r\n\r\n                  if (!LevelUtil.IsBuildingStory(level))\r\n                  {\r\n                     if (prevBuildingStorey == null)\r\n                        unassignedBaseLevels.Add(level);\r\n                     else\r\n                     {\r\n                        levelInfo = IFCLevelInfo.Create(prevBuildingStorey, prevPlacement, prevHeight, prevElev, lengthScale, true);\r\n                        ExporterCacheManager.LevelInfoCache.AddLevelInfo(level, levelInfo, false);\r\n                     }\r\n                     continue;\r\n                  }\r\n\r\n                  if (views.TryGetValue(level.Id, out View view) && view != null)\r\n                  {\r\n                     ExporterCacheManager.DBViewsToExport[view.Id] = level.Id;\r\n                  }\r\n\r\n                  double elev = level.ProjectElevation;\r\n                  double height = 0.0;\r\n                  List<ElementId> coincidentLevels = new List<ElementId>();\r\n                  for (int jj = ii + 1; jj < allLevels.Count; jj++)\r\n                  {\r\n                     Level nextLevel = allLevels[jj];\r\n                     if (!LevelUtil.IsBuildingStory(nextLevel))\r\n                        continue;\r\n\r\n                     double nextElev = nextLevel.ProjectElevation;\r\n                     if (!MathUtil.IsAlmostEqual(nextElev, elev))\r\n                     {\r\n                        height = nextElev - elev;\r\n                        break;\r\n                     }\r\n                     else if (ExporterCacheManager.ExportOptionsCache.WallAndColumnSplitting)\r\n                        coincidentLevels.Add(nextLevel.Id);\r\n                  }\r\n\r\n                  double elevation = UnitUtil.ScaleLength(elev);\r\n                  XYZ orig = new(0.0, 0.0, elevation);\r\n\r\n                  IFCAnyHandle placement = ExporterUtil.CreateLocalPlacement(file, facilityPlacement, orig, null, null);\r\n                  string bsObjectType = NamingUtil.GetObjectTypeOverride(level, null);\r\n                  IFCElementComposition ifcComposition = LevelUtil.GetElementCompositionTypeOverride(level);\r\n\r\n                  // IFC4.3 questions: How do we best support predefined type for IfcFacilityParts other than\r\n                  // IfcBuildingStoreys?\r\n                  // Are nested IfcFacilityParts more common/needed, or is that an OK limitation for Revit to only\r\n                  // have one level supported?\r\n                  // Do we need to sort by elevation, even though elevation is only for building stories?\r\n                  string predefinedType = null;\r\n                  IFCAnyHandle facilityPart = CreateFacilityPart(exporterIFC, level, bsObjectType, placement, \r\n                     ifcComposition, elevation, predefinedType);\r\n\r\n                  // Create classification reference when level has classification field name assigned to it\r\n                  ClassificationUtil.CreateClassification(exporterIFC, file, level, facilityPart);\r\n\r\n                  prevBuildingStorey = facilityPart;\r\n                  prevPlacement = placement;\r\n                  prevHeight = height;\r\n                  prevElev = elev;\r\n\r\n                  levelInfo = IFCLevelInfo.Create(facilityPart, placement, height, elev, lengthScale, true);\r\n                  ExporterCacheManager.LevelInfoCache.AddLevelInfo(level, levelInfo, true);\r\n\r\n                  // if we have coincident levels, add buildingstories for them but use the old handle.\r\n                  for (int jj = 0; jj < coincidentLevels.Count; jj++)\r\n                  {\r\n                     level = allLevels[ii + jj + 1];\r\n                     levelInfo = IFCLevelInfo.Create(facilityPart, placement, height, elev, lengthScale, true);\r\n                     ExporterCacheManager.LevelInfoCache.AddLevelInfo(level, levelInfo, true);\r\n                  }\r\n\r\n                  ii += coincidentLevels.Count;\r\n\r\n                  // We will export element properties, quantities and classifications when we decide to keep the level - we may delete it later.\r\n               }\r\n\r\n               // Do a second pass to add level remapping, if any.\r\n               foreach (Level level in allLevels)\r\n               {\r\n                  if (level == null)\r\n                     continue;\r\n\r\n                  ExporterCacheManager.LevelInfoCache.AddLevelRemapping(level);\r\n               }\r\n            }\r\n\r\n            transaction.Commit();\r\n         }\r\n      }\r\n\r\n      private void GetElementHandles(ICollection<ElementId> ids, ISet<IFCAnyHandle> handles)\r\n      {\r\n         if (ids != null)\r\n         {\r\n            foreach (ElementId id in ids)\r\n            {\r\n               handles.AddIfNotNull(ExporterCacheManager.ElementToHandleCache.Find(id));\r\n            }\r\n         }\r\n      }\r\n\r\n      private static IFCAnyHandle CreateRelServicesBuildings(IFCAnyHandle buildingHandle, IFCFile file,\r\n         IFCAnyHandle ownerHistory, IFCAnyHandle systemHandle)\r\n      {\r\n         HashSet<IFCAnyHandle> relatedBuildings = new HashSet<IFCAnyHandle>() { buildingHandle };\r\n         string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n            GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelServicesBuildings, systemHandle));\r\n         return IFCInstanceExporter.CreateRelServicesBuildings(file, guid,\r\n            ownerHistory, null, null, systemHandle, relatedBuildings);\r\n      }\r\n\r\n      private static void UpdateLocalPlacementForElement(IFCAnyHandle elemHnd, IFCFile file,\r\n         IFCAnyHandle containerObjectPlacement, Transform containerInvTrf)\r\n      {\r\n         IFCAnyHandle elemObjectPlacementHnd = IFCAnyHandleUtil.GetObjectPlacement(elemHnd);\r\n\r\n         // In the case that the object has no local placement at all.  In that case, create a new default one, and set the object's\r\n         // local placement relative to the containerObjectPlacement.  Note that in this case we are ignoring containerInvTrf\r\n         // entirely, which may not be the right thing to do, but doesn't currently seem to occur in practice.\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(elemObjectPlacementHnd) || !elemObjectPlacementHnd.IsTypeOf(\"IfcLocalPlacement\"))\r\n         {\r\n            IFCAnyHandle relToContainerPlacement =\r\n               ExporterUtil.CreateLocalPlacement(file, containerObjectPlacement, null, null, null);\r\n            IFCAnyHandleUtil.SetAttribute(elemHnd, \"ObjectPlacement\", relToContainerPlacement);\r\n            return;\r\n         }\r\n\r\n         // There are two cases here.\r\n         // 1. We want to update the local placement of the object to be relative to its container without\r\n         // adjusting its global position.  In this case containerInvTrf would be non-null, and we would\r\n         // adjust the relative placement to keep the global position constant.\r\n         // 2. We want to update the local placement of the object to follow any shift of the parent object.\r\n         // In this case containerInvTrf would be null, and we don't update the relative placement.\r\n         Transform newTrf = null;\r\n         if (containerInvTrf != null)\r\n         {\r\n            IFCAnyHandle oldRelativePlacement = IFCAnyHandleUtil.GetInstanceAttribute(elemObjectPlacementHnd, \"PlacementRelTo\");\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(oldRelativePlacement))\r\n            {\r\n               newTrf = ExporterUtil.GetTransformFromLocalPlacementHnd(elemObjectPlacementHnd, false);\r\n            }\r\n            else\r\n            {\r\n               Transform originalTotalTrf = ExporterUtil.GetTotalTransformFromLocalPlacement(elemObjectPlacementHnd);\r\n               newTrf = containerInvTrf.Multiply(originalTotalTrf);\r\n            }\r\n         }\r\n\r\n         GeometryUtil.SetPlacementRelTo(elemObjectPlacementHnd, containerObjectPlacement);\r\n\r\n         if (newTrf == null)\r\n            return;\r\n\r\n         IFCAnyHandle newRelativePlacement =\r\n            ExporterUtil.CreateAxis2Placement3D(file, newTrf.Origin, newTrf.BasisZ, newTrf.BasisX);\r\n         GeometryUtil.SetRelativePlacement(elemObjectPlacementHnd, newRelativePlacement);\r\n      }\r\n\r\n      private void CreatePresentationLayerAssignments(ExporterIFC exporterIFC, IFCFile file)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 || ExporterCacheManager.ExportOptionsCache.ExportGeometryOnly)\r\n            return;\r\n\r\n         ISet<IFCAnyHandle> assignedRepresentations = new HashSet<IFCAnyHandle>();\r\n         IDictionary<string, ISet<IFCAnyHandle>> combinedPresentationLayerSet =\r\n            new Dictionary<string, ISet<IFCAnyHandle>>();\r\n\r\n         foreach (KeyValuePair<string, ICollection<IFCAnyHandle>> presentationLayerSet in ExporterCacheManager.PresentationLayerSetCache)\r\n         {\r\n            ISet<IFCAnyHandle> validHandles = new HashSet<IFCAnyHandle>();\r\n            foreach (IFCAnyHandle handle in presentationLayerSet.Value)\r\n            {\r\n               if (ExporterCacheManager.HandleToDeleteCache.Contains(handle))\r\n                  continue;\r\n\r\n               if (validHandles.AddIfNotNull(handle))\r\n               {\r\n                  assignedRepresentations.Add(handle);\r\n               }\r\n            }\r\n\r\n            if (validHandles.Count == 0)\r\n               continue;\r\n\r\n            combinedPresentationLayerSet[presentationLayerSet.Key] = validHandles;\r\n         }\r\n\r\n         // Now handle the internal cases.\r\n         IDictionary<string, IList<IFCAnyHandle>> presentationLayerAssignments = exporterIFC.GetPresentationLayerAssignments();\r\n         foreach (KeyValuePair<string, IList<IFCAnyHandle>> presentationLayerAssignment in presentationLayerAssignments)\r\n         {\r\n            // Some of the items may have been deleted, remove them from set.\r\n            ICollection<IFCAnyHandle> newLayeredItemSet = new HashSet<IFCAnyHandle>();\r\n            IList<IFCAnyHandle> initialSet = presentationLayerAssignment.Value;\r\n            foreach (IFCAnyHandle currItem in initialSet)\r\n            {\r\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(currItem) && !assignedRepresentations.Contains(currItem))\r\n                  newLayeredItemSet.Add(currItem);\r\n            }\r\n\r\n            if (newLayeredItemSet.Count == 0)\r\n               continue;\r\n\r\n            string layerName = presentationLayerAssignment.Key;\r\n            ISet<IFCAnyHandle> layeredItemSet;\r\n            if (!combinedPresentationLayerSet.TryGetValue(layerName, out layeredItemSet))\r\n            {\r\n               layeredItemSet = new HashSet<IFCAnyHandle>();\r\n               combinedPresentationLayerSet[layerName] = layeredItemSet;\r\n            }\r\n            layeredItemSet.UnionWith(newLayeredItemSet);\r\n         }\r\n\r\n         foreach (KeyValuePair<string, ISet<IFCAnyHandle>> presentationLayerSet in combinedPresentationLayerSet)\r\n         {\r\n            IFCInstanceExporter.CreatePresentationLayerAssignment(file, presentationLayerSet.Key, null, presentationLayerSet.Value, null);\r\n         }\r\n      }\r\n\r\n      private void OverrideOneGUID(IFCAnyHandle handle, IDictionary<string, int> indexMap, \r\n         Document document, ElementId elementId)\r\n      {\r\n         string typeName = handle.TypeName;\r\n         Element element = document.GetElement(elementId);\r\n         if (element == null)\r\n            return;\r\n\r\n         if (!indexMap.TryGetValue(typeName, out int index))\r\n            index = 1;\r\n\r\n         indexMap[typeName] = index+1;\r\n         string globalId = GUIDUtil.GenerateIFCGuidFrom(\r\n            GUIDUtil.CreateGUIDString(element, \"Internal: \" + typeName + index.ToString()));\r\n         ExporterUtil.SetGlobalId(handle, globalId);\r\n      }\r\n\r\n      private void EndHostDocumentExport(ExporterIFC exporterIFC, Document document)\r\n      {\r\n         EndDocumentExportCommon(exporterIFC, document, false);\r\n      }\r\n\r\n      private void EndLinkedDocumentExport(ExporterIFC exporterIFC, Document document,\r\n         Transform linkTrf)\r\n      {\r\n         EndDocumentExportCommon(exporterIFC, document, true);\r\n\r\n         bool canUseSitePlacement = \r\n            ExporterCacheManager.ExportOptionsCache.ExportLinkedFileAs == LinkedFileExportAs.ExportSameProject;\r\n         IFCAnyHandle topHandle = canUseSitePlacement ? \r\n            ExporterCacheManager.SiteExportInfo.SiteHandle : ExporterCacheManager.BuildingHandle;\r\n         OrientLink(exporterIFC.GetFile(), canUseSitePlacement, \r\n            IFCAnyHandleUtil.GetObjectPlacement(topHandle), linkTrf);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Completes the export process by writing information stored incrementally during export to the file.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"document\">The document to export.</param>\r\n      /// <param name=\"exportingLink\">True if we are exporting a link.</param>\r\n      private void EndDocumentExportCommon(ExporterIFC exporterIFC, Document document,\r\n         bool exportingLink)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n         using (IFCTransaction transaction = new IFCTransaction(file))\r\n         {\r\n            // Relate Ducts and Pipes to their coverings (insulations and linings)\r\n            foreach (KeyValuePair<ElementId, ElementId> ductOrPipe in ExporterCacheManager.MEPCache.CoveredElementsCache)\r\n            {\r\n               ElementId ductOrPipeId = ductOrPipe.Key;\r\n\r\n               IFCAnyHandle ductOrPipeHandle = ExporterCacheManager.MEPCache.Find(ductOrPipeId);\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(ductOrPipeHandle))\r\n                  continue;\r\n\r\n               HashSet<IFCAnyHandle> coveringHandles = new HashSet<IFCAnyHandle>();\r\n\r\n               try\r\n               {\r\n                  if (FamilyInstanceExporter.CategoryCanHaveLining(ductOrPipe.Value))\r\n                  {\r\n                     ICollection<ElementId> liningIds = InsulationLiningBase.GetLiningIds(document, ductOrPipeId);\r\n                     GetElementHandles(liningIds, coveringHandles);\r\n                  }\r\n               }\r\n               catch\r\n               {\r\n               }\r\n\r\n               try\r\n               {\r\n                  ICollection<ElementId> insulationIds = InsulationLiningBase.GetInsulationIds(document, ductOrPipeId);\r\n                  GetElementHandles(insulationIds, coveringHandles);\r\n               }\r\n               catch\r\n               {\r\n               }\r\n\r\n               if (coveringHandles.Count > 0)\r\n               {\r\n                  string relCoversGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                     GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelCoversBldgElements, ductOrPipeHandle));\r\n                  IFCInstanceExporter.CreateRelCoversBldgElements(file, relCoversGuid, ownerHistory, null, null, ductOrPipeHandle, coveringHandles);\r\n               }\r\n            }\r\n\r\n            // Relate stair components to stairs\r\n            foreach (KeyValuePair<ElementId, StairRampContainerInfo> stairRamp in ExporterCacheManager.StairRampContainerInfoCache)\r\n            {\r\n               StairRampContainerInfo stairRampInfo = stairRamp.Value;\r\n\r\n               IList<IFCAnyHandle> hnds = stairRampInfo.StairOrRampHandles;\r\n               for (int ii = 0; ii < hnds.Count; ii++)\r\n               {\r\n                  IFCAnyHandle hnd = hnds[ii];\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(hnd))\r\n                     continue;\r\n\r\n                  IList<IFCAnyHandle> comps = stairRampInfo.Components[ii];\r\n                  if (comps.Count == 0)\r\n                     continue;\r\n\r\n                  ExporterUtil.RelateObjects(exporterIFC, null, hnd, comps);\r\n               }\r\n            }\r\n\r\n            // create a Default site if we have latitude and longitude information.\r\n            if (!ExporterCacheManager.SiteExportInfo.IsSiteExported())\r\n            {\r\n               using (ProductWrapper productWrapper = ProductWrapper.Create(exporterIFC, true))\r\n               {\r\n                  SiteExporter.ExportDefaultSite(exporterIFC, document, productWrapper);\r\n                  ExporterUtil.ExportRelatedProperties(exporterIFC, document.ProjectInformation, productWrapper);\r\n               }\r\n            }\r\n\r\n            ProjectInfo projectInfo = document.ProjectInformation;\r\n\r\n            IFCAnyHandle projectHandle = ExporterCacheManager.ProjectHandle;\r\n            IFCAnyHandle siteHandle = ExporterCacheManager.SiteExportInfo.SiteHandle;\r\n            IFCAnyHandle facilityHandle = ExporterCacheManager.BuildingHandle;\r\n\r\n            bool projectHasSite = !IFCAnyHandleUtil.IsNullOrHasNoValue(siteHandle);\r\n            bool projectHasFacility = !IFCAnyHandleUtil.IsNullOrHasNoValue(facilityHandle);\r\n\r\n            if (!projectHasSite && !projectHasFacility)\r\n            {\r\n               // if at this point the facilityHnd is null, which means that the model does not\r\n               // have Site nor any Level assigned to the FacilityPart, create the IfcFacility \r\n               // as the general container for all the elements (should be backward compatible).\r\n               facilityHandle = CreateFacilityFromProjectInfo(exporterIFC, document, true, out _);\r\n               ExporterCacheManager.BuildingHandle = facilityHandle;\r\n               projectHasFacility = true;\r\n            }\r\n\r\n            IFCAnyHandle siteOrFacilityHnd = projectHasFacility ? facilityHandle : siteHandle;\r\n\r\n            // Last chance to create the building handle was just above.\r\n            if (projectHasSite)\r\n            {\r\n               // Don't add the relation if we've already created it, which is if we are\r\n               // exporting a linked file in a federated export while we are sharing the site.\r\n               if (!exportingLink ||\r\n                  ExporterCacheManager.ExportOptionsCache.ExportLinkedFileAs != LinkedFileExportAs.ExportSameSite)\r\n               {\r\n                  ExporterCacheManager.ContainmentCache.AddRelation(projectHandle, siteHandle);\r\n               }\r\n\r\n               if (projectHasFacility)\r\n               {\r\n                  // assoc. site to the facility.\r\n                  ExporterCacheManager.ContainmentCache.AddRelation(siteHandle, facilityHandle);\r\n\r\n                  IFCAnyHandle buildingPlacement = IFCAnyHandleUtil.GetObjectPlacement(facilityHandle);\r\n                  IFCAnyHandle relPlacement = IFCAnyHandleUtil.GetObjectPlacement(siteHandle);\r\n                  GeometryUtil.SetPlacementRelTo(buildingPlacement, relPlacement);\r\n               }\r\n            }\r\n            else\r\n            {\r\n               // relate building and project if no site\r\n               if (projectHasFacility)\r\n                  ExporterCacheManager.ContainmentCache.AddRelation(projectHandle, facilityHandle);\r\n            }\r\n\r\n            // relate assembly elements to assemblies\r\n            foreach (KeyValuePair<ElementId, AssemblyInstanceInfo> assemblyInfoEntry in ExporterCacheManager.AssemblyInstanceCache)\r\n            {\r\n               AssemblyInstanceInfo assemblyInfo = assemblyInfoEntry.Value;\r\n               if (assemblyInfo == null)\r\n                  continue;\r\n\r\n               IFCAnyHandle assemblyInstanceHandle = assemblyInfo.AssemblyInstanceHandle;\r\n               HashSet<IFCAnyHandle> elementHandles = assemblyInfo.ElementHandles;\r\n               if (elementHandles != null && assemblyInstanceHandle != null && elementHandles.Contains(assemblyInstanceHandle))\r\n                  elementHandles.Remove(assemblyInstanceHandle);\r\n\r\n               if (assemblyInstanceHandle != null && elementHandles != null && elementHandles.Count != 0)\r\n               {\r\n                  Element assemblyInstance = document.GetElement(assemblyInfoEntry.Key);\r\n                  string guid = GUIDUtil.CreateSubElementGUID(assemblyInstance, (int)IFCAssemblyInstanceSubElements.RelContainedInSpatialStructure);\r\n\r\n                  if (IFCAnyHandleUtil.IsSubTypeOf(assemblyInstanceHandle, IFCEntityType.IfcSystem))\r\n                  {\r\n                     IFCInstanceExporter.CreateRelAssignsToGroup(file, guid, ownerHistory, null, null, elementHandles, null, assemblyInstanceHandle);\r\n                  }\r\n                  else\r\n                  {\r\n                     ExporterUtil.RelateObjects(exporterIFC, guid, assemblyInstanceHandle, elementHandles);\r\n                     // Set the PlacementRelTo of assembly elements to assembly instance.\r\n                     IFCAnyHandle assemblyPlacement = IFCAnyHandleUtil.GetObjectPlacement(assemblyInstanceHandle);\r\n                     AssemblyInstanceExporter.SetLocalPlacementsRelativeToAssembly(exporterIFC, assemblyPlacement, elementHandles);\r\n                  }\r\n\r\n                  // We don't do this in RegisterAssemblyElement because we want to make sure that the IfcElementAssembly has been created.\r\n                  ExporterCacheManager.ElementsInAssembliesCache.UnionWith(elementHandles);\r\n               }\r\n            }\r\n\r\n            // Relate levels and products.  This may create new orphaned elements, so deal with those next.\r\n            RelateLevels(exporterIFC, document);\r\n\r\n            IFCAnyHandle defContainerObjectPlacement = IFCAnyHandleUtil.GetObjectPlacement(siteOrFacilityHnd);\r\n            Transform defContainerTrf = ExporterUtil.GetTotalTransformFromLocalPlacement(defContainerObjectPlacement);\r\n            Transform defContainerInvTrf = defContainerTrf.Inverse;\r\n\r\n            // create an association between the IfcBuilding and building elements with no other containment.\r\n            HashSet<IFCAnyHandle> buildingElements = RemoveContainedHandlesFromSet(ExporterCacheManager.LevelInfoCache.OrphanedElements);\r\n            buildingElements.UnionWith(exporterIFC.GetRelatedElements());\r\n            if (buildingElements.Count > 0)\r\n            {\r\n               HashSet<IFCAnyHandle> relatedElementSetForSite = new HashSet<IFCAnyHandle>();\r\n               HashSet<IFCAnyHandle> relatedElementSetForBuilding = new HashSet<IFCAnyHandle>();\r\n               // If the object is supposed to be placed directly on Site or Building, change the object placement to be relative to the Site or Building\r\n               foreach (IFCAnyHandle elemHnd in buildingElements)\r\n               {\r\n                  ElementId elementId = ExporterCacheManager.HandleToElementCache.Find(elemHnd);\r\n                  Element elem = document.GetElement(elementId);\r\n\r\n                  // if there is override, use the override otherwise use default\r\n                  IFCAnyHandle overrideContainer = null;\r\n                  ParameterUtil.OverrideContainmentParameter(elem, out overrideContainer);\r\n\r\n                  bool containerIsSite = projectHasSite;\r\n                  bool containerIsFacility = projectHasFacility;\r\n\r\n                  IFCAnyHandle containerObjectPlacement = null;\r\n                  if (!IFCAnyHandleUtil.IsNullOrHasNoValue(overrideContainer))\r\n                  {\r\n                     containerObjectPlacement = IFCAnyHandleUtil.GetObjectPlacement(overrideContainer);\r\n                     containerIsSite = IFCAnyHandleUtil.IsTypeOf(overrideContainer, IFCEntityType.IfcSite);\r\n                     containerIsFacility = !containerIsSite &&\r\n                        IFCAnyHandleUtil.IsTypeOf(overrideContainer, IFCEntityType.IfcBuilding);\r\n                  }\r\n                  else\r\n                  {\r\n                     // Default behavior (generally facility).\r\n                     containerObjectPlacement = defContainerObjectPlacement;\r\n                  }\r\n\r\n                  if (containerIsFacility)\r\n                     relatedElementSetForBuilding.Add(elemHnd);\r\n                  else if (containerIsSite)\r\n                     relatedElementSetForSite.Add(elemHnd);\r\n                  \r\n                  UpdateLocalPlacementForElement(elemHnd, file, containerObjectPlacement, null);\r\n               }\r\n\r\n               if (relatedElementSetForBuilding.Count > 0 && projectHasFacility)\r\n               {\r\n                  string guid = GUIDUtil.CreateSubElementGUID(projectInfo, (int)IFCProjectSubElements.RelContainedInBuildingSpatialStructure);\r\n                  IFCInstanceExporter.CreateRelContainedInSpatialStructure(file, guid,\r\n                     ownerHistory, null, null, relatedElementSetForBuilding, facilityHandle);\r\n               }\r\n\r\n               if (relatedElementSetForSite.Count > 0 && projectHasSite)\r\n               {\r\n                  string guid = GUIDUtil.CreateSubElementGUID(projectInfo, (int)IFCProjectSubElements.RelContainedInSiteSpatialStructure);\r\n                  IFCInstanceExporter.CreateRelContainedInSpatialStructure(file, guid,\r\n                     ownerHistory, null, null, relatedElementSetForSite, siteHandle);\r\n               }\r\n            }\r\n\r\n            // create an association between the IfcBuilding and spacial elements with no other containment\r\n            // The name \"GetRelatedProducts()\" is misleading; this only covers spaces.\r\n            HashSet<IFCAnyHandle> buildingSpaces = RemoveContainedHandlesFromSet(ExporterCacheManager.LevelInfoCache.OrphanedSpaces);\r\n            buildingSpaces.UnionWith(exporterIFC.GetRelatedProducts());\r\n            if (buildingSpaces.Count > 0)\r\n            {\r\n               HashSet<IFCAnyHandle> relatedElementSetForBuilding = new HashSet<IFCAnyHandle>();\r\n               HashSet<IFCAnyHandle> relatedElementSetForSite = new HashSet<IFCAnyHandle>();\r\n               foreach (IFCAnyHandle indivSpace in buildingSpaces)\r\n               {\r\n                  bool containerIsSite = projectHasSite;\r\n                  bool containerIsBuilding = projectHasFacility;\r\n\r\n                  // if there is override, use the override otherwise use default\r\n                  IFCAnyHandle overrideContainer = null;\r\n                  ParameterUtil.OverrideSpaceContainmentParameter(document, indivSpace, out overrideContainer);\r\n                  IFCAnyHandle containerObjectPlacement = null;\r\n                  Transform containerInvTrf = null;\r\n\r\n                  if (!IFCAnyHandleUtil.IsNullOrHasNoValue(overrideContainer))\r\n                  {\r\n                     containerObjectPlacement = IFCAnyHandleUtil.GetObjectPlacement(overrideContainer);\r\n                     Transform containerTrf = ExporterUtil.GetTotalTransformFromLocalPlacement(containerObjectPlacement);\r\n                     containerInvTrf = containerTrf.Inverse;\r\n                     containerIsSite = IFCAnyHandleUtil.IsTypeOf(overrideContainer, IFCEntityType.IfcSite);\r\n                     containerIsBuilding = !containerIsSite &&\r\n                        IFCAnyHandleUtil.IsTypeOf(overrideContainer, IFCEntityType.IfcBuilding);\r\n                  }\r\n                  else\r\n                  {\r\n                     // Default behavior (generally facility).\r\n                     containerObjectPlacement = defContainerObjectPlacement;\r\n                     containerInvTrf = defContainerInvTrf;\r\n                  }\r\n\r\n                  if (containerIsBuilding)\r\n                     relatedElementSetForBuilding.Add(indivSpace);\r\n                  else if (containerIsSite)\r\n                     relatedElementSetForSite.Add(indivSpace);\r\n\r\n                  UpdateLocalPlacementForElement(indivSpace, file, containerObjectPlacement, containerInvTrf);\r\n               }\r\n\r\n               if (relatedElementSetForBuilding.Count > 0)\r\n               {\r\n                  ExporterCacheManager.ContainmentCache.AddRelations(facilityHandle, null, relatedElementSetForBuilding);\r\n               }\r\n\r\n               if (relatedElementSetForSite.Count > 0)\r\n               {\r\n                  ExporterCacheManager.ContainmentCache.AddRelations(siteHandle, null, relatedElementSetForSite);\r\n               }\r\n            }\r\n\r\n            // relate objects in containment cache.\r\n            foreach (KeyValuePair<IFCAnyHandle, HashSet<IFCAnyHandle>> container in ExporterCacheManager.ContainmentCache.Cache)\r\n            {\r\n               if (container.Value.Count() > 0)\r\n               {\r\n                  string relationGUID = ExporterCacheManager.ContainmentCache.GetGUIDForRelation(container.Key);\r\n                  ExporterUtil.RelateObjects(exporterIFC, relationGUID, container.Key, container.Value);\r\n               }\r\n            }\r\n\r\n            // These elements are created internally, but we allow custom property sets for them.  Create them here.\r\n            using (ProductWrapper productWrapper = ProductWrapper.Create(exporterIFC, true))\r\n            {\r\n               if (projectHasFacility)\r\n                  productWrapper.AddBuilding(projectInfo, facilityHandle);\r\n               if (projectInfo != null)\r\n                  ExporterUtil.ExportRelatedProperties(exporterIFC, projectInfo, productWrapper);\r\n            }\r\n\r\n            // TODO: combine all of the various material paths and caches; they are confusing and\r\n            // prone to error.\r\n\r\n            // create material layer associations\r\n            foreach (KeyValuePair<IFCAnyHandle, ISet<IFCAnyHandle>> materialSetLayerUsage in ExporterCacheManager.MaterialSetUsageCache.Cache)\r\n            {\r\n               if ((materialSetLayerUsage.Value?.Count ?? 0) == 0)\r\n                  continue;\r\n\r\n               string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAssociatesMaterial, ExporterUtil.GetGlobalId(materialSetLayerUsage.Value.First())));\r\n               IFCInstanceExporter.CreateRelAssociatesMaterial(file, guid, ownerHistory,\r\n                  null, null, materialSetLayerUsage.Value,\r\n                  materialSetLayerUsage.Key);\r\n            }\r\n\r\n            // create material constituent set associations\r\n            foreach (KeyValuePair<IFCAnyHandle, ISet<IFCAnyHandle>> relAssoc in ExporterCacheManager.MaterialConstituentSetCache.Cache)\r\n            {\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(relAssoc.Key))\r\n                  continue;\r\n\r\n               ISet<IFCAnyHandle> relatedObjects = ExporterUtil.CleanRefObjects(relAssoc.Value);\r\n               if ((relatedObjects?.Count ?? 0) == 0)\r\n                  continue;\r\n\r\n               // TODO_GUID: relAssoc.Value.First() is somewhat stable, as long as the objects\r\n               // always come in the same order and elements aren't deleted.\r\n               string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAssociatesMaterial, relAssoc.Value.First()));\r\n               IFCInstanceExporter.CreateRelAssociatesMaterial(file, guid, ownerHistory,\r\n                  null, null, relatedObjects, relAssoc.Key);\r\n            }\r\n\r\n            // Update the GUIDs for internally created IfcRoot entities, if any.\r\n            // This is a little expensive because of the inverse attribute workaround, so we only\r\n            // do it if any internal handles were created.\r\n            if (ExporterCacheManager.InternallyCreatedRootHandles.Count > 0)\r\n            {\r\n               // Patch IfcOpeningElement, IfcRelVoidsElement, IfcElementQuantity, and\r\n               // IfcRelDefinesByProperties GUIDs created by internal code.  This code is\r\n               // written specifically for this case, but could be easily generalized.\r\n\r\n               IDictionary<long, ISet<IFCAnyHandle>> elementIdToHandles = \r\n                  new SortedDictionary<long, ISet<IFCAnyHandle>>();\r\n\r\n               // For some reason, the inverse attribute isn't working.  So we need to get\r\n               // the IfcRelVoidElements and IfcRelDefinesByProperties and effectively create\r\n               // the inverse cache, but only if there were any internally created root handles.\r\n\r\n               // First, look at all IfcRelVoidElements.\r\n               IList<IFCAnyHandle> voids = exporterIFC.GetFile().GetInstances(IFCEntityType.IfcRelVoidsElement.ToString(), false);\r\n               foreach (IFCAnyHandle voidHandle in voids)\r\n               {\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(voidHandle))\r\n                     continue;\r\n\r\n                  IFCAnyHandle openingHandle = IFCAnyHandleUtil.GetInstanceAttribute(voidHandle, \"RelatedOpeningElement\");\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(openingHandle))\r\n                     continue;\r\n\r\n                  if (!ExporterCacheManager.InternallyCreatedRootHandles.TryGetValue(openingHandle, out ElementId elementId))\r\n                     continue;\r\n\r\n                  long elementIdVal = elementId.Value;\r\n                  if (!elementIdToHandles.TryGetValue(elementIdVal, out ISet<IFCAnyHandle> internalHandes))\r\n                  {\r\n                     internalHandes = new SortedSet<IFCAnyHandle>(new BaseRelationsCache.IFCAnyHandleComparer());\r\n                     elementIdToHandles[elementIdVal] = internalHandes;\r\n                  }\r\n\r\n                  internalHandes.Add(voidHandle); // IfcRelVoidsElement\r\n               }\r\n\r\n               // Second, look at all IfcRelDefinesByProperties.\r\n               IList<IFCAnyHandle> relProperties = exporterIFC.GetFile().GetInstances(IFCEntityType.IfcRelDefinesByProperties.ToString(), false);\r\n               foreach (IFCAnyHandle relPropertyHandle in relProperties)\r\n               {\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(relPropertyHandle))\r\n                     continue;\r\n\r\n                  ICollection<IFCAnyHandle> relatedHandles = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(relPropertyHandle, \"RelatedObjects\");\r\n                  if ((relatedHandles?.Count ?? 0) == 0)\r\n                     continue;\r\n\r\n                  foreach (IFCAnyHandle relatedHandle in relatedHandles)\r\n                  {\r\n                     if (!ExporterCacheManager.InternallyCreatedRootHandles.TryGetValue(relatedHandle, out ElementId elementId))\r\n                        continue;\r\n\r\n                     long elementIdVal = elementId.Value;\r\n                     if (!elementIdToHandles.TryGetValue(elementIdVal, out ISet<IFCAnyHandle> internalHandes))\r\n                     {\r\n                        internalHandes = new SortedSet<IFCAnyHandle>(new BaseRelationsCache.IFCAnyHandleComparer());\r\n                        elementIdToHandles[elementIdVal] = internalHandes;\r\n                     }\r\n\r\n                     IFCAnyHandle propertyHandle = IFCAnyHandleUtil.GetInstanceAttribute(relPropertyHandle, \"RelatingPropertyDefinition\");\r\n                     internalHandes.Add(propertyHandle); // IfcQuantitySet\r\n                     internalHandes.Add(relPropertyHandle); // IfcRelDefinesByProperties.\r\n                     break;\r\n                  }\r\n               }\r\n\r\n               IDictionary<string, int> indexMap = new Dictionary<string, int>();\r\n\r\n               foreach (KeyValuePair<long, ISet<IFCAnyHandle>> handleSets in elementIdToHandles)\r\n               {\r\n                  ElementId elementId = new ElementId(handleSets.Key);\r\n                  foreach (IFCAnyHandle handle in handleSets.Value)\r\n                  {\r\n                     OverrideOneGUID(handle, indexMap, document, elementId);\r\n                  }\r\n               }\r\n            }\r\n\r\n            // For some older Revit files, we may have the same material name used for multiple\r\n            // elements.  Without doing a significant amount of rewrite that likely isn't worth\r\n            // the effort, we can at least create a cache here of used names with indices so that\r\n            // we don't duplicate the GUID while still reusing the name to match the model.\r\n            IDictionary<string, int> UniqueMaterialNameCache = new Dictionary<string, int>();\r\n\r\n            // create material associations\r\n            foreach (IFCAnyHandle materialHnd in ExporterCacheManager.MaterialRelationsCache.Keys)\r\n            {\r\n               // In some specific cased the reference object might have been deleted. Clear those from the Type cache first here\r\n               ISet<IFCAnyHandle> materialRelationsHandles = ExporterCacheManager.MaterialRelationsCache.CleanRefObjects(materialHnd);\r\n               if ((materialRelationsHandles?.Count ?? 0) > 0)\r\n               {\r\n                  string materialName = GetMaterialNameFromMaterialSelect(materialHnd);\r\n                  \r\n                  string guidHash = materialName;\r\n                  if (UniqueMaterialNameCache.TryGetValue(guidHash, out int index))\r\n                  {\r\n                     UniqueMaterialNameCache[guidHash]++;\r\n                     // In theory this could be a duplicate material name, but really highly\r\n                     // unlikely.\r\n                     guidHash += \" GUID Copy: \" + index.ToString();\r\n                  }\r\n                  else\r\n                  {\r\n                     UniqueMaterialNameCache[guidHash] = 2;\r\n                  }\r\n\r\n                  string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n                     GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAssociatesMaterial, guidHash));\r\n                  IFCInstanceExporter.CreateRelAssociatesMaterial(file, guid, ownerHistory,\r\n                     null, null, materialRelationsHandles, materialHnd);\r\n               }\r\n            }\r\n\r\n            // create type relations\r\n            foreach (IFCAnyHandle typeObj in ExporterCacheManager.TypeRelationsCache.Keys)\r\n            {\r\n               // In some specific cased the reference object might have been deleted. Clear those from the Type cache first here\r\n               ISet<IFCAnyHandle> typeRelCache = ExporterCacheManager.TypeRelationsCache.CleanRefObjects(typeObj);\r\n               if ((typeRelCache?.Count ?? 0) > 0)\r\n               {\r\n                  string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n                     GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelDefinesByType, typeObj));\r\n                  IFCInstanceExporter.CreateRelDefinesByType(file, guid, ownerHistory, \r\n                     null, null, typeRelCache, typeObj);\r\n               }\r\n            }\r\n\r\n            // Create property set relations.\r\n            ExporterCacheManager.CreatedInternalPropertySets.CreateRelations(file);\r\n\r\n            ExporterCacheManager.CreatedSpecialPropertySets.CreateRelations(file);\r\n\r\n            // Create type property relations.\r\n            foreach (TypePropertyInfo typePropertyInfo in ExporterCacheManager.TypePropertyInfoCache.Values)\r\n            {\r\n               if (typePropertyInfo.AssignedToType)\r\n                  continue;\r\n\r\n               ICollection<IFCAnyHandle> propertySets = typePropertyInfo.PropertySets;\r\n               ISet<IFCAnyHandle> elements = typePropertyInfo.Elements;\r\n\r\n               if (elements.Count == 0)\r\n                  continue;\r\n\r\n               foreach (IFCAnyHandle propertySet in propertySets)\r\n               {\r\n                  try\r\n                  {\r\n                     ExporterUtil.CreateRelDefinesByProperties(file,\r\n                        ownerHistory, null, null, elements, propertySet);\r\n                  }\r\n                  catch\r\n                  {\r\n                  }\r\n               }\r\n            }\r\n\r\n            // create space boundaries\r\n            foreach (SpaceBoundary boundary in ExporterCacheManager.SpaceBoundaryCache)\r\n            {\r\n               SpatialElementExporter.ProcessIFCSpaceBoundary(exporterIFC, boundary, file);\r\n            }\r\n\r\n            // create wall/wall connectivity objects\r\n            if (ExporterCacheManager.WallConnectionDataCache.Count > 0 && !ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n            {\r\n               IList<IDictionary<ElementId, IFCAnyHandle>> hostObjects = exporterIFC.GetHostObjects();\r\n               List<int> relatingPriorities = new List<int>();\r\n               List<int> relatedPriorities = new List<int>();\r\n\r\n               string ifcElementEntityType = IFCEntityType.IfcElement.ToString();\r\n\r\n               foreach (WallConnectionData wallConnectionData in ExporterCacheManager.WallConnectionDataCache)\r\n               {\r\n                  foreach (IDictionary<ElementId, IFCAnyHandle> mapForLevel in hostObjects)\r\n                  {\r\n                     IFCAnyHandle wallElementHandle, otherElementHandle;\r\n                     if (!mapForLevel.TryGetValue(wallConnectionData.FirstId, out wallElementHandle))\r\n                        continue;\r\n                     if (!mapForLevel.TryGetValue(wallConnectionData.SecondId, out otherElementHandle))\r\n                        continue;\r\n\r\n                     if (!wallElementHandle.IsSubTypeOf(ifcElementEntityType) ||\r\n                        !otherElementHandle.IsSubTypeOf(ifcElementEntityType))\r\n                        continue;\r\n\r\n                     // NOTE: Definition of RelConnectsPathElements has the connection information reversed\r\n                     // with respect to the order of the paths.\r\n                     string connectionName = ExporterUtil.GetGlobalId(wallElementHandle) + \"|\" + \r\n                        ExporterUtil.GetGlobalId(otherElementHandle);\r\n                     string relGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                        GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelConnectsPathElements,\r\n                           connectionName + \":\" + \r\n                           wallConnectionData.SecondConnectionType.ToString() + \":\" +\r\n                           wallConnectionData.FirstConnectionType.ToString()));\r\n                     const string connectionType = \"Structural\";   // Assigned as Description\r\n                     IFCInstanceExporter.CreateRelConnectsPathElements(file, relGuid, ownerHistory,\r\n                        connectionName, connectionType, wallConnectionData.ConnectionGeometry, \r\n                        wallElementHandle, otherElementHandle, relatingPriorities,\r\n                        relatedPriorities, wallConnectionData.SecondConnectionType, \r\n                        wallConnectionData.FirstConnectionType);\r\n                  }\r\n               }\r\n            }\r\n\r\n            // create Zones and groups of Zones.\r\n            {\r\n               // Collect zone group names as we go.  We will limit a zone to be only in one group.\r\n               IDictionary<string, ISet<IFCAnyHandle>> zoneGroups = new Dictionary<string, ISet<IFCAnyHandle>>();\r\n\r\n               string relAssignsToGroupName = \"Spatial Zone Assignment\";\r\n               foreach (KeyValuePair<string, ZoneInfo> zone in ExporterCacheManager.ZoneInfoCache)\r\n               {\r\n                  ZoneInfo zoneInfo = zone.Value;\r\n                  if (zoneInfo == null)\r\n                     continue;\r\n\r\n                  string zoneName = zone.Key;\r\n                  string zoneGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                     GUIDUtil.CreateGUIDString(IFCEntityType.IfcZone, zone.Key));\r\n                  IFCAnyHandle zoneHandle = IFCInstanceExporter.CreateZone(file, zoneGuid, ownerHistory,\r\n                      zoneName, zoneInfo.Description, zoneInfo.ObjectType, zoneInfo.LongName);\r\n                  string groupGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                     GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAssignsToGroup, zoneName, zoneHandle));\r\n                  IFCInstanceExporter.CreateRelAssignsToGroup(file, groupGuid, ownerHistory,\r\n                      relAssignsToGroupName, null, zoneInfo.RoomHandles, null, zoneHandle);\r\n\r\n                  HashSet<IFCAnyHandle> zoneHnds = new HashSet<IFCAnyHandle>() { zoneHandle };\r\n                  \r\n                  foreach (KeyValuePair<string, IFCAnyHandle> classificationReference in zoneInfo.ClassificationReferences)\r\n                  {\r\n                     string relGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                        GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAssociatesClassification,\r\n                        classificationReference.Key, zoneHandle));\r\n                     ExporterCacheManager.ClassificationCache.AddRelation(classificationReference.Value, \r\n                        relGuid, classificationReference.Key, null, zoneHnds);\r\n                  }\r\n\r\n                  IFCAnyHandle zoneCommonProperySetHandle = zoneInfo.CreateZoneCommonPSetData(file);\r\n                  if (!IFCAnyHandleUtil.IsNullOrHasNoValue(zoneCommonProperySetHandle))\r\n                  {\r\n                     ExporterUtil.CreateRelDefinesByProperties(file,\r\n                         ownerHistory, null, null, zoneHnds, zoneCommonProperySetHandle);\r\n                  }\r\n\r\n                  string groupName = zoneInfo.GroupName;\r\n                  if (!string.IsNullOrWhiteSpace(groupName))\r\n                  {\r\n                     ISet<IFCAnyHandle> currentGroup = null;\r\n                     if (!zoneGroups.TryGetValue(groupName, out currentGroup))\r\n                     {\r\n                        currentGroup = new HashSet<IFCAnyHandle>();\r\n                        zoneGroups.Add(groupName, currentGroup);\r\n                     }\r\n                     currentGroup.Add(zoneHandle);\r\n                  }\r\n               }\r\n\r\n               // now create any zone groups.\r\n               string relAssignsToZoneGroupName = \"Zone Group Assignment\";\r\n               foreach (KeyValuePair<string, ISet<IFCAnyHandle>> zoneGroup in zoneGroups)\r\n               {\r\n                  string zoneGroupGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                     GUIDUtil.CreateGUIDString(IFCEntityType.IfcGroup, zoneGroup.Key));\r\n                  IFCAnyHandle zoneGroupHandle = IFCInstanceExporter.CreateGroup(file,\r\n                     zoneGroupGuid, ownerHistory, zoneGroup.Key, null, null);\r\n                  string zoneGroupRelAssignsGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                     GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAssignsToGroup, zoneGroup.Key));\r\n                  IFCInstanceExporter.CreateRelAssignsToGroup(file, zoneGroupRelAssignsGuid, \r\n                     ownerHistory, relAssignsToZoneGroupName, null, zoneGroup.Value, null, \r\n                     zoneGroupHandle);\r\n               }\r\n            }\r\n\r\n            // create Space Occupants\r\n            {\r\n               foreach (string spaceOccupantName in ExporterCacheManager.SpaceOccupantInfoCache.Keys)\r\n               {\r\n                  SpaceOccupantInfo spaceOccupantInfo = ExporterCacheManager.SpaceOccupantInfoCache.Find(spaceOccupantName);\r\n                  if (spaceOccupantInfo != null)\r\n                  {\r\n                     IFCAnyHandle person = IFCInstanceExporter.CreatePerson(file, null, spaceOccupantName, null, null, null, null, null, null);\r\n                     string occupantGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                        GUIDUtil.CreateGUIDString(IFCEntityType.IfcOccupant, spaceOccupantName));\r\n                     IFCAnyHandle spaceOccupantHandle = IFCInstanceExporter.CreateOccupant(file,\r\n                        occupantGuid, ownerHistory, null, null, spaceOccupantName, person, \r\n                        IFCOccupantType.NotDefined);\r\n\r\n                     string relOccupiesSpacesGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                        GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelOccupiesSpaces, spaceOccupantHandle));\r\n                     IFCInstanceExporter.CreateRelOccupiesSpaces(file, relOccupiesSpacesGuid, \r\n                        ownerHistory, null, null, spaceOccupantInfo.RoomHandles, null, \r\n                        spaceOccupantHandle, null);\r\n\r\n                     HashSet<IFCAnyHandle> spaceOccupantHandles = \r\n                        new HashSet<IFCAnyHandle>() { spaceOccupantHandle };\r\n\r\n                     foreach (KeyValuePair<string, IFCAnyHandle> classificationReference in spaceOccupantInfo.ClassificationReferences)\r\n                     {\r\n                        string relGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                           GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAssociatesClassification,\r\n                           classificationReference.Key, spaceOccupantHandle));\r\n                        ExporterCacheManager.ClassificationCache.AddRelation(classificationReference.Value,\r\n                           relGuid, classificationReference.Key, null, spaceOccupantHandles);\r\n                     }\r\n\r\n                     if (spaceOccupantInfo.SpaceOccupantProperySetHandle != null && spaceOccupantInfo.SpaceOccupantProperySetHandle.HasValue)\r\n                     {\r\n                        ExporterUtil.CreateRelDefinesByProperties(file, \r\n                           ownerHistory, null, null, spaceOccupantHandles, spaceOccupantInfo.SpaceOccupantProperySetHandle);\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n\r\n            // Create systems.\r\n            ExportCachedSystem(exporterIFC, document, file, ExporterCacheManager.SystemsCache.BuiltInSystemsCache, ownerHistory, facilityHandle, projectHasFacility, false);\r\n            ExportCachedSystem(exporterIFC, document, file, ExporterCacheManager.SystemsCache.ElectricalSystemsCache, ownerHistory, facilityHandle, projectHasFacility, true);\r\n            ExportCableTraySystem(document, file, ExporterCacheManager.MEPCache.CableElementsCache, ownerHistory, facilityHandle, projectHasFacility);\r\n\r\n            // Add presentation layer assignments - this is in addition to those created internally.\r\n            // Any representation in this list will override any internal assignment.\r\n            CreatePresentationLayerAssignments(exporterIFC, file);\r\n\r\n            // Add door/window openings.\r\n            ExporterCacheManager.DoorWindowDelayedOpeningCreatorCache.ExecuteCreators(exporterIFC, document);\r\n\r\n            foreach (SpaceInfo spaceInfo in ExporterCacheManager.SpaceInfoCache.SpaceInfos.Values)\r\n            {\r\n               if (spaceInfo.RelatedElements.Count > 0)\r\n               {\r\n                  string relContainedGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                     GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelContainedInSpatialStructure,\r\n                     spaceInfo.SpaceHandle));\r\n                  IFCInstanceExporter.CreateRelContainedInSpatialStructure(file, relContainedGuid, ownerHistory,\r\n                      null, null, spaceInfo.RelatedElements, spaceInfo.SpaceHandle);\r\n               }\r\n            }\r\n\r\n            // Create RelAssociatesClassifications.\r\n            foreach (var relAssociatesInfo in ExporterCacheManager.ClassificationCache.ClassificationRelations)\r\n            {\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(relAssociatesInfo.Key))\r\n                  continue;\r\n\r\n               IFCInstanceExporter.CreateRelAssociatesClassification(file,\r\n                  relAssociatesInfo.Value.GlobalId, ownerHistory,\r\n                  relAssociatesInfo.Value.Name,\r\n                  relAssociatesInfo.Value.Description,\r\n                  relAssociatesInfo.Value.RelatedObjects,\r\n                  relAssociatesInfo.Key);\r\n            }\r\n\r\n            // Delete handles that are marked for removal\r\n            foreach (IFCAnyHandle handleToDel in ExporterCacheManager.HandleToDeleteCache)\r\n            {\r\n               handleToDel.Delete();\r\n            }\r\n\r\n            // Export material properties\r\n            if (ExporterCacheManager.ExportOptionsCache.PropertySetOptions.ExportMaterialPsets)\r\n               MaterialPropertiesUtil.ExportMaterialProperties(file, exporterIFC);\r\n\r\n            // Create unit assignment\r\n            IFCAnyHandle units = IFCInstanceExporter.CreateUnitAssignment(file, UnitMappingUtil.GetUnitsToAssign());\r\n            ExporterCacheManager.ProjectHandle.SetAttribute(\"UnitsInContext\", units);\r\n\r\n            // Handle any delayed warnings.\r\n            HandleDelayedExportWarnings();\r\n\r\n            // Potentially modify elements with GUID values.\r\n            if (ExporterCacheManager.GUIDsToStoreCache.Count > 0 &&\r\n               ExporterUtil.ExportingHostModel())\r\n            {\r\n               using (SubTransaction st = new SubTransaction(document))\r\n               {\r\n                  st.Start();\r\n                  foreach (KeyValuePair<(ElementId ElementId, BuiltInParameter ParamId), string> elementAndGUID in ExporterCacheManager.GUIDsToStoreCache)\r\n                  {\r\n                     Element element = document.GetElement(elementAndGUID.Key.ElementId);\r\n                     if (element == null || elementAndGUID.Key.ParamId == BuiltInParameter.INVALID || elementAndGUID.Value == null)\r\n                        continue;\r\n\r\n                     ParameterUtil.SetStringParameter(element, elementAndGUID.Key.ParamId, elementAndGUID.Value);\r\n                  }\r\n                  st.Commit();\r\n               }\r\n            }\r\n\r\n            // Allow native code to remove some unused handles and clear internal caches.\r\n            ExporterIFCUtils.EndExportInternal(exporterIFC);\r\n            transaction.Commit();\r\n         }\r\n      }\r\n\r\n      private class IFCFileDocumentInfo\r\n      {\r\n         public string ContentGUIDString { get; private set; } = null;\r\n\r\n         public string VersionGUIDString { get; private set; } = null;\r\n\r\n         public int NumberOfSaves { get; private set; } = 0;\r\n\r\n         public string ProjectNumber { get; private set; } = string.Empty;\r\n\r\n         public string ProjectName { get; private set; } = string.Empty;\r\n\r\n         public string ProjectStatus { get; private set; } = string.Empty;\r\n\r\n         public string VersionName { get; private set; } = string.Empty;\r\n\r\n         public string VersionBuild { get; private set; } = string.Empty;\r\n\r\n         public string VersionBuildName { get; private set; } = string.Empty;\r\n\r\n         public IFCFileDocumentInfo(Document document)\r\n         {\r\n            if (document == null)\r\n               return;\r\n\r\n            ProjectInfo projectInfo = document.ProjectInformation;\r\n            DocumentVersion documentVersion = Document.GetDocumentVersion(document);\r\n            Application application = document?.Application;\r\n\r\n            ExportOptionsCache exportOptionsCache = ExporterCacheManager.ExportOptionsCache;\r\n\r\n            ContentGUIDString = document?.CreationGUID.ToString() ?? string.Empty;\r\n            VersionGUIDString = documentVersion?.VersionGUID.ToString() ?? string.Empty;\r\n            NumberOfSaves = documentVersion?.NumberOfSaves ?? 0;\r\n\r\n            ProjectNumber = projectInfo?.Number ?? string.Empty;\r\n            ProjectName = projectInfo?.Name ?? exportOptionsCache.FileNameOnly;\r\n            ProjectStatus = projectInfo?.Status ?? string.Empty;\r\n\r\n            VersionName = application?.VersionName;\r\n            VersionBuild = application?.VersionBuild;\r\n\r\n            try\r\n            {\r\n               string productName = System.Diagnostics.FileVersionInfo.GetVersionInfo(application?.GetType().Assembly.Location).ProductName.Replace(\" \", \" - \");\r\n               VersionBuildName = productName + \" \" + VersionBuild;\r\n            }\r\n            catch\r\n            { }\r\n         }\r\n      }\r\n\r\n      private void OrientLink(IFCFile file, bool canUseSitePlacement, \r\n         IFCAnyHandle buildingOrSitePlacement, Transform linkTrf)\r\n      {\r\n         // When exporting Link, the relative position of the Link instance in the model needs to be transformed with\r\n         // the offset from the main model site transform\r\n         SiteTransformBasis transformBasis = ExporterCacheManager.ExportOptionsCache.SiteTransformation;\r\n         bool useSitePlacement = canUseSitePlacement && (transformBasis != SiteTransformBasis.Internal);\r\n         bool useRotation = transformBasis == SiteTransformBasis.InternalInTN ||\r\n            transformBasis == SiteTransformBasis.ProjectInTN || \r\n            transformBasis == SiteTransformBasis.Shared || \r\n            transformBasis == SiteTransformBasis.Site;\r\n         Transform sitePl = \r\n            new Transform(CoordReferenceInfo.MainModelCoordReferenceOffset ?? Transform.Identity);\r\n\r\n         XYZ siteOffset = useSitePlacement ? sitePl.Origin : XYZ.Zero;\r\n         if (useRotation && useSitePlacement)\r\n         {\r\n            // For those that oriented in the TN, a rotation is needed to compute a correct offset in TN orientation\r\n            Transform rotationTrfAtInternal = Transform.CreateRotationAtPoint(XYZ.BasisZ, CoordReferenceInfo.MainModelTNAngle, XYZ.Zero);\r\n            siteOffset += rotationTrfAtInternal.OfPoint(linkTrf.Origin);\r\n         }\r\n         else\r\n         {\r\n            siteOffset += linkTrf.Origin;\r\n         }\r\n         sitePl.Origin = XYZ.Zero;\r\n         linkTrf.Origin = XYZ.Zero;\r\n         Transform linkTotTrf = useSitePlacement ? sitePl.Multiply(linkTrf) : linkTrf;\r\n         linkTotTrf.Origin = siteOffset;\r\n\r\n         IFCAnyHandle relativePlacement = ExporterUtil.CreateAxis2Placement3D(file, \r\n            UnitUtil.ScaleLength(linkTotTrf.Origin), linkTotTrf.BasisZ, linkTotTrf.BasisX);\r\n\r\n         // Note that we overwrite this here for subsequent writes, which clobbers the\r\n         // original placement, so the IfcBuilding handle is suspect after this without\r\n         // explicit cleanup.\r\n         GeometryUtil.SetRelativePlacement(buildingOrSitePlacement, relativePlacement);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Write out the IFC file after all entities have been created.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"document\">The document to export.</param>\r\n      private void WriteIFCFile(IFCFile file, IFCFileDocumentInfo ifcFileDocumentInfo)\r\n      {\r\n         ifcFileDocumentInfo ??= new(null);\r\n\r\n         using (IFCTransaction transaction = new IFCTransaction(file))\r\n         {\r\n            //create header\r\n\r\n            ExportOptionsCache exportOptionsCache = ExporterCacheManager.ExportOptionsCache;\r\n\r\n            string coordinationView = null;\r\n            if (exportOptionsCache.ExportAsCoordinationView2)\r\n               coordinationView = \"CoordinationView_V2.0\";\r\n            else\r\n               coordinationView = \"CoordinationView\";\r\n\r\n            List<string> descriptions = [];\r\n            if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2)\r\n            {\r\n               descriptions.Add(\"IFC2X_PLATFORM\");\r\n            }\r\n            else if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n            {\r\n               if (ExporterCacheManager.ExportOptionsCache.FileVersion == IFCVersion.IFCSG)\r\n                  descriptions.Add(\"ViewDefinition [ReferenceView_V1.2, IFC+SG]\");\r\n               else\r\n                  descriptions.Add(\"ViewDefinition [ReferenceView_V1.2]\");\r\n            }\r\n            else if (ExporterCacheManager.ExportOptionsCache.ExportAs4DesignTransferView || ExporterCacheManager.ExportOptionsCache.ExportAs4x3DesignTransferView)\r\n            {\r\n               descriptions.Add(\"ViewDefinition [DesignTransferView_V1.0]\");   // Tentative name as the standard is not yet fuly released\r\n            }\r\n            else\r\n            {\r\n               string currentLine;\r\n               if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3COBIE24DesignDeliverable)\r\n               {\r\n                  currentLine = string.Format(\"ViewDefinition [{0}]\",\r\n                     \"COBie2.4DesignDeliverable\");\r\n               }\r\n               else\r\n               {\r\n                  currentLine = string.Format(\"ViewDefinition [{0}{1}]\",\r\n                     coordinationView,\r\n                     ExporterCacheManager.ExportIFCBaseQuantities() ? \", QuantityTakeOffAddOnView\" : \"\");\r\n               }\r\n\r\n               descriptions.Add(currentLine);\r\n\r\n            }\r\n\r\n            if (!ExporterCacheManager.ExportOptionsCache.ExportGeometryOnly)\r\n            {\r\n               string versionLine = string.Format(\"RevitIdentifiers [ContentGUID: {0}, VersionGUID: {1}, NumberOfSaves: {2}]\",\r\n                  ifcFileDocumentInfo.ContentGUIDString, ifcFileDocumentInfo.VersionGUIDString, ifcFileDocumentInfo.NumberOfSaves);\r\n\r\n               descriptions.Add(versionLine);\r\n\r\n               if (!string.IsNullOrEmpty(ExporterCacheManager.ExportOptionsCache.ExcludeFilter))\r\n               {\r\n                  descriptions.Add(\"Options [Excluded Entities: \" + ExporterCacheManager.ExportOptionsCache.ExcludeFilter + \"]\");\r\n               }\r\n\r\n               string projectNumber = ifcFileDocumentInfo?.ProjectNumber ?? string.Empty;\r\n               string projectName = ifcFileDocumentInfo?.ProjectName ?? string.Empty;\r\n               string projectStatus = ifcFileDocumentInfo?.ProjectStatus ?? string.Empty;\r\n\r\n               IFCAnyHandle project = ExporterCacheManager.ProjectHandle;\r\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(project))\r\n                  IFCAnyHandleUtil.UpdateProject(project, projectNumber, projectName, projectStatus);\r\n            }\r\n\r\n            IFCInstanceExporter.CreateFileSchema(file);\r\n\r\n            // Get stored File Header information from the UI and use it for export\r\n            IFCFileHeaderItem fHItem = ExporterCacheManager.ExportOptionsCache.FileHeaderItem;\r\n\r\n            // Add information in the File Description (e.g. Exchange Requirement) that is assigned in the UI\r\n            if (fHItem.FileDescriptions.Count > 0)\r\n               descriptions.AddRange(fHItem.FileDescriptions);\r\n            IFCInstanceExporter.CreateFileDescription(file, descriptions);\r\n\r\n            List<string> author = [];\r\n            if (string.IsNullOrEmpty(fHItem.AuthorName) == false)\r\n            {\r\n               author.Add(fHItem.AuthorName);\r\n               if (string.IsNullOrEmpty(fHItem.AuthorEmail) == false)\r\n                  author.Add(fHItem.AuthorEmail);\r\n            }\r\n            else\r\n               author.Add(string.Empty);\r\n\r\n            List<string> organization = [];\r\n            if (string.IsNullOrEmpty(fHItem.Organization) == false)\r\n               organization.Add(fHItem.Organization);\r\n            else\r\n               organization.Add(string.Empty);\r\n\r\n            LanguageType langType = ExporterCacheManager.LanguageType;\r\n            string languageExtension = GetLanguageExtension(langType);\r\n            string versionBuildName = ifcFileDocumentInfo.VersionBuildName;\r\n            string versionInfos = versionBuildName + languageExtension + \" - \" +\r\n               ExporterCacheManager.ExportOptionsCache.ExporterVersion;\r\n\r\n            fHItem.Authorization ??= string.Empty;\r\n\r\n            IFCInstanceExporter.CreateFileName(file, exportOptionsCache.FileNameOnly, author, organization,\r\n               ifcFileDocumentInfo.VersionName, versionInfos, fHItem.Authorization);\r\n\r\n            transaction.Commit();\r\n\r\n            IFCFileWriteOptions writeOptions = new()\r\n            {\r\n               FileName = exportOptionsCache.FullFileName,\r\n               FileFormat = exportOptionsCache.IFCFileFormat\r\n            };\r\n\r\n            // Reuse almost all of the information above to write out extra copies of the IFC file.\r\n            if (exportOptionsCache.ExportingSeparateLink())\r\n            {\r\n               IFCAnyHandle buildingOrSiteHnd = ExporterCacheManager.BuildingHandle;\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(buildingOrSiteHnd))\r\n               {\r\n                  buildingOrSiteHnd = ExporterCacheManager.SiteExportInfo.SiteHandle;\r\n               }\r\n               IFCAnyHandle buildingOrSitePlacement = IFCAnyHandleUtil.GetObjectPlacement(buildingOrSiteHnd);\r\n               \r\n               int numRevitLinkInstances = exportOptionsCache.GetNumLinkInstanceInfos();\r\n               for (int ii = 0; ii < numRevitLinkInstances; ii++)\r\n               {\r\n                  // When exporting Link, the relative position of the Link instance in the model needs to be transformed with\r\n                  // the offset from the main model site transform\r\n                  Transform linkTrf = new Transform(ExporterCacheManager.ExportOptionsCache.GetUnscaledLinkInstanceTransform(ii));\r\n                  OrientLink(file, true, buildingOrSitePlacement, linkTrf);\r\n                  \r\n                  string linkInstanceFileName = exportOptionsCache.GetLinkInstanceFileName(ii);\r\n                  if (linkInstanceFileName != null)\r\n                     writeOptions.FileName = linkInstanceFileName;\r\n\r\n                  file.Write(writeOptions);\r\n               }\r\n            }\r\n            else\r\n            {\r\n               file.Write(writeOptions);\r\n            }\r\n\r\n            // Display the message to the user when the IFC File has been completely exported \r\n            statusBar.Set(Resources.IFCExportComplete);\r\n         }\r\n      }\r\n\r\n      private string GetLanguageExtension(LanguageType langType)\r\n      {\r\n         switch (langType)\r\n         {\r\n            case LanguageType.English_USA:\r\n               return \" (ENU)\";\r\n            case LanguageType.German:\r\n               return \" (DEU)\";\r\n            case LanguageType.Spanish:\r\n               return \" (ESP)\";\r\n            case LanguageType.French:\r\n               return \" (FRA)\";\r\n            case LanguageType.Italian:\r\n               return \" (ITA)\";\r\n            case LanguageType.Dutch:\r\n               return \" (NLD)\";\r\n            case LanguageType.Chinese_Simplified:\r\n               return \" (CHS)\";\r\n            case LanguageType.Chinese_Traditional:\r\n               return \" (CHT)\";\r\n            case LanguageType.Japanese:\r\n               return \" (JPN)\";\r\n            case LanguageType.Korean:\r\n               return \" (KOR)\";\r\n            case LanguageType.Russian:\r\n               return \" (RUS)\";\r\n            case LanguageType.Czech:\r\n               return \" (CSY)\";\r\n            case LanguageType.Polish:\r\n               return \" (PLK)\";\r\n            case LanguageType.Hungarian:\r\n               return \" (HUN)\";\r\n            case LanguageType.Brazilian_Portuguese:\r\n               return \" (PTB)\";\r\n            case LanguageType.English_GB:\r\n               return \" (ENG)\";\r\n            default:\r\n               return \"\";\r\n         }\r\n      }\r\n\r\n      private long GetCreationDate(Document document)\r\n      {\r\n         string pathName = document.PathName;\r\n         // If this is not a locally saved file, we can't get the creation date.\r\n         // This will require future work to get this, but it is very minor.\r\n         DateTime creationTimeUtc = DateTime.Now;\r\n         try\r\n         {\r\n            FileInfo fileInfo = new FileInfo(pathName);\r\n            creationTimeUtc = fileInfo.CreationTimeUtc;\r\n         }\r\n         catch\r\n         {\r\n            creationTimeUtc = DateTime.Now;\r\n         }\r\n\r\n         // The IfcTimeStamp is measured in seconds since 1/1/1970.  As such, we divide by 10,000,000 \r\n         // (100-ns ticks in a second) and subtract the 1/1/1970 offset.\r\n         return creationTimeUtc.ToFileTimeUtc() / 10000000 - 11644473600;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates the application information.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"app\">The application object.</param>\r\n      /// <returns>The handle of IFC file.</returns>\r\n      private IFCAnyHandle CreateApplicationInformation(IFCFile file, Document document)\r\n      {\r\n         Application app = document.Application;\r\n         string pathName = document.PathName;\r\n         LanguageType langType = ExporterCacheManager.LanguageType;\r\n         string languageExtension = GetLanguageExtension(langType);\r\n         string productFullName = app.VersionName + languageExtension;\r\n         string productVersion = app.VersionNumber;\r\n         string productIdentifier = \"Revit\";\r\n\r\n         IFCAnyHandle developer = IFCInstanceExporter.CreateOrganization(file, null, productFullName, null, null, null);\r\n         IFCAnyHandle application = IFCInstanceExporter.CreateApplication(file, developer, productVersion, \r\n            productFullName, productIdentifier);\r\n         return application;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates the 3D and 2D contexts information.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"doc\">The document provides the ProjectLocation.</param>\r\n      /// <returns>The collection contains the 3D/2D context (not sub-context) handles of IFC file.</returns>\r\n      private HashSet<IFCAnyHandle> CreateContextInformation(ExporterIFC exporterIFC, Document doc)\r\n      {\r\n         HashSet<IFCAnyHandle> repContexts = new HashSet<IFCAnyHandle>();\r\n\r\n         // Make sure this precision value is in an acceptable range.\r\n         double initialPrecision = doc.Application.VertexTolerance / 10.0;\r\n         initialPrecision = Math.Min(initialPrecision, 1e-3);\r\n         initialPrecision = Math.Max(initialPrecision, 1e-8);\r\n\r\n         double scaledPrecision = UnitUtil.ScaleLength(initialPrecision);\r\n         int exponent = Convert.ToInt32(Math.Log10(scaledPrecision));\r\n         double precision = Math.Pow(10.0, exponent);\r\n\r\n         ExporterCacheManager.LengthPrecision = UnitUtil.UnscaleLength(precision);\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle wcs = null;\r\n         XYZ unscaledOrigin = XYZ.Zero;\r\n\r\n         List<double> directionRatios;\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportingSeparateLink())\r\n         {\r\n            if (CoordReferenceInfo.MainModelGeoRefOrWCS != null)\r\n            {\r\n               unscaledOrigin = CoordReferenceInfo.MainModelGeoRefOrWCS.Origin;\r\n               directionRatios = new() { CoordReferenceInfo.MainModelGeoRefOrWCS.BasisY.X, CoordReferenceInfo.MainModelGeoRefOrWCS.BasisY.Y };\r\n            }\r\n            else\r\n               directionRatios = new() { 0.0, 1.0 };\r\n\r\n            if (CoordReferenceInfo.CrsInfo.CrsInfoNotSet || ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            {\r\n               // For IFC2x3 and before, or when IfcMapConversion info is not provided, the eastings, northings, orthogonalHeight will be assigned to the wcs\r\n               XYZ orig = UnitUtil.ScaleLength(unscaledOrigin);\r\n               wcs = ExporterUtil.CreateAxis2Placement3D(file, orig, null, null);\r\n            }\r\n            else\r\n            {\r\n               // In IFC4 onward and EPSG has value (IfcMapConversion will be created), the wcs will be (0,0,0)\r\n               wcs = IFCInstanceExporter.CreateAxis2Placement3D(file, ExporterCacheManager.Global3DOriginHandle, null, null);\r\n            }\r\n         }\r\n         else\r\n         {\r\n            // These full computation for the WCS or map conversion information will be used only for the main model\r\n            // The link models will follow the main model\r\n\r\n            SiteTransformBasis transformBasis = ExporterCacheManager.ExportOptionsCache.SiteTransformation;\r\n            ProjectLocation projLocation = ExporterCacheManager.SelectedSiteProjectLocation;\r\n\r\n            (double eastings, double northings, double orthogonalHeight, double angleTN, double origAngleTN) geoRefInfo =\r\n               OptionsUtil.GeoReferenceInformation(doc, transformBasis, projLocation);\r\n\r\n            CoordReferenceInfo.MainModelTNAngle = geoRefInfo.origAngleTN;\r\n            double trueNorthAngleConverted = geoRefInfo.angleTN + Math.PI / 2.0;\r\n            directionRatios = new() { Math.Cos(trueNorthAngleConverted), Math.Sin(trueNorthAngleConverted) };\r\n\r\n            unscaledOrigin = new(geoRefInfo.eastings, geoRefInfo.northings, geoRefInfo.orthogonalHeight);\r\n            if (string.IsNullOrEmpty(ExporterCacheManager.ExportOptionsCache.GeoRefEPSGCode) ||\r\n               ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            {\r\n               // For IFC2x3 and before, or when IfcMapConversion info is not provided, the eastings, northings, orthogonalHeight will be assigned to the wcs\r\n               XYZ orig = UnitUtil.ScaleLength(unscaledOrigin);\r\n               wcs = ExporterUtil.CreateAxis2Placement3D(file, orig, null, null);\r\n            }\r\n            else\r\n            {\r\n               // In IFC4 onward and EPSG has value (IfcMapConversion will be created), the wcs will be (0,0,0)\r\n               wcs = IFCInstanceExporter.CreateAxis2Placement3D(file, ExporterCacheManager.Global3DOriginHandle, null, null);\r\n            }\r\n         }\r\n\r\n         // This covers Internal case, and Shared case for IFC4+.  \r\n         // NOTE: If new cases appear, they should be covered above.\r\n         if (wcs == null)\r\n         {\r\n            wcs = ExporterUtil.CreateAxis2Placement3D(file, XYZ.Zero, null, null);\r\n         }\r\n\r\n         IFCAnyHandle trueNorth = ExporterUtil.CreateDirection(file, directionRatios);\r\n         int dimCount = 3;\r\n         IFCAnyHandle context3D = IFCInstanceExporter.CreateGeometricRepresentationContext(file, null,\r\n             \"Model\", dimCount, precision, wcs, trueNorth);\r\n         \r\n         ExporterCacheManager.Set3DContextHandle(exporterIFC, IFCRepresentationIdentifier.None, context3D);\r\n\r\n         // TODO: Fix regression tests whose line numbers change as a result of missing handles.\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportGeometryOnly)\r\n         {\r\n            ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Axis);\r\n         }\r\n\r\n         // We will force creation of the Body subcontext because internal code expects it.\r\n         // For the rest, we will create sub-contexts as we need them.\r\n         ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Body);\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportGeometryOnly)\r\n         {\r\n            ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Box);\r\n            ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.FootPrint);\r\n         }\r\n\r\n         repContexts.Add(context3D); // Only Contexts in list, not sub-contexts.\r\n\r\n         // Create IFCMapConversion information for the context\r\n         if (!ExportIFCMapConversion(exporterIFC, doc, context3D, directionRatios))\r\n         {\r\n            // Keep the Transform information for the WCS of the main model to be used later for exporting Link file(s)\r\n            Transform wcsTr = Transform.Identity;\r\n            wcsTr.Origin = unscaledOrigin;\r\n            wcsTr.BasisY = new XYZ(directionRatios[0], directionRatios[1], 0.0);\r\n            wcsTr.BasisZ = new XYZ(0.0, 0.0, 1.0);\r\n            wcsTr.BasisX = wcsTr.BasisY.CrossProduct(wcsTr.BasisZ);\r\n            CoordReferenceInfo.MainModelGeoRefOrWCS = wcsTr;\r\n         }\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAnnotations)\r\n         {\r\n            IFCAnyHandle context2DHandle = IFCInstanceExporter.CreateGeometricRepresentationContext(file,\r\n                null, \"Plan\", dimCount, precision, wcs, trueNorth);\r\n\r\n            IFCAnyHandle context2D = IFCInstanceExporter.CreateGeometricRepresentationSubContext(file,\r\n                \"Annotation\", \"Plan\", context2DHandle, 0.01, IFCGeometricProjection.Plan_View, null);\r\n\r\n            ExporterCacheManager.Set2DContextHandle(IFCRepresentationIdentifier.Annotation, context2D);\r\n            ExporterCacheManager.Set2DContextHandle(IFCRepresentationIdentifier.None, context2D);\r\n            \r\n            repContexts.Add(context2DHandle); // Only Contexts in list, not sub-contexts.\r\n         }\r\n\r\n         return repContexts;\r\n      }\r\n\r\n      private void GetCOBieContactInfo(IFCFile file, Document doc)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3ExtendedFMHandoverView)\r\n         {\r\n            try\r\n            {\r\n               string CObieContactXML = Path.GetDirectoryName(doc.PathName) + @\"\\\" + Path.GetFileNameWithoutExtension(doc.PathName) + @\"_COBieContact.xml\";\r\n               string category = null, company = null, department = null, organizationCode = null, contactFirstName = null, contactFamilyName = null,\r\n                   postalBox = null, town = null, stateRegion = null, postalCode = null, country = null;\r\n\r\n               using (XmlReader reader = XmlReader.Create(CObieContactXML))\r\n               {\r\n                  IList<string> eMailAddressList = new List<string>();\r\n                  IList<string> telNoList = new List<string>();\r\n                  IList<string> addressLines = new List<string>();\r\n\r\n                  while (reader.Read())\r\n                  {\r\n                     if (reader.IsStartElement())\r\n                     {\r\n                        while (reader.Read())\r\n                        {\r\n                           switch (reader.Name)\r\n                           {\r\n                              case \"Email\":\r\n                                 eMailAddressList.Add(reader.ReadString());\r\n                                 break;\r\n                              case \"Classification\":\r\n                                 category = reader.ReadString();\r\n                                 break;\r\n                              case \"Company\":\r\n                                 company = reader.ReadString();\r\n                                 break;\r\n                              case \"Phone\":\r\n                                 telNoList.Add(reader.ReadString());\r\n                                 break;\r\n                              case \"Department\":\r\n                                 department = reader.ReadString();\r\n                                 break;\r\n                              case \"OrganizationCode\":\r\n                                 organizationCode = reader.ReadString();\r\n                                 break;\r\n                              case \"FirstName\":\r\n                                 contactFirstName = reader.ReadString();\r\n                                 break;\r\n                              case \"LastName\":\r\n                                 contactFamilyName = reader.ReadString();\r\n                                 break;\r\n                              case \"Street\":\r\n                                 addressLines.Add(reader.ReadString());\r\n                                 break;\r\n                              case \"POBox\":\r\n                                 postalBox = reader.ReadString();\r\n                                 break;\r\n                              case \"Town\":\r\n                                 town = reader.ReadString();\r\n                                 break;\r\n                              case \"State\":\r\n                                 stateRegion = reader.ReadString();\r\n                                 break;\r\n                              case \"Zip\":\r\n                                 category = reader.ReadString();\r\n                                 break;\r\n                              case \"Country\":\r\n                                 country = reader.ReadString();\r\n                                 break;\r\n                              case \"Contact\":\r\n                                 if (reader.IsStartElement()) break;     // Do nothing at the start tag, process when it is the end\r\n                                 CreateContact(file, category, company, department, organizationCode, contactFirstName,\r\n                                     contactFamilyName, postalBox, town, stateRegion, postalCode, country,\r\n                                     eMailAddressList, telNoList, addressLines);\r\n                                 // reset variables\r\n                                 {\r\n                                    category = null;\r\n                                    company = null;\r\n                                    department = null;\r\n                                    organizationCode = null;\r\n                                    contactFirstName = null;\r\n                                    contactFamilyName = null;\r\n                                    postalBox = null;\r\n                                    town = null;\r\n                                    stateRegion = null;\r\n                                    postalCode = null;\r\n                                    country = null;\r\n                                    eMailAddressList.Clear();\r\n                                    telNoList.Clear();\r\n                                    addressLines.Clear();\r\n                                 }\r\n                                 break;\r\n                              default:\r\n                                 break;\r\n                           }\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n            catch\r\n            {\r\n               // Can't find the XML file, ignore the whole process and continue\r\n            }\r\n         }\r\n      }\r\n\r\n      private void CreateActor(string actorName, IFCAnyHandle clientOrg, IFCAnyHandle projectHandle,\r\n         HashSet<IFCAnyHandle> projectHandles, IFCAnyHandle ownerHistory, IFCFile file)\r\n      {\r\n         string actorGuid = GUIDUtil.GenerateIFCGuidFrom(GUIDUtil.CreateGUIDString(IFCEntityType.IfcActor, \r\n            actorName, projectHandle));\r\n         IFCAnyHandle actor = IFCInstanceExporter.CreateActor(file, actorGuid, ownerHistory, \r\n            null, null, null, clientOrg);\r\n\r\n         string actorRelAssignsGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n            GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAssignsToActor, actorName, projectHandle));\r\n         IFCInstanceExporter.CreateRelAssignsToActor(file, actorRelAssignsGuid, ownerHistory, actorName,\r\n            null, projectHandles, null, actor, null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates the IfcProject.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"doc\">The document provides the owner information.</param>\r\n      /// <param name=\"application\">The handle of IFC file to create the owner history.</param>\r\n      private void CreateProject(ExporterIFC exporterIFC, Document doc, IFCAnyHandle owningApplication)\r\n      {\r\n         // For IfcPerson.\r\n         string familyName = null;\r\n         string givenName = null;\r\n         List<string> middleNames = null;\r\n         List<string> prefixTitles = null;\r\n         List<string> suffixTitles = null;\r\n         List<IFCAnyHandle> telecomAddresses = null;\r\n\r\n         // For IfcOrganization.\r\n         string organizationName = null;\r\n         string organizationDescription = null;\r\n         List<IFCAnyHandle> organizationAddresses = null;\r\n\r\n         string author = string.Empty;\r\n         bool hasPotentialLastUser = false;\r\n\r\n         ProjectInfo projectInfo = !ExporterCacheManager.ExportOptionsCache.ExportGeometryOnly ? doc.ProjectInformation : null;\r\n         if (projectInfo != null)\r\n         {\r\n            try\r\n            {\r\n               author = projectInfo.Author;\r\n               hasPotentialLastUser = !string.IsNullOrWhiteSpace(author);\r\n            }\r\n            catch (Autodesk.Revit.Exceptions.InvalidOperationException)\r\n            {\r\n               //if failed to get author from project info, try to get the username from application later.\r\n            }\r\n         }\r\n\r\n         if (string.IsNullOrEmpty(author))\r\n         {\r\n            author = doc.Application.Username;\r\n         }\r\n\r\n         NamingUtil.ParseName(author, out familyName, out givenName, out middleNames, out prefixTitles, out suffixTitles);\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         int creationDate = (int)GetCreationDate(doc);\r\n         IFCAnyHandle ownerHistory = null;\r\n         \r\n         COBieCompanyInfo cobieCompInfo = ExporterCacheManager.ExportOptionsCache.COBieCompanyInfo;\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3COBIE24DesignDeliverable && cobieCompInfo != null)\r\n         {\r\n            IFCAnyHandle postalAddress = IFCInstanceExporter.CreatePostalAddress(file, null, null, null, null, \r\n               [ cobieCompInfo.StreetAddress ], null, cobieCompInfo.City, cobieCompInfo.State_Region, \r\n               cobieCompInfo.PostalCode, cobieCompInfo.Country);\r\n            IFCAnyHandle telecomAddress = IFCInstanceExporter.CreateTelecomAddress(file, null, null, null, \r\n               [ cobieCompInfo.CompanyPhone ], null, null, [ cobieCompInfo.CompanyEmail ], null);\r\n\r\n            organizationName = cobieCompInfo.CompanyName;\r\n            organizationAddresses = [ postalAddress, telecomAddress ];\r\n         }\r\n         else if (!ExporterCacheManager.ExportOptionsCache.ExportGeometryOnly)\r\n         {\r\n            IFCAnyHandle telecomAddress = GetTelecomAddressFromExtStorage(file);\r\n            if (telecomAddress != null)\r\n            {\r\n               telecomAddresses = [ telecomAddress ];\r\n            }\r\n\r\n            if (projectInfo != null)\r\n            {\r\n               try\r\n               {\r\n                  organizationName = projectInfo.OrganizationName;\r\n                  organizationDescription = projectInfo.OrganizationDescription;\r\n               }\r\n               catch (Autodesk.Revit.Exceptions.InvalidOperationException)\r\n               {\r\n               }\r\n            }\r\n         }\r\n\r\n         IFCAnyHandle person = IFCInstanceExporter.CreatePerson(file, null, familyName, givenName, middleNames,\r\n            prefixTitles, suffixTitles, null, telecomAddresses);\r\n         IFCAnyHandle organization = IFCInstanceExporter.CreateOrganization(file, null, organizationName, \r\n            organizationDescription, null, organizationAddresses);\r\n\r\n         IFCAnyHandle owningUser = IFCInstanceExporter.CreatePersonAndOrganization(file, person, organization, null);\r\n\r\n         // TODO: Fix regression tests whose line numbers change as a result of missing handles.\r\n         // Change to if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 || !ExporterCacheManager.ExportOptionsCache.ExportGeometryOnly)\r\n         {\r\n            IFCAnyHandle lastModifyingUser = hasPotentialLastUser && ExporterCacheManager.ExportOptionsCache.OwnerHistoryLastModified\r\n               ? owningUser : null;\r\n\r\n            ownerHistory = IFCInstanceExporter.CreateOwnerHistory(file, owningUser, owningApplication, null,\r\n            IFCChangeAction.NoChange, null, lastModifyingUser, null, creationDate);\r\n\r\n            exporterIFC.SetOwnerHistoryHandle(ownerHistory);    // For use by native code only.\r\n            ExporterCacheManager.OwnerHistoryHandle = ownerHistory;\r\n         }\r\n\r\n         // Create mandatory units\r\n         UnitMappingUtil.GetOrCreateUnitInfo(SpecTypeId.Length);\r\n         UnitMappingUtil.GetOrCreateUnitInfo(SpecTypeId.Area);\r\n         UnitMappingUtil.GetOrCreateUnitInfo(SpecTypeId.Volume);\r\n\r\n         // Getting contact information from Revit extensible storage that COBie extension tool creates\r\n         GetCOBieContactInfo(file, doc);\r\n\r\n         UnitMappingUtil.CreateCobieUnits();\r\n\r\n         HashSet<IFCAnyHandle> repContexts = CreateContextInformation(exporterIFC, doc);\r\n\r\n         string projectName = null;\r\n         string projectLongName = null;\r\n         string projectDescription = null;\r\n         string projectPhase = null;\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportGeometryOnly)\r\n         {\r\n            COBieProjectInfo cobieProjInfo = ExporterCacheManager.ExportOptionsCache.COBieProjectInfo;\r\n            if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3COBIE24DesignDeliverable && cobieProjInfo != null)\r\n            {\r\n               projectName = cobieProjInfo.ProjectName;\r\n               projectDescription = cobieProjInfo.ProjectDescription;\r\n               projectPhase = cobieProjInfo.ProjectPhase;\r\n            }\r\n            else\r\n            {\r\n               // As per IFC implementer's agreement, we get IfcProject.Name from ProjectInfo.Number and IfcProject.Longname from ProjectInfo.Name \r\n               projectName = projectInfo?.Number;\r\n               projectLongName = projectInfo?.Name;\r\n\r\n               // Get project description if it is set in the Project info\r\n               projectDescription = (projectInfo != null) ? NamingUtil.GetDescriptionOverride(projectInfo, null) : null;\r\n\r\n               if (projectInfo != null)\r\n                  if (ParameterUtil.GetStringValueFromElement(projectInfo, \"IfcProject.Phase\", out projectPhase) == null)\r\n                     ParameterUtil.GetStringValueFromElement(projectInfo, \"Project Phase\", out projectPhase);\r\n            }\r\n         }\r\n\r\n         string projectGUID = GUIDUtil.CreateProjectLevelGUID(doc, GUIDUtil.ProjectLevelGUIDType.Project);\r\n         IFCAnyHandle projectHandle = IFCInstanceExporter.CreateProject(exporterIFC, projectInfo, projectGUID, ownerHistory,\r\n            projectName, projectDescription, projectLongName, projectPhase, repContexts, null);\r\n         ExporterCacheManager.ProjectHandle = projectHandle;\r\n\r\n         if (projectInfo != null)\r\n         {\r\n            using (ProductWrapper productWrapper = ProductWrapper.Create(exporterIFC, true))\r\n            {\r\n               productWrapper.AddProject(projectInfo, projectHandle);\r\n               ExporterUtil.ExportRelatedProperties(exporterIFC, projectInfo, productWrapper);\r\n            }\r\n         }\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsCOBIE)\r\n         {\r\n            HashSet<IFCAnyHandle> projectHandles = new HashSet<IFCAnyHandle>() { projectHandle };\r\n            \r\n            string clientName = (projectInfo != null) ? projectInfo.ClientName : string.Empty;\r\n            IFCAnyHandle clientOrg = IFCInstanceExporter.CreateOrganization(file, null, clientName, null, null, null);\r\n\r\n            CreateActor(\"Project Client/Owner\", clientOrg, projectHandle, projectHandles, ownerHistory,\r\n               file);\r\n            CreateActor(\"Project Architect\", clientOrg, projectHandle, projectHandles, ownerHistory,\r\n               file);\r\n         }\r\n      }\r\n\r\n      private void CreateContact(IFCFile file, string category, string company, string department, string organizationCode, string contactFirstName,\r\n          string contactFamilyName, string postalBox, string town, string stateRegion, string postalCode, string country,\r\n          IList<string> eMailAddressList, IList<string> telNoList, IList<string> addressLines)\r\n      {\r\n         IFCAnyHandle contactTelecomAddress = IFCInstanceExporter.CreateTelecomAddress(file, null, null, null, telNoList, null, null, eMailAddressList, null);\r\n         IFCAnyHandle contactPostalAddress = IFCInstanceExporter.CreatePostalAddress(file, null, null, null, department, addressLines, postalBox, town, stateRegion,\r\n                 postalCode, country);\r\n         List<IFCAnyHandle> contactAddresses = [ contactTelecomAddress, contactPostalAddress ];\r\n         IFCAnyHandle contactPerson = IFCInstanceExporter.CreatePerson(file, null, contactFamilyName, contactFirstName, null,\r\n             null, null, null, contactAddresses);\r\n         IFCAnyHandle contactOrganization = IFCInstanceExporter.CreateOrganization(file, organizationCode, company, null,\r\n             null, null);\r\n         IFCAnyHandle actorRole = IFCInstanceExporter.CreateActorRole(file, \"UserDefined\", category, null);\r\n         List<IFCAnyHandle> actorRoles = [actorRole ];\r\n         IFCAnyHandle contactEntry = IFCInstanceExporter.CreatePersonAndOrganization(file, contactPerson, contactOrganization, actorRoles);\r\n      }\r\n\r\n      private IFCAnyHandle GetTelecomAddressFromExtStorage(IFCFile file)\r\n      {\r\n         IFCFileHeaderItem fHItem = ExporterCacheManager.ExportOptionsCache.FileHeaderItem;\r\n         if (string.IsNullOrEmpty(fHItem.AuthorEmail))\r\n         {\r\n            return null;\r\n         }\r\n\r\n         List<string> electronicMailAddress = [fHItem.AuthorEmail];\r\n         return IFCInstanceExporter.CreateTelecomAddress(file, null, null, null, null, null, null, electronicMailAddress, null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create IFC Address from the saved data obtained by the UI and saved in the extensible storage\r\n      /// </summary>\r\n      /// <param name=\"file\"></param>\r\n      /// <param name=\"document\"></param>\r\n      /// <returns>The handle of IFC file.</returns>\r\n      static public IFCAnyHandle CreateIFCAddressFromExtStorage(IFCFile file, Document document)\r\n      {\r\n         IFCAddress savedAddress = new();\r\n         IFCAddressItem savedAddressItem;\r\n\r\n         if (savedAddress.GetSavedAddress(document, out savedAddressItem) == true)\r\n         {\r\n            if (!savedAddressItem.HasData())\r\n               return null;\r\n\r\n            IFCAnyHandle postalAddress;\r\n\r\n            // We have address saved in the extensible storage\r\n            List<string> addressLines = null;\r\n            if (!string.IsNullOrEmpty(savedAddressItem.AddressLine1))\r\n            {\r\n               addressLines = new List<string>();\r\n\r\n               addressLines.Add(savedAddressItem.AddressLine1);\r\n               if (!string.IsNullOrEmpty(savedAddressItem.AddressLine2))\r\n                  addressLines.Add(savedAddressItem.AddressLine2);\r\n            }\r\n\r\n            IFCAddressType? addressPurpose = null;\r\n            if (!string.IsNullOrEmpty(savedAddressItem.Purpose))\r\n            {\r\n               addressPurpose = IFCAddressType.UserDefined;     // set this as default value\r\n               if (string.Compare(savedAddressItem.Purpose, \"OFFICE\", true) == 0)\r\n                  addressPurpose = Toolkit.IFCAddressType.Office;\r\n               else if (string.Compare(savedAddressItem.Purpose, \"SITE\", true) == 0)\r\n                  addressPurpose = Toolkit.IFCAddressType.Site;\r\n               else if (string.Compare(savedAddressItem.Purpose, \"HOME\", true) == 0)\r\n                  addressPurpose = Toolkit.IFCAddressType.Home;\r\n               else if (string.Compare(savedAddressItem.Purpose, \"DISTRIBUTIONPOINT\", true) == 0)\r\n                  addressPurpose = Toolkit.IFCAddressType.DistributionPoint;\r\n               else if (string.Compare(savedAddressItem.Purpose, \"USERDEFINED\", true) == 0)\r\n                  addressPurpose = Toolkit.IFCAddressType.UserDefined;\r\n            }\r\n\r\n            postalAddress = IFCInstanceExporter.CreatePostalAddress(file, addressPurpose, savedAddressItem.Description, savedAddressItem.UserDefinedPurpose,\r\n               savedAddressItem.InternalLocation, addressLines, savedAddressItem.POBox, savedAddressItem.TownOrCity, savedAddressItem.RegionOrState, savedAddressItem.PostalCode,\r\n               savedAddressItem.Country);\r\n\r\n            return postalAddress;\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check whether there is address information that is not empty and needs to be created for IfcSite\r\n      /// </summary>\r\n      /// <param name=\"document\">the document</param>\r\n      /// <returns>true if address is to be created for the site</returns>\r\n      static public bool NeedToCreateAddressForSite(Document document)\r\n      {\r\n         IFCAddress savedAddress = new IFCAddress();\r\n         IFCAddressItem savedAddressItem;\r\n         if (savedAddress.GetSavedAddress(document, out savedAddressItem) == true)\r\n         {\r\n            // Return the selection checkbox regardless whether it has data. It will be checked before the creaton of the postal address later\r\n            return savedAddressItem.AssignAddressToSite;\r\n         }\r\n         return false;  //default not creating site address if not set in the ui\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check whether there is address information that is not empty and needs to be created for IfcBuilding\r\n      /// </summary>\r\n      /// <param name=\"document\">the document</param>\r\n      /// <returns>true if address is to be created for the building</returns>\r\n      static public bool NeedToCreateAddressForBuilding(Document document)\r\n      {\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4x3)\r\n         {\r\n            // Deprecated in IFC4.3.\r\n            return false;\r\n         }\r\n\r\n         IFCAddress savedAddress = new();\r\n         if (savedAddress.GetSavedAddress(document, out IFCAddressItem savedAddressItem) == true)\r\n         {\r\n            // Return the selection checkbox regardless whether it has data. It will be checked before the creaton of the postal address later\r\n            return savedAddressItem.AssignAddressToBuilding;\r\n         }\r\n         return true;   //default when there is no address information from the export UI, so that it will try to get other information from project info or location\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates the IfcPostalAddress, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"address\">The address string.</param>\r\n      /// <param name=\"town\">The town string.</param>\r\n      /// <returns>The handle of IFC file.</returns>\r\n      static public IFCAnyHandle CreateIFCAddress(IFCFile file, Document document, ProjectInfo projInfo)\r\n      {\r\n         IFCAnyHandle postalAddress = null;\r\n         postalAddress = CreateIFCAddressFromExtStorage(file, document);\r\n         if (postalAddress != null)\r\n            return postalAddress;\r\n\r\n         string projectAddress = projInfo != null ? projInfo.Address : string.Empty;\r\n         SiteLocation siteLoc = ExporterCacheManager.SelectedSiteProjectLocation?.GetSiteLocation();\r\n         string location = siteLoc != null ? siteLoc.PlaceName : string.Empty;\r\n\r\n         if (projectAddress == null)\r\n            projectAddress = string.Empty;\r\n         if (location == null)\r\n            location = string.Empty;\r\n\r\n         List<string> parsedAddress = new List<string>();\r\n         string city = string.Empty;\r\n         string state = string.Empty;\r\n         string postCode = string.Empty;\r\n         string country = string.Empty;\r\n\r\n         string parsedTown = location;\r\n         int commaLoc = -1;\r\n         do\r\n         {\r\n            commaLoc = parsedTown.IndexOf(',');\r\n            if (commaLoc >= 0)\r\n            {\r\n               if (commaLoc > 0)\r\n                  parsedAddress.Add(parsedTown.Substring(0, commaLoc));\r\n               parsedTown = parsedTown.Substring(commaLoc + 1).TrimStart(' ');\r\n            }\r\n            else if (!string.IsNullOrEmpty(parsedTown))\r\n               parsedAddress.Add(parsedTown);\r\n         } while (commaLoc >= 0);\r\n\r\n         int numLines = parsedAddress.Count;\r\n         if (numLines > 0)\r\n         {\r\n            country = parsedAddress[numLines - 1];\r\n            numLines--;\r\n         }\r\n\r\n         if (numLines > 0)\r\n         {\r\n            int spaceLoc = parsedAddress[numLines - 1].IndexOf(' ');\r\n            if (spaceLoc > 0)\r\n            {\r\n               state = parsedAddress[numLines - 1].Substring(0, spaceLoc);\r\n               postCode = parsedAddress[numLines - 1].Substring(spaceLoc + 1);\r\n            }\r\n            else\r\n               state = parsedAddress[numLines - 1];\r\n            numLines--;\r\n         }\r\n\r\n         if (numLines > 0)\r\n         {\r\n            city = parsedAddress[numLines - 1];\r\n            numLines--;\r\n         }\r\n\r\n         List<string> addressLines = new List<string>();\r\n         if (!string.IsNullOrEmpty(projectAddress))\r\n            addressLines.Add(projectAddress);\r\n\r\n         for (int ii = 0; ii < numLines; ii++)\r\n         {\r\n            addressLines.Add(parsedAddress[ii]);\r\n         }\r\n\r\n         postalAddress = IFCInstanceExporter.CreatePostalAddress(file, null, null, null,\r\n            null, addressLines, null, city, state, postCode, country);\r\n\r\n         return postalAddress;\r\n      }\r\n      \r\n      private static bool ValidateContainedHandle(IFCAnyHandle initialHandle)\r\n      {\r\n         if (ExporterCacheManager.ElementsInAssembliesCache.Contains(initialHandle))\r\n            return false;\r\n\r\n         try\r\n         {\r\n            if (!IFCAnyHandleUtil.HasRelDecomposes(initialHandle))\r\n               return true;\r\n         }\r\n         catch\r\n         {\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Remove contained or invalid handles from this set.\r\n      /// </summary>\r\n      /// <param name=\"initialSet\">The initial set that may have contained or invalid handles.</param>\r\n      /// <returns>A cleaned set.</returns>\r\n      public static HashSet<IFCAnyHandle> RemoveContainedHandlesFromSet(ICollection<IFCAnyHandle> initialSet)\r\n      {\r\n         HashSet<IFCAnyHandle> filteredSet = new HashSet<IFCAnyHandle>();\r\n\r\n         if (initialSet != null)\r\n         {\r\n            foreach (IFCAnyHandle initialHandle in initialSet)\r\n            {\r\n               if (ValidateContainedHandle(initialHandle))\r\n                  filteredSet.Add(initialHandle);\r\n            }\r\n         }\r\n\r\n         return filteredSet;\r\n      }\r\n\r\n      private class IFCLevelExportInfo\r\n      {\r\n         public IFCLevelExportInfo() { }\r\n\r\n         public IDictionary<ElementId, IList<IFCLevelInfo>> LevelMapping { get; set; } =\r\n            new Dictionary<ElementId, IList<IFCLevelInfo>>();\r\n\r\n         public IList<IFCLevelInfo> OrphanedLevelInfos { get; set; } = new List<IFCLevelInfo>();\r\n\r\n         public void UnionLevelInfoRelated(ElementId toLevelId, IFCLevelInfo fromLevel)\r\n         {\r\n            if (fromLevel == null)\r\n               return;\r\n\r\n            if (toLevelId == ElementId.InvalidElementId)\r\n            {\r\n               OrphanedLevelInfos.Add(fromLevel);\r\n               return;\r\n            }\r\n\r\n            IList<IFCLevelInfo> levelMappingList;\r\n            if (!LevelMapping.TryGetValue(toLevelId, out levelMappingList))\r\n            {\r\n               levelMappingList = new List<IFCLevelInfo>();\r\n               LevelMapping[toLevelId] = levelMappingList;\r\n            }\r\n            levelMappingList.Add(fromLevel);\r\n         }\r\n\r\n         public void TransferOrphanedLevelInfo(ElementId toLevelId)\r\n         {\r\n            if (toLevelId == ElementId.InvalidElementId)\r\n               return;\r\n\r\n            if (OrphanedLevelInfos.Count == 0)\r\n               return;\r\n\r\n            IList<IFCLevelInfo> toLevelMappingList;\r\n            if (!LevelMapping.TryGetValue(toLevelId, out toLevelMappingList))\r\n            {\r\n               toLevelMappingList = new List<IFCLevelInfo>();\r\n               LevelMapping[toLevelId] = toLevelMappingList;\r\n            }\r\n\r\n            foreach (IFCLevelInfo orphanedLevelInfo in OrphanedLevelInfos)\r\n            {\r\n               toLevelMappingList.Add(orphanedLevelInfo);\r\n            }\r\n            OrphanedLevelInfos.Clear();\r\n         }\r\n\r\n         public Tuple<HashSet<IFCAnyHandle>, HashSet<IFCAnyHandle>> CollectValidHandlesForLevel(\r\n            ElementId levelId, IFCLevelInfo levelInfo)\r\n         {\r\n            if (levelId == ElementId.InvalidElementId || levelInfo == null)\r\n               return null;\r\n\r\n            HashSet<IFCAnyHandle> levelRelatedProducts = new HashSet<IFCAnyHandle>();\r\n            levelRelatedProducts.UnionWith(levelInfo.GetRelatedProducts());\r\n\r\n            HashSet<IFCAnyHandle> levelRelatedElements = new HashSet<IFCAnyHandle>();\r\n            levelRelatedElements.UnionWith(levelInfo.GetRelatedElements());\r\n\r\n            IList<IFCLevelInfo> levelMappingList;\r\n            if (LevelMapping.TryGetValue(levelId, out levelMappingList))\r\n            {\r\n               foreach (IFCLevelInfo containedLevelInfo in levelMappingList)\r\n               {\r\n                  if (containedLevelInfo != null)\r\n                  {\r\n                     levelRelatedProducts.UnionWith(containedLevelInfo.GetRelatedProducts());\r\n                     levelRelatedElements.UnionWith(containedLevelInfo.GetRelatedElements());\r\n                  }\r\n               }\r\n            }\r\n\r\n            return Tuple.Create(RemoveContainedHandlesFromSet(levelRelatedProducts),\r\n               RemoveContainedHandlesFromSet(levelRelatedElements));\r\n         }\r\n\r\n         public HashSet<IFCAnyHandle> CollectOrphanedHandles()\r\n         {\r\n            HashSet<IFCAnyHandle> orphanedHandles = new HashSet<IFCAnyHandle>();\r\n            foreach (IFCLevelInfo containedLevelInfo in OrphanedLevelInfos)\r\n            {\r\n               if (containedLevelInfo != null)\r\n               {\r\n                  orphanedHandles.UnionWith(containedLevelInfo.GetRelatedProducts());\r\n                  orphanedHandles.UnionWith(containedLevelInfo.GetRelatedElements());\r\n               }\r\n            }\r\n\r\n            // RemoveContainedHandlesFromSet will be called before these are used, so\r\n            // don't bother doing it twice.\r\n            return orphanedHandles;\r\n         }\r\n      }\r\n\r\n      private IFCExportElement GetExportLevelState(Element level)\r\n      {\r\n         if (level == null)\r\n            return IFCExportElement.ByType;\r\n\r\n         Element levelType = level.Document.GetElement(level.GetTypeId());\r\n         IFCExportElement? exportLevel =\r\n            ElementFilteringUtil.GetExportElementState(level, levelType);\r\n\r\n         return exportLevel.GetValueOrDefault(IFCExportElement.ByType);\r\n      }\r\n      \r\n      private bool NeverExportLevel(Element level)\r\n      {\r\n         return GetExportLevelState(level) == IFCExportElement.No;\r\n      }\r\n\r\n      private bool AlwaysExportLevel(Element level)\r\n      {\r\n         return GetExportLevelState(level) == IFCExportElement.Yes;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Relate levels and products.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"document\">The document to relate the levels.</param>\r\n      private void RelateLevels(ExporterIFC exporterIFC, Document document)\r\n      {\r\n         HashSet<IFCAnyHandle> buildingStories = new HashSet<IFCAnyHandle>();\r\n         IList<ElementId> levelIds = ExporterCacheManager.LevelInfoCache.GetLevelsByElevation();\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         ElementId lastValidLevelId = ElementId.InvalidElementId;\r\n         IFCLevelExportInfo levelInfoMapping = new IFCLevelExportInfo();\r\n\r\n         for (int ii = 0; ii < levelIds.Count; ii++)\r\n         {\r\n            ElementId levelId = levelIds[ii];\r\n            IFCLevelInfo levelInfo = ExporterCacheManager.LevelInfoCache.GetLevelInfo(levelId);\r\n            if (levelInfo == null)\r\n               continue;\r\n\r\n            Level level = document.GetElement(levelId) as Level;\r\n            \r\n            levelInfoMapping.TransferOrphanedLevelInfo(levelId);\r\n            int nextLevelIdx = ii + 1;\r\n\r\n            // We may get stale handles in here; protect against this.\r\n            Tuple<HashSet<IFCAnyHandle>, HashSet<IFCAnyHandle>> productsAndElements =\r\n               levelInfoMapping.CollectValidHandlesForLevel(levelId, levelInfo);\r\n\r\n            HashSet<IFCAnyHandle> relatedProducts = productsAndElements.Item1;\r\n            HashSet<IFCAnyHandle> relatedElements = productsAndElements.Item2;\r\n\r\n            // Only add properties for the actual level associated with the building storey.\r\n            if (LevelUtil.IsBuildingStory(level))\r\n            {\r\n               using (ProductWrapper productWrapper = ProductWrapper.Create(exporterIFC, false))\r\n               {\r\n                  IFCAnyHandle buildingStoreyHandle = levelInfo.GetBuildingStorey();\r\n                  if (!buildingStories.Contains(buildingStoreyHandle))\r\n                  {\r\n                     buildingStories.Add(buildingStoreyHandle);\r\n                     IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcBuildingStorey);\r\n\r\n                     // Add Property set, quantities and classification of Building Storey also to IFC\r\n                     productWrapper.AddElement(level, buildingStoreyHandle, levelInfo, null, false, exportInfo);\r\n\r\n                     ExporterUtil.ExportRelatedProperties(exporterIFC, level, productWrapper);\r\n                  }\r\n               }\r\n            }\r\n\r\n            if (relatedProducts.Count > 0)\r\n            {\r\n               IFCAnyHandle buildingStorey = levelInfo.GetBuildingStorey();\r\n               string guid = GUIDUtil.CreateSubElementGUID(level, (int)IFCBuildingStoreySubElements.RelAggregates);\r\n               ExporterCacheManager.ContainmentCache.AddRelations(buildingStorey, guid, relatedProducts);\r\n            }\r\n\r\n            if (relatedElements.Count > 0)\r\n            {\r\n               string guid = GUIDUtil.CreateSubElementGUID(level, (int)IFCBuildingStoreySubElements.RelContainedInSpatialStructure);\r\n               IFCInstanceExporter.CreateRelContainedInSpatialStructure(file, guid, ExporterCacheManager.OwnerHistoryHandle, null, null, relatedElements, levelInfo.GetBuildingStorey());\r\n            }\r\n\r\n            ii = nextLevelIdx - 1;\r\n         }\r\n\r\n         if (buildingStories.Count > 0)\r\n         {\r\n            IFCAnyHandle buildingHnd = ExporterCacheManager.BuildingHandle;\r\n            ProjectInfo projectInfo = document.ProjectInformation;\r\n            string guid = GUIDUtil.CreateSubElementGUID(projectInfo, (int)IFCProjectSubElements.RelAggregatesBuildingStories);\r\n            ExporterCacheManager.ContainmentCache.AddRelations(buildingHnd, guid, buildingStories);\r\n         }\r\n\r\n         // We didn't find a level for this.  Put it in the IfcBuilding, IfcSite, or IfcProject later.\r\n         HashSet<IFCAnyHandle> orphanedHandles = levelInfoMapping.CollectOrphanedHandles();\r\n\r\n         ExporterCacheManager.LevelInfoCache.OrphanedElements.UnionWith(orphanedHandles);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Clear all delegates.\r\n      /// </summary>\r\n      private void DelegateClear()\r\n      {\r\n         m_ElementExporter = null;\r\n         m_QuantitiesToExport = null;\r\n      }\r\n\r\n      private IFCAnyHandle CreateFacilityFromProjectInfo(ExporterIFC exporterIFC, Document document, \r\n         bool allowBuildingExport, out IFCAnyHandle facilityPlacement)\r\n      {\r\n         facilityPlacement = null;\r\n\r\n         KnownFacilityTypes facilityType = ExporterCacheManager.ExportOptionsCache.FacilityType;\r\n         bool exportingBuilding = facilityType == KnownFacilityTypes.Building;\r\n         if (exportingBuilding && !allowBuildingExport)\r\n            return null;\r\n\r\n         COBieProjectInfo cobieProjectInfo = ExporterCacheManager.ExportOptionsCache.COBieProjectInfo;\r\n         bool exportingCOBIE = exportingBuilding && \r\n            ExporterCacheManager.ExportOptionsCache.ExportAs2x3COBIE24DesignDeliverable && \r\n            cobieProjectInfo != null;\r\n\r\n         ProjectInfo projectInfo = document.ProjectInformation;\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n         string facilityName = string.Empty;\r\n         string facilityDescription = null;\r\n         string facilityLongName = null;\r\n         string facilityObjectType = null;\r\n\r\n         if (exportingCOBIE)\r\n         {\r\n            facilityName = cobieProjectInfo.BuildingName_Number;\r\n            facilityDescription = cobieProjectInfo.BuildingDescription;\r\n         }\r\n         else if (projectInfo != null)\r\n         {\r\n            try\r\n            {\r\n               facilityName = projectInfo.BuildingName;\r\n            }\r\n            catch (Autodesk.Revit.Exceptions.InvalidOperationException)\r\n            {\r\n            }\r\n\r\n            facilityDescription = NamingUtil.GetOverrideStringValue(projectInfo, \"FacilityDescription\", null);\r\n            facilityLongName = NamingUtil.GetOverrideStringValue(projectInfo, \"FacilityLongName\", facilityName);\r\n            facilityObjectType = NamingUtil.GetOverrideStringValue(projectInfo, \"FacilityObjectType\", null);\r\n         }\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle address = exportingBuilding && NeedToCreateAddressForBuilding(document) ?\r\n            CreateIFCAddress(file, document, projectInfo) : null;\r\n\r\n         string facilityPredefinedType = ExporterCacheManager.ExportOptionsCache.FacilityPredefinedType;\r\n\r\n         string facilityGUID = GUIDUtil.CreateProjectLevelGUID(document, GUIDUtil.ProjectLevelGUIDType.Building);\r\n         IFCAnyHandle facilityHandle = null;\r\n\r\n         facilityPlacement = IFCInstanceExporter.CreateLocalPlacement(file, null, ExporterUtil.CreateAxis2Placement3D(file));\r\n\r\n         switch (facilityType)\r\n         {\r\n            case KnownFacilityTypes.Building:\r\n               facilityHandle = IFCInstanceExporter.CreateBuilding(exporterIFC,\r\n                   facilityGUID, ownerHistory, facilityName, facilityDescription, facilityObjectType, facilityPlacement, null,\r\n                   facilityLongName, IFCElementComposition.Element, null, null, address);\r\n               break;\r\n            case KnownFacilityTypes.Bridge:\r\n               facilityHandle =IFCInstanceExporter.CreateBridge(exporterIFC,\r\n                   facilityGUID, ownerHistory, facilityName, facilityDescription, facilityObjectType, facilityPlacement, null,\r\n                   facilityLongName, IFCElementComposition.Element, facilityPredefinedType);\r\n               break;\r\n            case KnownFacilityTypes.MarineFacility:\r\n               facilityHandle = IFCInstanceExporter.CreateMarineFacility(exporterIFC,\r\n                   facilityGUID, ownerHistory, facilityName, facilityDescription, facilityObjectType, facilityPlacement, null,\r\n                   facilityLongName, IFCElementComposition.Element, facilityPredefinedType);\r\n               break;\r\n            case KnownFacilityTypes.Road:\r\n               facilityHandle = IFCInstanceExporter.CreateRoad(exporterIFC,\r\n                   facilityGUID, ownerHistory, facilityName, facilityDescription, facilityObjectType, facilityPlacement, null,\r\n                   facilityLongName, IFCElementComposition.Element, facilityPredefinedType);\r\n               break;\r\n            case KnownFacilityTypes.Railway:\r\n               facilityHandle = IFCInstanceExporter.CreateRailway(exporterIFC,\r\n                   facilityGUID, ownerHistory, facilityName, facilityDescription, facilityObjectType, facilityPlacement, null,\r\n                   facilityLongName, IFCElementComposition.Element, facilityPredefinedType);\r\n               break;\r\n         }\r\n\r\n         if (exportingCOBIE)\r\n         {\r\n            string classificationParamValue = cobieProjectInfo.BuildingType;\r\n\r\n            if (ClassificationUtil.ParseClassificationCode(classificationParamValue, \"dummy\",\r\n               out _, out string classificationItemCode, out string classificationItemName) &&\r\n               !string.IsNullOrEmpty(classificationItemCode))\r\n            {\r\n               string relGuidName = classificationItemCode + \":\" + classificationItemName;\r\n               string relGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAssociatesClassification, relGuidName,\r\n                  facilityHandle));\r\n               ClassificationReferenceKey key = new ClassificationReferenceKey(null,\r\n                  classificationItemCode, classificationItemName, null, null);\r\n               ExporterCacheManager.ClassificationCache.AddRelation(file, key, relGuid,\r\n                  \"BuildingType\", facilityHandle);\r\n            }\r\n         }\r\n\r\n         ExporterCacheManager.BuildingHandle = facilityHandle;\r\n         return facilityHandle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create IFCMapConversion that is from IFC4 onward capturing information for geo referencing\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">ExporterIFC</param>\r\n      /// <param name=\"doc\">the Document</param>\r\n      /// <param name=\"geomRepContext\">The GeometricRepresentationContex</param>\r\n      /// <param name=\"TNDirRatio\">TrueNorth direction ratios</param>\r\n      private bool ExportIFCMapConversion(ExporterIFC exporterIFC, Document doc, IFCAnyHandle geomRepContext, IList<double> TNDirRatio)\r\n      {\r\n         // Get information from Project info Parameters for Project Global Position and Coordinate Reference System\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            return false;\r\n\r\n         ProjectInfo projectInfo = doc.ProjectInformation;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         // Explanation:\r\n         // The Survey Point will carry the Northings and Eastings of the known Survey Point usually near to the project. \r\n         //    This is relative to the reference (0,0) of the Map Projection system used (EPSG: xxxx)\r\n         //    This usually can be accomplished by first locating the Survey Point to the geo reference (0,0) (usually -x, -y of the known coordinate of the Survey point)\r\n         //       It is then moved back UNCLIPPED to the original location\r\n         //    This essentially create the shared location at the map reference (0,0)\r\n\r\n         string epsgCode = null;\r\n         string crsDescription = null;\r\n         string crsGeodeticDatum = null;\r\n         IFCAnyHandle crsMapUnit = null;\r\n         string crsMapUnitStr = null;\r\n\r\n         double? scale = null;\r\n         string crsVerticalDatum = null;\r\n         string crsMapProjection = null;\r\n         string crsMapZone = null;\r\n\r\n         double eastings = 0.0;\r\n         double northings = 0.0;\r\n         double orthogonalHeight = 0.0;\r\n         double? xAxisAbscissa = null;\r\n         double? xAxisOrdinate = null;\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportingSeparateLink())\r\n         {\r\n            if (CoordReferenceInfo.CrsInfo.CrsInfoNotSet)\r\n               return false;\r\n\r\n            crsDescription = CoordReferenceInfo.CrsInfo.GeoRefCRSDesc;\r\n            crsGeodeticDatum = CoordReferenceInfo.CrsInfo.GeoRefGeodeticDatum;\r\n            epsgCode = CoordReferenceInfo.CrsInfo.GeoRefCRSName;\r\n            crsMapUnitStr = CoordReferenceInfo.CrsInfo.GeoRefMapUnit;\r\n            crsVerticalDatum = CoordReferenceInfo.CrsInfo.GeoRefVerticalDatum;\r\n            crsMapProjection = CoordReferenceInfo.CrsInfo.GeoRefMapProjection;\r\n            crsMapZone = CoordReferenceInfo.CrsInfo.GeoRefMapZone;\r\n\r\n            eastings = CoordReferenceInfo.MainModelGeoRefOrWCS.Origin.X;\r\n            northings = CoordReferenceInfo.MainModelGeoRefOrWCS.Origin.Y;\r\n            orthogonalHeight = CoordReferenceInfo.MainModelGeoRefOrWCS.Origin.Z;\r\n\r\n            xAxisAbscissa = CoordReferenceInfo.MainModelGeoRefOrWCS.BasisX.X;\r\n            xAxisOrdinate = CoordReferenceInfo.MainModelGeoRefOrWCS.BasisX.Y;\r\n         }\r\n         else\r\n         {\r\n            if (ParameterUtil.GetStringValueFromElement(projectInfo, \"IfcProjectedCRS.VerticalDatum\", out crsVerticalDatum) == null)\r\n               ParameterUtil.GetStringValueFromElement(projectInfo, \"ProjectGlobalPositioning.CRSVerticalDatum\", out crsVerticalDatum);\r\n\r\n            if (ParameterUtil.GetStringValueFromElement(projectInfo, \"IfcProjectedCRS.MapProjection\", out crsMapProjection) == null)\r\n               ParameterUtil.GetStringValueFromElement(projectInfo, \"ProjectGlobalPositioning.CRSMapProjection\", out crsMapProjection);\r\n\r\n            if (ParameterUtil.GetStringValueFromElement(projectInfo, \"IfcProjectedCRS.MapZone\", out crsMapZone) == null)\r\n               ParameterUtil.GetStringValueFromElement(projectInfo, \"ProjectGlobalPositioning.CRSMapZone\", out crsMapZone);\r\n\r\n            //string defaultEPSGCode = \"EPSG:3857\";     // Default to EPSG:3857, which is the commonly used ProjectedCR as in GoogleMap, OpenStreetMap\r\n            crsMapUnitStr = ExporterCacheManager.ExportOptionsCache.GeoRefMapUnit;\r\n            (string projectedCRSName, string projectedCRSDesc, string epsgCode, string geodeticDatum, string uom) crsInfo = (null, null, null, null, null);\r\n            if (string.IsNullOrEmpty(ExporterCacheManager.ExportOptionsCache.GeoRefEPSGCode))\r\n            {\r\n               // Only CRSName is mandatory. Paramater sets in the ProjectInfo will override any value if any\r\n               if (string.IsNullOrEmpty(epsgCode))\r\n               {\r\n                  // Try to get the GIS Coordinate System id from SiteLocation\r\n                  crsInfo = OptionsUtil.GetEPSGCodeFromGeoCoordDef(doc.SiteLocation);\r\n                  if (!string.IsNullOrEmpty(crsInfo.projectedCRSName) && !string.IsNullOrEmpty(crsInfo.epsgCode))\r\n                     epsgCode = crsInfo.epsgCode;\r\n\r\n                  crsMapUnitStr = crsInfo.uom;\r\n               }\r\n            }\r\n            else\r\n            {\r\n               epsgCode = ExporterCacheManager.ExportOptionsCache.GeoRefEPSGCode;\r\n            }\r\n\r\n            // No need to create IfcMapConversion and IfcProjectedCRS if the georeference information is not provided\r\n            if (string.IsNullOrEmpty(epsgCode))\r\n            {\r\n               // Clear any information in the CrsInfo if nothing to set for MapConversion\r\n               CoordReferenceInfo.CrsInfo.Clear();\r\n               return false;\r\n            }\r\n\r\n            // IFC only \"accepts\" EPSG. see https://standards.buildingsmart.org/MVD/RELEASE/IFC4/ADD2_TC1/RV1_2/HTML/schema/ifcrepresentationresource/lexical/ifccoordinatereferencesystem.htm\r\n            if (!epsgCode.StartsWith(\"EPSG:\", StringComparison.InvariantCultureIgnoreCase))\r\n            {\r\n               // The value may contain only number, which means it it EPSG:<the number>\r\n               int epsgNum = -1;\r\n               if (int.TryParse(epsgCode, out epsgNum))\r\n               {\r\n                  epsgCode = \"EPSG:\" + epsgCode;\r\n               }\r\n            }\r\n\r\n            SiteTransformBasis wcsBasis = ExporterCacheManager.ExportOptionsCache.SiteTransformation;\r\n            (double eastings, double northings, double orthogonalHeight, double angleTN, double origAngleTN) geoRefInfo =\r\n                  OptionsUtil.GeoReferenceInformation(doc, wcsBasis, ExporterCacheManager.SelectedSiteProjectLocation);\r\n            eastings = geoRefInfo.eastings;\r\n            northings = geoRefInfo.northings;\r\n            orthogonalHeight = geoRefInfo.orthogonalHeight;\r\n\r\n            if (TNDirRatio != null)\r\n            {\r\n               xAxisAbscissa = TNDirRatio.Count > 0 ? TNDirRatio[1] : 0;\r\n               xAxisOrdinate = TNDirRatio.Count > 1 ? TNDirRatio[0] : 0;\r\n            }\r\n\r\n            crsDescription = ExporterCacheManager.ExportOptionsCache.GeoRefCRSDesc;\r\n            if (string.IsNullOrEmpty(crsDescription) && !string.IsNullOrEmpty(crsInfo.projectedCRSDesc))\r\n               crsDescription = crsInfo.projectedCRSDesc;\r\n            crsGeodeticDatum = ExporterCacheManager.ExportOptionsCache.GeoRefGeodeticDatum;\r\n            if (string.IsNullOrEmpty(crsGeodeticDatum) && !string.IsNullOrEmpty(crsInfo.geodeticDatum))\r\n               crsGeodeticDatum = crsInfo.geodeticDatum;\r\n         }\r\n\r\n         // Handle map unit\r\n         ForgeTypeId utId = UnitTypeId.Meters;\r\n         if (!string.IsNullOrEmpty(crsMapUnitStr))\r\n         {\r\n            if (crsMapUnitStr.EndsWith(\"Metre\", StringComparison.InvariantCultureIgnoreCase) || crsMapUnitStr.EndsWith(\"Meter\", StringComparison.InvariantCultureIgnoreCase))\r\n            {\r\n               IFCSIPrefix? prefix = null;\r\n               if (crsMapUnitStr.Length > 5)\r\n               {\r\n                  string prefixStr = crsMapUnitStr.Substring(0, crsMapUnitStr.Length - 5);\r\n                  if (Enum.TryParse(prefixStr, true, out IFCSIPrefix prefixEnum))\r\n                  {\r\n                     prefix = prefixEnum;\r\n                     switch (prefix)\r\n                     {\r\n                        // Handle SI Units from MM to M. Somehow UnitTypeId does not have larger than M units (It is unlikely to have it in the EPSG anyway)\r\n                        case IFCSIPrefix.Deci:\r\n                           utId = UnitTypeId.Decimeters;\r\n                           break;\r\n                        case IFCSIPrefix.Centi:\r\n                           utId = UnitTypeId.Centimeters;\r\n                           break;\r\n                        case IFCSIPrefix.Milli:\r\n                           utId = UnitTypeId.Millimeters;\r\n                           break;\r\n                        default:\r\n                           utId = UnitTypeId.Meters;\r\n                           break;\r\n                     }\r\n                  }\r\n               }\r\n               crsMapUnit = IFCInstanceExporter.CreateSIUnit(file, IFCUnit.LengthUnit, prefix, IFCSIUnitName.Metre);\r\n            }\r\n            else\r\n            {\r\n               double lengthScaleFactor = 1.0;\r\n               if (crsMapUnitStr.Equals(\"inch\", StringComparison.InvariantCultureIgnoreCase))\r\n               {\r\n                  lengthScaleFactor = UnitUtils.ConvertFromInternalUnits(1.0, UnitTypeId.Inches);\r\n                  utId = UnitTypeId.Inches;\r\n               }\r\n               else if (crsMapUnitStr.Equals(\"foot\", StringComparison.InvariantCultureIgnoreCase))\r\n               {\r\n                  lengthScaleFactor = UnitUtils.ConvertFromInternalUnits(1.0, UnitTypeId.Feet);\r\n                  utId = UnitTypeId.Feet;\r\n               }\r\n\r\n               double lengthSIScaleFactor = UnitUtils.ConvertFromInternalUnits(1.0, UnitTypeId.Meters) / lengthScaleFactor;\r\n               IFCAnyHandle lenDims = IFCInstanceExporter.CreateDimensionalExponents(file, 1, 0, 0, 0, 0, 0, 0); // length\r\n               IFCAnyHandle lenSIUnit = IFCInstanceExporter.CreateSIUnit(file, IFCUnit.LengthUnit, null, IFCSIUnitName.Metre);\r\n               IFCAnyHandle lenConvFactor = IFCInstanceExporter.CreateMeasureWithUnit(file, Toolkit.IFCDataUtil.CreateAsLengthMeasure(lengthSIScaleFactor),\r\n                   lenSIUnit);\r\n\r\n               crsMapUnit = IFCInstanceExporter.CreateConversionBasedUnit(file, lenDims, IFCUnit.LengthUnit, crsMapUnitStr, lenConvFactor);\r\n            }\r\n         }\r\n\r\n         IFCAnyHandle projectedCRS = null;\r\n         projectedCRS = IFCInstanceExporter.CreateProjectedCRS(file, epsgCode, crsDescription, crsGeodeticDatum, crsVerticalDatum,\r\n            crsMapProjection, crsMapZone, crsMapUnit);\r\n\r\n         // Only eastings, northings, and orthogonalHeight are mandatory beside the CRSSource (GeometricRepresentationContext) and CRSTarget (ProjectedCRS)\r\n         eastings = UnitUtils.ConvertFromInternalUnits(eastings, utId);\r\n         northings = UnitUtils.ConvertFromInternalUnits(northings, utId);\r\n         orthogonalHeight = UnitUtils.ConvertFromInternalUnits(orthogonalHeight, utId);\r\n\r\n         double dblVal = double.MinValue;\r\n         if (ParameterUtil.GetDoubleValueFromElement(projectInfo, \"ProjectGlobalPositioning.Scale\", out dblVal) != null && dblVal > MathUtil.Eps())\r\n         {\r\n            scale = dblVal;\r\n         }\r\n         else\r\n         {\r\n            FormatOptions formatOptions = ExporterCacheManager.DocumentUnits.GetFormatOptions(SpecTypeId.Length);\r\n            ForgeTypeId selectedUnitTypeId = formatOptions.GetUnitTypeId();\r\n            if (!utId.Equals(selectedUnitTypeId))\r\n               scale = UnitUtils.Convert(1.0, selectedUnitTypeId, utId);\r\n         }\r\n\r\n         IFCAnyHandle mapConversionHnd = IFCInstanceExporter.CreateMapConversion(file, geomRepContext, projectedCRS, eastings, northings,\r\n            orthogonalHeight, xAxisAbscissa, xAxisOrdinate, scale);\r\n\r\n         // Assign the main model MapConversion information\r\n         if (ExporterUtil.ExportingHostModel() && \r\n            !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            RememberWCSOrGeoReference(eastings, northings, orthogonalHeight, xAxisAbscissa ?? 1.0,\r\n               xAxisOrdinate ?? 0.0);\r\n            CoordReferenceInfo.CrsInfo.GeoRefCRSName = epsgCode;\r\n            CoordReferenceInfo.CrsInfo.GeoRefCRSDesc = crsDescription;\r\n            CoordReferenceInfo.CrsInfo.GeoRefGeodeticDatum = crsGeodeticDatum;\r\n            CoordReferenceInfo.CrsInfo.GeoRefVerticalDatum = crsVerticalDatum;\r\n            CoordReferenceInfo.CrsInfo.GeoRefMapUnit = crsMapUnitStr;\r\n            CoordReferenceInfo.CrsInfo.GeoRefMapProjection = crsMapProjection;\r\n            CoordReferenceInfo.CrsInfo.GeoRefMapZone = crsMapZone;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      private bool RememberWCSOrGeoReference (double eastings, double northings, double orthogonalHeight, double xAxisAbscissa, double xAxisOrdinate)\r\n      {\r\n         Transform wcsOrGeoRef = Transform.Identity;\r\n         wcsOrGeoRef.Origin = new XYZ(UnitUtil.UnscaleLength(eastings), UnitUtil.UnscaleLength(northings), UnitUtil.UnscaleLength(orthogonalHeight));\r\n         wcsOrGeoRef.BasisX = new XYZ(xAxisAbscissa, xAxisOrdinate, 0.0);\r\n         wcsOrGeoRef.BasisZ = new XYZ(0.0, 0.0, 1.0);\r\n         wcsOrGeoRef.BasisY = wcsOrGeoRef.BasisZ.CrossProduct(wcsOrGeoRef.BasisX);\r\n         CoordReferenceInfo.MainModelGeoRefOrWCS = wcsOrGeoRef;\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create IFCSystem from cached items\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"doc\">The document to export.</param>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"systemsCache\">The systems to export.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"buildingHandle\">The building handle.</param>\r\n      /// <param name=\"projectHasBuilding\">Is building exist.</param>\r\n      /// <param name=\"isElectricalSystem\"> Is system electrical.</param>\r\n      private bool ExportCachedSystem(ExporterIFC exporterIFC, Document doc, IFCFile file, IDictionary<ElementId, ISet<IFCAnyHandle>> systemsCache,\r\n         IFCAnyHandle ownerHistory, IFCAnyHandle buildingHandle, bool projectHasBuilding, bool isElectricalSystem)\r\n      {\r\n         bool res = false;\r\n         IDictionary<string, Tuple<string, HashSet<IFCAnyHandle>>> genericSystems = new Dictionary<string, Tuple<string, HashSet<IFCAnyHandle>>>();\r\n\r\n         foreach (KeyValuePair<ElementId, ISet<IFCAnyHandle>> system in systemsCache)\r\n         {\r\n            using (ProductWrapper productWrapper = ProductWrapper.Create(exporterIFC, true))\r\n            {\r\n               MEPSystem systemElem = doc.GetElement(system.Key) as MEPSystem;\r\n               if (systemElem == null)\r\n                  continue;\r\n\r\n               Element baseEquipment = systemElem.BaseEquipment;\r\n               if (baseEquipment != null)\r\n               {\r\n                  system.Value.AddIfNotNull(ExporterCacheManager.MEPCache.Find(baseEquipment.Id));\r\n               }\r\n\r\n               if (isElectricalSystem)\r\n               {\r\n                  // The Elements property below can throw an InvalidOperationException in some cases, which could\r\n                  // crash the export.  Protect against this without having too generic a try/catch block.\r\n                  try\r\n                  {\r\n                     ElementSet members = systemElem.Elements;\r\n                     foreach (Element member in members)\r\n                     {\r\n                        system.Value.AddIfNotNull(ExporterCacheManager.MEPCache.Find(member.Id));\r\n                     }\r\n                  }\r\n                  catch\r\n                  {\r\n                  }\r\n               }\r\n\r\n               if (system.Value.Count == 0)\r\n                  continue;\r\n\r\n               ElementType systemElemType = doc.GetElement(systemElem.GetTypeId()) as ElementType;\r\n               string name = NamingUtil.GetNameOverride(systemElem, systemElem.Name);\r\n               string desc = NamingUtil.GetDescriptionOverride(systemElem, null);\r\n               string objectType = NamingUtil.GetObjectTypeOverride(systemElem, systemElemType?.Name ?? string.Empty);\r\n\r\n               string systemGUID = GUIDUtil.CreateGUID(systemElem);\r\n               IFCAnyHandle systemHandle = null;\r\n               if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n               {\r\n                  systemHandle = IFCInstanceExporter.CreateSystem(file, systemGUID,\r\n                     ownerHistory, name, desc, objectType);\r\n               }\r\n               else\r\n               {\r\n                  string longName = NamingUtil.GetLongNameOverride(systemElem, null);\r\n                  string ifcEnumType;\r\n                  IFCExportInfoPair exportAs = ExporterUtil.GetObjectExportType(systemElem, out ifcEnumType);\r\n\r\n                  bool isDistributionCircuit = exportAs.ExportInstance == IFCEntityType.IfcDistributionCircuit;\r\n                  bool isDistributionSystem = exportAs.ExportInstance == IFCEntityType.IfcDistributionSystem;\r\n\r\n                  // Only take the predefined type if the export instance matches.\r\n                  string predefinedType = (isDistributionCircuit || isDistributionSystem) ? exportAs.PredefinedType : null;\r\n                  if (predefinedType == null)\r\n                  {\r\n                     Toolkit.IFC4.IFCDistributionSystem systemType = ConnectorExporter.GetMappedIFCDistributionSystemFromElement(systemElem);\r\n                     predefinedType = IFCValidateEntry.ValidateStrEnum<Toolkit.IFC4.IFCDistributionSystem>(systemType.ToString());\r\n                  }\r\n\r\n                  if (isDistributionCircuit)\r\n                  {\r\n                     systemHandle = IFCInstanceExporter.CreateDistributionCircuit(file, systemGUID,\r\n                        ownerHistory, name, desc, objectType, longName, predefinedType);\r\n\r\n                     string systemName;\r\n                     ParameterUtil.GetStringValueFromElementOrSymbol(systemElem, \"IfcDistributionSystem\", out systemName);\r\n\r\n                     if (!string.IsNullOrEmpty(systemName) && systemHandle != null)\r\n                     {\r\n                        Tuple<string, HashSet<IFCAnyHandle>> circuits = null;\r\n                        if (!genericSystems.TryGetValue(systemName, out circuits))\r\n                        {\r\n                           circuits = new Tuple<string, HashSet<IFCAnyHandle>>(null, new HashSet<IFCAnyHandle>());\r\n                           genericSystems[systemName] = circuits;\r\n                        }\r\n                       \r\n                        // Read PredefinedType for the generic system\r\n                        if (string.IsNullOrEmpty(circuits.Item1))\r\n                        {\r\n                           string genericPredefinedType;\r\n                           ParameterUtil.GetStringValueFromElementOrSymbol(systemElem, \"IfcDistributionSystemPredefinedType\", out genericPredefinedType);\r\n                           genericPredefinedType = IFCValidateEntry.ValidateStrEnum<Toolkit.IFC4.IFCDistributionSystem>(genericPredefinedType);\r\n                           if (!string.IsNullOrEmpty(genericPredefinedType))\r\n                              genericSystems[systemName] = new Tuple<string, HashSet<IFCAnyHandle>>(genericPredefinedType, circuits.Item2);\r\n                        }\r\n                        // Add the circuit to the generic system\r\n                        circuits.Item2.Add(systemHandle);\r\n\r\n                     }\r\n                  }\r\n                  else\r\n                  {\r\n                     systemHandle = IFCInstanceExporter.CreateDistributionSystem(file, systemGUID,\r\n                       ownerHistory, name, desc, objectType, longName, predefinedType);\r\n                  }\r\n\r\n               }\r\n\r\n               if (systemHandle == null)\r\n                  continue;\r\n               res = true;\r\n\r\n               // Create classification reference when System has classification filed name assigned to it\r\n               ClassificationUtil.CreateClassification(exporterIFC, file, systemElem, systemHandle);\r\n\r\n               productWrapper.AddSystem(systemElem, systemHandle);\r\n\r\n               if (projectHasBuilding)\r\n               {\r\n                  CreateRelServicesBuildings(buildingHandle, file, ownerHistory, systemHandle);\r\n               }\r\n\r\n               IFCObjectType? objType = null;\r\n               if (!ExporterCacheManager.ExportOptionsCache.ExportAsCoordinationView2 && ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n                  objType = IFCObjectType.Product;\r\n               string groupGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAssignsToGroup, systemHandle));\r\n               IFCAnyHandle relAssignsToGroup = IFCInstanceExporter.CreateRelAssignsToGroup(file,\r\n                  groupGuid, ownerHistory, null, null, system.Value, objType, systemHandle);\r\n\r\n               ExporterUtil.ExportRelatedProperties(exporterIFC, systemElem, productWrapper);\r\n            }\r\n         }\r\n\r\n         foreach (KeyValuePair<string, Tuple<string, HashSet<IFCAnyHandle>>> system in genericSystems)\r\n         {\r\n            string systemGUID = GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(IFCEntityType.IfcDistributionSystem, system.Key));\r\n            IFCAnyHandle systemHandle = IFCInstanceExporter.CreateDistributionSystem(file, systemGUID,\r\n                       ownerHistory, system.Key, null, null, null, system.Value.Item1);\r\n            if (systemHandle == null)\r\n               continue;\r\n            \r\n            if (projectHasBuilding)\r\n               CreateRelServicesBuildings(buildingHandle, file, ownerHistory, systemHandle);\r\n\r\n            string relGUID = GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAggregates, systemHandle));\r\n            IFCInstanceExporter.CreateRelAggregates(file, relGUID, ownerHistory, \r\n               null, null, systemHandle, system.Value.Item2);\r\n         }\r\n\r\n         return res;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create systems from IfcSystem shared parameter of Cable trays and Conduits cached items\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document to export.</param>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"elementsCache\">The systems to export.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"buildingHandle\">The building handle.</param>\r\n      /// <param name=\"projectHasBuilding\">Is building exist.</param>\r\n      private bool ExportCableTraySystem(Document doc, IFCFile file, ISet<ElementId> elementsCache,\r\n         IFCAnyHandle ownerHistory, IFCAnyHandle buildingHandle, bool projectHasBuilding)\r\n      {\r\n         bool res = false;\r\n\r\n         // group elements by IfcSystem string parameter \r\n         IDictionary<string, ISet<IFCAnyHandle>> groupedSystems = new Dictionary<string, ISet<IFCAnyHandle>>();\r\n         foreach (ElementId elemeId in elementsCache)\r\n         {\r\n            IFCAnyHandle handle = ExporterCacheManager.MEPCache.Find(elemeId);\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(handle))\r\n               continue;\r\n\r\n            string systemName;\r\n            Element elem = doc.GetElement(elemeId);\r\n            ParameterUtil.GetStringValueFromElementOrSymbol(elem, \"IfcSystem\", out systemName);\r\n            if (string.IsNullOrEmpty(systemName))\r\n               continue;\r\n\r\n            ISet<IFCAnyHandle> systemElements;\r\n            if (!groupedSystems.TryGetValue(systemName, out systemElements))\r\n            {\r\n               systemElements = new HashSet<IFCAnyHandle>();\r\n               groupedSystems[systemName] = systemElements;\r\n            }\r\n            systemElements.Add(handle);\r\n         }\r\n\r\n         // export systems\r\n         foreach (KeyValuePair<string, ISet<IFCAnyHandle>> system in groupedSystems)\r\n         {\r\n            string systemGUID = GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(IFCEntityType.IfcSystem, system.Key));\r\n            IFCAnyHandle systemHandle = null;\r\n            if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            {\r\n               systemHandle = IFCInstanceExporter.CreateSystem(file, systemGUID,\r\n                  ownerHistory, system.Key, \"\", \"\");\r\n            }\r\n            else\r\n            {\r\n               Toolkit.IFC4.IFCDistributionSystem systemType = Toolkit.IFC4.IFCDistributionSystem.NOTDEFINED;\r\n               string predefinedType = IFCValidateEntry.ValidateStrEnum<Toolkit.IFC4.IFCDistributionSystem>(systemType.ToString());\r\n\r\n               systemHandle = IFCInstanceExporter.CreateDistributionSystem(file, systemGUID,\r\n                  ownerHistory, system.Key, \"\", \"\", \"\", predefinedType);\r\n            }\r\n\r\n            if (systemHandle == null)\r\n               continue;\r\n\r\n            if (projectHasBuilding)\r\n               CreateRelServicesBuildings(buildingHandle, file, ownerHistory, systemHandle);\r\n\r\n            IFCObjectType? objType = null;\r\n            if (!ExporterCacheManager.ExportOptionsCache.ExportAsCoordinationView2 && \r\n               ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n               objType = IFCObjectType.Product;\r\n            string relAssignsGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAssignsToGroup, systemHandle));\r\n            IFCInstanceExporter.CreateRelAssignsToGroup(file, relAssignsGuid,\r\n               ownerHistory, null, null, system.Value, objType, systemHandle);\r\n            res = true;\r\n         }\r\n         return res;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Force an immediate garbage collection.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// Reclaiming the memory occupied by objects that have finalizers implemented \r\n      /// requires two passes since such objects are placed in the finalization queue \r\n      /// rather than being reclaimed in the first pass when the garbage collector runs.\r\n      /// </remarks>\r\n      private void ForceGarbageCollection()\r\n      {\r\n         GC.Collect();\r\n         GC.WaitForPendingFinalizers();\r\n         GC.Collect();\r\n         GC.WaitForPendingFinalizers();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the material name from the material select entity.\r\n      /// </summary>\r\n      /// <param name=\"materialHnd\"> The material handle.</param>\r\n      /// <returns>The material name.</returns>\r\n      private string GetMaterialNameFromMaterialSelect(IFCAnyHandle materialHnd)\r\n      {\r\n         string materialName = IFCAnyHandleUtil.GetStringAttribute(materialHnd, \"Name\");\r\n\r\n         // Special case for IfcMaterialLayerSet\r\n         if (materialName == null)\r\n         {\r\n            materialName = IFCAnyHandleUtil.GetStringAttribute(materialHnd, \"LayerSetName\");\r\n         }\r\n\r\n         // Special case for IfcMaterialProfileSetUsage\r\n         if (materialName == null)   // check \r\n         {\r\n            IFCAnyHandle materialProfileSet = IFCAnyHandleUtil.GetInstanceAttribute(materialHnd, \"ForProfileSet\");\r\n            if (materialProfileSet != null)\r\n               materialName = IFCAnyHandleUtil.GetStringAttribute(materialProfileSet, \"Name\");\r\n         }\r\n\r\n         return materialName;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/ExporterInitializer.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Export.Exporter.PropertySet.Calculators;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing System.Windows.Forms;\r\nusing System.Reflection.PortableExecutable;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Initializes user defined parameters and quantities.\r\n   /// </summary>\r\n   public partial class ExporterInitializer\r\n   {\r\n      static IFCCertifiedEntitiesAndPSets certifiedEntityAndPsetList;\r\n\r\n      /// <summary>\r\n      /// Initializes Pset_ProvisionForVoid.\r\n      /// </summary>\r\n      /// <param name=\"commonPropertySets\">List to store property sets.</param>\r\n      private static void InitPset_ProvisionForVoid2x(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         // The IFC4 version is contained in ExporterInitializer_PsetDef.cs.\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4\r\n            || !certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProvisionForVoid\"))\r\n            return;\r\n\r\n         PropertySetDescription propertySetProvisionForVoid = new PropertySetDescription();\r\n         propertySetProvisionForVoid.Name = \"Pset_ProvisionForVoid\";\r\n\r\n         propertySetProvisionForVoid.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxy);\r\n         propertySetProvisionForVoid.PredefinedType = \"USERDEFINED\";\r\n         propertySetProvisionForVoid.ObjectType = \"PROVISIONFORVOID\";\r\n\r\n         // The Shape value must be determined first, as other calculators will use the value stored.\r\n         PropertySetEntry ifcPSE = PropertySetEntry.CreateLabel(\"Shape\");\r\n         ifcPSE.PropertyCalculator = ShapeCalculator.Instance;\r\n         propertySetProvisionForVoid.AddEntry(ifcPSE);\r\n\r\n         ifcPSE = PropertySetEntry.CreatePositiveLength(\"Width\");\r\n         ifcPSE.PropertyCalculator = WidthCalculator.Instance;\r\n         propertySetProvisionForVoid.AddEntry(ifcPSE);\r\n\r\n         ifcPSE = PropertySetEntry.CreatePositiveLength(\"Height\");\r\n         ifcPSE.PropertyCalculator = HeightCalculator.Instance;\r\n         propertySetProvisionForVoid.AddEntry(ifcPSE);\r\n\r\n         ifcPSE = PropertySetEntry.CreatePositiveLength(\"Diameter\");\r\n         ifcPSE.PropertyCalculator = DiameterCalculator.Instance;\r\n         propertySetProvisionForVoid.AddEntry(ifcPSE);\r\n\r\n         ifcPSE = PropertySetEntry.CreatePositiveLength(\"Depth\");\r\n         ifcPSE.PropertyCalculator = DepthCalculator.Instance;\r\n         propertySetProvisionForVoid.AddEntry(ifcPSE);\r\n\r\n         ifcPSE = PropertySetEntry.CreateLabel(\"System\");\r\n         propertySetProvisionForVoid.AddEntry(ifcPSE);\r\n\r\n         commonPropertySets.Add(propertySetProvisionForVoid);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the list of property sets that are common but not included in the base set.\r\n      /// </summary>\r\n      /// <param name=\"propertySets\">The list of lists of property sets.</param>\r\n      public static void InitExtraCommonPropertySets(IList<IList<PropertySetDescription>> propertySets)\r\n      {\r\n         IList<PropertySetDescription> commonPropertySets = new List<PropertySetDescription>();\r\n         InitPset_ProvisionForVoid2x(commonPropertySets);\r\n         propertySets.Add(commonPropertySets);\r\n      }\r\n\r\n      /// <summary>\r\n      /// This will traverse all PropertySetDescriptions and filter PropertySetDiscriptions accordingly:\r\n      /// If a PropertySetDescription has more than one entity associated with it, then it may apply to both Instance and Type entities.\r\n      /// If a PropertySetDescription has only one entity associated with it, then it cannot apply to both Instance and Type entities.\r\n      /// This is to reduce the amount of noise in the InstanceAndTypePSetIndices list.\r\n      /// </summary>\r\n      /// <param name=\"propertySetListLists\">List of list of PropertySetDescrptions to parse..</param>\r\n      /// <param name=\"multipleEntityPropertySetListLists\">List of list of PropertySetDescriptions that have multiple entities assigned.</param>\r\n      /// <param name=\"singleEntityPropertySetListLists\">List of list of PropertySetDescriptions that have only one entity assigned.</param>\r\n      public static void FilterPropertySets(IList<IList<PropertySetDescription>> propertySetListLists,\r\n         out IList<IList<PropertySetDescription>> multipleEntityPropertySetListLists,\r\n         out IList<IList<PropertySetDescription>> singleEntityPropertySetListLists)\r\n      {\r\n         multipleEntityPropertySetListLists = null;\r\n         singleEntityPropertySetListLists = null;\r\n         if (propertySetListLists == null)\r\n            return;\r\n\r\n         multipleEntityPropertySetListLists = new List<IList<PropertySetDescription>>();\r\n         singleEntityPropertySetListLists = new List<IList<PropertySetDescription>>();\r\n         if (propertySetListLists.Count == 0)\r\n            return;\r\n\r\n         foreach (IList<PropertySetDescription> pSetList in propertySetListLists)\r\n         {\r\n            IList<PropertySetDescription> multipleEntityPropertySetList = new List<PropertySetDescription>();\r\n            IList<PropertySetDescription> singleEntityPropertySetList = new List<PropertySetDescription>();\r\n\r\n            foreach (PropertySetDescription pSetDesc in pSetList)\r\n            {\r\n               int numEntities = pSetDesc?.EntityTypes?.Count ?? 0;\r\n               if (numEntities == 0)\r\n                  continue;\r\n\r\n               if (numEntities == 1)\r\n               {\r\n                  string entity = pSetDesc.EntityTypes.FirstOrDefault().ToString();\r\n                  if (string.IsNullOrWhiteSpace(entity))\r\n                     continue;\r\n\r\n                  if (entity.EndsWith(\"Type\"))\r\n                  {\r\n                     singleEntityPropertySetList.Add(pSetDesc);\r\n                     continue;\r\n                  }\r\n               }\r\n\r\n               multipleEntityPropertySetList.Add(pSetDesc);\r\n            }\r\n\r\n            multipleEntityPropertySetListLists.Add(multipleEntityPropertySetList);\r\n            singleEntityPropertySetListLists.Add(singleEntityPropertySetList);\r\n         }            \r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes property sets.\r\n      /// </summary>\r\n      public static void InitPropertySets()\r\n      {\r\n         ParameterCache cache = ExporterCacheManager.ParameterCache;\r\n\r\n         // Some properties, particularly the common properties, apply to both instance\r\n         // and type parameters.  It's actually probably a little more complicated than\r\n         // this, but this preserves current behavior.\r\n         // TODO: Don't have this extra level which can easily be out of sync and is\r\n         // potentially too generic.\r\n         IList<int> instanceAndTypePsetIndices = new List<int>();\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.PropertySetOptions.ExportIFCCommon)\r\n         {\r\n            IList<IList<PropertySetDescription>> allCommonPropertySets = new List<IList<PropertySetDescription>>();\r\n\r\n            // Even though this populates a List<List<PropertySetDescription>>, in this instance the outer loop should have only one entry.\r\n            // This is by design, to have a uniform pattern with all the other Init methods.\r\n            // But in the case where the outer loop contains more than one entry, process that correctly as well.\r\n            InitCommonPropertySets(allCommonPropertySets);\r\n            ExcludeNotExportingPropertySets(allCommonPropertySets.LastOrDefault(), PropertySetupType.IfcCommonPropertySets);\r\n            ExcludeNotExportingProperties(allCommonPropertySets.LastOrDefault());\r\n\r\n            IList<IList<PropertySetDescription>> multipleEntityPropertySetListLists = null;\r\n            IList<IList<PropertySetDescription>> singleEntiyPropertySetListLists = null;\r\n            FilterPropertySets(allCommonPropertySets, out multipleEntityPropertySetListLists, out singleEntiyPropertySetListLists);\r\n\r\n            foreach (IList<PropertySetDescription> psetDescList in multipleEntityPropertySetListLists)\r\n            {\r\n               instanceAndTypePsetIndices.Add(cache.PropertySets.Count);\r\n               cache.PropertySets.Add(psetDescList);\r\n            }\r\n\r\n            instanceAndTypePsetIndices.Add(cache.PropertySets.Count);\r\n            InitExtraCommonPropertySets(cache.PropertySets);\r\n\r\n            InitPreDefinedPropertySets(cache.PreDefinedPropertySets);\r\n\r\n            // These property sets should not be pointed to by the instanceAndTypePsetIndicies array.\r\n            foreach (IList<PropertySetDescription> psetDescList in singleEntiyPropertySetListLists)\r\n            {\r\n               cache.PropertySets.Add(psetDescList);\r\n            }\r\n         }\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.PropertySetOptions.ExportSchedulesAsPsets)\r\n         {\r\n            InitCustomPropertySets(ExporterCacheManager.Document, cache.PropertySets);\r\n            ExcludeNotExportingPropertySets(cache.PropertySets.LastOrDefault(), PropertySetupType.RevitSchedules);\r\n         }\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.PropertySetOptions.ExportUserDefinedPsets)\r\n         {\r\n            InitUserDefinedPropertySets(cache.PropertySets);\r\n         }\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsCOBIE)\r\n         {\r\n            instanceAndTypePsetIndices.Add(cache.PropertySets.Count);\r\n            InitCOBIEPropertySets(cache.PropertySets);\r\n         }\r\n\r\n         cache.InstanceAndTypePsetIndices = instanceAndTypePsetIndices;\r\n      }\r\n\r\n      private static void ExcludeNotExportingPropertySets(IList<PropertySetDescription> propertySets, PropertySetupType propertySetup)\r\n      {  \r\n         IFCParameterTemplate parameterTemplate = ExporterCacheManager.ParameterMappingTemplate;\r\n         if (parameterTemplate == null)\r\n            return;\r\n\r\n         IList<string> nonExportingPropertySets = parameterTemplate.GetPropertySetNames(propertySetup, PropertySelectionType.NonExporting);\r\n         if ((nonExportingPropertySets?.Count ?? 0) == 0)\r\n            return;\r\n\r\n         var setsToExclude = propertySets.Where(set => nonExportingPropertySets.Contains(set?.Name, StringComparer.InvariantCultureIgnoreCase)).ToList();\r\n         foreach (var setToExclude in setsToExclude)\r\n            propertySets.Remove(setToExclude);\r\n      }\r\n\r\n      private static void ExcludeNotExportingProperties(IList<PropertySetDescription> propertySets)\r\n      {\r\n         if ((propertySets?.Count ?? 0) == 0)\r\n            return;\r\n      \r\n         foreach (var propertySet in propertySets)\r\n         {\r\n            var propertiesToExclude = propertySet.Entries.Where(entry => entry.IsExcluded).ToList();\r\n            foreach (var propertyToExclude in propertiesToExclude)\r\n               propertySet.RemoveEntry(propertyToExclude);\r\n         }\r\n      }\r\n\r\n      private static void ExcludeNotExportingQuantitySets(IList<IList<QuantityDescription>> quantitiesToExport)\r\n      {\r\n         IFCParameterTemplate parameterTemplate = ExporterCacheManager.ParameterMappingTemplate;\r\n         if (parameterTemplate == null)\r\n            return;\r\n\r\n         IList<string> nonExportingQuantitySets = parameterTemplate.GetPropertySetNames(PropertySetupType.IfcBaseQuantities, PropertySelectionType.NonExporting);\r\n         if (nonExportingQuantitySets == null || nonExportingQuantitySets.Count == 0)\r\n            return;\r\n\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            List<string> nonExportingQuantitySetsTypes = nonExportingQuantitySets\r\n               .Select(name => name.Replace(\"Qto_\", \"Ifc\"))\r\n               .Select(name => name.Replace(\"BaseQuantities\", \"\")).ToList();\r\n\r\n            foreach (var quantitySetList in quantitiesToExport)\r\n            {\r\n               var setsToExclude = quantitySetList.Where(set => nonExportingQuantitySetsTypes.Contains(set?.EntityTypes.First().ToString(), StringComparer.InvariantCultureIgnoreCase)).ToList();\r\n               foreach (var setToExclude in setsToExclude)\r\n                  quantitySetList.Remove(setToExclude);\r\n            }\r\n         }\r\n         else\r\n         {\r\n            foreach (var quantitySetList in quantitiesToExport)\r\n            {\r\n               var setsToExclude = quantitySetList.Where(set => nonExportingQuantitySets.Contains(set?.Name, StringComparer.InvariantCultureIgnoreCase)).ToList();\r\n               foreach (var setToExclude in setsToExclude)\r\n                  quantitySetList.Remove(setToExclude);\r\n            }\r\n         }\r\n      }\r\n\r\n      private static void ExcludeNotExportingQuantities(IList<IList<QuantityDescription>> quantitiesToExport)\r\n      {\r\n         if ((quantitiesToExport?.Count ?? 0) == 0)\r\n            return;\r\n\r\n         foreach (var quantitySets in quantitiesToExport)\r\n         {\r\n            ExcludeNotExportingQuantities(quantitySets);\r\n         }\r\n      }\r\n\r\n      private static void ExcludeNotExportingQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         if ((quantitySets?.Count ?? 0) == 0)\r\n            return;\r\n\r\n         foreach (var quantitySet in quantitySets)\r\n         {\r\n            var quantitiesToExclude = quantitySet.Entries.Where(entry => entry.IsExcluded).ToList();\r\n            foreach (var quantityToExclude in quantitiesToExclude)\r\n               quantitySet.RemoveEntry(quantityToExclude);\r\n         }\r\n      }\r\n\r\n      private static void ExcludeNotExportingAttributes()\r\n      {        \r\n         if ((ExporterCacheManager.AttributeCache.AttributeSets?.Count ?? 0) == 0)\r\n            return;\r\n\r\n         foreach (var attributeSetDescription in ExporterCacheManager.AttributeCache.AttributeSets)\r\n         {\r\n            var attributesToExclude = attributeSetDescription.Entries.Where(entry => entry.IsExcluded).ToList();\r\n            foreach (var attributeToExclude in attributesToExclude)\r\n               attributeSetDescription.RemoveEntry(attributeToExclude);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Default constructor that initializes certifiedEntityAndPsetList for IFC Parameter Mapping UI anf for Export IFC.\r\n      /// </summary>\r\n      static ExporterInitializer()\r\n      {\r\n         certifiedEntityAndPsetList = ExporterCacheManager.CertifiedEntitiesAndPsetsCache;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Populates common property sets depending on IFC Schema.\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">The IFC file version.</param>\r\n      /// <param name=\"allPsetOrQtoSets\">Property sets.</param>\r\n      public static void PopulateIFCCommonPropertySets(IFCVersion fileVersion, IList<IList<PropertySetDescription>> allPsetOrQtoSets)\r\n      {\r\n         ExporterCacheManager.ExportOptionsCache.FileVersion = fileVersion;\r\n         InitCommonPropertySets(allPsetOrQtoSets);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Populates common property sets depending on IFC Schema.\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">The IFC file version.</param>\r\n      /// <param name=\"allPsetOrQtoSets\">Property sets.</param>\r\n      public static void PopulateBaseQuantitiesPropertySets(IFCVersion fileVersion, IList<IList<QuantityDescription>> allPsetOrQtoSets)\r\n      {\r\n         ExporterCacheManager.ExportOptionsCache.FileVersion = fileVersion;\r\n         InitQtoSets(allPsetOrQtoSets);\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            return;\r\n\r\n         foreach (List<QuantityDescription> propertySet in allPsetOrQtoSets)\r\n         {\r\n            if (propertySet == null)\r\n               continue;\r\n\r\n            propertySet.ForEach(x => x.Name = x.EntityTypes.First().ToString() + \".BaseQuantities\");\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes quantities.\r\n      /// </summary>\r\n      /// <param name=\"fileVersion\">The IFC file version.</param>\r\n      /// <param name=\"exportBaseQuantities\">True if export base quantities.</param>\r\n      public static void InitQuantities(Exporter.QuantitiesToExport quantitiesToExport, bool exportBaseQuantities)\r\n      {\r\n         ParameterCache cache = ExporterCacheManager.ParameterCache;\r\n\r\n         if (exportBaseQuantities)\r\n         {\r\n            if (quantitiesToExport == null)\r\n               quantitiesToExport = InitQtoSets;\r\n            else\r\n               quantitiesToExport += InitQtoSets;\r\n\r\n            quantitiesToExport += ExcludeNotExportingQuantitySets;\r\n            quantitiesToExport += ExcludeNotExportingQuantities;\r\n         }\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsCOBIE)\r\n         {\r\n            if (quantitiesToExport == null)\r\n               quantitiesToExport = InitCOBIEQuantities;\r\n            else\r\n               quantitiesToExport += InitCOBIEQuantities;\r\n         }\r\n\r\n         quantitiesToExport?.Invoke(cache.Quantities);\r\n      }\r\n\r\n      private static ISet<IFCEntityType> GetListOfRelatedEntities(IFCEntityType entityType)\r\n      {\r\n         // Check IfcElementType and its parent types.\r\n         if (entityType == IFCEntityType.IfcElementType ||\r\n            entityType == IFCEntityType.IfcTypeProduct ||\r\n            entityType == IFCEntityType.IfcTypeObject)\r\n         {\r\n            return PropertyUtil.EntitiesWithNoRelatedType;\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initialize user-defined property and quantity sets\r\n      /// </summary>\r\n      /// <param name=\"propertySets\">List of Psets</param>\r\n      private static void InitUserDefinedPropertySets(IList<IList<PropertySetDescription>> propertySets)\r\n      {         \r\n         IList<PropertySetDescription> userDefinedPropertySets = null;\r\n         IList<QuantityDescription> quantityDescriptions = null;\r\n\r\n         if (!OptionsUtil.UseLegacyParameterMapping())\r\n            CollectUserDefinedDescriptionsFromDocument(out userDefinedPropertySets, out quantityDescriptions);\r\n         else\r\n            CollectUserDefinedDescriptionsFromTxt(out userDefinedPropertySets, out quantityDescriptions);\r\n\r\n         propertySets.Add(userDefinedPropertySets);\r\n\r\n         if (quantityDescriptions.Count > 0)\r\n            ExporterCacheManager.ParameterCache.Quantities.Add(quantityDescriptions);\r\n      }\r\n\r\n      private static void CollectUserDefinedDescriptionsFromTxt(out IList<PropertySetDescription> userDefinedPropertySets, \r\n         out IList<QuantityDescription> quantityDescriptions)\r\n      {\r\n         userDefinedPropertySets = new List<PropertySetDescription>();\r\n         quantityDescriptions = new List<QuantityDescription>();\r\n\r\n         // get the Pset definitions (using the same file as PropertyMap)\r\n         bool exportPre4 = (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 || ExporterCacheManager.ExportOptionsCache.ExportAs2x3);\r\n         IEnumerable<UserDefinedPropertySet> userDefinedPsetDefs = PropertyMap.LoadUserDefinedPset();\r\n\r\n         // Loop through each definition and add the Pset entries into Cache\r\n         foreach (UserDefinedPropertySet propertySet in userDefinedPsetDefs)\r\n         {\r\n            // Add Propertyset entry\r\n            Description description = null;\r\n            if (string.Compare(propertySet.Name, \"Attribute Mapping\", true) == 0)\r\n            {\r\n               AttributeSetDescription attributeDescription = new AttributeSetDescription();\r\n               ExporterCacheManager.AttributeCache.AddAttributeSet(attributeDescription);\r\n               foreach (UserDefinedProperty property in propertySet.Properties)\r\n               {\r\n                  // Data types to export is not provided or invalid.\r\n                  if ((property.IfcPropertyTypes?.Count ?? 0) == 0)\r\n                     continue;\r\n\r\n                  PropertyType dataType = property.FirstIfcPropertyTypeOrDefault(PropertyType.Text);\r\n                  List<AttributeEntryMap> entryMap = property.GetEntryMap((name, parameter) => new AttributeEntryMap(name, parameter));\r\n                  AttributeEntry aSE = new AttributeEntry(property.Name, dataType, entryMap);\r\n                  attributeDescription.AddEntry(aSE);\r\n               }\r\n\r\n               description = attributeDescription;\r\n            }\r\n            else if (propertySet.Type?.StartsWith(\"Qto_\", StringComparison.InvariantCultureIgnoreCase) ?? false)\r\n            {\r\n               QuantityDescription quantityDescription = new QuantityDescription();\r\n               quantityDescriptions.Add(quantityDescription);\r\n               description = quantityDescription;\r\n               foreach (UserDefinedProperty property in propertySet.Properties)\r\n               {\r\n                  // Data types to export is not provided or invalid.\r\n                  if ((property.IfcPropertyTypes?.Count ?? 0) == 0)\r\n                     continue;\r\n\r\n                  QuantityType quantityType = property.FirstIfcPropertyTypeOrDefault(QuantityType.Real);\r\n                  IList<QuantityEntryMap> entryMap = property.GetEntryMap((name, parameter) => new QuantityEntryMap(name, parameter));\r\n                  QuantityEntry quantityEntry = new(quantityType, property.Name, entryMap);\r\n                  quantityDescription.AddEntry(quantityEntry);\r\n               }\r\n            }\r\n            else\r\n            {\r\n               PropertySetDescription userDefinedPropertySet = new PropertySetDescription();\r\n               userDefinedPropertySet.AddTypePropertiesToInstance = ExporterCacheManager.ExportOptionsCache.PropertySetOptions.UseTypePropertiesInInstacePSets;\r\n               description = userDefinedPropertySet;\r\n               foreach (UserDefinedProperty property in propertySet.Properties)\r\n               {\r\n                  PropertyValueType valueType = property.IfcPropertyValueType;\r\n                  PropertyType primaryType = property.FirstIfcPropertyTypeOrDefault(PropertyType.Text); // force default to Text/string if the type does not match with any correct datatype\r\n                  PropertyType secondaryType = property.GetIfcPropertyAtOrDefault(1, PropertyType.Text);\r\n                  if (valueType == PropertyValueType.TableValue)\r\n                     (primaryType, secondaryType) = (secondaryType, primaryType);\r\n\r\n                  IList<PropertySetEntryMap> entryMap = property.GetEntryMap((name, parameter) => new PropertySetEntryMap(name, parameter));\r\n                  if (entryMap.Count > 0)\r\n                  {\r\n                     PropertySetEntry propertySetEntry = new PropertySetEntry(primaryType, property.Name, entryMap);\r\n                     userDefinedPropertySet.AddEntry(propertySetEntry);\r\n                  }\r\n                  else\r\n                  {\r\n                     PropertySetEntry propertySetEntry = new PropertySetEntry(property.Name)\r\n                     {\r\n                        PropertyName = property.Name,\r\n                        PropertyType = primaryType,\r\n                        PropertyArgumentType = secondaryType,\r\n                        PropertyValueType = property.IfcPropertyValueType\r\n                     };\r\n                     userDefinedPropertySet.AddEntry(propertySetEntry);\r\n                  }\r\n               }\r\n\r\n               userDefinedPropertySets.Add(userDefinedPropertySet);\r\n            }\r\n\r\n            description.Name = propertySet.Name;\r\n            description.DescriptionOfSet = string.Empty;\r\n\r\n            HashSet<IFCEntityType> entityTypes = GetIfcEntityTypesFromStrings(propertySet.IfcEntities, exportPre4);\r\n            foreach (IFCEntityType entityType in entityTypes)\r\n            {\r\n               description.EntityTypes.Add(entityType);\r\n            }\r\n         }\r\n      }\r\n\r\n      private static void CollectUserDefinedDescriptionsFromDocument(out IList<PropertySetDescription> userDefinedPropertySets,\r\n         out IList<QuantityDescription> userDefinedQuantitySets)\r\n      {\r\n         userDefinedPropertySets = new List<PropertySetDescription>();\r\n         userDefinedQuantitySets = new List<QuantityDescription>();\r\n         Document document = ExporterCacheManager.Document;\r\n         bool exportPre4 = (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 || ExporterCacheManager.ExportOptionsCache.ExportAs2x3);\r\n\r\n         IList<string> propertySetNames = IFCUserDefinedPropertySet.ListPropertySetNames(document);\r\n         foreach (string psetName in propertySetNames)\r\n         {\r\n            if (PropertyUtil.IsPropertySetExcluded(PropertySetupType.UserDefinedPropertySets, psetName))\r\n               continue;\r\n\r\n            IFCUserDefinedPropertySet userDefinedSet = IFCUserDefinedPropertySet.FindPropertySetByName(document, psetName);\r\n            if (userDefinedSet == null)\r\n               continue;\r\n\r\n            Description description = null;\r\n\r\n            switch (userDefinedSet.PropertySetType)\r\n            {\r\n               case IFCUserDefinedPropertySetType.QuantitySet:\r\n                  {\r\n                     description = CreateAndAddQuantitySetDescription(userDefinedSet, ref userDefinedQuantitySets);\r\n                     break;\r\n                  }\r\n                  case IFCUserDefinedPropertySetType.IFCAttributeSet:\r\n                  {\r\n                     description = CreateAndAddAttributeSetDescription(userDefinedSet);\r\n                     break;\r\n                  }\r\n                  default:\r\n                  {\r\n                     description = CreateAndAddPropertySetDescription(userDefinedSet, ref userDefinedPropertySets);\r\n                     break;\r\n                  }\r\n            }\r\n\r\n            if (description == null)\r\n               continue;\r\n\r\n            description.Name = psetName;\r\n            description.DescriptionOfSet = string.Empty;\r\n\r\n            var applicableEntities = userDefinedSet.GetApplicableEntities();\r\n            description.EntityTypes.UnionWith(GetIfcEntityTypesFromStrings(applicableEntities, exportPre4));\r\n         }\r\n\r\n         ExcludeNotExportingProperties(userDefinedPropertySets);\r\n         ExcludeNotExportingQuantities(userDefinedQuantitySets);\r\n         ExcludeNotExportingAttributes();\r\n      }\r\n\r\n      private static PropertySetDescription CreateAndAddPropertySetDescription(IFCUserDefinedPropertySet propertySet,\r\n         ref IList<PropertySetDescription> propertyDescriptions)\r\n      {\r\n         PropertySetDescription propertyDescription = new()\r\n         {\r\n            Name = propertySet.Name,\r\n            IsUserDefined = true,\r\n            AddTypePropertiesToInstance = true\r\n         };\r\n\r\n         foreach (IFCUserDefinedProperty property in propertySet.GetProperties())\r\n         {\r\n            if (property == null)\r\n               continue;\r\n\r\n            string ifcPropertyName = property.IFCPropertyName;\r\n            string revitParameterName = property.RevitPropertyName;            \r\n            ElementId revitParameterId = property.RevitPropertyId;\r\n            if (string.IsNullOrEmpty(revitParameterName) && revitParameterId == ElementId.InvalidElementId)\r\n               revitParameterName = ifcPropertyName;\r\n\r\n            BuiltInParameter revitBuiltInParameter = ParameterUtils.IsBuiltInParameter(revitParameterId) ?\r\n               (BuiltInParameter)revitParameterId.Value : BuiltInParameter.INVALID;\r\n\r\n            PropertyValueType valueType = property.PropertyType switch\r\n            {\r\n               IFCUserDefinedPropertyType.Single => PropertyValueType.SingleValue,\r\n               IFCUserDefinedPropertyType.Bounded => PropertyValueType.BoundedValue,\r\n               IFCUserDefinedPropertyType.List => PropertyValueType.ListValue,\r\n               IFCUserDefinedPropertyType.Table => PropertyValueType.TableValue,\r\n               _ => PropertyValueType.SingleValue\r\n            };\r\n\r\n            if (!Enum.TryParse(property.DataType, out PropertyType primaryType))\r\n               primaryType = PropertyType.Text;\r\n\r\n            if (!Enum.TryParse(property.DataTypeDefined, out PropertyType secondaryType))\r\n               secondaryType = PropertyType.Text;\r\n\r\n            if (valueType == PropertyValueType.TableValue)\r\n               (primaryType, secondaryType) = (secondaryType, primaryType);\r\n\r\n            IList<PropertySetEntryMap> entryMap = [new(revitParameterName, revitBuiltInParameter)];\r\n            PropertySetEntry propertySetEntry = new(primaryType, ifcPropertyName, entryMap)\r\n            {\r\n               PropertyArgumentType = secondaryType,\r\n               PropertyValueType = valueType\r\n            };\r\n\r\n            propertyDescription.AddEntry(propertySetEntry);\r\n         }\r\n\r\n         propertyDescriptions.Add(propertyDescription);\r\n\r\n         return propertyDescription;\r\n      }\r\n\r\n      private static QuantityDescription CreateAndAddQuantitySetDescription(IFCUserDefinedPropertySet quantitySet,\r\n         ref IList<QuantityDescription> quantityDescriptions)\r\n      {\r\n         if (quantitySet == null || (quantitySet.PropertySetType != IFCUserDefinedPropertySetType.QuantitySet))\r\n            return null;\r\n\r\n         QuantityDescription quantityDescription = new()\r\n         {\r\n            Name = quantitySet.Name,\r\n            IsUserDefined = true\r\n         };\r\n\r\n         foreach (IFCUserDefinedProperty property in quantitySet.GetProperties())\r\n         {\r\n            if (property == null)\r\n               continue;\r\n\r\n            string ifcQuantityName = property.IFCPropertyName;\r\n            string revitParameterName = property.RevitPropertyName;\r\n            ElementId revitParameterId = property.RevitPropertyId;\r\n            BuiltInParameter revitBuiltInParameter = ParameterUtils.IsBuiltInParameter(revitParameterId) ?\r\n               (BuiltInParameter)revitParameterId.Value : BuiltInParameter.INVALID;\r\n\r\n            IFCPropertyMappingInfo mappingInfo = PropertyUtil.GetParameterMappingInfoFromCache(PropertySetupType.UserDefinedPropertySets,\r\n               quantitySet.Name, ElementId.InvalidElementId, ifcQuantityName);\r\n            if ((mappingInfo?.ExportFlag ?? true) == false)\r\n               continue;\r\n\r\n            if (!Enum.TryParse(property.DataType, out QuantityType quantityType))\r\n            {\r\n               // force default to Real if the type does not match with any correct datatype\r\n               quantityType = QuantityType.Real;\r\n            }\r\n\r\n            IList<QuantityEntryMap> entryMap = [new(revitParameterName, revitBuiltInParameter)];\r\n            QuantityEntry quantityEntry = new(quantityType, ifcQuantityName, entryMap);\r\n\r\n            quantityDescription.AddEntry(quantityEntry);\r\n         }\r\n\r\n         quantityDescriptions.Add(quantityDescription);\r\n\r\n         return quantityDescription;\r\n      }\r\n\r\n      private static AttributeSetDescription CreateAndAddAttributeSetDescription(IFCUserDefinedPropertySet propertySet)\r\n      {\r\n         if (propertySet == null || (propertySet.PropertySetType != IFCUserDefinedPropertySetType.IFCAttributeSet))\r\n            return null;\r\n\r\n         AttributeSetDescription attributeSetDescription = new()\r\n         {\r\n            Name = propertySet.Name,\r\n         };\r\n\r\n         foreach (IFCUserDefinedProperty property in propertySet.GetProperties())\r\n         {\r\n            if (property == null)\r\n               continue;\r\n\r\n            string ifcAttributeName = property.IFCPropertyName;\r\n            string revitParameterName = property.RevitPropertyName;\r\n            ElementId revitParameterId = property.RevitPropertyId;\r\n            BuiltInParameter revitBuiltInParameter = ParameterUtils.IsBuiltInParameter(revitParameterId) ?\r\n               (BuiltInParameter)revitParameterId.Value : BuiltInParameter.INVALID;\r\n\r\n            IFCPropertyMappingInfo mappingInfo = PropertyUtil.GetParameterMappingInfoFromCache(PropertySetupType.UserDefinedPropertySets,\r\n               propertySet.Name, ElementId.InvalidElementId, ifcAttributeName);\r\n            if ((mappingInfo?.ExportFlag ?? true) == false)\r\n               continue;\r\n            \r\n            if (!Enum.TryParse(property.DataType, out PropertyType propertyType))\r\n            {\r\n               // force default to Text if the type does not match with any correct datatype\r\n               propertyType = PropertyType.Text;\r\n            }\r\n            \r\n            List<AttributeEntryMap> entryMap = [new(revitParameterName, revitBuiltInParameter)];\r\n            AttributeEntry attributeEntry = new(ifcAttributeName, propertyType, entryMap);\r\n            \r\n            attributeSetDescription.AddEntry(attributeEntry);\r\n         }\r\n         ExporterCacheManager.AttributeCache.AddAttributeSet(attributeSetDescription);\r\n\r\n         return attributeSetDescription;\r\n      }\r\n\r\n      public static HashSet<IFCEntityType> GetIfcEntityTypesFromStrings(IList<string> entityStrings, bool exportPre4)\r\n      {\r\n         HashSet<IFCEntityType> entityTypes = new();\r\n         if ((entityStrings?.Count ?? 0) == 0)\r\n            return entityTypes;\r\n\r\n         foreach (string elem in entityStrings)\r\n         {\r\n            if (Enum.TryParse(elem, true, out IFCEntityType ifcEntity))\r\n            {\r\n               bool usedCompatibleType = false;\r\n\r\n               if (exportPre4)\r\n               {\r\n                  IFCEntityType originalEntity = ifcEntity;\r\n                  IFCCompatibilityType.CheckCompatibleType(originalEntity, out ifcEntity);\r\n                  usedCompatibleType = (originalEntity != ifcEntity);\r\n               }\r\n\r\n               entityTypes.Add(ifcEntity);\r\n\r\n               // This is intended mostly as a workaround in IFC2x3 for IfcElementType.  Not all elements have an associated type (e.g. IfcRoof),\r\n               // but we still want to be able to export type property sets for that element.  So we will manually add these extra types here without\r\n               // forcing the user to guess.  If this causes issues, we may come up with a different design.\r\n               if (!usedCompatibleType)\r\n               {\r\n                  ISet<IFCEntityType> relatedEntities = GetListOfRelatedEntities(ifcEntity);\r\n                  if (relatedEntities != null)\r\n                  {\r\n                     entityTypes.UnionWith(relatedEntities);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         return entityTypes;\r\n      }\r\n\r\n      public static bool IsSupportedScheduleField(ScheduleField field)\r\n      {\r\n         if (field == null)\r\n            return false;\r\n\r\n         ScheduleFieldType fieldType = field.FieldType;\r\n\r\n         return (fieldType == ScheduleFieldType.Instance ||\r\n            fieldType == ScheduleFieldType.ElementType ||\r\n            fieldType == ScheduleFieldType.CombinedParameter);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes custom property sets from schedules.\r\n      /// </summary>\r\n      /// <param name=\"propertySets\">List to store property sets.</param>\r\n      /// <param name=\"propertySets\">The list of lists of property sets.</param>\r\n      /// <param name=\"ignoreMappingTemplate\">Whether to add property if it's excluded in mapping template</param>\r\n      private static void InitCustomPropertySets(Document document, IList<IList<PropertySetDescription>> propertySets)\r\n      {\r\n         IList<PropertySetDescription> customPropertySets = new List<PropertySetDescription>();\r\n\r\n         // Collect all ViewSchedules from the document to use as custom property sets.\r\n         FilteredElementCollector viewScheduleElementCollector = new FilteredElementCollector(document);\r\n\r\n         ElementFilter viewScheduleElementFilter = new ElementClassFilter(typeof(ViewSchedule));\r\n         viewScheduleElementCollector.WherePasses(viewScheduleElementFilter);\r\n         List<ViewSchedule> filteredSchedules = viewScheduleElementCollector.Cast<ViewSchedule>().ToList();\r\n\r\n         int unnamedScheduleIndex = 1;\r\n\r\n         string includePattern = \"PSET|IFC|COMMON\";\r\n\r\n         bool exportSpecificSchedules = false;\r\n         if (ExporterCacheManager.ExportOptionsCache.PropertySetOptions != null)\r\n            exportSpecificSchedules = ExporterCacheManager.ExportOptionsCache.PropertySetOptions.ExportSpecificSchedules;\r\n\r\n         if (exportSpecificSchedules)\r\n         {\r\n            var resultQuery =\r\n                from viewSchedule in viewScheduleElementCollector\r\n                where viewSchedule.Name != null &&\r\n                System.Text.RegularExpressions.Regex.IsMatch(viewSchedule.Name, includePattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase)\r\n                select viewSchedule;\r\n            filteredSchedules = resultQuery.Cast<ViewSchedule>().ToList();\r\n         }\r\n\r\n         foreach (ViewSchedule schedule in filteredSchedules)\r\n         {\r\n            // ViewSchedule may be a template view and it will not have the associated view and elements. Skip this type of schedule\r\n            if (schedule.IsTemplate)\r\n               continue;\r\n\r\n            // Allow schedules to be skipped if set to not export via built-in or shared parameters.\r\n            IFCExportElement? exportSchedule = ElementFilteringUtil.GetExportElementState(schedule, null);\r\n            if (exportSchedule.GetValueOrDefault(IFCExportElement.Yes) == IFCExportElement.No)\r\n               continue;\r\n\r\n            PropertySetDescription customPSet = new();\r\n\r\n            string scheduleName = NamingUtil.GetNameOverride(schedule, schedule.Name);\r\n            if (string.IsNullOrWhiteSpace(scheduleName))\r\n            {\r\n               scheduleName = \"Unnamed Schedule \" + unnamedScheduleIndex;\r\n               unnamedScheduleIndex++;\r\n            }\r\n            customPSet.Name = scheduleName;\r\n\r\n            ScheduleDefinition definition = schedule.Definition;\r\n            if (definition == null)\r\n               continue;\r\n\r\n            // The schedule will be responsible for determining which elements to actually export.\r\n            // Note that this currently only works for schedules in the host document.\r\n            customPSet.ViewScheduleId = schedule.Id;\r\n            customPSet.EntityTypes.Add(IFCEntityType.IfcProduct);\r\n\r\n            int fieldCount = definition.GetFieldCount();\r\n            if (fieldCount == 0)\r\n               continue;\r\n\r\n            HashSet<ElementId> containedElementIds = new();\r\n            FilteredElementCollector elementsInViewScheduleCollector = new(document, schedule.Id);\r\n            foreach (Element containedElement in elementsInViewScheduleCollector)\r\n            {\r\n               containedElementIds.Add(containedElement.Id);\r\n               ElementId typeId = containedElement.GetTypeId();\r\n               if (typeId != ElementId.InvalidElementId)\r\n                  containedElementIds.Add(typeId);\r\n            }\r\n            ExporterCacheManager.ViewScheduleElementCache.TryAdd(schedule.Id, containedElementIds);\r\n\r\n            IDictionary<ElementId, Element> cachedElementTypes = new Dictionary<ElementId, Element>();\r\n\r\n            for (int ii = 0; ii < fieldCount; ii++)\r\n            {\r\n               ScheduleField field = definition.GetField(ii);\r\n               if (!IsSupportedScheduleField(field))\r\n                  continue;\r\n\r\n               string propertyName = field.ColumnHeading;\r\n\r\n               // Process parameter mapping info\r\n               IFCPropertyMappingInfo mappingInfo = PropertyUtil.GetParameterMappingInfoFromCache(PropertySetupType.RevitSchedules, scheduleName, field.ParameterId, propertyName);\r\n               if ((mappingInfo?.ExportFlag ?? true) == false)\r\n                  continue;\r\n\r\n               propertyName = string.IsNullOrEmpty(mappingInfo?.IFCPropertyName) ? propertyName : mappingInfo?.IFCPropertyName;\r\n\r\n\r\n               // Check if it is a combined parameter.  If so, calculate the formula later \r\n               // as necessary.\r\n               PropertySetEntry ifcPSE = null;\r\n\r\n               switch (field.FieldType)\r\n               {\r\n                  case ScheduleFieldType.CombinedParameter:\r\n                     {\r\n                        ifcPSE = PropertySetEntry.CreateParameterEntry(field.ColumnHeading, field.GetCombinedParameters());\r\n                        break;\r\n                     }\r\n                  default:\r\n                     {\r\n                        ElementId parameterId = field.ParameterId;\r\n                        if (parameterId == ElementId.InvalidElementId)\r\n                           continue;\r\n\r\n                        // We use asBuiltInParameterId to get the parameter by id below.  We don't want to use it later, however, so\r\n                        // we store builtInParameterId only if it is a proper member of the enumeration.\r\n                        BuiltInParameter asBuiltInParameterId = (BuiltInParameter)parameterId.Value;\r\n                        BuiltInParameter builtInParameterId =\r\n                            ParameterUtils.IsBuiltInParameter(parameterId) ? asBuiltInParameterId : BuiltInParameter.INVALID;\r\n\r\n                        // We could cache the actual elements when we store the element ids.  However,\r\n                        // this would almost certainly take more time than getting one of the first\r\n                        // few elements in the collector.\r\n                        foreach (Element containedElement in elementsInViewScheduleCollector)\r\n                        {\r\n                           Parameter containedElementParameter = null;\r\n\r\n                           if (field.FieldType == ScheduleFieldType.Instance)\r\n                              containedElementParameter = containedElement.get_Parameter(asBuiltInParameterId);\r\n\r\n                           // shared parameters can return ScheduleFieldType.Instance, even if they are type parameters, so take a look.\r\n                           if (containedElementParameter == null)\r\n                           {\r\n                              ElementId containedElementTypeId = containedElement.GetTypeId();\r\n                              Element containedElementType = null;\r\n                              if (containedElementTypeId != ElementId.InvalidElementId)\r\n                              {\r\n                                 if (!cachedElementTypes.TryGetValue(containedElementTypeId, out containedElementType))\r\n                                 {\r\n                                    containedElementType = document.GetElement(containedElementTypeId);\r\n                                    cachedElementTypes[containedElementTypeId] = containedElementType;\r\n                                 }\r\n                              }\r\n\r\n                              if (containedElementType != null)\r\n                                 containedElementParameter = containedElementType.get_Parameter(asBuiltInParameterId);\r\n                           }\r\n\r\n                           if (containedElementParameter != null)\r\n                           {\r\n                              ifcPSE = PropertySetEntry.CreateParameterEntry(containedElementParameter, builtInParameterId);\r\n                              break;\r\n                           }\r\n                        }\r\n\r\n                        break;\r\n                     }\r\n               }\r\n\r\n               if (ifcPSE != null)\r\n               {\r\n                  ifcPSE.PropertyName = propertyName;\r\n                  customPSet.AddEntry(ifcPSE);\r\n               }\r\n            }\r\n\r\n            customPropertySets.Add(customPSet);\r\n         }\r\n\r\n         propertySets.Add(customPropertySets);\r\n      }\r\n\r\n      #region COBie propertysets\r\n      /// <summary>\r\n      /// Initializes COBIE property sets.\r\n      /// </summary>\r\n      /// <param name=\"propertySets\">List to store property sets.</param>\r\n      private static void InitCOBIEPropertySets(IList<IList<PropertySetDescription>> propertySets)\r\n      {\r\n         IList<PropertySetDescription> cobiePSets = new List<PropertySetDescription>();\r\n         InitCOBIEPSetSpaceThermalSimulationProperties(cobiePSets);\r\n         InitCOBIEPSetSpaceVentilationCriteria(cobiePSets);\r\n         InitCOBIEPSetBuildingEnergyTarget(cobiePSets);\r\n         InitCOBIEPSetGlazingPropertiesEnergyAnalysis(cobiePSets);\r\n         InitCOBIEPSetPhotovoltaicArray(cobiePSets);\r\n         propertySets.Add(cobiePSets);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes COBIE space thermal simulation property sets.\r\n      /// </summary>\r\n      /// <param name=\"cobiePropertySets\">List to store property sets.</param>\r\n      private static void InitCOBIEPSetSpaceThermalSimulationProperties(IList<PropertySetDescription> cobiePropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceThermalSimulationProperties = new PropertySetDescription();\r\n         propertySetSpaceThermalSimulationProperties.Name = \"ePset_SpaceThermalSimulationProperties\";\r\n         propertySetSpaceThermalSimulationProperties.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n\r\n         PropertySetEntry ifcPSE = PropertySetEntry.CreateLabel(\"Space Thermal Simulation Type\");\r\n         ifcPSE.PropertyName = \"SpaceThermalSimulationType\";\r\n         propertySetSpaceThermalSimulationProperties.AddEntry(ifcPSE);\r\n\r\n         ifcPSE = PropertySetEntry.CreateLabel(\"Space Conditioning Requirement\");\r\n         ifcPSE.PropertyName = \"SpaceConditioningRequirement\";\r\n         propertySetSpaceThermalSimulationProperties.AddEntry(ifcPSE);\r\n\r\n         ifcPSE = PropertySetEntry.CreateReal(\"Space Occupant Density\");\r\n         ifcPSE.PropertyName = \"SpaceOccupantDensity\";\r\n         propertySetSpaceThermalSimulationProperties.AddEntry(ifcPSE);\r\n\r\n         ifcPSE = PropertySetEntry.CreateReal(\"Space Occupant Heat Rate\");\r\n         ifcPSE.PropertyName = \"SpaceOccupantHeatRate\";\r\n         propertySetSpaceThermalSimulationProperties.AddEntry(ifcPSE);\r\n\r\n         ifcPSE = PropertySetEntry.CreateReal(\"Space Occupant Load\");\r\n         ifcPSE.PropertyName = \"SpaceOccupantLoad\";\r\n         propertySetSpaceThermalSimulationProperties.AddEntry(ifcPSE);\r\n\r\n         ifcPSE = PropertySetEntry.CreateReal(\"Space Equipment Load\");\r\n         ifcPSE.PropertyName = \"SpaceEquipmentLoad\";\r\n         propertySetSpaceThermalSimulationProperties.AddEntry(ifcPSE);\r\n\r\n         ifcPSE = PropertySetEntry.CreateReal(\"Space Lighting Load\");\r\n         ifcPSE.PropertyName = \"SpaceLightingLoad\";\r\n         propertySetSpaceThermalSimulationProperties.AddEntry(ifcPSE);\r\n\r\n         cobiePropertySets.Add(propertySetSpaceThermalSimulationProperties);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes COBIE space ventilation criteria property sets.\r\n      /// </summary>\r\n      /// <param name=\"cobiePropertySets\">List to store property sets.</param>\r\n      private static void InitCOBIEPSetSpaceVentilationCriteria(IList<PropertySetDescription> cobiePropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceVentilationCriteria = new PropertySetDescription();\r\n         propertySetSpaceVentilationCriteria.Name = \"ePset_SpaceVentilationCriteria\";\r\n         propertySetSpaceVentilationCriteria.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n\r\n         PropertySetEntry ifcPSE = PropertySetEntry.CreateLabel(\"Ventilation Type\");\r\n         ifcPSE.PropertyName = \"VentilationType\";\r\n         propertySetSpaceVentilationCriteria.AddEntry(ifcPSE);\r\n\r\n         ifcPSE = PropertySetEntry.CreateReal(\"Outside Air Per Person\");\r\n         ifcPSE.PropertyName = \"OutsideAirPerPerson\";\r\n         propertySetSpaceVentilationCriteria.AddEntry(ifcPSE);\r\n\r\n         cobiePropertySets.Add(propertySetSpaceVentilationCriteria);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes COBIE building energy target property sets.\r\n      /// </summary>\r\n      /// <param name=\"cobiePropertySets\">List to store property sets.</param>\r\n      private static void InitCOBIEPSetBuildingEnergyTarget(IList<PropertySetDescription> cobiePropertySets)\r\n      {\r\n         PropertySetDescription propertySetBuildingEnergyTarget = new PropertySetDescription();\r\n         propertySetBuildingEnergyTarget.Name = \"ePset_BuildingEnergyTarget\";\r\n         propertySetBuildingEnergyTarget.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n\r\n         PropertySetEntry ifcPSE = PropertySetEntry.CreateReal(\"Building Energy Target Value\");\r\n         ifcPSE.PropertyName = \"BuildingEnergyTargetValue\";\r\n         propertySetBuildingEnergyTarget.AddEntry(ifcPSE);\r\n\r\n         ifcPSE = PropertySetEntry.CreateLabel(\"Building Energy Target Units\");\r\n         ifcPSE.PropertyName = \"BuildingEnergyTargetUnits\";\r\n         propertySetBuildingEnergyTarget.AddEntry(ifcPSE);\r\n\r\n         cobiePropertySets.Add(propertySetBuildingEnergyTarget);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes COBIE glazing properties energy analysis property sets.\r\n      /// </summary>\r\n      /// <param name=\"cobiePropertySets\">List to store property sets.</param>\r\n      private static void InitCOBIEPSetGlazingPropertiesEnergyAnalysis(IList<PropertySetDescription> cobiePropertySets)\r\n      {\r\n         PropertySetDescription propertySetGlazingPropertiesEnergyAnalysis = new PropertySetDescription();\r\n         propertySetGlazingPropertiesEnergyAnalysis.Name = \"ePset_GlazingPropertiesEnergyAnalysis\";\r\n         propertySetGlazingPropertiesEnergyAnalysis.EntityTypes.Add(IFCEntityType.IfcCurtainWall);\r\n\r\n         PropertySetEntry ifcPSE = PropertySetEntry.CreateLabel(\"Windows 6 Glazing System Name\");\r\n         ifcPSE.PropertyName = \"Windows6GlazingSystemName\";\r\n         propertySetGlazingPropertiesEnergyAnalysis.AddEntry(ifcPSE);\r\n\r\n         cobiePropertySets.Add(propertySetGlazingPropertiesEnergyAnalysis);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes COBIE photo voltaic array property sets.\r\n      /// </summary>\r\n      /// <param name=\"cobiePropertySets\">List to store property sets.</param>\r\n      private static void InitCOBIEPSetPhotovoltaicArray(IList<PropertySetDescription> cobiePropertySets)\r\n      {\r\n         PropertySetDescription propertySetPhotovoltaicArray = new PropertySetDescription();\r\n         propertySetPhotovoltaicArray.Name = \"ePset_PhotovoltaicArray\";\r\n         propertySetPhotovoltaicArray.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n         propertySetPhotovoltaicArray.EntityTypes.Add(IFCEntityType.IfcWall);\r\n         propertySetPhotovoltaicArray.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n\r\n         PropertySetEntry ifcPSE = PropertySetEntry.CreateBoolean(\"Hosts Photovoltaic Array\");\r\n         ifcPSE.PropertyName = \"HostsPhotovoltaicArray\";\r\n         propertySetPhotovoltaicArray.AddEntry(ifcPSE);\r\n\r\n         ifcPSE = PropertySetEntry.CreateReal(\"Active Area Ratio\");\r\n         ifcPSE.PropertyName = \"ActiveAreaRatio\";\r\n         propertySetPhotovoltaicArray.AddEntry(ifcPSE);\r\n\r\n         ifcPSE = PropertySetEntry.CreateReal(\"DC to AC Conversion Efficiency\");\r\n         ifcPSE.PropertyName = \"DcToAcConversionEfficiency\";\r\n         propertySetPhotovoltaicArray.AddEntry(ifcPSE);\r\n\r\n         ifcPSE = PropertySetEntry.CreateLabel(\"Photovoltaic Surface Integration\");\r\n         ifcPSE.PropertyName = \"PhotovoltaicSurfaceIntegration\";\r\n         propertySetPhotovoltaicArray.AddEntry(ifcPSE);\r\n\r\n         ifcPSE = PropertySetEntry.CreateReal(\"Photovoltaic Cell Efficiency\");\r\n         ifcPSE.PropertyName = \"PhotovoltaicCellEfficiency\";\r\n         propertySetPhotovoltaicArray.AddEntry(ifcPSE);\r\n\r\n         cobiePropertySets.Add(propertySetPhotovoltaicArray);\r\n      }\r\n      #endregion\r\n\r\n      #region QuantitySets\r\n      // Quantities (including COBie QuantitySets)\r\n\r\n      /// <summary>\r\n      /// Initializes COBIE quantities.\r\n      /// </summary>\r\n      /// <param name=\"quantities\">List to store quantities.</param>\r\n      /// <param name=\"fileVersion\">The file version, currently unused.</param>\r\n      private static void InitCOBIEQuantities(IList<IList<QuantityDescription>> quantities)\r\n      {\r\n         IList<QuantityDescription> cobieQuantities = new List<QuantityDescription>();\r\n         InitCOBIESpaceQuantities(cobieQuantities);\r\n         InitCOBIESpaceLevelQuantities(cobieQuantities);\r\n         InitCOBIEPMSpaceQuantities(cobieQuantities);\r\n         quantities.Add(cobieQuantities);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes COBIE space quantities.\r\n      /// </summary>\r\n      /// <param name=\"cobieQuantities\">List to store quantities.</param>\r\n      private static void InitCOBIESpaceQuantities(IList<QuantityDescription> cobieQuantities)\r\n      {\r\n         QuantityDescription ifcCOBIEQuantity = new();\r\n         ifcCOBIEQuantity.Name = \"BaseQuantities\";\r\n         ifcCOBIEQuantity.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n\r\n         QuantityEntry ifcQE = new(\"Height\");\r\n         ifcQE.MethodOfMeasurement = \"length measured in geometry\";\r\n         ifcQE.QuantityType = QuantityType.PositiveLength;\r\n         ifcQE.PropertyCalculator = HeightCalculator.Instance;\r\n         ifcCOBIEQuantity.AddEntry(ifcQE);\r\n\r\n         ifcQE = new(\"GrossPerimeter\");\r\n         ifcQE.MethodOfMeasurement = \"length measured in geometry\";\r\n         ifcQE.QuantityType = QuantityType.PositiveLength;\r\n         ifcQE.PropertyCalculator = GrossPerimeterCalculator.Instance;\r\n         ifcCOBIEQuantity.AddEntry(ifcQE);\r\n\r\n         ifcQE = new(\"GrossFloorArea\");\r\n         ifcQE.MethodOfMeasurement = \"area measured in geometry\";\r\n         ifcQE.QuantityType = QuantityType.Area;\r\n         ifcQE.PropertyCalculator = AreaCalculator.Instance;\r\n         ifcCOBIEQuantity.AddEntry(ifcQE);\r\n\r\n         ifcQE = new(\"NetFloorArea\");\r\n         ifcQE.MethodOfMeasurement = \"area measured in geometry\";\r\n         ifcQE.QuantityType = QuantityType.Area;\r\n         ifcQE.PropertyCalculator = AreaCalculator.Instance;\r\n         ifcCOBIEQuantity.AddEntry(ifcQE);\r\n\r\n         ifcQE = new(\"GrossVolume\");\r\n         ifcQE.MethodOfMeasurement = \"volume measured in geometry\";\r\n         ifcQE.QuantityType = QuantityType.Volume;\r\n         ifcQE.PropertyCalculator = VolumeCalculator.Instance;\r\n         ifcCOBIEQuantity.AddEntry(ifcQE);\r\n\r\n         cobieQuantities.Add(ifcCOBIEQuantity);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes COBIE space level quantities.\r\n      /// </summary>\r\n      /// <param name=\"cobieQuantities\">List to store quantities.</param>\r\n      private static void InitCOBIESpaceLevelQuantities(IList<QuantityDescription> cobieQuantities)\r\n      {\r\n         QuantityDescription ifcCOBIEQuantity = new QuantityDescription();\r\n         ifcCOBIEQuantity.Name = \"BaseQuantities\";\r\n         ifcCOBIEQuantity.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n         ifcCOBIEQuantity.DescriptionCalculator = SpaceLevelDescriptionCalculator.Instance;\r\n\r\n         QuantityEntry ifcQE = new QuantityEntry(\"GrossFloorArea\");\r\n         ifcQE.MethodOfMeasurement = \"area measured in geometry\";\r\n         ifcQE.QuantityType = QuantityType.Area;\r\n         ifcQE.PropertyCalculator = SpaceLevelAreaCalculator.Instance;\r\n         ifcCOBIEQuantity.AddEntry(ifcQE);\r\n\r\n         cobieQuantities.Add(ifcCOBIEQuantity);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes COBIE BM space quantities.\r\n      /// </summary>\r\n      /// <param name=\"cobieQuantities\">List to store quantities.</param>\r\n      private static void InitCOBIEPMSpaceQuantities(IList<QuantityDescription> cobieQuantities)\r\n      {\r\n         QuantityDescription ifcCOBIEQuantity = new QuantityDescription();\r\n         ifcCOBIEQuantity.Name = \"Space Quantities (Property Management)\";\r\n         ifcCOBIEQuantity.MethodOfMeasurement = \"As defined by BOMA (see www.boma.org)\";\r\n         ifcCOBIEQuantity.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n\r\n         QuantityEntry ifcQE = new QuantityEntry(\"NetFloorArea_BOMA\");\r\n         ifcQE.MethodOfMeasurement = \"area measured in geometry\";\r\n         ifcQE.QuantityType = QuantityType.Area;\r\n         ifcQE.PropertyCalculator = AreaCalculator.Instance;\r\n         ifcCOBIEQuantity.AddEntry(ifcQE);\r\n\r\n         cobieQuantities.Add(ifcCOBIEQuantity);\r\n      }\r\n#endregion\r\n\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/ExporterInitializer_PredefPset.cs",
    "content": "/********************************************************************************************************************************\n** NOTE: This code is generated from IFC psd files automatically by RevitIFCTools.                                            **\n**       DO NOT change it manually as it will be overwritten the next time this file is re-generated!!                        **\n********************************************************************************************************************************/\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Autodesk.Revit;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Autodesk.Revit.ApplicationServices;\nusing Revit.IFC.Export.Exporter.PropertySet;\nusing Revit.IFC.Export.Exporter.PropertySet.Calculators;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Export.Toolkit;\nusing Revit.IFC.Common.Enums;\n\nnamespace Revit.IFC.Export.Exporter\n{\n   partial class ExporterInitializer\n   {\n      public static void InitPreDefinedPropertySets(IList<IList<PreDefinedPropertySetDescription>> allPsetOrQtoSets)\n      {\n         IList<PreDefinedPropertySetDescription> theSets = new List<PreDefinedPropertySetDescription>();\n         InitIfcDoorLiningProperties(theSets);\n         InitIfcDoorPanelProperties(theSets);\n         InitIfcFuelProperties(theSets);\n         InitIfcGeneralMaterialProperties(theSets);\n         InitIfcHygroscopicMaterialProperties(theSets);\n         InitIfcMechanicalConcreteMaterialProperties(theSets);\n         InitIfcMechanicalMaterialProperties(theSets);\n         InitIfcMechanicalSteelMaterialProperties(theSets);\n         InitIfcOpticalMaterialProperties(theSets);\n         InitIfcPermeableCoveringProperties(theSets);\n         InitIfcProductsOfCombustionProperties(theSets);\n         InitIfcReinforcementDefinitionProperties(theSets);\n         InitIfcThermalMaterialProperties(theSets);\n         InitIfcWaterProperties(theSets);\n         InitIfcWindowLiningProperties(theSets);\n         InitIfcWindowPanelProperties(theSets);\n\n         allPsetOrQtoSets.Add(theSets);\n      }\n\n      private static void InitIfcDoorLiningProperties(IList<PreDefinedPropertySetDescription> commonPropertySets)\n      {\n         PreDefinedPropertySetDescription IfcDoorLiningProperties = new PreDefinedPropertySetDescription();\n         IfcDoorLiningProperties.Name = \"IfcDoorLiningProperties\";\n         PreDefinedPropertySetEntry ifcPSE = null;\n         Type calcType = null;\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcDoorLiningProperties\"))\n         {\n            IfcDoorLiningProperties.EntityTypes.Add(IFCEntityType.IfcDoor);\n            IfcDoorLiningProperties.EntityTypes.Add(IFCEntityType.IfcDoorStyle);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.LiningDepth\", \"LiningDepth\");\n            ifcPSE.PropertyName = \"LiningDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.ThresholdDepth\", \"ThresholdDepth\");\n            ifcPSE.PropertyName = \"ThresholdDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThresholdDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.TransomOffset\", \"TransomOffset\");\n            ifcPSE.PropertyName = \"TransomOffset\";\n            ifcPSE.PropertyType = PropertyType.Length;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransomOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.LiningOffset\", \"LiningOffset\");\n            ifcPSE.PropertyName = \"LiningOffset\";\n            ifcPSE.PropertyType = PropertyType.Length;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.ThresholdOffset\", \"ThresholdOffset\");\n            ifcPSE.PropertyName = \"ThresholdOffset\";\n            ifcPSE.PropertyType = PropertyType.Length;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThresholdOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.CasingThickness\", \"CasingThickness\");\n            ifcPSE.PropertyName = \"CasingThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CasingThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.CasingDepth\", \"CasingDepth\");\n            ifcPSE.PropertyName = \"CasingDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CasingDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.LiningThickness\", \"LiningThickness\");\n            ifcPSE.PropertyName = \"LiningThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.ThresholdThickness\", \"ThresholdThickness\");\n            ifcPSE.PropertyName = \"ThresholdThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThresholdThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.TransomThickness\", \"TransomThickness\");\n            ifcPSE.PropertyName = \"TransomThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransomThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcDoorLiningProperties\"))\n         {\n            IfcDoorLiningProperties.EntityTypes.Add(IFCEntityType.IfcDoor);\n            IfcDoorLiningProperties.EntityTypes.Add(IFCEntityType.IfcDoorStyle);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.LiningDepth\", \"LiningDepth\");\n            ifcPSE.PropertyName = \"LiningDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.ThresholdDepth\", \"ThresholdDepth\");\n            ifcPSE.PropertyName = \"ThresholdDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThresholdDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.TransomOffset\", \"TransomOffset\");\n            ifcPSE.PropertyName = \"TransomOffset\";\n            ifcPSE.PropertyType = PropertyType.Length;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransomOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.LiningOffset\", \"LiningOffset\");\n            ifcPSE.PropertyName = \"LiningOffset\";\n            ifcPSE.PropertyType = PropertyType.Length;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.ThresholdOffset\", \"ThresholdOffset\");\n            ifcPSE.PropertyName = \"ThresholdOffset\";\n            ifcPSE.PropertyType = PropertyType.Length;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThresholdOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.CasingThickness\", \"CasingThickness\");\n            ifcPSE.PropertyName = \"CasingThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CasingThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.CasingDepth\", \"CasingDepth\");\n            ifcPSE.PropertyName = \"CasingDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CasingDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.LiningThickness\", \"LiningThickness\");\n            ifcPSE.PropertyName = \"LiningThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.ThresholdThickness\", \"ThresholdThickness\");\n            ifcPSE.PropertyName = \"ThresholdThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThresholdThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.TransomThickness\", \"TransomThickness\");\n            ifcPSE.PropertyName = \"TransomThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransomThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcDoorLiningProperties\"))\n         {\n            IfcDoorLiningProperties.EntityTypes.Add(IFCEntityType.IfcDoor);\n            IfcDoorLiningProperties.EntityTypes.Add(IFCEntityType.IfcDoorType);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.LiningDepth\", \"LiningDepth\");\n            ifcPSE.PropertyName = \"LiningDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.ThresholdDepth\", \"ThresholdDepth\");\n            ifcPSE.PropertyName = \"ThresholdDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThresholdDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.TransomOffset\", \"TransomOffset\");\n            ifcPSE.PropertyName = \"TransomOffset\";\n            ifcPSE.PropertyType = PropertyType.Length;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransomOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.LiningOffset\", \"LiningOffset\");\n            ifcPSE.PropertyName = \"LiningOffset\";\n            ifcPSE.PropertyType = PropertyType.Length;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.ThresholdOffset\", \"ThresholdOffset\");\n            ifcPSE.PropertyName = \"ThresholdOffset\";\n            ifcPSE.PropertyType = PropertyType.Length;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThresholdOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.CasingThickness\", \"CasingThickness\");\n            ifcPSE.PropertyName = \"CasingThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CasingThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.CasingDepth\", \"CasingDepth\");\n            ifcPSE.PropertyName = \"CasingDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CasingDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.LiningThickness\", \"LiningThickness\");\n            ifcPSE.PropertyName = \"LiningThickness\";\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.ThresholdThickness\", \"ThresholdThickness\");\n            ifcPSE.PropertyName = \"ThresholdThickness\";\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThresholdThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.TransomThickness\", \"TransomThickness\");\n            ifcPSE.PropertyName = \"TransomThickness\";\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransomThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.LiningToPanelOffsetX\", \"LiningToPanelOffsetX\");\n            ifcPSE.PropertyName = \"LiningToPanelOffsetX\";\n            ifcPSE.PropertyType = PropertyType.Length;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningToPanelOffsetXCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.LiningToPanelOffsetY\", \"LiningToPanelOffsetY\");\n            ifcPSE.PropertyName = \"LiningToPanelOffsetY\";\n            ifcPSE.PropertyType = PropertyType.Length;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningToPanelOffsetYCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcDoorLiningProperties\"))\n         {\n            IfcDoorLiningProperties.EntityTypes.Add(IFCEntityType.IfcDoor);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.LiningDepth\", \"LiningDepth\");\n            ifcPSE.PropertyName = \"LiningDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.ThresholdDepth\", \"ThresholdDepth\");\n            ifcPSE.PropertyName = \"ThresholdDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThresholdDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.TransomOffset\", \"TransomOffset\");\n            ifcPSE.PropertyName = \"TransomOffset\";\n            ifcPSE.PropertyType = PropertyType.Length;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransomOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.LiningOffset\", \"LiningOffset\");\n            ifcPSE.PropertyName = \"LiningOffset\";\n            ifcPSE.PropertyType = PropertyType.Length;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.ThresholdOffset\", \"ThresholdOffset\");\n            ifcPSE.PropertyName = \"ThresholdOffset\";\n            ifcPSE.PropertyType = PropertyType.Length;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThresholdOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.CasingThickness\", \"CasingThickness\");\n            ifcPSE.PropertyName = \"CasingThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CasingThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorLiningProperties.CasingDepth\", \"CasingDepth\");\n            ifcPSE.PropertyName = \"CasingDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CasingDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorLiningProperties.AddEntry(ifcPSE);\n\n         }\n         if (ifcPSE != null)\n         {\n            commonPropertySets.Add(IfcDoorLiningProperties);\n         }\n      }\n\n\n      private static void InitIfcDoorPanelProperties(IList<PreDefinedPropertySetDescription> commonPropertySets)\n      {\n         PreDefinedPropertySetDescription IfcDoorPanelProperties = new PreDefinedPropertySetDescription();\n         IfcDoorPanelProperties.Name = \"IfcDoorPanelProperties\";\n         PreDefinedPropertySetEntry ifcPSE = null;\n         Type calcType = null;\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcDoorPanelProperties\"))\n         {\n            IfcDoorPanelProperties.EntityTypes.Add(IFCEntityType.IfcDoor);\n            IfcDoorPanelProperties.EntityTypes.Add(IFCEntityType.IfcDoorStyle);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorPanelProperties.PanelDepth\", \"PanelDepth\");\n            ifcPSE.PropertyName = \"PanelDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorPanelProperties.PanelOperation\", \"PanelOperation\");\n            ifcPSE.PropertyName = \"PanelOperation\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelOperationCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorPanelProperties.PanelWidth\", \"PanelWidth\");\n            ifcPSE.PropertyName = \"PanelWidth\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelWidthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorPanelProperties.PanelPosition\", \"PanelPosition\");\n            ifcPSE.PropertyName = \"PanelPosition\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelPositionCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorPanelProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcDoorPanelProperties\"))\n         {\n            IfcDoorPanelProperties.EntityTypes.Add(IFCEntityType.IfcDoor);\n            IfcDoorPanelProperties.EntityTypes.Add(IFCEntityType.IfcDoorStyle);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorPanelProperties.PanelDepth\", \"PanelDepth\");\n            ifcPSE.PropertyName = \"PanelDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorPanelProperties.PanelOperation\", \"PanelOperation\");\n            ifcPSE.PropertyName = \"PanelOperation\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelOperationCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorPanelProperties.PanelWidth\", \"PanelWidth\");\n            ifcPSE.PropertyName = \"PanelWidth\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelWidthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorPanelProperties.PanelPosition\", \"PanelPosition\");\n            ifcPSE.PropertyName = \"PanelPosition\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelPositionCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorPanelProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcDoorPanelProperties\"))\n         {\n            IfcDoorPanelProperties.EntityTypes.Add(IFCEntityType.IfcDoor);\n            IfcDoorPanelProperties.EntityTypes.Add(IFCEntityType.IfcDoorType);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorPanelProperties.PanelDepth\", \"PanelDepth\");\n            ifcPSE.PropertyName = \"PanelDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorPanelProperties.PanelOperation\", \"PanelOperation\");\n            ifcPSE.PropertyName = \"PanelOperation\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelOperationCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorPanelProperties.PanelWidth\", \"PanelWidth\");\n            ifcPSE.PropertyName = \"PanelWidth\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelWidthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorPanelProperties.PanelPosition\", \"PanelPosition\");\n            ifcPSE.PropertyName = \"PanelPosition\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelPositionCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorPanelProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcDoorPanelProperties\"))\n         {\n            IfcDoorPanelProperties.EntityTypes.Add(IFCEntityType.IfcDoor);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorPanelProperties.PanelDepth\", \"PanelDepth\");\n            ifcPSE.PropertyName = \"PanelDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorPanelProperties.PanelOperation\", \"PanelOperation\");\n            ifcPSE.PropertyName = \"PanelOperation\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelOperationCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorPanelProperties.PanelWidth\", \"PanelWidth\");\n            ifcPSE.PropertyName = \"PanelWidth\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelWidthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcDoorPanelProperties.PanelPosition\", \"PanelPosition\");\n            ifcPSE.PropertyName = \"PanelPosition\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelPositionCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcDoorPanelProperties.AddEntry(ifcPSE);\n\n         }\n         if (ifcPSE != null)\n         {\n            commonPropertySets.Add(IfcDoorPanelProperties);\n         }\n      }\n\n\n      private static void InitIfcFuelProperties(IList<PreDefinedPropertySetDescription> commonPropertySets)\n      {\n         PreDefinedPropertySetDescription IfcFuelProperties = new PreDefinedPropertySetDescription();\n         IfcFuelProperties.Name = \"IfcFuelProperties\";\n         PreDefinedPropertySetEntry ifcPSE = null;\n         Type calcType = null;\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcFuelProperties\"))\n         {\n            IfcFuelProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcFuelProperties.CombustionTemperature\", \"CombustionTemperature\");\n            ifcPSE.PropertyName = \"CombustionTemperature\";\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustionTemperatureCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcFuelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcFuelProperties.CarbonContent\", \"CarbonContent\");\n            ifcPSE.PropertyName = \"CarbonContent\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CarbonContentCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcFuelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcFuelProperties.LowerHeatingValue\", \"LowerHeatingValue\");\n            ifcPSE.PropertyName = \"LowerHeatingValue\";\n            ifcPSE.PropertyType = PropertyType.HeatingValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowerHeatingValueCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcFuelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcFuelProperties.HigherHeatingValue\", \"HigherHeatingValue\");\n            ifcPSE.PropertyName = \"HigherHeatingValue\";\n            ifcPSE.PropertyType = PropertyType.HeatingValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HigherHeatingValueCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcFuelProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcFuelProperties\"))\n         {\n            IfcFuelProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcFuelProperties.CombustionTemperature\", \"CombustionTemperature\");\n            ifcPSE.PropertyName = \"CombustionTemperature\";\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustionTemperatureCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcFuelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcFuelProperties.CarbonContent\", \"CarbonContent\");\n            ifcPSE.PropertyName = \"CarbonContent\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CarbonContentCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcFuelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcFuelProperties.LowerHeatingValue\", \"LowerHeatingValue\");\n            ifcPSE.PropertyName = \"LowerHeatingValue\";\n            ifcPSE.PropertyType = PropertyType.HeatingValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowerHeatingValueCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcFuelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcFuelProperties.HigherHeatingValue\", \"HigherHeatingValue\");\n            ifcPSE.PropertyName = \"HigherHeatingValue\";\n            ifcPSE.PropertyType = PropertyType.HeatingValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HigherHeatingValueCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcFuelProperties.AddEntry(ifcPSE);\n\n         }\n         if (ifcPSE != null)\n         {\n            commonPropertySets.Add(IfcFuelProperties);\n         }\n      }\n\n\n      private static void InitIfcGeneralMaterialProperties(IList<PreDefinedPropertySetDescription> commonPropertySets)\n      {\n         PreDefinedPropertySetDescription IfcGeneralMaterialProperties = new PreDefinedPropertySetDescription();\n         IfcGeneralMaterialProperties.Name = \"IfcGeneralMaterialProperties\";\n         PreDefinedPropertySetEntry ifcPSE = null;\n         Type calcType = null;\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcGeneralMaterialProperties\"))\n         {\n            IfcGeneralMaterialProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcGeneralMaterialProperties.MolecularWeight\", \"MolecularWeight\");\n            ifcPSE.PropertyName = \"MolecularWeight\";\n            ifcPSE.PropertyType = PropertyType.MolecularWeight;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MolecularWeightCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcGeneralMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcGeneralMaterialProperties.Porosity\", \"Porosity\");\n            ifcPSE.PropertyName = \"Porosity\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PorosityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcGeneralMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcGeneralMaterialProperties.MassDensity\", \"MassDensity\");\n            ifcPSE.PropertyName = \"MassDensity\";\n            ifcPSE.PropertyType = PropertyType.MassDensity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MassDensityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcGeneralMaterialProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcGeneralMaterialProperties\"))\n         {\n            IfcGeneralMaterialProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcGeneralMaterialProperties.MolecularWeight\", \"MolecularWeight\");\n            ifcPSE.PropertyName = \"MolecularWeight\";\n            ifcPSE.PropertyType = PropertyType.MolecularWeight;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MolecularWeightCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcGeneralMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcGeneralMaterialProperties.Porosity\", \"Porosity\");\n            ifcPSE.PropertyName = \"Porosity\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PorosityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcGeneralMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcGeneralMaterialProperties.MassDensity\", \"MassDensity\");\n            ifcPSE.PropertyName = \"MassDensity\";\n            ifcPSE.PropertyType = PropertyType.MassDensity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MassDensityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcGeneralMaterialProperties.AddEntry(ifcPSE);\n\n         }\n         if (ifcPSE != null)\n         {\n            commonPropertySets.Add(IfcGeneralMaterialProperties);\n         }\n      }\n\n\n      private static void InitIfcHygroscopicMaterialProperties(IList<PreDefinedPropertySetDescription> commonPropertySets)\n      {\n         PreDefinedPropertySetDescription IfcHygroscopicMaterialProperties = new PreDefinedPropertySetDescription();\n         IfcHygroscopicMaterialProperties.Name = \"IfcHygroscopicMaterialProperties\";\n         PreDefinedPropertySetEntry ifcPSE = null;\n         Type calcType = null;\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcHygroscopicMaterialProperties\"))\n         {\n            IfcHygroscopicMaterialProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcHygroscopicMaterialProperties.UpperVaporResistanceFactor\", \"UpperVaporResistanceFactor\");\n            ifcPSE.PropertyName = \"UpperVaporResistanceFactor\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpperVaporResistanceFactorCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcHygroscopicMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcHygroscopicMaterialProperties.LowerVaporResistanceFactor\", \"LowerVaporResistanceFactor\");\n            ifcPSE.PropertyName = \"LowerVaporResistanceFactor\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowerVaporResistanceFactorCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcHygroscopicMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcHygroscopicMaterialProperties.IsothermalMoistureCapacity\", \"IsothermalMoistureCapacity\");\n            ifcPSE.PropertyName = \"IsothermalMoistureCapacity\";\n            ifcPSE.PropertyType = PropertyType.IsothermalMoistureCapacity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsothermalMoistureCapacityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcHygroscopicMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcHygroscopicMaterialProperties.VaporPermeability\", \"VaporPermeability\");\n            ifcPSE.PropertyName = \"VaporPermeability\";\n            ifcPSE.PropertyType = PropertyType.VaporPermeability;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VaporPermeabilityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcHygroscopicMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcHygroscopicMaterialProperties.MoistureDiffusivity\", \"MoistureDiffusivity\");\n            ifcPSE.PropertyName = \"MoistureDiffusivity\";\n            ifcPSE.PropertyType = PropertyType.MoistureDiffusivity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MoistureDiffusivityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcHygroscopicMaterialProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcHygroscopicMaterialProperties\"))\n         {\n            IfcHygroscopicMaterialProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcHygroscopicMaterialProperties.UpperVaporResistanceFactor\", \"UpperVaporResistanceFactor\");\n            ifcPSE.PropertyName = \"UpperVaporResistanceFactor\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpperVaporResistanceFactorCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcHygroscopicMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcHygroscopicMaterialProperties.LowerVaporResistanceFactor\", \"LowerVaporResistanceFactor\");\n            ifcPSE.PropertyName = \"LowerVaporResistanceFactor\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowerVaporResistanceFactorCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcHygroscopicMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcHygroscopicMaterialProperties.IsothermalMoistureCapacity\", \"IsothermalMoistureCapacity\");\n            ifcPSE.PropertyName = \"IsothermalMoistureCapacity\";\n            ifcPSE.PropertyType = PropertyType.IsothermalMoistureCapacity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsothermalMoistureCapacityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcHygroscopicMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcHygroscopicMaterialProperties.VaporPermeability\", \"VaporPermeability\");\n            ifcPSE.PropertyName = \"VaporPermeability\";\n            ifcPSE.PropertyType = PropertyType.VaporPermeability;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VaporPermeabilityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcHygroscopicMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcHygroscopicMaterialProperties.MoistureDiffusivity\", \"MoistureDiffusivity\");\n            ifcPSE.PropertyName = \"MoistureDiffusivity\";\n            ifcPSE.PropertyType = PropertyType.MoistureDiffusivity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MoistureDiffusivityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcHygroscopicMaterialProperties.AddEntry(ifcPSE);\n\n         }\n         if (ifcPSE != null)\n         {\n            commonPropertySets.Add(IfcHygroscopicMaterialProperties);\n         }\n      }\n\n\n      private static void InitIfcMechanicalConcreteMaterialProperties(IList<PreDefinedPropertySetDescription> commonPropertySets)\n      {\n         PreDefinedPropertySetDescription IfcMechanicalConcreteMaterialProperties = new PreDefinedPropertySetDescription();\n         IfcMechanicalConcreteMaterialProperties.Name = \"IfcMechanicalConcreteMaterialProperties\";\n         PreDefinedPropertySetEntry ifcPSE = null;\n         Type calcType = null;\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcMechanicalConcreteMaterialProperties\"))\n         {\n            IfcMechanicalConcreteMaterialProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalConcreteMaterialProperties.CompressiveStrength\", \"CompressiveStrength\");\n            ifcPSE.PropertyName = \"CompressiveStrength\";\n            ifcPSE.PropertyType = PropertyType.Pressure;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressiveStrengthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalConcreteMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalConcreteMaterialProperties.MaxAggregateSize\", \"MaxAggregateSize\");\n            ifcPSE.PropertyName = \"MaxAggregateSize\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaxAggregateSizeCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalConcreteMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalConcreteMaterialProperties.AdmixturesDescription\", \"AdmixturesDescription\");\n            ifcPSE.PropertyName = \"AdmixturesDescription\";\n            ifcPSE.PropertyType = PropertyType.Text;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdmixturesDescriptionCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalConcreteMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalConcreteMaterialProperties.Workability\", \"Workability\");\n            ifcPSE.PropertyName = \"Workability\";\n            ifcPSE.PropertyType = PropertyType.Text;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkabilityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalConcreteMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalConcreteMaterialProperties.ProtectivePoreRatio\", \"ProtectivePoreRatio\");\n            ifcPSE.PropertyName = \"ProtectivePoreRatio\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProtectivePoreRatioCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalConcreteMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalConcreteMaterialProperties.WaterImpermeability\", \"WaterImpermeability\");\n            ifcPSE.PropertyName = \"WaterImpermeability\";\n            ifcPSE.PropertyType = PropertyType.Text;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterImpermeabilityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalConcreteMaterialProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcMechanicalConcreteMaterialProperties\"))\n         {\n            IfcMechanicalConcreteMaterialProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalConcreteMaterialProperties.CompressiveStrength\", \"CompressiveStrength\");\n            ifcPSE.PropertyName = \"CompressiveStrength\";\n            ifcPSE.PropertyType = PropertyType.Pressure;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressiveStrengthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalConcreteMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalConcreteMaterialProperties.MaxAggregateSize\", \"MaxAggregateSize\");\n            ifcPSE.PropertyName = \"MaxAggregateSize\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaxAggregateSizeCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalConcreteMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalConcreteMaterialProperties.AdmixturesDescription\", \"AdmixturesDescription\");\n            ifcPSE.PropertyName = \"AdmixturesDescription\";\n            ifcPSE.PropertyType = PropertyType.Text;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdmixturesDescriptionCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalConcreteMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalConcreteMaterialProperties.Workability\", \"Workability\");\n            ifcPSE.PropertyName = \"Workability\";\n            ifcPSE.PropertyType = PropertyType.Text;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkabilityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalConcreteMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalConcreteMaterialProperties.ProtectivePoreRatio\", \"ProtectivePoreRatio\");\n            ifcPSE.PropertyName = \"ProtectivePoreRatio\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProtectivePoreRatioCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalConcreteMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalConcreteMaterialProperties.WaterImpermeability\", \"WaterImpermeability\");\n            ifcPSE.PropertyName = \"WaterImpermeability\";\n            ifcPSE.PropertyType = PropertyType.Text;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterImpermeabilityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalConcreteMaterialProperties.AddEntry(ifcPSE);\n\n         }\n         if (ifcPSE != null)\n         {\n            commonPropertySets.Add(IfcMechanicalConcreteMaterialProperties);\n         }\n      }\n\n\n      private static void InitIfcMechanicalMaterialProperties(IList<PreDefinedPropertySetDescription> commonPropertySets)\n      {\n         PreDefinedPropertySetDescription IfcMechanicalMaterialProperties = new PreDefinedPropertySetDescription();\n         IfcMechanicalMaterialProperties.Name = \"IfcMechanicalMaterialProperties\";\n         PreDefinedPropertySetEntry ifcPSE = null;\n         Type calcType = null;\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcMechanicalMaterialProperties\"))\n         {\n            IfcMechanicalMaterialProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalMaterialProperties.DynamicViscosity\", \"DynamicViscosity\");\n            ifcPSE.PropertyName = \"DynamicViscosity\";\n            ifcPSE.PropertyType = PropertyType.DynamicViscosity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DynamicViscosityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalMaterialProperties.YoungModulus\", \"YoungModulus\");\n            ifcPSE.PropertyName = \"YoungModulus\";\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalMaterialProperties.ShearModulus\", \"ShearModulus\");\n            ifcPSE.PropertyName = \"ShearModulus\";\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalMaterialProperties.PoissonRatio\", \"PoissonRatio\");\n            ifcPSE.PropertyName = \"PoissonRatio\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PoissonRatioCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalMaterialProperties.ThermalExpansionCoefficient\", \"ThermalExpansionCoefficient\");\n            ifcPSE.PropertyName = \"ThermalExpansionCoefficient\";\n            ifcPSE.PropertyType = PropertyType.ThermalExpansionCoefficient;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalExpansionCoefficientCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalMaterialProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcMechanicalMaterialProperties\"))\n         {\n            IfcMechanicalMaterialProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalMaterialProperties.DynamicViscosity\", \"DynamicViscosity\");\n            ifcPSE.PropertyName = \"DynamicViscosity\";\n            ifcPSE.PropertyType = PropertyType.DynamicViscosity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DynamicViscosityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalMaterialProperties.YoungModulus\", \"YoungModulus\");\n            ifcPSE.PropertyName = \"YoungModulus\";\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalMaterialProperties.ShearModulus\", \"ShearModulus\");\n            ifcPSE.PropertyName = \"ShearModulus\";\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalMaterialProperties.PoissonRatio\", \"PoissonRatio\");\n            ifcPSE.PropertyName = \"PoissonRatio\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PoissonRatioCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalMaterialProperties.ThermalExpansionCoefficient\", \"ThermalExpansionCoefficient\");\n            ifcPSE.PropertyName = \"ThermalExpansionCoefficient\";\n            ifcPSE.PropertyType = PropertyType.ThermalExpansionCoefficient;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalExpansionCoefficientCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalMaterialProperties.AddEntry(ifcPSE);\n\n         }\n         if (ifcPSE != null)\n         {\n            commonPropertySets.Add(IfcMechanicalMaterialProperties);\n         }\n      }\n\n\n      private static void InitIfcMechanicalSteelMaterialProperties(IList<PreDefinedPropertySetDescription> commonPropertySets)\n      {\n         PreDefinedPropertySetDescription IfcMechanicalSteelMaterialProperties = new PreDefinedPropertySetDescription();\n         IfcMechanicalSteelMaterialProperties.Name = \"IfcMechanicalSteelMaterialProperties\";\n         PreDefinedPropertySetEntry ifcPSE = null;\n         Type calcType = null;\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcMechanicalSteelMaterialProperties\"))\n         {\n            IfcMechanicalSteelMaterialProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalSteelMaterialProperties.YieldStress\", \"YieldStress\");\n            ifcPSE.PropertyName = \"YieldStress\";\n            ifcPSE.PropertyType = PropertyType.Pressure;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YieldStressCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalSteelMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalSteelMaterialProperties.UltimateStress\", \"UltimateStress\");\n            ifcPSE.PropertyName = \"UltimateStress\";\n            ifcPSE.PropertyType = PropertyType.Pressure;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UltimateStressCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalSteelMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalSteelMaterialProperties.UltimateStrain\", \"UltimateStrain\");\n            ifcPSE.PropertyName = \"UltimateStrain\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UltimateStrainCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalSteelMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalSteelMaterialProperties.HardeningModule\", \"HardeningModule\");\n            ifcPSE.PropertyName = \"HardeningModule\";\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HardeningModuleCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalSteelMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalSteelMaterialProperties.ProportionalStress\", \"ProportionalStress\");\n            ifcPSE.PropertyName = \"ProportionalStress\";\n            ifcPSE.PropertyType = PropertyType.Pressure;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProportionalStressCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalSteelMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalSteelMaterialProperties.PlasticStrain\", \"PlasticStrain\");\n            ifcPSE.PropertyName = \"PlasticStrain\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlasticStrainCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalSteelMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalSteelMaterialProperties.Relaxations\", \"Relaxations\");\n            ifcPSE.PropertyName = \"Relaxations\";\n            ifcPSE.PropertyType = PropertyType.IfcRelaxation;\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RelaxationsCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalSteelMaterialProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcMechanicalSteelMaterialProperties\"))\n         {\n            IfcMechanicalSteelMaterialProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalSteelMaterialProperties.YieldStress\", \"YieldStress\");\n            ifcPSE.PropertyName = \"YieldStress\";\n            ifcPSE.PropertyType = PropertyType.Pressure;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YieldStressCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalSteelMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalSteelMaterialProperties.UltimateStress\", \"UltimateStress\");\n            ifcPSE.PropertyName = \"UltimateStress\";\n            ifcPSE.PropertyType = PropertyType.Pressure;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UltimateStressCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalSteelMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalSteelMaterialProperties.UltimateStrain\", \"UltimateStrain\");\n            ifcPSE.PropertyName = \"UltimateStrain\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UltimateStrainCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalSteelMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalSteelMaterialProperties.HardeningModule\", \"HardeningModule\");\n            ifcPSE.PropertyName = \"HardeningModule\";\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HardeningModuleCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalSteelMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalSteelMaterialProperties.ProportionalStress\", \"ProportionalStress\");\n            ifcPSE.PropertyName = \"ProportionalStress\";\n            ifcPSE.PropertyType = PropertyType.Pressure;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProportionalStressCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalSteelMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalSteelMaterialProperties.PlasticStrain\", \"PlasticStrain\");\n            ifcPSE.PropertyName = \"PlasticStrain\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlasticStrainCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalSteelMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcMechanicalSteelMaterialProperties.Relaxations\", \"Relaxations\");\n            ifcPSE.PropertyName = \"Relaxations\";\n            ifcPSE.PropertyType = PropertyType.IfcRelaxation;\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RelaxationsCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcMechanicalSteelMaterialProperties.AddEntry(ifcPSE);\n\n         }\n         if (ifcPSE != null)\n         {\n            commonPropertySets.Add(IfcMechanicalSteelMaterialProperties);\n         }\n      }\n\n\n      private static void InitIfcOpticalMaterialProperties(IList<PreDefinedPropertySetDescription> commonPropertySets)\n      {\n         PreDefinedPropertySetDescription IfcOpticalMaterialProperties = new PreDefinedPropertySetDescription();\n         IfcOpticalMaterialProperties.Name = \"IfcOpticalMaterialProperties\";\n         PreDefinedPropertySetEntry ifcPSE = null;\n         Type calcType = null;\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcOpticalMaterialProperties\"))\n         {\n            IfcOpticalMaterialProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcOpticalMaterialProperties.VisibleTransmittance\", \"VisibleTransmittance\");\n            ifcPSE.PropertyName = \"VisibleTransmittance\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleTransmittanceCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcOpticalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcOpticalMaterialProperties.SolarTransmittance\", \"SolarTransmittance\");\n            ifcPSE.PropertyName = \"SolarTransmittance\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarTransmittanceCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcOpticalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcOpticalMaterialProperties.ThermalIrTransmittance\", \"ThermalIrTransmittance\");\n            ifcPSE.PropertyName = \"ThermalIrTransmittance\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalIrTransmittanceCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcOpticalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcOpticalMaterialProperties.ThermalIrEmissivityBack\", \"ThermalIrEmissivityBack\");\n            ifcPSE.PropertyName = \"ThermalIrEmissivityBack\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalIrEmissivityBackCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcOpticalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcOpticalMaterialProperties.ThermalIrEmissivityFront\", \"ThermalIrEmissivityFront\");\n            ifcPSE.PropertyName = \"ThermalIrEmissivityFront\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalIrEmissivityFrontCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcOpticalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcOpticalMaterialProperties.VisibleReflectanceBack\", \"VisibleReflectanceBack\");\n            ifcPSE.PropertyName = \"VisibleReflectanceBack\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleReflectanceBackCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcOpticalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcOpticalMaterialProperties.VisibleReflectanceFront\", \"VisibleReflectanceFront\");\n            ifcPSE.PropertyName = \"VisibleReflectanceFront\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleReflectanceFrontCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcOpticalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcOpticalMaterialProperties.SolarReflectanceFront\", \"SolarReflectanceFront\");\n            ifcPSE.PropertyName = \"SolarReflectanceFront\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarReflectanceFrontCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcOpticalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcOpticalMaterialProperties.SolarReflectanceBack\", \"SolarReflectanceBack\");\n            ifcPSE.PropertyName = \"SolarReflectanceBack\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarReflectanceBackCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcOpticalMaterialProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcOpticalMaterialProperties\"))\n         {\n            IfcOpticalMaterialProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcOpticalMaterialProperties.VisibleTransmittance\", \"VisibleTransmittance\");\n            ifcPSE.PropertyName = \"VisibleTransmittance\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleTransmittanceCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcOpticalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcOpticalMaterialProperties.SolarTransmittance\", \"SolarTransmittance\");\n            ifcPSE.PropertyName = \"SolarTransmittance\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarTransmittanceCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcOpticalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcOpticalMaterialProperties.ThermalIrTransmittance\", \"ThermalIrTransmittance\");\n            ifcPSE.PropertyName = \"ThermalIrTransmittance\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalIrTransmittanceCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcOpticalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcOpticalMaterialProperties.ThermalIrEmissivityBack\", \"ThermalIrEmissivityBack\");\n            ifcPSE.PropertyName = \"ThermalIrEmissivityBack\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalIrEmissivityBackCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcOpticalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcOpticalMaterialProperties.ThermalIrEmissivityFront\", \"ThermalIrEmissivityFront\");\n            ifcPSE.PropertyName = \"ThermalIrEmissivityFront\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalIrEmissivityFrontCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcOpticalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcOpticalMaterialProperties.VisibleReflectanceBack\", \"VisibleReflectanceBack\");\n            ifcPSE.PropertyName = \"VisibleReflectanceBack\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleReflectanceBackCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcOpticalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcOpticalMaterialProperties.VisibleReflectanceFront\", \"VisibleReflectanceFront\");\n            ifcPSE.PropertyName = \"VisibleReflectanceFront\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleReflectanceFrontCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcOpticalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcOpticalMaterialProperties.SolarReflectanceFront\", \"SolarReflectanceFront\");\n            ifcPSE.PropertyName = \"SolarReflectanceFront\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarReflectanceFrontCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcOpticalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcOpticalMaterialProperties.SolarReflectanceBack\", \"SolarReflectanceBack\");\n            ifcPSE.PropertyName = \"SolarReflectanceBack\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarReflectanceBackCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcOpticalMaterialProperties.AddEntry(ifcPSE);\n\n         }\n         if (ifcPSE != null)\n         {\n            commonPropertySets.Add(IfcOpticalMaterialProperties);\n         }\n      }\n\n\n      private static void InitIfcPermeableCoveringProperties(IList<PreDefinedPropertySetDescription> commonPropertySets)\n      {\n         PreDefinedPropertySetDescription IfcPermeableCoveringProperties = new PreDefinedPropertySetDescription();\n         IfcPermeableCoveringProperties.Name = \"IfcPermeableCoveringProperties\";\n         PreDefinedPropertySetEntry ifcPSE = null;\n         Type calcType = null;\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcPermeableCoveringProperties\"))\n         {\n            IfcPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcDoor);\n            IfcPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcWindow);\n            IfcPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcDoorStyle);\n            IfcPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcWindowStyle);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcPermeableCoveringProperties.OperationType\", \"OperationType\");\n            ifcPSE.PropertyName = \"OperationType\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTypeCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcPermeableCoveringProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcPermeableCoveringProperties.PanelPosition\", \"PanelPosition\");\n            ifcPSE.PropertyName = \"PanelPosition\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelPositionCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcPermeableCoveringProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcPermeableCoveringProperties.FrameDepth\", \"FrameDepth\");\n            ifcPSE.PropertyName = \"FrameDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcPermeableCoveringProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcPermeableCoveringProperties.FrameThickness\", \"FrameThickness\");\n            ifcPSE.PropertyName = \"FrameThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcPermeableCoveringProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcPermeableCoveringProperties\"))\n         {\n            IfcPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcDoor);\n            IfcPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcWindow);\n            IfcPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcDoorStyle);\n            IfcPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcWindowStyle);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcPermeableCoveringProperties.OperationType\", \"OperationType\");\n            ifcPSE.PropertyName = \"OperationType\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTypeCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcPermeableCoveringProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcPermeableCoveringProperties.PanelPosition\", \"PanelPosition\");\n            ifcPSE.PropertyName = \"PanelPosition\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelPositionCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcPermeableCoveringProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcPermeableCoveringProperties.FrameDepth\", \"FrameDepth\");\n            ifcPSE.PropertyName = \"FrameDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcPermeableCoveringProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcPermeableCoveringProperties.FrameThickness\", \"FrameThickness\");\n            ifcPSE.PropertyName = \"FrameThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcPermeableCoveringProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcPermeableCoveringProperties\"))\n         {\n            IfcPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcDoor);\n            IfcPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcWindow);\n            IfcPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcDoorType);\n            IfcPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcWindowType);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcPermeableCoveringProperties.OperationType\", \"OperationType\");\n            ifcPSE.PropertyName = \"OperationType\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTypeCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcPermeableCoveringProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcPermeableCoveringProperties.PanelPosition\", \"PanelPosition\");\n            ifcPSE.PropertyName = \"PanelPosition\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelPositionCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcPermeableCoveringProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcPermeableCoveringProperties.FrameDepth\", \"FrameDepth\");\n            ifcPSE.PropertyName = \"FrameDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcPermeableCoveringProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcPermeableCoveringProperties.FrameThickness\", \"FrameThickness\");\n            ifcPSE.PropertyName = \"FrameThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcPermeableCoveringProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcPermeableCoveringProperties\"))\n         {\n            IfcPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcDoor);\n            IfcPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcWindow);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcPermeableCoveringProperties.OperationType\", \"OperationType\");\n            ifcPSE.PropertyName = \"OperationType\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTypeCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcPermeableCoveringProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcPermeableCoveringProperties.PanelPosition\", \"PanelPosition\");\n            ifcPSE.PropertyName = \"PanelPosition\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelPositionCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcPermeableCoveringProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcPermeableCoveringProperties.FrameDepth\", \"FrameDepth\");\n            ifcPSE.PropertyName = \"FrameDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcPermeableCoveringProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcPermeableCoveringProperties.FrameThickness\", \"FrameThickness\");\n            ifcPSE.PropertyName = \"FrameThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcPermeableCoveringProperties.AddEntry(ifcPSE);\n\n         }\n         if (ifcPSE != null)\n         {\n            commonPropertySets.Add(IfcPermeableCoveringProperties);\n         }\n      }\n\n\n      private static void InitIfcProductsOfCombustionProperties(IList<PreDefinedPropertySetDescription> commonPropertySets)\n      {\n         PreDefinedPropertySetDescription IfcProductsOfCombustionProperties = new PreDefinedPropertySetDescription();\n         IfcProductsOfCombustionProperties.Name = \"IfcProductsOfCombustionProperties\";\n         PreDefinedPropertySetEntry ifcPSE = null;\n         Type calcType = null;\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcProductsOfCombustionProperties\"))\n         {\n            IfcProductsOfCombustionProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcProductsOfCombustionProperties.SpecificHeatCapacity\", \"SpecificHeatCapacity\");\n            ifcPSE.PropertyName = \"SpecificHeatCapacity\";\n            ifcPSE.PropertyType = PropertyType.SpecificHeatCapacity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecificHeatCapacityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcProductsOfCombustionProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcProductsOfCombustionProperties.N20Content\", \"N20Content\");\n            ifcPSE.PropertyName = \"N20Content\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.N20ContentCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcProductsOfCombustionProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcProductsOfCombustionProperties.COContent\", \"COContent\");\n            ifcPSE.PropertyName = \"COContent\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.COContentCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcProductsOfCombustionProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcProductsOfCombustionProperties.CO2Content\", \"CO2Content\");\n            ifcPSE.PropertyName = \"CO2Content\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CO2ContentCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcProductsOfCombustionProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcProductsOfCombustionProperties\"))\n         {\n            IfcProductsOfCombustionProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcProductsOfCombustionProperties.SpecificHeatCapacity\", \"SpecificHeatCapacity\");\n            ifcPSE.PropertyName = \"SpecificHeatCapacity\";\n            ifcPSE.PropertyType = PropertyType.SpecificHeatCapacity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecificHeatCapacityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcProductsOfCombustionProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcProductsOfCombustionProperties.N20Content\", \"N20Content\");\n            ifcPSE.PropertyName = \"N20Content\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.N20ContentCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcProductsOfCombustionProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcProductsOfCombustionProperties.COContent\", \"COContent\");\n            ifcPSE.PropertyName = \"COContent\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.COContentCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcProductsOfCombustionProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcProductsOfCombustionProperties.CO2Content\", \"CO2Content\");\n            ifcPSE.PropertyName = \"CO2Content\";\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CO2ContentCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcProductsOfCombustionProperties.AddEntry(ifcPSE);\n\n         }\n         if (ifcPSE != null)\n         {\n            commonPropertySets.Add(IfcProductsOfCombustionProperties);\n         }\n      }\n\n\n      private static void InitIfcReinforcementDefinitionProperties(IList<PreDefinedPropertySetDescription> commonPropertySets)\n      {\n         PreDefinedPropertySetDescription IfcReinforcementDefinitionProperties = new PreDefinedPropertySetDescription();\n         IfcReinforcementDefinitionProperties.Name = \"IfcReinforcementDefinitionProperties\";\n         PreDefinedPropertySetEntry ifcPSE = null;\n         Type calcType = null;\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcReinforcementDefinitionProperties\"))\n         {\n            IfcReinforcementDefinitionProperties.EntityTypes.Add(IFCEntityType.IfcReinforcingElement);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcReinforcementDefinitionProperties.DefinitionType\", \"DefinitionType\");\n            ifcPSE.PropertyName = \"DefinitionType\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DefinitionTypeCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcReinforcementDefinitionProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcReinforcementDefinitionProperties.ReinforcementSectionDefinitions\", \"ReinforcementSectionDefinitions\");\n            ifcPSE.PropertyName = \"ReinforcementSectionDefinitions\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementSectionDefinitionsCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcReinforcementDefinitionProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcReinforcementDefinitionProperties\"))\n         {\n            IfcReinforcementDefinitionProperties.EntityTypes.Add(IFCEntityType.IfcReinforcingElement);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcReinforcementDefinitionProperties.DefinitionType\", \"DefinitionType\");\n            ifcPSE.PropertyName = \"DefinitionType\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DefinitionTypeCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcReinforcementDefinitionProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcReinforcementDefinitionProperties.ReinforcementSectionDefinitions\", \"ReinforcementSectionDefinitions\");\n            ifcPSE.PropertyName = \"ReinforcementSectionDefinitions\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementSectionDefinitionsCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcReinforcementDefinitionProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcReinforcementDefinitionProperties\"))\n         {\n            IfcReinforcementDefinitionProperties.EntityTypes.Add(IFCEntityType.IfcReinforcingElement);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcReinforcementDefinitionProperties.DefinitionType\", \"DefinitionType\");\n            ifcPSE.PropertyName = \"DefinitionType\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DefinitionTypeCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcReinforcementDefinitionProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcReinforcementDefinitionProperties.ReinforcementSectionDefinitions\", \"ReinforcementSectionDefinitions\");\n            ifcPSE.PropertyName = \"ReinforcementSectionDefinitions\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementSectionDefinitionsCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcReinforcementDefinitionProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcReinforcementDefinitionProperties\"))\n         {\n            IfcReinforcementDefinitionProperties.EntityTypes.Add(IFCEntityType.IfcReinforcingElement);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcReinforcementDefinitionProperties.DefinitionType\", \"DefinitionType\");\n            ifcPSE.PropertyName = \"DefinitionType\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DefinitionTypeCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcReinforcementDefinitionProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcReinforcementDefinitionProperties.ReinforcementSectionDefinitions\", \"ReinforcementSectionDefinitions\");\n            ifcPSE.PropertyName = \"ReinforcementSectionDefinitions\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementSectionDefinitionsCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcReinforcementDefinitionProperties.AddEntry(ifcPSE);\n\n         }\n         if (ifcPSE != null)\n         {\n            commonPropertySets.Add(IfcReinforcementDefinitionProperties);\n         }\n      }\n\n\n      private static void InitIfcThermalMaterialProperties(IList<PreDefinedPropertySetDescription> commonPropertySets)\n      {\n         PreDefinedPropertySetDescription IfcThermalMaterialProperties = new PreDefinedPropertySetDescription();\n         IfcThermalMaterialProperties.Name = \"IfcThermalMaterialProperties\";\n         PreDefinedPropertySetEntry ifcPSE = null;\n         Type calcType = null;\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcThermalMaterialProperties\"))\n         {\n            IfcThermalMaterialProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcThermalMaterialProperties.SpecificHeatCapacity\", \"SpecificHeatCapacity\");\n            ifcPSE.PropertyName = \"SpecificHeatCapacity\";\n            ifcPSE.PropertyType = PropertyType.SpecificHeatCapacity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecificHeatCapacityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcThermalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcThermalMaterialProperties.BoilingPoint\", \"BoilingPoint\");\n            ifcPSE.PropertyName = \"BoilingPoint\";\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoilingPointCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcThermalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcThermalMaterialProperties.FreezingPoint\", \"FreezingPoint\");\n            ifcPSE.PropertyName = \"FreezingPoint\";\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FreezingPointCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcThermalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcThermalMaterialProperties.ThermalConductivity\", \"ThermalConductivity\");\n            ifcPSE.PropertyName = \"ThermalConductivity\";\n            ifcPSE.PropertyType = PropertyType.ThermalConductivity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalConductivityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcThermalMaterialProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcThermalMaterialProperties\"))\n         {\n            IfcThermalMaterialProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcThermalMaterialProperties.SpecificHeatCapacity\", \"SpecificHeatCapacity\");\n            ifcPSE.PropertyName = \"SpecificHeatCapacity\";\n            ifcPSE.PropertyType = PropertyType.SpecificHeatCapacity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecificHeatCapacityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcThermalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcThermalMaterialProperties.BoilingPoint\", \"BoilingPoint\");\n            ifcPSE.PropertyName = \"BoilingPoint\";\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoilingPointCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcThermalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcThermalMaterialProperties.FreezingPoint\", \"FreezingPoint\");\n            ifcPSE.PropertyName = \"FreezingPoint\";\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FreezingPointCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcThermalMaterialProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcThermalMaterialProperties.ThermalConductivity\", \"ThermalConductivity\");\n            ifcPSE.PropertyName = \"ThermalConductivity\";\n            ifcPSE.PropertyType = PropertyType.ThermalConductivity;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalConductivityCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcThermalMaterialProperties.AddEntry(ifcPSE);\n\n         }\n         if (ifcPSE != null)\n         {\n            commonPropertySets.Add(IfcThermalMaterialProperties);\n         }\n      }\n\n\n      private static void InitIfcWaterProperties(IList<PreDefinedPropertySetDescription> commonPropertySets)\n      {\n         PreDefinedPropertySetDescription IfcWaterProperties = new PreDefinedPropertySetDescription();\n         IfcWaterProperties.Name = \"IfcWaterProperties\";\n         PreDefinedPropertySetEntry ifcPSE = null;\n         Type calcType = null;\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcWaterProperties\"))\n         {\n            IfcWaterProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWaterProperties.IsPotable\", \"IsPotable\");\n            ifcPSE.PropertyName = \"IsPotable\";\n            ifcPSE.PropertyType = PropertyType.Boolean;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsPotableCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWaterProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWaterProperties.Hardness\", \"Hardness\");\n            ifcPSE.PropertyName = \"Hardness\";\n            ifcPSE.PropertyType = PropertyType.IonConcentration;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HardnessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWaterProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWaterProperties.AlkalinityConcentration\", \"AlkalinityConcentration\");\n            ifcPSE.PropertyName = \"AlkalinityConcentration\";\n            ifcPSE.PropertyType = PropertyType.IonConcentration;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AlkalinityConcentrationCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWaterProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWaterProperties.AcidityConcentration\", \"AcidityConcentration\");\n            ifcPSE.PropertyName = \"AcidityConcentration\";\n            ifcPSE.PropertyType = PropertyType.IonConcentration;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcidityConcentrationCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWaterProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWaterProperties.ImpuritiesContent\", \"ImpuritiesContent\");\n            ifcPSE.PropertyName = \"ImpuritiesContent\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpuritiesContentCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWaterProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWaterProperties.PHLevel\", \"PHLevel\");\n            ifcPSE.PropertyName = \"PHLevel\";\n            ifcPSE.PropertyType = PropertyType.PH;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PHLevelCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWaterProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWaterProperties.DissolvedSolidsContent\", \"DissolvedSolidsContent\");\n            ifcPSE.PropertyName = \"DissolvedSolidsContent\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DissolvedSolidsContentCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWaterProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcWaterProperties\"))\n         {\n            IfcWaterProperties.EntityTypes.Add(IFCEntityType.IfcMaterial);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWaterProperties.IsPotable\", \"IsPotable\");\n            ifcPSE.PropertyName = \"IsPotable\";\n            ifcPSE.PropertyType = PropertyType.Boolean;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsPotableCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWaterProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWaterProperties.Hardness\", \"Hardness\");\n            ifcPSE.PropertyName = \"Hardness\";\n            ifcPSE.PropertyType = PropertyType.IonConcentration;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HardnessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWaterProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWaterProperties.AlkalinityConcentration\", \"AlkalinityConcentration\");\n            ifcPSE.PropertyName = \"AlkalinityConcentration\";\n            ifcPSE.PropertyType = PropertyType.IonConcentration;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AlkalinityConcentrationCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWaterProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWaterProperties.AcidityConcentration\", \"AcidityConcentration\");\n            ifcPSE.PropertyName = \"AcidityConcentration\";\n            ifcPSE.PropertyType = PropertyType.IonConcentration;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcidityConcentrationCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWaterProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWaterProperties.ImpuritiesContent\", \"ImpuritiesContent\");\n            ifcPSE.PropertyName = \"ImpuritiesContent\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpuritiesContentCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWaterProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWaterProperties.PHLevel\", \"PHLevel\");\n            ifcPSE.PropertyName = \"PHLevel\";\n            ifcPSE.PropertyType = PropertyType.PH;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PHLevelCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWaterProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWaterProperties.DissolvedSolidsContent\", \"DissolvedSolidsContent\");\n            ifcPSE.PropertyName = \"DissolvedSolidsContent\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DissolvedSolidsContentCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWaterProperties.AddEntry(ifcPSE);\n\n         }\n         if (ifcPSE != null)\n         {\n            commonPropertySets.Add(IfcWaterProperties);\n         }\n      }\n\n\n      private static void InitIfcWindowLiningProperties(IList<PreDefinedPropertySetDescription> commonPropertySets)\n      {\n         PreDefinedPropertySetDescription IfcWindowLiningProperties = new PreDefinedPropertySetDescription();\n         IfcWindowLiningProperties.Name = \"IfcWindowLiningProperties\";\n         PreDefinedPropertySetEntry ifcPSE = null;\n         Type calcType = null;\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcWindowLiningProperties\"))\n         {\n            IfcWindowLiningProperties.EntityTypes.Add(IFCEntityType.IfcWindow);\n            IfcWindowLiningProperties.EntityTypes.Add(IFCEntityType.IfcWindowStyle);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.LiningDepth\", \"LiningDepth\");\n            ifcPSE.PropertyName = \"LiningDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.FirstTransomOffset\", \"FirstTransomOffset\");\n            ifcPSE.PropertyName = \"FirstTransomOffset\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FirstTransomOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.SecondTransomOffset\", \"SecondTransomOffset\");\n            ifcPSE.PropertyName = \"SecondTransomOffset\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondTransomOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.FirstMullionOffset\", \"FirstMullionOffset\");\n            ifcPSE.PropertyName = \"FirstMullionOffset\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FirstMullionOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.SecondMullionOffset\", \"SecondMullionOffset\");\n            ifcPSE.PropertyName = \"SecondMullionOffset\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondMullionOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.LiningThickness\", \"LiningThickness\");\n            ifcPSE.PropertyName = \"LiningThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.TransomThickness\", \"TransomThickness\");\n            ifcPSE.PropertyName = \"TransomThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransomThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.MullionThickness\", \"MullionThickness\");\n            ifcPSE.PropertyName = \"MullionThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MullionThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcWindowLiningProperties\"))\n         {\n            IfcWindowLiningProperties.EntityTypes.Add(IFCEntityType.IfcWindow);\n            IfcWindowLiningProperties.EntityTypes.Add(IFCEntityType.IfcWindowStyle);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.LiningDepth\", \"LiningDepth\");\n            ifcPSE.PropertyName = \"LiningDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.FirstTransomOffset\", \"FirstTransomOffset\");\n            ifcPSE.PropertyName = \"FirstTransomOffset\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FirstTransomOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.SecondTransomOffset\", \"SecondTransomOffset\");\n            ifcPSE.PropertyName = \"SecondTransomOffset\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondTransomOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.FirstMullionOffset\", \"FirstMullionOffset\");\n            ifcPSE.PropertyName = \"FirstMullionOffset\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FirstMullionOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.SecondMullionOffset\", \"SecondMullionOffset\");\n            ifcPSE.PropertyName = \"SecondMullionOffset\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondMullionOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.LiningThickness\", \"LiningThickness\");\n            ifcPSE.PropertyName = \"LiningThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.TransomThickness\", \"TransomThickness\");\n            ifcPSE.PropertyName = \"TransomThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransomThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.MullionThickness\", \"MullionThickness\");\n            ifcPSE.PropertyName = \"MullionThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MullionThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcWindowLiningProperties\"))\n         {\n            IfcWindowLiningProperties.EntityTypes.Add(IFCEntityType.IfcWindow);\n            IfcWindowLiningProperties.EntityTypes.Add(IFCEntityType.IfcWindowType);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.LiningDepth\", \"LiningDepth\");\n            ifcPSE.PropertyName = \"LiningDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.FirstTransomOffset\", \"FirstTransomOffset\");\n            ifcPSE.PropertyName = \"FirstTransomOffset\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FirstTransomOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.SecondTransomOffset\", \"SecondTransomOffset\");\n            ifcPSE.PropertyName = \"SecondTransomOffset\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondTransomOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.FirstMullionOffset\", \"FirstMullionOffset\");\n            ifcPSE.PropertyName = \"FirstMullionOffset\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FirstMullionOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.SecondMullionOffset\", \"SecondMullionOffset\");\n            ifcPSE.PropertyName = \"SecondMullionOffset\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondMullionOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.LiningThickness\", \"LiningThickness\");\n            ifcPSE.PropertyName = \"LiningThickness\";\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.TransomThickness\", \"TransomThickness\");\n            ifcPSE.PropertyName = \"TransomThickness\";\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransomThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.MullionThickness\", \"MullionThickness\");\n            ifcPSE.PropertyName = \"MullionThickness\";\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MullionThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.LiningOffset\", \"LiningOffset\");\n            ifcPSE.PropertyName = \"LiningOffset\";\n            ifcPSE.PropertyType = PropertyType.Length;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.LiningToPanelOffsetX\", \"LiningToPanelOffsetX\");\n            ifcPSE.PropertyName = \"LiningToPanelOffsetX\";\n            ifcPSE.PropertyType = PropertyType.Length;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningToPanelOffsetXCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.LiningToPanelOffsetY\", \"LiningToPanelOffsetY\");\n            ifcPSE.PropertyName = \"LiningToPanelOffsetY\";\n            ifcPSE.PropertyType = PropertyType.Length;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningToPanelOffsetYCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcWindowLiningProperties\"))\n         {\n            IfcWindowLiningProperties.EntityTypes.Add(IFCEntityType.IfcWindow);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.LiningDepth\", \"LiningDepth\");\n            ifcPSE.PropertyName = \"LiningDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.FirstTransomOffset\", \"FirstTransomOffset\");\n            ifcPSE.PropertyName = \"FirstTransomOffset\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FirstTransomOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.SecondTransomOffset\", \"SecondTransomOffset\");\n            ifcPSE.PropertyName = \"SecondTransomOffset\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondTransomOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.FirstMullionOffset\", \"FirstMullionOffset\");\n            ifcPSE.PropertyName = \"FirstMullionOffset\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FirstMullionOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowLiningProperties.SecondMullionOffset\", \"SecondMullionOffset\");\n            ifcPSE.PropertyName = \"SecondMullionOffset\";\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondMullionOffsetCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowLiningProperties.AddEntry(ifcPSE);\n\n         }\n         if (ifcPSE != null)\n         {\n            commonPropertySets.Add(IfcWindowLiningProperties);\n         }\n      }\n\n\n      private static void InitIfcWindowPanelProperties(IList<PreDefinedPropertySetDescription> commonPropertySets)\n      {\n         PreDefinedPropertySetDescription IfcWindowPanelProperties = new PreDefinedPropertySetDescription();\n         IfcWindowPanelProperties.Name = \"IfcWindowPanelProperties\";\n         PreDefinedPropertySetEntry ifcPSE = null;\n         Type calcType = null;\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcWindowPanelProperties\"))\n         {\n            IfcWindowPanelProperties.EntityTypes.Add(IFCEntityType.IfcWindow);\n            IfcWindowPanelProperties.EntityTypes.Add(IFCEntityType.IfcWindowStyle);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowPanelProperties.OperationType\", \"OperationType\");\n            ifcPSE.PropertyName = \"OperationType\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTypeCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowPanelProperties.PanelPosition\", \"PanelPosition\");\n            ifcPSE.PropertyName = \"PanelPosition\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelPositionCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowPanelProperties.FrameDepth\", \"FrameDepth\");\n            ifcPSE.PropertyName = \"FrameDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowPanelProperties.FrameThickness\", \"FrameThickness\");\n            ifcPSE.PropertyName = \"FrameThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowPanelProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcWindowPanelProperties\"))\n         {\n            IfcWindowPanelProperties.EntityTypes.Add(IFCEntityType.IfcWindow);\n            IfcWindowPanelProperties.EntityTypes.Add(IFCEntityType.IfcWindowStyle);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowPanelProperties.OperationType\", \"OperationType\");\n            ifcPSE.PropertyName = \"OperationType\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTypeCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowPanelProperties.PanelPosition\", \"PanelPosition\");\n            ifcPSE.PropertyName = \"PanelPosition\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelPositionCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowPanelProperties.FrameDepth\", \"FrameDepth\");\n            ifcPSE.PropertyName = \"FrameDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowPanelProperties.FrameThickness\", \"FrameThickness\");\n            ifcPSE.PropertyName = \"FrameThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowPanelProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcWindowPanelProperties\"))\n         {\n            IfcWindowPanelProperties.EntityTypes.Add(IFCEntityType.IfcWindow);\n            IfcWindowPanelProperties.EntityTypes.Add(IFCEntityType.IfcWindowType);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowPanelProperties.OperationType\", \"OperationType\");\n            ifcPSE.PropertyName = \"OperationType\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTypeCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowPanelProperties.PanelPosition\", \"PanelPosition\");\n            ifcPSE.PropertyName = \"PanelPosition\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelPositionCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowPanelProperties.FrameDepth\", \"FrameDepth\");\n            ifcPSE.PropertyName = \"FrameDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowPanelProperties.FrameThickness\", \"FrameThickness\");\n            ifcPSE.PropertyName = \"FrameThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowPanelProperties.AddEntry(ifcPSE);\n\n         }\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcWindowPanelProperties\"))\n         {\n            IfcWindowPanelProperties.EntityTypes.Add(IFCEntityType.IfcWindow);\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowPanelProperties.OperationType\", \"OperationType\");\n            ifcPSE.PropertyName = \"OperationType\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTypeCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowPanelProperties.PanelPosition\", \"PanelPosition\");\n            ifcPSE.PropertyName = \"PanelPosition\";\n            ifcPSE.PropertyType = PropertyType.Label;\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelPositionCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowPanelProperties.FrameDepth\", \"FrameDepth\");\n            ifcPSE.PropertyName = \"FrameDepth\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameDepthCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowPanelProperties.AddEntry(ifcPSE);\n\n            ifcPSE = new PreDefinedPropertySetEntry(\"IfcWindowPanelProperties.FrameThickness\", \"FrameThickness\");\n            ifcPSE.PropertyName = \"FrameThickness\";\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameThicknessCalculator\");\n            if (calcType != null)\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\n            IfcWindowPanelProperties.AddEntry(ifcPSE);\n\n         }\n         if (ifcPSE != null)\n         {\n            commonPropertySets.Add(IfcWindowPanelProperties);\n         }\n      }\n\n\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/ExporterInitializer_PsetDef.cs",
    "content": "/********************************************************************************************************************************\r\n** NOTE: This code is generated from IFC psd files automatically by RevitIFCTools.                                            **\r\n**       DO NOT change it manually as it will be overwritten the next time this file is re-generated!!                        **\r\n********************************************************************************************************************************/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing Autodesk.Revit;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.ApplicationServices;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Export.Exporter.PropertySet.Calculators;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   partial class ExporterInitializer\r\n   {\r\n      public static void InitCommonPropertySets(IList<IList<PropertySetDescription>> allPsetOrQtoSets)\r\n      {\r\n         IList<PropertySetDescription> theSets = new List<PropertySetDescription>();\r\n         InitPset_ActionRequest(theSets);\r\n         InitPset_ActorCommon(theSets);\r\n         InitPset_ActuatorPHistory(theSets);\r\n         InitPset_ActuatorTypeCommon(theSets);\r\n         InitPset_ActuatorTypeElectricActuator(theSets);\r\n         InitPset_ActuatorTypeHydraulicActuator(theSets);\r\n         InitPset_ActuatorTypeLinearActuation(theSets);\r\n         InitPset_ActuatorTypePneumaticActuator(theSets);\r\n         InitPset_ActuatorTypeRotationalActuation(theSets);\r\n         InitPset_Address(theSets);\r\n         InitPset_AirSideSystemInformation(theSets);\r\n         InitPset_AirTerminalBoxPHistory(theSets);\r\n         InitPset_AirTerminalBoxTypeCommon(theSets);\r\n         InitPset_AirTerminalOccurrence(theSets);\r\n         InitPset_AirTerminalPHistory(theSets);\r\n         InitPset_AirTerminalTypeCommon(theSets);\r\n         InitPset_AirTerminalTypeRectangular(theSets);\r\n         InitPset_AirTerminalTypeRound(theSets);\r\n         InitPset_AirTerminalTypeSlot(theSets);\r\n         InitPset_AirTerminalTypeSquare(theSets);\r\n         InitPset_AirToAirHeatRecoveryPHist(theSets);\r\n         InitPset_AirToAirHeatRecoveryPHistory(theSets);\r\n         InitPset_AirToAirHeatRecoveryTypeCommon(theSets);\r\n         InitPset_AlarmPHistory(theSets);\r\n         InitPset_AlarmTypeCommon(theSets);\r\n         InitPset_AlignmentCantSegmentCommon(theSets);\r\n         InitPset_AlignmentVerticalSegmentCommon(theSets);\r\n         InitPset_AnalogInput(theSets);\r\n         InitPset_AnalogOutput(theSets);\r\n         InitPset_AnnotationContourLine(theSets);\r\n         InitPset_AnnotationLineOfSight(theSets);\r\n         InitPset_AnnotationSurveyArea(theSets);\r\n         InitPset_Asset(theSets);\r\n         InitPset_AudioVisualAppliancePHistory(theSets);\r\n         InitPset_AudioVisualApplianceTypeAmplifier(theSets);\r\n         InitPset_AudioVisualApplianceTypeCamera(theSets);\r\n         InitPset_AudioVisualApplianceTypeCommon(theSets);\r\n         InitPset_AudioVisualApplianceTypeDisplay(theSets);\r\n         InitPset_AudioVisualApplianceTypePlayer(theSets);\r\n         InitPset_AudioVisualApplianceTypeProjector(theSets);\r\n         InitPset_AudioVisualApplianceTypeRailwayCommunicationTerminal(theSets);\r\n         InitPset_AudioVisualApplianceTypeReceiver(theSets);\r\n         InitPset_AudioVisualApplianceTypeRecordingEquipment(theSets);\r\n         InitPset_AudioVisualApplianceTypeSpeaker(theSets);\r\n         InitPset_AudioVisualApplianceTypeTuner(theSets);\r\n         InitPset_AxleCountingEquipment(theSets);\r\n         InitPset_BalanceWeightTensionerDesignCriteria(theSets);\r\n         InitPset_BeamCommon(theSets);\r\n         InitPset_BearingCommon(theSets);\r\n         InitPset_BerthCommon(theSets);\r\n         InitPset_BinaryInput(theSets);\r\n         InitPset_BinaryOutput(theSets);\r\n         InitPset_BoilerPHistory(theSets);\r\n         InitPset_BoilerTypeCommon(theSets);\r\n         InitPset_BoilerTypeSteam(theSets);\r\n         InitPset_BoilerTypeWater(theSets);\r\n         InitPset_BoreholeCommon(theSets);\r\n         InitPset_BoundedCourseCommon(theSets);\r\n         InitPset_BreakwaterCommon(theSets);\r\n         InitPset_BridgeCommon(theSets);\r\n         InitPset_BuildingCommon(theSets);\r\n         InitPset_BuildingElementProxyCommon(theSets);\r\n         InitPset_BuildingElementProxyProvisionForVoid(theSets);\r\n         InitPset_BuildingStoreyCommon(theSets);\r\n         InitPset_BuildingSystemCommon(theSets);\r\n         InitPset_BuildingUse(theSets);\r\n         InitPset_BuildingUseAdjacent(theSets);\r\n         InitPset_BuildingWaterStorage(theSets);\r\n         InitPset_BuiltSystemRailwayLine(theSets);\r\n         InitPset_BuiltSystemRailwayTrack(theSets);\r\n         InitPset_BurnerTypeCommon(theSets);\r\n         InitPset_CableCarrierFittingTypeCommon(theSets);\r\n         InitPset_CableCarrierSegmentTypeCableLadderSegment(theSets);\r\n         InitPset_CableCarrierSegmentTypeCableTraySegment(theSets);\r\n         InitPset_CableCarrierSegmentTypeCableTrunkingSegment(theSets);\r\n         InitPset_CableCarrierSegmentTypeCatenaryWire(theSets);\r\n         InitPset_CableCarrierSegmentTypeCommon(theSets);\r\n         InitPset_CableCarrierSegmentTypeConduitSegment(theSets);\r\n         InitPset_CableCarrierSegmentTypeDropper(theSets);\r\n         InitPset_CableFittingTypeCommon(theSets);\r\n         InitPset_CableFittingTypeExit(theSets);\r\n         InitPset_CableFittingTypeFanout(theSets);\r\n         InitPset_CableSegmentConnector(theSets);\r\n         InitPset_CableSegmentOccurenceFiberSegment(theSets);\r\n         InitPset_CableSegmentOccurrence(theSets);\r\n         InitPset_CableSegmentTypeBusBarSegment(theSets);\r\n         InitPset_CableSegmentTypeCableSegment(theSets);\r\n         InitPset_CableSegmentTypeCommon(theSets);\r\n         InitPset_CableSegmentTypeConductorSegment(theSets);\r\n         InitPset_CableSegmentTypeContactWire(theSets);\r\n         InitPset_CableSegmentTypeCoreSegment(theSets);\r\n         InitPset_CableSegmentTypeEarthingConductor(theSets);\r\n         InitPset_CableSegmentTypeFiberSegment(theSets);\r\n         InitPset_CableSegmentTypeFiberTubeSegment(theSets);\r\n         InitPset_CableSegmentTypeOpticalCableSegment(theSets);\r\n         InitPset_CableSegmentTypeStitchWire(theSets);\r\n         InitPset_CableSegmentTypeWirePairSegment(theSets);\r\n         InitPset_CargoCommon(theSets);\r\n         InitPset_CessBetweenRails(theSets);\r\n         InitPset_ChillerPHistory(theSets);\r\n         InitPset_ChillerTypeCommon(theSets);\r\n         InitPset_ChimneyCommon(theSets);\r\n         InitPset_CivilElementCommon(theSets);\r\n         InitPset_CoaxialCable(theSets);\r\n         InitPset_CoilOccurrence(theSets);\r\n         InitPset_CoilPHistory(theSets);\r\n         InitPset_CoilTypeCommon(theSets);\r\n         InitPset_CoilTypeHydronic(theSets);\r\n         InitPset_ColumnCommon(theSets);\r\n         InitPset_CommunicationsAppliancePHistory(theSets);\r\n         InitPset_CommunicationsApplianceTypeAntenna(theSets);\r\n         InitPset_CommunicationsApplianceTypeAutomaton(theSets);\r\n         InitPset_CommunicationsApplianceTypeCommon(theSets);\r\n         InitPset_CommunicationsApplianceTypeComputer(theSets);\r\n         InitPset_CommunicationsApplianceTypeGateway(theSets);\r\n         InitPset_CommunicationsApplianceTypeIntelligentPeripheral(theSets);\r\n         InitPset_CommunicationsApplianceTypeIpNetworkEquipment(theSets);\r\n         InitPset_CommunicationsApplianceTypeModem(theSets);\r\n         InitPset_CommunicationsApplianceTypeOpticalLineTerminal(theSets);\r\n         InitPset_CommunicationsApplianceTypeOpticalNetworkUnit(theSets);\r\n         InitPset_CommunicationsApplianceTypeTelecommand(theSets);\r\n         InitPset_CommunicationsApplianceTypeTelephonyExchange(theSets);\r\n         InitPset_CommunicationsApplianceTypeTransportEquipment(theSets);\r\n         InitPset_CompressorPHistory(theSets);\r\n         InitPset_CompressorTypeCommon(theSets);\r\n         InitPset_ConcreteElementGeneral(theSets);\r\n         InitPset_ConcreteElementQuantityGeneral(theSets);\r\n         InitPset_ConcreteElementSurfaceFinishQuantityGeneral(theSets);\r\n         InitPset_CondenserPHistory(theSets);\r\n         InitPset_CondenserTypeCommon(theSets);\r\n         InitPset_Condition(theSets);\r\n         InitPset_ConstructionAdministration(theSets);\r\n         InitPset_ConstructionOccurence(theSets);\r\n         InitPset_ConstructionResource(theSets);\r\n         InitPset_ControllerPHistory(theSets);\r\n         InitPset_ControllerTypeCommon(theSets);\r\n         InitPset_ControllerTypeFloating(theSets);\r\n         InitPset_ControllerTypeMultiPosition(theSets);\r\n         InitPset_ControllerTypeProgrammable(theSets);\r\n         InitPset_ControllerTypeProportional(theSets);\r\n         InitPset_ControllerTypeTwoPosition(theSets);\r\n         InitPset_CooledBeamPHistory(theSets);\r\n         InitPset_CooledBeamPHistoryActive(theSets);\r\n         InitPset_CooledBeamTypeActive(theSets);\r\n         InitPset_CooledBeamTypeCommon(theSets);\r\n         InitPset_CoolingTowerPHistory(theSets);\r\n         InitPset_CoolingTowerTypeCommon(theSets);\r\n         InitPset_CourseApplicationConditions(theSets);\r\n         InitPset_CourseCommon(theSets);\r\n         InitPset_CoveringCeiling(theSets);\r\n         InitPset_CoveringCommon(theSets);\r\n         InitPset_CoveringFlooring(theSets);\r\n         InitPset_CoveringTypeMembrane(theSets);\r\n         InitPset_CurrentInstrumentTransformer(theSets);\r\n         InitPset_CurtainWallCommon(theSets);\r\n         InitPset_DamperOccurrence(theSets);\r\n         InitPset_DamperPHistory(theSets);\r\n         InitPset_DamperTypeCommon(theSets);\r\n         InitPset_DamperTypeControlDamper(theSets);\r\n         InitPset_DamperTypeFireDamper(theSets);\r\n         InitPset_DamperTypeFireSmokeDamper(theSets);\r\n         InitPset_DamperTypeSmokeDamper(theSets);\r\n         InitPset_DataTransmissionUnit(theSets);\r\n         InitPset_DesignPoint(theSets);\r\n         InitPset_DiscreteAccessoryAnchorBolt(theSets);\r\n         InitPset_DiscreteAccessoryColumnShoe(theSets);\r\n         InitPset_DiscreteAccessoryCornerFixingPlate(theSets);\r\n         InitPset_DiscreteAccessoryDiagonalTrussConnector(theSets);\r\n         InitPset_DiscreteAccessoryEdgeFixingPlate(theSets);\r\n         InitPset_DiscreteAccessoryFixingSocket(theSets);\r\n         InitPset_DiscreteAccessoryLadderTrussConnector(theSets);\r\n         InitPset_DiscreteAccessoryStandardFixingPlate(theSets);\r\n         InitPset_DiscreteAccessoryTypeBracket(theSets);\r\n         InitPset_DiscreteAccessoryTypeCableArranger(theSets);\r\n         InitPset_DiscreteAccessoryTypeInsulator(theSets);\r\n         InitPset_DiscreteAccessoryTypeLock(theSets);\r\n         InitPset_DiscreteAccessoryTypeRailBrace(theSets);\r\n         InitPset_DiscreteAccessoryTypeRailLubrication(theSets);\r\n         InitPset_DiscreteAccessoryTypeRailPad(theSets);\r\n         InitPset_DiscreteAccessoryTypeSlidingChair(theSets);\r\n         InitPset_DiscreteAccessoryTypeSoundAbsorption(theSets);\r\n         InitPset_DiscreteAccessoryTypeTensioningEquipment(theSets);\r\n         InitPset_DiscreteAccessoryWireLoop(theSets);\r\n         InitPset_DistributionBoardOccurrence(theSets);\r\n         InitPset_DistributionBoardTypeCommon(theSets);\r\n         InitPset_DistributionBoardTypeDispatchingBoard(theSets);\r\n         InitPset_DistributionBoardTypeDistributionFrame(theSets);\r\n         InitPset_DistributionChamberElementCommon(theSets);\r\n         InitPset_DistributionChamberElementTypeFormedDuct(theSets);\r\n         InitPset_DistributionChamberElementTypeInspectionChamber(theSets);\r\n         InitPset_DistributionChamberElementTypeInspectionPit(theSets);\r\n         InitPset_DistributionChamberElementTypeManhole(theSets);\r\n         InitPset_DistributionChamberElementTypeMeterChamber(theSets);\r\n         InitPset_DistributionChamberElementTypeSump(theSets);\r\n         InitPset_DistributionChamberElementTypeTrench(theSets);\r\n         InitPset_DistributionChamberElementTypeValveChamber(theSets);\r\n         InitPset_DistributionFlowElementCommon(theSets);\r\n         InitPset_DistributionPortCommon(theSets);\r\n         InitPset_DistributionPortDuct(theSets);\r\n         InitPset_DistributionPortPHistoryCable(theSets);\r\n         InitPset_DistributionPortPHistoryDuct(theSets);\r\n         InitPset_DistributionPortPHistoryPipe(theSets);\r\n         InitPset_DistributionPortPipe(theSets);\r\n         InitPset_DistributionPortTypeCable(theSets);\r\n         InitPset_DistributionPortTypeDuct(theSets);\r\n         InitPset_DistributionPortTypePipe(theSets);\r\n         InitPset_DistributionSystemCommon(theSets);\r\n         InitPset_DistributionSystemTypeElectrical(theSets);\r\n         InitPset_DistributionSystemTypeOverheadContactlineSystem(theSets);\r\n         InitPset_DistributionSystemTypeVentilation(theSets);\r\n         InitPset_DoorCommon(theSets);\r\n         InitPset_DoorLiningProperties(theSets);\r\n         InitPset_DoorPanelProperties(theSets);\r\n         InitPset_DoorTypeTurnstile(theSets);\r\n         InitPset_DoorWindowGlazingType(theSets);\r\n         InitPset_DoorWindowShadingType(theSets);\r\n         InitPset_DrainageCatchment(theSets);\r\n         InitPset_DrainageCulvert(theSets);\r\n         InitPset_DrainageOutfall(theSets);\r\n         InitPset_DrainageReserve(theSets);\r\n         InitPset_Draughting(theSets);\r\n         InitPset_DuctConnection(theSets);\r\n         InitPset_DuctDesignCriteria(theSets);\r\n         InitPset_DuctFittingOccurrence(theSets);\r\n         InitPset_DuctFittingPHistory(theSets);\r\n         InitPset_DuctFittingTypeCommon(theSets);\r\n         InitPset_DuctSegmentOccurrence(theSets);\r\n         InitPset_DuctSegmentPHistory(theSets);\r\n         InitPset_DuctSegmentTypeCommon(theSets);\r\n         InitPset_DuctSilencerPHistory(theSets);\r\n         InitPset_DuctSilencerTypeCommon(theSets);\r\n         InitPset_ElectricalCircuit(theSets);\r\n         InitPset_ElectricalDeviceCommon(theSets);\r\n         InitPset_ElectricalDeviceCompliance(theSets);\r\n         InitPset_ElectricalFeederLine(theSets);\r\n         InitPset_ElectricAppliancePHistory(theSets);\r\n         InitPset_ElectricApplianceTypeCommon(theSets);\r\n         InitPset_ElectricApplianceTypeDishwasher(theSets);\r\n         InitPset_ElectricApplianceTypeElectricCooker(theSets);\r\n         InitPset_ElectricDistributionBoardOccurrence(theSets);\r\n         InitPset_ElectricDistributionBoardTypeCommon(theSets);\r\n         InitPset_ElectricDistributionPointCommon(theSets);\r\n         InitPset_ElectricFlowStorageDevicePHistory(theSets);\r\n         InitPset_ElectricFlowStorageDeviceTypeBattery(theSets);\r\n         InitPset_ElectricFlowStorageDeviceTypeCapacitor(theSets);\r\n         InitPset_ElectricFlowStorageDeviceTypeCommon(theSets);\r\n         InitPset_ElectricFlowStorageDeviceTypeInductor(theSets);\r\n         InitPset_ElectricFlowStorageDeviceTypeRecharger(theSets);\r\n         InitPset_ElectricFlowStorageDeviceTypeUPS(theSets);\r\n         InitPset_ElectricFlowTreatmentDeviceTypeElectronicFilter(theSets);\r\n         InitPset_ElectricGeneratorTypeCommon(theSets);\r\n         InitPset_ElectricHeaterTypeElectricalCableHeater(theSets);\r\n         InitPset_ElectricHeaterTypeElectricalMatHeater(theSets);\r\n         InitPset_ElectricHeaterTypeElectricalPointHeater(theSets);\r\n         InitPset_ElectricMotorTypeCommon(theSets);\r\n         InitPset_ElectricTimeControlTypeCommon(theSets);\r\n         InitPset_ElementAssemblyCommon(theSets);\r\n         InitPset_ElementAssemblyTypeCantilever(theSets);\r\n         InitPset_ElementAssemblyTypeDilatationPanel(theSets);\r\n         InitPset_ElementAssemblyTypeHeadSpan(theSets);\r\n         InitPset_ElementAssemblyTypeMast(theSets);\r\n         InitPset_ElementAssemblyTypeOCSSuspension(theSets);\r\n         InitPset_ElementAssemblyTypeRigidFrame(theSets);\r\n         InitPset_ElementAssemblyTypeSteadyDevice(theSets);\r\n         InitPset_ElementAssemblyTypeSupportingAssembly(theSets);\r\n         InitPset_ElementAssemblyTypeTrackPanel(theSets);\r\n         InitPset_ElementAssemblyTypeTractionSwitchingAssembly(theSets);\r\n         InitPset_ElementAssemblyTypeTurnoutPanel(theSets);\r\n         InitPset_ElementComponentCommon(theSets);\r\n         InitPset_ElementKinematics(theSets);\r\n         InitPset_ElementShading(theSets);\r\n         InitPset_ElementSize(theSets);\r\n         InitPset_EmbeddedTrack(theSets);\r\n         InitPset_EnergyConsumptionPHistoryElectricity(theSets);\r\n         InitPset_EnergyConsumptionPHistoryFuel(theSets);\r\n         InitPset_EnergyConsumptionPHistorySteam(theSets);\r\n         InitPset_EnergyConversionDeviceCoil(theSets);\r\n         InitPset_EnergyConversionDeviceSpaceHeaterPanel(theSets);\r\n         InitPset_EnergyConversionDeviceSpaceHeaterSectional(theSets);\r\n         InitPset_EnergyRequirements(theSets);\r\n         InitPset_EngineTypeCommon(theSets);\r\n         InitPset_EnvironmentalCondition(theSets);\r\n         InitPset_EnvironmentalEmissions(theSets);\r\n         InitPset_EnvironmentalImpactIndicators(theSets);\r\n         InitPset_EnvironmentalImpactValues(theSets);\r\n         InitPset_EvaporativeCoolerPHistory(theSets);\r\n         InitPset_EvaporativeCoolerTypeCommon(theSets);\r\n         InitPset_EvaporatorPHistory(theSets);\r\n         InitPset_EvaporatorTypeCommon(theSets);\r\n         InitPset_FanCentrifugal(theSets);\r\n         InitPset_FanOccurrence(theSets);\r\n         InitPset_FanPHistory(theSets);\r\n         InitPset_FanTypeCommon(theSets);\r\n         InitPset_FanTypeSmokeControl(theSets);\r\n         InitPset_FastenerRailWeld(theSets);\r\n         InitPset_FastenerWeld(theSets);\r\n         InitPset_FenderCommon(theSets);\r\n         InitPset_FenderDesignCriteria(theSets);\r\n         InitPset_FilterPHistory(theSets);\r\n         InitPset_FilterTypeAirParticleFilter(theSets);\r\n         InitPset_FilterTypeCommon(theSets);\r\n         InitPset_FilterTypeCompressedAirFilter(theSets);\r\n         InitPset_FilterTypeWaterFilter(theSets);\r\n         InitPset_FireRatingProperties(theSets);\r\n         InitPset_FireSuppressionTerminalTypeBreechingInlet(theSets);\r\n         InitPset_FireSuppressionTerminalTypeCommon(theSets);\r\n         InitPset_FireSuppressionTerminalTypeFireHydrant(theSets);\r\n         InitPset_FireSuppressionTerminalTypeHoseReel(theSets);\r\n         InitPset_FireSuppressionTerminalTypeSprinkler(theSets);\r\n         InitPset_FittingBend(theSets);\r\n         InitPset_FittingJunction(theSets);\r\n         InitPset_FittingTransition(theSets);\r\n         InitPset_FlowControllerDamper(theSets);\r\n         InitPset_FlowControllerFlowMeter(theSets);\r\n         InitPset_FlowFittingDuctFitting(theSets);\r\n         InitPset_FlowFittingPipeFitting(theSets);\r\n         InitPset_FlowInstrumentPHistory(theSets);\r\n         InitPset_FlowInstrumentTypeCommon(theSets);\r\n         InitPset_FlowInstrumentTypePressureGauge(theSets);\r\n         InitPset_FlowInstrumentTypeThermometer(theSets);\r\n         InitPset_FlowMeterOccurrence(theSets);\r\n         InitPset_FlowMeterTypeCommon(theSets);\r\n         InitPset_FlowMeterTypeEnergyMeter(theSets);\r\n         InitPset_FlowMeterTypeGasMeter(theSets);\r\n         InitPset_FlowMeterTypeOilMeter(theSets);\r\n         InitPset_FlowMeterTypeWaterMeter(theSets);\r\n         InitPset_FlowMovingDeviceCompressor(theSets);\r\n         InitPset_FlowMovingDeviceFan(theSets);\r\n         InitPset_FlowMovingDeviceFanCentrifugal(theSets);\r\n         InitPset_FlowMovingDevicePump(theSets);\r\n         InitPset_FlowSegmentDuctSegment(theSets);\r\n         InitPset_FlowSegmentPipeSegment(theSets);\r\n         InitPset_FlowStorageDeviceTank(theSets);\r\n         InitPset_FlowTerminalAirTerminal(theSets);\r\n         InitPset_FootingCommon(theSets);\r\n         InitPset_FootingTypePadFooting(theSets);\r\n         InitPset_FurnitureTypeChair(theSets);\r\n         InitPset_FurnitureTypeCommon(theSets);\r\n         InitPset_FurnitureTypeDesk(theSets);\r\n         InitPset_FurnitureTypeFileCabinet(theSets);\r\n         InitPset_FurnitureTypeTable(theSets);\r\n         InitPset_GasTerminalPHistory(theSets);\r\n         InitPset_GasTerminalTypeCommon(theSets);\r\n         InitPset_GasTerminalTypeGasAppliance(theSets);\r\n         InitPset_GasTerminalTypeGasBurner(theSets);\r\n         InitPset_GateHeadCommon(theSets);\r\n         InitPset_GeotechnicalAssemblyCommon(theSets);\r\n         InitPset_GeotechnicalStratumCommon(theSets);\r\n         InitPset_HeatExchangerTypeCommon(theSets);\r\n         InitPset_HeatExchangerTypePlate(theSets);\r\n         InitPset_HumidifierPHistory(theSets);\r\n         InitPset_HumidifierTypeCommon(theSets);\r\n         InitPset_ImpactProtectionDeviceOccurrenceBumper(theSets);\r\n         InitPset_ImpactProtectionDeviceTypeBumper(theSets);\r\n         InitPset_InstallationOccurrence(theSets);\r\n         InitPset_InterceptorTypeCommon(theSets);\r\n         InitPset_IpNetworkEquipmentPHistory(theSets);\r\n         InitPset_JettyCommon(theSets);\r\n         InitPset_JettyDesignCriteria(theSets);\r\n         InitPset_JunctionBoxTypeCommon(theSets);\r\n         InitPset_JunctionBoxTypeData(theSets);\r\n         InitPset_KerbCommon(theSets);\r\n         InitPset_KerbStone(theSets);\r\n         InitPset_LampEmitterTypeCommon(theSets);\r\n         InitPset_LampTypeCommon(theSets);\r\n         InitPset_LandRegistration(theSets);\r\n         InitPset_LightFixtureTypeCommon(theSets);\r\n         InitPset_LightFixtureTypeExitSign(theSets);\r\n         InitPset_LightFixtureTypeSecurityLighting(theSets);\r\n         InitPset_LightFixtureTypeThermal(theSets);\r\n         InitPset_LinearReferencingMethod(theSets);\r\n         InitPset_MaintenanceStrategy(theSets);\r\n         InitPset_MaintenanceTriggerCondition(theSets);\r\n         InitPset_MaintenanceTriggerDuration(theSets);\r\n         InitPset_MaintenanceTriggerPerformance(theSets);\r\n         InitPset_ManufacturerOccurrence(theSets);\r\n         InitPset_ManufacturerTypeInformation(theSets);\r\n         InitPset_MarineFacilityTransportation(theSets);\r\n         InitPset_MarinePartChamberCommon(theSets);\r\n         InitPset_MarineVehicleCommon(theSets);\r\n         InitPset_MarineVehicleDesignCriteria(theSets);\r\n         InitPset_MarkerGeneral(theSets);\r\n         InitPset_MarkingLinesCommon(theSets);\r\n         InitPset_MaterialCombustion(theSets);\r\n         InitPset_MaterialCommon(theSets);\r\n         InitPset_MaterialConcrete(theSets);\r\n         InitPset_MaterialEnergy(theSets);\r\n         InitPset_MaterialFuel(theSets);\r\n         InitPset_MaterialHygroscopic(theSets);\r\n         InitPset_MaterialMechanical(theSets);\r\n         InitPset_MaterialOptical(theSets);\r\n         InitPset_MaterialSteel(theSets);\r\n         InitPset_MaterialThermal(theSets);\r\n         InitPset_MaterialWater(theSets);\r\n         InitPset_MaterialWood(theSets);\r\n         InitPset_MaterialWoodBasedBeam(theSets);\r\n         InitPset_MaterialWoodBasedPanel(theSets);\r\n         InitPset_MaterialWoodBasedStructure(theSets);\r\n         InitPset_MechanicalBeamInPlane(theSets);\r\n         InitPset_MechanicalBeamInPlaneNegative(theSets);\r\n         InitPset_MechanicalBeamOutOfPlane(theSets);\r\n         InitPset_MechanicalFastenerAnchorBolt(theSets);\r\n         InitPset_MechanicalFastenerBolt(theSets);\r\n         InitPset_MechanicalFastenerCommon(theSets);\r\n         InitPset_MechanicalFastenerOCSFitting(theSets);\r\n         InitPset_MechanicalFastenerTypeRailFastening(theSets);\r\n         InitPset_MechanicalFastenerTypeRailJoint(theSets);\r\n         InitPset_MechanicalPanelInPlane(theSets);\r\n         InitPset_MechanicalPanelOutOfPlane(theSets);\r\n         InitPset_MechanicalPanelOutOfPlaneNegative(theSets);\r\n         InitPset_MedicalDeviceTypeCommon(theSets);\r\n         InitPset_MemberCommon(theSets);\r\n         InitPset_MemberTypeAnchoringBar(theSets);\r\n         InitPset_MemberTypeCatenaryStay(theSets);\r\n         InitPset_MemberTypeOCSRigidSupport(theSets);\r\n         InitPset_MemberTypePost(theSets);\r\n         InitPset_MemberTypeTieBar(theSets);\r\n         InitPset_MobileTelecommunicationsApplianceTypeAccessPoint(theSets);\r\n         InitPset_MobileTelecommunicationsApplianceTypeBasebandUnit(theSets);\r\n         InitPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation(theSets);\r\n         InitPset_MobileTelecommunicationsApplianceTypeCommon(theSets);\r\n         InitPset_MobileTelecommunicationsApplianceTypeEUtranNodeB(theSets);\r\n         InitPset_MobileTelecommunicationsApplianceTypeMasterUnit(theSets);\r\n         InitPset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter(theSets);\r\n         InitPset_MobileTelecommunicationsApplianceTypeMSCServer(theSets);\r\n         InitPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit(theSets);\r\n         InitPset_MobileTelecommunicationsApplianceTypeRemoteUnit(theSets);\r\n         InitPset_MooringDeviceCommon(theSets);\r\n         InitPset_MotorConnectionTypeCommon(theSets);\r\n         InitPset_MultiStateInput(theSets);\r\n         InitPset_MultiStateOutput(theSets);\r\n         InitPset_OnSiteCastKerb(theSets);\r\n         InitPset_OnSiteTelecomControlUnit(theSets);\r\n         InitPset_OpeningElementCommon(theSets);\r\n         InitPset_OpticalAdapter(theSets);\r\n         InitPset_OpticalPigtail(theSets);\r\n         InitPset_OpticalSplitter(theSets);\r\n         InitPset_OutletTypeCommon(theSets);\r\n         InitPset_OutsideDesignCriteria(theSets);\r\n         InitPset_PackingInstructions(theSets);\r\n         InitPset_PatchCordCable(theSets);\r\n         InitPset_PavementCommon(theSets);\r\n         InitPset_PavementMillingCommon(theSets);\r\n         InitPset_PavementSurfaceCommon(theSets);\r\n         InitPset_PermeableCoveringProperties(theSets);\r\n         InitPset_Permit(theSets);\r\n         InitPset_PileCommon(theSets);\r\n         InitPset_PipeConnection(theSets);\r\n         InitPset_PipeConnectionFlanged(theSets);\r\n         InitPset_PipeFittingOccurrence(theSets);\r\n         InitPset_PipeFittingPHistory(theSets);\r\n         InitPset_PipeFittingTypeBend(theSets);\r\n         InitPset_PipeFittingTypeCommon(theSets);\r\n         InitPset_PipeFittingTypeJunction(theSets);\r\n         InitPset_PipeSegmentOccurrence(theSets);\r\n         InitPset_PipeSegmentPHistory(theSets);\r\n         InitPset_PipeSegmentTypeCommon(theSets);\r\n         InitPset_PipeSegmentTypeCulvert(theSets);\r\n         InitPset_PipeSegmentTypeGutter(theSets);\r\n         InitPset_PlateCommon(theSets);\r\n         InitPset_PointMachine(theSets);\r\n         InitPset_PowerControlSystem(theSets);\r\n         InitPset_PrecastConcreteElementFabrication(theSets);\r\n         InitPset_PrecastConcreteElementGeneral(theSets);\r\n         InitPset_PrecastKerbStone(theSets);\r\n         InitPset_PrecastSlab(theSets);\r\n         InitPset_ProcessCapacity(theSets);\r\n         InitPset_ProductRequirements(theSets);\r\n         InitPset_ProfileArbitraryDoubleT(theSets);\r\n         InitPset_ProfileArbitraryHollowCore(theSets);\r\n         InitPset_ProfileMechanical(theSets);\r\n         InitPset_ProjectCommon(theSets);\r\n         InitPset_ProjectionElementShadingDevice(theSets);\r\n         InitPset_ProjectionElementShadingDevicePHistory(theSets);\r\n         InitPset_ProjectionElementTypeShadingDevice(theSets);\r\n         InitPset_ProjectOrderChangeOrder(theSets);\r\n         InitPset_ProjectOrderMaintenanceWorkOrder(theSets);\r\n         InitPset_ProjectOrderMoveOrder(theSets);\r\n         InitPset_ProjectOrderPurchaseOrder(theSets);\r\n         InitPset_ProjectOrderWorkOrder(theSets);\r\n         InitPset_PropertyAgreement(theSets);\r\n         InitPset_ProtectiveDeviceBreakerUnitI2TCurve(theSets);\r\n         InitPset_ProtectiveDeviceBreakerUnitI2TFuseCurve(theSets);\r\n         InitPset_ProtectiveDeviceBreakerUnitIPICurve(theSets);\r\n         InitPset_ProtectiveDeviceBreakerUnitTypeMCB(theSets);\r\n         InitPset_ProtectiveDeviceBreakerUnitTypeMotorProtection(theSets);\r\n         InitPset_ProtectiveDeviceOccurrence(theSets);\r\n         InitPset_ProtectiveDeviceTrippingCurve(theSets);\r\n         InitPset_ProtectiveDeviceTrippingFunctionGCurve(theSets);\r\n         InitPset_ProtectiveDeviceTrippingFunctionICurve(theSets);\r\n         InitPset_ProtectiveDeviceTrippingFunctionLCurve(theSets);\r\n         InitPset_ProtectiveDeviceTrippingFunctionSCurve(theSets);\r\n         InitPset_ProtectiveDeviceTrippingUnitCurrentAdjustment(theSets);\r\n         InitPset_ProtectiveDeviceTrippingUnitTimeAdjustment(theSets);\r\n         InitPset_ProtectiveDeviceTrippingUnitTypeCommon(theSets);\r\n         InitPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic(theSets);\r\n         InitPset_ProtectiveDeviceTrippingUnitTypeElectronic(theSets);\r\n         InitPset_ProtectiveDeviceTrippingUnitTypeResidualCurrent(theSets);\r\n         InitPset_ProtectiveDeviceTrippingUnitTypeThermal(theSets);\r\n         InitPset_ProtectiveDeviceTypeAntiArcingDevice(theSets);\r\n         InitPset_ProtectiveDeviceTypeCircuitBreaker(theSets);\r\n         InitPset_ProtectiveDeviceTypeCommon(theSets);\r\n         InitPset_ProtectiveDeviceTypeEarthFailureDevice(theSets);\r\n         InitPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker(theSets);\r\n         InitPset_ProtectiveDeviceTypeFuseDisconnector(theSets);\r\n         InitPset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker(theSets);\r\n         InitPset_ProtectiveDeviceTypeResidualCurrentSwitch(theSets);\r\n         InitPset_ProtectiveDeviceTypeSparkGap(theSets);\r\n         InitPset_ProtectiveDeviceTypeVaristor(theSets);\r\n         InitPset_ProvisionForVoid(theSets);\r\n         InitPset_PumpOccurrence(theSets);\r\n         InitPset_PumpPHistory(theSets);\r\n         InitPset_PumpTypeCommon(theSets);\r\n         InitPset_QuantityTakeOff(theSets);\r\n         InitPset_QuayCommon(theSets);\r\n         InitPset_QuayDesignCriteria(theSets);\r\n         InitPset_RadiiKerbStone(theSets);\r\n         InitPset_RailingCommon(theSets);\r\n         InitPset_RailTypeBlade(theSets);\r\n         InitPset_RailTypeCheckRail(theSets);\r\n         InitPset_RailTypeGuardRail(theSets);\r\n         InitPset_RailTypeRail(theSets);\r\n         InitPset_RailTypeStockRail(theSets);\r\n         InitPset_RailwayBalise(theSets);\r\n         InitPset_RailwayCableCarrier(theSets);\r\n         InitPset_RailwayLevelCrossing(theSets);\r\n         InitPset_RailwaySignalAspect(theSets);\r\n         InitPset_RailwaySignalOccurrence(theSets);\r\n         InitPset_RailwaySignalSighting(theSets);\r\n         InitPset_RailwaySignalType(theSets);\r\n         InitPset_RailwayTrackStructurePart(theSets);\r\n         InitPset_RampCommon(theSets);\r\n         InitPset_RampFlightCommon(theSets);\r\n         InitPset_ReferentCommon(theSets);\r\n         InitPset_ReinforcementBarCountOfIndependentFooting(theSets);\r\n         InitPset_ReinforcementBarPitchOfBeam(theSets);\r\n         InitPset_ReinforcementBarPitchOfColumn(theSets);\r\n         InitPset_ReinforcementBarPitchOfContinuousFooting(theSets);\r\n         InitPset_ReinforcementBarPitchOfSlab(theSets);\r\n         InitPset_ReinforcementBarPitchOfWall(theSets);\r\n         InitPset_ReinforcingBarBendingsBECCommon(theSets);\r\n         InitPset_ReinforcingBarBendingsBS8666Common(theSets);\r\n         InitPset_ReinforcingBarBendingsDIN135610Common(theSets);\r\n         InitPset_ReinforcingBarBendingsISOCD3766Common(theSets);\r\n         InitPset_ReinforcingBarCommon(theSets);\r\n         InitPset_ReinforcingMeshCommon(theSets);\r\n         InitPset_Reliability(theSets);\r\n         InitPset_RepairOccurrence(theSets);\r\n         InitPset_RevetmentCommon(theSets);\r\n         InitPset_Risk(theSets);\r\n         InitPset_RoadDesignCriteriaCommon(theSets);\r\n         InitPset_RoadGuardElement(theSets);\r\n         InitPset_RoadMarkingCommon(theSets);\r\n         InitPset_RoadSymbolsCommon(theSets);\r\n         InitPset_RoofCommon(theSets);\r\n         InitPset_SanitaryTerminalTypeBath(theSets);\r\n         InitPset_SanitaryTerminalTypeBidet(theSets);\r\n         InitPset_SanitaryTerminalTypeCistern(theSets);\r\n         InitPset_SanitaryTerminalTypeCommon(theSets);\r\n         InitPset_SanitaryTerminalTypeSanitaryFountain(theSets);\r\n         InitPset_SanitaryTerminalTypeShower(theSets);\r\n         InitPset_SanitaryTerminalTypeSink(theSets);\r\n         InitPset_SanitaryTerminalTypeToiletPan(theSets);\r\n         InitPset_SanitaryTerminalTypeUrinal(theSets);\r\n         InitPset_SanitaryTerminalTypeWashHandBasin(theSets);\r\n         InitPset_SanitaryTerminalTypeWCSeat(theSets);\r\n         InitPset_SectioningDevice(theSets);\r\n         InitPset_SectionInsulator(theSets);\r\n         InitPset_SensorPHistory(theSets);\r\n         InitPset_SensorTypeCO2Sensor(theSets);\r\n         InitPset_SensorTypeCommon(theSets);\r\n         InitPset_SensorTypeConductanceSensor(theSets);\r\n         InitPset_SensorTypeContactSensor(theSets);\r\n         InitPset_SensorTypeEarthquakeSensor(theSets);\r\n         InitPset_SensorTypeFireSensor(theSets);\r\n         InitPset_SensorTypeFlowSensor(theSets);\r\n         InitPset_SensorTypeForeignObjectDetectionSensor(theSets);\r\n         InitPset_SensorTypeFrostSensor(theSets);\r\n         InitPset_SensorTypeGasSensor(theSets);\r\n         InitPset_SensorTypeHeatSensor(theSets);\r\n         InitPset_SensorTypeHumiditySensor(theSets);\r\n         InitPset_SensorTypeIdentifierSensor(theSets);\r\n         InitPset_SensorTypeIonConcentrationSensor(theSets);\r\n         InitPset_SensorTypeLevelSensor(theSets);\r\n         InitPset_SensorTypeLightSensor(theSets);\r\n         InitPset_SensorTypeMoistureSensor(theSets);\r\n         InitPset_SensorTypeMovementSensor(theSets);\r\n         InitPset_SensorTypePHSensor(theSets);\r\n         InitPset_SensorTypePressureSensor(theSets);\r\n         InitPset_SensorTypeRadiationSensor(theSets);\r\n         InitPset_SensorTypeRadioactivitySensor(theSets);\r\n         InitPset_SensorTypeRainSensor(theSets);\r\n         InitPset_SensorTypeSmokeSensor(theSets);\r\n         InitPset_SensorTypeSnowSensor(theSets);\r\n         InitPset_SensorTypeSoundSensor(theSets);\r\n         InitPset_SensorTypeTemperatureSensor(theSets);\r\n         InitPset_SensorTypeTurnoutClosureSensor(theSets);\r\n         InitPset_SensorTypeWindSensor(theSets);\r\n         InitPset_ServiceLife(theSets);\r\n         InitPset_ServiceLifeFactors(theSets);\r\n         InitPset_ShadingDeviceCommon(theSets);\r\n         InitPset_ShadingDevicePHistory(theSets);\r\n         InitPset_ShipLockCommon(theSets);\r\n         InitPset_ShiplockComplex(theSets);\r\n         InitPset_ShiplockDesignCriteria(theSets);\r\n         InitPset_ShipyardCommon(theSets);\r\n         InitPset_SignalFrame(theSets);\r\n         InitPset_SignCommon(theSets);\r\n         InitPset_SiteCommon(theSets);\r\n         InitPset_SiteWeather(theSets);\r\n         InitPset_SlabCommon(theSets);\r\n         InitPset_SlabTypeTrackSlab(theSets);\r\n         InitPset_SolarDeviceTypeCommon(theSets);\r\n         InitPset_SolidStratumCapacity(theSets);\r\n         InitPset_SolidStratumComposition(theSets);\r\n         InitPset_SoundAttenuation(theSets);\r\n         InitPset_SoundGeneration(theSets);\r\n         InitPset_SpaceAirHandlingDimensioning(theSets);\r\n         InitPset_SpaceCommon(theSets);\r\n         InitPset_SpaceCoveringRequirements(theSets);\r\n         InitPset_SpaceFireSafetyRequirements(theSets);\r\n         InitPset_SpaceHeaterPHistory(theSets);\r\n         InitPset_SpaceHeaterPHistoryCommon(theSets);\r\n         InitPset_SpaceHeaterTypeCommon(theSets);\r\n         InitPset_SpaceHeaterTypeConvector(theSets);\r\n         InitPset_SpaceHeaterTypeHydronic(theSets);\r\n         InitPset_SpaceHeaterTypeRadiator(theSets);\r\n         InitPset_SpaceHVACDesign(theSets);\r\n         InitPset_SpaceLightingDesign(theSets);\r\n         InitPset_SpaceLightingRequirements(theSets);\r\n         InitPset_SpaceOccupancyRequirements(theSets);\r\n         InitPset_SpaceParking(theSets);\r\n         InitPset_SpaceParkingAisle(theSets);\r\n         InitPset_SpaceProgramCommon(theSets);\r\n         InitPset_SpaceThermalDesign(theSets);\r\n         InitPset_SpaceThermalLoad(theSets);\r\n         InitPset_SpaceThermalLoadPHistory(theSets);\r\n         InitPset_SpaceThermalPHistory(theSets);\r\n         InitPset_SpaceThermalRequirements(theSets);\r\n         InitPset_SpatialZoneCommon(theSets);\r\n         InitPset_SpringTensioner(theSets);\r\n         InitPset_StackTerminalTypeCommon(theSets);\r\n         InitPset_StairCommon(theSets);\r\n         InitPset_StairFlightCommon(theSets);\r\n         InitPset_Stationing(theSets);\r\n         InitPset_StructuralSurfaceMemberVaryingThickness(theSets);\r\n         InitPset_SumpBusterCommon(theSets);\r\n         InitPset_Superelevation(theSets);\r\n         InitPset_SwitchingDeviceTypeCommon(theSets);\r\n         InitPset_SwitchingDeviceTypeContactor(theSets);\r\n         InitPset_SwitchingDeviceTypeDimmerSwitch(theSets);\r\n         InitPset_SwitchingDeviceTypeEmergencyStop(theSets);\r\n         InitPset_SwitchingDeviceTypeKeypad(theSets);\r\n         InitPset_SwitchingDeviceTypeMomentarySwitch(theSets);\r\n         InitPset_SwitchingDeviceTypePHistory(theSets);\r\n         InitPset_SwitchingDeviceTypeRelay(theSets);\r\n         InitPset_SwitchingDeviceTypeSelectorSwitch(theSets);\r\n         InitPset_SwitchingDeviceTypeStarter(theSets);\r\n         InitPset_SwitchingDeviceTypeSwitchDisconnector(theSets);\r\n         InitPset_SwitchingDeviceTypeToggleSwitch(theSets);\r\n         InitPset_SymmetricPairCable(theSets);\r\n         InitPset_SystemFurnitureElementTypeCommon(theSets);\r\n         InitPset_SystemFurnitureElementTypePanel(theSets);\r\n         InitPset_SystemFurnitureElementTypeSubrack(theSets);\r\n         InitPset_SystemFurnitureElementTypeWorkSurface(theSets);\r\n         InitPset_TankOccurrence(theSets);\r\n         InitPset_TankPHistory(theSets);\r\n         InitPset_TankTypeCommon(theSets);\r\n         InitPset_TankTypeExpansion(theSets);\r\n         InitPset_TankTypePreformed(theSets);\r\n         InitPset_TankTypePressureVessel(theSets);\r\n         InitPset_TankTypeSectional(theSets);\r\n         InitPset_TelecomCableGeneral(theSets);\r\n         InitPset_TendonAnchorCommon(theSets);\r\n         InitPset_TendonCommon(theSets);\r\n         InitPset_ThermalLoad(theSets);\r\n         InitPset_ThermalLoadAggregate(theSets);\r\n         InitPset_ThermalLoadDesignCriteria(theSets);\r\n         InitPset_TicketProcessing(theSets);\r\n         InitPset_TicketVendingMachine(theSets);\r\n         InitPset_Tiling(theSets);\r\n         InitPset_Tolerance(theSets);\r\n         InitPset_TrackBase(theSets);\r\n         InitPset_TrackElementOccurrenceSleeper(theSets);\r\n         InitPset_TrackElementPHistoryDerailer(theSets);\r\n         InitPset_TrackElementTypeDerailer(theSets);\r\n         InitPset_TrackElementTypeSleeper(theSets);\r\n         InitPset_TractionPowerSystem(theSets);\r\n         InitPset_TrafficCalmingDeviceCommon(theSets);\r\n         InitPset_TransformerTypeCommon(theSets);\r\n         InitPset_TransitionSectionCommon(theSets);\r\n         InitPset_TransportElementCommon(theSets);\r\n         InitPset_TransportElementElevator(theSets);\r\n         InitPset_TransportEquipmentOTN(theSets);\r\n         InitPset_TrenchExcavationCommon(theSets);\r\n         InitPset_TubeBundleTypeCommon(theSets);\r\n         InitPset_TubeBundleTypeFinned(theSets);\r\n         InitPset_Uncertainty(theSets);\r\n         InitPset_UnitaryControlElementBaseStationController(theSets);\r\n         InitPset_UnitaryControlElementPHistory(theSets);\r\n         InitPset_UnitaryControlElementTypeCommon(theSets);\r\n         InitPset_UnitaryControlElementTypeControlPanel(theSets);\r\n         InitPset_UnitaryControlElementTypeIndicatorPanel(theSets);\r\n         InitPset_UnitaryControlElementTypeThermostat(theSets);\r\n         InitPset_UnitaryEquipmentTypeAirConditioningUnit(theSets);\r\n         InitPset_UnitaryEquipmentTypeAirHandler(theSets);\r\n         InitPset_UnitaryEquipmentTypeCommon(theSets);\r\n         InitPset_UtilityConsumption(theSets);\r\n         InitPset_UtilityConsumptionPHistory(theSets);\r\n         InitPset_ValvePHistory(theSets);\r\n         InitPset_ValveTypeAirRelease(theSets);\r\n         InitPset_ValveTypeCommon(theSets);\r\n         InitPset_ValveTypeDrawOffCock(theSets);\r\n         InitPset_ValveTypeFaucet(theSets);\r\n         InitPset_ValveTypeFlushing(theSets);\r\n         InitPset_ValveTypeGasTap(theSets);\r\n         InitPset_ValveTypeIsolating(theSets);\r\n         InitPset_ValveTypeMixing(theSets);\r\n         InitPset_ValveTypePressureReducing(theSets);\r\n         InitPset_ValveTypePressureRelief(theSets);\r\n         InitPset_VegetationCommon(theSets);\r\n         InitPset_VehicleAvailability(theSets);\r\n         InitPset_VesselLineCommon(theSets);\r\n         InitPset_VibrationIsolatorTypeCommon(theSets);\r\n         InitPset_VoltageInstrumentTransformer(theSets);\r\n         InitPset_WallCommon(theSets);\r\n         InitPset_Warranty(theSets);\r\n         InitPset_WasteTerminalTypeCommon(theSets);\r\n         InitPset_WasteTerminalTypeFloorTrap(theSets);\r\n         InitPset_WasteTerminalTypeFloorWaste(theSets);\r\n         InitPset_WasteTerminalTypeGreaseInterceptor(theSets);\r\n         InitPset_WasteTerminalTypeGullySump(theSets);\r\n         InitPset_WasteTerminalTypeGullyTrap(theSets);\r\n         InitPset_WasteTerminalTypeOilInterceptor(theSets);\r\n         InitPset_WasteTerminalTypePetrolInterceptor(theSets);\r\n         InitPset_WasteTerminalTypeRoofDrain(theSets);\r\n         InitPset_WasteTerminalTypeWasteDisposalUnit(theSets);\r\n         InitPset_WasteTerminalTypeWasteTrap(theSets);\r\n         InitPset_WaterStratumCommon(theSets);\r\n         InitPset_Width(theSets);\r\n         InitPset_WindowCommon(theSets);\r\n         InitPset_WindowLiningProperties(theSets);\r\n         InitPset_WindowPanelProperties(theSets);\r\n         InitPset_WiredCommunicationPortCommon(theSets);\r\n         InitPset_WorkControlCommon(theSets);\r\n         InitPset_ZoneCommon(theSets);\r\n\r\n         allPsetOrQtoSets.Add(theSets);\r\n      }\r\n\r\n      private static void InitPset_ActionRequest(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetActionRequest = new PropertySetDescription();\r\n         propertySetActionRequest.Name = \"Pset_ActionRequest\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActionRequest\"))\r\n         {\r\n            propertySetActionRequest.EntityTypes.Add(IFCEntityType.IfcActionRequest);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActionRequest.RequestSourceType\", \"RequestSourceType\");\r\n            ifcPSE.PropertyName = \"RequestSourceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_RequestSourceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequestSourceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActionRequest.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActionRequest.RequestSourceLabel\", \"RequestSourceLabel\");\r\n            ifcPSE.PropertyName = \"RequestSourceLabel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequestSourceLabelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActionRequest.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActionRequest.RequestSourceName\", \"RequestSourceName\");\r\n            ifcPSE.PropertyName = \"RequestSourceName\";\r\n            ifcPSE.PropertyType = PropertyType.IfcPerson;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequestSourceNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActionRequest.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActionRequest.RequestDescription\", \"RequestDescription\");\r\n            ifcPSE.PropertyName = \"RequestDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequestDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActionRequest.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActionRequest.RequestComments\", \"RequestComments\");\r\n            ifcPSE.PropertyName = \"RequestComments\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequestCommentsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActionRequest.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActionRequest.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_RequestStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActionRequest.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActionRequest\"))\r\n         {\r\n            propertySetActionRequest.EntityTypes.Add(IFCEntityType.IfcActionRequest);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActionRequest.RequestSourceType\", \"RequestSourceType\");\r\n            ifcPSE.PropertyName = \"RequestSourceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_RequestSourceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequestSourceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActionRequest.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActionRequest.RequestSourceLabel\", \"RequestSourceLabel\");\r\n            ifcPSE.PropertyName = \"RequestSourceLabel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequestSourceLabelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActionRequest.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActionRequest.RequestSourceName\", \"RequestSourceName\");\r\n            ifcPSE.PropertyName = \"RequestSourceName\";\r\n            ifcPSE.PropertyType = PropertyType.IfcPerson;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequestSourceNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActionRequest.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActionRequest.RequestDescription\", \"RequestDescription\");\r\n            ifcPSE.PropertyName = \"RequestDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequestDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActionRequest.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActionRequest.RequestComments\", \"RequestComments\");\r\n            ifcPSE.PropertyName = \"RequestComments\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequestCommentsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActionRequest.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActionRequest.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_RequestStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActionRequest.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActionRequest\"))\r\n         {\r\n            propertySetActionRequest.EntityTypes.Add(IFCEntityType.IfcActionRequest);\r\n            propertySetActionRequest.ObjectType = \"IfcActionRequest\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActionRequest.RequestSourceLabel\", \"RequestSourceLabel\");\r\n            ifcPSE.PropertyName = \"RequestSourceLabel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Request Source Label\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"要請ソースタイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequestSourceLabelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActionRequest.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActionRequest.RequestSourceName\", \"RequestSourceName\");\r\n            ifcPSE.PropertyName = \"RequestSourceName\";\r\n            ifcPSE.PropertyType = PropertyType.IfcPerson;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Request Source Name\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"要請ソースラベル\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequestSourceNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActionRequest.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActionRequest.RequestComments\", \"RequestComments\");\r\n            ifcPSE.PropertyName = \"RequestComments\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Request Comments\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"要請ソース名\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequestCommentsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActionRequest.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActionRequest\"))\r\n         {\r\n            propertySetActionRequest.EntityTypes.Add(IFCEntityType.IfcActionRequest);\r\n            propertySetActionRequest.ObjectType = \"IfcActionRequest\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActionRequest.RequestSourceLabel\", \"RequestSourceLabel\");\r\n            ifcPSE.PropertyName = \"RequestSourceLabel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequestSourceLabelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActionRequest.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActionRequest.RequestSourceName\", \"RequestSourceName\");\r\n            ifcPSE.PropertyName = \"RequestSourceName\";\r\n            ifcPSE.PropertyType = PropertyType.IfcPerson;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequestSourceNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActionRequest.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActionRequest.RequestComments\", \"RequestComments\");\r\n            ifcPSE.PropertyName = \"RequestComments\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequestCommentsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActionRequest.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetActionRequest);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ActorCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetActorCommon = new PropertySetDescription();\r\n         propertySetActorCommon.Name = \"Pset_ActorCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActorCommon\"))\r\n         {\r\n            propertySetActorCommon.EntityTypes.Add(IFCEntityType.IfcActor);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActorCommon.NumberOfActors\", \"NumberOfActors\");\r\n            ifcPSE.PropertyName = \"NumberOfActors\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfActorsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActorCommon.Category\", \"Category\");\r\n            ifcPSE.PropertyName = \"Category\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActorCommon.SkillLevel\", \"SkillLevel\");\r\n            ifcPSE.PropertyName = \"SkillLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SkillLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActorCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActorCommon\"))\r\n         {\r\n            propertySetActorCommon.EntityTypes.Add(IFCEntityType.IfcActor);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActorCommon.NumberOfActors\", \"NumberOfActors\");\r\n            ifcPSE.PropertyName = \"NumberOfActors\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfActorsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActorCommon.Category\", \"Category\");\r\n            ifcPSE.PropertyName = \"Category\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActorCommon.SkillLevel\", \"SkillLevel\");\r\n            ifcPSE.PropertyName = \"SkillLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SkillLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActorCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActorCommon\"))\r\n         {\r\n            propertySetActorCommon.EntityTypes.Add(IFCEntityType.IfcActor);\r\n            propertySetActorCommon.ObjectType = \"IfcActor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActorCommon.NumberOfActors\", \"NumberOfActors\");\r\n            ifcPSE.PropertyName = \"NumberOfActors\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Actors\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"関与者数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参与者数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfActorsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActorCommon.Category\", \"Category\");\r\n            ifcPSE.PropertyName = \"Category\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Category\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"部門\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"类别\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActorCommon.SkillLevel\", \"SkillLevel\");\r\n            ifcPSE.PropertyName = \"SkillLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Skill Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"技能段階\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"技能等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SkillLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActorCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActorCommon\"))\r\n         {\r\n            propertySetActorCommon.EntityTypes.Add(IFCEntityType.IfcActor);\r\n            propertySetActorCommon.ObjectType = \"IfcActor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActorCommon.NumberOfActors\", \"NumberOfActors\");\r\n            ifcPSE.PropertyName = \"NumberOfActors\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfActorsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActorCommon.ActorCategory\", \"ActorCategory\");\r\n            ifcPSE.PropertyName = \"ActorCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActorCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActorCommon.SkillLevel\", \"SkillLevel\");\r\n            ifcPSE.PropertyName = \"SkillLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SkillLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActorCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetActorCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ActuatorPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetActuatorPHistory = new PropertySetDescription();\r\n         propertySetActuatorPHistory.Name = \"Pset_ActuatorPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorPHistory\"))\r\n         {\r\n            propertySetActuatorPHistory.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            propertySetActuatorPHistory.ObjectType = \"IfcActuator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorPHistory.Position\", \"Position\");\r\n            ifcPSE.PropertyName = \"Position\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Position\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"位置\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조 ID\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorPHistory.Quality\", \"Quality\");\r\n            ifcPSE.PropertyName = \"Quality\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Quality\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"品質\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"페일 세이프 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.QualityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorPHistory.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"재정 기능의 유무\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorPHistory\"))\r\n         {\r\n            propertySetActuatorPHistory.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            propertySetActuatorPHistory.ObjectType = \"IfcActuator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorPHistory.PositionHistory\", \"PositionHistory\");\r\n            ifcPSE.PropertyName = \"PositionHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PositionHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorPHistory.QualityHistory\", \"QualityHistory\");\r\n            ifcPSE.PropertyName = \"QualityHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.QualityHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorPHistory.StatusHistory\", \"StatusHistory\");\r\n            ifcPSE.PropertyName = \"StatusHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetActuatorPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ActuatorTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetActuatorTypeCommon = new PropertySetDescription();\r\n         propertySetActuatorTypeCommon.Name = \"Pset_ActuatorTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeCommon\"))\r\n         {\r\n            propertySetActuatorTypeCommon.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeCommon.FailPosition\", \"FailPosition\");\r\n            ifcPSE.PropertyName = \"FailPosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FailPosition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FailPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeCommon.ManualOverride\", \"ManualOverride\");\r\n            ifcPSE.PropertyName = \"ManualOverride\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ManualOverrideCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeCommon\"))\r\n         {\r\n            propertySetActuatorTypeCommon.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeCommon.FailPosition\", \"FailPosition\");\r\n            ifcPSE.PropertyName = \"FailPosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FailPosition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FailPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeCommon.ManualOverride\", \"ManualOverride\");\r\n            ifcPSE.PropertyName = \"ManualOverride\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ManualOverrideCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeCommon\"))\r\n         {\r\n            propertySetActuatorTypeCommon.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            propertySetActuatorTypeCommon.ObjectType = \"IfcActuator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조 ID\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"페일 세이프 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeCommon.FailPosition\", \"FailPosition\");\r\n            ifcPSE.PropertyName = \"FailPosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FailPosition);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fail Position\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"フェールセーフタイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"재정 기능의 유무\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FailPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeCommon.ManualOverride\", \"ManualOverride\");\r\n            ifcPSE.PropertyName = \"ManualOverride\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Manual Override\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"オーバーライド機能の有無\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ManualOverrideCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeCommon.Application\", \"Application\");\r\n            ifcPSE.PropertyName = \"Application\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ActuatorApplication);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Application\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplicationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeCommon\"))\r\n         {\r\n            propertySetActuatorTypeCommon.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            propertySetActuatorTypeCommon.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            propertySetActuatorTypeCommon.ObjectType = \"IfcActuator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeCommon.ActuatorStatus\", \"ActuatorStatus\");\r\n            ifcPSE.PropertyName = \"ActuatorStatus\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActuatorStatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeCommon.FailPosition\", \"FailPosition\");\r\n            ifcPSE.PropertyName = \"FailPosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FailPosition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FailPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeCommon.ManualOverride\", \"ManualOverride\");\r\n            ifcPSE.PropertyName = \"ManualOverride\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ManualOverrideCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeCommon.ActuatorApplication\", \"ActuatorApplication\");\r\n            ifcPSE.PropertyName = \"ActuatorApplication\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ActuatorApplication);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActuatorApplicationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetActuatorTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ActuatorTypeElectricActuator(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetActuatorTypeElectricActuator = new PropertySetDescription();\r\n         propertySetActuatorTypeElectricActuator.Name = \"Pset_ActuatorTypeElectricActuator\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeElectricActuator\"))\r\n         {\r\n            propertySetActuatorTypeElectricActuator.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            propertySetActuatorTypeElectricActuator.ObjectType = \"ElectricActuator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeElectricActuator.ActuatorInputPower\", \"ActuatorInputPower\");\r\n            ifcPSE.PropertyName = \"ActuatorInputPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActuatorInputPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeElectricActuator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeElectricActuator.ElectricActuatorType\", \"ElectricActuatorType\");\r\n            ifcPSE.PropertyName = \"ElectricActuatorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_ElectricActuatorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricActuatorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeElectricActuator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeElectricActuator\"))\r\n         {\r\n            propertySetActuatorTypeElectricActuator.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            propertySetActuatorTypeElectricActuator.ObjectType = \"IfcActuatorType\";\r\n            propertySetActuatorTypeElectricActuator.PredefinedType = \"ELECTRICACTUATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeElectricActuator.ActuatorInputPower\", \"ActuatorInputPower\");\r\n            ifcPSE.PropertyName = \"ActuatorInputPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActuatorInputPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeElectricActuator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeElectricActuator.ElectricActuatorType\", \"ElectricActuatorType\");\r\n            ifcPSE.PropertyName = \"ElectricActuatorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ElectricActuatorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricActuatorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeElectricActuator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeElectricActuator\"))\r\n         {\r\n            propertySetActuatorTypeElectricActuator.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            propertySetActuatorTypeElectricActuator.ObjectType = \"IfcActuator\";\r\n            propertySetActuatorTypeElectricActuator.PredefinedType = \"ELECTRICACTUATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeElectricActuator.ActuatorInputPower\", \"ActuatorInputPower\");\r\n            ifcPSE.PropertyName = \"ActuatorInputPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Actuator Input Power\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"入力電力\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"입력 전력\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActuatorInputPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeElectricActuator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeElectricActuator.ElectricActuatorType\", \"ElectricActuatorType\");\r\n            ifcPSE.PropertyName = \"ElectricActuatorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElectricActuatorType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Electric Actuator Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電気式アクチュエータタイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전기식 액추에이터 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricActuatorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeElectricActuator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeElectricActuator\"))\r\n         {\r\n            propertySetActuatorTypeElectricActuator.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            propertySetActuatorTypeElectricActuator.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            propertySetActuatorTypeElectricActuator.ObjectType = \"IfcActuator\";\r\n            propertySetActuatorTypeElectricActuator.PredefinedType = \"ELECTRICACTUATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeElectricActuator.ActuatorInputPower\", \"ActuatorInputPower\");\r\n            ifcPSE.PropertyName = \"ActuatorInputPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActuatorInputPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeElectricActuator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeElectricActuator.ElectricActuatorType\", \"ElectricActuatorType\");\r\n            ifcPSE.PropertyName = \"ElectricActuatorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElectricActuatorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricActuatorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeElectricActuator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeElectricActuator.ControlPulseCurrent\", \"ControlPulseCurrent\");\r\n            ifcPSE.PropertyName = \"ControlPulseCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlPulseCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeElectricActuator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetActuatorTypeElectricActuator);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ActuatorTypeHydraulicActuator(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetActuatorTypeHydraulicActuator = new PropertySetDescription();\r\n         propertySetActuatorTypeHydraulicActuator.Name = \"Pset_ActuatorTypeHydraulicActuator\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeHydraulicActuator\"))\r\n         {\r\n            propertySetActuatorTypeHydraulicActuator.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            propertySetActuatorTypeHydraulicActuator.ObjectType = \"HydraulicActuator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeHydraulicActuator.InputPressure\", \"InputPressure\");\r\n            ifcPSE.PropertyName = \"InputPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeHydraulicActuator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeHydraulicActuator.InputFlowrate\", \"InputFlowrate\");\r\n            ifcPSE.PropertyName = \"InputFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeHydraulicActuator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeHydraulicActuator\"))\r\n         {\r\n            propertySetActuatorTypeHydraulicActuator.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            propertySetActuatorTypeHydraulicActuator.ObjectType = \"IfcActuatorType\";\r\n            propertySetActuatorTypeHydraulicActuator.PredefinedType = \"HYDRAULICACTUATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeHydraulicActuator.InputPressure\", \"InputPressure\");\r\n            ifcPSE.PropertyName = \"InputPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeHydraulicActuator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeHydraulicActuator.InputFlowrate\", \"InputFlowrate\");\r\n            ifcPSE.PropertyName = \"InputFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeHydraulicActuator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeHydraulicActuator\"))\r\n         {\r\n            propertySetActuatorTypeHydraulicActuator.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            propertySetActuatorTypeHydraulicActuator.ObjectType = \"IfcActuator\";\r\n            propertySetActuatorTypeHydraulicActuator.PredefinedType = \"HYDRAULICACTUATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeHydraulicActuator.InputPressure\", \"InputPressure\");\r\n            ifcPSE.PropertyName = \"InputPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Input Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"入力圧力\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"입력 압력\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeHydraulicActuator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeHydraulicActuator.InputFlowrate\", \"InputFlowrate\");\r\n            ifcPSE.PropertyName = \"InputFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Input Flowrate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"入力流量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"입력 유량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeHydraulicActuator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeHydraulicActuator\"))\r\n         {\r\n            propertySetActuatorTypeHydraulicActuator.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            propertySetActuatorTypeHydraulicActuator.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            propertySetActuatorTypeHydraulicActuator.ObjectType = \"IfcActuator\";\r\n            propertySetActuatorTypeHydraulicActuator.PredefinedType = \"HYDRAULICACTUATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeHydraulicActuator.InputPressure\", \"InputPressure\");\r\n            ifcPSE.PropertyName = \"InputPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeHydraulicActuator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeHydraulicActuator.InputFlowrate\", \"InputFlowrate\");\r\n            ifcPSE.PropertyName = \"InputFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeHydraulicActuator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetActuatorTypeHydraulicActuator);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ActuatorTypeLinearActuation(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetActuatorTypeLinearActuation = new PropertySetDescription();\r\n         propertySetActuatorTypeLinearActuation.Name = \"Pset_ActuatorTypeLinearActuation\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeLinearActuation\"))\r\n         {\r\n            propertySetActuatorTypeLinearActuation.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeLinearActuation.Force\", \"Force\");\r\n            ifcPSE.PropertyName = \"Force\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ForceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeLinearActuation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeLinearActuation.Stroke\", \"Stroke\");\r\n            ifcPSE.PropertyName = \"Stroke\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StrokeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeLinearActuation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeLinearActuation\"))\r\n         {\r\n            propertySetActuatorTypeLinearActuation.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeLinearActuation.Force\", \"Force\");\r\n            ifcPSE.PropertyName = \"Force\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ForceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeLinearActuation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeLinearActuation.Stroke\", \"Stroke\");\r\n            ifcPSE.PropertyName = \"Stroke\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StrokeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeLinearActuation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeLinearActuation\"))\r\n         {\r\n            propertySetActuatorTypeLinearActuation.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            propertySetActuatorTypeLinearActuation.ObjectType = \"IfcActuator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeLinearActuation.Force\", \"Force\");\r\n            ifcPSE.PropertyName = \"Force\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Force\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最大推力\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최대추력\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ForceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeLinearActuation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeLinearActuation.Stroke\", \"Stroke\");\r\n            ifcPSE.PropertyName = \"Stroke\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Stroke\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ストローク\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"입력\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StrokeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeLinearActuation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeLinearActuation\"))\r\n         {\r\n            propertySetActuatorTypeLinearActuation.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            propertySetActuatorTypeLinearActuation.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            propertySetActuatorTypeLinearActuation.ObjectType = \"IfcActuator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeLinearActuation.Force\", \"Force\");\r\n            ifcPSE.PropertyName = \"Force\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ForceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeLinearActuation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeLinearActuation.Stroke\", \"Stroke\");\r\n            ifcPSE.PropertyName = \"Stroke\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StrokeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeLinearActuation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetActuatorTypeLinearActuation);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ActuatorTypePneumaticActuator(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetActuatorTypePneumaticActuator = new PropertySetDescription();\r\n         propertySetActuatorTypePneumaticActuator.Name = \"Pset_ActuatorTypePneumaticActuator\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypePneumaticActuator\"))\r\n         {\r\n            propertySetActuatorTypePneumaticActuator.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            propertySetActuatorTypePneumaticActuator.ObjectType = \"PneumaticActuator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypePneumaticActuator.InputPressure\", \"InputPressure\");\r\n            ifcPSE.PropertyName = \"InputPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypePneumaticActuator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypePneumaticActuator.InputFlowrate\", \"InputFlowrate\");\r\n            ifcPSE.PropertyName = \"InputFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypePneumaticActuator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypePneumaticActuator\"))\r\n         {\r\n            propertySetActuatorTypePneumaticActuator.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            propertySetActuatorTypePneumaticActuator.ObjectType = \"IfcActuatorType\";\r\n            propertySetActuatorTypePneumaticActuator.PredefinedType = \"PNEUMATICACTUATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypePneumaticActuator.InputPressure\", \"InputPressure\");\r\n            ifcPSE.PropertyName = \"InputPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypePneumaticActuator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypePneumaticActuator.InputFlowrate\", \"InputFlowrate\");\r\n            ifcPSE.PropertyName = \"InputFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypePneumaticActuator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypePneumaticActuator\"))\r\n         {\r\n            propertySetActuatorTypePneumaticActuator.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            propertySetActuatorTypePneumaticActuator.ObjectType = \"IfcActuator\";\r\n            propertySetActuatorTypePneumaticActuator.PredefinedType = \"PNEUMATICACTUATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypePneumaticActuator.InputPressure\", \"InputPressure\");\r\n            ifcPSE.PropertyName = \"InputPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Input Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"入力圧力\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"입력 압력\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypePneumaticActuator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypePneumaticActuator.InputFlowrate\", \"InputFlowrate\");\r\n            ifcPSE.PropertyName = \"InputFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Input Flowrate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"入力流量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"입력 유량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypePneumaticActuator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypePneumaticActuator\"))\r\n         {\r\n            propertySetActuatorTypePneumaticActuator.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            propertySetActuatorTypePneumaticActuator.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            propertySetActuatorTypePneumaticActuator.ObjectType = \"IfcActuator\";\r\n            propertySetActuatorTypePneumaticActuator.PredefinedType = \"PNEUMATICACTUATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypePneumaticActuator.InputPressure\", \"InputPressure\");\r\n            ifcPSE.PropertyName = \"InputPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypePneumaticActuator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypePneumaticActuator.InputFlowrate\", \"InputFlowrate\");\r\n            ifcPSE.PropertyName = \"InputFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypePneumaticActuator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetActuatorTypePneumaticActuator);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ActuatorTypeRotationalActuation(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetActuatorTypeRotationalActuation = new PropertySetDescription();\r\n         propertySetActuatorTypeRotationalActuation.Name = \"Pset_ActuatorTypeRotationalActuation\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeRotationalActuation\"))\r\n         {\r\n            propertySetActuatorTypeRotationalActuation.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeRotationalActuation.Torque\", \"Torque\");\r\n            ifcPSE.PropertyName = \"Torque\";\r\n            ifcPSE.PropertyType = PropertyType.Torque;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorqueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeRotationalActuation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeRotationalActuation.RangeAngle\", \"RangeAngle\");\r\n            ifcPSE.PropertyName = \"RangeAngle\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RangeAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeRotationalActuation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeRotationalActuation\"))\r\n         {\r\n            propertySetActuatorTypeRotationalActuation.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeRotationalActuation.Torque\", \"Torque\");\r\n            ifcPSE.PropertyName = \"Torque\";\r\n            ifcPSE.PropertyType = PropertyType.Torque;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorqueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeRotationalActuation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeRotationalActuation.RangeAngle\", \"RangeAngle\");\r\n            ifcPSE.PropertyName = \"RangeAngle\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RangeAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeRotationalActuation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeRotationalActuation\"))\r\n         {\r\n            propertySetActuatorTypeRotationalActuation.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            propertySetActuatorTypeRotationalActuation.ObjectType = \"IfcActuator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeRotationalActuation.Torque\", \"Torque\");\r\n            ifcPSE.PropertyName = \"Torque\";\r\n            ifcPSE.PropertyType = PropertyType.Torque;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Torque\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最大トルク\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최대 토크\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorqueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeRotationalActuation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeRotationalActuation.RangeAngle\", \"RangeAngle\");\r\n            ifcPSE.PropertyName = \"RangeAngle\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Range Angle\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最大回転角\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최대 회전각\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RangeAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeRotationalActuation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ActuatorTypeRotationalActuation\"))\r\n         {\r\n            propertySetActuatorTypeRotationalActuation.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            propertySetActuatorTypeRotationalActuation.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            propertySetActuatorTypeRotationalActuation.ObjectType = \"IfcActuator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeRotationalActuation.Torque\", \"Torque\");\r\n            ifcPSE.PropertyName = \"Torque\";\r\n            ifcPSE.PropertyType = PropertyType.Torque;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorqueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeRotationalActuation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ActuatorTypeRotationalActuation.RangeAngle\", \"RangeAngle\");\r\n            ifcPSE.PropertyName = \"RangeAngle\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RangeAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetActuatorTypeRotationalActuation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetActuatorTypeRotationalActuation);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_Address(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAddress = new PropertySetDescription();\r\n         propertySetAddress.Name = \"Pset_Address\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Address\"))\r\n         {\r\n            propertySetAddress.EntityTypes.Add(IFCEntityType.IfcActor);\r\n            propertySetAddress.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            propertySetAddress.EntityTypes.Add(IFCEntityType.IfcSite);\r\n            propertySetAddress.ObjectType = \"IfcActor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_Address.Purpose\", \"Purpose\");\r\n            ifcPSE.PropertyName = \"Purpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AddressType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAddress.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Address.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAddress.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Address.UserDefinedPurpose\", \"UserDefinedPurpose\");\r\n            ifcPSE.PropertyName = \"UserDefinedPurpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UserDefinedPurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAddress.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Address.InternalLocation\", \"InternalLocation\");\r\n            ifcPSE.PropertyName = \"InternalLocation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalLocationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAddress.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Address.AddressLines\", \"AddressLines\");\r\n            ifcPSE.PropertyName = \"AddressLines\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AddressLinesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAddress.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Address.PostalBox\", \"PostalBox\");\r\n            ifcPSE.PropertyName = \"PostalBox\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PostalBoxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAddress.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Address.Town\", \"Town\");\r\n            ifcPSE.PropertyName = \"Town\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TownCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAddress.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Address.Region\", \"Region\");\r\n            ifcPSE.PropertyName = \"Region\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RegionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAddress.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Address.PostalCode\", \"PostalCode\");\r\n            ifcPSE.PropertyName = \"PostalCode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PostalCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAddress.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Address.Country\", \"Country\");\r\n            ifcPSE.PropertyName = \"Country\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CountryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAddress.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Address.TelephoneNumbers\", \"TelephoneNumbers\");\r\n            ifcPSE.PropertyName = \"TelephoneNumbers\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TelephoneNumbersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAddress.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Address.FacsimileNumbers\", \"FacsimileNumbers\");\r\n            ifcPSE.PropertyName = \"FacsimileNumbers\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FacsimileNumbersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAddress.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Address.PagerNumber\", \"PagerNumber\");\r\n            ifcPSE.PropertyName = \"PagerNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PagerNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAddress.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Address.ElectronicMailAddresses\", \"ElectronicMailAddresses\");\r\n            ifcPSE.PropertyName = \"ElectronicMailAddresses\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectronicMailAddressesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAddress.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Address.WWWHomePageURL\", \"WWWHomePageURL\");\r\n            ifcPSE.PropertyName = \"WWWHomePageURL\";\r\n            ifcPSE.PropertyType = PropertyType.URIReference;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WWWHomePageURLCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAddress.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Address.MessagingIDs\", \"MessagingIDs\");\r\n            ifcPSE.PropertyName = \"MessagingIDs\";\r\n            ifcPSE.PropertyType = PropertyType.URIReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MessagingIDsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAddress.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAddress);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AirSideSystemInformation(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAirSideSystemInformation = new PropertySetDescription();\r\n         propertySetAirSideSystemInformation.Name = \"Pset_AirSideSystemInformation\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirSideSystemInformation\"))\r\n         {\r\n            propertySetAirSideSystemInformation.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.Name\", \"Name\");\r\n            ifcPSE.PropertyName = \"Name\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.AirSideSystemType\", \"AirSideSystemType\");\r\n            ifcPSE.PropertyName = \"AirSideSystemType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirSideSystemType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirSideSystemTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.AirSideSystemDistributionType\", \"AirSideSystemDistributionType\");\r\n            ifcPSE.PropertyName = \"AirSideSystemDistributionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirSideSystemDistributionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirSideSystemDistributionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.TotalAirflow\", \"TotalAirflow\");\r\n            ifcPSE.PropertyName = \"TotalAirflow\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalAirflowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.EnergyGainTotal\", \"EnergyGainTotal\");\r\n            ifcPSE.PropertyName = \"EnergyGainTotal\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyGainTotalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.AirflowSensible\", \"AirflowSensible\");\r\n            ifcPSE.PropertyName = \"AirflowSensible\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirflowSensibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.EnergyGainSensible\", \"EnergyGainSensible\");\r\n            ifcPSE.PropertyName = \"EnergyGainSensible\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyGainSensibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.EnergyLoss\", \"EnergyLoss\");\r\n            ifcPSE.PropertyName = \"EnergyLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.LightingDiversity\", \"LightingDiversity\");\r\n            ifcPSE.PropertyName = \"LightingDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.InfiltrationDiversitySummer\", \"InfiltrationDiversitySummer\");\r\n            ifcPSE.PropertyName = \"InfiltrationDiversitySummer\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationDiversitySummerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.InfiltrationDiversityWinter\", \"InfiltrationDiversityWinter\");\r\n            ifcPSE.PropertyName = \"InfiltrationDiversityWinter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationDiversityWinterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.ApplianceDiversity\", \"ApplianceDiversity\");\r\n            ifcPSE.PropertyName = \"ApplianceDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplianceDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.LoadSafetyFactor\", \"LoadSafetyFactor\");\r\n            ifcPSE.PropertyName = \"LoadSafetyFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadSafetyFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.HeatingTemperatureDelta\", \"HeatingTemperatureDelta\");\r\n            ifcPSE.PropertyName = \"HeatingTemperatureDelta\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingTemperatureDeltaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.CoolingTemperatureDelta\", \"CoolingTemperatureDelta\");\r\n            ifcPSE.PropertyName = \"CoolingTemperatureDelta\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingTemperatureDeltaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.Ventilation\", \"Ventilation\");\r\n            ifcPSE.PropertyName = \"Ventilation\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.FanPower\", \"FanPower\");\r\n            ifcPSE.PropertyName = \"FanPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirSideSystemInformation\"))\r\n         {\r\n            propertySetAirSideSystemInformation.EntityTypes.Add(IFCEntityType.IfcSpatialStructureElement);\r\n            propertySetAirSideSystemInformation.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.Name\", \"Name\");\r\n            ifcPSE.PropertyName = \"Name\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.AirSideSystemType\", \"AirSideSystemType\");\r\n            ifcPSE.PropertyName = \"AirSideSystemType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirSideSystemType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirSideSystemTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.AirSideSystemDistributionType\", \"AirSideSystemDistributionType\");\r\n            ifcPSE.PropertyName = \"AirSideSystemDistributionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirSideSystemDistributionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirSideSystemDistributionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.TotalAirflow\", \"TotalAirflow\");\r\n            ifcPSE.PropertyName = \"TotalAirflow\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalAirflowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.EnergyGainTotal\", \"EnergyGainTotal\");\r\n            ifcPSE.PropertyName = \"EnergyGainTotal\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyGainTotalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.AirflowSensible\", \"AirflowSensible\");\r\n            ifcPSE.PropertyName = \"AirflowSensible\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirflowSensibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.EnergyGainSensible\", \"EnergyGainSensible\");\r\n            ifcPSE.PropertyName = \"EnergyGainSensible\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyGainSensibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.EnergyLoss\", \"EnergyLoss\");\r\n            ifcPSE.PropertyName = \"EnergyLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.LightingDiversity\", \"LightingDiversity\");\r\n            ifcPSE.PropertyName = \"LightingDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.InfiltrationDiversitySummer\", \"InfiltrationDiversitySummer\");\r\n            ifcPSE.PropertyName = \"InfiltrationDiversitySummer\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationDiversitySummerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.InfiltrationDiversityWinter\", \"InfiltrationDiversityWinter\");\r\n            ifcPSE.PropertyName = \"InfiltrationDiversityWinter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationDiversityWinterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.ApplianceDiversity\", \"ApplianceDiversity\");\r\n            ifcPSE.PropertyName = \"ApplianceDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplianceDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.LoadSafetyFactor\", \"LoadSafetyFactor\");\r\n            ifcPSE.PropertyName = \"LoadSafetyFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadSafetyFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.HeatingTemperatureDelta\", \"HeatingTemperatureDelta\");\r\n            ifcPSE.PropertyName = \"HeatingTemperatureDelta\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingTemperatureDeltaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.CoolingTemperatureDelta\", \"CoolingTemperatureDelta\");\r\n            ifcPSE.PropertyName = \"CoolingTemperatureDelta\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingTemperatureDeltaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.Ventilation\", \"Ventilation\");\r\n            ifcPSE.PropertyName = \"Ventilation\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.FanPower\", \"FanPower\");\r\n            ifcPSE.PropertyName = \"FanPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirSideSystemInformation\"))\r\n         {\r\n            propertySetAirSideSystemInformation.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetAirSideSystemInformation.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            propertySetAirSideSystemInformation.EntityTypes.Add(IFCEntityType.IfcSpatialZone);\r\n            propertySetAirSideSystemInformation.ObjectType = \"IfcSpace,IfcZone,IfcSpatialZone\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.Name\", \"Name\");\r\n            ifcPSE.PropertyName = \"Name\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Name\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"名前\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"이름\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Description\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"説明\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"설명\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.AirSideSystemType\", \"AirSideSystemType\");\r\n            ifcPSE.PropertyName = \"AirSideSystemType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AirSideSystemType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Side System Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirSideSystemTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.AirSideSystemDistributionType\", \"AirSideSystemDistributionType\");\r\n            ifcPSE.PropertyName = \"AirSideSystemDistributionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AirSideSystemDistributionType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Side System Distribution Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"搬送方式\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"반송방식\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirSideSystemDistributionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.TotalAirflow\", \"TotalAirflow\");\r\n            ifcPSE.PropertyName = \"TotalAirflow\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Airflow\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"給気量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"급기량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalAirflowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.EnergyGainTotal\", \"EnergyGainTotal\");\r\n            ifcPSE.PropertyName = \"EnergyGainTotal\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Energy Gain Total\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"総熱取得\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"총 열 검색\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyGainTotalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.AirflowSensible\", \"AirflowSensible\");\r\n            ifcPSE.PropertyName = \"AirflowSensible\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Airflow Sensible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"顕熱空調給気量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"현열 공조 급기 량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirflowSensibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.EnergyGainSensible\", \"EnergyGainSensible\");\r\n            ifcPSE.PropertyName = \"EnergyGainSensible\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Energy Gain Sensible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"顕熱空調負荷\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"현열 공조 부하\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyGainSensibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.EnergyLoss\", \"EnergyLoss\");\r\n            ifcPSE.PropertyName = \"EnergyLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Energy Loss\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱（エネルギー）ロス\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"열(에너지)로스\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.LightingDiversity\", \"LightingDiversity\");\r\n            ifcPSE.PropertyName = \"LightingDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lighting Diversity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"照明負荷係数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조명부하계수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.InfiltrationDiversitySummer\", \"InfiltrationDiversitySummer\");\r\n            ifcPSE.PropertyName = \"InfiltrationDiversitySummer\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Infiltration Diversity Summer\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"夏期すき間換気率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"여름틈새 환기 비율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationDiversitySummerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.InfiltrationDiversityWinter\", \"InfiltrationDiversityWinter\");\r\n            ifcPSE.PropertyName = \"InfiltrationDiversityWinter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Infiltration Diversity Winter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"冬期すき間換気率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"겨울철 틈새 환기 비율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationDiversityWinterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.ApplianceDiversity\", \"ApplianceDiversity\");\r\n            ifcPSE.PropertyName = \"ApplianceDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Appliance Diversity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"機器の負荷率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"기기의 부하율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplianceDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.LoadSafetyFactor\", \"LoadSafetyFactor\");\r\n            ifcPSE.PropertyName = \"LoadSafetyFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Load Safety Factor\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"負荷の安全率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"부하의 안전율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadSafetyFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.HeatingTemperatureDelta\", \"HeatingTemperatureDelta\");\r\n            ifcPSE.PropertyName = \"HeatingTemperatureDelta\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heating Temperature Delta\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"暖房時送風温度差\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"난방시 돌풍 온도차\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingTemperatureDeltaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.CoolingTemperatureDelta\", \"CoolingTemperatureDelta\");\r\n            ifcPSE.PropertyName = \"CoolingTemperatureDelta\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cooling Temperature Delta\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"冷房時送風温度差\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"냉방시 돌풍 온도차\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingTemperatureDeltaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.Ventilation\", \"Ventilation\");\r\n            ifcPSE.PropertyName = \"Ventilation\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ventilation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外気量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"외기량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.FanPower\", \"FanPower\");\r\n            ifcPSE.PropertyName = \"FanPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fan Power\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"送風機電力消費量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"송풍기 소비 전력\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirSideSystemInformation\"))\r\n         {\r\n            propertySetAirSideSystemInformation.EntityTypes.Add(IFCEntityType.IfcSpatialElement);\r\n            propertySetAirSideSystemInformation.EntityTypes.Add(IFCEntityType.IfcSpatialZone);\r\n            propertySetAirSideSystemInformation.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            propertySetAirSideSystemInformation.ObjectType = \"IfcSpatialElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.AirSideSystemType\", \"AirSideSystemType\");\r\n            ifcPSE.PropertyName = \"AirSideSystemType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AirSideSystemType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirSideSystemTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.AirSideSystemDistributionType\", \"AirSideSystemDistributionType\");\r\n            ifcPSE.PropertyName = \"AirSideSystemDistributionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AirSideSystemDistributionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirSideSystemDistributionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.TotalAirFlow\", \"TotalAirFlow\");\r\n            ifcPSE.PropertyName = \"TotalAirFlow\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalAirFlowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.EnergyGainTotal\", \"EnergyGainTotal\");\r\n            ifcPSE.PropertyName = \"EnergyGainTotal\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyGainTotalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.AirFlowSensible\", \"AirFlowSensible\");\r\n            ifcPSE.PropertyName = \"AirFlowSensible\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowSensibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.EnergyGainSensible\", \"EnergyGainSensible\");\r\n            ifcPSE.PropertyName = \"EnergyGainSensible\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyGainSensibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.EnergyLoss\", \"EnergyLoss\");\r\n            ifcPSE.PropertyName = \"EnergyLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.InfiltrationDiversitySummer\", \"InfiltrationDiversitySummer\");\r\n            ifcPSE.PropertyName = \"InfiltrationDiversitySummer\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationDiversitySummerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.InfiltrationDiversityWinter\", \"InfiltrationDiversityWinter\");\r\n            ifcPSE.PropertyName = \"InfiltrationDiversityWinter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationDiversityWinterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.ApplianceDiversity\", \"ApplianceDiversity\");\r\n            ifcPSE.PropertyName = \"ApplianceDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplianceDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.HeatingTemperatureDelta\", \"HeatingTemperatureDelta\");\r\n            ifcPSE.PropertyName = \"HeatingTemperatureDelta\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingTemperatureDeltaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.CoolingTemperatureDelta\", \"CoolingTemperatureDelta\");\r\n            ifcPSE.PropertyName = \"CoolingTemperatureDelta\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingTemperatureDeltaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.Ventilation\", \"Ventilation\");\r\n            ifcPSE.PropertyName = \"Ventilation\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirSideSystemInformation.FanPower\", \"FanPower\");\r\n            ifcPSE.PropertyName = \"FanPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirSideSystemInformation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAirSideSystemInformation);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AirTerminalBoxPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAirTerminalBoxPHistory = new PropertySetDescription();\r\n         propertySetAirTerminalBoxPHistory.Name = \"Pset_AirTerminalBoxPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalBoxPHistory\"))\r\n         {\r\n            propertySetAirTerminalBoxPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxPHistory.DamperPosition\", \"DamperPosition\");\r\n            ifcPSE.PropertyName = \"DamperPosition\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DamperPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxPHistory.Sound\", \"Sound\");\r\n            ifcPSE.PropertyName = \"Sound\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxPHistory.AirflowCurve\", \"AirflowCurve\");\r\n            ifcPSE.PropertyName = \"AirflowCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirflowCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalBoxPHistory\"))\r\n         {\r\n            propertySetAirTerminalBoxPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxPHistory.DamperPosition\", \"DamperPosition\");\r\n            ifcPSE.PropertyName = \"DamperPosition\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DamperPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxPHistory.Sound\", \"Sound\");\r\n            ifcPSE.PropertyName = \"Sound\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxPHistory.AirflowCurve\", \"AirflowCurve\");\r\n            ifcPSE.PropertyName = \"AirflowCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirflowCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalBoxPHistory\"))\r\n         {\r\n            propertySetAirTerminalBoxPHistory.EntityTypes.Add(IFCEntityType.IfcAirTerminalBox);\r\n            propertySetAirTerminalBoxPHistory.ObjectType = \"IfcAirTerminalBox\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxPHistory.DamperPosition\", \"DamperPosition\");\r\n            ifcPSE.PropertyName = \"DamperPosition\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Damper Position\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Position du registre\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ダンパ開度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DamperPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Atmospheric Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Pression atmosphérique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"大気圧\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxPHistory.Sound\", \"Sound\");\r\n            ifcPSE.PropertyName = \"Sound\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sound\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Acoustique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"騒音\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxPHistory.AirflowCurve\", \"AirflowCurve\");\r\n            ifcPSE.PropertyName = \"AirflowCurve\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Airflow Curve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Courbe de débit d'air\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流量曲線\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirflowCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalBoxPHistory\"))\r\n         {\r\n            propertySetAirTerminalBoxPHistory.EntityTypes.Add(IFCEntityType.IfcAirTerminalBox);\r\n            propertySetAirTerminalBoxPHistory.ObjectType = \"IfcAirTerminalBox\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxPHistory.DamperPosition\", \"DamperPosition\");\r\n            ifcPSE.PropertyName = \"DamperPosition\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DamperPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxPHistory.Sound\", \"Sound\");\r\n            ifcPSE.PropertyName = \"Sound\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxPHistory.AirFlowCurve\", \"AirFlowCurve\");\r\n            ifcPSE.PropertyName = \"AirFlowCurve\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAirTerminalBoxPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AirTerminalBoxTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAirTerminalBoxTypeCommon = new PropertySetDescription();\r\n         propertySetAirTerminalBoxTypeCommon.Name = \"Pset_AirTerminalBoxTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalBoxTypeCommon\"))\r\n         {\r\n            propertySetAirTerminalBoxTypeCommon.EntityTypes.Add(IFCEntityType.IfcAirTerminalBoxType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.AirflowRateRange\", \"AirflowRateRange\");\r\n            ifcPSE.PropertyName = \"AirflowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirflowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.AirPressureRange\", \"AirPressureRange\");\r\n            ifcPSE.PropertyName = \"AirPressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.NominalAirFlowRate\", \"NominalAirFlowRate\");\r\n            ifcPSE.PropertyName = \"NominalAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.ArrangementType\", \"ArrangementType\");\r\n            ifcPSE.PropertyName = \"ArrangementType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirTerminalBoxArrangementType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArrangementTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.ReheatType\", \"ReheatType\");\r\n            ifcPSE.PropertyName = \"ReheatType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirTerminalBoxReheatType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReheatTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.HasSoundAttenuator\", \"HasSoundAttenuator\");\r\n            ifcPSE.PropertyName = \"HasSoundAttenuator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasSoundAttenuatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.HasReturnAir\", \"HasReturnAir\");\r\n            ifcPSE.PropertyName = \"HasReturnAir\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasReturnAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.HasFan\", \"HasFan\");\r\n            ifcPSE.PropertyName = \"HasFan\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasFanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.NominalInletAirPressure\", \"NominalInletAirPressure\");\r\n            ifcPSE.PropertyName = \"NominalInletAirPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalInletAirPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.NominalDamperDiameter\", \"NominalDamperDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDamperDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDamperDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.HousingThickness\", \"HousingThickness\");\r\n            ifcPSE.PropertyName = \"HousingThickness\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HousingThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.ReturnAirFractionRange\", \"ReturnAirFractionRange\");\r\n            ifcPSE.PropertyName = \"ReturnAirFractionRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReturnAirFractionRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalBoxTypeCommon\"))\r\n         {\r\n            propertySetAirTerminalBoxTypeCommon.EntityTypes.Add(IFCEntityType.IfcAirTerminalBoxType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.AirflowRateRange\", \"AirflowRateRange\");\r\n            ifcPSE.PropertyName = \"AirflowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirflowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.AirPressureRange\", \"AirPressureRange\");\r\n            ifcPSE.PropertyName = \"AirPressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.NominalAirFlowRate\", \"NominalAirFlowRate\");\r\n            ifcPSE.PropertyName = \"NominalAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.ArrangementType\", \"ArrangementType\");\r\n            ifcPSE.PropertyName = \"ArrangementType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirTerminalBoxArrangementType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArrangementTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.ReheatType\", \"ReheatType\");\r\n            ifcPSE.PropertyName = \"ReheatType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirTerminalBoxReheatType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReheatTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.HasSoundAttenuator\", \"HasSoundAttenuator\");\r\n            ifcPSE.PropertyName = \"HasSoundAttenuator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasSoundAttenuatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.HasReturnAir\", \"HasReturnAir\");\r\n            ifcPSE.PropertyName = \"HasReturnAir\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasReturnAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.HasFan\", \"HasFan\");\r\n            ifcPSE.PropertyName = \"HasFan\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasFanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.NominalInletAirPressure\", \"NominalInletAirPressure\");\r\n            ifcPSE.PropertyName = \"NominalInletAirPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalInletAirPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.NominalDamperDiameter\", \"NominalDamperDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDamperDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDamperDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.HousingThickness\", \"HousingThickness\");\r\n            ifcPSE.PropertyName = \"HousingThickness\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HousingThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.ReturnAirFractionRange\", \"ReturnAirFractionRange\");\r\n            ifcPSE.PropertyName = \"ReturnAirFractionRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReturnAirFractionRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalBoxTypeCommon\"))\r\n         {\r\n            propertySetAirTerminalBoxTypeCommon.EntityTypes.Add(IFCEntityType.IfcAirTerminalBox);\r\n            propertySetAirTerminalBoxTypeCommon.ObjectType = \"IfcAirTerminalBox\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Référence\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Etat\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.AirflowRateRange\", \"AirflowRateRange\");\r\n            ifcPSE.PropertyName = \"AirflowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Airflow Rate Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Domaine de débit d'air\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"風量範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirflowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.AirPressureRange\", \"AirPressureRange\");\r\n            ifcPSE.PropertyName = \"AirPressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Pressure Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Plage de pression d'air\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"空気圧範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.NominalAirFlowRate\", \"NominalAirFlowRate\");\r\n            ifcPSE.PropertyName = \"NominalAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Air Flow Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Débit d'air nominal\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設計風量範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.ArrangementType\", \"ArrangementType\");\r\n            ifcPSE.PropertyName = \"ArrangementType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AirTerminalBoxArrangementType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Arrangement Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Type de configuration\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ターミナル形式\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArrangementTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.ReheatType\", \"ReheatType\");\r\n            ifcPSE.PropertyName = \"ReheatType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AirTerminalBoxReheatType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reheat Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Type de réchauffage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"再熱形式\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReheatTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.HasSoundAttenuator\", \"HasSoundAttenuator\");\r\n            ifcPSE.PropertyName = \"HasSoundAttenuator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Sound Attenuator\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Possède correction acoustique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"消音有無\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasSoundAttenuatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.HasReturnAir\", \"HasReturnAir\");\r\n            ifcPSE.PropertyName = \"HasReturnAir\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Return Air\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Possède air  repris\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"還気有無\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasReturnAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.HasFan\", \"HasFan\");\r\n            ifcPSE.PropertyName = \"HasFan\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Fan\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Possède ventilateur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"送風機有無\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasFanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.NominalInletAirPressure\", \"NominalInletAirPressure\");\r\n            ifcPSE.PropertyName = \"NominalInletAirPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Inlet Air Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Pression nominale à l'entrée d'air\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設計入口空気圧\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalInletAirPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.NominalDamperDiameter\", \"NominalDamperDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDamperDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Damper Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Diamètre nominal clapet\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設計ダンパ直径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDamperDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.HousingThickness\", \"HousingThickness\");\r\n            ifcPSE.PropertyName = \"HousingThickness\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Housing Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Epaisseur de l'enveloppe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ハウジング板厚\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HousingThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Operation Temperature Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Plage de température d'exploitation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"動作温度範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.ReturnAirFractionRange\", \"ReturnAirFractionRange\");\r\n            ifcPSE.PropertyName = \"ReturnAirFractionRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Return Air Fraction Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Plage pour la fraction d'air repris\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"還気風量比\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReturnAirFractionRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalBoxTypeCommon\"))\r\n         {\r\n            propertySetAirTerminalBoxTypeCommon.EntityTypes.Add(IFCEntityType.IfcAirTerminalBox);\r\n            propertySetAirTerminalBoxTypeCommon.EntityTypes.Add(IFCEntityType.IfcAirTerminalBoxType);\r\n            propertySetAirTerminalBoxTypeCommon.ObjectType = \"IfcAirTerminalBox\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.AirFlowRateRange\", \"AirFlowRateRange\");\r\n            ifcPSE.PropertyName = \"AirFlowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.AirPressureRange\", \"AirPressureRange\");\r\n            ifcPSE.PropertyName = \"AirPressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.NominalAirFlowRate\", \"NominalAirFlowRate\");\r\n            ifcPSE.PropertyName = \"NominalAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.ArrangementType\", \"ArrangementType\");\r\n            ifcPSE.PropertyName = \"ArrangementType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AirTerminalBoxArrangementType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArrangementTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.ReheatType\", \"ReheatType\");\r\n            ifcPSE.PropertyName = \"ReheatType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AirTerminalBoxReheatType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReheatTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.HasSoundAttenuator\", \"HasSoundAttenuator\");\r\n            ifcPSE.PropertyName = \"HasSoundAttenuator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasSoundAttenuatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.HasReturnAir\", \"HasReturnAir\");\r\n            ifcPSE.PropertyName = \"HasReturnAir\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasReturnAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.HasFan\", \"HasFan\");\r\n            ifcPSE.PropertyName = \"HasFan\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasFanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.NominalInletAirPressure\", \"NominalInletAirPressure\");\r\n            ifcPSE.PropertyName = \"NominalInletAirPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalInletAirPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.NominalDamperDiameter\", \"NominalDamperDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDamperDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDamperDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.HousingThickness\", \"HousingThickness\");\r\n            ifcPSE.PropertyName = \"HousingThickness\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HousingThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalBoxTypeCommon.ReturnAirFractionRange\", \"ReturnAirFractionRange\");\r\n            ifcPSE.PropertyName = \"ReturnAirFractionRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReturnAirFractionRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAirTerminalBoxTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AirTerminalOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAirTerminalOccurrence = new PropertySetDescription();\r\n         propertySetAirTerminalOccurrence.Name = \"Pset_AirTerminalOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalOccurrence\"))\r\n         {\r\n            propertySetAirTerminalOccurrence.EntityTypes.Add(IFCEntityType.IfcAirTerminal);\r\n            propertySetAirTerminalOccurrence.ObjectType = \"IfcAirTerminal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalOccurrence.AirflowType\", \"AirflowType\");\r\n            ifcPSE.PropertyName = \"AirflowType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AirTerminalAirflowType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Airflow Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Type de débit d'air\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"エアフロータイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirflowTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalOccurrence.AirFlowRate\", \"AirFlowRate\");\r\n            ifcPSE.PropertyName = \"AirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Flow Rate\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalOccurrence.Location\", \"Location\");\r\n            ifcPSE.PropertyName = \"Location\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AirTerminalLocation);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Location\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Emplacement\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"位置\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LocationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalOccurrence\"))\r\n         {\r\n            propertySetAirTerminalOccurrence.EntityTypes.Add(IFCEntityType.IfcAirTerminal);\r\n            propertySetAirTerminalOccurrence.ObjectType = \"IfcAirTerminal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalOccurrence.AirFlowType\", \"AirFlowType\");\r\n            ifcPSE.PropertyName = \"AirFlowType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AirTerminalAirFlowType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalOccurrence.AirFlowRate\", \"AirFlowRate\");\r\n            ifcPSE.PropertyName = \"AirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalOccurrence.AirTerminalLocation\", \"AirTerminalLocation\");\r\n            ifcPSE.PropertyName = \"AirTerminalLocation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AirTerminalLocation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirTerminalLocationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAirTerminalOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AirTerminalPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAirTerminalPHistory = new PropertySetDescription();\r\n         propertySetAirTerminalPHistory.Name = \"Pset_AirTerminalPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalPHistory\"))\r\n         {\r\n            propertySetAirTerminalPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.AirFlowRate\", \"AirFlowRate\");\r\n            ifcPSE.PropertyName = \"AirFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.NeckAirVelocity\", \"NeckAirVelocity\");\r\n            ifcPSE.PropertyName = \"NeckAirVelocity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NeckAirVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.SupplyAirTemperatureHeating\", \"SupplyAirTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"SupplyAirTemperatureHeating\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyAirTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.SupplyAirTemperatureCooling\", \"SupplyAirTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"SupplyAirTemperatureCooling\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyAirTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.PressureDrop\", \"PressureDrop\");\r\n            ifcPSE.PropertyName = \"PressureDrop\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.InductionRatio\", \"InductionRatio\");\r\n            ifcPSE.PropertyName = \"InductionRatio\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InductionRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.CenterlineAirVelocity\", \"CenterlineAirVelocity\");\r\n            ifcPSE.PropertyName = \"CenterlineAirVelocity\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.LinearVelocity;\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CenterlineAirVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalPHistory\"))\r\n         {\r\n            propertySetAirTerminalPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.AirFlowRate\", \"AirFlowRate\");\r\n            ifcPSE.PropertyName = \"AirFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.NeckAirVelocity\", \"NeckAirVelocity\");\r\n            ifcPSE.PropertyName = \"NeckAirVelocity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NeckAirVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.SupplyAirTemperatureHeating\", \"SupplyAirTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"SupplyAirTemperatureHeating\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyAirTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.SupplyAirTemperatureCooling\", \"SupplyAirTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"SupplyAirTemperatureCooling\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyAirTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.PressureDrop\", \"PressureDrop\");\r\n            ifcPSE.PropertyName = \"PressureDrop\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.InductionRatio\", \"InductionRatio\");\r\n            ifcPSE.PropertyName = \"InductionRatio\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InductionRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.CenterlineAirVelocity\", \"CenterlineAirVelocity\");\r\n            ifcPSE.PropertyName = \"CenterlineAirVelocity\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.LinearVelocity;\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CenterlineAirVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalPHistory\"))\r\n         {\r\n            propertySetAirTerminalPHistory.EntityTypes.Add(IFCEntityType.IfcAirTerminal);\r\n            propertySetAirTerminalPHistory.ObjectType = \"IfcAirTerminal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.AirFlowRate\", \"AirFlowRate\");\r\n            ifcPSE.PropertyName = \"AirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Flow Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Débit d'air\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"風量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.NeckAirVelocity\", \"NeckAirVelocity\");\r\n            ifcPSE.PropertyName = \"NeckAirVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Neck Air Velocity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Vitesse de l'air au point le plus étroit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ネック風速\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NeckAirVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.SupplyAirTemperatureHeating\", \"SupplyAirTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"SupplyAirTemperatureHeating\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Supply Air Temperature Heating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Température de l'air soufflé en chauffage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"暖房給気温度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyAirTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.SupplyAirTemperatureCooling\", \"SupplyAirTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"SupplyAirTemperatureCooling\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Supply Air Temperature Cooling\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Température de l'air soufflé en refroidissement\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"冷房給気温度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyAirTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.PressureDrop\", \"PressureDrop\");\r\n            ifcPSE.PropertyName = \"PressureDrop\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure Drop\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Chute de pression\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧力降下\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.InductionRatio\", \"InductionRatio\");\r\n            ifcPSE.PropertyName = \"InductionRatio\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Induction Ratio\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Taux d'induction\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"誘引率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InductionRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.CenterlineAirVelocity\", \"CenterlineAirVelocity\");\r\n            ifcPSE.PropertyName = \"CenterlineAirVelocity\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.LinearVelocity;\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Centerline Air Velocity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Vitesse de l'air en axe central de jet\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"中心空気速度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CenterlineAirVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalPHistory\"))\r\n         {\r\n            propertySetAirTerminalPHistory.EntityTypes.Add(IFCEntityType.IfcAirTerminal);\r\n            propertySetAirTerminalPHistory.ObjectType = \"IfcAirTerminal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.AirFlowRateHistory\", \"AirFlowRateHistory\");\r\n            ifcPSE.PropertyName = \"AirFlowRateHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.NeckAirVelocity\", \"NeckAirVelocity\");\r\n            ifcPSE.PropertyName = \"NeckAirVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NeckAirVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.SupplyAirTemperatureHeating\", \"SupplyAirTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"SupplyAirTemperatureHeating\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyAirTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.SupplyAirTemperatureCooling\", \"SupplyAirTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"SupplyAirTemperatureCooling\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyAirTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.PressureDrop\", \"PressureDrop\");\r\n            ifcPSE.PropertyName = \"PressureDrop\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.InductionRatio\", \"InductionRatio\");\r\n            ifcPSE.PropertyName = \"InductionRatio\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InductionRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalPHistory.CenterlineAirVelocity\", \"CenterlineAirVelocity\");\r\n            ifcPSE.PropertyName = \"CenterlineAirVelocity\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.LinearVelocity;\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CenterlineAirVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAirTerminalPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AirTerminalTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAirTerminalTypeCommon = new PropertySetDescription();\r\n         propertySetAirTerminalTypeCommon.Name = \"Pset_AirTerminalTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalTypeCommon\"))\r\n         {\r\n            propertySetAirTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcAirTerminalType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.Shape\", \"Shape\");\r\n            ifcPSE.PropertyName = \"Shape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirTerminalShape);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.FlowPattern\", \"FlowPattern\");\r\n            ifcPSE.PropertyName = \"FlowPattern\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirTerminalFlowPattern);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowPatternCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.AirFlowrateRange\", \"AirFlowrateRange\");\r\n            ifcPSE.PropertyName = \"AirFlowrateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowrateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.DischargeDirection\", \"DischargeDirection\");\r\n            ifcPSE.PropertyName = \"DischargeDirection\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirTerminalDischargeDirection);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeDirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.ThrowLength\", \"ThrowLength\");\r\n            ifcPSE.PropertyName = \"ThrowLength\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThrowLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.AirDiffusionPerformanceIndex\", \"AirDiffusionPerformanceIndex\");\r\n            ifcPSE.PropertyName = \"AirDiffusionPerformanceIndex\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirDiffusionPerformanceIndexCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.FinishType\", \"FinishType\");\r\n            ifcPSE.PropertyName = \"FinishType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirTerminalFinishType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.FinishColor\", \"FinishColor\");\r\n            ifcPSE.PropertyName = \"FinishColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.MountingType\", \"MountingType\");\r\n            ifcPSE.PropertyName = \"MountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirTerminalMountingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.CoreType\", \"CoreType\");\r\n            ifcPSE.PropertyName = \"CoreType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirTerminalCoreType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.CoreSetHorizontal\", \"CoreSetHorizontal\");\r\n            ifcPSE.PropertyName = \"CoreSetHorizontal\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreSetHorizontalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.CoreSetVertical\", \"CoreSetVertical\");\r\n            ifcPSE.PropertyName = \"CoreSetVertical\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreSetVerticalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.HasIntegralControl\", \"HasIntegralControl\");\r\n            ifcPSE.PropertyName = \"HasIntegralControl\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasIntegralControlCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.FlowControlType\", \"FlowControlType\");\r\n            ifcPSE.PropertyName = \"FlowControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirTerminalFlowControlType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.HasSoundAttenuator\", \"HasSoundAttenuator\");\r\n            ifcPSE.PropertyName = \"HasSoundAttenuator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasSoundAttenuatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.HasThermalInsulation\", \"HasThermalInsulation\");\r\n            ifcPSE.PropertyName = \"HasThermalInsulation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasThermalInsulationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.NeckArea\", \"NeckArea\");\r\n            ifcPSE.PropertyName = \"NeckArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NeckAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.EffectiveArea\", \"EffectiveArea\");\r\n            ifcPSE.PropertyName = \"EffectiveArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectiveAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.AirFlowrateVersusFlowControlElement\", \"AirFlowrateVersusFlowControlElement\");\r\n            ifcPSE.PropertyName = \"AirFlowrateVersusFlowControlElement\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowrateVersusFlowControlElementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalTypeCommon\"))\r\n         {\r\n            propertySetAirTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcAirTerminalType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.Shape\", \"Shape\");\r\n            ifcPSE.PropertyName = \"Shape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirTerminalShape);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.FlowPattern\", \"FlowPattern\");\r\n            ifcPSE.PropertyName = \"FlowPattern\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirTerminalFlowPattern);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowPatternCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.AirFlowrateRange\", \"AirFlowrateRange\");\r\n            ifcPSE.PropertyName = \"AirFlowrateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowrateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.DischargeDirection\", \"DischargeDirection\");\r\n            ifcPSE.PropertyName = \"DischargeDirection\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirTerminalDischargeDirection);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeDirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.ThrowLength\", \"ThrowLength\");\r\n            ifcPSE.PropertyName = \"ThrowLength\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThrowLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.AirDiffusionPerformanceIndex\", \"AirDiffusionPerformanceIndex\");\r\n            ifcPSE.PropertyName = \"AirDiffusionPerformanceIndex\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirDiffusionPerformanceIndexCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.FinishType\", \"FinishType\");\r\n            ifcPSE.PropertyName = \"FinishType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirTerminalFinishType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.FinishColor\", \"FinishColor\");\r\n            ifcPSE.PropertyName = \"FinishColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.MountingType\", \"MountingType\");\r\n            ifcPSE.PropertyName = \"MountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirTerminalMountingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.CoreType\", \"CoreType\");\r\n            ifcPSE.PropertyName = \"CoreType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirTerminalCoreType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.CoreSetHorizontal\", \"CoreSetHorizontal\");\r\n            ifcPSE.PropertyName = \"CoreSetHorizontal\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreSetHorizontalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.CoreSetVertical\", \"CoreSetVertical\");\r\n            ifcPSE.PropertyName = \"CoreSetVertical\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreSetVerticalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.HasIntegralControl\", \"HasIntegralControl\");\r\n            ifcPSE.PropertyName = \"HasIntegralControl\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasIntegralControlCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.FlowControlType\", \"FlowControlType\");\r\n            ifcPSE.PropertyName = \"FlowControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirTerminalFlowControlType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.HasSoundAttenuator\", \"HasSoundAttenuator\");\r\n            ifcPSE.PropertyName = \"HasSoundAttenuator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasSoundAttenuatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.HasThermalInsulation\", \"HasThermalInsulation\");\r\n            ifcPSE.PropertyName = \"HasThermalInsulation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasThermalInsulationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.NeckArea\", \"NeckArea\");\r\n            ifcPSE.PropertyName = \"NeckArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NeckAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.EffectiveArea\", \"EffectiveArea\");\r\n            ifcPSE.PropertyName = \"EffectiveArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectiveAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.AirFlowrateVersusFlowControlElement\", \"AirFlowrateVersusFlowControlElement\");\r\n            ifcPSE.PropertyName = \"AirFlowrateVersusFlowControlElement\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowrateVersusFlowControlElementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalTypeCommon\"))\r\n         {\r\n            propertySetAirTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcAirTerminal);\r\n            propertySetAirTerminalTypeCommon.ObjectType = \"IfcAirTerminal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Référence\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Etat\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.Shape\", \"Shape\");\r\n            ifcPSE.PropertyName = \"Shape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AirTerminalShape);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shape\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Forme\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"形状\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.FaceType\", \"FaceType\");\r\n            ifcPSE.PropertyName = \"FaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AirTerminalFaceType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Face Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TypeCôté\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"表面タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.SlotWidth\", \"SlotWidth\");\r\n            ifcPSE.PropertyName = \"SlotWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Slot Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EpaisseurFente\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"スロット巾\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlotWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.SlotLength\", \"SlotLength\");\r\n            ifcPSE.PropertyName = \"SlotLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Slot Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ElongueurFente\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"スロット長\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlotLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.NumberOfSlots\", \"NumberOfSlots\");\r\n            ifcPSE.PropertyName = \"NumberOfSlots\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Slots\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"NombreDeFentes\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"スロット数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSlotsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.FlowPattern\", \"FlowPattern\");\r\n            ifcPSE.PropertyName = \"FlowPattern\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AirTerminalFlowPattern);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flow Pattern\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"FormeFlux\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流れ種類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowPatternCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.AirFlowrateRange\", \"AirFlowrateRange\");\r\n            ifcPSE.PropertyName = \"AirFlowrateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Flowrate Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PlageDébitVentilation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流量範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowrateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PlageTemperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"温度範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.DischargeDirection\", \"DischargeDirection\");\r\n            ifcPSE.PropertyName = \"DischargeDirection\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AirTerminalDischargeDirection);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Discharge Direction\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DirectionEmission\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"吐き出し方向\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeDirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.ThrowLength\", \"ThrowLength\");\r\n            ifcPSE.PropertyName = \"ThrowLength\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Throw Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Longueur de jet\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"到達距離\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThrowLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.AirDiffusionPerformanceIndex\", \"AirDiffusionPerformanceIndex\");\r\n            ifcPSE.PropertyName = \"AirDiffusionPerformanceIndex\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Diffusion Performance Index\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Indice de performance de diffusion de l'air\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"空気拡散性能指標\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirDiffusionPerformanceIndexCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.FinishType\", \"FinishType\");\r\n            ifcPSE.PropertyName = \"FinishType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AirTerminalFinishType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Finish Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TypeFinition\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"仕上げ形式\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.FinishColor\", \"FinishColor\");\r\n            ifcPSE.PropertyName = \"FinishColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Finish Color\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CouleurFinition\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"仕上げ色\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.MountingType\", \"MountingType\");\r\n            ifcPSE.PropertyName = \"MountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AirTerminalMountingType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mounting Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ModeFixation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"取り付け形式\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.CoreType\", \"CoreType\");\r\n            ifcPSE.PropertyName = \"CoreType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AirTerminalCoreType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Core Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TypePartieCentrale\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"コア形式\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.CoreSetHorizontal\", \"CoreSetHorizontal\");\r\n            ifcPSE.PropertyName = \"CoreSetHorizontal\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Core Set Horizontal\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PositionHorizontaleCentre\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水平羽根角度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreSetHorizontalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.CoreSetVertical\", \"CoreSetVertical\");\r\n            ifcPSE.PropertyName = \"CoreSetVertical\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Core Set Vertical\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PositionVerticalCentre\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"垂直羽根角度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreSetVerticalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.HasIntegralControl\", \"HasIntegralControl\");\r\n            ifcPSE.PropertyName = \"HasIntegralControl\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Integral Control\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PossèdeContrôleTotal\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"自己制御有無\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasIntegralControlCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.FlowControlType\", \"FlowControlType\");\r\n            ifcPSE.PropertyName = \"FlowControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AirTerminalFlowControlType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flow Control Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"NatureCommandeFlux\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流量制御形式\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.HasSoundAttenuator\", \"HasSoundAttenuator\");\r\n            ifcPSE.PropertyName = \"HasSoundAttenuator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Sound Attenuator\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PossèdeCorrectionAcoustique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"消音有無\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasSoundAttenuatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.HasThermalInsulation\", \"HasThermalInsulation\");\r\n            ifcPSE.PropertyName = \"HasThermalInsulation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Thermal Insulation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PossèdeIsolationThermique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"断熱有無\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasThermalInsulationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.NeckArea\", \"NeckArea\");\r\n            ifcPSE.PropertyName = \"NeckArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Neck Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ZoneReduction\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ネック面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NeckAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.EffectiveArea\", \"EffectiveArea\");\r\n            ifcPSE.PropertyName = \"EffectiveArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Effective Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ZoneEfficace\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"有効面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectiveAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.AirFlowrateVersusFlowControlElement\", \"AirFlowrateVersusFlowControlElement\");\r\n            ifcPSE.PropertyName = \"AirFlowrateVersusFlowControlElement\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Flowrate Versus Flow Control Element\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DébitAirContreElementControleFlux\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流量制御特性\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowrateVersusFlowControlElementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalTypeCommon\"))\r\n         {\r\n            propertySetAirTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcAirTerminal);\r\n            propertySetAirTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcAirTerminalType);\r\n            propertySetAirTerminalTypeCommon.ObjectType = \"IfcAirTerminal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.AirTerminalShape\", \"AirTerminalShape\");\r\n            ifcPSE.PropertyName = \"AirTerminalShape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AirTerminalShape);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirTerminalShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.FaceType\", \"FaceType\");\r\n            ifcPSE.PropertyName = \"FaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AirTerminalFaceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.SlotWidth\", \"SlotWidth\");\r\n            ifcPSE.PropertyName = \"SlotWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlotWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.SlotLength\", \"SlotLength\");\r\n            ifcPSE.PropertyName = \"SlotLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlotLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.NumberOfSlots\", \"NumberOfSlots\");\r\n            ifcPSE.PropertyName = \"NumberOfSlots\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSlotsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.FlowPattern\", \"FlowPattern\");\r\n            ifcPSE.PropertyName = \"FlowPattern\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AirTerminalFlowPattern);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowPatternCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.AirFlowRateRange\", \"AirFlowRateRange\");\r\n            ifcPSE.PropertyName = \"AirFlowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.DischargeDirection\", \"DischargeDirection\");\r\n            ifcPSE.PropertyName = \"DischargeDirection\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AirTerminalDischargeDirection);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeDirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.ThrowLength\", \"ThrowLength\");\r\n            ifcPSE.PropertyName = \"ThrowLength\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThrowLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.AirDiffusionPerformanceIndex\", \"AirDiffusionPerformanceIndex\");\r\n            ifcPSE.PropertyName = \"AirDiffusionPerformanceIndex\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirDiffusionPerformanceIndexCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.FinishType\", \"FinishType\");\r\n            ifcPSE.PropertyName = \"FinishType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AirTerminalFinishType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.FinishColour\", \"FinishColour\");\r\n            ifcPSE.PropertyName = \"FinishColour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.AirTerminalMountingType\", \"AirTerminalMountingType\");\r\n            ifcPSE.PropertyName = \"AirTerminalMountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AirTerminalMountingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirTerminalMountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.CoreType\", \"CoreType\");\r\n            ifcPSE.PropertyName = \"CoreType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AirTerminalCoreType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.CoreSetHorizontal\", \"CoreSetHorizontal\");\r\n            ifcPSE.PropertyName = \"CoreSetHorizontal\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreSetHorizontalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.CoreSetVertical\", \"CoreSetVertical\");\r\n            ifcPSE.PropertyName = \"CoreSetVertical\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreSetVerticalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.HasIntegralControl\", \"HasIntegralControl\");\r\n            ifcPSE.PropertyName = \"HasIntegralControl\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasIntegralControlCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.FlowControlType\", \"FlowControlType\");\r\n            ifcPSE.PropertyName = \"FlowControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AirTerminalFlowControlType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.HasSoundAttenuator\", \"HasSoundAttenuator\");\r\n            ifcPSE.PropertyName = \"HasSoundAttenuator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasSoundAttenuatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.HasThermalInsulation\", \"HasThermalInsulation\");\r\n            ifcPSE.PropertyName = \"HasThermalInsulation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasThermalInsulationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.NeckArea\", \"NeckArea\");\r\n            ifcPSE.PropertyName = \"NeckArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NeckAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.EffectiveArea\", \"EffectiveArea\");\r\n            ifcPSE.PropertyName = \"EffectiveArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectiveAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeCommon.AirFlowrateVersusFlowControlElement\", \"AirFlowrateVersusFlowControlElement\");\r\n            ifcPSE.PropertyName = \"AirFlowrateVersusFlowControlElement\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowrateVersusFlowControlElementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAirTerminalTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AirTerminalTypeRectangular(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAirTerminalTypeRectangular = new PropertySetDescription();\r\n         propertySetAirTerminalTypeRectangular.Name = \"Pset_AirTerminalTypeRectangular\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalTypeRectangular\"))\r\n         {\r\n            propertySetAirTerminalTypeRectangular.EntityTypes.Add(IFCEntityType.IfcAirTerminalType);\r\n            propertySetAirTerminalTypeRectangular.ObjectType = \"Pset_AirTerminalTypeCommon\";\r\n            propertySetAirTerminalTypeRectangular.PredefinedType = \"RECTANGULAR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeRectangular.FaceType\", \"FaceType\");\r\n            ifcPSE.PropertyName = \"FaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirTerminalFaceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeRectangular.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalTypeRectangular\"))\r\n         {\r\n            propertySetAirTerminalTypeRectangular.EntityTypes.Add(IFCEntityType.IfcAirTerminalType);\r\n            propertySetAirTerminalTypeRectangular.ObjectType = \"PSET\";\r\n            propertySetAirTerminalTypeRectangular.PredefinedType = \"RECTANGULAR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeRectangular.FaceType\", \"FaceType\");\r\n            ifcPSE.PropertyName = \"FaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirTerminalFaceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeRectangular.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAirTerminalTypeRectangular);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AirTerminalTypeRound(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAirTerminalTypeRound = new PropertySetDescription();\r\n         propertySetAirTerminalTypeRound.Name = \"Pset_AirTerminalTypeRound\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalTypeRound\"))\r\n         {\r\n            propertySetAirTerminalTypeRound.EntityTypes.Add(IFCEntityType.IfcAirTerminalType);\r\n            propertySetAirTerminalTypeRound.ObjectType = \"Pset_AirTerminalTypeCommon\";\r\n            propertySetAirTerminalTypeRound.PredefinedType = \"ROUND\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeRound.FaceType\", \"FaceType\");\r\n            ifcPSE.PropertyName = \"FaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirTerminalFaceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeRound.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalTypeRound\"))\r\n         {\r\n            propertySetAirTerminalTypeRound.EntityTypes.Add(IFCEntityType.IfcAirTerminalType);\r\n            propertySetAirTerminalTypeRound.ObjectType = \"PSET\";\r\n            propertySetAirTerminalTypeRound.PredefinedType = \"ROUND\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeRound.FaceType\", \"FaceType\");\r\n            ifcPSE.PropertyName = \"FaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirTerminalFaceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeRound.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAirTerminalTypeRound);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AirTerminalTypeSlot(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAirTerminalTypeSlot = new PropertySetDescription();\r\n         propertySetAirTerminalTypeSlot.Name = \"Pset_AirTerminalTypeSlot\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalTypeSlot\"))\r\n         {\r\n            propertySetAirTerminalTypeSlot.EntityTypes.Add(IFCEntityType.IfcAirTerminalType);\r\n            propertySetAirTerminalTypeSlot.ObjectType = \"Pset_AirTerminalTypeCommon\";\r\n            propertySetAirTerminalTypeSlot.PredefinedType = \"SLOT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeSlot.SlotWidth\", \"SlotWidth\");\r\n            ifcPSE.PropertyName = \"SlotWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlotWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeSlot.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeSlot.SlotLength\", \"SlotLength\");\r\n            ifcPSE.PropertyName = \"SlotLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlotLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeSlot.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeSlot.NumberOfSlots\", \"NumberOfSlots\");\r\n            ifcPSE.PropertyName = \"NumberOfSlots\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSlotsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeSlot.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalTypeSlot\"))\r\n         {\r\n            propertySetAirTerminalTypeSlot.EntityTypes.Add(IFCEntityType.IfcAirTerminalType);\r\n            propertySetAirTerminalTypeSlot.ObjectType = \"PSET\";\r\n            propertySetAirTerminalTypeSlot.PredefinedType = \"SLOT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeSlot.SlotWidth\", \"SlotWidth\");\r\n            ifcPSE.PropertyName = \"SlotWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlotWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeSlot.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeSlot.SlotLength\", \"SlotLength\");\r\n            ifcPSE.PropertyName = \"SlotLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlotLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeSlot.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeSlot.NumberOfSlots\", \"NumberOfSlots\");\r\n            ifcPSE.PropertyName = \"NumberOfSlots\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSlotsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeSlot.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAirTerminalTypeSlot);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AirTerminalTypeSquare(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAirTerminalTypeSquare = new PropertySetDescription();\r\n         propertySetAirTerminalTypeSquare.Name = \"Pset_AirTerminalTypeSquare\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalTypeSquare\"))\r\n         {\r\n            propertySetAirTerminalTypeSquare.EntityTypes.Add(IFCEntityType.IfcAirTerminalType);\r\n            propertySetAirTerminalTypeSquare.ObjectType = \"Pset_AirTerminalTypeCommon\";\r\n            propertySetAirTerminalTypeSquare.PredefinedType = \"SQUARE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeSquare.FaceType\", \"FaceType\");\r\n            ifcPSE.PropertyName = \"FaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirTerminalFaceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeSquare.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirTerminalTypeSquare\"))\r\n         {\r\n            propertySetAirTerminalTypeSquare.EntityTypes.Add(IFCEntityType.IfcAirTerminalType);\r\n            propertySetAirTerminalTypeSquare.ObjectType = \"PSET\";\r\n            propertySetAirTerminalTypeSquare.PredefinedType = \"SQUARE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirTerminalTypeSquare.FaceType\", \"FaceType\");\r\n            ifcPSE.PropertyName = \"FaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirTerminalFaceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirTerminalTypeSquare.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAirTerminalTypeSquare);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AirToAirHeatRecoveryPHist(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAirToAirHeatRecoveryPHist = new PropertySetDescription();\r\n         propertySetAirToAirHeatRecoveryPHist.Name = \"Pset_AirToAirHeatRecoveryPHist\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirToAirHeatRecoveryPHist\"))\r\n         {\r\n            propertySetAirToAirHeatRecoveryPHist.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.SensibleEffectiveness\", \"SensibleEffectiveness\");\r\n            ifcPSE.PropertyName = \"SensibleEffectiveness\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.TotalEffectiveness\", \"TotalEffectiveness\");\r\n            ifcPSE.PropertyName = \"TotalEffectiveness\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.TemperatureEffectiveness\", \"TemperatureEffectiveness\");\r\n            ifcPSE.PropertyName = \"TemperatureEffectiveness\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.DefrostTemperatureEffectiveness\", \"DefrostTemperatureEffectiveness\");\r\n            ifcPSE.PropertyName = \"DefrostTemperatureEffectiveness\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DefrostTemperatureEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.HumidityEffectiveness\", \"HumidityEffectiveness\");\r\n            ifcPSE.PropertyName = \"HumidityEffectiveness\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HumidityEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.SensibleHeatTransferRate\", \"SensibleHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"SensibleHeatTransferRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.LatentHeatTransferRate\", \"LatentHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"LatentHeatTransferRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LatentHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.TotalHeatTransferRate\", \"TotalHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"TotalHeatTransferRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.SensibleEffectivenessTable\", \"SensibleEffectivenessTable\");\r\n            ifcPSE.PropertyName = \"SensibleEffectivenessTable\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleEffectivenessTableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.TotalEffectivenessTable\", \"TotalEffectivenessTable\");\r\n            ifcPSE.PropertyName = \"TotalEffectivenessTable\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalEffectivenessTableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.AirPressureDropCurves\", \"AirPressureDropCurves\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurves\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirToAirHeatRecoveryPHist\"))\r\n         {\r\n            propertySetAirToAirHeatRecoveryPHist.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.SensibleEffectiveness\", \"SensibleEffectiveness\");\r\n            ifcPSE.PropertyName = \"SensibleEffectiveness\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.TotalEffectiveness\", \"TotalEffectiveness\");\r\n            ifcPSE.PropertyName = \"TotalEffectiveness\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.TemperatureEffectiveness\", \"TemperatureEffectiveness\");\r\n            ifcPSE.PropertyName = \"TemperatureEffectiveness\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.DefrostTemperatureEffectiveness\", \"DefrostTemperatureEffectiveness\");\r\n            ifcPSE.PropertyName = \"DefrostTemperatureEffectiveness\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DefrostTemperatureEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.HumidityEffectiveness\", \"HumidityEffectiveness\");\r\n            ifcPSE.PropertyName = \"HumidityEffectiveness\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HumidityEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.SensibleHeatTransferRate\", \"SensibleHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"SensibleHeatTransferRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.LatentHeatTransferRate\", \"LatentHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"LatentHeatTransferRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LatentHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.TotalHeatTransferRate\", \"TotalHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"TotalHeatTransferRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.SensibleEffectivenessTable\", \"SensibleEffectivenessTable\");\r\n            ifcPSE.PropertyName = \"SensibleEffectivenessTable\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleEffectivenessTableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.TotalEffectivenessTable\", \"TotalEffectivenessTable\");\r\n            ifcPSE.PropertyName = \"TotalEffectivenessTable\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalEffectivenessTableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHist.AirPressureDropCurves\", \"AirPressureDropCurves\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurves\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHist.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAirToAirHeatRecoveryPHist);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AirToAirHeatRecoveryPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAirToAirHeatRecoveryPHistory = new PropertySetDescription();\r\n         propertySetAirToAirHeatRecoveryPHistory.Name = \"Pset_AirToAirHeatRecoveryPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirToAirHeatRecoveryPHistory\"))\r\n         {\r\n            propertySetAirToAirHeatRecoveryPHistory.EntityTypes.Add(IFCEntityType.IfcAirToAirHeatRecovery);\r\n            propertySetAirToAirHeatRecoveryPHistory.ObjectType = \"IfcAirToAirHeatRecovery\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.SensibleEffectiveness\", \"SensibleEffectiveness\");\r\n            ifcPSE.PropertyName = \"SensibleEffectiveness\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sensible Effectiveness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EfficacitéSensible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"顕熱効率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.TotalEffectiveness\", \"TotalEffectiveness\");\r\n            ifcPSE.PropertyName = \"TotalEffectiveness\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Effectiveness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Rendement thermique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"全熱効率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.TemperatureEffectiveness\", \"TemperatureEffectiveness\");\r\n            ifcPSE.PropertyName = \"TemperatureEffectiveness\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature Effectiveness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EfficacitéTempérature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"温度効率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.DefrostTemperatureEffectiveness\", \"DefrostTemperatureEffectiveness\");\r\n            ifcPSE.PropertyName = \"DefrostTemperatureEffectiveness\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Defrost Temperature Effectiveness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EfficacitéTemperatureDégel\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"デフロスト温度効率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DefrostTemperatureEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.HumidityEffectiveness\", \"HumidityEffectiveness\");\r\n            ifcPSE.PropertyName = \"HumidityEffectiveness\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Humidity Effectiveness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EfficacitéLatente\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"湿度効率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HumidityEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.SensibleHeatTransferRate\", \"SensibleHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"SensibleHeatTransferRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sensible Heat Transfer Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PuissanceThermiqueSensible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"顕熱交換量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.LatentHeatTransferRate\", \"LatentHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"LatentHeatTransferRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Latent Heat Transfer Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PuissanceThermiqueLatente\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"潜熱交換量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LatentHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.TotalHeatTransferRate\", \"TotalHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"TotalHeatTransferRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Heat Transfer Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PuissanceThermiqueTotale\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"全熱交換量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.SensibleEffectivenessTable\", \"SensibleEffectivenessTable\");\r\n            ifcPSE.PropertyName = \"SensibleEffectivenessTable\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sensible Effectiveness Table\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DiagrammeEfficacitéSensible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"顕熱効率テーブル\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleEffectivenessTableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.TotalEffectivenessTable\", \"TotalEffectivenessTable\");\r\n            ifcPSE.PropertyName = \"TotalEffectivenessTable\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Effectiveness Table\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DiagrammeEfficacitéTotale\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"全熱効率テーブル\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalEffectivenessTableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.AirPressureDropCurves\", \"AirPressureDropCurves\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurves\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Pressure Drop Curves\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CourbesPerteChargeAir\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"空気圧力降下曲線\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirToAirHeatRecoveryPHistory\"))\r\n         {\r\n            propertySetAirToAirHeatRecoveryPHistory.EntityTypes.Add(IFCEntityType.IfcAirToAirHeatRecovery);\r\n            propertySetAirToAirHeatRecoveryPHistory.ObjectType = \"IfcAirToAirHeatRecovery\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.SensibleEffectiveness\", \"SensibleEffectiveness\");\r\n            ifcPSE.PropertyName = \"SensibleEffectiveness\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.TotalEffectiveness\", \"TotalEffectiveness\");\r\n            ifcPSE.PropertyName = \"TotalEffectiveness\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.TemperatureEffectiveness\", \"TemperatureEffectiveness\");\r\n            ifcPSE.PropertyName = \"TemperatureEffectiveness\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.DefrostTemperatureEffectiveness\", \"DefrostTemperatureEffectiveness\");\r\n            ifcPSE.PropertyName = \"DefrostTemperatureEffectiveness\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DefrostTemperatureEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.HumidityEffectiveness\", \"HumidityEffectiveness\");\r\n            ifcPSE.PropertyName = \"HumidityEffectiveness\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HumidityEffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.SensibleHeatTransferRate\", \"SensibleHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"SensibleHeatTransferRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.LatentHeatTransferRate\", \"LatentHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"LatentHeatTransferRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LatentHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.TotalHeatTransferRate\", \"TotalHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"TotalHeatTransferRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.SensibleEffectivenessTable\", \"SensibleEffectivenessTable\");\r\n            ifcPSE.PropertyName = \"SensibleEffectivenessTable\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleEffectivenessTableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.TotalEffectivenessTable\", \"TotalEffectivenessTable\");\r\n            ifcPSE.PropertyName = \"TotalEffectivenessTable\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalEffectivenessTableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryPHistory.AirPressureDropCurves\", \"AirPressureDropCurves\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurves\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAirToAirHeatRecoveryPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AirToAirHeatRecoveryTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAirToAirHeatRecoveryTypeCommon = new PropertySetDescription();\r\n         propertySetAirToAirHeatRecoveryTypeCommon.Name = \"Pset_AirToAirHeatRecoveryTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirToAirHeatRecoveryTypeCommon\"))\r\n         {\r\n            propertySetAirToAirHeatRecoveryTypeCommon.EntityTypes.Add(IFCEntityType.IfcAirToAirHeatRecoveryType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.HeatTransferTypeEnum\", \"HeatTransferTypeEnum\");\r\n            ifcPSE.PropertyName = \"HeatTransferTypeEnum\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirToAirHeatTransferHeatTransferType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatTransferTypeEnumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.MediaMaterial\", \"MediaMaterial\");\r\n            ifcPSE.PropertyName = \"MediaMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MediaMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.HasDefrost\", \"HasDefrost\");\r\n            ifcPSE.PropertyName = \"HasDefrost\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasDefrostCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.OperationalTemperatureRange\", \"OperationalTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationalTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.PrimaryAirflowRateRange\", \"PrimaryAirflowRateRange\");\r\n            ifcPSE.PropertyName = \"PrimaryAirflowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryAirflowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.SecondaryAirflowRateRange\", \"SecondaryAirflowRateRange\");\r\n            ifcPSE.PropertyName = \"SecondaryAirflowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryAirflowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirToAirHeatRecoveryTypeCommon\"))\r\n         {\r\n            propertySetAirToAirHeatRecoveryTypeCommon.EntityTypes.Add(IFCEntityType.IfcAirToAirHeatRecoveryType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.HeatTransferTypeEnum\", \"HeatTransferTypeEnum\");\r\n            ifcPSE.PropertyName = \"HeatTransferTypeEnum\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirToAirHeatTransferHeatTransferType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatTransferTypeEnumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.MediaMaterial\", \"MediaMaterial\");\r\n            ifcPSE.PropertyName = \"MediaMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MediaMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.HasDefrost\", \"HasDefrost\");\r\n            ifcPSE.PropertyName = \"HasDefrost\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasDefrostCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.OperationalTemperatureRange\", \"OperationalTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationalTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.PrimaryAirflowRateRange\", \"PrimaryAirflowRateRange\");\r\n            ifcPSE.PropertyName = \"PrimaryAirflowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryAirflowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.SecondaryAirflowRateRange\", \"SecondaryAirflowRateRange\");\r\n            ifcPSE.PropertyName = \"SecondaryAirflowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryAirflowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirToAirHeatRecoveryTypeCommon\"))\r\n         {\r\n            propertySetAirToAirHeatRecoveryTypeCommon.EntityTypes.Add(IFCEntityType.IfcAirToAirHeatRecovery);\r\n            propertySetAirToAirHeatRecoveryTypeCommon.ObjectType = \"IfcAirToAirHeatRecovery\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Référence\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Etat\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.HeatTransferType\", \"HeatTransferType\");\r\n            ifcPSE.PropertyName = \"HeatTransferType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_HeatTransferType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heat Transfer Type Enum\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TypeEchangeChaleurEnum\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱交換種類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatTransferTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.HasDefrost\", \"HasDefrost\");\r\n            ifcPSE.PropertyName = \"HasDefrost\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Defrost\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PossèdeDégel\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"デフロスト有無\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasDefrostCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.OperationalTemperatureRange\", \"OperationalTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationalTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Operational Temperature Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PlageTempératureOpérationelle\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"動作温度範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.PrimaryAirflowRateRange\", \"PrimaryAirflowRateRange\");\r\n            ifcPSE.PropertyName = \"PrimaryAirflowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Primary Airflow Rate Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PlageDébitAirPrimaire\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"一次側風量範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryAirflowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.SecondaryAirflowRateRange\", \"SecondaryAirflowRateRange\");\r\n            ifcPSE.PropertyName = \"SecondaryAirflowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Secondary Airflow Rate Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PlageDébitAirSecondaire\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"二次側風量範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryAirflowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AirToAirHeatRecoveryTypeCommon\"))\r\n         {\r\n            propertySetAirToAirHeatRecoveryTypeCommon.EntityTypes.Add(IFCEntityType.IfcAirToAirHeatRecovery);\r\n            propertySetAirToAirHeatRecoveryTypeCommon.EntityTypes.Add(IFCEntityType.IfcAirToAirHeatRecoveryType);\r\n            propertySetAirToAirHeatRecoveryTypeCommon.ObjectType = \"IfcAirToAirHeatRecovery\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.HeatTransferTypeEnum\", \"HeatTransferTypeEnum\");\r\n            ifcPSE.PropertyName = \"HeatTransferTypeEnum\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AirToAirHeatTransferHeatTransferType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatTransferTypeEnumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.HasDefrost\", \"HasDefrost\");\r\n            ifcPSE.PropertyName = \"HasDefrost\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasDefrostCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.OperationalTemperatureRange\", \"OperationalTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationalTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.PrimaryAirFlowRateRange\", \"PrimaryAirFlowRateRange\");\r\n            ifcPSE.PropertyName = \"PrimaryAirFlowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryAirFlowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AirToAirHeatRecoveryTypeCommon.SecondaryAirFlowRateRange\", \"SecondaryAirFlowRateRange\");\r\n            ifcPSE.PropertyName = \"SecondaryAirFlowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryAirFlowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAirToAirHeatRecoveryTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAirToAirHeatRecoveryTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AlarmPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAlarmPHistory = new PropertySetDescription();\r\n         propertySetAlarmPHistory.Name = \"Pset_AlarmPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AlarmPHistory\"))\r\n         {\r\n            propertySetAlarmPHistory.EntityTypes.Add(IFCEntityType.IfcAlarm);\r\n            propertySetAlarmPHistory.ObjectType = \"IfcAlarm\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlarmPHistory.Enabled\", \"Enabled\");\r\n            ifcPSE.PropertyName = \"Enabled\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Enabled\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnabledCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlarmPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlarmPHistory.Condition\", \"Condition\");\r\n            ifcPSE.PropertyName = \"Condition\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Condition\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConditionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlarmPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlarmPHistory.Severity\", \"Severity\");\r\n            ifcPSE.PropertyName = \"Severity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Severity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeverityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlarmPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlarmPHistory.Acknowledge\", \"Acknowledge\");\r\n            ifcPSE.PropertyName = \"Acknowledge\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Acknowledge\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcknowledgeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlarmPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlarmPHistory.User\", \"User\");\r\n            ifcPSE.PropertyName = \"User\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"User\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UserCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlarmPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AlarmPHistory\"))\r\n         {\r\n            propertySetAlarmPHistory.EntityTypes.Add(IFCEntityType.IfcAlarm);\r\n            propertySetAlarmPHistory.ObjectType = \"IfcAlarm\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlarmPHistory.Enabled\", \"Enabled\");\r\n            ifcPSE.PropertyName = \"Enabled\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnabledCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlarmPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlarmPHistory.ConditionHistory\", \"ConditionHistory\");\r\n            ifcPSE.PropertyName = \"ConditionHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConditionHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlarmPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlarmPHistory.Severity\", \"Severity\");\r\n            ifcPSE.PropertyName = \"Severity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeverityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlarmPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlarmPHistory.Acknowledge\", \"Acknowledge\");\r\n            ifcPSE.PropertyName = \"Acknowledge\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcknowledgeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlarmPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlarmPHistory.UserHistory\", \"UserHistory\");\r\n            ifcPSE.PropertyName = \"UserHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UserHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlarmPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAlarmPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AlarmTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAlarmTypeCommon = new PropertySetDescription();\r\n         propertySetAlarmTypeCommon.Name = \"Pset_AlarmTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AlarmTypeCommon\"))\r\n         {\r\n            propertySetAlarmTypeCommon.EntityTypes.Add(IFCEntityType.IfcAlarm);\r\n            propertySetAlarmTypeCommon.ObjectType = \"IfcAlarm\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlarmTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조 ID\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlarmTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlarmTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlarmTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlarmTypeCommon.Condition\", \"Condition\");\r\n            ifcPSE.PropertyName = \"Condition\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Condition\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"条件\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConditionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlarmTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AlarmTypeCommon\"))\r\n         {\r\n            propertySetAlarmTypeCommon.EntityTypes.Add(IFCEntityType.IfcAlarm);\r\n            propertySetAlarmTypeCommon.EntityTypes.Add(IFCEntityType.IfcAlarmType);\r\n            propertySetAlarmTypeCommon.ObjectType = \"IfcAlarm\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlarmTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlarmTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlarmTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlarmTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlarmTypeCommon.AlarmCondition\", \"AlarmCondition\");\r\n            ifcPSE.PropertyName = \"AlarmCondition\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AlarmConditionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlarmTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAlarmTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AlignmentCantSegmentCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAlignmentCantSegmentCommon = new PropertySetDescription();\r\n         propertySetAlignmentCantSegmentCommon.Name = \"Pset_AlignmentCantSegmentCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AlignmentCantSegmentCommon\"))\r\n         {\r\n            propertySetAlignmentCantSegmentCommon.EntityTypes.Add(IFCEntityType.IfcAlignmentSegment);\r\n            propertySetAlignmentCantSegmentCommon.ObjectType = \"IfcAlignmentSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlignmentCantSegmentCommon.CantDeficiency\", \"CantDeficiency\");\r\n            ifcPSE.PropertyName = \"CantDeficiency\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CantDeficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlignmentCantSegmentCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlignmentCantSegmentCommon.CantEquilibrium\", \"CantEquilibrium\");\r\n            ifcPSE.PropertyName = \"CantEquilibrium\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CantEquilibriumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlignmentCantSegmentCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlignmentCantSegmentCommon.StartSmoothingLength\", \"StartSmoothingLength\");\r\n            ifcPSE.PropertyName = \"StartSmoothingLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartSmoothingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlignmentCantSegmentCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlignmentCantSegmentCommon.EndSmoothingLength\", \"EndSmoothingLength\");\r\n            ifcPSE.PropertyName = \"EndSmoothingLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndSmoothingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlignmentCantSegmentCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAlignmentCantSegmentCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AlignmentVerticalSegmentCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAlignmentVerticalSegmentCommon = new PropertySetDescription();\r\n         propertySetAlignmentVerticalSegmentCommon.Name = \"Pset_AlignmentVerticalSegmentCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AlignmentVerticalSegmentCommon\"))\r\n         {\r\n            propertySetAlignmentVerticalSegmentCommon.EntityTypes.Add(IFCEntityType.IfcAlignmentSegment);\r\n            propertySetAlignmentVerticalSegmentCommon.ObjectType = \"IfcAlignmentSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlignmentVerticalSegmentCommon.StartElevation\", \"StartElevation\");\r\n            ifcPSE.PropertyName = \"StartElevation\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartElevationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlignmentVerticalSegmentCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AlignmentVerticalSegmentCommon.EndElevation\", \"EndElevation\");\r\n            ifcPSE.PropertyName = \"EndElevation\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndElevationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAlignmentVerticalSegmentCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAlignmentVerticalSegmentCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AnalogInput(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAnalogInput = new PropertySetDescription();\r\n         propertySetAnalogInput.Name = \"Pset_AnalogInput\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AnalogInput\"))\r\n         {\r\n            propertySetAnalogInput.EntityTypes.Add(IFCEntityType.IfcDistributionControlElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogInput.HighLimit\", \"HighLimit\");\r\n            ifcPSE.PropertyName = \"HighLimit\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HighLimitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogInput.LowLimit\", \"LowLimit\");\r\n            ifcPSE.PropertyName = \"LowLimit\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowLimitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogInput.Deadband\", \"Deadband\");\r\n            ifcPSE.PropertyName = \"Deadband\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DeadbandCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogInput.HighLimitEnable\", \"HighLimitEnable\");\r\n            ifcPSE.PropertyName = \"HighLimitEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HighLimitEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogInput.LowLimitEnable\", \"LowLimitEnable\");\r\n            ifcPSE.PropertyName = \"LowLimitEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowLimitEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogInput.EventEnable\", \"EventEnable\");\r\n            ifcPSE.PropertyName = \"EventEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BACnetEventEnableType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EventEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogInput.NotifyType\", \"NotifyType\");\r\n            ifcPSE.PropertyName = \"NotifyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BACnetNotifyType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NotifyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogInput.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AnalogInput\"))\r\n         {\r\n            propertySetAnalogInput.EntityTypes.Add(IFCEntityType.IfcDistributionControlElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogInput.HighLimit\", \"HighLimit\");\r\n            ifcPSE.PropertyName = \"HighLimit\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HighLimitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogInput.LowLimit\", \"LowLimit\");\r\n            ifcPSE.PropertyName = \"LowLimit\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowLimitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogInput.Deadband\", \"Deadband\");\r\n            ifcPSE.PropertyName = \"Deadband\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DeadbandCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogInput.HighLimitEnable\", \"HighLimitEnable\");\r\n            ifcPSE.PropertyName = \"HighLimitEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HighLimitEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogInput.LowLimitEnable\", \"LowLimitEnable\");\r\n            ifcPSE.PropertyName = \"LowLimitEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowLimitEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogInput.EventEnable\", \"EventEnable\");\r\n            ifcPSE.PropertyName = \"EventEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BACnetEventEnableType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EventEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogInput.NotifyType\", \"NotifyType\");\r\n            ifcPSE.PropertyName = \"NotifyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BACnetNotifyType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NotifyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogInput.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAnalogInput);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AnalogOutput(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAnalogOutput = new PropertySetDescription();\r\n         propertySetAnalogOutput.Name = \"Pset_AnalogOutput\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AnalogOutput\"))\r\n         {\r\n            propertySetAnalogOutput.EntityTypes.Add(IFCEntityType.IfcDistributionControlElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogOutput.HighLimit\", \"HighLimit\");\r\n            ifcPSE.PropertyName = \"HighLimit\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HighLimitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogOutput.LowLimit\", \"LowLimit\");\r\n            ifcPSE.PropertyName = \"LowLimit\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowLimitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogOutput.Deadband\", \"Deadband\");\r\n            ifcPSE.PropertyName = \"Deadband\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DeadbandCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogOutput.HighLimitEnable\", \"HighLimitEnable\");\r\n            ifcPSE.PropertyName = \"HighLimitEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HighLimitEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogOutput.LowLimitEnable\", \"LowLimitEnable\");\r\n            ifcPSE.PropertyName = \"LowLimitEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowLimitEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogOutput.EventEnable\", \"EventEnable\");\r\n            ifcPSE.PropertyName = \"EventEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BACnetEventEnableType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EventEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogOutput.NotifyType\", \"NotifyType\");\r\n            ifcPSE.PropertyName = \"NotifyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BACnetNotifyType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NotifyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogOutput.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AnalogOutput\"))\r\n         {\r\n            propertySetAnalogOutput.EntityTypes.Add(IFCEntityType.IfcDistributionControlElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogOutput.HighLimit\", \"HighLimit\");\r\n            ifcPSE.PropertyName = \"HighLimit\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HighLimitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogOutput.LowLimit\", \"LowLimit\");\r\n            ifcPSE.PropertyName = \"LowLimit\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowLimitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogOutput.Deadband\", \"Deadband\");\r\n            ifcPSE.PropertyName = \"Deadband\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DeadbandCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogOutput.HighLimitEnable\", \"HighLimitEnable\");\r\n            ifcPSE.PropertyName = \"HighLimitEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HighLimitEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogOutput.LowLimitEnable\", \"LowLimitEnable\");\r\n            ifcPSE.PropertyName = \"LowLimitEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowLimitEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogOutput.EventEnable\", \"EventEnable\");\r\n            ifcPSE.PropertyName = \"EventEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BACnetEventEnableType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EventEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnalogOutput.NotifyType\", \"NotifyType\");\r\n            ifcPSE.PropertyName = \"NotifyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BACnetNotifyType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NotifyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnalogOutput.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAnalogOutput);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AnnotationContourLine(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAnnotationContourLine = new PropertySetDescription();\r\n         propertySetAnnotationContourLine.Name = \"Pset_AnnotationContourLine\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AnnotationContourLine\"))\r\n         {\r\n            propertySetAnnotationContourLine.EntityTypes.Add(IFCEntityType.IfcAnnotation);\r\n            propertySetAnnotationContourLine.ObjectType = \"IfcAnnotation\";\r\n            propertySetAnnotationContourLine.PredefinedType = \"ContourLine\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnnotationContourLine.ContourValue\", \"ContourValue\");\r\n            ifcPSE.PropertyName = \"ContourValue\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Contour Value\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ValeurContour\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"等高線値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"등고선 값\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContourValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnnotationContourLine.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AnnotationContourLine\"))\r\n         {\r\n            propertySetAnnotationContourLine.EntityTypes.Add(IFCEntityType.IfcAnnotation);\r\n            propertySetAnnotationContourLine.ObjectType = \"IfcAnnotation\";\r\n            propertySetAnnotationContourLine.PredefinedType = \"CONTOURLINE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnnotationContourLine.ContourValue\", \"ContourValue\");\r\n            ifcPSE.PropertyName = \"ContourValue\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContourValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnnotationContourLine.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAnnotationContourLine);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AnnotationLineOfSight(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAnnotationLineOfSight = new PropertySetDescription();\r\n         propertySetAnnotationLineOfSight.Name = \"Pset_AnnotationLineOfSight\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AnnotationLineOfSight\"))\r\n         {\r\n            propertySetAnnotationLineOfSight.EntityTypes.Add(IFCEntityType.IfcAnnotation);\r\n            propertySetAnnotationLineOfSight.ObjectType = \"IfcAnnotation\";\r\n            propertySetAnnotationLineOfSight.PredefinedType = \"LineOfSight\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnnotationLineOfSight.SetbackDistance\", \"SetbackDistance\");\r\n            ifcPSE.PropertyName = \"SetbackDistance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Setback Distance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DistanceRecul\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"後退距離\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetbackDistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnnotationLineOfSight.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnnotationLineOfSight.VisibleAngleLeft\", \"VisibleAngleLeft\");\r\n            ifcPSE.PropertyName = \"VisibleAngleLeft\";\r\n            ifcPSE.PropertyType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Visible Angle Left\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"VisibiliteAngleGauche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"左側可視角度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleAngleLeftCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnnotationLineOfSight.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnnotationLineOfSight.VisibleAngleRight\", \"VisibleAngleRight\");\r\n            ifcPSE.PropertyName = \"VisibleAngleRight\";\r\n            ifcPSE.PropertyType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Visible Angle Right\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"VisibiliteAngleDroit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"右側可視角度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleAngleRightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnnotationLineOfSight.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnnotationLineOfSight.RoadVisibleDistanceLeft\", \"RoadVisibleDistanceLeft\");\r\n            ifcPSE.PropertyName = \"RoadVisibleDistanceLeft\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Road Visible Distance Left\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DistanceVisibiliteCoteGauche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"左側道路可視距離\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RoadVisibleDistanceLeftCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnnotationLineOfSight.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnnotationLineOfSight.RoadVisibleDistanceRight\", \"RoadVisibleDistanceRight\");\r\n            ifcPSE.PropertyName = \"RoadVisibleDistanceRight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Road Visible Distance Right\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DistanceVisibiliteCoteDroit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"右側道路可視距離\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RoadVisibleDistanceRightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnnotationLineOfSight.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AnnotationLineOfSight\"))\r\n         {\r\n            propertySetAnnotationLineOfSight.EntityTypes.Add(IFCEntityType.IfcAnnotation);\r\n            propertySetAnnotationLineOfSight.ObjectType = \"IfcAnnotation\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnnotationLineOfSight.SetbackDistance\", \"SetbackDistance\");\r\n            ifcPSE.PropertyName = \"SetbackDistance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetbackDistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnnotationLineOfSight.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnnotationLineOfSight.VisibleAngleLeft\", \"VisibleAngleLeft\");\r\n            ifcPSE.PropertyName = \"VisibleAngleLeft\";\r\n            ifcPSE.PropertyType = PropertyType.PositivePlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleAngleLeftCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnnotationLineOfSight.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnnotationLineOfSight.VisibleAngleRight\", \"VisibleAngleRight\");\r\n            ifcPSE.PropertyName = \"VisibleAngleRight\";\r\n            ifcPSE.PropertyType = PropertyType.PositivePlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleAngleRightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnnotationLineOfSight.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnnotationLineOfSight.RoadVisibleDistanceLeft\", \"RoadVisibleDistanceLeft\");\r\n            ifcPSE.PropertyName = \"RoadVisibleDistanceLeft\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RoadVisibleDistanceLeftCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnnotationLineOfSight.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnnotationLineOfSight.RoadVisibleDistanceRight\", \"RoadVisibleDistanceRight\");\r\n            ifcPSE.PropertyName = \"RoadVisibleDistanceRight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RoadVisibleDistanceRightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnnotationLineOfSight.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAnnotationLineOfSight);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AnnotationSurveyArea(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAnnotationSurveyArea = new PropertySetDescription();\r\n         propertySetAnnotationSurveyArea.Name = \"Pset_AnnotationSurveyArea\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AnnotationSurveyArea\"))\r\n         {\r\n            propertySetAnnotationSurveyArea.EntityTypes.Add(IFCEntityType.IfcAnnotation);\r\n            propertySetAnnotationSurveyArea.ObjectType = \"IfcAnnotation\";\r\n            propertySetAnnotationSurveyArea.PredefinedType = \"SurveyArea\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnnotationSurveyArea.AcquisitionMethod\", \"AcquisitionMethod\");\r\n            ifcPSE.PropertyName = \"AcquisitionMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AcquisitionMethod);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Acquisition Method\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"MethodeAcquisition\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcquisitionMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnnotationSurveyArea.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnnotationSurveyArea.AccuracyQualityObtained\", \"AccuracyQualityObtained\");\r\n            ifcPSE.PropertyName = \"AccuracyQualityObtained\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Accuracy Quality Obtained\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PrecisionObtenue\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyQualityObtainedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnnotationSurveyArea.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnnotationSurveyArea.AccuracyQualityExpected\", \"AccuracyQualityExpected\");\r\n            ifcPSE.PropertyName = \"AccuracyQualityExpected\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Accuracy Quality Expected\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PrecisionAttendue\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyQualityExpectedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnnotationSurveyArea.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AnnotationSurveyArea\"))\r\n         {\r\n            propertySetAnnotationSurveyArea.EntityTypes.Add(IFCEntityType.IfcAnnotation);\r\n            propertySetAnnotationSurveyArea.ObjectType = \"IfcAnnotation\";\r\n            propertySetAnnotationSurveyArea.PredefinedType = \"SURVEY\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnnotationSurveyArea.AcquisitionMethod\", \"AcquisitionMethod\");\r\n            ifcPSE.PropertyName = \"AcquisitionMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AcquisitionMethod);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcquisitionMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnnotationSurveyArea.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnnotationSurveyArea.AccuracyQualityObtained\", \"AccuracyQualityObtained\");\r\n            ifcPSE.PropertyName = \"AccuracyQualityObtained\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyQualityObtainedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnnotationSurveyArea.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AnnotationSurveyArea.AccuracyQualityExpected\", \"AccuracyQualityExpected\");\r\n            ifcPSE.PropertyName = \"AccuracyQualityExpected\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyQualityExpectedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAnnotationSurveyArea.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAnnotationSurveyArea);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_Asset(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAsset = new PropertySetDescription();\r\n         propertySetAsset.Name = \"Pset_Asset\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Asset\"))\r\n         {\r\n            propertySetAsset.EntityTypes.Add(IFCEntityType.IfcAsset);\r\n            ifcPSE = new PropertySetEntry(\"Pset_Asset.AssetAccountingType\", \"AssetAccountingType\");\r\n            ifcPSE.PropertyName = \"AssetAccountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AssetAccountingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssetAccountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAsset.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Asset.AssetTaxType\", \"AssetTaxType\");\r\n            ifcPSE.PropertyName = \"AssetTaxType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AssetTaxType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssetTaxTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAsset.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Asset.AssetInsuranceType\", \"AssetInsuranceType\");\r\n            ifcPSE.PropertyName = \"AssetInsuranceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AssetInsuranceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssetInsuranceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAsset.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Asset\"))\r\n         {\r\n            propertySetAsset.EntityTypes.Add(IFCEntityType.IfcAsset);\r\n            ifcPSE = new PropertySetEntry(\"Pset_Asset.AssetAccountingType\", \"AssetAccountingType\");\r\n            ifcPSE.PropertyName = \"AssetAccountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AssetAccountingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssetAccountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAsset.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Asset.AssetTaxType\", \"AssetTaxType\");\r\n            ifcPSE.PropertyName = \"AssetTaxType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AssetTaxType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssetTaxTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAsset.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Asset.AssetInsuranceType\", \"AssetInsuranceType\");\r\n            ifcPSE.PropertyName = \"AssetInsuranceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AssetInsuranceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssetInsuranceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAsset.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Asset\"))\r\n         {\r\n            propertySetAsset.EntityTypes.Add(IFCEntityType.IfcAsset);\r\n            propertySetAsset.ObjectType = \"IfcAsset\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_Asset.AssetAccountingType\", \"AssetAccountingType\");\r\n            ifcPSE.PropertyName = \"AssetAccountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AssetAccountingType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Asset Accounting Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"資産会計種別\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssetAccountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAsset.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Asset.AssetTaxType\", \"AssetTaxType\");\r\n            ifcPSE.PropertyName = \"AssetTaxType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AssetTaxType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Asset Tax Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"資産税種別\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssetTaxTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAsset.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Asset.AssetInsuranceType\", \"AssetInsuranceType\");\r\n            ifcPSE.PropertyName = \"AssetInsuranceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AssetInsuranceType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Asset Insurance Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"資産保険種別\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssetInsuranceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAsset.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Asset\"))\r\n         {\r\n            propertySetAsset.EntityTypes.Add(IFCEntityType.IfcAsset);\r\n            propertySetAsset.ObjectType = \"IfcAsset\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_Asset.AssetAccountingType\", \"AssetAccountingType\");\r\n            ifcPSE.PropertyName = \"AssetAccountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AssetAccountingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssetAccountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAsset.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Asset.AssetTaxType\", \"AssetTaxType\");\r\n            ifcPSE.PropertyName = \"AssetTaxType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AssetTaxType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssetTaxTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAsset.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Asset.AssetInsuranceType\", \"AssetInsuranceType\");\r\n            ifcPSE.PropertyName = \"AssetInsuranceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AssetInsuranceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssetInsuranceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAsset.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Asset.AssetStatus\", \"AssetStatus\");\r\n            ifcPSE.PropertyName = \"AssetStatus\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssetStatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAsset.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Asset.AssetUse\", \"AssetUse\");\r\n            ifcPSE.PropertyName = \"AssetUse\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssetUseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAsset.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAsset);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AudioVisualAppliancePHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAudioVisualAppliancePHistory = new PropertySetDescription();\r\n         propertySetAudioVisualAppliancePHistory.Name = \"Pset_AudioVisualAppliancePHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualAppliancePHistory\"))\r\n         {\r\n            propertySetAudioVisualAppliancePHistory.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualAppliancePHistory.ObjectType = \"IfcAudioVisualAppliance\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualAppliancePHistory.PowerState\", \"PowerState\");\r\n            ifcPSE.PropertyName = \"PowerState\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Power State\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電源状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualAppliancePHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualAppliancePHistory.MediaSource\", \"MediaSource\");\r\n            ifcPSE.PropertyName = \"MediaSource\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Media Source\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MediaSourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualAppliancePHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualAppliancePHistory.MediaContent\", \"MediaContent\");\r\n            ifcPSE.PropertyName = \"MediaContent\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Media Content\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MediaContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualAppliancePHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualAppliancePHistory.AudioVolume\", \"AudioVolume\");\r\n            ifcPSE.PropertyName = \"AudioVolume\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Audio Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AudioVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualAppliancePHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualAppliancePHistory\"))\r\n         {\r\n            propertySetAudioVisualAppliancePHistory.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualAppliancePHistory.ObjectType = \"IfcAudioVisualAppliance\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualAppliancePHistory.PowerState\", \"PowerState\");\r\n            ifcPSE.PropertyName = \"PowerState\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualAppliancePHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualAppliancePHistory.MediaSourceHistory\", \"MediaSourceHistory\");\r\n            ifcPSE.PropertyName = \"MediaSourceHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MediaSourceHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualAppliancePHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualAppliancePHistory.MediaContent\", \"MediaContent\");\r\n            ifcPSE.PropertyName = \"MediaContent\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MediaContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualAppliancePHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualAppliancePHistory.AudioVolumeHistory\", \"AudioVolumeHistory\");\r\n            ifcPSE.PropertyName = \"AudioVolumeHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AudioVolumeHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualAppliancePHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAudioVisualAppliancePHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AudioVisualApplianceTypeAmplifier(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAudioVisualApplianceTypeAmplifier = new PropertySetDescription();\r\n         propertySetAudioVisualApplianceTypeAmplifier.Name = \"Pset_AudioVisualApplianceTypeAmplifier\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypeAmplifier\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypeAmplifier.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypeAmplifier.ObjectType = \"IfcAudioVisualAppliance\";\r\n            propertySetAudioVisualApplianceTypeAmplifier.PredefinedType = \"AMPLIFIER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeAmplifier.AmplifierType\", \"AmplifierType\");\r\n            ifcPSE.PropertyName = \"AmplifierType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AudioVisualAmplifierType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Amplifier Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"アンプ形式\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"앰프 형식\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AmplifierTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeAmplifier.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeAmplifier.AudioAmplification\", \"AudioAmplification\");\r\n            ifcPSE.PropertyName = \"AudioAmplification\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Frequency;\r\n            ifcPSE.PropertyType = PropertyType.SoundPower;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Audio Amplification\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"オーディオアンプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"오디오 앰프\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AudioAmplificationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeAmplifier.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeAmplifier.AudioMode\", \"AudioMode\");\r\n            ifcPSE.PropertyName = \"AudioMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Audio Mode\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"オーディオモード\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"오디오 모드\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AudioModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeAmplifier.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypeAmplifier\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypeAmplifier.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypeAmplifier.EntityTypes.Add(IFCEntityType.IfcAudioVisualApplianceType);\r\n            propertySetAudioVisualApplianceTypeAmplifier.ObjectType = \"IfcAudioVisualAppliance\";\r\n            propertySetAudioVisualApplianceTypeAmplifier.PredefinedType = \"AMPLIFIER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeAmplifier.AmplifierType\", \"AmplifierType\");\r\n            ifcPSE.PropertyName = \"AmplifierType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AudioVisualAmplifierType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AmplifierTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeAmplifier.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeAmplifier.AudioAmplification\", \"AudioAmplification\");\r\n            ifcPSE.PropertyName = \"AudioAmplification\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Frequency;\r\n            ifcPSE.PropertyType = PropertyType.SoundPower;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AudioAmplificationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeAmplifier.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeAmplifier.AudioMode\", \"AudioMode\");\r\n            ifcPSE.PropertyName = \"AudioMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AudioModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeAmplifier.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAudioVisualApplianceTypeAmplifier);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AudioVisualApplianceTypeCamera(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAudioVisualApplianceTypeCamera = new PropertySetDescription();\r\n         propertySetAudioVisualApplianceTypeCamera.Name = \"Pset_AudioVisualApplianceTypeCamera\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypeCamera\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypeCamera.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypeCamera.ObjectType = \"IfcAudioVisualAppliance\";\r\n            propertySetAudioVisualApplianceTypeCamera.PredefinedType = \"CAMERA\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.CameraType\", \"CameraType\");\r\n            ifcPSE.PropertyName = \"CameraType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AudioVisualCameraType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Camera Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"カメラ形式\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"카메라 형식\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CameraTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.IsOutdoors\", \"IsOutdoors\");\r\n            ifcPSE.PropertyName = \"IsOutdoors\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Outdoors\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"屋外対応の可否\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"실외 여부\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsOutdoorsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.VideoResolutionWidth\", \"VideoResolutionWidth\");\r\n            ifcPSE.PropertyName = \"VideoResolutionWidth\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Video Resolution Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水平解像度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"수평 해상도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoResolutionWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.VideoResolutionHeight\", \"VideoResolutionHeight\");\r\n            ifcPSE.PropertyName = \"VideoResolutionHeight\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Video Resolution Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"垂直解像度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"수직 해상도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoResolutionHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.VideoResolutionMode\", \"VideoResolutionMode\");\r\n            ifcPSE.PropertyName = \"VideoResolutionMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Video Resolution Mode\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ビデオ解像度モード\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"비디오 해상도 모드\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoResolutionModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.VideoCaptureInterval\", \"VideoCaptureInterval\");\r\n            ifcPSE.PropertyName = \"VideoCaptureInterval\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Video Capture Interval\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"撮影間隔\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoCaptureIntervalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.PanTiltZoomPreset\", \"PanTiltZoomPreset\");\r\n            ifcPSE.PropertyName = \"PanTiltZoomPreset\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pan Tilt Zoom Preset\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"パン・チルト・ズーム初期設定\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanTiltZoomPresetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.PanHorizontal\", \"PanHorizontal\");\r\n            ifcPSE.PropertyName = \"PanHorizontal\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pan Horizontal\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"パン水平方向可動範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanHorizontalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.PanVertical\", \"PanVertical\");\r\n            ifcPSE.PropertyName = \"PanVertical\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pan Vertical\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"パン垂直方向可動範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanVerticalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.TiltHorizontal\", \"TiltHorizontal\");\r\n            ifcPSE.PropertyName = \"TiltHorizontal\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tilt Horizontal\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"チルト水平方向可動角度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TiltHorizontalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.TiltVertical\", \"TiltVertical\");\r\n            ifcPSE.PropertyName = \"TiltVertical\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tilt Vertical\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"チルト垂直方向可動角度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TiltVerticalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.Zoom\", \"Zoom\");\r\n            ifcPSE.PropertyName = \"Zoom\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Zoom\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ズーム\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ZoomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypeCamera\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypeCamera.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypeCamera.EntityTypes.Add(IFCEntityType.IfcAudioVisualApplianceType);\r\n            propertySetAudioVisualApplianceTypeCamera.ObjectType = \"IfcAudioVisualAppliance\";\r\n            propertySetAudioVisualApplianceTypeCamera.PredefinedType = \"CAMERA\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.CameraType\", \"CameraType\");\r\n            ifcPSE.PropertyName = \"CameraType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AudioVisualCameraType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CameraTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.IsOutdoors\", \"IsOutdoors\");\r\n            ifcPSE.PropertyName = \"IsOutdoors\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsOutdoorsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.VideoResolutionWidth\", \"VideoResolutionWidth\");\r\n            ifcPSE.PropertyName = \"VideoResolutionWidth\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoResolutionWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.VideoResolutionHeight\", \"VideoResolutionHeight\");\r\n            ifcPSE.PropertyName = \"VideoResolutionHeight\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoResolutionHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.VideoResolutionMode\", \"VideoResolutionMode\");\r\n            ifcPSE.PropertyName = \"VideoResolutionMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoResolutionModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.VideoCaptureInterval\", \"VideoCaptureInterval\");\r\n            ifcPSE.PropertyName = \"VideoCaptureInterval\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoCaptureIntervalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.PanTiltZoomPreset\", \"PanTiltZoomPreset\");\r\n            ifcPSE.PropertyName = \"PanTiltZoomPreset\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanTiltZoomPresetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.PanHorizontal\", \"PanHorizontal\");\r\n            ifcPSE.PropertyName = \"PanHorizontal\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanHorizontalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.PanVertical\", \"PanVertical\");\r\n            ifcPSE.PropertyName = \"PanVertical\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanVerticalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.TiltHorizontal\", \"TiltHorizontal\");\r\n            ifcPSE.PropertyName = \"TiltHorizontal\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TiltHorizontalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.TiltVertical\", \"TiltVertical\");\r\n            ifcPSE.PropertyName = \"TiltVertical\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TiltVerticalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCamera.Zoom\", \"Zoom\");\r\n            ifcPSE.PropertyName = \"Zoom\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ZoomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCamera.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAudioVisualApplianceTypeCamera);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AudioVisualApplianceTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAudioVisualApplianceTypeCommon = new PropertySetDescription();\r\n         propertySetAudioVisualApplianceTypeCommon.Name = \"Pset_AudioVisualApplianceTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypeCommon\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypeCommon.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypeCommon.ObjectType = \"IfcAudioVisualAppliance\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전원 상태\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCommon.MediaSource\", \"MediaSource\");\r\n            ifcPSE.PropertyName = \"MediaSource\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Media Source\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"メディアソース\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"미디어 소스\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MediaSourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCommon.AudioVolume\", \"AudioVolume\");\r\n            ifcPSE.PropertyName = \"AudioVolume\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Integer;\r\n            ifcPSE.PropertyType = PropertyType.SoundPower;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Audio Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AudioVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypeCommon\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypeCommon.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypeCommon.EntityTypes.Add(IFCEntityType.IfcAudioVisualApplianceType);\r\n            propertySetAudioVisualApplianceTypeCommon.ObjectType = \"IfcAudioVisualAppliance\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCommon.MediaSource\", \"MediaSource\");\r\n            ifcPSE.PropertyName = \"MediaSource\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MediaSourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeCommon.AudioVolume\", \"AudioVolume\");\r\n            ifcPSE.PropertyName = \"AudioVolume\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Integer;\r\n            ifcPSE.PropertyType = PropertyType.SoundPower;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AudioVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAudioVisualApplianceTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AudioVisualApplianceTypeDisplay(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAudioVisualApplianceTypeDisplay = new PropertySetDescription();\r\n         propertySetAudioVisualApplianceTypeDisplay.Name = \"Pset_AudioVisualApplianceTypeDisplay\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypeDisplay\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypeDisplay.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypeDisplay.ObjectType = \"IfcAudioVisualAppliance\";\r\n            propertySetAudioVisualApplianceTypeDisplay.PredefinedType = \"DISPLAY\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.DisplayType\", \"DisplayType\");\r\n            ifcPSE.PropertyName = \"DisplayType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AudioVisualDisplayType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Display Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"画面種類\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"화면 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DisplayTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.NominalSize\", \"NominalSize\");\r\n            ifcPSE.PropertyName = \"NominalSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"画面公称サイズ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"화면 공칭 크기\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.DisplayWidth\", \"DisplayWidth\");\r\n            ifcPSE.PropertyName = \"DisplayWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Display Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"画面幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"화면 폭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DisplayWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.DisplayHeight\", \"DisplayHeight\");\r\n            ifcPSE.PropertyName = \"DisplayHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Display Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"画面高さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"화면 높이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DisplayHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.Brightness\", \"Brightness\");\r\n            ifcPSE.PropertyName = \"Brightness\";\r\n            ifcPSE.PropertyType = PropertyType.Illuminance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Brightness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"明るさ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"밝기\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BrightnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.ContrastRatio\", \"ContrastRatio\");\r\n            ifcPSE.PropertyName = \"ContrastRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Contrast Ratio\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"コントラスト比\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"명암비\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContrastRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.RefreshRate\", \"RefreshRate\");\r\n            ifcPSE.PropertyName = \"RefreshRate\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Refresh Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"リフレッシュレート\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"재생\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefreshRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.TouchScreen\", \"TouchScreen\");\r\n            ifcPSE.PropertyName = \"TouchScreen\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AudioVisualDisplayTouchScreen);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Touch Screen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"タッチスクリーン\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"터치 스크린\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TouchScreenCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.VideoResolutionWidth\", \"VideoResolutionWidth\");\r\n            ifcPSE.PropertyName = \"VideoResolutionWidth\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Video Resolution Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水平解像度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"수평 해상도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoResolutionWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.VideoResolutionHeight\", \"VideoResolutionHeight\");\r\n            ifcPSE.PropertyName = \"VideoResolutionHeight\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Video Resolution Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"垂直解像度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"수직 해상도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoResolutionHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.VideoResolutionMode\", \"VideoResolutionMode\");\r\n            ifcPSE.PropertyName = \"VideoResolutionMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Video Resolution Mode\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"解像度モード\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"디스플레이 모드\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoResolutionModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.VideoScaleMode\", \"VideoScaleMode\");\r\n            ifcPSE.PropertyName = \"VideoScaleMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Video Scale Mode\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ビデオスケールモード\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"비디오 스케일 모드\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoScaleModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.VideoCaptionMode\", \"VideoCaptionMode\");\r\n            ifcPSE.PropertyName = \"VideoCaptionMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Video Caption Mode\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ビデオキャプションモード\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"비디오 캡션 모드\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoCaptionModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.AudioMode\", \"AudioMode\");\r\n            ifcPSE.PropertyName = \"AudioMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Audio Mode\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"オーディオモード\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"오디오 모드\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AudioModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypeDisplay\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypeDisplay.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypeDisplay.EntityTypes.Add(IFCEntityType.IfcAudioVisualApplianceType);\r\n            propertySetAudioVisualApplianceTypeDisplay.ObjectType = \"IfcAudioVisualAppliance\";\r\n            propertySetAudioVisualApplianceTypeDisplay.PredefinedType = \"DISPLAY\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.DisplayType\", \"DisplayType\");\r\n            ifcPSE.PropertyName = \"DisplayType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AudioVisualDisplayType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DisplayTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.NominalSize\", \"NominalSize\");\r\n            ifcPSE.PropertyName = \"NominalSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.DisplayWidth\", \"DisplayWidth\");\r\n            ifcPSE.PropertyName = \"DisplayWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DisplayWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.DisplayHeight\", \"DisplayHeight\");\r\n            ifcPSE.PropertyName = \"DisplayHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DisplayHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.Brightness\", \"Brightness\");\r\n            ifcPSE.PropertyName = \"Brightness\";\r\n            ifcPSE.PropertyType = PropertyType.Illuminance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BrightnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.ContrastRatio\", \"ContrastRatio\");\r\n            ifcPSE.PropertyName = \"ContrastRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContrastRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.RefreshRate\", \"RefreshRate\");\r\n            ifcPSE.PropertyName = \"RefreshRate\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefreshRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.TouchScreen\", \"TouchScreen\");\r\n            ifcPSE.PropertyName = \"TouchScreen\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AudioVisualDisplayTouchScreen);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TouchScreenCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.VideoResolutionWidth\", \"VideoResolutionWidth\");\r\n            ifcPSE.PropertyName = \"VideoResolutionWidth\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoResolutionWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.VideoResolutionHeight\", \"VideoResolutionHeight\");\r\n            ifcPSE.PropertyName = \"VideoResolutionHeight\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoResolutionHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.VideoResolutionMode\", \"VideoResolutionMode\");\r\n            ifcPSE.PropertyName = \"VideoResolutionMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoResolutionModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.VideoScaleMode\", \"VideoScaleMode\");\r\n            ifcPSE.PropertyName = \"VideoScaleMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoScaleModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.VideoCaptionMode\", \"VideoCaptionMode\");\r\n            ifcPSE.PropertyName = \"VideoCaptionMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoCaptionModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeDisplay.AudioMode\", \"AudioMode\");\r\n            ifcPSE.PropertyName = \"AudioMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AudioModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeDisplay.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAudioVisualApplianceTypeDisplay);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AudioVisualApplianceTypePlayer(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAudioVisualApplianceTypePlayer = new PropertySetDescription();\r\n         propertySetAudioVisualApplianceTypePlayer.Name = \"Pset_AudioVisualApplianceTypePlayer\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypePlayer\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypePlayer.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypePlayer.ObjectType = \"IfcAudioVisualAppliance\";\r\n            propertySetAudioVisualApplianceTypePlayer.PredefinedType = \"PLAYER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypePlayer.PlayerType\", \"PlayerType\");\r\n            ifcPSE.PropertyName = \"PlayerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AudioVisualPlayerType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Player Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"プレイヤー形式\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"플레이어 형식\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlayerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypePlayer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypePlayer.PlayerMediaEject\", \"PlayerMediaEject\");\r\n            ifcPSE.PropertyName = \"PlayerMediaEject\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Player Media Eject\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"メディア取り出し可否\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"미디어 꺼내기 여부\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlayerMediaEjectCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypePlayer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypePlayer.PlayerMediaFormat\", \"PlayerMediaFormat\");\r\n            ifcPSE.PropertyName = \"PlayerMediaFormat\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Player Media Format\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"メディアフォーマット\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"미디어 포맷\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlayerMediaFormatCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypePlayer.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypePlayer\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypePlayer.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypePlayer.EntityTypes.Add(IFCEntityType.IfcAudioVisualApplianceType);\r\n            propertySetAudioVisualApplianceTypePlayer.ObjectType = \"IfcAudioVisualAppliance\";\r\n            propertySetAudioVisualApplianceTypePlayer.PredefinedType = \"PLAYER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypePlayer.PlayerType\", \"PlayerType\");\r\n            ifcPSE.PropertyName = \"PlayerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AudioVisualPlayerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlayerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypePlayer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypePlayer.PlayerMediaEject\", \"PlayerMediaEject\");\r\n            ifcPSE.PropertyName = \"PlayerMediaEject\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlayerMediaEjectCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypePlayer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypePlayer.PlayerMediaFormat\", \"PlayerMediaFormat\");\r\n            ifcPSE.PropertyName = \"PlayerMediaFormat\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlayerMediaFormatCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypePlayer.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAudioVisualApplianceTypePlayer);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AudioVisualApplianceTypeProjector(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAudioVisualApplianceTypeProjector = new PropertySetDescription();\r\n         propertySetAudioVisualApplianceTypeProjector.Name = \"Pset_AudioVisualApplianceTypeProjector\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypeProjector\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypeProjector.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypeProjector.ObjectType = \"IfcAudioVisualAppliance\";\r\n            propertySetAudioVisualApplianceTypeProjector.PredefinedType = \"PROJECTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeProjector.ProjectorType\", \"ProjectorType\");\r\n            ifcPSE.PropertyName = \"ProjectorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AudioVisualProjectorType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Projector Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"プロジェクター形式\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"프로젝터 형식\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProjectorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeProjector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeProjector.VideoResolutionWidth\", \"VideoResolutionWidth\");\r\n            ifcPSE.PropertyName = \"VideoResolutionWidth\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Video Resolution Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水平解像度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"수평 해상도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoResolutionWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeProjector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeProjector.VideoResolutionHeight\", \"VideoResolutionHeight\");\r\n            ifcPSE.PropertyName = \"VideoResolutionHeight\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Video Resolution Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"垂直解像度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"수직 해상도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoResolutionHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeProjector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeProjector.VideoResolutionMode\", \"VideoResolutionMode\");\r\n            ifcPSE.PropertyName = \"VideoResolutionMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Video Resolution Mode\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"解像度モード\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"디스플레이 모드\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoResolutionModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeProjector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeProjector.VideoScaleMode\", \"VideoScaleMode\");\r\n            ifcPSE.PropertyName = \"VideoScaleMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Video Scale Mode\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ビデオスケールモード\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"비디오 스케일\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoScaleModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeProjector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeProjector.VideoCaptionMode\", \"VideoCaptionMode\");\r\n            ifcPSE.PropertyName = \"VideoCaptionMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Video Caption Mode\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ビデオキャプションモード\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"비디오 캡쳐모드\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoCaptionModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeProjector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypeProjector\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypeProjector.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypeProjector.EntityTypes.Add(IFCEntityType.IfcAudioVisualApplianceType);\r\n            propertySetAudioVisualApplianceTypeProjector.ObjectType = \"IfcAudioVisualAppliance\";\r\n            propertySetAudioVisualApplianceTypeProjector.PredefinedType = \"PROJECTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeProjector.ProjectorType\", \"ProjectorType\");\r\n            ifcPSE.PropertyName = \"ProjectorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AudioVisualProjectorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProjectorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeProjector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeProjector.VideoResolutionWidth\", \"VideoResolutionWidth\");\r\n            ifcPSE.PropertyName = \"VideoResolutionWidth\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoResolutionWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeProjector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeProjector.VideoResolutionHeight\", \"VideoResolutionHeight\");\r\n            ifcPSE.PropertyName = \"VideoResolutionHeight\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoResolutionHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeProjector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeProjector.VideoResolutionMode\", \"VideoResolutionMode\");\r\n            ifcPSE.PropertyName = \"VideoResolutionMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoResolutionModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeProjector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeProjector.VideoScaleMode\", \"VideoScaleMode\");\r\n            ifcPSE.PropertyName = \"VideoScaleMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoScaleModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeProjector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeProjector.VideoCaptionMode\", \"VideoCaptionMode\");\r\n            ifcPSE.PropertyName = \"VideoCaptionMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VideoCaptionModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeProjector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAudioVisualApplianceTypeProjector);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AudioVisualApplianceTypeRailwayCommunicationTerminal(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAudioVisualApplianceTypeRailwayCommunicationTerminal = new PropertySetDescription();\r\n         propertySetAudioVisualApplianceTypeRailwayCommunicationTerminal.Name = \"Pset_AudioVisualApplianceTypeRailwayCommunicationTerminal\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypeRailwayCommunicationTerminal\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypeRailwayCommunicationTerminal.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypeRailwayCommunicationTerminal.EntityTypes.Add(IFCEntityType.IfcAudioVisualApplianceType);\r\n            propertySetAudioVisualApplianceTypeRailwayCommunicationTerminal.ObjectType = \"IfcAudioVisualAppliance\";\r\n            propertySetAudioVisualApplianceTypeRailwayCommunicationTerminal.PredefinedType = \"COMMUNICATIONTERMINAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeRailwayCommunicationTerminal.RailwayCommunicationTerminalType\", \"RailwayCommunicationTerminalType\");\r\n            ifcPSE.PropertyName = \"RailwayCommunicationTerminalType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RailwayCommunicationTerminalType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RailwayCommunicationTerminalTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeRailwayCommunicationTerminal.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAudioVisualApplianceTypeRailwayCommunicationTerminal);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AudioVisualApplianceTypeReceiver(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAudioVisualApplianceTypeReceiver = new PropertySetDescription();\r\n         propertySetAudioVisualApplianceTypeReceiver.Name = \"Pset_AudioVisualApplianceTypeReceiver\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypeReceiver\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypeReceiver.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypeReceiver.ObjectType = \"IfcAudioVisualAppliance\";\r\n            propertySetAudioVisualApplianceTypeReceiver.PredefinedType = \"RECEIVER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeReceiver.ReceiverType\", \"ReceiverType\");\r\n            ifcPSE.PropertyName = \"ReceiverType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AudioVisualReceiverType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Receiver Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"受信機形式\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"수신기 형식\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReceiverTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeReceiver.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeReceiver.AudioAmplification\", \"AudioAmplification\");\r\n            ifcPSE.PropertyName = \"AudioAmplification\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Frequency;\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Audio Amplification\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"オーディオアンプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"오디오 앰프\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AudioAmplificationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeReceiver.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeReceiver.AudioMode\", \"AudioMode\");\r\n            ifcPSE.PropertyName = \"AudioMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Audio Mode\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"オーディオモード\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"오디오 모드\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AudioModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeReceiver.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypeReceiver\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypeReceiver.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypeReceiver.EntityTypes.Add(IFCEntityType.IfcAudioVisualApplianceType);\r\n            propertySetAudioVisualApplianceTypeReceiver.ObjectType = \"IfcAudioVisualAppliance\";\r\n            propertySetAudioVisualApplianceTypeReceiver.PredefinedType = \"RECEIVER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeReceiver.ReceiverType\", \"ReceiverType\");\r\n            ifcPSE.PropertyName = \"ReceiverType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AudioVisualReceiverType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReceiverTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeReceiver.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeReceiver.AudioAmplification\", \"AudioAmplification\");\r\n            ifcPSE.PropertyName = \"AudioAmplification\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Frequency;\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AudioAmplificationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeReceiver.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeReceiver.AudioMode\", \"AudioMode\");\r\n            ifcPSE.PropertyName = \"AudioMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AudioModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeReceiver.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAudioVisualApplianceTypeReceiver);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AudioVisualApplianceTypeRecordingEquipment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAudioVisualApplianceTypeRecordingEquipment = new PropertySetDescription();\r\n         propertySetAudioVisualApplianceTypeRecordingEquipment.Name = \"Pset_AudioVisualApplianceTypeRecordingEquipment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypeRecordingEquipment\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypeRecordingEquipment.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypeRecordingEquipment.EntityTypes.Add(IFCEntityType.IfcAudioVisualApplianceType);\r\n            propertySetAudioVisualApplianceTypeRecordingEquipment.ObjectType = \"IfcAudioVisualAppliance\";\r\n            propertySetAudioVisualApplianceTypeRecordingEquipment.PredefinedType = \"RECORDINGEQUIPMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeRecordingEquipment.NumberOfInterfaces\", \"NumberOfInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeRecordingEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeRecordingEquipment.StorageCapacity\", \"StorageCapacity\");\r\n            ifcPSE.PropertyName = \"StorageCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StorageCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeRecordingEquipment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAudioVisualApplianceTypeRecordingEquipment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AudioVisualApplianceTypeSpeaker(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAudioVisualApplianceTypeSpeaker = new PropertySetDescription();\r\n         propertySetAudioVisualApplianceTypeSpeaker.Name = \"Pset_AudioVisualApplianceTypeSpeaker\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypeSpeaker\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypeSpeaker.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypeSpeaker.ObjectType = \"IfcAudioVisualAppliance\";\r\n            propertySetAudioVisualApplianceTypeSpeaker.PredefinedType = \"SPEAKER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeSpeaker.SpeakerType\", \"SpeakerType\");\r\n            ifcPSE.PropertyName = \"SpeakerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AudioVisualSpeakerType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Speaker Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"スピーカータイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"스피커 타입\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpeakerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeSpeaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeSpeaker.SpeakerMounting\", \"SpeakerMounting\");\r\n            ifcPSE.PropertyName = \"SpeakerMounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AudioVisualSpeakerMounting);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Speaker Mounting\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"取付可能方法\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"설치 가능 방법\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpeakerMountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeSpeaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeSpeaker.SpeakerDriverSize\", \"SpeakerDriverSize\");\r\n            ifcPSE.PropertyName = \"SpeakerDriverSize\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Speaker Driver Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"スピーカードライバサイズ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"스피커 드라이버\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpeakerDriverSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeSpeaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeSpeaker.FrequencyResponse\", \"FrequencyResponse\");\r\n            ifcPSE.PropertyName = \"FrequencyResponse\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Frequency;\r\n            ifcPSE.PropertyType = PropertyType.SoundPower;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Frequency Response\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"周波数応答\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"주파수 응답\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrequencyResponseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeSpeaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeSpeaker.Impedence\", \"Impedence\");\r\n            ifcPSE.PropertyName = \"Impedence\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Impedence\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"インピーダンス値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"임피던스\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpedenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeSpeaker.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypeSpeaker\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypeSpeaker.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypeSpeaker.EntityTypes.Add(IFCEntityType.IfcAudioVisualApplianceType);\r\n            propertySetAudioVisualApplianceTypeSpeaker.ObjectType = \"IfcAudioVisualAppliance\";\r\n            propertySetAudioVisualApplianceTypeSpeaker.PredefinedType = \"SPEAKER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeSpeaker.SpeakerType\", \"SpeakerType\");\r\n            ifcPSE.PropertyName = \"SpeakerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AudioVisualSpeakerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpeakerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeSpeaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeSpeaker.SpeakerMounting\", \"SpeakerMounting\");\r\n            ifcPSE.PropertyName = \"SpeakerMounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AudioVisualSpeakerMounting);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpeakerMountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeSpeaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeSpeaker.SpeakerDriverSize\", \"SpeakerDriverSize\");\r\n            ifcPSE.PropertyName = \"SpeakerDriverSize\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpeakerDriverSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeSpeaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeSpeaker.FrequencyResponse\", \"FrequencyResponse\");\r\n            ifcPSE.PropertyName = \"FrequencyResponse\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Frequency;\r\n            ifcPSE.PropertyType = PropertyType.SoundPower;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrequencyResponseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeSpeaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeSpeaker.Impedence\", \"Impedence\");\r\n            ifcPSE.PropertyName = \"Impedence\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpedenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeSpeaker.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAudioVisualApplianceTypeSpeaker);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AudioVisualApplianceTypeTuner(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAudioVisualApplianceTypeTuner = new PropertySetDescription();\r\n         propertySetAudioVisualApplianceTypeTuner.Name = \"Pset_AudioVisualApplianceTypeTuner\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypeTuner\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypeTuner.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypeTuner.ObjectType = \"IfcAudioVisualAppliance\";\r\n            propertySetAudioVisualApplianceTypeTuner.PredefinedType = \"TUNER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeTuner.TunerType\", \"TunerType\");\r\n            ifcPSE.PropertyName = \"TunerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AudioVisualTunerType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tuner Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"チューナータイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"튜너 타입\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TunerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeTuner.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeTuner.TunerMode\", \"TunerMode\");\r\n            ifcPSE.PropertyName = \"TunerMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tuner Mode\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"チューナーモード\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"튜너 모드\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TunerModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeTuner.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeTuner.TunerChannel\", \"TunerChannel\");\r\n            ifcPSE.PropertyName = \"TunerChannel\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tuner Channel\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"チューナーチャンネル\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"튜너 채널 선택\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TunerChannelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeTuner.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeTuner.TunerFrequency\", \"TunerFrequency\");\r\n            ifcPSE.PropertyName = \"TunerFrequency\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tuner Frequency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"周波数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"주파수 대응\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TunerFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeTuner.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AudioVisualApplianceTypeTuner\"))\r\n         {\r\n            propertySetAudioVisualApplianceTypeTuner.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            propertySetAudioVisualApplianceTypeTuner.EntityTypes.Add(IFCEntityType.IfcAudioVisualApplianceType);\r\n            propertySetAudioVisualApplianceTypeTuner.ObjectType = \"IfcAudioVisualAppliance\";\r\n            propertySetAudioVisualApplianceTypeTuner.PredefinedType = \"TUNER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeTuner.TunerType\", \"TunerType\");\r\n            ifcPSE.PropertyName = \"TunerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AudioVisualTunerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TunerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeTuner.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeTuner.TunerMode\", \"TunerMode\");\r\n            ifcPSE.PropertyName = \"TunerMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TunerModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeTuner.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeTuner.TunerChannel\", \"TunerChannel\");\r\n            ifcPSE.PropertyName = \"TunerChannel\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TunerChannelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeTuner.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AudioVisualApplianceTypeTuner.TunerFrequency\", \"TunerFrequency\");\r\n            ifcPSE.PropertyName = \"TunerFrequency\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TunerFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAudioVisualApplianceTypeTuner.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAudioVisualApplianceTypeTuner);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_AxleCountingEquipment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetAxleCountingEquipment = new PropertySetDescription();\r\n         propertySetAxleCountingEquipment.Name = \"Pset_AxleCountingEquipment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_AxleCountingEquipment\"))\r\n         {\r\n            propertySetAxleCountingEquipment.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetAxleCountingEquipment.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetAxleCountingEquipment.ObjectType = \"IfcSensor\";\r\n            propertySetAxleCountingEquipment.PredefinedType = \"WHEELSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_AxleCountingEquipment.FailureInformation\", \"FailureInformation\");\r\n            ifcPSE.PropertyName = \"FailureInformation\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FailureInformationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAxleCountingEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AxleCountingEquipment.DetectionRange\", \"DetectionRange\");\r\n            ifcPSE.PropertyName = \"DetectionRange\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DetectionRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAxleCountingEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AxleCountingEquipment.OperationalTemperatureRange\", \"OperationalTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationalTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAxleCountingEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AxleCountingEquipment.NominalWeight\", \"NominalWeight\");\r\n            ifcPSE.PropertyName = \"NominalWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAxleCountingEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AxleCountingEquipment.AxleCountingEquipmentType\", \"AxleCountingEquipmentType\");\r\n            ifcPSE.PropertyName = \"AxleCountingEquipmentType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AxleCountingEquipmentType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AxleCountingEquipmentTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAxleCountingEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AxleCountingEquipment.ImpactParameter\", \"ImpactParameter\");\r\n            ifcPSE.PropertyName = \"ImpactParameter\";\r\n            ifcPSE.PropertyType = PropertyType.Acceleration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpactParameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAxleCountingEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AxleCountingEquipment.RatedVoltage\", \"RatedVoltage\");\r\n            ifcPSE.PropertyName = \"RatedVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAxleCountingEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AxleCountingEquipment.InsulationResistance\", \"InsulationResistance\");\r\n            ifcPSE.PropertyName = \"InsulationResistance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InsulationResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAxleCountingEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AxleCountingEquipment.AxleCounterResponseTime\", \"AxleCounterResponseTime\");\r\n            ifcPSE.PropertyName = \"AxleCounterResponseTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AxleCounterResponseTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAxleCountingEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_AxleCountingEquipment.MaximumVibration\", \"MaximumVibration\");\r\n            ifcPSE.PropertyName = \"MaximumVibration\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumVibrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetAxleCountingEquipment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetAxleCountingEquipment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BalanceWeightTensionerDesignCriteria(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBalanceWeightTensionerDesignCriteria = new PropertySetDescription();\r\n         propertySetBalanceWeightTensionerDesignCriteria.Name = \"Pset_BalanceWeightTensionerDesignCriteria\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BalanceWeightTensionerDesignCriteria\"))\r\n         {\r\n            propertySetBalanceWeightTensionerDesignCriteria.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetBalanceWeightTensionerDesignCriteria.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetBalanceWeightTensionerDesignCriteria.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetBalanceWeightTensionerDesignCriteria.PredefinedType = \"TENSIONINGEQUIPMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BalanceWeightTensionerDesignCriteria.ReferenceDistanceRopeToPulley\", \"ReferenceDistanceRopeToPulley\");\r\n            ifcPSE.PropertyName = \"ReferenceDistanceRopeToPulley\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceDistanceRopeToPulleyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBalanceWeightTensionerDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BalanceWeightTensionerDesignCriteria.ReferenceDistanceTensionerToGround\", \"ReferenceDistanceTensionerToGround\");\r\n            ifcPSE.PropertyName = \"ReferenceDistanceTensionerToGround\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceDistanceTensionerToGroundCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBalanceWeightTensionerDesignCriteria.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBalanceWeightTensionerDesignCriteria);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BeamCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBeamCommon = new PropertySetDescription();\r\n         propertySetBeamCommon.Name = \"Pset_BeamCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BeamCommon\"))\r\n         {\r\n            propertySetBeamCommon.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.Span\", \"Span\");\r\n            ifcPSE.PropertyName = \"Span\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BeamCommon\"))\r\n         {\r\n            propertySetBeamCommon.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.Span\", \"Span\");\r\n            ifcPSE.PropertyName = \"Span\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BeamCommon\"))\r\n         {\r\n            propertySetBeamCommon.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            propertySetBeamCommon.ObjectType = \"IfcBeam\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bauteiltyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.Span\", \"Span\");\r\n            ifcPSE.PropertyName = \"Span\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Spannweite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Span\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PorteeLibre\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"全長\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"跨度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Neigungswinkel\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Slope\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Inclinaison\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"傾斜\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"坡度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.Roll\", \"Roll\");\r\n            ifcPSE.PropertyName = \"Roll\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Kippwinkel\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Roll\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"RotationAutourAxeLongitudinal\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"回転\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"转角\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RollCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Außenbauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EstExterieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否外部构件\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"U-Wert\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TransmissionThermique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱貫流率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"导热系数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Tragendes Bauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Load Bearing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Porteur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐力部材\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否承重\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Feuerwiderstandsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ResistanceAuFeu\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐火等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"防火等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BeamCommon\"))\r\n         {\r\n            propertySetBeamCommon.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            propertySetBeamCommon.EntityTypes.Add(IFCEntityType.IfcBeamType);\r\n            propertySetBeamCommon.ObjectType = \"IfcBeam\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.Span\", \"Span\");\r\n            ifcPSE.PropertyName = \"Span\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.Roll\", \"Roll\");\r\n            ifcPSE.PropertyName = \"Roll\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RollCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BeamCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBeamCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBeamCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BearingCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBearingCommon = new PropertySetDescription();\r\n         propertySetBearingCommon.Name = \"Pset_BearingCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BearingCommon\"))\r\n         {\r\n            propertySetBearingCommon.EntityTypes.Add(IFCEntityType.IfcBearing);\r\n            propertySetBearingCommon.EntityTypes.Add(IFCEntityType.IfcBearingType);\r\n            propertySetBearingCommon.ObjectType = \"IfcBearing\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BearingCommon.DisplacementAccommodated\", \"DisplacementAccommodated\");\r\n            ifcPSE.PropertyName = \"DisplacementAccommodated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DisplacementAccommodatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBearingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BearingCommon.RotationAccommodated\", \"RotationAccommodated\");\r\n            ifcPSE.PropertyName = \"RotationAccommodated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RotationAccommodatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBearingCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBearingCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BerthCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBerthCommon = new PropertySetDescription();\r\n         propertySetBerthCommon.Name = \"Pset_BerthCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BerthCommon\"))\r\n         {\r\n            propertySetBerthCommon.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetBerthCommon.EntityTypes.Add(IFCEntityType.IfcSpaceType);\r\n            propertySetBerthCommon.ObjectType = \"IfcSpace\";\r\n            propertySetBerthCommon.PredefinedType = \"BERTH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BerthCommon.BerthApproach\", \"BerthApproach\");\r\n            ifcPSE.PropertyName = \"BerthApproach\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_BerthApproach);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BerthApproachCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBerthCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BerthCommon.BerthMode\", \"BerthMode\");\r\n            ifcPSE.PropertyName = \"BerthMode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_BerthMode);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BerthModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBerthCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BerthCommon.BerthingAngle\", \"BerthingAngle\");\r\n            ifcPSE.PropertyName = \"BerthingAngle\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BerthingAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBerthCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BerthCommon.BerthingVelocity\", \"BerthingVelocity\");\r\n            ifcPSE.PropertyName = \"BerthingVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BerthingVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBerthCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BerthCommon.AbnormalBerthingFactor\", \"AbnormalBerthingFactor\");\r\n            ifcPSE.PropertyName = \"AbnormalBerthingFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AbnormalBerthingFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBerthCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBerthCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BinaryInput(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBinaryInput = new PropertySetDescription();\r\n         propertySetBinaryInput.Name = \"Pset_BinaryInput\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BinaryInput\"))\r\n         {\r\n            propertySetBinaryInput.EntityTypes.Add(IFCEntityType.IfcDistributionControlElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryInput.Polarity\", \"Polarity\");\r\n            ifcPSE.PropertyName = \"Polarity\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_PolarityEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PolarityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryInput.InactiveText\", \"InactiveText\");\r\n            ifcPSE.PropertyName = \"InactiveText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InactiveTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryInput.ActiveText\", \"ActiveText\");\r\n            ifcPSE.PropertyName = \"ActiveText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActiveTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryInput.MinimumOffTime\", \"MinimumOffTime\");\r\n            ifcPSE.PropertyName = \"MinimumOffTime\";\r\n            ifcPSE.PropertyType = PropertyType.IfcLocalTime;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumOffTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryInput.MinimumOnTime\", \"MinimumOnTime\");\r\n            ifcPSE.PropertyName = \"MinimumOnTime\";\r\n            ifcPSE.PropertyType = PropertyType.IfcLocalTime;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumOnTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryInput.FeedbackValue\", \"FeedbackValue\");\r\n            ifcPSE.PropertyName = \"FeedbackValue\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BACnetFeedbackValueType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FeedbackValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryInput.EventEnable\", \"EventEnable\");\r\n            ifcPSE.PropertyName = \"EventEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BACnetEventEnableType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EventEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryInput.AckedTransitions\", \"AckedTransitions\");\r\n            ifcPSE.PropertyName = \"AckedTransitions\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BACnetAckedTransitionsType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AckedTransitionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryInput.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BinaryInput\"))\r\n         {\r\n            propertySetBinaryInput.EntityTypes.Add(IFCEntityType.IfcDistributionControlElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryInput.Polarity\", \"Polarity\");\r\n            ifcPSE.PropertyName = \"Polarity\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_PolarityEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PolarityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryInput.InactiveText\", \"InactiveText\");\r\n            ifcPSE.PropertyName = \"InactiveText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InactiveTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryInput.ActiveText\", \"ActiveText\");\r\n            ifcPSE.PropertyName = \"ActiveText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActiveTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryInput.MinimumOffTime\", \"MinimumOffTime\");\r\n            ifcPSE.PropertyName = \"MinimumOffTime\";\r\n            ifcPSE.PropertyType = PropertyType.IfcLocalTime;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumOffTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryInput.MinimumOnTime\", \"MinimumOnTime\");\r\n            ifcPSE.PropertyName = \"MinimumOnTime\";\r\n            ifcPSE.PropertyType = PropertyType.IfcLocalTime;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumOnTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryInput.FeedbackValue\", \"FeedbackValue\");\r\n            ifcPSE.PropertyName = \"FeedbackValue\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BACnetFeedbackValueType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FeedbackValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryInput.EventEnable\", \"EventEnable\");\r\n            ifcPSE.PropertyName = \"EventEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BACnetEventEnableType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EventEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryInput.AckedTransitions\", \"AckedTransitions\");\r\n            ifcPSE.PropertyName = \"AckedTransitions\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BACnetAckedTransitionsType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AckedTransitionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryInput.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBinaryInput);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BinaryOutput(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBinaryOutput = new PropertySetDescription();\r\n         propertySetBinaryOutput.Name = \"Pset_BinaryOutput\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BinaryOutput\"))\r\n         {\r\n            propertySetBinaryOutput.EntityTypes.Add(IFCEntityType.IfcDistributionControlElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryOutput.Polarity\", \"Polarity\");\r\n            ifcPSE.PropertyName = \"Polarity\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_PolarityEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PolarityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryOutput.InactiveText\", \"InactiveText\");\r\n            ifcPSE.PropertyName = \"InactiveText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InactiveTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryOutput.ActiveText\", \"ActiveText\");\r\n            ifcPSE.PropertyName = \"ActiveText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActiveTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryOutput.AlarmValue\", \"AlarmValue\");\r\n            ifcPSE.PropertyName = \"AlarmValue\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BACnetAlarmValueType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AlarmValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryOutput.EventEnable\", \"EventEnable\");\r\n            ifcPSE.PropertyName = \"EventEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BACnetEventEnableType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EventEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryOutput.AckedTransitions\", \"AckedTransitions\");\r\n            ifcPSE.PropertyName = \"AckedTransitions\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BACnetAckedTransitionsType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AckedTransitionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryOutput.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BinaryOutput\"))\r\n         {\r\n            propertySetBinaryOutput.EntityTypes.Add(IFCEntityType.IfcDistributionControlElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryOutput.Polarity\", \"Polarity\");\r\n            ifcPSE.PropertyName = \"Polarity\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_PolarityEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PolarityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryOutput.InactiveText\", \"InactiveText\");\r\n            ifcPSE.PropertyName = \"InactiveText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InactiveTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryOutput.ActiveText\", \"ActiveText\");\r\n            ifcPSE.PropertyName = \"ActiveText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActiveTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryOutput.AlarmValue\", \"AlarmValue\");\r\n            ifcPSE.PropertyName = \"AlarmValue\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BACnetAlarmValueType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AlarmValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryOutput.EventEnable\", \"EventEnable\");\r\n            ifcPSE.PropertyName = \"EventEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BACnetEventEnableType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EventEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BinaryOutput.AckedTransitions\", \"AckedTransitions\");\r\n            ifcPSE.PropertyName = \"AckedTransitions\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BACnetAckedTransitionsType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AckedTransitionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBinaryOutput.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBinaryOutput);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BoilerPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBoilerPHistory = new PropertySetDescription();\r\n         propertySetBoilerPHistory.Name = \"Pset_BoilerPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BoilerPHistory\"))\r\n         {\r\n            propertySetBoilerPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.EnergySourceConsumption\", \"EnergySourceConsumption\");\r\n            ifcPSE.PropertyName = \"EnergySourceConsumption\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergySourceConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.OperationalEfficiency\", \"OperationalEfficiency\");\r\n            ifcPSE.PropertyName = \"OperationalEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.CombustionEfficiency\", \"CombustionEfficiency\");\r\n            ifcPSE.PropertyName = \"CombustionEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustionEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.WorkingPressure\", \"WorkingPressure\");\r\n            ifcPSE.PropertyName = \"WorkingPressure\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.CombustionTemperature\", \"CombustionTemperature\");\r\n            ifcPSE.PropertyName = \"CombustionTemperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustionTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.PartLoadRatio\", \"PartLoadRatio\");\r\n            ifcPSE.PropertyName = \"PartLoadRatio\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PartLoadRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.Load\", \"Load\");\r\n            ifcPSE.PropertyName = \"Load\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.PrimaryEnergyConsumption\", \"PrimaryEnergyConsumption\");\r\n            ifcPSE.PropertyName = \"PrimaryEnergyConsumption\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryEnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.AuxiliaryEnergyConsumption\", \"AuxiliaryEnergyConsumption\");\r\n            ifcPSE.PropertyName = \"AuxiliaryEnergyConsumption\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AuxiliaryEnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BoilerPHistory\"))\r\n         {\r\n            propertySetBoilerPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.EnergySourceConsumption\", \"EnergySourceConsumption\");\r\n            ifcPSE.PropertyName = \"EnergySourceConsumption\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergySourceConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.OperationalEfficiency\", \"OperationalEfficiency\");\r\n            ifcPSE.PropertyName = \"OperationalEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.CombustionEfficiency\", \"CombustionEfficiency\");\r\n            ifcPSE.PropertyName = \"CombustionEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustionEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.WorkingPressure\", \"WorkingPressure\");\r\n            ifcPSE.PropertyName = \"WorkingPressure\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.CombustionTemperature\", \"CombustionTemperature\");\r\n            ifcPSE.PropertyName = \"CombustionTemperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustionTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.PartLoadRatio\", \"PartLoadRatio\");\r\n            ifcPSE.PropertyName = \"PartLoadRatio\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PartLoadRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.Load\", \"Load\");\r\n            ifcPSE.PropertyName = \"Load\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.PrimaryEnergyConsumption\", \"PrimaryEnergyConsumption\");\r\n            ifcPSE.PropertyName = \"PrimaryEnergyConsumption\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryEnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.AuxiliaryEnergyConsumption\", \"AuxiliaryEnergyConsumption\");\r\n            ifcPSE.PropertyName = \"AuxiliaryEnergyConsumption\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AuxiliaryEnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BoilerPHistory\"))\r\n         {\r\n            propertySetBoilerPHistory.EntityTypes.Add(IFCEntityType.IfcBoiler);\r\n            propertySetBoilerPHistory.ObjectType = \"IfcBoiler\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.EnergySourceConsumption\", \"EnergySourceConsumption\");\r\n            ifcPSE.PropertyName = \"EnergySourceConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Energy Source Consumption\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ConsommationSourceEnergie.\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"エネルギ消費量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergySourceConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.OperationalEfficiency\", \"OperationalEfficiency\");\r\n            ifcPSE.PropertyName = \"OperationalEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Operational Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EfficacitéOpérationnelle\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"運転効率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.CombustionEfficiency\", \"CombustionEfficiency\");\r\n            ifcPSE.PropertyName = \"CombustionEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Combustion Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EfficacitéCombustion\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"燃焼効率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustionEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.WorkingPressure\", \"WorkingPressure\");\r\n            ifcPSE.PropertyName = \"WorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Working Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PressionFonctionnement\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"作動圧力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.CombustionTemperature\", \"CombustionTemperature\");\r\n            ifcPSE.PropertyName = \"CombustionTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Combustion Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TempératureCombustion\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"燃焼温度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustionTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.PartLoadRatio\", \"PartLoadRatio\");\r\n            ifcPSE.PropertyName = \"PartLoadRatio\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Part Load Ratio\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Taux de charge\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"部分負荷比\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PartLoadRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.Load\", \"Load\");\r\n            ifcPSE.PropertyName = \"Load\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Load\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Charge\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"負荷\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.PrimaryEnergyConsumption\", \"PrimaryEnergyConsumption\");\r\n            ifcPSE.PropertyName = \"PrimaryEnergyConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Primary Energy Consumption\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ConsommationEnergiePrimaire\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"一次エネルギ消費量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryEnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.AuxiliaryEnergyConsumption\", \"AuxiliaryEnergyConsumption\");\r\n            ifcPSE.PropertyName = \"AuxiliaryEnergyConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Auxiliary Energy Consumption\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ConsommationEnergieAuxiliaire\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"補助エネルギ消費量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AuxiliaryEnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BoilerPHistory\"))\r\n         {\r\n            propertySetBoilerPHistory.EntityTypes.Add(IFCEntityType.IfcBoiler);\r\n            propertySetBoilerPHistory.ObjectType = \"IfcBoiler\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.EnergySourceConsumption\", \"EnergySourceConsumption\");\r\n            ifcPSE.PropertyName = \"EnergySourceConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergySourceConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.OperationalEfficiency\", \"OperationalEfficiency\");\r\n            ifcPSE.PropertyName = \"OperationalEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.CombustionEfficiency\", \"CombustionEfficiency\");\r\n            ifcPSE.PropertyName = \"CombustionEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustionEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.WorkingPressureHistory\", \"WorkingPressureHistory\");\r\n            ifcPSE.PropertyName = \"WorkingPressureHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.CombustionChamberTemperature\", \"CombustionChamberTemperature\");\r\n            ifcPSE.PropertyName = \"CombustionChamberTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustionChamberTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.PartLoadRatio\", \"PartLoadRatio\");\r\n            ifcPSE.PropertyName = \"PartLoadRatio\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PartLoadRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.Load\", \"Load\");\r\n            ifcPSE.PropertyName = \"Load\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.PrimaryEnergyConsumption\", \"PrimaryEnergyConsumption\");\r\n            ifcPSE.PropertyName = \"PrimaryEnergyConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryEnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerPHistory.AuxiliaryEnergyConsumption\", \"AuxiliaryEnergyConsumption\");\r\n            ifcPSE.PropertyName = \"AuxiliaryEnergyConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AuxiliaryEnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBoilerPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BoilerTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBoilerTypeCommon = new PropertySetDescription();\r\n         propertySetBoilerTypeCommon.Name = \"Pset_BoilerTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BoilerTypeCommon\"))\r\n         {\r\n            propertySetBoilerTypeCommon.EntityTypes.Add(IFCEntityType.IfcBoilerType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.PressureRating\", \"PressureRating\");\r\n            ifcPSE.PropertyName = \"PressureRating\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.OperatingMode\", \"OperatingMode\");\r\n            ifcPSE.PropertyName = \"OperatingMode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BoilerOperatingMode);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperatingModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.HeatTransferSurfaceArea\", \"HeatTransferSurfaceArea\");\r\n            ifcPSE.PropertyName = \"HeatTransferSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatTransferSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.NominalPartLoadRatio\", \"NominalPartLoadRatio\");\r\n            ifcPSE.PropertyName = \"NominalPartLoadRatio\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPartLoadRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.WaterInletTemperatureRange\", \"WaterInletTemperatureRange\");\r\n            ifcPSE.PropertyName = \"WaterInletTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterInletTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.WaterStorageCapacity\", \"WaterStorageCapacity\");\r\n            ifcPSE.PropertyName = \"WaterStorageCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterStorageCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.IsWaterStorageHeater\", \"IsWaterStorageHeater\");\r\n            ifcPSE.PropertyName = \"IsWaterStorageHeater\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsWaterStorageHeaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.PartialLoadEfficiencyCurves\", \"PartialLoadEfficiencyCurves\");\r\n            ifcPSE.PropertyName = \"PartialLoadEfficiencyCurves\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PartialLoadEfficiencyCurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.NominalEfficiency\", \"NominalEfficiency\");\r\n            ifcPSE.PropertyName = \"NominalEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.HeatOutput\", \"HeatOutput\");\r\n            ifcPSE.PropertyName = \"HeatOutput\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatOutputCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.OutletTemperatureRange\", \"OutletTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OutletTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.NominalEnergyConsumption\", \"NominalEnergyConsumption\");\r\n            ifcPSE.PropertyName = \"NominalEnergyConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalEnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BoilerTypeCommon\"))\r\n         {\r\n            propertySetBoilerTypeCommon.EntityTypes.Add(IFCEntityType.IfcBoilerType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.PressureRating\", \"PressureRating\");\r\n            ifcPSE.PropertyName = \"PressureRating\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.OperatingMode\", \"OperatingMode\");\r\n            ifcPSE.PropertyName = \"OperatingMode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BoilerOperatingMode);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperatingModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.HeatTransferSurfaceArea\", \"HeatTransferSurfaceArea\");\r\n            ifcPSE.PropertyName = \"HeatTransferSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatTransferSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.NominalPartLoadRatio\", \"NominalPartLoadRatio\");\r\n            ifcPSE.PropertyName = \"NominalPartLoadRatio\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPartLoadRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.WaterInletTemperatureRange\", \"WaterInletTemperatureRange\");\r\n            ifcPSE.PropertyName = \"WaterInletTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterInletTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.WaterStorageCapacity\", \"WaterStorageCapacity\");\r\n            ifcPSE.PropertyName = \"WaterStorageCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterStorageCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.IsWaterStorageHeater\", \"IsWaterStorageHeater\");\r\n            ifcPSE.PropertyName = \"IsWaterStorageHeater\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsWaterStorageHeaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.PartialLoadEfficiencyCurves\", \"PartialLoadEfficiencyCurves\");\r\n            ifcPSE.PropertyName = \"PartialLoadEfficiencyCurves\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PartialLoadEfficiencyCurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.NominalEfficiency\", \"NominalEfficiency\");\r\n            ifcPSE.PropertyName = \"NominalEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.HeatOutput\", \"HeatOutput\");\r\n            ifcPSE.PropertyName = \"HeatOutput\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatOutputCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.OutletTemperatureRange\", \"OutletTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OutletTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.NominalEnergyConsumption\", \"NominalEnergyConsumption\");\r\n            ifcPSE.PropertyName = \"NominalEnergyConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalEnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BoilerTypeCommon\"))\r\n         {\r\n            propertySetBoilerTypeCommon.EntityTypes.Add(IFCEntityType.IfcBoiler);\r\n            propertySetBoilerTypeCommon.ObjectType = \"IfcBoiler\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Référence\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Etat\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.PressureRating\", \"PressureRating\");\r\n            ifcPSE.PropertyName = \"PressureRating\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PressionAdmissibleNominale\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"常用圧力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.OperatingMode\", \"OperatingMode\");\r\n            ifcPSE.PropertyName = \"OperatingMode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_BoilerOperatingMode);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Operating Mode\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ModeFonctionnement\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"動作モード\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperatingModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.HeatTransferSurfaceArea\", \"HeatTransferSurfaceArea\");\r\n            ifcPSE.PropertyName = \"HeatTransferSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heat Transfer Surface Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"SurfaceEchangeChaleur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"伝熱面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatTransferSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.NominalPartLoadRatio\", \"NominalPartLoadRatio\");\r\n            ifcPSE.PropertyName = \"NominalPartLoadRatio\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Part Load Ratio\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PlageNominaleChargePartielle\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設計部分負荷比率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPartLoadRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.WaterInletTemperatureRange\", \"WaterInletTemperatureRange\");\r\n            ifcPSE.PropertyName = \"WaterInletTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Inlet Temperature Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PlageTempératureAlimentationEau\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"入口水温範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterInletTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.WaterStorageCapacity\", \"WaterStorageCapacity\");\r\n            ifcPSE.PropertyName = \"WaterStorageCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Storage Capacity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CapacitéRéservoirEau\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"缶内水量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterStorageCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.IsWaterStorageHeater\", \"IsWaterStorageHeater\");\r\n            ifcPSE.PropertyName = \"IsWaterStorageHeater\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Water Storage Heater\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"AvoirChauffeEau\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"給湯タンク有無\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsWaterStorageHeaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.PartialLoadEfficiencyCurves\", \"PartialLoadEfficiencyCurves\");\r\n            ifcPSE.PropertyName = \"PartialLoadEfficiencyCurves\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Partial Load Efficiency Curves\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CourbesEfficacitéChargePartielle\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"部分負荷効率曲線\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PartialLoadEfficiencyCurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.OutletTemperatureRange\", \"OutletTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OutletTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outlet Temperature Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PlageTempératureSortie\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"出口温度範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.NominalEnergyConsumption\", \"NominalEnergyConsumption\");\r\n            ifcPSE.PropertyName = \"NominalEnergyConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Energy Consumption\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Consommation nominale d'energie\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設計エネルギー消費量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalEnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.EnergySource\", \"EnergySource\");\r\n            ifcPSE.PropertyName = \"EnergySource\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_EnergySource);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Energy Source\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"SourceEnergie\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"エネルギ種別\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergySourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BoilerTypeCommon\"))\r\n         {\r\n            propertySetBoilerTypeCommon.EntityTypes.Add(IFCEntityType.IfcBoiler);\r\n            propertySetBoilerTypeCommon.EntityTypes.Add(IFCEntityType.IfcBoilerType);\r\n            propertySetBoilerTypeCommon.ObjectType = \"IfcBoiler\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.PressureRating\", \"PressureRating\");\r\n            ifcPSE.PropertyName = \"PressureRating\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.OperatingMode\", \"OperatingMode\");\r\n            ifcPSE.PropertyName = \"OperatingMode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_BoilerOperatingMode);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperatingModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.HeatTransferSurfaceArea\", \"HeatTransferSurfaceArea\");\r\n            ifcPSE.PropertyName = \"HeatTransferSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatTransferSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.NominalPartLoadRatio\", \"NominalPartLoadRatio\");\r\n            ifcPSE.PropertyName = \"NominalPartLoadRatio\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPartLoadRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.WaterInletTemperatureRange\", \"WaterInletTemperatureRange\");\r\n            ifcPSE.PropertyName = \"WaterInletTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterInletTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.WaterStorageCapacity\", \"WaterStorageCapacity\");\r\n            ifcPSE.PropertyName = \"WaterStorageCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterStorageCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.IsWaterStorageHeater\", \"IsWaterStorageHeater\");\r\n            ifcPSE.PropertyName = \"IsWaterStorageHeater\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsWaterStorageHeaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.PartialLoadEfficiencyCurves\", \"PartialLoadEfficiencyCurves\");\r\n            ifcPSE.PropertyName = \"PartialLoadEfficiencyCurves\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PartialLoadEfficiencyCurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.OutletTemperatureRange\", \"OutletTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OutletTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.NominalEnergyConsumption\", \"NominalEnergyConsumption\");\r\n            ifcPSE.PropertyName = \"NominalEnergyConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalEnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeCommon.EnergySource\", \"EnergySource\");\r\n            ifcPSE.PropertyName = \"EnergySource\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_EnergySource);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergySourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBoilerTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BoilerTypeSteam(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBoilerTypeSteam = new PropertySetDescription();\r\n         propertySetBoilerTypeSteam.Name = \"Pset_BoilerTypeSteam\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BoilerTypeSteam\"))\r\n         {\r\n            propertySetBoilerTypeSteam.EntityTypes.Add(IFCEntityType.IfcBoilerType);\r\n            propertySetBoilerTypeSteam.ObjectType = \"IfcBoilerType\";\r\n            propertySetBoilerTypeSteam.PredefinedType = \"STEAM\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeSteam.MaximumOutletPressure\", \"MaximumOutletPressure\");\r\n            ifcPSE.PropertyName = \"MaximumOutletPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumOutletPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeSteam.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BoilerTypeSteam\"))\r\n         {\r\n            propertySetBoilerTypeSteam.EntityTypes.Add(IFCEntityType.IfcBoilerType);\r\n            propertySetBoilerTypeSteam.ObjectType = \"IfcBoilerType\";\r\n            propertySetBoilerTypeSteam.PredefinedType = \"STEAM\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeSteam.MaximumOutletPressure\", \"MaximumOutletPressure\");\r\n            ifcPSE.PropertyName = \"MaximumOutletPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumOutletPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeSteam.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BoilerTypeSteam\"))\r\n         {\r\n            propertySetBoilerTypeSteam.EntityTypes.Add(IFCEntityType.IfcBoiler);\r\n            propertySetBoilerTypeSteam.ObjectType = \"IfcBoiler\";\r\n            propertySetBoilerTypeSteam.PredefinedType = \"STEAM\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeSteam.MaximumOutletPressure\", \"MaximumOutletPressure\");\r\n            ifcPSE.PropertyName = \"MaximumOutletPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Outlet Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PressionSortieAdmissible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最大出口圧力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumOutletPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeSteam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeSteam.NominalEfficiency\", \"NominalEfficiency\");\r\n            ifcPSE.PropertyName = \"NominalEfficiency\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EfficacitéNominale\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeSteam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeSteam.HeatOutput\", \"HeatOutput\");\r\n            ifcPSE.PropertyName = \"HeatOutput\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heat Output\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"RendementChaleur\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatOutputCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeSteam.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BoilerTypeSteam\"))\r\n         {\r\n            propertySetBoilerTypeSteam.EntityTypes.Add(IFCEntityType.IfcBoiler);\r\n            propertySetBoilerTypeSteam.EntityTypes.Add(IFCEntityType.IfcBoilerType);\r\n            propertySetBoilerTypeSteam.ObjectType = \"IfcBoiler\";\r\n            propertySetBoilerTypeSteam.PredefinedType = \"STEAM\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeSteam.MaximumOutletPressure\", \"MaximumOutletPressure\");\r\n            ifcPSE.PropertyName = \"MaximumOutletPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumOutletPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeSteam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeSteam.NominalEfficiencyTable\", \"NominalEfficiencyTable\");\r\n            ifcPSE.PropertyName = \"NominalEfficiencyTable\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalEfficiencyTableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeSteam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeSteam.HeatOutput\", \"HeatOutput\");\r\n            ifcPSE.PropertyName = \"HeatOutput\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatOutputCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeSteam.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBoilerTypeSteam);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BoilerTypeWater(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBoilerTypeWater = new PropertySetDescription();\r\n         propertySetBoilerTypeWater.Name = \"Pset_BoilerTypeWater\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BoilerTypeWater\"))\r\n         {\r\n            propertySetBoilerTypeWater.EntityTypes.Add(IFCEntityType.IfcBoiler);\r\n            propertySetBoilerTypeWater.ObjectType = \"IfcBoiler\";\r\n            propertySetBoilerTypeWater.PredefinedType = \"WATER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeWater.NominalEfficiency\", \"NominalEfficiency\");\r\n            ifcPSE.PropertyName = \"NominalEfficiency\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EfficacitéNominale\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeWater.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeWater.HeatOutput\", \"HeatOutput\");\r\n            ifcPSE.PropertyName = \"HeatOutput\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heat Output\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"RendementChaleur\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatOutputCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeWater.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BoilerTypeWater\"))\r\n         {\r\n            propertySetBoilerTypeWater.EntityTypes.Add(IFCEntityType.IfcBoiler);\r\n            propertySetBoilerTypeWater.EntityTypes.Add(IFCEntityType.IfcBoilerType);\r\n            propertySetBoilerTypeWater.ObjectType = \"IfcBoiler\";\r\n            propertySetBoilerTypeWater.PredefinedType = \"WATER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeWater.NominalEfficiency\", \"NominalEfficiency\");\r\n            ifcPSE.PropertyName = \"NominalEfficiency\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeWater.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoilerTypeWater.HeatOutput\", \"HeatOutput\");\r\n            ifcPSE.PropertyName = \"HeatOutput\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatOutputCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoilerTypeWater.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBoilerTypeWater);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BoreholeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBoreholeCommon = new PropertySetDescription();\r\n         propertySetBoreholeCommon.Name = \"Pset_BoreholeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BoreholeCommon\"))\r\n         {\r\n            propertySetBoreholeCommon.EntityTypes.Add(IFCEntityType.IfcBorehole);\r\n            propertySetBoreholeCommon.ObjectType = \"IfcBorehole\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoreholeCommon.BoreholeState\", \"BoreholeState\");\r\n            ifcPSE.PropertyName = \"BoreholeState\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_BoreholeState);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoreholeStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoreholeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoreholeCommon.CapDepth\", \"CapDepth\");\r\n            ifcPSE.PropertyName = \"CapDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoreholeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoreholeCommon.CapMaterial\", \"CapMaterial\");\r\n            ifcPSE.PropertyName = \"CapMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoreholeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoreholeCommon.FillingDepth\", \"FillingDepth\");\r\n            ifcPSE.PropertyName = \"FillingDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FillingDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoreholeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoreholeCommon.FillingMaterial\", \"FillingMaterial\");\r\n            ifcPSE.PropertyName = \"FillingMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FillingMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoreholeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoreholeCommon.GroundwaterDepth\", \"GroundwaterDepth\");\r\n            ifcPSE.PropertyName = \"GroundwaterDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GroundwaterDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoreholeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoreholeCommon.LiningMaterial\", \"LiningMaterial\");\r\n            ifcPSE.PropertyName = \"LiningMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoreholeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoreholeCommon.LiningThickness\", \"LiningThickness\");\r\n            ifcPSE.PropertyName = \"LiningThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoreholeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBoreholeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BoundedCourseCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBoundedCourseCommon = new PropertySetDescription();\r\n         propertySetBoundedCourseCommon.Name = \"Pset_BoundedCourseCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BoundedCourseCommon\"))\r\n         {\r\n            propertySetBoundedCourseCommon.EntityTypes.Add(IFCEntityType.IfcCourse);\r\n            propertySetBoundedCourseCommon.EntityTypes.Add(IFCEntityType.IfcCourseType);\r\n            propertySetBoundedCourseCommon.ObjectType = \"IfcCourse\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BoundedCourseCommon.SpreadingRate\", \"SpreadingRate\");\r\n            ifcPSE.PropertyName = \"SpreadingRate\";\r\n            ifcPSE.PropertyType = PropertyType.Numeric;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpreadingRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBoundedCourseCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBoundedCourseCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BreakwaterCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBreakwaterCommon = new PropertySetDescription();\r\n         propertySetBreakwaterCommon.Name = \"Pset_BreakwaterCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BreakwaterCommon\"))\r\n         {\r\n            propertySetBreakwaterCommon.EntityTypes.Add(IFCEntityType.IfcMarineFacility);\r\n            propertySetBreakwaterCommon.ObjectType = \"IfcMarineFacility\";\r\n            propertySetBreakwaterCommon.PredefinedType = \"BREAKWATER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BreakwaterCommon.StructuralStyle\", \"StructuralStyle\");\r\n            ifcPSE.PropertyName = \"StructuralStyle\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StructuralStyleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBreakwaterCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BreakwaterCommon.Elevation\", \"Elevation\");\r\n            ifcPSE.PropertyName = \"Elevation\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElevationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBreakwaterCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBreakwaterCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BridgeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBridgeCommon = new PropertySetDescription();\r\n         propertySetBridgeCommon.Name = \"Pset_BridgeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BridgeCommon\"))\r\n         {\r\n            propertySetBridgeCommon.EntityTypes.Add(IFCEntityType.IfcBridge);\r\n            propertySetBridgeCommon.ObjectType = \"IfcBridge\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BridgeCommon.StructureIndicator\", \"StructureIndicator\");\r\n            ifcPSE.PropertyName = \"StructureIndicator\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_StructureIndicator);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StructureIndicatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBridgeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBridgeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BuildingCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBuildingCommon = new PropertySetDescription();\r\n         propertySetBuildingCommon.Name = \"Pset_BuildingCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingCommon\"))\r\n         {\r\n            propertySetBuildingCommon.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.MainFireUse\", \"MainFireUse\");\r\n            ifcPSE.PropertyName = \"MainFireUse\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MainFireUseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.AncillaryFireUse\", \"AncillaryFireUse\");\r\n            ifcPSE.PropertyName = \"AncillaryFireUse\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AncillaryFireUseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.SprinklerProtection\", \"SprinklerProtection\");\r\n            ifcPSE.PropertyName = \"SprinklerProtection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.SprinklerProtectionAutomatic\", \"SprinklerProtectionAutomatic\");\r\n            ifcPSE.PropertyName = \"SprinklerProtectionAutomatic\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionAutomaticCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.OccupancyType\", \"OccupancyType\");\r\n            ifcPSE.PropertyName = \"OccupancyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.GrossAreaPlanned\", \"GrossAreaPlanned\");\r\n            ifcPSE.PropertyName = \"GrossAreaPlanned\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaPlannedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingCommon\"))\r\n         {\r\n            propertySetBuildingCommon.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.BuildingID\", \"BuildingID\");\r\n            ifcPSE.PropertyName = \"BuildingID\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BuildingIDCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.IsPermanentID\", \"IsPermanentID\");\r\n            ifcPSE.PropertyName = \"IsPermanentID\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsPermanentIDCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.MainFireUse\", \"MainFireUse\");\r\n            ifcPSE.PropertyName = \"MainFireUse\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MainFireUseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.AncillaryFireUse\", \"AncillaryFireUse\");\r\n            ifcPSE.PropertyName = \"AncillaryFireUse\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AncillaryFireUseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.SprinklerProtection\", \"SprinklerProtection\");\r\n            ifcPSE.PropertyName = \"SprinklerProtection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.SprinklerProtectionAutomatic\", \"SprinklerProtectionAutomatic\");\r\n            ifcPSE.PropertyName = \"SprinklerProtectionAutomatic\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionAutomaticCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.OccupancyType\", \"OccupancyType\");\r\n            ifcPSE.PropertyName = \"OccupancyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.GrossPlannedArea\", \"GrossPlannedArea\");\r\n            ifcPSE.PropertyName = \"GrossPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.NumberOfStoreys\", \"NumberOfStoreys\");\r\n            ifcPSE.PropertyName = \"NumberOfStoreys\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfStoreysCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.YearOfConstruction\", \"YearOfConstruction\");\r\n            ifcPSE.PropertyName = \"YearOfConstruction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YearOfConstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.IsLandmarked\", \"IsLandmarked\");\r\n            ifcPSE.PropertyName = \"IsLandmarked\";\r\n            ifcPSE.PropertyType = PropertyType.Logical;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsLandmarkedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingCommon\"))\r\n         {\r\n            propertySetBuildingCommon.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            propertySetBuildingCommon.ObjectType = \"IfcBuilding\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Referenz ID\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조 ID\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.BuildingID\", \"BuildingID\");\r\n            ifcPSE.PropertyName = \"BuildingID\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Gebäudekennzeichen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Building ID\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"IdBatiment\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"建物記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"건물 ID\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BuildingIDCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.IsPermanentID\", \"IsPermanentID\");\r\n            ifcPSE.PropertyName = \"IsPermanentID\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Gebäudekennzeichen permanent\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Permanent ID\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"IdPermanent\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"永久ID区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"영구 ID 구분\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsPermanentIDCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.ConstructionMethod\", \"ConstructionMethod\");\r\n            ifcPSE.PropertyName = \"ConstructionMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Art der Ausführung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Construction Method\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"RisqueIncendieUsagePrincipal\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"工事種別\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"공사 종류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConstructionMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.FireProtectionClass\", \"FireProtectionClass\");\r\n            ifcPSE.PropertyName = \"FireProtectionClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Gebäudeklasse Brandschutz\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Protection Class\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"RisqueIncendieUsageSecondaire\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐火等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"방화 등급\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireProtectionClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.SprinklerProtection\", \"SprinklerProtection\");\r\n            ifcPSE.PropertyName = \"SprinklerProtection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Sprinklerschutz\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sprinkler Protection\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ProtectionParSprinkler\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"スプリンクラー防御\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"스프링 클러 방어\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.SprinklerProtectionAutomatic\", \"SprinklerProtectionAutomatic\");\r\n            ifcPSE.PropertyName = \"SprinklerProtectionAutomatic\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Sprinklerschutz automatisch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sprinkler Protection Automatic\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ProtectionAutomatiqueParSprinkler\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"スプリンクラー防御自動区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"스프링 클러 방어 자동 구분\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionAutomaticCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.OccupancyType\", \"OccupancyType\");\r\n            ifcPSE.PropertyName = \"OccupancyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nutzungsart\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Occupancy Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TypeOccupation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"占有者タイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"점유자 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.GrossPlannedArea\", \"GrossPlannedArea\");\r\n            ifcPSE.PropertyName = \"GrossPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttofläche nach Raumprogramm\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Planned Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Surface programmée brute\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"計画グロス面積\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"계획 그로스 면적\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.NetPlannedArea\", \"NetPlannedArea\");\r\n            ifcPSE.PropertyName = \"NetPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettofläche nach Raumprogramm\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Planned Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Surface programmée nette\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"計画ネット面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.NumberOfStoreys\", \"NumberOfStoreys\");\r\n            ifcPSE.PropertyName = \"NumberOfStoreys\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Geschossanzahl\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Storeys\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"NombreNiveaux\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"階数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"층 수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfStoreysCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.YearOfConstruction\", \"YearOfConstruction\");\r\n            ifcPSE.PropertyName = \"YearOfConstruction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Baujahr\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Year Of Construction\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"AnneeConstruction\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"施工年\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"시공 년\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YearOfConstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.YearOfLastRefurbishment\", \"YearOfLastRefurbishment\");\r\n            ifcPSE.PropertyName = \"YearOfLastRefurbishment\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"letztes Renovierungsjahr\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Year Of Last Refurbishment\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Année de la dernière rénovation\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YearOfLastRefurbishmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.IsLandmarked\", \"IsLandmarked\");\r\n            ifcPSE.PropertyName = \"IsLandmarked\";\r\n            ifcPSE.PropertyType = PropertyType.Logical;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Denkmalschutz\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Landmarked\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ClasseMonumentHistorique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ランドマーク区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"랜드마크 구분\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsLandmarkedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingCommon\"))\r\n         {\r\n            propertySetBuildingCommon.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            propertySetBuildingCommon.ObjectType = \"IfcBuilding\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.BuildingID\", \"BuildingID\");\r\n            ifcPSE.PropertyName = \"BuildingID\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BuildingIDCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.IsPermanentID\", \"IsPermanentID\");\r\n            ifcPSE.PropertyName = \"IsPermanentID\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsPermanentIDCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.ConstructionMethod\", \"ConstructionMethod\");\r\n            ifcPSE.PropertyName = \"ConstructionMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConstructionMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.FireProtectionClass\", \"FireProtectionClass\");\r\n            ifcPSE.PropertyName = \"FireProtectionClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireProtectionClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.SprinklerProtection\", \"SprinklerProtection\");\r\n            ifcPSE.PropertyName = \"SprinklerProtection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.SprinklerProtectionAutomatic\", \"SprinklerProtectionAutomatic\");\r\n            ifcPSE.PropertyName = \"SprinklerProtectionAutomatic\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionAutomaticCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.OccupancyType\", \"OccupancyType\");\r\n            ifcPSE.PropertyName = \"OccupancyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.GrossPlannedArea\", \"GrossPlannedArea\");\r\n            ifcPSE.PropertyName = \"GrossPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.NetPlannedArea\", \"NetPlannedArea\");\r\n            ifcPSE.PropertyName = \"NetPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.NumberOfStoreys\", \"NumberOfStoreys\");\r\n            ifcPSE.PropertyName = \"NumberOfStoreys\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfStoreysCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.YearOfConstruction\", \"YearOfConstruction\");\r\n            ifcPSE.PropertyName = \"YearOfConstruction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YearOfConstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.YearOfLastRefurbishment\", \"YearOfLastRefurbishment\");\r\n            ifcPSE.PropertyName = \"YearOfLastRefurbishment\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YearOfLastRefurbishmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.IsLandmarked\", \"IsLandmarked\");\r\n            ifcPSE.PropertyName = \"IsLandmarked\";\r\n            ifcPSE.PropertyType = PropertyType.Logical;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsLandmarkedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.ElevationOfRefHeight\", \"ElevationOfRefHeight\");\r\n            ifcPSE.PropertyName = \"ElevationOfRefHeight\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElevationOfRefHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingCommon.ElevationOfTerrain\", \"ElevationOfTerrain\");\r\n            ifcPSE.PropertyName = \"ElevationOfTerrain\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElevationOfTerrainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBuildingCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BuildingElementProxyCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBuildingElementProxyCommon = new PropertySetDescription();\r\n         propertySetBuildingElementProxyCommon.Name = \"Pset_BuildingElementProxyCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingElementProxyCommon\"))\r\n         {\r\n            propertySetBuildingElementProxyCommon.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxy);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingElementProxyCommon\"))\r\n         {\r\n            propertySetBuildingElementProxyCommon.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxy);\r\n            propertySetBuildingElementProxyCommon.ObjectType = \"IfcBuildingElementProxy\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bauteiltyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Référence\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Außenbauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Est extérieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否外部构件\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"U-Wert\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Transmission thermique surfacique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱貫流率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"导热系数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Tragendes Bauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Load Bearing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Porteur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐力部材\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否承重\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Feuerwiderstandsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Résistance au feu\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐火等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"防火等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingElementProxyCommon\"))\r\n         {\r\n            propertySetBuildingElementProxyCommon.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxy);\r\n            propertySetBuildingElementProxyCommon.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxyType);\r\n            propertySetBuildingElementProxyCommon.ObjectType = \"IfcBuildingElementProxy\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBuildingElementProxyCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BuildingElementProxyProvisionForVoid(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBuildingElementProxyProvisionForVoid = new PropertySetDescription();\r\n         propertySetBuildingElementProxyProvisionForVoid.Name = \"Pset_BuildingElementProxyProvisionForVoid\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingElementProxyProvisionForVoid\"))\r\n         {\r\n            propertySetBuildingElementProxyProvisionForVoid.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxy);\r\n            propertySetBuildingElementProxyProvisionForVoid.ObjectType = \"IfcBuildingElementProxy\";\r\n            propertySetBuildingElementProxyProvisionForVoid.PredefinedType = \"PROVISIONFORVOID\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyProvisionForVoid.Shape\", \"Shape\");\r\n            ifcPSE.PropertyName = \"Shape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Form\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shape\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Forme\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"形状\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"形状\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyProvisionForVoid.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyProvisionForVoid.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Breite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Largeur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"宽度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyProvisionForVoid.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyProvisionForVoid.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Höhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Hauteur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"高さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"高度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyProvisionForVoid.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyProvisionForVoid.Diameter\", \"Diameter\");\r\n            ifcPSE.PropertyName = \"Diameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Durchmesser\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Diamètre\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"直径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"直径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyProvisionForVoid.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyProvisionForVoid.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Tiefe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Depth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Profondeur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"深さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"深度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyProvisionForVoid.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingElementProxyProvisionForVoid.System\", \"System\");\r\n            ifcPSE.PropertyName = \"System\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Anlage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"System\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Système\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"システム\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"系统\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SystemCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingElementProxyProvisionForVoid.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBuildingElementProxyProvisionForVoid);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BuildingStoreyCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBuildingStoreyCommon = new PropertySetDescription();\r\n         propertySetBuildingStoreyCommon.Name = \"Pset_BuildingStoreyCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingStoreyCommon\"))\r\n         {\r\n            propertySetBuildingStoreyCommon.EntityTypes.Add(IFCEntityType.IfcBuildingStorey);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.EntranceLevel\", \"EntranceLevel\");\r\n            ifcPSE.PropertyName = \"EntranceLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EntranceLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.AboveGround\", \"AboveGround\");\r\n            ifcPSE.PropertyName = \"AboveGround\";\r\n            ifcPSE.PropertyType = PropertyType.Logical;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AboveGroundCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.SprinklerProtection\", \"SprinklerProtection\");\r\n            ifcPSE.PropertyName = \"SprinklerProtection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.SprinklerProtectionAutomatic\", \"SprinklerProtectionAutomatic\");\r\n            ifcPSE.PropertyName = \"SprinklerProtectionAutomatic\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionAutomaticCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.GrossAreaPlanned\", \"GrossAreaPlanned\");\r\n            ifcPSE.PropertyName = \"GrossAreaPlanned\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaPlannedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingStoreyCommon\"))\r\n         {\r\n            propertySetBuildingStoreyCommon.EntityTypes.Add(IFCEntityType.IfcBuildingStorey);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.EntranceLevel\", \"EntranceLevel\");\r\n            ifcPSE.PropertyName = \"EntranceLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EntranceLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.AboveGround\", \"AboveGround\");\r\n            ifcPSE.PropertyName = \"AboveGround\";\r\n            ifcPSE.PropertyType = PropertyType.Logical;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AboveGroundCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.SprinklerProtection\", \"SprinklerProtection\");\r\n            ifcPSE.PropertyName = \"SprinklerProtection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.SprinklerProtectionAutomatic\", \"SprinklerProtectionAutomatic\");\r\n            ifcPSE.PropertyName = \"SprinklerProtectionAutomatic\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionAutomaticCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.GrossAreaPlanned\", \"GrossAreaPlanned\");\r\n            ifcPSE.PropertyName = \"GrossAreaPlanned\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaPlannedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.NetAreaPlanned\", \"NetAreaPlanned\");\r\n            ifcPSE.PropertyName = \"NetAreaPlanned\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetAreaPlannedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingStoreyCommon\"))\r\n         {\r\n            propertySetBuildingStoreyCommon.EntityTypes.Add(IFCEntityType.IfcBuildingStorey);\r\n            propertySetBuildingStoreyCommon.ObjectType = \"IfcBuildingStorey\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Referenz ID\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조 ID\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.EntranceLevel\", \"EntranceLevel\");\r\n            ifcPSE.PropertyName = \"EntranceLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Eingangsebene\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Entrance Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"NiveauEntrée\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"エントランスレベル\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"입구 레벨\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EntranceLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.AboveGround\", \"AboveGround\");\r\n            ifcPSE.PropertyName = \"AboveGround\";\r\n            ifcPSE.PropertyType = PropertyType.Logical;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Oberirdisches Geschoss\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Above Ground\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"AuDessusSol\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"地上判別\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"지상 여부\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AboveGroundCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.SprinklerProtection\", \"SprinklerProtection\");\r\n            ifcPSE.PropertyName = \"SprinklerProtection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Sprinklerschutz\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sprinkler Protection\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ProtectionParSprinkler\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"スプリンクラー防御\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"스프링 클러 방어\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.SprinklerProtectionAutomatic\", \"SprinklerProtectionAutomatic\");\r\n            ifcPSE.PropertyName = \"SprinklerProtectionAutomatic\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Sprinklerschutz automatisch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sprinkler Protection Automatic\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ProtectionAutomatiqueParSprinkler\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"スプリンクラー防御自動区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"스프링 클러 방어 자동 구분\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionAutomaticCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.LoadBearingCapacity\", \"LoadBearingCapacity\");\r\n            ifcPSE.PropertyName = \"LoadBearingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.PlanarForce;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Deckentragfähigkeit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Load Bearing Capacity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Capacité porteuse\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.GrossPlannedArea\", \"GrossPlannedArea\");\r\n            ifcPSE.PropertyName = \"GrossPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttofläche nach Raumprogramm\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Planned Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Surface programmée brute\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"計画グロス面積\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"계획 그로스 면적\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.NetPlannedArea\", \"NetPlannedArea\");\r\n            ifcPSE.PropertyName = \"NetPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettofläche nach Raumprogramm\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Planned Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Surface programmée nette\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"計画ネット面積\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"계획 인터넷 면적\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingStoreyCommon\"))\r\n         {\r\n            propertySetBuildingStoreyCommon.EntityTypes.Add(IFCEntityType.IfcBuildingStorey);\r\n            propertySetBuildingStoreyCommon.ObjectType = \"IfcBuildingStorey\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.EntranceLevel\", \"EntranceLevel\");\r\n            ifcPSE.PropertyName = \"EntranceLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EntranceLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.AboveGround\", \"AboveGround\");\r\n            ifcPSE.PropertyName = \"AboveGround\";\r\n            ifcPSE.PropertyType = PropertyType.Logical;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AboveGroundCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.SprinklerProtection\", \"SprinklerProtection\");\r\n            ifcPSE.PropertyName = \"SprinklerProtection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.SprinklerProtectionAutomatic\", \"SprinklerProtectionAutomatic\");\r\n            ifcPSE.PropertyName = \"SprinklerProtectionAutomatic\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionAutomaticCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.LoadBearingCapacity\", \"LoadBearingCapacity\");\r\n            ifcPSE.PropertyName = \"LoadBearingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.PlanarForce;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.GrossPlannedArea\", \"GrossPlannedArea\");\r\n            ifcPSE.PropertyName = \"GrossPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.NetPlannedArea\", \"NetPlannedArea\");\r\n            ifcPSE.PropertyName = \"NetPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.ElevationOfSSLRelative\", \"ElevationOfSSLRelative\");\r\n            ifcPSE.PropertyName = \"ElevationOfSSLRelative\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElevationOfSSLRelativeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingStoreyCommon.ElevationOfFFLRelative\", \"ElevationOfFFLRelative\");\r\n            ifcPSE.PropertyName = \"ElevationOfFFLRelative\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElevationOfFFLRelativeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingStoreyCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBuildingStoreyCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BuildingSystemCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBuildingSystemCommon = new PropertySetDescription();\r\n         propertySetBuildingSystemCommon.Name = \"Pset_BuildingSystemCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingSystemCommon\"))\r\n         {\r\n            propertySetBuildingSystemCommon.EntityTypes.Add(IFCEntityType.IfcBuildingSystem);\r\n            propertySetBuildingSystemCommon.ObjectType = \"IfcBuildingSystem\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingSystemCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Kennzeichen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingSystemCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingSystemCommon\"))\r\n         {\r\n            propertySetBuildingSystemCommon.EntityTypes.Add(IFCEntityType.IfcBuildingSystem);\r\n            propertySetBuildingSystemCommon.ObjectType = \"IfcBuildingSystem\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingSystemCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingSystemCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBuildingSystemCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BuildingUse(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBuildingUse = new PropertySetDescription();\r\n         propertySetBuildingUse.Name = \"Pset_BuildingUse\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingUse\"))\r\n         {\r\n            propertySetBuildingUse.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.MarketCategory\", \"MarketCategory\");\r\n            ifcPSE.PropertyName = \"MarketCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.MarketSubCategory\", \"MarketSubCategory\");\r\n            ifcPSE.PropertyName = \"MarketSubCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketSubCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.PlanningControlStatus\", \"PlanningControlStatus\");\r\n            ifcPSE.PropertyName = \"PlanningControlStatus\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlanningControlStatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.NarrativeText\", \"NarrativeText\");\r\n            ifcPSE.PropertyName = \"NarrativeText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NarrativeTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.VacancyRateInCategoryNow\", \"VacancyRateInCategoryNow\");\r\n            ifcPSE.PropertyName = \"VacancyRateInCategoryNow\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VacancyRateInCategoryNowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.TenureModesAvailableNow\", \"TenureModesAvailableNow\");\r\n            ifcPSE.PropertyName = \"TenureModesAvailableNow\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TenureModesAvailableNowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.MarketSubCategoriesAvailableNow\", \"MarketSubCategoriesAvailableNow\");\r\n            ifcPSE.PropertyName = \"MarketSubCategoriesAvailableNow\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketSubCategoriesAvailableNowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.RentalRatesInCategoryNow\", \"RentalRatesInCategoryNow\");\r\n            ifcPSE.PropertyName = \"RentalRatesInCategoryNow\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Monetary;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RentalRatesInCategoryNowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.VacancyRateInCategoryFuture\", \"VacancyRateInCategoryFuture\");\r\n            ifcPSE.PropertyName = \"VacancyRateInCategoryFuture\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VacancyRateInCategoryFutureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.TenureModesAvailableFuture\", \"TenureModesAvailableFuture\");\r\n            ifcPSE.PropertyName = \"TenureModesAvailableFuture\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TenureModesAvailableFutureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.MarketSubCategoriesAvailableFuture\", \"MarketSubCategoriesAvailableFuture\");\r\n            ifcPSE.PropertyName = \"MarketSubCategoriesAvailableFuture\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketSubCategoriesAvailableFutureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.RentalRatesInCategoryFuture\", \"RentalRatesInCategoryFuture\");\r\n            ifcPSE.PropertyName = \"RentalRatesInCategoryFuture\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Monetary;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RentalRatesInCategoryFutureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingUse\"))\r\n         {\r\n            propertySetBuildingUse.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.MarketCategory\", \"MarketCategory\");\r\n            ifcPSE.PropertyName = \"MarketCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.MarketSubCategory\", \"MarketSubCategory\");\r\n            ifcPSE.PropertyName = \"MarketSubCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketSubCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.PlanningControlStatus\", \"PlanningControlStatus\");\r\n            ifcPSE.PropertyName = \"PlanningControlStatus\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlanningControlStatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.NarrativeText\", \"NarrativeText\");\r\n            ifcPSE.PropertyName = \"NarrativeText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NarrativeTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.VacancyRateInCategoryNow\", \"VacancyRateInCategoryNow\");\r\n            ifcPSE.PropertyName = \"VacancyRateInCategoryNow\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VacancyRateInCategoryNowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.TenureModesAvailableNow\", \"TenureModesAvailableNow\");\r\n            ifcPSE.PropertyName = \"TenureModesAvailableNow\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TenureModesAvailableNowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.MarketSubCategoriesAvailableNow\", \"MarketSubCategoriesAvailableNow\");\r\n            ifcPSE.PropertyName = \"MarketSubCategoriesAvailableNow\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketSubCategoriesAvailableNowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.RentalRatesInCategoryNow\", \"RentalRatesInCategoryNow\");\r\n            ifcPSE.PropertyName = \"RentalRatesInCategoryNow\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Monetary;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RentalRatesInCategoryNowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.VacancyRateInCategoryFuture\", \"VacancyRateInCategoryFuture\");\r\n            ifcPSE.PropertyName = \"VacancyRateInCategoryFuture\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VacancyRateInCategoryFutureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.TenureModesAvailableFuture\", \"TenureModesAvailableFuture\");\r\n            ifcPSE.PropertyName = \"TenureModesAvailableFuture\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TenureModesAvailableFutureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.MarketSubCategoriesAvailableFuture\", \"MarketSubCategoriesAvailableFuture\");\r\n            ifcPSE.PropertyName = \"MarketSubCategoriesAvailableFuture\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketSubCategoriesAvailableFutureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.RentalRatesInCategoryFuture\", \"RentalRatesInCategoryFuture\");\r\n            ifcPSE.PropertyName = \"RentalRatesInCategoryFuture\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Monetary;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RentalRatesInCategoryFutureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingUse\"))\r\n         {\r\n            propertySetBuildingUse.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            propertySetBuildingUse.ObjectType = \"IfcBuilding\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.MarketCategory\", \"MarketCategory\");\r\n            ifcPSE.PropertyName = \"MarketCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Market Category\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CategorieMarche\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.MarketSubCategory\", \"MarketSubCategory\");\r\n            ifcPSE.PropertyName = \"MarketSubCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Market Sub Category\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"SousCategorieMarche\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketSubCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.PlanningControlStatus\", \"PlanningControlStatus\");\r\n            ifcPSE.PropertyName = \"PlanningControlStatus\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Planning Control Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EtatPlanningControle\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlanningControlStatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.NarrativeText\", \"NarrativeText\");\r\n            ifcPSE.PropertyName = \"NarrativeText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Narrative Text\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TexteLibre\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NarrativeTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.VacancyRateInCategoryNow\", \"VacancyRateInCategoryNow\");\r\n            ifcPSE.PropertyName = \"VacancyRateInCategoryNow\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Vacancy Rate In Category Now\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TauxVacanceActuelParCategorie\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VacancyRateInCategoryNowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.TenureModesAvailableNow\", \"TenureModesAvailableNow\");\r\n            ifcPSE.PropertyName = \"TenureModesAvailableNow\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tenure Modes Available Now\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PossibilitesOccupationActuelles\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TenureModesAvailableNowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.MarketSubCategoriesAvailableNow\", \"MarketSubCategoriesAvailableNow\");\r\n            ifcPSE.PropertyName = \"MarketSubCategoriesAvailableNow\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Market Sub Categories Available Now\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DisponibilitesActuellesParSousCategories\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketSubCategoriesAvailableNowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.RentalRatesInCategoryNow\", \"RentalRatesInCategoryNow\");\r\n            ifcPSE.PropertyName = \"RentalRatesInCategoryNow\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Monetary;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Rental Rates In Category Now\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PrixActuelLoyerParCategorie\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RentalRatesInCategoryNowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.VacancyRateInCategoryFuture\", \"VacancyRateInCategoryFuture\");\r\n            ifcPSE.PropertyName = \"VacancyRateInCategoryFuture\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Vacancy Rate In Category Future\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TauxVacanceFuturParCategorie\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VacancyRateInCategoryFutureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.TenureModesAvailableFuture\", \"TenureModesAvailableFuture\");\r\n            ifcPSE.PropertyName = \"TenureModesAvailableFuture\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tenure Modes Available Future\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PossibilitesOccupationFutures\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TenureModesAvailableFutureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.MarketSubCategoriesAvailableFuture\", \"MarketSubCategoriesAvailableFuture\");\r\n            ifcPSE.PropertyName = \"MarketSubCategoriesAvailableFuture\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Market Sub Categories Available Future\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DisponibilitesFuturesParSousCategories\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketSubCategoriesAvailableFutureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.RentalRatesInCategoryFuture\", \"RentalRatesInCategoryFuture\");\r\n            ifcPSE.PropertyName = \"RentalRatesInCategoryFuture\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Monetary;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Rental Rates In Category Future\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PrixFuturLoyerParCategorie\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RentalRatesInCategoryFutureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingUse\"))\r\n         {\r\n            propertySetBuildingUse.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            propertySetBuildingUse.ObjectType = \"IfcBuilding\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.MarketCategory\", \"MarketCategory\");\r\n            ifcPSE.PropertyName = \"MarketCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.MarketSubCategory\", \"MarketSubCategory\");\r\n            ifcPSE.PropertyName = \"MarketSubCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketSubCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.PlanningControlStatus\", \"PlanningControlStatus\");\r\n            ifcPSE.PropertyName = \"PlanningControlStatus\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlanningControlStatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.NarrativeText\", \"NarrativeText\");\r\n            ifcPSE.PropertyName = \"NarrativeText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NarrativeTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.VacancyRateInCategoryNow\", \"VacancyRateInCategoryNow\");\r\n            ifcPSE.PropertyName = \"VacancyRateInCategoryNow\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VacancyRateInCategoryNowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.TenureModesAvailableNow\", \"TenureModesAvailableNow\");\r\n            ifcPSE.PropertyName = \"TenureModesAvailableNow\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TenureModesAvailableNowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.MarketSubCategoriesAvailableNow\", \"MarketSubCategoriesAvailableNow\");\r\n            ifcPSE.PropertyName = \"MarketSubCategoriesAvailableNow\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketSubCategoriesAvailableNowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.RentalRatesInCategoryNow\", \"RentalRatesInCategoryNow\");\r\n            ifcPSE.PropertyName = \"RentalRatesInCategoryNow\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Monetary;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RentalRatesInCategoryNowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.VacancyRateInCategoryFuture\", \"VacancyRateInCategoryFuture\");\r\n            ifcPSE.PropertyName = \"VacancyRateInCategoryFuture\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VacancyRateInCategoryFutureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.TenureModesAvailableFuture\", \"TenureModesAvailableFuture\");\r\n            ifcPSE.PropertyName = \"TenureModesAvailableFuture\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TenureModesAvailableFutureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.MarketSubCategoriesAvailableFuture\", \"MarketSubCategoriesAvailableFuture\");\r\n            ifcPSE.PropertyName = \"MarketSubCategoriesAvailableFuture\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketSubCategoriesAvailableFutureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUse.RentalRatesInCategoryFuture\", \"RentalRatesInCategoryFuture\");\r\n            ifcPSE.PropertyName = \"RentalRatesInCategoryFuture\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Monetary;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RentalRatesInCategoryFutureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUse.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBuildingUse);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BuildingUseAdjacent(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBuildingUseAdjacent = new PropertySetDescription();\r\n         propertySetBuildingUseAdjacent.Name = \"Pset_BuildingUseAdjacent\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingUseAdjacent\"))\r\n         {\r\n            propertySetBuildingUseAdjacent.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUseAdjacent.MarketCategory\", \"MarketCategory\");\r\n            ifcPSE.PropertyName = \"MarketCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUseAdjacent.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUseAdjacent.MarketSubCategory\", \"MarketSubCategory\");\r\n            ifcPSE.PropertyName = \"MarketSubCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketSubCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUseAdjacent.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUseAdjacent.PlanningControlStatus\", \"PlanningControlStatus\");\r\n            ifcPSE.PropertyName = \"PlanningControlStatus\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlanningControlStatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUseAdjacent.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUseAdjacent.NarrativeText\", \"NarrativeText\");\r\n            ifcPSE.PropertyName = \"NarrativeText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NarrativeTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUseAdjacent.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingUseAdjacent\"))\r\n         {\r\n            propertySetBuildingUseAdjacent.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUseAdjacent.MarketCategory\", \"MarketCategory\");\r\n            ifcPSE.PropertyName = \"MarketCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUseAdjacent.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUseAdjacent.MarketSubCategory\", \"MarketSubCategory\");\r\n            ifcPSE.PropertyName = \"MarketSubCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketSubCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUseAdjacent.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUseAdjacent.PlanningControlStatus\", \"PlanningControlStatus\");\r\n            ifcPSE.PropertyName = \"PlanningControlStatus\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlanningControlStatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUseAdjacent.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUseAdjacent.NarrativeText\", \"NarrativeText\");\r\n            ifcPSE.PropertyName = \"NarrativeText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NarrativeTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUseAdjacent.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingUseAdjacent\"))\r\n         {\r\n            propertySetBuildingUseAdjacent.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            propertySetBuildingUseAdjacent.ObjectType = \"IfcBuilding\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUseAdjacent.MarketCategory\", \"MarketCategory\");\r\n            ifcPSE.PropertyName = \"MarketCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Market Category\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CategorieUsage\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUseAdjacent.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUseAdjacent.MarketSubCategory\", \"MarketSubCategory\");\r\n            ifcPSE.PropertyName = \"MarketSubCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Market Sub Category\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"SousCategorieUsage\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketSubCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUseAdjacent.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUseAdjacent.PlanningControlStatus\", \"PlanningControlStatus\");\r\n            ifcPSE.PropertyName = \"PlanningControlStatus\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Planning Control Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EtatPlanningControle\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlanningControlStatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUseAdjacent.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUseAdjacent.NarrativeText\", \"NarrativeText\");\r\n            ifcPSE.PropertyName = \"NarrativeText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Narrative Text\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CommentaireUsage\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NarrativeTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUseAdjacent.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingUseAdjacent\"))\r\n         {\r\n            propertySetBuildingUseAdjacent.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            propertySetBuildingUseAdjacent.ObjectType = \"IfcBuilding\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUseAdjacent.MarketCategory\", \"MarketCategory\");\r\n            ifcPSE.PropertyName = \"MarketCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUseAdjacent.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUseAdjacent.MarketSubCategory\", \"MarketSubCategory\");\r\n            ifcPSE.PropertyName = \"MarketSubCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarketSubCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUseAdjacent.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUseAdjacent.PlanningControlStatus\", \"PlanningControlStatus\");\r\n            ifcPSE.PropertyName = \"PlanningControlStatus\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlanningControlStatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUseAdjacent.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingUseAdjacent.NarrativeText\", \"NarrativeText\");\r\n            ifcPSE.PropertyName = \"NarrativeText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NarrativeTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingUseAdjacent.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBuildingUseAdjacent);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BuildingWaterStorage(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBuildingWaterStorage = new PropertySetDescription();\r\n         propertySetBuildingWaterStorage.Name = \"Pset_BuildingWaterStorage\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingWaterStorage\"))\r\n         {\r\n            propertySetBuildingWaterStorage.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingWaterStorage.WaterStorageRatePerPerson\", \"WaterStorageRatePerPerson\");\r\n            ifcPSE.PropertyName = \"WaterStorageRatePerPerson\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterStorageRatePerPersonCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingWaterStorage.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingWaterStorage.OneDayPotableWater\", \"OneDayPotableWater\");\r\n            ifcPSE.PropertyName = \"OneDayPotableWater\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OneDayPotableWaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingWaterStorage.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingWaterStorage.OneDayEssentialWater\", \"OneDayEssentialWater\");\r\n            ifcPSE.PropertyName = \"OneDayEssentialWater\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OneDayEssentialWaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingWaterStorage.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingWaterStorage.OneDayCoolingTowerMakeupWater\", \"OneDayCoolingTowerMakeupWater\");\r\n            ifcPSE.PropertyName = \"OneDayCoolingTowerMakeupWater\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OneDayCoolingTowerMakeupWaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingWaterStorage.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingWaterStorage.OneDayProcessOrProductionWater\", \"OneDayProcessOrProductionWater\");\r\n            ifcPSE.PropertyName = \"OneDayProcessOrProductionWater\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OneDayProcessOrProductionWaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingWaterStorage.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuildingWaterStorage\"))\r\n         {\r\n            propertySetBuildingWaterStorage.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingWaterStorage.WaterStorageRatePerPerson\", \"WaterStorageRatePerPerson\");\r\n            ifcPSE.PropertyName = \"WaterStorageRatePerPerson\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterStorageRatePerPersonCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingWaterStorage.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingWaterStorage.OneDayPotableWater\", \"OneDayPotableWater\");\r\n            ifcPSE.PropertyName = \"OneDayPotableWater\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OneDayPotableWaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingWaterStorage.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingWaterStorage.OneDayEssentialWater\", \"OneDayEssentialWater\");\r\n            ifcPSE.PropertyName = \"OneDayEssentialWater\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OneDayEssentialWaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingWaterStorage.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingWaterStorage.OneDayCoolingTowerMakeupWater\", \"OneDayCoolingTowerMakeupWater\");\r\n            ifcPSE.PropertyName = \"OneDayCoolingTowerMakeupWater\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OneDayCoolingTowerMakeupWaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingWaterStorage.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuildingWaterStorage.OneDayProcessOrProductionWater\", \"OneDayProcessOrProductionWater\");\r\n            ifcPSE.PropertyName = \"OneDayProcessOrProductionWater\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OneDayProcessOrProductionWaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuildingWaterStorage.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBuildingWaterStorage);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BuiltSystemRailwayLine(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBuiltSystemRailwayLine = new PropertySetDescription();\r\n         propertySetBuiltSystemRailwayLine.Name = \"Pset_BuiltSystemRailwayLine\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuiltSystemRailwayLine\"))\r\n         {\r\n            propertySetBuiltSystemRailwayLine.EntityTypes.Add(IFCEntityType.IfcBuiltSystem);\r\n            propertySetBuiltSystemRailwayLine.ObjectType = \"IfcBuiltSystem\";\r\n            propertySetBuiltSystemRailwayLine.PredefinedType = \"RAILWAYLINE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuiltSystemRailwayLine.LineID\", \"LineID\");\r\n            ifcPSE.PropertyName = \"LineID\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LineIDCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuiltSystemRailwayLine.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuiltSystemRailwayLine.IsElectrified\", \"IsElectrified\");\r\n            ifcPSE.PropertyName = \"IsElectrified\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsElectrifiedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuiltSystemRailwayLine.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuiltSystemRailwayLine.LineCharacteristic\", \"LineCharacteristic\");\r\n            ifcPSE.PropertyName = \"LineCharacteristic\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_LineCharacteristic);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LineCharacteristicCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuiltSystemRailwayLine.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBuiltSystemRailwayLine);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BuiltSystemRailwayTrack(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBuiltSystemRailwayTrack = new PropertySetDescription();\r\n         propertySetBuiltSystemRailwayTrack.Name = \"Pset_BuiltSystemRailwayTrack\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BuiltSystemRailwayTrack\"))\r\n         {\r\n            propertySetBuiltSystemRailwayTrack.EntityTypes.Add(IFCEntityType.IfcBuiltSystem);\r\n            propertySetBuiltSystemRailwayTrack.ObjectType = \"IfcBuiltSystem\";\r\n            propertySetBuiltSystemRailwayTrack.PredefinedType = \"RAILWAYTRACK\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuiltSystemRailwayTrack.TrackID\", \"TrackID\");\r\n            ifcPSE.PropertyName = \"TrackID\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrackIDCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuiltSystemRailwayTrack.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuiltSystemRailwayTrack.TrackNumber\", \"TrackNumber\");\r\n            ifcPSE.PropertyName = \"TrackNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrackNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuiltSystemRailwayTrack.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuiltSystemRailwayTrack.TrackUsage\", \"TrackUsage\");\r\n            ifcPSE.PropertyName = \"TrackUsage\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TrackUsage);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrackUsageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuiltSystemRailwayTrack.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BuiltSystemRailwayTrack.TrackCharacteristic\", \"TrackCharacteristic\");\r\n            ifcPSE.PropertyName = \"TrackCharacteristic\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TrackCharacteristic);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrackCharacteristicCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBuiltSystemRailwayTrack.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBuiltSystemRailwayTrack);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_BurnerTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetBurnerTypeCommon = new PropertySetDescription();\r\n         propertySetBurnerTypeCommon.Name = \"Pset_BurnerTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BurnerTypeCommon\"))\r\n         {\r\n            propertySetBurnerTypeCommon.EntityTypes.Add(IFCEntityType.IfcBurner);\r\n            propertySetBurnerTypeCommon.ObjectType = \"IfcBurner\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BurnerTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Référence\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBurnerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BurnerTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Etat\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBurnerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BurnerTypeCommon.EnergySource\", \"EnergySource\");\r\n            ifcPSE.PropertyName = \"EnergySource\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_EnergySource);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Energy Source\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"SourceEnergie\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"エネルギ源\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergySourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBurnerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_BurnerTypeCommon\"))\r\n         {\r\n            propertySetBurnerTypeCommon.EntityTypes.Add(IFCEntityType.IfcBurner);\r\n            propertySetBurnerTypeCommon.EntityTypes.Add(IFCEntityType.IfcBurnerType);\r\n            propertySetBurnerTypeCommon.ObjectType = \"IfcBurner\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_BurnerTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBurnerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BurnerTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBurnerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_BurnerTypeCommon.EnergySource\", \"EnergySource\");\r\n            ifcPSE.PropertyName = \"EnergySource\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_EnergySource);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergySourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetBurnerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetBurnerTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableCarrierFittingTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableCarrierFittingTypeCommon = new PropertySetDescription();\r\n         propertySetCableCarrierFittingTypeCommon.Name = \"Pset_CableCarrierFittingTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierFittingTypeCommon\"))\r\n         {\r\n            propertySetCableCarrierFittingTypeCommon.EntityTypes.Add(IFCEntityType.IfcCableCarrierFitting);\r\n            propertySetCableCarrierFittingTypeCommon.ObjectType = \"IfcCableCarrierFitting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierFittingTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierFittingTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierFittingTypeCommon\"))\r\n         {\r\n            propertySetCableCarrierFittingTypeCommon.EntityTypes.Add(IFCEntityType.IfcCableCarrierFitting);\r\n            propertySetCableCarrierFittingTypeCommon.EntityTypes.Add(IFCEntityType.IfcCableCarrierFittingType);\r\n            propertySetCableCarrierFittingTypeCommon.ObjectType = \"IfcCableCarrierFitting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierFittingTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierFittingTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableCarrierFittingTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableCarrierSegmentTypeCableLadderSegment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableCarrierSegmentTypeCableLadderSegment = new PropertySetDescription();\r\n         propertySetCableCarrierSegmentTypeCableLadderSegment.Name = \"Pset_CableCarrierSegmentTypeCableLadderSegment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeCableLadderSegment\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegmentType);\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.ObjectType = \"CableLadderSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableLadderSegment.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableLadderSegment.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableLadderSegment.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableLadderSegment.LadderConfiguration\", \"LadderConfiguration\");\r\n            ifcPSE.PropertyName = \"LadderConfiguration\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderConfigurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeCableLadderSegment\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegmentType);\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.ObjectType = \"IfcCableCarrierSegmentType\";\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.PredefinedType = \"CABLELADDERSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableLadderSegment.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableLadderSegment.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableLadderSegment.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableLadderSegment.LadderConfiguration\", \"LadderConfiguration\");\r\n            ifcPSE.PropertyName = \"LadderConfiguration\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderConfigurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeCableLadderSegment\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegment);\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.ObjectType = \"IfcCableCarrierSegment\";\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.PredefinedType = \"CABLELADDERSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableLadderSegment.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"公称幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"공칭 폭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableLadderSegment.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"公称高\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"공칭 높이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableLadderSegment.LadderConfiguration\", \"LadderConfiguration\");\r\n            ifcPSE.PropertyName = \"LadderConfiguration\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ladder Configuration\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"梯子設定\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"사다리 설정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderConfigurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeCableLadderSegment\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegment);\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegmentType);\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.ObjectType = \"IfcCableCarrierSegment\";\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.PredefinedType = \"CABLELADDERSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableLadderSegment.LadderConfiguration\", \"LadderConfiguration\");\r\n            ifcPSE.PropertyName = \"LadderConfiguration\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderConfigurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableLadderSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableCarrierSegmentTypeCableLadderSegment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableCarrierSegmentTypeCableTraySegment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableCarrierSegmentTypeCableTraySegment = new PropertySetDescription();\r\n         propertySetCableCarrierSegmentTypeCableTraySegment.Name = \"Pset_CableCarrierSegmentTypeCableTraySegment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeCableTraySegment\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegmentType);\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.ObjectType = \"CableTraySegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTraySegment.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTraySegment.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTraySegment.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTraySegment.HasCover\", \"HasCover\");\r\n            ifcPSE.PropertyName = \"HasCover\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasCoverCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeCableTraySegment\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegmentType);\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.ObjectType = \"IfcCableCarrierSegmentType\";\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.PredefinedType = \"CABLETRAYSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTraySegment.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTraySegment.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTraySegment.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTraySegment.HasCover\", \"HasCover\");\r\n            ifcPSE.PropertyName = \"HasCover\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasCoverCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeCableTraySegment\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegment);\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.ObjectType = \"IfcCableCarrierSegment\";\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.PredefinedType = \"CABLETRAYSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTraySegment.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"公称幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"공칭 폭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTraySegment.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"公称高\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"공칭 높이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTraySegment.HasCover\", \"HasCover\");\r\n            ifcPSE.PropertyName = \"HasCover\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Cover\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"カバー\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"커버\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasCoverCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeCableTraySegment\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegment);\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegmentType);\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.ObjectType = \"IfcCableCarrierSegment\";\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.PredefinedType = \"CABLETRAYSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTraySegment.HasCover\", \"HasCover\");\r\n            ifcPSE.PropertyName = \"HasCover\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasCoverCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTraySegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableCarrierSegmentTypeCableTraySegment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableCarrierSegmentTypeCableTrunkingSegment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableCarrierSegmentTypeCableTrunkingSegment = new PropertySetDescription();\r\n         propertySetCableCarrierSegmentTypeCableTrunkingSegment.Name = \"Pset_CableCarrierSegmentTypeCableTrunkingSegment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeCableTrunkingSegment\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegmentType);\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.ObjectType = \"CableTrunkingSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTrunkingSegment.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTrunkingSegment.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTrunkingSegment.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTrunkingSegment.NumberOfCompartments\", \"NumberOfCompartments\");\r\n            ifcPSE.PropertyName = \"NumberOfCompartments\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCompartmentsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeCableTrunkingSegment\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegmentType);\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.ObjectType = \"IfcCableCarrierSegmentType\";\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.PredefinedType = \"CABLETRUNKINGSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTrunkingSegment.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTrunkingSegment.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTrunkingSegment.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTrunkingSegment.NumberOfCompartments\", \"NumberOfCompartments\");\r\n            ifcPSE.PropertyName = \"NumberOfCompartments\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCompartmentsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeCableTrunkingSegment\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegment);\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.ObjectType = \"IfcCableCarrierSegment\";\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.PredefinedType = \"CABLETRUNKINGSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTrunkingSegment.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"公称幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"공칭 폭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTrunkingSegment.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"公称高\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"공칭높이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTrunkingSegment.NumberOfCompartments\", \"NumberOfCompartments\");\r\n            ifcPSE.PropertyName = \"NumberOfCompartments\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Compartments\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"区画数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"구획 수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCompartmentsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeCableTrunkingSegment\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegment);\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegmentType);\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.ObjectType = \"IfcCableCarrierSegment\";\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.PredefinedType = \"CABLETRUNKINGSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCableTrunkingSegment.NumberOfCompartments\", \"NumberOfCompartments\");\r\n            ifcPSE.PropertyName = \"NumberOfCompartments\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCompartmentsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCableTrunkingSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableCarrierSegmentTypeCableTrunkingSegment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableCarrierSegmentTypeCatenaryWire(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableCarrierSegmentTypeCatenaryWire = new PropertySetDescription();\r\n         propertySetCableCarrierSegmentTypeCatenaryWire.Name = \"Pset_CableCarrierSegmentTypeCatenaryWire\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeCatenaryWire\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeCatenaryWire.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegment);\r\n            propertySetCableCarrierSegmentTypeCatenaryWire.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegmentType);\r\n            propertySetCableCarrierSegmentTypeCatenaryWire.ObjectType = \"IfcCableCarrierSegment\";\r\n            propertySetCableCarrierSegmentTypeCatenaryWire.PredefinedType = \"CATENARYWIRE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCatenaryWire.ACResistance\", \"ACResistance\");\r\n            ifcPSE.PropertyName = \"ACResistance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ACResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCatenaryWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCatenaryWire.UltimateTensileStrength\", \"UltimateTensileStrength\");\r\n            ifcPSE.PropertyName = \"UltimateTensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UltimateTensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCatenaryWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCatenaryWire.CatenaryWireType\", \"CatenaryWireType\");\r\n            ifcPSE.PropertyName = \"CatenaryWireType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CatenaryWireTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCatenaryWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCatenaryWire.ThermalExpansionCoefficient\", \"ThermalExpansionCoefficient\");\r\n            ifcPSE.PropertyName = \"ThermalExpansionCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalExpansionCoefficient;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalExpansionCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCatenaryWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCatenaryWire.CurrentCarryingCapacity\", \"CurrentCarryingCapacity\");\r\n            ifcPSE.PropertyName = \"CurrentCarryingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentCarryingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCatenaryWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCatenaryWire.DCResistance\", \"DCResistance\");\r\n            ifcPSE.PropertyName = \"DCResistance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DCResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCatenaryWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCatenaryWire.LayRatio\", \"LayRatio\");\r\n            ifcPSE.PropertyName = \"LayRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LayRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCatenaryWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCatenaryWire.MassPerLength\", \"MassPerLength\");\r\n            ifcPSE.PropertyName = \"MassPerLength\";\r\n            ifcPSE.PropertyType = PropertyType.MassPerLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MassPerLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCatenaryWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCatenaryWire.MechanicalTension\", \"MechanicalTension\");\r\n            ifcPSE.PropertyName = \"MechanicalTension\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalTensionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCatenaryWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCatenaryWire.PhysicalDescriptionReference\", \"PhysicalDescriptionReference\");\r\n            ifcPSE.PropertyName = \"PhysicalDescriptionReference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PhysicalDescriptionReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCatenaryWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCatenaryWire.StrandingMethod\", \"StrandingMethod\");\r\n            ifcPSE.PropertyName = \"StrandingMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StrandingMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCatenaryWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCatenaryWire.TensileStrength\", \"TensileStrength\");\r\n            ifcPSE.PropertyName = \"TensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCatenaryWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCatenaryWire.YoungModulus\", \"YoungModulus\");\r\n            ifcPSE.PropertyName = \"YoungModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCatenaryWire.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableCarrierSegmentTypeCatenaryWire);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableCarrierSegmentTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableCarrierSegmentTypeCommon = new PropertySetDescription();\r\n         propertySetCableCarrierSegmentTypeCommon.Name = \"Pset_CableCarrierSegmentTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeCommon\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegment);\r\n            propertySetCableCarrierSegmentTypeCommon.ObjectType = \"IfcCableCarrierSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeCommon\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegment);\r\n            propertySetCableCarrierSegmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegmentType);\r\n            propertySetCableCarrierSegmentTypeCommon.ObjectType = \"IfcCableCarrierSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableCarrierSegmentTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableCarrierSegmentTypeConduitSegment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableCarrierSegmentTypeConduitSegment = new PropertySetDescription();\r\n         propertySetCableCarrierSegmentTypeConduitSegment.Name = \"Pset_CableCarrierSegmentTypeConduitSegment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeConduitSegment\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeConduitSegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegmentType);\r\n            propertySetCableCarrierSegmentTypeConduitSegment.ObjectType = \"ConduitSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.ConduitShapeType\", \"ConduitShapeType\");\r\n            ifcPSE.PropertyName = \"ConduitShapeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_ConduitShapeType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConduitShapeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.IsRigid\", \"IsRigid\");\r\n            ifcPSE.PropertyName = \"IsRigid\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsRigidCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeConduitSegment\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeConduitSegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegmentType);\r\n            propertySetCableCarrierSegmentTypeConduitSegment.ObjectType = \"IfcCableCarrierSegmentType\";\r\n            propertySetCableCarrierSegmentTypeConduitSegment.PredefinedType = \"CONDUITSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.ConduitShapeType\", \"ConduitShapeType\");\r\n            ifcPSE.PropertyName = \"ConduitShapeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ConduitShapeType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConduitShapeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.IsRigid\", \"IsRigid\");\r\n            ifcPSE.PropertyName = \"IsRigid\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsRigidCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeConduitSegment\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeConduitSegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegment);\r\n            propertySetCableCarrierSegmentTypeConduitSegment.ObjectType = \"IfcCableCarrierSegment\";\r\n            propertySetCableCarrierSegmentTypeConduitSegment.PredefinedType = \"CONDUITSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"公称幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"공칭 폭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"公称高\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"공칭 높이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.ConduitShapeType\", \"ConduitShapeType\");\r\n            ifcPSE.PropertyName = \"ConduitShapeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ConduitShapeType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Conduit Shape Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電線管のタイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전선관의 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConduitShapeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.IsRigid\", \"IsRigid\");\r\n            ifcPSE.PropertyName = \"IsRigid\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Rigid\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"鋼管\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"강관\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsRigidCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeConduitSegment\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeConduitSegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegment);\r\n            propertySetCableCarrierSegmentTypeConduitSegment.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegmentType);\r\n            propertySetCableCarrierSegmentTypeConduitSegment.ObjectType = \"IfcCableCarrierSegment\";\r\n            propertySetCableCarrierSegmentTypeConduitSegment.PredefinedType = \"CONDUITSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.ConduitShapeType\", \"ConduitShapeType\");\r\n            ifcPSE.PropertyName = \"ConduitShapeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ConduitShapeType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConduitShapeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.IsRigid\", \"IsRigid\");\r\n            ifcPSE.PropertyName = \"IsRigid\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsRigidCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeConduitSegment.NominalDiameter\", \"NominalDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeConduitSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableCarrierSegmentTypeConduitSegment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableCarrierSegmentTypeDropper(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableCarrierSegmentTypeDropper = new PropertySetDescription();\r\n         propertySetCableCarrierSegmentTypeDropper.Name = \"Pset_CableCarrierSegmentTypeDropper\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableCarrierSegmentTypeDropper\"))\r\n         {\r\n            propertySetCableCarrierSegmentTypeDropper.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegment);\r\n            propertySetCableCarrierSegmentTypeDropper.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegmentType);\r\n            propertySetCableCarrierSegmentTypeDropper.ObjectType = \"IfcCableCarrierSegment\";\r\n            propertySetCableCarrierSegmentTypeDropper.PredefinedType = \"DROPPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeDropper.CurrentCarryingCapacity\", \"CurrentCarryingCapacity\");\r\n            ifcPSE.PropertyName = \"CurrentCarryingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentCarryingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeDropper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeDropper.TensileStrength\", \"TensileStrength\");\r\n            ifcPSE.PropertyName = \"TensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeDropper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeDropper.AssemblyInstruction\", \"AssemblyInstruction\");\r\n            ifcPSE.PropertyName = \"AssemblyInstruction\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyInstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeDropper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeDropper.IsRigid\", \"IsRigid\");\r\n            ifcPSE.PropertyName = \"IsRigid\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsRigidCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeDropper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeDropper.UltimateTensileStrength\", \"UltimateTensileStrength\");\r\n            ifcPSE.PropertyName = \"UltimateTensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UltimateTensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeDropper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeDropper.IsAdjustable\", \"IsAdjustable\");\r\n            ifcPSE.PropertyName = \"IsAdjustable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsAdjustableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeDropper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeDropper.IsCurrentCarrying\", \"IsCurrentCarrying\");\r\n            ifcPSE.PropertyName = \"IsCurrentCarrying\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsCurrentCarryingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeDropper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableCarrierSegmentTypeDropper.NominalLoad\", \"NominalLoad\");\r\n            ifcPSE.PropertyName = \"NominalLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableCarrierSegmentTypeDropper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableCarrierSegmentTypeDropper);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableFittingTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableFittingTypeCommon = new PropertySetDescription();\r\n         propertySetCableFittingTypeCommon.Name = \"Pset_CableFittingTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableFittingTypeCommon\"))\r\n         {\r\n            propertySetCableFittingTypeCommon.EntityTypes.Add(IFCEntityType.IfcCableFitting);\r\n            propertySetCableFittingTypeCommon.ObjectType = \"IfcCableFitting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableFittingTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableFittingTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableFittingTypeCommon\"))\r\n         {\r\n            propertySetCableFittingTypeCommon.EntityTypes.Add(IFCEntityType.IfcCableFitting);\r\n            propertySetCableFittingTypeCommon.EntityTypes.Add(IFCEntityType.IfcCableFittingType);\r\n            propertySetCableFittingTypeCommon.ObjectType = \"IfcCableFitting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableFittingTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableFittingTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableFittingTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableFittingTypeExit(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableFittingTypeExit = new PropertySetDescription();\r\n         propertySetCableFittingTypeExit.Name = \"Pset_CableFittingTypeExit\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableFittingTypeExit\"))\r\n         {\r\n            propertySetCableFittingTypeExit.EntityTypes.Add(IFCEntityType.IfcCableFitting);\r\n            propertySetCableFittingTypeExit.EntityTypes.Add(IFCEntityType.IfcCableFittingType);\r\n            propertySetCableFittingTypeExit.ObjectType = \"IfcCableFitting\";\r\n            propertySetCableFittingTypeExit.PredefinedType = \"EXIT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableFittingTypeExit.GroundResistance\", \"GroundResistance\");\r\n            ifcPSE.PropertyName = \"GroundResistance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GroundResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableFittingTypeExit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableFittingTypeExit);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableFittingTypeFanout(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableFittingTypeFanout = new PropertySetDescription();\r\n         propertySetCableFittingTypeFanout.Name = \"Pset_CableFittingTypeFanout\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableFittingTypeFanout\"))\r\n         {\r\n            propertySetCableFittingTypeFanout.EntityTypes.Add(IFCEntityType.IfcCableFitting);\r\n            propertySetCableFittingTypeFanout.EntityTypes.Add(IFCEntityType.IfcCableFittingType);\r\n            propertySetCableFittingTypeFanout.ObjectType = \"IfcCableFitting\";\r\n            propertySetCableFittingTypeFanout.PredefinedType = \"FANOUT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableFittingTypeFanout.NumberOfTubes\", \"NumberOfTubes\");\r\n            ifcPSE.PropertyName = \"NumberOfTubes\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfTubesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableFittingTypeFanout.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableFittingTypeFanout.TubeDiameter\", \"TubeDiameter\");\r\n            ifcPSE.PropertyName = \"TubeDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TubeDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableFittingTypeFanout.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableFittingTypeFanout);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableSegmentConnector(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableSegmentConnector = new PropertySetDescription();\r\n         propertySetCableSegmentConnector.Name = \"Pset_CableSegmentConnector\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentConnector\"))\r\n         {\r\n            propertySetCableSegmentConnector.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentConnector.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetCableSegmentConnector.ObjectType = \"IfcCableSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentConnector.ConnectorAColour\", \"ConnectorAColour\");\r\n            ifcPSE.PropertyName = \"ConnectorAColour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectorAColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentConnector.ConnectorBColour\", \"ConnectorBColour\");\r\n            ifcPSE.PropertyName = \"ConnectorBColour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectorBColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentConnector.ConnectorAType\", \"ConnectorAType\");\r\n            ifcPSE.PropertyName = \"ConnectorAType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectorATypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentConnector.ConnectorBType\", \"ConnectorBType\");\r\n            ifcPSE.PropertyName = \"ConnectorBType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectorBTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentConnector.ConnectorAGender\", \"ConnectorAGender\");\r\n            ifcPSE.PropertyName = \"ConnectorAGender\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DistributionPortGender);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectorAGenderCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentConnector.ConnectorBGender\", \"ConnectorBGender\");\r\n            ifcPSE.PropertyName = \"ConnectorBGender\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DistributionPortGender);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectorBGenderCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentConnector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableSegmentConnector);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableSegmentOccurenceFiberSegment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableSegmentOccurenceFiberSegment = new PropertySetDescription();\r\n         propertySetCableSegmentOccurenceFiberSegment.Name = \"Pset_CableSegmentOccurenceFiberSegment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentOccurenceFiberSegment\"))\r\n         {\r\n            propertySetCableSegmentOccurenceFiberSegment.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentOccurenceFiberSegment.ObjectType = \"IfcCableSegment\";\r\n            propertySetCableSegmentOccurenceFiberSegment.PredefinedType = \"FIBERSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurenceFiberSegment.InUse\", \"InUse\");\r\n            ifcPSE.PropertyName = \"InUse\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InUseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurenceFiberSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableSegmentOccurenceFiberSegment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableSegmentOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableSegmentOccurrence = new PropertySetDescription();\r\n         propertySetCableSegmentOccurrence.Name = \"Pset_CableSegmentOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentOccurrence\"))\r\n         {\r\n            propertySetCableSegmentOccurrence.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentOccurrence.ObjectType = \"IfcCableSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.DesignAmbientTemperature\", \"DesignAmbientTemperature\");\r\n            ifcPSE.PropertyName = \"DesignAmbientTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Design Ambient Temperature\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DesignAmbientTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.UserCorrectionFactor\", \"UserCorrectionFactor\");\r\n            ifcPSE.PropertyName = \"UserCorrectionFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"User Correction Factor\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UserCorrectionFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.NumberOfParallelCircuits\", \"NumberOfParallelCircuits\");\r\n            ifcPSE.PropertyName = \"NumberOfParallelCircuits\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Parallel Circuits\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfParallelCircuitsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.InstallationMethod\", \"InstallationMethod\");\r\n            ifcPSE.PropertyName = \"InstallationMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Installation Method\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstallationMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.InstallationMethodFlagEnum\", \"InstallationMethodFlagEnum\");\r\n            ifcPSE.PropertyName = \"InstallationMethodFlagEnum\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_InstallationMethodFlagEnum);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Installation Method Flag Enum\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstallationMethodFlagEnumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.DistanceBetweenParallelCircuits\", \"DistanceBetweenParallelCircuits\");\r\n            ifcPSE.PropertyName = \"DistanceBetweenParallelCircuits\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Distance Between Parallel Circuits\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DistanceBetweenParallelCircuitsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.SoilConductivity\", \"SoilConductivity\");\r\n            ifcPSE.PropertyName = \"SoilConductivity\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalConductivity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Soil Conductivity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoilConductivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.CarrierStackNumber\", \"CarrierStackNumber\");\r\n            ifcPSE.PropertyName = \"CarrierStackNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Carrier Stack Number\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CarrierStackNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.MountingMethod\", \"MountingMethod\");\r\n            ifcPSE.PropertyName = \"MountingMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_MountingMethodEnum);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mounting Method\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.IsHorizontalCable\", \"IsHorizontalCable\");\r\n            ifcPSE.PropertyName = \"IsHorizontalCable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Horizontal Cable\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsHorizontalCableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.IsMountedFlatCable\", \"IsMountedFlatCable\");\r\n            ifcPSE.PropertyName = \"IsMountedFlatCable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Mounted Flat Cable\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsMountedFlatCableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.CurrentCarryingCapasity\", \"CurrentCarryingCapasity\");\r\n            ifcPSE.PropertyName = \"CurrentCarryingCapasity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Current Carrying Capasity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentCarryingCapasityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.MaximumCableLength\", \"MaximumCableLength\");\r\n            ifcPSE.PropertyName = \"MaximumCableLength\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Cable Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumCableLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.PowerLoss\", \"PowerLoss\");\r\n            ifcPSE.PropertyName = \"PowerLoss\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Power Loss\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentOccurrence\"))\r\n         {\r\n            propertySetCableSegmentOccurrence.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentOccurrence.ObjectType = \"IfcCableSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.DesignAmbientTemperature\", \"DesignAmbientTemperature\");\r\n            ifcPSE.PropertyName = \"DesignAmbientTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DesignAmbientTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.UserCorrectionFactor\", \"UserCorrectionFactor\");\r\n            ifcPSE.PropertyName = \"UserCorrectionFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UserCorrectionFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.NumberOfParallelCircuits\", \"NumberOfParallelCircuits\");\r\n            ifcPSE.PropertyName = \"NumberOfParallelCircuits\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfParallelCircuitsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.InstallationMethod\", \"InstallationMethod\");\r\n            ifcPSE.PropertyName = \"InstallationMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstallationMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.InstallationMethodFlagEnum\", \"InstallationMethodFlagEnum\");\r\n            ifcPSE.PropertyName = \"InstallationMethodFlagEnum\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_InstallationMethodFlagEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstallationMethodFlagEnumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.DistanceBetweenParallelCircuits\", \"DistanceBetweenParallelCircuits\");\r\n            ifcPSE.PropertyName = \"DistanceBetweenParallelCircuits\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DistanceBetweenParallelCircuitsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.SoilConductivity\", \"SoilConductivity\");\r\n            ifcPSE.PropertyName = \"SoilConductivity\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalConductivity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoilConductivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.CarrierStackNumber\", \"CarrierStackNumber\");\r\n            ifcPSE.PropertyName = \"CarrierStackNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CarrierStackNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.MountingMethod\", \"MountingMethod\");\r\n            ifcPSE.PropertyName = \"MountingMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_MountingMethodEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.IsHorizontalCable\", \"IsHorizontalCable\");\r\n            ifcPSE.PropertyName = \"IsHorizontalCable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsHorizontalCableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.IsMountedFlatCable\", \"IsMountedFlatCable\");\r\n            ifcPSE.PropertyName = \"IsMountedFlatCable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsMountedFlatCableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.CurrentCarryingCapacity\", \"CurrentCarryingCapacity\");\r\n            ifcPSE.PropertyName = \"CurrentCarryingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentCarryingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.MaximumCableLength\", \"MaximumCableLength\");\r\n            ifcPSE.PropertyName = \"MaximumCableLength\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumCableLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.PowerLoss\", \"PowerLoss\");\r\n            ifcPSE.PropertyName = \"PowerLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentOccurrence.SequentialCode\", \"SequentialCode\");\r\n            ifcPSE.PropertyName = \"SequentialCode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SequentialCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableSegmentOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableSegmentTypeBusBarSegment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableSegmentTypeBusBarSegment = new PropertySetDescription();\r\n         propertySetCableSegmentTypeBusBarSegment.Name = \"Pset_CableSegmentTypeBusBarSegment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeBusBarSegment\"))\r\n         {\r\n            propertySetCableSegmentTypeBusBarSegment.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentTypeBusBarSegment.ObjectType = \"IfcCableSegment\";\r\n            propertySetCableSegmentTypeBusBarSegment.PredefinedType = \"BUSBARSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeBusBarSegment.IsHorizontalBusbar\", \"IsHorizontalBusbar\");\r\n            ifcPSE.PropertyName = \"IsHorizontalBusbar\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Horizontal Busbar\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水平母線\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"수평 모선\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsHorizontalBusbarCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeBusBarSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeBusBarSegment\"))\r\n         {\r\n            propertySetCableSegmentTypeBusBarSegment.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentTypeBusBarSegment.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetCableSegmentTypeBusBarSegment.ObjectType = \"IfcCableSegment\";\r\n            propertySetCableSegmentTypeBusBarSegment.PredefinedType = \"BUSBARSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeBusBarSegment.IsHorizontalBusbar\", \"IsHorizontalBusbar\");\r\n            ifcPSE.PropertyName = \"IsHorizontalBusbar\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsHorizontalBusbarCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeBusBarSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeBusBarSegment.NominalCurrent\", \"NominalCurrent\");\r\n            ifcPSE.PropertyName = \"NominalCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeBusBarSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeBusBarSegment.UltimateTensileStrength\", \"UltimateTensileStrength\");\r\n            ifcPSE.PropertyName = \"UltimateTensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UltimateTensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeBusBarSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeBusBarSegment.ACResistance\", \"ACResistance\");\r\n            ifcPSE.PropertyName = \"ACResistance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ACResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeBusBarSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeBusBarSegment.ThermalExpansionCoefficient\", \"ThermalExpansionCoefficient\");\r\n            ifcPSE.PropertyName = \"ThermalExpansionCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalExpansionCoefficient;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalExpansionCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeBusBarSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeBusBarSegment.CurrentCarryingCapacity\", \"CurrentCarryingCapacity\");\r\n            ifcPSE.PropertyName = \"CurrentCarryingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentCarryingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeBusBarSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeBusBarSegment.DCResistance\", \"DCResistance\");\r\n            ifcPSE.PropertyName = \"DCResistance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DCResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeBusBarSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeBusBarSegment.MassPerLength\", \"MassPerLength\");\r\n            ifcPSE.PropertyName = \"MassPerLength\";\r\n            ifcPSE.PropertyType = PropertyType.MassPerLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MassPerLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeBusBarSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeBusBarSegment.TensileStrength\", \"TensileStrength\");\r\n            ifcPSE.PropertyName = \"TensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeBusBarSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeBusBarSegment.YoungModulus\", \"YoungModulus\");\r\n            ifcPSE.PropertyName = \"YoungModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeBusBarSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeBusBarSegment.CrossSectionalArea\", \"CrossSectionalArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionalArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionalAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeBusBarSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeBusBarSegment.InsulationMethod\", \"InsulationMethod\");\r\n            ifcPSE.PropertyName = \"InsulationMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_InsulatorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InsulationMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeBusBarSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeBusBarSegment.OverallDiameter\", \"OverallDiameter\");\r\n            ifcPSE.PropertyName = \"OverallDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeBusBarSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeBusBarSegment.OperationalTemperatureRange\", \"OperationalTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationalTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeBusBarSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeBusBarSegment.RatedVoltage\", \"RatedVoltage\");\r\n            ifcPSE.PropertyName = \"RatedVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeBusBarSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableSegmentTypeBusBarSegment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableSegmentTypeCableSegment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableSegmentTypeCableSegment = new PropertySetDescription();\r\n         propertySetCableSegmentTypeCableSegment.Name = \"Pset_CableSegmentTypeCableSegment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeCableSegment\"))\r\n         {\r\n            propertySetCableSegmentTypeCableSegment.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetCableSegmentTypeCableSegment.ObjectType = \"CableSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.CrossSectionalArea\", \"CrossSectionalArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionalArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionalAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.NominalWidthOrDiameter\", \"NominalWidthOrDiameter\");\r\n            ifcPSE.PropertyName = \"NominalWidthOrDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthOrDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.NormalOperatingTemperature\", \"NormalOperatingTemperature\");\r\n            ifcPSE.PropertyName = \"NormalOperatingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NormalOperatingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.MaxOperatingTemperature\", \"MaxOperatingTemperature\");\r\n            ifcPSE.PropertyName = \"MaxOperatingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaxOperatingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.CableInsulationMaterial\", \"CableInsulationMaterial\");\r\n            ifcPSE.PropertyName = \"CableInsulationMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CableInsulationMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.SheathColor\", \"SheathColor\");\r\n            ifcPSE.PropertyName = \"SheathColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SheathColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeCableSegment\"))\r\n         {\r\n            propertySetCableSegmentTypeCableSegment.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetCableSegmentTypeCableSegment.ObjectType = \"IfcCableSegmentType\";\r\n            propertySetCableSegmentTypeCableSegment.PredefinedType = \"CABLESEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.CrossSectionalArea\", \"CrossSectionalArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionalArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionalAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.NominalWidthOrDiameter\", \"NominalWidthOrDiameter\");\r\n            ifcPSE.PropertyName = \"NominalWidthOrDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthOrDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.NormalOperatingTemperature\", \"NormalOperatingTemperature\");\r\n            ifcPSE.PropertyName = \"NormalOperatingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NormalOperatingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.MaxOperatingTemperature\", \"MaxOperatingTemperature\");\r\n            ifcPSE.PropertyName = \"MaxOperatingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaxOperatingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.CableInsulationMaterial\", \"CableInsulationMaterial\");\r\n            ifcPSE.PropertyName = \"CableInsulationMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CableInsulationMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.SheathColor\", \"SheathColor\");\r\n            ifcPSE.PropertyName = \"SheathColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SheathColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeCableSegment\"))\r\n         {\r\n            propertySetCableSegmentTypeCableSegment.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentTypeCableSegment.ObjectType = \"IfcCableSegment\";\r\n            propertySetCableSegmentTypeCableSegment.PredefinedType = \"CABLESEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.Standard\", \"Standard\");\r\n            ifcPSE.PropertyName = \"Standard\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Standard\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"標準\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"표준\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.NumberOfCores\", \"NumberOfCores\");\r\n            ifcPSE.PropertyName = \"NumberOfCores\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Cores\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"芯数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"심수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCoresCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.OverallDiameter\", \"OverallDiameter\");\r\n            ifcPSE.PropertyName = \"OverallDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Overall Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"直径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"직경\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.RatedVoltage\", \"RatedVoltage\");\r\n            ifcPSE.PropertyName = \"RatedVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Rated Voltage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"定格電圧\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"정격 전압\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.RatedTemperature\", \"RatedTemperature\");\r\n            ifcPSE.PropertyName = \"RatedTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Rated Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"定格温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"정격 온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.ScreenDiameter\", \"ScreenDiameter\");\r\n            ifcPSE.PropertyName = \"ScreenDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Screen Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"スクリーン径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"스크린 지름\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ScreenDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.HasProtectiveEarth\", \"HasProtectiveEarth\");\r\n            ifcPSE.PropertyName = \"HasProtectiveEarth\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Protective Earth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"保護用接地の有無\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"보호 접지의 유무\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasProtectiveEarthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.MaximumOperatingTemperature\", \"MaximumOperatingTemperature\");\r\n            ifcPSE.PropertyName = \"MaximumOperatingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Operating Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容最高温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용 최고 온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumOperatingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.MaximumShortCircuitTemperature\", \"MaximumShortCircuitTemperature\");\r\n            ifcPSE.PropertyName = \"MaximumShortCircuitTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Short Circuit Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"短絡許容最高温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단락 허용 최고 온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumShortCircuitTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.SpecialConstruction\", \"SpecialConstruction\");\r\n            ifcPSE.PropertyName = \"SpecialConstruction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Special Construction\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"特別な施工方法\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"특별한 시공 방법\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecialConstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Weight\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"重量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"무게\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.SelfExtinguishing60332_1\", \"SelfExtinguishing60332_1\");\r\n            ifcPSE.PropertyName = \"SelfExtinguishing60332_1\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Self Extinguishing60332_1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"自己消火ケーブル\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"자기 소화 케이블\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SelfExtinguishing60332_1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.SelfExtinguishing60332_3\", \"SelfExtinguishing60332_3\");\r\n            ifcPSE.PropertyName = \"SelfExtinguishing60332_3\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Self Extinguishing60332_3\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"自己消火ケーブル\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"자기 소화 케이블\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SelfExtinguishing60332_3Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.HalogenProof\", \"HalogenProof\");\r\n            ifcPSE.PropertyName = \"HalogenProof\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Halogen Proof\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"エコケーブル\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"에코 케이블\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HalogenProofCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.FunctionReliable\", \"FunctionReliable\");\r\n            ifcPSE.PropertyName = \"FunctionReliable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Function Reliable\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"信頼性のある機能\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"신뢰할 수있는 기능\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FunctionReliableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeCableSegment\"))\r\n         {\r\n            propertySetCableSegmentTypeCableSegment.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentTypeCableSegment.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetCableSegmentTypeCableSegment.ObjectType = \"IfcCableSegment\";\r\n            propertySetCableSegmentTypeCableSegment.PredefinedType = \"CABLESEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.Standard\", \"Standard\");\r\n            ifcPSE.PropertyName = \"Standard\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.NumberOfCores\", \"NumberOfCores\");\r\n            ifcPSE.PropertyName = \"NumberOfCores\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCoresCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.OverallDiameter\", \"OverallDiameter\");\r\n            ifcPSE.PropertyName = \"OverallDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.RatedTemperature\", \"RatedTemperature\");\r\n            ifcPSE.PropertyName = \"RatedTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.ScreenDiameter\", \"ScreenDiameter\");\r\n            ifcPSE.PropertyName = \"ScreenDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ScreenDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.HasProtectiveEarth\", \"HasProtectiveEarth\");\r\n            ifcPSE.PropertyName = \"HasProtectiveEarth\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasProtectiveEarthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.MaximumOperatingTemperature\", \"MaximumOperatingTemperature\");\r\n            ifcPSE.PropertyName = \"MaximumOperatingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumOperatingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.MaximumShortCircuitTemperature\", \"MaximumShortCircuitTemperature\");\r\n            ifcPSE.PropertyName = \"MaximumShortCircuitTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumShortCircuitTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.SpecialConstruction\", \"SpecialConstruction\");\r\n            ifcPSE.PropertyName = \"SpecialConstruction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecialConstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.SelfExtinguishing60332_1\", \"SelfExtinguishing60332_1\");\r\n            ifcPSE.PropertyName = \"SelfExtinguishing60332_1\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SelfExtinguishing60332_1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.SelfExtinguishing60332_3\", \"SelfExtinguishing60332_3\");\r\n            ifcPSE.PropertyName = \"SelfExtinguishing60332_3\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SelfExtinguishing60332_3Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.HalogenProof\", \"HalogenProof\");\r\n            ifcPSE.PropertyName = \"HalogenProof\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HalogenProofCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.FunctionReliable\", \"FunctionReliable\");\r\n            ifcPSE.PropertyName = \"FunctionReliable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FunctionReliableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.ACResistance\", \"ACResistance\");\r\n            ifcPSE.PropertyName = \"ACResistance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ACResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.CurrentCarryingCapacity\", \"CurrentCarryingCapacity\");\r\n            ifcPSE.PropertyName = \"CurrentCarryingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentCarryingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.DCResistance\", \"DCResistance\");\r\n            ifcPSE.PropertyName = \"DCResistance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DCResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.MassPerLength\", \"MassPerLength\");\r\n            ifcPSE.PropertyName = \"MassPerLength\";\r\n            ifcPSE.PropertyType = PropertyType.MassPerLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MassPerLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.MaximumCurrent\", \"MaximumCurrent\");\r\n            ifcPSE.PropertyName = \"MaximumCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.MaximumBendingRadius\", \"MaximumBendingRadius\");\r\n            ifcPSE.PropertyName = \"MaximumBendingRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumBendingRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.NumberOfWires\", \"NumberOfWires\");\r\n            ifcPSE.PropertyName = \"NumberOfWires\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfWiresCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.InsulationVoltage\", \"InsulationVoltage\");\r\n            ifcPSE.PropertyName = \"InsulationVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InsulationVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCableSegment.RatedVoltage\", \"RatedVoltage\");\r\n            ifcPSE.PropertyName = \"RatedVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCableSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableSegmentTypeCableSegment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableSegmentTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableSegmentTypeCommon = new PropertySetDescription();\r\n         propertySetCableSegmentTypeCommon.Name = \"Pset_CableSegmentTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeCommon\"))\r\n         {\r\n            propertySetCableSegmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentTypeCommon.ObjectType = \"IfcCableSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeCommon\"))\r\n         {\r\n            propertySetCableSegmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetCableSegmentTypeCommon.ObjectType = \"IfcCableSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableSegmentTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableSegmentTypeConductorSegment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableSegmentTypeConductorSegment = new PropertySetDescription();\r\n         propertySetCableSegmentTypeConductorSegment.Name = \"Pset_CableSegmentTypeConductorSegment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeConductorSegment\"))\r\n         {\r\n            propertySetCableSegmentTypeConductorSegment.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetCableSegmentTypeConductorSegment.ObjectType = \"ConductorSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.CrossSectionalArea\", \"CrossSectionalArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionalArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionalAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.ElectricalConductorFunction\", \"ElectricalConductorFunction\");\r\n            ifcPSE.PropertyName = \"ElectricalConductorFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_ConductorFunction);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricalConductorFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.PhaseReference\", \"PhaseReference\");\r\n            ifcPSE.PropertyName = \"PhaseReference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PhaseReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.ConductorMaterial\", \"ConductorMaterial\");\r\n            ifcPSE.PropertyName = \"ConductorMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConductorMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.ConductorSheathMaterial\", \"ConductorSheathMaterial\");\r\n            ifcPSE.PropertyName = \"ConductorSheathMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConductorSheathMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.MaximumOperatingTemperature\", \"MaximumOperatingTemperature\");\r\n            ifcPSE.PropertyName = \"MaximumOperatingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumOperatingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.IsFireResistant\", \"IsFireResistant\");\r\n            ifcPSE.PropertyName = \"IsFireResistant\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsFireResistantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.SheathColor\", \"SheathColor\");\r\n            ifcPSE.PropertyName = \"SheathColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SheathColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeConductorSegment\"))\r\n         {\r\n            propertySetCableSegmentTypeConductorSegment.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetCableSegmentTypeConductorSegment.ObjectType = \"IfcCableSegmentType\";\r\n            propertySetCableSegmentTypeConductorSegment.PredefinedType = \"CONDUCTORSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.CrossSectionalArea\", \"CrossSectionalArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionalArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionalAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.ElectricalConductorFunction\", \"ElectricalConductorFunction\");\r\n            ifcPSE.PropertyName = \"ElectricalConductorFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ConductorFunction);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricalConductorFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.PhaseReference\", \"PhaseReference\");\r\n            ifcPSE.PropertyName = \"PhaseReference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PhaseReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.ConductorMaterial\", \"ConductorMaterial\");\r\n            ifcPSE.PropertyName = \"ConductorMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConductorMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.ConductorSheathMaterial\", \"ConductorSheathMaterial\");\r\n            ifcPSE.PropertyName = \"ConductorSheathMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConductorSheathMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.MaximumOperatingTemperature\", \"MaximumOperatingTemperature\");\r\n            ifcPSE.PropertyName = \"MaximumOperatingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumOperatingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.IsFireResistant\", \"IsFireResistant\");\r\n            ifcPSE.PropertyName = \"IsFireResistant\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsFireResistantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.SheathColor\", \"SheathColor\");\r\n            ifcPSE.PropertyName = \"SheathColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SheathColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeConductorSegment\"))\r\n         {\r\n            propertySetCableSegmentTypeConductorSegment.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentTypeConductorSegment.ObjectType = \"IfcCableSegment\";\r\n            propertySetCableSegmentTypeConductorSegment.PredefinedType = \"CONDUCTORSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.CrossSectionalArea\", \"CrossSectionalArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionalArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cross Sectional Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"断面積\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단면적 영역\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionalAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.Function\", \"Function\");\r\n            ifcPSE.PropertyName = \"Function\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FunctionEnum);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Function\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"機能\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"기능\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_MaterialEnum);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"材料\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"도체의 기능 유형.\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.Construction\", \"Construction\");\r\n            ifcPSE.PropertyName = \"Construction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ConstructionEnum);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Construction\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"構造\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"구조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.Shape\", \"Shape\");\r\n            ifcPSE.PropertyName = \"Shape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ShapeEnum);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shape\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"形状\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"형상\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeConductorSegment\"))\r\n         {\r\n            propertySetCableSegmentTypeConductorSegment.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentTypeConductorSegment.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetCableSegmentTypeConductorSegment.ObjectType = \"IfcCableSegment\";\r\n            propertySetCableSegmentTypeConductorSegment.PredefinedType = \"CONDUCTORSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.CrossSectionalArea\", \"CrossSectionalArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionalArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionalAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.Function\", \"Function\");\r\n            ifcPSE.PropertyName = \"Function\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FunctionEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.ConductorMaterial\", \"ConductorMaterial\");\r\n            ifcPSE.PropertyName = \"ConductorMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_MaterialEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConductorMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.Construction\", \"Construction\");\r\n            ifcPSE.PropertyName = \"Construction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ConstructionEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.ConductorShape\", \"ConductorShape\");\r\n            ifcPSE.PropertyName = \"ConductorShape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ShapeEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConductorShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.NominalCurrent\", \"NominalCurrent\");\r\n            ifcPSE.PropertyName = \"NominalCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.ACResistance\", \"ACResistance\");\r\n            ifcPSE.PropertyName = \"ACResistance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ACResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.ThermalExpansionCoefficient\", \"ThermalExpansionCoefficient\");\r\n            ifcPSE.PropertyName = \"ThermalExpansionCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalExpansionCoefficient;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalExpansionCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.CurrentCarryingCapacity\", \"CurrentCarryingCapacity\");\r\n            ifcPSE.PropertyName = \"CurrentCarryingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentCarryingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.UltimateTensileStrength\", \"UltimateTensileStrength\");\r\n            ifcPSE.PropertyName = \"UltimateTensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UltimateTensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.MassPerLength\", \"MassPerLength\");\r\n            ifcPSE.PropertyName = \"MassPerLength\";\r\n            ifcPSE.PropertyType = PropertyType.MassPerLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MassPerLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.TensileStrength\", \"TensileStrength\");\r\n            ifcPSE.PropertyName = \"TensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.YoungModulus\", \"YoungModulus\");\r\n            ifcPSE.PropertyName = \"YoungModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.DCResistance\", \"DCResistance\");\r\n            ifcPSE.PropertyName = \"DCResistance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DCResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.OverallDiameter\", \"OverallDiameter\");\r\n            ifcPSE.PropertyName = \"OverallDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.NumberOfCores\", \"NumberOfCores\");\r\n            ifcPSE.PropertyName = \"NumberOfCores\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCoresCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeConductorSegment.RatedVoltage\", \"RatedVoltage\");\r\n            ifcPSE.PropertyName = \"RatedVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeConductorSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableSegmentTypeConductorSegment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableSegmentTypeContactWire(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableSegmentTypeContactWire = new PropertySetDescription();\r\n         propertySetCableSegmentTypeContactWire.Name = \"Pset_CableSegmentTypeContactWire\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeContactWire\"))\r\n         {\r\n            propertySetCableSegmentTypeContactWire.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentTypeContactWire.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetCableSegmentTypeContactWire.ObjectType = \"IfcCableSegment\";\r\n            propertySetCableSegmentTypeContactWire.PredefinedType = \"CONTACTWIRESEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeContactWire.ACResistance\", \"ACResistance\");\r\n            ifcPSE.PropertyName = \"ACResistance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ACResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeContactWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeContactWire.ThermalExpansionCoefficient\", \"ThermalExpansionCoefficient\");\r\n            ifcPSE.PropertyName = \"ThermalExpansionCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalExpansionCoefficient;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalExpansionCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeContactWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeContactWire.CurrentCarryingCapacity\", \"CurrentCarryingCapacity\");\r\n            ifcPSE.PropertyName = \"CurrentCarryingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentCarryingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeContactWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeContactWire.DCResistance\", \"DCResistance\");\r\n            ifcPSE.PropertyName = \"DCResistance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DCResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeContactWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeContactWire.MassPerLength\", \"MassPerLength\");\r\n            ifcPSE.PropertyName = \"MassPerLength\";\r\n            ifcPSE.PropertyType = PropertyType.MassPerLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MassPerLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeContactWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeContactWire.YoungModulus\", \"YoungModulus\");\r\n            ifcPSE.PropertyName = \"YoungModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeContactWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeContactWire.CrossSectionalArea\", \"CrossSectionalArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionalArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionalAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeContactWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeContactWire.TorsionalStrength\", \"TorsionalStrength\");\r\n            ifcPSE.PropertyName = \"TorsionalStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorsionalStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeContactWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeContactWire.TensileStrength\", \"TensileStrength\");\r\n            ifcPSE.PropertyName = \"TensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeContactWire.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableSegmentTypeContactWire);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableSegmentTypeCoreSegment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableSegmentTypeCoreSegment = new PropertySetDescription();\r\n         propertySetCableSegmentTypeCoreSegment.Name = \"Pset_CableSegmentTypeCoreSegment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeCoreSegment\"))\r\n         {\r\n            propertySetCableSegmentTypeCoreSegment.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentTypeCoreSegment.ObjectType = \"IfcCableSegment\";\r\n            propertySetCableSegmentTypeCoreSegment.PredefinedType = \"CORESEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.OverallDiameter\", \"OverallDiameter\");\r\n            ifcPSE.PropertyName = \"OverallDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Overall Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"全径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전체 직경\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.RatedVoltage\", \"RatedVoltage\");\r\n            ifcPSE.PropertyName = \"RatedVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Rated Voltage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"定格電圧\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"정격 전압\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.RatedTemperature\", \"RatedTemperature\");\r\n            ifcPSE.PropertyName = \"RatedTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Rated Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"定格温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"정격 온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.ScreenDiameter\", \"ScreenDiameter\");\r\n            ifcPSE.PropertyName = \"ScreenDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Screen Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"シールド径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"실드 직경\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ScreenDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.CoreIdentifier\", \"CoreIdentifier\");\r\n            ifcPSE.PropertyName = \"CoreIdentifier\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Core Identifier\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"コア識別子\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"코어 식별자\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreIdentifierCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.SheathColors\", \"SheathColors\");\r\n            ifcPSE.PropertyName = \"SheathColors\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CoreColorsEnum);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sheath Colors\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"シース色\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"코어 색\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SheathColorsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Weight\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"重量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"무게\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.SelfExtinguishing60332_1\", \"SelfExtinguishing60332_1\");\r\n            ifcPSE.PropertyName = \"SelfExtinguishing60332_1\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Self Extinguishing60332_1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"自動消火60332_1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"자동 소화 60332_1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SelfExtinguishing60332_1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.SelfExtinguishing60332_3\", \"SelfExtinguishing60332_3\");\r\n            ifcPSE.PropertyName = \"SelfExtinguishing60332_3\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Self Extinguishing60332_3\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"自動消火60332_3\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"자동 소화 60332_3\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SelfExtinguishing60332_3Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.HalogenProof\", \"HalogenProof\");\r\n            ifcPSE.PropertyName = \"HalogenProof\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Halogen Proof\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ハロゲン証明\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"할로겐 증명\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HalogenProofCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.FunctionReliable\", \"FunctionReliable\");\r\n            ifcPSE.PropertyName = \"FunctionReliable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Function Reliable\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"機能信頼性\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"기능 신뢰성\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FunctionReliableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.Standard\", \"Standard\");\r\n            ifcPSE.PropertyName = \"Standard\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Standard\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"基準\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"기준\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeCoreSegment\"))\r\n         {\r\n            propertySetCableSegmentTypeCoreSegment.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentTypeCoreSegment.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetCableSegmentTypeCoreSegment.ObjectType = \"IfcCableSegment\";\r\n            propertySetCableSegmentTypeCoreSegment.PredefinedType = \"CORESEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.OverallDiameter\", \"OverallDiameter\");\r\n            ifcPSE.PropertyName = \"OverallDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.RatedVoltage\", \"RatedVoltage\");\r\n            ifcPSE.PropertyName = \"RatedVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.RatedTemperature\", \"RatedTemperature\");\r\n            ifcPSE.PropertyName = \"RatedTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.ScreenDiameter\", \"ScreenDiameter\");\r\n            ifcPSE.PropertyName = \"ScreenDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ScreenDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.CoreIdentifier\", \"CoreIdentifier\");\r\n            ifcPSE.PropertyName = \"CoreIdentifier\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreIdentifierCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.SheathColours\", \"SheathColours\");\r\n            ifcPSE.PropertyName = \"SheathColours\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CoreColoursEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SheathColoursCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.UltimateTensileStrength\", \"UltimateTensileStrength\");\r\n            ifcPSE.PropertyName = \"UltimateTensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UltimateTensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.SelfExtinguishing60332_1\", \"SelfExtinguishing60332_1\");\r\n            ifcPSE.PropertyName = \"SelfExtinguishing60332_1\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SelfExtinguishing60332_1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.SelfExtinguishing60332_3\", \"SelfExtinguishing60332_3\");\r\n            ifcPSE.PropertyName = \"SelfExtinguishing60332_3\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SelfExtinguishing60332_3Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.HalogenProof\", \"HalogenProof\");\r\n            ifcPSE.PropertyName = \"HalogenProof\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HalogenProofCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.FunctionReliable\", \"FunctionReliable\");\r\n            ifcPSE.PropertyName = \"FunctionReliable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FunctionReliableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.Standard\", \"Standard\");\r\n            ifcPSE.PropertyName = \"Standard\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.ThermalExpansionCoefficient\", \"ThermalExpansionCoefficient\");\r\n            ifcPSE.PropertyName = \"ThermalExpansionCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalExpansionCoefficient;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalExpansionCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.CurrentCarryingCapacity\", \"CurrentCarryingCapacity\");\r\n            ifcPSE.PropertyName = \"CurrentCarryingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentCarryingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.DCResistance\", \"DCResistance\");\r\n            ifcPSE.PropertyName = \"DCResistance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DCResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.LayRatio\", \"LayRatio\");\r\n            ifcPSE.PropertyName = \"LayRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LayRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.MassPerLength\", \"MassPerLength\");\r\n            ifcPSE.PropertyName = \"MassPerLength\";\r\n            ifcPSE.PropertyType = PropertyType.MassPerLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MassPerLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.TensileStrength\", \"TensileStrength\");\r\n            ifcPSE.PropertyName = \"TensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.YoungModulus\", \"YoungModulus\");\r\n            ifcPSE.PropertyName = \"YoungModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.ACResistance\", \"ACResistance\");\r\n            ifcPSE.PropertyName = \"ACResistance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ACResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeCoreSegment.StrandingMethod\", \"StrandingMethod\");\r\n            ifcPSE.PropertyName = \"StrandingMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StrandingMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeCoreSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableSegmentTypeCoreSegment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableSegmentTypeEarthingConductor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableSegmentTypeEarthingConductor = new PropertySetDescription();\r\n         propertySetCableSegmentTypeEarthingConductor.Name = \"Pset_CableSegmentTypeEarthingConductor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeEarthingConductor\"))\r\n         {\r\n            propertySetCableSegmentTypeEarthingConductor.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentTypeEarthingConductor.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetCableSegmentTypeEarthingConductor.ObjectType = \"IfcCableSegment\";\r\n            propertySetCableSegmentTypeEarthingConductor.PredefinedType = \"CONDUCTORSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeEarthingConductor.ResistanceToGround\", \"ResistanceToGround\");\r\n            ifcPSE.PropertyName = \"ResistanceToGround\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ResistanceToGroundCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeEarthingConductor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableSegmentTypeEarthingConductor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableSegmentTypeFiberSegment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableSegmentTypeFiberSegment = new PropertySetDescription();\r\n         propertySetCableSegmentTypeFiberSegment.Name = \"Pset_CableSegmentTypeFiberSegment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeFiberSegment\"))\r\n         {\r\n            propertySetCableSegmentTypeFiberSegment.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentTypeFiberSegment.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetCableSegmentTypeFiberSegment.ObjectType = \"IfcCableSegment\";\r\n            propertySetCableSegmentTypeFiberSegment.PredefinedType = \"FIBERSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeFiberSegment.FiberColour\", \"FiberColour\");\r\n            ifcPSE.PropertyName = \"FiberColour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FiberColour);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FiberColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeFiberSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeFiberSegment.HasTightJacket\", \"HasTightJacket\");\r\n            ifcPSE.PropertyName = \"HasTightJacket\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasTightJacketCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeFiberSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeFiberSegment.FiberType\", \"FiberType\");\r\n            ifcPSE.PropertyName = \"FiberType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FiberType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FiberTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeFiberSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableSegmentTypeFiberSegment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableSegmentTypeFiberTubeSegment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableSegmentTypeFiberTubeSegment = new PropertySetDescription();\r\n         propertySetCableSegmentTypeFiberTubeSegment.Name = \"Pset_CableSegmentTypeFiberTubeSegment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeFiberTubeSegment\"))\r\n         {\r\n            propertySetCableSegmentTypeFiberTubeSegment.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentTypeFiberTubeSegment.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetCableSegmentTypeFiberTubeSegment.ObjectType = \"IfcCableSegment\";\r\n            propertySetCableSegmentTypeFiberTubeSegment.PredefinedType = \"FIBERTUBE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeFiberTubeSegment.FiberTubeColour\", \"FiberTubeColour\");\r\n            ifcPSE.PropertyName = \"FiberTubeColour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FiberColour);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FiberTubeColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeFiberTubeSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeFiberTubeSegment.NumberOfFibers\", \"NumberOfFibers\");\r\n            ifcPSE.PropertyName = \"NumberOfFibers\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfFibersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeFiberTubeSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableSegmentTypeFiberTubeSegment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableSegmentTypeOpticalCableSegment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableSegmentTypeOpticalCableSegment = new PropertySetDescription();\r\n         propertySetCableSegmentTypeOpticalCableSegment.Name = \"Pset_CableSegmentTypeOpticalCableSegment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeOpticalCableSegment\"))\r\n         {\r\n            propertySetCableSegmentTypeOpticalCableSegment.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentTypeOpticalCableSegment.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetCableSegmentTypeOpticalCableSegment.ObjectType = \"IfcCableSegment\";\r\n            propertySetCableSegmentTypeOpticalCableSegment.PredefinedType = \"OPTICALCABLESEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeOpticalCableSegment.NumberOfFibers\", \"NumberOfFibers\");\r\n            ifcPSE.PropertyName = \"NumberOfFibers\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfFibersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeOpticalCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeOpticalCableSegment.OpticalCableStructure\", \"OpticalCableStructure\");\r\n            ifcPSE.PropertyName = \"OpticalCableStructure\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_OpticalCableStructureType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OpticalCableStructureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeOpticalCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeOpticalCableSegment.NumberOfMultiModeFibers\", \"NumberOfMultiModeFibers\");\r\n            ifcPSE.PropertyName = \"NumberOfMultiModeFibers\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfMultiModeFibersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeOpticalCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeOpticalCableSegment.NumberOfSingleModeFibers\", \"NumberOfSingleModeFibers\");\r\n            ifcPSE.PropertyName = \"NumberOfSingleModeFibers\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSingleModeFibersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeOpticalCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeOpticalCableSegment.NumberOfTubes\", \"NumberOfTubes\");\r\n            ifcPSE.PropertyName = \"NumberOfTubes\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfTubesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeOpticalCableSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeOpticalCableSegment.FiberMode\", \"FiberMode\");\r\n            ifcPSE.PropertyName = \"FiberMode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FiberMode);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FiberModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeOpticalCableSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableSegmentTypeOpticalCableSegment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableSegmentTypeStitchWire(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableSegmentTypeStitchWire = new PropertySetDescription();\r\n         propertySetCableSegmentTypeStitchWire.Name = \"Pset_CableSegmentTypeStitchWire\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeStitchWire\"))\r\n         {\r\n            propertySetCableSegmentTypeStitchWire.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentTypeStitchWire.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetCableSegmentTypeStitchWire.ObjectType = \"IfcCableSegment\";\r\n            propertySetCableSegmentTypeStitchWire.PredefinedType = \"STITCHWIRE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeStitchWire.AssemblyInstruction\", \"AssemblyInstruction\");\r\n            ifcPSE.PropertyName = \"AssemblyInstruction\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyInstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeStitchWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeStitchWire.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeStitchWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeStitchWire.MechanicalTension\", \"MechanicalTension\");\r\n            ifcPSE.PropertyName = \"MechanicalTension\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalTensionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeStitchWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeStitchWire.UltimateTensileStrength\", \"UltimateTensileStrength\");\r\n            ifcPSE.PropertyName = \"UltimateTensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UltimateTensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeStitchWire.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeStitchWire.TensileStrength\", \"TensileStrength\");\r\n            ifcPSE.PropertyName = \"TensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeStitchWire.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableSegmentTypeStitchWire);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CableSegmentTypeWirePairSegment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCableSegmentTypeWirePairSegment = new PropertySetDescription();\r\n         propertySetCableSegmentTypeWirePairSegment.Name = \"Pset_CableSegmentTypeWirePairSegment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CableSegmentTypeWirePairSegment\"))\r\n         {\r\n            propertySetCableSegmentTypeWirePairSegment.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCableSegmentTypeWirePairSegment.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetCableSegmentTypeWirePairSegment.ObjectType = \"IfcCableSegment\";\r\n            propertySetCableSegmentTypeWirePairSegment.PredefinedType = \"WIREPAIRSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeWirePairSegment.CharacteristicImpedance\", \"CharacteristicImpedance\");\r\n            ifcPSE.PropertyName = \"CharacteristicImpedance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CharacteristicImpedanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeWirePairSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeWirePairSegment.ConductorDiameter\", \"ConductorDiameter\");\r\n            ifcPSE.PropertyName = \"ConductorDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConductorDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeWirePairSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeWirePairSegment.CoreConductorDiameter\", \"CoreConductorDiameter\");\r\n            ifcPSE.PropertyName = \"CoreConductorDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreConductorDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeWirePairSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeWirePairSegment.JacketColour\", \"JacketColour\");\r\n            ifcPSE.PropertyName = \"JacketColour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.JacketColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeWirePairSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeWirePairSegment.ShieldConductorDiameter\", \"ShieldConductorDiameter\");\r\n            ifcPSE.PropertyName = \"ShieldConductorDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShieldConductorDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeWirePairSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CableSegmentTypeWirePairSegment.WirePairType\", \"WirePairType\");\r\n            ifcPSE.PropertyName = \"WirePairType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_WirePairType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WirePairTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCableSegmentTypeWirePairSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCableSegmentTypeWirePairSegment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CargoCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCargoCommon = new PropertySetDescription();\r\n         propertySetCargoCommon.Name = \"Pset_CargoCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CargoCommon\"))\r\n         {\r\n            propertySetCargoCommon.EntityTypes.Add(IFCEntityType.IfcVehicle);\r\n            propertySetCargoCommon.EntityTypes.Add(IFCEntityType.IfcVehicleType);\r\n            propertySetCargoCommon.ObjectType = \"IfcVehicle\";\r\n            propertySetCargoCommon.PredefinedType = \"CARGO\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CargoCommon.ProcessItem\", \"ProcessItem\");\r\n            ifcPSE.PropertyName = \"ProcessItem\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ProcessItem);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProcessItemCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCargoCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CargoCommon.AdditionalProcessing\", \"AdditionalProcessing\");\r\n            ifcPSE.PropertyName = \"AdditionalProcessing\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AdditionalProcessing);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdditionalProcessingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCargoCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CargoCommon.ProcessDirection\", \"ProcessDirection\");\r\n            ifcPSE.PropertyName = \"ProcessDirection\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ProcessDirection);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProcessDirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCargoCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCargoCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CessBetweenRails(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCessBetweenRails = new PropertySetDescription();\r\n         propertySetCessBetweenRails.Name = \"Pset_CessBetweenRails\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CessBetweenRails\"))\r\n         {\r\n            propertySetCessBetweenRails.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetCessBetweenRails.EntityTypes.Add(IFCEntityType.IfcSlabType);\r\n            propertySetCessBetweenRails.ObjectType = \"IfcSlab\";\r\n            propertySetCessBetweenRails.PredefinedType = \"TRACKSLAB\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CessBetweenRails.JointRelativePosition\", \"JointRelativePosition\");\r\n            ifcPSE.PropertyName = \"JointRelativePosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RelativePosition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.JointRelativePositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCessBetweenRails.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CessBetweenRails.CheckRailType\", \"CheckRailType\");\r\n            ifcPSE.PropertyName = \"CheckRailType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CheckRailType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CheckRailTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCessBetweenRails.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CessBetweenRails.LoadCapacity\", \"LoadCapacity\");\r\n            ifcPSE.PropertyName = \"LoadCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCessBetweenRails.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CessBetweenRails.UsagePurpose\", \"UsagePurpose\");\r\n            ifcPSE.PropertyName = \"UsagePurpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_UsagePurpose);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UsagePurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCessBetweenRails.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCessBetweenRails);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ChillerPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetChillerPHistory = new PropertySetDescription();\r\n         propertySetChillerPHistory.Name = \"Pset_ChillerPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ChillerPHistory\"))\r\n         {\r\n            propertySetChillerPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerPHistory.Capacity\", \"Capacity\");\r\n            ifcPSE.PropertyName = \"Capacity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerPHistory.EnergyEfficiencyRatio\", \"EnergyEfficiencyRatio\");\r\n            ifcPSE.PropertyName = \"EnergyEfficiencyRatio\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyEfficiencyRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerPHistory.CoefficientOfPerformance\", \"CoefficientOfPerformance\");\r\n            ifcPSE.PropertyName = \"CoefficientOfPerformance\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoefficientOfPerformanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerPHistory.CapacityCurve\", \"CapacityCurve\");\r\n            ifcPSE.PropertyName = \"CapacityCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerPHistory.CoefficientOfPerformanceCurve\", \"CoefficientOfPerformanceCurve\");\r\n            ifcPSE.PropertyName = \"CoefficientOfPerformanceCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoefficientOfPerformanceCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerPHistory.FullLoadRatioCurve\", \"FullLoadRatioCurve\");\r\n            ifcPSE.PropertyName = \"FullLoadRatioCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FullLoadRatioCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ChillerPHistory\"))\r\n         {\r\n            propertySetChillerPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerPHistory.Capacity\", \"Capacity\");\r\n            ifcPSE.PropertyName = \"Capacity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerPHistory.EnergyEfficiencyRatio\", \"EnergyEfficiencyRatio\");\r\n            ifcPSE.PropertyName = \"EnergyEfficiencyRatio\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyEfficiencyRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerPHistory.CoefficientOfPerformance\", \"CoefficientOfPerformance\");\r\n            ifcPSE.PropertyName = \"CoefficientOfPerformance\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoefficientOfPerformanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerPHistory.CapacityCurve\", \"CapacityCurve\");\r\n            ifcPSE.PropertyName = \"CapacityCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerPHistory.CoefficientOfPerformanceCurve\", \"CoefficientOfPerformanceCurve\");\r\n            ifcPSE.PropertyName = \"CoefficientOfPerformanceCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoefficientOfPerformanceCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerPHistory.FullLoadRatioCurve\", \"FullLoadRatioCurve\");\r\n            ifcPSE.PropertyName = \"FullLoadRatioCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FullLoadRatioCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ChillerPHistory\"))\r\n         {\r\n            propertySetChillerPHistory.EntityTypes.Add(IFCEntityType.IfcChiller);\r\n            propertySetChillerPHistory.ObjectType = \"IfcChiller\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerPHistory.Capacity\", \"Capacity\");\r\n            ifcPSE.PropertyName = \"Capacity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Capacity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Puissance\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerPHistory.EnergyEfficiencyRatio\", \"EnergyEfficiencyRatio\");\r\n            ifcPSE.PropertyName = \"EnergyEfficiencyRatio\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Energy Efficiency Ratio\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CoefficientEfficacitéEnergétique\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyEfficiencyRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerPHistory.CoefficientOfPerformance\", \"CoefficientOfPerformance\");\r\n            ifcPSE.PropertyName = \"CoefficientOfPerformance\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Coefficient Of Performance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CoefficientDePerformance\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoefficientOfPerformanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ChillerPHistory\"))\r\n         {\r\n            propertySetChillerPHistory.EntityTypes.Add(IFCEntityType.IfcChiller);\r\n            propertySetChillerPHistory.ObjectType = \"IfcChiller\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerPHistory.Capacity\", \"Capacity\");\r\n            ifcPSE.PropertyName = \"Capacity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerPHistory.EnergyEfficiencyRatio\", \"EnergyEfficiencyRatio\");\r\n            ifcPSE.PropertyName = \"EnergyEfficiencyRatio\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyEfficiencyRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerPHistory.CoefficientOfPerformance\", \"CoefficientOfPerformance\");\r\n            ifcPSE.PropertyName = \"CoefficientOfPerformance\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoefficientOfPerformanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetChillerPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ChillerTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetChillerTypeCommon = new PropertySetDescription();\r\n         propertySetChillerTypeCommon.Name = \"Pset_ChillerTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ChillerTypeCommon\"))\r\n         {\r\n            propertySetChillerTypeCommon.EntityTypes.Add(IFCEntityType.IfcChillerType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalCapacity\", \"NominalCapacity\");\r\n            ifcPSE.PropertyName = \"NominalCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalEfficiency\", \"NominalEfficiency\");\r\n            ifcPSE.PropertyName = \"NominalEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalCondensingTemperature\", \"NominalCondensingTemperature\");\r\n            ifcPSE.PropertyName = \"NominalCondensingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCondensingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalEvaporatingTemperature\", \"NominalEvaporatingTemperature\");\r\n            ifcPSE.PropertyName = \"NominalEvaporatingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalEvaporatingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalHeatRejectionRate\", \"NominalHeatRejectionRate\");\r\n            ifcPSE.PropertyName = \"NominalHeatRejectionRate\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatRejectionRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalPowerConsumption\", \"NominalPowerConsumption\");\r\n            ifcPSE.PropertyName = \"NominalPowerConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPowerConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ChillerTypeCommon\"))\r\n         {\r\n            propertySetChillerTypeCommon.EntityTypes.Add(IFCEntityType.IfcChillerType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalCapacity\", \"NominalCapacity\");\r\n            ifcPSE.PropertyName = \"NominalCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalEfficiency\", \"NominalEfficiency\");\r\n            ifcPSE.PropertyName = \"NominalEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalCondensingTemperature\", \"NominalCondensingTemperature\");\r\n            ifcPSE.PropertyName = \"NominalCondensingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCondensingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalEvaporatingTemperature\", \"NominalEvaporatingTemperature\");\r\n            ifcPSE.PropertyName = \"NominalEvaporatingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalEvaporatingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalHeatRejectionRate\", \"NominalHeatRejectionRate\");\r\n            ifcPSE.PropertyName = \"NominalHeatRejectionRate\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatRejectionRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalPowerConsumption\", \"NominalPowerConsumption\");\r\n            ifcPSE.PropertyName = \"NominalPowerConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPowerConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ChillerTypeCommon\"))\r\n         {\r\n            propertySetChillerTypeCommon.EntityTypes.Add(IFCEntityType.IfcChiller);\r\n            propertySetChillerTypeCommon.ObjectType = \"IfcChiller\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Référence\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Etat\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalCapacity\", \"NominalCapacity\");\r\n            ifcPSE.PropertyName = \"NominalCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Capacity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PuissanceNominale\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalEfficiency\", \"NominalEfficiency\");\r\n            ifcPSE.PropertyName = \"NominalEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EfficacitéNominale\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalCondensingTemperature\", \"NominalCondensingTemperature\");\r\n            ifcPSE.PropertyName = \"NominalCondensingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Condensing Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TemperatureCondensationNominale\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCondensingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalEvaporatingTemperature\", \"NominalEvaporatingTemperature\");\r\n            ifcPSE.PropertyName = \"NominalEvaporatingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Evaporating Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TempératureEvaporationNominale\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalEvaporatingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalHeatRejectionRate\", \"NominalHeatRejectionRate\");\r\n            ifcPSE.PropertyName = \"NominalHeatRejectionRate\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Heat Rejection Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CoefficientEvacuationNominaleChaleur\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatRejectionRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalPowerConsumption\", \"NominalPowerConsumption\");\r\n            ifcPSE.PropertyName = \"NominalPowerConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Power Consumption\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ConsommationPuissanceNominale\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPowerConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.CapacityCurve\", \"CapacityCurve\");\r\n            ifcPSE.PropertyName = \"CapacityCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Capacity Curve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CourbePuissance\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.CoefficientOfPerformanceCurve\", \"CoefficientOfPerformanceCurve\");\r\n            ifcPSE.PropertyName = \"CoefficientOfPerformanceCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Coefficient Of Performance Curve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CourbeCOP\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoefficientOfPerformanceCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.FullLoadRatioCurve\", \"FullLoadRatioCurve\");\r\n            ifcPSE.PropertyName = \"FullLoadRatioCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Full Load Ratio Curve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CourbeFonctionnementPleineCharge\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FullLoadRatioCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ChillerTypeCommon\"))\r\n         {\r\n            propertySetChillerTypeCommon.EntityTypes.Add(IFCEntityType.IfcChiller);\r\n            propertySetChillerTypeCommon.EntityTypes.Add(IFCEntityType.IfcChillerType);\r\n            propertySetChillerTypeCommon.ObjectType = \"IfcChiller\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.ChillerCapacity\", \"ChillerCapacity\");\r\n            ifcPSE.PropertyName = \"ChillerCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChillerCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalEfficiency\", \"NominalEfficiency\");\r\n            ifcPSE.PropertyName = \"NominalEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalCondensingTemperature\", \"NominalCondensingTemperature\");\r\n            ifcPSE.PropertyName = \"NominalCondensingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCondensingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalEvaporatingTemperature\", \"NominalEvaporatingTemperature\");\r\n            ifcPSE.PropertyName = \"NominalEvaporatingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalEvaporatingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalHeatRejectionRate\", \"NominalHeatRejectionRate\");\r\n            ifcPSE.PropertyName = \"NominalHeatRejectionRate\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatRejectionRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.NominalPowerConsumption\", \"NominalPowerConsumption\");\r\n            ifcPSE.PropertyName = \"NominalPowerConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPowerConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.CapacityCurve\", \"CapacityCurve\");\r\n            ifcPSE.PropertyName = \"CapacityCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.CoefficientOfPerformanceCurve\", \"CoefficientOfPerformanceCurve\");\r\n            ifcPSE.PropertyName = \"CoefficientOfPerformanceCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoefficientOfPerformanceCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChillerTypeCommon.FullLoadRatioCurve\", \"FullLoadRatioCurve\");\r\n            ifcPSE.PropertyName = \"FullLoadRatioCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FullLoadRatioCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChillerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetChillerTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ChimneyCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetChimneyCommon = new PropertySetDescription();\r\n         propertySetChimneyCommon.Name = \"Pset_ChimneyCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ChimneyCommon\"))\r\n         {\r\n            propertySetChimneyCommon.EntityTypes.Add(IFCEntityType.IfcChimney);\r\n            propertySetChimneyCommon.ObjectType = \"IfcChimney\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChimneyCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bauteiltyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Référence\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChimneyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChimneyCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChimneyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChimneyCommon.NumberOfDrafts\", \"NumberOfDrafts\");\r\n            ifcPSE.PropertyName = \"NumberOfDrafts\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Zügigkeit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Drafts\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Nombre de conduits\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"穴の数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"烟道数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfDraftsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChimneyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChimneyCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Außenbauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Est extérieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否外部构件\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChimneyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChimneyCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"U-Wert\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Transmission thermique surfacique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱貫流率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"导热系数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChimneyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChimneyCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Tragendes Bauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Load Bearing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Porteur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐力部材\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否承重\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChimneyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChimneyCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Feuerwiderstandsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Résistance au feu\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐火等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"防火等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChimneyCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ChimneyCommon\"))\r\n         {\r\n            propertySetChimneyCommon.EntityTypes.Add(IFCEntityType.IfcChimney);\r\n            propertySetChimneyCommon.EntityTypes.Add(IFCEntityType.IfcChimneyType);\r\n            propertySetChimneyCommon.ObjectType = \"IfcChimney\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChimneyCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChimneyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChimneyCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChimneyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChimneyCommon.NumberOfDrafts\", \"NumberOfDrafts\");\r\n            ifcPSE.PropertyName = \"NumberOfDrafts\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfDraftsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChimneyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChimneyCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChimneyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChimneyCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChimneyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChimneyCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChimneyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ChimneyCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetChimneyCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetChimneyCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CivilElementCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCivilElementCommon = new PropertySetDescription();\r\n         propertySetCivilElementCommon.Name = \"Pset_CivilElementCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CivilElementCommon\"))\r\n         {\r\n            propertySetCivilElementCommon.EntityTypes.Add(IFCEntityType.IfcCivilElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CivilElementCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCivilElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CivilElementCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCivilElementCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CivilElementCommon\"))\r\n         {\r\n            propertySetCivilElementCommon.EntityTypes.Add(IFCEntityType.IfcCivilElement);\r\n            propertySetCivilElementCommon.EntityTypes.Add(IFCEntityType.IfcCivilElementType);\r\n            propertySetCivilElementCommon.ObjectType = \"IfcCivilElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CivilElementCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCivilElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CivilElementCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCivilElementCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCivilElementCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CoaxialCable(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCoaxialCable = new PropertySetDescription();\r\n         propertySetCoaxialCable.Name = \"Pset_CoaxialCable\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoaxialCable\"))\r\n         {\r\n            propertySetCoaxialCable.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetCoaxialCable.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetCoaxialCable.ObjectType = \"IfcCableSegment\";\r\n            propertySetCoaxialCable.PredefinedType = \"CABLESEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoaxialCable.CharacteristicImpedance\", \"CharacteristicImpedance\");\r\n            ifcPSE.PropertyName = \"CharacteristicImpedance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CharacteristicImpedanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoaxialCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoaxialCable.CouplingLoss\", \"CouplingLoss\");\r\n            ifcPSE.PropertyName = \"CouplingLoss\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CouplingLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoaxialCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoaxialCable.MaximumTransmissionAttenuation\", \"MaximumTransmissionAttenuation\");\r\n            ifcPSE.PropertyName = \"MaximumTransmissionAttenuation\";\r\n            ifcPSE.PropertyType = PropertyType.SoundPowerLevel;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumTransmissionAttenuationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoaxialCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoaxialCable.NumberOfCoaxialPairs\", \"NumberOfCoaxialPairs\");\r\n            ifcPSE.PropertyName = \"NumberOfCoaxialPairs\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCoaxialPairsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoaxialCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoaxialCable.PropagationSpeedCoefficient\", \"PropagationSpeedCoefficient\");\r\n            ifcPSE.PropertyName = \"PropagationSpeedCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PropagationSpeedCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoaxialCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoaxialCable.TransmissionLoss\", \"TransmissionLoss\");\r\n            ifcPSE.PropertyName = \"TransmissionLoss\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransmissionLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoaxialCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoaxialCable.RadiantFrequency\", \"RadiantFrequency\");\r\n            ifcPSE.PropertyName = \"RadiantFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RadiantFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoaxialCable.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCoaxialCable);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CoilOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCoilOccurrence = new PropertySetDescription();\r\n         propertySetCoilOccurrence.Name = \"Pset_CoilOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoilOccurrence\"))\r\n         {\r\n            propertySetCoilOccurrence.EntityTypes.Add(IFCEntityType.IfcCoil);\r\n            propertySetCoilOccurrence.ObjectType = \"IfcCoil\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilOccurrence.HasSoundAttenuation\", \"HasSoundAttenuation\");\r\n            ifcPSE.PropertyName = \"HasSoundAttenuation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Sound Attenuation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PossedeCorrectionAcoustique\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasSoundAttenuationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoilOccurrence\"))\r\n         {\r\n            propertySetCoilOccurrence.EntityTypes.Add(IFCEntityType.IfcCoil);\r\n            propertySetCoilOccurrence.ObjectType = \"IfcCoil\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilOccurrence.HasSoundAttenuation\", \"HasSoundAttenuation\");\r\n            ifcPSE.PropertyName = \"HasSoundAttenuation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasSoundAttenuationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCoilOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CoilPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCoilPHistory = new PropertySetDescription();\r\n         propertySetCoilPHistory.Name = \"Pset_CoilPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoilPHistory\"))\r\n         {\r\n            propertySetCoilPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilPHistory.AirPressureDropCurve\", \"AirPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilPHistory.SoundCurve\", \"SoundCurve\");\r\n            ifcPSE.PropertyName = \"SoundCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilPHistory.FaceVelocity\", \"FaceVelocity\");\r\n            ifcPSE.PropertyName = \"FaceVelocity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoilPHistory\"))\r\n         {\r\n            propertySetCoilPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilPHistory.AirPressureDropCurve\", \"AirPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilPHistory.SoundCurve\", \"SoundCurve\");\r\n            ifcPSE.PropertyName = \"SoundCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilPHistory.FaceVelocity\", \"FaceVelocity\");\r\n            ifcPSE.PropertyName = \"FaceVelocity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoilPHistory\"))\r\n         {\r\n            propertySetCoilPHistory.EntityTypes.Add(IFCEntityType.IfcCoil);\r\n            propertySetCoilPHistory.ObjectType = \"IfcCoil\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Atmospheric Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Pression atmosphérique\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilPHistory.AirPressureDropCurve\", \"AirPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurve\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Pressure Drop Curve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CourbePerteDeChargeAir\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilPHistory.SoundCurve\", \"SoundCurve\");\r\n            ifcPSE.PropertyName = \"SoundCurve\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sound Curve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CourbeSon\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilPHistory.FaceVelocity\", \"FaceVelocity\");\r\n            ifcPSE.PropertyName = \"FaceVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Face Velocity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"VitesseFace\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoilPHistory\"))\r\n         {\r\n            propertySetCoilPHistory.EntityTypes.Add(IFCEntityType.IfcCoil);\r\n            propertySetCoilPHistory.ObjectType = \"IfcCoil\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilPHistory.AirPressureDropCurveHistory\", \"AirPressureDropCurveHistory\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurveHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurveHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilPHistory.SoundCurveHistory\", \"SoundCurveHistory\");\r\n            ifcPSE.PropertyName = \"SoundCurveHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundCurveHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilPHistory.FaceVelocity\", \"FaceVelocity\");\r\n            ifcPSE.PropertyName = \"FaceVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCoilPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CoilTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCoilTypeCommon = new PropertySetDescription();\r\n         propertySetCoilTypeCommon.Name = \"Pset_CoilTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoilTypeCommon\"))\r\n         {\r\n            propertySetCoilTypeCommon.EntityTypes.Add(IFCEntityType.IfcCoilType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.OperationalTemperatureRange\", \"OperationalTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationalTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.AirflowRateRange\", \"AirflowRateRange\");\r\n            ifcPSE.PropertyName = \"AirflowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirflowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.NominalSensibleCapacity\", \"NominalSensibleCapacity\");\r\n            ifcPSE.PropertyName = \"NominalSensibleCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSensibleCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.NominalLatentCapacity\", \"NominalLatentCapacity\");\r\n            ifcPSE.PropertyName = \"NominalLatentCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLatentCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.NominalUA\", \"NominalUA\");\r\n            ifcPSE.PropertyName = \"NominalUA\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalUACalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoilTypeCommon\"))\r\n         {\r\n            propertySetCoilTypeCommon.EntityTypes.Add(IFCEntityType.IfcCoilType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.OperationalTemperatureRange\", \"OperationalTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationalTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.AirflowRateRange\", \"AirflowRateRange\");\r\n            ifcPSE.PropertyName = \"AirflowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirflowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.NominalSensibleCapacity\", \"NominalSensibleCapacity\");\r\n            ifcPSE.PropertyName = \"NominalSensibleCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSensibleCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.NominalLatentCapacity\", \"NominalLatentCapacity\");\r\n            ifcPSE.PropertyName = \"NominalLatentCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLatentCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.NominalUA\", \"NominalUA\");\r\n            ifcPSE.PropertyName = \"NominalUA\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalUACalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoilTypeCommon\"))\r\n         {\r\n            propertySetCoilTypeCommon.EntityTypes.Add(IFCEntityType.IfcCoil);\r\n            propertySetCoilTypeCommon.ObjectType = \"IfcCoil\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Référence\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Etat\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.OperationalTemperatureRange\", \"OperationalTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationalTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Operational Temperature Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PlageTemperatureFonctionnelle\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.AirflowRateRange\", \"AirflowRateRange\");\r\n            ifcPSE.PropertyName = \"AirflowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Airflow Rate Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PlageDébitAéraulique\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirflowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.NominalSensibleCapacity\", \"NominalSensibleCapacity\");\r\n            ifcPSE.PropertyName = \"NominalSensibleCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Sensible Capacity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PuissanceSensibleNominale\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSensibleCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.NominalLatentCapacity\", \"NominalLatentCapacity\");\r\n            ifcPSE.PropertyName = \"NominalLatentCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Latent Capacity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PuissanceLatenteNominale\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLatentCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.NominalUA\", \"NominalUA\");\r\n            ifcPSE.PropertyName = \"NominalUA\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal UA\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"UANominale\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalUACalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.PlacementType\", \"PlacementType\");\r\n            ifcPSE.PropertyName = \"PlacementType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CoilPlacementType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Placement Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TypeImplantation\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlacementTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoilTypeCommon\"))\r\n         {\r\n            propertySetCoilTypeCommon.EntityTypes.Add(IFCEntityType.IfcCoil);\r\n            propertySetCoilTypeCommon.EntityTypes.Add(IFCEntityType.IfcCoilType);\r\n            propertySetCoilTypeCommon.ObjectType = \"IfcCoil\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.OperationalTemperatureRange\", \"OperationalTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationalTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.AirFlowRateRange\", \"AirFlowRateRange\");\r\n            ifcPSE.PropertyName = \"AirFlowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.NominalSensibleCapacity\", \"NominalSensibleCapacity\");\r\n            ifcPSE.PropertyName = \"NominalSensibleCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSensibleCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.NominalLatentCapacity\", \"NominalLatentCapacity\");\r\n            ifcPSE.PropertyName = \"NominalLatentCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLatentCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.NominalUA\", \"NominalUA\");\r\n            ifcPSE.PropertyName = \"NominalUA\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalUACalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeCommon.CoilPlacement\", \"CoilPlacement\");\r\n            ifcPSE.PropertyName = \"CoilPlacement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CoilPlacementType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilPlacementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCoilTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CoilTypeHydronic(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCoilTypeHydronic = new PropertySetDescription();\r\n         propertySetCoilTypeHydronic.Name = \"Pset_CoilTypeHydronic\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoilTypeHydronic\"))\r\n         {\r\n            propertySetCoilTypeHydronic.EntityTypes.Add(IFCEntityType.IfcCoilType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.FluidPressureRange\", \"FluidPressureRange\");\r\n            ifcPSE.PropertyName = \"FluidPressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FluidPressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.CoilCoolant\", \"CoilCoolant\");\r\n            ifcPSE.PropertyName = \"CoilCoolant\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CoilCoolant);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilCoolantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.CoilConnectionDirection\", \"CoilConnectionDirection\");\r\n            ifcPSE.PropertyName = \"CoilConnectionDirection\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CoilConnectionDirection);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilConnectionDirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.CoilFluidArrangement\", \"CoilFluidArrangement\");\r\n            ifcPSE.PropertyName = \"CoilFluidArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CoilFluidArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilFluidArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.CoilFaceArea\", \"CoilFaceArea\");\r\n            ifcPSE.PropertyName = \"CoilFaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilFaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.HeatExchangeSurfaceArea\", \"HeatExchangeSurfaceArea\");\r\n            ifcPSE.PropertyName = \"HeatExchangeSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatExchangeSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.PrimarySurfaceArea\", \"PrimarySurfaceArea\");\r\n            ifcPSE.PropertyName = \"PrimarySurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimarySurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.SecondarySurfaceArea\", \"SecondarySurfaceArea\");\r\n            ifcPSE.PropertyName = \"SecondarySurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondarySurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.Fluid\", \"Fluid\");\r\n            ifcPSE.PropertyName = \"Fluid\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FluidCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.TotalUACurves\", \"TotalUACurves\");\r\n            ifcPSE.PropertyName = \"TotalUACurves\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalUACurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.WaterPressureDropCurve\", \"WaterPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"WaterPressureDropCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.BypassFactor\", \"BypassFactor\");\r\n            ifcPSE.PropertyName = \"BypassFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BypassFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.SensibleHeatRatio\", \"SensibleHeatRatio\");\r\n            ifcPSE.PropertyName = \"SensibleHeatRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleHeatRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.WetCoilFraction\", \"WetCoilFraction\");\r\n            ifcPSE.PropertyName = \"WetCoilFraction\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WetCoilFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoilTypeHydronic\"))\r\n         {\r\n            propertySetCoilTypeHydronic.EntityTypes.Add(IFCEntityType.IfcCoilType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.FluidPressureRange\", \"FluidPressureRange\");\r\n            ifcPSE.PropertyName = \"FluidPressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FluidPressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.CoilCoolant\", \"CoilCoolant\");\r\n            ifcPSE.PropertyName = \"CoilCoolant\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CoilCoolant);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilCoolantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.CoilConnectionDirection\", \"CoilConnectionDirection\");\r\n            ifcPSE.PropertyName = \"CoilConnectionDirection\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CoilConnectionDirection);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilConnectionDirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.CoilFluidArrangement\", \"CoilFluidArrangement\");\r\n            ifcPSE.PropertyName = \"CoilFluidArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CoilFluidArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilFluidArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.CoilFaceArea\", \"CoilFaceArea\");\r\n            ifcPSE.PropertyName = \"CoilFaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilFaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.HeatExchangeSurfaceArea\", \"HeatExchangeSurfaceArea\");\r\n            ifcPSE.PropertyName = \"HeatExchangeSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatExchangeSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.PrimarySurfaceArea\", \"PrimarySurfaceArea\");\r\n            ifcPSE.PropertyName = \"PrimarySurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimarySurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.SecondarySurfaceArea\", \"SecondarySurfaceArea\");\r\n            ifcPSE.PropertyName = \"SecondarySurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondarySurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.Fluid\", \"Fluid\");\r\n            ifcPSE.PropertyName = \"Fluid\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FluidCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.TotalUACurves\", \"TotalUACurves\");\r\n            ifcPSE.PropertyName = \"TotalUACurves\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalUACurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.WaterPressureDropCurve\", \"WaterPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"WaterPressureDropCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.BypassFactor\", \"BypassFactor\");\r\n            ifcPSE.PropertyName = \"BypassFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BypassFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.SensibleHeatRatio\", \"SensibleHeatRatio\");\r\n            ifcPSE.PropertyName = \"SensibleHeatRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleHeatRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.WetCoilFraction\", \"WetCoilFraction\");\r\n            ifcPSE.PropertyName = \"WetCoilFraction\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WetCoilFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoilTypeHydronic\"))\r\n         {\r\n            propertySetCoilTypeHydronic.EntityTypes.Add(IFCEntityType.IfcCoil);\r\n            propertySetCoilTypeHydronic.ObjectType = \"IfcCoil\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.FluidPressureRange\", \"FluidPressureRange\");\r\n            ifcPSE.PropertyName = \"FluidPressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fluid Pressure Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PlagePressionFluide\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FluidPressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.CoilCoolant\", \"CoilCoolant\");\r\n            ifcPSE.PropertyName = \"CoilCoolant\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CoilCoolant);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Coil Coolant\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"RefrigerantBatterie\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilCoolantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.CoilConnectionDirection\", \"CoilConnectionDirection\");\r\n            ifcPSE.PropertyName = \"CoilConnectionDirection\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CoilConnectionDirection);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Coil Connection Direction\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DirectionConnexionBatterie\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilConnectionDirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.CoilFluidArrangement\", \"CoilFluidArrangement\");\r\n            ifcPSE.PropertyName = \"CoilFluidArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CoilFluidArrangement);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Coil Fluid Arrangement\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DispositionFluideBatterie\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilFluidArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.CoilFaceArea\", \"CoilFaceArea\");\r\n            ifcPSE.PropertyName = \"CoilFaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Coil Face Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"SurfaceEchangeBatterie\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilFaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.HeatExchangeSurfaceArea\", \"HeatExchangeSurfaceArea\");\r\n            ifcPSE.PropertyName = \"HeatExchangeSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heat Exchange Surface Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"SurfaceEchangeThermique\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatExchangeSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.PrimarySurfaceArea\", \"PrimarySurfaceArea\");\r\n            ifcPSE.PropertyName = \"PrimarySurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Primary Surface Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"SurfaceEchangePrimaire\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimarySurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.SecondarySurfaceArea\", \"SecondarySurfaceArea\");\r\n            ifcPSE.PropertyName = \"SecondarySurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Secondary Surface Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"SurfaceEchangeSecondaire\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondarySurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.TotalUACurves\", \"TotalUACurves\");\r\n            ifcPSE.PropertyName = \"TotalUACurves\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total UACurves\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CourbesCoefficientTransmissionThermiqueTotal\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalUACurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.WaterPressureDropCurve\", \"WaterPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"WaterPressureDropCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Pressure Drop Curve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CourbePerteChargeHydraulique\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.BypassFactor\", \"BypassFactor\");\r\n            ifcPSE.PropertyName = \"BypassFactor\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Bypass Factor\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"FacteurBypass\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BypassFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.SensibleHeatRatio\", \"SensibleHeatRatio\");\r\n            ifcPSE.PropertyName = \"SensibleHeatRatio\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sensible Heat Ratio\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"RatioChaleurSensible\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleHeatRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.WetCoilFraction\", \"WetCoilFraction\");\r\n            ifcPSE.PropertyName = \"WetCoilFraction\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wet Coil Fraction\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"FractionBatterieHumide\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WetCoilFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoilTypeHydronic\"))\r\n         {\r\n            propertySetCoilTypeHydronic.EntityTypes.Add(IFCEntityType.IfcCoil);\r\n            propertySetCoilTypeHydronic.EntityTypes.Add(IFCEntityType.IfcCoilType);\r\n            propertySetCoilTypeHydronic.ObjectType = \"IfcCoil\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.FluidPressureRange\", \"FluidPressureRange\");\r\n            ifcPSE.PropertyName = \"FluidPressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FluidPressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.CoilCoolant\", \"CoilCoolant\");\r\n            ifcPSE.PropertyName = \"CoilCoolant\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CoilCoolant);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilCoolantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.CoilConnectionDirection\", \"CoilConnectionDirection\");\r\n            ifcPSE.PropertyName = \"CoilConnectionDirection\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CoilConnectionDirection);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilConnectionDirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.CoilFluidArrangement\", \"CoilFluidArrangement\");\r\n            ifcPSE.PropertyName = \"CoilFluidArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CoilFluidArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilFluidArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.CoilFaceArea\", \"CoilFaceArea\");\r\n            ifcPSE.PropertyName = \"CoilFaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilFaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.HeatExchangeSurfaceArea\", \"HeatExchangeSurfaceArea\");\r\n            ifcPSE.PropertyName = \"HeatExchangeSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatExchangeSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.PrimarySurfaceArea\", \"PrimarySurfaceArea\");\r\n            ifcPSE.PropertyName = \"PrimarySurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimarySurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.SecondarySurfaceArea\", \"SecondarySurfaceArea\");\r\n            ifcPSE.PropertyName = \"SecondarySurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondarySurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.TotalUACurves\", \"TotalUACurves\");\r\n            ifcPSE.PropertyName = \"TotalUACurves\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalUACurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.WaterPressureDropCurve\", \"WaterPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"WaterPressureDropCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.BypassFactor\", \"BypassFactor\");\r\n            ifcPSE.PropertyName = \"BypassFactor\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BypassFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.SensibleHeatRatio\", \"SensibleHeatRatio\");\r\n            ifcPSE.PropertyName = \"SensibleHeatRatio\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleHeatRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoilTypeHydronic.WetCoilFraction\", \"WetCoilFraction\");\r\n            ifcPSE.PropertyName = \"WetCoilFraction\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WetCoilFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoilTypeHydronic.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCoilTypeHydronic);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ColumnCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetColumnCommon = new PropertySetDescription();\r\n         propertySetColumnCommon.Name = \"Pset_ColumnCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ColumnCommon\"))\r\n         {\r\n            propertySetColumnCommon.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ColumnCommon\"))\r\n         {\r\n            propertySetColumnCommon.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ColumnCommon\"))\r\n         {\r\n            propertySetColumnCommon.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            propertySetColumnCommon.ObjectType = \"IfcColumn\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bauteiltyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Neigungswinkel\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Slope\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Inclinaison\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"傾斜\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"坡度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.Roll\", \"Roll\");\r\n            ifcPSE.PropertyName = \"Roll\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Drehwinkel\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Roll\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"RotationAutourAxeLongitudinal\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"回転\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"转角\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RollCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Außenbauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EstExterieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否外部构件\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"U-Wert\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TransmissionThermique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱貫流率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"导热系数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Tragendes Bauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Load Bearing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Porteur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐力部材\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否承重\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Feuerwiderstandsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ResistanceAuFeu\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐火等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"防火等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ColumnCommon\"))\r\n         {\r\n            propertySetColumnCommon.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            propertySetColumnCommon.EntityTypes.Add(IFCEntityType.IfcColumnType);\r\n            propertySetColumnCommon.ObjectType = \"IfcColumn\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.Roll\", \"Roll\");\r\n            ifcPSE.PropertyName = \"Roll\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RollCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ColumnCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetColumnCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetColumnCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CommunicationsAppliancePHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCommunicationsAppliancePHistory = new PropertySetDescription();\r\n         propertySetCommunicationsAppliancePHistory.Name = \"Pset_CommunicationsAppliancePHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CommunicationsAppliancePHistory\"))\r\n         {\r\n            propertySetCommunicationsAppliancePHistory.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetCommunicationsAppliancePHistory.ObjectType = \"IfcCommunicationsAppliance\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsAppliancePHistory.PowerState\", \"PowerState\");\r\n            ifcPSE.PropertyName = \"PowerState\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Power State\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsAppliancePHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CommunicationsAppliancePHistory\"))\r\n         {\r\n            propertySetCommunicationsAppliancePHistory.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetCommunicationsAppliancePHistory.ObjectType = \"IfcCommunicationsAppliance\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsAppliancePHistory.PowerState\", \"PowerState\");\r\n            ifcPSE.PropertyName = \"PowerState\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsAppliancePHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCommunicationsAppliancePHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CommunicationsApplianceTypeAntenna(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCommunicationsApplianceTypeAntenna = new PropertySetDescription();\r\n         propertySetCommunicationsApplianceTypeAntenna.Name = \"Pset_CommunicationsApplianceTypeAntenna\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CommunicationsApplianceTypeAntenna\"))\r\n         {\r\n            propertySetCommunicationsApplianceTypeAntenna.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetCommunicationsApplianceTypeAntenna.EntityTypes.Add(IFCEntityType.IfcCommunicationsApplianceType);\r\n            propertySetCommunicationsApplianceTypeAntenna.ObjectType = \"IfcCommunicationsAppliance\";\r\n            propertySetCommunicationsApplianceTypeAntenna.PredefinedType = \"ANTENNA\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeAntenna.AntennaGain\", \"AntennaGain\");\r\n            ifcPSE.PropertyName = \"AntennaGain\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AntennaGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeAntenna.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeAntenna.PolarizationMode\", \"PolarizationMode\");\r\n            ifcPSE.PropertyName = \"PolarizationMode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_PolarizationMode);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PolarizationModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeAntenna.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeAntenna.RadiationPattern\", \"RadiationPattern\");\r\n            ifcPSE.PropertyName = \"RadiationPattern\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RadiationPattern);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RadiationPatternCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeAntenna.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeAntenna.AntennaType\", \"AntennaType\");\r\n            ifcPSE.PropertyName = \"AntennaType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AntennaType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AntennaTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeAntenna.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCommunicationsApplianceTypeAntenna);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CommunicationsApplianceTypeAutomaton(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCommunicationsApplianceTypeAutomaton = new PropertySetDescription();\r\n         propertySetCommunicationsApplianceTypeAutomaton.Name = \"Pset_CommunicationsApplianceTypeAutomaton\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CommunicationsApplianceTypeAutomaton\"))\r\n         {\r\n            propertySetCommunicationsApplianceTypeAutomaton.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetCommunicationsApplianceTypeAutomaton.EntityTypes.Add(IFCEntityType.IfcCommunicationsApplianceType);\r\n            propertySetCommunicationsApplianceTypeAutomaton.ObjectType = \"IfcCommunicationsAppliance\";\r\n            propertySetCommunicationsApplianceTypeAutomaton.PredefinedType = \"AUTOMATON\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeAutomaton.InputSignalType\", \"InputSignalType\");\r\n            ifcPSE.PropertyName = \"InputSignalType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_InputOutputSignalType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputSignalTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeAutomaton.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeAutomaton.OutputSignalType\", \"OutputSignalType\");\r\n            ifcPSE.PropertyName = \"OutputSignalType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_InputOutputSignalType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutputSignalTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeAutomaton.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCommunicationsApplianceTypeAutomaton);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CommunicationsApplianceTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCommunicationsApplianceTypeCommon = new PropertySetDescription();\r\n         propertySetCommunicationsApplianceTypeCommon.Name = \"Pset_CommunicationsApplianceTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CommunicationsApplianceTypeCommon\"))\r\n         {\r\n            propertySetCommunicationsApplianceTypeCommon.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetCommunicationsApplianceTypeCommon.ObjectType = \"IfcCommunicationsAppliance\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CommunicationsApplianceTypeCommon\"))\r\n         {\r\n            propertySetCommunicationsApplianceTypeCommon.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetCommunicationsApplianceTypeCommon.EntityTypes.Add(IFCEntityType.IfcCommunicationsApplianceType);\r\n            propertySetCommunicationsApplianceTypeCommon.ObjectType = \"IfcCommunicationsAppliance\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCommunicationsApplianceTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CommunicationsApplianceTypeComputer(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCommunicationsApplianceTypeComputer = new PropertySetDescription();\r\n         propertySetCommunicationsApplianceTypeComputer.Name = \"Pset_CommunicationsApplianceTypeComputer\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CommunicationsApplianceTypeComputer\"))\r\n         {\r\n            propertySetCommunicationsApplianceTypeComputer.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetCommunicationsApplianceTypeComputer.EntityTypes.Add(IFCEntityType.IfcCommunicationsApplianceType);\r\n            propertySetCommunicationsApplianceTypeComputer.ObjectType = \"IfcCommunicationsAppliance\";\r\n            propertySetCommunicationsApplianceTypeComputer.PredefinedType = \"COMPUTER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeComputer.StorageCapacity\", \"StorageCapacity\");\r\n            ifcPSE.PropertyName = \"StorageCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StorageCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeComputer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeComputer.UserInterfaceType\", \"UserInterfaceType\");\r\n            ifcPSE.PropertyName = \"UserInterfaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ComputerUIType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UserInterfaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeComputer.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCommunicationsApplianceTypeComputer);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CommunicationsApplianceTypeGateway(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCommunicationsApplianceTypeGateway = new PropertySetDescription();\r\n         propertySetCommunicationsApplianceTypeGateway.Name = \"Pset_CommunicationsApplianceTypeGateway\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CommunicationsApplianceTypeGateway\"))\r\n         {\r\n            propertySetCommunicationsApplianceTypeGateway.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetCommunicationsApplianceTypeGateway.EntityTypes.Add(IFCEntityType.IfcCommunicationsApplianceType);\r\n            propertySetCommunicationsApplianceTypeGateway.ObjectType = \"IfcCommunicationsAppliance\";\r\n            propertySetCommunicationsApplianceTypeGateway.PredefinedType = \"GATEWAY\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeGateway.NumberOfInterfaces\", \"NumberOfInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeGateway.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCommunicationsApplianceTypeGateway);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CommunicationsApplianceTypeIntelligentPeripheral(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCommunicationsApplianceTypeIntelligentPeripheral = new PropertySetDescription();\r\n         propertySetCommunicationsApplianceTypeIntelligentPeripheral.Name = \"Pset_CommunicationsApplianceTypeIntelligentPeripheral\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CommunicationsApplianceTypeIntelligentPeripheral\"))\r\n         {\r\n            propertySetCommunicationsApplianceTypeIntelligentPeripheral.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetCommunicationsApplianceTypeIntelligentPeripheral.EntityTypes.Add(IFCEntityType.IfcCommunicationsApplianceType);\r\n            propertySetCommunicationsApplianceTypeIntelligentPeripheral.ObjectType = \"IfcCommunicationsAppliance\";\r\n            propertySetCommunicationsApplianceTypeIntelligentPeripheral.PredefinedType = \"INTELLIGENTPERIPHERAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeIntelligentPeripheral.UserCapacity\", \"UserCapacity\");\r\n            ifcPSE.PropertyName = \"UserCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UserCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeIntelligentPeripheral.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCommunicationsApplianceTypeIntelligentPeripheral);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CommunicationsApplianceTypeIpNetworkEquipment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCommunicationsApplianceTypeIpNetworkEquipment = new PropertySetDescription();\r\n         propertySetCommunicationsApplianceTypeIpNetworkEquipment.Name = \"Pset_CommunicationsApplianceTypeIpNetworkEquipment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CommunicationsApplianceTypeIpNetworkEquipment\"))\r\n         {\r\n            propertySetCommunicationsApplianceTypeIpNetworkEquipment.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetCommunicationsApplianceTypeIpNetworkEquipment.EntityTypes.Add(IFCEntityType.IfcCommunicationsApplianceType);\r\n            propertySetCommunicationsApplianceTypeIpNetworkEquipment.ObjectType = \"IfcCommunicationsAppliance\";\r\n            propertySetCommunicationsApplianceTypeIpNetworkEquipment.PredefinedType = \"IPNETWORKEQUIPMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeIpNetworkEquipment.NumberOfSlots\", \"NumberOfSlots\");\r\n            ifcPSE.PropertyName = \"NumberOfSlots\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSlotsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeIpNetworkEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeIpNetworkEquipment.EquipmentCapacity\", \"EquipmentCapacity\");\r\n            ifcPSE.PropertyName = \"EquipmentCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.IntegerCountRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EquipmentCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeIpNetworkEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeIpNetworkEquipment.NumberOfCoolingFans\", \"NumberOfCoolingFans\");\r\n            ifcPSE.PropertyName = \"NumberOfCoolingFans\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCoolingFansCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeIpNetworkEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeIpNetworkEquipment.SupportedProtocol\", \"SupportedProtocol\");\r\n            ifcPSE.PropertyName = \"SupportedProtocol\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupportedProtocolCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeIpNetworkEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeIpNetworkEquipment.ManagingSoftware\", \"ManagingSoftware\");\r\n            ifcPSE.PropertyName = \"ManagingSoftware\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ManagingSoftwareCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeIpNetworkEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeIpNetworkEquipment.NumberOfInterfaces\", \"NumberOfInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeIpNetworkEquipment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCommunicationsApplianceTypeIpNetworkEquipment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CommunicationsApplianceTypeModem(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCommunicationsApplianceTypeModem = new PropertySetDescription();\r\n         propertySetCommunicationsApplianceTypeModem.Name = \"Pset_CommunicationsApplianceTypeModem\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CommunicationsApplianceTypeModem\"))\r\n         {\r\n            propertySetCommunicationsApplianceTypeModem.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetCommunicationsApplianceTypeModem.EntityTypes.Add(IFCEntityType.IfcCommunicationsApplianceType);\r\n            propertySetCommunicationsApplianceTypeModem.ObjectType = \"IfcCommunicationsAppliance\";\r\n            propertySetCommunicationsApplianceTypeModem.PredefinedType = \"MODEM\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeModem.NumberOfCommonInterfaces\", \"NumberOfCommonInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfCommonInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCommonInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeModem.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeModem.NumberOfTrafficInterfaces\", \"NumberOfTrafficInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfTrafficInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfTrafficInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeModem.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeModem.CommonInterfaceType\", \"CommonInterfaceType\");\r\n            ifcPSE.PropertyName = \"CommonInterfaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CommonInterfaceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CommonInterfaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeModem.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeModem.TrafficInterfaceType\", \"TrafficInterfaceType\");\r\n            ifcPSE.PropertyName = \"TrafficInterfaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ModemTrafficInterfaceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrafficInterfaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeModem.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCommunicationsApplianceTypeModem);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CommunicationsApplianceTypeOpticalLineTerminal(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCommunicationsApplianceTypeOpticalLineTerminal = new PropertySetDescription();\r\n         propertySetCommunicationsApplianceTypeOpticalLineTerminal.Name = \"Pset_CommunicationsApplianceTypeOpticalLineTerminal\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CommunicationsApplianceTypeOpticalLineTerminal\"))\r\n         {\r\n            propertySetCommunicationsApplianceTypeOpticalLineTerminal.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetCommunicationsApplianceTypeOpticalLineTerminal.EntityTypes.Add(IFCEntityType.IfcCommunicationsApplianceType);\r\n            propertySetCommunicationsApplianceTypeOpticalLineTerminal.ObjectType = \"IfcCommunicationsAppliance\";\r\n            propertySetCommunicationsApplianceTypeOpticalLineTerminal.PredefinedType = \"OPTICALLINETERMINAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeOpticalLineTerminal.NumberOfSlots\", \"NumberOfSlots\");\r\n            ifcPSE.PropertyName = \"NumberOfSlots\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSlotsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeOpticalLineTerminal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeOpticalLineTerminal.NumberOfInterfaces\", \"NumberOfInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeOpticalLineTerminal.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCommunicationsApplianceTypeOpticalLineTerminal);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CommunicationsApplianceTypeOpticalNetworkUnit(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCommunicationsApplianceTypeOpticalNetworkUnit = new PropertySetDescription();\r\n         propertySetCommunicationsApplianceTypeOpticalNetworkUnit.Name = \"Pset_CommunicationsApplianceTypeOpticalNetworkUnit\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CommunicationsApplianceTypeOpticalNetworkUnit\"))\r\n         {\r\n            propertySetCommunicationsApplianceTypeOpticalNetworkUnit.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetCommunicationsApplianceTypeOpticalNetworkUnit.EntityTypes.Add(IFCEntityType.IfcCommunicationsApplianceType);\r\n            propertySetCommunicationsApplianceTypeOpticalNetworkUnit.ObjectType = \"IfcCommunicationsAppliance\";\r\n            propertySetCommunicationsApplianceTypeOpticalNetworkUnit.PredefinedType = \"OPTICALNETWORKUNIT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeOpticalNetworkUnit.OpticalNetworkUnitType\", \"OpticalNetworkUnitType\");\r\n            ifcPSE.PropertyName = \"OpticalNetworkUnitType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_OpticalNetworkUnitType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OpticalNetworkUnitTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeOpticalNetworkUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeOpticalNetworkUnit.NumberOfInterfaces\", \"NumberOfInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeOpticalNetworkUnit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCommunicationsApplianceTypeOpticalNetworkUnit);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CommunicationsApplianceTypeTelecommand(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCommunicationsApplianceTypeTelecommand = new PropertySetDescription();\r\n         propertySetCommunicationsApplianceTypeTelecommand.Name = \"Pset_CommunicationsApplianceTypeTelecommand\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CommunicationsApplianceTypeTelecommand\"))\r\n         {\r\n            propertySetCommunicationsApplianceTypeTelecommand.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetCommunicationsApplianceTypeTelecommand.EntityTypes.Add(IFCEntityType.IfcCommunicationsApplianceType);\r\n            propertySetCommunicationsApplianceTypeTelecommand.ObjectType = \"IfcCommunicationsAppliance\";\r\n            propertySetCommunicationsApplianceTypeTelecommand.PredefinedType = \"TELECOMMAND\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeTelecommand.NumberOfWorkstations\", \"NumberOfWorkstations\");\r\n            ifcPSE.PropertyName = \"NumberOfWorkstations\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfWorkstationsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeTelecommand.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeTelecommand.NumberOfCPUs\", \"NumberOfCPUs\");\r\n            ifcPSE.PropertyName = \"NumberOfCPUs\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCPUsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeTelecommand.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCommunicationsApplianceTypeTelecommand);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CommunicationsApplianceTypeTelephonyExchange(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCommunicationsApplianceTypeTelephonyExchange = new PropertySetDescription();\r\n         propertySetCommunicationsApplianceTypeTelephonyExchange.Name = \"Pset_CommunicationsApplianceTypeTelephonyExchange\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CommunicationsApplianceTypeTelephonyExchange\"))\r\n         {\r\n            propertySetCommunicationsApplianceTypeTelephonyExchange.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetCommunicationsApplianceTypeTelephonyExchange.EntityTypes.Add(IFCEntityType.IfcCommunicationsApplianceType);\r\n            propertySetCommunicationsApplianceTypeTelephonyExchange.ObjectType = \"IfcCommunicationsAppliance\";\r\n            propertySetCommunicationsApplianceTypeTelephonyExchange.PredefinedType = \"TELEPHONYEXCHANGE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeTelephonyExchange.UserCapacity\", \"UserCapacity\");\r\n            ifcPSE.PropertyName = \"UserCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UserCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeTelephonyExchange.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCommunicationsApplianceTypeTelephonyExchange);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CommunicationsApplianceTypeTransportEquipment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCommunicationsApplianceTypeTransportEquipment = new PropertySetDescription();\r\n         propertySetCommunicationsApplianceTypeTransportEquipment.Name = \"Pset_CommunicationsApplianceTypeTransportEquipment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CommunicationsApplianceTypeTransportEquipment\"))\r\n         {\r\n            propertySetCommunicationsApplianceTypeTransportEquipment.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetCommunicationsApplianceTypeTransportEquipment.EntityTypes.Add(IFCEntityType.IfcCommunicationsApplianceType);\r\n            propertySetCommunicationsApplianceTypeTransportEquipment.ObjectType = \"IfcCommunicationsAppliance\";\r\n            propertySetCommunicationsApplianceTypeTransportEquipment.PredefinedType = \"TRANSPORTEQUIPMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeTransportEquipment.IsUpgradable\", \"IsUpgradable\");\r\n            ifcPSE.PropertyName = \"IsUpgradable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsUpgradableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeTransportEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeTransportEquipment.ElectricalCrossCapacity\", \"ElectricalCrossCapacity\");\r\n            ifcPSE.PropertyName = \"ElectricalCrossCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricalCrossCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeTransportEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeTransportEquipment.NumberOfSlots\", \"NumberOfSlots\");\r\n            ifcPSE.PropertyName = \"NumberOfSlots\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSlotsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeTransportEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeTransportEquipment.TransportEquipmentType\", \"TransportEquipmentType\");\r\n            ifcPSE.PropertyName = \"TransportEquipmentType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TransportEquipmentType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransportEquipmentTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeTransportEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CommunicationsApplianceTypeTransportEquipment.TransportEquipmentAssemblyType\", \"TransportEquipmentAssemblyType\");\r\n            ifcPSE.PropertyName = \"TransportEquipmentAssemblyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TransportEquipmentAssemblyType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransportEquipmentAssemblyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCommunicationsApplianceTypeTransportEquipment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCommunicationsApplianceTypeTransportEquipment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CompressorPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCompressorPHistory = new PropertySetDescription();\r\n         propertySetCompressorPHistory.Name = \"Pset_CompressorPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CompressorPHistory\"))\r\n         {\r\n            propertySetCompressorPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CompressorCapacity\", \"CompressorCapacity\");\r\n            ifcPSE.PropertyName = \"CompressorCapacity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.EnergyEfficiencyRatio\", \"EnergyEfficiencyRatio\");\r\n            ifcPSE.PropertyName = \"EnergyEfficiencyRatio\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyEfficiencyRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CoefficientOfPerformance\", \"CoefficientOfPerformance\");\r\n            ifcPSE.PropertyName = \"CoefficientOfPerformance\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoefficientOfPerformanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.VolumetricEfficiency\", \"VolumetricEfficiency\");\r\n            ifcPSE.PropertyName = \"VolumetricEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumetricEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CompressionEfficiency\", \"CompressionEfficiency\");\r\n            ifcPSE.PropertyName = \"CompressionEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressionEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.MechanicalEfficiency\", \"MechanicalEfficiency\");\r\n            ifcPSE.PropertyName = \"MechanicalEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.IsentropicEfficiency\", \"IsentropicEfficiency\");\r\n            ifcPSE.PropertyName = \"IsentropicEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsentropicEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CompressorTotalEfficiency\", \"CompressorTotalEfficiency\");\r\n            ifcPSE.PropertyName = \"CompressorTotalEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorTotalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.ShaftPower\", \"ShaftPower\");\r\n            ifcPSE.PropertyName = \"ShaftPower\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShaftPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.InputPower\", \"InputPower\");\r\n            ifcPSE.PropertyName = \"InputPower\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.LubricantPumpHeatGain\", \"LubricantPumpHeatGain\");\r\n            ifcPSE.PropertyName = \"LubricantPumpHeatGain\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LubricantPumpHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.FrictionHeatGain\", \"FrictionHeatGain\");\r\n            ifcPSE.PropertyName = \"FrictionHeatGain\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrictionHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CompressorTotalHeatGain\", \"CompressorTotalHeatGain\");\r\n            ifcPSE.PropertyName = \"CompressorTotalHeatGain\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorTotalHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.FullLoadRatioCurve\", \"FullLoadRatioCurve\");\r\n            ifcPSE.PropertyName = \"FullLoadRatioCurve\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FullLoadRatioCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CompressorPHistory\"))\r\n         {\r\n            propertySetCompressorPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CompressorCapacity\", \"CompressorCapacity\");\r\n            ifcPSE.PropertyName = \"CompressorCapacity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.EnergyEfficiencyRatio\", \"EnergyEfficiencyRatio\");\r\n            ifcPSE.PropertyName = \"EnergyEfficiencyRatio\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyEfficiencyRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CoefficientOfPerformance\", \"CoefficientOfPerformance\");\r\n            ifcPSE.PropertyName = \"CoefficientOfPerformance\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoefficientOfPerformanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.VolumetricEfficiency\", \"VolumetricEfficiency\");\r\n            ifcPSE.PropertyName = \"VolumetricEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumetricEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CompressionEfficiency\", \"CompressionEfficiency\");\r\n            ifcPSE.PropertyName = \"CompressionEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressionEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.MechanicalEfficiency\", \"MechanicalEfficiency\");\r\n            ifcPSE.PropertyName = \"MechanicalEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.IsentropicEfficiency\", \"IsentropicEfficiency\");\r\n            ifcPSE.PropertyName = \"IsentropicEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsentropicEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CompressorTotalEfficiency\", \"CompressorTotalEfficiency\");\r\n            ifcPSE.PropertyName = \"CompressorTotalEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorTotalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.ShaftPower\", \"ShaftPower\");\r\n            ifcPSE.PropertyName = \"ShaftPower\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShaftPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.InputPower\", \"InputPower\");\r\n            ifcPSE.PropertyName = \"InputPower\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.LubricantPumpHeatGain\", \"LubricantPumpHeatGain\");\r\n            ifcPSE.PropertyName = \"LubricantPumpHeatGain\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LubricantPumpHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.FrictionHeatGain\", \"FrictionHeatGain\");\r\n            ifcPSE.PropertyName = \"FrictionHeatGain\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrictionHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CompressorTotalHeatGain\", \"CompressorTotalHeatGain\");\r\n            ifcPSE.PropertyName = \"CompressorTotalHeatGain\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorTotalHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.FullLoadRatioCurve\", \"FullLoadRatioCurve\");\r\n            ifcPSE.PropertyName = \"FullLoadRatioCurve\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FullLoadRatioCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CompressorPHistory\"))\r\n         {\r\n            propertySetCompressorPHistory.EntityTypes.Add(IFCEntityType.IfcCompressor);\r\n            propertySetCompressorPHistory.ObjectType = \"IfcCompressor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CompressorCapacity\", \"CompressorCapacity\");\r\n            ifcPSE.PropertyName = \"CompressorCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Compressor Capacity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PuissanceCompresseur\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.EnergyEfficiencyRatio\", \"EnergyEfficiencyRatio\");\r\n            ifcPSE.PropertyName = \"EnergyEfficiencyRatio\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Energy Efficiency Ratio\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CoefficientEfficacitéThermique\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyEfficiencyRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CoefficientOfPerformance\", \"CoefficientOfPerformance\");\r\n            ifcPSE.PropertyName = \"CoefficientOfPerformance\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Coefficient Of Performance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CoefficientPerformance\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoefficientOfPerformanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.VolumetricEfficiency\", \"VolumetricEfficiency\");\r\n            ifcPSE.PropertyName = \"VolumetricEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Volumetric Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"RendementVolumétrique\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumetricEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CompressionEfficiency\", \"CompressionEfficiency\");\r\n            ifcPSE.PropertyName = \"CompressionEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Compression Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"RendementCompression\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressionEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.MechanicalEfficiency\", \"MechanicalEfficiency\");\r\n            ifcPSE.PropertyName = \"MechanicalEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mechanical Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"RendementMécanique\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.IsentropicEfficiency\", \"IsentropicEfficiency\");\r\n            ifcPSE.PropertyName = \"IsentropicEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Isentropic Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"RendementIsentropique\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsentropicEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CompressorTotalEfficiency\", \"CompressorTotalEfficiency\");\r\n            ifcPSE.PropertyName = \"CompressorTotalEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Compressor Total Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"RendementGlobalIsentropique\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorTotalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.ShaftPower\", \"ShaftPower\");\r\n            ifcPSE.PropertyName = \"ShaftPower\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shaft Power\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PuissanceArbre\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShaftPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.InputPower\", \"InputPower\");\r\n            ifcPSE.PropertyName = \"InputPower\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Input Power\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PuissanceEntréeMoteur\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.LubricantPumpHeatGain\", \"LubricantPumpHeatGain\");\r\n            ifcPSE.PropertyName = \"LubricantPumpHeatGain\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lubricant Pump Heat Gain\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"GainThermiqueLubrifiantPompe\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LubricantPumpHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.FrictionHeatGain\", \"FrictionHeatGain\");\r\n            ifcPSE.PropertyName = \"FrictionHeatGain\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Friction Heat Gain\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"GainThermiqueFriction\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrictionHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CompressorTotalHeatGain\", \"CompressorTotalHeatGain\");\r\n            ifcPSE.PropertyName = \"CompressorTotalHeatGain\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Compressor Total Heat Gain\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"GainThermiqueTotalCompresseur\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorTotalHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.FullLoadRatio\", \"FullLoadRatio\");\r\n            ifcPSE.PropertyName = \"FullLoadRatio\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Full Load Ratio\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CoefficientChargeTotale\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FullLoadRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CompressorPHistory\"))\r\n         {\r\n            propertySetCompressorPHistory.EntityTypes.Add(IFCEntityType.IfcCompressor);\r\n            propertySetCompressorPHistory.ObjectType = \"IfcCompressor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CompressorCapacity\", \"CompressorCapacity\");\r\n            ifcPSE.PropertyName = \"CompressorCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.EnergyEfficiencyRatio\", \"EnergyEfficiencyRatio\");\r\n            ifcPSE.PropertyName = \"EnergyEfficiencyRatio\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyEfficiencyRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CoefficientOfPerformance\", \"CoefficientOfPerformance\");\r\n            ifcPSE.PropertyName = \"CoefficientOfPerformance\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoefficientOfPerformanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.VolumetricEfficiency\", \"VolumetricEfficiency\");\r\n            ifcPSE.PropertyName = \"VolumetricEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumetricEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CompressionEfficiency\", \"CompressionEfficiency\");\r\n            ifcPSE.PropertyName = \"CompressionEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressionEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.MechanicalEfficiency\", \"MechanicalEfficiency\");\r\n            ifcPSE.PropertyName = \"MechanicalEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.IsentropicEfficiency\", \"IsentropicEfficiency\");\r\n            ifcPSE.PropertyName = \"IsentropicEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsentropicEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CompressorTotalEfficiency\", \"CompressorTotalEfficiency\");\r\n            ifcPSE.PropertyName = \"CompressorTotalEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorTotalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.ShaftPower\", \"ShaftPower\");\r\n            ifcPSE.PropertyName = \"ShaftPower\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShaftPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.InputPower\", \"InputPower\");\r\n            ifcPSE.PropertyName = \"InputPower\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InputPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.LubricantPumpHeatGain\", \"LubricantPumpHeatGain\");\r\n            ifcPSE.PropertyName = \"LubricantPumpHeatGain\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LubricantPumpHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.FrictionHeatGain\", \"FrictionHeatGain\");\r\n            ifcPSE.PropertyName = \"FrictionHeatGain\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrictionHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.CompressorTotalHeatGain\", \"CompressorTotalHeatGain\");\r\n            ifcPSE.PropertyName = \"CompressorTotalHeatGain\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorTotalHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorPHistory.FullLoadRatio\", \"FullLoadRatio\");\r\n            ifcPSE.PropertyName = \"FullLoadRatio\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FullLoadRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCompressorPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CompressorTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCompressorTypeCommon = new PropertySetDescription();\r\n         propertySetCompressorTypeCommon.Name = \"Pset_CompressorTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CompressorTypeCommon\"))\r\n         {\r\n            propertySetCompressorTypeCommon.EntityTypes.Add(IFCEntityType.IfcCompressorType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.PowerSource\", \"PowerSource\");\r\n            ifcPSE.PropertyName = \"PowerSource\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CompressorTypePowerSource);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerSourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.RefrigerantClass\", \"RefrigerantClass\");\r\n            ifcPSE.PropertyName = \"RefrigerantClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_RefrigerantClass);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.RefrigerantType\", \"RefrigerantType\");\r\n            ifcPSE.PropertyName = \"RefrigerantType\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.MinimumPartLoadRatio\", \"MinimumPartLoadRatio\");\r\n            ifcPSE.PropertyName = \"MinimumPartLoadRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumPartLoadRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.MaximumPartLoadRatio\", \"MaximumPartLoadRatio\");\r\n            ifcPSE.PropertyName = \"MaximumPartLoadRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPartLoadRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.CompressorSpeed\", \"CompressorSpeed\");\r\n            ifcPSE.PropertyName = \"CompressorSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.RotationalFrequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.NominalCapacity\", \"NominalCapacity\");\r\n            ifcPSE.PropertyName = \"NominalCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.IdealCapacity\", \"IdealCapacity\");\r\n            ifcPSE.PropertyName = \"IdealCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IdealCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.IdealShaftPower\", \"IdealShaftPower\");\r\n            ifcPSE.PropertyName = \"IdealShaftPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IdealShaftPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.HasHotGasBypass\", \"HasHotGasBypass\");\r\n            ifcPSE.PropertyName = \"HasHotGasBypass\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasHotGasBypassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CompressorTypeCommon\"))\r\n         {\r\n            propertySetCompressorTypeCommon.EntityTypes.Add(IFCEntityType.IfcCompressorType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.PowerSource\", \"PowerSource\");\r\n            ifcPSE.PropertyName = \"PowerSource\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CompressorTypePowerSource);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerSourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.RefrigerantClass\", \"RefrigerantClass\");\r\n            ifcPSE.PropertyName = \"RefrigerantClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_RefrigerantClass);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.RefrigerantType\", \"RefrigerantType\");\r\n            ifcPSE.PropertyName = \"RefrigerantType\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.MinimumPartLoadRatio\", \"MinimumPartLoadRatio\");\r\n            ifcPSE.PropertyName = \"MinimumPartLoadRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumPartLoadRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.MaximumPartLoadRatio\", \"MaximumPartLoadRatio\");\r\n            ifcPSE.PropertyName = \"MaximumPartLoadRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPartLoadRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.CompressorSpeed\", \"CompressorSpeed\");\r\n            ifcPSE.PropertyName = \"CompressorSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.RotationalFrequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.NominalCapacity\", \"NominalCapacity\");\r\n            ifcPSE.PropertyName = \"NominalCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.IdealCapacity\", \"IdealCapacity\");\r\n            ifcPSE.PropertyName = \"IdealCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IdealCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.IdealShaftPower\", \"IdealShaftPower\");\r\n            ifcPSE.PropertyName = \"IdealShaftPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IdealShaftPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.HasHotGasBypass\", \"HasHotGasBypass\");\r\n            ifcPSE.PropertyName = \"HasHotGasBypass\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasHotGasBypassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CompressorTypeCommon\"))\r\n         {\r\n            propertySetCompressorTypeCommon.EntityTypes.Add(IFCEntityType.IfcCompressor);\r\n            propertySetCompressorTypeCommon.ObjectType = \"IfcCompressor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Référence\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Etat\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.PowerSource\", \"PowerSource\");\r\n            ifcPSE.PropertyName = \"PowerSource\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CompressorTypePowerSource);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Power Source\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"SourcePuissance\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerSourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.RefrigerantClass\", \"RefrigerantClass\");\r\n            ifcPSE.PropertyName = \"RefrigerantClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_RefrigerantClass);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Refrigerant Class\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ClasseRéfrigérant\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.MinimumPartLoadRatio\", \"MinimumPartLoadRatio\");\r\n            ifcPSE.PropertyName = \"MinimumPartLoadRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Minimum Part Load Ratio\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CoefficientMinimalChargePartielle\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumPartLoadRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.MaximumPartLoadRatio\", \"MaximumPartLoadRatio\");\r\n            ifcPSE.PropertyName = \"MaximumPartLoadRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Part Load Ratio\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CoefficientMaximalChargePartielle\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPartLoadRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.CompressorSpeed\", \"CompressorSpeed\");\r\n            ifcPSE.PropertyName = \"CompressorSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.RotationalFrequency;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Compressor Speed\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"VitesseCompresseur\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.NominalCapacity\", \"NominalCapacity\");\r\n            ifcPSE.PropertyName = \"NominalCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Capacity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PuissanceCompresseur\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.IdealCapacity\", \"IdealCapacity\");\r\n            ifcPSE.PropertyName = \"IdealCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ideal Capacity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PuissanceMaximale\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IdealCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.IdealShaftPower\", \"IdealShaftPower\");\r\n            ifcPSE.PropertyName = \"IdealShaftPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ideal Shaft Power\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PuissanceArbreMaximale\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IdealShaftPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.HasHotGasBypass\", \"HasHotGasBypass\");\r\n            ifcPSE.PropertyName = \"HasHotGasBypass\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Hot Gas Bypass\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PossedeBypassGazChaud\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasHotGasBypassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.ImpellerDiameter\", \"ImpellerDiameter\");\r\n            ifcPSE.PropertyName = \"ImpellerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Impeller Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DiametreRotor\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpellerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CompressorTypeCommon\"))\r\n         {\r\n            propertySetCompressorTypeCommon.EntityTypes.Add(IFCEntityType.IfcCompressor);\r\n            propertySetCompressorTypeCommon.EntityTypes.Add(IFCEntityType.IfcCompressorType);\r\n            propertySetCompressorTypeCommon.ObjectType = \"IfcCompressor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.PowerSource\", \"PowerSource\");\r\n            ifcPSE.PropertyName = \"PowerSource\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CompressorTypePowerSource);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerSourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.RefrigerantClass\", \"RefrigerantClass\");\r\n            ifcPSE.PropertyName = \"RefrigerantClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RefrigerantClass);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.MinimumPartLoadRatio\", \"MinimumPartLoadRatio\");\r\n            ifcPSE.PropertyName = \"MinimumPartLoadRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumPartLoadRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.MaximumPartLoadRatio\", \"MaximumPartLoadRatio\");\r\n            ifcPSE.PropertyName = \"MaximumPartLoadRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPartLoadRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.CompressorSpeed\", \"CompressorSpeed\");\r\n            ifcPSE.PropertyName = \"CompressorSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.RotationalFrequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.NominalCapacity\", \"NominalCapacity\");\r\n            ifcPSE.PropertyName = \"NominalCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.IdealCapacity\", \"IdealCapacity\");\r\n            ifcPSE.PropertyName = \"IdealCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IdealCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.IdealShaftPower\", \"IdealShaftPower\");\r\n            ifcPSE.PropertyName = \"IdealShaftPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IdealShaftPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.HasHotGasBypass\", \"HasHotGasBypass\");\r\n            ifcPSE.PropertyName = \"HasHotGasBypass\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasHotGasBypassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CompressorTypeCommon.ImpellerDiameter\", \"ImpellerDiameter\");\r\n            ifcPSE.PropertyName = \"ImpellerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpellerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCompressorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCompressorTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ConcreteElementGeneral(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetConcreteElementGeneral = new PropertySetDescription();\r\n         propertySetConcreteElementGeneral.Name = \"Pset_ConcreteElementGeneral\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ConcreteElementGeneral\"))\r\n         {\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBuildingElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.StructuralClass\", \"StructuralClass\");\r\n            ifcPSE.PropertyName = \"StructuralClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StructuralClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.EnvironmentalClass\", \"EnvironmentalClass\");\r\n            ifcPSE.PropertyName = \"EnvironmentalClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnvironmentalClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ServiceLife\", \"ServiceLife\");\r\n            ifcPSE.PropertyName = \"ServiceLife\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ServiceLifeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.LifeCycleEnvironmentalLoad\", \"LifeCycleEnvironmentalLoad\");\r\n            ifcPSE.PropertyName = \"LifeCycleEnvironmentalLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LifeCycleEnvironmentalLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.DimensionalAccuracyClass\", \"DimensionalAccuracyClass\");\r\n            ifcPSE.PropertyName = \"DimensionalAccuracyClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DimensionalAccuracyClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ConstructionToleranceClass\", \"ConstructionToleranceClass\");\r\n            ifcPSE.PropertyName = \"ConstructionToleranceClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConstructionToleranceClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ConstructionType\", \"ConstructionType\");\r\n            ifcPSE.PropertyName = \"ConstructionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConstructionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ConcreteCoverAtMainBars\", \"ConcreteCoverAtMainBars\");\r\n            ifcPSE.PropertyName = \"ConcreteCoverAtMainBars\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcreteCoverAtMainBarsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ConcreteCoverAtLinks\", \"ConcreteCoverAtLinks\");\r\n            ifcPSE.PropertyName = \"ConcreteCoverAtLinks\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcreteCoverAtLinksCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ConcreteElementGeneral\"))\r\n         {\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBuildingElementPart);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxy);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcCurtainWall);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcPile);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRailing);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRamp);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRampFlight);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcStair);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcStairFlight);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcWallStandardCase);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.StructuralClass\", \"StructuralClass\");\r\n            ifcPSE.PropertyName = \"StructuralClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StructuralClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.EnvironmentalClass\", \"EnvironmentalClass\");\r\n            ifcPSE.PropertyName = \"EnvironmentalClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnvironmentalClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ServiceLife\", \"ServiceLife\");\r\n            ifcPSE.PropertyName = \"ServiceLife\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ServiceLifeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.LifeCycleEnvironmentalLoad\", \"LifeCycleEnvironmentalLoad\");\r\n            ifcPSE.PropertyName = \"LifeCycleEnvironmentalLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LifeCycleEnvironmentalLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.DimensionalAccuracyClass\", \"DimensionalAccuracyClass\");\r\n            ifcPSE.PropertyName = \"DimensionalAccuracyClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DimensionalAccuracyClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ConstructionToleranceClass\", \"ConstructionToleranceClass\");\r\n            ifcPSE.PropertyName = \"ConstructionToleranceClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConstructionToleranceClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ConstructionType\", \"ConstructionType\");\r\n            ifcPSE.PropertyName = \"ConstructionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConstructionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ConcreteCoverAtMainBars\", \"ConcreteCoverAtMainBars\");\r\n            ifcPSE.PropertyName = \"ConcreteCoverAtMainBars\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcreteCoverAtMainBarsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ConcreteCoverAtLinks\", \"ConcreteCoverAtLinks\");\r\n            ifcPSE.PropertyName = \"ConcreteCoverAtLinks\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcreteCoverAtLinksCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ConcreteElementGeneral\"))\r\n         {\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxy);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcChimney);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcPile);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcPlate);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRailing);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRamp);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRampFlight);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcStair);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcStairFlight);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcCivilElement);\r\n            propertySetConcreteElementGeneral.ObjectType = \"IfcBeam,IfcBuildingElementProxy,IfcChimney,IfcColumn,IfcFooting,IfcMember,IfcPile,IfcPlate,IfcRailing,IfcRamp,IfcRampFlight,IfcRoof,IfcSlab,IfcStair,IfcStairFlight,IfcWall,IfcCivilElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ConstructionMethod\", \"ConstructionMethod\");\r\n            ifcPSE.PropertyName = \"ConstructionMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Ausführung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Construction Method\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConstructionMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.StructuralClass\", \"StructuralClass\");\r\n            ifcPSE.PropertyName = \"StructuralClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Structural Class\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"構造クラス\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"구조 클래스\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StructuralClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.StrengthClass\", \"StrengthClass\");\r\n            ifcPSE.PropertyName = \"StrengthClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Betonfestigkeitsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Strength Class\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StrengthClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ExposureClass\", \"ExposureClass\");\r\n            ifcPSE.PropertyName = \"ExposureClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Expositionsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Exposure Class\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExposureClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ReinforcementVolumeRatio\", \"ReinforcementVolumeRatio\");\r\n            ifcPSE.PropertyName = \"ReinforcementVolumeRatio\";\r\n            ifcPSE.PropertyType = PropertyType.MassDensity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bewehrungsgrad Volumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reinforcement Volume Ratio\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementVolumeRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ReinforcementAreaRatio\", \"ReinforcementAreaRatio\");\r\n            ifcPSE.PropertyName = \"ReinforcementAreaRatio\";\r\n            ifcPSE.PropertyType = PropertyType.AreaDensity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bewehrungsgrad Fläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reinforcement Area Ratio\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementAreaRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.DimensionalAccuracyClass\", \"DimensionalAccuracyClass\");\r\n            ifcPSE.PropertyName = \"DimensionalAccuracyClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Dimensional Accuracy Class\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"寸法精度クラス\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"치수 정밀도 클래스\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DimensionalAccuracyClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ConstructionToleranceClass\", \"ConstructionToleranceClass\");\r\n            ifcPSE.PropertyName = \"ConstructionToleranceClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Construction Tolerance Class\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"製造許容クラス\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"제조 허용 클래스\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConstructionToleranceClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ConcreteCover\", \"ConcreteCover\");\r\n            ifcPSE.PropertyName = \"ConcreteCover\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Betonüberdeckung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Concrete Cover\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcreteCoverCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ConcreteCoverAtMainBars\", \"ConcreteCoverAtMainBars\");\r\n            ifcPSE.PropertyName = \"ConcreteCoverAtMainBars\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Betonüberdeckung Hauptstäbe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Concrete Cover At Main Bars\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"主筋のコンクリート被り\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"주근 콘크리트 입고\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcreteCoverAtMainBarsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ConcreteCoverAtLinks\", \"ConcreteCoverAtLinks\");\r\n            ifcPSE.PropertyName = \"ConcreteCoverAtLinks\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Betonüberdeckung Verbindungsstäbe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Concrete Cover At Links\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"補強筋のコンクリート被り\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"보강근 콘크리트 입고\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcreteCoverAtLinksCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ReinforcementStrengthClass\", \"ReinforcementStrengthClass\");\r\n            ifcPSE.PropertyName = \"ReinforcementStrengthClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reinforcement Strength Class\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementStrengthClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ConcreteElementGeneral\"))\r\n         {\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxy);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcChimney);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcCivilElement);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcPile);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcPlate);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRailing);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRampFlight);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRamp);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcStairFlight);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcStair);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBeamType);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxyType);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcChimneyType);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcCivilElementType);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcColumnType);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcFootingType);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcMemberType);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcPileType);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcPlateType);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRailingType);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRampFlightType);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRampType);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRoofType);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcSlabType);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcStairFlightType);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcStairType);\r\n            propertySetConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcWallType);\r\n            propertySetConcreteElementGeneral.ObjectType = \"IfcBeam\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.AssemblyPlace\", \"AssemblyPlace\");\r\n            ifcPSE.PropertyName = \"AssemblyPlace\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AssemblyPlace);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyPlaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.CastingMethod\", \"CastingMethod\");\r\n            ifcPSE.PropertyName = \"CastingMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ConcreteCastingMethod);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CastingMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.StructuralClass\", \"StructuralClass\");\r\n            ifcPSE.PropertyName = \"StructuralClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StructuralClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.StrengthClass\", \"StrengthClass\");\r\n            ifcPSE.PropertyName = \"StrengthClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StrengthClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ExposureClass\", \"ExposureClass\");\r\n            ifcPSE.PropertyName = \"ExposureClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExposureClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ReinforcementVolumeRatio\", \"ReinforcementVolumeRatio\");\r\n            ifcPSE.PropertyName = \"ReinforcementVolumeRatio\";\r\n            ifcPSE.PropertyType = PropertyType.MassDensity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementVolumeRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ReinforcementAreaRatio\", \"ReinforcementAreaRatio\");\r\n            ifcPSE.PropertyName = \"ReinforcementAreaRatio\";\r\n            ifcPSE.PropertyType = PropertyType.AreaDensity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementAreaRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.DimensionalAccuracyClass\", \"DimensionalAccuracyClass\");\r\n            ifcPSE.PropertyName = \"DimensionalAccuracyClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DimensionalAccuracyClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ConstructionToleranceClass\", \"ConstructionToleranceClass\");\r\n            ifcPSE.PropertyName = \"ConstructionToleranceClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConstructionToleranceClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ConcreteCover\", \"ConcreteCover\");\r\n            ifcPSE.PropertyName = \"ConcreteCover\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcreteCoverCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ConcreteCoverAtMainBars\", \"ConcreteCoverAtMainBars\");\r\n            ifcPSE.PropertyName = \"ConcreteCoverAtMainBars\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcreteCoverAtMainBarsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ConcreteCoverAtLinks\", \"ConcreteCoverAtLinks\");\r\n            ifcPSE.PropertyName = \"ConcreteCoverAtLinks\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcreteCoverAtLinksCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementGeneral.ReinforcementStrengthClass\", \"ReinforcementStrengthClass\");\r\n            ifcPSE.PropertyName = \"ReinforcementStrengthClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementStrengthClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetConcreteElementGeneral);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ConcreteElementQuantityGeneral(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetConcreteElementQuantityGeneral = new PropertySetDescription();\r\n         propertySetConcreteElementQuantityGeneral.Name = \"Pset_ConcreteElementQuantityGeneral\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ConcreteElementQuantityGeneral\"))\r\n         {\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcBuildingElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalConcreteQuantity\", \"TotalConcreteQuantity\");\r\n            ifcPSE.PropertyName = \"TotalConcreteQuantity\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalConcreteQuantityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarSteelGrade\", \"TotalRebarQuantity.RebarSteelGrade\");\r\n            ifcPSE.PropertyName = \"TotalRebarQuantity.RebarSteelGrade\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RebarSteelGradeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarSteelGradeSpecificationReference\", \"TotalRebarQuantity.RebarSteelGradeSpecificationReference\");\r\n            ifcPSE.PropertyName = \"TotalRebarQuantity.RebarSteelGradeSpecificationReference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RebarSteelGradeSpecificationReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarDiameter\", \"TotalRebarQuantity.RebarDiameter\");\r\n            ifcPSE.PropertyName = \"TotalRebarQuantity.RebarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RebarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarQuantity\", \"TotalRebarQuantity.RebarQuantity\");\r\n            ifcPSE.PropertyName = \"TotalRebarQuantity.RebarQuantity\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RebarQuantityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryType\", \"TotalAccessoryQuantity.AccessoryType\");\r\n            ifcPSE.PropertyName = \"TotalAccessoryQuantity.AccessoryType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessoryTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryGroupCode\", \"TotalAccessoryQuantity.AccessoryGroupCode\");\r\n            ifcPSE.PropertyName = \"TotalAccessoryQuantity.AccessoryGroupCode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessoryGroupCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryTypeSpecificationReference\", \"TotalAccessoryQuantity.AccessoryTypeSpecificationReference\");\r\n            ifcPSE.PropertyName = \"TotalAccessoryQuantity.AccessoryTypeSpecificationReference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessoryTypeSpecificationReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryDescription\", \"TotalAccessoryQuantity.AccessoryDescription\");\r\n            ifcPSE.PropertyName = \"TotalAccessoryQuantity.AccessoryDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessoryDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryMaterial\", \"TotalAccessoryQuantity.AccessoryMaterial\");\r\n            ifcPSE.PropertyName = \"TotalAccessoryQuantity.AccessoryMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessoryMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryMaterialSpecificationReference\", \"TotalAccessoryQuantity.AccessoryMaterialSpecificationReference\");\r\n            ifcPSE.PropertyName = \"TotalAccessoryQuantity.AccessoryMaterialSpecificationReference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessoryMaterialSpecificationReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessorySize\", \"TotalAccessoryQuantity.AccessorySize\");\r\n            ifcPSE.PropertyName = \"TotalAccessoryQuantity.AccessorySize\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessorySizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryQuantityByNumberOfItems\", \"TotalAccessoryQuantity.AccessoryQuantityByNumberOfItems\");\r\n            ifcPSE.PropertyName = \"TotalAccessoryQuantity.AccessoryQuantityByNumberOfItems\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessoryQuantityByNumberOfItemsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryQuantityByWeight\", \"TotalAccessoryQuantity.AccessoryQuantityByWeight\");\r\n            ifcPSE.PropertyName = \"TotalAccessoryQuantity.AccessoryQuantityByWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessoryQuantityByWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ConcreteElementQuantityGeneral\"))\r\n         {\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcBuildingElementPart);\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxy);\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcCurtainWall);\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcPile);\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcRailing);\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcRamp);\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcRampFlight);\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcStair);\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcStairFlight);\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            propertySetConcreteElementQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcWallStandardCase);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalConcreteQuantity\", \"TotalConcreteQuantity\");\r\n            ifcPSE.PropertyName = \"TotalConcreteQuantity\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalConcreteQuantityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarSteelGrade\", \"TotalRebarQuantity.RebarSteelGrade\");\r\n            ifcPSE.PropertyName = \"TotalRebarQuantity.RebarSteelGrade\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RebarSteelGradeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarSteelGradeSpecificationReference\", \"TotalRebarQuantity.RebarSteelGradeSpecificationReference\");\r\n            ifcPSE.PropertyName = \"TotalRebarQuantity.RebarSteelGradeSpecificationReference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RebarSteelGradeSpecificationReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarDiameter\", \"TotalRebarQuantity.RebarDiameter\");\r\n            ifcPSE.PropertyName = \"TotalRebarQuantity.RebarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RebarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarQuantity\", \"TotalRebarQuantity.RebarQuantity\");\r\n            ifcPSE.PropertyName = \"TotalRebarQuantity.RebarQuantity\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RebarQuantityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryType\", \"TotalAccessoryQuantity.AccessoryType\");\r\n            ifcPSE.PropertyName = \"TotalAccessoryQuantity.AccessoryType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessoryTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryGroupCode\", \"TotalAccessoryQuantity.AccessoryGroupCode\");\r\n            ifcPSE.PropertyName = \"TotalAccessoryQuantity.AccessoryGroupCode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessoryGroupCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryTypeSpecificationReference\", \"TotalAccessoryQuantity.AccessoryTypeSpecificationReference\");\r\n            ifcPSE.PropertyName = \"TotalAccessoryQuantity.AccessoryTypeSpecificationReference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessoryTypeSpecificationReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryDescription\", \"TotalAccessoryQuantity.AccessoryDescription\");\r\n            ifcPSE.PropertyName = \"TotalAccessoryQuantity.AccessoryDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessoryDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryMaterial\", \"TotalAccessoryQuantity.AccessoryMaterial\");\r\n            ifcPSE.PropertyName = \"TotalAccessoryQuantity.AccessoryMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessoryMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryMaterialSpecificationReference\", \"TotalAccessoryQuantity.AccessoryMaterialSpecificationReference\");\r\n            ifcPSE.PropertyName = \"TotalAccessoryQuantity.AccessoryMaterialSpecificationReference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessoryMaterialSpecificationReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessorySize\", \"TotalAccessoryQuantity.AccessorySize\");\r\n            ifcPSE.PropertyName = \"TotalAccessoryQuantity.AccessorySize\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessorySizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryQuantityByNumberOfItems\", \"TotalAccessoryQuantity.AccessoryQuantityByNumberOfItems\");\r\n            ifcPSE.PropertyName = \"TotalAccessoryQuantity.AccessoryQuantityByNumberOfItems\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessoryQuantityByNumberOfItemsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryQuantityByWeight\", \"TotalAccessoryQuantity.AccessoryQuantityByWeight\");\r\n            ifcPSE.PropertyName = \"TotalAccessoryQuantity.AccessoryQuantityByWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessoryQuantityByWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetConcreteElementQuantityGeneral);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ConcreteElementSurfaceFinishQuantityGeneral(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetConcreteElementSurfaceFinishQuantityGeneral = new PropertySetDescription();\r\n         propertySetConcreteElementSurfaceFinishQuantityGeneral.Name = \"Pset_ConcreteElementSurfaceFinishQuantityGeneral\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ConcreteElementSurfaceFinishQuantityGeneral\"))\r\n         {\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcBuildingElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceClass\", \"FormSurface.FormSurfaceClass\");\r\n            ifcPSE.PropertyName = \"FormSurface.FormSurfaceClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FormSurfaceClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceTextureDescription\", \"FormSurface.FormSurfaceTextureDescription\");\r\n            ifcPSE.PropertyName = \"FormSurface.FormSurfaceTextureDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FormSurfaceTextureDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceArea\", \"FormSurface.FormSurfaceArea\");\r\n            ifcPSE.PropertyName = \"FormSurface.FormSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FormSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceType\", \"ExternalSurface.ExternalSurfaceType\");\r\n            ifcPSE.PropertyName = \"ExternalSurface.ExternalSurfaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExternalSurfaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceClass\", \"ExternalSurface.ExternalSurfaceClass\");\r\n            ifcPSE.PropertyName = \"ExternalSurface.ExternalSurfaceClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExternalSurfaceClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceArea\", \"ExternalSurface.ExternalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"ExternalSurface.ExternalSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExternalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementSurfaceFinishQuantityGeneral.SurfaceDescriptionDocReference\", \"SurfaceDescriptionDocReference\");\r\n            ifcPSE.PropertyName = \"SurfaceDescriptionDocReference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceDescriptionDocReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ConcreteElementSurfaceFinishQuantityGeneral\"))\r\n         {\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcBuildingElementPart);\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxy);\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcCurtainWall);\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcPile);\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcRailing);\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcRamp);\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcRampFlight);\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcStair);\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcStairFlight);\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.EntityTypes.Add(IFCEntityType.IfcWallStandardCase);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceClass\", \"FormSurface.FormSurfaceClass\");\r\n            ifcPSE.PropertyName = \"FormSurface.FormSurfaceClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FormSurfaceClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceTextureDescription\", \"FormSurface.FormSurfaceTextureDescription\");\r\n            ifcPSE.PropertyName = \"FormSurface.FormSurfaceTextureDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FormSurfaceTextureDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceArea\", \"FormSurface.FormSurfaceArea\");\r\n            ifcPSE.PropertyName = \"FormSurface.FormSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FormSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceType\", \"ExternalSurface.ExternalSurfaceType\");\r\n            ifcPSE.PropertyName = \"ExternalSurface.ExternalSurfaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExternalSurfaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceClass\", \"ExternalSurface.ExternalSurfaceClass\");\r\n            ifcPSE.PropertyName = \"ExternalSurface.ExternalSurfaceClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExternalSurfaceClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceArea\", \"ExternalSurface.ExternalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"ExternalSurface.ExternalSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExternalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConcreteElementSurfaceFinishQuantityGeneral.SurfaceDescriptionDocReference\", \"SurfaceDescriptionDocReference\");\r\n            ifcPSE.PropertyName = \"SurfaceDescriptionDocReference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceDescriptionDocReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConcreteElementSurfaceFinishQuantityGeneral.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetConcreteElementSurfaceFinishQuantityGeneral);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CondenserPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCondenserPHistory = new PropertySetDescription();\r\n         propertySetCondenserPHistory.Name = \"Pset_CondenserPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CondenserPHistory\"))\r\n         {\r\n            propertySetCondenserPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.HeatRejectionRate\", \"HeatRejectionRate\");\r\n            ifcPSE.PropertyName = \"HeatRejectionRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatRejectionRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.ExteriorHeatTransferCoefficient\", \"ExteriorHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"ExteriorHeatTransferCoefficient\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExteriorHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.InteriorHeatTransferCoefficient\", \"InteriorHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorHeatTransferCoefficient\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.RefrigerantFoulingResistance\", \"RefrigerantFoulingResistance\");\r\n            ifcPSE.PropertyName = \"RefrigerantFoulingResistance\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantFoulingResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.CondensingTemperature\", \"CondensingTemperature\");\r\n            ifcPSE.PropertyName = \"CondensingTemperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondensingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.LogarithmicMeanTemperatureDifference\", \"LogarithmicMeanTemperatureDifference\");\r\n            ifcPSE.PropertyName = \"LogarithmicMeanTemperatureDifference\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LogarithmicMeanTemperatureDifferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.UAcurves\", \"UAcurves\");\r\n            ifcPSE.PropertyName = \"UAcurves\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UAcurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.CompressorCondenserHeatGain\", \"CompressorCondenserHeatGain\");\r\n            ifcPSE.PropertyName = \"CompressorCondenserHeatGain\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorCondenserHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.CompressorCondenserPressureDrop\", \"CompressorCondenserPressureDrop\");\r\n            ifcPSE.PropertyName = \"CompressorCondenserPressureDrop\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorCondenserPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.CondenserMeanVoidFraction\", \"CondenserMeanVoidFraction\");\r\n            ifcPSE.PropertyName = \"CondenserMeanVoidFraction\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondenserMeanVoidFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.WaterFoulingResistance\", \"WaterFoulingResistance\");\r\n            ifcPSE.PropertyName = \"WaterFoulingResistance\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterFoulingResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CondenserPHistory\"))\r\n         {\r\n            propertySetCondenserPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.HeatRejectionRate\", \"HeatRejectionRate\");\r\n            ifcPSE.PropertyName = \"HeatRejectionRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatRejectionRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.ExteriorHeatTransferCoefficient\", \"ExteriorHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"ExteriorHeatTransferCoefficient\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExteriorHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.InteriorHeatTransferCoefficient\", \"InteriorHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorHeatTransferCoefficient\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.RefrigerantFoulingResistance\", \"RefrigerantFoulingResistance\");\r\n            ifcPSE.PropertyName = \"RefrigerantFoulingResistance\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantFoulingResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.CondensingTemperature\", \"CondensingTemperature\");\r\n            ifcPSE.PropertyName = \"CondensingTemperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondensingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.LogarithmicMeanTemperatureDifference\", \"LogarithmicMeanTemperatureDifference\");\r\n            ifcPSE.PropertyName = \"LogarithmicMeanTemperatureDifference\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LogarithmicMeanTemperatureDifferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.UAcurves\", \"UAcurves\");\r\n            ifcPSE.PropertyName = \"UAcurves\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UAcurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.CompressorCondenserHeatGain\", \"CompressorCondenserHeatGain\");\r\n            ifcPSE.PropertyName = \"CompressorCondenserHeatGain\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorCondenserHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.CompressorCondenserPressureDrop\", \"CompressorCondenserPressureDrop\");\r\n            ifcPSE.PropertyName = \"CompressorCondenserPressureDrop\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorCondenserPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.CondenserMeanVoidFraction\", \"CondenserMeanVoidFraction\");\r\n            ifcPSE.PropertyName = \"CondenserMeanVoidFraction\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondenserMeanVoidFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.WaterFoulingResistance\", \"WaterFoulingResistance\");\r\n            ifcPSE.PropertyName = \"WaterFoulingResistance\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterFoulingResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CondenserPHistory\"))\r\n         {\r\n            propertySetCondenserPHistory.EntityTypes.Add(IFCEntityType.IfcCondenser);\r\n            propertySetCondenserPHistory.ObjectType = \"IfcCondenser\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.HeatRejectionRate\", \"HeatRejectionRate\");\r\n            ifcPSE.PropertyName = \"HeatRejectionRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heat Rejection Rate\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatRejectionRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.ExteriorHeatTransferCoefficient\", \"ExteriorHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"ExteriorHeatTransferCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Exterior Heat Transfer Coefficient\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExteriorHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.InteriorHeatTransferCoefficient\", \"InteriorHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorHeatTransferCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Interior Heat Transfer Coefficient\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.RefrigerantFoulingResistance\", \"RefrigerantFoulingResistance\");\r\n            ifcPSE.PropertyName = \"RefrigerantFoulingResistance\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Refrigerant Fouling Resistance\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantFoulingResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.CondensingTemperature\", \"CondensingTemperature\");\r\n            ifcPSE.PropertyName = \"CondensingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Condensing Temperature\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondensingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.LogarithmicMeanTemperatureDifference\", \"LogarithmicMeanTemperatureDifference\");\r\n            ifcPSE.PropertyName = \"LogarithmicMeanTemperatureDifference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Logarithmic Mean Temperature Difference\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LogarithmicMeanTemperatureDifferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.UAcurves\", \"UAcurves\");\r\n            ifcPSE.PropertyName = \"UAcurves\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"UAcurves\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UAcurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.CompressorCondenserHeatGain\", \"CompressorCondenserHeatGain\");\r\n            ifcPSE.PropertyName = \"CompressorCondenserHeatGain\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Compressor Condenser Heat Gain\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorCondenserHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.CompressorCondenserPressureDrop\", \"CompressorCondenserPressureDrop\");\r\n            ifcPSE.PropertyName = \"CompressorCondenserPressureDrop\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Compressor Condenser Pressure Drop\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorCondenserPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.CondenserMeanVoidFraction\", \"CondenserMeanVoidFraction\");\r\n            ifcPSE.PropertyName = \"CondenserMeanVoidFraction\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Condenser Mean Void Fraction\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondenserMeanVoidFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.WaterFoulingResistance\", \"WaterFoulingResistance\");\r\n            ifcPSE.PropertyName = \"WaterFoulingResistance\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Fouling Resistance\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterFoulingResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CondenserPHistory\"))\r\n         {\r\n            propertySetCondenserPHistory.EntityTypes.Add(IFCEntityType.IfcCondenser);\r\n            propertySetCondenserPHistory.ObjectType = \"IfcCondenser\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.HeatRejectionRate\", \"HeatRejectionRate\");\r\n            ifcPSE.PropertyName = \"HeatRejectionRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatRejectionRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.ExteriorHeatTransferCoefficient\", \"ExteriorHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"ExteriorHeatTransferCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExteriorHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.InteriorHeatTransferCoefficient\", \"InteriorHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorHeatTransferCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.RefrigerantFoulingResistance\", \"RefrigerantFoulingResistance\");\r\n            ifcPSE.PropertyName = \"RefrigerantFoulingResistance\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantFoulingResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.CondensingTemperature\", \"CondensingTemperature\");\r\n            ifcPSE.PropertyName = \"CondensingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondensingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.LogarithmicMeanTemperatureDifference\", \"LogarithmicMeanTemperatureDifference\");\r\n            ifcPSE.PropertyName = \"LogarithmicMeanTemperatureDifference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LogarithmicMeanTemperatureDifferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.UAcurves\", \"UAcurves\");\r\n            ifcPSE.PropertyName = \"UAcurves\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UAcurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.CompressorCondenserHeatGain\", \"CompressorCondenserHeatGain\");\r\n            ifcPSE.PropertyName = \"CompressorCondenserHeatGain\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorCondenserHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.CompressorCondenserPressureDrop\", \"CompressorCondenserPressureDrop\");\r\n            ifcPSE.PropertyName = \"CompressorCondenserPressureDrop\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorCondenserPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.CondenserMeanVoidFraction\", \"CondenserMeanVoidFraction\");\r\n            ifcPSE.PropertyName = \"CondenserMeanVoidFraction\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondenserMeanVoidFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserPHistory.WaterFoulingResistance\", \"WaterFoulingResistance\");\r\n            ifcPSE.PropertyName = \"WaterFoulingResistance\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterFoulingResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCondenserPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CondenserTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCondenserTypeCommon = new PropertySetDescription();\r\n         propertySetCondenserTypeCommon.Name = \"Pset_CondenserTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CondenserTypeCommon\"))\r\n         {\r\n            propertySetCondenserTypeCommon.EntityTypes.Add(IFCEntityType.IfcCondenserType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.RefrigerantClass\", \"RefrigerantClass\");\r\n            ifcPSE.PropertyName = \"RefrigerantClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_RefrigerantClass);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.RefrigerantType\", \"RefrigerantType\");\r\n            ifcPSE.PropertyName = \"RefrigerantType\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.ExternalSurfaceArea\", \"ExternalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"ExternalSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExternalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.InternalSurfaceArea\", \"InternalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"InternalSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.InternalRefrigerantVolume\", \"InternalRefrigerantVolume\");\r\n            ifcPSE.PropertyName = \"InternalRefrigerantVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalRefrigerantVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.InternalWaterVolume\", \"InternalWaterVolume\");\r\n            ifcPSE.PropertyName = \"InternalWaterVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalWaterVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.NominalHeatTransferArea\", \"NominalHeatTransferArea\");\r\n            ifcPSE.PropertyName = \"NominalHeatTransferArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatTransferAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.NominalHeatTransferCoefficient\", \"NominalHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"NominalHeatTransferCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CondenserTypeCommon\"))\r\n         {\r\n            propertySetCondenserTypeCommon.EntityTypes.Add(IFCEntityType.IfcCondenserType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.RefrigerantClass\", \"RefrigerantClass\");\r\n            ifcPSE.PropertyName = \"RefrigerantClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_RefrigerantClass);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.RefrigerantType\", \"RefrigerantType\");\r\n            ifcPSE.PropertyName = \"RefrigerantType\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.ExternalSurfaceArea\", \"ExternalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"ExternalSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExternalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.InternalSurfaceArea\", \"InternalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"InternalSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.InternalRefrigerantVolume\", \"InternalRefrigerantVolume\");\r\n            ifcPSE.PropertyName = \"InternalRefrigerantVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalRefrigerantVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.InternalWaterVolume\", \"InternalWaterVolume\");\r\n            ifcPSE.PropertyName = \"InternalWaterVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalWaterVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.NominalHeatTransferArea\", \"NominalHeatTransferArea\");\r\n            ifcPSE.PropertyName = \"NominalHeatTransferArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatTransferAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.NominalHeatTransferCoefficient\", \"NominalHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"NominalHeatTransferCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CondenserTypeCommon\"))\r\n         {\r\n            propertySetCondenserTypeCommon.EntityTypes.Add(IFCEntityType.IfcCondenser);\r\n            propertySetCondenserTypeCommon.ObjectType = \"IfcCondenser\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.RefrigerantClass\", \"RefrigerantClass\");\r\n            ifcPSE.PropertyName = \"RefrigerantClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_RefrigerantClass);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Refrigerant Class\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.ExternalSurfaceArea\", \"ExternalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"ExternalSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"External Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExternalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.InternalSurfaceArea\", \"InternalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"InternalSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Internal Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.InternalRefrigerantVolume\", \"InternalRefrigerantVolume\");\r\n            ifcPSE.PropertyName = \"InternalRefrigerantVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Internal Refrigerant Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalRefrigerantVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.InternalWaterVolume\", \"InternalWaterVolume\");\r\n            ifcPSE.PropertyName = \"InternalWaterVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Internal Water Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalWaterVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.NominalHeatTransferArea\", \"NominalHeatTransferArea\");\r\n            ifcPSE.PropertyName = \"NominalHeatTransferArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Heat Transfer Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatTransferAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.NominalHeatTransferCoefficient\", \"NominalHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"NominalHeatTransferCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Heat Transfer Coefficient\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CondenserTypeCommon\"))\r\n         {\r\n            propertySetCondenserTypeCommon.EntityTypes.Add(IFCEntityType.IfcCondenser);\r\n            propertySetCondenserTypeCommon.EntityTypes.Add(IFCEntityType.IfcCondenserType);\r\n            propertySetCondenserTypeCommon.ObjectType = \"IfcCondenser\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.RefrigerantClass\", \"RefrigerantClass\");\r\n            ifcPSE.PropertyName = \"RefrigerantClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RefrigerantClass);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.ExternalSurfaceArea\", \"ExternalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"ExternalSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExternalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.InternalSurfaceArea\", \"InternalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"InternalSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.InternalRefrigerantVolume\", \"InternalRefrigerantVolume\");\r\n            ifcPSE.PropertyName = \"InternalRefrigerantVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalRefrigerantVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.InternalWaterVolume\", \"InternalWaterVolume\");\r\n            ifcPSE.PropertyName = \"InternalWaterVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalWaterVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.NominalHeatTransferArea\", \"NominalHeatTransferArea\");\r\n            ifcPSE.PropertyName = \"NominalHeatTransferArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatTransferAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CondenserTypeCommon.NominalHeatTransferCoefficient\", \"NominalHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"NominalHeatTransferCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondenserTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCondenserTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_Condition(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCondition = new PropertySetDescription();\r\n         propertySetCondition.Name = \"Pset_Condition\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Condition\"))\r\n         {\r\n            propertySetCondition.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetCondition.ObjectType = \"IfcElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_Condition.AssessmentDate\", \"AssessmentDate\");\r\n            ifcPSE.PropertyName = \"AssessmentDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Assessment Date\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"評価日\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssessmentDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Condition.AssessmentCondition\", \"AssessmentCondition\");\r\n            ifcPSE.PropertyName = \"AssessmentCondition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Assessment Condition\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"評価状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssessmentConditionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Condition.AssessmentDescription\", \"AssessmentDescription\");\r\n            ifcPSE.PropertyName = \"AssessmentDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Assessment Description\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"評価記述\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssessmentDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondition.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Condition\"))\r\n         {\r\n            propertySetCondition.EntityTypes.Add(IFCEntityType.IfcAsset);\r\n            propertySetCondition.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetCondition.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            propertySetCondition.EntityTypes.Add(IFCEntityType.IfcElementType);\r\n            propertySetCondition.ObjectType = \"IfcAsset\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_Condition.AssessmentDate\", \"AssessmentDate\");\r\n            ifcPSE.PropertyName = \"AssessmentDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssessmentDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Condition.AssessmentCondition\", \"AssessmentCondition\");\r\n            ifcPSE.PropertyName = \"AssessmentCondition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssessmentConditionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Condition.AssessmentDescription\", \"AssessmentDescription\");\r\n            ifcPSE.PropertyName = \"AssessmentDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssessmentDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Condition.AssessmentType\", \"AssessmentType\");\r\n            ifcPSE.PropertyName = \"AssessmentType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssessmentTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Condition.AssessmentMethod\", \"AssessmentMethod\");\r\n            ifcPSE.PropertyName = \"AssessmentMethod\";\r\n            ifcPSE.PropertyType = PropertyType.IfcDocumentReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssessmentMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Condition.LastAssessmentReport\", \"LastAssessmentReport\");\r\n            ifcPSE.PropertyName = \"LastAssessmentReport\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LastAssessmentReportCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Condition.NextAssessmentDate\", \"NextAssessmentDate\");\r\n            ifcPSE.PropertyName = \"NextAssessmentDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NextAssessmentDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Condition.AssessmentFrequency\", \"AssessmentFrequency\");\r\n            ifcPSE.PropertyName = \"AssessmentFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssessmentFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCondition.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCondition);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ConstructionAdministration(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetConstructionAdministration = new PropertySetDescription();\r\n         propertySetConstructionAdministration.Name = \"Pset_ConstructionAdministration\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ConstructionAdministration\"))\r\n         {\r\n            propertySetConstructionAdministration.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetConstructionAdministration.EntityTypes.Add(IFCEntityType.IfcElementType);\r\n            propertySetConstructionAdministration.ObjectType = \"IfcElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionAdministration.ProcurementMethod\", \"ProcurementMethod\");\r\n            ifcPSE.PropertyName = \"ProcurementMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProcurementMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionAdministration.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionAdministration.SpecificationSectionNumber\", \"SpecificationSectionNumber\");\r\n            ifcPSE.PropertyName = \"SpecificationSectionNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecificationSectionNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionAdministration.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionAdministration.SubmittalIdentifer\", \"SubmittalIdentifer\");\r\n            ifcPSE.PropertyName = \"SubmittalIdentifer\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SubmittalIdentiferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionAdministration.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetConstructionAdministration);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ConstructionOccurence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetConstructionOccurence = new PropertySetDescription();\r\n         propertySetConstructionOccurence.Name = \"Pset_ConstructionOccurence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ConstructionOccurence\"))\r\n         {\r\n            propertySetConstructionOccurence.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetConstructionOccurence.ObjectType = \"IfcElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionOccurence.InstallationDate\", \"InstallationDate\");\r\n            ifcPSE.PropertyName = \"InstallationDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstallationDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionOccurence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionOccurence.ModelNumber\", \"ModelNumber\");\r\n            ifcPSE.PropertyName = \"ModelNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ModelNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionOccurence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionOccurence.TagNumber\", \"TagNumber\");\r\n            ifcPSE.PropertyName = \"TagNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TagNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionOccurence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionOccurence.AssetIdentifier\", \"AssetIdentifier\");\r\n            ifcPSE.PropertyName = \"AssetIdentifier\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssetIdentifierCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionOccurence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetConstructionOccurence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ConstructionResource(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetConstructionResource = new PropertySetDescription();\r\n         propertySetConstructionResource.Name = \"Pset_ConstructionResource\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ConstructionResource\"))\r\n         {\r\n            propertySetConstructionResource.EntityTypes.Add(IFCEntityType.IfcConstructionResource);\r\n            propertySetConstructionResource.ObjectType = \"IfcConstructionResource\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionResource.ScheduleWork\", \"ScheduleWork\");\r\n            ifcPSE.PropertyName = \"ScheduleWork\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Schedule Work\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"予定作業時間\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ScheduleWorkCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionResource.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionResource.ActualWork\", \"ActualWork\");\r\n            ifcPSE.PropertyName = \"ActualWork\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Actual Work\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"実績作業時間\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActualWorkCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionResource.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionResource.RemainingWork\", \"RemainingWork\");\r\n            ifcPSE.PropertyName = \"RemainingWork\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Remaining Work\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"残存作業時間\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RemainingWorkCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionResource.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionResource.ScheduleCost\", \"ScheduleCost\");\r\n            ifcPSE.PropertyName = \"ScheduleCost\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Schedule Cost\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"予定コスト\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ScheduleCostCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionResource.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionResource.ActualCost\", \"ActualCost\");\r\n            ifcPSE.PropertyName = \"ActualCost\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Actual Cost\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"実績コスト\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActualCostCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionResource.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionResource.RemainingCost\", \"RemainingCost\");\r\n            ifcPSE.PropertyName = \"RemainingCost\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Remaining Cost\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"残存コスト\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RemainingCostCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionResource.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionResource.ScheduleCompletion\", \"ScheduleCompletion\");\r\n            ifcPSE.PropertyName = \"ScheduleCompletion\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Schedule Completion\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"予定完了率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ScheduleCompletionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionResource.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionResource.ActualCompletion\", \"ActualCompletion\");\r\n            ifcPSE.PropertyName = \"ActualCompletion\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Actual Completion\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"実績完了率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActualCompletionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionResource.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ConstructionResource\"))\r\n         {\r\n            propertySetConstructionResource.EntityTypes.Add(IFCEntityType.IfcConstructionResource);\r\n            propertySetConstructionResource.EntityTypes.Add(IFCEntityType.IfcConstructionResourceType);\r\n            propertySetConstructionResource.ObjectType = \"IfcConstructionResource\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionResource.ScheduleWorkProgression\", \"ScheduleWorkProgression\");\r\n            ifcPSE.PropertyName = \"ScheduleWorkProgression\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ScheduleWorkProgressionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionResource.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionResource.ActualWorkTime\", \"ActualWorkTime\");\r\n            ifcPSE.PropertyName = \"ActualWorkTime\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActualWorkTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionResource.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionResource.RemainingWorkProgression\", \"RemainingWorkProgression\");\r\n            ifcPSE.PropertyName = \"RemainingWorkProgression\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RemainingWorkProgressionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionResource.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionResource.ScheduleCost\", \"ScheduleCost\");\r\n            ifcPSE.PropertyName = \"ScheduleCost\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ScheduleCostCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionResource.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionResource.ActualCost\", \"ActualCost\");\r\n            ifcPSE.PropertyName = \"ActualCost\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActualCostCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionResource.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionResource.RemainingCost\", \"RemainingCost\");\r\n            ifcPSE.PropertyName = \"RemainingCost\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RemainingCostCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionResource.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionResource.ScheduleCompletion\", \"ScheduleCompletion\");\r\n            ifcPSE.PropertyName = \"ScheduleCompletion\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ScheduleCompletionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionResource.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ConstructionResource.ActualCompletion\", \"ActualCompletion\");\r\n            ifcPSE.PropertyName = \"ActualCompletion\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActualCompletionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetConstructionResource.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetConstructionResource);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ControllerPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetControllerPHistory = new PropertySetDescription();\r\n         propertySetControllerPHistory.Name = \"Pset_ControllerPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ControllerPHistory\"))\r\n         {\r\n            propertySetControllerPHistory.EntityTypes.Add(IFCEntityType.IfcController);\r\n            propertySetControllerPHistory.ObjectType = \"IfcController\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerPHistory.Value\", \"Value\");\r\n            ifcPSE.PropertyName = \"Value\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Value\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"デフォルト出力時系列定数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"이상 출력 시계열 상수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerPHistory.Quality\", \"Quality\");\r\n            ifcPSE.PropertyName = \"Quality\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Quality\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"기본 출력 시계열 상수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.QualityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerPHistory.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ControllerPHistory\"))\r\n         {\r\n            propertySetControllerPHistory.EntityTypes.Add(IFCEntityType.IfcController);\r\n            propertySetControllerPHistory.ObjectType = \"IfcController\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerPHistory.ValueHistory\", \"ValueHistory\");\r\n            ifcPSE.PropertyName = \"ValueHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValueHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerPHistory.Quality\", \"Quality\");\r\n            ifcPSE.PropertyName = \"Quality\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.QualityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerPHistory.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetControllerPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ControllerTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetControllerTypeCommon = new PropertySetDescription();\r\n         propertySetControllerTypeCommon.Name = \"Pset_ControllerTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ControllerTypeCommon\"))\r\n         {\r\n            propertySetControllerTypeCommon.EntityTypes.Add(IFCEntityType.IfcControllerType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeCommon.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ControlType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeCommon.SignalOffset\", \"SignalOffset\");\r\n            ifcPSE.PropertyName = \"SignalOffset\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeCommon.SignalFactor\", \"SignalFactor\");\r\n            ifcPSE.PropertyName = \"SignalFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeCommon.SignalTime\", \"SignalTime\");\r\n            ifcPSE.PropertyName = \"SignalTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ControllerTypeCommon\"))\r\n         {\r\n            propertySetControllerTypeCommon.EntityTypes.Add(IFCEntityType.IfcController);\r\n            propertySetControllerTypeCommon.ObjectType = \"IfcController\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조ID\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ControllerTypeCommon\"))\r\n         {\r\n            propertySetControllerTypeCommon.EntityTypes.Add(IFCEntityType.IfcController);\r\n            propertySetControllerTypeCommon.EntityTypes.Add(IFCEntityType.IfcControllerType);\r\n            propertySetControllerTypeCommon.ObjectType = \"IfcController\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetControllerTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ControllerTypeFloating(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetControllerTypeFloating = new PropertySetDescription();\r\n         propertySetControllerTypeFloating.Name = \"Pset_ControllerTypeFloating\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ControllerTypeFloating\"))\r\n         {\r\n            propertySetControllerTypeFloating.EntityTypes.Add(IFCEntityType.IfcController);\r\n            propertySetControllerTypeFloating.ObjectType = \"IfcController\";\r\n            propertySetControllerTypeFloating.PredefinedType = \"FLOATING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeFloating.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ControllerTypeFloating);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Control Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"FLOATING 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeFloating.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeFloating.Labels\", \"Labels\");\r\n            ifcPSE.PropertyName = \"Labels\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Labels\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LabelsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeFloating.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeFloating.Range\", \"Range\");\r\n            ifcPSE.PropertyName = \"Range\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Range\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeFloating.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeFloating.Value\", \"Value\");\r\n            ifcPSE.PropertyName = \"Value\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Value\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeFloating.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeFloating.SignalOffset\", \"SignalOffset\");\r\n            ifcPSE.PropertyName = \"SignalOffset\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Signal Offset\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"옵셋\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeFloating.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeFloating.SignalFactor\", \"SignalFactor\");\r\n            ifcPSE.PropertyName = \"SignalFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Signal Factor\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"요소\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeFloating.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeFloating.SignalTime\", \"SignalTime\");\r\n            ifcPSE.PropertyName = \"SignalTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Signal Time\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"시간 요소\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeFloating.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ControllerTypeFloating\"))\r\n         {\r\n            propertySetControllerTypeFloating.EntityTypes.Add(IFCEntityType.IfcController);\r\n            propertySetControllerTypeFloating.EntityTypes.Add(IFCEntityType.IfcControllerType);\r\n            propertySetControllerTypeFloating.ObjectType = \"IfcController\";\r\n            propertySetControllerTypeFloating.PredefinedType = \"FLOATING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeFloating.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ControllerTypeFloating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeFloating.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeFloating.Labels\", \"Labels\");\r\n            ifcPSE.PropertyName = \"Labels\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LabelsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeFloating.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeFloating.Range\", \"Range\");\r\n            ifcPSE.PropertyName = \"Range\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeFloating.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeFloating.Value\", \"Value\");\r\n            ifcPSE.PropertyName = \"Value\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeFloating.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeFloating.SignalOffset\", \"SignalOffset\");\r\n            ifcPSE.PropertyName = \"SignalOffset\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeFloating.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeFloating.SignalFactor\", \"SignalFactor\");\r\n            ifcPSE.PropertyName = \"SignalFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeFloating.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeFloating.SignalTime\", \"SignalTime\");\r\n            ifcPSE.PropertyName = \"SignalTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeFloating.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetControllerTypeFloating);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ControllerTypeMultiPosition(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetControllerTypeMultiPosition = new PropertySetDescription();\r\n         propertySetControllerTypeMultiPosition.Name = \"Pset_ControllerTypeMultiPosition\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ControllerTypeMultiPosition\"))\r\n         {\r\n            propertySetControllerTypeMultiPosition.EntityTypes.Add(IFCEntityType.IfcController);\r\n            propertySetControllerTypeMultiPosition.ObjectType = \"IfcController\";\r\n            propertySetControllerTypeMultiPosition.PredefinedType = \"MULTIPOSITION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeMultiPosition.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ControllerMultiPositionType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Control Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeMultiPosition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeMultiPosition.Labels\", \"Labels\");\r\n            ifcPSE.PropertyName = \"Labels\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Integer;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Labels\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LabelsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeMultiPosition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeMultiPosition.Range\", \"Range\");\r\n            ifcPSE.PropertyName = \"Range\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Range\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeMultiPosition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeMultiPosition.Value\", \"Value\");\r\n            ifcPSE.PropertyName = \"Value\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Value\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeMultiPosition.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ControllerTypeMultiPosition\"))\r\n         {\r\n            propertySetControllerTypeMultiPosition.EntityTypes.Add(IFCEntityType.IfcController);\r\n            propertySetControllerTypeMultiPosition.EntityTypes.Add(IFCEntityType.IfcControllerType);\r\n            propertySetControllerTypeMultiPosition.ObjectType = \"IfcController\";\r\n            propertySetControllerTypeMultiPosition.PredefinedType = \"MULTIPOSITION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeMultiPosition.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ControllerMultiPositionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeMultiPosition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeMultiPosition.Labels\", \"Labels\");\r\n            ifcPSE.PropertyName = \"Labels\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Integer;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LabelsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeMultiPosition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeMultiPosition.IntegerRange\", \"IntegerRange\");\r\n            ifcPSE.PropertyName = \"IntegerRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IntegerRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeMultiPosition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeMultiPosition.Value\", \"Value\");\r\n            ifcPSE.PropertyName = \"Value\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeMultiPosition.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetControllerTypeMultiPosition);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ControllerTypeProgrammable(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetControllerTypeProgrammable = new PropertySetDescription();\r\n         propertySetControllerTypeProgrammable.Name = \"Pset_ControllerTypeProgrammable\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ControllerTypeProgrammable\"))\r\n         {\r\n            propertySetControllerTypeProgrammable.EntityTypes.Add(IFCEntityType.IfcController);\r\n            propertySetControllerTypeProgrammable.ObjectType = \"IfcController\";\r\n            propertySetControllerTypeProgrammable.PredefinedType = \"PROGRAMMABLE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProgrammable.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ControllerTypeProgrammable);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Control Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProgrammable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProgrammable.FirmwareVersion\", \"FirmwareVersion\");\r\n            ifcPSE.PropertyName = \"FirmwareVersion\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Firmware Version\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"펌웨어 버전\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FirmwareVersionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProgrammable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProgrammable.SoftwareVersion\", \"SoftwareVersion\");\r\n            ifcPSE.PropertyName = \"SoftwareVersion\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Software Version\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"소프트웨어 버전\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoftwareVersionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProgrammable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProgrammable.Application\", \"Application\");\r\n            ifcPSE.PropertyName = \"Application\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ControllerApplication);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Application\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplicationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProgrammable.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ControllerTypeProgrammable\"))\r\n         {\r\n            propertySetControllerTypeProgrammable.EntityTypes.Add(IFCEntityType.IfcController);\r\n            propertySetControllerTypeProgrammable.EntityTypes.Add(IFCEntityType.IfcControllerType);\r\n            propertySetControllerTypeProgrammable.ObjectType = \"IfcController\";\r\n            propertySetControllerTypeProgrammable.PredefinedType = \"PROGRAMMABLE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProgrammable.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ControllerTypeProgrammable);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProgrammable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProgrammable.FirmwareVersion\", \"FirmwareVersion\");\r\n            ifcPSE.PropertyName = \"FirmwareVersion\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FirmwareVersionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProgrammable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProgrammable.SoftwareVersion\", \"SoftwareVersion\");\r\n            ifcPSE.PropertyName = \"SoftwareVersion\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoftwareVersionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProgrammable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProgrammable.Application\", \"Application\");\r\n            ifcPSE.PropertyName = \"Application\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ControllerApplication);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplicationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProgrammable.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetControllerTypeProgrammable);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ControllerTypeProportional(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetControllerTypeProportional = new PropertySetDescription();\r\n         propertySetControllerTypeProportional.Name = \"Pset_ControllerTypeProportional\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ControllerTypeProportional\"))\r\n         {\r\n            propertySetControllerTypeProportional.EntityTypes.Add(IFCEntityType.IfcControllerType);\r\n            propertySetControllerTypeProportional.ObjectType = \"IfcControllerType\";\r\n            propertySetControllerTypeProportional.PredefinedType = \"PROPORTIONAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ProportionalControlType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.SignalFactor1\", \"SignalFactor1\");\r\n            ifcPSE.PropertyName = \"SignalFactor1\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalFactor1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.SignalFactor2\", \"SignalFactor2\");\r\n            ifcPSE.PropertyName = \"SignalFactor2\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalFactor2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.SignalTime1\", \"SignalTime1\");\r\n            ifcPSE.PropertyName = \"SignalTime1\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalTime1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.SignalTime2\", \"SignalTime2\");\r\n            ifcPSE.PropertyName = \"SignalTime2\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalTime2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ControllerTypeProportional\"))\r\n         {\r\n            propertySetControllerTypeProportional.EntityTypes.Add(IFCEntityType.IfcController);\r\n            propertySetControllerTypeProportional.ObjectType = \"IfcController\";\r\n            propertySetControllerTypeProportional.PredefinedType = \"PROPORTIONAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ControllerProportionalType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Control Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"PROPORTIONAL 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.Labels\", \"Labels\");\r\n            ifcPSE.PropertyName = \"Labels\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Labels\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LabelsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.Range\", \"Range\");\r\n            ifcPSE.PropertyName = \"Range\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Range\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.Value\", \"Value\");\r\n            ifcPSE.PropertyName = \"Value\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Value\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.ProportionalConstant\", \"ProportionalConstant\");\r\n            ifcPSE.PropertyName = \"ProportionalConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Proportional Constant\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"비례 게인 (Kp)\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProportionalConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.IntegralConstant\", \"IntegralConstant\");\r\n            ifcPSE.PropertyName = \"IntegralConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Integral Constant\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"적분 게인 (Ki)\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IntegralConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.DerivativeConstant\", \"DerivativeConstant\");\r\n            ifcPSE.PropertyName = \"DerivativeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Derivative Constant\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"미분 게인 (Kd)\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DerivativeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.SignalTimeIncrease\", \"SignalTimeIncrease\");\r\n            ifcPSE.PropertyName = \"SignalTimeIncrease\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Signal Time Increase\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"적분 시간 (Ti)\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalTimeIncreaseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.SignalTimeDecrease\", \"SignalTimeDecrease\");\r\n            ifcPSE.PropertyName = \"SignalTimeDecrease\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Signal Time Decrease\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"미분 시간 (Td)\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalTimeDecreaseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ControllerTypeProportional\"))\r\n         {\r\n            propertySetControllerTypeProportional.EntityTypes.Add(IFCEntityType.IfcController);\r\n            propertySetControllerTypeProportional.EntityTypes.Add(IFCEntityType.IfcControllerType);\r\n            propertySetControllerTypeProportional.ObjectType = \"IfcController\";\r\n            propertySetControllerTypeProportional.PredefinedType = \"PROPORTIONAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ControllerProportionalType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.Labels\", \"Labels\");\r\n            ifcPSE.PropertyName = \"Labels\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LabelsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.Range\", \"Range\");\r\n            ifcPSE.PropertyName = \"Range\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.Value\", \"Value\");\r\n            ifcPSE.PropertyName = \"Value\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.ProportionalConstant\", \"ProportionalConstant\");\r\n            ifcPSE.PropertyName = \"ProportionalConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProportionalConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.IntegralConstant\", \"IntegralConstant\");\r\n            ifcPSE.PropertyName = \"IntegralConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IntegralConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.DerivativeConstant\", \"DerivativeConstant\");\r\n            ifcPSE.PropertyName = \"DerivativeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DerivativeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.SignalTimeIncrease\", \"SignalTimeIncrease\");\r\n            ifcPSE.PropertyName = \"SignalTimeIncrease\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalTimeIncreaseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeProportional.SignalTimeDecrease\", \"SignalTimeDecrease\");\r\n            ifcPSE.PropertyName = \"SignalTimeDecrease\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalTimeDecreaseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeProportional.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetControllerTypeProportional);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ControllerTypeTwoPosition(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetControllerTypeTwoPosition = new PropertySetDescription();\r\n         propertySetControllerTypeTwoPosition.Name = \"Pset_ControllerTypeTwoPosition\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ControllerTypeTwoPosition\"))\r\n         {\r\n            propertySetControllerTypeTwoPosition.EntityTypes.Add(IFCEntityType.IfcControllerType);\r\n            propertySetControllerTypeTwoPosition.ObjectType = \"IfcControllerType\";\r\n            propertySetControllerTypeTwoPosition.PredefinedType = \"TWOPOSITION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeTwoPosition.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_TwoPositionControlType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeTwoPosition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeTwoPosition.BandWidth\", \"BandWidth\");\r\n            ifcPSE.PropertyName = \"BandWidth\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BandWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeTwoPosition.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ControllerTypeTwoPosition\"))\r\n         {\r\n            propertySetControllerTypeTwoPosition.EntityTypes.Add(IFCEntityType.IfcController);\r\n            propertySetControllerTypeTwoPosition.ObjectType = \"IfcController\";\r\n            propertySetControllerTypeTwoPosition.PredefinedType = \"TWOPOSITION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeTwoPosition.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ControllerTwoPositionType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Control Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"TWOPOSITION 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeTwoPosition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeTwoPosition.Labels\", \"Labels\");\r\n            ifcPSE.PropertyName = \"Labels\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Boolean;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Labels\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LabelsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeTwoPosition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeTwoPosition.Polarity\", \"Polarity\");\r\n            ifcPSE.PropertyName = \"Polarity\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Polarity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PolarityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeTwoPosition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeTwoPosition.Value\", \"Value\");\r\n            ifcPSE.PropertyName = \"Value\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Value\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeTwoPosition.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ControllerTypeTwoPosition\"))\r\n         {\r\n            propertySetControllerTypeTwoPosition.EntityTypes.Add(IFCEntityType.IfcController);\r\n            propertySetControllerTypeTwoPosition.EntityTypes.Add(IFCEntityType.IfcControllerType);\r\n            propertySetControllerTypeTwoPosition.ObjectType = \"IfcController\";\r\n            propertySetControllerTypeTwoPosition.PredefinedType = \"TWOPOSITION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeTwoPosition.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ControllerTwoPositionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeTwoPosition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeTwoPosition.Labels\", \"Labels\");\r\n            ifcPSE.PropertyName = \"Labels\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Boolean;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LabelsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeTwoPosition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeTwoPosition.Polarity\", \"Polarity\");\r\n            ifcPSE.PropertyName = \"Polarity\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PolarityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeTwoPosition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ControllerTypeTwoPosition.Value\", \"Value\");\r\n            ifcPSE.PropertyName = \"Value\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetControllerTypeTwoPosition.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetControllerTypeTwoPosition);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CooledBeamPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCooledBeamPHistory = new PropertySetDescription();\r\n         propertySetCooledBeamPHistory.Name = \"Pset_CooledBeamPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CooledBeamPHistory\"))\r\n         {\r\n            propertySetCooledBeamPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.TotalCoolingCapacity\", \"TotalCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"TotalCoolingCapacity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.TotalHeatingCapacity\", \"TotalHeatingCapacity\");\r\n            ifcPSE.PropertyName = \"TotalHeatingCapacity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.BeamCoolingCapacity\", \"BeamCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"BeamCoolingCapacity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BeamCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.BeamHeatingCapacity\", \"BeamHeatingCapacity\");\r\n            ifcPSE.PropertyName = \"BeamHeatingCapacity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BeamHeatingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.CoolingWaterFlowRate\", \"CoolingWaterFlowRate\");\r\n            ifcPSE.PropertyName = \"CoolingWaterFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingWaterFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.HeatingWaterFlowRate\", \"HeatingWaterFlowRate\");\r\n            ifcPSE.PropertyName = \"HeatingWaterFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingWaterFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.CorrectionFactorForCooling\", \"CorrectionFactorForCooling\");\r\n            ifcPSE.PropertyName = \"CorrectionFactorForCooling\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CorrectionFactorForCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.CorrectionFactorForHeating\", \"CorrectionFactorForHeating\");\r\n            ifcPSE.PropertyName = \"CorrectionFactorForHeating\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CorrectionFactorForHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.WaterPressureDropCurves\", \"WaterPressureDropCurves\");\r\n            ifcPSE.PropertyName = \"WaterPressureDropCurves\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterPressureDropCurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.SupplyWaterTemperatureCooling\", \"SupplyWaterTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"SupplyWaterTemperatureCooling\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyWaterTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.ReturnWaterTemperatureCooling\", \"ReturnWaterTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"ReturnWaterTemperatureCooling\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReturnWaterTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.SupplyWaterTemperatureHeating\", \"SupplyWaterTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"SupplyWaterTemperatureHeating\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyWaterTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.ReturnWaterTemperatureHeating\", \"ReturnWaterTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"ReturnWaterTemperatureHeating\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReturnWaterTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CooledBeamPHistory\"))\r\n         {\r\n            propertySetCooledBeamPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.TotalCoolingCapacity\", \"TotalCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"TotalCoolingCapacity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.TotalHeatingCapacity\", \"TotalHeatingCapacity\");\r\n            ifcPSE.PropertyName = \"TotalHeatingCapacity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.BeamCoolingCapacity\", \"BeamCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"BeamCoolingCapacity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BeamCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.BeamHeatingCapacity\", \"BeamHeatingCapacity\");\r\n            ifcPSE.PropertyName = \"BeamHeatingCapacity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BeamHeatingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.CoolingWaterFlowRate\", \"CoolingWaterFlowRate\");\r\n            ifcPSE.PropertyName = \"CoolingWaterFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingWaterFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.HeatingWaterFlowRate\", \"HeatingWaterFlowRate\");\r\n            ifcPSE.PropertyName = \"HeatingWaterFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingWaterFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.CorrectionFactorForCooling\", \"CorrectionFactorForCooling\");\r\n            ifcPSE.PropertyName = \"CorrectionFactorForCooling\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CorrectionFactorForCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.CorrectionFactorForHeating\", \"CorrectionFactorForHeating\");\r\n            ifcPSE.PropertyName = \"CorrectionFactorForHeating\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CorrectionFactorForHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.WaterPressureDropCurves\", \"WaterPressureDropCurves\");\r\n            ifcPSE.PropertyName = \"WaterPressureDropCurves\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterPressureDropCurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.SupplyWaterTemperatureCooling\", \"SupplyWaterTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"SupplyWaterTemperatureCooling\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyWaterTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.ReturnWaterTemperatureCooling\", \"ReturnWaterTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"ReturnWaterTemperatureCooling\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReturnWaterTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.SupplyWaterTemperatureHeating\", \"SupplyWaterTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"SupplyWaterTemperatureHeating\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyWaterTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.ReturnWaterTemperatureHeating\", \"ReturnWaterTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"ReturnWaterTemperatureHeating\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReturnWaterTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CooledBeamPHistory\"))\r\n         {\r\n            propertySetCooledBeamPHistory.EntityTypes.Add(IFCEntityType.IfcCooledBeam);\r\n            propertySetCooledBeamPHistory.ObjectType = \"IfcCooledBeam\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.TotalCoolingCapacity\", \"TotalCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"TotalCoolingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Cooling Capacity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.TotalHeatingCapacity\", \"TotalHeatingCapacity\");\r\n            ifcPSE.PropertyName = \"TotalHeatingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Heating Capacity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.BeamCoolingCapacity\", \"BeamCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"BeamCoolingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Beam Cooling Capacity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BeamCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.BeamHeatingCapacity\", \"BeamHeatingCapacity\");\r\n            ifcPSE.PropertyName = \"BeamHeatingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Beam Heating Capacity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BeamHeatingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.CoolingWaterFlowRate\", \"CoolingWaterFlowRate\");\r\n            ifcPSE.PropertyName = \"CoolingWaterFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cooling Water Flow Rate\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingWaterFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.HeatingWaterFlowRate\", \"HeatingWaterFlowRate\");\r\n            ifcPSE.PropertyName = \"HeatingWaterFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heating Water Flow Rate\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingWaterFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.CorrectionFactorForCooling\", \"CorrectionFactorForCooling\");\r\n            ifcPSE.PropertyName = \"CorrectionFactorForCooling\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Correction Factor For Cooling\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CorrectionFactorForCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.CorrectionFactorForHeating\", \"CorrectionFactorForHeating\");\r\n            ifcPSE.PropertyName = \"CorrectionFactorForHeating\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Correction Factor For Heating\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CorrectionFactorForHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.WaterPressureDropCurves\", \"WaterPressureDropCurves\");\r\n            ifcPSE.PropertyName = \"WaterPressureDropCurves\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Pressure Drop Curves\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterPressureDropCurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.SupplyWaterTemperatureCooling\", \"SupplyWaterTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"SupplyWaterTemperatureCooling\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Supply Water Temperature Cooling\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyWaterTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.ReturnWaterTemperatureCooling\", \"ReturnWaterTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"ReturnWaterTemperatureCooling\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Return Water Temperature Cooling\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReturnWaterTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.SupplyWaterTemperatureHeating\", \"SupplyWaterTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"SupplyWaterTemperatureHeating\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Supply Water Temperature Heating\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyWaterTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.ReturnWaterTemperatureHeating\", \"ReturnWaterTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"ReturnWaterTemperatureHeating\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Return Water Temperature Heating\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReturnWaterTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CooledBeamPHistory\"))\r\n         {\r\n            propertySetCooledBeamPHistory.EntityTypes.Add(IFCEntityType.IfcCooledBeam);\r\n            propertySetCooledBeamPHistory.ObjectType = \"IfcCooledBeam\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.TotalCoolingCapacity\", \"TotalCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"TotalCoolingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.TotalHeatingCapacity\", \"TotalHeatingCapacity\");\r\n            ifcPSE.PropertyName = \"TotalHeatingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.BeamCoolingCapacity\", \"BeamCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"BeamCoolingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BeamCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.BeamHeatingCapacity\", \"BeamHeatingCapacity\");\r\n            ifcPSE.PropertyName = \"BeamHeatingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BeamHeatingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.CoolingWaterFlowRate\", \"CoolingWaterFlowRate\");\r\n            ifcPSE.PropertyName = \"CoolingWaterFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingWaterFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.HeatingWaterFlowRate\", \"HeatingWaterFlowRate\");\r\n            ifcPSE.PropertyName = \"HeatingWaterFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingWaterFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.CorrectionFactorForCooling\", \"CorrectionFactorForCooling\");\r\n            ifcPSE.PropertyName = \"CorrectionFactorForCooling\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CorrectionFactorForCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.CorrectionFactorForHeating\", \"CorrectionFactorForHeating\");\r\n            ifcPSE.PropertyName = \"CorrectionFactorForHeating\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CorrectionFactorForHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.WaterPressureDropCurves\", \"WaterPressureDropCurves\");\r\n            ifcPSE.PropertyName = \"WaterPressureDropCurves\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterPressureDropCurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.SupplyWaterTemperatureCooling\", \"SupplyWaterTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"SupplyWaterTemperatureCooling\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyWaterTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.ReturnWaterTemperatureCooling\", \"ReturnWaterTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"ReturnWaterTemperatureCooling\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReturnWaterTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.SupplyWaterTemperatureHeating\", \"SupplyWaterTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"SupplyWaterTemperatureHeating\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyWaterTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistory.ReturnWaterTemperatureHeating\", \"ReturnWaterTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"ReturnWaterTemperatureHeating\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReturnWaterTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCooledBeamPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CooledBeamPHistoryActive(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCooledBeamPHistoryActive = new PropertySetDescription();\r\n         propertySetCooledBeamPHistoryActive.Name = \"Pset_CooledBeamPHistoryActive\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CooledBeamPHistoryActive\"))\r\n         {\r\n            propertySetCooledBeamPHistoryActive.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            propertySetCooledBeamPHistoryActive.ObjectType = \"The related IfcCooledBeamType\";\r\n            propertySetCooledBeamPHistoryActive.PredefinedType = \"ACTIVE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistoryActive.AirFlowRate\", \"AirFlowRate\");\r\n            ifcPSE.PropertyName = \"AirFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistoryActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistoryActive.Throw\", \"Throw\");\r\n            ifcPSE.PropertyName = \"Throw\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThrowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistoryActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistoryActive.AirPressureDropCurves\", \"AirPressureDropCurves\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurves\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistoryActive.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CooledBeamPHistoryActive\"))\r\n         {\r\n            propertySetCooledBeamPHistoryActive.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            propertySetCooledBeamPHistoryActive.ObjectType = \"RelatedEntityIs:IfcCooledBeamType\";\r\n            propertySetCooledBeamPHistoryActive.PredefinedType = \"ACTIVE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistoryActive.AirFlowRate\", \"AirFlowRate\");\r\n            ifcPSE.PropertyName = \"AirFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistoryActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistoryActive.Throw\", \"Throw\");\r\n            ifcPSE.PropertyName = \"Throw\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThrowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistoryActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistoryActive.AirPressureDropCurves\", \"AirPressureDropCurves\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurves\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistoryActive.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CooledBeamPHistoryActive\"))\r\n         {\r\n            propertySetCooledBeamPHistoryActive.EntityTypes.Add(IFCEntityType.IfcCooledBeam);\r\n            propertySetCooledBeamPHistoryActive.ObjectType = \"IfcCooledBeam\";\r\n            propertySetCooledBeamPHistoryActive.PredefinedType = \"ACTIVE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistoryActive.AirFlowRate\", \"AirFlowRate\");\r\n            ifcPSE.PropertyName = \"AirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Flow Rate\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistoryActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistoryActive.Throw\", \"Throw\");\r\n            ifcPSE.PropertyName = \"Throw\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Throw\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThrowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistoryActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistoryActive.AirPressureDropCurves\", \"AirPressureDropCurves\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurves\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Pressure Drop Curves\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistoryActive.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CooledBeamPHistoryActive\"))\r\n         {\r\n            propertySetCooledBeamPHistoryActive.EntityTypes.Add(IFCEntityType.IfcCooledBeam);\r\n            propertySetCooledBeamPHistoryActive.ObjectType = \"IfcCooledBeam\";\r\n            propertySetCooledBeamPHistoryActive.PredefinedType = \"ACTIVE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistoryActive.AirFlowRate\", \"AirFlowRate\");\r\n            ifcPSE.PropertyName = \"AirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistoryActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistoryActive.Throw\", \"Throw\");\r\n            ifcPSE.PropertyName = \"Throw\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThrowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistoryActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamPHistoryActive.AirPressureDropCurves\", \"AirPressureDropCurves\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurves\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamPHistoryActive.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCooledBeamPHistoryActive);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CooledBeamTypeActive(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCooledBeamTypeActive = new PropertySetDescription();\r\n         propertySetCooledBeamTypeActive.Name = \"Pset_CooledBeamTypeActive\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CooledBeamTypeActive\"))\r\n         {\r\n            propertySetCooledBeamTypeActive.EntityTypes.Add(IFCEntityType.IfcCooledBeamType);\r\n            propertySetCooledBeamTypeActive.ObjectType = \"IfcCooledBeamType\";\r\n            propertySetCooledBeamTypeActive.PredefinedType = \"ACTIVE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeActive.AirFlowConfiguration\", \"AirFlowConfiguration\");\r\n            ifcPSE.PropertyName = \"AirFlowConfiguration\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CooledBeamActiveAirFlowConfigurationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowConfigurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeActive.AirflowRateRange\", \"AirflowRateRange\");\r\n            ifcPSE.PropertyName = \"AirflowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirflowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeActive.SupplyAirConnectionType\", \"SupplyAirConnectionType\");\r\n            ifcPSE.PropertyName = \"SupplyAirConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CooledBeamSupplyAirConnectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyAirConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeActive.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeActive.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CooledBeamTypeActive\"))\r\n         {\r\n            propertySetCooledBeamTypeActive.EntityTypes.Add(IFCEntityType.IfcCooledBeamType);\r\n            propertySetCooledBeamTypeActive.ObjectType = \"IfcCooledBeamType\";\r\n            propertySetCooledBeamTypeActive.PredefinedType = \"ACTIVE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeActive.AirFlowConfiguration\", \"AirFlowConfiguration\");\r\n            ifcPSE.PropertyName = \"AirFlowConfiguration\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CooledBeamActiveAirFlowConfigurationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowConfigurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeActive.AirflowRateRange\", \"AirflowRateRange\");\r\n            ifcPSE.PropertyName = \"AirflowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirflowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeActive.SupplyAirConnectionType\", \"SupplyAirConnectionType\");\r\n            ifcPSE.PropertyName = \"SupplyAirConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CooledBeamSupplyAirConnectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyAirConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeActive.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeActive.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CooledBeamTypeActive\"))\r\n         {\r\n            propertySetCooledBeamTypeActive.EntityTypes.Add(IFCEntityType.IfcCooledBeam);\r\n            propertySetCooledBeamTypeActive.ObjectType = \"IfcCooledBeam\";\r\n            propertySetCooledBeamTypeActive.PredefinedType = \"ACTIVE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeActive.AirFlowConfiguration\", \"AirFlowConfiguration\");\r\n            ifcPSE.PropertyName = \"AirFlowConfiguration\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CooledBeamActiveAirFlowConfigurationType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Flow Configuration\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowConfigurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeActive.AirflowRateRange\", \"AirflowRateRange\");\r\n            ifcPSE.PropertyName = \"AirflowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Airflow Rate Range\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirflowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeActive.SupplyAirConnectionType\", \"SupplyAirConnectionType\");\r\n            ifcPSE.PropertyName = \"SupplyAirConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CooledBeamSupplyAirConnectionType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Supply Air Connection Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyAirConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeActive.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Connection Size\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeActive.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CooledBeamTypeActive\"))\r\n         {\r\n            propertySetCooledBeamTypeActive.EntityTypes.Add(IFCEntityType.IfcCooledBeam);\r\n            propertySetCooledBeamTypeActive.EntityTypes.Add(IFCEntityType.IfcCooledBeamType);\r\n            propertySetCooledBeamTypeActive.ObjectType = \"IfcCooledBeam\";\r\n            propertySetCooledBeamTypeActive.PredefinedType = \"ACTIVE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeActive.AirFlowConfiguration\", \"AirFlowConfiguration\");\r\n            ifcPSE.PropertyName = \"AirFlowConfiguration\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CooledBeamActiveAirFlowConfigurationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowConfigurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeActive.AirFlowRateRange\", \"AirFlowRateRange\");\r\n            ifcPSE.PropertyName = \"AirFlowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeActive.SupplyAirConnectionType\", \"SupplyAirConnectionType\");\r\n            ifcPSE.PropertyName = \"SupplyAirConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CooledBeamSupplyAirConnectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyAirConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeActive.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeActive.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeActive.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCooledBeamTypeActive);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CooledBeamTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCooledBeamTypeCommon = new PropertySetDescription();\r\n         propertySetCooledBeamTypeCommon.Name = \"Pset_CooledBeamTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CooledBeamTypeCommon\"))\r\n         {\r\n            propertySetCooledBeamTypeCommon.EntityTypes.Add(IFCEntityType.IfcCooledBeamType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.IsFreeHanging\", \"IsFreeHanging\");\r\n            ifcPSE.PropertyName = \"IsFreeHanging\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsFreeHangingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.WaterFlowControlSystemType\", \"WaterFlowControlSystemType\");\r\n            ifcPSE.PropertyName = \"WaterFlowControlSystemType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CooledBeamWaterFlowControlSystemType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterFlowControlSystemTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.WaterPressureRange\", \"WaterPressureRange\");\r\n            ifcPSE.PropertyName = \"WaterPressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterPressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalCoolingCapacity\", \"NominalCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"NominalCoolingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSurroundingTemperatureCooling\", \"NominalSurroundingTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"NominalSurroundingTemperatureCooling\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSurroundingTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSurroundingHumidityCooling\", \"NominalSurroundingHumidityCooling\");\r\n            ifcPSE.PropertyName = \"NominalSurroundingHumidityCooling\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSurroundingHumidityCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureCooling\", \"NominalSupplyWaterTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"NominalSupplyWaterTemperatureCooling\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSupplyWaterTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalReturnWaterTemperatureCooling\", \"NominalReturnWaterTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"NominalReturnWaterTemperatureCooling\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalReturnWaterTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalWaterFlowCooling\", \"NominalWaterFlowCooling\");\r\n            ifcPSE.PropertyName = \"NominalWaterFlowCooling\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWaterFlowCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalHeatingCapacity\", \"NominalHeatingCapacity\");\r\n            ifcPSE.PropertyName = \"NominalHeatingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSurroundingTemperatureHeating\", \"NominalSurroundingTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"NominalSurroundingTemperatureHeating\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSurroundingTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureHeating\", \"NominalSupplyWaterTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"NominalSupplyWaterTemperatureHeating\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSupplyWaterTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalReturnWaterTemperatureHeating\", \"NominalReturnWaterTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"NominalReturnWaterTemperatureHeating\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalReturnWaterTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalWaterFlowHeating\", \"NominalWaterFlowHeating\");\r\n            ifcPSE.PropertyName = \"NominalWaterFlowHeating\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWaterFlowHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.IntegratedLightingType\", \"IntegratedLightingType\");\r\n            ifcPSE.PropertyName = \"IntegratedLightingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CooledBeamIntegratedLightingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IntegratedLightingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.PipeConnectionEnum\", \"PipeConnectionEnum\");\r\n            ifcPSE.PropertyName = \"PipeConnectionEnum\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CooledBeamPipeConnection);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PipeConnectionEnumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.FinishColor\", \"FinishColor\");\r\n            ifcPSE.PropertyName = \"FinishColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.CoilLength\", \"CoilLength\");\r\n            ifcPSE.PropertyName = \"CoilLength\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.CoilWidth\", \"CoilWidth\");\r\n            ifcPSE.PropertyName = \"CoilWidth\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CooledBeamTypeCommon\"))\r\n         {\r\n            propertySetCooledBeamTypeCommon.EntityTypes.Add(IFCEntityType.IfcCooledBeamType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.IsFreeHanging\", \"IsFreeHanging\");\r\n            ifcPSE.PropertyName = \"IsFreeHanging\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsFreeHangingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.WaterFlowControlSystemType\", \"WaterFlowControlSystemType\");\r\n            ifcPSE.PropertyName = \"WaterFlowControlSystemType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CooledBeamWaterFlowControlSystemType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterFlowControlSystemTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.WaterPressureRange\", \"WaterPressureRange\");\r\n            ifcPSE.PropertyName = \"WaterPressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterPressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalCoolingCapacity\", \"NominalCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"NominalCoolingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSurroundingTemperatureCooling\", \"NominalSurroundingTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"NominalSurroundingTemperatureCooling\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSurroundingTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSurroundingHumidityCooling\", \"NominalSurroundingHumidityCooling\");\r\n            ifcPSE.PropertyName = \"NominalSurroundingHumidityCooling\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSurroundingHumidityCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureCooling\", \"NominalSupplyWaterTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"NominalSupplyWaterTemperatureCooling\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSupplyWaterTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalReturnWaterTemperatureCooling\", \"NominalReturnWaterTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"NominalReturnWaterTemperatureCooling\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalReturnWaterTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalWaterFlowCooling\", \"NominalWaterFlowCooling\");\r\n            ifcPSE.PropertyName = \"NominalWaterFlowCooling\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWaterFlowCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalHeatingCapacity\", \"NominalHeatingCapacity\");\r\n            ifcPSE.PropertyName = \"NominalHeatingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSurroundingTemperatureHeating\", \"NominalSurroundingTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"NominalSurroundingTemperatureHeating\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSurroundingTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureHeating\", \"NominalSupplyWaterTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"NominalSupplyWaterTemperatureHeating\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSupplyWaterTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalReturnWaterTemperatureHeating\", \"NominalReturnWaterTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"NominalReturnWaterTemperatureHeating\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalReturnWaterTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalWaterFlowHeating\", \"NominalWaterFlowHeating\");\r\n            ifcPSE.PropertyName = \"NominalWaterFlowHeating\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWaterFlowHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.IntegratedLightingType\", \"IntegratedLightingType\");\r\n            ifcPSE.PropertyName = \"IntegratedLightingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CooledBeamIntegratedLightingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IntegratedLightingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.PipeConnectionEnum\", \"PipeConnectionEnum\");\r\n            ifcPSE.PropertyName = \"PipeConnectionEnum\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CooledBeamPipeConnection);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PipeConnectionEnumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.FinishColor\", \"FinishColor\");\r\n            ifcPSE.PropertyName = \"FinishColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.CoilLength\", \"CoilLength\");\r\n            ifcPSE.PropertyName = \"CoilLength\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.CoilWidth\", \"CoilWidth\");\r\n            ifcPSE.PropertyName = \"CoilWidth\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CooledBeamTypeCommon\"))\r\n         {\r\n            propertySetCooledBeamTypeCommon.EntityTypes.Add(IFCEntityType.IfcCooledBeam);\r\n            propertySetCooledBeamTypeCommon.ObjectType = \"IfcCooledBeam\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.IsFreeHanging\", \"IsFreeHanging\");\r\n            ifcPSE.PropertyName = \"IsFreeHanging\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Free Hanging\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsFreeHangingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.PipeConnection\", \"PipeConnection\");\r\n            ifcPSE.PropertyName = \"PipeConnection\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CooledBeamPipeConnection);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pipe Connection Enum\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PipeConnectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.WaterFlowControlSystemType\", \"WaterFlowControlSystemType\");\r\n            ifcPSE.PropertyName = \"WaterFlowControlSystemType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CooledBeamWaterFlowControlSystemType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Flow Control System Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterFlowControlSystemTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.WaterPressureRange\", \"WaterPressureRange\");\r\n            ifcPSE.PropertyName = \"WaterPressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Pressure Range\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterPressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalCoolingCapacity\", \"NominalCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"NominalCoolingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Cooling Capacity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSurroundingTemperatureCooling\", \"NominalSurroundingTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"NominalSurroundingTemperatureCooling\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Surrounding Temperature Cooling\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSurroundingTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSurroundingHumidityCooling\", \"NominalSurroundingHumidityCooling\");\r\n            ifcPSE.PropertyName = \"NominalSurroundingHumidityCooling\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Surrounding Humidity Cooling\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSurroundingHumidityCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureCooling\", \"NominalSupplyWaterTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"NominalSupplyWaterTemperatureCooling\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Supply Water Temperature Cooling\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSupplyWaterTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalReturnWaterTemperatureCooling\", \"NominalReturnWaterTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"NominalReturnWaterTemperatureCooling\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Return Water Temperature Cooling\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalReturnWaterTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalWaterFlowCooling\", \"NominalWaterFlowCooling\");\r\n            ifcPSE.PropertyName = \"NominalWaterFlowCooling\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Water Flow Cooling\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWaterFlowCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalHeatingCapacity\", \"NominalHeatingCapacity\");\r\n            ifcPSE.PropertyName = \"NominalHeatingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Heating Capacity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSurroundingTemperatureHeating\", \"NominalSurroundingTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"NominalSurroundingTemperatureHeating\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Surrounding Temperature Heating\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSurroundingTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureHeating\", \"NominalSupplyWaterTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"NominalSupplyWaterTemperatureHeating\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Supply Water Temperature Heating\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSupplyWaterTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalReturnWaterTemperatureHeating\", \"NominalReturnWaterTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"NominalReturnWaterTemperatureHeating\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Return Water Temperature Heating\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalReturnWaterTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalWaterFlowHeating\", \"NominalWaterFlowHeating\");\r\n            ifcPSE.PropertyName = \"NominalWaterFlowHeating\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Water Flow Heating\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWaterFlowHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.IntegratedLightingType\", \"IntegratedLightingType\");\r\n            ifcPSE.PropertyName = \"IntegratedLightingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CooledBeamIntegratedLightingType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Integrated Lighting Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IntegratedLightingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.FinishColor\", \"FinishColor\");\r\n            ifcPSE.PropertyName = \"FinishColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Finish Color\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.CoilLength\", \"CoilLength\");\r\n            ifcPSE.PropertyName = \"CoilLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Coil Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.CoilWidth\", \"CoilWidth\");\r\n            ifcPSE.PropertyName = \"CoilWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Coil Width\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CooledBeamTypeCommon\"))\r\n         {\r\n            propertySetCooledBeamTypeCommon.EntityTypes.Add(IFCEntityType.IfcCooledBeam);\r\n            propertySetCooledBeamTypeCommon.EntityTypes.Add(IFCEntityType.IfcCooledBeamType);\r\n            propertySetCooledBeamTypeCommon.ObjectType = \"IfcCooledBeam\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.IsFreeHanging\", \"IsFreeHanging\");\r\n            ifcPSE.PropertyName = \"IsFreeHanging\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsFreeHangingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.PipeConnection\", \"PipeConnection\");\r\n            ifcPSE.PropertyName = \"PipeConnection\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CooledBeamPipeConnection);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PipeConnectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.WaterFlowControlSystemType\", \"WaterFlowControlSystemType\");\r\n            ifcPSE.PropertyName = \"WaterFlowControlSystemType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CooledBeamWaterFlowControlSystemType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterFlowControlSystemTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.WaterPressureRange\", \"WaterPressureRange\");\r\n            ifcPSE.PropertyName = \"WaterPressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterPressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalCoolingCapacity\", \"NominalCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"NominalCoolingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSurroundingTemperatureCooling\", \"NominalSurroundingTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"NominalSurroundingTemperatureCooling\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSurroundingTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSurroundingHumidityCooling\", \"NominalSurroundingHumidityCooling\");\r\n            ifcPSE.PropertyName = \"NominalSurroundingHumidityCooling\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSurroundingHumidityCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureCooling\", \"NominalSupplyWaterTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"NominalSupplyWaterTemperatureCooling\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSupplyWaterTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalReturnWaterTemperatureCooling\", \"NominalReturnWaterTemperatureCooling\");\r\n            ifcPSE.PropertyName = \"NominalReturnWaterTemperatureCooling\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalReturnWaterTemperatureCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalWaterFlowCooling\", \"NominalWaterFlowCooling\");\r\n            ifcPSE.PropertyName = \"NominalWaterFlowCooling\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWaterFlowCoolingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalHeatingCapacity\", \"NominalHeatingCapacity\");\r\n            ifcPSE.PropertyName = \"NominalHeatingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSurroundingTemperatureHeating\", \"NominalSurroundingTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"NominalSurroundingTemperatureHeating\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSurroundingTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureHeating\", \"NominalSupplyWaterTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"NominalSupplyWaterTemperatureHeating\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSupplyWaterTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalReturnWaterTemperatureHeating\", \"NominalReturnWaterTemperatureHeating\");\r\n            ifcPSE.PropertyName = \"NominalReturnWaterTemperatureHeating\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalReturnWaterTemperatureHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.NominalWaterFlowHeating\", \"NominalWaterFlowHeating\");\r\n            ifcPSE.PropertyName = \"NominalWaterFlowHeating\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWaterFlowHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.IntegratedLightingType\", \"IntegratedLightingType\");\r\n            ifcPSE.PropertyName = \"IntegratedLightingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CooledBeamIntegratedLightingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IntegratedLightingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.FinishColour\", \"FinishColour\");\r\n            ifcPSE.PropertyName = \"FinishColour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.CoilLength\", \"CoilLength\");\r\n            ifcPSE.PropertyName = \"CoilLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CooledBeamTypeCommon.CoilWidth\", \"CoilWidth\");\r\n            ifcPSE.PropertyName = \"CoilWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCooledBeamTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCooledBeamTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CoolingTowerPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCoolingTowerPHistory = new PropertySetDescription();\r\n         propertySetCoolingTowerPHistory.Name = \"Pset_CoolingTowerPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoolingTowerPHistory\"))\r\n         {\r\n            propertySetCoolingTowerPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.Capacity\", \"Capacity\");\r\n            ifcPSE.PropertyName = \"Capacity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.HeatTransferCoefficient\", \"HeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"HeatTransferCoefficient\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.SumpHeaterPower\", \"SumpHeaterPower\");\r\n            ifcPSE.PropertyName = \"SumpHeaterPower\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SumpHeaterPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.UACurve\", \"UACurve\");\r\n            ifcPSE.PropertyName = \"UACurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UACurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.Performance\", \"Performance\");\r\n            ifcPSE.PropertyName = \"Performance\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerformanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoolingTowerPHistory\"))\r\n         {\r\n            propertySetCoolingTowerPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.Capacity\", \"Capacity\");\r\n            ifcPSE.PropertyName = \"Capacity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.HeatTransferCoefficient\", \"HeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"HeatTransferCoefficient\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.SumpHeaterPower\", \"SumpHeaterPower\");\r\n            ifcPSE.PropertyName = \"SumpHeaterPower\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SumpHeaterPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.UACurve\", \"UACurve\");\r\n            ifcPSE.PropertyName = \"UACurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UACurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.Performance\", \"Performance\");\r\n            ifcPSE.PropertyName = \"Performance\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerformanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoolingTowerPHistory\"))\r\n         {\r\n            propertySetCoolingTowerPHistory.EntityTypes.Add(IFCEntityType.IfcCoolingTower);\r\n            propertySetCoolingTowerPHistory.ObjectType = \"IfcCoolingTower\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.Capacity\", \"Capacity\");\r\n            ifcPSE.PropertyName = \"Capacity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Capacity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.HeatTransferCoefficient\", \"HeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"HeatTransferCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heat Transfer Coefficient\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.SumpHeaterPower\", \"SumpHeaterPower\");\r\n            ifcPSE.PropertyName = \"SumpHeaterPower\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sump Heater Power\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SumpHeaterPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.UACurve\", \"UACurve\");\r\n            ifcPSE.PropertyName = \"UACurve\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"UACurve\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UACurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.Performance\", \"Performance\");\r\n            ifcPSE.PropertyName = \"Performance\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Performance\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerformanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoolingTowerPHistory\"))\r\n         {\r\n            propertySetCoolingTowerPHistory.EntityTypes.Add(IFCEntityType.IfcCoolingTower);\r\n            propertySetCoolingTowerPHistory.ObjectType = \"IfcCoolingTower\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.Capacity\", \"Capacity\");\r\n            ifcPSE.PropertyName = \"Capacity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.HeatTransferCoefficient\", \"HeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"HeatTransferCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.SumpHeaterPower\", \"SumpHeaterPower\");\r\n            ifcPSE.PropertyName = \"SumpHeaterPower\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SumpHeaterPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.UACurve\", \"UACurve\");\r\n            ifcPSE.PropertyName = \"UACurve\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UACurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerPHistory.Performance\", \"Performance\");\r\n            ifcPSE.PropertyName = \"Performance\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerformanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCoolingTowerPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CoolingTowerTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCoolingTowerTypeCommon = new PropertySetDescription();\r\n         propertySetCoolingTowerTypeCommon.Name = \"Pset_CoolingTowerTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoolingTowerTypeCommon\"))\r\n         {\r\n            propertySetCoolingTowerTypeCommon.EntityTypes.Add(IFCEntityType.IfcCoolingTowerType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.NominalCapacity\", \"NominalCapacity\");\r\n            ifcPSE.PropertyName = \"NominalCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.CircuitType\", \"CircuitType\");\r\n            ifcPSE.PropertyName = \"CircuitType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CoolingTowerCircuitType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CircuitTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.FlowArrangement\", \"FlowArrangement\");\r\n            ifcPSE.PropertyName = \"FlowArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CoolingTowerFlowArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.SprayType\", \"SprayType\");\r\n            ifcPSE.PropertyName = \"SprayType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CoolingTowerSprayType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprayTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.CapacityControl\", \"CapacityControl\");\r\n            ifcPSE.PropertyName = \"CapacityControl\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CoolingTowerCapacityControl);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityControlCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.ControlStrategy\", \"ControlStrategy\");\r\n            ifcPSE.PropertyName = \"ControlStrategy\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CoolingTowerControlStrategy);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlStrategyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.NumberOfCells\", \"NumberOfCells\");\r\n            ifcPSE.PropertyName = \"NumberOfCells\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCellsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.BasinReserveVolume\", \"BasinReserveVolume\");\r\n            ifcPSE.PropertyName = \"BasinReserveVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BasinReserveVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.LiftElevationDifference\", \"LiftElevationDifference\");\r\n            ifcPSE.PropertyName = \"LiftElevationDifference\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiftElevationDifferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.WaterRequirement\", \"WaterRequirement\");\r\n            ifcPSE.PropertyName = \"WaterRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.CasingMaterial\", \"CasingMaterial\");\r\n            ifcPSE.PropertyName = \"CasingMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CasingMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.FillMaterial\", \"FillMaterial\");\r\n            ifcPSE.PropertyName = \"FillMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FillMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.AmbientDesignDryBulbTemperature\", \"AmbientDesignDryBulbTemperature\");\r\n            ifcPSE.PropertyName = \"AmbientDesignDryBulbTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AmbientDesignDryBulbTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.AmbientDesignWetBulbTemperature\", \"AmbientDesignWetBulbTemperature\");\r\n            ifcPSE.PropertyName = \"AmbientDesignWetBulbTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AmbientDesignWetBulbTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoolingTowerTypeCommon\"))\r\n         {\r\n            propertySetCoolingTowerTypeCommon.EntityTypes.Add(IFCEntityType.IfcCoolingTowerType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.NominalCapacity\", \"NominalCapacity\");\r\n            ifcPSE.PropertyName = \"NominalCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.CircuitType\", \"CircuitType\");\r\n            ifcPSE.PropertyName = \"CircuitType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CoolingTowerCircuitType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CircuitTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.FlowArrangement\", \"FlowArrangement\");\r\n            ifcPSE.PropertyName = \"FlowArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CoolingTowerFlowArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.SprayType\", \"SprayType\");\r\n            ifcPSE.PropertyName = \"SprayType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CoolingTowerSprayType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprayTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.CapacityControl\", \"CapacityControl\");\r\n            ifcPSE.PropertyName = \"CapacityControl\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CoolingTowerCapacityControl);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityControlCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.ControlStrategy\", \"ControlStrategy\");\r\n            ifcPSE.PropertyName = \"ControlStrategy\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CoolingTowerControlStrategy);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlStrategyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.NumberOfCells\", \"NumberOfCells\");\r\n            ifcPSE.PropertyName = \"NumberOfCells\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCellsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.BasinReserveVolume\", \"BasinReserveVolume\");\r\n            ifcPSE.PropertyName = \"BasinReserveVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BasinReserveVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.LiftElevationDifference\", \"LiftElevationDifference\");\r\n            ifcPSE.PropertyName = \"LiftElevationDifference\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiftElevationDifferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.WaterRequirement\", \"WaterRequirement\");\r\n            ifcPSE.PropertyName = \"WaterRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.CasingMaterial\", \"CasingMaterial\");\r\n            ifcPSE.PropertyName = \"CasingMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CasingMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.FillMaterial\", \"FillMaterial\");\r\n            ifcPSE.PropertyName = \"FillMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FillMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.AmbientDesignDryBulbTemperature\", \"AmbientDesignDryBulbTemperature\");\r\n            ifcPSE.PropertyName = \"AmbientDesignDryBulbTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AmbientDesignDryBulbTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.AmbientDesignWetBulbTemperature\", \"AmbientDesignWetBulbTemperature\");\r\n            ifcPSE.PropertyName = \"AmbientDesignWetBulbTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AmbientDesignWetBulbTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoolingTowerTypeCommon\"))\r\n         {\r\n            propertySetCoolingTowerTypeCommon.EntityTypes.Add(IFCEntityType.IfcCoolingTower);\r\n            propertySetCoolingTowerTypeCommon.ObjectType = \"IfcCoolingTower\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.NominalCapacity\", \"NominalCapacity\");\r\n            ifcPSE.PropertyName = \"NominalCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Capacity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.CircuitType\", \"CircuitType\");\r\n            ifcPSE.PropertyName = \"CircuitType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CoolingTowerCircuitType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Circuit Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CircuitTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.FlowArrangement\", \"FlowArrangement\");\r\n            ifcPSE.PropertyName = \"FlowArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CoolingTowerFlowArrangement);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flow Arrangement\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.SprayType\", \"SprayType\");\r\n            ifcPSE.PropertyName = \"SprayType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CoolingTowerSprayType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Spray Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprayTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.CapacityControl\", \"CapacityControl\");\r\n            ifcPSE.PropertyName = \"CapacityControl\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CoolingTowerCapacityControl);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Capacity Control\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityControlCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.ControlStrategy\", \"ControlStrategy\");\r\n            ifcPSE.PropertyName = \"ControlStrategy\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CoolingTowerControlStrategy);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Control Strategy\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlStrategyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.NumberOfCells\", \"NumberOfCells\");\r\n            ifcPSE.PropertyName = \"NumberOfCells\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Cells\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCellsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.BasinReserveVolume\", \"BasinReserveVolume\");\r\n            ifcPSE.PropertyName = \"BasinReserveVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Basin Reserve Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BasinReserveVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.LiftElevationDifference\", \"LiftElevationDifference\");\r\n            ifcPSE.PropertyName = \"LiftElevationDifference\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lift Elevation Difference\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiftElevationDifferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.WaterRequirement\", \"WaterRequirement\");\r\n            ifcPSE.PropertyName = \"WaterRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Requirement\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Operation Temperature Range\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.AmbientDesignDryBulbTemperature\", \"AmbientDesignDryBulbTemperature\");\r\n            ifcPSE.PropertyName = \"AmbientDesignDryBulbTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ambient Design Dry Bulb Temperature\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AmbientDesignDryBulbTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.AmbientDesignWetBulbTemperature\", \"AmbientDesignWetBulbTemperature\");\r\n            ifcPSE.PropertyName = \"AmbientDesignWetBulbTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ambient Design Wet Bulb Temperature\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AmbientDesignWetBulbTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoolingTowerTypeCommon\"))\r\n         {\r\n            propertySetCoolingTowerTypeCommon.EntityTypes.Add(IFCEntityType.IfcCoolingTower);\r\n            propertySetCoolingTowerTypeCommon.EntityTypes.Add(IFCEntityType.IfcCoolingTowerType);\r\n            propertySetCoolingTowerTypeCommon.ObjectType = \"IfcCoolingTower\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.NominalCapacity\", \"NominalCapacity\");\r\n            ifcPSE.PropertyName = \"NominalCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.CircuitType\", \"CircuitType\");\r\n            ifcPSE.PropertyName = \"CircuitType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CoolingTowerCircuitType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CircuitTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.FlowArrangement\", \"FlowArrangement\");\r\n            ifcPSE.PropertyName = \"FlowArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CoolingTowerFlowArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.SprayType\", \"SprayType\");\r\n            ifcPSE.PropertyName = \"SprayType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CoolingTowerSprayType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprayTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.CapacityControl\", \"CapacityControl\");\r\n            ifcPSE.PropertyName = \"CapacityControl\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CoolingTowerCapacityControl);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityControlCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.ControlStrategy\", \"ControlStrategy\");\r\n            ifcPSE.PropertyName = \"ControlStrategy\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CoolingTowerControlStrategy);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlStrategyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.NumberOfCells\", \"NumberOfCells\");\r\n            ifcPSE.PropertyName = \"NumberOfCells\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCellsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.BasinReserveVolume\", \"BasinReserveVolume\");\r\n            ifcPSE.PropertyName = \"BasinReserveVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BasinReserveVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.LiftElevationDifference\", \"LiftElevationDifference\");\r\n            ifcPSE.PropertyName = \"LiftElevationDifference\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiftElevationDifferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.WaterRequirement\", \"WaterRequirement\");\r\n            ifcPSE.PropertyName = \"WaterRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.AmbientDesignDryBulbTemperature\", \"AmbientDesignDryBulbTemperature\");\r\n            ifcPSE.PropertyName = \"AmbientDesignDryBulbTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AmbientDesignDryBulbTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoolingTowerTypeCommon.AmbientDesignWetBulbTemperature\", \"AmbientDesignWetBulbTemperature\");\r\n            ifcPSE.PropertyName = \"AmbientDesignWetBulbTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AmbientDesignWetBulbTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoolingTowerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCoolingTowerTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CourseApplicationConditions(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCourseApplicationConditions = new PropertySetDescription();\r\n         propertySetCourseApplicationConditions.Name = \"Pset_CourseApplicationConditions\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CourseApplicationConditions\"))\r\n         {\r\n            propertySetCourseApplicationConditions.EntityTypes.Add(IFCEntityType.IfcCourse);\r\n            propertySetCourseApplicationConditions.EntityTypes.Add(IFCEntityType.IfcCourseType);\r\n            propertySetCourseApplicationConditions.ObjectType = \"IfcCourse\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CourseApplicationConditions.ApplicationTemperature\", \"ApplicationTemperature\");\r\n            ifcPSE.PropertyName = \"ApplicationTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplicationTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCourseApplicationConditions.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CourseApplicationConditions.WeatherConditions\", \"WeatherConditions\");\r\n            ifcPSE.PropertyName = \"WeatherConditions\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeatherConditionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCourseApplicationConditions.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCourseApplicationConditions);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CourseCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCourseCommon = new PropertySetDescription();\r\n         propertySetCourseCommon.Name = \"Pset_CourseCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CourseCommon\"))\r\n         {\r\n            propertySetCourseCommon.EntityTypes.Add(IFCEntityType.IfcCourse);\r\n            propertySetCourseCommon.EntityTypes.Add(IFCEntityType.IfcCourseType);\r\n            propertySetCourseCommon.ObjectType = \"IfcCourse\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CourseCommon.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCourseCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CourseCommon.NominalThickness\", \"NominalThickness\");\r\n            ifcPSE.PropertyName = \"NominalThickness\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCourseCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CourseCommon.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCourseCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCourseCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CoveringCeiling(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCoveringCeiling = new PropertySetDescription();\r\n         propertySetCoveringCeiling.Name = \"Pset_CoveringCeiling\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoveringCeiling\"))\r\n         {\r\n            propertySetCoveringCeiling.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            propertySetCoveringCeiling.ObjectType = \"Ceiling\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCeiling.FragilityRating\", \"FragilityRating\");\r\n            ifcPSE.PropertyName = \"FragilityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FragilityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCeiling.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCeiling.Permeability\", \"Permeability\");\r\n            ifcPSE.PropertyName = \"Permeability\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PermeabilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCeiling.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCeiling.TileLength\", \"TileLength\");\r\n            ifcPSE.PropertyName = \"TileLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TileLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCeiling.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCeiling.TileWidth\", \"TileWidth\");\r\n            ifcPSE.PropertyName = \"TileWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TileWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCeiling.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoveringCeiling\"))\r\n         {\r\n            propertySetCoveringCeiling.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            propertySetCoveringCeiling.ObjectType = \"IfcCovering\";\r\n            propertySetCoveringCeiling.PredefinedType = \"CEILING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCeiling.FragilityRating\", \"FragilityRating\");\r\n            ifcPSE.PropertyName = \"FragilityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FragilityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCeiling.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCeiling.Permeability\", \"Permeability\");\r\n            ifcPSE.PropertyName = \"Permeability\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PermeabilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCeiling.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCeiling.TileLength\", \"TileLength\");\r\n            ifcPSE.PropertyName = \"TileLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TileLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCeiling.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCeiling.TileWidth\", \"TileWidth\");\r\n            ifcPSE.PropertyName = \"TileWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TileWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCeiling.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoveringCeiling\"))\r\n         {\r\n            propertySetCoveringCeiling.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            propertySetCoveringCeiling.ObjectType = \"IfcCovering\";\r\n            propertySetCoveringCeiling.PredefinedType = \"CEILING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCeiling.Permeability\", \"Permeability\");\r\n            ifcPSE.PropertyName = \"Permeability\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Durchlässigkeit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Permeability\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Perméabilité\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"渗透率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PermeabilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCeiling.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCeiling.TileLength\", \"TileLength\");\r\n            ifcPSE.PropertyName = \"TileLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Deckenplattenlänge\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tile Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Longueur des carreaux\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"面砖长度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TileLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCeiling.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCeiling.TileWidth\", \"TileWidth\");\r\n            ifcPSE.PropertyName = \"TileWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Deckenplattenbreite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tile Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Largeur des carreaux\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"面砖宽度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TileWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCeiling.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCoveringCeiling);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CoveringCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCoveringCommon = new PropertySetDescription();\r\n         propertySetCoveringCommon.Name = \"Pset_CoveringCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoveringCommon\"))\r\n         {\r\n            propertySetCoveringCommon.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.FlammabilityRating\", \"FlammabilityRating\");\r\n            ifcPSE.PropertyName = \"FlammabilityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlammabilityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.Combustible\", \"Combustible\");\r\n            ifcPSE.PropertyName = \"Combustible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.SurfaceSpreadOfFlame\", \"SurfaceSpreadOfFlame\");\r\n            ifcPSE.PropertyName = \"SurfaceSpreadOfFlame\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceSpreadOfFlameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.Fragility\", \"Fragility\");\r\n            ifcPSE.PropertyName = \"Fragility\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FragilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.Thickness\", \"Thickness\");\r\n            ifcPSE.PropertyName = \"Thickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.Finish\", \"Finish\");\r\n            ifcPSE.PropertyName = \"Finish\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoveringCommon\"))\r\n         {\r\n            propertySetCoveringCommon.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            propertySetCoveringCommon.EntityTypes.Add(IFCEntityType.IfcCoveringType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.FlammabilityRating\", \"FlammabilityRating\");\r\n            ifcPSE.PropertyName = \"FlammabilityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlammabilityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.FragilityRating\", \"FragilityRating\");\r\n            ifcPSE.PropertyName = \"FragilityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FragilityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.SurfaceSpreadOfFlame\", \"SurfaceSpreadOfFlame\");\r\n            ifcPSE.PropertyName = \"SurfaceSpreadOfFlame\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceSpreadOfFlameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.Combustible\", \"Combustible\");\r\n            ifcPSE.PropertyName = \"Combustible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.TotalThickness\", \"TotalThickness\");\r\n            ifcPSE.PropertyName = \"TotalThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.Finish\", \"Finish\");\r\n            ifcPSE.PropertyName = \"Finish\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoveringCommon\"))\r\n         {\r\n            propertySetCoveringCommon.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            propertySetCoveringCommon.ObjectType = \"IfcCovering\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bauteiltyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Référence\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Schallschutzklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Acoustic Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Isolation acoustique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"遮音等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"隔音等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.FlammabilityRating\", \"FlammabilityRating\");\r\n            ifcPSE.PropertyName = \"FlammabilityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Entflammbarkeitsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flammability Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Inflammabilité\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"可燃性等級\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlammabilityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.FragilityRating\", \"FragilityRating\");\r\n            ifcPSE.PropertyName = \"FragilityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Fragilitätsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fragility Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Fragilité\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"脆弱性等級\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FragilityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.Combustible\", \"Combustible\");\r\n            ifcPSE.PropertyName = \"Combustible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Brennbares Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Combustible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Combustible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"可燃性区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否可燃\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.SurfaceSpreadOfFlame\", \"SurfaceSpreadOfFlame\");\r\n            ifcPSE.PropertyName = \"SurfaceSpreadOfFlame\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Brandverhalten\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Surface Spread Of Flame\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Propagation des flammes en surface\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"火炎表面伝播性\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceSpreadOfFlameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.Finish\", \"Finish\");\r\n            ifcPSE.PropertyName = \"Finish\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Oberflächengüte\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Finish\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Finition\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"仕上げ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"表面处理\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Außenbauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Est extérieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否外部构件\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"U-Wert\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Transmission thermique surfacique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱貫流率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"导热系数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Feuerwiderstandsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Résistance au feu\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐火等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"防火等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoveringCommon\"))\r\n         {\r\n            propertySetCoveringCommon.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            propertySetCoveringCommon.EntityTypes.Add(IFCEntityType.IfcCoveringType);\r\n            propertySetCoveringCommon.ObjectType = \"IfcCovering\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.FlammabilityRating\", \"FlammabilityRating\");\r\n            ifcPSE.PropertyName = \"FlammabilityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlammabilityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.FragilityRating\", \"FragilityRating\");\r\n            ifcPSE.PropertyName = \"FragilityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FragilityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.Combustible\", \"Combustible\");\r\n            ifcPSE.PropertyName = \"Combustible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.SurfaceSpreadOfFlame\", \"SurfaceSpreadOfFlame\");\r\n            ifcPSE.PropertyName = \"SurfaceSpreadOfFlame\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceSpreadOfFlameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.Finish\", \"Finish\");\r\n            ifcPSE.PropertyName = \"Finish\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCoveringCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CoveringFlooring(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCoveringFlooring = new PropertySetDescription();\r\n         propertySetCoveringFlooring.Name = \"Pset_CoveringFlooring\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoveringFlooring\"))\r\n         {\r\n            propertySetCoveringFlooring.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            propertySetCoveringFlooring.ObjectType = \"Flooring\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringFlooring.HasNonSkidSurface\", \"HasNonSkidSurface\");\r\n            ifcPSE.PropertyName = \"HasNonSkidSurface\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasNonSkidSurfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringFlooring.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoveringFlooring\"))\r\n         {\r\n            propertySetCoveringFlooring.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            propertySetCoveringFlooring.ObjectType = \"IfcCovering\";\r\n            propertySetCoveringFlooring.PredefinedType = \"FLOORING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringFlooring.HasNonSkidSurface\", \"HasNonSkidSurface\");\r\n            ifcPSE.PropertyName = \"HasNonSkidSurface\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasNonSkidSurfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringFlooring.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringFlooring.HasAntiStaticSurface\", \"HasAntiStaticSurface\");\r\n            ifcPSE.PropertyName = \"HasAntiStaticSurface\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasAntiStaticSurfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringFlooring.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoveringFlooring\"))\r\n         {\r\n            propertySetCoveringFlooring.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            propertySetCoveringFlooring.ObjectType = \"IfcCovering\";\r\n            propertySetCoveringFlooring.PredefinedType = \"FLOORING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringFlooring.HasNonSkidSurface\", \"HasNonSkidSurface\");\r\n            ifcPSE.PropertyName = \"HasNonSkidSurface\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nichtrutschende Oberfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Non Skid Surface\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Anti dérapant\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"表面是否防滑\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasNonSkidSurfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringFlooring.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringFlooring.HasAntiStaticSurface\", \"HasAntiStaticSurface\");\r\n            ifcPSE.PropertyName = \"HasAntiStaticSurface\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Antistatische Oberfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Anti Static Surface\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Anti statique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"表面是否防静电\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasAntiStaticSurfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringFlooring.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoveringFlooring\"))\r\n         {\r\n            propertySetCoveringFlooring.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            propertySetCoveringFlooring.EntityTypes.Add(IFCEntityType.IfcCoveringType);\r\n            propertySetCoveringFlooring.ObjectType = \"IfcCovering\";\r\n            propertySetCoveringFlooring.PredefinedType = \"FLOORING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringFlooring.HasNonSkidSurface\", \"HasNonSkidSurface\");\r\n            ifcPSE.PropertyName = \"HasNonSkidSurface\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasNonSkidSurfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringFlooring.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringFlooring.HasAntiStaticSurface\", \"HasAntiStaticSurface\");\r\n            ifcPSE.PropertyName = \"HasAntiStaticSurface\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasAntiStaticSurfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringFlooring.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCoveringFlooring);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CoveringTypeMembrane(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCoveringTypeMembrane = new PropertySetDescription();\r\n         propertySetCoveringTypeMembrane.Name = \"Pset_CoveringTypeMembrane\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CoveringTypeMembrane\"))\r\n         {\r\n            propertySetCoveringTypeMembrane.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            propertySetCoveringTypeMembrane.EntityTypes.Add(IFCEntityType.IfcCoveringType);\r\n            propertySetCoveringTypeMembrane.ObjectType = \"IfcCovering\";\r\n            propertySetCoveringTypeMembrane.PredefinedType = \"MEMBRANE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringTypeMembrane.NominalInstallationDepth\", \"NominalInstallationDepth\");\r\n            ifcPSE.PropertyName = \"NominalInstallationDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalInstallationDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringTypeMembrane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CoveringTypeMembrane.NominalTransverseInclination\", \"NominalTransverseInclination\");\r\n            ifcPSE.PropertyName = \"NominalTransverseInclination\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalTransverseInclinationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCoveringTypeMembrane.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCoveringTypeMembrane);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CurrentInstrumentTransformer(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCurrentInstrumentTransformer = new PropertySetDescription();\r\n         propertySetCurrentInstrumentTransformer.Name = \"Pset_CurrentInstrumentTransformer\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CurrentInstrumentTransformer\"))\r\n         {\r\n            propertySetCurrentInstrumentTransformer.EntityTypes.Add(IFCEntityType.IfcFlowInstrument);\r\n            propertySetCurrentInstrumentTransformer.EntityTypes.Add(IFCEntityType.IfcFlowInstrument);\r\n            propertySetCurrentInstrumentTransformer.EntityTypes.Add(IFCEntityType.IfcFlowInstrumentType);\r\n            propertySetCurrentInstrumentTransformer.EntityTypes.Add(IFCEntityType.IfcFlowInstrumentType);\r\n            propertySetCurrentInstrumentTransformer.ObjectType = \"IfcFlowInstrument\";\r\n            propertySetCurrentInstrumentTransformer.PredefinedType = \"COMBINED\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurrentInstrumentTransformer.AccuracyClass\", \"AccuracyClass\");\r\n            ifcPSE.PropertyName = \"AccuracyClass\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurrentInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurrentInstrumentTransformer.AccuracyGrade\", \"AccuracyGrade\");\r\n            ifcPSE.PropertyName = \"AccuracyGrade\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyGradeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurrentInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurrentInstrumentTransformer.RatedVoltage\", \"RatedVoltage\");\r\n            ifcPSE.PropertyName = \"RatedVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurrentInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurrentInstrumentTransformer.NominalCurrent\", \"NominalCurrent\");\r\n            ifcPSE.PropertyName = \"NominalCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurrentInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurrentInstrumentTransformer.NominalPower\", \"NominalPower\");\r\n            ifcPSE.PropertyName = \"NominalPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurrentInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurrentInstrumentTransformer.NumberOfPhases\", \"NumberOfPhases\");\r\n            ifcPSE.PropertyName = \"NumberOfPhases\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPhasesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurrentInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurrentInstrumentTransformer.PrimaryFrequency\", \"PrimaryFrequency\");\r\n            ifcPSE.PropertyName = \"PrimaryFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurrentInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurrentInstrumentTransformer.PrimaryCurrent\", \"PrimaryCurrent\");\r\n            ifcPSE.PropertyName = \"PrimaryCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurrentInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurrentInstrumentTransformer.SecondaryFrequency\", \"SecondaryFrequency\");\r\n            ifcPSE.PropertyName = \"SecondaryFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurrentInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurrentInstrumentTransformer.SecondaryCurrent\", \"SecondaryCurrent\");\r\n            ifcPSE.PropertyName = \"SecondaryCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurrentInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCurrentInstrumentTransformer);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_CurtainWallCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetCurtainWallCommon = new PropertySetDescription();\r\n         propertySetCurtainWallCommon.Name = \"Pset_CurtainWallCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CurtainWallCommon\"))\r\n         {\r\n            propertySetCurtainWallCommon.EntityTypes.Add(IFCEntityType.IfcCurtainWall);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.Combustible\", \"Combustible\");\r\n            ifcPSE.PropertyName = \"Combustible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.SurfaceSpreadOfFlame\", \"SurfaceSpreadOfFlame\");\r\n            ifcPSE.PropertyName = \"SurfaceSpreadOfFlame\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceSpreadOfFlameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CurtainWallCommon\"))\r\n         {\r\n            propertySetCurtainWallCommon.EntityTypes.Add(IFCEntityType.IfcCurtainWall);\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.Combustible\", \"Combustible\");\r\n            ifcPSE.PropertyName = \"Combustible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.SurfaceSpreadOfFlame\", \"SurfaceSpreadOfFlame\");\r\n            ifcPSE.PropertyName = \"SurfaceSpreadOfFlame\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceSpreadOfFlameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CurtainWallCommon\"))\r\n         {\r\n            propertySetCurtainWallCommon.EntityTypes.Add(IFCEntityType.IfcCurtainWall);\r\n            propertySetCurtainWallCommon.ObjectType = \"IfcCurtainWall\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bauteiltyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Schallschutzklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Acoustic Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"IsolationAcoustique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"遮音等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"隔音等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Feuerwiderstandsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ResistanceAuFeu\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐火等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"防火等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.Combustible\", \"Combustible\");\r\n            ifcPSE.PropertyName = \"Combustible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Brennbares Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Combustible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Combustible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"可燃性区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否可燃\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.SurfaceSpreadOfFlame\", \"SurfaceSpreadOfFlame\");\r\n            ifcPSE.PropertyName = \"SurfaceSpreadOfFlame\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Brandverhalten\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Surface Spread Of Flame\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"SurfacePropagationFlamme\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"火炎伝播性\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceSpreadOfFlameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"U-Wert\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TransmissionThermique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱貫流率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"导热系数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Außenbauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EstExterieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否外部构件\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_CurtainWallCommon\"))\r\n         {\r\n            propertySetCurtainWallCommon.EntityTypes.Add(IFCEntityType.IfcCurtainWall);\r\n            propertySetCurtainWallCommon.EntityTypes.Add(IFCEntityType.IfcCurtainWallType);\r\n            propertySetCurtainWallCommon.ObjectType = \"IfcCurtainWall\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.Combustible\", \"Combustible\");\r\n            ifcPSE.PropertyName = \"Combustible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.SurfaceSpreadOfFlame\", \"SurfaceSpreadOfFlame\");\r\n            ifcPSE.PropertyName = \"SurfaceSpreadOfFlame\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceSpreadOfFlameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_CurtainWallCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetCurtainWallCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetCurtainWallCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DamperOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDamperOccurrence = new PropertySetDescription();\r\n         propertySetDamperOccurrence.Name = \"Pset_DamperOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperOccurrence\"))\r\n         {\r\n            propertySetDamperOccurrence.EntityTypes.Add(IFCEntityType.IfcDamper);\r\n            propertySetDamperOccurrence.ObjectType = \"IfcDamper\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperOccurrence.SizingMethod\", \"SizingMethod\");\r\n            ifcPSE.PropertyName = \"SizingMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_DamperSizingMethod);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sizing Method\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SizingMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperOccurrence\"))\r\n         {\r\n            propertySetDamperOccurrence.EntityTypes.Add(IFCEntityType.IfcDamper);\r\n            propertySetDamperOccurrence.ObjectType = \"IfcDamper\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperOccurrence.SizingMethod\", \"SizingMethod\");\r\n            ifcPSE.PropertyName = \"SizingMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DamperSizingMethod);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SizingMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDamperOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DamperPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDamperPHistory = new PropertySetDescription();\r\n         propertySetDamperPHistory.Name = \"Pset_DamperPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperPHistory\"))\r\n         {\r\n            propertySetDamperPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.AirFlowRate\", \"AirFlowRate\");\r\n            ifcPSE.PropertyName = \"AirFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.Leakage\", \"Leakage\");\r\n            ifcPSE.PropertyName = \"Leakage\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.PressureDrop\", \"PressureDrop\");\r\n            ifcPSE.PropertyName = \"PressureDrop\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.BladePositionAngle\", \"BladePositionAngle\");\r\n            ifcPSE.PropertyName = \"BladePositionAngle\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladePositionAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.DamperPosition\", \"DamperPosition\");\r\n            ifcPSE.PropertyName = \"DamperPosition\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DamperPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.PressureLossCoefficient\", \"PressureLossCoefficient\");\r\n            ifcPSE.PropertyName = \"PressureLossCoefficient\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureLossCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperPHistory\"))\r\n         {\r\n            propertySetDamperPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.AirFlowRate\", \"AirFlowRate\");\r\n            ifcPSE.PropertyName = \"AirFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.Leakage\", \"Leakage\");\r\n            ifcPSE.PropertyName = \"Leakage\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.PressureDrop\", \"PressureDrop\");\r\n            ifcPSE.PropertyName = \"PressureDrop\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.BladePositionAngle\", \"BladePositionAngle\");\r\n            ifcPSE.PropertyName = \"BladePositionAngle\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladePositionAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.DamperPosition\", \"DamperPosition\");\r\n            ifcPSE.PropertyName = \"DamperPosition\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DamperPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.PressureLossCoefficient\", \"PressureLossCoefficient\");\r\n            ifcPSE.PropertyName = \"PressureLossCoefficient\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureLossCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperPHistory\"))\r\n         {\r\n            propertySetDamperPHistory.EntityTypes.Add(IFCEntityType.IfcDamper);\r\n            propertySetDamperPHistory.ObjectType = \"IfcDamper\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.AirFlowRate\", \"AirFlowRate\");\r\n            ifcPSE.PropertyName = \"AirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Flow Rate\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.Leakage\", \"Leakage\");\r\n            ifcPSE.PropertyName = \"Leakage\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Leakage\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.PressureDrop\", \"PressureDrop\");\r\n            ifcPSE.PropertyName = \"PressureDrop\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure Drop\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.BladePositionAngle\", \"BladePositionAngle\");\r\n            ifcPSE.PropertyName = \"BladePositionAngle\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Blade Position Angle\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladePositionAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.DamperPosition\", \"DamperPosition\");\r\n            ifcPSE.PropertyName = \"DamperPosition\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Damper Position\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DamperPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.PressureLossCoefficient\", \"PressureLossCoefficient\");\r\n            ifcPSE.PropertyName = \"PressureLossCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure Loss Coefficient\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureLossCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperPHistory\"))\r\n         {\r\n            propertySetDamperPHistory.EntityTypes.Add(IFCEntityType.IfcDamper);\r\n            propertySetDamperPHistory.ObjectType = \"IfcDamper\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.AirFlowRate\", \"AirFlowRate\");\r\n            ifcPSE.PropertyName = \"AirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.Leakage\", \"Leakage\");\r\n            ifcPSE.PropertyName = \"Leakage\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.PressureDrop\", \"PressureDrop\");\r\n            ifcPSE.PropertyName = \"PressureDrop\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.BladePositionAngle\", \"BladePositionAngle\");\r\n            ifcPSE.PropertyName = \"BladePositionAngle\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladePositionAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.DamperPosition\", \"DamperPosition\");\r\n            ifcPSE.PropertyName = \"DamperPosition\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DamperPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperPHistory.PressureLossCoefficient\", \"PressureLossCoefficient\");\r\n            ifcPSE.PropertyName = \"PressureLossCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureLossCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDamperPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DamperTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDamperTypeCommon = new PropertySetDescription();\r\n         propertySetDamperTypeCommon.Name = \"Pset_DamperTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeCommon\"))\r\n         {\r\n            propertySetDamperTypeCommon.EntityTypes.Add(IFCEntityType.IfcDamperType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.Operation\", \"Operation\");\r\n            ifcPSE.PropertyName = \"Operation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_DamperOperation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.Orientation\", \"Orientation\");\r\n            ifcPSE.PropertyName = \"Orientation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_DamperOrientation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OrientationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.BladeMaterial\", \"BladeMaterial\");\r\n            ifcPSE.PropertyName = \"BladeMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.BladeThickness\", \"BladeThickness\");\r\n            ifcPSE.PropertyName = \"BladeThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.SealMaterial\", \"SealMaterial\");\r\n            ifcPSE.PropertyName = \"SealMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SealMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.BladeAction\", \"BladeAction\");\r\n            ifcPSE.PropertyName = \"BladeAction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_DamperBladeAction);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeActionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.BladeShape\", \"BladeShape\");\r\n            ifcPSE.PropertyName = \"BladeShape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_DamperBladeShape);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.BladeEdge\", \"BladeEdge\");\r\n            ifcPSE.PropertyName = \"BladeEdge\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_DamperBladeEdge);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeEdgeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.NumberofBlades\", \"NumberofBlades\");\r\n            ifcPSE.PropertyName = \"NumberofBlades\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberofBladesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.FaceArea\", \"FaceArea\");\r\n            ifcPSE.PropertyName = \"FaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.MaximumAirFlowRate\", \"MaximumAirFlowRate\");\r\n            ifcPSE.PropertyName = \"MaximumAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.MaximumWorkingPressure\", \"MaximumWorkingPressure\");\r\n            ifcPSE.PropertyName = \"MaximumWorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumWorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.TemperatureRating\", \"TemperatureRating\");\r\n            ifcPSE.PropertyName = \"TemperatureRating\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.TorqueRange\", \"TorqueRange\");\r\n            ifcPSE.PropertyName = \"TorqueRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Torque;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorqueRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.NominalAirFlowRate\", \"NominalAirFlowRate\");\r\n            ifcPSE.PropertyName = \"NominalAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.OpenPressureDrop\", \"OpenPressureDrop\");\r\n            ifcPSE.PropertyName = \"OpenPressureDrop\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OpenPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.LeakageFullyClosed\", \"LeakageFullyClosed\");\r\n            ifcPSE.PropertyName = \"LeakageFullyClosed\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageFullyClosedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.LossCoefficentCurve\", \"LossCoefficentCurve\");\r\n            ifcPSE.PropertyName = \"LossCoefficentCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LossCoefficentCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.LeakageCurve\", \"LeakageCurve\");\r\n            ifcPSE.PropertyName = \"LeakageCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.RegeneratedSoundCurve\", \"RegeneratedSoundCurve\");\r\n            ifcPSE.PropertyName = \"RegeneratedSoundCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RegeneratedSoundCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.FrameType\", \"FrameType\");\r\n            ifcPSE.PropertyName = \"FrameType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.FrameDepth\", \"FrameDepth\");\r\n            ifcPSE.PropertyName = \"FrameDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.FrameMaterial\", \"FrameMaterial\");\r\n            ifcPSE.PropertyName = \"FrameMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.FrameThickness\", \"FrameThickness\");\r\n            ifcPSE.PropertyName = \"FrameThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.CloseOffRating\", \"CloseOffRating\");\r\n            ifcPSE.PropertyName = \"CloseOffRating\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CloseOffRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeCommon\"))\r\n         {\r\n            propertySetDamperTypeCommon.EntityTypes.Add(IFCEntityType.IfcDamperType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.Operation\", \"Operation\");\r\n            ifcPSE.PropertyName = \"Operation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_DamperOperation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.Orientation\", \"Orientation\");\r\n            ifcPSE.PropertyName = \"Orientation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_DamperOrientation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OrientationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.BladeMaterial\", \"BladeMaterial\");\r\n            ifcPSE.PropertyName = \"BladeMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.BladeThickness\", \"BladeThickness\");\r\n            ifcPSE.PropertyName = \"BladeThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.SealMaterial\", \"SealMaterial\");\r\n            ifcPSE.PropertyName = \"SealMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SealMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.BladeAction\", \"BladeAction\");\r\n            ifcPSE.PropertyName = \"BladeAction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_DamperBladeAction);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeActionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.BladeShape\", \"BladeShape\");\r\n            ifcPSE.PropertyName = \"BladeShape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_DamperBladeShape);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.BladeEdge\", \"BladeEdge\");\r\n            ifcPSE.PropertyName = \"BladeEdge\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_DamperBladeEdge);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeEdgeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.NumberofBlades\", \"NumberofBlades\");\r\n            ifcPSE.PropertyName = \"NumberofBlades\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberofBladesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.FaceArea\", \"FaceArea\");\r\n            ifcPSE.PropertyName = \"FaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.MaximumAirFlowRate\", \"MaximumAirFlowRate\");\r\n            ifcPSE.PropertyName = \"MaximumAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.MaximumWorkingPressure\", \"MaximumWorkingPressure\");\r\n            ifcPSE.PropertyName = \"MaximumWorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumWorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.TemperatureRating\", \"TemperatureRating\");\r\n            ifcPSE.PropertyName = \"TemperatureRating\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.TorqueRange\", \"TorqueRange\");\r\n            ifcPSE.PropertyName = \"TorqueRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Torque;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorqueRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.NominalAirFlowRate\", \"NominalAirFlowRate\");\r\n            ifcPSE.PropertyName = \"NominalAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.OpenPressureDrop\", \"OpenPressureDrop\");\r\n            ifcPSE.PropertyName = \"OpenPressureDrop\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OpenPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.LeakageFullyClosed\", \"LeakageFullyClosed\");\r\n            ifcPSE.PropertyName = \"LeakageFullyClosed\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageFullyClosedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.LossCoefficentCurve\", \"LossCoefficentCurve\");\r\n            ifcPSE.PropertyName = \"LossCoefficentCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LossCoefficentCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.LeakageCurve\", \"LeakageCurve\");\r\n            ifcPSE.PropertyName = \"LeakageCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.RegeneratedSoundCurve\", \"RegeneratedSoundCurve\");\r\n            ifcPSE.PropertyName = \"RegeneratedSoundCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RegeneratedSoundCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.FrameType\", \"FrameType\");\r\n            ifcPSE.PropertyName = \"FrameType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.FrameDepth\", \"FrameDepth\");\r\n            ifcPSE.PropertyName = \"FrameDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.FrameMaterial\", \"FrameMaterial\");\r\n            ifcPSE.PropertyName = \"FrameMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.FrameThickness\", \"FrameThickness\");\r\n            ifcPSE.PropertyName = \"FrameThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.CloseOffRating\", \"CloseOffRating\");\r\n            ifcPSE.PropertyName = \"CloseOffRating\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CloseOffRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeCommon\"))\r\n         {\r\n            propertySetDamperTypeCommon.EntityTypes.Add(IFCEntityType.IfcDamper);\r\n            propertySetDamperTypeCommon.ObjectType = \"IfcDamper\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.Operation\", \"Operation\");\r\n            ifcPSE.PropertyName = \"Operation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_DamperOperation);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Operation\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.Orientation\", \"Orientation\");\r\n            ifcPSE.PropertyName = \"Orientation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_DamperOrientation);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Orientation\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OrientationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.BladeThickness\", \"BladeThickness\");\r\n            ifcPSE.PropertyName = \"BladeThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Blade Thickness\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.BladeAction\", \"BladeAction\");\r\n            ifcPSE.PropertyName = \"BladeAction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_DamperBladeAction);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Blade Action\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeActionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.BladeShape\", \"BladeShape\");\r\n            ifcPSE.PropertyName = \"BladeShape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_DamperBladeShape);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Blade Shape\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.BladeEdge\", \"BladeEdge\");\r\n            ifcPSE.PropertyName = \"BladeEdge\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_DamperBladeEdge);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Blade Edge\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeEdgeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.NumberofBlades\", \"NumberofBlades\");\r\n            ifcPSE.PropertyName = \"NumberofBlades\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Numberof Blades\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberofBladesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.FaceArea\", \"FaceArea\");\r\n            ifcPSE.PropertyName = \"FaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Face Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.MaximumAirFlowRate\", \"MaximumAirFlowRate\");\r\n            ifcPSE.PropertyName = \"MaximumAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Air Flow Rate\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature Range\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.MaximumWorkingPressure\", \"MaximumWorkingPressure\");\r\n            ifcPSE.PropertyName = \"MaximumWorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Working Pressure\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumWorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.TemperatureRating\", \"TemperatureRating\");\r\n            ifcPSE.PropertyName = \"TemperatureRating\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature Rating\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.NominalAirFlowRate\", \"NominalAirFlowRate\");\r\n            ifcPSE.PropertyName = \"NominalAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Air Flow Rate\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.OpenPressureDrop\", \"OpenPressureDrop\");\r\n            ifcPSE.PropertyName = \"OpenPressureDrop\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Open Pressure Drop\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OpenPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.LeakageFullyClosed\", \"LeakageFullyClosed\");\r\n            ifcPSE.PropertyName = \"LeakageFullyClosed\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Leakage Fully Closed\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageFullyClosedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.LossCoefficentCurve\", \"LossCoefficentCurve\");\r\n            ifcPSE.PropertyName = \"LossCoefficentCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Loss Coefficent Curve\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LossCoefficentCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.LeakageCurve\", \"LeakageCurve\");\r\n            ifcPSE.PropertyName = \"LeakageCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Leakage Curve\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.RegeneratedSoundCurve\", \"RegeneratedSoundCurve\");\r\n            ifcPSE.PropertyName = \"RegeneratedSoundCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.SoundPressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Regenerated Sound Curve\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RegeneratedSoundCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.FrameType\", \"FrameType\");\r\n            ifcPSE.PropertyName = \"FrameType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Frame Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.FrameDepth\", \"FrameDepth\");\r\n            ifcPSE.PropertyName = \"FrameDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Frame Depth\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.FrameThickness\", \"FrameThickness\");\r\n            ifcPSE.PropertyName = \"FrameThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Frame Thickness\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.CloseOffRating\", \"CloseOffRating\");\r\n            ifcPSE.PropertyName = \"CloseOffRating\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Close Off Rating\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CloseOffRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeCommon\"))\r\n         {\r\n            propertySetDamperTypeCommon.EntityTypes.Add(IFCEntityType.IfcDamper);\r\n            propertySetDamperTypeCommon.EntityTypes.Add(IFCEntityType.IfcDamperType);\r\n            propertySetDamperTypeCommon.ObjectType = \"IfcDamper\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.Operation\", \"Operation\");\r\n            ifcPSE.PropertyName = \"Operation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DamperOperation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.Orientation\", \"Orientation\");\r\n            ifcPSE.PropertyName = \"Orientation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DamperOrientation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OrientationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.BladeThickness\", \"BladeThickness\");\r\n            ifcPSE.PropertyName = \"BladeThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.BladeAction\", \"BladeAction\");\r\n            ifcPSE.PropertyName = \"BladeAction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DamperBladeAction);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeActionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.BladeShape\", \"BladeShape\");\r\n            ifcPSE.PropertyName = \"BladeShape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DamperBladeShape);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.BladeEdge\", \"BladeEdge\");\r\n            ifcPSE.PropertyName = \"BladeEdge\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DamperBladeEdge);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeEdgeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.NumberofBlades\", \"NumberofBlades\");\r\n            ifcPSE.PropertyName = \"NumberofBlades\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberofBladesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.FaceArea\", \"FaceArea\");\r\n            ifcPSE.PropertyName = \"FaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.MaximumAirFlowRate\", \"MaximumAirFlowRate\");\r\n            ifcPSE.PropertyName = \"MaximumAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.MaximumWorkingPressure\", \"MaximumWorkingPressure\");\r\n            ifcPSE.PropertyName = \"MaximumWorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumWorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.TemperatureRating\", \"TemperatureRating\");\r\n            ifcPSE.PropertyName = \"TemperatureRating\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.NominalAirFlowRate\", \"NominalAirFlowRate\");\r\n            ifcPSE.PropertyName = \"NominalAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.OpenPressureDrop\", \"OpenPressureDrop\");\r\n            ifcPSE.PropertyName = \"OpenPressureDrop\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OpenPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.LeakageFullyClosed\", \"LeakageFullyClosed\");\r\n            ifcPSE.PropertyName = \"LeakageFullyClosed\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageFullyClosedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.LossCoefficentCurve\", \"LossCoefficentCurve\");\r\n            ifcPSE.PropertyName = \"LossCoefficentCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LossCoefficentCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.LeakageCurve\", \"LeakageCurve\");\r\n            ifcPSE.PropertyName = \"LeakageCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.RegeneratedSoundCurve\", \"RegeneratedSoundCurve\");\r\n            ifcPSE.PropertyName = \"RegeneratedSoundCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.SoundPressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RegeneratedSoundCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.FrameType\", \"FrameType\");\r\n            ifcPSE.PropertyName = \"FrameType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.FrameDepth\", \"FrameDepth\");\r\n            ifcPSE.PropertyName = \"FrameDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.FrameThickness\", \"FrameThickness\");\r\n            ifcPSE.PropertyName = \"FrameThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeCommon.CloseOffRating\", \"CloseOffRating\");\r\n            ifcPSE.PropertyName = \"CloseOffRating\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CloseOffRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDamperTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DamperTypeControlDamper(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDamperTypeControlDamper = new PropertySetDescription();\r\n         propertySetDamperTypeControlDamper.Name = \"Pset_DamperTypeControlDamper\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeControlDamper\"))\r\n         {\r\n            propertySetDamperTypeControlDamper.EntityTypes.Add(IFCEntityType.IfcDamperType);\r\n            propertySetDamperTypeControlDamper.ObjectType = \"IfcDamperType\";\r\n            propertySetDamperTypeControlDamper.PredefinedType = \"CONTROLDAMPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeControlDamper.TorqueRange\", \"TorqueRange\");\r\n            ifcPSE.PropertyName = \"TorqueRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Torque;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorqueRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeControlDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeControlDamper.ControlDamperOperation\", \"ControlDamperOperation\");\r\n            ifcPSE.PropertyName = \"ControlDamperOperation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_ControlDamperOperation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlDamperOperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeControlDamper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeControlDamper\"))\r\n         {\r\n            propertySetDamperTypeControlDamper.EntityTypes.Add(IFCEntityType.IfcDamperType);\r\n            propertySetDamperTypeControlDamper.ObjectType = \"IfcDamperType\";\r\n            propertySetDamperTypeControlDamper.PredefinedType = \"CONTROLDAMPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeControlDamper.TorqueRange\", \"TorqueRange\");\r\n            ifcPSE.PropertyName = \"TorqueRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Torque;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorqueRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeControlDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeControlDamper.ControlDamperOperation\", \"ControlDamperOperation\");\r\n            ifcPSE.PropertyName = \"ControlDamperOperation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ControlDamperOperation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlDamperOperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeControlDamper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeControlDamper\"))\r\n         {\r\n            propertySetDamperTypeControlDamper.EntityTypes.Add(IFCEntityType.IfcDamper);\r\n            propertySetDamperTypeControlDamper.ObjectType = \"IfcDamper\";\r\n            propertySetDamperTypeControlDamper.PredefinedType = \"CONTROLDAMPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeControlDamper.TorqueRange\", \"TorqueRange\");\r\n            ifcPSE.PropertyName = \"TorqueRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Torque;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Torque Range\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorqueRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeControlDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeControlDamper.ControlDamperOperation\", \"ControlDamperOperation\");\r\n            ifcPSE.PropertyName = \"ControlDamperOperation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ControlDamperOperation);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Control Damper Operation\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlDamperOperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeControlDamper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeControlDamper\"))\r\n         {\r\n            propertySetDamperTypeControlDamper.EntityTypes.Add(IFCEntityType.IfcDamper);\r\n            propertySetDamperTypeControlDamper.EntityTypes.Add(IFCEntityType.IfcDamperType);\r\n            propertySetDamperTypeControlDamper.ObjectType = \"IfcDamper\";\r\n            propertySetDamperTypeControlDamper.PredefinedType = \"CONTROLDAMPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeControlDamper.TorqueRange\", \"TorqueRange\");\r\n            ifcPSE.PropertyName = \"TorqueRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Torque;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorqueRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeControlDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeControlDamper.ControlDamperOperation\", \"ControlDamperOperation\");\r\n            ifcPSE.PropertyName = \"ControlDamperOperation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ControlDamperOperation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlDamperOperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeControlDamper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDamperTypeControlDamper);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DamperTypeFireDamper(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDamperTypeFireDamper = new PropertySetDescription();\r\n         propertySetDamperTypeFireDamper.Name = \"Pset_DamperTypeFireDamper\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeFireDamper\"))\r\n         {\r\n            propertySetDamperTypeFireDamper.EntityTypes.Add(IFCEntityType.IfcDamperType);\r\n            propertySetDamperTypeFireDamper.ObjectType = \"IfcDamperType\";\r\n            propertySetDamperTypeFireDamper.PredefinedType = \"FIREDAMPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireDamper.ActuationType\", \"ActuationType\");\r\n            ifcPSE.PropertyName = \"ActuationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FireDamperActuationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActuationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireDamper.ClosureRatingEnum\", \"ClosureRatingEnum\");\r\n            ifcPSE.PropertyName = \"ClosureRatingEnum\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FireDamperClosureRating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClosureRatingEnumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireDamper.FireResistanceRating\", \"FireResistanceRating\");\r\n            ifcPSE.PropertyName = \"FireResistanceRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireResistanceRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireDamper.FusibleLinkTemperature\", \"FusibleLinkTemperature\");\r\n            ifcPSE.PropertyName = \"FusibleLinkTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FusibleLinkTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireDamper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeFireDamper\"))\r\n         {\r\n            propertySetDamperTypeFireDamper.EntityTypes.Add(IFCEntityType.IfcDamperType);\r\n            propertySetDamperTypeFireDamper.ObjectType = \"IfcDamperType\";\r\n            propertySetDamperTypeFireDamper.PredefinedType = \"FIREDAMPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireDamper.ActuationType\", \"ActuationType\");\r\n            ifcPSE.PropertyName = \"ActuationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FireDamperActuationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActuationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireDamper.ClosureRatingEnum\", \"ClosureRatingEnum\");\r\n            ifcPSE.PropertyName = \"ClosureRatingEnum\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FireDamperClosureRating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClosureRatingEnumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireDamper.FireResistanceRating\", \"FireResistanceRating\");\r\n            ifcPSE.PropertyName = \"FireResistanceRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireResistanceRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireDamper.FusibleLinkTemperature\", \"FusibleLinkTemperature\");\r\n            ifcPSE.PropertyName = \"FusibleLinkTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FusibleLinkTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireDamper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeFireDamper\"))\r\n         {\r\n            propertySetDamperTypeFireDamper.EntityTypes.Add(IFCEntityType.IfcDamper);\r\n            propertySetDamperTypeFireDamper.ObjectType = \"IfcDamper\";\r\n            propertySetDamperTypeFireDamper.PredefinedType = \"FIREDAMPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireDamper.ActuationType\", \"ActuationType\");\r\n            ifcPSE.PropertyName = \"ActuationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FireDamperActuationType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Actuation Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActuationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireDamper.ClosureRatingEnum\", \"ClosureRatingEnum\");\r\n            ifcPSE.PropertyName = \"ClosureRatingEnum\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FireDamperClosureRating);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Closure Rating Enum\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClosureRatingEnumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireDamper.FireResistanceRating\", \"FireResistanceRating\");\r\n            ifcPSE.PropertyName = \"FireResistanceRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Resistance Rating\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireResistanceRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireDamper.FusibleLinkTemperature\", \"FusibleLinkTemperature\");\r\n            ifcPSE.PropertyName = \"FusibleLinkTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fusible Link Temperature\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FusibleLinkTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireDamper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeFireDamper\"))\r\n         {\r\n            propertySetDamperTypeFireDamper.EntityTypes.Add(IFCEntityType.IfcDamper);\r\n            propertySetDamperTypeFireDamper.EntityTypes.Add(IFCEntityType.IfcDamperType);\r\n            propertySetDamperTypeFireDamper.ObjectType = \"IfcDamper\";\r\n            propertySetDamperTypeFireDamper.PredefinedType = \"FIREDAMPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireDamper.ActuationType\", \"ActuationType\");\r\n            ifcPSE.PropertyName = \"ActuationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FireDamperActuationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActuationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireDamper.ClosureRatingEnum\", \"ClosureRatingEnum\");\r\n            ifcPSE.PropertyName = \"ClosureRatingEnum\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FireDamperClosureRating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClosureRatingEnumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireDamper.FireResistanceRating\", \"FireResistanceRating\");\r\n            ifcPSE.PropertyName = \"FireResistanceRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireResistanceRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireDamper.FusibleLinkTemperature\", \"FusibleLinkTemperature\");\r\n            ifcPSE.PropertyName = \"FusibleLinkTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FusibleLinkTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireDamper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDamperTypeFireDamper);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DamperTypeFireSmokeDamper(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDamperTypeFireSmokeDamper = new PropertySetDescription();\r\n         propertySetDamperTypeFireSmokeDamper.Name = \"Pset_DamperTypeFireSmokeDamper\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeFireSmokeDamper\"))\r\n         {\r\n            propertySetDamperTypeFireSmokeDamper.EntityTypes.Add(IFCEntityType.IfcDamperType);\r\n            propertySetDamperTypeFireSmokeDamper.ObjectType = \"IfcDamperType\";\r\n            propertySetDamperTypeFireSmokeDamper.PredefinedType = \"FIRESMOKEDAMPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireSmokeDamper.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireSmokeDamper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeFireSmokeDamper\"))\r\n         {\r\n            propertySetDamperTypeFireSmokeDamper.EntityTypes.Add(IFCEntityType.IfcDamperType);\r\n            propertySetDamperTypeFireSmokeDamper.ObjectType = \"IfcDamperType\";\r\n            propertySetDamperTypeFireSmokeDamper.PredefinedType = \"FIRESMOKEDAMPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireSmokeDamper.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireSmokeDamper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeFireSmokeDamper\"))\r\n         {\r\n            propertySetDamperTypeFireSmokeDamper.EntityTypes.Add(IFCEntityType.IfcDamper);\r\n            propertySetDamperTypeFireSmokeDamper.ObjectType = \"IfcDamper\";\r\n            propertySetDamperTypeFireSmokeDamper.PredefinedType = \"FIRESMOKEDAMPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireSmokeDamper.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Control Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireSmokeDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireSmokeDamper.ActuationType\", \"ActuationType\");\r\n            ifcPSE.PropertyName = \"ActuationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FireDamperActuationType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Actuation Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActuationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireSmokeDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireSmokeDamper.ClosureRatingEnum\", \"ClosureRatingEnum\");\r\n            ifcPSE.PropertyName = \"ClosureRatingEnum\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FireDamperClosureRating);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Closure Rating Enum\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClosureRatingEnumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireSmokeDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireSmokeDamper.FireResistanceRating\", \"FireResistanceRating\");\r\n            ifcPSE.PropertyName = \"FireResistanceRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Resistance Rating\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireResistanceRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireSmokeDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireSmokeDamper.FusibleLinkTemperature\", \"FusibleLinkTemperature\");\r\n            ifcPSE.PropertyName = \"FusibleLinkTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fusible Link Temperature\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FusibleLinkTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireSmokeDamper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeFireSmokeDamper\"))\r\n         {\r\n            propertySetDamperTypeFireSmokeDamper.EntityTypes.Add(IFCEntityType.IfcDamper);\r\n            propertySetDamperTypeFireSmokeDamper.EntityTypes.Add(IFCEntityType.IfcDamperType);\r\n            propertySetDamperTypeFireSmokeDamper.ObjectType = \"IfcDamper\";\r\n            propertySetDamperTypeFireSmokeDamper.PredefinedType = \"FIRESMOKEDAMPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireSmokeDamper.DamperControlType\", \"DamperControlType\");\r\n            ifcPSE.PropertyName = \"DamperControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DamperControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireSmokeDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireSmokeDamper.ActuationType\", \"ActuationType\");\r\n            ifcPSE.PropertyName = \"ActuationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FireDamperActuationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActuationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireSmokeDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireSmokeDamper.ClosureRatingEnum\", \"ClosureRatingEnum\");\r\n            ifcPSE.PropertyName = \"ClosureRatingEnum\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FireDamperClosureRating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClosureRatingEnumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireSmokeDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireSmokeDamper.FireResistanceRating\", \"FireResistanceRating\");\r\n            ifcPSE.PropertyName = \"FireResistanceRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireResistanceRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireSmokeDamper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeFireSmokeDamper.FusibleLinkTemperature\", \"FusibleLinkTemperature\");\r\n            ifcPSE.PropertyName = \"FusibleLinkTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FusibleLinkTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeFireSmokeDamper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDamperTypeFireSmokeDamper);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DamperTypeSmokeDamper(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDamperTypeSmokeDamper = new PropertySetDescription();\r\n         propertySetDamperTypeSmokeDamper.Name = \"Pset_DamperTypeSmokeDamper\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeSmokeDamper\"))\r\n         {\r\n            propertySetDamperTypeSmokeDamper.EntityTypes.Add(IFCEntityType.IfcDamperType);\r\n            propertySetDamperTypeSmokeDamper.ObjectType = \"IfcDamperType\";\r\n            propertySetDamperTypeSmokeDamper.PredefinedType = \"SMOKEDAMPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeSmokeDamper.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeSmokeDamper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeSmokeDamper\"))\r\n         {\r\n            propertySetDamperTypeSmokeDamper.EntityTypes.Add(IFCEntityType.IfcDamperType);\r\n            propertySetDamperTypeSmokeDamper.ObjectType = \"IfcDamperType\";\r\n            propertySetDamperTypeSmokeDamper.PredefinedType = \"SMOKEDAMPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeSmokeDamper.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeSmokeDamper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeSmokeDamper\"))\r\n         {\r\n            propertySetDamperTypeSmokeDamper.EntityTypes.Add(IFCEntityType.IfcDamper);\r\n            propertySetDamperTypeSmokeDamper.ObjectType = \"IfcDamper\";\r\n            propertySetDamperTypeSmokeDamper.PredefinedType = \"SMOKEDAMPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeSmokeDamper.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Control Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeSmokeDamper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DamperTypeSmokeDamper\"))\r\n         {\r\n            propertySetDamperTypeSmokeDamper.EntityTypes.Add(IFCEntityType.IfcDamper);\r\n            propertySetDamperTypeSmokeDamper.EntityTypes.Add(IFCEntityType.IfcDamperType);\r\n            propertySetDamperTypeSmokeDamper.ObjectType = \"IfcDamper\";\r\n            propertySetDamperTypeSmokeDamper.PredefinedType = \"SMOKEDAMPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DamperTypeSmokeDamper.ControlType\", \"ControlType\");\r\n            ifcPSE.PropertyName = \"ControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDamperTypeSmokeDamper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDamperTypeSmokeDamper);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DataTransmissionUnit(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDataTransmissionUnit = new PropertySetDescription();\r\n         propertySetDataTransmissionUnit.Name = \"Pset_DataTransmissionUnit\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DataTransmissionUnit\"))\r\n         {\r\n            propertySetDataTransmissionUnit.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetDataTransmissionUnit.EntityTypes.Add(IFCEntityType.IfcCommunicationsApplianceType);\r\n            propertySetDataTransmissionUnit.ObjectType = \"IfcCommunicationsAppliance\";\r\n            propertySetDataTransmissionUnit.PredefinedType = \"MODEM\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DataTransmissionUnit.WorkingState\", \"WorkingState\");\r\n            ifcPSE.PropertyName = \"WorkingState\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDataTransmissionUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DataTransmissionUnit.SerialInterfaceType\", \"SerialInterfaceType\");\r\n            ifcPSE.PropertyName = \"SerialInterfaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SerialInterfaceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SerialInterfaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDataTransmissionUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DataTransmissionUnit.DataTransmissionUnitUsage\", \"DataTransmissionUnitUsage\");\r\n            ifcPSE.PropertyName = \"DataTransmissionUnitUsage\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DataTransmissionUnitUsage);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DataTransmissionUnitUsageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDataTransmissionUnit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDataTransmissionUnit);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DesignPoint(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDesignPoint = new PropertySetDescription();\r\n         propertySetDesignPoint.Name = \"Pset_DesignPoint\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DesignPoint\"))\r\n         {\r\n            propertySetDesignPoint.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DesignPoint.IsDesignPoint\", \"IsDesignPoint\");\r\n            ifcPSE.PropertyName = \"IsDesignPoint\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsDesignPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDesignPoint.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DesignPoint\"))\r\n         {\r\n            propertySetDesignPoint.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DesignPoint.IsDesignPoint\", \"IsDesignPoint\");\r\n            ifcPSE.PropertyName = \"IsDesignPoint\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsDesignPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDesignPoint.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDesignPoint);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryAnchorBolt(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryAnchorBolt = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryAnchorBolt.Name = \"Pset_DiscreteAccessoryAnchorBolt\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryAnchorBolt\"))\r\n         {\r\n            propertySetDiscreteAccessoryAnchorBolt.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryAnchorBolt.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryAnchorBolt.ObjectType = \"IfcObject\";\r\n            propertySetDiscreteAccessoryAnchorBolt.PredefinedType = \" 'Extension bolt'\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryAnchorBolt.AnchorBoltLength\", \"AnchorBoltLength\");\r\n            ifcPSE.PropertyName = \"AnchorBoltLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnchorBoltLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryAnchorBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryAnchorBolt.AnchorBoltDiameter\", \"AnchorBoltDiameter\");\r\n            ifcPSE.PropertyName = \"AnchorBoltDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnchorBoltDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryAnchorBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryAnchorBolt.AnchorBoltThreadLength\", \"AnchorBoltThreadLength\");\r\n            ifcPSE.PropertyName = \"AnchorBoltThreadLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnchorBoltThreadLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryAnchorBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryAnchorBolt.AnchorBoltProtrusionLength\", \"AnchorBoltProtrusionLength\");\r\n            ifcPSE.PropertyName = \"AnchorBoltProtrusionLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnchorBoltProtrusionLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryAnchorBolt.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryAnchorBolt\"))\r\n         {\r\n            propertySetDiscreteAccessoryAnchorBolt.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryAnchorBolt.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryAnchorBolt.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryAnchorBolt.PredefinedType = \"Foundation bolt, Ribbed bar bolt, Extension bolt\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryAnchorBolt.AnchorBoltLength\", \"AnchorBoltLength\");\r\n            ifcPSE.PropertyName = \"AnchorBoltLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnchorBoltLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryAnchorBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryAnchorBolt.AnchorBoltDiameter\", \"AnchorBoltDiameter\");\r\n            ifcPSE.PropertyName = \"AnchorBoltDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnchorBoltDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryAnchorBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryAnchorBolt.AnchorBoltThreadLength\", \"AnchorBoltThreadLength\");\r\n            ifcPSE.PropertyName = \"AnchorBoltThreadLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnchorBoltThreadLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryAnchorBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryAnchorBolt.AnchorBoltProtrusionLength\", \"AnchorBoltProtrusionLength\");\r\n            ifcPSE.PropertyName = \"AnchorBoltProtrusionLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnchorBoltProtrusionLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryAnchorBolt.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryAnchorBolt);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryColumnShoe(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryColumnShoe = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryColumnShoe.Name = \"Pset_DiscreteAccessoryColumnShoe\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryColumnShoe\"))\r\n         {\r\n            propertySetDiscreteAccessoryColumnShoe.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryColumnShoe.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryColumnShoe.ObjectType = \"IfcObject\";\r\n            propertySetDiscreteAccessoryColumnShoe.PredefinedType = \" 'Column shoe'\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateThickness\", \"ColumnShoeBasePlateThickness\");\r\n            ifcPSE.PropertyName = \"ColumnShoeBasePlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeBasePlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateWidth\", \"ColumnShoeBasePlateWidth\");\r\n            ifcPSE.PropertyName = \"ColumnShoeBasePlateWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeBasePlateWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateDepth\", \"ColumnShoeBasePlateDepth\");\r\n            ifcPSE.PropertyName = \"ColumnShoeBasePlateDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeBasePlateDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeCasingHeight\", \"ColumnShoeCasingHeight\");\r\n            ifcPSE.PropertyName = \"ColumnShoeCasingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeCasingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeCasingWidth\", \"ColumnShoeCasingWidth\");\r\n            ifcPSE.PropertyName = \"ColumnShoeCasingWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeCasingWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeCasingDepth\", \"ColumnShoeCasingDepth\");\r\n            ifcPSE.PropertyName = \"ColumnShoeCasingDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeCasingDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryColumnShoe\"))\r\n         {\r\n            propertySetDiscreteAccessoryColumnShoe.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryColumnShoe.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryColumnShoe.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryColumnShoe.PredefinedType = \"Column shoe\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateThickness\", \"ColumnShoeBasePlateThickness\");\r\n            ifcPSE.PropertyName = \"ColumnShoeBasePlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeBasePlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateWidth\", \"ColumnShoeBasePlateWidth\");\r\n            ifcPSE.PropertyName = \"ColumnShoeBasePlateWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeBasePlateWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateDepth\", \"ColumnShoeBasePlateDepth\");\r\n            ifcPSE.PropertyName = \"ColumnShoeBasePlateDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeBasePlateDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeCasingHeight\", \"ColumnShoeCasingHeight\");\r\n            ifcPSE.PropertyName = \"ColumnShoeCasingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeCasingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeCasingWidth\", \"ColumnShoeCasingWidth\");\r\n            ifcPSE.PropertyName = \"ColumnShoeCasingWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeCasingWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeCasingDepth\", \"ColumnShoeCasingDepth\");\r\n            ifcPSE.PropertyName = \"ColumnShoeCasingDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeCasingDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryColumnShoe\"))\r\n         {\r\n            propertySetDiscreteAccessoryColumnShoe.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryColumnShoe.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryColumnShoe.PredefinedType = \"SHOE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateThickness\", \"ColumnShoeBasePlateThickness\");\r\n            ifcPSE.PropertyName = \"ColumnShoeBasePlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Column Shoe Base Plate Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ベースプレート厚\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"베이스 플레이트 두께\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeBasePlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateWidth\", \"ColumnShoeBasePlateWidth\");\r\n            ifcPSE.PropertyName = \"ColumnShoeBasePlateWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Column Shoe Base Plate Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ベースプレート幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"베이스 플레이트 폭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeBasePlateWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateDepth\", \"ColumnShoeBasePlateDepth\");\r\n            ifcPSE.PropertyName = \"ColumnShoeBasePlateDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Column Shoe Base Plate Depth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ベースプレート成\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"베이스 플레이트 구성\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeBasePlateDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeCasingHeight\", \"ColumnShoeCasingHeight\");\r\n            ifcPSE.PropertyName = \"ColumnShoeCasingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Column Shoe Casing Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ケーシング厚\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"케이스 두께\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeCasingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeCasingWidth\", \"ColumnShoeCasingWidth\");\r\n            ifcPSE.PropertyName = \"ColumnShoeCasingWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Column Shoe Casing Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ケーシング幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"케이스 폭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeCasingWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeCasingDepth\", \"ColumnShoeCasingDepth\");\r\n            ifcPSE.PropertyName = \"ColumnShoeCasingDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Column Shoe Casing Depth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ケーシング成\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"케이스 구성\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeCasingDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryColumnShoe\"))\r\n         {\r\n            propertySetDiscreteAccessoryColumnShoe.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryColumnShoe.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryColumnShoe.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryColumnShoe.PredefinedType = \"SHOE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateThickness\", \"ColumnShoeBasePlateThickness\");\r\n            ifcPSE.PropertyName = \"ColumnShoeBasePlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeBasePlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateWidth\", \"ColumnShoeBasePlateWidth\");\r\n            ifcPSE.PropertyName = \"ColumnShoeBasePlateWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeBasePlateWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateDepth\", \"ColumnShoeBasePlateDepth\");\r\n            ifcPSE.PropertyName = \"ColumnShoeBasePlateDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeBasePlateDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeCasingHeight\", \"ColumnShoeCasingHeight\");\r\n            ifcPSE.PropertyName = \"ColumnShoeCasingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeCasingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeCasingWidth\", \"ColumnShoeCasingWidth\");\r\n            ifcPSE.PropertyName = \"ColumnShoeCasingWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeCasingWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryColumnShoe.ColumnShoeCasingDepth\", \"ColumnShoeCasingDepth\");\r\n            ifcPSE.PropertyName = \"ColumnShoeCasingDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColumnShoeCasingDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryColumnShoe.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryColumnShoe);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryCornerFixingPlate(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryCornerFixingPlate = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryCornerFixingPlate.Name = \"Pset_DiscreteAccessoryCornerFixingPlate\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryCornerFixingPlate\"))\r\n         {\r\n            propertySetDiscreteAccessoryCornerFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryCornerFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryCornerFixingPlate.ObjectType = \"IfcObject\";\r\n            propertySetDiscreteAccessoryCornerFixingPlate.PredefinedType = \" 'Corner fixing plate'\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateLength\", \"CornerFixingPlateLength\");\r\n            ifcPSE.PropertyName = \"CornerFixingPlateLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerFixingPlateLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryCornerFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateThickness\", \"CornerFixingPlateThickness\");\r\n            ifcPSE.PropertyName = \"CornerFixingPlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerFixingPlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryCornerFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneZ\", \"CornerFixingPlateFlangeWidthInPlaneZ\");\r\n            ifcPSE.PropertyName = \"CornerFixingPlateFlangeWidthInPlaneZ\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerFixingPlateFlangeWidthInPlaneZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryCornerFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneX\", \"CornerFixingPlateFlangeWidthInPlaneX\");\r\n            ifcPSE.PropertyName = \"CornerFixingPlateFlangeWidthInPlaneX\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerFixingPlateFlangeWidthInPlaneXCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryCornerFixingPlate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryCornerFixingPlate\"))\r\n         {\r\n            propertySetDiscreteAccessoryCornerFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryCornerFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryCornerFixingPlate.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryCornerFixingPlate.PredefinedType = \"Corner fixing plate\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateLength\", \"CornerFixingPlateLength\");\r\n            ifcPSE.PropertyName = \"CornerFixingPlateLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerFixingPlateLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryCornerFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateThickness\", \"CornerFixingPlateThickness\");\r\n            ifcPSE.PropertyName = \"CornerFixingPlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerFixingPlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryCornerFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneZ\", \"CornerFixingPlateFlangeWidthInPlaneZ\");\r\n            ifcPSE.PropertyName = \"CornerFixingPlateFlangeWidthInPlaneZ\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerFixingPlateFlangeWidthInPlaneZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryCornerFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneX\", \"CornerFixingPlateFlangeWidthInPlaneX\");\r\n            ifcPSE.PropertyName = \"CornerFixingPlateFlangeWidthInPlaneX\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerFixingPlateFlangeWidthInPlaneXCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryCornerFixingPlate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryCornerFixingPlate\"))\r\n         {\r\n            propertySetDiscreteAccessoryCornerFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryCornerFixingPlate.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryCornerFixingPlate.PredefinedType = \"Corner fixing plate\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateLength\", \"CornerFixingPlateLength\");\r\n            ifcPSE.PropertyName = \"CornerFixingPlateLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Corner Fixing Plate Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"길이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerFixingPlateLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryCornerFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateThickness\", \"CornerFixingPlateThickness\");\r\n            ifcPSE.PropertyName = \"CornerFixingPlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Corner Fixing Plate Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"板厚\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"두께\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerFixingPlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryCornerFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneZ\", \"CornerFixingPlateFlangeWidthInPlaneZ\");\r\n            ifcPSE.PropertyName = \"CornerFixingPlateFlangeWidthInPlaneZ\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Corner Fixing Plate Flange Width In Plane Z\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"フランジ幅Z\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"플랜지 폭 Z\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerFixingPlateFlangeWidthInPlaneZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryCornerFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneX\", \"CornerFixingPlateFlangeWidthInPlaneX\");\r\n            ifcPSE.PropertyName = \"CornerFixingPlateFlangeWidthInPlaneX\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Corner Fixing Plate Flange Width In Plane X\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"フランジ幅X\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"플랜지 폭 X\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerFixingPlateFlangeWidthInPlaneXCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryCornerFixingPlate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryCornerFixingPlate\"))\r\n         {\r\n            propertySetDiscreteAccessoryCornerFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryCornerFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryCornerFixingPlate.ObjectType = \"IfcDiscreteAccessory\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateLength\", \"CornerFixingPlateLength\");\r\n            ifcPSE.PropertyName = \"CornerFixingPlateLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerFixingPlateLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryCornerFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateThickness\", \"CornerFixingPlateThickness\");\r\n            ifcPSE.PropertyName = \"CornerFixingPlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerFixingPlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryCornerFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneZ\", \"CornerFixingPlateFlangeWidthInPlaneZ\");\r\n            ifcPSE.PropertyName = \"CornerFixingPlateFlangeWidthInPlaneZ\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerFixingPlateFlangeWidthInPlaneZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryCornerFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneX\", \"CornerFixingPlateFlangeWidthInPlaneX\");\r\n            ifcPSE.PropertyName = \"CornerFixingPlateFlangeWidthInPlaneX\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerFixingPlateFlangeWidthInPlaneXCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryCornerFixingPlate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryCornerFixingPlate);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryDiagonalTrussConnector(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryDiagonalTrussConnector = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryDiagonalTrussConnector.Name = \"Pset_DiscreteAccessoryDiagonalTrussConnector\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryDiagonalTrussConnector\"))\r\n         {\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.ObjectType = \"IfcObject\";\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.PredefinedType = \" 'Diagonal truss connector'\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussHeight\", \"DiagonalTrussHeight\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussLength\", \"DiagonalTrussLength\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarSpacing\", \"DiagonalTrussCrossBarSpacing\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussCrossBarSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussCrossBarSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussBaseBarDiameter\", \"DiagonalTrussBaseBarDiameter\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussBaseBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussBaseBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussSecondaryBarDiameter\", \"DiagonalTrussSecondaryBarDiameter\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussSecondaryBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussSecondaryBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarDiameter\", \"DiagonalTrussCrossBarDiameter\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussCrossBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussCrossBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryDiagonalTrussConnector\"))\r\n         {\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.PredefinedType = \"Diagonal truss connector\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussHeight\", \"DiagonalTrussHeight\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussLength\", \"DiagonalTrussLength\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarSpacing\", \"DiagonalTrussCrossBarSpacing\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussCrossBarSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussCrossBarSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussBaseBarDiameter\", \"DiagonalTrussBaseBarDiameter\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussBaseBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussBaseBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussSecondaryBarDiameter\", \"DiagonalTrussSecondaryBarDiameter\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussSecondaryBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussSecondaryBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarDiameter\", \"DiagonalTrussCrossBarDiameter\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussCrossBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussCrossBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryDiagonalTrussConnector\"))\r\n         {\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.PredefinedType = \"Diagonal truss connector\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussHeight\", \"DiagonalTrussHeight\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Diagonal Truss Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"全体高さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전체 높이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussLength\", \"DiagonalTrussLength\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Diagonal Truss Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"全体長さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전체 길이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarSpacing\", \"DiagonalTrussCrossBarSpacing\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussCrossBarSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Diagonal Truss Cross Bar Spacing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"クロスバー間隔\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"크로스바 간격\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussCrossBarSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussBaseBarDiameter\", \"DiagonalTrussBaseBarDiameter\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussBaseBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Diagonal Truss Base Bar Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ベースバー径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"기반 막대 지름\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussBaseBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussSecondaryBarDiameter\", \"DiagonalTrussSecondaryBarDiameter\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussSecondaryBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Diagonal Truss Secondary Bar Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"二次バー径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"보조 막대 지름\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussSecondaryBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarDiameter\", \"DiagonalTrussCrossBarDiameter\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussCrossBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Diagonal Truss Cross Bar Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"クロスバー径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"크로스바 지름\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussCrossBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryDiagonalTrussConnector\"))\r\n         {\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.ObjectType = \"IfcDiscreteAccessory\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussHeight\", \"DiagonalTrussHeight\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussLength\", \"DiagonalTrussLength\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarSpacing\", \"DiagonalTrussCrossBarSpacing\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussCrossBarSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussCrossBarSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussBaseBarDiameter\", \"DiagonalTrussBaseBarDiameter\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussBaseBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussBaseBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussSecondaryBarDiameter\", \"DiagonalTrussSecondaryBarDiameter\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussSecondaryBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussSecondaryBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarDiameter\", \"DiagonalTrussCrossBarDiameter\");\r\n            ifcPSE.PropertyName = \"DiagonalTrussCrossBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagonalTrussCrossBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryDiagonalTrussConnector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryDiagonalTrussConnector);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryEdgeFixingPlate(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryEdgeFixingPlate = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryEdgeFixingPlate.Name = \"Pset_DiscreteAccessoryEdgeFixingPlate\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryEdgeFixingPlate\"))\r\n         {\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.ObjectType = \"IfcObject\";\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.PredefinedType = \" 'Edge fixing plate'\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateLength\", \"EdgeFixingPlateLength\");\r\n            ifcPSE.PropertyName = \"EdgeFixingPlateLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeFixingPlateLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateThickness\", \"EdgeFixingPlateThickness\");\r\n            ifcPSE.PropertyName = \"EdgeFixingPlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeFixingPlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneZ\", \"EdgeFixingPlateFlangeWidthInPlaneZ\");\r\n            ifcPSE.PropertyName = \"EdgeFixingPlateFlangeWidthInPlaneZ\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeFixingPlateFlangeWidthInPlaneZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneX\", \"EdgeFixingPlateFlangeWidthInPlaneX\");\r\n            ifcPSE.PropertyName = \"EdgeFixingPlateFlangeWidthInPlaneX\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeFixingPlateFlangeWidthInPlaneXCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryEdgeFixingPlate\"))\r\n         {\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.PredefinedType = \"Edge fixing plate\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateLength\", \"EdgeFixingPlateLength\");\r\n            ifcPSE.PropertyName = \"EdgeFixingPlateLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeFixingPlateLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateThickness\", \"EdgeFixingPlateThickness\");\r\n            ifcPSE.PropertyName = \"EdgeFixingPlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeFixingPlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneZ\", \"EdgeFixingPlateFlangeWidthInPlaneZ\");\r\n            ifcPSE.PropertyName = \"EdgeFixingPlateFlangeWidthInPlaneZ\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeFixingPlateFlangeWidthInPlaneZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneX\", \"EdgeFixingPlateFlangeWidthInPlaneX\");\r\n            ifcPSE.PropertyName = \"EdgeFixingPlateFlangeWidthInPlaneX\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeFixingPlateFlangeWidthInPlaneXCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryEdgeFixingPlate\"))\r\n         {\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.PredefinedType = \"Edge fixing plate\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateLength\", \"EdgeFixingPlateLength\");\r\n            ifcPSE.PropertyName = \"EdgeFixingPlateLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Edge Fixing Plate Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"길이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeFixingPlateLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateThickness\", \"EdgeFixingPlateThickness\");\r\n            ifcPSE.PropertyName = \"EdgeFixingPlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Edge Fixing Plate Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"板厚\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"두께\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeFixingPlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneZ\", \"EdgeFixingPlateFlangeWidthInPlaneZ\");\r\n            ifcPSE.PropertyName = \"EdgeFixingPlateFlangeWidthInPlaneZ\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Edge Fixing Plate Flange Width In Plane Z\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"フランジ幅Z\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"플랜지 폭 Z\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeFixingPlateFlangeWidthInPlaneZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneX\", \"EdgeFixingPlateFlangeWidthInPlaneX\");\r\n            ifcPSE.PropertyName = \"EdgeFixingPlateFlangeWidthInPlaneX\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Edge Fixing Plate Flange Width In Plane X\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"フランジ幅X\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"플랜지 폭 X\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeFixingPlateFlangeWidthInPlaneXCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryEdgeFixingPlate\"))\r\n         {\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.ObjectType = \"IfcDiscreteAccessory\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateLength\", \"EdgeFixingPlateLength\");\r\n            ifcPSE.PropertyName = \"EdgeFixingPlateLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeFixingPlateLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateThickness\", \"EdgeFixingPlateThickness\");\r\n            ifcPSE.PropertyName = \"EdgeFixingPlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeFixingPlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneZ\", \"EdgeFixingPlateFlangeWidthInPlaneZ\");\r\n            ifcPSE.PropertyName = \"EdgeFixingPlateFlangeWidthInPlaneZ\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeFixingPlateFlangeWidthInPlaneZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneX\", \"EdgeFixingPlateFlangeWidthInPlaneX\");\r\n            ifcPSE.PropertyName = \"EdgeFixingPlateFlangeWidthInPlaneX\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeFixingPlateFlangeWidthInPlaneXCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryEdgeFixingPlate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryEdgeFixingPlate);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryFixingSocket(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryFixingSocket = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryFixingSocket.Name = \"Pset_DiscreteAccessoryFixingSocket\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryFixingSocket\"))\r\n         {\r\n            propertySetDiscreteAccessoryFixingSocket.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryFixingSocket.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryFixingSocket.ObjectType = \"IfcObject\";\r\n            propertySetDiscreteAccessoryFixingSocket.PredefinedType = \" 'Fixing socket'\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryFixingSocket.FixingSocketTypeReference\", \"FixingSocketTypeReference\");\r\n            ifcPSE.PropertyName = \"FixingSocketTypeReference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FixingSocketTypeReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryFixingSocket.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryFixingSocket.FixingSocketHeight\", \"FixingSocketHeight\");\r\n            ifcPSE.PropertyName = \"FixingSocketHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FixingSocketHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryFixingSocket.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryFixingSocket.FixingSocketThreadDiameter\", \"FixingSocketThreadDiameter\");\r\n            ifcPSE.PropertyName = \"FixingSocketThreadDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FixingSocketThreadDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryFixingSocket.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryFixingSocket.FixingSocketThreadLength\", \"FixingSocketThreadLength\");\r\n            ifcPSE.PropertyName = \"FixingSocketThreadLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FixingSocketThreadLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryFixingSocket.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryFixingSocket\"))\r\n         {\r\n            propertySetDiscreteAccessoryFixingSocket.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryFixingSocket.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryFixingSocket.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryFixingSocket.PredefinedType = \"Fixing socket\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryFixingSocket.FixingSocketTypeReference\", \"FixingSocketTypeReference\");\r\n            ifcPSE.PropertyName = \"FixingSocketTypeReference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FixingSocketTypeReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryFixingSocket.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryFixingSocket.FixingSocketHeight\", \"FixingSocketHeight\");\r\n            ifcPSE.PropertyName = \"FixingSocketHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FixingSocketHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryFixingSocket.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryFixingSocket.FixingSocketThreadDiameter\", \"FixingSocketThreadDiameter\");\r\n            ifcPSE.PropertyName = \"FixingSocketThreadDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FixingSocketThreadDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryFixingSocket.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryFixingSocket.FixingSocketThreadLength\", \"FixingSocketThreadLength\");\r\n            ifcPSE.PropertyName = \"FixingSocketThreadLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FixingSocketThreadLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryFixingSocket.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryFixingSocket\"))\r\n         {\r\n            propertySetDiscreteAccessoryFixingSocket.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryFixingSocket.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryFixingSocket.PredefinedType = \"Fixing socket\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryFixingSocket.FixingSocketTypeReference\", \"FixingSocketTypeReference\");\r\n            ifcPSE.PropertyName = \"FixingSocketTypeReference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fixing Socket Type Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照基準\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조 기준\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FixingSocketTypeReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryFixingSocket.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryFixingSocket.FixingSocketHeight\", \"FixingSocketHeight\");\r\n            ifcPSE.PropertyName = \"FixingSocketHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fixing Socket Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"全体長さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전체 길이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FixingSocketHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryFixingSocket.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryFixingSocket.FixingSocketThreadDiameter\", \"FixingSocketThreadDiameter\");\r\n            ifcPSE.PropertyName = \"FixingSocketThreadDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fixing Socket Thread Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"公称径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"공칭 지름\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FixingSocketThreadDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryFixingSocket.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryFixingSocket.FixingSocketThreadLength\", \"FixingSocketThreadLength\");\r\n            ifcPSE.PropertyName = \"FixingSocketThreadLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fixing Socket Thread Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ねじ部長さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"나사부 길이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FixingSocketThreadLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryFixingSocket.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryFixingSocket\"))\r\n         {\r\n            propertySetDiscreteAccessoryFixingSocket.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryFixingSocket.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryFixingSocket.ObjectType = \"IfcDiscreteAccessory\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryFixingSocket.FixingSocketTypeReference\", \"FixingSocketTypeReference\");\r\n            ifcPSE.PropertyName = \"FixingSocketTypeReference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FixingSocketTypeReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryFixingSocket.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryFixingSocket.FixingSocketHeight\", \"FixingSocketHeight\");\r\n            ifcPSE.PropertyName = \"FixingSocketHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FixingSocketHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryFixingSocket.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryFixingSocket.FixingSocketThreadDiameter\", \"FixingSocketThreadDiameter\");\r\n            ifcPSE.PropertyName = \"FixingSocketThreadDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FixingSocketThreadDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryFixingSocket.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryFixingSocket.FixingSocketThreadLength\", \"FixingSocketThreadLength\");\r\n            ifcPSE.PropertyName = \"FixingSocketThreadLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FixingSocketThreadLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryFixingSocket.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryFixingSocket);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryLadderTrussConnector(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryLadderTrussConnector = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryLadderTrussConnector.Name = \"Pset_DiscreteAccessoryLadderTrussConnector\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryLadderTrussConnector\"))\r\n         {\r\n            propertySetDiscreteAccessoryLadderTrussConnector.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryLadderTrussConnector.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryLadderTrussConnector.ObjectType = \"IfcObject\";\r\n            propertySetDiscreteAccessoryLadderTrussConnector.PredefinedType = \" 'Ladder truss connector'\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussHeight\", \"LadderTrussHeight\");\r\n            ifcPSE.PropertyName = \"LadderTrussHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussLength\", \"LadderTrussLength\");\r\n            ifcPSE.PropertyName = \"LadderTrussLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarSpacing\", \"LadderTrussCrossBarSpacing\");\r\n            ifcPSE.PropertyName = \"LadderTrussCrossBarSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussCrossBarSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussBaseBarDiameter\", \"LadderTrussBaseBarDiameter\");\r\n            ifcPSE.PropertyName = \"LadderTrussBaseBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussBaseBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussSecondaryBarDiameter\", \"LadderTrussSecondaryBarDiameter\");\r\n            ifcPSE.PropertyName = \"LadderTrussSecondaryBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussSecondaryBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarDiameter\", \"LadderTrussCrossBarDiameter\");\r\n            ifcPSE.PropertyName = \"LadderTrussCrossBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussCrossBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryLadderTrussConnector\"))\r\n         {\r\n            propertySetDiscreteAccessoryLadderTrussConnector.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryLadderTrussConnector.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryLadderTrussConnector.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryLadderTrussConnector.PredefinedType = \"Ladder truss connector\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussHeight\", \"LadderTrussHeight\");\r\n            ifcPSE.PropertyName = \"LadderTrussHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussLength\", \"LadderTrussLength\");\r\n            ifcPSE.PropertyName = \"LadderTrussLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarSpacing\", \"LadderTrussCrossBarSpacing\");\r\n            ifcPSE.PropertyName = \"LadderTrussCrossBarSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussCrossBarSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussBaseBarDiameter\", \"LadderTrussBaseBarDiameter\");\r\n            ifcPSE.PropertyName = \"LadderTrussBaseBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussBaseBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussSecondaryBarDiameter\", \"LadderTrussSecondaryBarDiameter\");\r\n            ifcPSE.PropertyName = \"LadderTrussSecondaryBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussSecondaryBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarDiameter\", \"LadderTrussCrossBarDiameter\");\r\n            ifcPSE.PropertyName = \"LadderTrussCrossBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussCrossBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryLadderTrussConnector\"))\r\n         {\r\n            propertySetDiscreteAccessoryLadderTrussConnector.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryLadderTrussConnector.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryLadderTrussConnector.PredefinedType = \"Ladder truss connector\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussHeight\", \"LadderTrussHeight\");\r\n            ifcPSE.PropertyName = \"LadderTrussHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ladder Truss Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"全体高さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전체 높이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussLength\", \"LadderTrussLength\");\r\n            ifcPSE.PropertyName = \"LadderTrussLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ladder Truss Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"全体長さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전체길이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarSpacing\", \"LadderTrussCrossBarSpacing\");\r\n            ifcPSE.PropertyName = \"LadderTrussCrossBarSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ladder Truss Cross Bar Spacing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"クロスバー間隔\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"크로스바 간격\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussCrossBarSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussBaseBarDiameter\", \"LadderTrussBaseBarDiameter\");\r\n            ifcPSE.PropertyName = \"LadderTrussBaseBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ladder Truss Base Bar Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ベースバー径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"기반 막대 지름\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussBaseBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussSecondaryBarDiameter\", \"LadderTrussSecondaryBarDiameter\");\r\n            ifcPSE.PropertyName = \"LadderTrussSecondaryBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ladder Truss Secondary Bar Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"二次バー径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"보조막대 지름\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussSecondaryBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarDiameter\", \"LadderTrussCrossBarDiameter\");\r\n            ifcPSE.PropertyName = \"LadderTrussCrossBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ladder Truss Cross Bar Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"クロスバー径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"크로스바 지름\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussCrossBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryLadderTrussConnector\"))\r\n         {\r\n            propertySetDiscreteAccessoryLadderTrussConnector.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryLadderTrussConnector.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryLadderTrussConnector.ObjectType = \"IfcDiscreteAccessory\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussHeight\", \"LadderTrussHeight\");\r\n            ifcPSE.PropertyName = \"LadderTrussHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussLength\", \"LadderTrussLength\");\r\n            ifcPSE.PropertyName = \"LadderTrussLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarSpacing\", \"LadderTrussCrossBarSpacing\");\r\n            ifcPSE.PropertyName = \"LadderTrussCrossBarSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussCrossBarSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussBaseBarDiameter\", \"LadderTrussBaseBarDiameter\");\r\n            ifcPSE.PropertyName = \"LadderTrussBaseBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussBaseBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussSecondaryBarDiameter\", \"LadderTrussSecondaryBarDiameter\");\r\n            ifcPSE.PropertyName = \"LadderTrussSecondaryBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussSecondaryBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarDiameter\", \"LadderTrussCrossBarDiameter\");\r\n            ifcPSE.PropertyName = \"LadderTrussCrossBarDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LadderTrussCrossBarDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryLadderTrussConnector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryLadderTrussConnector);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryStandardFixingPlate(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryStandardFixingPlate = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryStandardFixingPlate.Name = \"Pset_DiscreteAccessoryStandardFixingPlate\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryStandardFixingPlate\"))\r\n         {\r\n            propertySetDiscreteAccessoryStandardFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryStandardFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryStandardFixingPlate.ObjectType = \"IfcObject\";\r\n            propertySetDiscreteAccessoryStandardFixingPlate.PredefinedType = \" 'Standard fixing plate'\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateWidth\", \"StandardFixingPlateWidth\");\r\n            ifcPSE.PropertyName = \"StandardFixingPlateWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardFixingPlateWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryStandardFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateDepth\", \"StandardFixingPlateDepth\");\r\n            ifcPSE.PropertyName = \"StandardFixingPlateDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardFixingPlateDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryStandardFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateThickness\", \"StandardFixingPlateThickness\");\r\n            ifcPSE.PropertyName = \"StandardFixingPlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardFixingPlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryStandardFixingPlate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryStandardFixingPlate\"))\r\n         {\r\n            propertySetDiscreteAccessoryStandardFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryStandardFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryStandardFixingPlate.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryStandardFixingPlate.PredefinedType = \"Standard fixing plate\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateWidth\", \"StandardFixingPlateWidth\");\r\n            ifcPSE.PropertyName = \"StandardFixingPlateWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardFixingPlateWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryStandardFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateDepth\", \"StandardFixingPlateDepth\");\r\n            ifcPSE.PropertyName = \"StandardFixingPlateDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardFixingPlateDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryStandardFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateThickness\", \"StandardFixingPlateThickness\");\r\n            ifcPSE.PropertyName = \"StandardFixingPlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardFixingPlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryStandardFixingPlate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryStandardFixingPlate\"))\r\n         {\r\n            propertySetDiscreteAccessoryStandardFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryStandardFixingPlate.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryStandardFixingPlate.PredefinedType = \"Standard fixing plate\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateWidth\", \"StandardFixingPlateWidth\");\r\n            ifcPSE.PropertyName = \"StandardFixingPlateWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Standard Fixing Plate Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"폭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardFixingPlateWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryStandardFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateDepth\", \"StandardFixingPlateDepth\");\r\n            ifcPSE.PropertyName = \"StandardFixingPlateDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Standard Fixing Plate Depth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"成\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"구성\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardFixingPlateDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryStandardFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateThickness\", \"StandardFixingPlateThickness\");\r\n            ifcPSE.PropertyName = \"StandardFixingPlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Standard Fixing Plate Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"板厚\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"두께\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardFixingPlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryStandardFixingPlate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryStandardFixingPlate\"))\r\n         {\r\n            propertySetDiscreteAccessoryStandardFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryStandardFixingPlate.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryStandardFixingPlate.ObjectType = \"IfcDiscreteAccessory\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateWidth\", \"StandardFixingPlateWidth\");\r\n            ifcPSE.PropertyName = \"StandardFixingPlateWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardFixingPlateWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryStandardFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateDepth\", \"StandardFixingPlateDepth\");\r\n            ifcPSE.PropertyName = \"StandardFixingPlateDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardFixingPlateDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryStandardFixingPlate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateThickness\", \"StandardFixingPlateThickness\");\r\n            ifcPSE.PropertyName = \"StandardFixingPlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardFixingPlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryStandardFixingPlate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryStandardFixingPlate);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryTypeBracket(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryTypeBracket = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryTypeBracket.Name = \"Pset_DiscreteAccessoryTypeBracket\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryTypeBracket\"))\r\n         {\r\n            propertySetDiscreteAccessoryTypeBracket.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryTypeBracket.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryTypeBracket.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryTypeBracket.PredefinedType = \"BRACKET\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeBracket.IsInsulated\", \"IsInsulated\");\r\n            ifcPSE.PropertyName = \"IsInsulated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsInsulatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeBracket.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryTypeBracket);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryTypeCableArranger(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryTypeCableArranger = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryTypeCableArranger.Name = \"Pset_DiscreteAccessoryTypeCableArranger\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryTypeCableArranger\"))\r\n         {\r\n            propertySetDiscreteAccessoryTypeCableArranger.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryTypeCableArranger.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryTypeCableArranger.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryTypeCableArranger.PredefinedType = \"CABLEARRANGER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeCableArranger.CableArrangerPosition\", \"CableArrangerPosition\");\r\n            ifcPSE.PropertyName = \"CableArrangerPosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ArrangerPositionEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CableArrangerPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeCableArranger.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryTypeCableArranger);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryTypeInsulator(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryTypeInsulator = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryTypeInsulator.Name = \"Pset_DiscreteAccessoryTypeInsulator\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryTypeInsulator\"))\r\n         {\r\n            propertySetDiscreteAccessoryTypeInsulator.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryTypeInsulator.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryTypeInsulator.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryTypeInsulator.PredefinedType = \"INSULATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeInsulator.RatedCurrent\", \"RatedCurrent\");\r\n            ifcPSE.PropertyName = \"RatedCurrent\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeInsulator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeInsulator.RatedVoltage\", \"RatedVoltage\");\r\n            ifcPSE.PropertyName = \"RatedVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeInsulator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeInsulator.InsulationVoltage\", \"InsulationVoltage\");\r\n            ifcPSE.PropertyName = \"InsulationVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InsulationVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeInsulator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeInsulator.BreakdownVoltageTolerance\", \"BreakdownVoltageTolerance\");\r\n            ifcPSE.PropertyName = \"BreakdownVoltageTolerance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BreakdownVoltageToleranceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeInsulator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeInsulator.InsulationMethod\", \"InsulationMethod\");\r\n            ifcPSE.PropertyName = \"InsulationMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_InsulatorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InsulationMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeInsulator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeInsulator.OperationalTemperatureRange\", \"OperationalTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationalTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeInsulator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeInsulator.CreepageDistance\", \"CreepageDistance\");\r\n            ifcPSE.PropertyName = \"CreepageDistance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CreepageDistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeInsulator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeInsulator.InstallationMethod\", \"InstallationMethod\");\r\n            ifcPSE.PropertyName = \"InstallationMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstallationMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeInsulator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeInsulator.LightningPeakVoltage\", \"LightningPeakVoltage\");\r\n            ifcPSE.PropertyName = \"LightningPeakVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightningPeakVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeInsulator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeInsulator.BendingStrength\", \"BendingStrength\");\r\n            ifcPSE.PropertyName = \"BendingStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeInsulator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeInsulator.RMSWithstandVoltage\", \"RMSWithstandVoltage\");\r\n            ifcPSE.PropertyName = \"RMSWithstandVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RMSWithstandVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeInsulator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeInsulator.Voltage\", \"Voltage\");\r\n            ifcPSE.PropertyName = \"Voltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeInsulator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryTypeInsulator);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryTypeLock(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryTypeLock = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryTypeLock.Name = \"Pset_DiscreteAccessoryTypeLock\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryTypeLock\"))\r\n         {\r\n            propertySetDiscreteAccessoryTypeLock.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryTypeLock.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryTypeLock.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryTypeLock.PredefinedType = \"LOCK\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeLock.InstallationPlan\", \"InstallationPlan\");\r\n            ifcPSE.PropertyName = \"InstallationPlan\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstallationPlanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeLock.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeLock.RequiredClosureSpacing\", \"RequiredClosureSpacing\");\r\n            ifcPSE.PropertyName = \"RequiredClosureSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequiredClosureSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeLock.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryTypeLock);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryTypeRailBrace(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryTypeRailBrace = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryTypeRailBrace.Name = \"Pset_DiscreteAccessoryTypeRailBrace\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryTypeRailBrace\"))\r\n         {\r\n            propertySetDiscreteAccessoryTypeRailBrace.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryTypeRailBrace.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryTypeRailBrace.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryTypeRailBrace.PredefinedType = \"RAILBRACE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeRailBrace.IsTemporary\", \"IsTemporary\");\r\n            ifcPSE.PropertyName = \"IsTemporary\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsTemporaryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeRailBrace.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryTypeRailBrace);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryTypeRailLubrication(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryTypeRailLubrication = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryTypeRailLubrication.Name = \"Pset_DiscreteAccessoryTypeRailLubrication\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryTypeRailLubrication\"))\r\n         {\r\n            propertySetDiscreteAccessoryTypeRailLubrication.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryTypeRailLubrication.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryTypeRailLubrication.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryTypeRailLubrication.PredefinedType = \"RAIL_LUBRICATION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeRailLubrication.PositionInTrack\", \"PositionInTrack\");\r\n            ifcPSE.PropertyName = \"PositionInTrack\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RelativePosition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PositionInTrackCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeRailLubrication.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeRailLubrication.MaximumNoiseEmissions\", \"MaximumNoiseEmissions\");\r\n            ifcPSE.PropertyName = \"MaximumNoiseEmissions\";\r\n            ifcPSE.PropertyType = PropertyType.SoundPowerLevel;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumNoiseEmissionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeRailLubrication.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeRailLubrication.LubricationSystemType\", \"LubricationSystemType\");\r\n            ifcPSE.PropertyName = \"LubricationSystemType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_LubricationSystemType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LubricationSystemTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeRailLubrication.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeRailLubrication.LubricationPowerSupplyType\", \"LubricationPowerSupplyType\");\r\n            ifcPSE.PropertyName = \"LubricationPowerSupplyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_LubricationPowerSupply);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LubricationPowerSupplyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeRailLubrication.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryTypeRailLubrication);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryTypeRailPad(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryTypeRailPad = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryTypeRailPad.Name = \"Pset_DiscreteAccessoryTypeRailPad\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryTypeRailPad\"))\r\n         {\r\n            propertySetDiscreteAccessoryTypeRailPad.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryTypeRailPad.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryTypeRailPad.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryTypeRailPad.PredefinedType = \"RAILPAD\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeRailPad.RailPadStiffness\", \"RailPadStiffness\");\r\n            ifcPSE.PropertyName = \"RailPadStiffness\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RailPadStiffness);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RailPadStiffnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeRailPad.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryTypeRailPad);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryTypeSlidingChair(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryTypeSlidingChair = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryTypeSlidingChair.Name = \"Pset_DiscreteAccessoryTypeSlidingChair\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryTypeSlidingChair\"))\r\n         {\r\n            propertySetDiscreteAccessoryTypeSlidingChair.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryTypeSlidingChair.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryTypeSlidingChair.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryTypeSlidingChair.PredefinedType = \"SLIDINGCHAIR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeSlidingChair.IsSelfLubricated\", \"IsSelfLubricated\");\r\n            ifcPSE.PropertyName = \"IsSelfLubricated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSelfLubricatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeSlidingChair.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryTypeSlidingChair);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryTypeSoundAbsorption(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryTypeSoundAbsorption = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryTypeSoundAbsorption.Name = \"Pset_DiscreteAccessoryTypeSoundAbsorption\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryTypeSoundAbsorption\"))\r\n         {\r\n            propertySetDiscreteAccessoryTypeSoundAbsorption.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryTypeSoundAbsorption.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryTypeSoundAbsorption.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryTypeSoundAbsorption.PredefinedType = \"SOUNDABSORPTION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeSoundAbsorption.SoundAbsorptionLimit\", \"SoundAbsorptionLimit\");\r\n            ifcPSE.PropertyName = \"SoundAbsorptionLimit\";\r\n            ifcPSE.PropertyType = PropertyType.SoundPowerLevel;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundAbsorptionLimitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeSoundAbsorption.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryTypeSoundAbsorption);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryTypeTensioningEquipment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryTypeTensioningEquipment = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryTypeTensioningEquipment.Name = \"Pset_DiscreteAccessoryTypeTensioningEquipment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryTypeTensioningEquipment\"))\r\n         {\r\n            propertySetDiscreteAccessoryTypeTensioningEquipment.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryTypeTensioningEquipment.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryTypeTensioningEquipment.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryTypeTensioningEquipment.PredefinedType = \"TENSIONINGEQUIPMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeTensioningEquipment.ReferenceEnvironmentTemperature\", \"ReferenceEnvironmentTemperature\");\r\n            ifcPSE.PropertyName = \"ReferenceEnvironmentTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceEnvironmentTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeTensioningEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeTensioningEquipment.AssemblyInstruction\", \"AssemblyInstruction\");\r\n            ifcPSE.PropertyName = \"AssemblyInstruction\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyInstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeTensioningEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeTensioningEquipment.HasBreakLineLock\", \"HasBreakLineLock\");\r\n            ifcPSE.PropertyName = \"HasBreakLineLock\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasBreakLineLockCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeTensioningEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeTensioningEquipment.TensileStrength\", \"TensileStrength\");\r\n            ifcPSE.PropertyName = \"TensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeTensioningEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeTensioningEquipment.RatioOfWireTension\", \"RatioOfWireTension\");\r\n            ifcPSE.PropertyName = \"RatioOfWireTension\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatioOfWireTensionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeTensioningEquipment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryTypeTensioningEquipment.TransmissionEfficiency\", \"TransmissionEfficiency\");\r\n            ifcPSE.PropertyName = \"TransmissionEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransmissionEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryTypeTensioningEquipment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryTypeTensioningEquipment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DiscreteAccessoryWireLoop(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDiscreteAccessoryWireLoop = new PropertySetDescription();\r\n         propertySetDiscreteAccessoryWireLoop.Name = \"Pset_DiscreteAccessoryWireLoop\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryWireLoop\"))\r\n         {\r\n            propertySetDiscreteAccessoryWireLoop.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryWireLoop.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryWireLoop.ObjectType = \"IfcObject\";\r\n            propertySetDiscreteAccessoryWireLoop.PredefinedType = \" 'Wire loop'\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireLoopBasePlateThickness\", \"WireLoopBasePlateThickness\");\r\n            ifcPSE.PropertyName = \"WireLoopBasePlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireLoopBasePlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireLoopBasePlateWidth\", \"WireLoopBasePlateWidth\");\r\n            ifcPSE.PropertyName = \"WireLoopBasePlateWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireLoopBasePlateWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireLoopBasePlateLength\", \"WireLoopBasePlateLength\");\r\n            ifcPSE.PropertyName = \"WireLoopBasePlateLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireLoopBasePlateLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireDiameter\", \"WireDiameter\");\r\n            ifcPSE.PropertyName = \"WireDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireEmbeddingLength\", \"WireEmbeddingLength\");\r\n            ifcPSE.PropertyName = \"WireEmbeddingLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireEmbeddingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireLoopLength\", \"WireLoopLength\");\r\n            ifcPSE.PropertyName = \"WireLoopLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireLoopLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryWireLoop\"))\r\n         {\r\n            propertySetDiscreteAccessoryWireLoop.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryWireLoop.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryWireLoop.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryWireLoop.PredefinedType = \"Wire loop\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireLoopBasePlateThickness\", \"WireLoopBasePlateThickness\");\r\n            ifcPSE.PropertyName = \"WireLoopBasePlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireLoopBasePlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireLoopBasePlateWidth\", \"WireLoopBasePlateWidth\");\r\n            ifcPSE.PropertyName = \"WireLoopBasePlateWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireLoopBasePlateWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireLoopBasePlateLength\", \"WireLoopBasePlateLength\");\r\n            ifcPSE.PropertyName = \"WireLoopBasePlateLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireLoopBasePlateLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireDiameter\", \"WireDiameter\");\r\n            ifcPSE.PropertyName = \"WireDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireEmbeddingLength\", \"WireEmbeddingLength\");\r\n            ifcPSE.PropertyName = \"WireEmbeddingLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireEmbeddingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireLoopLength\", \"WireLoopLength\");\r\n            ifcPSE.PropertyName = \"WireLoopLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireLoopLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryWireLoop\"))\r\n         {\r\n            propertySetDiscreteAccessoryWireLoop.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryWireLoop.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetDiscreteAccessoryWireLoop.PredefinedType = \"Wire loop\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireLoopBasePlateThickness\", \"WireLoopBasePlateThickness\");\r\n            ifcPSE.PropertyName = \"WireLoopBasePlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wire Loop Base Plate Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ベースプレート厚\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"베이스 플레이트 두께\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireLoopBasePlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireLoopBasePlateWidth\", \"WireLoopBasePlateWidth\");\r\n            ifcPSE.PropertyName = \"WireLoopBasePlateWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wire Loop Base Plate Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ベースプレート幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"베이스 플레이트 폭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireLoopBasePlateWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireLoopBasePlateLength\", \"WireLoopBasePlateLength\");\r\n            ifcPSE.PropertyName = \"WireLoopBasePlateLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wire Loop Base Plate Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ベースプレート長さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"플레이트 길이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireLoopBasePlateLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireDiameter\", \"WireDiameter\");\r\n            ifcPSE.PropertyName = \"WireDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wire Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ワイヤー径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"와이어 지름\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireEmbeddingLength\", \"WireEmbeddingLength\");\r\n            ifcPSE.PropertyName = \"WireEmbeddingLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wire Embedding Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"埋め込み長さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"포함 길이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireEmbeddingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireLoopLength\", \"WireLoopLength\");\r\n            ifcPSE.PropertyName = \"WireLoopLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wire Loop Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"留め具長さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"클램프 길이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireLoopLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DiscreteAccessoryWireLoop\"))\r\n         {\r\n            propertySetDiscreteAccessoryWireLoop.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetDiscreteAccessoryWireLoop.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetDiscreteAccessoryWireLoop.ObjectType = \"IfcDiscreteAccessory\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireLoopBasePlateThickness\", \"WireLoopBasePlateThickness\");\r\n            ifcPSE.PropertyName = \"WireLoopBasePlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireLoopBasePlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireLoopBasePlateWidth\", \"WireLoopBasePlateWidth\");\r\n            ifcPSE.PropertyName = \"WireLoopBasePlateWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireLoopBasePlateWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireLoopBasePlateLength\", \"WireLoopBasePlateLength\");\r\n            ifcPSE.PropertyName = \"WireLoopBasePlateLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireLoopBasePlateLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireDiameter\", \"WireDiameter\");\r\n            ifcPSE.PropertyName = \"WireDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireEmbeddingLength\", \"WireEmbeddingLength\");\r\n            ifcPSE.PropertyName = \"WireEmbeddingLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireEmbeddingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DiscreteAccessoryWireLoop.WireLoopLength\", \"WireLoopLength\");\r\n            ifcPSE.PropertyName = \"WireLoopLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WireLoopLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDiscreteAccessoryWireLoop.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDiscreteAccessoryWireLoop);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionBoardOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionBoardOccurrence = new PropertySetDescription();\r\n         propertySetDistributionBoardOccurrence.Name = \"Pset_DistributionBoardOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionBoardOccurrence\"))\r\n         {\r\n            propertySetDistributionBoardOccurrence.EntityTypes.Add(IFCEntityType.IfcElectricDistributionBoard);\r\n            propertySetDistributionBoardOccurrence.ObjectType = \"IfcElectricDistributionBoard\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionBoardOccurrence.IsMain\", \"IsMain\");\r\n            ifcPSE.PropertyName = \"IsMain\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsMainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionBoardOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionBoardOccurrence.IsSkilledOperator\", \"IsSkilledOperator\");\r\n            ifcPSE.PropertyName = \"IsSkilledOperator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSkilledOperatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionBoardOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionBoardOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionBoardTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionBoardTypeCommon = new PropertySetDescription();\r\n         propertySetDistributionBoardTypeCommon.Name = \"Pset_DistributionBoardTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionBoardTypeCommon\"))\r\n         {\r\n            propertySetDistributionBoardTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricDistributionBoard);\r\n            propertySetDistributionBoardTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricDistributionBoardType);\r\n            propertySetDistributionBoardTypeCommon.ObjectType = \"IfcElectricDistributionBoard\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionBoardTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionBoardTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionBoardTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionBoardTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionBoardTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionBoardTypeDispatchingBoard(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionBoardTypeDispatchingBoard = new PropertySetDescription();\r\n         propertySetDistributionBoardTypeDispatchingBoard.Name = \"Pset_DistributionBoardTypeDispatchingBoard\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionBoardTypeDispatchingBoard\"))\r\n         {\r\n            propertySetDistributionBoardTypeDispatchingBoard.EntityTypes.Add(IFCEntityType.IfcDistributionBoard);\r\n            propertySetDistributionBoardTypeDispatchingBoard.EntityTypes.Add(IFCEntityType.IfcDistributionBoardType);\r\n            propertySetDistributionBoardTypeDispatchingBoard.ObjectType = \"IfcDistributionBoard\";\r\n            propertySetDistributionBoardTypeDispatchingBoard.PredefinedType = \"DISPATCHINGBOARD\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionBoardTypeDispatchingBoard.NumberOfInterfaces\", \"NumberOfInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionBoardTypeDispatchingBoard.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionBoardTypeDispatchingBoard.DispatchingBoardType\", \"DispatchingBoardType\");\r\n            ifcPSE.PropertyName = \"DispatchingBoardType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DispatchingBoardType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DispatchingBoardTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionBoardTypeDispatchingBoard.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionBoardTypeDispatchingBoard);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionBoardTypeDistributionFrame(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionBoardTypeDistributionFrame = new PropertySetDescription();\r\n         propertySetDistributionBoardTypeDistributionFrame.Name = \"Pset_DistributionBoardTypeDistributionFrame\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionBoardTypeDistributionFrame\"))\r\n         {\r\n            propertySetDistributionBoardTypeDistributionFrame.EntityTypes.Add(IFCEntityType.IfcDistributionBoard);\r\n            propertySetDistributionBoardTypeDistributionFrame.EntityTypes.Add(IFCEntityType.IfcDistributionBoardType);\r\n            propertySetDistributionBoardTypeDistributionFrame.ObjectType = \"IfcDistributionBoard\";\r\n            propertySetDistributionBoardTypeDistributionFrame.PredefinedType = \"DISTRIBUTIONFRAME\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionBoardTypeDistributionFrame.PortCapacity\", \"PortCapacity\");\r\n            ifcPSE.PropertyName = \"PortCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PortCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionBoardTypeDistributionFrame.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionBoardTypeDistributionFrame);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionChamberElementCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionChamberElementCommon = new PropertySetDescription();\r\n         propertySetDistributionChamberElementCommon.Name = \"Pset_DistributionChamberElementCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementCommon\"))\r\n         {\r\n            propertySetDistributionChamberElementCommon.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionChamberElementCommon.ObjectType = \"IfcDistributionChamberElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조 기호\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementCommon\"))\r\n         {\r\n            propertySetDistributionChamberElementCommon.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionChamberElementCommon.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementCommon.ObjectType = \"IfcDistributionChamberElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionChamberElementCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionChamberElementTypeFormedDuct(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionChamberElementTypeFormedDuct = new PropertySetDescription();\r\n         propertySetDistributionChamberElementTypeFormedDuct.Name = \"Pset_DistributionChamberElementTypeFormedDuct\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeFormedDuct\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeFormedDuct.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeFormedDuct.ObjectType = \"FormedDuct\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.ClearWidth\", \"ClearWidth\");\r\n            ifcPSE.PropertyName = \"ClearWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.ClearDepth\", \"ClearDepth\");\r\n            ifcPSE.PropertyName = \"ClearDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.WallMaterial\", \"WallMaterial\");\r\n            ifcPSE.PropertyName = \"WallMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.BaseMaterial\", \"BaseMaterial\");\r\n            ifcPSE.PropertyName = \"BaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.AccessCoverMaterial\", \"AccessCoverMaterial\");\r\n            ifcPSE.PropertyName = \"AccessCoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.AccessCoverLoadRating\", \"AccessCoverLoadRating\");\r\n            ifcPSE.PropertyName = \"AccessCoverLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.FillMaterial\", \"FillMaterial\");\r\n            ifcPSE.PropertyName = \"FillMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FillMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeFormedDuct\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeFormedDuct.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeFormedDuct.ObjectType = \"IfcDistributionChamberElementType\";\r\n            propertySetDistributionChamberElementTypeFormedDuct.PredefinedType = \"FORMEDDUCT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.ClearWidth\", \"ClearWidth\");\r\n            ifcPSE.PropertyName = \"ClearWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.ClearDepth\", \"ClearDepth\");\r\n            ifcPSE.PropertyName = \"ClearDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.WallMaterial\", \"WallMaterial\");\r\n            ifcPSE.PropertyName = \"WallMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.BaseMaterial\", \"BaseMaterial\");\r\n            ifcPSE.PropertyName = \"BaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.AccessCoverMaterial\", \"AccessCoverMaterial\");\r\n            ifcPSE.PropertyName = \"AccessCoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.AccessCoverLoadRating\", \"AccessCoverLoadRating\");\r\n            ifcPSE.PropertyName = \"AccessCoverLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.FillMaterial\", \"FillMaterial\");\r\n            ifcPSE.PropertyName = \"FillMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FillMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeFormedDuct\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeFormedDuct.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionChamberElementTypeFormedDuct.ObjectType = \"IfcDistributionChamberElement\";\r\n            propertySetDistributionChamberElementTypeFormedDuct.PredefinedType = \"FORMEDDUCT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.ClearWidth\", \"ClearWidth\");\r\n            ifcPSE.PropertyName = \"ClearWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Clear Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"幅員\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"폭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.ClearDepth\", \"ClearDepth\");\r\n            ifcPSE.PropertyName = \"ClearDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Clear Depth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"深さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"깊이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wall Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"壁の厚さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"벽 두께\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Base Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"基部の厚さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"바닥두께\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.AccessCoverLoadRating\", \"AccessCoverLoadRating\");\r\n            ifcPSE.PropertyName = \"AccessCoverLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Access Cover Load Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"アクセス（点検）カバーの耐荷重\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"사용(체크)커버 하중\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeFormedDuct\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeFormedDuct.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionChamberElementTypeFormedDuct.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeFormedDuct.ObjectType = \"IfcDistributionChamberElement\";\r\n            propertySetDistributionChamberElementTypeFormedDuct.PredefinedType = \"FORMEDDUCT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.ClearWidth\", \"ClearWidth\");\r\n            ifcPSE.PropertyName = \"ClearWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.ClearDepth\", \"ClearDepth\");\r\n            ifcPSE.PropertyName = \"ClearDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.AccessCoverLoadRating\", \"AccessCoverLoadRating\");\r\n            ifcPSE.PropertyName = \"AccessCoverLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeFormedDuct.CableDuctOccupancyRatio\", \"CableDuctOccupancyRatio\");\r\n            ifcPSE.PropertyName = \"CableDuctOccupancyRatio\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CableDuctOccupancyRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeFormedDuct.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionChamberElementTypeFormedDuct);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionChamberElementTypeInspectionChamber(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionChamberElementTypeInspectionChamber = new PropertySetDescription();\r\n         propertySetDistributionChamberElementTypeInspectionChamber.Name = \"Pset_DistributionChamberElementTypeInspectionChamber\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeInspectionChamber\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeInspectionChamber.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeInspectionChamber.ObjectType = \"InspectionChamber\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.ChamberLengthOrRadius\", \"ChamberLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"ChamberLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.ChamberWidth\", \"ChamberWidth\");\r\n            ifcPSE.PropertyName = \"ChamberWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.InvertLevel\", \"InvertLevel\");\r\n            ifcPSE.PropertyName = \"InvertLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.SoffitLevel\", \"SoffitLevel\");\r\n            ifcPSE.PropertyName = \"SoffitLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoffitLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.WallMaterial\", \"WallMaterial\");\r\n            ifcPSE.PropertyName = \"WallMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.BaseMaterial\", \"BaseMaterial\");\r\n            ifcPSE.PropertyName = \"BaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.WithBackdrop\", \"WithBackdrop\");\r\n            ifcPSE.PropertyName = \"WithBackdrop\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WithBackdropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.AccessCoverMaterial\", \"AccessCoverMaterial\");\r\n            ifcPSE.PropertyName = \"AccessCoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.AccessLengthOrRadius\", \"AccessLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"AccessLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.AccessWidth\", \"AccessWidth\");\r\n            ifcPSE.PropertyName = \"AccessWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.AccessCoverLoadRating\", \"AccessCoverLoadRating\");\r\n            ifcPSE.PropertyName = \"AccessCoverLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeInspectionChamber\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeInspectionChamber.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeInspectionChamber.ObjectType = \"IfcDistributionChamberElementType\";\r\n            propertySetDistributionChamberElementTypeInspectionChamber.PredefinedType = \"INSPECTIONCHAMBER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.ChamberLengthOrRadius\", \"ChamberLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"ChamberLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.ChamberWidth\", \"ChamberWidth\");\r\n            ifcPSE.PropertyName = \"ChamberWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.InvertLevel\", \"InvertLevel\");\r\n            ifcPSE.PropertyName = \"InvertLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.SoffitLevel\", \"SoffitLevel\");\r\n            ifcPSE.PropertyName = \"SoffitLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoffitLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.WallMaterial\", \"WallMaterial\");\r\n            ifcPSE.PropertyName = \"WallMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.BaseMaterial\", \"BaseMaterial\");\r\n            ifcPSE.PropertyName = \"BaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.WithBackdrop\", \"WithBackdrop\");\r\n            ifcPSE.PropertyName = \"WithBackdrop\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WithBackdropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.AccessCoverMaterial\", \"AccessCoverMaterial\");\r\n            ifcPSE.PropertyName = \"AccessCoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.AccessLengthOrRadius\", \"AccessLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"AccessLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.AccessWidth\", \"AccessWidth\");\r\n            ifcPSE.PropertyName = \"AccessWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.AccessCoverLoadRating\", \"AccessCoverLoadRating\");\r\n            ifcPSE.PropertyName = \"AccessCoverLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeInspectionChamber\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeInspectionChamber.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionChamberElementTypeInspectionChamber.ObjectType = \"IfcDistributionChamberElement\";\r\n            propertySetDistributionChamberElementTypeInspectionChamber.PredefinedType = \"INSPECTIONCHAMBER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.ChamberLengthOrRadius\", \"ChamberLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"ChamberLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Chamber Length Or Radius\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"チャンバー（バイブスペース？）の長さあるいは半径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"챔버 (파이프 공간)의 길이 또는 반경\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.ChamberWidth\", \"ChamberWidth\");\r\n            ifcPSE.PropertyName = \"ChamberWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Chamber Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"チャンバー（バイブスペース？）の幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"챔버 (파이프 공간)의 너비\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.InvertLevel\", \"InvertLevel\");\r\n            ifcPSE.PropertyName = \"InvertLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Invert Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最大深さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최대 깊이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.SoffitLevel\", \"SoffitLevel\");\r\n            ifcPSE.PropertyName = \"SoffitLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Soffit Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最小深さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최소깊이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoffitLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.WallMaterial\", \"WallMaterial\");\r\n            ifcPSE.PropertyName = \"WallMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wall Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"壁の材質\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"벽의 재질\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wall Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"壁厚さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"벽 두께\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.BaseMaterial\", \"BaseMaterial\");\r\n            ifcPSE.PropertyName = \"BaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Base Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"床の材質\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"바닥의 재질\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Base Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"床の厚さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"바닥의 두께\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.WithBackdrop\", \"WithBackdrop\");\r\n            ifcPSE.PropertyName = \"WithBackdrop\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"With Backdrop\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"バックドロップ付け\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"백 드롭 지정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WithBackdropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.AccessCoverMaterial\", \"AccessCoverMaterial\");\r\n            ifcPSE.PropertyName = \"AccessCoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Access Cover Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"アクセス（点検）カバーの材質\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"사용(체크)커버의 재질\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.AccessLengthOrRadius\", \"AccessLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"AccessLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Access Length Or Radius\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"アクセス（点検）カバーの長さ或いは半径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"사용(체크)덮개 길이 혹은 반경\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.AccessWidth\", \"AccessWidth\");\r\n            ifcPSE.PropertyName = \"AccessWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Access Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"アクセス（点検）カバーの幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"사용 (체크)커버 폭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.AccessCoverLoadRating\", \"AccessCoverLoadRating\");\r\n            ifcPSE.PropertyName = \"AccessCoverLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Access Cover Load Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"アクセス（点検）カバーの耐荷重\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"사용 (체크)커버 하중\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeInspectionChamber\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeInspectionChamber.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionChamberElementTypeInspectionChamber.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeInspectionChamber.ObjectType = \"IfcDistributionChamberElement\";\r\n            propertySetDistributionChamberElementTypeInspectionChamber.PredefinedType = \"INSPECTIONCHAMBER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.ChamberLengthOrRadius\", \"ChamberLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"ChamberLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.ChamberWidth\", \"ChamberWidth\");\r\n            ifcPSE.PropertyName = \"ChamberWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.InspectionChamberInvertLevel\", \"InspectionChamberInvertLevel\");\r\n            ifcPSE.PropertyName = \"InspectionChamberInvertLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InspectionChamberInvertLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.SoffitLevel\", \"SoffitLevel\");\r\n            ifcPSE.PropertyName = \"SoffitLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoffitLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.WallMaterial\", \"WallMaterial\");\r\n            ifcPSE.PropertyName = \"WallMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.BaseMaterial\", \"BaseMaterial\");\r\n            ifcPSE.PropertyName = \"BaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.WithBackdrop\", \"WithBackdrop\");\r\n            ifcPSE.PropertyName = \"WithBackdrop\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WithBackdropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.AccessCoverMaterial\", \"AccessCoverMaterial\");\r\n            ifcPSE.PropertyName = \"AccessCoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.AccessLengthOrRadius\", \"AccessLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"AccessLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.AccessWidth\", \"AccessWidth\");\r\n            ifcPSE.PropertyName = \"AccessWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionChamber.AccessCoverLoadRating\", \"AccessCoverLoadRating\");\r\n            ifcPSE.PropertyName = \"AccessCoverLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionChamber.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionChamberElementTypeInspectionChamber);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionChamberElementTypeInspectionPit(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionChamberElementTypeInspectionPit = new PropertySetDescription();\r\n         propertySetDistributionChamberElementTypeInspectionPit.Name = \"Pset_DistributionChamberElementTypeInspectionPit\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeInspectionPit\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeInspectionPit.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeInspectionPit.ObjectType = \"InspectionPit\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionPit.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionPit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionPit.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionPit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionPit.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionPit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeInspectionPit\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeInspectionPit.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeInspectionPit.ObjectType = \"IfcDistributionChamberElementType\";\r\n            propertySetDistributionChamberElementTypeInspectionPit.PredefinedType = \"INSPECTIONPIT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionPit.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionPit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionPit.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionPit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionPit.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionPit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeInspectionPit\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeInspectionPit.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionChamberElementTypeInspectionPit.ObjectType = \"IfcDistributionChamberElement\";\r\n            propertySetDistributionChamberElementTypeInspectionPit.PredefinedType = \"INSPECTIONPIT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionPit.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"길이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionPit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionPit.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"폭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionPit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionPit.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Depth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"深さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"깊이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionPit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeInspectionPit\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeInspectionPit.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionChamberElementTypeInspectionPit.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeInspectionPit.ObjectType = \"IfcDistributionChamberElement\";\r\n            propertySetDistributionChamberElementTypeInspectionPit.PredefinedType = \"INSPECTIONPIT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionPit.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionPit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionPit.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionPit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeInspectionPit.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeInspectionPit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionChamberElementTypeInspectionPit);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionChamberElementTypeManhole(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionChamberElementTypeManhole = new PropertySetDescription();\r\n         propertySetDistributionChamberElementTypeManhole.Name = \"Pset_DistributionChamberElementTypeManhole\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeManhole\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeManhole.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeManhole.ObjectType = \"Manhole\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.InvertLevel\", \"InvertLevel\");\r\n            ifcPSE.PropertyName = \"InvertLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.SoffitLevel\", \"SoffitLevel\");\r\n            ifcPSE.PropertyName = \"SoffitLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoffitLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.WallMaterial\", \"WallMaterial\");\r\n            ifcPSE.PropertyName = \"WallMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.BaseMaterial\", \"BaseMaterial\");\r\n            ifcPSE.PropertyName = \"BaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.IsShallow\", \"IsShallow\");\r\n            ifcPSE.PropertyName = \"IsShallow\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsShallowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.HasSteps\", \"HasSteps\");\r\n            ifcPSE.PropertyName = \"HasSteps\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasStepsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.WithBackdrop\", \"WithBackdrop\");\r\n            ifcPSE.PropertyName = \"WithBackdrop\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WithBackdropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.AccessCoverMaterial\", \"AccessCoverMaterial\");\r\n            ifcPSE.PropertyName = \"AccessCoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.AccessLengthOrRadius\", \"AccessLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"AccessLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.AccessWidth\", \"AccessWidth\");\r\n            ifcPSE.PropertyName = \"AccessWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.AccessCoverLoadRating\", \"AccessCoverLoadRating\");\r\n            ifcPSE.PropertyName = \"AccessCoverLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeManhole\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeManhole.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeManhole.ObjectType = \"IfcDistributionChamberElementType\";\r\n            propertySetDistributionChamberElementTypeManhole.PredefinedType = \"MANHOLE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.InvertLevel\", \"InvertLevel\");\r\n            ifcPSE.PropertyName = \"InvertLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.SoffitLevel\", \"SoffitLevel\");\r\n            ifcPSE.PropertyName = \"SoffitLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoffitLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.WallMaterial\", \"WallMaterial\");\r\n            ifcPSE.PropertyName = \"WallMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.BaseMaterial\", \"BaseMaterial\");\r\n            ifcPSE.PropertyName = \"BaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.IsShallow\", \"IsShallow\");\r\n            ifcPSE.PropertyName = \"IsShallow\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsShallowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.HasSteps\", \"HasSteps\");\r\n            ifcPSE.PropertyName = \"HasSteps\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasStepsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.WithBackdrop\", \"WithBackdrop\");\r\n            ifcPSE.PropertyName = \"WithBackdrop\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WithBackdropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.AccessCoverMaterial\", \"AccessCoverMaterial\");\r\n            ifcPSE.PropertyName = \"AccessCoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.AccessLengthOrRadius\", \"AccessLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"AccessLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.AccessWidth\", \"AccessWidth\");\r\n            ifcPSE.PropertyName = \"AccessWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.AccessCoverLoadRating\", \"AccessCoverLoadRating\");\r\n            ifcPSE.PropertyName = \"AccessCoverLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeManhole\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeManhole.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionChamberElementTypeManhole.ObjectType = \"IfcDistributionChamberElement\";\r\n            propertySetDistributionChamberElementTypeManhole.PredefinedType = \"MANHOLE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.InvertLevel\", \"InvertLevel\");\r\n            ifcPSE.PropertyName = \"InvertLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Invert Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最大深さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최대 깊이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.SoffitLevel\", \"SoffitLevel\");\r\n            ifcPSE.PropertyName = \"SoffitLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Soffit Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最小深さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최소깊이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoffitLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.WallMaterial\", \"WallMaterial\");\r\n            ifcPSE.PropertyName = \"WallMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wall Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"壁の材質\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"벽의 재질\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wall Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"壁厚さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"벽 두께\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.BaseMaterial\", \"BaseMaterial\");\r\n            ifcPSE.PropertyName = \"BaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Base Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"床の材質\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"바닥의 재질\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Base Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"床の厚さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"바닥의 두께\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.IsShallow\", \"IsShallow\");\r\n            ifcPSE.PropertyName = \"IsShallow\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Shallow\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"浅いか\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"덕트공간\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsShallowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.HasSteps\", \"HasSteps\");\r\n            ifcPSE.PropertyName = \"HasSteps\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Steps\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"階段付け\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"계단 지정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasStepsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.WithBackdrop\", \"WithBackdrop\");\r\n            ifcPSE.PropertyName = \"WithBackdrop\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"With Backdrop\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"バックドロップ付け\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"백 드롭 지정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WithBackdropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.AccessCoverMaterial\", \"AccessCoverMaterial\");\r\n            ifcPSE.PropertyName = \"AccessCoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Access Cover Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"アクセス（点検）カバーの材質\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"사용(체크)커버의 재질\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.AccessLengthOrRadius\", \"AccessLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"AccessLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Access Length Or Radius\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"アクセス（点検）カバーの長さ或いは半径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"사용(체크)덮개 길이 혹은 반경\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.AccessWidth\", \"AccessWidth\");\r\n            ifcPSE.PropertyName = \"AccessWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Access Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"アクセス（点検）カバーの幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"사용 (체크)커버 폭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.AccessCoverLoadRating\", \"AccessCoverLoadRating\");\r\n            ifcPSE.PropertyName = \"AccessCoverLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Access Cover Load Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"アクセス（点検）カバーの耐荷重\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"사용 (체크)커버 하중\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeManhole\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeManhole.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionChamberElementTypeManhole.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeManhole.ObjectType = \"IfcDistributionChamberElement\";\r\n            propertySetDistributionChamberElementTypeManhole.PredefinedType = \"MANHOLE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.InvertLevel\", \"InvertLevel\");\r\n            ifcPSE.PropertyName = \"InvertLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.SoffitLevel\", \"SoffitLevel\");\r\n            ifcPSE.PropertyName = \"SoffitLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoffitLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.WallMaterial\", \"WallMaterial\");\r\n            ifcPSE.PropertyName = \"WallMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.BaseMaterial\", \"BaseMaterial\");\r\n            ifcPSE.PropertyName = \"BaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.IsShallow\", \"IsShallow\");\r\n            ifcPSE.PropertyName = \"IsShallow\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsShallowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.HasSteps\", \"HasSteps\");\r\n            ifcPSE.PropertyName = \"HasSteps\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasStepsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.WithBackdrop\", \"WithBackdrop\");\r\n            ifcPSE.PropertyName = \"WithBackdrop\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WithBackdropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.AccessCoverMaterial\", \"AccessCoverMaterial\");\r\n            ifcPSE.PropertyName = \"AccessCoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.AccessLengthOrRadius\", \"AccessLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"AccessLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.AccessWidth\", \"AccessWidth\");\r\n            ifcPSE.PropertyName = \"AccessWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.AccessCoverLoadRating\", \"AccessCoverLoadRating\");\r\n            ifcPSE.PropertyName = \"AccessCoverLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.IsAccessibleOnFoot\", \"IsAccessibleOnFoot\");\r\n            ifcPSE.PropertyName = \"IsAccessibleOnFoot\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsAccessibleOnFootCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.IsLocked\", \"IsLocked\");\r\n            ifcPSE.PropertyName = \"IsLocked\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsLockedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.NumberOfCableEntries\", \"NumberOfCableEntries\");\r\n            ifcPSE.PropertyName = \"NumberOfCableEntries\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCableEntriesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.NumberOfManholeCovers\", \"NumberOfManholeCovers\");\r\n            ifcPSE.PropertyName = \"NumberOfManholeCovers\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfManholeCoversCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeManhole.TypeOfShaft\", \"TypeOfShaft\");\r\n            ifcPSE.PropertyName = \"TypeOfShaft\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TypeOfShaft);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeOfShaftCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeManhole.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionChamberElementTypeManhole);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionChamberElementTypeMeterChamber(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionChamberElementTypeMeterChamber = new PropertySetDescription();\r\n         propertySetDistributionChamberElementTypeMeterChamber.Name = \"Pset_DistributionChamberElementTypeMeterChamber\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeMeterChamber\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeMeterChamber.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeMeterChamber.ObjectType = \"MeterChamber\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.ChamberLengthOrRadius\", \"ChamberLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"ChamberLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.ChamberWidth\", \"ChamberWidth\");\r\n            ifcPSE.PropertyName = \"ChamberWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.WallMaterial\", \"WallMaterial\");\r\n            ifcPSE.PropertyName = \"WallMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.BaseMaterial\", \"BaseMaterial\");\r\n            ifcPSE.PropertyName = \"BaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.AccessCoverMaterial\", \"AccessCoverMaterial\");\r\n            ifcPSE.PropertyName = \"AccessCoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeMeterChamber\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeMeterChamber.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeMeterChamber.ObjectType = \"IfcDistributionChamberElementType\";\r\n            propertySetDistributionChamberElementTypeMeterChamber.PredefinedType = \"METERCHAMBER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.ChamberLengthOrRadius\", \"ChamberLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"ChamberLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.ChamberWidth\", \"ChamberWidth\");\r\n            ifcPSE.PropertyName = \"ChamberWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.WallMaterial\", \"WallMaterial\");\r\n            ifcPSE.PropertyName = \"WallMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.BaseMaterial\", \"BaseMaterial\");\r\n            ifcPSE.PropertyName = \"BaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.AccessCoverMaterial\", \"AccessCoverMaterial\");\r\n            ifcPSE.PropertyName = \"AccessCoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeMeterChamber\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeMeterChamber.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionChamberElementTypeMeterChamber.ObjectType = \"IfcDistributionChamberElement\";\r\n            propertySetDistributionChamberElementTypeMeterChamber.PredefinedType = \"METERCHAMBER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.ChamberLengthOrRadius\", \"ChamberLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"ChamberLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Chamber Length Or Radius\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"チャンバーの長さあるいは半径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"챔버의 길이 또는 반경\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.ChamberWidth\", \"ChamberWidth\");\r\n            ifcPSE.PropertyName = \"ChamberWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Chamber Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"チャンバーの幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"챔버의 폭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.WallMaterial\", \"WallMaterial\");\r\n            ifcPSE.PropertyName = \"WallMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wall Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"壁の材質\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"벽의 재질\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wall Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"壁厚さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"벽 두께\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.BaseMaterial\", \"BaseMaterial\");\r\n            ifcPSE.PropertyName = \"BaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Base Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"床の材質\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"바닥의 ​​재질\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Base Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"床の厚さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"바닥의 두께\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.AccessCoverMaterial\", \"AccessCoverMaterial\");\r\n            ifcPSE.PropertyName = \"AccessCoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Access Cover Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"アクセス（点検）カバーの材質\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"사용 (체크) 커버의 재질\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeMeterChamber\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeMeterChamber.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionChamberElementTypeMeterChamber.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeMeterChamber.ObjectType = \"IfcDistributionChamberElement\";\r\n            propertySetDistributionChamberElementTypeMeterChamber.PredefinedType = \"METERCHAMBER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.ChamberLengthOrRadius\", \"ChamberLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"ChamberLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.ChamberWidth\", \"ChamberWidth\");\r\n            ifcPSE.PropertyName = \"ChamberWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.WallMaterial\", \"WallMaterial\");\r\n            ifcPSE.PropertyName = \"WallMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.BaseMaterial\", \"BaseMaterial\");\r\n            ifcPSE.PropertyName = \"BaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeMeterChamber.AccessCoverMaterial\", \"AccessCoverMaterial\");\r\n            ifcPSE.PropertyName = \"AccessCoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeMeterChamber.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionChamberElementTypeMeterChamber);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionChamberElementTypeSump(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionChamberElementTypeSump = new PropertySetDescription();\r\n         propertySetDistributionChamberElementTypeSump.Name = \"Pset_DistributionChamberElementTypeSump\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeSump\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeSump.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeSump.ObjectType = \"Sump\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeSump.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeSump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeSump.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeSump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeSump.InvertLevel\", \"InvertLevel\");\r\n            ifcPSE.PropertyName = \"InvertLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeSump.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeSump\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeSump.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeSump.ObjectType = \"IfcDistributionChamberElementType\";\r\n            propertySetDistributionChamberElementTypeSump.PredefinedType = \"SUMP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeSump.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeSump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeSump.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeSump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeSump.InvertLevel\", \"InvertLevel\");\r\n            ifcPSE.PropertyName = \"InvertLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeSump.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeSump\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeSump.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionChamberElementTypeSump.ObjectType = \"IfcDistributionChamberElement\";\r\n            propertySetDistributionChamberElementTypeSump.PredefinedType = \"SUMP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeSump.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"길이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeSump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeSump.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"폭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeSump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeSump.InvertLevel\", \"InvertLevel\");\r\n            ifcPSE.PropertyName = \"InvertLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Invert Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最大深さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최대 깊이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeSump.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeSump\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeSump.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionChamberElementTypeSump.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeSump.ObjectType = \"IfcDistributionChamberElement\";\r\n            propertySetDistributionChamberElementTypeSump.PredefinedType = \"SUMP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeSump.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeSump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeSump.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeSump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeSump.SumpInvertLevel\", \"SumpInvertLevel\");\r\n            ifcPSE.PropertyName = \"SumpInvertLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SumpInvertLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeSump.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionChamberElementTypeSump);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionChamberElementTypeTrench(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionChamberElementTypeTrench = new PropertySetDescription();\r\n         propertySetDistributionChamberElementTypeTrench.Name = \"Pset_DistributionChamberElementTypeTrench\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeTrench\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeTrench.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeTrench.ObjectType = \"Trench\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeTrench.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeTrench.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeTrench.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeTrench.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeTrench.InvertLevel\", \"InvertLevel\");\r\n            ifcPSE.PropertyName = \"InvertLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeTrench.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeTrench\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeTrench.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeTrench.ObjectType = \"IfcDistributionChamberElementType\";\r\n            propertySetDistributionChamberElementTypeTrench.PredefinedType = \"TRENCH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeTrench.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeTrench.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeTrench.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeTrench.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeTrench.InvertLevel\", \"InvertLevel\");\r\n            ifcPSE.PropertyName = \"InvertLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeTrench.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeTrench\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeTrench.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionChamberElementTypeTrench.ObjectType = \"IfcDistributionChamberElement\";\r\n            propertySetDistributionChamberElementTypeTrench.PredefinedType = \"TRENCH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeTrench.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"길이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeTrench.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeTrench.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Depth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"폭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeTrench.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeTrench.InvertLevel\", \"InvertLevel\");\r\n            ifcPSE.PropertyName = \"InvertLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Invert Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最大深さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최대 깊이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeTrench.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeTrench\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeTrench.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionChamberElementTypeTrench.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeTrench.ObjectType = \"IfcDistributionChamberElement\";\r\n            propertySetDistributionChamberElementTypeTrench.PredefinedType = \"TRENCH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeTrench.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeTrench.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeTrench.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeTrench.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeTrench.InvertLevel\", \"InvertLevel\");\r\n            ifcPSE.PropertyName = \"InvertLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeTrench.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionChamberElementTypeTrench);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionChamberElementTypeValveChamber(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionChamberElementTypeValveChamber = new PropertySetDescription();\r\n         propertySetDistributionChamberElementTypeValveChamber.Name = \"Pset_DistributionChamberElementTypeValveChamber\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeValveChamber\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeValveChamber.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeValveChamber.ObjectType = \"ValveChamber\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.ChamberLengthOrRadius\", \"ChamberLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"ChamberLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.ChamberWidth\", \"ChamberWidth\");\r\n            ifcPSE.PropertyName = \"ChamberWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.WallMaterial\", \"WallMaterial\");\r\n            ifcPSE.PropertyName = \"WallMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.BaseMaterial\", \"BaseMaterial\");\r\n            ifcPSE.PropertyName = \"BaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.AccessCoverMaterial\", \"AccessCoverMaterial\");\r\n            ifcPSE.PropertyName = \"AccessCoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeValveChamber\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeValveChamber.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeValveChamber.ObjectType = \"IfcDistributionChamberElementType\";\r\n            propertySetDistributionChamberElementTypeValveChamber.PredefinedType = \"VALVECHAMBER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.ChamberLengthOrRadius\", \"ChamberLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"ChamberLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.ChamberWidth\", \"ChamberWidth\");\r\n            ifcPSE.PropertyName = \"ChamberWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.WallMaterial\", \"WallMaterial\");\r\n            ifcPSE.PropertyName = \"WallMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.BaseMaterial\", \"BaseMaterial\");\r\n            ifcPSE.PropertyName = \"BaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.AccessCoverMaterial\", \"AccessCoverMaterial\");\r\n            ifcPSE.PropertyName = \"AccessCoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeValveChamber\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeValveChamber.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionChamberElementTypeValveChamber.ObjectType = \"IfcDistributionChamberElement\";\r\n            propertySetDistributionChamberElementTypeValveChamber.PredefinedType = \"VALVECHAMBER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.ChamberLengthOrRadius\", \"ChamberLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"ChamberLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Chamber Length Or Radius\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"チャンバーの長さあるいは半径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"챔버의 길이 또는 반경\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.ChamberWidth\", \"ChamberWidth\");\r\n            ifcPSE.PropertyName = \"ChamberWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Chamber Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"チャンバー幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"챔버의 너비\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.WallMaterial\", \"WallMaterial\");\r\n            ifcPSE.PropertyName = \"WallMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wall Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"壁の材質\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"벽의 재질\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wall Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"壁厚さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"벽 두께\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.BaseMaterial\", \"BaseMaterial\");\r\n            ifcPSE.PropertyName = \"BaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Base Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"床の材質\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"바닥의 재질\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Base Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"床の厚さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"바닥의 두께\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.AccessCoverMaterial\", \"AccessCoverMaterial\");\r\n            ifcPSE.PropertyName = \"AccessCoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Access Cover Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"アクセス（点検）カバーの材質\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"사용(체크)커버의 재질\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionChamberElementTypeValveChamber\"))\r\n         {\r\n            propertySetDistributionChamberElementTypeValveChamber.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionChamberElementTypeValveChamber.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetDistributionChamberElementTypeValveChamber.ObjectType = \"IfcDistributionChamberElement\";\r\n            propertySetDistributionChamberElementTypeValveChamber.PredefinedType = \"VALVECHAMBER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.ChamberLengthOrRadius\", \"ChamberLengthOrRadius\");\r\n            ifcPSE.PropertyName = \"ChamberLengthOrRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberLengthOrRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.ChamberWidth\", \"ChamberWidth\");\r\n            ifcPSE.PropertyName = \"ChamberWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChamberWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.WallMaterial\", \"WallMaterial\");\r\n            ifcPSE.PropertyName = \"WallMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.WallThickness\", \"WallThickness\");\r\n            ifcPSE.PropertyName = \"WallThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.BaseMaterial\", \"BaseMaterial\");\r\n            ifcPSE.PropertyName = \"BaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.BaseThickness\", \"BaseThickness\");\r\n            ifcPSE.PropertyName = \"BaseThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionChamberElementTypeValveChamber.AccessCoverMaterial\", \"AccessCoverMaterial\");\r\n            ifcPSE.PropertyName = \"AccessCoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessCoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionChamberElementTypeValveChamber.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionChamberElementTypeValveChamber);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionFlowElementCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionFlowElementCommon = new PropertySetDescription();\r\n         propertySetDistributionFlowElementCommon.Name = \"Pset_DistributionFlowElementCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionFlowElementCommon\"))\r\n         {\r\n            propertySetDistributionFlowElementCommon.EntityTypes.Add(IFCEntityType.IfcDistributionFlowElement);\r\n            propertySetDistributionFlowElementCommon.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetDistributionFlowElementCommon.EntityTypes.Add(IFCEntityType.IfcEnergyConversionDevice);\r\n            propertySetDistributionFlowElementCommon.EntityTypes.Add(IFCEntityType.IfcFlowController);\r\n            propertySetDistributionFlowElementCommon.EntityTypes.Add(IFCEntityType.IfcFlowFitting);\r\n            propertySetDistributionFlowElementCommon.EntityTypes.Add(IFCEntityType.IfcFlowMovingDevice);\r\n            propertySetDistributionFlowElementCommon.EntityTypes.Add(IFCEntityType.IfcFlowSegment);\r\n            propertySetDistributionFlowElementCommon.EntityTypes.Add(IFCEntityType.IfcFlowStorageDevice);\r\n            propertySetDistributionFlowElementCommon.EntityTypes.Add(IFCEntityType.IfcFlowTerminal);\r\n            propertySetDistributionFlowElementCommon.EntityTypes.Add(IFCEntityType.IfcFlowTreatmentDevice);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionFlowElementCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionFlowElementCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionFlowElementCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionPortCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionPortCommon = new PropertySetDescription();\r\n         propertySetDistributionPortCommon.Name = \"Pset_DistributionPortCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionPortCommon\"))\r\n         {\r\n            propertySetDistributionPortCommon.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            propertySetDistributionPortCommon.ObjectType = \"IfcDistributionPort\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortCommon.PortNumber\", \"PortNumber\");\r\n            ifcPSE.PropertyName = \"PortNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Port Number\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ポート番号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"포트 번호\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PortNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortCommon.ColorCode\", \"ColorCode\");\r\n            ifcPSE.PropertyName = \"ColorCode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Color Code\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"色番号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"색상번호\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionPortCommon\"))\r\n         {\r\n            propertySetDistributionPortCommon.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            propertySetDistributionPortCommon.ObjectType = \"IfcDistributionPort\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortCommon.PortNumber\", \"PortNumber\");\r\n            ifcPSE.PropertyName = \"PortNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PortNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortCommon.ColourCode\", \"ColourCode\");\r\n            ifcPSE.PropertyName = \"ColourCode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColourCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionPortCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionPortDuct(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionPortDuct = new PropertySetDescription();\r\n         propertySetDistributionPortDuct.Name = \"Pset_DistributionPortDuct\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionPortDuct\"))\r\n         {\r\n            propertySetDistributionPortDuct.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortDuct.PortNumber\", \"PortNumber\");\r\n            ifcPSE.PropertyName = \"PortNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PortNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortDuct.ConnectionType\", \"ConnectionType\");\r\n            ifcPSE.PropertyName = \"ConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_DuctConnectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortDuct.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionPortDuct\"))\r\n         {\r\n            propertySetDistributionPortDuct.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortDuct.PortNumber\", \"PortNumber\");\r\n            ifcPSE.PropertyName = \"PortNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PortNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortDuct.ConnectionType\", \"ConnectionType\");\r\n            ifcPSE.PropertyName = \"ConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_DuctConnectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortDuct.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionPortDuct);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionPortPHistoryCable(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionPortPHistoryCable = new PropertySetDescription();\r\n         propertySetDistributionPortPHistoryCable.Name = \"Pset_DistributionPortPHistoryCable\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionPortPHistoryCable\"))\r\n         {\r\n            propertySetDistributionPortPHistoryCable.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            propertySetDistributionPortPHistoryCable.ObjectType = \"IfcDistributionPort\";\r\n            propertySetDistributionPortPHistoryCable.PredefinedType = \"CABLE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryCable.Current\", \"Current\");\r\n            ifcPSE.PropertyName = \"Current\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Current\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電流\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryCable.Voltage\", \"Voltage\");\r\n            ifcPSE.PropertyName = \"Voltage\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Voltage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電圧\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryCable.RealPower\", \"RealPower\");\r\n            ifcPSE.PropertyName = \"RealPower\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Real Power\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"有効電力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RealPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryCable.ReactivePower\", \"ReactivePower\");\r\n            ifcPSE.PropertyName = \"ReactivePower\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reactive Power\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"無効電力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReactivePowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryCable.ApparentPower\", \"ApparentPower\");\r\n            ifcPSE.PropertyName = \"ApparentPower\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Apparent Power\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"皮相電力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApparentPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryCable.PowerFactor\", \"PowerFactor\");\r\n            ifcPSE.PropertyName = \"PowerFactor\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Power Factor\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"パワーファクタ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryCable.DataTransmitted\", \"DataTransmitted\");\r\n            ifcPSE.PropertyName = \"DataTransmitted\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Data Transmitted\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"発信\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DataTransmittedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryCable.DataReceived\", \"DataReceived\");\r\n            ifcPSE.PropertyName = \"DataReceived\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Data Received\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"受信\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DataReceivedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryCable.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionPortPHistoryCable\"))\r\n         {\r\n            propertySetDistributionPortPHistoryCable.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            propertySetDistributionPortPHistoryCable.ObjectType = \"IfcDistributionPort\";\r\n            propertySetDistributionPortPHistoryCable.PredefinedType = \"CABLE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryCable.CurrentHistory\", \"CurrentHistory\");\r\n            ifcPSE.PropertyName = \"CurrentHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryCable.VoltageHistory\", \"VoltageHistory\");\r\n            ifcPSE.PropertyName = \"VoltageHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryCable.RealPower\", \"RealPower\");\r\n            ifcPSE.PropertyName = \"RealPower\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RealPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryCable.ReactivePower\", \"ReactivePower\");\r\n            ifcPSE.PropertyName = \"ReactivePower\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReactivePowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryCable.ApparentPower\", \"ApparentPower\");\r\n            ifcPSE.PropertyName = \"ApparentPower\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApparentPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryCable.PowerFactorHistory\", \"PowerFactorHistory\");\r\n            ifcPSE.PropertyName = \"PowerFactorHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerFactorHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryCable.DataTransmitted\", \"DataTransmitted\");\r\n            ifcPSE.PropertyName = \"DataTransmitted\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DataTransmittedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryCable.DataReceived\", \"DataReceived\");\r\n            ifcPSE.PropertyName = \"DataReceived\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DataReceivedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryCable.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionPortPHistoryCable);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionPortPHistoryDuct(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionPortPHistoryDuct = new PropertySetDescription();\r\n         propertySetDistributionPortPHistoryDuct.Name = \"Pset_DistributionPortPHistoryDuct\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionPortPHistoryDuct\"))\r\n         {\r\n            propertySetDistributionPortPHistoryDuct.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            propertySetDistributionPortPHistoryDuct.ObjectType = \"IfcDistributionPort\";\r\n            propertySetDistributionPortPHistoryDuct.PredefinedType = \"DUCT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryDuct.Temperature\", \"Temperature\");\r\n            ifcPSE.PropertyName = \"Temperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryDuct.WetBulbTemperature\", \"WetBulbTemperature\");\r\n            ifcPSE.PropertyName = \"WetBulbTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wet Bulb Temperature\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WetBulbTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryDuct.VolumetricFlowRate\", \"VolumetricFlowRate\");\r\n            ifcPSE.PropertyName = \"VolumetricFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Volumetric Flow Rate\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumetricFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryDuct.MassFlowRate\", \"MassFlowRate\");\r\n            ifcPSE.PropertyName = \"MassFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mass Flow Rate\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MassFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryDuct.FlowCondition\", \"FlowCondition\");\r\n            ifcPSE.PropertyName = \"FlowCondition\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flow Condition\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowConditionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryDuct.Velocity\", \"Velocity\");\r\n            ifcPSE.PropertyName = \"Velocity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Velocity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryDuct.Pressure\", \"Pressure\");\r\n            ifcPSE.PropertyName = \"Pressure\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryDuct.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionPortPHistoryDuct\"))\r\n         {\r\n            propertySetDistributionPortPHistoryDuct.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            propertySetDistributionPortPHistoryDuct.ObjectType = \"IfcDistributionPort\";\r\n            propertySetDistributionPortPHistoryDuct.PredefinedType = \"DUCT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryDuct.TemperatureHistory\", \"TemperatureHistory\");\r\n            ifcPSE.PropertyName = \"TemperatureHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryDuct.WetBulbTemperatureHistory\", \"WetBulbTemperatureHistory\");\r\n            ifcPSE.PropertyName = \"WetBulbTemperatureHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WetBulbTemperatureHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryDuct.VolumetricFlowRateHistory\", \"VolumetricFlowRateHistory\");\r\n            ifcPSE.PropertyName = \"VolumetricFlowRateHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumetricFlowRateHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryDuct.MassFlowRateHistory\", \"MassFlowRateHistory\");\r\n            ifcPSE.PropertyName = \"MassFlowRateHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MassFlowRateHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryDuct.FlowConditionHistory\", \"FlowConditionHistory\");\r\n            ifcPSE.PropertyName = \"FlowConditionHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowConditionHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryDuct.VelocityHistory\", \"VelocityHistory\");\r\n            ifcPSE.PropertyName = \"VelocityHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VelocityHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryDuct.PressureHisotry\", \"PressureHisotry\");\r\n            ifcPSE.PropertyName = \"PressureHisotry\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureHisotryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryDuct.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionPortPHistoryDuct);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionPortPHistoryPipe(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionPortPHistoryPipe = new PropertySetDescription();\r\n         propertySetDistributionPortPHistoryPipe.Name = \"Pset_DistributionPortPHistoryPipe\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionPortPHistoryPipe\"))\r\n         {\r\n            propertySetDistributionPortPHistoryPipe.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            propertySetDistributionPortPHistoryPipe.ObjectType = \"IfcDistributionPort\";\r\n            propertySetDistributionPortPHistoryPipe.PredefinedType = \"PIPE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryPipe.Temperature\", \"Temperature\");\r\n            ifcPSE.PropertyName = \"Temperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"温度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryPipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryPipe.Pressure\", \"Pressure\");\r\n            ifcPSE.PropertyName = \"Pressure\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryPipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryPipe.Flowrate\", \"Flowrate\");\r\n            ifcPSE.PropertyName = \"Flowrate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flowrate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryPipe.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionPortPHistoryPipe\"))\r\n         {\r\n            propertySetDistributionPortPHistoryPipe.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            propertySetDistributionPortPHistoryPipe.ObjectType = \"IfcDistributionPort\";\r\n            propertySetDistributionPortPHistoryPipe.PredefinedType = \"PIPE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryPipe.Temperature\", \"Temperature\");\r\n            ifcPSE.PropertyName = \"Temperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryPipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryPipe.Pressure\", \"Pressure\");\r\n            ifcPSE.PropertyName = \"Pressure\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryPipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPHistoryPipe.Flowrate\", \"Flowrate\");\r\n            ifcPSE.PropertyName = \"Flowrate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPHistoryPipe.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionPortPHistoryPipe);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionPortPipe(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionPortPipe = new PropertySetDescription();\r\n         propertySetDistributionPortPipe.Name = \"Pset_DistributionPortPipe\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionPortPipe\"))\r\n         {\r\n            propertySetDistributionPortPipe.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPipe.PortNumber\", \"PortNumber\");\r\n            ifcPSE.PropertyName = \"PortNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PortNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPipe.EndStyleTreatment\", \"EndStyleTreatment\");\r\n            ifcPSE.PropertyName = \"EndStyleTreatment\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_PipeEndStyleTreatment);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndStyleTreatmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPipe.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionPortPipe\"))\r\n         {\r\n            propertySetDistributionPortPipe.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPipe.PortNumber\", \"PortNumber\");\r\n            ifcPSE.PropertyName = \"PortNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PortNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortPipe.ConnectionType\", \"ConnectionType\");\r\n            ifcPSE.PropertyName = \"ConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_PipeEndStyleTreatment);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortPipe.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionPortPipe);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionPortTypeCable(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionPortTypeCable = new PropertySetDescription();\r\n         propertySetDistributionPortTypeCable.Name = \"Pset_DistributionPortTypeCable\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionPortTypeCable\"))\r\n         {\r\n            propertySetDistributionPortTypeCable.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            propertySetDistributionPortTypeCable.ObjectType = \"IfcDistributionPort\";\r\n            propertySetDistributionPortTypeCable.PredefinedType = \"CABLE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.ConnectionType\", \"ConnectionType\");\r\n            ifcPSE.PropertyName = \"ConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_DistributionPortElectricalType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Connection Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"接続タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.ConnectionSubtype\", \"ConnectionSubtype\");\r\n            ifcPSE.PropertyName = \"ConnectionSubtype\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Connection Subtype\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"接続サブタイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSubtypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.ConnectionGender\", \"ConnectionGender\");\r\n            ifcPSE.PropertyName = \"ConnectionGender\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ConnectionGender);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Connection Gender\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"接続ジェンダー\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionGenderCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.ConductorFunction\", \"ConductorFunction\");\r\n            ifcPSE.PropertyName = \"ConductorFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ConductorFunction);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Conductor Function\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電線種類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConductorFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.CurrentContent3rdHarmonic\", \"CurrentContent3rdHarmonic\");\r\n            ifcPSE.PropertyName = \"CurrentContent3rdHarmonic\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Current Content3rd Harmonic\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"第３高調波電流と相電流の比\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentContent3rdHarmonicCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.Current\", \"Current\");\r\n            ifcPSE.PropertyName = \"Current\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Current\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電流\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.Voltage\", \"Voltage\");\r\n            ifcPSE.PropertyName = \"Voltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Voltage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電圧\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.Power\", \"Power\");\r\n            ifcPSE.PropertyName = \"Power\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Power\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.Protocols\", \"Protocols\");\r\n            ifcPSE.PropertyName = \"Protocols\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Protocols\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"プロトコル\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProtocolsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionPortTypeCable\"))\r\n         {\r\n            propertySetDistributionPortTypeCable.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            propertySetDistributionPortTypeCable.ObjectType = \"IfcDistributionPort\";\r\n            propertySetDistributionPortTypeCable.PredefinedType = \"CABLE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.ElectricalConnectionType\", \"ElectricalConnectionType\");\r\n            ifcPSE.PropertyName = \"ElectricalConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DistributionPortElectricalType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricalConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.ConnectionSubtype\", \"ConnectionSubtype\");\r\n            ifcPSE.PropertyName = \"ConnectionSubtype\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSubtypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.ConnectionGender\", \"ConnectionGender\");\r\n            ifcPSE.PropertyName = \"ConnectionGender\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DistributionPortGender);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionGenderCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.ConductorFunction\", \"ConductorFunction\");\r\n            ifcPSE.PropertyName = \"ConductorFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ConductorFunctionEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConductorFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.CurrentContent3rdHarmonic\", \"CurrentContent3rdHarmonic\");\r\n            ifcPSE.PropertyName = \"CurrentContent3rdHarmonic\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentContent3rdHarmonicCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.Current\", \"Current\");\r\n            ifcPSE.PropertyName = \"Current\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.Voltage\", \"Voltage\");\r\n            ifcPSE.PropertyName = \"Voltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.Power\", \"Power\");\r\n            ifcPSE.PropertyName = \"Power\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.Protocols\", \"Protocols\");\r\n            ifcPSE.PropertyName = \"Protocols\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProtocolsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.HasConnector\", \"HasConnector\");\r\n            ifcPSE.PropertyName = \"HasConnector\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasConnectorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeCable.IsWelded\", \"IsWelded\");\r\n            ifcPSE.PropertyName = \"IsWelded\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsWeldedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeCable.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionPortTypeCable);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionPortTypeDuct(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionPortTypeDuct = new PropertySetDescription();\r\n         propertySetDistributionPortTypeDuct.Name = \"Pset_DistributionPortTypeDuct\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionPortTypeDuct\"))\r\n         {\r\n            propertySetDistributionPortTypeDuct.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            propertySetDistributionPortTypeDuct.ObjectType = \"IfcDistributionPort\";\r\n            propertySetDistributionPortTypeDuct.PredefinedType = \"DUCT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.ConnectionType\", \"ConnectionType\");\r\n            ifcPSE.PropertyName = \"ConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_DuctConnectionType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Connection Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.ConnectionSubType\", \"ConnectionSubType\");\r\n            ifcPSE.PropertyName = \"ConnectionSubType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Connection Sub Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSubTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Width\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Height\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.NominalThickness\", \"NominalThickness\");\r\n            ifcPSE.PropertyName = \"NominalThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Thickness\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.DryBulbTemperature\", \"DryBulbTemperature\");\r\n            ifcPSE.PropertyName = \"DryBulbTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Dry Bulb Temperature\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DryBulbTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.WetBulbTemperature\", \"WetBulbTemperature\");\r\n            ifcPSE.PropertyName = \"WetBulbTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wet Bulb Temperature\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WetBulbTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.VolumetricFlowRate\", \"VolumetricFlowRate\");\r\n            ifcPSE.PropertyName = \"VolumetricFlowRate\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Volumetric Flow Rate\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumetricFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.Velocity\", \"Velocity\");\r\n            ifcPSE.PropertyName = \"Velocity\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Velocity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.Pressure\", \"Pressure\");\r\n            ifcPSE.PropertyName = \"Pressure\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionPortTypeDuct\"))\r\n         {\r\n            propertySetDistributionPortTypeDuct.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            propertySetDistributionPortTypeDuct.ObjectType = \"IfcDistributionPort\";\r\n            propertySetDistributionPortTypeDuct.PredefinedType = \"DUCT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.ConnectionType\", \"ConnectionType\");\r\n            ifcPSE.PropertyName = \"ConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DuctConnectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.ConnectionSubtype\", \"ConnectionSubtype\");\r\n            ifcPSE.PropertyName = \"ConnectionSubtype\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSubtypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.NominalThickness\", \"NominalThickness\");\r\n            ifcPSE.PropertyName = \"NominalThickness\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.DryBulbTemperature\", \"DryBulbTemperature\");\r\n            ifcPSE.PropertyName = \"DryBulbTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DryBulbTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.WetBulbTemperature\", \"WetBulbTemperature\");\r\n            ifcPSE.PropertyName = \"WetBulbTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WetBulbTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.VolumetricFlowRate\", \"VolumetricFlowRate\");\r\n            ifcPSE.PropertyName = \"VolumetricFlowRate\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumetricFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.Velocity\", \"Velocity\");\r\n            ifcPSE.PropertyName = \"Velocity\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypeDuct.Pressure\", \"Pressure\");\r\n            ifcPSE.PropertyName = \"Pressure\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypeDuct.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionPortTypeDuct);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionPortTypePipe(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionPortTypePipe = new PropertySetDescription();\r\n         propertySetDistributionPortTypePipe.Name = \"Pset_DistributionPortTypePipe\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionPortTypePipe\"))\r\n         {\r\n            propertySetDistributionPortTypePipe.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            propertySetDistributionPortTypePipe.ObjectType = \"IfcDistributionPort\";\r\n            propertySetDistributionPortTypePipe.PredefinedType = \"PIPE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.ConnectionType\", \"ConnectionType\");\r\n            ifcPSE.PropertyName = \"ConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_PipeEndStyleTreatment);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Connection Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"接続タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.ConnectionSubType\", \"ConnectionSubType\");\r\n            ifcPSE.PropertyName = \"ConnectionSubType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Connection Sub Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"接続サブタイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSubTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.NominalDiameter\", \"NominalDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"呼び径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.InnerDiameter\", \"InnerDiameter\");\r\n            ifcPSE.PropertyName = \"InnerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Inner Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"内径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InnerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.OuterDiameter\", \"OuterDiameter\");\r\n            ifcPSE.PropertyName = \"OuterDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outer Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.Temperature\", \"Temperature\");\r\n            ifcPSE.PropertyName = \"Temperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"温度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.VolumetricFlowRate\", \"VolumetricFlowRate\");\r\n            ifcPSE.PropertyName = \"VolumetricFlowRate\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Volumetric Flow Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"体積流量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumetricFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.MassFlowRate\", \"MassFlowRate\");\r\n            ifcPSE.PropertyName = \"MassFlowRate\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.MassFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mass Flow Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"質量流量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MassFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.FlowCondition\", \"FlowCondition\");\r\n            ifcPSE.PropertyName = \"FlowCondition\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flow Condition\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流動状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowConditionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.Velocity\", \"Velocity\");\r\n            ifcPSE.PropertyName = \"Velocity\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Velocity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"速度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.Pressure\", \"Pressure\");\r\n            ifcPSE.PropertyName = \"Pressure\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionPortTypePipe\"))\r\n         {\r\n            propertySetDistributionPortTypePipe.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            propertySetDistributionPortTypePipe.ObjectType = \"IfcDistributionPort\";\r\n            propertySetDistributionPortTypePipe.PredefinedType = \"PIPE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.ConnectionType\", \"ConnectionType\");\r\n            ifcPSE.PropertyName = \"ConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_PipeEndStyleTreatment);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.ConnectionSubtype\", \"ConnectionSubtype\");\r\n            ifcPSE.PropertyName = \"ConnectionSubtype\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSubtypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.NominalDiameter\", \"NominalDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.InnerDiameter\", \"InnerDiameter\");\r\n            ifcPSE.PropertyName = \"InnerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InnerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.OuterDiameter\", \"OuterDiameter\");\r\n            ifcPSE.PropertyName = \"OuterDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.Temperature\", \"Temperature\");\r\n            ifcPSE.PropertyName = \"Temperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.VolumetricFlowRate\", \"VolumetricFlowRate\");\r\n            ifcPSE.PropertyName = \"VolumetricFlowRate\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumetricFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.MassFlowRate\", \"MassFlowRate\");\r\n            ifcPSE.PropertyName = \"MassFlowRate\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.MassFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MassFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.FlowCondition\", \"FlowCondition\");\r\n            ifcPSE.PropertyName = \"FlowCondition\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowConditionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.Velocity\", \"Velocity\");\r\n            ifcPSE.PropertyName = \"Velocity\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionPortTypePipe.Pressure\", \"Pressure\");\r\n            ifcPSE.PropertyName = \"Pressure\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionPortTypePipe.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionPortTypePipe);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionSystemCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionSystemCommon = new PropertySetDescription();\r\n         propertySetDistributionSystemCommon.Name = \"Pset_DistributionSystemCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionSystemCommon\"))\r\n         {\r\n            propertySetDistributionSystemCommon.EntityTypes.Add(IFCEntityType.IfcDistributionSystem);\r\n            propertySetDistributionSystemCommon.ObjectType = \"IfcDistributionSystem\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조기호\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionSystemCommon\"))\r\n         {\r\n            propertySetDistributionSystemCommon.EntityTypes.Add(IFCEntityType.IfcDistributionSystem);\r\n            propertySetDistributionSystemCommon.ObjectType = \"IfcDistributionSystem\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionSystemCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionSystemTypeElectrical(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionSystemTypeElectrical = new PropertySetDescription();\r\n         propertySetDistributionSystemTypeElectrical.Name = \"Pset_DistributionSystemTypeElectrical\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionSystemTypeElectrical\"))\r\n         {\r\n            propertySetDistributionSystemTypeElectrical.EntityTypes.Add(IFCEntityType.IfcDistributionSystem);\r\n            propertySetDistributionSystemTypeElectrical.ObjectType = \"IfcDistributionSystem\";\r\n            propertySetDistributionSystemTypeElectrical.PredefinedType = \"ELECTRICAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeElectrical.ElectricalSystemType\", \"ElectricalSystemType\");\r\n            ifcPSE.PropertyName = \"ElectricalSystemType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_DistributionSystemElectricalType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Electrical System Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電気システム方式\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전기 시스템 방식\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricalSystemTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeElectrical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeElectrical.ElectricalSystemCategory\", \"ElectricalSystemCategory\");\r\n            ifcPSE.PropertyName = \"ElectricalSystemCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_DistributionSystemElectricalCategory);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Electrical System Category\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電気システムのカテゴリー\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전기 시스템 카테고리\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricalSystemCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeElectrical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeElectrical.Diversity\", \"Diversity\");\r\n            ifcPSE.PropertyName = \"Diversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Diversity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"負荷率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"부하율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeElectrical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeElectrical.NumberOfLiveConductors\", \"NumberOfLiveConductors\");\r\n            ifcPSE.PropertyName = \"NumberOfLiveConductors\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Live Conductors\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfLiveConductorsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeElectrical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeElectrical.MaximumAllowedVoltageDrop\", \"MaximumAllowedVoltageDrop\");\r\n            ifcPSE.PropertyName = \"MaximumAllowedVoltageDrop\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Allowed Voltage Drop\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最大許容電圧降下\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최대허용전압강하\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumAllowedVoltageDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeElectrical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeElectrical.NetImpedance\", \"NetImpedance\");\r\n            ifcPSE.PropertyName = \"NetImpedance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Impedance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ネットインピーダンス\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"인터넷 임피던스\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetImpedanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeElectrical.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionSystemTypeElectrical\"))\r\n         {\r\n            propertySetDistributionSystemTypeElectrical.EntityTypes.Add(IFCEntityType.IfcDistributionSystem);\r\n            propertySetDistributionSystemTypeElectrical.ObjectType = \"IfcDistributionSystem\";\r\n            propertySetDistributionSystemTypeElectrical.PredefinedType = \"ELECTRICAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeElectrical.ElectricalSystemType\", \"ElectricalSystemType\");\r\n            ifcPSE.PropertyName = \"ElectricalSystemType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DistributionSystemElectricalType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricalSystemTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeElectrical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeElectrical.ElectricalSystemCategory\", \"ElectricalSystemCategory\");\r\n            ifcPSE.PropertyName = \"ElectricalSystemCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DistributionSystemElectricalCategory);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricalSystemCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeElectrical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeElectrical.Diversity\", \"Diversity\");\r\n            ifcPSE.PropertyName = \"Diversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeElectrical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeElectrical.NumberOfLiveConductors\", \"NumberOfLiveConductors\");\r\n            ifcPSE.PropertyName = \"NumberOfLiveConductors\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfLiveConductorsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeElectrical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeElectrical.MaximumAllowedVoltageDrop\", \"MaximumAllowedVoltageDrop\");\r\n            ifcPSE.PropertyName = \"MaximumAllowedVoltageDrop\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumAllowedVoltageDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeElectrical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeElectrical.NetImpedance\", \"NetImpedance\");\r\n            ifcPSE.PropertyName = \"NetImpedance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetImpedanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeElectrical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeElectrical.RatedVoltageRange\", \"RatedVoltageRange\");\r\n            ifcPSE.PropertyName = \"RatedVoltageRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeElectrical.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionSystemTypeElectrical);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionSystemTypeOverheadContactlineSystem(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionSystemTypeOverheadContactlineSystem = new PropertySetDescription();\r\n         propertySetDistributionSystemTypeOverheadContactlineSystem.Name = \"Pset_DistributionSystemTypeOverheadContactlineSystem\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionSystemTypeOverheadContactlineSystem\"))\r\n         {\r\n            propertySetDistributionSystemTypeOverheadContactlineSystem.EntityTypes.Add(IFCEntityType.IfcDistributionSystem);\r\n            propertySetDistributionSystemTypeOverheadContactlineSystem.ObjectType = \"IfcDistributionSystem\";\r\n            propertySetDistributionSystemTypeOverheadContactlineSystem.PredefinedType = \"OVERHEAD_CONTACTLINE_SYSTEM\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeOverheadContactlineSystem.SpanNominalLength\", \"SpanNominalLength\");\r\n            ifcPSE.PropertyName = \"SpanNominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpanNominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeOverheadContactlineSystem.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeOverheadContactlineSystem.ContactWireStagger\", \"ContactWireStagger\");\r\n            ifcPSE.PropertyName = \"ContactWireStagger\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContactWireStaggerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeOverheadContactlineSystem.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeOverheadContactlineSystem.ContactWireNominalDrop\", \"ContactWireNominalDrop\");\r\n            ifcPSE.PropertyName = \"ContactWireNominalDrop\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContactWireNominalDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeOverheadContactlineSystem.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeOverheadContactlineSystem.PressureRange\", \"PressureRange\");\r\n            ifcPSE.PropertyName = \"PressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeOverheadContactlineSystem.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeOverheadContactlineSystem.ContactWireNominalHeight\", \"ContactWireNominalHeight\");\r\n            ifcPSE.PropertyName = \"ContactWireNominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContactWireNominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeOverheadContactlineSystem.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeOverheadContactlineSystem.ContactWireUplift\", \"ContactWireUplift\");\r\n            ifcPSE.PropertyName = \"ContactWireUplift\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContactWireUpliftCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeOverheadContactlineSystem.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeOverheadContactlineSystem.ElectricalClearance\", \"ElectricalClearance\");\r\n            ifcPSE.PropertyName = \"ElectricalClearance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricalClearanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeOverheadContactlineSystem.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeOverheadContactlineSystem.NumberOfOverlappingSpans\", \"NumberOfOverlappingSpans\");\r\n            ifcPSE.PropertyName = \"NumberOfOverlappingSpans\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfOverlappingSpansCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeOverheadContactlineSystem.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeOverheadContactlineSystem.PantographType\", \"PantographType\");\r\n            ifcPSE.PropertyName = \"PantographType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PantographTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeOverheadContactlineSystem.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeOverheadContactlineSystem.TensionLength\", \"TensionLength\");\r\n            ifcPSE.PropertyName = \"TensionLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensionLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeOverheadContactlineSystem.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeOverheadContactlineSystem.OCSType\", \"OCSType\");\r\n            ifcPSE.PropertyName = \"OCSType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_OverheadContactLineType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OCSTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeOverheadContactlineSystem.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionSystemTypeOverheadContactlineSystem);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DistributionSystemTypeVentilation(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDistributionSystemTypeVentilation = new PropertySetDescription();\r\n         propertySetDistributionSystemTypeVentilation.Name = \"Pset_DistributionSystemTypeVentilation\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionSystemTypeVentilation\"))\r\n         {\r\n            propertySetDistributionSystemTypeVentilation.EntityTypes.Add(IFCEntityType.IfcDistributionSystem);\r\n            propertySetDistributionSystemTypeVentilation.ObjectType = \"IfcDistributionSystem\";\r\n            propertySetDistributionSystemTypeVentilation.PredefinedType = \"VENTILATION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.DesignName\", \"DesignName\");\r\n            ifcPSE.PropertyName = \"DesignName\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Design Name\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設計値名称\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"설계 값이름\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DesignNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.DuctSizingMethod\", \"DuctSizingMethod\");\r\n            ifcPSE.PropertyName = \"DuctSizingMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_DuctSizingMethod);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Duct Sizing Method\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ダクト寸法の決め方\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"덕트 치수 결정 방법\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DuctSizingMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.PressureClass\", \"PressureClass\");\r\n            ifcPSE.PropertyName = \"PressureClass\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure Class\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧力等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"압력 등급\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.LeakageClass\", \"LeakageClass\");\r\n            ifcPSE.PropertyName = \"LeakageClass\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Leakage Class\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"漏れ率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"누설비율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.FrictionLoss\", \"FrictionLoss\");\r\n            ifcPSE.PropertyName = \"FrictionLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Friction Loss\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"摩擦損失\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"마찰 소실\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrictionLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.ScrapFactor\", \"ScrapFactor\");\r\n            ifcPSE.PropertyName = \"ScrapFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Scrap Factor\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"廃材率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"폐기물 비율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ScrapFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.DuctSealant\", \"DuctSealant\");\r\n            ifcPSE.PropertyName = \"DuctSealant\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Duct Sealant\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ダクトの密閉性\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"덕트 밀폐\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DuctSealantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.MaximumVelocity\", \"MaximumVelocity\");\r\n            ifcPSE.PropertyName = \"MaximumVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Velocity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最大速度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최대 속도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.AspectRatio\", \"AspectRatio\");\r\n            ifcPSE.PropertyName = \"AspectRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Aspect Ratio\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"アスペクト比\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"화면 비율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AspectRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.MinimumHeight\", \"MinimumHeight\");\r\n            ifcPSE.PropertyName = \"MinimumHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Minimum Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最小高さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최소 높이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.MinimumWidth\", \"MinimumWidth\");\r\n            ifcPSE.PropertyName = \"MinimumWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Minimum Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最小幅\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최소폭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DistributionSystemTypeVentilation\"))\r\n         {\r\n            propertySetDistributionSystemTypeVentilation.EntityTypes.Add(IFCEntityType.IfcDistributionSystem);\r\n            propertySetDistributionSystemTypeVentilation.ObjectType = \"IfcDistributionSystem\";\r\n            propertySetDistributionSystemTypeVentilation.PredefinedType = \"VENTILATION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.DesignName\", \"DesignName\");\r\n            ifcPSE.PropertyName = \"DesignName\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DesignNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.DuctSizingMethod\", \"DuctSizingMethod\");\r\n            ifcPSE.PropertyName = \"DuctSizingMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DuctSizingMethod);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DuctSizingMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.PressureClass\", \"PressureClass\");\r\n            ifcPSE.PropertyName = \"PressureClass\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.LeakageClass\", \"LeakageClass\");\r\n            ifcPSE.PropertyName = \"LeakageClass\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.FrictionLoss\", \"FrictionLoss\");\r\n            ifcPSE.PropertyName = \"FrictionLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrictionLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.ScrapFactor\", \"ScrapFactor\");\r\n            ifcPSE.PropertyName = \"ScrapFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ScrapFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.DuctSealant\", \"DuctSealant\");\r\n            ifcPSE.PropertyName = \"DuctSealant\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DuctSealantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.MaximumVelocity\", \"MaximumVelocity\");\r\n            ifcPSE.PropertyName = \"MaximumVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.AspectRatio\", \"AspectRatio\");\r\n            ifcPSE.PropertyName = \"AspectRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AspectRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.MinimumHeight\", \"MinimumHeight\");\r\n            ifcPSE.PropertyName = \"MinimumHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DistributionSystemTypeVentilation.MinimumWidth\", \"MinimumWidth\");\r\n            ifcPSE.PropertyName = \"MinimumWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDistributionSystemTypeVentilation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDistributionSystemTypeVentilation);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DoorCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDoorCommon = new PropertySetDescription();\r\n         propertySetDoorCommon.Name = \"Pset_DoorCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DoorCommon\"))\r\n         {\r\n            propertySetDoorCommon.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.SecurityRating\", \"SecurityRating\");\r\n            ifcPSE.PropertyName = \"SecurityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecurityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.Infiltration\", \"Infiltration\");\r\n            ifcPSE.PropertyName = \"Infiltration\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.GlazingAreaFraction\", \"GlazingAreaFraction\");\r\n            ifcPSE.PropertyName = \"GlazingAreaFraction\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlazingAreaFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.SelfClosing\", \"SelfClosing\");\r\n            ifcPSE.PropertyName = \"SelfClosing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SelfClosingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.SmokeStop\", \"SmokeStop\");\r\n            ifcPSE.PropertyName = \"SmokeStop\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SmokeStopCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DoorCommon\"))\r\n         {\r\n            propertySetDoorCommon.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.SecurityRating\", \"SecurityRating\");\r\n            ifcPSE.PropertyName = \"SecurityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecurityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.Infiltration\", \"Infiltration\");\r\n            ifcPSE.PropertyName = \"Infiltration\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.GlazingAreaFraction\", \"GlazingAreaFraction\");\r\n            ifcPSE.PropertyName = \"GlazingAreaFraction\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlazingAreaFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.SelfClosing\", \"SelfClosing\");\r\n            ifcPSE.PropertyName = \"SelfClosing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SelfClosingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.SmokeStop\", \"SmokeStop\");\r\n            ifcPSE.PropertyName = \"SmokeStop\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SmokeStopCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DoorCommon\"))\r\n         {\r\n            propertySetDoorCommon.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetDoorCommon.ObjectType = \"IfcDoor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bauteiltyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Feuerwiderstandsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ResistanceAuFeu\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐火等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"防火等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Schallschutzklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Acoustic Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"IsolationAcoustique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"遮音等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"隔音等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.SecurityRating\", \"SecurityRating\");\r\n            ifcPSE.PropertyName = \"SecurityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Widerstandsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Security Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"NiveauSecurite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"防犯等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"安全等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecurityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.DurabilityRating\", \"DurabilityRating\");\r\n            ifcPSE.PropertyName = \"DurabilityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Beanspruchungsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Durability Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Durabilité\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DurabilityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.HygrothermalRating\", \"HygrothermalRating\");\r\n            ifcPSE.PropertyName = \"HygrothermalRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Klimaklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Hygrothermal Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Résistance hygrothermique\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HygrothermalRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.WaterTightnessRating\", \"WaterTightnessRating\");\r\n            ifcPSE.PropertyName = \"WaterTightnessRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterTightnessRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.MechanicalLoadRating\", \"MechanicalLoadRating\");\r\n            ifcPSE.PropertyName = \"MechanicalLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.WindLoadRating\", \"WindLoadRating\");\r\n            ifcPSE.PropertyName = \"WindLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WindLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.Infiltration\", \"Infiltration\");\r\n            ifcPSE.PropertyName = \"Infiltration\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Luftdurchlässigkeit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Infiltration\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TauxInfiltration\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Außenbauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EstExterieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否外部构件\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"U-Wert\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TransmissionThermique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱貫流率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"导热系数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.GlazingAreaFraction\", \"GlazingAreaFraction\");\r\n            ifcPSE.PropertyName = \"GlazingAreaFraction\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Glasflächenanteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Glazing Area Fraction\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"FractionSurfaceVitree\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlazingAreaFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Behindertengerecht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Handicap Accessible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"AccessibleHandicapes\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Notausgang\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Exit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Sortie Secours\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"非常口区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否为紧急出口\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.HasDrive\", \"HasDrive\");\r\n            ifcPSE.PropertyName = \"HasDrive\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Antrieb\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Drive\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasDriveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.SelfClosing\", \"SelfClosing\");\r\n            ifcPSE.PropertyName = \"SelfClosing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Selbstschliessend\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Self Closing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"FermetureAutomatique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"自動ドア閉機能区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否自动关闭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SelfClosingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.SmokeStop\", \"SmokeStop\");\r\n            ifcPSE.PropertyName = \"SmokeStop\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Rauchschutz\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Smoke Stop\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CoupeFumee\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"煙止め機能区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否防烟\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SmokeStopCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DoorCommon\"))\r\n         {\r\n            propertySetDoorCommon.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetDoorCommon.EntityTypes.Add(IFCEntityType.IfcDoorType);\r\n            propertySetDoorCommon.ObjectType = \"IfcDoor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.SecurityRating\", \"SecurityRating\");\r\n            ifcPSE.PropertyName = \"SecurityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecurityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.DurabilityRating\", \"DurabilityRating\");\r\n            ifcPSE.PropertyName = \"DurabilityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DurabilityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.HygrothermalRating\", \"HygrothermalRating\");\r\n            ifcPSE.PropertyName = \"HygrothermalRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HygrothermalRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.WaterTightnessRating\", \"WaterTightnessRating\");\r\n            ifcPSE.PropertyName = \"WaterTightnessRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterTightnessRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.MechanicalLoadRating\", \"MechanicalLoadRating\");\r\n            ifcPSE.PropertyName = \"MechanicalLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.WindLoadRating\", \"WindLoadRating\");\r\n            ifcPSE.PropertyName = \"WindLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WindLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.Infiltration\", \"Infiltration\");\r\n            ifcPSE.PropertyName = \"Infiltration\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.GlazingAreaFraction\", \"GlazingAreaFraction\");\r\n            ifcPSE.PropertyName = \"GlazingAreaFraction\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlazingAreaFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.HasDrive\", \"HasDrive\");\r\n            ifcPSE.PropertyName = \"HasDrive\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasDriveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.SelfClosing\", \"SelfClosing\");\r\n            ifcPSE.PropertyName = \"SelfClosing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SelfClosingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorCommon.SmokeStop\", \"SmokeStop\");\r\n            ifcPSE.PropertyName = \"SmokeStop\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SmokeStopCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDoorCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DoorLiningProperties(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDoorLiningProperties = new PropertySetDescription();\r\n         propertySetDoorLiningProperties.Name = \"Pset_DoorLiningProperties\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DoorLiningProperties\"))\r\n         {\r\n            propertySetDoorLiningProperties.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetDoorLiningProperties.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetDoorLiningProperties.EntityTypes.Add(IFCEntityType.IfcDoorType);\r\n            propertySetDoorLiningProperties.EntityTypes.Add(IFCEntityType.IfcMemberType);\r\n            propertySetDoorLiningProperties.ObjectType = \"IfcDoor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorLiningProperties.LiningDepth\", \"LiningDepth\");\r\n            ifcPSE.PropertyName = \"LiningDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorLiningProperties.LiningThickness\", \"LiningThickness\");\r\n            ifcPSE.PropertyName = \"LiningThickness\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorLiningProperties.ThresholdDepth\", \"ThresholdDepth\");\r\n            ifcPSE.PropertyName = \"ThresholdDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThresholdDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorLiningProperties.ThresholdThickness\", \"ThresholdThickness\");\r\n            ifcPSE.PropertyName = \"ThresholdThickness\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThresholdThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorLiningProperties.TransomThickness\", \"TransomThickness\");\r\n            ifcPSE.PropertyName = \"TransomThickness\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransomThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorLiningProperties.TransomOffset\", \"TransomOffset\");\r\n            ifcPSE.PropertyName = \"TransomOffset\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransomOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorLiningProperties.LiningOffset\", \"LiningOffset\");\r\n            ifcPSE.PropertyName = \"LiningOffset\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorLiningProperties.ThresholdOffset\", \"ThresholdOffset\");\r\n            ifcPSE.PropertyName = \"ThresholdOffset\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThresholdOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorLiningProperties.CasingThickness\", \"CasingThickness\");\r\n            ifcPSE.PropertyName = \"CasingThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CasingThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorLiningProperties.CasingDepth\", \"CasingDepth\");\r\n            ifcPSE.PropertyName = \"CasingDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CasingDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorLiningProperties.LiningToPanelOffsetX\", \"LiningToPanelOffsetX\");\r\n            ifcPSE.PropertyName = \"LiningToPanelOffsetX\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningToPanelOffsetXCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorLiningProperties.LiningToPanelOffsetY\", \"LiningToPanelOffsetY\");\r\n            ifcPSE.PropertyName = \"LiningToPanelOffsetY\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningToPanelOffsetYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorLiningProperties.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDoorLiningProperties);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DoorPanelProperties(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDoorPanelProperties = new PropertySetDescription();\r\n         propertySetDoorPanelProperties.Name = \"Pset_DoorPanelProperties\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DoorPanelProperties\"))\r\n         {\r\n            propertySetDoorPanelProperties.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetDoorPanelProperties.EntityTypes.Add(IFCEntityType.IfcPlate);\r\n            propertySetDoorPanelProperties.EntityTypes.Add(IFCEntityType.IfcDoorType);\r\n            propertySetDoorPanelProperties.EntityTypes.Add(IFCEntityType.IfcPlateType);\r\n            propertySetDoorPanelProperties.ObjectType = \"IfcDoor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorPanelProperties.PanelDepth\", \"PanelDepth\");\r\n            ifcPSE.PropertyName = \"PanelDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorPanelProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorPanelProperties.PanelOperation\", \"PanelOperation\");\r\n            ifcPSE.PropertyName = \"PanelOperation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DoorPanelOperationEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelOperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorPanelProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorPanelProperties.PanelWidth\", \"PanelWidth\");\r\n            ifcPSE.PropertyName = \"PanelWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorPanelProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorPanelProperties.PanelPosition\", \"PanelPosition\");\r\n            ifcPSE.PropertyName = \"PanelPosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DoorPanelPositionEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorPanelProperties.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDoorPanelProperties);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DoorTypeTurnstile(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDoorTypeTurnstile = new PropertySetDescription();\r\n         propertySetDoorTypeTurnstile.Name = \"Pset_DoorTypeTurnstile\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DoorTypeTurnstile\"))\r\n         {\r\n            propertySetDoorTypeTurnstile.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetDoorTypeTurnstile.EntityTypes.Add(IFCEntityType.IfcDoorType);\r\n            propertySetDoorTypeTurnstile.ObjectType = \"IfcDoor\";\r\n            propertySetDoorTypeTurnstile.PredefinedType = \"TURNSTILE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorTypeTurnstile.IsBidirectional\", \"IsBidirectional\");\r\n            ifcPSE.PropertyName = \"IsBidirectional\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsBidirectionalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorTypeTurnstile.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorTypeTurnstile.TurnstileType\", \"TurnstileType\");\r\n            ifcPSE.PropertyName = \"TurnstileType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TurnstileType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TurnstileTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorTypeTurnstile.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorTypeTurnstile.NarrowChannelWidth\", \"NarrowChannelWidth\");\r\n            ifcPSE.PropertyName = \"NarrowChannelWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NarrowChannelWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorTypeTurnstile.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorTypeTurnstile.WideChannelWidth\", \"WideChannelWidth\");\r\n            ifcPSE.PropertyName = \"WideChannelWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WideChannelWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorTypeTurnstile.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDoorTypeTurnstile);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DoorWindowGlazingType(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDoorWindowGlazingType = new PropertySetDescription();\r\n         propertySetDoorWindowGlazingType.Name = \"Pset_DoorWindowGlazingType\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DoorWindowGlazingType\"))\r\n         {\r\n            propertySetDoorWindowGlazingType.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetDoorWindowGlazingType.EntityTypes.Add(IFCEntityType.IfcWindow);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassLayers\", \"GlassLayers\");\r\n            ifcPSE.PropertyName = \"GlassLayers\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassLayersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassThickness1\", \"GlassThickness1\");\r\n            ifcPSE.PropertyName = \"GlassThickness1\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassThickness1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassThickness2\", \"GlassThickness2\");\r\n            ifcPSE.PropertyName = \"GlassThickness2\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassThickness2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassThickness3\", \"GlassThickness3\");\r\n            ifcPSE.PropertyName = \"GlassThickness3\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassThickness3Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.FillGas\", \"FillGas\");\r\n            ifcPSE.PropertyName = \"FillGas\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FillGasCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassColor\", \"GlassColor\");\r\n            ifcPSE.PropertyName = \"GlassColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.IsTempered\", \"IsTempered\");\r\n            ifcPSE.PropertyName = \"IsTempered\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsTemperedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.IsLaminated\", \"IsLaminated\");\r\n            ifcPSE.PropertyName = \"IsLaminated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsLaminatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.IsCoated\", \"IsCoated\");\r\n            ifcPSE.PropertyName = \"IsCoated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsCoatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.IsWired\", \"IsWired\");\r\n            ifcPSE.PropertyName = \"IsWired\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsWiredCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.Translucency\", \"Translucency\");\r\n            ifcPSE.PropertyName = \"Translucency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TranslucencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.Reflectivity\", \"Reflectivity\");\r\n            ifcPSE.PropertyName = \"Reflectivity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReflectivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.BeamRadiationTransmittance\", \"BeamRadiationTransmittance\");\r\n            ifcPSE.PropertyName = \"BeamRadiationTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BeamRadiationTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.SolarHeatGainTransmittance\", \"SolarHeatGainTransmittance\");\r\n            ifcPSE.PropertyName = \"SolarHeatGainTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarHeatGainTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.ThermalTransmittanceSummer\", \"ThermalTransmittanceSummer\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittanceSummer\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceSummerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.ThermalTransmittanceWinter\", \"ThermalTransmittanceWinter\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittanceWinter\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceWinterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DoorWindowGlazingType\"))\r\n         {\r\n            propertySetDoorWindowGlazingType.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetDoorWindowGlazingType.EntityTypes.Add(IFCEntityType.IfcWindow);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassLayers\", \"GlassLayers\");\r\n            ifcPSE.PropertyName = \"GlassLayers\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassLayersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassThickness1\", \"GlassThickness1\");\r\n            ifcPSE.PropertyName = \"GlassThickness1\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassThickness1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassThickness2\", \"GlassThickness2\");\r\n            ifcPSE.PropertyName = \"GlassThickness2\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassThickness2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassThickness3\", \"GlassThickness3\");\r\n            ifcPSE.PropertyName = \"GlassThickness3\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassThickness3Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.FillGas\", \"FillGas\");\r\n            ifcPSE.PropertyName = \"FillGas\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FillGasCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassColor\", \"GlassColor\");\r\n            ifcPSE.PropertyName = \"GlassColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.IsTempered\", \"IsTempered\");\r\n            ifcPSE.PropertyName = \"IsTempered\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsTemperedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.IsLaminated\", \"IsLaminated\");\r\n            ifcPSE.PropertyName = \"IsLaminated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsLaminatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.IsCoated\", \"IsCoated\");\r\n            ifcPSE.PropertyName = \"IsCoated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsCoatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.IsWired\", \"IsWired\");\r\n            ifcPSE.PropertyName = \"IsWired\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsWiredCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.Translucency\", \"Translucency\");\r\n            ifcPSE.PropertyName = \"Translucency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TranslucencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.Reflectivity\", \"Reflectivity\");\r\n            ifcPSE.PropertyName = \"Reflectivity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReflectivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.BeamRadiationTransmittance\", \"BeamRadiationTransmittance\");\r\n            ifcPSE.PropertyName = \"BeamRadiationTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BeamRadiationTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.SolarHeatGainTransmittance\", \"SolarHeatGainTransmittance\");\r\n            ifcPSE.PropertyName = \"SolarHeatGainTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarHeatGainTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.ThermalTransmittanceSummer\", \"ThermalTransmittanceSummer\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittanceSummer\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceSummerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.ThermalTransmittanceWinter\", \"ThermalTransmittanceWinter\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittanceWinter\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceWinterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DoorWindowGlazingType\"))\r\n         {\r\n            propertySetDoorWindowGlazingType.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetDoorWindowGlazingType.EntityTypes.Add(IFCEntityType.IfcWindow);\r\n            propertySetDoorWindowGlazingType.ObjectType = \"IfcDoor, IfcWindow\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassLayers\", \"GlassLayers\");\r\n            ifcPSE.PropertyName = \"GlassLayers\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"German-name-1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Glass Layers\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"NombreVitrages\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ガラス枚数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"玻璃层数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassLayersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassThickness1\", \"GlassThickness1\");\r\n            ifcPSE.PropertyName = \"GlassThickness1\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"German-name-2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Glass Thickness1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EpaisseurVitrage1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ガラス厚1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"玻璃厚度1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassThickness1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassThickness2\", \"GlassThickness2\");\r\n            ifcPSE.PropertyName = \"GlassThickness2\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"German-name-3\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Glass Thickness2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EpaisseurVitrage2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ガラス厚2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"玻璃厚度2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassThickness2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassThickness3\", \"GlassThickness3\");\r\n            ifcPSE.PropertyName = \"GlassThickness3\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"German-name-4\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Glass Thickness3\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EpaisseurVitrage3\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ガラス厚3\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"玻璃厚度3\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassThickness3Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.FillGas\", \"FillGas\");\r\n            ifcPSE.PropertyName = \"FillGas\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"German-name-5\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fill Gas\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"GazEntreVitrages\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"充填ガス種\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"填充气体\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FillGasCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassColor\", \"GlassColor\");\r\n            ifcPSE.PropertyName = \"GlassColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"German-name-6\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Glass Color\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CouleurVitrage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ガラス色\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"玻璃颜色\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.IsTempered\", \"IsTempered\");\r\n            ifcPSE.PropertyName = \"IsTempered\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"German-name-7\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Tempered\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"VitrageTrempe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"強化ガラス\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否钢化\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsTemperedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.IsLaminated\", \"IsLaminated\");\r\n            ifcPSE.PropertyName = \"IsLaminated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"German-name-8\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Laminated\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"VitrageFeuillete\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"皮膜を被せたガラス\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否夹层\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsLaminatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.IsCoated\", \"IsCoated\");\r\n            ifcPSE.PropertyName = \"IsCoated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"German-name-9\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Coated\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"VitrageTraite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"コーティング\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否镀膜\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsCoatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.IsWired\", \"IsWired\");\r\n            ifcPSE.PropertyName = \"IsWired\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"German-name-10\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Wired\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"VitrageArme\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"網入りガラス\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否夹丝\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsWiredCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.VisibleLightReflectance\", \"VisibleLightReflectance\");\r\n            ifcPSE.PropertyName = \"VisibleLightReflectance\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Reflektionsgrad für sichtbares Licht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Visible Light Reflectance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ReflexionVisible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"可視光反射率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"可见光反射率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleLightReflectanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.VisibleLightTransmittance\", \"VisibleLightTransmittance\");\r\n            ifcPSE.PropertyName = \"VisibleLightTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Transmissionsgrad für sichtbares Licht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Visible Light Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TransmittanceVisible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"可視光透過率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"可见光透射率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleLightTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.SolarAbsorption\", \"SolarAbsorption\");\r\n            ifcPSE.PropertyName = \"SolarAbsorption\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Strahlungsabsorbtionsgrad\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Solar Absorption\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"AbsorptionRayonnementSolaire\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"日射吸収率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"太阳能吸收率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarAbsorptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.SolarReflectance\", \"SolarReflectance\");\r\n            ifcPSE.PropertyName = \"SolarReflectance\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Strahlungsreflectionsgrad\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Solar Reflectance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ReflexionRayonnementSolaire\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"日射反射率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"太阳能反射率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarReflectanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.SolarTransmittance\", \"SolarTransmittance\");\r\n            ifcPSE.PropertyName = \"SolarTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Strahlungstransmissionsgrad\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Solar Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TransmissionRayonnementSolaire\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"日射透過率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"太阳能透射率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.SolarHeatGainTransmittance\", \"SolarHeatGainTransmittance\");\r\n            ifcPSE.PropertyName = \"SolarHeatGainTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Gesamtenergiedurchlassgrad\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Solar Heat Gain Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ApportsSolaires\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"透過太陽熱利得係数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"太阳能得热系数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarHeatGainTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.ShadingCoefficient\", \"ShadingCoefficient\");\r\n            ifcPSE.PropertyName = \"ShadingCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"mittlere Durchlassfaktor b\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shading Coefficient\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CoefficientOmbrage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"遮蔽係数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"遮阳系数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShadingCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.ThermalTransmittanceSummer\", \"ThermalTransmittanceSummer\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittanceSummer\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"German-name-15\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Transmittance Summer\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TransmittanceThermiqueEte\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"夏期の熱透過係数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"夏季导热系数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceSummerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.ThermalTransmittanceWinter\", \"ThermalTransmittanceWinter\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittanceWinter\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"German-name-16\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Transmittance Winter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TransmittanceThermiqueHiver\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"冬季の熱透過係数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"冬季导热系数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceWinterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DoorWindowGlazingType\"))\r\n         {\r\n            propertySetDoorWindowGlazingType.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetDoorWindowGlazingType.EntityTypes.Add(IFCEntityType.IfcWindow);\r\n            propertySetDoorWindowGlazingType.EntityTypes.Add(IFCEntityType.IfcDoorType);\r\n            propertySetDoorWindowGlazingType.EntityTypes.Add(IFCEntityType.IfcWindowType);\r\n            propertySetDoorWindowGlazingType.ObjectType = \"IfcDoor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassLayers\", \"GlassLayers\");\r\n            ifcPSE.PropertyName = \"GlassLayers\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassLayersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassThickness1\", \"GlassThickness1\");\r\n            ifcPSE.PropertyName = \"GlassThickness1\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassThickness1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassThickness2\", \"GlassThickness2\");\r\n            ifcPSE.PropertyName = \"GlassThickness2\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassThickness2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassThickness3\", \"GlassThickness3\");\r\n            ifcPSE.PropertyName = \"GlassThickness3\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassThickness3Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.FillGas\", \"FillGas\");\r\n            ifcPSE.PropertyName = \"FillGas\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FillGasCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.GlassColour\", \"GlassColour\");\r\n            ifcPSE.PropertyName = \"GlassColour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlassColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.IsTempered\", \"IsTempered\");\r\n            ifcPSE.PropertyName = \"IsTempered\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsTemperedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.IsLaminated\", \"IsLaminated\");\r\n            ifcPSE.PropertyName = \"IsLaminated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsLaminatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.IsCoated\", \"IsCoated\");\r\n            ifcPSE.PropertyName = \"IsCoated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsCoatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.IsWired\", \"IsWired\");\r\n            ifcPSE.PropertyName = \"IsWired\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsWiredCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.VisibleLightReflectance\", \"VisibleLightReflectance\");\r\n            ifcPSE.PropertyName = \"VisibleLightReflectance\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleLightReflectanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.VisibleLightTransmittance\", \"VisibleLightTransmittance\");\r\n            ifcPSE.PropertyName = \"VisibleLightTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleLightTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.SolarAbsorption\", \"SolarAbsorption\");\r\n            ifcPSE.PropertyName = \"SolarAbsorption\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarAbsorptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.SolarReflectance\", \"SolarReflectance\");\r\n            ifcPSE.PropertyName = \"SolarReflectance\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarReflectanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.SolarTransmittance\", \"SolarTransmittance\");\r\n            ifcPSE.PropertyName = \"SolarTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.SolarHeatGainTransmittance\", \"SolarHeatGainTransmittance\");\r\n            ifcPSE.PropertyName = \"SolarHeatGainTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarHeatGainTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.ShadingCoefficient\", \"ShadingCoefficient\");\r\n            ifcPSE.PropertyName = \"ShadingCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShadingCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.ThermalTransmittanceSummer\", \"ThermalTransmittanceSummer\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittanceSummer\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceSummerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowGlazingType.ThermalTransmittanceWinter\", \"ThermalTransmittanceWinter\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittanceWinter\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceWinterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowGlazingType.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDoorWindowGlazingType);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DoorWindowShadingType(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDoorWindowShadingType = new PropertySetDescription();\r\n         propertySetDoorWindowShadingType.Name = \"Pset_DoorWindowShadingType\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DoorWindowShadingType\"))\r\n         {\r\n            propertySetDoorWindowShadingType.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetDoorWindowShadingType.EntityTypes.Add(IFCEntityType.IfcWindow);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowShadingType.ExternalShadingCoefficient\", \"ExternalShadingCoefficient\");\r\n            ifcPSE.PropertyName = \"ExternalShadingCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExternalShadingCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowShadingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowShadingType.InternalShadingCoefficient\", \"InternalShadingCoefficient\");\r\n            ifcPSE.PropertyName = \"InternalShadingCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalShadingCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowShadingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowShadingType.InsetShadingCoefficient\", \"InsetShadingCoefficient\");\r\n            ifcPSE.PropertyName = \"InsetShadingCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InsetShadingCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowShadingType.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DoorWindowShadingType\"))\r\n         {\r\n            propertySetDoorWindowShadingType.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetDoorWindowShadingType.EntityTypes.Add(IFCEntityType.IfcWindow);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowShadingType.ExternalShadingCoefficient\", \"ExternalShadingCoefficient\");\r\n            ifcPSE.PropertyName = \"ExternalShadingCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExternalShadingCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowShadingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowShadingType.InternalShadingCoefficient\", \"InternalShadingCoefficient\");\r\n            ifcPSE.PropertyName = \"InternalShadingCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalShadingCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowShadingType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DoorWindowShadingType.InsetShadingCoefficient\", \"InsetShadingCoefficient\");\r\n            ifcPSE.PropertyName = \"InsetShadingCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InsetShadingCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDoorWindowShadingType.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDoorWindowShadingType);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DrainageCatchment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDrainageCatchment = new PropertySetDescription();\r\n         propertySetDrainageCatchment.Name = \"Pset_DrainageCatchment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DrainageCatchment\"))\r\n         {\r\n            propertySetDrainageCatchment.EntityTypes.Add(IFCEntityType.IfcSite);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DrainageCatchment.AreaDrained\", \"AreaDrained\");\r\n            ifcPSE.PropertyName = \"AreaDrained\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaDrainedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDrainageCatchment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DrainageCatchment\"))\r\n         {\r\n            propertySetDrainageCatchment.EntityTypes.Add(IFCEntityType.IfcSite);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DrainageCatchment.AreaDrained\", \"AreaDrained\");\r\n            ifcPSE.PropertyName = \"AreaDrained\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaDrainedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDrainageCatchment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDrainageCatchment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DrainageCulvert(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDrainageCulvert = new PropertySetDescription();\r\n         propertySetDrainageCulvert.Name = \"Pset_DrainageCulvert\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DrainageCulvert\"))\r\n         {\r\n            propertySetDrainageCulvert.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DrainageCulvert.InternalWidth\", \"InternalWidth\");\r\n            ifcPSE.PropertyName = \"InternalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDrainageCulvert.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DrainageCulvert.ClearDepth\", \"ClearDepth\");\r\n            ifcPSE.PropertyName = \"ClearDepth\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDrainageCulvert.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DrainageCulvert\"))\r\n         {\r\n            propertySetDrainageCulvert.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DrainageCulvert.InternalWidth\", \"InternalWidth\");\r\n            ifcPSE.PropertyName = \"InternalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDrainageCulvert.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DrainageCulvert.ClearDepth\", \"ClearDepth\");\r\n            ifcPSE.PropertyName = \"ClearDepth\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDrainageCulvert.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDrainageCulvert);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DrainageOutfall(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDrainageOutfall = new PropertySetDescription();\r\n         propertySetDrainageOutfall.Name = \"Pset_DrainageOutfall\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DrainageOutfall\"))\r\n         {\r\n            propertySetDrainageOutfall.EntityTypes.Add(IFCEntityType.IfcProxy);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DrainageOutfall.InvertLevel\", \"InvertLevel\");\r\n            ifcPSE.PropertyName = \"InvertLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDrainageOutfall.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DrainageOutfall\"))\r\n         {\r\n            propertySetDrainageOutfall.EntityTypes.Add(IFCEntityType.IfcProxy);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DrainageOutfall.InvertLevel\", \"InvertLevel\");\r\n            ifcPSE.PropertyName = \"InvertLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDrainageOutfall.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDrainageOutfall);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DrainageReserve(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDrainageReserve = new PropertySetDescription();\r\n         propertySetDrainageReserve.Name = \"Pset_DrainageReserve\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DrainageReserve\"))\r\n         {\r\n            propertySetDrainageReserve.EntityTypes.Add(IFCEntityType.IfcSite);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DrainageReserve.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDrainageReserve.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DrainageReserve\"))\r\n         {\r\n            propertySetDrainageReserve.EntityTypes.Add(IFCEntityType.IfcSite);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DrainageReserve.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDrainageReserve.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDrainageReserve);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_Draughting(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDraughting = new PropertySetDescription();\r\n         propertySetDraughting.Name = \"Pset_Draughting\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Draughting\"))\r\n         {\r\n            propertySetDraughting.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetDraughting.EntityTypes.Add(IFCEntityType.IfcSpatialStructureElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_Draughting.LayerName\", \"LayerName\");\r\n            ifcPSE.PropertyName = \"LayerName\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LayerNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDraughting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Draughting.Colour.Red\", \"Colour.Red\");\r\n            ifcPSE.PropertyName = \"Colour.Red\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDraughting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Draughting.Colour.Green\", \"Colour.Green\");\r\n            ifcPSE.PropertyName = \"Colour.Green\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GreenCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDraughting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Draughting.Colour.Blue\", \"Colour.Blue\");\r\n            ifcPSE.PropertyName = \"Colour.Blue\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BlueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDraughting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Draughting\"))\r\n         {\r\n            propertySetDraughting.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetDraughting.EntityTypes.Add(IFCEntityType.IfcSpatialStructureElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_Draughting.LayerName\", \"LayerName\");\r\n            ifcPSE.PropertyName = \"LayerName\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LayerNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDraughting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Draughting.Colour.Red\", \"Colour.Red\");\r\n            ifcPSE.PropertyName = \"Colour.Red\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDraughting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Draughting.Colour.Green\", \"Colour.Green\");\r\n            ifcPSE.PropertyName = \"Colour.Green\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GreenCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDraughting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Draughting.Colour.Blue\", \"Colour.Blue\");\r\n            ifcPSE.PropertyName = \"Colour.Blue\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BlueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDraughting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDraughting);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DuctConnection(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDuctConnection = new PropertySetDescription();\r\n         propertySetDuctConnection.Name = \"Pset_DuctConnection\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctConnection\"))\r\n         {\r\n            propertySetDuctConnection.EntityTypes.Add(IFCEntityType.IfcDuctSegmentType);\r\n            propertySetDuctConnection.EntityTypes.Add(IFCEntityType.IfcDuctFittingType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctConnection.ConnectionType\", \"ConnectionType\");\r\n            ifcPSE.PropertyName = \"ConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctConnection.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctConnection\"))\r\n         {\r\n            propertySetDuctConnection.EntityTypes.Add(IFCEntityType.IfcDistributionElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctConnection.ConnectionType\", \"ConnectionType\");\r\n            ifcPSE.PropertyName = \"ConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctConnection.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDuctConnection);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DuctDesignCriteria(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDuctDesignCriteria = new PropertySetDescription();\r\n         propertySetDuctDesignCriteria.Name = \"Pset_DuctDesignCriteria\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctDesignCriteria\"))\r\n         {\r\n            propertySetDuctDesignCriteria.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            propertySetDuctDesignCriteria.EntityTypes.Add(IFCEntityType.IfcDuctSegmentType);\r\n            propertySetDuctDesignCriteria.EntityTypes.Add(IFCEntityType.IfcDuctFittingType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.DesignName\", \"DesignName\");\r\n            ifcPSE.PropertyName = \"DesignName\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DesignNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.DuctSizingMethod\", \"DuctSizingMethod\");\r\n            ifcPSE.PropertyName = \"DuctSizingMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_DuctSizingMethod);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DuctSizingMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.PressureClass\", \"PressureClass\");\r\n            ifcPSE.PropertyName = \"PressureClass\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.LeakageClass\", \"LeakageClass\");\r\n            ifcPSE.PropertyName = \"LeakageClass\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.FrictionLoss\", \"FrictionLoss\");\r\n            ifcPSE.PropertyName = \"FrictionLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrictionLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.ScrapFactor\", \"ScrapFactor\");\r\n            ifcPSE.PropertyName = \"ScrapFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ScrapFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.DuctSealant\", \"DuctSealant\");\r\n            ifcPSE.PropertyName = \"DuctSealant\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DuctSealantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.MaximumVelocity\", \"MaximumVelocity\");\r\n            ifcPSE.PropertyName = \"MaximumVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.AspectRatio\", \"AspectRatio\");\r\n            ifcPSE.PropertyName = \"AspectRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AspectRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.MinimumHeight\", \"MinimumHeight\");\r\n            ifcPSE.PropertyName = \"MinimumHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.MinimumWidth\", \"MinimumWidth\");\r\n            ifcPSE.PropertyName = \"MinimumWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctDesignCriteria\"))\r\n         {\r\n            propertySetDuctDesignCriteria.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.DesignName\", \"DesignName\");\r\n            ifcPSE.PropertyName = \"DesignName\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DesignNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.DuctSizingMethod\", \"DuctSizingMethod\");\r\n            ifcPSE.PropertyName = \"DuctSizingMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_DuctSizingMethod);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DuctSizingMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.PressureClass\", \"PressureClass\");\r\n            ifcPSE.PropertyName = \"PressureClass\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.LeakageClass\", \"LeakageClass\");\r\n            ifcPSE.PropertyName = \"LeakageClass\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.FrictionLoss\", \"FrictionLoss\");\r\n            ifcPSE.PropertyName = \"FrictionLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrictionLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.ScrapFactor\", \"ScrapFactor\");\r\n            ifcPSE.PropertyName = \"ScrapFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ScrapFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.DuctSealant\", \"DuctSealant\");\r\n            ifcPSE.PropertyName = \"DuctSealant\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DuctSealantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.MaximumVelocity\", \"MaximumVelocity\");\r\n            ifcPSE.PropertyName = \"MaximumVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.AspectRatio\", \"AspectRatio\");\r\n            ifcPSE.PropertyName = \"AspectRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AspectRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.MinimumHeight\", \"MinimumHeight\");\r\n            ifcPSE.PropertyName = \"MinimumHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctDesignCriteria.MinimumWidth\", \"MinimumWidth\");\r\n            ifcPSE.PropertyName = \"MinimumWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctDesignCriteria.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDuctDesignCriteria);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DuctFittingOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDuctFittingOccurrence = new PropertySetDescription();\r\n         propertySetDuctFittingOccurrence.Name = \"Pset_DuctFittingOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctFittingOccurrence\"))\r\n         {\r\n            propertySetDuctFittingOccurrence.EntityTypes.Add(IFCEntityType.IfcDuctFitting);\r\n            propertySetDuctFittingOccurrence.ObjectType = \"IfcDuctFitting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingOccurrence.InteriorRoughnessCoefficient\", \"InteriorRoughnessCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorRoughnessCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Interior Roughness Coefficient\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"内面粗さ係数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorRoughnessCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingOccurrence.HasLiner\", \"HasLiner\");\r\n            ifcPSE.PropertyName = \"HasLiner\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Liner\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"内張り有無\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasLinerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingOccurrence.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Color\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"色\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctFittingOccurrence\"))\r\n         {\r\n            propertySetDuctFittingOccurrence.EntityTypes.Add(IFCEntityType.IfcDuctFitting);\r\n            propertySetDuctFittingOccurrence.ObjectType = \"IfcDuctFitting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingOccurrence.InteriorRoughnessCoefficient\", \"InteriorRoughnessCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorRoughnessCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorRoughnessCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingOccurrence.HasLiner\", \"HasLiner\");\r\n            ifcPSE.PropertyName = \"HasLiner\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasLinerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingOccurrence.Colour\", \"Colour\");\r\n            ifcPSE.PropertyName = \"Colour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDuctFittingOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DuctFittingPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDuctFittingPHistory = new PropertySetDescription();\r\n         propertySetDuctFittingPHistory.Name = \"Pset_DuctFittingPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctFittingPHistory\"))\r\n         {\r\n            propertySetDuctFittingPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingPHistory.LossCoefficient\", \"LossCoefficient\");\r\n            ifcPSE.PropertyName = \"LossCoefficient\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LossCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingPHistory.AirFlowLeakage\", \"AirFlowLeakage\");\r\n            ifcPSE.PropertyName = \"AirFlowLeakage\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowLeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctFittingPHistory\"))\r\n         {\r\n            propertySetDuctFittingPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingPHistory.LossCoefficient\", \"LossCoefficient\");\r\n            ifcPSE.PropertyName = \"LossCoefficient\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LossCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingPHistory.AirFlowLeakage\", \"AirFlowLeakage\");\r\n            ifcPSE.PropertyName = \"AirFlowLeakage\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowLeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctFittingPHistory\"))\r\n         {\r\n            propertySetDuctFittingPHistory.EntityTypes.Add(IFCEntityType.IfcDuctFitting);\r\n            propertySetDuctFittingPHistory.ObjectType = \"IfcDuctFitting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingPHistory.LossCoefficient\", \"LossCoefficient\");\r\n            ifcPSE.PropertyName = \"LossCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Loss Coefficient\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"損失係数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LossCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Atmospheric Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"大気圧\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingPHistory.AirFlowLeakage\", \"AirFlowLeakage\");\r\n            ifcPSE.PropertyName = \"AirFlowLeakage\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Flow Leakage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"漏れ量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowLeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctFittingPHistory\"))\r\n         {\r\n            propertySetDuctFittingPHistory.EntityTypes.Add(IFCEntityType.IfcDuctFitting);\r\n            propertySetDuctFittingPHistory.ObjectType = \"IfcDuctFitting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingPHistory.LossCoefficient\", \"LossCoefficient\");\r\n            ifcPSE.PropertyName = \"LossCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LossCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingPHistory.AirFlowLeakage\", \"AirFlowLeakage\");\r\n            ifcPSE.PropertyName = \"AirFlowLeakage\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowLeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDuctFittingPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DuctFittingTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDuctFittingTypeCommon = new PropertySetDescription();\r\n         propertySetDuctFittingTypeCommon.Name = \"Pset_DuctFittingTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctFittingTypeCommon\"))\r\n         {\r\n            propertySetDuctFittingTypeCommon.EntityTypes.Add(IFCEntityType.IfcDuctFittingType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.SubType\", \"SubType\");\r\n            ifcPSE.PropertyName = \"SubType\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SubTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.MaterialThickness\", \"MaterialThickness\");\r\n            ifcPSE.PropertyName = \"MaterialThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.PressureClass\", \"PressureClass\");\r\n            ifcPSE.PropertyName = \"PressureClass\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.UnitWeight\", \"UnitWeight\");\r\n            ifcPSE.PropertyName = \"UnitWeight\";\r\n            ifcPSE.PropertyType = PropertyType.MassPerLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UnitWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.PressureRange\", \"PressureRange\");\r\n            ifcPSE.PropertyName = \"PressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.NominalDiameterOrWidth\", \"NominalDiameterOrWidth\");\r\n            ifcPSE.PropertyName = \"NominalDiameterOrWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterOrWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.EndStyleTreatment\", \"EndStyleTreatment\");\r\n            ifcPSE.PropertyName = \"EndStyleTreatment\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndStyleTreatmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctFittingTypeCommon\"))\r\n         {\r\n            propertySetDuctFittingTypeCommon.EntityTypes.Add(IFCEntityType.IfcDuctFittingType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.SubType\", \"SubType\");\r\n            ifcPSE.PropertyName = \"SubType\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SubTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.MaterialThickness\", \"MaterialThickness\");\r\n            ifcPSE.PropertyName = \"MaterialThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.PressureClass\", \"PressureClass\");\r\n            ifcPSE.PropertyName = \"PressureClass\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.UnitWeight\", \"UnitWeight\");\r\n            ifcPSE.PropertyName = \"UnitWeight\";\r\n            ifcPSE.PropertyType = PropertyType.MassPerLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UnitWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.PressureRange\", \"PressureRange\");\r\n            ifcPSE.PropertyName = \"PressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.NominalDiameterOrWidth\", \"NominalDiameterOrWidth\");\r\n            ifcPSE.PropertyName = \"NominalDiameterOrWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterOrWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.EndStyleTreatment\", \"EndStyleTreatment\");\r\n            ifcPSE.PropertyName = \"EndStyleTreatment\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndStyleTreatmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctFittingTypeCommon\"))\r\n         {\r\n            propertySetDuctFittingTypeCommon.EntityTypes.Add(IFCEntityType.IfcDuctFitting);\r\n            propertySetDuctFittingTypeCommon.ObjectType = \"IfcDuctFitting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.PressureClass\", \"PressureClass\");\r\n            ifcPSE.PropertyName = \"PressureClass\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure Class\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧力クラス\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.PressureRange\", \"PressureRange\");\r\n            ifcPSE.PropertyName = \"PressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧力範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"温度範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctFittingTypeCommon\"))\r\n         {\r\n            propertySetDuctFittingTypeCommon.EntityTypes.Add(IFCEntityType.IfcDuctFitting);\r\n            propertySetDuctFittingTypeCommon.EntityTypes.Add(IFCEntityType.IfcDuctFittingType);\r\n            propertySetDuctFittingTypeCommon.ObjectType = \"IfcDuctFitting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.PressureClass\", \"PressureClass\");\r\n            ifcPSE.PropertyName = \"PressureClass\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.PressureRange\", \"PressureRange\");\r\n            ifcPSE.PropertyName = \"PressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctFittingTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDuctFittingTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DuctSegmentOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDuctSegmentOccurrence = new PropertySetDescription();\r\n         propertySetDuctSegmentOccurrence.Name = \"Pset_DuctSegmentOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctSegmentOccurrence\"))\r\n         {\r\n            propertySetDuctSegmentOccurrence.EntityTypes.Add(IFCEntityType.IfcDuctSegment);\r\n            propertySetDuctSegmentOccurrence.ObjectType = \"IfcDuctSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentOccurrence.InteriorRoughnessCoefficient\", \"InteriorRoughnessCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorRoughnessCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Interior Roughness Coefficient\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"内面粗さ係数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorRoughnessCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentOccurrence.HasLiner\", \"HasLiner\");\r\n            ifcPSE.PropertyName = \"HasLiner\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Liner\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"内張り有無\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasLinerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentOccurrence.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Color\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"色\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctSegmentOccurrence\"))\r\n         {\r\n            propertySetDuctSegmentOccurrence.EntityTypes.Add(IFCEntityType.IfcDuctSegment);\r\n            propertySetDuctSegmentOccurrence.ObjectType = \"IfcDuctSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentOccurrence.InteriorRoughnessCoefficient\", \"InteriorRoughnessCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorRoughnessCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorRoughnessCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentOccurrence.HasLiner\", \"HasLiner\");\r\n            ifcPSE.PropertyName = \"HasLiner\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasLinerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentOccurrence.Colour\", \"Colour\");\r\n            ifcPSE.PropertyName = \"Colour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDuctSegmentOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DuctSegmentPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDuctSegmentPHistory = new PropertySetDescription();\r\n         propertySetDuctSegmentPHistory.Name = \"Pset_DuctSegmentPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctSegmentPHistory\"))\r\n         {\r\n            propertySetDuctSegmentPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentPHistory.LossCoefficient\", \"LossCoefficient\");\r\n            ifcPSE.PropertyName = \"LossCoefficient\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LossCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentPHistory.LeakageCurve\", \"LeakageCurve\");\r\n            ifcPSE.PropertyName = \"LeakageCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentPHistory.FluidFlowLeakage\", \"FluidFlowLeakage\");\r\n            ifcPSE.PropertyName = \"FluidFlowLeakage\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FluidFlowLeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctSegmentPHistory\"))\r\n         {\r\n            propertySetDuctSegmentPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentPHistory.LossCoefficient\", \"LossCoefficient\");\r\n            ifcPSE.PropertyName = \"LossCoefficient\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LossCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentPHistory.LeakageCurve\", \"LeakageCurve\");\r\n            ifcPSE.PropertyName = \"LeakageCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentPHistory.FluidFlowLeakage\", \"FluidFlowLeakage\");\r\n            ifcPSE.PropertyName = \"FluidFlowLeakage\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FluidFlowLeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctSegmentPHistory\"))\r\n         {\r\n            propertySetDuctSegmentPHistory.EntityTypes.Add(IFCEntityType.IfcDuctSegment);\r\n            propertySetDuctSegmentPHistory.ObjectType = \"IfcDuctSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentPHistory.LossCoefficient\", \"LossCoefficient\");\r\n            ifcPSE.PropertyName = \"LossCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Loss Coefficient\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"損失係数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LossCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Atmospheric Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"大気圧\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentPHistory.LeakageCurve\", \"LeakageCurve\");\r\n            ifcPSE.PropertyName = \"LeakageCurve\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Leakage Curve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"漏れ曲線\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentPHistory.FluidFlowLeakage\", \"FluidFlowLeakage\");\r\n            ifcPSE.PropertyName = \"FluidFlowLeakage\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fluid Flow Leakage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"漏れ量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FluidFlowLeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctSegmentPHistory\"))\r\n         {\r\n            propertySetDuctSegmentPHistory.EntityTypes.Add(IFCEntityType.IfcDuctSegment);\r\n            propertySetDuctSegmentPHistory.ObjectType = \"IfcDuctSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentPHistory.LossCoefficient\", \"LossCoefficient\");\r\n            ifcPSE.PropertyName = \"LossCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LossCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentPHistory.LeakageCurveHistory\", \"LeakageCurveHistory\");\r\n            ifcPSE.PropertyName = \"LeakageCurveHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageCurveHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentPHistory.FluidFlowLeakage\", \"FluidFlowLeakage\");\r\n            ifcPSE.PropertyName = \"FluidFlowLeakage\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FluidFlowLeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDuctSegmentPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DuctSegmentTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDuctSegmentTypeCommon = new PropertySetDescription();\r\n         propertySetDuctSegmentTypeCommon.Name = \"Pset_DuctSegmentTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctSegmentTypeCommon\"))\r\n         {\r\n            propertySetDuctSegmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcDuctSegmentType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.Shape\", \"Shape\");\r\n            ifcPSE.PropertyName = \"Shape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_DuctSegmentShape);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.MaterialThickness\", \"MaterialThickness\");\r\n            ifcPSE.PropertyName = \"MaterialThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.WorkingPressure\", \"WorkingPressure\");\r\n            ifcPSE.PropertyName = \"WorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.UnitWeight\", \"UnitWeight\");\r\n            ifcPSE.PropertyName = \"UnitWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UnitWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.PressureRange\", \"PressureRange\");\r\n            ifcPSE.PropertyName = \"PressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.LongitudinalSeam\", \"LongitudinalSeam\");\r\n            ifcPSE.PropertyName = \"LongitudinalSeam\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongitudinalSeamCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.NominalDiameterOrWidth\", \"NominalDiameterOrWidth\");\r\n            ifcPSE.PropertyName = \"NominalDiameterOrWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterOrWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.EndStyleTreatment\", \"EndStyleTreatment\");\r\n            ifcPSE.PropertyName = \"EndStyleTreatment\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndStyleTreatmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.Reinforcement\", \"Reinforcement\");\r\n            ifcPSE.PropertyName = \"Reinforcement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.ReinforcementSpacing\", \"ReinforcementSpacing\");\r\n            ifcPSE.PropertyName = \"ReinforcementSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctSegmentTypeCommon\"))\r\n         {\r\n            propertySetDuctSegmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcDuctSegmentType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.Shape\", \"Shape\");\r\n            ifcPSE.PropertyName = \"Shape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_DuctSegmentShape);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.MaterialThickness\", \"MaterialThickness\");\r\n            ifcPSE.PropertyName = \"MaterialThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.WorkingPressure\", \"WorkingPressure\");\r\n            ifcPSE.PropertyName = \"WorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.UnitWeight\", \"UnitWeight\");\r\n            ifcPSE.PropertyName = \"UnitWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UnitWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.PressureRange\", \"PressureRange\");\r\n            ifcPSE.PropertyName = \"PressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.LongitudinalSeam\", \"LongitudinalSeam\");\r\n            ifcPSE.PropertyName = \"LongitudinalSeam\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongitudinalSeamCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.NominalDiameterOrWidth\", \"NominalDiameterOrWidth\");\r\n            ifcPSE.PropertyName = \"NominalDiameterOrWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterOrWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.EndStyleTreatment\", \"EndStyleTreatment\");\r\n            ifcPSE.PropertyName = \"EndStyleTreatment\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndStyleTreatmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.Reinforcement\", \"Reinforcement\");\r\n            ifcPSE.PropertyName = \"Reinforcement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.ReinforcementSpacing\", \"ReinforcementSpacing\");\r\n            ifcPSE.PropertyName = \"ReinforcementSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctSegmentTypeCommon\"))\r\n         {\r\n            propertySetDuctSegmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcDuctSegment);\r\n            propertySetDuctSegmentTypeCommon.ObjectType = \"IfcDuctSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.Shape\", \"Shape\");\r\n            ifcPSE.PropertyName = \"Shape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_DuctSegmentShape);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shape\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"形状\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.WorkingPressure\", \"WorkingPressure\");\r\n            ifcPSE.PropertyName = \"WorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Working Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧力クラス\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.PressureRange\", \"PressureRange\");\r\n            ifcPSE.PropertyName = \"PressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧力範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"温度範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.LongitudinalSeam\", \"LongitudinalSeam\");\r\n            ifcPSE.PropertyName = \"LongitudinalSeam\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Longitudinal Seam\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ハゼ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongitudinalSeamCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.NominalDiameterOrWidth\", \"NominalDiameterOrWidth\");\r\n            ifcPSE.PropertyName = \"NominalDiameterOrWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Diameter Or Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"呼び径・巾\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterOrWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"呼び高さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.Reinforcement\", \"Reinforcement\");\r\n            ifcPSE.PropertyName = \"Reinforcement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reinforcement\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"補強\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.ReinforcementSpacing\", \"ReinforcementSpacing\");\r\n            ifcPSE.PropertyName = \"ReinforcementSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reinforcement Spacing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"補強間隔\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctSegmentTypeCommon\"))\r\n         {\r\n            propertySetDuctSegmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcDuctSegment);\r\n            propertySetDuctSegmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcDuctSegmentType);\r\n            propertySetDuctSegmentTypeCommon.ObjectType = \"IfcDuctSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.CrossSectionShape\", \"CrossSectionShape\");\r\n            ifcPSE.PropertyName = \"CrossSectionShape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DuctSegmentShape);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.WorkingPressure\", \"WorkingPressure\");\r\n            ifcPSE.PropertyName = \"WorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.PressureRange\", \"PressureRange\");\r\n            ifcPSE.PropertyName = \"PressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.LongitudinalSeam\", \"LongitudinalSeam\");\r\n            ifcPSE.PropertyName = \"LongitudinalSeam\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongitudinalSeamCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.NominalDiameterOrWidth\", \"NominalDiameterOrWidth\");\r\n            ifcPSE.PropertyName = \"NominalDiameterOrWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterOrWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.Reinforcement\", \"Reinforcement\");\r\n            ifcPSE.PropertyName = \"Reinforcement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSegmentTypeCommon.ReinforcementSpacing\", \"ReinforcementSpacing\");\r\n            ifcPSE.PropertyName = \"ReinforcementSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDuctSegmentTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DuctSilencerPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDuctSilencerPHistory = new PropertySetDescription();\r\n         propertySetDuctSilencerPHistory.Name = \"Pset_DuctSilencerPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctSilencerPHistory\"))\r\n         {\r\n            propertySetDuctSilencerPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerPHistory.AirFlowRate\", \"AirFlowRate\");\r\n            ifcPSE.PropertyName = \"AirFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerPHistory.AirPressureDropCurve\", \"AirPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurve\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctSilencerPHistory\"))\r\n         {\r\n            propertySetDuctSilencerPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerPHistory.AirFlowRate\", \"AirFlowRate\");\r\n            ifcPSE.PropertyName = \"AirFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerPHistory.AirPressureDropCurve\", \"AirPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurve\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctSilencerPHistory\"))\r\n         {\r\n            propertySetDuctSilencerPHistory.EntityTypes.Add(IFCEntityType.IfcDuctSilencer);\r\n            propertySetDuctSilencerPHistory.ObjectType = \"IfcDuctSilencer\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerPHistory.AirFlowRate\", \"AirFlowRate\");\r\n            ifcPSE.PropertyName = \"AirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Flow Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"風量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerPHistory.AirPressureDropCurve\", \"AirPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurve\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Pressure Drop Curve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧力降下曲線\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctSilencerPHistory\"))\r\n         {\r\n            propertySetDuctSilencerPHistory.EntityTypes.Add(IFCEntityType.IfcDuctSilencer);\r\n            propertySetDuctSilencerPHistory.ObjectType = \"IfcDuctSilencer\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerPHistory.AirFlowRate\", \"AirFlowRate\");\r\n            ifcPSE.PropertyName = \"AirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerPHistory.AirPressureDropCurve\", \"AirPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurve\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDuctSilencerPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_DuctSilencerTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetDuctSilencerTypeCommon = new PropertySetDescription();\r\n         propertySetDuctSilencerTypeCommon.Name = \"Pset_DuctSilencerTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctSilencerTypeCommon\"))\r\n         {\r\n            propertySetDuctSilencerTypeCommon.EntityTypes.Add(IFCEntityType.IfcDuctSilencerType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.Shape\", \"Shape\");\r\n            ifcPSE.PropertyName = \"Shape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_DuctSilencerShape);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.HydraulicDiameter\", \"HydraulicDiameter\");\r\n            ifcPSE.PropertyName = \"HydraulicDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HydraulicDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.AirFlowrateRange\", \"AirFlowrateRange\");\r\n            ifcPSE.PropertyName = \"AirFlowrateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowrateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.WorkingPressureRange\", \"WorkingPressureRange\");\r\n            ifcPSE.PropertyName = \"WorkingPressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.HasExteriorInsulation\", \"HasExteriorInsulation\");\r\n            ifcPSE.PropertyName = \"HasExteriorInsulation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasExteriorInsulationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctSilencerTypeCommon\"))\r\n         {\r\n            propertySetDuctSilencerTypeCommon.EntityTypes.Add(IFCEntityType.IfcDuctSilencerType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.Shape\", \"Shape\");\r\n            ifcPSE.PropertyName = \"Shape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_DuctSilencerShape);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.HydraulicDiameter\", \"HydraulicDiameter\");\r\n            ifcPSE.PropertyName = \"HydraulicDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HydraulicDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.AirFlowrateRange\", \"AirFlowrateRange\");\r\n            ifcPSE.PropertyName = \"AirFlowrateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowrateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.WorkingPressureRange\", \"WorkingPressureRange\");\r\n            ifcPSE.PropertyName = \"WorkingPressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.HasExteriorInsulation\", \"HasExteriorInsulation\");\r\n            ifcPSE.PropertyName = \"HasExteriorInsulation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasExteriorInsulationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctSilencerTypeCommon\"))\r\n         {\r\n            propertySetDuctSilencerTypeCommon.EntityTypes.Add(IFCEntityType.IfcDuctSilencer);\r\n            propertySetDuctSilencerTypeCommon.ObjectType = \"IfcDuctSilencer\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.HydraulicDiameter\", \"HydraulicDiameter\");\r\n            ifcPSE.PropertyName = \"HydraulicDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Hydraulic Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水力直径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HydraulicDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Weight\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"重さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.AirFlowrateRange\", \"AirFlowrateRange\");\r\n            ifcPSE.PropertyName = \"AirFlowrateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Flowrate Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流量範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowrateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.WorkingPressureRange\", \"WorkingPressureRange\");\r\n            ifcPSE.PropertyName = \"WorkingPressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Working Pressure Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"作動圧力範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"温度範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.HasExteriorInsulation\", \"HasExteriorInsulation\");\r\n            ifcPSE.PropertyName = \"HasExteriorInsulation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Exterior Insulation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部保温\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasExteriorInsulationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_DuctSilencerTypeCommon\"))\r\n         {\r\n            propertySetDuctSilencerTypeCommon.EntityTypes.Add(IFCEntityType.IfcDuctSilencer);\r\n            propertySetDuctSilencerTypeCommon.EntityTypes.Add(IFCEntityType.IfcDuctSilencerType);\r\n            propertySetDuctSilencerTypeCommon.ObjectType = \"IfcDuctSilencer\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.HydraulicDiameter\", \"HydraulicDiameter\");\r\n            ifcPSE.PropertyName = \"HydraulicDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HydraulicDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.AirFlowRateRange\", \"AirFlowRateRange\");\r\n            ifcPSE.PropertyName = \"AirFlowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirFlowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.WorkingPressureRange\", \"WorkingPressureRange\");\r\n            ifcPSE.PropertyName = \"WorkingPressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_DuctSilencerTypeCommon.HasExteriorInsulation\", \"HasExteriorInsulation\");\r\n            ifcPSE.PropertyName = \"HasExteriorInsulation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasExteriorInsulationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetDuctSilencerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetDuctSilencerTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricalCircuit(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricalCircuit = new PropertySetDescription();\r\n         propertySetElectricalCircuit.Name = \"Pset_ElectricalCircuit\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricalCircuit\"))\r\n         {\r\n            propertySetElectricalCircuit.EntityTypes.Add(IFCEntityType.IfcElectricalCircuit);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalCircuit.Diversity\", \"Diversity\");\r\n            ifcPSE.PropertyName = \"Diversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalCircuit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalCircuit.NumberOfPhases\", \"NumberOfPhases\");\r\n            ifcPSE.PropertyName = \"NumberOfPhases\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPhasesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalCircuit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalCircuit.MaximumAllowedVoltageDrop\", \"MaximumAllowedVoltageDrop\");\r\n            ifcPSE.PropertyName = \"MaximumAllowedVoltageDrop\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumAllowedVoltageDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalCircuit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalCircuit.NetImpedance\", \"NetImpedance\");\r\n            ifcPSE.PropertyName = \"NetImpedance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetImpedanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalCircuit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricalCircuit\"))\r\n         {\r\n            propertySetElectricalCircuit.EntityTypes.Add(IFCEntityType.IfcElectricalCircuit);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalCircuit.Diversity\", \"Diversity\");\r\n            ifcPSE.PropertyName = \"Diversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalCircuit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalCircuit.NumberOfPhases\", \"NumberOfPhases\");\r\n            ifcPSE.PropertyName = \"NumberOfPhases\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPhasesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalCircuit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalCircuit.MaximumAllowedVoltageDrop\", \"MaximumAllowedVoltageDrop\");\r\n            ifcPSE.PropertyName = \"MaximumAllowedVoltageDrop\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumAllowedVoltageDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalCircuit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalCircuit.NetImpedance\", \"NetImpedance\");\r\n            ifcPSE.PropertyName = \"NetImpedance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetImpedanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalCircuit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricalCircuit);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricalDeviceCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricalDeviceCommon = new PropertySetDescription();\r\n         propertySetElectricalDeviceCommon.Name = \"Pset_ElectricalDeviceCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricalDeviceCommon\"))\r\n         {\r\n            propertySetElectricalDeviceCommon.EntityTypes.Add(IFCEntityType.IfcDistributionElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.NominalCurrent\", \"NominalCurrent\");\r\n            ifcPSE.PropertyName = \"NominalCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.UsageCurrent\", \"UsageCurrent\");\r\n            ifcPSE.PropertyName = \"UsageCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UsageCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.NominalVoltage\", \"NominalVoltage\");\r\n            ifcPSE.PropertyName = \"NominalVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.ElectricalDeviceNominalPower\", \"ElectricalDeviceNominalPower\");\r\n            ifcPSE.PropertyName = \"ElectricalDeviceNominalPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricalDeviceNominalPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.NumberOfPoles\", \"NumberOfPoles\");\r\n            ifcPSE.PropertyName = \"NumberOfPoles\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPolesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.HasProtectiveEarth\", \"HasProtectiveEarth\");\r\n            ifcPSE.PropertyName = \"HasProtectiveEarth\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasProtectiveEarthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.NominalFrequencyRange\", \"NominalFrequencyRange\");\r\n            ifcPSE.PropertyName = \"NominalFrequencyRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalFrequencyRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.PhaseAngle\", \"PhaseAngle\");\r\n            ifcPSE.PropertyName = \"PhaseAngle\";\r\n            ifcPSE.PropertyType = PropertyType.PositivePlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PhaseAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.IP_Code\", \"IP_Code\");\r\n            ifcPSE.PropertyName = \"IP_Code\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IP_CodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.InsulationStandardClass\", \"InsulationStandardClass\");\r\n            ifcPSE.PropertyName = \"InsulationStandardClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_InsulationStandardClass);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InsulationStandardClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.PhaseReference\", \"PhaseReference\");\r\n            ifcPSE.PropertyName = \"PhaseReference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PhaseReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricalDeviceCommon\"))\r\n         {\r\n            propertySetElectricalDeviceCommon.EntityTypes.Add(IFCEntityType.IfcDistributionElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.NominalCurrent\", \"NominalCurrent\");\r\n            ifcPSE.PropertyName = \"NominalCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.UsageCurrent\", \"UsageCurrent\");\r\n            ifcPSE.PropertyName = \"UsageCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UsageCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.NominalVoltage\", \"NominalVoltage\");\r\n            ifcPSE.PropertyName = \"NominalVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.ElectricalDeviceNominalPower\", \"ElectricalDeviceNominalPower\");\r\n            ifcPSE.PropertyName = \"ElectricalDeviceNominalPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricalDeviceNominalPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.NumberOfPoles\", \"NumberOfPoles\");\r\n            ifcPSE.PropertyName = \"NumberOfPoles\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPolesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.HasProtectiveEarth\", \"HasProtectiveEarth\");\r\n            ifcPSE.PropertyName = \"HasProtectiveEarth\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasProtectiveEarthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.NominalFrequencyRange\", \"NominalFrequencyRange\");\r\n            ifcPSE.PropertyName = \"NominalFrequencyRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalFrequencyRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.PhaseAngle\", \"PhaseAngle\");\r\n            ifcPSE.PropertyName = \"PhaseAngle\";\r\n            ifcPSE.PropertyType = PropertyType.PositivePlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PhaseAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.IP_Code\", \"IP_Code\");\r\n            ifcPSE.PropertyName = \"IP_Code\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IP_CodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.InsulationStandardClass\", \"InsulationStandardClass\");\r\n            ifcPSE.PropertyName = \"InsulationStandardClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_InsulationStandardClass);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InsulationStandardClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.PhaseReference\", \"PhaseReference\");\r\n            ifcPSE.PropertyName = \"PhaseReference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PhaseReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricalDeviceCommon\"))\r\n         {\r\n            propertySetElectricalDeviceCommon.EntityTypes.Add(IFCEntityType.IfcDistributionElement);\r\n            propertySetElectricalDeviceCommon.ObjectType = \"IfcDistributionElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.RatedCurrent\", \"RatedCurrent\");\r\n            ifcPSE.PropertyName = \"RatedCurrent\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Rated Current\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.RatedVoltage\", \"RatedVoltage\");\r\n            ifcPSE.PropertyName = \"RatedVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Rated Voltage\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.NominalFrequencyRange\", \"NominalFrequencyRange\");\r\n            ifcPSE.PropertyName = \"NominalFrequencyRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Frequency Range\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalFrequencyRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.PowerFactor\", \"PowerFactor\");\r\n            ifcPSE.PropertyName = \"PowerFactor\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Power Factor\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.ConductorFunction\", \"ConductorFunction\");\r\n            ifcPSE.PropertyName = \"ConductorFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ConductorFunctionEnum);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Conductor Function\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConductorFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.NumberOfPoles\", \"NumberOfPoles\");\r\n            ifcPSE.PropertyName = \"NumberOfPoles\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Poles\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPolesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.HasProtectiveEarth\", \"HasProtectiveEarth\");\r\n            ifcPSE.PropertyName = \"HasProtectiveEarth\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Protective Earth\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasProtectiveEarthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.InsulationStandardClass\", \"InsulationStandardClass\");\r\n            ifcPSE.PropertyName = \"InsulationStandardClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_InsulationStandardClass);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Insulation Standard Class\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InsulationStandardClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.IP_Code\", \"IP_Code\");\r\n            ifcPSE.PropertyName = \"IP_Code\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"IP_ Code\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IP_CodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.IK_Code\", \"IK_Code\");\r\n            ifcPSE.PropertyName = \"IK_Code\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IK_CodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricalDeviceCommon\"))\r\n         {\r\n            propertySetElectricalDeviceCommon.EntityTypes.Add(IFCEntityType.IfcDistributionElement);\r\n            propertySetElectricalDeviceCommon.EntityTypes.Add(IFCEntityType.IfcDistributionElementType);\r\n            propertySetElectricalDeviceCommon.ObjectType = \"IfcDistributionElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.RatedCurrent\", \"RatedCurrent\");\r\n            ifcPSE.PropertyName = \"RatedCurrent\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.RatedVoltage\", \"RatedVoltage\");\r\n            ifcPSE.PropertyName = \"RatedVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.NominalFrequencyRange\", \"NominalFrequencyRange\");\r\n            ifcPSE.PropertyName = \"NominalFrequencyRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalFrequencyRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.PowerFactor\", \"PowerFactor\");\r\n            ifcPSE.PropertyName = \"PowerFactor\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.ConductorFunction\", \"ConductorFunction\");\r\n            ifcPSE.PropertyName = \"ConductorFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ConductorFunctionEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConductorFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.NumberOfPoles\", \"NumberOfPoles\");\r\n            ifcPSE.PropertyName = \"NumberOfPoles\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPolesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.HasProtectiveEarth\", \"HasProtectiveEarth\");\r\n            ifcPSE.PropertyName = \"HasProtectiveEarth\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasProtectiveEarthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.InsulationStandardClass\", \"InsulationStandardClass\");\r\n            ifcPSE.PropertyName = \"InsulationStandardClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_InsulationStandardClass);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InsulationStandardClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.IP_Code\", \"IP_Code\");\r\n            ifcPSE.PropertyName = \"IP_Code\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IP_CodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.IK_Code\", \"IK_Code\");\r\n            ifcPSE.PropertyName = \"IK_Code\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IK_CodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.EarthingStyle\", \"EarthingStyle\");\r\n            ifcPSE.PropertyName = \"EarthingStyle\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EarthingStyleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.HeatDissipation\", \"HeatDissipation\");\r\n            ifcPSE.PropertyName = \"HeatDissipation\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatDissipationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.Power\", \"Power\");\r\n            ifcPSE.PropertyName = \"Power\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.NominalPowerConsumption\", \"NominalPowerConsumption\");\r\n            ifcPSE.PropertyName = \"NominalPowerConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPowerConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCommon.NumberOfPowerSupplyPorts\", \"NumberOfPowerSupplyPorts\");\r\n            ifcPSE.PropertyName = \"NumberOfPowerSupplyPorts\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPowerSupplyPortsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricalDeviceCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricalDeviceCompliance(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricalDeviceCompliance = new PropertySetDescription();\r\n         propertySetElectricalDeviceCompliance.Name = \"Pset_ElectricalDeviceCompliance\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricalDeviceCompliance\"))\r\n         {\r\n            propertySetElectricalDeviceCompliance.EntityTypes.Add(IFCEntityType.IfcDistributionElement);\r\n            propertySetElectricalDeviceCompliance.EntityTypes.Add(IFCEntityType.IfcDistributionElementType);\r\n            propertySetElectricalDeviceCompliance.ObjectType = \"IfcDistributionElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCompliance.ElectroMagneticStandardsCompliance\", \"ElectroMagneticStandardsCompliance\");\r\n            ifcPSE.PropertyName = \"ElectroMagneticStandardsCompliance\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectroMagneticStandardsComplianceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCompliance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCompliance.ExplosiveAtmosphereStandardsCompliance\", \"ExplosiveAtmosphereStandardsCompliance\");\r\n            ifcPSE.PropertyName = \"ExplosiveAtmosphereStandardsCompliance\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExplosiveAtmosphereStandardsComplianceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCompliance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCompliance.FireProofingStandardsCompliance\", \"FireProofingStandardsCompliance\");\r\n            ifcPSE.PropertyName = \"FireProofingStandardsCompliance\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireProofingStandardsComplianceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCompliance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalDeviceCompliance.LightningProtectionStandardsCompliance\", \"LightningProtectionStandardsCompliance\");\r\n            ifcPSE.PropertyName = \"LightningProtectionStandardsCompliance\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightningProtectionStandardsComplianceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalDeviceCompliance.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricalDeviceCompliance);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricalFeederLine(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricalFeederLine = new PropertySetDescription();\r\n         propertySetElectricalFeederLine.Name = \"Pset_ElectricalFeederLine\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricalFeederLine\"))\r\n         {\r\n            propertySetElectricalFeederLine.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetElectricalFeederLine.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetElectricalFeederLine.ObjectType = \"IfcCableSegment\";\r\n            propertySetElectricalFeederLine.PredefinedType = \"CONDUCTORSEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalFeederLine.CurrentCarryingCapacity\", \"CurrentCarryingCapacity\");\r\n            ifcPSE.PropertyName = \"CurrentCarryingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentCarryingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalFeederLine.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalFeederLine.DesignAmbientTemperature\", \"DesignAmbientTemperature\");\r\n            ifcPSE.PropertyName = \"DesignAmbientTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DesignAmbientTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalFeederLine.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalFeederLine.ElectricalClearanceDistance\", \"ElectricalClearanceDistance\");\r\n            ifcPSE.PropertyName = \"ElectricalClearanceDistance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricalClearanceDistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalFeederLine.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricalFeederLine.ElectricalFeederType\", \"ElectricalFeederType\");\r\n            ifcPSE.PropertyName = \"ElectricalFeederType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElectricalFeederType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricalFeederTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricalFeederLine.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricalFeederLine);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricAppliancePHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricAppliancePHistory = new PropertySetDescription();\r\n         propertySetElectricAppliancePHistory.Name = \"Pset_ElectricAppliancePHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricAppliancePHistory\"))\r\n         {\r\n            propertySetElectricAppliancePHistory.EntityTypes.Add(IFCEntityType.IfcElectricAppliance);\r\n            propertySetElectricAppliancePHistory.ObjectType = \"IfcElectricAppliance\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricAppliancePHistory.PowerState\", \"PowerState\");\r\n            ifcPSE.PropertyName = \"PowerState\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Power State\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricAppliancePHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricAppliancePHistory\"))\r\n         {\r\n            propertySetElectricAppliancePHistory.EntityTypes.Add(IFCEntityType.IfcElectricAppliance);\r\n            propertySetElectricAppliancePHistory.ObjectType = \"IfcElectricAppliance\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricAppliancePHistory.PowerState\", \"PowerState\");\r\n            ifcPSE.PropertyName = \"PowerState\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricAppliancePHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricAppliancePHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricApplianceTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricApplianceTypeCommon = new PropertySetDescription();\r\n         propertySetElectricApplianceTypeCommon.Name = \"Pset_ElectricApplianceTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricApplianceTypeCommon\"))\r\n         {\r\n            propertySetElectricApplianceTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricAppliance);\r\n            propertySetElectricApplianceTypeCommon.ObjectType = \"IfcElectricAppliance\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricApplianceTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricApplianceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricApplianceTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricApplianceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricApplianceTypeCommon\"))\r\n         {\r\n            propertySetElectricApplianceTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricAppliance);\r\n            propertySetElectricApplianceTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricApplianceType);\r\n            propertySetElectricApplianceTypeCommon.ObjectType = \"IfcElectricAppliance\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricApplianceTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricApplianceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricApplianceTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricApplianceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricApplianceTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricApplianceTypeDishwasher(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricApplianceTypeDishwasher = new PropertySetDescription();\r\n         propertySetElectricApplianceTypeDishwasher.Name = \"Pset_ElectricApplianceTypeDishwasher\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricApplianceTypeDishwasher\"))\r\n         {\r\n            propertySetElectricApplianceTypeDishwasher.EntityTypes.Add(IFCEntityType.IfcElectricAppliance);\r\n            propertySetElectricApplianceTypeDishwasher.ObjectType = \"IfcElectricAppliance\";\r\n            propertySetElectricApplianceTypeDishwasher.PredefinedType = \"DISHWASHER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricApplianceTypeDishwasher.DishwasherType\", \"DishwasherType\");\r\n            ifcPSE.PropertyName = \"DishwasherType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElectricApplianceDishwasherType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Dishwasher Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"食器洗浄機のタイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"식기 세척기의 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DishwasherTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricApplianceTypeDishwasher.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricApplianceTypeDishwasher\"))\r\n         {\r\n            propertySetElectricApplianceTypeDishwasher.EntityTypes.Add(IFCEntityType.IfcElectricAppliance);\r\n            propertySetElectricApplianceTypeDishwasher.EntityTypes.Add(IFCEntityType.IfcElectricApplianceType);\r\n            propertySetElectricApplianceTypeDishwasher.ObjectType = \"IfcElectricAppliance\";\r\n            propertySetElectricApplianceTypeDishwasher.PredefinedType = \"DISHWASHER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricApplianceTypeDishwasher.DishwasherType\", \"DishwasherType\");\r\n            ifcPSE.PropertyName = \"DishwasherType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElectricApplianceDishwasherType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DishwasherTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricApplianceTypeDishwasher.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricApplianceTypeDishwasher);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricApplianceTypeElectricCooker(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricApplianceTypeElectricCooker = new PropertySetDescription();\r\n         propertySetElectricApplianceTypeElectricCooker.Name = \"Pset_ElectricApplianceTypeElectricCooker\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricApplianceTypeElectricCooker\"))\r\n         {\r\n            propertySetElectricApplianceTypeElectricCooker.EntityTypes.Add(IFCEntityType.IfcElectricAppliance);\r\n            propertySetElectricApplianceTypeElectricCooker.ObjectType = \"IfcElectricAppliance\";\r\n            propertySetElectricApplianceTypeElectricCooker.PredefinedType = \"ELECTRICCOOKER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricApplianceTypeElectricCooker.ElectricCookerType\", \"ElectricCookerType\");\r\n            ifcPSE.PropertyName = \"ElectricCookerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElectricApplianceElectricCookerType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Electric Cooker Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電気調理器のタイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전기 밥솥의 종류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricCookerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricApplianceTypeElectricCooker.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricApplianceTypeElectricCooker\"))\r\n         {\r\n            propertySetElectricApplianceTypeElectricCooker.EntityTypes.Add(IFCEntityType.IfcElectricAppliance);\r\n            propertySetElectricApplianceTypeElectricCooker.EntityTypes.Add(IFCEntityType.IfcElectricApplianceType);\r\n            propertySetElectricApplianceTypeElectricCooker.ObjectType = \"IfcElectricAppliance\";\r\n            propertySetElectricApplianceTypeElectricCooker.PredefinedType = \"ELECTRICCOOKER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricApplianceTypeElectricCooker.ElectricCookerType\", \"ElectricCookerType\");\r\n            ifcPSE.PropertyName = \"ElectricCookerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElectricApplianceElectricCookerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricCookerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricApplianceTypeElectricCooker.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricApplianceTypeElectricCooker);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricDistributionBoardOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricDistributionBoardOccurrence = new PropertySetDescription();\r\n         propertySetElectricDistributionBoardOccurrence.Name = \"Pset_ElectricDistributionBoardOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricDistributionBoardOccurrence\"))\r\n         {\r\n            propertySetElectricDistributionBoardOccurrence.EntityTypes.Add(IFCEntityType.IfcElectricDistributionBoard);\r\n            propertySetElectricDistributionBoardOccurrence.ObjectType = \"IfcElectricDistributionBoard\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricDistributionBoardOccurrence.IsMain\", \"IsMain\");\r\n            ifcPSE.PropertyName = \"IsMain\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Main\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsMainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricDistributionBoardOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricDistributionBoardOccurrence.IsSkilledOperator\", \"IsSkilledOperator\");\r\n            ifcPSE.PropertyName = \"IsSkilledOperator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Skilled Operator\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSkilledOperatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricDistributionBoardOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricDistributionBoardOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricDistributionBoardTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricDistributionBoardTypeCommon = new PropertySetDescription();\r\n         propertySetElectricDistributionBoardTypeCommon.Name = \"Pset_ElectricDistributionBoardTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricDistributionBoardTypeCommon\"))\r\n         {\r\n            propertySetElectricDistributionBoardTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricDistributionBoard);\r\n            propertySetElectricDistributionBoardTypeCommon.ObjectType = \"IfcElectricDistributionBoard\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricDistributionBoardTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricDistributionBoardTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricDistributionBoardTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricDistributionBoardTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricDistributionBoardTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricDistributionPointCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricDistributionPointCommon = new PropertySetDescription();\r\n         propertySetElectricDistributionPointCommon.Name = \"Pset_ElectricDistributionPointCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricDistributionPointCommon\"))\r\n         {\r\n            propertySetElectricDistributionPointCommon.EntityTypes.Add(IFCEntityType.IfcElectricDistributionPoint);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricDistributionPointCommon.IsMain\", \"IsMain\");\r\n            ifcPSE.PropertyName = \"IsMain\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsMainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricDistributionPointCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricDistributionPointCommon.NumberOfDoors\", \"NumberOfDoors\");\r\n            ifcPSE.PropertyName = \"NumberOfDoors\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfDoorsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricDistributionPointCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricDistributionPointCommon.CaseMaterial\", \"CaseMaterial\");\r\n            ifcPSE.PropertyName = \"CaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricDistributionPointCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricDistributionPointCommon.CaseWeight\", \"CaseWeight\");\r\n            ifcPSE.PropertyName = \"CaseWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CaseWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricDistributionPointCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricDistributionPointCommon.NumberOfOpenings\", \"NumberOfOpenings\");\r\n            ifcPSE.PropertyName = \"NumberOfOpenings\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfOpeningsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricDistributionPointCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricDistributionPointCommon\"))\r\n         {\r\n            propertySetElectricDistributionPointCommon.EntityTypes.Add(IFCEntityType.IfcElectricDistributionPoint);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricDistributionPointCommon.IsMain\", \"IsMain\");\r\n            ifcPSE.PropertyName = \"IsMain\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsMainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricDistributionPointCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricDistributionPointCommon.NumberOfDoors\", \"NumberOfDoors\");\r\n            ifcPSE.PropertyName = \"NumberOfDoors\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfDoorsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricDistributionPointCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricDistributionPointCommon.CaseMaterial\", \"CaseMaterial\");\r\n            ifcPSE.PropertyName = \"CaseMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CaseMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricDistributionPointCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricDistributionPointCommon.CaseWeight\", \"CaseWeight\");\r\n            ifcPSE.PropertyName = \"CaseWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CaseWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricDistributionPointCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricDistributionPointCommon.NumberOfOpenings\", \"NumberOfOpenings\");\r\n            ifcPSE.PropertyName = \"NumberOfOpenings\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfOpeningsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricDistributionPointCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricDistributionPointCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricFlowStorageDevicePHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricFlowStorageDevicePHistory = new PropertySetDescription();\r\n         propertySetElectricFlowStorageDevicePHistory.Name = \"Pset_ElectricFlowStorageDevicePHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricFlowStorageDevicePHistory\"))\r\n         {\r\n            propertySetElectricFlowStorageDevicePHistory.EntityTypes.Add(IFCEntityType.IfcElectricFlowStorageDevice);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDevicePHistory.Level\", \"Level\");\r\n            ifcPSE.PropertyName = \"Level\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDevicePHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricFlowStorageDevicePHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricFlowStorageDeviceTypeBattery(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricFlowStorageDeviceTypeBattery = new PropertySetDescription();\r\n         propertySetElectricFlowStorageDeviceTypeBattery.Name = \"Pset_ElectricFlowStorageDeviceTypeBattery\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricFlowStorageDeviceTypeBattery\"))\r\n         {\r\n            propertySetElectricFlowStorageDeviceTypeBattery.EntityTypes.Add(IFCEntityType.IfcElectricFlowStorageDevice);\r\n            propertySetElectricFlowStorageDeviceTypeBattery.EntityTypes.Add(IFCEntityType.IfcElectricFlowStorageDeviceType);\r\n            propertySetElectricFlowStorageDeviceTypeBattery.ObjectType = \"IfcElectricFlowStorageDevice\";\r\n            propertySetElectricFlowStorageDeviceTypeBattery.PredefinedType = \"BATTERY\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeBattery.CurrentRegulationRate\", \"CurrentRegulationRate\");\r\n            ifcPSE.PropertyName = \"CurrentRegulationRate\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentRegulationRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeBattery.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeBattery.NominalSupplyCurrent\", \"NominalSupplyCurrent\");\r\n            ifcPSE.PropertyName = \"NominalSupplyCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSupplyCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeBattery.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeBattery.VoltageRegulationRate\", \"VoltageRegulationRate\");\r\n            ifcPSE.PropertyName = \"VoltageRegulationRate\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageRegulationRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeBattery.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeBattery.AssemblyInstruction\", \"AssemblyInstruction\");\r\n            ifcPSE.PropertyName = \"AssemblyInstruction\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyInstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeBattery.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeBattery.BatteryChargingType\", \"BatteryChargingType\");\r\n            ifcPSE.PropertyName = \"BatteryChargingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_BatteryChargingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BatteryChargingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeBattery.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeBattery.EncapsulationTechnologyCode\", \"EncapsulationTechnologyCode\");\r\n            ifcPSE.PropertyName = \"EncapsulationTechnologyCode\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EncapsulationTechnologyCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeBattery.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeBattery.OpenCircuitVoltage\", \"OpenCircuitVoltage\");\r\n            ifcPSE.PropertyName = \"OpenCircuitVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OpenCircuitVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeBattery.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricFlowStorageDeviceTypeBattery);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricFlowStorageDeviceTypeCapacitor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricFlowStorageDeviceTypeCapacitor = new PropertySetDescription();\r\n         propertySetElectricFlowStorageDeviceTypeCapacitor.Name = \"Pset_ElectricFlowStorageDeviceTypeCapacitor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricFlowStorageDeviceTypeCapacitor\"))\r\n         {\r\n            propertySetElectricFlowStorageDeviceTypeCapacitor.EntityTypes.Add(IFCEntityType.IfcElectricFlowStorageDevice);\r\n            propertySetElectricFlowStorageDeviceTypeCapacitor.EntityTypes.Add(IFCEntityType.IfcElectricFlowStorageDeviceType);\r\n            propertySetElectricFlowStorageDeviceTypeCapacitor.ObjectType = \"IfcElectricFlowStorageDevice\";\r\n            propertySetElectricFlowStorageDeviceTypeCapacitor.PredefinedType = \"CAPACITOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCapacitor.NumberOfPhases\", \"NumberOfPhases\");\r\n            ifcPSE.PropertyName = \"NumberOfPhases\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPhasesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCapacitor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricFlowStorageDeviceTypeCapacitor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricFlowStorageDeviceTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricFlowStorageDeviceTypeCommon = new PropertySetDescription();\r\n         propertySetElectricFlowStorageDeviceTypeCommon.Name = \"Pset_ElectricFlowStorageDeviceTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricFlowStorageDeviceTypeCommon\"))\r\n         {\r\n            propertySetElectricFlowStorageDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricFlowStorageDevice);\r\n            propertySetElectricFlowStorageDeviceTypeCommon.ObjectType = \"IfcElectricFlowStorageDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.NominalSupplyVoltage\", \"NominalSupplyVoltage\");\r\n            ifcPSE.PropertyName = \"NominalSupplyVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Supply Voltage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"公称電圧\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"공칭 주파수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSupplyVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.NominalSupplyVoltageOffset\", \"NominalSupplyVoltageOffset\");\r\n            ifcPSE.PropertyName = \"NominalSupplyVoltageOffset\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Supply Voltage Offset\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"オフセット公称電圧\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"옵셋 공칭 전압\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSupplyVoltageOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.NominalFrequency\", \"NominalFrequency\");\r\n            ifcPSE.PropertyName = \"NominalFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Frequency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"公称周波数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"공칭 주파수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ConnectedConductorFunction\", \"ConnectedConductorFunction\");\r\n            ifcPSE.PropertyName = \"ConnectedConductorFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ConductorFunctionEnum);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Connected Conductor Function\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"接続導体機能\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"연결 도체 기능\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectedConductorFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit3PoleMaximumState\", \"ShortCircuit3PoleMaximumState\");\r\n            ifcPSE.PropertyName = \"ShortCircuit3PoleMaximumState\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Circuit3 Pole Maximum State\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"3極最大短絡電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"3 극 최대 단락 전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortCircuit3PoleMaximumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit3PolePowerFactorMaximumState\", \"ShortCircuit3PolePowerFactorMaximumState\");\r\n            ifcPSE.PropertyName = \"ShortCircuit3PolePowerFactorMaximumState\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Circuit3 Pole Power Factor Maximum State\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"3極最大短絡電流力率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"3 극 최대 단락 전류 역률\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortCircuit3PolePowerFactorMaximumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit2PoleMinimumState\", \"ShortCircuit2PoleMinimumState\");\r\n            ifcPSE.PropertyName = \"ShortCircuit2PoleMinimumState\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Circuit2 Pole Minimum State\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"2極最小短絡電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"2 극 최소 단락 전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortCircuit2PoleMinimumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit2PolePowerFactorMinimumState\", \"ShortCircuit2PolePowerFactorMinimumState\");\r\n            ifcPSE.PropertyName = \"ShortCircuit2PolePowerFactorMinimumState\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Circuit2 Pole Power Factor Minimum State\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"2極最小短絡電流力率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"2 극 최소 단락 전류 역률\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortCircuit2PolePowerFactorMinimumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PoleMaximumState\", \"ShortCircuit1PoleMaximumState\");\r\n            ifcPSE.PropertyName = \"ShortCircuit1PoleMaximumState\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Circuit1 Pole Maximum State\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"1極最大短絡電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"1 극 최대 단락 전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortCircuit1PoleMaximumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PolePowerFactorMaximumState\", \"ShortCircuit1PolePowerFactorMaximumState\");\r\n            ifcPSE.PropertyName = \"ShortCircuit1PolePowerFactorMaximumState\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Circuit1 Pole Power Factor Maximum State\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"1極最大短絡電流力率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"1 극 최대 단락 전류 역률\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortCircuit1PolePowerFactorMaximumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PoleMinimumState\", \"ShortCircuit1PoleMinimumState\");\r\n            ifcPSE.PropertyName = \"ShortCircuit1PoleMinimumState\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Circuit1 Pole Minimum State\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"1極最小短絡電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"1 극 최소 단락 전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortCircuit1PoleMinimumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PolePowerFactorMinimumState\", \"ShortCircuit1PolePowerFactorMinimumState\");\r\n            ifcPSE.PropertyName = \"ShortCircuit1PolePowerFactorMinimumState\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Circuit1 Pole Power Factor Minimum State\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"1極最小短絡電流力率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"1 극 최소 단락 전류 역률\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortCircuit1PolePowerFactorMinimumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PoleMaximumState\", \"EarthFault1PoleMaximumState\");\r\n            ifcPSE.PropertyName = \"EarthFault1PoleMaximumState\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Earth Fault1 Pole Maximum State\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"1極最大地絡電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"1 극 최대 지락 전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EarthFault1PoleMaximumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PolePowerFactorMaximumState\", \"EarthFault1PolePowerFactorMaximumState\");\r\n            ifcPSE.PropertyName = \"EarthFault1PolePowerFactorMaximumState\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Earth Fault1 Pole Power Factor Maximum State\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"1極最大地絡電流力率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"1 극 최대 지락 전류 역률\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EarthFault1PolePowerFactorMaximumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PoleMinimumState\", \"EarthFault1PoleMinimumState\");\r\n            ifcPSE.PropertyName = \"EarthFault1PoleMinimumState\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Earth Fault1 Pole Minimum State\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"1極最小地絡電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"1 극 최소 지락 전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EarthFault1PoleMinimumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PolePowerFactorMinimumState\", \"EarthFault1PolePowerFactorMinimumState\");\r\n            ifcPSE.PropertyName = \"EarthFault1PolePowerFactorMinimumState\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Earth Fault1 Pole Power Factor Minimum State\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"1極最小地絡電流力率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"1극  최소 지락 전류 역률\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EarthFault1PolePowerFactorMinimumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.RadiativeFraction\", \"RadiativeFraction\");\r\n            ifcPSE.PropertyName = \"RadiativeFraction\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RadiativeFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ModuleCapacity\", \"ModuleCapacity\");\r\n            ifcPSE.PropertyName = \"ModuleCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCapacitance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ModuleCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ModulesInParallel\", \"ModulesInParallel\");\r\n            ifcPSE.PropertyName = \"ModulesInParallel\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ModulesInParallelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ModulesInSeries\", \"ModulesInSeries\");\r\n            ifcPSE.PropertyName = \"ModulesInSeries\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ModulesInSeriesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricFlowStorageDeviceTypeCommon\"))\r\n         {\r\n            propertySetElectricFlowStorageDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricFlowStorageDevice);\r\n            propertySetElectricFlowStorageDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricFlowStorageDeviceType);\r\n            propertySetElectricFlowStorageDeviceTypeCommon.ObjectType = \"IfcElectricFlowStorageDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.NominalSupplyVoltage\", \"NominalSupplyVoltage\");\r\n            ifcPSE.PropertyName = \"NominalSupplyVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSupplyVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.NominalSupplyVoltageOffset\", \"NominalSupplyVoltageOffset\");\r\n            ifcPSE.PropertyName = \"NominalSupplyVoltageOffset\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSupplyVoltageOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.NominalFrequency\", \"NominalFrequency\");\r\n            ifcPSE.PropertyName = \"NominalFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ConnectedConductorFunction\", \"ConnectedConductorFunction\");\r\n            ifcPSE.PropertyName = \"ConnectedConductorFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ConductorFunctionEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectedConductorFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit3PoleMaximumState\", \"ShortCircuit3PoleMaximumState\");\r\n            ifcPSE.PropertyName = \"ShortCircuit3PoleMaximumState\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortCircuit3PoleMaximumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit3PolePowerFactorMaximumState\", \"ShortCircuit3PolePowerFactorMaximumState\");\r\n            ifcPSE.PropertyName = \"ShortCircuit3PolePowerFactorMaximumState\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortCircuit3PolePowerFactorMaximumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit2PoleMinimumState\", \"ShortCircuit2PoleMinimumState\");\r\n            ifcPSE.PropertyName = \"ShortCircuit2PoleMinimumState\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortCircuit2PoleMinimumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit2PolePowerFactorMinimumState\", \"ShortCircuit2PolePowerFactorMinimumState\");\r\n            ifcPSE.PropertyName = \"ShortCircuit2PolePowerFactorMinimumState\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortCircuit2PolePowerFactorMinimumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PoleMaximumState\", \"ShortCircuit1PoleMaximumState\");\r\n            ifcPSE.PropertyName = \"ShortCircuit1PoleMaximumState\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortCircuit1PoleMaximumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PolePowerFactorMaximumState\", \"ShortCircuit1PolePowerFactorMaximumState\");\r\n            ifcPSE.PropertyName = \"ShortCircuit1PolePowerFactorMaximumState\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortCircuit1PolePowerFactorMaximumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PoleMinimumState\", \"ShortCircuit1PoleMinimumState\");\r\n            ifcPSE.PropertyName = \"ShortCircuit1PoleMinimumState\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortCircuit1PoleMinimumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PolePowerFactorMinimumState\", \"ShortCircuit1PolePowerFactorMinimumState\");\r\n            ifcPSE.PropertyName = \"ShortCircuit1PolePowerFactorMinimumState\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortCircuit1PolePowerFactorMinimumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PoleMaximumState\", \"EarthFault1PoleMaximumState\");\r\n            ifcPSE.PropertyName = \"EarthFault1PoleMaximumState\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EarthFault1PoleMaximumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PolePowerFactorMaximumState\", \"EarthFault1PolePowerFactorMaximumState\");\r\n            ifcPSE.PropertyName = \"EarthFault1PolePowerFactorMaximumState\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EarthFault1PolePowerFactorMaximumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PoleMinimumState\", \"EarthFault1PoleMinimumState\");\r\n            ifcPSE.PropertyName = \"EarthFault1PoleMinimumState\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EarthFault1PoleMinimumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PolePowerFactorMinimumState\", \"EarthFault1PolePowerFactorMinimumState\");\r\n            ifcPSE.PropertyName = \"EarthFault1PolePowerFactorMinimumState\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EarthFault1PolePowerFactorMinimumStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.MaximumInsulatedVoltage\", \"MaximumInsulatedVoltage\");\r\n            ifcPSE.PropertyName = \"MaximumInsulatedVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumInsulatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.RatedCapacitance\", \"RatedCapacitance\");\r\n            ifcPSE.PropertyName = \"RatedCapacitance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCapacitance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedCapacitanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeCommon.PowerCapacity\", \"PowerCapacity\");\r\n            ifcPSE.PropertyName = \"PowerCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCharge;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricFlowStorageDeviceTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricFlowStorageDeviceTypeInductor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricFlowStorageDeviceTypeInductor = new PropertySetDescription();\r\n         propertySetElectricFlowStorageDeviceTypeInductor.Name = \"Pset_ElectricFlowStorageDeviceTypeInductor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricFlowStorageDeviceTypeInductor\"))\r\n         {\r\n            propertySetElectricFlowStorageDeviceTypeInductor.EntityTypes.Add(IFCEntityType.IfcElectricFlowStorageDevice);\r\n            propertySetElectricFlowStorageDeviceTypeInductor.EntityTypes.Add(IFCEntityType.IfcElectricFlowStorageDeviceType);\r\n            propertySetElectricFlowStorageDeviceTypeInductor.ObjectType = \"IfcElectricFlowStorageDevice\";\r\n            propertySetElectricFlowStorageDeviceTypeInductor.PredefinedType = \"INDUCTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeInductor.Inductance\", \"Inductance\");\r\n            ifcPSE.PropertyName = \"Inductance\";\r\n            ifcPSE.PropertyType = PropertyType.Inductance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InductanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeInductor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeInductor.NumberOfPhases\", \"NumberOfPhases\");\r\n            ifcPSE.PropertyName = \"NumberOfPhases\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPhasesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeInductor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricFlowStorageDeviceTypeInductor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricFlowStorageDeviceTypeRecharger(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricFlowStorageDeviceTypeRecharger = new PropertySetDescription();\r\n         propertySetElectricFlowStorageDeviceTypeRecharger.Name = \"Pset_ElectricFlowStorageDeviceTypeRecharger\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricFlowStorageDeviceTypeRecharger\"))\r\n         {\r\n            propertySetElectricFlowStorageDeviceTypeRecharger.EntityTypes.Add(IFCEntityType.IfcElectricFlowStorageDevice);\r\n            propertySetElectricFlowStorageDeviceTypeRecharger.EntityTypes.Add(IFCEntityType.IfcElectricFlowStorageDeviceType);\r\n            propertySetElectricFlowStorageDeviceTypeRecharger.ObjectType = \"IfcElectricFlowStorageDevice\";\r\n            propertySetElectricFlowStorageDeviceTypeRecharger.PredefinedType = \"RECHARGER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeRecharger.NominalSupplyCurrent\", \"NominalSupplyCurrent\");\r\n            ifcPSE.PropertyName = \"NominalSupplyCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSupplyCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeRecharger.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricFlowStorageDeviceTypeRecharger);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricFlowStorageDeviceTypeUPS(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricFlowStorageDeviceTypeUPS = new PropertySetDescription();\r\n         propertySetElectricFlowStorageDeviceTypeUPS.Name = \"Pset_ElectricFlowStorageDeviceTypeUPS\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricFlowStorageDeviceTypeUPS\"))\r\n         {\r\n            propertySetElectricFlowStorageDeviceTypeUPS.EntityTypes.Add(IFCEntityType.IfcElectricFlowStorageDevice);\r\n            propertySetElectricFlowStorageDeviceTypeUPS.EntityTypes.Add(IFCEntityType.IfcElectricFlowStorageDeviceType);\r\n            propertySetElectricFlowStorageDeviceTypeUPS.ObjectType = \"IfcElectricFlowStorageDevice\";\r\n            propertySetElectricFlowStorageDeviceTypeUPS.PredefinedType = \"UPS\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeUPS.AssemblyInstruction\", \"AssemblyInstruction\");\r\n            ifcPSE.PropertyName = \"AssemblyInstruction\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyInstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeUPS.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeUPS.CurrentRegulationRate\", \"CurrentRegulationRate\");\r\n            ifcPSE.PropertyName = \"CurrentRegulationRate\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentRegulationRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeUPS.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeUPS.NominalSupplyCurrent\", \"NominalSupplyCurrent\");\r\n            ifcPSE.PropertyName = \"NominalSupplyCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSupplyCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeUPS.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowStorageDeviceTypeUPS.VoltageRegulationRate\", \"VoltageRegulationRate\");\r\n            ifcPSE.PropertyName = \"VoltageRegulationRate\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageRegulationRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowStorageDeviceTypeUPS.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricFlowStorageDeviceTypeUPS);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricFlowTreatmentDeviceTypeElectronicFilter(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricFlowTreatmentDeviceTypeElectronicFilter = new PropertySetDescription();\r\n         propertySetElectricFlowTreatmentDeviceTypeElectronicFilter.Name = \"Pset_ElectricFlowTreatmentDeviceTypeElectronicFilter\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricFlowTreatmentDeviceTypeElectronicFilter\"))\r\n         {\r\n            propertySetElectricFlowTreatmentDeviceTypeElectronicFilter.EntityTypes.Add(IFCEntityType.IfcElectricFlowTreatmentDevice);\r\n            propertySetElectricFlowTreatmentDeviceTypeElectronicFilter.EntityTypes.Add(IFCEntityType.IfcElectricFlowTreatmentDeviceType);\r\n            propertySetElectricFlowTreatmentDeviceTypeElectronicFilter.ObjectType = \"IfcElectricFlowTreatmentDevice\";\r\n            propertySetElectricFlowTreatmentDeviceTypeElectronicFilter.PredefinedType = \"ELECTRONICFILTER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowTreatmentDeviceTypeElectronicFilter.NominalPower\", \"NominalPower\");\r\n            ifcPSE.PropertyName = \"NominalPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowTreatmentDeviceTypeElectronicFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowTreatmentDeviceTypeElectronicFilter.ElectronicFilterType\", \"ElectronicFilterType\");\r\n            ifcPSE.PropertyName = \"ElectronicFilterType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElectronicFilterType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectronicFilterTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowTreatmentDeviceTypeElectronicFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowTreatmentDeviceTypeElectronicFilter.NominalCurrent\", \"NominalCurrent\");\r\n            ifcPSE.PropertyName = \"NominalCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowTreatmentDeviceTypeElectronicFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowTreatmentDeviceTypeElectronicFilter.PrimaryFrequency\", \"PrimaryFrequency\");\r\n            ifcPSE.PropertyName = \"PrimaryFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowTreatmentDeviceTypeElectronicFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowTreatmentDeviceTypeElectronicFilter.SecondaryFrequency\", \"SecondaryFrequency\");\r\n            ifcPSE.PropertyName = \"SecondaryFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowTreatmentDeviceTypeElectronicFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricFlowTreatmentDeviceTypeElectronicFilter.RatedVoltage\", \"RatedVoltage\");\r\n            ifcPSE.PropertyName = \"RatedVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricFlowTreatmentDeviceTypeElectronicFilter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricFlowTreatmentDeviceTypeElectronicFilter);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricGeneratorTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricGeneratorTypeCommon = new PropertySetDescription();\r\n         propertySetElectricGeneratorTypeCommon.Name = \"Pset_ElectricGeneratorTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricGeneratorTypeCommon\"))\r\n         {\r\n            propertySetElectricGeneratorTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricGeneratorType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricGeneratorTypeCommon.ElectricGeneratorEfficiency\", \"ElectricGeneratorEfficiency\");\r\n            ifcPSE.PropertyName = \"ElectricGeneratorEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricGeneratorEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricGeneratorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricGeneratorTypeCommon.StartCurrentFactor\", \"StartCurrentFactor\");\r\n            ifcPSE.PropertyName = \"StartCurrentFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartCurrentFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricGeneratorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricGeneratorTypeCommon.MaximumPowerOutput\", \"MaximumPowerOutput\");\r\n            ifcPSE.PropertyName = \"MaximumPowerOutput\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPowerOutputCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricGeneratorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricGeneratorTypeCommon\"))\r\n         {\r\n            propertySetElectricGeneratorTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricGeneratorType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricGeneratorTypeCommon.ElectricGeneratorEfficiency\", \"ElectricGeneratorEfficiency\");\r\n            ifcPSE.PropertyName = \"ElectricGeneratorEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricGeneratorEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricGeneratorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricGeneratorTypeCommon.StartCurrentFactor\", \"StartCurrentFactor\");\r\n            ifcPSE.PropertyName = \"StartCurrentFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartCurrentFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricGeneratorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricGeneratorTypeCommon.MaximumPowerOutput\", \"MaximumPowerOutput\");\r\n            ifcPSE.PropertyName = \"MaximumPowerOutput\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPowerOutputCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricGeneratorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricGeneratorTypeCommon\"))\r\n         {\r\n            propertySetElectricGeneratorTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricGenerator);\r\n            propertySetElectricGeneratorTypeCommon.ObjectType = \"IfcElectricGenerator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricGeneratorTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricGeneratorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricGeneratorTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricGeneratorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricGeneratorTypeCommon.ElectricGeneratorEfficiency\", \"ElectricGeneratorEfficiency\");\r\n            ifcPSE.PropertyName = \"ElectricGeneratorEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Electric Generator Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"発電効率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"발전 효율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricGeneratorEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricGeneratorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricGeneratorTypeCommon.StartCurrentFactor\", \"StartCurrentFactor\");\r\n            ifcPSE.PropertyName = \"StartCurrentFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Start Current Factor\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"始動電流係数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"시동 전류 계수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartCurrentFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricGeneratorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricGeneratorTypeCommon.MaximumPowerOutput\", \"MaximumPowerOutput\");\r\n            ifcPSE.PropertyName = \"MaximumPowerOutput\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Power Output\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最大出力\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최대 출력\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPowerOutputCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricGeneratorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricGeneratorTypeCommon\"))\r\n         {\r\n            propertySetElectricGeneratorTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricGenerator);\r\n            propertySetElectricGeneratorTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricGeneratorType);\r\n            propertySetElectricGeneratorTypeCommon.ObjectType = \"IfcElectricGenerator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricGeneratorTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricGeneratorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricGeneratorTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricGeneratorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricGeneratorTypeCommon.ElectricGeneratorEfficiency\", \"ElectricGeneratorEfficiency\");\r\n            ifcPSE.PropertyName = \"ElectricGeneratorEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricGeneratorEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricGeneratorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricGeneratorTypeCommon.StartCurrentFactor\", \"StartCurrentFactor\");\r\n            ifcPSE.PropertyName = \"StartCurrentFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartCurrentFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricGeneratorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricGeneratorTypeCommon.MaximumPowerOutput\", \"MaximumPowerOutput\");\r\n            ifcPSE.PropertyName = \"MaximumPowerOutput\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPowerOutputCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricGeneratorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricGeneratorTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricHeaterTypeElectricalCableHeater(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricHeaterTypeElectricalCableHeater = new PropertySetDescription();\r\n         propertySetElectricHeaterTypeElectricalCableHeater.Name = \"Pset_ElectricHeaterTypeElectricalCableHeater\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricHeaterTypeElectricalCableHeater\"))\r\n         {\r\n            propertySetElectricHeaterTypeElectricalCableHeater.EntityTypes.Add(IFCEntityType.IfcElectricHeaterType);\r\n            propertySetElectricHeaterTypeElectricalCableHeater.ObjectType = \"ELECTRICCABLEHEATER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricHeaterTypeElectricalCableHeater.HeatOutputPerUnitLength\", \"HeatOutputPerUnitLength\");\r\n            ifcPSE.PropertyName = \"HeatOutputPerUnitLength\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatOutputPerUnitLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricHeaterTypeElectricalCableHeater.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricHeaterTypeElectricalCableHeater\"))\r\n         {\r\n            propertySetElectricHeaterTypeElectricalCableHeater.EntityTypes.Add(IFCEntityType.IfcElectricHeaterType);\r\n            propertySetElectricHeaterTypeElectricalCableHeater.ObjectType = \"IfcElectricHeaterType\";\r\n            propertySetElectricHeaterTypeElectricalCableHeater.PredefinedType = \"ELECTRICCABLEHEATER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricHeaterTypeElectricalCableHeater.HeatOutputPerUnitLength\", \"HeatOutputPerUnitLength\");\r\n            ifcPSE.PropertyName = \"HeatOutputPerUnitLength\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatOutputPerUnitLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricHeaterTypeElectricalCableHeater.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricHeaterTypeElectricalCableHeater);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricHeaterTypeElectricalMatHeater(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricHeaterTypeElectricalMatHeater = new PropertySetDescription();\r\n         propertySetElectricHeaterTypeElectricalMatHeater.Name = \"Pset_ElectricHeaterTypeElectricalMatHeater\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricHeaterTypeElectricalMatHeater\"))\r\n         {\r\n            propertySetElectricHeaterTypeElectricalMatHeater.EntityTypes.Add(IFCEntityType.IfcElectricHeaterType);\r\n            propertySetElectricHeaterTypeElectricalMatHeater.ObjectType = \"ELECTRICMATHEATER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricHeaterTypeElectricalMatHeater.HeatOutputPerUnitArea\", \"HeatOutputPerUnitArea\");\r\n            ifcPSE.PropertyName = \"HeatOutputPerUnitArea\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatOutputPerUnitAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricHeaterTypeElectricalMatHeater.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricHeaterTypeElectricalMatHeater\"))\r\n         {\r\n            propertySetElectricHeaterTypeElectricalMatHeater.EntityTypes.Add(IFCEntityType.IfcElectricHeaterType);\r\n            propertySetElectricHeaterTypeElectricalMatHeater.ObjectType = \"IfcElectricHeaterType\";\r\n            propertySetElectricHeaterTypeElectricalMatHeater.PredefinedType = \"ELECTRICMATHEATER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricHeaterTypeElectricalMatHeater.HeatOutputPerUnitArea\", \"HeatOutputPerUnitArea\");\r\n            ifcPSE.PropertyName = \"HeatOutputPerUnitArea\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatOutputPerUnitAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricHeaterTypeElectricalMatHeater.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricHeaterTypeElectricalMatHeater);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricHeaterTypeElectricalPointHeater(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricHeaterTypeElectricalPointHeater = new PropertySetDescription();\r\n         propertySetElectricHeaterTypeElectricalPointHeater.Name = \"Pset_ElectricHeaterTypeElectricalPointHeater\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricHeaterTypeElectricalPointHeater\"))\r\n         {\r\n            propertySetElectricHeaterTypeElectricalPointHeater.EntityTypes.Add(IFCEntityType.IfcElectricHeaterType);\r\n            propertySetElectricHeaterTypeElectricalPointHeater.ObjectType = \"ELECTRICPOINTHEATER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricHeaterTypeElectricalPointHeater.HeatOutput\", \"HeatOutput\");\r\n            ifcPSE.PropertyName = \"HeatOutput\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatOutputCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricHeaterTypeElectricalPointHeater.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricHeaterTypeElectricalPointHeater\"))\r\n         {\r\n            propertySetElectricHeaterTypeElectricalPointHeater.EntityTypes.Add(IFCEntityType.IfcElectricHeaterType);\r\n            propertySetElectricHeaterTypeElectricalPointHeater.ObjectType = \"IfcElectricHeaterType\";\r\n            propertySetElectricHeaterTypeElectricalPointHeater.PredefinedType = \"ELECTRICPOINTHEATER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricHeaterTypeElectricalPointHeater.HeatOutput\", \"HeatOutput\");\r\n            ifcPSE.PropertyName = \"HeatOutput\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatOutputCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricHeaterTypeElectricalPointHeater.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricHeaterTypeElectricalPointHeater);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricMotorTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricMotorTypeCommon = new PropertySetDescription();\r\n         propertySetElectricMotorTypeCommon.Name = \"Pset_ElectricMotorTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricMotorTypeCommon\"))\r\n         {\r\n            propertySetElectricMotorTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricMotorType);\r\n            propertySetElectricMotorTypeCommon.EntityTypes.Add(IFCEntityType.IfcFanType);\r\n            propertySetElectricMotorTypeCommon.EntityTypes.Add(IFCEntityType.IfcPumpType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.MotorEnclosureType\", \"MotorEnclosureType\");\r\n            ifcPSE.PropertyName = \"MotorEnclosureType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_MotorEnclosureType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MotorEnclosureTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.IsGuarded\", \"IsGuarded\");\r\n            ifcPSE.PropertyName = \"IsGuarded\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsGuardedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.HasPartWinding\", \"HasPartWinding\");\r\n            ifcPSE.PropertyName = \"HasPartWinding\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasPartWindingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.FrameSize\", \"FrameSize\");\r\n            ifcPSE.PropertyName = \"FrameSize\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.ElectricMotorEfficiency\", \"ElectricMotorEfficiency\");\r\n            ifcPSE.PropertyName = \"ElectricMotorEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricMotorEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.StartCurrentFactor\", \"StartCurrentFactor\");\r\n            ifcPSE.PropertyName = \"StartCurrentFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartCurrentFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.LockedRotorCurrent\", \"LockedRotorCurrent\");\r\n            ifcPSE.PropertyName = \"LockedRotorCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LockedRotorCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.MaximumPowerOutput\", \"MaximumPowerOutput\");\r\n            ifcPSE.PropertyName = \"MaximumPowerOutput\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPowerOutputCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricMotorTypeCommon\"))\r\n         {\r\n            propertySetElectricMotorTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricMotorType);\r\n            propertySetElectricMotorTypeCommon.EntityTypes.Add(IFCEntityType.IfcFanType);\r\n            propertySetElectricMotorTypeCommon.EntityTypes.Add(IFCEntityType.IfcPumpType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.MotorEnclosureType\", \"MotorEnclosureType\");\r\n            ifcPSE.PropertyName = \"MotorEnclosureType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_MotorEnclosureType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MotorEnclosureTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.IsGuarded\", \"IsGuarded\");\r\n            ifcPSE.PropertyName = \"IsGuarded\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsGuardedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.HasPartWinding\", \"HasPartWinding\");\r\n            ifcPSE.PropertyName = \"HasPartWinding\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasPartWindingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.FrameSize\", \"FrameSize\");\r\n            ifcPSE.PropertyName = \"FrameSize\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.ElectricMotorEfficiency\", \"ElectricMotorEfficiency\");\r\n            ifcPSE.PropertyName = \"ElectricMotorEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricMotorEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.StartCurrentFactor\", \"StartCurrentFactor\");\r\n            ifcPSE.PropertyName = \"StartCurrentFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartCurrentFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.LockedRotorCurrent\", \"LockedRotorCurrent\");\r\n            ifcPSE.PropertyName = \"LockedRotorCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LockedRotorCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.MaximumPowerOutput\", \"MaximumPowerOutput\");\r\n            ifcPSE.PropertyName = \"MaximumPowerOutput\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPowerOutputCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricMotorTypeCommon\"))\r\n         {\r\n            propertySetElectricMotorTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricMotor);\r\n            propertySetElectricMotorTypeCommon.ObjectType = \"IfcElectricMotor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.MaximumPowerOutput\", \"MaximumPowerOutput\");\r\n            ifcPSE.PropertyName = \"MaximumPowerOutput\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Power Output\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最大出力\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최대 출력\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPowerOutputCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.ElectricMotorEfficiency\", \"ElectricMotorEfficiency\");\r\n            ifcPSE.PropertyName = \"ElectricMotorEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Electric Motor Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"出力効率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"출력 효율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricMotorEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.StartCurrentFactor\", \"StartCurrentFactor\");\r\n            ifcPSE.PropertyName = \"StartCurrentFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Start Current Factor\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"始動電流係数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"시동전류 계수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartCurrentFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.StartingTime\", \"StartingTime\");\r\n            ifcPSE.PropertyName = \"StartingTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Starting Time\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"始動時間\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"시작 시간\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartingTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.TeTime\", \"TeTime\");\r\n            ifcPSE.PropertyName = \"TeTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Te Time\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最大時間\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최대 시간\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TeTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.LockedRotorCurrent\", \"LockedRotorCurrent\");\r\n            ifcPSE.PropertyName = \"LockedRotorCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Locked Rotor Current\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"拘束ロータ電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"구속 회전자 전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LockedRotorCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.MotorEnclosureType\", \"MotorEnclosureType\");\r\n            ifcPSE.PropertyName = \"MotorEnclosureType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_MotorEnclosureType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Motor Enclosure Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"モーター保護構造\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"모터 보호구조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MotorEnclosureTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.FrameSize\", \"FrameSize\");\r\n            ifcPSE.PropertyName = \"FrameSize\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Frame Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"フレームサイズ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"프레임 크기\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.IsGuarded\", \"IsGuarded\");\r\n            ifcPSE.PropertyName = \"IsGuarded\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Guarded\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"保護\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"보호\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsGuardedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.HasPartWinding\", \"HasPartWinding\");\r\n            ifcPSE.PropertyName = \"HasPartWinding\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Part Winding\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"巻線　\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"권선\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasPartWindingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricMotorTypeCommon\"))\r\n         {\r\n            propertySetElectricMotorTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricMotor);\r\n            propertySetElectricMotorTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricMotorType);\r\n            propertySetElectricMotorTypeCommon.ObjectType = \"IfcElectricMotor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.MaximumPowerOutput\", \"MaximumPowerOutput\");\r\n            ifcPSE.PropertyName = \"MaximumPowerOutput\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPowerOutputCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.ElectricMotorEfficiency\", \"ElectricMotorEfficiency\");\r\n            ifcPSE.PropertyName = \"ElectricMotorEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricMotorEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.StartCurrentFactor\", \"StartCurrentFactor\");\r\n            ifcPSE.PropertyName = \"StartCurrentFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartCurrentFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.StartingTime\", \"StartingTime\");\r\n            ifcPSE.PropertyName = \"StartingTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartingTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.TeTime\", \"TeTime\");\r\n            ifcPSE.PropertyName = \"TeTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TeTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.LockedRotorCurrent\", \"LockedRotorCurrent\");\r\n            ifcPSE.PropertyName = \"LockedRotorCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LockedRotorCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.MotorEnclosureType\", \"MotorEnclosureType\");\r\n            ifcPSE.PropertyName = \"MotorEnclosureType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_MotorEnclosureType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MotorEnclosureTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.FrameSize\", \"FrameSize\");\r\n            ifcPSE.PropertyName = \"FrameSize\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.IsGuarded\", \"IsGuarded\");\r\n            ifcPSE.PropertyName = \"IsGuarded\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsGuardedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricMotorTypeCommon.HasPartWinding\", \"HasPartWinding\");\r\n            ifcPSE.PropertyName = \"HasPartWinding\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasPartWindingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricMotorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricMotorTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElectricTimeControlTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElectricTimeControlTypeCommon = new PropertySetDescription();\r\n         propertySetElectricTimeControlTypeCommon.Name = \"Pset_ElectricTimeControlTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricTimeControlTypeCommon\"))\r\n         {\r\n            propertySetElectricTimeControlTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricTimeControl);\r\n            propertySetElectricTimeControlTypeCommon.ObjectType = \"IfcElectricTimeControl\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricTimeControlTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricTimeControlTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricTimeControlTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricTimeControlTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElectricTimeControlTypeCommon\"))\r\n         {\r\n            propertySetElectricTimeControlTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricTimeControl);\r\n            propertySetElectricTimeControlTypeCommon.EntityTypes.Add(IFCEntityType.IfcElectricTimeControlType);\r\n            propertySetElectricTimeControlTypeCommon.ObjectType = \"IfcElectricTimeControl\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricTimeControlTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricTimeControlTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElectricTimeControlTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElectricTimeControlTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElectricTimeControlTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElementAssemblyCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElementAssemblyCommon = new PropertySetDescription();\r\n         propertySetElementAssemblyCommon.Name = \"Pset_ElementAssemblyCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementAssemblyCommon\"))\r\n         {\r\n            propertySetElementAssemblyCommon.EntityTypes.Add(IFCEntityType.IfcElementAssembly);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementAssemblyCommon\"))\r\n         {\r\n            propertySetElementAssemblyCommon.EntityTypes.Add(IFCEntityType.IfcElementAssembly);\r\n            propertySetElementAssemblyCommon.EntityTypes.Add(IFCEntityType.IfcElementAssemblyType);\r\n            propertySetElementAssemblyCommon.ObjectType = \"IfcElementAssembly\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElementAssemblyCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElementAssemblyTypeCantilever(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElementAssemblyTypeCantilever = new PropertySetDescription();\r\n         propertySetElementAssemblyTypeCantilever.Name = \"Pset_ElementAssemblyTypeCantilever\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementAssemblyTypeCantilever\"))\r\n         {\r\n            propertySetElementAssemblyTypeCantilever.EntityTypes.Add(IFCEntityType.IfcElementAssembly);\r\n            propertySetElementAssemblyTypeCantilever.EntityTypes.Add(IFCEntityType.IfcElementAssemblyType);\r\n            propertySetElementAssemblyTypeCantilever.ObjectType = \"IfcElementAssembly\";\r\n            propertySetElementAssemblyTypeCantilever.PredefinedType = \"SUSPENSIONASSEMBLY\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeCantilever.AssemblyInstruction\", \"AssemblyInstruction\");\r\n            ifcPSE.PropertyName = \"AssemblyInstruction\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyInstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeCantilever.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeCantilever.ContactWireStagger\", \"ContactWireStagger\");\r\n            ifcPSE.PropertyName = \"ContactWireStagger\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContactWireStaggerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeCantilever.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeCantilever.SystemHeight\", \"SystemHeight\");\r\n            ifcPSE.PropertyName = \"SystemHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SystemHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeCantilever.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeCantilever.CantileverType\", \"CantileverType\");\r\n            ifcPSE.PropertyName = \"CantileverType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CantileverAssemblyType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CantileverTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeCantilever.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElementAssemblyTypeCantilever);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElementAssemblyTypeDilatationPanel(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElementAssemblyTypeDilatationPanel = new PropertySetDescription();\r\n         propertySetElementAssemblyTypeDilatationPanel.Name = \"Pset_ElementAssemblyTypeDilatationPanel\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementAssemblyTypeDilatationPanel\"))\r\n         {\r\n            propertySetElementAssemblyTypeDilatationPanel.EntityTypes.Add(IFCEntityType.IfcElementAssembly);\r\n            propertySetElementAssemblyTypeDilatationPanel.EntityTypes.Add(IFCEntityType.IfcElementAssemblyType);\r\n            propertySetElementAssemblyTypeDilatationPanel.ObjectType = \"IfcElementAssembly\";\r\n            propertySetElementAssemblyTypeDilatationPanel.PredefinedType = \"DILATATIONPANEL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeDilatationPanel.TechnicalStandard\", \"TechnicalStandard\");\r\n            ifcPSE.PropertyName = \"TechnicalStandard\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TechnicalStandardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeDilatationPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeDilatationPanel.DilatationLength\", \"DilatationLength\");\r\n            ifcPSE.PropertyName = \"DilatationLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DilatationLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeDilatationPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeDilatationPanel.ExpansionDirection\", \"ExpansionDirection\");\r\n            ifcPSE.PropertyName = \"ExpansionDirection\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ExpansionDirection);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExpansionDirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeDilatationPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeDilatationPanel.InstallationPlan\", \"InstallationPlan\");\r\n            ifcPSE.PropertyName = \"InstallationPlan\";\r\n            ifcPSE.PropertyType = PropertyType.IfcDocumentReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstallationPlanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeDilatationPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeDilatationPanel.BladesOrientation\", \"BladesOrientation\");\r\n            ifcPSE.PropertyName = \"BladesOrientation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_BladesOrientation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladesOrientationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeDilatationPanel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElementAssemblyTypeDilatationPanel);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElementAssemblyTypeHeadSpan(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElementAssemblyTypeHeadSpan = new PropertySetDescription();\r\n         propertySetElementAssemblyTypeHeadSpan.Name = \"Pset_ElementAssemblyTypeHeadSpan\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementAssemblyTypeHeadSpan\"))\r\n         {\r\n            propertySetElementAssemblyTypeHeadSpan.EntityTypes.Add(IFCEntityType.IfcElementAssembly);\r\n            propertySetElementAssemblyTypeHeadSpan.EntityTypes.Add(IFCEntityType.IfcElementAssemblyType);\r\n            propertySetElementAssemblyTypeHeadSpan.ObjectType = \"IfcElementAssembly\";\r\n            propertySetElementAssemblyTypeHeadSpan.PredefinedType = \"SUPPORTINGASSEMBLY\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeHeadSpan.AssemblyInstruction\", \"AssemblyInstruction\");\r\n            ifcPSE.PropertyName = \"AssemblyInstruction\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyInstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeHeadSpan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeHeadSpan.NumberOfTracksCrossed\", \"NumberOfTracksCrossed\");\r\n            ifcPSE.PropertyName = \"NumberOfTracksCrossed\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfTracksCrossedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeHeadSpan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeHeadSpan.Span\", \"Span\");\r\n            ifcPSE.PropertyName = \"Span\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeHeadSpan.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElementAssemblyTypeHeadSpan);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElementAssemblyTypeMast(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElementAssemblyTypeMast = new PropertySetDescription();\r\n         propertySetElementAssemblyTypeMast.Name = \"Pset_ElementAssemblyTypeMast\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementAssemblyTypeMast\"))\r\n         {\r\n            propertySetElementAssemblyTypeMast.EntityTypes.Add(IFCEntityType.IfcElementAssembly);\r\n            propertySetElementAssemblyTypeMast.EntityTypes.Add(IFCEntityType.IfcElementAssemblyType);\r\n            propertySetElementAssemblyTypeMast.ObjectType = \"IfcElementAssembly\";\r\n            propertySetElementAssemblyTypeMast.PredefinedType = \"MAST\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeMast.WithLightningRod\", \"WithLightningRod\");\r\n            ifcPSE.PropertyName = \"WithLightningRod\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WithLightningRodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeMast.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElementAssemblyTypeMast);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElementAssemblyTypeOCSSuspension(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElementAssemblyTypeOCSSuspension = new PropertySetDescription();\r\n         propertySetElementAssemblyTypeOCSSuspension.Name = \"Pset_ElementAssemblyTypeOCSSuspension\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementAssemblyTypeOCSSuspension\"))\r\n         {\r\n            propertySetElementAssemblyTypeOCSSuspension.EntityTypes.Add(IFCEntityType.IfcElementAssembly);\r\n            propertySetElementAssemblyTypeOCSSuspension.EntityTypes.Add(IFCEntityType.IfcElementAssemblyType);\r\n            propertySetElementAssemblyTypeOCSSuspension.ObjectType = \"IfcElementAssembly\";\r\n            propertySetElementAssemblyTypeOCSSuspension.PredefinedType = \"SUSPENSIONASSEMBLY\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeOCSSuspension.ContactWireStagger\", \"ContactWireStagger\");\r\n            ifcPSE.PropertyName = \"ContactWireStagger\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContactWireStaggerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeOCSSuspension.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeOCSSuspension.ContactWireHeight\", \"ContactWireHeight\");\r\n            ifcPSE.PropertyName = \"ContactWireHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContactWireHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeOCSSuspension.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElementAssemblyTypeOCSSuspension);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElementAssemblyTypeRigidFrame(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElementAssemblyTypeRigidFrame = new PropertySetDescription();\r\n         propertySetElementAssemblyTypeRigidFrame.Name = \"Pset_ElementAssemblyTypeRigidFrame\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementAssemblyTypeRigidFrame\"))\r\n         {\r\n            propertySetElementAssemblyTypeRigidFrame.EntityTypes.Add(IFCEntityType.IfcElementAssembly);\r\n            propertySetElementAssemblyTypeRigidFrame.EntityTypes.Add(IFCEntityType.IfcElementAssemblyType);\r\n            propertySetElementAssemblyTypeRigidFrame.ObjectType = \"IfcElementAssembly\";\r\n            propertySetElementAssemblyTypeRigidFrame.PredefinedType = \"RIGID_FRAME\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeRigidFrame.AssemblyInstruction\", \"AssemblyInstruction\");\r\n            ifcPSE.PropertyName = \"AssemblyInstruction\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyInstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeRigidFrame.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeRigidFrame.LoadCapacity\", \"LoadCapacity\");\r\n            ifcPSE.PropertyName = \"LoadCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeRigidFrame.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeRigidFrame.NumberOfTracksCrossed\", \"NumberOfTracksCrossed\");\r\n            ifcPSE.PropertyName = \"NumberOfTracksCrossed\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfTracksCrossedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeRigidFrame.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeRigidFrame.Span\", \"Span\");\r\n            ifcPSE.PropertyName = \"Span\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeRigidFrame.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElementAssemblyTypeRigidFrame);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElementAssemblyTypeSteadyDevice(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElementAssemblyTypeSteadyDevice = new PropertySetDescription();\r\n         propertySetElementAssemblyTypeSteadyDevice.Name = \"Pset_ElementAssemblyTypeSteadyDevice\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementAssemblyTypeSteadyDevice\"))\r\n         {\r\n            propertySetElementAssemblyTypeSteadyDevice.EntityTypes.Add(IFCEntityType.IfcElementAssembly);\r\n            propertySetElementAssemblyTypeSteadyDevice.EntityTypes.Add(IFCEntityType.IfcElementAssemblyType);\r\n            propertySetElementAssemblyTypeSteadyDevice.ObjectType = \"IfcElementAssembly\";\r\n            propertySetElementAssemblyTypeSteadyDevice.PredefinedType = \"SUSPENSIONASSEMBLY\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeSteadyDevice.AssemblyInstruction\", \"AssemblyInstruction\");\r\n            ifcPSE.PropertyName = \"AssemblyInstruction\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyInstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeSteadyDevice.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeSteadyDevice.ContactWireStagger\", \"ContactWireStagger\");\r\n            ifcPSE.PropertyName = \"ContactWireStagger\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContactWireStaggerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeSteadyDevice.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeSteadyDevice.IsSetOnWorkingWire\", \"IsSetOnWorkingWire\");\r\n            ifcPSE.PropertyName = \"IsSetOnWorkingWire\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSetOnWorkingWireCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeSteadyDevice.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeSteadyDevice.SteadyDeviceType\", \"SteadyDeviceType\");\r\n            ifcPSE.PropertyName = \"SteadyDeviceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SteadyDeviceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SteadyDeviceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeSteadyDevice.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElementAssemblyTypeSteadyDevice);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElementAssemblyTypeSupportingAssembly(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElementAssemblyTypeSupportingAssembly = new PropertySetDescription();\r\n         propertySetElementAssemblyTypeSupportingAssembly.Name = \"Pset_ElementAssemblyTypeSupportingAssembly\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementAssemblyTypeSupportingAssembly\"))\r\n         {\r\n            propertySetElementAssemblyTypeSupportingAssembly.EntityTypes.Add(IFCEntityType.IfcElementAssembly);\r\n            propertySetElementAssemblyTypeSupportingAssembly.EntityTypes.Add(IFCEntityType.IfcElementAssemblyType);\r\n            propertySetElementAssemblyTypeSupportingAssembly.ObjectType = \"IfcElementAssembly\";\r\n            propertySetElementAssemblyTypeSupportingAssembly.PredefinedType = \"SUPPORTINGASSEMBLY\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeSupportingAssembly.NumberOfCantilevers\", \"NumberOfCantilevers\");\r\n            ifcPSE.PropertyName = \"NumberOfCantilevers\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCantileversCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeSupportingAssembly.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeSupportingAssembly.TypeOfSupportingSystem\", \"TypeOfSupportingSystem\");\r\n            ifcPSE.PropertyName = \"TypeOfSupportingSystem\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SupportingSystemType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeOfSupportingSystemCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeSupportingAssembly.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElementAssemblyTypeSupportingAssembly);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElementAssemblyTypeTrackPanel(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElementAssemblyTypeTrackPanel = new PropertySetDescription();\r\n         propertySetElementAssemblyTypeTrackPanel.Name = \"Pset_ElementAssemblyTypeTrackPanel\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementAssemblyTypeTrackPanel\"))\r\n         {\r\n            propertySetElementAssemblyTypeTrackPanel.EntityTypes.Add(IFCEntityType.IfcElementAssembly);\r\n            propertySetElementAssemblyTypeTrackPanel.EntityTypes.Add(IFCEntityType.IfcElementAssemblyType);\r\n            propertySetElementAssemblyTypeTrackPanel.ObjectType = \"IfcElementAssembly\";\r\n            propertySetElementAssemblyTypeTrackPanel.PredefinedType = \"TRACKPANEL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTrackPanel.IsAccessibleByVehicle\", \"IsAccessibleByVehicle\");\r\n            ifcPSE.PropertyName = \"IsAccessibleByVehicle\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsAccessibleByVehicleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTrackPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTrackPanel.TrackExpansion\", \"TrackExpansion\");\r\n            ifcPSE.PropertyName = \"TrackExpansion\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrackExpansionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTrackPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTrackPanel.InstallationPlan\", \"InstallationPlan\");\r\n            ifcPSE.PropertyName = \"InstallationPlan\";\r\n            ifcPSE.PropertyType = PropertyType.IfcDocumentReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstallationPlanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTrackPanel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElementAssemblyTypeTrackPanel);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElementAssemblyTypeTractionSwitchingAssembly(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElementAssemblyTypeTractionSwitchingAssembly = new PropertySetDescription();\r\n         propertySetElementAssemblyTypeTractionSwitchingAssembly.Name = \"Pset_ElementAssemblyTypeTractionSwitchingAssembly\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementAssemblyTypeTractionSwitchingAssembly\"))\r\n         {\r\n            propertySetElementAssemblyTypeTractionSwitchingAssembly.EntityTypes.Add(IFCEntityType.IfcElementAssembly);\r\n            propertySetElementAssemblyTypeTractionSwitchingAssembly.EntityTypes.Add(IFCEntityType.IfcElementAssemblyType);\r\n            propertySetElementAssemblyTypeTractionSwitchingAssembly.ObjectType = \"IfcElementAssembly\";\r\n            propertySetElementAssemblyTypeTractionSwitchingAssembly.PredefinedType = \"TRACTION_SWITCHING_ASSEMBLY\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTractionSwitchingAssembly.NominalCurrent\", \"NominalCurrent\");\r\n            ifcPSE.PropertyName = \"NominalCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTractionSwitchingAssembly.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTractionSwitchingAssembly.NominalPower\", \"NominalPower\");\r\n            ifcPSE.PropertyName = \"NominalPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTractionSwitchingAssembly.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTractionSwitchingAssembly.RatedVoltage\", \"RatedVoltage\");\r\n            ifcPSE.PropertyName = \"RatedVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTractionSwitchingAssembly.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTractionSwitchingAssembly.DesignAmbientTemperature\", \"DesignAmbientTemperature\");\r\n            ifcPSE.PropertyName = \"DesignAmbientTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DesignAmbientTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTractionSwitchingAssembly.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElementAssemblyTypeTractionSwitchingAssembly);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElementAssemblyTypeTurnoutPanel(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElementAssemblyTypeTurnoutPanel = new PropertySetDescription();\r\n         propertySetElementAssemblyTypeTurnoutPanel.Name = \"Pset_ElementAssemblyTypeTurnoutPanel\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementAssemblyTypeTurnoutPanel\"))\r\n         {\r\n            propertySetElementAssemblyTypeTurnoutPanel.EntityTypes.Add(IFCEntityType.IfcElementAssembly);\r\n            propertySetElementAssemblyTypeTurnoutPanel.EntityTypes.Add(IFCEntityType.IfcElementAssemblyType);\r\n            propertySetElementAssemblyTypeTurnoutPanel.ObjectType = \"IfcElementAssembly\";\r\n            propertySetElementAssemblyTypeTurnoutPanel.PredefinedType = \"TURNOUTPANEL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTurnoutPanel.IsAccessibleByVehicle\", \"IsAccessibleByVehicle\");\r\n            ifcPSE.PropertyName = \"IsAccessibleByVehicle\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsAccessibleByVehicleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTurnoutPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTurnoutPanel.BranchLineDirection\", \"BranchLineDirection\");\r\n            ifcPSE.PropertyName = \"BranchLineDirection\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_BranchLineDirection);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BranchLineDirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTurnoutPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTurnoutPanel.TrackExpansion\", \"TrackExpansion\");\r\n            ifcPSE.PropertyName = \"TrackExpansion\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrackExpansionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTurnoutPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTurnoutPanel.TurnoutCurvedRadius\", \"TurnoutCurvedRadius\");\r\n            ifcPSE.PropertyName = \"TurnoutCurvedRadius\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TurnoutCurvedRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTurnoutPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTurnoutPanel.TypeOfCurvedTurnout\", \"TypeOfCurvedTurnout\");\r\n            ifcPSE.PropertyName = \"TypeOfCurvedTurnout\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TypeOfCurvedTurnout);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeOfCurvedTurnoutCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTurnoutPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTurnoutPanel.InstallationPlan\", \"InstallationPlan\");\r\n            ifcPSE.PropertyName = \"InstallationPlan\";\r\n            ifcPSE.PropertyType = PropertyType.IfcDocumentReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstallationPlanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTurnoutPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTurnoutPanel.IsSharedTurnout\", \"IsSharedTurnout\");\r\n            ifcPSE.PropertyName = \"IsSharedTurnout\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSharedTurnoutCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTurnoutPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTurnoutPanel.MaximumSpeedLimitOfDivergingLine\", \"MaximumSpeedLimitOfDivergingLine\");\r\n            ifcPSE.PropertyName = \"MaximumSpeedLimitOfDivergingLine\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumSpeedLimitOfDivergingLineCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTurnoutPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTurnoutPanel.TypeOfDrivingDevice\", \"TypeOfDrivingDevice\");\r\n            ifcPSE.PropertyName = \"TypeOfDrivingDevice\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TypeOfDrivingDevice);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeOfDrivingDeviceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTurnoutPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTurnoutPanel.TrackElementOrientation\", \"TrackElementOrientation\");\r\n            ifcPSE.PropertyName = \"TrackElementOrientation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TurnoutPanelOrientation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrackElementOrientationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTurnoutPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTurnoutPanel.PercentShared\", \"PercentShared\");\r\n            ifcPSE.PropertyName = \"PercentShared\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PercentSharedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTurnoutPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTurnoutPanel.TrackGaugeLength\", \"TrackGaugeLength\");\r\n            ifcPSE.PropertyName = \"TrackGaugeLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrackGaugeLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTurnoutPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTurnoutPanel.TurnoutPointMachineCount\", \"TurnoutPointMachineCount\");\r\n            ifcPSE.PropertyName = \"TurnoutPointMachineCount\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TurnoutPointMachineCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTurnoutPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTurnoutPanel.TurnoutHeaterType\", \"TurnoutHeaterType\");\r\n            ifcPSE.PropertyName = \"TurnoutHeaterType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TurnoutHeaterType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TurnoutHeaterTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTurnoutPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTurnoutPanel.TypeOfJunction\", \"TypeOfJunction\");\r\n            ifcPSE.PropertyName = \"TypeOfJunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TypeOfJunction);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeOfJunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTurnoutPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementAssemblyTypeTurnoutPanel.TypeOfTurnout\", \"TypeOfTurnout\");\r\n            ifcPSE.PropertyName = \"TypeOfTurnout\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TypeOfTurnout);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeOfTurnoutCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementAssemblyTypeTurnoutPanel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElementAssemblyTypeTurnoutPanel);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElementComponentCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElementComponentCommon = new PropertySetDescription();\r\n         propertySetElementComponentCommon.Name = \"Pset_ElementComponentCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementComponentCommon\"))\r\n         {\r\n            propertySetElementComponentCommon.EntityTypes.Add(IFCEntityType.IfcElementComponent);\r\n            propertySetElementComponentCommon.ObjectType = \"IfcElementComponent\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementComponentCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementComponentCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementComponentCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementComponentCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementComponentCommon.DeliveryType\", \"DeliveryType\");\r\n            ifcPSE.PropertyName = \"DeliveryType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_DeliveryType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Delivery Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DeliveryTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementComponentCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementComponentCommon.CorrosionTreatment\", \"CorrosionTreatment\");\r\n            ifcPSE.PropertyName = \"CorrosionTreatment\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CorrosionTreatment);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Corrosion Treatment\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CorrosionTreatmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementComponentCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementComponentCommon\"))\r\n         {\r\n            propertySetElementComponentCommon.EntityTypes.Add(IFCEntityType.IfcElementComponent);\r\n            propertySetElementComponentCommon.EntityTypes.Add(IFCEntityType.IfcElementComponentType);\r\n            propertySetElementComponentCommon.ObjectType = \"IfcElementComponent\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementComponentCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementComponentCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementComponentCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementComponentCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementComponentCommon.DeliveryType\", \"DeliveryType\");\r\n            ifcPSE.PropertyName = \"DeliveryType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementComponentDeliveryType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DeliveryTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementComponentCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementComponentCommon.CorrosionTreatment\", \"CorrosionTreatment\");\r\n            ifcPSE.PropertyName = \"CorrosionTreatment\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementComponentCorrosionTreatment);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CorrosionTreatmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementComponentCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElementComponentCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElementKinematics(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElementKinematics = new PropertySetDescription();\r\n         propertySetElementKinematics.Name = \"Pset_ElementKinematics\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementKinematics\"))\r\n         {\r\n            propertySetElementKinematics.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetElementKinematics.EntityTypes.Add(IFCEntityType.IfcElementType);\r\n            propertySetElementKinematics.ObjectType = \"IfcElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementKinematics.CyclicPath\", \"CyclicPath\");\r\n            ifcPSE.PropertyName = \"CyclicPath\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Time;\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CyclicPathCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementKinematics.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementKinematics.CyclicRange\", \"CyclicRange\");\r\n            ifcPSE.PropertyName = \"CyclicRange\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CyclicRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementKinematics.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementKinematics.LinearPath\", \"LinearPath\");\r\n            ifcPSE.PropertyName = \"LinearPath\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Time;\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LinearPathCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementKinematics.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementKinematics.LinearRange\", \"LinearRange\");\r\n            ifcPSE.PropertyName = \"LinearRange\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LinearRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementKinematics.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementKinematics.MaximumAngularVelocity\", \"MaximumAngularVelocity\");\r\n            ifcPSE.PropertyName = \"MaximumAngularVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.AngularVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumAngularVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementKinematics.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementKinematics.MaximumConstantSpeed\", \"MaximumConstantSpeed\");\r\n            ifcPSE.PropertyName = \"MaximumConstantSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumConstantSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementKinematics.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementKinematics.MinimumTime\", \"MinimumTime\");\r\n            ifcPSE.PropertyName = \"MinimumTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementKinematics.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElementKinematics);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElementShading(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElementShading = new PropertySetDescription();\r\n         propertySetElementShading.Name = \"Pset_ElementShading\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementShading\"))\r\n         {\r\n            propertySetElementShading.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementShading.ShadingDeviceType\", \"ShadingDeviceType\");\r\n            ifcPSE.PropertyName = \"ShadingDeviceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_ElementShading);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShadingDeviceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementShading.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementShading.Azimuth\", \"Azimuth\");\r\n            ifcPSE.PropertyName = \"Azimuth\";\r\n            ifcPSE.PropertyType = PropertyType.PositivePlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AzimuthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementShading.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementShading.Inclination\", \"Inclination\");\r\n            ifcPSE.PropertyName = \"Inclination\";\r\n            ifcPSE.PropertyType = PropertyType.PositivePlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InclinationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementShading.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementShading.TiltRange\", \"TiltRange\");\r\n            ifcPSE.PropertyName = \"TiltRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TiltRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementShading.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementShading.AverageSolarTransmittance\", \"AverageSolarTransmittance\");\r\n            ifcPSE.PropertyName = \"AverageSolarTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AverageSolarTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementShading.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementShading.AverageVisibleTransmittance\", \"AverageVisibleTransmittance\");\r\n            ifcPSE.PropertyName = \"AverageVisibleTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AverageVisibleTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementShading.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementShading.Reflectance\", \"Reflectance\");\r\n            ifcPSE.PropertyName = \"Reflectance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReflectanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementShading.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementShading.Roughness\", \"Roughness\");\r\n            ifcPSE.PropertyName = \"Roughness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RoughnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementShading.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementShading.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementShading.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementShading\"))\r\n         {\r\n            propertySetElementShading.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementShading.ShadingDeviceType\", \"ShadingDeviceType\");\r\n            ifcPSE.PropertyName = \"ShadingDeviceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ElementShading);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShadingDeviceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementShading.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementShading.Azimuth\", \"Azimuth\");\r\n            ifcPSE.PropertyName = \"Azimuth\";\r\n            ifcPSE.PropertyType = PropertyType.PositivePlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AzimuthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementShading.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementShading.Inclination\", \"Inclination\");\r\n            ifcPSE.PropertyName = \"Inclination\";\r\n            ifcPSE.PropertyType = PropertyType.PositivePlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InclinationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementShading.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementShading.TiltRange\", \"TiltRange\");\r\n            ifcPSE.PropertyName = \"TiltRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TiltRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementShading.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementShading.AverageSolarTransmittance\", \"AverageSolarTransmittance\");\r\n            ifcPSE.PropertyName = \"AverageSolarTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AverageSolarTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementShading.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementShading.AverageVisibleTransmittance\", \"AverageVisibleTransmittance\");\r\n            ifcPSE.PropertyName = \"AverageVisibleTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AverageVisibleTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementShading.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementShading.Reflectance\", \"Reflectance\");\r\n            ifcPSE.PropertyName = \"Reflectance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReflectanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementShading.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementShading.Roughness\", \"Roughness\");\r\n            ifcPSE.PropertyName = \"Roughness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RoughnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementShading.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementShading.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementShading.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElementShading);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ElementSize(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetElementSize = new PropertySetDescription();\r\n         propertySetElementSize.Name = \"Pset_ElementSize\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ElementSize\"))\r\n         {\r\n            propertySetElementSize.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            propertySetElementSize.EntityTypes.Add(IFCEntityType.IfcEnergyConversionDevice);\r\n            propertySetElementSize.EntityTypes.Add(IFCEntityType.IfcFlowController);\r\n            propertySetElementSize.EntityTypes.Add(IFCEntityType.IfcFlowMovingDevice);\r\n            propertySetElementSize.EntityTypes.Add(IFCEntityType.IfcFlowStorageDevice);\r\n            propertySetElementSize.EntityTypes.Add(IFCEntityType.IfcFlowTerminal);\r\n            propertySetElementSize.EntityTypes.Add(IFCEntityType.IfcFlowTreatmentDevice);\r\n            propertySetElementSize.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            propertySetElementSize.EntityTypes.Add(IFCEntityType.IfcEnergyConversionDeviceType);\r\n            propertySetElementSize.EntityTypes.Add(IFCEntityType.IfcFlowControllerType);\r\n            propertySetElementSize.EntityTypes.Add(IFCEntityType.IfcFlowMovingDeviceType);\r\n            propertySetElementSize.EntityTypes.Add(IFCEntityType.IfcFlowStorageDeviceType);\r\n            propertySetElementSize.EntityTypes.Add(IFCEntityType.IfcFlowTerminalType);\r\n            propertySetElementSize.EntityTypes.Add(IFCEntityType.IfcFlowTreatmentDeviceType);\r\n            propertySetElementSize.ObjectType = \"IfcDistributionChamberElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementSize.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementSize.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementSize.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementSize.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ElementSize.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetElementSize.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetElementSize);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_EmbeddedTrack(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetEmbeddedTrack = new PropertySetDescription();\r\n         propertySetEmbeddedTrack.Name = \"Pset_EmbeddedTrack\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EmbeddedTrack\"))\r\n         {\r\n            propertySetEmbeddedTrack.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetEmbeddedTrack.EntityTypes.Add(IFCEntityType.IfcSlabType);\r\n            propertySetEmbeddedTrack.ObjectType = \"IfcSlab\";\r\n            propertySetEmbeddedTrack.PredefinedType = \"TRACKSLAB\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EmbeddedTrack.IsAccessibleByVehicle\", \"IsAccessibleByVehicle\");\r\n            ifcPSE.PropertyName = \"IsAccessibleByVehicle\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsAccessibleByVehicleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEmbeddedTrack.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EmbeddedTrack.HasDrainage\", \"HasDrainage\");\r\n            ifcPSE.PropertyName = \"HasDrainage\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasDrainageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEmbeddedTrack.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EmbeddedTrack.PermissibleRoadLoad\", \"PermissibleRoadLoad\");\r\n            ifcPSE.PropertyName = \"PermissibleRoadLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PermissibleRoadLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEmbeddedTrack.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetEmbeddedTrack);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_EnergyConsumptionPHistoryElectricity(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetEnergyConsumptionPHistoryElectricity = new PropertySetDescription();\r\n         propertySetEnergyConsumptionPHistoryElectricity.Name = \"Pset_EnergyConsumptionPHistoryElectricity\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnergyConsumptionPHistoryElectricity\"))\r\n         {\r\n            propertySetEnergyConsumptionPHistoryElectricity.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistoryElectricity.Voltage\", \"Voltage\");\r\n            ifcPSE.PropertyName = \"Voltage\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistoryElectricity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistoryElectricity.RealPower\", \"RealPower\");\r\n            ifcPSE.PropertyName = \"RealPower\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RealPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistoryElectricity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistoryElectricity.ReactivePower\", \"ReactivePower\");\r\n            ifcPSE.PropertyName = \"ReactivePower\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReactivePowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistoryElectricity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistoryElectricity.ApparentPower\", \"ApparentPower\");\r\n            ifcPSE.PropertyName = \"ApparentPower\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApparentPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistoryElectricity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistoryElectricity.PowerFactor\", \"PowerFactor\");\r\n            ifcPSE.PropertyName = \"PowerFactor\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistoryElectricity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistoryElectricity.Current\", \"Current\");\r\n            ifcPSE.PropertyName = \"Current\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistoryElectricity.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnergyConsumptionPHistoryElectricity\"))\r\n         {\r\n            propertySetEnergyConsumptionPHistoryElectricity.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistoryElectricity.Voltage\", \"Voltage\");\r\n            ifcPSE.PropertyName = \"Voltage\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistoryElectricity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistoryElectricity.RealPower\", \"RealPower\");\r\n            ifcPSE.PropertyName = \"RealPower\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RealPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistoryElectricity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistoryElectricity.ReactivePower\", \"ReactivePower\");\r\n            ifcPSE.PropertyName = \"ReactivePower\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReactivePowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistoryElectricity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistoryElectricity.ApparentPower\", \"ApparentPower\");\r\n            ifcPSE.PropertyName = \"ApparentPower\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApparentPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistoryElectricity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistoryElectricity.PowerFactor\", \"PowerFactor\");\r\n            ifcPSE.PropertyName = \"PowerFactor\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistoryElectricity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistoryElectricity.Current\", \"Current\");\r\n            ifcPSE.PropertyName = \"Current\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistoryElectricity.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetEnergyConsumptionPHistoryElectricity);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_EnergyConsumptionPHistoryFuel(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetEnergyConsumptionPHistoryFuel = new PropertySetDescription();\r\n         propertySetEnergyConsumptionPHistoryFuel.Name = \"Pset_EnergyConsumptionPHistoryFuel\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnergyConsumptionPHistoryFuel\"))\r\n         {\r\n            propertySetEnergyConsumptionPHistoryFuel.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistoryFuel.Temperature\", \"Temperature\");\r\n            ifcPSE.PropertyName = \"Temperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistoryFuel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistoryFuel.Pressure\", \"Pressure\");\r\n            ifcPSE.PropertyName = \"Pressure\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistoryFuel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistoryFuel.Flowrate\", \"Flowrate\");\r\n            ifcPSE.PropertyName = \"Flowrate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistoryFuel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnergyConsumptionPHistoryFuel\"))\r\n         {\r\n            propertySetEnergyConsumptionPHistoryFuel.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistoryFuel.Temperature\", \"Temperature\");\r\n            ifcPSE.PropertyName = \"Temperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistoryFuel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistoryFuel.Pressure\", \"Pressure\");\r\n            ifcPSE.PropertyName = \"Pressure\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistoryFuel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistoryFuel.Flowrate\", \"Flowrate\");\r\n            ifcPSE.PropertyName = \"Flowrate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistoryFuel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetEnergyConsumptionPHistoryFuel);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_EnergyConsumptionPHistorySteam(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetEnergyConsumptionPHistorySteam = new PropertySetDescription();\r\n         propertySetEnergyConsumptionPHistorySteam.Name = \"Pset_EnergyConsumptionPHistorySteam\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnergyConsumptionPHistorySteam\"))\r\n         {\r\n            propertySetEnergyConsumptionPHistorySteam.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistorySteam.Temperature\", \"Temperature\");\r\n            ifcPSE.PropertyName = \"Temperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistorySteam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistorySteam.Pressure\", \"Pressure\");\r\n            ifcPSE.PropertyName = \"Pressure\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistorySteam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistorySteam.Flowrate\", \"Flowrate\");\r\n            ifcPSE.PropertyName = \"Flowrate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistorySteam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistorySteam.Quality\", \"Quality\");\r\n            ifcPSE.PropertyName = \"Quality\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.QualityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistorySteam.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnergyConsumptionPHistorySteam\"))\r\n         {\r\n            propertySetEnergyConsumptionPHistorySteam.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistorySteam.Temperature\", \"Temperature\");\r\n            ifcPSE.PropertyName = \"Temperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistorySteam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistorySteam.Pressure\", \"Pressure\");\r\n            ifcPSE.PropertyName = \"Pressure\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistorySteam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistorySteam.Flowrate\", \"Flowrate\");\r\n            ifcPSE.PropertyName = \"Flowrate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistorySteam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConsumptionPHistorySteam.Quality\", \"Quality\");\r\n            ifcPSE.PropertyName = \"Quality\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.QualityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConsumptionPHistorySteam.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetEnergyConsumptionPHistorySteam);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_EnergyConversionDeviceCoil(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetEnergyConversionDeviceCoil = new PropertySetDescription();\r\n         propertySetEnergyConversionDeviceCoil.Name = \"Pset_EnergyConversionDeviceCoil\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnergyConversionDeviceCoil\"))\r\n         {\r\n            propertySetEnergyConversionDeviceCoil.EntityTypes.Add(IFCEntityType.IfcEnergyConversionDevice);\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConversionDeviceCoil.HasSoundAttentuation\", \"HasSoundAttentuation\");\r\n            ifcPSE.PropertyName = \"HasSoundAttentuation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasSoundAttentuationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConversionDeviceCoil.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnergyConversionDeviceCoil\"))\r\n         {\r\n            propertySetEnergyConversionDeviceCoil.EntityTypes.Add(IFCEntityType.IfcEnergyConversionDevice);\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConversionDeviceCoil.HasSoundAttentuation\", \"HasSoundAttentuation\");\r\n            ifcPSE.PropertyName = \"HasSoundAttentuation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasSoundAttentuationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConversionDeviceCoil.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetEnergyConversionDeviceCoil);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_EnergyConversionDeviceSpaceHeaterPanel(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetEnergyConversionDeviceSpaceHeaterPanel = new PropertySetDescription();\r\n         propertySetEnergyConversionDeviceSpaceHeaterPanel.Name = \"Pset_EnergyConversionDeviceSpaceHeaterPanel\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnergyConversionDeviceSpaceHeaterPanel\"))\r\n         {\r\n            propertySetEnergyConversionDeviceSpaceHeaterPanel.EntityTypes.Add(IFCEntityType.IfcEnergyConversionDevice);\r\n            propertySetEnergyConversionDeviceSpaceHeaterPanel.ObjectType = \"Related IfcSpaceHeaterType\";\r\n            propertySetEnergyConversionDeviceSpaceHeaterPanel.PredefinedType = \"PANELRADIATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConversionDeviceSpaceHeaterPanel.NumberOfPanels\", \"NumberOfPanels\");\r\n            ifcPSE.PropertyName = \"NumberOfPanels\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPanelsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConversionDeviceSpaceHeaterPanel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnergyConversionDeviceSpaceHeaterPanel\"))\r\n         {\r\n            propertySetEnergyConversionDeviceSpaceHeaterPanel.EntityTypes.Add(IFCEntityType.IfcEnergyConversionDevice);\r\n            propertySetEnergyConversionDeviceSpaceHeaterPanel.ObjectType = \"RelatedEntityIs:IfcSpaceHeaterType\";\r\n            propertySetEnergyConversionDeviceSpaceHeaterPanel.PredefinedType = \"PANELRADIATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConversionDeviceSpaceHeaterPanel.NumberOfPanels\", \"NumberOfPanels\");\r\n            ifcPSE.PropertyName = \"NumberOfPanels\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPanelsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConversionDeviceSpaceHeaterPanel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetEnergyConversionDeviceSpaceHeaterPanel);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_EnergyConversionDeviceSpaceHeaterSectional(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetEnergyConversionDeviceSpaceHeaterSectional = new PropertySetDescription();\r\n         propertySetEnergyConversionDeviceSpaceHeaterSectional.Name = \"Pset_EnergyConversionDeviceSpaceHeaterSectional\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnergyConversionDeviceSpaceHeaterSectional\"))\r\n         {\r\n            propertySetEnergyConversionDeviceSpaceHeaterSectional.EntityTypes.Add(IFCEntityType.IfcEnergyConversionDevice);\r\n            propertySetEnergyConversionDeviceSpaceHeaterSectional.ObjectType = \"Related IfcSpaceHeaterType\";\r\n            propertySetEnergyConversionDeviceSpaceHeaterSectional.PredefinedType = \"SECTIONALRADIATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConversionDeviceSpaceHeaterSectional.NumberOfSections\", \"NumberOfSections\");\r\n            ifcPSE.PropertyName = \"NumberOfSections\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSectionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConversionDeviceSpaceHeaterSectional.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnergyConversionDeviceSpaceHeaterSectional\"))\r\n         {\r\n            propertySetEnergyConversionDeviceSpaceHeaterSectional.EntityTypes.Add(IFCEntityType.IfcEnergyConversionDevice);\r\n            propertySetEnergyConversionDeviceSpaceHeaterSectional.ObjectType = \"RelatedEntityIs:IfcSpaceHeaterType\";\r\n            propertySetEnergyConversionDeviceSpaceHeaterSectional.PredefinedType = \"SECTIONALRADIATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyConversionDeviceSpaceHeaterSectional.NumberOfSections\", \"NumberOfSections\");\r\n            ifcPSE.PropertyName = \"NumberOfSections\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSectionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyConversionDeviceSpaceHeaterSectional.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetEnergyConversionDeviceSpaceHeaterSectional);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_EnergyRequirements(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetEnergyRequirements = new PropertySetDescription();\r\n         propertySetEnergyRequirements.Name = \"Pset_EnergyRequirements\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnergyRequirements\"))\r\n         {\r\n            propertySetEnergyRequirements.EntityTypes.Add(IFCEntityType.IfcDistributionElement);\r\n            propertySetEnergyRequirements.EntityTypes.Add(IFCEntityType.IfcTransportationDevice);\r\n            propertySetEnergyRequirements.EntityTypes.Add(IFCEntityType.IfcDistributionElementType);\r\n            propertySetEnergyRequirements.EntityTypes.Add(IFCEntityType.IfcTransportationDeviceType);\r\n            propertySetEnergyRequirements.ObjectType = \"IfcDistributionElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyRequirements.EnergyConsumption\", \"EnergyConsumption\");\r\n            ifcPSE.PropertyName = \"EnergyConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyRequirements.PowerDemand\", \"PowerDemand\");\r\n            ifcPSE.PropertyName = \"PowerDemand\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerDemandCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyRequirements.EnergySourceLabel\", \"EnergySourceLabel\");\r\n            ifcPSE.PropertyName = \"EnergySourceLabel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergySourceLabelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnergyRequirements.EnergyConversionEfficiency\", \"EnergyConversionEfficiency\");\r\n            ifcPSE.PropertyName = \"EnergyConversionEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyConversionEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnergyRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetEnergyRequirements);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_EngineTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetEngineTypeCommon = new PropertySetDescription();\r\n         propertySetEngineTypeCommon.Name = \"Pset_EngineTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EngineTypeCommon\"))\r\n         {\r\n            propertySetEngineTypeCommon.EntityTypes.Add(IFCEntityType.IfcEngine);\r\n            propertySetEngineTypeCommon.ObjectType = \"IfcEngine\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EngineTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEngineTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EngineTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEngineTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EngineTypeCommon.EnergySource\", \"EnergySource\");\r\n            ifcPSE.PropertyName = \"EnergySource\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_EngineEnergySource);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Energy Source\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"エネルギ源\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergySourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEngineTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EngineTypeCommon\"))\r\n         {\r\n            propertySetEngineTypeCommon.EntityTypes.Add(IFCEntityType.IfcEngine);\r\n            propertySetEngineTypeCommon.EntityTypes.Add(IFCEntityType.IfcEngineType);\r\n            propertySetEngineTypeCommon.ObjectType = \"IfcEngine\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EngineTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEngineTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EngineTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEngineTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EngineTypeCommon.EnergySource\", \"EnergySource\");\r\n            ifcPSE.PropertyName = \"EnergySource\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_EngineEnergySource);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergySourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEngineTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetEngineTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_EnvironmentalCondition(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetEnvironmentalCondition = new PropertySetDescription();\r\n         propertySetEnvironmentalCondition.Name = \"Pset_EnvironmentalCondition\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnvironmentalCondition\"))\r\n         {\r\n            propertySetEnvironmentalCondition.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetEnvironmentalCondition.EntityTypes.Add(IFCEntityType.IfcElementType);\r\n            propertySetEnvironmentalCondition.ObjectType = \"IfcElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalCondition.ReferenceAirRelativeHumidity\", \"ReferenceAirRelativeHumidity\");\r\n            ifcPSE.PropertyName = \"ReferenceAirRelativeHumidity\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceAirRelativeHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalCondition.ReferenceEnvironmentTemperature\", \"ReferenceEnvironmentTemperature\");\r\n            ifcPSE.PropertyName = \"ReferenceEnvironmentTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceEnvironmentTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalCondition.MaximumAtmosphericPressure\", \"MaximumAtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"MaximumAtmosphericPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumAtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalCondition.StorageTemperatureRange\", \"StorageTemperatureRange\");\r\n            ifcPSE.PropertyName = \"StorageTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StorageTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalCondition.MaximumWindSpeed\", \"MaximumWindSpeed\");\r\n            ifcPSE.PropertyName = \"MaximumWindSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumWindSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalCondition.OperationalTemperatureRange\", \"OperationalTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationalTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalCondition.MaximumRainIntensity\", \"MaximumRainIntensity\");\r\n            ifcPSE.PropertyName = \"MaximumRainIntensity\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumRainIntensityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalCondition.SaltMistLevel\", \"SaltMistLevel\");\r\n            ifcPSE.PropertyName = \"SaltMistLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SaltMistLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalCondition.SeismicResistance\", \"SeismicResistance\");\r\n            ifcPSE.PropertyName = \"SeismicResistance\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeismicResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalCondition.SmokeLevel\", \"SmokeLevel\");\r\n            ifcPSE.PropertyName = \"SmokeLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SmokeLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalCondition.MaximumSolarRadiation\", \"MaximumSolarRadiation\");\r\n            ifcPSE.PropertyName = \"MaximumSolarRadiation\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumSolarRadiationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalCondition.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetEnvironmentalCondition);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_EnvironmentalEmissions(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetEnvironmentalEmissions = new PropertySetDescription();\r\n         propertySetEnvironmentalEmissions.Name = \"Pset_EnvironmentalEmissions\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnvironmentalEmissions\"))\r\n         {\r\n            propertySetEnvironmentalEmissions.EntityTypes.Add(IFCEntityType.IfcDistributionElement);\r\n            propertySetEnvironmentalEmissions.EntityTypes.Add(IFCEntityType.IfcTransportationDevice);\r\n            propertySetEnvironmentalEmissions.EntityTypes.Add(IFCEntityType.IfcDistributionElementType);\r\n            propertySetEnvironmentalEmissions.EntityTypes.Add(IFCEntityType.IfcTransportationDeviceType);\r\n            propertySetEnvironmentalEmissions.ObjectType = \"IfcDistributionElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalEmissions.CarbonDioxideEmissions\", \"CarbonDioxideEmissions\");\r\n            ifcPSE.PropertyName = \"CarbonDioxideEmissions\";\r\n            ifcPSE.PropertyType = PropertyType.MassFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CarbonDioxideEmissionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalEmissions.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalEmissions.SulphurDioxideEmissions\", \"SulphurDioxideEmissions\");\r\n            ifcPSE.PropertyName = \"SulphurDioxideEmissions\";\r\n            ifcPSE.PropertyType = PropertyType.MassFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SulphurDioxideEmissionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalEmissions.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalEmissions.NitrogenOxidesEmissions\", \"NitrogenOxidesEmissions\");\r\n            ifcPSE.PropertyName = \"NitrogenOxidesEmissions\";\r\n            ifcPSE.PropertyType = PropertyType.MassFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NitrogenOxidesEmissionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalEmissions.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalEmissions.ParticulateMatterEmissions\", \"ParticulateMatterEmissions\");\r\n            ifcPSE.PropertyName = \"ParticulateMatterEmissions\";\r\n            ifcPSE.PropertyType = PropertyType.MassFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ParticulateMatterEmissionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalEmissions.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalEmissions.NoiseEmissions\", \"NoiseEmissions\");\r\n            ifcPSE.PropertyName = \"NoiseEmissions\";\r\n            ifcPSE.PropertyType = PropertyType.SoundPowerLevel;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NoiseEmissionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalEmissions.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetEnvironmentalEmissions);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_EnvironmentalImpactIndicators(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetEnvironmentalImpactIndicators = new PropertySetDescription();\r\n         propertySetEnvironmentalImpactIndicators.Name = \"Pset_EnvironmentalImpactIndicators\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnvironmentalImpactIndicators\"))\r\n         {\r\n            propertySetEnvironmentalImpactIndicators.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetEnvironmentalImpactIndicators.ObjectType = \"IfcElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.FunctionalUnitReference\", \"FunctionalUnitReference\");\r\n            ifcPSE.PropertyName = \"FunctionalUnitReference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Functional Unit Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ReferenceUniteFonctionnelle\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"機能単位参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"기능단위참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FunctionalUnitReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.Unit\", \"Unit\");\r\n            ifcPSE.PropertyName = \"Unit\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Unit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Unite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"単位\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단위\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.LifeCyclePhase\", \"LifeCyclePhase\");\r\n            ifcPSE.PropertyName = \"LifeCyclePhase\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_LifeCyclePhase);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Life Cycle Phase\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PhaseCycleDeVie\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ライフサイクルフェーズ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"라이프 사이클 단계\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LifeCyclePhaseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.ExpectedServiceLife\", \"ExpectedServiceLife\");\r\n            ifcPSE.PropertyName = \"ExpectedServiceLife\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Expected Service Life\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DureeDeVieTypique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"期待される耐用期間\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"예상수명\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExpectedServiceLifeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.TotalPrimaryEnergyConsumptionPerUnit\", \"TotalPrimaryEnergyConsumptionPerUnit\");\r\n            ifcPSE.PropertyName = \"TotalPrimaryEnergyConsumptionPerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Primary Energy Consumption Per Unit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ConsommationTotaleEnergiePrimaireParUnite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"単位あたり全一次エネルギ消費\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단위당 모든 차 에너지 소비\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalPrimaryEnergyConsumptionPerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.WaterConsumptionPerUnit\", \"WaterConsumptionPerUnit\");\r\n            ifcPSE.PropertyName = \"WaterConsumptionPerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Consumption Per Unit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ConsommationEauParUnite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"単位あたり水使用\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단위 당 물 사용\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterConsumptionPerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.HazardousWastePerUnit\", \"HazardousWastePerUnit\");\r\n            ifcPSE.PropertyName = \"HazardousWastePerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Hazardous Waste Per Unit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DechetsDangereuxParUnite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"単位あたり有害廃棄物\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단위당 유해 폐기물\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HazardousWastePerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.NonHazardousWastePerUnit\", \"NonHazardousWastePerUnit\");\r\n            ifcPSE.PropertyName = \"NonHazardousWastePerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Non Hazardous Waste Per Unit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DechetsNonDangereuxParUnite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"単位あたり非有害廃棄物\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단위당 비 유해 폐기물\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NonHazardousWastePerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.ClimateChangePerUnit\", \"ClimateChangePerUnit\");\r\n            ifcPSE.PropertyName = \"ClimateChangePerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Climate Change Per Unit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ChangementClimatiqueParUnite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"単位あたり気候変動\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단위당 기후 변화\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClimateChangePerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.AtmosphericAcidificationPerUnit\", \"AtmosphericAcidificationPerUnit\");\r\n            ifcPSE.PropertyName = \"AtmosphericAcidificationPerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Atmospheric Acidification Per Unit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"AcidificationAtmospheriqueParUnite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"単位あたり大気酸性化\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단위당 대기 산성화\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericAcidificationPerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.RenewableEnergyConsumptionPerUnit\", \"RenewableEnergyConsumptionPerUnit\");\r\n            ifcPSE.PropertyName = \"RenewableEnergyConsumptionPerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Renewable Energy Consumption Per Unit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ConsommationEnergieRenouvelableParUnite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"単位あたり再生可能エネルギ消費\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단위당 재생 에너지 소비\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RenewableEnergyConsumptionPerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.NonRenewableEnergyConsumptionPerUnit\", \"NonRenewableEnergyConsumptionPerUnit\");\r\n            ifcPSE.PropertyName = \"NonRenewableEnergyConsumptionPerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Non Renewable Energy Consumption Per Unit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ConsommationEnergieNonRenouvelableParUnite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"単位あたり再生不可エネルギ消費\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단위당 재생 불가 에너지 소비\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NonRenewableEnergyConsumptionPerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.ResourceDepletionPerUnit\", \"ResourceDepletionPerUnit\");\r\n            ifcPSE.PropertyName = \"ResourceDepletionPerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Resource Depletion Per Unit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EpuisementRessourcesParUnite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"単位あたり資源消費\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단위당 자원소비\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ResourceDepletionPerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.InertWastePerUnit\", \"InertWastePerUnit\");\r\n            ifcPSE.PropertyName = \"InertWastePerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Inert Waste Per Unit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DechetsInertesParUnite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"単位あたり不活性廃棄物\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단위당 불황성 폐기물\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InertWastePerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.RadioactiveWastePerUnit\", \"RadioactiveWastePerUnit\");\r\n            ifcPSE.PropertyName = \"RadioactiveWastePerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Radioactive Waste Per Unit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DechetsRadioactifsParUnite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"単位あたり放射性廃棄物\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단위당 방사성 폐기물\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RadioactiveWastePerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.StratosphericOzoneLayerDestructionPerUnit\", \"StratosphericOzoneLayerDestructionPerUnit\");\r\n            ifcPSE.PropertyName = \"StratosphericOzoneLayerDestructionPerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Stratospheric Ozone Layer Destruction Per Unit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DestructionCoucheOzoneStartospheriqueParUnite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"単位あたり成層圏オゾン層破壊\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단위당 성층권 오존층 파괴\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StratosphericOzoneLayerDestructionPerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.PhotochemicalOzoneFormationPerUnit\", \"PhotochemicalOzoneFormationPerUnit\");\r\n            ifcPSE.PropertyName = \"PhotochemicalOzoneFormationPerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Photochemical Ozone Formation Per Unit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"FormationOzonePhotochimiqueParUnite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"単位あたり光化学オゾン生成\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단위당 광화학 오존 생성\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PhotochemicalOzoneFormationPerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.EutrophicationPerUnit\", \"EutrophicationPerUnit\");\r\n            ifcPSE.PropertyName = \"EutrophicationPerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Eutrophication Per Unit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EutrophisationParUnite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"単位あたり富栄養化\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단위당 부영양화\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EutrophicationPerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnvironmentalImpactIndicators\"))\r\n         {\r\n            propertySetEnvironmentalImpactIndicators.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetEnvironmentalImpactIndicators.EntityTypes.Add(IFCEntityType.IfcElementType);\r\n            propertySetEnvironmentalImpactIndicators.ObjectType = \"IfcElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.FunctionalUnitReference\", \"FunctionalUnitReference\");\r\n            ifcPSE.PropertyName = \"FunctionalUnitReference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FunctionalUnitReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.IndicatorsUnit\", \"IndicatorsUnit\");\r\n            ifcPSE.PropertyName = \"IndicatorsUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IndicatorsUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.LifeCyclePhase\", \"LifeCyclePhase\");\r\n            ifcPSE.PropertyName = \"LifeCyclePhase\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_LifeCyclePhase);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LifeCyclePhaseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.ExpectedServiceLife\", \"ExpectedServiceLife\");\r\n            ifcPSE.PropertyName = \"ExpectedServiceLife\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExpectedServiceLifeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.TotalPrimaryEnergyConsumptionPerUnit\", \"TotalPrimaryEnergyConsumptionPerUnit\");\r\n            ifcPSE.PropertyName = \"TotalPrimaryEnergyConsumptionPerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalPrimaryEnergyConsumptionPerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.WaterConsumptionPerUnit\", \"WaterConsumptionPerUnit\");\r\n            ifcPSE.PropertyName = \"WaterConsumptionPerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterConsumptionPerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.HazardousWastePerUnit\", \"HazardousWastePerUnit\");\r\n            ifcPSE.PropertyName = \"HazardousWastePerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HazardousWastePerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.NonHazardousWastePerUnit\", \"NonHazardousWastePerUnit\");\r\n            ifcPSE.PropertyName = \"NonHazardousWastePerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NonHazardousWastePerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.ClimateChangePerUnit\", \"ClimateChangePerUnit\");\r\n            ifcPSE.PropertyName = \"ClimateChangePerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClimateChangePerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.AtmosphericAcidificationPerUnit\", \"AtmosphericAcidificationPerUnit\");\r\n            ifcPSE.PropertyName = \"AtmosphericAcidificationPerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericAcidificationPerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.RenewableEnergyConsumptionPerUnit\", \"RenewableEnergyConsumptionPerUnit\");\r\n            ifcPSE.PropertyName = \"RenewableEnergyConsumptionPerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RenewableEnergyConsumptionPerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.NonRenewableEnergyConsumptionPerUnit\", \"NonRenewableEnergyConsumptionPerUnit\");\r\n            ifcPSE.PropertyName = \"NonRenewableEnergyConsumptionPerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NonRenewableEnergyConsumptionPerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.ResourceDepletionPerUnit\", \"ResourceDepletionPerUnit\");\r\n            ifcPSE.PropertyName = \"ResourceDepletionPerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ResourceDepletionPerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.InertWastePerUnit\", \"InertWastePerUnit\");\r\n            ifcPSE.PropertyName = \"InertWastePerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InertWastePerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.RadioactiveWastePerUnit\", \"RadioactiveWastePerUnit\");\r\n            ifcPSE.PropertyName = \"RadioactiveWastePerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RadioactiveWastePerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.StratosphericOzoneLayerDestructionPerUnit\", \"StratosphericOzoneLayerDestructionPerUnit\");\r\n            ifcPSE.PropertyName = \"StratosphericOzoneLayerDestructionPerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StratosphericOzoneLayerDestructionPerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.PhotochemicalOzoneFormationPerUnit\", \"PhotochemicalOzoneFormationPerUnit\");\r\n            ifcPSE.PropertyName = \"PhotochemicalOzoneFormationPerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PhotochemicalOzoneFormationPerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactIndicators.EutrophicationPerUnit\", \"EutrophicationPerUnit\");\r\n            ifcPSE.PropertyName = \"EutrophicationPerUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EutrophicationPerUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactIndicators.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetEnvironmentalImpactIndicators);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_EnvironmentalImpactValues(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetEnvironmentalImpactValues = new PropertySetDescription();\r\n         propertySetEnvironmentalImpactValues.Name = \"Pset_EnvironmentalImpactValues\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnvironmentalImpactValues\"))\r\n         {\r\n            propertySetEnvironmentalImpactValues.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetEnvironmentalImpactValues.ObjectType = \"IfcElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.TotalPrimaryEnergyConsumption\", \"TotalPrimaryEnergyConsumption\");\r\n            ifcPSE.PropertyName = \"TotalPrimaryEnergyConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Primary Energy Consumption\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ConsommationTotaleEnergiePrimaire\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"主なエネルギー消費の総量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"모든 차 에너지 소비\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalPrimaryEnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.WaterConsumption\", \"WaterConsumption\");\r\n            ifcPSE.PropertyName = \"WaterConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Consumption\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ConsommationEau\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水消費量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"물 사용\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.HazardousWaste\", \"HazardousWaste\");\r\n            ifcPSE.PropertyName = \"HazardousWaste\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Hazardous Waste\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DechetsDangereux\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"有害廃棄物\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"유해 폐기물\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HazardousWasteCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.NonHazardousWaste\", \"NonHazardousWaste\");\r\n            ifcPSE.PropertyName = \"NonHazardousWaste\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Non Hazardous Waste\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DechetsNonDangereux\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"一般廃棄物\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"비 유해 폐기물\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NonHazardousWasteCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.ClimateChange\", \"ClimateChange\");\r\n            ifcPSE.PropertyName = \"ClimateChange\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Climate Change\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ChangementClimatique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"気候変化\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"기후변화\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClimateChangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.AtmosphericAcidification\", \"AtmosphericAcidification\");\r\n            ifcPSE.PropertyName = \"AtmosphericAcidification\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Atmospheric Acidification\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"AcidificationAtmospherique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"大気の酸性化\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"대기산성화\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericAcidificationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.RenewableEnergyConsumption\", \"RenewableEnergyConsumption\");\r\n            ifcPSE.PropertyName = \"RenewableEnergyConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Renewable Energy Consumption\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ConsommationEnergieRenouvelable\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"継続可能なエネルギー消費量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"재생 가능 에너지 소비\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RenewableEnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.NonRenewableEnergyConsumption\", \"NonRenewableEnergyConsumption\");\r\n            ifcPSE.PropertyName = \"NonRenewableEnergyConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Non Renewable Energy Consumption\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ConsommationEnergieNonRenouvelable\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"継続不可能なエネルギー消費量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"재생 불가 에너지 소비\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NonRenewableEnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.ResourceDepletion\", \"ResourceDepletion\");\r\n            ifcPSE.PropertyName = \"ResourceDepletion\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Resource Depletion\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EpuisementRessources\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"資源の枯渇\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"자원 소비\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ResourceDepletionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.InertWaste\", \"InertWaste\");\r\n            ifcPSE.PropertyName = \"InertWaste\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Inert Waste\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DechetsInertes\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"安定廃棄物\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"불활성 폐기불\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InertWasteCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.RadioactiveWaste\", \"RadioactiveWaste\");\r\n            ifcPSE.PropertyName = \"RadioactiveWaste\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Radioactive Waste\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DechetsRadioactifs\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"放射性廃棄物\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"방사성 폐기물\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RadioactiveWasteCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.StratosphericOzoneLayerDestruction\", \"StratosphericOzoneLayerDestruction\");\r\n            ifcPSE.PropertyName = \"StratosphericOzoneLayerDestruction\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Stratospheric Ozone Layer Destruction\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DestructionCoucheOzoneStartospherique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"大気オゾン層破壊\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"성층권 오존층 파괴\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StratosphericOzoneLayerDestructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.PhotochemicalOzoneFormation\", \"PhotochemicalOzoneFormation\");\r\n            ifcPSE.PropertyName = \"PhotochemicalOzoneFormation\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Photochemical Ozone Formation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"FormationOzonePhotochimique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"光化学オゾン生成\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"광화학 오존 생성\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PhotochemicalOzoneFormationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.Eutrophication\", \"Eutrophication\");\r\n            ifcPSE.PropertyName = \"Eutrophication\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Eutrophication\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Eutrophisation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"富栄養化\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"부영 양화\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EutrophicationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.LeadInTime\", \"LeadInTime\");\r\n            ifcPSE.PropertyName = \"LeadInTime\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lead In Time\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeadInTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.Duration\", \"Duration\");\r\n            ifcPSE.PropertyName = \"Duration\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Duration\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.LeadOutTime\", \"LeadOutTime\");\r\n            ifcPSE.PropertyName = \"LeadOutTime\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lead Out Time\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeadOutTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EnvironmentalImpactValues\"))\r\n         {\r\n            propertySetEnvironmentalImpactValues.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetEnvironmentalImpactValues.EntityTypes.Add(IFCEntityType.IfcElementType);\r\n            propertySetEnvironmentalImpactValues.ObjectType = \"IfcElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.TotalPrimaryEnergyConsumption\", \"TotalPrimaryEnergyConsumption\");\r\n            ifcPSE.PropertyName = \"TotalPrimaryEnergyConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalPrimaryEnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.WaterConsumption\", \"WaterConsumption\");\r\n            ifcPSE.PropertyName = \"WaterConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.HazardousWaste\", \"HazardousWaste\");\r\n            ifcPSE.PropertyName = \"HazardousWaste\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HazardousWasteCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.NonHazardousWaste\", \"NonHazardousWaste\");\r\n            ifcPSE.PropertyName = \"NonHazardousWaste\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NonHazardousWasteCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.ClimateChange\", \"ClimateChange\");\r\n            ifcPSE.PropertyName = \"ClimateChange\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClimateChangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.AtmosphericAcidification\", \"AtmosphericAcidification\");\r\n            ifcPSE.PropertyName = \"AtmosphericAcidification\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericAcidificationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.RenewableEnergyConsumption\", \"RenewableEnergyConsumption\");\r\n            ifcPSE.PropertyName = \"RenewableEnergyConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RenewableEnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.NonRenewableEnergyConsumption\", \"NonRenewableEnergyConsumption\");\r\n            ifcPSE.PropertyName = \"NonRenewableEnergyConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NonRenewableEnergyConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.ResourceDepletion\", \"ResourceDepletion\");\r\n            ifcPSE.PropertyName = \"ResourceDepletion\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ResourceDepletionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.InertWaste\", \"InertWaste\");\r\n            ifcPSE.PropertyName = \"InertWaste\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InertWasteCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.RadioactiveWaste\", \"RadioactiveWaste\");\r\n            ifcPSE.PropertyName = \"RadioactiveWaste\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RadioactiveWasteCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.StratosphericOzoneLayerDestruction\", \"StratosphericOzoneLayerDestruction\");\r\n            ifcPSE.PropertyName = \"StratosphericOzoneLayerDestruction\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StratosphericOzoneLayerDestructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.PhotochemicalOzoneFormation\", \"PhotochemicalOzoneFormation\");\r\n            ifcPSE.PropertyName = \"PhotochemicalOzoneFormation\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PhotochemicalOzoneFormationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.Eutrophication\", \"Eutrophication\");\r\n            ifcPSE.PropertyName = \"Eutrophication\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EutrophicationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.LeadInTime\", \"LeadInTime\");\r\n            ifcPSE.PropertyName = \"LeadInTime\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeadInTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.Duration\", \"Duration\");\r\n            ifcPSE.PropertyName = \"Duration\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EnvironmentalImpactValues.LeadOutTime\", \"LeadOutTime\");\r\n            ifcPSE.PropertyName = \"LeadOutTime\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeadOutTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEnvironmentalImpactValues.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetEnvironmentalImpactValues);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_EvaporativeCoolerPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetEvaporativeCoolerPHistory = new PropertySetDescription();\r\n         propertySetEvaporativeCoolerPHistory.Name = \"Pset_EvaporativeCoolerPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EvaporativeCoolerPHistory\"))\r\n         {\r\n            propertySetEvaporativeCoolerPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.WaterSumpTemperature\", \"WaterSumpTemperature\");\r\n            ifcPSE.PropertyName = \"WaterSumpTemperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterSumpTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.Effectiveness\", \"Effectiveness\");\r\n            ifcPSE.PropertyName = \"Effectiveness\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.SensibleHeatTransferRate\", \"SensibleHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"SensibleHeatTransferRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.LatentHeatTransferRate\", \"LatentHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"LatentHeatTransferRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LatentHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.TotalHeatTransferRate\", \"TotalHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"TotalHeatTransferRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.EffectivenessTable\", \"EffectivenessTable\");\r\n            ifcPSE.PropertyName = \"EffectivenessTable\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectivenessTableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.AirPressureDropCurve\", \"AirPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurve\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.WaterPressDropCurve\", \"WaterPressDropCurve\");\r\n            ifcPSE.PropertyName = \"WaterPressDropCurve\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterPressDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EvaporativeCoolerPHistory\"))\r\n         {\r\n            propertySetEvaporativeCoolerPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.WaterSumpTemperature\", \"WaterSumpTemperature\");\r\n            ifcPSE.PropertyName = \"WaterSumpTemperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterSumpTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.Effectiveness\", \"Effectiveness\");\r\n            ifcPSE.PropertyName = \"Effectiveness\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.SensibleHeatTransferRate\", \"SensibleHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"SensibleHeatTransferRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.LatentHeatTransferRate\", \"LatentHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"LatentHeatTransferRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LatentHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.TotalHeatTransferRate\", \"TotalHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"TotalHeatTransferRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.EffectivenessTable\", \"EffectivenessTable\");\r\n            ifcPSE.PropertyName = \"EffectivenessTable\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectivenessTableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.AirPressureDropCurve\", \"AirPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurve\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.WaterPressDropCurve\", \"WaterPressDropCurve\");\r\n            ifcPSE.PropertyName = \"WaterPressDropCurve\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterPressDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EvaporativeCoolerPHistory\"))\r\n         {\r\n            propertySetEvaporativeCoolerPHistory.EntityTypes.Add(IFCEntityType.IfcEvaporativeCooler);\r\n            propertySetEvaporativeCoolerPHistory.ObjectType = \"IfcEvaporativeCooler\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.WaterSumpTemperature\", \"WaterSumpTemperature\");\r\n            ifcPSE.PropertyName = \"WaterSumpTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Sump Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"液温度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterSumpTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.Effectiveness\", \"Effectiveness\");\r\n            ifcPSE.PropertyName = \"Effectiveness\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Effectiveness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"効率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.SensibleHeatTransferRate\", \"SensibleHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"SensibleHeatTransferRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sensible Heat Transfer Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"顕熱交換量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.LatentHeatTransferRate\", \"LatentHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"LatentHeatTransferRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Latent Heat Transfer Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"潜熱交換量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LatentHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.TotalHeatTransferRate\", \"TotalHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"TotalHeatTransferRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Heat Transfer Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"全熱交換量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EvaporativeCoolerPHistory\"))\r\n         {\r\n            propertySetEvaporativeCoolerPHistory.EntityTypes.Add(IFCEntityType.IfcEvaporativeCooler);\r\n            propertySetEvaporativeCoolerPHistory.ObjectType = \"IfcEvaporativeCooler\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.WaterSumpTemperature\", \"WaterSumpTemperature\");\r\n            ifcPSE.PropertyName = \"WaterSumpTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterSumpTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.Effectiveness\", \"Effectiveness\");\r\n            ifcPSE.PropertyName = \"Effectiveness\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.SensibleHeatTransferRate\", \"SensibleHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"SensibleHeatTransferRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.LatentHeatTransferRate\", \"LatentHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"LatentHeatTransferRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LatentHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerPHistory.TotalHeatTransferRate\", \"TotalHeatTransferRate\");\r\n            ifcPSE.PropertyName = \"TotalHeatTransferRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetEvaporativeCoolerPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_EvaporativeCoolerTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetEvaporativeCoolerTypeCommon = new PropertySetDescription();\r\n         propertySetEvaporativeCoolerTypeCommon.Name = \"Pset_EvaporativeCoolerTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EvaporativeCoolerTypeCommon\"))\r\n         {\r\n            propertySetEvaporativeCoolerTypeCommon.EntityTypes.Add(IFCEntityType.IfcEvaporativeCoolerType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.FlowArrangement\", \"FlowArrangement\");\r\n            ifcPSE.PropertyName = \"FlowArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_EvaporativeCoolerFlowArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.HeatExchangeArea\", \"HeatExchangeArea\");\r\n            ifcPSE.PropertyName = \"HeatExchangeArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatExchangeAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.HeatExchangerMediaMaterials\", \"HeatExchangerMediaMaterials\");\r\n            ifcPSE.PropertyName = \"HeatExchangerMediaMaterials\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatExchangerMediaMaterialsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.WaterRequirement\", \"WaterRequirement\");\r\n            ifcPSE.PropertyName = \"WaterRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EvaporativeCoolerTypeCommon\"))\r\n         {\r\n            propertySetEvaporativeCoolerTypeCommon.EntityTypes.Add(IFCEntityType.IfcEvaporativeCoolerType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.FlowArrangement\", \"FlowArrangement\");\r\n            ifcPSE.PropertyName = \"FlowArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_EvaporativeCoolerFlowArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.HeatExchangeArea\", \"HeatExchangeArea\");\r\n            ifcPSE.PropertyName = \"HeatExchangeArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatExchangeAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.HeatExchangerMediaMaterials\", \"HeatExchangerMediaMaterials\");\r\n            ifcPSE.PropertyName = \"HeatExchangerMediaMaterials\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatExchangerMediaMaterialsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.WaterRequirement\", \"WaterRequirement\");\r\n            ifcPSE.PropertyName = \"WaterRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EvaporativeCoolerTypeCommon\"))\r\n         {\r\n            propertySetEvaporativeCoolerTypeCommon.EntityTypes.Add(IFCEntityType.IfcEvaporativeCooler);\r\n            propertySetEvaporativeCoolerTypeCommon.ObjectType = \"IfcEvaporativeCooler\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.FlowArrangement\", \"FlowArrangement\");\r\n            ifcPSE.PropertyName = \"FlowArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_EvaporativeCoolerFlowArrangement);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flow Arrangement\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流れ種類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.HeatExchangeArea\", \"HeatExchangeArea\");\r\n            ifcPSE.PropertyName = \"HeatExchangeArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heat Exchange Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱交換面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatExchangeAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Operation Temperature Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"動作温度範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.WaterRequirement\", \"WaterRequirement\");\r\n            ifcPSE.PropertyName = \"WaterRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Requirement\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水要件\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.EffectivenessTable\", \"EffectivenessTable\");\r\n            ifcPSE.PropertyName = \"EffectivenessTable\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Effectiveness Table\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectivenessTableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.AirPressureDropCurve\", \"AirPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Pressure Drop Curve\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.WaterPressDropCurve\", \"WaterPressDropCurve\");\r\n            ifcPSE.PropertyName = \"WaterPressDropCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Press Drop Curve\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterPressDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EvaporativeCoolerTypeCommon\"))\r\n         {\r\n            propertySetEvaporativeCoolerTypeCommon.EntityTypes.Add(IFCEntityType.IfcEvaporativeCooler);\r\n            propertySetEvaporativeCoolerTypeCommon.EntityTypes.Add(IFCEntityType.IfcEvaporativeCoolerType);\r\n            propertySetEvaporativeCoolerTypeCommon.ObjectType = \"IfcEvaporativeCooler\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.FlowArrangement\", \"FlowArrangement\");\r\n            ifcPSE.PropertyName = \"FlowArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_EvaporativeCoolerFlowArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.HeatExchangeArea\", \"HeatExchangeArea\");\r\n            ifcPSE.PropertyName = \"HeatExchangeArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatExchangeAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.WaterRequirement\", \"WaterRequirement\");\r\n            ifcPSE.PropertyName = \"WaterRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.EffectivenessTable\", \"EffectivenessTable\");\r\n            ifcPSE.PropertyName = \"EffectivenessTable\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectivenessTableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.AirPressureDropCurve\", \"AirPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporativeCoolerTypeCommon.WaterPressDropCurve\", \"WaterPressDropCurve\");\r\n            ifcPSE.PropertyName = \"WaterPressDropCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterPressDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporativeCoolerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetEvaporativeCoolerTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_EvaporatorPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetEvaporatorPHistory = new PropertySetDescription();\r\n         propertySetEvaporatorPHistory.Name = \"Pset_EvaporatorPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EvaporatorPHistory\"))\r\n         {\r\n            propertySetEvaporatorPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.HeatRejectionRate\", \"HeatRejectionRate\");\r\n            ifcPSE.PropertyName = \"HeatRejectionRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatRejectionRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.ExteriorHeatTransferCoefficient\", \"ExteriorHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"ExteriorHeatTransferCoefficient\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExteriorHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.InteriorHeatTransferCoefficient\", \"InteriorHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorHeatTransferCoefficient\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.RefrigrerantFoulingResistance\", \"RefrigrerantFoulingResistance\");\r\n            ifcPSE.PropertyName = \"RefrigrerantFoulingResistance\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigrerantFoulingResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.EvaporatingTemperature\", \"EvaporatingTemperature\");\r\n            ifcPSE.PropertyName = \"EvaporatingTemperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EvaporatingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.LogarithmicMeanTemperatureDifference\", \"LogarithmicMeanTemperatureDifference\");\r\n            ifcPSE.PropertyName = \"LogarithmicMeanTemperatureDifference\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LogarithmicMeanTemperatureDifferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.UAcurves\", \"UAcurves\");\r\n            ifcPSE.PropertyName = \"UAcurves\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UAcurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.CompressorEvaporatorHeatGain\", \"CompressorEvaporatorHeatGain\");\r\n            ifcPSE.PropertyName = \"CompressorEvaporatorHeatGain\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorEvaporatorHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.CompressorEvaporatorPressureDrop\", \"CompressorEvaporatorPressureDrop\");\r\n            ifcPSE.PropertyName = \"CompressorEvaporatorPressureDrop\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorEvaporatorPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.EvaporatorMeanVoidFraction\", \"EvaporatorMeanVoidFraction\");\r\n            ifcPSE.PropertyName = \"EvaporatorMeanVoidFraction\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EvaporatorMeanVoidFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.WaterFoulingResistance\", \"WaterFoulingResistance\");\r\n            ifcPSE.PropertyName = \"WaterFoulingResistance\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterFoulingResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EvaporatorPHistory\"))\r\n         {\r\n            propertySetEvaporatorPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.HeatRejectionRate\", \"HeatRejectionRate\");\r\n            ifcPSE.PropertyName = \"HeatRejectionRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatRejectionRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.ExteriorHeatTransferCoefficient\", \"ExteriorHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"ExteriorHeatTransferCoefficient\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExteriorHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.InteriorHeatTransferCoefficient\", \"InteriorHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorHeatTransferCoefficient\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.RefrigrerantFoulingResistance\", \"RefrigrerantFoulingResistance\");\r\n            ifcPSE.PropertyName = \"RefrigrerantFoulingResistance\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigrerantFoulingResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.EvaporatingTemperature\", \"EvaporatingTemperature\");\r\n            ifcPSE.PropertyName = \"EvaporatingTemperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EvaporatingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.LogarithmicMeanTemperatureDifference\", \"LogarithmicMeanTemperatureDifference\");\r\n            ifcPSE.PropertyName = \"LogarithmicMeanTemperatureDifference\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LogarithmicMeanTemperatureDifferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.UAcurves\", \"UAcurves\");\r\n            ifcPSE.PropertyName = \"UAcurves\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UAcurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.CompressorEvaporatorHeatGain\", \"CompressorEvaporatorHeatGain\");\r\n            ifcPSE.PropertyName = \"CompressorEvaporatorHeatGain\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorEvaporatorHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.CompressorEvaporatorPressureDrop\", \"CompressorEvaporatorPressureDrop\");\r\n            ifcPSE.PropertyName = \"CompressorEvaporatorPressureDrop\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorEvaporatorPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.EvaporatorMeanVoidFraction\", \"EvaporatorMeanVoidFraction\");\r\n            ifcPSE.PropertyName = \"EvaporatorMeanVoidFraction\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EvaporatorMeanVoidFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.WaterFoulingResistance\", \"WaterFoulingResistance\");\r\n            ifcPSE.PropertyName = \"WaterFoulingResistance\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterFoulingResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EvaporatorPHistory\"))\r\n         {\r\n            propertySetEvaporatorPHistory.EntityTypes.Add(IFCEntityType.IfcEvaporator);\r\n            propertySetEvaporatorPHistory.ObjectType = \"IfcEvaporator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.HeatRejectionRate\", \"HeatRejectionRate\");\r\n            ifcPSE.PropertyName = \"HeatRejectionRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heat Rejection Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"排熱量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatRejectionRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.ExteriorHeatTransferCoefficient\", \"ExteriorHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"ExteriorHeatTransferCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Exterior Heat Transfer Coefficient\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外表面熱交換係数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExteriorHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.InteriorHeatTransferCoefficient\", \"InteriorHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorHeatTransferCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Interior Heat Transfer Coefficient\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"内面熱交換係数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.RefrigerantFoulingResistance\", \"RefrigerantFoulingResistance\");\r\n            ifcPSE.PropertyName = \"RefrigerantFoulingResistance\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Refrigerant Fouling Resistance\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantFoulingResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.EvaporatingTemperature\", \"EvaporatingTemperature\");\r\n            ifcPSE.PropertyName = \"EvaporatingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Evaporating Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"蒸発温度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EvaporatingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.LogarithmicMeanTemperatureDifference\", \"LogarithmicMeanTemperatureDifference\");\r\n            ifcPSE.PropertyName = \"LogarithmicMeanTemperatureDifference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Logarithmic Mean Temperature Difference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"対数平均温度差\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LogarithmicMeanTemperatureDifferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.UAcurves\", \"UAcurves\");\r\n            ifcPSE.PropertyName = \"UAcurves\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"UAcurves\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"UA曲線\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UAcurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.CompressorEvaporatorHeatGain\", \"CompressorEvaporatorHeatGain\");\r\n            ifcPSE.PropertyName = \"CompressorEvaporatorHeatGain\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Compressor Evaporator Heat Gain\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧縮機・蒸発器熱取得\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorEvaporatorHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.CompressorEvaporatorPressureDrop\", \"CompressorEvaporatorPressureDrop\");\r\n            ifcPSE.PropertyName = \"CompressorEvaporatorPressureDrop\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Compressor Evaporator Pressure Drop\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧縮機・蒸発器圧力降下\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorEvaporatorPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.EvaporatorMeanVoidFraction\", \"EvaporatorMeanVoidFraction\");\r\n            ifcPSE.PropertyName = \"EvaporatorMeanVoidFraction\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Evaporator Mean Void Fraction\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"蒸発器平均空隙率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EvaporatorMeanVoidFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.WaterFoulingResistance\", \"WaterFoulingResistance\");\r\n            ifcPSE.PropertyName = \"WaterFoulingResistance\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Fouling Resistance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水側汚れ抵抗\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterFoulingResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EvaporatorPHistory\"))\r\n         {\r\n            propertySetEvaporatorPHistory.EntityTypes.Add(IFCEntityType.IfcEvaporator);\r\n            propertySetEvaporatorPHistory.ObjectType = \"IfcEvaporator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.HeatRejectionRate\", \"HeatRejectionRate\");\r\n            ifcPSE.PropertyName = \"HeatRejectionRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatRejectionRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.ExteriorHeatTransferCoefficient\", \"ExteriorHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"ExteriorHeatTransferCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExteriorHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.InteriorHeatTransferCoefficient\", \"InteriorHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorHeatTransferCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.RefrigerantFoulingResistance\", \"RefrigerantFoulingResistance\");\r\n            ifcPSE.PropertyName = \"RefrigerantFoulingResistance\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantFoulingResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.EvaporatingTemperature\", \"EvaporatingTemperature\");\r\n            ifcPSE.PropertyName = \"EvaporatingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EvaporatingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.LogarithmicMeanTemperatureDifference\", \"LogarithmicMeanTemperatureDifference\");\r\n            ifcPSE.PropertyName = \"LogarithmicMeanTemperatureDifference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LogarithmicMeanTemperatureDifferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.UAcurves\", \"UAcurves\");\r\n            ifcPSE.PropertyName = \"UAcurves\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UAcurvesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.CompressorEvaporatorHeatGain\", \"CompressorEvaporatorHeatGain\");\r\n            ifcPSE.PropertyName = \"CompressorEvaporatorHeatGain\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorEvaporatorHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.CompressorEvaporatorPressureDrop\", \"CompressorEvaporatorPressureDrop\");\r\n            ifcPSE.PropertyName = \"CompressorEvaporatorPressureDrop\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressorEvaporatorPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.EvaporatorMeanVoidFraction\", \"EvaporatorMeanVoidFraction\");\r\n            ifcPSE.PropertyName = \"EvaporatorMeanVoidFraction\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EvaporatorMeanVoidFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorPHistory.WaterFoulingResistance\", \"WaterFoulingResistance\");\r\n            ifcPSE.PropertyName = \"WaterFoulingResistance\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterFoulingResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetEvaporatorPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_EvaporatorTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetEvaporatorTypeCommon = new PropertySetDescription();\r\n         propertySetEvaporatorTypeCommon.Name = \"Pset_EvaporatorTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EvaporatorTypeCommon\"))\r\n         {\r\n            propertySetEvaporatorTypeCommon.EntityTypes.Add(IFCEntityType.IfcEvaporatorType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.EvaporatorMediumType\", \"EvaporatorMediumType\");\r\n            ifcPSE.PropertyName = \"EvaporatorMediumType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_EvaporatorMediumType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EvaporatorMediumTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.EvaporatorCoolant\", \"EvaporatorCoolant\");\r\n            ifcPSE.PropertyName = \"EvaporatorCoolant\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_EvaporatorCoolant);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EvaporatorCoolantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.RefrigerantClass\", \"RefrigerantClass\");\r\n            ifcPSE.PropertyName = \"RefrigerantClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_RefrigerantClass);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.RefrigerantType\", \"RefrigerantType\");\r\n            ifcPSE.PropertyName = \"RefrigerantType\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.ExternalSurfaceArea\", \"ExternalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"ExternalSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExternalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.InternalSurfaceArea\", \"InternalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"InternalSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.InternalRefrigerantVolume\", \"InternalRefrigerantVolume\");\r\n            ifcPSE.PropertyName = \"InternalRefrigerantVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalRefrigerantVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.InternalWaterVolume\", \"InternalWaterVolume\");\r\n            ifcPSE.PropertyName = \"InternalWaterVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalWaterVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.NominalHeatTransferArea\", \"NominalHeatTransferArea\");\r\n            ifcPSE.PropertyName = \"NominalHeatTransferArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatTransferAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.NominalHeatTransferCoefficient\", \"NominalHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"NominalHeatTransferCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EvaporatorTypeCommon\"))\r\n         {\r\n            propertySetEvaporatorTypeCommon.EntityTypes.Add(IFCEntityType.IfcEvaporatorType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.EvaporatorMediumType\", \"EvaporatorMediumType\");\r\n            ifcPSE.PropertyName = \"EvaporatorMediumType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_EvaporatorMediumType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EvaporatorMediumTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.EvaporatorCoolant\", \"EvaporatorCoolant\");\r\n            ifcPSE.PropertyName = \"EvaporatorCoolant\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_EvaporatorCoolant);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EvaporatorCoolantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.RefrigerantClass\", \"RefrigerantClass\");\r\n            ifcPSE.PropertyName = \"RefrigerantClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_RefrigerantClass);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.RefrigerantType\", \"RefrigerantType\");\r\n            ifcPSE.PropertyName = \"RefrigerantType\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.ExternalSurfaceArea\", \"ExternalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"ExternalSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExternalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.InternalSurfaceArea\", \"InternalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"InternalSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.InternalRefrigerantVolume\", \"InternalRefrigerantVolume\");\r\n            ifcPSE.PropertyName = \"InternalRefrigerantVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalRefrigerantVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.InternalWaterVolume\", \"InternalWaterVolume\");\r\n            ifcPSE.PropertyName = \"InternalWaterVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalWaterVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.NominalHeatTransferArea\", \"NominalHeatTransferArea\");\r\n            ifcPSE.PropertyName = \"NominalHeatTransferArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatTransferAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.NominalHeatTransferCoefficient\", \"NominalHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"NominalHeatTransferCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EvaporatorTypeCommon\"))\r\n         {\r\n            propertySetEvaporatorTypeCommon.EntityTypes.Add(IFCEntityType.IfcEvaporator);\r\n            propertySetEvaporatorTypeCommon.ObjectType = \"IfcEvaporator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.EvaporatorMediumType\", \"EvaporatorMediumType\");\r\n            ifcPSE.PropertyName = \"EvaporatorMediumType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_EvaporatorMediumType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Evaporator Medium Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"蒸発媒体\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EvaporatorMediumTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.EvaporatorCoolant\", \"EvaporatorCoolant\");\r\n            ifcPSE.PropertyName = \"EvaporatorCoolant\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_EvaporatorCoolant);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Evaporator Coolant\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"蒸発器冷却剤\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EvaporatorCoolantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.RefrigerantClass\", \"RefrigerantClass\");\r\n            ifcPSE.PropertyName = \"RefrigerantClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_RefrigerantClass);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Refrigerant Class\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"冷媒分類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.ExternalSurfaceArea\", \"ExternalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"ExternalSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"External Surface Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外表面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExternalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.InternalSurfaceArea\", \"InternalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"InternalSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Internal Surface Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"内表面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.InternalRefrigerantVolume\", \"InternalRefrigerantVolume\");\r\n            ifcPSE.PropertyName = \"InternalRefrigerantVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Internal Refrigerant Volume\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"内部冷媒容積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalRefrigerantVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.InternalWaterVolume\", \"InternalWaterVolume\");\r\n            ifcPSE.PropertyName = \"InternalWaterVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Internal Water Volume\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"内部水容積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalWaterVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.NominalHeatTransferArea\", \"NominalHeatTransferArea\");\r\n            ifcPSE.PropertyName = \"NominalHeatTransferArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Heat Transfer Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設計熱交換面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatTransferAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.NominalHeatTransferCoefficient\", \"NominalHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"NominalHeatTransferCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Heat Transfer Coefficient\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設計熱交換係数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_EvaporatorTypeCommon\"))\r\n         {\r\n            propertySetEvaporatorTypeCommon.EntityTypes.Add(IFCEntityType.IfcEvaporator);\r\n            propertySetEvaporatorTypeCommon.EntityTypes.Add(IFCEntityType.IfcEvaporatorType);\r\n            propertySetEvaporatorTypeCommon.ObjectType = \"IfcEvaporator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.EvaporatorMediumType\", \"EvaporatorMediumType\");\r\n            ifcPSE.PropertyName = \"EvaporatorMediumType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_EvaporatorMediumType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EvaporatorMediumTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.EvaporatorCoolant\", \"EvaporatorCoolant\");\r\n            ifcPSE.PropertyName = \"EvaporatorCoolant\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_EvaporatorCoolant);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EvaporatorCoolantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.RefrigerantClass\", \"RefrigerantClass\");\r\n            ifcPSE.PropertyName = \"RefrigerantClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RefrigerantClass);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RefrigerantClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.ExternalSurfaceArea\", \"ExternalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"ExternalSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExternalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.InternalSurfaceArea\", \"InternalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"InternalSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.InternalRefrigerantVolume\", \"InternalRefrigerantVolume\");\r\n            ifcPSE.PropertyName = \"InternalRefrigerantVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalRefrigerantVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.InternalWaterVolume\", \"InternalWaterVolume\");\r\n            ifcPSE.PropertyName = \"InternalWaterVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalWaterVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.NominalHeatTransferArea\", \"NominalHeatTransferArea\");\r\n            ifcPSE.PropertyName = \"NominalHeatTransferArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatTransferAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_EvaporatorTypeCommon.NominalHeatTransferCoefficient\", \"NominalHeatTransferCoefficient\");\r\n            ifcPSE.PropertyName = \"NominalHeatTransferCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeatTransferCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetEvaporatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetEvaporatorTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FanCentrifugal(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFanCentrifugal = new PropertySetDescription();\r\n         propertySetFanCentrifugal.Name = \"Pset_FanCentrifugal\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FanCentrifugal\"))\r\n         {\r\n            propertySetFanCentrifugal.EntityTypes.Add(IFCEntityType.IfcFan);\r\n            propertySetFanCentrifugal.ObjectType = \"IfcFan\";\r\n            propertySetFanCentrifugal.PredefinedType = \"CENTRIFUGAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanCentrifugal.DischargePosition\", \"DischargePosition\");\r\n            ifcPSE.PropertyName = \"DischargePosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CentrifugalFanDischargePosition);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Discharge Position\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"吐出位置\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargePositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanCentrifugal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanCentrifugal.DirectionOfRotation\", \"DirectionOfRotation\");\r\n            ifcPSE.PropertyName = \"DirectionOfRotation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CentrifugalFanRotation);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Direction Of Rotation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"角度方向\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DirectionOfRotationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanCentrifugal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanCentrifugal.Arrangement\", \"Arrangement\");\r\n            ifcPSE.PropertyName = \"Arrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CentrifugalFanArrangement);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Arrangement\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"配置\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanCentrifugal.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FanCentrifugal\"))\r\n         {\r\n            propertySetFanCentrifugal.EntityTypes.Add(IFCEntityType.IfcFan);\r\n            propertySetFanCentrifugal.EntityTypes.Add(IFCEntityType.IfcFan);\r\n            propertySetFanCentrifugal.EntityTypes.Add(IFCEntityType.IfcFan);\r\n            propertySetFanCentrifugal.EntityTypes.Add(IFCEntityType.IfcFan);\r\n            propertySetFanCentrifugal.EntityTypes.Add(IFCEntityType.IfcFanType);\r\n            propertySetFanCentrifugal.EntityTypes.Add(IFCEntityType.IfcFanType);\r\n            propertySetFanCentrifugal.EntityTypes.Add(IFCEntityType.IfcFanType);\r\n            propertySetFanCentrifugal.EntityTypes.Add(IFCEntityType.IfcFanType);\r\n            propertySetFanCentrifugal.ObjectType = \"IfcFan\";\r\n            propertySetFanCentrifugal.PredefinedType = \"CENTRIFUGALRADIAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanCentrifugal.DischargePosition\", \"DischargePosition\");\r\n            ifcPSE.PropertyName = \"DischargePosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CentrifugalFanDischargePosition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargePositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanCentrifugal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanCentrifugal.DirectionOfRotation\", \"DirectionOfRotation\");\r\n            ifcPSE.PropertyName = \"DirectionOfRotation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CentrifugalFanRotation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DirectionOfRotationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanCentrifugal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanCentrifugal.FanArrangement\", \"FanArrangement\");\r\n            ifcPSE.PropertyName = \"FanArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CentrifugalFanArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanCentrifugal.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFanCentrifugal);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FanOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFanOccurrence = new PropertySetDescription();\r\n         propertySetFanOccurrence.Name = \"Pset_FanOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FanOccurrence\"))\r\n         {\r\n            propertySetFanOccurrence.EntityTypes.Add(IFCEntityType.IfcFan);\r\n            propertySetFanOccurrence.ObjectType = \"IfcFan\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanOccurrence.DischargeType\", \"DischargeType\");\r\n            ifcPSE.PropertyName = \"DischargeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FanDischargeType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Discharge Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"吐出形式\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanOccurrence.ApplicationOfFan\", \"ApplicationOfFan\");\r\n            ifcPSE.PropertyName = \"ApplicationOfFan\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FanApplicationType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Application Of Fan\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"Fan用途\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplicationOfFanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanOccurrence.CoilPosition\", \"CoilPosition\");\r\n            ifcPSE.PropertyName = \"CoilPosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FanCoilPosition);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Coil Position\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"コイル位置\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanOccurrence.MotorPosition\", \"MotorPosition\");\r\n            ifcPSE.PropertyName = \"MotorPosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FanMotorPosition);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Motor Position\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"モーター位置\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MotorPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanOccurrence.FanMountingType\", \"FanMountingType\");\r\n            ifcPSE.PropertyName = \"FanMountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FanMountingType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fan Mounting Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"Fan設置タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanMountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanOccurrence.FractionOfMotorHeatToAirStream\", \"FractionOfMotorHeatToAirStream\");\r\n            ifcPSE.PropertyName = \"FractionOfMotorHeatToAirStream\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fraction Of Motor Heat To Air Stream\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"モーター排熱\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FractionOfMotorHeatToAirStreamCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanOccurrence.ImpellerDiameter\", \"ImpellerDiameter\");\r\n            ifcPSE.PropertyName = \"ImpellerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Impeller Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"羽根径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpellerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FanOccurrence\"))\r\n         {\r\n            propertySetFanOccurrence.EntityTypes.Add(IFCEntityType.IfcFan);\r\n            propertySetFanOccurrence.ObjectType = \"IfcFan\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanOccurrence.DischargeType\", \"DischargeType\");\r\n            ifcPSE.PropertyName = \"DischargeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FanDischargeType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanOccurrence.ApplicationOfFan\", \"ApplicationOfFan\");\r\n            ifcPSE.PropertyName = \"ApplicationOfFan\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FanApplicationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplicationOfFanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanOccurrence.CoilPosition\", \"CoilPosition\");\r\n            ifcPSE.PropertyName = \"CoilPosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FanCoilPosition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanOccurrence.MotorPosition\", \"MotorPosition\");\r\n            ifcPSE.PropertyName = \"MotorPosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FanMotorPosition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MotorPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanOccurrence.FanMountingType\", \"FanMountingType\");\r\n            ifcPSE.PropertyName = \"FanMountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FanMountingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanMountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanOccurrence.FractionOfMotorHeatToAirStream\", \"FractionOfMotorHeatToAirStream\");\r\n            ifcPSE.PropertyName = \"FractionOfMotorHeatToAirStream\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FractionOfMotorHeatToAirStreamCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanOccurrence.ImpellerDiameter\", \"ImpellerDiameter\");\r\n            ifcPSE.PropertyName = \"ImpellerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpellerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFanOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FanPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFanPHistory = new PropertySetDescription();\r\n         propertySetFanPHistory.Name = \"Pset_FanPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FanPHistory\"))\r\n         {\r\n            propertySetFanPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.FanRotationSpeed\", \"FanRotationSpeed\");\r\n            ifcPSE.PropertyName = \"FanRotationSpeed\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanRotationSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.WheelTipSpeed\", \"WheelTipSpeed\");\r\n            ifcPSE.PropertyName = \"WheelTipSpeed\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WheelTipSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.FanEfficiency\", \"FanEfficiency\");\r\n            ifcPSE.PropertyName = \"FanEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.OverallEfficiency\", \"OverallEfficiency\");\r\n            ifcPSE.PropertyName = \"OverallEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.FanPowerRate\", \"FanPowerRate\");\r\n            ifcPSE.PropertyName = \"FanPowerRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanPowerRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.ShaftPowerRate\", \"ShaftPowerRate\");\r\n            ifcPSE.PropertyName = \"ShaftPowerRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShaftPowerRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.PressureCurve\", \"PressureCurve\");\r\n            ifcPSE.PropertyName = \"PressureCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.EfficiencyCurve\", \"EfficiencyCurve\");\r\n            ifcPSE.PropertyName = \"EfficiencyCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EfficiencyCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.DischargeVelocity\", \"DischargeVelocity\");\r\n            ifcPSE.PropertyName = \"DischargeVelocity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.DischargePressureLoss\", \"DischargePressureLoss\");\r\n            ifcPSE.PropertyName = \"DischargePressureLoss\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargePressureLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.DrivePowerLoss\", \"DrivePowerLoss\");\r\n            ifcPSE.PropertyName = \"DrivePowerLoss\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrivePowerLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FanPHistory\"))\r\n         {\r\n            propertySetFanPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.FanRotationSpeed\", \"FanRotationSpeed\");\r\n            ifcPSE.PropertyName = \"FanRotationSpeed\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanRotationSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.WheelTipSpeed\", \"WheelTipSpeed\");\r\n            ifcPSE.PropertyName = \"WheelTipSpeed\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WheelTipSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.FanEfficiency\", \"FanEfficiency\");\r\n            ifcPSE.PropertyName = \"FanEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.OverallEfficiency\", \"OverallEfficiency\");\r\n            ifcPSE.PropertyName = \"OverallEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.FanPowerRate\", \"FanPowerRate\");\r\n            ifcPSE.PropertyName = \"FanPowerRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanPowerRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.ShaftPowerRate\", \"ShaftPowerRate\");\r\n            ifcPSE.PropertyName = \"ShaftPowerRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShaftPowerRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.PressureCurve\", \"PressureCurve\");\r\n            ifcPSE.PropertyName = \"PressureCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.EfficiencyCurve\", \"EfficiencyCurve\");\r\n            ifcPSE.PropertyName = \"EfficiencyCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EfficiencyCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.DischargeVelocity\", \"DischargeVelocity\");\r\n            ifcPSE.PropertyName = \"DischargeVelocity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.DischargePressureLoss\", \"DischargePressureLoss\");\r\n            ifcPSE.PropertyName = \"DischargePressureLoss\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargePressureLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.DrivePowerLoss\", \"DrivePowerLoss\");\r\n            ifcPSE.PropertyName = \"DrivePowerLoss\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrivePowerLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FanPHistory\"))\r\n         {\r\n            propertySetFanPHistory.EntityTypes.Add(IFCEntityType.IfcFan);\r\n            propertySetFanPHistory.ObjectType = \"IfcFan\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.FanRotationSpeed\", \"FanRotationSpeed\");\r\n            ifcPSE.PropertyName = \"FanRotationSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fan Rotation Speed\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"回転速度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanRotationSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.WheelTipSpeed\", \"WheelTipSpeed\");\r\n            ifcPSE.PropertyName = \"WheelTipSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wheel Tip Speed\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ホイール先端速度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WheelTipSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.FanEfficiency\", \"FanEfficiency\");\r\n            ifcPSE.PropertyName = \"FanEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fan Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"Fan効率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.OverallEfficiency\", \"OverallEfficiency\");\r\n            ifcPSE.PropertyName = \"OverallEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Overall Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"全体効率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.FanPowerRate\", \"FanPowerRate\");\r\n            ifcPSE.PropertyName = \"FanPowerRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fan Power Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"Fan効率動力量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanPowerRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.ShaftPowerRate\", \"ShaftPowerRate\");\r\n            ifcPSE.PropertyName = \"ShaftPowerRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shaft Power Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"軸動力量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShaftPowerRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.DischargeVelocity\", \"DischargeVelocity\");\r\n            ifcPSE.PropertyName = \"DischargeVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Discharge Velocity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"吐出速度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.DischargePressureLoss\", \"DischargePressureLoss\");\r\n            ifcPSE.PropertyName = \"DischargePressureLoss\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Discharge Pressure Loss\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"吐出圧力損失\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargePressureLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.DrivePowerLoss\", \"DrivePowerLoss\");\r\n            ifcPSE.PropertyName = \"DrivePowerLoss\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Drive Power Loss\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"駆動電力損失\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrivePowerLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FanPHistory\"))\r\n         {\r\n            propertySetFanPHistory.EntityTypes.Add(IFCEntityType.IfcFan);\r\n            propertySetFanPHistory.ObjectType = \"IfcFan\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.FanRotationSpeed\", \"FanRotationSpeed\");\r\n            ifcPSE.PropertyName = \"FanRotationSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanRotationSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.WheelTipSpeed\", \"WheelTipSpeed\");\r\n            ifcPSE.PropertyName = \"WheelTipSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WheelTipSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.FanEfficiency\", \"FanEfficiency\");\r\n            ifcPSE.PropertyName = \"FanEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.OverallEfficiency\", \"OverallEfficiency\");\r\n            ifcPSE.PropertyName = \"OverallEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.FanPowerRate\", \"FanPowerRate\");\r\n            ifcPSE.PropertyName = \"FanPowerRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanPowerRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.ShaftPowerRate\", \"ShaftPowerRate\");\r\n            ifcPSE.PropertyName = \"ShaftPowerRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShaftPowerRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.DischargeVelocity\", \"DischargeVelocity\");\r\n            ifcPSE.PropertyName = \"DischargeVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.DischargePressureLoss\", \"DischargePressureLoss\");\r\n            ifcPSE.PropertyName = \"DischargePressureLoss\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargePressureLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanPHistory.DrivePowerLoss\", \"DrivePowerLoss\");\r\n            ifcPSE.PropertyName = \"DrivePowerLoss\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrivePowerLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFanPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FanTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFanTypeCommon = new PropertySetDescription();\r\n         propertySetFanTypeCommon.Name = \"Pset_FanTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FanTypeCommon\"))\r\n         {\r\n            propertySetFanTypeCommon.EntityTypes.Add(IFCEntityType.IfcFanType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.MotorDriveType\", \"MotorDriveType\");\r\n            ifcPSE.PropertyName = \"MotorDriveType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FanMotorConnectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MotorDriveTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.CapacityControlType\", \"CapacityControlType\");\r\n            ifcPSE.PropertyName = \"CapacityControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FanCapacityControlType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.WheelMaterial\", \"WheelMaterial\");\r\n            ifcPSE.PropertyName = \"WheelMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WheelMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.HousingMaterial\", \"HousingMaterial\");\r\n            ifcPSE.PropertyName = \"HousingMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HousingMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalAirFlowRate\", \"NominalAirFlowRate\");\r\n            ifcPSE.PropertyName = \"NominalAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalTotalPressure\", \"NominalTotalPressure\");\r\n            ifcPSE.PropertyName = \"NominalTotalPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalTotalPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalStaticPressure\", \"NominalStaticPressure\");\r\n            ifcPSE.PropertyName = \"NominalStaticPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalStaticPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalRotationSpeed\", \"NominalRotationSpeed\");\r\n            ifcPSE.PropertyName = \"NominalRotationSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.RotationalFrequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalRotationSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalPowerRate\", \"NominalPowerRate\");\r\n            ifcPSE.PropertyName = \"NominalPowerRate\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPowerRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.OperationalCriteria\", \"OperationalCriteria\");\r\n            ifcPSE.PropertyName = \"OperationalCriteria\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalCriteriaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FanTypeCommon\"))\r\n         {\r\n            propertySetFanTypeCommon.EntityTypes.Add(IFCEntityType.IfcFanType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.MotorDriveType\", \"MotorDriveType\");\r\n            ifcPSE.PropertyName = \"MotorDriveType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FanMotorConnectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MotorDriveTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.CapacityControlType\", \"CapacityControlType\");\r\n            ifcPSE.PropertyName = \"CapacityControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FanCapacityControlType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.WheelMaterial\", \"WheelMaterial\");\r\n            ifcPSE.PropertyName = \"WheelMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WheelMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.HousingMaterial\", \"HousingMaterial\");\r\n            ifcPSE.PropertyName = \"HousingMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HousingMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalAirFlowRate\", \"NominalAirFlowRate\");\r\n            ifcPSE.PropertyName = \"NominalAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalTotalPressure\", \"NominalTotalPressure\");\r\n            ifcPSE.PropertyName = \"NominalTotalPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalTotalPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalStaticPressure\", \"NominalStaticPressure\");\r\n            ifcPSE.PropertyName = \"NominalStaticPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalStaticPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalRotationSpeed\", \"NominalRotationSpeed\");\r\n            ifcPSE.PropertyName = \"NominalRotationSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.RotationalFrequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalRotationSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalPowerRate\", \"NominalPowerRate\");\r\n            ifcPSE.PropertyName = \"NominalPowerRate\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPowerRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.OperationalCriteria\", \"OperationalCriteria\");\r\n            ifcPSE.PropertyName = \"OperationalCriteria\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalCriteriaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FanTypeCommon\"))\r\n         {\r\n            propertySetFanTypeCommon.EntityTypes.Add(IFCEntityType.IfcFan);\r\n            propertySetFanTypeCommon.ObjectType = \"IfcFan\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.MotorDriveType\", \"MotorDriveType\");\r\n            ifcPSE.PropertyName = \"MotorDriveType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FanMotorConnectionType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Motor Drive Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"モーター駆動種類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MotorDriveTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.CapacityControlType\", \"CapacityControlType\");\r\n            ifcPSE.PropertyName = \"CapacityControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FanCapacityControlType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Capacity Control Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"容量制御方式\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Operation Temperature Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"動作温度範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalAirFlowRate\", \"NominalAirFlowRate\");\r\n            ifcPSE.PropertyName = \"NominalAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Air Flow Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設計風量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalTotalPressure\", \"NominalTotalPressure\");\r\n            ifcPSE.PropertyName = \"NominalTotalPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Total Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設計全圧\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalTotalPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalStaticPressure\", \"NominalStaticPressure\");\r\n            ifcPSE.PropertyName = \"NominalStaticPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Static Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設計静圧\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalStaticPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalRotationSpeed\", \"NominalRotationSpeed\");\r\n            ifcPSE.PropertyName = \"NominalRotationSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.RotationalFrequency;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Rotation Speed\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設計回転速度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalRotationSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalPowerRate\", \"NominalPowerRate\");\r\n            ifcPSE.PropertyName = \"NominalPowerRate\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Power Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設計動力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPowerRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.OperationalCriteria\", \"OperationalCriteria\");\r\n            ifcPSE.PropertyName = \"OperationalCriteria\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Operational Criteria\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"動作環境\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalCriteriaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.PressureCurve\", \"PressureCurve\");\r\n            ifcPSE.PropertyName = \"PressureCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure Curve\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.EfficiencyCurve\", \"EfficiencyCurve\");\r\n            ifcPSE.PropertyName = \"EfficiencyCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Efficiency Curve\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EfficiencyCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FanTypeCommon\"))\r\n         {\r\n            propertySetFanTypeCommon.EntityTypes.Add(IFCEntityType.IfcFan);\r\n            propertySetFanTypeCommon.EntityTypes.Add(IFCEntityType.IfcFanType);\r\n            propertySetFanTypeCommon.ObjectType = \"IfcFan\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.MotorDriveType\", \"MotorDriveType\");\r\n            ifcPSE.PropertyName = \"MotorDriveType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FanMotorConnectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MotorDriveTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.CapacityControlType\", \"CapacityControlType\");\r\n            ifcPSE.PropertyName = \"CapacityControlType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FanCapacityControlType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityControlTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalAirFlowRate\", \"NominalAirFlowRate\");\r\n            ifcPSE.PropertyName = \"NominalAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalTotalPressure\", \"NominalTotalPressure\");\r\n            ifcPSE.PropertyName = \"NominalTotalPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalTotalPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalStaticPressure\", \"NominalStaticPressure\");\r\n            ifcPSE.PropertyName = \"NominalStaticPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalStaticPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalRotationSpeed\", \"NominalRotationSpeed\");\r\n            ifcPSE.PropertyName = \"NominalRotationSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.RotationalFrequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalRotationSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.NominalPowerRate\", \"NominalPowerRate\");\r\n            ifcPSE.PropertyName = \"NominalPowerRate\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPowerRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.OperationalCriteria\", \"OperationalCriteria\");\r\n            ifcPSE.PropertyName = \"OperationalCriteria\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalCriteriaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.PressureCurve\", \"PressureCurve\");\r\n            ifcPSE.PropertyName = \"PressureCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeCommon.EfficiencyCurve\", \"EfficiencyCurve\");\r\n            ifcPSE.PropertyName = \"EfficiencyCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EfficiencyCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFanTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FanTypeSmokeControl(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFanTypeSmokeControl = new PropertySetDescription();\r\n         propertySetFanTypeSmokeControl.Name = \"Pset_FanTypeSmokeControl\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FanTypeSmokeControl\"))\r\n         {\r\n            propertySetFanTypeSmokeControl.EntityTypes.Add(IFCEntityType.IfcFanType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeSmokeControl.OperationalCriteria\", \"OperationalCriteria\");\r\n            ifcPSE.PropertyName = \"OperationalCriteria\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalCriteriaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeSmokeControl.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeSmokeControl.MaximumDesignTemperature\", \"MaximumDesignTemperature\");\r\n            ifcPSE.PropertyName = \"MaximumDesignTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumDesignTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeSmokeControl.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeSmokeControl.SmokeControlFlowrate\", \"SmokeControlFlowrate\");\r\n            ifcPSE.PropertyName = \"SmokeControlFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SmokeControlFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeSmokeControl.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FanTypeSmokeControl\"))\r\n         {\r\n            propertySetFanTypeSmokeControl.EntityTypes.Add(IFCEntityType.IfcFanType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeSmokeControl.OperationalCriteria\", \"OperationalCriteria\");\r\n            ifcPSE.PropertyName = \"OperationalCriteria\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalCriteriaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeSmokeControl.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeSmokeControl.MaximumDesignTemperature\", \"MaximumDesignTemperature\");\r\n            ifcPSE.PropertyName = \"MaximumDesignTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumDesignTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeSmokeControl.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FanTypeSmokeControl.SmokeControlFlowrate\", \"SmokeControlFlowrate\");\r\n            ifcPSE.PropertyName = \"SmokeControlFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SmokeControlFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFanTypeSmokeControl.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFanTypeSmokeControl);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FastenerRailWeld(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFastenerRailWeld = new PropertySetDescription();\r\n         propertySetFastenerRailWeld.Name = \"Pset_FastenerRailWeld\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FastenerRailWeld\"))\r\n         {\r\n            propertySetFastenerRailWeld.EntityTypes.Add(IFCEntityType.IfcFastener);\r\n            propertySetFastenerRailWeld.EntityTypes.Add(IFCEntityType.IfcFastenerType);\r\n            propertySetFastenerRailWeld.ObjectType = \"IfcFastener\";\r\n            propertySetFastenerRailWeld.PredefinedType = \"WELD\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerRailWeld.IsLiftingBracket\", \"IsLiftingBracket\");\r\n            ifcPSE.PropertyName = \"IsLiftingBracket\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsLiftingBracketCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerRailWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerRailWeld.TemperatureDuringInstallation\", \"TemperatureDuringInstallation\");\r\n            ifcPSE.PropertyName = \"TemperatureDuringInstallation\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureDuringInstallationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerRailWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerRailWeld.JointRelativePosition\", \"JointRelativePosition\");\r\n            ifcPSE.PropertyName = \"JointRelativePosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RelativePosition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.JointRelativePositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerRailWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerRailWeld.AssemblyPlace\", \"AssemblyPlace\");\r\n            ifcPSE.PropertyName = \"AssemblyPlace\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AssemblyPlace);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyPlaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerRailWeld.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFastenerRailWeld);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FastenerWeld(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFastenerWeld = new PropertySetDescription();\r\n         propertySetFastenerWeld.Name = \"Pset_FastenerWeld\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FastenerWeld\"))\r\n         {\r\n            propertySetFastenerWeld.EntityTypes.Add(IFCEntityType.IfcFastener);\r\n            propertySetFastenerWeld.ObjectType = \"IfcFastener\";\r\n            propertySetFastenerWeld.PredefinedType = \"WELD\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.Type1\", \"Type1\");\r\n            ifcPSE.PropertyName = \"Type1\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Type1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Type1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.Type2\", \"Type2\");\r\n            ifcPSE.PropertyName = \"Type2\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Type2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Type2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.Surface1\", \"Surface1\");\r\n            ifcPSE.PropertyName = \"Surface1\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Surface1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Surface1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.Surface2\", \"Surface2\");\r\n            ifcPSE.PropertyName = \"Surface2\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Surface2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Surface2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.Process\", \"Process\");\r\n            ifcPSE.PropertyName = \"Process\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Process\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProcessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.ProcessName\", \"ProcessName\");\r\n            ifcPSE.PropertyName = \"ProcessName\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Process Name\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProcessNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.a\", \"a\");\r\n            ifcPSE.PropertyName = \"a\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"a\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.aCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.c\", \"c\");\r\n            ifcPSE.PropertyName = \"c\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"c\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.cCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.d\", \"d\");\r\n            ifcPSE.PropertyName = \"d\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"d\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.dCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.e\", \"e\");\r\n            ifcPSE.PropertyName = \"e\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"e\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.eCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.l\", \"l\");\r\n            ifcPSE.PropertyName = \"l\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"l\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.lCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.n\", \"n\");\r\n            ifcPSE.PropertyName = \"n\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"n\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.nCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.s\", \"s\");\r\n            ifcPSE.PropertyName = \"s\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"s\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.sCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.z\", \"z\");\r\n            ifcPSE.PropertyName = \"z\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"z\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.zCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.Intermittent\", \"Intermittent\");\r\n            ifcPSE.PropertyName = \"Intermittent\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Intermittent\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IntermittentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.Staggered\", \"Staggered\");\r\n            ifcPSE.PropertyName = \"Staggered\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Staggered\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StaggeredCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FastenerWeld\"))\r\n         {\r\n            propertySetFastenerWeld.EntityTypes.Add(IFCEntityType.IfcFastener);\r\n            propertySetFastenerWeld.EntityTypes.Add(IFCEntityType.IfcFastenerType);\r\n            propertySetFastenerWeld.ObjectType = \"IfcFastener\";\r\n            propertySetFastenerWeld.PredefinedType = \"WELD\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.Type1\", \"Type1\");\r\n            ifcPSE.PropertyName = \"Type1\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Type1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.Type2\", \"Type2\");\r\n            ifcPSE.PropertyName = \"Type2\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Type2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.Surface1\", \"Surface1\");\r\n            ifcPSE.PropertyName = \"Surface1\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Surface1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.Surface2\", \"Surface2\");\r\n            ifcPSE.PropertyName = \"Surface2\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Surface2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.Process\", \"Process\");\r\n            ifcPSE.PropertyName = \"Process\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProcessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.ProcessName\", \"ProcessName\");\r\n            ifcPSE.PropertyName = \"ProcessName\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProcessNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.NominalThroatThickness\", \"NominalThroatThickness\");\r\n            ifcPSE.PropertyName = \"NominalThroatThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalThroatThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.WeldWidth\", \"WeldWidth\");\r\n            ifcPSE.PropertyName = \"WeldWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeldWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.WeldDiameter\", \"WeldDiameter\");\r\n            ifcPSE.PropertyName = \"WeldDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeldDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.WeldElementSpacing\", \"WeldElementSpacing\");\r\n            ifcPSE.PropertyName = \"WeldElementSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeldElementSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.WeldElementLength\", \"WeldElementLength\");\r\n            ifcPSE.PropertyName = \"WeldElementLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeldElementLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.NumberOfWeldElements\", \"NumberOfWeldElements\");\r\n            ifcPSE.PropertyName = \"NumberOfWeldElements\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfWeldElementsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.DeepPenetrationThroatThickness\", \"DeepPenetrationThroatThickness\");\r\n            ifcPSE.PropertyName = \"DeepPenetrationThroatThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DeepPenetrationThroatThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.WeldLegLength\", \"WeldLegLength\");\r\n            ifcPSE.PropertyName = \"WeldLegLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeldLegLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.Intermittent\", \"Intermittent\");\r\n            ifcPSE.PropertyName = \"Intermittent\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IntermittentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FastenerWeld.Staggered\", \"Staggered\");\r\n            ifcPSE.PropertyName = \"Staggered\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StaggeredCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFastenerWeld.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFastenerWeld);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FenderCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFenderCommon = new PropertySetDescription();\r\n         propertySetFenderCommon.Name = \"Pset_FenderCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FenderCommon\"))\r\n         {\r\n            propertySetFenderCommon.EntityTypes.Add(IFCEntityType.IfcImpactProtectionDevice);\r\n            propertySetFenderCommon.EntityTypes.Add(IFCEntityType.IfcImpactProtectionDeviceType);\r\n            propertySetFenderCommon.ObjectType = \"IfcImpactProtectionDevice\";\r\n            propertySetFenderCommon.PredefinedType = \"FENDER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderCommon.FenderType\", \"FenderType\");\r\n            ifcPSE.PropertyName = \"FenderType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FenderType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FenderTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderCommon.CoefficientOfFriction\", \"CoefficientOfFriction\");\r\n            ifcPSE.PropertyName = \"CoefficientOfFriction\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoefficientOfFrictionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderCommon.EnergyAbsorptionTolerance\", \"EnergyAbsorptionTolerance\");\r\n            ifcPSE.PropertyName = \"EnergyAbsorptionTolerance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyAbsorptionToleranceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderCommon.MaxReactionTolerance\", \"MaxReactionTolerance\");\r\n            ifcPSE.PropertyName = \"MaxReactionTolerance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaxReactionToleranceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderCommon.MaximumTemperatureFactor\", \"MaximumTemperatureFactor\");\r\n            ifcPSE.PropertyName = \"MaximumTemperatureFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumTemperatureFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderCommon.MinimumTemperatureFactor\", \"MinimumTemperatureFactor\");\r\n            ifcPSE.PropertyName = \"MinimumTemperatureFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumTemperatureFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderCommon.VelocityFactorEnergy\", \"VelocityFactorEnergy\");\r\n            ifcPSE.PropertyName = \"VelocityFactorEnergy\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VelocityFactorEnergyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderCommon.VelocityFactorReaction\", \"VelocityFactorReaction\");\r\n            ifcPSE.PropertyName = \"VelocityFactorReaction\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VelocityFactorReactionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderCommon.EnergyAbsorption\", \"EnergyAbsorption\");\r\n            ifcPSE.PropertyName = \"EnergyAbsorption\";\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyAbsorptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderCommon.MaxReaction\", \"MaxReaction\");\r\n            ifcPSE.PropertyName = \"MaxReaction\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaxReactionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFenderCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FenderDesignCriteria(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFenderDesignCriteria = new PropertySetDescription();\r\n         propertySetFenderDesignCriteria.Name = \"Pset_FenderDesignCriteria\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FenderDesignCriteria\"))\r\n         {\r\n            propertySetFenderDesignCriteria.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetFenderDesignCriteria.EntityTypes.Add(IFCEntityType.IfcSpaceType);\r\n            propertySetFenderDesignCriteria.ObjectType = \"IfcSpace\";\r\n            propertySetFenderDesignCriteria.PredefinedType = \"BERTH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderDesignCriteria.CoefficientOfFriction\", \"CoefficientOfFriction\");\r\n            ifcPSE.PropertyName = \"CoefficientOfFriction\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoefficientOfFrictionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderDesignCriteria.EnergyAbsorptionTolerance\", \"EnergyAbsorptionTolerance\");\r\n            ifcPSE.PropertyName = \"EnergyAbsorptionTolerance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyAbsorptionToleranceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderDesignCriteria.MaxReactionTolerance\", \"MaxReactionTolerance\");\r\n            ifcPSE.PropertyName = \"MaxReactionTolerance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaxReactionToleranceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderDesignCriteria.MaximumTemperatureFactor\", \"MaximumTemperatureFactor\");\r\n            ifcPSE.PropertyName = \"MaximumTemperatureFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumTemperatureFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderDesignCriteria.MinimumTemperatureFactor\", \"MinimumTemperatureFactor\");\r\n            ifcPSE.PropertyName = \"MinimumTemperatureFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumTemperatureFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderDesignCriteria.VelocityFactorEnergy\", \"VelocityFactorEnergy\");\r\n            ifcPSE.PropertyName = \"VelocityFactorEnergy\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VelocityFactorEnergyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderDesignCriteria.VelocityFactorReaction\", \"VelocityFactorReaction\");\r\n            ifcPSE.PropertyName = \"VelocityFactorReaction\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VelocityFactorReactionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderDesignCriteria.EnergyAbsorption\", \"EnergyAbsorption\");\r\n            ifcPSE.PropertyName = \"EnergyAbsorption\";\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyAbsorptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderDesignCriteria.MaxReaction\", \"MaxReaction\");\r\n            ifcPSE.PropertyName = \"MaxReaction\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaxReactionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderDesignCriteria.MinCompressedFenderHeight\", \"MinCompressedFenderHeight\");\r\n            ifcPSE.PropertyName = \"MinCompressedFenderHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinCompressedFenderHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FenderDesignCriteria.AddedMassCoefficientMethod\", \"AddedMassCoefficientMethod\");\r\n            ifcPSE.PropertyName = \"AddedMassCoefficientMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AddedMassCoefficientMethod);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AddedMassCoefficientMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFenderDesignCriteria.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFenderDesignCriteria);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FilterPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFilterPHistory = new PropertySetDescription();\r\n         propertySetFilterPHistory.Name = \"Pset_FilterPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FilterPHistory\"))\r\n         {\r\n            propertySetFilterPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterPHistory.CountedEfficiency\", \"CountedEfficiency\");\r\n            ifcPSE.PropertyName = \"CountedEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CountedEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterPHistory.WeightedEfficiency\", \"WeightedEfficiency\");\r\n            ifcPSE.PropertyName = \"WeightedEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightedEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterPHistory.ParticleMassHolding\", \"ParticleMassHolding\");\r\n            ifcPSE.PropertyName = \"ParticleMassHolding\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ParticleMassHoldingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FilterPHistory\"))\r\n         {\r\n            propertySetFilterPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterPHistory.CountedEfficiency\", \"CountedEfficiency\");\r\n            ifcPSE.PropertyName = \"CountedEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CountedEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterPHistory.WeightedEfficiency\", \"WeightedEfficiency\");\r\n            ifcPSE.PropertyName = \"WeightedEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightedEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterPHistory.ParticleMassHolding\", \"ParticleMassHolding\");\r\n            ifcPSE.PropertyName = \"ParticleMassHolding\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ParticleMassHoldingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FilterPHistory\"))\r\n         {\r\n            propertySetFilterPHistory.EntityTypes.Add(IFCEntityType.IfcFilter);\r\n            propertySetFilterPHistory.ObjectType = \"IfcFilter\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterPHistory.CountedEfficiency\", \"CountedEfficiency\");\r\n            ifcPSE.PropertyName = \"CountedEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Counted Efficiency\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CountedEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterPHistory.WeightedEfficiency\", \"WeightedEfficiency\");\r\n            ifcPSE.PropertyName = \"WeightedEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Weighted Efficiency\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightedEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterPHistory.ParticleMassHolding\", \"ParticleMassHolding\");\r\n            ifcPSE.PropertyName = \"ParticleMassHolding\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Particle Mass Holding\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ParticleMassHoldingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FilterPHistory\"))\r\n         {\r\n            propertySetFilterPHistory.EntityTypes.Add(IFCEntityType.IfcFilter);\r\n            propertySetFilterPHistory.ObjectType = \"IfcFilter\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterPHistory.CountedEfficiency\", \"CountedEfficiency\");\r\n            ifcPSE.PropertyName = \"CountedEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CountedEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterPHistory.WeightedEfficiency\", \"WeightedEfficiency\");\r\n            ifcPSE.PropertyName = \"WeightedEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightedEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterPHistory.ParticleMassHolding\", \"ParticleMassHolding\");\r\n            ifcPSE.PropertyName = \"ParticleMassHolding\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ParticleMassHoldingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFilterPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FilterTypeAirParticleFilter(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFilterTypeAirParticleFilter = new PropertySetDescription();\r\n         propertySetFilterTypeAirParticleFilter.Name = \"Pset_FilterTypeAirParticleFilter\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FilterTypeAirParticleFilter\"))\r\n         {\r\n            propertySetFilterTypeAirParticleFilter.EntityTypes.Add(IFCEntityType.IfcFilterType);\r\n            propertySetFilterTypeAirParticleFilter.ObjectType = \"IfcFilterType\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.AirParticleFilterType\", \"AirParticleFilterType\");\r\n            ifcPSE.PropertyName = \"AirParticleFilterType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FilterAirParticleFilterType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirParticleFilterTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.FrameMaterial\", \"FrameMaterial\");\r\n            ifcPSE.PropertyName = \"FrameMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.MediaMaterial\", \"MediaMaterial\");\r\n            ifcPSE.PropertyName = \"MediaMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MediaMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.SeparationType\", \"SeparationType\");\r\n            ifcPSE.PropertyName = \"SeparationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FilterAirParticleFilterSeparationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeparationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.DustHoldingCapacity\", \"DustHoldingCapacity\");\r\n            ifcPSE.PropertyName = \"DustHoldingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DustHoldingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.FaceSurfaceArea\", \"FaceSurfaceArea\");\r\n            ifcPSE.PropertyName = \"FaceSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.MediaExtendedArea\", \"MediaExtendedArea\");\r\n            ifcPSE.PropertyName = \"MediaExtendedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MediaExtendedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.NominalCountedEfficiency\", \"NominalCountedEfficiency\");\r\n            ifcPSE.PropertyName = \"NominalCountedEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCountedEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.NominalWeightedEfficiency\", \"NominalWeightedEfficiency\");\r\n            ifcPSE.PropertyName = \"NominalWeightedEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWeightedEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.PressureDropCurve\", \"PressureDropCurve\");\r\n            ifcPSE.PropertyName = \"PressureDropCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Pressure;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.CountedEfficiencyCurve\", \"CountedEfficiencyCurve\");\r\n            ifcPSE.PropertyName = \"CountedEfficiencyCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CountedEfficiencyCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.WeightedEfficiencyCurve\", \"WeightedEfficiencyCurve\");\r\n            ifcPSE.PropertyName = \"WeightedEfficiencyCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightedEfficiencyCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FilterTypeAirParticleFilter\"))\r\n         {\r\n            propertySetFilterTypeAirParticleFilter.EntityTypes.Add(IFCEntityType.IfcFilterType);\r\n            propertySetFilterTypeAirParticleFilter.ObjectType = \"IfcFilterType\";\r\n            propertySetFilterTypeAirParticleFilter.PredefinedType = \"AIRPARTICLEFILTER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.AirParticleFilterType\", \"AirParticleFilterType\");\r\n            ifcPSE.PropertyName = \"AirParticleFilterType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FilterAirParticleFilterType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirParticleFilterTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.FrameMaterial\", \"FrameMaterial\");\r\n            ifcPSE.PropertyName = \"FrameMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.MediaMaterial\", \"MediaMaterial\");\r\n            ifcPSE.PropertyName = \"MediaMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MediaMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.SeparationType\", \"SeparationType\");\r\n            ifcPSE.PropertyName = \"SeparationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FilterAirParticleFilterSeparationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeparationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.DustHoldingCapacity\", \"DustHoldingCapacity\");\r\n            ifcPSE.PropertyName = \"DustHoldingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DustHoldingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.FaceSurfaceArea\", \"FaceSurfaceArea\");\r\n            ifcPSE.PropertyName = \"FaceSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.MediaExtendedArea\", \"MediaExtendedArea\");\r\n            ifcPSE.PropertyName = \"MediaExtendedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MediaExtendedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.NominalCountedEfficiency\", \"NominalCountedEfficiency\");\r\n            ifcPSE.PropertyName = \"NominalCountedEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCountedEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.NominalWeightedEfficiency\", \"NominalWeightedEfficiency\");\r\n            ifcPSE.PropertyName = \"NominalWeightedEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWeightedEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.PressureDropCurve\", \"PressureDropCurve\");\r\n            ifcPSE.PropertyName = \"PressureDropCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Pressure;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.CountedEfficiencyCurve\", \"CountedEfficiencyCurve\");\r\n            ifcPSE.PropertyName = \"CountedEfficiencyCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CountedEfficiencyCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.WeightedEfficiencyCurve\", \"WeightedEfficiencyCurve\");\r\n            ifcPSE.PropertyName = \"WeightedEfficiencyCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightedEfficiencyCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FilterTypeAirParticleFilter\"))\r\n         {\r\n            propertySetFilterTypeAirParticleFilter.EntityTypes.Add(IFCEntityType.IfcFilter);\r\n            propertySetFilterTypeAirParticleFilter.ObjectType = \"IfcFilter\";\r\n            propertySetFilterTypeAirParticleFilter.PredefinedType = \"AIRPARTICLEFILTER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.AirParticleFilterType\", \"AirParticleFilterType\");\r\n            ifcPSE.PropertyName = \"AirParticleFilterType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FilterAirParticleFilterType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Particle Filter Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirParticleFilterTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.FrameMaterial\", \"FrameMaterial\");\r\n            ifcPSE.PropertyName = \"FrameMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Frame Material\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.SeparationType\", \"SeparationType\");\r\n            ifcPSE.PropertyName = \"SeparationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FilterAirParticleFilterSeparationType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Separation Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeparationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.DustHoldingCapacity\", \"DustHoldingCapacity\");\r\n            ifcPSE.PropertyName = \"DustHoldingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Dust Holding Capacity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DustHoldingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.FaceSurfaceArea\", \"FaceSurfaceArea\");\r\n            ifcPSE.PropertyName = \"FaceSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Face Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.MediaExtendedArea\", \"MediaExtendedArea\");\r\n            ifcPSE.PropertyName = \"MediaExtendedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Media Extended Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MediaExtendedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.NominalCountedEfficiency\", \"NominalCountedEfficiency\");\r\n            ifcPSE.PropertyName = \"NominalCountedEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Counted Efficiency\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCountedEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.NominalWeightedEfficiency\", \"NominalWeightedEfficiency\");\r\n            ifcPSE.PropertyName = \"NominalWeightedEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Weighted Efficiency\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWeightedEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.PressureDropCurve\", \"PressureDropCurve\");\r\n            ifcPSE.PropertyName = \"PressureDropCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure Drop Curve\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.CountedEfficiencyCurve\", \"CountedEfficiencyCurve\");\r\n            ifcPSE.PropertyName = \"CountedEfficiencyCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Mass;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Counted Efficiency Curve\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CountedEfficiencyCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.WeightedEfficiencyCurve\", \"WeightedEfficiencyCurve\");\r\n            ifcPSE.PropertyName = \"WeightedEfficiencyCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Mass;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Weighted Efficiency Curve\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightedEfficiencyCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FilterTypeAirParticleFilter\"))\r\n         {\r\n            propertySetFilterTypeAirParticleFilter.EntityTypes.Add(IFCEntityType.IfcFilter);\r\n            propertySetFilterTypeAirParticleFilter.EntityTypes.Add(IFCEntityType.IfcFilterType);\r\n            propertySetFilterTypeAirParticleFilter.ObjectType = \"IfcFilter\";\r\n            propertySetFilterTypeAirParticleFilter.PredefinedType = \"AIRPARTICLEFILTER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.AirParticleFilterType\", \"AirParticleFilterType\");\r\n            ifcPSE.PropertyName = \"AirParticleFilterType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FilterAirParticleFilterType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirParticleFilterTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.FrameMaterial\", \"FrameMaterial\");\r\n            ifcPSE.PropertyName = \"FrameMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.SeparationType\", \"SeparationType\");\r\n            ifcPSE.PropertyName = \"SeparationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FilterAirParticleFilterSeparationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeparationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.DustHoldingCapacity\", \"DustHoldingCapacity\");\r\n            ifcPSE.PropertyName = \"DustHoldingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DustHoldingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.FaceSurfaceArea\", \"FaceSurfaceArea\");\r\n            ifcPSE.PropertyName = \"FaceSurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaceSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.MediaExtendedArea\", \"MediaExtendedArea\");\r\n            ifcPSE.PropertyName = \"MediaExtendedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MediaExtendedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.NominalCountedEfficiency\", \"NominalCountedEfficiency\");\r\n            ifcPSE.PropertyName = \"NominalCountedEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCountedEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.NominalWeightedEfficiency\", \"NominalWeightedEfficiency\");\r\n            ifcPSE.PropertyName = \"NominalWeightedEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWeightedEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.PressureDropCurve\", \"PressureDropCurve\");\r\n            ifcPSE.PropertyName = \"PressureDropCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.CountedEfficiencyCurve\", \"CountedEfficiencyCurve\");\r\n            ifcPSE.PropertyName = \"CountedEfficiencyCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Mass;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CountedEfficiencyCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeAirParticleFilter.WeightedEfficiencyCurve\", \"WeightedEfficiencyCurve\");\r\n            ifcPSE.PropertyName = \"WeightedEfficiencyCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Mass;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightedEfficiencyCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeAirParticleFilter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFilterTypeAirParticleFilter);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FilterTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFilterTypeCommon = new PropertySetDescription();\r\n         propertySetFilterTypeCommon.Name = \"Pset_FilterTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FilterTypeCommon\"))\r\n         {\r\n            propertySetFilterTypeCommon.EntityTypes.Add(IFCEntityType.IfcFilterType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.MediaMaterial\", \"MediaMaterial\");\r\n            ifcPSE.PropertyName = \"MediaMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MediaMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.InitialResistance\", \"InitialResistance\");\r\n            ifcPSE.PropertyName = \"InitialResistance\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InitialResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.FinalResistance\", \"FinalResistance\");\r\n            ifcPSE.PropertyName = \"FinalResistance\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinalResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.FlowRateRange\", \"FlowRateRange\");\r\n            ifcPSE.PropertyName = \"FlowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalFilterFaceVelocity\", \"NominalFilterFaceVelocity\");\r\n            ifcPSE.PropertyName = \"NominalFilterFaceVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalFilterFaceVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalMediaSurfaceVelocity\", \"NominalMediaSurfaceVelocity\");\r\n            ifcPSE.PropertyName = \"NominalMediaSurfaceVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalMediaSurfaceVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalPressureDrop\", \"NominalPressureDrop\");\r\n            ifcPSE.PropertyName = \"NominalPressureDrop\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalFlowrate\", \"NominalFlowrate\");\r\n            ifcPSE.PropertyName = \"NominalFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalParticleGeometricMeanDiameter\", \"NominalParticleGeometricMeanDiameter\");\r\n            ifcPSE.PropertyName = \"NominalParticleGeometricMeanDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalParticleGeometricMeanDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalParticleGeometricStandardDeviation\", \"NominalParticleGeometricStandardDeviation\");\r\n            ifcPSE.PropertyName = \"NominalParticleGeometricStandardDeviation\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalParticleGeometricStandardDeviationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FilterTypeCommon\"))\r\n         {\r\n            propertySetFilterTypeCommon.EntityTypes.Add(IFCEntityType.IfcFilterType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.MediaMaterial\", \"MediaMaterial\");\r\n            ifcPSE.PropertyName = \"MediaMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MediaMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.InitialResistance\", \"InitialResistance\");\r\n            ifcPSE.PropertyName = \"InitialResistance\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InitialResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.FinalResistance\", \"FinalResistance\");\r\n            ifcPSE.PropertyName = \"FinalResistance\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinalResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.FlowRateRange\", \"FlowRateRange\");\r\n            ifcPSE.PropertyName = \"FlowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalFilterFaceVelocity\", \"NominalFilterFaceVelocity\");\r\n            ifcPSE.PropertyName = \"NominalFilterFaceVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalFilterFaceVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalMediaSurfaceVelocity\", \"NominalMediaSurfaceVelocity\");\r\n            ifcPSE.PropertyName = \"NominalMediaSurfaceVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalMediaSurfaceVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalPressureDrop\", \"NominalPressureDrop\");\r\n            ifcPSE.PropertyName = \"NominalPressureDrop\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalFlowrate\", \"NominalFlowrate\");\r\n            ifcPSE.PropertyName = \"NominalFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalParticleGeometricMeanDiameter\", \"NominalParticleGeometricMeanDiameter\");\r\n            ifcPSE.PropertyName = \"NominalParticleGeometricMeanDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalParticleGeometricMeanDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalParticleGeometricStandardDeviation\", \"NominalParticleGeometricStandardDeviation\");\r\n            ifcPSE.PropertyName = \"NominalParticleGeometricStandardDeviation\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalParticleGeometricStandardDeviationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FilterTypeCommon\"))\r\n         {\r\n            propertySetFilterTypeCommon.EntityTypes.Add(IFCEntityType.IfcFilter);\r\n            propertySetFilterTypeCommon.ObjectType = \"IfcFilter\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.InitialResistance\", \"InitialResistance\");\r\n            ifcPSE.PropertyName = \"InitialResistance\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Initial Resistance\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InitialResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.FinalResistance\", \"FinalResistance\");\r\n            ifcPSE.PropertyName = \"FinalResistance\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Final Resistance\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinalResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Operation Temperature Range\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.FlowRateRange\", \"FlowRateRange\");\r\n            ifcPSE.PropertyName = \"FlowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flow Rate Range\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalFilterFaceVelocity\", \"NominalFilterFaceVelocity\");\r\n            ifcPSE.PropertyName = \"NominalFilterFaceVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Filter Face Velocity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalFilterFaceVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalMediaSurfaceVelocity\", \"NominalMediaSurfaceVelocity\");\r\n            ifcPSE.PropertyName = \"NominalMediaSurfaceVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Media Surface Velocity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalMediaSurfaceVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalPressureDrop\", \"NominalPressureDrop\");\r\n            ifcPSE.PropertyName = \"NominalPressureDrop\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Pressure Drop\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalFlowrate\", \"NominalFlowrate\");\r\n            ifcPSE.PropertyName = \"NominalFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Flowrate\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalParticleGeometricMeanDiameter\", \"NominalParticleGeometricMeanDiameter\");\r\n            ifcPSE.PropertyName = \"NominalParticleGeometricMeanDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Particle Geometric Mean Diameter\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalParticleGeometricMeanDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalParticleGeometricStandardDeviation\", \"NominalParticleGeometricStandardDeviation\");\r\n            ifcPSE.PropertyName = \"NominalParticleGeometricStandardDeviation\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Particle Geometric Standard Deviation\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalParticleGeometricStandardDeviationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FilterTypeCommon\"))\r\n         {\r\n            propertySetFilterTypeCommon.EntityTypes.Add(IFCEntityType.IfcFilter);\r\n            propertySetFilterTypeCommon.EntityTypes.Add(IFCEntityType.IfcFilterType);\r\n            propertySetFilterTypeCommon.ObjectType = \"IfcFilter\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.InitialResistance\", \"InitialResistance\");\r\n            ifcPSE.PropertyName = \"InitialResistance\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InitialResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.FinalResistance\", \"FinalResistance\");\r\n            ifcPSE.PropertyName = \"FinalResistance\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinalResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.OperationTemperatureRange\", \"OperationTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.FlowRateRange\", \"FlowRateRange\");\r\n            ifcPSE.PropertyName = \"FlowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalFilterFaceVelocity\", \"NominalFilterFaceVelocity\");\r\n            ifcPSE.PropertyName = \"NominalFilterFaceVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalFilterFaceVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalMediaSurfaceVelocity\", \"NominalMediaSurfaceVelocity\");\r\n            ifcPSE.PropertyName = \"NominalMediaSurfaceVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalMediaSurfaceVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalPressureDrop\", \"NominalPressureDrop\");\r\n            ifcPSE.PropertyName = \"NominalPressureDrop\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalFlowrate\", \"NominalFlowrate\");\r\n            ifcPSE.PropertyName = \"NominalFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalParticleGeometricMeanDiameter\", \"NominalParticleGeometricMeanDiameter\");\r\n            ifcPSE.PropertyName = \"NominalParticleGeometricMeanDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalParticleGeometricMeanDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCommon.NominalParticleGeometricStandardDeviation\", \"NominalParticleGeometricStandardDeviation\");\r\n            ifcPSE.PropertyName = \"NominalParticleGeometricStandardDeviation\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalParticleGeometricStandardDeviationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFilterTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FilterTypeCompressedAirFilter(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFilterTypeCompressedAirFilter = new PropertySetDescription();\r\n         propertySetFilterTypeCompressedAirFilter.Name = \"Pset_FilterTypeCompressedAirFilter\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FilterTypeCompressedAirFilter\"))\r\n         {\r\n            propertySetFilterTypeCompressedAirFilter.EntityTypes.Add(IFCEntityType.IfcFilter);\r\n            propertySetFilterTypeCompressedAirFilter.ObjectType = \"IfcFilter\";\r\n            propertySetFilterTypeCompressedAirFilter.PredefinedType = \"COMPRESSEDAIRFILTER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCompressedAirFilter.CompressedAirFilterType\", \"CompressedAirFilterType\");\r\n            ifcPSE.PropertyName = \"CompressedAirFilterType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CompressedAirFilterType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Compressed Air Filter Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressedAirFilterTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCompressedAirFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCompressedAirFilter.OperationPressureMax\", \"OperationPressureMax\");\r\n            ifcPSE.PropertyName = \"OperationPressureMax\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Operation Pressure Max\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationPressureMaxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCompressedAirFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCompressedAirFilter.ParticleAbsorptionCurve\", \"ParticleAbsorptionCurve\");\r\n            ifcPSE.PropertyName = \"ParticleAbsorptionCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Particle Absorption Curve\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ParticleAbsorptionCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCompressedAirFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCompressedAirFilter.AutomaticCondensateDischarge\", \"AutomaticCondensateDischarge\");\r\n            ifcPSE.PropertyName = \"AutomaticCondensateDischarge\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Automatic Condensate Discharge\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AutomaticCondensateDischargeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCompressedAirFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCompressedAirFilter.CloggingIndicator\", \"CloggingIndicator\");\r\n            ifcPSE.PropertyName = \"CloggingIndicator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Clogging Indicator\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CloggingIndicatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCompressedAirFilter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FilterTypeCompressedAirFilter\"))\r\n         {\r\n            propertySetFilterTypeCompressedAirFilter.EntityTypes.Add(IFCEntityType.IfcFilter);\r\n            propertySetFilterTypeCompressedAirFilter.EntityTypes.Add(IFCEntityType.IfcFilterType);\r\n            propertySetFilterTypeCompressedAirFilter.ObjectType = \"IfcFilter\";\r\n            propertySetFilterTypeCompressedAirFilter.PredefinedType = \"COMPRESSEDAIRFILTER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCompressedAirFilter.CompressedAirFilterType\", \"CompressedAirFilterType\");\r\n            ifcPSE.PropertyName = \"CompressedAirFilterType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CompressedAirFilterType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressedAirFilterTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCompressedAirFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCompressedAirFilter.OperationPressureMax\", \"OperationPressureMax\");\r\n            ifcPSE.PropertyName = \"OperationPressureMax\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationPressureMaxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCompressedAirFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCompressedAirFilter.ParticleAbsorptionCurve\", \"ParticleAbsorptionCurve\");\r\n            ifcPSE.PropertyName = \"ParticleAbsorptionCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ParticleAbsorptionCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCompressedAirFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCompressedAirFilter.AutomaticCondensateDischarge\", \"AutomaticCondensateDischarge\");\r\n            ifcPSE.PropertyName = \"AutomaticCondensateDischarge\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AutomaticCondensateDischargeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCompressedAirFilter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeCompressedAirFilter.CloggingIndicator\", \"CloggingIndicator\");\r\n            ifcPSE.PropertyName = \"CloggingIndicator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CloggingIndicatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeCompressedAirFilter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFilterTypeCompressedAirFilter);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FilterTypeWaterFilter(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFilterTypeWaterFilter = new PropertySetDescription();\r\n         propertySetFilterTypeWaterFilter.Name = \"Pset_FilterTypeWaterFilter\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FilterTypeWaterFilter\"))\r\n         {\r\n            propertySetFilterTypeWaterFilter.EntityTypes.Add(IFCEntityType.IfcFilter);\r\n            propertySetFilterTypeWaterFilter.ObjectType = \"IfcFilter\";\r\n            propertySetFilterTypeWaterFilter.PredefinedType = \"WATERFILTER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeWaterFilter.WaterFilterType\", \"WaterFilterType\");\r\n            ifcPSE.PropertyName = \"WaterFilterType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FilterWaterFilterType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Filter Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterFilterTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeWaterFilter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FilterTypeWaterFilter\"))\r\n         {\r\n            propertySetFilterTypeWaterFilter.EntityTypes.Add(IFCEntityType.IfcFilter);\r\n            propertySetFilterTypeWaterFilter.EntityTypes.Add(IFCEntityType.IfcFilterType);\r\n            propertySetFilterTypeWaterFilter.ObjectType = \"IfcFilter\";\r\n            propertySetFilterTypeWaterFilter.PredefinedType = \"WATERFILTER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FilterTypeWaterFilter.WaterFilterType\", \"WaterFilterType\");\r\n            ifcPSE.PropertyName = \"WaterFilterType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FilterWaterFilterType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterFilterTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFilterTypeWaterFilter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFilterTypeWaterFilter);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FireRatingProperties(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFireRatingProperties = new PropertySetDescription();\r\n         propertySetFireRatingProperties.Name = \"Pset_FireRatingProperties\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireRatingProperties\"))\r\n         {\r\n            propertySetFireRatingProperties.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetFireRatingProperties.EntityTypes.Add(IFCEntityType.IfcSpatialStructureElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireRatingProperties.FireResistanceRating\", \"FireResistanceRating\");\r\n            ifcPSE.PropertyName = \"FireResistanceRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireResistanceRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireRatingProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireRatingProperties.IsCombustible\", \"IsCombustible\");\r\n            ifcPSE.PropertyName = \"IsCombustible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsCombustibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireRatingProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireRatingProperties.SurfaceSpreadOfFlame\", \"SurfaceSpreadOfFlame\");\r\n            ifcPSE.PropertyName = \"SurfaceSpreadOfFlame\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceSpreadOfFlameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireRatingProperties.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireRatingProperties\"))\r\n         {\r\n            propertySetFireRatingProperties.EntityTypes.Add(IFCEntityType.IfcSpatialStructureElement);\r\n            propertySetFireRatingProperties.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireRatingProperties.FireResistanceRating\", \"FireResistanceRating\");\r\n            ifcPSE.PropertyName = \"FireResistanceRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireResistanceRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireRatingProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireRatingProperties.IsCombustible\", \"IsCombustible\");\r\n            ifcPSE.PropertyName = \"IsCombustible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsCombustibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireRatingProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireRatingProperties.SurfaceSpreadOfFlame\", \"SurfaceSpreadOfFlame\");\r\n            ifcPSE.PropertyName = \"SurfaceSpreadOfFlame\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceSpreadOfFlameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireRatingProperties.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFireRatingProperties);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FireSuppressionTerminalTypeBreechingInlet(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFireSuppressionTerminalTypeBreechingInlet = new PropertySetDescription();\r\n         propertySetFireSuppressionTerminalTypeBreechingInlet.Name = \"Pset_FireSuppressionTerminalTypeBreechingInlet\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireSuppressionTerminalTypeBreechingInlet\"))\r\n         {\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminalType);\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.ObjectType = \"BreechingInlet\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.BreechingInletType\", \"BreechingInletType\");\r\n            ifcPSE.PropertyName = \"BreechingInletType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BreechingInletType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BreechingInletTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.InletDiameter\", \"InletDiameter\");\r\n            ifcPSE.PropertyName = \"InletDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.OutletDiameter\", \"OutletDiameter\");\r\n            ifcPSE.PropertyName = \"OutletDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.CouplingType\", \"CouplingType\");\r\n            ifcPSE.PropertyName = \"CouplingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BreechingInletCouplingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CouplingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.HasCaps\", \"HasCaps\");\r\n            ifcPSE.PropertyName = \"HasCaps\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasCapsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireSuppressionTerminalTypeBreechingInlet\"))\r\n         {\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminalType);\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.ObjectType = \"IfcFireSuppressionTerminalType\";\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.PredefinedType = \"BREECHINGINLET\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.BreechingInletType\", \"BreechingInletType\");\r\n            ifcPSE.PropertyName = \"BreechingInletType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BreechingInletType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BreechingInletTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.InletDiameter\", \"InletDiameter\");\r\n            ifcPSE.PropertyName = \"InletDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.OutletDiameter\", \"OutletDiameter\");\r\n            ifcPSE.PropertyName = \"OutletDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.CouplingType\", \"CouplingType\");\r\n            ifcPSE.PropertyName = \"CouplingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BreechingInletCouplingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CouplingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.HasCaps\", \"HasCaps\");\r\n            ifcPSE.PropertyName = \"HasCaps\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasCapsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireSuppressionTerminalTypeBreechingInlet\"))\r\n         {\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminal);\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.ObjectType = \"IfcFireSuppressionTerminal\";\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.PredefinedType = \"BREECHINGINLET\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.BreechingInletType\", \"BreechingInletType\");\r\n            ifcPSE.PropertyName = \"BreechingInletType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_BreechingInletType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Breeching Inlet Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"送水口タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BreechingInletTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.InletDiameter\", \"InletDiameter\");\r\n            ifcPSE.PropertyName = \"InletDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Inlet Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"入口口径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.OutletDiameter\", \"OutletDiameter\");\r\n            ifcPSE.PropertyName = \"OutletDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outlet Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"出口口径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.CouplingType\", \"CouplingType\");\r\n            ifcPSE.PropertyName = \"CouplingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_BreechingInletCouplingType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Coupling Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"カップリングタイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CouplingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.HasCaps\", \"HasCaps\");\r\n            ifcPSE.PropertyName = \"HasCaps\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Caps\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"保護キャップ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasCapsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireSuppressionTerminalTypeBreechingInlet\"))\r\n         {\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminal);\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminalType);\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.ObjectType = \"IfcFireSuppressionTerminal\";\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.PredefinedType = \"BREECHINGINLET\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.BreechingInletType\", \"BreechingInletType\");\r\n            ifcPSE.PropertyName = \"BreechingInletType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_BreechingInletType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BreechingInletTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.InletDiameter\", \"InletDiameter\");\r\n            ifcPSE.PropertyName = \"InletDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.OutletDiameter\", \"OutletDiameter\");\r\n            ifcPSE.PropertyName = \"OutletDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.CouplingType\", \"CouplingType\");\r\n            ifcPSE.PropertyName = \"CouplingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_BreechingInletCouplingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CouplingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeBreechingInlet.HasCaps\", \"HasCaps\");\r\n            ifcPSE.PropertyName = \"HasCaps\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasCapsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeBreechingInlet.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFireSuppressionTerminalTypeBreechingInlet);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FireSuppressionTerminalTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFireSuppressionTerminalTypeCommon = new PropertySetDescription();\r\n         propertySetFireSuppressionTerminalTypeCommon.Name = \"Pset_FireSuppressionTerminalTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireSuppressionTerminalTypeCommon\"))\r\n         {\r\n            propertySetFireSuppressionTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminal);\r\n            propertySetFireSuppressionTerminalTypeCommon.ObjectType = \"IfcFireSuppressionTerminal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireSuppressionTerminalTypeCommon\"))\r\n         {\r\n            propertySetFireSuppressionTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminal);\r\n            propertySetFireSuppressionTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminalType);\r\n            propertySetFireSuppressionTerminalTypeCommon.ObjectType = \"IfcFireSuppressionTerminal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFireSuppressionTerminalTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FireSuppressionTerminalTypeFireHydrant(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFireSuppressionTerminalTypeFireHydrant = new PropertySetDescription();\r\n         propertySetFireSuppressionTerminalTypeFireHydrant.Name = \"Pset_FireSuppressionTerminalTypeFireHydrant\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireSuppressionTerminalTypeFireHydrant\"))\r\n         {\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminalType);\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.ObjectType = \"FireHydrant\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.FireHydrantType\", \"FireHydrantType\");\r\n            ifcPSE.PropertyName = \"FireHydrantType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FireHydrantType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireHydrantTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.PumperConnectionSize\", \"PumperConnectionSize\");\r\n            ifcPSE.PropertyName = \"PumperConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PumperConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.NumberOfHoseConnections\", \"NumberOfHoseConnections\");\r\n            ifcPSE.PropertyName = \"NumberOfHoseConnections\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfHoseConnectionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.HoseConnectionSize\", \"HoseConnectionSize\");\r\n            ifcPSE.PropertyName = \"HoseConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.DischargeFlowRate\", \"DischargeFlowRate\");\r\n            ifcPSE.PropertyName = \"DischargeFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.FlowClass\", \"FlowClass\");\r\n            ifcPSE.PropertyName = \"FlowClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.WaterIsPotable\", \"WaterIsPotable\");\r\n            ifcPSE.PropertyName = \"WaterIsPotable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterIsPotableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.PressureRating\", \"PressureRating\");\r\n            ifcPSE.PropertyName = \"PressureRating\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.BodyColor\", \"BodyColor\");\r\n            ifcPSE.PropertyName = \"BodyColor\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.CapColor\", \"CapColor\");\r\n            ifcPSE.PropertyName = \"CapColor\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireSuppressionTerminalTypeFireHydrant\"))\r\n         {\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminalType);\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.ObjectType = \"IfcFireSuppressionTerminalType\";\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.PredefinedType = \"FIREHYDRANT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.FireHydrantType\", \"FireHydrantType\");\r\n            ifcPSE.PropertyName = \"FireHydrantType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FireHydrantType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireHydrantTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.PumperConnectionSize\", \"PumperConnectionSize\");\r\n            ifcPSE.PropertyName = \"PumperConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PumperConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.NumberOfHoseConnections\", \"NumberOfHoseConnections\");\r\n            ifcPSE.PropertyName = \"NumberOfHoseConnections\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfHoseConnectionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.HoseConnectionSize\", \"HoseConnectionSize\");\r\n            ifcPSE.PropertyName = \"HoseConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.DischargeFlowRate\", \"DischargeFlowRate\");\r\n            ifcPSE.PropertyName = \"DischargeFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.FlowClass\", \"FlowClass\");\r\n            ifcPSE.PropertyName = \"FlowClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.WaterIsPotable\", \"WaterIsPotable\");\r\n            ifcPSE.PropertyName = \"WaterIsPotable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterIsPotableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.PressureRating\", \"PressureRating\");\r\n            ifcPSE.PropertyName = \"PressureRating\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.BodyColor\", \"BodyColor\");\r\n            ifcPSE.PropertyName = \"BodyColor\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.CapColor\", \"CapColor\");\r\n            ifcPSE.PropertyName = \"CapColor\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireSuppressionTerminalTypeFireHydrant\"))\r\n         {\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminal);\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.ObjectType = \"IfcFireSuppressionTerminal\";\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.PredefinedType = \"FIREHYDRANT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.FireHydrantType\", \"FireHydrantType\");\r\n            ifcPSE.PropertyName = \"FireHydrantType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FireHydrantType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Hydrant Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"消火栓のタイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireHydrantTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.PumperConnectionSize\", \"PumperConnectionSize\");\r\n            ifcPSE.PropertyName = \"PumperConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pumper Connection Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ポンプ接続サイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PumperConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.NumberOfHoseConnections\", \"NumberOfHoseConnections\");\r\n            ifcPSE.PropertyName = \"NumberOfHoseConnections\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Hose Connections\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ホースの接続の数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfHoseConnectionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.HoseConnectionSize\", \"HoseConnectionSize\");\r\n            ifcPSE.PropertyName = \"HoseConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Hose Connection Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ホース接続サイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.DischargeFlowRate\", \"DischargeFlowRate\");\r\n            ifcPSE.PropertyName = \"DischargeFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Discharge Flow Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"放水流量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.FlowClass\", \"FlowClass\");\r\n            ifcPSE.PropertyName = \"FlowClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flow Class\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流量クラス\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.WaterIsPotable\", \"WaterIsPotable\");\r\n            ifcPSE.PropertyName = \"WaterIsPotable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Is Potable\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"飲用水かどうか\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterIsPotableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.PressureRating\", \"PressureRating\");\r\n            ifcPSE.PropertyName = \"PressureRating\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.BodyColor\", \"BodyColor\");\r\n            ifcPSE.PropertyName = \"BodyColor\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Body Color\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"本体色\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.CapColor\", \"CapColor\");\r\n            ifcPSE.PropertyName = \"CapColor\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cap Color\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"キャップ色\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireSuppressionTerminalTypeFireHydrant\"))\r\n         {\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminal);\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminalType);\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.ObjectType = \"IfcFireSuppressionTerminal\";\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.PredefinedType = \"FIREHYDRANT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.FireHydrantType\", \"FireHydrantType\");\r\n            ifcPSE.PropertyName = \"FireHydrantType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FireHydrantType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireHydrantTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.PumperConnectionSize\", \"PumperConnectionSize\");\r\n            ifcPSE.PropertyName = \"PumperConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PumperConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.NumberOfHoseConnections\", \"NumberOfHoseConnections\");\r\n            ifcPSE.PropertyName = \"NumberOfHoseConnections\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfHoseConnectionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.HoseConnectionSize\", \"HoseConnectionSize\");\r\n            ifcPSE.PropertyName = \"HoseConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.DischargeFlowRate\", \"DischargeFlowRate\");\r\n            ifcPSE.PropertyName = \"DischargeFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.FlowClass\", \"FlowClass\");\r\n            ifcPSE.PropertyName = \"FlowClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.WaterIsPotable\", \"WaterIsPotable\");\r\n            ifcPSE.PropertyName = \"WaterIsPotable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterIsPotableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.PressureRating\", \"PressureRating\");\r\n            ifcPSE.PropertyName = \"PressureRating\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.BodyColour\", \"BodyColour\");\r\n            ifcPSE.PropertyName = \"BodyColour\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeFireHydrant.CapColour\", \"CapColour\");\r\n            ifcPSE.PropertyName = \"CapColour\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeFireHydrant.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFireSuppressionTerminalTypeFireHydrant);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FireSuppressionTerminalTypeHoseReel(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFireSuppressionTerminalTypeHoseReel = new PropertySetDescription();\r\n         propertySetFireSuppressionTerminalTypeHoseReel.Name = \"Pset_FireSuppressionTerminalTypeHoseReel\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireSuppressionTerminalTypeHoseReel\"))\r\n         {\r\n            propertySetFireSuppressionTerminalTypeHoseReel.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminalType);\r\n            propertySetFireSuppressionTerminalTypeHoseReel.ObjectType = \"HoseReel\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseReelType\", \"HoseReelType\");\r\n            ifcPSE.PropertyName = \"HoseReelType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_HoseReelType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseReelTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseReelMountingType\", \"HoseReelMountingType\");\r\n            ifcPSE.PropertyName = \"HoseReelMountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_HoseReelMountingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseReelMountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseDiameter\", \"HoseDiameter\");\r\n            ifcPSE.PropertyName = \"HoseDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseLength\", \"HoseLength\");\r\n            ifcPSE.PropertyName = \"HoseLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseNozzleType\", \"HoseNozzleType\");\r\n            ifcPSE.PropertyName = \"HoseNozzleType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_HoseNozzleType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseNozzleTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.ClassOfService\", \"ClassOfService\");\r\n            ifcPSE.PropertyName = \"ClassOfService\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClassOfServiceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.ClassificationAuthority\", \"ClassificationAuthority\");\r\n            ifcPSE.PropertyName = \"ClassificationAuthority\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClassificationAuthorityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireSuppressionTerminalTypeHoseReel\"))\r\n         {\r\n            propertySetFireSuppressionTerminalTypeHoseReel.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminalType);\r\n            propertySetFireSuppressionTerminalTypeHoseReel.ObjectType = \"IfcFireSuppressionTerminalType\";\r\n            propertySetFireSuppressionTerminalTypeHoseReel.PredefinedType = \"HOSEREEL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseReelType\", \"HoseReelType\");\r\n            ifcPSE.PropertyName = \"HoseReelType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_HoseReelType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseReelTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseReelMountingType\", \"HoseReelMountingType\");\r\n            ifcPSE.PropertyName = \"HoseReelMountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_HoseReelMountingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseReelMountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseDiameter\", \"HoseDiameter\");\r\n            ifcPSE.PropertyName = \"HoseDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseLength\", \"HoseLength\");\r\n            ifcPSE.PropertyName = \"HoseLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseNozzleType\", \"HoseNozzleType\");\r\n            ifcPSE.PropertyName = \"HoseNozzleType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_HoseNozzleType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseNozzleTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.ClassOfService\", \"ClassOfService\");\r\n            ifcPSE.PropertyName = \"ClassOfService\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClassOfServiceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.ClassificationAuthority\", \"ClassificationAuthority\");\r\n            ifcPSE.PropertyName = \"ClassificationAuthority\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClassificationAuthorityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireSuppressionTerminalTypeHoseReel\"))\r\n         {\r\n            propertySetFireSuppressionTerminalTypeHoseReel.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminal);\r\n            propertySetFireSuppressionTerminalTypeHoseReel.ObjectType = \"IfcFireSuppressionTerminal\";\r\n            propertySetFireSuppressionTerminalTypeHoseReel.PredefinedType = \"HOSEREEL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseReelType\", \"HoseReelType\");\r\n            ifcPSE.PropertyName = \"HoseReelType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_HoseReelType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Hose Reel Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ホースリールタイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseReelTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseReelMountingType\", \"HoseReelMountingType\");\r\n            ifcPSE.PropertyName = \"HoseReelMountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_HoseReelMountingType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Hose Reel Mounting Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ホースリール装着タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseReelMountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Inlet Connection Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"インレット接続サイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseDiameter\", \"HoseDiameter\");\r\n            ifcPSE.PropertyName = \"HoseDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Hose Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ホース径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseLength\", \"HoseLength\");\r\n            ifcPSE.PropertyName = \"HoseLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Hose Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ホースの長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseNozzleType\", \"HoseNozzleType\");\r\n            ifcPSE.PropertyName = \"HoseNozzleType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_HoseNozzleType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Hose Nozzle Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ホースノズルタイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseNozzleTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.ClassOfService\", \"ClassOfService\");\r\n            ifcPSE.PropertyName = \"ClassOfService\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Class Of Service\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"サービスクラス\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClassOfServiceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.ClassificationAuthority\", \"ClassificationAuthority\");\r\n            ifcPSE.PropertyName = \"ClassificationAuthority\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Classification Authority\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"分類認証機関\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClassificationAuthorityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireSuppressionTerminalTypeHoseReel\"))\r\n         {\r\n            propertySetFireSuppressionTerminalTypeHoseReel.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminal);\r\n            propertySetFireSuppressionTerminalTypeHoseReel.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminalType);\r\n            propertySetFireSuppressionTerminalTypeHoseReel.ObjectType = \"IfcFireSuppressionTerminal\";\r\n            propertySetFireSuppressionTerminalTypeHoseReel.PredefinedType = \"HOSEREEL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseReelType\", \"HoseReelType\");\r\n            ifcPSE.PropertyName = \"HoseReelType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_HoseReelType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseReelTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseReelMountingType\", \"HoseReelMountingType\");\r\n            ifcPSE.PropertyName = \"HoseReelMountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_HoseReelMountingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseReelMountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseDiameter\", \"HoseDiameter\");\r\n            ifcPSE.PropertyName = \"HoseDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseLength\", \"HoseLength\");\r\n            ifcPSE.PropertyName = \"HoseLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.HoseNozzleType\", \"HoseNozzleType\");\r\n            ifcPSE.PropertyName = \"HoseNozzleType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_HoseNozzleType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoseNozzleTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.ClassOfService\", \"ClassOfService\");\r\n            ifcPSE.PropertyName = \"ClassOfService\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClassOfServiceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeHoseReel.ClassificationAuthority\", \"ClassificationAuthority\");\r\n            ifcPSE.PropertyName = \"ClassificationAuthority\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClassificationAuthorityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeHoseReel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFireSuppressionTerminalTypeHoseReel);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FireSuppressionTerminalTypeSprinkler(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFireSuppressionTerminalTypeSprinkler = new PropertySetDescription();\r\n         propertySetFireSuppressionTerminalTypeSprinkler.Name = \"Pset_FireSuppressionTerminalTypeSprinkler\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireSuppressionTerminalTypeSprinkler\"))\r\n         {\r\n            propertySetFireSuppressionTerminalTypeSprinkler.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminalType);\r\n            propertySetFireSuppressionTerminalTypeSprinkler.ObjectType = \"Sprinkler\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.SprinklerType\", \"SprinklerType\");\r\n            ifcPSE.PropertyName = \"SprinklerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_SprinklerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.Activation\", \"Activation\");\r\n            ifcPSE.PropertyName = \"Activation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_SprinklerActivation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActivationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.Response\", \"Response\");\r\n            ifcPSE.PropertyName = \"Response\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_SprinklerResponse);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ResponseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.ActivationTemperature\", \"ActivationTemperature\");\r\n            ifcPSE.PropertyName = \"ActivationTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActivationTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.CoverageArea\", \"CoverageArea\");\r\n            ifcPSE.PropertyName = \"CoverageArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverageAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.HasDeflector\", \"HasDeflector\");\r\n            ifcPSE.PropertyName = \"HasDeflector\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasDeflectorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.BulbLiquidColor\", \"BulbLiquidColor\");\r\n            ifcPSE.PropertyName = \"BulbLiquidColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_SprinklerBulbLiquidColor);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BulbLiquidColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.DischargeFlowRate\", \"DischargeFlowRate\");\r\n            ifcPSE.PropertyName = \"DischargeFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.ResidualFlowingPressure\", \"ResidualFlowingPressure\");\r\n            ifcPSE.PropertyName = \"ResidualFlowingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ResidualFlowingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.DischargeCoefficient\", \"DischargeCoefficient\");\r\n            ifcPSE.PropertyName = \"DischargeCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.MaximumWorkingPressure\", \"MaximumWorkingPressure\");\r\n            ifcPSE.PropertyName = \"MaximumWorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumWorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.FrameMaterial\", \"FrameMaterial\");\r\n            ifcPSE.PropertyName = \"FrameMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.DeflectorMaterial\", \"DeflectorMaterial\");\r\n            ifcPSE.PropertyName = \"DeflectorMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DeflectorMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireSuppressionTerminalTypeSprinkler\"))\r\n         {\r\n            propertySetFireSuppressionTerminalTypeSprinkler.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminalType);\r\n            propertySetFireSuppressionTerminalTypeSprinkler.ObjectType = \"IfcFireSuppressionTerminalType\";\r\n            propertySetFireSuppressionTerminalTypeSprinkler.PredefinedType = \"SPRINKLER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.SprinklerType\", \"SprinklerType\");\r\n            ifcPSE.PropertyName = \"SprinklerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_SprinklerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.Activation\", \"Activation\");\r\n            ifcPSE.PropertyName = \"Activation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_SprinklerActivation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActivationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.Response\", \"Response\");\r\n            ifcPSE.PropertyName = \"Response\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_SprinklerResponse);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ResponseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.ActivationTemperature\", \"ActivationTemperature\");\r\n            ifcPSE.PropertyName = \"ActivationTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActivationTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.CoverageArea\", \"CoverageArea\");\r\n            ifcPSE.PropertyName = \"CoverageArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverageAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.HasDeflector\", \"HasDeflector\");\r\n            ifcPSE.PropertyName = \"HasDeflector\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasDeflectorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.BulbLiquidColor\", \"BulbLiquidColor\");\r\n            ifcPSE.PropertyName = \"BulbLiquidColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_SprinklerBulbLiquidColor);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BulbLiquidColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.DischargeFlowRate\", \"DischargeFlowRate\");\r\n            ifcPSE.PropertyName = \"DischargeFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.ResidualFlowingPressure\", \"ResidualFlowingPressure\");\r\n            ifcPSE.PropertyName = \"ResidualFlowingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ResidualFlowingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.DischargeCoefficient\", \"DischargeCoefficient\");\r\n            ifcPSE.PropertyName = \"DischargeCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.MaximumWorkingPressure\", \"MaximumWorkingPressure\");\r\n            ifcPSE.PropertyName = \"MaximumWorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumWorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.FrameMaterial\", \"FrameMaterial\");\r\n            ifcPSE.PropertyName = \"FrameMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.DeflectorMaterial\", \"DeflectorMaterial\");\r\n            ifcPSE.PropertyName = \"DeflectorMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DeflectorMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireSuppressionTerminalTypeSprinkler\"))\r\n         {\r\n            propertySetFireSuppressionTerminalTypeSprinkler.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminal);\r\n            propertySetFireSuppressionTerminalTypeSprinkler.ObjectType = \"IfcFireSuppressionTerminal\";\r\n            propertySetFireSuppressionTerminalTypeSprinkler.PredefinedType = \"SPRINKLER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.SprinklerType\", \"SprinklerType\");\r\n            ifcPSE.PropertyName = \"SprinklerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SprinklerType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sprinkler Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"スプリンクラータイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.Activation\", \"Activation\");\r\n            ifcPSE.PropertyName = \"Activation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SprinklerActivation);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Activation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"作動\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActivationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.Response\", \"Response\");\r\n            ifcPSE.PropertyName = \"Response\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SprinklerResponse);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Response\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"応答\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ResponseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.ActivationTemperature\", \"ActivationTemperature\");\r\n            ifcPSE.PropertyName = \"ActivationTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Activation Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"作動温度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActivationTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.CoverageArea\", \"CoverageArea\");\r\n            ifcPSE.PropertyName = \"CoverageArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Coverage Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"カバー面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverageAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.HasDeflector\", \"HasDeflector\");\r\n            ifcPSE.PropertyName = \"HasDeflector\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Deflector\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ディフレクターの有無\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasDeflectorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.BulbLiquidColor\", \"BulbLiquidColor\");\r\n            ifcPSE.PropertyName = \"BulbLiquidColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SprinklerBulbLiquidColor);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Bulb Liquid Color\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"バルブ液体色\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BulbLiquidColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.DischargeFlowRate\", \"DischargeFlowRate\");\r\n            ifcPSE.PropertyName = \"DischargeFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Discharge Flow Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"吐出流量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.ResidualFlowingPressure\", \"ResidualFlowingPressure\");\r\n            ifcPSE.PropertyName = \"ResidualFlowingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Residual Flowing Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"残留流動圧力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ResidualFlowingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.DischargeCoefficient\", \"DischargeCoefficient\");\r\n            ifcPSE.PropertyName = \"DischargeCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Discharge Coefficient\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流量係数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.MaximumWorkingPressure\", \"MaximumWorkingPressure\");\r\n            ifcPSE.PropertyName = \"MaximumWorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Working Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最大作動圧力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumWorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Connection Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"接続サイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FireSuppressionTerminalTypeSprinkler\"))\r\n         {\r\n            propertySetFireSuppressionTerminalTypeSprinkler.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminal);\r\n            propertySetFireSuppressionTerminalTypeSprinkler.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminalType);\r\n            propertySetFireSuppressionTerminalTypeSprinkler.ObjectType = \"IfcFireSuppressionTerminal\";\r\n            propertySetFireSuppressionTerminalTypeSprinkler.PredefinedType = \"SPRINKLER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.SprinklerType\", \"SprinklerType\");\r\n            ifcPSE.PropertyName = \"SprinklerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SprinklerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.Activation\", \"Activation\");\r\n            ifcPSE.PropertyName = \"Activation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SprinklerActivation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActivationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.Response\", \"Response\");\r\n            ifcPSE.PropertyName = \"Response\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SprinklerResponse);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ResponseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.ActivationTemperature\", \"ActivationTemperature\");\r\n            ifcPSE.PropertyName = \"ActivationTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActivationTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.CoverageArea\", \"CoverageArea\");\r\n            ifcPSE.PropertyName = \"CoverageArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverageAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.HasDeflector\", \"HasDeflector\");\r\n            ifcPSE.PropertyName = \"HasDeflector\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasDeflectorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.BulbLiquidColour\", \"BulbLiquidColour\");\r\n            ifcPSE.PropertyName = \"BulbLiquidColour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SprinklerBulbLiquidColour);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BulbLiquidColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.DischargeFlowRate\", \"DischargeFlowRate\");\r\n            ifcPSE.PropertyName = \"DischargeFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.ResidualFlowingPressure\", \"ResidualFlowingPressure\");\r\n            ifcPSE.PropertyName = \"ResidualFlowingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ResidualFlowingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.DischargeCoefficient\", \"DischargeCoefficient\");\r\n            ifcPSE.PropertyName = \"DischargeCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.MaximumWorkingPressure\", \"MaximumWorkingPressure\");\r\n            ifcPSE.PropertyName = \"MaximumWorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumWorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FireSuppressionTerminalTypeSprinkler.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFireSuppressionTerminalTypeSprinkler.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFireSuppressionTerminalTypeSprinkler);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FittingBend(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFittingBend = new PropertySetDescription();\r\n         propertySetFittingBend.Name = \"Pset_FittingBend\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FittingBend\"))\r\n         {\r\n            propertySetFittingBend.EntityTypes.Add(IFCEntityType.IfcCableCarrierFitting);\r\n            propertySetFittingBend.EntityTypes.Add(IFCEntityType.IfcDuctFitting);\r\n            propertySetFittingBend.EntityTypes.Add(IFCEntityType.IfcPipeFitting);\r\n            propertySetFittingBend.EntityTypes.Add(IFCEntityType.IfcCableCarrierFittingType);\r\n            propertySetFittingBend.EntityTypes.Add(IFCEntityType.IfcDuctFittingType);\r\n            propertySetFittingBend.EntityTypes.Add(IFCEntityType.IfcPipeFittingType);\r\n            propertySetFittingBend.ObjectType = \"IfcCableCarrierFitting\";\r\n            propertySetFittingBend.PredefinedType = \"BEND\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FittingBend.BendAngle\", \"BendAngle\");\r\n            ifcPSE.PropertyName = \"BendAngle\";\r\n            ifcPSE.PropertyType = PropertyType.PositivePlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFittingBend.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FittingBend.BendRadius\", \"BendRadius\");\r\n            ifcPSE.PropertyName = \"BendRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFittingBend.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFittingBend);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FittingJunction(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFittingJunction = new PropertySetDescription();\r\n         propertySetFittingJunction.Name = \"Pset_FittingJunction\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FittingJunction\"))\r\n         {\r\n            propertySetFittingJunction.EntityTypes.Add(IFCEntityType.IfcCableFitting);\r\n            propertySetFittingJunction.EntityTypes.Add(IFCEntityType.IfcDuctFitting);\r\n            propertySetFittingJunction.EntityTypes.Add(IFCEntityType.IfcPipeFitting);\r\n            propertySetFittingJunction.EntityTypes.Add(IFCEntityType.IfcCableCarrierFitting);\r\n            propertySetFittingJunction.EntityTypes.Add(IFCEntityType.IfcCableFittingType);\r\n            propertySetFittingJunction.EntityTypes.Add(IFCEntityType.IfcDuctFittingType);\r\n            propertySetFittingJunction.EntityTypes.Add(IFCEntityType.IfcPipeFittingType);\r\n            propertySetFittingJunction.EntityTypes.Add(IFCEntityType.IfcCableCarrierFittingType);\r\n            propertySetFittingJunction.ObjectType = \"IfcCableFitting\";\r\n            propertySetFittingJunction.PredefinedType = \"JUNCTION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FittingJunction.JunctionType\", \"JunctionType\");\r\n            ifcPSE.PropertyName = \"JunctionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FittingJunctionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.JunctionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFittingJunction.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FittingJunction.JunctionLeftAngle\", \"JunctionLeftAngle\");\r\n            ifcPSE.PropertyName = \"JunctionLeftAngle\";\r\n            ifcPSE.PropertyType = PropertyType.PositivePlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.JunctionLeftAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFittingJunction.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FittingJunction.JunctionLeftRadius\", \"JunctionLeftRadius\");\r\n            ifcPSE.PropertyName = \"JunctionLeftRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.JunctionLeftRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFittingJunction.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FittingJunction.JunctionRightAngle\", \"JunctionRightAngle\");\r\n            ifcPSE.PropertyName = \"JunctionRightAngle\";\r\n            ifcPSE.PropertyType = PropertyType.PositivePlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.JunctionRightAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFittingJunction.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FittingJunction.JunctionRightRadius\", \"JunctionRightRadius\");\r\n            ifcPSE.PropertyName = \"JunctionRightRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.JunctionRightRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFittingJunction.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFittingJunction);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FittingTransition(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFittingTransition = new PropertySetDescription();\r\n         propertySetFittingTransition.Name = \"Pset_FittingTransition\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FittingTransition\"))\r\n         {\r\n            propertySetFittingTransition.EntityTypes.Add(IFCEntityType.IfcCableFitting);\r\n            propertySetFittingTransition.EntityTypes.Add(IFCEntityType.IfcDuctFitting);\r\n            propertySetFittingTransition.EntityTypes.Add(IFCEntityType.IfcPipeFitting);\r\n            propertySetFittingTransition.EntityTypes.Add(IFCEntityType.IfcCableCarrierFitting);\r\n            propertySetFittingTransition.EntityTypes.Add(IFCEntityType.IfcCableFittingType);\r\n            propertySetFittingTransition.EntityTypes.Add(IFCEntityType.IfcDuctFittingType);\r\n            propertySetFittingTransition.EntityTypes.Add(IFCEntityType.IfcPipeFittingType);\r\n            propertySetFittingTransition.EntityTypes.Add(IFCEntityType.IfcCableCarrierFittingType);\r\n            propertySetFittingTransition.ObjectType = \"IfcCableFitting\";\r\n            propertySetFittingTransition.PredefinedType = \"TRANSITION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FittingTransition.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFittingTransition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FittingTransition.EccentricityInY\", \"EccentricityInY\");\r\n            ifcPSE.PropertyName = \"EccentricityInY\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EccentricityInYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFittingTransition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FittingTransition.EccentricityInZ\", \"EccentricityInZ\");\r\n            ifcPSE.PropertyName = \"EccentricityInZ\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EccentricityInZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFittingTransition.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFittingTransition);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowControllerDamper(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowControllerDamper = new PropertySetDescription();\r\n         propertySetFlowControllerDamper.Name = \"Pset_FlowControllerDamper\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowControllerDamper\"))\r\n         {\r\n            propertySetFlowControllerDamper.EntityTypes.Add(IFCEntityType.IfcFlowController);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowControllerDamper.SizingMethod\", \"SizingMethod\");\r\n            ifcPSE.PropertyName = \"SizingMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_DamperSizingMethod);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SizingMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowControllerDamper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowControllerDamper\"))\r\n         {\r\n            propertySetFlowControllerDamper.EntityTypes.Add(IFCEntityType.IfcFlowController);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowControllerDamper.SizingMethod\", \"SizingMethod\");\r\n            ifcPSE.PropertyName = \"SizingMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_DamperSizingMethod);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SizingMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowControllerDamper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowControllerDamper);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowControllerFlowMeter(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowControllerFlowMeter = new PropertySetDescription();\r\n         propertySetFlowControllerFlowMeter.Name = \"Pset_FlowControllerFlowMeter\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowControllerFlowMeter\"))\r\n         {\r\n            propertySetFlowControllerFlowMeter.EntityTypes.Add(IFCEntityType.IfcFlowController);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowControllerFlowMeter.Purpose\", \"Purpose\");\r\n            ifcPSE.PropertyName = \"Purpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FlowMeterPurpose);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowControllerFlowMeter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowControllerFlowMeter\"))\r\n         {\r\n            propertySetFlowControllerFlowMeter.EntityTypes.Add(IFCEntityType.IfcFlowController);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowControllerFlowMeter.Purpose\", \"Purpose\");\r\n            ifcPSE.PropertyName = \"Purpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FlowMeterPurpose);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowControllerFlowMeter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowControllerFlowMeter);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowFittingDuctFitting(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowFittingDuctFitting = new PropertySetDescription();\r\n         propertySetFlowFittingDuctFitting.Name = \"Pset_FlowFittingDuctFitting\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowFittingDuctFitting\"))\r\n         {\r\n            propertySetFlowFittingDuctFitting.EntityTypes.Add(IFCEntityType.IfcFlowFitting);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowFittingDuctFitting.AbsoluteRoughnessFactor\", \"AbsoluteRoughnessFactor\");\r\n            ifcPSE.PropertyName = \"AbsoluteRoughnessFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AbsoluteRoughnessFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowFittingDuctFitting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowFittingDuctFitting.HasLiner\", \"HasLiner\");\r\n            ifcPSE.PropertyName = \"HasLiner\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasLinerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowFittingDuctFitting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowFittingDuctFitting.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowFittingDuctFitting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowFittingDuctFitting\"))\r\n         {\r\n            propertySetFlowFittingDuctFitting.EntityTypes.Add(IFCEntityType.IfcFlowFitting);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowFittingDuctFitting.AbsoluteRoughnessFactor\", \"AbsoluteRoughnessFactor\");\r\n            ifcPSE.PropertyName = \"AbsoluteRoughnessFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AbsoluteRoughnessFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowFittingDuctFitting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowFittingDuctFitting.HasLiner\", \"HasLiner\");\r\n            ifcPSE.PropertyName = \"HasLiner\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasLinerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowFittingDuctFitting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowFittingDuctFitting.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowFittingDuctFitting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowFittingDuctFitting);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowFittingPipeFitting(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowFittingPipeFitting = new PropertySetDescription();\r\n         propertySetFlowFittingPipeFitting.Name = \"Pset_FlowFittingPipeFitting\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowFittingPipeFitting\"))\r\n         {\r\n            propertySetFlowFittingPipeFitting.EntityTypes.Add(IFCEntityType.IfcFlowFitting);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowFittingPipeFitting.InteriorRoughnessCoefficient\", \"InteriorRoughnessCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorRoughnessCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorRoughnessCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowFittingPipeFitting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowFittingPipeFitting.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowFittingPipeFitting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowFittingPipeFitting\"))\r\n         {\r\n            propertySetFlowFittingPipeFitting.EntityTypes.Add(IFCEntityType.IfcFlowFitting);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowFittingPipeFitting.InteriorRoughnessCoefficient\", \"InteriorRoughnessCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorRoughnessCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorRoughnessCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowFittingPipeFitting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowFittingPipeFitting.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowFittingPipeFitting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowFittingPipeFitting);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowInstrumentPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowInstrumentPHistory = new PropertySetDescription();\r\n         propertySetFlowInstrumentPHistory.Name = \"Pset_FlowInstrumentPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowInstrumentPHistory\"))\r\n         {\r\n            propertySetFlowInstrumentPHistory.EntityTypes.Add(IFCEntityType.IfcFlowInstrument);\r\n            propertySetFlowInstrumentPHistory.ObjectType = \"IfcFlowInstrument\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentPHistory.Value\", \"Value\");\r\n            ifcPSE.PropertyName = \"Value\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Value\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentPHistory.Quality\", \"Quality\");\r\n            ifcPSE.PropertyName = \"Quality\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Quality\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.QualityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentPHistory.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowInstrumentPHistory\"))\r\n         {\r\n            propertySetFlowInstrumentPHistory.EntityTypes.Add(IFCEntityType.IfcFlowInstrument);\r\n            propertySetFlowInstrumentPHistory.ObjectType = \"IfcFlowInstrument\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentPHistory.Value\", \"Value\");\r\n            ifcPSE.PropertyName = \"Value\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentPHistory.Quality\", \"Quality\");\r\n            ifcPSE.PropertyName = \"Quality\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.QualityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentPHistory.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowInstrumentPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowInstrumentTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowInstrumentTypeCommon = new PropertySetDescription();\r\n         propertySetFlowInstrumentTypeCommon.Name = \"Pset_FlowInstrumentTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowInstrumentTypeCommon\"))\r\n         {\r\n            propertySetFlowInstrumentTypeCommon.EntityTypes.Add(IFCEntityType.IfcFlowInstrument);\r\n            propertySetFlowInstrumentTypeCommon.ObjectType = \"IfcFlowInstrument\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조 ID\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowInstrumentTypeCommon\"))\r\n         {\r\n            propertySetFlowInstrumentTypeCommon.EntityTypes.Add(IFCEntityType.IfcFlowInstrument);\r\n            propertySetFlowInstrumentTypeCommon.EntityTypes.Add(IFCEntityType.IfcFlowInstrumentType);\r\n            propertySetFlowInstrumentTypeCommon.ObjectType = \"IfcFlowInstrument\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowInstrumentTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowInstrumentTypePressureGauge(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowInstrumentTypePressureGauge = new PropertySetDescription();\r\n         propertySetFlowInstrumentTypePressureGauge.Name = \"Pset_FlowInstrumentTypePressureGauge\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowInstrumentTypePressureGauge\"))\r\n         {\r\n            propertySetFlowInstrumentTypePressureGauge.EntityTypes.Add(IFCEntityType.IfcFlowInstrumentType);\r\n            propertySetFlowInstrumentTypePressureGauge.ObjectType = \"PressureGauge\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypePressureGauge.PressureGaugeType\", \"PressureGaugeType\");\r\n            ifcPSE.PropertyName = \"PressureGaugeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_PressureGaugeType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureGaugeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypePressureGauge.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypePressureGauge.DisplaySize\", \"DisplaySize\");\r\n            ifcPSE.PropertyName = \"DisplaySize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DisplaySizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypePressureGauge.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowInstrumentTypePressureGauge\"))\r\n         {\r\n            propertySetFlowInstrumentTypePressureGauge.EntityTypes.Add(IFCEntityType.IfcFlowInstrumentType);\r\n            propertySetFlowInstrumentTypePressureGauge.ObjectType = \"IfcFlowInstrumentType\";\r\n            propertySetFlowInstrumentTypePressureGauge.PredefinedType = \"PRESSUREGAUGE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypePressureGauge.PressureGaugeType\", \"PressureGaugeType\");\r\n            ifcPSE.PropertyName = \"PressureGaugeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_PressureGaugeType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureGaugeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypePressureGauge.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypePressureGauge.DisplaySize\", \"DisplaySize\");\r\n            ifcPSE.PropertyName = \"DisplaySize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DisplaySizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypePressureGauge.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowInstrumentTypePressureGauge\"))\r\n         {\r\n            propertySetFlowInstrumentTypePressureGauge.EntityTypes.Add(IFCEntityType.IfcFlowInstrument);\r\n            propertySetFlowInstrumentTypePressureGauge.ObjectType = \"IfcFlowInstrument\";\r\n            propertySetFlowInstrumentTypePressureGauge.PredefinedType = \"PRESSUREGAUGE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypePressureGauge.PressureGaugeType\", \"PressureGaugeType\");\r\n            ifcPSE.PropertyName = \"PressureGaugeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_PressureGaugeType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure Gauge Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧力計タイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"압력계 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureGaugeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypePressureGauge.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypePressureGauge.DisplaySize\", \"DisplaySize\");\r\n            ifcPSE.PropertyName = \"DisplaySize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Display Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"表示サイズ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"디스플레이 크기\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DisplaySizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypePressureGauge.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowInstrumentTypePressureGauge\"))\r\n         {\r\n            propertySetFlowInstrumentTypePressureGauge.EntityTypes.Add(IFCEntityType.IfcFlowInstrument);\r\n            propertySetFlowInstrumentTypePressureGauge.EntityTypes.Add(IFCEntityType.IfcFlowInstrumentType);\r\n            propertySetFlowInstrumentTypePressureGauge.ObjectType = \"IfcFlowInstrument\";\r\n            propertySetFlowInstrumentTypePressureGauge.PredefinedType = \"PRESSUREGAUGE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypePressureGauge.PressureGaugeType\", \"PressureGaugeType\");\r\n            ifcPSE.PropertyName = \"PressureGaugeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_PressureGaugeType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureGaugeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypePressureGauge.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypePressureGauge.DisplaySize\", \"DisplaySize\");\r\n            ifcPSE.PropertyName = \"DisplaySize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DisplaySizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypePressureGauge.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowInstrumentTypePressureGauge);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowInstrumentTypeThermometer(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowInstrumentTypeThermometer = new PropertySetDescription();\r\n         propertySetFlowInstrumentTypeThermometer.Name = \"Pset_FlowInstrumentTypeThermometer\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowInstrumentTypeThermometer\"))\r\n         {\r\n            propertySetFlowInstrumentTypeThermometer.EntityTypes.Add(IFCEntityType.IfcFlowInstrumentType);\r\n            propertySetFlowInstrumentTypeThermometer.ObjectType = \"Thermometer\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypeThermometer.ThermometerType\", \"ThermometerType\");\r\n            ifcPSE.PropertyName = \"ThermometerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_ThermometerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermometerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypeThermometer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypeThermometer.DisplaySize\", \"DisplaySize\");\r\n            ifcPSE.PropertyName = \"DisplaySize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DisplaySizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypeThermometer.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowInstrumentTypeThermometer\"))\r\n         {\r\n            propertySetFlowInstrumentTypeThermometer.EntityTypes.Add(IFCEntityType.IfcFlowInstrumentType);\r\n            propertySetFlowInstrumentTypeThermometer.ObjectType = \"IfcFlowInstrumentType\";\r\n            propertySetFlowInstrumentTypeThermometer.PredefinedType = \"THERMOMETER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypeThermometer.ThermometerType\", \"ThermometerType\");\r\n            ifcPSE.PropertyName = \"ThermometerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ThermometerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermometerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypeThermometer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypeThermometer.DisplaySize\", \"DisplaySize\");\r\n            ifcPSE.PropertyName = \"DisplaySize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DisplaySizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypeThermometer.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowInstrumentTypeThermometer\"))\r\n         {\r\n            propertySetFlowInstrumentTypeThermometer.EntityTypes.Add(IFCEntityType.IfcFlowInstrument);\r\n            propertySetFlowInstrumentTypeThermometer.ObjectType = \"IfcFlowInstrument\";\r\n            propertySetFlowInstrumentTypeThermometer.PredefinedType = \"THERMOMETER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypeThermometer.ThermometerType\", \"ThermometerType\");\r\n            ifcPSE.PropertyName = \"ThermometerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ThermometerType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermometer Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"温度計タイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"온도계 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermometerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypeThermometer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypeThermometer.DisplaySize\", \"DisplaySize\");\r\n            ifcPSE.PropertyName = \"DisplaySize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Display Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"表示サイズ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"디스플레이 크기\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DisplaySizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypeThermometer.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowInstrumentTypeThermometer\"))\r\n         {\r\n            propertySetFlowInstrumentTypeThermometer.EntityTypes.Add(IFCEntityType.IfcFlowInstrument);\r\n            propertySetFlowInstrumentTypeThermometer.EntityTypes.Add(IFCEntityType.IfcFlowInstrumentType);\r\n            propertySetFlowInstrumentTypeThermometer.ObjectType = \"IfcFlowInstrument\";\r\n            propertySetFlowInstrumentTypeThermometer.PredefinedType = \"THERMOMETER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypeThermometer.ThermometerType\", \"ThermometerType\");\r\n            ifcPSE.PropertyName = \"ThermometerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ThermometerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermometerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypeThermometer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowInstrumentTypeThermometer.DisplaySize\", \"DisplaySize\");\r\n            ifcPSE.PropertyName = \"DisplaySize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DisplaySizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowInstrumentTypeThermometer.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowInstrumentTypeThermometer);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowMeterOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowMeterOccurrence = new PropertySetDescription();\r\n         propertySetFlowMeterOccurrence.Name = \"Pset_FlowMeterOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterOccurrence\"))\r\n         {\r\n            propertySetFlowMeterOccurrence.EntityTypes.Add(IFCEntityType.IfcFlowMeter);\r\n            propertySetFlowMeterOccurrence.ObjectType = \"IfcFlowMeter\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterOccurrence.Purpose\", \"Purpose\");\r\n            ifcPSE.PropertyName = \"Purpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FlowMeterPurpose);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Purpose\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterOccurrence\"))\r\n         {\r\n            propertySetFlowMeterOccurrence.EntityTypes.Add(IFCEntityType.IfcFlowMeter);\r\n            propertySetFlowMeterOccurrence.ObjectType = \"IfcFlowMeter\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterOccurrence.FlowMeterOurpose\", \"FlowMeterOurpose\");\r\n            ifcPSE.PropertyName = \"FlowMeterOurpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FlowMeterPurpose);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowMeterOurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowMeterOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowMeterTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowMeterTypeCommon = new PropertySetDescription();\r\n         propertySetFlowMeterTypeCommon.Name = \"Pset_FlowMeterTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeCommon\"))\r\n         {\r\n            propertySetFlowMeterTypeCommon.EntityTypes.Add(IFCEntityType.IfcFlowMeterType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeCommon.ReadOutType\", \"ReadOutType\");\r\n            ifcPSE.PropertyName = \"ReadOutType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_MeterReadOutType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReadOutTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeCommon.RemoteReading\", \"RemoteReading\");\r\n            ifcPSE.PropertyName = \"RemoteReading\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RemoteReadingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeCommon.IsMain\", \"IsMain\");\r\n            ifcPSE.PropertyName = \"IsMain\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsMainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeCommon\"))\r\n         {\r\n            propertySetFlowMeterTypeCommon.EntityTypes.Add(IFCEntityType.IfcFlowMeterType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeCommon.ReadOutType\", \"ReadOutType\");\r\n            ifcPSE.PropertyName = \"ReadOutType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_MeterReadOutType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReadOutTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeCommon.RemoteReading\", \"RemoteReading\");\r\n            ifcPSE.PropertyName = \"RemoteReading\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RemoteReadingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeCommon.IsMain\", \"IsMain\");\r\n            ifcPSE.PropertyName = \"IsMain\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsMainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeCommon\"))\r\n         {\r\n            propertySetFlowMeterTypeCommon.EntityTypes.Add(IFCEntityType.IfcFlowMeter);\r\n            propertySetFlowMeterTypeCommon.ObjectType = \"IfcFlowMeter\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeCommon.ReadOutType\", \"ReadOutType\");\r\n            ifcPSE.PropertyName = \"ReadOutType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_MeterReadOutType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Read Out Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReadOutTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeCommon.RemoteReading\", \"RemoteReading\");\r\n            ifcPSE.PropertyName = \"RemoteReading\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Remote Reading\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RemoteReadingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeCommon\"))\r\n         {\r\n            propertySetFlowMeterTypeCommon.EntityTypes.Add(IFCEntityType.IfcFlowMeter);\r\n            propertySetFlowMeterTypeCommon.EntityTypes.Add(IFCEntityType.IfcFlowMeterType);\r\n            propertySetFlowMeterTypeCommon.ObjectType = \"IfcFlowMeter\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeCommon.ReadOutType\", \"ReadOutType\");\r\n            ifcPSE.PropertyName = \"ReadOutType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_MeterReadOutType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReadOutTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeCommon.RemoteReading\", \"RemoteReading\");\r\n            ifcPSE.PropertyName = \"RemoteReading\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RemoteReadingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowMeterTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowMeterTypeEnergyMeter(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowMeterTypeEnergyMeter = new PropertySetDescription();\r\n         propertySetFlowMeterTypeEnergyMeter.Name = \"Pset_FlowMeterTypeEnergyMeter\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeEnergyMeter\"))\r\n         {\r\n            propertySetFlowMeterTypeEnergyMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeterType);\r\n            propertySetFlowMeterTypeEnergyMeter.ObjectType = \"IfcFlowMeterType\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeEnergyMeter.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeEnergyMeter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeEnergyMeter\"))\r\n         {\r\n            propertySetFlowMeterTypeEnergyMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeterType);\r\n            propertySetFlowMeterTypeEnergyMeter.ObjectType = \"IfcFlowMeterType\";\r\n            propertySetFlowMeterTypeEnergyMeter.PredefinedType = \"ENERGYMETER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeEnergyMeter.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeEnergyMeter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeEnergyMeter\"))\r\n         {\r\n            propertySetFlowMeterTypeEnergyMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeter);\r\n            propertySetFlowMeterTypeEnergyMeter.ObjectType = \"IfcFlowMeter\";\r\n            propertySetFlowMeterTypeEnergyMeter.PredefinedType = \"ENERGYMETER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeEnergyMeter.NominalCurrent\", \"NominalCurrent\");\r\n            ifcPSE.PropertyName = \"NominalCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Current\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeEnergyMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeEnergyMeter.MaximumCurrent\", \"MaximumCurrent\");\r\n            ifcPSE.PropertyName = \"MaximumCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Current\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeEnergyMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeEnergyMeter.MultipleTarriff\", \"MultipleTarriff\");\r\n            ifcPSE.PropertyName = \"MultipleTarriff\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Multiple Tarriff\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MultipleTarriffCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeEnergyMeter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeEnergyMeter\"))\r\n         {\r\n            propertySetFlowMeterTypeEnergyMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeter);\r\n            propertySetFlowMeterTypeEnergyMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeterType);\r\n            propertySetFlowMeterTypeEnergyMeter.ObjectType = \"IfcFlowMeter\";\r\n            propertySetFlowMeterTypeEnergyMeter.PredefinedType = \"ENERGYMETER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeEnergyMeter.NominalCurrent\", \"NominalCurrent\");\r\n            ifcPSE.PropertyName = \"NominalCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeEnergyMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeEnergyMeter.MaximumCurrent\", \"MaximumCurrent\");\r\n            ifcPSE.PropertyName = \"MaximumCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeEnergyMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeEnergyMeter.MultipleTarriff\", \"MultipleTarriff\");\r\n            ifcPSE.PropertyName = \"MultipleTarriff\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MultipleTarriffCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeEnergyMeter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowMeterTypeEnergyMeter);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowMeterTypeGasMeter(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowMeterTypeGasMeter = new PropertySetDescription();\r\n         propertySetFlowMeterTypeGasMeter.Name = \"Pset_FlowMeterTypeGasMeter\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeGasMeter\"))\r\n         {\r\n            propertySetFlowMeterTypeGasMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeterType);\r\n            propertySetFlowMeterTypeGasMeter.ObjectType = \"IfcFlowMeterType\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeGasMeter.GasType\", \"GasType\");\r\n            ifcPSE.PropertyName = \"GasType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_GasType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeGasMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeGasMeter.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeGasMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeGasMeter.MaximumFlowRate\", \"MaximumFlowRate\");\r\n            ifcPSE.PropertyName = \"MaximumFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeGasMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeGasMeter.MaximumPressureLoss\", \"MaximumPressureLoss\");\r\n            ifcPSE.PropertyName = \"MaximumPressureLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPressureLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeGasMeter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeGasMeter\"))\r\n         {\r\n            propertySetFlowMeterTypeGasMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeterType);\r\n            propertySetFlowMeterTypeGasMeter.ObjectType = \"IfcFlowMeterType\";\r\n            propertySetFlowMeterTypeGasMeter.PredefinedType = \"GASMETER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeGasMeter.GasType\", \"GasType\");\r\n            ifcPSE.PropertyName = \"GasType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_GasType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeGasMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeGasMeter.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeGasMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeGasMeter.MaximumFlowRate\", \"MaximumFlowRate\");\r\n            ifcPSE.PropertyName = \"MaximumFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeGasMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeGasMeter.MaximumPressureLoss\", \"MaximumPressureLoss\");\r\n            ifcPSE.PropertyName = \"MaximumPressureLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPressureLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeGasMeter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeGasMeter\"))\r\n         {\r\n            propertySetFlowMeterTypeGasMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeter);\r\n            propertySetFlowMeterTypeGasMeter.ObjectType = \"IfcFlowMeter\";\r\n            propertySetFlowMeterTypeGasMeter.PredefinedType = \"GASMETER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeGasMeter.GasType\", \"GasType\");\r\n            ifcPSE.PropertyName = \"GasType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_GasType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gas Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeGasMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeGasMeter.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Connection Size\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeGasMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeGasMeter.MaximumFlowRate\", \"MaximumFlowRate\");\r\n            ifcPSE.PropertyName = \"MaximumFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Flow Rate\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeGasMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeGasMeter.MaximumPressureLoss\", \"MaximumPressureLoss\");\r\n            ifcPSE.PropertyName = \"MaximumPressureLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Pressure Loss\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPressureLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeGasMeter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeGasMeter\"))\r\n         {\r\n            propertySetFlowMeterTypeGasMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeter);\r\n            propertySetFlowMeterTypeGasMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeterType);\r\n            propertySetFlowMeterTypeGasMeter.ObjectType = \"IfcFlowMeter\";\r\n            propertySetFlowMeterTypeGasMeter.PredefinedType = \"GASMETER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeGasMeter.GasType\", \"GasType\");\r\n            ifcPSE.PropertyName = \"GasType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_GasType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeGasMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeGasMeter.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeGasMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeGasMeter.MaximumFlowRate\", \"MaximumFlowRate\");\r\n            ifcPSE.PropertyName = \"MaximumFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeGasMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeGasMeter.MaximumPressureLoss\", \"MaximumPressureLoss\");\r\n            ifcPSE.PropertyName = \"MaximumPressureLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPressureLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeGasMeter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowMeterTypeGasMeter);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowMeterTypeOilMeter(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowMeterTypeOilMeter = new PropertySetDescription();\r\n         propertySetFlowMeterTypeOilMeter.Name = \"Pset_FlowMeterTypeOilMeter\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeOilMeter\"))\r\n         {\r\n            propertySetFlowMeterTypeOilMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeterType);\r\n            propertySetFlowMeterTypeOilMeter.ObjectType = \"IfcFlowMeterType\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeOilMeter.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeOilMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeOilMeter.MaximumFlowRate\", \"MaximumFlowRate\");\r\n            ifcPSE.PropertyName = \"MaximumFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeOilMeter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeOilMeter\"))\r\n         {\r\n            propertySetFlowMeterTypeOilMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeterType);\r\n            propertySetFlowMeterTypeOilMeter.ObjectType = \"IfcFlowMeterType\";\r\n            propertySetFlowMeterTypeOilMeter.PredefinedType = \"OILMETER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeOilMeter.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeOilMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeOilMeter.MaximumFlowRate\", \"MaximumFlowRate\");\r\n            ifcPSE.PropertyName = \"MaximumFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeOilMeter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeOilMeter\"))\r\n         {\r\n            propertySetFlowMeterTypeOilMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeter);\r\n            propertySetFlowMeterTypeOilMeter.ObjectType = \"IfcFlowMeter\";\r\n            propertySetFlowMeterTypeOilMeter.PredefinedType = \"OILMETER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeOilMeter.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Connection Size\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeOilMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeOilMeter.MaximumFlowRate\", \"MaximumFlowRate\");\r\n            ifcPSE.PropertyName = \"MaximumFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Flow Rate\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeOilMeter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeOilMeter\"))\r\n         {\r\n            propertySetFlowMeterTypeOilMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeter);\r\n            propertySetFlowMeterTypeOilMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeterType);\r\n            propertySetFlowMeterTypeOilMeter.ObjectType = \"IfcFlowMeter\";\r\n            propertySetFlowMeterTypeOilMeter.PredefinedType = \"OILMETER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeOilMeter.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeOilMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeOilMeter.MaximumFlowRate\", \"MaximumFlowRate\");\r\n            ifcPSE.PropertyName = \"MaximumFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeOilMeter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowMeterTypeOilMeter);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowMeterTypeWaterMeter(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowMeterTypeWaterMeter = new PropertySetDescription();\r\n         propertySetFlowMeterTypeWaterMeter.Name = \"Pset_FlowMeterTypeWaterMeter\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeWaterMeter\"))\r\n         {\r\n            propertySetFlowMeterTypeWaterMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeterType);\r\n            propertySetFlowMeterTypeWaterMeter.ObjectType = \"IfcFlowMeterType\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.Type\", \"Type\");\r\n            ifcPSE.PropertyName = \"Type\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_WaterMeterType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.MaximumFlowRate\", \"MaximumFlowRate\");\r\n            ifcPSE.PropertyName = \"MaximumFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.MaximumPressureLoss\", \"MaximumPressureLoss\");\r\n            ifcPSE.PropertyName = \"MaximumPressureLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPressureLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.BackflowPreventerType\", \"BackflowPreventerType\");\r\n            ifcPSE.PropertyName = \"BackflowPreventerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BackflowPreventerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BackflowPreventerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeWaterMeter\"))\r\n         {\r\n            propertySetFlowMeterTypeWaterMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeterType);\r\n            propertySetFlowMeterTypeWaterMeter.ObjectType = \"IfcFlowMeterType\";\r\n            propertySetFlowMeterTypeWaterMeter.PredefinedType = \"WATERMETER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.Type\", \"Type\");\r\n            ifcPSE.PropertyName = \"Type\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_WaterMeterType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.MaximumFlowRate\", \"MaximumFlowRate\");\r\n            ifcPSE.PropertyName = \"MaximumFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.MaximumPressureLoss\", \"MaximumPressureLoss\");\r\n            ifcPSE.PropertyName = \"MaximumPressureLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPressureLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.BackflowPreventerType\", \"BackflowPreventerType\");\r\n            ifcPSE.PropertyName = \"BackflowPreventerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BackflowPreventerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BackflowPreventerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeWaterMeter\"))\r\n         {\r\n            propertySetFlowMeterTypeWaterMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeter);\r\n            propertySetFlowMeterTypeWaterMeter.ObjectType = \"IfcFlowMeter\";\r\n            propertySetFlowMeterTypeWaterMeter.PredefinedType = \"WATERMETER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.Type\", \"Type\");\r\n            ifcPSE.PropertyName = \"Type\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_WaterMeterType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Connection Size\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.MaximumFlowRate\", \"MaximumFlowRate\");\r\n            ifcPSE.PropertyName = \"MaximumFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Flow Rate\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.MaximumPressureLoss\", \"MaximumPressureLoss\");\r\n            ifcPSE.PropertyName = \"MaximumPressureLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Pressure Loss\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPressureLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.BackflowPreventerType\", \"BackflowPreventerType\");\r\n            ifcPSE.PropertyName = \"BackflowPreventerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_BackflowPreventerType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Backflow Preventer Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BackflowPreventerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMeterTypeWaterMeter\"))\r\n         {\r\n            propertySetFlowMeterTypeWaterMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeter);\r\n            propertySetFlowMeterTypeWaterMeter.EntityTypes.Add(IFCEntityType.IfcFlowMeterType);\r\n            propertySetFlowMeterTypeWaterMeter.ObjectType = \"IfcFlowMeter\";\r\n            propertySetFlowMeterTypeWaterMeter.PredefinedType = \"WATERMETER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.Type\", \"Type\");\r\n            ifcPSE.PropertyName = \"Type\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_WaterMeterType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.MaximumFlowRate\", \"MaximumFlowRate\");\r\n            ifcPSE.PropertyName = \"MaximumFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.MaximumPressureLoss\", \"MaximumPressureLoss\");\r\n            ifcPSE.PropertyName = \"MaximumPressureLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPressureLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMeterTypeWaterMeter.BackflowPreventerType\", \"BackflowPreventerType\");\r\n            ifcPSE.PropertyName = \"BackflowPreventerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_BackflowPreventerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BackflowPreventerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMeterTypeWaterMeter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowMeterTypeWaterMeter);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowMovingDeviceCompressor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowMovingDeviceCompressor = new PropertySetDescription();\r\n         propertySetFlowMovingDeviceCompressor.Name = \"Pset_FlowMovingDeviceCompressor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMovingDeviceCompressor\"))\r\n         {\r\n            propertySetFlowMovingDeviceCompressor.EntityTypes.Add(IFCEntityType.IfcFlowMovingDevice);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceCompressor.ImpellerDiameter\", \"ImpellerDiameter\");\r\n            ifcPSE.PropertyName = \"ImpellerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpellerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceCompressor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMovingDeviceCompressor\"))\r\n         {\r\n            propertySetFlowMovingDeviceCompressor.EntityTypes.Add(IFCEntityType.IfcFlowMovingDevice);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceCompressor.ImpellerDiameter\", \"ImpellerDiameter\");\r\n            ifcPSE.PropertyName = \"ImpellerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpellerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceCompressor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowMovingDeviceCompressor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowMovingDeviceFan(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowMovingDeviceFan = new PropertySetDescription();\r\n         propertySetFlowMovingDeviceFan.Name = \"Pset_FlowMovingDeviceFan\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMovingDeviceFan\"))\r\n         {\r\n            propertySetFlowMovingDeviceFan.EntityTypes.Add(IFCEntityType.IfcFlowMovingDevice);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFan.DischargeType\", \"DischargeType\");\r\n            ifcPSE.PropertyName = \"DischargeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FanDischargeType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFan.ApplicationOfFan\", \"ApplicationOfFan\");\r\n            ifcPSE.PropertyName = \"ApplicationOfFan\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FanApplicationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplicationOfFanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFan.CoilPosition\", \"CoilPosition\");\r\n            ifcPSE.PropertyName = \"CoilPosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FanCoilPosition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFan.MotorPosition\", \"MotorPosition\");\r\n            ifcPSE.PropertyName = \"MotorPosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FanMotorPosition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MotorPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFan.FanMountingType\", \"FanMountingType\");\r\n            ifcPSE.PropertyName = \"FanMountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FanMountingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanMountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFan.FractionOfMotorHeatToAirStream\", \"FractionOfMotorHeatToAirStream\");\r\n            ifcPSE.PropertyName = \"FractionOfMotorHeatToAirStream\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FractionOfMotorHeatToAirStreamCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFan.ImpellerDiameter\", \"ImpellerDiameter\");\r\n            ifcPSE.PropertyName = \"ImpellerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpellerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFan.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMovingDeviceFan\"))\r\n         {\r\n            propertySetFlowMovingDeviceFan.EntityTypes.Add(IFCEntityType.IfcFlowMovingDevice);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFan.DischargeType\", \"DischargeType\");\r\n            ifcPSE.PropertyName = \"DischargeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FanDischargeType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFan.ApplicationOfFan\", \"ApplicationOfFan\");\r\n            ifcPSE.PropertyName = \"ApplicationOfFan\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FanApplicationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplicationOfFanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFan.CoilPosition\", \"CoilPosition\");\r\n            ifcPSE.PropertyName = \"CoilPosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FanCoilPosition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoilPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFan.MotorPosition\", \"MotorPosition\");\r\n            ifcPSE.PropertyName = \"MotorPosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FanMotorPosition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MotorPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFan.FanMountingType\", \"FanMountingType\");\r\n            ifcPSE.PropertyName = \"FanMountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FanMountingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanMountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFan.FractionOfMotorHeatToAirStream\", \"FractionOfMotorHeatToAirStream\");\r\n            ifcPSE.PropertyName = \"FractionOfMotorHeatToAirStream\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FractionOfMotorHeatToAirStreamCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFan.ImpellerDiameter\", \"ImpellerDiameter\");\r\n            ifcPSE.PropertyName = \"ImpellerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpellerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFan.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowMovingDeviceFan);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowMovingDeviceFanCentrifugal(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowMovingDeviceFanCentrifugal = new PropertySetDescription();\r\n         propertySetFlowMovingDeviceFanCentrifugal.Name = \"Pset_FlowMovingDeviceFanCentrifugal\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMovingDeviceFanCentrifugal\"))\r\n         {\r\n            propertySetFlowMovingDeviceFanCentrifugal.EntityTypes.Add(IFCEntityType.IfcFlowMovingDevice);\r\n            propertySetFlowMovingDeviceFanCentrifugal.ObjectType = \"The related IfcFanType\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFanCentrifugal.DischargePosition\", \"DischargePosition\");\r\n            ifcPSE.PropertyName = \"DischargePosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CentrifugalFanDischargePosition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargePositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFanCentrifugal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFanCentrifugal.DirectionOfRotation\", \"DirectionOfRotation\");\r\n            ifcPSE.PropertyName = \"DirectionOfRotation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CentrifugalFanRotation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DirectionOfRotationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFanCentrifugal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFanCentrifugal.Arrangement\", \"Arrangement\");\r\n            ifcPSE.PropertyName = \"Arrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CentrifugalFanArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFanCentrifugal.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMovingDeviceFanCentrifugal\"))\r\n         {\r\n            propertySetFlowMovingDeviceFanCentrifugal.EntityTypes.Add(IFCEntityType.IfcFlowMovingDevice);\r\n            propertySetFlowMovingDeviceFanCentrifugal.ObjectType = \"RelatedEntityIs:IfcFanType\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFanCentrifugal.DischargePosition\", \"DischargePosition\");\r\n            ifcPSE.PropertyName = \"DischargePosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CentrifugalFanDischargePosition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DischargePositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFanCentrifugal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFanCentrifugal.DirectionOfRotation\", \"DirectionOfRotation\");\r\n            ifcPSE.PropertyName = \"DirectionOfRotation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CentrifugalFanRotation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DirectionOfRotationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFanCentrifugal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDeviceFanCentrifugal.Arrangement\", \"Arrangement\");\r\n            ifcPSE.PropertyName = \"Arrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CentrifugalFanArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDeviceFanCentrifugal.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowMovingDeviceFanCentrifugal);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowMovingDevicePump(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowMovingDevicePump = new PropertySetDescription();\r\n         propertySetFlowMovingDevicePump.Name = \"Pset_FlowMovingDevicePump\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMovingDevicePump\"))\r\n         {\r\n            propertySetFlowMovingDevicePump.EntityTypes.Add(IFCEntityType.IfcFlowMovingDevice);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDevicePump.ImpellerDiameter\", \"ImpellerDiameter\");\r\n            ifcPSE.PropertyName = \"ImpellerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpellerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDevicePump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDevicePump.BaseType\", \"BaseType\");\r\n            ifcPSE.PropertyName = \"BaseType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_PumpBaseType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDevicePump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDevicePump.DriveConnectionType\", \"DriveConnectionType\");\r\n            ifcPSE.PropertyName = \"DriveConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_PumpDriveConnectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DriveConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDevicePump.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowMovingDevicePump\"))\r\n         {\r\n            propertySetFlowMovingDevicePump.EntityTypes.Add(IFCEntityType.IfcFlowMovingDevice);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDevicePump.ImpellerDiameter\", \"ImpellerDiameter\");\r\n            ifcPSE.PropertyName = \"ImpellerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpellerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDevicePump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDevicePump.BaseType\", \"BaseType\");\r\n            ifcPSE.PropertyName = \"BaseType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_PumpBaseType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDevicePump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowMovingDevicePump.DriveConnectionType\", \"DriveConnectionType\");\r\n            ifcPSE.PropertyName = \"DriveConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_PumpDriveConnectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DriveConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowMovingDevicePump.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowMovingDevicePump);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowSegmentDuctSegment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowSegmentDuctSegment = new PropertySetDescription();\r\n         propertySetFlowSegmentDuctSegment.Name = \"Pset_FlowSegmentDuctSegment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowSegmentDuctSegment\"))\r\n         {\r\n            propertySetFlowSegmentDuctSegment.EntityTypes.Add(IFCEntityType.IfcFlowSegment);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentDuctSegment.MaterialThickness\", \"MaterialThickness\");\r\n            ifcPSE.PropertyName = \"MaterialThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentDuctSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentDuctSegment.InteriorRoughnessCoefficient\", \"InteriorRoughnessCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorRoughnessCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorRoughnessCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentDuctSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentDuctSegment.HasLiner\", \"HasLiner\");\r\n            ifcPSE.PropertyName = \"HasLiner\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasLinerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentDuctSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentDuctSegment.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentDuctSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentDuctSegment.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentDuctSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowSegmentDuctSegment\"))\r\n         {\r\n            propertySetFlowSegmentDuctSegment.EntityTypes.Add(IFCEntityType.IfcFlowSegment);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentDuctSegment.MaterialThickness\", \"MaterialThickness\");\r\n            ifcPSE.PropertyName = \"MaterialThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentDuctSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentDuctSegment.InteriorRoughnessCoefficient\", \"InteriorRoughnessCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorRoughnessCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorRoughnessCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentDuctSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentDuctSegment.HasLiner\", \"HasLiner\");\r\n            ifcPSE.PropertyName = \"HasLiner\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasLinerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentDuctSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentDuctSegment.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentDuctSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentDuctSegment.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentDuctSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowSegmentDuctSegment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowSegmentPipeSegment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowSegmentPipeSegment = new PropertySetDescription();\r\n         propertySetFlowSegmentPipeSegment.Name = \"Pset_FlowSegmentPipeSegment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowSegmentPipeSegment\"))\r\n         {\r\n            propertySetFlowSegmentPipeSegment.EntityTypes.Add(IFCEntityType.IfcFlowSegment);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentPipeSegment.InteriorRoughnessCoefficient\", \"InteriorRoughnessCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorRoughnessCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorRoughnessCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentPipeSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentPipeSegment.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentPipeSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentPipeSegment.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentPipeSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentPipeSegment.Gradient\", \"Gradient\");\r\n            ifcPSE.PropertyName = \"Gradient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GradientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentPipeSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentPipeSegment.InvertElevation\", \"InvertElevation\");\r\n            ifcPSE.PropertyName = \"InvertElevation\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertElevationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentPipeSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowSegmentPipeSegment\"))\r\n         {\r\n            propertySetFlowSegmentPipeSegment.EntityTypes.Add(IFCEntityType.IfcFlowSegment);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentPipeSegment.InteriorRoughnessCoefficient\", \"InteriorRoughnessCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorRoughnessCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorRoughnessCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentPipeSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentPipeSegment.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentPipeSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentPipeSegment.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentPipeSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentPipeSegment.Gradient\", \"Gradient\");\r\n            ifcPSE.PropertyName = \"Gradient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GradientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentPipeSegment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowSegmentPipeSegment.InvertElevation\", \"InvertElevation\");\r\n            ifcPSE.PropertyName = \"InvertElevation\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertElevationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowSegmentPipeSegment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowSegmentPipeSegment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowStorageDeviceTank(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowStorageDeviceTank = new PropertySetDescription();\r\n         propertySetFlowStorageDeviceTank.Name = \"Pset_FlowStorageDeviceTank\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowStorageDeviceTank\"))\r\n         {\r\n            propertySetFlowStorageDeviceTank.EntityTypes.Add(IFCEntityType.IfcFlowStorageDevice);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowStorageDeviceTank.TankComposition\", \"TankComposition\");\r\n            ifcPSE.PropertyName = \"TankComposition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_TankComposition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TankCompositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowStorageDeviceTank.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowStorageDeviceTank.HasLadder\", \"HasLadder\");\r\n            ifcPSE.PropertyName = \"HasLadder\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasLadderCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowStorageDeviceTank.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowStorageDeviceTank.HasVisualIndicator\", \"HasVisualIndicator\");\r\n            ifcPSE.PropertyName = \"HasVisualIndicator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasVisualIndicatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowStorageDeviceTank.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowStorageDeviceTank\"))\r\n         {\r\n            propertySetFlowStorageDeviceTank.EntityTypes.Add(IFCEntityType.IfcFlowStorageDevice);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowStorageDeviceTank.TankComposition\", \"TankComposition\");\r\n            ifcPSE.PropertyName = \"TankComposition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_TankComposition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TankCompositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowStorageDeviceTank.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowStorageDeviceTank.HasLadder\", \"HasLadder\");\r\n            ifcPSE.PropertyName = \"HasLadder\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasLadderCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowStorageDeviceTank.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowStorageDeviceTank.HasVisualIndicator\", \"HasVisualIndicator\");\r\n            ifcPSE.PropertyName = \"HasVisualIndicator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasVisualIndicatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowStorageDeviceTank.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowStorageDeviceTank);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FlowTerminalAirTerminal(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFlowTerminalAirTerminal = new PropertySetDescription();\r\n         propertySetFlowTerminalAirTerminal.Name = \"Pset_FlowTerminalAirTerminal\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowTerminalAirTerminal\"))\r\n         {\r\n            propertySetFlowTerminalAirTerminal.EntityTypes.Add(IFCEntityType.IfcFlowTerminal);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowTerminalAirTerminal.AirflowType\", \"AirflowType\");\r\n            ifcPSE.PropertyName = \"AirflowType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirTerminalAirflowType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirflowTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowTerminalAirTerminal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowTerminalAirTerminal.Location\", \"Location\");\r\n            ifcPSE.PropertyName = \"Location\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirTerminalLocation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LocationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowTerminalAirTerminal.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FlowTerminalAirTerminal\"))\r\n         {\r\n            propertySetFlowTerminalAirTerminal.EntityTypes.Add(IFCEntityType.IfcFlowTerminal);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowTerminalAirTerminal.AirflowType\", \"AirflowType\");\r\n            ifcPSE.PropertyName = \"AirflowType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirTerminalAirflowType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirflowTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowTerminalAirTerminal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FlowTerminalAirTerminal.Location\", \"Location\");\r\n            ifcPSE.PropertyName = \"Location\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirTerminalLocation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LocationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFlowTerminalAirTerminal.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFlowTerminalAirTerminal);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FootingCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFootingCommon = new PropertySetDescription();\r\n         propertySetFootingCommon.Name = \"Pset_FootingCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FootingCommon\"))\r\n         {\r\n            propertySetFootingCommon.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            propertySetFootingCommon.ObjectType = \"IfcFooting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FootingCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFootingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FootingCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFootingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FootingCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Tragendes Bauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Load Bearing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Porteur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐力部材\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFootingCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FootingCommon\"))\r\n         {\r\n            propertySetFootingCommon.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            propertySetFootingCommon.EntityTypes.Add(IFCEntityType.IfcFootingType);\r\n            propertySetFootingCommon.ObjectType = \"IfcFooting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FootingCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFootingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FootingCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFootingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FootingCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFootingCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFootingCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FootingTypePadFooting(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFootingTypePadFooting = new PropertySetDescription();\r\n         propertySetFootingTypePadFooting.Name = \"Pset_FootingTypePadFooting\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FootingTypePadFooting\"))\r\n         {\r\n            propertySetFootingTypePadFooting.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            propertySetFootingTypePadFooting.EntityTypes.Add(IFCEntityType.IfcFootingType);\r\n            propertySetFootingTypePadFooting.ObjectType = \"IfcFooting\";\r\n            propertySetFootingTypePadFooting.PredefinedType = \"PAD_FOOTING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FootingTypePadFooting.LoadBearingCapacity\", \"LoadBearingCapacity\");\r\n            ifcPSE.PropertyName = \"LoadBearingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.PlanarForce;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFootingTypePadFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FootingTypePadFooting.IsReinforced\", \"IsReinforced\");\r\n            ifcPSE.PropertyName = \"IsReinforced\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsReinforcedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFootingTypePadFooting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFootingTypePadFooting);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FurnitureTypeChair(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFurnitureTypeChair = new PropertySetDescription();\r\n         propertySetFurnitureTypeChair.Name = \"Pset_FurnitureTypeChair\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeChair\"))\r\n         {\r\n            propertySetFurnitureTypeChair.EntityTypes.Add(IFCEntityType.IfcFurnitureType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeChair.SeatingHeight\", \"SeatingHeight\");\r\n            ifcPSE.PropertyName = \"SeatingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeatingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeChair.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeChair.HighestSeatingHeight\", \"HighestSeatingHeight\");\r\n            ifcPSE.PropertyName = \"HighestSeatingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HighestSeatingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeChair.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeChair.LowestSeatingHeight\", \"LowestSeatingHeight\");\r\n            ifcPSE.PropertyName = \"LowestSeatingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowestSeatingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeChair.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeChair\"))\r\n         {\r\n            propertySetFurnitureTypeChair.EntityTypes.Add(IFCEntityType.IfcFurnitureType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeChair.SeatingHeight\", \"SeatingHeight\");\r\n            ifcPSE.PropertyName = \"SeatingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeatingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeChair.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeChair.HighestSeatingHeight\", \"HighestSeatingHeight\");\r\n            ifcPSE.PropertyName = \"HighestSeatingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HighestSeatingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeChair.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeChair.LowestSeatingHeight\", \"LowestSeatingHeight\");\r\n            ifcPSE.PropertyName = \"LowestSeatingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowestSeatingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeChair.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeChair\"))\r\n         {\r\n            propertySetFurnitureTypeChair.EntityTypes.Add(IFCEntityType.IfcFurniture);\r\n            propertySetFurnitureTypeChair.ObjectType = \"IfcFurniture\";\r\n            propertySetFurnitureTypeChair.PredefinedType = \"CHAIR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeChair.SeatingHeight\", \"SeatingHeight\");\r\n            ifcPSE.PropertyName = \"SeatingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Seating Height\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeatingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeChair.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeChair.HighestSeatingHeight\", \"HighestSeatingHeight\");\r\n            ifcPSE.PropertyName = \"HighestSeatingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Highest Seating Height\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HighestSeatingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeChair.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeChair.LowestSeatingHeight\", \"LowestSeatingHeight\");\r\n            ifcPSE.PropertyName = \"LowestSeatingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lowest Seating Height\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowestSeatingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeChair.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeChair\"))\r\n         {\r\n            propertySetFurnitureTypeChair.EntityTypes.Add(IFCEntityType.IfcFurniture);\r\n            propertySetFurnitureTypeChair.EntityTypes.Add(IFCEntityType.IfcFurnitureType);\r\n            propertySetFurnitureTypeChair.ObjectType = \"IfcFurniture\";\r\n            propertySetFurnitureTypeChair.PredefinedType = \"CHAIR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeChair.SeatingHeight\", \"SeatingHeight\");\r\n            ifcPSE.PropertyName = \"SeatingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeatingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeChair.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeChair.HighestSeatingHeight\", \"HighestSeatingHeight\");\r\n            ifcPSE.PropertyName = \"HighestSeatingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HighestSeatingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeChair.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeChair.LowestSeatingHeight\", \"LowestSeatingHeight\");\r\n            ifcPSE.PropertyName = \"LowestSeatingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowestSeatingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeChair.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFurnitureTypeChair);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FurnitureTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFurnitureTypeCommon = new PropertySetDescription();\r\n         propertySetFurnitureTypeCommon.Name = \"Pset_FurnitureTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeCommon\"))\r\n         {\r\n            propertySetFurnitureTypeCommon.EntityTypes.Add(IFCEntityType.IfcFurnitureType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.Style\", \"Style\");\r\n            ifcPSE.PropertyName = \"Style\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StyleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.MainColor\", \"MainColor\");\r\n            ifcPSE.PropertyName = \"MainColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MainColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeCommon\"))\r\n         {\r\n            propertySetFurnitureTypeCommon.EntityTypes.Add(IFCEntityType.IfcFurnitureType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.Style\", \"Style\");\r\n            ifcPSE.PropertyName = \"Style\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StyleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.MainColor\", \"MainColor\");\r\n            ifcPSE.PropertyName = \"MainColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MainColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeCommon\"))\r\n         {\r\n            propertySetFurnitureTypeCommon.EntityTypes.Add(IFCEntityType.IfcFurniture);\r\n            propertySetFurnitureTypeCommon.ObjectType = \"IfcFurniture\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.Style\", \"Style\");\r\n            ifcPSE.PropertyName = \"Style\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Style\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StyleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Height\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Depth\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.MainColor\", \"MainColor\");\r\n            ifcPSE.PropertyName = \"MainColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Main Color\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MainColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.IsBuiltIn\", \"IsBuiltIn\");\r\n            ifcPSE.PropertyName = \"IsBuiltIn\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Built In\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsBuiltInCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeCommon\"))\r\n         {\r\n            propertySetFurnitureTypeCommon.EntityTypes.Add(IFCEntityType.IfcFurniture);\r\n            propertySetFurnitureTypeCommon.EntityTypes.Add(IFCEntityType.IfcFurnitureType);\r\n            propertySetFurnitureTypeCommon.ObjectType = \"IfcFurniture\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.Style\", \"Style\");\r\n            ifcPSE.PropertyName = \"Style\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StyleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.MainColour\", \"MainColour\");\r\n            ifcPSE.PropertyName = \"MainColour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MainColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeCommon.IsBuiltIn\", \"IsBuiltIn\");\r\n            ifcPSE.PropertyName = \"IsBuiltIn\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsBuiltInCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFurnitureTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FurnitureTypeDesk(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFurnitureTypeDesk = new PropertySetDescription();\r\n         propertySetFurnitureTypeDesk.Name = \"Pset_FurnitureTypeDesk\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeDesk\"))\r\n         {\r\n            propertySetFurnitureTypeDesk.EntityTypes.Add(IFCEntityType.IfcFurnitureType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeDesk.WorksurfaceArea\", \"WorksurfaceArea\");\r\n            ifcPSE.PropertyName = \"WorksurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorksurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeDesk.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeDesk\"))\r\n         {\r\n            propertySetFurnitureTypeDesk.EntityTypes.Add(IFCEntityType.IfcFurnitureType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeDesk.WorksurfaceArea\", \"WorksurfaceArea\");\r\n            ifcPSE.PropertyName = \"WorksurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorksurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeDesk.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeDesk\"))\r\n         {\r\n            propertySetFurnitureTypeDesk.EntityTypes.Add(IFCEntityType.IfcFurniture);\r\n            propertySetFurnitureTypeDesk.ObjectType = \"IfcFurniture\";\r\n            propertySetFurnitureTypeDesk.PredefinedType = \"DESK\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeDesk.WorksurfaceArea\", \"WorksurfaceArea\");\r\n            ifcPSE.PropertyName = \"WorksurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Worksurface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorksurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeDesk.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeDesk\"))\r\n         {\r\n            propertySetFurnitureTypeDesk.EntityTypes.Add(IFCEntityType.IfcFurniture);\r\n            propertySetFurnitureTypeDesk.EntityTypes.Add(IFCEntityType.IfcFurnitureType);\r\n            propertySetFurnitureTypeDesk.ObjectType = \"IfcFurniture\";\r\n            propertySetFurnitureTypeDesk.PredefinedType = \"DESK\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeDesk.WorksurfaceArea\", \"WorksurfaceArea\");\r\n            ifcPSE.PropertyName = \"WorksurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorksurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeDesk.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFurnitureTypeDesk);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FurnitureTypeFileCabinet(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFurnitureTypeFileCabinet = new PropertySetDescription();\r\n         propertySetFurnitureTypeFileCabinet.Name = \"Pset_FurnitureTypeFileCabinet\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeFileCabinet\"))\r\n         {\r\n            propertySetFurnitureTypeFileCabinet.EntityTypes.Add(IFCEntityType.IfcFurnitureType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeFileCabinet.WithLock\", \"WithLock\");\r\n            ifcPSE.PropertyName = \"WithLock\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WithLockCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeFileCabinet.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeFileCabinet\"))\r\n         {\r\n            propertySetFurnitureTypeFileCabinet.EntityTypes.Add(IFCEntityType.IfcFurnitureType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeFileCabinet.WithLock\", \"WithLock\");\r\n            ifcPSE.PropertyName = \"WithLock\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WithLockCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeFileCabinet.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeFileCabinet\"))\r\n         {\r\n            propertySetFurnitureTypeFileCabinet.EntityTypes.Add(IFCEntityType.IfcFurniture);\r\n            propertySetFurnitureTypeFileCabinet.ObjectType = \"IfcFurniture\";\r\n            propertySetFurnitureTypeFileCabinet.PredefinedType = \"FILECABINET\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeFileCabinet.WithLock\", \"WithLock\");\r\n            ifcPSE.PropertyName = \"WithLock\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"With Lock\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WithLockCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeFileCabinet.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeFileCabinet\"))\r\n         {\r\n            propertySetFurnitureTypeFileCabinet.EntityTypes.Add(IFCEntityType.IfcFurniture);\r\n            propertySetFurnitureTypeFileCabinet.EntityTypes.Add(IFCEntityType.IfcFurnitureType);\r\n            propertySetFurnitureTypeFileCabinet.ObjectType = \"IfcFurniture\";\r\n            propertySetFurnitureTypeFileCabinet.PredefinedType = \"FILECABINET\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeFileCabinet.WithLock\", \"WithLock\");\r\n            ifcPSE.PropertyName = \"WithLock\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WithLockCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeFileCabinet.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFurnitureTypeFileCabinet);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_FurnitureTypeTable(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetFurnitureTypeTable = new PropertySetDescription();\r\n         propertySetFurnitureTypeTable.Name = \"Pset_FurnitureTypeTable\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeTable\"))\r\n         {\r\n            propertySetFurnitureTypeTable.EntityTypes.Add(IFCEntityType.IfcFurnitureType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeTable.WorksurfaceArea\", \"WorksurfaceArea\");\r\n            ifcPSE.PropertyName = \"WorksurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorksurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeTable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeTable.NumberOfChairs\", \"NumberOfChairs\");\r\n            ifcPSE.PropertyName = \"NumberOfChairs\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfChairsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeTable.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeTable\"))\r\n         {\r\n            propertySetFurnitureTypeTable.EntityTypes.Add(IFCEntityType.IfcFurnitureType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeTable.WorksurfaceArea\", \"WorksurfaceArea\");\r\n            ifcPSE.PropertyName = \"WorksurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorksurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeTable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeTable.NumberOfChairs\", \"NumberOfChairs\");\r\n            ifcPSE.PropertyName = \"NumberOfChairs\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfChairsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeTable.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeTable\"))\r\n         {\r\n            propertySetFurnitureTypeTable.EntityTypes.Add(IFCEntityType.IfcFurniture);\r\n            propertySetFurnitureTypeTable.ObjectType = \"IfcFurniture\";\r\n            propertySetFurnitureTypeTable.PredefinedType = \"TABLE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeTable.WorksurfaceArea\", \"WorksurfaceArea\");\r\n            ifcPSE.PropertyName = \"WorksurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Worksurface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorksurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeTable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeTable.NumberOfChairs\", \"NumberOfChairs\");\r\n            ifcPSE.PropertyName = \"NumberOfChairs\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Chairs\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfChairsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeTable.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_FurnitureTypeTable\"))\r\n         {\r\n            propertySetFurnitureTypeTable.EntityTypes.Add(IFCEntityType.IfcFurniture);\r\n            propertySetFurnitureTypeTable.EntityTypes.Add(IFCEntityType.IfcFurnitureType);\r\n            propertySetFurnitureTypeTable.ObjectType = \"IfcFurniture\";\r\n            propertySetFurnitureTypeTable.PredefinedType = \"TABLE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeTable.WorksurfaceArea\", \"WorksurfaceArea\");\r\n            ifcPSE.PropertyName = \"WorksurfaceArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorksurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeTable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_FurnitureTypeTable.NumberOfChairs\", \"NumberOfChairs\");\r\n            ifcPSE.PropertyName = \"NumberOfChairs\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfChairsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetFurnitureTypeTable.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetFurnitureTypeTable);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_GasTerminalPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetGasTerminalPHistory = new PropertySetDescription();\r\n         propertySetGasTerminalPHistory.Name = \"Pset_GasTerminalPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_GasTerminalPHistory\"))\r\n         {\r\n            propertySetGasTerminalPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_GasTerminalPHistory.GasFlowRate\", \"GasFlowRate\");\r\n            ifcPSE.PropertyName = \"GasFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGasTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_GasTerminalPHistory\"))\r\n         {\r\n            propertySetGasTerminalPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_GasTerminalPHistory.GasFlowRate\", \"GasFlowRate\");\r\n            ifcPSE.PropertyName = \"GasFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGasTerminalPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetGasTerminalPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_GasTerminalTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetGasTerminalTypeCommon = new PropertySetDescription();\r\n         propertySetGasTerminalTypeCommon.Name = \"Pset_GasTerminalTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_GasTerminalTypeCommon\"))\r\n         {\r\n            propertySetGasTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcGasTerminalType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_GasTerminalTypeCommon.GasFlowRateRange\", \"GasFlowRateRange\");\r\n            ifcPSE.PropertyName = \"GasFlowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasFlowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGasTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_GasTerminalTypeCommon\"))\r\n         {\r\n            propertySetGasTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcGasTerminalType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_GasTerminalTypeCommon.GasFlowRateRange\", \"GasFlowRateRange\");\r\n            ifcPSE.PropertyName = \"GasFlowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasFlowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGasTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetGasTerminalTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_GasTerminalTypeGasAppliance(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetGasTerminalTypeGasAppliance = new PropertySetDescription();\r\n         propertySetGasTerminalTypeGasAppliance.Name = \"Pset_GasTerminalTypeGasAppliance\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_GasTerminalTypeGasAppliance\"))\r\n         {\r\n            propertySetGasTerminalTypeGasAppliance.EntityTypes.Add(IFCEntityType.IfcGasTerminalType);\r\n            propertySetGasTerminalTypeGasAppliance.ObjectType = \"IfcGasTerminalType\";\r\n            propertySetGasTerminalTypeGasAppliance.PredefinedType = \"GASAPPLIANCE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_GasTerminalTypeGasAppliance.GasApplianceType\", \"GasApplianceType\");\r\n            ifcPSE.PropertyName = \"GasApplianceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_GasApplianceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasApplianceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGasTerminalTypeGasAppliance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_GasTerminalTypeGasAppliance.FlueType\", \"FlueType\");\r\n            ifcPSE.PropertyName = \"FlueType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FlueType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlueTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGasTerminalTypeGasAppliance.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_GasTerminalTypeGasAppliance\"))\r\n         {\r\n            propertySetGasTerminalTypeGasAppliance.EntityTypes.Add(IFCEntityType.IfcGasTerminalType);\r\n            propertySetGasTerminalTypeGasAppliance.ObjectType = \"IfcGasTerminalType\";\r\n            propertySetGasTerminalTypeGasAppliance.PredefinedType = \"GASAPPLIANCE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_GasTerminalTypeGasAppliance.GasApplianceType\", \"GasApplianceType\");\r\n            ifcPSE.PropertyName = \"GasApplianceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_GasApplianceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasApplianceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGasTerminalTypeGasAppliance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_GasTerminalTypeGasAppliance.FlueType\", \"FlueType\");\r\n            ifcPSE.PropertyName = \"FlueType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FlueType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlueTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGasTerminalTypeGasAppliance.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetGasTerminalTypeGasAppliance);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_GasTerminalTypeGasBurner(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetGasTerminalTypeGasBurner = new PropertySetDescription();\r\n         propertySetGasTerminalTypeGasBurner.Name = \"Pset_GasTerminalTypeGasBurner\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_GasTerminalTypeGasBurner\"))\r\n         {\r\n            propertySetGasTerminalTypeGasBurner.EntityTypes.Add(IFCEntityType.IfcGasTerminalType);\r\n            propertySetGasTerminalTypeGasBurner.ObjectType = \"IfcGasTerminalType\";\r\n            propertySetGasTerminalTypeGasBurner.PredefinedType = \"GASBURNER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_GasTerminalTypeGasBurner.GasBurnerType\", \"GasBurnerType\");\r\n            ifcPSE.PropertyName = \"GasBurnerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_GasBurnerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasBurnerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGasTerminalTypeGasBurner.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_GasTerminalTypeGasBurner\"))\r\n         {\r\n            propertySetGasTerminalTypeGasBurner.EntityTypes.Add(IFCEntityType.IfcGasTerminalType);\r\n            propertySetGasTerminalTypeGasBurner.ObjectType = \"IfcGasTerminalType\";\r\n            propertySetGasTerminalTypeGasBurner.PredefinedType = \"GASBURNER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_GasTerminalTypeGasBurner.GasBurnerType\", \"GasBurnerType\");\r\n            ifcPSE.PropertyName = \"GasBurnerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_GasBurnerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasBurnerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGasTerminalTypeGasBurner.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetGasTerminalTypeGasBurner);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_GateHeadCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetGateHeadCommon = new PropertySetDescription();\r\n         propertySetGateHeadCommon.Name = \"Pset_GateHeadCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_GateHeadCommon\"))\r\n         {\r\n            propertySetGateHeadCommon.EntityTypes.Add(IFCEntityType.IfcMarinePart);\r\n            propertySetGateHeadCommon.ObjectType = \"IfcMarinePart\";\r\n            propertySetGateHeadCommon.PredefinedType = \"GATEHEAD\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_GateHeadCommon.StructuralType\", \"StructuralType\");\r\n            ifcPSE.PropertyName = \"StructuralType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StructuralTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGateHeadCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetGateHeadCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_GeotechnicalAssemblyCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetGeotechnicalAssemblyCommon = new PropertySetDescription();\r\n         propertySetGeotechnicalAssemblyCommon.Name = \"Pset_GeotechnicalAssemblyCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_GeotechnicalAssemblyCommon\"))\r\n         {\r\n            propertySetGeotechnicalAssemblyCommon.EntityTypes.Add(IFCEntityType.IfcGeotechnicalAssembly);\r\n            propertySetGeotechnicalAssemblyCommon.ObjectType = \"IfcGeotechnicalAssembly\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_GeotechnicalAssemblyCommon.Limitations\", \"Limitations\");\r\n            ifcPSE.PropertyName = \"Limitations\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LimitationsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGeotechnicalAssemblyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_GeotechnicalAssemblyCommon.Methodology\", \"Methodology\");\r\n            ifcPSE.PropertyName = \"Methodology\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MethodologyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGeotechnicalAssemblyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_GeotechnicalAssemblyCommon.BoreHolePurpose\", \"BoreHolePurpose\");\r\n            ifcPSE.PropertyName = \"BoreHolePurpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_StrataAssemblyPurpose);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoreHolePurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGeotechnicalAssemblyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_GeotechnicalAssemblyCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGeotechnicalAssemblyCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetGeotechnicalAssemblyCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_GeotechnicalStratumCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetGeotechnicalStratumCommon = new PropertySetDescription();\r\n         propertySetGeotechnicalStratumCommon.Name = \"Pset_GeotechnicalStratumCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_GeotechnicalStratumCommon\"))\r\n         {\r\n            propertySetGeotechnicalStratumCommon.EntityTypes.Add(IFCEntityType.IfcGeotechnicalStratum);\r\n            propertySetGeotechnicalStratumCommon.ObjectType = \"IfcGeotechnicalStratum\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_GeotechnicalStratumCommon.StratumColour\", \"StratumColour\");\r\n            ifcPSE.PropertyName = \"StratumColour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StratumColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGeotechnicalStratumCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_GeotechnicalStratumCommon.IsTopographic\", \"IsTopographic\");\r\n            ifcPSE.PropertyName = \"IsTopographic\";\r\n            ifcPSE.PropertyType = PropertyType.Logical;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsTopographicCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGeotechnicalStratumCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_GeotechnicalStratumCommon.PiezometricHead\", \"PiezometricHead\");\r\n            ifcPSE.PropertyName = \"PiezometricHead\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PiezometricHeadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGeotechnicalStratumCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_GeotechnicalStratumCommon.PiezometricPressure\", \"PiezometricPressure\");\r\n            ifcPSE.PropertyName = \"PiezometricPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PiezometricPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGeotechnicalStratumCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_GeotechnicalStratumCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGeotechnicalStratumCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_GeotechnicalStratumCommon.Texture\", \"Texture\");\r\n            ifcPSE.PropertyName = \"Texture\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TextureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetGeotechnicalStratumCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetGeotechnicalStratumCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_HeatExchangerTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetHeatExchangerTypeCommon = new PropertySetDescription();\r\n         propertySetHeatExchangerTypeCommon.Name = \"Pset_HeatExchangerTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_HeatExchangerTypeCommon\"))\r\n         {\r\n            propertySetHeatExchangerTypeCommon.EntityTypes.Add(IFCEntityType.IfcHeatExchangerType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_HeatExchangerTypeCommon.Arrangement\", \"Arrangement\");\r\n            ifcPSE.PropertyName = \"Arrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_HeatExchangerArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHeatExchangerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HeatExchangerTypeCommon.ShellMaterial\", \"ShellMaterial\");\r\n            ifcPSE.PropertyName = \"ShellMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShellMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHeatExchangerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_HeatExchangerTypeCommon\"))\r\n         {\r\n            propertySetHeatExchangerTypeCommon.EntityTypes.Add(IFCEntityType.IfcHeatExchangerType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_HeatExchangerTypeCommon.Arrangement\", \"Arrangement\");\r\n            ifcPSE.PropertyName = \"Arrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_HeatExchangerArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHeatExchangerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HeatExchangerTypeCommon.ShellMaterial\", \"ShellMaterial\");\r\n            ifcPSE.PropertyName = \"ShellMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShellMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHeatExchangerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_HeatExchangerTypeCommon\"))\r\n         {\r\n            propertySetHeatExchangerTypeCommon.EntityTypes.Add(IFCEntityType.IfcHeatExchanger);\r\n            propertySetHeatExchangerTypeCommon.ObjectType = \"IfcHeatExchanger\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_HeatExchangerTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHeatExchangerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HeatExchangerTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHeatExchangerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HeatExchangerTypeCommon.Arrangement\", \"Arrangement\");\r\n            ifcPSE.PropertyName = \"Arrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_HeatExchangerArrangement);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Arrangement\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"配置\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHeatExchangerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_HeatExchangerTypeCommon\"))\r\n         {\r\n            propertySetHeatExchangerTypeCommon.EntityTypes.Add(IFCEntityType.IfcHeatExchanger);\r\n            propertySetHeatExchangerTypeCommon.EntityTypes.Add(IFCEntityType.IfcHeatExchangerType);\r\n            propertySetHeatExchangerTypeCommon.ObjectType = \"IfcHeatExchanger\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_HeatExchangerTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHeatExchangerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HeatExchangerTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHeatExchangerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HeatExchangerTypeCommon.FlowArrangement\", \"FlowArrangement\");\r\n            ifcPSE.PropertyName = \"FlowArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_HeatExchangerArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHeatExchangerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetHeatExchangerTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_HeatExchangerTypePlate(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetHeatExchangerTypePlate = new PropertySetDescription();\r\n         propertySetHeatExchangerTypePlate.Name = \"Pset_HeatExchangerTypePlate\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_HeatExchangerTypePlate\"))\r\n         {\r\n            propertySetHeatExchangerTypePlate.EntityTypes.Add(IFCEntityType.IfcHeatExchangerType);\r\n            propertySetHeatExchangerTypePlate.ObjectType = \"IfcHeatExchangerType\";\r\n            propertySetHeatExchangerTypePlate.PredefinedType = \"PLATE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_HeatExchangerTypePlate.NumberOfPlates\", \"NumberOfPlates\");\r\n            ifcPSE.PropertyName = \"NumberOfPlates\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPlatesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHeatExchangerTypePlate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_HeatExchangerTypePlate\"))\r\n         {\r\n            propertySetHeatExchangerTypePlate.EntityTypes.Add(IFCEntityType.IfcHeatExchangerType);\r\n            propertySetHeatExchangerTypePlate.ObjectType = \"IfcHeatExchangerType\";\r\n            propertySetHeatExchangerTypePlate.PredefinedType = \"PLATE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_HeatExchangerTypePlate.NumberOfPlates\", \"NumberOfPlates\");\r\n            ifcPSE.PropertyName = \"NumberOfPlates\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPlatesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHeatExchangerTypePlate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_HeatExchangerTypePlate\"))\r\n         {\r\n            propertySetHeatExchangerTypePlate.EntityTypes.Add(IFCEntityType.IfcHeatExchanger);\r\n            propertySetHeatExchangerTypePlate.ObjectType = \"IfcHeatExchanger\";\r\n            propertySetHeatExchangerTypePlate.PredefinedType = \"PLATE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_HeatExchangerTypePlate.NumberOfPlates\", \"NumberOfPlates\");\r\n            ifcPSE.PropertyName = \"NumberOfPlates\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Plates\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"プレート数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPlatesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHeatExchangerTypePlate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_HeatExchangerTypePlate\"))\r\n         {\r\n            propertySetHeatExchangerTypePlate.EntityTypes.Add(IFCEntityType.IfcHeatExchanger);\r\n            propertySetHeatExchangerTypePlate.EntityTypes.Add(IFCEntityType.IfcHeatExchangerType);\r\n            propertySetHeatExchangerTypePlate.ObjectType = \"IfcHeatExchanger\";\r\n            propertySetHeatExchangerTypePlate.PredefinedType = \"PLATE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_HeatExchangerTypePlate.NumberOfPlates\", \"NumberOfPlates\");\r\n            ifcPSE.PropertyName = \"NumberOfPlates\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPlatesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHeatExchangerTypePlate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetHeatExchangerTypePlate);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_HumidifierPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetHumidifierPHistory = new PropertySetDescription();\r\n         propertySetHumidifierPHistory.Name = \"Pset_HumidifierPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_HumidifierPHistory\"))\r\n         {\r\n            propertySetHumidifierPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierPHistory.SaturationEfficiency\", \"SaturationEfficiency\");\r\n            ifcPSE.PropertyName = \"SaturationEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SaturationEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierPHistory.SaturationEfficiencyCurve\", \"SaturationEfficiencyCurve\");\r\n            ifcPSE.PropertyName = \"SaturationEfficiencyCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SaturationEfficiencyCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierPHistory.AirPressureDropCurve\", \"AirPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Pressure;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_HumidifierPHistory\"))\r\n         {\r\n            propertySetHumidifierPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierPHistory.SaturationEfficiency\", \"SaturationEfficiency\");\r\n            ifcPSE.PropertyName = \"SaturationEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SaturationEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierPHistory.SaturationEfficiencyCurve\", \"SaturationEfficiencyCurve\");\r\n            ifcPSE.PropertyName = \"SaturationEfficiencyCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Real;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SaturationEfficiencyCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierPHistory.AirPressureDropCurve\", \"AirPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Pressure;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_HumidifierPHistory\"))\r\n         {\r\n            propertySetHumidifierPHistory.EntityTypes.Add(IFCEntityType.IfcHumidifier);\r\n            propertySetHumidifierPHistory.ObjectType = \"IfcHumidifier\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Atmospheric Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"標準大気圧（外気圧）\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierPHistory.SaturationEfficiency\", \"SaturationEfficiency\");\r\n            ifcPSE.PropertyName = \"SaturationEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Saturation Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"飽和比率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SaturationEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_HumidifierPHistory\"))\r\n         {\r\n            propertySetHumidifierPHistory.EntityTypes.Add(IFCEntityType.IfcHumidifier);\r\n            propertySetHumidifierPHistory.ObjectType = \"IfcHumidifier\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierPHistory.AtmosphericPressure\", \"AtmosphericPressure\");\r\n            ifcPSE.PropertyName = \"AtmosphericPressure\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtmosphericPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierPHistory.SaturationEfficiency\", \"SaturationEfficiency\");\r\n            ifcPSE.PropertyName = \"SaturationEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SaturationEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetHumidifierPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_HumidifierTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetHumidifierTypeCommon = new PropertySetDescription();\r\n         propertySetHumidifierTypeCommon.Name = \"Pset_HumidifierTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_HumidifierTypeCommon\"))\r\n         {\r\n            propertySetHumidifierTypeCommon.EntityTypes.Add(IFCEntityType.IfcHumidifierType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.Application\", \"Application\");\r\n            ifcPSE.PropertyName = \"Application\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_HumidifierApplication);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplicationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.NominalMoistureGain\", \"NominalMoistureGain\");\r\n            ifcPSE.PropertyName = \"NominalMoistureGain\";\r\n            ifcPSE.PropertyType = PropertyType.MassFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalMoistureGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.NominalAirFlowRate\", \"NominalAirFlowRate\");\r\n            ifcPSE.PropertyName = \"NominalAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.InternalControl\", \"InternalControl\");\r\n            ifcPSE.PropertyName = \"InternalControl\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_HumidifierInternalControl);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalControlCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.WaterRequirement\", \"WaterRequirement\");\r\n            ifcPSE.PropertyName = \"WaterRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_HumidifierTypeCommon\"))\r\n         {\r\n            propertySetHumidifierTypeCommon.EntityTypes.Add(IFCEntityType.IfcHumidifierType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.Application\", \"Application\");\r\n            ifcPSE.PropertyName = \"Application\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_HumidifierApplication);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplicationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.NominalMoistureGain\", \"NominalMoistureGain\");\r\n            ifcPSE.PropertyName = \"NominalMoistureGain\";\r\n            ifcPSE.PropertyType = PropertyType.MassFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalMoistureGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.NominalAirFlowRate\", \"NominalAirFlowRate\");\r\n            ifcPSE.PropertyName = \"NominalAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.InternalControl\", \"InternalControl\");\r\n            ifcPSE.PropertyName = \"InternalControl\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_HumidifierInternalControl);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalControlCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.WaterRequirement\", \"WaterRequirement\");\r\n            ifcPSE.PropertyName = \"WaterRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_HumidifierTypeCommon\"))\r\n         {\r\n            propertySetHumidifierTypeCommon.EntityTypes.Add(IFCEntityType.IfcHumidifier);\r\n            propertySetHumidifierTypeCommon.ObjectType = \"IfcHumidifier\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.Application\", \"Application\");\r\n            ifcPSE.PropertyName = \"Application\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_HumidifierApplication);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Application\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"応用\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplicationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Weight\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"重量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.NominalMoistureGain\", \"NominalMoistureGain\");\r\n            ifcPSE.PropertyName = \"NominalMoistureGain\";\r\n            ifcPSE.PropertyType = PropertyType.MassFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Moisture Gain\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"加湿量の平均\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalMoistureGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.NominalAirFlowRate\", \"NominalAirFlowRate\");\r\n            ifcPSE.PropertyName = \"NominalAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Air Flow Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"気流量の平均\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.InternalControl\", \"InternalControl\");\r\n            ifcPSE.PropertyName = \"InternalControl\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_HumidifierInternalControl);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Internal Control\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"内部制御\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalControlCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.WaterRequirement\", \"WaterRequirement\");\r\n            ifcPSE.PropertyName = \"WaterRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Requirement\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水必要量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.SaturationEfficiencyCurve\", \"SaturationEfficiencyCurve\");\r\n            ifcPSE.PropertyName = \"SaturationEfficiencyCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Saturation Efficiency Curve\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SaturationEfficiencyCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.AirPressureDropCurve\", \"AirPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Pressure Drop Curve\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_HumidifierTypeCommon\"))\r\n         {\r\n            propertySetHumidifierTypeCommon.EntityTypes.Add(IFCEntityType.IfcHumidifier);\r\n            propertySetHumidifierTypeCommon.EntityTypes.Add(IFCEntityType.IfcHumidifierType);\r\n            propertySetHumidifierTypeCommon.ObjectType = \"IfcHumidifier\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.HumidifierApplication\", \"HumidifierApplication\");\r\n            ifcPSE.PropertyName = \"HumidifierApplication\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_HumidifierApplication);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HumidifierApplicationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.NominalMoistureGain\", \"NominalMoistureGain\");\r\n            ifcPSE.PropertyName = \"NominalMoistureGain\";\r\n            ifcPSE.PropertyType = PropertyType.MassFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalMoistureGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.NominalAirFlowRate\", \"NominalAirFlowRate\");\r\n            ifcPSE.PropertyName = \"NominalAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.InternalControl\", \"InternalControl\");\r\n            ifcPSE.PropertyName = \"InternalControl\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_HumidifierInternalControl);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalControlCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.WaterRequirement\", \"WaterRequirement\");\r\n            ifcPSE.PropertyName = \"WaterRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.SaturationEfficiencyCurve\", \"SaturationEfficiencyCurve\");\r\n            ifcPSE.PropertyName = \"SaturationEfficiencyCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SaturationEfficiencyCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_HumidifierTypeCommon.AirPressureDropCurve\", \"AirPressureDropCurve\");\r\n            ifcPSE.PropertyName = \"AirPressureDropCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressureDropCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetHumidifierTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetHumidifierTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ImpactProtectionDeviceOccurrenceBumper(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetImpactProtectionDeviceOccurrenceBumper = new PropertySetDescription();\r\n         propertySetImpactProtectionDeviceOccurrenceBumper.Name = \"Pset_ImpactProtectionDeviceOccurrenceBumper\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ImpactProtectionDeviceOccurrenceBumper\"))\r\n         {\r\n            propertySetImpactProtectionDeviceOccurrenceBumper.EntityTypes.Add(IFCEntityType.IfcImpactProtectionDevice);\r\n            propertySetImpactProtectionDeviceOccurrenceBumper.ObjectType = \"IfcImpactProtectionDevice\";\r\n            propertySetImpactProtectionDeviceOccurrenceBumper.PredefinedType = \"BUMPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ImpactProtectionDeviceOccurrenceBumper.BrakingLength\", \"BrakingLength\");\r\n            ifcPSE.PropertyName = \"BrakingLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BrakingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetImpactProtectionDeviceOccurrenceBumper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ImpactProtectionDeviceOccurrenceBumper.IsRemovableBumper\", \"IsRemovableBumper\");\r\n            ifcPSE.PropertyName = \"IsRemovableBumper\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsRemovableBumperCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetImpactProtectionDeviceOccurrenceBumper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ImpactProtectionDeviceOccurrenceBumper.BumperOrientation\", \"BumperOrientation\");\r\n            ifcPSE.PropertyName = \"BumperOrientation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_BumperOrientation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BumperOrientationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetImpactProtectionDeviceOccurrenceBumper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetImpactProtectionDeviceOccurrenceBumper);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ImpactProtectionDeviceTypeBumper(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetImpactProtectionDeviceTypeBumper = new PropertySetDescription();\r\n         propertySetImpactProtectionDeviceTypeBumper.Name = \"Pset_ImpactProtectionDeviceTypeBumper\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ImpactProtectionDeviceTypeBumper\"))\r\n         {\r\n            propertySetImpactProtectionDeviceTypeBumper.EntityTypes.Add(IFCEntityType.IfcImpactProtectionDevice);\r\n            propertySetImpactProtectionDeviceTypeBumper.EntityTypes.Add(IFCEntityType.IfcImpactProtectionDeviceType);\r\n            propertySetImpactProtectionDeviceTypeBumper.ObjectType = \"IfcImpactProtectionDevice\";\r\n            propertySetImpactProtectionDeviceTypeBumper.PredefinedType = \"BUMPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ImpactProtectionDeviceTypeBumper.IsAbsorbingEnergy\", \"IsAbsorbingEnergy\");\r\n            ifcPSE.PropertyName = \"IsAbsorbingEnergy\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsAbsorbingEnergyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetImpactProtectionDeviceTypeBumper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ImpactProtectionDeviceTypeBumper.MaximumLoadRetention\", \"MaximumLoadRetention\");\r\n            ifcPSE.PropertyName = \"MaximumLoadRetention\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumLoadRetentionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetImpactProtectionDeviceTypeBumper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ImpactProtectionDeviceTypeBumper.EnergyAbsorption\", \"EnergyAbsorption\");\r\n            ifcPSE.PropertyName = \"EnergyAbsorption\";\r\n            ifcPSE.PropertyType = PropertyType.Energy;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergyAbsorptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetImpactProtectionDeviceTypeBumper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetImpactProtectionDeviceTypeBumper);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_InstallationOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetInstallationOccurrence = new PropertySetDescription();\r\n         propertySetInstallationOccurrence.Name = \"Pset_InstallationOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_InstallationOccurrence\"))\r\n         {\r\n            propertySetInstallationOccurrence.EntityTypes.Add(IFCEntityType.IfcAsset);\r\n            propertySetInstallationOccurrence.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetInstallationOccurrence.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            propertySetInstallationOccurrence.ObjectType = \"IfcAsset\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_InstallationOccurrence.InstallationDate\", \"InstallationDate\");\r\n            ifcPSE.PropertyName = \"InstallationDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstallationDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInstallationOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InstallationOccurrence.AcceptanceDate\", \"AcceptanceDate\");\r\n            ifcPSE.PropertyName = \"AcceptanceDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcceptanceDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInstallationOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InstallationOccurrence.PutIntoOperationDate\", \"PutIntoOperationDate\");\r\n            ifcPSE.PropertyName = \"PutIntoOperationDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PutIntoOperationDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInstallationOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetInstallationOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_InterceptorTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetInterceptorTypeCommon = new PropertySetDescription();\r\n         propertySetInterceptorTypeCommon.Name = \"Pset_InterceptorTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_InterceptorTypeCommon\"))\r\n         {\r\n            propertySetInterceptorTypeCommon.EntityTypes.Add(IFCEntityType.IfcInterceptor);\r\n            propertySetInterceptorTypeCommon.ObjectType = \"IfcInterceptor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Body Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Body Width\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Body Depth\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Inlet Connection Size\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outlet Connection Size\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cover Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cover Width\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.VentilatingPipeSize\", \"VentilatingPipeSize\");\r\n            ifcPSE.PropertyName = \"VentilatingPipeSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ventilating Pipe Size\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilatingPipeSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_InterceptorTypeCommon\"))\r\n         {\r\n            propertySetInterceptorTypeCommon.EntityTypes.Add(IFCEntityType.IfcInterceptor);\r\n            propertySetInterceptorTypeCommon.EntityTypes.Add(IFCEntityType.IfcInterceptorType);\r\n            propertySetInterceptorTypeCommon.ObjectType = \"IfcInterceptor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_InterceptorTypeCommon.VentilatingPipeSize\", \"VentilatingPipeSize\");\r\n            ifcPSE.PropertyName = \"VentilatingPipeSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilatingPipeSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetInterceptorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetInterceptorTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_IpNetworkEquipmentPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetIpNetworkEquipmentPHistory = new PropertySetDescription();\r\n         propertySetIpNetworkEquipmentPHistory.Name = \"Pset_IpNetworkEquipmentPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_IpNetworkEquipmentPHistory\"))\r\n         {\r\n            propertySetIpNetworkEquipmentPHistory.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetIpNetworkEquipmentPHistory.ObjectType = \"IfcCommunicationsAppliance\";\r\n            propertySetIpNetworkEquipmentPHistory.PredefinedType = \"IPNETWORKEQUIPMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_IpNetworkEquipmentPHistory.NumberOfPackets\", \"NumberOfPackets\");\r\n            ifcPSE.PropertyName = \"NumberOfPackets\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPacketsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetIpNetworkEquipmentPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetIpNetworkEquipmentPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_JettyCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetJettyCommon = new PropertySetDescription();\r\n         propertySetJettyCommon.Name = \"Pset_JettyCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_JettyCommon\"))\r\n         {\r\n            propertySetJettyCommon.EntityTypes.Add(IFCEntityType.IfcMarineFacility);\r\n            propertySetJettyCommon.ObjectType = \"IfcMarineFacility\";\r\n            propertySetJettyCommon.PredefinedType = \"JETTY\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_JettyCommon.StructuralType\", \"StructuralType\");\r\n            ifcPSE.PropertyName = \"StructuralType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StructuralTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJettyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JettyCommon.BentSpacing\", \"BentSpacing\");\r\n            ifcPSE.PropertyName = \"BentSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BentSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJettyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JettyCommon.PierSectionType\", \"PierSectionType\");\r\n            ifcPSE.PropertyName = \"PierSectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PierSectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJettyCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JettyCommon.Elevation\", \"Elevation\");\r\n            ifcPSE.PropertyName = \"Elevation\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElevationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJettyCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetJettyCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_JettyDesignCriteria(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetJettyDesignCriteria = new PropertySetDescription();\r\n         propertySetJettyDesignCriteria.Name = \"Pset_JettyDesignCriteria\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_JettyDesignCriteria\"))\r\n         {\r\n            propertySetJettyDesignCriteria.EntityTypes.Add(IFCEntityType.IfcMarineFacility);\r\n            propertySetJettyDesignCriteria.ObjectType = \"IfcMarineFacility\";\r\n            propertySetJettyDesignCriteria.PredefinedType = \"JETTY\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_JettyDesignCriteria.HighWaterLevel\", \"HighWaterLevel\");\r\n            ifcPSE.PropertyName = \"HighWaterLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HighWaterLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJettyDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JettyDesignCriteria.LowWaterLevel\", \"LowWaterLevel\");\r\n            ifcPSE.PropertyName = \"LowWaterLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowWaterLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJettyDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JettyDesignCriteria.ExtremeHighWaterLevel\", \"ExtremeHighWaterLevel\");\r\n            ifcPSE.PropertyName = \"ExtremeHighWaterLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExtremeHighWaterLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJettyDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JettyDesignCriteria.ExtremeLowWaterLevel\", \"ExtremeLowWaterLevel\");\r\n            ifcPSE.PropertyName = \"ExtremeLowWaterLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExtremeLowWaterLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJettyDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JettyDesignCriteria.ShipLoading\", \"ShipLoading\");\r\n            ifcPSE.PropertyName = \"ShipLoading\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShipLoadingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJettyDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JettyDesignCriteria.WaveLoading\", \"WaveLoading\");\r\n            ifcPSE.PropertyName = \"WaveLoading\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaveLoadingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJettyDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JettyDesignCriteria.FlowLoading\", \"FlowLoading\");\r\n            ifcPSE.PropertyName = \"FlowLoading\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowLoadingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJettyDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JettyDesignCriteria.UniformlyDistributedLoad\", \"UniformlyDistributedLoad\");\r\n            ifcPSE.PropertyName = \"UniformlyDistributedLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UniformlyDistributedLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJettyDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JettyDesignCriteria.EquipmentLoading\", \"EquipmentLoading\");\r\n            ifcPSE.PropertyName = \"EquipmentLoading\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EquipmentLoadingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJettyDesignCriteria.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetJettyDesignCriteria);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_JunctionBoxTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetJunctionBoxTypeCommon = new PropertySetDescription();\r\n         propertySetJunctionBoxTypeCommon.Name = \"Pset_JunctionBoxTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_JunctionBoxTypeCommon\"))\r\n         {\r\n            propertySetJunctionBoxTypeCommon.EntityTypes.Add(IFCEntityType.IfcJunctionBox);\r\n            propertySetJunctionBoxTypeCommon.ObjectType = \"IfcJunctionBox\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.NumberOfGangs\", \"NumberOfGangs\");\r\n            ifcPSE.PropertyName = \"NumberOfGangs\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Gangs\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"分岐の数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"분기의 수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfGangsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.ClearDepth\", \"ClearDepth\");\r\n            ifcPSE.PropertyName = \"ClearDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Clear Depth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"明確な深さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"명확한 깊이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.ShapeType\", \"ShapeType\");\r\n            ifcPSE.PropertyName = \"ShapeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_JunctionBoxShapeType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shape Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"形状\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"형상\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShapeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.PlacingType\", \"PlacingType\");\r\n            ifcPSE.PropertyName = \"PlacingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_JunctionBoxPlacingType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Placing Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"位置\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"위치\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlacingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.MountingType\", \"MountingType\");\r\n            ifcPSE.PropertyName = \"MountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_JunctionBoxMountingType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mounting Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"取り付け\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"설치\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部露出\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"외부노출\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.IP_Code\", \"IP_Code\");\r\n            ifcPSE.PropertyName = \"IP_Code\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"IP_ Code\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"機密性エンクロージャ等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"기밀성 인클로저 등급\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IP_CodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_JunctionBoxTypeCommon\"))\r\n         {\r\n            propertySetJunctionBoxTypeCommon.EntityTypes.Add(IFCEntityType.IfcJunctionBox);\r\n            propertySetJunctionBoxTypeCommon.EntityTypes.Add(IFCEntityType.IfcJunctionBoxType);\r\n            propertySetJunctionBoxTypeCommon.ObjectType = \"IfcJunctionBox\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.NumberOfGangs\", \"NumberOfGangs\");\r\n            ifcPSE.PropertyName = \"NumberOfGangs\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfGangsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.ClearDepth\", \"ClearDepth\");\r\n            ifcPSE.PropertyName = \"ClearDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.ShapeType\", \"ShapeType\");\r\n            ifcPSE.PropertyName = \"ShapeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_JunctionBoxShapeType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShapeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.PlacingType\", \"PlacingType\");\r\n            ifcPSE.PropertyName = \"PlacingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_JunctionBoxPlacingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlacingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.JunctionBoxMountingType\", \"JunctionBoxMountingType\");\r\n            ifcPSE.PropertyName = \"JunctionBoxMountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_JunctionBoxMountingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.JunctionBoxMountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.IP_Code\", \"IP_Code\");\r\n            ifcPSE.PropertyName = \"IP_Code\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IP_CodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeCommon.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetJunctionBoxTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_JunctionBoxTypeData(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetJunctionBoxTypeData = new PropertySetDescription();\r\n         propertySetJunctionBoxTypeData.Name = \"Pset_JunctionBoxTypeData\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_JunctionBoxTypeData\"))\r\n         {\r\n            propertySetJunctionBoxTypeData.EntityTypes.Add(IFCEntityType.IfcJunctionBox);\r\n            propertySetJunctionBoxTypeData.EntityTypes.Add(IFCEntityType.IfcJunctionBoxType);\r\n            propertySetJunctionBoxTypeData.ObjectType = \"IfcJunctionBox\";\r\n            propertySetJunctionBoxTypeData.PredefinedType = \"DATA\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_JunctionBoxTypeData.DataConnectionType\", \"DataConnectionType\");\r\n            ifcPSE.PropertyName = \"DataConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DataConnectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DataConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetJunctionBoxTypeData.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetJunctionBoxTypeData);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_KerbCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetKerbCommon = new PropertySetDescription();\r\n         propertySetKerbCommon.Name = \"Pset_KerbCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_KerbCommon\"))\r\n         {\r\n            propertySetKerbCommon.EntityTypes.Add(IFCEntityType.IfcKerb);\r\n            propertySetKerbCommon.EntityTypes.Add(IFCEntityType.IfcKerbType);\r\n            propertySetKerbCommon.ObjectType = \"IfcKerb\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_KerbCommon.CombinedKerbGutter\", \"CombinedKerbGutter\");\r\n            ifcPSE.PropertyName = \"CombinedKerbGutter\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombinedKerbGutterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetKerbCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_KerbCommon.Upstand\", \"Upstand\");\r\n            ifcPSE.PropertyName = \"Upstand\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpstandCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetKerbCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_KerbCommon.Mountable\", \"Mountable\");\r\n            ifcPSE.PropertyName = \"Mountable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetKerbCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetKerbCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_KerbStone(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetKerbStone = new PropertySetDescription();\r\n         propertySetKerbStone.Name = \"Pset_KerbStone\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_KerbStone\"))\r\n         {\r\n            propertySetKerbStone.EntityTypes.Add(IFCEntityType.IfcKerb);\r\n            propertySetKerbStone.EntityTypes.Add(IFCEntityType.IfcKerbType);\r\n            propertySetKerbStone.ObjectType = \"IfcKerb\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_KerbStone.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetKerbStone.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_KerbStone.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetKerbStone.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_KerbStone.StoneFinishes\", \"StoneFinishes\");\r\n            ifcPSE.PropertyName = \"StoneFinishes\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StoneFinishesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetKerbStone.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_KerbStone.TypeDesignation\", \"TypeDesignation\");\r\n            ifcPSE.PropertyName = \"TypeDesignation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeDesignationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetKerbStone.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_KerbStone.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetKerbStone.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetKerbStone);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_LampEmitterTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetLampEmitterTypeCommon = new PropertySetDescription();\r\n         propertySetLampEmitterTypeCommon.Name = \"Pset_LampEmitterTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_LampEmitterTypeCommon\"))\r\n         {\r\n            propertySetLampEmitterTypeCommon.EntityTypes.Add(IFCEntityType.IfcLampType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampEmitterTypeCommon.ContributedLuminousFlux\", \"ContributedLuminousFlux\");\r\n            ifcPSE.PropertyName = \"ContributedLuminousFlux\";\r\n            ifcPSE.PropertyType = PropertyType.LuminousFlux;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContributedLuminousFluxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampEmitterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampEmitterTypeCommon.LightEmitterNominalPower\", \"LightEmitterNominalPower\");\r\n            ifcPSE.PropertyName = \"LightEmitterNominalPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightEmitterNominalPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampEmitterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampEmitterTypeCommon.LampMaintenanceFactor\", \"LampMaintenanceFactor\");\r\n            ifcPSE.PropertyName = \"LampMaintenanceFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LampMaintenanceFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampEmitterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampEmitterTypeCommon.LampBallastType\", \"LampBallastType\");\r\n            ifcPSE.PropertyName = \"LampBallastType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_LampBallastType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LampBallastTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampEmitterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampEmitterTypeCommon.LampCompensationType\", \"LampCompensationType\");\r\n            ifcPSE.PropertyName = \"LampCompensationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_LampCompensationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LampCompensationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampEmitterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampEmitterTypeCommon.ColorAppearance\", \"ColorAppearance\");\r\n            ifcPSE.PropertyName = \"ColorAppearance\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorAppearanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampEmitterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampEmitterTypeCommon.Spectrum\", \"Spectrum\");\r\n            ifcPSE.PropertyName = \"Spectrum\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Numeric;\r\n            ifcPSE.PropertyType = PropertyType.Numeric;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpectrumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampEmitterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampEmitterTypeCommon.ColorTemperature\", \"ColorTemperature\");\r\n            ifcPSE.PropertyName = \"ColorTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampEmitterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampEmitterTypeCommon.ColorRenderingIndex\", \"ColorRenderingIndex\");\r\n            ifcPSE.PropertyName = \"ColorRenderingIndex\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorRenderingIndexCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampEmitterTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetLampEmitterTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_LampTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetLampTypeCommon = new PropertySetDescription();\r\n         propertySetLampTypeCommon.Name = \"Pset_LampTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_LampTypeCommon\"))\r\n         {\r\n            propertySetLampTypeCommon.EntityTypes.Add(IFCEntityType.IfcLampType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.ContributedLuminousFlux\", \"ContributedLuminousFlux\");\r\n            ifcPSE.PropertyName = \"ContributedLuminousFlux\";\r\n            ifcPSE.PropertyType = PropertyType.LuminousFlux;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContributedLuminousFluxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.LightEmitterNominalPower\", \"LightEmitterNominalPower\");\r\n            ifcPSE.PropertyName = \"LightEmitterNominalPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightEmitterNominalPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.LampMaintenanceFactor\", \"LampMaintenanceFactor\");\r\n            ifcPSE.PropertyName = \"LampMaintenanceFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LampMaintenanceFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.LampBallastType\", \"LampBallastType\");\r\n            ifcPSE.PropertyName = \"LampBallastType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_LampBallastType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LampBallastTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.LampCompensationType\", \"LampCompensationType\");\r\n            ifcPSE.PropertyName = \"LampCompensationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_LampCompensationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LampCompensationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.ColorAppearance\", \"ColorAppearance\");\r\n            ifcPSE.PropertyName = \"ColorAppearance\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorAppearanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.Spectrum\", \"Spectrum\");\r\n            ifcPSE.PropertyName = \"Spectrum\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Numeric;\r\n            ifcPSE.PropertyType = PropertyType.Numeric;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpectrumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.ColorTemperature\", \"ColorTemperature\");\r\n            ifcPSE.PropertyName = \"ColorTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.ColorRenderingIndex\", \"ColorRenderingIndex\");\r\n            ifcPSE.PropertyName = \"ColorRenderingIndex\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorRenderingIndexCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_LampTypeCommon\"))\r\n         {\r\n            propertySetLampTypeCommon.EntityTypes.Add(IFCEntityType.IfcLamp);\r\n            propertySetLampTypeCommon.ObjectType = \"IfcLamp\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.ContributedLuminousFlux\", \"ContributedLuminousFlux\");\r\n            ifcPSE.PropertyName = \"ContributedLuminousFlux\";\r\n            ifcPSE.PropertyType = PropertyType.LuminousFlux;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Contributed Luminous Flux\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"光束\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"광속\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContributedLuminousFluxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.LightEmitterNominalPower\", \"LightEmitterNominalPower\");\r\n            ifcPSE.PropertyName = \"LightEmitterNominalPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Light Emitter Nominal Power\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"照明器具ワット数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조명기구 와트\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightEmitterNominalPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.LampMaintenanceFactor\", \"LampMaintenanceFactor\");\r\n            ifcPSE.PropertyName = \"LampMaintenanceFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lamp Maintenance Factor\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"保守率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"보수  비율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LampMaintenanceFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.LampBallastType\", \"LampBallastType\");\r\n            ifcPSE.PropertyName = \"LampBallastType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_LampBallastType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lamp Ballast Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"安定期のタイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"안정기의 종류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LampBallastTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.LampCompensationType\", \"LampCompensationType\");\r\n            ifcPSE.PropertyName = \"LampCompensationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_LampCompensationType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lamp Compensation Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ランプ補正\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"램프보정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LampCompensationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.ColorAppearance\", \"ColorAppearance\");\r\n            ifcPSE.PropertyName = \"ColorAppearance\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Color Appearance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"色の見え方\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"색상의 외관\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorAppearanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.Spectrum\", \"Spectrum\");\r\n            ifcPSE.PropertyName = \"Spectrum\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Numeric;\r\n            ifcPSE.PropertyType = PropertyType.Numeric;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Spectrum\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"波長域\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"파장\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpectrumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.ColorTemperature\", \"ColorTemperature\");\r\n            ifcPSE.PropertyName = \"ColorTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Color Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"色温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"색온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.ColorRenderingIndex\", \"ColorRenderingIndex\");\r\n            ifcPSE.PropertyName = \"ColorRenderingIndex\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Color Rendering Index\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"演色評価数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"연색 평가수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorRenderingIndexCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_LampTypeCommon\"))\r\n         {\r\n            propertySetLampTypeCommon.EntityTypes.Add(IFCEntityType.IfcLamp);\r\n            propertySetLampTypeCommon.EntityTypes.Add(IFCEntityType.IfcLampType);\r\n            propertySetLampTypeCommon.ObjectType = \"IfcLamp\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.ContributedLuminousFlux\", \"ContributedLuminousFlux\");\r\n            ifcPSE.PropertyName = \"ContributedLuminousFlux\";\r\n            ifcPSE.PropertyType = PropertyType.LuminousFlux;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContributedLuminousFluxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.LightEmitterNominalPower\", \"LightEmitterNominalPower\");\r\n            ifcPSE.PropertyName = \"LightEmitterNominalPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightEmitterNominalPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.LampMaintenanceFactor\", \"LampMaintenanceFactor\");\r\n            ifcPSE.PropertyName = \"LampMaintenanceFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LampMaintenanceFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.LampBallastType\", \"LampBallastType\");\r\n            ifcPSE.PropertyName = \"LampBallastType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_LampBallastType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LampBallastTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.LampCompensationType\", \"LampCompensationType\");\r\n            ifcPSE.PropertyName = \"LampCompensationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_LampCompensationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LampCompensationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.ColourAppearance\", \"ColourAppearance\");\r\n            ifcPSE.PropertyName = \"ColourAppearance\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColourAppearanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.Spectrum\", \"Spectrum\");\r\n            ifcPSE.PropertyName = \"Spectrum\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Numeric;\r\n            ifcPSE.PropertyType = PropertyType.Numeric;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpectrumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.ColourTemperature\", \"ColourTemperature\");\r\n            ifcPSE.PropertyName = \"ColourTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColourTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LampTypeCommon.ColourRenderingIndex\", \"ColourRenderingIndex\");\r\n            ifcPSE.PropertyName = \"ColourRenderingIndex\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColourRenderingIndexCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLampTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetLampTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_LandRegistration(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetLandRegistration = new PropertySetDescription();\r\n         propertySetLandRegistration.Name = \"Pset_LandRegistration\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_LandRegistration\"))\r\n         {\r\n            propertySetLandRegistration.EntityTypes.Add(IFCEntityType.IfcSite);\r\n            propertySetLandRegistration.ObjectType = \"IfcSite\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_LandRegistration.LandID\", \"LandID\");\r\n            ifcPSE.PropertyName = \"LandID\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Land ID\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"IdParcelle\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"敷地ID\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"부지 ID\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LandIDCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLandRegistration.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LandRegistration.IsPermanentID\", \"IsPermanentID\");\r\n            ifcPSE.PropertyName = \"IsPermanentID\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Permanent ID\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"IdPermanent\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"恒久ID区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"영구 ID 구분\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsPermanentIDCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLandRegistration.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LandRegistration.LandTitleID\", \"LandTitleID\");\r\n            ifcPSE.PropertyName = \"LandTitleID\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Land Title ID\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"IdTitreParcelle\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"敷地番号ID\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"부지 번호 ID\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LandTitleIDCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLandRegistration.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_LandRegistration\"))\r\n         {\r\n            propertySetLandRegistration.EntityTypes.Add(IFCEntityType.IfcSite);\r\n            propertySetLandRegistration.ObjectType = \"IfcSite\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_LandRegistration.LandID\", \"LandID\");\r\n            ifcPSE.PropertyName = \"LandID\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LandIDCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLandRegistration.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LandRegistration.IsPermanentID\", \"IsPermanentID\");\r\n            ifcPSE.PropertyName = \"IsPermanentID\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsPermanentIDCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLandRegistration.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LandRegistration.LandTitleID\", \"LandTitleID\");\r\n            ifcPSE.PropertyName = \"LandTitleID\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LandTitleIDCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLandRegistration.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetLandRegistration);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_LightFixtureTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetLightFixtureTypeCommon = new PropertySetDescription();\r\n         propertySetLightFixtureTypeCommon.Name = \"Pset_LightFixtureTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_LightFixtureTypeCommon\"))\r\n         {\r\n            propertySetLightFixtureTypeCommon.EntityTypes.Add(IFCEntityType.IfcLightFixtureType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.NumberOfSources\", \"NumberOfSources\");\r\n            ifcPSE.PropertyName = \"NumberOfSources\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSourcesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.TotalWattage\", \"TotalWattage\");\r\n            ifcPSE.PropertyName = \"TotalWattage\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalWattageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.LightFixtureMountingType\", \"LightFixtureMountingType\");\r\n            ifcPSE.PropertyName = \"LightFixtureMountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_LightFixtureMountingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightFixtureMountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.LightFixturePlacingType\", \"LightFixturePlacingType\");\r\n            ifcPSE.PropertyName = \"LightFixturePlacingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_LightFixturePlacingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightFixturePlacingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.MaintenanceFactor\", \"MaintenanceFactor\");\r\n            ifcPSE.PropertyName = \"MaintenanceFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaintenanceFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.ManufacturersSpecificInformation\", \"ManufacturersSpecificInformation\");\r\n            ifcPSE.PropertyName = \"ManufacturersSpecificInformation\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ManufacturersSpecificInformationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.ArticleNumber\", \"ArticleNumber\");\r\n            ifcPSE.PropertyName = \"ArticleNumber\";\r\n            ifcPSE.PropertyType = PropertyType.IfcClassificationReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArticleNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_LightFixtureTypeCommon\"))\r\n         {\r\n            propertySetLightFixtureTypeCommon.EntityTypes.Add(IFCEntityType.IfcLightFixtureType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.NumberOfSources\", \"NumberOfSources\");\r\n            ifcPSE.PropertyName = \"NumberOfSources\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSourcesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.TotalWattage\", \"TotalWattage\");\r\n            ifcPSE.PropertyName = \"TotalWattage\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalWattageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.LightFixtureMountingType\", \"LightFixtureMountingType\");\r\n            ifcPSE.PropertyName = \"LightFixtureMountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_LightFixtureMountingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightFixtureMountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.LightFixturePlacingType\", \"LightFixturePlacingType\");\r\n            ifcPSE.PropertyName = \"LightFixturePlacingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_LightFixturePlacingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightFixturePlacingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.MaintenanceFactor\", \"MaintenanceFactor\");\r\n            ifcPSE.PropertyName = \"MaintenanceFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaintenanceFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.ManufacturersSpecificInformation\", \"ManufacturersSpecificInformation\");\r\n            ifcPSE.PropertyName = \"ManufacturersSpecificInformation\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ManufacturersSpecificInformationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.ArticleNumber\", \"ArticleNumber\");\r\n            ifcPSE.PropertyName = \"ArticleNumber\";\r\n            ifcPSE.PropertyType = PropertyType.IfcClassificationReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArticleNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_LightFixtureTypeCommon\"))\r\n         {\r\n            propertySetLightFixtureTypeCommon.EntityTypes.Add(IFCEntityType.IfcLightFixture);\r\n            propertySetLightFixtureTypeCommon.ObjectType = \"IfcLightFixture\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.NumberOfSources\", \"NumberOfSources\");\r\n            ifcPSE.PropertyName = \"NumberOfSources\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Sources\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電球数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전구수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSourcesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.TotalWattage\", \"TotalWattage\");\r\n            ifcPSE.PropertyName = \"TotalWattage\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Wattage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"総ワット数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"총 와트\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalWattageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.LightFixtureMountingType\", \"LightFixtureMountingType\");\r\n            ifcPSE.PropertyName = \"LightFixtureMountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_LightFixtureMountingType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Light Fixture Mounting Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"照明器具取付方法\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조명기구 설치방법\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightFixtureMountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.LightFixturePlacingType\", \"LightFixturePlacingType\");\r\n            ifcPSE.PropertyName = \"LightFixturePlacingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_LightFixturePlacingType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Light Fixture Placing Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"照明器具取付場所\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조명기구 설치 장소\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightFixturePlacingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.MaintenanceFactor\", \"MaintenanceFactor\");\r\n            ifcPSE.PropertyName = \"MaintenanceFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maintenance Factor\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"保守率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"보수 비율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaintenanceFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.MaximumPlenumSensibleLoad\", \"MaximumPlenumSensibleLoad\");\r\n            ifcPSE.PropertyName = \"MaximumPlenumSensibleLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Plenum Sensible Load\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPlenumSensibleLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.MaximumSpaceSensibleLoad\", \"MaximumSpaceSensibleLoad\");\r\n            ifcPSE.PropertyName = \"MaximumSpaceSensibleLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Space Sensible Load\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumSpaceSensibleLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.SensibleLoadToRadiant\", \"SensibleLoadToRadiant\");\r\n            ifcPSE.PropertyName = \"SensibleLoadToRadiant\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sensible Load To Radiant\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleLoadToRadiantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_LightFixtureTypeCommon\"))\r\n         {\r\n            propertySetLightFixtureTypeCommon.EntityTypes.Add(IFCEntityType.IfcLightFixture);\r\n            propertySetLightFixtureTypeCommon.EntityTypes.Add(IFCEntityType.IfcLightFixtureType);\r\n            propertySetLightFixtureTypeCommon.ObjectType = \"IfcLightFixture\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.NumberOfSources\", \"NumberOfSources\");\r\n            ifcPSE.PropertyName = \"NumberOfSources\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSourcesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.TotalWattage\", \"TotalWattage\");\r\n            ifcPSE.PropertyName = \"TotalWattage\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalWattageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.LightFixtureMountingType\", \"LightFixtureMountingType\");\r\n            ifcPSE.PropertyName = \"LightFixtureMountingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_LightFixtureMountingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightFixtureMountingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.LightFixturePlacingType\", \"LightFixturePlacingType\");\r\n            ifcPSE.PropertyName = \"LightFixturePlacingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_LightFixturePlacingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightFixturePlacingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.MaintenanceFactor\", \"MaintenanceFactor\");\r\n            ifcPSE.PropertyName = \"MaintenanceFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaintenanceFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.MaximumPlenumSensibleLoad\", \"MaximumPlenumSensibleLoad\");\r\n            ifcPSE.PropertyName = \"MaximumPlenumSensibleLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPlenumSensibleLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.MaximumSpaceSensibleLoad\", \"MaximumSpaceSensibleLoad\");\r\n            ifcPSE.PropertyName = \"MaximumSpaceSensibleLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumSpaceSensibleLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeCommon.SensibleLoadToRadiant\", \"SensibleLoadToRadiant\");\r\n            ifcPSE.PropertyName = \"SensibleLoadToRadiant\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleLoadToRadiantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetLightFixtureTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_LightFixtureTypeExitSign(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetLightFixtureTypeExitSign = new PropertySetDescription();\r\n         propertySetLightFixtureTypeExitSign.Name = \"Pset_LightFixtureTypeExitSign\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_LightFixtureTypeExitSign\"))\r\n         {\r\n            propertySetLightFixtureTypeExitSign.EntityTypes.Add(IFCEntityType.IfcLightFixtureType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeExitSign.MinimumTextHeight\", \"MinimumTextHeight\");\r\n            ifcPSE.PropertyName = \"MinimumTextHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumTextHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeExitSign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeExitSign.SelfTestFunction\", \"SelfTestFunction\");\r\n            ifcPSE.PropertyName = \"SelfTestFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_SelfTestType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SelfTestFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeExitSign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeExitSign.BackupSupplySystem\", \"BackupSupplySystem\");\r\n            ifcPSE.PropertyName = \"BackupSupplySystem\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BackupSupplySystemType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BackupSupplySystemCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeExitSign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeExitSign.PictogramEscapeDirection\", \"PictogramEscapeDirection\");\r\n            ifcPSE.PropertyName = \"PictogramEscapeDirection\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_PictogramEscapeDirectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PictogramEscapeDirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeExitSign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeExitSign.Addressablility\", \"Addressablility\");\r\n            ifcPSE.PropertyName = \"Addressablility\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AddressabilityType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AddressablilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeExitSign.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetLightFixtureTypeExitSign);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_LightFixtureTypeSecurityLighting(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetLightFixtureTypeSecurityLighting = new PropertySetDescription();\r\n         propertySetLightFixtureTypeSecurityLighting.Name = \"Pset_LightFixtureTypeSecurityLighting\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_LightFixtureTypeSecurityLighting\"))\r\n         {\r\n            propertySetLightFixtureTypeSecurityLighting.EntityTypes.Add(IFCEntityType.IfcLightFixture);\r\n            propertySetLightFixtureTypeSecurityLighting.ObjectType = \"IfcLightFixture\";\r\n            propertySetLightFixtureTypeSecurityLighting.PredefinedType = \"SECURITYLIGHTING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeSecurityLighting.SecurityLightingType\", \"SecurityLightingType\");\r\n            ifcPSE.PropertyName = \"SecurityLightingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_LightFixtureSecurityLightingType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Security Lighting Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"防犯灯\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"방범등\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecurityLightingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeSecurityLighting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeSecurityLighting.FixtureHeight\", \"FixtureHeight\");\r\n            ifcPSE.PropertyName = \"FixtureHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fixture Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"器具の高さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"기구의 높이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FixtureHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeSecurityLighting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeSecurityLighting.SelfTestFunction\", \"SelfTestFunction\");\r\n            ifcPSE.PropertyName = \"SelfTestFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SelfTestType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Self Test Function\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"自己診断機能\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"자기 진단 기능\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SelfTestFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeSecurityLighting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeSecurityLighting.BackupSupplySystem\", \"BackupSupplySystem\");\r\n            ifcPSE.PropertyName = \"BackupSupplySystem\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_BackupSupplySystemType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Backup Supply System\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電源バックアップシステム\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전원백업 시스템\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BackupSupplySystemCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeSecurityLighting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeSecurityLighting.PictogramEscapeDirection\", \"PictogramEscapeDirection\");\r\n            ifcPSE.PropertyName = \"PictogramEscapeDirection\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_PictogramEscapeDirectionType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pictogram Escape Direction\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"避難標識の向き\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"피난 표지판 방향\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PictogramEscapeDirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeSecurityLighting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeSecurityLighting.Addressablility\", \"Addressablility\");\r\n            ifcPSE.PropertyName = \"Addressablility\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AddressabilityType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Addressablility\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"アドレス指定能力\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"주소 지정 능력\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AddressablilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeSecurityLighting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_LightFixtureTypeSecurityLighting\"))\r\n         {\r\n            propertySetLightFixtureTypeSecurityLighting.EntityTypes.Add(IFCEntityType.IfcLightFixture);\r\n            propertySetLightFixtureTypeSecurityLighting.EntityTypes.Add(IFCEntityType.IfcLightFixtureType);\r\n            propertySetLightFixtureTypeSecurityLighting.ObjectType = \"IfcLightFixture\";\r\n            propertySetLightFixtureTypeSecurityLighting.PredefinedType = \"SECURITYLIGHTING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeSecurityLighting.SecurityLightingType\", \"SecurityLightingType\");\r\n            ifcPSE.PropertyName = \"SecurityLightingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_LightFixtureSecurityLightingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecurityLightingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeSecurityLighting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeSecurityLighting.FixtureHeight\", \"FixtureHeight\");\r\n            ifcPSE.PropertyName = \"FixtureHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FixtureHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeSecurityLighting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeSecurityLighting.SelfTestFunction\", \"SelfTestFunction\");\r\n            ifcPSE.PropertyName = \"SelfTestFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SelfTestType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SelfTestFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeSecurityLighting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeSecurityLighting.BackupSupplySystem\", \"BackupSupplySystem\");\r\n            ifcPSE.PropertyName = \"BackupSupplySystem\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_BackupSupplySystemType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BackupSupplySystemCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeSecurityLighting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeSecurityLighting.PictogramEscapeDirection\", \"PictogramEscapeDirection\");\r\n            ifcPSE.PropertyName = \"PictogramEscapeDirection\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_PictogramEscapeDirectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PictogramEscapeDirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeSecurityLighting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeSecurityLighting.Addressablility\", \"Addressablility\");\r\n            ifcPSE.PropertyName = \"Addressablility\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AddressabilityType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AddressablilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeSecurityLighting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetLightFixtureTypeSecurityLighting);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_LightFixtureTypeThermal(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetLightFixtureTypeThermal = new PropertySetDescription();\r\n         propertySetLightFixtureTypeThermal.Name = \"Pset_LightFixtureTypeThermal\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_LightFixtureTypeThermal\"))\r\n         {\r\n            propertySetLightFixtureTypeThermal.EntityTypes.Add(IFCEntityType.IfcLightFixtureType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeThermal.MaximumPlenumSensibleLoad\", \"MaximumPlenumSensibleLoad\");\r\n            ifcPSE.PropertyName = \"MaximumPlenumSensibleLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPlenumSensibleLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeThermal.MaximumSpaceSensibleLoad\", \"MaximumSpaceSensibleLoad\");\r\n            ifcPSE.PropertyName = \"MaximumSpaceSensibleLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumSpaceSensibleLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeThermal.SensibleLoadToRadiant\", \"SensibleLoadToRadiant\");\r\n            ifcPSE.PropertyName = \"SensibleLoadToRadiant\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleLoadToRadiantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeThermal.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_LightFixtureTypeThermal\"))\r\n         {\r\n            propertySetLightFixtureTypeThermal.EntityTypes.Add(IFCEntityType.IfcLightFixtureType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeThermal.MaximumPlenumSensibleLoad\", \"MaximumPlenumSensibleLoad\");\r\n            ifcPSE.PropertyName = \"MaximumPlenumSensibleLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPlenumSensibleLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeThermal.MaximumSpaceSensibleLoad\", \"MaximumSpaceSensibleLoad\");\r\n            ifcPSE.PropertyName = \"MaximumSpaceSensibleLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumSpaceSensibleLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LightFixtureTypeThermal.SensibleLoadToRadiant\", \"SensibleLoadToRadiant\");\r\n            ifcPSE.PropertyName = \"SensibleLoadToRadiant\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleLoadToRadiantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLightFixtureTypeThermal.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetLightFixtureTypeThermal);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_LinearReferencingMethod(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetLinearReferencingMethod = new PropertySetDescription();\r\n         propertySetLinearReferencingMethod.Name = \"Pset_LinearReferencingMethod\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_LinearReferencingMethod\"))\r\n         {\r\n            propertySetLinearReferencingMethod.EntityTypes.Add(IFCEntityType.IfcAlignment);\r\n            propertySetLinearReferencingMethod.EntityTypes.Add(IFCEntityType.IfcReferent);\r\n            propertySetLinearReferencingMethod.ObjectType = \"IfcAlignment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_LinearReferencingMethod.LRMName\", \"LRMName\");\r\n            ifcPSE.PropertyName = \"LRMName\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LRMNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLinearReferencingMethod.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LinearReferencingMethod.LRMType\", \"LRMType\");\r\n            ifcPSE.PropertyName = \"LRMType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_LRMType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LRMTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLinearReferencingMethod.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LinearReferencingMethod.UserDefinedLRMType\", \"UserDefinedLRMType\");\r\n            ifcPSE.PropertyName = \"UserDefinedLRMType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UserDefinedLRMTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLinearReferencingMethod.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LinearReferencingMethod.LRMUnit\", \"LRMUnit\");\r\n            ifcPSE.PropertyName = \"LRMUnit\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LRMUnitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLinearReferencingMethod.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_LinearReferencingMethod.LRMConstraint\", \"LRMConstraint\");\r\n            ifcPSE.PropertyName = \"LRMConstraint\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LRMConstraintCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetLinearReferencingMethod.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetLinearReferencingMethod);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaintenanceStrategy(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaintenanceStrategy = new PropertySetDescription();\r\n         propertySetMaintenanceStrategy.Name = \"Pset_MaintenanceStrategy\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaintenanceStrategy\"))\r\n         {\r\n            propertySetMaintenanceStrategy.EntityTypes.Add(IFCEntityType.IfcAsset);\r\n            propertySetMaintenanceStrategy.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetMaintenanceStrategy.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            propertySetMaintenanceStrategy.EntityTypes.Add(IFCEntityType.IfcElementType);\r\n            propertySetMaintenanceStrategy.ObjectType = \"IfcAsset\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaintenanceStrategy.AssetCriticality\", \"AssetCriticality\");\r\n            ifcPSE.PropertyName = \"AssetCriticality\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AssetRating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssetCriticalityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaintenanceStrategy.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaintenanceStrategy.AssetFrailty\", \"AssetFrailty\");\r\n            ifcPSE.PropertyName = \"AssetFrailty\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AssetRating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssetFrailtyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaintenanceStrategy.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaintenanceStrategy.AssetPriority\", \"AssetPriority\");\r\n            ifcPSE.PropertyName = \"AssetPriority\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AssetRating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssetPriorityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaintenanceStrategy.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaintenanceStrategy.MonitoringType\", \"MonitoringType\");\r\n            ifcPSE.PropertyName = \"MonitoringType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_MonitoringType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MonitoringTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaintenanceStrategy.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaintenanceStrategy.AccidentResponse\", \"AccidentResponse\");\r\n            ifcPSE.PropertyName = \"AccidentResponse\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AccidentResponse);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccidentResponseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaintenanceStrategy.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaintenanceStrategy);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaintenanceTriggerCondition(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaintenanceTriggerCondition = new PropertySetDescription();\r\n         propertySetMaintenanceTriggerCondition.Name = \"Pset_MaintenanceTriggerCondition\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaintenanceTriggerCondition\"))\r\n         {\r\n            propertySetMaintenanceTriggerCondition.EntityTypes.Add(IFCEntityType.IfcAsset);\r\n            propertySetMaintenanceTriggerCondition.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetMaintenanceTriggerCondition.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            propertySetMaintenanceTriggerCondition.EntityTypes.Add(IFCEntityType.IfcElementType);\r\n            propertySetMaintenanceTriggerCondition.ObjectType = \"IfcAsset\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaintenanceTriggerCondition.ConditionTargetPerformance\", \"ConditionTargetPerformance\");\r\n            ifcPSE.PropertyName = \"ConditionTargetPerformance\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AssetRating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConditionTargetPerformanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaintenanceTriggerCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaintenanceTriggerCondition.ConditionMaintenanceLevel\", \"ConditionMaintenanceLevel\");\r\n            ifcPSE.PropertyName = \"ConditionMaintenanceLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AssetRating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConditionMaintenanceLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaintenanceTriggerCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaintenanceTriggerCondition.ConditionReplacementLevel\", \"ConditionReplacementLevel\");\r\n            ifcPSE.PropertyName = \"ConditionReplacementLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AssetRating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConditionReplacementLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaintenanceTriggerCondition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaintenanceTriggerCondition.ConditionDisposalLevel\", \"ConditionDisposalLevel\");\r\n            ifcPSE.PropertyName = \"ConditionDisposalLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AssetRating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConditionDisposalLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaintenanceTriggerCondition.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaintenanceTriggerCondition);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaintenanceTriggerDuration(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaintenanceTriggerDuration = new PropertySetDescription();\r\n         propertySetMaintenanceTriggerDuration.Name = \"Pset_MaintenanceTriggerDuration\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaintenanceTriggerDuration\"))\r\n         {\r\n            propertySetMaintenanceTriggerDuration.EntityTypes.Add(IFCEntityType.IfcAsset);\r\n            propertySetMaintenanceTriggerDuration.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetMaintenanceTriggerDuration.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            propertySetMaintenanceTriggerDuration.EntityTypes.Add(IFCEntityType.IfcElementType);\r\n            propertySetMaintenanceTriggerDuration.ObjectType = \"IfcAsset\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaintenanceTriggerDuration.DurationTargetPerformance\", \"DurationTargetPerformance\");\r\n            ifcPSE.PropertyName = \"DurationTargetPerformance\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DurationTargetPerformanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaintenanceTriggerDuration.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaintenanceTriggerDuration.DurationMaintenanceLevel\", \"DurationMaintenanceLevel\");\r\n            ifcPSE.PropertyName = \"DurationMaintenanceLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DurationMaintenanceLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaintenanceTriggerDuration.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaintenanceTriggerDuration.DurationReplacementLevel\", \"DurationReplacementLevel\");\r\n            ifcPSE.PropertyName = \"DurationReplacementLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DurationReplacementLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaintenanceTriggerDuration.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaintenanceTriggerDuration.DurationDisposalLevel\", \"DurationDisposalLevel\");\r\n            ifcPSE.PropertyName = \"DurationDisposalLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DurationDisposalLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaintenanceTriggerDuration.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaintenanceTriggerDuration);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaintenanceTriggerPerformance(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaintenanceTriggerPerformance = new PropertySetDescription();\r\n         propertySetMaintenanceTriggerPerformance.Name = \"Pset_MaintenanceTriggerPerformance\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaintenanceTriggerPerformance\"))\r\n         {\r\n            propertySetMaintenanceTriggerPerformance.EntityTypes.Add(IFCEntityType.IfcAsset);\r\n            propertySetMaintenanceTriggerPerformance.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetMaintenanceTriggerPerformance.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            propertySetMaintenanceTriggerPerformance.EntityTypes.Add(IFCEntityType.IfcElementType);\r\n            propertySetMaintenanceTriggerPerformance.ObjectType = \"IfcAsset\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaintenanceTriggerPerformance.TargetPerformance\", \"TargetPerformance\");\r\n            ifcPSE.PropertyName = \"TargetPerformance\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TargetPerformanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaintenanceTriggerPerformance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaintenanceTriggerPerformance.PerformanceMaintenanceLevel\", \"PerformanceMaintenanceLevel\");\r\n            ifcPSE.PropertyName = \"PerformanceMaintenanceLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerformanceMaintenanceLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaintenanceTriggerPerformance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaintenanceTriggerPerformance.ReplacementLevel\", \"ReplacementLevel\");\r\n            ifcPSE.PropertyName = \"ReplacementLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReplacementLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaintenanceTriggerPerformance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaintenanceTriggerPerformance.DisposalLevel\", \"DisposalLevel\");\r\n            ifcPSE.PropertyName = \"DisposalLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DisposalLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaintenanceTriggerPerformance.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaintenanceTriggerPerformance);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ManufacturerOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetManufacturerOccurrence = new PropertySetDescription();\r\n         propertySetManufacturerOccurrence.Name = \"Pset_ManufacturerOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ManufacturerOccurrence\"))\r\n         {\r\n            propertySetManufacturerOccurrence.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.AcquisitionDate\", \"AcquisitionDate\");\r\n            ifcPSE.PropertyName = \"AcquisitionDate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcquisitionDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.BarCode\", \"BarCode\");\r\n            ifcPSE.PropertyName = \"BarCode\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BarCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.SerialNumber\", \"SerialNumber\");\r\n            ifcPSE.PropertyName = \"SerialNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SerialNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.BatchReference\", \"BatchReference\");\r\n            ifcPSE.PropertyName = \"BatchReference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BatchReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ManufacturerOccurrence\"))\r\n         {\r\n            propertySetManufacturerOccurrence.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.AcquisitionDate\", \"AcquisitionDate\");\r\n            ifcPSE.PropertyName = \"AcquisitionDate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcquisitionDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.BarCode\", \"BarCode\");\r\n            ifcPSE.PropertyName = \"BarCode\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BarCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.SerialNumber\", \"SerialNumber\");\r\n            ifcPSE.PropertyName = \"SerialNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SerialNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.BatchReference\", \"BatchReference\");\r\n            ifcPSE.PropertyName = \"BatchReference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BatchReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ManufacturerOccurrence\"))\r\n         {\r\n            propertySetManufacturerOccurrence.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetManufacturerOccurrence.ObjectType = \"IfcElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.AcquisitionDate\", \"AcquisitionDate\");\r\n            ifcPSE.PropertyName = \"AcquisitionDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Acquisition Date\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcquisitionDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.BarCode\", \"BarCode\");\r\n            ifcPSE.PropertyName = \"BarCode\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Bar Code\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BarCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.SerialNumber\", \"SerialNumber\");\r\n            ifcPSE.PropertyName = \"SerialNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Serial Number\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SerialNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.BatchReference\", \"BatchReference\");\r\n            ifcPSE.PropertyName = \"BatchReference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Batch Reference\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BatchReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.AssemblyPlace\", \"AssemblyPlace\");\r\n            ifcPSE.PropertyName = \"AssemblyPlace\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AssemblyPlace);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Assembly Place\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyPlaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ManufacturerOccurrence\"))\r\n         {\r\n            propertySetManufacturerOccurrence.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetManufacturerOccurrence.ObjectType = \"IfcElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.AcquisitionDate\", \"AcquisitionDate\");\r\n            ifcPSE.PropertyName = \"AcquisitionDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcquisitionDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.BarCode\", \"BarCode\");\r\n            ifcPSE.PropertyName = \"BarCode\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BarCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.SerialNumber\", \"SerialNumber\");\r\n            ifcPSE.PropertyName = \"SerialNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SerialNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.BatchReference\", \"BatchReference\");\r\n            ifcPSE.PropertyName = \"BatchReference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BatchReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.AssemblyPlace\", \"AssemblyPlace\");\r\n            ifcPSE.PropertyName = \"AssemblyPlace\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AssemblyPlace);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyPlaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerOccurrence.ManufacturingDate\", \"ManufacturingDate\");\r\n            ifcPSE.PropertyName = \"ManufacturingDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ManufacturingDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetManufacturerOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ManufacturerTypeInformation(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetManufacturerTypeInformation = new PropertySetDescription();\r\n         propertySetManufacturerTypeInformation.Name = \"Pset_ManufacturerTypeInformation\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ManufacturerTypeInformation\"))\r\n         {\r\n            propertySetManufacturerTypeInformation.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.ModelReference\", \"ModelReference\");\r\n            ifcPSE.PropertyName = \"ModelReference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ModelReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.ModelLabel\", \"ModelLabel\");\r\n            ifcPSE.PropertyName = \"ModelLabel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ModelLabelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.Manufacturer\", \"Manufacturer\");\r\n            ifcPSE.PropertyName = \"Manufacturer\";\r\n            ifcPSE.PropertyType = PropertyType.IfcOrganization;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ManufacturerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.ShippingWeight\", \"ShippingWeight\");\r\n            ifcPSE.PropertyName = \"ShippingWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShippingWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.OperatingWeight\", \"OperatingWeight\");\r\n            ifcPSE.PropertyName = \"OperatingWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperatingWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.ArticleNumber\", \"ArticleNumber\");\r\n            ifcPSE.PropertyName = \"ArticleNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArticleNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ManufacturerTypeInformation\"))\r\n         {\r\n            propertySetManufacturerTypeInformation.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.ArticleNumber\", \"ArticleNumber\");\r\n            ifcPSE.PropertyName = \"ArticleNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArticleNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.ModelReference\", \"ModelReference\");\r\n            ifcPSE.PropertyName = \"ModelReference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ModelReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.ModelLabel\", \"ModelLabel\");\r\n            ifcPSE.PropertyName = \"ModelLabel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ModelLabelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.Manufacturer\", \"Manufacturer\");\r\n            ifcPSE.PropertyName = \"Manufacturer\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ManufacturerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.ProductionYear\", \"ProductionYear\");\r\n            ifcPSE.PropertyName = \"ProductionYear\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProductionYearCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ManufacturerTypeInformation\"))\r\n         {\r\n            propertySetManufacturerTypeInformation.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetManufacturerTypeInformation.ObjectType = \"IfcElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.GlobalTradeItemNumber\", \"GlobalTradeItemNumber\");\r\n            ifcPSE.PropertyName = \"GlobalTradeItemNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Global Trade Item Number\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlobalTradeItemNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.ArticleNumber\", \"ArticleNumber\");\r\n            ifcPSE.PropertyName = \"ArticleNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Article Number\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArticleNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.ModelReference\", \"ModelReference\");\r\n            ifcPSE.PropertyName = \"ModelReference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Model Reference\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ModelReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.ModelLabel\", \"ModelLabel\");\r\n            ifcPSE.PropertyName = \"ModelLabel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Model Label\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ModelLabelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.Manufacturer\", \"Manufacturer\");\r\n            ifcPSE.PropertyName = \"Manufacturer\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Manufacturer\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ManufacturerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.ProductionYear\", \"ProductionYear\");\r\n            ifcPSE.PropertyName = \"ProductionYear\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Production Year\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProductionYearCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.AssemblyPlace\", \"AssemblyPlace\");\r\n            ifcPSE.PropertyName = \"AssemblyPlace\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AssemblyPlace);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Assembly Place\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyPlaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ManufacturerTypeInformation\"))\r\n         {\r\n            propertySetManufacturerTypeInformation.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetManufacturerTypeInformation.EntityTypes.Add(IFCEntityType.IfcElementType);\r\n            propertySetManufacturerTypeInformation.ObjectType = \"IfcElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.GlobalTradeItemNumber\", \"GlobalTradeItemNumber\");\r\n            ifcPSE.PropertyName = \"GlobalTradeItemNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlobalTradeItemNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.ArticleNumber\", \"ArticleNumber\");\r\n            ifcPSE.PropertyName = \"ArticleNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArticleNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.ModelReference\", \"ModelReference\");\r\n            ifcPSE.PropertyName = \"ModelReference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ModelReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.ModelLabel\", \"ModelLabel\");\r\n            ifcPSE.PropertyName = \"ModelLabel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ModelLabelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.Manufacturer\", \"Manufacturer\");\r\n            ifcPSE.PropertyName = \"Manufacturer\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ManufacturerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.ProductionYear\", \"ProductionYear\");\r\n            ifcPSE.PropertyName = \"ProductionYear\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProductionYearCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.AssemblyPlace\", \"AssemblyPlace\");\r\n            ifcPSE.PropertyName = \"AssemblyPlace\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AssemblyPlace);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyPlaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.OperationalDocument\", \"OperationalDocument\");\r\n            ifcPSE.PropertyName = \"OperationalDocument\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalDocumentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.SafetyDocument\", \"SafetyDocument\");\r\n            ifcPSE.PropertyName = \"SafetyDocument\";\r\n            ifcPSE.PropertyType = PropertyType.IfcDocumentReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SafetyDocumentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ManufacturerTypeInformation.PerformanceCertificate\", \"PerformanceCertificate\");\r\n            ifcPSE.PropertyName = \"PerformanceCertificate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcDocumentReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerformanceCertificateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetManufacturerTypeInformation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetManufacturerTypeInformation);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MarineFacilityTransportation(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMarineFacilityTransportation = new PropertySetDescription();\r\n         propertySetMarineFacilityTransportation.Name = \"Pset_MarineFacilityTransportation\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MarineFacilityTransportation\"))\r\n         {\r\n            propertySetMarineFacilityTransportation.EntityTypes.Add(IFCEntityType.IfcMarineFacility);\r\n            propertySetMarineFacilityTransportation.ObjectType = \"IfcMarineFacility\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarineFacilityTransportation.Berths\", \"Berths\");\r\n            ifcPSE.PropertyName = \"Berths\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BerthsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarineFacilityTransportation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarineFacilityTransportation.BerthGrade\", \"BerthGrade\");\r\n            ifcPSE.PropertyName = \"BerthGrade\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BerthGradeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarineFacilityTransportation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarineFacilityTransportation.BerthCargoWeight\", \"BerthCargoWeight\");\r\n            ifcPSE.PropertyName = \"BerthCargoWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BerthCargoWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarineFacilityTransportation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMarineFacilityTransportation);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MarinePartChamberCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMarinePartChamberCommon = new PropertySetDescription();\r\n         propertySetMarinePartChamberCommon.Name = \"Pset_MarinePartChamberCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MarinePartChamberCommon\"))\r\n         {\r\n            propertySetMarinePartChamberCommon.EntityTypes.Add(IFCEntityType.IfcMarinePart);\r\n            propertySetMarinePartChamberCommon.ObjectType = \"IfcMarinePart\";\r\n            propertySetMarinePartChamberCommon.PredefinedType = \"CHAMBER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarinePartChamberCommon.EffectiveChamberSize\", \"EffectiveChamberSize\");\r\n            ifcPSE.PropertyName = \"EffectiveChamberSize\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectiveChamberSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarinePartChamberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarinePartChamberCommon.StructuralType\", \"StructuralType\");\r\n            ifcPSE.PropertyName = \"StructuralType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StructuralTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarinePartChamberCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMarinePartChamberCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MarineVehicleCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMarineVehicleCommon = new PropertySetDescription();\r\n         propertySetMarineVehicleCommon.Name = \"Pset_MarineVehicleCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MarineVehicleCommon\"))\r\n         {\r\n            propertySetMarineVehicleCommon.EntityTypes.Add(IFCEntityType.IfcVehicle);\r\n            propertySetMarineVehicleCommon.EntityTypes.Add(IFCEntityType.IfcVehicleType);\r\n            propertySetMarineVehicleCommon.ObjectType = \"IfcVehicle\";\r\n            propertySetMarineVehicleCommon.PredefinedType = \"VEHICLEMARINE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarineVehicleCommon.LengthBetweenPerpendiculars\", \"LengthBetweenPerpendiculars\");\r\n            ifcPSE.PropertyName = \"LengthBetweenPerpendiculars\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthBetweenPerpendicularsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarineVehicleCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarineVehicleCommon.VesselDepth\", \"VesselDepth\");\r\n            ifcPSE.PropertyName = \"VesselDepth\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VesselDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarineVehicleCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarineVehicleCommon.VesselDraft\", \"VesselDraft\");\r\n            ifcPSE.PropertyName = \"VesselDraft\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VesselDraftCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarineVehicleCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarineVehicleCommon.AboveDeckProjectedWindEnd\", \"AboveDeckProjectedWindEnd\");\r\n            ifcPSE.PropertyName = \"AboveDeckProjectedWindEnd\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AboveDeckProjectedWindEndCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarineVehicleCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarineVehicleCommon.AboveDeckProjectedWindSide\", \"AboveDeckProjectedWindSide\");\r\n            ifcPSE.PropertyName = \"AboveDeckProjectedWindSide\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AboveDeckProjectedWindSideCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarineVehicleCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarineVehicleCommon.Displacement\", \"Displacement\");\r\n            ifcPSE.PropertyName = \"Displacement\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DisplacementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarineVehicleCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarineVehicleCommon.CargoDeadWeight\", \"CargoDeadWeight\");\r\n            ifcPSE.PropertyName = \"CargoDeadWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CargoDeadWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarineVehicleCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarineVehicleCommon.LaneMeters\", \"LaneMeters\");\r\n            ifcPSE.PropertyName = \"LaneMeters\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LaneMetersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarineVehicleCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMarineVehicleCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MarineVehicleDesignCriteria(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMarineVehicleDesignCriteria = new PropertySetDescription();\r\n         propertySetMarineVehicleDesignCriteria.Name = \"Pset_MarineVehicleDesignCriteria\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MarineVehicleDesignCriteria\"))\r\n         {\r\n            propertySetMarineVehicleDesignCriteria.EntityTypes.Add(IFCEntityType.IfcVehicle);\r\n            propertySetMarineVehicleDesignCriteria.EntityTypes.Add(IFCEntityType.IfcVehicleType);\r\n            propertySetMarineVehicleDesignCriteria.ObjectType = \"IfcVehicle\";\r\n            propertySetMarineVehicleDesignCriteria.PredefinedType = \"VEHICLEMARINE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarineVehicleDesignCriteria.AllowableHullPressure\", \"AllowableHullPressure\");\r\n            ifcPSE.PropertyName = \"AllowableHullPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AllowableHullPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarineVehicleDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarineVehicleDesignCriteria.SoftnessCoefficient\", \"SoftnessCoefficient\");\r\n            ifcPSE.PropertyName = \"SoftnessCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoftnessCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarineVehicleDesignCriteria.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMarineVehicleDesignCriteria);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MarkerGeneral(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMarkerGeneral = new PropertySetDescription();\r\n         propertySetMarkerGeneral.Name = \"Pset_MarkerGeneral\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MarkerGeneral\"))\r\n         {\r\n            propertySetMarkerGeneral.EntityTypes.Add(IFCEntityType.IfcElementAssembly);\r\n            propertySetMarkerGeneral.EntityTypes.Add(IFCEntityType.IfcElementAssemblyType);\r\n            propertySetMarkerGeneral.ObjectType = \"IfcElementAssembly\";\r\n            propertySetMarkerGeneral.PredefinedType = \"SIGNALASSEMBLY\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarkerGeneral.ApproachSpeed\", \"ApproachSpeed\");\r\n            ifcPSE.PropertyName = \"ApproachSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApproachSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarkerGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarkerGeneral.MarkerType\", \"MarkerType\");\r\n            ifcPSE.PropertyName = \"MarkerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_MarkerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarkerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarkerGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarkerGeneral.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarkerGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarkerGeneral.Symbol\", \"Symbol\");\r\n            ifcPSE.PropertyName = \"Symbol\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SymbolCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarkerGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarkerGeneral.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarkerGeneral.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMarkerGeneral);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MarkingLinesCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMarkingLinesCommon = new PropertySetDescription();\r\n         propertySetMarkingLinesCommon.Name = \"Pset_MarkingLinesCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MarkingLinesCommon\"))\r\n         {\r\n            propertySetMarkingLinesCommon.EntityTypes.Add(IFCEntityType.IfcSurfaceFeature);\r\n            propertySetMarkingLinesCommon.ObjectType = \"IfcSurfaceFeature\";\r\n            propertySetMarkingLinesCommon.PredefinedType = \"LINEMARKING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarkingLinesCommon.DashedLine\", \"DashedLine\");\r\n            ifcPSE.PropertyName = \"DashedLine\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DashedLineCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarkingLinesCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarkingLinesCommon.DashedLinePattern\", \"DashedLinePattern\");\r\n            ifcPSE.PropertyName = \"DashedLinePattern\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DashedLinePatternCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarkingLinesCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MarkingLinesCommon.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMarkingLinesCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMarkingLinesCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaterialCombustion(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaterialCombustion = new PropertySetDescription();\r\n         propertySetMaterialCombustion.Name = \"Pset_MaterialCombustion\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialCombustion\"))\r\n         {\r\n            propertySetMaterialCombustion.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialCombustion.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialCombustion.SpecificHeatCapacity\", \"SpecificHeatCapacity\");\r\n            ifcPSE.PropertyName = \"SpecificHeatCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.SpecificHeatCapacity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Specific Heat Capacity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecificHeatCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialCombustion.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialCombustion.N20Content\", \"N20Content\");\r\n            ifcPSE.PropertyName = \"N20Content\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"N20 Content\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.N20ContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialCombustion.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialCombustion.COContent\", \"COContent\");\r\n            ifcPSE.PropertyName = \"COContent\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"COContent\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.COContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialCombustion.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialCombustion.CO2Content\", \"CO2Content\");\r\n            ifcPSE.PropertyName = \"CO2Content\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"CO2 Content\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CO2ContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialCombustion.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialCombustion\"))\r\n         {\r\n            propertySetMaterialCombustion.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialCombustion.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialCombustion.SpecificHeatCapacity\", \"SpecificHeatCapacity\");\r\n            ifcPSE.PropertyName = \"SpecificHeatCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.SpecificHeatCapacity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecificHeatCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialCombustion.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialCombustion.N20Content\", \"N20Content\");\r\n            ifcPSE.PropertyName = \"N20Content\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.N20ContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialCombustion.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialCombustion.COContent\", \"COContent\");\r\n            ifcPSE.PropertyName = \"COContent\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.COContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialCombustion.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialCombustion.CO2Content\", \"CO2Content\");\r\n            ifcPSE.PropertyName = \"CO2Content\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CO2ContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialCombustion.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaterialCombustion);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaterialCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaterialCommon = new PropertySetDescription();\r\n         propertySetMaterialCommon.Name = \"Pset_MaterialCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialCommon\"))\r\n         {\r\n            propertySetMaterialCommon.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialCommon.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialCommon.MolecularWeight\", \"MolecularWeight\");\r\n            ifcPSE.PropertyName = \"MolecularWeight\";\r\n            ifcPSE.PropertyType = PropertyType.MolecularWeight;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Molecular Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MolecularWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialCommon.Porosity\", \"Porosity\");\r\n            ifcPSE.PropertyName = \"Porosity\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Porosity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PorosityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialCommon.MassDensity\", \"MassDensity\");\r\n            ifcPSE.PropertyName = \"MassDensity\";\r\n            ifcPSE.PropertyType = PropertyType.MassDensity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mass Density\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MassDensityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialCommon\"))\r\n         {\r\n            propertySetMaterialCommon.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialCommon.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialCommon.MolecularWeight\", \"MolecularWeight\");\r\n            ifcPSE.PropertyName = \"MolecularWeight\";\r\n            ifcPSE.PropertyType = PropertyType.MolecularWeight;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MolecularWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialCommon.Porosity\", \"Porosity\");\r\n            ifcPSE.PropertyName = \"Porosity\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PorosityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialCommon.MassDensity\", \"MassDensity\");\r\n            ifcPSE.PropertyName = \"MassDensity\";\r\n            ifcPSE.PropertyType = PropertyType.MassDensity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MassDensityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaterialCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaterialConcrete(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaterialConcrete = new PropertySetDescription();\r\n         propertySetMaterialConcrete.Name = \"Pset_MaterialConcrete\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialConcrete\"))\r\n         {\r\n            propertySetMaterialConcrete.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialConcrete.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialConcrete.CompressiveStrength\", \"CompressiveStrength\");\r\n            ifcPSE.PropertyName = \"CompressiveStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Compressive Strength\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressiveStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialConcrete.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialConcrete.MaxAggregateSize\", \"MaxAggregateSize\");\r\n            ifcPSE.PropertyName = \"MaxAggregateSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Max Aggregate Size\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaxAggregateSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialConcrete.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialConcrete.AdmixturesDescription\", \"AdmixturesDescription\");\r\n            ifcPSE.PropertyName = \"AdmixturesDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Admixtures Description\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdmixturesDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialConcrete.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialConcrete.Workability\", \"Workability\");\r\n            ifcPSE.PropertyName = \"Workability\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Workability\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkabilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialConcrete.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialConcrete.WaterImpermeability\", \"WaterImpermeability\");\r\n            ifcPSE.PropertyName = \"WaterImpermeability\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Impermeability\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterImpermeabilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialConcrete.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialConcrete.ProtectivePoreRatio\", \"ProtectivePoreRatio\");\r\n            ifcPSE.PropertyName = \"ProtectivePoreRatio\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Protective Pore Ratio\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProtectivePoreRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialConcrete.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialConcrete\"))\r\n         {\r\n            propertySetMaterialConcrete.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialConcrete.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialConcrete.CompressiveStrength\", \"CompressiveStrength\");\r\n            ifcPSE.PropertyName = \"CompressiveStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressiveStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialConcrete.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialConcrete.MaxAggregateSize\", \"MaxAggregateSize\");\r\n            ifcPSE.PropertyName = \"MaxAggregateSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaxAggregateSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialConcrete.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialConcrete.AdmixturesDescription\", \"AdmixturesDescription\");\r\n            ifcPSE.PropertyName = \"AdmixturesDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdmixturesDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialConcrete.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialConcrete.Workability\", \"Workability\");\r\n            ifcPSE.PropertyName = \"Workability\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkabilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialConcrete.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialConcrete.WaterImpermeability\", \"WaterImpermeability\");\r\n            ifcPSE.PropertyName = \"WaterImpermeability\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterImpermeabilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialConcrete.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialConcrete.ProtectivePoreRatio\", \"ProtectivePoreRatio\");\r\n            ifcPSE.PropertyName = \"ProtectivePoreRatio\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProtectivePoreRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialConcrete.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaterialConcrete);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaterialEnergy(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaterialEnergy = new PropertySetDescription();\r\n         propertySetMaterialEnergy.Name = \"Pset_MaterialEnergy\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialEnergy\"))\r\n         {\r\n            propertySetMaterialEnergy.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialEnergy.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialEnergy.ViscosityTemperatureDerivative\", \"ViscosityTemperatureDerivative\");\r\n            ifcPSE.PropertyName = \"ViscosityTemperatureDerivative\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Viscosity Temperature Derivative\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ViscosityTemperatureDerivativeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialEnergy.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialEnergy.MoistureCapacityThermalGradient\", \"MoistureCapacityThermalGradient\");\r\n            ifcPSE.PropertyName = \"MoistureCapacityThermalGradient\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Moisture Capacity Thermal Gradient\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MoistureCapacityThermalGradientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialEnergy.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialEnergy.ThermalConductivityTemperatureDerivative\", \"ThermalConductivityTemperatureDerivative\");\r\n            ifcPSE.PropertyName = \"ThermalConductivityTemperatureDerivative\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Conductivity Temperature Derivative\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalConductivityTemperatureDerivativeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialEnergy.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialEnergy.SpecificHeatTemperatureDerivative\", \"SpecificHeatTemperatureDerivative\");\r\n            ifcPSE.PropertyName = \"SpecificHeatTemperatureDerivative\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Specific Heat Temperature Derivative\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecificHeatTemperatureDerivativeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialEnergy.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialEnergy.VisibleRefractionIndex\", \"VisibleRefractionIndex\");\r\n            ifcPSE.PropertyName = \"VisibleRefractionIndex\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Visible Refraction Index\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleRefractionIndexCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialEnergy.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialEnergy.SolarRefractionIndex\", \"SolarRefractionIndex\");\r\n            ifcPSE.PropertyName = \"SolarRefractionIndex\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Solar Refraction Index\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarRefractionIndexCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialEnergy.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialEnergy.GasPressure\", \"GasPressure\");\r\n            ifcPSE.PropertyName = \"GasPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gas Pressure\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialEnergy.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialEnergy\"))\r\n         {\r\n            propertySetMaterialEnergy.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialEnergy.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialEnergy.ViscosityTemperatureDerivative\", \"ViscosityTemperatureDerivative\");\r\n            ifcPSE.PropertyName = \"ViscosityTemperatureDerivative\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ViscosityTemperatureDerivativeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialEnergy.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialEnergy.MoistureCapacityThermalGradient\", \"MoistureCapacityThermalGradient\");\r\n            ifcPSE.PropertyName = \"MoistureCapacityThermalGradient\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MoistureCapacityThermalGradientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialEnergy.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialEnergy.ThermalConductivityTemperatureDerivative\", \"ThermalConductivityTemperatureDerivative\");\r\n            ifcPSE.PropertyName = \"ThermalConductivityTemperatureDerivative\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalConductivityTemperatureDerivativeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialEnergy.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialEnergy.SpecificHeatTemperatureDerivative\", \"SpecificHeatTemperatureDerivative\");\r\n            ifcPSE.PropertyName = \"SpecificHeatTemperatureDerivative\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecificHeatTemperatureDerivativeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialEnergy.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialEnergy.VisibleRefractionIndex\", \"VisibleRefractionIndex\");\r\n            ifcPSE.PropertyName = \"VisibleRefractionIndex\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleRefractionIndexCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialEnergy.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialEnergy.SolarRefractionIndex\", \"SolarRefractionIndex\");\r\n            ifcPSE.PropertyName = \"SolarRefractionIndex\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarRefractionIndexCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialEnergy.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialEnergy.GasPressure\", \"GasPressure\");\r\n            ifcPSE.PropertyName = \"GasPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialEnergy.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaterialEnergy);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaterialFuel(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaterialFuel = new PropertySetDescription();\r\n         propertySetMaterialFuel.Name = \"Pset_MaterialFuel\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialFuel\"))\r\n         {\r\n            propertySetMaterialFuel.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialFuel.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialFuel.CombustionTemperature\", \"CombustionTemperature\");\r\n            ifcPSE.PropertyName = \"CombustionTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Combustion Temperature\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustionTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialFuel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialFuel.CarbonContent\", \"CarbonContent\");\r\n            ifcPSE.PropertyName = \"CarbonContent\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Carbon Content\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CarbonContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialFuel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialFuel.LowerHeatingValue\", \"LowerHeatingValue\");\r\n            ifcPSE.PropertyName = \"LowerHeatingValue\";\r\n            ifcPSE.PropertyType = PropertyType.HeatingValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lower Heating Value\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowerHeatingValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialFuel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialFuel.HigherHeatingValue\", \"HigherHeatingValue\");\r\n            ifcPSE.PropertyName = \"HigherHeatingValue\";\r\n            ifcPSE.PropertyType = PropertyType.HeatingValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Higher Heating Value\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HigherHeatingValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialFuel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialFuel\"))\r\n         {\r\n            propertySetMaterialFuel.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialFuel.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialFuel.CombustionTemperature\", \"CombustionTemperature\");\r\n            ifcPSE.PropertyName = \"CombustionTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustionTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialFuel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialFuel.CarbonContent\", \"CarbonContent\");\r\n            ifcPSE.PropertyName = \"CarbonContent\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CarbonContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialFuel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialFuel.LowerHeatingValue\", \"LowerHeatingValue\");\r\n            ifcPSE.PropertyName = \"LowerHeatingValue\";\r\n            ifcPSE.PropertyType = PropertyType.HeatingValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowerHeatingValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialFuel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialFuel.HigherHeatingValue\", \"HigherHeatingValue\");\r\n            ifcPSE.PropertyName = \"HigherHeatingValue\";\r\n            ifcPSE.PropertyType = PropertyType.HeatingValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HigherHeatingValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialFuel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaterialFuel);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaterialHygroscopic(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaterialHygroscopic = new PropertySetDescription();\r\n         propertySetMaterialHygroscopic.Name = \"Pset_MaterialHygroscopic\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialHygroscopic\"))\r\n         {\r\n            propertySetMaterialHygroscopic.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialHygroscopic.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialHygroscopic.UpperVaporResistanceFactor\", \"UpperVaporResistanceFactor\");\r\n            ifcPSE.PropertyName = \"UpperVaporResistanceFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Upper Vapor Resistance Factor\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpperVaporResistanceFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialHygroscopic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialHygroscopic.LowerVaporResistanceFactor\", \"LowerVaporResistanceFactor\");\r\n            ifcPSE.PropertyName = \"LowerVaporResistanceFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lower Vapor Resistance Factor\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowerVaporResistanceFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialHygroscopic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialHygroscopic.IsothermalMoistureCapacity\", \"IsothermalMoistureCapacity\");\r\n            ifcPSE.PropertyName = \"IsothermalMoistureCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.IsothermalMoistureCapacity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Isothermal Moisture Capacity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsothermalMoistureCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialHygroscopic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialHygroscopic.VaporPermeability\", \"VaporPermeability\");\r\n            ifcPSE.PropertyName = \"VaporPermeability\";\r\n            ifcPSE.PropertyType = PropertyType.VaporPermeability;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Vapor Permeability\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VaporPermeabilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialHygroscopic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialHygroscopic.MoistureDiffusivity\", \"MoistureDiffusivity\");\r\n            ifcPSE.PropertyName = \"MoistureDiffusivity\";\r\n            ifcPSE.PropertyType = PropertyType.MoistureDiffusivity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Moisture Diffusivity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MoistureDiffusivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialHygroscopic.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialHygroscopic\"))\r\n         {\r\n            propertySetMaterialHygroscopic.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialHygroscopic.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialHygroscopic.UpperVaporResistanceFactor\", \"UpperVaporResistanceFactor\");\r\n            ifcPSE.PropertyName = \"UpperVaporResistanceFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpperVaporResistanceFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialHygroscopic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialHygroscopic.LowerVaporResistanceFactor\", \"LowerVaporResistanceFactor\");\r\n            ifcPSE.PropertyName = \"LowerVaporResistanceFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowerVaporResistanceFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialHygroscopic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialHygroscopic.IsothermalMoistureCapacity\", \"IsothermalMoistureCapacity\");\r\n            ifcPSE.PropertyName = \"IsothermalMoistureCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.IsothermalMoistureCapacity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsothermalMoistureCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialHygroscopic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialHygroscopic.VaporPermeability\", \"VaporPermeability\");\r\n            ifcPSE.PropertyName = \"VaporPermeability\";\r\n            ifcPSE.PropertyType = PropertyType.VaporPermeability;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VaporPermeabilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialHygroscopic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialHygroscopic.MoistureDiffusivity\", \"MoistureDiffusivity\");\r\n            ifcPSE.PropertyName = \"MoistureDiffusivity\";\r\n            ifcPSE.PropertyType = PropertyType.MoistureDiffusivity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MoistureDiffusivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialHygroscopic.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaterialHygroscopic);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaterialMechanical(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaterialMechanical = new PropertySetDescription();\r\n         propertySetMaterialMechanical.Name = \"Pset_MaterialMechanical\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialMechanical\"))\r\n         {\r\n            propertySetMaterialMechanical.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialMechanical.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialMechanical.DynamicViscosity\", \"DynamicViscosity\");\r\n            ifcPSE.PropertyName = \"DynamicViscosity\";\r\n            ifcPSE.PropertyType = PropertyType.DynamicViscosity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Dynamic Viscosity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DynamicViscosityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialMechanical.YoungModulus\", \"YoungModulus\");\r\n            ifcPSE.PropertyName = \"YoungModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Young Modulus\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialMechanical.ShearModulus\", \"ShearModulus\");\r\n            ifcPSE.PropertyName = \"ShearModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shear Modulus\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialMechanical.PoissonRatio\", \"PoissonRatio\");\r\n            ifcPSE.PropertyName = \"PoissonRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Poisson Ratio\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PoissonRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialMechanical.ThermalExpansionCoefficient\", \"ThermalExpansionCoefficient\");\r\n            ifcPSE.PropertyName = \"ThermalExpansionCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalExpansionCoefficient;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Expansion Coefficient\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalExpansionCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialMechanical.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialMechanical\"))\r\n         {\r\n            propertySetMaterialMechanical.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialMechanical.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialMechanical.DynamicViscosity\", \"DynamicViscosity\");\r\n            ifcPSE.PropertyName = \"DynamicViscosity\";\r\n            ifcPSE.PropertyType = PropertyType.DynamicViscosity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DynamicViscosityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialMechanical.YoungModulus\", \"YoungModulus\");\r\n            ifcPSE.PropertyName = \"YoungModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialMechanical.ShearModulus\", \"ShearModulus\");\r\n            ifcPSE.PropertyName = \"ShearModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialMechanical.PoissonRatio\", \"PoissonRatio\");\r\n            ifcPSE.PropertyName = \"PoissonRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PoissonRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialMechanical.ThermalExpansionCoefficient\", \"ThermalExpansionCoefficient\");\r\n            ifcPSE.PropertyName = \"ThermalExpansionCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalExpansionCoefficient;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalExpansionCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialMechanical.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaterialMechanical);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaterialOptical(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaterialOptical = new PropertySetDescription();\r\n         propertySetMaterialOptical.Name = \"Pset_MaterialOptical\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialOptical\"))\r\n         {\r\n            propertySetMaterialOptical.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialOptical.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialOptical.VisibleTransmittance\", \"VisibleTransmittance\");\r\n            ifcPSE.PropertyName = \"VisibleTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Visible Transmittance\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialOptical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialOptical.SolarTransmittance\", \"SolarTransmittance\");\r\n            ifcPSE.PropertyName = \"SolarTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Solar Transmittance\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialOptical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialOptical.ThermalIrTransmittance\", \"ThermalIrTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalIrTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Ir Transmittance\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalIrTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialOptical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialOptical.ThermalIrEmissivityBack\", \"ThermalIrEmissivityBack\");\r\n            ifcPSE.PropertyName = \"ThermalIrEmissivityBack\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Ir Emissivity Back\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalIrEmissivityBackCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialOptical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialOptical.ThermalIrEmissivityFront\", \"ThermalIrEmissivityFront\");\r\n            ifcPSE.PropertyName = \"ThermalIrEmissivityFront\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Ir Emissivity Front\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalIrEmissivityFrontCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialOptical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialOptical.VisibleReflectanceBack\", \"VisibleReflectanceBack\");\r\n            ifcPSE.PropertyName = \"VisibleReflectanceBack\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Visible Reflectance Back\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleReflectanceBackCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialOptical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialOptical.VisibleReflectanceFront\", \"VisibleReflectanceFront\");\r\n            ifcPSE.PropertyName = \"VisibleReflectanceFront\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Visible Reflectance Front\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleReflectanceFrontCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialOptical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialOptical.SolarReflectanceBack\", \"SolarReflectanceBack\");\r\n            ifcPSE.PropertyName = \"SolarReflectanceBack\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Solar Reflectance Back\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarReflectanceBackCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialOptical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialOptical.SolarReflectanceFront\", \"SolarReflectanceFront\");\r\n            ifcPSE.PropertyName = \"SolarReflectanceFront\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Solar Reflectance Front\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarReflectanceFrontCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialOptical.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialOptical\"))\r\n         {\r\n            propertySetMaterialOptical.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialOptical.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialOptical.VisibleTransmittance\", \"VisibleTransmittance\");\r\n            ifcPSE.PropertyName = \"VisibleTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialOptical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialOptical.SolarTransmittance\", \"SolarTransmittance\");\r\n            ifcPSE.PropertyName = \"SolarTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialOptical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialOptical.ThermalIrTransmittance\", \"ThermalIrTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalIrTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalIrTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialOptical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialOptical.ThermalIrEmissivityBack\", \"ThermalIrEmissivityBack\");\r\n            ifcPSE.PropertyName = \"ThermalIrEmissivityBack\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalIrEmissivityBackCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialOptical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialOptical.ThermalIrEmissivityFront\", \"ThermalIrEmissivityFront\");\r\n            ifcPSE.PropertyName = \"ThermalIrEmissivityFront\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalIrEmissivityFrontCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialOptical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialOptical.VisibleReflectanceBack\", \"VisibleReflectanceBack\");\r\n            ifcPSE.PropertyName = \"VisibleReflectanceBack\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleReflectanceBackCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialOptical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialOptical.VisibleReflectanceFront\", \"VisibleReflectanceFront\");\r\n            ifcPSE.PropertyName = \"VisibleReflectanceFront\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleReflectanceFrontCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialOptical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialOptical.SolarReflectanceBack\", \"SolarReflectanceBack\");\r\n            ifcPSE.PropertyName = \"SolarReflectanceBack\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarReflectanceBackCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialOptical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialOptical.SolarReflectanceFront\", \"SolarReflectanceFront\");\r\n            ifcPSE.PropertyName = \"SolarReflectanceFront\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarReflectanceFrontCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialOptical.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaterialOptical);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaterialSteel(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaterialSteel = new PropertySetDescription();\r\n         propertySetMaterialSteel.Name = \"Pset_MaterialSteel\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialSteel\"))\r\n         {\r\n            propertySetMaterialSteel.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialSteel.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialSteel.YieldStress\", \"YieldStress\");\r\n            ifcPSE.PropertyName = \"YieldStress\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Yield Stress\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YieldStressCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialSteel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialSteel.UltimateStress\", \"UltimateStress\");\r\n            ifcPSE.PropertyName = \"UltimateStress\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ultimate Stress\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UltimateStressCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialSteel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialSteel.UltimateStrain\", \"UltimateStrain\");\r\n            ifcPSE.PropertyName = \"UltimateStrain\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ultimate Strain\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UltimateStrainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialSteel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialSteel.HardeningModule\", \"HardeningModule\");\r\n            ifcPSE.PropertyName = \"HardeningModule\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Hardening Module\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HardeningModuleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialSteel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialSteel.ProportionalStress\", \"ProportionalStress\");\r\n            ifcPSE.PropertyName = \"ProportionalStress\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Proportional Stress\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProportionalStressCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialSteel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialSteel.PlasticStrain\", \"PlasticStrain\");\r\n            ifcPSE.PropertyName = \"PlasticStrain\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Plastic Strain\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlasticStrainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialSteel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialSteel.Relaxations\", \"Relaxations\");\r\n            ifcPSE.PropertyName = \"Relaxations\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.NormalisedRatio;\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Relaxations\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RelaxationsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialSteel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialSteel\"))\r\n         {\r\n            propertySetMaterialSteel.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialSteel.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialSteel.YieldStress\", \"YieldStress\");\r\n            ifcPSE.PropertyName = \"YieldStress\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YieldStressCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialSteel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialSteel.UltimateStress\", \"UltimateStress\");\r\n            ifcPSE.PropertyName = \"UltimateStress\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UltimateStressCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialSteel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialSteel.UltimateStrain\", \"UltimateStrain\");\r\n            ifcPSE.PropertyName = \"UltimateStrain\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UltimateStrainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialSteel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialSteel.HardeningModule\", \"HardeningModule\");\r\n            ifcPSE.PropertyName = \"HardeningModule\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HardeningModuleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialSteel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialSteel.ProportionalStress\", \"ProportionalStress\");\r\n            ifcPSE.PropertyName = \"ProportionalStress\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProportionalStressCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialSteel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialSteel.PlasticStrain\", \"PlasticStrain\");\r\n            ifcPSE.PropertyName = \"PlasticStrain\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlasticStrainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialSteel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialSteel.Relaxations\", \"Relaxations\");\r\n            ifcPSE.PropertyName = \"Relaxations\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.NormalisedRatio;\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RelaxationsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialSteel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialSteel.StructuralGrade\", \"StructuralGrade\");\r\n            ifcPSE.PropertyName = \"StructuralGrade\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StructuralGradeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialSteel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaterialSteel);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaterialThermal(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaterialThermal = new PropertySetDescription();\r\n         propertySetMaterialThermal.Name = \"Pset_MaterialThermal\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialThermal\"))\r\n         {\r\n            propertySetMaterialThermal.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialThermal.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialThermal.SpecificHeatCapacity\", \"SpecificHeatCapacity\");\r\n            ifcPSE.PropertyName = \"SpecificHeatCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.SpecificHeatCapacity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Specific Heat Capacity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecificHeatCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialThermal.BoilingPoint\", \"BoilingPoint\");\r\n            ifcPSE.PropertyName = \"BoilingPoint\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Boiling Point\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoilingPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialThermal.FreezingPoint\", \"FreezingPoint\");\r\n            ifcPSE.PropertyName = \"FreezingPoint\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Freezing Point\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FreezingPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialThermal.ThermalConductivity\", \"ThermalConductivity\");\r\n            ifcPSE.PropertyName = \"ThermalConductivity\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalConductivity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Conductivity\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalConductivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialThermal.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialThermal\"))\r\n         {\r\n            propertySetMaterialThermal.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialThermal.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialThermal.SpecificHeatCapacity\", \"SpecificHeatCapacity\");\r\n            ifcPSE.PropertyName = \"SpecificHeatCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.SpecificHeatCapacity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecificHeatCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialThermal.BoilingPoint\", \"BoilingPoint\");\r\n            ifcPSE.PropertyName = \"BoilingPoint\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoilingPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialThermal.FreezingPoint\", \"FreezingPoint\");\r\n            ifcPSE.PropertyName = \"FreezingPoint\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FreezingPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialThermal.ThermalConductivity\", \"ThermalConductivity\");\r\n            ifcPSE.PropertyName = \"ThermalConductivity\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalConductivity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalConductivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialThermal.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaterialThermal);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaterialWater(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaterialWater = new PropertySetDescription();\r\n         propertySetMaterialWater.Name = \"Pset_MaterialWater\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialWater\"))\r\n         {\r\n            propertySetMaterialWater.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialWater.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWater.IsPotable\", \"IsPotable\");\r\n            ifcPSE.PropertyName = \"IsPotable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Potable\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsPotableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWater.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWater.Hardness\", \"Hardness\");\r\n            ifcPSE.PropertyName = \"Hardness\";\r\n            ifcPSE.PropertyType = PropertyType.IonConcentration;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Hardness\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HardnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWater.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWater.AlkalinityConcentration\", \"AlkalinityConcentration\");\r\n            ifcPSE.PropertyName = \"AlkalinityConcentration\";\r\n            ifcPSE.PropertyType = PropertyType.IonConcentration;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Alkalinity Concentration\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AlkalinityConcentrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWater.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWater.AcidityConcentration\", \"AcidityConcentration\");\r\n            ifcPSE.PropertyName = \"AcidityConcentration\";\r\n            ifcPSE.PropertyType = PropertyType.IonConcentration;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Acidity Concentration\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcidityConcentrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWater.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWater.ImpuritiesContent\", \"ImpuritiesContent\");\r\n            ifcPSE.PropertyName = \"ImpuritiesContent\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Impurities Content\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpuritiesContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWater.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWater.DissolvedSolidsContent\", \"DissolvedSolidsContent\");\r\n            ifcPSE.PropertyName = \"DissolvedSolidsContent\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Dissolved Solids Content\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DissolvedSolidsContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWater.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWater.PHLevel\", \"PHLevel\");\r\n            ifcPSE.PropertyName = \"PHLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PH;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"PHLevel\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PHLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWater.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialWater\"))\r\n         {\r\n            propertySetMaterialWater.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialWater.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWater.IsPotable\", \"IsPotable\");\r\n            ifcPSE.PropertyName = \"IsPotable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsPotableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWater.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWater.Hardness\", \"Hardness\");\r\n            ifcPSE.PropertyName = \"Hardness\";\r\n            ifcPSE.PropertyType = PropertyType.IonConcentration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HardnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWater.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWater.AlkalinityConcentration\", \"AlkalinityConcentration\");\r\n            ifcPSE.PropertyName = \"AlkalinityConcentration\";\r\n            ifcPSE.PropertyType = PropertyType.IonConcentration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AlkalinityConcentrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWater.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWater.AcidityConcentration\", \"AcidityConcentration\");\r\n            ifcPSE.PropertyName = \"AcidityConcentration\";\r\n            ifcPSE.PropertyType = PropertyType.IonConcentration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcidityConcentrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWater.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWater.ImpuritiesContent\", \"ImpuritiesContent\");\r\n            ifcPSE.PropertyName = \"ImpuritiesContent\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpuritiesContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWater.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWater.DissolvedSolidsContent\", \"DissolvedSolidsContent\");\r\n            ifcPSE.PropertyName = \"DissolvedSolidsContent\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DissolvedSolidsContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWater.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWater.PHLevel\", \"PHLevel\");\r\n            ifcPSE.PropertyName = \"PHLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PH;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PHLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWater.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaterialWater);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaterialWood(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaterialWood = new PropertySetDescription();\r\n         propertySetMaterialWood.Name = \"Pset_MaterialWood\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialWood\"))\r\n         {\r\n            propertySetMaterialWood.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialWood.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWood.Species\", \"Species\");\r\n            ifcPSE.PropertyName = \"Species\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Species\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpeciesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWood.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWood.StrengthGrade\", \"StrengthGrade\");\r\n            ifcPSE.PropertyName = \"StrengthGrade\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Strength Grade\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StrengthGradeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWood.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWood.AppearanceGrade\", \"AppearanceGrade\");\r\n            ifcPSE.PropertyName = \"AppearanceGrade\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Appearance Grade\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AppearanceGradeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWood.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWood.Layup\", \"Layup\");\r\n            ifcPSE.PropertyName = \"Layup\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Layup\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LayupCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWood.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWood.Layers\", \"Layers\");\r\n            ifcPSE.PropertyName = \"Layers\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Layers\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LayersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWood.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWood.Plies\", \"Plies\");\r\n            ifcPSE.PropertyName = \"Plies\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Plies\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PliesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWood.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWood.MoistureContent\", \"MoistureContent\");\r\n            ifcPSE.PropertyName = \"MoistureContent\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Moisture Content\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MoistureContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWood.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWood.DimensionalChangeCoefficient\", \"DimensionalChangeCoefficient\");\r\n            ifcPSE.PropertyName = \"DimensionalChangeCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Dimensional Change Coefficient\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DimensionalChangeCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWood.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWood.ThicknessSwelling\", \"ThicknessSwelling\");\r\n            ifcPSE.PropertyName = \"ThicknessSwelling\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thickness Swelling\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThicknessSwellingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWood.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialWood\"))\r\n         {\r\n            propertySetMaterialWood.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialWood.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWood.Species\", \"Species\");\r\n            ifcPSE.PropertyName = \"Species\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpeciesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWood.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWood.StrengthGrade\", \"StrengthGrade\");\r\n            ifcPSE.PropertyName = \"StrengthGrade\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StrengthGradeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWood.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWood.AppearanceGrade\", \"AppearanceGrade\");\r\n            ifcPSE.PropertyName = \"AppearanceGrade\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AppearanceGradeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWood.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWood.Layup\", \"Layup\");\r\n            ifcPSE.PropertyName = \"Layup\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LayupCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWood.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWood.Layers\", \"Layers\");\r\n            ifcPSE.PropertyName = \"Layers\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LayersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWood.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWood.Plies\", \"Plies\");\r\n            ifcPSE.PropertyName = \"Plies\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PliesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWood.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWood.MoistureContent\", \"MoistureContent\");\r\n            ifcPSE.PropertyName = \"MoistureContent\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MoistureContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWood.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWood.DimensionalChangeCoefficient\", \"DimensionalChangeCoefficient\");\r\n            ifcPSE.PropertyName = \"DimensionalChangeCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DimensionalChangeCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWood.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWood.ThicknessSwelling\", \"ThicknessSwelling\");\r\n            ifcPSE.PropertyName = \"ThicknessSwelling\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThicknessSwellingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWood.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaterialWood);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaterialWoodBasedBeam(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaterialWoodBasedBeam = new PropertySetDescription();\r\n         propertySetMaterialWoodBasedBeam.Name = \"Pset_MaterialWoodBasedBeam\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialWoodBasedBeam\"))\r\n         {\r\n            propertySetMaterialWoodBasedBeam.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialWoodBasedBeam.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.ApplicableStructuralDesignMethod\", \"ApplicableStructuralDesignMethod\");\r\n            ifcPSE.PropertyName = \"ApplicableStructuralDesignMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Applicable Structural Design Method\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplicableStructuralDesignMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlane.YoungModulus\", \"InPlane.YoungModulus\");\r\n            ifcPSE.PropertyName = \"InPlane.YoungModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlane.YoungModulusMin\", \"InPlane.YoungModulusMin\");\r\n            ifcPSE.PropertyName = \"InPlane.YoungModulusMin\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlane.YoungModulusPerp\", \"InPlane.YoungModulusPerp\");\r\n            ifcPSE.PropertyName = \"InPlane.YoungModulusPerp\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlane.YoungModulusPerpMin\", \"InPlane.YoungModulusPerpMin\");\r\n            ifcPSE.PropertyName = \"InPlane.YoungModulusPerpMin\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusPerpMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlane.ShearModulus\", \"InPlane.ShearModulus\");\r\n            ifcPSE.PropertyName = \"InPlane.ShearModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlane.ShearModulusMin\", \"InPlane.ShearModulusMin\");\r\n            ifcPSE.PropertyName = \"InPlane.ShearModulusMin\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlane.BendingStrength\", \"InPlane.BendingStrength\");\r\n            ifcPSE.PropertyName = \"InPlane.BendingStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlane.TensileStrength\", \"InPlane.TensileStrength\");\r\n            ifcPSE.PropertyName = \"InPlane.TensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlane.TensileStrengthPerp\", \"InPlane.TensileStrengthPerp\");\r\n            ifcPSE.PropertyName = \"InPlane.TensileStrengthPerp\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlane.CompStrength\", \"InPlane.CompStrength\");\r\n            ifcPSE.PropertyName = \"InPlane.CompStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlane.CompStrengthPerp\", \"InPlane.CompStrengthPerp\");\r\n            ifcPSE.PropertyName = \"InPlane.CompStrengthPerp\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompStrengthPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlane.RaisedCompStrengthPerp\", \"InPlane.RaisedCompStrengthPerp\");\r\n            ifcPSE.PropertyName = \"InPlane.RaisedCompStrengthPerp\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RaisedCompStrengthPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlane.ShearStrength\", \"InPlane.ShearStrength\");\r\n            ifcPSE.PropertyName = \"InPlane.ShearStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlane.TorsionalStrength\", \"InPlane.TorsionalStrength\");\r\n            ifcPSE.PropertyName = \"InPlane.TorsionalStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorsionalStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlane.ReferenceDepth\", \"InPlane.ReferenceDepth\");\r\n            ifcPSE.PropertyName = \"InPlane.ReferenceDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlane.InstabilityFactors\", \"InPlane.InstabilityFactors\");\r\n            ifcPSE.PropertyName = \"InPlane.InstabilityFactors\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstabilityFactorsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulus\", \"InPlaneNegative.YoungModulus\");\r\n            ifcPSE.PropertyName = \"InPlaneNegative.YoungModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusMin\", \"InPlaneNegative.YoungModulusMin\");\r\n            ifcPSE.PropertyName = \"InPlaneNegative.YoungModulusMin\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusPerp\", \"InPlaneNegative.YoungModulusPerp\");\r\n            ifcPSE.PropertyName = \"InPlaneNegative.YoungModulusPerp\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusPerpMin\", \"InPlaneNegative.YoungModulusPerpMin\");\r\n            ifcPSE.PropertyName = \"InPlaneNegative.YoungModulusPerpMin\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusPerpMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlaneNegative.ShearModulus\", \"InPlaneNegative.ShearModulus\");\r\n            ifcPSE.PropertyName = \"InPlaneNegative.ShearModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlaneNegative.ShearModulusMin\", \"InPlaneNegative.ShearModulusMin\");\r\n            ifcPSE.PropertyName = \"InPlaneNegative.ShearModulusMin\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlaneNegative.BendingStrength\", \"InPlaneNegative.BendingStrength\");\r\n            ifcPSE.PropertyName = \"InPlaneNegative.BendingStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlaneNegative.TensileStrength\", \"InPlaneNegative.TensileStrength\");\r\n            ifcPSE.PropertyName = \"InPlaneNegative.TensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlaneNegative.TensileStrengthPerp\", \"InPlaneNegative.TensileStrengthPerp\");\r\n            ifcPSE.PropertyName = \"InPlaneNegative.TensileStrengthPerp\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlaneNegative.CompStrength\", \"InPlaneNegative.CompStrength\");\r\n            ifcPSE.PropertyName = \"InPlaneNegative.CompStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlaneNegative.CompStrengthPerp\", \"InPlaneNegative.CompStrengthPerp\");\r\n            ifcPSE.PropertyName = \"InPlaneNegative.CompStrengthPerp\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompStrengthPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlaneNegative.RaisedCompStrengthPerp\", \"InPlaneNegative.RaisedCompStrengthPerp\");\r\n            ifcPSE.PropertyName = \"InPlaneNegative.RaisedCompStrengthPerp\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RaisedCompStrengthPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlaneNegative.ShearStrength\", \"InPlaneNegative.ShearStrength\");\r\n            ifcPSE.PropertyName = \"InPlaneNegative.ShearStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlaneNegative.TorsionalStrength\", \"InPlaneNegative.TorsionalStrength\");\r\n            ifcPSE.PropertyName = \"InPlaneNegative.TorsionalStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorsionalStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlaneNegative.ReferenceDepth\", \"InPlaneNegative.ReferenceDepth\");\r\n            ifcPSE.PropertyName = \"InPlaneNegative.ReferenceDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.InPlaneNegative.InstabilityFactors\", \"InPlaneNegative.InstabilityFactors\");\r\n            ifcPSE.PropertyName = \"InPlaneNegative.InstabilityFactors\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstabilityFactorsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.OutOfPlane.YoungModulus\", \"OutOfPlane.YoungModulus\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.YoungModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusMin\", \"OutOfPlane.YoungModulusMin\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.YoungModulusMin\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusPerp\", \"OutOfPlane.YoungModulusPerp\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.YoungModulusPerp\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusPerpMin\", \"OutOfPlane.YoungModulusPerpMin\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.YoungModulusPerpMin\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusPerpMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.OutOfPlane.ShearModulus\", \"OutOfPlane.ShearModulus\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.ShearModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.OutOfPlane.ShearModulusMin\", \"OutOfPlane.ShearModulusMin\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.ShearModulusMin\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.OutOfPlane.BendingStrength\", \"OutOfPlane.BendingStrength\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.BendingStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.OutOfPlane.TensileStrength\", \"OutOfPlane.TensileStrength\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.TensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.OutOfPlane.TensileStrengthPerp\", \"OutOfPlane.TensileStrengthPerp\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.TensileStrengthPerp\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.OutOfPlane.CompStrength\", \"OutOfPlane.CompStrength\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.CompStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.OutOfPlane.CompStrengthPerp\", \"OutOfPlane.CompStrengthPerp\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.CompStrengthPerp\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompStrengthPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.OutOfPlane.RaisedCompStrengthPerp\", \"OutOfPlane.RaisedCompStrengthPerp\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.RaisedCompStrengthPerp\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RaisedCompStrengthPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.OutOfPlane.ShearStrength\", \"OutOfPlane.ShearStrength\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.ShearStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.OutOfPlane.TorsionalStrength\", \"OutOfPlane.TorsionalStrength\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.TorsionalStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorsionalStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.OutOfPlane.ReferenceDepth\", \"OutOfPlane.ReferenceDepth\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.ReferenceDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedBeam.OutOfPlane.InstabilityFactors\", \"OutOfPlane.InstabilityFactors\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.InstabilityFactors\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstabilityFactorsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedBeam.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaterialWoodBasedBeam);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaterialWoodBasedPanel(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaterialWoodBasedPanel = new PropertySetDescription();\r\n         propertySetMaterialWoodBasedPanel.Name = \"Pset_MaterialWoodBasedPanel\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialWoodBasedPanel\"))\r\n         {\r\n            propertySetMaterialWoodBasedPanel.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialWoodBasedPanel.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.ApplicableStructuralDesignMethod\", \"ApplicableStructuralDesignMethod\");\r\n            ifcPSE.PropertyName = \"ApplicableStructuralDesignMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Applicable Structural Design Method\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplicableStructuralDesignMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.InPlane.YoungModulusBending\", \"InPlane.YoungModulusBending\");\r\n            ifcPSE.PropertyName = \"InPlane.YoungModulusBending\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusBendingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.InPlane.YoungModulusTension\", \"InPlane.YoungModulusTension\");\r\n            ifcPSE.PropertyName = \"InPlane.YoungModulusTension\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusTensionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.InPlane.YoungModulusCompression\", \"InPlane.YoungModulusCompression\");\r\n            ifcPSE.PropertyName = \"InPlane.YoungModulusCompression\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCompressionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.InPlane.ShearModulus\", \"InPlane.ShearModulus\");\r\n            ifcPSE.PropertyName = \"InPlane.ShearModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.InPlane.BendingStrength\", \"InPlane.BendingStrength\");\r\n            ifcPSE.PropertyName = \"InPlane.BendingStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.InPlane.CompressiveStrength\", \"InPlane.CompressiveStrength\");\r\n            ifcPSE.PropertyName = \"InPlane.CompressiveStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressiveStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.InPlane.TensileStrength\", \"InPlane.TensileStrength\");\r\n            ifcPSE.PropertyName = \"InPlane.TensileStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.InPlane.ShearStrength\", \"InPlane.ShearStrength\");\r\n            ifcPSE.PropertyName = \"InPlane.ShearStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.InPlane.BearingStrength\", \"InPlane.BearingStrength\");\r\n            ifcPSE.PropertyName = \"InPlane.BearingStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BearingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.InPlane.RaisedCompressiveStrength\", \"InPlane.RaisedCompressiveStrength\");\r\n            ifcPSE.PropertyName = \"InPlane.RaisedCompressiveStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RaisedCompressiveStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.InPlane.ReferenceDepth\", \"InPlane.ReferenceDepth\");\r\n            ifcPSE.PropertyName = \"InPlane.ReferenceDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusBending\", \"OutOfPlane.YoungModulusBending\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.YoungModulusBending\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusBendingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusTension\", \"OutOfPlane.YoungModulusTension\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.YoungModulusTension\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusTensionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusCompression\", \"OutOfPlane.YoungModulusCompression\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.YoungModulusCompression\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCompressionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlane.ShearModulus\", \"OutOfPlane.ShearModulus\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.ShearModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlane.BendingStrength\", \"OutOfPlane.BendingStrength\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.BendingStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlane.CompressiveStrength\", \"OutOfPlane.CompressiveStrength\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.CompressiveStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressiveStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlane.TensileStrength\", \"OutOfPlane.TensileStrength\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.TensileStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlane.ShearStrength\", \"OutOfPlane.ShearStrength\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.ShearStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlane.BearingStrength\", \"OutOfPlane.BearingStrength\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.BearingStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BearingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlane.RaisedCompressiveStrength\", \"OutOfPlane.RaisedCompressiveStrength\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.RaisedCompressiveStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RaisedCompressiveStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlane.ReferenceDepth\", \"OutOfPlane.ReferenceDepth\");\r\n            ifcPSE.PropertyName = \"OutOfPlane.ReferenceDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusBending\", \"OutOfPlaneNegative.YoungModulusBending\");\r\n            ifcPSE.PropertyName = \"OutOfPlaneNegative.YoungModulusBending\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusBendingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusTension\", \"OutOfPlaneNegative.YoungModulusTension\");\r\n            ifcPSE.PropertyName = \"OutOfPlaneNegative.YoungModulusTension\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusTensionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusCompression\", \"OutOfPlaneNegative.YoungModulusCompression\");\r\n            ifcPSE.PropertyName = \"OutOfPlaneNegative.YoungModulusCompression\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCompressionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlaneNegative.ShearModulus\", \"OutOfPlaneNegative.ShearModulus\");\r\n            ifcPSE.PropertyName = \"OutOfPlaneNegative.ShearModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlaneNegative.BendingStrength\", \"OutOfPlaneNegative.BendingStrength\");\r\n            ifcPSE.PropertyName = \"OutOfPlaneNegative.BendingStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlaneNegative.CompressiveStrength\", \"OutOfPlaneNegative.CompressiveStrength\");\r\n            ifcPSE.PropertyName = \"OutOfPlaneNegative.CompressiveStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressiveStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlaneNegative.TensileStrength\", \"OutOfPlaneNegative.TensileStrength\");\r\n            ifcPSE.PropertyName = \"OutOfPlaneNegative.TensileStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlaneNegative.ShearStrength\", \"OutOfPlaneNegative.ShearStrength\");\r\n            ifcPSE.PropertyName = \"OutOfPlaneNegative.ShearStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlaneNegative.BearingStrength\", \"OutOfPlaneNegative.BearingStrength\");\r\n            ifcPSE.PropertyName = \"OutOfPlaneNegative.BearingStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BearingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlaneNegative.RaisedCompressiveStrength\", \"OutOfPlaneNegative.RaisedCompressiveStrength\");\r\n            ifcPSE.PropertyName = \"OutOfPlaneNegative.RaisedCompressiveStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RaisedCompressiveStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedPanel.OutOfPlaneNegative.ReferenceDepth\", \"OutOfPlaneNegative.ReferenceDepth\");\r\n            ifcPSE.PropertyName = \"OutOfPlaneNegative.ReferenceDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedPanel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaterialWoodBasedPanel);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MaterialWoodBasedStructure(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMaterialWoodBasedStructure = new PropertySetDescription();\r\n         propertySetMaterialWoodBasedStructure.Name = \"Pset_MaterialWoodBasedStructure\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MaterialWoodBasedStructure\"))\r\n         {\r\n            propertySetMaterialWoodBasedStructure.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMaterialWoodBasedStructure.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MaterialWoodBasedStructure.ApplicableStructuralDesignMethod\", \"ApplicableStructuralDesignMethod\");\r\n            ifcPSE.PropertyName = \"ApplicableStructuralDesignMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplicableStructuralDesignMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMaterialWoodBasedStructure.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMaterialWoodBasedStructure);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MechanicalBeamInPlane(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMechanicalBeamInPlane = new PropertySetDescription();\r\n         propertySetMechanicalBeamInPlane.Name = \"Pset_MechanicalBeamInPlane\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MechanicalBeamInPlane\"))\r\n         {\r\n            propertySetMechanicalBeamInPlane.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMechanicalBeamInPlane.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlane.YoungModulus\", \"YoungModulus\");\r\n            ifcPSE.PropertyName = \"YoungModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlane.YoungModulusMin\", \"YoungModulusMin\");\r\n            ifcPSE.PropertyName = \"YoungModulusMin\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlane.YoungModulusPerp\", \"YoungModulusPerp\");\r\n            ifcPSE.PropertyName = \"YoungModulusPerp\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlane.YoungModulusPerpMin\", \"YoungModulusPerpMin\");\r\n            ifcPSE.PropertyName = \"YoungModulusPerpMin\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusPerpMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlane.ShearModulus\", \"ShearModulus\");\r\n            ifcPSE.PropertyName = \"ShearModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlane.ShearModulusMin\", \"ShearModulusMin\");\r\n            ifcPSE.PropertyName = \"ShearModulusMin\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlane.BendingStrength\", \"BendingStrength\");\r\n            ifcPSE.PropertyName = \"BendingStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlane.TensileStrength\", \"TensileStrength\");\r\n            ifcPSE.PropertyName = \"TensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlane.TensileStrengthPerp\", \"TensileStrengthPerp\");\r\n            ifcPSE.PropertyName = \"TensileStrengthPerp\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlane.CompStrength\", \"CompStrength\");\r\n            ifcPSE.PropertyName = \"CompStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlane.CompStrengthPerp\", \"CompStrengthPerp\");\r\n            ifcPSE.PropertyName = \"CompStrengthPerp\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompStrengthPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlane.RaisedCompStrengthPerp\", \"RaisedCompStrengthPerp\");\r\n            ifcPSE.PropertyName = \"RaisedCompStrengthPerp\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RaisedCompStrengthPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlane.ShearStrength\", \"ShearStrength\");\r\n            ifcPSE.PropertyName = \"ShearStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlane.TorsionalStrength\", \"TorsionalStrength\");\r\n            ifcPSE.PropertyName = \"TorsionalStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorsionalStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlane.ReferenceDepth\", \"ReferenceDepth\");\r\n            ifcPSE.PropertyName = \"ReferenceDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlane.InstabilityFactors\", \"InstabilityFactors\");\r\n            ifcPSE.PropertyName = \"InstabilityFactors\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstabilityFactorsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlane.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMechanicalBeamInPlane);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MechanicalBeamInPlaneNegative(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMechanicalBeamInPlaneNegative = new PropertySetDescription();\r\n         propertySetMechanicalBeamInPlaneNegative.Name = \"Pset_MechanicalBeamInPlaneNegative\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MechanicalBeamInPlaneNegative\"))\r\n         {\r\n            propertySetMechanicalBeamInPlaneNegative.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMechanicalBeamInPlaneNegative.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlaneNegative.YoungModulus\", \"YoungModulus\");\r\n            ifcPSE.PropertyName = \"YoungModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlaneNegative.YoungModulusMin\", \"YoungModulusMin\");\r\n            ifcPSE.PropertyName = \"YoungModulusMin\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlaneNegative.YoungModulusPerp\", \"YoungModulusPerp\");\r\n            ifcPSE.PropertyName = \"YoungModulusPerp\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlaneNegative.YoungModulusPerpMin\", \"YoungModulusPerpMin\");\r\n            ifcPSE.PropertyName = \"YoungModulusPerpMin\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusPerpMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlaneNegative.ShearModulus\", \"ShearModulus\");\r\n            ifcPSE.PropertyName = \"ShearModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlaneNegative.ShearModulusMin\", \"ShearModulusMin\");\r\n            ifcPSE.PropertyName = \"ShearModulusMin\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlaneNegative.BendingStrength\", \"BendingStrength\");\r\n            ifcPSE.PropertyName = \"BendingStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlaneNegative.TensileStrength\", \"TensileStrength\");\r\n            ifcPSE.PropertyName = \"TensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlaneNegative.TensileStrengthPerp\", \"TensileStrengthPerp\");\r\n            ifcPSE.PropertyName = \"TensileStrengthPerp\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlaneNegative.CompStrength\", \"CompStrength\");\r\n            ifcPSE.PropertyName = \"CompStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlaneNegative.CompStrengthPerp\", \"CompStrengthPerp\");\r\n            ifcPSE.PropertyName = \"CompStrengthPerp\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompStrengthPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlaneNegative.RaisedCompStrengthPerp\", \"RaisedCompStrengthPerp\");\r\n            ifcPSE.PropertyName = \"RaisedCompStrengthPerp\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RaisedCompStrengthPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlaneNegative.ShearStrength\", \"ShearStrength\");\r\n            ifcPSE.PropertyName = \"ShearStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlaneNegative.TorsionalStrength\", \"TorsionalStrength\");\r\n            ifcPSE.PropertyName = \"TorsionalStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorsionalStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlaneNegative.ReferenceDepth\", \"ReferenceDepth\");\r\n            ifcPSE.PropertyName = \"ReferenceDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamInPlaneNegative.InstabilityFactors\", \"InstabilityFactors\");\r\n            ifcPSE.PropertyName = \"InstabilityFactors\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstabilityFactorsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamInPlaneNegative.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMechanicalBeamInPlaneNegative);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MechanicalBeamOutOfPlane(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMechanicalBeamOutOfPlane = new PropertySetDescription();\r\n         propertySetMechanicalBeamOutOfPlane.Name = \"Pset_MechanicalBeamOutOfPlane\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MechanicalBeamOutOfPlane\"))\r\n         {\r\n            propertySetMechanicalBeamOutOfPlane.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMechanicalBeamOutOfPlane.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamOutOfPlane.YoungModulus\", \"YoungModulus\");\r\n            ifcPSE.PropertyName = \"YoungModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamOutOfPlane.YoungModulusMin\", \"YoungModulusMin\");\r\n            ifcPSE.PropertyName = \"YoungModulusMin\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamOutOfPlane.YoungModulusPerp\", \"YoungModulusPerp\");\r\n            ifcPSE.PropertyName = \"YoungModulusPerp\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamOutOfPlane.YoungModulusPerpMin\", \"YoungModulusPerpMin\");\r\n            ifcPSE.PropertyName = \"YoungModulusPerpMin\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusPerpMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamOutOfPlane.ShearModulus\", \"ShearModulus\");\r\n            ifcPSE.PropertyName = \"ShearModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamOutOfPlane.ShearModulusMin\", \"ShearModulusMin\");\r\n            ifcPSE.PropertyName = \"ShearModulusMin\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamOutOfPlane.BendingStrength\", \"BendingStrength\");\r\n            ifcPSE.PropertyName = \"BendingStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamOutOfPlane.TensileStrength\", \"TensileStrength\");\r\n            ifcPSE.PropertyName = \"TensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamOutOfPlane.TensileStrengthPerp\", \"TensileStrengthPerp\");\r\n            ifcPSE.PropertyName = \"TensileStrengthPerp\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamOutOfPlane.CompStrength\", \"CompStrength\");\r\n            ifcPSE.PropertyName = \"CompStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamOutOfPlane.CompStrengthPerp\", \"CompStrengthPerp\");\r\n            ifcPSE.PropertyName = \"CompStrengthPerp\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompStrengthPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamOutOfPlane.RaisedCompStrengthPerp\", \"RaisedCompStrengthPerp\");\r\n            ifcPSE.PropertyName = \"RaisedCompStrengthPerp\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RaisedCompStrengthPerpCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamOutOfPlane.ShearStrength\", \"ShearStrength\");\r\n            ifcPSE.PropertyName = \"ShearStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamOutOfPlane.TorsionalStrength\", \"TorsionalStrength\");\r\n            ifcPSE.PropertyName = \"TorsionalStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorsionalStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamOutOfPlane.ReferenceDepth\", \"ReferenceDepth\");\r\n            ifcPSE.PropertyName = \"ReferenceDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalBeamOutOfPlane.InstabilityFactors\", \"InstabilityFactors\");\r\n            ifcPSE.PropertyName = \"InstabilityFactors\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstabilityFactorsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalBeamOutOfPlane.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMechanicalBeamOutOfPlane);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MechanicalFastenerAnchorBolt(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMechanicalFastenerAnchorBolt = new PropertySetDescription();\r\n         propertySetMechanicalFastenerAnchorBolt.Name = \"Pset_MechanicalFastenerAnchorBolt\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MechanicalFastenerAnchorBolt\"))\r\n         {\r\n            propertySetMechanicalFastenerAnchorBolt.EntityTypes.Add(IFCEntityType.IfcMechanicalFastener);\r\n            propertySetMechanicalFastenerAnchorBolt.ObjectType = \"IfcMechanicalFastener\";\r\n            propertySetMechanicalFastenerAnchorBolt.PredefinedType = \"ANCHORBOLT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerAnchorBolt.AnchorBoltLength\", \"AnchorBoltLength\");\r\n            ifcPSE.PropertyName = \"AnchorBoltLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Anchor Bolt Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"길이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnchorBoltLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerAnchorBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerAnchorBolt.AnchorBoltDiameter\", \"AnchorBoltDiameter\");\r\n            ifcPSE.PropertyName = \"AnchorBoltDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Anchor Bolt Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"直径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"지름\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnchorBoltDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerAnchorBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerAnchorBolt.AnchorBoltThreadLength\", \"AnchorBoltThreadLength\");\r\n            ifcPSE.PropertyName = \"AnchorBoltThreadLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Anchor Bolt Thread Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"나사부 길이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnchorBoltThreadLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerAnchorBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerAnchorBolt.AnchorBoltProtrusionLength\", \"AnchorBoltProtrusionLength\");\r\n            ifcPSE.PropertyName = \"AnchorBoltProtrusionLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Anchor Bolt Protrusion Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"돌출부 길이\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnchorBoltProtrusionLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerAnchorBolt.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MechanicalFastenerAnchorBolt\"))\r\n         {\r\n            propertySetMechanicalFastenerAnchorBolt.EntityTypes.Add(IFCEntityType.IfcMechanicalFastener);\r\n            propertySetMechanicalFastenerAnchorBolt.EntityTypes.Add(IFCEntityType.IfcMechanicalFastenerType);\r\n            propertySetMechanicalFastenerAnchorBolt.ObjectType = \"IfcMechanicalFastener\";\r\n            propertySetMechanicalFastenerAnchorBolt.PredefinedType = \"ANCHORBOLT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerAnchorBolt.AnchorBoltLength\", \"AnchorBoltLength\");\r\n            ifcPSE.PropertyName = \"AnchorBoltLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnchorBoltLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerAnchorBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerAnchorBolt.AnchorBoltDiameter\", \"AnchorBoltDiameter\");\r\n            ifcPSE.PropertyName = \"AnchorBoltDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnchorBoltDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerAnchorBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerAnchorBolt.AnchorBoltThreadLength\", \"AnchorBoltThreadLength\");\r\n            ifcPSE.PropertyName = \"AnchorBoltThreadLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnchorBoltThreadLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerAnchorBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerAnchorBolt.AnchorBoltProtrusionLength\", \"AnchorBoltProtrusionLength\");\r\n            ifcPSE.PropertyName = \"AnchorBoltProtrusionLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnchorBoltProtrusionLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerAnchorBolt.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMechanicalFastenerAnchorBolt);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MechanicalFastenerBolt(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMechanicalFastenerBolt = new PropertySetDescription();\r\n         propertySetMechanicalFastenerBolt.Name = \"Pset_MechanicalFastenerBolt\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MechanicalFastenerBolt\"))\r\n         {\r\n            propertySetMechanicalFastenerBolt.EntityTypes.Add(IFCEntityType.IfcMechanicalFastener);\r\n            propertySetMechanicalFastenerBolt.ObjectType = \"IfcMechanicalFastener\";\r\n            propertySetMechanicalFastenerBolt.PredefinedType = \"BOLT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerBolt.ThreadDiameter\", \"ThreadDiameter\");\r\n            ifcPSE.PropertyName = \"ThreadDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thread Diameter\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThreadDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerBolt.ThreadLength\", \"ThreadLength\");\r\n            ifcPSE.PropertyName = \"ThreadLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thread Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThreadLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerBolt.NutsCount\", \"NutsCount\");\r\n            ifcPSE.PropertyName = \"NutsCount\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nuts Count\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NutsCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerBolt.WashersCount\", \"WashersCount\");\r\n            ifcPSE.PropertyName = \"WashersCount\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Washers Count\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WashersCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerBolt.HeadShape\", \"HeadShape\");\r\n            ifcPSE.PropertyName = \"HeadShape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Head Shape\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeadShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerBolt.KeyShape\", \"KeyShape\");\r\n            ifcPSE.PropertyName = \"KeyShape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Key Shape\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.KeyShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerBolt.NutShape\", \"NutShape\");\r\n            ifcPSE.PropertyName = \"NutShape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nut Shape\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NutShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerBolt.WasherShape\", \"WasherShape\");\r\n            ifcPSE.PropertyName = \"WasherShape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Washer Shape\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WasherShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerBolt.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MechanicalFastenerBolt\"))\r\n         {\r\n            propertySetMechanicalFastenerBolt.EntityTypes.Add(IFCEntityType.IfcMechanicalFastener);\r\n            propertySetMechanicalFastenerBolt.EntityTypes.Add(IFCEntityType.IfcMechanicalFastenerType);\r\n            propertySetMechanicalFastenerBolt.ObjectType = \"IfcMechanicalFastener\";\r\n            propertySetMechanicalFastenerBolt.PredefinedType = \"BOLT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerBolt.ThreadDiameter\", \"ThreadDiameter\");\r\n            ifcPSE.PropertyName = \"ThreadDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThreadDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerBolt.ThreadLength\", \"ThreadLength\");\r\n            ifcPSE.PropertyName = \"ThreadLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThreadLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerBolt.NutsCount\", \"NutsCount\");\r\n            ifcPSE.PropertyName = \"NutsCount\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NutsCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerBolt.WashersCount\", \"WashersCount\");\r\n            ifcPSE.PropertyName = \"WashersCount\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WashersCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerBolt.HeadShape\", \"HeadShape\");\r\n            ifcPSE.PropertyName = \"HeadShape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeadShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerBolt.KeyShape\", \"KeyShape\");\r\n            ifcPSE.PropertyName = \"KeyShape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.KeyShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerBolt.NutShape\", \"NutShape\");\r\n            ifcPSE.PropertyName = \"NutShape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NutShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerBolt.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerBolt.WasherShape\", \"WasherShape\");\r\n            ifcPSE.PropertyName = \"WasherShape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WasherShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerBolt.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMechanicalFastenerBolt);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MechanicalFastenerCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMechanicalFastenerCommon = new PropertySetDescription();\r\n         propertySetMechanicalFastenerCommon.Name = \"Pset_MechanicalFastenerCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MechanicalFastenerCommon\"))\r\n         {\r\n            propertySetMechanicalFastenerCommon.EntityTypes.Add(IFCEntityType.IfcMechanicalFastener);\r\n            propertySetMechanicalFastenerCommon.ObjectType = \"IfcMechanicalFastener\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerCommon.NominalDiameter\", \"NominalDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerCommon.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMechanicalFastenerCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MechanicalFastenerOCSFitting(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMechanicalFastenerOCSFitting = new PropertySetDescription();\r\n         propertySetMechanicalFastenerOCSFitting.Name = \"Pset_MechanicalFastenerOCSFitting\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MechanicalFastenerOCSFitting\"))\r\n         {\r\n            propertySetMechanicalFastenerOCSFitting.EntityTypes.Add(IFCEntityType.IfcMechanicalFastener);\r\n            propertySetMechanicalFastenerOCSFitting.EntityTypes.Add(IFCEntityType.IfcMechanicalFastenerType);\r\n            propertySetMechanicalFastenerOCSFitting.ObjectType = \"IfcMechanicalFastener\";\r\n            propertySetMechanicalFastenerOCSFitting.PredefinedType = \"COUPLER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerOCSFitting.ManufacturingTechnology\", \"ManufacturingTechnology\");\r\n            ifcPSE.PropertyName = \"ManufacturingTechnology\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ManufacturingTechnologyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerOCSFitting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerOCSFitting.OCSFasteningType\", \"OCSFasteningType\");\r\n            ifcPSE.PropertyName = \"OCSFasteningType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_OCSFasteningType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OCSFasteningTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerOCSFitting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMechanicalFastenerOCSFitting);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MechanicalFastenerTypeRailFastening(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMechanicalFastenerTypeRailFastening = new PropertySetDescription();\r\n         propertySetMechanicalFastenerTypeRailFastening.Name = \"Pset_MechanicalFastenerTypeRailFastening\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MechanicalFastenerTypeRailFastening\"))\r\n         {\r\n            propertySetMechanicalFastenerTypeRailFastening.EntityTypes.Add(IFCEntityType.IfcMechanicalFastener);\r\n            propertySetMechanicalFastenerTypeRailFastening.EntityTypes.Add(IFCEntityType.IfcMechanicalFastenerType);\r\n            propertySetMechanicalFastenerTypeRailFastening.ObjectType = \"IfcMechanicalFastener\";\r\n            propertySetMechanicalFastenerTypeRailFastening.PredefinedType = \"RAILFASTENING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerTypeRailFastening.TechnicalStandard\", \"TechnicalStandard\");\r\n            ifcPSE.PropertyName = \"TechnicalStandard\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TechnicalStandardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerTypeRailFastening.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerTypeRailFastening.IsReducedResistanceFastening\", \"IsReducedResistanceFastening\");\r\n            ifcPSE.PropertyName = \"IsReducedResistanceFastening\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsReducedResistanceFasteningCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerTypeRailFastening.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerTypeRailFastening.TrackFasteningElasticityType\", \"TrackFasteningElasticityType\");\r\n            ifcPSE.PropertyName = \"TrackFasteningElasticityType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TrackFasteningElasticityType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrackFasteningElasticityTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerTypeRailFastening.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMechanicalFastenerTypeRailFastening);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MechanicalFastenerTypeRailJoint(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMechanicalFastenerTypeRailJoint = new PropertySetDescription();\r\n         propertySetMechanicalFastenerTypeRailJoint.Name = \"Pset_MechanicalFastenerTypeRailJoint\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MechanicalFastenerTypeRailJoint\"))\r\n         {\r\n            propertySetMechanicalFastenerTypeRailJoint.EntityTypes.Add(IFCEntityType.IfcMechanicalFastener);\r\n            propertySetMechanicalFastenerTypeRailJoint.EntityTypes.Add(IFCEntityType.IfcMechanicalFastenerType);\r\n            propertySetMechanicalFastenerTypeRailJoint.ObjectType = \"IfcMechanicalFastener\";\r\n            propertySetMechanicalFastenerTypeRailJoint.PredefinedType = \"RAILJOINT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerTypeRailJoint.SleeperArrangement\", \"SleeperArrangement\");\r\n            ifcPSE.PropertyName = \"SleeperArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SleeperArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SleeperArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerTypeRailJoint.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerTypeRailJoint.IsCWRJoint\", \"IsCWRJoint\");\r\n            ifcPSE.PropertyName = \"IsCWRJoint\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsCWRJointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerTypeRailJoint.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerTypeRailJoint.IsJointInsulated\", \"IsJointInsulated\");\r\n            ifcPSE.PropertyName = \"IsJointInsulated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsJointInsulatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerTypeRailJoint.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerTypeRailJoint.IsLiftingBracketConnection\", \"IsLiftingBracketConnection\");\r\n            ifcPSE.PropertyName = \"IsLiftingBracketConnection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsLiftingBracketConnectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerTypeRailJoint.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerTypeRailJoint.NumberOfScrews\", \"NumberOfScrews\");\r\n            ifcPSE.PropertyName = \"NumberOfScrews\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfScrewsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerTypeRailJoint.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerTypeRailJoint.RailGap\", \"RailGap\");\r\n            ifcPSE.PropertyName = \"RailGap\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RailGapCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerTypeRailJoint.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerTypeRailJoint.IsJointControlEquipment\", \"IsJointControlEquipment\");\r\n            ifcPSE.PropertyName = \"IsJointControlEquipment\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsJointControlEquipmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerTypeRailJoint.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalFastenerTypeRailJoint.AssemblyPlace\", \"AssemblyPlace\");\r\n            ifcPSE.PropertyName = \"AssemblyPlace\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AssemblyPlace);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyPlaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalFastenerTypeRailJoint.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMechanicalFastenerTypeRailJoint);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MechanicalPanelInPlane(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMechanicalPanelInPlane = new PropertySetDescription();\r\n         propertySetMechanicalPanelInPlane.Name = \"Pset_MechanicalPanelInPlane\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MechanicalPanelInPlane\"))\r\n         {\r\n            propertySetMechanicalPanelInPlane.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMechanicalPanelInPlane.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelInPlane.YoungModulusBending\", \"YoungModulusBending\");\r\n            ifcPSE.PropertyName = \"YoungModulusBending\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusBendingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelInPlane.YoungModulusTension\", \"YoungModulusTension\");\r\n            ifcPSE.PropertyName = \"YoungModulusTension\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusTensionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelInPlane.YoungModulusCompression\", \"YoungModulusCompression\");\r\n            ifcPSE.PropertyName = \"YoungModulusCompression\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCompressionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelInPlane.ShearModulus\", \"ShearModulus\");\r\n            ifcPSE.PropertyName = \"ShearModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelInPlane.BendingStrength\", \"BendingStrength\");\r\n            ifcPSE.PropertyName = \"BendingStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelInPlane.CompressiveStrength\", \"CompressiveStrength\");\r\n            ifcPSE.PropertyName = \"CompressiveStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressiveStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelInPlane.TensileStrength\", \"TensileStrength\");\r\n            ifcPSE.PropertyName = \"TensileStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelInPlane.ShearStrength\", \"ShearStrength\");\r\n            ifcPSE.PropertyName = \"ShearStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelInPlane.BearingStrength\", \"BearingStrength\");\r\n            ifcPSE.PropertyName = \"BearingStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BearingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelInPlane.RaisedCompressiveStrength\", \"RaisedCompressiveStrength\");\r\n            ifcPSE.PropertyName = \"RaisedCompressiveStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RaisedCompressiveStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelInPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelInPlane.ReferenceDepth\", \"ReferenceDepth\");\r\n            ifcPSE.PropertyName = \"ReferenceDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelInPlane.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMechanicalPanelInPlane);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MechanicalPanelOutOfPlane(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMechanicalPanelOutOfPlane = new PropertySetDescription();\r\n         propertySetMechanicalPanelOutOfPlane.Name = \"Pset_MechanicalPanelOutOfPlane\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MechanicalPanelOutOfPlane\"))\r\n         {\r\n            propertySetMechanicalPanelOutOfPlane.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMechanicalPanelOutOfPlane.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlane.YoungModulusBending\", \"YoungModulusBending\");\r\n            ifcPSE.PropertyName = \"YoungModulusBending\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusBendingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlane.YoungModulusTension\", \"YoungModulusTension\");\r\n            ifcPSE.PropertyName = \"YoungModulusTension\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusTensionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlane.YoungModulusCompression\", \"YoungModulusCompression\");\r\n            ifcPSE.PropertyName = \"YoungModulusCompression\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCompressionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlane.ShearModulus\", \"ShearModulus\");\r\n            ifcPSE.PropertyName = \"ShearModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlane.BendingStrength\", \"BendingStrength\");\r\n            ifcPSE.PropertyName = \"BendingStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlane.CompressiveStrength\", \"CompressiveStrength\");\r\n            ifcPSE.PropertyName = \"CompressiveStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressiveStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlane.TensileStrength\", \"TensileStrength\");\r\n            ifcPSE.PropertyName = \"TensileStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlane.ShearStrength\", \"ShearStrength\");\r\n            ifcPSE.PropertyName = \"ShearStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlane.BearingStrength\", \"BearingStrength\");\r\n            ifcPSE.PropertyName = \"BearingStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BearingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlane.RaisedCompressiveStrength\", \"RaisedCompressiveStrength\");\r\n            ifcPSE.PropertyName = \"RaisedCompressiveStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RaisedCompressiveStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlane.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlane.ReferenceDepth\", \"ReferenceDepth\");\r\n            ifcPSE.PropertyName = \"ReferenceDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlane.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMechanicalPanelOutOfPlane);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MechanicalPanelOutOfPlaneNegative(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMechanicalPanelOutOfPlaneNegative = new PropertySetDescription();\r\n         propertySetMechanicalPanelOutOfPlaneNegative.Name = \"Pset_MechanicalPanelOutOfPlaneNegative\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MechanicalPanelOutOfPlaneNegative\"))\r\n         {\r\n            propertySetMechanicalPanelOutOfPlaneNegative.EntityTypes.Add(IFCEntityType.IfcMaterial);\r\n            propertySetMechanicalPanelOutOfPlaneNegative.ObjectType = \"IfcMaterial\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlaneNegative.YoungModulusBending\", \"YoungModulusBending\");\r\n            ifcPSE.PropertyName = \"YoungModulusBending\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusBendingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlaneNegative.YoungModulusTension\", \"YoungModulusTension\");\r\n            ifcPSE.PropertyName = \"YoungModulusTension\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusTensionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlaneNegative.YoungModulusCompression\", \"YoungModulusCompression\");\r\n            ifcPSE.PropertyName = \"YoungModulusCompression\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YoungModulusCompressionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlaneNegative.ShearModulus\", \"ShearModulus\");\r\n            ifcPSE.PropertyName = \"ShearModulus\";\r\n            ifcPSE.PropertyType = PropertyType.ModulusOfElasticity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlaneNegative.BendingStrength\", \"BendingStrength\");\r\n            ifcPSE.PropertyName = \"BendingStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlaneNegative.CompressiveStrength\", \"CompressiveStrength\");\r\n            ifcPSE.PropertyName = \"CompressiveStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompressiveStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlaneNegative.TensileStrength\", \"TensileStrength\");\r\n            ifcPSE.PropertyName = \"TensileStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlaneNegative.ShearStrength\", \"ShearStrength\");\r\n            ifcPSE.PropertyName = \"ShearStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlaneNegative.BearingStrength\", \"BearingStrength\");\r\n            ifcPSE.PropertyName = \"BearingStrength\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BearingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlaneNegative.RaisedCompressiveStrength\", \"RaisedCompressiveStrength\");\r\n            ifcPSE.PropertyName = \"RaisedCompressiveStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RaisedCompressiveStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlaneNegative.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MechanicalPanelOutOfPlaneNegative.ReferenceDepth\", \"ReferenceDepth\");\r\n            ifcPSE.PropertyName = \"ReferenceDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMechanicalPanelOutOfPlaneNegative.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMechanicalPanelOutOfPlaneNegative);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MedicalDeviceTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMedicalDeviceTypeCommon = new PropertySetDescription();\r\n         propertySetMedicalDeviceTypeCommon.Name = \"Pset_MedicalDeviceTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MedicalDeviceTypeCommon\"))\r\n         {\r\n            propertySetMedicalDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcMedicalDevice);\r\n            propertySetMedicalDeviceTypeCommon.ObjectType = \"IfcMedicalDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MedicalDeviceTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMedicalDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MedicalDeviceTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMedicalDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MedicalDeviceTypeCommon\"))\r\n         {\r\n            propertySetMedicalDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcMedicalDevice);\r\n            propertySetMedicalDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcMedicalDeviceType);\r\n            propertySetMedicalDeviceTypeCommon.ObjectType = \"IfcMedicalDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MedicalDeviceTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMedicalDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MedicalDeviceTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMedicalDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMedicalDeviceTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MemberCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMemberCommon = new PropertySetDescription();\r\n         propertySetMemberCommon.Name = \"Pset_MemberCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MemberCommon\"))\r\n         {\r\n            propertySetMemberCommon.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.Span\", \"Span\");\r\n            ifcPSE.PropertyName = \"Span\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MemberCommon\"))\r\n         {\r\n            propertySetMemberCommon.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.Span\", \"Span\");\r\n            ifcPSE.PropertyName = \"Span\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MemberCommon\"))\r\n         {\r\n            propertySetMemberCommon.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetMemberCommon.ObjectType = \"IfcMember\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bauteiltyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.Span\", \"Span\");\r\n            ifcPSE.PropertyName = \"Span\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Spannweite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Span\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PorteeLibre\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"全長\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"跨度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Neigungswinkel\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Slope\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Inclinaison\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"傾斜\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"坡度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.Roll\", \"Roll\");\r\n            ifcPSE.PropertyName = \"Roll\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Kippwinkel\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Roll\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"RotationAutourAxeLongitudinal\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"回転\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"转角\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RollCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Außenbauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EstExterieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否外部构件\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"U-Wert\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TransmissionThermique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱貫流率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"导热系数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Tragendes Bauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Load Bearing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Porteur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐力部材\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否承重\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Feuerwiderstandsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ResistanceAuFeu\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐火等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"防火等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MemberCommon\"))\r\n         {\r\n            propertySetMemberCommon.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetMemberCommon.EntityTypes.Add(IFCEntityType.IfcMemberType);\r\n            propertySetMemberCommon.ObjectType = \"IfcMember\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.Span\", \"Span\");\r\n            ifcPSE.PropertyName = \"Span\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.Roll\", \"Roll\");\r\n            ifcPSE.PropertyName = \"Roll\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RollCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMemberCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MemberTypeAnchoringBar(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMemberTypeAnchoringBar = new PropertySetDescription();\r\n         propertySetMemberTypeAnchoringBar.Name = \"Pset_MemberTypeAnchoringBar\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MemberTypeAnchoringBar\"))\r\n         {\r\n            propertySetMemberTypeAnchoringBar.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetMemberTypeAnchoringBar.EntityTypes.Add(IFCEntityType.IfcMemberType);\r\n            propertySetMemberTypeAnchoringBar.ObjectType = \"IfcMember\";\r\n            propertySetMemberTypeAnchoringBar.PredefinedType = \"BRACE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberTypeAnchoringBar.MechanicalStressType\", \"MechanicalStressType\");\r\n            ifcPSE.PropertyName = \"MechanicalStressType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_MechanicalStressType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalStressTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberTypeAnchoringBar.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberTypeAnchoringBar.HasLightningRod\", \"HasLightningRod\");\r\n            ifcPSE.PropertyName = \"HasLightningRod\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasLightningRodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberTypeAnchoringBar.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMemberTypeAnchoringBar);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MemberTypeCatenaryStay(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMemberTypeCatenaryStay = new PropertySetDescription();\r\n         propertySetMemberTypeCatenaryStay.Name = \"Pset_MemberTypeCatenaryStay\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MemberTypeCatenaryStay\"))\r\n         {\r\n            propertySetMemberTypeCatenaryStay.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetMemberTypeCatenaryStay.EntityTypes.Add(IFCEntityType.IfcMemberType);\r\n            propertySetMemberTypeCatenaryStay.ObjectType = \"IfcMember\";\r\n            propertySetMemberTypeCatenaryStay.PredefinedType = \"STAY_CABLE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberTypeCatenaryStay.AssemblyInstruction\", \"AssemblyInstruction\");\r\n            ifcPSE.PropertyName = \"AssemblyInstruction\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyInstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberTypeCatenaryStay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberTypeCatenaryStay.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberTypeCatenaryStay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberTypeCatenaryStay.CatenaryStayType\", \"CatenaryStayType\");\r\n            ifcPSE.PropertyName = \"CatenaryStayType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CatenaryStayType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CatenaryStayTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberTypeCatenaryStay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberTypeCatenaryStay.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberTypeCatenaryStay.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMemberTypeCatenaryStay);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MemberTypeOCSRigidSupport(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMemberTypeOCSRigidSupport = new PropertySetDescription();\r\n         propertySetMemberTypeOCSRigidSupport.Name = \"Pset_MemberTypeOCSRigidSupport\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MemberTypeOCSRigidSupport\"))\r\n         {\r\n            propertySetMemberTypeOCSRigidSupport.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetMemberTypeOCSRigidSupport.EntityTypes.Add(IFCEntityType.IfcMemberType);\r\n            propertySetMemberTypeOCSRigidSupport.ObjectType = \"IfcMember\";\r\n            propertySetMemberTypeOCSRigidSupport.PredefinedType = \"MEMBER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberTypeOCSRigidSupport.AssemblyInstruction\", \"AssemblyInstruction\");\r\n            ifcPSE.PropertyName = \"AssemblyInstruction\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyInstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberTypeOCSRigidSupport.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberTypeOCSRigidSupport.ContactWireStagger\", \"ContactWireStagger\");\r\n            ifcPSE.PropertyName = \"ContactWireStagger\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContactWireStaggerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberTypeOCSRigidSupport.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMemberTypeOCSRigidSupport);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MemberTypePost(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMemberTypePost = new PropertySetDescription();\r\n         propertySetMemberTypePost.Name = \"Pset_MemberTypePost\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MemberTypePost\"))\r\n         {\r\n            propertySetMemberTypePost.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetMemberTypePost.EntityTypes.Add(IFCEntityType.IfcMemberType);\r\n            propertySetMemberTypePost.ObjectType = \"IfcMember\";\r\n            propertySetMemberTypePost.PredefinedType = \"POST\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberTypePost.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberTypePost.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberTypePost.ConicityRatio\", \"ConicityRatio\");\r\n            ifcPSE.PropertyName = \"ConicityRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConicityRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberTypePost.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberTypePost.LoadBearingCapacity\", \"LoadBearingCapacity\");\r\n            ifcPSE.PropertyName = \"LoadBearingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.PlanarForce;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberTypePost.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberTypePost.WindLoadRating\", \"WindLoadRating\");\r\n            ifcPSE.PropertyName = \"WindLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WindLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberTypePost.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberTypePost.TorsionalStrength\", \"TorsionalStrength\");\r\n            ifcPSE.PropertyName = \"TorsionalStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorsionalStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberTypePost.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberTypePost.BendingStrength\", \"BendingStrength\");\r\n            ifcPSE.PropertyName = \"BendingStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberTypePost.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMemberTypePost);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MemberTypeTieBar(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMemberTypeTieBar = new PropertySetDescription();\r\n         propertySetMemberTypeTieBar.Name = \"Pset_MemberTypeTieBar\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MemberTypeTieBar\"))\r\n         {\r\n            propertySetMemberTypeTieBar.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetMemberTypeTieBar.EntityTypes.Add(IFCEntityType.IfcMemberType);\r\n            propertySetMemberTypeTieBar.ObjectType = \"IfcMember\";\r\n            propertySetMemberTypeTieBar.PredefinedType = \"TIEBAR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MemberTypeTieBar.IsTemporaryInstallation\", \"IsTemporaryInstallation\");\r\n            ifcPSE.PropertyName = \"IsTemporaryInstallation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsTemporaryInstallationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMemberTypeTieBar.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMemberTypeTieBar);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MobileTelecommunicationsApplianceTypeAccessPoint(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMobileTelecommunicationsApplianceTypeAccessPoint = new PropertySetDescription();\r\n         propertySetMobileTelecommunicationsApplianceTypeAccessPoint.Name = \"Pset_MobileTelecommunicationsApplianceTypeAccessPoint\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MobileTelecommunicationsApplianceTypeAccessPoint\"))\r\n         {\r\n            propertySetMobileTelecommunicationsApplianceTypeAccessPoint.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsAppliance);\r\n            propertySetMobileTelecommunicationsApplianceTypeAccessPoint.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsApplianceType);\r\n            propertySetMobileTelecommunicationsApplianceTypeAccessPoint.ObjectType = \"IfcMobileTelecommunicationsAppliance\";\r\n            propertySetMobileTelecommunicationsApplianceTypeAccessPoint.PredefinedType = \"ACCESSPOINT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeAccessPoint.BandWidth\", \"BandWidth\");\r\n            ifcPSE.PropertyName = \"BandWidth\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BandWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeAccessPoint.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeAccessPoint.DataEncryptionType\", \"DataEncryptionType\");\r\n            ifcPSE.PropertyName = \"DataEncryptionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DataEncryptionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeAccessPoint.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeAccessPoint.DataExchangeRate\", \"DataExchangeRate\");\r\n            ifcPSE.PropertyName = \"DataExchangeRate\";\r\n            ifcPSE.PropertyType = PropertyType.IntegerCountRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DataExchangeRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeAccessPoint.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeAccessPoint.NumberOfAntennas\", \"NumberOfAntennas\");\r\n            ifcPSE.PropertyName = \"NumberOfAntennas\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfAntennasCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeAccessPoint.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeAccessPoint.NumberOfInterfaces\", \"NumberOfInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeAccessPoint.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeAccessPoint.UserCapacity\", \"UserCapacity\");\r\n            ifcPSE.PropertyName = \"UserCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UserCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeAccessPoint.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMobileTelecommunicationsApplianceTypeAccessPoint);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MobileTelecommunicationsApplianceTypeBasebandUnit(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMobileTelecommunicationsApplianceTypeBasebandUnit = new PropertySetDescription();\r\n         propertySetMobileTelecommunicationsApplianceTypeBasebandUnit.Name = \"Pset_MobileTelecommunicationsApplianceTypeBasebandUnit\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MobileTelecommunicationsApplianceTypeBasebandUnit\"))\r\n         {\r\n            propertySetMobileTelecommunicationsApplianceTypeBasebandUnit.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsAppliance);\r\n            propertySetMobileTelecommunicationsApplianceTypeBasebandUnit.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsApplianceType);\r\n            propertySetMobileTelecommunicationsApplianceTypeBasebandUnit.ObjectType = \"IfcMobileTelecommunicationsAppliance\";\r\n            propertySetMobileTelecommunicationsApplianceTypeBasebandUnit.PredefinedType = \"BASEBANDUNIT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeBasebandUnit.NumberOfCarriers\", \"NumberOfCarriers\");\r\n            ifcPSE.PropertyName = \"NumberOfCarriers\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCarriersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeBasebandUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeBasebandUnit.NumberOfInterfaces\", \"NumberOfInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeBasebandUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeBasebandUnit.NumberOfEmergencyTransceivers\", \"NumberOfEmergencyTransceivers\");\r\n            ifcPSE.PropertyName = \"NumberOfEmergencyTransceivers\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfEmergencyTransceiversCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeBasebandUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeBasebandUnit.MaximumNumberOfRRUs\", \"MaximumNumberOfRRUs\");\r\n            ifcPSE.PropertyName = \"MaximumNumberOfRRUs\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumNumberOfRRUsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeBasebandUnit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMobileTelecommunicationsApplianceTypeBasebandUnit);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMobileTelecommunicationsApplianceTypeBaseTransceiverStation = new PropertySetDescription();\r\n         propertySetMobileTelecommunicationsApplianceTypeBaseTransceiverStation.Name = \"Pset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation\"))\r\n         {\r\n            propertySetMobileTelecommunicationsApplianceTypeBaseTransceiverStation.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsAppliance);\r\n            propertySetMobileTelecommunicationsApplianceTypeBaseTransceiverStation.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsApplianceType);\r\n            propertySetMobileTelecommunicationsApplianceTypeBaseTransceiverStation.ObjectType = \"IfcMobileTelecommunicationsAppliance\";\r\n            propertySetMobileTelecommunicationsApplianceTypeBaseTransceiverStation.PredefinedType = \"BASETRANSCEIVERSTATION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.DownlinkRadioBand\", \"DownlinkRadioBand\");\r\n            ifcPSE.PropertyName = \"DownlinkRadioBand\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DownlinkRadioBandCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeBaseTransceiverStation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfCarriers\", \"NumberOfCarriers\");\r\n            ifcPSE.PropertyName = \"NumberOfCarriers\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCarriersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeBaseTransceiverStation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfAntennas\", \"NumberOfAntennas\");\r\n            ifcPSE.PropertyName = \"NumberOfAntennas\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfAntennasCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeBaseTransceiverStation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.UplinkRadioBand\", \"UplinkRadioBand\");\r\n            ifcPSE.PropertyName = \"UplinkRadioBand\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UplinkRadioBandCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeBaseTransceiverStation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.ExchangeCapacity\", \"ExchangeCapacity\");\r\n            ifcPSE.PropertyName = \"ExchangeCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExchangeCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeBaseTransceiverStation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfEmergencyTransceivers\", \"NumberOfEmergencyTransceivers\");\r\n            ifcPSE.PropertyName = \"NumberOfEmergencyTransceivers\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfEmergencyTransceiversCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeBaseTransceiverStation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfTransceiversPerAntenna\", \"NumberOfTransceiversPerAntenna\");\r\n            ifcPSE.PropertyName = \"NumberOfTransceiversPerAntenna\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfTransceiversPerAntennaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeBaseTransceiverStation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.RadiatedOutputPowerPerAntenna\", \"RadiatedOutputPowerPerAntenna\");\r\n            ifcPSE.PropertyName = \"RadiatedOutputPowerPerAntenna\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RadiatedOutputPowerPerAntennaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeBaseTransceiverStation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfInterfaces\", \"NumberOfInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeBaseTransceiverStation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMobileTelecommunicationsApplianceTypeBaseTransceiverStation);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MobileTelecommunicationsApplianceTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMobileTelecommunicationsApplianceTypeCommon = new PropertySetDescription();\r\n         propertySetMobileTelecommunicationsApplianceTypeCommon.Name = \"Pset_MobileTelecommunicationsApplianceTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MobileTelecommunicationsApplianceTypeCommon\"))\r\n         {\r\n            propertySetMobileTelecommunicationsApplianceTypeCommon.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsAppliance);\r\n            propertySetMobileTelecommunicationsApplianceTypeCommon.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsApplianceType);\r\n            propertySetMobileTelecommunicationsApplianceTypeCommon.ObjectType = \"IfcMobileTelecommunicationsAppliance\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMobileTelecommunicationsApplianceTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MobileTelecommunicationsApplianceTypeEUtranNodeB(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMobileTelecommunicationsApplianceTypeEUtranNodeB = new PropertySetDescription();\r\n         propertySetMobileTelecommunicationsApplianceTypeEUtranNodeB.Name = \"Pset_MobileTelecommunicationsApplianceTypeEUtranNodeB\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MobileTelecommunicationsApplianceTypeEUtranNodeB\"))\r\n         {\r\n            propertySetMobileTelecommunicationsApplianceTypeEUtranNodeB.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsAppliance);\r\n            propertySetMobileTelecommunicationsApplianceTypeEUtranNodeB.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsApplianceType);\r\n            propertySetMobileTelecommunicationsApplianceTypeEUtranNodeB.ObjectType = \"IfcMobileTelecommunicationsAppliance\";\r\n            propertySetMobileTelecommunicationsApplianceTypeEUtranNodeB.PredefinedType = \"E_UTRAN_NODE_B\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeEUtranNodeB.DownlinkRadioBand\", \"DownlinkRadioBand\");\r\n            ifcPSE.PropertyName = \"DownlinkRadioBand\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DownlinkRadioBandCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeEUtranNodeB.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeEUtranNodeB.NumberOfCarriers\", \"NumberOfCarriers\");\r\n            ifcPSE.PropertyName = \"NumberOfCarriers\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCarriersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeEUtranNodeB.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeEUtranNodeB.RadiatedOutputPowerPerAntenna\", \"RadiatedOutputPowerPerAntenna\");\r\n            ifcPSE.PropertyName = \"RadiatedOutputPowerPerAntenna\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RadiatedOutputPowerPerAntennaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeEUtranNodeB.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeEUtranNodeB.NumberOfAntennas\", \"NumberOfAntennas\");\r\n            ifcPSE.PropertyName = \"NumberOfAntennas\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfAntennasCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeEUtranNodeB.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeEUtranNodeB.NumberOfInterfaces\", \"NumberOfInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeEUtranNodeB.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeEUtranNodeB.UplinkRadioBand\", \"UplinkRadioBand\");\r\n            ifcPSE.PropertyName = \"UplinkRadioBand\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UplinkRadioBandCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeEUtranNodeB.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMobileTelecommunicationsApplianceTypeEUtranNodeB);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MobileTelecommunicationsApplianceTypeMasterUnit(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMobileTelecommunicationsApplianceTypeMasterUnit = new PropertySetDescription();\r\n         propertySetMobileTelecommunicationsApplianceTypeMasterUnit.Name = \"Pset_MobileTelecommunicationsApplianceTypeMasterUnit\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MobileTelecommunicationsApplianceTypeMasterUnit\"))\r\n         {\r\n            propertySetMobileTelecommunicationsApplianceTypeMasterUnit.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsAppliance);\r\n            propertySetMobileTelecommunicationsApplianceTypeMasterUnit.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsApplianceType);\r\n            propertySetMobileTelecommunicationsApplianceTypeMasterUnit.ObjectType = \"IfcMobileTelecommunicationsAppliance\";\r\n            propertySetMobileTelecommunicationsApplianceTypeMasterUnit.PredefinedType = \"MASTERUNIT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeMasterUnit.NumberOfInterfaces\", \"NumberOfInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeMasterUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeMasterUnit.MaximumNumberOfConnectedRUs\", \"MaximumNumberOfConnectedRUs\");\r\n            ifcPSE.PropertyName = \"MaximumNumberOfConnectedRUs\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumNumberOfConnectedRUsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeMasterUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmissionType\", \"TransmissionType\");\r\n            ifcPSE.PropertyName = \"TransmissionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TransmissionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransmissionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeMasterUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmittedBandwidth\", \"TransmittedBandwidth\");\r\n            ifcPSE.PropertyName = \"TransmittedBandwidth\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransmittedBandwidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeMasterUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmittedFrequency\", \"TransmittedFrequency\");\r\n            ifcPSE.PropertyName = \"TransmittedFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransmittedFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeMasterUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmittedSignal\", \"TransmittedSignal\");\r\n            ifcPSE.PropertyName = \"TransmittedSignal\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TransmittedSignal);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransmittedSignalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeMasterUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeMasterUnit.MasterUnitType\", \"MasterUnitType\");\r\n            ifcPSE.PropertyName = \"MasterUnitType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_MasterUnitType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MasterUnitTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeMasterUnit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMobileTelecommunicationsApplianceTypeMasterUnit);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMobileTelecommunicationsApplianceTypeMobileSwitchingCenter = new PropertySetDescription();\r\n         propertySetMobileTelecommunicationsApplianceTypeMobileSwitchingCenter.Name = \"Pset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter\"))\r\n         {\r\n            propertySetMobileTelecommunicationsApplianceTypeMobileSwitchingCenter.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsAppliance);\r\n            propertySetMobileTelecommunicationsApplianceTypeMobileSwitchingCenter.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsApplianceType);\r\n            propertySetMobileTelecommunicationsApplianceTypeMobileSwitchingCenter.ObjectType = \"IfcMobileTelecommunicationsAppliance\";\r\n            propertySetMobileTelecommunicationsApplianceTypeMobileSwitchingCenter.PredefinedType = \"MOBILESWITCHINGCENTER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter.UserCapacity\", \"UserCapacity\");\r\n            ifcPSE.PropertyName = \"UserCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UserCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeMobileSwitchingCenter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter.NumberOfInterfaces\", \"NumberOfInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeMobileSwitchingCenter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter.MaximumNumberOfManagedBSCs\", \"MaximumNumberOfManagedBSCs\");\r\n            ifcPSE.PropertyName = \"MaximumNumberOfManagedBSCs\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumNumberOfManagedBSCsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeMobileSwitchingCenter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMobileTelecommunicationsApplianceTypeMobileSwitchingCenter);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MobileTelecommunicationsApplianceTypeMSCServer(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMobileTelecommunicationsApplianceTypeMSCServer = new PropertySetDescription();\r\n         propertySetMobileTelecommunicationsApplianceTypeMSCServer.Name = \"Pset_MobileTelecommunicationsApplianceTypeMSCServer\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MobileTelecommunicationsApplianceTypeMSCServer\"))\r\n         {\r\n            propertySetMobileTelecommunicationsApplianceTypeMSCServer.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsAppliance);\r\n            propertySetMobileTelecommunicationsApplianceTypeMSCServer.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsApplianceType);\r\n            propertySetMobileTelecommunicationsApplianceTypeMSCServer.ObjectType = \"IfcMobileTelecommunicationsAppliance\";\r\n            propertySetMobileTelecommunicationsApplianceTypeMSCServer.PredefinedType = \"MSCSERVER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeMSCServer.UserCapacity\", \"UserCapacity\");\r\n            ifcPSE.PropertyName = \"UserCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UserCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeMSCServer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeMSCServer.NumberOfInterfaces\", \"NumberOfInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeMSCServer.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMobileTelecommunicationsApplianceTypeMSCServer);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMobileTeleCommunicationsApplianceTypeRemoteRadioUnit = new PropertySetDescription();\r\n         propertySetMobileTeleCommunicationsApplianceTypeRemoteRadioUnit.Name = \"Pset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit\"))\r\n         {\r\n            propertySetMobileTeleCommunicationsApplianceTypeRemoteRadioUnit.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsAppliance);\r\n            propertySetMobileTeleCommunicationsApplianceTypeRemoteRadioUnit.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsApplianceType);\r\n            propertySetMobileTeleCommunicationsApplianceTypeRemoteRadioUnit.ObjectType = \"IfcMobileTelecommunicationsAppliance\";\r\n            propertySetMobileTeleCommunicationsApplianceTypeRemoteRadioUnit.PredefinedType = \"REMOTERADIOUNIT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.DownlinkRadioBand\", \"DownlinkRadioBand\");\r\n            ifcPSE.PropertyName = \"DownlinkRadioBand\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DownlinkRadioBandCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTeleCommunicationsApplianceTypeRemoteRadioUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.NumberOfCarriers\", \"NumberOfCarriers\");\r\n            ifcPSE.PropertyName = \"NumberOfCarriers\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCarriersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTeleCommunicationsApplianceTypeRemoteRadioUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.NumberOfInterfaces\", \"NumberOfInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTeleCommunicationsApplianceTypeRemoteRadioUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.UplinkRadioBand\", \"UplinkRadioBand\");\r\n            ifcPSE.PropertyName = \"UplinkRadioBand\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UplinkRadioBandCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTeleCommunicationsApplianceTypeRemoteRadioUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.NumberOfTransceiversPerAntenna\", \"NumberOfTransceiversPerAntenna\");\r\n            ifcPSE.PropertyName = \"NumberOfTransceiversPerAntenna\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfTransceiversPerAntennaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTeleCommunicationsApplianceTypeRemoteRadioUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.RadiatedOutputPowerPerAntenna\", \"RadiatedOutputPowerPerAntenna\");\r\n            ifcPSE.PropertyName = \"RadiatedOutputPowerPerAntenna\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RadiatedOutputPowerPerAntennaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTeleCommunicationsApplianceTypeRemoteRadioUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.AntennaType\", \"AntennaType\");\r\n            ifcPSE.PropertyName = \"AntennaType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AntennaTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTeleCommunicationsApplianceTypeRemoteRadioUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.RRUConnectionType\", \"RRUConnectionType\");\r\n            ifcPSE.PropertyName = \"RRUConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_UnitConnectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RRUConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTeleCommunicationsApplianceTypeRemoteRadioUnit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMobileTeleCommunicationsApplianceTypeRemoteRadioUnit);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MobileTelecommunicationsApplianceTypeRemoteUnit(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMobileTelecommunicationsApplianceTypeRemoteUnit = new PropertySetDescription();\r\n         propertySetMobileTelecommunicationsApplianceTypeRemoteUnit.Name = \"Pset_MobileTelecommunicationsApplianceTypeRemoteUnit\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MobileTelecommunicationsApplianceTypeRemoteUnit\"))\r\n         {\r\n            propertySetMobileTelecommunicationsApplianceTypeRemoteUnit.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsAppliance);\r\n            propertySetMobileTelecommunicationsApplianceTypeRemoteUnit.EntityTypes.Add(IFCEntityType.IfcMobileTelecommunicationsApplianceType);\r\n            propertySetMobileTelecommunicationsApplianceTypeRemoteUnit.ObjectType = \"IfcMobileTelecommunicationsAppliance\";\r\n            propertySetMobileTelecommunicationsApplianceTypeRemoteUnit.PredefinedType = \"REMOTEUNIT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeRemoteUnit.NumberOfInterfaces\", \"NumberOfInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeRemoteUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeRemoteUnit.NumberOfAntennas\", \"NumberOfAntennas\");\r\n            ifcPSE.PropertyName = \"NumberOfAntennas\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfAntennasCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeRemoteUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MobileTelecommunicationsApplianceTypeRemoteUnit.RUConnectionType\", \"RUConnectionType\");\r\n            ifcPSE.PropertyName = \"RUConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_UnitConnectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RUConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMobileTelecommunicationsApplianceTypeRemoteUnit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMobileTelecommunicationsApplianceTypeRemoteUnit);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MooringDeviceCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMooringDeviceCommon = new PropertySetDescription();\r\n         propertySetMooringDeviceCommon.Name = \"Pset_MooringDeviceCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MooringDeviceCommon\"))\r\n         {\r\n            propertySetMooringDeviceCommon.EntityTypes.Add(IFCEntityType.IfcMooringDevice);\r\n            propertySetMooringDeviceCommon.EntityTypes.Add(IFCEntityType.IfcMooringDeviceType);\r\n            propertySetMooringDeviceCommon.ObjectType = \"IfcMooringDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MooringDeviceCommon.DeviceType\", \"DeviceType\");\r\n            ifcPSE.PropertyName = \"DeviceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_MooringDeviceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DeviceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMooringDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MooringDeviceCommon.DeviceCapacity\", \"DeviceCapacity\");\r\n            ifcPSE.PropertyName = \"DeviceCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DeviceCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMooringDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MooringDeviceCommon.AnchorageType\", \"AnchorageType\");\r\n            ifcPSE.PropertyName = \"AnchorageType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AnchorageType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnchorageTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMooringDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MooringDeviceCommon.MinumumLineSlope\", \"MinumumLineSlope\");\r\n            ifcPSE.PropertyName = \"MinumumLineSlope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinumumLineSlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMooringDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MooringDeviceCommon.MaximumLineSlope\", \"MaximumLineSlope\");\r\n            ifcPSE.PropertyName = \"MaximumLineSlope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumLineSlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMooringDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MooringDeviceCommon.MaximumLineCount\", \"MaximumLineCount\");\r\n            ifcPSE.PropertyName = \"MaximumLineCount\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumLineCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMooringDeviceCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMooringDeviceCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MotorConnectionTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMotorConnectionTypeCommon = new PropertySetDescription();\r\n         propertySetMotorConnectionTypeCommon.Name = \"Pset_MotorConnectionTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MotorConnectionTypeCommon\"))\r\n         {\r\n            propertySetMotorConnectionTypeCommon.EntityTypes.Add(IFCEntityType.IfcMotorConnection);\r\n            propertySetMotorConnectionTypeCommon.ObjectType = \"IfcMotorConnection\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MotorConnectionTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMotorConnectionTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MotorConnectionTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMotorConnectionTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MotorConnectionTypeCommon\"))\r\n         {\r\n            propertySetMotorConnectionTypeCommon.EntityTypes.Add(IFCEntityType.IfcMotorConnection);\r\n            propertySetMotorConnectionTypeCommon.EntityTypes.Add(IFCEntityType.IfcMotorConnectionType);\r\n            propertySetMotorConnectionTypeCommon.ObjectType = \"IfcMotorConnection\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_MotorConnectionTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMotorConnectionTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MotorConnectionTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMotorConnectionTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMotorConnectionTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MultiStateInput(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMultiStateInput = new PropertySetDescription();\r\n         propertySetMultiStateInput.Name = \"Pset_MultiStateInput\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MultiStateInput\"))\r\n         {\r\n            propertySetMultiStateInput.EntityTypes.Add(IFCEntityType.IfcDistributionControlElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateInput.NumberOfStates\", \"NumberOfStates\");\r\n            ifcPSE.PropertyName = \"NumberOfStates\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfStatesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateInput.StateText\", \"StateText\");\r\n            ifcPSE.PropertyName = \"StateText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StateTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateInput.AlarmValues\", \"AlarmValues\");\r\n            ifcPSE.PropertyName = \"AlarmValues\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AlarmValuesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateInput.EventEnable\", \"EventEnable\");\r\n            ifcPSE.PropertyName = \"EventEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BACnetEventEnableType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EventEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateInput.NotifyType\", \"NotifyType\");\r\n            ifcPSE.PropertyName = \"NotifyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BACnetNotifyType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NotifyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateInput.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MultiStateInput\"))\r\n         {\r\n            propertySetMultiStateInput.EntityTypes.Add(IFCEntityType.IfcDistributionControlElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateInput.NumberOfStates\", \"NumberOfStates\");\r\n            ifcPSE.PropertyName = \"NumberOfStates\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfStatesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateInput.StateText\", \"StateText\");\r\n            ifcPSE.PropertyName = \"StateText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StateTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateInput.AlarmValues\", \"AlarmValues\");\r\n            ifcPSE.PropertyName = \"AlarmValues\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AlarmValuesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateInput.EventEnable\", \"EventEnable\");\r\n            ifcPSE.PropertyName = \"EventEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BACnetEventEnableType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EventEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateInput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateInput.NotifyType\", \"NotifyType\");\r\n            ifcPSE.PropertyName = \"NotifyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BACnetNotifyType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NotifyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateInput.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMultiStateInput);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_MultiStateOutput(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetMultiStateOutput = new PropertySetDescription();\r\n         propertySetMultiStateOutput.Name = \"Pset_MultiStateOutput\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MultiStateOutput\"))\r\n         {\r\n            propertySetMultiStateOutput.EntityTypes.Add(IFCEntityType.IfcDistributionControlElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateOutput.NumberOfStates\", \"NumberOfStates\");\r\n            ifcPSE.PropertyName = \"NumberOfStates\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfStatesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateOutput.StateText\", \"StateText\");\r\n            ifcPSE.PropertyName = \"StateText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StateTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateOutput.AlarmValues\", \"AlarmValues\");\r\n            ifcPSE.PropertyName = \"AlarmValues\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AlarmValuesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateOutput.EventEnable\", \"EventEnable\");\r\n            ifcPSE.PropertyName = \"EventEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BACnetEventEnableType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EventEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateOutput.NotifyType\", \"NotifyType\");\r\n            ifcPSE.PropertyName = \"NotifyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BACnetNotifyType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NotifyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateOutput.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_MultiStateOutput\"))\r\n         {\r\n            propertySetMultiStateOutput.EntityTypes.Add(IFCEntityType.IfcDistributionControlElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateOutput.NumberOfStates\", \"NumberOfStates\");\r\n            ifcPSE.PropertyName = \"NumberOfStates\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfStatesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateOutput.StateText\", \"StateText\");\r\n            ifcPSE.PropertyName = \"StateText\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StateTextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateOutput.AlarmValues\", \"AlarmValues\");\r\n            ifcPSE.PropertyName = \"AlarmValues\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AlarmValuesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateOutput.EventEnable\", \"EventEnable\");\r\n            ifcPSE.PropertyName = \"EventEnable\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BACnetEventEnableType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EventEnableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateOutput.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_MultiStateOutput.NotifyType\", \"NotifyType\");\r\n            ifcPSE.PropertyName = \"NotifyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BACnetNotifyType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NotifyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetMultiStateOutput.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetMultiStateOutput);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_OnSiteCastKerb(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetOnSiteCastKerb = new PropertySetDescription();\r\n         propertySetOnSiteCastKerb.Name = \"Pset_OnSiteCastKerb\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_OnSiteCastKerb\"))\r\n         {\r\n            propertySetOnSiteCastKerb.EntityTypes.Add(IFCEntityType.IfcKerb);\r\n            propertySetOnSiteCastKerb.EntityTypes.Add(IFCEntityType.IfcKerbType);\r\n            propertySetOnSiteCastKerb.ObjectType = \"IfcKerb\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_OnSiteCastKerb.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOnSiteCastKerb.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OnSiteCastKerb.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOnSiteCastKerb.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetOnSiteCastKerb);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_OnSiteTelecomControlUnit(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetOnSiteTelecomControlUnit = new PropertySetDescription();\r\n         propertySetOnSiteTelecomControlUnit.Name = \"Pset_OnSiteTelecomControlUnit\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_OnSiteTelecomControlUnit\"))\r\n         {\r\n            propertySetOnSiteTelecomControlUnit.EntityTypes.Add(IFCEntityType.IfcController);\r\n            propertySetOnSiteTelecomControlUnit.EntityTypes.Add(IFCEntityType.IfcControllerType);\r\n            propertySetOnSiteTelecomControlUnit.ObjectType = \"IfcController\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_OnSiteTelecomControlUnit.HasEarthquakeAlarm\", \"HasEarthquakeAlarm\");\r\n            ifcPSE.PropertyName = \"HasEarthquakeAlarm\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasEarthquakeAlarmCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOnSiteTelecomControlUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OnSiteTelecomControlUnit.HasEarthquakeCollection\", \"HasEarthquakeCollection\");\r\n            ifcPSE.PropertyName = \"HasEarthquakeCollection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasEarthquakeCollectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOnSiteTelecomControlUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OnSiteTelecomControlUnit.HasForeignObjectCollection\", \"HasForeignObjectCollection\");\r\n            ifcPSE.PropertyName = \"HasForeignObjectCollection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasForeignObjectCollectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOnSiteTelecomControlUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OnSiteTelecomControlUnit.ControllerInterfaceType\", \"ControllerInterfaceType\");\r\n            ifcPSE.PropertyName = \"ControllerInterfaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ControllerInterfaceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ControllerInterfaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOnSiteTelecomControlUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OnSiteTelecomControlUnit.HasOutputFunction\", \"HasOutputFunction\");\r\n            ifcPSE.PropertyName = \"HasOutputFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasOutputFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOnSiteTelecomControlUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OnSiteTelecomControlUnit.HasRainCollection\", \"HasRainCollection\");\r\n            ifcPSE.PropertyName = \"HasRainCollection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasRainCollectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOnSiteTelecomControlUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OnSiteTelecomControlUnit.HasSnowCollection\", \"HasSnowCollection\");\r\n            ifcPSE.PropertyName = \"HasSnowCollection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasSnowCollectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOnSiteTelecomControlUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OnSiteTelecomControlUnit.HasWindCollection\", \"HasWindCollection\");\r\n            ifcPSE.PropertyName = \"HasWindCollection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasWindCollectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOnSiteTelecomControlUnit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetOnSiteTelecomControlUnit);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_OpeningElementCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetOpeningElementCommon = new PropertySetDescription();\r\n         propertySetOpeningElementCommon.Name = \"Pset_OpeningElementCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_OpeningElementCommon\"))\r\n         {\r\n            propertySetOpeningElementCommon.EntityTypes.Add(IFCEntityType.IfcOpeningElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.Purpose\", \"Purpose\");\r\n            ifcPSE.PropertyName = \"Purpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.ProtectedOpening\", \"ProtectedOpening\");\r\n            ifcPSE.PropertyName = \"ProtectedOpening\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProtectedOpeningCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.ParallelJambs\", \"ParallelJambs\");\r\n            ifcPSE.PropertyName = \"ParallelJambs\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ParallelJambsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_OpeningElementCommon\"))\r\n         {\r\n            propertySetOpeningElementCommon.EntityTypes.Add(IFCEntityType.IfcOpeningElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.Purpose\", \"Purpose\");\r\n            ifcPSE.PropertyName = \"Purpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.ProtectedOpening\", \"ProtectedOpening\");\r\n            ifcPSE.PropertyName = \"ProtectedOpening\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProtectedOpeningCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.ParallelJambs\", \"ParallelJambs\");\r\n            ifcPSE.PropertyName = \"ParallelJambs\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ParallelJambsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_OpeningElementCommon\"))\r\n         {\r\n            propertySetOpeningElementCommon.EntityTypes.Add(IFCEntityType.IfcOpeningElement);\r\n            propertySetOpeningElementCommon.ObjectType = \"IfcOpeningElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Referenz ID\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조ID\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.Purpose\", \"Purpose\");\r\n            ifcPSE.PropertyName = \"Purpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Purpose\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Motif\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"目的\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Exit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Sortie de secours\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"非常口区分\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.ProtectedOpening\", \"ProtectedOpening\");\r\n            ifcPSE.PropertyName = \"ProtectedOpening\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Protected Opening\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Ouverture avec protection incendie\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"保護\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProtectedOpeningCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_OpeningElementCommon\"))\r\n         {\r\n            propertySetOpeningElementCommon.EntityTypes.Add(IFCEntityType.IfcOpeningElement);\r\n            propertySetOpeningElementCommon.ObjectType = \"IfcOpeningElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.Purpose\", \"Purpose\");\r\n            ifcPSE.PropertyName = \"Purpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpeningElementCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpeningElementCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetOpeningElementCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_OpticalAdapter(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetOpticalAdapter = new PropertySetDescription();\r\n         propertySetOpticalAdapter.Name = \"Pset_OpticalAdapter\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_OpticalAdapter\"))\r\n         {\r\n            propertySetOpticalAdapter.EntityTypes.Add(IFCEntityType.IfcCableFitting);\r\n            propertySetOpticalAdapter.EntityTypes.Add(IFCEntityType.IfcCableFittingType);\r\n            propertySetOpticalAdapter.ObjectType = \"IfcCableFitting\";\r\n            propertySetOpticalAdapter.PredefinedType = \"TRANSITION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpticalAdapter.FiberType\", \"FiberType\");\r\n            ifcPSE.PropertyName = \"FiberType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FiberType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FiberTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpticalAdapter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetOpticalAdapter);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_OpticalPigtail(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetOpticalPigtail = new PropertySetDescription();\r\n         propertySetOpticalPigtail.Name = \"Pset_OpticalPigtail\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_OpticalPigtail\"))\r\n         {\r\n            propertySetOpticalPigtail.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetOpticalPigtail.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetOpticalPigtail.ObjectType = \"IfcCableSegment\";\r\n            propertySetOpticalPigtail.PredefinedType = \"OPTICALCABLESEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpticalPigtail.JacketColour\", \"JacketColour\");\r\n            ifcPSE.PropertyName = \"JacketColour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.JacketColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpticalPigtail.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpticalPigtail.FiberType\", \"FiberType\");\r\n            ifcPSE.PropertyName = \"FiberType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FiberType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FiberTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpticalPigtail.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpticalPigtail.ConnectorType\", \"ConnectorType\");\r\n            ifcPSE.PropertyName = \"ConnectorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpticalPigtail.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetOpticalPigtail);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_OpticalSplitter(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetOpticalSplitter = new PropertySetDescription();\r\n         propertySetOpticalSplitter.Name = \"Pset_OpticalSplitter\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_OpticalSplitter\"))\r\n         {\r\n            propertySetOpticalSplitter.EntityTypes.Add(IFCEntityType.IfcJunctionBox);\r\n            propertySetOpticalSplitter.EntityTypes.Add(IFCEntityType.IfcJunctionBoxType);\r\n            propertySetOpticalSplitter.ObjectType = \"IfcJunctionBox\";\r\n            propertySetOpticalSplitter.PredefinedType = \"DATA\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpticalSplitter.NumberOfBranches\", \"NumberOfBranches\");\r\n            ifcPSE.PropertyName = \"NumberOfBranches\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfBranchesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpticalSplitter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpticalSplitter.OpticalSplitterType\", \"OpticalSplitterType\");\r\n            ifcPSE.PropertyName = \"OpticalSplitterType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_OpticalSplitterType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OpticalSplitterTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpticalSplitter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OpticalSplitter.NumberOfInterfaces\", \"NumberOfInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOpticalSplitter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetOpticalSplitter);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_OutletTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetOutletTypeCommon = new PropertySetDescription();\r\n         propertySetOutletTypeCommon.Name = \"Pset_OutletTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_OutletTypeCommon\"))\r\n         {\r\n            propertySetOutletTypeCommon.EntityTypes.Add(IFCEntityType.IfcOutletType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutletTypeCommon.IsPluggableOutlet\", \"IsPluggableOutlet\");\r\n            ifcPSE.PropertyName = \"IsPluggableOutlet\";\r\n            ifcPSE.PropertyType = PropertyType.Logical;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsPluggableOutletCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutletTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_OutletTypeCommon\"))\r\n         {\r\n            propertySetOutletTypeCommon.EntityTypes.Add(IFCEntityType.IfcOutletType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutletTypeCommon.IsPluggableOutlet\", \"IsPluggableOutlet\");\r\n            ifcPSE.PropertyName = \"IsPluggableOutlet\";\r\n            ifcPSE.PropertyType = PropertyType.Logical;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsPluggableOutletCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutletTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_OutletTypeCommon\"))\r\n         {\r\n            propertySetOutletTypeCommon.EntityTypes.Add(IFCEntityType.IfcOutlet);\r\n            propertySetOutletTypeCommon.ObjectType = \"IfcOutlet\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutletTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutletTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutletTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutletTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutletTypeCommon.IsPluggableOutlet\", \"IsPluggableOutlet\");\r\n            ifcPSE.PropertyName = \"IsPluggableOutlet\";\r\n            ifcPSE.PropertyType = PropertyType.Logical;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Pluggable Outlet\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"プラグ接続可否\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"플러그 여부\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsPluggableOutletCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutletTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutletTypeCommon.NumberOfSockets\", \"NumberOfSockets\");\r\n            ifcPSE.PropertyName = \"NumberOfSockets\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Sockets\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSocketsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutletTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_OutletTypeCommon\"))\r\n         {\r\n            propertySetOutletTypeCommon.EntityTypes.Add(IFCEntityType.IfcOutlet);\r\n            propertySetOutletTypeCommon.EntityTypes.Add(IFCEntityType.IfcOutletType);\r\n            propertySetOutletTypeCommon.ObjectType = \"IfcOutlet\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutletTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutletTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutletTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutletTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutletTypeCommon.IsPluggableOutlet\", \"IsPluggableOutlet\");\r\n            ifcPSE.PropertyName = \"IsPluggableOutlet\";\r\n            ifcPSE.PropertyType = PropertyType.Logical;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsPluggableOutletCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutletTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutletTypeCommon.NumberOfSockets\", \"NumberOfSockets\");\r\n            ifcPSE.PropertyName = \"NumberOfSockets\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSocketsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutletTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetOutletTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_OutsideDesignCriteria(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetOutsideDesignCriteria = new PropertySetDescription();\r\n         propertySetOutsideDesignCriteria.Name = \"Pset_OutsideDesignCriteria\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_OutsideDesignCriteria\"))\r\n         {\r\n            propertySetOutsideDesignCriteria.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.HeatingDryBulb\", \"HeatingDryBulb\");\r\n            ifcPSE.PropertyName = \"HeatingDryBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingDryBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.HeatingWetBulb\", \"HeatingWetBulb\");\r\n            ifcPSE.PropertyName = \"HeatingWetBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingWetBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.HeatingDesignDay\", \"HeatingDesignDay\");\r\n            ifcPSE.PropertyName = \"HeatingDesignDay\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingDesignDayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.CoolingDryBulb\", \"CoolingDryBulb\");\r\n            ifcPSE.PropertyName = \"CoolingDryBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingDryBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.CoolingWetBulb\", \"CoolingWetBulb\");\r\n            ifcPSE.PropertyName = \"CoolingWetBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingWetBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.CoolingDesignDay\", \"CoolingDesignDay\");\r\n            ifcPSE.PropertyName = \"CoolingDesignDay\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingDesignDayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.WeatherDataStation\", \"WeatherDataStation\");\r\n            ifcPSE.PropertyName = \"WeatherDataStation\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeatherDataStationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.WeatherDataDate\", \"WeatherDataDate\");\r\n            ifcPSE.PropertyName = \"WeatherDataDate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeatherDataDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.BuildingThermalExposure\", \"BuildingThermalExposure\");\r\n            ifcPSE.PropertyName = \"BuildingThermalExposure\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BuildingThermalExposure);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BuildingThermalExposureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.PrevailingWindDirection\", \"PrevailingWindDirection\");\r\n            ifcPSE.PropertyName = \"PrevailingWindDirection\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrevailingWindDirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.PrevailingWindVelocity\", \"PrevailingWindVelocity\");\r\n            ifcPSE.PropertyName = \"PrevailingWindVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrevailingWindVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_OutsideDesignCriteria\"))\r\n         {\r\n            propertySetOutsideDesignCriteria.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.HeatingDryBulb\", \"HeatingDryBulb\");\r\n            ifcPSE.PropertyName = \"HeatingDryBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingDryBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.HeatingWetBulb\", \"HeatingWetBulb\");\r\n            ifcPSE.PropertyName = \"HeatingWetBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingWetBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.HeatingDesignDay\", \"HeatingDesignDay\");\r\n            ifcPSE.PropertyName = \"HeatingDesignDay\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingDesignDayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.CoolingDryBulb\", \"CoolingDryBulb\");\r\n            ifcPSE.PropertyName = \"CoolingDryBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingDryBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.CoolingWetBulb\", \"CoolingWetBulb\");\r\n            ifcPSE.PropertyName = \"CoolingWetBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingWetBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.CoolingDesignDay\", \"CoolingDesignDay\");\r\n            ifcPSE.PropertyName = \"CoolingDesignDay\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingDesignDayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.WeatherDataStation\", \"WeatherDataStation\");\r\n            ifcPSE.PropertyName = \"WeatherDataStation\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeatherDataStationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.WeatherDataDate\", \"WeatherDataDate\");\r\n            ifcPSE.PropertyName = \"WeatherDataDate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeatherDataDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.BuildingThermalExposure\", \"BuildingThermalExposure\");\r\n            ifcPSE.PropertyName = \"BuildingThermalExposure\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BuildingThermalExposure);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BuildingThermalExposureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.PrevailingWindDirection\", \"PrevailingWindDirection\");\r\n            ifcPSE.PropertyName = \"PrevailingWindDirection\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrevailingWindDirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.PrevailingWindVelocity\", \"PrevailingWindVelocity\");\r\n            ifcPSE.PropertyName = \"PrevailingWindVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrevailingWindVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_OutsideDesignCriteria\"))\r\n         {\r\n            propertySetOutsideDesignCriteria.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            propertySetOutsideDesignCriteria.ObjectType = \"IfcBuilding\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.HeatingDryBulb\", \"HeatingDryBulb\");\r\n            ifcPSE.PropertyName = \"HeatingDryBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heating Dry Bulb\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"暖房用設計外気乾球温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"난방 설계 외기 건구 온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingDryBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.HeatingWetBulb\", \"HeatingWetBulb\");\r\n            ifcPSE.PropertyName = \"HeatingWetBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heating Wet Bulb\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"暖房用設計外気湿球温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"난방 설계 외기 습구온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingWetBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.HeatingDesignDay\", \"HeatingDesignDay\");\r\n            ifcPSE.PropertyName = \"HeatingDesignDay\";\r\n            ifcPSE.PropertyType = PropertyType.DateTime;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heating Design Day\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"暖房設計基準日\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"난방 설계 기준일\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingDesignDayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.CoolingDryBulb\", \"CoolingDryBulb\");\r\n            ifcPSE.PropertyName = \"CoolingDryBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cooling Dry Bulb\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"冷房用設計外気乾球温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"냉방용 설계 외기건구 온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingDryBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.CoolingWetBulb\", \"CoolingWetBulb\");\r\n            ifcPSE.PropertyName = \"CoolingWetBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cooling Wet Bulb\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"冷房用設計外気湿球温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"냉방용 설계외기 습구온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingWetBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.CoolingDesignDay\", \"CoolingDesignDay\");\r\n            ifcPSE.PropertyName = \"CoolingDesignDay\";\r\n            ifcPSE.PropertyType = PropertyType.DateTime;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cooling Design Day\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"冷房設計基準日\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"냉방설계 기준일\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingDesignDayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.WeatherDataStation\", \"WeatherDataStation\");\r\n            ifcPSE.PropertyName = \"WeatherDataStation\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Weather Data Station\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"気象台所在地\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"기상대 위치\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeatherDataStationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.WeatherDataDate\", \"WeatherDataDate\");\r\n            ifcPSE.PropertyName = \"WeatherDataDate\";\r\n            ifcPSE.PropertyType = PropertyType.DateTime;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Weather Data Date\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"気象データ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"기상데이터\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeatherDataDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.BuildingThermalExposure\", \"BuildingThermalExposure\");\r\n            ifcPSE.PropertyName = \"BuildingThermalExposure\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_BuildingThermalExposure);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Building Thermal Exposure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"周囲環境からの熱放射強度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"주위환경에서 열의 방사강도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BuildingThermalExposureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.PrevailingWindDirection\", \"PrevailingWindDirection\");\r\n            ifcPSE.PropertyName = \"PrevailingWindDirection\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Prevailing Wind Direction\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"卓越風の風向\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"탁월한 방람의 풍향\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrevailingWindDirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.PrevailingWindVelocity\", \"PrevailingWindVelocity\");\r\n            ifcPSE.PropertyName = \"PrevailingWindVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Prevailing Wind Velocity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"卓越風の風速\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"탁월한 바람의 풍속\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrevailingWindVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_OutsideDesignCriteria\"))\r\n         {\r\n            propertySetOutsideDesignCriteria.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            propertySetOutsideDesignCriteria.ObjectType = \"IfcBuilding\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.HeatingDryBulb\", \"HeatingDryBulb\");\r\n            ifcPSE.PropertyName = \"HeatingDryBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingDryBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.HeatingWetBulb\", \"HeatingWetBulb\");\r\n            ifcPSE.PropertyName = \"HeatingWetBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingWetBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.HeatingDesignDay\", \"HeatingDesignDay\");\r\n            ifcPSE.PropertyName = \"HeatingDesignDay\";\r\n            ifcPSE.PropertyType = PropertyType.DateTime;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingDesignDayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.CoolingDryBulb\", \"CoolingDryBulb\");\r\n            ifcPSE.PropertyName = \"CoolingDryBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingDryBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.CoolingWetBulb\", \"CoolingWetBulb\");\r\n            ifcPSE.PropertyName = \"CoolingWetBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingWetBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.CoolingDesignDay\", \"CoolingDesignDay\");\r\n            ifcPSE.PropertyName = \"CoolingDesignDay\";\r\n            ifcPSE.PropertyType = PropertyType.DateTime;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingDesignDayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.WeatherDataStation\", \"WeatherDataStation\");\r\n            ifcPSE.PropertyName = \"WeatherDataStation\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeatherDataStationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.WeatherDataDate\", \"WeatherDataDate\");\r\n            ifcPSE.PropertyName = \"WeatherDataDate\";\r\n            ifcPSE.PropertyType = PropertyType.DateTime;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeatherDataDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.BuildingThermalExposure\", \"BuildingThermalExposure\");\r\n            ifcPSE.PropertyName = \"BuildingThermalExposure\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_BuildingThermalExposure);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BuildingThermalExposureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.PrevailingWindDirection\", \"PrevailingWindDirection\");\r\n            ifcPSE.PropertyName = \"PrevailingWindDirection\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrevailingWindDirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_OutsideDesignCriteria.PrevailingWindVelocity\", \"PrevailingWindVelocity\");\r\n            ifcPSE.PropertyName = \"PrevailingWindVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrevailingWindVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetOutsideDesignCriteria.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetOutsideDesignCriteria);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PackingInstructions(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPackingInstructions = new PropertySetDescription();\r\n         propertySetPackingInstructions.Name = \"Pset_PackingInstructions\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PackingInstructions\"))\r\n         {\r\n            propertySetPackingInstructions.EntityTypes.Add(IFCEntityType.IfcProduct);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PackingInstructions.PackingCareType\", \"PackingCareType\");\r\n            ifcPSE.PropertyName = \"PackingCareType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_PackingCareType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PackingCareTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPackingInstructions.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PackingInstructions.WrappingMaterial\", \"WrappingMaterial\");\r\n            ifcPSE.PropertyName = \"WrappingMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WrappingMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPackingInstructions.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PackingInstructions.ContainerMaterial\", \"ContainerMaterial\");\r\n            ifcPSE.PropertyName = \"ContainerMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContainerMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPackingInstructions.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PackingInstructions.SpecialInstructions\", \"SpecialInstructions\");\r\n            ifcPSE.PropertyName = \"SpecialInstructions\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecialInstructionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPackingInstructions.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PackingInstructions\"))\r\n         {\r\n            propertySetPackingInstructions.EntityTypes.Add(IFCEntityType.IfcProduct);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PackingInstructions.PackingCareType\", \"PackingCareType\");\r\n            ifcPSE.PropertyName = \"PackingCareType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_PackingCareType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PackingCareTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPackingInstructions.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PackingInstructions.WrappingMaterial\", \"WrappingMaterial\");\r\n            ifcPSE.PropertyName = \"WrappingMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WrappingMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPackingInstructions.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PackingInstructions.ContainerMaterial\", \"ContainerMaterial\");\r\n            ifcPSE.PropertyName = \"ContainerMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContainerMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPackingInstructions.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PackingInstructions.SpecialInstructions\", \"SpecialInstructions\");\r\n            ifcPSE.PropertyName = \"SpecialInstructions\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecialInstructionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPackingInstructions.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PackingInstructions\"))\r\n         {\r\n            propertySetPackingInstructions.EntityTypes.Add(IFCEntityType.IfcTask);\r\n            propertySetPackingInstructions.ObjectType = \"IfcTask\";\r\n            propertySetPackingInstructions.PredefinedType = \"MOVE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PackingInstructions.PackingCareType\", \"PackingCareType\");\r\n            ifcPSE.PropertyName = \"PackingCareType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_PackingCareType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Packing Care Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"荷造り注意タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PackingCareTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPackingInstructions.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PackingInstructions.WrappingMaterial\", \"WrappingMaterial\");\r\n            ifcPSE.PropertyName = \"WrappingMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wrapping Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"包装材料\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WrappingMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPackingInstructions.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PackingInstructions.ContainerMaterial\", \"ContainerMaterial\");\r\n            ifcPSE.PropertyName = \"ContainerMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Container Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"コンテナー材料\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContainerMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPackingInstructions.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PackingInstructions.SpecialInstructions\", \"SpecialInstructions\");\r\n            ifcPSE.PropertyName = \"SpecialInstructions\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Special Instructions\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"特記事項\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecialInstructionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPackingInstructions.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PackingInstructions\"))\r\n         {\r\n            propertySetPackingInstructions.EntityTypes.Add(IFCEntityType.IfcTask);\r\n            propertySetPackingInstructions.EntityTypes.Add(IFCEntityType.IfcTaskType);\r\n            propertySetPackingInstructions.ObjectType = \"IfcTask\";\r\n            propertySetPackingInstructions.PredefinedType = \"MOVE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PackingInstructions.PackingCareType\", \"PackingCareType\");\r\n            ifcPSE.PropertyName = \"PackingCareType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_PackingCareType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PackingCareTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPackingInstructions.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PackingInstructions.WrappingMaterial\", \"WrappingMaterial\");\r\n            ifcPSE.PropertyName = \"WrappingMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WrappingMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPackingInstructions.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PackingInstructions.ContainerMaterial\", \"ContainerMaterial\");\r\n            ifcPSE.PropertyName = \"ContainerMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContainerMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPackingInstructions.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PackingInstructions.SpecialInstructions\", \"SpecialInstructions\");\r\n            ifcPSE.PropertyName = \"SpecialInstructions\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecialInstructionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPackingInstructions.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPackingInstructions);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PatchCordCable(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPatchCordCable = new PropertySetDescription();\r\n         propertySetPatchCordCable.Name = \"Pset_PatchCordCable\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PatchCordCable\"))\r\n         {\r\n            propertySetPatchCordCable.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetPatchCordCable.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetPatchCordCable.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetPatchCordCable.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetPatchCordCable.ObjectType = \"IfcCableSegment\";\r\n            propertySetPatchCordCable.PredefinedType = \"OPTICALCABLESEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PatchCordCable.JacketColour\", \"JacketColour\");\r\n            ifcPSE.PropertyName = \"JacketColour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.JacketColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPatchCordCable.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPatchCordCable);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PavementCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPavementCommon = new PropertySetDescription();\r\n         propertySetPavementCommon.Name = \"Pset_PavementCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PavementCommon\"))\r\n         {\r\n            propertySetPavementCommon.EntityTypes.Add(IFCEntityType.IfcPavement);\r\n            propertySetPavementCommon.EntityTypes.Add(IFCEntityType.IfcPavementType);\r\n            propertySetPavementCommon.ObjectType = \"IfcPavement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PavementCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPavementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PavementCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPavementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PavementCommon.NominalThicknessEnd\", \"NominalThicknessEnd\");\r\n            ifcPSE.PropertyName = \"NominalThicknessEnd\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalThicknessEndCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPavementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PavementCommon.StructuralSlope\", \"StructuralSlope\");\r\n            ifcPSE.PropertyName = \"StructuralSlope\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StructuralSlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPavementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PavementCommon.StructuralSlopeType\", \"StructuralSlopeType\");\r\n            ifcPSE.PropertyName = \"StructuralSlopeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StructuralSlopeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPavementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PavementCommon.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPavementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PavementCommon.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPavementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PavementCommon.NominalThickness\", \"NominalThickness\");\r\n            ifcPSE.PropertyName = \"NominalThickness\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPavementCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPavementCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PavementMillingCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPavementMillingCommon = new PropertySetDescription();\r\n         propertySetPavementMillingCommon.Name = \"Pset_PavementMillingCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PavementMillingCommon\"))\r\n         {\r\n            propertySetPavementMillingCommon.EntityTypes.Add(IFCEntityType.IfcEarthworksCut);\r\n            propertySetPavementMillingCommon.ObjectType = \"IfcEarthworksCut\";\r\n            propertySetPavementMillingCommon.PredefinedType = \"PAVEMENTMILLING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PavementMillingCommon.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPavementMillingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PavementMillingCommon.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPavementMillingCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPavementMillingCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PavementSurfaceCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPavementSurfaceCommon = new PropertySetDescription();\r\n         propertySetPavementSurfaceCommon.Name = \"Pset_PavementSurfaceCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PavementSurfaceCommon\"))\r\n         {\r\n            propertySetPavementSurfaceCommon.EntityTypes.Add(IFCEntityType.IfcPavement);\r\n            propertySetPavementSurfaceCommon.EntityTypes.Add(IFCEntityType.IfcPavementType);\r\n            propertySetPavementSurfaceCommon.ObjectType = \"IfcPavement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PavementSurfaceCommon.PavementRoughness\", \"PavementRoughness\");\r\n            ifcPSE.PropertyName = \"PavementRoughness\";\r\n            ifcPSE.PropertyType = PropertyType.Numeric;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PavementRoughnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPavementSurfaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PavementSurfaceCommon.PavementTexture\", \"PavementTexture\");\r\n            ifcPSE.PropertyName = \"PavementTexture\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PavementTextureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPavementSurfaceCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPavementSurfaceCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PermeableCoveringProperties(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPermeableCoveringProperties = new PropertySetDescription();\r\n         propertySetPermeableCoveringProperties.Name = \"Pset_PermeableCoveringProperties\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PermeableCoveringProperties\"))\r\n         {\r\n            propertySetPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcWindow);\r\n            propertySetPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcDoorType);\r\n            propertySetPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcMemberType);\r\n            propertySetPermeableCoveringProperties.EntityTypes.Add(IFCEntityType.IfcWindowType);\r\n            propertySetPermeableCoveringProperties.ObjectType = \"IfcDoor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PermeableCoveringProperties.OperationType\", \"OperationType\");\r\n            ifcPSE.PropertyName = \"OperationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_PermeableCoveringOperationEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermeableCoveringProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PermeableCoveringProperties.PanelPosition\", \"PanelPosition\");\r\n            ifcPSE.PropertyName = \"PanelPosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_WindowPanelPositionEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermeableCoveringProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PermeableCoveringProperties.FrameDepth\", \"FrameDepth\");\r\n            ifcPSE.PropertyName = \"FrameDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermeableCoveringProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PermeableCoveringProperties.FrameThickness\", \"FrameThickness\");\r\n            ifcPSE.PropertyName = \"FrameThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermeableCoveringProperties.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPermeableCoveringProperties);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_Permit(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPermit = new PropertySetDescription();\r\n         propertySetPermit.Name = \"Pset_Permit\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Permit\"))\r\n         {\r\n            propertySetPermit.EntityTypes.Add(IFCEntityType.IfcPermit);\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.PermitType\", \"PermitType\");\r\n            ifcPSE.PropertyName = \"PermitType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_PermitType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PermitTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.EscortRequirement\", \"EscortRequirement\");\r\n            ifcPSE.PropertyName = \"EscortRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EscortRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.StartDate\", \"StartDate\");\r\n            ifcPSE.PropertyName = \"StartDate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.PermitDuration\", \"PermitDuration\");\r\n            ifcPSE.PropertyName = \"PermitDuration\";\r\n            ifcPSE.PropertyType = PropertyType.IfcDateAndTime;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PermitDurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.StartTime\", \"StartTime\");\r\n            ifcPSE.PropertyName = \"StartTime\";\r\n            ifcPSE.PropertyType = PropertyType.IfcLocalTime;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.EndTime\", \"EndTime\");\r\n            ifcPSE.PropertyName = \"EndTime\";\r\n            ifcPSE.PropertyType = PropertyType.IfcLocalTime;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.SpecialRequirements\", \"SpecialRequirements\");\r\n            ifcPSE.PropertyName = \"SpecialRequirements\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecialRequirementsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Permit\"))\r\n         {\r\n            propertySetPermit.EntityTypes.Add(IFCEntityType.IfcPermit);\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.PermitType\", \"PermitType\");\r\n            ifcPSE.PropertyName = \"PermitType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_PermitType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PermitTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.EscortRequirement\", \"EscortRequirement\");\r\n            ifcPSE.PropertyName = \"EscortRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EscortRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.StartDate\", \"StartDate\");\r\n            ifcPSE.PropertyName = \"StartDate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.PermitDuration\", \"PermitDuration\");\r\n            ifcPSE.PropertyName = \"PermitDuration\";\r\n            ifcPSE.PropertyType = PropertyType.IfcDateAndTime;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PermitDurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.StartTime\", \"StartTime\");\r\n            ifcPSE.PropertyName = \"StartTime\";\r\n            ifcPSE.PropertyType = PropertyType.IfcLocalTime;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.EndTime\", \"EndTime\");\r\n            ifcPSE.PropertyName = \"EndTime\";\r\n            ifcPSE.PropertyType = PropertyType.IfcLocalTime;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.SpecialRequirements\", \"SpecialRequirements\");\r\n            ifcPSE.PropertyName = \"SpecialRequirements\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecialRequirementsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Permit\"))\r\n         {\r\n            propertySetPermit.EntityTypes.Add(IFCEntityType.IfcPermit);\r\n            propertySetPermit.ObjectType = \"IfcPermit\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.EscortRequirement\", \"EscortRequirement\");\r\n            ifcPSE.PropertyName = \"EscortRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Escort Requirement\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EscortRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.StartDate\", \"StartDate\");\r\n            ifcPSE.PropertyName = \"StartDate\";\r\n            ifcPSE.PropertyType = PropertyType.DateTime;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Start Date\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.EndDate\", \"EndDate\");\r\n            ifcPSE.PropertyName = \"EndDate\";\r\n            ifcPSE.PropertyType = PropertyType.DateTime;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"End Date\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.SpecialRequirements\", \"SpecialRequirements\");\r\n            ifcPSE.PropertyName = \"SpecialRequirements\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Special Requirements\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecialRequirementsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Permit\"))\r\n         {\r\n            propertySetPermit.EntityTypes.Add(IFCEntityType.IfcPermit);\r\n            propertySetPermit.ObjectType = \"IfcPermit\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.EscortRequirement\", \"EscortRequirement\");\r\n            ifcPSE.PropertyName = \"EscortRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EscortRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.StartDate\", \"StartDate\");\r\n            ifcPSE.PropertyName = \"StartDate\";\r\n            ifcPSE.PropertyType = PropertyType.DateTime;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.EndDate\", \"EndDate\");\r\n            ifcPSE.PropertyName = \"EndDate\";\r\n            ifcPSE.PropertyType = PropertyType.DateTime;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Permit.SpecialRequirements\", \"SpecialRequirements\");\r\n            ifcPSE.PropertyName = \"SpecialRequirements\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecialRequirementsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPermit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPermit);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PileCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPileCommon = new PropertySetDescription();\r\n         propertySetPileCommon.Name = \"Pset_PileCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PileCommon\"))\r\n         {\r\n            propertySetPileCommon.EntityTypes.Add(IFCEntityType.IfcPile);\r\n            propertySetPileCommon.ObjectType = \"IfcPile\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PileCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPileCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PileCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPileCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PileCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Tragendes Bauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Load Bearing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Porteur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐力部材\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPileCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PileCommon\"))\r\n         {\r\n            propertySetPileCommon.EntityTypes.Add(IFCEntityType.IfcPile);\r\n            propertySetPileCommon.EntityTypes.Add(IFCEntityType.IfcPileType);\r\n            propertySetPileCommon.ObjectType = \"IfcPile\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PileCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPileCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PileCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPileCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PileCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPileCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPileCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PipeConnection(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPipeConnection = new PropertySetDescription();\r\n         propertySetPipeConnection.Name = \"Pset_PipeConnection\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeConnection\"))\r\n         {\r\n            propertySetPipeConnection.EntityTypes.Add(IFCEntityType.IfcPipeSegmentType);\r\n            propertySetPipeConnection.EntityTypes.Add(IFCEntityType.IfcPipeFittingType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnection.ConnectionType\", \"ConnectionType\");\r\n            ifcPSE.PropertyName = \"ConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnection.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeConnection\"))\r\n         {\r\n            propertySetPipeConnection.EntityTypes.Add(IFCEntityType.IfcDistributionElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnection.ConnectionType\", \"ConnectionType\");\r\n            ifcPSE.PropertyName = \"ConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnection.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPipeConnection);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PipeConnectionFlanged(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPipeConnectionFlanged = new PropertySetDescription();\r\n         propertySetPipeConnectionFlanged.Name = \"Pset_PipeConnectionFlanged\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeConnectionFlanged\"))\r\n         {\r\n            propertySetPipeConnectionFlanged.EntityTypes.Add(IFCEntityType.IfcPipeSegmentType);\r\n            propertySetPipeConnectionFlanged.EntityTypes.Add(IFCEntityType.IfcPipeFittingType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.FlangeTable\", \"FlangeTable\");\r\n            ifcPSE.PropertyName = \"FlangeTable\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeTableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.FlangeStandard\", \"FlangeStandard\");\r\n            ifcPSE.PropertyName = \"FlangeStandard\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeStandardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.BoreSize\", \"BoreSize\");\r\n            ifcPSE.PropertyName = \"BoreSize\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoreSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.FlangeDiameter\", \"FlangeDiameter\");\r\n            ifcPSE.PropertyName = \"FlangeDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.FlangeThickness\", \"FlangeThickness\");\r\n            ifcPSE.PropertyName = \"FlangeThickness\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.NumberOfBoltholes\", \"NumberOfBoltholes\");\r\n            ifcPSE.PropertyName = \"NumberOfBoltholes\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfBoltholesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.BoltSize\", \"BoltSize\");\r\n            ifcPSE.PropertyName = \"BoltSize\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoltSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.BoltholePitch\", \"BoltholePitch\");\r\n            ifcPSE.PropertyName = \"BoltholePitch\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoltholePitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeConnectionFlanged\"))\r\n         {\r\n            propertySetPipeConnectionFlanged.EntityTypes.Add(IFCEntityType.IfcDistributionElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.FlangeTable\", \"FlangeTable\");\r\n            ifcPSE.PropertyName = \"FlangeTable\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeTableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.FlangeStandard\", \"FlangeStandard\");\r\n            ifcPSE.PropertyName = \"FlangeStandard\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeStandardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.BoreSize\", \"BoreSize\");\r\n            ifcPSE.PropertyName = \"BoreSize\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoreSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.FlangeDiameter\", \"FlangeDiameter\");\r\n            ifcPSE.PropertyName = \"FlangeDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.FlangeThickness\", \"FlangeThickness\");\r\n            ifcPSE.PropertyName = \"FlangeThickness\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.NumberOfBoltholes\", \"NumberOfBoltholes\");\r\n            ifcPSE.PropertyName = \"NumberOfBoltholes\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfBoltholesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.BoltSize\", \"BoltSize\");\r\n            ifcPSE.PropertyName = \"BoltSize\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoltSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.BoltholePitch\", \"BoltholePitch\");\r\n            ifcPSE.PropertyName = \"BoltholePitch\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoltholePitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeConnectionFlanged\"))\r\n         {\r\n            propertySetPipeConnectionFlanged.EntityTypes.Add(IFCEntityType.IfcPipeSegment);\r\n            propertySetPipeConnectionFlanged.ObjectType = \"IfcPipeSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.FlangeTable\", \"FlangeTable\");\r\n            ifcPSE.PropertyName = \"FlangeTable\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flange Table\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"フランジ基準\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeTableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.FlangeStandard\", \"FlangeStandard\");\r\n            ifcPSE.PropertyName = \"FlangeStandard\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flange Standard\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"フランジ規格\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeStandardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.BoreSize\", \"BoreSize\");\r\n            ifcPSE.PropertyName = \"BoreSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Bore Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"フランジの内径のサイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoreSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.FlangeDiameter\", \"FlangeDiameter\");\r\n            ifcPSE.PropertyName = \"FlangeDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flange Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"フランジの直径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.FlangeThickness\", \"FlangeThickness\");\r\n            ifcPSE.PropertyName = \"FlangeThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flange Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"フランジの厚さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.NumberOfBoltholes\", \"NumberOfBoltholes\");\r\n            ifcPSE.PropertyName = \"NumberOfBoltholes\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Boltholes\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ボルト穴の数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfBoltholesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.BoltSize\", \"BoltSize\");\r\n            ifcPSE.PropertyName = \"BoltSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Bolt Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ボルトの大きさ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoltSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.BoltholePitch\", \"BoltholePitch\");\r\n            ifcPSE.PropertyName = \"BoltholePitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Bolthole Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ボルト穴ピッチ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoltholePitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeConnectionFlanged\"))\r\n         {\r\n            propertySetPipeConnectionFlanged.EntityTypes.Add(IFCEntityType.IfcPipeSegment);\r\n            propertySetPipeConnectionFlanged.EntityTypes.Add(IFCEntityType.IfcPipeSegmentType);\r\n            propertySetPipeConnectionFlanged.ObjectType = \"IfcPipeSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.FlangeTable\", \"FlangeTable\");\r\n            ifcPSE.PropertyName = \"FlangeTable\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeTableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.FlangeStandard\", \"FlangeStandard\");\r\n            ifcPSE.PropertyName = \"FlangeStandard\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeStandardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.BoreSize\", \"BoreSize\");\r\n            ifcPSE.PropertyName = \"BoreSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoreSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.FlangeDiameter\", \"FlangeDiameter\");\r\n            ifcPSE.PropertyName = \"FlangeDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.FlangeThickness\", \"FlangeThickness\");\r\n            ifcPSE.PropertyName = \"FlangeThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.NumberOfBoltholes\", \"NumberOfBoltholes\");\r\n            ifcPSE.PropertyName = \"NumberOfBoltholes\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfBoltholesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.BoltSize\", \"BoltSize\");\r\n            ifcPSE.PropertyName = \"BoltSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoltSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeConnectionFlanged.BoltholePitch\", \"BoltholePitch\");\r\n            ifcPSE.PropertyName = \"BoltholePitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoltholePitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeConnectionFlanged.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPipeConnectionFlanged);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PipeFittingOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPipeFittingOccurrence = new PropertySetDescription();\r\n         propertySetPipeFittingOccurrence.Name = \"Pset_PipeFittingOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeFittingOccurrence\"))\r\n         {\r\n            propertySetPipeFittingOccurrence.EntityTypes.Add(IFCEntityType.IfcPipeFitting);\r\n            propertySetPipeFittingOccurrence.ObjectType = \"IfcPipeFitting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingOccurrence.InteriorRoughnessCoefficient\", \"InteriorRoughnessCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorRoughnessCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Interior Roughness Coefficient\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"内部粗度係数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorRoughnessCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingOccurrence.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Color\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"色\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeFittingOccurrence\"))\r\n         {\r\n            propertySetPipeFittingOccurrence.EntityTypes.Add(IFCEntityType.IfcPipeFitting);\r\n            propertySetPipeFittingOccurrence.ObjectType = \"IfcPipeFitting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingOccurrence.InteriorRoughnessCoefficient\", \"InteriorRoughnessCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorRoughnessCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorRoughnessCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingOccurrence.Colour\", \"Colour\");\r\n            ifcPSE.PropertyName = \"Colour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPipeFittingOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PipeFittingPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPipeFittingPHistory = new PropertySetDescription();\r\n         propertySetPipeFittingPHistory.Name = \"Pset_PipeFittingPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeFittingPHistory\"))\r\n         {\r\n            propertySetPipeFittingPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingPHistory.LossCoefficient\", \"LossCoefficient\");\r\n            ifcPSE.PropertyName = \"LossCoefficient\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LossCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingPHistory.FlowrateLeakage\", \"FlowrateLeakage\");\r\n            ifcPSE.PropertyName = \"FlowrateLeakage\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowrateLeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeFittingPHistory\"))\r\n         {\r\n            propertySetPipeFittingPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingPHistory.LossCoefficient\", \"LossCoefficient\");\r\n            ifcPSE.PropertyName = \"LossCoefficient\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LossCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingPHistory.FlowrateLeakage\", \"FlowrateLeakage\");\r\n            ifcPSE.PropertyName = \"FlowrateLeakage\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowrateLeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeFittingPHistory\"))\r\n         {\r\n            propertySetPipeFittingPHistory.EntityTypes.Add(IFCEntityType.IfcPipeFitting);\r\n            propertySetPipeFittingPHistory.ObjectType = \"IfcPipeFitting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingPHistory.LossCoefficient\", \"LossCoefficient\");\r\n            ifcPSE.PropertyName = \"LossCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Loss Coefficient\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"損失係数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LossCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingPHistory.FlowrateLeakage\", \"FlowrateLeakage\");\r\n            ifcPSE.PropertyName = \"FlowrateLeakage\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flowrate Leakage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"漏洩流量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowrateLeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeFittingPHistory\"))\r\n         {\r\n            propertySetPipeFittingPHistory.EntityTypes.Add(IFCEntityType.IfcPipeFitting);\r\n            propertySetPipeFittingPHistory.ObjectType = \"IfcPipeFitting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingPHistory.LossCoefficient\", \"LossCoefficient\");\r\n            ifcPSE.PropertyName = \"LossCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LossCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingPHistory.FlowrateLeakage\", \"FlowrateLeakage\");\r\n            ifcPSE.PropertyName = \"FlowrateLeakage\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowrateLeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPipeFittingPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PipeFittingTypeBend(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPipeFittingTypeBend = new PropertySetDescription();\r\n         propertySetPipeFittingTypeBend.Name = \"Pset_PipeFittingTypeBend\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeFittingTypeBend\"))\r\n         {\r\n            propertySetPipeFittingTypeBend.EntityTypes.Add(IFCEntityType.IfcPipeFitting);\r\n            propertySetPipeFittingTypeBend.ObjectType = \"IfcPipeFitting\";\r\n            propertySetPipeFittingTypeBend.PredefinedType = \"BEND\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeBend.BendAngle\", \"BendAngle\");\r\n            ifcPSE.PropertyName = \"BendAngle\";\r\n            ifcPSE.PropertyType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Bend Angle\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"曲がり角度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeBend.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeBend.BendRadius\", \"BendRadius\");\r\n            ifcPSE.PropertyName = \"BendRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Bend Radius\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"曲率半径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeBend.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPipeFittingTypeBend);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PipeFittingTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPipeFittingTypeCommon = new PropertySetDescription();\r\n         propertySetPipeFittingTypeCommon.Name = \"Pset_PipeFittingTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeFittingTypeCommon\"))\r\n         {\r\n            propertySetPipeFittingTypeCommon.EntityTypes.Add(IFCEntityType.IfcPipeFittingType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.SubType\", \"SubType\");\r\n            ifcPSE.PropertyName = \"SubType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SubTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.PressureClass\", \"PressureClass\");\r\n            ifcPSE.PropertyName = \"PressureClass\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.UnitWeight\", \"UnitWeight\");\r\n            ifcPSE.PropertyName = \"UnitWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UnitWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.PressureRange\", \"PressureRange\");\r\n            ifcPSE.PropertyName = \"PressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.NominalDiameter\", \"NominalDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.InnerDiameter\", \"InnerDiameter\");\r\n            ifcPSE.PropertyName = \"InnerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InnerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.OuterDiameter\", \"OuterDiameter\");\r\n            ifcPSE.PropertyName = \"OuterDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.EndStyleTreatment\", \"EndStyleTreatment\");\r\n            ifcPSE.PropertyName = \"EndStyleTreatment\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndStyleTreatmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.FittingLossFactor\", \"FittingLossFactor\");\r\n            ifcPSE.PropertyName = \"FittingLossFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FittingLossFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeFittingTypeCommon\"))\r\n         {\r\n            propertySetPipeFittingTypeCommon.EntityTypes.Add(IFCEntityType.IfcPipeFittingType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.SubType\", \"SubType\");\r\n            ifcPSE.PropertyName = \"SubType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SubTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.PressureClass\", \"PressureClass\");\r\n            ifcPSE.PropertyName = \"PressureClass\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.UnitWeight\", \"UnitWeight\");\r\n            ifcPSE.PropertyName = \"UnitWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UnitWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.PressureRange\", \"PressureRange\");\r\n            ifcPSE.PropertyName = \"PressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.NominalDiameter\", \"NominalDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.InnerDiameter\", \"InnerDiameter\");\r\n            ifcPSE.PropertyName = \"InnerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InnerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.OuterDiameter\", \"OuterDiameter\");\r\n            ifcPSE.PropertyName = \"OuterDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.EndStyleTreatment\", \"EndStyleTreatment\");\r\n            ifcPSE.PropertyName = \"EndStyleTreatment\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndStyleTreatmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.FittingLossFactor\", \"FittingLossFactor\");\r\n            ifcPSE.PropertyName = \"FittingLossFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FittingLossFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeFittingTypeCommon\"))\r\n         {\r\n            propertySetPipeFittingTypeCommon.EntityTypes.Add(IFCEntityType.IfcPipeFitting);\r\n            propertySetPipeFittingTypeCommon.ObjectType = \"IfcPipeFitting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.PressureClass\", \"PressureClass\");\r\n            ifcPSE.PropertyName = \"PressureClass\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure Class\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧力分類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.PressureRange\", \"PressureRange\");\r\n            ifcPSE.PropertyName = \"PressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧力範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"温度範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.FittingLossFactor\", \"FittingLossFactor\");\r\n            ifcPSE.PropertyName = \"FittingLossFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fitting Loss Factor\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"継ぎ手接合部損失係数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FittingLossFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeFittingTypeCommon\"))\r\n         {\r\n            propertySetPipeFittingTypeCommon.EntityTypes.Add(IFCEntityType.IfcPipeFitting);\r\n            propertySetPipeFittingTypeCommon.EntityTypes.Add(IFCEntityType.IfcPipeFittingType);\r\n            propertySetPipeFittingTypeCommon.ObjectType = \"IfcPipeFitting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.PressureClass\", \"PressureClass\");\r\n            ifcPSE.PropertyName = \"PressureClass\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.PressureRange\", \"PressureRange\");\r\n            ifcPSE.PropertyName = \"PressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeCommon.FittingLossFactor\", \"FittingLossFactor\");\r\n            ifcPSE.PropertyName = \"FittingLossFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FittingLossFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPipeFittingTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PipeFittingTypeJunction(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPipeFittingTypeJunction = new PropertySetDescription();\r\n         propertySetPipeFittingTypeJunction.Name = \"Pset_PipeFittingTypeJunction\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeFittingTypeJunction\"))\r\n         {\r\n            propertySetPipeFittingTypeJunction.EntityTypes.Add(IFCEntityType.IfcPipeFitting);\r\n            propertySetPipeFittingTypeJunction.ObjectType = \"IfcPipeFitting\";\r\n            propertySetPipeFittingTypeJunction.PredefinedType = \"JUNCTION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeJunction.JunctionType\", \"JunctionType\");\r\n            ifcPSE.PropertyName = \"JunctionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_PipeFittingJunctionType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Junction Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"継ぎ手タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.JunctionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeJunction.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeJunction.JunctionLeftAngle\", \"JunctionLeftAngle\");\r\n            ifcPSE.PropertyName = \"JunctionLeftAngle\";\r\n            ifcPSE.PropertyType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Junction Left Angle\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"左継ぎ手角度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.JunctionLeftAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeJunction.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeJunction.JunctionLeftRadius\", \"JunctionLeftRadius\");\r\n            ifcPSE.PropertyName = \"JunctionLeftRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Junction Left Radius\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"左継ぎ手半径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.JunctionLeftRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeJunction.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeJunction.JunctionRightAngle\", \"JunctionRightAngle\");\r\n            ifcPSE.PropertyName = \"JunctionRightAngle\";\r\n            ifcPSE.PropertyType = PropertyType.PositivePlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Junction Right Angle\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"右継ぎ手角度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.JunctionRightAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeJunction.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeFittingTypeJunction.JunctionRightRadius\", \"JunctionRightRadius\");\r\n            ifcPSE.PropertyName = \"JunctionRightRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Junction Right Radius\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"右継ぎ手半径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.JunctionRightRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeFittingTypeJunction.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPipeFittingTypeJunction);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PipeSegmentOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPipeSegmentOccurrence = new PropertySetDescription();\r\n         propertySetPipeSegmentOccurrence.Name = \"Pset_PipeSegmentOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeSegmentOccurrence\"))\r\n         {\r\n            propertySetPipeSegmentOccurrence.EntityTypes.Add(IFCEntityType.IfcPipeSegment);\r\n            propertySetPipeSegmentOccurrence.ObjectType = \"IfcPipeSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentOccurrence.InteriorRoughnessCoefficient\", \"InteriorRoughnessCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorRoughnessCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Interior Roughness Coefficient\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"内部粗度係数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorRoughnessCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentOccurrence.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Color\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"色\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentOccurrence.Gradient\", \"Gradient\");\r\n            ifcPSE.PropertyName = \"Gradient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gradient\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"勾配\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GradientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentOccurrence.InvertElevation\", \"InvertElevation\");\r\n            ifcPSE.PropertyName = \"InvertElevation\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Invert Elevation\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertElevationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeSegmentOccurrence\"))\r\n         {\r\n            propertySetPipeSegmentOccurrence.EntityTypes.Add(IFCEntityType.IfcPipeSegment);\r\n            propertySetPipeSegmentOccurrence.ObjectType = \"IfcPipeSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentOccurrence.InteriorRoughnessCoefficient\", \"InteriorRoughnessCoefficient\");\r\n            ifcPSE.PropertyName = \"InteriorRoughnessCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InteriorRoughnessCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentOccurrence.Colour\", \"Colour\");\r\n            ifcPSE.PropertyName = \"Colour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentOccurrence.Gradient\", \"Gradient\");\r\n            ifcPSE.PropertyName = \"Gradient\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GradientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentOccurrence.InvertElevation\", \"InvertElevation\");\r\n            ifcPSE.PropertyName = \"InvertElevation\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InvertElevationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPipeSegmentOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PipeSegmentPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPipeSegmentPHistory = new PropertySetDescription();\r\n         propertySetPipeSegmentPHistory.Name = \"Pset_PipeSegmentPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeSegmentPHistory\"))\r\n         {\r\n            propertySetPipeSegmentPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentPHistory.LeakageCurve\", \"LeakageCurve\");\r\n            ifcPSE.PropertyName = \"LeakageCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentPHistory.FluidFlowLeakage\", \"FluidFlowLeakage\");\r\n            ifcPSE.PropertyName = \"FluidFlowLeakage\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FluidFlowLeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeSegmentPHistory\"))\r\n         {\r\n            propertySetPipeSegmentPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentPHistory.LeakageCurve\", \"LeakageCurve\");\r\n            ifcPSE.PropertyName = \"LeakageCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentPHistory.FluidFlowLeakage\", \"FluidFlowLeakage\");\r\n            ifcPSE.PropertyName = \"FluidFlowLeakage\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FluidFlowLeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeSegmentPHistory\"))\r\n         {\r\n            propertySetPipeSegmentPHistory.EntityTypes.Add(IFCEntityType.IfcPipeSegment);\r\n            propertySetPipeSegmentPHistory.ObjectType = \"IfcPipeSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentPHistory.LeakageCurve\", \"LeakageCurve\");\r\n            ifcPSE.PropertyName = \"LeakageCurve\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Leakage Curve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"漏洩曲線\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentPHistory.FluidFlowLeakage\", \"FluidFlowLeakage\");\r\n            ifcPSE.PropertyName = \"FluidFlowLeakage\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fluid Flow Leakage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流体漏洩量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FluidFlowLeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeSegmentPHistory\"))\r\n         {\r\n            propertySetPipeSegmentPHistory.EntityTypes.Add(IFCEntityType.IfcPipeSegment);\r\n            propertySetPipeSegmentPHistory.ObjectType = \"IfcPipeSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentPHistory.LeakageCurve\", \"LeakageCurve\");\r\n            ifcPSE.PropertyName = \"LeakageCurve\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeakageCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentPHistory.FluidFlowLeakage\", \"FluidFlowLeakage\");\r\n            ifcPSE.PropertyName = \"FluidFlowLeakage\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FluidFlowLeakageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPipeSegmentPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PipeSegmentTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPipeSegmentTypeCommon = new PropertySetDescription();\r\n         propertySetPipeSegmentTypeCommon.Name = \"Pset_PipeSegmentTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeSegmentTypeCommon\"))\r\n         {\r\n            propertySetPipeSegmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcPipeSegmentType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.WorkingPressure\", \"WorkingPressure\");\r\n            ifcPSE.PropertyName = \"WorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.UnitWeight\", \"UnitWeight\");\r\n            ifcPSE.PropertyName = \"UnitWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UnitWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.PressureRange\", \"PressureRange\");\r\n            ifcPSE.PropertyName = \"PressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.NominalDiameter\", \"NominalDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.InnerDiameter\", \"InnerDiameter\");\r\n            ifcPSE.PropertyName = \"InnerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InnerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.OuterDiameter\", \"OuterDiameter\");\r\n            ifcPSE.PropertyName = \"OuterDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.EndStyleTreatment\", \"EndStyleTreatment\");\r\n            ifcPSE.PropertyName = \"EndStyleTreatment\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndStyleTreatmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeSegmentTypeCommon\"))\r\n         {\r\n            propertySetPipeSegmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcPipeSegmentType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.WorkingPressure\", \"WorkingPressure\");\r\n            ifcPSE.PropertyName = \"WorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.UnitWeight\", \"UnitWeight\");\r\n            ifcPSE.PropertyName = \"UnitWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UnitWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.PressureRange\", \"PressureRange\");\r\n            ifcPSE.PropertyName = \"PressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.NominalDiameter\", \"NominalDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.InnerDiameter\", \"InnerDiameter\");\r\n            ifcPSE.PropertyName = \"InnerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InnerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.OuterDiameter\", \"OuterDiameter\");\r\n            ifcPSE.PropertyName = \"OuterDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.EndStyleTreatment\", \"EndStyleTreatment\");\r\n            ifcPSE.PropertyName = \"EndStyleTreatment\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndStyleTreatmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeSegmentTypeCommon\"))\r\n         {\r\n            propertySetPipeSegmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcPipeSegment);\r\n            propertySetPipeSegmentTypeCommon.ObjectType = \"IfcPipeSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.WorkingPressure\", \"WorkingPressure\");\r\n            ifcPSE.PropertyName = \"WorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Working Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"動作圧\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.PressureRange\", \"PressureRange\");\r\n            ifcPSE.PropertyName = \"PressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧力範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"温度範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.NominalDiameter\", \"NominalDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"呼び径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.InnerDiameter\", \"InnerDiameter\");\r\n            ifcPSE.PropertyName = \"InnerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Inner Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"内径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InnerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.OuterDiameter\", \"OuterDiameter\");\r\n            ifcPSE.PropertyName = \"OuterDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outer Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeSegmentTypeCommon\"))\r\n         {\r\n            propertySetPipeSegmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcPipeSegment);\r\n            propertySetPipeSegmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcPipeSegmentType);\r\n            propertySetPipeSegmentTypeCommon.ObjectType = \"IfcPipeSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.WorkingPressure\", \"WorkingPressure\");\r\n            ifcPSE.PropertyName = \"WorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.PressureRange\", \"PressureRange\");\r\n            ifcPSE.PropertyName = \"PressureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.NominalDiameter\", \"NominalDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.InnerDiameter\", \"InnerDiameter\");\r\n            ifcPSE.PropertyName = \"InnerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InnerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.OuterDiameter\", \"OuterDiameter\");\r\n            ifcPSE.PropertyName = \"OuterDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCommon.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPipeSegmentTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PipeSegmentTypeCulvert(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPipeSegmentTypeCulvert = new PropertySetDescription();\r\n         propertySetPipeSegmentTypeCulvert.Name = \"Pset_PipeSegmentTypeCulvert\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeSegmentTypeCulvert\"))\r\n         {\r\n            propertySetPipeSegmentTypeCulvert.EntityTypes.Add(IFCEntityType.IfcPipeSegment);\r\n            propertySetPipeSegmentTypeCulvert.ObjectType = \"IfcPipeSegment\";\r\n            propertySetPipeSegmentTypeCulvert.PredefinedType = \"CULVERT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCulvert.InternalWidth\", \"InternalWidth\");\r\n            ifcPSE.PropertyName = \"InternalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Internal Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"内幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCulvert.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCulvert.ClearDepth\", \"ClearDepth\");\r\n            ifcPSE.PropertyName = \"ClearDepth\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Clear Depth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容深さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCulvert.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeSegmentTypeCulvert\"))\r\n         {\r\n            propertySetPipeSegmentTypeCulvert.EntityTypes.Add(IFCEntityType.IfcPipeSegment);\r\n            propertySetPipeSegmentTypeCulvert.EntityTypes.Add(IFCEntityType.IfcPipeSegmentType);\r\n            propertySetPipeSegmentTypeCulvert.ObjectType = \"IfcPipeSegment\";\r\n            propertySetPipeSegmentTypeCulvert.PredefinedType = \"CULVERT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCulvert.InternalWidth\", \"InternalWidth\");\r\n            ifcPSE.PropertyName = \"InternalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InternalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCulvert.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeCulvert.ClearDepth\", \"ClearDepth\");\r\n            ifcPSE.PropertyName = \"ClearDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeCulvert.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPipeSegmentTypeCulvert);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PipeSegmentTypeGutter(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPipeSegmentTypeGutter = new PropertySetDescription();\r\n         propertySetPipeSegmentTypeGutter.Name = \"Pset_PipeSegmentTypeGutter\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeSegmentTypeGutter\"))\r\n         {\r\n            propertySetPipeSegmentTypeGutter.EntityTypes.Add(IFCEntityType.IfcPipeSegmentType);\r\n            propertySetPipeSegmentTypeGutter.ObjectType = \"IfcPipeSegmentType\";\r\n            propertySetPipeSegmentTypeGutter.PredefinedType = \"GUTTER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeGutter.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeGutter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeGutter.FlowRating\", \"FlowRating\");\r\n            ifcPSE.PropertyName = \"FlowRating\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeGutter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeSegmentTypeGutter\"))\r\n         {\r\n            propertySetPipeSegmentTypeGutter.EntityTypes.Add(IFCEntityType.IfcPipeSegmentType);\r\n            propertySetPipeSegmentTypeGutter.ObjectType = \"IfcPipeSegmentType\";\r\n            propertySetPipeSegmentTypeGutter.PredefinedType = \"GUTTER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeGutter.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeGutter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeGutter.FlowRating\", \"FlowRating\");\r\n            ifcPSE.PropertyName = \"FlowRating\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeGutter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeSegmentTypeGutter\"))\r\n         {\r\n            propertySetPipeSegmentTypeGutter.EntityTypes.Add(IFCEntityType.IfcPipeSegment);\r\n            propertySetPipeSegmentTypeGutter.ObjectType = \"IfcPipeSegment\";\r\n            propertySetPipeSegmentTypeGutter.PredefinedType = \"GUTTER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeGutter.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Slope\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"勾配\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeGutter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeGutter.FlowRating\", \"FlowRating\");\r\n            ifcPSE.PropertyName = \"FlowRating\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flow Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeGutter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PipeSegmentTypeGutter\"))\r\n         {\r\n            propertySetPipeSegmentTypeGutter.EntityTypes.Add(IFCEntityType.IfcPipeSegment);\r\n            propertySetPipeSegmentTypeGutter.EntityTypes.Add(IFCEntityType.IfcPipeSegmentType);\r\n            propertySetPipeSegmentTypeGutter.ObjectType = \"IfcPipeSegment\";\r\n            propertySetPipeSegmentTypeGutter.PredefinedType = \"GUTTER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeGutter.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeGutter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeGutter.FlowRating\", \"FlowRating\");\r\n            ifcPSE.PropertyName = \"FlowRating\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeGutter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeGutter.Complementaryfunction\", \"Complementaryfunction\");\r\n            ifcPSE.PropertyName = \"Complementaryfunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ComplementaryWorks);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ComplementaryfunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeGutter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeGutter.OrthometricHeight\", \"OrthometricHeight\");\r\n            ifcPSE.PropertyName = \"OrthometricHeight\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OrthometricHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeGutter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeGutter.IsCovered\", \"IsCovered\");\r\n            ifcPSE.PropertyName = \"IsCovered\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsCoveredCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeGutter.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PipeSegmentTypeGutter.IsMonitored\", \"IsMonitored\");\r\n            ifcPSE.PropertyName = \"IsMonitored\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsMonitoredCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPipeSegmentTypeGutter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPipeSegmentTypeGutter);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PlateCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPlateCommon = new PropertySetDescription();\r\n         propertySetPlateCommon.Name = \"Pset_PlateCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PlateCommon\"))\r\n         {\r\n            propertySetPlateCommon.EntityTypes.Add(IFCEntityType.IfcPlate);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PlateCommon\"))\r\n         {\r\n            propertySetPlateCommon.EntityTypes.Add(IFCEntityType.IfcPlate);\r\n            propertySetPlateCommon.ObjectType = \"IfcPlate\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bauteiltyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Schallschutzklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Acoustic Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"IsolationAcoustique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"遮音等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"隔音等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Außenbauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EstExterieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否外部构件\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"U-Wert\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TransmissionThermique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱貫流率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"导热系数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Tragendes Bauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Load Bearing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Porteur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐力部材\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否承重\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Feuerwiderstandsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ResistanceAuFeu\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐火等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"防火等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PlateCommon\"))\r\n         {\r\n            propertySetPlateCommon.EntityTypes.Add(IFCEntityType.IfcPlate);\r\n            propertySetPlateCommon.EntityTypes.Add(IFCEntityType.IfcPlateType);\r\n            propertySetPlateCommon.ObjectType = \"IfcPlate\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PlateCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPlateCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPlateCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PointMachine(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPointMachine = new PropertySetDescription();\r\n         propertySetPointMachine.Name = \"Pset_PointMachine\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PointMachine\"))\r\n         {\r\n            propertySetPointMachine.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            propertySetPointMachine.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            propertySetPointMachine.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            propertySetPointMachine.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            propertySetPointMachine.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            propertySetPointMachine.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            propertySetPointMachine.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            propertySetPointMachine.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            propertySetPointMachine.ObjectType = \"IfcActuator\";\r\n            propertySetPointMachine.PredefinedType = \"PNEUMATICACTUATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PointMachine.ActionBarMovementLength\", \"ActionBarMovementLength\");\r\n            ifcPSE.PropertyName = \"ActionBarMovementLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActionBarMovementLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPointMachine.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PointMachine.TractionForce\", \"TractionForce\");\r\n            ifcPSE.PropertyName = \"TractionForce\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TractionForceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPointMachine.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PointMachine.ConversionTime\", \"ConversionTime\");\r\n            ifcPSE.PropertyName = \"ConversionTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConversionTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPointMachine.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PointMachine.LockingForce\", \"LockingForce\");\r\n            ifcPSE.PropertyName = \"LockingForce\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LockingForceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPointMachine.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PointMachine.HasLockInside\", \"HasLockInside\");\r\n            ifcPSE.PropertyName = \"HasLockInside\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasLockInsideCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPointMachine.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PointMachine.MarkingRodMovementLength\", \"MarkingRodMovementLength\");\r\n            ifcPSE.PropertyName = \"MarkingRodMovementLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarkingRodMovementLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPointMachine.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PointMachine.MaximumOperatingTime\", \"MaximumOperatingTime\");\r\n            ifcPSE.PropertyName = \"MaximumOperatingTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumOperatingTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPointMachine.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PointMachine.MinimumOperatingSpeed\", \"MinimumOperatingSpeed\");\r\n            ifcPSE.PropertyName = \"MinimumOperatingSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.AngularVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumOperatingSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPointMachine.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PointMachine.Current\", \"Current\");\r\n            ifcPSE.PropertyName = \"Current\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPointMachine.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPointMachine);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PowerControlSystem(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPowerControlSystem = new PropertySetDescription();\r\n         propertySetPowerControlSystem.Name = \"Pset_PowerControlSystem\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PowerControlSystem\"))\r\n         {\r\n            propertySetPowerControlSystem.EntityTypes.Add(IFCEntityType.IfcDistributionSystem);\r\n            propertySetPowerControlSystem.ObjectType = \"IfcDistributionSystem\";\r\n            propertySetPowerControlSystem.PredefinedType = \"ELECTRICAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PowerControlSystem.AssemblyInstruction\", \"AssemblyInstruction\");\r\n            ifcPSE.PropertyName = \"AssemblyInstruction\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssemblyInstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPowerControlSystem.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPowerControlSystem);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PrecastConcreteElementFabrication(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPrecastConcreteElementFabrication = new PropertySetDescription();\r\n         propertySetPrecastConcreteElementFabrication.Name = \"Pset_PrecastConcreteElementFabrication\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PrecastConcreteElementFabrication\"))\r\n         {\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxy);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcChimney);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcPile);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcPlate);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcRamp);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcRampFlight);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcStair);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcStairFlight);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcCivilElement);\r\n            propertySetPrecastConcreteElementFabrication.ObjectType = \"IfcBeam,IfcBuildingElementProxy,IfcChimney,IfcColumn,IfcFooting,IfcMember,IfcPile,IfcPlate,IfcRamp,IfcRampFlight,IfcRoof,IfcSlab,IfcStair,IfcStairFlight,IfcWall,IfcCivilElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementFabrication.TypeDesignator\", \"TypeDesignator\");\r\n            ifcPSE.PropertyName = \"TypeDesignator\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Type Designator\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeDesignatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementFabrication.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementFabrication.ProductionLotId\", \"ProductionLotId\");\r\n            ifcPSE.PropertyName = \"ProductionLotId\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Production Lot Id\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProductionLotIdCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementFabrication.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementFabrication.SerialNumber\", \"SerialNumber\");\r\n            ifcPSE.PropertyName = \"SerialNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Serial Number\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SerialNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementFabrication.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementFabrication.PieceMark\", \"PieceMark\");\r\n            ifcPSE.PropertyName = \"PieceMark\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Piece Mark\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PieceMarkCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementFabrication.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementFabrication.AsBuiltLocationNumber\", \"AsBuiltLocationNumber\");\r\n            ifcPSE.PropertyName = \"AsBuiltLocationNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"As Built Location Number\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AsBuiltLocationNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementFabrication.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementFabrication.ActualProductionDate\", \"ActualProductionDate\");\r\n            ifcPSE.PropertyName = \"ActualProductionDate\";\r\n            ifcPSE.PropertyType = PropertyType.DateTime;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Actual Production Date\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActualProductionDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementFabrication.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementFabrication.ActualErectionDate\", \"ActualErectionDate\");\r\n            ifcPSE.PropertyName = \"ActualErectionDate\";\r\n            ifcPSE.PropertyType = PropertyType.DateTime;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Actual Erection Date\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActualErectionDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementFabrication.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PrecastConcreteElementFabrication\"))\r\n         {\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxy);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcChimney);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcCivilElement);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcPile);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcPlate);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcRampFlight);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcRamp);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcStairFlight);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcStair);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcBeamType);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxyType);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcChimneyType);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcCivilElementType);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcColumnType);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcFootingType);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcMemberType);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcPileType);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcPlateType);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcRampFlightType);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcRampType);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcRoofType);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcSlabType);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcStairFlightType);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcStairType);\r\n            propertySetPrecastConcreteElementFabrication.EntityTypes.Add(IFCEntityType.IfcWallType);\r\n            propertySetPrecastConcreteElementFabrication.ObjectType = \"IfcBeam\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementFabrication.TypeDesignation\", \"TypeDesignation\");\r\n            ifcPSE.PropertyName = \"TypeDesignation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeDesignationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementFabrication.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementFabrication.ProductionLotId\", \"ProductionLotId\");\r\n            ifcPSE.PropertyName = \"ProductionLotId\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProductionLotIdCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementFabrication.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementFabrication.SerialNumber\", \"SerialNumber\");\r\n            ifcPSE.PropertyName = \"SerialNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SerialNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementFabrication.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementFabrication.PieceMark\", \"PieceMark\");\r\n            ifcPSE.PropertyName = \"PieceMark\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PieceMarkCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementFabrication.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementFabrication.AsBuiltLocationNumber\", \"AsBuiltLocationNumber\");\r\n            ifcPSE.PropertyName = \"AsBuiltLocationNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AsBuiltLocationNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementFabrication.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementFabrication.ActualProductionDate\", \"ActualProductionDate\");\r\n            ifcPSE.PropertyName = \"ActualProductionDate\";\r\n            ifcPSE.PropertyType = PropertyType.DateTime;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActualProductionDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementFabrication.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementFabrication.ActualErectionDate\", \"ActualErectionDate\");\r\n            ifcPSE.PropertyName = \"ActualErectionDate\";\r\n            ifcPSE.PropertyType = PropertyType.DateTime;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActualErectionDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementFabrication.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPrecastConcreteElementFabrication);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PrecastConcreteElementGeneral(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPrecastConcreteElementGeneral = new PropertySetDescription();\r\n         propertySetPrecastConcreteElementGeneral.Name = \"Pset_PrecastConcreteElementGeneral\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PrecastConcreteElementGeneral\"))\r\n         {\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBuildingElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.TypeDesignator\", \"TypeDesignator\");\r\n            ifcPSE.PropertyName = \"TypeDesignator\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeDesignatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.ProductionLotId\", \"ProductionLotId\");\r\n            ifcPSE.PropertyName = \"ProductionLotId\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProductionLotIdCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.SerialNumber\", \"SerialNumber\");\r\n            ifcPSE.PropertyName = \"SerialNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SerialNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.ElementWeight\", \"ElementWeight\");\r\n            ifcPSE.PropertyName = \"ElementWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElementWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.ElementGrossVolume\", \"ElementGrossVolume\");\r\n            ifcPSE.PropertyName = \"ElementGrossVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElementGrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.ElementNetVolume\", \"ElementNetVolume\");\r\n            ifcPSE.PropertyName = \"ElementNetVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElementNetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.CornerChamfer\", \"CornerChamfer\");\r\n            ifcPSE.PropertyName = \"CornerChamfer\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerChamferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.ManufacturingToleranceClass\", \"ManufacturingToleranceClass\");\r\n            ifcPSE.PropertyName = \"ManufacturingToleranceClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ManufacturingToleranceClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.FormStrippingStrength\", \"FormStrippingStrength\");\r\n            ifcPSE.PropertyName = \"FormStrippingStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FormStrippingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.LiftingStrength\", \"LiftingStrength\");\r\n            ifcPSE.PropertyName = \"LiftingStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiftingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.ReleaseStrength\", \"ReleaseStrength\");\r\n            ifcPSE.PropertyName = \"ReleaseStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.MinimumAllowableSupportLength\", \"MinimumAllowableSupportLength\");\r\n            ifcPSE.PropertyName = \"MinimumAllowableSupportLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumAllowableSupportLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.InitialTension\", \"InitialTension\");\r\n            ifcPSE.PropertyName = \"InitialTension\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InitialTensionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.TendonRelaxation\", \"TendonRelaxation\");\r\n            ifcPSE.PropertyName = \"TendonRelaxation\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TendonRelaxationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.TransportationStrength\", \"TransportationStrength\");\r\n            ifcPSE.PropertyName = \"TransportationStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransportationStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.SupportDuringTransportDescription\", \"SupportDuringTransportDescription\");\r\n            ifcPSE.PropertyName = \"SupportDuringTransportDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupportDuringTransportDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.SupportDuringTransportDocReference\", \"SupportDuringTransportDocReference\");\r\n            ifcPSE.PropertyName = \"SupportDuringTransportDocReference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupportDuringTransportDocReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.HollowCorePlugging\", \"HollowCorePlugging\");\r\n            ifcPSE.PropertyName = \"HollowCorePlugging\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HollowCorePluggingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PrecastConcreteElementGeneral\"))\r\n         {\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBuildingElementPart);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxy);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcCurtainWall);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcPile);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRailing);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRamp);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRampFlight);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcStair);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcStairFlight);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcWallStandardCase);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.TypeDesignator\", \"TypeDesignator\");\r\n            ifcPSE.PropertyName = \"TypeDesignator\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeDesignatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.ProductionLotId\", \"ProductionLotId\");\r\n            ifcPSE.PropertyName = \"ProductionLotId\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProductionLotIdCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.SerialNumber\", \"SerialNumber\");\r\n            ifcPSE.PropertyName = \"SerialNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SerialNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.ElementWeight\", \"ElementWeight\");\r\n            ifcPSE.PropertyName = \"ElementWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElementWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.ElementGrossVolume\", \"ElementGrossVolume\");\r\n            ifcPSE.PropertyName = \"ElementGrossVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElementGrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.ElementNetVolume\", \"ElementNetVolume\");\r\n            ifcPSE.PropertyName = \"ElementNetVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElementNetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.CornerChamfer\", \"CornerChamfer\");\r\n            ifcPSE.PropertyName = \"CornerChamfer\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerChamferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.ManufacturingToleranceClass\", \"ManufacturingToleranceClass\");\r\n            ifcPSE.PropertyName = \"ManufacturingToleranceClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ManufacturingToleranceClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.FormStrippingStrength\", \"FormStrippingStrength\");\r\n            ifcPSE.PropertyName = \"FormStrippingStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FormStrippingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.LiftingStrength\", \"LiftingStrength\");\r\n            ifcPSE.PropertyName = \"LiftingStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiftingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.ReleaseStrength\", \"ReleaseStrength\");\r\n            ifcPSE.PropertyName = \"ReleaseStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.MinimumAllowableSupportLength\", \"MinimumAllowableSupportLength\");\r\n            ifcPSE.PropertyName = \"MinimumAllowableSupportLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumAllowableSupportLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.InitialTension\", \"InitialTension\");\r\n            ifcPSE.PropertyName = \"InitialTension\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InitialTensionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.TendonRelaxation\", \"TendonRelaxation\");\r\n            ifcPSE.PropertyName = \"TendonRelaxation\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TendonRelaxationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.TransportationStrength\", \"TransportationStrength\");\r\n            ifcPSE.PropertyName = \"TransportationStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransportationStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.SupportDuringTransportDescription\", \"SupportDuringTransportDescription\");\r\n            ifcPSE.PropertyName = \"SupportDuringTransportDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupportDuringTransportDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.SupportDuringTransportDocReference\", \"SupportDuringTransportDocReference\");\r\n            ifcPSE.PropertyName = \"SupportDuringTransportDocReference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupportDuringTransportDocReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.HollowCorePlugging\", \"HollowCorePlugging\");\r\n            ifcPSE.PropertyName = \"HollowCorePlugging\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HollowCorePluggingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PrecastConcreteElementGeneral\"))\r\n         {\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxy);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcChimney);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcPile);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcPlate);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRamp);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRampFlight);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcStair);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcStairFlight);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcCivilElement);\r\n            propertySetPrecastConcreteElementGeneral.ObjectType = \"IfcBeam,IfcBuildingElementProxy,IfcChimney,IfcColumn,IfcFooting,IfcMember,IfcPile,IfcPlate,IfcRamp,IfcRampFlight,IfcRoof,IfcSlab,IfcStair,IfcStairFlight,IfcWall,IfcCivilElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.TypeDesignator\", \"TypeDesignator\");\r\n            ifcPSE.PropertyName = \"TypeDesignator\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Type Designator\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"特定子の記述\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeDesignatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.CornerChamfer\", \"CornerChamfer\");\r\n            ifcPSE.PropertyName = \"CornerChamfer\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Corner Chamfer\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"面取り\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerChamferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.ManufacturingToleranceClass\", \"ManufacturingToleranceClass\");\r\n            ifcPSE.PropertyName = \"ManufacturingToleranceClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Manufacturing Tolerance Class\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"メーカーの認可分類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ManufacturingToleranceClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.FormStrippingStrength\", \"FormStrippingStrength\");\r\n            ifcPSE.PropertyName = \"FormStrippingStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Form Stripping Strength\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"脱型強度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FormStrippingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.LiftingStrength\", \"LiftingStrength\");\r\n            ifcPSE.PropertyName = \"LiftingStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lifting Strength\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"吊り上げ強度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiftingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.ReleaseStrength\", \"ReleaseStrength\");\r\n            ifcPSE.PropertyName = \"ReleaseStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Release Strength\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"リリース強度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.MinimumAllowableSupportLength\", \"MinimumAllowableSupportLength\");\r\n            ifcPSE.PropertyName = \"MinimumAllowableSupportLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Minimum Allowable Support Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最小許容支持長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumAllowableSupportLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.InitialTension\", \"InitialTension\");\r\n            ifcPSE.PropertyName = \"InitialTension\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Initial Tension\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"初引張力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InitialTensionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.TendonRelaxation\", \"TendonRelaxation\");\r\n            ifcPSE.PropertyName = \"TendonRelaxation\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tendon Relaxation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"緊張材のリラクセーション\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TendonRelaxationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.TransportationStrength\", \"TransportationStrength\");\r\n            ifcPSE.PropertyName = \"TransportationStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Transportation Strength\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"輸送強度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransportationStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.SupportDuringTransportDescription\", \"SupportDuringTransportDescription\");\r\n            ifcPSE.PropertyName = \"SupportDuringTransportDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Support During Transport Description\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"輸送中の支持に関する記述\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupportDuringTransportDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.SupportDuringTransportDocReference\", \"SupportDuringTransportDocReference\");\r\n            ifcPSE.PropertyName = \"SupportDuringTransportDocReference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Support During Transport Doc Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"輸送中の支持に関する参考文献\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupportDuringTransportDocReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.HollowCorePlugging\", \"HollowCorePlugging\");\r\n            ifcPSE.PropertyName = \"HollowCorePlugging\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Hollow Core Plugging\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"くぼみの充填\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HollowCorePluggingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.CamberAtMidspan\", \"CamberAtMidspan\");\r\n            ifcPSE.PropertyName = \"CamberAtMidspan\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Camber At Midspan\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CamberAtMidspanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.BatterAtStart\", \"BatterAtStart\");\r\n            ifcPSE.PropertyName = \"BatterAtStart\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Batter At Start\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BatterAtStartCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.BatterAtEnd\", \"BatterAtEnd\");\r\n            ifcPSE.PropertyName = \"BatterAtEnd\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Batter At End\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BatterAtEndCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.Twisting\", \"Twisting\");\r\n            ifcPSE.PropertyName = \"Twisting\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Twisting\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TwistingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.Shortening\", \"Shortening\");\r\n            ifcPSE.PropertyName = \"Shortening\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shortening\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShorteningCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.PieceMark\", \"PieceMark\");\r\n            ifcPSE.PropertyName = \"PieceMark\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Piece Mark\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PieceMarkCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.DesignLocationNumber\", \"DesignLocationNumber\");\r\n            ifcPSE.PropertyName = \"DesignLocationNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Design Location Number\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DesignLocationNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PrecastConcreteElementGeneral\"))\r\n         {\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxy);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcChimney);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcCivilElement);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcPile);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcPlate);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRampFlight);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRamp);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcStairFlight);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcStair);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBeamType);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxyType);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcChimneyType);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcCivilElementType);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcColumnType);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcFootingType);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcMemberType);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcPileType);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcPlateType);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRampFlightType);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRampType);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcRoofType);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcSlabType);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcStairFlightType);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcStairType);\r\n            propertySetPrecastConcreteElementGeneral.EntityTypes.Add(IFCEntityType.IfcWallType);\r\n            propertySetPrecastConcreteElementGeneral.ObjectType = \"IfcBeam\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.TypeDesignation\", \"TypeDesignation\");\r\n            ifcPSE.PropertyName = \"TypeDesignation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeDesignationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.CornerChamfer\", \"CornerChamfer\");\r\n            ifcPSE.PropertyName = \"CornerChamfer\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CornerChamferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.ManufacturingToleranceClass\", \"ManufacturingToleranceClass\");\r\n            ifcPSE.PropertyName = \"ManufacturingToleranceClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ManufacturingToleranceClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.FormStrippingStrength\", \"FormStrippingStrength\");\r\n            ifcPSE.PropertyName = \"FormStrippingStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FormStrippingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.LiftingStrength\", \"LiftingStrength\");\r\n            ifcPSE.PropertyName = \"LiftingStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiftingStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.ReleaseStrength\", \"ReleaseStrength\");\r\n            ifcPSE.PropertyName = \"ReleaseStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.MinimumAllowableSupportLength\", \"MinimumAllowableSupportLength\");\r\n            ifcPSE.PropertyName = \"MinimumAllowableSupportLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumAllowableSupportLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.InitialTension\", \"InitialTension\");\r\n            ifcPSE.PropertyName = \"InitialTension\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InitialTensionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.TendonRelaxation\", \"TendonRelaxation\");\r\n            ifcPSE.PropertyName = \"TendonRelaxation\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TendonRelaxationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.TransportationStrength\", \"TransportationStrength\");\r\n            ifcPSE.PropertyName = \"TransportationStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransportationStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.SupportDuringTransportDescription\", \"SupportDuringTransportDescription\");\r\n            ifcPSE.PropertyName = \"SupportDuringTransportDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupportDuringTransportDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.SupportDuringTransportDocReference\", \"SupportDuringTransportDocReference\");\r\n            ifcPSE.PropertyName = \"SupportDuringTransportDocReference\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupportDuringTransportDocReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.HollowCorePlugging\", \"HollowCorePlugging\");\r\n            ifcPSE.PropertyName = \"HollowCorePlugging\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HollowCorePluggingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.CamberAtMidspan\", \"CamberAtMidspan\");\r\n            ifcPSE.PropertyName = \"CamberAtMidspan\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CamberAtMidspanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.BatterAtStart\", \"BatterAtStart\");\r\n            ifcPSE.PropertyName = \"BatterAtStart\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BatterAtStartCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.BatterAtEnd\", \"BatterAtEnd\");\r\n            ifcPSE.PropertyName = \"BatterAtEnd\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BatterAtEndCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.Twisting\", \"Twisting\");\r\n            ifcPSE.PropertyName = \"Twisting\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TwistingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.Shortening\", \"Shortening\");\r\n            ifcPSE.PropertyName = \"Shortening\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShorteningCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.PieceMark\", \"PieceMark\");\r\n            ifcPSE.PropertyName = \"PieceMark\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PieceMarkCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastConcreteElementGeneral.DesignLocationNumber\", \"DesignLocationNumber\");\r\n            ifcPSE.PropertyName = \"DesignLocationNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DesignLocationNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastConcreteElementGeneral.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPrecastConcreteElementGeneral);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PrecastKerbStone(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPrecastKerbStone = new PropertySetDescription();\r\n         propertySetPrecastKerbStone.Name = \"Pset_PrecastKerbStone\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PrecastKerbStone\"))\r\n         {\r\n            propertySetPrecastKerbStone.EntityTypes.Add(IFCEntityType.IfcKerb);\r\n            propertySetPrecastKerbStone.EntityTypes.Add(IFCEntityType.IfcKerbType);\r\n            propertySetPrecastKerbStone.ObjectType = \"IfcKerb\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastKerbStone.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastKerbStone.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastKerbStone.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastKerbStone.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastKerbStone.TypeDesignation\", \"TypeDesignation\");\r\n            ifcPSE.PropertyName = \"TypeDesignation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeDesignationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastKerbStone.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastKerbStone.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastKerbStone.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPrecastKerbStone);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PrecastSlab(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPrecastSlab = new PropertySetDescription();\r\n         propertySetPrecastSlab.Name = \"Pset_PrecastSlab\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PrecastSlab\"))\r\n         {\r\n            propertySetPrecastSlab.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetPrecastSlab.ObjectType = \"IfcSlab\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastSlab.TypeDesignator\", \"TypeDesignator\");\r\n            ifcPSE.PropertyName = \"TypeDesignator\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Type Designator\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeDesignatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastSlab.ToppingType\", \"ToppingType\");\r\n            ifcPSE.PropertyName = \"ToppingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Topping Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ToppingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastSlab.EdgeDistanceToFirstAxis\", \"EdgeDistanceToFirstAxis\");\r\n            ifcPSE.PropertyName = \"EdgeDistanceToFirstAxis\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Edge Distance To First Axis\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeDistanceToFirstAxisCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastSlab.DistanceBetweenComponentAxes\", \"DistanceBetweenComponentAxes\");\r\n            ifcPSE.PropertyName = \"DistanceBetweenComponentAxes\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Distance Between Component Axes\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DistanceBetweenComponentAxesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastSlab.AngleToFirstAxis\", \"AngleToFirstAxis\");\r\n            ifcPSE.PropertyName = \"AngleToFirstAxis\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Angle To First Axis\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AngleToFirstAxisCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastSlab.AngleBetweenComponentAxes\", \"AngleBetweenComponentAxes\");\r\n            ifcPSE.PropertyName = \"AngleBetweenComponentAxes\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Angle Between Component Axes\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AngleBetweenComponentAxesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastSlab.NominalThickness\", \"NominalThickness\");\r\n            ifcPSE.PropertyName = \"NominalThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Thickness\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastSlab.NominalToppingThickness\", \"NominalToppingThickness\");\r\n            ifcPSE.PropertyName = \"NominalToppingThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Topping Thickness\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalToppingThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastSlab.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PrecastSlab\"))\r\n         {\r\n            propertySetPrecastSlab.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetPrecastSlab.EntityTypes.Add(IFCEntityType.IfcSlabType);\r\n            propertySetPrecastSlab.ObjectType = \"IfcSlab\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastSlab.TypeDesignation\", \"TypeDesignation\");\r\n            ifcPSE.PropertyName = \"TypeDesignation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeDesignationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastSlab.ToppingType\", \"ToppingType\");\r\n            ifcPSE.PropertyName = \"ToppingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ToppingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastSlab.EdgeDistanceToFirstAxis\", \"EdgeDistanceToFirstAxis\");\r\n            ifcPSE.PropertyName = \"EdgeDistanceToFirstAxis\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeDistanceToFirstAxisCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastSlab.DistanceBetweenComponentAxes\", \"DistanceBetweenComponentAxes\");\r\n            ifcPSE.PropertyName = \"DistanceBetweenComponentAxes\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DistanceBetweenComponentAxesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastSlab.AngleToFirstAxis\", \"AngleToFirstAxis\");\r\n            ifcPSE.PropertyName = \"AngleToFirstAxis\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AngleToFirstAxisCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastSlab.AngleBetweenComponentAxes\", \"AngleBetweenComponentAxes\");\r\n            ifcPSE.PropertyName = \"AngleBetweenComponentAxes\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AngleBetweenComponentAxesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastSlab.NominalThickness\", \"NominalThickness\");\r\n            ifcPSE.PropertyName = \"NominalThickness\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PrecastSlab.NominalToppingThickness\", \"NominalToppingThickness\");\r\n            ifcPSE.PropertyName = \"NominalToppingThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalToppingThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPrecastSlab.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPrecastSlab);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProcessCapacity(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProcessCapacity = new PropertySetDescription();\r\n         propertySetProcessCapacity.Name = \"Pset_ProcessCapacity\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProcessCapacity\"))\r\n         {\r\n            propertySetProcessCapacity.EntityTypes.Add(IFCEntityType.IfcBuiltSystem);\r\n            propertySetProcessCapacity.EntityTypes.Add(IFCEntityType.IfcDistributionSystem);\r\n            propertySetProcessCapacity.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetProcessCapacity.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetProcessCapacity.EntityTypes.Add(IFCEntityType.IfcTransportationDevice);\r\n            propertySetProcessCapacity.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            propertySetProcessCapacity.EntityTypes.Add(IFCEntityType.IfcDoorType);\r\n            propertySetProcessCapacity.EntityTypes.Add(IFCEntityType.IfcSpaceType);\r\n            propertySetProcessCapacity.EntityTypes.Add(IFCEntityType.IfcTransportationDeviceType);\r\n            propertySetProcessCapacity.ObjectType = \"IfcBuiltSystem\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProcessCapacity.ProcessItem\", \"ProcessItem\");\r\n            ifcPSE.PropertyName = \"ProcessItem\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ProcessItem);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProcessItemCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProcessCapacity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProcessCapacity.ProcessCapacity\", \"ProcessCapacity\");\r\n            ifcPSE.PropertyName = \"ProcessCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProcessCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProcessCapacity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProcessCapacity.ProcessPerformance\", \"ProcessPerformance\");\r\n            ifcPSE.PropertyName = \"ProcessPerformance\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProcessPerformanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProcessCapacity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProcessCapacity.DownstreamConnections\", \"DownstreamConnections\");\r\n            ifcPSE.PropertyName = \"DownstreamConnections\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DownstreamConnectionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProcessCapacity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProcessCapacity.UpstreamConnections\", \"UpstreamConnections\");\r\n            ifcPSE.PropertyName = \"UpstreamConnections\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpstreamConnectionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProcessCapacity.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProcessCapacity);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProductRequirements(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProductRequirements = new PropertySetDescription();\r\n         propertySetProductRequirements.Name = \"Pset_ProductRequirements\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProductRequirements\"))\r\n         {\r\n            propertySetProductRequirements.EntityTypes.Add(IFCEntityType.IfcProduct);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.Name\", \"Name\");\r\n            ifcPSE.PropertyName = \"Name\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.Category\", \"Category\");\r\n            ifcPSE.PropertyName = \"Category\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.GroupName\", \"GroupName\");\r\n            ifcPSE.PropertyName = \"GroupName\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GroupNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.Classification\", \"Classification\");\r\n            ifcPSE.PropertyName = \"Classification\";\r\n            ifcPSE.PropertyType = PropertyType.IfcClassificationReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClassificationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.DemandValue\", \"DemandValue\");\r\n            ifcPSE.PropertyName = \"DemandValue\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DemandValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.DemandThresholdValue\", \"DemandThresholdValue\");\r\n            ifcPSE.PropertyName = \"DemandThresholdValue\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DemandThresholdValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.DemandImportanceValue\", \"DemandImportanceValue\");\r\n            ifcPSE.PropertyName = \"DemandImportanceValue\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DemandImportanceValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.SupplyEvaluationValue\", \"SupplyEvaluationValue\");\r\n            ifcPSE.PropertyName = \"SupplyEvaluationValue\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyEvaluationValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.GapValue\", \"GapValue\");\r\n            ifcPSE.PropertyName = \"GapValue\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GapValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.GapValueWeighted\", \"GapValueWeighted\");\r\n            ifcPSE.PropertyName = \"GapValueWeighted\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GapValueWeightedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProductRequirements\"))\r\n         {\r\n            propertySetProductRequirements.EntityTypes.Add(IFCEntityType.IfcProduct);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.Name\", \"Name\");\r\n            ifcPSE.PropertyName = \"Name\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.Category\", \"Category\");\r\n            ifcPSE.PropertyName = \"Category\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.GroupName\", \"GroupName\");\r\n            ifcPSE.PropertyName = \"GroupName\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GroupNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.Classification\", \"Classification\");\r\n            ifcPSE.PropertyName = \"Classification\";\r\n            ifcPSE.PropertyType = PropertyType.IfcClassificationReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClassificationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.DemandValue\", \"DemandValue\");\r\n            ifcPSE.PropertyName = \"DemandValue\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DemandValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.DemandThresholdValue\", \"DemandThresholdValue\");\r\n            ifcPSE.PropertyName = \"DemandThresholdValue\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DemandThresholdValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.DemandImportanceValue\", \"DemandImportanceValue\");\r\n            ifcPSE.PropertyName = \"DemandImportanceValue\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DemandImportanceValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.SupplyEvaluationValue\", \"SupplyEvaluationValue\");\r\n            ifcPSE.PropertyName = \"SupplyEvaluationValue\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupplyEvaluationValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.GapValue\", \"GapValue\");\r\n            ifcPSE.PropertyName = \"GapValue\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GapValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProductRequirements.GapValueWeighted\", \"GapValueWeighted\");\r\n            ifcPSE.PropertyName = \"GapValueWeighted\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GapValueWeightedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProductRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProductRequirements);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProfileArbitraryDoubleT(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProfileArbitraryDoubleT = new PropertySetDescription();\r\n         propertySetProfileArbitraryDoubleT.Name = \"Pset_ProfileArbitraryDoubleT\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProfileArbitraryDoubleT\"))\r\n         {\r\n            propertySetProfileArbitraryDoubleT.EntityTypes.Add(IFCEntityType.IfcArbitraryClosedProfileDef);\r\n            propertySetProfileArbitraryDoubleT.ObjectType = \"IfcArbitraryClosedProfileDef\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.OverallWidth\", \"OverallWidth\");\r\n            ifcPSE.PropertyName = \"OverallWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Overall Width\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.LeftFlangeWidth\", \"LeftFlangeWidth\");\r\n            ifcPSE.PropertyName = \"LeftFlangeWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Left Flange Width\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeftFlangeWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.RightFlangeWidth\", \"RightFlangeWidth\");\r\n            ifcPSE.PropertyName = \"RightFlangeWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Right Flange Width\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RightFlangeWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.OverallDepth\", \"OverallDepth\");\r\n            ifcPSE.PropertyName = \"OverallDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Overall Depth\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.FlangeDepth\", \"FlangeDepth\");\r\n            ifcPSE.PropertyName = \"FlangeDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flange Depth\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.FlangeDraft\", \"FlangeDraft\");\r\n            ifcPSE.PropertyName = \"FlangeDraft\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flange Draft\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeDraftCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.FlangeChamfer\", \"FlangeChamfer\");\r\n            ifcPSE.PropertyName = \"FlangeChamfer\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flange Chamfer\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeChamferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.FlangeBaseFillet\", \"FlangeBaseFillet\");\r\n            ifcPSE.PropertyName = \"FlangeBaseFillet\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flange Base Fillet\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeBaseFilletCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.FlangeTopFillet\", \"FlangeTopFillet\");\r\n            ifcPSE.PropertyName = \"FlangeTopFillet\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flange Top Fillet\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeTopFilletCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.StemBaseWidth\", \"StemBaseWidth\");\r\n            ifcPSE.PropertyName = \"StemBaseWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Stem Base Width\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StemBaseWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.StemTopWidth\", \"StemTopWidth\");\r\n            ifcPSE.PropertyName = \"StemTopWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Stem Top Width\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StemTopWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.StemBaseChamfer\", \"StemBaseChamfer\");\r\n            ifcPSE.PropertyName = \"StemBaseChamfer\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Stem Base Chamfer\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StemBaseChamferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.StemTopChamfer\", \"StemTopChamfer\");\r\n            ifcPSE.PropertyName = \"StemTopChamfer\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Stem Top Chamfer\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StemTopChamferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.StemBaseFillet\", \"StemBaseFillet\");\r\n            ifcPSE.PropertyName = \"StemBaseFillet\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Stem Base Fillet\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StemBaseFilletCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.StemTopFillet\", \"StemTopFillet\");\r\n            ifcPSE.PropertyName = \"StemTopFillet\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Stem Top Fillet\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StemTopFilletCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProfileArbitraryDoubleT\"))\r\n         {\r\n            propertySetProfileArbitraryDoubleT.EntityTypes.Add(IFCEntityType.IfcArbitraryClosedProfileDef);\r\n            propertySetProfileArbitraryDoubleT.ObjectType = \"IfcArbitraryClosedProfileDef\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.OverallWidth\", \"OverallWidth\");\r\n            ifcPSE.PropertyName = \"OverallWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.LeftFlangeWidth\", \"LeftFlangeWidth\");\r\n            ifcPSE.PropertyName = \"LeftFlangeWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LeftFlangeWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.RightFlangeWidth\", \"RightFlangeWidth\");\r\n            ifcPSE.PropertyName = \"RightFlangeWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RightFlangeWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.OverallDepth\", \"OverallDepth\");\r\n            ifcPSE.PropertyName = \"OverallDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.FlangeDepth\", \"FlangeDepth\");\r\n            ifcPSE.PropertyName = \"FlangeDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.FlangeDraft\", \"FlangeDraft\");\r\n            ifcPSE.PropertyName = \"FlangeDraft\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeDraftCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.FlangeChamfer\", \"FlangeChamfer\");\r\n            ifcPSE.PropertyName = \"FlangeChamfer\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeChamferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.FlangeBaseFillet\", \"FlangeBaseFillet\");\r\n            ifcPSE.PropertyName = \"FlangeBaseFillet\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeBaseFilletCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.FlangeTopFillet\", \"FlangeTopFillet\");\r\n            ifcPSE.PropertyName = \"FlangeTopFillet\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlangeTopFilletCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.StemBaseWidth\", \"StemBaseWidth\");\r\n            ifcPSE.PropertyName = \"StemBaseWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StemBaseWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.StemTopWidth\", \"StemTopWidth\");\r\n            ifcPSE.PropertyName = \"StemTopWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StemTopWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.StemBaseChamfer\", \"StemBaseChamfer\");\r\n            ifcPSE.PropertyName = \"StemBaseChamfer\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StemBaseChamferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.StemTopChamfer\", \"StemTopChamfer\");\r\n            ifcPSE.PropertyName = \"StemTopChamfer\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StemTopChamferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.StemBaseFillet\", \"StemBaseFillet\");\r\n            ifcPSE.PropertyName = \"StemBaseFillet\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StemBaseFilletCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryDoubleT.StemTopFillet\", \"StemTopFillet\");\r\n            ifcPSE.PropertyName = \"StemTopFillet\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StemTopFilletCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryDoubleT.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProfileArbitraryDoubleT);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProfileArbitraryHollowCore(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProfileArbitraryHollowCore = new PropertySetDescription();\r\n         propertySetProfileArbitraryHollowCore.Name = \"Pset_ProfileArbitraryHollowCore\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProfileArbitraryHollowCore\"))\r\n         {\r\n            propertySetProfileArbitraryHollowCore.EntityTypes.Add(IFCEntityType.IfcArbitraryProfileDefWithVoids);\r\n            propertySetProfileArbitraryHollowCore.ObjectType = \"IfcArbitraryProfileDefWithVoids\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.OverallWidth\", \"OverallWidth\");\r\n            ifcPSE.PropertyName = \"OverallWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Overall Width\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.OverallDepth\", \"OverallDepth\");\r\n            ifcPSE.PropertyName = \"OverallDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Overall Depth\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.EdgeDraft\", \"EdgeDraft\");\r\n            ifcPSE.PropertyName = \"EdgeDraft\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Edge Draft\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeDraftCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.DraftBaseOffset\", \"DraftBaseOffset\");\r\n            ifcPSE.PropertyName = \"DraftBaseOffset\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Draft Base Offset\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DraftBaseOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.DraftSideOffset\", \"DraftSideOffset\");\r\n            ifcPSE.PropertyName = \"DraftSideOffset\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Draft Side Offset\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DraftSideOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.BaseChamfer\", \"BaseChamfer\");\r\n            ifcPSE.PropertyName = \"BaseChamfer\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Base Chamfer\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseChamferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.KeyDepth\", \"KeyDepth\");\r\n            ifcPSE.PropertyName = \"KeyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Key Depth\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.KeyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.KeyHeight\", \"KeyHeight\");\r\n            ifcPSE.PropertyName = \"KeyHeight\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Key Height\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.KeyHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.KeyOffset\", \"KeyOffset\");\r\n            ifcPSE.PropertyName = \"KeyOffset\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Key Offset\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.KeyOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.BottomCover\", \"BottomCover\");\r\n            ifcPSE.PropertyName = \"BottomCover\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Bottom Cover\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BottomCoverCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CoreSpacing\", \"CoreSpacing\");\r\n            ifcPSE.PropertyName = \"CoreSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Core Spacing\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CoreBaseHeight\", \"CoreBaseHeight\");\r\n            ifcPSE.PropertyName = \"CoreBaseHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Core Base Height\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreBaseHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CoreMiddleHeight\", \"CoreMiddleHeight\");\r\n            ifcPSE.PropertyName = \"CoreMiddleHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Core Middle Height\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreMiddleHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CoreTopHeight\", \"CoreTopHeight\");\r\n            ifcPSE.PropertyName = \"CoreTopHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Core Top Height\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreTopHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CoreBaseWidth\", \"CoreBaseWidth\");\r\n            ifcPSE.PropertyName = \"CoreBaseWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Core Base Width\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreBaseWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CoreTopWidth\", \"CoreTopWidth\");\r\n            ifcPSE.PropertyName = \"CoreTopWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Core Top Width\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreTopWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CenterCoreSpacing\", \"CenterCoreSpacing\");\r\n            ifcPSE.PropertyName = \"CenterCoreSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Center Core Spacing\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CenterCoreSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CenterCoreBaseHeight\", \"CenterCoreBaseHeight\");\r\n            ifcPSE.PropertyName = \"CenterCoreBaseHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Center Core Base Height\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CenterCoreBaseHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CenterCoreMiddleHeight\", \"CenterCoreMiddleHeight\");\r\n            ifcPSE.PropertyName = \"CenterCoreMiddleHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Center Core Middle Height\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CenterCoreMiddleHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CenterCoreTopHeight\", \"CenterCoreTopHeight\");\r\n            ifcPSE.PropertyName = \"CenterCoreTopHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Center Core Top Height\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CenterCoreTopHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CenterCoreBaseWidth\", \"CenterCoreBaseWidth\");\r\n            ifcPSE.PropertyName = \"CenterCoreBaseWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Center Core Base Width\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CenterCoreBaseWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CenterCoreTopWidth\", \"CenterCoreTopWidth\");\r\n            ifcPSE.PropertyName = \"CenterCoreTopWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Center Core Top Width\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CenterCoreTopWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.NumberOfCores\", \"NumberOfCores\");\r\n            ifcPSE.PropertyName = \"NumberOfCores\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Cores\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCoresCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProfileArbitraryHollowCore\"))\r\n         {\r\n            propertySetProfileArbitraryHollowCore.EntityTypes.Add(IFCEntityType.IfcArbitraryProfileDefWithVoids);\r\n            propertySetProfileArbitraryHollowCore.ObjectType = \"IfcArbitraryProfileDefWithVoids\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.OverallWidth\", \"OverallWidth\");\r\n            ifcPSE.PropertyName = \"OverallWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.OverallDepth\", \"OverallDepth\");\r\n            ifcPSE.PropertyName = \"OverallDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.EdgeDraft\", \"EdgeDraft\");\r\n            ifcPSE.PropertyName = \"EdgeDraft\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EdgeDraftCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.DraftBaseOffset\", \"DraftBaseOffset\");\r\n            ifcPSE.PropertyName = \"DraftBaseOffset\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DraftBaseOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.DraftSideOffset\", \"DraftSideOffset\");\r\n            ifcPSE.PropertyName = \"DraftSideOffset\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DraftSideOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.BaseChamfer\", \"BaseChamfer\");\r\n            ifcPSE.PropertyName = \"BaseChamfer\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseChamferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.KeyDepth\", \"KeyDepth\");\r\n            ifcPSE.PropertyName = \"KeyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.KeyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.KeyHeight\", \"KeyHeight\");\r\n            ifcPSE.PropertyName = \"KeyHeight\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.KeyHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.KeyOffset\", \"KeyOffset\");\r\n            ifcPSE.PropertyName = \"KeyOffset\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.KeyOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.BottomCover\", \"BottomCover\");\r\n            ifcPSE.PropertyName = \"BottomCover\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BottomCoverCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CoreSpacing\", \"CoreSpacing\");\r\n            ifcPSE.PropertyName = \"CoreSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CoreBaseHeight\", \"CoreBaseHeight\");\r\n            ifcPSE.PropertyName = \"CoreBaseHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreBaseHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CoreMiddleHeight\", \"CoreMiddleHeight\");\r\n            ifcPSE.PropertyName = \"CoreMiddleHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreMiddleHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CoreTopHeight\", \"CoreTopHeight\");\r\n            ifcPSE.PropertyName = \"CoreTopHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreTopHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CoreBaseWidth\", \"CoreBaseWidth\");\r\n            ifcPSE.PropertyName = \"CoreBaseWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreBaseWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CoreTopWidth\", \"CoreTopWidth\");\r\n            ifcPSE.PropertyName = \"CoreTopWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoreTopWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CenterCoreSpacing\", \"CenterCoreSpacing\");\r\n            ifcPSE.PropertyName = \"CenterCoreSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CenterCoreSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CenterCoreBaseHeight\", \"CenterCoreBaseHeight\");\r\n            ifcPSE.PropertyName = \"CenterCoreBaseHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CenterCoreBaseHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CenterCoreMiddleHeight\", \"CenterCoreMiddleHeight\");\r\n            ifcPSE.PropertyName = \"CenterCoreMiddleHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CenterCoreMiddleHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CenterCoreTopHeight\", \"CenterCoreTopHeight\");\r\n            ifcPSE.PropertyName = \"CenterCoreTopHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CenterCoreTopHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CenterCoreBaseWidth\", \"CenterCoreBaseWidth\");\r\n            ifcPSE.PropertyName = \"CenterCoreBaseWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CenterCoreBaseWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.CenterCoreTopWidth\", \"CenterCoreTopWidth\");\r\n            ifcPSE.PropertyName = \"CenterCoreTopWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CenterCoreTopWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileArbitraryHollowCore.NumberOfCores\", \"NumberOfCores\");\r\n            ifcPSE.PropertyName = \"NumberOfCores\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCoresCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileArbitraryHollowCore.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProfileArbitraryHollowCore);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProfileMechanical(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProfileMechanical = new PropertySetDescription();\r\n         propertySetProfileMechanical.Name = \"Pset_ProfileMechanical\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProfileMechanical\"))\r\n         {\r\n            propertySetProfileMechanical.EntityTypes.Add(IFCEntityType.IfcProfileDef);\r\n            propertySetProfileMechanical.ObjectType = \"IfcProfileDef\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MassPerLength\", \"MassPerLength\");\r\n            ifcPSE.PropertyName = \"MassPerLength\";\r\n            ifcPSE.PropertyType = PropertyType.MassPerLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mass Per Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MassPerLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cross Section Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.Perimeter\", \"Perimeter\");\r\n            ifcPSE.PropertyName = \"Perimeter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Perimeter\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MinimumPlateThickness\", \"MinimumPlateThickness\");\r\n            ifcPSE.PropertyName = \"MinimumPlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Minimum Plate Thickness\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumPlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MaximumPlateThickness\", \"MaximumPlateThickness\");\r\n            ifcPSE.PropertyName = \"MaximumPlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Plate Thickness\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.CentreOfGravityInX\", \"CentreOfGravityInX\");\r\n            ifcPSE.PropertyName = \"CentreOfGravityInX\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Centre Of Gravity In X\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CentreOfGravityInXCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.CentreOfGravityInY\", \"CentreOfGravityInY\");\r\n            ifcPSE.PropertyName = \"CentreOfGravityInY\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Centre Of Gravity In Y\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CentreOfGravityInYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.ShearCentreZ\", \"ShearCentreZ\");\r\n            ifcPSE.PropertyName = \"ShearCentreZ\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shear Centre Z\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearCentreZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.ShearCentreY\", \"ShearCentreY\");\r\n            ifcPSE.PropertyName = \"ShearCentreY\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shear Centre Y\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearCentreYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MomentOfInertiaY\", \"MomentOfInertiaY\");\r\n            ifcPSE.PropertyName = \"MomentOfInertiaY\";\r\n            ifcPSE.PropertyType = PropertyType.MomentOfInertia;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Moment Of Inertia Y\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MomentOfInertiaYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MomentOfInertiaZ\", \"MomentOfInertiaZ\");\r\n            ifcPSE.PropertyName = \"MomentOfInertiaZ\";\r\n            ifcPSE.PropertyType = PropertyType.MomentOfInertia;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Moment Of Inertia Z\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MomentOfInertiaZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MomentOfInertiaYZ\", \"MomentOfInertiaYZ\");\r\n            ifcPSE.PropertyName = \"MomentOfInertiaYZ\";\r\n            ifcPSE.PropertyType = PropertyType.MomentOfInertia;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Moment Of Inertia YZ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MomentOfInertiaYZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.TorsionalConstantX\", \"TorsionalConstantX\");\r\n            ifcPSE.PropertyName = \"TorsionalConstantX\";\r\n            ifcPSE.PropertyType = PropertyType.MomentOfInertia;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Torsional Constant X\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorsionalConstantXCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.WarpingConstant\", \"WarpingConstant\");\r\n            ifcPSE.PropertyName = \"WarpingConstant\";\r\n            ifcPSE.PropertyType = PropertyType.WarpingConstant;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Warping Constant\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarpingConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.ShearDeformationAreaZ\", \"ShearDeformationAreaZ\");\r\n            ifcPSE.PropertyName = \"ShearDeformationAreaZ\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shear Deformation Area Z\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearDeformationAreaZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.ShearDeformationAreaY\", \"ShearDeformationAreaY\");\r\n            ifcPSE.PropertyName = \"ShearDeformationAreaY\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shear Deformation Area Y\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearDeformationAreaYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MaximumSectionModulusY\", \"MaximumSectionModulusY\");\r\n            ifcPSE.PropertyName = \"MaximumSectionModulusY\";\r\n            ifcPSE.PropertyType = PropertyType.SectionModulus;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Section Modulus Y\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumSectionModulusYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MinimumSectionModulusY\", \"MinimumSectionModulusY\");\r\n            ifcPSE.PropertyName = \"MinimumSectionModulusY\";\r\n            ifcPSE.PropertyType = PropertyType.SectionModulus;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Minimum Section Modulus Y\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumSectionModulusYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MaximumSectionModulusZ\", \"MaximumSectionModulusZ\");\r\n            ifcPSE.PropertyName = \"MaximumSectionModulusZ\";\r\n            ifcPSE.PropertyType = PropertyType.SectionModulus;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Section Modulus Z\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumSectionModulusZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MinimumSectionModulusZ\", \"MinimumSectionModulusZ\");\r\n            ifcPSE.PropertyName = \"MinimumSectionModulusZ\";\r\n            ifcPSE.PropertyType = PropertyType.SectionModulus;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Minimum Section Modulus Z\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumSectionModulusZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.TorsionalSectionModulus\", \"TorsionalSectionModulus\");\r\n            ifcPSE.PropertyName = \"TorsionalSectionModulus\";\r\n            ifcPSE.PropertyType = PropertyType.SectionModulus;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Torsional Section Modulus\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorsionalSectionModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.ShearAreaZ\", \"ShearAreaZ\");\r\n            ifcPSE.PropertyName = \"ShearAreaZ\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shear Area Z\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearAreaZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.ShearAreaY\", \"ShearAreaY\");\r\n            ifcPSE.PropertyName = \"ShearAreaY\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shear Area Y\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearAreaYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.PlasticShapeFactorY\", \"PlasticShapeFactorY\");\r\n            ifcPSE.PropertyName = \"PlasticShapeFactorY\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Plastic Shape Factor Y\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlasticShapeFactorYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.PlasticShapeFactorZ\", \"PlasticShapeFactorZ\");\r\n            ifcPSE.PropertyName = \"PlasticShapeFactorZ\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Plastic Shape Factor Z\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlasticShapeFactorZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProfileMechanical\"))\r\n         {\r\n            propertySetProfileMechanical.EntityTypes.Add(IFCEntityType.IfcProfileDef);\r\n            propertySetProfileMechanical.ObjectType = \"IfcProfileDef\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MassPerLength\", \"MassPerLength\");\r\n            ifcPSE.PropertyName = \"MassPerLength\";\r\n            ifcPSE.PropertyType = PropertyType.MassPerLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MassPerLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.Perimeter\", \"Perimeter\");\r\n            ifcPSE.PropertyName = \"Perimeter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MinimumPlateThickness\", \"MinimumPlateThickness\");\r\n            ifcPSE.PropertyName = \"MinimumPlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumPlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MaximumPlateThickness\", \"MaximumPlateThickness\");\r\n            ifcPSE.PropertyName = \"MaximumPlateThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumPlateThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.CentreOfGravityInX\", \"CentreOfGravityInX\");\r\n            ifcPSE.PropertyName = \"CentreOfGravityInX\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CentreOfGravityInXCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.CentreOfGravityInY\", \"CentreOfGravityInY\");\r\n            ifcPSE.PropertyName = \"CentreOfGravityInY\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CentreOfGravityInYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.ShearCentreZ\", \"ShearCentreZ\");\r\n            ifcPSE.PropertyName = \"ShearCentreZ\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearCentreZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.ShearCentreY\", \"ShearCentreY\");\r\n            ifcPSE.PropertyName = \"ShearCentreY\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearCentreYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MomentOfInertiaY\", \"MomentOfInertiaY\");\r\n            ifcPSE.PropertyName = \"MomentOfInertiaY\";\r\n            ifcPSE.PropertyType = PropertyType.MomentOfInertia;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MomentOfInertiaYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MomentOfInertiaZ\", \"MomentOfInertiaZ\");\r\n            ifcPSE.PropertyName = \"MomentOfInertiaZ\";\r\n            ifcPSE.PropertyType = PropertyType.MomentOfInertia;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MomentOfInertiaZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MomentOfInertiaYZ\", \"MomentOfInertiaYZ\");\r\n            ifcPSE.PropertyName = \"MomentOfInertiaYZ\";\r\n            ifcPSE.PropertyType = PropertyType.MomentOfInertia;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MomentOfInertiaYZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.TorsionalConstantX\", \"TorsionalConstantX\");\r\n            ifcPSE.PropertyName = \"TorsionalConstantX\";\r\n            ifcPSE.PropertyType = PropertyType.MomentOfInertia;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorsionalConstantXCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.WarpingConstant\", \"WarpingConstant\");\r\n            ifcPSE.PropertyName = \"WarpingConstant\";\r\n            ifcPSE.PropertyType = PropertyType.WarpingConstant;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarpingConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.ShearDeformationAreaZ\", \"ShearDeformationAreaZ\");\r\n            ifcPSE.PropertyName = \"ShearDeformationAreaZ\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearDeformationAreaZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.ShearDeformationAreaY\", \"ShearDeformationAreaY\");\r\n            ifcPSE.PropertyName = \"ShearDeformationAreaY\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearDeformationAreaYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MaximumSectionModulusY\", \"MaximumSectionModulusY\");\r\n            ifcPSE.PropertyName = \"MaximumSectionModulusY\";\r\n            ifcPSE.PropertyType = PropertyType.SectionModulus;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumSectionModulusYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MinimumSectionModulusY\", \"MinimumSectionModulusY\");\r\n            ifcPSE.PropertyName = \"MinimumSectionModulusY\";\r\n            ifcPSE.PropertyType = PropertyType.SectionModulus;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumSectionModulusYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MaximumSectionModulusZ\", \"MaximumSectionModulusZ\");\r\n            ifcPSE.PropertyName = \"MaximumSectionModulusZ\";\r\n            ifcPSE.PropertyType = PropertyType.SectionModulus;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumSectionModulusZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.MinimumSectionModulusZ\", \"MinimumSectionModulusZ\");\r\n            ifcPSE.PropertyName = \"MinimumSectionModulusZ\";\r\n            ifcPSE.PropertyType = PropertyType.SectionModulus;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumSectionModulusZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.TorsionalSectionModulus\", \"TorsionalSectionModulus\");\r\n            ifcPSE.PropertyName = \"TorsionalSectionModulus\";\r\n            ifcPSE.PropertyType = PropertyType.SectionModulus;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TorsionalSectionModulusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.ShearAreaZ\", \"ShearAreaZ\");\r\n            ifcPSE.PropertyName = \"ShearAreaZ\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearAreaZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.ShearAreaY\", \"ShearAreaY\");\r\n            ifcPSE.PropertyName = \"ShearAreaY\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShearAreaYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.PlasticShapeFactorY\", \"PlasticShapeFactorY\");\r\n            ifcPSE.PropertyName = \"PlasticShapeFactorY\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlasticShapeFactorYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProfileMechanical.PlasticShapeFactorZ\", \"PlasticShapeFactorZ\");\r\n            ifcPSE.PropertyName = \"PlasticShapeFactorZ\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlasticShapeFactorZCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProfileMechanical.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProfileMechanical);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProjectCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProjectCommon = new PropertySetDescription();\r\n         propertySetProjectCommon.Name = \"Pset_ProjectCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectCommon\"))\r\n         {\r\n            propertySetProjectCommon.EntityTypes.Add(IFCEntityType.IfcProject);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectCommon.ConstructionMode\", \"ConstructionMode\");\r\n            ifcPSE.PropertyName = \"ConstructionMode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConstructionModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectCommon.BuildingPermitId\", \"BuildingPermitId\");\r\n            ifcPSE.PropertyName = \"BuildingPermitId\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BuildingPermitIdCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectCommon.GrossAreaPlanned\", \"GrossAreaPlanned\");\r\n            ifcPSE.PropertyName = \"GrossAreaPlanned\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaPlannedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectCommon\"))\r\n         {\r\n            propertySetProjectCommon.EntityTypes.Add(IFCEntityType.IfcProject);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectCommon.ConstructionMode\", \"ConstructionMode\");\r\n            ifcPSE.PropertyName = \"ConstructionMode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConstructionModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectCommon.BuildingPermitId\", \"BuildingPermitId\");\r\n            ifcPSE.PropertyName = \"BuildingPermitId\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BuildingPermitIdCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectCommon.GrossAreaPlanned\", \"GrossAreaPlanned\");\r\n            ifcPSE.PropertyName = \"GrossAreaPlanned\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaPlannedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectCommon\"))\r\n         {\r\n            propertySetProjectCommon.EntityTypes.Add(IFCEntityType.IfcProject);\r\n            propertySetProjectCommon.ObjectType = \"IfcProject\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectCommon.ProjectType\", \"ProjectType\");\r\n            ifcPSE.PropertyName = \"ProjectType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ProjectType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProjectTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectCommon.ProjectInvestmentEstimate\", \"ProjectInvestmentEstimate\");\r\n            ifcPSE.PropertyName = \"ProjectInvestmentEstimate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCostValue;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProjectInvestmentEstimateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectCommon.FundingSource\", \"FundingSource\");\r\n            ifcPSE.PropertyName = \"FundingSource\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FundingSourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectCommon.ROI\", \"ROI\");\r\n            ifcPSE.PropertyName = \"ROI\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ROICalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectCommon.NetEarnedValue\", \"NetEarnedValue\");\r\n            ifcPSE.PropertyName = \"NetEarnedValue\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCostValue;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetEarnedValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectCommon.PaybackPeriod\", \"PaybackPeriod\");\r\n            ifcPSE.PropertyName = \"PaybackPeriod\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PaybackPeriodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProjectCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProjectionElementShadingDevice(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProjectionElementShadingDevice = new PropertySetDescription();\r\n         propertySetProjectionElementShadingDevice.Name = \"Pset_ProjectionElementShadingDevice\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectionElementShadingDevice\"))\r\n         {\r\n            propertySetProjectionElementShadingDevice.EntityTypes.Add(IFCEntityType.IfcProjectionElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectionElementShadingDevice.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectionElementShadingDevice.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProjectionElementShadingDevice);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProjectionElementShadingDevicePHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProjectionElementShadingDevicePHistory = new PropertySetDescription();\r\n         propertySetProjectionElementShadingDevicePHistory.Name = \"Pset_ProjectionElementShadingDevicePHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectionElementShadingDevicePHistory\"))\r\n         {\r\n            propertySetProjectionElementShadingDevicePHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectionElementShadingDevicePHistory.TiltAngle\", \"TiltAngle\");\r\n            ifcPSE.PropertyName = \"TiltAngle\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TiltAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectionElementShadingDevicePHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectionElementShadingDevicePHistory.Azimuth\", \"Azimuth\");\r\n            ifcPSE.PropertyName = \"Azimuth\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AzimuthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectionElementShadingDevicePHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectionElementShadingDevicePHistory\"))\r\n         {\r\n            propertySetProjectionElementShadingDevicePHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectionElementShadingDevicePHistory.TiltAngle\", \"TiltAngle\");\r\n            ifcPSE.PropertyName = \"TiltAngle\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TiltAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectionElementShadingDevicePHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectionElementShadingDevicePHistory.Azimuth\", \"Azimuth\");\r\n            ifcPSE.PropertyName = \"Azimuth\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AzimuthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectionElementShadingDevicePHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProjectionElementShadingDevicePHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProjectionElementTypeShadingDevice(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProjectionElementTypeShadingDevice = new PropertySetDescription();\r\n         propertySetProjectionElementTypeShadingDevice.Name = \"Pset_ProjectionElementTypeShadingDevice\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectionElementTypeShadingDevice\"))\r\n         {\r\n            propertySetProjectionElementTypeShadingDevice.EntityTypes.Add(IFCEntityType.IfcProjectionElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectionElementTypeShadingDevice.ShadingDeviceType\", \"ShadingDeviceType\");\r\n            ifcPSE.PropertyName = \"ShadingDeviceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_ProjectionElementShadingDeviceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShadingDeviceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectionElementTypeShadingDevice.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectionElementTypeShadingDevice.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectionElementTypeShadingDevice.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectionElementTypeShadingDevice.TiltRange\", \"TiltRange\");\r\n            ifcPSE.PropertyName = \"TiltRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TiltRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectionElementTypeShadingDevice.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectionElementTypeShadingDevice.AverageSolarTransmittance\", \"AverageSolarTransmittance\");\r\n            ifcPSE.PropertyName = \"AverageSolarTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AverageSolarTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectionElementTypeShadingDevice.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectionElementTypeShadingDevice.AverageVisibleTransmittance\", \"AverageVisibleTransmittance\");\r\n            ifcPSE.PropertyName = \"AverageVisibleTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AverageVisibleTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectionElementTypeShadingDevice.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectionElementTypeShadingDevice.Reflectance\", \"Reflectance\");\r\n            ifcPSE.PropertyName = \"Reflectance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReflectanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectionElementTypeShadingDevice.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectionElementTypeShadingDevice.Roughness\", \"Roughness\");\r\n            ifcPSE.PropertyName = \"Roughness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RoughnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectionElementTypeShadingDevice.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectionElementTypeShadingDevice.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectionElementTypeShadingDevice.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProjectionElementTypeShadingDevice);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProjectOrderChangeOrder(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProjectOrderChangeOrder = new PropertySetDescription();\r\n         propertySetProjectOrderChangeOrder.Name = \"Pset_ProjectOrderChangeOrder\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderChangeOrder\"))\r\n         {\r\n            propertySetProjectOrderChangeOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderChangeOrder.ObjectType = \"ChangeOrder\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderChangeOrder.ChangeDescription\", \"ChangeDescription\");\r\n            ifcPSE.PropertyName = \"ChangeDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChangeDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderChangeOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderChangeOrder.ReasonForChange\", \"ReasonForChange\");\r\n            ifcPSE.PropertyName = \"ReasonForChange\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReasonForChangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderChangeOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderChangeOrder.BudgetSource\", \"BudgetSource\");\r\n            ifcPSE.PropertyName = \"BudgetSource\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BudgetSourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderChangeOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderChangeOrder\"))\r\n         {\r\n            propertySetProjectOrderChangeOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderChangeOrder.ObjectType = \"IfcProjectOrder\";\r\n            propertySetProjectOrderChangeOrder.PredefinedType = \"CHANGEORDER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderChangeOrder.ChangeDescription\", \"ChangeDescription\");\r\n            ifcPSE.PropertyName = \"ChangeDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChangeDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderChangeOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderChangeOrder.ReasonForChange\", \"ReasonForChange\");\r\n            ifcPSE.PropertyName = \"ReasonForChange\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReasonForChangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderChangeOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderChangeOrder.BudgetSource\", \"BudgetSource\");\r\n            ifcPSE.PropertyName = \"BudgetSource\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BudgetSourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderChangeOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderChangeOrder\"))\r\n         {\r\n            propertySetProjectOrderChangeOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderChangeOrder.ObjectType = \"IfcProjectOrder\";\r\n            propertySetProjectOrderChangeOrder.PredefinedType = \"CHANGEORDER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderChangeOrder.ReasonForChange\", \"ReasonForChange\");\r\n            ifcPSE.PropertyName = \"ReasonForChange\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reason For Change\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"変更理由\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReasonForChangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderChangeOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderChangeOrder.BudgetSource\", \"BudgetSource\");\r\n            ifcPSE.PropertyName = \"BudgetSource\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Budget Source\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"予算源\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BudgetSourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderChangeOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderChangeOrder\"))\r\n         {\r\n            propertySetProjectOrderChangeOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderChangeOrder.ObjectType = \"IfcProjectOrder\";\r\n            propertySetProjectOrderChangeOrder.PredefinedType = \"CHANGEORDER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderChangeOrder.ReasonForChange\", \"ReasonForChange\");\r\n            ifcPSE.PropertyName = \"ReasonForChange\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReasonForChangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderChangeOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderChangeOrder.BudgetSource\", \"BudgetSource\");\r\n            ifcPSE.PropertyName = \"BudgetSource\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BudgetSourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderChangeOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProjectOrderChangeOrder);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProjectOrderMaintenanceWorkOrder(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProjectOrderMaintenanceWorkOrder = new PropertySetDescription();\r\n         propertySetProjectOrderMaintenanceWorkOrder.Name = \"Pset_ProjectOrderMaintenanceWorkOrder\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderMaintenanceWorkOrder\"))\r\n         {\r\n            propertySetProjectOrderMaintenanceWorkOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderMaintenanceWorkOrder.ObjectType = \"MaintenanceWorkOrder\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.ProductDescription\", \"ProductDescription\");\r\n            ifcPSE.PropertyName = \"ProductDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProductDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.ShortJobDescription\", \"ShortJobDescription\");\r\n            ifcPSE.PropertyName = \"ShortJobDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortJobDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.LongJobDescription\", \"LongJobDescription\");\r\n            ifcPSE.PropertyName = \"LongJobDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongJobDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.WorkTypeRequested\", \"WorkTypeRequested\");\r\n            ifcPSE.PropertyName = \"WorkTypeRequested\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkTypeRequestedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.ContractualType\", \"ContractualType\");\r\n            ifcPSE.PropertyName = \"ContractualType\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContractualTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.IfNotAccomplished\", \"IfNotAccomplished\");\r\n            ifcPSE.PropertyName = \"IfNotAccomplished\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IfNotAccomplishedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.MaintenaceType\", \"MaintenaceType\");\r\n            ifcPSE.PropertyName = \"MaintenaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_MaintenanceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaintenaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.FaultPriorityType\", \"FaultPriorityType\");\r\n            ifcPSE.PropertyName = \"FaultPriorityType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_PriorityType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaultPriorityTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.LocationPriorityType\", \"LocationPriorityType\");\r\n            ifcPSE.PropertyName = \"LocationPriorityType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_PriorityType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LocationPriorityTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.ScheduledFrequency\", \"ScheduledFrequency\");\r\n            ifcPSE.PropertyName = \"ScheduledFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ScheduledFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderMaintenanceWorkOrder\"))\r\n         {\r\n            propertySetProjectOrderMaintenanceWorkOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderMaintenanceWorkOrder.ObjectType = \"IfcProjectOrder\";\r\n            propertySetProjectOrderMaintenanceWorkOrder.PredefinedType = \"MAINTENANCEWORKORDER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.ProductDescription\", \"ProductDescription\");\r\n            ifcPSE.PropertyName = \"ProductDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProductDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.ShortJobDescription\", \"ShortJobDescription\");\r\n            ifcPSE.PropertyName = \"ShortJobDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortJobDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.LongJobDescription\", \"LongJobDescription\");\r\n            ifcPSE.PropertyName = \"LongJobDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongJobDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.WorkTypeRequested\", \"WorkTypeRequested\");\r\n            ifcPSE.PropertyName = \"WorkTypeRequested\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkTypeRequestedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.ContractualType\", \"ContractualType\");\r\n            ifcPSE.PropertyName = \"ContractualType\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContractualTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.IfNotAccomplished\", \"IfNotAccomplished\");\r\n            ifcPSE.PropertyName = \"IfNotAccomplished\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IfNotAccomplishedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.MaintenaceType\", \"MaintenaceType\");\r\n            ifcPSE.PropertyName = \"MaintenaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_MaintenanceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaintenaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.FaultPriorityType\", \"FaultPriorityType\");\r\n            ifcPSE.PropertyName = \"FaultPriorityType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_PriorityType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaultPriorityTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.LocationPriorityType\", \"LocationPriorityType\");\r\n            ifcPSE.PropertyName = \"LocationPriorityType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_PriorityType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LocationPriorityTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.ScheduledFrequency\", \"ScheduledFrequency\");\r\n            ifcPSE.PropertyName = \"ScheduledFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ScheduledFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderMaintenanceWorkOrder\"))\r\n         {\r\n            propertySetProjectOrderMaintenanceWorkOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderMaintenanceWorkOrder.ObjectType = \"IfcProjectOrder\";\r\n            propertySetProjectOrderMaintenanceWorkOrder.PredefinedType = \"MAINTENANCEWORKORDER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.ProductDescription\", \"ProductDescription\");\r\n            ifcPSE.PropertyName = \"ProductDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Product Description\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProductDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.WorkTypeRequested\", \"WorkTypeRequested\");\r\n            ifcPSE.PropertyName = \"WorkTypeRequested\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Work Type Requested\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkTypeRequestedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.ContractualType\", \"ContractualType\");\r\n            ifcPSE.PropertyName = \"ContractualType\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Contractual Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContractualTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.IfNotAccomplished\", \"IfNotAccomplished\");\r\n            ifcPSE.PropertyName = \"IfNotAccomplished\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"If Not Accomplished\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IfNotAccomplishedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.MaintenaceType\", \"MaintenaceType\");\r\n            ifcPSE.PropertyName = \"MaintenaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_MaintenanceType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maintenace Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaintenaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.FaultPriorityType\", \"FaultPriorityType\");\r\n            ifcPSE.PropertyName = \"FaultPriorityType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_PriorityType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fault Priority Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaultPriorityTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.LocationPriorityType\", \"LocationPriorityType\");\r\n            ifcPSE.PropertyName = \"LocationPriorityType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_PriorityType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Location Priority Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LocationPriorityTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.ScheduledFrequency\", \"ScheduledFrequency\");\r\n            ifcPSE.PropertyName = \"ScheduledFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Scheduled Frequency\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ScheduledFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderMaintenanceWorkOrder\"))\r\n         {\r\n            propertySetProjectOrderMaintenanceWorkOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderMaintenanceWorkOrder.ObjectType = \"IfcProjectOrder\";\r\n            propertySetProjectOrderMaintenanceWorkOrder.PredefinedType = \"MAINTENANCEWORKORDER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.ProductDescription\", \"ProductDescription\");\r\n            ifcPSE.PropertyName = \"ProductDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProductDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.WorkTypeRequested\", \"WorkTypeRequested\");\r\n            ifcPSE.PropertyName = \"WorkTypeRequested\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkTypeRequestedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.ContractualType\", \"ContractualType\");\r\n            ifcPSE.PropertyName = \"ContractualType\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContractualTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.IfNotAccomplished\", \"IfNotAccomplished\");\r\n            ifcPSE.PropertyName = \"IfNotAccomplished\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IfNotAccomplishedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.MaintenanceType\", \"MaintenanceType\");\r\n            ifcPSE.PropertyName = \"MaintenanceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_MaintenanceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaintenanceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.FaultPriorityType\", \"FaultPriorityType\");\r\n            ifcPSE.PropertyName = \"FaultPriorityType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_PriorityType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaultPriorityTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.LocationPriorityType\", \"LocationPriorityType\");\r\n            ifcPSE.PropertyName = \"LocationPriorityType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_PriorityType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LocationPriorityTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMaintenanceWorkOrder.ScheduledFrequency\", \"ScheduledFrequency\");\r\n            ifcPSE.PropertyName = \"ScheduledFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ScheduledFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMaintenanceWorkOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProjectOrderMaintenanceWorkOrder);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProjectOrderMoveOrder(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProjectOrderMoveOrder = new PropertySetDescription();\r\n         propertySetProjectOrderMoveOrder.Name = \"Pset_ProjectOrderMoveOrder\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderMoveOrder\"))\r\n         {\r\n            propertySetProjectOrderMoveOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderMoveOrder.ObjectType = \"MoveOrder\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMoveOrder.MoveDescription\", \"MoveDescription\");\r\n            ifcPSE.PropertyName = \"MoveDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MoveDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMoveOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMoveOrder.SpecialInstructions\", \"SpecialInstructions\");\r\n            ifcPSE.PropertyName = \"SpecialInstructions\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecialInstructionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMoveOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderMoveOrder\"))\r\n         {\r\n            propertySetProjectOrderMoveOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderMoveOrder.ObjectType = \"IfcProjectOrder\";\r\n            propertySetProjectOrderMoveOrder.PredefinedType = \"MOVEORDER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMoveOrder.MoveDescription\", \"MoveDescription\");\r\n            ifcPSE.PropertyName = \"MoveDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MoveDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMoveOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMoveOrder.SpecialInstructions\", \"SpecialInstructions\");\r\n            ifcPSE.PropertyName = \"SpecialInstructions\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecialInstructionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMoveOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderMoveOrder\"))\r\n         {\r\n            propertySetProjectOrderMoveOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderMoveOrder.ObjectType = \"IfcProjectOrder\";\r\n            propertySetProjectOrderMoveOrder.PredefinedType = \"MOVEORDER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMoveOrder.SpecialInstructions\", \"SpecialInstructions\");\r\n            ifcPSE.PropertyName = \"SpecialInstructions\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Special Instructions\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"特別指示\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecialInstructionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMoveOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderMoveOrder\"))\r\n         {\r\n            propertySetProjectOrderMoveOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderMoveOrder.ObjectType = \"IfcProjectOrder\";\r\n            propertySetProjectOrderMoveOrder.PredefinedType = \"MOVEORDER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderMoveOrder.SpecialInstructions\", \"SpecialInstructions\");\r\n            ifcPSE.PropertyName = \"SpecialInstructions\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecialInstructionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderMoveOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProjectOrderMoveOrder);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProjectOrderPurchaseOrder(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProjectOrderPurchaseOrder = new PropertySetDescription();\r\n         propertySetProjectOrderPurchaseOrder.Name = \"Pset_ProjectOrderPurchaseOrder\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderPurchaseOrder\"))\r\n         {\r\n            propertySetProjectOrderPurchaseOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderPurchaseOrder.ObjectType = \"PurchaseOrder\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderPurchaseOrder.IsFOB\", \"IsFOB\");\r\n            ifcPSE.PropertyName = \"IsFOB\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsFOBCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderPurchaseOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderPurchaseOrder.ShipMethod\", \"ShipMethod\");\r\n            ifcPSE.PropertyName = \"ShipMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShipMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderPurchaseOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderPurchaseOrder\"))\r\n         {\r\n            propertySetProjectOrderPurchaseOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderPurchaseOrder.ObjectType = \"IfcProjectOrder\";\r\n            propertySetProjectOrderPurchaseOrder.PredefinedType = \"PURCHASEORDER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderPurchaseOrder.IsFOB\", \"IsFOB\");\r\n            ifcPSE.PropertyName = \"IsFOB\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsFOBCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderPurchaseOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderPurchaseOrder.ShipMethod\", \"ShipMethod\");\r\n            ifcPSE.PropertyName = \"ShipMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShipMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderPurchaseOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderPurchaseOrder\"))\r\n         {\r\n            propertySetProjectOrderPurchaseOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderPurchaseOrder.ObjectType = \"IfcProjectOrder\";\r\n            propertySetProjectOrderPurchaseOrder.PredefinedType = \"PURCHASEORDER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderPurchaseOrder.IsFOB\", \"IsFOB\");\r\n            ifcPSE.PropertyName = \"IsFOB\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is FOB\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsFOBCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderPurchaseOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderPurchaseOrder.ShipMethod\", \"ShipMethod\");\r\n            ifcPSE.PropertyName = \"ShipMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ship Method\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShipMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderPurchaseOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderPurchaseOrder\"))\r\n         {\r\n            propertySetProjectOrderPurchaseOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderPurchaseOrder.ObjectType = \"IfcProjectOrder\";\r\n            propertySetProjectOrderPurchaseOrder.PredefinedType = \"PURCHASEORDER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderPurchaseOrder.IsFOB\", \"IsFOB\");\r\n            ifcPSE.PropertyName = \"IsFOB\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsFOBCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderPurchaseOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderPurchaseOrder.ShipMethod\", \"ShipMethod\");\r\n            ifcPSE.PropertyName = \"ShipMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShipMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderPurchaseOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProjectOrderPurchaseOrder);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProjectOrderWorkOrder(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProjectOrderWorkOrder = new PropertySetDescription();\r\n         propertySetProjectOrderWorkOrder.Name = \"Pset_ProjectOrderWorkOrder\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderWorkOrder\"))\r\n         {\r\n            propertySetProjectOrderWorkOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderWorkOrder.ObjectType = \"WorkOrder\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.ProductDescription\", \"ProductDescription\");\r\n            ifcPSE.PropertyName = \"ProductDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProductDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.ShortJobDescription\", \"ShortJobDescription\");\r\n            ifcPSE.PropertyName = \"ShortJobDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortJobDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.LongJobDescription\", \"LongJobDescription\");\r\n            ifcPSE.PropertyName = \"LongJobDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongJobDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.WorkTypeRequested\", \"WorkTypeRequested\");\r\n            ifcPSE.PropertyName = \"WorkTypeRequested\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkTypeRequestedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.ContractualType\", \"ContractualType\");\r\n            ifcPSE.PropertyName = \"ContractualType\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContractualTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.IfNotAccomplished\", \"IfNotAccomplished\");\r\n            ifcPSE.PropertyName = \"IfNotAccomplished\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IfNotAccomplishedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderWorkOrder\"))\r\n         {\r\n            propertySetProjectOrderWorkOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderWorkOrder.ObjectType = \"IfcProjectOrder\";\r\n            propertySetProjectOrderWorkOrder.PredefinedType = \"WORKORDER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.ProductDescription\", \"ProductDescription\");\r\n            ifcPSE.PropertyName = \"ProductDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProductDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.ShortJobDescription\", \"ShortJobDescription\");\r\n            ifcPSE.PropertyName = \"ShortJobDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortJobDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.LongJobDescription\", \"LongJobDescription\");\r\n            ifcPSE.PropertyName = \"LongJobDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongJobDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.WorkTypeRequested\", \"WorkTypeRequested\");\r\n            ifcPSE.PropertyName = \"WorkTypeRequested\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkTypeRequestedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.ContractualType\", \"ContractualType\");\r\n            ifcPSE.PropertyName = \"ContractualType\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContractualTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.IfNotAccomplished\", \"IfNotAccomplished\");\r\n            ifcPSE.PropertyName = \"IfNotAccomplished\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IfNotAccomplishedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderWorkOrder\"))\r\n         {\r\n            propertySetProjectOrderWorkOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderWorkOrder.ObjectType = \"IfcProjectOrder\";\r\n            propertySetProjectOrderWorkOrder.PredefinedType = \"WORKORDER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.ProductDescription\", \"ProductDescription\");\r\n            ifcPSE.PropertyName = \"ProductDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Product Description\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProductDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.WorkTypeRequested\", \"WorkTypeRequested\");\r\n            ifcPSE.PropertyName = \"WorkTypeRequested\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Work Type Requested\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkTypeRequestedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.ContractualType\", \"ContractualType\");\r\n            ifcPSE.PropertyName = \"ContractualType\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Contractual Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContractualTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.IfNotAccomplished\", \"IfNotAccomplished\");\r\n            ifcPSE.PropertyName = \"IfNotAccomplished\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"If Not Accomplished\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IfNotAccomplishedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProjectOrderWorkOrder\"))\r\n         {\r\n            propertySetProjectOrderWorkOrder.EntityTypes.Add(IFCEntityType.IfcProjectOrder);\r\n            propertySetProjectOrderWorkOrder.ObjectType = \"IfcProjectOrder\";\r\n            propertySetProjectOrderWorkOrder.PredefinedType = \"WORKORDER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.ProductDescription\", \"ProductDescription\");\r\n            ifcPSE.PropertyName = \"ProductDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProductDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.WorkTypeRequested\", \"WorkTypeRequested\");\r\n            ifcPSE.PropertyName = \"WorkTypeRequested\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkTypeRequestedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.ContractualType\", \"ContractualType\");\r\n            ifcPSE.PropertyName = \"ContractualType\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContractualTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProjectOrderWorkOrder.IfNotAccomplished\", \"IfNotAccomplished\");\r\n            ifcPSE.PropertyName = \"IfNotAccomplished\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IfNotAccomplishedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProjectOrderWorkOrder.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProjectOrderWorkOrder);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PropertyAgreement(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPropertyAgreement = new PropertySetDescription();\r\n         propertySetPropertyAgreement.Name = \"Pset_PropertyAgreement\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PropertyAgreement\"))\r\n         {\r\n            propertySetPropertyAgreement.EntityTypes.Add(IFCEntityType.IfcSpatialStructureElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.AgreementType\", \"AgreementType\");\r\n            ifcPSE.PropertyName = \"AgreementType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_PropertyAgreementType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AgreementTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.Identifier\", \"Identifier\");\r\n            ifcPSE.PropertyName = \"Identifier\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IdentifierCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.Version\", \"Version\");\r\n            ifcPSE.PropertyName = \"Version\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VersionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.VersionDate\", \"VersionDate\");\r\n            ifcPSE.PropertyName = \"VersionDate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VersionDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.PropertyName\", \"PropertyName\");\r\n            ifcPSE.PropertyName = \"PropertyName\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PropertyNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.CommencementDate\", \"CommencementDate\");\r\n            ifcPSE.PropertyName = \"CommencementDate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CommencementDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.TerminationDate\", \"TerminationDate\");\r\n            ifcPSE.PropertyName = \"TerminationDate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TerminationDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.Duration\", \"Duration\");\r\n            ifcPSE.PropertyName = \"Duration\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.Options\", \"Options\");\r\n            ifcPSE.PropertyName = \"Options\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OptionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.ConditionCommencement\", \"ConditionCommencement\");\r\n            ifcPSE.PropertyName = \"ConditionCommencement\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConditionCommencementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.Restrictions\", \"Restrictions\");\r\n            ifcPSE.PropertyName = \"Restrictions\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RestrictionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.ConditionTermination\", \"ConditionTermination\");\r\n            ifcPSE.PropertyName = \"ConditionTermination\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConditionTerminationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PropertyAgreement\"))\r\n         {\r\n            propertySetPropertyAgreement.EntityTypes.Add(IFCEntityType.IfcSpatialStructureElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.AgreementType\", \"AgreementType\");\r\n            ifcPSE.PropertyName = \"AgreementType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_PropertyAgreementType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AgreementTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.Identifier\", \"Identifier\");\r\n            ifcPSE.PropertyName = \"Identifier\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IdentifierCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.Version\", \"Version\");\r\n            ifcPSE.PropertyName = \"Version\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VersionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.VersionDate\", \"VersionDate\");\r\n            ifcPSE.PropertyName = \"VersionDate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VersionDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.PropertyName\", \"PropertyName\");\r\n            ifcPSE.PropertyName = \"PropertyName\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PropertyNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.CommencementDate\", \"CommencementDate\");\r\n            ifcPSE.PropertyName = \"CommencementDate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CommencementDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.TerminationDate\", \"TerminationDate\");\r\n            ifcPSE.PropertyName = \"TerminationDate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TerminationDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.Duration\", \"Duration\");\r\n            ifcPSE.PropertyName = \"Duration\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.Options\", \"Options\");\r\n            ifcPSE.PropertyName = \"Options\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OptionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.ConditionCommencement\", \"ConditionCommencement\");\r\n            ifcPSE.PropertyName = \"ConditionCommencement\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConditionCommencementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.Restrictions\", \"Restrictions\");\r\n            ifcPSE.PropertyName = \"Restrictions\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RestrictionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.ConditionTermination\", \"ConditionTermination\");\r\n            ifcPSE.PropertyName = \"ConditionTermination\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConditionTerminationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PropertyAgreement\"))\r\n         {\r\n            propertySetPropertyAgreement.EntityTypes.Add(IFCEntityType.IfcSpatialStructureElement);\r\n            propertySetPropertyAgreement.ObjectType = \"IfcSpatialStructureElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.AgreementType\", \"AgreementType\");\r\n            ifcPSE.PropertyName = \"AgreementType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_PropertyAgreementType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Agreement Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AgreementTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.Identifier\", \"Identifier\");\r\n            ifcPSE.PropertyName = \"Identifier\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Identifier\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IdentifierCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.Version\", \"Version\");\r\n            ifcPSE.PropertyName = \"Version\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Version\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VersionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.VersionDate\", \"VersionDate\");\r\n            ifcPSE.PropertyName = \"VersionDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Version Date\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VersionDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.PropertyName\", \"PropertyName\");\r\n            ifcPSE.PropertyName = \"PropertyName\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Property Name\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PropertyNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.CommencementDate\", \"CommencementDate\");\r\n            ifcPSE.PropertyName = \"CommencementDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Commencement Date\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CommencementDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.TerminationDate\", \"TerminationDate\");\r\n            ifcPSE.PropertyName = \"TerminationDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Termination Date\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TerminationDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.Duration\", \"Duration\");\r\n            ifcPSE.PropertyName = \"Duration\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Duration\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.Options\", \"Options\");\r\n            ifcPSE.PropertyName = \"Options\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Options\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OptionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.ConditionCommencement\", \"ConditionCommencement\");\r\n            ifcPSE.PropertyName = \"ConditionCommencement\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Condition Commencement\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConditionCommencementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.Restrictions\", \"Restrictions\");\r\n            ifcPSE.PropertyName = \"Restrictions\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Restrictions\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RestrictionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.ConditionTermination\", \"ConditionTermination\");\r\n            ifcPSE.PropertyName = \"ConditionTermination\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Condition Termination\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConditionTerminationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PropertyAgreement\"))\r\n         {\r\n            propertySetPropertyAgreement.EntityTypes.Add(IFCEntityType.IfcSpatialStructureElement);\r\n            propertySetPropertyAgreement.EntityTypes.Add(IFCEntityType.IfcSpatialStructureElementType);\r\n            propertySetPropertyAgreement.ObjectType = \"IfcSpatialStructureElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.AgreementType\", \"AgreementType\");\r\n            ifcPSE.PropertyName = \"AgreementType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_PropertyAgreementType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AgreementTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.TrackingIdentifier\", \"TrackingIdentifier\");\r\n            ifcPSE.PropertyName = \"TrackingIdentifier\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrackingIdentifierCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.AgreementVersion\", \"AgreementVersion\");\r\n            ifcPSE.PropertyName = \"AgreementVersion\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AgreementVersionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.AgreementDate\", \"AgreementDate\");\r\n            ifcPSE.PropertyName = \"AgreementDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AgreementDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.PropertyName\", \"PropertyName\");\r\n            ifcPSE.PropertyName = \"PropertyName\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PropertyNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.CommencementDate\", \"CommencementDate\");\r\n            ifcPSE.PropertyName = \"CommencementDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CommencementDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.TerminationDate\", \"TerminationDate\");\r\n            ifcPSE.PropertyName = \"TerminationDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TerminationDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.Duration\", \"Duration\");\r\n            ifcPSE.PropertyName = \"Duration\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.Options\", \"Options\");\r\n            ifcPSE.PropertyName = \"Options\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OptionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.ConditionCommencement\", \"ConditionCommencement\");\r\n            ifcPSE.PropertyName = \"ConditionCommencement\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConditionCommencementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.Restrictions\", \"Restrictions\");\r\n            ifcPSE.PropertyName = \"Restrictions\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RestrictionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PropertyAgreement.ConditionTermination\", \"ConditionTermination\");\r\n            ifcPSE.PropertyName = \"ConditionTermination\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConditionTerminationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPropertyAgreement.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPropertyAgreement);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceBreakerUnitI2TCurve(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceBreakerUnitI2TCurve = new PropertySetDescription();\r\n         propertySetProtectiveDeviceBreakerUnitI2TCurve.Name = \"Pset_ProtectiveDeviceBreakerUnitI2TCurve\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceBreakerUnitI2TCurve\"))\r\n         {\r\n            propertySetProtectiveDeviceBreakerUnitI2TCurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceBreakerUnitI2TCurve.ObjectType = \"IfcProtectiveDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitI2TCurve.VoltageLevel\", \"VoltageLevel\");\r\n            ifcPSE.PropertyName = \"VoltageLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_VoltageLevels);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Voltage Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電圧レベル\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전압 레벨\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitI2TCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitI2TCurve.NominalCurrent\", \"NominalCurrent\");\r\n            ifcPSE.PropertyName = \"NominalCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Current\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"定格電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"정격전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitI2TCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitI2TCurve.BreakerUnitCurve\", \"BreakerUnitCurve\");\r\n            ifcPSE.PropertyName = \"BreakerUnitCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Breaker Unit Curve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"遮断機曲線\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"차단기 곡선\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BreakerUnitCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitI2TCurve.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceBreakerUnitI2TCurve\"))\r\n         {\r\n            propertySetProtectiveDeviceBreakerUnitI2TCurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceBreakerUnitI2TCurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceBreakerUnitI2TCurve.ObjectType = \"IfcProtectiveDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitI2TCurve.VoltageLevel\", \"VoltageLevel\");\r\n            ifcPSE.PropertyName = \"VoltageLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_VoltageLevels);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitI2TCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitI2TCurve.NominalCurrent\", \"NominalCurrent\");\r\n            ifcPSE.PropertyName = \"NominalCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitI2TCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitI2TCurve.BreakerUnitCurve\", \"BreakerUnitCurve\");\r\n            ifcPSE.PropertyName = \"BreakerUnitCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BreakerUnitCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitI2TCurve.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceBreakerUnitI2TCurve);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceBreakerUnitI2TFuseCurve(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceBreakerUnitI2TFuseCurve = new PropertySetDescription();\r\n         propertySetProtectiveDeviceBreakerUnitI2TFuseCurve.Name = \"Pset_ProtectiveDeviceBreakerUnitI2TFuseCurve\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceBreakerUnitI2TFuseCurve\"))\r\n         {\r\n            propertySetProtectiveDeviceBreakerUnitI2TFuseCurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceBreakerUnitI2TFuseCurve.ObjectType = \"IfcProtectiveDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitI2TFuseCurve.VoltageLevel\", \"VoltageLevel\");\r\n            ifcPSE.PropertyName = \"VoltageLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_VoltageLevels);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Voltage Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電圧レベル\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전압레벨\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitI2TFuseCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitI2TFuseCurve.BreakerUnitFuseMeltingCurve\", \"BreakerUnitFuseMeltingCurve\");\r\n            ifcPSE.PropertyName = \"BreakerUnitFuseMeltingCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Breaker Unit Fuse Melting Curve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"フューズ遮断機融解曲線\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"퓨즈 차단기 융해 곡선\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BreakerUnitFuseMeltingCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitI2TFuseCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitI2TFuseCurve.BreakerUnitFuseBreakingingCurve\", \"BreakerUnitFuseBreakingingCurve\");\r\n            ifcPSE.PropertyName = \"BreakerUnitFuseBreakingingCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Breaker Unit Fuse Breakinging Curve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"フューズ遮断機融解曲線\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"퓨즈 차단기 융해 곡선\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BreakerUnitFuseBreakingingCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitI2TFuseCurve.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceBreakerUnitI2TFuseCurve\"))\r\n         {\r\n            propertySetProtectiveDeviceBreakerUnitI2TFuseCurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceBreakerUnitI2TFuseCurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceBreakerUnitI2TFuseCurve.ObjectType = \"IfcProtectiveDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitI2TFuseCurve.VoltageLevel\", \"VoltageLevel\");\r\n            ifcPSE.PropertyName = \"VoltageLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_VoltageLevels);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitI2TFuseCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitI2TFuseCurve.BreakerUnitFuseMeltingCurve\", \"BreakerUnitFuseMeltingCurve\");\r\n            ifcPSE.PropertyName = \"BreakerUnitFuseMeltingCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BreakerUnitFuseMeltingCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitI2TFuseCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitI2TFuseCurve.BreakerUnitFuseBreakingingCurve\", \"BreakerUnitFuseBreakingingCurve\");\r\n            ifcPSE.PropertyName = \"BreakerUnitFuseBreakingingCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BreakerUnitFuseBreakingingCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitI2TFuseCurve.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceBreakerUnitI2TFuseCurve);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceBreakerUnitIPICurve(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceBreakerUnitIPICurve = new PropertySetDescription();\r\n         propertySetProtectiveDeviceBreakerUnitIPICurve.Name = \"Pset_ProtectiveDeviceBreakerUnitIPICurve\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceBreakerUnitIPICurve\"))\r\n         {\r\n            propertySetProtectiveDeviceBreakerUnitIPICurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceBreakerUnitIPICurve.ObjectType = \"IfcProtectiveDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitIPICurve.VoltageLevel\", \"VoltageLevel\");\r\n            ifcPSE.PropertyName = \"VoltageLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_VoltageLevels);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Voltage Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電圧レベル\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전압 레벨\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitIPICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitIPICurve.NominalCurrent\", \"NominalCurrent\");\r\n            ifcPSE.PropertyName = \"NominalCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Current\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"定格電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"정격전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitIPICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitIPICurve.BreakerUnitIPICurve\", \"BreakerUnitIPICurve\");\r\n            ifcPSE.PropertyName = \"BreakerUnitIPICurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Breaker Unit IPICurve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"遮断機曲線\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"차단기 곡선\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BreakerUnitIPICurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitIPICurve.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceBreakerUnitIPICurve\"))\r\n         {\r\n            propertySetProtectiveDeviceBreakerUnitIPICurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceBreakerUnitIPICurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceBreakerUnitIPICurve.ObjectType = \"IfcProtectiveDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitIPICurve.VoltageLevel\", \"VoltageLevel\");\r\n            ifcPSE.PropertyName = \"VoltageLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_VoltageLevels);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitIPICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitIPICurve.NominalCurrent\", \"NominalCurrent\");\r\n            ifcPSE.PropertyName = \"NominalCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitIPICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitIPICurve.BreakerUnitIPICurve\", \"BreakerUnitIPICurve\");\r\n            ifcPSE.PropertyName = \"BreakerUnitIPICurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BreakerUnitIPICurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitIPICurve.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceBreakerUnitIPICurve);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceBreakerUnitTypeMCB(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceBreakerUnitTypeMCB = new PropertySetDescription();\r\n         propertySetProtectiveDeviceBreakerUnitTypeMCB.Name = \"Pset_ProtectiveDeviceBreakerUnitTypeMCB\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceBreakerUnitTypeMCB\"))\r\n         {\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.ObjectType = \"IfcProtectiveDevice\";\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.PredefinedType = \"CIRCUITBREAKER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMCB.PowerLoss\", \"PowerLoss\");\r\n            ifcPSE.PropertyName = \"PowerLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Power Loss\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電力損失\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전력 손실\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMCB.VoltageLevel\", \"VoltageLevel\");\r\n            ifcPSE.PropertyName = \"VoltageLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_VoltageLevels);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Voltage Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電圧レベル\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전압 레벨\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMCB.NominalCurrents\", \"NominalCurrents\");\r\n            ifcPSE.PropertyName = \"NominalCurrents\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Currents\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"定格電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"정격 전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMCB.ICU60947\", \"ICU60947\");\r\n            ifcPSE.PropertyName = \"ICU60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"ICU60947\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"定格限界短絡遮断容量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"정격 한계 단락 차단 용량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICU60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMCB.ICS60947\", \"ICS60947\");\r\n            ifcPSE.PropertyName = \"ICS60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"ICS60947\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"定格使用短絡遮断容量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"정격 사용 단락 차단 용량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICS60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMCB.ICN60898\", \"ICN60898\");\r\n            ifcPSE.PropertyName = \"ICN60898\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"ICN60898\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ICN60898\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"ICN60898\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICN60898Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMCB.ICS60898\", \"ICS60898\");\r\n            ifcPSE.PropertyName = \"ICS60898\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"ICS60898\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ICS60898\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"ICS60898\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICS60898Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceBreakerUnitTypeMCB\"))\r\n         {\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.ObjectType = \"IfcProtectiveDevice\";\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.PredefinedType = \"CIRCUITBREAKER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMCB.PowerLoss\", \"PowerLoss\");\r\n            ifcPSE.PropertyName = \"PowerLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMCB.VoltageLevel\", \"VoltageLevel\");\r\n            ifcPSE.PropertyName = \"VoltageLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_VoltageLevels);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMCB.NominalCurrents\", \"NominalCurrents\");\r\n            ifcPSE.PropertyName = \"NominalCurrents\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMCB.ICU60947\", \"ICU60947\");\r\n            ifcPSE.PropertyName = \"ICU60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICU60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMCB.ICS60947\", \"ICS60947\");\r\n            ifcPSE.PropertyName = \"ICS60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICS60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMCB.ICN60898\", \"ICN60898\");\r\n            ifcPSE.PropertyName = \"ICN60898\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICN60898Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMCB.ICS60898\", \"ICS60898\");\r\n            ifcPSE.PropertyName = \"ICS60898\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICS60898Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMCB.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceBreakerUnitTypeMCB);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceBreakerUnitTypeMotorProtection(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceBreakerUnitTypeMotorProtection = new PropertySetDescription();\r\n         propertySetProtectiveDeviceBreakerUnitTypeMotorProtection.Name = \"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection\"))\r\n         {\r\n            propertySetProtectiveDeviceBreakerUnitTypeMotorProtection.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceBreakerUnitTypeMotorProtection.ObjectType = \"IfcProtectiveDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection.PerformanceClasses\", \"PerformanceClasses\");\r\n            ifcPSE.PropertyName = \"PerformanceClasses\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Performance Classes\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"能力クラス\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"능력클래스\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerformanceClassesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMotorProtection.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection.VoltageLevel\", \"VoltageLevel\");\r\n            ifcPSE.PropertyName = \"VoltageLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_VoltageLevels);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Voltage Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電圧レベル\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전압레벨\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMotorProtection.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICU60947\", \"ICU60947\");\r\n            ifcPSE.PropertyName = \"ICU60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"ICU60947\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ICU60947\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"ICU60947\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICU60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMotorProtection.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICS60947\", \"ICS60947\");\r\n            ifcPSE.PropertyName = \"ICS60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"ICS60947\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ICS60947\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"ICS60947\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICS60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMotorProtection.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICW60947\", \"ICW60947\");\r\n            ifcPSE.PropertyName = \"ICW60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"ICW60947\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ICW60947\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"ICW60947\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICW60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMotorProtection.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICM60947\", \"ICM60947\");\r\n            ifcPSE.PropertyName = \"ICM60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"ICM60947\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ICM60947\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"ICM60947\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICM60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMotorProtection.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection\"))\r\n         {\r\n            propertySetProtectiveDeviceBreakerUnitTypeMotorProtection.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceBreakerUnitTypeMotorProtection.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceBreakerUnitTypeMotorProtection.ObjectType = \"IfcProtectiveDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection.PerformanceClasses\", \"PerformanceClasses\");\r\n            ifcPSE.PropertyName = \"PerformanceClasses\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerformanceClassesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMotorProtection.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection.VoltageLevel\", \"VoltageLevel\");\r\n            ifcPSE.PropertyName = \"VoltageLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_VoltageLevels);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMotorProtection.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICU60947\", \"ICU60947\");\r\n            ifcPSE.PropertyName = \"ICU60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICU60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMotorProtection.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICS60947\", \"ICS60947\");\r\n            ifcPSE.PropertyName = \"ICS60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICS60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMotorProtection.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICW60947\", \"ICW60947\");\r\n            ifcPSE.PropertyName = \"ICW60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICW60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMotorProtection.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICM60947\", \"ICM60947\");\r\n            ifcPSE.PropertyName = \"ICM60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICM60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceBreakerUnitTypeMotorProtection.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceBreakerUnitTypeMotorProtection);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceOccurrence = new PropertySetDescription();\r\n         propertySetProtectiveDeviceOccurrence.Name = \"Pset_ProtectiveDeviceOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceOccurrence\"))\r\n         {\r\n            propertySetProtectiveDeviceOccurrence.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceOccurrence.ObjectType = \"IfcProtectiveDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.PoleUsage\", \"PoleUsage\");\r\n            ifcPSE.PropertyName = \"PoleUsage\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_PoleUsage);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pole Usage\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PoleUsageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.LongTimeFunction\", \"LongTimeFunction\");\r\n            ifcPSE.PropertyName = \"LongTimeFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Long Time Function\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongTimeFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.ShortTimeFunction\", \"ShortTimeFunction\");\r\n            ifcPSE.PropertyName = \"ShortTimeFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Time Function\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortTimeFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.ShortTimei2tFunction\", \"ShortTimei2tFunction\");\r\n            ifcPSE.PropertyName = \"ShortTimei2tFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Timei2t Function\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortTimei2tFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.GroundFaultFunction\", \"GroundFaultFunction\");\r\n            ifcPSE.PropertyName = \"GroundFaultFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ground Fault Function\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GroundFaultFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.GroundFaulti2tFunction\", \"GroundFaulti2tFunction\");\r\n            ifcPSE.PropertyName = \"GroundFaulti2tFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ground Faulti2t Function\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GroundFaulti2tFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.LongTimeCurrentSetValue\", \"LongTimeCurrentSetValue\");\r\n            ifcPSE.PropertyName = \"LongTimeCurrentSetValue\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Long Time Current Set Value\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongTimeCurrentSetValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.ShortTimeCurrentSetValue\", \"ShortTimeCurrentSetValue\");\r\n            ifcPSE.PropertyName = \"ShortTimeCurrentSetValue\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Time Current Set Value\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortTimeCurrentSetValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.InstantaneousCurrentSetValue\", \"InstantaneousCurrentSetValue\");\r\n            ifcPSE.PropertyName = \"InstantaneousCurrentSetValue\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Instantaneous Current Set Value\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstantaneousCurrentSetValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.GroundFaultCurrentSetValue\", \"GroundFaultCurrentSetValue\");\r\n            ifcPSE.PropertyName = \"GroundFaultCurrentSetValue\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ground Fault Current Set Value\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GroundFaultCurrentSetValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.LongTimeDelay\", \"LongTimeDelay\");\r\n            ifcPSE.PropertyName = \"LongTimeDelay\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Long Time Delay\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongTimeDelayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.ShortTimeTrippingTime\", \"ShortTimeTrippingTime\");\r\n            ifcPSE.PropertyName = \"ShortTimeTrippingTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Time Tripping Time\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortTimeTrippingTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.InstantaneousTrippingTime\", \"InstantaneousTrippingTime\");\r\n            ifcPSE.PropertyName = \"InstantaneousTrippingTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Instantaneous Tripping Time\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstantaneousTrippingTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.GroundFaultTrippingTime\", \"GroundFaultTrippingTime\");\r\n            ifcPSE.PropertyName = \"GroundFaultTrippingTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ground Fault Tripping Time\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GroundFaultTrippingTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceOccurrence\"))\r\n         {\r\n            propertySetProtectiveDeviceOccurrence.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceOccurrence.ObjectType = \"IfcProtectiveDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.PoleUsage\", \"PoleUsage\");\r\n            ifcPSE.PropertyName = \"PoleUsage\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_PoleUsage);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PoleUsageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.LongTimeFunction\", \"LongTimeFunction\");\r\n            ifcPSE.PropertyName = \"LongTimeFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongTimeFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.ShortTimeFunction\", \"ShortTimeFunction\");\r\n            ifcPSE.PropertyName = \"ShortTimeFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortTimeFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.ShortTimei2tFunction\", \"ShortTimei2tFunction\");\r\n            ifcPSE.PropertyName = \"ShortTimei2tFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortTimei2tFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.GroundFaultFunction\", \"GroundFaultFunction\");\r\n            ifcPSE.PropertyName = \"GroundFaultFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GroundFaultFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.GroundFaulti2tFunction\", \"GroundFaulti2tFunction\");\r\n            ifcPSE.PropertyName = \"GroundFaulti2tFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GroundFaulti2tFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.LongTimeCurrentSetValue\", \"LongTimeCurrentSetValue\");\r\n            ifcPSE.PropertyName = \"LongTimeCurrentSetValue\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongTimeCurrentSetValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.ShortTimeCurrentSetValue\", \"ShortTimeCurrentSetValue\");\r\n            ifcPSE.PropertyName = \"ShortTimeCurrentSetValue\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortTimeCurrentSetValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.InstantaneousCurrentSetValue\", \"InstantaneousCurrentSetValue\");\r\n            ifcPSE.PropertyName = \"InstantaneousCurrentSetValue\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstantaneousCurrentSetValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.GroundFaultCurrentSetValue\", \"GroundFaultCurrentSetValue\");\r\n            ifcPSE.PropertyName = \"GroundFaultCurrentSetValue\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GroundFaultCurrentSetValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.LongTimeDelay\", \"LongTimeDelay\");\r\n            ifcPSE.PropertyName = \"LongTimeDelay\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongTimeDelayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.ShortTimeTrippingTime\", \"ShortTimeTrippingTime\");\r\n            ifcPSE.PropertyName = \"ShortTimeTrippingTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortTimeTrippingTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.InstantaneousTrippingTime\", \"InstantaneousTrippingTime\");\r\n            ifcPSE.PropertyName = \"InstantaneousTrippingTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstantaneousTrippingTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceOccurrence.GroundFaultTrippingTime\", \"GroundFaultTrippingTime\");\r\n            ifcPSE.PropertyName = \"GroundFaultTrippingTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GroundFaultTrippingTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTrippingCurve(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTrippingCurve = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTrippingCurve.Name = \"Pset_ProtectiveDeviceTrippingCurve\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingCurve\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingCurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTrippingCurve.ObjectType = \"IfcProtectiveDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingCurve.TrippingCurveType\", \"TrippingCurveType\");\r\n            ifcPSE.PropertyName = \"TrippingCurveType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_TrippingCurveType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tripping Curve Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"動作特性曲線のタイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"동작 특성 곡선의 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrippingCurveTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingCurve.TrippingCurve\", \"TrippingCurve\");\r\n            ifcPSE.PropertyName = \"TrippingCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tripping Curve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"動作特性曲線\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"동작 특성 곡선\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrippingCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingCurve.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingCurve\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingCurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTrippingCurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTrippingCurve.ObjectType = \"IfcProtectiveDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingCurve.TrippingCurveType\", \"TrippingCurveType\");\r\n            ifcPSE.PropertyName = \"TrippingCurveType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TrippingCurveType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrippingCurveTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingCurve.TrippingCurve\", \"TrippingCurve\");\r\n            ifcPSE.PropertyName = \"TrippingCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrippingCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingCurve.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTrippingCurve);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTrippingFunctionGCurve(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTrippingFunctionGCurve = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTrippingFunctionGCurve.Name = \"Pset_ProtectiveDeviceTrippingFunctionGCurve\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingFunctionGCurve\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.IsSelectable\", \"IsSelectable\");\r\n            ifcPSE.PropertyName = \"IsSelectable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Selectable\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"切り替え\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전환\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSelectableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.NominalCurrentAdjusted\", \"NominalCurrentAdjusted\");\r\n            ifcPSE.PropertyName = \"NominalCurrentAdjusted\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Current Adjusted\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"定格調整電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"정격전류조정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentAdjustedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.ExternalAdjusted\", \"ExternalAdjusted\");\r\n            ifcPSE.PropertyName = \"ExternalAdjusted\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"External Adjusted\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部調整\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"외부조정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExternalAdjustedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrent\", \"ReleaseCurrent\");\r\n            ifcPSE.PropertyName = \"ReleaseCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Release Current\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"放出電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"방출전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTime\", \"ReleaseTime\");\r\n            ifcPSE.PropertyName = \"ReleaseTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Release Time\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"放出時間\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"방출 시간\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.CurrentTolerance1\", \"CurrentTolerance1\");\r\n            ifcPSE.PropertyName = \"CurrentTolerance1\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Current Tolerance1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容電流1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용 전류1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentTolerance1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.CurrentToleranceLimit1\", \"CurrentToleranceLimit1\");\r\n            ifcPSE.PropertyName = \"CurrentToleranceLimit1\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Current Tolerance Limit1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容電流限界1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용전류한계1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentToleranceLimit1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.CurrentTolerance2\", \"CurrentTolerance2\");\r\n            ifcPSE.PropertyName = \"CurrentTolerance2\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Current Tolerance2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容電流2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용전류 2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentTolerance2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.IsCurrentTolerancePositiveOnly\", \"IsCurrentTolerancePositiveOnly\");\r\n            ifcPSE.PropertyName = \"IsCurrentTolerancePositiveOnly\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Current Tolerance Positive Only\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電流許容値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전류 허용 값\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsCurrentTolerancePositiveOnlyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.TimeTolerance1\", \"TimeTolerance1\");\r\n            ifcPSE.PropertyName = \"TimeTolerance1\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Time Tolerance1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容時間1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용 시간1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeTolerance1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.TimeToleranceLimit1\", \"TimeToleranceLimit1\");\r\n            ifcPSE.PropertyName = \"TimeToleranceLimit1\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Time Tolerance Limit1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容限界時間1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용 한계시간1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeToleranceLimit1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.TimeTolerance2\", \"TimeTolerance2\");\r\n            ifcPSE.PropertyName = \"TimeTolerance2\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Time Tolerance2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容時間2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용시간 2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeTolerance2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.IsTimeTolerancePositiveOnly\", \"IsTimeTolerancePositiveOnly\");\r\n            ifcPSE.PropertyName = \"IsTimeTolerancePositiveOnly\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Time Tolerance Positive Only\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"時間許容値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"시간 허용치\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsTimeTolerancePositiveOnlyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrentI2tStart\", \"ReleaseCurrentI2tStart\");\r\n            ifcPSE.PropertyName = \"ReleaseCurrentI2tStart\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Release Current I2t Start\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"I2tの開始放流電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"I2t 시작 방류 전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseCurrentI2tStartCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTimeI2tStart\", \"ReleaseTimeI2tStart\");\r\n            ifcPSE.PropertyName = \"ReleaseTimeI2tStart\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Release Time I2t Start\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"I2tの開始放流時間\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"I2t 시작 방류 시간\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseTimeI2tStartCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrentI2tEnd\", \"ReleaseCurrentI2tEnd\");\r\n            ifcPSE.PropertyName = \"ReleaseCurrentI2tEnd\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Release Current I2t End\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"I2tの終了放流電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"I2t 종료 방류 전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseCurrentI2tEndCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTimeI2tEnd\", \"ReleaseTimeI2tEnd\");\r\n            ifcPSE.PropertyName = \"ReleaseTimeI2tEnd\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Release Time I2t End\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"I2tの終了放流時間\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"I2t 종료 방류 시간\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseTimeI2tEndCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingFunctionGCurve\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnitType);\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.IsSelectable\", \"IsSelectable\");\r\n            ifcPSE.PropertyName = \"IsSelectable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSelectableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.NominalCurrentAdjusted\", \"NominalCurrentAdjusted\");\r\n            ifcPSE.PropertyName = \"NominalCurrentAdjusted\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentAdjustedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.ExternalAdjusted\", \"ExternalAdjusted\");\r\n            ifcPSE.PropertyName = \"ExternalAdjusted\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExternalAdjustedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrent\", \"ReleaseCurrent\");\r\n            ifcPSE.PropertyName = \"ReleaseCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTime\", \"ReleaseTime\");\r\n            ifcPSE.PropertyName = \"ReleaseTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.CurrentTolerance1\", \"CurrentTolerance1\");\r\n            ifcPSE.PropertyName = \"CurrentTolerance1\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentTolerance1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.CurrentToleranceLimit1\", \"CurrentToleranceLimit1\");\r\n            ifcPSE.PropertyName = \"CurrentToleranceLimit1\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentToleranceLimit1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.CurrentTolerance2\", \"CurrentTolerance2\");\r\n            ifcPSE.PropertyName = \"CurrentTolerance2\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentTolerance2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.IsCurrentTolerancePositiveOnly\", \"IsCurrentTolerancePositiveOnly\");\r\n            ifcPSE.PropertyName = \"IsCurrentTolerancePositiveOnly\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsCurrentTolerancePositiveOnlyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.TimeTolerance1\", \"TimeTolerance1\");\r\n            ifcPSE.PropertyName = \"TimeTolerance1\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeTolerance1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.TimeToleranceLimit1\", \"TimeToleranceLimit1\");\r\n            ifcPSE.PropertyName = \"TimeToleranceLimit1\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeToleranceLimit1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.TimeTolerance2\", \"TimeTolerance2\");\r\n            ifcPSE.PropertyName = \"TimeTolerance2\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeTolerance2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.IsTimeTolerancePositiveOnly\", \"IsTimeTolerancePositiveOnly\");\r\n            ifcPSE.PropertyName = \"IsTimeTolerancePositiveOnly\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsTimeTolerancePositiveOnlyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrentI2tStart\", \"ReleaseCurrentI2tStart\");\r\n            ifcPSE.PropertyName = \"ReleaseCurrentI2tStart\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseCurrentI2tStartCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTimeI2tStart\", \"ReleaseTimeI2tStart\");\r\n            ifcPSE.PropertyName = \"ReleaseTimeI2tStart\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseTimeI2tStartCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrentI2tEnd\", \"ReleaseCurrentI2tEnd\");\r\n            ifcPSE.PropertyName = \"ReleaseCurrentI2tEnd\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseCurrentI2tEndCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTimeI2tEnd\", \"ReleaseTimeI2tEnd\");\r\n            ifcPSE.PropertyName = \"ReleaseTimeI2tEnd\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseTimeI2tEndCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionGCurve.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTrippingFunctionGCurve);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTrippingFunctionICurve(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTrippingFunctionICurve = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTrippingFunctionICurve.Name = \"Pset_ProtectiveDeviceTrippingFunctionICurve\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingFunctionICurve\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.IsSelectable\", \"IsSelectable\");\r\n            ifcPSE.PropertyName = \"IsSelectable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Selectable\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"切り替え\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전환\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSelectableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.NominalCurrentAdjusted\", \"NominalCurrentAdjusted\");\r\n            ifcPSE.PropertyName = \"NominalCurrentAdjusted\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Current Adjusted\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"定格調整電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"정격전류조정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentAdjustedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.ReleaseCurrent\", \"ReleaseCurrent\");\r\n            ifcPSE.PropertyName = \"ReleaseCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Release Current\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"放出電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"방출전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.ReleaseTime\", \"ReleaseTime\");\r\n            ifcPSE.PropertyName = \"ReleaseTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Release Time\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"放出時間\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"방출 시간\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.CurrentTolerance1\", \"CurrentTolerance1\");\r\n            ifcPSE.PropertyName = \"CurrentTolerance1\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Current Tolerance1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容電流1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용 전류1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentTolerance1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.CurrentToleranceLimit1\", \"CurrentToleranceLimit1\");\r\n            ifcPSE.PropertyName = \"CurrentToleranceLimit1\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Current Tolerance Limit1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容電流限界1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용전류한계1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentToleranceLimit1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.CurrentTolerance2\", \"CurrentTolerance2\");\r\n            ifcPSE.PropertyName = \"CurrentTolerance2\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Current Tolerance2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容電流2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용전류 2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentTolerance2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.IsCurrentTolerancePositiveOnly\", \"IsCurrentTolerancePositiveOnly\");\r\n            ifcPSE.PropertyName = \"IsCurrentTolerancePositiveOnly\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Current Tolerance Positive Only\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電流許容値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전류 허용 값\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsCurrentTolerancePositiveOnlyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.TimeTolerance1\", \"TimeTolerance1\");\r\n            ifcPSE.PropertyName = \"TimeTolerance1\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Time Tolerance1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容時間1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용 시간1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeTolerance1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.TimeToleranceLimit1\", \"TimeToleranceLimit1\");\r\n            ifcPSE.PropertyName = \"TimeToleranceLimit1\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Time Tolerance Limit1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容限界時間1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용 한계시간1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeToleranceLimit1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.TimeTolerance2\", \"TimeTolerance2\");\r\n            ifcPSE.PropertyName = \"TimeTolerance2\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Time Tolerance2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容時間2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용시간 2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeTolerance2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.IsTimeTolerancePositiveOnly\", \"IsTimeTolerancePositiveOnly\");\r\n            ifcPSE.PropertyName = \"IsTimeTolerancePositiveOnly\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Time Tolerance Positive Only\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"時間許容値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"시간 허용치\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsTimeTolerancePositiveOnlyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.MaxAdjustmentX_ICS\", \"MaxAdjustmentX_ICS\");\r\n            ifcPSE.PropertyName = \"MaxAdjustmentX_ICS\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Max Adjustment X_ ICS\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最大調整X_ICS\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최대 조정 X_ICS\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaxAdjustmentX_ICSCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.IsOffWhenSFunctionOn\", \"IsOffWhenSFunctionOn\");\r\n            ifcPSE.PropertyName = \"IsOffWhenSFunctionOn\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Off When SFunction On\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsOffWhenSFunctionOnCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingFunctionICurve\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnitType);\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.IsSelectable\", \"IsSelectable\");\r\n            ifcPSE.PropertyName = \"IsSelectable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSelectableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.NominalCurrentAdjusted\", \"NominalCurrentAdjusted\");\r\n            ifcPSE.PropertyName = \"NominalCurrentAdjusted\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentAdjustedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.ReleaseCurrent\", \"ReleaseCurrent\");\r\n            ifcPSE.PropertyName = \"ReleaseCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.ReleaseTime\", \"ReleaseTime\");\r\n            ifcPSE.PropertyName = \"ReleaseTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.CurrentTolerance1\", \"CurrentTolerance1\");\r\n            ifcPSE.PropertyName = \"CurrentTolerance1\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentTolerance1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.CurrentToleranceLimit1\", \"CurrentToleranceLimit1\");\r\n            ifcPSE.PropertyName = \"CurrentToleranceLimit1\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentToleranceLimit1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.CurrentTolerance2\", \"CurrentTolerance2\");\r\n            ifcPSE.PropertyName = \"CurrentTolerance2\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentTolerance2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.IsCurrentTolerancePositiveOnly\", \"IsCurrentTolerancePositiveOnly\");\r\n            ifcPSE.PropertyName = \"IsCurrentTolerancePositiveOnly\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsCurrentTolerancePositiveOnlyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.TimeTolerance1\", \"TimeTolerance1\");\r\n            ifcPSE.PropertyName = \"TimeTolerance1\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeTolerance1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.TimeToleranceLimit1\", \"TimeToleranceLimit1\");\r\n            ifcPSE.PropertyName = \"TimeToleranceLimit1\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeToleranceLimit1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.TimeTolerance2\", \"TimeTolerance2\");\r\n            ifcPSE.PropertyName = \"TimeTolerance2\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeTolerance2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.IsTimeTolerancePositiveOnly\", \"IsTimeTolerancePositiveOnly\");\r\n            ifcPSE.PropertyName = \"IsTimeTolerancePositiveOnly\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsTimeTolerancePositiveOnlyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.MaxAdjustmentX_ICS\", \"MaxAdjustmentX_ICS\");\r\n            ifcPSE.PropertyName = \"MaxAdjustmentX_ICS\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaxAdjustmentX_ICSCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionICurve.IsOffWhenSFunctionOn\", \"IsOffWhenSFunctionOn\");\r\n            ifcPSE.PropertyName = \"IsOffWhenSFunctionOn\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsOffWhenSFunctionOnCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionICurve.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTrippingFunctionICurve);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTrippingFunctionLCurve(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTrippingFunctionLCurve = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTrippingFunctionLCurve.Name = \"Pset_ProtectiveDeviceTrippingFunctionLCurve\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingFunctionLCurve\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionLCurve.IsSelectable\", \"IsSelectable\");\r\n            ifcPSE.PropertyName = \"IsSelectable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Selectable\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"切り替え\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전환\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSelectableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionLCurve.UpperCurrent1\", \"UpperCurrent1\");\r\n            ifcPSE.PropertyName = \"UpperCurrent1\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Upper Current1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"上電流1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"상전류1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpperCurrent1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionLCurve.UpperCurrent2\", \"UpperCurrent2\");\r\n            ifcPSE.PropertyName = \"UpperCurrent2\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Upper Current2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"上電流2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"상전류2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpperCurrent2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionLCurve.UpperTime1\", \"UpperTime1\");\r\n            ifcPSE.PropertyName = \"UpperTime1\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Upper Time1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"上時間1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"상시간1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpperTime1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionLCurve.UpperTime2\", \"UpperTime2\");\r\n            ifcPSE.PropertyName = \"UpperTime2\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Upper Time2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"上時間2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"상시간2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpperTime2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionLCurve.LowerCurrent1\", \"LowerCurrent1\");\r\n            ifcPSE.PropertyName = \"LowerCurrent1\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lower Current1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"下電流1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"하전류 1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowerCurrent1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionLCurve.LowerCurrent2\", \"LowerCurrent2\");\r\n            ifcPSE.PropertyName = \"LowerCurrent2\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lower Current2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"下電流2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"하전류 2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowerCurrent2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionLCurve.LowerTime1\", \"LowerTime1\");\r\n            ifcPSE.PropertyName = \"LowerTime1\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lower Time1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"下時間1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"하 시간 1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowerTime1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionLCurve.LowerTime2\", \"LowerTime2\");\r\n            ifcPSE.PropertyName = \"LowerTime2\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lower Time2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"下時間2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"하 시간 2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowerTime2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingFunctionLCurve\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnitType);\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionLCurve.IsSelectable\", \"IsSelectable\");\r\n            ifcPSE.PropertyName = \"IsSelectable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSelectableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionLCurve.UpperCurrent1\", \"UpperCurrent1\");\r\n            ifcPSE.PropertyName = \"UpperCurrent1\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpperCurrent1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionLCurve.UpperCurrent2\", \"UpperCurrent2\");\r\n            ifcPSE.PropertyName = \"UpperCurrent2\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpperCurrent2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionLCurve.UpperTime1\", \"UpperTime1\");\r\n            ifcPSE.PropertyName = \"UpperTime1\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpperTime1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionLCurve.UpperTime2\", \"UpperTime2\");\r\n            ifcPSE.PropertyName = \"UpperTime2\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpperTime2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionLCurve.LowerCurrent1\", \"LowerCurrent1\");\r\n            ifcPSE.PropertyName = \"LowerCurrent1\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowerCurrent1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionLCurve.LowerCurrent2\", \"LowerCurrent2\");\r\n            ifcPSE.PropertyName = \"LowerCurrent2\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowerCurrent2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionLCurve.LowerTime1\", \"LowerTime1\");\r\n            ifcPSE.PropertyName = \"LowerTime1\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowerTime1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionLCurve.LowerTime2\", \"LowerTime2\");\r\n            ifcPSE.PropertyName = \"LowerTime2\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowerTime2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionLCurve.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTrippingFunctionLCurve);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTrippingFunctionSCurve(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTrippingFunctionSCurve = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTrippingFunctionSCurve.Name = \"Pset_ProtectiveDeviceTrippingFunctionSCurve\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingFunctionSCurve\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.IsSelectable\", \"IsSelectable\");\r\n            ifcPSE.PropertyName = \"IsSelectable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Selectable\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"切り替え\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전환\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSelectableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.NominalCurrentAdjusted\", \"NominalCurrentAdjusted\");\r\n            ifcPSE.PropertyName = \"NominalCurrentAdjusted\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Current Adjusted\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"定格調整電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"정격전류조정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentAdjustedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrent\", \"ReleaseCurrent\");\r\n            ifcPSE.PropertyName = \"ReleaseCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Release Current\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"放出電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"방출전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTime\", \"ReleaseTime\");\r\n            ifcPSE.PropertyName = \"ReleaseTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Release Time\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"放出時間\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"방출 시간\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.CurrentTolerance1\", \"CurrentTolerance1\");\r\n            ifcPSE.PropertyName = \"CurrentTolerance1\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Current Tolerance1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容電流1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용 전류1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentTolerance1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.CurrentToleranceLimit1\", \"CurrentToleranceLimit1\");\r\n            ifcPSE.PropertyName = \"CurrentToleranceLimit1\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Current Tolerance Limit1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容電流限界1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용전류한계1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentToleranceLimit1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.CurrentTolerance2\", \"CurrentTolerance2\");\r\n            ifcPSE.PropertyName = \"CurrentTolerance2\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Current Tolerance2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容電流2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용전류 2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentTolerance2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.IsCurrentTolerancePositiveOnly\", \"IsCurrentTolerancePositiveOnly\");\r\n            ifcPSE.PropertyName = \"IsCurrentTolerancePositiveOnly\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Current Tolerance Positive Only\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電流許容値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전류 허용 값\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsCurrentTolerancePositiveOnlyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.TimeTolerance1\", \"TimeTolerance1\");\r\n            ifcPSE.PropertyName = \"TimeTolerance1\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Time Tolerance1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容時間1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용 시간1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeTolerance1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.TimeToleranceLimit1\", \"TimeToleranceLimit1\");\r\n            ifcPSE.PropertyName = \"TimeToleranceLimit1\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Time Tolerance Limit1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容限界時間1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용 한계시간1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeToleranceLimit1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.TimeTolerance2\", \"TimeTolerance2\");\r\n            ifcPSE.PropertyName = \"TimeTolerance2\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Time Tolerance2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"許容時間2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"허용시간 2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeTolerance2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.IsTimeTolerancePositiveOnly\", \"IsTimeTolerancePositiveOnly\");\r\n            ifcPSE.PropertyName = \"IsTimeTolerancePositiveOnly\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Time Tolerance Positive Only\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"時間許容値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"시간 허용치\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsTimeTolerancePositiveOnlyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrentI2tStart\", \"ReleaseCurrentI2tStart\");\r\n            ifcPSE.PropertyName = \"ReleaseCurrentI2tStart\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Release Current I2t Start\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"I2tの開始放流電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"I2t 시작 방류 전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseCurrentI2tStartCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTimeI2tStart\", \"ReleaseTimeI2tStart\");\r\n            ifcPSE.PropertyName = \"ReleaseTimeI2tStart\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Release Time I2t Start\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"I2tの開始放流時間\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"I2t 시작 방류 시간\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseTimeI2tStartCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrentI2tEnd\", \"ReleaseCurrentI2tEnd\");\r\n            ifcPSE.PropertyName = \"ReleaseCurrentI2tEnd\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Release Current I2t End\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"I2tの終了放流電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"I2t 종료 방류 전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseCurrentI2tEndCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTimeI2tEnd\", \"ReleaseTimeI2tEnd\");\r\n            ifcPSE.PropertyName = \"ReleaseTimeI2tEnd\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Release Time I2t End\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"I2tの終了放流時間\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"I2t 종료 방류 시간\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseTimeI2tEndCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.IsOffWhenLfunctionOn\", \"IsOffWhenLfunctionOn\");\r\n            ifcPSE.PropertyName = \"IsOffWhenLfunctionOn\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Off When Lfunction On\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsOffWhenLfunctionOnCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingFunctionSCurve\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnitType);\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.IsSelectable\", \"IsSelectable\");\r\n            ifcPSE.PropertyName = \"IsSelectable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSelectableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.NominalCurrentAdjusted\", \"NominalCurrentAdjusted\");\r\n            ifcPSE.PropertyName = \"NominalCurrentAdjusted\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentAdjustedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrent\", \"ReleaseCurrent\");\r\n            ifcPSE.PropertyName = \"ReleaseCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTime\", \"ReleaseTime\");\r\n            ifcPSE.PropertyName = \"ReleaseTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.CurrentTolerance1\", \"CurrentTolerance1\");\r\n            ifcPSE.PropertyName = \"CurrentTolerance1\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentTolerance1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.CurrentToleranceLimit1\", \"CurrentToleranceLimit1\");\r\n            ifcPSE.PropertyName = \"CurrentToleranceLimit1\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentToleranceLimit1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.CurrentTolerance2\", \"CurrentTolerance2\");\r\n            ifcPSE.PropertyName = \"CurrentTolerance2\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentTolerance2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.IsCurrentTolerancePositiveOnly\", \"IsCurrentTolerancePositiveOnly\");\r\n            ifcPSE.PropertyName = \"IsCurrentTolerancePositiveOnly\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsCurrentTolerancePositiveOnlyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.TimeTolerance1\", \"TimeTolerance1\");\r\n            ifcPSE.PropertyName = \"TimeTolerance1\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeTolerance1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.TimeToleranceLimit1\", \"TimeToleranceLimit1\");\r\n            ifcPSE.PropertyName = \"TimeToleranceLimit1\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeToleranceLimit1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.TimeTolerance2\", \"TimeTolerance2\");\r\n            ifcPSE.PropertyName = \"TimeTolerance2\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeTolerance2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.IsTimeTolerancePositiveOnly\", \"IsTimeTolerancePositiveOnly\");\r\n            ifcPSE.PropertyName = \"IsTimeTolerancePositiveOnly\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsTimeTolerancePositiveOnlyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrentI2tStart\", \"ReleaseCurrentI2tStart\");\r\n            ifcPSE.PropertyName = \"ReleaseCurrentI2tStart\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseCurrentI2tStartCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTimeI2tStart\", \"ReleaseTimeI2tStart\");\r\n            ifcPSE.PropertyName = \"ReleaseTimeI2tStart\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseTimeI2tStartCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrentI2tEnd\", \"ReleaseCurrentI2tEnd\");\r\n            ifcPSE.PropertyName = \"ReleaseCurrentI2tEnd\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseCurrentI2tEndCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTimeI2tEnd\", \"ReleaseTimeI2tEnd\");\r\n            ifcPSE.PropertyName = \"ReleaseTimeI2tEnd\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseTimeI2tEndCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingFunctionSCurve.IsOffWhenLfunctionOn\", \"IsOffWhenLfunctionOn\");\r\n            ifcPSE.PropertyName = \"IsOffWhenLfunctionOn\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsOffWhenLfunctionOnCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingFunctionSCurve.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTrippingFunctionSCurve);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTrippingUnitCurrentAdjustment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTrippingUnitCurrentAdjustment = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTrippingUnitCurrentAdjustment.Name = \"Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingUnitCurrentAdjustment.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingUnitCurrentAdjustment.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentValueType\", \"AdjustmentValueType\");\r\n            ifcPSE.PropertyName = \"AdjustmentValueType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AdjustmentValueType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Adjustment Value Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"調整値の型\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조정 형식\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdjustmentValueTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitCurrentAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentRange\", \"AdjustmentRange\");\r\n            ifcPSE.PropertyName = \"AdjustmentRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Adjustment Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"調整範囲\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조정 범위\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdjustmentRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitCurrentAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentRangeStepValue\", \"AdjustmentRangeStepValue\");\r\n            ifcPSE.PropertyName = \"AdjustmentRangeStepValue\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Adjustment Range Step Value\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"調整範囲のステップ値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조정범위 단계값\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdjustmentRangeStepValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitCurrentAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentValues\", \"AdjustmentValues\");\r\n            ifcPSE.PropertyName = \"AdjustmentValues\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Adjustment Values\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"調整値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조정 값\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdjustmentValuesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitCurrentAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentDesignation\", \"AdjustmentDesignation\");\r\n            ifcPSE.PropertyName = \"AdjustmentDesignation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Adjustment Designation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"調整の指定\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조정지정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdjustmentDesignationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitCurrentAdjustment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingUnitCurrentAdjustment.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingUnitCurrentAdjustment.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnitType);\r\n            propertySetProtectiveDeviceTrippingUnitCurrentAdjustment.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentValueType\", \"AdjustmentValueType\");\r\n            ifcPSE.PropertyName = \"AdjustmentValueType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AdjustmentValueType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdjustmentValueTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitCurrentAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment.CurrentAdjustmentRange\", \"CurrentAdjustmentRange\");\r\n            ifcPSE.PropertyName = \"CurrentAdjustmentRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentAdjustmentRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitCurrentAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment.CurrentAdjustmentRangeStepValue\", \"CurrentAdjustmentRangeStepValue\");\r\n            ifcPSE.PropertyName = \"CurrentAdjustmentRangeStepValue\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentAdjustmentRangeStepValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitCurrentAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment.CurrentAdjustmentValues\", \"CurrentAdjustmentValues\");\r\n            ifcPSE.PropertyName = \"CurrentAdjustmentValues\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentAdjustmentValuesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitCurrentAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentDesignation\", \"AdjustmentDesignation\");\r\n            ifcPSE.PropertyName = \"AdjustmentDesignation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdjustmentDesignationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitCurrentAdjustment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTrippingUnitCurrentAdjustment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTrippingUnitTimeAdjustment(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTrippingUnitTimeAdjustment = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTrippingUnitTimeAdjustment.Name = \"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentValueType\", \"AdjustmentValueType\");\r\n            ifcPSE.PropertyName = \"AdjustmentValueType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AdjustmentValueType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Adjustment Value Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"調整値の型\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조정 형식\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdjustmentValueTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentRange\", \"AdjustmentRange\");\r\n            ifcPSE.PropertyName = \"AdjustmentRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Adjustment Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"調整範囲\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조정 범위\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdjustmentRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentRangeStepValue\", \"AdjustmentRangeStepValue\");\r\n            ifcPSE.PropertyName = \"AdjustmentRangeStepValue\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Adjustment Range Step Value\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"調整範囲のステップ値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조정범위 단계값\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdjustmentRangeStepValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentValues\", \"AdjustmentValues\");\r\n            ifcPSE.PropertyName = \"AdjustmentValues\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Adjustment Values\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"調整値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조정 값\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdjustmentValuesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentDesignation\", \"AdjustmentDesignation\");\r\n            ifcPSE.PropertyName = \"AdjustmentDesignation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Adjustment Designation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"調整の指定\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조정지정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdjustmentDesignationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment.CurrentForTimeDelay\", \"CurrentForTimeDelay\");\r\n            ifcPSE.PropertyName = \"CurrentForTimeDelay\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Current For Time Delay\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"時延電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"시간연장 전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentForTimeDelayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment.I2TApplicability\", \"I2TApplicability\");\r\n            ifcPSE.PropertyName = \"I2TApplicability\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AdjustmentValueType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"I2 TApplicability\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"I2Tの適用\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"12 T적용\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.I2TApplicabilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnitType);\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentValueType\", \"AdjustmentValueType\");\r\n            ifcPSE.PropertyName = \"AdjustmentValueType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AdjustmentValueType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdjustmentValueTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment.TimeAdjustmentRange\", \"TimeAdjustmentRange\");\r\n            ifcPSE.PropertyName = \"TimeAdjustmentRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeAdjustmentRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment.TimeAdjustmentRangeStepValue\", \"TimeAdjustmentRangeStepValue\");\r\n            ifcPSE.PropertyName = \"TimeAdjustmentRangeStepValue\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeAdjustmentRangeStepValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment.TimeAdjustmentValues\", \"TimeAdjustmentValues\");\r\n            ifcPSE.PropertyName = \"TimeAdjustmentValues\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeAdjustmentValuesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentDesignation\", \"AdjustmentDesignation\");\r\n            ifcPSE.PropertyName = \"AdjustmentDesignation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AdjustmentDesignationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment.CurrentForTimeDelay\", \"CurrentForTimeDelay\");\r\n            ifcPSE.PropertyName = \"CurrentForTimeDelay\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentForTimeDelayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment.I2TApplicability\", \"I2TApplicability\");\r\n            ifcPSE.PropertyName = \"I2TApplicability\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AdjustmentValueType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.I2TApplicabilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTimeAdjustment.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTrippingUnitTimeAdjustment);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTrippingUnitTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTrippingUnitTypeCommon = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTrippingUnitTypeCommon.Name = \"Pset_ProtectiveDeviceTrippingUnitTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingUnitTypeCommon\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeCommon.Standard\", \"Standard\");\r\n            ifcPSE.PropertyName = \"Standard\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Standard\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"特性定義\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"특성 정의\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeCommon.UseInDiscrimination\", \"UseInDiscrimination\");\r\n            ifcPSE.PropertyName = \"UseInDiscrimination\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Use In Discrimination\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"使用方法\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"사용방법\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UseInDiscriminationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeCommon.AtexVerified\", \"AtexVerified\");\r\n            ifcPSE.PropertyName = \"AtexVerified\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Atex Verified\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"アテックス認証\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"EX -환경 인증\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtexVerifiedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeCommon.OldDevice\", \"OldDevice\");\r\n            ifcPSE.PropertyName = \"OldDevice\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Old Device\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"販売中止装置\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"판매중지 장치\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OldDeviceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeCommon.LimitingTerminalSize\", \"LimitingTerminalSize\");\r\n            ifcPSE.PropertyName = \"LimitingTerminalSize\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Limiting Terminal Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"接続限界値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"연결 한계\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LimitingTerminalSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingUnitTypeCommon\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnitType);\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeCommon.Standard\", \"Standard\");\r\n            ifcPSE.PropertyName = \"Standard\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeCommon.UseInDiscrimination\", \"UseInDiscrimination\");\r\n            ifcPSE.PropertyName = \"UseInDiscrimination\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UseInDiscriminationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeCommon.AtexVerified\", \"AtexVerified\");\r\n            ifcPSE.PropertyName = \"AtexVerified\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AtexVerifiedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeCommon.OldDevice\", \"OldDevice\");\r\n            ifcPSE.PropertyName = \"OldDevice\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OldDeviceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeCommon.LimitingTerminalSize\", \"LimitingTerminalSize\");\r\n            ifcPSE.PropertyName = \"LimitingTerminalSize\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LimitingTerminalSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTrippingUnitTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.Name = \"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.PredefinedType = \"ELECTROMAGNETIC\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.ElectroMagneticTrippingUnitType\", \"ElectroMagneticTrippingUnitType\");\r\n            ifcPSE.PropertyName = \"ElectroMagneticTrippingUnitType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElectroMagneticTrippingUnitType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Electro Magnetic Tripping Unit Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電磁トリップ装置タイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전자 트립장치 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectroMagneticTrippingUnitTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I1\", \"I1\");\r\n            ifcPSE.PropertyName = \"I1\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"I1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"I1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"I1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.I1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I2\", \"I2\");\r\n            ifcPSE.PropertyName = \"I2\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"I2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"I2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"I2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.I2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.T2\", \"T2\");\r\n            ifcPSE.PropertyName = \"T2\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"T2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"T2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"T2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.T2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.DefinedTemperature\", \"DefinedTemperature\");\r\n            ifcPSE.PropertyName = \"DefinedTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Defined Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設定温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"설정 온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DefinedTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.TemperatureFactor\", \"TemperatureFactor\");\r\n            ifcPSE.PropertyName = \"TemperatureFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature Factor\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"温度係数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"온도 계수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I4\", \"I4\");\r\n            ifcPSE.PropertyName = \"I4\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"I4\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"I4\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"I4\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.I4Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I5\", \"I5\");\r\n            ifcPSE.PropertyName = \"I5\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"I5\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"I5\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"I5\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.I5Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.T5\", \"T5\");\r\n            ifcPSE.PropertyName = \"T5\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"T5\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"T5\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"T5\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.T5Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.CurveDesignation\", \"CurveDesignation\");\r\n            ifcPSE.PropertyName = \"CurveDesignation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Curve Designation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"曲線指定\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"곡성 지정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurveDesignationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnitType);\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.PredefinedType = \"ELECTROMAGNETIC\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.ElectroMagneticTrippingUnitType\", \"ElectroMagneticTrippingUnitType\");\r\n            ifcPSE.PropertyName = \"ElectroMagneticTrippingUnitType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElectroMagneticTrippingUnitType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectroMagneticTrippingUnitTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I1\", \"I1\");\r\n            ifcPSE.PropertyName = \"I1\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.I1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I2\", \"I2\");\r\n            ifcPSE.PropertyName = \"I2\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.I2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.T2\", \"T2\");\r\n            ifcPSE.PropertyName = \"T2\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.T2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.DefinedTemperature\", \"DefinedTemperature\");\r\n            ifcPSE.PropertyName = \"DefinedTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DefinedTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.TemperatureFactor\", \"TemperatureFactor\");\r\n            ifcPSE.PropertyName = \"TemperatureFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I4\", \"I4\");\r\n            ifcPSE.PropertyName = \"I4\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.I4Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I5\", \"I5\");\r\n            ifcPSE.PropertyName = \"I5\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.I5Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.T5\", \"T5\");\r\n            ifcPSE.PropertyName = \"T5\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.T5Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.CurveDesignation\", \"CurveDesignation\");\r\n            ifcPSE.PropertyName = \"CurveDesignation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurveDesignationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTrippingUnitTypeElectroMagnetic);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTrippingUnitTypeElectronic(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTrippingUnitTypeElectronic = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTrippingUnitTypeElectronic.Name = \"Pset_ProtectiveDeviceTrippingUnitTypeElectronic\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingUnitTypeElectronic\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.PredefinedType = \"ELECTRONIC\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectronic.ElectronicTrippingUnitType\", \"ElectronicTrippingUnitType\");\r\n            ifcPSE.PropertyName = \"ElectronicTrippingUnitType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElectronicTrippingUnitType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Electronic Tripping Unit Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電磁式の装置タイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전자식 장치 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectronicTrippingUnitTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectronic.NominalCurrents\", \"NominalCurrents\");\r\n            ifcPSE.PropertyName = \"NominalCurrents\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Currents\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"定格電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"정격전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection\", \"N_Protection\");\r\n            ifcPSE.PropertyName = \"N_Protection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"N_ Protection\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"N_Protection\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"N_Protection\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.N_ProtectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_50\", \"N_Protection_50\");\r\n            ifcPSE.PropertyName = \"N_Protection_50\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"N_ Protection_50\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"N_Protection_50\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"N_Protection_50\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.N_Protection_50Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_100\", \"N_Protection_100\");\r\n            ifcPSE.PropertyName = \"N_Protection_100\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"N_ Protection_100\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"N_Protection_100\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"N_Protection_100\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.N_Protection_100Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_Select\", \"N_Protection_Select\");\r\n            ifcPSE.PropertyName = \"N_Protection_Select\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"N_ Protection_ Select\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"N_Protectionの選択\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"N_Protection 선택\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.N_Protection_SelectCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingUnitTypeElectronic\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnitType);\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.PredefinedType = \"ELECTRONIC\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectronic.ElectronicTrippingUnitType\", \"ElectronicTrippingUnitType\");\r\n            ifcPSE.PropertyName = \"ElectronicTrippingUnitType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElectronicTrippingUnitType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectronicTrippingUnitTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectronic.NominalCurrents\", \"NominalCurrents\");\r\n            ifcPSE.PropertyName = \"NominalCurrents\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection\", \"N_Protection\");\r\n            ifcPSE.PropertyName = \"N_Protection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.N_ProtectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_50\", \"N_Protection_50\");\r\n            ifcPSE.PropertyName = \"N_Protection_50\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.N_Protection_50Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_100\", \"N_Protection_100\");\r\n            ifcPSE.PropertyName = \"N_Protection_100\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.N_Protection_100Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_Select\", \"N_Protection_Select\");\r\n            ifcPSE.PropertyName = \"N_Protection_Select\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.N_Protection_SelectCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeElectronic.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTrippingUnitTypeElectronic);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTrippingUnitTypeResidualCurrent(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTrippingUnitTypeResidualCurrent = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTrippingUnitTypeResidualCurrent.Name = \"Pset_ProtectiveDeviceTrippingUnitTypeResidualCurrent\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingUnitTypeResidualCurrent\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingUnitTypeResidualCurrent.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingUnitTypeResidualCurrent.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            propertySetProtectiveDeviceTrippingUnitTypeResidualCurrent.PredefinedType = \"RESIDUALCURRENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeResidualCurrent.TrippingUnitReleaseCurrent\", \"TrippingUnitReleaseCurrent\");\r\n            ifcPSE.PropertyName = \"TrippingUnitReleaseCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_TrippingUnitReleaseCurrent);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tripping Unit Release Current\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"定格感度電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"정격 감도 전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrippingUnitReleaseCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeResidualCurrent.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingUnitTypeResidualCurrent\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingUnitTypeResidualCurrent.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingUnitTypeResidualCurrent.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnitType);\r\n            propertySetProtectiveDeviceTrippingUnitTypeResidualCurrent.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            propertySetProtectiveDeviceTrippingUnitTypeResidualCurrent.PredefinedType = \"RESIDUALCURRENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeResidualCurrent.TrippingUnitReleaseCurrent\", \"TrippingUnitReleaseCurrent\");\r\n            ifcPSE.PropertyName = \"TrippingUnitReleaseCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TrippingUnitReleaseCurrent);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrippingUnitReleaseCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeResidualCurrent.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTrippingUnitTypeResidualCurrent);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTrippingUnitTypeThermal(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTrippingUnitTypeThermal = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTrippingUnitTypeThermal.Name = \"Pset_ProtectiveDeviceTrippingUnitTypeThermal\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingUnitTypeThermal\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.PredefinedType = \"THERMAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeThermal.ThermalTrippingUnitType\", \"ThermalTrippingUnitType\");\r\n            ifcPSE.PropertyName = \"ThermalTrippingUnitType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ThermalTrippingUnitType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Tripping Unit Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"サーマルトリップ装置タイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"열 트립 장치 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTrippingUnitTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeThermal.I1\", \"I1\");\r\n            ifcPSE.PropertyName = \"I1\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"I1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"I1\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"I1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.I1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeThermal.I2\", \"I2\");\r\n            ifcPSE.PropertyName = \"I2\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"I2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"I2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"I2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.I2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeThermal.T2\", \"T2\");\r\n            ifcPSE.PropertyName = \"T2\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"T2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"T2\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"T2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.T2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeThermal.DefinedTemperature\", \"DefinedTemperature\");\r\n            ifcPSE.PropertyName = \"DefinedTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Defined Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設定温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"설정 온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DefinedTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeThermal.TemperatureFactor\", \"TemperatureFactor\");\r\n            ifcPSE.PropertyName = \"TemperatureFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature Factor\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"温度係数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"온도 계수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeThermal.CurveDesignation\", \"CurveDesignation\");\r\n            ifcPSE.PropertyName = \"CurveDesignation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Curve Designation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"曲線指定\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"곡선 지정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurveDesignationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTrippingUnitTypeThermal\"))\r\n         {\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnitType);\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.PredefinedType = \"THERMAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeThermal.ThermalTrippingUnitType\", \"ThermalTrippingUnitType\");\r\n            ifcPSE.PropertyName = \"ThermalTrippingUnitType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ThermalTrippingUnitType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTrippingUnitTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeThermal.I1\", \"I1\");\r\n            ifcPSE.PropertyName = \"I1\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.I1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeThermal.I2\", \"I2\");\r\n            ifcPSE.PropertyName = \"I2\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.I2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeThermal.T2\", \"T2\");\r\n            ifcPSE.PropertyName = \"T2\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.T2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeThermal.DefinedTemperature\", \"DefinedTemperature\");\r\n            ifcPSE.PropertyName = \"DefinedTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DefinedTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeThermal.TemperatureFactor\", \"TemperatureFactor\");\r\n            ifcPSE.PropertyName = \"TemperatureFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTrippingUnitTypeThermal.CurveDesignation\", \"CurveDesignation\");\r\n            ifcPSE.PropertyName = \"CurveDesignation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurveDesignationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTrippingUnitTypeThermal.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTrippingUnitTypeThermal);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTypeAntiArcingDevice(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTypeAntiArcingDevice = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTypeAntiArcingDevice.Name = \"Pset_ProtectiveDeviceTypeAntiArcingDevice\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeAntiArcingDevice\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeAntiArcingDevice.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTypeAntiArcingDevice.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeAntiArcingDevice.ObjectType = \"IfcProtectiveDevice\";\r\n            propertySetProtectiveDeviceTypeAntiArcingDevice.PredefinedType = \"ANTI_ARCING_DEVICE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeAntiArcingDevice.RatedVoltage\", \"RatedVoltage\");\r\n            ifcPSE.PropertyName = \"RatedVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeAntiArcingDevice.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeAntiArcingDevice.GroundingType\", \"GroundingType\");\r\n            ifcPSE.PropertyName = \"GroundingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GroundingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeAntiArcingDevice.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTypeAntiArcingDevice);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTypeCircuitBreaker(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTypeCircuitBreaker = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTypeCircuitBreaker.Name = \"Pset_ProtectiveDeviceTypeCircuitBreaker\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeCircuitBreaker\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.ObjectType = \"CircuitBreaker\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCircuitBreaker.CircuitBreakerType\", \"CircuitBreakerType\");\r\n            ifcPSE.PropertyName = \"CircuitBreakerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CircuitBreakerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CircuitBreakerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeCircuitBreaker\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.ObjectType = \"IfcProtectiveDeviceType\";\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.PredefinedType = \"CIRCUITBREAKER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCircuitBreaker.CircuitBreakerType\", \"CircuitBreakerType\");\r\n            ifcPSE.PropertyName = \"CircuitBreakerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CircuitBreakerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CircuitBreakerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeCircuitBreaker\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.ObjectType = \"IfcProtectiveDevice\";\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.PredefinedType = \"CIRCUITBREAKER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCircuitBreaker.PerformanceClasses\", \"PerformanceClasses\");\r\n            ifcPSE.PropertyName = \"PerformanceClasses\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Performance Classes\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"能力クラス\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"능력 클래스\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerformanceClassesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCircuitBreaker.VoltageLevel\", \"VoltageLevel\");\r\n            ifcPSE.PropertyName = \"VoltageLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_VoltageLevels);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Voltage Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電圧レベル\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전압레벨\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCircuitBreaker.ICU60947\", \"ICU60947\");\r\n            ifcPSE.PropertyName = \"ICU60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"ICU60947\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"定格限界短絡遮断容量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"정격한계단락 차단 용량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICU60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCircuitBreaker.ICS60947\", \"ICS60947\");\r\n            ifcPSE.PropertyName = \"ICS60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"ICS60947\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"定格使用短絡遮断容量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"정격사용 단락 차단 용량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICS60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCircuitBreaker.ICW60947\", \"ICW60947\");\r\n            ifcPSE.PropertyName = \"ICW60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"ICW60947\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ICW60947\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"ICW60947\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICW60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCircuitBreaker.ICM60947\", \"ICM60947\");\r\n            ifcPSE.PropertyName = \"ICM60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"ICM60947\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ICM60947\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"ICM60947\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICM60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeCircuitBreaker\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.ObjectType = \"IfcProtectiveDevice\";\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.PredefinedType = \"CIRCUITBREAKER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCircuitBreaker.PerformanceClasses\", \"PerformanceClasses\");\r\n            ifcPSE.PropertyName = \"PerformanceClasses\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerformanceClassesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCircuitBreaker.VoltageLevel\", \"VoltageLevel\");\r\n            ifcPSE.PropertyName = \"VoltageLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_VoltageLevels);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCircuitBreaker.ICU60947\", \"ICU60947\");\r\n            ifcPSE.PropertyName = \"ICU60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICU60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCircuitBreaker.ICS60947\", \"ICS60947\");\r\n            ifcPSE.PropertyName = \"ICS60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICS60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCircuitBreaker.ICW60947\", \"ICW60947\");\r\n            ifcPSE.PropertyName = \"ICW60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICW60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCircuitBreaker.ICM60947\", \"ICM60947\");\r\n            ifcPSE.PropertyName = \"ICM60947\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ICM60947Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTypeCircuitBreaker);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTypeCommon = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTypeCommon.Name = \"Pset_ProtectiveDeviceTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeCommon\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.RatedShortCircuitCurrent\", \"RatedShortCircuitCurrent\");\r\n            ifcPSE.PropertyName = \"RatedShortCircuitCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedShortCircuitCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.CutOffCurrent\", \"CutOffCurrent\");\r\n            ifcPSE.PropertyName = \"CutOffCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CutOffCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.MaximumRatedVoltage\", \"MaximumRatedVoltage\");\r\n            ifcPSE.PropertyName = \"MaximumRatedVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumRatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.LimitingTerminalSize\", \"LimitingTerminalSize\");\r\n            ifcPSE.PropertyName = \"LimitingTerminalSize\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LimitingTerminalSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.SwitchingDuty\", \"SwitchingDuty\");\r\n            ifcPSE.PropertyName = \"SwitchingDuty\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchingDutyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.CharacteristicTripCurve\", \"CharacteristicTripCurve\");\r\n            ifcPSE.PropertyName = \"CharacteristicTripCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CharacteristicTripCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.ProtectiveTagType\", \"ProtectiveTagType\");\r\n            ifcPSE.PropertyName = \"ProtectiveTagType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProtectiveTagTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.StandardUsed\", \"StandardUsed\");\r\n            ifcPSE.PropertyName = \"StandardUsed\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardUsedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeCommon\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.RatedShortCircuitCurrent\", \"RatedShortCircuitCurrent\");\r\n            ifcPSE.PropertyName = \"RatedShortCircuitCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedShortCircuitCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.CutOffCurrent\", \"CutOffCurrent\");\r\n            ifcPSE.PropertyName = \"CutOffCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CutOffCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.MaximumRatedVoltage\", \"MaximumRatedVoltage\");\r\n            ifcPSE.PropertyName = \"MaximumRatedVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumRatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.LimitingTerminalSize\", \"LimitingTerminalSize\");\r\n            ifcPSE.PropertyName = \"LimitingTerminalSize\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LimitingTerminalSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.SwitchingDuty\", \"SwitchingDuty\");\r\n            ifcPSE.PropertyName = \"SwitchingDuty\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchingDutyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.CharacteristicTripCurve\", \"CharacteristicTripCurve\");\r\n            ifcPSE.PropertyName = \"CharacteristicTripCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.ElectricCurrent;\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CharacteristicTripCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.ProtectiveTagType\", \"ProtectiveTagType\");\r\n            ifcPSE.PropertyName = \"ProtectiveTagType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProtectiveTagTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.StandardUsed\", \"StandardUsed\");\r\n            ifcPSE.PropertyName = \"StandardUsed\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardUsedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeCommon\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTypeCommon.ObjectType = \"IfcProtectiveDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeCommon\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeCommon.ObjectType = \"IfcProtectiveDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTypeEarthFailureDevice(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTypeEarthFailureDevice = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTypeEarthFailureDevice.Name = \"Pset_ProtectiveDeviceTypeEarthFailureDevice\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeEarthFailureDevice\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeEarthFailureDevice.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeEarthFailureDevice.ObjectType = \"EarthFailureDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeEarthFailureDevice.EarthFailureDeviceType\", \"EarthFailureDeviceType\");\r\n            ifcPSE.PropertyName = \"EarthFailureDeviceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_EarthFailureDeviceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EarthFailureDeviceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeEarthFailureDevice.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeEarthFailureDevice.Sensitivity\", \"Sensitivity\");\r\n            ifcPSE.PropertyName = \"Sensitivity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensitivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeEarthFailureDevice.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeEarthFailureDevice\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeEarthFailureDevice.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeEarthFailureDevice.ObjectType = \"IfcProtectiveDeviceType\";\r\n            propertySetProtectiveDeviceTypeEarthFailureDevice.PredefinedType = \"EARTHFAILUREDEVICE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeEarthFailureDevice.EarthFailureDeviceType\", \"EarthFailureDeviceType\");\r\n            ifcPSE.PropertyName = \"EarthFailureDeviceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_EarthFailureDeviceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EarthFailureDeviceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeEarthFailureDevice.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeEarthFailureDevice.Sensitivity\", \"Sensitivity\");\r\n            ifcPSE.PropertyName = \"Sensitivity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensitivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeEarthFailureDevice.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTypeEarthFailureDevice);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTypeEarthLeakageCircuitBreaker = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTypeEarthLeakageCircuitBreaker.Name = \"Pset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeEarthLeakageCircuitBreaker.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTypeEarthLeakageCircuitBreaker.ObjectType = \"IfcProtectiveDevice\";\r\n            propertySetProtectiveDeviceTypeEarthLeakageCircuitBreaker.PredefinedType = \"EARTHLEAKAGECIRCUITBREAKER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker.EarthFailureDeviceType\", \"EarthFailureDeviceType\");\r\n            ifcPSE.PropertyName = \"EarthFailureDeviceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_EarthFailureDeviceType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Earth Failure Device Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"漏電回路遮断機のタイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"누전 회로 차단기의 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EarthFailureDeviceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeEarthLeakageCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker.Sensitivity\", \"Sensitivity\");\r\n            ifcPSE.PropertyName = \"Sensitivity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sensitivity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"感度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"감도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensitivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeEarthLeakageCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeEarthLeakageCircuitBreaker.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTypeEarthLeakageCircuitBreaker.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeEarthLeakageCircuitBreaker.ObjectType = \"IfcProtectiveDevice\";\r\n            propertySetProtectiveDeviceTypeEarthLeakageCircuitBreaker.PredefinedType = \"EARTHLEAKAGECIRCUITBREAKER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker.EarthFailureDeviceType\", \"EarthFailureDeviceType\");\r\n            ifcPSE.PropertyName = \"EarthFailureDeviceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_EarthFailureDeviceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EarthFailureDeviceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeEarthLeakageCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker.Sensitivity\", \"Sensitivity\");\r\n            ifcPSE.PropertyName = \"Sensitivity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensitivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeEarthLeakageCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTypeEarthLeakageCircuitBreaker);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTypeFuseDisconnector(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTypeFuseDisconnector = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTypeFuseDisconnector.Name = \"Pset_ProtectiveDeviceTypeFuseDisconnector\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeFuseDisconnector\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.ObjectType = \"FuseDisconnector\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.FuseDisconnectorType\", \"FuseDisconnectorType\");\r\n            ifcPSE.PropertyName = \"FuseDisconnectorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FuseDisconnectorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FuseDisconnectorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeFuseDisconnector\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.ObjectType = \" IfcProtectiveDeviceType\";\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.PredefinedType = \"FUSEDISCONNECTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.FuseDisconnectorType\", \"FuseDisconnectorType\");\r\n            ifcPSE.PropertyName = \"FuseDisconnectorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FuseDisconnectorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FuseDisconnectorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeFuseDisconnector\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.ObjectType = \"IfcProtectiveDevice\";\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.PredefinedType = \"FUSEDISCONNECTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.FuseDisconnectorType\", \"FuseDisconnectorType\");\r\n            ifcPSE.PropertyName = \"FuseDisconnectorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FuseDisconnectorType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fuse Disconnector Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ヒューズ遮断機のタイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"퓨즈차단기 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FuseDisconnectorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.VoltageLevel\", \"VoltageLevel\");\r\n            ifcPSE.PropertyName = \"VoltageLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_VoltageLevels);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Voltage Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電圧レベル\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전압레벨\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.IC60269\", \"IC60269\");\r\n            ifcPSE.PropertyName = \"IC60269\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"IC60269\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"IC60269\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"IC60269\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IC60269Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.PowerLoss\", \"PowerLoss\");\r\n            ifcPSE.PropertyName = \"PowerLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Power Loss\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電力損失\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전력 손실\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeFuseDisconnector\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.ObjectType = \"IfcProtectiveDevice\";\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.PredefinedType = \"FUSEDISCONNECTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.FuseDisconnectorType\", \"FuseDisconnectorType\");\r\n            ifcPSE.PropertyName = \"FuseDisconnectorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FuseDisconnectorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FuseDisconnectorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.VoltageLevel\", \"VoltageLevel\");\r\n            ifcPSE.PropertyName = \"VoltageLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_VoltageLevels);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.IC60269\", \"IC60269\");\r\n            ifcPSE.PropertyName = \"IC60269\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IC60269Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.PowerLoss\", \"PowerLoss\");\r\n            ifcPSE.PropertyName = \"PowerLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.NumberOfPhases\", \"NumberOfPhases\");\r\n            ifcPSE.PropertyName = \"NumberOfPhases\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPhasesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.ReferenceEnvironmentTemperature\", \"ReferenceEnvironmentTemperature\");\r\n            ifcPSE.PropertyName = \"ReferenceEnvironmentTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceEnvironmentTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.BreakingCapacity\", \"BreakingCapacity\");\r\n            ifcPSE.PropertyName = \"BreakingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BreakingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.ArcExtinctionType\", \"ArcExtinctionType\");\r\n            ifcPSE.PropertyName = \"ArcExtinctionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArcExtinctionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.NumberOfPoles\", \"NumberOfPoles\");\r\n            ifcPSE.PropertyName = \"NumberOfPoles\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPolesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.TransformationRatio\", \"TransformationRatio\");\r\n            ifcPSE.PropertyName = \"TransformationRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransformationRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.NominalFrequency\", \"NominalFrequency\");\r\n            ifcPSE.PropertyName = \"NominalFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.NominalCurrent\", \"NominalCurrent\");\r\n            ifcPSE.PropertyName = \"NominalCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeFuseDisconnector.RatedVoltage\", \"RatedVoltage\");\r\n            ifcPSE.PropertyName = \"RatedVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeFuseDisconnector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTypeFuseDisconnector);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker.Name = \"Pset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker.ObjectType = \"ResidualCurrentCircuitBreaker\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker.Sensitivity\", \"Sensitivity\");\r\n            ifcPSE.PropertyName = \"Sensitivity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensitivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker.ObjectType = \"IfcProtectiveDeviceType\";\r\n            propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker.PredefinedType = \"RESIDUALCURRENTCIRCUITBREAKER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker.Sensitivity\", \"Sensitivity\");\r\n            ifcPSE.PropertyName = \"Sensitivity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensitivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker.ObjectType = \"IfcProtectiveDevice\";\r\n            propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker.PredefinedType = \"RESIDUALCURRENTCIRCUITBREAKER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker.Sensitivity\", \"Sensitivity\");\r\n            ifcPSE.PropertyName = \"Sensitivity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sensitivity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"感度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"감도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensitivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker.ObjectType = \"IfcProtectiveDevice\";\r\n            propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker.PredefinedType = \"RESIDUALCURRENTCIRCUITBREAKER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker.Sensitivity\", \"Sensitivity\");\r\n            ifcPSE.PropertyName = \"Sensitivity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensitivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTypeResidualCurrentCircuitBreaker);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTypeResidualCurrentSwitch(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTypeResidualCurrentSwitch = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTypeResidualCurrentSwitch.Name = \"Pset_ProtectiveDeviceTypeResidualCurrentSwitch\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeResidualCurrentSwitch\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeResidualCurrentSwitch.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeResidualCurrentSwitch.ObjectType = \"ResidualCurrentSwitch\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeResidualCurrentSwitch.Sensitivity\", \"Sensitivity\");\r\n            ifcPSE.PropertyName = \"Sensitivity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensitivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeResidualCurrentSwitch.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeResidualCurrentSwitch\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeResidualCurrentSwitch.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeResidualCurrentSwitch.ObjectType = \"IfcProtectiveDeviceType\";\r\n            propertySetProtectiveDeviceTypeResidualCurrentSwitch.PredefinedType = \"RESIDUALCURRENTSWITCH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeResidualCurrentSwitch.Sensitivity\", \"Sensitivity\");\r\n            ifcPSE.PropertyName = \"Sensitivity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensitivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeResidualCurrentSwitch.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeResidualCurrentSwitch\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeResidualCurrentSwitch.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTypeResidualCurrentSwitch.ObjectType = \"IfcProtectiveDevice\";\r\n            propertySetProtectiveDeviceTypeResidualCurrentSwitch.PredefinedType = \"RESIDUALCURRENTSWITCH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeResidualCurrentSwitch.Sensitivity\", \"Sensitivity\");\r\n            ifcPSE.PropertyName = \"Sensitivity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sensitivity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"感度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"감도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensitivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeResidualCurrentSwitch.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeResidualCurrentSwitch\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeResidualCurrentSwitch.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTypeResidualCurrentSwitch.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeResidualCurrentSwitch.ObjectType = \"IfcProtectiveDevice\";\r\n            propertySetProtectiveDeviceTypeResidualCurrentSwitch.PredefinedType = \"RESIDUALCURRENTSWITCH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeResidualCurrentSwitch.Sensitivity\", \"Sensitivity\");\r\n            ifcPSE.PropertyName = \"Sensitivity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensitivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeResidualCurrentSwitch.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTypeResidualCurrentSwitch);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTypeSparkGap(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTypeSparkGap = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTypeSparkGap.Name = \"Pset_ProtectiveDeviceTypeSparkGap\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeSparkGap\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeSparkGap.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTypeSparkGap.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTypeSparkGap.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeSparkGap.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeSparkGap.ObjectType = \"IfcProtectiveDevice\";\r\n            propertySetProtectiveDeviceTypeSparkGap.PredefinedType = \"VOLTAGELIMITER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeSparkGap.BreakdownVoltageTolerance\", \"BreakdownVoltageTolerance\");\r\n            ifcPSE.PropertyName = \"BreakdownVoltageTolerance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BreakdownVoltageToleranceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeSparkGap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeSparkGap.Capacitance\", \"Capacitance\");\r\n            ifcPSE.PropertyName = \"Capacitance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCapacitance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacitanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeSparkGap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeSparkGap.CurrentRMS\", \"CurrentRMS\");\r\n            ifcPSE.PropertyName = \"CurrentRMS\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentRMSCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeSparkGap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeSparkGap.PowerDissipation\", \"PowerDissipation\");\r\n            ifcPSE.PropertyName = \"PowerDissipation\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerDissipationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeSparkGap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeSparkGap.SparkGapType\", \"SparkGapType\");\r\n            ifcPSE.PropertyName = \"SparkGapType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SparkGapType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SparkGapTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeSparkGap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeSparkGap.Resistivity\", \"Resistivity\");\r\n            ifcPSE.PropertyName = \"Resistivity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ResistivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeSparkGap.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTypeSparkGap);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProtectiveDeviceTypeVaristor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProtectiveDeviceTypeVaristor = new PropertySetDescription();\r\n         propertySetProtectiveDeviceTypeVaristor.Name = \"Pset_ProtectiveDeviceTypeVaristor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeVaristor\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeVaristor.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeVaristor.ObjectType = \"Varistor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeVaristor.VaristorType\", \"VaristorType\");\r\n            ifcPSE.PropertyName = \"VaristorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_VaristorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VaristorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeVaristor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeVaristor\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeVaristor.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeVaristor.ObjectType = \"IfcProtectiveDeviceType\";\r\n            propertySetProtectiveDeviceTypeVaristor.PredefinedType = \"VARISTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeVaristor.VaristorType\", \"VaristorType\");\r\n            ifcPSE.PropertyName = \"VaristorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_VaristorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VaristorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeVaristor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeVaristor\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeVaristor.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTypeVaristor.ObjectType = \"IfcProtectiveDevice\";\r\n            propertySetProtectiveDeviceTypeVaristor.PredefinedType = \"VARISTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeVaristor.VaristorType\", \"VaristorType\");\r\n            ifcPSE.PropertyName = \"VaristorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_VaristorType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Varistor Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"保護タイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"보호 종류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VaristorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeVaristor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProtectiveDeviceTypeVaristor\"))\r\n         {\r\n            propertySetProtectiveDeviceTypeVaristor.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            propertySetProtectiveDeviceTypeVaristor.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            propertySetProtectiveDeviceTypeVaristor.ObjectType = \"IfcProtectiveDevice\";\r\n            propertySetProtectiveDeviceTypeVaristor.PredefinedType = \"VARISTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeVaristor.VaristorType\", \"VaristorType\");\r\n            ifcPSE.PropertyName = \"VaristorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_VaristorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VaristorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeVaristor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProtectiveDeviceTypeVaristor.CharacteristicFunction\", \"CharacteristicFunction\");\r\n            ifcPSE.PropertyName = \"CharacteristicFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CharacteristicFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProtectiveDeviceTypeVaristor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProtectiveDeviceTypeVaristor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ProvisionForVoid(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetProvisionForVoid = new PropertySetDescription();\r\n         propertySetProvisionForVoid.Name = \"Pset_ProvisionForVoid\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ProvisionForVoid\"))\r\n         {\r\n            propertySetProvisionForVoid.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxy);\r\n            propertySetProvisionForVoid.EntityTypes.Add(IFCEntityType.IfcVirtualElement);\r\n            propertySetProvisionForVoid.ObjectType = \"IfcBuildingElementProxy\";\r\n            propertySetProvisionForVoid.PredefinedType = \"PROVISIONFORVOID\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProvisionForVoid.VoidShape\", \"VoidShape\");\r\n            ifcPSE.PropertyName = \"VoidShape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoidShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProvisionForVoid.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProvisionForVoid.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProvisionForVoid.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProvisionForVoid.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProvisionForVoid.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProvisionForVoid.Diameter\", \"Diameter\");\r\n            ifcPSE.PropertyName = \"Diameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProvisionForVoid.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProvisionForVoid.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProvisionForVoid.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ProvisionForVoid.System\", \"System\");\r\n            ifcPSE.PropertyName = \"System\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SystemCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetProvisionForVoid.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetProvisionForVoid);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PumpOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPumpOccurrence = new PropertySetDescription();\r\n         propertySetPumpOccurrence.Name = \"Pset_PumpOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PumpOccurrence\"))\r\n         {\r\n            propertySetPumpOccurrence.EntityTypes.Add(IFCEntityType.IfcPump);\r\n            propertySetPumpOccurrence.ObjectType = \"IfcPump\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpOccurrence.ImpellerDiameter\", \"ImpellerDiameter\");\r\n            ifcPSE.PropertyName = \"ImpellerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Impeller Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"羽根直径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpellerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpOccurrence.BaseType\", \"BaseType\");\r\n            ifcPSE.PropertyName = \"BaseType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_PumpBaseType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Base Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"基礎タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpOccurrence.DriveConnectionType\", \"DriveConnectionType\");\r\n            ifcPSE.PropertyName = \"DriveConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_PumpDriveConnectionType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Drive Connection Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"駆動接続タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DriveConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PumpOccurrence\"))\r\n         {\r\n            propertySetPumpOccurrence.EntityTypes.Add(IFCEntityType.IfcPump);\r\n            propertySetPumpOccurrence.ObjectType = \"IfcPump\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpOccurrence.ImpellerDiameter\", \"ImpellerDiameter\");\r\n            ifcPSE.PropertyName = \"ImpellerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpellerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpOccurrence.BaseType\", \"BaseType\");\r\n            ifcPSE.PropertyName = \"BaseType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_PumpBaseType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BaseTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpOccurrence.DriveConnectionType\", \"DriveConnectionType\");\r\n            ifcPSE.PropertyName = \"DriveConnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_PumpDriveConnectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DriveConnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPumpOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PumpPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPumpPHistory = new PropertySetDescription();\r\n         propertySetPumpPHistory.Name = \"Pset_PumpPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PumpPHistory\"))\r\n         {\r\n            propertySetPumpPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.MechanicalEfficiency\", \"MechanicalEfficiency\");\r\n            ifcPSE.PropertyName = \"MechanicalEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.OverallEfficiency\", \"OverallEfficiency\");\r\n            ifcPSE.PropertyName = \"OverallEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.PressureRise\", \"PressureRise\");\r\n            ifcPSE.PropertyName = \"PressureRise\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRiseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.RotationSpeed\", \"RotationSpeed\");\r\n            ifcPSE.PropertyName = \"RotationSpeed\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RotationSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.Flowrate\", \"Flowrate\");\r\n            ifcPSE.PropertyName = \"Flowrate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.Power\", \"Power\");\r\n            ifcPSE.PropertyName = \"Power\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PumpPHistory\"))\r\n         {\r\n            propertySetPumpPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.MechanicalEfficiency\", \"MechanicalEfficiency\");\r\n            ifcPSE.PropertyName = \"MechanicalEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.OverallEfficiency\", \"OverallEfficiency\");\r\n            ifcPSE.PropertyName = \"OverallEfficiency\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.PressureRise\", \"PressureRise\");\r\n            ifcPSE.PropertyName = \"PressureRise\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRiseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.RotationSpeed\", \"RotationSpeed\");\r\n            ifcPSE.PropertyName = \"RotationSpeed\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RotationSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.Flowrate\", \"Flowrate\");\r\n            ifcPSE.PropertyName = \"Flowrate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.Power\", \"Power\");\r\n            ifcPSE.PropertyName = \"Power\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PumpPHistory\"))\r\n         {\r\n            propertySetPumpPHistory.EntityTypes.Add(IFCEntityType.IfcPump);\r\n            propertySetPumpPHistory.ObjectType = \"IfcPump\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.MechanicalEfficiency\", \"MechanicalEfficiency\");\r\n            ifcPSE.PropertyName = \"MechanicalEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mechanical Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"機械効率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.OverallEfficiency\", \"OverallEfficiency\");\r\n            ifcPSE.PropertyName = \"OverallEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Overall Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"全効率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.PressureRise\", \"PressureRise\");\r\n            ifcPSE.PropertyName = \"PressureRise\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure Rise\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"昇圧\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRiseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.RotationSpeed\", \"RotationSpeed\");\r\n            ifcPSE.PropertyName = \"RotationSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Rotation Speed\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"回転速度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RotationSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.Flowrate\", \"Flowrate\");\r\n            ifcPSE.PropertyName = \"Flowrate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flowrate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.Power\", \"Power\");\r\n            ifcPSE.PropertyName = \"Power\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Power\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"動力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PumpPHistory\"))\r\n         {\r\n            propertySetPumpPHistory.EntityTypes.Add(IFCEntityType.IfcPump);\r\n            propertySetPumpPHistory.ObjectType = \"IfcPump\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.MechanicalEfficiency\", \"MechanicalEfficiency\");\r\n            ifcPSE.PropertyName = \"MechanicalEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.OverallEfficiency\", \"OverallEfficiency\");\r\n            ifcPSE.PropertyName = \"OverallEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.PressureRise\", \"PressureRise\");\r\n            ifcPSE.PropertyName = \"PressureRise\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRiseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.RotationSpeed\", \"RotationSpeed\");\r\n            ifcPSE.PropertyName = \"RotationSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RotationSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.Flowrate\", \"Flowrate\");\r\n            ifcPSE.PropertyName = \"Flowrate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpPHistory.PowerHistory\", \"PowerHistory\");\r\n            ifcPSE.PropertyName = \"PowerHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPumpPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_PumpTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetPumpTypeCommon = new PropertySetDescription();\r\n         propertySetPumpTypeCommon.Name = \"Pset_PumpTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PumpTypeCommon\"))\r\n         {\r\n            propertySetPumpTypeCommon.EntityTypes.Add(IFCEntityType.IfcPumpType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.FlowRateRange\", \"FlowRateRange\");\r\n            ifcPSE.PropertyName = \"FlowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.MassFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.FlowResistanceRange\", \"FlowResistanceRange\");\r\n            ifcPSE.PropertyName = \"FlowResistanceRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowResistanceRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.CasingMaterial\", \"CasingMaterial\");\r\n            ifcPSE.PropertyName = \"CasingMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CasingMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.ImpellerMaterial\", \"ImpellerMaterial\");\r\n            ifcPSE.PropertyName = \"ImpellerMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpellerMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.ImpellerSealMaterial\", \"ImpellerSealMaterial\");\r\n            ifcPSE.PropertyName = \"ImpellerSealMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpellerSealMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.NetPositiveSuctionHead\", \"NetPositiveSuctionHead\");\r\n            ifcPSE.PropertyName = \"NetPositiveSuctionHead\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetPositiveSuctionHeadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.NominalRotationSpeed\", \"NominalRotationSpeed\");\r\n            ifcPSE.PropertyName = \"NominalRotationSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.RotationalFrequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalRotationSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PumpTypeCommon\"))\r\n         {\r\n            propertySetPumpTypeCommon.EntityTypes.Add(IFCEntityType.IfcPumpType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.FlowRateRange\", \"FlowRateRange\");\r\n            ifcPSE.PropertyName = \"FlowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.MassFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.FlowResistanceRange\", \"FlowResistanceRange\");\r\n            ifcPSE.PropertyName = \"FlowResistanceRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowResistanceRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.CasingMaterial\", \"CasingMaterial\");\r\n            ifcPSE.PropertyName = \"CasingMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CasingMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.ImpellerMaterial\", \"ImpellerMaterial\");\r\n            ifcPSE.PropertyName = \"ImpellerMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpellerMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.ImpellerSealMaterial\", \"ImpellerSealMaterial\");\r\n            ifcPSE.PropertyName = \"ImpellerSealMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImpellerSealMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.NetPositiveSuctionHead\", \"NetPositiveSuctionHead\");\r\n            ifcPSE.PropertyName = \"NetPositiveSuctionHead\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetPositiveSuctionHeadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.NominalRotationSpeed\", \"NominalRotationSpeed\");\r\n            ifcPSE.PropertyName = \"NominalRotationSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.RotationalFrequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalRotationSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PumpTypeCommon\"))\r\n         {\r\n            propertySetPumpTypeCommon.EntityTypes.Add(IFCEntityType.IfcPump);\r\n            propertySetPumpTypeCommon.ObjectType = \"IfcPump\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.FlowRateRange\", \"FlowRateRange\");\r\n            ifcPSE.PropertyName = \"FlowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.MassFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flow Rate Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流量範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.FlowResistanceRange\", \"FlowResistanceRange\");\r\n            ifcPSE.PropertyName = \"FlowResistanceRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flow Resistance Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流体抵抗の範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowResistanceRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Connection Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"接続サイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature Range\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"温度範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.NetPositiveSuctionHead\", \"NetPositiveSuctionHead\");\r\n            ifcPSE.PropertyName = \"NetPositiveSuctionHead\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Positive Suction Head\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味吸入側水頭\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetPositiveSuctionHeadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.NominalRotationSpeed\", \"NominalRotationSpeed\");\r\n            ifcPSE.PropertyName = \"NominalRotationSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.RotationalFrequency;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Rotation Speed\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"通常の回転速度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalRotationSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_PumpTypeCommon\"))\r\n         {\r\n            propertySetPumpTypeCommon.EntityTypes.Add(IFCEntityType.IfcPump);\r\n            propertySetPumpTypeCommon.EntityTypes.Add(IFCEntityType.IfcPumpType);\r\n            propertySetPumpTypeCommon.ObjectType = \"IfcPump\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.FlowRateRange\", \"FlowRateRange\");\r\n            ifcPSE.PropertyName = \"FlowRateRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.MassFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowRateRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.FlowResistanceRange\", \"FlowResistanceRange\");\r\n            ifcPSE.PropertyName = \"FlowResistanceRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowResistanceRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.ConnectionSize\", \"ConnectionSize\");\r\n            ifcPSE.PropertyName = \"ConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.TemperatureRange\", \"TemperatureRange\");\r\n            ifcPSE.PropertyName = \"TemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.NetPositiveSuctionHead\", \"NetPositiveSuctionHead\");\r\n            ifcPSE.PropertyName = \"NetPositiveSuctionHead\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetPositiveSuctionHeadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_PumpTypeCommon.NominalRotationSpeed\", \"NominalRotationSpeed\");\r\n            ifcPSE.PropertyName = \"NominalRotationSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.RotationalFrequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalRotationSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetPumpTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetPumpTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_QuantityTakeOff(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetQuantityTakeOff = new PropertySetDescription();\r\n         propertySetQuantityTakeOff.Name = \"Pset_QuantityTakeOff\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_QuantityTakeOff\"))\r\n         {\r\n            propertySetQuantityTakeOff.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuantityTakeOff.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuantityTakeOff.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuantityTakeOff.LayerQuantity.MaterialLayer\", \"LayerQuantity.MaterialLayer\");\r\n            ifcPSE.PropertyName = \"LayerQuantity.MaterialLayer\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialLayerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuantityTakeOff.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuantityTakeOff.LayerQuantity.LocalContext\", \"LayerQuantity.LocalContext\");\r\n            ifcPSE.PropertyName = \"LayerQuantity.LocalContext\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LocalContextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuantityTakeOff.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuantityTakeOff.LocalContext\", \"LocalContext\");\r\n            ifcPSE.PropertyName = \"LocalContext\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LocalContextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuantityTakeOff.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_QuantityTakeOff\"))\r\n         {\r\n            propertySetQuantityTakeOff.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuantityTakeOff.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuantityTakeOff.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuantityTakeOff.LayerQuantity.MaterialLayer\", \"LayerQuantity.MaterialLayer\");\r\n            ifcPSE.PropertyName = \"LayerQuantity.MaterialLayer\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialLayerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuantityTakeOff.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuantityTakeOff.LayerQuantity.LocalContext\", \"LayerQuantity.LocalContext\");\r\n            ifcPSE.PropertyName = \"LayerQuantity.LocalContext\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LocalContextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuantityTakeOff.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuantityTakeOff.LocalContext\", \"LocalContext\");\r\n            ifcPSE.PropertyName = \"LocalContext\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LocalContextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuantityTakeOff.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetQuantityTakeOff);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_QuayCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetQuayCommon = new PropertySetDescription();\r\n         propertySetQuayCommon.Name = \"Pset_QuayCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_QuayCommon\"))\r\n         {\r\n            propertySetQuayCommon.EntityTypes.Add(IFCEntityType.IfcMarineFacility);\r\n            propertySetQuayCommon.ObjectType = \"IfcMarineFacility\";\r\n            propertySetQuayCommon.PredefinedType = \"QUAY\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuayCommon.StructuralType\", \"StructuralType\");\r\n            ifcPSE.PropertyName = \"StructuralType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StructuralTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuayCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuayCommon.BentSpacing\", \"BentSpacing\");\r\n            ifcPSE.PropertyName = \"BentSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BentSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuayCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuayCommon.QuaySectionType\", \"QuaySectionType\");\r\n            ifcPSE.PropertyName = \"QuaySectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.QuaySectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuayCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuayCommon.Elevation\", \"Elevation\");\r\n            ifcPSE.PropertyName = \"Elevation\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElevationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuayCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetQuayCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_QuayDesignCriteria(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetQuayDesignCriteria = new PropertySetDescription();\r\n         propertySetQuayDesignCriteria.Name = \"Pset_QuayDesignCriteria\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_QuayDesignCriteria\"))\r\n         {\r\n            propertySetQuayDesignCriteria.EntityTypes.Add(IFCEntityType.IfcMarineFacility);\r\n            propertySetQuayDesignCriteria.ObjectType = \"IfcMarineFacility\";\r\n            propertySetQuayDesignCriteria.PredefinedType = \"QUAY\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuayDesignCriteria.HighWaterLevel\", \"HighWaterLevel\");\r\n            ifcPSE.PropertyName = \"HighWaterLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HighWaterLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuayDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuayDesignCriteria.LowWaterLevel\", \"LowWaterLevel\");\r\n            ifcPSE.PropertyName = \"LowWaterLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LowWaterLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuayDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuayDesignCriteria.ExtremeHighWaterLevel\", \"ExtremeHighWaterLevel\");\r\n            ifcPSE.PropertyName = \"ExtremeHighWaterLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExtremeHighWaterLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuayDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuayDesignCriteria.ExtremeLowWaterLevel\", \"ExtremeLowWaterLevel\");\r\n            ifcPSE.PropertyName = \"ExtremeLowWaterLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExtremeLowWaterLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuayDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuayDesignCriteria.ShipLoading\", \"ShipLoading\");\r\n            ifcPSE.PropertyName = \"ShipLoading\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShipLoadingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuayDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuayDesignCriteria.WaveLoading\", \"WaveLoading\");\r\n            ifcPSE.PropertyName = \"WaveLoading\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaveLoadingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuayDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuayDesignCriteria.FlowLoading\", \"FlowLoading\");\r\n            ifcPSE.PropertyName = \"FlowLoading\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowLoadingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuayDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuayDesignCriteria.UniformlyDistributedLoad\", \"UniformlyDistributedLoad\");\r\n            ifcPSE.PropertyName = \"UniformlyDistributedLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UniformlyDistributedLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuayDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_QuayDesignCriteria.EquipmentLoading\", \"EquipmentLoading\");\r\n            ifcPSE.PropertyName = \"EquipmentLoading\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EquipmentLoadingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetQuayDesignCriteria.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetQuayDesignCriteria);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RadiiKerbStone(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRadiiKerbStone = new PropertySetDescription();\r\n         propertySetRadiiKerbStone.Name = \"Pset_RadiiKerbStone\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RadiiKerbStone\"))\r\n         {\r\n            propertySetRadiiKerbStone.EntityTypes.Add(IFCEntityType.IfcKerb);\r\n            propertySetRadiiKerbStone.EntityTypes.Add(IFCEntityType.IfcKerbType);\r\n            propertySetRadiiKerbStone.ObjectType = \"IfcKerb\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RadiiKerbStone.CurveShape\", \"CurveShape\");\r\n            ifcPSE.PropertyName = \"CurveShape\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CurveShapeEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurveShapeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRadiiKerbStone.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RadiiKerbStone.Radius\", \"Radius\");\r\n            ifcPSE.PropertyName = \"Radius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRadiiKerbStone.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRadiiKerbStone);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RailingCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRailingCommon = new PropertySetDescription();\r\n         propertySetRailingCommon.Name = \"Pset_RailingCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RailingCommon\"))\r\n         {\r\n            propertySetRailingCommon.EntityTypes.Add(IFCEntityType.IfcRailing);\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailingCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailingCommon.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailingCommon.Diameter\", \"Diameter\");\r\n            ifcPSE.PropertyName = \"Diameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailingCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailingCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RailingCommon\"))\r\n         {\r\n            propertySetRailingCommon.EntityTypes.Add(IFCEntityType.IfcRailing);\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailingCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailingCommon.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailingCommon.Diameter\", \"Diameter\");\r\n            ifcPSE.PropertyName = \"Diameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailingCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailingCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RailingCommon\"))\r\n         {\r\n            propertySetRailingCommon.EntityTypes.Add(IFCEntityType.IfcRailing);\r\n            propertySetRailingCommon.ObjectType = \"IfcRailing\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailingCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bauteiltyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailingCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailingCommon.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Höhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Hauteur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"高さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"高度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailingCommon.Diameter\", \"Diameter\");\r\n            ifcPSE.PropertyName = \"Diameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Handlaufdurchmesser\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Diametre\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"直径\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"直径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailingCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Außenbauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EstExterieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否外部构件\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailingCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RailingCommon\"))\r\n         {\r\n            propertySetRailingCommon.EntityTypes.Add(IFCEntityType.IfcRailing);\r\n            propertySetRailingCommon.EntityTypes.Add(IFCEntityType.IfcRailingType);\r\n            propertySetRailingCommon.ObjectType = \"IfcRailing\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailingCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailingCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailingCommon.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailingCommon.Diameter\", \"Diameter\");\r\n            ifcPSE.PropertyName = \"Diameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailingCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailingCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRailingCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RailTypeBlade(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRailTypeBlade = new PropertySetDescription();\r\n         propertySetRailTypeBlade.Name = \"Pset_RailTypeBlade\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RailTypeBlade\"))\r\n         {\r\n            propertySetRailTypeBlade.EntityTypes.Add(IFCEntityType.IfcRail);\r\n            propertySetRailTypeBlade.EntityTypes.Add(IFCEntityType.IfcRailType);\r\n            propertySetRailTypeBlade.ObjectType = \"IfcRail\";\r\n            propertySetRailTypeBlade.PredefinedType = \"BLADE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeBlade.IsArticulatedBlade\", \"IsArticulatedBlade\");\r\n            ifcPSE.PropertyName = \"IsArticulatedBlade\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsArticulatedBladeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeBlade.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeBlade.IsFallbackBlade\", \"IsFallbackBlade\");\r\n            ifcPSE.PropertyName = \"IsFallbackBlade\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsFallbackBladeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeBlade.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeBlade.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeBlade.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeBlade.BladeRadius\", \"BladeRadius\");\r\n            ifcPSE.PropertyName = \"BladeRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BladeRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeBlade.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRailTypeBlade);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RailTypeCheckRail(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRailTypeCheckRail = new PropertySetDescription();\r\n         propertySetRailTypeCheckRail.Name = \"Pset_RailTypeCheckRail\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RailTypeCheckRail\"))\r\n         {\r\n            propertySetRailTypeCheckRail.EntityTypes.Add(IFCEntityType.IfcRail);\r\n            propertySetRailTypeCheckRail.EntityTypes.Add(IFCEntityType.IfcRailType);\r\n            propertySetRailTypeCheckRail.ObjectType = \"IfcRail\";\r\n            propertySetRailTypeCheckRail.PredefinedType = \"CHECKRAIL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeCheckRail.CheckRailType\", \"CheckRailType\");\r\n            ifcPSE.PropertyName = \"CheckRailType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CheckRailType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CheckRailTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeCheckRail.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeCheckRail.InstallationPlan\", \"InstallationPlan\");\r\n            ifcPSE.PropertyName = \"InstallationPlan\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstallationPlanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeCheckRail.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRailTypeCheckRail);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RailTypeGuardRail(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRailTypeGuardRail = new PropertySetDescription();\r\n         propertySetRailTypeGuardRail.Name = \"Pset_RailTypeGuardRail\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RailTypeGuardRail\"))\r\n         {\r\n            propertySetRailTypeGuardRail.EntityTypes.Add(IFCEntityType.IfcRail);\r\n            propertySetRailTypeGuardRail.EntityTypes.Add(IFCEntityType.IfcRailType);\r\n            propertySetRailTypeGuardRail.ObjectType = \"IfcRail\";\r\n            propertySetRailTypeGuardRail.PredefinedType = \"GUARDRAIL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeGuardRail.GuardRailConnection\", \"GuardRailConnection\");\r\n            ifcPSE.PropertyName = \"GuardRailConnection\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_GuardRailConnection);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GuardRailConnectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeGuardRail.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeGuardRail.PositionInTrack\", \"PositionInTrack\");\r\n            ifcPSE.PropertyName = \"PositionInTrack\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RelativePosition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PositionInTrackCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeGuardRail.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeGuardRail.GuardRailType\", \"GuardRailType\");\r\n            ifcPSE.PropertyName = \"GuardRailType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_GuardRailType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GuardRailTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeGuardRail.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRailTypeGuardRail);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RailTypeRail(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRailTypeRail = new PropertySetDescription();\r\n         propertySetRailTypeRail.Name = \"Pset_RailTypeRail\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RailTypeRail\"))\r\n         {\r\n            propertySetRailTypeRail.EntityTypes.Add(IFCEntityType.IfcRail);\r\n            propertySetRailTypeRail.EntityTypes.Add(IFCEntityType.IfcRailType);\r\n            propertySetRailTypeRail.ObjectType = \"IfcRail\";\r\n            propertySetRailTypeRail.PredefinedType = \"RAIL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeRail.PositionInTrack\", \"PositionInTrack\");\r\n            ifcPSE.PropertyName = \"PositionInTrack\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RelativePosition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PositionInTrackCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeRail.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeRail.TechnicalStandard\", \"TechnicalStandard\");\r\n            ifcPSE.PropertyName = \"TechnicalStandard\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TechnicalStandardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeRail.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeRail.RailDeliveryState\", \"RailDeliveryState\");\r\n            ifcPSE.PropertyName = \"RailDeliveryState\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RailDeliveryState);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RailDeliveryStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeRail.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeRail.RailCondition\", \"RailCondition\");\r\n            ifcPSE.PropertyName = \"RailCondition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RailCondition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RailConditionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeRail.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeRail.DrillOnRail\", \"DrillOnRail\");\r\n            ifcPSE.PropertyName = \"DrillOnRail\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DrillOnRail);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrillOnRailCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeRail.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeRail.RailElementaryLength\", \"RailElementaryLength\");\r\n            ifcPSE.PropertyName = \"RailElementaryLength\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RailElementaryLength);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RailElementaryLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeRail.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeRail.MinimumTensileStrength\", \"MinimumTensileStrength\");\r\n            ifcPSE.PropertyName = \"MinimumTensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumTensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeRail.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeRail.IsStainless\", \"IsStainless\");\r\n            ifcPSE.PropertyName = \"IsStainless\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsStainlessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeRail.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeRail.InstallationPlan\", \"InstallationPlan\");\r\n            ifcPSE.PropertyName = \"InstallationPlan\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstallationPlanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeRail.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRailTypeRail);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RailTypeStockRail(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRailTypeStockRail = new PropertySetDescription();\r\n         propertySetRailTypeStockRail.Name = \"Pset_RailTypeStockRail\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RailTypeStockRail\"))\r\n         {\r\n            propertySetRailTypeStockRail.EntityTypes.Add(IFCEntityType.IfcRail);\r\n            propertySetRailTypeStockRail.EntityTypes.Add(IFCEntityType.IfcRailType);\r\n            propertySetRailTypeStockRail.ObjectType = \"IfcRail\";\r\n            propertySetRailTypeStockRail.PredefinedType = \"STOCKRAIL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeStockRail.StockRailRadius\", \"StockRailRadius\");\r\n            ifcPSE.PropertyName = \"StockRailRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StockRailRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeStockRail.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeStockRail.InstallationPlan\", \"InstallationPlan\");\r\n            ifcPSE.PropertyName = \"InstallationPlan\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstallationPlanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeStockRail.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailTypeStockRail.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailTypeStockRail.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRailTypeStockRail);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RailwayBalise(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRailwayBalise = new PropertySetDescription();\r\n         propertySetRailwayBalise.Name = \"Pset_RailwayBalise\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RailwayBalise\"))\r\n         {\r\n            propertySetRailwayBalise.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetRailwayBalise.EntityTypes.Add(IFCEntityType.IfcCommunicationsApplianceType);\r\n            propertySetRailwayBalise.ObjectType = \"IfcCommunicationsAppliance\";\r\n            propertySetRailwayBalise.PredefinedType = \"TRANSPONDER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayBalise.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayBalise.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayBalise.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayBalise.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayBalise.NominalWeight\", \"NominalWeight\");\r\n            ifcPSE.PropertyName = \"NominalWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayBalise.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayBalise.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayBalise.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayBalise.FailureInformation\", \"FailureInformation\");\r\n            ifcPSE.PropertyName = \"FailureInformation\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FailureInformationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayBalise.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayBalise.RailwayBaliseType\", \"RailwayBaliseType\");\r\n            ifcPSE.PropertyName = \"RailwayBaliseType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RailwayBaliseType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RailwayBaliseTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayBalise.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayBalise.DetectionRange\", \"DetectionRange\");\r\n            ifcPSE.PropertyName = \"DetectionRange\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DetectionRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayBalise.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayBalise.InformationLength\", \"InformationLength\");\r\n            ifcPSE.PropertyName = \"InformationLength\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InformationLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayBalise.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayBalise.TransmissionRate\", \"TransmissionRate\");\r\n            ifcPSE.PropertyName = \"TransmissionRate\";\r\n            ifcPSE.PropertyType = PropertyType.IntegerCountRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransmissionRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayBalise.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayBalise.OperationalTemperatureRange\", \"OperationalTemperatureRange\");\r\n            ifcPSE.PropertyName = \"OperationalTemperatureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationalTemperatureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayBalise.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayBalise.IP_Code\", \"IP_Code\");\r\n            ifcPSE.PropertyName = \"IP_Code\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IP_CodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayBalise.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRailwayBalise);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RailwayCableCarrier(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRailwayCableCarrier = new PropertySetDescription();\r\n         propertySetRailwayCableCarrier.Name = \"Pset_RailwayCableCarrier\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RailwayCableCarrier\"))\r\n         {\r\n            propertySetRailwayCableCarrier.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegment);\r\n            propertySetRailwayCableCarrier.ObjectType = \"IfcCableCarrierSegment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayCableCarrier.NumberOfCrossedTracks\", \"NumberOfCrossedTracks\");\r\n            ifcPSE.PropertyName = \"NumberOfCrossedTracks\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCrossedTracksCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayCableCarrier.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRailwayCableCarrier);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RailwayLevelCrossing(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRailwayLevelCrossing = new PropertySetDescription();\r\n         propertySetRailwayLevelCrossing.Name = \"Pset_RailwayLevelCrossing\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RailwayLevelCrossing\"))\r\n         {\r\n            propertySetRailwayLevelCrossing.EntityTypes.Add(IFCEntityType.IfcFacilityPartCommon);\r\n            propertySetRailwayLevelCrossing.ObjectType = \"IfcFacilityPartCommon\";\r\n            propertySetRailwayLevelCrossing.PredefinedType = \"LEVELCROSSING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayLevelCrossing.IsAccessibleByVehicle\", \"IsAccessibleByVehicle\");\r\n            ifcPSE.PropertyName = \"IsAccessibleByVehicle\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsAccessibleByVehicleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayLevelCrossing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayLevelCrossing.HasRailDrainage\", \"HasRailDrainage\");\r\n            ifcPSE.PropertyName = \"HasRailDrainage\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasRailDrainageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayLevelCrossing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayLevelCrossing.IsPrivateOwner\", \"IsPrivateOwner\");\r\n            ifcPSE.PropertyName = \"IsPrivateOwner\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsPrivateOwnerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayLevelCrossing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayLevelCrossing.PermissiblePavementLoad\", \"PermissiblePavementLoad\");\r\n            ifcPSE.PropertyName = \"PermissiblePavementLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PermissiblePavementLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayLevelCrossing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayLevelCrossing.IsSecuredBySignalingSystem\", \"IsSecuredBySignalingSystem\");\r\n            ifcPSE.PropertyName = \"IsSecuredBySignalingSystem\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSecuredBySignalingSystemCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayLevelCrossing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayLevelCrossing.IsExceptionalTransportRoute\", \"IsExceptionalTransportRoute\");\r\n            ifcPSE.PropertyName = \"IsExceptionalTransportRoute\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExceptionalTransportRouteCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayLevelCrossing.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRailwayLevelCrossing);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RailwaySignalAspect(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRailwaySignalAspect = new PropertySetDescription();\r\n         propertySetRailwaySignalAspect.Name = \"Pset_RailwaySignalAspect\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RailwaySignalAspect\"))\r\n         {\r\n            propertySetRailwaySignalAspect.EntityTypes.Add(IFCEntityType.IfcSignal);\r\n            propertySetRailwaySignalAspect.EntityTypes.Add(IFCEntityType.IfcSign);\r\n            propertySetRailwaySignalAspect.EntityTypes.Add(IFCEntityType.IfcSignalType);\r\n            propertySetRailwaySignalAspect.EntityTypes.Add(IFCEntityType.IfcSignType);\r\n            propertySetRailwaySignalAspect.ObjectType = \"IfcSignal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalAspect.SignalAspectSymbol\", \"SignalAspectSymbol\");\r\n            ifcPSE.PropertyName = \"SignalAspectSymbol\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalAspectSymbolCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalAspect.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalAspect.AppliesToTrainCategory\", \"AppliesToTrainCategory\");\r\n            ifcPSE.PropertyName = \"AppliesToTrainCategory\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TrainCategory);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AppliesToTrainCategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalAspect.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalAspect.SignalAspectType\", \"SignalAspectType\");\r\n            ifcPSE.PropertyName = \"SignalAspectType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalAspectTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalAspect.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalAspect.SignLegend\", \"SignLegend\");\r\n            ifcPSE.PropertyName = \"SignLegend\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignLegendCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalAspect.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRailwaySignalAspect);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RailwaySignalOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRailwaySignalOccurrence = new PropertySetDescription();\r\n         propertySetRailwaySignalOccurrence.Name = \"Pset_RailwaySignalOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RailwaySignalOccurrence\"))\r\n         {\r\n            propertySetRailwaySignalOccurrence.EntityTypes.Add(IFCEntityType.IfcSignal);\r\n            propertySetRailwaySignalOccurrence.ObjectType = \"IfcSignal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalOccurrence.ApproachSpeed\", \"ApproachSpeed\");\r\n            ifcPSE.PropertyName = \"ApproachSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApproachSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalOccurrence.HandSignallingProhibited\", \"HandSignallingProhibited\");\r\n            ifcPSE.PropertyName = \"HandSignallingProhibited\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandSignallingProhibitedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalOccurrence.LimitedClearances\", \"LimitedClearances\");\r\n            ifcPSE.PropertyName = \"LimitedClearances\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LimitedClearancesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalOccurrence.NumberOfLampsNotUsed\", \"NumberOfLampsNotUsed\");\r\n            ifcPSE.PropertyName = \"NumberOfLampsNotUsed\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfLampsNotUsedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalOccurrence.RequiresOLEMesh\", \"RequiresOLEMesh\");\r\n            ifcPSE.PropertyName = \"RequiresOLEMesh\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequiresOLEMeshCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalOccurrence.RequiresSafetyHandrail\", \"RequiresSafetyHandrail\");\r\n            ifcPSE.PropertyName = \"RequiresSafetyHandrail\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequiresSafetyHandrailCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalOccurrence.SignalPostTelephoneID\", \"SignalPostTelephoneID\");\r\n            ifcPSE.PropertyName = \"SignalPostTelephoneID\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalPostTelephoneIDCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalOccurrence.SignalPostTelephoneType\", \"SignalPostTelephoneType\");\r\n            ifcPSE.PropertyName = \"SignalPostTelephoneType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalPostTelephoneTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalOccurrence.SpecialPositionArrangement\", \"SpecialPositionArrangement\");\r\n            ifcPSE.PropertyName = \"SpecialPositionArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpecialPositionArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalOccurrence.HinderingObstaclesDescription\", \"HinderingObstaclesDescription\");\r\n            ifcPSE.PropertyName = \"HinderingObstaclesDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HinderingObstaclesDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalOccurrence.SignalWalkwayLength\", \"SignalWalkwayLength\");\r\n            ifcPSE.PropertyName = \"SignalWalkwayLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalWalkwayLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalOccurrence.RequiresBannerSignal\", \"RequiresBannerSignal\");\r\n            ifcPSE.PropertyName = \"RequiresBannerSignal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequiresBannerSignalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalOccurrence.DistanceToStopMark\", \"DistanceToStopMark\");\r\n            ifcPSE.PropertyName = \"DistanceToStopMark\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DistanceToStopMarkCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRailwaySignalOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RailwaySignalSighting(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRailwaySignalSighting = new PropertySetDescription();\r\n         propertySetRailwaySignalSighting.Name = \"Pset_RailwaySignalSighting\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RailwaySignalSighting\"))\r\n         {\r\n            propertySetRailwaySignalSighting.EntityTypes.Add(IFCEntityType.IfcSignal);\r\n            propertySetRailwaySignalSighting.EntityTypes.Add(IFCEntityType.IfcSign);\r\n            propertySetRailwaySignalSighting.ObjectType = \"IfcSignal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalSighting.SignalSightingAchievableDistance\", \"SignalSightingAchievableDistance\");\r\n            ifcPSE.PropertyName = \"SignalSightingAchievableDistance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalSightingAchievableDistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalSighting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalSighting.SignalSightingAvailableDistance\", \"SignalSightingAvailableDistance\");\r\n            ifcPSE.PropertyName = \"SignalSightingAvailableDistance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalSightingAvailableDistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalSighting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalSighting.SignalSightingCombinedWithRepeater\", \"SignalSightingCombinedWithRepeater\");\r\n            ifcPSE.PropertyName = \"SignalSightingCombinedWithRepeater\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalSightingCombinedWithRepeaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalSighting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalSighting.SignalSightingMinimum\", \"SignalSightingMinimum\");\r\n            ifcPSE.PropertyName = \"SignalSightingMinimum\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalSightingMinimumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalSighting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalSighting.SignalSightingPreferred\", \"SignalSightingPreferred\");\r\n            ifcPSE.PropertyName = \"SignalSightingPreferred\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalSightingPreferredCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalSighting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalSighting.SignalSightingRouteIndicator\", \"SignalSightingRouteIndicator\");\r\n            ifcPSE.PropertyName = \"SignalSightingRouteIndicator\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalSightingRouteIndicatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalSighting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalSighting.SignalViewingMinimumInFront\", \"SignalViewingMinimumInFront\");\r\n            ifcPSE.PropertyName = \"SignalViewingMinimumInFront\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalViewingMinimumInFrontCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalSighting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRailwaySignalSighting);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RailwaySignalType(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRailwaySignalType = new PropertySetDescription();\r\n         propertySetRailwaySignalType.Name = \"Pset_RailwaySignalType\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RailwaySignalType\"))\r\n         {\r\n            propertySetRailwaySignalType.EntityTypes.Add(IFCEntityType.IfcSignal);\r\n            propertySetRailwaySignalType.EntityTypes.Add(IFCEntityType.IfcSignalType);\r\n            propertySetRailwaySignalType.ObjectType = \"IfcSignal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalType.SignalIndicatorType\", \"SignalIndicatorType\");\r\n            ifcPSE.PropertyName = \"SignalIndicatorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SignalIndicatorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalIndicatorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalType.LensDiffuserType\", \"LensDiffuserType\");\r\n            ifcPSE.PropertyName = \"LensDiffuserType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LensDiffuserTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalType.HasConductorRailGuardBoard\", \"HasConductorRailGuardBoard\");\r\n            ifcPSE.PropertyName = \"HasConductorRailGuardBoard\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasConductorRailGuardBoardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalType.MaximumDisplayDistance\", \"MaximumDisplayDistance\");\r\n            ifcPSE.PropertyName = \"MaximumDisplayDistance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumDisplayDistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalType.RequiredDisplayDistance\", \"RequiredDisplayDistance\");\r\n            ifcPSE.PropertyName = \"RequiredDisplayDistance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequiredDisplayDistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalType.IsHighType\", \"IsHighType\");\r\n            ifcPSE.PropertyName = \"IsHighType\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsHighTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalType.SignalHoodLength\", \"SignalHoodLength\");\r\n            ifcPSE.PropertyName = \"SignalHoodLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalHoodLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalType.HotStripOrientation\", \"HotStripOrientation\");\r\n            ifcPSE.PropertyName = \"HotStripOrientation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HotStripOrientationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalType.LensDiffuserOrientation\", \"LensDiffuserOrientation\");\r\n            ifcPSE.PropertyName = \"LensDiffuserOrientation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LensDiffuserOrientationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalType.NumberOfLamps\", \"NumberOfLamps\");\r\n            ifcPSE.PropertyName = \"NumberOfLamps\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfLampsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalType.SignalMessage\", \"SignalMessage\");\r\n            ifcPSE.PropertyName = \"SignalMessage\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalMessageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalType.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwaySignalType.RailwaySignalType\", \"RailwaySignalType\");\r\n            ifcPSE.PropertyName = \"RailwaySignalType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RailwaySignalType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RailwaySignalTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwaySignalType.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRailwaySignalType);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RailwayTrackStructurePart(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRailwayTrackStructurePart = new PropertySetDescription();\r\n         propertySetRailwayTrackStructurePart.Name = \"Pset_RailwayTrackStructurePart\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RailwayTrackStructurePart\"))\r\n         {\r\n            propertySetRailwayTrackStructurePart.EntityTypes.Add(IFCEntityType.IfcRailwayPart);\r\n            propertySetRailwayTrackStructurePart.EntityTypes.Add(IFCEntityType.IfcRailwayPart);\r\n            propertySetRailwayTrackStructurePart.EntityTypes.Add(IFCEntityType.IfcRailwayPart);\r\n            propertySetRailwayTrackStructurePart.EntityTypes.Add(IFCEntityType.IfcRailwayPart);\r\n            propertySetRailwayTrackStructurePart.EntityTypes.Add(IFCEntityType.IfcRailwayPart);\r\n            propertySetRailwayTrackStructurePart.ObjectType = \"IfcRailwayPart\";\r\n            propertySetRailwayTrackStructurePart.PredefinedType = \"TRACKPART\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayTrackStructurePart.HasBallastTrack\", \"HasBallastTrack\");\r\n            ifcPSE.PropertyName = \"HasBallastTrack\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasBallastTrackCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayTrackStructurePart.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayTrackStructurePart.HasCWR\", \"HasCWR\");\r\n            ifcPSE.PropertyName = \"HasCWR\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasCWRCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayTrackStructurePart.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayTrackStructurePart.IsSunExposed\", \"IsSunExposed\");\r\n            ifcPSE.PropertyName = \"IsSunExposed\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSunExposedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayTrackStructurePart.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RailwayTrackStructurePart.TrackSupportingStructure\", \"TrackSupportingStructure\");\r\n            ifcPSE.PropertyName = \"TrackSupportingStructure\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TrackSupportingStructure);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrackSupportingStructureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRailwayTrackStructurePart.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRailwayTrackStructurePart);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RampCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRampCommon = new PropertySetDescription();\r\n         propertySetRampCommon.Name = \"Pset_RampCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RampCommon\"))\r\n         {\r\n            propertySetRampCommon.EntityTypes.Add(IFCEntityType.IfcRamp);\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.RequiredHeadroom\", \"RequiredHeadroom\");\r\n            ifcPSE.PropertyName = \"RequiredHeadroom\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequiredHeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.RequiredSlope\", \"RequiredSlope\");\r\n            ifcPSE.PropertyName = \"RequiredSlope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequiredSlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.HasNonSkidSurface\", \"HasNonSkidSurface\");\r\n            ifcPSE.PropertyName = \"HasNonSkidSurface\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasNonSkidSurfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RampCommon\"))\r\n         {\r\n            propertySetRampCommon.EntityTypes.Add(IFCEntityType.IfcRamp);\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.RequiredHeadroom\", \"RequiredHeadroom\");\r\n            ifcPSE.PropertyName = \"RequiredHeadroom\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequiredHeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.RequiredSlope\", \"RequiredSlope\");\r\n            ifcPSE.PropertyName = \"RequiredSlope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequiredSlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.HasNonSkidSurface\", \"HasNonSkidSurface\");\r\n            ifcPSE.PropertyName = \"HasNonSkidSurface\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasNonSkidSurfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RampCommon\"))\r\n         {\r\n            propertySetRampCommon.EntityTypes.Add(IFCEntityType.IfcRamp);\r\n            propertySetRampCommon.ObjectType = \"IfcRamp\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bauteiltyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.RequiredHeadroom\", \"RequiredHeadroom\");\r\n            ifcPSE.PropertyName = \"RequiredHeadroom\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"erforderliche Durchgangshöhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Required Headroom\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"HauteurPassageRequise\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"要求頭高余裕\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"所需净空\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequiredHeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.RequiredSlope\", \"RequiredSlope\");\r\n            ifcPSE.PropertyName = \"RequiredSlope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"erforderliche Neigung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Required Slope\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"InclinaisonRequise\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"要求傾斜\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"所需坡度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequiredSlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Behindertengerecht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Handicap Accessible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"AccessibleHandicapes\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ハンディキャップアクセス可能性\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否为无障碍设施\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.HasNonSkidSurface\", \"HasNonSkidSurface\");\r\n            ifcPSE.PropertyName = \"HasNonSkidSurface\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nichtrutschende Oberfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Non Skid Surface\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"AntiDerapant\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"滑り止め表面加工区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"表面是否防滑\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasNonSkidSurfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Fluchtweg\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Exit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"SortieSecours\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"非常口区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否为紧急出口\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Außenbauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EstExterieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否外部构件\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Feuerwiderstandsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ResistanceAuFeu\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐火等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"防火等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RampCommon\"))\r\n         {\r\n            propertySetRampCommon.EntityTypes.Add(IFCEntityType.IfcRamp);\r\n            propertySetRampCommon.EntityTypes.Add(IFCEntityType.IfcRampType);\r\n            propertySetRampCommon.ObjectType = \"IfcRamp\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.RequiredHeadroom\", \"RequiredHeadroom\");\r\n            ifcPSE.PropertyName = \"RequiredHeadroom\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequiredHeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.RequiredSlope\", \"RequiredSlope\");\r\n            ifcPSE.PropertyName = \"RequiredSlope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequiredSlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.HasNonSkidSurface\", \"HasNonSkidSurface\");\r\n            ifcPSE.PropertyName = \"HasNonSkidSurface\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasNonSkidSurfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRampCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RampFlightCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRampFlightCommon = new PropertySetDescription();\r\n         propertySetRampFlightCommon.Name = \"Pset_RampFlightCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RampFlightCommon\"))\r\n         {\r\n            propertySetRampFlightCommon.EntityTypes.Add(IFCEntityType.IfcRampFlight);\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampFlightCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampFlightCommon.Headroom\", \"Headroom\");\r\n            ifcPSE.PropertyName = \"Headroom\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampFlightCommon.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampFlightCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RampFlightCommon\"))\r\n         {\r\n            propertySetRampFlightCommon.EntityTypes.Add(IFCEntityType.IfcRampFlight);\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampFlightCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampFlightCommon.Headroom\", \"Headroom\");\r\n            ifcPSE.PropertyName = \"Headroom\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampFlightCommon.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampFlightCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RampFlightCommon\"))\r\n         {\r\n            propertySetRampFlightCommon.EntityTypes.Add(IFCEntityType.IfcRampFlight);\r\n            propertySetRampFlightCommon.ObjectType = \"IfcRampFlight\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampFlightCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bauteiltyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampFlightCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampFlightCommon.Headroom\", \"Headroom\");\r\n            ifcPSE.PropertyName = \"Headroom\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Durchgangshöhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Headroom\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"HauteurPassage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"頭上スペース\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"净空\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampFlightCommon.ClearWidth\", \"ClearWidth\");\r\n            ifcPSE.PropertyName = \"ClearWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Lichte Breite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Clear Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"LargeurPassage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"通路有効寸法\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"净宽\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampFlightCommon.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Neigung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Slope\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Pente\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"通路の傾斜角度(水平からの角度）\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"坡度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampFlightCommon.CounterSlope\", \"CounterSlope\");\r\n            ifcPSE.PropertyName = \"CounterSlope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Gegenneigung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Counter Slope\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ContrePente\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"通路の傾斜角度(垂直との角度）\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"反向坡度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CounterSlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampFlightCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RampFlightCommon\"))\r\n         {\r\n            propertySetRampFlightCommon.EntityTypes.Add(IFCEntityType.IfcRampFlight);\r\n            propertySetRampFlightCommon.EntityTypes.Add(IFCEntityType.IfcRampFlightType);\r\n            propertySetRampFlightCommon.ObjectType = \"IfcRampFlight\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampFlightCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampFlightCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampFlightCommon.Headroom\", \"Headroom\");\r\n            ifcPSE.PropertyName = \"Headroom\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampFlightCommon.ClearWidth\", \"ClearWidth\");\r\n            ifcPSE.PropertyName = \"ClearWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampFlightCommon.Slope\", \"Slope\");\r\n            ifcPSE.PropertyName = \"Slope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RampFlightCommon.CounterSlope\", \"CounterSlope\");\r\n            ifcPSE.PropertyName = \"CounterSlope\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CounterSlopeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRampFlightCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRampFlightCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ReferentCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetReferentCommon = new PropertySetDescription();\r\n         propertySetReferentCommon.Name = \"Pset_ReferentCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReferentCommon\"))\r\n         {\r\n            propertySetReferentCommon.EntityTypes.Add(IFCEntityType.IfcReferent);\r\n            propertySetReferentCommon.ObjectType = \"IfcReferent\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReferentCommon.NameFormat\", \"NameFormat\");\r\n            ifcPSE.PropertyName = \"NameFormat\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NameFormatCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReferentCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetReferentCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ReinforcementBarCountOfIndependentFooting(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetReinforcementBarCountOfIndependentFooting = new PropertySetDescription();\r\n         propertySetReinforcementBarCountOfIndependentFooting.Name = \"Pset_ReinforcementBarCountOfIndependentFooting\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarCountOfIndependentFooting\"))\r\n         {\r\n            propertySetReinforcementBarCountOfIndependentFooting.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.XDirectionLowerBarCount\", \"XDirectionLowerBarCount\");\r\n            ifcPSE.PropertyName = \"XDirectionLowerBarCount\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.XDirectionLowerBarCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.YDirectionLowerBarCount\", \"YDirectionLowerBarCount\");\r\n            ifcPSE.PropertyName = \"YDirectionLowerBarCount\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YDirectionLowerBarCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.XDirectionUpperBarCount\", \"XDirectionUpperBarCount\");\r\n            ifcPSE.PropertyName = \"XDirectionUpperBarCount\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.XDirectionUpperBarCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.YDirectionUpperBarCount\", \"YDirectionUpperBarCount\");\r\n            ifcPSE.PropertyName = \"YDirectionUpperBarCount\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YDirectionUpperBarCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarCountOfIndependentFooting\"))\r\n         {\r\n            propertySetReinforcementBarCountOfIndependentFooting.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.XDirectionLowerBarCount\", \"XDirectionLowerBarCount\");\r\n            ifcPSE.PropertyName = \"XDirectionLowerBarCount\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.XDirectionLowerBarCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.YDirectionLowerBarCount\", \"YDirectionLowerBarCount\");\r\n            ifcPSE.PropertyName = \"YDirectionLowerBarCount\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YDirectionLowerBarCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.XDirectionUpperBarCount\", \"XDirectionUpperBarCount\");\r\n            ifcPSE.PropertyName = \"XDirectionUpperBarCount\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.XDirectionUpperBarCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.YDirectionUpperBarCount\", \"YDirectionUpperBarCount\");\r\n            ifcPSE.PropertyName = \"YDirectionUpperBarCount\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YDirectionUpperBarCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarCountOfIndependentFooting\"))\r\n         {\r\n            propertySetReinforcementBarCountOfIndependentFooting.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            propertySetReinforcementBarCountOfIndependentFooting.ObjectType = \"IfcFooting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Description\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"説明\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.XDirectionLowerBarCount\", \"XDirectionLowerBarCount\");\r\n            ifcPSE.PropertyName = \"XDirectionLowerBarCount\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"XDirection Lower Bar Count\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"X方向下端筋本数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.XDirectionLowerBarCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.YDirectionLowerBarCount\", \"YDirectionLowerBarCount\");\r\n            ifcPSE.PropertyName = \"YDirectionLowerBarCount\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"YDirection Lower Bar Count\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"Y方向下端筋本数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YDirectionLowerBarCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.XDirectionUpperBarCount\", \"XDirectionUpperBarCount\");\r\n            ifcPSE.PropertyName = \"XDirectionUpperBarCount\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"XDirection Upper Bar Count\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"X方向上端筋本数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.XDirectionUpperBarCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.YDirectionUpperBarCount\", \"YDirectionUpperBarCount\");\r\n            ifcPSE.PropertyName = \"YDirectionUpperBarCount\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"YDirection Upper Bar Count\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"Y方向上端筋本数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YDirectionUpperBarCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarCountOfIndependentFooting\"))\r\n         {\r\n            propertySetReinforcementBarCountOfIndependentFooting.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            propertySetReinforcementBarCountOfIndependentFooting.EntityTypes.Add(IFCEntityType.IfcFootingType);\r\n            propertySetReinforcementBarCountOfIndependentFooting.ObjectType = \"IfcFooting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.XDirectionLowerBarCount\", \"XDirectionLowerBarCount\");\r\n            ifcPSE.PropertyName = \"XDirectionLowerBarCount\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.XDirectionLowerBarCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.YDirectionLowerBarCount\", \"YDirectionLowerBarCount\");\r\n            ifcPSE.PropertyName = \"YDirectionLowerBarCount\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YDirectionLowerBarCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.XDirectionUpperBarCount\", \"XDirectionUpperBarCount\");\r\n            ifcPSE.PropertyName = \"XDirectionUpperBarCount\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.XDirectionUpperBarCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarCountOfIndependentFooting.YDirectionUpperBarCount\", \"YDirectionUpperBarCount\");\r\n            ifcPSE.PropertyName = \"YDirectionUpperBarCount\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YDirectionUpperBarCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarCountOfIndependentFooting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetReinforcementBarCountOfIndependentFooting);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ReinforcementBarPitchOfBeam(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetReinforcementBarPitchOfBeam = new PropertySetDescription();\r\n         propertySetReinforcementBarPitchOfBeam.Name = \"Pset_ReinforcementBarPitchOfBeam\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfBeam\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfBeam.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfBeam.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfBeam.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfBeam.StirrupBarPitch\", \"StirrupBarPitch\");\r\n            ifcPSE.PropertyName = \"StirrupBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StirrupBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfBeam.SpacingBarPitch\", \"SpacingBarPitch\");\r\n            ifcPSE.PropertyName = \"SpacingBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpacingBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfBeam.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfBeam\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfBeam.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfBeam.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfBeam.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfBeam.StirrupBarPitch\", \"StirrupBarPitch\");\r\n            ifcPSE.PropertyName = \"StirrupBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StirrupBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfBeam.SpacingBarPitch\", \"SpacingBarPitch\");\r\n            ifcPSE.PropertyName = \"SpacingBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpacingBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfBeam.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfBeam\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfBeam.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            propertySetReinforcementBarPitchOfBeam.ObjectType = \"IfcBeam\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfBeam.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Description\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"説明\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfBeam.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfBeam.StirrupBarPitch\", \"StirrupBarPitch\");\r\n            ifcPSE.PropertyName = \"StirrupBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Stirrup Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"肋筋間隔\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StirrupBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfBeam.SpacingBarPitch\", \"SpacingBarPitch\");\r\n            ifcPSE.PropertyName = \"SpacingBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Spacing Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"幅止筋間隔\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpacingBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfBeam.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfBeam\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfBeam.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            propertySetReinforcementBarPitchOfBeam.EntityTypes.Add(IFCEntityType.IfcBeamType);\r\n            propertySetReinforcementBarPitchOfBeam.ObjectType = \"IfcBeam\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfBeam.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfBeam.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfBeam.StirrupBarPitch\", \"StirrupBarPitch\");\r\n            ifcPSE.PropertyName = \"StirrupBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StirrupBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfBeam.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfBeam.SpacingBarPitch\", \"SpacingBarPitch\");\r\n            ifcPSE.PropertyName = \"SpacingBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpacingBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfBeam.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetReinforcementBarPitchOfBeam);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ReinforcementBarPitchOfColumn(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetReinforcementBarPitchOfColumn = new PropertySetDescription();\r\n         propertySetReinforcementBarPitchOfColumn.Name = \"Pset_ReinforcementBarPitchOfColumn\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfColumn\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfColumn.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.ReinforcementBarType\", \"ReinforcementBarType\");\r\n            ifcPSE.PropertyName = \"ReinforcementBarType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_ReinforcementBarType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementBarTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.HoopBarPitch\", \"HoopBarPitch\");\r\n            ifcPSE.PropertyName = \"HoopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.XDirectionTieHoopBarPitch\", \"XDirectionTieHoopBarPitch\");\r\n            ifcPSE.PropertyName = \"XDirectionTieHoopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.XDirectionTieHoopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.XDirectionTieHoopCount\", \"XDirectionTieHoopCount\");\r\n            ifcPSE.PropertyName = \"XDirectionTieHoopCount\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.XDirectionTieHoopCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.YDirectionTieHoopBarPitch\", \"YDirectionTieHoopBarPitch\");\r\n            ifcPSE.PropertyName = \"YDirectionTieHoopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YDirectionTieHoopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.YDirectionTieHoopCount\", \"YDirectionTieHoopCount\");\r\n            ifcPSE.PropertyName = \"YDirectionTieHoopCount\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YDirectionTieHoopCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfColumn\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfColumn.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.ReinforcementBarType\", \"ReinforcementBarType\");\r\n            ifcPSE.PropertyName = \"ReinforcementBarType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ReinforcementBarType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementBarTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.HoopBarPitch\", \"HoopBarPitch\");\r\n            ifcPSE.PropertyName = \"HoopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.XDirectionTieHoopBarPitch\", \"XDirectionTieHoopBarPitch\");\r\n            ifcPSE.PropertyName = \"XDirectionTieHoopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.XDirectionTieHoopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.XDirectionTieHoopCount\", \"XDirectionTieHoopCount\");\r\n            ifcPSE.PropertyName = \"XDirectionTieHoopCount\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.XDirectionTieHoopCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.YDirectionTieHoopBarPitch\", \"YDirectionTieHoopBarPitch\");\r\n            ifcPSE.PropertyName = \"YDirectionTieHoopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YDirectionTieHoopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.YDirectionTieHoopCount\", \"YDirectionTieHoopCount\");\r\n            ifcPSE.PropertyName = \"YDirectionTieHoopCount\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YDirectionTieHoopCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfColumn\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfColumn.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            propertySetReinforcementBarPitchOfColumn.ObjectType = \"IfcColumn\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Description\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"説明\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.ReinforcementBarType\", \"ReinforcementBarType\");\r\n            ifcPSE.PropertyName = \"ReinforcementBarType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ReinforcementBarType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reinforcement Bar Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"補強筋タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementBarTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.HoopBarPitch\", \"HoopBarPitch\");\r\n            ifcPSE.PropertyName = \"HoopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Hoop Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"帯筋間隔\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.XDirectionTieHoopBarPitch\", \"XDirectionTieHoopBarPitch\");\r\n            ifcPSE.PropertyName = \"XDirectionTieHoopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"XDirection Tie Hoop Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"Ｘ方向巾止め筋間隔\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.XDirectionTieHoopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.XDirectionTieHoopCount\", \"XDirectionTieHoopCount\");\r\n            ifcPSE.PropertyName = \"XDirectionTieHoopCount\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"XDirection Tie Hoop Count\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"Ｘ方向巾止め筋本数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.XDirectionTieHoopCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.YDirectionTieHoopBarPitch\", \"YDirectionTieHoopBarPitch\");\r\n            ifcPSE.PropertyName = \"YDirectionTieHoopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"YDirection Tie Hoop Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"Y方向巾止め筋間隔\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YDirectionTieHoopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.YDirectionTieHoopCount\", \"YDirectionTieHoopCount\");\r\n            ifcPSE.PropertyName = \"YDirectionTieHoopCount\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"YDirection Tie Hoop Count\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"Y方向巾止め筋本数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YDirectionTieHoopCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfColumn\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfColumn.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            propertySetReinforcementBarPitchOfColumn.EntityTypes.Add(IFCEntityType.IfcColumnType);\r\n            propertySetReinforcementBarPitchOfColumn.ObjectType = \"IfcColumn\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.ReinforcementBarType\", \"ReinforcementBarType\");\r\n            ifcPSE.PropertyName = \"ReinforcementBarType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ReinforcementBarType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReinforcementBarTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.HoopBarPitch\", \"HoopBarPitch\");\r\n            ifcPSE.PropertyName = \"HoopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HoopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.XDirectionTieHoopBarPitch\", \"XDirectionTieHoopBarPitch\");\r\n            ifcPSE.PropertyName = \"XDirectionTieHoopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.XDirectionTieHoopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.XDirectionTieHoopCount\", \"XDirectionTieHoopCount\");\r\n            ifcPSE.PropertyName = \"XDirectionTieHoopCount\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.XDirectionTieHoopCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.YDirectionTieHoopBarPitch\", \"YDirectionTieHoopBarPitch\");\r\n            ifcPSE.PropertyName = \"YDirectionTieHoopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YDirectionTieHoopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfColumn.YDirectionTieHoopCount\", \"YDirectionTieHoopCount\");\r\n            ifcPSE.PropertyName = \"YDirectionTieHoopCount\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.YDirectionTieHoopCountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfColumn.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetReinforcementBarPitchOfColumn);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ReinforcementBarPitchOfContinuousFooting(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetReinforcementBarPitchOfContinuousFooting = new PropertySetDescription();\r\n         propertySetReinforcementBarPitchOfContinuousFooting.Name = \"Pset_ReinforcementBarPitchOfContinuousFooting\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfContinuousFooting\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfContinuousFooting.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfContinuousFooting.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfContinuousFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfContinuousFooting.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfContinuousFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfContinuousFooting.CrossingUpperBarPitch\", \"CrossingUpperBarPitch\");\r\n            ifcPSE.PropertyName = \"CrossingUpperBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossingUpperBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfContinuousFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfContinuousFooting.CrossingLowerBarPitch\", \"CrossingLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"CrossingLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossingLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfContinuousFooting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfContinuousFooting\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfContinuousFooting.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfContinuousFooting.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfContinuousFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfContinuousFooting.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfContinuousFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfContinuousFooting.CrossingUpperBarPitch\", \"CrossingUpperBarPitch\");\r\n            ifcPSE.PropertyName = \"CrossingUpperBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossingUpperBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfContinuousFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfContinuousFooting.CrossingLowerBarPitch\", \"CrossingLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"CrossingLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossingLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfContinuousFooting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfContinuousFooting\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfContinuousFooting.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            propertySetReinforcementBarPitchOfContinuousFooting.ObjectType = \"IfcFooting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfContinuousFooting.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Description\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"説明\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfContinuousFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfContinuousFooting.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfContinuousFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfContinuousFooting.CrossingUpperBarPitch\", \"CrossingUpperBarPitch\");\r\n            ifcPSE.PropertyName = \"CrossingUpperBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Crossing Upper Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"上端筋間隔\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossingUpperBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfContinuousFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfContinuousFooting.CrossingLowerBarPitch\", \"CrossingLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"CrossingLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Crossing Lower Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"下端筋間隔\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossingLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfContinuousFooting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfContinuousFooting\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfContinuousFooting.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            propertySetReinforcementBarPitchOfContinuousFooting.EntityTypes.Add(IFCEntityType.IfcFootingType);\r\n            propertySetReinforcementBarPitchOfContinuousFooting.ObjectType = \"IfcFooting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfContinuousFooting.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfContinuousFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfContinuousFooting.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfContinuousFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfContinuousFooting.CrossingUpperBarPitch\", \"CrossingUpperBarPitch\");\r\n            ifcPSE.PropertyName = \"CrossingUpperBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossingUpperBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfContinuousFooting.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfContinuousFooting.CrossingLowerBarPitch\", \"CrossingLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"CrossingLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossingLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfContinuousFooting.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetReinforcementBarPitchOfContinuousFooting);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ReinforcementBarPitchOfSlab(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetReinforcementBarPitchOfSlab = new PropertySetDescription();\r\n         propertySetReinforcementBarPitchOfSlab.Name = \"Pset_ReinforcementBarPitchOfSlab\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfSlab\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfSlab.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongOutsideTopBarPitch\", \"LongOutsideTopBarPitch\");\r\n            ifcPSE.PropertyName = \"LongOutsideTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongOutsideTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongInsideCenterTopBarPitch\", \"LongInsideCenterTopBarPitch\");\r\n            ifcPSE.PropertyName = \"LongInsideCenterTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongInsideCenterTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongInsideEndTopBarPitch\", \"LongInsideEndTopBarPitch\");\r\n            ifcPSE.PropertyName = \"LongInsideEndTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongInsideEndTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortOutsideTopBarPitch\", \"ShortOutsideTopBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortOutsideTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortOutsideTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortInsideCenterTopBarPitch\", \"ShortInsideCenterTopBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortInsideCenterTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortInsideCenterTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortInsideEndTopBarPitch\", \"ShortInsideEndTopBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortInsideEndTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortInsideEndTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongOutsideLowerBarPitch\", \"LongOutsideLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"LongOutsideLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongOutsideLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongInsideCenterLowerBarPitch\", \"LongInsideCenterLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"LongInsideCenterLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongInsideCenterLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongInsideEndLowerBarPitch\", \"LongInsideEndLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"LongInsideEndLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongInsideEndLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortOutsideLowerBarPitch\", \"ShortOutsideLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortOutsideLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortOutsideLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortInsideCenterLowerBarPitch\", \"ShortInsideCenterLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortInsideCenterLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortInsideCenterLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortInsideEndLowerBarPitch\", \"ShortInsideEndLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortInsideEndLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortInsideEndLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfSlab\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfSlab.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongOutsideTopBarPitch\", \"LongOutsideTopBarPitch\");\r\n            ifcPSE.PropertyName = \"LongOutsideTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongOutsideTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongInsideCenterTopBarPitch\", \"LongInsideCenterTopBarPitch\");\r\n            ifcPSE.PropertyName = \"LongInsideCenterTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongInsideCenterTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongInsideEndTopBarPitch\", \"LongInsideEndTopBarPitch\");\r\n            ifcPSE.PropertyName = \"LongInsideEndTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongInsideEndTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortOutsideTopBarPitch\", \"ShortOutsideTopBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortOutsideTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortOutsideTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortInsideCenterTopBarPitch\", \"ShortInsideCenterTopBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortInsideCenterTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortInsideCenterTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortInsideEndTopBarPitch\", \"ShortInsideEndTopBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortInsideEndTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortInsideEndTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongOutsideLowerBarPitch\", \"LongOutsideLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"LongOutsideLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongOutsideLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongInsideCenterLowerBarPitch\", \"LongInsideCenterLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"LongInsideCenterLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongInsideCenterLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongInsideEndLowerBarPitch\", \"LongInsideEndLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"LongInsideEndLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongInsideEndLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortOutsideLowerBarPitch\", \"ShortOutsideLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortOutsideLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortOutsideLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortInsideCenterLowerBarPitch\", \"ShortInsideCenterLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortInsideCenterLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortInsideCenterLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortInsideEndLowerBarPitch\", \"ShortInsideEndLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortInsideEndLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortInsideEndLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfSlab\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfSlab.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetReinforcementBarPitchOfSlab.ObjectType = \"IfcSlab\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Description\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"説明\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongOutsideTopBarPitch\", \"LongOutsideTopBarPitch\");\r\n            ifcPSE.PropertyName = \"LongOutsideTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Long Outside Top Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長辺・柱列帯・上端ピッチ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongOutsideTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongInsideCenterTopBarPitch\", \"LongInsideCenterTopBarPitch\");\r\n            ifcPSE.PropertyName = \"LongInsideCenterTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Long Inside Center Top Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長辺・柱列帯・上端中央ピッチ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongInsideCenterTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongInsideEndTopBarPitch\", \"LongInsideEndTopBarPitch\");\r\n            ifcPSE.PropertyName = \"LongInsideEndTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Long Inside End Top Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長辺・柱列帯・上端端部ピッチ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongInsideEndTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortOutsideTopBarPitch\", \"ShortOutsideTopBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortOutsideTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Outside Top Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"短辺・柱列帯・上端ピッチ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortOutsideTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortInsideCenterTopBarPitch\", \"ShortInsideCenterTopBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortInsideCenterTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Inside Center Top Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"短辺・柱列帯・上端中央ピッチ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortInsideCenterTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortInsideEndTopBarPitch\", \"ShortInsideEndTopBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortInsideEndTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Inside End Top Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"短辺・柱列帯・上端端部ピッチ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortInsideEndTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongOutsideLowerBarPitch\", \"LongOutsideLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"LongOutsideLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Long Outside Lower Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長辺・柱列帯・下端ピッチ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongOutsideLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongInsideCenterLowerBarPitch\", \"LongInsideCenterLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"LongInsideCenterLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Long Inside Center Lower Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長辺・柱列帯・下端中央ピッチ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongInsideCenterLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongInsideEndLowerBarPitch\", \"LongInsideEndLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"LongInsideEndLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Long Inside End Lower Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長辺・柱列帯・下端端部ピッチ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongInsideEndLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortOutsideLowerBarPitch\", \"ShortOutsideLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortOutsideLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Outside Lower Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"短辺・柱列帯・下端ピッチ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortOutsideLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortInsideCenterLowerBarPitch\", \"ShortInsideCenterLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortInsideCenterLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Inside Center Lower Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"短辺・柱列帯・下端中央ピッチ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortInsideCenterLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortInsideEndLowerBarPitch\", \"ShortInsideEndLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortInsideEndLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Inside End Lower Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"短辺・柱列帯・下端端部ピッチ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortInsideEndLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfSlab\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfSlab.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetReinforcementBarPitchOfSlab.EntityTypes.Add(IFCEntityType.IfcSlabType);\r\n            propertySetReinforcementBarPitchOfSlab.ObjectType = \"IfcSlab\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongOutsideTopBarPitch\", \"LongOutsideTopBarPitch\");\r\n            ifcPSE.PropertyName = \"LongOutsideTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongOutsideTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongInsideCenterTopBarPitch\", \"LongInsideCenterTopBarPitch\");\r\n            ifcPSE.PropertyName = \"LongInsideCenterTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongInsideCenterTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongInsideEndTopBarPitch\", \"LongInsideEndTopBarPitch\");\r\n            ifcPSE.PropertyName = \"LongInsideEndTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongInsideEndTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortOutsideTopBarPitch\", \"ShortOutsideTopBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortOutsideTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortOutsideTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortInsideCenterTopBarPitch\", \"ShortInsideCenterTopBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortInsideCenterTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortInsideCenterTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortInsideEndTopBarPitch\", \"ShortInsideEndTopBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortInsideEndTopBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortInsideEndTopBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongOutsideLowerBarPitch\", \"LongOutsideLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"LongOutsideLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongOutsideLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongInsideCenterLowerBarPitch\", \"LongInsideCenterLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"LongInsideCenterLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongInsideCenterLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.LongInsideEndLowerBarPitch\", \"LongInsideEndLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"LongInsideEndLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongInsideEndLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortOutsideLowerBarPitch\", \"ShortOutsideLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortOutsideLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortOutsideLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortInsideCenterLowerBarPitch\", \"ShortInsideCenterLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortInsideCenterLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortInsideCenterLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfSlab.ShortInsideEndLowerBarPitch\", \"ShortInsideEndLowerBarPitch\");\r\n            ifcPSE.PropertyName = \"ShortInsideEndLowerBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortInsideEndLowerBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfSlab.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetReinforcementBarPitchOfSlab);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ReinforcementBarPitchOfWall(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetReinforcementBarPitchOfWall = new PropertySetDescription();\r\n         propertySetReinforcementBarPitchOfWall.Name = \"Pset_ReinforcementBarPitchOfWall\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfWall\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfWall.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.BarAllocationType\", \"BarAllocationType\");\r\n            ifcPSE.PropertyName = \"BarAllocationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_ReinforcementBarAllocationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BarAllocationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.VerticalBarPitch\", \"VerticalBarPitch\");\r\n            ifcPSE.PropertyName = \"VerticalBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VerticalBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.HorizontalBarPitch\", \"HorizontalBarPitch\");\r\n            ifcPSE.PropertyName = \"HorizontalBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HorizontalBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.SpacingBarPitch\", \"SpacingBarPitch\");\r\n            ifcPSE.PropertyName = \"SpacingBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpacingBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfWall\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfWall.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.BarAllocationType\", \"BarAllocationType\");\r\n            ifcPSE.PropertyName = \"BarAllocationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ReinforcementBarAllocationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BarAllocationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.VerticalBarPitch\", \"VerticalBarPitch\");\r\n            ifcPSE.PropertyName = \"VerticalBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VerticalBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.HorizontalBarPitch\", \"HorizontalBarPitch\");\r\n            ifcPSE.PropertyName = \"HorizontalBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HorizontalBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.SpacingBarPitch\", \"SpacingBarPitch\");\r\n            ifcPSE.PropertyName = \"SpacingBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpacingBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfWall\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfWall.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            propertySetReinforcementBarPitchOfWall.ObjectType = \"IfcWall\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Description\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"説明\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.BarAllocationType\", \"BarAllocationType\");\r\n            ifcPSE.PropertyName = \"BarAllocationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ReinforcementBarAllocationType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Bar Allocation Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"配筋タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BarAllocationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.VerticalBarPitch\", \"VerticalBarPitch\");\r\n            ifcPSE.PropertyName = \"VerticalBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Vertical Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"縦筋ピッチ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VerticalBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.HorizontalBarPitch\", \"HorizontalBarPitch\");\r\n            ifcPSE.PropertyName = \"HorizontalBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Horizontal Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"横筋ピッチ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HorizontalBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.SpacingBarPitch\", \"SpacingBarPitch\");\r\n            ifcPSE.PropertyName = \"SpacingBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Spacing Bar Pitch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"巾止筋ピッチ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpacingBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcementBarPitchOfWall\"))\r\n         {\r\n            propertySetReinforcementBarPitchOfWall.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            propertySetReinforcementBarPitchOfWall.EntityTypes.Add(IFCEntityType.IfcWallType);\r\n            propertySetReinforcementBarPitchOfWall.ObjectType = \"IfcWall\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.Description\", \"Description\");\r\n            ifcPSE.PropertyName = \"Description\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.BarAllocationType\", \"BarAllocationType\");\r\n            ifcPSE.PropertyName = \"BarAllocationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ReinforcementBarAllocationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BarAllocationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.VerticalBarPitch\", \"VerticalBarPitch\");\r\n            ifcPSE.PropertyName = \"VerticalBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VerticalBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.HorizontalBarPitch\", \"HorizontalBarPitch\");\r\n            ifcPSE.PropertyName = \"HorizontalBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HorizontalBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcementBarPitchOfWall.SpacingBarPitch\", \"SpacingBarPitch\");\r\n            ifcPSE.PropertyName = \"SpacingBarPitch\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpacingBarPitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcementBarPitchOfWall.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetReinforcementBarPitchOfWall);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ReinforcingBarBendingsBECCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetReinforcingBarBendingsBECCommon = new PropertySetDescription();\r\n         propertySetReinforcingBarBendingsBECCommon.Name = \"Pset_ReinforcingBarBendingsBECCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcingBarBendingsBECCommon\"))\r\n         {\r\n            propertySetReinforcingBarBendingsBECCommon.EntityTypes.Add(IFCEntityType.IfcReinforcingBar);\r\n            propertySetReinforcingBarBendingsBECCommon.EntityTypes.Add(IFCEntityType.IfcReinforcingMesh);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECBarShapeCode\", \"BECBarShapeCode\");\r\n            ifcPSE.PropertyName = \"BECBarShapeCode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECBarShapeCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECCuttingLength\", \"BECCuttingLength\");\r\n            ifcPSE.PropertyName = \"BECCuttingLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECCuttingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_a\", \"BECShapeParameter_a\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_a\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_aCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_b\", \"BECShapeParameter_b\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_b\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_bCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_c\", \"BECShapeParameter_c\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_c\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_cCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_d\", \"BECShapeParameter_d\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_d\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_dCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_e\", \"BECShapeParameter_e\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_e\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_eCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_f\", \"BECShapeParameter_f\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_f\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_fCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_g\", \"BECShapeParameter_g\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_g\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_gCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_h\", \"BECShapeParameter_h\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_h\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_hCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_i\", \"BECShapeParameter_i\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_i\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_iCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_j\", \"BECShapeParameter_j\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_j\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_jCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_k\", \"BECShapeParameter_k\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_k\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_kCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_l\", \"BECShapeParameter_l\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_l\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_lCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECBendingParameter_u\", \"BECBendingParameter_u\");\r\n            ifcPSE.PropertyName = \"BECBendingParameter_u\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECBendingParameter_uCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECBendingParameter_v\", \"BECBendingParameter_v\");\r\n            ifcPSE.PropertyName = \"BECBendingParameter_v\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECBendingParameter_vCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECBendingParameter_u1\", \"BECBendingParameter_u1\");\r\n            ifcPSE.PropertyName = \"BECBendingParameter_u1\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECBendingParameter_u1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECBendingParameter_v1\", \"BECBendingParameter_v1\");\r\n            ifcPSE.PropertyName = \"BECBendingParameter_v1\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECBendingParameter_v1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeAid_x\", \"BECShapeAid_x\");\r\n            ifcPSE.PropertyName = \"BECShapeAid_x\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeAid_xCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeAid_y\", \"BECShapeAid_y\");\r\n            ifcPSE.PropertyName = \"BECShapeAid_y\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeAid_yCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECRollerDiameter\", \"BECRollerDiameter\");\r\n            ifcPSE.PropertyName = \"BECRollerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECRollerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcingBarBendingsBECCommon\"))\r\n         {\r\n            propertySetReinforcingBarBendingsBECCommon.EntityTypes.Add(IFCEntityType.IfcReinforcingBar);\r\n            propertySetReinforcingBarBendingsBECCommon.EntityTypes.Add(IFCEntityType.IfcReinforcingMesh);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECBarShapeCode\", \"BECBarShapeCode\");\r\n            ifcPSE.PropertyName = \"BECBarShapeCode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECBarShapeCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECCuttingLength\", \"BECCuttingLength\");\r\n            ifcPSE.PropertyName = \"BECCuttingLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECCuttingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_a\", \"BECShapeParameter_a\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_a\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_aCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_b\", \"BECShapeParameter_b\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_b\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_bCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_c\", \"BECShapeParameter_c\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_c\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_cCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_d\", \"BECShapeParameter_d\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_d\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_dCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_e\", \"BECShapeParameter_e\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_e\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_eCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_f\", \"BECShapeParameter_f\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_f\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_fCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_g\", \"BECShapeParameter_g\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_g\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_gCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_h\", \"BECShapeParameter_h\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_h\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_hCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_i\", \"BECShapeParameter_i\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_i\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_iCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_j\", \"BECShapeParameter_j\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_j\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_jCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_k\", \"BECShapeParameter_k\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_k\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_kCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeParameter_l\", \"BECShapeParameter_l\");\r\n            ifcPSE.PropertyName = \"BECShapeParameter_l\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeParameter_lCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECBendingParameter_u\", \"BECBendingParameter_u\");\r\n            ifcPSE.PropertyName = \"BECBendingParameter_u\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECBendingParameter_uCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECBendingParameter_v\", \"BECBendingParameter_v\");\r\n            ifcPSE.PropertyName = \"BECBendingParameter_v\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECBendingParameter_vCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECBendingParameter_u1\", \"BECBendingParameter_u1\");\r\n            ifcPSE.PropertyName = \"BECBendingParameter_u1\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECBendingParameter_u1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECBendingParameter_v1\", \"BECBendingParameter_v1\");\r\n            ifcPSE.PropertyName = \"BECBendingParameter_v1\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECBendingParameter_v1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeAid_x\", \"BECShapeAid_x\");\r\n            ifcPSE.PropertyName = \"BECShapeAid_x\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeAid_xCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECShapeAid_y\", \"BECShapeAid_y\");\r\n            ifcPSE.PropertyName = \"BECShapeAid_y\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECShapeAid_yCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBECCommon.BECRollerDiameter\", \"BECRollerDiameter\");\r\n            ifcPSE.PropertyName = \"BECRollerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BECRollerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBECCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetReinforcingBarBendingsBECCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ReinforcingBarBendingsBS8666Common(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetReinforcingBarBendingsBS8666Common = new PropertySetDescription();\r\n         propertySetReinforcingBarBendingsBS8666Common.Name = \"Pset_ReinforcingBarBendingsBS8666Common\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcingBarBendingsBS8666Common\"))\r\n         {\r\n            propertySetReinforcingBarBendingsBS8666Common.EntityTypes.Add(IFCEntityType.IfcReinforcingBar);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBS8666Common.BS8666ShapeCode\", \"BS8666ShapeCode\");\r\n            ifcPSE.PropertyName = \"BS8666ShapeCode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BS8666ShapeCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBS8666Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_A\", \"BS8666ShapeParameter_A\");\r\n            ifcPSE.PropertyName = \"BS8666ShapeParameter_A\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BS8666ShapeParameter_ACalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBS8666Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_B\", \"BS8666ShapeParameter_B\");\r\n            ifcPSE.PropertyName = \"BS8666ShapeParameter_B\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BS8666ShapeParameter_BCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBS8666Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_C\", \"BS8666ShapeParameter_C\");\r\n            ifcPSE.PropertyName = \"BS8666ShapeParameter_C\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BS8666ShapeParameter_CCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBS8666Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_D\", \"BS8666ShapeParameter_D\");\r\n            ifcPSE.PropertyName = \"BS8666ShapeParameter_D\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BS8666ShapeParameter_DCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBS8666Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_E\", \"BS8666ShapeParameter_E\");\r\n            ifcPSE.PropertyName = \"BS8666ShapeParameter_E\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BS8666ShapeParameter_ECalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBS8666Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_r\", \"BS8666ShapeParameter_r\");\r\n            ifcPSE.PropertyName = \"BS8666ShapeParameter_r\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BS8666ShapeParameter_rCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBS8666Common.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcingBarBendingsBS8666Common\"))\r\n         {\r\n            propertySetReinforcingBarBendingsBS8666Common.EntityTypes.Add(IFCEntityType.IfcReinforcingBar);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBS8666Common.BS8666ShapeCode\", \"BS8666ShapeCode\");\r\n            ifcPSE.PropertyName = \"BS8666ShapeCode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BS8666ShapeCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBS8666Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_A\", \"BS8666ShapeParameter_A\");\r\n            ifcPSE.PropertyName = \"BS8666ShapeParameter_A\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BS8666ShapeParameter_ACalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBS8666Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_B\", \"BS8666ShapeParameter_B\");\r\n            ifcPSE.PropertyName = \"BS8666ShapeParameter_B\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BS8666ShapeParameter_BCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBS8666Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_C\", \"BS8666ShapeParameter_C\");\r\n            ifcPSE.PropertyName = \"BS8666ShapeParameter_C\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BS8666ShapeParameter_CCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBS8666Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_D\", \"BS8666ShapeParameter_D\");\r\n            ifcPSE.PropertyName = \"BS8666ShapeParameter_D\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BS8666ShapeParameter_DCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBS8666Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_E\", \"BS8666ShapeParameter_E\");\r\n            ifcPSE.PropertyName = \"BS8666ShapeParameter_E\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BS8666ShapeParameter_ECalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBS8666Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_r\", \"BS8666ShapeParameter_r\");\r\n            ifcPSE.PropertyName = \"BS8666ShapeParameter_r\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BS8666ShapeParameter_rCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsBS8666Common.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetReinforcingBarBendingsBS8666Common);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ReinforcingBarBendingsDIN135610Common(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetReinforcingBarBendingsDIN135610Common = new PropertySetDescription();\r\n         propertySetReinforcingBarBendingsDIN135610Common.Name = \"Pset_ReinforcingBarBendingsDIN135610Common\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcingBarBendingsDIN135610Common\"))\r\n         {\r\n            propertySetReinforcingBarBendingsDIN135610Common.EntityTypes.Add(IFCEntityType.IfcReinforcingBar);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeCode\", \"DIN135610ShapeCode\");\r\n            ifcPSE.PropertyName = \"DIN135610ShapeCode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DIN135610ShapeCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsDIN135610Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_a\", \"DIN135610ShapeParameter_a\");\r\n            ifcPSE.PropertyName = \"DIN135610ShapeParameter_a\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DIN135610ShapeParameter_aCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsDIN135610Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_b\", \"DIN135610ShapeParameter_b\");\r\n            ifcPSE.PropertyName = \"DIN135610ShapeParameter_b\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DIN135610ShapeParameter_bCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsDIN135610Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_c\", \"DIN135610ShapeParameter_c\");\r\n            ifcPSE.PropertyName = \"DIN135610ShapeParameter_c\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DIN135610ShapeParameter_cCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsDIN135610Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_d\", \"DIN135610ShapeParameter_d\");\r\n            ifcPSE.PropertyName = \"DIN135610ShapeParameter_d\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DIN135610ShapeParameter_dCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsDIN135610Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_e\", \"DIN135610ShapeParameter_e\");\r\n            ifcPSE.PropertyName = \"DIN135610ShapeParameter_e\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DIN135610ShapeParameter_eCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsDIN135610Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_z\", \"DIN135610ShapeParameter_z\");\r\n            ifcPSE.PropertyName = \"DIN135610ShapeParameter_z\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DIN135610ShapeParameter_zCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsDIN135610Common.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcingBarBendingsDIN135610Common\"))\r\n         {\r\n            propertySetReinforcingBarBendingsDIN135610Common.EntityTypes.Add(IFCEntityType.IfcReinforcingBar);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeCode\", \"DIN135610ShapeCode\");\r\n            ifcPSE.PropertyName = \"DIN135610ShapeCode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DIN135610ShapeCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsDIN135610Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_a\", \"DIN135610ShapeParameter_a\");\r\n            ifcPSE.PropertyName = \"DIN135610ShapeParameter_a\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DIN135610ShapeParameter_aCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsDIN135610Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_b\", \"DIN135610ShapeParameter_b\");\r\n            ifcPSE.PropertyName = \"DIN135610ShapeParameter_b\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DIN135610ShapeParameter_bCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsDIN135610Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_c\", \"DIN135610ShapeParameter_c\");\r\n            ifcPSE.PropertyName = \"DIN135610ShapeParameter_c\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DIN135610ShapeParameter_cCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsDIN135610Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_d\", \"DIN135610ShapeParameter_d\");\r\n            ifcPSE.PropertyName = \"DIN135610ShapeParameter_d\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DIN135610ShapeParameter_dCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsDIN135610Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_e\", \"DIN135610ShapeParameter_e\");\r\n            ifcPSE.PropertyName = \"DIN135610ShapeParameter_e\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DIN135610ShapeParameter_eCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsDIN135610Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_z\", \"DIN135610ShapeParameter_z\");\r\n            ifcPSE.PropertyName = \"DIN135610ShapeParameter_z\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DIN135610ShapeParameter_zCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsDIN135610Common.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetReinforcingBarBendingsDIN135610Common);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ReinforcingBarBendingsISOCD3766Common(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetReinforcingBarBendingsISOCD3766Common = new PropertySetDescription();\r\n         propertySetReinforcingBarBendingsISOCD3766Common.Name = \"Pset_ReinforcingBarBendingsISOCD3766Common\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcingBarBendingsISOCD3766Common\"))\r\n         {\r\n            propertySetReinforcingBarBendingsISOCD3766Common.EntityTypes.Add(IFCEntityType.IfcReinforcingBar);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeCode\", \"ISOCD3766ShapeCode\");\r\n            ifcPSE.PropertyName = \"ISOCD3766ShapeCode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ISOCD3766ShapeCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsISOCD3766Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_a\", \"ISOCD3766ShapeParameter_a\");\r\n            ifcPSE.PropertyName = \"ISOCD3766ShapeParameter_a\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ISOCD3766ShapeParameter_aCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsISOCD3766Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_b\", \"ISOCD3766ShapeParameter_b\");\r\n            ifcPSE.PropertyName = \"ISOCD3766ShapeParameter_b\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ISOCD3766ShapeParameter_bCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsISOCD3766Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_c\", \"ISOCD3766ShapeParameter_c\");\r\n            ifcPSE.PropertyName = \"ISOCD3766ShapeParameter_c\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ISOCD3766ShapeParameter_cCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsISOCD3766Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_d\", \"ISOCD3766ShapeParameter_d\");\r\n            ifcPSE.PropertyName = \"ISOCD3766ShapeParameter_d\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ISOCD3766ShapeParameter_dCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsISOCD3766Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_e\", \"ISOCD3766ShapeParameter_e\");\r\n            ifcPSE.PropertyName = \"ISOCD3766ShapeParameter_e\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ISOCD3766ShapeParameter_eCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsISOCD3766Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_R\", \"ISOCD3766ShapeParameter_R\");\r\n            ifcPSE.PropertyName = \"ISOCD3766ShapeParameter_R\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ISOCD3766ShapeParameter_RCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsISOCD3766Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766BendingStartHook\", \"ISOCD3766BendingStartHook\");\r\n            ifcPSE.PropertyName = \"ISOCD3766BendingStartHook\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ISOCD3766BendingStartHookCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsISOCD3766Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766BendingEndHook\", \"ISOCD3766BendingEndHook\");\r\n            ifcPSE.PropertyName = \"ISOCD3766BendingEndHook\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ISOCD3766BendingEndHookCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsISOCD3766Common.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcingBarBendingsISOCD3766Common\"))\r\n         {\r\n            propertySetReinforcingBarBendingsISOCD3766Common.EntityTypes.Add(IFCEntityType.IfcReinforcingBar);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeCode\", \"ISOCD3766ShapeCode\");\r\n            ifcPSE.PropertyName = \"ISOCD3766ShapeCode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ISOCD3766ShapeCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsISOCD3766Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_a\", \"ISOCD3766ShapeParameter_a\");\r\n            ifcPSE.PropertyName = \"ISOCD3766ShapeParameter_a\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ISOCD3766ShapeParameter_aCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsISOCD3766Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_b\", \"ISOCD3766ShapeParameter_b\");\r\n            ifcPSE.PropertyName = \"ISOCD3766ShapeParameter_b\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ISOCD3766ShapeParameter_bCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsISOCD3766Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_c\", \"ISOCD3766ShapeParameter_c\");\r\n            ifcPSE.PropertyName = \"ISOCD3766ShapeParameter_c\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ISOCD3766ShapeParameter_cCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsISOCD3766Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_d\", \"ISOCD3766ShapeParameter_d\");\r\n            ifcPSE.PropertyName = \"ISOCD3766ShapeParameter_d\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ISOCD3766ShapeParameter_dCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsISOCD3766Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_e\", \"ISOCD3766ShapeParameter_e\");\r\n            ifcPSE.PropertyName = \"ISOCD3766ShapeParameter_e\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ISOCD3766ShapeParameter_eCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsISOCD3766Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_R\", \"ISOCD3766ShapeParameter_R\");\r\n            ifcPSE.PropertyName = \"ISOCD3766ShapeParameter_R\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ISOCD3766ShapeParameter_RCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsISOCD3766Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766BendingStartHook\", \"ISOCD3766BendingStartHook\");\r\n            ifcPSE.PropertyName = \"ISOCD3766BendingStartHook\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ISOCD3766BendingStartHookCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsISOCD3766Common.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766BendingEndHook\", \"ISOCD3766BendingEndHook\");\r\n            ifcPSE.PropertyName = \"ISOCD3766BendingEndHook\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ISOCD3766BendingEndHookCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarBendingsISOCD3766Common.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetReinforcingBarBendingsISOCD3766Common);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ReinforcingBarCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetReinforcingBarCommon = new PropertySetDescription();\r\n         propertySetReinforcingBarCommon.Name = \"Pset_ReinforcingBarCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcingBarCommon\"))\r\n         {\r\n            propertySetReinforcingBarCommon.EntityTypes.Add(IFCEntityType.IfcReinforcingBar);\r\n            propertySetReinforcingBarCommon.ObjectType = \"IfcReinforcingBar\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarCommon.NominalDiameter\", \"NominalDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarCommon.BarLength\", \"BarLength\");\r\n            ifcPSE.PropertyName = \"BarLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BarLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarCommon.BarSpacing\", \"BarSpacing\");\r\n            ifcPSE.PropertyName = \"BarSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BarSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarCommon.BarSurface\", \"BarSurface\");\r\n            ifcPSE.PropertyName = \"BarSurface\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ReinforcementBarSurface);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BarSurfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarCommon.BendingShapeCode\", \"BendingShapeCode\");\r\n            ifcPSE.PropertyName = \"BendingShapeCode\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendingShapeCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingBarCommon.BendingParameters\", \"BendingParameters\");\r\n            ifcPSE.PropertyName = \"BendingParameters\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BendingParametersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingBarCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetReinforcingBarCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ReinforcingMeshCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetReinforcingMeshCommon = new PropertySetDescription();\r\n         propertySetReinforcingMeshCommon.Name = \"Pset_ReinforcingMeshCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ReinforcingMeshCommon\"))\r\n         {\r\n            propertySetReinforcingMeshCommon.EntityTypes.Add(IFCEntityType.IfcReinforcingMesh);\r\n            propertySetReinforcingMeshCommon.ObjectType = \"IfcReinforcingMesh\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingMeshCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingMeshCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingMeshCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingMeshCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingMeshCommon.MeshLength\", \"MeshLength\");\r\n            ifcPSE.PropertyName = \"MeshLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MeshLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingMeshCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingMeshCommon.MeshWidth\", \"MeshWidth\");\r\n            ifcPSE.PropertyName = \"MeshWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MeshWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingMeshCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingMeshCommon.LongitudinalBarNominalDiameter\", \"LongitudinalBarNominalDiameter\");\r\n            ifcPSE.PropertyName = \"LongitudinalBarNominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongitudinalBarNominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingMeshCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingMeshCommon.LongitudinalBarSpacing\", \"LongitudinalBarSpacing\");\r\n            ifcPSE.PropertyName = \"LongitudinalBarSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongitudinalBarSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingMeshCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingMeshCommon.LongitudinalBarSurface\", \"LongitudinalBarSurface\");\r\n            ifcPSE.PropertyName = \"LongitudinalBarSurface\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ReinforcementBarSurface);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongitudinalBarSurfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingMeshCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingMeshCommon.LongitudinalBarBendingShapeCode\", \"LongitudinalBarBendingShapeCode\");\r\n            ifcPSE.PropertyName = \"LongitudinalBarBendingShapeCode\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongitudinalBarBendingShapeCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingMeshCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingMeshCommon.LongitudinalBarBendingParameters\", \"LongitudinalBarBendingParameters\");\r\n            ifcPSE.PropertyName = \"LongitudinalBarBendingParameters\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LongitudinalBarBendingParametersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingMeshCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingMeshCommon.TransverseBarNominalDiameter\", \"TransverseBarNominalDiameter\");\r\n            ifcPSE.PropertyName = \"TransverseBarNominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransverseBarNominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingMeshCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingMeshCommon.TransverseBarSpacing\", \"TransverseBarSpacing\");\r\n            ifcPSE.PropertyName = \"TransverseBarSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransverseBarSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingMeshCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingMeshCommon.TransverseBarSurface\", \"TransverseBarSurface\");\r\n            ifcPSE.PropertyName = \"TransverseBarSurface\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ReinforcementBarSurface);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransverseBarSurfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingMeshCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingMeshCommon.TransverseBarBendingShapeCode\", \"TransverseBarBendingShapeCode\");\r\n            ifcPSE.PropertyName = \"TransverseBarBendingShapeCode\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransverseBarBendingShapeCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingMeshCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ReinforcingMeshCommon.TransverseBarBendingParameters\", \"TransverseBarBendingParameters\");\r\n            ifcPSE.PropertyName = \"TransverseBarBendingParameters\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransverseBarBendingParametersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReinforcingMeshCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetReinforcingMeshCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_Reliability(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetReliability = new PropertySetDescription();\r\n         propertySetReliability.Name = \"Pset_Reliability\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Reliability\"))\r\n         {\r\n            propertySetReliability.EntityTypes.Add(IFCEntityType.IfcProduct);\r\n            ifcPSE = new PropertySetEntry(\"Pset_Reliability.MeanTimeBetweenFailure\", \"MeanTimeBetweenFailure\");\r\n            ifcPSE.PropertyName = \"MeanTimeBetweenFailure\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MeanTimeBetweenFailureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReliability.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Reliability\"))\r\n         {\r\n            propertySetReliability.EntityTypes.Add(IFCEntityType.IfcProduct);\r\n            ifcPSE = new PropertySetEntry(\"Pset_Reliability.MeanTimeBetweenFailure\", \"MeanTimeBetweenFailure\");\r\n            ifcPSE.PropertyName = \"MeanTimeBetweenFailure\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MeanTimeBetweenFailureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetReliability.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetReliability);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RepairOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRepairOccurrence = new PropertySetDescription();\r\n         propertySetRepairOccurrence.Name = \"Pset_RepairOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RepairOccurrence\"))\r\n         {\r\n            propertySetRepairOccurrence.EntityTypes.Add(IFCEntityType.IfcAsset);\r\n            propertySetRepairOccurrence.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetRepairOccurrence.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            propertySetRepairOccurrence.ObjectType = \"IfcAsset\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RepairOccurrence.RepairContent\", \"RepairContent\");\r\n            ifcPSE.PropertyName = \"RepairContent\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RepairContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRepairOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RepairOccurrence.RepairDate\", \"RepairDate\");\r\n            ifcPSE.PropertyName = \"RepairDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RepairDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRepairOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RepairOccurrence.MeanTimeToRepair\", \"MeanTimeToRepair\");\r\n            ifcPSE.PropertyName = \"MeanTimeToRepair\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MeanTimeToRepairCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRepairOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRepairOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RevetmentCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRevetmentCommon = new PropertySetDescription();\r\n         propertySetRevetmentCommon.Name = \"Pset_RevetmentCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RevetmentCommon\"))\r\n         {\r\n            propertySetRevetmentCommon.EntityTypes.Add(IFCEntityType.IfcMarineFacility);\r\n            propertySetRevetmentCommon.ObjectType = \"IfcMarineFacility\";\r\n            propertySetRevetmentCommon.PredefinedType = \"REVETMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RevetmentCommon.StructuralType\", \"StructuralType\");\r\n            ifcPSE.PropertyName = \"StructuralType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StructuralTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRevetmentCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RevetmentCommon.Elevation\", \"Elevation\");\r\n            ifcPSE.PropertyName = \"Elevation\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElevationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRevetmentCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRevetmentCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_Risk(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRisk = new PropertySetDescription();\r\n         propertySetRisk.Name = \"Pset_Risk\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Risk\"))\r\n         {\r\n            propertySetRisk.EntityTypes.Add(IFCEntityType.IfcObject);\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.RiskType\", \"RiskType\");\r\n            ifcPSE.PropertyName = \"RiskType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_RiskType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiskTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.NatureOfRisk\", \"NatureOfRisk\");\r\n            ifcPSE.PropertyName = \"NatureOfRisk\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NatureOfRiskCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.AssessmentOfRisk\", \"AssessmentOfRisk\");\r\n            ifcPSE.PropertyName = \"AssessmentOfRisk\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssessmentOfRiskCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Risk\"))\r\n         {\r\n            propertySetRisk.EntityTypes.Add(IFCEntityType.IfcObject);\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.RiskType\", \"RiskType\");\r\n            ifcPSE.PropertyName = \"RiskType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_RiskType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiskTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.NatureOfRisk\", \"NatureOfRisk\");\r\n            ifcPSE.PropertyName = \"NatureOfRisk\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NatureOfRiskCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.SubNatureOfRisk1\", \"SubNatureOfRisk1\");\r\n            ifcPSE.PropertyName = \"SubNatureOfRisk1\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SubNatureOfRisk1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.SubNatureOfRisk2\", \"SubNatureOfRisk2\");\r\n            ifcPSE.PropertyName = \"SubNatureOfRisk2\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SubNatureOfRisk2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.RiskCause\", \"RiskCause\");\r\n            ifcPSE.PropertyName = \"RiskCause\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiskCauseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.AssessmentOfRisk\", \"AssessmentOfRisk\");\r\n            ifcPSE.PropertyName = \"AssessmentOfRisk\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_RiskAssessment);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssessmentOfRiskCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.RiskConsequence\", \"RiskConsequence\");\r\n            ifcPSE.PropertyName = \"RiskConsequence\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_RiskConsequence);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiskConsequenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.RiskRating\", \"RiskRating\");\r\n            ifcPSE.PropertyName = \"RiskRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_RiskRating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiskRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.RiskOwner\", \"RiskOwner\");\r\n            ifcPSE.PropertyName = \"RiskOwner\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_RiskOwner);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiskOwnerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.AffectsSurroundings\", \"AffectsSurroundings\");\r\n            ifcPSE.PropertyName = \"AffectsSurroundings\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AffectsSurroundingsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.PreventiveMeassures\", \"PreventiveMeassures\");\r\n            ifcPSE.PropertyName = \"PreventiveMeassures\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PreventiveMeassuresCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Risk\"))\r\n         {\r\n            propertySetRisk.EntityTypes.Add(IFCEntityType.IfcProcess);\r\n            propertySetRisk.ObjectType = \"IfcProcess\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.RiskType\", \"RiskType\");\r\n            ifcPSE.PropertyName = \"RiskType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_RiskType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Risk Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiskTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.NatureOfRisk\", \"NatureOfRisk\");\r\n            ifcPSE.PropertyName = \"NatureOfRisk\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nature Of Risk\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NatureOfRiskCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.SubNatureOfRisk1\", \"SubNatureOfRisk1\");\r\n            ifcPSE.PropertyName = \"SubNatureOfRisk1\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sub Nature Of Risk1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SubNatureOfRisk1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.SubNatureOfRisk2\", \"SubNatureOfRisk2\");\r\n            ifcPSE.PropertyName = \"SubNatureOfRisk2\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sub Nature Of Risk2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SubNatureOfRisk2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.RiskCause\", \"RiskCause\");\r\n            ifcPSE.PropertyName = \"RiskCause\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Risk Cause\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiskCauseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.AssessmentOfRisk\", \"AssessmentOfRisk\");\r\n            ifcPSE.PropertyName = \"AssessmentOfRisk\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_RiskAssessment);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Assessment Of Risk\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssessmentOfRiskCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.RiskConsequence\", \"RiskConsequence\");\r\n            ifcPSE.PropertyName = \"RiskConsequence\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_RiskConsequence);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Risk Consequence\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiskConsequenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.RiskRating\", \"RiskRating\");\r\n            ifcPSE.PropertyName = \"RiskRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_RiskRating);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Risk Rating\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiskRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.RiskOwner\", \"RiskOwner\");\r\n            ifcPSE.PropertyName = \"RiskOwner\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_RiskOwner);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Risk Owner\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiskOwnerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.AffectsSurroundings\", \"AffectsSurroundings\");\r\n            ifcPSE.PropertyName = \"AffectsSurroundings\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Affects Surroundings\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AffectsSurroundingsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.PreventiveMeassures\", \"PreventiveMeassures\");\r\n            ifcPSE.PropertyName = \"PreventiveMeassures\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Preventive Meassures\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PreventiveMeassuresCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Risk\"))\r\n         {\r\n            propertySetRisk.EntityTypes.Add(IFCEntityType.IfcGroup);\r\n            propertySetRisk.EntityTypes.Add(IFCEntityType.IfcProcess);\r\n            propertySetRisk.EntityTypes.Add(IFCEntityType.IfcProduct);\r\n            propertySetRisk.EntityTypes.Add(IFCEntityType.IfcTypeProcess);\r\n            propertySetRisk.EntityTypes.Add(IFCEntityType.IfcTypeProduct);\r\n            propertySetRisk.ObjectType = \"IfcGroup\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.RiskName\", \"RiskName\");\r\n            ifcPSE.PropertyName = \"RiskName\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiskNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.RiskType\", \"RiskType\");\r\n            ifcPSE.PropertyName = \"RiskType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RiskType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiskTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.NatureOfRisk\", \"NatureOfRisk\");\r\n            ifcPSE.PropertyName = \"NatureOfRisk\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NatureOfRiskCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.RiskAssessmentMethodology\", \"RiskAssessmentMethodology\");\r\n            ifcPSE.PropertyName = \"RiskAssessmentMethodology\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiskAssessmentMethodologyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.UnmitigatedRiskLikelihood\", \"UnmitigatedRiskLikelihood\");\r\n            ifcPSE.PropertyName = \"UnmitigatedRiskLikelihood\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RiskRating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UnmitigatedRiskLikelihoodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.UnmitigatedRiskConsequence\", \"UnmitigatedRiskConsequence\");\r\n            ifcPSE.PropertyName = \"UnmitigatedRiskConsequence\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RiskRating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UnmitigatedRiskConsequenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.UnmitigatedRiskSignificance\", \"UnmitigatedRiskSignificance\");\r\n            ifcPSE.PropertyName = \"UnmitigatedRiskSignificance\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RiskRating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UnmitigatedRiskSignificanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.MitigationPlanned\", \"MitigationPlanned\");\r\n            ifcPSE.PropertyName = \"MitigationPlanned\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MitigationPlannedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.MitigatedRiskLikelihood\", \"MitigatedRiskLikelihood\");\r\n            ifcPSE.PropertyName = \"MitigatedRiskLikelihood\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RiskRating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MitigatedRiskLikelihoodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.MitigatedRiskConsequence\", \"MitigatedRiskConsequence\");\r\n            ifcPSE.PropertyName = \"MitigatedRiskConsequence\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RiskRating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MitigatedRiskConsequenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.MitigatedRiskSignificance\", \"MitigatedRiskSignificance\");\r\n            ifcPSE.PropertyName = \"MitigatedRiskSignificance\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RiskRating);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MitigatedRiskSignificanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.MitigationProposed\", \"MitigationProposed\");\r\n            ifcPSE.PropertyName = \"MitigationProposed\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MitigationProposedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.AssociatedProduct\", \"AssociatedProduct\");\r\n            ifcPSE.PropertyName = \"AssociatedProduct\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssociatedProductCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.AssociatedActivity\", \"AssociatedActivity\");\r\n            ifcPSE.PropertyName = \"AssociatedActivity\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssociatedActivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Risk.AssociatedLocation\", \"AssociatedLocation\");\r\n            ifcPSE.PropertyName = \"AssociatedLocation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AssociatedLocationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRisk.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRisk);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RoadDesignCriteriaCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRoadDesignCriteriaCommon = new PropertySetDescription();\r\n         propertySetRoadDesignCriteriaCommon.Name = \"Pset_RoadDesignCriteriaCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RoadDesignCriteriaCommon\"))\r\n         {\r\n            propertySetRoadDesignCriteriaCommon.EntityTypes.Add(IFCEntityType.IfcFacilityPartCommon);\r\n            propertySetRoadDesignCriteriaCommon.EntityTypes.Add(IFCEntityType.IfcFacilityPartCommon);\r\n            propertySetRoadDesignCriteriaCommon.EntityTypes.Add(IFCEntityType.IfcFacilityPartCommon);\r\n            propertySetRoadDesignCriteriaCommon.EntityTypes.Add(IFCEntityType.IfcRoadPart);\r\n            propertySetRoadDesignCriteriaCommon.EntityTypes.Add(IFCEntityType.IfcRoadPart);\r\n            propertySetRoadDesignCriteriaCommon.EntityTypes.Add(IFCEntityType.IfcRoadPart);\r\n            propertySetRoadDesignCriteriaCommon.EntityTypes.Add(IFCEntityType.IfcRoadPart);\r\n            propertySetRoadDesignCriteriaCommon.EntityTypes.Add(IFCEntityType.IfcRoadPart);\r\n            propertySetRoadDesignCriteriaCommon.EntityTypes.Add(IFCEntityType.IfcRoadPart);\r\n            propertySetRoadDesignCriteriaCommon.EntityTypes.Add(IFCEntityType.IfcRoadPart);\r\n            propertySetRoadDesignCriteriaCommon.EntityTypes.Add(IFCEntityType.IfcRoad);\r\n            propertySetRoadDesignCriteriaCommon.ObjectType = \"IfcFacilityPartCommon\";\r\n            propertySetRoadDesignCriteriaCommon.PredefinedType = \"TOLLPLAZA\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadDesignCriteriaCommon.Crossfall\", \"Crossfall\");\r\n            ifcPSE.PropertyName = \"Crossfall\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossfallCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadDesignCriteriaCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadDesignCriteriaCommon.DesignSpeed\", \"DesignSpeed\");\r\n            ifcPSE.PropertyName = \"DesignSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DesignSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadDesignCriteriaCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadDesignCriteriaCommon.DesignTrafficVolume\", \"DesignTrafficVolume\");\r\n            ifcPSE.PropertyName = \"DesignTrafficVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DesignTrafficVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadDesignCriteriaCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadDesignCriteriaCommon.DesignVehicleClass\", \"DesignVehicleClass\");\r\n            ifcPSE.PropertyName = \"DesignVehicleClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DesignVehicleClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadDesignCriteriaCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadDesignCriteriaCommon.LaneWidth\", \"LaneWidth\");\r\n            ifcPSE.PropertyName = \"LaneWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LaneWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadDesignCriteriaCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadDesignCriteriaCommon.NumberOfThroughLanes\", \"NumberOfThroughLanes\");\r\n            ifcPSE.PropertyName = \"NumberOfThroughLanes\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfThroughLanesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadDesignCriteriaCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadDesignCriteriaCommon.RoadDesignClass\", \"RoadDesignClass\");\r\n            ifcPSE.PropertyName = \"RoadDesignClass\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RoadDesignClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadDesignCriteriaCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRoadDesignCriteriaCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RoadGuardElement(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRoadGuardElement = new PropertySetDescription();\r\n         propertySetRoadGuardElement.Name = \"Pset_RoadGuardElement\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RoadGuardElement\"))\r\n         {\r\n            propertySetRoadGuardElement.EntityTypes.Add(IFCEntityType.IfcRailing);\r\n            propertySetRoadGuardElement.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            propertySetRoadGuardElement.EntityTypes.Add(IFCEntityType.IfcRailingType);\r\n            propertySetRoadGuardElement.EntityTypes.Add(IFCEntityType.IfcWallType);\r\n            propertySetRoadGuardElement.ObjectType = \"IfcRailing\";\r\n            propertySetRoadGuardElement.PredefinedType = \"PARAPET\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadGuardElement.IsMoveable\", \"IsMoveable\");\r\n            ifcPSE.PropertyName = \"IsMoveable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsMoveableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadGuardElement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadGuardElement.IsTerminal\", \"IsTerminal\");\r\n            ifcPSE.PropertyName = \"IsTerminal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsTerminalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadGuardElement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadGuardElement.IsTransition\", \"IsTransition\");\r\n            ifcPSE.PropertyName = \"IsTransition\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsTransitionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadGuardElement.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadGuardElement.TerminalType\", \"TerminalType\");\r\n            ifcPSE.PropertyName = \"TerminalType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TerminalTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadGuardElement.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRoadGuardElement);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RoadMarkingCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRoadMarkingCommon = new PropertySetDescription();\r\n         propertySetRoadMarkingCommon.Name = \"Pset_RoadMarkingCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RoadMarkingCommon\"))\r\n         {\r\n            propertySetRoadMarkingCommon.EntityTypes.Add(IFCEntityType.IfcSurfaceFeature);\r\n            propertySetRoadMarkingCommon.EntityTypes.Add(IFCEntityType.IfcSurfaceFeature);\r\n            propertySetRoadMarkingCommon.EntityTypes.Add(IFCEntityType.IfcSurfaceFeature);\r\n            propertySetRoadMarkingCommon.EntityTypes.Add(IFCEntityType.IfcSurfaceFeature);\r\n            propertySetRoadMarkingCommon.ObjectType = \"IfcSurfaceFeature\";\r\n            propertySetRoadMarkingCommon.PredefinedType = \"SYMBOLMARKING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadMarkingCommon.ApplicationMethod\", \"ApplicationMethod\");\r\n            ifcPSE.PropertyName = \"ApplicationMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplicationMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadMarkingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadMarkingCommon.DiagramNumber\", \"DiagramNumber\");\r\n            ifcPSE.PropertyName = \"DiagramNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiagramNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadMarkingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadMarkingCommon.MaterialColour\", \"MaterialColour\");\r\n            ifcPSE.PropertyName = \"MaterialColour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadMarkingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadMarkingCommon.MaterialThickness\", \"MaterialThickness\");\r\n            ifcPSE.PropertyName = \"MaterialThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadMarkingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadMarkingCommon.MaterialType\", \"MaterialType\");\r\n            ifcPSE.PropertyName = \"MaterialType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadMarkingCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadMarkingCommon.Structure\", \"Structure\");\r\n            ifcPSE.PropertyName = \"Structure\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StructureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadMarkingCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRoadMarkingCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RoadSymbolsCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRoadSymbolsCommon = new PropertySetDescription();\r\n         propertySetRoadSymbolsCommon.Name = \"Pset_RoadSymbolsCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RoadSymbolsCommon\"))\r\n         {\r\n            propertySetRoadSymbolsCommon.EntityTypes.Add(IFCEntityType.IfcSurfaceFeature);\r\n            propertySetRoadSymbolsCommon.ObjectType = \"IfcSurfaceFeature\";\r\n            propertySetRoadSymbolsCommon.PredefinedType = \"SYMBOLMARKING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadSymbolsCommon.Text\", \"Text\");\r\n            ifcPSE.PropertyName = \"Text\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TextCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadSymbolsCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoadSymbolsCommon.TypeDesignation\", \"TypeDesignation\");\r\n            ifcPSE.PropertyName = \"TypeDesignation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeDesignationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoadSymbolsCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRoadSymbolsCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_RoofCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetRoofCommon = new PropertySetDescription();\r\n         propertySetRoofCommon.Name = \"Pset_RoofCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RoofCommon\"))\r\n         {\r\n            propertySetRoofCommon.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RoofCommon\"))\r\n         {\r\n            propertySetRoofCommon.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.ProjectedArea\", \"ProjectedArea\");\r\n            ifcPSE.PropertyName = \"ProjectedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProjectedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.TotalArea\", \"TotalArea\");\r\n            ifcPSE.PropertyName = \"TotalArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RoofCommon\"))\r\n         {\r\n            propertySetRoofCommon.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n            propertySetRoofCommon.ObjectType = \"IfcRoof\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bauteiltyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Schallschutzklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Acoustic Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Isolation acoustique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"遮音等級\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Außenbauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EstExterieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否外部构件\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"U-Wert\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TransmissionThermique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱貫流率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"导热系数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Feuerwiderstandsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ResistanceAuFeu\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐火等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"防火等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_RoofCommon\"))\r\n         {\r\n            propertySetRoofCommon.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n            propertySetRoofCommon.EntityTypes.Add(IFCEntityType.IfcRoofType);\r\n            propertySetRoofCommon.ObjectType = \"IfcRoof\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_RoofCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetRoofCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetRoofCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SanitaryTerminalTypeBath(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSanitaryTerminalTypeBath = new PropertySetDescription();\r\n         propertySetSanitaryTerminalTypeBath.Name = \"Pset_SanitaryTerminalTypeBath\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeBath\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeBath.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeBath.ObjectType = \"Bath\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.BathType\", \"BathType\");\r\n            ifcPSE.PropertyName = \"BathType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BathType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BathTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.MaterialThickness\", \"MaterialThickness\");\r\n            ifcPSE.PropertyName = \"MaterialThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.HasGrabHandles\", \"HasGrabHandles\");\r\n            ifcPSE.PropertyName = \"HasGrabHandles\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasGrabHandlesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeBath\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeBath.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeBath.ObjectType = \"IfcSanitaryTerminalType\";\r\n            propertySetSanitaryTerminalTypeBath.PredefinedType = \"BATH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.BathType\", \"BathType\");\r\n            ifcPSE.PropertyName = \"BathType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BathType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BathTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.MaterialThickness\", \"MaterialThickness\");\r\n            ifcPSE.PropertyName = \"MaterialThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.HasGrabHandles\", \"HasGrabHandles\");\r\n            ifcPSE.PropertyName = \"HasGrabHandles\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasGrabHandlesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeBath\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeBath.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeBath.ObjectType = \"IfcSanitaryTerminal\";\r\n            propertySetSanitaryTerminalTypeBath.PredefinedType = \"BATH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.BathType\", \"BathType\");\r\n            ifcPSE.PropertyName = \"BathType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_BathType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Bath Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"バスタイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BathTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Drain Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ドレインサイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.HasGrabHandles\", \"HasGrabHandles\");\r\n            ifcPSE.PropertyName = \"HasGrabHandles\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Grab Handles\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"手すりの有無\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasGrabHandlesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeBath\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeBath.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeBath.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeBath.ObjectType = \"IfcSanitaryTerminal\";\r\n            propertySetSanitaryTerminalTypeBath.PredefinedType = \"BATH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.BathType\", \"BathType\");\r\n            ifcPSE.PropertyName = \"BathType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_BathType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BathTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBath.HasGrabHandles\", \"HasGrabHandles\");\r\n            ifcPSE.PropertyName = \"HasGrabHandles\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasGrabHandlesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBath.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSanitaryTerminalTypeBath);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SanitaryTerminalTypeBidet(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSanitaryTerminalTypeBidet = new PropertySetDescription();\r\n         propertySetSanitaryTerminalTypeBidet.Name = \"Pset_SanitaryTerminalTypeBidet\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeBidet\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeBidet.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeBidet.ObjectType = \"Bidet\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.BidetMounting\", \"BidetMounting\");\r\n            ifcPSE.PropertyName = \"BidetMounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_SanitaryMounting);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BidetMountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.SpilloverLevel\", \"SpilloverLevel\");\r\n            ifcPSE.PropertyName = \"SpilloverLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpilloverLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeBidet\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeBidet.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeBidet.ObjectType = \"IfcSanitaryTerminalType\";\r\n            propertySetSanitaryTerminalTypeBidet.PredefinedType = \"BIDET\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.BidetMounting\", \"BidetMounting\");\r\n            ifcPSE.PropertyName = \"BidetMounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_SanitaryMounting);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BidetMountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.SpilloverLevel\", \"SpilloverLevel\");\r\n            ifcPSE.PropertyName = \"SpilloverLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpilloverLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeBidet\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeBidet.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeBidet.ObjectType = \"IfcSanitaryTerminal\";\r\n            propertySetSanitaryTerminalTypeBidet.PredefinedType = \"BIDET\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.Mounting\", \"Mounting\");\r\n            ifcPSE.PropertyName = \"Mounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SanitaryMounting);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mounting\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"装着\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.SpilloverLevel\", \"SpilloverLevel\");\r\n            ifcPSE.PropertyName = \"SpilloverLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Spillover Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流出レベル\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpilloverLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Drain Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ドレインサイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeBidet\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeBidet.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeBidet.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeBidet.ObjectType = \"IfcSanitaryTerminal\";\r\n            propertySetSanitaryTerminalTypeBidet.PredefinedType = \"BIDET\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.Mounting\", \"Mounting\");\r\n            ifcPSE.PropertyName = \"Mounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SanitaryMounting);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.SpilloverLevel\", \"SpilloverLevel\");\r\n            ifcPSE.PropertyName = \"SpilloverLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpilloverLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeBidet.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeBidet.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSanitaryTerminalTypeBidet);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SanitaryTerminalTypeCistern(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSanitaryTerminalTypeCistern = new PropertySetDescription();\r\n         propertySetSanitaryTerminalTypeCistern.Name = \"Pset_SanitaryTerminalTypeCistern\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeCistern\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeCistern.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeCistern.ObjectType = \"Cistern\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.CisternHeight\", \"CisternHeight\");\r\n            ifcPSE.PropertyName = \"CisternHeight\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_CisternHeight);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CisternHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.CisternCapacity\", \"CisternCapacity\");\r\n            ifcPSE.PropertyName = \"CisternCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CisternCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.IsSingleFlush\", \"IsSingleFlush\");\r\n            ifcPSE.PropertyName = \"IsSingleFlush\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSingleFlushCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.FlushType\", \"FlushType\");\r\n            ifcPSE.PropertyName = \"FlushType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FlushType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlushTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.FlushRate\", \"FlushRate\");\r\n            ifcPSE.PropertyName = \"FlushRate\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlushRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.IsAutomaticFlush\", \"IsAutomaticFlush\");\r\n            ifcPSE.PropertyName = \"IsAutomaticFlush\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsAutomaticFlushCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.CisternMaterial\", \"CisternMaterial\");\r\n            ifcPSE.PropertyName = \"CisternMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CisternMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.CisternColor\", \"CisternColor\");\r\n            ifcPSE.PropertyName = \"CisternColor\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CisternColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeCistern\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeCistern.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeCistern.ObjectType = \"IfcSanitaryTerminalType\";\r\n            propertySetSanitaryTerminalTypeCistern.PredefinedType = \"CISTERN\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.CisternHeight\", \"CisternHeight\");\r\n            ifcPSE.PropertyName = \"CisternHeight\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_CisternHeight);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CisternHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.CisternCapacity\", \"CisternCapacity\");\r\n            ifcPSE.PropertyName = \"CisternCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CisternCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.IsSingleFlush\", \"IsSingleFlush\");\r\n            ifcPSE.PropertyName = \"IsSingleFlush\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSingleFlushCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.FlushType\", \"FlushType\");\r\n            ifcPSE.PropertyName = \"FlushType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FlushType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlushTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.FlushRate\", \"FlushRate\");\r\n            ifcPSE.PropertyName = \"FlushRate\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlushRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.IsAutomaticFlush\", \"IsAutomaticFlush\");\r\n            ifcPSE.PropertyName = \"IsAutomaticFlush\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsAutomaticFlushCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.CisternMaterial\", \"CisternMaterial\");\r\n            ifcPSE.PropertyName = \"CisternMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CisternMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.CisternColor\", \"CisternColor\");\r\n            ifcPSE.PropertyName = \"CisternColor\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CisternColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeCistern\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeCistern.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeCistern.ObjectType = \"IfcSanitaryTerminal\";\r\n            propertySetSanitaryTerminalTypeCistern.PredefinedType = \"CISTERN\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.CisternHeight\", \"CisternHeight\");\r\n            ifcPSE.PropertyName = \"CisternHeight\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_CisternHeight);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cistern Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"貯水タンクの高さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CisternHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.CisternCapacity\", \"CisternCapacity\");\r\n            ifcPSE.PropertyName = \"CisternCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cistern Capacity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"貯水タンク容量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CisternCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.IsSingleFlush\", \"IsSingleFlush\");\r\n            ifcPSE.PropertyName = \"IsSingleFlush\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Single Flush\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"単一のフラッシュ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSingleFlushCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.FlushType\", \"FlushType\");\r\n            ifcPSE.PropertyName = \"FlushType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FlushType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flush Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"タイプフラッシュ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlushTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.FlushRate\", \"FlushRate\");\r\n            ifcPSE.PropertyName = \"FlushRate\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flush Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"フラッシュレート\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlushRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.IsAutomaticFlush\", \"IsAutomaticFlush\");\r\n            ifcPSE.PropertyName = \"IsAutomaticFlush\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Automatic Flush\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"自動フラッシュか\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsAutomaticFlushCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeCistern\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeCistern.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeCistern.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeCistern.ObjectType = \"IfcSanitaryTerminal\";\r\n            propertySetSanitaryTerminalTypeCistern.PredefinedType = \"CISTERN\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.CisternHeight\", \"CisternHeight\");\r\n            ifcPSE.PropertyName = \"CisternHeight\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CisternHeight);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CisternHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.CisternCapacity\", \"CisternCapacity\");\r\n            ifcPSE.PropertyName = \"CisternCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CisternCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.IsSingleFlush\", \"IsSingleFlush\");\r\n            ifcPSE.PropertyName = \"IsSingleFlush\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSingleFlushCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.FlushType\", \"FlushType\");\r\n            ifcPSE.PropertyName = \"FlushType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FlushType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlushTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.FlushRate\", \"FlushRate\");\r\n            ifcPSE.PropertyName = \"FlushRate\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlushRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCistern.IsAutomaticFlush\", \"IsAutomaticFlush\");\r\n            ifcPSE.PropertyName = \"IsAutomaticFlush\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsAutomaticFlushCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCistern.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSanitaryTerminalTypeCistern);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SanitaryTerminalTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSanitaryTerminalTypeCommon = new PropertySetDescription();\r\n         propertySetSanitaryTerminalTypeCommon.Name = \"Pset_SanitaryTerminalTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeCommon\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeCommon.ObjectType = \"IfcSanitaryTerminal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCommon.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCommon.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCommon.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCommon.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeCommon\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeCommon.ObjectType = \"IfcSanitaryTerminal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCommon.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCommon.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCommon.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeCommon.Colour\", \"Colour\");\r\n            ifcPSE.PropertyName = \"Colour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSanitaryTerminalTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SanitaryTerminalTypeSanitaryFountain(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSanitaryTerminalTypeSanitaryFountain = new PropertySetDescription();\r\n         propertySetSanitaryTerminalTypeSanitaryFountain.Name = \"Pset_SanitaryTerminalTypeSanitaryFountain\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeSanitaryFountain\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.ObjectType = \"SanitaryFountain\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.FountainType\", \"FountainType\");\r\n            ifcPSE.PropertyName = \"FountainType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FountainType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FountainTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.Mounting\", \"Mounting\");\r\n            ifcPSE.PropertyName = \"Mounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_SanitaryMounting);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeSanitaryFountain\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.ObjectType = \"IfcSanitaryTerminalType\";\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.PredefinedType = \"SANITARYFOUNTAIN\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.FountainType\", \"FountainType\");\r\n            ifcPSE.PropertyName = \"FountainType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FountainType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FountainTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.Mounting\", \"Mounting\");\r\n            ifcPSE.PropertyName = \"Mounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_SanitaryMounting);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeSanitaryFountain\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.ObjectType = \"IfcSanitaryTerminal\";\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.PredefinedType = \"SANITARYFOUNTAIN\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.FountainType\", \"FountainType\");\r\n            ifcPSE.PropertyName = \"FountainType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FountainType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fountain Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"噴水タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FountainTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.Mounting\", \"Mounting\");\r\n            ifcPSE.PropertyName = \"Mounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SanitaryMounting);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mounting\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設置\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Drain Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"下水管サイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeSanitaryFountain\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.ObjectType = \"IfcSanitaryTerminal\";\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.PredefinedType = \"SANITARYFOUNTAIN\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.FountainType\", \"FountainType\");\r\n            ifcPSE.PropertyName = \"FountainType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FountainType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FountainTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.Mounting\", \"Mounting\");\r\n            ifcPSE.PropertyName = \"Mounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SanitaryMounting);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSanitaryFountain.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSanitaryFountain.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSanitaryTerminalTypeSanitaryFountain);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SanitaryTerminalTypeShower(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSanitaryTerminalTypeShower = new PropertySetDescription();\r\n         propertySetSanitaryTerminalTypeShower.Name = \"Pset_SanitaryTerminalTypeShower\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeShower\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeShower.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeShower.ObjectType = \"Shower\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.ShowerType\", \"ShowerType\");\r\n            ifcPSE.PropertyName = \"ShowerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_ShowerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShowerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.HasTray\", \"HasTray\");\r\n            ifcPSE.PropertyName = \"HasTray\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasTrayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.MaterialThickness\", \"MaterialThickness\");\r\n            ifcPSE.PropertyName = \"MaterialThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.ShowerHeadDescription\", \"ShowerHeadDescription\");\r\n            ifcPSE.PropertyName = \"ShowerHeadDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShowerHeadDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeShower\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeShower.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeShower.ObjectType = \"IfcSanitaryTerminalType\";\r\n            propertySetSanitaryTerminalTypeShower.PredefinedType = \"SHOWER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.ShowerType\", \"ShowerType\");\r\n            ifcPSE.PropertyName = \"ShowerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ShowerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShowerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.HasTray\", \"HasTray\");\r\n            ifcPSE.PropertyName = \"HasTray\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasTrayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.MaterialThickness\", \"MaterialThickness\");\r\n            ifcPSE.PropertyName = \"MaterialThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.ShowerHeadDescription\", \"ShowerHeadDescription\");\r\n            ifcPSE.PropertyName = \"ShowerHeadDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShowerHeadDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeShower\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeShower.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeShower.ObjectType = \"IfcSanitaryTerminal\";\r\n            propertySetSanitaryTerminalTypeShower.PredefinedType = \"SHOWER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.ShowerType\", \"ShowerType\");\r\n            ifcPSE.PropertyName = \"ShowerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ShowerType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shower Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"シャワータイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShowerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.HasTray\", \"HasTray\");\r\n            ifcPSE.PropertyName = \"HasTray\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Tray\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasTrayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.ShowerHeadDescription\", \"ShowerHeadDescription\");\r\n            ifcPSE.PropertyName = \"ShowerHeadDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shower Head Description\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"シャワーヘッド表現\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShowerHeadDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Drain Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"管口径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeShower\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeShower.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeShower.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeShower.ObjectType = \"IfcSanitaryTerminal\";\r\n            propertySetSanitaryTerminalTypeShower.PredefinedType = \"SHOWER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.ShowerType\", \"ShowerType\");\r\n            ifcPSE.PropertyName = \"ShowerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ShowerType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShowerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.HasTray\", \"HasTray\");\r\n            ifcPSE.PropertyName = \"HasTray\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasTrayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.ShowerHeadDescription\", \"ShowerHeadDescription\");\r\n            ifcPSE.PropertyName = \"ShowerHeadDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShowerHeadDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeShower.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeShower.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSanitaryTerminalTypeShower);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SanitaryTerminalTypeSink(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSanitaryTerminalTypeSink = new PropertySetDescription();\r\n         propertySetSanitaryTerminalTypeSink.Name = \"Pset_SanitaryTerminalTypeSink\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeSink\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeSink.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeSink.ObjectType = \"Sink\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.SinkType\", \"SinkType\");\r\n            ifcPSE.PropertyName = \"SinkType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_SinkType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SinkTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.SinkMounting\", \"SinkMounting\");\r\n            ifcPSE.PropertyName = \"SinkMounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_SanitaryMounting);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SinkMountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeSink\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeSink.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeSink.ObjectType = \"IfcSanitaryTerminalType\";\r\n            propertySetSanitaryTerminalTypeSink.PredefinedType = \"SINK\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.SinkType\", \"SinkType\");\r\n            ifcPSE.PropertyName = \"SinkType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_SinkType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SinkTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.SinkMounting\", \"SinkMounting\");\r\n            ifcPSE.PropertyName = \"SinkMounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_SanitaryMounting);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SinkMountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeSink\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeSink.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeSink.ObjectType = \"IfcSanitaryTerminal\";\r\n            propertySetSanitaryTerminalTypeSink.PredefinedType = \"SINK\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.SinkType\", \"SinkType\");\r\n            ifcPSE.PropertyName = \"SinkType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SinkType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sink Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"シンクの種類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SinkTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.Mounting\", \"Mounting\");\r\n            ifcPSE.PropertyName = \"Mounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SanitaryMounting);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mounting\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設置\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Color\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"色\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Drain Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"管径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.MountingOffset\", \"MountingOffset\");\r\n            ifcPSE.PropertyName = \"MountingOffset\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mounting Offset\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"据付補正\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeSink\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeSink.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeSink.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeSink.ObjectType = \"IfcSanitaryTerminal\";\r\n            propertySetSanitaryTerminalTypeSink.PredefinedType = \"SINK\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.SinkType\", \"SinkType\");\r\n            ifcPSE.PropertyName = \"SinkType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SinkType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SinkTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.Mounting\", \"Mounting\");\r\n            ifcPSE.PropertyName = \"Mounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SanitaryMounting);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.Colour\", \"Colour\");\r\n            ifcPSE.PropertyName = \"Colour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeSink.MountingOffset\", \"MountingOffset\");\r\n            ifcPSE.PropertyName = \"MountingOffset\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeSink.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSanitaryTerminalTypeSink);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SanitaryTerminalTypeToiletPan(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSanitaryTerminalTypeToiletPan = new PropertySetDescription();\r\n         propertySetSanitaryTerminalTypeToiletPan.Name = \"Pset_SanitaryTerminalTypeToiletPan\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeToiletPan\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeToiletPan.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeToiletPan.ObjectType = \"ToiletPan\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.ToiletType\", \"ToiletType\");\r\n            ifcPSE.PropertyName = \"ToiletType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_ToiletType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ToiletTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.ToiletPanType\", \"ToiletPanType\");\r\n            ifcPSE.PropertyName = \"ToiletPanType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_ToiletPanType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ToiletPanTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.PanMounting\", \"PanMounting\");\r\n            ifcPSE.PropertyName = \"PanMounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_SanitaryMounting);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanMountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.PanMaterial\", \"PanMaterial\");\r\n            ifcPSE.PropertyName = \"PanMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.PanColor\", \"PanColor\");\r\n            ifcPSE.PropertyName = \"PanColor\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.SpilloverLevel\", \"SpilloverLevel\");\r\n            ifcPSE.PropertyName = \"SpilloverLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpilloverLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeToiletPan\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeToiletPan.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeToiletPan.ObjectType = \"IfcSanitaryTerminalType\";\r\n            propertySetSanitaryTerminalTypeToiletPan.PredefinedType = \"TOILETPAN\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.ToiletType\", \"ToiletType\");\r\n            ifcPSE.PropertyName = \"ToiletType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ToiletType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ToiletTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.ToiletPanType\", \"ToiletPanType\");\r\n            ifcPSE.PropertyName = \"ToiletPanType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ToiletPanType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ToiletPanTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.PanMounting\", \"PanMounting\");\r\n            ifcPSE.PropertyName = \"PanMounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_SanitaryMounting);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanMountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.PanMaterial\", \"PanMaterial\");\r\n            ifcPSE.PropertyName = \"PanMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.PanColor\", \"PanColor\");\r\n            ifcPSE.PropertyName = \"PanColor\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.SpilloverLevel\", \"SpilloverLevel\");\r\n            ifcPSE.PropertyName = \"SpilloverLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpilloverLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeToiletPan\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeToiletPan.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeToiletPan.ObjectType = \"IfcSanitaryTerminal\";\r\n            propertySetSanitaryTerminalTypeToiletPan.PredefinedType = \"TOILETPAN\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.ToiletType\", \"ToiletType\");\r\n            ifcPSE.PropertyName = \"ToiletType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ToiletType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Toilet Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"トイレ種類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ToiletTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.ToiletPanType\", \"ToiletPanType\");\r\n            ifcPSE.PropertyName = \"ToiletPanType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ToiletPanType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Toilet Pan Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"便器タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ToiletPanTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.PanMounting\", \"PanMounting\");\r\n            ifcPSE.PropertyName = \"PanMounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SanitaryMounting);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pan Mounting\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"取付方法\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanMountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.SpilloverLevel\", \"SpilloverLevel\");\r\n            ifcPSE.PropertyName = \"SpilloverLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Spillover Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水位\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpilloverLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeToiletPan\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeToiletPan.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeToiletPan.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeToiletPan.ObjectType = \"IfcSanitaryTerminal\";\r\n            propertySetSanitaryTerminalTypeToiletPan.PredefinedType = \"TOILETPAN\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.ToiletType\", \"ToiletType\");\r\n            ifcPSE.PropertyName = \"ToiletType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ToiletType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ToiletTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.ToiletPanType\", \"ToiletPanType\");\r\n            ifcPSE.PropertyName = \"ToiletPanType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ToiletPanType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ToiletPanTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.PanMounting\", \"PanMounting\");\r\n            ifcPSE.PropertyName = \"PanMounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SanitaryMounting);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanMountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeToiletPan.SpilloverLevel\", \"SpilloverLevel\");\r\n            ifcPSE.PropertyName = \"SpilloverLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpilloverLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeToiletPan.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSanitaryTerminalTypeToiletPan);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SanitaryTerminalTypeUrinal(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSanitaryTerminalTypeUrinal = new PropertySetDescription();\r\n         propertySetSanitaryTerminalTypeUrinal.Name = \"Pset_SanitaryTerminalTypeUrinal\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeUrinal\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeUrinal.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeUrinal.ObjectType = \"Urinal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.UrinalType\", \"UrinalType\");\r\n            ifcPSE.PropertyName = \"UrinalType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_UrinalType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UrinalTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.UrinalMaterial\", \"UrinalMaterial\");\r\n            ifcPSE.PropertyName = \"UrinalMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UrinalMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.UrinalColor\", \"UrinalColor\");\r\n            ifcPSE.PropertyName = \"UrinalColor\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UrinalColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.SpilloverLevel\", \"SpilloverLevel\");\r\n            ifcPSE.PropertyName = \"SpilloverLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpilloverLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeUrinal\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeUrinal.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeUrinal.ObjectType = \"IfcSanitaryTerminalType\";\r\n            propertySetSanitaryTerminalTypeUrinal.PredefinedType = \"URINAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.UrinalType\", \"UrinalType\");\r\n            ifcPSE.PropertyName = \"UrinalType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_UrinalType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UrinalTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.UrinalMaterial\", \"UrinalMaterial\");\r\n            ifcPSE.PropertyName = \"UrinalMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UrinalMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.UrinalColor\", \"UrinalColor\");\r\n            ifcPSE.PropertyName = \"UrinalColor\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UrinalColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.SpilloverLevel\", \"SpilloverLevel\");\r\n            ifcPSE.PropertyName = \"SpilloverLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpilloverLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeUrinal\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeUrinal.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeUrinal.ObjectType = \"IfcSanitaryTerminal\";\r\n            propertySetSanitaryTerminalTypeUrinal.PredefinedType = \"URINAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.UrinalType\", \"UrinalType\");\r\n            ifcPSE.PropertyName = \"UrinalType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_UrinalType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Urinal Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"小便器タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UrinalTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.Mounting\", \"Mounting\");\r\n            ifcPSE.PropertyName = \"Mounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SanitaryMounting);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mounting\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設置\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.SpilloverLevel\", \"SpilloverLevel\");\r\n            ifcPSE.PropertyName = \"SpilloverLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Spillover Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水位\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpilloverLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeUrinal\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeUrinal.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeUrinal.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeUrinal.ObjectType = \"IfcSanitaryTerminal\";\r\n            propertySetSanitaryTerminalTypeUrinal.PredefinedType = \"URINAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.UrinalType\", \"UrinalType\");\r\n            ifcPSE.PropertyName = \"UrinalType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_UrinalType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UrinalTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.Mounting\", \"Mounting\");\r\n            ifcPSE.PropertyName = \"Mounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SanitaryMounting);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeUrinal.SpilloverLevel\", \"SpilloverLevel\");\r\n            ifcPSE.PropertyName = \"SpilloverLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpilloverLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeUrinal.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSanitaryTerminalTypeUrinal);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SanitaryTerminalTypeWashHandBasin(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSanitaryTerminalTypeWashHandBasin = new PropertySetDescription();\r\n         propertySetSanitaryTerminalTypeWashHandBasin.Name = \"Pset_SanitaryTerminalTypeWashHandBasin\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeWashHandBasin\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeWashHandBasin.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeWashHandBasin.ObjectType = \"WashHandBasin\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.WashHandBasinType\", \"WashHandBasinType\");\r\n            ifcPSE.PropertyName = \"WashHandBasinType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_WashHandBasinType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WashHandBasinTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.WashHandBasinMounting\", \"WashHandBasinMounting\");\r\n            ifcPSE.PropertyName = \"WashHandBasinMounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_SanitaryMounting);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WashHandBasinMountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeWashHandBasin\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeWashHandBasin.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeWashHandBasin.ObjectType = \"IfcSanitaryTerminalType\";\r\n            propertySetSanitaryTerminalTypeWashHandBasin.PredefinedType = \"WASHHANDBASIN\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.WashHandBasinType\", \"WashHandBasinType\");\r\n            ifcPSE.PropertyName = \"WashHandBasinType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_WashHandBasinType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WashHandBasinTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.WashHandBasinMounting\", \"WashHandBasinMounting\");\r\n            ifcPSE.PropertyName = \"WashHandBasinMounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_SanitaryMounting);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WashHandBasinMountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.Color\", \"Color\");\r\n            ifcPSE.PropertyName = \"Color\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeWashHandBasin\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeWashHandBasin.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeWashHandBasin.ObjectType = \"IfcSanitaryTerminal\";\r\n            propertySetSanitaryTerminalTypeWashHandBasin.PredefinedType = \"WASHHANDBASIN\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.WashHandBasinType\", \"WashHandBasinType\");\r\n            ifcPSE.PropertyName = \"WashHandBasinType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_WashHandBasinType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wash Hand Basin Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"手洗い種類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WashHandBasinTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.Mounting\", \"Mounting\");\r\n            ifcPSE.PropertyName = \"Mounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SanitaryMounting);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mounting\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設置\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Drain Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"管径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.MountingOffset\", \"MountingOffset\");\r\n            ifcPSE.PropertyName = \"MountingOffset\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mounting Offset\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"据付補正\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeWashHandBasin\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeWashHandBasin.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            propertySetSanitaryTerminalTypeWashHandBasin.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeWashHandBasin.ObjectType = \"IfcSanitaryTerminal\";\r\n            propertySetSanitaryTerminalTypeWashHandBasin.PredefinedType = \"WASHHANDBASIN\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.WashHandBasinType\", \"WashHandBasinType\");\r\n            ifcPSE.PropertyName = \"WashHandBasinType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_WashHandBasinType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WashHandBasinTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.Mounting\", \"Mounting\");\r\n            ifcPSE.PropertyName = \"Mounting\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SanitaryMounting);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.DrainSize\", \"DrainSize\");\r\n            ifcPSE.PropertyName = \"DrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWashHandBasin.MountingOffset\", \"MountingOffset\");\r\n            ifcPSE.PropertyName = \"MountingOffset\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MountingOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWashHandBasin.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSanitaryTerminalTypeWashHandBasin);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SanitaryTerminalTypeWCSeat(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSanitaryTerminalTypeWCSeat = new PropertySetDescription();\r\n         propertySetSanitaryTerminalTypeWCSeat.Name = \"Pset_SanitaryTerminalTypeWCSeat\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeWCSeat\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeWCSeat.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeWCSeat.ObjectType = \"WCSeat\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWCSeat.SeatType\", \"SeatType\");\r\n            ifcPSE.PropertyName = \"SeatType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_ToiletSeatType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeatTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWCSeat.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWCSeat.SeatHasCover\", \"SeatHasCover\");\r\n            ifcPSE.PropertyName = \"SeatHasCover\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeatHasCoverCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWCSeat.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWCSeat.SeatMaterial\", \"SeatMaterial\");\r\n            ifcPSE.PropertyName = \"SeatMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeatMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWCSeat.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWCSeat.SeatColor\", \"SeatColor\");\r\n            ifcPSE.PropertyName = \"SeatColor\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeatColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWCSeat.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SanitaryTerminalTypeWCSeat\"))\r\n         {\r\n            propertySetSanitaryTerminalTypeWCSeat.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            propertySetSanitaryTerminalTypeWCSeat.ObjectType = \"IfcSanitaryTerminalType\";\r\n            propertySetSanitaryTerminalTypeWCSeat.PredefinedType = \"WCSEAT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWCSeat.SeatType\", \"SeatType\");\r\n            ifcPSE.PropertyName = \"SeatType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ToiletSeatType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeatTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWCSeat.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWCSeat.SeatHasCover\", \"SeatHasCover\");\r\n            ifcPSE.PropertyName = \"SeatHasCover\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeatHasCoverCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWCSeat.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWCSeat.SeatMaterial\", \"SeatMaterial\");\r\n            ifcPSE.PropertyName = \"SeatMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeatMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWCSeat.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SanitaryTerminalTypeWCSeat.SeatColor\", \"SeatColor\");\r\n            ifcPSE.PropertyName = \"SeatColor\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeatColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSanitaryTerminalTypeWCSeat.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSanitaryTerminalTypeWCSeat);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SectioningDevice(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSectioningDevice = new PropertySetDescription();\r\n         propertySetSectioningDevice.Name = \"Pset_SectioningDevice\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SectioningDevice\"))\r\n         {\r\n            propertySetSectioningDevice.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetSectioningDevice.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetSectioningDevice.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetSectioningDevice.PredefinedType = \"INSULATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SectioningDevice.SectioningDeviceType\", \"SectioningDeviceType\");\r\n            ifcPSE.PropertyName = \"SectioningDeviceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SectioningDeviceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SectioningDeviceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSectioningDevice.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSectioningDevice);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SectionInsulator(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSectionInsulator = new PropertySetDescription();\r\n         propertySetSectionInsulator.Name = \"Pset_SectionInsulator\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SectionInsulator\"))\r\n         {\r\n            propertySetSectionInsulator.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetSectionInsulator.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetSectionInsulator.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetSectionInsulator.PredefinedType = \"INSULATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SectionInsulator.ACResistance\", \"ACResistance\");\r\n            ifcPSE.PropertyName = \"ACResistance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ACResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSectionInsulator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SectionInsulator.NumberOfWires\", \"NumberOfWires\");\r\n            ifcPSE.PropertyName = \"NumberOfWires\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfWiresCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSectionInsulator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SectionInsulator.IsArcSuppressing\", \"IsArcSuppressing\");\r\n            ifcPSE.PropertyName = \"IsArcSuppressing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsArcSuppressingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSectionInsulator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SectionInsulator.TensileStrength\", \"TensileStrength\");\r\n            ifcPSE.PropertyName = \"TensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSectionInsulator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSectionInsulator);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorPHistory = new PropertySetDescription();\r\n         propertySetSensorPHistory.Name = \"Pset_SensorPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorPHistory\"))\r\n         {\r\n            propertySetSensorPHistory.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorPHistory.ObjectType = \"IfcSensor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorPHistory.Value\", \"Value\");\r\n            ifcPSE.PropertyName = \"Value\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Value\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorPHistory.Direction\", \"Direction\");\r\n            ifcPSE.PropertyName = \"Direction\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Direction\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorPHistory.Quality\", \"Quality\");\r\n            ifcPSE.PropertyName = \"Quality\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Quality\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.QualityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorPHistory.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorPHistory\"))\r\n         {\r\n            propertySetSensorPHistory.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorPHistory.ObjectType = \"IfcSensor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorPHistory.Value\", \"Value\");\r\n            ifcPSE.PropertyName = \"Value\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorPHistory.Direction\", \"Direction\");\r\n            ifcPSE.PropertyName = \"Direction\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DirectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorPHistory.Quality\", \"Quality\");\r\n            ifcPSE.PropertyName = \"Quality\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.QualityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorPHistory.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeCO2Sensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeCO2Sensor = new PropertySetDescription();\r\n         propertySetSensorTypeCO2Sensor.Name = \"Pset_SensorTypeCO2Sensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeCO2Sensor\"))\r\n         {\r\n            propertySetSensorTypeCO2Sensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeCO2Sensor.ObjectType = \"CO2Sensor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeCO2Sensor.CoverageArea\", \"CoverageArea\");\r\n            ifcPSE.PropertyName = \"CoverageArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverageAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeCO2Sensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeCO2Sensor.WashHandBasinSetPoint\", \"WashHandBasinSetPoint\");\r\n            ifcPSE.PropertyName = \"WashHandBasinSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WashHandBasinSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeCO2Sensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeCO2Sensor.CO2SensorRange\", \"CO2SensorRange\");\r\n            ifcPSE.PropertyName = \"CO2SensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CO2SensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeCO2Sensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeCO2Sensor.AccuracyOfCO2Sensor\", \"AccuracyOfCO2Sensor\");\r\n            ifcPSE.PropertyName = \"AccuracyOfCO2Sensor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyOfCO2SensorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeCO2Sensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeCO2Sensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeCO2Sensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeCO2Sensor\"))\r\n         {\r\n            propertySetSensorTypeCO2Sensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeCO2Sensor.ObjectType = \"IfcSensorType\";\r\n            propertySetSensorTypeCO2Sensor.PredefinedType = \"CO2SENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeCO2Sensor.CoverageArea\", \"CoverageArea\");\r\n            ifcPSE.PropertyName = \"CoverageArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverageAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeCO2Sensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeCO2Sensor.WashHandBasinSetPoint\", \"WashHandBasinSetPoint\");\r\n            ifcPSE.PropertyName = \"WashHandBasinSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WashHandBasinSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeCO2Sensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeCO2Sensor.CO2SensorRange\", \"CO2SensorRange\");\r\n            ifcPSE.PropertyName = \"CO2SensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CO2SensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeCO2Sensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeCO2Sensor.AccuracyOfCO2Sensor\", \"AccuracyOfCO2Sensor\");\r\n            ifcPSE.PropertyName = \"AccuracyOfCO2Sensor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyOfCO2SensorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeCO2Sensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeCO2Sensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeCO2Sensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeCO2Sensor\"))\r\n         {\r\n            propertySetSensorTypeCO2Sensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeCO2Sensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeCO2Sensor.PredefinedType = \"CO2SENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeCO2Sensor.SetPointConcentration\", \"SetPointConcentration\");\r\n            ifcPSE.PropertyName = \"SetPointConcentration\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Concentration\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointConcentrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeCO2Sensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeCO2Sensor\"))\r\n         {\r\n            propertySetSensorTypeCO2Sensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeCO2Sensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeCO2Sensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeCO2Sensor.PredefinedType = \"CO2SENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeCO2Sensor.SetPointCO2Concentration\", \"SetPointCO2Concentration\");\r\n            ifcPSE.PropertyName = \"SetPointCO2Concentration\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointCO2ConcentrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeCO2Sensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeCO2Sensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeCommon = new PropertySetDescription();\r\n         propertySetSensorTypeCommon.Name = \"Pset_SensorTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeCommon\"))\r\n         {\r\n            propertySetSensorTypeCommon.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeCommon.ObjectType = \"IfcSensor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조ID\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeCommon\"))\r\n         {\r\n            propertySetSensorTypeCommon.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeCommon.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeCommon.ObjectType = \"IfcSensor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeConductanceSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeConductanceSensor = new PropertySetDescription();\r\n         propertySetSensorTypeConductanceSensor.Name = \"Pset_SensorTypeConductanceSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeConductanceSensor\"))\r\n         {\r\n            propertySetSensorTypeConductanceSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeConductanceSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeConductanceSensor.PredefinedType = \"CONDUCTANCESENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeConductanceSensor.SetPointConductance\", \"SetPointConductance\");\r\n            ifcPSE.PropertyName = \"SetPointConductance\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricConductance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Conductance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"電気伝導率設定値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전기 전도율 설정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointConductanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeConductanceSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeConductanceSensor\"))\r\n         {\r\n            propertySetSensorTypeConductanceSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeConductanceSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeConductanceSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeConductanceSensor.PredefinedType = \"CONDUCTANCESENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeConductanceSensor.SetPointConductance\", \"SetPointConductance\");\r\n            ifcPSE.PropertyName = \"SetPointConductance\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricConductance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointConductanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeConductanceSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeConductanceSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeContactSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeContactSensor = new PropertySetDescription();\r\n         propertySetSensorTypeContactSensor.Name = \"Pset_SensorTypeContactSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeContactSensor\"))\r\n         {\r\n            propertySetSensorTypeContactSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeContactSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeContactSensor.PredefinedType = \"CONTACTSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeContactSensor.SetPointContact\", \"SetPointContact\");\r\n            ifcPSE.PropertyName = \"SetPointContact\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Contact\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"接触状態設定値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"접촉 상태 설정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointContactCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeContactSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeContactSensor\"))\r\n         {\r\n            propertySetSensorTypeContactSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeContactSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeContactSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeContactSensor.PredefinedType = \"CONTACTSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeContactSensor.SetPointContact\", \"SetPointContact\");\r\n            ifcPSE.PropertyName = \"SetPointContact\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointContactCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeContactSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeContactSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeEarthquakeSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeEarthquakeSensor = new PropertySetDescription();\r\n         propertySetSensorTypeEarthquakeSensor.Name = \"Pset_SensorTypeEarthquakeSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeEarthquakeSensor\"))\r\n         {\r\n            propertySetSensorTypeEarthquakeSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeEarthquakeSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeEarthquakeSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeEarthquakeSensor.PredefinedType = \"EARTHQUAKESENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeEarthquakeSensor.MarginOfError\", \"MarginOfError\");\r\n            ifcPSE.PropertyName = \"MarginOfError\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarginOfErrorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeEarthquakeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeEarthquakeSensor.LinearVelocityResolution\", \"LinearVelocityResolution\");\r\n            ifcPSE.PropertyName = \"LinearVelocityResolution\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LinearVelocityResolutionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeEarthquakeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeEarthquakeSensor.SamplingFrequency\", \"SamplingFrequency\");\r\n            ifcPSE.PropertyName = \"SamplingFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SamplingFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeEarthquakeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeEarthquakeSensor.WorkingState\", \"WorkingState\");\r\n            ifcPSE.PropertyName = \"WorkingState\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeEarthquakeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeEarthquakeSensor.DataCollectionType\", \"DataCollectionType\");\r\n            ifcPSE.PropertyName = \"DataCollectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DataCollectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DataCollectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeEarthquakeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeEarthquakeSensor.DegreeOfLinearity\", \"DegreeOfLinearity\");\r\n            ifcPSE.PropertyName = \"DegreeOfLinearity\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DegreeOfLinearityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeEarthquakeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeEarthquakeSensor.DynamicRange\", \"DynamicRange\");\r\n            ifcPSE.PropertyName = \"DynamicRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DynamicRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeEarthquakeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeEarthquakeSensor.EarthquakeSensorRange\", \"EarthquakeSensorRange\");\r\n            ifcPSE.PropertyName = \"EarthquakeSensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EarthquakeSensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeEarthquakeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeEarthquakeSensor.FullScaleOutput\", \"FullScaleOutput\");\r\n            ifcPSE.PropertyName = \"FullScaleOutput\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FullScaleOutputCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeEarthquakeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeEarthquakeSensor.SerialInterfaceType\", \"SerialInterfaceType\");\r\n            ifcPSE.PropertyName = \"SerialInterfaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SerialInterfaceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SerialInterfaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeEarthquakeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeEarthquakeSensor.TransverseSensitivityRatio\", \"TransverseSensitivityRatio\");\r\n            ifcPSE.PropertyName = \"TransverseSensitivityRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransverseSensitivityRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeEarthquakeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeEarthquakeSensor.EarthquakeSensorType\", \"EarthquakeSensorType\");\r\n            ifcPSE.PropertyName = \"EarthquakeSensorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_EarthquakeSensorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EarthquakeSensorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeEarthquakeSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeEarthquakeSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeFireSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeFireSensor = new PropertySetDescription();\r\n         propertySetSensorTypeFireSensor.Name = \"Pset_SensorTypeFireSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeFireSensor\"))\r\n         {\r\n            propertySetSensorTypeFireSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeFireSensor.ObjectType = \"FireSensor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeFireSensor.FireSensorSetPoint\", \"FireSensorSetPoint\");\r\n            ifcPSE.PropertyName = \"FireSensorSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireSensorSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeFireSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeFireSensor.AccuracyOfFireSensor\", \"AccuracyOfFireSensor\");\r\n            ifcPSE.PropertyName = \"AccuracyOfFireSensor\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyOfFireSensorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeFireSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeFireSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeFireSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeFireSensor\"))\r\n         {\r\n            propertySetSensorTypeFireSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeFireSensor.ObjectType = \"IfcSensorType\";\r\n            propertySetSensorTypeFireSensor.PredefinedType = \"FIRESENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeFireSensor.FireSensorSetPoint\", \"FireSensorSetPoint\");\r\n            ifcPSE.PropertyName = \"FireSensorSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireSensorSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeFireSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeFireSensor.AccuracyOfFireSensor\", \"AccuracyOfFireSensor\");\r\n            ifcPSE.PropertyName = \"AccuracyOfFireSensor\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyOfFireSensorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeFireSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeFireSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeFireSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeFireSensor\"))\r\n         {\r\n            propertySetSensorTypeFireSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeFireSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeFireSensor.PredefinedType = \"FIRESENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeFireSensor.FireSensorSetPoint\", \"FireSensorSetPoint\");\r\n            ifcPSE.PropertyName = \"FireSensorSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Sensor Set Point\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"感知温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"감지 온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireSensorSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeFireSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeFireSensor.AccuracyOfFireSensor\", \"AccuracyOfFireSensor\");\r\n            ifcPSE.PropertyName = \"AccuracyOfFireSensor\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Accuracy Of Fire Sensor\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"精度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"정확도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyOfFireSensorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeFireSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeFireSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Time Constant\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"時定数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"시정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeFireSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeFireSensor\"))\r\n         {\r\n            propertySetSensorTypeFireSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeFireSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeFireSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeFireSensor.PredefinedType = \"FIRESENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeFireSensor.FireSensorSetPoint\", \"FireSensorSetPoint\");\r\n            ifcPSE.PropertyName = \"FireSensorSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireSensorSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeFireSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeFireSensor.AccuracyOfFireSensor\", \"AccuracyOfFireSensor\");\r\n            ifcPSE.PropertyName = \"AccuracyOfFireSensor\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyOfFireSensorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeFireSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeFireSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeFireSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeFireSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeFlowSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeFlowSensor = new PropertySetDescription();\r\n         propertySetSensorTypeFlowSensor.Name = \"Pset_SensorTypeFlowSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeFlowSensor\"))\r\n         {\r\n            propertySetSensorTypeFlowSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeFlowSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeFlowSensor.PredefinedType = \"FLOWSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeFlowSensor.SetPointFlow\", \"SetPointFlow\");\r\n            ifcPSE.PropertyName = \"SetPointFlow\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Flow\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流量設定値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"유량 설정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointFlowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeFlowSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeFlowSensor\"))\r\n         {\r\n            propertySetSensorTypeFlowSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeFlowSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeFlowSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeFlowSensor.PredefinedType = \"FLOWSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeFlowSensor.SetPointFlow\", \"SetPointFlow\");\r\n            ifcPSE.PropertyName = \"SetPointFlow\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointFlowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeFlowSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeFlowSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeForeignObjectDetectionSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeForeignObjectDetectionSensor = new PropertySetDescription();\r\n         propertySetSensorTypeForeignObjectDetectionSensor.Name = \"Pset_SensorTypeForeignObjectDetectionSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeForeignObjectDetectionSensor\"))\r\n         {\r\n            propertySetSensorTypeForeignObjectDetectionSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeForeignObjectDetectionSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeForeignObjectDetectionSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeForeignObjectDetectionSensor.PredefinedType = \"FOREIGNOBJECTDETECTIONSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeForeignObjectDetectionSensor.WorkingState\", \"WorkingState\");\r\n            ifcPSE.PropertyName = \"WorkingState\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeForeignObjectDetectionSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeForeignObjectDetectionSensor.SerialInterfaceType\", \"SerialInterfaceType\");\r\n            ifcPSE.PropertyName = \"SerialInterfaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SerialInterfaceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SerialInterfaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeForeignObjectDetectionSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeForeignObjectDetectionSensor.ForeignObjectDetectionSensorType\", \"ForeignObjectDetectionSensorType\");\r\n            ifcPSE.PropertyName = \"ForeignObjectDetectionSensorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ForeignObjectDetectionSensorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ForeignObjectDetectionSensorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeForeignObjectDetectionSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeForeignObjectDetectionSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeFrostSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeFrostSensor = new PropertySetDescription();\r\n         propertySetSensorTypeFrostSensor.Name = \"Pset_SensorTypeFrostSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeFrostSensor\"))\r\n         {\r\n            propertySetSensorTypeFrostSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeFrostSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeFrostSensor.PredefinedType = \"FROSTSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeFrostSensor.SetPointFrost\", \"SetPointFrost\");\r\n            ifcPSE.PropertyName = \"SetPointFrost\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Frost\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointFrostCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeFrostSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeFrostSensor\"))\r\n         {\r\n            propertySetSensorTypeFrostSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeFrostSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeFrostSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeFrostSensor.PredefinedType = \"FROSTSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeFrostSensor.SetPointFrost\", \"SetPointFrost\");\r\n            ifcPSE.PropertyName = \"SetPointFrost\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointFrostCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeFrostSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeFrostSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeGasSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeGasSensor = new PropertySetDescription();\r\n         propertySetSensorTypeGasSensor.Name = \"Pset_SensorTypeGasSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeGasSensor\"))\r\n         {\r\n            propertySetSensorTypeGasSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeGasSensor.ObjectType = \"GasSensor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeGasSensor.GasDetected\", \"GasDetected\");\r\n            ifcPSE.PropertyName = \"GasDetected\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasDetectedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeGasSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeGasSensor.GasSensorSetPoint\", \"GasSensorSetPoint\");\r\n            ifcPSE.PropertyName = \"GasSensorSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasSensorSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeGasSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeGasSensor.GasSensorRange\", \"GasSensorRange\");\r\n            ifcPSE.PropertyName = \"GasSensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasSensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeGasSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeGasSensor.AccuracyOfGasSensor\", \"AccuracyOfGasSensor\");\r\n            ifcPSE.PropertyName = \"AccuracyOfGasSensor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyOfGasSensorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeGasSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeGasSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeGasSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeGasSensor\"))\r\n         {\r\n            propertySetSensorTypeGasSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeGasSensor.ObjectType = \"IfcSensorType\";\r\n            propertySetSensorTypeGasSensor.PredefinedType = \"GASSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeGasSensor.GasDetected\", \"GasDetected\");\r\n            ifcPSE.PropertyName = \"GasDetected\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasDetectedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeGasSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeGasSensor.GasSensorSetPoint\", \"GasSensorSetPoint\");\r\n            ifcPSE.PropertyName = \"GasSensorSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasSensorSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeGasSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeGasSensor.GasSensorRange\", \"GasSensorRange\");\r\n            ifcPSE.PropertyName = \"GasSensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasSensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeGasSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeGasSensor.AccuracyOfGasSensor\", \"AccuracyOfGasSensor\");\r\n            ifcPSE.PropertyName = \"AccuracyOfGasSensor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyOfGasSensorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeGasSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeGasSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeGasSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeGasSensor\"))\r\n         {\r\n            propertySetSensorTypeGasSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeGasSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeGasSensor.PredefinedType = \"GASSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeGasSensor.GasDetected\", \"GasDetected\");\r\n            ifcPSE.PropertyName = \"GasDetected\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gas Detected\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"対象ガス\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasDetectedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeGasSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeGasSensor.SetPointConcentration\", \"SetPointConcentration\");\r\n            ifcPSE.PropertyName = \"SetPointConcentration\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Concentration\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ガス濃度設定値\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointConcentrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeGasSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeGasSensor.CoverageArea\", \"CoverageArea\");\r\n            ifcPSE.PropertyName = \"CoverageArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Coverage Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"測定範囲\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverageAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeGasSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeGasSensor\"))\r\n         {\r\n            propertySetSensorTypeGasSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeGasSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeGasSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeGasSensor.PredefinedType = \"GASSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeGasSensor.GasDetected\", \"GasDetected\");\r\n            ifcPSE.PropertyName = \"GasDetected\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GasDetectedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeGasSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeGasSensor.SetPointConcentration\", \"SetPointConcentration\");\r\n            ifcPSE.PropertyName = \"SetPointConcentration\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointConcentrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeGasSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeGasSensor.CoverageArea\", \"CoverageArea\");\r\n            ifcPSE.PropertyName = \"CoverageArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverageAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeGasSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeGasSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeHeatSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeHeatSensor = new PropertySetDescription();\r\n         propertySetSensorTypeHeatSensor.Name = \"Pset_SensorTypeHeatSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeHeatSensor\"))\r\n         {\r\n            propertySetSensorTypeHeatSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeHeatSensor.ObjectType = \"HeatSensor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHeatSensor.CoverageArea\", \"CoverageArea\");\r\n            ifcPSE.PropertyName = \"CoverageArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverageAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHeatSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHeatSensor.HeatSensorSetPoint\", \"HeatSensorSetPoint\");\r\n            ifcPSE.PropertyName = \"HeatSensorSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatSensorSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHeatSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHeatSensor.HeatSensorRange\", \"HeatSensorRange\");\r\n            ifcPSE.PropertyName = \"HeatSensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatSensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHeatSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHeatSensor.HeatSensorAccuracy\", \"HeatSensorAccuracy\");\r\n            ifcPSE.PropertyName = \"HeatSensorAccuracy\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatSensorAccuracyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHeatSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHeatSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHeatSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeHeatSensor\"))\r\n         {\r\n            propertySetSensorTypeHeatSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeHeatSensor.ObjectType = \"IfcSensorType\";\r\n            propertySetSensorTypeHeatSensor.PredefinedType = \"HEATSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHeatSensor.CoverageArea\", \"CoverageArea\");\r\n            ifcPSE.PropertyName = \"CoverageArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverageAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHeatSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHeatSensor.HeatSensorSetPoint\", \"HeatSensorSetPoint\");\r\n            ifcPSE.PropertyName = \"HeatSensorSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatSensorSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHeatSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHeatSensor.HeatSensorRange\", \"HeatSensorRange\");\r\n            ifcPSE.PropertyName = \"HeatSensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatSensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHeatSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHeatSensor.HeatSensorAccuracy\", \"HeatSensorAccuracy\");\r\n            ifcPSE.PropertyName = \"HeatSensorAccuracy\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatSensorAccuracyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHeatSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHeatSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHeatSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeHeatSensor\"))\r\n         {\r\n            propertySetSensorTypeHeatSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeHeatSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeHeatSensor.PredefinedType = \"HEATSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHeatSensor.CoverageArea\", \"CoverageArea\");\r\n            ifcPSE.PropertyName = \"CoverageArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Coverage Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"測定範囲\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"측정 범위\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverageAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHeatSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHeatSensor.SetPointTemperature\", \"SetPointTemperature\");\r\n            ifcPSE.PropertyName = \"SetPointTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"温度設定値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"온도 설정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHeatSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHeatSensor.RateOfTemperatureRise\", \"RateOfTemperatureRise\");\r\n            ifcPSE.PropertyName = \"RateOfTemperatureRise\";\r\n            ifcPSE.PropertyType = PropertyType.TemperatureRateOfChange;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Rate Of Temperature Rise\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"温度上昇率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"온도 상승률\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RateOfTemperatureRiseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHeatSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeHeatSensor\"))\r\n         {\r\n            propertySetSensorTypeHeatSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeHeatSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeHeatSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeHeatSensor.PredefinedType = \"HEATSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHeatSensor.CoverageArea\", \"CoverageArea\");\r\n            ifcPSE.PropertyName = \"CoverageArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverageAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHeatSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHeatSensor.SetPointTemperature\", \"SetPointTemperature\");\r\n            ifcPSE.PropertyName = \"SetPointTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHeatSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHeatSensor.RateOfTemperatureRise\", \"RateOfTemperatureRise\");\r\n            ifcPSE.PropertyName = \"RateOfTemperatureRise\";\r\n            ifcPSE.PropertyType = PropertyType.TemperatureRateOfChange;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RateOfTemperatureRiseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHeatSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeHeatSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeHumiditySensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeHumiditySensor = new PropertySetDescription();\r\n         propertySetSensorTypeHumiditySensor.Name = \"Pset_SensorTypeHumiditySensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeHumiditySensor\"))\r\n         {\r\n            propertySetSensorTypeHumiditySensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeHumiditySensor.ObjectType = \"HumiditySensor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHumiditySensor.HumiditySetPoint\", \"HumiditySetPoint\");\r\n            ifcPSE.PropertyName = \"HumiditySetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HumiditySetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHumiditySensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHumiditySensor.HumiditySensorRange\", \"HumiditySensorRange\");\r\n            ifcPSE.PropertyName = \"HumiditySensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HumiditySensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHumiditySensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHumiditySensor.AccuracyOfHumiditySensor\", \"AccuracyOfHumiditySensor\");\r\n            ifcPSE.PropertyName = \"AccuracyOfHumiditySensor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyOfHumiditySensorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHumiditySensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHumiditySensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHumiditySensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeHumiditySensor\"))\r\n         {\r\n            propertySetSensorTypeHumiditySensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeHumiditySensor.ObjectType = \"IfcSensorType\";\r\n            propertySetSensorTypeHumiditySensor.PredefinedType = \"HUMIDITYSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHumiditySensor.HumiditySetPoint\", \"HumiditySetPoint\");\r\n            ifcPSE.PropertyName = \"HumiditySetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HumiditySetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHumiditySensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHumiditySensor.HumiditySensorRange\", \"HumiditySensorRange\");\r\n            ifcPSE.PropertyName = \"HumiditySensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HumiditySensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHumiditySensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHumiditySensor.AccuracyOfHumiditySensor\", \"AccuracyOfHumiditySensor\");\r\n            ifcPSE.PropertyName = \"AccuracyOfHumiditySensor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyOfHumiditySensorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHumiditySensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHumiditySensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHumiditySensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeHumiditySensor\"))\r\n         {\r\n            propertySetSensorTypeHumiditySensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeHumiditySensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeHumiditySensor.PredefinedType = \"HUMIDITYSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHumiditySensor.SetPointHumidity\", \"SetPointHumidity\");\r\n            ifcPSE.PropertyName = \"SetPointHumidity\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Humidity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"湿度設定値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"습도 설정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHumiditySensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeHumiditySensor\"))\r\n         {\r\n            propertySetSensorTypeHumiditySensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeHumiditySensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeHumiditySensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeHumiditySensor.PredefinedType = \"HUMIDITYSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeHumiditySensor.SetPointHumidity\", \"SetPointHumidity\");\r\n            ifcPSE.PropertyName = \"SetPointHumidity\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeHumiditySensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeHumiditySensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeIdentifierSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeIdentifierSensor = new PropertySetDescription();\r\n         propertySetSensorTypeIdentifierSensor.Name = \"Pset_SensorTypeIdentifierSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeIdentifierSensor\"))\r\n         {\r\n            propertySetSensorTypeIdentifierSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeIdentifierSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeIdentifierSensor.PredefinedType = \"IDENTIFIERSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeIdentifierSensor.SetPointIdentifier\", \"SetPointIdentifier\");\r\n            ifcPSE.PropertyName = \"SetPointIdentifier\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Identifier\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointIdentifierCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeIdentifierSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeIdentifierSensor\"))\r\n         {\r\n            propertySetSensorTypeIdentifierSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeIdentifierSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeIdentifierSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeIdentifierSensor.PredefinedType = \"IDENTIFIERSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeIdentifierSensor.SetPointIdentifier\", \"SetPointIdentifier\");\r\n            ifcPSE.PropertyName = \"SetPointIdentifier\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointIdentifierCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeIdentifierSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeIdentifierSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeIonConcentrationSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeIonConcentrationSensor = new PropertySetDescription();\r\n         propertySetSensorTypeIonConcentrationSensor.Name = \"Pset_SensorTypeIonConcentrationSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeIonConcentrationSensor\"))\r\n         {\r\n            propertySetSensorTypeIonConcentrationSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeIonConcentrationSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeIonConcentrationSensor.PredefinedType = \"IONCONCENTRATIONSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeIonConcentrationSensor.SubstanceDetected\", \"SubstanceDetected\");\r\n            ifcPSE.PropertyName = \"SubstanceDetected\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Substance Detected\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"対象物質\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"대상 물질\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SubstanceDetectedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeIonConcentrationSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeIonConcentrationSensor.SetPointConcentration\", \"SetPointConcentration\");\r\n            ifcPSE.PropertyName = \"SetPointConcentration\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.IonConcentration;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Concentration\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"イオン濃度設定値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"이온 농도 설정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointConcentrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeIonConcentrationSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeIonConcentrationSensor\"))\r\n         {\r\n            propertySetSensorTypeIonConcentrationSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeIonConcentrationSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeIonConcentrationSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeIonConcentrationSensor.PredefinedType = \"IONCONCENTRATIONSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeIonConcentrationSensor.SubstanceDetected\", \"SubstanceDetected\");\r\n            ifcPSE.PropertyName = \"SubstanceDetected\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SubstanceDetectedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeIonConcentrationSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeIonConcentrationSensor.SetPointIonConcentration\", \"SetPointIonConcentration\");\r\n            ifcPSE.PropertyName = \"SetPointIonConcentration\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.IonConcentration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointIonConcentrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeIonConcentrationSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeIonConcentrationSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeLevelSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeLevelSensor = new PropertySetDescription();\r\n         propertySetSensorTypeLevelSensor.Name = \"Pset_SensorTypeLevelSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeLevelSensor\"))\r\n         {\r\n            propertySetSensorTypeLevelSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeLevelSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeLevelSensor.PredefinedType = \"LEVEL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeLevelSensor.SetPointLevel\", \"SetPointLevel\");\r\n            ifcPSE.PropertyName = \"SetPointLevel\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"レベル設定値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"레벨 설정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeLevelSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeLevelSensor\"))\r\n         {\r\n            propertySetSensorTypeLevelSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeLevelSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeLevelSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeLevelSensor.PredefinedType = \"LEVELSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeLevelSensor.SetPointLevel\", \"SetPointLevel\");\r\n            ifcPSE.PropertyName = \"SetPointLevel\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeLevelSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeLevelSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeLightSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeLightSensor = new PropertySetDescription();\r\n         propertySetSensorTypeLightSensor.Name = \"Pset_SensorTypeLightSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeLightSensor\"))\r\n         {\r\n            propertySetSensorTypeLightSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeLightSensor.ObjectType = \"LightSensor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeLightSensor.LightSensorSetPoint\", \"LightSensorSetPoint\");\r\n            ifcPSE.PropertyName = \"LightSensorSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.Illuminance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightSensorSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeLightSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeLightSensor.LightSensorRange\", \"LightSensorRange\");\r\n            ifcPSE.PropertyName = \"LightSensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Illuminance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightSensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeLightSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeLightSensor.LightSensorAccuracy\", \"LightSensorAccuracy\");\r\n            ifcPSE.PropertyName = \"LightSensorAccuracy\";\r\n            ifcPSE.PropertyType = PropertyType.Illuminance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightSensorAccuracyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeLightSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeLightSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeLightSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeLightSensor\"))\r\n         {\r\n            propertySetSensorTypeLightSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeLightSensor.ObjectType = \"IfcSensorType\";\r\n            propertySetSensorTypeLightSensor.PredefinedType = \"LIGHTSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeLightSensor.LightSensorSetPoint\", \"LightSensorSetPoint\");\r\n            ifcPSE.PropertyName = \"LightSensorSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.Illuminance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightSensorSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeLightSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeLightSensor.LightSensorRange\", \"LightSensorRange\");\r\n            ifcPSE.PropertyName = \"LightSensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Illuminance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightSensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeLightSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeLightSensor.LightSensorAccuracy\", \"LightSensorAccuracy\");\r\n            ifcPSE.PropertyName = \"LightSensorAccuracy\";\r\n            ifcPSE.PropertyType = PropertyType.Illuminance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightSensorAccuracyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeLightSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeLightSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeLightSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeLightSensor\"))\r\n         {\r\n            propertySetSensorTypeLightSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeLightSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeLightSensor.PredefinedType = \"LIGHTSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeLightSensor.SetPointIlluminance\", \"SetPointIlluminance\");\r\n            ifcPSE.PropertyName = \"SetPointIlluminance\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Illuminance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Illuminance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"照度設定値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조도 설정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointIlluminanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeLightSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeLightSensor\"))\r\n         {\r\n            propertySetSensorTypeLightSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeLightSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeLightSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeLightSensor.PredefinedType = \"LIGHTSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeLightSensor.SetPointIlluminance\", \"SetPointIlluminance\");\r\n            ifcPSE.PropertyName = \"SetPointIlluminance\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Illuminance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointIlluminanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeLightSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeLightSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeMoistureSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeMoistureSensor = new PropertySetDescription();\r\n         propertySetSensorTypeMoistureSensor.Name = \"Pset_SensorTypeMoistureSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeMoistureSensor\"))\r\n         {\r\n            propertySetSensorTypeMoistureSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeMoistureSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeMoistureSensor.PredefinedType = \"MOISTURESENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeMoistureSensor.SetPointMoisture\", \"SetPointMoisture\");\r\n            ifcPSE.PropertyName = \"SetPointMoisture\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Moisture\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水分設定値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"수분 설정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointMoistureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeMoistureSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeMoistureSensor\"))\r\n         {\r\n            propertySetSensorTypeMoistureSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeMoistureSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeMoistureSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeMoistureSensor.PredefinedType = \"MOISTURESENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeMoistureSensor.SetPointMoisture\", \"SetPointMoisture\");\r\n            ifcPSE.PropertyName = \"SetPointMoisture\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointMoistureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeMoistureSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeMoistureSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeMovementSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeMovementSensor = new PropertySetDescription();\r\n         propertySetSensorTypeMovementSensor.Name = \"Pset_SensorTypeMovementSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeMovementSensor\"))\r\n         {\r\n            propertySetSensorTypeMovementSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeMovementSensor.ObjectType = \"MovementSensor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeMovementSensor.MovementSensingType\", \"MovementSensingType\");\r\n            ifcPSE.PropertyName = \"MovementSensingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_MovementSensingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MovementSensingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeMovementSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeMovementSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeMovementSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeMovementSensor\"))\r\n         {\r\n            propertySetSensorTypeMovementSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeMovementSensor.ObjectType = \"IfcSensorType\";\r\n            propertySetSensorTypeMovementSensor.PredefinedType = \"MOVEMENTSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeMovementSensor.MovementSensingType\", \"MovementSensingType\");\r\n            ifcPSE.PropertyName = \"MovementSensingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_MovementSensingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MovementSensingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeMovementSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeMovementSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeMovementSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeMovementSensor\"))\r\n         {\r\n            propertySetSensorTypeMovementSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeMovementSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeMovementSensor.PredefinedType = \"MOVEMENTSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeMovementSensor.MovementSensingType\", \"MovementSensingType\");\r\n            ifcPSE.PropertyName = \"MovementSensingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_MovementSensingType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Movement Sensing Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MovementSensingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeMovementSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeMovementSensor.SetPointMovement\", \"SetPointMovement\");\r\n            ifcPSE.PropertyName = \"SetPointMovement\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Movement\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointMovementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeMovementSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeMovementSensor\"))\r\n         {\r\n            propertySetSensorTypeMovementSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeMovementSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeMovementSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeMovementSensor.PredefinedType = \"MOVEMENTSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeMovementSensor.MovementSensingType\", \"MovementSensingType\");\r\n            ifcPSE.PropertyName = \"MovementSensingType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_MovementSensingType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MovementSensingTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeMovementSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeMovementSensor.SetPointMovement\", \"SetPointMovement\");\r\n            ifcPSE.PropertyName = \"SetPointMovement\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointMovementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeMovementSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeMovementSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypePHSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypePHSensor = new PropertySetDescription();\r\n         propertySetSensorTypePHSensor.Name = \"Pset_SensorTypePHSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypePHSensor\"))\r\n         {\r\n            propertySetSensorTypePHSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypePHSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypePHSensor.PredefinedType = \"PHSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypePHSensor.SetPointPH\", \"SetPointPH\");\r\n            ifcPSE.PropertyName = \"SetPointPH\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PH;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point PH\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"酸性度設定値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"산성도 설정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointPHCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypePHSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypePHSensor\"))\r\n         {\r\n            propertySetSensorTypePHSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypePHSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypePHSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypePHSensor.PredefinedType = \"PHSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypePHSensor.SetPointPH\", \"SetPointPH\");\r\n            ifcPSE.PropertyName = \"SetPointPH\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PH;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointPHCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypePHSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypePHSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypePressureSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypePressureSensor = new PropertySetDescription();\r\n         propertySetSensorTypePressureSensor.Name = \"Pset_SensorTypePressureSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypePressureSensor\"))\r\n         {\r\n            propertySetSensorTypePressureSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypePressureSensor.ObjectType = \"PressureSensor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypePressureSensor.PressureSensorSetPoint\", \"PressureSensorSetPoint\");\r\n            ifcPSE.PropertyName = \"PressureSensorSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureSensorSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypePressureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypePressureSensor.PressureSensorRange\", \"PressureSensorRange\");\r\n            ifcPSE.PropertyName = \"PressureSensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureSensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypePressureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypePressureSensor.AccuracyOfPressureSensor\", \"AccuracyOfPressureSensor\");\r\n            ifcPSE.PropertyName = \"AccuracyOfPressureSensor\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyOfPressureSensorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypePressureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypePressureSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypePressureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypePressureSensor.IsSwitch\", \"IsSwitch\");\r\n            ifcPSE.PropertyName = \"IsSwitch\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSwitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypePressureSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypePressureSensor\"))\r\n         {\r\n            propertySetSensorTypePressureSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypePressureSensor.ObjectType = \"IfcSensorType\";\r\n            propertySetSensorTypePressureSensor.PredefinedType = \"PRESSURESENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypePressureSensor.PressureSensorSetPoint\", \"PressureSensorSetPoint\");\r\n            ifcPSE.PropertyName = \"PressureSensorSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureSensorSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypePressureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypePressureSensor.PressureSensorRange\", \"PressureSensorRange\");\r\n            ifcPSE.PropertyName = \"PressureSensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureSensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypePressureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypePressureSensor.AccuracyOfPressureSensor\", \"AccuracyOfPressureSensor\");\r\n            ifcPSE.PropertyName = \"AccuracyOfPressureSensor\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyOfPressureSensorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypePressureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypePressureSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypePressureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypePressureSensor.IsSwitch\", \"IsSwitch\");\r\n            ifcPSE.PropertyName = \"IsSwitch\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSwitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypePressureSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypePressureSensor\"))\r\n         {\r\n            propertySetSensorTypePressureSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypePressureSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypePressureSensor.PredefinedType = \"PRESSURESENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypePressureSensor.SetPointPressure\", \"SetPointPressure\");\r\n            ifcPSE.PropertyName = \"SetPointPressure\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧力設定値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"압력 설정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypePressureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypePressureSensor.IsSwitch\", \"IsSwitch\");\r\n            ifcPSE.PropertyName = \"IsSwitch\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Switch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"スイッチ機能の有無\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"스위치 기능의 유무\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSwitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypePressureSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypePressureSensor\"))\r\n         {\r\n            propertySetSensorTypePressureSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypePressureSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypePressureSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypePressureSensor.PredefinedType = \"PRESSURESENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypePressureSensor.SetPointPressure\", \"SetPointPressure\");\r\n            ifcPSE.PropertyName = \"SetPointPressure\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypePressureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypePressureSensor.IsSwitch\", \"IsSwitch\");\r\n            ifcPSE.PropertyName = \"IsSwitch\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSwitchCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypePressureSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypePressureSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeRadiationSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeRadiationSensor = new PropertySetDescription();\r\n         propertySetSensorTypeRadiationSensor.Name = \"Pset_SensorTypeRadiationSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeRadiationSensor\"))\r\n         {\r\n            propertySetSensorTypeRadiationSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeRadiationSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeRadiationSensor.PredefinedType = \"RADIATIONSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeRadiationSensor.SetPointRadiation\", \"SetPointRadiation\");\r\n            ifcPSE.PropertyName = \"SetPointRadiation\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Radiation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"放射線設定値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"방사선 설정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointRadiationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeRadiationSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeRadiationSensor\"))\r\n         {\r\n            propertySetSensorTypeRadiationSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeRadiationSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeRadiationSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeRadiationSensor.PredefinedType = \"RADIATIONSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeRadiationSensor.SetPointRadiation\", \"SetPointRadiation\");\r\n            ifcPSE.PropertyName = \"SetPointRadiation\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointRadiationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeRadiationSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeRadiationSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeRadioactivitySensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeRadioactivitySensor = new PropertySetDescription();\r\n         propertySetSensorTypeRadioactivitySensor.Name = \"Pset_SensorTypeRadioactivitySensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeRadioactivitySensor\"))\r\n         {\r\n            propertySetSensorTypeRadioactivitySensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeRadioactivitySensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeRadioactivitySensor.PredefinedType = \"RADIOACTIVITYSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeRadioactivitySensor.SetPointRadioactivity\", \"SetPointRadioactivity\");\r\n            ifcPSE.PropertyName = \"SetPointRadioactivity\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.RadioActivity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Radioactivity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"放射能設定値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"방사능 설정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointRadioactivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeRadioactivitySensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeRadioactivitySensor\"))\r\n         {\r\n            propertySetSensorTypeRadioactivitySensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeRadioactivitySensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeRadioactivitySensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeRadioactivitySensor.PredefinedType = \"RADIOACTIVITYSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeRadioactivitySensor.SetPointRadioactivity\", \"SetPointRadioactivity\");\r\n            ifcPSE.PropertyName = \"SetPointRadioactivity\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.RadioActivity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointRadioactivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeRadioactivitySensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeRadioactivitySensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeRainSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeRainSensor = new PropertySetDescription();\r\n         propertySetSensorTypeRainSensor.Name = \"Pset_SensorTypeRainSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeRainSensor\"))\r\n         {\r\n            propertySetSensorTypeRainSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeRainSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeRainSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeRainSensor.PredefinedType = \"RAINSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeRainSensor.MarginOfError\", \"MarginOfError\");\r\n            ifcPSE.PropertyName = \"MarginOfError\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarginOfErrorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeRainSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeRainSensor.SamplingFrequency\", \"SamplingFrequency\");\r\n            ifcPSE.PropertyName = \"SamplingFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SamplingFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeRainSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeRainSensor.WorkingState\", \"WorkingState\");\r\n            ifcPSE.PropertyName = \"WorkingState\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeRainSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeRainSensor.DataCollectionType\", \"DataCollectionType\");\r\n            ifcPSE.PropertyName = \"DataCollectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DataCollectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DataCollectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeRainSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeRainSensor.LengthMeasureResolution\", \"LengthMeasureResolution\");\r\n            ifcPSE.PropertyName = \"LengthMeasureResolution\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthMeasureResolutionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeRainSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeRainSensor.SerialInterfaceType\", \"SerialInterfaceType\");\r\n            ifcPSE.PropertyName = \"SerialInterfaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SerialInterfaceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SerialInterfaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeRainSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeRainSensor.RainMeasureRange\", \"RainMeasureRange\");\r\n            ifcPSE.PropertyName = \"RainMeasureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RainMeasureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeRainSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeRainSensor.RainSensorType\", \"RainSensorType\");\r\n            ifcPSE.PropertyName = \"RainSensorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_RainSensorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RainSensorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeRainSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeRainSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeSmokeSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeSmokeSensor = new PropertySetDescription();\r\n         propertySetSensorTypeSmokeSensor.Name = \"Pset_SensorTypeSmokeSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeSmokeSensor\"))\r\n         {\r\n            propertySetSensorTypeSmokeSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeSmokeSensor.ObjectType = \"SmokeSensor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSmokeSensor.CoverageArea\", \"CoverageArea\");\r\n            ifcPSE.PropertyName = \"CoverageArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverageAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSmokeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSmokeSensor.PressureSensorSetPoint\", \"PressureSensorSetPoint\");\r\n            ifcPSE.PropertyName = \"PressureSensorSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureSensorSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSmokeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSmokeSensor.SmokeSensorRange\", \"SmokeSensorRange\");\r\n            ifcPSE.PropertyName = \"SmokeSensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SmokeSensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSmokeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSmokeSensor.AccuracyOfSmokeSensor\", \"AccuracyOfSmokeSensor\");\r\n            ifcPSE.PropertyName = \"AccuracyOfSmokeSensor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyOfSmokeSensorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSmokeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSmokeSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSmokeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSmokeSensor.HasBuiltInAlarm\", \"HasBuiltInAlarm\");\r\n            ifcPSE.PropertyName = \"HasBuiltInAlarm\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasBuiltInAlarmCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSmokeSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeSmokeSensor\"))\r\n         {\r\n            propertySetSensorTypeSmokeSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeSmokeSensor.ObjectType = \"IfcSensorType\";\r\n            propertySetSensorTypeSmokeSensor.PredefinedType = \"SMOKESENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSmokeSensor.CoverageArea\", \"CoverageArea\");\r\n            ifcPSE.PropertyName = \"CoverageArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverageAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSmokeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSmokeSensor.PressureSensorSetPoint\", \"PressureSensorSetPoint\");\r\n            ifcPSE.PropertyName = \"PressureSensorSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureSensorSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSmokeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSmokeSensor.SmokeSensorRange\", \"SmokeSensorRange\");\r\n            ifcPSE.PropertyName = \"SmokeSensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SmokeSensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSmokeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSmokeSensor.AccuracyOfSmokeSensor\", \"AccuracyOfSmokeSensor\");\r\n            ifcPSE.PropertyName = \"AccuracyOfSmokeSensor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyOfSmokeSensorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSmokeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSmokeSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSmokeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSmokeSensor.HasBuiltInAlarm\", \"HasBuiltInAlarm\");\r\n            ifcPSE.PropertyName = \"HasBuiltInAlarm\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasBuiltInAlarmCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSmokeSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeSmokeSensor\"))\r\n         {\r\n            propertySetSensorTypeSmokeSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeSmokeSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeSmokeSensor.PredefinedType = \"SMOKESENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSmokeSensor.CoverageArea\", \"CoverageArea\");\r\n            ifcPSE.PropertyName = \"CoverageArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Coverage Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"測定範囲\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"측정 범위\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverageAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSmokeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSmokeSensor.SetPointConcentration\", \"SetPointConcentration\");\r\n            ifcPSE.PropertyName = \"SetPointConcentration\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Concentration\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"煙濃度設定値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"연기 농도 설정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointConcentrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSmokeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSmokeSensor.HasBuiltInAlarm\", \"HasBuiltInAlarm\");\r\n            ifcPSE.PropertyName = \"HasBuiltInAlarm\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Built In Alarm\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"煙警報器に含まれているか\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"연기 경보기에 포함여부\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasBuiltInAlarmCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSmokeSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeSmokeSensor\"))\r\n         {\r\n            propertySetSensorTypeSmokeSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeSmokeSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeSmokeSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeSmokeSensor.PredefinedType = \"SMOKESENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSmokeSensor.CoverageArea\", \"CoverageArea\");\r\n            ifcPSE.PropertyName = \"CoverageArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverageAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSmokeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSmokeSensor.SetPointConcentration\", \"SetPointConcentration\");\r\n            ifcPSE.PropertyName = \"SetPointConcentration\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointConcentrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSmokeSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSmokeSensor.HasBuiltInAlarm\", \"HasBuiltInAlarm\");\r\n            ifcPSE.PropertyName = \"HasBuiltInAlarm\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasBuiltInAlarmCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSmokeSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeSmokeSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeSnowSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeSnowSensor = new PropertySetDescription();\r\n         propertySetSensorTypeSnowSensor.Name = \"Pset_SensorTypeSnowSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeSnowSensor\"))\r\n         {\r\n            propertySetSensorTypeSnowSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeSnowSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeSnowSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeSnowSensor.PredefinedType = \"SNOWDEPTHSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSnowSensor.MarginOfError\", \"MarginOfError\");\r\n            ifcPSE.PropertyName = \"MarginOfError\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarginOfErrorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSnowSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSnowSensor.SamplingFrequency\", \"SamplingFrequency\");\r\n            ifcPSE.PropertyName = \"SamplingFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SamplingFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSnowSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSnowSensor.DataCollectionType\", \"DataCollectionType\");\r\n            ifcPSE.PropertyName = \"DataCollectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DataCollectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DataCollectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSnowSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSnowSensor.ImageResolution\", \"ImageResolution\");\r\n            ifcPSE.PropertyName = \"ImageResolution\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImageResolutionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSnowSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSnowSensor.ImageShootingMode\", \"ImageShootingMode\");\r\n            ifcPSE.PropertyName = \"ImageShootingMode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ImageShootingMode);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImageShootingModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSnowSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSnowSensor.SerialInterfaceType\", \"SerialInterfaceType\");\r\n            ifcPSE.PropertyName = \"SerialInterfaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SerialInterfaceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SerialInterfaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSnowSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSnowSensor.LengthMeasureResolution\", \"LengthMeasureResolution\");\r\n            ifcPSE.PropertyName = \"LengthMeasureResolution\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthMeasureResolutionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSnowSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSnowSensor.SnowSensorMeasureRange\", \"SnowSensorMeasureRange\");\r\n            ifcPSE.PropertyName = \"SnowSensorMeasureRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SnowSensorMeasureRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSnowSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSnowSensor.SnowSensorType\", \"SnowSensorType\");\r\n            ifcPSE.PropertyName = \"SnowSensorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SnowSensorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SnowSensorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSnowSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeSnowSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeSoundSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeSoundSensor = new PropertySetDescription();\r\n         propertySetSensorTypeSoundSensor.Name = \"Pset_SensorTypeSoundSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeSoundSensor\"))\r\n         {\r\n            propertySetSensorTypeSoundSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeSoundSensor.ObjectType = \"SoundSensor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSoundSensor.SoundSensorSetPoint\", \"SoundSensorSetPoint\");\r\n            ifcPSE.PropertyName = \"SoundSensorSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.SoundPressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundSensorSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSoundSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSoundSensor.SoundSensorRange\", \"SoundSensorRange\");\r\n            ifcPSE.PropertyName = \"SoundSensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.SoundPressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundSensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSoundSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSoundSensor.SoundSensorAccuracy\", \"SoundSensorAccuracy\");\r\n            ifcPSE.PropertyName = \"SoundSensorAccuracy\";\r\n            ifcPSE.PropertyType = PropertyType.SoundPressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundSensorAccuracyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSoundSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSoundSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSoundSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeSoundSensor\"))\r\n         {\r\n            propertySetSensorTypeSoundSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeSoundSensor.ObjectType = \"IfcSensorType\";\r\n            propertySetSensorTypeSoundSensor.PredefinedType = \"SOUNDSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSoundSensor.SoundSensorSetPoint\", \"SoundSensorSetPoint\");\r\n            ifcPSE.PropertyName = \"SoundSensorSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.SoundPressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundSensorSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSoundSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSoundSensor.SoundSensorRange\", \"SoundSensorRange\");\r\n            ifcPSE.PropertyName = \"SoundSensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.SoundPressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundSensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSoundSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSoundSensor.SoundSensorAccuracy\", \"SoundSensorAccuracy\");\r\n            ifcPSE.PropertyName = \"SoundSensorAccuracy\";\r\n            ifcPSE.PropertyType = PropertyType.SoundPressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundSensorAccuracyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSoundSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSoundSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSoundSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeSoundSensor\"))\r\n         {\r\n            propertySetSensorTypeSoundSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeSoundSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeSoundSensor.PredefinedType = \"SOUNDSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSoundSensor.SetPointSound\", \"SetPointSound\");\r\n            ifcPSE.PropertyName = \"SetPointSound\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.SoundPressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Sound\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"音圧設定値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"읍압 설정치\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointSoundCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSoundSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeSoundSensor\"))\r\n         {\r\n            propertySetSensorTypeSoundSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeSoundSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeSoundSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeSoundSensor.PredefinedType = \"SOUNDSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeSoundSensor.SetPointSound\", \"SetPointSound\");\r\n            ifcPSE.PropertyName = \"SetPointSound\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.SoundPressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointSoundCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeSoundSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeSoundSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeTemperatureSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeTemperatureSensor = new PropertySetDescription();\r\n         propertySetSensorTypeTemperatureSensor.Name = \"Pset_SensorTypeTemperatureSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeTemperatureSensor\"))\r\n         {\r\n            propertySetSensorTypeTemperatureSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeTemperatureSensor.ObjectType = \"TemperatureSensor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeTemperatureSensor.TemperatureSensorType\", \"TemperatureSensorType\");\r\n            ifcPSE.PropertyName = \"TemperatureSensorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_TemperatureSensorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureSensorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeTemperatureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeTemperatureSensor.TemperatureSensorSetPoint\", \"TemperatureSensorSetPoint\");\r\n            ifcPSE.PropertyName = \"TemperatureSensorSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureSensorSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeTemperatureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeTemperatureSensor.TemperatureSensorRange\", \"TemperatureSensorRange\");\r\n            ifcPSE.PropertyName = \"TemperatureSensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureSensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeTemperatureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeTemperatureSensor.AccuracyOfTemperatureSensor\", \"AccuracyOfTemperatureSensor\");\r\n            ifcPSE.PropertyName = \"AccuracyOfTemperatureSensor\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyOfTemperatureSensorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeTemperatureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeTemperatureSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeTemperatureSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeTemperatureSensor\"))\r\n         {\r\n            propertySetSensorTypeTemperatureSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeTemperatureSensor.ObjectType = \"IfcSensorType\";\r\n            propertySetSensorTypeTemperatureSensor.PredefinedType = \"TEMPERATURESENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeTemperatureSensor.TemperatureSensorType\", \"TemperatureSensorType\");\r\n            ifcPSE.PropertyName = \"TemperatureSensorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_TemperatureSensorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureSensorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeTemperatureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeTemperatureSensor.TemperatureSensorSetPoint\", \"TemperatureSensorSetPoint\");\r\n            ifcPSE.PropertyName = \"TemperatureSensorSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureSensorSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeTemperatureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeTemperatureSensor.TemperatureSensorRange\", \"TemperatureSensorRange\");\r\n            ifcPSE.PropertyName = \"TemperatureSensorRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureSensorRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeTemperatureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeTemperatureSensor.AccuracyOfTemperatureSensor\", \"AccuracyOfTemperatureSensor\");\r\n            ifcPSE.PropertyName = \"AccuracyOfTemperatureSensor\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyOfTemperatureSensorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeTemperatureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeTemperatureSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeTemperatureSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeTemperatureSensor\"))\r\n         {\r\n            propertySetSensorTypeTemperatureSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeTemperatureSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeTemperatureSensor.PredefinedType = \"TEMPERATURESENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeTemperatureSensor.TemperatureSensorType\", \"TemperatureSensorType\");\r\n            ifcPSE.PropertyName = \"TemperatureSensorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_TemperatureSensorType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature Sensor Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"温度センサータイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"온도 센서 타입\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureSensorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeTemperatureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeTemperatureSensor.SetPointTemperature\", \"SetPointTemperature\");\r\n            ifcPSE.PropertyName = \"SetPointTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"温度設定値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"온도 성정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeTemperatureSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeTemperatureSensor\"))\r\n         {\r\n            propertySetSensorTypeTemperatureSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeTemperatureSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeTemperatureSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeTemperatureSensor.PredefinedType = \"TEMPERATURESENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeTemperatureSensor.TemperatureSensorType\", \"TemperatureSensorType\");\r\n            ifcPSE.PropertyName = \"TemperatureSensorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TemperatureSensorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureSensorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeTemperatureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeTemperatureSensor.SetPointTemperature\", \"SetPointTemperature\");\r\n            ifcPSE.PropertyName = \"SetPointTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeTemperatureSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeTemperatureSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeTurnoutClosureSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeTurnoutClosureSensor = new PropertySetDescription();\r\n         propertySetSensorTypeTurnoutClosureSensor.Name = \"Pset_SensorTypeTurnoutClosureSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeTurnoutClosureSensor\"))\r\n         {\r\n            propertySetSensorTypeTurnoutClosureSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeTurnoutClosureSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeTurnoutClosureSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeTurnoutClosureSensor.PredefinedType = \"TURNOUTCLOSURESENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeTurnoutClosureSensor.DetectionRange\", \"DetectionRange\");\r\n            ifcPSE.PropertyName = \"DetectionRange\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DetectionRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeTurnoutClosureSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeTurnoutClosureSensor.IndicationRodMovementRange\", \"IndicationRodMovementRange\");\r\n            ifcPSE.PropertyName = \"IndicationRodMovementRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IndicationRodMovementRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeTurnoutClosureSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeTurnoutClosureSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SensorTypeWindSensor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSensorTypeWindSensor = new PropertySetDescription();\r\n         propertySetSensorTypeWindSensor.Name = \"Pset_SensorTypeWindSensor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeWindSensor\"))\r\n         {\r\n            propertySetSensorTypeWindSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeWindSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeWindSensor.PredefinedType = \"WINDSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeWindSensor.WindSensorType\", \"WindSensorType\");\r\n            ifcPSE.PropertyName = \"WindSensorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_WindSensorType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wind Sensor Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"風センサータイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"바람 센서 타입\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WindSensorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeWindSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeWindSensor.SetPointSpeed\", \"SetPointSpeed\");\r\n            ifcPSE.PropertyName = \"SetPointSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point Speed\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"風速設定値\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"풍속 설정\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeWindSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SensorTypeWindSensor\"))\r\n         {\r\n            propertySetSensorTypeWindSensor.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            propertySetSensorTypeWindSensor.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            propertySetSensorTypeWindSensor.ObjectType = \"IfcSensor\";\r\n            propertySetSensorTypeWindSensor.PredefinedType = \"WINDSENSOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeWindSensor.WindSensorType\", \"WindSensorType\");\r\n            ifcPSE.PropertyName = \"WindSensorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_WindSensorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WindSensorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeWindSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeWindSensor.SetPointSpeed\", \"SetPointSpeed\");\r\n            ifcPSE.PropertyName = \"SetPointSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeWindSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeWindSensor.DampingRatio\", \"DampingRatio\");\r\n            ifcPSE.PropertyName = \"DampingRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DampingRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeWindSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeWindSensor.SerialInterfaceType\", \"SerialInterfaceType\");\r\n            ifcPSE.PropertyName = \"SerialInterfaceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SerialInterfaceType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SerialInterfaceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeWindSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeWindSensor.MarginOfError\", \"MarginOfError\");\r\n            ifcPSE.PropertyName = \"MarginOfError\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MarginOfErrorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeWindSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeWindSensor.LinearVelocityResolution\", \"LinearVelocityResolution\");\r\n            ifcPSE.PropertyName = \"LinearVelocityResolution\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LinearVelocityResolutionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeWindSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeWindSensor.SamplingFrequency\", \"SamplingFrequency\");\r\n            ifcPSE.PropertyName = \"SamplingFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SamplingFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeWindSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeWindSensor.StartingWindSpeed\", \"StartingWindSpeed\");\r\n            ifcPSE.PropertyName = \"StartingWindSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StartingWindSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeWindSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeWindSensor.WorkingState\", \"WorkingState\");\r\n            ifcPSE.PropertyName = \"WorkingState\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingStateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeWindSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeWindSensor.TimeConstant\", \"TimeConstant\");\r\n            ifcPSE.PropertyName = \"TimeConstant\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TimeConstantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeWindSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeWindSensor.DataCollectionType\", \"DataCollectionType\");\r\n            ifcPSE.PropertyName = \"DataCollectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_DataCollectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DataCollectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeWindSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeWindSensor.WindAngleRange\", \"WindAngleRange\");\r\n            ifcPSE.PropertyName = \"WindAngleRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WindAngleRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeWindSensor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SensorTypeWindSensor.WindSpeedRange\", \"WindSpeedRange\");\r\n            ifcPSE.PropertyName = \"WindSpeedRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WindSpeedRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSensorTypeWindSensor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSensorTypeWindSensor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ServiceLife(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetServiceLife = new PropertySetDescription();\r\n         propertySetServiceLife.Name = \"Pset_ServiceLife\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ServiceLife\"))\r\n         {\r\n            propertySetServiceLife.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetServiceLife.ObjectType = \"IfcElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ServiceLife.ServiceLifeDuration\", \"ServiceLifeDuration\");\r\n            ifcPSE.PropertyName = \"ServiceLifeDuration\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Service Life Duration\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ServiceLifeDurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetServiceLife.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ServiceLife.MeanTimeBetweenFailure\", \"MeanTimeBetweenFailure\");\r\n            ifcPSE.PropertyName = \"MeanTimeBetweenFailure\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mean Time Between Failure\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MeanTimeBetweenFailureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetServiceLife.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ServiceLife\"))\r\n         {\r\n            propertySetServiceLife.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetServiceLife.EntityTypes.Add(IFCEntityType.IfcElementType);\r\n            propertySetServiceLife.ObjectType = \"IfcElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ServiceLife.ServiceLifeDuration\", \"ServiceLifeDuration\");\r\n            ifcPSE.PropertyName = \"ServiceLifeDuration\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ServiceLifeDurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetServiceLife.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ServiceLife.MeanTimeBetweenFailure\", \"MeanTimeBetweenFailure\");\r\n            ifcPSE.PropertyName = \"MeanTimeBetweenFailure\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MeanTimeBetweenFailureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetServiceLife.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetServiceLife);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ServiceLifeFactors(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetServiceLifeFactors = new PropertySetDescription();\r\n         propertySetServiceLifeFactors.Name = \"Pset_ServiceLifeFactors\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ServiceLifeFactors\"))\r\n         {\r\n            propertySetServiceLifeFactors.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            propertySetServiceLifeFactors.ObjectType = \"IfcSystem\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ServiceLifeFactors.QualityOfComponents\", \"QualityOfComponents\");\r\n            ifcPSE.PropertyName = \"QualityOfComponents\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Quality Of Components\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.QualityOfComponentsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetServiceLifeFactors.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ServiceLifeFactors.DesignLevel\", \"DesignLevel\");\r\n            ifcPSE.PropertyName = \"DesignLevel\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Design Level\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DesignLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetServiceLifeFactors.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ServiceLifeFactors.WorkExecutionLevel\", \"WorkExecutionLevel\");\r\n            ifcPSE.PropertyName = \"WorkExecutionLevel\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Work Execution Level\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkExecutionLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetServiceLifeFactors.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ServiceLifeFactors.IndoorEnvironment\", \"IndoorEnvironment\");\r\n            ifcPSE.PropertyName = \"IndoorEnvironment\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Indoor Environment\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IndoorEnvironmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetServiceLifeFactors.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ServiceLifeFactors.OutdoorEnvironment\", \"OutdoorEnvironment\");\r\n            ifcPSE.PropertyName = \"OutdoorEnvironment\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outdoor Environment\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutdoorEnvironmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetServiceLifeFactors.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ServiceLifeFactors.InUseConditions\", \"InUseConditions\");\r\n            ifcPSE.PropertyName = \"InUseConditions\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"In Use Conditions\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InUseConditionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetServiceLifeFactors.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ServiceLifeFactors.MaintenanceLevel\", \"MaintenanceLevel\");\r\n            ifcPSE.PropertyName = \"MaintenanceLevel\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maintenance Level\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaintenanceLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetServiceLifeFactors.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ServiceLifeFactors\"))\r\n         {\r\n            propertySetServiceLifeFactors.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            propertySetServiceLifeFactors.ObjectType = \"IfcSystem\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ServiceLifeFactors.QualityOfComponents\", \"QualityOfComponents\");\r\n            ifcPSE.PropertyName = \"QualityOfComponents\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.QualityOfComponentsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetServiceLifeFactors.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ServiceLifeFactors.DesignLevel\", \"DesignLevel\");\r\n            ifcPSE.PropertyName = \"DesignLevel\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DesignLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetServiceLifeFactors.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ServiceLifeFactors.WorkExecutionLevel\", \"WorkExecutionLevel\");\r\n            ifcPSE.PropertyName = \"WorkExecutionLevel\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkExecutionLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetServiceLifeFactors.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ServiceLifeFactors.IndoorEnvironment\", \"IndoorEnvironment\");\r\n            ifcPSE.PropertyName = \"IndoorEnvironment\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IndoorEnvironmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetServiceLifeFactors.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ServiceLifeFactors.OutdoorEnvironment\", \"OutdoorEnvironment\");\r\n            ifcPSE.PropertyName = \"OutdoorEnvironment\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutdoorEnvironmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetServiceLifeFactors.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ServiceLifeFactors.InUseConditions\", \"InUseConditions\");\r\n            ifcPSE.PropertyName = \"InUseConditions\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InUseConditionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetServiceLifeFactors.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ServiceLifeFactors.MaintenanceLevel\", \"MaintenanceLevel\");\r\n            ifcPSE.PropertyName = \"MaintenanceLevel\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaintenanceLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetServiceLifeFactors.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetServiceLifeFactors);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ShadingDeviceCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetShadingDeviceCommon = new PropertySetDescription();\r\n         propertySetShadingDeviceCommon.Name = \"Pset_ShadingDeviceCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ShadingDeviceCommon\"))\r\n         {\r\n            propertySetShadingDeviceCommon.EntityTypes.Add(IFCEntityType.IfcShadingDevice);\r\n            propertySetShadingDeviceCommon.ObjectType = \"IfcShadingDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bemusterungstyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Référence\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.ShadingDeviceType\", \"ShadingDeviceType\");\r\n            ifcPSE.PropertyName = \"ShadingDeviceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementShading);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Sonnenschutztyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shading Device Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Type de protection solaire\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"日除け装置種別\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShadingDeviceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.MechanicalOperated\", \"MechanicalOperated\");\r\n            ifcPSE.PropertyName = \"MechanicalOperated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Mechanisch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mechanical Operated\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Actionné mécaniquement\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"機械的操作\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalOperatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.SolarTransmittance\", \"SolarTransmittance\");\r\n            ifcPSE.PropertyName = \"SolarTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Strahlungstransmissionsgrad\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Solar Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Transmission du rayonnement solaire\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"日射透過率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.SolarReflectance\", \"SolarReflectance\");\r\n            ifcPSE.PropertyName = \"SolarReflectance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Strahlungsreflectionsgrad\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Solar Reflectance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reflexion du rayonnement solaire\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"日射反射率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarReflectanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.VisibleLightTransmittance\", \"VisibleLightTransmittance\");\r\n            ifcPSE.PropertyName = \"VisibleLightTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Transmissionsgrad für sichtbares Licht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Visible Light Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Transmittance du rayonnement visible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"可視光透過率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleLightTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.VisibleLightReflectance\", \"VisibleLightReflectance\");\r\n            ifcPSE.PropertyName = \"VisibleLightReflectance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Reflektionsgrad für sichtbares Licht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Visible Light Reflectance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reflexion du rayonnement visible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"可視光反射率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleLightReflectanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"U-Wert\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Transmission thermique surfacique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱貫流率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Außenbauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Est extérieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部区分\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.Roughness\", \"Roughness\");\r\n            ifcPSE.PropertyName = \"Roughness\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Rauheit der Oberfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Roughness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Rugosité\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"表面粗さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RoughnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.SurfaceColor\", \"SurfaceColor\");\r\n            ifcPSE.PropertyName = \"SurfaceColor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Oberflächenfarbe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Surface Color\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Couleur surface\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"表面色\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceColorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ShadingDeviceCommon\"))\r\n         {\r\n            propertySetShadingDeviceCommon.EntityTypes.Add(IFCEntityType.IfcShadingDevice);\r\n            propertySetShadingDeviceCommon.EntityTypes.Add(IFCEntityType.IfcShadingDeviceType);\r\n            propertySetShadingDeviceCommon.ObjectType = \"IfcShadingDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.ShadingDeviceType\", \"ShadingDeviceType\");\r\n            ifcPSE.PropertyName = \"ShadingDeviceType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementShading);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShadingDeviceTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.MechanicalOperated\", \"MechanicalOperated\");\r\n            ifcPSE.PropertyName = \"MechanicalOperated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalOperatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.SolarTransmittance\", \"SolarTransmittance\");\r\n            ifcPSE.PropertyName = \"SolarTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.SolarReflectance\", \"SolarReflectance\");\r\n            ifcPSE.PropertyName = \"SolarReflectance\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SolarReflectanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.VisibleLightTransmittance\", \"VisibleLightTransmittance\");\r\n            ifcPSE.PropertyName = \"VisibleLightTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleLightTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.VisibleLightReflectance\", \"VisibleLightReflectance\");\r\n            ifcPSE.PropertyName = \"VisibleLightReflectance\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VisibleLightReflectanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.Roughness\", \"Roughness\");\r\n            ifcPSE.PropertyName = \"Roughness\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RoughnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDeviceCommon.SurfaceColour\", \"SurfaceColour\");\r\n            ifcPSE.PropertyName = \"SurfaceColour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetShadingDeviceCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ShadingDevicePHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetShadingDevicePHistory = new PropertySetDescription();\r\n         propertySetShadingDevicePHistory.Name = \"Pset_ShadingDevicePHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ShadingDevicePHistory\"))\r\n         {\r\n            propertySetShadingDevicePHistory.EntityTypes.Add(IFCEntityType.IfcShadingDevice);\r\n            propertySetShadingDevicePHistory.ObjectType = \"IfcShadingDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDevicePHistory.TiltAngle\", \"TiltAngle\");\r\n            ifcPSE.PropertyName = \"TiltAngle\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tilt Angle\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TiltAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDevicePHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDevicePHistory.Azimuth\", \"Azimuth\");\r\n            ifcPSE.PropertyName = \"Azimuth\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Azimuth\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AzimuthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDevicePHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ShadingDevicePHistory\"))\r\n         {\r\n            propertySetShadingDevicePHistory.EntityTypes.Add(IFCEntityType.IfcShadingDevice);\r\n            propertySetShadingDevicePHistory.ObjectType = \"IfcShadingDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDevicePHistory.TiltAngle\", \"TiltAngle\");\r\n            ifcPSE.PropertyName = \"TiltAngle\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TiltAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDevicePHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShadingDevicePHistory.Azimuth\", \"Azimuth\");\r\n            ifcPSE.PropertyName = \"Azimuth\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AzimuthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShadingDevicePHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetShadingDevicePHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ShipLockCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetShipLockCommon = new PropertySetDescription();\r\n         propertySetShipLockCommon.Name = \"Pset_ShipLockCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ShipLockCommon\"))\r\n         {\r\n            propertySetShipLockCommon.EntityTypes.Add(IFCEntityType.IfcMarineFacility);\r\n            propertySetShipLockCommon.ObjectType = \"IfcMarineFacility\";\r\n            propertySetShipLockCommon.PredefinedType = \"SHIPLOCK\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShipLockCommon.CillLevelUpperHead\", \"CillLevelUpperHead\");\r\n            ifcPSE.PropertyName = \"CillLevelUpperHead\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CillLevelUpperHeadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShipLockCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShipLockCommon.CillLevelLowerHead\", \"CillLevelLowerHead\");\r\n            ifcPSE.PropertyName = \"CillLevelLowerHead\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CillLevelLowerHeadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShipLockCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShipLockCommon.WaterDeliveryValveType\", \"WaterDeliveryValveType\");\r\n            ifcPSE.PropertyName = \"WaterDeliveryValveType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterDeliveryValveTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShipLockCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShipLockCommon.WaterDeliverySystemType\", \"WaterDeliverySystemType\");\r\n            ifcPSE.PropertyName = \"WaterDeliverySystemType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterDeliverySystemTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShipLockCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetShipLockCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ShiplockComplex(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetShiplockComplex = new PropertySetDescription();\r\n         propertySetShiplockComplex.Name = \"Pset_ShiplockComplex\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ShiplockComplex\"))\r\n         {\r\n            propertySetShiplockComplex.EntityTypes.Add(IFCEntityType.IfcMarineFacility);\r\n            propertySetShiplockComplex.ObjectType = \"IfcMarineFacility\";\r\n            propertySetShiplockComplex.PredefinedType = \"SHIPLOCK\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShiplockComplex.LockGrade\", \"LockGrade\");\r\n            ifcPSE.PropertyName = \"LockGrade\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LockGradeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShiplockComplex.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShiplockComplex.LockLines\", \"LockLines\");\r\n            ifcPSE.PropertyName = \"LockLines\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LockLinesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShiplockComplex.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShiplockComplex.LockChamberLevels\", \"LockChamberLevels\");\r\n            ifcPSE.PropertyName = \"LockChamberLevels\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LockChamberLevelsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShiplockComplex.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShiplockComplex.LockMode\", \"LockMode\");\r\n            ifcPSE.PropertyName = \"LockMode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LockModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShiplockComplex.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetShiplockComplex);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ShiplockDesignCriteria(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetShiplockDesignCriteria = new PropertySetDescription();\r\n         propertySetShiplockDesignCriteria.Name = \"Pset_ShiplockDesignCriteria\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ShiplockDesignCriteria\"))\r\n         {\r\n            propertySetShiplockDesignCriteria.EntityTypes.Add(IFCEntityType.IfcMarineFacility);\r\n            propertySetShiplockDesignCriteria.ObjectType = \"IfcMarineFacility\";\r\n            propertySetShiplockDesignCriteria.PredefinedType = \"SHIPLOCK\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShiplockDesignCriteria.MaximumUpstreamNavigableWaterLevel\", \"MaximumUpstreamNavigableWaterLevel\");\r\n            ifcPSE.PropertyName = \"MaximumUpstreamNavigableWaterLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumUpstreamNavigableWaterLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShiplockDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShiplockDesignCriteria.MinimumUpstreamNavigableWaterLevel\", \"MinimumUpstreamNavigableWaterLevel\");\r\n            ifcPSE.PropertyName = \"MinimumUpstreamNavigableWaterLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumUpstreamNavigableWaterLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShiplockDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShiplockDesignCriteria.MaximumDownstreamNavigableWaterLevel\", \"MaximumDownstreamNavigableWaterLevel\");\r\n            ifcPSE.PropertyName = \"MaximumDownstreamNavigableWaterLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumDownstreamNavigableWaterLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShiplockDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShiplockDesignCriteria.MinimumDownstreamNavigableWaterLevel\", \"MinimumDownstreamNavigableWaterLevel\");\r\n            ifcPSE.PropertyName = \"MinimumDownstreamNavigableWaterLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumDownstreamNavigableWaterLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShiplockDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShiplockDesignCriteria.UpstreamMaintenanceWaterLevel\", \"UpstreamMaintenanceWaterLevel\");\r\n            ifcPSE.PropertyName = \"UpstreamMaintenanceWaterLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpstreamMaintenanceWaterLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShiplockDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShiplockDesignCriteria.DownstreamMaintenanceWaterLevel\", \"DownstreamMaintenanceWaterLevel\");\r\n            ifcPSE.PropertyName = \"DownstreamMaintenanceWaterLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DownstreamMaintenanceWaterLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShiplockDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShiplockDesignCriteria.UpstreamFloodWaterLevel\", \"UpstreamFloodWaterLevel\");\r\n            ifcPSE.PropertyName = \"UpstreamFloodWaterLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpstreamFloodWaterLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShiplockDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShiplockDesignCriteria.DownstreamFloodWaterLevel\", \"DownstreamFloodWaterLevel\");\r\n            ifcPSE.PropertyName = \"DownstreamFloodWaterLevel\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DownstreamFloodWaterLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShiplockDesignCriteria.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetShiplockDesignCriteria);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ShipyardCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetShipyardCommon = new PropertySetDescription();\r\n         propertySetShipyardCommon.Name = \"Pset_ShipyardCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ShipyardCommon\"))\r\n         {\r\n            propertySetShipyardCommon.EntityTypes.Add(IFCEntityType.IfcMarineFacility);\r\n            propertySetShipyardCommon.ObjectType = \"IfcMarineFacility\";\r\n            propertySetShipyardCommon.PredefinedType = \"SHIPYARD\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ShipyardCommon.PrimaryProductionType\", \"PrimaryProductionType\");\r\n            ifcPSE.PropertyName = \"PrimaryProductionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryProductionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetShipyardCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetShipyardCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SignalFrame(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSignalFrame = new PropertySetDescription();\r\n         propertySetSignalFrame.Name = \"Pset_SignalFrame\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SignalFrame\"))\r\n         {\r\n            propertySetSignalFrame.EntityTypes.Add(IFCEntityType.IfcSignal);\r\n            propertySetSignalFrame.EntityTypes.Add(IFCEntityType.IfcSignalType);\r\n            propertySetSignalFrame.ObjectType = \"IfcSignal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SignalFrame.BackboardType\", \"BackboardType\");\r\n            ifcPSE.PropertyName = \"BackboardType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BackboardTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSignalFrame.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SignalFrame.SignalFrameType\", \"SignalFrameType\");\r\n            ifcPSE.PropertyName = \"SignalFrameType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalFrameTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSignalFrame.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SignalFrame.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSignalFrame.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SignalFrame.SignalIndicatorType\", \"SignalIndicatorType\");\r\n            ifcPSE.PropertyName = \"SignalIndicatorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SignalIndicatorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalIndicatorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSignalFrame.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SignalFrame.SignalFrameBackboardHeight\", \"SignalFrameBackboardHeight\");\r\n            ifcPSE.PropertyName = \"SignalFrameBackboardHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalFrameBackboardHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSignalFrame.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SignalFrame.SignalFrameBackboardDiameter\", \"SignalFrameBackboardDiameter\");\r\n            ifcPSE.PropertyName = \"SignalFrameBackboardDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignalFrameBackboardDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSignalFrame.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSignalFrame);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SignCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSignCommon = new PropertySetDescription();\r\n         propertySetSignCommon.Name = \"Pset_SignCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SignCommon\"))\r\n         {\r\n            propertySetSignCommon.EntityTypes.Add(IFCEntityType.IfcSign);\r\n            propertySetSignCommon.EntityTypes.Add(IFCEntityType.IfcSignType);\r\n            propertySetSignCommon.ObjectType = \"IfcSign\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SignCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSignCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SignCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSignCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SignCommon.Category\", \"Category\");\r\n            ifcPSE.PropertyName = \"Category\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSignCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SignCommon.TactileMarking\", \"TactileMarking\");\r\n            ifcPSE.PropertyName = \"TactileMarking\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TactileMarkingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSignCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSignCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SiteCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSiteCommon = new PropertySetDescription();\r\n         propertySetSiteCommon.Name = \"Pset_SiteCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SiteCommon\"))\r\n         {\r\n            propertySetSiteCommon.EntityTypes.Add(IFCEntityType.IfcSite);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteCommon.BuildableArea\", \"BuildableArea\");\r\n            ifcPSE.PropertyName = \"BuildableArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BuildableAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteCommon.BuildingHeightLimit\", \"BuildingHeightLimit\");\r\n            ifcPSE.PropertyName = \"BuildingHeightLimit\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BuildingHeightLimitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteCommon.GrossAreaPlanned\", \"GrossAreaPlanned\");\r\n            ifcPSE.PropertyName = \"GrossAreaPlanned\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaPlannedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SiteCommon\"))\r\n         {\r\n            propertySetSiteCommon.EntityTypes.Add(IFCEntityType.IfcSite);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteCommon.BuildableArea\", \"BuildableArea\");\r\n            ifcPSE.PropertyName = \"BuildableArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BuildableAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteCommon.TotalArea\", \"TotalArea\");\r\n            ifcPSE.PropertyName = \"TotalArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteCommon.BuildingHeightLimit\", \"BuildingHeightLimit\");\r\n            ifcPSE.PropertyName = \"BuildingHeightLimit\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BuildingHeightLimitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SiteCommon\"))\r\n         {\r\n            propertySetSiteCommon.EntityTypes.Add(IFCEntityType.IfcSite);\r\n            propertySetSiteCommon.ObjectType = \"IfcSite\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Referenz ID\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조 ID\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteCommon.BuildableArea\", \"BuildableArea\");\r\n            ifcPSE.PropertyName = \"BuildableArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"bebaubare Fläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Buildable Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ValeurSurfaceConstructible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"建築可能面積\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"건축 가능 면적\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BuildableAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteCommon.SiteCoverageRatio\", \"SiteCoverageRatio\");\r\n            ifcPSE.PropertyName = \"SiteCoverageRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Grundflächenzahl\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Site Coverage Ratio\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"RatioSurfaceConstructible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"建蔽率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"건폐율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SiteCoverageRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteCommon.FloorAreaRatio\", \"FloorAreaRatio\");\r\n            ifcPSE.PropertyName = \"FloorAreaRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Geschossflächenzahl\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Floor Area Ratio\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ratio de surface de planchers\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"容積率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FloorAreaRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteCommon.BuildingHeightLimit\", \"BuildingHeightLimit\");\r\n            ifcPSE.PropertyName = \"BuildingHeightLimit\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"maximale Bebauungshöhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Building Height Limit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"HauteurMaximale\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"建物高さ制限\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"건물 높이 제한\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BuildingHeightLimitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteCommon.TotalArea\", \"TotalArea\");\r\n            ifcPSE.PropertyName = \"TotalArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttogrundstücksfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"SurfaceBruteProgrammee\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"延べ面積\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"연면적\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SiteCommon\"))\r\n         {\r\n            propertySetSiteCommon.EntityTypes.Add(IFCEntityType.IfcSite);\r\n            propertySetSiteCommon.ObjectType = \"IfcSite\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteCommon.BuildableArea\", \"BuildableArea\");\r\n            ifcPSE.PropertyName = \"BuildableArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BuildableAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteCommon.SiteCoverageRatio\", \"SiteCoverageRatio\");\r\n            ifcPSE.PropertyName = \"SiteCoverageRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SiteCoverageRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteCommon.FloorAreaRatio\", \"FloorAreaRatio\");\r\n            ifcPSE.PropertyName = \"FloorAreaRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FloorAreaRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteCommon.BuildingHeightLimit\", \"BuildingHeightLimit\");\r\n            ifcPSE.PropertyName = \"BuildingHeightLimit\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BuildingHeightLimitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteCommon.TotalArea\", \"TotalArea\");\r\n            ifcPSE.PropertyName = \"TotalArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSiteCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SiteWeather(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSiteWeather = new PropertySetDescription();\r\n         propertySetSiteWeather.Name = \"Pset_SiteWeather\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SiteWeather\"))\r\n         {\r\n            propertySetSiteWeather.EntityTypes.Add(IFCEntityType.IfcSite);\r\n            propertySetSiteWeather.ObjectType = \"IfcSite\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteWeather.MaxAmbientTemp\", \"MaxAmbientTemp\");\r\n            ifcPSE.PropertyName = \"MaxAmbientTemp\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaxAmbientTempCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteWeather.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SiteWeather.MinAmbientTemp\", \"MinAmbientTemp\");\r\n            ifcPSE.PropertyName = \"MinAmbientTemp\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinAmbientTempCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSiteWeather.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSiteWeather);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SlabCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSlabCommon = new PropertySetDescription();\r\n         propertySetSlabCommon.Name = \"Pset_SlabCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SlabCommon\"))\r\n         {\r\n            propertySetSlabCommon.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.Combustible\", \"Combustible\");\r\n            ifcPSE.PropertyName = \"Combustible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.SurfaceSpreadOfFlame\", \"SurfaceSpreadOfFlame\");\r\n            ifcPSE.PropertyName = \"SurfaceSpreadOfFlame\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceSpreadOfFlameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.Compartmentation\", \"Compartmentation\");\r\n            ifcPSE.PropertyName = \"Compartmentation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompartmentationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SlabCommon\"))\r\n         {\r\n            propertySetSlabCommon.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.Combustible\", \"Combustible\");\r\n            ifcPSE.PropertyName = \"Combustible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.SurfaceSpreadOfFlame\", \"SurfaceSpreadOfFlame\");\r\n            ifcPSE.PropertyName = \"SurfaceSpreadOfFlame\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceSpreadOfFlameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.Compartmentation\", \"Compartmentation\");\r\n            ifcPSE.PropertyName = \"Compartmentation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompartmentationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.PitchAngle\", \"PitchAngle\");\r\n            ifcPSE.PropertyName = \"PitchAngle\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PitchAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SlabCommon\"))\r\n         {\r\n            propertySetSlabCommon.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetSlabCommon.ObjectType = \"IfcSlab\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bauteiltyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Schallschutzklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Acoustic Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"IsolationAcoustique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"遮音等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"隔音等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Feuerwiderstandsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ResistanceAuFeu\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐火等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"防火等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.PitchAngle\", \"PitchAngle\");\r\n            ifcPSE.PropertyName = \"PitchAngle\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Dachflächenneigung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pitch Angle\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"AngleInclinaison\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"勾配角度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PitchAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.Combustible\", \"Combustible\");\r\n            ifcPSE.PropertyName = \"Combustible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Brennbares Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Combustible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Combustible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"可燃性区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否可燃\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.SurfaceSpreadOfFlame\", \"SurfaceSpreadOfFlame\");\r\n            ifcPSE.PropertyName = \"SurfaceSpreadOfFlame\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Brandverhalten\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Surface Spread Of Flame\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"SurfacePropagationFlamme\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"火炎伝播性\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceSpreadOfFlameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.Compartmentation\", \"Compartmentation\");\r\n            ifcPSE.PropertyName = \"Compartmentation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Brandabschnittsdefinierendes Bauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Compartmentation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Compartimentage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"防火区画\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompartmentationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Außenbauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EstExterieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否外部构件\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"U-Wert\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TransmissionThermique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱貫流率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"导热系数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Tragendes Bauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Load Bearing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Porteur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐力部材\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否承重\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SlabCommon\"))\r\n         {\r\n            propertySetSlabCommon.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetSlabCommon.EntityTypes.Add(IFCEntityType.IfcSlabType);\r\n            propertySetSlabCommon.ObjectType = \"IfcSlab\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.PitchAngle\", \"PitchAngle\");\r\n            ifcPSE.PropertyName = \"PitchAngle\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PitchAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.Combustible\", \"Combustible\");\r\n            ifcPSE.PropertyName = \"Combustible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.SurfaceSpreadOfFlame\", \"SurfaceSpreadOfFlame\");\r\n            ifcPSE.PropertyName = \"SurfaceSpreadOfFlame\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceSpreadOfFlameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.Compartmentation\", \"Compartmentation\");\r\n            ifcPSE.PropertyName = \"Compartmentation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompartmentationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSlabCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SlabTypeTrackSlab(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSlabTypeTrackSlab = new PropertySetDescription();\r\n         propertySetSlabTypeTrackSlab.Name = \"Pset_SlabTypeTrackSlab\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SlabTypeTrackSlab\"))\r\n         {\r\n            propertySetSlabTypeTrackSlab.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetSlabTypeTrackSlab.EntityTypes.Add(IFCEntityType.IfcSlabType);\r\n            propertySetSlabTypeTrackSlab.ObjectType = \"IfcSlab\";\r\n            propertySetSlabTypeTrackSlab.PredefinedType = \"TRACKSLAB\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SlabTypeTrackSlab.TechnicalStandard\", \"TechnicalStandard\");\r\n            ifcPSE.PropertyName = \"TechnicalStandard\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TechnicalStandardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSlabTypeTrackSlab.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSlabTypeTrackSlab);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SolarDeviceTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSolarDeviceTypeCommon = new PropertySetDescription();\r\n         propertySetSolarDeviceTypeCommon.Name = \"Pset_SolarDeviceTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SolarDeviceTypeCommon\"))\r\n         {\r\n            propertySetSolarDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcSolarDevice);\r\n            propertySetSolarDeviceTypeCommon.ObjectType = \"IfcSolarDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolarDeviceTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolarDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolarDeviceTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolarDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolarDeviceTypeCommon.ActiveCellSurfaceAreaFraction\", \"ActiveCellSurfaceAreaFraction\");\r\n            ifcPSE.PropertyName = \"ActiveCellSurfaceAreaFraction\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ActiveCellSurfaceAreaFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolarDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolarDeviceTypeCommon.CellEfficiency\", \"CellEfficiency\");\r\n            ifcPSE.PropertyName = \"CellEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CellEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolarDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SolarDeviceTypeCommon\"))\r\n         {\r\n            propertySetSolarDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcSolarDevice);\r\n            propertySetSolarDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcSolarDeviceType);\r\n            propertySetSolarDeviceTypeCommon.ObjectType = \"IfcSolarDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolarDeviceTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolarDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolarDeviceTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolarDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSolarDeviceTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SolidStratumCapacity(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSolidStratumCapacity = new PropertySetDescription();\r\n         propertySetSolidStratumCapacity.Name = \"Pset_SolidStratumCapacity\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SolidStratumCapacity\"))\r\n         {\r\n            propertySetSolidStratumCapacity.EntityTypes.Add(IFCEntityType.IfcGeotechnicalStratum);\r\n            propertySetSolidStratumCapacity.ObjectType = \"IfcGeotechnicalStratum\";\r\n            propertySetSolidStratumCapacity.PredefinedType = \"SOLID\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumCapacity.CohesionBehaviour\", \"CohesionBehaviour\");\r\n            ifcPSE.PropertyName = \"CohesionBehaviour\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CohesionBehaviourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumCapacity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumCapacity.FrictionAngle\", \"FrictionAngle\");\r\n            ifcPSE.PropertyName = \"FrictionAngle\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrictionAngleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumCapacity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumCapacity.FrictionBehaviour\", \"FrictionBehaviour\");\r\n            ifcPSE.PropertyName = \"FrictionBehaviour\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrictionBehaviourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumCapacity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumCapacity.GrainSize\", \"GrainSize\");\r\n            ifcPSE.PropertyName = \"GrainSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrainSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumCapacity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumCapacity.HydraulicConductivity\", \"HydraulicConductivity\");\r\n            ifcPSE.PropertyName = \"HydraulicConductivity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HydraulicConductivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumCapacity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumCapacity.LoadBearingCapacity\", \"LoadBearingCapacity\");\r\n            ifcPSE.PropertyName = \"LoadBearingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.PlanarForce;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumCapacity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumCapacity.NValue\", \"NValue\");\r\n            ifcPSE.PropertyName = \"NValue\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NValueCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumCapacity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumCapacity.PermeabilityBehaviour\", \"PermeabilityBehaviour\");\r\n            ifcPSE.PropertyName = \"PermeabilityBehaviour\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PermeabilityBehaviourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumCapacity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumCapacity.PoisonsRatio\", \"PoisonsRatio\");\r\n            ifcPSE.PropertyName = \"PoisonsRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PoisonsRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumCapacity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumCapacity.PwaveVelocity\", \"PwaveVelocity\");\r\n            ifcPSE.PropertyName = \"PwaveVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PwaveVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumCapacity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumCapacity.Resistivity\", \"Resistivity\");\r\n            ifcPSE.PropertyName = \"Resistivity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ResistivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumCapacity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumCapacity.SettlementBehaviour\", \"SettlementBehaviour\");\r\n            ifcPSE.PropertyName = \"SettlementBehaviour\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SettlementBehaviourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumCapacity.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumCapacity.SwaveVelocity\", \"SwaveVelocity\");\r\n            ifcPSE.PropertyName = \"SwaveVelocity\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwaveVelocityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumCapacity.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSolidStratumCapacity);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SolidStratumComposition(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSolidStratumComposition = new PropertySetDescription();\r\n         propertySetSolidStratumComposition.Name = \"Pset_SolidStratumComposition\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SolidStratumComposition\"))\r\n         {\r\n            propertySetSolidStratumComposition.EntityTypes.Add(IFCEntityType.IfcGeotechnicalStratum);\r\n            propertySetSolidStratumComposition.ObjectType = \"IfcGeotechnicalStratum\";\r\n            propertySetSolidStratumComposition.PredefinedType = \"SOLID\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumComposition.AirVolume\", \"AirVolume\");\r\n            ifcPSE.PropertyName = \"AirVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumComposition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumComposition.BouldersVolume\", \"BouldersVolume\");\r\n            ifcPSE.PropertyName = \"BouldersVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BouldersVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumComposition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumComposition.ClayVolume\", \"ClayVolume\");\r\n            ifcPSE.PropertyName = \"ClayVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClayVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumComposition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumComposition.CobblesVolume\", \"CobblesVolume\");\r\n            ifcPSE.PropertyName = \"CobblesVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CobblesVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumComposition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumComposition.ContaminantVolume\", \"ContaminantVolume\");\r\n            ifcPSE.PropertyName = \"ContaminantVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContaminantVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumComposition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumComposition.FillVolume\", \"FillVolume\");\r\n            ifcPSE.PropertyName = \"FillVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FillVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumComposition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumComposition.GravelVolume\", \"GravelVolume\");\r\n            ifcPSE.PropertyName = \"GravelVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GravelVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumComposition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumComposition.OrganicVolume\", \"OrganicVolume\");\r\n            ifcPSE.PropertyName = \"OrganicVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OrganicVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumComposition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumComposition.RockVolume\", \"RockVolume\");\r\n            ifcPSE.PropertyName = \"RockVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RockVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumComposition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumComposition.SandVolume\", \"SandVolume\");\r\n            ifcPSE.PropertyName = \"SandVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SandVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumComposition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumComposition.SiltVolume\", \"SiltVolume\");\r\n            ifcPSE.PropertyName = \"SiltVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SiltVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumComposition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumComposition.WaterVolume\", \"WaterVolume\");\r\n            ifcPSE.PropertyName = \"WaterVolume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumComposition.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SolidStratumComposition.CompositeFractions\", \"CompositeFractions\");\r\n            ifcPSE.PropertyName = \"CompositeFractions\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SoilCompositeFractions);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompositeFractionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSolidStratumComposition.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSolidStratumComposition);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SoundAttenuation(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSoundAttenuation = new PropertySetDescription();\r\n         propertySetSoundAttenuation.Name = \"Pset_SoundAttenuation\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SoundAttenuation\"))\r\n         {\r\n            propertySetSoundAttenuation.EntityTypes.Add(IFCEntityType.IfcAnnotation);\r\n            propertySetSoundAttenuation.ObjectType = \"IfcAnnotation\";\r\n            propertySetSoundAttenuation.PredefinedType = \"SOUND\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SoundAttenuation.SoundScale\", \"SoundScale\");\r\n            ifcPSE.PropertyName = \"SoundScale\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SoundScale);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sound Scale\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"騒音の単位\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"소음단위\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundScaleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSoundAttenuation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SoundAttenuation.SoundFrequency\", \"SoundFrequency\");\r\n            ifcPSE.PropertyName = \"SoundFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sound Frequency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"音の周波数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"소리의 주파수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSoundAttenuation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SoundAttenuation.SoundPressure\", \"SoundPressure\");\r\n            ifcPSE.PropertyName = \"SoundPressure\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sound Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"音圧\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"음압\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSoundAttenuation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SoundAttenuation\"))\r\n         {\r\n            propertySetSoundAttenuation.EntityTypes.Add(IFCEntityType.IfcAnnotation);\r\n            propertySetSoundAttenuation.ObjectType = \"IfcAnnotation\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SoundAttenuation.SoundScale\", \"SoundScale\");\r\n            ifcPSE.PropertyName = \"SoundScale\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SoundScale);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundScaleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSoundAttenuation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SoundAttenuation.SoundFrequency\", \"SoundFrequency\");\r\n            ifcPSE.PropertyName = \"SoundFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSoundAttenuation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SoundAttenuation.SoundPressure\", \"SoundPressure\");\r\n            ifcPSE.PropertyName = \"SoundPressure\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSoundAttenuation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSoundAttenuation);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SoundGeneration(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSoundGeneration = new PropertySetDescription();\r\n         propertySetSoundGeneration.Name = \"Pset_SoundGeneration\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SoundGeneration\"))\r\n         {\r\n            propertySetSoundGeneration.EntityTypes.Add(IFCEntityType.IfcDistributionFlowElement);\r\n            propertySetSoundGeneration.ObjectType = \"IfcDistributionFlowElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SoundGeneration.SoundCurve\", \"SoundCurve\");\r\n            ifcPSE.PropertyName = \"SoundCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Frequency;\r\n            ifcPSE.PropertyType = PropertyType.SoundPower;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sound Curve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"音響（騒音？）曲線\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"음향곡성\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSoundGeneration.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SoundGeneration\"))\r\n         {\r\n            propertySetSoundGeneration.EntityTypes.Add(IFCEntityType.IfcDistributionFlowElement);\r\n            propertySetSoundGeneration.EntityTypes.Add(IFCEntityType.IfcDistributionFlowElementType);\r\n            propertySetSoundGeneration.ObjectType = \"IfcDistributionFlowElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SoundGeneration.SoundCurve\", \"SoundCurve\");\r\n            ifcPSE.PropertyName = \"SoundCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Frequency;\r\n            ifcPSE.PropertyType = PropertyType.SoundPower;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SoundCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSoundGeneration.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSoundGeneration);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceAirHandlingDimensioning(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceAirHandlingDimensioning = new PropertySetDescription();\r\n         propertySetSpaceAirHandlingDimensioning.Name = \"Pset_SpaceAirHandlingDimensioning\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceAirHandlingDimensioning\"))\r\n         {\r\n            propertySetSpaceAirHandlingDimensioning.EntityTypes.Add(IFCEntityType.IfcSpatialElement);\r\n            propertySetSpaceAirHandlingDimensioning.EntityTypes.Add(IFCEntityType.IfcSpatialElementType);\r\n            propertySetSpaceAirHandlingDimensioning.ObjectType = \"IfcSpatialElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceAirHandlingDimensioning.CoolingDesignAirFlow\", \"CoolingDesignAirFlow\");\r\n            ifcPSE.PropertyName = \"CoolingDesignAirFlow\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingDesignAirFlowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceAirHandlingDimensioning.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceAirHandlingDimensioning.HeatingDesignAirFlow\", \"HeatingDesignAirFlow\");\r\n            ifcPSE.PropertyName = \"HeatingDesignAirFlow\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingDesignAirFlowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceAirHandlingDimensioning.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceAirHandlingDimensioning.SensibleHeatGain\", \"SensibleHeatGain\");\r\n            ifcPSE.PropertyName = \"SensibleHeatGain\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceAirHandlingDimensioning.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceAirHandlingDimensioning.TotalHeatGain\", \"TotalHeatGain\");\r\n            ifcPSE.PropertyName = \"TotalHeatGain\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceAirHandlingDimensioning.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceAirHandlingDimensioning.TotalHeatLoss\", \"TotalHeatLoss\");\r\n            ifcPSE.PropertyName = \"TotalHeatLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceAirHandlingDimensioning.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceAirHandlingDimensioning.CoolingDryBulb\", \"CoolingDryBulb\");\r\n            ifcPSE.PropertyName = \"CoolingDryBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingDryBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceAirHandlingDimensioning.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceAirHandlingDimensioning.CoolingRelativeHumidity\", \"CoolingRelativeHumidity\");\r\n            ifcPSE.PropertyName = \"CoolingRelativeHumidity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingRelativeHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceAirHandlingDimensioning.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceAirHandlingDimensioning.HeatingDryBulb\", \"HeatingDryBulb\");\r\n            ifcPSE.PropertyName = \"HeatingDryBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingDryBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceAirHandlingDimensioning.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceAirHandlingDimensioning.HeatingRelativeHumidity\", \"HeatingRelativeHumidity\");\r\n            ifcPSE.PropertyName = \"HeatingRelativeHumidity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingRelativeHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceAirHandlingDimensioning.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceAirHandlingDimensioning.VentilationDesignAirFlow\", \"VentilationDesignAirFlow\");\r\n            ifcPSE.PropertyName = \"VentilationDesignAirFlow\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationDesignAirFlowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceAirHandlingDimensioning.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceAirHandlingDimensioning.DesignAirFlow\", \"DesignAirFlow\");\r\n            ifcPSE.PropertyName = \"DesignAirFlow\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DesignAirFlowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceAirHandlingDimensioning.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceAirHandlingDimensioning.CeilingRAPlenum\", \"CeilingRAPlenum\");\r\n            ifcPSE.PropertyName = \"CeilingRAPlenum\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CeilingRAPlenumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceAirHandlingDimensioning.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceAirHandlingDimensioning.BoundaryAreaHeatLoss\", \"BoundaryAreaHeatLoss\");\r\n            ifcPSE.PropertyName = \"BoundaryAreaHeatLoss\";\r\n            ifcPSE.PropertyType = PropertyType.HeatFluxDensity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoundaryAreaHeatLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceAirHandlingDimensioning.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceAirHandlingDimensioning);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceCommon = new PropertySetDescription();\r\n         propertySetSpaceCommon.Name = \"Pset_SpaceCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceCommon\"))\r\n         {\r\n            propertySetSpaceCommon.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.OccupancyType\", \"OccupancyType\");\r\n            ifcPSE.PropertyName = \"OccupancyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.OccupancyNumber\", \"OccupancyNumber\");\r\n            ifcPSE.PropertyName = \"OccupancyNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.PubliclyAccessible\", \"PubliclyAccessible\");\r\n            ifcPSE.PropertyName = \"PubliclyAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PubliclyAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.NaturalVentilation\", \"NaturalVentilation\");\r\n            ifcPSE.PropertyName = \"NaturalVentilation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NaturalVentilationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.NaturalVentilationRate\", \"NaturalVentilationRate\");\r\n            ifcPSE.PropertyName = \"NaturalVentilationRate\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NaturalVentilationRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.MechanicalVentilationRate\", \"MechanicalVentilationRate\");\r\n            ifcPSE.PropertyName = \"MechanicalVentilationRate\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalVentilationRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.Concealed\", \"Concealed\");\r\n            ifcPSE.PropertyName = \"Concealed\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcealedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.GrossAreaPlanned\", \"GrossAreaPlanned\");\r\n            ifcPSE.PropertyName = \"GrossAreaPlanned\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaPlannedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceCommon\"))\r\n         {\r\n            propertySetSpaceCommon.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.Category\", \"Category\");\r\n            ifcPSE.PropertyName = \"Category\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.FloorCovering\", \"FloorCovering\");\r\n            ifcPSE.PropertyName = \"FloorCovering\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FloorCoveringCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.WallCovering\", \"WallCovering\");\r\n            ifcPSE.PropertyName = \"WallCovering\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallCoveringCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.CeilingCovering\", \"CeilingCovering\");\r\n            ifcPSE.PropertyName = \"CeilingCovering\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CeilingCoveringCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.SkirtingBoard\", \"SkirtingBoard\");\r\n            ifcPSE.PropertyName = \"SkirtingBoard\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SkirtingBoardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.GrossPlannedArea\", \"GrossPlannedArea\");\r\n            ifcPSE.PropertyName = \"GrossPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.NetPlannedArea\", \"NetPlannedArea\");\r\n            ifcPSE.PropertyName = \"NetPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.PubliclyAccessible\", \"PubliclyAccessible\");\r\n            ifcPSE.PropertyName = \"PubliclyAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PubliclyAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.ConcealedFlooring\", \"ConcealedFlooring\");\r\n            ifcPSE.PropertyName = \"ConcealedFlooring\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcealedFlooringCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.ConcealedCeiling\", \"ConcealedCeiling\");\r\n            ifcPSE.PropertyName = \"ConcealedCeiling\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcealedCeilingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceCommon\"))\r\n         {\r\n            propertySetSpaceCommon.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceCommon.ObjectType = \"IfcSpace\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Raumtyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조 ID\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"IstAußenraum\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Est extérieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部区分\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.GrossPlannedArea\", \"GrossPlannedArea\");\r\n            ifcPSE.PropertyName = \"GrossPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Planned Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Surface programmée brute\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"計画グロス面積\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"계획 그로스 면적\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.NetPlannedArea\", \"NetPlannedArea\");\r\n            ifcPSE.PropertyName = \"NetPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Planned Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Surface programmée nette\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"計画ネット面積\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"계획 인터넷 면적\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.PubliclyAccessible\", \"PubliclyAccessible\");\r\n            ifcPSE.PropertyName = \"PubliclyAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"öffentlich zugänglich\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Publicly Accessible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"AccessibleAuPublic\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"公共アクセス可能性\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"공공 액세스 가능성\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PubliclyAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"behindertengerecht zugänglich\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Handicap Accessible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"AccessibleHandicapes\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ハンディキャップアクセス可能性\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"핸디캡 액세스 가능성\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceCommon\"))\r\n         {\r\n            propertySetSpaceCommon.EntityTypes.Add(IFCEntityType.IfcSpatialElement);\r\n            propertySetSpaceCommon.EntityTypes.Add(IFCEntityType.IfcSpatialElementType);\r\n            propertySetSpaceCommon.ObjectType = \"IfcSpatialElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.GrossPlannedArea\", \"GrossPlannedArea\");\r\n            ifcPSE.PropertyName = \"GrossPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.NetPlannedArea\", \"NetPlannedArea\");\r\n            ifcPSE.PropertyName = \"NetPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.PubliclyAccessible\", \"PubliclyAccessible\");\r\n            ifcPSE.PropertyName = \"PubliclyAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PubliclyAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceCoveringRequirements(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceCoveringRequirements = new PropertySetDescription();\r\n         propertySetSpaceCoveringRequirements.Name = \"Pset_SpaceCoveringRequirements\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceCoveringRequirements\"))\r\n         {\r\n            propertySetSpaceCoveringRequirements.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceCoveringRequirements.ObjectType = \"IfcSpace\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.FloorCovering\", \"FloorCovering\");\r\n            ifcPSE.PropertyName = \"FloorCovering\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bodenbelag\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Floor Covering\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"RevetementSol\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"床仕上げ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FloorCoveringCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.FloorCoveringThickness\", \"FloorCoveringThickness\");\r\n            ifcPSE.PropertyName = \"FloorCoveringThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Dicke des Bodenbelags\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Floor Covering Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Epaisseur du revêtement de sol\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"床仕上げ材厚\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FloorCoveringThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.WallCovering\", \"WallCovering\");\r\n            ifcPSE.PropertyName = \"WallCovering\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Wandbekleidung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wall Covering\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"RevetementMur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"壁仕上げ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallCoveringCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.WallCoveringThickness\", \"WallCoveringThickness\");\r\n            ifcPSE.PropertyName = \"WallCoveringThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Dicke der Wandbekleidung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Wall Covering Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Epaisseur du revêtement de mur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"壁仕上げ厚\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallCoveringThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.CeilingCovering\", \"CeilingCovering\");\r\n            ifcPSE.PropertyName = \"CeilingCovering\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Deckenbekleidung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ceiling Covering\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"RevetementPlafond\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"天井仕上げ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CeilingCoveringCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.CeilingCoveringThickness\", \"CeilingCoveringThickness\");\r\n            ifcPSE.PropertyName = \"CeilingCoveringThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Dicke der Deckenbekleidung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ceiling Covering Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Epaisseur du revêtement de plafond\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"天井仕上げ厚\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CeilingCoveringThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.SkirtingBoard\", \"SkirtingBoard\");\r\n            ifcPSE.PropertyName = \"SkirtingBoard\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Sockelleiste\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Skirting Board\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Matériau de la plinthe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"幅木材\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SkirtingBoardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.SkirtingBoardHeight\", \"SkirtingBoardHeight\");\r\n            ifcPSE.PropertyName = \"SkirtingBoardHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Höhe der Sockelleite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Skirting Board Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Hauteur de la plinthe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"幅木材高\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SkirtingBoardHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.Molding\", \"Molding\");\r\n            ifcPSE.PropertyName = \"Molding\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Gesims\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Molding\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Matériau de la moulure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"廻縁\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MoldingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.MoldingHeight\", \"MoldingHeight\");\r\n            ifcPSE.PropertyName = \"MoldingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Höhe des Gesims\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Molding Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Hauteur de la moulure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"廻縁高\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MoldingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.ConcealedFlooring\", \"ConcealedFlooring\");\r\n            ifcPSE.PropertyName = \"ConcealedFlooring\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Installationsboden\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Concealed Flooring\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"FauxPlancher\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"隠蔽床\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcealedFlooringCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.ConcealedFlooringOffset\", \"ConcealedFlooringOffset\");\r\n            ifcPSE.PropertyName = \"ConcealedFlooringOffset\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcealedFlooringOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.ConcealedCeiling\", \"ConcealedCeiling\");\r\n            ifcPSE.PropertyName = \"ConcealedCeiling\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Installationsdecke\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Concealed Ceiling\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"FauxPlafond\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"隠蔽天井\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcealedCeilingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.ConcealedCeilingOffset\", \"ConcealedCeilingOffset\");\r\n            ifcPSE.PropertyName = \"ConcealedCeilingOffset\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcealedCeilingOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceCoveringRequirements\"))\r\n         {\r\n            propertySetSpaceCoveringRequirements.EntityTypes.Add(IFCEntityType.IfcSpatialElement);\r\n            propertySetSpaceCoveringRequirements.EntityTypes.Add(IFCEntityType.IfcSpatialElementType);\r\n            propertySetSpaceCoveringRequirements.ObjectType = \"IfcSpatialElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.FloorCovering\", \"FloorCovering\");\r\n            ifcPSE.PropertyName = \"FloorCovering\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FloorCoveringCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.FloorCoveringThickness\", \"FloorCoveringThickness\");\r\n            ifcPSE.PropertyName = \"FloorCoveringThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FloorCoveringThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.WallCovering\", \"WallCovering\");\r\n            ifcPSE.PropertyName = \"WallCovering\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallCoveringCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.WallCoveringThickness\", \"WallCoveringThickness\");\r\n            ifcPSE.PropertyName = \"WallCoveringThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WallCoveringThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.CeilingCovering\", \"CeilingCovering\");\r\n            ifcPSE.PropertyName = \"CeilingCovering\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CeilingCoveringCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.CeilingCoveringThickness\", \"CeilingCoveringThickness\");\r\n            ifcPSE.PropertyName = \"CeilingCoveringThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CeilingCoveringThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.SkirtingBoard\", \"SkirtingBoard\");\r\n            ifcPSE.PropertyName = \"SkirtingBoard\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SkirtingBoardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.SkirtingBoardHeight\", \"SkirtingBoardHeight\");\r\n            ifcPSE.PropertyName = \"SkirtingBoardHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SkirtingBoardHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.Molding\", \"Molding\");\r\n            ifcPSE.PropertyName = \"Molding\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MoldingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.MoldingHeight\", \"MoldingHeight\");\r\n            ifcPSE.PropertyName = \"MoldingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MoldingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.ConcealedFlooring\", \"ConcealedFlooring\");\r\n            ifcPSE.PropertyName = \"ConcealedFlooring\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcealedFlooringCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.ConcealedFlooringOffset\", \"ConcealedFlooringOffset\");\r\n            ifcPSE.PropertyName = \"ConcealedFlooringOffset\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcealedFlooringOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.ConcealedCeiling\", \"ConcealedCeiling\");\r\n            ifcPSE.PropertyName = \"ConcealedCeiling\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcealedCeilingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceCoveringRequirements.ConcealedCeilingOffset\", \"ConcealedCeilingOffset\");\r\n            ifcPSE.PropertyName = \"ConcealedCeilingOffset\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConcealedCeilingOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceCoveringRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceCoveringRequirements);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceFireSafetyRequirements(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceFireSafetyRequirements = new PropertySetDescription();\r\n         propertySetSpaceFireSafetyRequirements.Name = \"Pset_SpaceFireSafetyRequirements\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceFireSafetyRequirements\"))\r\n         {\r\n            propertySetSpaceFireSafetyRequirements.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceFireSafetyRequirements.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.MainFireUse\", \"MainFireUse\");\r\n            ifcPSE.PropertyName = \"MainFireUse\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MainFireUseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.AncillaryFireUse\", \"AncillaryFireUse\");\r\n            ifcPSE.PropertyName = \"AncillaryFireUse\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AncillaryFireUseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.FireRiskFactor\", \"FireRiskFactor\");\r\n            ifcPSE.PropertyName = \"FireRiskFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRiskFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.FireHazardFactor\", \"FireHazardFactor\");\r\n            ifcPSE.PropertyName = \"FireHazardFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireHazardFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.FlammableStorage\", \"FlammableStorage\");\r\n            ifcPSE.PropertyName = \"FlammableStorage\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlammableStorageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.SprinklerProtection\", \"SprinklerProtection\");\r\n            ifcPSE.PropertyName = \"SprinklerProtection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.SprinklerProtectionAutomatic\", \"SprinklerProtectionAutomatic\");\r\n            ifcPSE.PropertyName = \"SprinklerProtectionAutomatic\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionAutomaticCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.AirPressurization\", \"AirPressurization\");\r\n            ifcPSE.PropertyName = \"AirPressurization\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressurizationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceFireSafetyRequirements\"))\r\n         {\r\n            propertySetSpaceFireSafetyRequirements.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceFireSafetyRequirements.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.MainFireUse\", \"MainFireUse\");\r\n            ifcPSE.PropertyName = \"MainFireUse\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MainFireUseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.AncillaryFireUse\", \"AncillaryFireUse\");\r\n            ifcPSE.PropertyName = \"AncillaryFireUse\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AncillaryFireUseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.FireRiskFactor\", \"FireRiskFactor\");\r\n            ifcPSE.PropertyName = \"FireRiskFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRiskFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.FireHazardFactor\", \"FireHazardFactor\");\r\n            ifcPSE.PropertyName = \"FireHazardFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireHazardFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.FlammableStorage\", \"FlammableStorage\");\r\n            ifcPSE.PropertyName = \"FlammableStorage\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlammableStorageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.SprinklerProtection\", \"SprinklerProtection\");\r\n            ifcPSE.PropertyName = \"SprinklerProtection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.SprinklerProtectionAutomatic\", \"SprinklerProtectionAutomatic\");\r\n            ifcPSE.PropertyName = \"SprinklerProtectionAutomatic\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionAutomaticCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.AirPressurization\", \"AirPressurization\");\r\n            ifcPSE.PropertyName = \"AirPressurization\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressurizationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceFireSafetyRequirements\"))\r\n         {\r\n            propertySetSpaceFireSafetyRequirements.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceFireSafetyRequirements.EntityTypes.Add(IFCEntityType.IfcSpatialZone);\r\n            propertySetSpaceFireSafetyRequirements.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            propertySetSpaceFireSafetyRequirements.ObjectType = \"IfcSpace, IfcSpatialZone, IfcZone\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.FireRiskFactor\", \"FireRiskFactor\");\r\n            ifcPSE.PropertyName = \"FireRiskFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Brandgefahrenklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Risk Factor\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"FacteurRisqueIncendie\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"火災危険度要因\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"화재 위험 요인\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRiskFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.FlammableStorage\", \"FlammableStorage\");\r\n            ifcPSE.PropertyName = \"FlammableStorage\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Lagerung brennbarer Stoffe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flammable Storage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"StockageCombustible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"可燃物保管区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"가연성 물질 창고\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlammableStorageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Notausgang\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Exit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"SortieSecours\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"非常口区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"화재 출구 (피난 출구)\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.SprinklerProtection\", \"SprinklerProtection\");\r\n            ifcPSE.PropertyName = \"SprinklerProtection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Sprinklerschutz\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sprinkler Protection\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ProtectionParSprinkler\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"スプリンクラー防御\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"스프링 클러 방어\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.SprinklerProtectionAutomatic\", \"SprinklerProtectionAutomatic\");\r\n            ifcPSE.PropertyName = \"SprinklerProtectionAutomatic\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Sprinklerschutz automatisch\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sprinkler Protection Automatic\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ProtectionAutomatiqueParSprinkler\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"自動スプリンクラー防御\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"스프링 클러 방어 자동 구분\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionAutomaticCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.AirPressurization\", \"AirPressurization\");\r\n            ifcPSE.PropertyName = \"AirPressurization\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Luftdruckausgleich\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Pressurization\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"AirComprimeDisponible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"空気加圧\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"공기 가압\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressurizationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceFireSafetyRequirements\"))\r\n         {\r\n            propertySetSpaceFireSafetyRequirements.EntityTypes.Add(IFCEntityType.IfcSpatialElement);\r\n            propertySetSpaceFireSafetyRequirements.EntityTypes.Add(IFCEntityType.IfcSpatialZone);\r\n            propertySetSpaceFireSafetyRequirements.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            propertySetSpaceFireSafetyRequirements.EntityTypes.Add(IFCEntityType.IfcSpatialElementType);\r\n            propertySetSpaceFireSafetyRequirements.EntityTypes.Add(IFCEntityType.IfcSpatialZoneType);\r\n            propertySetSpaceFireSafetyRequirements.ObjectType = \"IfcSpatialElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.FireRiskFactor\", \"FireRiskFactor\");\r\n            ifcPSE.PropertyName = \"FireRiskFactor\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRiskFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.FlammableStorage\", \"FlammableStorage\");\r\n            ifcPSE.PropertyName = \"FlammableStorage\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlammableStorageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.SprinklerProtection\", \"SprinklerProtection\");\r\n            ifcPSE.PropertyName = \"SprinklerProtection\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.SprinklerProtectionAutomatic\", \"SprinklerProtectionAutomatic\");\r\n            ifcPSE.PropertyName = \"SprinklerProtectionAutomatic\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SprinklerProtectionAutomaticCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceFireSafetyRequirements.AirPressurization\", \"AirPressurization\");\r\n            ifcPSE.PropertyName = \"AirPressurization\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirPressurizationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceFireSafetyRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceFireSafetyRequirements);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceHeaterPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceHeaterPHistory = new PropertySetDescription();\r\n         propertySetSpaceHeaterPHistory.Name = \"Pset_SpaceHeaterPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceHeaterPHistory\"))\r\n         {\r\n            propertySetSpaceHeaterPHistory.EntityTypes.Add(IFCEntityType.IfcSpaceHeater);\r\n            propertySetSpaceHeaterPHistory.ObjectType = \"IfcSpaceHeater\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.FractionRadiantHeatTransfer\", \"FractionRadiantHeatTransfer\");\r\n            ifcPSE.PropertyName = \"FractionRadiantHeatTransfer\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fraction Radiant Heat Transfer\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"放射熱移動フラクション\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FractionRadiantHeatTransferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.FractionConvectiveHeatTransfer\", \"FractionConvectiveHeatTransfer\");\r\n            ifcPSE.PropertyName = \"FractionConvectiveHeatTransfer\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fraction Convective Heat Transfer\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"対流熱移動フラクション\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FractionConvectiveHeatTransferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.Effectiveness\", \"Effectiveness\");\r\n            ifcPSE.PropertyName = \"Effectiveness\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Effectiveness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"効率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.SurfaceTemperature\", \"SurfaceTemperature\");\r\n            ifcPSE.PropertyName = \"SurfaceTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Surface Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"表面温度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.SpaceAirTemperature\", \"SpaceAirTemperature\");\r\n            ifcPSE.PropertyName = \"SpaceAirTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Space Air Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"室温\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceAirTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.SpaceMeanRadiantTemperature\", \"SpaceMeanRadiantTemperature\");\r\n            ifcPSE.PropertyName = \"SpaceMeanRadiantTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Space Mean Radiant Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"室平均放射温度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceMeanRadiantTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.AuxiliaryEnergySourceConsumption\", \"AuxiliaryEnergySourceConsumption\");\r\n            ifcPSE.PropertyName = \"AuxiliaryEnergySourceConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Auxiliary Energy Source Consumption\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"補助エネルギー源使用量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AuxiliaryEnergySourceConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.UACurve\", \"UACurve\");\r\n            ifcPSE.PropertyName = \"UACurve\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"UACurve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"UA曲線\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UACurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.OutputCapacityCurve\", \"OutputCapacityCurve\");\r\n            ifcPSE.PropertyName = \"OutputCapacityCurve\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Output Capacity Curve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"部分的アウトプット能力曲線\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutputCapacityCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.AirResistanceCurve\", \"AirResistanceCurve\");\r\n            ifcPSE.PropertyName = \"AirResistanceCurve\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Resistance Curve\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"空気抵抗曲線\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirResistanceCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.Exponent\", \"Exponent\");\r\n            ifcPSE.PropertyName = \"Exponent\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Exponent\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"指数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExponentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.HeatOutputRate\", \"HeatOutputRate\");\r\n            ifcPSE.PropertyName = \"HeatOutputRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heat Output Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱出力比\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatOutputRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceHeaterPHistory\"))\r\n         {\r\n            propertySetSpaceHeaterPHistory.EntityTypes.Add(IFCEntityType.IfcSpaceHeater);\r\n            propertySetSpaceHeaterPHistory.ObjectType = \"IfcSpaceHeater\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.FractionRadiantHeatTransfer\", \"FractionRadiantHeatTransfer\");\r\n            ifcPSE.PropertyName = \"FractionRadiantHeatTransfer\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FractionRadiantHeatTransferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.FractionConvectiveHeatTransfer\", \"FractionConvectiveHeatTransfer\");\r\n            ifcPSE.PropertyName = \"FractionConvectiveHeatTransfer\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FractionConvectiveHeatTransferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.Effectiveness\", \"Effectiveness\");\r\n            ifcPSE.PropertyName = \"Effectiveness\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.SurfaceTemperature\", \"SurfaceTemperature\");\r\n            ifcPSE.PropertyName = \"SurfaceTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.SpaceAirTemperature\", \"SpaceAirTemperature\");\r\n            ifcPSE.PropertyName = \"SpaceAirTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceAirTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.SpaceMeanRadiantTemperature\", \"SpaceMeanRadiantTemperature\");\r\n            ifcPSE.PropertyName = \"SpaceMeanRadiantTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceMeanRadiantTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.AuxiliaryEnergySourceConsumption\", \"AuxiliaryEnergySourceConsumption\");\r\n            ifcPSE.PropertyName = \"AuxiliaryEnergySourceConsumption\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AuxiliaryEnergySourceConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.UACurve\", \"UACurve\");\r\n            ifcPSE.PropertyName = \"UACurve\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UACurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.OutputCapacityCurve\", \"OutputCapacityCurve\");\r\n            ifcPSE.PropertyName = \"OutputCapacityCurve\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutputCapacityCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.AirResistanceCurve\", \"AirResistanceCurve\");\r\n            ifcPSE.PropertyName = \"AirResistanceCurve\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirResistanceCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.CharacteristicExponent\", \"CharacteristicExponent\");\r\n            ifcPSE.PropertyName = \"CharacteristicExponent\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CharacteristicExponentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistory.HeatOutputRate\", \"HeatOutputRate\");\r\n            ifcPSE.PropertyName = \"HeatOutputRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatOutputRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceHeaterPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceHeaterPHistoryCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceHeaterPHistoryCommon = new PropertySetDescription();\r\n         propertySetSpaceHeaterPHistoryCommon.Name = \"Pset_SpaceHeaterPHistoryCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceHeaterPHistoryCommon\"))\r\n         {\r\n            propertySetSpaceHeaterPHistoryCommon.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.FractionRadiantHeatTransfer\", \"FractionRadiantHeatTransfer\");\r\n            ifcPSE.PropertyName = \"FractionRadiantHeatTransfer\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FractionRadiantHeatTransferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.FractionConvectiveHeatTransfer\", \"FractionConvectiveHeatTransfer\");\r\n            ifcPSE.PropertyName = \"FractionConvectiveHeatTransfer\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FractionConvectiveHeatTransferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.Effectiveness\", \"Effectiveness\");\r\n            ifcPSE.PropertyName = \"Effectiveness\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.SurfaceTemperature\", \"SurfaceTemperature\");\r\n            ifcPSE.PropertyName = \"SurfaceTemperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.SpaceAirTemperature\", \"SpaceAirTemperature\");\r\n            ifcPSE.PropertyName = \"SpaceAirTemperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceAirTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.SpaceMeanRadiantTemperature\", \"SpaceMeanRadiantTemperature\");\r\n            ifcPSE.PropertyName = \"SpaceMeanRadiantTemperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceMeanRadiantTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.AuxiliaryEnergySourceConsumption\", \"AuxiliaryEnergySourceConsumption\");\r\n            ifcPSE.PropertyName = \"AuxiliaryEnergySourceConsumption\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AuxiliaryEnergySourceConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.UACurve\", \"UACurve\");\r\n            ifcPSE.PropertyName = \"UACurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UACurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.OutputCapacityCurve\", \"OutputCapacityCurve\");\r\n            ifcPSE.PropertyName = \"OutputCapacityCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutputCapacityCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.AirResistanceCurve\", \"AirResistanceCurve\");\r\n            ifcPSE.PropertyName = \"AirResistanceCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirResistanceCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.Exponent\", \"Exponent\");\r\n            ifcPSE.PropertyName = \"Exponent\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExponentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.HeatOutputRate\", \"HeatOutputRate\");\r\n            ifcPSE.PropertyName = \"HeatOutputRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatOutputRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceHeaterPHistoryCommon\"))\r\n         {\r\n            propertySetSpaceHeaterPHistoryCommon.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.FractionRadiantHeatTransfer\", \"FractionRadiantHeatTransfer\");\r\n            ifcPSE.PropertyName = \"FractionRadiantHeatTransfer\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FractionRadiantHeatTransferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.FractionConvectiveHeatTransfer\", \"FractionConvectiveHeatTransfer\");\r\n            ifcPSE.PropertyName = \"FractionConvectiveHeatTransfer\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FractionConvectiveHeatTransferCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.Effectiveness\", \"Effectiveness\");\r\n            ifcPSE.PropertyName = \"Effectiveness\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectivenessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.SurfaceTemperature\", \"SurfaceTemperature\");\r\n            ifcPSE.PropertyName = \"SurfaceTemperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.SpaceAirTemperature\", \"SpaceAirTemperature\");\r\n            ifcPSE.PropertyName = \"SpaceAirTemperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceAirTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.SpaceMeanRadiantTemperature\", \"SpaceMeanRadiantTemperature\");\r\n            ifcPSE.PropertyName = \"SpaceMeanRadiantTemperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceMeanRadiantTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.AuxiliaryEnergySourceConsumption\", \"AuxiliaryEnergySourceConsumption\");\r\n            ifcPSE.PropertyName = \"AuxiliaryEnergySourceConsumption\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AuxiliaryEnergySourceConsumptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.UACurve\", \"UACurve\");\r\n            ifcPSE.PropertyName = \"UACurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UACurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.OutputCapacityCurve\", \"OutputCapacityCurve\");\r\n            ifcPSE.PropertyName = \"OutputCapacityCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutputCapacityCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.AirResistanceCurve\", \"AirResistanceCurve\");\r\n            ifcPSE.PropertyName = \"AirResistanceCurve\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirResistanceCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.Exponent\", \"Exponent\");\r\n            ifcPSE.PropertyName = \"Exponent\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExponentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterPHistoryCommon.HeatOutputRate\", \"HeatOutputRate\");\r\n            ifcPSE.PropertyName = \"HeatOutputRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatOutputRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterPHistoryCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceHeaterPHistoryCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceHeaterTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceHeaterTypeCommon = new PropertySetDescription();\r\n         propertySetSpaceHeaterTypeCommon.Name = \"Pset_SpaceHeaterTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceHeaterTypeCommon\"))\r\n         {\r\n            propertySetSpaceHeaterTypeCommon.EntityTypes.Add(IFCEntityType.IfcSpaceHeaterType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.TemperatureClassification\", \"TemperatureClassification\");\r\n            ifcPSE.PropertyName = \"TemperatureClassification\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_SpaceHeaterTemperatureClassification);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureClassificationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.HeatingSource\", \"HeatingSource\");\r\n            ifcPSE.PropertyName = \"HeatingSource\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_HeatingSource);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingSourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.BodyMass\", \"BodyMass\");\r\n            ifcPSE.PropertyName = \"BodyMass\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyMassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.ThermalMassHeatCapacity\", \"ThermalMassHeatCapacity\");\r\n            ifcPSE.PropertyName = \"ThermalMassHeatCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalMassHeatCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.OutputCapacity\", \"OutputCapacity\");\r\n            ifcPSE.PropertyName = \"OutputCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutputCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.ThermalEfficiency\", \"ThermalEfficiency\");\r\n            ifcPSE.PropertyName = \"ThermalEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceHeaterTypeCommon\"))\r\n         {\r\n            propertySetSpaceHeaterTypeCommon.EntityTypes.Add(IFCEntityType.IfcSpaceHeaterType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.TemperatureClassification\", \"TemperatureClassification\");\r\n            ifcPSE.PropertyName = \"TemperatureClassification\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_SpaceHeaterTemperatureClassification);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureClassificationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.HeatingSource\", \"HeatingSource\");\r\n            ifcPSE.PropertyName = \"HeatingSource\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_HeatingSource);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingSourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.BodyMass\", \"BodyMass\");\r\n            ifcPSE.PropertyName = \"BodyMass\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyMassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.ThermalMassHeatCapacity\", \"ThermalMassHeatCapacity\");\r\n            ifcPSE.PropertyName = \"ThermalMassHeatCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalMassHeatCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.OutputCapacity\", \"OutputCapacity\");\r\n            ifcPSE.PropertyName = \"OutputCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutputCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.ThermalEfficiency\", \"ThermalEfficiency\");\r\n            ifcPSE.PropertyName = \"ThermalEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceHeaterTypeCommon\"))\r\n         {\r\n            propertySetSpaceHeaterTypeCommon.EntityTypes.Add(IFCEntityType.IfcSpaceHeater);\r\n            propertySetSpaceHeaterTypeCommon.ObjectType = \"IfcSpaceHeater\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.PlacementType\", \"PlacementType\");\r\n            ifcPSE.PropertyName = \"PlacementType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SpaceHeaterPlacementType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Placement Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"プレースメントタイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlacementTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.TemperatureClassification\", \"TemperatureClassification\");\r\n            ifcPSE.PropertyName = \"TemperatureClassification\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SpaceHeaterTemperatureClassification);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature Classification\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"温度分類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureClassificationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.HeatTransferDimension\", \"HeatTransferDimension\");\r\n            ifcPSE.PropertyName = \"HeatTransferDimension\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SpaceHeaterHeatTransferDimension);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heat Transfer Dimension\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱伝達値\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatTransferDimensionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.HeatTransferMedium\", \"HeatTransferMedium\");\r\n            ifcPSE.PropertyName = \"HeatTransferMedium\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_HeatTransferMedium);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heat Transfer Medium\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱媒体\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatTransferMediumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.EnergySource\", \"EnergySource\");\r\n            ifcPSE.PropertyName = \"EnergySource\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_EnergySource);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Energy Source\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"エネルギー源\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergySourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.BodyMass\", \"BodyMass\");\r\n            ifcPSE.PropertyName = \"BodyMass\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Body Mass\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"本体重量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyMassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.ThermalMassHeatCapacity\", \"ThermalMassHeatCapacity\");\r\n            ifcPSE.PropertyName = \"ThermalMassHeatCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Mass Heat Capacity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"保有熱容量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalMassHeatCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.OutputCapacity\", \"OutputCapacity\");\r\n            ifcPSE.PropertyName = \"OutputCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Output Capacity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"出力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutputCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.ThermalEfficiency\", \"ThermalEfficiency\");\r\n            ifcPSE.PropertyName = \"ThermalEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱効率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.NumberOfPanels\", \"NumberOfPanels\");\r\n            ifcPSE.PropertyName = \"NumberOfPanels\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Panels\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"パネルの数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPanelsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.NumberOfSections\", \"NumberOfSections\");\r\n            ifcPSE.PropertyName = \"NumberOfSections\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Sections\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"セクションの数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSectionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceHeaterTypeCommon\"))\r\n         {\r\n            propertySetSpaceHeaterTypeCommon.EntityTypes.Add(IFCEntityType.IfcSpaceHeater);\r\n            propertySetSpaceHeaterTypeCommon.EntityTypes.Add(IFCEntityType.IfcSpaceHeaterType);\r\n            propertySetSpaceHeaterTypeCommon.ObjectType = \"IfcSpaceHeater\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.SpaceHeaterPlacement\", \"SpaceHeaterPlacement\");\r\n            ifcPSE.PropertyName = \"SpaceHeaterPlacement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SpaceHeaterPlacementType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceHeaterPlacementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.TemperatureClassification\", \"TemperatureClassification\");\r\n            ifcPSE.PropertyName = \"TemperatureClassification\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SpaceHeaterTemperatureClassification);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureClassificationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.HeatTransferDimension\", \"HeatTransferDimension\");\r\n            ifcPSE.PropertyName = \"HeatTransferDimension\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SpaceHeaterHeatTransferDimension);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatTransferDimensionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.HeatTransferMedium\", \"HeatTransferMedium\");\r\n            ifcPSE.PropertyName = \"HeatTransferMedium\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_HeatTransferMedium);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatTransferMediumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.EnergySource\", \"EnergySource\");\r\n            ifcPSE.PropertyName = \"EnergySource\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_EnergySource);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EnergySourceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.BodyMass\", \"BodyMass\");\r\n            ifcPSE.PropertyName = \"BodyMass\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyMassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.ThermalMassHeatCapacity\", \"ThermalMassHeatCapacity\");\r\n            ifcPSE.PropertyName = \"ThermalMassHeatCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalMassHeatCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.OutputCapacity\", \"OutputCapacity\");\r\n            ifcPSE.PropertyName = \"OutputCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutputCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.ThermalEfficiency\", \"ThermalEfficiency\");\r\n            ifcPSE.PropertyName = \"ThermalEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.NumberOfPanels\", \"NumberOfPanels\");\r\n            ifcPSE.PropertyName = \"NumberOfPanels\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPanelsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeCommon.NumberOfSections\", \"NumberOfSections\");\r\n            ifcPSE.PropertyName = \"NumberOfSections\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSectionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceHeaterTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceHeaterTypeConvector(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceHeaterTypeConvector = new PropertySetDescription();\r\n         propertySetSpaceHeaterTypeConvector.Name = \"Pset_SpaceHeaterTypeConvector\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceHeaterTypeConvector\"))\r\n         {\r\n            propertySetSpaceHeaterTypeConvector.EntityTypes.Add(IFCEntityType.IfcSpaceHeater);\r\n            propertySetSpaceHeaterTypeConvector.ObjectType = \"IfcSpaceHeater\";\r\n            propertySetSpaceHeaterTypeConvector.PredefinedType = \"CONVECTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeConvector.ConvectorType\", \"ConvectorType\");\r\n            ifcPSE.PropertyName = \"ConvectorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SpaceHeaterConvectorType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Convector Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"対流タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConvectorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeConvector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceHeaterTypeConvector\"))\r\n         {\r\n            propertySetSpaceHeaterTypeConvector.EntityTypes.Add(IFCEntityType.IfcSpaceHeater);\r\n            propertySetSpaceHeaterTypeConvector.EntityTypes.Add(IFCEntityType.IfcSpaceHeaterType);\r\n            propertySetSpaceHeaterTypeConvector.ObjectType = \"IfcSpaceHeater\";\r\n            propertySetSpaceHeaterTypeConvector.PredefinedType = \"CONVECTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeConvector.ConvectorType\", \"ConvectorType\");\r\n            ifcPSE.PropertyName = \"ConvectorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SpaceHeaterConvectorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ConvectorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeConvector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceHeaterTypeConvector);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceHeaterTypeHydronic(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceHeaterTypeHydronic = new PropertySetDescription();\r\n         propertySetSpaceHeaterTypeHydronic.Name = \"Pset_SpaceHeaterTypeHydronic\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceHeaterTypeHydronic\"))\r\n         {\r\n            propertySetSpaceHeaterTypeHydronic.EntityTypes.Add(IFCEntityType.IfcSpaceHeaterType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeHydronic.TubingLength\", \"TubingLength\");\r\n            ifcPSE.PropertyName = \"TubingLength\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TubingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeHydronic.WaterContent\", \"WaterContent\");\r\n            ifcPSE.PropertyName = \"WaterContent\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeHydronic.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceHeaterTypeHydronic\"))\r\n         {\r\n            propertySetSpaceHeaterTypeHydronic.EntityTypes.Add(IFCEntityType.IfcSpaceHeaterType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeHydronic.TubingLength\", \"TubingLength\");\r\n            ifcPSE.PropertyName = \"TubingLength\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TubingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeHydronic.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeHydronic.WaterContent\", \"WaterContent\");\r\n            ifcPSE.PropertyName = \"WaterContent\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeHydronic.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceHeaterTypeHydronic);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceHeaterTypeRadiator(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceHeaterTypeRadiator = new PropertySetDescription();\r\n         propertySetSpaceHeaterTypeRadiator.Name = \"Pset_SpaceHeaterTypeRadiator\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceHeaterTypeRadiator\"))\r\n         {\r\n            propertySetSpaceHeaterTypeRadiator.EntityTypes.Add(IFCEntityType.IfcSpaceHeater);\r\n            propertySetSpaceHeaterTypeRadiator.ObjectType = \"IfcSpaceHeater\";\r\n            propertySetSpaceHeaterTypeRadiator.PredefinedType = \"RADIATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeRadiator.RadiatorType\", \"RadiatorType\");\r\n            ifcPSE.PropertyName = \"RadiatorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SpaceHeaterRadiatorType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Radiator Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ラジエータータイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RadiatorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeRadiator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeRadiator.TubingLength\", \"TubingLength\");\r\n            ifcPSE.PropertyName = \"TubingLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tubing Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"チューブの長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TubingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeRadiator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeRadiator.WaterContent\", \"WaterContent\");\r\n            ifcPSE.PropertyName = \"WaterContent\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water Content\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水含量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeRadiator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceHeaterTypeRadiator\"))\r\n         {\r\n            propertySetSpaceHeaterTypeRadiator.EntityTypes.Add(IFCEntityType.IfcSpaceHeater);\r\n            propertySetSpaceHeaterTypeRadiator.EntityTypes.Add(IFCEntityType.IfcSpaceHeaterType);\r\n            propertySetSpaceHeaterTypeRadiator.ObjectType = \"IfcSpaceHeater\";\r\n            propertySetSpaceHeaterTypeRadiator.PredefinedType = \"RADIATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeRadiator.RadiatorType\", \"RadiatorType\");\r\n            ifcPSE.PropertyName = \"RadiatorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SpaceHeaterRadiatorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RadiatorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeRadiator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeRadiator.TubingLength\", \"TubingLength\");\r\n            ifcPSE.PropertyName = \"TubingLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TubingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeRadiator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHeaterTypeRadiator.WaterContent\", \"WaterContent\");\r\n            ifcPSE.PropertyName = \"WaterContent\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHeaterTypeRadiator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceHeaterTypeRadiator);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceHVACDesign(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceHVACDesign = new PropertySetDescription();\r\n         propertySetSpaceHVACDesign.Name = \"Pset_SpaceHVACDesign\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceHVACDesign\"))\r\n         {\r\n            propertySetSpaceHVACDesign.EntityTypes.Add(IFCEntityType.IfcSpatialElement);\r\n            propertySetSpaceHVACDesign.EntityTypes.Add(IFCEntityType.IfcSpatialZone);\r\n            propertySetSpaceHVACDesign.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            propertySetSpaceHVACDesign.EntityTypes.Add(IFCEntityType.IfcSpatialElementType);\r\n            propertySetSpaceHVACDesign.EntityTypes.Add(IFCEntityType.IfcSpatialZoneType);\r\n            propertySetSpaceHVACDesign.ObjectType = \"IfcSpatialElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.TemperatureSetPoint\", \"TemperatureSetPoint\");\r\n            ifcPSE.PropertyName = \"TemperatureSetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.TemperatureMax\", \"TemperatureMax\");\r\n            ifcPSE.PropertyName = \"TemperatureMax\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureMaxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.TemperatureMin\", \"TemperatureMin\");\r\n            ifcPSE.PropertyName = \"TemperatureMin\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.TemperatureSummerMax\", \"TemperatureSummerMax\");\r\n            ifcPSE.PropertyName = \"TemperatureSummerMax\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureSummerMaxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.TemperatureSummerMin\", \"TemperatureSummerMin\");\r\n            ifcPSE.PropertyName = \"TemperatureSummerMin\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureSummerMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.TemperatureWinterMax\", \"TemperatureWinterMax\");\r\n            ifcPSE.PropertyName = \"TemperatureWinterMax\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureWinterMaxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.TemperatureWinterMin\", \"TemperatureWinterMin\");\r\n            ifcPSE.PropertyName = \"TemperatureWinterMin\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureWinterMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.HumiditySetPoint\", \"HumiditySetPoint\");\r\n            ifcPSE.PropertyName = \"HumiditySetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HumiditySetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.HumidityMax\", \"HumidityMax\");\r\n            ifcPSE.PropertyName = \"HumidityMax\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HumidityMaxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.HumidityMin\", \"HumidityMin\");\r\n            ifcPSE.PropertyName = \"HumidityMin\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HumidityMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.HumiditySummer\", \"HumiditySummer\");\r\n            ifcPSE.PropertyName = \"HumiditySummer\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HumiditySummerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.HumidityWinter\", \"HumidityWinter\");\r\n            ifcPSE.PropertyName = \"HumidityWinter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HumidityWinterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.DiscontinuedHeating\", \"DiscontinuedHeating\");\r\n            ifcPSE.PropertyName = \"DiscontinuedHeating\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiscontinuedHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.NaturalVentilation\", \"NaturalVentilation\");\r\n            ifcPSE.PropertyName = \"NaturalVentilation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NaturalVentilationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.NaturalVentilationRate\", \"NaturalVentilationRate\");\r\n            ifcPSE.PropertyName = \"NaturalVentilationRate\";\r\n            ifcPSE.PropertyType = PropertyType.Numeric;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NaturalVentilationRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.MechanicalVentilation\", \"MechanicalVentilation\");\r\n            ifcPSE.PropertyName = \"MechanicalVentilation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalVentilationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.MechanicalVentilationRate\", \"MechanicalVentilationRate\");\r\n            ifcPSE.PropertyName = \"MechanicalVentilationRate\";\r\n            ifcPSE.PropertyType = PropertyType.Numeric;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalVentilationRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.AirConditioning\", \"AirConditioning\");\r\n            ifcPSE.PropertyName = \"AirConditioning\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirConditioningCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.AirConditioningCentral\", \"AirConditioningCentral\");\r\n            ifcPSE.PropertyName = \"AirConditioningCentral\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirConditioningCentralCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceHVACDesign.AirHandlingName\", \"AirHandlingName\");\r\n            ifcPSE.PropertyName = \"AirHandlingName\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirHandlingNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceHVACDesign.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceHVACDesign);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceLightingDesign(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceLightingDesign = new PropertySetDescription();\r\n         propertySetSpaceLightingDesign.Name = \"Pset_SpaceLightingDesign\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceLightingDesign\"))\r\n         {\r\n            propertySetSpaceLightingDesign.EntityTypes.Add(IFCEntityType.IfcSpatialElement);\r\n            propertySetSpaceLightingDesign.EntityTypes.Add(IFCEntityType.IfcSpatialZone);\r\n            propertySetSpaceLightingDesign.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            propertySetSpaceLightingDesign.EntityTypes.Add(IFCEntityType.IfcSpatialElementType);\r\n            propertySetSpaceLightingDesign.EntityTypes.Add(IFCEntityType.IfcSpatialZoneType);\r\n            propertySetSpaceLightingDesign.ObjectType = \"IfcSpatialElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceLightingDesign.ArtificialLighting\", \"ArtificialLighting\");\r\n            ifcPSE.PropertyName = \"ArtificialLighting\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArtificialLightingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceLightingDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceLightingDesign.Illuminance\", \"Illuminance\");\r\n            ifcPSE.PropertyName = \"Illuminance\";\r\n            ifcPSE.PropertyType = PropertyType.Illuminance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IlluminanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceLightingDesign.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceLightingDesign);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceLightingRequirements(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceLightingRequirements = new PropertySetDescription();\r\n         propertySetSpaceLightingRequirements.Name = \"Pset_SpaceLightingRequirements\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceLightingRequirements\"))\r\n         {\r\n            propertySetSpaceLightingRequirements.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceLightingRequirements.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceLightingRequirements.ArtificialLighting\", \"ArtificialLighting\");\r\n            ifcPSE.PropertyName = \"ArtificialLighting\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArtificialLightingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceLightingRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceLightingRequirements.Illuminance\", \"Illuminance\");\r\n            ifcPSE.PropertyName = \"Illuminance\";\r\n            ifcPSE.PropertyType = PropertyType.Illuminance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IlluminanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceLightingRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceLightingRequirements\"))\r\n         {\r\n            propertySetSpaceLightingRequirements.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceLightingRequirements.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceLightingRequirements.ArtificialLighting\", \"ArtificialLighting\");\r\n            ifcPSE.PropertyName = \"ArtificialLighting\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArtificialLightingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceLightingRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceLightingRequirements.Illuminance\", \"Illuminance\");\r\n            ifcPSE.PropertyName = \"Illuminance\";\r\n            ifcPSE.PropertyType = PropertyType.Illuminance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IlluminanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceLightingRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceLightingRequirements\"))\r\n         {\r\n            propertySetSpaceLightingRequirements.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceLightingRequirements.EntityTypes.Add(IFCEntityType.IfcSpatialZone);\r\n            propertySetSpaceLightingRequirements.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            propertySetSpaceLightingRequirements.ObjectType = \"IfcSpace, IfcSpatialZone, IfcZone\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceLightingRequirements.ArtificialLighting\", \"ArtificialLighting\");\r\n            ifcPSE.PropertyName = \"ArtificialLighting\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"künstliche Beleuchtung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Artificial Lighting\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EclairageArtificiel\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"人工照明\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"인공 조명\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ArtificialLightingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceLightingRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceLightingRequirements.Illuminance\", \"Illuminance\");\r\n            ifcPSE.PropertyName = \"Illuminance\";\r\n            ifcPSE.PropertyType = PropertyType.Illuminance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Beleuchtungsstärke\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Illuminance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EclairementAttendu\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"照度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IlluminanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceLightingRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceLightingRequirements);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceOccupancyRequirements(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceOccupancyRequirements = new PropertySetDescription();\r\n         propertySetSpaceOccupancyRequirements.Name = \"Pset_SpaceOccupancyRequirements\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceOccupancyRequirements\"))\r\n         {\r\n            propertySetSpaceOccupancyRequirements.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceOccupancyRequirements.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.OccupancyType\", \"OccupancyType\");\r\n            ifcPSE.PropertyName = \"OccupancyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.OccupancyNumber\", \"OccupancyNumber\");\r\n            ifcPSE.PropertyName = \"OccupancyNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.OccupancyNumberPeak\", \"OccupancyNumberPeak\");\r\n            ifcPSE.PropertyName = \"OccupancyNumberPeak\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyNumberPeakCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.OccupancyTimePerDay\", \"OccupancyTimePerDay\");\r\n            ifcPSE.PropertyName = \"OccupancyTimePerDay\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyTimePerDayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.AreaPerOccupant\", \"AreaPerOccupant\");\r\n            ifcPSE.PropertyName = \"AreaPerOccupant\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaPerOccupantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.MinimumHeadroom\", \"MinimumHeadroom\");\r\n            ifcPSE.PropertyName = \"MinimumHeadroom\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumHeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.IsOutlookDesirable\", \"IsOutlookDesirable\");\r\n            ifcPSE.PropertyName = \"IsOutlookDesirable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsOutlookDesirableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceOccupancyRequirements\"))\r\n         {\r\n            propertySetSpaceOccupancyRequirements.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceOccupancyRequirements.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.OccupancyType\", \"OccupancyType\");\r\n            ifcPSE.PropertyName = \"OccupancyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.OccupancyNumber\", \"OccupancyNumber\");\r\n            ifcPSE.PropertyName = \"OccupancyNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.OccupancyNumberPeak\", \"OccupancyNumberPeak\");\r\n            ifcPSE.PropertyName = \"OccupancyNumberPeak\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyNumberPeakCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.OccupancyTimePerDay\", \"OccupancyTimePerDay\");\r\n            ifcPSE.PropertyName = \"OccupancyTimePerDay\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyTimePerDayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.AreaPerOccupant\", \"AreaPerOccupant\");\r\n            ifcPSE.PropertyName = \"AreaPerOccupant\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaPerOccupantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.MinimumHeadroom\", \"MinimumHeadroom\");\r\n            ifcPSE.PropertyName = \"MinimumHeadroom\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumHeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.IsOutlookDesirable\", \"IsOutlookDesirable\");\r\n            ifcPSE.PropertyName = \"IsOutlookDesirable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsOutlookDesirableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceOccupancyRequirements\"))\r\n         {\r\n            propertySetSpaceOccupancyRequirements.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceOccupancyRequirements.EntityTypes.Add(IFCEntityType.IfcSpatialZone);\r\n            propertySetSpaceOccupancyRequirements.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            propertySetSpaceOccupancyRequirements.ObjectType = \"IfcSpace, IfcSpatialZone, IfcZone\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.OccupancyType\", \"OccupancyType\");\r\n            ifcPSE.PropertyName = \"OccupancyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nutzungsart\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Occupancy Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TypeOccupation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"用途\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.OccupancyNumber\", \"OccupancyNumber\");\r\n            ifcPSE.PropertyName = \"OccupancyNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Belegung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Occupancy Number\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"NombreOccupants\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"利用人数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.OccupancyNumberPeak\", \"OccupancyNumberPeak\");\r\n            ifcPSE.PropertyName = \"OccupancyNumberPeak\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Maximale Belegung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Occupancy Number Peak\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"NombreOccupantsMax\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"利用人数ピーク\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyNumberPeakCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.OccupancyTimePerDay\", \"OccupancyTimePerDay\");\r\n            ifcPSE.PropertyName = \"OccupancyTimePerDay\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Belegungszeit pro Tag\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Occupancy Time Per Day\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"DureeOccupationJour\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"日毎利用時間\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyTimePerDayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.AreaPerOccupant\", \"AreaPerOccupant\");\r\n            ifcPSE.PropertyName = \"AreaPerOccupant\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Fläche pro Nutzer\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Area Per Occupant\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"SurfaceParOccupant\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"利用者毎面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaPerOccupantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.MinimumHeadroom\", \"MinimumHeadroom\");\r\n            ifcPSE.PropertyName = \"MinimumHeadroom\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Lichte Höhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Minimum Headroom\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"HauteurPassageMinimale\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最小頭上あき高\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumHeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.IsOutlookDesirable\", \"IsOutlookDesirable\");\r\n            ifcPSE.PropertyName = \"IsOutlookDesirable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Ausblick erwünscht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Outlook Desirable\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"VueExterieurSouhaitable\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"眺望の善し悪し\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsOutlookDesirableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceOccupancyRequirements\"))\r\n         {\r\n            propertySetSpaceOccupancyRequirements.EntityTypes.Add(IFCEntityType.IfcSpatialElement);\r\n            propertySetSpaceOccupancyRequirements.EntityTypes.Add(IFCEntityType.IfcSpatialZone);\r\n            propertySetSpaceOccupancyRequirements.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            propertySetSpaceOccupancyRequirements.EntityTypes.Add(IFCEntityType.IfcSpatialElementType);\r\n            propertySetSpaceOccupancyRequirements.EntityTypes.Add(IFCEntityType.IfcSpatialZoneType);\r\n            propertySetSpaceOccupancyRequirements.ObjectType = \"IfcSpatialElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.OccupancyType\", \"OccupancyType\");\r\n            ifcPSE.PropertyName = \"OccupancyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.OccupancyNumber\", \"OccupancyNumber\");\r\n            ifcPSE.PropertyName = \"OccupancyNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.OccupancyNumberPeak\", \"OccupancyNumberPeak\");\r\n            ifcPSE.PropertyName = \"OccupancyNumberPeak\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyNumberPeakCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.OccupancyTimePerDay\", \"OccupancyTimePerDay\");\r\n            ifcPSE.PropertyName = \"OccupancyTimePerDay\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyTimePerDayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.AreaPerOccupant\", \"AreaPerOccupant\");\r\n            ifcPSE.PropertyName = \"AreaPerOccupant\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaPerOccupantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.MinimumHeadroom\", \"MinimumHeadroom\");\r\n            ifcPSE.PropertyName = \"MinimumHeadroom\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumHeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceOccupancyRequirements.IsOutlookDesirable\", \"IsOutlookDesirable\");\r\n            ifcPSE.PropertyName = \"IsOutlookDesirable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsOutlookDesirableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceOccupancyRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceOccupancyRequirements);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceParking(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceParking = new PropertySetDescription();\r\n         propertySetSpaceParking.Name = \"Pset_SpaceParking\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceParking\"))\r\n         {\r\n            propertySetSpaceParking.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceParking.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceParking.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceParking\"))\r\n         {\r\n            propertySetSpaceParking.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceParking.ObjectType = \"IfcSpace\";\r\n            propertySetSpaceParking.PredefinedType = \"Parking\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceParking.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceParking.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceParking.ParkingUse\", \"ParkingUse\");\r\n            ifcPSE.PropertyName = \"ParkingUse\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ParkingUseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceParking.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceParking.ParkingUnits\", \"ParkingUnits\");\r\n            ifcPSE.PropertyName = \"ParkingUnits\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ParkingUnitsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceParking.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceParking\"))\r\n         {\r\n            propertySetSpaceParking.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceParking.ObjectType = \"IfcSpace\";\r\n            propertySetSpaceParking.PredefinedType = \"PARKING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceParking.ParkingUse\", \"ParkingUse\");\r\n            ifcPSE.PropertyName = \"ParkingUse\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Parking Use\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"AccessibleHandicape\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"駐車場の用途\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ParkingUseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceParking.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceParking.ParkingUnits\", \"ParkingUnits\");\r\n            ifcPSE.PropertyName = \"ParkingUnits\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Parking Units\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TypeVehicule\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"一区画当たりの駐車台数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ParkingUnitsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceParking.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceParking.IsAisle\", \"IsAisle\");\r\n            ifcPSE.PropertyName = \"IsAisle\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Aisle\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"NombreUnites\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"通路か駐車スペースの判別\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsAisleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceParking.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceParking.IsOneWay\", \"IsOneWay\");\r\n            ifcPSE.PropertyName = \"IsOneWay\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is One Way\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Sens unique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"一方通行\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsOneWayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceParking.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceParking\"))\r\n         {\r\n            propertySetSpaceParking.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceParking.EntityTypes.Add(IFCEntityType.IfcSpaceType);\r\n            propertySetSpaceParking.ObjectType = \"IfcSpace\";\r\n            propertySetSpaceParking.PredefinedType = \"PARKING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceParking.ParkingUse\", \"ParkingUse\");\r\n            ifcPSE.PropertyName = \"ParkingUse\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ParkingUseCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceParking.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceParking.ParkingUnits\", \"ParkingUnits\");\r\n            ifcPSE.PropertyName = \"ParkingUnits\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ParkingUnitsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceParking.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceParking.IsAisle\", \"IsAisle\");\r\n            ifcPSE.PropertyName = \"IsAisle\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsAisleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceParking.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceParking.IsOneWay\", \"IsOneWay\");\r\n            ifcPSE.PropertyName = \"IsOneWay\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsOneWayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceParking.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceParking);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceParkingAisle(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceParkingAisle = new PropertySetDescription();\r\n         propertySetSpaceParkingAisle.Name = \"Pset_SpaceParkingAisle\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceParkingAisle\"))\r\n         {\r\n            propertySetSpaceParkingAisle.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceParkingAisle.IsOneWay\", \"IsOneWay\");\r\n            ifcPSE.PropertyName = \"IsOneWay\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsOneWayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceParkingAisle.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceParkingAisle\"))\r\n         {\r\n            propertySetSpaceParkingAisle.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceParkingAisle.ObjectType = \"IfcSpace\";\r\n            propertySetSpaceParkingAisle.PredefinedType = \"ParkingAisle\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceParkingAisle.IsOneWay\", \"IsOneWay\");\r\n            ifcPSE.PropertyName = \"IsOneWay\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsOneWayCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceParkingAisle.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceParkingAisle);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceProgramCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceProgramCommon = new PropertySetDescription();\r\n         propertySetSpaceProgramCommon.Name = \"Pset_SpaceProgramCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceProgramCommon\"))\r\n         {\r\n            propertySetSpaceProgramCommon.EntityTypes.Add(IFCEntityType.IfcSpaceProgram);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceProgramCommon.Location\", \"Location\");\r\n            ifcPSE.PropertyName = \"Location\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LocationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceProgramCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceProgramCommon.FunctionRequirement\", \"FunctionRequirement\");\r\n            ifcPSE.PropertyName = \"FunctionRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FunctionRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceProgramCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceProgramCommon.SecurityRequirement\", \"SecurityRequirement\");\r\n            ifcPSE.PropertyName = \"SecurityRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecurityRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceProgramCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceProgramCommon.PrivacyRequirement\", \"PrivacyRequirement\");\r\n            ifcPSE.PropertyName = \"PrivacyRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrivacyRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceProgramCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceProgramCommon.LightingRequirement\", \"LightingRequirement\");\r\n            ifcPSE.PropertyName = \"LightingRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceProgramCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceProgramCommon.FFETypeRequirement\", \"FFETypeRequirement\");\r\n            ifcPSE.PropertyName = \"FFETypeRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FFETypeRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceProgramCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceProgramCommon.EmployeeType\", \"EmployeeType\");\r\n            ifcPSE.PropertyName = \"EmployeeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EmployeeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceProgramCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceProgramCommon.OccupancyType\", \"OccupancyType\");\r\n            ifcPSE.PropertyName = \"OccupancyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceProgramCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceProgramCommon.OccupancyNumber\", \"OccupancyNumber\");\r\n            ifcPSE.PropertyName = \"OccupancyNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceProgramCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceProgramCommon\"))\r\n         {\r\n            propertySetSpaceProgramCommon.EntityTypes.Add(IFCEntityType.IfcSpaceProgram);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceProgramCommon.Location\", \"Location\");\r\n            ifcPSE.PropertyName = \"Location\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LocationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceProgramCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceProgramCommon.FunctionRequirement\", \"FunctionRequirement\");\r\n            ifcPSE.PropertyName = \"FunctionRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FunctionRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceProgramCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceProgramCommon.SecurityRequirement\", \"SecurityRequirement\");\r\n            ifcPSE.PropertyName = \"SecurityRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecurityRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceProgramCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceProgramCommon.PrivacyRequirement\", \"PrivacyRequirement\");\r\n            ifcPSE.PropertyName = \"PrivacyRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrivacyRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceProgramCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceProgramCommon.LightingRequirement\", \"LightingRequirement\");\r\n            ifcPSE.PropertyName = \"LightingRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceProgramCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceProgramCommon.FFETypeRequirement\", \"FFETypeRequirement\");\r\n            ifcPSE.PropertyName = \"FFETypeRequirement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FFETypeRequirementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceProgramCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceProgramCommon.EmployeeType\", \"EmployeeType\");\r\n            ifcPSE.PropertyName = \"EmployeeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EmployeeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceProgramCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceProgramCommon.OccupancyType\", \"OccupancyType\");\r\n            ifcPSE.PropertyName = \"OccupancyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceProgramCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceProgramCommon.OccupancyNumber\", \"OccupancyNumber\");\r\n            ifcPSE.PropertyName = \"OccupancyNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceProgramCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceProgramCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceThermalDesign(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceThermalDesign = new PropertySetDescription();\r\n         propertySetSpaceThermalDesign.Name = \"Pset_SpaceThermalDesign\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceThermalDesign\"))\r\n         {\r\n            propertySetSpaceThermalDesign.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.CoolingDesignAirflow\", \"CoolingDesignAirflow\");\r\n            ifcPSE.PropertyName = \"CoolingDesignAirflow\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingDesignAirflowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.HeatingDesignAirflow\", \"HeatingDesignAirflow\");\r\n            ifcPSE.PropertyName = \"HeatingDesignAirflow\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingDesignAirflowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.TotalSensibleHeatGain\", \"TotalSensibleHeatGain\");\r\n            ifcPSE.PropertyName = \"TotalSensibleHeatGain\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSensibleHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.TotalHeatGain\", \"TotalHeatGain\");\r\n            ifcPSE.PropertyName = \"TotalHeatGain\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.TotalHeatLoss\", \"TotalHeatLoss\");\r\n            ifcPSE.PropertyName = \"TotalHeatLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.CoolingDryBulb\", \"CoolingDryBulb\");\r\n            ifcPSE.PropertyName = \"CoolingDryBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingDryBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.CoolingRelativeHumidity\", \"CoolingRelativeHumidity\");\r\n            ifcPSE.PropertyName = \"CoolingRelativeHumidity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingRelativeHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.HeatingDryBulb\", \"HeatingDryBulb\");\r\n            ifcPSE.PropertyName = \"HeatingDryBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingDryBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.HeatingRelativeHumidity\", \"HeatingRelativeHumidity\");\r\n            ifcPSE.PropertyName = \"HeatingRelativeHumidity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingRelativeHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.VentilationAirFlowrate\", \"VentilationAirFlowrate\");\r\n            ifcPSE.PropertyName = \"VentilationAirFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationAirFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.ExhaustAirFlowrate\", \"ExhaustAirFlowrate\");\r\n            ifcPSE.PropertyName = \"ExhaustAirFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExhaustAirFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.CeilingRAPlenum\", \"CeilingRAPlenum\");\r\n            ifcPSE.PropertyName = \"CeilingRAPlenum\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CeilingRAPlenumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.BoundaryAreaHeatLoss\", \"BoundaryAreaHeatLoss\");\r\n            ifcPSE.PropertyName = \"BoundaryAreaHeatLoss\";\r\n            ifcPSE.PropertyType = PropertyType.HeatFluxDensity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoundaryAreaHeatLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceThermalDesign\"))\r\n         {\r\n            propertySetSpaceThermalDesign.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.CoolingDesignAirflow\", \"CoolingDesignAirflow\");\r\n            ifcPSE.PropertyName = \"CoolingDesignAirflow\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingDesignAirflowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.HeatingDesignAirflow\", \"HeatingDesignAirflow\");\r\n            ifcPSE.PropertyName = \"HeatingDesignAirflow\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingDesignAirflowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.TotalSensibleHeatGain\", \"TotalSensibleHeatGain\");\r\n            ifcPSE.PropertyName = \"TotalSensibleHeatGain\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSensibleHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.TotalHeatGain\", \"TotalHeatGain\");\r\n            ifcPSE.PropertyName = \"TotalHeatGain\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.TotalHeatLoss\", \"TotalHeatLoss\");\r\n            ifcPSE.PropertyName = \"TotalHeatLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.CoolingDryBulb\", \"CoolingDryBulb\");\r\n            ifcPSE.PropertyName = \"CoolingDryBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingDryBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.CoolingRelativeHumidity\", \"CoolingRelativeHumidity\");\r\n            ifcPSE.PropertyName = \"CoolingRelativeHumidity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingRelativeHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.HeatingDryBulb\", \"HeatingDryBulb\");\r\n            ifcPSE.PropertyName = \"HeatingDryBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingDryBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.HeatingRelativeHumidity\", \"HeatingRelativeHumidity\");\r\n            ifcPSE.PropertyName = \"HeatingRelativeHumidity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingRelativeHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.VentilationAirFlowrate\", \"VentilationAirFlowrate\");\r\n            ifcPSE.PropertyName = \"VentilationAirFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationAirFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.ExhaustAirFlowrate\", \"ExhaustAirFlowrate\");\r\n            ifcPSE.PropertyName = \"ExhaustAirFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExhaustAirFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.CeilingRAPlenum\", \"CeilingRAPlenum\");\r\n            ifcPSE.PropertyName = \"CeilingRAPlenum\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CeilingRAPlenumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.BoundaryAreaHeatLoss\", \"BoundaryAreaHeatLoss\");\r\n            ifcPSE.PropertyName = \"BoundaryAreaHeatLoss\";\r\n            ifcPSE.PropertyType = PropertyType.HeatFluxDensity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoundaryAreaHeatLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceThermalDesign\"))\r\n         {\r\n            propertySetSpaceThermalDesign.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceThermalDesign.ObjectType = \"IfcSpace\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.CoolingDesignAirflow\", \"CoolingDesignAirflow\");\r\n            ifcPSE.PropertyName = \"CoolingDesignAirflow\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cooling Design Airflow\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"冷房設計吸気量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingDesignAirflowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.HeatingDesignAirflow\", \"HeatingDesignAirflow\");\r\n            ifcPSE.PropertyName = \"HeatingDesignAirflow\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heating Design Airflow\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingDesignAirflowCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.TotalSensibleHeatGain\", \"TotalSensibleHeatGain\");\r\n            ifcPSE.PropertyName = \"TotalSensibleHeatGain\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Sensible Heat Gain\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"顕熱負荷の合計\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"현열 부하의 합계\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSensibleHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.TotalHeatGain\", \"TotalHeatGain\");\r\n            ifcPSE.PropertyName = \"TotalHeatGain\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Heat Gain\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱取得の合計\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"연 인수 금액\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatGainCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.TotalHeatLoss\", \"TotalHeatLoss\");\r\n            ifcPSE.PropertyName = \"TotalHeatLoss\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Heat Loss\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱ロスの合計\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"열 손실 합계\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.CoolingDryBulb\", \"CoolingDryBulb\");\r\n            ifcPSE.PropertyName = \"CoolingDryBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cooling Dry Bulb\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"冷房設計温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"냉방 설계온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingDryBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.CoolingRelativeHumidity\", \"CoolingRelativeHumidity\");\r\n            ifcPSE.PropertyName = \"CoolingRelativeHumidity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cooling Relative Humidity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"冷房設計相対湿度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"냉방 설계 상대습도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingRelativeHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.HeatingDryBulb\", \"HeatingDryBulb\");\r\n            ifcPSE.PropertyName = \"HeatingDryBulb\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heating Dry Bulb\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"暖房設計温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"난방 설계온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingDryBulbCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.HeatingRelativeHumidity\", \"HeatingRelativeHumidity\");\r\n            ifcPSE.PropertyName = \"HeatingRelativeHumidity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heating Relative Humidity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"暖房設計相対湿度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"난방 설계 상대습도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingRelativeHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.VentilationAirFlowrate\", \"VentilationAirFlowrate\");\r\n            ifcPSE.PropertyName = \"VentilationAirFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ventilation Air Flowrate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外気量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"외기량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationAirFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.ExhaustAirFlowrate\", \"ExhaustAirFlowrate\");\r\n            ifcPSE.PropertyName = \"ExhaustAirFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Exhaust Air Flowrate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"排気量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"배기량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExhaustAirFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.CeilingRAPlenum\", \"CeilingRAPlenum\");\r\n            ifcPSE.PropertyName = \"CeilingRAPlenum\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ceiling RAPlenum\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"天井裏還気\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"천장환원주의\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CeilingRAPlenumCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalDesign.BoundaryAreaHeatLoss\", \"BoundaryAreaHeatLoss\");\r\n            ifcPSE.PropertyName = \"BoundaryAreaHeatLoss\";\r\n            ifcPSE.PropertyType = PropertyType.HeatFluxDensity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Boundary Area Heat Loss\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"周辺関連設備の熱ロス\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"주변 관련 설비의 열 손실\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BoundaryAreaHeatLossCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalDesign.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceThermalDesign);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceThermalLoad(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceThermalLoad = new PropertySetDescription();\r\n         propertySetSpaceThermalLoad.Name = \"Pset_SpaceThermalLoad\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceThermalLoad\"))\r\n         {\r\n            propertySetSpaceThermalLoad.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceThermalLoad.ObjectType = \"IfcSpace\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.People\", \"People\");\r\n            ifcPSE.PropertyName = \"People\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"People\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"人員\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"인원\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PeopleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.Lighting\", \"Lighting\");\r\n            ifcPSE.PropertyName = \"Lighting\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lighting\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"照明\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조명\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.EquipmentSensible\", \"EquipmentSensible\");\r\n            ifcPSE.PropertyName = \"EquipmentSensible\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Equipment Sensible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"事務機器の顕熱\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"사무기기의 현열\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EquipmentSensibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.VentilationIndoorAir\", \"VentilationIndoorAir\");\r\n            ifcPSE.PropertyName = \"VentilationIndoorAir\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ventilation Indoor Air\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"室内の換気量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"실내 환기량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationIndoorAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.VentilationOutdoorAir\", \"VentilationOutdoorAir\");\r\n            ifcPSE.PropertyName = \"VentilationOutdoorAir\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ventilation Outdoor Air\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外気量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"외기량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationOutdoorAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.RecirculatedAir\", \"RecirculatedAir\");\r\n            ifcPSE.PropertyName = \"RecirculatedAir\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Recirculated Air\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"循環空気\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"순환공기\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RecirculatedAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.ExhaustAir\", \"ExhaustAir\");\r\n            ifcPSE.PropertyName = \"ExhaustAir\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Exhaust Air\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"排気\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"배기\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExhaustAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.AirExchangeRate\", \"AirExchangeRate\");\r\n            ifcPSE.PropertyName = \"AirExchangeRate\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Exchange Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"換気回数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"환기회수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirExchangeRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.DryBulbTemperature\", \"DryBulbTemperature\");\r\n            ifcPSE.PropertyName = \"DryBulbTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Dry Bulb Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"乾球温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"건구온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DryBulbTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.RelativeHumidity\", \"RelativeHumidity\");\r\n            ifcPSE.PropertyName = \"RelativeHumidity\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Relative Humidity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"相対湿度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"상대습도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RelativeHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.InfiltrationSensible\", \"InfiltrationSensible\");\r\n            ifcPSE.PropertyName = \"InfiltrationSensible\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Infiltration Sensible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"すき間風の顕熱\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"열취득 및 손실\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationSensibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.TotalSensibleLoad\", \"TotalSensibleLoad\");\r\n            ifcPSE.PropertyName = \"TotalSensibleLoad\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Sensible Load\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"顕熱負荷の合計\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"현열부하의 합계\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSensibleLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.TotalLatentLoad\", \"TotalLatentLoad\");\r\n            ifcPSE.PropertyName = \"TotalLatentLoad\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Latent Load\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"潜熱負荷の合計\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"잠열부하의 합계\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalLatentLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.TotalRadiantLoad\", \"TotalRadiantLoad\");\r\n            ifcPSE.PropertyName = \"TotalRadiantLoad\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Radiant Load\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"放射熱負荷の合計\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"복사열로드 합계\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalRadiantLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceThermalLoad\"))\r\n         {\r\n            propertySetSpaceThermalLoad.EntityTypes.Add(IFCEntityType.IfcSpatialElement);\r\n            propertySetSpaceThermalLoad.EntityTypes.Add(IFCEntityType.IfcSpatialElementType);\r\n            propertySetSpaceThermalLoad.ObjectType = \"IfcSpatialElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.People\", \"People\");\r\n            ifcPSE.PropertyName = \"People\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PeopleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.Lighting\", \"Lighting\");\r\n            ifcPSE.PropertyName = \"Lighting\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.EquipmentSensible\", \"EquipmentSensible\");\r\n            ifcPSE.PropertyName = \"EquipmentSensible\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EquipmentSensibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.VentilationIndoorAir\", \"VentilationIndoorAir\");\r\n            ifcPSE.PropertyName = \"VentilationIndoorAir\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationIndoorAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.VentilationOutdoorAir\", \"VentilationOutdoorAir\");\r\n            ifcPSE.PropertyName = \"VentilationOutdoorAir\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationOutdoorAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.RecirculatedAir\", \"RecirculatedAir\");\r\n            ifcPSE.PropertyName = \"RecirculatedAir\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RecirculatedAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.ExhaustAir\", \"ExhaustAir\");\r\n            ifcPSE.PropertyName = \"ExhaustAir\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExhaustAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.AirExchangeRate\", \"AirExchangeRate\");\r\n            ifcPSE.PropertyName = \"AirExchangeRate\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirExchangeRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.DryBulbTemperature\", \"DryBulbTemperature\");\r\n            ifcPSE.PropertyName = \"DryBulbTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DryBulbTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.RelativeHumidity\", \"RelativeHumidity\");\r\n            ifcPSE.PropertyName = \"RelativeHumidity\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RelativeHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.InfiltrationSensible\", \"InfiltrationSensible\");\r\n            ifcPSE.PropertyName = \"InfiltrationSensible\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationSensibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.TotalSensibleLoad\", \"TotalSensibleLoad\");\r\n            ifcPSE.PropertyName = \"TotalSensibleLoad\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSensibleLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.TotalLatentLoad\", \"TotalLatentLoad\");\r\n            ifcPSE.PropertyName = \"TotalLatentLoad\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalLatentLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoad.TotalRadiantLoad\", \"TotalRadiantLoad\");\r\n            ifcPSE.PropertyName = \"TotalRadiantLoad\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalRadiantLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoad.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceThermalLoad);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceThermalLoadPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceThermalLoadPHistory = new PropertySetDescription();\r\n         propertySetSpaceThermalLoadPHistory.Name = \"Pset_SpaceThermalLoadPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceThermalLoadPHistory\"))\r\n         {\r\n            propertySetSpaceThermalLoadPHistory.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceThermalLoadPHistory.ObjectType = \"IfcSpace\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.People\", \"People\");\r\n            ifcPSE.PropertyName = \"People\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"People\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"人員\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"인원\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PeopleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.Lighting\", \"Lighting\");\r\n            ifcPSE.PropertyName = \"Lighting\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lighting\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"照明\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조명\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.EquipmentSensible\", \"EquipmentSensible\");\r\n            ifcPSE.PropertyName = \"EquipmentSensible\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Equipment Sensible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"事務機器の顕熱\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"사무기기의 현열\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EquipmentSensibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.VentilationIndoorAir\", \"VentilationIndoorAir\");\r\n            ifcPSE.PropertyName = \"VentilationIndoorAir\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ventilation Indoor Air\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"室内の換気量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"실내 환기량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationIndoorAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.VentilationOutdoorAir\", \"VentilationOutdoorAir\");\r\n            ifcPSE.PropertyName = \"VentilationOutdoorAir\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ventilation Outdoor Air\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外気量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"외기량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationOutdoorAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.RecirculatedAir\", \"RecirculatedAir\");\r\n            ifcPSE.PropertyName = \"RecirculatedAir\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Recirculated Air\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"循環空気\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"순환공기\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RecirculatedAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.ExhaustAir\", \"ExhaustAir\");\r\n            ifcPSE.PropertyName = \"ExhaustAir\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Exhaust Air\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"排気\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"배기\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExhaustAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.AirExchangeRate\", \"AirExchangeRate\");\r\n            ifcPSE.PropertyName = \"AirExchangeRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Exchange Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"換気回数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"환기회수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirExchangeRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.DryBulbTemperature\", \"DryBulbTemperature\");\r\n            ifcPSE.PropertyName = \"DryBulbTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Dry Bulb Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"乾球温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"건구온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DryBulbTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.RelativeHumidity\", \"RelativeHumidity\");\r\n            ifcPSE.PropertyName = \"RelativeHumidity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Relative Humidity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"相対湿度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"상대습도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RelativeHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.InfiltrationSensible\", \"InfiltrationSensible\");\r\n            ifcPSE.PropertyName = \"InfiltrationSensible\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Infiltration Sensible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"すき間風の顕熱\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"열취득 및 손실\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationSensibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.TotalSensibleLoad\", \"TotalSensibleLoad\");\r\n            ifcPSE.PropertyName = \"TotalSensibleLoad\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Sensible Load\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"顕熱負荷の合計\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"현열부하의 합계\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSensibleLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.TotalLatentLoad\", \"TotalLatentLoad\");\r\n            ifcPSE.PropertyName = \"TotalLatentLoad\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Latent Load\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"潜熱負荷の合計\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"잠열부하의 합계\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalLatentLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.TotalRadiantLoad\", \"TotalRadiantLoad\");\r\n            ifcPSE.PropertyName = \"TotalRadiantLoad\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Radiant Load\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"放射熱負荷の合計\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"복사열로드 합계\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalRadiantLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceThermalLoadPHistory\"))\r\n         {\r\n            propertySetSpaceThermalLoadPHistory.EntityTypes.Add(IFCEntityType.IfcSpatialElement);\r\n            propertySetSpaceThermalLoadPHistory.ObjectType = \"IfcSpatialElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.PeopleHistory\", \"PeopleHistory\");\r\n            ifcPSE.PropertyName = \"PeopleHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PeopleHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.LightingHistory\", \"LightingHistory\");\r\n            ifcPSE.PropertyName = \"LightingHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.EquipmentSensibleHistory\", \"EquipmentSensibleHistory\");\r\n            ifcPSE.PropertyName = \"EquipmentSensibleHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EquipmentSensibleHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.VentilationIndoorAirHistory\", \"VentilationIndoorAirHistory\");\r\n            ifcPSE.PropertyName = \"VentilationIndoorAirHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationIndoorAirHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.VentilationOutdoorAirHistory\", \"VentilationOutdoorAirHistory\");\r\n            ifcPSE.PropertyName = \"VentilationOutdoorAirHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationOutdoorAirHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.RecirculatedAirHistory\", \"RecirculatedAirHistory\");\r\n            ifcPSE.PropertyName = \"RecirculatedAirHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RecirculatedAirHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.ExhaustAirHistory\", \"ExhaustAirHistory\");\r\n            ifcPSE.PropertyName = \"ExhaustAirHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExhaustAirHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.AirExchangeRateTimeHistory\", \"AirExchangeRateTimeHistory\");\r\n            ifcPSE.PropertyName = \"AirExchangeRateTimeHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirExchangeRateTimeHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.DryBulbTemperatureHistory\", \"DryBulbTemperatureHistory\");\r\n            ifcPSE.PropertyName = \"DryBulbTemperatureHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DryBulbTemperatureHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.RelativeHumidityHistory\", \"RelativeHumidityHistory\");\r\n            ifcPSE.PropertyName = \"RelativeHumidityHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RelativeHumidityHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.InfiltrationSensibleHistory\", \"InfiltrationSensibleHistory\");\r\n            ifcPSE.PropertyName = \"InfiltrationSensibleHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationSensibleHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.TotalSensibleLoadHistory\", \"TotalSensibleLoadHistory\");\r\n            ifcPSE.PropertyName = \"TotalSensibleLoadHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSensibleLoadHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.TotalLatentLoadHistory\", \"TotalLatentLoadHistory\");\r\n            ifcPSE.PropertyName = \"TotalLatentLoadHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalLatentLoadHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalLoadPHistory.TotalRadiantLoadHistory\", \"TotalRadiantLoadHistory\");\r\n            ifcPSE.PropertyName = \"TotalRadiantLoadHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalRadiantLoadHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalLoadPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceThermalLoadPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceThermalPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceThermalPHistory = new PropertySetDescription();\r\n         propertySetSpaceThermalPHistory.Name = \"Pset_SpaceThermalPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceThermalPHistory\"))\r\n         {\r\n            propertySetSpaceThermalPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.CoolingAirFlowRate\", \"CoolingAirFlowRate\");\r\n            ifcPSE.PropertyName = \"CoolingAirFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.HeatingAirFlowRate\", \"HeatingAirFlowRate\");\r\n            ifcPSE.PropertyName = \"HeatingAirFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.VentilationAirFlowRate\", \"VentilationAirFlowRate\");\r\n            ifcPSE.PropertyName = \"VentilationAirFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.ExhaustAirFlowRate\", \"ExhaustAirFlowRate\");\r\n            ifcPSE.PropertyName = \"ExhaustAirFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExhaustAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.SpaceTemperature\", \"SpaceTemperature\");\r\n            ifcPSE.PropertyName = \"SpaceTemperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.SpaceRelativeHumidity\", \"SpaceRelativeHumidity\");\r\n            ifcPSE.PropertyName = \"SpaceRelativeHumidity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceRelativeHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceThermalPHistory\"))\r\n         {\r\n            propertySetSpaceThermalPHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.CoolingAirFlowRate\", \"CoolingAirFlowRate\");\r\n            ifcPSE.PropertyName = \"CoolingAirFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.HeatingAirFlowRate\", \"HeatingAirFlowRate\");\r\n            ifcPSE.PropertyName = \"HeatingAirFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.VentilationAirFlowRate\", \"VentilationAirFlowRate\");\r\n            ifcPSE.PropertyName = \"VentilationAirFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.ExhaustAirFlowRate\", \"ExhaustAirFlowRate\");\r\n            ifcPSE.PropertyName = \"ExhaustAirFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExhaustAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.SpaceTemperature\", \"SpaceTemperature\");\r\n            ifcPSE.PropertyName = \"SpaceTemperature\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.SpaceRelativeHumidity\", \"SpaceRelativeHumidity\");\r\n            ifcPSE.PropertyName = \"SpaceRelativeHumidity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceRelativeHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceThermalPHistory\"))\r\n         {\r\n            propertySetSpaceThermalPHistory.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceThermalPHistory.ObjectType = \"IfcSpace\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.CoolingAirFlowRate\", \"CoolingAirFlowRate\");\r\n            ifcPSE.PropertyName = \"CoolingAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cooling Air Flow Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"冷却空気流量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.HeatingAirFlowRate\", \"HeatingAirFlowRate\");\r\n            ifcPSE.PropertyName = \"HeatingAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heating Air Flow Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"暖房空気流量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.VentilationAirFlowRate\", \"VentilationAirFlowRate\");\r\n            ifcPSE.PropertyName = \"VentilationAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Ventilation Air Flow Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"換気気流速度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.ExhaustAirFlowRate\", \"ExhaustAirFlowRate\");\r\n            ifcPSE.PropertyName = \"ExhaustAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Exhaust Air Flow Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"排気空気流量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExhaustAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.SpaceTemperature\", \"SpaceTemperature\");\r\n            ifcPSE.PropertyName = \"SpaceTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Space Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"室内温度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.SpaceRelativeHumidity\", \"SpaceRelativeHumidity\");\r\n            ifcPSE.PropertyName = \"SpaceRelativeHumidity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Space Relative Humidity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"室内相対湿度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceRelativeHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceThermalPHistory\"))\r\n         {\r\n            propertySetSpaceThermalPHistory.EntityTypes.Add(IFCEntityType.IfcSpatialElement);\r\n            propertySetSpaceThermalPHistory.ObjectType = \"IfcSpatialElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.CoolingAirFlowRate\", \"CoolingAirFlowRate\");\r\n            ifcPSE.PropertyName = \"CoolingAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.HeatingAirFlowRate\", \"HeatingAirFlowRate\");\r\n            ifcPSE.PropertyName = \"HeatingAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.VentilationAirFlowRateHistory\", \"VentilationAirFlowRateHistory\");\r\n            ifcPSE.PropertyName = \"VentilationAirFlowRateHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilationAirFlowRateHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.ExhaustAirFlowRate\", \"ExhaustAirFlowRate\");\r\n            ifcPSE.PropertyName = \"ExhaustAirFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExhaustAirFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.SpaceTemperatureHistory\", \"SpaceTemperatureHistory\");\r\n            ifcPSE.PropertyName = \"SpaceTemperatureHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalPHistory.SpaceRelativeHumidity\", \"SpaceRelativeHumidity\");\r\n            ifcPSE.PropertyName = \"SpaceRelativeHumidity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceRelativeHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceThermalPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpaceThermalRequirements(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpaceThermalRequirements = new PropertySetDescription();\r\n         propertySetSpaceThermalRequirements.Name = \"Pset_SpaceThermalRequirements\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceThermalRequirements\"))\r\n         {\r\n            propertySetSpaceThermalRequirements.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceThermalRequirements.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceTemperatureMax\", \"SpaceTemperatureMax\");\r\n            ifcPSE.PropertyName = \"SpaceTemperatureMax\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureMaxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceTemperatureMin\", \"SpaceTemperatureMin\");\r\n            ifcPSE.PropertyName = \"SpaceTemperatureMin\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceTemperatureSummer\", \"SpaceTemperatureSummer\");\r\n            ifcPSE.PropertyName = \"SpaceTemperatureSummer\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureSummerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceTemperatureWinter\", \"SpaceTemperatureWinter\");\r\n            ifcPSE.PropertyName = \"SpaceTemperatureWinter\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureWinterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceHumidity\", \"SpaceHumidity\");\r\n            ifcPSE.PropertyName = \"SpaceHumidity\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceHumiditySummer\", \"SpaceHumiditySummer\");\r\n            ifcPSE.PropertyName = \"SpaceHumiditySummer\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceHumiditySummerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceHumidityWinter\", \"SpaceHumidityWinter\");\r\n            ifcPSE.PropertyName = \"SpaceHumidityWinter\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceHumidityWinterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.DiscontinuedHeating\", \"DiscontinuedHeating\");\r\n            ifcPSE.PropertyName = \"DiscontinuedHeating\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiscontinuedHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.AirConditioning\", \"AirConditioning\");\r\n            ifcPSE.PropertyName = \"AirConditioning\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirConditioningCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.AirConditioningCentral\", \"AirConditioningCentral\");\r\n            ifcPSE.PropertyName = \"AirConditioningCentral\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirConditioningCentralCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceThermalRequirements\"))\r\n         {\r\n            propertySetSpaceThermalRequirements.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceThermalRequirements.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceTemperatureMax\", \"SpaceTemperatureMax\");\r\n            ifcPSE.PropertyName = \"SpaceTemperatureMax\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureMaxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceTemperatureMin\", \"SpaceTemperatureMin\");\r\n            ifcPSE.PropertyName = \"SpaceTemperatureMin\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceTemperatureSummerMax\", \"SpaceTemperatureSummerMax\");\r\n            ifcPSE.PropertyName = \"SpaceTemperatureSummerMax\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureSummerMaxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceTemperatureSummerMin\", \"SpaceTemperatureSummerMin\");\r\n            ifcPSE.PropertyName = \"SpaceTemperatureSummerMin\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureSummerMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceTemperatureWinterMax\", \"SpaceTemperatureWinterMax\");\r\n            ifcPSE.PropertyName = \"SpaceTemperatureWinterMax\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureWinterMaxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceTemperatureWinterMin\", \"SpaceTemperatureWinterMin\");\r\n            ifcPSE.PropertyName = \"SpaceTemperatureWinterMin\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureWinterMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceHumidity\", \"SpaceHumidity\");\r\n            ifcPSE.PropertyName = \"SpaceHumidity\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceHumiditySummer\", \"SpaceHumiditySummer\");\r\n            ifcPSE.PropertyName = \"SpaceHumiditySummer\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceHumiditySummerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceHumidityWinter\", \"SpaceHumidityWinter\");\r\n            ifcPSE.PropertyName = \"SpaceHumidityWinter\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceHumidityWinterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.DiscontinuedHeating\", \"DiscontinuedHeating\");\r\n            ifcPSE.PropertyName = \"DiscontinuedHeating\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiscontinuedHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.NaturalVentilation\", \"NaturalVentilation\");\r\n            ifcPSE.PropertyName = \"NaturalVentilation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NaturalVentilationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.NaturalVentilationRate\", \"NaturalVentilationRate\");\r\n            ifcPSE.PropertyName = \"NaturalVentilationRate\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NaturalVentilationRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.MechanicalVentilationRate\", \"MechanicalVentilationRate\");\r\n            ifcPSE.PropertyName = \"MechanicalVentilationRate\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalVentilationRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.AirConditioning\", \"AirConditioning\");\r\n            ifcPSE.PropertyName = \"AirConditioning\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirConditioningCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.AirConditioningCentral\", \"AirConditioningCentral\");\r\n            ifcPSE.PropertyName = \"AirConditioningCentral\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirConditioningCentralCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpaceThermalRequirements\"))\r\n         {\r\n            propertySetSpaceThermalRequirements.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            propertySetSpaceThermalRequirements.EntityTypes.Add(IFCEntityType.IfcSpatialZone);\r\n            propertySetSpaceThermalRequirements.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            propertySetSpaceThermalRequirements.ObjectType = \"IfcSpace, IfcSpatialZone, IfcZone\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceTemperature\", \"SpaceTemperature\");\r\n            ifcPSE.PropertyName = \"SpaceTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Raumtemperatur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Space Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Température\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最高室内温度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceTemperatureMax\", \"SpaceTemperatureMax\");\r\n            ifcPSE.PropertyName = \"SpaceTemperatureMax\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Raumtemperatur Maximal\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Space Temperature Max\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Température maximale\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最高室内温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최고 온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureMaxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceTemperatureMin\", \"SpaceTemperatureMin\");\r\n            ifcPSE.PropertyName = \"SpaceTemperatureMin\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Raumtemperatur Minimal\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Space Temperature Min\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Température minimale\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最低室内温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최저온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceTemperatureSummerMax\", \"SpaceTemperatureSummerMax\");\r\n            ifcPSE.PropertyName = \"SpaceTemperatureSummerMax\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Raumtemperatur Kühlung Maximal\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Space Temperature Summer Max\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Température maximale en été\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"夏季最高室内温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"여름최고온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureSummerMaxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceTemperatureSummerMin\", \"SpaceTemperatureSummerMin\");\r\n            ifcPSE.PropertyName = \"SpaceTemperatureSummerMin\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Raumtemperatur Kühlung Minimal\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Space Temperature Summer Min\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Température minimale en été\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"夏季最低室内温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"여름최저온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureSummerMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceTemperatureWinterMax\", \"SpaceTemperatureWinterMax\");\r\n            ifcPSE.PropertyName = \"SpaceTemperatureWinterMax\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Raumtemperatur Heizung Maximal\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Space Temperature Winter Max\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Température maximale en hiver\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"冬季最高室内温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"겨울최고온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureWinterMaxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceTemperatureWinterMin\", \"SpaceTemperatureWinterMin\");\r\n            ifcPSE.PropertyName = \"SpaceTemperatureWinterMin\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Raumtemperatur Heizung Minimal\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Space Temperature Winter Min\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Température minimale en hiver\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"冬季最低室内温度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"겨울철 최저온도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceTemperatureWinterMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceHumidity\", \"SpaceHumidity\");\r\n            ifcPSE.PropertyName = \"SpaceHumidity\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Luftfeuchtigkeit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Space Humidity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Humidité relative\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"室内湿度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceHumidityMax\", \"SpaceHumidityMax\");\r\n            ifcPSE.PropertyName = \"SpaceHumidityMax\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Luftfeuchtigkeit Maximal\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Space Humidity Max\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Humidité relative maximale\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最高室内湿度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"실내습도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceHumidityMaxCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceHumidityMin\", \"SpaceHumidityMin\");\r\n            ifcPSE.PropertyName = \"SpaceHumidityMin\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Luftfeuchtigkeit Minimal\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Space Humidity Min\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Humidité relative minimale\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最低室内湿度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceHumidityMinCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceHumiditySummer\", \"SpaceHumiditySummer\");\r\n            ifcPSE.PropertyName = \"SpaceHumiditySummer\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Luftfeuchtigkeit Kühlung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Space Humidity Summer\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Humidité relative maximale en été\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"夏季室内湿度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"여름철실내 습도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceHumiditySummerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.SpaceHumidityWinter\", \"SpaceHumidityWinter\");\r\n            ifcPSE.PropertyName = \"SpaceHumidityWinter\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Luftfeuchtigkeit Heizung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Space Humidity Winter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Humidité relative minimale en été\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"冬季室内湿度\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"겨울철실내 습도\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpaceHumidityWinterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.DiscontinuedHeating\", \"DiscontinuedHeating\");\r\n            ifcPSE.PropertyName = \"DiscontinuedHeating\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Diskontinuierliche Heizung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Discontinued Heating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Chauffage intermittent\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"不連続暖房\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"불연속 난방\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiscontinuedHeatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.NaturalVentilation\", \"NaturalVentilation\");\r\n            ifcPSE.PropertyName = \"NaturalVentilation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Natürliche Lüftung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Natural Ventilation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Ventilation naturelle\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"自然換気\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"자연환기\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NaturalVentilationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.NaturalVentilationRate\", \"NaturalVentilationRate\");\r\n            ifcPSE.PropertyName = \"NaturalVentilationRate\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Natürliche Luftwechselzahl\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Natural Ventilation Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Taux ventilation naturelle\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"自然換気率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"자연환기 비율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NaturalVentilationRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.MechanicalVentilationRate\", \"MechanicalVentilationRate\");\r\n            ifcPSE.PropertyName = \"MechanicalVentilationRate\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Künstliche Luftwechselzahl\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mechanical Ventilation Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Taux ventilation mécanique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"機械換気率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"기계환기 비율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalVentilationRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.AirConditioning\", \"AirConditioning\");\r\n            ifcPSE.PropertyName = \"AirConditioning\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Klimaanlage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Conditioning\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Conditionnement d'air\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"空調\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"공조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirConditioningCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpaceThermalRequirements.AirConditioningCentral\", \"AirConditioningCentral\");\r\n            ifcPSE.PropertyName = \"AirConditioningCentral\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Klimaanlage zentral\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Conditioning Central\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Conditionnement d'air centralisé\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"中央式空調\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"중앙식 에어컨\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirConditioningCentralCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpaceThermalRequirements.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpaceThermalRequirements);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpatialZoneCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpatialZoneCommon = new PropertySetDescription();\r\n         propertySetSpatialZoneCommon.Name = \"Pset_SpatialZoneCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpatialZoneCommon\"))\r\n         {\r\n            propertySetSpatialZoneCommon.EntityTypes.Add(IFCEntityType.IfcSpatialZone);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpatialZoneCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpatialZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpatialZoneCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpatialZoneCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpatialZoneCommon\"))\r\n         {\r\n            propertySetSpatialZoneCommon.EntityTypes.Add(IFCEntityType.IfcSpatialZone);\r\n            propertySetSpatialZoneCommon.EntityTypes.Add(IFCEntityType.IfcSpatialZoneType);\r\n            propertySetSpatialZoneCommon.ObjectType = \"IfcSpatialZone\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpatialZoneCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpatialZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpatialZoneCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpatialZoneCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpatialZoneCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SpringTensioner(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSpringTensioner = new PropertySetDescription();\r\n         propertySetSpringTensioner.Name = \"Pset_SpringTensioner\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SpringTensioner\"))\r\n         {\r\n            propertySetSpringTensioner.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessory);\r\n            propertySetSpringTensioner.EntityTypes.Add(IFCEntityType.IfcDiscreteAccessoryType);\r\n            propertySetSpringTensioner.ObjectType = \"IfcDiscreteAccessory\";\r\n            propertySetSpringTensioner.PredefinedType = \"TENSIONINGEQUIPMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpringTensioner.TensileStrength\", \"TensileStrength\");\r\n            ifcPSE.PropertyName = \"TensileStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensileStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpringTensioner.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpringTensioner.NominalWeight\", \"NominalWeight\");\r\n            ifcPSE.PropertyName = \"NominalWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpringTensioner.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SpringTensioner.TensioningWorkingRange\", \"TensioningWorkingRange\");\r\n            ifcPSE.PropertyName = \"TensioningWorkingRange\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensioningWorkingRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSpringTensioner.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSpringTensioner);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_StackTerminalTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetStackTerminalTypeCommon = new PropertySetDescription();\r\n         propertySetStackTerminalTypeCommon.Name = \"Pset_StackTerminalTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_StackTerminalTypeCommon\"))\r\n         {\r\n            propertySetStackTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcStackTerminal);\r\n            propertySetStackTerminalTypeCommon.ObjectType = \"IfcStackTerminal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_StackTerminalTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStackTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StackTerminalTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStackTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_StackTerminalTypeCommon\"))\r\n         {\r\n            propertySetStackTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcStackTerminal);\r\n            propertySetStackTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcStackTerminalType);\r\n            propertySetStackTerminalTypeCommon.ObjectType = \"IfcStackTerminal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_StackTerminalTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStackTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StackTerminalTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStackTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetStackTerminalTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_StairCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetStairCommon = new PropertySetDescription();\r\n         propertySetStairCommon.Name = \"Pset_StairCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_StairCommon\"))\r\n         {\r\n            propertySetStairCommon.EntityTypes.Add(IFCEntityType.IfcStair);\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.NumberOfRiser\", \"NumberOfRiser\");\r\n            ifcPSE.PropertyName = \"NumberOfRiser\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfRiserCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.NumberOfTreads\", \"NumberOfTreads\");\r\n            ifcPSE.PropertyName = \"NumberOfTreads\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfTreadsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.RiserHeight\", \"RiserHeight\");\r\n            ifcPSE.PropertyName = \"RiserHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiserHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.TreadLength\", \"TreadLength\");\r\n            ifcPSE.PropertyName = \"TreadLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.RequiredHeadroom\", \"RequiredHeadroom\");\r\n            ifcPSE.PropertyName = \"RequiredHeadroom\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequiredHeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.HasNonSkidSurface\", \"HasNonSkidSurface\");\r\n            ifcPSE.PropertyName = \"HasNonSkidSurface\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasNonSkidSurfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_StairCommon\"))\r\n         {\r\n            propertySetStairCommon.EntityTypes.Add(IFCEntityType.IfcStair);\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.NumberOfRiser\", \"NumberOfRiser\");\r\n            ifcPSE.PropertyName = \"NumberOfRiser\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfRiserCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.NumberOfTreads\", \"NumberOfTreads\");\r\n            ifcPSE.PropertyName = \"NumberOfTreads\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfTreadsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.RiserHeight\", \"RiserHeight\");\r\n            ifcPSE.PropertyName = \"RiserHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiserHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.TreadLength\", \"TreadLength\");\r\n            ifcPSE.PropertyName = \"TreadLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.RequiredHeadroom\", \"RequiredHeadroom\");\r\n            ifcPSE.PropertyName = \"RequiredHeadroom\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequiredHeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.HasNonSkidSurface\", \"HasNonSkidSurface\");\r\n            ifcPSE.PropertyName = \"HasNonSkidSurface\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasNonSkidSurfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_StairCommon\"))\r\n         {\r\n            propertySetStairCommon.EntityTypes.Add(IFCEntityType.IfcStair);\r\n            propertySetStairCommon.ObjectType = \"IfcStair\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bauteiltyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.NumberOfRiser\", \"NumberOfRiser\");\r\n            ifcPSE.PropertyName = \"NumberOfRiser\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Anzahl der Steigungen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Riser\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"NombreContreMarches\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"蹴上げ数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"踢板数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfRiserCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.NumberOfTreads\", \"NumberOfTreads\");\r\n            ifcPSE.PropertyName = \"NumberOfTreads\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Anzahl der Auftritte\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Treads\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"NombreGirons\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"踏面数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"踏板数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfTreadsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.RiserHeight\", \"RiserHeight\");\r\n            ifcPSE.PropertyName = \"RiserHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Steigung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Riser Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"HauteurContreMarche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"蹴上げ高さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"踢板高度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiserHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.TreadLength\", \"TreadLength\");\r\n            ifcPSE.PropertyName = \"TreadLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Auftritt\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tread Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"LongueurGiron\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"踏面長\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"踏板长度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.NosingLength\", \"NosingLength\");\r\n            ifcPSE.PropertyName = \"NosingLength\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Überstand\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nosing Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Hauteur de passage requise\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NosingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.WalkingLineOffset\", \"WalkingLineOffset\");\r\n            ifcPSE.PropertyName = \"WalkingLineOffset\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Abstand der Lauflinie\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Walking Line Offset\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WalkingLineOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.TreadLengthAtOffset\", \"TreadLengthAtOffset\");\r\n            ifcPSE.PropertyName = \"TreadLengthAtOffset\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Auftritt an der Lauflinie\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tread Length At Offset\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthAtOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.TreadLengthAtInnerSide\", \"TreadLengthAtInnerSide\");\r\n            ifcPSE.PropertyName = \"TreadLengthAtInnerSide\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"minimaler Auftritt an der Innenseite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tread Length At Inner Side\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthAtInnerSideCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.WaistThickness\", \"WaistThickness\");\r\n            ifcPSE.PropertyName = \"WaistThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"minimale Dicke des Treppenplatte\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Waist Thickness\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaistThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.RequiredHeadroom\", \"RequiredHeadroom\");\r\n            ifcPSE.PropertyName = \"RequiredHeadroom\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"erforderliche Durchgangshöhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Required Headroom\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"HauteurPassageRequise\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"要求頭高余裕\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"所需净空\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequiredHeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Behindertengerecht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Handicap Accessible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"AccessibleHandicapes\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ハンディキャップアクセス可能性\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否为无障碍设施\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.HasNonSkidSurface\", \"HasNonSkidSurface\");\r\n            ifcPSE.PropertyName = \"HasNonSkidSurface\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nichtrutschende Oberfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Non Skid Surface\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"AntiDerapant\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"滑り止め表面加工区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"表面是否防滑\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasNonSkidSurfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Außenbauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EstExterieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否外部构件\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Feuerwiderstandsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ResistanceAuFeu\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐火等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"防火等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Fluchttreppe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Exit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Sortie Secours\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"非常口区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否为紧急出口\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_StairCommon\"))\r\n         {\r\n            propertySetStairCommon.EntityTypes.Add(IFCEntityType.IfcStair);\r\n            propertySetStairCommon.EntityTypes.Add(IFCEntityType.IfcStairType);\r\n            propertySetStairCommon.ObjectType = \"IfcStair\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.NumberOfRiser\", \"NumberOfRiser\");\r\n            ifcPSE.PropertyName = \"NumberOfRiser\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfRiserCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.NumberOfTreads\", \"NumberOfTreads\");\r\n            ifcPSE.PropertyName = \"NumberOfTreads\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfTreadsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.RiserHeight\", \"RiserHeight\");\r\n            ifcPSE.PropertyName = \"RiserHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiserHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.TreadLength\", \"TreadLength\");\r\n            ifcPSE.PropertyName = \"TreadLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.NosingLength\", \"NosingLength\");\r\n            ifcPSE.PropertyName = \"NosingLength\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NosingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.WalkingLineOffset\", \"WalkingLineOffset\");\r\n            ifcPSE.PropertyName = \"WalkingLineOffset\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WalkingLineOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.TreadLengthAtOffset\", \"TreadLengthAtOffset\");\r\n            ifcPSE.PropertyName = \"TreadLengthAtOffset\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthAtOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.TreadLengthAtInnerSide\", \"TreadLengthAtInnerSide\");\r\n            ifcPSE.PropertyName = \"TreadLengthAtInnerSide\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthAtInnerSideCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.WaistThickness\", \"WaistThickness\");\r\n            ifcPSE.PropertyName = \"WaistThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaistThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.RequiredHeadroom\", \"RequiredHeadroom\");\r\n            ifcPSE.PropertyName = \"RequiredHeadroom\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RequiredHeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.HasNonSkidSurface\", \"HasNonSkidSurface\");\r\n            ifcPSE.PropertyName = \"HasNonSkidSurface\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasNonSkidSurfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetStairCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_StairFlightCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetStairFlightCommon = new PropertySetDescription();\r\n         propertySetStairFlightCommon.Name = \"Pset_StairFlightCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_StairFlightCommon\"))\r\n         {\r\n            propertySetStairFlightCommon.EntityTypes.Add(IFCEntityType.IfcStairFlight);\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.NumberOfRiser\", \"NumberOfRiser\");\r\n            ifcPSE.PropertyName = \"NumberOfRiser\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfRiserCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.NumberOfTreads\", \"NumberOfTreads\");\r\n            ifcPSE.PropertyName = \"NumberOfTreads\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfTreadsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.RiserHeight\", \"RiserHeight\");\r\n            ifcPSE.PropertyName = \"RiserHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiserHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.TreadLength\", \"TreadLength\");\r\n            ifcPSE.PropertyName = \"TreadLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.NosingLength\", \"NosingLength\");\r\n            ifcPSE.PropertyName = \"NosingLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NosingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.WalkingLineOffset\", \"WalkingLineOffset\");\r\n            ifcPSE.PropertyName = \"WalkingLineOffset\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WalkingLineOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.TreadLengthAtOffset\", \"TreadLengthAtOffset\");\r\n            ifcPSE.PropertyName = \"TreadLengthAtOffset\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthAtOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.TreadLengthAtInnerSide\", \"TreadLengthAtInnerSide\");\r\n            ifcPSE.PropertyName = \"TreadLengthAtInnerSide\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthAtInnerSideCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.Headroom\", \"Headroom\");\r\n            ifcPSE.PropertyName = \"Headroom\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.WaistThickness\", \"WaistThickness\");\r\n            ifcPSE.PropertyName = \"WaistThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaistThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_StairFlightCommon\"))\r\n         {\r\n            propertySetStairFlightCommon.EntityTypes.Add(IFCEntityType.IfcStairFlight);\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.NumberOfRiser\", \"NumberOfRiser\");\r\n            ifcPSE.PropertyName = \"NumberOfRiser\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfRiserCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.NumberOfTreads\", \"NumberOfTreads\");\r\n            ifcPSE.PropertyName = \"NumberOfTreads\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfTreadsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.RiserHeight\", \"RiserHeight\");\r\n            ifcPSE.PropertyName = \"RiserHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiserHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.TreadLength\", \"TreadLength\");\r\n            ifcPSE.PropertyName = \"TreadLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.NosingLength\", \"NosingLength\");\r\n            ifcPSE.PropertyName = \"NosingLength\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NosingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.WalkingLineOffset\", \"WalkingLineOffset\");\r\n            ifcPSE.PropertyName = \"WalkingLineOffset\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WalkingLineOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.TreadLengthAtOffset\", \"TreadLengthAtOffset\");\r\n            ifcPSE.PropertyName = \"TreadLengthAtOffset\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthAtOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.TreadLengthAtInnerSide\", \"TreadLengthAtInnerSide\");\r\n            ifcPSE.PropertyName = \"TreadLengthAtInnerSide\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthAtInnerSideCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.Headroom\", \"Headroom\");\r\n            ifcPSE.PropertyName = \"Headroom\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.WaistThickness\", \"WaistThickness\");\r\n            ifcPSE.PropertyName = \"WaistThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaistThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_StairFlightCommon\"))\r\n         {\r\n            propertySetStairFlightCommon.EntityTypes.Add(IFCEntityType.IfcStairFlight);\r\n            propertySetStairFlightCommon.ObjectType = \"IfcStairFlight\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bauteiltyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.NumberOfRiser\", \"NumberOfRiser\");\r\n            ifcPSE.PropertyName = \"NumberOfRiser\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Anzahl der Steigungen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Riser\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"NombreContreMarches\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"蹴上げ数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"踢板数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfRiserCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.NumberOfTreads\", \"NumberOfTreads\");\r\n            ifcPSE.PropertyName = \"NumberOfTreads\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Anzahl der Auftritte\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Treads\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"NombreGirons\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"踏面数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"踏板数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfTreadsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.RiserHeight\", \"RiserHeight\");\r\n            ifcPSE.PropertyName = \"RiserHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Steigung\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Riser Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"HauteurContreMarche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"蹴上げ高さ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"踢板高度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiserHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.TreadLength\", \"TreadLength\");\r\n            ifcPSE.PropertyName = \"TreadLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Auftritt\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tread Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"LongueurGiron\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"踏面長\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"踏板长度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.NosingLength\", \"NosingLength\");\r\n            ifcPSE.PropertyName = \"NosingLength\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Überstand\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nosing Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"LongueurNez\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"踏板前缘长度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NosingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.WalkingLineOffset\", \"WalkingLineOffset\");\r\n            ifcPSE.PropertyName = \"WalkingLineOffset\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Abstand der Lauflinie\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Walking Line Offset\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"PositionLigneFoulee\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"走线偏移\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WalkingLineOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.TreadLengthAtOffset\", \"TreadLengthAtOffset\");\r\n            ifcPSE.PropertyName = \"TreadLengthAtOffset\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Auftritt an der Lauflinie\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tread Length At Offset\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"LongueurGironSurLigneFoulee\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"偏移踏板长度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthAtOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.TreadLengthAtInnerSide\", \"TreadLengthAtInnerSide\");\r\n            ifcPSE.PropertyName = \"TreadLengthAtInnerSide\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"minimaler Auftritt an der Innenseite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tread Length At Inner Side\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"LongueurGironCoteInterieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"内侧踏板长度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthAtInnerSideCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.Headroom\", \"Headroom\");\r\n            ifcPSE.PropertyName = \"Headroom\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Durchgangshöhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Headroom\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"HauteurPassage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"净空\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.WaistThickness\", \"WaistThickness\");\r\n            ifcPSE.PropertyName = \"WaistThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"minimale Dicke des Treppenplatte\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Waist Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Epaisseur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"腰部厚度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaistThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_StairFlightCommon\"))\r\n         {\r\n            propertySetStairFlightCommon.EntityTypes.Add(IFCEntityType.IfcStairFlight);\r\n            propertySetStairFlightCommon.EntityTypes.Add(IFCEntityType.IfcStairFlightType);\r\n            propertySetStairFlightCommon.ObjectType = \"IfcStairFlight\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.NumberOfRiser\", \"NumberOfRiser\");\r\n            ifcPSE.PropertyName = \"NumberOfRiser\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfRiserCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.NumberOfTreads\", \"NumberOfTreads\");\r\n            ifcPSE.PropertyName = \"NumberOfTreads\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfTreadsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.RiserHeight\", \"RiserHeight\");\r\n            ifcPSE.PropertyName = \"RiserHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RiserHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.TreadLength\", \"TreadLength\");\r\n            ifcPSE.PropertyName = \"TreadLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.NosingLength\", \"NosingLength\");\r\n            ifcPSE.PropertyName = \"NosingLength\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NosingLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.WalkingLineOffset\", \"WalkingLineOffset\");\r\n            ifcPSE.PropertyName = \"WalkingLineOffset\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WalkingLineOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.TreadLengthAtOffset\", \"TreadLengthAtOffset\");\r\n            ifcPSE.PropertyName = \"TreadLengthAtOffset\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthAtOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.TreadLengthAtInnerSide\", \"TreadLengthAtInnerSide\");\r\n            ifcPSE.PropertyName = \"TreadLengthAtInnerSide\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TreadLengthAtInnerSideCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.Headroom\", \"Headroom\");\r\n            ifcPSE.PropertyName = \"Headroom\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeadroomCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StairFlightCommon.WaistThickness\", \"WaistThickness\");\r\n            ifcPSE.PropertyName = \"WaistThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaistThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStairFlightCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetStairFlightCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_Stationing(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetStationing = new PropertySetDescription();\r\n         propertySetStationing.Name = \"Pset_Stationing\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Stationing\"))\r\n         {\r\n            propertySetStationing.EntityTypes.Add(IFCEntityType.IfcReferent);\r\n            propertySetStationing.ObjectType = \"IfcReferent\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_Stationing.IncomingStation\", \"IncomingStation\");\r\n            ifcPSE.PropertyName = \"IncomingStation\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IncomingStationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStationing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Stationing.Station\", \"Station\");\r\n            ifcPSE.PropertyName = \"Station\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStationing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Stationing.HasIncreasingStation\", \"HasIncreasingStation\");\r\n            ifcPSE.PropertyName = \"HasIncreasingStation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasIncreasingStationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStationing.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetStationing);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_StructuralSurfaceMemberVaryingThickness(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetStructuralSurfaceMemberVaryingThickness = new PropertySetDescription();\r\n         propertySetStructuralSurfaceMemberVaryingThickness.Name = \"Pset_StructuralSurfaceMemberVaryingThickness\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_StructuralSurfaceMemberVaryingThickness\"))\r\n         {\r\n            propertySetStructuralSurfaceMemberVaryingThickness.EntityTypes.Add(IFCEntityType.IfcStructuralSurfaceMemberVarying);\r\n            propertySetStructuralSurfaceMemberVaryingThickness.ObjectType = \"IfcStructuralSurfaceMemberVarying\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_StructuralSurfaceMemberVaryingThickness.Thickness1\", \"Thickness1\");\r\n            ifcPSE.PropertyName = \"Thickness1\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thickness1\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Thickness1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStructuralSurfaceMemberVaryingThickness.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StructuralSurfaceMemberVaryingThickness.Location1Local\", \"Location1Local\");\r\n            ifcPSE.PropertyName = \"Location1Local\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Location1 Local\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Location1LocalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStructuralSurfaceMemberVaryingThickness.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StructuralSurfaceMemberVaryingThickness.Location1Global\", \"Location1Global\");\r\n            ifcPSE.PropertyName = \"Location1Global\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Location1 Global\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Location1GlobalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStructuralSurfaceMemberVaryingThickness.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StructuralSurfaceMemberVaryingThickness.Thickness2\", \"Thickness2\");\r\n            ifcPSE.PropertyName = \"Thickness2\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thickness2\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Thickness2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStructuralSurfaceMemberVaryingThickness.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StructuralSurfaceMemberVaryingThickness.Location2Local\", \"Location2Local\");\r\n            ifcPSE.PropertyName = \"Location2Local\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Location2 Local\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Location2LocalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStructuralSurfaceMemberVaryingThickness.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StructuralSurfaceMemberVaryingThickness.Location2Global\", \"Location2Global\");\r\n            ifcPSE.PropertyName = \"Location2Global\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Location2 Global\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Location2GlobalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStructuralSurfaceMemberVaryingThickness.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StructuralSurfaceMemberVaryingThickness.Thickness3\", \"Thickness3\");\r\n            ifcPSE.PropertyName = \"Thickness3\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thickness3\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Thickness3Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStructuralSurfaceMemberVaryingThickness.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StructuralSurfaceMemberVaryingThickness.Location3Local\", \"Location3Local\");\r\n            ifcPSE.PropertyName = \"Location3Local\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Location3 Local\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Location3LocalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStructuralSurfaceMemberVaryingThickness.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StructuralSurfaceMemberVaryingThickness.Location3Global\", \"Location3Global\");\r\n            ifcPSE.PropertyName = \"Location3Global\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Location3 Global\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Location3GlobalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStructuralSurfaceMemberVaryingThickness.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_StructuralSurfaceMemberVaryingThickness\"))\r\n         {\r\n            propertySetStructuralSurfaceMemberVaryingThickness.EntityTypes.Add(IFCEntityType.IfcStructuralSurfaceMemberVarying);\r\n            propertySetStructuralSurfaceMemberVaryingThickness.ObjectType = \"IfcStructuralSurfaceMemberVarying\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_StructuralSurfaceMemberVaryingThickness.Thickness1\", \"Thickness1\");\r\n            ifcPSE.PropertyName = \"Thickness1\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Thickness1Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStructuralSurfaceMemberVaryingThickness.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StructuralSurfaceMemberVaryingThickness.Location1Local\", \"Location1Local\");\r\n            ifcPSE.PropertyName = \"Location1Local\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Location1LocalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStructuralSurfaceMemberVaryingThickness.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StructuralSurfaceMemberVaryingThickness.Location1Global\", \"Location1Global\");\r\n            ifcPSE.PropertyName = \"Location1Global\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Location1GlobalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStructuralSurfaceMemberVaryingThickness.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StructuralSurfaceMemberVaryingThickness.Thickness2\", \"Thickness2\");\r\n            ifcPSE.PropertyName = \"Thickness2\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Thickness2Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStructuralSurfaceMemberVaryingThickness.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StructuralSurfaceMemberVaryingThickness.Location2Local\", \"Location2Local\");\r\n            ifcPSE.PropertyName = \"Location2Local\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Location2LocalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStructuralSurfaceMemberVaryingThickness.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StructuralSurfaceMemberVaryingThickness.Location2Global\", \"Location2Global\");\r\n            ifcPSE.PropertyName = \"Location2Global\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Location2GlobalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStructuralSurfaceMemberVaryingThickness.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StructuralSurfaceMemberVaryingThickness.Thickness3\", \"Thickness3\");\r\n            ifcPSE.PropertyName = \"Thickness3\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Thickness3Calculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStructuralSurfaceMemberVaryingThickness.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StructuralSurfaceMemberVaryingThickness.Location3Local\", \"Location3Local\");\r\n            ifcPSE.PropertyName = \"Location3Local\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Location3LocalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStructuralSurfaceMemberVaryingThickness.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_StructuralSurfaceMemberVaryingThickness.Location3Global\", \"Location3Global\");\r\n            ifcPSE.PropertyName = \"Location3Global\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.Location3GlobalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetStructuralSurfaceMemberVaryingThickness.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetStructuralSurfaceMemberVaryingThickness);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SumpBusterCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSumpBusterCommon = new PropertySetDescription();\r\n         propertySetSumpBusterCommon.Name = \"Pset_SumpBusterCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SumpBusterCommon\"))\r\n         {\r\n            propertySetSumpBusterCommon.EntityTypes.Add(IFCEntityType.IfcElementAssembly);\r\n            propertySetSumpBusterCommon.EntityTypes.Add(IFCEntityType.IfcElementAssemblyType);\r\n            propertySetSumpBusterCommon.ObjectType = \"IfcElementAssembly\";\r\n            propertySetSumpBusterCommon.PredefinedType = \"SUMPBUSTER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SumpBusterCommon.TypeDesignation\", \"TypeDesignation\");\r\n            ifcPSE.PropertyName = \"TypeDesignation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeDesignationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSumpBusterCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSumpBusterCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_Superelevation(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSuperelevation = new PropertySetDescription();\r\n         propertySetSuperelevation.Name = \"Pset_Superelevation\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Superelevation\"))\r\n         {\r\n            propertySetSuperelevation.EntityTypes.Add(IFCEntityType.IfcReferent);\r\n            propertySetSuperelevation.ObjectType = \"IfcReferent\";\r\n            propertySetSuperelevation.PredefinedType = \"SUPERELEVATIONEVENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_Superelevation.Side\", \"Side\");\r\n            ifcPSE.PropertyName = \"Side\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SideType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SideCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSuperelevation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Superelevation.Superelevation\", \"Superelevation\");\r\n            ifcPSE.PropertyName = \"Superelevation\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SuperelevationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSuperelevation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Superelevation.TransitionSuperelevation\", \"TransitionSuperelevation\");\r\n            ifcPSE.PropertyName = \"TransitionSuperelevation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TransitionSuperelevationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransitionSuperelevationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSuperelevation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSuperelevation);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SwitchingDeviceTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSwitchingDeviceTypeCommon = new PropertySetDescription();\r\n         propertySetSwitchingDeviceTypeCommon.Name = \"Pset_SwitchingDeviceTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeCommon\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.NumberOfGangs\", \"NumberOfGangs\");\r\n            ifcPSE.PropertyName = \"NumberOfGangs\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfGangsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.SwitchFunction\", \"SwitchFunction\");\r\n            ifcPSE.PropertyName = \"SwitchFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_SwitchFunctionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.HasLock\", \"HasLock\");\r\n            ifcPSE.PropertyName = \"HasLock\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasLockCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeCommon\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.NumberOfGangs\", \"NumberOfGangs\");\r\n            ifcPSE.PropertyName = \"NumberOfGangs\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfGangsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.SwitchFunction\", \"SwitchFunction\");\r\n            ifcPSE.PropertyName = \"SwitchFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_SwitchFunctionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.HasLock\", \"HasLock\");\r\n            ifcPSE.PropertyName = \"HasLock\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasLockCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeCommon\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeCommon.ObjectType = \"IfcSwitchingDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.NumberOfGangs\", \"NumberOfGangs\");\r\n            ifcPSE.PropertyName = \"NumberOfGangs\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Gangs\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ボタン数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"버튼 수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfGangsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.SwitchFunction\", \"SwitchFunction\");\r\n            ifcPSE.PropertyName = \"SwitchFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SwitchFunctionType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Switch Function\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"スイッチタイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"스위치 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.HasLock\", \"HasLock\");\r\n            ifcPSE.PropertyName = \"HasLock\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Lock\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ロックの可否\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"잠금여부\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasLockCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.IsIlluminated\", \"IsIlluminated\");\r\n            ifcPSE.PropertyName = \"IsIlluminated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Illuminated\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"自照型\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"스위치 조명표시기\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsIlluminatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.Legend\", \"Legend\");\r\n            ifcPSE.PropertyName = \"Legend\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Legend\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"凡例\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"범례\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LegendCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.SetPoint\", \"SetPoint\");\r\n            ifcPSE.PropertyName = \"SetPoint\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Integer;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"設定ポイント\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"스위치 포트 싱크\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeCommon\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeCommon.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeCommon.ObjectType = \"IfcSwitchingDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.NumberOfGangs\", \"NumberOfGangs\");\r\n            ifcPSE.PropertyName = \"NumberOfGangs\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfGangsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.SwitchFunction\", \"SwitchFunction\");\r\n            ifcPSE.PropertyName = \"SwitchFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SwitchFunctionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.HasLock\", \"HasLock\");\r\n            ifcPSE.PropertyName = \"HasLock\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasLockCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.IsIlluminated\", \"IsIlluminated\");\r\n            ifcPSE.PropertyName = \"IsIlluminated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsIlluminatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.Legend\", \"Legend\");\r\n            ifcPSE.PropertyName = \"Legend\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LegendCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeCommon.SetPoint\", \"SetPoint\");\r\n            ifcPSE.PropertyName = \"SetPoint\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Integer;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSwitchingDeviceTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SwitchingDeviceTypeContactor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSwitchingDeviceTypeContactor = new PropertySetDescription();\r\n         propertySetSwitchingDeviceTypeContactor.Name = \"Pset_SwitchingDeviceTypeContactor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeContactor\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeContactor.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeContactor.ObjectType = \"Contactor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeContactor.ContactorType\", \"ContactorType\");\r\n            ifcPSE.PropertyName = \"ContactorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_ContactorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContactorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeContactor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeContactor\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeContactor.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeContactor.ObjectType = \"IfcSwitchingDeviceType\";\r\n            propertySetSwitchingDeviceTypeContactor.PredefinedType = \"CONTACTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeContactor.ContactorType\", \"ContactorType\");\r\n            ifcPSE.PropertyName = \"ContactorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ContactorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContactorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeContactor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeContactor\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeContactor.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeContactor.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeContactor.PredefinedType = \"CONTACTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeContactor.ContactorType\", \"ContactorType\");\r\n            ifcPSE.PropertyName = \"ContactorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ContactorType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Contactor Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"接触器タイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"접촉기 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContactorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeContactor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeContactor\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeContactor.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeContactor.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeContactor.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeContactor.PredefinedType = \"CONTACTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeContactor.ContactorType\", \"ContactorType\");\r\n            ifcPSE.PropertyName = \"ContactorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ContactorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContactorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeContactor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSwitchingDeviceTypeContactor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SwitchingDeviceTypeDimmerSwitch(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSwitchingDeviceTypeDimmerSwitch = new PropertySetDescription();\r\n         propertySetSwitchingDeviceTypeDimmerSwitch.Name = \"Pset_SwitchingDeviceTypeDimmerSwitch\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeDimmerSwitch\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeDimmerSwitch.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeDimmerSwitch.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeDimmerSwitch.PredefinedType = \"DIMMERSWITCH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeDimmerSwitch.DimmerType\", \"DimmerType\");\r\n            ifcPSE.PropertyName = \"DimmerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SwitchingDeviceDimmerSwitchType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Dimmer Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ディマータイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조광기 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DimmerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeDimmerSwitch.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeDimmerSwitch\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeDimmerSwitch.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeDimmerSwitch.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeDimmerSwitch.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeDimmerSwitch.PredefinedType = \"DIMMERSWITCH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeDimmerSwitch.DimmerType\", \"DimmerType\");\r\n            ifcPSE.PropertyName = \"DimmerType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SwitchingDeviceDimmerSwitchType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DimmerTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeDimmerSwitch.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSwitchingDeviceTypeDimmerSwitch);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SwitchingDeviceTypeEmergencyStop(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSwitchingDeviceTypeEmergencyStop = new PropertySetDescription();\r\n         propertySetSwitchingDeviceTypeEmergencyStop.Name = \"Pset_SwitchingDeviceTypeEmergencyStop\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeEmergencyStop\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeEmergencyStop.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeEmergencyStop.ObjectType = \"EmergencyStop\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeEmergencyStop.SwitchOperation\", \"SwitchOperation\");\r\n            ifcPSE.PropertyName = \"SwitchOperation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_SwitchFunctionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchOperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeEmergencyStop.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeEmergencyStop\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeEmergencyStop.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeEmergencyStop.ObjectType = \"IfcSwitchingDeviceType\";\r\n            propertySetSwitchingDeviceTypeEmergencyStop.PredefinedType = \"EMERGENCYSTOP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeEmergencyStop.SwitchOperation\", \"SwitchOperation\");\r\n            ifcPSE.PropertyName = \"SwitchOperation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_SwitchFunctionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchOperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeEmergencyStop.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeEmergencyStop\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeEmergencyStop.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeEmergencyStop.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeEmergencyStop.PredefinedType = \"EMERGENCYSTOP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeEmergencyStop.SwitchOperation\", \"SwitchOperation\");\r\n            ifcPSE.PropertyName = \"SwitchOperation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SwitchingDeviceEmergencyStopType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Switch Operation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"スイッチ操作\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"스위치 조작\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchOperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeEmergencyStop.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeEmergencyStop\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeEmergencyStop.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeEmergencyStop.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeEmergencyStop.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeEmergencyStop.PredefinedType = \"EMERGENCYSTOP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeEmergencyStop.SwitchOperation\", \"SwitchOperation\");\r\n            ifcPSE.PropertyName = \"SwitchOperation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SwitchingDeviceEmergencyStopType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchOperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeEmergencyStop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeEmergencyStop.NumberOfPhases\", \"NumberOfPhases\");\r\n            ifcPSE.PropertyName = \"NumberOfPhases\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPhasesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeEmergencyStop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeEmergencyStop.ReferenceEnvironmentTemperature\", \"ReferenceEnvironmentTemperature\");\r\n            ifcPSE.PropertyName = \"ReferenceEnvironmentTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceEnvironmentTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeEmergencyStop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeEmergencyStop.BreakingCapacity\", \"BreakingCapacity\");\r\n            ifcPSE.PropertyName = \"BreakingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BreakingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeEmergencyStop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeEmergencyStop.NumberOfEarthFaultRelays\", \"NumberOfEarthFaultRelays\");\r\n            ifcPSE.PropertyName = \"NumberOfEarthFaultRelays\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfEarthFaultRelaysCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeEmergencyStop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeEmergencyStop.NumberOfEmergencyButtons\", \"NumberOfEmergencyButtons\");\r\n            ifcPSE.PropertyName = \"NumberOfEmergencyButtons\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfEmergencyButtonsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeEmergencyStop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeEmergencyStop.NumberOfRelays\", \"NumberOfRelays\");\r\n            ifcPSE.PropertyName = \"NumberOfRelays\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfRelaysCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeEmergencyStop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeEmergencyStop.NumberOfOverCurrentRelays\", \"NumberOfOverCurrentRelays\");\r\n            ifcPSE.PropertyName = \"NumberOfOverCurrentRelays\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfOverCurrentRelaysCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeEmergencyStop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeEmergencyStop.NumberOfAffectedPoles\", \"NumberOfAffectedPoles\");\r\n            ifcPSE.PropertyName = \"NumberOfAffectedPoles\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfAffectedPolesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeEmergencyStop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeEmergencyStop.NominalCurrent\", \"NominalCurrent\");\r\n            ifcPSE.PropertyName = \"NominalCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeEmergencyStop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeEmergencyStop.RatedFrequency\", \"RatedFrequency\");\r\n            ifcPSE.PropertyName = \"RatedFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeEmergencyStop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeEmergencyStop.RatedVoltage\", \"RatedVoltage\");\r\n            ifcPSE.PropertyName = \"RatedVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeEmergencyStop.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeEmergencyStop.TransformationRatio\", \"TransformationRatio\");\r\n            ifcPSE.PropertyName = \"TransformationRatio\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransformationRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeEmergencyStop.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSwitchingDeviceTypeEmergencyStop);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SwitchingDeviceTypeKeypad(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSwitchingDeviceTypeKeypad = new PropertySetDescription();\r\n         propertySetSwitchingDeviceTypeKeypad.Name = \"Pset_SwitchingDeviceTypeKeypad\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeKeypad\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeKeypad.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeKeypad.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeKeypad.PredefinedType = \"KEYPAD\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeKeypad.KeypadType\", \"KeypadType\");\r\n            ifcPSE.PropertyName = \"KeypadType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SwitchingDeviceKeypadType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Keypad Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"キーパッドタイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"키패드 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.KeypadTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeKeypad.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeKeypad\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeKeypad.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeKeypad.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeKeypad.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeKeypad.PredefinedType = \"KEYPAD\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeKeypad.KeypadType\", \"KeypadType\");\r\n            ifcPSE.PropertyName = \"KeypadType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SwitchingDeviceKeypadType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.KeypadTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeKeypad.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSwitchingDeviceTypeKeypad);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SwitchingDeviceTypeMomentarySwitch(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSwitchingDeviceTypeMomentarySwitch = new PropertySetDescription();\r\n         propertySetSwitchingDeviceTypeMomentarySwitch.Name = \"Pset_SwitchingDeviceTypeMomentarySwitch\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeMomentarySwitch\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeMomentarySwitch.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeMomentarySwitch.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeMomentarySwitch.PredefinedType = \"MOMENTARYSWITCH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeMomentarySwitch.MomentaryType\", \"MomentaryType\");\r\n            ifcPSE.PropertyName = \"MomentaryType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SwitchingDeviceMomentarySwitchType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Momentary Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"瞬時スイッチタイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"순간스위치 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MomentaryTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeMomentarySwitch.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeMomentarySwitch\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeMomentarySwitch.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeMomentarySwitch.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeMomentarySwitch.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeMomentarySwitch.PredefinedType = \"MOMENTARYSWITCH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeMomentarySwitch.MomentaryType\", \"MomentaryType\");\r\n            ifcPSE.PropertyName = \"MomentaryType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SwitchingDeviceMomentarySwitchType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MomentaryTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeMomentarySwitch.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSwitchingDeviceTypeMomentarySwitch);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SwitchingDeviceTypePHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSwitchingDeviceTypePHistory = new PropertySetDescription();\r\n         propertySetSwitchingDeviceTypePHistory.Name = \"Pset_SwitchingDeviceTypePHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypePHistory\"))\r\n         {\r\n            propertySetSwitchingDeviceTypePHistory.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypePHistory.ObjectType = \"IfcSwitchingDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypePHistory.SetPoint\", \"SetPoint\");\r\n            ifcPSE.PropertyName = \"SetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypePHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypePHistory\"))\r\n         {\r\n            propertySetSwitchingDeviceTypePHistory.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypePHistory.ObjectType = \"IfcSwitchingDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypePHistory.SetPointHistory\", \"SetPointHistory\");\r\n            ifcPSE.PropertyName = \"SetPointHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypePHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSwitchingDeviceTypePHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SwitchingDeviceTypeRelay(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSwitchingDeviceTypeRelay = new PropertySetDescription();\r\n         propertySetSwitchingDeviceTypeRelay.Name = \"Pset_SwitchingDeviceTypeRelay\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeRelay\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeRelay.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeRelay.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeRelay.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeRelay.PredefinedType = \"RELAY\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeRelay.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeRelay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeRelay.Current\", \"Current\");\r\n            ifcPSE.PropertyName = \"Current\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeRelay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeRelay.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeRelay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeRelay.InsulationResistance\", \"InsulationResistance\");\r\n            ifcPSE.PropertyName = \"InsulationResistance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InsulationResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeRelay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeRelay.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeRelay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeRelay.ContactResistance\", \"ContactResistance\");\r\n            ifcPSE.PropertyName = \"ContactResistance\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ContactResistanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeRelay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeRelay.PullInVoltage\", \"PullInVoltage\");\r\n            ifcPSE.PropertyName = \"PullInVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PullInVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeRelay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeRelay.ReleaseVoltage\", \"ReleaseVoltage\");\r\n            ifcPSE.PropertyName = \"ReleaseVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReleaseVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeRelay.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeRelay.Voltage\", \"Voltage\");\r\n            ifcPSE.PropertyName = \"Voltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeRelay.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSwitchingDeviceTypeRelay);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SwitchingDeviceTypeSelectorSwitch(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSwitchingDeviceTypeSelectorSwitch = new PropertySetDescription();\r\n         propertySetSwitchingDeviceTypeSelectorSwitch.Name = \"Pset_SwitchingDeviceTypeSelectorSwitch\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeSelectorSwitch\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeSelectorSwitch.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeSelectorSwitch.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeSelectorSwitch.PredefinedType = \"SELECTORSWITCH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSelectorSwitch.SelectorType\", \"SelectorType\");\r\n            ifcPSE.PropertyName = \"SelectorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SwitchingDeviceDimmerSwitchType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Selector Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"セレクター（スイッチ）タイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"스위치 타입\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SelectorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSelectorSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSelectorSwitch.SwitchUsage\", \"SwitchUsage\");\r\n            ifcPSE.PropertyName = \"SwitchUsage\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SwitchUsage);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Switch Usage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"スイッチの使用法\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"스위치 사용\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchUsageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSelectorSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSelectorSwitch.SwitchActivation\", \"SwitchActivation\");\r\n            ifcPSE.PropertyName = \"SwitchActivation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SwitchActivation);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Switch Activation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"起動方式\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"기동 방식\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchActivationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSelectorSwitch.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeSelectorSwitch\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeSelectorSwitch.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeSelectorSwitch.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeSelectorSwitch.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeSelectorSwitch.PredefinedType = \"SELECTORSWITCH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSelectorSwitch.SelectorType\", \"SelectorType\");\r\n            ifcPSE.PropertyName = \"SelectorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SwitchingDeviceDimmerSwitchType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SelectorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSelectorSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSelectorSwitch.SwitchUsage\", \"SwitchUsage\");\r\n            ifcPSE.PropertyName = \"SwitchUsage\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SwitchUsage);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchUsageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSelectorSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSelectorSwitch.SwitchActivation\", \"SwitchActivation\");\r\n            ifcPSE.PropertyName = \"SwitchActivation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SwitchActivation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchActivationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSelectorSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSelectorSwitch.NominalCurrent\", \"NominalCurrent\");\r\n            ifcPSE.PropertyName = \"NominalCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSelectorSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSelectorSwitch.ReferenceEnvironmentTemperature\", \"ReferenceEnvironmentTemperature\");\r\n            ifcPSE.PropertyName = \"ReferenceEnvironmentTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceEnvironmentTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSelectorSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSelectorSwitch.RatedFrequency\", \"RatedFrequency\");\r\n            ifcPSE.PropertyName = \"RatedFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSelectorSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSelectorSwitch.NumberOfPhases\", \"NumberOfPhases\");\r\n            ifcPSE.PropertyName = \"NumberOfPhases\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPhasesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSelectorSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSelectorSwitch.NominalPower\", \"NominalPower\");\r\n            ifcPSE.PropertyName = \"NominalPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSelectorSwitch.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSwitchingDeviceTypeSelectorSwitch);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SwitchingDeviceTypeStarter(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSwitchingDeviceTypeStarter = new PropertySetDescription();\r\n         propertySetSwitchingDeviceTypeStarter.Name = \"Pset_SwitchingDeviceTypeStarter\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeStarter\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeStarter.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeStarter.ObjectType = \"Starter\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeStarter.StarterType\", \"StarterType\");\r\n            ifcPSE.PropertyName = \"StarterType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_StarterType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StarterTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeStarter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeStarter\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeStarter.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeStarter.ObjectType = \"IfcSwitchingDeviceType\";\r\n            propertySetSwitchingDeviceTypeStarter.PredefinedType = \"STARTER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeStarter.StarterType\", \"StarterType\");\r\n            ifcPSE.PropertyName = \"StarterType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_StarterType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StarterTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeStarter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeStarter\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeStarter.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeStarter.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeStarter.PredefinedType = \"STARTER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeStarter.StarterType\", \"StarterType\");\r\n            ifcPSE.PropertyName = \"StarterType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_StarterType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Starter Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"始動タイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"시작 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StarterTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeStarter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeStarter\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeStarter.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeStarter.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeStarter.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeStarter.PredefinedType = \"STARTER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeStarter.StarterType\", \"StarterType\");\r\n            ifcPSE.PropertyName = \"StarterType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_StarterType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StarterTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeStarter.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSwitchingDeviceTypeStarter);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SwitchingDeviceTypeSwitchDisconnector(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSwitchingDeviceTypeSwitchDisconnector = new PropertySetDescription();\r\n         propertySetSwitchingDeviceTypeSwitchDisconnector.Name = \"Pset_SwitchingDeviceTypeSwitchDisconnector\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeSwitchDisconnector\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.ObjectType = \"SwitchDisconnector\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSwitchDisconnector.SwitchDisconnectorType\", \"SwitchDisconnectorType\");\r\n            ifcPSE.PropertyName = \"SwitchDisconnectorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_SwitchDisconnectorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchDisconnectorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSwitchDisconnector.LoadDisconnectionType\", \"LoadDisconnectionType\");\r\n            ifcPSE.PropertyName = \"LoadDisconnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_LoadDisconnectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadDisconnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSwitchDisconnector.HasVisualIndication\", \"HasVisualIndication\");\r\n            ifcPSE.PropertyName = \"HasVisualIndication\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasVisualIndicationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeSwitchDisconnector\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.ObjectType = \"IfcSwitchingDeviceType\";\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.PredefinedType = \"SWITCHDISCONNECTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSwitchDisconnector.SwitchDisconnectorType\", \"SwitchDisconnectorType\");\r\n            ifcPSE.PropertyName = \"SwitchDisconnectorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_SwitchDisconnectorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchDisconnectorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSwitchDisconnector.LoadDisconnectionType\", \"LoadDisconnectionType\");\r\n            ifcPSE.PropertyName = \"LoadDisconnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_LoadDisconnectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadDisconnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSwitchDisconnector.HasVisualIndication\", \"HasVisualIndication\");\r\n            ifcPSE.PropertyName = \"HasVisualIndication\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasVisualIndicationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeSwitchDisconnector\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.PredefinedType = \"SWITCHDISCONNECTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSwitchDisconnector.SwitchDisconnectorType\", \"SwitchDisconnectorType\");\r\n            ifcPSE.PropertyName = \"SwitchDisconnectorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SwitchDisconnectorType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Switch Disconnector Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"高圧遮断機タイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"고압차단기 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchDisconnectorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSwitchDisconnector.LoadDisconnectionType\", \"LoadDisconnectionType\");\r\n            ifcPSE.PropertyName = \"LoadDisconnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_LoadDisconnectionType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Load Disconnection Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"切断タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadDisconnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeSwitchDisconnector\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.PredefinedType = \"SWITCHDISCONNECTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSwitchDisconnector.SwitchDisconnectorType\", \"SwitchDisconnectorType\");\r\n            ifcPSE.PropertyName = \"SwitchDisconnectorType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SwitchDisconnectorType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchDisconnectorTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeSwitchDisconnector.LoadDisconnectionType\", \"LoadDisconnectionType\");\r\n            ifcPSE.PropertyName = \"LoadDisconnectionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_LoadDisconnectionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadDisconnectionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeSwitchDisconnector.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSwitchingDeviceTypeSwitchDisconnector);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SwitchingDeviceTypeToggleSwitch(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSwitchingDeviceTypeToggleSwitch = new PropertySetDescription();\r\n         propertySetSwitchingDeviceTypeToggleSwitch.Name = \"Pset_SwitchingDeviceTypeToggleSwitch\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeToggleSwitch\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeToggleSwitch.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeToggleSwitch.ObjectType = \"ToggleSwitch\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeToggleSwitch.ToggleSwitchType\", \"ToggleSwitchType\");\r\n            ifcPSE.PropertyName = \"ToggleSwitchType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_ToggleSwitchType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ToggleSwitchTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeToggleSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeToggleSwitch.SwitchUsage\", \"SwitchUsage\");\r\n            ifcPSE.PropertyName = \"SwitchUsage\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_SwitchUsage);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchUsageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeToggleSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeToggleSwitch.SwitchActivation\", \"SwitchActivation\");\r\n            ifcPSE.PropertyName = \"SwitchActivation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_SwitchActivation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchActivationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeToggleSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeToggleSwitch.IsIlluminated\", \"IsIlluminated\");\r\n            ifcPSE.PropertyName = \"IsIlluminated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsIlluminatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeToggleSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeToggleSwitch.Legend\", \"Legend\");\r\n            ifcPSE.PropertyName = \"Legend\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LegendCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeToggleSwitch.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeToggleSwitch\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeToggleSwitch.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeToggleSwitch.ObjectType = \"IfcSwitchingDeviceType\";\r\n            propertySetSwitchingDeviceTypeToggleSwitch.PredefinedType = \"TOGGLESWITCH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeToggleSwitch.ToggleSwitchType\", \"ToggleSwitchType\");\r\n            ifcPSE.PropertyName = \"ToggleSwitchType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ToggleSwitchType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ToggleSwitchTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeToggleSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeToggleSwitch.SwitchUsage\", \"SwitchUsage\");\r\n            ifcPSE.PropertyName = \"SwitchUsage\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_SwitchUsage);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchUsageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeToggleSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeToggleSwitch.SwitchActivation\", \"SwitchActivation\");\r\n            ifcPSE.PropertyName = \"SwitchActivation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_SwitchActivation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchActivationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeToggleSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeToggleSwitch.IsIlluminated\", \"IsIlluminated\");\r\n            ifcPSE.PropertyName = \"IsIlluminated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsIlluminatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeToggleSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeToggleSwitch.Legend\", \"Legend\");\r\n            ifcPSE.PropertyName = \"Legend\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LegendCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeToggleSwitch.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeToggleSwitch\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeToggleSwitch.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeToggleSwitch.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeToggleSwitch.PredefinedType = \"TOGGLESWITCH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeToggleSwitch.ToggleSwitchType\", \"ToggleSwitchType\");\r\n            ifcPSE.PropertyName = \"ToggleSwitchType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SwitchingDeviceToggleSwitchType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Toggle Switch Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"レバースイッチタイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"레버스위치 유형\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ToggleSwitchTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeToggleSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeToggleSwitch.SwitchUsage\", \"SwitchUsage\");\r\n            ifcPSE.PropertyName = \"SwitchUsage\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SwitchUsage);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Switch Usage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"スイッチの使用法\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"스위치 사용\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchUsageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeToggleSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeToggleSwitch.SwitchActivation\", \"SwitchActivation\");\r\n            ifcPSE.PropertyName = \"SwitchActivation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SwitchActivation);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Switch Activation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"起動方式\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"기동 방식\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchActivationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeToggleSwitch.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SwitchingDeviceTypeToggleSwitch\"))\r\n         {\r\n            propertySetSwitchingDeviceTypeToggleSwitch.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            propertySetSwitchingDeviceTypeToggleSwitch.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            propertySetSwitchingDeviceTypeToggleSwitch.ObjectType = \"IfcSwitchingDevice\";\r\n            propertySetSwitchingDeviceTypeToggleSwitch.PredefinedType = \"TOGGLESWITCH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeToggleSwitch.ToggleSwitchType\", \"ToggleSwitchType\");\r\n            ifcPSE.PropertyName = \"ToggleSwitchType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SwitchingDeviceToggleSwitchType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ToggleSwitchTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeToggleSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeToggleSwitch.SwitchUsage\", \"SwitchUsage\");\r\n            ifcPSE.PropertyName = \"SwitchUsage\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SwitchUsage);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchUsageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeToggleSwitch.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SwitchingDeviceTypeToggleSwitch.SwitchActivation\", \"SwitchActivation\");\r\n            ifcPSE.PropertyName = \"SwitchActivation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SwitchActivation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SwitchActivationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSwitchingDeviceTypeToggleSwitch.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSwitchingDeviceTypeToggleSwitch);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SymmetricPairCable(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSymmetricPairCable = new PropertySetDescription();\r\n         propertySetSymmetricPairCable.Name = \"Pset_SymmetricPairCable\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SymmetricPairCable\"))\r\n         {\r\n            propertySetSymmetricPairCable.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetSymmetricPairCable.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetSymmetricPairCable.ObjectType = \"IfcCableSegment\";\r\n            propertySetSymmetricPairCable.PredefinedType = \"CABLESEGMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SymmetricPairCable.NumberOfTwistedPairs\", \"NumberOfTwistedPairs\");\r\n            ifcPSE.PropertyName = \"NumberOfTwistedPairs\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfTwistedPairsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSymmetricPairCable.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SymmetricPairCable.NumberOfUntwistedPairs\", \"NumberOfUntwistedPairs\");\r\n            ifcPSE.PropertyName = \"NumberOfUntwistedPairs\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfUntwistedPairsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSymmetricPairCable.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSymmetricPairCable);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SystemFurnitureElementTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSystemFurnitureElementTypeCommon = new PropertySetDescription();\r\n         propertySetSystemFurnitureElementTypeCommon.Name = \"Pset_SystemFurnitureElementTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SystemFurnitureElementTypeCommon\"))\r\n         {\r\n            propertySetSystemFurnitureElementTypeCommon.EntityTypes.Add(IFCEntityType.IfcSystemFurnitureElementType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.IsUsed\", \"IsUsed\");\r\n            ifcPSE.PropertyName = \"IsUsed\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsUsedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.GroupCode\", \"GroupCode\");\r\n            ifcPSE.PropertyName = \"GroupCode\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GroupCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.Finishing\", \"Finishing\");\r\n            ifcPSE.PropertyName = \"Finishing\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SystemFurnitureElementTypeCommon\"))\r\n         {\r\n            propertySetSystemFurnitureElementTypeCommon.EntityTypes.Add(IFCEntityType.IfcSystemFurnitureElementType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.IsUsed\", \"IsUsed\");\r\n            ifcPSE.PropertyName = \"IsUsed\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsUsedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.GroupCode\", \"GroupCode\");\r\n            ifcPSE.PropertyName = \"GroupCode\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GroupCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.Finishing\", \"Finishing\");\r\n            ifcPSE.PropertyName = \"Finishing\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SystemFurnitureElementTypeCommon\"))\r\n         {\r\n            propertySetSystemFurnitureElementTypeCommon.EntityTypes.Add(IFCEntityType.IfcSystemFurnitureElement);\r\n            propertySetSystemFurnitureElementTypeCommon.ObjectType = \"IfcSystemFurnitureElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.IsUsed\", \"IsUsed\");\r\n            ifcPSE.PropertyName = \"IsUsed\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Used\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsUsedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.GroupCode\", \"GroupCode\");\r\n            ifcPSE.PropertyName = \"GroupCode\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Group Code\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GroupCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Width\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Height\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.Finishing\", \"Finishing\");\r\n            ifcPSE.PropertyName = \"Finishing\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Finishing\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SystemFurnitureElementTypeCommon\"))\r\n         {\r\n            propertySetSystemFurnitureElementTypeCommon.EntityTypes.Add(IFCEntityType.IfcSystemFurnitureElement);\r\n            propertySetSystemFurnitureElementTypeCommon.EntityTypes.Add(IFCEntityType.IfcSystemFurnitureElementType);\r\n            propertySetSystemFurnitureElementTypeCommon.ObjectType = \"IfcSystemFurnitureElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.IsUsed\", \"IsUsed\");\r\n            ifcPSE.PropertyName = \"IsUsed\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsUsedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.GroupCode\", \"GroupCode\");\r\n            ifcPSE.PropertyName = \"GroupCode\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GroupCodeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeCommon.Finishing\", \"Finishing\");\r\n            ifcPSE.PropertyName = \"Finishing\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSystemFurnitureElementTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SystemFurnitureElementTypePanel(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSystemFurnitureElementTypePanel = new PropertySetDescription();\r\n         propertySetSystemFurnitureElementTypePanel.Name = \"Pset_SystemFurnitureElementTypePanel\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SystemFurnitureElementTypePanel\"))\r\n         {\r\n            propertySetSystemFurnitureElementTypePanel.EntityTypes.Add(IFCEntityType.IfcSystemFurnitureElementType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypePanel.HasOpening\", \"HasOpening\");\r\n            ifcPSE.PropertyName = \"HasOpening\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasOpeningCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypePanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypePanel.FurniturePanelType\", \"FurniturePanelType\");\r\n            ifcPSE.PropertyName = \"FurniturePanelType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FurniturePanelType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FurniturePanelTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypePanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypePanel.NominalThickness\", \"NominalThickness\");\r\n            ifcPSE.PropertyName = \"NominalThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypePanel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SystemFurnitureElementTypePanel\"))\r\n         {\r\n            propertySetSystemFurnitureElementTypePanel.EntityTypes.Add(IFCEntityType.IfcSystemFurnitureElementType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypePanel.HasOpening\", \"HasOpening\");\r\n            ifcPSE.PropertyName = \"HasOpening\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasOpeningCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypePanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypePanel.FurniturePanelType\", \"FurniturePanelType\");\r\n            ifcPSE.PropertyName = \"FurniturePanelType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FurniturePanelType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FurniturePanelTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypePanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypePanel.NominalThickness\", \"NominalThickness\");\r\n            ifcPSE.PropertyName = \"NominalThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypePanel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SystemFurnitureElementTypePanel\"))\r\n         {\r\n            propertySetSystemFurnitureElementTypePanel.EntityTypes.Add(IFCEntityType.IfcSystemFurnitureElement);\r\n            propertySetSystemFurnitureElementTypePanel.ObjectType = \"IfcSystemFurnitureElement\";\r\n            propertySetSystemFurnitureElementTypePanel.PredefinedType = \"PANEL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypePanel.HasOpening\", \"HasOpening\");\r\n            ifcPSE.PropertyName = \"HasOpening\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Opening\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasOpeningCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypePanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypePanel.FurniturePanelType\", \"FurniturePanelType\");\r\n            ifcPSE.PropertyName = \"FurniturePanelType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FurniturePanelType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Furniture Panel Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FurniturePanelTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypePanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypePanel.NominalThickness\", \"NominalThickness\");\r\n            ifcPSE.PropertyName = \"NominalThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Thickness\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypePanel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SystemFurnitureElementTypePanel\"))\r\n         {\r\n            propertySetSystemFurnitureElementTypePanel.EntityTypes.Add(IFCEntityType.IfcSystemFurnitureElement);\r\n            propertySetSystemFurnitureElementTypePanel.EntityTypes.Add(IFCEntityType.IfcSystemFurnitureElementType);\r\n            propertySetSystemFurnitureElementTypePanel.ObjectType = \"IfcSystemFurnitureElement\";\r\n            propertySetSystemFurnitureElementTypePanel.PredefinedType = \"PANEL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypePanel.HasOpening\", \"HasOpening\");\r\n            ifcPSE.PropertyName = \"HasOpening\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasOpeningCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypePanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypePanel.FurniturePanelType\", \"FurniturePanelType\");\r\n            ifcPSE.PropertyName = \"FurniturePanelType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FurniturePanelType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FurniturePanelTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypePanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypePanel.NominalThickness\", \"NominalThickness\");\r\n            ifcPSE.PropertyName = \"NominalThickness\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypePanel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSystemFurnitureElementTypePanel);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SystemFurnitureElementTypeSubrack(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSystemFurnitureElementTypeSubrack = new PropertySetDescription();\r\n         propertySetSystemFurnitureElementTypeSubrack.Name = \"Pset_SystemFurnitureElementTypeSubrack\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SystemFurnitureElementTypeSubrack\"))\r\n         {\r\n            propertySetSystemFurnitureElementTypeSubrack.EntityTypes.Add(IFCEntityType.IfcSystemFurnitureElement);\r\n            propertySetSystemFurnitureElementTypeSubrack.EntityTypes.Add(IFCEntityType.IfcSystemFurnitureElementType);\r\n            propertySetSystemFurnitureElementTypeSubrack.ObjectType = \"IfcSystemFurnitureElement\";\r\n            propertySetSystemFurnitureElementTypeSubrack.PredefinedType = \"SUBRACK\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeSubrack.NumberOfSlots\", \"NumberOfSlots\");\r\n            ifcPSE.PropertyName = \"NumberOfSlots\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSlotsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeSubrack.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeSubrack.NumberOfUnits\", \"NumberOfUnits\");\r\n            ifcPSE.PropertyName = \"NumberOfUnits\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfUnitsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeSubrack.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeSubrack.NumberOfOccupiedUnits\", \"NumberOfOccupiedUnits\");\r\n            ifcPSE.PropertyName = \"NumberOfOccupiedUnits\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfOccupiedUnitsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeSubrack.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSystemFurnitureElementTypeSubrack);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_SystemFurnitureElementTypeWorkSurface(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetSystemFurnitureElementTypeWorkSurface = new PropertySetDescription();\r\n         propertySetSystemFurnitureElementTypeWorkSurface.Name = \"Pset_SystemFurnitureElementTypeWorkSurface\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SystemFurnitureElementTypeWorkSurface\"))\r\n         {\r\n            propertySetSystemFurnitureElementTypeWorkSurface.EntityTypes.Add(IFCEntityType.IfcSystemFurnitureElementType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.UsePurpose\", \"UsePurpose\");\r\n            ifcPSE.PropertyName = \"UsePurpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UsePurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.SupportType\", \"SupportType\");\r\n            ifcPSE.PropertyName = \"SupportType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FurniturePanelType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupportTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.HangingHeight\", \"HangingHeight\");\r\n            ifcPSE.PropertyName = \"HangingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HangingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.NominalThickness\", \"NominalThickness\");\r\n            ifcPSE.PropertyName = \"NominalThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.ShapeDescription\", \"ShapeDescription\");\r\n            ifcPSE.PropertyName = \"ShapeDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShapeDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SystemFurnitureElementTypeWorkSurface\"))\r\n         {\r\n            propertySetSystemFurnitureElementTypeWorkSurface.EntityTypes.Add(IFCEntityType.IfcSystemFurnitureElementType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.UsePurpose\", \"UsePurpose\");\r\n            ifcPSE.PropertyName = \"UsePurpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UsePurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.SupportType\", \"SupportType\");\r\n            ifcPSE.PropertyName = \"SupportType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FurniturePanelType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupportTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.HangingHeight\", \"HangingHeight\");\r\n            ifcPSE.PropertyName = \"HangingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HangingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.NominalThickness\", \"NominalThickness\");\r\n            ifcPSE.PropertyName = \"NominalThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.ShapeDescription\", \"ShapeDescription\");\r\n            ifcPSE.PropertyName = \"ShapeDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShapeDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SystemFurnitureElementTypeWorkSurface\"))\r\n         {\r\n            propertySetSystemFurnitureElementTypeWorkSurface.EntityTypes.Add(IFCEntityType.IfcSystemFurnitureElement);\r\n            propertySetSystemFurnitureElementTypeWorkSurface.ObjectType = \"IfcSystemFurnitureElement\";\r\n            propertySetSystemFurnitureElementTypeWorkSurface.PredefinedType = \"WORKSURFACE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.UsePurpose\", \"UsePurpose\");\r\n            ifcPSE.PropertyName = \"UsePurpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Use Purpose\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UsePurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.SupportType\", \"SupportType\");\r\n            ifcPSE.PropertyName = \"SupportType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FurniturePanelType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Support Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupportTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.HangingHeight\", \"HangingHeight\");\r\n            ifcPSE.PropertyName = \"HangingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Hanging Height\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HangingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.NominalThickness\", \"NominalThickness\");\r\n            ifcPSE.PropertyName = \"NominalThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Thickness\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.ShapeDescription\", \"ShapeDescription\");\r\n            ifcPSE.PropertyName = \"ShapeDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Shape Description\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShapeDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_SystemFurnitureElementTypeWorkSurface\"))\r\n         {\r\n            propertySetSystemFurnitureElementTypeWorkSurface.EntityTypes.Add(IFCEntityType.IfcSystemFurnitureElement);\r\n            propertySetSystemFurnitureElementTypeWorkSurface.EntityTypes.Add(IFCEntityType.IfcSystemFurnitureElementType);\r\n            propertySetSystemFurnitureElementTypeWorkSurface.ObjectType = \"IfcSystemFurnitureElement\";\r\n            propertySetSystemFurnitureElementTypeWorkSurface.PredefinedType = \"WORKSURFACE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.UsePurpose\", \"UsePurpose\");\r\n            ifcPSE.PropertyName = \"UsePurpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UsePurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.SupportType\", \"SupportType\");\r\n            ifcPSE.PropertyName = \"SupportType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FurniturePanelType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SupportTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.HangingHeight\", \"HangingHeight\");\r\n            ifcPSE.PropertyName = \"HangingHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HangingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.NominalThickness\", \"NominalThickness\");\r\n            ifcPSE.PropertyName = \"NominalThickness\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_SystemFurnitureElementTypeWorkSurface.ShapeDescription\", \"ShapeDescription\");\r\n            ifcPSE.PropertyName = \"ShapeDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShapeDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetSystemFurnitureElementTypeWorkSurface.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetSystemFurnitureElementTypeWorkSurface);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TankOccurrence(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTankOccurrence = new PropertySetDescription();\r\n         propertySetTankOccurrence.Name = \"Pset_TankOccurrence\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankOccurrence\"))\r\n         {\r\n            propertySetTankOccurrence.EntityTypes.Add(IFCEntityType.IfcTank);\r\n            propertySetTankOccurrence.ObjectType = \"IfcTank\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankOccurrence.TankComposition\", \"TankComposition\");\r\n            ifcPSE.PropertyName = \"TankComposition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_TankComposition);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Tank Composition\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水槽構成\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TankCompositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankOccurrence.HasLadder\", \"HasLadder\");\r\n            ifcPSE.PropertyName = \"HasLadder\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Ladder\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"梯子有り\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasLadderCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankOccurrence.HasVisualIndicator\", \"HasVisualIndicator\");\r\n            ifcPSE.PropertyName = \"HasVisualIndicator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Visual Indicator\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"目視型表示器有り\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasVisualIndicatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankOccurrence\"))\r\n         {\r\n            propertySetTankOccurrence.EntityTypes.Add(IFCEntityType.IfcTank);\r\n            propertySetTankOccurrence.ObjectType = \"IfcTank\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankOccurrence.TankComposition\", \"TankComposition\");\r\n            ifcPSE.PropertyName = \"TankComposition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TankComposition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TankCompositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankOccurrence.HasLadder\", \"HasLadder\");\r\n            ifcPSE.PropertyName = \"HasLadder\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasLadderCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankOccurrence.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankOccurrence.HasVisualIndicator\", \"HasVisualIndicator\");\r\n            ifcPSE.PropertyName = \"HasVisualIndicator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasVisualIndicatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankOccurrence.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTankOccurrence);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TankPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTankPHistory = new PropertySetDescription();\r\n         propertySetTankPHistory.Name = \"Pset_TankPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankPHistory\"))\r\n         {\r\n            propertySetTankPHistory.EntityTypes.Add(IFCEntityType.IfcTank);\r\n            propertySetTankPHistory.ObjectType = \"IfcTank\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankPHistory.Temperature\", \"Temperature\");\r\n            ifcPSE.PropertyName = \"Temperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankPHistory.Pressure\", \"Pressure\");\r\n            ifcPSE.PropertyName = \"Pressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankPHistory.Level\", \"Level\");\r\n            ifcPSE.PropertyName = \"Level\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTankPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TankTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTankTypeCommon = new PropertySetDescription();\r\n         propertySetTankTypeCommon.Name = \"Pset_TankTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypeCommon\"))\r\n         {\r\n            propertySetTankTypeCommon.EntityTypes.Add(IFCEntityType.IfcTankType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.Type\", \"Type\");\r\n            ifcPSE.PropertyName = \"Type\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_TankType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.AccessType\", \"AccessType\");\r\n            ifcPSE.PropertyName = \"AccessType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_TankAccessType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.NominalLengthOrDiameter\", \"NominalLengthOrDiameter\");\r\n            ifcPSE.PropertyName = \"NominalLengthOrDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthOrDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.NominalWidthOrDiameter\", \"NominalWidthOrDiameter\");\r\n            ifcPSE.PropertyName = \"NominalWidthOrDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthOrDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.NominalCapacity\", \"NominalCapacity\");\r\n            ifcPSE.PropertyName = \"NominalCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.EffectiveCapacity\", \"EffectiveCapacity\");\r\n            ifcPSE.PropertyName = \"EffectiveCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectiveCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.OperatingWeight\", \"OperatingWeight\");\r\n            ifcPSE.PropertyName = \"OperatingWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperatingWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.MaterialThickness\", \"MaterialThickness\");\r\n            ifcPSE.PropertyName = \"MaterialThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypeCommon\"))\r\n         {\r\n            propertySetTankTypeCommon.EntityTypes.Add(IFCEntityType.IfcTankType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.Type\", \"Type\");\r\n            ifcPSE.PropertyName = \"Type\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_TankType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.AccessType\", \"AccessType\");\r\n            ifcPSE.PropertyName = \"AccessType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_TankAccessType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.NominalLengthOrDiameter\", \"NominalLengthOrDiameter\");\r\n            ifcPSE.PropertyName = \"NominalLengthOrDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthOrDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.NominalWidthOrDiameter\", \"NominalWidthOrDiameter\");\r\n            ifcPSE.PropertyName = \"NominalWidthOrDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthOrDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.NominalCapacity\", \"NominalCapacity\");\r\n            ifcPSE.PropertyName = \"NominalCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.EffectiveCapacity\", \"EffectiveCapacity\");\r\n            ifcPSE.PropertyName = \"EffectiveCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectiveCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.OperatingWeight\", \"OperatingWeight\");\r\n            ifcPSE.PropertyName = \"OperatingWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperatingWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.MaterialThickness\", \"MaterialThickness\");\r\n            ifcPSE.PropertyName = \"MaterialThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypeCommon\"))\r\n         {\r\n            propertySetTankTypeCommon.EntityTypes.Add(IFCEntityType.IfcTank);\r\n            propertySetTankTypeCommon.ObjectType = \"IfcTank\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.AccessType\", \"AccessType\");\r\n            ifcPSE.PropertyName = \"AccessType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_TankAccessType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Access Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"点検タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.StorageType\", \"StorageType\");\r\n            ifcPSE.PropertyName = \"StorageType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_TankStorageType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Storage Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"貯蔵タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StorageTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.NominalLengthOrDiameter\", \"NominalLengthOrDiameter\");\r\n            ifcPSE.PropertyName = \"NominalLengthOrDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Length Or Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"公称長さ又は直径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthOrDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.NominalWidthOrDiameter\", \"NominalWidthOrDiameter\");\r\n            ifcPSE.PropertyName = \"NominalWidthOrDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Width Or Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"公称幅又は直径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthOrDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Depth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"公称深さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.NominalCapacity\", \"NominalCapacity\");\r\n            ifcPSE.PropertyName = \"NominalCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Capacity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"公称容量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.EffectiveCapacity\", \"EffectiveCapacity\");\r\n            ifcPSE.PropertyName = \"EffectiveCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Effective Capacity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"有効容量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectiveCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.OperatingWeight\", \"OperatingWeight\");\r\n            ifcPSE.PropertyName = \"OperatingWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Operating Weight\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"運転重量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperatingWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.PatternType\", \"PatternType\");\r\n            ifcPSE.PropertyName = \"PatternType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_TankPatternType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pattern Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"パターンタイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PatternTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.EndShapeType\", \"EndShapeType\");\r\n            ifcPSE.PropertyName = \"EndShapeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_EndShapeType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"End Shape Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"末端形状タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndShapeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.FirstCurvatureRadius\", \"FirstCurvatureRadius\");\r\n            ifcPSE.PropertyName = \"FirstCurvatureRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"First Curvature Radius\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最初の曲率半径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FirstCurvatureRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.SecondCurvatureRadius\", \"SecondCurvatureRadius\");\r\n            ifcPSE.PropertyName = \"SecondCurvatureRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Second Curvature Radius\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"2番目の曲率半径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondCurvatureRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.NumberOfSections\", \"NumberOfSections\");\r\n            ifcPSE.PropertyName = \"NumberOfSections\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Sections\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"セクションの数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSectionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypeCommon\"))\r\n         {\r\n            propertySetTankTypeCommon.EntityTypes.Add(IFCEntityType.IfcTank);\r\n            propertySetTankTypeCommon.EntityTypes.Add(IFCEntityType.IfcTankType);\r\n            propertySetTankTypeCommon.ObjectType = \"IfcTank\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.AccessType\", \"AccessType\");\r\n            ifcPSE.PropertyName = \"AccessType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TankAccessType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccessTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.StorageType\", \"StorageType\");\r\n            ifcPSE.PropertyName = \"StorageType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TankStorageType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StorageTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.NominalLengthOrDiameter\", \"NominalLengthOrDiameter\");\r\n            ifcPSE.PropertyName = \"NominalLengthOrDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthOrDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.NominalWidthOrDiameter\", \"NominalWidthOrDiameter\");\r\n            ifcPSE.PropertyName = \"NominalWidthOrDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthOrDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.TankNominalCapacity\", \"TankNominalCapacity\");\r\n            ifcPSE.PropertyName = \"TankNominalCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TankNominalCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.EffectiveCapacity\", \"EffectiveCapacity\");\r\n            ifcPSE.PropertyName = \"EffectiveCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EffectiveCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.OperatingWeight\", \"OperatingWeight\");\r\n            ifcPSE.PropertyName = \"OperatingWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperatingWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.PatternType\", \"PatternType\");\r\n            ifcPSE.PropertyName = \"PatternType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TankPatternType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PatternTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.EndShapeType\", \"EndShapeType\");\r\n            ifcPSE.PropertyName = \"EndShapeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_EndShapeType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndShapeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.FirstCurvatureRadius\", \"FirstCurvatureRadius\");\r\n            ifcPSE.PropertyName = \"FirstCurvatureRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FirstCurvatureRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.SecondCurvatureRadius\", \"SecondCurvatureRadius\");\r\n            ifcPSE.PropertyName = \"SecondCurvatureRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondCurvatureRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeCommon.NumberOfSections\", \"NumberOfSections\");\r\n            ifcPSE.PropertyName = \"NumberOfSections\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSectionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTankTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TankTypeExpansion(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTankTypeExpansion = new PropertySetDescription();\r\n         propertySetTankTypeExpansion.Name = \"Pset_TankTypeExpansion\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypeExpansion\"))\r\n         {\r\n            propertySetTankTypeExpansion.EntityTypes.Add(IFCEntityType.IfcTankType);\r\n            propertySetTankTypeExpansion.ObjectType = \"IfcTankType\";\r\n            propertySetTankTypeExpansion.PredefinedType = \"EXPANSION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeExpansion.ChargePressure\", \"ChargePressure\");\r\n            ifcPSE.PropertyName = \"ChargePressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChargePressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeExpansion.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeExpansion.PressureRegulatorSetting\", \"PressureRegulatorSetting\");\r\n            ifcPSE.PropertyName = \"PressureRegulatorSetting\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRegulatorSettingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeExpansion.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeExpansion.ReliefValveSetting\", \"ReliefValveSetting\");\r\n            ifcPSE.PropertyName = \"ReliefValveSetting\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReliefValveSettingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeExpansion.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypeExpansion\"))\r\n         {\r\n            propertySetTankTypeExpansion.EntityTypes.Add(IFCEntityType.IfcTankType);\r\n            propertySetTankTypeExpansion.ObjectType = \"IfcTankType\";\r\n            propertySetTankTypeExpansion.PredefinedType = \"EXPANSION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeExpansion.ChargePressure\", \"ChargePressure\");\r\n            ifcPSE.PropertyName = \"ChargePressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChargePressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeExpansion.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeExpansion.PressureRegulatorSetting\", \"PressureRegulatorSetting\");\r\n            ifcPSE.PropertyName = \"PressureRegulatorSetting\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRegulatorSettingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeExpansion.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeExpansion.ReliefValveSetting\", \"ReliefValveSetting\");\r\n            ifcPSE.PropertyName = \"ReliefValveSetting\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReliefValveSettingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeExpansion.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypeExpansion\"))\r\n         {\r\n            propertySetTankTypeExpansion.EntityTypes.Add(IFCEntityType.IfcTank);\r\n            propertySetTankTypeExpansion.ObjectType = \"IfcTank\";\r\n            propertySetTankTypeExpansion.PredefinedType = \"EXPANSION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeExpansion.ChargePressure\", \"ChargePressure\");\r\n            ifcPSE.PropertyName = \"ChargePressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Charge Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"加圧力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChargePressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeExpansion.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeExpansion.PressureRegulatorSetting\", \"PressureRegulatorSetting\");\r\n            ifcPSE.PropertyName = \"PressureRegulatorSetting\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure Regulator Setting\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧力調整設定\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRegulatorSettingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeExpansion.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeExpansion.ReliefValveSetting\", \"ReliefValveSetting\");\r\n            ifcPSE.PropertyName = \"ReliefValveSetting\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Relief Valve Setting\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"安全弁設定\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReliefValveSettingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeExpansion.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypeExpansion\"))\r\n         {\r\n            propertySetTankTypeExpansion.EntityTypes.Add(IFCEntityType.IfcTank);\r\n            propertySetTankTypeExpansion.EntityTypes.Add(IFCEntityType.IfcTankType);\r\n            propertySetTankTypeExpansion.ObjectType = \"IfcTank\";\r\n            propertySetTankTypeExpansion.PredefinedType = \"EXPANSION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeExpansion.ChargePressure\", \"ChargePressure\");\r\n            ifcPSE.PropertyName = \"ChargePressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChargePressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeExpansion.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeExpansion.PressureRegulatorSetting\", \"PressureRegulatorSetting\");\r\n            ifcPSE.PropertyName = \"PressureRegulatorSetting\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRegulatorSettingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeExpansion.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeExpansion.ReliefValveSetting\", \"ReliefValveSetting\");\r\n            ifcPSE.PropertyName = \"ReliefValveSetting\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReliefValveSettingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeExpansion.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTankTypeExpansion);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TankTypePreformed(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTankTypePreformed = new PropertySetDescription();\r\n         propertySetTankTypePreformed.Name = \"Pset_TankTypePreformed\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypePreformed\"))\r\n         {\r\n            propertySetTankTypePreformed.EntityTypes.Add(IFCEntityType.IfcTankType);\r\n            propertySetTankTypePreformed.ObjectType = \"IfcTankType\";\r\n            propertySetTankTypePreformed.PredefinedType = \"PREFORMED\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePreformed.PatternType\", \"PatternType\");\r\n            ifcPSE.PropertyName = \"PatternType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_TankPatternType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PatternTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePreformed.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePreformed.EndShapeType\", \"EndShapeType\");\r\n            ifcPSE.PropertyName = \"EndShapeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_EndShapeType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndShapeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePreformed.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePreformed.FirstCurvatureRadius\", \"FirstCurvatureRadius\");\r\n            ifcPSE.PropertyName = \"FirstCurvatureRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FirstCurvatureRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePreformed.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePreformed.SecondCurvatureRadius\", \"SecondCurvatureRadius\");\r\n            ifcPSE.PropertyName = \"SecondCurvatureRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondCurvatureRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePreformed.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypePreformed\"))\r\n         {\r\n            propertySetTankTypePreformed.EntityTypes.Add(IFCEntityType.IfcTankType);\r\n            propertySetTankTypePreformed.ObjectType = \"IfcTankType\";\r\n            propertySetTankTypePreformed.PredefinedType = \"PREFORMED\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePreformed.PatternType\", \"PatternType\");\r\n            ifcPSE.PropertyName = \"PatternType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_TankPatternType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PatternTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePreformed.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePreformed.EndShapeType\", \"EndShapeType\");\r\n            ifcPSE.PropertyName = \"EndShapeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_EndShapeType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndShapeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePreformed.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePreformed.FirstCurvatureRadius\", \"FirstCurvatureRadius\");\r\n            ifcPSE.PropertyName = \"FirstCurvatureRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FirstCurvatureRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePreformed.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePreformed.SecondCurvatureRadius\", \"SecondCurvatureRadius\");\r\n            ifcPSE.PropertyName = \"SecondCurvatureRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondCurvatureRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePreformed.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypePreformed\"))\r\n         {\r\n            propertySetTankTypePreformed.EntityTypes.Add(IFCEntityType.IfcTank);\r\n            propertySetTankTypePreformed.ObjectType = \"IfcTank\";\r\n            propertySetTankTypePreformed.PredefinedType = \"PREFORMED\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePreformed.PatternType\", \"PatternType\");\r\n            ifcPSE.PropertyName = \"PatternType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_TankPatternType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pattern Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"パターンタイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PatternTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePreformed.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePreformed.EndShapeType\", \"EndShapeType\");\r\n            ifcPSE.PropertyName = \"EndShapeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_EndShapeType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"End Shape Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"末端形状タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndShapeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePreformed.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePreformed.FirstCurvatureRadius\", \"FirstCurvatureRadius\");\r\n            ifcPSE.PropertyName = \"FirstCurvatureRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"First Curvature Radius\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最初の曲率半径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FirstCurvatureRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePreformed.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePreformed.SecondCurvatureRadius\", \"SecondCurvatureRadius\");\r\n            ifcPSE.PropertyName = \"SecondCurvatureRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Second Curvature Radius\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"2番目の曲率半径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondCurvatureRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePreformed.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypePreformed\"))\r\n         {\r\n            propertySetTankTypePreformed.EntityTypes.Add(IFCEntityType.IfcTank);\r\n            propertySetTankTypePreformed.EntityTypes.Add(IFCEntityType.IfcTankType);\r\n            propertySetTankTypePreformed.ObjectType = \"IfcTank\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePreformed.PatternType\", \"PatternType\");\r\n            ifcPSE.PropertyName = \"PatternType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TankPatternType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PatternTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePreformed.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePreformed.EndShapeType\", \"EndShapeType\");\r\n            ifcPSE.PropertyName = \"EndShapeType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_EndShapeType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EndShapeTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePreformed.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePreformed.FirstCurvatureRadius\", \"FirstCurvatureRadius\");\r\n            ifcPSE.PropertyName = \"FirstCurvatureRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FirstCurvatureRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePreformed.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePreformed.SecondCurvatureRadius\", \"SecondCurvatureRadius\");\r\n            ifcPSE.PropertyName = \"SecondCurvatureRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondCurvatureRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePreformed.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTankTypePreformed);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TankTypePressureVessel(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTankTypePressureVessel = new PropertySetDescription();\r\n         propertySetTankTypePressureVessel.Name = \"Pset_TankTypePressureVessel\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypePressureVessel\"))\r\n         {\r\n            propertySetTankTypePressureVessel.EntityTypes.Add(IFCEntityType.IfcTankType);\r\n            propertySetTankTypePressureVessel.ObjectType = \"PressureVessel\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePressureVessel.ChargePressure\", \"ChargePressure\");\r\n            ifcPSE.PropertyName = \"ChargePressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChargePressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePressureVessel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePressureVessel.PressureRegulatorSetting\", \"PressureRegulatorSetting\");\r\n            ifcPSE.PropertyName = \"PressureRegulatorSetting\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRegulatorSettingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePressureVessel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePressureVessel.ReliefValveSetting\", \"ReliefValveSetting\");\r\n            ifcPSE.PropertyName = \"ReliefValveSetting\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReliefValveSettingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePressureVessel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypePressureVessel\"))\r\n         {\r\n            propertySetTankTypePressureVessel.EntityTypes.Add(IFCEntityType.IfcTankType);\r\n            propertySetTankTypePressureVessel.ObjectType = \"IfcTankType\";\r\n            propertySetTankTypePressureVessel.PredefinedType = \"PRESSUREVESSEL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePressureVessel.ChargePressure\", \"ChargePressure\");\r\n            ifcPSE.PropertyName = \"ChargePressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChargePressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePressureVessel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePressureVessel.PressureRegulatorSetting\", \"PressureRegulatorSetting\");\r\n            ifcPSE.PropertyName = \"PressureRegulatorSetting\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRegulatorSettingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePressureVessel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePressureVessel.ReliefValveSetting\", \"ReliefValveSetting\");\r\n            ifcPSE.PropertyName = \"ReliefValveSetting\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReliefValveSettingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePressureVessel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypePressureVessel\"))\r\n         {\r\n            propertySetTankTypePressureVessel.EntityTypes.Add(IFCEntityType.IfcTank);\r\n            propertySetTankTypePressureVessel.ObjectType = \"IfcTank\";\r\n            propertySetTankTypePressureVessel.PredefinedType = \"PRESSUREVESSEL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePressureVessel.ChargePressure\", \"ChargePressure\");\r\n            ifcPSE.PropertyName = \"ChargePressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Charge Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"加圧力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChargePressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePressureVessel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePressureVessel.PressureRegulatorSetting\", \"PressureRegulatorSetting\");\r\n            ifcPSE.PropertyName = \"PressureRegulatorSetting\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Pressure Regulator Setting\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"圧力調整設定\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRegulatorSettingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePressureVessel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePressureVessel.ReliefValveSetting\", \"ReliefValveSetting\");\r\n            ifcPSE.PropertyName = \"ReliefValveSetting\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Relief Valve Setting\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"安全弁設定\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReliefValveSettingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePressureVessel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypePressureVessel\"))\r\n         {\r\n            propertySetTankTypePressureVessel.EntityTypes.Add(IFCEntityType.IfcTank);\r\n            propertySetTankTypePressureVessel.EntityTypes.Add(IFCEntityType.IfcTankType);\r\n            propertySetTankTypePressureVessel.ObjectType = \"IfcTank\";\r\n            propertySetTankTypePressureVessel.PredefinedType = \"PRESSUREVESSEL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePressureVessel.ChargePressure\", \"ChargePressure\");\r\n            ifcPSE.PropertyName = \"ChargePressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChargePressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePressureVessel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePressureVessel.PressureRegulatorSetting\", \"PressureRegulatorSetting\");\r\n            ifcPSE.PropertyName = \"PressureRegulatorSetting\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PressureRegulatorSettingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePressureVessel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypePressureVessel.ReliefValveSetting\", \"ReliefValveSetting\");\r\n            ifcPSE.PropertyName = \"ReliefValveSetting\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReliefValveSettingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypePressureVessel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTankTypePressureVessel);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TankTypeSectional(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTankTypeSectional = new PropertySetDescription();\r\n         propertySetTankTypeSectional.Name = \"Pset_TankTypeSectional\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypeSectional\"))\r\n         {\r\n            propertySetTankTypeSectional.EntityTypes.Add(IFCEntityType.IfcTankType);\r\n            propertySetTankTypeSectional.ObjectType = \"IfcTankType\";\r\n            propertySetTankTypeSectional.PredefinedType = \"SECTIONAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeSectional.NumberOfSections\", \"NumberOfSections\");\r\n            ifcPSE.PropertyName = \"NumberOfSections\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSectionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeSectional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeSectional.SectionLength\", \"SectionLength\");\r\n            ifcPSE.PropertyName = \"SectionLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SectionLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeSectional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeSectional.SectionWidth\", \"SectionWidth\");\r\n            ifcPSE.PropertyName = \"SectionWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SectionWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeSectional.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypeSectional\"))\r\n         {\r\n            propertySetTankTypeSectional.EntityTypes.Add(IFCEntityType.IfcTankType);\r\n            propertySetTankTypeSectional.ObjectType = \"IfcTankType\";\r\n            propertySetTankTypeSectional.PredefinedType = \"SECTIONAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeSectional.NumberOfSections\", \"NumberOfSections\");\r\n            ifcPSE.PropertyName = \"NumberOfSections\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSectionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeSectional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeSectional.SectionLength\", \"SectionLength\");\r\n            ifcPSE.PropertyName = \"SectionLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SectionLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeSectional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeSectional.SectionWidth\", \"SectionWidth\");\r\n            ifcPSE.PropertyName = \"SectionWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SectionWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeSectional.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypeSectional\"))\r\n         {\r\n            propertySetTankTypeSectional.EntityTypes.Add(IFCEntityType.IfcTank);\r\n            propertySetTankTypeSectional.ObjectType = \"IfcTank\";\r\n            propertySetTankTypeSectional.PredefinedType = \"SECTIONAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeSectional.NumberOfSections\", \"NumberOfSections\");\r\n            ifcPSE.PropertyName = \"NumberOfSections\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Sections\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"セクションの数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSectionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeSectional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeSectional.SectionLength\", \"SectionLength\");\r\n            ifcPSE.PropertyName = \"SectionLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Section Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"セクションの長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SectionLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeSectional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeSectional.SectionWidth\", \"SectionWidth\");\r\n            ifcPSE.PropertyName = \"SectionWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Section Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"セクションの幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SectionWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeSectional.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TankTypeSectional\"))\r\n         {\r\n            propertySetTankTypeSectional.EntityTypes.Add(IFCEntityType.IfcTank);\r\n            propertySetTankTypeSectional.EntityTypes.Add(IFCEntityType.IfcTankType);\r\n            propertySetTankTypeSectional.ObjectType = \"IfcTank\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeSectional.NumberOfSections\", \"NumberOfSections\");\r\n            ifcPSE.PropertyName = \"NumberOfSections\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfSectionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeSectional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeSectional.SectionLength\", \"SectionLength\");\r\n            ifcPSE.PropertyName = \"SectionLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SectionLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeSectional.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TankTypeSectional.SectionWidth\", \"SectionWidth\");\r\n            ifcPSE.PropertyName = \"SectionWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SectionWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTankTypeSectional.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTankTypeSectional);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TelecomCableGeneral(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTelecomCableGeneral = new PropertySetDescription();\r\n         propertySetTelecomCableGeneral.Name = \"Pset_TelecomCableGeneral\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TelecomCableGeneral\"))\r\n         {\r\n            propertySetTelecomCableGeneral.EntityTypes.Add(IFCEntityType.IfcCableFitting);\r\n            propertySetTelecomCableGeneral.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            propertySetTelecomCableGeneral.EntityTypes.Add(IFCEntityType.IfcCableFittingType);\r\n            propertySetTelecomCableGeneral.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            propertySetTelecomCableGeneral.ObjectType = \"IfcCableFitting\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TelecomCableGeneral.Attenuation\", \"Attenuation\");\r\n            ifcPSE.PropertyName = \"Attenuation\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AttenuationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTelecomCableGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TelecomCableGeneral.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTelecomCableGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TelecomCableGeneral.IsFireResistant\", \"IsFireResistant\");\r\n            ifcPSE.PropertyName = \"IsFireResistant\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsFireResistantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTelecomCableGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TelecomCableGeneral.NominalDiameter\", \"NominalDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTelecomCableGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TelecomCableGeneral.JacketColour\", \"JacketColour\");\r\n            ifcPSE.PropertyName = \"JacketColour\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.JacketColourCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTelecomCableGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TelecomCableGeneral.CableFunctionType\", \"CableFunctionType\");\r\n            ifcPSE.PropertyName = \"CableFunctionType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CableFunctionType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CableFunctionTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTelecomCableGeneral.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TelecomCableGeneral.CableArmourType\", \"CableArmourType\");\r\n            ifcPSE.PropertyName = \"CableArmourType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CableArmourType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CableArmourTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTelecomCableGeneral.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTelecomCableGeneral);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TendonAnchorCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTendonAnchorCommon = new PropertySetDescription();\r\n         propertySetTendonAnchorCommon.Name = \"Pset_TendonAnchorCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TendonAnchorCommon\"))\r\n         {\r\n            propertySetTendonAnchorCommon.EntityTypes.Add(IFCEntityType.IfcTendonAnchor);\r\n            propertySetTendonAnchorCommon.ObjectType = \"IfcTendonAnchor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TendonAnchorCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTendonAnchorCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TendonAnchorCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTendonAnchorCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTendonAnchorCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TendonCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTendonCommon = new PropertySetDescription();\r\n         propertySetTendonCommon.Name = \"Pset_TendonCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TendonCommon\"))\r\n         {\r\n            propertySetTendonCommon.EntityTypes.Add(IFCEntityType.IfcTendon);\r\n            propertySetTendonCommon.ObjectType = \"IfcTendon\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TendonCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTendonCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TendonCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTendonCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TendonCommon.NominalDiameter\", \"NominalDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTendonCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TendonCommon.SheathDiameter\", \"SheathDiameter\");\r\n            ifcPSE.PropertyName = \"SheathDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SheathDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTendonCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TendonCommon.TensionForce\", \"TensionForce\");\r\n            ifcPSE.PropertyName = \"TensionForce\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TensionForceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTendonCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TendonCommon.PreStress\", \"PreStress\");\r\n            ifcPSE.PropertyName = \"PreStress\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PreStressCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTendonCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TendonCommon.FrictionCoefficient\", \"FrictionCoefficient\");\r\n            ifcPSE.PropertyName = \"FrictionCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrictionCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTendonCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TendonCommon.AnchorageSlip\", \"AnchorageSlip\");\r\n            ifcPSE.PropertyName = \"AnchorageSlip\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnchorageSlipCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTendonCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TendonCommon.MinCurvatureRadius\", \"MinCurvatureRadius\");\r\n            ifcPSE.PropertyName = \"MinCurvatureRadius\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinCurvatureRadiusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTendonCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTendonCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ThermalLoad(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetThermalLoad = new PropertySetDescription();\r\n         propertySetThermalLoad.Name = \"Pset_ThermalLoad\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ThermalLoad\"))\r\n         {\r\n            propertySetThermalLoad.EntityTypes.Add(IFCEntityType.IfcSpatialElement);\r\n            propertySetThermalLoad.EntityTypes.Add(IFCEntityType.IfcSpatialElementType);\r\n            propertySetThermalLoad.ObjectType = \"IfcSpatialElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoad.OccupancyDiversity\", \"OccupancyDiversity\");\r\n            ifcPSE.PropertyName = \"OccupancyDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoad.LightingDiversity\", \"LightingDiversity\");\r\n            ifcPSE.PropertyName = \"LightingDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoad.ApplianceDiversity\", \"ApplianceDiversity\");\r\n            ifcPSE.PropertyName = \"ApplianceDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplianceDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoad.OutsideAirPerPerson\", \"OutsideAirPerPerson\");\r\n            ifcPSE.PropertyName = \"OutsideAirPerPerson\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutsideAirPerPersonCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoad.ReceptacleLoadIntensity\", \"ReceptacleLoadIntensity\");\r\n            ifcPSE.PropertyName = \"ReceptacleLoadIntensity\";\r\n            ifcPSE.PropertyType = PropertyType.HeatFluxDensity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReceptacleLoadIntensityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoad.AppliancePercentLoadToRadiant\", \"AppliancePercentLoadToRadiant\");\r\n            ifcPSE.PropertyName = \"AppliancePercentLoadToRadiant\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AppliancePercentLoadToRadiantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoad.LightingLoadIntensity\", \"LightingLoadIntensity\");\r\n            ifcPSE.PropertyName = \"LightingLoadIntensity\";\r\n            ifcPSE.PropertyType = PropertyType.HeatFluxDensity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingLoadIntensityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoad.LightingPercentLoadToReturnAir\", \"LightingPercentLoadToReturnAir\");\r\n            ifcPSE.PropertyName = \"LightingPercentLoadToReturnAir\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingPercentLoadToReturnAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoad.TotalCoolingLoad\", \"TotalCoolingLoad\");\r\n            ifcPSE.PropertyName = \"TotalCoolingLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalCoolingLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoad.TotalHeatingLoad\", \"TotalHeatingLoad\");\r\n            ifcPSE.PropertyName = \"TotalHeatingLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatingLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoad.InfiltrationDiversitySummer\", \"InfiltrationDiversitySummer\");\r\n            ifcPSE.PropertyName = \"InfiltrationDiversitySummer\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationDiversitySummerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoad.InfiltrationDiversityWinter\", \"InfiltrationDiversityWinter\");\r\n            ifcPSE.PropertyName = \"InfiltrationDiversityWinter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationDiversityWinterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoad.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoad.LoadSafetyFactor\", \"LoadSafetyFactor\");\r\n            ifcPSE.PropertyName = \"LoadSafetyFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadSafetyFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoad.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetThermalLoad);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ThermalLoadAggregate(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetThermalLoadAggregate = new PropertySetDescription();\r\n         propertySetThermalLoadAggregate.Name = \"Pset_ThermalLoadAggregate\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ThermalLoadAggregate\"))\r\n         {\r\n            propertySetThermalLoadAggregate.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetThermalLoadAggregate.EntityTypes.Add(IFCEntityType.IfcSpatialStructureElement);\r\n            propertySetThermalLoadAggregate.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.TotalCoolingLoad\", \"TotalCoolingLoad\");\r\n            ifcPSE.PropertyName = \"TotalCoolingLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalCoolingLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.TotalHeatingLoad\", \"TotalHeatingLoad\");\r\n            ifcPSE.PropertyName = \"TotalHeatingLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatingLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.LightingDiversity\", \"LightingDiversity\");\r\n            ifcPSE.PropertyName = \"LightingDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.InfiltrationDiversitySummer\", \"InfiltrationDiversitySummer\");\r\n            ifcPSE.PropertyName = \"InfiltrationDiversitySummer\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationDiversitySummerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.InfiltrationDiversityWinter\", \"InfiltrationDiversityWinter\");\r\n            ifcPSE.PropertyName = \"InfiltrationDiversityWinter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationDiversityWinterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.ApplianceDiversity\", \"ApplianceDiversity\");\r\n            ifcPSE.PropertyName = \"ApplianceDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplianceDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.LoadSafetyFactor\", \"LoadSafetyFactor\");\r\n            ifcPSE.PropertyName = \"LoadSafetyFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadSafetyFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ThermalLoadAggregate\"))\r\n         {\r\n            propertySetThermalLoadAggregate.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            propertySetThermalLoadAggregate.EntityTypes.Add(IFCEntityType.IfcSpatialStructureElement);\r\n            propertySetThermalLoadAggregate.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.TotalCoolingLoad\", \"TotalCoolingLoad\");\r\n            ifcPSE.PropertyName = \"TotalCoolingLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalCoolingLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.TotalHeatingLoad\", \"TotalHeatingLoad\");\r\n            ifcPSE.PropertyName = \"TotalHeatingLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatingLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.LightingDiversity\", \"LightingDiversity\");\r\n            ifcPSE.PropertyName = \"LightingDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.InfiltrationDiversitySummer\", \"InfiltrationDiversitySummer\");\r\n            ifcPSE.PropertyName = \"InfiltrationDiversitySummer\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationDiversitySummerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.InfiltrationDiversityWinter\", \"InfiltrationDiversityWinter\");\r\n            ifcPSE.PropertyName = \"InfiltrationDiversityWinter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationDiversityWinterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.ApplianceDiversity\", \"ApplianceDiversity\");\r\n            ifcPSE.PropertyName = \"ApplianceDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplianceDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.LoadSafetyFactor\", \"LoadSafetyFactor\");\r\n            ifcPSE.PropertyName = \"LoadSafetyFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadSafetyFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ThermalLoadAggregate\"))\r\n         {\r\n            propertySetThermalLoadAggregate.EntityTypes.Add(IFCEntityType.IfcSpatialElement);\r\n            propertySetThermalLoadAggregate.ObjectType = \"IfcSpatialElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.TotalCoolingLoad\", \"TotalCoolingLoad\");\r\n            ifcPSE.PropertyName = \"TotalCoolingLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Cooling Load\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"冷房負荷\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"냉방부하\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalCoolingLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.TotalHeatingLoad\", \"TotalHeatingLoad\");\r\n            ifcPSE.PropertyName = \"TotalHeatingLoad\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Heating Load\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"暖房負荷\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"난방 부하\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeatingLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.LightingDiversity\", \"LightingDiversity\");\r\n            ifcPSE.PropertyName = \"LightingDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lighting Diversity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"照明負荷係数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조명 부하계수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.InfiltrationDiversitySummer\", \"InfiltrationDiversitySummer\");\r\n            ifcPSE.PropertyName = \"InfiltrationDiversitySummer\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Infiltration Diversity Summer\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"夏期すき間換気率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"여름 틈새 환기 비율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationDiversitySummerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.InfiltrationDiversityWinter\", \"InfiltrationDiversityWinter\");\r\n            ifcPSE.PropertyName = \"InfiltrationDiversityWinter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Infiltration Diversity Winter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"冬期すき間換気率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"겨울철 틈새 환기비율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationDiversityWinterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.ApplianceDiversity\", \"ApplianceDiversity\");\r\n            ifcPSE.PropertyName = \"ApplianceDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Appliance Diversity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"機器の負荷率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"기기의 부하율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplianceDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadAggregate.LoadSafetyFactor\", \"LoadSafetyFactor\");\r\n            ifcPSE.PropertyName = \"LoadSafetyFactor\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Load Safety Factor\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"負荷の安全率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"부하의 안전율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadSafetyFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadAggregate.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetThermalLoadAggregate);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ThermalLoadDesignCriteria(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetThermalLoadDesignCriteria = new PropertySetDescription();\r\n         propertySetThermalLoadDesignCriteria.Name = \"Pset_ThermalLoadDesignCriteria\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ThermalLoadDesignCriteria\"))\r\n         {\r\n            propertySetThermalLoadDesignCriteria.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetThermalLoadDesignCriteria.EntityTypes.Add(IFCEntityType.IfcSpatialStructureElement);\r\n            propertySetThermalLoadDesignCriteria.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            propertySetThermalLoadDesignCriteria.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadDesignCriteria.OccupancyDiversity\", \"OccupancyDiversity\");\r\n            ifcPSE.PropertyName = \"OccupancyDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadDesignCriteria.OutsideAirPerPerson\", \"OutsideAirPerPerson\");\r\n            ifcPSE.PropertyName = \"OutsideAirPerPerson\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutsideAirPerPersonCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadDesignCriteria.ReceptacleLoadIntensity\", \"ReceptacleLoadIntensity\");\r\n            ifcPSE.PropertyName = \"ReceptacleLoadIntensity\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReceptacleLoadIntensityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadDesignCriteria.AppliancePercentLoadToRadiant\", \"AppliancePercentLoadToRadiant\");\r\n            ifcPSE.PropertyName = \"AppliancePercentLoadToRadiant\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AppliancePercentLoadToRadiantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadDesignCriteria.LightingLoadIntensity\", \"LightingLoadIntensity\");\r\n            ifcPSE.PropertyName = \"LightingLoadIntensity\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingLoadIntensityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadDesignCriteria.LightingPercentLoadToReturnAir\", \"LightingPercentLoadToReturnAir\");\r\n            ifcPSE.PropertyName = \"LightingPercentLoadToReturnAir\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingPercentLoadToReturnAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadDesignCriteria.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ThermalLoadDesignCriteria\"))\r\n         {\r\n            propertySetThermalLoadDesignCriteria.EntityTypes.Add(IFCEntityType.IfcSpatialStructureElement);\r\n            propertySetThermalLoadDesignCriteria.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            propertySetThermalLoadDesignCriteria.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            propertySetThermalLoadDesignCriteria.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadDesignCriteria.OccupancyDiversity\", \"OccupancyDiversity\");\r\n            ifcPSE.PropertyName = \"OccupancyDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadDesignCriteria.OutsideAirPerPerson\", \"OutsideAirPerPerson\");\r\n            ifcPSE.PropertyName = \"OutsideAirPerPerson\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutsideAirPerPersonCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadDesignCriteria.ReceptacleLoadIntensity\", \"ReceptacleLoadIntensity\");\r\n            ifcPSE.PropertyName = \"ReceptacleLoadIntensity\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReceptacleLoadIntensityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadDesignCriteria.AppliancePercentLoadToRadiant\", \"AppliancePercentLoadToRadiant\");\r\n            ifcPSE.PropertyName = \"AppliancePercentLoadToRadiant\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AppliancePercentLoadToRadiantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadDesignCriteria.LightingLoadIntensity\", \"LightingLoadIntensity\");\r\n            ifcPSE.PropertyName = \"LightingLoadIntensity\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingLoadIntensityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadDesignCriteria.LightingPercentLoadToReturnAir\", \"LightingPercentLoadToReturnAir\");\r\n            ifcPSE.PropertyName = \"LightingPercentLoadToReturnAir\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingPercentLoadToReturnAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadDesignCriteria.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ThermalLoadDesignCriteria\"))\r\n         {\r\n            propertySetThermalLoadDesignCriteria.EntityTypes.Add(IFCEntityType.IfcSpatialElement);\r\n            propertySetThermalLoadDesignCriteria.ObjectType = \"IfcSpatialElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadDesignCriteria.OccupancyDiversity\", \"OccupancyDiversity\");\r\n            ifcPSE.PropertyName = \"OccupancyDiversity\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Occupancy Diversity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"居住者の在室率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"거주자의 재실 비율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyDiversityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadDesignCriteria.OutsideAirPerPerson\", \"OutsideAirPerPerson\");\r\n            ifcPSE.PropertyName = \"OutsideAirPerPerson\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outside Air Per Person\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"１人あたりの外気量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"당 외기량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutsideAirPerPersonCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadDesignCriteria.ReceptacleLoadIntensity\", \"ReceptacleLoadIntensity\");\r\n            ifcPSE.PropertyName = \"ReceptacleLoadIntensity\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Receptacle Load Intensity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"単位面積あたり事務機器の平均電力消費量\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단위면적 당 사무기기 평균 전력 소비량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReceptacleLoadIntensityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadDesignCriteria.AppliancePercentLoadToRadiant\", \"AppliancePercentLoadToRadiant\");\r\n            ifcPSE.PropertyName = \"AppliancePercentLoadToRadiant\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Appliance Percent Load To Radiant\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"放射熱のうち顕熱分の割合\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"복사열 중 현열 분의 비율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AppliancePercentLoadToRadiantCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadDesignCriteria.LightingLoadIntensity\", \"LightingLoadIntensity\");\r\n            ifcPSE.PropertyName = \"LightingLoadIntensity\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lighting Load Intensity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"照明負荷率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"조명 부하율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingLoadIntensityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadDesignCriteria.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ThermalLoadDesignCriteria.LightingPercentLoadToReturnAir\", \"LightingPercentLoadToReturnAir\");\r\n            ifcPSE.PropertyName = \"LightingPercentLoadToReturnAir\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Lighting Percent Load To Return Air\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"リタン空気への照明機器の放熱率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"리탄 공기에 조명 기기의 방열 비율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LightingPercentLoadToReturnAirCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetThermalLoadDesignCriteria.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetThermalLoadDesignCriteria);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TicketProcessing(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTicketProcessing = new PropertySetDescription();\r\n         propertySetTicketProcessing.Name = \"Pset_TicketProcessing\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TicketProcessing\"))\r\n         {\r\n            propertySetTicketProcessing.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetTicketProcessing.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            propertySetTicketProcessing.EntityTypes.Add(IFCEntityType.IfcDoorType);\r\n            propertySetTicketProcessing.EntityTypes.Add(IFCEntityType.IfcDoorType);\r\n            propertySetTicketProcessing.ObjectType = \"IfcDoor\";\r\n            propertySetTicketProcessing.PredefinedType = \"TURNSTILE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TicketProcessing.TicketProcessingTime\", \"TicketProcessingTime\");\r\n            ifcPSE.PropertyName = \"TicketProcessingTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TicketProcessingTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTicketProcessing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TicketProcessing.TicketStuckRatio\", \"TicketStuckRatio\");\r\n            ifcPSE.PropertyName = \"TicketStuckRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TicketStuckRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTicketProcessing.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTicketProcessing);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TicketVendingMachine(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTicketVendingMachine = new PropertySetDescription();\r\n         propertySetTicketVendingMachine.Name = \"Pset_TicketVendingMachine\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TicketVendingMachine\"))\r\n         {\r\n            propertySetTicketVendingMachine.EntityTypes.Add(IFCEntityType.IfcElectricAppliance);\r\n            propertySetTicketVendingMachine.EntityTypes.Add(IFCEntityType.IfcElectricApplianceType);\r\n            propertySetTicketVendingMachine.ObjectType = \"IfcElectricAppliance\";\r\n            propertySetTicketVendingMachine.PredefinedType = \"VENDINGMACHINE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TicketVendingMachine.TicketStuckRatio\", \"TicketStuckRatio\");\r\n            ifcPSE.PropertyName = \"TicketStuckRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TicketStuckRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTicketVendingMachine.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TicketVendingMachine.MoneyStuckRatio\", \"MoneyStuckRatio\");\r\n            ifcPSE.PropertyName = \"MoneyStuckRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MoneyStuckRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTicketVendingMachine.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TicketVendingMachine.PaymentMethod\", \"PaymentMethod\");\r\n            ifcPSE.PropertyName = \"PaymentMethod\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_PaymentMethod);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PaymentMethodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTicketVendingMachine.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TicketVendingMachine.TicketProductionSpeed\", \"TicketProductionSpeed\");\r\n            ifcPSE.PropertyName = \"TicketProductionSpeed\";\r\n            ifcPSE.PropertyType = PropertyType.IntegerCountRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TicketProductionSpeedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTicketVendingMachine.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TicketVendingMachine.TicketVendingMachineType\", \"TicketVendingMachineType\");\r\n            ifcPSE.PropertyName = \"TicketVendingMachineType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TicketVendingMachineType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TicketVendingMachineTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTicketVendingMachine.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TicketVendingMachine.VendingMachineUserInterface\", \"VendingMachineUserInterface\");\r\n            ifcPSE.PropertyName = \"VendingMachineUserInterface\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_VendingMachineUserInterface);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VendingMachineUserInterfaceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTicketVendingMachine.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTicketVendingMachine);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_Tiling(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTiling = new PropertySetDescription();\r\n         propertySetTiling.Name = \"Pset_Tiling\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Tiling\"))\r\n         {\r\n            propertySetTiling.EntityTypes.Add(IFCEntityType.IfcPavement);\r\n            propertySetTiling.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            propertySetTiling.EntityTypes.Add(IFCEntityType.IfcPavementType);\r\n            propertySetTiling.EntityTypes.Add(IFCEntityType.IfcCoveringType);\r\n            propertySetTiling.ObjectType = \"IfcPavement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tiling.Permeability\", \"Permeability\");\r\n            ifcPSE.PropertyName = \"Permeability\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PermeabilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTiling.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tiling.TileLength\", \"TileLength\");\r\n            ifcPSE.PropertyName = \"TileLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TileLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTiling.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tiling.TileWidth\", \"TileWidth\");\r\n            ifcPSE.PropertyName = \"TileWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TileWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTiling.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTiling);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_Tolerance(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTolerance = new PropertySetDescription();\r\n         propertySetTolerance.Name = \"Pset_Tolerance\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Tolerance\"))\r\n         {\r\n            propertySetTolerance.EntityTypes.Add(IFCEntityType.IfcProduct);\r\n            propertySetTolerance.EntityTypes.Add(IFCEntityType.IfcTypeProduct);\r\n            propertySetTolerance.ObjectType = \"IfcProduct\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tolerance.ToleranceDescription\", \"ToleranceDescription\");\r\n            ifcPSE.PropertyName = \"ToleranceDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ToleranceDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTolerance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tolerance.ToleranceBasis\", \"ToleranceBasis\");\r\n            ifcPSE.PropertyName = \"ToleranceBasis\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ToleranceBasis);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ToleranceBasisCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTolerance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tolerance.OverallTolerance\", \"OverallTolerance\");\r\n            ifcPSE.PropertyName = \"OverallTolerance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallToleranceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTolerance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tolerance.HorizontalTolerance\", \"HorizontalTolerance\");\r\n            ifcPSE.PropertyName = \"HorizontalTolerance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HorizontalToleranceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTolerance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tolerance.OrthogonalTolerance\", \"OrthogonalTolerance\");\r\n            ifcPSE.PropertyName = \"OrthogonalTolerance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OrthogonalToleranceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTolerance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tolerance.VerticalTolerance\", \"VerticalTolerance\");\r\n            ifcPSE.PropertyName = \"VerticalTolerance\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VerticalToleranceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTolerance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tolerance.PlanarFlatness\", \"PlanarFlatness\");\r\n            ifcPSE.PropertyName = \"PlanarFlatness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlanarFlatnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTolerance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tolerance.HorizontalFlatness\", \"HorizontalFlatness\");\r\n            ifcPSE.PropertyName = \"HorizontalFlatness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HorizontalFlatnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTolerance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tolerance.ElevationalFlatness\", \"ElevationalFlatness\");\r\n            ifcPSE.PropertyName = \"ElevationalFlatness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElevationalFlatnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTolerance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tolerance.SideFlatness\", \"SideFlatness\");\r\n            ifcPSE.PropertyName = \"SideFlatness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SideFlatnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTolerance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tolerance.OverallOrthogonality\", \"OverallOrthogonality\");\r\n            ifcPSE.PropertyName = \"OverallOrthogonality\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallOrthogonalityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTolerance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tolerance.HorizontalOrthogonality\", \"HorizontalOrthogonality\");\r\n            ifcPSE.PropertyName = \"HorizontalOrthogonality\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HorizontalOrthogonalityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTolerance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tolerance.OrthogonalOrthogonality\", \"OrthogonalOrthogonality\");\r\n            ifcPSE.PropertyName = \"OrthogonalOrthogonality\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OrthogonalOrthogonalityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTolerance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tolerance.VerticalOrthogonality\", \"VerticalOrthogonality\");\r\n            ifcPSE.PropertyName = \"VerticalOrthogonality\";\r\n            ifcPSE.PropertyType = PropertyType.PlaneAngle;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VerticalOrthogonalityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTolerance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tolerance.OverallStraightness\", \"OverallStraightness\");\r\n            ifcPSE.PropertyName = \"OverallStraightness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OverallStraightnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTolerance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tolerance.HorizontalStraightness\", \"HorizontalStraightness\");\r\n            ifcPSE.PropertyName = \"HorizontalStraightness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HorizontalStraightnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTolerance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tolerance.OrthogonalStraightness\", \"OrthogonalStraightness\");\r\n            ifcPSE.PropertyName = \"OrthogonalStraightness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OrthogonalStraightnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTolerance.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Tolerance.VerticalStraightness\", \"VerticalStraightness\");\r\n            ifcPSE.PropertyName = \"VerticalStraightness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VerticalStraightnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTolerance.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTolerance);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TrackBase(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTrackBase = new PropertySetDescription();\r\n         propertySetTrackBase.Name = \"Pset_TrackBase\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TrackBase\"))\r\n         {\r\n            propertySetTrackBase.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            propertySetTrackBase.EntityTypes.Add(IFCEntityType.IfcSlabType);\r\n            propertySetTrackBase.ObjectType = \"IfcSlab\";\r\n            propertySetTrackBase.PredefinedType = \"BASESLAB\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackBase.IsSurfaceGalling\", \"IsSurfaceGalling\");\r\n            ifcPSE.PropertyName = \"IsSurfaceGalling\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsSurfaceGallingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackBase.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackBase.SurfaceGallingArea\", \"SurfaceGallingArea\");\r\n            ifcPSE.PropertyName = \"SurfaceGallingArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceGallingAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackBase.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTrackBase);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TrackElementOccurrenceSleeper(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTrackElementOccurrenceSleeper = new PropertySetDescription();\r\n         propertySetTrackElementOccurrenceSleeper.Name = \"Pset_TrackElementOccurrenceSleeper\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TrackElementOccurrenceSleeper\"))\r\n         {\r\n            propertySetTrackElementOccurrenceSleeper.EntityTypes.Add(IFCEntityType.IfcTrackElement);\r\n            propertySetTrackElementOccurrenceSleeper.ObjectType = \"IfcTrackElement\";\r\n            propertySetTrackElementOccurrenceSleeper.PredefinedType = \"SLEEPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackElementOccurrenceSleeper.HasSpecialEquipment\", \"HasSpecialEquipment\");\r\n            ifcPSE.PropertyName = \"HasSpecialEquipment\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasSpecialEquipmentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackElementOccurrenceSleeper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackElementOccurrenceSleeper.SequenceInTrackPanel\", \"SequenceInTrackPanel\");\r\n            ifcPSE.PropertyName = \"SequenceInTrackPanel\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SequenceInTrackPanelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackElementOccurrenceSleeper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackElementOccurrenceSleeper.UnderSleeperPadStiffness\", \"UnderSleeperPadStiffness\");\r\n            ifcPSE.PropertyName = \"UnderSleeperPadStiffness\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_UnderSleeperPadStiffness);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UnderSleeperPadStiffnessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackElementOccurrenceSleeper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackElementOccurrenceSleeper.IsContaminatedSleeper\", \"IsContaminatedSleeper\");\r\n            ifcPSE.PropertyName = \"IsContaminatedSleeper\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsContaminatedSleeperCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackElementOccurrenceSleeper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTrackElementOccurrenceSleeper);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TrackElementPHistoryDerailer(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTrackElementPHistoryDerailer = new PropertySetDescription();\r\n         propertySetTrackElementPHistoryDerailer.Name = \"Pset_TrackElementPHistoryDerailer\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TrackElementPHistoryDerailer\"))\r\n         {\r\n            propertySetTrackElementPHistoryDerailer.EntityTypes.Add(IFCEntityType.IfcTrackElement);\r\n            propertySetTrackElementPHistoryDerailer.ObjectType = \"IfcTrackElement\";\r\n            propertySetTrackElementPHistoryDerailer.PredefinedType = \"DERAILER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackElementPHistoryDerailer.IsDerailing\", \"IsDerailing\");\r\n            ifcPSE.PropertyName = \"IsDerailing\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsDerailingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackElementPHistoryDerailer.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTrackElementPHistoryDerailer);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TrackElementTypeDerailer(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTrackElementTypeDerailer = new PropertySetDescription();\r\n         propertySetTrackElementTypeDerailer.Name = \"Pset_TrackElementTypeDerailer\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TrackElementTypeDerailer\"))\r\n         {\r\n            propertySetTrackElementTypeDerailer.EntityTypes.Add(IFCEntityType.IfcTrackElement);\r\n            propertySetTrackElementTypeDerailer.EntityTypes.Add(IFCEntityType.IfcTrackElementType);\r\n            propertySetTrackElementTypeDerailer.ObjectType = \"IfcTrackElement\";\r\n            propertySetTrackElementTypeDerailer.PredefinedType = \"DERAILER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackElementTypeDerailer.AppliedLineLoad\", \"AppliedLineLoad\");\r\n            ifcPSE.PropertyName = \"AppliedLineLoad\";\r\n            ifcPSE.PropertyType = PropertyType.MassPerLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AppliedLineLoadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackElementTypeDerailer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackElementTypeDerailer.DerailmentMaximumSpeedLimit\", \"DerailmentMaximumSpeedLimit\");\r\n            ifcPSE.PropertyName = \"DerailmentMaximumSpeedLimit\";\r\n            ifcPSE.PropertyType = PropertyType.LinearVelocity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DerailmentMaximumSpeedLimitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackElementTypeDerailer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackElementTypeDerailer.DerailmentWheelDiameter\", \"DerailmentWheelDiameter\");\r\n            ifcPSE.PropertyName = \"DerailmentWheelDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DerailmentWheelDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackElementTypeDerailer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackElementTypeDerailer.DerailmentHeight\", \"DerailmentHeight\");\r\n            ifcPSE.PropertyName = \"DerailmentHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DerailmentHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackElementTypeDerailer.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTrackElementTypeDerailer);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TrackElementTypeSleeper(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTrackElementTypeSleeper = new PropertySetDescription();\r\n         propertySetTrackElementTypeSleeper.Name = \"Pset_TrackElementTypeSleeper\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TrackElementTypeSleeper\"))\r\n         {\r\n            propertySetTrackElementTypeSleeper.EntityTypes.Add(IFCEntityType.IfcTrackElement);\r\n            propertySetTrackElementTypeSleeper.EntityTypes.Add(IFCEntityType.IfcTrackElementType);\r\n            propertySetTrackElementTypeSleeper.ObjectType = \"IfcTrackElement\";\r\n            propertySetTrackElementTypeSleeper.PredefinedType = \"SLEEPER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackElementTypeSleeper.InstalledCondition\", \"InstalledCondition\");\r\n            ifcPSE.PropertyName = \"InstalledCondition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_InstalledCondition);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InstalledConditionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackElementTypeSleeper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackElementTypeSleeper.SleeperType\", \"SleeperType\");\r\n            ifcPSE.PropertyName = \"SleeperType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SleeperType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SleeperTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackElementTypeSleeper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackElementTypeSleeper.TechnicalStandard\", \"TechnicalStandard\");\r\n            ifcPSE.PropertyName = \"TechnicalStandard\";\r\n            ifcPSE.PropertyType = PropertyType.IfcExternalReference;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TechnicalStandardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackElementTypeSleeper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackElementTypeSleeper.FasteningType\", \"FasteningType\");\r\n            ifcPSE.PropertyName = \"FasteningType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FasteningTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackElementTypeSleeper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackElementTypeSleeper.IsElectricallyInsulated\", \"IsElectricallyInsulated\");\r\n            ifcPSE.PropertyName = \"IsElectricallyInsulated\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsElectricallyInsulatedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackElementTypeSleeper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackElementTypeSleeper.HollowSleeperUsage\", \"HollowSleeperUsage\");\r\n            ifcPSE.PropertyName = \"HollowSleeperUsage\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HollowSleeperUsageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackElementTypeSleeper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackElementTypeSleeper.NumberOfTrackCenters\", \"NumberOfTrackCenters\");\r\n            ifcPSE.PropertyName = \"NumberOfTrackCenters\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfTrackCentersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackElementTypeSleeper.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrackElementTypeSleeper.IsHollowSleeper\", \"IsHollowSleeper\");\r\n            ifcPSE.PropertyName = \"IsHollowSleeper\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsHollowSleeperCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrackElementTypeSleeper.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTrackElementTypeSleeper);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TractionPowerSystem(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTractionPowerSystem = new PropertySetDescription();\r\n         propertySetTractionPowerSystem.Name = \"Pset_TractionPowerSystem\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TractionPowerSystem\"))\r\n         {\r\n            propertySetTractionPowerSystem.EntityTypes.Add(IFCEntityType.IfcDistributionSystem);\r\n            propertySetTractionPowerSystem.ObjectType = \"IfcDistributionSystem\";\r\n            propertySetTractionPowerSystem.PredefinedType = \"ELECTRICAL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TractionPowerSystem.PowerSupplyMode\", \"PowerSupplyMode\");\r\n            ifcPSE.PropertyName = \"PowerSupplyMode\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_PowerSupplyMode);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PowerSupplyModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTractionPowerSystem.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TractionPowerSystem.ElectrificationType\", \"ElectrificationType\");\r\n            ifcPSE.PropertyName = \"ElectrificationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElectrificationType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectrificationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTractionPowerSystem.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TractionPowerSystem.RatedFrequency\", \"RatedFrequency\");\r\n            ifcPSE.PropertyName = \"RatedFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTractionPowerSystem.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TractionPowerSystem.NominalVoltage\", \"NominalVoltage\");\r\n            ifcPSE.PropertyName = \"NominalVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTractionPowerSystem.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTractionPowerSystem);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TrafficCalmingDeviceCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTrafficCalmingDeviceCommon = new PropertySetDescription();\r\n         propertySetTrafficCalmingDeviceCommon.Name = \"Pset_TrafficCalmingDeviceCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TrafficCalmingDeviceCommon\"))\r\n         {\r\n            propertySetTrafficCalmingDeviceCommon.EntityTypes.Add(IFCEntityType.IfcElementAssembly);\r\n            propertySetTrafficCalmingDeviceCommon.EntityTypes.Add(IFCEntityType.IfcElementAssemblyType);\r\n            propertySetTrafficCalmingDeviceCommon.ObjectType = \"IfcElementAssembly\";\r\n            propertySetTrafficCalmingDeviceCommon.PredefinedType = \"TRAFFIC_CALMING_DEVICE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrafficCalmingDeviceCommon.TypeDesignation\", \"TypeDesignation\");\r\n            ifcPSE.PropertyName = \"TypeDesignation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TypeDesignationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrafficCalmingDeviceCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTrafficCalmingDeviceCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TransformerTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTransformerTypeCommon = new PropertySetDescription();\r\n         propertySetTransformerTypeCommon.Name = \"Pset_TransformerTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TransformerTypeCommon\"))\r\n         {\r\n            propertySetTransformerTypeCommon.EntityTypes.Add(IFCEntityType.IfcTransformerType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.PrimaryVoltage\", \"PrimaryVoltage\");\r\n            ifcPSE.PropertyName = \"PrimaryVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryVoltage\", \"SecondaryVoltage\");\r\n            ifcPSE.PropertyName = \"SecondaryVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.PrimaryCurrent\", \"PrimaryCurrent\");\r\n            ifcPSE.PropertyName = \"PrimaryCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryCurrent\", \"SecondaryCurrent\");\r\n            ifcPSE.PropertyName = \"SecondaryCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.PrimaryFrequency\", \"PrimaryFrequency\");\r\n            ifcPSE.PropertyName = \"PrimaryFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryFrequency\", \"SecondaryFrequency\");\r\n            ifcPSE.PropertyName = \"SecondaryFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.PrimaryApparentPower\", \"PrimaryApparentPower\");\r\n            ifcPSE.PropertyName = \"PrimaryApparentPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryApparentPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryApparentPower\", \"SecondaryApparentPower\");\r\n            ifcPSE.PropertyName = \"SecondaryApparentPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryApparentPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.MaximumApparentPower\", \"MaximumApparentPower\");\r\n            ifcPSE.PropertyName = \"MaximumApparentPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumApparentPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryCurrentType\", \"SecondaryCurrentType\");\r\n            ifcPSE.PropertyName = \"SecondaryCurrentType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_SecondaryCurrentType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryCurrentTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TransformerTypeCommon\"))\r\n         {\r\n            propertySetTransformerTypeCommon.EntityTypes.Add(IFCEntityType.IfcTransformerType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.PrimaryVoltage\", \"PrimaryVoltage\");\r\n            ifcPSE.PropertyName = \"PrimaryVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryVoltage\", \"SecondaryVoltage\");\r\n            ifcPSE.PropertyName = \"SecondaryVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.PrimaryCurrent\", \"PrimaryCurrent\");\r\n            ifcPSE.PropertyName = \"PrimaryCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryCurrent\", \"SecondaryCurrent\");\r\n            ifcPSE.PropertyName = \"SecondaryCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.PrimaryFrequency\", \"PrimaryFrequency\");\r\n            ifcPSE.PropertyName = \"PrimaryFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryFrequency\", \"SecondaryFrequency\");\r\n            ifcPSE.PropertyName = \"SecondaryFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.PrimaryApparentPower\", \"PrimaryApparentPower\");\r\n            ifcPSE.PropertyName = \"PrimaryApparentPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryApparentPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryApparentPower\", \"SecondaryApparentPower\");\r\n            ifcPSE.PropertyName = \"SecondaryApparentPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryApparentPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.MaximumApparentPower\", \"MaximumApparentPower\");\r\n            ifcPSE.PropertyName = \"MaximumApparentPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumApparentPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryCurrentType\", \"SecondaryCurrentType\");\r\n            ifcPSE.PropertyName = \"SecondaryCurrentType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_SecondaryCurrentType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryCurrentTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TransformerTypeCommon\"))\r\n         {\r\n            propertySetTransformerTypeCommon.EntityTypes.Add(IFCEntityType.IfcTransformer);\r\n            propertySetTransformerTypeCommon.ObjectType = \"IfcTransformer\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.PrimaryVoltage\", \"PrimaryVoltage\");\r\n            ifcPSE.PropertyName = \"PrimaryVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Primary Voltage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"第1電圧\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"제 1 전압\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryVoltage\", \"SecondaryVoltage\");\r\n            ifcPSE.PropertyName = \"SecondaryVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Secondary Voltage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"第2電圧\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"두번째 전압\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.PrimaryCurrent\", \"PrimaryCurrent\");\r\n            ifcPSE.PropertyName = \"PrimaryCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Primary Current\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"第1電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"제 1 전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryCurrent\", \"SecondaryCurrent\");\r\n            ifcPSE.PropertyName = \"SecondaryCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Secondary Current\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"第2電流\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"제 2 전류\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.PrimaryFrequency\", \"PrimaryFrequency\");\r\n            ifcPSE.PropertyName = \"PrimaryFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Primary Frequency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"第１周波数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"제 1 주파수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryFrequency\", \"SecondaryFrequency\");\r\n            ifcPSE.PropertyName = \"SecondaryFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Secondary Frequency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"第2周波数\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"제 2 주파수\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.PrimaryApparentPower\", \"PrimaryApparentPower\");\r\n            ifcPSE.PropertyName = \"PrimaryApparentPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Primary Apparent Power\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"第1電力\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"제 1 전력\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryApparentPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryApparentPower\", \"SecondaryApparentPower\");\r\n            ifcPSE.PropertyName = \"SecondaryApparentPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Secondary Apparent Power\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"第2電力\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"제 2 전원\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryApparentPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.MaximumApparentPower\", \"MaximumApparentPower\");\r\n            ifcPSE.PropertyName = \"MaximumApparentPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Apparent Power\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最大電力\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"최대 전력\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumApparentPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryCurrentType\", \"SecondaryCurrentType\");\r\n            ifcPSE.PropertyName = \"SecondaryCurrentType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_SecondaryCurrentType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Secondary Current Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"第2電流タイプ\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"제 2 전류 타입\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryCurrentTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.ShortCircuitVoltage\", \"ShortCircuitVoltage\");\r\n            ifcPSE.PropertyName = \"ShortCircuitVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ComplexNumber;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Short Circuit Voltage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"短絡電圧\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"단락 전압\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortCircuitVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.RealImpedanceRatio\", \"RealImpedanceRatio\");\r\n            ifcPSE.PropertyName = \"RealImpedanceRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Real Impedance Ratio\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"インピーダンス実部比率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"임피던스 실수 부 비율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RealImpedanceRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.ImaginaryImpedanceRatio\", \"ImaginaryImpedanceRatio\");\r\n            ifcPSE.PropertyName = \"ImaginaryImpedanceRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Imaginary Impedance Ratio\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"インピーダンス虚部比率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"임피던스 허수 부 비율\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImaginaryImpedanceRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.TransformerVectorGroup\", \"TransformerVectorGroup\");\r\n            ifcPSE.PropertyName = \"TransformerVectorGroup\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_TransformerVectorGroup);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Transformer Vector Group\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransformerVectorGroupCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.IsNeutralPrimaryTerminalAvailable\", \"IsNeutralPrimaryTerminalAvailable\");\r\n            ifcPSE.PropertyName = \"IsNeutralPrimaryTerminalAvailable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Neutral Primary Terminal Available\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"中性点第1ターミナルがあるかどうか\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"중성점 제 1 터미널 여부\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsNeutralPrimaryTerminalAvailableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.IsNeutralSecondaryTerminalAvailable\", \"IsNeutralSecondaryTerminalAvailable\");\r\n            ifcPSE.PropertyName = \"IsNeutralSecondaryTerminalAvailable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Neutral Secondary Terminal Available\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"中性点第2ターミナルがあるかどうか\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"중성점 제 2 터미널 여부\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsNeutralSecondaryTerminalAvailableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.EfficiencyCurve\", \"EfficiencyCurve\");\r\n            ifcPSE.PropertyName = \"EfficiencyCurve\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.NormalisedRatio;\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EfficiencyCurveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.RadiativeFraction\", \"RadiativeFraction\");\r\n            ifcPSE.PropertyName = \"RadiativeFraction\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RadiativeFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TransformerTypeCommon\"))\r\n         {\r\n            propertySetTransformerTypeCommon.EntityTypes.Add(IFCEntityType.IfcTransformer);\r\n            propertySetTransformerTypeCommon.EntityTypes.Add(IFCEntityType.IfcTransformerType);\r\n            propertySetTransformerTypeCommon.ObjectType = \"IfcTransformer\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.PrimaryVoltage\", \"PrimaryVoltage\");\r\n            ifcPSE.PropertyName = \"PrimaryVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryVoltage\", \"SecondaryVoltage\");\r\n            ifcPSE.PropertyName = \"SecondaryVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.PrimaryCurrent\", \"PrimaryCurrent\");\r\n            ifcPSE.PropertyName = \"PrimaryCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryCurrent\", \"SecondaryCurrent\");\r\n            ifcPSE.PropertyName = \"SecondaryCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.PrimaryFrequency\", \"PrimaryFrequency\");\r\n            ifcPSE.PropertyName = \"PrimaryFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryFrequency\", \"SecondaryFrequency\");\r\n            ifcPSE.PropertyName = \"SecondaryFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.PrimaryApparentPower\", \"PrimaryApparentPower\");\r\n            ifcPSE.PropertyName = \"PrimaryApparentPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryApparentPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryApparentPower\", \"SecondaryApparentPower\");\r\n            ifcPSE.PropertyName = \"SecondaryApparentPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryApparentPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.MaximumApparentPower\", \"MaximumApparentPower\");\r\n            ifcPSE.PropertyName = \"MaximumApparentPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumApparentPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.SecondaryCurrentType\", \"SecondaryCurrentType\");\r\n            ifcPSE.PropertyName = \"SecondaryCurrentType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SecondaryCurrentType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryCurrentTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.ShortCircuitVoltage\", \"ShortCircuitVoltage\");\r\n            ifcPSE.PropertyName = \"ShortCircuitVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ComplexNumber;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ShortCircuitVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.RealImpedanceRatio\", \"RealImpedanceRatio\");\r\n            ifcPSE.PropertyName = \"RealImpedanceRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RealImpedanceRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.ImaginaryImpedanceRatio\", \"ImaginaryImpedanceRatio\");\r\n            ifcPSE.PropertyName = \"ImaginaryImpedanceRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ImaginaryImpedanceRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.TransformerVectorGroup\", \"TransformerVectorGroup\");\r\n            ifcPSE.PropertyName = \"TransformerVectorGroup\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TransformerVectorGroup);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransformerVectorGroupCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.IsNeutralPrimaryTerminalAvailable\", \"IsNeutralPrimaryTerminalAvailable\");\r\n            ifcPSE.PropertyName = \"IsNeutralPrimaryTerminalAvailable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsNeutralPrimaryTerminalAvailableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransformerTypeCommon.IsNeutralSecondaryTerminalAvailable\", \"IsNeutralSecondaryTerminalAvailable\");\r\n            ifcPSE.PropertyName = \"IsNeutralSecondaryTerminalAvailable\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsNeutralSecondaryTerminalAvailableCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransformerTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTransformerTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TransitionSectionCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTransitionSectionCommon = new PropertySetDescription();\r\n         propertySetTransitionSectionCommon.Name = \"Pset_TransitionSectionCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TransitionSectionCommon\"))\r\n         {\r\n            propertySetTransitionSectionCommon.EntityTypes.Add(IFCEntityType.IfcEarthworksFill);\r\n            propertySetTransitionSectionCommon.ObjectType = \"IfcEarthworksFill\";\r\n            propertySetTransitionSectionCommon.PredefinedType = \"TRANSITIONSECTION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransitionSectionCommon.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransitionSectionCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTransitionSectionCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TransportElementCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTransportElementCommon = new PropertySetDescription();\r\n         propertySetTransportElementCommon.Name = \"Pset_TransportElementCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TransportElementCommon\"))\r\n         {\r\n            propertySetTransportElementCommon.EntityTypes.Add(IFCEntityType.IfcTransportElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TransportElementCommon\"))\r\n         {\r\n            propertySetTransportElementCommon.EntityTypes.Add(IFCEntityType.IfcTransportElement);\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TransportElementCommon\"))\r\n         {\r\n            propertySetTransportElementCommon.EntityTypes.Add(IFCEntityType.IfcTransportElement);\r\n            propertySetTransportElementCommon.ObjectType = \"IfcTransportElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Komponententyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조 ID\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementCommon.CapacityPeople\", \"CapacityPeople\");\r\n            ifcPSE.PropertyName = \"CapacityPeople\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Personenkapazität\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Capacity People\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Capacité en nombre de personnes\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"搭乗人数定員\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityPeopleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementCommon.CapacityWeight\", \"CapacityWeight\");\r\n            ifcPSE.PropertyName = \"CapacityWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Lastkapazität\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Capacity Weight\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Capacité en poids\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"搭載重量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Rettungsweg\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Exit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"SortieSecours\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"避難出口\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"화재 출구 (피난 출구)\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TransportElementCommon\"))\r\n         {\r\n            propertySetTransportElementCommon.EntityTypes.Add(IFCEntityType.IfcTransportationDevice);\r\n            propertySetTransportElementCommon.EntityTypes.Add(IFCEntityType.IfcTransportationDeviceType);\r\n            propertySetTransportElementCommon.ObjectType = \"IfcTransportationDevice\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementCommon.CapacityPeople\", \"CapacityPeople\");\r\n            ifcPSE.PropertyName = \"CapacityPeople\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityPeopleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementCommon.CapacityWeight\", \"CapacityWeight\");\r\n            ifcPSE.PropertyName = \"CapacityWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CapacityWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTransportElementCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TransportElementElevator(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTransportElementElevator = new PropertySetDescription();\r\n         propertySetTransportElementElevator.Name = \"Pset_TransportElementElevator\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TransportElementElevator\"))\r\n         {\r\n            propertySetTransportElementElevator.EntityTypes.Add(IFCEntityType.IfcTransportElement);\r\n            propertySetTransportElementElevator.ObjectType = \"Elevator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementElevator.ClearWidth\", \"ClearWidth\");\r\n            ifcPSE.PropertyName = \"ClearWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementElevator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementElevator.ClearDepth\", \"ClearDepth\");\r\n            ifcPSE.PropertyName = \"ClearDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementElevator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementElevator.ClearHeight\", \"ClearHeight\");\r\n            ifcPSE.PropertyName = \"ClearHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementElevator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TransportElementElevator\"))\r\n         {\r\n            propertySetTransportElementElevator.EntityTypes.Add(IFCEntityType.IfcTransportElement);\r\n            propertySetTransportElementElevator.ObjectType = \"IfcTransportElement\";\r\n            propertySetTransportElementElevator.PredefinedType = \"ELEVATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementElevator.ClearWidth\", \"ClearWidth\");\r\n            ifcPSE.PropertyName = \"ClearWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementElevator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementElevator.ClearDepth\", \"ClearDepth\");\r\n            ifcPSE.PropertyName = \"ClearDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementElevator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementElevator.ClearHeight\", \"ClearHeight\");\r\n            ifcPSE.PropertyName = \"ClearHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementElevator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TransportElementElevator\"))\r\n         {\r\n            propertySetTransportElementElevator.EntityTypes.Add(IFCEntityType.IfcTransportElement);\r\n            propertySetTransportElementElevator.ObjectType = \"IfcTransportElement\";\r\n            propertySetTransportElementElevator.PredefinedType = \"ELEVATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementElevator.FireFightingLift\", \"FireFightingLift\");\r\n            ifcPSE.PropertyName = \"FireFightingLift\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Feuerwehraufzug\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Fighting Lift\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"LargeurPassage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"消防エレベーター\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireFightingLiftCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementElevator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementElevator.ClearWidth\", \"ClearWidth\");\r\n            ifcPSE.PropertyName = \"ClearWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Clear Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Largeur du passage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"幅員\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementElevator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementElevator.ClearDepth\", \"ClearDepth\");\r\n            ifcPSE.PropertyName = \"ClearDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Clear Depth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Profondeur de passage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"奥行き\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementElevator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementElevator.ClearHeight\", \"ClearHeight\");\r\n            ifcPSE.PropertyName = \"ClearHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Clear Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Hauteur de passage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"高さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementElevator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TransportElementElevator\"))\r\n         {\r\n            propertySetTransportElementElevator.EntityTypes.Add(IFCEntityType.IfcTransportElement);\r\n            propertySetTransportElementElevator.EntityTypes.Add(IFCEntityType.IfcTransportElementType);\r\n            propertySetTransportElementElevator.ObjectType = \"IfcTransportElement\";\r\n            propertySetTransportElementElevator.PredefinedType = \"ELEVATOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementElevator.FireFightingLift\", \"FireFightingLift\");\r\n            ifcPSE.PropertyName = \"FireFightingLift\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireFightingLiftCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementElevator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementElevator.ClearWidth\", \"ClearWidth\");\r\n            ifcPSE.PropertyName = \"ClearWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementElevator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementElevator.ClearDepth\", \"ClearDepth\");\r\n            ifcPSE.PropertyName = \"ClearDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementElevator.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportElementElevator.ClearHeight\", \"ClearHeight\");\r\n            ifcPSE.PropertyName = \"ClearHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportElementElevator.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTransportElementElevator);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TransportEquipmentOTN(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTransportEquipmentOTN = new PropertySetDescription();\r\n         propertySetTransportEquipmentOTN.Name = \"Pset_TransportEquipmentOTN\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TransportEquipmentOTN\"))\r\n         {\r\n            propertySetTransportEquipmentOTN.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            propertySetTransportEquipmentOTN.EntityTypes.Add(IFCEntityType.IfcCommunicationsApplianceType);\r\n            propertySetTransportEquipmentOTN.ObjectType = \"IfcCommunicationsAppliance\";\r\n            propertySetTransportEquipmentOTN.PredefinedType = \"TRANSPORTEQUIPMENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportEquipmentOTN.SingleChannelAveragePower\", \"SingleChannelAveragePower\");\r\n            ifcPSE.PropertyName = \"SingleChannelAveragePower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SingleChannelAveragePowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportEquipmentOTN.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportEquipmentOTN.ChromaticDispersionTolerance\", \"ChromaticDispersionTolerance\");\r\n            ifcPSE.PropertyName = \"ChromaticDispersionTolerance\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ChromaticDispersionToleranceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportEquipmentOTN.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportEquipmentOTN.SingleChannelPower\", \"SingleChannelPower\");\r\n            ifcPSE.PropertyName = \"SingleChannelPower\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SingleChannelPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportEquipmentOTN.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportEquipmentOTN.MinimumOpticalSignalToNoiseRatio\", \"MinimumOpticalSignalToNoiseRatio\");\r\n            ifcPSE.PropertyName = \"MinimumOpticalSignalToNoiseRatio\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MinimumOpticalSignalToNoiseRatioCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportEquipmentOTN.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportEquipmentOTN.PolarizationModeDispersionTolerance\", \"PolarizationModeDispersionTolerance\");\r\n            ifcPSE.PropertyName = \"PolarizationModeDispersionTolerance\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PolarizationModeDispersionToleranceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportEquipmentOTN.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportEquipmentOTN.SingleWaveTransmissionRate\", \"SingleWaveTransmissionRate\");\r\n            ifcPSE.PropertyName = \"SingleWaveTransmissionRate\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SingleWaveTransmissionRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportEquipmentOTN.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TransportEquipmentOTN.EquipmentCapacity\", \"EquipmentCapacity\");\r\n            ifcPSE.PropertyName = \"EquipmentCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.IntegerCountRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EquipmentCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTransportEquipmentOTN.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTransportEquipmentOTN);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TrenchExcavationCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTrenchExcavationCommon = new PropertySetDescription();\r\n         propertySetTrenchExcavationCommon.Name = \"Pset_TrenchExcavationCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TrenchExcavationCommon\"))\r\n         {\r\n            propertySetTrenchExcavationCommon.EntityTypes.Add(IFCEntityType.IfcEarthworksCut);\r\n            propertySetTrenchExcavationCommon.ObjectType = \"IfcEarthworksCut\";\r\n            propertySetTrenchExcavationCommon.PredefinedType = \"TRENCH\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrenchExcavationCommon.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrenchExcavationCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TrenchExcavationCommon.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTrenchExcavationCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTrenchExcavationCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TubeBundleTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTubeBundleTypeCommon = new PropertySetDescription();\r\n         propertySetTubeBundleTypeCommon.Name = \"Pset_TubeBundleTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TubeBundleTypeCommon\"))\r\n         {\r\n            propertySetTubeBundleTypeCommon.EntityTypes.Add(IFCEntityType.IfcTubeBundleType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.NumberOfRows\", \"NumberOfRows\");\r\n            ifcPSE.PropertyName = \"NumberOfRows\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfRowsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.StaggeredRowSpacing\", \"StaggeredRowSpacing\");\r\n            ifcPSE.PropertyName = \"StaggeredRowSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StaggeredRowSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.InLineRowSpacing\", \"InLineRowSpacing\");\r\n            ifcPSE.PropertyName = \"InLineRowSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InLineRowSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.NumberOfCircuits\", \"NumberOfCircuits\");\r\n            ifcPSE.PropertyName = \"NumberOfCircuits\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCircuitsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.FoulingFactor\", \"FoulingFactor\");\r\n            ifcPSE.PropertyName = \"FoulingFactor\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FoulingFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.ThermalConductivity\", \"ThermalConductivity\");\r\n            ifcPSE.PropertyName = \"ThermalConductivity\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalConductivity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalConductivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.Volume\", \"Volume\");\r\n            ifcPSE.PropertyName = \"Volume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.NominalDiameter\", \"NominalDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.OutsideDiameter\", \"OutsideDiameter\");\r\n            ifcPSE.PropertyName = \"OutsideDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutsideDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.InsideDiameter\", \"InsideDiameter\");\r\n            ifcPSE.PropertyName = \"InsideDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InsideDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.HorizontalSpacing\", \"HorizontalSpacing\");\r\n            ifcPSE.PropertyName = \"HorizontalSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HorizontalSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.VerticalSpacing\", \"VerticalSpacing\");\r\n            ifcPSE.PropertyName = \"VerticalSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VerticalSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.HasTurbulator\", \"HasTurbulator\");\r\n            ifcPSE.PropertyName = \"HasTurbulator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasTurbulatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TubeBundleTypeCommon\"))\r\n         {\r\n            propertySetTubeBundleTypeCommon.EntityTypes.Add(IFCEntityType.IfcTubeBundleType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.NumberOfRows\", \"NumberOfRows\");\r\n            ifcPSE.PropertyName = \"NumberOfRows\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfRowsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.StaggeredRowSpacing\", \"StaggeredRowSpacing\");\r\n            ifcPSE.PropertyName = \"StaggeredRowSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StaggeredRowSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.InLineRowSpacing\", \"InLineRowSpacing\");\r\n            ifcPSE.PropertyName = \"InLineRowSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InLineRowSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.NumberOfCircuits\", \"NumberOfCircuits\");\r\n            ifcPSE.PropertyName = \"NumberOfCircuits\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCircuitsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.FoulingFactor\", \"FoulingFactor\");\r\n            ifcPSE.PropertyName = \"FoulingFactor\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FoulingFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.ThermalConductivity\", \"ThermalConductivity\");\r\n            ifcPSE.PropertyName = \"ThermalConductivity\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalConductivity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalConductivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.Volume\", \"Volume\");\r\n            ifcPSE.PropertyName = \"Volume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.NominalDiameter\", \"NominalDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.OutsideDiameter\", \"OutsideDiameter\");\r\n            ifcPSE.PropertyName = \"OutsideDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutsideDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.InsideDiameter\", \"InsideDiameter\");\r\n            ifcPSE.PropertyName = \"InsideDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InsideDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.HorizontalSpacing\", \"HorizontalSpacing\");\r\n            ifcPSE.PropertyName = \"HorizontalSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HorizontalSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.VerticalSpacing\", \"VerticalSpacing\");\r\n            ifcPSE.PropertyName = \"VerticalSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VerticalSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.HasTurbulator\", \"HasTurbulator\");\r\n            ifcPSE.PropertyName = \"HasTurbulator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasTurbulatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TubeBundleTypeCommon\"))\r\n         {\r\n            propertySetTubeBundleTypeCommon.EntityTypes.Add(IFCEntityType.IfcTubeBundle);\r\n            propertySetTubeBundleTypeCommon.ObjectType = \"IfcTubeBundle\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.NumberOfRows\", \"NumberOfRows\");\r\n            ifcPSE.PropertyName = \"NumberOfRows\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Rows\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"列数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfRowsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.StaggeredRowSpacing\", \"StaggeredRowSpacing\");\r\n            ifcPSE.PropertyName = \"StaggeredRowSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Staggered Row Spacing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"互い違いの列間隔\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StaggeredRowSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.InLineRowSpacing\", \"InLineRowSpacing\");\r\n            ifcPSE.PropertyName = \"InLineRowSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"In Line Row Spacing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"インライン列間隔\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InLineRowSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.NumberOfCircuits\", \"NumberOfCircuits\");\r\n            ifcPSE.PropertyName = \"NumberOfCircuits\";\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Circuits\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"平行流回路数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCircuitsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.FoulingFactor\", \"FoulingFactor\");\r\n            ifcPSE.PropertyName = \"FoulingFactor\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalResistance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fouling Factor\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"汚れ係数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FoulingFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.ThermalConductivity\", \"ThermalConductivity\");\r\n            ifcPSE.PropertyName = \"ThermalConductivity\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalConductivity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Conductivity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱伝導率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalConductivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.Volume\", \"Volume\");\r\n            ifcPSE.PropertyName = \"Volume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Volume\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.NominalDiameter\", \"NominalDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"公称直径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.OutsideDiameter\", \"OutsideDiameter\");\r\n            ifcPSE.PropertyName = \"OutsideDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outside Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutsideDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.InsideDiameter\", \"InsideDiameter\");\r\n            ifcPSE.PropertyName = \"InsideDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Inside Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"内径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InsideDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.HorizontalSpacing\", \"HorizontalSpacing\");\r\n            ifcPSE.PropertyName = \"HorizontalSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Horizontal Spacing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水平間隔\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HorizontalSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.VerticalSpacing\", \"VerticalSpacing\");\r\n            ifcPSE.PropertyName = \"VerticalSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Vertical Spacing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"垂直間隔\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VerticalSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.HasTurbulator\", \"HasTurbulator\");\r\n            ifcPSE.PropertyName = \"HasTurbulator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Turbulator\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"かくはん器有り\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasTurbulatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TubeBundleTypeCommon\"))\r\n         {\r\n            propertySetTubeBundleTypeCommon.EntityTypes.Add(IFCEntityType.IfcTubeBundle);\r\n            propertySetTubeBundleTypeCommon.EntityTypes.Add(IFCEntityType.IfcTubeBundleType);\r\n            propertySetTubeBundleTypeCommon.ObjectType = \"IfcTubeBundle\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.NumberOfRows\", \"NumberOfRows\");\r\n            ifcPSE.PropertyName = \"NumberOfRows\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfRowsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.StaggeredRowSpacing\", \"StaggeredRowSpacing\");\r\n            ifcPSE.PropertyName = \"StaggeredRowSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StaggeredRowSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.InLineRowSpacing\", \"InLineRowSpacing\");\r\n            ifcPSE.PropertyName = \"InLineRowSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InLineRowSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.NumberOfCircuits\", \"NumberOfCircuits\");\r\n            ifcPSE.PropertyName = \"NumberOfCircuits\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCircuitsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.FoulingFactor\", \"FoulingFactor\");\r\n            ifcPSE.PropertyName = \"FoulingFactor\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalResistance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FoulingFactorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.ThermalConductivity\", \"ThermalConductivity\");\r\n            ifcPSE.PropertyName = \"ThermalConductivity\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalConductivity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalConductivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.Volume\", \"Volume\");\r\n            ifcPSE.PropertyName = \"Volume\";\r\n            ifcPSE.PropertyType = PropertyType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.NominalDiameter\", \"NominalDiameter\");\r\n            ifcPSE.PropertyName = \"NominalDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.OutsideDiameter\", \"OutsideDiameter\");\r\n            ifcPSE.PropertyName = \"OutsideDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutsideDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.InsideDiameter\", \"InsideDiameter\");\r\n            ifcPSE.PropertyName = \"InsideDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InsideDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.HorizontalSpacing\", \"HorizontalSpacing\");\r\n            ifcPSE.PropertyName = \"HorizontalSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HorizontalSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.VerticalSpacing\", \"VerticalSpacing\");\r\n            ifcPSE.PropertyName = \"VerticalSpacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VerticalSpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeCommon.HasTurbulator\", \"HasTurbulator\");\r\n            ifcPSE.PropertyName = \"HasTurbulator\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasTurbulatorCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTubeBundleTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_TubeBundleTypeFinned(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetTubeBundleTypeFinned = new PropertySetDescription();\r\n         propertySetTubeBundleTypeFinned.Name = \"Pset_TubeBundleTypeFinned\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TubeBundleTypeFinned\"))\r\n         {\r\n            propertySetTubeBundleTypeFinned.EntityTypes.Add(IFCEntityType.IfcTubeBundleType);\r\n            propertySetTubeBundleTypeFinned.ObjectType = \"IfcTubeBundleType\";\r\n            propertySetTubeBundleTypeFinned.PredefinedType = \"FINNED\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Spacing\", \"Spacing\");\r\n            ifcPSE.PropertyName = \"Spacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Thickness\", \"Thickness\");\r\n            ifcPSE.PropertyName = \"Thickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.ThermalConductivity\", \"ThermalConductivity\");\r\n            ifcPSE.PropertyName = \"ThermalConductivity\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalConductivity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalConductivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Diameter\", \"Diameter\");\r\n            ifcPSE.PropertyName = \"Diameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.FinCorrugatedType\", \"FinCorrugatedType\");\r\n            ifcPSE.PropertyName = \"FinCorrugatedType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinCorrugatedTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.HasCoating\", \"HasCoating\");\r\n            ifcPSE.PropertyName = \"HasCoating\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasCoatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TubeBundleTypeFinned\"))\r\n         {\r\n            propertySetTubeBundleTypeFinned.EntityTypes.Add(IFCEntityType.IfcTubeBundleType);\r\n            propertySetTubeBundleTypeFinned.ObjectType = \"IfcTubeBundleType\";\r\n            propertySetTubeBundleTypeFinned.PredefinedType = \"FINNED\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Spacing\", \"Spacing\");\r\n            ifcPSE.PropertyName = \"Spacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Thickness\", \"Thickness\");\r\n            ifcPSE.PropertyName = \"Thickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.ThermalConductivity\", \"ThermalConductivity\");\r\n            ifcPSE.PropertyName = \"ThermalConductivity\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalConductivity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalConductivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Diameter\", \"Diameter\");\r\n            ifcPSE.PropertyName = \"Diameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.FinCorrugatedType\", \"FinCorrugatedType\");\r\n            ifcPSE.PropertyName = \"FinCorrugatedType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinCorrugatedTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.HasCoating\", \"HasCoating\");\r\n            ifcPSE.PropertyName = \"HasCoating\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasCoatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TubeBundleTypeFinned\"))\r\n         {\r\n            propertySetTubeBundleTypeFinned.EntityTypes.Add(IFCEntityType.IfcTubeBundle);\r\n            propertySetTubeBundleTypeFinned.ObjectType = \"IfcTubeBundle\";\r\n            propertySetTubeBundleTypeFinned.PredefinedType = \"FINNED\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Spacing\", \"Spacing\");\r\n            ifcPSE.PropertyName = \"Spacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Spacing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"間隔\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Thickness\", \"Thickness\");\r\n            ifcPSE.PropertyName = \"Thickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thickness\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"厚さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.ThermalConductivity\", \"ThermalConductivity\");\r\n            ifcPSE.PropertyName = \"ThermalConductivity\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalConductivity;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Conductivity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱伝導率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalConductivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"高さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Diameter\", \"Diameter\");\r\n            ifcPSE.PropertyName = \"Diameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Diameter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"直径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.FinCorrugatedType\", \"FinCorrugatedType\");\r\n            ifcPSE.PropertyName = \"FinCorrugatedType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fin Corrugated Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"コルゲートタイプフィン\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinCorrugatedTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.HasCoating\", \"HasCoating\");\r\n            ifcPSE.PropertyName = \"HasCoating\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Coating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"コーティング有り\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasCoatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_TubeBundleTypeFinned\"))\r\n         {\r\n            propertySetTubeBundleTypeFinned.EntityTypes.Add(IFCEntityType.IfcTubeBundle);\r\n            propertySetTubeBundleTypeFinned.EntityTypes.Add(IFCEntityType.IfcTubeBundleType);\r\n            propertySetTubeBundleTypeFinned.ObjectType = \"IfcTubeBundle\";\r\n            propertySetTubeBundleTypeFinned.PredefinedType = \"FINNED\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Spacing\", \"Spacing\");\r\n            ifcPSE.PropertyName = \"Spacing\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpacingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Thickness\", \"Thickness\");\r\n            ifcPSE.PropertyName = \"Thickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.ThermalConductivity\", \"ThermalConductivity\");\r\n            ifcPSE.PropertyName = \"ThermalConductivity\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalConductivity;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalConductivityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.Diameter\", \"Diameter\");\r\n            ifcPSE.PropertyName = \"Diameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.FinCorrugatedType\", \"FinCorrugatedType\");\r\n            ifcPSE.PropertyName = \"FinCorrugatedType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinCorrugatedTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_TubeBundleTypeFinned.HasCoating\", \"HasCoating\");\r\n            ifcPSE.PropertyName = \"HasCoating\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasCoatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetTubeBundleTypeFinned.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetTubeBundleTypeFinned);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_Uncertainty(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetUncertainty = new PropertySetDescription();\r\n         propertySetUncertainty.Name = \"Pset_Uncertainty\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Uncertainty\"))\r\n         {\r\n            propertySetUncertainty.EntityTypes.Add(IFCEntityType.IfcProduct);\r\n            propertySetUncertainty.EntityTypes.Add(IFCEntityType.IfcTypeProduct);\r\n            propertySetUncertainty.ObjectType = \"IfcProduct\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_Uncertainty.UncertaintyBasis\", \"UncertaintyBasis\");\r\n            ifcPSE.PropertyName = \"UncertaintyBasis\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_UncertaintyBasis);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UncertaintyBasisCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUncertainty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Uncertainty.UncertaintyDescription\", \"UncertaintyDescription\");\r\n            ifcPSE.PropertyName = \"UncertaintyDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UncertaintyDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUncertainty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Uncertainty.HorizontalUncertainty\", \"HorizontalUncertainty\");\r\n            ifcPSE.PropertyName = \"HorizontalUncertainty\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HorizontalUncertaintyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUncertainty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Uncertainty.LinearUncertainty\", \"LinearUncertainty\");\r\n            ifcPSE.PropertyName = \"LinearUncertainty\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LinearUncertaintyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUncertainty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Uncertainty.OrthogonalUncertainty\", \"OrthogonalUncertainty\");\r\n            ifcPSE.PropertyName = \"OrthogonalUncertainty\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OrthogonalUncertaintyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUncertainty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Uncertainty.VerticalUncertainty\", \"VerticalUncertainty\");\r\n            ifcPSE.PropertyName = \"VerticalUncertainty\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VerticalUncertaintyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUncertainty.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetUncertainty);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_UnitaryControlElementBaseStationController(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetUnitaryControlElementBaseStationController = new PropertySetDescription();\r\n         propertySetUnitaryControlElementBaseStationController.Name = \"Pset_UnitaryControlElementBaseStationController\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryControlElementBaseStationController\"))\r\n         {\r\n            propertySetUnitaryControlElementBaseStationController.EntityTypes.Add(IFCEntityType.IfcUnitaryControlElement);\r\n            propertySetUnitaryControlElementBaseStationController.EntityTypes.Add(IFCEntityType.IfcUnitaryControlElementType);\r\n            propertySetUnitaryControlElementBaseStationController.ObjectType = \"IfcUnitaryControlElement\";\r\n            propertySetUnitaryControlElementBaseStationController.PredefinedType = \"BASESTATIONCONTROLLER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementBaseStationController.NumberOfInterfaces\", \"NumberOfInterfaces\");\r\n            ifcPSE.PropertyName = \"NumberOfInterfaces\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Label;\r\n            ifcPSE.PropertyType = PropertyType.Integer;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfInterfacesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementBaseStationController.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementBaseStationController.NumberOfManagedBTSs\", \"NumberOfManagedBTSs\");\r\n            ifcPSE.PropertyName = \"NumberOfManagedBTSs\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfManagedBTSsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementBaseStationController.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementBaseStationController.NumberOfManagedCarriers\", \"NumberOfManagedCarriers\");\r\n            ifcPSE.PropertyName = \"NumberOfManagedCarriers\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfManagedCarriersCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementBaseStationController.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetUnitaryControlElementBaseStationController);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_UnitaryControlElementPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetUnitaryControlElementPHistory = new PropertySetDescription();\r\n         propertySetUnitaryControlElementPHistory.Name = \"Pset_UnitaryControlElementPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryControlElementPHistory\"))\r\n         {\r\n            propertySetUnitaryControlElementPHistory.EntityTypes.Add(IFCEntityType.IfcUnitaryControlElement);\r\n            propertySetUnitaryControlElementPHistory.ObjectType = \"IfcUnitaryControlElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementPHistory.Temperature\", \"Temperature\");\r\n            ifcPSE.PropertyName = \"Temperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementPHistory.Mode\", \"Mode\");\r\n            ifcPSE.PropertyName = \"Mode\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mode\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementPHistory.Fan\", \"Fan\");\r\n            ifcPSE.PropertyName = \"Fan\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fan\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementPHistory.SetPoint\", \"SetPoint\");\r\n            ifcPSE.PropertyName = \"SetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Set Point\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryControlElementPHistory\"))\r\n         {\r\n            propertySetUnitaryControlElementPHistory.EntityTypes.Add(IFCEntityType.IfcUnitaryControlElement);\r\n            propertySetUnitaryControlElementPHistory.ObjectType = \"IfcUnitaryControlElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementPHistory.Temperature\", \"Temperature\");\r\n            ifcPSE.PropertyName = \"Temperature\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementPHistory.OperationModeHistory\", \"OperationModeHistory\");\r\n            ifcPSE.PropertyName = \"OperationModeHistory\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationModeHistoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementPHistory.Fan\", \"Fan\");\r\n            ifcPSE.PropertyName = \"Fan\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FanCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementPHistory.SetPoint\", \"SetPoint\");\r\n            ifcPSE.PropertyName = \"SetPoint\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetUnitaryControlElementPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_UnitaryControlElementTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetUnitaryControlElementTypeCommon = new PropertySetDescription();\r\n         propertySetUnitaryControlElementTypeCommon.Name = \"Pset_UnitaryControlElementTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryControlElementTypeCommon\"))\r\n         {\r\n            propertySetUnitaryControlElementTypeCommon.EntityTypes.Add(IFCEntityType.IfcUnitaryControlElement);\r\n            propertySetUnitaryControlElementTypeCommon.ObjectType = \"IfcUnitaryControlElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조 ID\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementTypeCommon.Mode\", \"Mode\");\r\n            ifcPSE.PropertyName = \"Mode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mode\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryControlElementTypeCommon\"))\r\n         {\r\n            propertySetUnitaryControlElementTypeCommon.EntityTypes.Add(IFCEntityType.IfcUnitaryControlElement);\r\n            propertySetUnitaryControlElementTypeCommon.EntityTypes.Add(IFCEntityType.IfcUnitaryControlElementType);\r\n            propertySetUnitaryControlElementTypeCommon.ObjectType = \"IfcUnitaryControlElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementTypeCommon.OperationMode\", \"OperationMode\");\r\n            ifcPSE.PropertyName = \"OperationMode\";\r\n            ifcPSE.PropertyArgumentType = PropertyType.Identifier;\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationModeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetUnitaryControlElementTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_UnitaryControlElementTypeControlPanel(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetUnitaryControlElementTypeControlPanel = new PropertySetDescription();\r\n         propertySetUnitaryControlElementTypeControlPanel.Name = \"Pset_UnitaryControlElementTypeControlPanel\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryControlElementTypeControlPanel\"))\r\n         {\r\n            propertySetUnitaryControlElementTypeControlPanel.EntityTypes.Add(IFCEntityType.IfcUnitaryControlElement);\r\n            propertySetUnitaryControlElementTypeControlPanel.EntityTypes.Add(IFCEntityType.IfcUnitaryControlElementType);\r\n            propertySetUnitaryControlElementTypeControlPanel.ObjectType = \"IfcUnitaryControlElement\";\r\n            propertySetUnitaryControlElementTypeControlPanel.PredefinedType = \"CONTROLPANEL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementTypeControlPanel.NominalCurrent\", \"NominalCurrent\");\r\n            ifcPSE.PropertyName = \"NominalCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementTypeControlPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementTypeControlPanel.NominalPower\", \"NominalPower\");\r\n            ifcPSE.PropertyName = \"NominalPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementTypeControlPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementTypeControlPanel.RatedVoltage\", \"RatedVoltage\");\r\n            ifcPSE.PropertyName = \"RatedVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementTypeControlPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementTypeControlPanel.ReferenceAirRelativeHumidity\", \"ReferenceAirRelativeHumidity\");\r\n            ifcPSE.PropertyName = \"ReferenceAirRelativeHumidity\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceAirRelativeHumidityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementTypeControlPanel.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementTypeControlPanel.ReferenceEnvironmentTemperature\", \"ReferenceEnvironmentTemperature\");\r\n            ifcPSE.PropertyName = \"ReferenceEnvironmentTemperature\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceEnvironmentTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementTypeControlPanel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetUnitaryControlElementTypeControlPanel);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_UnitaryControlElementTypeIndicatorPanel(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetUnitaryControlElementTypeIndicatorPanel = new PropertySetDescription();\r\n         propertySetUnitaryControlElementTypeIndicatorPanel.Name = \"Pset_UnitaryControlElementTypeIndicatorPanel\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryControlElementTypeIndicatorPanel\"))\r\n         {\r\n            propertySetUnitaryControlElementTypeIndicatorPanel.EntityTypes.Add(IFCEntityType.IfcUnitaryControlElement);\r\n            propertySetUnitaryControlElementTypeIndicatorPanel.ObjectType = \"IfcUnitaryControlElement\";\r\n            propertySetUnitaryControlElementTypeIndicatorPanel.PredefinedType = \"INDICATORPANEL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementTypeIndicatorPanel.Application\", \"Application\");\r\n            ifcPSE.PropertyName = \"Application\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_UnitaryControlElementApplication);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Application\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ApplicationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementTypeIndicatorPanel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryControlElementTypeIndicatorPanel\"))\r\n         {\r\n            propertySetUnitaryControlElementTypeIndicatorPanel.EntityTypes.Add(IFCEntityType.IfcUnitaryControlElement);\r\n            propertySetUnitaryControlElementTypeIndicatorPanel.EntityTypes.Add(IFCEntityType.IfcUnitaryControlElementType);\r\n            propertySetUnitaryControlElementTypeIndicatorPanel.ObjectType = \"IfcUnitaryControlElement\";\r\n            propertySetUnitaryControlElementTypeIndicatorPanel.PredefinedType = \"INDICATORPANEL\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementTypeIndicatorPanel.UnitaryApplication\", \"UnitaryApplication\");\r\n            ifcPSE.PropertyName = \"UnitaryApplication\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_UnitaryControlElementApplication);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UnitaryApplicationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementTypeIndicatorPanel.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetUnitaryControlElementTypeIndicatorPanel);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_UnitaryControlElementTypeThermostat(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetUnitaryControlElementTypeThermostat = new PropertySetDescription();\r\n         propertySetUnitaryControlElementTypeThermostat.Name = \"Pset_UnitaryControlElementTypeThermostat\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryControlElementTypeThermostat\"))\r\n         {\r\n            propertySetUnitaryControlElementTypeThermostat.EntityTypes.Add(IFCEntityType.IfcUnitaryControlElement);\r\n            propertySetUnitaryControlElementTypeThermostat.ObjectType = \"IfcUnitaryControlElement\";\r\n            propertySetUnitaryControlElementTypeThermostat.PredefinedType = \"THERMOSTAT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementTypeThermostat.TemperatureSetPoint\", \"TemperatureSetPoint\");\r\n            ifcPSE.PropertyName = \"TemperatureSetPoint\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Temperature Set Point\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementTypeThermostat.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryControlElementTypeThermostat\"))\r\n         {\r\n            propertySetUnitaryControlElementTypeThermostat.EntityTypes.Add(IFCEntityType.IfcUnitaryControlElement);\r\n            propertySetUnitaryControlElementTypeThermostat.EntityTypes.Add(IFCEntityType.IfcUnitaryControlElementType);\r\n            propertySetUnitaryControlElementTypeThermostat.ObjectType = \"IfcUnitaryControlElement\";\r\n            propertySetUnitaryControlElementTypeThermostat.PredefinedType = \"THERMOSTAT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryControlElementTypeThermostat.TemperatureSetPoint\", \"TemperatureSetPoint\");\r\n            ifcPSE.PropertyName = \"TemperatureSetPoint\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TemperatureSetPointCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryControlElementTypeThermostat.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetUnitaryControlElementTypeThermostat);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_UnitaryEquipmentTypeAirConditioningUnit(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetUnitaryEquipmentTypeAirConditioningUnit = new PropertySetDescription();\r\n         propertySetUnitaryEquipmentTypeAirConditioningUnit.Name = \"Pset_UnitaryEquipmentTypeAirConditioningUnit\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryEquipmentTypeAirConditioningUnit\"))\r\n         {\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.EntityTypes.Add(IFCEntityType.IfcUnitaryEquipmentType);\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.ObjectType = \"IfcUnitaryEquipmentType\";\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.PredefinedType = \"AIRCONDITIONINGUNIT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.SensibleCoolingCapacity\", \"SensibleCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"SensibleCoolingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.LatentCoolingCapacity\", \"LatentCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"LatentCoolingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LatentCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.CoolingEfficiency\", \"CoolingEfficiency\");\r\n            ifcPSE.PropertyName = \"CoolingEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.HeatingCapacity\", \"HeatingCapacity\");\r\n            ifcPSE.PropertyName = \"HeatingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.HeatingEfficiency\", \"HeatingEfficiency\");\r\n            ifcPSE.PropertyName = \"HeatingEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.CondenserFlowrate\", \"CondenserFlowrate\");\r\n            ifcPSE.PropertyName = \"CondenserFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondenserFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.CondenserEnteringTemperature\", \"CondenserEnteringTemperature\");\r\n            ifcPSE.PropertyName = \"CondenserEnteringTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondenserEnteringTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.CondenserLeavingTemperature\", \"CondenserLeavingTemperature\");\r\n            ifcPSE.PropertyName = \"CondenserLeavingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondenserLeavingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.OutsideAirFlowrate\", \"OutsideAirFlowrate\");\r\n            ifcPSE.PropertyName = \"OutsideAirFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutsideAirFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryEquipmentTypeAirConditioningUnit\"))\r\n         {\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.EntityTypes.Add(IFCEntityType.IfcUnitaryEquipmentType);\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.ObjectType = \"IfcUnitaryEquipmentType\";\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.PredefinedType = \"AIRCONDITIONINGUNIT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.SensibleCoolingCapacity\", \"SensibleCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"SensibleCoolingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.LatentCoolingCapacity\", \"LatentCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"LatentCoolingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LatentCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.CoolingEfficiency\", \"CoolingEfficiency\");\r\n            ifcPSE.PropertyName = \"CoolingEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.HeatingCapacity\", \"HeatingCapacity\");\r\n            ifcPSE.PropertyName = \"HeatingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.HeatingEfficiency\", \"HeatingEfficiency\");\r\n            ifcPSE.PropertyName = \"HeatingEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.CondenserFlowrate\", \"CondenserFlowrate\");\r\n            ifcPSE.PropertyName = \"CondenserFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondenserFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.CondenserEnteringTemperature\", \"CondenserEnteringTemperature\");\r\n            ifcPSE.PropertyName = \"CondenserEnteringTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondenserEnteringTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.CondenserLeavingTemperature\", \"CondenserLeavingTemperature\");\r\n            ifcPSE.PropertyName = \"CondenserLeavingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondenserLeavingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.OutsideAirFlowrate\", \"OutsideAirFlowrate\");\r\n            ifcPSE.PropertyName = \"OutsideAirFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutsideAirFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryEquipmentTypeAirConditioningUnit\"))\r\n         {\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.EntityTypes.Add(IFCEntityType.IfcUnitaryEquipment);\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.ObjectType = \"IfcUnitaryEquipment\";\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.PredefinedType = \"AIRCONDITIONINGUNIT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.SensibleCoolingCapacity\", \"SensibleCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"SensibleCoolingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Sensible Cooling Capacity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"顕熱冷却能力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.LatentCoolingCapacity\", \"LatentCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"LatentCoolingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Latent Cooling Capacity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"潜熱冷却能力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LatentCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.CoolingEfficiency\", \"CoolingEfficiency\");\r\n            ifcPSE.PropertyName = \"CoolingEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cooling Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"冷却効率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.HeatingCapacity\", \"HeatingCapacity\");\r\n            ifcPSE.PropertyName = \"HeatingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heating Capacity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"加熱容量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.HeatingEfficiency\", \"HeatingEfficiency\");\r\n            ifcPSE.PropertyName = \"HeatingEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heating Efficiency\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"加熱効率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.CondenserFlowrate\", \"CondenserFlowrate\");\r\n            ifcPSE.PropertyName = \"CondenserFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Condenser Flowrate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"凝縮器流量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondenserFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.CondenserEnteringTemperature\", \"CondenserEnteringTemperature\");\r\n            ifcPSE.PropertyName = \"CondenserEnteringTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Condenser Entering Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"凝縮器入口温度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondenserEnteringTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.CondenserLeavingTemperature\", \"CondenserLeavingTemperature\");\r\n            ifcPSE.PropertyName = \"CondenserLeavingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Condenser Leaving Temperature\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"凝縮器出口温度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondenserLeavingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.OutsideAirFlowrate\", \"OutsideAirFlowrate\");\r\n            ifcPSE.PropertyName = \"OutsideAirFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outside Air Flowrate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外気流量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutsideAirFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryEquipmentTypeAirConditioningUnit\"))\r\n         {\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.EntityTypes.Add(IFCEntityType.IfcUnitaryEquipment);\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.EntityTypes.Add(IFCEntityType.IfcUnitaryEquipmentType);\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.ObjectType = \"IfcUnitaryEquipment\";\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.PredefinedType = \"AIRCONDITIONINGUNIT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.SensibleCoolingCapacity\", \"SensibleCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"SensibleCoolingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SensibleCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.LatentCoolingCapacity\", \"LatentCoolingCapacity\");\r\n            ifcPSE.PropertyName = \"LatentCoolingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LatentCoolingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.CoolingEfficiency\", \"CoolingEfficiency\");\r\n            ifcPSE.PropertyName = \"CoolingEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoolingEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.HeatingCapacity\", \"HeatingCapacity\");\r\n            ifcPSE.PropertyName = \"HeatingCapacity\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingCapacityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.HeatingEfficiency\", \"HeatingEfficiency\");\r\n            ifcPSE.PropertyName = \"HeatingEfficiency\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatingEfficiencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.CondenserFlowrate\", \"CondenserFlowrate\");\r\n            ifcPSE.PropertyName = \"CondenserFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondenserFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.CondenserEnteringTemperature\", \"CondenserEnteringTemperature\");\r\n            ifcPSE.PropertyName = \"CondenserEnteringTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondenserEnteringTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.CondenserLeavingTemperature\", \"CondenserLeavingTemperature\");\r\n            ifcPSE.PropertyName = \"CondenserLeavingTemperature\";\r\n            ifcPSE.PropertyType = PropertyType.ThermodynamicTemperature;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CondenserLeavingTemperatureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirConditioningUnit.OutsideAirFlowrate\", \"OutsideAirFlowrate\");\r\n            ifcPSE.PropertyName = \"OutsideAirFlowrate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutsideAirFlowrateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirConditioningUnit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetUnitaryEquipmentTypeAirConditioningUnit);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_UnitaryEquipmentTypeAirHandler(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetUnitaryEquipmentTypeAirHandler = new PropertySetDescription();\r\n         propertySetUnitaryEquipmentTypeAirHandler.Name = \"Pset_UnitaryEquipmentTypeAirHandler\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryEquipmentTypeAirHandler\"))\r\n         {\r\n            propertySetUnitaryEquipmentTypeAirHandler.EntityTypes.Add(IFCEntityType.IfcUnitaryEquipmentType);\r\n            propertySetUnitaryEquipmentTypeAirHandler.ObjectType = \"IfcUnitaryEquipmentType\";\r\n            propertySetUnitaryEquipmentTypeAirHandler.PredefinedType = \"AIRHANDLER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirHandler.AirHandlerConstruction\", \"AirHandlerConstruction\");\r\n            ifcPSE.PropertyName = \"AirHandlerConstruction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirHandlerConstruction);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirHandlerConstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirHandler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirHandler.AirHandlerFanCoilArrangement\", \"AirHandlerFanCoilArrangement\");\r\n            ifcPSE.PropertyName = \"AirHandlerFanCoilArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_AirHandlerFanCoilArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirHandlerFanCoilArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirHandler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirHandler.DualDeck\", \"DualDeck\");\r\n            ifcPSE.PropertyName = \"DualDeck\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DualDeckCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirHandler.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryEquipmentTypeAirHandler\"))\r\n         {\r\n            propertySetUnitaryEquipmentTypeAirHandler.EntityTypes.Add(IFCEntityType.IfcUnitaryEquipmentType);\r\n            propertySetUnitaryEquipmentTypeAirHandler.ObjectType = \"IfcUnitaryEquipmentType\";\r\n            propertySetUnitaryEquipmentTypeAirHandler.PredefinedType = \"AIRHANDLER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirHandler.AirHandlerConstruction\", \"AirHandlerConstruction\");\r\n            ifcPSE.PropertyName = \"AirHandlerConstruction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirHandlerConstruction);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirHandlerConstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirHandler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirHandler.AirHandlerFanCoilArrangement\", \"AirHandlerFanCoilArrangement\");\r\n            ifcPSE.PropertyName = \"AirHandlerFanCoilArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_AirHandlerFanCoilArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirHandlerFanCoilArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirHandler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirHandler.DualDeck\", \"DualDeck\");\r\n            ifcPSE.PropertyName = \"DualDeck\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DualDeckCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirHandler.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryEquipmentTypeAirHandler\"))\r\n         {\r\n            propertySetUnitaryEquipmentTypeAirHandler.EntityTypes.Add(IFCEntityType.IfcUnitaryEquipment);\r\n            propertySetUnitaryEquipmentTypeAirHandler.ObjectType = \"IfcUnitaryEquipment\";\r\n            propertySetUnitaryEquipmentTypeAirHandler.PredefinedType = \"AIRHANDLER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirHandler.AirHandlerConstruction\", \"AirHandlerConstruction\");\r\n            ifcPSE.PropertyName = \"AirHandlerConstruction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AirHandlerConstruction);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Handler Construction\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"空調機製造\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirHandlerConstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirHandler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirHandler.AirHandlerFanCoilArrangement\", \"AirHandlerFanCoilArrangement\");\r\n            ifcPSE.PropertyName = \"AirHandlerFanCoilArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_AirHandlerFanCoilArrangement);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Air Handler Fan Coil Arrangement\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"空調機ファン・コイル配列\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirHandlerFanCoilArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirHandler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirHandler.DualDeck\", \"DualDeck\");\r\n            ifcPSE.PropertyName = \"DualDeck\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Dual Deck\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"2層\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DualDeckCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirHandler.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryEquipmentTypeAirHandler\"))\r\n         {\r\n            propertySetUnitaryEquipmentTypeAirHandler.EntityTypes.Add(IFCEntityType.IfcUnitaryEquipment);\r\n            propertySetUnitaryEquipmentTypeAirHandler.EntityTypes.Add(IFCEntityType.IfcUnitaryEquipmentType);\r\n            propertySetUnitaryEquipmentTypeAirHandler.ObjectType = \"IfcUnitaryEquipment\";\r\n            propertySetUnitaryEquipmentTypeAirHandler.PredefinedType = \"AIRHANDLER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirHandler.AirHandlerConstruction\", \"AirHandlerConstruction\");\r\n            ifcPSE.PropertyName = \"AirHandlerConstruction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AirHandlerConstruction);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirHandlerConstructionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirHandler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirHandler.AirHandlerFanCoilArrangement\", \"AirHandlerFanCoilArrangement\");\r\n            ifcPSE.PropertyName = \"AirHandlerFanCoilArrangement\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_AirHandlerFanCoilArrangement);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AirHandlerFanCoilArrangementCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirHandler.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeAirHandler.DualDeck\", \"DualDeck\");\r\n            ifcPSE.PropertyName = \"DualDeck\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DualDeckCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeAirHandler.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetUnitaryEquipmentTypeAirHandler);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_UnitaryEquipmentTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetUnitaryEquipmentTypeCommon = new PropertySetDescription();\r\n         propertySetUnitaryEquipmentTypeCommon.Name = \"Pset_UnitaryEquipmentTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryEquipmentTypeCommon\"))\r\n         {\r\n            propertySetUnitaryEquipmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcUnitaryEquipment);\r\n            propertySetUnitaryEquipmentTypeCommon.ObjectType = \"IfcUnitaryEquipment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UnitaryEquipmentTypeCommon\"))\r\n         {\r\n            propertySetUnitaryEquipmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcUnitaryEquipment);\r\n            propertySetUnitaryEquipmentTypeCommon.EntityTypes.Add(IFCEntityType.IfcUnitaryEquipmentType);\r\n            propertySetUnitaryEquipmentTypeCommon.ObjectType = \"IfcUnitaryEquipment\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UnitaryEquipmentTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUnitaryEquipmentTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetUnitaryEquipmentTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_UtilityConsumption(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetUtilityConsumption = new PropertySetDescription();\r\n         propertySetUtilityConsumption.Name = \"Pset_UtilityConsumption\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UtilityConsumption\"))\r\n         {\r\n            propertySetUtilityConsumption.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumption.Heat\", \"Heat\");\r\n            ifcPSE.PropertyName = \"Heat\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumption.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumption.Electricity\", \"Electricity\");\r\n            ifcPSE.PropertyName = \"Electricity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumption.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumption.Water\", \"Water\");\r\n            ifcPSE.PropertyName = \"Water\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumption.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumption.Fuel\", \"Fuel\");\r\n            ifcPSE.PropertyName = \"Fuel\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FuelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumption.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumption.Steam\", \"Steam\");\r\n            ifcPSE.PropertyName = \"Steam\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SteamCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumption.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UtilityConsumption\"))\r\n         {\r\n            propertySetUtilityConsumption.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumption.Heat\", \"Heat\");\r\n            ifcPSE.PropertyName = \"Heat\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumption.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumption.Electricity\", \"Electricity\");\r\n            ifcPSE.PropertyName = \"Electricity\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumption.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumption.Water\", \"Water\");\r\n            ifcPSE.PropertyName = \"Water\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumption.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumption.Fuel\", \"Fuel\");\r\n            ifcPSE.PropertyName = \"Fuel\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FuelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumption.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumption.Steam\", \"Steam\");\r\n            ifcPSE.PropertyName = \"Steam\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SteamCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumption.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetUtilityConsumption);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_UtilityConsumptionPHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetUtilityConsumptionPHistory = new PropertySetDescription();\r\n         propertySetUtilityConsumptionPHistory.Name = \"Pset_UtilityConsumptionPHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UtilityConsumptionPHistory\"))\r\n         {\r\n            propertySetUtilityConsumptionPHistory.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            propertySetUtilityConsumptionPHistory.ObjectType = \"IfcBuilding\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumptionPHistory.Heat\", \"Heat\");\r\n            ifcPSE.PropertyName = \"Heat\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Heat\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"열 소비량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumptionPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumptionPHistory.Electricity\", \"Electricity\");\r\n            ifcPSE.PropertyName = \"Electricity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Electricity\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"전력 소비량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumptionPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumptionPHistory.Water\", \"Water\");\r\n            ifcPSE.PropertyName = \"Water\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Water\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"물소비\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumptionPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumptionPHistory.Fuel\", \"Fuel\");\r\n            ifcPSE.PropertyName = \"Fuel\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fuel\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"연료 소비량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FuelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumptionPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumptionPHistory.Steam\", \"Steam\");\r\n            ifcPSE.PropertyName = \"Steam\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Steam\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"증기소비량\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SteamCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumptionPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_UtilityConsumptionPHistory\"))\r\n         {\r\n            propertySetUtilityConsumptionPHistory.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            propertySetUtilityConsumptionPHistory.ObjectType = \"IfcBuilding\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumptionPHistory.Heat\", \"Heat\");\r\n            ifcPSE.PropertyName = \"Heat\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeatCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumptionPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumptionPHistory.Electricity\", \"Electricity\");\r\n            ifcPSE.PropertyName = \"Electricity\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ElectricityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumptionPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumptionPHistory.Water\", \"Water\");\r\n            ifcPSE.PropertyName = \"Water\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumptionPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumptionPHistory.Fuel\", \"Fuel\");\r\n            ifcPSE.PropertyName = \"Fuel\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FuelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumptionPHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_UtilityConsumptionPHistory.Steam\", \"Steam\");\r\n            ifcPSE.PropertyName = \"Steam\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SteamCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetUtilityConsumptionPHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetUtilityConsumptionPHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ValvePHistory(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetValvePHistory = new PropertySetDescription();\r\n         propertySetValvePHistory.Name = \"Pset_ValvePHistory\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValvePHistory\"))\r\n         {\r\n            propertySetValvePHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValvePHistory.PercentageOpen\", \"PercentageOpen\");\r\n            ifcPSE.PropertyName = \"PercentageOpen\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PercentageOpenCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValvePHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValvePHistory.MeasuredFlowRate\", \"MeasuredFlowRate\");\r\n            ifcPSE.PropertyName = \"MeasuredFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MeasuredFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValvePHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValvePHistory.MeasuredPressureDrop\", \"MeasuredPressureDrop\");\r\n            ifcPSE.PropertyName = \"MeasuredPressureDrop\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MeasuredPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValvePHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValvePHistory\"))\r\n         {\r\n            propertySetValvePHistory.EntityTypes.Add(IFCEntityType.IfcPerformanceHistory);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValvePHistory.PercentageOpen\", \"PercentageOpen\");\r\n            ifcPSE.PropertyName = \"PercentageOpen\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PercentageOpenCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValvePHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValvePHistory.MeasuredFlowRate\", \"MeasuredFlowRate\");\r\n            ifcPSE.PropertyName = \"MeasuredFlowRate\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MeasuredFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValvePHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValvePHistory.MeasuredPressureDrop\", \"MeasuredPressureDrop\");\r\n            ifcPSE.PropertyName = \"MeasuredPressureDrop\";\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MeasuredPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValvePHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValvePHistory\"))\r\n         {\r\n            propertySetValvePHistory.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValvePHistory.ObjectType = \"IfcValve\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValvePHistory.PercentageOpen\", \"PercentageOpen\");\r\n            ifcPSE.PropertyName = \"PercentageOpen\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Percentage Open\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"パーセント開度\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PercentageOpenCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValvePHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValvePHistory.MeasuredFlowRate\", \"MeasuredFlowRate\");\r\n            ifcPSE.PropertyName = \"MeasuredFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Measured Flow Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"計測流量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MeasuredFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValvePHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValvePHistory.MeasuredPressureDrop\", \"MeasuredPressureDrop\");\r\n            ifcPSE.PropertyName = \"MeasuredPressureDrop\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Measured Pressure Drop\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"計測圧力降下\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MeasuredPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValvePHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValvePHistory\"))\r\n         {\r\n            propertySetValvePHistory.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValvePHistory.ObjectType = \"IfcValve\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValvePHistory.PercentageOpen\", \"PercentageOpen\");\r\n            ifcPSE.PropertyName = \"PercentageOpen\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PercentageOpenCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValvePHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValvePHistory.MeasuredFlowRate\", \"MeasuredFlowRate\");\r\n            ifcPSE.PropertyName = \"MeasuredFlowRate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MeasuredFlowRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValvePHistory.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValvePHistory.MeasuredPressureDrop\", \"MeasuredPressureDrop\");\r\n            ifcPSE.PropertyName = \"MeasuredPressureDrop\";\r\n            ifcPSE.PropertyType = PropertyType.IfcTimeSeries;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MeasuredPressureDropCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValvePHistory.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetValvePHistory);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ValveTypeAirRelease(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetValveTypeAirRelease = new PropertySetDescription();\r\n         propertySetValveTypeAirRelease.Name = \"Pset_ValveTypeAirRelease\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeAirRelease\"))\r\n         {\r\n            propertySetValveTypeAirRelease.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeAirRelease.ObjectType = \"IfcValveType\";\r\n            propertySetValveTypeAirRelease.PredefinedType = \"AIRRELEASE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeAirRelease.IsAutomatic\", \"IsAutomatic\");\r\n            ifcPSE.PropertyName = \"IsAutomatic\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsAutomaticCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeAirRelease.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeAirRelease\"))\r\n         {\r\n            propertySetValveTypeAirRelease.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeAirRelease.ObjectType = \"IfcValveType\";\r\n            propertySetValveTypeAirRelease.PredefinedType = \"AIRRELEASE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeAirRelease.IsAutomatic\", \"IsAutomatic\");\r\n            ifcPSE.PropertyName = \"IsAutomatic\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsAutomaticCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeAirRelease.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeAirRelease\"))\r\n         {\r\n            propertySetValveTypeAirRelease.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypeAirRelease.ObjectType = \"IfcValve\";\r\n            propertySetValveTypeAirRelease.PredefinedType = \"AIRRELEASE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeAirRelease.IsAutomatic\", \"IsAutomatic\");\r\n            ifcPSE.PropertyName = \"IsAutomatic\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Automatic\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"自動\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsAutomaticCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeAirRelease.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeAirRelease\"))\r\n         {\r\n            propertySetValveTypeAirRelease.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypeAirRelease.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeAirRelease.ObjectType = \"IfcValve\";\r\n            propertySetValveTypeAirRelease.PredefinedType = \"AIRRELEASE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeAirRelease.IsAutomatic\", \"IsAutomatic\");\r\n            ifcPSE.PropertyName = \"IsAutomatic\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsAutomaticCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeAirRelease.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetValveTypeAirRelease);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ValveTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetValveTypeCommon = new PropertySetDescription();\r\n         propertySetValveTypeCommon.Name = \"Pset_ValveTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeCommon\"))\r\n         {\r\n            propertySetValveTypeCommon.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.ValvePattern\", \"ValvePattern\");\r\n            ifcPSE.PropertyName = \"ValvePattern\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_ValvePattern);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValvePatternCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.ValveOperation\", \"ValveOperation\");\r\n            ifcPSE.PropertyName = \"ValveOperation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_ValveOperation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValveOperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.ValveMechanism\", \"ValveMechanism\");\r\n            ifcPSE.PropertyName = \"ValveMechanism\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_ValveMechanism);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValveMechanismCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.Size\", \"Size\");\r\n            ifcPSE.PropertyName = \"Size\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.BodyMaterial\", \"BodyMaterial\");\r\n            ifcPSE.PropertyName = \"BodyMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.OperatingMechanismMaterial\", \"OperatingMechanismMaterial\");\r\n            ifcPSE.PropertyName = \"OperatingMechanismMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperatingMechanismMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.TestPressure\", \"TestPressure\");\r\n            ifcPSE.PropertyName = \"TestPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TestPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.WorkingPressure\", \"WorkingPressure\");\r\n            ifcPSE.PropertyName = \"WorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.FlowCoefficient\", \"FlowCoefficient\");\r\n            ifcPSE.PropertyName = \"FlowCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.CloseOffRating\", \"CloseOffRating\");\r\n            ifcPSE.PropertyName = \"CloseOffRating\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CloseOffRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeCommon\"))\r\n         {\r\n            propertySetValveTypeCommon.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.ValvePattern\", \"ValvePattern\");\r\n            ifcPSE.PropertyName = \"ValvePattern\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ValvePattern);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValvePatternCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.ValveOperation\", \"ValveOperation\");\r\n            ifcPSE.PropertyName = \"ValveOperation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ValveOperation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValveOperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.ValveMechanism\", \"ValveMechanism\");\r\n            ifcPSE.PropertyName = \"ValveMechanism\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_ValveMechanism);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValveMechanismCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.Size\", \"Size\");\r\n            ifcPSE.PropertyName = \"Size\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.BodyMaterial\", \"BodyMaterial\");\r\n            ifcPSE.PropertyName = \"BodyMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.OperatingMechanismMaterial\", \"OperatingMechanismMaterial\");\r\n            ifcPSE.PropertyName = \"OperatingMechanismMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperatingMechanismMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.TestPressure\", \"TestPressure\");\r\n            ifcPSE.PropertyName = \"TestPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TestPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.WorkingPressure\", \"WorkingPressure\");\r\n            ifcPSE.PropertyName = \"WorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.FlowCoefficient\", \"FlowCoefficient\");\r\n            ifcPSE.PropertyName = \"FlowCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.CloseOffRating\", \"CloseOffRating\");\r\n            ifcPSE.PropertyName = \"CloseOffRating\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CloseOffRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeCommon\"))\r\n         {\r\n            propertySetValveTypeCommon.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypeCommon.ObjectType = \"IfcValve\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.ValvePattern\", \"ValvePattern\");\r\n            ifcPSE.PropertyName = \"ValvePattern\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ValvePattern);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Valve Pattern\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"弁の形\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValvePatternCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.ValveOperation\", \"ValveOperation\");\r\n            ifcPSE.PropertyName = \"ValveOperation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ValveOperation);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Valve Operation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"弁操作\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValveOperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.ValveMechanism\", \"ValveMechanism\");\r\n            ifcPSE.PropertyName = \"ValveMechanism\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ValveMechanism);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Valve Mechanism\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"弁機構\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValveMechanismCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.Size\", \"Size\");\r\n            ifcPSE.PropertyName = \"Size\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"サイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.TestPressure\", \"TestPressure\");\r\n            ifcPSE.PropertyName = \"TestPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Test Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"試験圧力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TestPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.WorkingPressure\", \"WorkingPressure\");\r\n            ifcPSE.PropertyName = \"WorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Working Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"運転圧力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.FlowCoefficient\", \"FlowCoefficient\");\r\n            ifcPSE.PropertyName = \"FlowCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flow Coefficient\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"流出係数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.CloseOffRating\", \"CloseOffRating\");\r\n            ifcPSE.PropertyName = \"CloseOffRating\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Close Off Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"クローズオフレーティング\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CloseOffRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeCommon\"))\r\n         {\r\n            propertySetValveTypeCommon.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypeCommon.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeCommon.ObjectType = \"IfcValve\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.ValvePattern\", \"ValvePattern\");\r\n            ifcPSE.PropertyName = \"ValvePattern\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ValvePattern);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValvePatternCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.ValveOperation\", \"ValveOperation\");\r\n            ifcPSE.PropertyName = \"ValveOperation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ValveOperation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValveOperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.ValveMechanism\", \"ValveMechanism\");\r\n            ifcPSE.PropertyName = \"ValveMechanism\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ValveMechanism);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ValveMechanismCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.Size\", \"Size\");\r\n            ifcPSE.PropertyName = \"Size\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.TestPressure\", \"TestPressure\");\r\n            ifcPSE.PropertyName = \"TestPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TestPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.WorkingPressure\", \"WorkingPressure\");\r\n            ifcPSE.PropertyName = \"WorkingPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkingPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.FlowCoefficient\", \"FlowCoefficient\");\r\n            ifcPSE.PropertyName = \"FlowCoefficient\";\r\n            ifcPSE.PropertyType = PropertyType.Real;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlowCoefficientCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeCommon.CloseOffRating\", \"CloseOffRating\");\r\n            ifcPSE.PropertyName = \"CloseOffRating\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CloseOffRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetValveTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ValveTypeDrawOffCock(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetValveTypeDrawOffCock = new PropertySetDescription();\r\n         propertySetValveTypeDrawOffCock.Name = \"Pset_ValveTypeDrawOffCock\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeDrawOffCock\"))\r\n         {\r\n            propertySetValveTypeDrawOffCock.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeDrawOffCock.ObjectType = \"IfcValveType\";\r\n            propertySetValveTypeDrawOffCock.PredefinedType = \"DRAWOFFCOCK\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeDrawOffCock.HasHoseUnion\", \"HasHoseUnion\");\r\n            ifcPSE.PropertyName = \"HasHoseUnion\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasHoseUnionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeDrawOffCock.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeDrawOffCock\"))\r\n         {\r\n            propertySetValveTypeDrawOffCock.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeDrawOffCock.ObjectType = \"IfcValveType\";\r\n            propertySetValveTypeDrawOffCock.PredefinedType = \"DRAWOFFCOCK\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeDrawOffCock.HasHoseUnion\", \"HasHoseUnion\");\r\n            ifcPSE.PropertyName = \"HasHoseUnion\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasHoseUnionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeDrawOffCock.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeDrawOffCock\"))\r\n         {\r\n            propertySetValveTypeDrawOffCock.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypeDrawOffCock.ObjectType = \"IfcValve\";\r\n            propertySetValveTypeDrawOffCock.PredefinedType = \"DRAWOFFCOCK\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeDrawOffCock.HasHoseUnion\", \"HasHoseUnion\");\r\n            ifcPSE.PropertyName = \"HasHoseUnion\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Hose Union\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ホースユニオン付き\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasHoseUnionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeDrawOffCock.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeDrawOffCock\"))\r\n         {\r\n            propertySetValveTypeDrawOffCock.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypeDrawOffCock.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeDrawOffCock.ObjectType = \"IfcValve\";\r\n            propertySetValveTypeDrawOffCock.PredefinedType = \"DRAWOFFCOCK\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeDrawOffCock.HasHoseUnion\", \"HasHoseUnion\");\r\n            ifcPSE.PropertyName = \"HasHoseUnion\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasHoseUnionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeDrawOffCock.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetValveTypeDrawOffCock);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ValveTypeFaucet(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetValveTypeFaucet = new PropertySetDescription();\r\n         propertySetValveTypeFaucet.Name = \"Pset_ValveTypeFaucet\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeFaucet\"))\r\n         {\r\n            propertySetValveTypeFaucet.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeFaucet.ObjectType = \"IfcValveType\";\r\n            propertySetValveTypeFaucet.PredefinedType = \"FAUCET\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.FaucetType\", \"FaucetType\");\r\n            ifcPSE.PropertyName = \"FaucetType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FaucetType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaucetTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.FaucetOperation\", \"FaucetOperation\");\r\n            ifcPSE.PropertyName = \"FaucetOperation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FaucetOperation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaucetOperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.FaucetFunction\", \"FaucetFunction\");\r\n            ifcPSE.PropertyName = \"FaucetFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_FaucetFunction);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaucetFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.Finish\", \"Finish\");\r\n            ifcPSE.PropertyName = \"Finish\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.FaucetTopDescription\", \"FaucetTopDescription\");\r\n            ifcPSE.PropertyName = \"FaucetTopDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaucetTopDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeFaucet\"))\r\n         {\r\n            propertySetValveTypeFaucet.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeFaucet.ObjectType = \"IfcValveType\";\r\n            propertySetValveTypeFaucet.PredefinedType = \"FAUCET\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.FaucetType\", \"FaucetType\");\r\n            ifcPSE.PropertyName = \"FaucetType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FaucetType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaucetTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.FaucetOperation\", \"FaucetOperation\");\r\n            ifcPSE.PropertyName = \"FaucetOperation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FaucetOperation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaucetOperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.FaucetFunction\", \"FaucetFunction\");\r\n            ifcPSE.PropertyName = \"FaucetFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_FaucetFunction);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaucetFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.Finish\", \"Finish\");\r\n            ifcPSE.PropertyName = \"Finish\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.FaucetTopDescription\", \"FaucetTopDescription\");\r\n            ifcPSE.PropertyName = \"FaucetTopDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaucetTopDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeFaucet\"))\r\n         {\r\n            propertySetValveTypeFaucet.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypeFaucet.ObjectType = \"IfcValve\";\r\n            propertySetValveTypeFaucet.PredefinedType = \"FAUCET\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.FaucetType\", \"FaucetType\");\r\n            ifcPSE.PropertyName = \"FaucetType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FaucetType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Faucet Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水栓タイプ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaucetTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.FaucetOperation\", \"FaucetOperation\");\r\n            ifcPSE.PropertyName = \"FaucetOperation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FaucetOperation);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Faucet Operation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水栓操作\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaucetOperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.FaucetFunction\", \"FaucetFunction\");\r\n            ifcPSE.PropertyName = \"FaucetFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_FaucetFunction);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Faucet Function\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水栓機能\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaucetFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.Finish\", \"Finish\");\r\n            ifcPSE.PropertyName = \"Finish\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Finish\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"仕上げ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.FaucetTopDescription\", \"FaucetTopDescription\");\r\n            ifcPSE.PropertyName = \"FaucetTopDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Faucet Top Description\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水栓の頂部\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaucetTopDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeFaucet\"))\r\n         {\r\n            propertySetValveTypeFaucet.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypeFaucet.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeFaucet.ObjectType = \"IfcValve\";\r\n            propertySetValveTypeFaucet.PredefinedType = \"FAUCET\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.FaucetType\", \"FaucetType\");\r\n            ifcPSE.PropertyName = \"FaucetType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FaucetType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaucetTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.FaucetOperation\", \"FaucetOperation\");\r\n            ifcPSE.PropertyName = \"FaucetOperation\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FaucetOperation);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaucetOperationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.FaucetFunction\", \"FaucetFunction\");\r\n            ifcPSE.PropertyName = \"FaucetFunction\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_FaucetFunction);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaucetFunctionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.Finish\", \"Finish\");\r\n            ifcPSE.PropertyName = \"Finish\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFaucet.FaucetTopDescription\", \"FaucetTopDescription\");\r\n            ifcPSE.PropertyName = \"FaucetTopDescription\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FaucetTopDescriptionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFaucet.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetValveTypeFaucet);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ValveTypeFlushing(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetValveTypeFlushing = new PropertySetDescription();\r\n         propertySetValveTypeFlushing.Name = \"Pset_ValveTypeFlushing\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeFlushing\"))\r\n         {\r\n            propertySetValveTypeFlushing.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeFlushing.ObjectType = \"IfcValveType\";\r\n            propertySetValveTypeFlushing.PredefinedType = \"FLUSHING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFlushing.FlushingRate\", \"FlushingRate\");\r\n            ifcPSE.PropertyName = \"FlushingRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlushingRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFlushing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFlushing.HasIntegralShutOffDevice\", \"HasIntegralShutOffDevice\");\r\n            ifcPSE.PropertyName = \"HasIntegralShutOffDevice\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasIntegralShutOffDeviceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFlushing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFlushing.IsHighPressure\", \"IsHighPressure\");\r\n            ifcPSE.PropertyName = \"IsHighPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsHighPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFlushing.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeFlushing\"))\r\n         {\r\n            propertySetValveTypeFlushing.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeFlushing.ObjectType = \"IfcValveType\";\r\n            propertySetValveTypeFlushing.PredefinedType = \"FLUSHING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFlushing.FlushingRate\", \"FlushingRate\");\r\n            ifcPSE.PropertyName = \"FlushingRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlushingRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFlushing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFlushing.HasIntegralShutOffDevice\", \"HasIntegralShutOffDevice\");\r\n            ifcPSE.PropertyName = \"HasIntegralShutOffDevice\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasIntegralShutOffDeviceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFlushing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFlushing.IsHighPressure\", \"IsHighPressure\");\r\n            ifcPSE.PropertyName = \"IsHighPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsHighPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFlushing.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeFlushing\"))\r\n         {\r\n            propertySetValveTypeFlushing.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypeFlushing.ObjectType = \"IfcValve\";\r\n            propertySetValveTypeFlushing.PredefinedType = \"FLUSHING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFlushing.FlushingRate\", \"FlushingRate\");\r\n            ifcPSE.PropertyName = \"FlushingRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Flushing Rate\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"フラッシュ率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlushingRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFlushing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFlushing.HasIntegralShutOffDevice\", \"HasIntegralShutOffDevice\");\r\n            ifcPSE.PropertyName = \"HasIntegralShutOffDevice\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Integral Shut Off Device\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"全体閉止装置がついているかどうか\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasIntegralShutOffDeviceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFlushing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFlushing.IsHighPressure\", \"IsHighPressure\");\r\n            ifcPSE.PropertyName = \"IsHighPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is High Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"高圧給水の有無\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsHighPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFlushing.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeFlushing\"))\r\n         {\r\n            propertySetValveTypeFlushing.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypeFlushing.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeFlushing.ObjectType = \"IfcValve\";\r\n            propertySetValveTypeFlushing.PredefinedType = \"FLUSHING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFlushing.FlushingRate\", \"FlushingRate\");\r\n            ifcPSE.PropertyName = \"FlushingRate\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FlushingRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFlushing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFlushing.HasIntegralShutOffDevice\", \"HasIntegralShutOffDevice\");\r\n            ifcPSE.PropertyName = \"HasIntegralShutOffDevice\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasIntegralShutOffDeviceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFlushing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeFlushing.IsHighPressure\", \"IsHighPressure\");\r\n            ifcPSE.PropertyName = \"IsHighPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsHighPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeFlushing.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetValveTypeFlushing);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ValveTypeGasTap(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetValveTypeGasTap = new PropertySetDescription();\r\n         propertySetValveTypeGasTap.Name = \"Pset_ValveTypeGasTap\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeGasTap\"))\r\n         {\r\n            propertySetValveTypeGasTap.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeGasTap.ObjectType = \"IfcValveType\";\r\n            propertySetValveTypeGasTap.PredefinedType = \"GASTAP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeGasTap.HasHoseUnion\", \"HasHoseUnion\");\r\n            ifcPSE.PropertyName = \"HasHoseUnion\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasHoseUnionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeGasTap.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeGasTap\"))\r\n         {\r\n            propertySetValveTypeGasTap.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeGasTap.ObjectType = \"IfcValveType\";\r\n            propertySetValveTypeGasTap.PredefinedType = \"GASTAP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeGasTap.HasHoseUnion\", \"HasHoseUnion\");\r\n            ifcPSE.PropertyName = \"HasHoseUnion\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasHoseUnionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeGasTap.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeGasTap\"))\r\n         {\r\n            propertySetValveTypeGasTap.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypeGasTap.ObjectType = \"IfcValve\";\r\n            propertySetValveTypeGasTap.PredefinedType = \"GASTAP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeGasTap.HasHoseUnion\", \"HasHoseUnion\");\r\n            ifcPSE.PropertyName = \"HasHoseUnion\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Hose Union\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ホースユニオン付き\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasHoseUnionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeGasTap.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeGasTap\"))\r\n         {\r\n            propertySetValveTypeGasTap.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypeGasTap.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeGasTap.ObjectType = \"IfcValve\";\r\n            propertySetValveTypeGasTap.PredefinedType = \"GASTAP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeGasTap.HasHoseUnion\", \"HasHoseUnion\");\r\n            ifcPSE.PropertyName = \"HasHoseUnion\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasHoseUnionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeGasTap.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetValveTypeGasTap);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ValveTypeIsolating(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetValveTypeIsolating = new PropertySetDescription();\r\n         propertySetValveTypeIsolating.Name = \"Pset_ValveTypeIsolating\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeIsolating\"))\r\n         {\r\n            propertySetValveTypeIsolating.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeIsolating.ObjectType = \"IfcValveType\";\r\n            propertySetValveTypeIsolating.PredefinedType = \"ISOLATING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeIsolating.IsNormallyOpen\", \"IsNormallyOpen\");\r\n            ifcPSE.PropertyName = \"IsNormallyOpen\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsNormallyOpenCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeIsolating.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeIsolating.IsolatingPurpose\", \"IsolatingPurpose\");\r\n            ifcPSE.PropertyName = \"IsolatingPurpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_IsolatingPurpose);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsolatingPurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeIsolating.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeIsolating\"))\r\n         {\r\n            propertySetValveTypeIsolating.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeIsolating.ObjectType = \"IfcValveType\";\r\n            propertySetValveTypeIsolating.PredefinedType = \"ISOLATING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeIsolating.IsNormallyOpen\", \"IsNormallyOpen\");\r\n            ifcPSE.PropertyName = \"IsNormallyOpen\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsNormallyOpenCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeIsolating.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeIsolating.IsolatingPurpose\", \"IsolatingPurpose\");\r\n            ifcPSE.PropertyName = \"IsolatingPurpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_IsolatingPurpose);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsolatingPurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeIsolating.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeIsolating\"))\r\n         {\r\n            propertySetValveTypeIsolating.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypeIsolating.ObjectType = \"IfcValve\";\r\n            propertySetValveTypeIsolating.PredefinedType = \"ISOLATING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeIsolating.IsNormallyOpen\", \"IsNormallyOpen\");\r\n            ifcPSE.PropertyName = \"IsNormallyOpen\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Normally Open\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ノーマルオープン\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsNormallyOpenCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeIsolating.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeIsolating.IsolatingPurpose\", \"IsolatingPurpose\");\r\n            ifcPSE.PropertyName = \"IsolatingPurpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_IsolatingPurpose);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Isolating Purpose\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"遮断目的\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsolatingPurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeIsolating.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeIsolating\"))\r\n         {\r\n            propertySetValveTypeIsolating.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypeIsolating.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeIsolating.ObjectType = \"IfcValve\";\r\n            propertySetValveTypeIsolating.PredefinedType = \"ISOLATING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeIsolating.IsNormallyOpen\", \"IsNormallyOpen\");\r\n            ifcPSE.PropertyName = \"IsNormallyOpen\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsNormallyOpenCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeIsolating.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeIsolating.IsolatingPurpose\", \"IsolatingPurpose\");\r\n            ifcPSE.PropertyName = \"IsolatingPurpose\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_IsolatingPurpose);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsolatingPurposeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeIsolating.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetValveTypeIsolating);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ValveTypeMixing(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetValveTypeMixing = new PropertySetDescription();\r\n         propertySetValveTypeMixing.Name = \"Pset_ValveTypeMixing\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeMixing\"))\r\n         {\r\n            propertySetValveTypeMixing.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeMixing.ObjectType = \"IfcValveType\";\r\n            propertySetValveTypeMixing.PredefinedType = \"MIXING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeMixing.MixerControl\", \"MixerControl\");\r\n            ifcPSE.PropertyName = \"MixerControl\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_MixingValveControl);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MixerControlCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeMixing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeMixing.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeMixing.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeMixing\"))\r\n         {\r\n            propertySetValveTypeMixing.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeMixing.ObjectType = \"IfcValveType\";\r\n            propertySetValveTypeMixing.PredefinedType = \"MIXING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeMixing.MixerControl\", \"MixerControl\");\r\n            ifcPSE.PropertyName = \"MixerControl\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_MixingValveControl);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MixerControlCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeMixing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeMixing.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeMixing.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeMixing\"))\r\n         {\r\n            propertySetValveTypeMixing.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypeMixing.ObjectType = \"IfcValve\";\r\n            propertySetValveTypeMixing.PredefinedType = \"MIXING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeMixing.MixerControl\", \"MixerControl\");\r\n            ifcPSE.PropertyName = \"MixerControl\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_MixingValveControl);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Mixer Control\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"混合制御\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MixerControlCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeMixing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeMixing.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outlet Connection Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"出力側接続口径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeMixing.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypeMixing\"))\r\n         {\r\n            propertySetValveTypeMixing.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypeMixing.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypeMixing.ObjectType = \"IfcValve\";\r\n            propertySetValveTypeMixing.PredefinedType = \"MIXING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeMixing.MixerControl\", \"MixerControl\");\r\n            ifcPSE.PropertyName = \"MixerControl\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_MixingValveControl);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MixerControlCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeMixing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypeMixing.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypeMixing.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetValveTypeMixing);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ValveTypePressureReducing(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetValveTypePressureReducing = new PropertySetDescription();\r\n         propertySetValveTypePressureReducing.Name = \"Pset_ValveTypePressureReducing\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypePressureReducing\"))\r\n         {\r\n            propertySetValveTypePressureReducing.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypePressureReducing.ObjectType = \"IfcValveType\";\r\n            propertySetValveTypePressureReducing.PredefinedType = \"PRESSUREREDUCING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypePressureReducing.UpstreamPressure\", \"UpstreamPressure\");\r\n            ifcPSE.PropertyName = \"UpstreamPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpstreamPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypePressureReducing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypePressureReducing.DownstreamPressure\", \"DownstreamPressure\");\r\n            ifcPSE.PropertyName = \"DownstreamPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DownstreamPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypePressureReducing.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypePressureReducing\"))\r\n         {\r\n            propertySetValveTypePressureReducing.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypePressureReducing.ObjectType = \"IfcValveType\";\r\n            propertySetValveTypePressureReducing.PredefinedType = \"PRESSUREREDUCING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypePressureReducing.UpstreamPressure\", \"UpstreamPressure\");\r\n            ifcPSE.PropertyName = \"UpstreamPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpstreamPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypePressureReducing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypePressureReducing.DownstreamPressure\", \"DownstreamPressure\");\r\n            ifcPSE.PropertyName = \"DownstreamPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DownstreamPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypePressureReducing.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypePressureReducing\"))\r\n         {\r\n            propertySetValveTypePressureReducing.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypePressureReducing.ObjectType = \"IfcValve\";\r\n            propertySetValveTypePressureReducing.PredefinedType = \"PRESSUREREDUCING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypePressureReducing.UpstreamPressure\", \"UpstreamPressure\");\r\n            ifcPSE.PropertyName = \"UpstreamPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Upstream Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"上流圧力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpstreamPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypePressureReducing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypePressureReducing.DownstreamPressure\", \"DownstreamPressure\");\r\n            ifcPSE.PropertyName = \"DownstreamPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Downstream Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"下流圧力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DownstreamPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypePressureReducing.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypePressureReducing\"))\r\n         {\r\n            propertySetValveTypePressureReducing.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypePressureReducing.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypePressureReducing.ObjectType = \"IfcValve\";\r\n            propertySetValveTypePressureReducing.PredefinedType = \"PRESSUREREDUCING\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypePressureReducing.UpstreamPressure\", \"UpstreamPressure\");\r\n            ifcPSE.PropertyName = \"UpstreamPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UpstreamPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypePressureReducing.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypePressureReducing.DownstreamPressure\", \"DownstreamPressure\");\r\n            ifcPSE.PropertyName = \"DownstreamPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DownstreamPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypePressureReducing.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetValveTypePressureReducing);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ValveTypePressureRelief(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetValveTypePressureRelief = new PropertySetDescription();\r\n         propertySetValveTypePressureRelief.Name = \"Pset_ValveTypePressureRelief\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypePressureRelief\"))\r\n         {\r\n            propertySetValveTypePressureRelief.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypePressureRelief.ObjectType = \"IfcValveType\";\r\n            propertySetValveTypePressureRelief.PredefinedType = \"PRESSURERELIEF\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypePressureRelief.ReliefPressure\", \"ReliefPressure\");\r\n            ifcPSE.PropertyName = \"ReliefPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReliefPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypePressureRelief.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypePressureRelief\"))\r\n         {\r\n            propertySetValveTypePressureRelief.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypePressureRelief.ObjectType = \"IfcValveType\";\r\n            propertySetValveTypePressureRelief.PredefinedType = \"PRESSURERELIEF\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypePressureRelief.ReliefPressure\", \"ReliefPressure\");\r\n            ifcPSE.PropertyName = \"ReliefPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReliefPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypePressureRelief.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypePressureRelief\"))\r\n         {\r\n            propertySetValveTypePressureRelief.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypePressureRelief.ObjectType = \"IfcValve\";\r\n            propertySetValveTypePressureRelief.PredefinedType = \"PRESSURERELIEF\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypePressureRelief.ReliefPressure\", \"ReliefPressure\");\r\n            ifcPSE.PropertyName = \"ReliefPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Relief Pressure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"リリーフ圧力\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReliefPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypePressureRelief.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ValveTypePressureRelief\"))\r\n         {\r\n            propertySetValveTypePressureRelief.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            propertySetValveTypePressureRelief.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            propertySetValveTypePressureRelief.ObjectType = \"IfcValve\";\r\n            propertySetValveTypePressureRelief.PredefinedType = \"PRESSURERELIEF\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ValveTypePressureRelief.ReliefPressure\", \"ReliefPressure\");\r\n            ifcPSE.PropertyName = \"ReliefPressure\";\r\n            ifcPSE.PropertyType = PropertyType.Pressure;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReliefPressureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetValveTypePressureRelief.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetValveTypePressureRelief);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_VegetationCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetVegetationCommon = new PropertySetDescription();\r\n         propertySetVegetationCommon.Name = \"Pset_VegetationCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_VegetationCommon\"))\r\n         {\r\n            propertySetVegetationCommon.EntityTypes.Add(IFCEntityType.IfcGeographicElement);\r\n            propertySetVegetationCommon.ObjectType = \"IfcGeographicElement\";\r\n            propertySetVegetationCommon.PredefinedType = \"VEGETATION\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_VegetationCommon.BotanicalName\", \"BotanicalName\");\r\n            ifcPSE.PropertyName = \"BotanicalName\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BotanicalNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVegetationCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VegetationCommon.LocalName\", \"LocalName\");\r\n            ifcPSE.PropertyName = \"LocalName\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LocalNameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVegetationCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetVegetationCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_VehicleAvailability(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetVehicleAvailability = new PropertySetDescription();\r\n         propertySetVehicleAvailability.Name = \"Pset_VehicleAvailability\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_VehicleAvailability\"))\r\n         {\r\n            propertySetVehicleAvailability.EntityTypes.Add(IFCEntityType.IfcVehicle);\r\n            propertySetVehicleAvailability.EntityTypes.Add(IFCEntityType.IfcVehicle);\r\n            propertySetVehicleAvailability.EntityTypes.Add(IFCEntityType.IfcVehicle);\r\n            propertySetVehicleAvailability.EntityTypes.Add(IFCEntityType.IfcVehicle);\r\n            propertySetVehicleAvailability.EntityTypes.Add(IFCEntityType.IfcVehicle);\r\n            propertySetVehicleAvailability.EntityTypes.Add(IFCEntityType.IfcVehicleType);\r\n            propertySetVehicleAvailability.EntityTypes.Add(IFCEntityType.IfcVehicleType);\r\n            propertySetVehicleAvailability.EntityTypes.Add(IFCEntityType.IfcVehicleType);\r\n            propertySetVehicleAvailability.EntityTypes.Add(IFCEntityType.IfcVehicleType);\r\n            propertySetVehicleAvailability.EntityTypes.Add(IFCEntityType.IfcVehicleType);\r\n            propertySetVehicleAvailability.ObjectType = \"IfcVehicle\";\r\n            propertySetVehicleAvailability.PredefinedType = \"VEHICLETRACKED\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_VehicleAvailability.VehicleAvailability\", \"VehicleAvailability\");\r\n            ifcPSE.PropertyName = \"VehicleAvailability\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VehicleAvailabilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVehicleAvailability.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VehicleAvailability.MaintenanceDowntime\", \"MaintenanceDowntime\");\r\n            ifcPSE.PropertyName = \"MaintenanceDowntime\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaintenanceDowntimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVehicleAvailability.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VehicleAvailability.WeatherDowntime\", \"WeatherDowntime\");\r\n            ifcPSE.PropertyName = \"WeatherDowntime\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeatherDowntimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVehicleAvailability.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetVehicleAvailability);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_VesselLineCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetVesselLineCommon = new PropertySetDescription();\r\n         propertySetVesselLineCommon.Name = \"Pset_VesselLineCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_VesselLineCommon\"))\r\n         {\r\n            propertySetVesselLineCommon.EntityTypes.Add(IFCEntityType.IfcMechanicalFastener);\r\n            propertySetVesselLineCommon.EntityTypes.Add(IFCEntityType.IfcMechanicalFastenerType);\r\n            propertySetVesselLineCommon.ObjectType = \"IfcMechanicalFastener\";\r\n            propertySetVesselLineCommon.PredefinedType = \"ROPE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_VesselLineCommon.LineIdentifier\", \"LineIdentifier\");\r\n            ifcPSE.PropertyName = \"LineIdentifier\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LineIdentifierCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVesselLineCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VesselLineCommon.MidshipToFairLead\", \"MidshipToFairLead\");\r\n            ifcPSE.PropertyName = \"MidshipToFairLead\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MidshipToFairLeadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVesselLineCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VesselLineCommon.CentreLineToFairlead\", \"CentreLineToFairlead\");\r\n            ifcPSE.PropertyName = \"CentreLineToFairlead\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CentreLineToFairleadCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVesselLineCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VesselLineCommon.HeightAboveMainDeck\", \"HeightAboveMainDeck\");\r\n            ifcPSE.PropertyName = \"HeightAboveMainDeck\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightAboveMainDeckCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVesselLineCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VesselLineCommon.FairleadToTermination\", \"FairleadToTermination\");\r\n            ifcPSE.PropertyName = \"FairleadToTermination\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FairleadToTerminationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVesselLineCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VesselLineCommon.WinchBreakLimit\", \"WinchBreakLimit\");\r\n            ifcPSE.PropertyName = \"WinchBreakLimit\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WinchBreakLimitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVesselLineCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VesselLineCommon.PreTensionAim\", \"PreTensionAim\");\r\n            ifcPSE.PropertyName = \"PreTensionAim\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PreTensionAimCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVesselLineCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VesselLineCommon.LineType\", \"LineType\");\r\n            ifcPSE.PropertyName = \"LineType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LineTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVesselLineCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VesselLineCommon.LineStrength\", \"LineStrength\");\r\n            ifcPSE.PropertyName = \"LineStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LineStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVesselLineCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VesselLineCommon.TailLength\", \"TailLength\");\r\n            ifcPSE.PropertyName = \"TailLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TailLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVesselLineCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VesselLineCommon.TailDiameter\", \"TailDiameter\");\r\n            ifcPSE.PropertyName = \"TailDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TailDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVesselLineCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VesselLineCommon.TailType\", \"TailType\");\r\n            ifcPSE.PropertyName = \"TailType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TailTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVesselLineCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VesselLineCommon.TailStrength\", \"TailStrength\");\r\n            ifcPSE.PropertyName = \"TailStrength\";\r\n            ifcPSE.PropertyType = PropertyType.Force;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TailStrengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVesselLineCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetVesselLineCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_VibrationIsolatorTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetVibrationIsolatorTypeCommon = new PropertySetDescription();\r\n         propertySetVibrationIsolatorTypeCommon.Name = \"Pset_VibrationIsolatorTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_VibrationIsolatorTypeCommon\"))\r\n         {\r\n            propertySetVibrationIsolatorTypeCommon.EntityTypes.Add(IFCEntityType.IfcVibrationIsolatorType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.VibrationTransmissibility\", \"VibrationTransmissibility\");\r\n            ifcPSE.PropertyName = \"VibrationTransmissibility\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VibrationTransmissibilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.IsolatorStaticDeflection\", \"IsolatorStaticDeflection\");\r\n            ifcPSE.PropertyName = \"IsolatorStaticDeflection\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsolatorStaticDeflectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.IsolatorCompressibility\", \"IsolatorCompressibility\");\r\n            ifcPSE.PropertyName = \"IsolatorCompressibility\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsolatorCompressibilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.MaximumSupportedWeight\", \"MaximumSupportedWeight\");\r\n            ifcPSE.PropertyName = \"MaximumSupportedWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumSupportedWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_VibrationIsolatorTypeCommon\"))\r\n         {\r\n            propertySetVibrationIsolatorTypeCommon.EntityTypes.Add(IFCEntityType.IfcVibrationIsolatorType);\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.VibrationTransmissibility\", \"VibrationTransmissibility\");\r\n            ifcPSE.PropertyName = \"VibrationTransmissibility\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VibrationTransmissibilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.IsolatorStaticDeflection\", \"IsolatorStaticDeflection\");\r\n            ifcPSE.PropertyName = \"IsolatorStaticDeflection\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsolatorStaticDeflectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.IsolatorCompressibility\", \"IsolatorCompressibility\");\r\n            ifcPSE.PropertyName = \"IsolatorCompressibility\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsolatorCompressibilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.Material\", \"Material\");\r\n            ifcPSE.PropertyName = \"Material\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.MaximumSupportedWeight\", \"MaximumSupportedWeight\");\r\n            ifcPSE.PropertyName = \"MaximumSupportedWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumSupportedWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_VibrationIsolatorTypeCommon\"))\r\n         {\r\n            propertySetVibrationIsolatorTypeCommon.EntityTypes.Add(IFCEntityType.IfcVibrationIsolator);\r\n            propertySetVibrationIsolatorTypeCommon.ObjectType = \"IfcVibrationIsolator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.VibrationTransmissibility\", \"VibrationTransmissibility\");\r\n            ifcPSE.PropertyName = \"VibrationTransmissibility\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Vibration Transmissibility\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"振動伝達\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VibrationTransmissibilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.IsolatorStaticDeflection\", \"IsolatorStaticDeflection\");\r\n            ifcPSE.PropertyName = \"IsolatorStaticDeflection\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Isolator Static Deflection\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"振動絶縁材静的たわみ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsolatorStaticDeflectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.IsolatorCompressibility\", \"IsolatorCompressibility\");\r\n            ifcPSE.PropertyName = \"IsolatorCompressibility\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Isolator Compressibility\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"振動絶縁材の圧縮率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsolatorCompressibilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.MaximumSupportedWeight\", \"MaximumSupportedWeight\");\r\n            ifcPSE.PropertyName = \"MaximumSupportedWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Maximum Supported Weight\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"最高支持重量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumSupportedWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"高さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_VibrationIsolatorTypeCommon\"))\r\n         {\r\n            propertySetVibrationIsolatorTypeCommon.EntityTypes.Add(IFCEntityType.IfcVibrationIsolator);\r\n            propertySetVibrationIsolatorTypeCommon.EntityTypes.Add(IFCEntityType.IfcVibrationIsolatorType);\r\n            propertySetVibrationIsolatorTypeCommon.ObjectType = \"IfcVibrationIsolator\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.VibrationTransmissibility\", \"VibrationTransmissibility\");\r\n            ifcPSE.PropertyName = \"VibrationTransmissibility\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VibrationTransmissibilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.IsolatorStaticDeflection\", \"IsolatorStaticDeflection\");\r\n            ifcPSE.PropertyName = \"IsolatorStaticDeflection\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsolatorStaticDeflectionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.IsolatorCompressibility\", \"IsolatorCompressibility\");\r\n            ifcPSE.PropertyName = \"IsolatorCompressibility\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsolatorCompressibilityCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.MaximumSupportedWeight\", \"MaximumSupportedWeight\");\r\n            ifcPSE.PropertyName = \"MaximumSupportedWeight\";\r\n            ifcPSE.PropertyType = PropertyType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumSupportedWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VibrationIsolatorTypeCommon.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVibrationIsolatorTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetVibrationIsolatorTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_VoltageInstrumentTransformer(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetVoltageInstrumentTransformer = new PropertySetDescription();\r\n         propertySetVoltageInstrumentTransformer.Name = \"Pset_VoltageInstrumentTransformer\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_VoltageInstrumentTransformer\"))\r\n         {\r\n            propertySetVoltageInstrumentTransformer.EntityTypes.Add(IFCEntityType.IfcFlowInstrument);\r\n            propertySetVoltageInstrumentTransformer.EntityTypes.Add(IFCEntityType.IfcFlowInstrument);\r\n            propertySetVoltageInstrumentTransformer.EntityTypes.Add(IFCEntityType.IfcFlowInstrumentType);\r\n            propertySetVoltageInstrumentTransformer.EntityTypes.Add(IFCEntityType.IfcFlowInstrumentType);\r\n            propertySetVoltageInstrumentTransformer.ObjectType = \"IfcFlowInstrument\";\r\n            propertySetVoltageInstrumentTransformer.PredefinedType = \"VOLTMETER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_VoltageInstrumentTransformer.AccuracyClass\", \"AccuracyClass\");\r\n            ifcPSE.PropertyName = \"AccuracyClass\";\r\n            ifcPSE.PropertyType = PropertyType.Ratio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyClassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVoltageInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VoltageInstrumentTransformer.AccuracyGrade\", \"AccuracyGrade\");\r\n            ifcPSE.PropertyName = \"AccuracyGrade\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AccuracyGradeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVoltageInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VoltageInstrumentTransformer.RatedVoltage\", \"RatedVoltage\");\r\n            ifcPSE.PropertyName = \"RatedVoltage\";\r\n            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.RatedVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVoltageInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VoltageInstrumentTransformer.NominalCurrent\", \"NominalCurrent\");\r\n            ifcPSE.PropertyName = \"NominalCurrent\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricCurrent;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalCurrentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVoltageInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VoltageInstrumentTransformer.NominalPower\", \"NominalPower\");\r\n            ifcPSE.PropertyName = \"NominalPower\";\r\n            ifcPSE.PropertyType = PropertyType.Power;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPowerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVoltageInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VoltageInstrumentTransformer.NumberOfPhases\", \"NumberOfPhases\");\r\n            ifcPSE.PropertyName = \"NumberOfPhases\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfPhasesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVoltageInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VoltageInstrumentTransformer.PrimaryFrequency\", \"PrimaryFrequency\");\r\n            ifcPSE.PropertyName = \"PrimaryFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVoltageInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VoltageInstrumentTransformer.PrimaryVoltage\", \"PrimaryVoltage\");\r\n            ifcPSE.PropertyName = \"PrimaryVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PrimaryVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVoltageInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VoltageInstrumentTransformer.SecondaryFrequency\", \"SecondaryFrequency\");\r\n            ifcPSE.PropertyName = \"SecondaryFrequency\";\r\n            ifcPSE.PropertyType = PropertyType.Frequency;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryFrequencyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVoltageInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_VoltageInstrumentTransformer.SecondaryVoltage\", \"SecondaryVoltage\");\r\n            ifcPSE.PropertyName = \"SecondaryVoltage\";\r\n            ifcPSE.PropertyType = PropertyType.ElectricVoltage;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondaryVoltageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetVoltageInstrumentTransformer.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetVoltageInstrumentTransformer);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_WallCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWallCommon = new PropertySetDescription();\r\n         propertySetWallCommon.Name = \"Pset_WallCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WallCommon\"))\r\n         {\r\n            propertySetWallCommon.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            propertySetWallCommon.EntityTypes.Add(IFCEntityType.IfcWallStandardCase);\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.Combustible\", \"Combustible\");\r\n            ifcPSE.PropertyName = \"Combustible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.SurfaceSpreadOfFlame\", \"SurfaceSpreadOfFlame\");\r\n            ifcPSE.PropertyName = \"SurfaceSpreadOfFlame\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceSpreadOfFlameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.ExtendToStructure\", \"ExtendToStructure\");\r\n            ifcPSE.PropertyName = \"ExtendToStructure\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExtendToStructureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.Compartmentation\", \"Compartmentation\");\r\n            ifcPSE.PropertyName = \"Compartmentation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompartmentationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WallCommon\"))\r\n         {\r\n            propertySetWallCommon.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            propertySetWallCommon.EntityTypes.Add(IFCEntityType.IfcWallStandardCase);\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.Combustible\", \"Combustible\");\r\n            ifcPSE.PropertyName = \"Combustible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.SurfaceSpreadOfFlame\", \"SurfaceSpreadOfFlame\");\r\n            ifcPSE.PropertyName = \"SurfaceSpreadOfFlame\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceSpreadOfFlameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.ExtendToStructure\", \"ExtendToStructure\");\r\n            ifcPSE.PropertyName = \"ExtendToStructure\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExtendToStructureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.Compartmentation\", \"Compartmentation\");\r\n            ifcPSE.PropertyName = \"Compartmentation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompartmentationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WallCommon\"))\r\n         {\r\n            propertySetWallCommon.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            propertySetWallCommon.ObjectType = \"IfcWall\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bauteiltyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Schallschutzklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Acoustic Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"IsolationAcoustique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"遮音等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"隔音等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Feuerwiderstandsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ResistanceAuFeu\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐火等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"防火等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.Combustible\", \"Combustible\");\r\n            ifcPSE.PropertyName = \"Combustible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Brennbares Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Combustible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Combustible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"可燃性区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否可燃\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.SurfaceSpreadOfFlame\", \"SurfaceSpreadOfFlame\");\r\n            ifcPSE.PropertyName = \"SurfaceSpreadOfFlame\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Brandverhalten\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Surface Spread Of Flame\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"SurfacePropagationFlamme\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceSpreadOfFlameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"U-Wert\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TransmissionThermique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱貫流率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"导热系数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Außenbauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EstExterieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否外部构件\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Tragendes Bauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Load Bearing\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Porteur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐力部材\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否承重\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.ExtendToStructure\", \"ExtendToStructure\");\r\n            ifcPSE.PropertyName = \"ExtendToStructure\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Raumhohe Wand\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Extend To Structure\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ExtensionStructure\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExtendToStructureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.Compartmentation\", \"Compartmentation\");\r\n            ifcPSE.PropertyName = \"Compartmentation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Brandabschnittsdefinierendes Bauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Compartmentation\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Compartimentage\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"防火区画\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompartmentationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WallCommon\"))\r\n         {\r\n            propertySetWallCommon.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            propertySetWallCommon.EntityTypes.Add(IFCEntityType.IfcWallType);\r\n            propertySetWallCommon.ObjectType = \"IfcWall\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.Combustible\", \"Combustible\");\r\n            ifcPSE.PropertyName = \"Combustible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CombustibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.SurfaceSpreadOfFlame\", \"SurfaceSpreadOfFlame\");\r\n            ifcPSE.PropertyName = \"SurfaceSpreadOfFlame\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceSpreadOfFlameCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.LoadBearing\", \"LoadBearing\");\r\n            ifcPSE.PropertyName = \"LoadBearing\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LoadBearingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.ExtendToStructure\", \"ExtendToStructure\");\r\n            ifcPSE.PropertyName = \"ExtendToStructure\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExtendToStructureCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WallCommon.Compartmentation\", \"Compartmentation\");\r\n            ifcPSE.PropertyName = \"Compartmentation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompartmentationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWallCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWallCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_Warranty(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWarranty = new PropertySetDescription();\r\n         propertySetWarranty.Name = \"Pset_Warranty\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Warranty\"))\r\n         {\r\n            propertySetWarranty.EntityTypes.Add(IFCEntityType.IfcProduct);\r\n            propertySetWarranty.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyIdentifier\", \"WarrantyIdentifier\");\r\n            ifcPSE.PropertyName = \"WarrantyIdentifier\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyIdentifierCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyStartDate\", \"WarrantyStartDate\");\r\n            ifcPSE.PropertyName = \"WarrantyStartDate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyStartDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyEndDate\", \"WarrantyEndDate\");\r\n            ifcPSE.PropertyName = \"WarrantyEndDate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyEndDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.IsExtendedWarranty\", \"IsExtendedWarranty\");\r\n            ifcPSE.PropertyName = \"IsExtendedWarranty\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExtendedWarrantyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyPeriod\", \"WarrantyPeriod\");\r\n            ifcPSE.PropertyName = \"WarrantyPeriod\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyPeriodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.PointOfContact\", \"PointOfContact\");\r\n            ifcPSE.PropertyName = \"PointOfContact\";\r\n            ifcPSE.PropertyType = PropertyType.IfcOrganization;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PointOfContactCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyContent\", \"WarrantyContent\");\r\n            ifcPSE.PropertyName = \"WarrantyContent\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.Exclusions\", \"Exclusions\");\r\n            ifcPSE.PropertyName = \"Exclusions\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExclusionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Warranty\"))\r\n         {\r\n            propertySetWarranty.EntityTypes.Add(IFCEntityType.IfcProduct);\r\n            propertySetWarranty.EntityTypes.Add(IFCEntityType.IfcSystem);\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyIdentifier\", \"WarrantyIdentifier\");\r\n            ifcPSE.PropertyName = \"WarrantyIdentifier\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyIdentifierCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyStartDate\", \"WarrantyStartDate\");\r\n            ifcPSE.PropertyName = \"WarrantyStartDate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyStartDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyEndDate\", \"WarrantyEndDate\");\r\n            ifcPSE.PropertyName = \"WarrantyEndDate\";\r\n            ifcPSE.PropertyType = PropertyType.IfcCalendarDate;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyEndDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.IsExtendedWarranty\", \"IsExtendedWarranty\");\r\n            ifcPSE.PropertyName = \"IsExtendedWarranty\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExtendedWarrantyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyPeriod\", \"WarrantyPeriod\");\r\n            ifcPSE.PropertyName = \"WarrantyPeriod\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyPeriodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.PointOfContact\", \"PointOfContact\");\r\n            ifcPSE.PropertyName = \"PointOfContact\";\r\n            ifcPSE.PropertyType = PropertyType.IfcOrganization;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PointOfContactCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyContent\", \"WarrantyContent\");\r\n            ifcPSE.PropertyName = \"WarrantyContent\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.Exclusions\", \"Exclusions\");\r\n            ifcPSE.PropertyName = \"Exclusions\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExclusionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Warranty\"))\r\n         {\r\n            propertySetWarranty.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetWarranty.ObjectType = \"IfcElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyIdentifier\", \"WarrantyIdentifier\");\r\n            ifcPSE.PropertyName = \"WarrantyIdentifier\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Warranty Identifier\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyIdentifierCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyStartDate\", \"WarrantyStartDate\");\r\n            ifcPSE.PropertyName = \"WarrantyStartDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Warranty Start Date\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyStartDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyEndDate\", \"WarrantyEndDate\");\r\n            ifcPSE.PropertyName = \"WarrantyEndDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Warranty End Date\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyEndDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.IsExtendedWarranty\", \"IsExtendedWarranty\");\r\n            ifcPSE.PropertyName = \"IsExtendedWarranty\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is Extended Warranty\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExtendedWarrantyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyPeriod\", \"WarrantyPeriod\");\r\n            ifcPSE.PropertyName = \"WarrantyPeriod\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Warranty Period\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyPeriodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyContent\", \"WarrantyContent\");\r\n            ifcPSE.PropertyName = \"WarrantyContent\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Warranty Content\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.PointOfContact\", \"PointOfContact\");\r\n            ifcPSE.PropertyName = \"PointOfContact\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Point Of Contact\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PointOfContactCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.Exclusions\", \"Exclusions\");\r\n            ifcPSE.PropertyName = \"Exclusions\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Exclusions\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExclusionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Warranty\"))\r\n         {\r\n            propertySetWarranty.EntityTypes.Add(IFCEntityType.IfcElement);\r\n            propertySetWarranty.EntityTypes.Add(IFCEntityType.IfcElementType);\r\n            propertySetWarranty.ObjectType = \"IfcElement\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyIdentifier\", \"WarrantyIdentifier\");\r\n            ifcPSE.PropertyName = \"WarrantyIdentifier\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyIdentifierCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyStartDate\", \"WarrantyStartDate\");\r\n            ifcPSE.PropertyName = \"WarrantyStartDate\";\r\n            ifcPSE.PropertyType = PropertyType.Date;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyStartDateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.IsExtendedWarranty\", \"IsExtendedWarranty\");\r\n            ifcPSE.PropertyName = \"IsExtendedWarranty\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExtendedWarrantyCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyPeriod\", \"WarrantyPeriod\");\r\n            ifcPSE.PropertyName = \"WarrantyPeriod\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyPeriodCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.WarrantyContent\", \"WarrantyContent\");\r\n            ifcPSE.PropertyName = \"WarrantyContent\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WarrantyContentCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.PointOfContact\", \"PointOfContact\");\r\n            ifcPSE.PropertyName = \"PointOfContact\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PointOfContactCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Warranty.Exclusions\", \"Exclusions\");\r\n            ifcPSE.PropertyName = \"Exclusions\";\r\n            ifcPSE.PropertyType = PropertyType.Text;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ExclusionsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWarranty.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWarranty);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_WasteTerminalTypeCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWasteTerminalTypeCommon = new PropertySetDescription();\r\n         propertySetWasteTerminalTypeCommon.Name = \"Pset_WasteTerminalTypeCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeCommon\"))\r\n         {\r\n            propertySetWasteTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcWasteTerminal);\r\n            propertySetWasteTerminalTypeCommon.ObjectType = \"IfcWasteTerminal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeCommon\"))\r\n         {\r\n            propertySetWasteTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcWasteTerminal);\r\n            propertySetWasteTerminalTypeCommon.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeCommon.ObjectType = \"IfcWasteTerminal\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWasteTerminalTypeCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_WasteTerminalTypeFloorTrap(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWasteTerminalTypeFloorTrap = new PropertySetDescription();\r\n         propertySetWasteTerminalTypeFloorTrap.Name = \"Pset_WasteTerminalTypeFloorTrap\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeFloorTrap\"))\r\n         {\r\n            propertySetWasteTerminalTypeFloorTrap.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeFloorTrap.ObjectType = \"FloorTrap\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.IsForSullageWater\", \"IsForSullageWater\");\r\n            ifcPSE.PropertyName = \"IsForSullageWater\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsForSullageWaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.SpilloverLevel\", \"SpilloverLevel\");\r\n            ifcPSE.PropertyName = \"SpilloverLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpilloverLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.BodyMaterial\", \"BodyMaterial\");\r\n            ifcPSE.PropertyName = \"BodyMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.TrapType\", \"TrapType\");\r\n            ifcPSE.PropertyName = \"TrapType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_TrapType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrapTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.HasStrainer\", \"HasStrainer\");\r\n            ifcPSE.PropertyName = \"HasStrainer\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasStrainerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.InletPatternType\", \"InletPatternType\");\r\n            ifcPSE.PropertyName = \"InletPatternType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_InletPatternType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletPatternTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.CoverMaterial\", \"CoverMaterial\");\r\n            ifcPSE.PropertyName = \"CoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeFloorTrap\"))\r\n         {\r\n            propertySetWasteTerminalTypeFloorTrap.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeFloorTrap.ObjectType = \"IfcWasteTerminalType\";\r\n            propertySetWasteTerminalTypeFloorTrap.PredefinedType = \"FLOORTRAP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.IsForSullageWater\", \"IsForSullageWater\");\r\n            ifcPSE.PropertyName = \"IsForSullageWater\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsForSullageWaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.SpilloverLevel\", \"SpilloverLevel\");\r\n            ifcPSE.PropertyName = \"SpilloverLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpilloverLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.BodyMaterial\", \"BodyMaterial\");\r\n            ifcPSE.PropertyName = \"BodyMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.TrapType\", \"TrapType\");\r\n            ifcPSE.PropertyName = \"TrapType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_TrapType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrapTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.HasStrainer\", \"HasStrainer\");\r\n            ifcPSE.PropertyName = \"HasStrainer\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasStrainerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.InletPatternType\", \"InletPatternType\");\r\n            ifcPSE.PropertyName = \"InletPatternType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_InletPatternType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletPatternTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.CoverMaterial\", \"CoverMaterial\");\r\n            ifcPSE.PropertyName = \"CoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeFloorTrap\"))\r\n         {\r\n            propertySetWasteTerminalTypeFloorTrap.EntityTypes.Add(IFCEntityType.IfcWasteTerminal);\r\n            propertySetWasteTerminalTypeFloorTrap.ObjectType = \"IfcWasteTerminal\";\r\n            propertySetWasteTerminalTypeFloorTrap.PredefinedType = \"FLOORTRAP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Body Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"呼称躯体長\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Body Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"呼称躯体幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Body Depth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"呼称躯体深さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.IsForSullageWater\", \"IsForSullageWater\");\r\n            ifcPSE.PropertyName = \"IsForSullageWater\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is For Sullage Water\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"汚水用\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsForSullageWaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.SpilloverLevel\", \"SpilloverLevel\");\r\n            ifcPSE.PropertyName = \"SpilloverLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Spillover Level\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"水位\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpilloverLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.TrapType\", \"TrapType\");\r\n            ifcPSE.PropertyName = \"TrapType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_TrapType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Trap Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"防臭弁の種類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrapTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.HasStrainer\", \"HasStrainer\");\r\n            ifcPSE.PropertyName = \"HasStrainer\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Strainer\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ろ過装置\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasStrainerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outlet Connection Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"接続口口径\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.InletPatternType\", \"InletPatternType\");\r\n            ifcPSE.PropertyName = \"InletPatternType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_InletPatternType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Inlet Pattern Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"吸気口種類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletPatternTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Inlet Connection Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"吸気口サイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cover Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"カバー長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cover Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"カバー幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.CoverMaterial\", \"CoverMaterial\");\r\n            ifcPSE.PropertyName = \"CoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cover Material\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"カバー材質\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeFloorTrap\"))\r\n         {\r\n            propertySetWasteTerminalTypeFloorTrap.EntityTypes.Add(IFCEntityType.IfcWasteTerminal);\r\n            propertySetWasteTerminalTypeFloorTrap.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeFloorTrap.ObjectType = \"IfcWasteTerminal\";\r\n            propertySetWasteTerminalTypeFloorTrap.PredefinedType = \"FLOORTRAP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.IsForSullageWater\", \"IsForSullageWater\");\r\n            ifcPSE.PropertyName = \"IsForSullageWater\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsForSullageWaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.SpilloverLevel\", \"SpilloverLevel\");\r\n            ifcPSE.PropertyName = \"SpilloverLevel\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SpilloverLevelCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.TrapType\", \"TrapType\");\r\n            ifcPSE.PropertyName = \"TrapType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TrapType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrapTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.HasStrainer\", \"HasStrainer\");\r\n            ifcPSE.PropertyName = \"HasStrainer\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasStrainerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.InletPatternType\", \"InletPatternType\");\r\n            ifcPSE.PropertyName = \"InletPatternType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_InletPatternType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletPatternTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorTrap.CoverMaterial\", \"CoverMaterial\");\r\n            ifcPSE.PropertyName = \"CoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterialDefinition;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorTrap.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWasteTerminalTypeFloorTrap);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_WasteTerminalTypeFloorWaste(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWasteTerminalTypeFloorWaste = new PropertySetDescription();\r\n         propertySetWasteTerminalTypeFloorWaste.Name = \"Pset_WasteTerminalTypeFloorWaste\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeFloorWaste\"))\r\n         {\r\n            propertySetWasteTerminalTypeFloorWaste.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeFloorWaste.ObjectType = \"FloorWaste\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.BodyMaterial\", \"BodyMaterial\");\r\n            ifcPSE.PropertyName = \"BodyMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.CoverMaterial\", \"CoverMaterial\");\r\n            ifcPSE.PropertyName = \"CoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeFloorWaste\"))\r\n         {\r\n            propertySetWasteTerminalTypeFloorWaste.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeFloorWaste.ObjectType = \"IfcWasteTerminalType\";\r\n            propertySetWasteTerminalTypeFloorWaste.PredefinedType = \"FLOORWASTE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.BodyMaterial\", \"BodyMaterial\");\r\n            ifcPSE.PropertyName = \"BodyMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.CoverMaterial\", \"CoverMaterial\");\r\n            ifcPSE.PropertyName = \"CoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeFloorWaste\"))\r\n         {\r\n            propertySetWasteTerminalTypeFloorWaste.EntityTypes.Add(IFCEntityType.IfcWasteTerminal);\r\n            propertySetWasteTerminalTypeFloorWaste.ObjectType = \"IfcWasteTerminal\";\r\n            propertySetWasteTerminalTypeFloorWaste.PredefinedType = \"FLOORWASTE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Body Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"呼称躯体長\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Body Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"呼称躯体幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Body Depth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"呼称躯体深さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outlet Connection Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"排気口サイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cover Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"カバー長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cover Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"カバー幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeFloorWaste\"))\r\n         {\r\n            propertySetWasteTerminalTypeFloorWaste.EntityTypes.Add(IFCEntityType.IfcWasteTerminal);\r\n            propertySetWasteTerminalTypeFloorWaste.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeFloorWaste.ObjectType = \"IfcWasteTerminal\";\r\n            propertySetWasteTerminalTypeFloorWaste.PredefinedType = \"FLOORWASTE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeFloorWaste.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeFloorWaste.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWasteTerminalTypeFloorWaste);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_WasteTerminalTypeGreaseInterceptor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWasteTerminalTypeGreaseInterceptor = new PropertySetDescription();\r\n         propertySetWasteTerminalTypeGreaseInterceptor.Name = \"Pset_WasteTerminalTypeGreaseInterceptor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeGreaseInterceptor\"))\r\n         {\r\n            propertySetWasteTerminalTypeGreaseInterceptor.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeGreaseInterceptor.ObjectType = \"GreaseInterceptor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.NominalBodyMaterial\", \"NominalBodyMaterial\");\r\n            ifcPSE.PropertyName = \"NominalBodyMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.BodyDepth\", \"BodyDepth\");\r\n            ifcPSE.PropertyName = \"BodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.StrainerMaterial\", \"StrainerMaterial\");\r\n            ifcPSE.PropertyName = \"StrainerMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StrainerMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.StrainerDiameter\", \"StrainerDiameter\");\r\n            ifcPSE.PropertyName = \"StrainerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StrainerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.StrainerDepth\", \"StrainerDepth\");\r\n            ifcPSE.PropertyName = \"StrainerDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StrainerDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.CoverMaterial\", \"CoverMaterial\");\r\n            ifcPSE.PropertyName = \"CoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeGreaseInterceptor\"))\r\n         {\r\n            propertySetWasteTerminalTypeGreaseInterceptor.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeGreaseInterceptor.ObjectType = \"IfcWasteTerminalType\";\r\n            propertySetWasteTerminalTypeGreaseInterceptor.PredefinedType = \"GREASEINTERCEPTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.NominalBodyMaterial\", \"NominalBodyMaterial\");\r\n            ifcPSE.PropertyName = \"NominalBodyMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.BodyDepth\", \"BodyDepth\");\r\n            ifcPSE.PropertyName = \"BodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.StrainerMaterial\", \"StrainerMaterial\");\r\n            ifcPSE.PropertyName = \"StrainerMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StrainerMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.StrainerDiameter\", \"StrainerDiameter\");\r\n            ifcPSE.PropertyName = \"StrainerDiameter\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StrainerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.StrainerDepth\", \"StrainerDepth\");\r\n            ifcPSE.PropertyName = \"StrainerDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StrainerDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGreaseInterceptor.CoverMaterial\", \"CoverMaterial\");\r\n            ifcPSE.PropertyName = \"CoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGreaseInterceptor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWasteTerminalTypeGreaseInterceptor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_WasteTerminalTypeGullySump(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWasteTerminalTypeGullySump = new PropertySetDescription();\r\n         propertySetWasteTerminalTypeGullySump.Name = \"Pset_WasteTerminalTypeGullySump\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeGullySump\"))\r\n         {\r\n            propertySetWasteTerminalTypeGullySump.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeGullySump.ObjectType = \"GullySump\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.NominalSumpLength\", \"NominalSumpLength\");\r\n            ifcPSE.PropertyName = \"NominalSumpLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSumpLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.NominalSumpWidth\", \"NominalSumpWidth\");\r\n            ifcPSE.PropertyName = \"NominalSumpWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSumpWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.NominalSumpDepth\", \"NominalSumpDepth\");\r\n            ifcPSE.PropertyName = \"NominalSumpDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSumpDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.SumpMaterial\", \"SumpMaterial\");\r\n            ifcPSE.PropertyName = \"SumpMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SumpMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.GullyType\", \"GullyType\");\r\n            ifcPSE.PropertyName = \"GullyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_GullyType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GullyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.TrapType\", \"TrapType\");\r\n            ifcPSE.PropertyName = \"TrapType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_TrapType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrapTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.BackInletPatternType\", \"BackInletPatternType\");\r\n            ifcPSE.PropertyName = \"BackInletPatternType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BackInletPatternType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BackInletPatternTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.CoverMaterial\", \"CoverMaterial\");\r\n            ifcPSE.PropertyName = \"CoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeGullySump\"))\r\n         {\r\n            propertySetWasteTerminalTypeGullySump.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeGullySump.ObjectType = \"IfcWasteTerminalType\";\r\n            propertySetWasteTerminalTypeGullySump.PredefinedType = \"GULLYSUMP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.NominalSumpLength\", \"NominalSumpLength\");\r\n            ifcPSE.PropertyName = \"NominalSumpLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSumpLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.NominalSumpWidth\", \"NominalSumpWidth\");\r\n            ifcPSE.PropertyName = \"NominalSumpWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSumpWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.NominalSumpDepth\", \"NominalSumpDepth\");\r\n            ifcPSE.PropertyName = \"NominalSumpDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSumpDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.SumpMaterial\", \"SumpMaterial\");\r\n            ifcPSE.PropertyName = \"SumpMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SumpMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.GullyType\", \"GullyType\");\r\n            ifcPSE.PropertyName = \"GullyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_GullyType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GullyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.TrapType\", \"TrapType\");\r\n            ifcPSE.PropertyName = \"TrapType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_TrapType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrapTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.BackInletPatternType\", \"BackInletPatternType\");\r\n            ifcPSE.PropertyName = \"BackInletPatternType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BackInletPatternType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BackInletPatternTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.CoverMaterial\", \"CoverMaterial\");\r\n            ifcPSE.PropertyName = \"CoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeGullySump\"))\r\n         {\r\n            propertySetWasteTerminalTypeGullySump.EntityTypes.Add(IFCEntityType.IfcWasteTerminal);\r\n            propertySetWasteTerminalTypeGullySump.ObjectType = \"IfcWasteTerminal\";\r\n            propertySetWasteTerminalTypeGullySump.PredefinedType = \"GULLYSUMP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.NominalSumpLength\", \"NominalSumpLength\");\r\n            ifcPSE.PropertyName = \"NominalSumpLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Sump Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"汚水槽長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSumpLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.NominalSumpWidth\", \"NominalSumpWidth\");\r\n            ifcPSE.PropertyName = \"NominalSumpWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Sump Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"汚水槽幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSumpWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.NominalSumpDepth\", \"NominalSumpDepth\");\r\n            ifcPSE.PropertyName = \"NominalSumpDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Sump Depth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"汚水槽深さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSumpDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.GullyType\", \"GullyType\");\r\n            ifcPSE.PropertyName = \"GullyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_GullyType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gully Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"溝種類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GullyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.TrapType\", \"TrapType\");\r\n            ifcPSE.PropertyName = \"TrapType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_TrapType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Trap Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"防臭弁種類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrapTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outlet Connection Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"排気口接続口\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.BackInletPatternType\", \"BackInletPatternType\");\r\n            ifcPSE.PropertyName = \"BackInletPatternType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_BackInletPatternType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Back Inlet Pattern Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"背部接続口種類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BackInletPatternTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Inlet Connection Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"吸気口接続口サイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cover Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"カバーの長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cover Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"カバーの幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeGullySump\"))\r\n         {\r\n            propertySetWasteTerminalTypeGullySump.EntityTypes.Add(IFCEntityType.IfcWasteTerminal);\r\n            propertySetWasteTerminalTypeGullySump.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeGullySump.ObjectType = \"IfcWasteTerminal\";\r\n            propertySetWasteTerminalTypeGullySump.PredefinedType = \"GULLYSUMP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.NominalSumpLength\", \"NominalSumpLength\");\r\n            ifcPSE.PropertyName = \"NominalSumpLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSumpLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.NominalSumpWidth\", \"NominalSumpWidth\");\r\n            ifcPSE.PropertyName = \"NominalSumpWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSumpWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.NominalSumpDepth\", \"NominalSumpDepth\");\r\n            ifcPSE.PropertyName = \"NominalSumpDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalSumpDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.GullyType\", \"GullyType\");\r\n            ifcPSE.PropertyName = \"GullyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_GullyType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GullyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.TrapType\", \"TrapType\");\r\n            ifcPSE.PropertyName = \"TrapType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TrapType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrapTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.BackInletPatternType\", \"BackInletPatternType\");\r\n            ifcPSE.PropertyName = \"BackInletPatternType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_BackInletPatternType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BackInletPatternTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullySump.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullySump.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWasteTerminalTypeGullySump);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_WasteTerminalTypeGullyTrap(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWasteTerminalTypeGullyTrap = new PropertySetDescription();\r\n         propertySetWasteTerminalTypeGullyTrap.Name = \"Pset_WasteTerminalTypeGullyTrap\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeGullyTrap\"))\r\n         {\r\n            propertySetWasteTerminalTypeGullyTrap.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeGullyTrap.ObjectType = \"GullyTrap\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.BodyMaterial\", \"BodyMaterial\");\r\n            ifcPSE.PropertyName = \"BodyMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.GullyType\", \"GullyType\");\r\n            ifcPSE.PropertyName = \"GullyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_GullyType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GullyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.HasStrainer\", \"HasStrainer\");\r\n            ifcPSE.PropertyName = \"HasStrainer\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasStrainerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.TrapType\", \"TrapType\");\r\n            ifcPSE.PropertyName = \"TrapType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_TrapType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrapTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.BackInletPatternType\", \"BackInletPatternType\");\r\n            ifcPSE.PropertyName = \"BackInletPatternType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_BackInletPatternType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BackInletPatternTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.CoverMaterial\", \"CoverMaterial\");\r\n            ifcPSE.PropertyName = \"CoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeGullyTrap\"))\r\n         {\r\n            propertySetWasteTerminalTypeGullyTrap.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeGullyTrap.ObjectType = \"IfcWasteTerminalType\";\r\n            propertySetWasteTerminalTypeGullyTrap.PredefinedType = \"GULLYTRAP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.BodyMaterial\", \"BodyMaterial\");\r\n            ifcPSE.PropertyName = \"BodyMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.GullyType\", \"GullyType\");\r\n            ifcPSE.PropertyName = \"GullyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_GullyType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GullyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.HasStrainer\", \"HasStrainer\");\r\n            ifcPSE.PropertyName = \"HasStrainer\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasStrainerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.TrapType\", \"TrapType\");\r\n            ifcPSE.PropertyName = \"TrapType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_TrapType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrapTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.BackInletPatternType\", \"BackInletPatternType\");\r\n            ifcPSE.PropertyName = \"BackInletPatternType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_BackInletPatternType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BackInletPatternTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.CoverMaterial\", \"CoverMaterial\");\r\n            ifcPSE.PropertyName = \"CoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeGullyTrap\"))\r\n         {\r\n            propertySetWasteTerminalTypeGullyTrap.EntityTypes.Add(IFCEntityType.IfcWasteTerminal);\r\n            propertySetWasteTerminalTypeGullyTrap.ObjectType = \"IfcWasteTerminal\";\r\n            propertySetWasteTerminalTypeGullyTrap.PredefinedType = \"GULLYTRAP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Body Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"呼称躯体長\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Body Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"呼称躯体幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Body Depth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"呼称躯体深さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.GullyType\", \"GullyType\");\r\n            ifcPSE.PropertyName = \"GullyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_GullyType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gully Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"防臭弁の種類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GullyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.HasStrainer\", \"HasStrainer\");\r\n            ifcPSE.PropertyName = \"HasStrainer\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Strainer\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ろ過装置\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasStrainerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.TrapType\", \"TrapType\");\r\n            ifcPSE.PropertyName = \"TrapType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_TrapType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Trap Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"防臭弁の種類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrapTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outlet Connection Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"排気口接続口サイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.BackInletPatternType\", \"BackInletPatternType\");\r\n            ifcPSE.PropertyName = \"BackInletPatternType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_BackInletPatternType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Back Inlet Pattern Type\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BackInletPatternTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Inlet Connection Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"吸気口接続口サイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cover Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"カバーの長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cover Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"カバーの幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeGullyTrap\"))\r\n         {\r\n            propertySetWasteTerminalTypeGullyTrap.EntityTypes.Add(IFCEntityType.IfcWasteTerminal);\r\n            propertySetWasteTerminalTypeGullyTrap.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeGullyTrap.ObjectType = \"IfcWasteTerminal\";\r\n            propertySetWasteTerminalTypeGullyTrap.PredefinedType = \"GULLYTRAP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.GullyType\", \"GullyType\");\r\n            ifcPSE.PropertyName = \"GullyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_GullyType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GullyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.HasStrainer\", \"HasStrainer\");\r\n            ifcPSE.PropertyName = \"HasStrainer\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasStrainerCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.TrapType\", \"TrapType\");\r\n            ifcPSE.PropertyName = \"TrapType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TrapType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TrapTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.BackInletPatternType\", \"BackInletPatternType\");\r\n            ifcPSE.PropertyName = \"BackInletPatternType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_BackInletPatternType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BackInletPatternTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeGullyTrap.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeGullyTrap.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWasteTerminalTypeGullyTrap);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_WasteTerminalTypeOilInterceptor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWasteTerminalTypeOilInterceptor = new PropertySetDescription();\r\n         propertySetWasteTerminalTypeOilInterceptor.Name = \"Pset_WasteTerminalTypeOilInterceptor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeOilInterceptor\"))\r\n         {\r\n            propertySetWasteTerminalTypeOilInterceptor.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeOilInterceptor.ObjectType = \"OilInterceptor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeOilInterceptor.BodyMaterial\", \"BodyMaterial\");\r\n            ifcPSE.PropertyName = \"BodyMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeOilInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeOilInterceptor.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeOilInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeOilInterceptor.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeOilInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeOilInterceptor.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeOilInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeOilInterceptor.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeOilInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeOilInterceptor.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeOilInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeOilInterceptor.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeOilInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeOilInterceptor.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeOilInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeOilInterceptor.CoverMaterial\", \"CoverMaterial\");\r\n            ifcPSE.PropertyName = \"CoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeOilInterceptor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeOilInterceptor\"))\r\n         {\r\n            propertySetWasteTerminalTypeOilInterceptor.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeOilInterceptor.ObjectType = \"IfcWasteTerminalType\";\r\n            propertySetWasteTerminalTypeOilInterceptor.PredefinedType = \"OILINTERCEPTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeOilInterceptor.BodyMaterial\", \"BodyMaterial\");\r\n            ifcPSE.PropertyName = \"BodyMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeOilInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeOilInterceptor.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeOilInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeOilInterceptor.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeOilInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeOilInterceptor.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeOilInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeOilInterceptor.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeOilInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeOilInterceptor.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeOilInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeOilInterceptor.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeOilInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeOilInterceptor.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeOilInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeOilInterceptor.CoverMaterial\", \"CoverMaterial\");\r\n            ifcPSE.PropertyName = \"CoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeOilInterceptor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWasteTerminalTypeOilInterceptor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_WasteTerminalTypePetrolInterceptor(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWasteTerminalTypePetrolInterceptor = new PropertySetDescription();\r\n         propertySetWasteTerminalTypePetrolInterceptor.Name = \"Pset_WasteTerminalTypePetrolInterceptor\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypePetrolInterceptor\"))\r\n         {\r\n            propertySetWasteTerminalTypePetrolInterceptor.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypePetrolInterceptor.ObjectType = \"PetrolInterceptor\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.BodyMaterial\", \"BodyMaterial\");\r\n            ifcPSE.PropertyName = \"BodyMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.CoverMaterial\", \"CoverMaterial\");\r\n            ifcPSE.PropertyName = \"CoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.VentilatingPipeSize\", \"VentilatingPipeSize\");\r\n            ifcPSE.PropertyName = \"VentilatingPipeSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilatingPipeSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypePetrolInterceptor\"))\r\n         {\r\n            propertySetWasteTerminalTypePetrolInterceptor.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypePetrolInterceptor.ObjectType = \"IfcWasteTerminalType\";\r\n            propertySetWasteTerminalTypePetrolInterceptor.PredefinedType = \"PETROLINTERCEPTOR\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.BodyMaterial\", \"BodyMaterial\");\r\n            ifcPSE.PropertyName = \"BodyMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.CoverMaterial\", \"CoverMaterial\");\r\n            ifcPSE.PropertyName = \"CoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypePetrolInterceptor.VentilatingPipeSize\", \"VentilatingPipeSize\");\r\n            ifcPSE.PropertyName = \"VentilatingPipeSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VentilatingPipeSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypePetrolInterceptor.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWasteTerminalTypePetrolInterceptor);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_WasteTerminalTypeRoofDrain(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWasteTerminalTypeRoofDrain = new PropertySetDescription();\r\n         propertySetWasteTerminalTypeRoofDrain.Name = \"Pset_WasteTerminalTypeRoofDrain\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeRoofDrain\"))\r\n         {\r\n            propertySetWasteTerminalTypeRoofDrain.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeRoofDrain.ObjectType = \"RoofDrain\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.BodyMaterial\", \"BodyMaterial\");\r\n            ifcPSE.PropertyName = \"BodyMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.CoverMaterial\", \"CoverMaterial\");\r\n            ifcPSE.PropertyName = \"CoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeRoofDrain\"))\r\n         {\r\n            propertySetWasteTerminalTypeRoofDrain.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeRoofDrain.ObjectType = \"IfcWasteTerminalType\";\r\n            propertySetWasteTerminalTypeRoofDrain.PredefinedType = \"ROOFDRAIN\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.BodyMaterial\", \"BodyMaterial\");\r\n            ifcPSE.PropertyName = \"BodyMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.BodyMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.CoverMaterial\", \"CoverMaterial\");\r\n            ifcPSE.PropertyName = \"CoverMaterial\";\r\n            ifcPSE.PropertyType = PropertyType.IfcMaterial;\r\n            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverMaterialCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeRoofDrain\"))\r\n         {\r\n            propertySetWasteTerminalTypeRoofDrain.EntityTypes.Add(IFCEntityType.IfcWasteTerminal);\r\n            propertySetWasteTerminalTypeRoofDrain.ObjectType = \"IfcWasteTerminal\";\r\n            propertySetWasteTerminalTypeRoofDrain.PredefinedType = \"ROOFDRAIN\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Body Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"呼称躯体長\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Body Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"呼称躯体幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Body Depth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"呼称躯体深さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outlet Connection Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"排気口接続口サイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cover Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"カバーの長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cover Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"カバーの幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeRoofDrain\"))\r\n         {\r\n            propertySetWasteTerminalTypeRoofDrain.EntityTypes.Add(IFCEntityType.IfcWasteTerminal);\r\n            propertySetWasteTerminalTypeRoofDrain.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeRoofDrain.ObjectType = \"IfcWasteTerminal\";\r\n            propertySetWasteTerminalTypeRoofDrain.PredefinedType = \"ROOFDRAIN\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.NominalBodyLength\", \"NominalBodyLength\");\r\n            ifcPSE.PropertyName = \"NominalBodyLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.NominalBodyWidth\", \"NominalBodyWidth\");\r\n            ifcPSE.PropertyName = \"NominalBodyWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.NominalBodyDepth\", \"NominalBodyDepth\");\r\n            ifcPSE.PropertyName = \"NominalBodyDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalBodyDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.CoverLength\", \"CoverLength\");\r\n            ifcPSE.PropertyName = \"CoverLength\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeRoofDrain.CoverWidth\", \"CoverWidth\");\r\n            ifcPSE.PropertyName = \"CoverWidth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoverWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeRoofDrain.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWasteTerminalTypeRoofDrain);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_WasteTerminalTypeWasteDisposalUnit(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWasteTerminalTypeWasteDisposalUnit = new PropertySetDescription();\r\n         propertySetWasteTerminalTypeWasteDisposalUnit.Name = \"Pset_WasteTerminalTypeWasteDisposalUnit\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeWasteDisposalUnit\"))\r\n         {\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.ObjectType = \"WasteDisposalUnit\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteDisposalUnit.DrainConnectionSize\", \"DrainConnectionSize\");\r\n            ifcPSE.PropertyName = \"DrainConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteDisposalUnit.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteDisposalUnit.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeWasteDisposalUnit\"))\r\n         {\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.ObjectType = \"IfcWasteTerminalType\";\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.PredefinedType = \"WASTEDISPOSALUNIT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteDisposalUnit.DrainConnectionSize\", \"DrainConnectionSize\");\r\n            ifcPSE.PropertyName = \"DrainConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteDisposalUnit.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteDisposalUnit.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeWasteDisposalUnit\"))\r\n         {\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.EntityTypes.Add(IFCEntityType.IfcWasteTerminal);\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.ObjectType = \"IfcWasteTerminal\";\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.PredefinedType = \"WASTEDISPOSALUNIT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteDisposalUnit.DrainConnectionSize\", \"DrainConnectionSize\");\r\n            ifcPSE.PropertyName = \"DrainConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Drain Connection Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"配管接続口サイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteDisposalUnit.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outlet Connection Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"排出口接続口サイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteDisposalUnit.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Nominal Depth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"深さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeWasteDisposalUnit\"))\r\n         {\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.EntityTypes.Add(IFCEntityType.IfcWasteTerminal);\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.ObjectType = \"IfcWasteTerminal\";\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.PredefinedType = \"WASTEDISPOSALUNIT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteDisposalUnit.DrainConnectionSize\", \"DrainConnectionSize\");\r\n            ifcPSE.PropertyName = \"DrainConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DrainConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteDisposalUnit.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteDisposalUnit.NominalDepth\", \"NominalDepth\");\r\n            ifcPSE.PropertyName = \"NominalDepth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteDisposalUnit.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWasteTerminalTypeWasteDisposalUnit);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_WasteTerminalTypeWasteTrap(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWasteTerminalTypeWasteTrap = new PropertySetDescription();\r\n         propertySetWasteTerminalTypeWasteTrap.Name = \"Pset_WasteTerminalTypeWasteTrap\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeWasteTrap\"))\r\n         {\r\n            propertySetWasteTerminalTypeWasteTrap.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeWasteTrap.ObjectType = \"WasteTrap\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteTrap.WasteTrapType\", \"WasteTrapType\");\r\n            ifcPSE.PropertyName = \"WasteTrapType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X2.PEnum_TrapType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WasteTrapTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteTrap.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteTrap.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteTrap.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeWasteTrap\"))\r\n         {\r\n            propertySetWasteTerminalTypeWasteTrap.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeWasteTrap.ObjectType = \"IfcWasteTerminalType\";\r\n            propertySetWasteTerminalTypeWasteTrap.PredefinedType = \"WASTETRAP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteTrap.WasteTrapType\", \"WasteTrapType\");\r\n            ifcPSE.PropertyName = \"WasteTrapType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC2X3.PEnum_TrapType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WasteTrapTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteTrap.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteTrap.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteTrap.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeWasteTrap\"))\r\n         {\r\n            propertySetWasteTerminalTypeWasteTrap.EntityTypes.Add(IFCEntityType.IfcWasteTerminal);\r\n            propertySetWasteTerminalTypeWasteTrap.ObjectType = \"IfcWasteTerminal\";\r\n            propertySetWasteTerminalTypeWasteTrap.PredefinedType = \"WASTETRAP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteTrap.WasteTrapType\", \"WasteTrapType\");\r\n            ifcPSE.PropertyName = \"WasteTrapType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_TrapType);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Waste Trap Type\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"廃棄物防臭弁種類\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WasteTrapTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteTrap.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outlet Connection Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"排出口接続口サイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteTrap.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Inlet Connection Size\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"吸気口接続口サイズ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteTrap.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WasteTerminalTypeWasteTrap\"))\r\n         {\r\n            propertySetWasteTerminalTypeWasteTrap.EntityTypes.Add(IFCEntityType.IfcWasteTerminal);\r\n            propertySetWasteTerminalTypeWasteTrap.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            propertySetWasteTerminalTypeWasteTrap.ObjectType = \"IfcWasteTerminal\";\r\n            propertySetWasteTerminalTypeWasteTrap.PredefinedType = \"WASTETRAP\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteTrap.WasteTrapType\", \"WasteTrapType\");\r\n            ifcPSE.PropertyName = \"WasteTrapType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TrapType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WasteTrapTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteTrap.OutletConnectionSize\", \"OutletConnectionSize\");\r\n            ifcPSE.PropertyName = \"OutletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OutletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteTrap.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WasteTerminalTypeWasteTrap.InletConnectionSize\", \"InletConnectionSize\");\r\n            ifcPSE.PropertyName = \"InletConnectionSize\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InletConnectionSizeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWasteTerminalTypeWasteTrap.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWasteTerminalTypeWasteTrap);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_WaterStratumCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWaterStratumCommon = new PropertySetDescription();\r\n         propertySetWaterStratumCommon.Name = \"Pset_WaterStratumCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WaterStratumCommon\"))\r\n         {\r\n            propertySetWaterStratumCommon.EntityTypes.Add(IFCEntityType.IfcGeotechnicalStratum);\r\n            propertySetWaterStratumCommon.ObjectType = \"IfcGeotechnicalStratum\";\r\n            propertySetWaterStratumCommon.PredefinedType = \"WATER\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WaterStratumCommon.AnnualRange\", \"AnnualRange\");\r\n            ifcPSE.PropertyName = \"AnnualRange\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnnualRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWaterStratumCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WaterStratumCommon.AnnualTrend\", \"AnnualTrend\");\r\n            ifcPSE.PropertyName = \"AnnualTrend\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AnnualTrendCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWaterStratumCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WaterStratumCommon.IsFreshwater\", \"IsFreshwater\");\r\n            ifcPSE.PropertyName = \"IsFreshwater\";\r\n            ifcPSE.PropertyType = PropertyType.Logical;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsFreshwaterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWaterStratumCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WaterStratumCommon.SeicheRange\", \"SeicheRange\");\r\n            ifcPSE.PropertyName = \"SeicheRange\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SeicheRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWaterStratumCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WaterStratumCommon.TidalRange\", \"TidalRange\");\r\n            ifcPSE.PropertyName = \"TidalRange\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TidalRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWaterStratumCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WaterStratumCommon.WaveRange\", \"WaveRange\");\r\n            ifcPSE.PropertyName = \"WaveRange\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaveRangeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWaterStratumCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWaterStratumCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_Width(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWidth = new PropertySetDescription();\r\n         propertySetWidth.Name = \"Pset_Width\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_Width\"))\r\n         {\r\n            propertySetWidth.EntityTypes.Add(IFCEntityType.IfcReferent);\r\n            propertySetWidth.ObjectType = \"IfcReferent\";\r\n            propertySetWidth.PredefinedType = \"WIDTHEVENT\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_Width.Side\", \"Side\");\r\n            ifcPSE.PropertyName = \"Side\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_SideType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SideCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWidth.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Width.TransitionWidth\", \"TransitionWidth\");\r\n            ifcPSE.PropertyName = \"TransitionWidth\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_TransitionWidthType);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransitionWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWidth.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_Width.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWidth.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWidth);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_WindowCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWindowCommon = new PropertySetDescription();\r\n         propertySetWindowCommon.Name = \"Pset_WindowCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WindowCommon\"))\r\n         {\r\n            propertySetWindowCommon.EntityTypes.Add(IFCEntityType.IfcWindow);\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.SecurityRating\", \"SecurityRating\");\r\n            ifcPSE.PropertyName = \"SecurityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecurityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.Infiltration\", \"Infiltration\");\r\n            ifcPSE.PropertyName = \"Infiltration\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.GlazingAreaFraction\", \"GlazingAreaFraction\");\r\n            ifcPSE.PropertyName = \"GlazingAreaFraction\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlazingAreaFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.SmokeStop\", \"SmokeStop\");\r\n            ifcPSE.PropertyName = \"SmokeStop\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SmokeStopCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WindowCommon\"))\r\n         {\r\n            propertySetWindowCommon.EntityTypes.Add(IFCEntityType.IfcWindow);\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.SecurityRating\", \"SecurityRating\");\r\n            ifcPSE.PropertyName = \"SecurityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecurityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.Infiltration\", \"Infiltration\");\r\n            ifcPSE.PropertyName = \"Infiltration\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.GlazingAreaFraction\", \"GlazingAreaFraction\");\r\n            ifcPSE.PropertyName = \"GlazingAreaFraction\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlazingAreaFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.SmokeStop\", \"SmokeStop\");\r\n            ifcPSE.PropertyName = \"SmokeStop\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SmokeStopCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WindowCommon\"))\r\n         {\r\n            propertySetWindowCommon.EntityTypes.Add(IFCEntityType.IfcWindow);\r\n            propertySetWindowCommon.ObjectType = \"IfcWindow\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bauteiltyp\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"参考号\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4.PEnum_ElementStatus);\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Status\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Statut\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"状態\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Schallschutzklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Acoustic Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"IsolationAcoustique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"遮音等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"隔音等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Feuerwiderstandsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"ResistanceAuFeu\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"耐火等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"防火等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.SecurityRating\", \"SecurityRating\");\r\n            ifcPSE.PropertyName = \"SecurityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Sicherheitsklasse\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Security Rating\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"NiveauSecurite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"防犯等級\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"安全等级\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecurityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Außenbauteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"EstExterieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部区分\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"是否外部构件\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.Infiltration\", \"Infiltration\");\r\n            ifcPSE.PropertyName = \"Infiltration\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Luftdurchlässigkeit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Infiltration\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TauxInfiltration\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"隙間風\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"渗风量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"U-Wert\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Thermal Transmittance\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"TransmissionThermique\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"熱貫流率\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Chinese_Simplified, \"导热系数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.GlazingAreaFraction\", \"GlazingAreaFraction\");\r\n            ifcPSE.PropertyName = \"GlazingAreaFraction\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Glasflächenanteil\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Glazing Area Fraction\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"FractionSurfaceVitree\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ガラス率\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlazingAreaFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.HasSillExternal\", \"HasSillExternal\");\r\n            ifcPSE.PropertyName = \"HasSillExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Fensterbank aussen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Sill External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Seuil côté extérieur\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasSillExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.HasSillInternal\", \"HasSillInternal\");\r\n            ifcPSE.PropertyName = \"HasSillInternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Fensterbank innen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Sill Internal\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Seuil côté intérieur\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasSillInternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.HasDrive\", \"HasDrive\");\r\n            ifcPSE.PropertyName = \"HasDrive\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Antrieb\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Has Drive\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Motorisé\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasDriveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.SmokeStop\", \"SmokeStop\");\r\n            ifcPSE.PropertyName = \"SmokeStop\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Rauchschutz\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Smoke Stop\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"CoupeFumee\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SmokeStopCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Notausgang\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Fire Exit\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Sortie de secours\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.WaterTightnessRating\", \"WaterTightnessRating\");\r\n            ifcPSE.PropertyName = \"WaterTightnessRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterTightnessRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.MechanicalLoadRating\", \"MechanicalLoadRating\");\r\n            ifcPSE.PropertyName = \"MechanicalLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.WindLoadRating\", \"WindLoadRating\");\r\n            ifcPSE.PropertyName = \"WindLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WindLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WindowCommon\"))\r\n         {\r\n            propertySetWindowCommon.EntityTypes.Add(IFCEntityType.IfcWindow);\r\n            propertySetWindowCommon.EntityTypes.Add(IFCEntityType.IfcWindowType);\r\n            propertySetWindowCommon.ObjectType = \"IfcWindow\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.Status\", \"Status\");\r\n            ifcPSE.PropertyName = \"Status\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_ElementStatus);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StatusCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.AcousticRating\", \"AcousticRating\");\r\n            ifcPSE.PropertyName = \"AcousticRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AcousticRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.FireRating\", \"FireRating\");\r\n            ifcPSE.PropertyName = \"FireRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.SecurityRating\", \"SecurityRating\");\r\n            ifcPSE.PropertyName = \"SecurityRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecurityRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.Infiltration\", \"Infiltration\");\r\n            ifcPSE.PropertyName = \"Infiltration\";\r\n            ifcPSE.PropertyType = PropertyType.VolumetricFlowRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InfiltrationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.ThermalTransmittance\", \"ThermalTransmittance\");\r\n            ifcPSE.PropertyName = \"ThermalTransmittance\";\r\n            ifcPSE.PropertyType = PropertyType.ThermalTransmittance;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThermalTransmittanceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.GlazingAreaFraction\", \"GlazingAreaFraction\");\r\n            ifcPSE.PropertyName = \"GlazingAreaFraction\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GlazingAreaFractionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.HasSillExternal\", \"HasSillExternal\");\r\n            ifcPSE.PropertyName = \"HasSillExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasSillExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.HasSillInternal\", \"HasSillInternal\");\r\n            ifcPSE.PropertyName = \"HasSillInternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasSillInternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.HasDrive\", \"HasDrive\");\r\n            ifcPSE.PropertyName = \"HasDrive\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HasDriveCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.SmokeStop\", \"SmokeStop\");\r\n            ifcPSE.PropertyName = \"SmokeStop\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SmokeStopCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.FireExit\", \"FireExit\");\r\n            ifcPSE.PropertyName = \"FireExit\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FireExitCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.WaterTightnessRating\", \"WaterTightnessRating\");\r\n            ifcPSE.PropertyName = \"WaterTightnessRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WaterTightnessRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.MechanicalLoadRating\", \"MechanicalLoadRating\");\r\n            ifcPSE.PropertyName = \"MechanicalLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowCommon.WindLoadRating\", \"WindLoadRating\");\r\n            ifcPSE.PropertyName = \"WindLoadRating\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WindLoadRatingCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWindowCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_WindowLiningProperties(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWindowLiningProperties = new PropertySetDescription();\r\n         propertySetWindowLiningProperties.Name = \"Pset_WindowLiningProperties\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WindowLiningProperties\"))\r\n         {\r\n            propertySetWindowLiningProperties.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            propertySetWindowLiningProperties.EntityTypes.Add(IFCEntityType.IfcWindow);\r\n            propertySetWindowLiningProperties.EntityTypes.Add(IFCEntityType.IfcMemberType);\r\n            propertySetWindowLiningProperties.EntityTypes.Add(IFCEntityType.IfcWindowType);\r\n            propertySetWindowLiningProperties.ObjectType = \"IfcMember\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowLiningProperties.LiningDepth\", \"LiningDepth\");\r\n            ifcPSE.PropertyName = \"LiningDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowLiningProperties.LiningThickness\", \"LiningThickness\");\r\n            ifcPSE.PropertyName = \"LiningThickness\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowLiningProperties.TransomThickness\", \"TransomThickness\");\r\n            ifcPSE.PropertyName = \"TransomThickness\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TransomThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowLiningProperties.MullionThickness\", \"MullionThickness\");\r\n            ifcPSE.PropertyName = \"MullionThickness\";\r\n            ifcPSE.PropertyType = PropertyType.NonNegativeLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MullionThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowLiningProperties.FirstTransomOffset\", \"FirstTransomOffset\");\r\n            ifcPSE.PropertyName = \"FirstTransomOffset\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FirstTransomOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowLiningProperties.SecondTransomOffset\", \"SecondTransomOffset\");\r\n            ifcPSE.PropertyName = \"SecondTransomOffset\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondTransomOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowLiningProperties.FirstMullionOffset\", \"FirstMullionOffset\");\r\n            ifcPSE.PropertyName = \"FirstMullionOffset\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FirstMullionOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowLiningProperties.SecondMullionOffset\", \"SecondMullionOffset\");\r\n            ifcPSE.PropertyName = \"SecondMullionOffset\";\r\n            ifcPSE.PropertyType = PropertyType.NormalisedRatio;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SecondMullionOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowLiningProperties.LiningOffset\", \"LiningOffset\");\r\n            ifcPSE.PropertyName = \"LiningOffset\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningOffsetCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowLiningProperties.LiningToPanelOffsetX\", \"LiningToPanelOffsetX\");\r\n            ifcPSE.PropertyName = \"LiningToPanelOffsetX\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningToPanelOffsetXCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowLiningProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowLiningProperties.LiningToPanelOffsetY\", \"LiningToPanelOffsetY\");\r\n            ifcPSE.PropertyName = \"LiningToPanelOffsetY\";\r\n            ifcPSE.PropertyType = PropertyType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LiningToPanelOffsetYCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowLiningProperties.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWindowLiningProperties);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_WindowPanelProperties(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWindowPanelProperties = new PropertySetDescription();\r\n         propertySetWindowPanelProperties.Name = \"Pset_WindowPanelProperties\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WindowPanelProperties\"))\r\n         {\r\n            propertySetWindowPanelProperties.EntityTypes.Add(IFCEntityType.IfcPlate);\r\n            propertySetWindowPanelProperties.EntityTypes.Add(IFCEntityType.IfcWindow);\r\n            propertySetWindowPanelProperties.EntityTypes.Add(IFCEntityType.IfcPlateType);\r\n            propertySetWindowPanelProperties.EntityTypes.Add(IFCEntityType.IfcWindowType);\r\n            propertySetWindowPanelProperties.ObjectType = \"IfcPlate\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowPanelProperties.OperationType\", \"OperationType\");\r\n            ifcPSE.PropertyName = \"OperationType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_WindowPanelOperationEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperationTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowPanelProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowPanelProperties.PanelPosition\", \"PanelPosition\");\r\n            ifcPSE.PropertyName = \"PanelPosition\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_WindowPanelPositionEnum);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PanelPositionCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowPanelProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowPanelProperties.FrameDepth\", \"FrameDepth\");\r\n            ifcPSE.PropertyName = \"FrameDepth\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameDepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowPanelProperties.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WindowPanelProperties.FrameThickness\", \"FrameThickness\");\r\n            ifcPSE.PropertyName = \"FrameThickness\";\r\n            ifcPSE.PropertyType = PropertyType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FrameThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWindowPanelProperties.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWindowPanelProperties);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_WiredCommunicationPortCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWiredCommunicationPortCommon = new PropertySetDescription();\r\n         propertySetWiredCommunicationPortCommon.Name = \"Pset_WiredCommunicationPortCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WiredCommunicationPortCommon\"))\r\n         {\r\n            propertySetWiredCommunicationPortCommon.EntityTypes.Add(IFCEntityType.IfcDistributionPort);\r\n            propertySetWiredCommunicationPortCommon.ObjectType = \"IfcDistributionPort\";\r\n            propertySetWiredCommunicationPortCommon.PredefinedType = \"CABLE\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WiredCommunicationPortCommon.CommunicationStandard\", \"CommunicationStandard\");\r\n            ifcPSE.PropertyName = \"CommunicationStandard\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.IFC4X3.PEnum_CommunicationStandard);\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CommunicationStandardCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWiredCommunicationPortCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WiredCommunicationPortCommon.MaximumTransferRate\", \"MaximumTransferRate\");\r\n            ifcPSE.PropertyName = \"MaximumTransferRate\";\r\n            ifcPSE.PropertyType = PropertyType.IntegerCountRate;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MaximumTransferRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWiredCommunicationPortCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWiredCommunicationPortCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_WorkControlCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetWorkControlCommon = new PropertySetDescription();\r\n         propertySetWorkControlCommon.Name = \"Pset_WorkControlCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WorkControlCommon\"))\r\n         {\r\n            propertySetWorkControlCommon.EntityTypes.Add(IFCEntityType.IfcWorkControl);\r\n            propertySetWorkControlCommon.ObjectType = \"IfcWorkControl\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WorkControlCommon.WorkStartTime\", \"WorkStartTime\");\r\n            ifcPSE.PropertyName = \"WorkStartTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Work Start Time\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"作業開始時間\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkStartTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWorkControlCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WorkControlCommon.WorkFinishTime\", \"WorkFinishTime\");\r\n            ifcPSE.PropertyName = \"WorkFinishTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Work Finish Time\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"作業終了時間\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkFinishTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWorkControlCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WorkControlCommon.WorkDayDuration\", \"WorkDayDuration\");\r\n            ifcPSE.PropertyName = \"WorkDayDuration\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Work Day Duration\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"作業日数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkDayDurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWorkControlCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WorkControlCommon.WorkWeekDuration\", \"WorkWeekDuration\");\r\n            ifcPSE.PropertyName = \"WorkWeekDuration\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Work Week Duration\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"作業週数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkWeekDurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWorkControlCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WorkControlCommon.WorkMonthDuration\", \"WorkMonthDuration\");\r\n            ifcPSE.PropertyName = \"WorkMonthDuration\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Work Month Duration\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"作業月数\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkMonthDurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWorkControlCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_WorkControlCommon\"))\r\n         {\r\n            propertySetWorkControlCommon.EntityTypes.Add(IFCEntityType.IfcWorkControl);\r\n            propertySetWorkControlCommon.ObjectType = \"IfcWorkControl\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_WorkControlCommon.WorkStartTime\", \"WorkStartTime\");\r\n            ifcPSE.PropertyName = \"WorkStartTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkStartTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWorkControlCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WorkControlCommon.WorkFinishTime\", \"WorkFinishTime\");\r\n            ifcPSE.PropertyName = \"WorkFinishTime\";\r\n            ifcPSE.PropertyType = PropertyType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkFinishTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWorkControlCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WorkControlCommon.WorkDayDuration\", \"WorkDayDuration\");\r\n            ifcPSE.PropertyName = \"WorkDayDuration\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkDayDurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWorkControlCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WorkControlCommon.WorkWeekDuration\", \"WorkWeekDuration\");\r\n            ifcPSE.PropertyName = \"WorkWeekDuration\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkWeekDurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWorkControlCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_WorkControlCommon.WorkMonthDuration\", \"WorkMonthDuration\");\r\n            ifcPSE.PropertyName = \"WorkMonthDuration\";\r\n            ifcPSE.PropertyType = PropertyType.Duration;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WorkMonthDurationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetWorkControlCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetWorkControlCommon);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitPset_ZoneCommon(IList<PropertySetDescription> commonPropertySets)\r\n      {\r\n         PropertySetDescription propertySetZoneCommon = new PropertySetDescription();\r\n         propertySetZoneCommon.Name = \"Pset_ZoneCommon\";\r\n         PropertySetEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ZoneCommon\"))\r\n         {\r\n            propertySetZoneCommon.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.OccupancyType\", \"OccupancyType\");\r\n            ifcPSE.PropertyName = \"OccupancyType\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyTypeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.OccupancyNumber\", \"OccupancyNumber\");\r\n            ifcPSE.PropertyName = \"OccupancyNumber\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OccupancyNumberCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.PubliclyAccessible\", \"PubliclyAccessible\");\r\n            ifcPSE.PropertyName = \"PubliclyAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PubliclyAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.NaturalVentilation\", \"NaturalVentilation\");\r\n            ifcPSE.PropertyName = \"NaturalVentilation\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NaturalVentilationCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.NaturalVentilationRate\", \"NaturalVentilationRate\");\r\n            ifcPSE.PropertyName = \"NaturalVentilationRate\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NaturalVentilationRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.MechanicalVentilationRate\", \"MechanicalVentilationRate\");\r\n            ifcPSE.PropertyName = \"MechanicalVentilationRate\";\r\n            ifcPSE.PropertyType = PropertyType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MechanicalVentilationRateCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ZoneCommon\"))\r\n         {\r\n            propertySetZoneCommon.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.Category\", \"Category\");\r\n            ifcPSE.PropertyName = \"Category\";\r\n            ifcPSE.PropertyType = PropertyType.Label;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CategoryCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.GrossAreaPlanned\", \"GrossAreaPlanned\");\r\n            ifcPSE.PropertyName = \"GrossAreaPlanned\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaPlannedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.NetAreaPlanned\", \"NetAreaPlanned\");\r\n            ifcPSE.PropertyName = \"NetAreaPlanned\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetAreaPlannedCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.PubliclyAccessible\", \"PubliclyAccessible\");\r\n            ifcPSE.PropertyName = \"PubliclyAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PubliclyAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ZoneCommon\"))\r\n         {\r\n            propertySetZoneCommon.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            propertySetZoneCommon.ObjectType = \"IfcZone\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Reference\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"参照記号\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"참조 ID\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Is External\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Est extérieur\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外部区分\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.GrossPlannedArea\", \"GrossPlannedArea\");\r\n            ifcPSE.PropertyName = \"GrossPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Planned Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Surface programmée brute\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"計画グロス面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.NetPlannedArea\", \"NetPlannedArea\");\r\n            ifcPSE.PropertyName = \"NetPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Planned Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"Surface programmée nette\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"計画ネット面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.PubliclyAccessible\", \"PubliclyAccessible\");\r\n            ifcPSE.PropertyName = \"PubliclyAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Publicly Accessible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"AccessibleAuPublic\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"公共アクセス可能性\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"공공 액세스 가능성\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PubliclyAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Handicap Accessible\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.French, \"AccesHandicapes\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"ハンディキャップアクセス可能性\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Korean, \"핸디캠 액세스 가능성\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Pset_ZoneCommon\"))\r\n         {\r\n            propertySetZoneCommon.EntityTypes.Add(IFCEntityType.IfcZone);\r\n            propertySetZoneCommon.ObjectType = \"IfcZone\";\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.Reference\", \"Reference\");\r\n            ifcPSE.PropertyName = \"Reference\";\r\n            ifcPSE.PropertyType = PropertyType.Identifier;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ReferenceCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.IsExternal\", \"IsExternal\");\r\n            ifcPSE.PropertyName = \"IsExternal\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.IsExternalCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.GrossPlannedArea\", \"GrossPlannedArea\");\r\n            ifcPSE.PropertyName = \"GrossPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.NetPlannedArea\", \"NetPlannedArea\");\r\n            ifcPSE.PropertyName = \"NetPlannedArea\";\r\n            ifcPSE.PropertyType = PropertyType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetPlannedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.PubliclyAccessible\", \"PubliclyAccessible\");\r\n            ifcPSE.PropertyName = \"PubliclyAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PubliclyAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new PropertySetEntry(\"Pset_ZoneCommon.HandicapAccessible\", \"HandicapAccessible\");\r\n            ifcPSE.PropertyName = \"HandicapAccessible\";\r\n            ifcPSE.PropertyType = PropertyType.Boolean;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HandicapAccessibleCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            propertySetZoneCommon.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            commonPropertySets.Add(propertySetZoneCommon);\r\n         }\r\n      }\r\n\r\n\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/ExporterInitializer_QsetDef.cs",
    "content": "/********************************************************************************************************************************\r\n** NOTE: This code is generated from IFC psd files automatically by RevitIFCTools.                                            **\r\n**       DO NOT change it manually as it will be overwritten the next time this file is re-generated!!                        **\r\n********************************************************************************************************************************/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing Autodesk.Revit;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.ApplicationServices;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Export.Exporter.PropertySet.Calculators;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   partial class ExporterInitializer\r\n   {\r\n      public static void InitQtoSets(IList<IList<QuantityDescription>> allPsetOrQtoSets)\r\n      {\r\n         IList<QuantityDescription> theSets = new List<QuantityDescription>();\r\n         InitQto_ActuatorBaseQuantities(theSets);\r\n         InitQto_AirTerminalBaseQuantities(theSets);\r\n         InitQto_AirTerminalBoxTypeBaseQuantities(theSets);\r\n         InitQto_AirToAirHeatRecoveryBaseQuantities(theSets);\r\n         InitQto_AlarmBaseQuantities(theSets);\r\n         InitQto_ArealStratumBaseQuantities(theSets);\r\n         InitQto_AudioVisualApplianceBaseQuantities(theSets);\r\n         InitQto_BeamBaseQuantities(theSets);\r\n         InitQto_BodyGeometryValidation(theSets);\r\n         InitQto_BoilerBaseQuantities(theSets);\r\n         InitQto_BuildingBaseQuantities(theSets);\r\n         InitQto_BuildingElementProxyQuantities(theSets);\r\n         InitQto_BuildingStoreyBaseQuantities(theSets);\r\n         InitQto_BurnerBaseQuantities(theSets);\r\n         InitQto_CableCarrierFittingBaseQuantities(theSets);\r\n         InitQto_CableCarrierSegmentBaseQuantities(theSets);\r\n         InitQto_CableFittingBaseQuantities(theSets);\r\n         InitQto_CableSegmentBaseQuantities(theSets);\r\n         InitQto_ChillerBaseQuantities(theSets);\r\n         InitQto_ChimneyBaseQuantities(theSets);\r\n         InitQto_CoilBaseQuantities(theSets);\r\n         InitQto_ColumnBaseQuantities(theSets);\r\n         InitQto_CommunicationsApplianceBaseQuantities(theSets);\r\n         InitQto_CompressorBaseQuantities(theSets);\r\n         InitQto_CondenserBaseQuantities(theSets);\r\n         InitQto_ConduitSegmentBaseQuantities(theSets);\r\n         InitQto_ConstructionEquipmentResourceBaseQuantities(theSets);\r\n         InitQto_ConstructionMaterialResourceBaseQuantities(theSets);\r\n         InitQto_ControllerBaseQuantities(theSets);\r\n         InitQto_CooledBeamBaseQuantities(theSets);\r\n         InitQto_CoolingTowerBaseQuantities(theSets);\r\n         InitQto_CourseBaseQuantities(theSets);\r\n         InitQto_CoveringBaseQuantities(theSets);\r\n         InitQto_CurtainWallQuantities(theSets);\r\n         InitQto_DamperBaseQuantities(theSets);\r\n         InitQto_DistributionBoardBaseQuantities(theSets);\r\n         InitQto_DistributionChamberElementBaseQuantities(theSets);\r\n         InitQto_DoorBaseQuantities(theSets);\r\n         InitQto_DuctFittingBaseQuantities(theSets);\r\n         InitQto_DuctSegmentBaseQuantities(theSets);\r\n         InitQto_DuctSilencerBaseQuantities(theSets);\r\n         InitQto_EarthworksCutBaseQuantities(theSets);\r\n         InitQto_EarthworksFillBaseQuantities(theSets);\r\n         InitQto_ElectricApplianceBaseQuantities(theSets);\r\n         InitQto_ElectricDistributionBoardBaseQuantities(theSets);\r\n         InitQto_ElectricFlowStorageDeviceBaseQuantities(theSets);\r\n         InitQto_ElectricGeneratorBaseQuantities(theSets);\r\n         InitQto_ElectricMotorBaseQuantities(theSets);\r\n         InitQto_ElectricTimeControlBaseQuantities(theSets);\r\n         InitQto_EvaporativeCoolerBaseQuantities(theSets);\r\n         InitQto_EvaporatorBaseQuantities(theSets);\r\n         InitQto_FacilityPartBaseQuantities(theSets);\r\n         InitQto_FanBaseQuantities(theSets);\r\n         InitQto_FilterBaseQuantities(theSets);\r\n         InitQto_FireSuppressionTerminalBaseQuantities(theSets);\r\n         InitQto_FlowInstrumentBaseQuantities(theSets);\r\n         InitQto_FlowMeterBaseQuantities(theSets);\r\n         InitQto_FootingBaseQuantities(theSets);\r\n         InitQto_HeatExchangerBaseQuantities(theSets);\r\n         InitQto_HumidifierBaseQuantities(theSets);\r\n         InitQto_ImpactProtectionDeviceBaseQuantities(theSets);\r\n         InitQto_InterceptorBaseQuantities(theSets);\r\n         InitQto_JunctionBoxBaseQuantities(theSets);\r\n         InitQto_KerbBaseQuantities(theSets);\r\n         InitQto_LaborResourceBaseQuantities(theSets);\r\n         InitQto_LampBaseQuantities(theSets);\r\n         InitQto_LightFixtureBaseQuantities(theSets);\r\n         InitQto_LinearStratumBaseQuantities(theSets);\r\n         InitQto_MarineFacilityBaseQuantities(theSets);\r\n         InitQto_MemberBaseQuantities(theSets);\r\n         InitQto_MotorConnectionBaseQuantities(theSets);\r\n         InitQto_OpeningElementBaseQuantities(theSets);\r\n         InitQto_OutletBaseQuantities(theSets);\r\n         InitQto_PavementBaseQuantities(theSets);\r\n         InitQto_PictorialSignQuantities(theSets);\r\n         InitQto_PileBaseQuantities(theSets);\r\n         InitQto_PipeFittingBaseQuantities(theSets);\r\n         InitQto_PipeSegmentBaseQuantities(theSets);\r\n         InitQto_PlateBaseQuantities(theSets);\r\n         InitQto_ProjectionElementBaseQuantities(theSets);\r\n         InitQto_ProtectiveDeviceBaseQuantities(theSets);\r\n         InitQto_ProtectiveDeviceTrippingUnitBaseQuantities(theSets);\r\n         InitQto_PumpBaseQuantities(theSets);\r\n         InitQto_RailBaseQuantities(theSets);\r\n         InitQto_RailingBaseQuantities(theSets);\r\n         InitQto_RampFlightBaseQuantities(theSets);\r\n         InitQto_ReinforcedSoilBaseQuantities(theSets);\r\n         InitQto_ReinforcingElementBaseQuantities(theSets);\r\n         InitQto_RoofBaseQuantities(theSets);\r\n         InitQto_SanitaryTerminalBaseQuantities(theSets);\r\n         InitQto_SensorBaseQuantities(theSets);\r\n         InitQto_SignalBaseQuantities(theSets);\r\n         InitQto_SignBaseQuantities(theSets);\r\n         InitQto_SiteBaseQuantities(theSets);\r\n         InitQto_SlabBaseQuantities(theSets);\r\n         InitQto_SleeperBaseQuantities(theSets);\r\n         InitQto_SolarDeviceBaseQuantities(theSets);\r\n         InitQto_SpaceBaseQuantities(theSets);\r\n         InitQto_SpaceHeaterBaseQuantities(theSets);\r\n         InitQto_SpatialZoneBaseQuantities(theSets);\r\n         InitQto_StackTerminalBaseQuantities(theSets);\r\n         InitQto_StairFlightBaseQuantities(theSets);\r\n         InitQto_SurfaceFeatureBaseQuantities(theSets);\r\n         InitQto_SwitchingDeviceBaseQuantities(theSets);\r\n         InitQto_TankBaseQuantities(theSets);\r\n         InitQto_TransformerBaseQuantities(theSets);\r\n         InitQto_TubeBundleBaseQuantities(theSets);\r\n         InitQto_UnitaryControlElementBaseQuantities(theSets);\r\n         InitQto_UnitaryEquipmentBaseQuantities(theSets);\r\n         InitQto_ValveBaseQuantities(theSets);\r\n         InitQto_VehicleBaseQuantities(theSets);\r\n         InitQto_VibrationIsolatorBaseQuantities(theSets);\r\n         InitQto_VolumetricStratumBaseQuantities(theSets);\r\n         InitQto_WallBaseQuantities(theSets);\r\n         InitQto_WasteTerminalBaseQuantities(theSets);\r\n         InitQto_WindowBaseQuantities(theSets);\r\n\r\n         allPsetOrQtoSets.Add(theSets);\r\n      }\r\n\r\n      private static void InitQto_ActuatorBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetActuatorBaseQuantities = new QuantityDescription();\r\n         qtoSetActuatorBaseQuantities.Name = \"Qto_ActuatorBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ActuatorBaseQuantities\"))\r\n         {\r\n            qtoSetActuatorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            qtoSetActuatorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcActuatorType);\r\n            qtoSetActuatorBaseQuantities.ObjectType = \"IfcActuator,IfcActuatorType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ActuatorBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetActuatorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ActuatorBaseQuantities\"))\r\n         {\r\n            qtoSetActuatorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcActuator);\r\n            qtoSetActuatorBaseQuantities.ObjectType = \"IfcActuator\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ActuatorBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetActuatorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetActuatorBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_AirTerminalBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetAirTerminalBaseQuantities = new QuantityDescription();\r\n         qtoSetAirTerminalBaseQuantities.Name = \"Qto_AirTerminalBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_AirTerminalBaseQuantities\"))\r\n         {\r\n            qtoSetAirTerminalBaseQuantities.EntityTypes.Add(IFCEntityType.IfcAirTerminal);\r\n            qtoSetAirTerminalBaseQuantities.EntityTypes.Add(IFCEntityType.IfcAirTerminalType);\r\n            qtoSetAirTerminalBaseQuantities.ObjectType = \"IfcAirTerminal,IfcAirTerminalType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_AirTerminalBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetAirTerminalBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_AirTerminalBaseQuantities.Perimeter\", \"Perimeter\");\r\n            ifcPSE.PropertyName = \"Perimeter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetAirTerminalBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_AirTerminalBaseQuantities.TotalSurfaceArea\", \"TotalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"TotalSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetAirTerminalBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_AirTerminalBaseQuantities\"))\r\n         {\r\n            qtoSetAirTerminalBaseQuantities.EntityTypes.Add(IFCEntityType.IfcAirTerminal);\r\n            qtoSetAirTerminalBaseQuantities.ObjectType = \"IfcAirTerminal\";\r\n            ifcPSE = new QuantityEntry(\"Qto_AirTerminalBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetAirTerminalBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_AirTerminalBaseQuantities.Perimeter\", \"Perimeter\");\r\n            ifcPSE.PropertyName = \"Perimeter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Perimeter\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetAirTerminalBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_AirTerminalBaseQuantities.TotalSurfaceArea\", \"TotalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"TotalSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetAirTerminalBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetAirTerminalBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_AirTerminalBoxTypeBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetAirTerminalBoxTypeBaseQuantities = new QuantityDescription();\r\n         qtoSetAirTerminalBoxTypeBaseQuantities.Name = \"Qto_AirTerminalBoxTypeBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_AirTerminalBoxTypeBaseQuantities\"))\r\n         {\r\n            qtoSetAirTerminalBoxTypeBaseQuantities.EntityTypes.Add(IFCEntityType.IfcAirTerminalBox);\r\n            qtoSetAirTerminalBoxTypeBaseQuantities.EntityTypes.Add(IFCEntityType.IfcAirTerminalBoxType);\r\n            qtoSetAirTerminalBoxTypeBaseQuantities.ObjectType = \"IfcAirTerminalBox,IfcAirTerminalBoxType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_AirTerminalBoxTypeBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetAirTerminalBoxTypeBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_AirTerminalBoxTypeBaseQuantities\"))\r\n         {\r\n            qtoSetAirTerminalBoxTypeBaseQuantities.EntityTypes.Add(IFCEntityType.IfcAirTerminalBox);\r\n            qtoSetAirTerminalBoxTypeBaseQuantities.ObjectType = \"IfcAirTerminalBox\";\r\n            ifcPSE = new QuantityEntry(\"Qto_AirTerminalBoxTypeBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetAirTerminalBoxTypeBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetAirTerminalBoxTypeBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_AirToAirHeatRecoveryBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetAirToAirHeatRecoveryBaseQuantities = new QuantityDescription();\r\n         qtoSetAirToAirHeatRecoveryBaseQuantities.Name = \"Qto_AirToAirHeatRecoveryBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_AirToAirHeatRecoveryBaseQuantities\"))\r\n         {\r\n            qtoSetAirToAirHeatRecoveryBaseQuantities.EntityTypes.Add(IFCEntityType.IfcAirToAirHeatRecovery);\r\n            qtoSetAirToAirHeatRecoveryBaseQuantities.EntityTypes.Add(IFCEntityType.IfcAirToAirHeatRecoveryType);\r\n            qtoSetAirToAirHeatRecoveryBaseQuantities.ObjectType = \"IfcAirToAirHeatRecovery,IfcAirToAirHeatRecoveryType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_AirToAirHeatRecoveryBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetAirToAirHeatRecoveryBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_AirToAirHeatRecoveryBaseQuantities\"))\r\n         {\r\n            qtoSetAirToAirHeatRecoveryBaseQuantities.EntityTypes.Add(IFCEntityType.IfcAirToAirHeatRecovery);\r\n            qtoSetAirToAirHeatRecoveryBaseQuantities.ObjectType = \"IfcAirToAirHeatRecovery\";\r\n            ifcPSE = new QuantityEntry(\"Qto_AirToAirHeatRecoveryBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetAirToAirHeatRecoveryBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetAirToAirHeatRecoveryBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_AlarmBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetAlarmBaseQuantities = new QuantityDescription();\r\n         qtoSetAlarmBaseQuantities.Name = \"Qto_AlarmBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_AlarmBaseQuantities\"))\r\n         {\r\n            qtoSetAlarmBaseQuantities.EntityTypes.Add(IFCEntityType.IfcAlarm);\r\n            qtoSetAlarmBaseQuantities.EntityTypes.Add(IFCEntityType.IfcAlarmType);\r\n            qtoSetAlarmBaseQuantities.ObjectType = \"IfcAlarm,IfcAlarmType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_AlarmBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetAlarmBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_AlarmBaseQuantities\"))\r\n         {\r\n            qtoSetAlarmBaseQuantities.EntityTypes.Add(IFCEntityType.IfcAlarm);\r\n            qtoSetAlarmBaseQuantities.ObjectType = \"IfcAlarm\";\r\n            ifcPSE = new QuantityEntry(\"Qto_AlarmBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetAlarmBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetAlarmBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ArealStratumBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetArealStratumBaseQuantities = new QuantityDescription();\r\n         qtoSetArealStratumBaseQuantities.Name = \"Qto_ArealStratumBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ArealStratumBaseQuantities\"))\r\n         {\r\n            qtoSetArealStratumBaseQuantities.EntityTypes.Add(IFCEntityType.IfcGeotechnicalStratum);\r\n            qtoSetArealStratumBaseQuantities.ObjectType = \"IfcGeotechnicalStratum\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ArealStratumBaseQuantities.Area\", \"Area\");\r\n            ifcPSE.PropertyName = \"Area\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetArealStratumBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ArealStratumBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetArealStratumBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ArealStratumBaseQuantities.PlanLength\", \"PlanLength\");\r\n            ifcPSE.PropertyName = \"PlanLength\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlanLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetArealStratumBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetArealStratumBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_AudioVisualApplianceBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetAudioVisualApplianceBaseQuantities = new QuantityDescription();\r\n         qtoSetAudioVisualApplianceBaseQuantities.Name = \"Qto_AudioVisualApplianceBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_AudioVisualApplianceBaseQuantities\"))\r\n         {\r\n            qtoSetAudioVisualApplianceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            qtoSetAudioVisualApplianceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcAudioVisualApplianceType);\r\n            qtoSetAudioVisualApplianceBaseQuantities.ObjectType = \"IfcAudioVisualAppliance,IfcAudioVisualApplianceType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_AudioVisualApplianceBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetAudioVisualApplianceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_AudioVisualApplianceBaseQuantities\"))\r\n         {\r\n            qtoSetAudioVisualApplianceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcAudioVisualAppliance);\r\n            qtoSetAudioVisualApplianceBaseQuantities.ObjectType = \"IfcAudioVisualAppliance\";\r\n            ifcPSE = new QuantityEntry(\"Qto_AudioVisualApplianceBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetAudioVisualApplianceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetAudioVisualApplianceBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_BeamBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetBeamBaseQuantities = new QuantityDescription();\r\n         qtoSetBeamBaseQuantities.Name = \"Qto_BeamBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BeamBaseQuantities\"))\r\n         {\r\n            qtoSetBeamBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            qtoSetBeamBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBeamType);\r\n            qtoSetBeamBaseQuantities.ObjectType = \"IfcBeam,IfcBeamType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.GrossSurfaceArea\", \"GrossSurfaceArea\");\r\n            ifcPSE.PropertyName = \"GrossSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.NetSurfaceArea\", \"NetSurfaceArea\");\r\n            ifcPSE.PropertyName = \"NetSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BeamBaseQuantities\"))\r\n         {\r\n            qtoSetBeamBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            qtoSetBeamBaseQuantities.ObjectType = \"IfcBeam\";\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Länge\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Querschnittsfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cross Section Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"断面面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Mantelfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outer Surface Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外表面面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.GrossSurfaceArea\", \"GrossSurfaceArea\");\r\n            ifcPSE.PropertyName = \"GrossSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Gesamtoberfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Surface Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"表面面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.NetSurfaceArea\", \"NetSurfaceArea\");\r\n            ifcPSE.PropertyName = \"NetSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettooberfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttovolumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Volume\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"体積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettovolumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Volume\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味体積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttogewicht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"重量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettogewicht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Weight\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味重量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BeamBaseQuantities\"))\r\n         {\r\n            qtoSetBeamBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.TotalSurfaceArea\", \"TotalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"TotalSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BeamBaseQuantities\"))\r\n         {\r\n            qtoSetBeamBaseQuantities.Name = \"BaseQuantities\";\r\n\r\n            qtoSetBeamBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBeam);\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.TotalSurfaceArea\", \"TotalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"TotalSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BeamBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetBeamBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_BodyGeometryValidation(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetBodyGeometryValidation = new QuantityDescription();\r\n         qtoSetBodyGeometryValidation.Name = \"Qto_BodyGeometryValidation\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BodyGeometryValidation\"))\r\n         {\r\n            qtoSetBodyGeometryValidation.EntityTypes.Add(IFCEntityType.IfcProduct);\r\n            qtoSetBodyGeometryValidation.ObjectType = \"IfcProduct\";\r\n            ifcPSE = new QuantityEntry(\"Qto_BodyGeometryValidation.GrossSurfaceArea\", \"GrossSurfaceArea\");\r\n            ifcPSE.PropertyName = \"GrossSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBodyGeometryValidation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BodyGeometryValidation.NetSurfaceArea\", \"NetSurfaceArea\");\r\n            ifcPSE.PropertyName = \"NetSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBodyGeometryValidation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BodyGeometryValidation.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBodyGeometryValidation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BodyGeometryValidation.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBodyGeometryValidation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BodyGeometryValidation.SurfaceGenusBeforeFeatures\", \"SurfaceGenusBeforeFeatures\");\r\n            ifcPSE.PropertyName = \"SurfaceGenusBeforeFeatures\";\r\n            ifcPSE.QuantityType = QuantityType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceGenusBeforeFeaturesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBodyGeometryValidation.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BodyGeometryValidation.SurfaceGenusAfterFeatures\", \"SurfaceGenusAfterFeatures\");\r\n            ifcPSE.PropertyName = \"SurfaceGenusAfterFeatures\";\r\n            ifcPSE.QuantityType = QuantityType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceGenusAfterFeaturesCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBodyGeometryValidation.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetBodyGeometryValidation);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_BoilerBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetBoilerBaseQuantities = new QuantityDescription();\r\n         qtoSetBoilerBaseQuantities.Name = \"Qto_BoilerBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BoilerBaseQuantities\"))\r\n         {\r\n            qtoSetBoilerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBoiler);\r\n            qtoSetBoilerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBoilerType);\r\n            qtoSetBoilerBaseQuantities.ObjectType = \"IfcBoiler,IfcBoilerType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_BoilerBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBoilerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BoilerBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBoilerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BoilerBaseQuantities.TotalSurfaceArea\", \"TotalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"TotalSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBoilerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BoilerBaseQuantities\"))\r\n         {\r\n            qtoSetBoilerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBoiler);\r\n            qtoSetBoilerBaseQuantities.ObjectType = \"IfcBoiler\";\r\n            ifcPSE = new QuantityEntry(\"Qto_BoilerBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBoilerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BoilerBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBoilerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BoilerBaseQuantities.TotalSurfaceArea\", \"TotalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"TotalSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBoilerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetBoilerBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_BuildingBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetBuildingBaseQuantities = new QuantityDescription();\r\n         qtoSetBuildingBaseQuantities.Name = \"Qto_BuildingBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BuildingBaseQuantities\"))\r\n         {\r\n            qtoSetBuildingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            qtoSetBuildingBaseQuantities.ObjectType = \"IfcBuilding\";\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.EavesHeight\", \"EavesHeight\");\r\n            ifcPSE.PropertyName = \"EavesHeight\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EavesHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.FootPrintArea\", \"FootPrintArea\");\r\n            ifcPSE.PropertyName = \"FootPrintArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FootPrintAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.GrossFloorArea\", \"GrossFloorArea\");\r\n            ifcPSE.PropertyName = \"GrossFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.NetFloorArea\", \"NetFloorArea\");\r\n            ifcPSE.PropertyName = \"NetFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BuildingBaseQuantities\"))\r\n         {\r\n            qtoSetBuildingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            qtoSetBuildingBaseQuantities.ObjectType = \"IfcBuilding\";\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Firsthöhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"高さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.EavesHeight\", \"EavesHeight\");\r\n            ifcPSE.PropertyName = \"EavesHeight\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Traufhöhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Eaves Height\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.EavesHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.FootprintArea\", \"FootprintArea\");\r\n            ifcPSE.PropertyName = \"FootprintArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bebaute Fläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Footprint Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"建築面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FootprintAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.GrossFloorArea\", \"GrossFloorArea\");\r\n            ifcPSE.PropertyName = \"GrossFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttogrundfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Floor Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"延べ床面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.NetFloorArea\", \"NetFloorArea\");\r\n            ifcPSE.PropertyName = \"NetFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettogrundfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Floor Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味床面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttorauminhalt\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Volume\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"建物体積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettorauminhalt\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Volume\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味建物体積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BuildingBaseQuantities\"))\r\n         {\r\n            qtoSetBuildingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.TotalHeight\", \"TotalHeight\");\r\n            ifcPSE.PropertyName = \"TotalHeight\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.SiteCoverage\", \"SiteCoverage\");\r\n            ifcPSE.PropertyName = \"SiteCoverage\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SiteCoverageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.GrossFloorArea\", \"GrossFloorArea\");\r\n            ifcPSE.PropertyName = \"GrossFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.NetFloorArea\", \"NetFloorArea\");\r\n            ifcPSE.PropertyName = \"NetFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BuildingBaseQuantities\"))\r\n         {\r\n            qtoSetBuildingBaseQuantities.Name = \"BaseQuantities\";\r\n\r\n            qtoSetBuildingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBuilding);\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.NominalArea\", \"NominalArea\");\r\n            ifcPSE.PropertyName = \"NominalArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.GrossFloorArea\", \"GrossFloorArea\");\r\n            ifcPSE.PropertyName = \"GrossFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.NetFloorArea\", \"NetFloorArea\");\r\n            ifcPSE.PropertyName = \"NetFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetBuildingBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_BuildingElementProxyQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetBuildingElementProxyQuantities = new QuantityDescription();\r\n         qtoSetBuildingElementProxyQuantities.Name = \"Qto_BuildingElementProxyQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BuildingElementProxyQuantities\"))\r\n         {\r\n            qtoSetBuildingElementProxyQuantities.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxy);\r\n            qtoSetBuildingElementProxyQuantities.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxyType);\r\n            qtoSetBuildingElementProxyQuantities.ObjectType = \"IfcBuildingElementProxy,IfcBuildingElementProxyType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingElementProxyQuantities.NetSurfaceArea\", \"NetSurfaceArea\");\r\n            ifcPSE.PropertyName = \"NetSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingElementProxyQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingElementProxyQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingElementProxyQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BuildingElementProxyQuantities\"))\r\n         {\r\n            qtoSetBuildingElementProxyQuantities.EntityTypes.Add(IFCEntityType.IfcBuildingElementProxy);\r\n            qtoSetBuildingElementProxyQuantities.ObjectType = \"IfcBuildingElementProxy\";\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingElementProxyQuantities.NetSurfaceArea\", \"NetSurfaceArea\");\r\n            ifcPSE.PropertyName = \"NetSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingElementProxyQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingElementProxyQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingElementProxyQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetBuildingElementProxyQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_BuildingStoreyBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetBuildingStoreyBaseQuantities = new QuantityDescription();\r\n         qtoSetBuildingStoreyBaseQuantities.Name = \"Qto_BuildingStoreyBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BuildingStoreyBaseQuantities\"))\r\n         {\r\n            qtoSetBuildingStoreyBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBuildingStorey);\r\n            qtoSetBuildingStoreyBaseQuantities.ObjectType = \"IfcBuildingStorey\";\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.GrossHeight\", \"GrossHeight\");\r\n            ifcPSE.PropertyName = \"GrossHeight\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.NetHeight\", \"NetHeight\");\r\n            ifcPSE.PropertyName = \"NetHeight\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.GrossPerimeter\", \"GrossPerimeter\");\r\n            ifcPSE.PropertyName = \"GrossPerimeter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossPerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.GrossFloorArea\", \"GrossFloorArea\");\r\n            ifcPSE.PropertyName = \"GrossFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.NetFloorArea\", \"NetFloorArea\");\r\n            ifcPSE.PropertyName = \"NetFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BuildingStoreyBaseQuantities\"))\r\n         {\r\n            qtoSetBuildingStoreyBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBuildingStorey);\r\n            qtoSetBuildingStoreyBaseQuantities.ObjectType = \"IfcBuildingStorey\";\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.GrossHeight\", \"GrossHeight\");\r\n            ifcPSE.PropertyName = \"GrossHeight\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Systemhöhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"階高\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.NetHeigtht\", \"NetHeigtht\");\r\n            ifcPSE.PropertyName = \"NetHeigtht\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Lichte Höhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Heigtht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味階高\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetHeigthtCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.GrossPerimeter\", \"GrossPerimeter\");\r\n            ifcPSE.PropertyName = \"GrossPerimeter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Umfang\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Perimeter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"周辺長\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossPerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.GrossFloorArea\", \"GrossFloorArea\");\r\n            ifcPSE.PropertyName = \"GrossFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttogrundfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Floor Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"床面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.NetFloorArea\", \"NetFloorArea\");\r\n            ifcPSE.PropertyName = \"NetFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettogrundfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Floor Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味床面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttorauminhalt\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Volume\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"建物階体積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettorauminhalt\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Volume\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味建物階体積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BuildingStoreyBaseQuantities\"))\r\n         {\r\n            qtoSetBuildingStoreyBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBuildingStorey);\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.TotalHeight\", \"TotalHeight\");\r\n            ifcPSE.PropertyName = \"TotalHeight\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.SiteCoverage\", \"SiteCoverage\");\r\n            ifcPSE.PropertyName = \"SiteCoverage\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SiteCoverageCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.NetFloorArea\", \"NetFloorArea\");\r\n            ifcPSE.PropertyName = \"NetFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BuildingStoreyBaseQuantities\"))\r\n         {\r\n            qtoSetBuildingStoreyBaseQuantities.Name = \"BaseQuantities\";\r\n\r\n            qtoSetBuildingStoreyBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBuildingStorey);\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.GrossFloorArea\", \"GrossFloorArea\");\r\n            ifcPSE.PropertyName = \"GrossFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.NetFloorArea\", \"NetFloorArea\");\r\n            ifcPSE.PropertyName = \"NetFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_BuildingStoreyBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBuildingStoreyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetBuildingStoreyBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_BurnerBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetBurnerBaseQuantities = new QuantityDescription();\r\n         qtoSetBurnerBaseQuantities.Name = \"Qto_BurnerBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BurnerBaseQuantities\"))\r\n         {\r\n            qtoSetBurnerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBurner);\r\n            qtoSetBurnerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBurnerType);\r\n            qtoSetBurnerBaseQuantities.ObjectType = \"IfcBurner,IfcBurnerType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_BurnerBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBurnerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_BurnerBaseQuantities\"))\r\n         {\r\n            qtoSetBurnerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcBurner);\r\n            qtoSetBurnerBaseQuantities.ObjectType = \"IfcBurner\";\r\n            ifcPSE = new QuantityEntry(\"Qto_BurnerBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetBurnerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetBurnerBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_CableCarrierFittingBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetCableCarrierFittingBaseQuantities = new QuantityDescription();\r\n         qtoSetCableCarrierFittingBaseQuantities.Name = \"Qto_CableCarrierFittingBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CableCarrierFittingBaseQuantities\"))\r\n         {\r\n            qtoSetCableCarrierFittingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCableCarrierFitting);\r\n            qtoSetCableCarrierFittingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCableCarrierFittingType);\r\n            qtoSetCableCarrierFittingBaseQuantities.ObjectType = \"IfcCableCarrierFitting,IfcCableCarrierFittingType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CableCarrierFittingBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableCarrierFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CableCarrierFittingBaseQuantities\"))\r\n         {\r\n            qtoSetCableCarrierFittingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCableCarrierFitting);\r\n            qtoSetCableCarrierFittingBaseQuantities.ObjectType = \"IfcCableCarrierFitting\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CableCarrierFittingBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableCarrierFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetCableCarrierFittingBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_CableCarrierSegmentBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetCableCarrierSegmentBaseQuantities = new QuantityDescription();\r\n         qtoSetCableCarrierSegmentBaseQuantities.Name = \"Qto_CableCarrierSegmentBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CableCarrierSegmentBaseQuantities\"))\r\n         {\r\n            qtoSetCableCarrierSegmentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegment);\r\n            qtoSetCableCarrierSegmentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegmentType);\r\n            qtoSetCableCarrierSegmentBaseQuantities.ObjectType = \"IfcCableCarrierSegment,IfcCableCarrierSegmentType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CableCarrierSegmentBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableCarrierSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CableCarrierSegmentBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableCarrierSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CableCarrierSegmentBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableCarrierSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CableCarrierSegmentBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableCarrierSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CableCarrierSegmentBaseQuantities\"))\r\n         {\r\n            qtoSetCableCarrierSegmentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegment);\r\n            qtoSetCableCarrierSegmentBaseQuantities.ObjectType = \"IfcCableCarrierSegment\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CableCarrierSegmentBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableCarrierSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CableCarrierSegmentBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableCarrierSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CableCarrierSegmentBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cross Section Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableCarrierSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CableCarrierSegmentBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outer Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableCarrierSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetCableCarrierSegmentBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_CableFittingBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetCableFittingBaseQuantities = new QuantityDescription();\r\n         qtoSetCableFittingBaseQuantities.Name = \"Qto_CableFittingBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CableFittingBaseQuantities\"))\r\n         {\r\n            qtoSetCableFittingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCableFitting);\r\n            qtoSetCableFittingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCableFittingType);\r\n            qtoSetCableFittingBaseQuantities.ObjectType = \"IfcCableFitting,IfcCableFittingType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CableFittingBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CableFittingBaseQuantities\"))\r\n         {\r\n            qtoSetCableFittingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCableFitting);\r\n            qtoSetCableFittingBaseQuantities.ObjectType = \"IfcCableFitting\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CableFittingBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetCableFittingBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_CableSegmentBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetCableSegmentBaseQuantities = new QuantityDescription();\r\n         qtoSetCableSegmentBaseQuantities.Name = \"Qto_CableSegmentBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CableSegmentBaseQuantities\"))\r\n         {\r\n            qtoSetCableSegmentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            qtoSetCableSegmentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCableSegmentType);\r\n            qtoSetCableSegmentBaseQuantities.ObjectType = \"IfcCableSegment,IfcCableSegmentType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CableSegmentBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CableSegmentBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CableSegmentBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CableSegmentBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CableSegmentBaseQuantities\"))\r\n         {\r\n            qtoSetCableSegmentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCableSegment);\r\n            qtoSetCableSegmentBaseQuantities.ObjectType = \"IfcCableSegment\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CableSegmentBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CableSegmentBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CableSegmentBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cross Section Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CableSegmentBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outer Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCableSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetCableSegmentBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ChillerBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetChillerBaseQuantities = new QuantityDescription();\r\n         qtoSetChillerBaseQuantities.Name = \"Qto_ChillerBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ChillerBaseQuantities\"))\r\n         {\r\n            qtoSetChillerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcChiller);\r\n            qtoSetChillerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcChillerType);\r\n            qtoSetChillerBaseQuantities.ObjectType = \"IfcChiller,IfcChillerType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ChillerBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetChillerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ChillerBaseQuantities\"))\r\n         {\r\n            qtoSetChillerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcChiller);\r\n            qtoSetChillerBaseQuantities.ObjectType = \"IfcChiller\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ChillerBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetChillerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetChillerBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ChimneyBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetChimneyBaseQuantities = new QuantityDescription();\r\n         qtoSetChimneyBaseQuantities.Name = \"Qto_ChimneyBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ChimneyBaseQuantities\"))\r\n         {\r\n            qtoSetChimneyBaseQuantities.EntityTypes.Add(IFCEntityType.IfcChimney);\r\n            qtoSetChimneyBaseQuantities.EntityTypes.Add(IFCEntityType.IfcChimneyType);\r\n            qtoSetChimneyBaseQuantities.ObjectType = \"IfcChimney,IfcChimneyType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ChimneyBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetChimneyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ChimneyBaseQuantities\"))\r\n         {\r\n            qtoSetChimneyBaseQuantities.EntityTypes.Add(IFCEntityType.IfcChimney);\r\n            qtoSetChimneyBaseQuantities.ObjectType = \"IfcChimney\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ChimneyBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Länge\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetChimneyBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetChimneyBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_CoilBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetCoilBaseQuantities = new QuantityDescription();\r\n         qtoSetCoilBaseQuantities.Name = \"Qto_CoilBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CoilBaseQuantities\"))\r\n         {\r\n            qtoSetCoilBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCoil);\r\n            qtoSetCoilBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCoilType);\r\n            qtoSetCoilBaseQuantities.ObjectType = \"IfcCoil,IfcCoilType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CoilBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCoilBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CoilBaseQuantities\"))\r\n         {\r\n            qtoSetCoilBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCoil);\r\n            qtoSetCoilBaseQuantities.ObjectType = \"IfcCoil\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CoilBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCoilBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetCoilBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ColumnBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetColumnBaseQuantities = new QuantityDescription();\r\n         qtoSetColumnBaseQuantities.Name = \"Qto_ColumnBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ColumnBaseQuantities\"))\r\n         {\r\n            qtoSetColumnBaseQuantities.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            qtoSetColumnBaseQuantities.EntityTypes.Add(IFCEntityType.IfcColumnType);\r\n            qtoSetColumnBaseQuantities.ObjectType = \"IfcColumn,IfcColumnType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.GrossSurfaceArea\", \"GrossSurfaceArea\");\r\n            ifcPSE.PropertyName = \"GrossSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.NetSurfaceArea\", \"NetSurfaceArea\");\r\n            ifcPSE.PropertyName = \"NetSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ColumnBaseQuantities\"))\r\n         {\r\n            qtoSetColumnBaseQuantities.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            qtoSetColumnBaseQuantities.ObjectType = \"IfcColumn\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Länge\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Querschnittsfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cross Section Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"断面面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Mantelfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outer Surface Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"外表面面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.GrossSurfaceArea\", \"GrossSurfaceArea\");\r\n            ifcPSE.PropertyName = \"GrossSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Gesamtoberfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Surface Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"表面面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.NetSurfaceArea\", \"NetSurfaceArea\");\r\n            ifcPSE.PropertyName = \"NetSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettooberfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttovolumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Volume\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"体積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettovolumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Volume\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味体積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttogewicht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"重量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettogewicht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Weight\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味重量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ColumnBaseQuantities\"))\r\n         {\r\n            qtoSetColumnBaseQuantities.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.TotalSurfaceArea\", \"TotalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"TotalSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ColumnBaseQuantities\"))\r\n         {\r\n            qtoSetColumnBaseQuantities.Name = \"BaseQuantities\";\r\n\r\n            qtoSetColumnBaseQuantities.EntityTypes.Add(IFCEntityType.IfcColumn);\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.TotalSurfaceArea\", \"TotalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"TotalSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ColumnBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetColumnBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetColumnBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_CommunicationsApplianceBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetCommunicationsApplianceBaseQuantities = new QuantityDescription();\r\n         qtoSetCommunicationsApplianceBaseQuantities.Name = \"Qto_CommunicationsApplianceBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CommunicationsApplianceBaseQuantities\"))\r\n         {\r\n            qtoSetCommunicationsApplianceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            qtoSetCommunicationsApplianceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCommunicationsApplianceType);\r\n            qtoSetCommunicationsApplianceBaseQuantities.ObjectType = \"IfcCommunicationsAppliance,IfcCommunicationsApplianceType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CommunicationsApplianceBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCommunicationsApplianceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CommunicationsApplianceBaseQuantities\"))\r\n         {\r\n            qtoSetCommunicationsApplianceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCommunicationsAppliance);\r\n            qtoSetCommunicationsApplianceBaseQuantities.ObjectType = \"IfcCommunicationsAppliance\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CommunicationsApplianceBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCommunicationsApplianceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetCommunicationsApplianceBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_CompressorBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetCompressorBaseQuantities = new QuantityDescription();\r\n         qtoSetCompressorBaseQuantities.Name = \"Qto_CompressorBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CompressorBaseQuantities\"))\r\n         {\r\n            qtoSetCompressorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCompressor);\r\n            qtoSetCompressorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCompressorType);\r\n            qtoSetCompressorBaseQuantities.ObjectType = \"IfcCompressor,IfcCompressorType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CompressorBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCompressorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CompressorBaseQuantities\"))\r\n         {\r\n            qtoSetCompressorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCompressor);\r\n            qtoSetCompressorBaseQuantities.ObjectType = \"IfcCompressor\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CompressorBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCompressorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetCompressorBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_CondenserBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetCondenserBaseQuantities = new QuantityDescription();\r\n         qtoSetCondenserBaseQuantities.Name = \"Qto_CondenserBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CondenserBaseQuantities\"))\r\n         {\r\n            qtoSetCondenserBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCondenser);\r\n            qtoSetCondenserBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCondenserType);\r\n            qtoSetCondenserBaseQuantities.ObjectType = \"IfcCondenser,IfcCondenserType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CondenserBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCondenserBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CondenserBaseQuantities\"))\r\n         {\r\n            qtoSetCondenserBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCondenser);\r\n            qtoSetCondenserBaseQuantities.ObjectType = \"IfcCondenser\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CondenserBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCondenserBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetCondenserBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ConduitSegmentBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetConduitSegmentBaseQuantities = new QuantityDescription();\r\n         qtoSetConduitSegmentBaseQuantities.Name = \"Qto_ConduitSegmentBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ConduitSegmentBaseQuantities\"))\r\n         {\r\n            qtoSetConduitSegmentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegment);\r\n            qtoSetConduitSegmentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCableCarrierSegmentType);\r\n            qtoSetConduitSegmentBaseQuantities.ObjectType = \"IfcCableCarrierSegment\";\r\n            qtoSetConduitSegmentBaseQuantities.PredefinedType = \"CONDUITSEGMENT\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ConduitSegmentBaseQuantities.InnerDiameter\", \"InnerDiameter\");\r\n            ifcPSE.PropertyName = \"InnerDiameter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.InnerDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetConduitSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ConduitSegmentBaseQuantities.OuterDiameter\", \"OuterDiameter\");\r\n            ifcPSE.PropertyName = \"OuterDiameter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterDiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetConduitSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetConduitSegmentBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ConstructionEquipmentResourceBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetConstructionEquipmentResourceBaseQuantities = new QuantityDescription();\r\n         qtoSetConstructionEquipmentResourceBaseQuantities.Name = \"Qto_ConstructionEquipmentResourceBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ConstructionEquipmentResourceBaseQuantities\"))\r\n         {\r\n            qtoSetConstructionEquipmentResourceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcConstructionEquipmentResource);\r\n            qtoSetConstructionEquipmentResourceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcConstructionEquipmentResourceType);\r\n            qtoSetConstructionEquipmentResourceBaseQuantities.ObjectType = \"IfcConstructionEquipmentResource,IfcConstructionEquipmentResourceType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ConstructionEquipmentResourceBaseQuantities.UsageTime\", \"UsageTime\");\r\n            ifcPSE.PropertyName = \"UsageTime\";\r\n            ifcPSE.QuantityType = QuantityType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UsageTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetConstructionEquipmentResourceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ConstructionEquipmentResourceBaseQuantities.OperatingTime\", \"OperatingTime\");\r\n            ifcPSE.PropertyName = \"OperatingTime\";\r\n            ifcPSE.QuantityType = QuantityType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperatingTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetConstructionEquipmentResourceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ConstructionEquipmentResourceBaseQuantities\"))\r\n         {\r\n            qtoSetConstructionEquipmentResourceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcConstructionEquipmentResource);\r\n            qtoSetConstructionEquipmentResourceBaseQuantities.ObjectType = \"IfcConstructionEquipmentResource\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ConstructionEquipmentResourceBaseQuantities.UsageTime\", \"UsageTime\");\r\n            ifcPSE.PropertyName = \"UsageTime\";\r\n            ifcPSE.QuantityType = QuantityType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Usage Time\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UsageTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetConstructionEquipmentResourceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ConstructionEquipmentResourceBaseQuantities.OperatingTime\", \"OperatingTime\");\r\n            ifcPSE.PropertyName = \"OperatingTime\";\r\n            ifcPSE.QuantityType = QuantityType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Operating Time\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OperatingTimeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetConstructionEquipmentResourceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetConstructionEquipmentResourceBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ConstructionMaterialResourceBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetConstructionMaterialResourceBaseQuantities = new QuantityDescription();\r\n         qtoSetConstructionMaterialResourceBaseQuantities.Name = \"Qto_ConstructionMaterialResourceBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ConstructionMaterialResourceBaseQuantities\"))\r\n         {\r\n            qtoSetConstructionMaterialResourceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcConstructionMaterialResource);\r\n            qtoSetConstructionMaterialResourceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcConstructionMaterialResourceType);\r\n            qtoSetConstructionMaterialResourceBaseQuantities.ObjectType = \"IfcConstructionMaterialResource,IfcConstructionMaterialResourceType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ConstructionMaterialResourceBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetConstructionMaterialResourceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ConstructionMaterialResourceBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetConstructionMaterialResourceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ConstructionMaterialResourceBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetConstructionMaterialResourceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ConstructionMaterialResourceBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetConstructionMaterialResourceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ConstructionMaterialResourceBaseQuantities\"))\r\n         {\r\n            qtoSetConstructionMaterialResourceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcConstructionMaterialResource);\r\n            qtoSetConstructionMaterialResourceBaseQuantities.ObjectType = \"IfcConstructionMaterialResource\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ConstructionMaterialResourceBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetConstructionMaterialResourceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ConstructionMaterialResourceBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetConstructionMaterialResourceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ConstructionMaterialResourceBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetConstructionMaterialResourceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ConstructionMaterialResourceBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetConstructionMaterialResourceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetConstructionMaterialResourceBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ControllerBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetControllerBaseQuantities = new QuantityDescription();\r\n         qtoSetControllerBaseQuantities.Name = \"Qto_ControllerBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ControllerBaseQuantities\"))\r\n         {\r\n            qtoSetControllerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcController);\r\n            qtoSetControllerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcControllerType);\r\n            qtoSetControllerBaseQuantities.ObjectType = \"IfcController,IfcControllerType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ControllerBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetControllerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ControllerBaseQuantities\"))\r\n         {\r\n            qtoSetControllerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcController);\r\n            qtoSetControllerBaseQuantities.ObjectType = \"IfcController\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ControllerBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetControllerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetControllerBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_CooledBeamBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetCooledBeamBaseQuantities = new QuantityDescription();\r\n         qtoSetCooledBeamBaseQuantities.Name = \"Qto_CooledBeamBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CooledBeamBaseQuantities\"))\r\n         {\r\n            qtoSetCooledBeamBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCooledBeam);\r\n            qtoSetCooledBeamBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCooledBeamType);\r\n            qtoSetCooledBeamBaseQuantities.ObjectType = \"IfcCooledBeam,IfcCooledBeamType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CooledBeamBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCooledBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CooledBeamBaseQuantities\"))\r\n         {\r\n            qtoSetCooledBeamBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCooledBeam);\r\n            qtoSetCooledBeamBaseQuantities.ObjectType = \"IfcCooledBeam\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CooledBeamBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCooledBeamBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetCooledBeamBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_CoolingTowerBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetCoolingTowerBaseQuantities = new QuantityDescription();\r\n         qtoSetCoolingTowerBaseQuantities.Name = \"Qto_CoolingTowerBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CoolingTowerBaseQuantities\"))\r\n         {\r\n            qtoSetCoolingTowerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCoolingTower);\r\n            qtoSetCoolingTowerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCoolingTowerType);\r\n            qtoSetCoolingTowerBaseQuantities.ObjectType = \"IfcCoolingTower,IfcCoolingTowerType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CoolingTowerBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCoolingTowerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CoolingTowerBaseQuantities\"))\r\n         {\r\n            qtoSetCoolingTowerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCoolingTower);\r\n            qtoSetCoolingTowerBaseQuantities.ObjectType = \"IfcCoolingTower\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CoolingTowerBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCoolingTowerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetCoolingTowerBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_CourseBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetCourseBaseQuantities = new QuantityDescription();\r\n         qtoSetCourseBaseQuantities.Name = \"Qto_CourseBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CourseBaseQuantities\"))\r\n         {\r\n            qtoSetCourseBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCourse);\r\n            qtoSetCourseBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCourseType);\r\n            qtoSetCourseBaseQuantities.ObjectType = \"IfcCourse,IfcCourseType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CourseBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCourseBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CourseBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCourseBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CourseBaseQuantities.Thickness\", \"Thickness\");\r\n            ifcPSE.PropertyName = \"Thickness\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCourseBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CourseBaseQuantities.Volume\", \"Volume\");\r\n            ifcPSE.PropertyName = \"Volume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCourseBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CourseBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCourseBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CourseBaseQuantities.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCourseBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetCourseBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_CoveringBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetCoveringBaseQuantities = new QuantityDescription();\r\n         qtoSetCoveringBaseQuantities.Name = \"Qto_CoveringBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CoveringBaseQuantities\"))\r\n         {\r\n            qtoSetCoveringBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            qtoSetCoveringBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCoveringType);\r\n            qtoSetCoveringBaseQuantities.ObjectType = \"IfcCovering,IfcCoveringType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CoveringBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCoveringBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CoveringBaseQuantities.GrossArea\", \"GrossArea\");\r\n            ifcPSE.PropertyName = \"GrossArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCoveringBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CoveringBaseQuantities.NetArea\", \"NetArea\");\r\n            ifcPSE.PropertyName = \"NetArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCoveringBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CoveringBaseQuantities\"))\r\n         {\r\n            qtoSetCoveringBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            qtoSetCoveringBaseQuantities.ObjectType = \"IfcCovering\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CoveringBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Dicke\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCoveringBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CoveringBaseQuantities.GrossArea\", \"GrossArea\");\r\n            ifcPSE.PropertyName = \"GrossArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttofläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCoveringBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CoveringBaseQuantities.NetArea\", \"NetArea\");\r\n            ifcPSE.PropertyName = \"NetArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettofläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCoveringBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CoveringBaseQuantities\"))\r\n         {\r\n            qtoSetCoveringBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            ifcPSE = new QuantityEntry(\"Qto_CoveringBaseQuantities.CoveredArea\", \"CoveredArea\");\r\n            ifcPSE.PropertyName = \"CoveredArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CoveredAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCoveringBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CoveringBaseQuantities\"))\r\n         {\r\n            qtoSetCoveringBaseQuantities.Name = \"BaseQuantities\";\r\n\r\n            qtoSetCoveringBaseQuantities.EntityTypes.Add(IFCEntityType.IfcCovering);\r\n            ifcPSE = new QuantityEntry(\"Qto_CoveringBaseQuantities.GrossArea\", \"GrossArea\");\r\n            ifcPSE.PropertyName = \"GrossArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCoveringBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CoveringBaseQuantities.NetArea\", \"NetArea\");\r\n            ifcPSE.PropertyName = \"NetArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCoveringBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetCoveringBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_CurtainWallQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetCurtainWallQuantities = new QuantityDescription();\r\n         qtoSetCurtainWallQuantities.Name = \"Qto_CurtainWallQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CurtainWallQuantities\"))\r\n         {\r\n            qtoSetCurtainWallQuantities.EntityTypes.Add(IFCEntityType.IfcCurtainWall);\r\n            qtoSetCurtainWallQuantities.EntityTypes.Add(IFCEntityType.IfcCurtainWallType);\r\n            qtoSetCurtainWallQuantities.ObjectType = \"IfcCurtainWall,IfcCurtainWallType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CurtainWallQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCurtainWallQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CurtainWallQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCurtainWallQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CurtainWallQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCurtainWallQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CurtainWallQuantities.GrossSideArea\", \"GrossSideArea\");\r\n            ifcPSE.PropertyName = \"GrossSideArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSideAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCurtainWallQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CurtainWallQuantities.NetSideArea\", \"NetSideArea\");\r\n            ifcPSE.PropertyName = \"NetSideArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSideAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCurtainWallQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_CurtainWallQuantities\"))\r\n         {\r\n            qtoSetCurtainWallQuantities.EntityTypes.Add(IFCEntityType.IfcCurtainWall);\r\n            qtoSetCurtainWallQuantities.ObjectType = \"IfcCurtainWall\";\r\n            ifcPSE = new QuantityEntry(\"Qto_CurtainWallQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Länge\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCurtainWallQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CurtainWallQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Höhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"高さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCurtainWallQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CurtainWallQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Dicke\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCurtainWallQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CurtainWallQuantities.GrossSideArea\", \"GrossSideArea\");\r\n            ifcPSE.PropertyName = \"GrossSideArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttofläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Side Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"側面面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSideAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCurtainWallQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_CurtainWallQuantities.NetSideArea\", \"NetSideArea\");\r\n            ifcPSE.PropertyName = \"NetSideArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettofläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Side Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味側面面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSideAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetCurtainWallQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetCurtainWallQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_DamperBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetDamperBaseQuantities = new QuantityDescription();\r\n         qtoSetDamperBaseQuantities.Name = \"Qto_DamperBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_DamperBaseQuantities\"))\r\n         {\r\n            qtoSetDamperBaseQuantities.EntityTypes.Add(IFCEntityType.IfcDamper);\r\n            qtoSetDamperBaseQuantities.EntityTypes.Add(IFCEntityType.IfcDamperType);\r\n            qtoSetDamperBaseQuantities.ObjectType = \"IfcDamper,IfcDamperType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_DamperBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDamperBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_DamperBaseQuantities\"))\r\n         {\r\n            qtoSetDamperBaseQuantities.EntityTypes.Add(IFCEntityType.IfcDamper);\r\n            qtoSetDamperBaseQuantities.ObjectType = \"IfcDamper\";\r\n            ifcPSE = new QuantityEntry(\"Qto_DamperBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDamperBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetDamperBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_DistributionBoardBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetDistributionBoardBaseQuantities = new QuantityDescription();\r\n         qtoSetDistributionBoardBaseQuantities.Name = \"Qto_DistributionBoardBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_DistributionBoardBaseQuantities\"))\r\n         {\r\n            qtoSetDistributionBoardBaseQuantities.EntityTypes.Add(IFCEntityType.IfcElectricDistributionBoard);\r\n            qtoSetDistributionBoardBaseQuantities.EntityTypes.Add(IFCEntityType.IfcElectricDistributionBoardType);\r\n            qtoSetDistributionBoardBaseQuantities.ObjectType = \"IfcElectricDistributionBoard,IfcElectricDistributionBoardType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_DistributionBoardBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDistributionBoardBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DistributionBoardBaseQuantities.NumberOfCircuits\", \"NumberOfCircuits\");\r\n            ifcPSE.PropertyName = \"NumberOfCircuits\";\r\n            ifcPSE.QuantityType = QuantityType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCircuitsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDistributionBoardBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetDistributionBoardBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_DistributionChamberElementBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetDistributionChamberElementBaseQuantities = new QuantityDescription();\r\n         qtoSetDistributionChamberElementBaseQuantities.Name = \"Qto_DistributionChamberElementBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_DistributionChamberElementBaseQuantities\"))\r\n         {\r\n            qtoSetDistributionChamberElementBaseQuantities.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            qtoSetDistributionChamberElementBaseQuantities.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElementType);\r\n            qtoSetDistributionChamberElementBaseQuantities.ObjectType = \"IfcDistributionChamberElement,IfcDistributionChamberElementType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_DistributionChamberElementBaseQuantities.GrossSurfaceArea\", \"GrossSurfaceArea\");\r\n            ifcPSE.PropertyName = \"GrossSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDistributionChamberElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DistributionChamberElementBaseQuantities.NetSurfaceArea\", \"NetSurfaceArea\");\r\n            ifcPSE.PropertyName = \"NetSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDistributionChamberElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DistributionChamberElementBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDistributionChamberElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DistributionChamberElementBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDistributionChamberElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DistributionChamberElementBaseQuantities.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDistributionChamberElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_DistributionChamberElementBaseQuantities\"))\r\n         {\r\n            qtoSetDistributionChamberElementBaseQuantities.EntityTypes.Add(IFCEntityType.IfcDistributionChamberElement);\r\n            qtoSetDistributionChamberElementBaseQuantities.ObjectType = \"IfcDistributionChamberElement\";\r\n            ifcPSE = new QuantityEntry(\"Qto_DistributionChamberElementBaseQuantities.GrossSurfaceArea\", \"GrossSurfaceArea\");\r\n            ifcPSE.PropertyName = \"GrossSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDistributionChamberElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DistributionChamberElementBaseQuantities.NetSurfaceArea\", \"NetSurfaceArea\");\r\n            ifcPSE.PropertyName = \"NetSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDistributionChamberElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DistributionChamberElementBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDistributionChamberElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DistributionChamberElementBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDistributionChamberElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetDistributionChamberElementBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_DoorBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetDoorBaseQuantities = new QuantityDescription();\r\n         qtoSetDoorBaseQuantities.Name = \"Qto_DoorBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_DoorBaseQuantities\"))\r\n         {\r\n            qtoSetDoorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            qtoSetDoorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcDoorType);\r\n            qtoSetDoorBaseQuantities.ObjectType = \"IfcDoor,IfcDoorType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_DoorBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDoorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DoorBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDoorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DoorBaseQuantities.Perimeter\", \"Perimeter\");\r\n            ifcPSE.PropertyName = \"Perimeter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDoorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DoorBaseQuantities.Area\", \"Area\");\r\n            ifcPSE.PropertyName = \"Area\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDoorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_DoorBaseQuantities\"))\r\n         {\r\n            qtoSetDoorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcDoor);\r\n            qtoSetDoorBaseQuantities.ObjectType = \"IfcDoor\";\r\n            ifcPSE = new QuantityEntry(\"Qto_DoorBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Breite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDoorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DoorBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Höhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"高さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDoorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DoorBaseQuantities.Perimeter\", \"Perimeter\");\r\n            ifcPSE.PropertyName = \"Perimeter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Umfang\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Perimeter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"周囲長\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDoorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DoorBaseQuantities.Area\", \"Area\");\r\n            ifcPSE.PropertyName = \"Area\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Fläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDoorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetDoorBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_DuctFittingBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetDuctFittingBaseQuantities = new QuantityDescription();\r\n         qtoSetDuctFittingBaseQuantities.Name = \"Qto_DuctFittingBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_DuctFittingBaseQuantities\"))\r\n         {\r\n            qtoSetDuctFittingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcDuctFitting);\r\n            qtoSetDuctFittingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcDuctFittingType);\r\n            qtoSetDuctFittingBaseQuantities.ObjectType = \"IfcDuctFitting,IfcDuctFittingType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctFittingBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctFittingBaseQuantities.GrossCrossSectionArea\", \"GrossCrossSectionArea\");\r\n            ifcPSE.PropertyName = \"GrossCrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossCrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctFittingBaseQuantities.NetCrossSectionArea\", \"NetCrossSectionArea\");\r\n            ifcPSE.PropertyName = \"NetCrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetCrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctFittingBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctFittingBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_DuctFittingBaseQuantities\"))\r\n         {\r\n            qtoSetDuctFittingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcDuctFitting);\r\n            qtoSetDuctFittingBaseQuantities.ObjectType = \"IfcDuctFitting\";\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctFittingBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctFittingBaseQuantities.GrossCrossSectionArea\", \"GrossCrossSectionArea\");\r\n            ifcPSE.PropertyName = \"GrossCrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Cross Section Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossCrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctFittingBaseQuantities.NetCrossSectionArea\", \"NetCrossSectionArea\");\r\n            ifcPSE.PropertyName = \"NetCrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Cross Section Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetCrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctFittingBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outer Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctFittingBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetDuctFittingBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_DuctSegmentBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetDuctSegmentBaseQuantities = new QuantityDescription();\r\n         qtoSetDuctSegmentBaseQuantities.Name = \"Qto_DuctSegmentBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_DuctSegmentBaseQuantities\"))\r\n         {\r\n            qtoSetDuctSegmentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcDuctSegment);\r\n            qtoSetDuctSegmentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcDuctSegmentType);\r\n            qtoSetDuctSegmentBaseQuantities.ObjectType = \"IfcDuctSegment,IfcDuctSegmentType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctSegmentBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctSegmentBaseQuantities.GrossCrossSectionArea\", \"GrossCrossSectionArea\");\r\n            ifcPSE.PropertyName = \"GrossCrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossCrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctSegmentBaseQuantities.NetCrossSectionArea\", \"NetCrossSectionArea\");\r\n            ifcPSE.PropertyName = \"NetCrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetCrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctSegmentBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctSegmentBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_DuctSegmentBaseQuantities\"))\r\n         {\r\n            qtoSetDuctSegmentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcDuctSegment);\r\n            qtoSetDuctSegmentBaseQuantities.ObjectType = \"IfcDuctSegment\";\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctSegmentBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctSegmentBaseQuantities.GrossCrossSectionArea\", \"GrossCrossSectionArea\");\r\n            ifcPSE.PropertyName = \"GrossCrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Cross Section Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossCrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctSegmentBaseQuantities.NetCrossSectionArea\", \"NetCrossSectionArea\");\r\n            ifcPSE.PropertyName = \"NetCrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Cross Section Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetCrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctSegmentBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outer Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctSegmentBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetDuctSegmentBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_DuctSilencerBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetDuctSilencerBaseQuantities = new QuantityDescription();\r\n         qtoSetDuctSilencerBaseQuantities.Name = \"Qto_DuctSilencerBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_DuctSilencerBaseQuantities\"))\r\n         {\r\n            qtoSetDuctSilencerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcDuctSilencer);\r\n            qtoSetDuctSilencerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcDuctSilencerType);\r\n            qtoSetDuctSilencerBaseQuantities.ObjectType = \"IfcDuctSilencer,IfcDuctSilencerType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctSilencerBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctSilencerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_DuctSilencerBaseQuantities\"))\r\n         {\r\n            qtoSetDuctSilencerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcDuctSilencer);\r\n            qtoSetDuctSilencerBaseQuantities.ObjectType = \"IfcDuctSilencer\";\r\n            ifcPSE = new QuantityEntry(\"Qto_DuctSilencerBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetDuctSilencerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetDuctSilencerBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_EarthworksCutBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetEarthworksCutBaseQuantities = new QuantityDescription();\r\n         qtoSetEarthworksCutBaseQuantities.Name = \"Qto_EarthworksCutBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_EarthworksCutBaseQuantities\"))\r\n         {\r\n            qtoSetEarthworksCutBaseQuantities.EntityTypes.Add(IFCEntityType.IfcEarthworksCut);\r\n            qtoSetEarthworksCutBaseQuantities.ObjectType = \"IfcEarthworksCut\";\r\n            ifcPSE = new QuantityEntry(\"Qto_EarthworksCutBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetEarthworksCutBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_EarthworksCutBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetEarthworksCutBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_EarthworksCutBaseQuantities.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetEarthworksCutBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_EarthworksCutBaseQuantities.UndisturbedVolume\", \"UndisturbedVolume\");\r\n            ifcPSE.PropertyName = \"UndisturbedVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.UndisturbedVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetEarthworksCutBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_EarthworksCutBaseQuantities.LooseVolume\", \"LooseVolume\");\r\n            ifcPSE.PropertyName = \"LooseVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LooseVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetEarthworksCutBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_EarthworksCutBaseQuantities.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetEarthworksCutBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetEarthworksCutBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_EarthworksFillBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetEarthworksFillBaseQuantities = new QuantityDescription();\r\n         qtoSetEarthworksFillBaseQuantities.Name = \"Qto_EarthworksFillBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_EarthworksFillBaseQuantities\"))\r\n         {\r\n            qtoSetEarthworksFillBaseQuantities.EntityTypes.Add(IFCEntityType.IfcEarthworksFill);\r\n            qtoSetEarthworksFillBaseQuantities.ObjectType = \"IfcEarthworksFill\";\r\n            ifcPSE = new QuantityEntry(\"Qto_EarthworksFillBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetEarthworksFillBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_EarthworksFillBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetEarthworksFillBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_EarthworksFillBaseQuantities.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetEarthworksFillBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_EarthworksFillBaseQuantities.CompactedVolume\", \"CompactedVolume\");\r\n            ifcPSE.PropertyName = \"CompactedVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CompactedVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetEarthworksFillBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_EarthworksFillBaseQuantities.LooseVolume\", \"LooseVolume\");\r\n            ifcPSE.PropertyName = \"LooseVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LooseVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetEarthworksFillBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetEarthworksFillBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ElectricApplianceBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetElectricApplianceBaseQuantities = new QuantityDescription();\r\n         qtoSetElectricApplianceBaseQuantities.Name = \"Qto_ElectricApplianceBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ElectricApplianceBaseQuantities\"))\r\n         {\r\n            qtoSetElectricApplianceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcElectricAppliance);\r\n            qtoSetElectricApplianceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcElectricApplianceType);\r\n            qtoSetElectricApplianceBaseQuantities.ObjectType = \"IfcElectricAppliance,IfcElectricApplianceType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ElectricApplianceBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetElectricApplianceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ElectricApplianceBaseQuantities\"))\r\n         {\r\n            qtoSetElectricApplianceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcElectricAppliance);\r\n            qtoSetElectricApplianceBaseQuantities.ObjectType = \"IfcElectricAppliance\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ElectricApplianceBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetElectricApplianceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetElectricApplianceBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ElectricDistributionBoardBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetElectricDistributionBoardBaseQuantities = new QuantityDescription();\r\n         qtoSetElectricDistributionBoardBaseQuantities.Name = \"Qto_ElectricDistributionBoardBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ElectricDistributionBoardBaseQuantities\"))\r\n         {\r\n            qtoSetElectricDistributionBoardBaseQuantities.EntityTypes.Add(IFCEntityType.IfcElectricDistributionBoard);\r\n            qtoSetElectricDistributionBoardBaseQuantities.ObjectType = \"IfcElectricDistributionBoard\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ElectricDistributionBoardBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetElectricDistributionBoardBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ElectricDistributionBoardBaseQuantities.NumberOfCircuits\", \"NumberOfCircuits\");\r\n            ifcPSE.PropertyName = \"NumberOfCircuits\";\r\n            ifcPSE.QuantityType = QuantityType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Circuits\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfCircuitsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetElectricDistributionBoardBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetElectricDistributionBoardBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ElectricFlowStorageDeviceBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetElectricFlowStorageDeviceBaseQuantities = new QuantityDescription();\r\n         qtoSetElectricFlowStorageDeviceBaseQuantities.Name = \"Qto_ElectricFlowStorageDeviceBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ElectricFlowStorageDeviceBaseQuantities\"))\r\n         {\r\n            qtoSetElectricFlowStorageDeviceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcElectricFlowStorageDevice);\r\n            qtoSetElectricFlowStorageDeviceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcElectricFlowStorageDeviceType);\r\n            qtoSetElectricFlowStorageDeviceBaseQuantities.ObjectType = \"IfcElectricFlowStorageDevice,IfcElectricFlowStorageDeviceType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ElectricFlowStorageDeviceBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetElectricFlowStorageDeviceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ElectricFlowStorageDeviceBaseQuantities\"))\r\n         {\r\n            qtoSetElectricFlowStorageDeviceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcElectricFlowStorageDevice);\r\n            qtoSetElectricFlowStorageDeviceBaseQuantities.ObjectType = \"IfcElectricFlowStorageDevice\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ElectricFlowStorageDeviceBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetElectricFlowStorageDeviceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetElectricFlowStorageDeviceBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ElectricGeneratorBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetElectricGeneratorBaseQuantities = new QuantityDescription();\r\n         qtoSetElectricGeneratorBaseQuantities.Name = \"Qto_ElectricGeneratorBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ElectricGeneratorBaseQuantities\"))\r\n         {\r\n            qtoSetElectricGeneratorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcElectricGenerator);\r\n            qtoSetElectricGeneratorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcElectricGeneratorType);\r\n            qtoSetElectricGeneratorBaseQuantities.ObjectType = \"IfcElectricGenerator,IfcElectricGeneratorType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ElectricGeneratorBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetElectricGeneratorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ElectricGeneratorBaseQuantities\"))\r\n         {\r\n            qtoSetElectricGeneratorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcElectricGenerator);\r\n            qtoSetElectricGeneratorBaseQuantities.ObjectType = \"IfcElectricGenerator\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ElectricGeneratorBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetElectricGeneratorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetElectricGeneratorBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ElectricMotorBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetElectricMotorBaseQuantities = new QuantityDescription();\r\n         qtoSetElectricMotorBaseQuantities.Name = \"Qto_ElectricMotorBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ElectricMotorBaseQuantities\"))\r\n         {\r\n            qtoSetElectricMotorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcElectricMotor);\r\n            qtoSetElectricMotorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcElectricMotorType);\r\n            qtoSetElectricMotorBaseQuantities.ObjectType = \"IfcElectricMotor,IfcElectricMotorType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ElectricMotorBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetElectricMotorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ElectricMotorBaseQuantities\"))\r\n         {\r\n            qtoSetElectricMotorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcElectricMotor);\r\n            qtoSetElectricMotorBaseQuantities.ObjectType = \"IfcElectricMotor\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ElectricMotorBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetElectricMotorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetElectricMotorBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ElectricTimeControlBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetElectricTimeControlBaseQuantities = new QuantityDescription();\r\n         qtoSetElectricTimeControlBaseQuantities.Name = \"Qto_ElectricTimeControlBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ElectricTimeControlBaseQuantities\"))\r\n         {\r\n            qtoSetElectricTimeControlBaseQuantities.EntityTypes.Add(IFCEntityType.IfcElectricTimeControl);\r\n            qtoSetElectricTimeControlBaseQuantities.EntityTypes.Add(IFCEntityType.IfcElectricTimeControlType);\r\n            qtoSetElectricTimeControlBaseQuantities.ObjectType = \"IfcElectricTimeControl,IfcElectricTimeControlType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ElectricTimeControlBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetElectricTimeControlBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ElectricTimeControlBaseQuantities\"))\r\n         {\r\n            qtoSetElectricTimeControlBaseQuantities.EntityTypes.Add(IFCEntityType.IfcElectricTimeControl);\r\n            qtoSetElectricTimeControlBaseQuantities.ObjectType = \"IfcElectricTimeControl\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ElectricTimeControlBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetElectricTimeControlBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetElectricTimeControlBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_EvaporativeCoolerBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetEvaporativeCoolerBaseQuantities = new QuantityDescription();\r\n         qtoSetEvaporativeCoolerBaseQuantities.Name = \"Qto_EvaporativeCoolerBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_EvaporativeCoolerBaseQuantities\"))\r\n         {\r\n            qtoSetEvaporativeCoolerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcEvaporativeCooler);\r\n            qtoSetEvaporativeCoolerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcEvaporativeCoolerType);\r\n            qtoSetEvaporativeCoolerBaseQuantities.ObjectType = \"IfcEvaporativeCooler,IfcEvaporativeCoolerType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_EvaporativeCoolerBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetEvaporativeCoolerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_EvaporativeCoolerBaseQuantities\"))\r\n         {\r\n            qtoSetEvaporativeCoolerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcEvaporativeCooler);\r\n            qtoSetEvaporativeCoolerBaseQuantities.ObjectType = \"IfcEvaporativeCooler\";\r\n            ifcPSE = new QuantityEntry(\"Qto_EvaporativeCoolerBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetEvaporativeCoolerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetEvaporativeCoolerBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_EvaporatorBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetEvaporatorBaseQuantities = new QuantityDescription();\r\n         qtoSetEvaporatorBaseQuantities.Name = \"Qto_EvaporatorBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_EvaporatorBaseQuantities\"))\r\n         {\r\n            qtoSetEvaporatorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcEvaporator);\r\n            qtoSetEvaporatorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcEvaporatorType);\r\n            qtoSetEvaporatorBaseQuantities.ObjectType = \"IfcEvaporator,IfcEvaporatorType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_EvaporatorBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetEvaporatorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_EvaporatorBaseQuantities\"))\r\n         {\r\n            qtoSetEvaporatorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcEvaporator);\r\n            qtoSetEvaporatorBaseQuantities.ObjectType = \"IfcEvaporator\";\r\n            ifcPSE = new QuantityEntry(\"Qto_EvaporatorBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetEvaporatorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetEvaporatorBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_FacilityPartBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetFacilityPartBaseQuantities = new QuantityDescription();\r\n         qtoSetFacilityPartBaseQuantities.Name = \"Qto_FacilityPartBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_FacilityPartBaseQuantities\"))\r\n         {\r\n            qtoSetFacilityPartBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFacilityPart);\r\n            qtoSetFacilityPartBaseQuantities.ObjectType = \"IfcFacilityPart\";\r\n            ifcPSE = new QuantityEntry(\"Qto_FacilityPartBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFacilityPartBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FacilityPartBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFacilityPartBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FacilityPartBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFacilityPartBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FacilityPartBaseQuantities.Area\", \"Area\");\r\n            ifcPSE.PropertyName = \"Area\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFacilityPartBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FacilityPartBaseQuantities.Volume\", \"Volume\");\r\n            ifcPSE.PropertyName = \"Volume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFacilityPartBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetFacilityPartBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_FanBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetFanBaseQuantities = new QuantityDescription();\r\n         qtoSetFanBaseQuantities.Name = \"Qto_FanBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_FanBaseQuantities\"))\r\n         {\r\n            qtoSetFanBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFan);\r\n            qtoSetFanBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFanType);\r\n            qtoSetFanBaseQuantities.ObjectType = \"IfcFan,IfcFanType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_FanBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFanBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_FanBaseQuantities\"))\r\n         {\r\n            qtoSetFanBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFan);\r\n            qtoSetFanBaseQuantities.ObjectType = \"IfcFan\";\r\n            ifcPSE = new QuantityEntry(\"Qto_FanBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFanBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetFanBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_FilterBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetFilterBaseQuantities = new QuantityDescription();\r\n         qtoSetFilterBaseQuantities.Name = \"Qto_FilterBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_FilterBaseQuantities\"))\r\n         {\r\n            qtoSetFilterBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFilter);\r\n            qtoSetFilterBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFilterType);\r\n            qtoSetFilterBaseQuantities.ObjectType = \"IfcFilter,IfcFilterType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_FilterBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFilterBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_FilterBaseQuantities\"))\r\n         {\r\n            qtoSetFilterBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFilter);\r\n            qtoSetFilterBaseQuantities.ObjectType = \"IfcFilter\";\r\n            ifcPSE = new QuantityEntry(\"Qto_FilterBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFilterBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetFilterBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_FireSuppressionTerminalBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetFireSuppressionTerminalBaseQuantities = new QuantityDescription();\r\n         qtoSetFireSuppressionTerminalBaseQuantities.Name = \"Qto_FireSuppressionTerminalBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_FireSuppressionTerminalBaseQuantities\"))\r\n         {\r\n            qtoSetFireSuppressionTerminalBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminal);\r\n            qtoSetFireSuppressionTerminalBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminalType);\r\n            qtoSetFireSuppressionTerminalBaseQuantities.ObjectType = \"IfcFireSuppressionTerminal,IfcFireSuppressionTerminalType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_FireSuppressionTerminalBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFireSuppressionTerminalBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_FireSuppressionTerminalBaseQuantities\"))\r\n         {\r\n            qtoSetFireSuppressionTerminalBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFireSuppressionTerminal);\r\n            qtoSetFireSuppressionTerminalBaseQuantities.ObjectType = \"IfcFireSuppressionTerminal\";\r\n            ifcPSE = new QuantityEntry(\"Qto_FireSuppressionTerminalBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFireSuppressionTerminalBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetFireSuppressionTerminalBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_FlowInstrumentBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetFlowInstrumentBaseQuantities = new QuantityDescription();\r\n         qtoSetFlowInstrumentBaseQuantities.Name = \"Qto_FlowInstrumentBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_FlowInstrumentBaseQuantities\"))\r\n         {\r\n            qtoSetFlowInstrumentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFlowInstrument);\r\n            qtoSetFlowInstrumentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFlowInstrumentType);\r\n            qtoSetFlowInstrumentBaseQuantities.ObjectType = \"IfcFlowInstrument,IfcFlowInstrumentType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_FlowInstrumentBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFlowInstrumentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_FlowInstrumentBaseQuantities\"))\r\n         {\r\n            qtoSetFlowInstrumentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFlowInstrument);\r\n            qtoSetFlowInstrumentBaseQuantities.ObjectType = \"IfcFlowInstrument\";\r\n            ifcPSE = new QuantityEntry(\"Qto_FlowInstrumentBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFlowInstrumentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetFlowInstrumentBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_FlowMeterBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetFlowMeterBaseQuantities = new QuantityDescription();\r\n         qtoSetFlowMeterBaseQuantities.Name = \"Qto_FlowMeterBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_FlowMeterBaseQuantities\"))\r\n         {\r\n            qtoSetFlowMeterBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFlowMeter);\r\n            qtoSetFlowMeterBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFlowMeterType);\r\n            qtoSetFlowMeterBaseQuantities.ObjectType = \"IfcFlowMeter,IfcFlowMeterType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_FlowMeterBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFlowMeterBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_FlowMeterBaseQuantities\"))\r\n         {\r\n            qtoSetFlowMeterBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFlowMeter);\r\n            qtoSetFlowMeterBaseQuantities.ObjectType = \"IfcFlowMeter\";\r\n            ifcPSE = new QuantityEntry(\"Qto_FlowMeterBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFlowMeterBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetFlowMeterBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_FootingBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetFootingBaseQuantities = new QuantityDescription();\r\n         qtoSetFootingBaseQuantities.Name = \"Qto_FootingBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_FootingBaseQuantities\"))\r\n         {\r\n            qtoSetFootingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            qtoSetFootingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFootingType);\r\n            qtoSetFootingBaseQuantities.ObjectType = \"IfcFooting,IfcFootingType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.GrossSurfaceArea\", \"GrossSurfaceArea\");\r\n            ifcPSE.PropertyName = \"GrossSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_FootingBaseQuantities\"))\r\n         {\r\n            qtoSetFootingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcFooting);\r\n            qtoSetFootingBaseQuantities.ObjectType = \"IfcFooting\";\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Länge\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Dicke\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Width\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Höhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Height\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cross Section Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outer Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.GrossSurfaceArea\", \"GrossSurfaceArea\");\r\n            ifcPSE.PropertyName = \"GrossSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_FootingBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetFootingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetFootingBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_HeatExchangerBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetHeatExchangerBaseQuantities = new QuantityDescription();\r\n         qtoSetHeatExchangerBaseQuantities.Name = \"Qto_HeatExchangerBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_HeatExchangerBaseQuantities\"))\r\n         {\r\n            qtoSetHeatExchangerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcHeatExchanger);\r\n            qtoSetHeatExchangerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcHeatExchangerType);\r\n            qtoSetHeatExchangerBaseQuantities.ObjectType = \"IfcHeatExchanger,IfcHeatExchangerType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_HeatExchangerBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetHeatExchangerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_HeatExchangerBaseQuantities\"))\r\n         {\r\n            qtoSetHeatExchangerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcHeatExchanger);\r\n            qtoSetHeatExchangerBaseQuantities.ObjectType = \"IfcHeatExchanger\";\r\n            ifcPSE = new QuantityEntry(\"Qto_HeatExchangerBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetHeatExchangerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetHeatExchangerBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_HumidifierBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetHumidifierBaseQuantities = new QuantityDescription();\r\n         qtoSetHumidifierBaseQuantities.Name = \"Qto_HumidifierBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_HumidifierBaseQuantities\"))\r\n         {\r\n            qtoSetHumidifierBaseQuantities.EntityTypes.Add(IFCEntityType.IfcHumidifier);\r\n            qtoSetHumidifierBaseQuantities.EntityTypes.Add(IFCEntityType.IfcHumidifierType);\r\n            qtoSetHumidifierBaseQuantities.ObjectType = \"IfcHumidifier,IfcHumidifierType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_HumidifierBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetHumidifierBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_HumidifierBaseQuantities\"))\r\n         {\r\n            qtoSetHumidifierBaseQuantities.EntityTypes.Add(IFCEntityType.IfcHumidifier);\r\n            qtoSetHumidifierBaseQuantities.ObjectType = \"IfcHumidifier\";\r\n            ifcPSE = new QuantityEntry(\"Qto_HumidifierBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetHumidifierBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetHumidifierBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ImpactProtectionDeviceBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetImpactProtectionDeviceBaseQuantities = new QuantityDescription();\r\n         qtoSetImpactProtectionDeviceBaseQuantities.Name = \"Qto_ImpactProtectionDeviceBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ImpactProtectionDeviceBaseQuantities\"))\r\n         {\r\n            qtoSetImpactProtectionDeviceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcImpactProtectionDevice);\r\n            qtoSetImpactProtectionDeviceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcImpactProtectionDeviceType);\r\n            qtoSetImpactProtectionDeviceBaseQuantities.ObjectType = \"IfcImpactProtectionDevice,IfcImpactProtectionDeviceType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ImpactProtectionDeviceBaseQuantities.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetImpactProtectionDeviceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetImpactProtectionDeviceBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_InterceptorBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetInterceptorBaseQuantities = new QuantityDescription();\r\n         qtoSetInterceptorBaseQuantities.Name = \"Qto_InterceptorBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_InterceptorBaseQuantities\"))\r\n         {\r\n            qtoSetInterceptorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcInterceptor);\r\n            qtoSetInterceptorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcInterceptorType);\r\n            qtoSetInterceptorBaseQuantities.ObjectType = \"IfcInterceptor,IfcInterceptorType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_InterceptorBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetInterceptorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_InterceptorBaseQuantities\"))\r\n         {\r\n            qtoSetInterceptorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcInterceptor);\r\n            qtoSetInterceptorBaseQuantities.ObjectType = \"IfcInterceptor\";\r\n            ifcPSE = new QuantityEntry(\"Qto_InterceptorBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetInterceptorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetInterceptorBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_JunctionBoxBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetJunctionBoxBaseQuantities = new QuantityDescription();\r\n         qtoSetJunctionBoxBaseQuantities.Name = \"Qto_JunctionBoxBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_JunctionBoxBaseQuantities\"))\r\n         {\r\n            qtoSetJunctionBoxBaseQuantities.EntityTypes.Add(IFCEntityType.IfcJunctionBox);\r\n            qtoSetJunctionBoxBaseQuantities.EntityTypes.Add(IFCEntityType.IfcJunctionBoxType);\r\n            qtoSetJunctionBoxBaseQuantities.ObjectType = \"IfcJunctionBox,IfcJunctionBoxType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_JunctionBoxBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetJunctionBoxBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_JunctionBoxBaseQuantities.NumberOfGangs\", \"NumberOfGangs\");\r\n            ifcPSE.PropertyName = \"NumberOfGangs\";\r\n            ifcPSE.QuantityType = QuantityType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfGangsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetJunctionBoxBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_JunctionBoxBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetJunctionBoxBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_JunctionBoxBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetJunctionBoxBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_JunctionBoxBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetJunctionBoxBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_JunctionBoxBaseQuantities\"))\r\n         {\r\n            qtoSetJunctionBoxBaseQuantities.EntityTypes.Add(IFCEntityType.IfcJunctionBox);\r\n            qtoSetJunctionBoxBaseQuantities.ObjectType = \"IfcJunctionBox\";\r\n            ifcPSE = new QuantityEntry(\"Qto_JunctionBoxBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetJunctionBoxBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_JunctionBoxBaseQuantities.NumberOfGangs\", \"NumberOfGangs\");\r\n            ifcPSE.PropertyName = \"NumberOfGangs\";\r\n            ifcPSE.QuantityType = QuantityType.Count;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Number Of Gangs\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NumberOfGangsCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetJunctionBoxBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetJunctionBoxBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_KerbBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetKerbBaseQuantities = new QuantityDescription();\r\n         qtoSetKerbBaseQuantities.Name = \"Qto_KerbBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_KerbBaseQuantities\"))\r\n         {\r\n            qtoSetKerbBaseQuantities.EntityTypes.Add(IFCEntityType.IfcKerb);\r\n            qtoSetKerbBaseQuantities.EntityTypes.Add(IFCEntityType.IfcKerbType);\r\n            qtoSetKerbBaseQuantities.ObjectType = \"IfcKerb,IfcKerbType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_KerbBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetKerbBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_KerbBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetKerbBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_KerbBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetKerbBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_KerbBaseQuantities.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetKerbBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_KerbBaseQuantities.Volume\", \"Volume\");\r\n            ifcPSE.PropertyName = \"Volume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetKerbBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_KerbBaseQuantities.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetKerbBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetKerbBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_LaborResourceBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetLaborResourceBaseQuantities = new QuantityDescription();\r\n         qtoSetLaborResourceBaseQuantities.Name = \"Qto_LaborResourceBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_LaborResourceBaseQuantities\"))\r\n         {\r\n            qtoSetLaborResourceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcLaborResource);\r\n            qtoSetLaborResourceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcLaborResourceType);\r\n            qtoSetLaborResourceBaseQuantities.ObjectType = \"IfcLaborResource,IfcLaborResourceType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_LaborResourceBaseQuantities.StandardWork\", \"StandardWork\");\r\n            ifcPSE.PropertyName = \"StandardWork\";\r\n            ifcPSE.QuantityType = QuantityType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardWorkCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetLaborResourceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_LaborResourceBaseQuantities.OvertimeWork\", \"OvertimeWork\");\r\n            ifcPSE.PropertyName = \"OvertimeWork\";\r\n            ifcPSE.QuantityType = QuantityType.Time;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OvertimeWorkCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetLaborResourceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_LaborResourceBaseQuantities\"))\r\n         {\r\n            qtoSetLaborResourceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcLaborResource);\r\n            qtoSetLaborResourceBaseQuantities.ObjectType = \"IfcLaborResource\";\r\n            ifcPSE = new QuantityEntry(\"Qto_LaborResourceBaseQuantities.StandardWork\", \"StandardWork\");\r\n            ifcPSE.PropertyName = \"StandardWork\";\r\n            ifcPSE.QuantityType = QuantityType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Standard Work\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.StandardWorkCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetLaborResourceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_LaborResourceBaseQuantities.OvertimeWork\", \"OvertimeWork\");\r\n            ifcPSE.PropertyName = \"OvertimeWork\";\r\n            ifcPSE.QuantityType = QuantityType.Time;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Overtime Work\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OvertimeWorkCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetLaborResourceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetLaborResourceBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_LampBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetLampBaseQuantities = new QuantityDescription();\r\n         qtoSetLampBaseQuantities.Name = \"Qto_LampBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_LampBaseQuantities\"))\r\n         {\r\n            qtoSetLampBaseQuantities.EntityTypes.Add(IFCEntityType.IfcLamp);\r\n            qtoSetLampBaseQuantities.EntityTypes.Add(IFCEntityType.IfcLampType);\r\n            qtoSetLampBaseQuantities.ObjectType = \"IfcLamp,IfcLampType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_LampBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetLampBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_LampBaseQuantities\"))\r\n         {\r\n            qtoSetLampBaseQuantities.EntityTypes.Add(IFCEntityType.IfcLamp);\r\n            qtoSetLampBaseQuantities.ObjectType = \"IfcLamp\";\r\n            ifcPSE = new QuantityEntry(\"Qto_LampBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetLampBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetLampBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_LightFixtureBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetLightFixtureBaseQuantities = new QuantityDescription();\r\n         qtoSetLightFixtureBaseQuantities.Name = \"Qto_LightFixtureBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_LightFixtureBaseQuantities\"))\r\n         {\r\n            qtoSetLightFixtureBaseQuantities.EntityTypes.Add(IFCEntityType.IfcLightFixture);\r\n            qtoSetLightFixtureBaseQuantities.EntityTypes.Add(IFCEntityType.IfcLightFixtureType);\r\n            qtoSetLightFixtureBaseQuantities.ObjectType = \"IfcLightFixture,IfcLightFixtureType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_LightFixtureBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetLightFixtureBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_LightFixtureBaseQuantities\"))\r\n         {\r\n            qtoSetLightFixtureBaseQuantities.EntityTypes.Add(IFCEntityType.IfcLightFixture);\r\n            qtoSetLightFixtureBaseQuantities.ObjectType = \"IfcLightFixture\";\r\n            ifcPSE = new QuantityEntry(\"Qto_LightFixtureBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetLightFixtureBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetLightFixtureBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_LinearStratumBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetLinearStratumBaseQuantities = new QuantityDescription();\r\n         qtoSetLinearStratumBaseQuantities.Name = \"Qto_LinearStratumBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_LinearStratumBaseQuantities\"))\r\n         {\r\n            qtoSetLinearStratumBaseQuantities.EntityTypes.Add(IFCEntityType.IfcGeotechnicalStratum);\r\n            qtoSetLinearStratumBaseQuantities.ObjectType = \"IfcGeotechnicalStratum\";\r\n            ifcPSE = new QuantityEntry(\"Qto_LinearStratumBaseQuantities.Diameter\", \"Diameter\");\r\n            ifcPSE.PropertyName = \"Diameter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DiameterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetLinearStratumBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_LinearStratumBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetLinearStratumBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetLinearStratumBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_MarineFacilityBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetMarineFacilityBaseQuantities = new QuantityDescription();\r\n         qtoSetMarineFacilityBaseQuantities.Name = \"Qto_MarineFacilityBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_MarineFacilityBaseQuantities\"))\r\n         {\r\n            qtoSetMarineFacilityBaseQuantities.EntityTypes.Add(IFCEntityType.IfcMarineFacility);\r\n            qtoSetMarineFacilityBaseQuantities.ObjectType = \"IfcMarineFacility\";\r\n            ifcPSE = new QuantityEntry(\"Qto_MarineFacilityBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMarineFacilityBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MarineFacilityBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMarineFacilityBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MarineFacilityBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMarineFacilityBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MarineFacilityBaseQuantities.Area\", \"Area\");\r\n            ifcPSE.PropertyName = \"Area\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMarineFacilityBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MarineFacilityBaseQuantities.Volume\", \"Volume\");\r\n            ifcPSE.PropertyName = \"Volume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMarineFacilityBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetMarineFacilityBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_MemberBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetMemberBaseQuantities = new QuantityDescription();\r\n         qtoSetMemberBaseQuantities.Name = \"Qto_MemberBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_MemberBaseQuantities\"))\r\n         {\r\n            qtoSetMemberBaseQuantities.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            qtoSetMemberBaseQuantities.EntityTypes.Add(IFCEntityType.IfcMemberType);\r\n            qtoSetMemberBaseQuantities.ObjectType = \"IfcMember,IfcMemberType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.GrossSurfaceArea\", \"GrossSurfaceArea\");\r\n            ifcPSE.PropertyName = \"GrossSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.NetSurfaceArea\", \"NetSurfaceArea\");\r\n            ifcPSE.PropertyName = \"NetSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_MemberBaseQuantities\"))\r\n         {\r\n            qtoSetMemberBaseQuantities.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            qtoSetMemberBaseQuantities.ObjectType = \"IfcMember\";\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Länge\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Querschnittsfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cross Section Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Mantelfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outer Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.GrossSurfaceArea\", \"GrossSurfaceArea\");\r\n            ifcPSE.PropertyName = \"GrossSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Gesamtoberfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.NetSurfaceArea\", \"NetSurfaceArea\");\r\n            ifcPSE.PropertyName = \"NetSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettooberfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttovolumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettovolumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttogewicht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettogewicht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_MemberBaseQuantities\"))\r\n         {\r\n            qtoSetMemberBaseQuantities.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.TotalSurfaceArea\", \"TotalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"TotalSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_MemberBaseQuantities\"))\r\n         {\r\n            qtoSetMemberBaseQuantities.Name = \"BaseQuantities\";\r\n\r\n            qtoSetMemberBaseQuantities.EntityTypes.Add(IFCEntityType.IfcMember);\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.TotalSurfaceArea\", \"TotalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"TotalSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_MemberBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMemberBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetMemberBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_MotorConnectionBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetMotorConnectionBaseQuantities = new QuantityDescription();\r\n         qtoSetMotorConnectionBaseQuantities.Name = \"Qto_MotorConnectionBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_MotorConnectionBaseQuantities\"))\r\n         {\r\n            qtoSetMotorConnectionBaseQuantities.EntityTypes.Add(IFCEntityType.IfcMotorConnection);\r\n            qtoSetMotorConnectionBaseQuantities.EntityTypes.Add(IFCEntityType.IfcMotorConnectionType);\r\n            qtoSetMotorConnectionBaseQuantities.ObjectType = \"IfcMotorConnection,IfcMotorConnectionType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_MotorConnectionBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMotorConnectionBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_MotorConnectionBaseQuantities\"))\r\n         {\r\n            qtoSetMotorConnectionBaseQuantities.EntityTypes.Add(IFCEntityType.IfcMotorConnection);\r\n            qtoSetMotorConnectionBaseQuantities.ObjectType = \"IfcMotorConnection\";\r\n            ifcPSE = new QuantityEntry(\"Qto_MotorConnectionBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetMotorConnectionBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetMotorConnectionBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_OpeningElementBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetOpeningElementBaseQuantities = new QuantityDescription();\r\n         qtoSetOpeningElementBaseQuantities.Name = \"Qto_OpeningElementBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_OpeningElementBaseQuantities\"))\r\n         {\r\n            qtoSetOpeningElementBaseQuantities.EntityTypes.Add(IFCEntityType.IfcOpeningElement);\r\n            qtoSetOpeningElementBaseQuantities.ObjectType = \"IfcOpeningElement\";\r\n            ifcPSE = new QuantityEntry(\"Qto_OpeningElementBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetOpeningElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_OpeningElementBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetOpeningElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_OpeningElementBaseQuantities.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetOpeningElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_OpeningElementBaseQuantities.Area\", \"Area\");\r\n            ifcPSE.PropertyName = \"Area\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetOpeningElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_OpeningElementBaseQuantities.Volume\", \"Volume\");\r\n            ifcPSE.PropertyName = \"Volume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetOpeningElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_OpeningElementBaseQuantities\"))\r\n         {\r\n            qtoSetOpeningElementBaseQuantities.EntityTypes.Add(IFCEntityType.IfcOpeningElement);\r\n            qtoSetOpeningElementBaseQuantities.ObjectType = \"IfcOpeningElement\";\r\n            ifcPSE = new QuantityEntry(\"Qto_OpeningElementBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Breite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"開口幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetOpeningElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_OpeningElementBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Höhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"開口高さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetOpeningElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_OpeningElementBaseQuantities.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Tiefe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Depth\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"開口奥行き\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetOpeningElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_OpeningElementBaseQuantities.Area\", \"Area\");\r\n            ifcPSE.PropertyName = \"Area\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Fläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetOpeningElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_OpeningElementBaseQuantities.Volume\", \"Volume\");\r\n            ifcPSE.PropertyName = \"Volume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Volumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Volume\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"体積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetOpeningElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_OpeningElementBaseQuantities\"))\r\n         {\r\n            qtoSetOpeningElementBaseQuantities.EntityTypes.Add(IFCEntityType.IfcOpeningElement);\r\n            ifcPSE = new QuantityEntry(\"Qto_OpeningElementBaseQuantities.OpeningArea\", \"OpeningArea\");\r\n            ifcPSE.PropertyName = \"OpeningArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OpeningAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetOpeningElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_OpeningElementBaseQuantities\"))\r\n         {\r\n            qtoSetOpeningElementBaseQuantities.Name = \"BaseQuantities\";\r\n\r\n            qtoSetOpeningElementBaseQuantities.EntityTypes.Add(IFCEntityType.IfcOpeningElement);\r\n            ifcPSE = new QuantityEntry(\"Qto_OpeningElementBaseQuantities.NominalArea\", \"NominalArea\");\r\n            ifcPSE.PropertyName = \"NominalArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetOpeningElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_OpeningElementBaseQuantities.NominalVolume\", \"NominalVolume\");\r\n            ifcPSE.PropertyName = \"NominalVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetOpeningElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetOpeningElementBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_OutletBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetOutletBaseQuantities = new QuantityDescription();\r\n         qtoSetOutletBaseQuantities.Name = \"Qto_OutletBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_OutletBaseQuantities\"))\r\n         {\r\n            qtoSetOutletBaseQuantities.EntityTypes.Add(IFCEntityType.IfcOutlet);\r\n            qtoSetOutletBaseQuantities.EntityTypes.Add(IFCEntityType.IfcOutletType);\r\n            qtoSetOutletBaseQuantities.ObjectType = \"IfcOutlet,IfcOutletType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_OutletBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetOutletBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_OutletBaseQuantities\"))\r\n         {\r\n            qtoSetOutletBaseQuantities.EntityTypes.Add(IFCEntityType.IfcOutlet);\r\n            qtoSetOutletBaseQuantities.ObjectType = \"IfcOutlet\";\r\n            ifcPSE = new QuantityEntry(\"Qto_OutletBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetOutletBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetOutletBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_PavementBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetPavementBaseQuantities = new QuantityDescription();\r\n         qtoSetPavementBaseQuantities.Name = \"Qto_PavementBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_PavementBaseQuantities\"))\r\n         {\r\n            qtoSetPavementBaseQuantities.EntityTypes.Add(IFCEntityType.IfcPavement);\r\n            qtoSetPavementBaseQuantities.EntityTypes.Add(IFCEntityType.IfcPavementType);\r\n            qtoSetPavementBaseQuantities.ObjectType = \"IfcPavement,IfcPavementType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_PavementBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPavementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PavementBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPavementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PavementBaseQuantities.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPavementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PavementBaseQuantities.GrossArea\", \"GrossArea\");\r\n            ifcPSE.PropertyName = \"GrossArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPavementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PavementBaseQuantities.NetArea\", \"NetArea\");\r\n            ifcPSE.PropertyName = \"NetArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPavementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PavementBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPavementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PavementBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPavementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetPavementBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_PictorialSignQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetPictorialSignQuantities = new QuantityDescription();\r\n         qtoSetPictorialSignQuantities.Name = \"Qto_PictorialSignQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_PictorialSignQuantities\"))\r\n         {\r\n            qtoSetPictorialSignQuantities.EntityTypes.Add(IFCEntityType.IfcSign);\r\n            qtoSetPictorialSignQuantities.EntityTypes.Add(IFCEntityType.IfcSignType);\r\n            qtoSetPictorialSignQuantities.ObjectType = \"IfcSign\";\r\n            qtoSetPictorialSignQuantities.PredefinedType = \"PICTORAL\";\r\n            ifcPSE = new QuantityEntry(\"Qto_PictorialSignQuantities.Area\", \"Area\");\r\n            ifcPSE.PropertyName = \"Area\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPictorialSignQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PictorialSignQuantities.SignArea\", \"SignArea\");\r\n            ifcPSE.PropertyName = \"SignArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SignAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPictorialSignQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetPictorialSignQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_PileBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetPileBaseQuantities = new QuantityDescription();\r\n         qtoSetPileBaseQuantities.Name = \"Qto_PileBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_PileBaseQuantities\"))\r\n         {\r\n            qtoSetPileBaseQuantities.EntityTypes.Add(IFCEntityType.IfcPile);\r\n            qtoSetPileBaseQuantities.EntityTypes.Add(IFCEntityType.IfcPileType);\r\n            qtoSetPileBaseQuantities.ObjectType = \"IfcPile,IfcPileType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_PileBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPileBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PileBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPileBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PileBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPileBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PileBaseQuantities.GrossSurfaceArea\", \"GrossSurfaceArea\");\r\n            ifcPSE.PropertyName = \"GrossSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPileBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PileBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPileBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PileBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPileBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PileBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPileBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PileBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPileBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_PileBaseQuantities\"))\r\n         {\r\n            qtoSetPileBaseQuantities.EntityTypes.Add(IFCEntityType.IfcPile);\r\n            qtoSetPileBaseQuantities.ObjectType = \"IfcPile\";\r\n            ifcPSE = new QuantityEntry(\"Qto_PileBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPileBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PileBaseQuantities.CrossSectionArea\", \"CrossSectionArea\");\r\n            ifcPSE.PropertyName = \"CrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Cross Section Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPileBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PileBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outer Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPileBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PileBaseQuantities.GrossSurfaceArea\", \"GrossSurfaceArea\");\r\n            ifcPSE.PropertyName = \"GrossSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPileBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PileBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPileBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PileBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPileBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PileBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPileBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PileBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPileBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetPileBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_PipeFittingBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetPipeFittingBaseQuantities = new QuantityDescription();\r\n         qtoSetPipeFittingBaseQuantities.Name = \"Qto_PipeFittingBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_PipeFittingBaseQuantities\"))\r\n         {\r\n            qtoSetPipeFittingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcPipeFitting);\r\n            qtoSetPipeFittingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcPipeFittingType);\r\n            qtoSetPipeFittingBaseQuantities.ObjectType = \"IfcPipeFitting,IfcPipeFittingType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeFittingBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeFittingBaseQuantities.GrossCrossSectionArea\", \"GrossCrossSectionArea\");\r\n            ifcPSE.PropertyName = \"GrossCrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossCrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeFittingBaseQuantities.NetCrossSectionArea\", \"NetCrossSectionArea\");\r\n            ifcPSE.PropertyName = \"NetCrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetCrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeFittingBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeFittingBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeFittingBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_PipeFittingBaseQuantities\"))\r\n         {\r\n            qtoSetPipeFittingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcPipeFitting);\r\n            qtoSetPipeFittingBaseQuantities.ObjectType = \"IfcPipeFitting\";\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeFittingBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeFittingBaseQuantities.GrossCrossSectionArea\", \"GrossCrossSectionArea\");\r\n            ifcPSE.PropertyName = \"GrossCrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Cross Section Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossCrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeFittingBaseQuantities.NetCrossSectionArea\", \"NetCrossSectionArea\");\r\n            ifcPSE.PropertyName = \"NetCrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Cross Section Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetCrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeFittingBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outer Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeFittingBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeFittingBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeFittingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetPipeFittingBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_PipeSegmentBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetPipeSegmentBaseQuantities = new QuantityDescription();\r\n         qtoSetPipeSegmentBaseQuantities.Name = \"Qto_PipeSegmentBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_PipeSegmentBaseQuantities\"))\r\n         {\r\n            qtoSetPipeSegmentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcPipeSegment);\r\n            qtoSetPipeSegmentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcPipeSegmentType);\r\n            qtoSetPipeSegmentBaseQuantities.ObjectType = \"IfcPipeSegment,IfcPipeSegmentType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeSegmentBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeSegmentBaseQuantities.GrossCrossSectionArea\", \"GrossCrossSectionArea\");\r\n            ifcPSE.PropertyName = \"GrossCrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossCrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeSegmentBaseQuantities.NetCrossSectionArea\", \"NetCrossSectionArea\");\r\n            ifcPSE.PropertyName = \"NetCrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetCrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeSegmentBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeSegmentBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeSegmentBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeSegmentBaseQuantities.FootPrintArea\", \"FootPrintArea\");\r\n            ifcPSE.PropertyName = \"FootPrintArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FootPrintAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_PipeSegmentBaseQuantities\"))\r\n         {\r\n            qtoSetPipeSegmentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcPipeSegment);\r\n            qtoSetPipeSegmentBaseQuantities.ObjectType = \"IfcPipeSegment\";\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeSegmentBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeSegmentBaseQuantities.GrossCrossSectionArea\", \"GrossCrossSectionArea\");\r\n            ifcPSE.PropertyName = \"GrossCrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Cross Section Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossCrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeSegmentBaseQuantities.NetCrossSectionArea\", \"NetCrossSectionArea\");\r\n            ifcPSE.PropertyName = \"NetCrossSectionArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Cross Section Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetCrossSectionAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeSegmentBaseQuantities.OuterSurfaceArea\", \"OuterSurfaceArea\");\r\n            ifcPSE.PropertyName = \"OuterSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Outer Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.OuterSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeSegmentBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PipeSegmentBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPipeSegmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetPipeSegmentBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_PlateBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetPlateBaseQuantities = new QuantityDescription();\r\n         qtoSetPlateBaseQuantities.Name = \"Qto_PlateBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_PlateBaseQuantities\"))\r\n         {\r\n            qtoSetPlateBaseQuantities.EntityTypes.Add(IFCEntityType.IfcPlate);\r\n            qtoSetPlateBaseQuantities.EntityTypes.Add(IFCEntityType.IfcPlateType);\r\n            qtoSetPlateBaseQuantities.ObjectType = \"IfcPlate,IfcPlateType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_PlateBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPlateBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PlateBaseQuantities.Perimeter\", \"Perimeter\");\r\n            ifcPSE.PropertyName = \"Perimeter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPlateBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PlateBaseQuantities.GrossArea\", \"GrossArea\");\r\n            ifcPSE.PropertyName = \"GrossArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPlateBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PlateBaseQuantities.NetArea\", \"NetArea\");\r\n            ifcPSE.PropertyName = \"NetArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPlateBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PlateBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPlateBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PlateBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPlateBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PlateBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPlateBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PlateBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPlateBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_PlateBaseQuantities\"))\r\n         {\r\n            qtoSetPlateBaseQuantities.EntityTypes.Add(IFCEntityType.IfcPlate);\r\n            qtoSetPlateBaseQuantities.ObjectType = \"IfcPlate\";\r\n            ifcPSE = new QuantityEntry(\"Qto_PlateBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Dicke\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Width\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPlateBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PlateBaseQuantities.Perimeter\", \"Perimeter\");\r\n            ifcPSE.PropertyName = \"Perimeter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Umfang\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Perimeter\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPlateBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PlateBaseQuantities.GrossArea\", \"GrossArea\");\r\n            ifcPSE.PropertyName = \"GrossArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttofläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPlateBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PlateBaseQuantities.NetArea\", \"NetArea\");\r\n            ifcPSE.PropertyName = \"NetArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettofläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPlateBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PlateBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttovolumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPlateBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PlateBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettovolumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPlateBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PlateBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttogewicht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPlateBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_PlateBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettogewicht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPlateBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetPlateBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ProjectionElementBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetProjectionElementBaseQuantities = new QuantityDescription();\r\n         qtoSetProjectionElementBaseQuantities.Name = \"Qto_ProjectionElementBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ProjectionElementBaseQuantities\"))\r\n         {\r\n            qtoSetProjectionElementBaseQuantities.EntityTypes.Add(IFCEntityType.IfcProjectionElement);\r\n            qtoSetProjectionElementBaseQuantities.ObjectType = \"IfcProjectionElement\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ProjectionElementBaseQuantities.Area\", \"Area\");\r\n            ifcPSE.PropertyName = \"Area\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetProjectionElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ProjectionElementBaseQuantities.Volume\", \"Volume\");\r\n            ifcPSE.PropertyName = \"Volume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetProjectionElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ProjectionElementBaseQuantities\"))\r\n         {\r\n            qtoSetProjectionElementBaseQuantities.EntityTypes.Add(IFCEntityType.IfcProjectionElement);\r\n            qtoSetProjectionElementBaseQuantities.ObjectType = \"IfcProjectionElement\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ProjectionElementBaseQuantities.Area\", \"Area\");\r\n            ifcPSE.PropertyName = \"Area\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Fläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetProjectionElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ProjectionElementBaseQuantities.Volume\", \"Volume\");\r\n            ifcPSE.PropertyName = \"Volume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Volumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetProjectionElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ProjectionElementBaseQuantities\"))\r\n         {\r\n            qtoSetProjectionElementBaseQuantities.Name = \"BaseQuantities\";\r\n\r\n            qtoSetProjectionElementBaseQuantities.EntityTypes.Add(IFCEntityType.IfcProjectionElement);\r\n            ifcPSE = new QuantityEntry(\"Qto_ProjectionElementBaseQuantities.NominalArea\", \"NominalArea\");\r\n            ifcPSE.PropertyName = \"NominalArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetProjectionElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ProjectionElementBaseQuantities.NominalVolume\", \"NominalVolume\");\r\n            ifcPSE.PropertyName = \"NominalVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetProjectionElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetProjectionElementBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ProtectiveDeviceBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetProtectiveDeviceBaseQuantities = new QuantityDescription();\r\n         qtoSetProtectiveDeviceBaseQuantities.Name = \"Qto_ProtectiveDeviceBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ProtectiveDeviceBaseQuantities\"))\r\n         {\r\n            qtoSetProtectiveDeviceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            qtoSetProtectiveDeviceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceType);\r\n            qtoSetProtectiveDeviceBaseQuantities.ObjectType = \"IfcProtectiveDevice,IfcProtectiveDeviceType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ProtectiveDeviceBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetProtectiveDeviceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ProtectiveDeviceBaseQuantities\"))\r\n         {\r\n            qtoSetProtectiveDeviceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcProtectiveDevice);\r\n            qtoSetProtectiveDeviceBaseQuantities.ObjectType = \"IfcProtectiveDevice\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ProtectiveDeviceBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetProtectiveDeviceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetProtectiveDeviceBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ProtectiveDeviceTrippingUnitBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetProtectiveDeviceTrippingUnitBaseQuantities = new QuantityDescription();\r\n         qtoSetProtectiveDeviceTrippingUnitBaseQuantities.Name = \"Qto_ProtectiveDeviceTrippingUnitBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ProtectiveDeviceTrippingUnitBaseQuantities\"))\r\n         {\r\n            qtoSetProtectiveDeviceTrippingUnitBaseQuantities.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            qtoSetProtectiveDeviceTrippingUnitBaseQuantities.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnitType);\r\n            qtoSetProtectiveDeviceTrippingUnitBaseQuantities.ObjectType = \"IfcProtectiveDeviceTrippingUnit,IfcProtectiveDeviceTrippingUnitType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ProtectiveDeviceTrippingUnitBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetProtectiveDeviceTrippingUnitBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ProtectiveDeviceTrippingUnitBaseQuantities\"))\r\n         {\r\n            qtoSetProtectiveDeviceTrippingUnitBaseQuantities.EntityTypes.Add(IFCEntityType.IfcProtectiveDeviceTrippingUnit);\r\n            qtoSetProtectiveDeviceTrippingUnitBaseQuantities.ObjectType = \"IfcProtectiveDeviceTrippingUnit\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ProtectiveDeviceTrippingUnitBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetProtectiveDeviceTrippingUnitBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetProtectiveDeviceTrippingUnitBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_PumpBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetPumpBaseQuantities = new QuantityDescription();\r\n         qtoSetPumpBaseQuantities.Name = \"Qto_PumpBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_PumpBaseQuantities\"))\r\n         {\r\n            qtoSetPumpBaseQuantities.EntityTypes.Add(IFCEntityType.IfcPump);\r\n            qtoSetPumpBaseQuantities.EntityTypes.Add(IFCEntityType.IfcPumpType);\r\n            qtoSetPumpBaseQuantities.ObjectType = \"IfcPump,IfcPumpType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_PumpBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPumpBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_PumpBaseQuantities\"))\r\n         {\r\n            qtoSetPumpBaseQuantities.EntityTypes.Add(IFCEntityType.IfcPump);\r\n            qtoSetPumpBaseQuantities.ObjectType = \"IfcPump\";\r\n            ifcPSE = new QuantityEntry(\"Qto_PumpBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetPumpBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetPumpBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_RailBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetRailBaseQuantities = new QuantityDescription();\r\n         qtoSetRailBaseQuantities.Name = \"Qto_RailBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_RailBaseQuantities\"))\r\n         {\r\n            qtoSetRailBaseQuantities.EntityTypes.Add(IFCEntityType.IfcRail);\r\n            qtoSetRailBaseQuantities.EntityTypes.Add(IFCEntityType.IfcRailType);\r\n            qtoSetRailBaseQuantities.ObjectType = \"IfcRail,IfcRailType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_RailBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRailBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_RailBaseQuantities.Volume\", \"Volume\");\r\n            ifcPSE.PropertyName = \"Volume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRailBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_RailBaseQuantities.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRailBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetRailBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_RailingBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetRailingBaseQuantities = new QuantityDescription();\r\n         qtoSetRailingBaseQuantities.Name = \"Qto_RailingBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_RailingBaseQuantities\"))\r\n         {\r\n            qtoSetRailingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcRailing);\r\n            qtoSetRailingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcRailingType);\r\n            qtoSetRailingBaseQuantities.ObjectType = \"IfcRailing,IfcRailingType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_RailingBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRailingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_RailingBaseQuantities\"))\r\n         {\r\n            qtoSetRailingBaseQuantities.EntityTypes.Add(IFCEntityType.IfcRailing);\r\n            qtoSetRailingBaseQuantities.ObjectType = \"IfcRailing\";\r\n            ifcPSE = new QuantityEntry(\"Qto_RailingBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Länge\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRailingBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetRailingBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_RampFlightBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetRampFlightBaseQuantities = new QuantityDescription();\r\n         qtoSetRampFlightBaseQuantities.Name = \"Qto_RampFlightBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_RampFlightBaseQuantities\"))\r\n         {\r\n            qtoSetRampFlightBaseQuantities.EntityTypes.Add(IFCEntityType.IfcRampFlight);\r\n            qtoSetRampFlightBaseQuantities.EntityTypes.Add(IFCEntityType.IfcRampFlightType);\r\n            qtoSetRampFlightBaseQuantities.ObjectType = \"IfcRampFlight,IfcRampFlightType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_RampFlightBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRampFlightBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_RampFlightBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRampFlightBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_RampFlightBaseQuantities.GrossArea\", \"GrossArea\");\r\n            ifcPSE.PropertyName = \"GrossArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRampFlightBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_RampFlightBaseQuantities.NetArea\", \"NetArea\");\r\n            ifcPSE.PropertyName = \"NetArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRampFlightBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_RampFlightBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRampFlightBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_RampFlightBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRampFlightBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_RampFlightBaseQuantities\"))\r\n         {\r\n            qtoSetRampFlightBaseQuantities.EntityTypes.Add(IFCEntityType.IfcRampFlight);\r\n            qtoSetRampFlightBaseQuantities.ObjectType = \"IfcRampFlight\";\r\n            ifcPSE = new QuantityEntry(\"Qto_RampFlightBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Länge\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRampFlightBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_RampFlightBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Dicke\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Width\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRampFlightBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_RampFlightBaseQuantities.GrossArea\", \"GrossArea\");\r\n            ifcPSE.PropertyName = \"GrossArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttofläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRampFlightBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_RampFlightBaseQuantities.NetArea\", \"NetArea\");\r\n            ifcPSE.PropertyName = \"NetArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettofläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRampFlightBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_RampFlightBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttovolumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRampFlightBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_RampFlightBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettovolumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRampFlightBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetRampFlightBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ReinforcedSoilBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetReinforcedSoilBaseQuantities = new QuantityDescription();\r\n         qtoSetReinforcedSoilBaseQuantities.Name = \"Qto_ReinforcedSoilBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ReinforcedSoilBaseQuantities\"))\r\n         {\r\n            qtoSetReinforcedSoilBaseQuantities.EntityTypes.Add(IFCEntityType.IfcReinforcedSoil);\r\n            qtoSetReinforcedSoilBaseQuantities.ObjectType = \"IfcReinforcedSoil\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ReinforcedSoilBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetReinforcedSoilBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ReinforcedSoilBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetReinforcedSoilBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ReinforcedSoilBaseQuantities.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetReinforcedSoilBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ReinforcedSoilBaseQuantities.Area\", \"Area\");\r\n            ifcPSE.PropertyName = \"Area\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetReinforcedSoilBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ReinforcedSoilBaseQuantities.Volume\", \"Volume\");\r\n            ifcPSE.PropertyName = \"Volume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetReinforcedSoilBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetReinforcedSoilBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ReinforcingElementBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetReinforcingElementBaseQuantities = new QuantityDescription();\r\n         qtoSetReinforcingElementBaseQuantities.Name = \"Qto_ReinforcingElementBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ReinforcingElementBaseQuantities\"))\r\n         {\r\n            qtoSetReinforcingElementBaseQuantities.EntityTypes.Add(IFCEntityType.IfcReinforcingElement);\r\n            qtoSetReinforcingElementBaseQuantities.EntityTypes.Add(IFCEntityType.IfcReinforcingElementType);\r\n            qtoSetReinforcingElementBaseQuantities.ObjectType = \"IfcReinforcingElement,IfcReinforcingElementType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ReinforcingElementBaseQuantities.Count\", \"Count\");\r\n            ifcPSE.PropertyName = \"Count\";\r\n            ifcPSE.QuantityType = QuantityType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetReinforcingElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ReinforcingElementBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetReinforcingElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ReinforcingElementBaseQuantities.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetReinforcingElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ReinforcingElementBaseQuantities\"))\r\n         {\r\n            qtoSetReinforcingElementBaseQuantities.EntityTypes.Add(IFCEntityType.IfcReinforcingElement);\r\n            qtoSetReinforcingElementBaseQuantities.ObjectType = \"IfcReinforcingElement\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ReinforcingElementBaseQuantities.Count\", \"Count\");\r\n            ifcPSE.PropertyName = \"Count\";\r\n            ifcPSE.QuantityType = QuantityType.Count;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.CountCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetReinforcingElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ReinforcingElementBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetReinforcingElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_ReinforcingElementBaseQuantities.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetReinforcingElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetReinforcingElementBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_RoofBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetRoofBaseQuantities = new QuantityDescription();\r\n         qtoSetRoofBaseQuantities.Name = \"Qto_RoofBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_RoofBaseQuantities\"))\r\n         {\r\n            qtoSetRoofBaseQuantities.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n            qtoSetRoofBaseQuantities.EntityTypes.Add(IFCEntityType.IfcRoofType);\r\n            qtoSetRoofBaseQuantities.ObjectType = \"IfcRoof,IfcRoofType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_RoofBaseQuantities.GrossArea\", \"GrossArea\");\r\n            ifcPSE.PropertyName = \"GrossArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRoofBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_RoofBaseQuantities.NetArea\", \"NetArea\");\r\n            ifcPSE.PropertyName = \"NetArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRoofBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_RoofBaseQuantities.ProjectedArea\", \"ProjectedArea\");\r\n            ifcPSE.PropertyName = \"ProjectedArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProjectedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRoofBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_RoofBaseQuantities\"))\r\n         {\r\n            qtoSetRoofBaseQuantities.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n            qtoSetRoofBaseQuantities.ObjectType = \"IfcRoof\";\r\n            ifcPSE = new QuantityEntry(\"Qto_RoofBaseQuantities.GrossArea\", \"GrossArea\");\r\n            ifcPSE.PropertyName = \"GrossArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttofläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRoofBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_RoofBaseQuantities.NetArea\", \"NetArea\");\r\n            ifcPSE.PropertyName = \"NetArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettofläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRoofBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_RoofBaseQuantities.ProjectedArea\", \"ProjectedArea\");\r\n            ifcPSE.PropertyName = \"ProjectedArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"projizierte Fläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Projected Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ProjectedAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRoofBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_RoofBaseQuantities\"))\r\n         {\r\n            qtoSetRoofBaseQuantities.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n            ifcPSE = new QuantityEntry(\"Qto_RoofBaseQuantities.TotalSurfaceArea\", \"TotalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"TotalSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRoofBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_RoofBaseQuantities\"))\r\n         {\r\n            qtoSetRoofBaseQuantities.Name = \"BaseQuantities\";\r\n\r\n            qtoSetRoofBaseQuantities.EntityTypes.Add(IFCEntityType.IfcRoof);\r\n            ifcPSE = new QuantityEntry(\"Qto_RoofBaseQuantities.TotalSurfaceArea\", \"TotalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"TotalSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetRoofBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetRoofBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_SanitaryTerminalBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetSanitaryTerminalBaseQuantities = new QuantityDescription();\r\n         qtoSetSanitaryTerminalBaseQuantities.Name = \"Qto_SanitaryTerminalBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SanitaryTerminalBaseQuantities\"))\r\n         {\r\n            qtoSetSanitaryTerminalBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            qtoSetSanitaryTerminalBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminalType);\r\n            qtoSetSanitaryTerminalBaseQuantities.ObjectType = \"IfcSanitaryTerminal,IfcSanitaryTerminalType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SanitaryTerminalBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSanitaryTerminalBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SanitaryTerminalBaseQuantities\"))\r\n         {\r\n            qtoSetSanitaryTerminalBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSanitaryTerminal);\r\n            qtoSetSanitaryTerminalBaseQuantities.ObjectType = \"IfcSanitaryTerminal\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SanitaryTerminalBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSanitaryTerminalBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetSanitaryTerminalBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_SensorBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetSensorBaseQuantities = new QuantityDescription();\r\n         qtoSetSensorBaseQuantities.Name = \"Qto_SensorBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SensorBaseQuantities\"))\r\n         {\r\n            qtoSetSensorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            qtoSetSensorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSensorType);\r\n            qtoSetSensorBaseQuantities.ObjectType = \"IfcSensor,IfcSensorType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SensorBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSensorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SensorBaseQuantities\"))\r\n         {\r\n            qtoSetSensorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSensor);\r\n            qtoSetSensorBaseQuantities.ObjectType = \"IfcSensor\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SensorBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSensorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetSensorBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_SignalBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetSignalBaseQuantities = new QuantityDescription();\r\n         qtoSetSignalBaseQuantities.Name = \"Qto_SignalBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SignalBaseQuantities\"))\r\n         {\r\n            qtoSetSignalBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSignal);\r\n            qtoSetSignalBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSignalType);\r\n            qtoSetSignalBaseQuantities.ObjectType = \"IfcSignal,IfcSignalType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SignalBaseQuantities.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSignalBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetSignalBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_SignBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetSignBaseQuantities = new QuantityDescription();\r\n         qtoSetSignBaseQuantities.Name = \"Qto_SignBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SignBaseQuantities\"))\r\n         {\r\n            qtoSetSignBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSign);\r\n            qtoSetSignBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSignType);\r\n            qtoSetSignBaseQuantities.ObjectType = \"IfcSign,IfcSignType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SignBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSignBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SignBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSignBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SignBaseQuantities.Thickness\", \"Thickness\");\r\n            ifcPSE.PropertyName = \"Thickness\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ThicknessCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSignBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SignBaseQuantities.Weight\", \"Weight\");\r\n            ifcPSE.PropertyName = \"Weight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSignBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetSignBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_SiteBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetSiteBaseQuantities = new QuantityDescription();\r\n         qtoSetSiteBaseQuantities.Name = \"Qto_SiteBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SiteBaseQuantities\"))\r\n         {\r\n            qtoSetSiteBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSite);\r\n            qtoSetSiteBaseQuantities.ObjectType = \"IfcSite\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SiteBaseQuantities.GrossPerimeter\", \"GrossPerimeter\");\r\n            ifcPSE.PropertyName = \"GrossPerimeter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossPerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSiteBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SiteBaseQuantities.GrossArea\", \"GrossArea\");\r\n            ifcPSE.PropertyName = \"GrossArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSiteBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SiteBaseQuantities\"))\r\n         {\r\n            qtoSetSiteBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSite);\r\n            qtoSetSiteBaseQuantities.ObjectType = \"IfcSite\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SiteBaseQuantities.GrossPerimeter\", \"GrossPerimeter\");\r\n            ifcPSE.PropertyName = \"GrossPerimeter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Umfang\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Perimeter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"周辺長\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossPerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSiteBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SiteBaseQuantities.GrossArea\", \"GrossArea\");\r\n            ifcPSE.PropertyName = \"GrossArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Grundfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"敷地面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSiteBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SiteBaseQuantities\"))\r\n         {\r\n            qtoSetSiteBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSite);\r\n            ifcPSE = new QuantityEntry(\"Qto_SiteBaseQuantities.SitePerimeter\", \"SitePerimeter\");\r\n            ifcPSE.PropertyName = \"SitePerimeter\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SitePerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSiteBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SiteBaseQuantities.SiteArea\", \"SiteArea\");\r\n            ifcPSE.PropertyName = \"SiteArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SiteAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSiteBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SiteBaseQuantities\"))\r\n         {\r\n            qtoSetSiteBaseQuantities.Name = \"BaseQuantities\";\r\n\r\n            qtoSetSiteBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSite);\r\n            ifcPSE = new QuantityEntry(\"Qto_SiteBaseQuantities.NominalPerimeter\", \"NominalPerimeter\");\r\n            ifcPSE.PropertyName = \"NominalPerimeter\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalPerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSiteBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SiteBaseQuantities.NominalArea\", \"NominalArea\");\r\n            ifcPSE.PropertyName = \"NominalArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSiteBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetSiteBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_SlabBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetSlabBaseQuantities = new QuantityDescription();\r\n         qtoSetSlabBaseQuantities.Name = \"Qto_SlabBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SlabBaseQuantities\"))\r\n         {\r\n            qtoSetSlabBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            qtoSetSlabBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSlabType);\r\n            qtoSetSlabBaseQuantities.ObjectType = \"IfcSlab,IfcSlabType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.Perimeter\", \"Perimeter\");\r\n            ifcPSE.PropertyName = \"Perimeter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.GrossArea\", \"GrossArea\");\r\n            ifcPSE.PropertyName = \"GrossArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.NetArea\", \"NetArea\");\r\n            ifcPSE.PropertyName = \"NetArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SlabBaseQuantities\"))\r\n         {\r\n            qtoSetSlabBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            qtoSetSlabBaseQuantities.ObjectType = \"IfcSlab\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Dicke\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Länge\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.Depth\", \"Depth\");\r\n            ifcPSE.PropertyName = \"Depth\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Breite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Depth\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.DepthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.Perimeter\", \"Perimeter\");\r\n            ifcPSE.PropertyName = \"Perimeter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Umfang\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Perimeter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"周囲長\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.GrossArea\", \"GrossArea\");\r\n            ifcPSE.PropertyName = \"GrossArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttofläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.NetArea\", \"NetArea\");\r\n            ifcPSE.PropertyName = \"NetArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettofläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttovolumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Volume\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"体積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettovolumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Volume\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味体積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttogewicht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"重量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettogewicht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Weight\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味重量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SlabBaseQuantities\"))\r\n         {\r\n            qtoSetSlabBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.Perimeter\", \"Perimeter\");\r\n            ifcPSE.PropertyName = \"Perimeter\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.SurfaceArea\", \"SurfaceArea\");\r\n            ifcPSE.PropertyName = \"SurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.SurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SlabBaseQuantities\"))\r\n         {\r\n            qtoSetSlabBaseQuantities.Name = \"BaseQuantities\";\r\n\r\n            qtoSetSlabBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSlab);\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.Perimeter\", \"Perimeter\");\r\n            ifcPSE.PropertyName = \"Perimeter\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.GrossArea\", \"GrossArea\");\r\n            ifcPSE.PropertyName = \"GrossArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.NetArea\", \"NetArea\");\r\n            ifcPSE.PropertyName = \"NetArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SlabBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSlabBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetSlabBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_SleeperBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetSleeperBaseQuantities = new QuantityDescription();\r\n         qtoSetSleeperBaseQuantities.Name = \"Qto_SleeperBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SleeperBaseQuantities\"))\r\n         {\r\n            qtoSetSleeperBaseQuantities.EntityTypes.Add(IFCEntityType.IfcTrackElement);\r\n            qtoSetSleeperBaseQuantities.EntityTypes.Add(IFCEntityType.IfcTrackElementType);\r\n            qtoSetSleeperBaseQuantities.ObjectType = \"IfcTrackElement\";\r\n            qtoSetSleeperBaseQuantities.PredefinedType = \"SLEEPER\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SleeperBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSleeperBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SleeperBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSleeperBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SleeperBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSleeperBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetSleeperBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_SolarDeviceBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetSolarDeviceBaseQuantities = new QuantityDescription();\r\n         qtoSetSolarDeviceBaseQuantities.Name = \"Qto_SolarDeviceBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SolarDeviceBaseQuantities\"))\r\n         {\r\n            qtoSetSolarDeviceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSolarDevice);\r\n            qtoSetSolarDeviceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSolarDeviceType);\r\n            qtoSetSolarDeviceBaseQuantities.ObjectType = \"IfcSolarDevice,IfcSolarDeviceType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SolarDeviceBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSolarDeviceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SolarDeviceBaseQuantities.GrossArea\", \"GrossArea\");\r\n            ifcPSE.PropertyName = \"GrossArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSolarDeviceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SolarDeviceBaseQuantities\"))\r\n         {\r\n            qtoSetSolarDeviceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSolarDevice);\r\n            qtoSetSolarDeviceBaseQuantities.ObjectType = \"IfcSolarDevice\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SolarDeviceBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSolarDeviceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SolarDeviceBaseQuantities.GrossArea\", \"GrossArea\");\r\n            ifcPSE.PropertyName = \"GrossArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSolarDeviceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetSolarDeviceBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_SpaceBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetSpaceBaseQuantities = new QuantityDescription();\r\n         qtoSetSpaceBaseQuantities.Name = \"Qto_SpaceBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SpaceBaseQuantities\"))\r\n         {\r\n            qtoSetSpaceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            qtoSetSpaceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSpaceType);\r\n            qtoSetSpaceBaseQuantities.ObjectType = \"IfcSpace,IfcSpaceType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.FinishCeilingHeight\", \"FinishCeilingHeight\");\r\n            ifcPSE.PropertyName = \"FinishCeilingHeight\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishCeilingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.FinishFloorHeight\", \"FinishFloorHeight\");\r\n            ifcPSE.PropertyName = \"FinishFloorHeight\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishFloorHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.GrossPerimeter\", \"GrossPerimeter\");\r\n            ifcPSE.PropertyName = \"GrossPerimeter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossPerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.NetPerimeter\", \"NetPerimeter\");\r\n            ifcPSE.PropertyName = \"NetPerimeter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetPerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.GrossFloorArea\", \"GrossFloorArea\");\r\n            ifcPSE.PropertyName = \"GrossFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.NetFloorArea\", \"NetFloorArea\");\r\n            ifcPSE.PropertyName = \"NetFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.GrossWallArea\", \"GrossWallArea\");\r\n            ifcPSE.PropertyName = \"GrossWallArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWallAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.NetWallArea\", \"NetWallArea\");\r\n            ifcPSE.PropertyName = \"NetWallArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWallAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.GrossCeilingArea\", \"GrossCeilingArea\");\r\n            ifcPSE.PropertyName = \"GrossCeilingArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossCeilingAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.NetCeilingArea\", \"NetCeilingArea\");\r\n            ifcPSE.PropertyName = \"NetCeilingArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetCeilingAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SpaceBaseQuantities\"))\r\n         {\r\n            qtoSetSpaceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            qtoSetSpaceBaseQuantities.ObjectType = \"IfcSpace\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Höhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"高さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.FinishCeilingHeight\", \"FinishCeilingHeight\");\r\n            ifcPSE.PropertyName = \"FinishCeilingHeight\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Lichte Höhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Finish Ceiling Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"天井仕上げ高さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishCeilingHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.FinishFloorHeight\", \"FinishFloorHeight\");\r\n            ifcPSE.PropertyName = \"FinishFloorHeight\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Fussboden Höhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Finish Floor Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"床仕上げ高さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.FinishFloorHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.GrossPerimeter\", \"GrossPerimeter\");\r\n            ifcPSE.PropertyName = \"GrossPerimeter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Umfang Brutto\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Perimeter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"周辺長\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossPerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.NetPerimeter\", \"NetPerimeter\");\r\n            ifcPSE.PropertyName = \"NetPerimeter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Umfang Netto\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Perimeter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味周辺長\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetPerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.GrossFloorArea\", \"GrossFloorArea\");\r\n            ifcPSE.PropertyName = \"GrossFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bodenfläche Brutto\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Floor Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"床面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.NetFloorArea\", \"NetFloorArea\");\r\n            ifcPSE.PropertyName = \"NetFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bodenfläche Netto\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Floor Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味床面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.GrossWallArea\", \"GrossWallArea\");\r\n            ifcPSE.PropertyName = \"GrossWallArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Senkrechte Fläche Brutto\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Wall Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"壁面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWallAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.NetWallArea\", \"NetWallArea\");\r\n            ifcPSE.PropertyName = \"NetWallArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Senkrechte Fläche Netto\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Wall Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味壁面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWallAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.GrossCeilingArea\", \"GrossCeilingArea\");\r\n            ifcPSE.PropertyName = \"GrossCeilingArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Deckenfläche Brutto\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Ceiling Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"天井面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossCeilingAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.NetCeilingArea\", \"NetCeilingArea\");\r\n            ifcPSE.PropertyName = \"NetCeilingArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Deckenfläche Netto\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Ceiling Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味天井面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetCeilingAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttovolumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Volume\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"体積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettovolumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Volume\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味体積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SpaceBaseQuantities\"))\r\n         {\r\n            qtoSetSpaceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.AverageHeight\", \"AverageHeight\");\r\n            ifcPSE.PropertyName = \"AverageHeight\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AverageHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.AverageClearHeight\", \"AverageClearHeight\");\r\n            ifcPSE.PropertyName = \"AverageClearHeight\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AverageClearHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.AverageGrossHeight\", \"AverageGrossHeight\");\r\n            ifcPSE.PropertyName = \"AverageGrossHeight\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AverageGrossHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.Perimeter\", \"Perimeter\");\r\n            ifcPSE.PropertyName = \"Perimeter\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.Area\", \"Area\");\r\n            ifcPSE.PropertyName = \"Area\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.Volume\", \"Volume\");\r\n            ifcPSE.PropertyName = \"Volume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SpaceBaseQuantities\"))\r\n         {\r\n            qtoSetSpaceBaseQuantities.Name = \"BaseQuantities\";\r\n\r\n            qtoSetSpaceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSpace);\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.ClearHeight\", \"ClearHeight\");\r\n            ifcPSE.PropertyName = \"ClearHeight\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.ClearHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.GrossPerimeter\", \"GrossPerimeter\");\r\n            ifcPSE.PropertyName = \"GrossPerimeter\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossPerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.NetPerimeter\", \"NetPerimeter\");\r\n            ifcPSE.PropertyName = \"NetPerimeter\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetPerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.GrossFloorArea\", \"GrossFloorArea\");\r\n            ifcPSE.PropertyName = \"GrossFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.NetFloorArea\", \"NetFloorArea\");\r\n            ifcPSE.PropertyName = \"NetFloorArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetFloorAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.GrossCeilingArea\", \"GrossCeilingArea\");\r\n            ifcPSE.PropertyName = \"GrossCeilingArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossCeilingAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.NetCeilingArea\", \"NetCeilingArea\");\r\n            ifcPSE.PropertyName = \"NetCeilingArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetCeilingAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.GrossWallArea\", \"GrossWallArea\");\r\n            ifcPSE.PropertyName = \"GrossWallArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWallAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.NetWallArea\", \"NetWallArea\");\r\n            ifcPSE.PropertyName = \"NetWallArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWallAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetSpaceBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_SpaceHeaterBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetSpaceHeaterBaseQuantities = new QuantityDescription();\r\n         qtoSetSpaceHeaterBaseQuantities.Name = \"Qto_SpaceHeaterBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SpaceHeaterBaseQuantities\"))\r\n         {\r\n            qtoSetSpaceHeaterBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSpaceHeater);\r\n            qtoSetSpaceHeaterBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSpaceHeaterType);\r\n            qtoSetSpaceHeaterBaseQuantities.ObjectType = \"IfcSpaceHeater,IfcSpaceHeaterType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceHeaterBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceHeaterBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceHeaterBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceHeaterBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceHeaterBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceHeaterBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SpaceHeaterBaseQuantities\"))\r\n         {\r\n            qtoSetSpaceHeaterBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSpaceHeater);\r\n            qtoSetSpaceHeaterBaseQuantities.ObjectType = \"IfcSpaceHeater\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceHeaterBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceHeaterBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceHeaterBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceHeaterBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpaceHeaterBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpaceHeaterBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetSpaceHeaterBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_SpatialZoneBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetSpatialZoneBaseQuantities = new QuantityDescription();\r\n         qtoSetSpatialZoneBaseQuantities.Name = \"Qto_SpatialZoneBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SpatialZoneBaseQuantities\"))\r\n         {\r\n            qtoSetSpatialZoneBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSpatialZone);\r\n            qtoSetSpatialZoneBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSpatialZoneType);\r\n            qtoSetSpatialZoneBaseQuantities.ObjectType = \"IfcSpatialZone,IfcSpatialZoneType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SpatialZoneBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpatialZoneBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpatialZoneBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpatialZoneBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SpatialZoneBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSpatialZoneBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetSpatialZoneBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_StackTerminalBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetStackTerminalBaseQuantities = new QuantityDescription();\r\n         qtoSetStackTerminalBaseQuantities.Name = \"Qto_StackTerminalBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_StackTerminalBaseQuantities\"))\r\n         {\r\n            qtoSetStackTerminalBaseQuantities.EntityTypes.Add(IFCEntityType.IfcStackTerminal);\r\n            qtoSetStackTerminalBaseQuantities.EntityTypes.Add(IFCEntityType.IfcStackTerminalType);\r\n            qtoSetStackTerminalBaseQuantities.ObjectType = \"IfcStackTerminal,IfcStackTerminalType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_StackTerminalBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetStackTerminalBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_StackTerminalBaseQuantities\"))\r\n         {\r\n            qtoSetStackTerminalBaseQuantities.EntityTypes.Add(IFCEntityType.IfcStackTerminal);\r\n            qtoSetStackTerminalBaseQuantities.ObjectType = \"IfcStackTerminal\";\r\n            ifcPSE = new QuantityEntry(\"Qto_StackTerminalBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetStackTerminalBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetStackTerminalBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_StairFlightBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetStairFlightBaseQuantities = new QuantityDescription();\r\n         qtoSetStairFlightBaseQuantities.Name = \"Qto_StairFlightBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_StairFlightBaseQuantities\"))\r\n         {\r\n            qtoSetStairFlightBaseQuantities.EntityTypes.Add(IFCEntityType.IfcStairFlight);\r\n            qtoSetStairFlightBaseQuantities.EntityTypes.Add(IFCEntityType.IfcStairFlightType);\r\n            qtoSetStairFlightBaseQuantities.ObjectType = \"IfcStairFlight,IfcStairFlightType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_StairFlightBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetStairFlightBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_StairFlightBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetStairFlightBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_StairFlightBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetStairFlightBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_StairFlightBaseQuantities\"))\r\n         {\r\n            qtoSetStairFlightBaseQuantities.EntityTypes.Add(IFCEntityType.IfcStairFlight);\r\n            qtoSetStairFlightBaseQuantities.ObjectType = \"IfcStairFlight\";\r\n            ifcPSE = new QuantityEntry(\"Qto_StairFlightBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Länge\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetStairFlightBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_StairFlightBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttovolumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetStairFlightBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_StairFlightBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettovolumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Volume\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetStairFlightBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetStairFlightBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_SurfaceFeatureBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetSurfaceFeatureBaseQuantities = new QuantityDescription();\r\n         qtoSetSurfaceFeatureBaseQuantities.Name = \"Qto_SurfaceFeatureBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SurfaceFeatureBaseQuantities\"))\r\n         {\r\n            qtoSetSurfaceFeatureBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSurfaceFeature);\r\n            qtoSetSurfaceFeatureBaseQuantities.ObjectType = \"IfcSurfaceFeature\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SurfaceFeatureBaseQuantities.Area\", \"Area\");\r\n            ifcPSE.PropertyName = \"Area\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSurfaceFeatureBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_SurfaceFeatureBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSurfaceFeatureBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetSurfaceFeatureBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_SwitchingDeviceBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetSwitchingDeviceBaseQuantities = new QuantityDescription();\r\n         qtoSetSwitchingDeviceBaseQuantities.Name = \"Qto_SwitchingDeviceBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SwitchingDeviceBaseQuantities\"))\r\n         {\r\n            qtoSetSwitchingDeviceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            qtoSetSwitchingDeviceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSwitchingDeviceType);\r\n            qtoSetSwitchingDeviceBaseQuantities.ObjectType = \"IfcSwitchingDevice,IfcSwitchingDeviceType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SwitchingDeviceBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSwitchingDeviceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_SwitchingDeviceBaseQuantities\"))\r\n         {\r\n            qtoSetSwitchingDeviceBaseQuantities.EntityTypes.Add(IFCEntityType.IfcSwitchingDevice);\r\n            qtoSetSwitchingDeviceBaseQuantities.ObjectType = \"IfcSwitchingDevice\";\r\n            ifcPSE = new QuantityEntry(\"Qto_SwitchingDeviceBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetSwitchingDeviceBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetSwitchingDeviceBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_TankBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetTankBaseQuantities = new QuantityDescription();\r\n         qtoSetTankBaseQuantities.Name = \"Qto_TankBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_TankBaseQuantities\"))\r\n         {\r\n            qtoSetTankBaseQuantities.EntityTypes.Add(IFCEntityType.IfcTank);\r\n            qtoSetTankBaseQuantities.EntityTypes.Add(IFCEntityType.IfcTankType);\r\n            qtoSetTankBaseQuantities.ObjectType = \"IfcTank,IfcTankType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_TankBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetTankBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_TankBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetTankBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_TankBaseQuantities.TotalSurfaceArea\", \"TotalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"TotalSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetTankBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_TankBaseQuantities\"))\r\n         {\r\n            qtoSetTankBaseQuantities.EntityTypes.Add(IFCEntityType.IfcTank);\r\n            qtoSetTankBaseQuantities.ObjectType = \"IfcTank\";\r\n            ifcPSE = new QuantityEntry(\"Qto_TankBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetTankBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_TankBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetTankBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_TankBaseQuantities.TotalSurfaceArea\", \"TotalSurfaceArea\");\r\n            ifcPSE.PropertyName = \"TotalSurfaceArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Total Surface Area\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.TotalSurfaceAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetTankBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetTankBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_TransformerBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetTransformerBaseQuantities = new QuantityDescription();\r\n         qtoSetTransformerBaseQuantities.Name = \"Qto_TransformerBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_TransformerBaseQuantities\"))\r\n         {\r\n            qtoSetTransformerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcTransformer);\r\n            qtoSetTransformerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcTransformerType);\r\n            qtoSetTransformerBaseQuantities.ObjectType = \"IfcTransformer,IfcTransformerType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_TransformerBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetTransformerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_TransformerBaseQuantities\"))\r\n         {\r\n            qtoSetTransformerBaseQuantities.EntityTypes.Add(IFCEntityType.IfcTransformer);\r\n            qtoSetTransformerBaseQuantities.ObjectType = \"IfcTransformer\";\r\n            ifcPSE = new QuantityEntry(\"Qto_TransformerBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetTransformerBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetTransformerBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_TubeBundleBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetTubeBundleBaseQuantities = new QuantityDescription();\r\n         qtoSetTubeBundleBaseQuantities.Name = \"Qto_TubeBundleBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_TubeBundleBaseQuantities\"))\r\n         {\r\n            qtoSetTubeBundleBaseQuantities.EntityTypes.Add(IFCEntityType.IfcTubeBundle);\r\n            qtoSetTubeBundleBaseQuantities.EntityTypes.Add(IFCEntityType.IfcTubeBundleType);\r\n            qtoSetTubeBundleBaseQuantities.ObjectType = \"IfcTubeBundle,IfcTubeBundleType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_TubeBundleBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetTubeBundleBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_TubeBundleBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetTubeBundleBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_TubeBundleBaseQuantities\"))\r\n         {\r\n            qtoSetTubeBundleBaseQuantities.EntityTypes.Add(IFCEntityType.IfcTubeBundle);\r\n            qtoSetTubeBundleBaseQuantities.ObjectType = \"IfcTubeBundle\";\r\n            ifcPSE = new QuantityEntry(\"Qto_TubeBundleBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetTubeBundleBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_TubeBundleBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetTubeBundleBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetTubeBundleBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_UnitaryControlElementBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetUnitaryControlElementBaseQuantities = new QuantityDescription();\r\n         qtoSetUnitaryControlElementBaseQuantities.Name = \"Qto_UnitaryControlElementBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_UnitaryControlElementBaseQuantities\"))\r\n         {\r\n            qtoSetUnitaryControlElementBaseQuantities.EntityTypes.Add(IFCEntityType.IfcUnitaryControlElement);\r\n            qtoSetUnitaryControlElementBaseQuantities.EntityTypes.Add(IFCEntityType.IfcUnitaryControlElementType);\r\n            qtoSetUnitaryControlElementBaseQuantities.ObjectType = \"IfcUnitaryControlElement,IfcUnitaryControlElementType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_UnitaryControlElementBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetUnitaryControlElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_UnitaryControlElementBaseQuantities\"))\r\n         {\r\n            qtoSetUnitaryControlElementBaseQuantities.EntityTypes.Add(IFCEntityType.IfcUnitaryControlElement);\r\n            qtoSetUnitaryControlElementBaseQuantities.ObjectType = \"IfcUnitaryControlElement\";\r\n            ifcPSE = new QuantityEntry(\"Qto_UnitaryControlElementBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetUnitaryControlElementBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetUnitaryControlElementBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_UnitaryEquipmentBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetUnitaryEquipmentBaseQuantities = new QuantityDescription();\r\n         qtoSetUnitaryEquipmentBaseQuantities.Name = \"Qto_UnitaryEquipmentBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_UnitaryEquipmentBaseQuantities\"))\r\n         {\r\n            qtoSetUnitaryEquipmentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcUnitaryEquipment);\r\n            qtoSetUnitaryEquipmentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcUnitaryEquipmentType);\r\n            qtoSetUnitaryEquipmentBaseQuantities.ObjectType = \"IfcUnitaryEquipment,IfcUnitaryEquipmentType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_UnitaryEquipmentBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetUnitaryEquipmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_UnitaryEquipmentBaseQuantities\"))\r\n         {\r\n            qtoSetUnitaryEquipmentBaseQuantities.EntityTypes.Add(IFCEntityType.IfcUnitaryEquipment);\r\n            qtoSetUnitaryEquipmentBaseQuantities.ObjectType = \"IfcUnitaryEquipment\";\r\n            ifcPSE = new QuantityEntry(\"Qto_UnitaryEquipmentBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetUnitaryEquipmentBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetUnitaryEquipmentBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_ValveBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetValveBaseQuantities = new QuantityDescription();\r\n         qtoSetValveBaseQuantities.Name = \"Qto_ValveBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ValveBaseQuantities\"))\r\n         {\r\n            qtoSetValveBaseQuantities.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            qtoSetValveBaseQuantities.EntityTypes.Add(IFCEntityType.IfcValveType);\r\n            qtoSetValveBaseQuantities.ObjectType = \"IfcValve,IfcValveType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ValveBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetValveBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_ValveBaseQuantities\"))\r\n         {\r\n            qtoSetValveBaseQuantities.EntityTypes.Add(IFCEntityType.IfcValve);\r\n            qtoSetValveBaseQuantities.ObjectType = \"IfcValve\";\r\n            ifcPSE = new QuantityEntry(\"Qto_ValveBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetValveBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetValveBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_VehicleBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetVehicleBaseQuantities = new QuantityDescription();\r\n         qtoSetVehicleBaseQuantities.Name = \"Qto_VehicleBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_VehicleBaseQuantities\"))\r\n         {\r\n            qtoSetVehicleBaseQuantities.EntityTypes.Add(IFCEntityType.IfcVehicle);\r\n            qtoSetVehicleBaseQuantities.EntityTypes.Add(IFCEntityType.IfcVehicle);\r\n            qtoSetVehicleBaseQuantities.EntityTypes.Add(IFCEntityType.IfcVehicle);\r\n            qtoSetVehicleBaseQuantities.EntityTypes.Add(IFCEntityType.IfcVehicle);\r\n            qtoSetVehicleBaseQuantities.EntityTypes.Add(IFCEntityType.IfcVehicle);\r\n            qtoSetVehicleBaseQuantities.EntityTypes.Add(IFCEntityType.IfcVehicleType);\r\n            qtoSetVehicleBaseQuantities.EntityTypes.Add(IFCEntityType.IfcVehicleType);\r\n            qtoSetVehicleBaseQuantities.EntityTypes.Add(IFCEntityType.IfcVehicleType);\r\n            qtoSetVehicleBaseQuantities.EntityTypes.Add(IFCEntityType.IfcVehicleType);\r\n            qtoSetVehicleBaseQuantities.EntityTypes.Add(IFCEntityType.IfcVehicleType);\r\n            qtoSetVehicleBaseQuantities.ObjectType = \"IfcVehicle\";\r\n            qtoSetVehicleBaseQuantities.PredefinedType = \"VEHICLETRACKED\";\r\n            ifcPSE = new QuantityEntry(\"Qto_VehicleBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetVehicleBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_VehicleBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetVehicleBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_VehicleBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetVehicleBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetVehicleBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_VibrationIsolatorBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetVibrationIsolatorBaseQuantities = new QuantityDescription();\r\n         qtoSetVibrationIsolatorBaseQuantities.Name = \"Qto_VibrationIsolatorBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_VibrationIsolatorBaseQuantities\"))\r\n         {\r\n            qtoSetVibrationIsolatorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcVibrationIsolator);\r\n            qtoSetVibrationIsolatorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcVibrationIsolatorType);\r\n            qtoSetVibrationIsolatorBaseQuantities.ObjectType = \"IfcVibrationIsolator,IfcVibrationIsolatorType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_VibrationIsolatorBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetVibrationIsolatorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_VibrationIsolatorBaseQuantities\"))\r\n         {\r\n            qtoSetVibrationIsolatorBaseQuantities.EntityTypes.Add(IFCEntityType.IfcVibrationIsolator);\r\n            qtoSetVibrationIsolatorBaseQuantities.ObjectType = \"IfcVibrationIsolator\";\r\n            ifcPSE = new QuantityEntry(\"Qto_VibrationIsolatorBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetVibrationIsolatorBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetVibrationIsolatorBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_VolumetricStratumBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetVolumetricStratumBaseQuantities = new QuantityDescription();\r\n         qtoSetVolumetricStratumBaseQuantities.Name = \"Qto_VolumetricStratumBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_VolumetricStratumBaseQuantities\"))\r\n         {\r\n            qtoSetVolumetricStratumBaseQuantities.EntityTypes.Add(IFCEntityType.IfcGeotechnicalStratum);\r\n            qtoSetVolumetricStratumBaseQuantities.ObjectType = \"IfcGeotechnicalStratum\";\r\n            ifcPSE = new QuantityEntry(\"Qto_VolumetricStratumBaseQuantities.Area\", \"Area\");\r\n            ifcPSE.PropertyName = \"Area\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetVolumetricStratumBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_VolumetricStratumBaseQuantities.Mass\", \"Mass\");\r\n            ifcPSE.PropertyName = \"Mass\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.MassCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetVolumetricStratumBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_VolumetricStratumBaseQuantities.PlanArea\", \"PlanArea\");\r\n            ifcPSE.PropertyName = \"PlanArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PlanAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetVolumetricStratumBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_VolumetricStratumBaseQuantities.Volume\", \"Volume\");\r\n            ifcPSE.PropertyName = \"Volume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.VolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetVolumetricStratumBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetVolumetricStratumBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_WallBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetWallBaseQuantities = new QuantityDescription();\r\n         qtoSetWallBaseQuantities.Name = \"Qto_WallBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_WallBaseQuantities\"))\r\n         {\r\n            qtoSetWallBaseQuantities.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            qtoSetWallBaseQuantities.EntityTypes.Add(IFCEntityType.IfcWallType);\r\n            qtoSetWallBaseQuantities.ObjectType = \"IfcWall,IfcWallType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.GrossFootPrintArea\", \"GrossFootPrintArea\");\r\n            ifcPSE.PropertyName = \"GrossFootPrintArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossFootPrintAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NetFootPrintArea\", \"NetFootPrintArea\");\r\n            ifcPSE.PropertyName = \"NetFootPrintArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetFootPrintAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.GrossSideArea\", \"GrossSideArea\");\r\n            ifcPSE.PropertyName = \"GrossSideArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSideAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NetSideArea\", \"NetSideArea\");\r\n            ifcPSE.PropertyName = \"NetSideArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSideAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_WallBaseQuantities\"))\r\n         {\r\n            qtoSetWallBaseQuantities.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            qtoSetWallBaseQuantities.ObjectType = \"IfcWall\";\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.Length\", \"Length\");\r\n            ifcPSE.PropertyName = \"Length\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Länge\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Length\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"長さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.LengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Dicke\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Höhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"高さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.GrossFootprintArea\", \"GrossFootprintArea\");\r\n            ifcPSE.PropertyName = \"GrossFootprintArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttogrundfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Footprint Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"フットプリント面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossFootprintAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NetFootprintArea\", \"NetFootprintArea\");\r\n            ifcPSE.PropertyName = \"NetFootprintArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettogrundfläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Footprint Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味フットプリント面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetFootprintAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.GrossSideArea\", \"GrossSideArea\");\r\n            ifcPSE.PropertyName = \"GrossSideArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttofläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Side Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"側面面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSideAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NetSideArea\", \"NetSideArea\");\r\n            ifcPSE.PropertyName = \"NetSideArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettofläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Side Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味側面面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSideAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttovolumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Volume\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"体積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettovolumen\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Volume\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味体積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Bruttogewicht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"重量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NetWeight\", \"NetWeight\");\r\n            ifcPSE.PropertyName = \"NetWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Nettogewicht\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Net Weight\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"正味重量\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_WallBaseQuantities\"))\r\n         {\r\n            qtoSetWallBaseQuantities.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            qtoSetWallBaseQuantities.EntityTypes.Add(IFCEntityType.IfcWallStandardCase);\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.GrossFootprintArea\", \"GrossFootprintArea\");\r\n            ifcPSE.PropertyName = \"GrossFootprintArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossFootprintAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NetFootprintArea\", \"NetFootprintArea\");\r\n            ifcPSE.PropertyName = \"NetFootprintArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetFootprintAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.GrossSideAreaLeft\", \"GrossSideAreaLeft\");\r\n            ifcPSE.PropertyName = \"GrossSideAreaLeft\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSideAreaLeftCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NetSideAreaLeft\", \"NetSideAreaLeft\");\r\n            ifcPSE.PropertyName = \"NetSideAreaLeft\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSideAreaLeftCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.GrossSideAreaRight\", \"GrossSideAreaRight\");\r\n            ifcPSE.PropertyName = \"GrossSideAreaRight\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSideAreaRightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NetSideAreaRight\", \"NetSideAreaRight\");\r\n            ifcPSE.PropertyName = \"NetSideAreaRight\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSideAreaRightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_WallBaseQuantities\"))\r\n         {\r\n            qtoSetWallBaseQuantities.Name = \"BaseQuantities\";\r\n\r\n            qtoSetWallBaseQuantities.EntityTypes.Add(IFCEntityType.IfcWall);\r\n            qtoSetWallBaseQuantities.EntityTypes.Add(IFCEntityType.IfcWallStandardCase);\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NominalLength\", \"NominalLength\");\r\n            ifcPSE.PropertyName = \"NominalLength\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalLengthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NominalWidth\", \"NominalWidth\");\r\n            ifcPSE.PropertyName = \"NominalWidth\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalWidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NominalHeight\", \"NominalHeight\");\r\n            ifcPSE.PropertyName = \"NominalHeight\";\r\n            ifcPSE.QuantityType = QuantityType.PositiveLength;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NominalHeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.GrossFootprintArea\", \"GrossFootprintArea\");\r\n            ifcPSE.PropertyName = \"GrossFootprintArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossFootprintAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NetFootprintArea\", \"NetFootprintArea\");\r\n            ifcPSE.PropertyName = \"NetFootprintArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetFootprintAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.GrossSideArea\", \"GrossSideArea\");\r\n            ifcPSE.PropertyName = \"GrossSideArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSideAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NetSideArea\", \"NetSideArea\");\r\n            ifcPSE.PropertyName = \"NetSideArea\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSideAreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.GrossSideAreaLeft\", \"GrossSideAreaLeft\");\r\n            ifcPSE.PropertyName = \"GrossSideAreaLeft\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSideAreaLeftCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NetSideAreaLeft\", \"NetSideAreaLeft\");\r\n            ifcPSE.PropertyName = \"NetSideAreaLeft\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSideAreaLeftCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.GrossSideAreaRight\", \"GrossSideAreaRight\");\r\n            ifcPSE.PropertyName = \"GrossSideAreaRight\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossSideAreaRightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NetSideAreaRight\", \"NetSideAreaRight\");\r\n            ifcPSE.PropertyName = \"NetSideAreaRight\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetSideAreaRightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.GrossVolume\", \"GrossVolume\");\r\n            ifcPSE.PropertyName = \"GrossVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WallBaseQuantities.NetVolume\", \"NetVolume\");\r\n            ifcPSE.PropertyName = \"NetVolume\";\r\n            ifcPSE.QuantityType = QuantityType.Volume;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.NetVolumeCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWallBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetWallBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_WasteTerminalBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetWasteTerminalBaseQuantities = new QuantityDescription();\r\n         qtoSetWasteTerminalBaseQuantities.Name = \"Qto_WasteTerminalBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_WasteTerminalBaseQuantities\"))\r\n         {\r\n            qtoSetWasteTerminalBaseQuantities.EntityTypes.Add(IFCEntityType.IfcWasteTerminal);\r\n            qtoSetWasteTerminalBaseQuantities.EntityTypes.Add(IFCEntityType.IfcWasteTerminalType);\r\n            qtoSetWasteTerminalBaseQuantities.ObjectType = \"IfcWasteTerminal,IfcWasteTerminalType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_WasteTerminalBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWasteTerminalBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_WasteTerminalBaseQuantities\"))\r\n         {\r\n            qtoSetWasteTerminalBaseQuantities.EntityTypes.Add(IFCEntityType.IfcWasteTerminal);\r\n            qtoSetWasteTerminalBaseQuantities.ObjectType = \"IfcWasteTerminal\";\r\n            ifcPSE = new QuantityEntry(\"Qto_WasteTerminalBaseQuantities.GrossWeight\", \"GrossWeight\");\r\n            ifcPSE.PropertyName = \"GrossWeight\";\r\n            ifcPSE.QuantityType = QuantityType.Mass;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Gross Weight\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.GrossWeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWasteTerminalBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetWasteTerminalBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n      private static void InitQto_WindowBaseQuantities(IList<QuantityDescription> quantitySets)\r\n      {\r\n         QuantityDescription qtoSetWindowBaseQuantities = new QuantityDescription();\r\n         qtoSetWindowBaseQuantities.Name = \"Qto_WindowBaseQuantities\";\r\n         QuantityEntry ifcPSE = null;\r\n         Type calcType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_WindowBaseQuantities\"))\r\n         {\r\n            qtoSetWindowBaseQuantities.EntityTypes.Add(IFCEntityType.IfcWindow);\r\n            qtoSetWindowBaseQuantities.EntityTypes.Add(IFCEntityType.IfcWindowType);\r\n            qtoSetWindowBaseQuantities.ObjectType = \"IfcWindow,IfcWindowType\";\r\n            ifcPSE = new QuantityEntry(\"Qto_WindowBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWindowBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WindowBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWindowBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WindowBaseQuantities.Perimeter\", \"Perimeter\");\r\n            ifcPSE.PropertyName = \"Perimeter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWindowBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WindowBaseQuantities.Area\", \"Area\");\r\n            ifcPSE.PropertyName = \"Area\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWindowBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.AllowPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"Qto_WindowBaseQuantities\"))\r\n         {\r\n            qtoSetWindowBaseQuantities.EntityTypes.Add(IFCEntityType.IfcWindow);\r\n            qtoSetWindowBaseQuantities.ObjectType = \"IfcWindow\";\r\n            ifcPSE = new QuantityEntry(\"Qto_WindowBaseQuantities.Width\", \"Width\");\r\n            ifcPSE.PropertyName = \"Width\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Breite\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Width\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"幅\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.WidthCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWindowBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WindowBaseQuantities.Height\", \"Height\");\r\n            ifcPSE.PropertyName = \"Height\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Höhe\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Height\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"高さ\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.HeightCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWindowBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WindowBaseQuantities.Perimeter\", \"Perimeter\");\r\n            ifcPSE.PropertyName = \"Perimeter\";\r\n            ifcPSE.QuantityType = QuantityType.Length;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Umfang\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Perimeter\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"周囲長\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.PerimeterCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWindowBaseQuantities.AddEntry(ifcPSE);\r\n\r\n            ifcPSE = new QuantityEntry(\"Qto_WindowBaseQuantities.Area\", \"Area\");\r\n            ifcPSE.PropertyName = \"Area\";\r\n            ifcPSE.QuantityType = QuantityType.Area;\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.German, \"Fläche\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.English_USA, \"Area\");\r\n            ifcPSE.AddLocalizedParameterName(LanguageType.Japanese, \"面積\");\r\n            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\"Revit.IFC.Export.Exporter.PropertySet.Calculators.AreaCalculator\");\r\n            if (calcType != null)\r\n               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\r\n            qtoSetWindowBaseQuantities.AddEntry(ifcPSE);\r\n\r\n         }\r\n         if (ifcPSE != null)\r\n         {\r\n            quantitySets.Add(qtoSetWindowBaseQuantities);\r\n         }\r\n      }\r\n\r\n\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/ExtrusionExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.ApplicationServices;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   public enum GenerateAdditionalInfo\r\n   {\r\n      GenerateFootprint = 0x001,    // for backward compatibility, generate footprint implies generate body\r\n      GenerateProfileDef = 0x010,   // for backward compatibility, generate profiledef implies generate body\r\n      GenerateBody = 0x100,          // explicit info to generate body. In IFC4RV if the body will be skipped, it will be set to ~0x100\r\n      None = 0x00\r\n   }\r\n\r\n   /// <summary>\r\n   /// Provides methods to export extrusions.\r\n   /// </summary>\r\n   class ExtrusionExporter\r\n   {\r\n      // This is intended to sort already known unique PlanarFaces by FaceNormal, so that\r\n      // we can control the order that clip planes are created in.\r\n      // If we do have multiple faces with the same normal, use Origin as a tie-breaker.\r\n      // If we do have mutliple faces with the same normal and origin, the user will have to check for this condition.\r\n      public class PlanarFaceClipPlaneComparer : IComparer<PlanarFace>\r\n      {\r\n         public int Compare(PlanarFace face1, PlanarFace face2)\r\n         {\r\n            if (face1 == null)\r\n            {\r\n               if (face2 == null)\r\n                  return 0;\r\n               else\r\n                  return -1;\r\n            }\r\n            else if (face2 == null)\r\n               return 1;\r\n            else\r\n            {\r\n               // Check normal first.\r\n               XYZ faceNormal1 = face1.FaceNormal;\r\n               XYZ faceNormal2 = face2.FaceNormal;\r\n               if (!MathUtil.IsAlmostEqual(faceNormal1.Z, faceNormal2.Z))\r\n                  return faceNormal1.Z < faceNormal2.Z ? -1 : 1;\r\n               if (!MathUtil.IsAlmostEqual(faceNormal1.X, faceNormal2.X))\r\n                  return faceNormal1.X < faceNormal2.X ? -1 : 1;\r\n               if (!MathUtil.IsAlmostEqual(faceNormal1.Y, faceNormal2.Y))\r\n                  return faceNormal1.Y < faceNormal2.Y ? -1 : 1;\r\n\r\n               // Unexpected (unless the faces are the same), but check origin if normal is the same.\r\n               XYZ faceOrigin1 = face1.Origin;\r\n               XYZ faceOrigin2 = face2.Origin;\r\n               if (!MathUtil.IsAlmostEqual(faceOrigin1.Z, faceOrigin2.Z))\r\n                  return faceOrigin1.Z < faceOrigin2.Z ? -1 : 1;\r\n               if (!MathUtil.IsAlmostEqual(faceOrigin1.X, faceOrigin2.X))\r\n                  return faceOrigin1.X < faceOrigin2.X ? -1 : 1;\r\n               if (!MathUtil.IsAlmostEqual(faceOrigin1.Y, faceOrigin2.Y))\r\n                  return faceOrigin1.Y < faceOrigin2.Y ? -1 : 1;\r\n\r\n               return 0;\r\n            }\r\n         }\r\n      }\r\n\r\n      // Sort collections of PlanarFaces so that we can create clip planes in consistent orders.\r\n      private class PlanarFaceCollectionComparer : IComparer<ICollection<PlanarFace>>\r\n      {\r\n         public int Compare(ICollection<PlanarFace> faceCollection1, ICollection<PlanarFace> faceCollection2)\r\n         {\r\n            if (faceCollection1 == null)\r\n            {\r\n               if (faceCollection2 == null)\r\n                  return 0;\r\n               else\r\n                  return -1;\r\n            }\r\n            else if (faceCollection2 == null)\r\n               return 1;\r\n\r\n            // Check count first.\r\n            if (faceCollection1.Count != faceCollection2.Count)\r\n               return (faceCollection1.Count < faceCollection2.Count) ? -1 : 1;\r\n\r\n            // Check the first PlanarFace.\r\n            PlanarFaceClipPlaneComparer comparer = new PlanarFaceClipPlaneComparer();\r\n            return comparer.Compare(faceCollection1.First(), faceCollection2.First());\r\n         }\r\n      }\r\n\r\n      private static bool CurveLoopIsARectangle(CurveLoop curveLoop, out IList<int> cornerIndices)\r\n      {\r\n         cornerIndices = new List<int>(4);\r\n\r\n         // looking for four orthogonal lines in one curve loop.\r\n         int sz = curveLoop.Count();\r\n         if (sz < 4)\r\n            return false;\r\n\r\n         IList<Line> lines = new List<Line>();\r\n         foreach (Curve curve in curveLoop)\r\n         {\r\n            if (!(curve is Line))\r\n               return false;\r\n\r\n            lines.Add(curve as Line);\r\n         }\r\n\r\n         sz = lines.Count;\r\n         int numAngles = 0;\r\n\r\n         // Must have 4 right angles found, and all other lines collinear -- if not, not a rectangle.\r\n         for (int ii = 0; ii < sz; ii++)\r\n         {\r\n            double dot = lines[ii].Direction.DotProduct(lines[(ii + 1) % sz].Direction);\r\n            if (MathUtil.IsAlmostZero(dot))\r\n            {\r\n               if (numAngles > 3)\r\n                  return false;\r\n               cornerIndices.Add(ii);\r\n               numAngles++;\r\n            }\r\n            else if (MathUtil.IsAlmostEqual(dot, 1.0))\r\n            {\r\n               XYZ line0End1 = lines[ii].GetEndPoint(1);\r\n               XYZ line1End0 = lines[(ii + 1) % sz].GetEndPoint(0);\r\n               if (!line0End1.IsAlmostEqualTo(line1End0))\r\n                  return false;\r\n            }\r\n            else\r\n               return false;\r\n         }\r\n\r\n         return (numAngles == 4);\r\n      }\r\n\r\n      private static IFCAnyHandle CreateRectangleProfileDefIfPossible(ExporterIFC exporterIFC, string profileName, CurveLoop curveLoop, Transform lcs,\r\n          XYZ projDir)\r\n      {\r\n         IList<int> cornerIndices = null;\r\n         if (!CurveLoopIsARectangle(curveLoop, out cornerIndices))\r\n            return null;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         // for the RectangleProfileDef, we have a special requirement that if the profile is an opening\r\n         // in a wall, then the \"X\" direction of the profile corresponds to the global Z direction (so\r\n         // that reading applications can easily figure out height and width of the opening by reading the\r\n         // X and Y lengths).  As such, we will look at the projection direction; if it is not wholly in the\r\n         // Z direction (as it would be in the case of an opening in the floor, where this is irrelevant), then\r\n         // we will modify the plane's X and Y axes as necessary to ensure that X corresponds to the \"most\" Z\r\n         // direction (and Y still forms a right-handed coordinate system).\r\n         XYZ xDir = lcs.BasisX;\r\n         XYZ yDir = lcs.BasisY;\r\n         XYZ zDir = lcs.BasisZ;\r\n         XYZ orig = lcs.Origin;\r\n\r\n         // if in Z-direction, or |x[2]| > |y[2]|, just use old plane.\r\n         bool flipX = !MathUtil.IsAlmostEqual(Math.Abs(zDir[2]), 1.0) && (Math.Abs(xDir[2]) < Math.Abs(yDir[2]));\r\n\r\n         IList<UV> polylinePts = new List<UV>();\r\n         polylinePts.Add(new UV());\r\n\r\n         int idx = -1, whichCorner = 0;\r\n         foreach (Curve curve in curveLoop)\r\n         {\r\n            idx++;\r\n            if (cornerIndices[whichCorner] != idx)\r\n               continue;\r\n\r\n            whichCorner++;\r\n            Line line = curve as Line;\r\n\r\n            XYZ point = line.GetEndPoint(1);\r\n            UV pointProjUV = GeometryUtil.ProjectPointToXYPlaneOfLCS(lcs, projDir, point);\r\n            if (pointProjUV == null)\r\n               return null;\r\n            pointProjUV = UnitUtil.ScaleLength(pointProjUV);\r\n\r\n            if (whichCorner == 4)\r\n            {\r\n               polylinePts[0] = pointProjUV;\r\n               break;\r\n            }\r\n            else\r\n               polylinePts.Add(pointProjUV);\r\n         }\r\n\r\n         if (polylinePts.Count != 4)\r\n            return null;\r\n\r\n         // get the x and y length vectors.  We may have to reverse them.\r\n         UV xLenVec = polylinePts[1] - polylinePts[0];\r\n         UV yLenVec = polylinePts[3] - polylinePts[0];\r\n         if (flipX)\r\n         {\r\n            UV tmp = xLenVec;\r\n            xLenVec = yLenVec;\r\n            yLenVec = tmp;\r\n         }\r\n\r\n         double xLen = xLenVec.GetLength();\r\n         double yLen = yLenVec.GetLength();\r\n         if (MathUtil.IsAlmostZero(xLen) || MathUtil.IsAlmostZero(yLen))\r\n            return null;\r\n\r\n         List<double> middlePt = [\r\n            (polylinePts[0].U + polylinePts[2].U) / 2,\r\n            (polylinePts[0].V + polylinePts[2].V) / 2\r\n         ];\r\n         IFCAnyHandle location = IFCInstanceExporter.CreateCartesianPoint(file, middlePt);\r\n\r\n         xLenVec = xLenVec.Normalize();\r\n         List<double> measure = [ xLenVec.U, xLenVec.V];\r\n         IFCAnyHandle refDirectionOpt = ExporterUtil.CreateDirection(file, measure);\r\n\r\n         IFCAnyHandle positionHnd = IFCInstanceExporter.CreateAxis2Placement2D(file, location, refDirectionOpt);\r\n\r\n         IFCAnyHandle rectangularProfileDef = IFCInstanceExporter.CreateRectangleProfileDef(file, IFCProfileType.Area, profileName, positionHnd, xLen, yLen);\r\n         return rectangularProfileDef;\r\n      }\r\n\r\n      public static bool GetCenterAndRadiusOfCurveLoop(CurveLoop curveLoop, out XYZ center, out double radius)\r\n      {\r\n         IList<Arc> arcs = new List<Arc>();\r\n         center = new XYZ();\r\n         radius = 0.0;\r\n\r\n         foreach (Curve curve in curveLoop)\r\n         {\r\n            if (!(curve is Arc))\r\n               return false;\r\n\r\n            arcs.Add(curve as Arc);\r\n         }\r\n\r\n         int numArcs = arcs.Count;\r\n         if (numArcs == 0)\r\n            return false;\r\n\r\n         radius = arcs[0].Radius;\r\n         center = arcs[0].Center;\r\n\r\n         for (int ii = 1; ii < numArcs; ii++)\r\n         {\r\n            XYZ newCenter = arcs[ii].Center;\r\n            if (!newCenter.IsAlmostEqualTo(center))\r\n               return false;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      private static IFCAnyHandle CreateCircleBasedProfileDefIfPossible(ExporterIFC exporterIFC, string profileName, CurveLoop curveLoop, Transform lcs,\r\n          XYZ projDir)\r\n      {\r\n         IList<CurveLoop> curveLoops = new List<CurveLoop>() { curveLoop };\r\n         return CreateCircleBasedProfileDefIfPossible(exporterIFC, profileName, curveLoops, lcs, projDir);\r\n      }\r\n\r\n      private static IFCAnyHandle CreateCircleBasedProfileDefIfPossible(ExporterIFC exporterIFC, string profileName, IList<CurveLoop> curveLoops, Transform lcs,\r\n          XYZ projDir)\r\n      {\r\n         int numLoops = curveLoops.Count;\r\n         if (numLoops > 2 || numLoops == 0)\r\n            return null;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         if (curveLoops[0].IsOpen() || (numLoops == 2 && curveLoops[1].IsOpen()))\r\n            return null;\r\n\r\n         XYZ origPlaneNorm = lcs.BasisZ;\r\n         Plane curveLoopPlane = null;\r\n         try\r\n         {\r\n            curveLoopPlane = curveLoops[0].GetPlane();\r\n         }\r\n         catch\r\n         {\r\n            return null;\r\n         }\r\n\r\n         XYZ curveLoopPlaneNorm = curveLoopPlane.Normal;\r\n         if (!MathUtil.IsAlmostEqual(Math.Abs(origPlaneNorm.DotProduct(curveLoopPlaneNorm)), 1.0))\r\n            return null;\r\n\r\n         if (numLoops == 2)\r\n         {\r\n            Plane secondCurveLoopPlane = null;\r\n            try\r\n            {\r\n               secondCurveLoopPlane = curveLoops[1].GetPlane();\r\n            }\r\n            catch\r\n            {\r\n               return null;\r\n            }\r\n\r\n            XYZ secondCurveLoopPlaneNorm = secondCurveLoopPlane.Normal;\r\n            if (!MathUtil.IsAlmostEqual(Math.Abs(curveLoopPlaneNorm.DotProduct(secondCurveLoopPlaneNorm)), 1.0))\r\n               return null;\r\n         }\r\n\r\n         XYZ ctr;\r\n         double radius, innerRadius = 0.0;\r\n         if (!GetCenterAndRadiusOfCurveLoop(curveLoops[0], out ctr, out radius))\r\n            return null;\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n         {\r\n            XYZ projDirToUse = projDir;\r\n            if (curveLoops[0].HasPlane())\r\n            {\r\n               projDirToUse = curveLoops[0].GetPlane().Normal;\r\n            }\r\n\r\n            IFCAnyHandle outerCurve = GeometryUtil.CreateIFCCurveFromCurveLoop(exporterIFC, curveLoops[0], lcs, projDirToUse);\r\n            if (numLoops == 1)\r\n            {\r\n               return IFCInstanceExporter.CreateArbitraryClosedProfileDef(file, IFCProfileType.Area, profileName, outerCurve);\r\n            }\r\n\r\n            IFCAnyHandle innerCurve = GeometryUtil.CreateIFCCurveFromCurveLoop(exporterIFC, curveLoops[1], lcs, projDirToUse);\r\n            HashSet<IFCAnyHandle> innerCurves = new HashSet<IFCAnyHandle>() { innerCurve };\r\n            return IFCInstanceExporter.CreateArbitraryProfileDefWithVoids(file, IFCProfileType.Area, profileName, outerCurve, innerCurves);\r\n         }\r\n         else\r\n         {\r\n            if (numLoops == 2)\r\n            {\r\n               XYZ checkCtr;\r\n               if (!GetCenterAndRadiusOfCurveLoop(curveLoops[1], out checkCtr, out innerRadius))\r\n                  return null;\r\n               if (!ctr.IsAlmostEqualTo(checkCtr))\r\n                  return null;\r\n            }\r\n\r\n            radius = UnitUtil.ScaleLength(radius);\r\n            innerRadius = UnitUtil.ScaleLength(innerRadius);\r\n\r\n            XYZ xDir = lcs.BasisX;\r\n            XYZ yDir = lcs.BasisY;\r\n            XYZ orig = lcs.Origin;\r\n\r\n            ctr -= orig;\r\n\r\n            IList<double> newCtr = new List<double>()\r\n            {\r\n               UnitUtil.ScaleLength(xDir.DotProduct(ctr)),\r\n               UnitUtil.ScaleLength(yDir.DotProduct(ctr))\r\n            };\r\n\r\n            IFCAnyHandle location = IFCInstanceExporter.CreateCartesianPoint(file, newCtr);\r\n\r\n            IList<double> refDir = new List<double>() { 1.0, 0.0 };\r\n            IFCAnyHandle refDirectionOpt = ExporterUtil.CreateDirection(file, refDir);\r\n\r\n            IFCAnyHandle defPosition = IFCInstanceExporter.CreateAxis2Placement2D(file, location, refDirectionOpt);\r\n\r\n            if (MathUtil.IsAlmostZero(innerRadius))\r\n            {\r\n               return IFCInstanceExporter.CreateCircleProfileDef(file, IFCProfileType.Area, profileName, defPosition, radius);\r\n            }\r\n\r\n            return IFCInstanceExporter.CreateCircleHollowProfileDef(file, IFCProfileType.Area, profileName, defPosition, radius, radius - innerRadius);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines if a curveloop can be exported as an I-Shape profile.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"profileName\">The name of the profile.</param>\r\n      /// <param name=\"curveLoop\">The curve loop.</param>\r\n      /// <param name=\"lcs\">The local coordinate system whose XY plane contains the curve loop.</param>\r\n      /// <param name=\"projDir\">The projection direction.</param>\r\n      /// <returns>The IfcIShapeProfileDef, or null if not possible.</returns>\r\n      /// <remarks>This routine works with I-shaped curveloops projected onto origPlane, in either orientation;\r\n      /// it does not work with H-shaped curveloops.</remarks>\r\n      private static IFCAnyHandle CreateIShapeProfileDefIfPossible(ExporterIFC exporterIFC, string profileName, CurveLoop curveLoop, Transform lcs,\r\n          XYZ projDir)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         if (curveLoop.IsOpen())\r\n            return null;\r\n\r\n         if (curveLoop.Count() != 12 && curveLoop.Count() != 16)\r\n            return null;\r\n\r\n         // All curves must be lines, except for 4 optional fillets; get direction vectors and start points.\r\n         XYZ xDir = lcs.BasisX;\r\n         XYZ yDir = lcs.BasisY;\r\n\r\n         // The list of vertices, in order.  startVertex below is the upper-right hand vertex, in UV-space.\r\n         IList<UV> vertices = new List<UV>();\r\n         // The directions in UV of the line segments. directions[ii] is the direction of the line segment starting with vertex[ii].\r\n         IList<UV> directions = new List<UV>();\r\n         // The lengths in UV of the line segments.  lengths[ii] is the length of the line segment starting with vertex[ii].\r\n         IList<double> lengths = new List<double>();\r\n         // turnsCCW[ii] is true if directions[ii+1] is clockwise relative to directions[ii] in UV-space.\r\n         IList<bool> turnsCCW = new List<bool>();\r\n\r\n         IList<Arc> fillets = new List<Arc>();\r\n         IList<int> filletPositions = new List<int>();\r\n\r\n         int idx = 0;\r\n         int startVertex = -1;\r\n         int startFillet = -1;\r\n         UV upperRight = null;\r\n         double lowerBoundU = 1e+30;\r\n         double upperBoundU = -1e+30;\r\n\r\n         foreach (Curve curve in curveLoop)\r\n         {\r\n            if (!(curve is Line))\r\n            {\r\n               if (!(curve is Arc))\r\n                  return null;\r\n               fillets.Add(curve as Arc);\r\n               filletPositions.Add(idx);   // share the index of the next line segment.\r\n               continue;\r\n            }\r\n\r\n            Line line = curve as Line;\r\n\r\n            XYZ point = line.GetEndPoint(0);\r\n            UV pointProjUV = GeometryUtil.ProjectPointToXYPlaneOfLCS(lcs, projDir, point);\r\n            if (pointProjUV == null)\r\n               return null;\r\n            pointProjUV = UnitUtil.ScaleLength(pointProjUV);\r\n\r\n            if ((upperRight == null) || ((pointProjUV.U > upperRight.U - MathUtil.Eps()) && (pointProjUV.V > upperRight.V - MathUtil.Eps())))\r\n            {\r\n               upperRight = pointProjUV;\r\n               startVertex = idx;\r\n               startFillet = filletPositions.Count;\r\n            }\r\n\r\n            if (pointProjUV.U < lowerBoundU)\r\n               lowerBoundU = pointProjUV.U;\r\n            if (pointProjUV.U > upperBoundU)\r\n               upperBoundU = pointProjUV.U;\r\n\r\n            vertices.Add(pointProjUV);\r\n\r\n            XYZ direction3d = line.Direction;\r\n            UV direction = new UV(direction3d.DotProduct(xDir), direction3d.DotProduct(yDir));\r\n            lengths.Add(UnitUtil.ScaleLength(line.Length));\r\n\r\n            bool zeroU = MathUtil.IsAlmostZero(direction.U);\r\n            bool zeroV = MathUtil.IsAlmostZero(direction.V);\r\n            if (zeroU && zeroV)\r\n               return null;\r\n\r\n            // Accept only non-rotated I-Shapes.\r\n            if (!zeroU && !zeroV)\r\n               return null;\r\n\r\n            direction.Normalize();\r\n            if (idx > 0)\r\n            {\r\n               if (!MathUtil.IsAlmostZero(directions[idx - 1].DotProduct(direction)))\r\n                  return null;\r\n               turnsCCW.Add(directions[idx - 1].CrossProduct(direction) > 0);\r\n            }\r\n\r\n            directions.Add(direction);\r\n            idx++;\r\n         }\r\n\r\n         if (directions.Count != 12)\r\n            return null;\r\n\r\n         if (!MathUtil.IsAlmostZero(directions[11].DotProduct(directions[0])))\r\n            return null;\r\n         turnsCCW.Add(directions[11].CrossProduct(directions[0]) > 0);\r\n\r\n         bool firstTurnIsCCW = turnsCCW[startVertex];\r\n\r\n         // Check proper turning of lines.\r\n         // The orientation of the turns should be such that 8 match the original orientation, and 4 go in the opposite direction.\r\n         // The opposite ones are:\r\n         // For I-Shape:\r\n         // if the first turn is clockwise (i.e., in -Y direction): 1,2,7,8.\r\n         // if the first turn is counterclockwise (i.e., in the -X direction): 2,3,8,9.\r\n         // For H-Shape:\r\n         // if the first turn is clockwise (i.e., in -Y direction): 2,3,8,9.\r\n         // if the first turn is counterclockwise (i.e., in the -X direction): 1,2,7,8.\r\n\r\n         int iShapeCCWOffset = firstTurnIsCCW ? 1 : 0;\r\n         int hShapeCWOffset = firstTurnIsCCW ? 0 : 1;\r\n\r\n         bool isIShape = true;\r\n         bool isHShape = false;\r\n\r\n         for (int ii = 0; ii < 12 && isIShape; ii++)\r\n         {\r\n            int currOffset = 12 + (startVertex - iShapeCCWOffset);\r\n            int currIdx = (ii + currOffset) % 12;\r\n            if (currIdx == 1 || currIdx == 2 || currIdx == 7 || currIdx == 8)\r\n            {\r\n               if (firstTurnIsCCW == turnsCCW[ii])\r\n                  isIShape = false;\r\n            }\r\n            else\r\n            {\r\n               if (firstTurnIsCCW == !turnsCCW[ii])\r\n                  isIShape = false;\r\n            }\r\n         }\r\n\r\n         if (!isIShape)\r\n         {\r\n            // Check if it is orientated like an H - if neither I nor H, fail.\r\n            isHShape = true;\r\n\r\n            for (int ii = 0; ii < 12 && isHShape; ii++)\r\n            {\r\n               int currOffset = 12 + (startVertex - hShapeCWOffset);\r\n               int currIdx = (ii + currOffset) % 12;\r\n               if (currIdx == 1 || currIdx == 2 || currIdx == 7 || currIdx == 8)\r\n               {\r\n                  if (firstTurnIsCCW == turnsCCW[ii])\r\n                     return null;\r\n               }\r\n               else\r\n               {\r\n                  if (firstTurnIsCCW == !turnsCCW[ii])\r\n                     return null;\r\n               }\r\n            }\r\n         }\r\n\r\n         // Check that the lengths of parallel and symmetric line segments are equal.\r\n         double overallWidth = 0.0;\r\n         double overallDepth = 0.0;\r\n         double flangeThickness = 0.0;\r\n         double webThickness = 0.0;\r\n\r\n         // I-Shape:\r\n         // CCW pairs:(0,6), (1,5), (1,7), (1,11), (2,4), (2,8), (2,10), (3, 9)\r\n         // CW pairs: (11,5), (0,4), (0,6), (0,10), (1,3), (1,7), (1,9), (2, 8)\r\n         // H-Shape is reversed.\r\n         int cwPairOffset = (firstTurnIsCCW == isIShape) ? 0 : 11;\r\n\r\n         overallWidth = lengths[(startVertex + cwPairOffset) % 12];\r\n         flangeThickness = lengths[(startVertex + 1 + cwPairOffset) % 12];\r\n\r\n         if (isIShape)\r\n         {\r\n            if (firstTurnIsCCW)\r\n            {\r\n               overallDepth = vertices[startVertex].V - vertices[(startVertex + 7) % 12].V;\r\n               webThickness = vertices[(startVertex + 9) % 12].U - vertices[(startVertex + 3) % 12].U;\r\n            }\r\n            else\r\n            {\r\n               overallDepth = vertices[startVertex].V - vertices[(startVertex + 5) % 12].V;\r\n               webThickness = vertices[(startVertex + 2) % 12].U - vertices[(startVertex + 8) % 12].U;\r\n            }\r\n         }\r\n         else\r\n         {\r\n            if (!firstTurnIsCCW)\r\n            {\r\n               overallDepth = vertices[startVertex].U - vertices[(startVertex + 7) % 12].U;\r\n               webThickness = vertices[(startVertex + 9) % 12].V - vertices[(startVertex + 3) % 12].V;\r\n            }\r\n            else\r\n            {\r\n               overallDepth = vertices[startVertex].U - vertices[(startVertex + 5) % 12].U;\r\n               webThickness = vertices[(startVertex + 2) % 12].V - vertices[(startVertex + 8) % 12].V;\r\n            }\r\n         }\r\n\r\n         if (!MathUtil.IsAlmostEqual(overallWidth, lengths[(startVertex + 6 + cwPairOffset) % 12]))\r\n            return null;\r\n         if (!MathUtil.IsAlmostEqual(flangeThickness, lengths[(startVertex + 5 + cwPairOffset) % 12]) ||\r\n             !MathUtil.IsAlmostEqual(flangeThickness, lengths[(startVertex + 7 + cwPairOffset) % 12]) ||\r\n             !MathUtil.IsAlmostEqual(flangeThickness, lengths[(startVertex + 11 + cwPairOffset) % 12]))\r\n            return null;\r\n         double innerTopLeftLength = lengths[(startVertex + 2 + cwPairOffset) % 12];\r\n         if (!MathUtil.IsAlmostEqual(innerTopLeftLength, lengths[(startVertex + 4 + cwPairOffset) % 12]) ||\r\n             !MathUtil.IsAlmostEqual(innerTopLeftLength, lengths[(startVertex + 8 + cwPairOffset) % 12]) ||\r\n             !MathUtil.IsAlmostEqual(innerTopLeftLength, lengths[(startVertex + 10 + cwPairOffset) % 12]))\r\n            return null;\r\n         double iShaftLength = lengths[(startVertex + 3 + cwPairOffset) % 12];\r\n         if (!MathUtil.IsAlmostEqual(iShaftLength, lengths[(startVertex + 9 + cwPairOffset) % 12]))\r\n            return null;\r\n\r\n         // Check fillet validity.\r\n         int numFillets = fillets.Count();\r\n         double? filletRadius = null;\r\n\r\n         if (numFillets != 0)\r\n         {\r\n            if (numFillets != 4)\r\n               return null;\r\n\r\n            // startFillet can have any value from 0 to 4; if it is 4, need to reset it to 0.\r\n\r\n            // The fillet positions relative to the upper right hand corner are:\r\n            // For I-Shape:\r\n            // if the first turn is clockwise (i.e., in -Y direction): 2,3,8,9.\r\n            // if the first turn is counterclockwise (i.e., in the -X direction): 3,4,9,10.\r\n            // For H-Shape:\r\n            // if the first turn is clockwise (i.e., in -Y direction): 3,4,9,10.\r\n            // if the first turn is counterclockwise (i.e., in the -X direction): 2,3,8,9.\r\n            int filletOffset = (isIShape == firstTurnIsCCW) ? 1 : 0;\r\n            if (filletPositions[startFillet % 4] != ((2 + filletOffset + startVertex) % 12) ||\r\n                filletPositions[(startFillet + 1) % 4] != ((3 + filletOffset + startVertex) % 12) ||\r\n                filletPositions[(startFillet + 2) % 4] != ((8 + filletOffset + startVertex) % 12) ||\r\n                filletPositions[(startFillet + 3) % 4] != ((9 + filletOffset + startVertex) % 12))\r\n               return null;\r\n\r\n            double tmpFilletRadius = fillets[0].Radius;\r\n            for (int ii = 1; ii < 4; ii++)\r\n            {\r\n               if (!MathUtil.IsAlmostEqual(tmpFilletRadius, fillets[ii].Radius))\r\n                  return null;\r\n            }\r\n\r\n            if (!MathUtil.IsAlmostZero(tmpFilletRadius))\r\n               filletRadius = UnitUtil.ScaleLength(tmpFilletRadius);\r\n         }\r\n\r\n         XYZ planeNorm = lcs.BasisZ;\r\n         for (int ii = 0; ii < numFillets; ii++)\r\n         {\r\n            bool filletIsCCW = (fillets[ii].Normal.DotProduct(planeNorm) > MathUtil.Eps());\r\n            if (filletIsCCW == firstTurnIsCCW)\r\n               return null;\r\n         }\r\n\r\n         if (MathUtil.IsAlmostZero(overallWidth) || MathUtil.IsAlmostZero(overallDepth) ||\r\n             MathUtil.IsAlmostZero(flangeThickness) || MathUtil.IsAlmostZero(webThickness))\r\n            return null;\r\n\r\n         // We have an I-Shape Profile!\r\n         IList<double> newCtr = new List<double>();\r\n         newCtr.Add((vertices[0].U + vertices[6].U) / 2);\r\n         newCtr.Add((vertices[0].V + vertices[6].V) / 2);\r\n\r\n         IFCAnyHandle location = IFCInstanceExporter.CreateCartesianPoint(file, newCtr);\r\n\r\n         IList<double> refDir = new List<double>();\r\n\r\n         if (isIShape)\r\n         {\r\n            refDir.Add(1.0);\r\n            refDir.Add(0.0);\r\n         }\r\n         else\r\n         {\r\n            refDir.Add(0.0);\r\n            refDir.Add(1.0);\r\n         }\r\n\r\n         IFCAnyHandle refDirectionOpt = ExporterUtil.CreateDirection(file, refDir);\r\n\r\n         IFCAnyHandle positionHnd = IFCInstanceExporter.CreateAxis2Placement2D(file, location, refDirectionOpt);\r\n\r\n         return IFCInstanceExporter.CreateIShapeProfileDef(file, IFCProfileType.Area, profileName, positionHnd,\r\n             overallWidth, overallDepth, webThickness, flangeThickness, filletRadius);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check to see if a curve loop is oriented clockwise.\r\n      /// </summary>\r\n      /// <param name=\"curveLoop\">The curve loop to check.</param>\r\n      /// <param name=\"dir\">The direction to compare against.</param>\r\n      /// <returns>true if the curve loop is clockwise, false otherwise.</returns>\r\n      private static bool? SafeIsCurveLoopClockwise(CurveLoop curveLoop, XYZ dir)\r\n      {\r\n         if (curveLoop == null)\r\n            return null;\r\n\r\n         if (curveLoop.IsOpen())\r\n            return null;\r\n\r\n         if ((curveLoop.Count() == 1) && !(curveLoop.First().IsBound))\r\n            return null;\r\n\r\n         return !curveLoop.IsCounterclockwise(dir);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set the  LCS for the curveloops using the information from the member curves\r\n      /// </summary>\r\n      /// <param name=\"curveLoops\">The curveLoops</param>\r\n      /// <param name=\"extrDir\">Extrusion direction</param>\r\n      /// <param name=\"lcs\">Output parameter for the \"corrected\" LCS</param>\r\n      /// <returns>True if the LCS is set</returns>\r\n      public static bool CorrectCurveLoopOrientation(IList<CurveLoop> curveLoops, XYZ extrDir, out Transform lcs)\r\n      {\r\n         lcs = null;\r\n         int loopSz = curveLoops.Count;\r\n         bool firstCurve = true;\r\n         foreach (CurveLoop curveLoop in curveLoops)\r\n         {\r\n            // ignore checks if unbounded curve.\r\n            if (curveLoop.Count() == 0)\r\n               return false;\r\n\r\n            if (!(curveLoop.First().IsBound))\r\n            {\r\n               if (firstCurve)\r\n               {\r\n                  Arc arc = curveLoop.First() as Arc;\r\n                  if (arc == null)\r\n                     return false;\r\n\r\n                  XYZ xVec = arc.XDirection.Normalize();\r\n                  XYZ yVec = arc.YDirection.Normalize();\r\n                  XYZ center = arc.Center;\r\n\r\n                  lcs = GeometryUtil.CreateTransformFromVectorsAndOrigin(xVec, yVec, xVec.CrossProduct(yVec), center);\r\n               }\r\n            }\r\n            else if (firstCurve)\r\n            {\r\n               if (SafeIsCurveLoopClockwise(curveLoop, extrDir).GetValueOrDefault(false))\r\n               {\r\n                  curveLoop.Flip();\r\n               }\r\n\r\n               try\r\n               {\r\n                  Plane plane = curveLoop.GetPlane();\r\n                  lcs = GeometryUtil.CreateTransformFromPlane(plane);\r\n               }\r\n               catch\r\n               {\r\n                  return false;\r\n               }\r\n               if (lcs == null)\r\n                  return false;\r\n            }\r\n            else\r\n            {\r\n               if (!SafeIsCurveLoopClockwise(curveLoop, extrDir).GetValueOrDefault(true))\r\n               {\r\n                  curveLoop.Flip();\r\n               }\r\n            }\r\n\r\n            firstCurve = false;\r\n         }\r\n\r\n         return (lcs != null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Reduce the number of segments in a curveloop to make it easier to export.  Usually used on curveloops with many line segments.\r\n      /// </summary>\r\n      /// <param name=\"origCurveLoop\">The original curve loop.</param>\r\n      /// <param name=\"forceAllowCoarsen\">If true, we will attempt to coarsen the curve loop regardless of the number of segments.</param>\r\n      /// <returns>The coarsened loop, if creatable; otherwise, the original loop.</returns>\r\n      private static CurveLoop CoarsenCurveLoop(CurveLoop origCurveLoop, bool forceAllowCoarsen)\r\n      {\r\n         // We don't really know if the original CurveLoop is valid, so attempting to create a copy may result in exceptions.\r\n         // Protect against this for each individual loop.\r\n         try\r\n         {\r\n            if (origCurveLoop.Count() <= 24 && !forceAllowCoarsen)\r\n               return origCurveLoop;\r\n\r\n            bool modified = false;\r\n            XYZ lastFirstPt = null;\r\n            Line lastLine = null;\r\n\r\n            IList<Curve> newCurves = new List<Curve>();\r\n            foreach (Curve curve in origCurveLoop)\r\n            {\r\n               // Set lastLine to be the first line in the loop, if it exists.\r\n               // In addition, Revit may have legacy curve segments that are too short.  Don't process them.\r\n               if (!(curve is Line))\r\n               {\r\n                  // Break the polyline, if it existed.\r\n                  if (lastLine != null)\r\n                     newCurves.Add(lastLine);\r\n\r\n                  lastLine = null;\r\n                  lastFirstPt = null;\r\n                  newCurves.Add(curve);\r\n                  continue;\r\n               }\r\n\r\n               if (lastLine == null)\r\n               {\r\n                  lastLine = curve as Line;\r\n                  lastFirstPt = lastLine.GetEndPoint(0);\r\n                  continue;\r\n               }\r\n\r\n               // If we are here, we have two lines in a row.  See if they are almost collinear.\r\n               XYZ currLastPt = curve.GetEndPoint(1);\r\n\r\n               Line combinedLine = null;\r\n\r\n               // If the combined curve is too short, don't merge.\r\n               if (currLastPt.DistanceTo(lastFirstPt) > ExporterCacheManager.Document.Application.ShortCurveTolerance)\r\n               {\r\n                  combinedLine = Line.CreateBound(lastFirstPt, currLastPt);\r\n\r\n                  XYZ currMidPt = curve.GetEndPoint(0);\r\n                  IntersectionResult result = combinedLine.Project(currMidPt);\r\n\r\n                  // If the absolute distance is greater than 1\", or 1% of either line length, use both.\r\n                  double dist = result.Distance;\r\n                  if ((dist > 1.0 / 12.0) || (dist / (lastLine.Length) > 0.01) || (dist / (curve.Length) > 0.01))\r\n                     combinedLine = null;\r\n               }\r\n\r\n               if (combinedLine == null)\r\n               {\r\n                  newCurves.Add(lastLine);\r\n\r\n                  lastLine = curve as Line;\r\n                  lastFirstPt = lastLine.GetEndPoint(0);\r\n\r\n                  continue;\r\n               }\r\n\r\n               // The combined line is now the last line.\r\n               lastLine = combinedLine;\r\n               modified = true;\r\n            }\r\n\r\n            if (modified)\r\n            {\r\n               if (lastLine != null)\r\n                  newCurves.Add(lastLine);\r\n\r\n               CurveLoop modifiedCurveLoop = new CurveLoop();\r\n               foreach (Curve modifiedCurve in newCurves)\r\n                  modifiedCurveLoop.Append(modifiedCurve);\r\n\r\n               return modifiedCurveLoop;\r\n            }\r\n            else\r\n            {\r\n               return origCurveLoop;\r\n            }\r\n         }\r\n         catch\r\n         {\r\n            // If we run into any trouble, use the original loop.  \r\n            // TODO: this may end up failing in the ValidateCurves check that follows, so we may just skip entirely.\r\n            return origCurveLoop;\r\n         }\r\n      }\r\n\r\n      private static IList<CurveLoop> CoarsenCurveLoops(IList<CurveLoop> origCurveLoops)\r\n      {\r\n         // Coarsen loop unless we are at the Highest level of detail.\r\n         if (ExporterCacheManager.ExportOptionsCache.LevelOfDetail == ExportOptionsCache.ExportTessellationLevel.High)\r\n            return origCurveLoops;\r\n\r\n         IList<CurveLoop> modifiedLoops = new List<CurveLoop>();\r\n         foreach (CurveLoop curveLoop in origCurveLoops)\r\n         {\r\n            modifiedLoops.Add(CoarsenCurveLoop(curveLoop, false));\r\n         }\r\n\r\n         return modifiedLoops;\r\n      }\r\n\r\n      private static void CloseAlmostClosedCurveLoops(IList<CurveLoop> curveLoops)\r\n      {\r\n         for (int ii = 0; ii < curveLoops.Count; ii++)\r\n         {\r\n            curveLoops[ii] = CloseAlmostClosedCurveLoop(curveLoops[ii]);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Closes an almost closed curve loop by replacing the first and last segments with a single line.\r\n      /// </summary>\r\n      /// <param name=\"curveLoop\">The curve loop to close.</param>\r\n      /// <returns>A new closed curve loop, or the original loop if it doesn't meet the criteria.</returns>\r\n      private static CurveLoop CloseAlmostClosedCurveLoop(CurveLoop curveLoop)\r\n      {\r\n         if (curveLoop.IsOpen() || curveLoop.Count() < 3)\r\n            return curveLoop;\r\n\r\n         Application app = ExporterCacheManager.Document.Application;\r\n\r\n         IList<Curve> curves = new List<Curve>();\r\n         foreach (Curve curve in curveLoop)\r\n         {\r\n            curves.Add(curve);\r\n         }\r\n\r\n         if (!(curves[0] is Line firstLine) || !(curves[curves.Count - 1] is Line lastLine))\r\n            return curveLoop;\r\n\r\n         XYZ firstPoint = firstLine.GetEndPoint(0);\r\n         XYZ lastPoint = lastLine.GetEndPoint(1);\r\n\r\n         // Check if the distance between first and last points is within acceptable tolerance range\r\n         double distance = firstPoint.DistanceTo(lastPoint);\r\n         if (distance < app.VertexTolerance || distance > app.ShortCurveTolerance)\r\n            return curveLoop;\r\n\r\n         try\r\n         {\r\n            CurveLoop newCurveLoop = new CurveLoop();\r\n\r\n            XYZ firstLineEnd = firstLine.GetEndPoint(1);\r\n            XYZ lastLineBeg = lastLine.GetEndPoint(0);\r\n            Line newLine = Line.CreateBound(lastLineBeg, firstLineEnd);\r\n\r\n            for (int i = 1; i < curves.Count - 1; i++)\r\n            {\r\n               newCurveLoop.Append(curves[i]);\r\n            }\r\n\r\n            newCurveLoop.Append(newLine);\r\n\r\n            return newCurveLoop;\r\n         }\r\n         catch\r\n         {\r\n            return curveLoop;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an extruded solid from a collection of curve loops and a thickness.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"profileName\">The name of the extrusion profile.</param>\r\n      /// <param name=\"origCurveLoops\">The profile boundary curves.</param>\r\n      /// <param name=\"lcs\">The local coordinate system of the boundary curves.</param>\r\n      /// <param name=\"extrDirVec\">The direction of the extrusion.</param>\r\n      /// <param name=\"scaledExtrusionSize\">The thickness of the extrusion, perpendicular to the plane.</param>\r\n      /// <param name=\"allowExportingOnlyOuterLoop\">If this arugment is true, we'll allow exporting the extrusion if only the outer boundary is valid.</param>\r\n      /// <returns>The IfcExtrudedAreaSolid handle.</returns>\r\n      /// <remarks>If the curveLoop plane normal is not the same as the plane direction, only tesellated boundaries are supported.\r\n      /// The allowExportingOnlyOuterLoop is generally false, as its initial scope is intended for use with rooms, areas, and spaces.\r\n      /// It could be extended with appropriate testing.</remarks> \r\n      public static IFCAnyHandle CreateExtrudedSolidFromCurveLoop(ExporterIFC exporterIFC, string profileName, IList<CurveLoop> origCurveLoops,\r\n          Transform lcs, XYZ extrDirVec, double scaledExtrusionSize, bool allowExportingOnlyOuterLoop, out IList<CurveLoop> curveLoops)\r\n      {\r\n         IFCAnyHandle extrudedSolidHnd = null;\r\n         curveLoops = null;\r\n\r\n         if (scaledExtrusionSize < MathUtil.Eps())\r\n            return extrudedSolidHnd;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         // we need to figure out the plane of the curve loops and modify the extrusion direction appropriately.\r\n         // assumption: first curve loop defines the plane.\r\n         int origCurveLoopCount = origCurveLoops.Count;\r\n         if (origCurveLoopCount == 0)\r\n            return extrudedSolidHnd;\r\n\r\n         XYZ planeXDir = lcs.BasisX;\r\n         XYZ planeYDir = lcs.BasisY;\r\n         XYZ planeZDir = lcs.BasisZ;\r\n         XYZ planeOrig = lcs.Origin;\r\n\r\n         double slantFactor = Math.Abs(planeZDir.DotProduct(extrDirVec));\r\n         if (MathUtil.IsAlmostZero(slantFactor))\r\n            return extrudedSolidHnd;\r\n\r\n         CloseAlmostClosedCurveLoops(origCurveLoops);\r\n\r\n         // Reduce the number of line segments in the curveloops from highly tessellated polylines, if applicable.\r\n         curveLoops = CoarsenCurveLoops(origCurveLoops);\r\n         if (curveLoops == null)\r\n            return extrudedSolidHnd;\r\n\r\n         // Check that curve loops are valid.\r\n         curveLoops = ExporterIFCUtils.ValidateCurveLoops(curveLoops, extrDirVec);\r\n         if (curveLoops.Count == 0)\r\n         {\r\n            // We are only going to try to heal the outer loop, so we'll fail if we have more than one loop\r\n            // and we don't allow the fallback of ignoring any holes.\r\n            if (!allowExportingOnlyOuterLoop && origCurveLoopCount > 1)\r\n               return extrudedSolidHnd;\r\n\r\n            CurveLoop coarseCurveLoop = CoarsenCurveLoop(origCurveLoops[0], true);\r\n            if (coarseCurveLoop == null)\r\n               return extrudedSolidHnd;\r\n\r\n            curveLoops.Clear();\r\n            curveLoops.Add(coarseCurveLoop);\r\n            curveLoops = ExporterIFCUtils.ValidateCurveLoops(curveLoops, extrDirVec);\r\n\r\n            // We check again in case we succeeded above.\r\n            if (curveLoops.Count == 0)\r\n               return extrudedSolidHnd;\r\n         }\r\n\r\n         scaledExtrusionSize /= slantFactor;\r\n\r\n         IFCAnyHandle sweptArea = CreateSweptArea(exporterIFC, profileName, curveLoops, lcs, extrDirVec);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(sweptArea))\r\n            return extrudedSolidHnd;\r\n\r\n         IList<double> relExtrusionDirList = new List<double>();\r\n         relExtrusionDirList.Add(extrDirVec.DotProduct(planeXDir));\r\n         relExtrusionDirList.Add(extrDirVec.DotProduct(planeYDir));\r\n         relExtrusionDirList.Add(extrDirVec.DotProduct(planeZDir));\r\n\r\n         XYZ scaledXDir = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, planeXDir);\r\n         XYZ scaledZDir = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, planeZDir);\r\n         XYZ scaledOrig = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, planeOrig);\r\n\r\n         IFCAnyHandle solidAxis = ExporterUtil.CreateAxis(file, scaledOrig, scaledZDir, scaledXDir);\r\n         IFCAnyHandle extrusionDirection = ExporterUtil.CreateDirection(file, relExtrusionDirList);\r\n\r\n         extrudedSolidHnd = IFCInstanceExporter.CreateExtrudedAreaSolid(file, sweptArea, solidAxis, extrusionDirection, scaledExtrusionSize);\r\n         return extrudedSolidHnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcProfileDef for a swept area.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"profileName\">The profile name.</param>\r\n      /// <param name=\"curveLoops\">The curve loops.</param>\r\n      /// <param name=\"lcs\">The local coordinate system whose XY plane contains the curve loops.</param>\r\n      /// <param name=\"sweptDirection\">The direction.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateSweptArea(ExporterIFC exporterIFC, string profileName, IList<CurveLoop> curveLoops, Transform lcs, XYZ sweptDirection)\r\n      {\r\n         IFCAnyHandle sweptArea = null;\r\n         if (curveLoops.Count == 1)\r\n         {\r\n            if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n            {\r\n               // Only Circle profile and IndexedPolyCurve are allowed in IFC4RV\r\n               sweptArea = CreateCircleBasedProfileDefIfPossible(exporterIFC, profileName, curveLoops[0], lcs, sweptDirection);\r\n            }\r\n            else\r\n            {\r\n               sweptArea = CreateRectangleProfileDefIfPossible(exporterIFC, profileName, curveLoops[0], lcs, sweptDirection);\r\n               sweptArea ??= CreateCircleBasedProfileDefIfPossible(exporterIFC, profileName, curveLoops[0], lcs, sweptDirection);\r\n               sweptArea ??= CreateIShapeProfileDefIfPossible(exporterIFC, profileName, curveLoops[0], lcs, sweptDirection);\r\n            }\r\n         }\r\n         else if (curveLoops.Count == 2)\r\n         {\r\n            sweptArea = CreateCircleBasedProfileDefIfPossible(exporterIFC, profileName, curveLoops, lcs, sweptDirection);\r\n         }\r\n\r\n         if (sweptArea == null)\r\n         {\r\n            IFCAnyHandle profileCurve = null;\r\n            HashSet<IFCAnyHandle> innerCurves = new HashSet<IFCAnyHandle>();\r\n\r\n            // reorient curves if necessary: outer CCW, inners CW.\r\n            foreach (CurveLoop curveLoop in curveLoops)\r\n            {\r\n               bool isCCW = false;\r\n               try\r\n               {\r\n                  isCCW = curveLoop.IsCounterclockwise(lcs.BasisZ);\r\n               }\r\n               catch\r\n               {\r\n                  if (profileCurve == null)\r\n                     return null;\r\n                  else\r\n                     continue;\r\n               }\r\n\r\n               if (profileCurve == null)\r\n               {\r\n                  if (!isCCW)\r\n                     curveLoop.Flip();\r\n                  profileCurve = GeometryUtil.CreateIFCCurveFromCurveLoop(exporterIFC, curveLoop, lcs, sweptDirection);\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(profileCurve))\r\n                     return null;\r\n               }\r\n               else\r\n               {\r\n                  if (isCCW)\r\n                     curveLoop.Flip();\r\n                  innerCurves.AddIfNotNull(GeometryUtil.CreateIFCCurveFromCurveLoop(\r\n                     exporterIFC, curveLoop, lcs, sweptDirection));\r\n               }\r\n            }\r\n\r\n            IFCFile file = exporterIFC.GetFile();\r\n            if (innerCurves.Count > 0)\r\n               sweptArea = IFCInstanceExporter.CreateArbitraryProfileDefWithVoids(file, IFCProfileType.Area, profileName, profileCurve, innerCurves);\r\n            else\r\n               sweptArea = IFCInstanceExporter.CreateArbitraryClosedProfileDef(file, IFCProfileType.Area, profileName, profileCurve);\r\n         }\r\n         return sweptArea;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates extruded solid from extrusion data.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionData\">The extrusion data.</param>\r\n      /// <returns>The IfcExtrudedAreaSolid handle.</returns>\r\n      public static IFCAnyHandle CreateExtrudedSolidFromExtrusionData(ExporterIFC exporterIFC, Element element, IFCExtrusionData extrusionData,\r\n          out Transform lcs, string profileName = null)\r\n      {\r\n         lcs = null;\r\n         if (!extrusionData.IsValid())\r\n            return null;\r\n\r\n         IList<CurveLoop> extrusionLoops = extrusionData.GetLoops();\r\n         if (extrusionLoops != null)\r\n         {\r\n            XYZ extrusionDir = extrusionData.ExtrusionDirection;\r\n            double extrusionSize = extrusionData.ScaledExtrusionLength;\r\n\r\n            if (CorrectCurveLoopOrientation(extrusionLoops, extrusionDir, out lcs))\r\n            {\r\n               if (element != null && string.IsNullOrEmpty(profileName))\r\n               {\r\n                  ElementType type = element.Document.GetElement(element.GetTypeId()) as ElementType;\r\n                  if (type != null)\r\n                     profileName = type.Name;\r\n               }\r\n\r\n               IFCAnyHandle extrudedSolid = CreateExtrudedSolidFromCurveLoop(exporterIFC, profileName, extrusionLoops,\r\n                   lcs, extrusionDir, extrusionSize, false, out _);\r\n               return extrudedSolid;\r\n            }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Computes the outer length of curve loops.\r\n      /// </summary>\r\n      /// <param name=\"curveLoops\">List of curve loops.</param>\r\n      /// <returns>The length.</returns>\r\n      public static double ComputeOuterPerimeterOfCurveLoops(IList<CurveLoop> curveLoops)\r\n      {\r\n         int numCurveLoops = curveLoops.Count;\r\n         if (numCurveLoops == 0)\r\n            return 0.0;\r\n\r\n         if (curveLoops[0].IsOpen())\r\n            return 0.0;\r\n\r\n         return curveLoops[0].GetExactLength();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Computes the inner length of curve loops.\r\n      /// </summary>\r\n      /// <param name=\"curveLoops\">List of curve loops.</param>\r\n      /// <returns>The length.</returns>\r\n      public static double ComputeInnerPerimeterOfCurveLoops(IList<CurveLoop> curveLoops)\r\n      {\r\n         double innerPerimeter = 0.0;\r\n\r\n         int numCurveLoops = curveLoops.Count;\r\n         if (numCurveLoops == 0)\r\n            return 0.0;\r\n\r\n         for (int ii = 1; ii < numCurveLoops; ii++)\r\n         {\r\n            if (curveLoops[ii].IsOpen())\r\n               return 0.0;\r\n            innerPerimeter += curveLoops[ii].GetExactLength();\r\n         }\r\n\r\n         return innerPerimeter;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a new opening to extrusion creation data from curve loop and extrusion data.\r\n      /// </summary>\r\n      /// <param name=\"creationData\">The extrusion creation data.</param>\r\n      /// <param name=\"from\">The extrusion data.</param>\r\n      /// <param name=\"curveLoop\">The curve loop.</param>\r\n      public static void AddOpeningData(IFCExportBodyParams creationData, IFCExtrusionData from, CurveLoop curveLoop)\r\n      {\r\n         List<CurveLoop> curveLoops = new List<CurveLoop>();\r\n         curveLoops.Add(curveLoop);\r\n         AddOpeningData(creationData, from, curveLoops);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a new opening to extrusion creation data from extrusion data.\r\n      /// </summary>\r\n      /// <param name=\"creationData\">The extrusion creation data.</param>\r\n      /// <param name=\"from\">The extrusion data.</param>\r\n      public static void AddOpeningData(IFCExportBodyParams creationData, IFCExtrusionData from)\r\n      {\r\n         AddOpeningData(creationData, from, from.GetLoops());\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a new opening to extrusion creation data from curve loops and extrusion data.\r\n      /// </summary>\r\n      /// <param name=\"creationData\">The extrusion creation data.</param>\r\n      /// <param name=\"from\">The extrusion data.</param>\r\n      /// <param name=\"curveLoops\">The curve loops.</param>\r\n      public static void AddOpeningData(IFCExportBodyParams creationData, IFCExtrusionData from, ICollection<CurveLoop> curveLoops)\r\n      {\r\n         IFCExtrusionData newData = new IFCExtrusionData();\r\n         foreach (CurveLoop curveLoop in curveLoops)\r\n            newData.AddLoop(curveLoop);\r\n         newData.ScaledExtrusionLength = from.ScaledExtrusionLength;\r\n         newData.ExtrusionBasis = from.ExtrusionBasis;\r\n\r\n         newData.ExtrusionDirection = from.ExtrusionDirection;\r\n         creationData.AddOpening(newData);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Generates an IFCExportBodyParams from ExtrusionAnalyzer results\r\n      /// </summary>\r\n      /// <remarks>This will be used to populate certain property sets.</remarks>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"projDir\">The projection direction of the extrusion.</param>\r\n      /// <param name=\"analyzer\">The extrusion analyzer.</param>\r\n      /// <returns>The IFCExportBodyParams information.</returns>\r\n      public static IFCExportBodyParams GetExtrusionCreationDataFromAnalyzer(XYZ projDir, ExtrusionAnalyzer analyzer)\r\n      {\r\n         IFCExportBodyParams exportBodyParams = new IFCExportBodyParams();\r\n\r\n         XYZ extrusionDirection = analyzer.ExtrusionDirection;\r\n\r\n         double zOff = MathUtil.IsAlmostEqual(Math.Abs(projDir[2]), 1.0) ? (1.0 - Math.Abs(extrusionDirection[2])) : Math.Abs(extrusionDirection[2]);\r\n         double scaledAngle = UnitUtil.ScaleAngle(MathUtil.SafeAsin(zOff));\r\n\r\n         exportBodyParams.Slope = scaledAngle;\r\n         exportBodyParams.ScaledLength = UnitUtil.ScaleLength(analyzer.EndParameter - analyzer.StartParameter);\r\n         exportBodyParams.ExtrusionDirection = extrusionDirection;\r\n\r\n         // no opening data support yet.\r\n\r\n         Face extrusionBase = analyzer.GetExtrusionBase();\r\n         if (extrusionBase == null)\r\n            return null;\r\n\r\n         IList<GeometryUtil.FaceBoundaryType> boundaryTypes;\r\n         IList<CurveLoop> boundaries = GeometryUtil.GetFaceBoundaries(extrusionBase, XYZ.Zero, out boundaryTypes);\r\n         if (boundaries.Count == 0)\r\n            return null;\r\n\r\n         double height = 0.0, width = 0.0;\r\n         if (GeometryUtil.ComputeHeightWidthOfCurveLoop(boundaries[0], (XYZ)null, out height, out width))\r\n         {\r\n            exportBodyParams.ScaledHeight = UnitUtil.ScaleLength(height);\r\n            exportBodyParams.ScaledWidth = UnitUtil.ScaleLength(width);\r\n         }\r\n\r\n         double area = extrusionBase.Area;\r\n         if (area > 0.0)\r\n         {\r\n            exportBodyParams.ScaledArea = UnitUtil.ScaleArea(area);\r\n         }\r\n\r\n         double innerPerimeter = ExtrusionExporter.ComputeInnerPerimeterOfCurveLoops(boundaries);\r\n         double outerPerimeter = ExtrusionExporter.ComputeOuterPerimeterOfCurveLoops(boundaries);\r\n         if (innerPerimeter > 0.0)\r\n            exportBodyParams.ScaledInnerPerimeter = UnitUtil.ScaleLength(innerPerimeter);\r\n         if (outerPerimeter > 0.0)\r\n            exportBodyParams.ScaledOuterPerimeter = UnitUtil.ScaleLength(outerPerimeter);\r\n\r\n         return exportBodyParams;\r\n      }\r\n\r\n      private class HandleAndAnalyzer\r\n      {\r\n         public IFCAnyHandle Handle = null;\r\n         public ExtrusionAnalyzer Analyzer = null;\r\n         public IList<IFCAnyHandle> BaseRepresentationItems = new List<IFCAnyHandle>();\r\n         public ShapeRepresentationType ShapeRepresentationType = ShapeRepresentationType.Undefined;\r\n         public FootPrintInfo m_FootprintInfo = null;\r\n         public IFCAnyHandle ProfileDefHandle = null;\r\n         MaterialAndProfile m_MaterialAndProfile = null;\r\n\r\n         /// <summary>\r\n         /// Material and Profile information for IfcMaterialProfile related information\r\n         /// </summary>\r\n         public MaterialAndProfile MaterialAndProfile\r\n         {\r\n            get\r\n            {\r\n               if (m_MaterialAndProfile == null)\r\n                  m_MaterialAndProfile = new MaterialAndProfile();\r\n               return m_MaterialAndProfile;\r\n            }\r\n            set { m_MaterialAndProfile = value; }\r\n         }\r\n\r\n         /// <summary>\r\n         /// Footprint gemetric representation item related information\r\n         /// </summary>\r\n         public FootPrintInfo FootPrintInfo { get; set; } = null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// A class to store output information when creating clipped extrusions.\r\n      /// </summary>\r\n      public class ExtraClippingData\r\n      {\r\n         /// <summary>\r\n         /// True if the extrusion is completely clipped (i.e., no geometry).\r\n         /// </summary>\r\n         public bool CompletelyClipped { get; set; } = false;\r\n\r\n         /// <summary>\r\n         /// True if there is a clipped extrusion (vs. a simple extrusion).\r\n         /// </summary>\r\n         public bool HasClippingResult { get; set; } = false;\r\n\r\n         /// <summary>\r\n         /// True if there is an IfcBooleanResult (vs. a simple extrusion).\r\n         /// </summary>\r\n         public bool HasBooleanResult { get; set; } = false;\r\n\r\n         /// <summary>\r\n         /// The material id of the resulting geometry.\r\n         /// </summary>\r\n         public IList<ElementId> MaterialIds { get; set; } = new List<ElementId>();\r\n      }\r\n\r\n      private static HandleAndAnalyzer CreateExtrusionWithClippingBase(\r\n         ExporterIFC exporterIFC, Element element, bool isVoid,\r\n         ElementId catId, IList<Solid> solids, Plane basePlane, XYZ planeOrigin, XYZ projDir, IFCRange range,\r\n         out ExtraClippingData extraClippingData,\r\n         GenerateAdditionalInfo addInfo = GenerateAdditionalInfo.GenerateBody, string profileName = null)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         extraClippingData = new ExtraClippingData();\r\n\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            HandleAndAnalyzer retVal = new HandleAndAnalyzer();\r\n            HashSet<IFCAnyHandle> extrusionBodyItems = new HashSet<IFCAnyHandle>();\r\n            HashSet<IFCAnyHandle> extrusionBooleanBodyItems = new HashSet<IFCAnyHandle>();\r\n            HashSet<IFCAnyHandle> extrusionClippingBodyItems = new HashSet<IFCAnyHandle>();\r\n            IList<FootPrintInfo> extrusionFootprintItems = new List<FootPrintInfo>();\r\n            MaterialAndProfile materialAndProfile = new MaterialAndProfile();\r\n            foreach (Solid solid in solids)\r\n            {\r\n               ExtraClippingData currentExtraClippingData = null;\r\n               HandleAndAnalyzer currRetVal = CreateExtrusionWithClippingAndOpening(\r\n                  exporterIFC, element, isVoid,\r\n                  solid, basePlane, planeOrigin, projDir, range,\r\n                  out currentExtraClippingData,\r\n                  addInfo: addInfo,\r\n                  profileName: profileName);\r\n\r\n               if ((addInfo & GenerateAdditionalInfo.GenerateFootprint) != 0 && currRetVal.FootPrintInfo != null)\r\n               {\r\n                  retVal.MaterialAndProfile = currRetVal.MaterialAndProfile;\r\n                  retVal.FootPrintInfo = currRetVal.FootPrintInfo;\r\n               }\r\n\r\n               if (currRetVal != null && currRetVal.Handle != null)\r\n               {\r\n                  extraClippingData.MaterialIds = extraClippingData.MaterialIds.Union(currentExtraClippingData.MaterialIds).ToList();\r\n                  IFCAnyHandle repHandle = currRetVal.Handle;\r\n                  if (currentExtraClippingData.HasBooleanResult) // if both have boolean and clipping result, use boolean one.\r\n                  {\r\n                     extraClippingData.HasBooleanResult = true;\r\n                     extrusionBooleanBodyItems.Add(repHandle);\r\n                  }\r\n                  else if (currentExtraClippingData.HasClippingResult)\r\n                  {\r\n                     extraClippingData.HasClippingResult = true;\r\n                     extrusionClippingBodyItems.Add(repHandle);\r\n                     // This potentially is exported as a StandardCase element (if it is a single clipping), keep the information of the profile and material\r\n                     if ((addInfo & GenerateAdditionalInfo.GenerateProfileDef) != 0)\r\n                     {\r\n                        retVal.MaterialAndProfile = currRetVal.MaterialAndProfile;\r\n                        if (currRetVal.ProfileDefHandle != null)\r\n                           foreach (ElementId materialId in extraClippingData.MaterialIds)\r\n                           {\r\n                              retVal.MaterialAndProfile.Add(materialId, currRetVal.ProfileDefHandle);\r\n                           }\r\n                     }\r\n                  }\r\n                  else\r\n                  {\r\n                     extrusionBodyItems.Add(repHandle);\r\n                     // This potentially is exported as a StandardCase element, keep the information of the profile and material\r\n                     if ((addInfo & GenerateAdditionalInfo.GenerateProfileDef) != 0)\r\n                     {\r\n                        retVal.MaterialAndProfile = currRetVal.MaterialAndProfile;\r\n                        if (currRetVal.ProfileDefHandle != null)\r\n                           foreach (ElementId materialId in extraClippingData.MaterialIds)\r\n                           {\r\n                              retVal.MaterialAndProfile.Add(materialId, currRetVal.ProfileDefHandle);\r\n                           }\r\n                     }\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  tr.RollBack();\r\n                  return retVal;\r\n               }\r\n\r\n               // currRetVal will only have one extrusion.  Use the analyzer from the \"last\" extrusion.  Should only really be used for one extrusion.\r\n               retVal.Analyzer = currRetVal.Analyzer;\r\n               if (currRetVal.BaseRepresentationItems.Count > 0)\r\n               {\r\n                  retVal.BaseRepresentationItems.Add(currRetVal.BaseRepresentationItems[0]);\r\n               }\r\n            }\r\n\r\n            IFCAnyHandle contextOfItemsBody = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Body);\r\n\r\n            if (extrusionBodyItems.Count > 0 && (extrusionClippingBodyItems.Count == 0 && extrusionBooleanBodyItems.Count == 0))\r\n            {\r\n               if ((addInfo & GenerateAdditionalInfo.GenerateBody) != 0)\r\n               {\r\n                  retVal.Handle = RepresentationUtil.CreateSweptSolidRep(exporterIFC, element, catId, contextOfItemsBody,\r\n                     extrusionBodyItems, null, null);\r\n                  retVal.ShapeRepresentationType = ShapeRepresentationType.SweptSolid;\r\n               }\r\n            }\r\n            else if (extrusionClippingBodyItems.Count > 0 && (extrusionBodyItems.Count == 0 && extrusionBooleanBodyItems.Count == 0))\r\n            {\r\n               if ((addInfo & GenerateAdditionalInfo.GenerateBody) != 0)\r\n               {\r\n                  retVal.Handle = RepresentationUtil.CreateClippingRep(exporterIFC, element, catId, contextOfItemsBody,\r\n                     extrusionClippingBodyItems);\r\n                  retVal.ShapeRepresentationType = ShapeRepresentationType.Clipping;\r\n               }\r\n            }\r\n            else if (extrusionBooleanBodyItems.Count > 0 && (extrusionBodyItems.Count == 0 && extrusionClippingBodyItems.Count == 0))\r\n            {\r\n               if ((addInfo & GenerateAdditionalInfo.GenerateBody) != 0)\r\n               {\r\n                  retVal.Handle = RepresentationUtil.CreateCSGRep(exporterIFC, element, catId, contextOfItemsBody,\r\n                     extrusionBooleanBodyItems);\r\n                  retVal.ShapeRepresentationType = ShapeRepresentationType.CSG;\r\n                  retVal.MaterialAndProfile.Clear();          // Clear material and profile info as it is only for StandardCase element\r\n               }\r\n            }\r\n            else\r\n            {\r\n               if ((addInfo & GenerateAdditionalInfo.GenerateBody) != 0)\r\n               {\r\n                  // If both Clipping and extrusion exist, they will become boolean body Union\r\n                  ICollection<IFCAnyHandle> booleanBodyItems = extrusionClippingBodyItems.Union<IFCAnyHandle>(extrusionBooleanBodyItems).ToList();\r\n                  extrusionBodyItems.UnionWith(booleanBodyItems);\r\n                  retVal.Handle = RepresentationUtil.CreateSweptSolidRep(exporterIFC, element, catId, contextOfItemsBody, extrusionBodyItems, null, null);\r\n                  retVal.ShapeRepresentationType = ShapeRepresentationType.SweptSolid;\r\n               }\r\n            }\r\n\r\n            tr.Commit();\r\n            return retVal;\r\n         }\r\n      }\r\n\r\n      private static bool AllowMultipleClipPlanesForCategory(ElementId cuttingElementCategoryId)\r\n      {\r\n         return !(cuttingElementCategoryId == new ElementId(BuiltInCategory.OST_Doors) ||\r\n            cuttingElementCategoryId == new ElementId(BuiltInCategory.OST_Windows));\r\n      }\r\n\r\n      private static HandleAndAnalyzer CreateExtrusionWithClippingAndOpening(\r\n         ExporterIFC exporterIFC, Element element, bool isVoid,\r\n         Solid solid, Plane basePlane, XYZ planeOrigin, XYZ projDir, IFCRange range,\r\n         out ExtraClippingData extraClippingData,\r\n         GenerateAdditionalInfo addInfo = GenerateAdditionalInfo.GenerateBody,\r\n         string profileName = null)\r\n      {\r\n         extraClippingData = new ExtraClippingData();\r\n         HandleAndAnalyzer nullVal = new HandleAndAnalyzer();\r\n         HandleAndAnalyzer retVal = new HandleAndAnalyzer();\r\n\r\n         try\r\n         {\r\n            Plane extrusionAnalyzerPlane = GeometryUtil.CreatePlaneByXYVectorsContainingPoint(basePlane.XVec, basePlane.YVec, planeOrigin);\r\n            ExtrusionAnalyzer elementAnalyzer = ExtrusionAnalyzer.Create(solid, extrusionAnalyzerPlane, projDir);\r\n            retVal.Analyzer = elementAnalyzer;\r\n\r\n            Document document = element.Document;\r\n            XYZ baseLoopOffset = null;\r\n\r\n            if (!MathUtil.IsAlmostZero(elementAnalyzer.StartParameter))\r\n               baseLoopOffset = elementAnalyzer.StartParameter * projDir;\r\n\r\n            Face extrusionBase = elementAnalyzer.GetExtrusionBase();\r\n            retVal.MaterialAndProfile.CrossSectionArea = UnitUtil.ScaleArea(extrusionBase.Area);\r\n\r\n            IList<GeometryUtil.FaceBoundaryType> boundaryTypes;\r\n            IList<CurveLoop> extrusionBoundaryLoops =\r\n                GeometryUtil.GetFaceBoundaries(extrusionBase, baseLoopOffset, out boundaryTypes);\r\n\r\n            // Return if we get any CurveLoops that are complex, as we don't want to export an approximation of the boundary here.\r\n            foreach (GeometryUtil.FaceBoundaryType boundaryType in boundaryTypes)\r\n            {\r\n               if (boundaryType == GeometryUtil.FaceBoundaryType.Complex)\r\n                  return nullVal;\r\n            }\r\n\r\n            // Move base plane to start parameter location.\r\n            Plane extrusionBasePlane = null;\r\n            try\r\n            {\r\n               extrusionBasePlane = extrusionBoundaryLoops[0].GetPlane();\r\n            }\r\n            catch\r\n            {\r\n               return nullVal;\r\n            }\r\n\r\n            Transform extrusionBaseLCS = GeometryUtil.CreateTransformFromPlane(extrusionBasePlane);\r\n\r\n            double extrusionLength = elementAnalyzer.EndParameter - elementAnalyzer.StartParameter;\r\n            double baseOffset = extrusionBasePlane.Origin.DotProduct(projDir);\r\n            IFCRange extrusionRange = new IFCRange(baseOffset, extrusionLength + baseOffset);\r\n\r\n            double startParam = planeOrigin.DotProduct(projDir);\r\n            double endParam = planeOrigin.DotProduct(projDir) + extrusionLength;\r\n            if ((range != null) && (startParam >= range.End || endParam <= range.Start))\r\n            {\r\n               extraClippingData.CompletelyClipped = true;\r\n               return nullVal;\r\n            }\r\n\r\n            double scaledExtrusionDepth = UnitUtil.ScaleLength(extrusionLength);\r\n\r\n            // We use a sub-transaction here in case we are able to generate the base body but not the clippings.\r\n            IFCFile file = exporterIFC.GetFile();\r\n            IFCAnyHandle finalExtrusionBodyItemHnd = null;\r\n            using (IFCTransaction tr = new IFCTransaction(file))\r\n            {\r\n               // For creating the actual extrusion, we want to use the calculated extrusion plane, not the input plane.\r\n               IFCAnyHandle extrusionBodyItemHnd = ExtrusionExporter.CreateExtrudedSolidFromCurveLoop(exporterIFC, profileName,\r\n                   extrusionBoundaryLoops, extrusionBaseLCS, projDir, scaledExtrusionDepth, false, out _);\r\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(extrusionBodyItemHnd))\r\n               {\r\n                  if ((addInfo & GenerateAdditionalInfo.GenerateBody) != 0)\r\n                     retVal.BaseRepresentationItems.Add(extrusionBodyItemHnd);\r\n\r\n                  if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n                  {\r\n                     if ((addInfo & GenerateAdditionalInfo.GenerateFootprint) != 0)\r\n                     {\r\n                        // Get the extrusion footprint using the first Curveloop. No transform is needed here because the profile is already transformed for the SweptArea\r\n                        Transform lcs = GeometryUtil.CreateTransformFromVectorsAndOrigin(new XYZ(1, 0, 0), new XYZ(0, 1, 0), new XYZ(0, 0, 1), new XYZ(0, 0, 0));\r\n                        retVal.FootPrintInfo = new FootPrintInfo(extrusionBoundaryLoops, lcs);\r\n                     }\r\n                     if ((addInfo & GenerateAdditionalInfo.GenerateProfileDef) != 0)\r\n                     {\r\n                        // Get the handle to the extrusion Swept Area needed for creation of IfcMaterialProfile\r\n                        IFCData extrArea = extrusionBodyItemHnd.GetAttribute(\"SweptArea\");\r\n                        retVal.ProfileDefHandle = extrArea.AsInstance();\r\n                        retVal.MaterialAndProfile.ExtrusionDepth = scaledExtrusionDepth;\r\n                        retVal.MaterialAndProfile.OuterPerimeter = extrusionBoundaryLoops[0].GetExactLength();\r\n                        for (int lcnt = 1; lcnt < extrusionBoundaryLoops.Count; ++lcnt)\r\n                        {\r\n                           if (extrusionBoundaryLoops[lcnt].IsCounterclockwise(extrusionBasePlane.Normal))\r\n                              retVal.MaterialAndProfile.OuterPerimeter += extrusionBoundaryLoops[lcnt].GetExactLength();\r\n                           else\r\n                           {\r\n                              if (retVal.MaterialAndProfile.InnerPerimeter.HasValue)\r\n                                 retVal.MaterialAndProfile.InnerPerimeter += extrusionBoundaryLoops[lcnt].GetExactLength();\r\n                              else\r\n                                 retVal.MaterialAndProfile.InnerPerimeter = extrusionBoundaryLoops[lcnt].GetExactLength();\r\n                           }\r\n                        }\r\n\r\n                       if (retVal.MaterialAndProfile.InnerPerimeter.HasValue)\r\n                          retVal.MaterialAndProfile.InnerPerimeter = UnitUtil.ScaleLength(retVal.MaterialAndProfile.InnerPerimeter.Value);\r\n                       if (retVal.MaterialAndProfile.OuterPerimeter.HasValue)\r\n                          retVal.MaterialAndProfile.OuterPerimeter = UnitUtil.ScaleLength(retVal.MaterialAndProfile.OuterPerimeter.Value);\r\n\r\n                        retVal.MaterialAndProfile.LCSTransformUsed = extrusionBaseLCS;\r\n                     }\r\n                  }\r\n\r\n                  finalExtrusionBodyItemHnd = extrusionBodyItemHnd;\r\n                  IDictionary<ElementId, ICollection<ICollection<Face>>> elementCutouts;\r\n                  try\r\n                  {\r\n                     elementCutouts = GeometryUtil.GetCuttingElementFaces(element, elementAnalyzer);\r\n                  }\r\n                  catch\r\n                  {\r\n                     tr.RollBack();\r\n                     return nullVal;\r\n                  }\r\n                  \r\n                  // A litle explanation is necessary here.\r\n                  // We would like to ensure that, on export, we have a stable ordering of the clip planes that we create.\r\n                  // The reason for this is that the order of the Boolean operations, if there are more than 1, can affect the end result; \r\n                  // while the ordering below does not improve the outcome of the set of Boolean operations, it does make it\r\n                  // consistent across exports.  This, in turn, allows an importing application to also have consistent results from the export.\r\n                  // GetCuttingElementFaces above does not guarantee any particular ordering of the faces (that will become clip planes and\r\n                  // openings) returned; we may in the future to try do an ordering there.  In the meantime, we'll do a sort here.\r\n\r\n                  IComparer<PlanarFace> planarFaceComparer = new PlanarFaceClipPlaneComparer();\r\n                  IComparer<ICollection<PlanarFace>> planarFaceCollectionComparer = new PlanarFaceCollectionComparer();\r\n\r\n                  // We will have three groups of faces:\r\n\r\n\r\n                  // 1. Groups of PlanarFaces that allow only for simple cutouts (as determined by AllowMultipleClipPlanesForCategory).\r\n                  // 2. Groups of PlanarFaces that don't have the restriction above (as determined by AllowMultipleClipPlanesForCategory).\r\n                  // These two groups are in a list to avoid duplicated code later.\r\n                  IList<ICollection<ICollection<PlanarFace>>> sortedElementCutouts =\r\n                     new List<ICollection<ICollection<PlanarFace>>>();\r\n                  sortedElementCutouts.Add(new SortedSet<ICollection<PlanarFace>>(planarFaceCollectionComparer)); // simple\r\n                  sortedElementCutouts.Add(new SortedSet<ICollection<PlanarFace>>(planarFaceCollectionComparer)); // complex\r\n\r\n                  // 3. Groups of arbitrary faces that may be converted into void extrusions.\r\n                  ICollection<ICollection<Face>> unhandledElementCutouts = new HashSet<ICollection<Face>>();\r\n\r\n                  // Go through the return value from GeometryUtil.GetCuttingElementFaces and populate the groups above.\r\n                  foreach (KeyValuePair<ElementId, ICollection<ICollection<Face>>> elementCutoutsForElement in elementCutouts)\r\n                  {\r\n                     // allowMultipleClipPlanes is based on category, as determined in AllowMultipleClipPlanesForCategory.  Default is true.\r\n                     Element cuttingElement = document.GetElement(elementCutoutsForElement.Key);\r\n                     bool allowMultipleClipPlanes = true;\r\n                     ElementId cuttingElementCategoryId = CategoryUtil.GetSafeCategoryId(cuttingElement);\r\n                     if (cuttingElementCategoryId != ElementId.InvalidElementId)\r\n                        AllowMultipleClipPlanesForCategory(cuttingElementCategoryId);\r\n\r\n                     foreach (ICollection<Face> elementCutout in elementCutoutsForElement.Value)\r\n                     {\r\n                        // Need to make sure that all of the faces in elementCotout are all planar; otherwise add to the unhandled list.\r\n                        ICollection<PlanarFace> planarFacesByNormal = new SortedSet<PlanarFace>(planarFaceComparer);\r\n\r\n                        foreach (Face elementCutoutFace in elementCutout)\r\n                        {\r\n                           if (!(elementCutoutFace is PlanarFace))\r\n                           {\r\n                              planarFacesByNormal = null;\r\n                              break;\r\n                           }\r\n\r\n                           planarFacesByNormal.Add(elementCutoutFace as PlanarFace);\r\n                        }\r\n\r\n                        if (planarFacesByNormal != null && planarFacesByNormal.Count != elementCutout.Count)\r\n                           planarFacesByNormal = null; // Our comparer merged faces; this isn't good.\r\n\r\n                        if (planarFacesByNormal != null)\r\n                           sortedElementCutouts[allowMultipleClipPlanes ? 1 : 0].Add(planarFacesByNormal);\r\n                        else\r\n                           unhandledElementCutouts.Add(elementCutout);\r\n                     }\r\n                  }\r\n\r\n                  // process clippings first, then openings\r\n                  for (int ii = 0; ii < 2; ii++)\r\n                  {\r\n                     ICollection<ICollection<PlanarFace>> currentSortedElementCutouts = sortedElementCutouts[ii];\r\n                     foreach (ICollection<PlanarFace> currentElementCutouts in currentSortedElementCutouts)\r\n                     {\r\n                        ICollection<Face> skippedFaces = null;\r\n                        bool unhandledClipping = false;\r\n                        try\r\n                        {\r\n                           bool allowMultipleClipPlanes = (ii == 1);\r\n                           // The skippedFaces may represent openings that will be dealt with below.\r\n                           finalExtrusionBodyItemHnd = GeometryUtil.CreateClippingFromPlanarFaces(exporterIFC, allowMultipleClipPlanes,\r\n                              extrusionBaseLCS, projDir, currentElementCutouts, extrusionRange, finalExtrusionBodyItemHnd, out skippedFaces);\r\n                        }\r\n                        catch\r\n                        {\r\n                           skippedFaces = null;\r\n                           unhandledClipping = true;\r\n                        }\r\n\r\n                        if (finalExtrusionBodyItemHnd == null || unhandledClipping)\r\n                        {\r\n                           ICollection<Face> currentUnhandledElementCutouts = new HashSet<Face>(currentElementCutouts);\r\n                           unhandledElementCutouts.Add(currentUnhandledElementCutouts);\r\n                        }\r\n                        else\r\n                        {\r\n                           if (finalExtrusionBodyItemHnd != extrusionBodyItemHnd)\r\n                           {\r\n                              // IFC4RV does not support Clipping, so it needs to rollback and return null value\r\n                              if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n                              {\r\n                                 tr.RollBack();\r\n                                 return nullVal;\r\n                              }\r\n\r\n                              extraClippingData.HasClippingResult = true;\r\n                           }\r\n\r\n                           // Even if we created a clipping, we may have faces to further process as openings.  \r\n                           if (skippedFaces != null && skippedFaces.Count != 0)\r\n                              unhandledElementCutouts.Add(skippedFaces);\r\n                        }\r\n                     }\r\n                  }\r\n\r\n                  IFCAnyHandle finalExtrusionClippingBodyItemHnd = finalExtrusionBodyItemHnd;\r\n                  foreach (ICollection<Face> currentElementCutouts in unhandledElementCutouts)\r\n                  {\r\n                     bool unhandledOpening = false;\r\n                     try\r\n                     {\r\n                        finalExtrusionBodyItemHnd = GeometryUtil.CreateOpeningFromFaces(exporterIFC, extrusionBasePlane, projDir,\r\n                            currentElementCutouts, extrusionRange, finalExtrusionBodyItemHnd);\r\n                     }\r\n                     catch\r\n                     {\r\n                        unhandledOpening = true;\r\n                     }\r\n\r\n                     if (finalExtrusionBodyItemHnd == null || unhandledOpening)\r\n                     {\r\n                        // Item is completely clipped.  We use this only when we are certain:\r\n                        // 1. finalExtrusionBodyItemHnd is null.\r\n                        // 2. range is not null (i.e., we expect the possibility of clipping)\r\n                        // 3. unhandledOpening is not true (i.e., we didn't abort the operation).\r\n                        // If completelyClipped is true, we won't export the item, so we want to make sure\r\n                        // that we don't actually want to try a backup method instead.\r\n                        extraClippingData.CompletelyClipped = (finalExtrusionBodyItemHnd == null) && (range != null) && (!unhandledOpening);\r\n                        tr.RollBack();\r\n                        return nullVal;\r\n                     }\r\n                     else if (finalExtrusionBodyItemHnd != finalExtrusionClippingBodyItemHnd)\r\n                     {\r\n                        // IFC4RV does not support BooleanResult, so it needs to rollback and return null value\r\n                        if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n                        {\r\n                           tr.RollBack();\r\n                           return nullVal;\r\n                        }\r\n                        extraClippingData.HasBooleanResult = true;\r\n                     }\r\n                  }\r\n\r\n                  ElementId materialId = BodyExporter.GetBestMaterialIdFromGeometryOrParameter(solid, element);\r\n                  extraClippingData.MaterialIds.Add(materialId);\r\n                  if ((addInfo & GenerateAdditionalInfo.GenerateBody) != 0)\r\n                  {\r\n                     BodyExporter.CreateSurfaceStyleForRepItem(exporterIFC, document, isVoid, extrusionBodyItemHnd, materialId);\r\n                  }\r\n                  else\r\n                  {\r\n                     // If the body is not needed\r\n                     if (!IFCAnyHandleUtil.IsNullOrHasNoValue(extrusionBodyItemHnd))\r\n                        IFCAnyHandleUtil.Delete(extrusionBodyItemHnd);\r\n                  }\r\n               }\r\n               tr.Commit();\r\n            }\r\n\r\n            if ((addInfo & GenerateAdditionalInfo.GenerateBody) != 0)\r\n               retVal.Handle = finalExtrusionBodyItemHnd;\r\n            else\r\n            {\r\n               // If the body is not needed\r\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(finalExtrusionBodyItemHnd))\r\n                  IFCAnyHandleUtil.Delete(finalExtrusionBodyItemHnd);\r\n            }\r\n            return retVal;\r\n         }\r\n         catch\r\n         {\r\n            return nullVal;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an extrusion with potential clipping from a solid representation of an element.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC class.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"catId\">The category of the element and/or the solid geometry.</param>\r\n      /// <param name=\"solid\">The solid geometry.</param>\r\n      /// <param name=\"basePlane\">The extrusion base plane.  The origin is ignored.</param>\r\n      /// <param name=\"planeOrigin\">The origin if the basePlane.</param>\r\n      /// <param name=\"projDir\">The projection direction.</param>\r\n      /// <param name=\"range\">The upper and lower limits of the extrusion, in the projection direction.</param>\r\n      /// <param name=\"completelyClipped\">Returns true if the extrusion is completely outside the range.</param>\r\n      /// <returns>The extrusion handle.</returns>\r\n      public static IFCAnyHandle CreateExtrusionWithClipping(\r\n         ExporterIFC exporterIFC, Element element, bool isVoid, ElementId catId,\r\n          Solid solid, Plane basePlane, XYZ planeOrigin, XYZ projDir, IFCRange range, \r\n          out ExtraClippingData extraClippingData,\r\n          out FootPrintInfo footPrintInfo, out MaterialAndProfile materialAndProfile, out IFCExportBodyParams extrusionData,\r\n          GenerateAdditionalInfo addInfo = GenerateAdditionalInfo.GenerateBody, string profileName = null)\r\n      {\r\n         footPrintInfo = null;\r\n         materialAndProfile = null;\r\n         extrusionData = null;\r\n         IList<Solid> solids = new List<Solid>();\r\n         solids.Add(solid);\r\n         HandleAndAnalyzer handleAndAnalyzer = CreateExtrusionWithClippingBase(exporterIFC, element, isVoid,\r\n            catId, solids, basePlane, planeOrigin, projDir, range, \r\n            out extraClippingData, addInfo: addInfo, profileName: profileName);\r\n         if ((addInfo & GenerateAdditionalInfo.GenerateFootprint) != 0)\r\n         {\r\n            footPrintInfo = handleAndAnalyzer.FootPrintInfo;\r\n         }\r\n         if ((addInfo & GenerateAdditionalInfo.GenerateProfileDef) != 0)\r\n         {\r\n            materialAndProfile = handleAndAnalyzer.MaterialAndProfile;\r\n         }\r\n\r\n         if (handleAndAnalyzer.Analyzer != null)\r\n            extrusionData = GetExtrusionCreationDataFromAnalyzer(projDir, handleAndAnalyzer.Analyzer);\r\n\r\n         return handleAndAnalyzer.Handle;\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Creates an extrusion with potential clipping from a list of solids corresponding to an element.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC class.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"catId\">The category of the element and/or the solid geometry.</param>\r\n      /// <param name=\"solids\">The list of solid geometries.</param>\r\n      /// <param name=\"basePlane\">The extrusion base plane.  The origin is ignored.</param>\r\n      /// <param name=\"planeOrigin\">The origin if the basePlane.</param>\r\n      /// <param name=\"projDir\">The projection direction.</param>\r\n      /// <param name=\"range\">The upper and lower limits of the extrusion, in the projection direction.</param>\r\n      /// <param name=\"completelyClipped\">Returns true if the extrusion is completely outside the range.</param>\r\n      /// <param name=\"materialIds\">The material ids of the solid geometry.</param>\r\n      /// <returns>The extrusion handle.</returns>\r\n      public static IFCAnyHandle CreateExtrusionWithClipping(ExporterIFC exporterIFC, Element element, \r\n         ElementId catId, bool isVoid, IList<Solid> solids, \r\n         Plane basePlane, XYZ planeOrigin, XYZ projDir, IFCRange range, out ExtraClippingData extraClippingData,\r\n         out FootPrintInfo footPrintInfo, out MaterialAndProfile materialAndProfile, out IFCExportBodyParams extrusionData,\r\n         GenerateAdditionalInfo addInfo = GenerateAdditionalInfo.GenerateBody, string profileName = null)\r\n      {\r\n         footPrintInfo = null;\r\n         materialAndProfile = null;\r\n         extrusionData = null;\r\n         HandleAndAnalyzer handleAndAnalyzer = CreateExtrusionWithClippingBase(exporterIFC, element, isVoid, catId,\r\n             solids, basePlane, planeOrigin, projDir, range, out extraClippingData, addInfo: addInfo, profileName: profileName);\r\n\r\n         if ((addInfo & GenerateAdditionalInfo.GenerateFootprint) != 0)\r\n         {\r\n            footPrintInfo = handleAndAnalyzer.FootPrintInfo;\r\n         }\r\n         if ((addInfo & GenerateAdditionalInfo.GenerateProfileDef) != 0)\r\n         {\r\n            materialAndProfile = handleAndAnalyzer.MaterialAndProfile;\r\n         }\r\n         if (handleAndAnalyzer.Analyzer != null)\r\n            extrusionData = GetExtrusionCreationDataFromAnalyzer(projDir, handleAndAnalyzer.Analyzer);\r\n\r\n         return handleAndAnalyzer.Handle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an extrusion with potential clipping from a solid corresponding to an element, and supplies ExtrusionCreationData for the result.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC class.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"catId\">The category of the element and/or the solid geometry.</param>\r\n      /// <param name=\"solid\">The solid geometry.</param>\r\n      /// <param name=\"basePlane\">The extrusion base plane.  The origin is ignored.</param>\r\n      /// <param name=\"planeOrigin\">The origin if the basePlane.</param>\r\n      /// <param name=\"projDir\">The projection direction.</param>\r\n      /// <param name=\"range\">The upper and lower limits of the extrusion, in the projection direction.</param>\r\n      /// <param name=\"completelyClipped\">Returns true if the extrusion is completely outside the range.</param>\r\n      /// <returns>The extrusion handle.</returns>\r\n      public static HandleAndData CreateExtrusionWithClippingAndProperties(ExporterIFC exporterIFC,\r\n         Element element, bool isVoid, ElementId catId, Solid solid, Plane basePlane, XYZ planeOrig, XYZ projDir, IFCRange range, \r\n         out ExtraClippingData extraClippingData,\r\n         GenerateAdditionalInfo addInfo = GenerateAdditionalInfo.GenerateBody,\r\n         string profileName = null)\r\n      {\r\n         List<Solid> solids = [solid];\r\n\r\n         HandleAndAnalyzer handleAndAnalyzer = CreateExtrusionWithClippingBase(exporterIFC, element, isVoid, catId,\r\n             solids, basePlane, planeOrig, projDir, range, out extraClippingData, addInfo: addInfo, profileName: profileName);\r\n\r\n         HandleAndData ret = new();\r\n         ret.Handle = handleAndAnalyzer.Handle;     // Add the \"Body\" representation\r\n         ret.FootprintInfo = handleAndAnalyzer.FootPrintInfo;    //Add the \"FootPrint\" representation\r\n         ret.BaseRepresentationItems = handleAndAnalyzer.BaseRepresentationItems;\r\n         ret.ShapeRepresentationType = handleAndAnalyzer.ShapeRepresentationType;\r\n         ret.MaterialIds = extraClippingData.MaterialIds;\r\n         if (handleAndAnalyzer.Analyzer != null)\r\n            ret.Data = GetExtrusionCreationDataFromAnalyzer(projDir, handleAndAnalyzer.Analyzer);\r\n         if ((addInfo & GenerateAdditionalInfo.GenerateProfileDef) != 0)\r\n            ret.MaterialAndProfile = handleAndAnalyzer.MaterialAndProfile;\r\n         return ret;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an extruded surface of type IfcSurfaceOfLinearExtrusion given a base 2D curve, a direction and a length.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC class.</param>\r\n      /// <param name=\"baseCurve\">The curve to be extruded.</param>\r\n      /// <param name=\"extrusionLCS\">The coordinate system of the extrusion, where the Z direction is the direction of the extrusion.</param>\r\n      /// <param name=\"scaledExtrusionSize\">The length of the extrusion, in IFC unit scale.</param>\r\n      /// <param name=\"unscaledBaseHeight\">The Z value of the base level for the surface, in Revit unit scale.</param>\r\n      /// <param name=\"sweptCurve\">The handle of the created curve entity.</param>\r\n      /// <returns>The extrusion handle.</returns>\r\n      /// <remarks>Note that scaledExtrusionSize and unscaledBaseHeight are in potentially different scaling units.</remarks>\r\n      public static IFCAnyHandle CreateSurfaceOfLinearExtrusionFromCurve(ExporterIFC exporterIFC, \r\n         Curve baseCurve, Transform extrusionLCS, double scaledExtrusionSize, \r\n         double unscaledBaseHeight, out IFCAnyHandle curveHandle)\r\n      {\r\n         curveHandle = null;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         XYZ extrusionDir = extrusionLCS.BasisZ;\r\n         IList<IFCAnyHandle> profileCurves;\r\n         // A list of IfcCurve entities.\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n         {\r\n            profileCurves = new List<IFCAnyHandle>();\r\n            profileCurves.AddIfNotNull(GeometryUtil.CreatePolyCurveFromCurve(exporterIFC, \r\n               baseCurve, extrusionLCS, extrusionDir));\r\n         }\r\n         else\r\n         {\r\n            IFCGeometryInfo info = IFCGeometryInfo.CreateCurveGeometryInfo(exporterIFC, \r\n               extrusionLCS, extrusionDir, true);\r\n            ExporterIFCUtils.CollectGeometryInfo(exporterIFC, info, baseCurve, XYZ.Zero, true);\r\n\r\n            profileCurves = info.GetCurves();\r\n         }\r\n\r\n         if ((profileCurves.Count != 1) || (!IFCAnyHandleUtil.IsSubTypeOf(profileCurves[0], IFCEntityType.IfcBoundedCurve)))\r\n            return null;\r\n\r\n         curveHandle = profileCurves[0];\r\n         IFCAnyHandle sweptCurve = IFCInstanceExporter.CreateArbitraryOpenProfileDef(file, IFCProfileType.Curve, null, profileCurves[0]);\r\n\r\n         XYZ oCurveOrig = baseCurve.GetEndPoint(0);\r\n         XYZ orig = UnitUtil.ScaleLength(new XYZ(0.0, 0.0, oCurveOrig[2] - unscaledBaseHeight));\r\n\r\n         IFCAnyHandle surfaceAxis = ExporterUtil.CreateAxis(file, orig, null, null);\r\n         // The XY plane of extrusionLCS contains the baseCurve and its normal defines extrusion direction.\r\n         // The surfaceAxis is always default, so the direction must also be default XYZ.BasisZ\r\n         IFCAnyHandle direction = ExporterUtil.CreateDirection(file, XYZ.BasisZ, GeometryUtil.Dimension.Dim3D);\r\n\r\n         return IFCInstanceExporter.CreateSurfaceOfLinearExtrusion(file, sweptCurve, surfaceAxis, direction, scaledExtrusionSize);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcConnectionSurfaceGeometry given a base 2D curve, a direction and a length.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC class.</param>\r\n      /// <param name=\"baseCurve\">The curve to be extruded.</param>\r\n      /// <param name=\"extrusionLCS\">The local coordinate system whose XY plane contains the baseCurve, and whose normal is the direction of the extrusion.</param>\r\n      /// <param name=\"scaledExtrusionSize\">The length of the extrusion, in IFC unit scale.</param>\r\n      /// <param name=\"unscaledBaseHeight\">The Z value of the base level for the surface, in Revit unit scale.</param>\r\n      /// <returns>The extrusion handle.</returns>\r\n      /// <remarks>Note that scaledExtrusionSize and unscaledBaseHeight are in potentially different scaling units.</remarks>\r\n      public static IFCAnyHandle CreateConnectionSurfaceGeometry(ExporterIFC exporterIFC, Curve baseCurve, Transform extrusionLCS,\r\n            double scaledExtrusionSize, double unscaledBaseHeight)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         IFCAnyHandle surfOnRelatingElement = CreateSurfaceOfLinearExtrusionFromCurve(exporterIFC, \r\n            baseCurve, extrusionLCS, scaledExtrusionSize, unscaledBaseHeight, out _);\r\n\r\n         return IFCInstanceExporter.CreateConnectionSurfaceGeometry(file, surfOnRelatingElement, null);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/FabricSheetExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export a Revit element as IfcReinforcingMesh.\r\n   /// </summary>\r\n   public class FabricSheetExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports a FabricArea as an IfcGroup.  There is no geometry to export.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <returns>True if exported successfully, false otherwise.</returns>\r\n      public static bool ExportFabricArea(ExporterIFC exporterIFC, Element element, ProductWrapper productWrapper)\r\n      {\r\n         if (element == null)\r\n            return false;\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         Common.Enums.IFCEntityType elementClassTypeEnum = Common.Enums.IFCEntityType.IfcGroup;\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n            return false;\r\n\r\n         HashSet<IFCAnyHandle> fabricSheetHandles = null;\r\n         if (!ExporterCacheManager.FabricAreaHandleCache.TryGetValue(element.Id, out fabricSheetHandles))\r\n            return false;\r\n\r\n         if (fabricSheetHandles == null || fabricSheetHandles.Count == 0)\r\n            return false;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            string guid = GUIDUtil.CreateGUID(element);\r\n            IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n            string revitObjectType = NamingUtil.GetFamilyAndTypeName(element);\r\n            string name = NamingUtil.GetNameOverride(element, revitObjectType);\r\n            string description = NamingUtil.GetDescriptionOverride(element, null);\r\n            string objectType = NamingUtil.GetObjectTypeOverride(element, revitObjectType);\r\n\r\n            IFCAnyHandle fabricArea = IFCInstanceExporter.CreateGroup(file, guid,\r\n                ownerHistory, name, description, objectType);\r\n\r\n            IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcGroup);\r\n            productWrapper.AddElement(element, fabricArea, exportInfo);\r\n\r\n            string groupGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAssignsToGroup, fabricArea));\r\n            IFCInstanceExporter.CreateRelAssignsToGroup(file, groupGuid, ownerHistory,\r\n               null, null, fabricSheetHandles, null, fabricArea);\r\n\r\n            tr.Commit();\r\n            return true;\r\n         }\r\n      }\r\n\r\n      public struct FabricSheetExportConfig\r\n      {\r\n         public FabricSheet Sheet { get; set; }\r\n         public Document Doc { get; set; }\r\n         public FabricSheetType SheetType { get; set; }\r\n         public ISet<IFCAnyHandle> BodyItems { get; set; }\r\n         public ElementId CategoryId { get; set; }\r\n         public ExporterIFC ExporterIFC { get; set; }\r\n         public IFCFile File { get; set; }\r\n         public PlacementSetter PlacementSetter { get; set; }\r\n         public ElementId MaterialId { get; set; }\r\n         public ProductWrapper ProductWrapper { get; set; }\r\n         public IFCExportBodyParams EcData { get; set; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports an element as an IfcReinforcingMesh.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <returns>True if exported successfully, false otherwise.</returns>\r\n      public static bool ExportFabricSheet(ExporterIFC exporterIFC, FabricSheet sheet,\r\n          GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         if (sheet == null || geometryElement == null)\r\n            return false;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            if (!(sheet.Document?.GetElement(sheet.GetTypeId()) is FabricSheetType fsType))\r\n               return false;\r\n\r\n            using (PlacementSetter placementSetter = PlacementSetter.Create(exporterIFC, sheet, null))\r\n            {\r\n               using (IFCExportBodyParams ecData = new IFCExportBodyParams())\r\n               {\r\n                  ecData.SetLocalPlacement(placementSetter.LocalPlacement);\r\n\r\n                  FabricSheetExportConfig config = new FabricSheetExportConfig()\r\n                  {\r\n                     BodyItems = new HashSet<IFCAnyHandle>(),\r\n                     CategoryId = CategoryUtil.GetSafeCategoryId(sheet),\r\n                     Doc = sheet.Document,\r\n                     Sheet = sheet,\r\n                     EcData = ecData,\r\n                     ExporterIFC = exporterIFC,\r\n                     File = file,\r\n                     PlacementSetter = placementSetter,\r\n                     ProductWrapper = productWrapper,\r\n                     SheetType = fsType\r\n                  };\r\n\r\n                  ParameterUtil.GetElementIdValueFromElementOrSymbol(config.Sheet, BuiltInParameter.MATERIAL_ID_PARAM, out ElementId materialId);\r\n                  config.MaterialId = materialId;\r\n\r\n                  bool status = true;\r\n                  if (config.SheetType.IsCustom())\r\n                  {\r\n                     if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(IFCEntityType.IfcElementAssembly))\r\n                        return false;\r\n                     else\r\n                        status = ExportCustomFabricSheet(config);\r\n                  }\r\n                  else\r\n                  {\r\n                     if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(IFCEntityType.IfcReinforcingMesh))\r\n                        return false;\r\n                     else\r\n                        status = ExportStandardFabricSheet(config);\r\n                  }\r\n\r\n                  if (!status)\r\n                  {\r\n                     tr.RollBack();\r\n                     return false;\r\n                  }\r\n               }\r\n            }\r\n            tr.Commit();\r\n            return true;\r\n         }\r\n      }\r\n\r\n      private static bool ExportCustomFabricSheet(FabricSheetExportConfig cfg)\r\n      {\r\n         if (cfg.Equals(null) || cfg.Sheet.IsBent)\r\n            return false;\r\n\r\n         string guid = GUIDUtil.CreateGUID(cfg.Sheet);\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n         HashSet<IFCAnyHandle> rebarHandles = new HashSet<IFCAnyHandle>();\r\n         string matName = NamingUtil.GetMaterialName(cfg.Doc, cfg.MaterialId);\r\n\r\n         int ii = 0;\r\n         do\r\n         {\r\n            WireDistributionDirection dir = (WireDistributionDirection)ii;\r\n            IList<Curve> wireCenterlines = cfg.Sheet.GetWireCenterlines(dir);\r\n            for (int jj = 0; jj < wireCenterlines.Count; jj++)\r\n            {\r\n               double wireDiam = 0.0;\r\n\r\n               FabricWireItem wire = cfg.SheetType.GetWireItem(jj, dir);\r\n               if (cfg.Doc.GetElement(wire.WireType) is FabricWireType wireType)\r\n                  wireDiam = UnitUtil.ScaleLength(wireType.WireDiameter);\r\n\r\n               IFCAnyHandle bodyItem = GeometryUtil.CreateSweptDiskSolid(cfg.ExporterIFC, cfg.File, wireCenterlines[jj], wireDiam / 2.0, null);\r\n               RepresentationUtil.CreateStyledItemAndAssign(cfg.File, cfg.Doc, cfg.MaterialId, bodyItem);\r\n\r\n               ISet<IFCAnyHandle> bodyItems = new HashSet<IFCAnyHandle> { bodyItem };\r\n               IFCAnyHandle shapeRep = null;\r\n               if (bodyItems.Count > 0)\r\n               {\r\n                  ElementId cfgCategoryId = CategoryUtil.GetSafeCategoryId(cfg);\r\n                  IFCAnyHandle contextOfItems = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Body);\r\n                  shapeRep = RepresentationUtil.CreateAdvancedSweptSolidRep(cfg.ExporterIFC, cfg.Sheet, \r\n                     cfgCategoryId, contextOfItems, bodyItems, null);\r\n               }\r\n\r\n               List<IFCAnyHandle> shapeReps = [];\r\n               shapeReps.AddIfNotNull(shapeRep);\r\n\r\n               IFCAnyHandle prodRep = IFCInstanceExporter.CreateProductDefinitionShape(cfg.File, null, null, shapeReps);\r\n               IFCAnyHandle handle = IFCInstanceExporter.CreateReinforcingBar(cfg.ExporterIFC, cfg.Sheet, guid, ExporterCacheManager.OwnerHistoryHandle,\r\n                  cfg.PlacementSetter.LocalPlacement, prodRep, matName, wireDiam, 0, 0, IFCReinforcingBarRole.NotDefined, null);\r\n               IFCAnyHandleUtil.SetAttribute(handle, \"ObjectType\", \"Generic\");\r\n               CategoryUtil.CreateMaterialAssociation(cfg.ExporterIFC, handle, cfg.MaterialId);\r\n               rebarHandles.Add(handle);\r\n            }\r\n            ii++;\r\n         }\r\n         while (ii < 2);\r\n\r\n         IFCAnyHandle assemblyInstanceHnd = IFCInstanceExporter.CreateElementAssembly(cfg.ExporterIFC, cfg.Sheet, guid,\r\n            ownerHistory, cfg.PlacementSetter.LocalPlacement, null, null, IFCElementAssemblyType.UserDefined);\r\n         IFCExportInfoPair assemblyExportInfo = new IFCExportInfoPair(IFCEntityType.IfcElementAssembly);\r\n         cfg.ProductWrapper.AddElement(cfg.Sheet, assemblyInstanceHnd, cfg.PlacementSetter.LevelInfo, null, true, assemblyExportInfo);\r\n         ExporterCacheManager.AssemblyInstanceCache.RegisterAssemblyInstance(cfg.Sheet.Id, assemblyInstanceHnd);\r\n         IFCInstanceExporter.CreateRelAggregates(cfg.File, guid, ownerHistory, null, null, assemblyInstanceHnd, rebarHandles);\r\n\r\n         return true;\r\n      }\r\n\r\n      private static bool ExportStandardFabricSheet(FabricSheetExportConfig cfg)\r\n      {\r\n         if (cfg.Equals(null))\r\n            return false;\r\n\r\n         string guid = GUIDUtil.CreateGUID(cfg.Sheet);\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n         int ii = 0;\r\n         do\r\n         {\r\n            WireDistributionDirection dir = (WireDistributionDirection)ii;\r\n            IList<Curve> wireCenterlines = cfg.Sheet?.GetWireCenterlines(dir);\r\n            for (int jj = 0; jj < wireCenterlines.Count; jj++)\r\n            {\r\n               double wireDiam = 0.0;\r\n\r\n               Element wireTypeElem = (dir == WireDistributionDirection.Major) ? cfg.Doc?.GetElement(cfg.SheetType?.MajorDirectionWireType) :\r\n                  cfg.Doc?.GetElement(cfg.SheetType?.MinorDirectionWireType);\r\n\r\n               if (wireTypeElem is FabricWireType wireType)\r\n                  wireDiam = UnitUtil.ScaleLength(wireType.WireDiameter);\r\n               IFCAnyHandle bodyItem = GeometryUtil.CreateSweptDiskSolid(cfg.ExporterIFC, cfg.File, wireCenterlines[jj], wireDiam / 2.0, null);\r\n\r\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(bodyItem))\r\n               {\r\n                  cfg.BodyItems?.Add(bodyItem);\r\n                  RepresentationUtil.CreateStyledItemAndAssign(cfg.File, cfg.Doc, cfg.MaterialId, bodyItem);\r\n               }\r\n            }\r\n            ii++;\r\n         }\r\n         while (ii < 2);\r\n\r\n         IFCAnyHandle shapeRep = null;\r\n         if (cfg.BodyItems.Count > 0)\r\n         {\r\n            ElementId categoryId = CategoryUtil.GetSafeCategoryId(cfg);\r\n            IFCAnyHandle contextOfItems = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Body);\r\n            shapeRep = RepresentationUtil.CreateAdvancedSweptSolidRep(cfg.ExporterIFC, cfg.Sheet,\r\n               categoryId, contextOfItems, cfg.BodyItems, null);\r\n         }\r\n\r\n         IList<IFCAnyHandle> shapeReps = new List<IFCAnyHandle>();\r\n         if (shapeRep != null)\r\n            shapeReps.Add(shapeRep);\r\n\r\n         IFCAnyHandle prodRep = (shapeReps != null) ? IFCInstanceExporter.CreateProductDefinitionShape(cfg.File, null, null, shapeReps) : null;\r\n\r\n         FabricParams fabricParams = null;\r\n         if (!ExporterCacheManager.FabricParamsCache.TryGetValue(cfg.Sheet.Id, out fabricParams))\r\n         {\r\n            fabricParams = new FabricParams(cfg.Sheet);\r\n            ExporterCacheManager.FabricParamsCache[cfg.Sheet.Id] = fabricParams;\r\n         }\r\n\r\n         IFCAnyHandle handle = IFCInstanceExporter.CreateReinforcingMesh(cfg.ExporterIFC, cfg.Sheet, guid, ownerHistory, cfg.EcData.GetLocalPlacement(),\r\n            prodRep, fabricParams.SteelGrade, fabricParams.MeshLength, fabricParams.MeshWidth,\r\n            fabricParams.LongitudinalBarNominalDiameter, fabricParams.TransverseBarNominalDiameter,\r\n            fabricParams.LongitudinalBarCrossSectionArea, fabricParams.TransverseBarCrossSectionArea,\r\n            fabricParams.LongitudinalBarSpacing, fabricParams.TransverseBarSpacing);\r\n         IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcReinforcingMesh);\r\n         ElementId fabricAreaId = cfg.Sheet?.FabricAreaOwnerId;\r\n         if (fabricAreaId != ElementId.InvalidElementId)\r\n         {\r\n            if (!ExporterCacheManager.FabricAreaHandleCache.TryGetValue(fabricAreaId, out HashSet<IFCAnyHandle> fabricSheets))\r\n            {\r\n               fabricSheets = new HashSet<IFCAnyHandle>();\r\n               ExporterCacheManager.FabricAreaHandleCache[fabricAreaId] = fabricSheets;\r\n            }\r\n            fabricSheets.Add(handle);\r\n         }\r\n         cfg.ProductWrapper.AddElement(cfg.Sheet, handle, cfg.PlacementSetter?.LevelInfo, cfg.EcData, true, exportInfo);\r\n\r\n         if (exportInfo.ExportType != Common.Enums.IFCEntityType.UnKnown)\r\n         {\r\n            IFCAnyHandle type = ExporterUtil.CreateGenericTypeFromElement(cfg.Sheet, exportInfo, cfg.File, cfg.ProductWrapper);\r\n            ExporterCacheManager.TypeRelationsCache.Add(type, handle);\r\n         }\r\n\r\n         CategoryUtil.CreateMaterialAssociation(cfg.ExporterIFC, handle, cfg.MaterialId);\r\n\r\n         return true;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/FabricationPartExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Export.Utility;\r\nusing System;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export a Fabrication part element.\r\n   /// </summary>\r\n   class FabricationPartExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports an element as a covering of type insulation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <returns>True if exported successfully, false otherwise.</returns>\r\n      public static bool ExportFabricationInsulationOrLining(ExporterIFC exporterIFC, FabricationPartInsulationLining element,\r\n          GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         // Let the method IFCCategoryTemplate::getDefaultMapping take care of the fabrication part insulation/lining export.\r\n         return GenericElementExporter.ExportElement(exporterIFC, element, geometryElement, productWrapper);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a fabrication part element.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"fabPart\">The fabrication part.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <returns>True if exported successfully, false otherwise.</returns>\r\n      public static bool ExportFabricationPart(ExporterIFC exporterIFC, FabricationPart fabPart,\r\n          GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         ElementId fabCategory = CategoryUtil.GetSafeCategoryId(fabPart);\r\n         if (fabCategory != new ElementId(BuiltInCategory.OST_FabricationDuctwork) && fabCategory != new ElementId(BuiltInCategory.OST_FabricationPipework))\r\n         {\r\n            // Let the containment and stiffener parts be handled by the generic exporter.\r\n            return GenericElementExporter.ExportElement(exporterIFC, fabPart, geometryElement, productWrapper);\r\n         }\r\n\r\n         string ifcEnumType;\r\n         // Let the GetExportTypeImpl method return the correct export type for fabrication straights and fittings.\r\n         IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(fabPart, out ifcEnumType);\r\n\r\n\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         IFCEntityType elementClassTypeEnum;\r\n         if (Enum.TryParse(exportType.ExportInstance.ToString(), out elementClassTypeEnum)\r\n            || Enum.TryParse(exportType.ExportType.ToString(), out elementClassTypeEnum))\r\n         {\r\n            if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n               return false;\r\n         }\r\n\r\n         bool exported = GenericMEPExporter.Export(exporterIFC, fabPart, geometryElement, exportType, ifcEnumType, productWrapper);\r\n         if (exported)\r\n         {\r\n            // Similar as the design elements, we will add a IfcRelCoversBldgElements for the fabrication parts during the end of export.\r\n            ExporterCacheManager.MEPCache.CoveredElementsCache[fabPart.Id] = fabCategory;\r\n         }\r\n         return exported;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/FamilyInstanceExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export family instances.\r\n   /// </summary>\r\n   public class FamilyInstanceExporter\r\n   {\r\n      private static bool IsExtrusionFriendlyType(IFCEntityType entityType)\r\n      {\r\n         return (entityType == IFCEntityType.IfcColumn)\r\n            || (entityType == IFCEntityType.IfcBeam)\r\n            || (entityType == IFCEntityType.IfcMember)\r\n            || (entityType == IFCEntityType.IfcPile);\r\n      }\r\n\r\n      public static IList<IFCAnyHandle> CreateShapeRepresentations(ExporterIFC exporterIFC,\r\n         IFCFile file, Element instance, ElementId categoryId, FamilyTypeInfo typeInfo,\r\n         XYZ scaledMapOrigin)\r\n      {\r\n         IList<IFCAnyHandle> shapeReps = new List<IFCAnyHandle>();\r\n\r\n         IFCAnyHandle contextOfItems2d = ExporterCacheManager.Get2DContextHandle(IFCRepresentationIdentifier.Annotation);\r\n         IFCAnyHandle contextOfItems1d = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Axis);\r\n\r\n\r\n         // for proxies, we store the IfcRepresentationMap directly since there is no style.\r\n         IFCAnyHandle style = typeInfo.Style;\r\n         IList<IFCAnyHandle> repMapList = !IFCAnyHandleUtil.IsNullOrHasNoValue(style) ?\r\n               GeometryUtil.GetRepresentationMaps(style) : null;\r\n         if (repMapList == null)\r\n         {\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(typeInfo.Map3DHandle))\r\n            {\r\n               repMapList = new List<IFCAnyHandle>();\r\n               repMapList.Add(typeInfo.Map3DHandle);\r\n            }\r\n\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(typeInfo.Map2DHandle))\r\n            {\r\n               repMapList ??= new List<IFCAnyHandle>();\r\n               repMapList.Add(typeInfo.Map2DHandle);\r\n            }\r\n         }\r\n\r\n         int numReps = repMapList != null ? repMapList.Count : 0;\r\n\r\n         // Note that repMapList may be null here, so we use numReps instead.\r\n         for (int ii = 0; ii < numReps; ii++)\r\n         {\r\n            IFCAnyHandle repMap = repMapList[ii];\r\n            int dimRepMap = RepresentationUtil.DimOfRepresentationContext(repMap);\r\n            if (dimRepMap < 1 || dimRepMap > 3)\r\n               return null;\r\n\r\n            HashSet<IFCAnyHandle> representations = new HashSet<IFCAnyHandle>();\r\n            representations.Add(ExporterUtil.CreateDefaultMappedItem(file, repMap, scaledMapOrigin));\r\n            IFCAnyHandle shapeRep = null;\r\n            switch (dimRepMap)\r\n            {\r\n               case 3:\r\n                  {\r\n                     IFCAnyHandle mapRep = IFCAnyHandleUtil.GetInstanceAttribute(repMap, \"MappedRepresentation\");\r\n                     IFCAnyHandle context = IFCAnyHandleUtil.GetInstanceAttribute(mapRep, \"ContextOfItems\");\r\n                     shapeRep = RepresentationUtil.CreateBodyMappedItemRep(exporterIFC, instance, categoryId, context,\r\n                           representations);\r\n                     break;\r\n                  }\r\n               case 2:\r\n                  {\r\n                     shapeRep = RepresentationUtil.CreatePlanMappedItemRep(exporterIFC, instance, categoryId, contextOfItems2d,\r\n                     representations);\r\n                     break;\r\n                  }\r\n               case 1:\r\n                  {\r\n                     shapeRep = RepresentationUtil.CreateGraphMappedItemRep(exporterIFC, instance, categoryId, contextOfItems1d,\r\n                     representations);\r\n                     break;\r\n                  }\r\n            }\r\n\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(shapeRep))\r\n               return null;\r\n\r\n            shapeReps.Add(shapeRep);\r\n         }\r\n\r\n         return shapeReps;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a family instance to corresponding IFC object.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"familyInstance\">\r\n      /// The family instance to be exported.\r\n      /// </param>\r\n      /// <param name=\"geometryElement\">\r\n      /// The geometry element.\r\n      /// </param>\r\n      /// <param name=\"productWrapper\">\r\n      /// The ProductWrapper.\r\n      /// </param>\r\n      public static void ExportFamilyInstanceElement(ExporterIFC exporterIFC,\r\n      FamilyInstance familyInstance, ref GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         // Don't export family if it is invisible, or has a null geometry.\r\n         if (familyInstance.Invisible || geometryElement == null)\r\n            return;\r\n\r\n         // Skip exporting the family instance if it has a curtain grid host,\r\n         // as the host is responsible for export. Ensure the host itself is exported.\r\n         Element host = familyInstance.Host;\r\n         if ((CurtainSystemExporter.IsCurtainSystem(host) ||\r\n            CurtainSystemExporter.IsLegacyCurtainElement(host))\r\n            && ExporterCacheManager.NonSpatialElements.Contains(host.Id))\r\n            return;\r\n\r\n         FamilySymbol familySymbol = familyInstance.Symbol;\r\n         Family family = familySymbol.Family;\r\n         if (family == null)\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(familyInstance, out _);\r\n\r\n            if (exportType.IsUnKnown)\r\n               return;\r\n\r\n            // TODO: This step now appears to be redundant with the rest of the steps, but to change it is too much of risk of regression. Reserve it for future refactoring\r\n            if (ExportGenericToSpecificElement(exporterIFC, familyInstance, ref geometryElement, exportType, productWrapper))\r\n            {\r\n               tr.Commit();\r\n               return;\r\n            }\r\n\r\n            // If we are exporting a column, we may need to split it into parts by level.  Create a list of ranges.\r\n            IDictionary<ElementId, IFCRange> levelsAndRanges = null;\r\n\r\n            // We will not split walls and columns if the assemblyId is set, as we would like to keep the original wall\r\n            // associated with the assembly, on the level of the assembly.\r\n            bool splitColumn = (exportType.ExportInstance == IFCEntityType.IfcColumn) && (ExporterCacheManager.ExportOptionsCache.WallAndColumnSplitting) &&\r\n               !ExporterUtil.IsContainedInAssembly(familyInstance);\r\n            if (splitColumn)\r\n            {\r\n               levelsAndRanges = LevelUtil.CreateSplitLevelRangesForElement(exportType, familyInstance);\r\n            }\r\n\r\n            int numPartsToExport = levelsAndRanges?.Count ?? 0;\r\n            if (numPartsToExport == 0)\r\n            {\r\n               ExportFamilyInstanceAsMappedItem(exporterIFC, familyInstance, exportType, productWrapper,\r\n                  ElementId.InvalidElementId, null, null);\r\n            }\r\n            else\r\n            {\r\n               using (ExporterStateManager.RangeIndexSetter rangeSetter = new ExporterStateManager.RangeIndexSetter())\r\n               {\r\n                  foreach (KeyValuePair<ElementId, IFCRange> levelRange in levelsAndRanges)\r\n                  {\r\n                     rangeSetter.IncreaseRangeIndex();\r\n                     ExportFamilyInstanceAsMappedItem(exporterIFC, familyInstance, exportType, productWrapper,\r\n                       levelRange.Key, levelRange.Value, null);\r\n                  }\r\n\r\n                  if (ExporterCacheManager.DummyHostCache.HasRegistered(familyInstance.Id))\r\n                  {\r\n                     List<KeyValuePair<ElementId, IFCRange>> levelRangeList = ExporterCacheManager.DummyHostCache.Find(familyInstance.Id);\r\n                     foreach (KeyValuePair<ElementId, IFCRange> levelRange in levelRangeList)\r\n                     {\r\n                        rangeSetter.IncreaseRangeIndex();\r\n                        ExportFamilyInstanceAsMappedItem(exporterIFC, familyInstance, exportType, productWrapper,\r\n                          levelRange.Key, levelRange.Value, null);\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n\r\n            tr.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IfcTypeEntity handle with a mapped representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExportIFC class.</param>\r\n      /// <param name=\"typeKey\">The information that identifies the type object.</param>\r\n      /// <param name=\"typeInfo\">The type information.</param>\r\n      /// <param name=\"doorWindowInfo\">Optional extra information for doors and windows.</param>\r\n      /// <param name=\"representations3D\">The 3D representation items.</param>\r\n      /// <param name=\"trfRepMapList\">An optional list of transforms.</param>\r\n      /// <param name=\"representations2D\">The 2D representation items.</param>\r\n      /// <param name=\"familyInstance\">The instance element.</param>\r\n      /// <param name=\"familySymbol\">The type element.</param>\r\n      /// <param name=\"originalFamilySymbol\">For FamilyInstances, the primary symbol.</param>\r\n      /// <param name=\"useInstanceGeometry\">True if we should use the instance geometry.</param>\r\n      /// <param name=\"exportParts\">True if we are exporting parts.</param>\r\n      /// <param name=\"exportType\">The entity type information.</param>\r\n      /// <param name=\"propertySets\">The created list of property sets.</param>\r\n      /// <returns>An IfcTypeEntity handle.</returns>\r\n      public static IFCAnyHandle CreateTypeEntityHandle(ExporterIFC exporterIFC,\r\n         TypeObjectKey typeKey, ref FamilyTypeInfo typeInfo, DoorWindowInfo doorWindowInfo,\r\n         IList<IFCAnyHandle> representations3D, IList<Transform> trfRepMapList,\r\n         IList<IFCAnyHandle> representations2D, IDictionary<IFCAnyHandle, Transform> trfRep2DMapList, Element familyInstance, ElementType familySymbol,\r\n         ElementType originalFamilySymbol, ElementId overrideLevelId, bool useInstanceGeometry, \r\n         bool exportParts, IFCExportInfoPair exportType, out HashSet<IFCAnyHandle> propertySets)\r\n      {\r\n         // for many\r\n         propertySets = new HashSet<IFCAnyHandle>();\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         IFCAnyHandle repMap2dHnd = null;\r\n         IFCAnyHandle repMap3dHnd = null;\r\n\r\n         IList<IFCAnyHandle> repMapList = new List<IFCAnyHandle>();\r\n         {\r\n            IFCAnyHandle origin = null;\r\n            int originTransformIndex = -1;\r\n            if (representations3D != null)\r\n            {\r\n               int num = 0;\r\n               foreach (IFCAnyHandle rep in representations3D)\r\n               {\r\n                  if (trfRepMapList[num] == null)\r\n                  {\r\n                     originTransformIndex = -1;\r\n                     origin = ExporterUtil.CreateAxis2Placement3D(file);\r\n                  }\r\n                  else\r\n                  {\r\n                     originTransformIndex = num;\r\n                     origin = ExporterUtil.CreateAxis2Placement3D(file, trfRepMapList[num].Origin, trfRepMapList[num].BasisZ, trfRepMapList[num].BasisX);   // Used by 'Axis' MappedRepresentation\r\n                  }\r\n\r\n                  repMap3dHnd = IFCInstanceExporter.CreateRepresentationMap(file, origin, rep);\r\n                  repMapList.Add(repMap3dHnd);\r\n                  num++;\r\n               }\r\n            }\r\n\r\n            if (representations2D != null)\r\n            {\r\n               origin ??= ExporterUtil.CreateAxis2Placement3D(file);\r\n               foreach (IFCAnyHandle rep in representations2D)\r\n               {\r\n                  IFCAnyHandle currentOrigin = origin;\r\n                  if (trfRep2DMapList?.TryGetValue(rep, out Transform rep2DTransform) ?? false)\r\n                  {\r\n                     // Add 3D represantation origin transform if set.\r\n                     if (originTransformIndex >= 0)\r\n                        rep2DTransform = trfRepMapList[originTransformIndex].Multiply(rep2DTransform);\r\n\r\n                     currentOrigin = ExporterUtil.CreateAxis2Placement3D(file, rep2DTransform.Origin, rep2DTransform.BasisZ, rep2DTransform.BasisX);\r\n                  }\r\n\r\n                  repMap2dHnd = IFCInstanceExporter.CreateRepresentationMap(file, currentOrigin, rep);\r\n                  repMapList.Add(repMap2dHnd);\r\n               }\r\n            }\r\n         }\r\n\r\n         // We won't allow creating a type if we aren't creating an instance.\r\n         // We won't create the instance if: we are exporting to CV2.0/RV, we have no 2D, 3D, or bounding box geometry, and we aren't exporting parts.\r\n         bool willCreateInstance = !(repMapList.Count == 0\r\n            && !ExporterCacheManager.ExportOptionsCache.ExportBoundingBox && !exportParts\r\n             && (ExporterCacheManager.ExportOptionsCache.ExportAsCoordinationView2\r\n                     || ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView));\r\n         if (!willCreateInstance)\r\n            return null;\r\n\r\n         IFCAnyHandle typeStyle = null;\r\n\r\n         // for Door, Window\r\n         bool paramTakesPrecedence = false; // For Revit, this is currently always false.\r\n         bool sizeable = false;\r\n\r\n         // The GUID calculations have a number of exceptions that we determine here.\r\n         Element instanceOrSymbol = useInstanceGeometry ? familyInstance : originalFamilySymbol;\r\n         int? index = ExporterCacheManager.FamilySymbolToTypeInfoCache.GetAlternateGUIDIndex(typeKey);\r\n         string guid = GUIDUtil.GenerateIFCGuidFrom(useInstanceGeometry, instanceOrSymbol,\r\n            exportType, typeKey, index);\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(typeStyle))\r\n         {\r\n            switch (exportType.ExportInstance)\r\n            {\r\n               case IFCEntityType.IfcBeam:\r\n                  {\r\n                     string beamType = exportType.GetPredefinedTypeOrDefault(\"Beam\");\r\n                     typeStyle = IFCInstanceExporter.CreateBeamType(file, familySymbol, guid, propertySets, repMapList, beamType);\r\n                     break;\r\n                  }\r\n               case IFCEntityType.IfcColumn:\r\n                  {\r\n                     string columnType = exportType.GetPredefinedTypeOrDefault(\"Column\");\r\n                     typeStyle = IFCInstanceExporter.CreateColumnType(file, familySymbol, guid,\r\n                        propertySets, repMapList, columnType);\r\n                     break;\r\n                  }\r\n               case IFCEntityType.IfcMember:\r\n                  {\r\n                     string memberType = exportType.GetPredefinedTypeOrDefault(\"Brace\");\r\n                     typeStyle = IFCInstanceExporter.CreateMemberType(file, familySymbol, guid,\r\n                        propertySets, repMapList, memberType);\r\n                     break;\r\n                  }\r\n               case IFCEntityType.IfcDoor:\r\n                  {\r\n                     propertySets.AddIfNotNull(DoorWindowUtil.CreateDoorLiningProperties(\r\n                        exporterIFC, familyInstance));\r\n\r\n                     IList<IFCAnyHandle> doorPanels = DoorWindowUtil.CreateDoorPanelProperties(exporterIFC,\r\n                        doorWindowInfo, familyInstance);\r\n                     propertySets.UnionWith(doorPanels);\r\n\r\n                     if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n                     {\r\n                        typeStyle = IFCInstanceExporter.CreateDoorStyle(file, familySymbol,\r\n                           guid, propertySets, repMapList, doorWindowInfo?.DoorOperationTypeString,\r\n                           DoorWindowUtil.GetDoorStyleConstruction(familyInstance),\r\n                           paramTakesPrecedence, sizeable);\r\n                     }\r\n                     else\r\n                     {\r\n                        typeStyle = IFCInstanceExporter.CreateDoorType(file, familySymbol,\r\n                           guid, propertySets, repMapList, doorWindowInfo?.PreDefinedType,\r\n                           doorWindowInfo?.DoorOperationTypeString, paramTakesPrecedence,\r\n                           doorWindowInfo?.UserDefinedOperationType);\r\n                     }\r\n                     break;\r\n                  }\r\n               case IFCEntityType.IfcSpace:\r\n                  {\r\n                     typeStyle = IFCInstanceExporter.CreateSpaceType(file, familySymbol, guid,\r\n                        propertySets, repMapList, exportType.GetPredefinedTypeOrDefault());\r\n                     break;\r\n                  }\r\n               case IFCEntityType.IfcSystemFurnitureElement:\r\n                  {\r\n                     typeStyle = IFCInstanceExporter.CreateSystemFurnitureElementType(file,\r\n                        familySymbol, guid, propertySets, repMapList, exportType.GetPredefinedTypeOrDefault());\r\n                     break;\r\n                  }\r\n               case IFCEntityType.IfcWindow:\r\n                  {\r\n                     IFCWindowStyleOperation operationType = DoorWindowUtil.GetIFCWindowStyleOperation(originalFamilySymbol);\r\n                     IFCWindowStyleConstruction constructionType = DoorWindowUtil.GetIFCWindowStyleConstruction(familyInstance);\r\n\r\n                     propertySets.AddIfNotNull(DoorWindowUtil.CreateWindowLiningProperties(\r\n                        exporterIFC, familyInstance, null));\r\n\r\n                     IList<IFCAnyHandle> windowPanels =\r\n                        DoorWindowUtil.CreateWindowPanelProperties(exporterIFC, familyInstance, null);\r\n                     propertySets.UnionWith(windowPanels);\r\n\r\n                     if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n                     {\r\n                        typeStyle = IFCInstanceExporter.CreateWindowStyle(file, familySymbol,\r\n                           guid, propertySets, repMapList, constructionType, operationType,\r\n                           paramTakesPrecedence, sizeable);\r\n                     }\r\n                     else\r\n                     {\r\n                        typeStyle = IFCInstanceExporter.CreateWindowType(file, familySymbol,\r\n                           guid, propertySets, repMapList, doorWindowInfo.PreDefinedType,\r\n                           DoorWindowUtil.GetIFCWindowPartitioningType(originalFamilySymbol),\r\n                           paramTakesPrecedence, doorWindowInfo.UserDefinedOperationType);\r\n                     }\r\n                     break;\r\n                  }\r\n               case IFCEntityType.IfcBuildingElementProxy:\r\n                  {\r\n                     typeStyle = IFCInstanceExporter.CreateGenericIFCType(exportType, familySymbol,\r\n                        guid, file, propertySets, repMapList);\r\n                     break;\r\n                  }\r\n               case IFCEntityType.IfcFurniture:\r\n               case IFCEntityType.IfcFurnishingElement:\r\n                  {\r\n                     typeStyle = IFCInstanceExporter.CreateFurnitureType(file, familySymbol,\r\n                        guid, propertySets, repMapList, null, null, null,\r\n                        exportType.GetPredefinedTypeOrDefault());\r\n                     break;\r\n                  }\r\n            }\r\n\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(typeStyle))\r\n            {\r\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(repMap2dHnd))\r\n                  typeInfo.Map2DHandle = repMap2dHnd;\r\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(repMap3dHnd))\r\n                  typeInfo.Map3DHandle = repMap3dHnd;\r\n            }\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(typeStyle))\r\n         {\r\n            // This covers many generic types.  If we can't find it in the list here, do custom exports.\r\n            typeStyle = FamilyExporterUtil.ExportGenericType(file, exportType, propertySets, repMapList, familyInstance, familySymbol, guid);\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(typeStyle))\r\n            return null;\r\n\r\n         typeInfo.Style = typeStyle;\r\n\r\n         return typeStyle;\r\n      }\r\n\r\n      private static readonly HashSet<ElementId> s_InsulatedOrLinedSet = new HashSet<ElementId>()\r\n      {\r\n         new ElementId(BuiltInCategory.OST_DuctAccessory)\r\n         , new ElementId(BuiltInCategory.OST_DuctCurves)\r\n         , new ElementId(BuiltInCategory.OST_DuctFitting)\r\n         , new ElementId(BuiltInCategory.OST_FlexDuctCurves)\r\n         , new ElementId(BuiltInCategory.OST_FabricationDuctwork)\r\n         , new ElementId(BuiltInCategory.OST_FlexPipeCurves)\r\n         , new ElementId(BuiltInCategory.OST_PipeAccessory)\r\n         , new ElementId(BuiltInCategory.OST_PipeCurves)\r\n         , new ElementId(BuiltInCategory.OST_PipeFitting)\r\n         , new ElementId(BuiltInCategory.OST_FabricationPipework)\r\n      };\r\n\r\n      private static readonly HashSet<ElementId> s_LinedOnlySet = new HashSet<ElementId>()\r\n      {\r\n         new ElementId(BuiltInCategory.OST_DuctAccessory)\r\n         , new ElementId(BuiltInCategory.OST_DuctCurves)\r\n         , new ElementId(BuiltInCategory.OST_DuctFitting)\r\n         , new ElementId(BuiltInCategory.OST_FlexDuctCurves)\r\n         , new ElementId(BuiltInCategory.OST_FabricationDuctwork)\r\n      };\r\n\r\n      private static bool CanHaveInsulationOrLining(IFCExportInfoPair exportType, ElementId categoryId)\r\n      {\r\n         // This is intended to reduce the number of exceptions thrown in GetLiningIds and GetInsulationIds.\r\n         // There may still be some exceptions thrown as the category list below is still too large for GetLiningIds.\r\n         if (exportType.ExportType != IFCEntityType.IfcDuctFittingType && exportType.ExportType != IFCEntityType.IfcPipeFittingType &&\r\n            exportType.ExportType != IFCEntityType.IfcDuctSegmentType && exportType.ExportType != IFCEntityType.IfcPipeSegmentType)\r\n            return false;\r\n\r\n         return s_InsulatedOrLinedSet.Contains(categoryId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if a given category is compatible with having insulation.\r\n      /// </summary>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <returns>True if it supports insulation, false otherwise.</returns>\r\n      public static bool CategoryCanHaveLining(ElementId categoryId)\r\n      {\r\n         return s_LinedOnlySet.Contains(categoryId);\r\n      }\r\n\r\n      private static bool CanHaveSystemDefinition(IFCExportInfoPair exportType, ElementId categoryId)\r\n      {\r\n         if (exportType.ExportType != IFCEntityType.IfcCableSegmentType && exportType.ExportType != IFCEntityType.IfcCableCarrierSegmentType &&\r\n            exportType.ExportType != IFCEntityType.IfcCableFittingType && exportType.ExportType != IFCEntityType.IfcCableCarrierFittingType)\r\n            return false;\r\n\r\n         return (categoryId == new ElementId(BuiltInCategory.OST_CableTrayFitting) || categoryId == new ElementId(BuiltInCategory.OST_ConduitFitting));\r\n      }\r\n\r\n      private static bool CreateMaterialAssociation(IFCFile file, IFCAnyHandle instanceHandle, IFCAnyHandle materialProfileSet,\r\n         int? cardinalPoint)\r\n      {\r\n         if (materialProfileSet == null)\r\n            return false;\r\n\r\n         IFCAnyHandle materialEntityToAssociate = materialProfileSet;\r\n\r\n         // RV does not support IfcMaterialProfileSetUsage, material assignment should be directly to the MaterialProfileSet.\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n         {\r\n            materialEntityToAssociate = CategoryUtil.CreateMaterialProfileSetUsage(file, materialProfileSet, cardinalPoint);\r\n         }\r\n         CategoryUtil.CreateMaterialAssociation(instanceHandle, materialEntityToAssociate);\r\n\r\n         return true;\r\n      }\r\n\r\n      private static bool IsTransformValid(Transform transform)\r\n      {\r\n         // There are no good API functions that check if a\r\n         // Transform has invalid information in it.  So just\r\n         // try assignment.\r\n         try\r\n         {\r\n            XYZ checkTransform = transform.OfPoint(XYZ.Zero);\r\n         }\r\n         catch (Autodesk.Revit.Exceptions.ArgumentException)\r\n         {\r\n            return false;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a family instance as a mapped item.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"familyInstance\">The family instance to be exported.</param>\r\n      /// <param name=\"exportType\">The export type.</param>\r\n      /// <param name=\"wrapper\">The ProductWrapper.</param>\r\n      /// <param name=\"overrideLevelId\">The level id.</param>\r\n      /// <param name=\"range\">The range of this family instance to be exported.</param>\r\n      public static void ExportFamilyInstanceAsMappedItem(ExporterIFC exporterIFC, FamilyInstance familyInstance, IFCExportInfoPair exportType,\r\n          ProductWrapper wrapper, ElementId overrideLevelId, IFCRange range, IFCAnyHandle parentLocalPlacement)\r\n      {\r\n         bool exportParts = PartExporter.CanExportParts(familyInstance);\r\n         bool isSplit = range != null;\r\n         if (exportParts && !PartExporter.CanExportElementInPartExport(familyInstance, isSplit ? overrideLevelId : familyInstance.LevelId, isSplit))\r\n            return;\r\n\r\n         // A Family Instance can have its own copy of geometry, or use the symbol's copy with a transform.\r\n         // The routine below tells us whether to use the Instance's copy or the Symbol's copy.\r\n         bool useInstanceGeometry = GeometryUtil.UsesInstanceGeometry(familyInstance);\r\n         Transform trf = familyInstance.GetTransform();\r\n         if (!IsTransformValid(trf))\r\n         {\r\n            // We have found cases where there are family instances with invalid transform\r\n            // information.  If we find them, ignore them (they won't be visible in Revit,\r\n            // either.)\r\n            return;\r\n         }\r\n\r\n         Document doc = familyInstance.Document;\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         // The \"originalFamilySymbol\" has the right geometry, but should be used as little as possible.\r\n         FamilySymbol originalFamilySymbol = ExporterIFCUtils.GetOriginalSymbol(familyInstance);\r\n         FamilySymbol familySymbol = familyInstance.Symbol;\r\n         if (originalFamilySymbol == null || familySymbol == null)\r\n            return;\r\n\r\n         ProductWrapper familyProductWrapper = ProductWrapper.Create(wrapper);\r\n         Options options = GeometryUtil.GetIFCExportGeometryOptions();\r\n\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n         HostObject hostElement = familyInstance.Host as HostObject; //hostElement could be null\r\n         ElementId categoryId = CategoryUtil.GetSafeCategoryId(familySymbol);\r\n\r\n         string familyName = familySymbol.Name;\r\n\r\n         MaterialAndProfile materialAndProfile = null;\r\n         IFCAnyHandle materialProfileSet = null;\r\n         IFCAnyHandle materialLayerSet = null;\r\n         IFCExportBodyParams extrusionData = null;\r\n\r\n         IList<Transform> repMapTrfList = new List<Transform>();\r\n         IDictionary<IFCAnyHandle, Transform> repMap2DTrfDict = new Dictionary<IFCAnyHandle, Transform>();\r\n\r\n         XYZ orig = XYZ.Zero;\r\n         XYZ extrudeDirection = null;\r\n\r\n         BodyData bodyData = null;\r\n\r\n         // Extra information if we are exporting a door or a window.\r\n         DoorWindowInfo doorWindowInfo = null;\r\n         if (exportType.ExportType == IFCEntityType.IfcDoorType || exportType.ExportInstance == IFCEntityType.IfcDoor)\r\n            doorWindowInfo = DoorWindowExporter.CreateDoor(exporterIFC, familyInstance, hostElement, overrideLevelId, trf, exportType);\r\n         else if (exportType.ExportType == IFCEntityType.IfcWindowType || exportType.ExportInstance == IFCEntityType.IfcWindow)\r\n            doorWindowInfo = DoorWindowExporter.CreateWindow(exporterIFC, familyInstance, hostElement, overrideLevelId, trf, exportType);\r\n\r\n         FamilyTypeInfo typeInfo = new FamilyTypeInfo();\r\n         IFCExportBodyParams extraParams = typeInfo.extraParams;\r\n\r\n         exportType = FamilyExporterUtil.AdjustExportTypeForSchema(exportType);\r\n\r\n         bool flipped = doorWindowInfo?.FlippedSymbol ?? false;\r\n         ElementId overrideMaterialId = ExporterUtil.GetSingleMaterial(familyInstance);\r\n\r\n         bool containedInAssembly = ExporterUtil.IsContainedInAssembly(familyInstance);\r\n         var typeKey = new TypeObjectKey(originalFamilySymbol.Id,\r\n            overrideLevelId, flipped, exportType, overrideMaterialId, containedInAssembly);\r\n\r\n         FamilyTypeInfo currentTypeInfo = \r\n            ExporterCacheManager.FamilySymbolToTypeInfoCache.Find(typeKey);\r\n         bool foundNotEmpty = currentTypeInfo.IsValid();\r\n         bool foundButEmpty = false;\r\n         // Even though the type may be defined previously (found), the type may not be\r\n         // complete in case the type is created against an instance that has no geometry in\r\n         // it (e.g. Column that is split into Parts). In this case, we will conditionally\r\n         // create a new type.  If the new type also has no geometry, we will use the old\r\n         // type.\r\n         if (foundNotEmpty && !IFCAnyHandleUtil.IsNullOrHasNoValue(currentTypeInfo.Style))\r\n         {\r\n            IList<IFCAnyHandle> repMaps = GeometryUtil.GetRepresentationMaps(currentTypeInfo.Style);\r\n            if ((repMaps?.Count ?? 0) == 0)\r\n            {\r\n               foundNotEmpty = false;\r\n               foundButEmpty = true;\r\n            }\r\n         }\r\n\r\n         IList<GeometryObject> geomObjects = new List<GeometryObject>();\r\n         Transform offsetTransform = Transform.Identity;\r\n\r\n         Transform doorWindowTrf = Transform.Identity;\r\n\r\n         // We will create a new mapped type if:\r\n         // 1.  We are using the instance's copy of the geometry (that it, it has unique geometry), OR\r\n         // 2.  We haven't already created the type.\r\n         bool creatingType = (useInstanceGeometry || !foundNotEmpty);\r\n         if (creatingType)\r\n         {\r\n            IList<IFCAnyHandle> representations3D = new List<IFCAnyHandle>();\r\n            IList<IFCAnyHandle> representations2D = new List<IFCAnyHandle>();\r\n\r\n            if (doorWindowInfo != null)\r\n            {\r\n               doorWindowTrf = ExporterIFCUtils.GetTransformForDoorOrWindow(familyInstance, originalFamilySymbol,\r\n                  doorWindowInfo.FlippedX, doorWindowInfo.FlippedY);\r\n            }\r\n\r\n            Element exportGeometryElement = useInstanceGeometry ? familyInstance : originalFamilySymbol;\r\n            GeometryElement exportGeometry = exportGeometryElement.get_Geometry(options);\r\n\r\n            // There are 2 possible paths for a Family Instance to be exported as a Swept Solid.\r\n            // 1. Below here through ExtrusionExporter.CreateExtrusionWithClipping\r\n            // 2. Through BodyExporter.ExportBody\r\n            if (!exportParts)\r\n            {\r\n               using (TransformSetter trfSetter = TransformSetter.Create())\r\n               {\r\n                  if (doorWindowInfo != null)\r\n                  {\r\n                     trfSetter.Initialize(exporterIFC, doorWindowTrf);\r\n                  }\r\n\r\n                  if (exportGeometry == null)\r\n                     return;\r\n\r\n                  SolidMeshGeometryInfo solidMeshCapsule = null;\r\n\r\n                  if (range == null)\r\n                  {\r\n                     solidMeshCapsule = GeometryUtil.GetSplitSolidMeshGeometry(exportGeometry);\r\n                  }\r\n                  else\r\n                  {\r\n                     solidMeshCapsule = GeometryUtil.GetSplitClippedSolidMeshGeometry(exportGeometry, range);\r\n                  }\r\n\r\n                  IList<Solid> solids = solidMeshCapsule.GetSolids();\r\n                  IList<Mesh> polyMeshes = solidMeshCapsule.GetMeshes();\r\n\r\n                  // If we are exporting parts, it is OK to have no geometry here - it will be added by the host Part.\r\n                  bool hasSolidsOrMeshesInSymbol = (solids.Count > 0 || polyMeshes.Count > 0);\r\n\r\n                  if (range != null && !hasSolidsOrMeshesInSymbol)\r\n                     return; // no proper split geometry to export.\r\n\r\n                  if (hasSolidsOrMeshesInSymbol)\r\n                  {\r\n                     geomObjects = FamilyExporterUtil.RemoveInvisibleSolidsAndMeshes(doc, exporterIFC, ref solids, ref polyMeshes);\r\n                     if ((geomObjects.Count == 0))\r\n                        return; // no proper visible split geometry to export.\r\n                  }\r\n                  else\r\n                  {\r\n                     geomObjects.Add(exportGeometry);\r\n                  }\r\n\r\n                  bool isExtrusionFriendlyType = IsExtrusionFriendlyType(exportType.ExportInstance);\r\n                  bool tryToExportAsExtrusion = (!ExporterCacheManager.ExportOptionsCache.ExportAs2x2\r\n                     || isExtrusionFriendlyType);\r\n\r\n                  if (isExtrusionFriendlyType)\r\n                  {\r\n                     // Get a profile name. \r\n                     string profileName = NamingUtil.GetProfileName(familySymbol);\r\n\r\n                     // Regardless of whether we are using the instance or type geometry, we will look at the instance for a hint\r\n                     // to find transform information.\r\n                     StructuralMemberAxisInfo axisInfo = StructuralMemberExporter.GetStructuralMemberAxisTransform(familyInstance);\r\n                     if (axisInfo != null)\r\n                     {\r\n                        if (useInstanceGeometry)\r\n                        {\r\n                           orig = axisInfo.LCSAsTransform.Origin;\r\n                           extrudeDirection = axisInfo.AxisDirection;\r\n                        }\r\n                        else\r\n                        {\r\n                           Transform inverseTransform = trf.Inverse;\r\n                           orig = inverseTransform.OfPoint(axisInfo.LCSAsTransform.Origin);\r\n                           extrudeDirection = inverseTransform.OfVector(axisInfo.AxisDirection);\r\n                        }\r\n\r\n                        extraParams.CustomAxis = extrudeDirection;\r\n                        extraParams.PossibleExtrusionAxes = IFCExtrusionAxes.TryXY;\r\n\r\n                        if (solids.Count > 0)\r\n                        {\r\n                           FootPrintInfo footprintInfo = null;\r\n                           Plane basePlaneToUse = GeometryUtil.CreatePlaneByNormalAtOrigin(extrudeDirection);\r\n\r\n                           GenerateAdditionalInfo addInfo = GenerateAdditionalInfo.GenerateBody | GenerateAdditionalInfo.GenerateProfileDef;\r\n                           ExtrusionExporter.ExtraClippingData extraClippingData = null;\r\n                           IFCAnyHandle bodyRepresentation = null;\r\n                           if (extraParams.CustomAxis != null)\r\n                           {\r\n                              extraParams.PossibleExtrusionAxes = IFCExtrusionAxes.TryCustom;\r\n                              bodyRepresentation = ExtrusionExporter.CreateExtrusionWithClipping(exporterIFC, exportGeometryElement,\r\n                                 categoryId, false, solids, basePlaneToUse, orig, extrudeDirection, null, out extraClippingData, \r\n                                 out footprintInfo, out materialAndProfile, out extrusionData, addInfo, profileName: profileName);\r\n                           }\r\n                           if (bodyRepresentation == null)\r\n                           {\r\n                              extraParams.PossibleExtrusionAxes = IFCExtrusionAxes.TryXY;\r\n                              bodyRepresentation = ExtrusionExporter.CreateExtrusionWithClipping(exporterIFC, exportGeometryElement,\r\n                                 categoryId, false, solids, basePlaneToUse, orig, extrudeDirection, null, out extraClippingData,\r\n                                 out footprintInfo, out materialAndProfile, out extrusionData, addInfo, profileName: profileName);\r\n                           }\r\n                           if (extrusionData != null)\r\n                           {\r\n                              extraParams.Slope = extrusionData.Slope;\r\n                              extraParams.ScaledLength = extrusionData.ScaledLength;\r\n                              extraParams.ExtrusionDirection = extrusionData.ExtrusionDirection;\r\n                              extraParams.ScaledHeight = extrusionData.ScaledHeight;\r\n                              extraParams.ScaledWidth = extrusionData.ScaledWidth;\r\n\r\n                              extraParams.ScaledArea = extrusionData.ScaledArea;\r\n                              extraParams.ScaledInnerPerimeter = extrusionData.ScaledInnerPerimeter;\r\n                              extraParams.ScaledOuterPerimeter = extrusionData.ScaledOuterPerimeter;\r\n                           }\r\n\r\n                           typeInfo.MaterialIdList = extraClippingData.MaterialIds;\r\n                           if (representations3D.AddIfNotNull(bodyRepresentation))\r\n                           {\r\n                              repMapTrfList.Add(null);\r\n                              if (materialAndProfile != null)\r\n                                 typeInfo.MaterialAndProfile = materialAndProfile;   // Keep material and profile information in the type info for later creation\r\n\r\n                              Transform newLCS = Transform.Identity;\r\n                              Transform offset = Transform.Identity;\r\n                              if (materialAndProfile != null)\r\n                              {\r\n                                 if (materialAndProfile.LCSTransformUsed != null)\r\n                                 {\r\n                                    // If the Solid creation uses a different LCS, we will use the same LCS for the Axis and transform the Axis to this new LCS\r\n                                    newLCS = new Transform(materialAndProfile.LCSTransformUsed);\r\n                                    // The Axis will be offset later to compensate the shift\r\n                                    offset = newLCS;\r\n                                 }\r\n                              }\r\n\r\n                              if (!useInstanceGeometry)\r\n                              {\r\n                                 // If the extrusion is created from the FamilySymbol, the new LCS will be the FamilyIntance transform\r\n                                 newLCS = trf;\r\n                                 offset = Transform.Identity;\r\n                              }\r\n\r\n                              ElementId catId = CategoryUtil.GetSafeCategoryId(familyInstance);\r\n                              IFCAnyHandle axisRep = StructuralMemberExporter.CreateStructuralMemberAxis(exporterIFC, familyInstance, catId, axisInfo, newLCS);\r\n                              if (representations3D.AddIfNotNull(axisRep))\r\n                              {\r\n                                 // This offset is going to be applied later. Need to scale the coordinate into the correct unit scale\r\n                                 offset.Origin = UnitUtil.ScaleLength(offset.Origin);\r\n                                 repMapTrfList.Add(offset);\r\n                              }\r\n                           }\r\n                        }\r\n                     }\r\n                  }\r\n                  else\r\n                  {\r\n                     extraParams.PossibleExtrusionAxes = IFCExtrusionAxes.TryXYZ;\r\n                  }\r\n\r\n                  if (representations3D.Count == 0)\r\n                  {\r\n                     string profileName = null;\r\n                     BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(tryToExportAsExtrusion, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n                     if (IsExtrusionFriendlyType(exportType.ExportInstance))\r\n                     {\r\n                        if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n                           bodyExporterOptions.CollectMaterialAndProfile = false;\r\n                        else\r\n                           bodyExporterOptions.CollectMaterialAndProfile = true;\r\n                        // Get a profile name. \r\n                        profileName = NamingUtil.GetProfileName(familySymbol);\r\n                     }\r\n\r\n                     if (exportType.ExportInstance == IFCEntityType.IfcSlab || exportType.ExportInstance == IFCEntityType.IfcPlate)\r\n                        bodyExporterOptions.CollectFootprintHandle = !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4;\r\n\r\n                     GeometryObject potentialPathGeom = GetPotentialCurveOrPolyline(exportGeometryElement, options);  \r\n                     bodyData = BodyExporter.ExportBody(exporterIFC, familyInstance, categoryId, ExporterUtil.GetSingleMaterial(familyInstance),\r\n                           geomObjects, bodyExporterOptions, extraParams, potentialPathGeom, profileName: profileName, instanceGeometry:useInstanceGeometry);\r\n                     typeInfo.MaterialIdList = bodyData.MaterialIds;\r\n                     offsetTransform = bodyData.OffsetTransform;\r\n\r\n                     IFCAnyHandle bodyRepHnd = bodyData.RepresentationHnd;\r\n                     if (representations3D.AddIfNotNull(bodyRepHnd))\r\n                     {\r\n                        repMapTrfList.Add(null);\r\n                     }\r\n\r\n                     if (IsExtrusionFriendlyType(exportType.ExportInstance))\r\n                     {\r\n                        StructuralMemberAxisInfo axisInfo = StructuralMemberExporter.GetStructuralMemberAxisTransform(familyInstance);\r\n                        if (axisInfo != null)\r\n                        {\r\n                           Transform newLCS = Transform.Identity;\r\n                           Transform offset = Transform.Identity;\r\n                           if (!useInstanceGeometry)\r\n                           {\r\n                              // When it is the case of NOT using instance geometry (i.e. using the\r\n                              // original family symbol), use the transform of the familyInstance as\r\n                              // the new LCS.  This transform will be set as the Object LCS later on.\r\n                              newLCS = trf.Multiply(offsetTransform);\r\n                           }\r\n                           else\r\n                           {\r\n                              IFCAnyHandle lcsHnd = extraParams.GetLocalPlacement();\r\n                              // It appears that the local placement is already scaled. Unscale it here\r\n                              // because axisInfo is based on unscaled information.\r\n                              newLCS = ExporterUtil.UnscaleTransformOrigin(ExporterUtil.GetTransformFromLocalPlacementHnd(lcsHnd, false));\r\n                           }\r\n\r\n                           ElementId catId = CategoryUtil.GetSafeCategoryId(familyInstance);\r\n                           IFCAnyHandle axisRep = StructuralMemberExporter.CreateStructuralMemberAxis(exporterIFC,\r\n                              familyInstance, catId, axisInfo, newLCS);\r\n                           if (representations3D.AddIfNotNull(axisRep))\r\n                           {\r\n                              repMapTrfList.Add(null);\r\n                           }\r\n                        }\r\n                     }\r\n\r\n                     if (bodyData.FootprintInfo != null)\r\n                     {\r\n                        IFCAnyHandle footprintShapeRep = bodyData.FootprintInfo.CreateFootprintShapeRepresentation(exporterIFC);\r\n                        representations3D.Add(footprintShapeRep);\r\n                        repMapTrfList.Add(bodyData.FootprintInfo.ExtrusionBaseLCS);\r\n                     }\r\n\r\n                     // Keep Material and Profile information in the typeinfo for creation of MaterialSet later on\r\n                     if (bodyExporterOptions.CollectMaterialAndProfile && bodyData.MaterialAndProfile != null)\r\n                        typeInfo.MaterialAndProfile = bodyData.MaterialAndProfile;\r\n                  }\r\n\r\n                  // We will allow a door or window to be exported without any geometry, or an element with parts.\r\n                  // Anything else doesn't really make sense.\r\n                  if (representations3D.Count == 0 && (doorWindowInfo == null))\r\n                  {\r\n                     extraParams.ClearOpenings();\r\n                     return;\r\n                  }\r\n               }\r\n\r\n               // By default: if exporting IFC2x3 or later, export 2D plan rep of family, if it exists, unless we are exporting Coordination View V2.\r\n               // This default can be overridden in the export options.\r\n               bool needToCreate2d = ExporterCacheManager.ExportOptionsCache.ExportAnnotations;\r\n               if (needToCreate2d)\r\n               {\r\n                  XYZ curveOffset = new XYZ(0, 0, 0);\r\n                  if (offsetTransform != null)\r\n                     curveOffset = -(offsetTransform.Origin);\r\n\r\n                  HashSet<IFCAnyHandle> curveSet = new HashSet<IFCAnyHandle>();\r\n                  {\r\n                     Transform planeTrf = doorWindowTrf.Inverse;\r\n                     XYZ projDir = XYZ.BasisZ;\r\n\r\n                     if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n                     {\r\n                        // TODO: Check that this isn't overkill here.\r\n                        IList<Curve> export2DGeometry = GeometryUtil.Get2DArcOrLineFromSymbol(familyInstance, allCurveType: true);\r\n\r\n                        foreach (Curve curveGeom in export2DGeometry)\r\n                        {\r\n                           Curve curve = curveGeom;\r\n\r\n                           if (doorWindowTrf != null)\r\n                           {\r\n                              Transform flipTrf = Transform.Identity;\r\n                              double yTrf = 0.0;\r\n\r\n                              if (familyInstance.FacingFlipped ^ familyInstance.HandFlipped)\r\n                              {\r\n                                 flipTrf.BasisY = flipTrf.BasisY.Negate();\r\n                              }\r\n\r\n                              // We will move the curve into Z=0\r\n                              if (curve is Arc)\r\n                                 flipTrf.Origin = new XYZ(0, yTrf, -(curve as Arc).Center.Z);\r\n                              else if (curve is Ellipse)\r\n                                 flipTrf.Origin = new XYZ(0, yTrf, -(curve as Ellipse).Center.Z);\r\n                              else\r\n                              {\r\n                                 if (curve.IsBound)\r\n                                    flipTrf.Origin = new XYZ(0, yTrf, -curve.GetEndPoint(0).Z);\r\n                              }\r\n\r\n                              curve = curve.CreateTransformed(doorWindowTrf.Multiply(flipTrf));\r\n                           }\r\n\r\n                           if (curveSet == null)\r\n                              curveSet = new HashSet<IFCAnyHandle>();\r\n                           curveSet.AddIfNotNull(GeometryUtil.CreatePolyCurveFromCurve(\r\n                              exporterIFC, curve));\r\n                        }\r\n                     }\r\n                     else\r\n                     {\r\n                        IFCGeometryInfo IFCGeometryInfo = IFCGeometryInfo.CreateCurveGeometryInfo(exporterIFC, planeTrf, projDir, true);\r\n                        ExporterIFCUtils.CollectGeometryInfo(exporterIFC, IFCGeometryInfo, exportGeometry, curveOffset, false);\r\n\r\n                        IList<IFCAnyHandle> curves = IFCGeometryInfo.GetCurves();\r\n                        foreach (IFCAnyHandle curve in curves)\r\n                           curveSet.Add(curve);\r\n                     }\r\n\r\n                     if (curveSet.Count > 0)\r\n                     {\r\n                        IFCAnyHandle contextOfItems2d = ExporterCacheManager.Get2DContextHandle(IFCRepresentationIdentifier.Annotation);\r\n                        IFCAnyHandle curveRepresentationItem = IFCInstanceExporter.CreateGeometricSet(file, curveSet);\r\n                        HashSet<IFCAnyHandle> bodyItems = new HashSet<IFCAnyHandle>() { curveRepresentationItem };\r\n                        IFCAnyHandle curveRep = RepresentationUtil.CreateGeometricSetRep(exporterIFC, familyInstance, categoryId, \"FootPrint\", contextOfItems2d, bodyItems);\r\n\r\n                        // Move 2D represantion along Z direction because the local placement of element\r\n                        // can be shifted to closer to the exported geometry location.\r\n                        if (representations2D.AddIfNotNull(curveRep) && !MathUtil.IsAlmostZero(curveOffset.Z))\r\n                        {\r\n                           Transform moveTransform = Transform.Identity;\r\n                           moveTransform.Origin = new XYZ(0, 0, UnitUtil.ScaleLength(curveOffset.Z));\r\n                           repMap2DTrfDict.Add(curveRep, moveTransform);\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n\r\n            if (doorWindowInfo != null)\r\n            {\r\n               typeInfo.StyleTransform = doorWindowTrf.Inverse;\r\n            }\r\n            else\r\n            {\r\n               typeInfo.StyleTransform = ExporterIFCUtils.GetUnscaledTransform(exporterIFC, extraParams.GetLocalPlacement());\r\n            }\r\n\r\n            if (typeInfo.MaterialAndProfile != null)\r\n            {\r\n               //TODO: Need to find out if ScaledArea and CrossSectionArea and others have same values and meaning.\r\n               //      If yes then need to refactor code and eliminate duplication.\r\n               if (typeInfo.MaterialAndProfile.CrossSectionArea.HasValue)\r\n                  typeInfo.extraParams.ScaledArea = typeInfo.MaterialAndProfile.CrossSectionArea.Value;\r\n               if (typeInfo.MaterialAndProfile.ExtrusionDepth.HasValue)\r\n                  typeInfo.extraParams.ScaledLength = typeInfo.MaterialAndProfile.ExtrusionDepth.Value;\r\n               if (typeInfo.MaterialAndProfile.InnerPerimeter.HasValue)\r\n                  typeInfo.extraParams.ScaledInnerPerimeter = typeInfo.MaterialAndProfile.InnerPerimeter.Value;\r\n               if (typeInfo.MaterialAndProfile.OuterPerimeter.HasValue)\r\n                  typeInfo.extraParams.ScaledOuterPerimeter = typeInfo.MaterialAndProfile.OuterPerimeter.Value;\r\n            }\r\n\r\n            HashSet<IFCAnyHandle> propertySets = null;\r\n            IFCAnyHandle typeStyle = null;\r\n\r\n            // If we found something already that was empty, and we didn't find anything\r\n            // this time around, don't create it again.\r\n            if (!foundButEmpty || representations2D.Count != 0 || representations3D.Count != 0)\r\n            {\r\n               typeStyle = CreateTypeEntityHandle(exporterIFC, typeKey, ref typeInfo,\r\n                  doorWindowInfo, representations3D, repMapTrfList, representations2D,\r\n                  repMap2DTrfDict, familyInstance, familySymbol, originalFamilySymbol,\r\n                  overrideLevelId, useInstanceGeometry, exportParts, exportType,\r\n                  out propertySets);\r\n            }\r\n\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(typeStyle))\r\n            {\r\n               wrapper.RegisterHandleWithElementType(familySymbol, exportType, typeStyle, propertySets);\r\n\r\n               typeInfo.Style = typeStyle;\r\n\r\n               bool addedMaterialAssociation = false;\r\n               if (IsExtrusionFriendlyType(exportType.ExportInstance)\r\n                  && !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4\r\n                  && !ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n               {\r\n                  if (typeInfo.MaterialAndProfile != null)\r\n                  {\r\n                     materialProfileSet = CategoryUtil.GetOrCreateMaterialSet(exporterIFC, familySymbol, typeInfo.MaterialAndProfile);\r\n                     if (!IFCAnyHandleUtil.IsNullOrHasNoValue(materialProfileSet))\r\n                     {\r\n                        CategoryUtil.CreateMaterialAssociation(exporterIFC, familySymbol, typeStyle, typeInfo.MaterialAndProfile);\r\n                        addedMaterialAssociation = true;\r\n                     }\r\n                  }\r\n                  else if (extrudeDirection != null && orig != null)\r\n                  {\r\n                     if (!ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n                     {\r\n                        // If Material Profile information is somehow missing (e.g. the geometry is exported as Tessellation or BRep. In IFC4 where geometry is restricted\r\n                        //   the materialprofile information may still be needed), it will try to get the information here:\r\n                        MaterialAndProfile matNProf = GeometryUtil.GetProfileAndMaterial(exporterIFC, familyInstance, extrudeDirection, orig);\r\n                        if (matNProf.GetKeyValuePairs().Count > 0)\r\n                        {\r\n                           materialProfileSet = CategoryUtil.GetOrCreateMaterialSet(exporterIFC, familySymbol, matNProf);\r\n                           if (!IFCAnyHandleUtil.IsNullOrHasNoValue(materialProfileSet))\r\n                           {\r\n                              CategoryUtil.CreateMaterialAssociation(exporterIFC, familySymbol, typeStyle, matNProf);\r\n                              addedMaterialAssociation = true;\r\n                           }\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n               else if (exportType.ExportInstance == IFCEntityType.IfcPlate || exportType.ExportInstance == IFCEntityType.IfcSlab || exportType.ExportInstance == IFCEntityType.IfcWall)\r\n               {\r\n                  MaterialLayerSetInfo mlsInfo = new MaterialLayerSetInfo(exporterIFC, familyInstance, wrapper);\r\n                  materialLayerSet = mlsInfo.MaterialLayerSetHandle;\r\n                  if (CategoryUtil.CreateMaterialAssociation(typeStyle, materialLayerSet))\r\n                     addedMaterialAssociation = true;\r\n               }\r\n               else\r\n               {\r\n                  Element elementType = doc.GetElement(familyInstance.GetTypeId());\r\n                  CategoryUtil.TryToCreateMaterialAssocation(exporterIFC, bodyData, elementType,\r\n                     familyInstance, exportGeometry, typeStyle, typeInfo);\r\n                  addedMaterialAssociation = true;\r\n               }\r\n\r\n               if (!addedMaterialAssociation)\r\n               {\r\n                  Element elementType = doc.GetElement(familyInstance.GetTypeId());\r\n                  CategoryUtil.CreateMaterialAssociation(exporterIFC, elementType, typeStyle, typeInfo.MaterialIdList);\r\n               }\r\n               ClassificationUtil.CreateClassification(exporterIFC, file, familySymbol, typeStyle);        // Create other generic classification from ClassificationCode(s)\r\n               ClassificationUtil.CreateUniformatClassification(file, originalFamilySymbol, typeStyle);\r\n            }\r\n         }\r\n\r\n         if ((foundNotEmpty || foundButEmpty) && !typeInfo.IsValid())\r\n            typeInfo = currentTypeInfo;\r\n\r\n         // we'll pretend we succeeded, but we'll do nothing.\r\n         if (!typeInfo.IsValid())\r\n            return;\r\n\r\n         extraParams = typeInfo.extraParams;\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n         {\r\n            // If the type is obtained from the cache (not the first instance), materialProfileSet will be null and needs to be obtained from the cache\r\n            if (IsExtrusionFriendlyType(exportType.ExportInstance)\r\n               && materialProfileSet == null)\r\n            {\r\n               materialProfileSet = ExporterCacheManager.MaterialSetCache.FindProfileSet(familySymbol.Id);\r\n               if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 && !ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView\r\n                  && materialProfileSet == null && extrudeDirection != null && orig != null)\r\n               {\r\n                  // If Material Profile information is somehow missing (e.g. the geometry is exported as Tessellation or BRep. In IFC4 where geometry is restricted\r\n                  //   the materialprofile information may still be needed), it will try to get the information here:\r\n                  MaterialAndProfile matNProf = GeometryUtil.GetProfileAndMaterial(exporterIFC, familyInstance, extrudeDirection, orig);\r\n                  if (matNProf.GetKeyValuePairs().Count > 0)\r\n                  {\r\n                     materialProfileSet = CategoryUtil.GetOrCreateMaterialSet(exporterIFC, familySymbol, matNProf);\r\n                     CategoryUtil.CreateMaterialAssociation(exporterIFC, familySymbol, typeInfo.Style, matNProf);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         if ((exportType.ExportInstance == IFCEntityType.IfcSlab || exportType.ExportInstance == IFCEntityType.IfcPlate || exportType.ExportInstance == IFCEntityType.IfcWall)\r\n               && materialLayerSet == null)\r\n         {\r\n            materialLayerSet = ExporterCacheManager.MaterialSetCache.FindLayerSet(familySymbol.Id);\r\n         }\r\n\r\n         // add to the map, as long as we are not using instance geometry, and don't have extra openings.\r\n         if (!useInstanceGeometry)\r\n         {\r\n            bool hasOpenings = (extraParams.GetOpenings().Count != 0);\r\n            ExporterCacheManager.FamilySymbolToTypeInfoCache.Register(typeKey, typeInfo, hasOpenings);\r\n         }\r\n\r\n         // If we are using the instance geometry, ignore the transformation.\r\n         if (useInstanceGeometry)\r\n            trf = Transform.Identity;\r\n\r\n         if ((range != null) && exportParts)\r\n         {\r\n            XYZ rangeOffset = trf.Origin;\r\n            rangeOffset += new XYZ(0, 0, range.Start);\r\n            trf.Origin = rangeOffset;\r\n         }\r\n\r\n         Transform originalTrf = new Transform(trf);\r\n         XYZ scaledMapOrigin = XYZ.Zero;\r\n\r\n         trf = trf.Multiply(typeInfo.StyleTransform);\r\n\r\n         // Create instance.  \r\n         IList<IFCAnyHandle> shapeReps = CreateShapeRepresentations(exporterIFC, file, familyInstance,\r\n            categoryId, typeInfo, scaledMapOrigin);\r\n         if (shapeReps == null)\r\n            return;\r\n\r\n         IFCAnyHandle boundingBoxRep = null;\r\n         Transform boundingBoxTrf = (offsetTransform != null) ? offsetTransform.Inverse : Transform.Identity;\r\n         if (geomObjects.Count > 0)\r\n         {\r\n            boundingBoxTrf = boundingBoxTrf.Multiply(doorWindowTrf);\r\n            boundingBoxRep = BoundingBoxExporter.ExportBoundingBox(exporterIFC, geomObjects, boundingBoxTrf);\r\n         }\r\n         else\r\n         {\r\n            boundingBoxTrf = boundingBoxTrf.Multiply(trf.Inverse);\r\n            boundingBoxRep = BoundingBoxExporter.ExportBoundingBox(exporterIFC, familyInstance.get_Geometry(options), boundingBoxTrf);\r\n         }\r\n\r\n         if (boundingBoxRep != null)\r\n            shapeReps.Add(boundingBoxRep);\r\n\r\n         IFCAnyHandle repHnd = (shapeReps.Count > 0) ? IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, shapeReps) : null;\r\n\r\n         // Check for containment override\r\n         IFCAnyHandle overrideContainerHnd = null;\r\n         ElementId overrideContainerId = ParameterUtil.OverrideContainmentParameter(familyInstance, out overrideContainerHnd);\r\n         if ((overrideLevelId == null || overrideLevelId == ElementId.InvalidElementId) && overrideContainerId != ElementId.InvalidElementId)\r\n            overrideLevelId = overrideContainerId;\r\n\r\n         if (ExporterUtil.IsContainedInAssembly(familyInstance))\r\n         {\r\n            if (overrideLevelId == ElementId.InvalidElementId)\r\n            {\r\n               overrideLevelId = ExporterCacheManager.LevelInfoCache.GetLevelIdOfObject(doc.GetElement(familyInstance.AssemblyInstanceId));\r\n            }\r\n\r\n            // Determine if any of the IfcShapeRepresentations associated with this FamilyInstance are \"Body\" representations.\r\n            string shapeType = null;\r\n            foreach (IFCAnyHandle shapeRep in shapeReps)\r\n            {\r\n               if (IFCAnyHandleUtil.GetRepresentationIdentifier(shapeRep).Equals(\"Body\"))\r\n               {\r\n                  shapeType = IFCAnyHandleUtil.GetBaseRepresentationType(shapeRep);\r\n               }\r\n            }\r\n\r\n            // For Brep or Tessellation shape types, adjust the Z-origin of the transformation.\r\n            // These representation types are generated using original coordinates and do not rely on the style transformation\r\n            // that present in the current 'trf' derived from ExtrusionCreationData.\r\n            double newOffset = trf.Origin.Z;\r\n            if (!string.IsNullOrEmpty(shapeType) && (shapeType.Contains(\"Brep\") || shapeType.Equals(\"Tessellation\")))\r\n            {\r\n               // To maintain correct placement, replace the Z value of the transform's origin\r\n               // with the original transformation's Z origin. X and Y remain unchanged.\r\n               trf.Origin = new XYZ(originalTrf.Origin.X, originalTrf.Origin.Y, newOffset);\r\n            }\r\n         }\r\n\r\n         using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, familyInstance, trf, null, overrideLevelId, overrideContainerHnd))\r\n         {\r\n            IFCAnyHandle instanceHandle = null;\r\n            IFCAnyHandle localPlacement = setter.LocalPlacement;\r\n            bool materialAlreadyAssociated = false;\r\n\r\n            // We won't create the instance if: \r\n            // (1) we are exporting to CV2.0/RV, (2) we have no 2D, 3D, or bounding box geometry, and (3) we aren't exporting parts.\r\n            if (!(repHnd == null && !exportParts\r\n                  && (ExporterCacheManager.ExportOptionsCache.ExportAsCoordinationView2\r\n                  || ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)))\r\n            {\r\n               string instanceGUID = null;\r\n\r\n               int subElementIndex = ExporterStateManager.GetCurrentRangeIndex();\r\n               if (subElementIndex == 0)\r\n                  instanceGUID = GUIDUtil.CreateGUID(familyInstance);\r\n               else if (subElementIndex <= ExporterStateManager.RangeIndexSetter.GetMaxStableGUIDs())\r\n                  instanceGUID = GUIDUtil.CreateSubElementGUID(familyInstance, subElementIndex + (int)IFCGenericSubElements.SplitInstanceStart - 1);\r\n               else\r\n                  instanceGUID = GUIDUtil.GenerateIFCGuidFrom(\r\n                     GUIDUtil.CreateGUIDString(familyInstance, subElementIndex.ToString()));\r\n\r\n               IFCAnyHandle overrideLocalPlacement = null;\r\n               bool isChildInContainer = ExporterUtil.IsContainedInAssembly(familyInstance);\r\n\r\n               if (parentLocalPlacement != null)\r\n               {\r\n                  Transform relTrf = ExporterIFCUtils.GetRelativeLocalPlacementOffsetTransform(parentLocalPlacement, localPlacement);\r\n                  Transform inverseTrf = relTrf.Inverse;\r\n\r\n                  IFCAnyHandle childLocalPlacement = ExporterUtil.CreateLocalPlacement(file, parentLocalPlacement,\r\n                        inverseTrf.Origin, inverseTrf.BasisZ, inverseTrf.BasisX);\r\n                  overrideLocalPlacement = childLocalPlacement;\r\n               }\r\n\r\n               switch (exportType.ExportInstance)\r\n               {\r\n                  case IFCEntityType.IfcBeam:\r\n                     {\r\n                        exportType.SetPredefinedTypeIfNotDefined(\"BEAM\");\r\n                        instanceHandle = FamilyExporterUtil.ExportGenericInstance(exportType, exporterIFC, familyInstance,\r\n                           wrapper, setter, extraParams, instanceGUID, ownerHistory, exportParts ? null : repHnd, overrideLocalPlacement);\r\n\r\n                        IFCAnyHandle placementToUse = GetPlacementToUse(file, instanceHandle, localPlacement, extraParams, originalTrf,\r\n                           typeInfo.StyleTransform, useInstanceGeometry);\r\n                        Transform offsetTransformToUse = GetOffsetTransformtoUse(offsetTransform, setter.Offset, useInstanceGeometry);\r\n\r\n                        // NOTE: We do not expect openings here, as they are created as part of creating an extrusion in ExportBody above.\r\n                        // However, if this were the case, we would have exported this beam in ExportBeamAsStandardElement above.\r\n\r\n                        OpeningUtil.CreateOpeningsIfNecessary(instanceHandle, familyInstance, extraParams, offsetTransformToUse,\r\n                              exporterIFC, placementToUse, setter, wrapper);\r\n                        wrapper.AddElement(familyInstance, instanceHandle, setter, extraParams, true, exportType);\r\n\r\n                        // Register the beam's IFC handle for later use by truss and beam system export.\r\n                        ExporterCacheManager.ElementToHandleCache.Register(familyInstance.Id, instanceHandle, exportType);\r\n\r\n                        if (!IFCAnyHandleUtil.IsNullOrHasNoValue(materialProfileSet) && RepresentationUtil.RepresentationForStandardCaseFromProduct(exportType.ExportInstance, instanceHandle))\r\n                        {\r\n                           int? cardinalPoint = BeamCardinalPoint(familyInstance);\r\n                           if (CreateMaterialAssociation(file, instanceHandle, materialProfileSet, cardinalPoint))\r\n                              materialAlreadyAssociated = true;\r\n                        }\r\n                        break;\r\n                     }\r\n                  case IFCEntityType.IfcColumn:\r\n                     {\r\n                        exportType.SetPredefinedTypeIfNotDefined(\"COLUMN\");\r\n                        instanceHandle = FamilyExporterUtil.ExportGenericInstance(exportType, exporterIFC, familyInstance,\r\n                           wrapper, setter, extraParams, instanceGUID, ownerHistory, exportParts ? null : repHnd, overrideLocalPlacement);\r\n\r\n                        IFCAnyHandle placementToUse = GetPlacementToUse(file, instanceHandle, localPlacement, extraParams, originalTrf, typeInfo.StyleTransform, useInstanceGeometry);\r\n                        Transform offsetTransformToUse = GetOffsetTransformtoUse(offsetTransform, setter.Offset, useInstanceGeometry);\r\n\r\n                        OpeningUtil.CreateOpeningsIfNecessary(instanceHandle, familyInstance, extraParams, offsetTransformToUse,\r\n                              exporterIFC, placementToUse, setter, wrapper);\r\n                        wrapper.AddElement(familyInstance, instanceHandle, setter, extraParams, true, exportType);\r\n\r\n                        // Not all columns are space bounding, but it doesn't really hurt to have \"extra\" handles here, other\r\n                        // than a little extra memory usage.\r\n                        SpaceBoundingElementUtil.RegisterSpaceBoundingElementHandle(exporterIFC, instanceHandle, familyInstance.Id,\r\n                           setter.LevelId);\r\n\r\n                        if (CreateMaterialAssociation(file, instanceHandle, materialProfileSet, null))\r\n                           materialAlreadyAssociated = true;\r\n\r\n                        //export Base Quantities.\r\n                        // This is necessary for now as it deals properly with split columns by level.\r\n                        PropertyUtil.CreateBeamColumnBaseQuantities(exporterIFC, instanceHandle, familyInstance, typeInfo, geomObjects);\r\n                        break;\r\n                     }\r\n                  case IFCEntityType.IfcDoor:\r\n                  case IFCEntityType.IfcWindow:\r\n                     {\r\n                        (double doorWidth, double doorHeight) = GetDoorWindowDimensionFromSymbol(originalFamilySymbol, familyInstance);\r\n\r\n                        double height = UnitUtil.ScaleLength(doorHeight);\r\n                        double width = UnitUtil.ScaleLength(doorWidth);\r\n\r\n                        IFCAnyHandle doorWindowLocalPlacement = !IFCAnyHandleUtil.IsNullOrHasNoValue(overrideLocalPlacement) ?\r\n                              overrideLocalPlacement : localPlacement;\r\n\r\n                        bool hasType = !IFCAnyHandleUtil.IsNullOrHasNoValue(typeInfo.Style);\r\n\r\n                        if (exportType.ExportType == IFCEntityType.IfcDoorType || exportType.ExportInstance == IFCEntityType.IfcDoor)\r\n                           instanceHandle = IFCInstanceExporter.CreateDoor(exporterIFC, familyInstance, instanceGUID, ownerHistory,\r\n                              doorWindowLocalPlacement, repHnd, height, width, doorWindowInfo.PreDefinedType,\r\n                              hasType ? null : doorWindowInfo.DoorOperationTypeString, doorWindowInfo.UserDefinedOperationType);\r\n                        else\r\n                           instanceHandle = IFCInstanceExporter.CreateWindow(exporterIFC, familyInstance, instanceGUID, ownerHistory,\r\n                              doorWindowLocalPlacement, repHnd, height, width, doorWindowInfo.PreDefinedType, DoorWindowUtil.GetIFCWindowPartitioningType(originalFamilySymbol),\r\n                              hasType ? null : doorWindowInfo.UserDefinedPartitioningType);\r\n                        wrapper.AddElement(familyInstance, instanceHandle, setter, extraParams, true, exportType);\r\n\r\n                        SpaceBoundingElementUtil.RegisterSpaceBoundingElementHandle(exporterIFC, instanceHandle, familyInstance.Id,\r\n                              setter.LevelId);\r\n\r\n                        IFCAnyHandle placementToUse = doorWindowLocalPlacement;\r\n                        if (!useInstanceGeometry)\r\n                        {\r\n                           // correct the placement to the symbol space\r\n                           bool needToCreateOpenings = OpeningUtil.NeedToCreateOpenings(instanceHandle, extraParams);\r\n                           if (needToCreateOpenings)\r\n                           {\r\n                              Transform openingTrf = trf;\r\n                              openingTrf.Origin = new XYZ(0, 0, setter.Offset);\r\n                              openingTrf = doorWindowTrf.Multiply(openingTrf);\r\n                              XYZ scaledOrigin = UnitUtil.ScaleLength(openingTrf.Origin);\r\n\r\n                              // This copy is used for new IFCLocalPlacement with new RelativePlacement and original objectplacement attribute.\r\n                              IFCAnyHandle copiedLocalPlacement = ExporterUtil.CopyLocalPlacement(file, doorWindowLocalPlacement);\r\n\r\n                              // This placement will be used for further logic (openings etc).\r\n                              // If there is an opening, doorWindow's ObjectPlacement will be deleted and opening's ObjectPlacement will be used instead.\r\n                              IFCAnyHandle openingLocalPlacement = ExporterUtil.CreateLocalPlacement(file, copiedLocalPlacement,\r\n                                    scaledOrigin, openingTrf.BasisZ, openingTrf.BasisX);\r\n                              placementToUse = openingLocalPlacement;\r\n                           }\r\n                        }\r\n\r\n                        OpeningUtil.CreateOpeningsIfNecessary(instanceHandle, familyInstance, extraParams, offsetTransform,\r\n                              exporterIFC, placementToUse, setter, wrapper);\r\n                        break;\r\n                     }\r\n                  case IFCEntityType.IfcMember:\r\n                     {\r\n                        exportType.SetPredefinedTypeIfNotDefined(\"BRACE\");\r\n\r\n                        instanceHandle = FamilyExporterUtil.ExportGenericInstance(exportType, exporterIFC, familyInstance,\r\n                           wrapper, setter, extraParams, instanceGUID, ownerHistory, exportParts ? null : repHnd, overrideLocalPlacement);\r\n\r\n                        IFCAnyHandle placementToUse = GetPlacementToUse(file, instanceHandle, localPlacement, extraParams, originalTrf,\r\n                           typeInfo.StyleTransform, useInstanceGeometry);\r\n                        Transform offsetTransformToUse = GetOffsetTransformtoUse(offsetTransform, setter.Offset, useInstanceGeometry);\r\n\r\n                        OpeningUtil.CreateOpeningsIfNecessary(instanceHandle, familyInstance, extraParams, offsetTransformToUse,\r\n                              exporterIFC, placementToUse, setter, wrapper);\r\n                        wrapper.AddElement(familyInstance, instanceHandle, setter, extraParams, true, exportType);\r\n\r\n                        if (CreateMaterialAssociation(file, instanceHandle, materialProfileSet, null))\r\n                           materialAlreadyAssociated = true;\r\n\r\n                        break;\r\n                     }\r\n                  case IFCEntityType.IfcPlate:\r\n                     {\r\n                        instanceHandle = FamilyExporterUtil.ExportGenericInstance(exportType, exporterIFC, familyInstance,\r\n                           wrapper, setter, extraParams, instanceGUID, ownerHistory, exportParts ? null : repHnd, overrideLocalPlacement);\r\n\r\n                        IFCAnyHandle placementToUse = GetPlacementToUse(file, instanceHandle, localPlacement, extraParams, originalTrf,\r\n                           typeInfo.StyleTransform, useInstanceGeometry);\r\n                        Transform offsetTransformToUse = GetOffsetTransformtoUse(offsetTransform, setter.Offset, useInstanceGeometry);\r\n\r\n                        OpeningUtil.CreateOpeningsIfNecessary(instanceHandle, familyInstance, extraParams, offsetTransformToUse,\r\n                              exporterIFC, placementToUse, setter, wrapper);\r\n\r\n                        if (RepresentationUtil.RepresentationForStandardCaseFromProduct(exportType.ExportInstance, instanceHandle))\r\n                        {\r\n                           wrapper.AddElement(familyInstance, instanceHandle, setter, extraParams, true, exportType);\r\n\r\n                           if (CreateMaterialAssociation(file, instanceHandle, materialProfileSet, null))\r\n                              materialAlreadyAssociated = true;\r\n                        }\r\n                        break;\r\n                     }\r\n                  case IFCEntityType.IfcTransportElement:\r\n                     {\r\n                        IFCAnyHandle localPlacementToUse;\r\n                        ElementId roomId = setter.UpdateRoomRelativeCoordinates(familyInstance, out localPlacementToUse);\r\n\r\n                        Enum operationType;\r\n                        if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n                        {\r\n                           // It is PreDefinedType attribute in IFC4\r\n                           operationType = FamilyExporterUtil.GetPreDefinedType<Toolkit.IFC4.IFCTransportElementType>(familyInstance, familySymbol, exportType.PredefinedType);\r\n                        }\r\n                        else\r\n                        {\r\n                           operationType = FamilyExporterUtil.GetPreDefinedType<Toolkit.IFCTransportElementType>(familyInstance, familySymbol, exportType.PredefinedType);\r\n                        }\r\n                        string operationTypeStr = operationType.ToString();\r\n\r\n                        double capacityByWeight = 0.0;\r\n                        ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"IfcCapacityByWeight\", out capacityByWeight);\r\n                        double capacityByNumber = 0.0;\r\n                        ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"IfcCapacityByNumber\", out capacityByNumber);\r\n\r\n                        instanceHandle = IFCInstanceExporter.CreateTransportElement(exporterIFC, familyInstance, instanceGUID, ownerHistory,\r\n                           localPlacementToUse, repHnd, operationTypeStr, capacityByWeight, capacityByNumber);\r\n\r\n                        bool containedInSpace = (roomId != ElementId.InvalidElementId);\r\n                        wrapper.AddElement(familyInstance, instanceHandle, setter, extraParams, !containedInSpace, exportType);\r\n                        if (containedInSpace)\r\n                           ExporterCacheManager.SpaceInfoCache.RelateToSpace(roomId, instanceHandle);\r\n\r\n                        break;\r\n                     }\r\n                  default:\r\n                     {\r\n                        if (IFCAnyHandleUtil.IsNullOrHasNoValue(instanceHandle))\r\n                        {\r\n                           bool isBuildingElementProxy =\r\n                                 ((exportType.ExportInstance == IFCEntityType.IfcBuildingElementProxy) ||\r\n                                 (exportType.ExportType == IFCEntityType.IfcBuildingElementProxyType));\r\n\r\n                           IFCAnyHandle localPlacementToUse = null;\r\n                           ElementId roomId = setter.UpdateRoomRelativeCoordinates(familyInstance, out localPlacementToUse);\r\n                           bool containedInSpace = (roomId != ElementId.InvalidElementId) && (exportType.ExportInstance != IFCEntityType.IfcSystemFurnitureElement);\r\n\r\n                           if (!isBuildingElementProxy)\r\n                           {\r\n                              instanceHandle = IFCInstanceExporter.CreateGenericIFCEntity(exportType, file, familyInstance, instanceGUID,\r\n                                 ownerHistory, localPlacementToUse, repHnd);\r\n                           }\r\n                           else\r\n                           {\r\n                              instanceHandle = IFCInstanceExporter.CreateBuildingElementProxy(exporterIFC, familyInstance, instanceGUID,\r\n                                 ownerHistory, localPlacementToUse, repHnd, exportType.GetPredefinedTypeOrDefault());\r\n                           }\r\n\r\n                           bool associateToLevel = !containedInSpace && !isChildInContainer;\r\n                           wrapper.AddElement(familyInstance, instanceHandle, setter, extraParams, associateToLevel, exportType);\r\n                           if (containedInSpace)\r\n                              ExporterCacheManager.SpaceInfoCache.RelateToSpace(roomId, instanceHandle);\r\n                        }\r\n\r\n                        IFCAnyHandle placementToUse = GetPlacementToUse(file, instanceHandle, localPlacement, extraParams, originalTrf,\r\n                           typeInfo.StyleTransform, useInstanceGeometry);\r\n                        Transform offsetTransformToUse = GetOffsetTransformtoUse(offsetTransform, setter.Offset, useInstanceGeometry);\r\n\r\n                        OpeningUtil.CreateOpeningsIfNecessary(instanceHandle, familyInstance, extraParams, offsetTransformToUse,\r\n                           exporterIFC, placementToUse, setter, wrapper);\r\n                        break;\r\n                     }\r\n               }\r\n\r\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(instanceHandle))\r\n               {\r\n                  if (exportParts)\r\n                     PartExporter.ExportHostPart(exporterIFC, familyInstance, instanceHandle, setter, null, overrideLevelId);\r\n                  \r\n                  if (ElementFilteringUtil.IsMEPType(exportType) || ElementFilteringUtil.ProxyForMEPType(familyInstance, exportType))\r\n                  {\r\n                     ExporterCacheManager.MEPCache.Register(familyInstance, instanceHandle);\r\n                     // For ducts and pipes, check later if there is an associated duct or pipe.\r\n                     if (CanHaveInsulationOrLining(exportType, categoryId))\r\n                     {\r\n                        ExporterCacheManager.MEPCache.CoveredElementsCache[familyInstance.Id] = categoryId;\r\n                     }\r\n                     \r\n                     // For cable trays and conduits, we might create systems during the end of export.\r\n                     if (CanHaveSystemDefinition(exportType, categoryId))\r\n                        ExporterCacheManager.MEPCache.CableElementsCache.Add(familyInstance.Id);\r\n                  }\r\n\r\n                  ExporterCacheManager.HandleToElementCache.Register(instanceHandle, familyInstance.Id);\r\n\r\n                  if (!exportParts && !materialAlreadyAssociated)\r\n                  {\r\n                     // Create material association for the instance only if the instance\r\n                     // geometry is different from the type or the type does not have any\r\n                     // material association\r\n                     IFCAnyHandle constituentSetHnd = ExporterCacheManager.MaterialConstituentSetCache.Find(familyInstance.GetTypeId());\r\n                     if ((useInstanceGeometry || IFCAnyHandleUtil.IsNullOrHasNoValue(constituentSetHnd))\r\n                        && bodyData != null && bodyData.RepresentationItemInfo != null && bodyData.RepresentationItemInfo.Count > 0)\r\n                     {\r\n                        CategoryUtil.CreateMaterialAssociationWithShapeAspect(exporterIFC, familyInstance, instanceHandle, bodyData.RepresentationItemInfo);\r\n                     }\r\n                     else\r\n                     {\r\n                        // Create material association in case if bodyData is null\r\n                        CategoryUtil.CreateMaterialAssociation(exporterIFC, familyInstance, instanceHandle, typeInfo.MaterialIdList);\r\n                     }\r\n                  }\r\n\r\n                  if (!IFCAnyHandleUtil.IsNullOrHasNoValue(typeInfo.Style))\r\n                     ExporterCacheManager.TypeRelationsCache.Add(typeInfo.Style, instanceHandle);\r\n               }\r\n            }\r\n\r\n            if (doorWindowInfo != null)\r\n            {\r\n               DoorWindowDelayedOpeningCreator delayedCreator = DoorWindowDelayedOpeningCreator.Create(exporterIFC, doorWindowInfo, instanceHandle, setter.LevelId);\r\n               if (delayedCreator != null)\r\n                  ExporterCacheManager.DoorWindowDelayedOpeningCreatorCache.Add(delayedCreator, false);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a generic element as one of a few IFC building element entity types.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element to be exported.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"exportType\">The export type.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <returns>True if the elements was exported, false otherwise.</returns>\r\n      static public bool ExportGenericToSpecificElement(ExporterIFC exporterIFC, Element element, ref GeometryElement geometryElement, IFCExportInfoPair exportType,\r\n          ProductWrapper productWrapper)\r\n      {\r\n         // This function is here because it was originally used exclusive by FamilyInstances.  Moving forward, this will be combined with some other\r\n         // functions to attempt to create a way to export any element as any IFC entity.  There will still be functions that do a better job of mapping\r\n         // specific Revit element types to specific IFC entity types (e.g., a Revit Wall to an IFC IfcWallStandardCase), but most elements will use generic\r\n         // handling.\r\n         // Note that this function doesn't support creating types - it exports a simple IFC instance only of a few possible types.\r\n         switch (exportType.ExportInstance)\r\n         {\r\n            case IFCEntityType.IfcBeam:\r\n               {\r\n                  // We will say that we exported the beam if either we generated an IfcBeam, or if we determined that there\r\n                  // was nothing to export, either because the beam had no geometry to export, or it was completely clipped.\r\n\r\n                  // The regular Beam has been moved to the ExportFamilyInstanceAsMappedItem, to be able to export its types and also as a mapped geometry\r\n                  // standard building elements\r\n\r\n                  // Limit this to IFC4, as beams no longer get axes exported if we use the code in ExportFamilyInstanceAsMappedItem.\r\n                  if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 || (element is DirectShape))\r\n                  {\r\n                     bool dontExport;\r\n                     IFCAnyHandle beamHnd = BeamExporter.ExportBeamAsStandardElement(exporterIFC, element, exportType, geometryElement, productWrapper, out dontExport);\r\n                     return (dontExport || !IFCAnyHandleUtil.IsNullOrHasNoValue(beamHnd));\r\n                  }\r\n                  else\r\n                     return false;\r\n               }\r\n            case IFCEntityType.IfcCovering:\r\n               CeilingExporter.ExportCovering(exporterIFC, element, ref geometryElement, exportType.PredefinedType, productWrapper);\r\n               return true;\r\n            case IFCEntityType.IfcRamp:\r\n               RampExporter.ExportRamp(exporterIFC, exportType.PredefinedType, element, geometryElement, 1, productWrapper);\r\n               return true;\r\n            case IFCEntityType.IfcRailing:\r\n               if (ExporterCacheManager.RailingCache.Contains(element.Id))\r\n               {\r\n                  // Don't export this object if it is part of a parent railing.\r\n                  if (!ExporterCacheManager.RailingSubElementCache.Contains(element.Id))\r\n                  {\r\n                     // RailingExporter.ExportRailing(exporterIFC, element, geometryElement, ifcEnumTypeString, productWrapper);\r\n                     // Allow railing code to create instance and type.\r\n                     return false;\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  ExporterCacheManager.RailingCache.Add(element.Id);\r\n               }\r\n               return true;\r\n            case IFCEntityType.IfcRoof:\r\n               RoofExporter.ExportRoof(exporterIFC, element, ref geometryElement, productWrapper);\r\n               return true;\r\n            case IFCEntityType.IfcSlab:\r\n               FloorExporter.ExportGenericSlab(exporterIFC, element, geometryElement, exportType.PredefinedType, productWrapper);\r\n               //TODO\r\n               return true;\r\n            case IFCEntityType.IfcStair:\r\n               StairsExporter.ExportStairAsSingleGeometry(exporterIFC, exportType.PredefinedType, element, geometryElement, new List<double>() { 0 }, productWrapper);\r\n               return true;\r\n            case IFCEntityType.IfcWall:\r\n               WallExporter.ExportWall(exporterIFC, exportType.PredefinedType, element, null, ref geometryElement, productWrapper);\r\n               return true;\r\n         }\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets minimum height of a family symbol.\r\n      /// </summary>\r\n      /// <param name=\"symbol\">\r\n      /// The family symbol.\r\n      /// </param>\r\n      static double GetMinSymbolHeight(FamilySymbol symbol)\r\n      {\r\n         return ExporterIFCUtils.GetMinSymbolHeight(symbol);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets minimum width of a family symbol.\r\n      /// </summary>\r\n      /// <param name=\"symbol\">\r\n      /// The family symbol.\r\n      /// </param>\r\n      static double GetMinSymbolWidth(FamilySymbol symbol)\r\n      {\r\n         return ExporterIFCUtils.GetMinSymbolWidth(symbol);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets IFCColumnType from column type name.\r\n      /// </summary>\r\n      /// <param name=\"element\">The column element.</param>\r\n      /// <param name=\"columnType\">The column type name.</param>\r\n      /// <returns>The IFCColumnType.</returns>\r\n      /// <remarks>This function appears incomplete, and should probably be removed and replaced.</remarks>\r\n      public static IFCColumnType GetColumnType(Element element, string columnType)\r\n      {\r\n         string value = null;\r\n         if (ParameterUtil.GetStringValueFromElementOrSymbol(element, \"IfcType\", out value) == null)\r\n            value = columnType;\r\n\r\n         if (String.IsNullOrEmpty(value))\r\n            return IFCColumnType.Column;\r\n\r\n         string newValue = NamingUtil.RemoveSpacesAndUnderscores(value);\r\n\r\n         if (String.Compare(newValue, \"USERDEFINED\", true) == 0)\r\n            return IFCColumnType.UserDefined;\r\n\r\n         return IFCColumnType.Column;\r\n      }\r\n\r\n      public static IFCMemberType GetMemberType(Element element, string memberType)\r\n      {\r\n         string value = null;\r\n         if (ParameterUtil.GetStringValueFromElementOrSymbol(element, \"IfcType\", out value) == null)\r\n            value = memberType;\r\n\r\n         if (String.IsNullOrEmpty(value))\r\n            return IFCMemberType.Member;\r\n\r\n         string newValue = NamingUtil.RemoveSpacesAndUnderscores(value);\r\n\r\n         if (String.Compare(newValue, \"USERDEFINED\", true) == 0)\r\n            return IFCMemberType.UserDefined;\r\n\r\n         return IFCMemberType.Member;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get width and height of door/window based on host type.\r\n      /// </summary>\r\n      /// <param name=\"instance\">The instance element.</param>\r\n      /// <param name=\"symbol\">The type element.</param>\r\n      /// <returns>Width and height values.</returns>\r\n      public static (double width, double height) GetDoorWindowDimensionFromSymbol(FamilySymbol symbol, FamilyInstance instance)\r\n      {\r\n         // symbol width in X direction\r\n         double width = GetMinSymbolWidth(symbol);\r\n\r\n         double height = 0.0;\r\n         if (instance?.Host is Wall || instance?.Host is FaceWall)\r\n         {\r\n            // symbol height in Z direction\r\n            height = GetMinSymbolHeight(symbol);\r\n         }\r\n         else\r\n         {\r\n            // The height of the non-wall hosted families is measured in Y direction\r\n            Options options = GeometryUtil.GetIFCExportGeometryOptions();\r\n            GeometryElement windowGeom = symbol.get_Geometry(options);\r\n            BoundingBoxXYZ bbox = windowGeom?.GetBoundingBox();\r\n            if (bbox != null)\r\n               height = bbox.Max.Y - bbox.Min.Y;\r\n         }\r\n\r\n         return (width, height);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Map the cardinal point index from Revit H and V justification. The mapping is not complete since they are not 1-1\r\n      /// </summary>\r\n      /// <param name=\"familyInstance\"></param>\r\n      /// <returns></returns>\r\n      static int? BeamCardinalPoint(FamilyInstance familyInstance)\r\n      {\r\n         Parameter yz_just = familyInstance.get_Parameter(BuiltInParameter.YZ_JUSTIFICATION);\r\n         if (yz_just == null)\r\n            return null;\r\n\r\n         // Independent justification on the start and end is not supported in IFC, only the Uniform one is\r\n         if (yz_just.AsInteger() == (int)Autodesk.Revit.DB.Structure.YZJustificationOption.Independent)\r\n            return null;\r\n         Parameter y_just = familyInstance.get_Parameter(BuiltInParameter.Y_JUSTIFICATION);\r\n         if (y_just == null)\r\n            return null;\r\n\r\n         int yJustification = y_just.AsInteger();\r\n         Parameter z_just = familyInstance.get_Parameter(BuiltInParameter.Z_JUSTIFICATION);\r\n         if (z_just == null)\r\n            return null;\r\n\r\n         int zJustification = z_just.AsInteger();\r\n\r\n         int? cardinalPoint = null;\r\n         if (yJustification == (int)Autodesk.Revit.DB.Structure.YJustification.Left && zJustification == (int)Autodesk.Revit.DB.Structure.ZJustification.Bottom)\r\n            cardinalPoint = 1;\r\n         else if (yJustification == (int)Autodesk.Revit.DB.Structure.YJustification.Left && zJustification == (int)Autodesk.Revit.DB.Structure.ZJustification.Origin)\r\n            cardinalPoint = 4;\r\n         else if (yJustification == (int)Autodesk.Revit.DB.Structure.YJustification.Left && zJustification == (int)Autodesk.Revit.DB.Structure.ZJustification.Top)\r\n            cardinalPoint = 7;\r\n         else if (yJustification == (int)Autodesk.Revit.DB.Structure.YJustification.Left && zJustification == (int)Autodesk.Revit.DB.Structure.ZJustification.Center)\r\n            cardinalPoint = 5;\r\n         else if (yJustification == (int)Autodesk.Revit.DB.Structure.YJustification.Origin && zJustification == (int)Autodesk.Revit.DB.Structure.ZJustification.Bottom)\r\n            cardinalPoint = 2;\r\n         else if (yJustification == (int)Autodesk.Revit.DB.Structure.YJustification.Origin && zJustification == (int)Autodesk.Revit.DB.Structure.ZJustification.Origin)\r\n            cardinalPoint = 5;\r\n         else if (yJustification == (int)Autodesk.Revit.DB.Structure.YJustification.Origin && zJustification == (int)Autodesk.Revit.DB.Structure.ZJustification.Top)\r\n            cardinalPoint = 8;\r\n         else if (yJustification == (int)Autodesk.Revit.DB.Structure.YJustification.Origin && zJustification == (int)Autodesk.Revit.DB.Structure.ZJustification.Center)\r\n            cardinalPoint = 5;\r\n         else if (yJustification == (int)Autodesk.Revit.DB.Structure.YJustification.Right && zJustification == (int)Autodesk.Revit.DB.Structure.ZJustification.Bottom)\r\n            cardinalPoint = 3;\r\n         else if (yJustification == (int)Autodesk.Revit.DB.Structure.YJustification.Right && zJustification == (int)Autodesk.Revit.DB.Structure.ZJustification.Origin)\r\n            cardinalPoint = 6;\r\n         else if (yJustification == (int)Autodesk.Revit.DB.Structure.YJustification.Right && zJustification == (int)Autodesk.Revit.DB.Structure.ZJustification.Top)\r\n            cardinalPoint = 9;\r\n         else if (yJustification == (int)Autodesk.Revit.DB.Structure.YJustification.Right && zJustification == (int)Autodesk.Revit.DB.Structure.ZJustification.Center)\r\n            cardinalPoint = 6;\r\n         else if (yJustification == (int)Autodesk.Revit.DB.Structure.YJustification.Center && zJustification == (int)Autodesk.Revit.DB.Structure.ZJustification.Bottom)\r\n            cardinalPoint = 1;\r\n         else if (yJustification == (int)Autodesk.Revit.DB.Structure.YJustification.Center && zJustification == (int)Autodesk.Revit.DB.Structure.ZJustification.Origin)\r\n            cardinalPoint = 4;\r\n         else if (yJustification == (int)Autodesk.Revit.DB.Structure.YJustification.Center && zJustification == (int)Autodesk.Revit.DB.Structure.ZJustification.Top)\r\n            cardinalPoint = 1;\r\n         else if (yJustification == (int)Autodesk.Revit.DB.Structure.YJustification.Center && zJustification == (int)Autodesk.Revit.DB.Structure.ZJustification.Center)\r\n            cardinalPoint = 10;\r\n         else\r\n            cardinalPoint = null;       // not supported combination\r\n         return cardinalPoint;\r\n      }\r\n\r\n      private static GeometryObject GetPotentialCurveOrPolyline(Element element, Options options)\r\n      {\r\n         IList<GeometryObject> potentialCurves = new List<GeometryObject>();\r\n\r\n         // Try to get curve geometry (for MEPCurve especially), to assist the geometry creation, e.g. SweptSolid\r\n         // We get the coarse specification specifically because MEP objects are exported as curves in coarse.\r\n         Options optionsCoarse = options;\r\n         optionsCoarse.DetailLevel = ViewDetailLevel.Coarse;\r\n         //\r\n\r\n         GeometryElement potentialCurveGeom = element.get_Geometry(options);\r\n         if (potentialCurveGeom == null)\r\n            return null;\r\n\r\n         foreach (GeometryObject geom in potentialCurveGeom)\r\n         {\r\n            if (geom is Curve || geom is PolyLine)\r\n               potentialCurves.Add(geom);\r\n         }\r\n\r\n         // Only one curve can be supported\r\n         if (potentialCurves.Count != 1)\r\n            return null;\r\n\r\n         return potentialCurves[0];\r\n      }\r\n\r\n      private static IFCAnyHandle GetPlacementToUse(IFCFile file, IFCAnyHandle instanceHandle, IFCAnyHandle localPlacement, IFCExportBodyParams extraParams, Transform originalTrf, Transform styleTransform, bool useInstanceGeometry)\r\n      {\r\n         IFCAnyHandle placementToUse = localPlacement;\r\n         if (!useInstanceGeometry)\r\n         {\r\n            bool needToCreateOpenings = OpeningUtil.NeedToCreateOpenings(instanceHandle, extraParams);\r\n            if (needToCreateOpenings)\r\n            {\r\n               Transform openingTrf = new Transform(originalTrf);\r\n               Transform extraRot = new Transform(originalTrf) { Origin = XYZ.Zero };\r\n               openingTrf = openingTrf.Multiply(extraRot);\r\n               openingTrf = openingTrf.Multiply(styleTransform);\r\n\r\n               XYZ scaledOrigin = UnitUtil.ScaleLength(openingTrf.Origin);\r\n               IFCAnyHandle openingRelativePlacement = ExporterUtil.CreateAxis2Placement3D(file, scaledOrigin,\r\n                  openingTrf.get_Basis(2), openingTrf.get_Basis(0));\r\n               IFCAnyHandle openingPlacement = ExporterUtil.CopyLocalPlacement(file, localPlacement);\r\n               GeometryUtil.SetRelativePlacement(openingPlacement, openingRelativePlacement);\r\n               placementToUse = openingPlacement;\r\n            }\r\n         }\r\n\r\n         return placementToUse;\r\n      }\r\n\r\n      private static Transform GetOffsetTransformtoUse(Transform offsetTransform, double offset, bool useInstanceGeometry)\r\n      {\r\n         Transform offsetTransformToUse = offsetTransform;\r\n         if (useInstanceGeometry && !MathUtil.IsAlmostZero(offset))\r\n         {\r\n            XYZ offsetOrig = -XYZ.BasisZ * offset;\r\n            Transform setterOffset = Transform.CreateTranslation(offsetOrig);\r\n            offsetTransformToUse = offsetTransform.Multiply(setterOffset);\r\n         }\r\n\r\n         return offsetTransformToUse;\r\n      }\r\n\r\n#if DEBUG\r\n      static StreamWriter outFile = null;\r\n      public static void PrintDbgInfo(params string[] inputArgs)\r\n      {\r\n         outFile ??= new StreamWriter(@\"e:\\temp\\debug2dinfo.txt\");\r\n         \r\n         string data = \"\\t\\t\";\r\n         foreach (string inputArg in inputArgs)\r\n            data += \" \" + inputArg;\r\n         outFile.WriteLine(data);\r\n         outFile.Flush();\r\n      }\r\n#else\r\n      public static void PrintDbgInfo(params string[] inputArgs)\r\n      {\r\n         return;\r\n      }\r\n#endif\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/FilledRegionExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export a FilledRegion as IfcAnnotation.\r\n   /// </summary>\r\n   class FilledRegionExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports an element as an annotation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"filledRegion\">The filled region element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void Export(ExporterIFC exporterIFC, FilledRegion filledRegion, ProductWrapper productWrapper)\r\n      {\r\n         if (filledRegion == null)\r\n            return;\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         Common.Enums.IFCEntityType elementClassTypeEnum = Common.Enums.IFCEntityType.IfcAnnotation;\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction transaction = new IFCTransaction(file))\r\n         {\r\n            IList<CurveLoop> boundaries = filledRegion.GetBoundaries();\r\n            if (boundaries.Count == 0)\r\n               return;\r\n\r\n            Plane plane = null;\r\n            try\r\n            {\r\n               plane = boundaries[0].GetPlane();\r\n            }\r\n            catch\r\n            {\r\n               return;\r\n            }\r\n\r\n            Transform orientTrf = GeometryUtil.CreateTransformFromPlane(plane);\r\n            XYZ projectionDirection = plane.Normal;\r\n\r\n            IList<IList<CurveLoop>> sortedLoops = ExporterIFCUtils.SortCurveLoops(boundaries);\r\n            if (sortedLoops.Count == 0)\r\n               return;\r\n\r\n            FilledRegionType filledRegionType = filledRegion.Document.GetElement(filledRegion.GetTypeId()) as FilledRegionType;\r\n            Color color = filledRegionType != null ? CategoryUtil.GetSafeColor(filledRegionType.ForegroundPatternColor) : new Color(0, 0, 0);\r\n            ElementId foregroundPatternId = filledRegionType != null ? filledRegionType.ForegroundPatternId : ElementId.InvalidElementId;\r\n            ElementId categoryId = CategoryUtil.GetSafeCategoryId(filledRegion);\r\n\r\n            // Check for containment override\r\n            using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, filledRegion, orientTrf))\r\n            {\r\n               IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n               int loopCount = sortedLoops.Count;\r\n               IFCAnyHandle localPlacement = setter.LocalPlacement;\r\n\r\n               for (int loopIndex = 0; loopIndex < loopCount; loopIndex++)\r\n               {\r\n                  IList<CurveLoop> curveLoopList = sortedLoops[loopIndex];\r\n                  IFCAnyHandle outerCurve = null;\r\n                  HashSet<IFCAnyHandle> innerCurves = null;\r\n                  for (int ii = 0; ii < curveLoopList.Count; ii++)\r\n                  {\r\n                     IFCAnyHandle ifcCurve = GeometryUtil.CreateIFCCurveFromCurveLoop(exporterIFC, curveLoopList[ii], orientTrf, projectionDirection);\r\n                     if (ii == 0)\r\n                        outerCurve = ifcCurve;\r\n                     else\r\n                     {\r\n                        if (innerCurves == null)\r\n                           innerCurves = new HashSet<IFCAnyHandle>();\r\n                        innerCurves.Add(ifcCurve);\r\n                     }\r\n                  }\r\n\r\n                  IFCAnyHandle representItem = IFCInstanceExporter.CreateAnnotationFillArea(file,\r\n                     outerCurve, innerCurves);\r\n                  file.CreateStyle(exporterIFC, representItem, color, foregroundPatternId);\r\n\r\n                  HashSet<IFCAnyHandle> bodyItems = new HashSet<IFCAnyHandle>() { representItem };\r\n                  IFCAnyHandle context2D = ExporterCacheManager.Get2DContextHandle(IFCRepresentationIdentifier.Annotation);\r\n                  IFCAnyHandle bodyRepHnd = RepresentationUtil.CreateAnnotationSetRep(exporterIFC, filledRegion, categoryId,\r\n                     context2D, bodyItems, false);\r\n\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(bodyRepHnd))\r\n                     return;\r\n\r\n                  List<IFCAnyHandle> shapeReps = new List<IFCAnyHandle>() { bodyRepHnd };\r\n\r\n                  string index = (loopIndex + 1).ToString();\r\n                  string annotationGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                     GUIDUtil.CreateGUIDString(filledRegion, index));\r\n                  IFCAnyHandle productShape = IFCInstanceExporter.CreateProductDefinitionShape(file, \r\n                     null, null, shapeReps);\r\n                  IFCAnyHandle currentLocalPlacement = (loopIndex == 0) ? localPlacement : \r\n                     ExporterUtil.CopyLocalPlacement(file, localPlacement);\r\n                  IFCAnyHandle annotation = IFCInstanceExporter.CreateAnnotation(exporterIFC, \r\n                     filledRegion, annotationGuid, ownerHistory, currentLocalPlacement, \r\n                     productShape, null);\r\n\r\n                  productWrapper.AddAnnotation(annotation, setter.LevelInfo, true);\r\n               }\r\n            }\r\n\r\n            transaction.Commit();\r\n         }\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/FloorExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export floor elements.\r\n   /// </summary>\r\n   class FloorExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports a generic element as an IfcSlab.</summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"floor\">The floor element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"ifcEnumType\">The string value represents the IFC type.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <returns>True if the floor is exported successfully, false otherwise.</returns>\r\n      public static void ExportGenericSlab(ExporterIFC exporterIFC, Element slabElement, GeometryElement geometryElement, string ifcEnumType,\r\n          ProductWrapper productWrapper)\r\n      {\r\n         if (geometryElement == null)\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            using (IFCTransformSetter transformSetter = IFCTransformSetter.Create())\r\n            {\r\n               using (PlacementSetter placementSetter = PlacementSetter.Create(exporterIFC, slabElement, null))\r\n               {\r\n                  using (IFCExportBodyParams ecData = new IFCExportBodyParams())\r\n                  {\r\n                     bool exportParts = PartExporter.CanExportParts(slabElement);\r\n\r\n                     IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n                     IFCAnyHandle localPlacement = placementSetter.LocalPlacement;\r\n\r\n                     IFCAnyHandle prodDefHnd = null;\r\n                     bool isBRepSlabHnd = false;\r\n\r\n                     if (!exportParts)\r\n                     {\r\n                        ecData.SetLocalPlacement(localPlacement);\r\n\r\n                        ElementId catId = CategoryUtil.GetSafeCategoryId(slabElement);\r\n\r\n                        BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.Medium);\r\n                        BodyData bodyData;\r\n                        prodDefHnd = RepresentationUtil.CreateAppropriateProductDefinitionShape(exporterIFC,\r\n                            slabElement, catId, geometryElement, bodyExporterOptions, null, ecData, out bodyData, instanceGeometry: true);\r\n                        if (IFCAnyHandleUtil.IsNullOrHasNoValue(prodDefHnd))\r\n                        {\r\n                           ecData.ClearOpenings();\r\n                           return;\r\n                        }\r\n                        isBRepSlabHnd = (bodyData.ShapeRepresentationType == ShapeRepresentationType.Brep || bodyData.ShapeRepresentationType == ShapeRepresentationType.Tessellation);\r\n                     }\r\n\r\n                     // Create the slab from either the extrusion or the BRep information.\r\n                     string ifcGUID = GUIDUtil.CreateGUID(slabElement);\r\n\r\n                     string entityType = IFCValidateEntry.GetValidIFCType<IFCSlabType>(slabElement, ifcEnumType, \"FLOOR\");\r\n\r\n                     IFCAnyHandle slabHnd = IFCInstanceExporter.CreateSlab(exporterIFC, slabElement, ifcGUID, ownerHistory,\r\n                             localPlacement, exportParts ? null : prodDefHnd, entityType);\r\n                     IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcSlab, entityType);\r\n\r\n                     if (IFCAnyHandleUtil.IsNullOrHasNoValue(slabHnd))\r\n                        return;\r\n\r\n                     if (exportParts)\r\n                        PartExporter.ExportHostPart(exporterIFC, slabElement, slabHnd, placementSetter, localPlacement, null);\r\n\r\n                     productWrapper.AddElement(slabElement, slabHnd, placementSetter, ecData, true, exportInfo);\r\n\r\n                     if (!exportParts)\r\n                     {\r\n                        IFCAnyHandle typeHnd = ExporterUtil.CreateGenericTypeFromElement(slabElement, exportInfo, file, productWrapper);\r\n                        ExporterCacheManager.TypeRelationsCache.Add(typeHnd, slabHnd);\r\n\r\n                        if (slabElement is HostObject)\r\n                        {\r\n                           HostObject hostObject = slabElement as HostObject;\r\n\r\n                           HostObjectExporter.ExportHostObjectMaterials(exporterIFC, hostObject, slabHnd,\r\n                               geometryElement, productWrapper, ElementId.InvalidElementId, Toolkit.IFCLayerSetDirection.Axis3, isBRepSlabHnd, typeHnd);\r\n                        }\r\n                        else if (slabElement is FamilyInstance)\r\n                        {\r\n                           ElementId matId = BodyExporter.GetBestMaterialIdFromGeometryOrParameter(geometryElement, slabElement);\r\n                           //Document doc = slabElement.Document;\r\n                           if (typeHnd != null)\r\n                              CategoryUtil.CreateMaterialAssociation(exporterIFC, typeHnd, matId);\r\n                           else\r\n                              CategoryUtil.CreateMaterialAssociation(exporterIFC, slabHnd, matId);\r\n                        }\r\n\r\n                        OpeningUtil.CreateOpeningsIfNecessary(slabHnd, slabElement, ecData, null,\r\n                            exporterIFC, ecData.GetLocalPlacement(), placementSetter, productWrapper);\r\n\r\n                        if (ecData.GetOpenings().Count == 0)\r\n                           OpeningUtil.AddOpeningsToElement(exporterIFC, slabHnd, slabElement, null, ecData.ScaledHeight, null, placementSetter, localPlacement, productWrapper);\r\n                     }\r\n                  }\r\n               }\r\n               tr.Commit();\r\n\r\n               return;\r\n            }\r\n         }\r\n      }\r\n\r\n      // Patch IfcRoot GUIDs created by internal code.  Currently only some opening\r\n      // elements, relations and related quantities are created internally, so this code is\r\n      // written specifically for that case, but could be easily expanded.\r\n      private static void RegisterHandlesToOverrideGUID(Element element,\r\n         ICollection<IFCAnyHandle> entityHandles)\r\n      {\r\n         int index = 0;\r\n         foreach (IFCAnyHandle entityHandle in entityHandles)\r\n         {\r\n            if (!IFCAnyHandleUtil.IsSubTypeOf(entityHandle, IFCEntityType.IfcRoot))\r\n               continue;\r\n\r\n            // We set the GUIDs of these elements here since we may need them to process\r\n            // other elements.\r\n            string globalId = GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(element,\r\n               \"Internal: \" + entityHandle.TypeName + (++index).ToString()));\r\n            ExporterUtil.SetGlobalId(entityHandle, globalId);\r\n\r\n            ExporterCacheManager.InternallyCreatedRootHandles[entityHandle] = element.Id;\r\n         }\r\n      }\r\n\r\n      // Augment the information from the internally created handles.  This includes:\r\n      // 1. Adding material information\r\n      // 2. Patching the presentation layer assignment\r\n      private static void AugmentHandleInformation(ExporterIFC exporterIFC, Element element,\r\n         GeometryElement geometryElement, ICollection<IFCAnyHandle> entityHandles)\r\n      {\r\n         // Not supported for IFC2x2.  Avoid computations below.\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2)\r\n            return;\r\n\r\n         ElementId matId = BodyExporter.GetBestMaterialIdFromGeometryOrParameter(geometryElement,\r\n            element);\r\n         bool fixMaterialId = matId != ElementId.InvalidElementId;\r\n\r\n         // We may have a situation where we have a presentation layer override, but the native code\r\n         // doesn't have that functionality.  In this case, we will create an entry here, and\r\n         // reconcile the difference during the end export operation.\r\n         string ifcCADLayerOverride = RepresentationUtil.GetPresentationLayerOverride(element);\r\n         bool fixIfcCADLayerOverride = !string.IsNullOrWhiteSpace(ifcCADLayerOverride);\r\n\r\n         if (!fixIfcCADLayerOverride && !fixMaterialId)\r\n            return;\r\n\r\n         Document document = element.Document;\r\n         foreach (IFCAnyHandle entityHandle in entityHandles)\r\n         {\r\n            IList<IFCAnyHandle> representations = null;\r\n            if (IFCAnyHandleUtil.IsSubTypeOf(entityHandle, IFCEntityType.IfcProduct))\r\n            {\r\n               representations = IFCAnyHandleUtil.GetProductRepresentations(entityHandle);\r\n            }\r\n            else if (IFCAnyHandleUtil.IsSubTypeOf(entityHandle, IFCEntityType.IfcProductDefinitionShape))\r\n            {\r\n               representations = IFCAnyHandleUtil.GetRepresentations(entityHandle);\r\n            }\r\n\r\n            // Not currently supported.\r\n            if (representations == null)\r\n               continue;\r\n\r\n            foreach (IFCAnyHandle representation in representations)\r\n            {\r\n               if (fixIfcCADLayerOverride)\r\n                  ExporterCacheManager.PresentationLayerSetCache.AddRepresentationToLayer(ifcCADLayerOverride, representation);\r\n\r\n               if (fixMaterialId)\r\n               {\r\n                  HashSet<IFCAnyHandle> repItemSet =\r\n                     IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(representation, \"Items\");\r\n                  foreach (IFCAnyHandle repItem in repItemSet)\r\n                  {\r\n                     BodyExporter.CreateSurfaceStyleForRepItem(exporterIFC, document, false, repItem, matId);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a CeilingAndFloor element to IFC.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"floor\">The floor element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportCeilingAndFloorElement(ExporterIFC exporterIFC, CeilingAndFloor floorElement, ref GeometryElement geometryElement,\r\n          ProductWrapper productWrapper)\r\n      {\r\n         if (geometryElement == null)\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         string ifcEnumType;\r\n         IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(floorElement, out ifcEnumType);\r\n\r\n         if (!ElementFilteringUtil.IsElementVisible(floorElement))\r\n            return;\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         IFCEntityType elementClassTypeEnum;\r\n         if (Enum.TryParse(exportType.ExportInstance.ToString(), out elementClassTypeEnum)\r\n            || Enum.TryParse(exportType.ExportType.ToString(), out elementClassTypeEnum))\r\n            if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n               return;\r\n\r\n         Document doc = floorElement.Document;\r\n         using (SubTransaction tempPartTransaction = new SubTransaction(doc))\r\n         {\r\n            MaterialLayerSetInfo layersetInfo = new MaterialLayerSetInfo(exporterIFC, floorElement, productWrapper);\r\n            // For IFC4RV export, Element will be split into its parts(temporarily) in order to export the wall by its parts\r\n            ExporterUtil.ExportPartAs exportPartAs = ExporterUtil.CanExportParts(floorElement);\r\n            bool exportByComponents = exportPartAs == ExporterUtil.ExportPartAs.ShapeAspect;\r\n            bool exportParts = exportPartAs == ExporterUtil.ExportPartAs.Part;\r\n            // If Parts are created by code and not by user then their name should be equal to Material name.\r\n            bool setMaterialNameToPartName = false;\r\n            if (ExporterCacheManager.TemporaryPartsCache.HasTemporaryParts(floorElement.Id))\r\n            {\r\n               setMaterialNameToPartName = true;\r\n               ExporterCacheManager.TemporaryPartsCache.SetPartExportType(floorElement.Id, exportPartAs);\r\n            }\r\n\r\n            if (exportParts && !PartExporter.CanExportElementInPartExport(floorElement, floorElement.LevelId, false))\r\n            {\r\n               return;\r\n            }\r\n\r\n            using (IFCTransaction tr = new IFCTransaction(file))\r\n            {\r\n               bool canExportAsContainerOrWithExtrusionAnalyzer = (!exportParts && (floorElement is Floor));\r\n\r\n               if (canExportAsContainerOrWithExtrusionAnalyzer)\r\n               {\r\n                  // Try to export the Floor slab as a container.  If that succeeds, we are done.\r\n                  // If we do export the floor as a container, it will take care of the local placement and transform there, so we need to leave\r\n                  // this out of the IFCTransformSetter and PlacementSetter scopes below, or else we'll get double transforms.\r\n                  IFCAnyHandle floorHnd = RoofExporter.ExportRoofOrFloorAsContainer(exporterIFC, floorElement, geometryElement,\r\n                     productWrapper, exportType);\r\n                  if (!IFCAnyHandleUtil.IsNullOrHasNoValue(floorHnd))\r\n                  {\r\n                     tr.Commit();\r\n                     return;\r\n                  }\r\n               }\r\n\r\n               IList<IFCAnyHandle> slabHnds = new List<IFCAnyHandle>();\r\n               IList<IFCAnyHandle> brepSlabHnds = new List<IFCAnyHandle>();\r\n               IList<IFCAnyHandle> nonBrepSlabHnds = new List<IFCAnyHandle>();\r\n\r\n               IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n               IFCAnyHandle typeHandle = null;\r\n\r\n               using (IFCTransformSetter transformSetter = IFCTransformSetter.Create())\r\n               {\r\n                  // Check for containment override\r\n                  using (PlacementSetter placementSetter = PlacementSetter.Create(exporterIFC, floorElement, null))\r\n                  {\r\n                     IFCAnyHandle localPlacement = placementSetter.LocalPlacement;\r\n\r\n                     // The routine ExportExtrudedSlabOpenings is called if exportedAsInternalExtrusion is true, and it requires having a valid level association.\r\n                     // Disable calling ExportSlabAsExtrusion if we can't handle potential openings.\r\n                     bool exportedAsInternalExtrusion = false;\r\n\r\n                     ElementId catId = CategoryUtil.GetSafeCategoryId(floorElement);\r\n\r\n                     IList<IFCAnyHandle> prodReps = new List<IFCAnyHandle>();\r\n                     IList<ShapeRepresentationType> repTypes = new List<ShapeRepresentationType>();\r\n                     IList<IList<CurveLoop>> extrusionLoops = new List<IList<CurveLoop>>();\r\n                     IList<IFCExportBodyParams> loopExtraParams = new List<IFCExportBodyParams>();\r\n                     Plane floorPlane = GeometryUtil.CreateDefaultPlane();\r\n                     IFCExportBodyParams ecData = new IFCExportBodyParams();\r\n\r\n                     IList<IFCAnyHandle> localPlacements = new List<IFCAnyHandle>();\r\n\r\n                     if (!exportParts)\r\n                     {\r\n                        if (canExportAsContainerOrWithExtrusionAnalyzer)\r\n                        {\r\n                           Floor floor = floorElement as Floor;\r\n\r\n                           // Next, try to use the ExtrusionAnalyzer for the limited cases it handles - 1 solid, no openings, end clippings only.\r\n                           // Also limited to cases with line and arc boundaries.\r\n                           //\r\n                           SolidMeshGeometryInfo solidMeshInfo = GeometryUtil.GetSplitSolidMeshGeometry(geometryElement);\r\n                           IList<Solid> solids = solidMeshInfo.GetSolids();\r\n                           IList<Mesh> meshes = solidMeshInfo.GetMeshes();\r\n                           IList<GeometryObject> gObjs = FamilyExporterUtil.RemoveInvisibleSolidsAndMeshes(floorElement.Document, exporterIFC, ref solids, ref meshes);\r\n\r\n                           if (solids.Count == 1 && meshes.Count == 0)\r\n                           {\r\n                              // floorExtrusionDirection is set to (0, 0, -1) because extrusionAnalyzerFloorPlane is computed from the top face of the floor\r\n                              XYZ floorExtrusionDirection = new XYZ(0, 0, -1);\r\n                              XYZ modelOrigin = XYZ.Zero;\r\n\r\n                              XYZ floorOrigin = floor.GetVerticalProjectionPoint(modelOrigin, FloorFace.Top);\r\n                              if (floorOrigin == null)\r\n                              {\r\n                                 // GetVerticalProjectionPoint may return null if FloorFace.Top is an edited face that doesn't \r\n                                 // go through the Revit model origin.  We'll try the midpoint of the bounding box instead.\r\n                                 BoundingBoxXYZ boundingBox = floorElement.get_BoundingBox(null);\r\n                                 modelOrigin = (boundingBox.Min + boundingBox.Max) / 2.0;\r\n                                 floorOrigin = floor.GetVerticalProjectionPoint(modelOrigin, FloorFace.Top);\r\n                              }\r\n\r\n                              if (floorOrigin != null)\r\n                              {\r\n                                 XYZ floorDir = floor.GetNormalAtVerticalProjectionPoint(floorOrigin, FloorFace.Top);\r\n                                 Plane extrusionAnalyzerFloorBasePlane = GeometryUtil.CreatePlaneByNormalAtOrigin(floorDir);\r\n\r\n                                 GenerateAdditionalInfo additionalInfo = GenerateAdditionalInfo.GenerateBody;\r\n                                 additionalInfo |= ExporterCacheManager.ExportOptionsCache.ExportAs4 ?\r\n                                    GenerateAdditionalInfo.GenerateFootprint : GenerateAdditionalInfo.None;\r\n\r\n                                 // Skip generate body item for IFC4RV. It will be handled later in PartExporter.ExportHostPartAsShapeAspects()\r\n                                 if (exportByComponents)\r\n                                    additionalInfo &= ~GenerateAdditionalInfo.GenerateBody;\r\n\r\n                                 ExtrusionExporter.ExtraClippingData extraClippingData = null;\r\n                                 HandleAndData floorAndProperties =\r\n                                     ExtrusionExporter.CreateExtrusionWithClippingAndProperties(exporterIFC, floorElement, false,\r\n                                     catId, solids[0], extrusionAnalyzerFloorBasePlane, floorOrigin, floorExtrusionDirection, null,\r\n                                     out extraClippingData,\r\n                                     addInfo: additionalInfo);\r\n                                 if (extraClippingData.CompletelyClipped)\r\n                                    return;\r\n\r\n                                 IList<IFCAnyHandle> representations = new List<IFCAnyHandle>();\r\n                                 if (floorAndProperties.Handle != null)\r\n                                 {\r\n                                    representations.Add(floorAndProperties.Handle);\r\n                                    repTypes.Add(ShapeRepresentationType.SweptSolid);\r\n                                 }\r\n\r\n                                 // Footprint representation will only be exported in export to IFC4\r\n                                 if (((additionalInfo & GenerateAdditionalInfo.GenerateFootprint) != 0) && (floorAndProperties.FootprintInfo != null))\r\n                                 {\r\n                                    IFCAnyHandle footprintShapeRep = floorAndProperties.FootprintInfo.CreateFootprintShapeRepresentation(exporterIFC);\r\n                                    representations.Add(footprintShapeRep);\r\n                                 }\r\n\r\n                                 IFCAnyHandle prodRep = null;\r\n                                 if (exportByComponents)\r\n                                 {\r\n                                    prodRep = RepresentationUtil.CreateProductDefinitionShapeWithoutBodyRep(exporterIFC, floorElement, catId, geometryElement, representations);\r\n                                 }\r\n                                 else if (representations.Count > 0 && floorAndProperties.Handle != null)   // Only when at least the body rep exists will come here\r\n                                 {\r\n                                    prodRep = IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, representations);\r\n                                 }\r\n\r\n                                 if (!IFCAnyHandleUtil.IsNullOrHasNoValue(prodRep))\r\n                                 {\r\n                                    prodReps.Add(prodRep);\r\n                                 }\r\n\r\n                                 if (floorAndProperties.Data != null)\r\n                                 {\r\n                                    loopExtraParams.Add(floorAndProperties.Data);\r\n                                 }\r\n                              }\r\n                           }\r\n                        }\r\n\r\n                        // Use internal routine as backup that handles openings.\r\n                        if (prodReps.Count == 0 && placementSetter.LevelInfo != null && !exportByComponents)\r\n                        {\r\n                           bool canExportAsInternalExtrusion = true;\r\n                           if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n                           {\r\n                              IList<IFCOpeningData> openingDataList = ExporterIFCUtils.GetOpeningData(exporterIFC, floorElement, null, null);\r\n                              canExportAsInternalExtrusion = openingDataList == null || openingDataList.Count == 0;\r\n                           }\r\n\r\n                           if (canExportAsInternalExtrusion)\r\n                           {\r\n                              loopExtraParams.Clear();\r\n                              IList<IFCExtrusionCreationData> extrusionParams = new List<IFCExtrusionCreationData>();\r\n\r\n                              exportedAsInternalExtrusion = ExporterIFCUtils.ExportSlabAsExtrusion(exporterIFC, floorElement,\r\n                                  geometryElement, transformSetter, localPlacement, out localPlacements, out prodReps,\r\n                                  out extrusionLoops, out extrusionParams, floorPlane);\r\n\r\n                              foreach (IFCExtrusionCreationData data in extrusionParams)\r\n                                 loopExtraParams.Add(new IFCExportBodyParams(data));\r\n\r\n                              if (exportedAsInternalExtrusion)\r\n                              {\r\n                                 AugmentHandleInformation(exporterIFC, floorElement,\r\n                                    geometryElement, prodReps);\r\n\r\n                                 for (int ii = 0; ii < prodReps.Count; ii++)\r\n                                 {\r\n                                    // all are extrusions\r\n                                    repTypes.Add(ShapeRepresentationType.SweptSolid);\r\n\r\n                                    // Footprint representation will only be exported in export to IFC4\r\n                                    if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n                                    {\r\n                                       if (extrusionLoops.Count > ii)\r\n                                       {\r\n                                          if (extrusionLoops[ii].Count > 0)\r\n                                          {\r\n                                             // Get the extrusion footprint using the first Curveloop. Transform needs to be obtained from the returned local placement\r\n                                             Transform lcs = ExporterIFCUtils.GetUnscaledTransform(exporterIFC, localPlacements[ii]);\r\n                                             IFCAnyHandle footprintGeomRepItem = GeometryUtil.CreateIFCCurveFromCurveLoop(exporterIFC, extrusionLoops[ii][0], lcs, floorPlane.Normal);\r\n\r\n                                             IFCAnyHandle contextOfItemsFootprint = exporterIFC.Get3DContextHandle(\"FootPrint\");\r\n                                             ISet<IFCAnyHandle> repItem = new HashSet<IFCAnyHandle>();\r\n                                             repItem.Add(footprintGeomRepItem);\r\n                                             IFCAnyHandle footprintShapeRepresentation = RepresentationUtil.CreateBaseShapeRepresentation(exporterIFC, contextOfItemsFootprint, \"FootPrint\", \"Curve2D\", repItem);\r\n                                             IList<IFCAnyHandle> reps = new List<IFCAnyHandle>();\r\n                                             reps.Add(footprintShapeRepresentation);\r\n                                             IFCAnyHandleUtil.AddRepresentations(prodReps[ii], reps);\r\n                                          }\r\n                                       }\r\n                                    }\r\n                                 }\r\n                              }\r\n                           }\r\n                        }\r\n\r\n                        IFCAnyHandle prodDefHnd;\r\n                        if (prodReps.Count == 0)\r\n                        {\r\n                           if (exportByComponents)\r\n                           {\r\n                              prodDefHnd = RepresentationUtil.CreateProductDefinitionShapeWithoutBodyRep(exporterIFC, floorElement, catId, geometryElement, null);\r\n                              if (!IFCAnyHandleUtil.IsNullOrHasNoValue(prodDefHnd))\r\n                              {\r\n                                 prodReps.Add(prodDefHnd);\r\n                              }\r\n                           }\r\n                           else\r\n                           {\r\n                              // Brep representation using tesellation after ExportSlabAsExtrusion does not return prodReps\r\n                              BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.Medium);\r\n                              BodyData bodyData;\r\n                              prodDefHnd = RepresentationUtil.CreateAppropriateProductDefinitionShape(exporterIFC,\r\n                                    floorElement, catId, geometryElement, bodyExporterOptions, null, ecData, out bodyData, instanceGeometry: true);\r\n                              if (IFCAnyHandleUtil.IsNullOrHasNoValue(prodDefHnd))\r\n                              {\r\n                                 ecData.ClearOpenings();\r\n                                 return;\r\n                              }\r\n\r\n                              prodReps.Add(prodDefHnd);\r\n                              repTypes.Add(bodyData.ShapeRepresentationType);\r\n                           }\r\n                        }\r\n                     }\r\n\r\n                     // Create the slab from either the extrusion or the BRep information.\r\n                     string ifcGUID = GUIDUtil.CreateGUID(floorElement);\r\n\r\n                     int numReps = exportParts ? 1 : prodReps.Count;\r\n\r\n                     // Deal with a couple of cases that have non-standard defaults.\r\n                     switch (exportType.ExportInstance)\r\n                     {\r\n                        case IFCEntityType.IfcCovering:\r\n                           exportType.PredefinedType ??= IFCValidateEntry.GetValidIFCType<IFCCoveringType>(floorElement, ifcEnumType, \"FLOORING\");\r\n                           break;\r\n                        case IFCEntityType.IfcSlab:\r\n                           {\r\n                              bool isBaseSlab = false;\r\n                              AnalyticalToPhysicalAssociationManager manager = AnalyticalToPhysicalAssociationManager.GetAnalyticalToPhysicalAssociationManager(doc);\r\n                              if (manager != null)\r\n                              {\r\n                                 ElementId counterPartId = manager.GetAssociatedElementId(floorElement.Id);\r\n                                 if (counterPartId != ElementId.InvalidElementId)\r\n                                 {\r\n                                    Element counterpartElem = doc.GetElement(counterPartId);\r\n\r\n                                    if (counterpartElem != null && counterpartElem is AnalyticalElement)\r\n                                    {\r\n                                       AnalyzeAs slabAnalyzeAs = (counterpartElem as AnalyticalElement).AnalyzeAs;\r\n                                       isBaseSlab = (slabAnalyzeAs == AnalyzeAs.SlabOnGrade) || (slabAnalyzeAs == AnalyzeAs.Mat);\r\n                                    }\r\n                                 }\r\n                              }\r\n\r\n                              exportType.PredefinedType ??= IFCValidateEntry.GetValidIFCType<IFCSlabType>(floorElement, ifcEnumType, isBaseSlab ? \"BASESLAB\" : \"FLOOR\");\r\n                           }\r\n                           break;\r\n                     }\r\n\r\n                     int openingCreatedCount = 0;\r\n                     for (int ii = 0; ii < numReps; ii++)\r\n                     {\r\n                        string ifcName = NamingUtil.GetNameOverride(floorElement, NamingUtil.GetIFCNamePlusIndex(floorElement, ii == 0 ? -1 : ii + 1));\r\n\r\n                        string currentGUID = (ii == 0) ? ifcGUID : GUIDUtil.GenerateIFCGuidFrom(\r\n                           GUIDUtil.CreateGUIDString(floorElement, \"Slab Copy \" + ii.ToString()));\r\n                        IFCAnyHandle localPlacementHnd = exportedAsInternalExtrusion ? localPlacements[ii] : localPlacement;\r\n\r\n                        IFCAnyHandle slabHnd = null;\r\n                        slabHnd = IFCInstanceExporter.CreateGenericIFCEntity(exportType, file, floorElement, currentGUID, ownerHistory,\r\n                           localPlacementHnd, exportParts ? null : prodReps[ii]);\r\n                        if (IFCAnyHandleUtil.IsNullOrHasNoValue(slabHnd))\r\n                           return;\r\n\r\n                        if (!string.IsNullOrEmpty(ifcName))\r\n                           IFCAnyHandleUtil.OverrideNameAttribute(slabHnd, ifcName);\r\n\r\n                        IFCInstanceExporter.SetPredefinedType(slabHnd, exportType);\r\n\r\n                        if (exportParts)\r\n                        {\r\n                           PartExporter.ExportHostPart(exporterIFC, floorElement, slabHnd, placementSetter, localPlacementHnd, null, setMaterialNameToPartName);\r\n                        }\r\n                        else if (exportByComponents)\r\n                        {\r\n                           IFCExportBodyParams partECData = new IFCExportBodyParams();\r\n                           IFCAnyHandle hostShapeRepFromParts = PartExporter.ExportHostPartAsShapeAspects(exporterIFC,\r\n                              floorElement, prodReps[ii], ElementId.InvalidElementId, layersetInfo, partECData);\r\n                           loopExtraParams.Add(partECData);\r\n                        }\r\n\r\n                        slabHnds.Add(slabHnd);\r\n\r\n                        // For IFC4RV, export of the geometry is already handled in PartExporter.ExportHostPartAsShapeAspects()\r\n                        if (!exportParts && !exportByComponents)\r\n                        {\r\n                           if (repTypes[ii] == ShapeRepresentationType.Brep || repTypes[ii] == ShapeRepresentationType.Tessellation)\r\n                              brepSlabHnds.Add(slabHnd);\r\n                           else\r\n                              nonBrepSlabHnds.Add(slabHnd);\r\n                        }\r\n\r\n                        OpeningUtil.CreateOpeningsIfNecessary(slabHnd, floorElement, ecData, null,\r\n                           exporterIFC, localPlacement, placementSetter, productWrapper);\r\n\r\n                        // Try get openings using OpeningUtil if ecData.GetOpening() used in the above call is 0\r\n                        // Wawan: Currently it will not work well with cases that the geometry has multiple solid lumps that will be exported as separate slab because\r\n                        // Openings data is for the whole element and there is no straightforward way to match the openings with the lumps curently\r\n                        if (ecData.GetOpenings().Count == 0 && numReps == 1)\r\n                        {\r\n                           Transform lcs = GeometryUtil.CreateTransformFromPlane(floorPlane);\r\n                           openingCreatedCount = OpeningUtil.AddOpeningsToElement(exporterIFC, slabHnd, floorElement, lcs, ecData.ScaledHeight, null, placementSetter, localPlacement, productWrapper);\r\n                        }\r\n                     }\r\n\r\n                     typeHandle = ExporterUtil.CreateGenericTypeFromElement(floorElement, exportType, file, productWrapper);\r\n\r\n                     for (int ii = 0; ii < numReps; ii++)\r\n                     {\r\n                        IFCExportBodyParams loopExtraParam = ii < loopExtraParams.Count ? loopExtraParams[ii] : ecData;\r\n                        productWrapper.AddElement(floorElement, slabHnds[ii], placementSetter, loopExtraParam, true, exportType);\r\n\r\n                        ExporterCacheManager.TypeRelationsCache.Add(typeHandle, slabHnds[ii]);\r\n\r\n                        ExporterUtil.AddIntoComplexPropertyCache(slabHnds[ii], layersetInfo);\r\n                     }\r\n\r\n                     // This call to the native function appears to create Brep opening also when appropriate. But the creation of the IFC instances is not\r\n                     //   controllable from the managed code. Therefore in some cases BRep geometry for Opening will still be exported even in the Reference View\r\n                     // Call this only if no opening created\r\n                     if (exportedAsInternalExtrusion && openingCreatedCount == 0)\r\n                     {\r\n                        ISet<IFCAnyHandle> oldCreatedObjects = productWrapper.GetAllObjects();\r\n                        \r\n                        IList<IFCOpeningDimensions> openingDimensions = \r\n                           ExporterIFCUtils.ExportExtrudedSlabOpeningsAndReturnInfo(exporterIFC, floorElement, placementSetter.LevelInfo,\r\n                              localPlacements[0], slabHnds, extrusionLoops, floorPlane, productWrapper.ToNative());\r\n\r\n                        CreateOpeningQuantities(exporterIFC, openingDimensions);\r\n                        \r\n                        ISet<IFCAnyHandle> newCreatedObjects = productWrapper.GetAllObjects();\r\n                        newCreatedObjects.ExceptWith(oldCreatedObjects);\r\n                        RegisterHandlesToOverrideGUID(floorElement, newCreatedObjects);\r\n                        AugmentHandleInformation(exporterIFC, floorElement, geometryElement,\r\n                           newCreatedObjects);\r\n                     }\r\n                  }\r\n\r\n                  if (!exportParts)\r\n                  {\r\n                     if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n                     {\r\n                        HostObjectExporter.ExportHostObjectMaterials(exporterIFC, floorElement, productWrapper.GetAnElement(),\r\n                           geometryElement, productWrapper, ElementId.InvalidElementId, IFCLayerSetDirection.Axis3, false, typeHandle);\r\n                     }\r\n                     else\r\n                     {\r\n                        if (nonBrepSlabHnds.Count > 0)\r\n                        {\r\n                           HostObjectExporter.ExportHostObjectMaterials(exporterIFC, floorElement, nonBrepSlabHnds,\r\n                              geometryElement, productWrapper, ElementId.InvalidElementId, IFCLayerSetDirection.Axis3, false, typeHandle);\r\n                        }\r\n\r\n                        if (brepSlabHnds.Count > 0)\r\n                        {\r\n                           HostObjectExporter.ExportHostObjectMaterials(exporterIFC, floorElement, brepSlabHnds,\r\n                              geometryElement, productWrapper, ElementId.InvalidElementId, IFCLayerSetDirection.Axis3, true, typeHandle);\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n\r\n               tr.Commit();\r\n               return;\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets IFCSlabType from slab type name.\r\n      /// </summary>\r\n      /// <param name=\"ifcEnumType\">The slab type name.</param>\r\n      /// <returns>The IFCSlabType.</returns>\r\n      public static IFCSlabType GetIFCSlabType(string ifcEnumType)\r\n      {\r\n         if (String.IsNullOrEmpty(ifcEnumType))\r\n            return IFCSlabType.Floor;\r\n\r\n         string ifcEnumTypeWithoutSpaces = NamingUtil.RemoveSpacesAndUnderscores(ifcEnumType);\r\n\r\n         if (String.Compare(ifcEnumTypeWithoutSpaces, \"USERDEFINED\", true) == 0)\r\n            return IFCSlabType.UserDefined;\r\n         if (String.Compare(ifcEnumTypeWithoutSpaces, \"FLOOR\", true) == 0)\r\n            return IFCSlabType.Floor;\r\n         if (String.Compare(ifcEnumTypeWithoutSpaces, \"ROOF\", true) == 0)\r\n            return IFCSlabType.Roof;\r\n         if (String.Compare(ifcEnumTypeWithoutSpaces, \"LANDING\", true) == 0)\r\n            return IFCSlabType.Landing;\r\n         if (String.Compare(ifcEnumTypeWithoutSpaces, \"BASESLAB\", true) == 0)\r\n            return IFCSlabType.BaseSlab;\r\n\r\n         return IFCSlabType.Floor;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IFC quantities for opening elements using type-safe C# methods.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"openingDimensions\">Opening dimensional data from C++ geometry calculation.</param>\r\n      private static void CreateOpeningQuantities(ExporterIFC exporterIFC, \r\n         IList<IFCOpeningDimensions> openingDimensions)\r\n      {\r\n         if (openingDimensions == null || openingDimensions.Count == 0)\r\n            return;\r\n         \r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n         \r\n         foreach (IFCOpeningDimensions dimensions in openingDimensions)\r\n         {\r\n            if (dimensions == null || !dimensions.GetOpeningHandle().HasValue)\r\n               continue;\r\n\r\n            PropertyUtil.CreateOpeningQuantities(exporterIFC, dimensions.GetOpeningHandle(),\r\n               dimensions.Depth, dimensions.Height, dimensions.Width, dimensions.Area);\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/FootingExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export footing elements.\r\n   /// </summary>\r\n   class FootingExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports a footing to IFC footing.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"footing\">\r\n      /// The footing element.\r\n      /// </param>\r\n      /// <param name=\"geometryElement\">\r\n      /// The geometry element.\r\n      /// </param>\r\n      /// <param name=\"productWrapper\">\r\n      /// The ProductWrapper.\r\n      /// </param>\r\n      public static void ExportFootingElement(ExporterIFC exporterIFC,\r\n         WallFoundation footing, GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         String ifcEnumType = \"STRIP_FOOTING\";\r\n         ExportFooting(exporterIFC, footing, geometryElement, ifcEnumType, productWrapper);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports an element to IFC footing.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"element\">\r\n      /// The element.\r\n      /// </param>\r\n      /// <param name=\"geometryElement\">\r\n      /// The geometry element.\r\n      /// </param>\r\n      /// <param name=\"ifcEnumType\">\r\n      /// The string value represents the IFC type.\r\n      /// </param>\r\n      /// <param name=\"productWrapper\">\r\n      /// The ProductWrapper.\r\n      /// </param>\r\n      public static void ExportFooting(ExporterIFC exporterIFC, Element element, GeometryElement geometryElement,\r\n         string ifcEnumType, ProductWrapper productWrapper)\r\n      {\r\n         // export parts or not\r\n         bool exportParts = PartExporter.CanExportParts(element);\r\n         if (exportParts && !PartExporter.CanExportElementInPartExport(element, element.LevelId, false))\r\n            return;\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         Common.Enums.IFCEntityType elementClassTypeEnum = Common.Enums.IFCEntityType.IfcFooting;\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, element, null))\r\n            {\r\n               using (IFCExportBodyParams ecData = new IFCExportBodyParams())\r\n               {\r\n                  ecData.SetLocalPlacement(setter.LocalPlacement);\r\n\r\n                  IFCAnyHandle prodRep = null;\r\n                  ElementId matId = ElementId.InvalidElementId;\r\n                  if (!exportParts)\r\n                  {\r\n                     ElementId catId = CategoryUtil.GetSafeCategoryId(element);\r\n\r\n\r\n                     matId = BodyExporter.GetBestMaterialIdFromGeometryOrParameter(geometryElement, element);\r\n                     BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n                     prodRep = RepresentationUtil.CreateAppropriateProductDefinitionShape(exporterIFC,\r\n                        element, catId, geometryElement, bodyExporterOptions, null, ecData, true);\r\n                     if (IFCAnyHandleUtil.IsNullOrHasNoValue(prodRep))\r\n                     {\r\n                        ecData.ClearOpenings();\r\n                        return;\r\n                     }\r\n                  }\r\n\r\n                  string instanceGUID = GUIDUtil.CreateGUID(element);\r\n\r\n                  string footingType = GetIFCFootingType(ifcEnumType);    // need to keep it for legacy support when original data follows slightly diff naming\r\n                  IFCExportInfoPair exportInfo = new IFCExportInfoPair(elementClassTypeEnum, footingType);\r\n\r\n                  IFCAnyHandle footing = IFCInstanceExporter.CreateFooting(exporterIFC, element, instanceGUID, ExporterCacheManager.OwnerHistoryHandle,\r\n                      ecData.GetLocalPlacement(), prodRep, footingType);\r\n\r\n                  // TODO: to allow shared geometry for Footings. For now, Footing export will not use shared geometry\r\n                  if (exportInfo.ExportType != Common.Enums.IFCEntityType.UnKnown)\r\n                  {\r\n                     IFCAnyHandle type = ExporterUtil.CreateGenericTypeFromElement(element, exportInfo, file, productWrapper);\r\n                     ExporterCacheManager.TypeRelationsCache.Add(type, footing);\r\n                  }\r\n\r\n                  if (exportParts)\r\n                  {\r\n                     PartExporter.ExportHostPart(exporterIFC, element, footing, setter, setter.LocalPlacement, null);\r\n                  }\r\n                  else\r\n                  {\r\n                     if (matId != ElementId.InvalidElementId)\r\n                     {\r\n                        CategoryUtil.CreateMaterialAssociation(exporterIFC, footing, matId);\r\n                     }\r\n                  }\r\n\r\n                  productWrapper.AddElement(element, footing, setter, ecData, true, exportInfo);\r\n\r\n                  OpeningUtil.CreateOpeningsIfNecessary(footing, element, ecData, null,\r\n                      exporterIFC, ecData.GetLocalPlacement(), setter, productWrapper);\r\n               }\r\n            }\r\n\r\n            tr.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets IFC footing type from a string.\r\n      /// </summary>\r\n      /// <param name=\"value\">The type name.</param>\r\n      /// <returns>The IFCFootingType.</returns>\r\n      public static string GetIFCFootingType(string value)\r\n      {\r\n         if (String.IsNullOrEmpty(value))\r\n            return \"NOTDEFINED\";\r\n\r\n         string newValue = NamingUtil.RemoveSpacesAndUnderscores(value);\r\n\r\n         if (String.Compare(newValue, \"USERDEFINED\", true) == 0)\r\n            return \"USERDEFINED\";\r\n         if (String.Compare(newValue, \"FOOTINGBEAM\", true) == 0)\r\n            return \"FOOTING_BEAM\";\r\n         if (String.Compare(newValue, \"PADFOOTING\", true) == 0)\r\n            return \"PAD_FOOTING\";\r\n         if (String.Compare(newValue, \"PILECAP\", true) == 0)\r\n            return \"PILE_CAP\";\r\n         if (String.Compare(newValue, \"STRIPFOOTING\", true) == 0)\r\n            return \"STRIP_FOOTING\";\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            if (String.Compare(newValue, \"CAISSONFOUNDATION\", true) == 0)\r\n               return \"CAISSON_FOUNDATION\";\r\n         }\r\n\r\n         return \"NOTDEFINED\";\r\n      }\r\n\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/GenericElementExporter.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Export.Toolkit;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Export.Exporter.PropertySet;\n\nnamespace Revit.IFC.Export.Exporter\n{\n   class GenericElementExporter\n   {\n      /// <summary>\n      /// Exports an element as building element proxy.\n      /// </summary>\n      /// <remarks>\n      /// This function is called from the Export function, but can also be called directly if you do not\n      /// want CreateInternalPropertySets to be called.\n      /// </remarks>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"element\">The element.</param>\n      /// <param name=\"geometryElement\">The geometry element.</param>\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\n      /// <returns>The handle if created, null otherwise.</returns>\n      public static IFCAnyHandle ExportSimpleGenericElement(ExporterIFC exporterIFC, Element element,\n          GeometryElement geometryElement, ProductWrapper productWrapper, IFCExportInfoPair exportType)\n      {\n         if (element == null || geometryElement == null)\n            return null;\n\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\n         if (exportType.ExportInstance == IFCEntityType.UnKnown)\n            exportType.SetByTypeAndPredefinedType(IFCEntityType.IfcBuildingElementProxy, exportType.PredefinedType);\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(exportType.ExportInstance))\n            return null;\n\n         IFCFile file = exporterIFC.GetFile();\n         IFCAnyHandle instanceHandle = null;\n         using (IFCTransaction tr = new IFCTransaction(file))\n         {\n            using (PlacementSetter placementSetter = PlacementSetter.Create(exporterIFC, element, null))\n            {\n               using (IFCExportBodyParams ecData = new IFCExportBodyParams())\n               {\n                  ecData.SetLocalPlacement(placementSetter.LocalPlacement);\n\n                  ElementId categoryId = CategoryUtil.GetSafeCategoryId(element);\n\n                  bool tryToExportAsTessellation = !ExporterCacheManager.ExportOptionsCache.ExportGeometryOnly;\n\n                  BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(tryToExportAsTessellation, \n                     ExportOptionsCache.ExportTessellationLevel.ExtraLow);\n                  IFCAnyHandle representation = RepresentationUtil.CreateAppropriateProductDefinitionShape(exporterIFC, element,\n                      categoryId, geometryElement, bodyExporterOptions, null, ecData, true);\n\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(representation))\n                  {\n                     ecData.ClearOpenings();\n                     return null;\n                  }\n\n                  string guid = GUIDUtil.CreateGUID(element);\n                  IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\n                  IFCAnyHandle localPlacement = ecData.GetLocalPlacement();\n                  IFCAnyHandle styleHandle = null;\n\n                  instanceHandle = FamilyExporterUtil.ExportGenericInstance(exportType, exporterIFC, element, productWrapper, placementSetter, ecData, guid, ownerHistory,\n                     representation, null);\n\n                  if (exportType.ExportType != IFCEntityType.UnKnown)\n                  {\n                     FamilySymbol familySymbol = (element as FamilyInstance)?.Symbol;\n                     if (familySymbol != null)\n                     {\n                        HashSet<IFCAnyHandle> propertySetsOpt = new HashSet<IFCAnyHandle>();\n                        IList<IFCAnyHandle> repMapListOpt = new List<IFCAnyHandle>();\n\n                        string typeGuid = FamilyExporterUtil.GetGUIDForFamilySymbol(element as FamilyInstance, familySymbol, exportType);\n                        styleHandle = FamilyExporterUtil.ExportGenericType(file, exportType, propertySetsOpt, repMapListOpt, element, familySymbol, typeGuid);\n                        productWrapper.RegisterHandleWithElementType(familySymbol, exportType, styleHandle, propertySetsOpt);\n                     }\n\n                     if (IFCAnyHandleUtil.IsNullOrHasNoValue(styleHandle))\n                        styleHandle = ExporterUtil.CreateGenericTypeFromElement(element, exportType, file, productWrapper);\n                  }\n\n                  if (!IFCAnyHandleUtil.IsNullOrHasNoValue(instanceHandle))\n                  {\n                     if (exportType.ExportInstance == IFCEntityType.IfcSpace)\n                        productWrapper.AddSpace(element, instanceHandle, placementSetter.LevelInfo, ecData, true, exportType);\n                     else\n                        productWrapper.AddElement(element, instanceHandle, placementSetter.LevelInfo, ecData, true, exportType);\n\n                     if (!IFCAnyHandleUtil.IsNullOrHasNoValue(styleHandle))\n                        ExporterCacheManager.TypeRelationsCache.Add(styleHandle, instanceHandle);\n                  }\n               }\n               tr.Commit();\n            }\n         }\n\n         return instanceHandle;\n      }\n\n      private static GeometryInstance GetTheGeometryInstance(GeometryElement geomElem)\n      {\n         GeometryInstance geometryInstance = null;\n         foreach (GeometryObject geomObj in geomElem)\n         {\n            GeometryInstance geomInst = geomObj as GeometryInstance;\n            if (geomInst != null)\n            {\n               if (geometryInstance == null)\n               {\n                  geometryInstance = geomInst;\n                  continue;\n               }\n               else\n               {\n                  return null;\n               }\n            }\n\n            Solid solid = geomObj as Solid;\n            if (solid != null)\n            {\n               double? volume = GeometryUtil.GetSafeVolume(solid);\n               if (volume.HasValue || MathUtil.IsAlmostZero(volume.Value))\n                  continue;\n            }\n\n            return null;\n         }\n\n         return geometryInstance;\n      }\n\n      private static bool ExportGenericElementAsMappedItem(ExporterIFC exporterIFC,\n         Element element, GeometryElement geomElem, IFCExportInfoPair exportType,\n         ProductWrapper wrapper)\n      {\n         if (geomElem == null)\n            return false;\n\n         GeometryInstance geometryInstance = GetTheGeometryInstance(geomElem);\n         if (geometryInstance == null)\n            return false;\n\n         GeometryElement exportGeometry = geometryInstance.GetSymbolGeometry();\n         if (exportGeometry == null)\n            return false;\n\n         ElementId symbolId = geometryInstance.GetSymbolGeometryId()?.SymbolId ?? ElementId.InvalidElementId;\n         ElementType elementType = element.Document.GetElement(symbolId) as ElementType;\n         if (elementType == null)\n            return false;\n\n         Transform originalTrf = geometryInstance.Transform;\n         // Can't handle mirrored transforms yet.\n         if (originalTrf.HasReflection)\n            return false; \n         \n         ElementId categoryId = CategoryUtil.GetSafeCategoryId(element);\n\n         IFCFile file = exporterIFC.GetFile();\n\n         IList<Transform> repMapTrfList = new List<Transform>();\n         BodyData bodyData = null;\n         FamilyTypeInfo typeInfo = new FamilyTypeInfo();\n         IFCExportBodyParams extraParams = typeInfo.extraParams;\n\n         Transform offsetTransform = Transform.Identity;\n         DoorWindowInfo doorWindowInfo = new DoorWindowInfo();\n\n         // We will create a new mapped type if we haven't already created the type.\n         // GUID_TODO: This assumes that there are no types relating to objects split by level,\n         // or to doors/windows that are flipped.\n         bool containedInAssembly = ExporterUtil.IsContainedInAssembly(element);\n         var typeKey = new TypeObjectKey(symbolId, ElementId.InvalidElementId,\n            false, exportType, ElementId.InvalidElementId, containedInAssembly);\n\n         FamilyTypeInfo currentTypeInfo = \n            ExporterCacheManager.FamilySymbolToTypeInfoCache.Find(typeKey);\n         bool found = currentTypeInfo.IsValid();\n         if (!found)\n         {\n            IList<IFCAnyHandle> representations3D = new List<IFCAnyHandle>();\n\n            IFCAnyHandle dummyPlacement = ExporterUtil.CreateLocalPlacement(file, null, null);\n            extraParams.SetLocalPlacement(dummyPlacement);\n\n            using (TransformSetter trfSetter = TransformSetter.Create())\n            {\n               BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(false, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\n\n               bodyData = BodyExporter.ExportBody(exporterIFC, element, categoryId,\n                  ExporterUtil.GetSingleMaterial(element), exportGeometry,\n                  bodyExporterOptions, extraParams);\n               typeInfo.MaterialIdList = bodyData.MaterialIds;\n               offsetTransform = bodyData.OffsetTransform;\n\n               // This code does not handle openings yet.\n               // The intention for this is FabricationParts and DirectShapes which do not\n               // currently have opening.\n               // If they can have openings in the future, we can add this.\n               IFCAnyHandle bodyRepHnd = bodyData.RepresentationHnd;\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(bodyRepHnd) || extraParams.GetOpenings().Count > 0)\n                  return false;\n\n               representations3D.Add(bodyRepHnd);\n               repMapTrfList.Add(null);\n            }\n\n            typeInfo.StyleTransform = ExporterIFCUtils.GetUnscaledTransform(exporterIFC,\n               extraParams.GetLocalPlacement());\n\n            IFCAnyHandle typeStyle = FamilyInstanceExporter.CreateTypeEntityHandle(exporterIFC,\n               typeKey, ref typeInfo, doorWindowInfo, representations3D, repMapTrfList, null, null,\n               element, elementType, elementType, ElementId.InvalidElementId, false, false,\n               exportType, out HashSet<IFCAnyHandle> propertySets);\n\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(typeStyle))\n            {\n               wrapper.RegisterHandleWithElementType(elementType, exportType, typeStyle,\n                  propertySets);\n\n               typeInfo.Style = typeStyle;\n\n               CategoryUtil.TryToCreateMaterialAssocation(exporterIFC, bodyData, elementType,\n                  element, exportGeometry, typeStyle, typeInfo);\n\n               // Create other generic classification from ClassificationCode(s)\n               ClassificationUtil.CreateClassification(exporterIFC, file, elementType, typeStyle);\n               ClassificationUtil.CreateUniformatClassification(file, elementType, typeStyle);\n            }\n         }\n\n         if (found && !typeInfo.IsValid())\n            typeInfo = currentTypeInfo;\n\n         // we'll pretend we succeeded, but we'll do nothing.\n         if (!typeInfo.IsValid())\n            return false;\n\n         extraParams = typeInfo.extraParams;\n\n         // We expect no openings, so always add to map.\n         ExporterCacheManager.FamilySymbolToTypeInfoCache.Register(typeKey, typeInfo, false);\n\n         XYZ scaledMapOrigin = XYZ.Zero;\n         Transform scaledTrf = originalTrf.Multiply(typeInfo.StyleTransform);\n\n         // create instance.  \n         IList<IFCAnyHandle> shapeReps = FamilyInstanceExporter.CreateShapeRepresentations(exporterIFC,\n            file, element, categoryId, typeInfo, scaledMapOrigin);\n         if (shapeReps == null)\n            return false;\n\n         Transform boundingBoxTrf = (offsetTransform != null) ? offsetTransform.Inverse : Transform.Identity;\n         boundingBoxTrf = boundingBoxTrf.Multiply(scaledTrf.Inverse);\n         IFCAnyHandle boundingBoxRep = BoundingBoxExporter.ExportBoundingBox(exporterIFC, geomElem, boundingBoxTrf);\n\n         if (boundingBoxRep != null)\n            shapeReps.Add(boundingBoxRep);\n\n         IFCAnyHandle repHnd = (shapeReps.Count > 0) ? IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, shapeReps) : null;\n\n         using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, element, scaledTrf, null))\n         {\n            IFCAnyHandle instanceHandle = null;\n            IFCAnyHandle localPlacement = setter.LocalPlacement;\n            bool materialAlreadyAssociated = false;\n\n            // We won't create the instance if: \n            // (1) we are exporting to CV2.0/RV, (2) we have no 2D, 3D, or bounding box geometry, and (3) we aren't exporting parts.\n            if (!(repHnd == null\n                  && (ExporterCacheManager.ExportOptionsCache.ExportAsCoordinationView2\n                  || ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)))\n            {\n               string instanceGUID = GUIDUtil.CreateGUID(element);\n\n               bool isChildInContainer = ExporterUtil.IsContainedInAssembly(element);\n\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(instanceHandle))\n               {\n                  bool isBuildingElementProxy =\n                        ((exportType.ExportInstance == IFCEntityType.IfcBuildingElementProxy) ||\n                        (exportType.ExportType == IFCEntityType.IfcBuildingElementProxyType));\n\n                  ElementId roomId = setter.UpdateRoomRelativeCoordinates(element,\n                     out IFCAnyHandle localPlacementToUse);\n                  bool containedInSpace = (roomId != ElementId.InvalidElementId) && (exportType.ExportInstance != IFCEntityType.IfcSystemFurnitureElement);\n                  IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\n\n                  if (!isBuildingElementProxy)\n                  {\n                     instanceHandle = IFCInstanceExporter.CreateGenericIFCEntity(exportType, file, element, instanceGUID,\n                        ownerHistory, localPlacementToUse, repHnd);\n                  }\n                  else\n                  {\n                     instanceHandle = IFCInstanceExporter.CreateBuildingElementProxy(exporterIFC, element, instanceGUID,\n                        ownerHistory, localPlacementToUse, repHnd, exportType.GetPredefinedTypeOrDefault());\n                  }\n\n                  bool associateToLevel = !containedInSpace && !isChildInContainer;\n                  wrapper.AddElement(element, instanceHandle, setter, extraParams, associateToLevel, exportType);\n                  if (containedInSpace)\n                     ExporterCacheManager.SpaceInfoCache.RelateToSpace(roomId, instanceHandle);\n               }\n\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(instanceHandle))\n               {\n                  if (ElementFilteringUtil.IsMEPType(exportType) || ElementFilteringUtil.ProxyForMEPType(element, exportType))\n                  {\n                     ExporterCacheManager.MEPCache.Register(element, instanceHandle);\n                  }\n\n                  ExporterCacheManager.HandleToElementCache.Register(instanceHandle, element.Id);\n\n                  if (!materialAlreadyAssociated)\n                  {\n                     // Create material association for the instance only if the the istance geometry is different from the type\n                     // or the type does not have any material association\n                     IFCAnyHandle constituentSetHnd = ExporterCacheManager.MaterialConstituentSetCache.Find(symbolId);\n                     if (IFCAnyHandleUtil.IsNullOrHasNoValue(constituentSetHnd)\n                        && bodyData != null && bodyData.RepresentationItemInfo != null && bodyData.RepresentationItemInfo.Count > 0)\n                     {\n                        CategoryUtil.CreateMaterialAssociationWithShapeAspect(exporterIFC, element, instanceHandle, bodyData.RepresentationItemInfo);\n                     }\n                     else\n                     {\n                        // Create material association in case if bodyData is null\n                        CategoryUtil.CreateMaterialAssociation(exporterIFC, element, instanceHandle, typeInfo.MaterialIdList);\n                     }\n                  }\n\n                  if (!IFCAnyHandleUtil.IsNullOrHasNoValue(typeInfo.Style))\n                     ExporterCacheManager.TypeRelationsCache.Add(typeInfo.Style, instanceHandle);\n               }\n            }\n         }\n         return true;\n      }\n\n\n      /// <summary>\n      /// Exports a fabrication part to corresponding IFC object.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"element\">The element to be exported.</param>\n      /// <param name=\"geometryElement\">The geometry element.</param>\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\n      public static bool ExportElement(ExporterIFC exporterIFC,\n         Element element, GeometryElement geometryElement, ProductWrapper productWrapper)\n      {\n         IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(element, out _);\n\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\n         IFCEntityType elementClassTypeEnum;\n         if (Enum.TryParse(exportType.ExportInstance.ToString(), out elementClassTypeEnum)\n               || Enum.TryParse(exportType.ExportType.ToString(), out elementClassTypeEnum))\n            if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\n               return false;\n\n         if (ExportGenericElementAsMappedItem(exporterIFC, element, geometryElement,\n            exportType, productWrapper))\n            return true;\n\n         if (FamilyInstanceExporter.ExportGenericToSpecificElement(exporterIFC,\n            element, ref geometryElement, exportType, productWrapper))\n            return true;\n\n         return (ExportSimpleGenericElement(exporterIFC, element, geometryElement, productWrapper, \n            exportType) != null);\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/GenericMEPExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export generic MEP family instances.\r\n   /// </summary>\r\n   class GenericMEPExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports a MEP family instance.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"exportType\">The export type of the element.\r\n      /// <param name=\"ifcEnumType\">The sub-type of the element.</param></param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <returns>True if an entity was created, false otherwise.</returns>\r\n      public static bool Export(ExporterIFC exporterIFC, Element element, GeometryElement geometryElement,\r\n          IFCExportInfoPair exportType, string ifcEnumType, ProductWrapper productWrapper)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            // CQ_TODO: Clean up this code by at least factoring it out.\r\n\r\n            // If we are exporting a duct segment, we may need to split it into parts by level. Create a list of ranges.\r\n            IDictionary<ElementId, IFCRange> levelsAndRanges = null;\r\n\r\n            // We will not split duct segments if the assemblyId is set, as we would like to keep the original duct segment\r\n            // associated with the assembly, on the level of the assembly.\r\n            if ((exportType.ExportType == IFCEntityType.IfcDuctSegmentType) &&\r\n               (ExporterCacheManager.ExportOptionsCache.WallAndColumnSplitting) &&\r\n               !ExporterUtil.IsContainedInAssembly(element))\r\n            {\r\n               levelsAndRanges = LevelUtil.CreateSplitLevelRangesForElement(exportType, element);\r\n            }\r\n\r\n            int numPartsToExport = levelsAndRanges?.Count ?? 0;\r\n            {\r\n               ElementId catId = CategoryUtil.GetSafeCategoryId(element);\r\n\r\n               BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n               if (0 == numPartsToExport)\r\n               {\r\n                  using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, element, null))\r\n                  {\r\n                     IFCAnyHandle localPlacementToUse = setter.LocalPlacement;\r\n                     BodyData bodyData = null;\r\n                     using (IFCExportBodyParams extraParams = new IFCExportBodyParams())\r\n                     {\r\n                        extraParams.SetLocalPlacement(localPlacementToUse);\r\n                        IFCAnyHandle productRepresentation =\r\n                            RepresentationUtil.CreateAppropriateProductDefinitionShape(\r\n                                exporterIFC, element, catId, geometryElement, bodyExporterOptions, null, extraParams, out bodyData);\r\n                        if (IFCAnyHandleUtil.IsNullOrHasNoValue(productRepresentation))\r\n                        {\r\n                           extraParams.ClearOpenings();\r\n                           return false;\r\n                        }\r\n\r\n                        ExportAsMappedItem(exporterIFC, element, exportType, \r\n                           extraParams, setter, false, localPlacementToUse,\r\n                           productRepresentation, productWrapper);\r\n                     }\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  foreach (KeyValuePair<ElementId, IFCRange> levelAndRange in levelsAndRanges)\r\n                  {\r\n                     // Check for containment override\r\n                     IFCAnyHandle overrideContainerHnd = null;\r\n                     ParameterUtil.OverrideContainmentParameter(element, out overrideContainerHnd);\r\n\r\n                     using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, element, null, null,\r\n                        levelAndRange.Key, overrideContainerHnd))\r\n                     {\r\n                        IFCAnyHandle localPlacementToUse = setter.LocalPlacement;\r\n\r\n                        using (IFCExportBodyParams extraParams = new IFCExportBodyParams())\r\n                        {\r\n                           SolidMeshGeometryInfo solidMeshCapsule =\r\n                               GeometryUtil.GetClippedSolidMeshGeometry(geometryElement, levelAndRange.Value);\r\n\r\n                           IList<Solid> solids = solidMeshCapsule.GetSolids();\r\n                           IList<Mesh> polyMeshes = solidMeshCapsule.GetMeshes();\r\n\r\n                           IList<GeometryObject> geomObjects =\r\n                               FamilyExporterUtil.RemoveInvisibleSolidsAndMeshes(element.Document,\r\n                               exporterIFC, ref solids, ref polyMeshes);\r\n\r\n                           if (geomObjects.Count == 0 && (solids.Count > 0 || polyMeshes.Count > 0))\r\n                              return false;\r\n\r\n                           bool isColumn = exportType.ExportInstance == IFCEntityType.IfcColumn;\r\n                           bool tryToExportAsExtrusion =\r\n                              !ExporterCacheManager.ExportOptionsCache.ExportAs2x2 || isColumn;\r\n\r\n                           if (isColumn)\r\n                           {\r\n                              extraParams.PossibleExtrusionAxes = IFCExtrusionAxes.TryZ;\r\n                           }\r\n                           else\r\n                           {\r\n                              extraParams.PossibleExtrusionAxes = IFCExtrusionAxes.TryXYZ;\r\n                           }\r\n\r\n                           BodyData bodyData = null;\r\n                           if (geomObjects.Count > 0)\r\n                           {\r\n                              bodyData = BodyExporter.ExportBody(exporterIFC, element, catId,\r\n                                                                 ElementId.InvalidElementId, geomObjects,\r\n                                                                 bodyExporterOptions, extraParams);\r\n                           }\r\n                           else\r\n                           {\r\n                              List<GeometryObject> exportedGeometries = [ geometryElement ];\r\n                              bodyData = BodyExporter.ExportBody(exporterIFC, element, catId,\r\n                                                                 ElementId.InvalidElementId,\r\n                                                                 exportedGeometries, bodyExporterOptions,\r\n                                                                 extraParams);\r\n                           }\r\n\r\n                           List<IFCAnyHandle> bodyReps = [ bodyData.RepresentationHnd ];\r\n\r\n                           IFCAnyHandle productRepresentation =\r\n                               IFCInstanceExporter.CreateProductDefinitionShape(exporterIFC.GetFile(), null,\r\n                                                                                null, bodyReps);\r\n                           if (IFCAnyHandleUtil.IsNullOrHasNoValue(productRepresentation))\r\n                           {\r\n                              extraParams.ClearOpenings();\r\n                              return false;\r\n                           }\r\n\r\n                           ExportAsMappedItem(exporterIFC, element, exportType,\r\n                              extraParams, setter, true, localPlacementToUse, \r\n                              productRepresentation, productWrapper);\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n\r\n            tr.Commit();\r\n         }\r\n         return true;\r\n      }\r\n\r\n      private static void ExportAsMappedItem(ExporterIFC exporterIFC, Element element, \r\n         IFCExportInfoPair exportType, IFCExportBodyParams extraParams,\r\n         PlacementSetter setter, bool isSplitByLevel, IFCAnyHandle localPlacementToUse, \r\n         IFCAnyHandle productRepresentation, ProductWrapper productWrapper)\r\n      {\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n         ElementId typeId = element.GetTypeId();\r\n         ElementType type = element.Document.GetElement(typeId) as ElementType;\r\n         IFCAnyHandle styleHandle = null;\r\n         ElementId matId = ElementId.InvalidElementId;\r\n         Options geomOptions = GeometryUtil.GetIFCExportGeometryOptions();\r\n         bool hasMaterialAssociatedToType = false;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         if (type != null)\r\n         {\r\n            bool containedInAssembly = ExporterUtil.IsContainedInAssembly(element);\r\n            var typeKey = new TypeObjectKey(typeId, ElementId.InvalidElementId, false, exportType, ElementId.InvalidElementId, containedInAssembly);\r\n            \r\n            FamilyTypeInfo currentTypeInfo = \r\n               ExporterCacheManager.FamilySymbolToTypeInfoCache.Find(typeKey);\r\n\r\n            if (!currentTypeInfo.IsValid())\r\n            {\r\n               HashSet<IFCAnyHandle> propertySetsOpt = new HashSet<IFCAnyHandle>();\r\n               IList<IFCAnyHandle> repMapListOpt = new List<IFCAnyHandle>();\r\n\r\n               string typeGuid = FamilyExporterUtil.GetGUIDForFamilySymbol(element as FamilyInstance, type, exportType);\r\n               styleHandle = FamilyExporterUtil.ExportGenericType(file, exportType, propertySetsOpt, repMapListOpt, element, type, typeGuid);\r\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(styleHandle))\r\n               {\r\n                  productWrapper.RegisterHandleWithElementType(type, exportType, styleHandle, null);\r\n                  currentTypeInfo.Style = styleHandle;\r\n                  ExporterCacheManager.FamilySymbolToTypeInfoCache.Register(typeKey, currentTypeInfo, false);\r\n\r\n                  Element elementType = element.Document.GetElement(element.GetTypeId());\r\n                  matId = BodyExporter.GetBestMaterialIdFromGeometryOrParameter(element.get_Geometry(geomOptions), elementType, element);\r\n\r\n                  if (matId != ElementId.InvalidElementId)\r\n                  {\r\n                     currentTypeInfo.MaterialIdList = new List<ElementId>() { matId };\r\n                     hasMaterialAssociatedToType = true;\r\n                     CategoryUtil.CreateMaterialAssociation(exporterIFC, styleHandle, matId);\r\n                  }\r\n               }\r\n            }\r\n            else\r\n            {\r\n               styleHandle = currentTypeInfo.Style;\r\n               if (currentTypeInfo.MaterialIdList != null && currentTypeInfo.MaterialIdList.Count > 0)\r\n                  hasMaterialAssociatedToType = true;\r\n            }\r\n         }\r\n\r\n         string instanceGUID;\r\n         if (isSplitByLevel)\r\n         {\r\n            instanceGUID = GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(element, \"Level: \" + setter.LevelId.ToString()));\r\n         }\r\n         else\r\n         {\r\n            instanceGUID = GUIDUtil.CreateGUID(element);\r\n         }\r\n\r\n         bool roomRelated = !FamilyExporterUtil.IsDistributionFlowElementSubType(exportType);\r\n\r\n         ElementId roomId = ElementId.InvalidElementId;\r\n         if (roomRelated)\r\n         {\r\n            roomId = setter.UpdateRoomRelativeCoordinates(element, out localPlacementToUse);\r\n         }\r\n\r\n         // For MEP object creation\r\n         IFCAnyHandle instanceHandle = IFCInstanceExporter.CreateGenericIFCEntity(exportType,\r\n            exporterIFC.GetFile(), element, instanceGUID, ownerHistory, localPlacementToUse, \r\n            productRepresentation);\r\n         \r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(instanceHandle))\r\n            return;\r\n         if (matId == ElementId.InvalidElementId && !hasMaterialAssociatedToType)\r\n         {\r\n            matId = BodyExporter.GetBestMaterialIdFromGeometryOrParameter(element.get_Geometry(geomOptions), element);\r\n            if (matId != ElementId.InvalidElementId)\r\n               CategoryUtil.CreateMaterialAssociation(exporterIFC, instanceHandle, matId);\r\n         }\r\n\r\n         if (roomId != ElementId.InvalidElementId)\r\n         {\r\n            //exporterIFC.RelateSpatialElement(roomId, instanceHandle);\r\n            ExporterCacheManager.SpaceInfoCache.RelateToSpace(roomId, instanceHandle);\r\n            productWrapper.AddElement(element, instanceHandle, setter, extraParams, false, exportType);\r\n         }\r\n         else\r\n         {\r\n            productWrapper.AddElement(element, instanceHandle, setter, extraParams, true, exportType);\r\n         }\r\n\r\n         OpeningUtil.CreateOpeningsIfNecessary(instanceHandle, element, extraParams, null, exporterIFC, localPlacementToUse, setter, productWrapper);\r\n\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(styleHandle))\r\n            ExporterCacheManager.TypeRelationsCache.Add(styleHandle, instanceHandle);\r\n\r\n         ExporterCacheManager.MEPCache.Register(element, instanceHandle);\r\n\r\n         // add to system export cache\r\n         // SystemExporter.ExportSystem(exporterIFC, element, instanceHandle);\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/GridExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export Grid.\r\n   /// </summary>\r\n   class GridExporter\r\n   {\r\n      class TupleGridAndNameComparer : IEqualityComparer<Tuple<ElementId, string>>\r\n      {\r\n         public bool Equals(Tuple<ElementId, string> tup1, Tuple<ElementId, string> tup2)\r\n         {\r\n            bool sameLevelId = tup1.Item1 == tup2.Item1;\r\n            bool sameNameGroup = tup1.Item2.Equals(tup2.Item2, StringComparison.CurrentCultureIgnoreCase);\r\n            if (sameLevelId && sameNameGroup)\r\n               return true;\r\n            else\r\n               return false;\r\n         }\r\n\r\n         public int GetHashCode(Tuple<ElementId, string> tup)\r\n         {\r\n            int hashCode = tup.Item1.GetHashCode() ^ tup.Item2.GetHashCode();\r\n            return hashCode;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export the Grids.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"document\">The document object.</param>\r\n      public static void Export(ExporterIFC exporterIFC, Document document)\r\n      {\r\n         if (ExporterCacheManager.GridCache.Count == 0)\r\n            return;\r\n\r\n         // Get all the grids from cache and sorted in levels.\r\n         IDictionary<Tuple<ElementId, string>, List<Grid>> levelGrids = GetAllGrids(document);\r\n         \r\n         // Get grids in each level and export.\r\n         foreach (Tuple<ElementId,string> levelId in levelGrids.Keys)\r\n         {\r\n            IDictionary<XYZ, List<Grid>> linearGrids = new SortedDictionary<XYZ, List<Grid>>(new GeometryUtil.XYZComparer());\r\n            IDictionary<XYZ, List<Grid>> radialGrids = new SortedDictionary<XYZ, List<Grid>>(new GeometryUtil.XYZComparer());\r\n            List<Grid> exportedLinearGrids = new List<Grid>();\r\n\r\n            List<Grid> gridsOneLevel = levelGrids[levelId];\r\n            string gridName = levelId.Item2;\r\n            SortGrids(gridsOneLevel, out linearGrids, out radialGrids);\r\n\r\n            // Export radial grids first.\r\n            if (radialGrids.Count > 0)\r\n            {\r\n               ExportRadialGrids(exporterIFC, levelId.Item1, gridName, radialGrids, linearGrids);\r\n            }\r\n\r\n            // Export the rectangular and duplex rectangular grids.\r\n            if (linearGrids.Count > 1)\r\n            {\r\n               ExportRectangularGrids(exporterIFC, levelId.Item1, gridName, linearGrids);\r\n            }\r\n\r\n            // Export the triangular grids\r\n            if (linearGrids.Count > 1)\r\n            {\r\n               ExportTriangularGrids(exporterIFC, levelId.Item1, gridName, linearGrids);\r\n            }\r\n\r\n            // TODO: warn user about orphaned grid lines.\r\n            if (linearGrids.Count == 1)\r\n               continue;// not export the orphan grid (only has U).\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export all the radial Grids.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"levelId\">The level id.</param>\r\n      /// <param name=\"radialGrids\">The set of radial grids.</param>\r\n      /// <param name=\"linearGrids\">The set of linear grids.</param>\r\n      public static void ExportRadialGrids(ExporterIFC exporterIFC, ElementId levelId, \r\n         string gridName, IDictionary<XYZ, List<Grid>> radialGrids, \r\n         IDictionary<XYZ, List<Grid>> linearGrids)\r\n      {\r\n         foreach (XYZ centerPoint in radialGrids.Keys)\r\n         {\r\n            List<Grid> exportedLinearGrids = new List<Grid>();\r\n            List<Grid> radialUAxes = new List<Grid>();\r\n            List<Grid> radialVAxes = new List<Grid>();\r\n            radialUAxes = radialGrids[centerPoint];\r\n            foreach (XYZ directionVector in linearGrids.Keys)\r\n            {\r\n               foreach (Grid linearGrid in linearGrids[directionVector])\r\n               {\r\n                  Line newLine = linearGrid.Curve.Clone() as Line;\r\n                  newLine.MakeUnbound();\r\n                  if (MathUtil.IsAlmostEqual(newLine.Project(centerPoint).Distance, 0.0))\r\n                  {\r\n                     radialVAxes.Add(linearGrid);\r\n                  }\r\n               }\r\n            }\r\n\r\n            // TODO: warn user about orphaned grid lines.\r\n            if (radialVAxes.Count == 0)\r\n               continue; //not export the orphan grid (only has U).\r\n\r\n            // export a radial IFCGrid.\r\n            string hashCode = centerPoint.ToString();\r\n            ExportGrid(exporterIFC, levelId, gridName, hashCode, radialUAxes, radialVAxes, null);\r\n\r\n            // remove the linear grids that have been exported.\r\n            exportedLinearGrids = exportedLinearGrids.Union<Grid>(radialVAxes).ToList();\r\n            RemoveExportedGrids(linearGrids, exportedLinearGrids);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export all the rectangular Grids.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"levelId\">The level id.</param>\r\n      /// <param name=\"linearGrids\">The set of linear grids.</param>\r\n      public static void ExportRectangularGrids(ExporterIFC exporterIFC, ElementId levelId, string gridName, IDictionary<XYZ, List<Grid>> linearGrids)\r\n      {\r\n         XYZ uDirection = null;\r\n         XYZ vDirection = null;\r\n         List<XYZ> directionList = linearGrids.Keys.ToList();\r\n\r\n         do\r\n         {\r\n            // Special case: we don't want to orphan one set of directions.\r\n            if (directionList.Count == 3)\r\n               return;\r\n\r\n            if (!FindOrthogonalDirectionPair(directionList, out uDirection, out vDirection))\r\n               return;\r\n\r\n            List<Grid> exportedLinearGrids = new List<Grid>();\r\n            List<Grid> duplexAxesU = FindParallelGrids(linearGrids, uDirection);\r\n            List<Grid> duplexAxesV = FindParallelGrids(linearGrids, vDirection);\r\n\r\n            // export a rectangular IFCGrid.\r\n            string hashCode = uDirection.ToString() + \":\" + vDirection.ToString();\r\n            ExportGrid(exporterIFC, levelId, gridName, hashCode, duplexAxesU, duplexAxesV, null);\r\n\r\n            // remove the linear grids that have been exported.\r\n            exportedLinearGrids = exportedLinearGrids.Union<Grid>(duplexAxesU).ToList();\r\n            exportedLinearGrids = exportedLinearGrids.Union<Grid>(duplexAxesV).ToList();\r\n            if (exportedLinearGrids.Count > 0)\r\n            {\r\n               RemoveExportedGrids(linearGrids, exportedLinearGrids);\r\n            }\r\n\r\n            directionList = linearGrids.Keys.ToList();\r\n         } while (true);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export all the triangular Grids.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"levelId\">The level id.</param>\r\n      /// <param name=\"linearGrids\">The set of linear grids.</param>\r\n      public static void ExportTriangularGrids(ExporterIFC exporterIFC, ElementId levelId, string gridName, IDictionary<XYZ, List<Grid>> linearGrids)\r\n      {\r\n         List<XYZ> directionList = linearGrids.Keys.ToList();\r\n         for (int ii = 0; ii < directionList.Count; ii += 3)\r\n         {\r\n            List<Grid> sameDirectionAxesU = new List<Grid>();\r\n            List<Grid> sameDirectionAxesV = new List<Grid>();\r\n            List<Grid> sameDirectionAxesW = new List<Grid>();\r\n            sameDirectionAxesU = linearGrids[directionList[ii]];\r\n            string hashCode = directionList[ii].ToString();\r\n\r\n            if (ii + 1 < directionList.Count)\r\n            {\r\n               sameDirectionAxesV = linearGrids[directionList[ii + 1]];\r\n               hashCode += \":\" + directionList[ii + 1].ToString();\r\n            }\r\n            if (ii + 2 < directionList.Count)\r\n            {\r\n               sameDirectionAxesW = linearGrids[directionList[ii + 2]];\r\n               hashCode += \":\" + directionList[ii + 2].ToString();\r\n            }\r\n\r\n            // TODO: warn user about orphaned grid lines.\r\n            if (sameDirectionAxesV.Count == 0)\r\n               continue;//not export the orphan grid (only has U).\r\n\r\n            // export a triangular IFCGrid.\r\n            ExportGrid(exporterIFC, levelId, gridName, hashCode,\r\n               sameDirectionAxesU, sameDirectionAxesV, sameDirectionAxesW);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export one IFCGrid in one level.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"levelId\">The level ID.</param>\r\n      /// <param name=\"gridName\">The grid name.</param>\r\n      /// <param name=\"hashCode\">An extra code to generate a unique guid.</param>\r\n      /// <param name=\"sameDirectionAxesU\">The U axes of grids.</param>\r\n      /// <param name=\"sameDirectionAxesV\">The V axes of grids.</param>\r\n      /// <param name=\"sameDirectionAxesW\">The W axes of grids.</param>\r\n      public static void ExportGrid(ExporterIFC exporterIFC, ElementId levelId, string gridName, string hashCode,\r\n         List<Grid> sameDirectionAxesU, List<Grid> sameDirectionAxesV, List<Grid> sameDirectionAxesW)\r\n      {\r\n         List<IFCAnyHandle> axesU = null;\r\n         List<IFCAnyHandle> axesV = null;\r\n         List<IFCAnyHandle> axesW = null;\r\n         List<IFCAnyHandle> representations = new List<IFCAnyHandle>();\r\n\r\n         using (ProductWrapper productWrapper = ProductWrapper.Create(exporterIFC, true))\r\n         {\r\n            IFCFile file = exporterIFC.GetFile();\r\n            using (IFCTransaction transaction = new IFCTransaction(file))\r\n            {\r\n               GridRepresentationData gridRepresentationData = new GridRepresentationData();\r\n\r\n               axesU = CreateIFCGridAxisAndRepresentations(exporterIFC, productWrapper, \r\n                  sameDirectionAxesU, representations, gridRepresentationData);\r\n               axesV = CreateIFCGridAxisAndRepresentations(exporterIFC, productWrapper, \r\n                  sameDirectionAxesV, representations, gridRepresentationData);\r\n               if (sameDirectionAxesW != null)\r\n                  axesW = CreateIFCGridAxisAndRepresentations(exporterIFC, productWrapper, \r\n                     sameDirectionAxesW, representations, gridRepresentationData);\r\n\r\n               IFCRepresentationIdentifier identifier = IFCRepresentationIdentifier.FootPrint;\r\n               string identifierOpt = identifier.ToString();\r\n               IFCAnyHandle contextOfItemsFootPrint = ExporterCacheManager.Get3DContextHandle(identifier);\r\n               string representationTypeOpt = \"GeometricCurveSet\";\r\n\r\n               int numGridsToExport = gridRepresentationData.m_Grids.Count;\r\n               if (numGridsToExport == 0)\r\n                  return;\r\n\r\n               bool useIFCCADLayer = !string.IsNullOrWhiteSpace(gridRepresentationData.m_IFCCADLayer);\r\n\r\n               IFCAnyHandle shapeRepresentation = null;\r\n\r\n               HashSet<IFCAnyHandle> allCurves = new HashSet<IFCAnyHandle>();\r\n               for (int ii = 0; ii < numGridsToExport; ii++)\r\n                  allCurves.UnionWith(gridRepresentationData.m_curveSets[ii]);\r\n\r\n               if (useIFCCADLayer)\r\n               {\r\n                  shapeRepresentation = RepresentationUtil.CreateShapeRepresentation(exporterIFC, contextOfItemsFootPrint,\r\n                     identifierOpt, representationTypeOpt, allCurves, gridRepresentationData.m_IFCCADLayer);\r\n               }\r\n               else\r\n               {\r\n                  ElementId catId = CategoryUtil.GetSafeCategoryId(gridRepresentationData.m_Grids[0]);\r\n                  shapeRepresentation = RepresentationUtil.CreateShapeRepresentation(exporterIFC, gridRepresentationData.m_Grids[0], catId,\r\n                     contextOfItemsFootPrint, identifierOpt, representationTypeOpt, allCurves);\r\n               }\r\n               representations.Add(shapeRepresentation);\r\n\r\n               IFCAnyHandle productRep = IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, representations);\r\n\r\n               // We will associate the grid with its level, unless there are no levels in the file, in which case we'll associate it with the building.\r\n               IFCLevelInfo levelInfo = ExporterCacheManager.LevelInfoCache.GetLevelInfo(levelId);\r\n               IFCAnyHandle gridLevelHandle = levelInfo != null ? levelInfo.GetBuildingStorey() : ExporterCacheManager.BuildingHandle;\r\n\r\n               string gridGUID = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(IFCEntityType.IfcGrid, gridName + \":\" + hashCode, gridLevelHandle));\r\n\r\n               ExporterUtil.GetCategoryInfoById(new ElementId(BuiltInCategory.OST_Grids), null, out ExportIFCCategoryInfo catInfo);\r\n               string predefinedType = catInfo?.IFCPredefinedType;\r\n\r\n               IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n               IFCAnyHandle levelObjectPlacement = (gridLevelHandle != null) ? IFCAnyHandleUtil.GetObjectPlacement(gridLevelHandle) : null;\r\n               IFCAnyHandle copyLevelPlacement = (levelObjectPlacement != null) ? ExporterUtil.CopyLocalPlacement(file, levelObjectPlacement) : null;\r\n               IFCAnyHandle ifcGrid = IFCInstanceExporter.CreateGrid(file, gridGUID, \r\n                  ownerHistory, gridName, copyLevelPlacement, productRep, axesU, axesV, axesW, predefinedType);\r\n\r\n               productWrapper.AddElement(null, ifcGrid, levelInfo, null, true, null);\r\n\r\n               transaction.Commit();\r\n            }\r\n         }\r\n      }\r\n\r\n      public class GridRepresentationData\r\n      {\r\n         // The CAD Layer override.\r\n         public string m_IFCCADLayer = null;\r\n\r\n         // The ElementIds of the grids to export.\r\n         public List<Element> m_Grids = new List<Element>();\r\n\r\n         // The curve sets to export.\r\n         public List<HashSet<IFCAnyHandle>> m_curveSets = new List<HashSet<IFCAnyHandle>>();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the handles of Grid Axes.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"sameDirectionAxes\">The grid axes in the same direction of one level.</param>\r\n      /// <param name=\"representations\">The representation of grid axis.</param>\r\n      /// <returns>The list of handles of grid axes.</returns>\r\n      private static List<IFCAnyHandle> CreateIFCGridAxisAndRepresentations(ExporterIFC exporterIFC, ProductWrapper productWrapper, IList<Grid> sameDirectionAxes,\r\n          IList<IFCAnyHandle> representations, GridRepresentationData gridRepresentationData)\r\n      {\r\n         if (sameDirectionAxes.Count == 0)\r\n            return null;\r\n\r\n         IDictionary<ElementId, List<IFCAnyHandle>> gridAxisMap = new Dictionary<ElementId, List<IFCAnyHandle>>();\r\n         IDictionary<ElementId, List<IFCAnyHandle>> gridRepMap = new Dictionary<ElementId, List<IFCAnyHandle>>();\r\n\r\n         IFCFile ifcFile = exporterIFC.GetFile();\r\n         Line baseGridAxisAsLine = sameDirectionAxes[0].Curve as Line;\r\n\r\n         List<IFCAnyHandle> ifcGridAxes = new();\r\n         XYZ projectionDirection = XYZ.BasisZ;\r\n\r\n         Transform lcs = Transform.Identity;\r\n\r\n         foreach (Grid grid in sameDirectionAxes)\r\n         {\r\n            // Because the IfcGrid is a collection of Revit Grids, any one of them can override the IFC CAD Layer.\r\n            // We will take the first name, and not do too much checking.\r\n            if (string.IsNullOrWhiteSpace(gridRepresentationData.m_IFCCADLayer))\r\n            {\r\n               gridRepresentationData.m_IFCCADLayer = RepresentationUtil.GetPresentationLayerOverride(grid);\r\n            }\r\n\r\n            // NOTE: This code only properly deals with the case where the grid axis is a Line or an Arc.\r\n            Curve currentGridAxis = grid.Curve;\r\n            bool sameSense = true;\r\n            if (baseGridAxisAsLine != null)\r\n            {\r\n               Line axisLine = currentGridAxis as Line;\r\n               sameSense = axisLine?.Direction.IsAlmostEqualTo(baseGridAxisAsLine.Direction) ?? true;\r\n            }\r\n            else if (currentGridAxis is Arc currentGridAxisAsArc)\r\n            {\r\n               sameSense = MathUtil.IsAlmostEqual(currentGridAxisAsArc.Normal.Z, 1.0);\r\n            }\r\n\r\n            if (!sameSense)\r\n            {\r\n               currentGridAxis = currentGridAxis.CreateReversed();\r\n            }\r\n\r\n            // Get the handle of curve.\r\n            IFCAnyHandle axisCurve;\r\n            if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n            {\r\n               axisCurve = GeometryUtil.CreatePolyCurveFromCurve(exporterIFC, currentGridAxis, lcs, projectionDirection);\r\n            }\r\n            else\r\n            {\r\n               axisCurve = GeometryUtil.CreateIFCCurveFromRevitCurve(exporterIFC.GetFile(), exporterIFC, currentGridAxis,\r\n                  false, null, GeometryUtil.TrimCurvePreference.Use2DPolyLineOrTrim);\r\n            }\r\n\r\n            // TODO: File error here.\r\n            if (axisCurve == null)\r\n               continue;\r\n\r\n            IFCAnyHandle ifcGridAxis = IFCInstanceExporter.CreateGridAxis(ifcFile, grid.Name, axisCurve, sameSense);\r\n            ifcGridAxes.Add(ifcGridAxis);\r\n\r\n            HashSet<IFCAnyHandle> AxisCurves = new() { axisCurve };\r\n\r\n            IFCAnyHandle repItemHnd = IFCInstanceExporter.CreateGeometricCurveSet(ifcFile, AxisCurves);\r\n\r\n            // get the weight and color from the GridType to create the curve style.\r\n            GridType gridType = grid.Document.GetElement(grid.GetTypeId()) as GridType;\r\n\r\n            IFCData curveWidth = null;\r\n            if (ExporterCacheManager.ExportOptionsCache.ExportAnnotations)\r\n            {\r\n               int outWidth;\r\n               double width =\r\n                   (ParameterUtil.GetIntValueFromElement(gridType, BuiltInParameter.GRID_END_SEGMENT_WEIGHT, out outWidth) != null) ? outWidth : 1;\r\n               curveWidth = IFCDataUtil.CreateAsPositiveLengthMeasure(width);\r\n            }\r\n\r\n            if (!ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n            {\r\n               int outColor;\r\n               int color =\r\n                   (ParameterUtil.GetIntValueFromElement(gridType, BuiltInParameter.GRID_END_SEGMENT_COLOR, out outColor) != null) ? outColor : 0;\r\n               double blueVal = 0.0;\r\n               double greenVal = 0.0;\r\n               double redVal = 0.0;\r\n               GeometryUtil.GetRGBFromIntValue(color, out blueVal, out greenVal, out redVal);\r\n               IFCAnyHandle colorHnd = IFCInstanceExporter.CreateColourRgb(ifcFile, null, redVal, greenVal, blueVal);\r\n\r\n               BodyExporter.CreateCurveStyleForRepItem(exporterIFC, repItemHnd, curveWidth, colorHnd);\r\n            }\r\n\r\n            HashSet<IFCAnyHandle> curveSet = new HashSet<IFCAnyHandle>();\r\n            curveSet.Add(repItemHnd);\r\n\r\n            gridRepresentationData.m_Grids.Add(grid);\r\n            gridRepresentationData.m_curveSets.Add(curveSet);\r\n         }\r\n\r\n         return ifcGridAxes;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get all the grids and add to the map with its level.\r\n      /// </summary>\r\n      /// <param name=\"document\">The current document.</param>\r\n      /// <returns>The map with sorted grids by level.</returns>\r\n      private static IDictionary<Tuple<ElementId, string>, List<Grid>> GetAllGrids(Document document)\r\n      {\r\n         View currentView = ExporterCacheManager.ExportOptionsCache.FilterViewForExport;\r\n         Level currentLevel = currentView?.GenLevel;\r\n         \r\n         SortedDictionary<double,ElementId> levelIds = new SortedDictionary<double,ElementId>();\r\n         \r\n         if (currentLevel != null)\r\n         {\r\n            levelIds.Add(currentLevel.ProjectElevation, currentLevel.Id);\r\n         }\r\n         else\r\n         {\r\n            foreach (ElementId levelId in ExporterCacheManager.LevelInfoCache.GetBuildingStoriesByElevation())\r\n            {\r\n               Level level = document.GetElement(levelId) as Level;\r\n               double? projectElevation = level?.ProjectElevation;\r\n               if (projectElevation.HasValue && !levelIds.ContainsKey(projectElevation.Value))\r\n               {\r\n                  levelIds.Add(projectElevation.Value, levelId);\r\n               }\r\n            }\r\n         }\r\n\r\n         double eps = MathUtil.Eps();\r\n         // The Dictionary key is a tuple of the containing level id, and the elevation of the Grid\r\n         IDictionary<Tuple<ElementId,string>, List<Grid>> levelGrids = new Dictionary<Tuple<ElementId, string>, List<Grid>>(new TupleGridAndNameComparer());\r\n\r\n         // Group grids based on their elevation (the same elevation will be the same IfcGrid)\r\n         foreach (Element element in ExporterCacheManager.GridCache)\r\n         {\r\n            Grid grid = element as Grid;\r\n            XYZ minPoint = grid.GetExtents().MinimumPoint;\r\n            XYZ maxPoint = grid.GetExtents().MaximumPoint;\r\n\r\n            // Find level where the Grid min point is at higher elevation but lower than the next level\r\n            KeyValuePair<double, ElementId> levelGrid = new KeyValuePair<double, ElementId>(0.0, ElementId.InvalidElementId);\r\n            if (levelIds.Count != 0)\r\n            {\r\n               foreach (KeyValuePair<double, ElementId> levelInfo in levelIds)\r\n               {\r\n                  //if (levelInfo.Key + eps >= minPoint.Z)\r\n                  //   break;\r\n                  if (minPoint.Z <= levelInfo.Key + eps && levelInfo.Key - eps <= maxPoint.Z)\r\n                  {\r\n                     levelGrid = levelInfo;\r\n\r\n                     string gridName = NamingUtil.GetNameOverride(element, \"Default Grid\");\r\n                     Tuple<ElementId, string> gridGroupKey = new Tuple<ElementId, string>(levelGrid.Value, gridName);\r\n                     if (!levelGrids.ContainsKey(gridGroupKey))\r\n                        levelGrids.Add(gridGroupKey, new List<Grid>());\r\n                     levelGrids[gridGroupKey].Add(grid);\r\n                  }\r\n               }\r\n            } \r\n         }\r\n         return levelGrids;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sort the grids in linear and radial shape.\r\n      /// </summary>\r\n      /// <param name=\"gridsOneLevel\">The grids in one level.</param>\r\n      /// <param name=\"linearGrids\">The linear grids in one level.</param>\r\n      /// <param name=\"radialGrids\">The radial grids in one level.</param>\r\n      private static void SortGrids(List<Grid> gridsOneLevel, out IDictionary<XYZ, List<Grid>> linearGrids, out IDictionary<XYZ, List<Grid>> radialGrids)\r\n      {\r\n         linearGrids = new SortedDictionary<XYZ, List<Grid>>(new GeometryUtil.XYZComparer());\r\n         radialGrids = new SortedDictionary<XYZ, List<Grid>>(new GeometryUtil.XYZComparer());\r\n\r\n         foreach (Grid grid in gridsOneLevel)\r\n         {\r\n            Curve gridAxis = grid.Curve;\r\n            if (gridAxis is Line)\r\n            {\r\n               Line line = gridAxis as Line;\r\n               XYZ directionVector = line.Direction;\r\n               if (!linearGrids.ContainsKey(directionVector))\r\n               {\r\n                  linearGrids.Add(directionVector, new List<Grid>());\r\n               }\r\n\r\n               linearGrids[directionVector].Add(grid);\r\n            }\r\n            else if (gridAxis is Arc)\r\n            {\r\n               Arc arc = gridAxis as Arc;\r\n               XYZ arcCenter = arc.Center;\r\n               if (!radialGrids.ContainsKey(arcCenter))\r\n               {\r\n                  radialGrids.Add(arcCenter, new List<Grid>());\r\n               }\r\n\r\n               radialGrids[arcCenter].Add(grid);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Remove the exported grids from set of linear grids.\r\n      /// </summary>\r\n      /// <param name=\"linearGrids\">The set of linear grids.</param>\r\n      /// <param name=\"exportedLinearGrids\">The exported grids.</param>\r\n      private static void RemoveExportedGrids(IDictionary<XYZ, List<Grid>> linearGrids, List<Grid> exportedLinearGrids)\r\n      {\r\n         foreach (Grid exportedGrid in exportedLinearGrids)\r\n         {\r\n            Line line = exportedGrid.Curve as Line;\r\n            XYZ direction = line.Direction;\r\n            if (linearGrids.ContainsKey(direction))\r\n            {\r\n               linearGrids[direction].Remove(exportedGrid);\r\n               if (linearGrids[direction].Count == 0)\r\n               {\r\n                  linearGrids.Remove(direction);\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Find the orthogonal directions for rectangular IFCGrid.\r\n      /// </summary>\r\n      /// <param name=\"directionList\">The directions.</param>\r\n      /// <param name=\"uDirection\">The U direction.</param>\r\n      /// <param name=\"vDirection\">The V direction.</param>\r\n      /// <returns>True if find a pair of orthogonal directions for grids; false otherwise.</returns>\r\n      private static bool FindOrthogonalDirectionPair(List<XYZ> directionList, out XYZ uDirection, out XYZ vDirection)\r\n      {\r\n         uDirection = null;\r\n         vDirection = null;\r\n\r\n         foreach (XYZ uDir in directionList)\r\n         {\r\n            foreach (XYZ vDir in directionList)\r\n            {\r\n               double dotProduct = uDir.DotProduct(vDir);\r\n               if (MathUtil.IsAlmostEqual(Math.Abs(dotProduct), 0.0))\r\n               {\r\n                  uDirection = uDir;\r\n                  vDirection = vDir;\r\n                  return true;\r\n               }\r\n            }\r\n         }\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Find the list of parallel linear grids via the given direction.\r\n      /// </summary>\r\n      /// <param name=\"linearGrids\">The set of linear grids.</param>\r\n      /// <param name=\"baseDirection\">The given direction.</param>\r\n      /// <returns>The list of parallel grids, containing the anti direction grids.</returns>\r\n      private static List<Grid> FindParallelGrids(IDictionary<XYZ, List<Grid>> linearGrids, XYZ baseDirection)\r\n      {\r\n         List<XYZ> directionList = linearGrids.Keys.ToList();\r\n         List<Grid> parallelGrids = linearGrids[baseDirection];\r\n         foreach (XYZ direction in directionList)\r\n         {\r\n            if (baseDirection.IsAlmostEqualTo(direction))\r\n               continue;\r\n            double dotProduct = direction.DotProduct(baseDirection);\r\n            if (MathUtil.IsAlmostEqual(dotProduct, -1.0))\r\n            {\r\n               parallelGrids = parallelGrids.Union(linearGrids[direction]).ToList();\r\n               return parallelGrids;\r\n            }\r\n         }\r\n         return parallelGrids;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/GroupExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Mechanical;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export a Group element as IfcGroup.\r\n   /// </summary>\r\n   class GroupExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports a Group as an IfcGroup.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <returns>True if exported successfully, false otherwise.</returns>\r\n      public static bool ExportGroupElement(ExporterIFC exporterIFC, Group element,\r\n          ProductWrapper productWrapper)\r\n      {\r\n         if (element == null)\r\n            return false;\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         Common.Enums.IFCEntityType elementClassTypeEnum = Common.Enums.IFCEntityType.IfcGroup;\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n            return false;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            IFCAnyHandle groupHnd = null;\r\n\r\n            string guid = GUIDUtil.CreateGUID(element);\r\n            IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n            string name = NamingUtil.GetNameOverride(element, NamingUtil.GetIFCName(element));\r\n            string description = NamingUtil.GetDescriptionOverride(element, null);\r\n            string objectType = NamingUtil.GetDefaultObjectType(element);\r\n            string longName = NamingUtil.GetLongNameOverride(element, null);\r\n\r\n            string ifcEnumType;\r\n            IFCExportInfoPair exportAs = ExporterUtil.GetObjectExportType(element, out ifcEnumType);\r\n            IFCEntityType ifcEntityType = exportAs.ExportInstance;\r\n            \r\n            // Try special cases first.  The assumption is that the Create functions return null if the\r\n            // schema is invalid.\r\n            switch (ifcEntityType)\r\n            {\r\n               case IFCEntityType.IfcBuiltSystem:\r\n                  groupHnd = IFCInstanceExporter.CreateBuiltSystem(file, exportAs, guid, ownerHistory, name, description, objectType, longName);\r\n                  break;\r\n               case IFCEntityType.IfcBuildingSystem:\r\n                  groupHnd = IFCInstanceExporter.CreateBuildingSystem(file, exportAs, guid, ownerHistory, name, description, objectType, longName);\r\n                  break;\r\n               case IFCEntityType.IfcDistributionSystem:\r\n                  groupHnd = IFCInstanceExporter.CreateDistributionSystem(file, guid, ownerHistory, name, description, objectType, longName, exportAs.PredefinedType);\r\n                  break;\r\n               case IFCEntityType.IfcFurniture:\r\n                  groupHnd = IFCInstanceExporter.CreateGenericIFCEntity(exportAs, file, element, guid, ownerHistory, null, null);\r\n                  break;\r\n               case IFCEntityType.IfcSystem:\r\n                  groupHnd = IFCInstanceExporter.CreateSystem(file, guid, ownerHistory, name, description, objectType);\r\n                  break;\r\n            }\r\n\r\n            if (groupHnd == null || exportAs.ExportInstance == IFCEntityType.IfcGroup)\r\n            {\r\n               groupHnd = IFCInstanceExporter.CreateGroup(file, guid, ownerHistory, name, description, objectType);\r\n            }\r\n\r\n            if (groupHnd == null)\r\n            {\r\n               return false;\r\n            }\r\n\r\n            GroupInfo groupInfo = ExporterCacheManager.GroupCache.RegisterGroup(element.Id, groupHnd);\r\n\r\n            if (IFCAnyHandleUtil.IsSubTypeOf(groupHnd, IFCEntityType.IfcProduct))\r\n            {\r\n               using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, element, null))\r\n               {\r\n                  IFCAnyHandle localPlacementToUse;\r\n                  ElementId roomId = setter.UpdateRoomRelativeCoordinates(element, out localPlacementToUse);\r\n\r\n                  bool containedInSpace = (roomId != ElementId.InvalidElementId);\r\n                  productWrapper.AddElement(element, groupHnd, setter.LevelInfo, null, !containedInSpace, exportAs);\r\n\r\n                  if (containedInSpace)\r\n                     ExporterCacheManager.SpaceInfoCache.RelateToSpace(roomId, groupHnd);\r\n               }\r\n            }\r\n            else\r\n            {\r\n               productWrapper.AddElement(element, groupHnd, exportAs);\r\n            }\r\n\r\n            // Check or set the cached Group's export type\r\n            if (groupInfo.GroupType.ExportInstance == IFCEntityType.UnKnown)\r\n            {\r\n               ExporterCacheManager.GroupCache.RegisterOrUpdateGroupType(element.Id, exportAs);\r\n            }\r\n            else if (groupInfo.GroupType.ExportInstance != exportAs.ExportInstance)\r\n            {\r\n               throw new InvalidOperationException(\"Inconsistent Group export entity type\");\r\n            }\r\n\r\n            tr.Commit();\r\n            return true;\r\n         }\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/GroupInfo.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to import and export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   public class GroupInfo\r\n   {\r\n      /// <summary>\r\n      /// The Group handle.\r\n      /// </summary>\r\n      public IFCAnyHandle GroupHandle { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The associated element handles.\r\n      /// </summary>\r\n      public HashSet<IFCAnyHandle> ElementHandles { get; set; } = new HashSet<IFCAnyHandle>();\r\n\r\n      /// <summary>\r\n      /// Group's export type.\r\n      /// </summary>\r\n      public IFCExportInfoPair GroupType { get; set; } = new IFCExportInfoPair(IFCEntityType.UnKnown);\r\n\r\n      /// <summary>\r\n      /// Flag that indicate that the group should be exported.\r\n      /// </summary>\r\n      public bool ExportFlag { get; set; } = false;\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/HandleAndData.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// A simple class to store both handle and ExtrusionCreationData.\r\n   /// </summary>\r\n   public class HandleAndData\r\n   {\r\n      /// <summary>\r\n      /// The handle of the created representation.\r\n      /// </summary>\r\n      public IFCAnyHandle Handle { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The type of shape representation created.\r\n      /// </summary>\r\n      public ShapeRepresentationType ShapeRepresentationType { get; set; } = ShapeRepresentationType.Undefined;\r\n\r\n      /// <summary>\r\n      /// The extra parameters for the extrusion.\r\n      /// </summary>\r\n      public IFCExportBodyParams Data { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The material ids for the extrusion.\r\n      /// </summary>\r\n      public IList<ElementId> MaterialIds { get; set; } = new List<ElementId>();\r\n\r\n      /// <summary>\r\n      /// The handles that represent the base representation items inside the final shape representation, without any openings or clippings.\r\n      /// In general, these are extrusions, but could be triangulated face sets for the Reference View.\r\n      /// </summary>\r\n      public IList<IFCAnyHandle> BaseRepresentationItems { get; set; } = new List<IFCAnyHandle>();\r\n\r\n      /// <summary>\r\n      /// A handle for the Footprint representation\r\n      /// </summary>\r\n      public FootPrintInfo FootprintInfo { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// A Dictionary for Material Profile\r\n      /// </summary>\r\n      public MaterialAndProfile MaterialAndProfile { get; set; } = null;\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/HostObjectExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export host objects.\r\n   /// </summary>\r\n   class HostObjectExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports materials for host object.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"hostObject\">The host object.</param>\r\n      /// <param name=\"elemHnds\">The host IFC handles.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <param name=\"levelId\">The level id.</param>\r\n      /// <param name=\"direction\">The IFCLayerSetDirection.</param>\r\n      /// <param name=\"containsBRepGeometry\">True if the geometry contains BRep geoemtry.  If so, we will export an IfcMaterialList</param>\r\n      /// <param name=\"layersetInfo\">Material layer info.</param>\r\n      /// <returns>True if exported successfully, false otherwise.</returns>\r\n      public static bool ExportHostObjectMaterials(ExporterIFC exporterIFC, HostObject hostObject,\r\n          IList<IFCAnyHandle> elemHnds, GeometryElement geometryElement, ProductWrapper productWrapper,\r\n          ElementId levelId, IFCLayerSetDirection direction, bool containsBRepGeometry, IFCAnyHandle typeHnd = null, MaterialLayerSetInfo layersetInfo = null)\r\n      {\r\n         if (hostObject == null || ((elemHnds?.Count ?? 0) == 0))\r\n            return true; //nothing to do\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            double scaledOffset = 0.0, scaledWallWidth = 0.0, wallHeight = 0.0;\r\n            Wall wall = hostObject as Wall;\r\n\r\n            if (wall != null)\r\n            {\r\n               scaledWallWidth = UnitUtil.ScaleLength(wall.Width);\r\n               scaledOffset = -scaledWallWidth / 2.0;\r\n               BoundingBoxXYZ boundingBox = wall.get_BoundingBox(null);\r\n               if (boundingBox != null)\r\n                  wallHeight = boundingBox.Max.Z - boundingBox.Min.Z;\r\n            }\r\n\r\n            MaterialLayerSetInfo mlsInfo = layersetInfo == null ? new MaterialLayerSetInfo(exporterIFC, hostObject, productWrapper, geometryElement) : layersetInfo;\r\n            IFCAnyHandle materialLayerSet = mlsInfo.MaterialLayerSetHandle;\r\n            List<ElementId> materialIds = mlsInfo.MaterialIds.Select(x => x.BaseMatId).ToList();\r\n\r\n            // Among all the calls of this method the problem of material association absence was found only \r\n            // for CeilingAndFloor host object type (see JIRA item REVIT-164913)\r\n            if (containsBRepGeometry && (hostObject is CeilingAndFloor)\r\n               && materialIds.Count > 0\r\n               && !ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView\r\n               && !ExporterCacheManager.ExportOptionsCache.ExportAs4x3ReferenceView)\r\n            {\r\n               foreach (IFCAnyHandle elemHnd in elemHnds)\r\n               {\r\n                  CategoryUtil.CreateMaterialAssociation(exporterIFC, hostObject, elemHnd, materialIds);\r\n               }\r\n            }\r\n\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(materialLayerSet))\r\n            {\r\n               // If there is an override for creating IfcMaterial instead of IfcMaterialLayer for a single material/layer, assign the material directly to type or element(s)\r\n               if (IFCAnyHandleUtil.IsTypeOf(materialLayerSet, IFCEntityType.IfcMaterial))\r\n               {\r\n                  if (typeHnd != null)\r\n                  {\r\n                     CategoryUtil.CreateMaterialAssociation(typeHnd, materialLayerSet);\r\n                  }\r\n\r\n                  foreach (IFCAnyHandle elemHnd in elemHnds)\r\n                  {\r\n                     CategoryUtil.CreateMaterialAssociation(elemHnd, materialLayerSet);\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  // IfcMaterialLayerSetUsage is not supported for IfcWall, only IfcWallStandardCase.\r\n                  IFCAnyHandle layerSetUsage = null;\r\n                  for (int ii = 0; ii < elemHnds.Count; ii++)\r\n                  {\r\n                     IFCAnyHandle elemHnd = elemHnds[ii];\r\n                     if (IFCAnyHandleUtil.IsNullOrHasNoValue(elemHnd))\r\n                        continue;\r\n\r\n                     SpaceBoundingElementUtil.RegisterSpaceBoundingElementHandle(exporterIFC, elemHnd, hostObject.Id, levelId);\r\n\r\n                     // Even if it is Tessellated geometry in IFC4RV, the material layer will still be assigned\r\n                     if (containsBRepGeometry \r\n                        && !ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView \r\n                        && !ExporterCacheManager.ExportOptionsCache.ExportAs4x3ReferenceView)\r\n                        continue;\r\n\r\n                     HashSet<IFCAnyHandle> relDecomposesSet = IFCAnyHandleUtil.GetRelDecomposes(elemHnd);\r\n\r\n                     IList<IFCAnyHandle> subElemHnds = null;\r\n                     if (relDecomposesSet != null && relDecomposesSet.Count == 1)\r\n                     {\r\n                        IFCAnyHandle relAggregates = relDecomposesSet.First();\r\n                        if (IFCAnyHandleUtil.IsTypeOf(relAggregates, IFCEntityType.IfcRelAggregates))\r\n                           subElemHnds = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(relAggregates, \"RelatedObjects\");\r\n                     }\r\n\r\n                     bool hasSubElems = (subElemHnds != null && subElemHnds.Count != 0);\r\n                     bool isRoof = IFCAnyHandleUtil.IsTypeOf(elemHnd, IFCEntityType.IfcRoof);\r\n                     bool isDisallowedWallType = (IFCAnyHandleUtil.IsTypeOf(elemHnd, IFCEntityType.IfcWall) && !ExporterCacheManager.ExportOptionsCache.ExportAs4);\r\n\r\n                     // Create IfcMaterialLayerSetUsage unless we have sub-elements, are exporting a Roof, or are exporting a pre-IFC4 IfcWall.\r\n                     if (!hasSubElems && !isRoof && !isDisallowedWallType)\r\n                     {\r\n                        bool materialAlreadyAssoc = false;\r\n                        if (typeHnd != null)\r\n                        {\r\n                           CategoryUtil.CreateMaterialAssociation(typeHnd, materialLayerSet);\r\n                        }\r\n\r\n                        if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n                        {\r\n                           if (!materialAlreadyAssoc)\r\n                           {\r\n                              CategoryUtil.CreateMaterialAssociation(elemHnd, materialLayerSet);\r\n                           }\r\n                        }\r\n                        else\r\n                        {\r\n                           if (layerSetUsage == null)\r\n                           {\r\n                              bool flipDirSense = true;\r\n                              if (wall != null)\r\n                              {\r\n                                 // if we have flipped the center curve on export, we need to take that into account here.\r\n                                 // We flip the center curve on export if it is an arc and it has a negative Z direction.\r\n                                 LocationCurve locCurve = wall.Location as LocationCurve;\r\n                                 if (locCurve != null)\r\n                                 {\r\n                                    Curve curve = locCurve.Curve;\r\n                                    Transform lcs = Transform.Identity;\r\n                                    bool curveFlipped = GeometryUtil.MustFlipCurve(lcs, curve);\r\n                                    flipDirSense = !(wall.Flipped ^ curveFlipped);\r\n                                 }\r\n                              }\r\n                              else if (hostObject is Floor)\r\n                              {\r\n                                 flipDirSense = false;\r\n                              }\r\n                              else if (hostObject is Ceiling)\r\n                              {\r\n                                 // flip the direction sense for the ceiling and add material layer set base offset to preserve\r\n                                 // the original Revit material layers order (compound structure) and comply with\r\n                                 // the IfcMaterialLayerSetUsage concept.\r\n                                 scaledOffset = -mlsInfo.TotalThickness;\r\n                              }\r\n\r\n                              double offsetFromReferenceLine = flipDirSense ? -scaledOffset : scaledOffset;\r\n                              IFCDirectionSense sense = flipDirSense ? IFCDirectionSense.Negative : IFCDirectionSense.Positive;\r\n\r\n                              layerSetUsage = IFCInstanceExporter.CreateMaterialLayerSetUsage(file, materialLayerSet,\r\n                                 direction, sense, offsetFromReferenceLine);\r\n                           }\r\n                           ExporterCacheManager.MaterialSetUsageCache.Add(layerSetUsage, elemHnd);\r\n                        }\r\n                     }\r\n                     else\r\n                     {\r\n                        if (hasSubElems)\r\n                        {\r\n                           foreach (IFCAnyHandle subElemHnd in subElemHnds)\r\n                           {\r\n                              // TODO: still need to figure out the best way to create type for the sub elements because at this time a lot of information is not available, e.g.\r\n                              //    the Revit Element to get the type, other information for name, GUID, etc.\r\n                              if (!IFCAnyHandleUtil.IsNullOrHasNoValue(subElemHnd))\r\n                              {\r\n                                 CategoryUtil.CreateMaterialAssociation(subElemHnd, materialLayerSet);\r\n                              }\r\n                           }\r\n                        }\r\n                        else if (!isRoof)\r\n                        {\r\n                           if (typeHnd != null)\r\n                           {\r\n                              CategoryUtil.CreateMaterialAssociation(typeHnd, materialLayerSet);\r\n                           }\r\n                           else\r\n                           {\r\n                              CategoryUtil.CreateMaterialAssociation(elemHnd, materialLayerSet);\r\n                           }\r\n                        }\r\n                        else if (mlsInfo.PrimaryMaterialHandle != null)\r\n                        {\r\n                           if (typeHnd != null)\r\n                           {\r\n                              CategoryUtil.CreateMaterialAssociation(typeHnd, materialLayerSet);\r\n                           }\r\n                           else\r\n                           {\r\n                              CategoryUtil.CreateMaterialAssociation(elemHnd, materialLayerSet);\r\n                           }\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n            tr.Commit();\r\n            return true;\r\n         }\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Exports materials for host object.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"hostObject\">The host object.</param>\r\n      /// <param name=\"elemHnd\">The host IFC handle.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <param name=\"levelId\">The level id.</param>\r\n      /// <param name=\"direction\">The IFCLayerSetDirection.</param>\r\n      /// <param name=\"containsBRepGeometry\">True if the geometry contains BRep geoemtry.  If so, we will export an IfcMaterialList.  If null, we will calculate.</param>\r\n      /// <param name=\"layersetInfo\">Material layer info.</param>\r\n      /// <returns>True if exported successfully, false otherwise.</returns>\r\n      public static bool ExportHostObjectMaterials(ExporterIFC exporterIFC, HostObject hostObject,\r\n          IFCAnyHandle elemHnd, GeometryElement geometryElement, ProductWrapper productWrapper,\r\n          ElementId levelId, IFCLayerSetDirection direction, bool? containsBRepGeometry, IFCAnyHandle typeHnd, MaterialLayerSetInfo layersetInfo = null)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(elemHnd))\r\n            return false;\r\n\r\n         IList<IFCAnyHandle> elemHnds = new List<IFCAnyHandle>() { elemHnd };\r\n\r\n         // Setting doesContainBRepGeometry to false below preserves the original behavior that we created IfcMaterialLists for all geometries.\r\n         // TODO: calculate, or pass in, a valid bool value for Ceilings, Roofs, and Wall Sweeps.\r\n         bool doesContainBRepGeometry = containsBRepGeometry.HasValue ? containsBRepGeometry.Value : false;\r\n         return ExportHostObjectMaterials(exporterIFC, hostObject, elemHnds, geometryElement, productWrapper, levelId, \r\n            direction, doesContainBRepGeometry, typeHnd, layersetInfo);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the material Id of the first layer of the host object.\r\n      /// </summary>\r\n      /// <param name=\"hostObject\">The host object.</param>\r\n      /// <returns>The material id.</returns>\r\n      public static ElementId GetFirstLayerMaterialId(HostObject hostObject)\r\n      {\r\n         if (hostObject == null)\r\n            return ElementId.InvalidElementId;\r\n\r\n         ElementId typeElemId = hostObject.GetTypeId();\r\n         HostObjAttributes hostObjAttr = hostObject.Document.GetElement(typeElemId) as HostObjAttributes;\r\n         if (hostObjAttr == null)\r\n            return ElementId.InvalidElementId;\r\n\r\n         CompoundStructure cs = hostObjAttr.GetCompoundStructure();\r\n         if (cs != null)\r\n         {\r\n            ElementId matId = cs.LayerCount > 0 ? cs.GetMaterialId(0) : ElementId.InvalidElementId;\r\n            if (matId != ElementId.InvalidElementId)\r\n               return matId;\r\n            else\r\n               return CategoryUtil.GetBaseMaterialIdForElement(hostObject); ;\r\n         }\r\n\r\n         return ElementId.InvalidElementId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the material ids of finish function of the host object.\r\n      /// </summary>\r\n      /// <param name=\"hostObject\">The host object.</param>\r\n      /// <returns>The material ids.</returns>\r\n      public static ISet<ElementId> GetFinishMaterialIds(HostObject hostObject)\r\n      {\r\n         HashSet<ElementId> matIds = new HashSet<ElementId>();\r\n\r\n         ElementId typeElemId = hostObject.GetTypeId();\r\n         HostObjAttributes hostObjAttr = hostObject.Document.GetElement(typeElemId) as HostObjAttributes;\r\n         if (hostObjAttr == null)\r\n            return matIds;\r\n\r\n         ElementId baseMatId = CategoryUtil.GetBaseMaterialIdForElement(hostObject);\r\n         CompoundStructure cs = hostObjAttr.GetCompoundStructure();\r\n         if (cs != null)\r\n         {\r\n            for (int ii = 0; ii < cs.LayerCount; ++ii)\r\n            {\r\n               MaterialFunctionAssignment function = cs.GetLayerFunction(ii);\r\n               if (function == MaterialFunctionAssignment.Finish1 || function == MaterialFunctionAssignment.Finish2)\r\n               {\r\n                  ElementId matId = cs.GetMaterialId(ii);\r\n                  if (matId != ElementId.InvalidElementId)\r\n                  {\r\n                     matIds.Add(matId);\r\n                  }\r\n                  else if (baseMatId != ElementId.InvalidElementId)\r\n                  {\r\n                     matIds.Add(baseMatId);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         return matIds;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/HostedSweepExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export hosted sweeps.\r\n   /// </summary>\r\n   class HostedSweepExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports a hosted sweep.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"hostedSweep\">The hosted sweep element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void Export(ExporterIFC exporterIFC, HostedSweep hostedSweep, GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         GenericElementExporter.ExportElement(exporterIFC, hostedSweep, geometryElement, productWrapper);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/IFCEntityAndPsetList.cs",
    "content": "﻿using System.IO;\nusing System.Collections.Generic;\nusing Newtonsoft.Json;\n\nnamespace Revit.IFC.Export.Utility\n{\n   /// <summary>\n   /// Valid Entity and Pset list according to MVD definitions\n   /// </summary>\n   public class IFCEntityAndPsetList\n   {\n      /// <summary>\n      /// The MVD version\n      /// </summary>\n      public string Version { get; set; }\n\n      /// <summary>\n      /// Pset list for MVD\n      /// </summary>\n      public HashSet<string> PropertySetList { get; set; } = new HashSet<string>();\n\n      /// <summary>\n      /// Entity list for MVD\n      /// </summary>\n      public HashSet<string> EntityList { get; set; } = new HashSet<string>();\n\n      /// <summary>\n      /// Check whether a Pset name is found in the list\n      /// </summary>\n      /// <param name=\"psetName\">Pset name</param>\n      /// <returns>true/false</returns>\n      public bool PsetIsInTheList(string psetName)\n      {\n         // return true if there is no entry\n         if (PropertySetList.Count == 0)\n            return true;\n\n         if (PropertySetList.Contains(psetName))\n            return true;\n         else\n            return false;\n      }\n\n      /// <summary>\n      /// Check whether an Entity name is found in the list\n      /// </summary>\n      /// <param name=\"entityName\">the entity name</param>\n      /// <returns>true/false</returns>\n      public bool EntityIsInTheList(string entityName)\n      {\n         // return true if there is no entry\n         if (EntityList.Count == 0)\n            return true;\n\n         if (EntityList.Contains(entityName))\n            return true;\n         else\n            return false;\n      }\n   }\n\n   /// <summary>\n   /// List of valid Entities and Psets in an MVD\n   /// </summary>\n   public class IFCCertifiedEntitiesAndPSets\n   {\n      /// <summary>\n      /// Valid Entity and Pset list according to MVD definitions\n      /// </summary>\n      class IFCEntityAndPsetListRawFromJson\n      {\n         /// <summary>\n         /// The MVD version\n         /// </summary>\n         public string Version { get; set; }\n\n         /// <summary>\n         /// Pset list for MVD\n         /// </summary>\n         public List<string> PropertySetList { get; set; } = new();\n\n         /// <summary>\n         /// Entity list for MVD\n         /// </summary>\n         public IList<string> EntityList { get; set; } = new List<string>();\n      }\n\n      Dictionary<string, IFCEntityAndPsetList> CertifiedEntityAndPsetDict { get; set; } = new();\n      \n      /// <summary>\n      /// IFCCertifiedEntitiesAndPSets Constructor\n      /// </summary>\n      public IFCCertifiedEntitiesAndPSets()\n      {\n         string fileLoc = Path.GetDirectoryName(System.Reflection.Assembly.GetCallingAssembly().Location);\n         string filePath = Path.Combine(fileLoc, \"IFCCertifiedEntitiesAndPSets.json\");\n\n         if (File.Exists(filePath))\n         {\n            IDictionary<string, IFCEntityAndPsetListRawFromJson> CertifiedEntityAndPsetList = JsonConvert.DeserializeObject<IDictionary<string, IFCEntityAndPsetListRawFromJson>>(File.ReadAllText(filePath));\n            // Copy the data to the desired format using Hashset in IFCEntityAndPsetList\n            foreach (KeyValuePair<string, IFCEntityAndPsetListRawFromJson> entPsetData in CertifiedEntityAndPsetList)\n            {\n               IFCEntityAndPsetList entPset = new IFCEntityAndPsetList();\n               entPset.Version = entPsetData.Value.Version;\n               entPset.PropertySetList = new HashSet<string>(entPsetData.Value.PropertySetList);\n               entPset.EntityList = new HashSet<string>(entPsetData.Value.EntityList);\n               CertifiedEntityAndPsetDict.Add(entPsetData.Key, entPset);\n            }\n         }\n      }\n\n      /// <summary>\n      /// Check whether the pset name is valid for the current MVD\n      /// </summary>\n      /// <param name=\"psetName\">the propertyset name</param>\n      /// <returns>true/false</returns>\n      public bool AllowPsetToBeCreatedInCurrentMVD (string psetName)\n      {\n         string mvdName = ExporterCacheManager.ExportOptionsCache.FileVersion.ToString();\n         return AllowPsetToBeCreated(mvdName, psetName);\n      }\n\n      /// <summary>\n      /// Check whether the pset name is valid\n      /// </summary>\n      /// <param name=\"mvdName\">the MVD name</param>\n      /// <param name=\"psetName\">the propertyset name</param>\n      /// <returns>true/false</returns>\n      public bool AllowPsetToBeCreated(string mvdName, string psetName)\n      {\n         // OK to create if the list is empty (not defined)\n         if (CertifiedEntityAndPsetDict.Count == 0)\n            return true;\n         IFCEntityAndPsetList theList;\n         if (!CertifiedEntityAndPsetDict.TryGetValue(mvdName, out theList))\n            return true;\n\n         return theList.PsetIsInTheList(psetName);\n      }\n\n      /// <summary>\n      /// Check whether the predefined property name is valid\n      /// </summary>\n      /// <param name=\"mvdName\">the MVD name</param>\n      /// <param name=\"psetName\">the predefined property name</param>\n      /// <returns>true/false</returns>\n      public bool AllowPredefPsetToBeCreated(string mvdName, string psetName)\n      {\n         // OK to create if the list is empty (not defined)\n         if (CertifiedEntityAndPsetDict.Count == 0)\n            return true;\n         IFCEntityAndPsetList theList;\n         if (!CertifiedEntityAndPsetDict.TryGetValue(mvdName, out theList))\n            return true;\n\n         return theList.EntityIsInTheList(psetName);\n      }\n\n      /// <summary>\n      /// Check whether an entity name is valid in the current MVD\n      /// </summary>\n      /// <param name=\"entityName\">the entity name</param>\n      /// <returns>true/false</returns>\n      public bool IsValidEntityInCurrentMVD (string entityName)\n      {\n         string mvdName = ExporterCacheManager.ExportOptionsCache.FileVersion.ToString();\n         return IsValidEntityInMVD(mvdName, entityName);\n      }\n\n      /// <summary>\n      /// Check whether an entity name is valid\n      /// </summary>\n      /// <param name=\"mvdName\">the MVD name</param>\n      /// <param name=\"entityName\">the entity name</param>\n      /// <returns>true/false</returns>\n      public bool IsValidEntityInMVD(string mvdName, string entityName)\n      {\n         // OK to create if the list is empty (not defined)\n         if (CertifiedEntityAndPsetDict.Count == 0)\n            return true;\n         IFCEntityAndPsetList theList;\n         if (!CertifiedEntityAndPsetDict.TryGetValue(mvdName, out theList))\n            return true;\n\n         return theList.EntityIsInTheList(entityName);\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/IFCExportBodyParams.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\n\nnamespace Revit.IFC.Export.Exporter\n{\n   /// <summary>\n   /// This class is used to pass information related to extrusion creation.\n   /// </summary>\n   public class IFCExportBodyParams : IDisposable\n   {\n      /// <summary>\n      /// The extra parameters for the extrusion.\n      /// </summary>\n      public IFCExtrusionCreationData Data { get; set; } = new IFCExtrusionCreationData();\n\n      /// <summary>\n      /// The preferred direction to calculate width\n      /// </summary>\n      public XYZ PreferredWidthDirection { get; set; } = null;\n\n      /// <summary>\n      /// True if inner regions of the extrusion should become openings, false otherwise.\n      /// </summary>\n      public bool AreInnerRegionsOpenings\n      {\n         get { return Data.AreInnerRegionsOpenings; }\n         set { Data.AreInnerRegionsOpenings = value; }\n      }\n\n      /// <summary>\n      /// The extrusion direction to generate an extrusion.\n      /// </summary>\n      public XYZ ExtrusionDirection\n      {\n         get { return Data.ExtrusionDirection; }\n         set { Data.ExtrusionDirection = value; }\n      }\n\n      /// <summary>\n      /// The custom extrusion axis to try when generating an extrusion.\n      /// </summary>\n      public XYZ CustomAxis\n      {\n         get { return Data.CustomAxis; }\n         set { Data.CustomAxis = value; }\n      }\n\n      /// <summary>\n      /// Identifies if the data contains a extrusion direction.\n      /// </summary>\n      public bool HasExtrusionDirection\n      {\n         get { return Data.HasExtrusionDirection; }\n      }\n\n      /// <summary>\n      /// Identifies if the data contains a custom extrusion axis.\n      /// </summary>\n      public bool HasCustomAxis\n      {\n         get { return Data.HasCustomAxis; }\n      }\n\n      /// <summary>\n      /// The axes to try when generating the properties of the extrusion.\n      /// </summary>\n      public IFCExtrusionAxes PossibleExtrusionAxes\n      {\n         get { return Data.PossibleExtrusionAxes; }\n         set { Data.PossibleExtrusionAxes = value; }\n      }\n\n      /// <summary>\n      /// Allows re-use of local placement when creating a new local placement due to shifting \n      /// of breps when moving towards the origin.\n      /// </summary>\n      public bool ReuseLocalPlacement\n      {\n         get { return Data.ReuseLocalPlacement; }\n         set { Data.ReuseLocalPlacement = value; }\n      }\n\n      /// <summary>\n      /// Allows vertical shifting of breps when moving towards the origin.\n      /// </summary>\n      public bool AllowVerticalOffsetOfBReps\n      {\n         get { return Data.AllowVerticalOffsetOfBReps; }\n         set { Data.AllowVerticalOffsetOfBReps = value; }\n      }\n\n      /// <summary>\n      /// The outer perimeter of the extrusion, scaled to the units of export.\n      /// This value represents the perimeter of the outermost curve loop bounding the \n      /// area of the extrusion. Zero if the perimeter has never been set on this object.\n      /// </summary>\n      public double ScaledOuterPerimeter\n      {\n         get { return Data.ScaledOuterPerimeter; }\n         set { Data.ScaledOuterPerimeter = value; }\n      }\n\n      /// <summary>\n      /// The inner perimeter of the extrusion, scaled to the units of export.\n      /// This value represents the perimeter of all of the inner curve loops within the\n      /// area of the extrusion. Zero if the perimeter has never been set on this object.\n      /// </summary>\n      public double ScaledInnerPerimeter\n      {\n         get { return Data.ScaledInnerPerimeter; }\n         set { Data.ScaledInnerPerimeter = value; }\n      }\n\n      /// <summary>\n      /// The width of the extrusion, scaled to the units of export.\n      /// Zero if the width has never been set on this object.\n      /// </summary>\n      public double ScaledWidth\n      {\n         get { return Data.ScaledWidth; }\n         set { Data.ScaledWidth = value; }\n      }\n\n      /// <summary>\n      /// The slope of the extrusion, in degrees.\n      /// Zero if the slope has never been set on this object.\n      /// </summary>\n      public double Slope\n      {\n         get { return Data.Slope; }\n         set { Data.Slope = value; }\n      }\n\n      /// <summary>\n      /// The length of the extrusion, scaled to the units of export.\n      /// Zero if the length has never been set on this object.\n      /// </summary>\n      public double ScaledLength\n      {\n         get { return Data.ScaledLength; }\n         set { Data.ScaledLength = value; }\n      }\n\n      /// <summary>\n      /// The height of the extrusion, scaled to the units of export.\n      /// Zero if the height has never been set on this object.\n      /// </summary>\n      public double ScaledHeight\n      {\n         get { return Data.ScaledHeight; }\n         set { Data.ScaledHeight = value; }\n      }\n\n      /// <summary>\n      /// The area of the extrusion, scaled to the units of export.\n      /// The value will be 0.0 if the area has never been set on this object.\n      /// </summary>\n      public double ScaledArea\n      {\n         get { return Data.ScaledArea; }\n         set { Data.ScaledArea = value; }\n      }\n\n      /// <summary>\n      /// True to create new local placement with identity transform.\n      /// </summary>\n      public bool ForceOffset\n      {\n         get { return Data.ForceOffset; }\n         set { Data.ForceOffset = value; }\n      }\n\n      /// <summary>\n      /// The CAD Layer override.\n      /// </summary>\n      public string IFCCADLayerOverride { get; set; } = null;\n\n      /// <summary>\n      /// Constructs a default IFCExportBodyParams object.\n      /// </summary>\n      public IFCExportBodyParams() { }\n\n      /// <summary>\n      /// Constructs a IFCExportBodyParams object.\n      /// </summary>\n      /// <param name=\"extrusionCreationData\">The extrusion creation data.</param>\n      public IFCExportBodyParams(IFCExtrusionCreationData extrusionCreationData)\n      {\n         Data = extrusionCreationData ?? new IFCExtrusionCreationData();\n      }\n\n      /// <summary>\n      /// The Dispose function\n      /// </summary>\n      public void Dispose()\n      {\n         Data.Dispose();\n      }\n\n\n      /// <summary>\n      /// Sets the data to reference an IfcLocalPlacement handle when creating the extrusion.\n      /// Side effect: will set ReuseLocalPlacement to true.\n      /// </summary>\n      public void SetLocalPlacement(IFCAnyHandle localPlacement)\n      {\n         Data.SetLocalPlacement(localPlacement);\n      }\n\n      /// <summary>\n      /// Gets the reference to the IfcLocalPlacement handle used when creating the extrusion.\n      /// </summary>\n      public IFCAnyHandle GetLocalPlacement()\n      {\n         return Data.GetLocalPlacement();\n      }\n\n      /// <summary>\n      /// Gets a collection of all of the openings stored in this data.\n      /// </summary>\n      public IList<IFCExtrusionData> GetOpenings()\n      {\n         return Data.GetOpenings();\n      }\n\n      /// <summary>\n      /// Adds an opening to the data.\n      /// </summary>\n      public void AddOpening(IFCExtrusionData data)\n      {\n         Data.AddOpening(data);\n      }\n\n      /// <summary>\n      /// Removes all cached openings from the data.\n      /// </summary>\n      public void ClearOpenings()\n      {\n         Data.ClearOpenings();\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/InsulationExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2013-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export a Revit insulation element.\r\n   /// </summary>\r\n   class InsulationExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports an element as a covering of type insulation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <returns>True if exported successfully, false otherwise.</returns>\r\n      protected static bool ExportInsulation(ExporterIFC exporterIFC, Element element,\r\n          GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         return GenericElementExporter.ExportElement(exporterIFC, element, geometryElement, productWrapper);\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PartExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export Part element.\r\n   /// </summary>\r\n   class PartExporter\r\n   {\r\n      /// <summary>\r\n      /// An enumeration to define what to export from the Parts\r\n      /// </summary>\r\n      public enum PartExportMode\r\n      {\r\n         Standard,\r\n         AsBuildingElement,\r\n         ShapeRepresentationOnly\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export all the parts of the host element.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"hostElement\">The host element having parts to export.</param>\r\n      /// <param name=\"hostHandle\">The host element handle.</param>\r\n      /// <param name=\"setMaterialNameToPartName\">If set to true then generated parts will have names same as their material names.</param>\r\n      public static void ExportHostPart(ExporterIFC exporterIFC, Element hostElement, IFCAnyHandle hostHandle,\r\n          PlacementSetter placementSetter, IFCAnyHandle originalPlacement, ElementId overrideLevelId, bool setMaterialNameToPartName = false)\r\n      {\r\n         using (ProductWrapper subWrapper = ProductWrapper.Create(exporterIFC, true))\r\n         {\r\n            IFCExtrusionAxes ifcExtrusionAxes = GetDefaultExtrusionAxesForHost(hostElement);\r\n            bool isWallOrColumn = IsHostWallOrColumn(hostElement);            \r\n\r\n            if (ExporterCacheManager.TemporaryPartsCache.Find(hostElement.Id, out List<GeometryElement> partGeometries))\r\n            {\r\n               List<PartOrGeometry> partsOrGeometries = [];\r\n               foreach (var partGeometry in partGeometries)\r\n               {\r\n                  partsOrGeometries.Add(new PartOrGeometry(partGeometry));\r\n               }\r\n\r\n               SplitAndExportParts(exporterIFC, partsOrGeometries, isGeometry:true, hostElement, subWrapper, placementSetter, originalPlacement,\r\n                  isWallOrColumn, overrideLevelId, ifcExtrusionAxes, setMaterialNameToPartName);\r\n            }\r\n            else\r\n            {\r\n               List<ElementId> associatedPartsList = PartUtils.GetAssociatedParts(hostElement.Document, hostElement.Id, false, true).ToList();\r\n               if (associatedPartsList.Count == 0)\r\n                  return;\r\n\r\n               List<PartOrGeometry> partsOrGeometries = [];\r\n               foreach (var partId in associatedPartsList)\r\n               {\r\n                  Part associatedPart = hostElement.Document.GetElement(partId) as Part;\r\n                  partsOrGeometries.Add(new PartOrGeometry(associatedPart));\r\n               }\r\n\r\n               SplitAndExportParts(exporterIFC, partsOrGeometries, isGeometry: false, hostElement, subWrapper, placementSetter, originalPlacement,\r\n                  isWallOrColumn, overrideLevelId, ifcExtrusionAxes, setMaterialNameToPartName);\r\n            }\r\n\r\n            // Create the relationship of Host and Parts.\r\n            HashSet<IFCAnyHandle> relatedElementIds = new HashSet<IFCAnyHandle>(subWrapper.GetAllObjects());\r\n            if (relatedElementIds.Count > 0)\r\n            {\r\n               string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAggregates, hostHandle));               \r\n               IFCInstanceExporter.CreateRelAggregates(exporterIFC.GetFile(), guid, ExporterCacheManager.OwnerHistoryHandle, null, null, hostHandle, relatedElementIds);\r\n            }\r\n         }\r\n      }\r\n\r\n      private static void SplitAndExportParts(ExporterIFC exporterIFC, List<PartOrGeometry> partsOrGeometries, bool isGeometry,  Element hostElement, ProductWrapper subWrapper, PlacementSetter placementSetter,\r\n         IFCAnyHandle originalPlacement, bool isWallOrColumn, ElementId overrideLevelId, IFCExtrusionAxes ifcExtrusionAxes, bool setMaterialNameToPartName)\r\n      {\r\n         bool hasOverrideLevel = overrideLevelId != null && overrideLevelId != ElementId.InvalidElementId;\r\n         // Split parts if wall or column is split by level, and then export; otherwise, export parts normally.\r\n         if (isWallOrColumn && hasOverrideLevel && ExporterCacheManager.ExportOptionsCache.WallAndColumnSplitting)\r\n         {\r\n            if (!ExporterCacheManager.HostPartsCache.HasRegistered(hostElement.Id))\r\n            {\r\n               SplitParts(hostElement, partsOrGeometries);\r\n            }\r\n\r\n            // Find and export the parts that are split by specific level.\r\n            List<KeyValuePair<PartOrGeometry, IFCRange>> splitPartRangeList = [];\r\n            splitPartRangeList = ExporterCacheManager.HostPartsCache.Find(hostElement.Id, overrideLevelId);\r\n\r\n            if (splitPartRangeList != null)\r\n            {\r\n               int index = 1;\r\n               foreach (KeyValuePair<PartOrGeometry, IFCRange> partRange in splitPartRangeList)\r\n               {\r\n                  if (isGeometry)\r\n                  {\r\n                     ExportDummyPart(exporterIFC, partRange.Key.GeometryElement, index++, subWrapper, placementSetter, originalPlacement,\r\n                        partRange.Value, ifcExtrusionAxes, hostElement, overrideLevelId, PartExportMode.Standard, setMaterialNameToPartName);\r\n                  }\r\n                  else\r\n                  {\r\n                     ExportPart(exporterIFC, partRange.Key.Part, subWrapper, placementSetter, originalPlacement,\r\n                        partRange.Value, ifcExtrusionAxes, hostElement, overrideLevelId, PartExportMode.Standard, setMaterialNameToPartName);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         else\r\n         {\r\n            int index = 1;\r\n            foreach (PartOrGeometry partOrGeometry in partsOrGeometries)\r\n            {\r\n               if (isGeometry)\r\n               {\r\n                  ExportDummyPart(exporterIFC, partOrGeometry.GeometryElement, index++, subWrapper, placementSetter, originalPlacement,\r\n                     null, ifcExtrusionAxes, hostElement, overrideLevelId, PartExportMode.Standard, setMaterialNameToPartName);\r\n               }\r\n               else\r\n               {\r\n                  ExportPart(exporterIFC, partOrGeometry.Part, subWrapper, placementSetter, originalPlacement, null, ifcExtrusionAxes,\r\n                     hostElement, overrideLevelId, PartExportMode.Standard, setMaterialNameToPartName);\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      public static bool IsAnyHostElementLocal(Part partElement)\r\n      {\r\n         if (partElement == null)\r\n            return false;\r\n\r\n         Document doc = partElement.Document;\r\n         foreach (LinkElementId linkElementId in partElement.GetSourceElementIds())\r\n         {\r\n            if (linkElementId.HostElementId == ElementId.InvalidElementId)\r\n               continue;\r\n\r\n            Element parentPartAsElement = doc.GetElement(linkElementId.HostElementId);\r\n            if (parentPartAsElement == null)\r\n               continue;\r\n\r\n            Part parentPartAsPart = parentPartAsElement as Part;\r\n            if (parentPartAsPart == null)\r\n               return true;\r\n\r\n            if (IsAnyHostElementLocal(parentPartAsPart))\r\n               return true;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export the standalone parts:\r\n      ///     - The parts made from originals in Links \r\n      ///     - The Orphan parts: the linked file where the original host element comes from is unloaded.\r\n      ///     - The Zombie parts: the original host element is deleted from the linked file.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// This is a temporary workaround to export the parts made from linked elements. It should be refined when linked are supported (LinkedInstance at least.)\r\n      /// There are some limitations:\r\n      /// The linked element will not export as host, including the relative elements: e.g. windows, doors, openings.\r\n      /// The host part cannot export if visibility is set by linked view and has 'Show Original'.\r\n      /// The standalone part will skip export if Base Level is set 'Non Associated'.\r\n      /// The linked part export cannot be split even if its category is wall or column and 'Split wall or column by story' is checked.\r\n      /// </remarks>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"partElement\">The standalone part to export.</param>\r\n      /// <param name=\"geometryElement\">The goemetry of the part.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper object.</param>\r\n      public static void ExportStandalonePart(ExporterIFC exporterIFC, Element partElement, GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         Part part = partElement as Part;\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportParts || part == null || geometryElement == null)\r\n            return;\r\n\r\n         if (IsAnyHostElementLocal(part))\r\n         {\r\n            // Has host element, so should export with host element.\r\n            return;\r\n         }\r\n\r\n         IFCExtrusionAxes ifcExtrusionAxes = GetDefaultExtrusionAxesForPart(part);\r\n         ExportPart(exporterIFC, partElement, productWrapper, null, null, null, ifcExtrusionAxes, null,\r\n            null, PartExportMode.Standard, setMaterialNameToPartName: false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export the parts as independent building elements. \r\n      /// </summary>\r\n      /// <remarks>\r\n      /// The function works with AlternateIFCUI and it requires two conditions:\r\n      /// 1. Allows export parts: 'current view only' is checked and 'show parts' is selected.\r\n      /// 2. Allows export parts independent: 'Export parts as building elements' is checked in alternate UI dialog.\r\n      /// </remarks>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"partElement\">The standalone part to export.</param>\r\n      /// <param name=\"geometryElement\">The goemetry of the part.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper object.</param>\r\n      public static void ExportPartAsBuildingElement(ExporterIFC exporterIFC, Element partElement, GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         Part part = partElement as Part;\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportParts || part == null || geometryElement == null)\r\n            return;\r\n\r\n         bool isWall = part.OriginalCategoryId == new ElementId(BuiltInCategory.OST_Walls);\r\n         bool isColumn = part.OriginalCategoryId == new ElementId(BuiltInCategory.OST_Columns);\r\n         bool isWallOrColumn = isWall || isColumn;\r\n         IFCExtrusionAxes ifcExtrusionAxes = GetDefaultExtrusionAxesForPart(part);\r\n\r\n         // Find the host element of the part.\r\n         Element hostElement = FindRootParent(part);\r\n\r\n         // Split parts with original category is wall or column and the option wall or column is split by level is checked, and then export; \r\n         // otherwise, export separate parts normally.\r\n         if (isWallOrColumn && ExporterCacheManager.ExportOptionsCache.WallAndColumnSplitting)\r\n         {\r\n            IList<ElementId> levels = new List<ElementId>();\r\n            IList<IFCRange> ranges = new List<IFCRange>();\r\n            IFCEntityType exportType = isWall ? IFCEntityType.IfcWall : IFCEntityType.IfcColumn;\r\n            IFCExportInfoPair exportInfo = new IFCExportInfoPair(exportType);\r\n            LevelUtil.CreateSplitLevelRangesForElement(exportInfo, part, out levels, out ranges);\r\n            if (ranges.Count == 0)\r\n            {\r\n               ExportPart(exporterIFC, partElement, productWrapper, null, null, null, ifcExtrusionAxes, hostElement,\r\n                  null, PartExportMode.AsBuildingElement, setMaterialNameToPartName: false);\r\n            }\r\n            else\r\n            {\r\n               for (int ii = 0; ii < ranges.Count; ii++)\r\n               {\r\n                  ExportPart(exporterIFC, partElement, productWrapper, null, null, ranges[ii], ifcExtrusionAxes,\r\n                     hostElement, levels[ii], PartExportMode.AsBuildingElement, setMaterialNameToPartName: false);\r\n               }\r\n            }\r\n         }\r\n         else\r\n         {\r\n            ExportPart(exporterIFC, partElement, productWrapper, null, null, null, ifcExtrusionAxes, hostElement,\r\n               null, PartExportMode.AsBuildingElement, setMaterialNameToPartName: false);\r\n         }\r\n      }\r\n\r\n      private static IFCAnyHandle ExportPartCommon(ExporterIFC exporterIFC, Element partElement,\r\n         GeometryElement dummyPartGeometry, int dummyPartGeometryIndex, ProductWrapper productWrapper,\r\n         PlacementSetter placementSetter, IFCAnyHandle originalPlacement, IFCRange range,\r\n         IFCExtrusionAxes ifcExtrusionAxes, Element hostElement, ElementId overrideLevelId, PartExportMode exportMode,\r\n         bool setMaterialNameToPartName)\r\n      {\r\n         IFCAnyHandle shapeRepresentation = null;\r\n         bool isDummyPart = partElement == null;\r\n         \r\n         Part part = null;\r\n         ElementId partId = null;\r\n\r\n         if (!isDummyPart)\r\n         {\r\n            if (!ElementFilteringUtil.IsElementVisible(partElement))\r\n               return null;\r\n\r\n            part = partElement as Part;\r\n            if (part == null)\r\n               return null;\r\n\r\n            partId = part.Id;\r\n         }\r\n         else if (dummyPartGeometry == null)\r\n         {\r\n            return null;\r\n         }\r\n\r\n         // We don't know how to export a part as a building element if we don't know it's host.\r\n         if ((exportMode == PartExportMode.AsBuildingElement) && (hostElement == null))\r\n            return null;\r\n\r\n         IFCExportInfoPair exportType = null;\r\n\r\n         switch (exportMode)\r\n         {\r\n            case PartExportMode.Standard:\r\n               {\r\n                  // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n                  IFCEntityType elementClassTypeEnum = IFCEntityType.IfcBuildingElementPart;\r\n                  if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n                     return null;\r\n                  break;\r\n               }\r\n            case PartExportMode.AsBuildingElement:\r\n            case PartExportMode.ShapeRepresentationOnly:\r\n               {\r\n                  exportType = ExporterUtil.GetProductExportType(hostElement, out _);\r\n\r\n                  // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n                  IFCEntityType elementClassTypeEnum;\r\n                  if (Enum.TryParse(exportType.ExportInstance.ToString(), out elementClassTypeEnum)\r\n                     || Enum.TryParse(exportType.ExportType.ToString(), out elementClassTypeEnum))\r\n                     if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n                        return null;\r\n                  break;\r\n               }\r\n         }\r\n\r\n         PlacementSetter partPlacementSetter = null;\r\n\r\n         // If standaloneExport is true and part is null, we expect hostElement and dummyPartGeometry to be non-null.\r\n         bool standaloneExport = (hostElement == null) || (exportMode == PartExportMode.AsBuildingElement);\r\n         Element elementToUse = part ?? hostElement;\r\n         if (elementToUse == null)\r\n         {\r\n            return null;\r\n         }\r\n         Document document = elementToUse.Document;\r\n\r\n         ElementId partExportLevelId = overrideLevelId ?? LevelUtil.GetBaseLevelIdForElement(elementToUse);\r\n\r\n         GeometryElement geometryElement = dummyPartGeometry;\r\n         if (!isDummyPart)\r\n         {\r\n            if (ExporterCacheManager.PartExportedCache.HasExported(partId, partExportLevelId) &&\r\n               (exportMode != PartExportMode.ShapeRepresentationOnly))\r\n               return null;\r\n\r\n            Options options = GeometryUtil.GetIFCExportGeometryOptions();\r\n            View ownerView = document.GetElement(part.OwnerViewId) as View;\r\n            if (ownerView != null)\r\n               options.View = ownerView;\r\n\r\n            geometryElement = part.get_Geometry(options);\r\n         }\r\n\r\n         if (geometryElement == null)\r\n            return null;\r\n         \r\n         try\r\n         {\r\n            IFCFile file = exporterIFC.GetFile();\r\n            using (IFCTransaction transaction = new IFCTransaction(file))\r\n            {\r\n               IFCAnyHandle partPlacement = null;\r\n               Transform hostTrf = Transform.Identity;\r\n               if (standaloneExport)\r\n               {\r\n                  Transform orientationTrf = Transform.Identity;\r\n                  BoundingBoxXYZ partBbox = part?.get_BoundingBox(null) ?? dummyPartGeometry.GetBoundingBox();\r\n\r\n                  if (partBbox != null)\r\n                  {\r\n                     orientationTrf.Origin = new XYZ(0, 0, partBbox.Min.Z);\r\n                  }\r\n\r\n                  IFCAnyHandle overrideContainerHnd = null;\r\n                  ElementId overrideContainerId = ParameterUtil.OverrideContainmentParameter(part, out overrideContainerHnd);\r\n                  \r\n                  partPlacementSetter = PlacementSetter.Create(exporterIFC, elementToUse, null, orientationTrf, overrideContainerId, overrideContainerHnd);\r\n                  partPlacement = partPlacementSetter.LocalPlacement;\r\n               }\r\n               else\r\n               {\r\n                  // This part needs explanation:\r\n                  // The geometry of the Part is against the Project base, while the host element already contains all the IFC transforms relative to its container\r\n                  // To \"correct\" the placement so that the Part is correctly relative to the host, we need to inverse transform the Part to the host's placement \r\n                  IFCAnyHandle hostHandle = ExporterCacheManager.ElementToHandleCache.Find(hostElement.Id);\r\n                  if (!IFCAnyHandleUtil.IsNullOrHasNoValue(hostHandle))\r\n                  {\r\n                     originalPlacement ??= IFCAnyHandleUtil.GetObjectPlacement(hostHandle);\r\n                     hostTrf = ExporterUtil.GetTransformFromLocalPlacementHnd(originalPlacement, true);\r\n\r\n                     geometryElement = SolidMeshGeometryInfo.GetTransformedGeometry(geometryElement, hostTrf.Inverse,\r\n                        ExporterCacheManager.AllocatedGeometryObjectCache);\r\n                  }\r\n                  \r\n                  // The host placement setter has registered the transform. Since the part geometry is transformed relative to the host, \r\n                  //   the placement for the part needs to be inversed\r\n                  if (hostElement is FamilyInstance)\r\n                  {\r\n                     partPlacementSetter = PlacementSetter.Create(exporterIFC, hostTrf.Inverse);\r\n                  }\r\n                  partPlacement = ExporterUtil.CreateLocalPlacement(file, originalPlacement, null);\r\n               }\r\n\r\n               bool validRange = range != null && !MathUtil.IsAlmostZero(range.Start - range.End);\r\n\r\n               SolidMeshGeometryInfo solidMeshInfo;\r\n               if (validRange)\r\n               {\r\n                  solidMeshInfo = GeometryUtil.GetSplitClippedSolidMeshGeometry(geometryElement, range);\r\n                  if (solidMeshInfo.GetSolids().Count == 0 && solidMeshInfo.GetMeshes().Count == 0)\r\n                     return null;\r\n               }\r\n               else\r\n               {\r\n                  solidMeshInfo = GeometryUtil.GetSplitSolidMeshGeometry(geometryElement);\r\n               }\r\n\r\n               using (IFCExportBodyParams extrusionCreationData = new IFCExportBodyParams())\r\n               {\r\n                  extrusionCreationData.SetLocalPlacement(partPlacement);\r\n                  extrusionCreationData.ReuseLocalPlacement = false;\r\n                  extrusionCreationData.PossibleExtrusionAxes = ifcExtrusionAxes;\r\n\r\n                  IList<Solid> solids = solidMeshInfo.GetSolids();\r\n                  IList<Mesh> meshes = solidMeshInfo.GetMeshes();\r\n                  IList<GeometryObject> gObjs = FamilyExporterUtil.RemoveInvisibleSolidsAndMeshes(document, \r\n                     exporterIFC, ref solids, ref meshes);\r\n\r\n                  ElementId hostCatId = CategoryUtil.GetSafeCategoryId(hostElement);\r\n                  ElementId catId = isDummyPart ? hostCatId : CategoryUtil.GetSafeCategoryId(part);\r\n\r\n                  BodyData bodyData = null;\r\n                  BodyExporterOptions bodyExporterOptions = new(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n                  bodyExporterOptions.ExtrusionLocalCoordinateSystem = Transform.Identity;\r\n                  if (solids.Count > 0 || meshes.Count > 0)\r\n                  {\r\n                     bodyData = BodyExporter.ExportBody(exporterIFC, elementToUse, catId, ElementId.InvalidElementId, solids, meshes,\r\n                         bodyExporterOptions, extrusionCreationData);\r\n                  }\r\n                  else\r\n                  {\r\n                     IList<GeometryObject> geomlist = new List<GeometryObject>() { geometryElement };\r\n                     bodyData = BodyExporter.ExportBody(exporterIFC, elementToUse, catId, ElementId.InvalidElementId, geomlist,\r\n                         bodyExporterOptions, extrusionCreationData);\r\n                  }\r\n\r\n                  if (exportMode != PartExportMode.ShapeRepresentationOnly)\r\n                  {\r\n                     IFCAnyHandle bodyRep = bodyData.RepresentationHnd;\r\n                     if (IFCAnyHandleUtil.IsNullOrHasNoValue(bodyRep))\r\n                     {\r\n                        extrusionCreationData.ClearOpenings();\r\n                        return null;\r\n                     }\r\n\r\n                     List<IFCAnyHandle> representations = [bodyRep];\r\n\r\n                     IFCAnyHandle boundingBoxRep = BoundingBoxExporter.ExportBoundingBox(exporterIFC, geometryElement, Transform.Identity);\r\n                     representations.AddIfNotNull(boundingBoxRep);\r\n\r\n                     IFCAnyHandle prodRep = IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, representations);\r\n\r\n                     IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n                     // Try to get the export type from the part's built-in parameters, and if that fails, from the host element.\r\n                     if (hostElement == null)\r\n                     {\r\n                        exportType = ExporterUtil.GetProductExportType(part, out _);\r\n                     }\r\n                     else\r\n                     {\r\n                        IFCExportInfoPair exportTypeFromParam = ExporterUtil.GetExportTypeFromParameters(elementToUse, IFCEntityType.IfcProduct);\r\n                        if (exportTypeFromParam.IsUnKnown)\r\n                        {\r\n                           exportType ??= ExporterUtil.GetProductExportType(hostElement, out _);\r\n                        }\r\n                        else\r\n                        {\r\n                           exportType = exportTypeFromParam;\r\n                        }\r\n                     }\r\n\r\n                     string ifcEnumType = exportType.GetPredefinedTypeOrDefault();\r\n                     string partGUID = null;\r\n                     if (isDummyPart)\r\n                     {\r\n                        partGUID = GUIDUtil.GenerateIFCGuidFrom(GUIDUtil.CreateGUIDString(hostElement, \"TemporaryPart:\" + dummyPartGeometryIndex));\r\n                     }\r\n                     else\r\n                     {\r\n                        partGUID = GUIDUtil.GenerateIFCGuidFrom(part, exportType);\r\n                     }\r\n\r\n                     IFCAnyHandle ifcPart = null;\r\n                     if (exportMode != PartExportMode.AsBuildingElement)\r\n                     {\r\n                        ifcPart = IFCInstanceExporter.CreateBuildingElementPart(exporterIFC, elementToUse, partGUID, ownerHistory,\r\n                            extrusionCreationData.GetLocalPlacement(), prodRep);\r\n                     }\r\n                     else\r\n                     {\r\n                        switch (exportType.ExportInstance)\r\n                        {\r\n                           case IFCEntityType.IfcColumn:\r\n                              ifcPart = IFCInstanceExporter.CreateColumn(exporterIFC, elementToUse, partGUID, ownerHistory,\r\n                                  extrusionCreationData.GetLocalPlacement(), prodRep, ifcEnumType);\r\n                              break;\r\n                           case IFCEntityType.IfcCovering:\r\n                              ifcPart = IFCInstanceExporter.CreateCovering(exporterIFC, elementToUse, partGUID, ownerHistory,\r\n                                  extrusionCreationData.GetLocalPlacement(), prodRep, ifcEnumType);\r\n                              break;\r\n                           case IFCEntityType.IfcFooting:\r\n                              ifcPart = IFCInstanceExporter.CreateFooting(exporterIFC, elementToUse, partGUID, ownerHistory,\r\n                                  extrusionCreationData.GetLocalPlacement(), prodRep, ifcEnumType);\r\n                              break;\r\n                           case IFCEntityType.IfcPile:\r\n                              ifcPart = IFCInstanceExporter.CreatePile(exporterIFC, elementToUse, partGUID, ownerHistory,\r\n                                  extrusionCreationData.GetLocalPlacement(), prodRep, ifcEnumType, null);\r\n                              break;\r\n                           case IFCEntityType.IfcRoof:\r\n                              ifcPart = IFCInstanceExporter.CreateRoof(exporterIFC, elementToUse, partGUID, ownerHistory,\r\n                                  extrusionCreationData.GetLocalPlacement(), prodRep, ifcEnumType);\r\n                              break;\r\n                           case IFCEntityType.IfcSlab:\r\n                              {\r\n                                 // TODO: fix this elsewhere.\r\n                                 if (ExporterUtil.IsNotDefined(ifcEnumType))\r\n                                 {\r\n                                    if (hostCatId == new ElementId(BuiltInCategory.OST_Floors))\r\n                                       ifcEnumType = \"FLOOR\";\r\n                                    else if (hostCatId == new ElementId(BuiltInCategory.OST_Roofs))\r\n                                       ifcEnumType = \"ROOF\";\r\n                                 }\r\n\r\n                                 ifcPart = IFCInstanceExporter.CreateSlab(exporterIFC, elementToUse, partGUID, ownerHistory,\r\n                                     extrusionCreationData.GetLocalPlacement(), prodRep, ifcEnumType);\r\n                              }\r\n                              break;\r\n                           case IFCEntityType.IfcWall:\r\n                              ifcPart = IFCInstanceExporter.CreateWall(exporterIFC, elementToUse, partGUID, ownerHistory,\r\n                              extrusionCreationData.GetLocalPlacement(), prodRep, ifcEnumType);\r\n                              break;\r\n                           default:\r\n                              ifcPart = IFCInstanceExporter.CreateBuildingElementProxy(exporterIFC, elementToUse, partGUID, ownerHistory,\r\n                              extrusionCreationData.GetLocalPlacement(), prodRep, ifcEnumType);\r\n                              break;\r\n                        }\r\n                     }\r\n\r\n                     if (setMaterialNameToPartName && (bodyData?.MaterialIds?.Count ?? 0) > 0)\r\n                     {\r\n                        Material material = document.GetElement(bodyData.MaterialIds[0]) as Material;\r\n                        if (material != null)\r\n                        {\r\n                           IFCAnyHandleUtil.OverrideNameAttribute(ifcPart, NamingUtil.GetMaterialLayerName(material));\r\n                        }\r\n                     }\r\n\r\n                     bool containedInLevel = standaloneExport;\r\n                     PlacementSetter whichPlacementSetter = containedInLevel ? partPlacementSetter : placementSetter;\r\n                     if (!isDummyPart)\r\n                     {\r\n                        productWrapper.AddElement(part, ifcPart, whichPlacementSetter, extrusionCreationData, containedInLevel, exportType);\r\n\r\n                        OpeningUtil.CreateOpeningsIfNecessary(ifcPart, part, extrusionCreationData, bodyData.OffsetTransform, exporterIFC,\r\n                            extrusionCreationData.GetLocalPlacement(), whichPlacementSetter, productWrapper);\r\n\r\n                        //Add the exported part to exported cache.\r\n                        TraceExportedParts(part, partExportLevelId, standaloneExport ? ElementId.InvalidElementId : hostElement.Id);\r\n\r\n                        CategoryUtil.CreateMaterialAssociation(exporterIFC, part, ifcPart, bodyData.MaterialIds);\r\n                     }\r\n                     else\r\n                     {\r\n                        productWrapper.AddPart(ifcPart, whichPlacementSetter, extrusionCreationData, containedInLevel);\r\n                        if (ExporterCacheManager.TemporaryPartsCache.FindInfo(geometryElement, out TemporaryPartInfo partInfo))\r\n                        {\r\n                           OpeningUtil.CreateOpeningsIfNecessary(ifcPart, elementToUse, partInfo, extrusionCreationData, bodyData.OffsetTransform, exporterIFC,\r\n                            extrusionCreationData.GetLocalPlacement(), whichPlacementSetter, productWrapper);\r\n                           \r\n                           CategoryUtil.CreateMaterialAssociation(exporterIFC, ifcPart, bodyData.MaterialIds, partInfo.MaterialToVolumeMap);\r\n\r\n                           foreach (IFCAnyHandle propertySet in partInfo.InternalPropertySets)\r\n                           {\r\n                              HashSet<IFCAnyHandle> relatedObjects = new HashSet<IFCAnyHandle>() { ifcPart };\r\n                              ExporterUtil.CreateRelDefinesByProperties(file, ExporterCacheManager.OwnerHistoryHandle, null, null, relatedObjects, propertySet);\r\n                           }\r\n                        }\r\n                     }\r\n                  }\r\n                  else\r\n                  {\r\n                     // Special case for IFC4RV to export Element with material layer on its layer components as separate items\r\n                     shapeRepresentation = bodyData.RepresentationHnd;\r\n                  }\r\n               }\r\n\r\n               transaction.Commit();\r\n            }\r\n         }\r\n         finally\r\n         {\r\n            if (partPlacementSetter != null)\r\n               partPlacementSetter.Dispose();\r\n         }\r\n\r\n         return shapeRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export the individual part (IfcBuildingElementPart).\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"partElement\">The part element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper object.</param>\r\n      /// <param name=\"placementSetter\">The PlacementSetter object.</param>\r\n      /// <param name=\"originalPlacement\">The local placement of the host.</param>\r\n      /// <param name=\"range\">The optional range, if the part will be split.</param>\r\n      /// <param name=\"ifcExtrusionAxes\">The directions to extrude the geometry, if possible.</param>\r\n      /// <param name=\"hostElement\">The optional host of the part.</param>\r\n      /// <param name=\"overrideLevelId\">The id of the level that the part is one, overridding other sources.</param>\r\n      /// <param name=\"exportMode\">Which entities to use when exporting the part.</param>\r\n      /// <param name=\"setMaterialNameToPartName\">If set to true then generated part will have name same as its material name.</param>\r\n      public static IFCAnyHandle ExportPart(ExporterIFC exporterIFC, Element partElement,\r\n         ProductWrapper productWrapper,\r\n         PlacementSetter placementSetter, IFCAnyHandle originalPlacement, IFCRange range,\r\n         IFCExtrusionAxes ifcExtrusionAxes, Element hostElement, ElementId overrideLevelId, PartExportMode exportMode,\r\n         bool setMaterialNameToPartName)\r\n      {\r\n         return ExportPartCommon(exporterIFC, partElement, null, -1, productWrapper, placementSetter, originalPlacement,\r\n            range, ifcExtrusionAxes, hostElement, overrideLevelId, exportMode, setMaterialNameToPartName);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export the individual part (IfcBuildingElementPart by default).\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"dummyPartGeometry\">The geometry of the virtual part.</param>\r\n      /// <param name=\"dummyPartGeometryIndex\">The index of the geometry of the virtual part, used to generate a GUID.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper object.</param>\r\n      /// <param name=\"placementSetter\">The PlacementSetter object.</param>\r\n      /// <param name=\"originalPlacement\">The local placement of the host.</param>\r\n      /// <param name=\"range\">The optional range, if the part will be split.</param>\r\n      /// <param name=\"ifcExtrusionAxes\">The directions to extrude the geometry, if possible.</param>\r\n      /// <param name=\"hostElement\">The non-optional host of the virtual part.</param>\r\n      /// <param name=\"overrideLevelId\">The id of the level that the part is one, overridding other sources.</param>\r\n      /// <param name=\"exportMode\">Which entities to use when exporting the virtual part.</param>\r\n      /// <param name=\"setMaterialNameToPartName\">If set to true then generated part will have name same as its material name.</param>\r\n      private static IFCAnyHandle ExportDummyPart(ExporterIFC exporterIFC, \r\n         GeometryElement dummyPartGeometry, int dummyPartGeometryIndex, ProductWrapper productWrapper,\r\n         PlacementSetter placementSetter, IFCAnyHandle originalPlacement, IFCRange range,\r\n         IFCExtrusionAxes ifcExtrusionAxes, Element hostElement, ElementId overrideLevelId, PartExportMode exportMode,\r\n         bool setMaterialNameToPartName)\r\n      {\r\n         return ExportPartCommon(exporterIFC, null, dummyPartGeometry, dummyPartGeometryIndex, productWrapper,\r\n            placementSetter, originalPlacement, range, ifcExtrusionAxes, hostElement, overrideLevelId, exportMode,\r\n            setMaterialNameToPartName);\r\n      }\r\n\r\n      public static bool GetLayerIndex(Element part, out int layerIndex)\r\n      {\r\n         layerIndex = -1;\r\n         string layerIndexStr;\r\n         if (ParameterUtil.GetStringValueFromElement(part, BuiltInParameter.DPART_LAYER_INDEX, out layerIndexStr) != null)\r\n         {\r\n            int index = int.Parse(layerIndexStr) - 1; //The index starts at 1\r\n            if (index >= 0)\r\n            {\r\n               layerIndex = index;\r\n               return true;\r\n            }\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      private static void AddGeometries(ExporterIFC exporterIFC, Element part, IFCRange range,\r\n         ref List<GeometryObject> geometryObjects, IList<Solid> solidsToExclude)\r\n      {\r\n         Options options = GeometryUtil.GetIFCExportGeometryOptions();\r\n         GeometryElement geometryElement = part.get_Geometry(options);\r\n         if (geometryElement == null)\r\n            return;\r\n\r\n         AddGeometriesFromGeometryElement(exporterIFC, part.Document, geometryElement, range, ref geometryObjects, solidsToExclude);\r\n      }\r\n\r\n      private static void AddGeometriesFromGeometryElement(ExporterIFC exporterIFC, Document doc, GeometryElement geometryElement, IFCRange range,\r\n         ref List<GeometryObject> geometryObjects, IList<Solid> solidsToExclude)\r\n      {\r\n         // GetSplitClippedSolidMeshGeometry will call GetSplitSolidMeshGeometry is range is null.\r\n         SolidMeshGeometryInfo solidMeshInfo;\r\n         if (range == null)\r\n            solidMeshInfo = GeometryUtil.GetSplitSolidMeshGeometry(geometryElement);\r\n         else\r\n            solidMeshInfo = GeometryUtil.GetSplitClippedSolidMeshGeometry(geometryElement, range);\r\n\r\n         if (solidMeshInfo.GetSolids().Count == 0 && solidMeshInfo.GetMeshes().Count == 0)\r\n            return;\r\n\r\n         IList<Solid> solids = solidMeshInfo.GetSolids();\r\n         IList<Mesh> meshes = solidMeshInfo.GetMeshes();\r\n         geometryObjects.AddRange(FamilyExporterUtil.RemoveInvisibleSolidsAndMeshes(doc, exporterIFC, ref solids, ref meshes, solidsToExclude));\r\n      }\r\n\r\n      private static ICollection<ElementId> m_AssociatedPartsCache = null;\r\n\r\n      private static void ClearAssociatedParts()\r\n      {\r\n         m_AssociatedPartsCache = null;\r\n      }\r\n\r\n      public static ICollection<ElementId> GetAssociatedParts(Document document, ElementId elementId)\r\n      {\r\n         m_AssociatedPartsCache ??= PartUtils.GetAssociatedParts(document, elementId, false, true);\r\n         return m_AssociatedPartsCache;\r\n      }\r\n\r\n      private static void AddGeometriesFromPartOrGeometry(ExporterIFC exporterIFC, PartOrGeometry partOrGeometry, IFCRange range,\r\n         Element hostElement, IList<Solid> solidsToExclude, ref List<GeometryObject> geometryObjects, ref List<int> partMaterialLayerIndexList)\r\n      {\r\n         if (partOrGeometry.IsGeometry)\r\n         {\r\n            if (ExporterCacheManager.TemporaryPartsCache.FindInfo(partOrGeometry.GeometryElement, out TemporaryPartInfo partInfo))\r\n               partMaterialLayerIndexList.Add(partInfo.LayerIndex);\r\n\r\n            AddGeometriesFromGeometryElement(exporterIFC, hostElement.Document, partOrGeometry.GeometryElement, range, ref geometryObjects, solidsToExclude);\r\n         }\r\n         else\r\n         {\r\n            if (GetLayerIndex(partOrGeometry.Part, out int layerIndex))\r\n               partMaterialLayerIndexList.Add(layerIndex);\r\n\r\n            AddGeometries(exporterIFC, partOrGeometry.Part, range, ref geometryObjects, solidsToExclude);\r\n         }\r\n      }\r\n\r\n      private static void SplitAndAddPartsGeometry(ExporterIFC exporterIFC, List<PartOrGeometry> partsOrGeometries, bool isGeometry, Element hostElement,\r\n         ElementId overrideLevelId, IList<Solid> solidsToExclude, ref List<GeometryObject> geometryObjects, out List<int> partMaterialLayerIndexList)\r\n      {\r\n         partMaterialLayerIndexList = [];\r\n         if (partsOrGeometries.Count == 0)\r\n            return;\r\n\r\n         bool isSplitWall = (hostElement is Wall) && ExporterCacheManager.ExportOptionsCache.WallAndColumnSplitting;\r\n\r\n         SplitParts(hostElement, partsOrGeometries); // Split parts and associate them with host. \r\n\r\n         // Find and export the parts that are split by specific level.\r\n         List<KeyValuePair<PartOrGeometry, IFCRange>> splitPartRangeList = [];\r\n         splitPartRangeList = ExporterCacheManager.HostPartsCache.Find(hostElement.Id, overrideLevelId);\r\n\r\n         if (splitPartRangeList != null)\r\n         {\r\n            foreach (KeyValuePair<PartOrGeometry, IFCRange> partRange in splitPartRangeList)\r\n            {\r\n               IFCRange range = partRange.Value;\r\n               bool validRange = (range != null && !MathUtil.IsAlmostZero(range.Start - range.End));\r\n               if (validRange)\r\n               {\r\n                  PartOrGeometry partOrGeometry = partRange.Key;\r\n                  AddGeometriesFromPartOrGeometry(exporterIFC, partOrGeometry, range, hostElement, solidsToExclude,\r\n                     ref geometryObjects, ref partMaterialLayerIndexList);\r\n               }\r\n            }\r\n         }\r\n         // If it is a split Wall, it should not come here. It may come here because the Wall is clipped \r\n         //   and therefore should not be processed if it does not return splitPartRangeList\r\n         else if (!isSplitWall)\r\n         {\r\n            foreach (PartOrGeometry partOrGeometry in partsOrGeometries)\r\n            {\r\n               AddGeometriesFromPartOrGeometry(exporterIFC, partOrGeometry, range: null, hostElement, solidsToExclude,\r\n                  ref geometryObjects, ref partMaterialLayerIndexList);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export parts for IFC4RV. This will export the individual part representations as IfcShapeAspect, and return the main shape representation handle\r\n      /// </summary>\r\n      /// <returns>The host shape representation with multiple items from its parts.</returns>\r\n      public static IFCAnyHandle ExportHostPartAsShapeAspects(ExporterIFC exporterIFC, Element hostElement, \r\n         IFCAnyHandle hostProdDefShape, ElementId overrideLevelId, MaterialLayerSetInfo layersetInfo, \r\n         IFCExportBodyParams extrusionCreationData, IList<Solid> solidsToExclude = null)\r\n      {\r\n         IFCAnyHandle hostShapeRep = null;\r\n         IList<ElementId> materialIdsFromBodyData = new List<ElementId>();\r\n         IFCFile file = exporterIFC.GetFile();\r\n         BodyData bodyData = null;\r\n\r\n         bool partIsNotObtainable = false;\r\n         List<int> partMaterialLayerIndexList = [];\r\n         List<MaterialLayerSetInfo.MaterialInfo> layersetInfoList = [];\r\n\r\n         ClearAssociatedParts();\r\n\r\n         Document document = hostElement.Document;\r\n         List<GeometryObject> geometryObjects = [];\r\n\r\n         if (ExporterCacheManager.TemporaryPartsCache.Find(hostElement.Id, out List<GeometryElement> geometryElements))\r\n         {\r\n            List<PartOrGeometry> partsOrGeometries = [];\r\n            foreach (var partGeometry in geometryElements)\r\n            {\r\n               partsOrGeometries.Add(new PartOrGeometry(partGeometry));\r\n            }\r\n            SplitAndAddPartsGeometry(exporterIFC, partsOrGeometries, isGeometry: true, hostElement,\r\n               overrideLevelId, solidsToExclude, ref geometryObjects, out partMaterialLayerIndexList);\r\n         }\r\n         else\r\n         {\r\n            if (ElementCanHaveMultipleComponents(hostElement))\r\n            {\r\n               List<ElementId> associatedPartsList = GetAssociatedParts(document, hostElement.Id).ToList();\r\n\r\n               if (associatedPartsList.Count > 0)\r\n               {\r\n                  List<PartOrGeometry> partsOrGeometries = [];\r\n                  foreach (var partId in associatedPartsList)\r\n                  {\r\n                     Part associatedPart = document.GetElement(partId) as Part;\r\n                     partsOrGeometries.Add(new PartOrGeometry(associatedPart));\r\n                  }\r\n                  SplitAndAddPartsGeometry(exporterIFC, partsOrGeometries, isGeometry: false, hostElement,\r\n                     overrideLevelId, solidsToExclude, ref geometryObjects, out partMaterialLayerIndexList);\r\n               }\r\n               else\r\n               {\r\n                  // Getting the Part seems to have problem (no Part obtained). We will then use the original geometry of the object\r\n                  partIsNotObtainable = true;\r\n                  geometryObjects.AddRange(GeomObjectsFromOriginalGeometry(exporterIFC, hostElement));\r\n               }\r\n            }\r\n            else\r\n            {\r\n               // Return nothing if there is no material layer\r\n               geometryObjects = [.. GeomObjectsFromOriginalGeometry(exporterIFC, hostElement)];\r\n            }\r\n         }\r\n\r\n         hostShapeRep = ShapeRepFromListOfGeomObjects(exporterIFC, hostElement, geometryObjects, ref bodyData, ref materialIdsFromBodyData, extrusionCreationData);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(hostShapeRep))\r\n            return null;\r\n\r\n         HashSet<IFCAnyHandle> itemReps = IFCAnyHandleUtil.GetItems(hostShapeRep);\r\n         IFCRepresentationIdentifier shapeIdent = IFCRepresentationIdentifier.Body;\r\n         IFCAnyHandle contextOfItems = ExporterCacheManager.Get3DContextHandle(shapeIdent);\r\n         string representationType = IFCAnyHandleUtil.GetRepresentationType(hostShapeRep);\r\n         // If material layer indices are available, we can use the material sequence as is, \r\n         // but otherwise layersetInfoList must be collected manually in the right order using a geometric method\r\n         if (partMaterialLayerIndexList.Count > 0)\r\n         {\r\n            layersetInfoList = layersetInfo.MaterialIds;\r\n         }\r\n         else\r\n         {\r\n            if (partIsNotObtainable || layersetInfo.IsEmpty)\r\n            {\r\n               if (partIsNotObtainable && layersetInfo != null)\r\n               {\r\n                  // Since Part cannot be obtained the geometry will be only one from the original object. In this case we will take only the first\r\n                  // material. It is not very correct, but it will produce consistent output\r\n\r\n                  var matList = (from x in layersetInfo.MaterialIds\r\n                                 where !MathUtil.IsAlmostZero(x.Width)\r\n                                 select new MaterialLayerSetInfo.MaterialInfo(x.BaseMatId, x.LayerName, x.Width, x.Function)).ToList();\r\n                  if ((matList?.Count ?? 0) > 0)\r\n                  {\r\n                     layersetInfoList.Add(matList[0]);   // add only the first non-zero thickness\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  ElementId matId = ElementId.InvalidElementId;\r\n                  if (materialIdsFromBodyData != null && materialIdsFromBodyData.Count > 0)\r\n                  {\r\n                     matId = materialIdsFromBodyData.First();\r\n                  }\r\n                  Double width = 0.0;\r\n                  if (extrusionCreationData != null)\r\n                  {\r\n                     width = extrusionCreationData.ScaledLength;\r\n                  }\r\n                  layersetInfo.SingleMaterialOverride(matId, width);\r\n                  layersetInfoList.Add(layersetInfo.MaterialIds[0]);\r\n               }\r\n            }\r\n            else\r\n            {\r\n               IList<ElementId> matInfoList = layersetInfo.MaterialIds.Where(x => !MathUtil.IsAlmostZero(x.Width)).Select(x => x.BaseMatId).ToList();\r\n               // There is a chance that the material list is already correct or just in reverse order, so handle it before moving on to manual sequencing\r\n               MaterialLayerSetInfo.CompareTwoLists compStat = MaterialLayerSetInfo.CompareMaterialInfoList(bodyData.MaterialIds, matInfoList);\r\n               switch (compStat)\r\n               {\r\n                  case MaterialLayerSetInfo.CompareTwoLists.ListsSequentialEqual:\r\n                     {\r\n                        layersetInfoList = new List<MaterialLayerSetInfo.MaterialInfo>(layersetInfo.MaterialIds);\r\n                        break;\r\n                     }\r\n                  case MaterialLayerSetInfo.CompareTwoLists.ListsReversedEqual:\r\n                     {\r\n                        layersetInfoList = new List<MaterialLayerSetInfo.MaterialInfo>(layersetInfo.MaterialIds);\r\n                        layersetInfoList.Reverse();\r\n                        break;\r\n                     }\r\n                  case MaterialLayerSetInfo.CompareTwoLists.ListsUnequal:\r\n                     {\r\n                        // Try manually collecting the material info list in the correct order\r\n                        ICollection<ElementId> associatedPartsList = GetAssociatedParts(hostElement.Document, hostElement.Id);\r\n                        layersetInfoList = CollectMaterialInfoList(hostElement, associatedPartsList, layersetInfo).ToList();\r\n\r\n                        // There is a chance that the manually collected list will be reversed or incorrect, so check it again\r\n                        IList<ElementId> newMatInfoList = layersetInfoList.Where(x => !MathUtil.IsAlmostZero(x.Width)).Select(x => x.BaseMatId).ToList();\r\n                        compStat = MaterialLayerSetInfo.CompareMaterialInfoList(newMatInfoList, matInfoList);\r\n                        if (compStat == MaterialLayerSetInfo.CompareTwoLists.ListsReversedEqual)\r\n                           layersetInfoList.Reverse();\r\n                        break;\r\n                     }\r\n                  default:\r\n                     break;\r\n               }\r\n\r\n               if (compStat == MaterialLayerSetInfo.CompareTwoLists.ListsUnequal)\r\n               {\r\n                  // We still cannot match the layer, it could be no layer. Use only the first material\r\n                  MaterialLayerSetInfo.MaterialInfo layer1 = layersetInfo.MaterialIds[0];\r\n                  layersetInfo.SingleMaterialOverride(layer1.BaseMatId, layer1.Width);\r\n                  layersetInfoList.Add(layer1);\r\n               }\r\n            }\r\n         }\r\n\r\n         // Scan through the prodReps and remove any existing \"Body\" rep if it is already in there, if there is, it will be removed and replaced with the parts\r\n         List<IFCAnyHandle> prodReps;\r\n         if (hostProdDefShape == null)\r\n         {\r\n            hostProdDefShape = IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, null);\r\n            prodReps = new List<IFCAnyHandle>();\r\n         }\r\n         else\r\n         {\r\n            prodReps = IFCAnyHandleUtil.GetRepresentations(hostProdDefShape);\r\n         }\r\n\r\n         int repToRemove = -1;\r\n         for (int rCnt = 0; rCnt < prodReps.Count; ++rCnt)\r\n         {\r\n            if (IFCAnyHandleUtil.GetRepresentationIdentifier(prodReps[rCnt]).Equals(\"Body\"))\r\n            {\r\n               repToRemove = rCnt;\r\n               break;\r\n            }\r\n         }\r\n         if (repToRemove < prodReps.Count && repToRemove > -1)\r\n            prodReps.RemoveAt(repToRemove);\r\n\r\n         // Add the body from the parts to replace the Body representation\r\n         prodReps.Add(hostShapeRep);\r\n         IFCAnyHandleUtil.SetAttribute(hostProdDefShape, \"Representations\", prodReps);\r\n\r\n         // Create IfcShapeAspects for each of the ShapeRepresentation keeping UI order\r\n         int partMatLayIdxCount = partMaterialLayerIndexList.Count;\r\n         int layerSetInfoCount = layersetInfoList.Count;\r\n         int cnt = 0;\r\n\r\n         SortedDictionary<int, HashSet<IFCAnyHandle>> layerIndexToRepresentationsMap = new();\r\n         foreach (IFCAnyHandle itemRep in itemReps)\r\n         {\r\n            int layerInfoIdx = -1;\r\n\r\n            if (partMatLayIdxCount > 0 && cnt < partMatLayIdxCount)\r\n            {\r\n               if (partMaterialLayerIndexList[cnt] < layerSetInfoCount)\r\n                  layerInfoIdx = partMaterialLayerIndexList[cnt];\r\n            }\r\n            else\r\n            {\r\n               if (cnt < layerSetInfoCount)\r\n                  layerInfoIdx = cnt;\r\n            }\r\n\r\n            if (!layerIndexToRepresentationsMap.TryGetValue(layerInfoIdx, out HashSet <IFCAnyHandle> layerRepresentations))\r\n            {\r\n               layerRepresentations = new();\r\n               layerIndexToRepresentationsMap.Add(layerInfoIdx, layerRepresentations);\r\n            }\r\n            layerRepresentations.Add(itemRep);\r\n\r\n            cnt++;\r\n         }\r\n         \r\n         HashSet<string> shapeAspectNameUsed = new HashSet<string>();\r\n         foreach (var indexToRepresentationsPair in layerIndexToRepresentationsMap)\r\n         {\r\n            int layerIndex = indexToRepresentationsPair.Key;\r\n\r\n            string shapeAspectName = (layerIndex != -1) ? layersetInfoList[layerIndex].ShapeAspectName : \"Layer\";\r\n            if (string.IsNullOrEmpty(shapeAspectName))\r\n               shapeAspectName = \"Layer\";\r\n\r\n            // Ensure IfcShapeAspect name is unique and save it for consistensy to IfcMaterialConstituent.\r\n            shapeAspectName = NamingUtil.GetUniqueNameWithinSet(shapeAspectName, shapeAspectNameUsed);\r\n            if (layerIndex >= 0 && layerIndex < layerSetInfoCount)\r\n            {\r\n               layersetInfoList[layerIndex].ShapeAspectName = shapeAspectName;\r\n            }\r\n\r\n            RepresentationUtil.CreateRepForShapeAspect(exporterIFC, hostElement, hostProdDefShape, representationType,\r\n               shapeAspectName, indexToRepresentationsPair.Value);\r\n         }\r\n\r\n         return hostShapeRep;\r\n      }\r\n\r\n      private static IList<MaterialLayerSetInfo.MaterialInfo> CollectMaterialInfoList(Element hostElement, \r\n         ICollection<ElementId> associatedPartsList, MaterialLayerSetInfo layersetInfo)\r\n      {\r\n         List<MaterialLayerSetInfo.MaterialInfo> layersetInfoList = [];\r\n\r\n         if (hostElement is Wall)\r\n         {\r\n            Wall wall = hostElement as Wall;\r\n            Curve locationCurve = ExporterIFCUtils.GetWallTrimmedCurve(wall) ?? WallExporter.GetWallAxis(wall);\r\n\r\n            double curveParam = (locationCurve.GetEndParameter(1) - locationCurve.GetEndParameter(0)) * 0.5;\r\n            Transform derivs = locationCurve.ComputeDerivatives(curveParam, false/*normalized*/);\r\n            if (derivs.BasisX.IsZeroLength())\r\n               return null;\r\n\r\n            XYZ rightVec = derivs.BasisX.Normalize().CrossProduct(XYZ.BasisZ);\r\n            XYZ rightLineOrigin = derivs.Origin;\r\n\r\n            // Faces (and their widths) sorted by the parameter on the line that intersects them perpendicularly from left to right\r\n            SortedList<double, Tuple<double, Face>> sortedFaces = new SortedList<double, Tuple<double, Face>>(Comparer<double>.Create((x, y) =>\r\n            {\r\n               if (MathUtil.IsAlmostEqual(x, y))\r\n                  return 0;\r\n               else if (x < y)\r\n                  return -1;\r\n               else\r\n                  return 1;\r\n            }));\r\n\r\n            foreach (ElementId partId in associatedPartsList)\r\n            {\r\n               Part part = hostElement.Document.GetElement(partId) as Part;\r\n               Options options = GeometryUtil.GetIFCExportGeometryOptions();\r\n               GeometryElement geometryElement = part.get_Geometry(options);\r\n               if (geometryElement == null)\r\n                  continue;\r\n\r\n               SolidMeshGeometryInfo solidMeshInfo = GeometryUtil.GetSplitSolidMeshGeometry(geometryElement);\r\n               foreach (Solid solid in solidMeshInfo.GetSolids())\r\n               {\r\n                  foreach (Face sFace in solid.Faces)\r\n                  {\r\n                     PlanarFace face = sFace as PlanarFace;\r\n                     if (face == null)\r\n                        continue;      // Not a planar face\r\n\r\n                     // Check only top faces\r\n                     if (MathUtil.IsAlmostEqual(face.FaceNormal.DotProduct(XYZ.BasisZ), 1.0))\r\n                     {\r\n                        // Create a line perpendicular to the wall at face's height\r\n                        // It may not be strictly necessary for the height to be the same if we use projections instead of intersections\r\n                        Line rightLine = Line.CreateUnbound(rightLineOrigin + new XYZ(0.0, 0.0, face.Origin.Z), rightVec);\r\n\r\n                        if (locationCurve is Line)\r\n                        {\r\n                           for (int i = 0; i < face.EdgeLoops.Size; i++)\r\n                           {\r\n                              EdgeArray loop = face.EdgeLoops.get_Item(i);\r\n                              for (int j = 0; j < loop.Size; j++)\r\n                              {\r\n                                 Edge edge = loop.get_Item(j);\r\n                                 Curve edgeCurve = edge.AsCurveFollowingFace(face);\r\n                                 Line edgeLine = edgeCurve as Line;\r\n                                 if (edgeLine == null)\r\n                                    continue;\r\n\r\n                                 // Walls may be trimmed at any degree, so side edges may not be parallel to the line\r\n                                 // This is why side edges are determined as those not perpendicular to it\r\n                                 if (MathUtil.IsAlmostEqual(Math.Abs(edgeLine.Direction.DotProduct(rightVec)), 0.0))\r\n                                    continue;\r\n\r\n                                 // Instead of intersecting the line with the face, which may be error-prone, project edge's endpoints onto it\r\n                                 IntersectionResult param1 = rightLine.Project(edgeCurve.GetEndPoint(0));\r\n                                 IntersectionResult param2 = rightLine.Project(edgeCurve.GetEndPoint(1));\r\n\r\n                                 double param = Math.Min(param1.Parameter, param2.Parameter);\r\n                                 if (sortedFaces.Keys.Contains(param))\r\n                                    continue;\r\n\r\n                                 sortedFaces.Add(param, new Tuple<double, Face>(Math.Abs(param2.Parameter - param1.Parameter), face));\r\n                              }\r\n                           }\r\n                        }\r\n                        else if (locationCurve is Arc)\r\n                        {\r\n                           List<double> arcWallRadii = new List<double>();\r\n                           for (int i = 0; i < face.EdgeLoops.Size; i++)\r\n                           {\r\n                              EdgeArray loop = face.EdgeLoops.get_Item(i);\r\n                              for (int j = 0; j < loop.Size; j++)\r\n                              {\r\n                                 Edge edge = loop.get_Item(j);\r\n                                 Curve edgeCurve = edge.AsCurveFollowingFace(face);\r\n                                 Arc edgeArc = edgeCurve as Arc;\r\n                                 if (edgeArc == null)\r\n                                    continue;\r\n\r\n                                 Arc locationArc = locationCurve as Arc;\r\n                                 if (locationArc.Center.IsAlmostEqualTo(new XYZ(edgeArc.Center.X, edgeArc.Center.Y, locationArc.Center.Z)))\r\n                                    arcWallRadii.Add(edgeArc.Radius);\r\n                              }\r\n                           }\r\n\r\n                           for (int idx = 0; idx < arcWallRadii.Count - 1; idx++)\r\n                           {\r\n                              if (sortedFaces.Keys.Contains(arcWallRadii[idx]) || MathUtil.IsAlmostEqual(arcWallRadii[idx + 1], arcWallRadii[idx]))\r\n                                 continue;\r\n\r\n                              sortedFaces.Add(arcWallRadii[idx], new Tuple<double, Face>(Math.Abs(arcWallRadii[idx + 1] - arcWallRadii[idx]), face));\r\n                           }\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n\r\n            foreach (KeyValuePair<double, Tuple<double, Face>> faceInfo in sortedFaces)\r\n            {\r\n               foreach (MaterialLayerSetInfo.MaterialInfo layerInfo in layersetInfo.MaterialIds)\r\n               {\r\n                  // Face's material ID == layer's material ID && face's width == layer's width\r\n                  if (faceInfo.Value.Item2.MaterialElementId == layerInfo.BaseMatId && MathUtil.IsAlmostEqual(faceInfo.Value.Item1, layerInfo.Width))\r\n                  {\r\n                     layersetInfoList.Add(layerInfo);\r\n                     break;\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         return layersetInfoList;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add the exported part to cache.\r\n      /// </summary>\r\n      /// <param name=\"partElement\">The exported part.</param>\r\n      /// <param name=\"partExportLevel\">The level to which the part has exported.</param>\r\n      /// <param name=\"hostElement\">The host element of part exported.</param>\r\n      private static void TraceExportedParts(Element partElement, ElementId partExportLevel, ElementId hostElementId)\r\n      {\r\n         if (!ExporterCacheManager.PartExportedCache.HasRegistered(partElement.Id))\r\n         {\r\n            Dictionary<ElementId, ElementId> hostOverrideLevels = new Dictionary<ElementId, ElementId>();\r\n\r\n            partExportLevel ??= ElementId.InvalidElementId;\r\n            if (!hostOverrideLevels.ContainsKey(partExportLevel))\r\n               hostOverrideLevels.Add(partExportLevel, hostElementId);\r\n            ExporterCacheManager.PartExportedCache.Register(partElement.Id, hostOverrideLevels);\r\n         }\r\n         else\r\n         {\r\n            ExporterCacheManager.PartExportedCache.Add(partElement.Id, partExportLevel, hostElementId);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the host element should be exported as parts.\r\n      /// If MVD is older then IFC4 we rely on ExportOptionsCache.ExportParts option.\r\n      /// If MVD is IFC4RV and if Exchange type is Structural we need to export Parts if they exist. If number of parts is 1 we need to export it as ShapeAspect and not as Part.\r\n      /// </summary>\r\n      /// <param name=\"hostElement\">The host element.</param>\r\n      /// <param name=\"layersCount\">The number of layers or parts the hostElemnt consists of.</param>\r\n      /// <returns>True if host element should be exported as parts, false otherwise.</returns>\r\n      public static bool ShouldExportParts(Element hostElement, int layersCount)\r\n      {\r\n         return hostElement != null && ExporterUtil.ShouldExportPartsForRV(layersCount);\r\n      }\r\n      /// <summary>\r\n      /// Checks if element has associated parts and all conditions are met for exporting it as Parts.\r\n      /// </summary>\r\n      /// <param name=\"hostElement\">The host element.</param>\r\n      /// <returns>True if host element can export the parts, false otherwise.</returns>\r\n      public static bool CanExportParts(Element hostElement)\r\n      {\r\n         if (ShouldExportParts(hostElement, PartUtils.GetAssociatedParts(hostElement.Document, hostElement.Id, false, true).Count))\r\n         {\r\n            return PartUtils.HasAssociatedParts(hostElement.Document, hostElement.Id);\r\n         }\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the host element can export when exporting parts.\r\n      /// 1. If host element has non merged parts (>0), it can be export no matter if it has merged parts or not, and return true.\r\n      /// 2. If host element has merged parts\r\n      ///    - If the merged part is the right category and not export yet, return true.\r\n      ///    - If the merged part is the right category but has been exported by other host, return false.\r\n      ///    - If the merged part is not the right category, should not export and return false.\r\n      /// </summary>\r\n      /// <param name=\"hostElement\">The host element having parts.</param>\r\n      /// <param name=\"levelId\">The level the part would export.</param>\r\n      /// <Param name=\"isSplit\">The bool flag identifies if the host element is split by story.</Param>\r\n      /// <returns>True if the element can export, false otherwise.</returns>\r\n      public static bool CanExportElementInPartExport(Element hostElement, ElementId levelId, bool isSplit,\r\n         ICollection<ElementId> associatedPartsList)\r\n      {\r\n         foreach (ElementId partId in associatedPartsList)\r\n         {\r\n            Part part = hostElement.Document.GetElement(partId) as Part;\r\n            if (PartUtils.IsMergedPart(part))\r\n            {\r\n               ElementId hostElementCategoryId = CategoryUtil.GetSafeCategoryId(hostElement);\r\n               if (part.OriginalCategoryId == hostElementCategoryId)\r\n               {\r\n                  if (isSplit)\r\n                  {\r\n                     if (!ExporterCacheManager.PartExportedCache.HasExported(partId, levelId))\r\n                     {\r\n                        // has merged split part and not export yet.\r\n                        return true;\r\n                     }\r\n                  }\r\n                  else if (!ExporterCacheManager.PartExportedCache.HasRegistered(partId))\r\n                  {\r\n                     // has merged part and not export yet.\r\n                     return true;\r\n                  }\r\n               }\r\n            }\r\n            else\r\n            {\r\n               return true;\r\n            }\r\n         }\r\n\r\n         // has no merged parts or other parts or merged parts have been exported.\r\n         return false;\r\n      }\r\n\r\n      public static bool CanExportElementInPartExport(Element hostElement, ElementId levelId, bool isSplit)\r\n      {\r\n         ElementId hostElementId = hostElement.Id;\r\n         if (ExporterCacheManager.TemporaryPartsCache.HasTemporaryParts(hostElementId))\r\n            return true;\r\n\r\n         ICollection<ElementId> associatedPartsList = PartUtils.GetAssociatedParts(hostElement.Document, hostElementId, false, true);\r\n         return CanExportElementInPartExport(hostElement, levelId, isSplit, associatedPartsList);\r\n      }\r\n      \r\n      /// <summary>\r\n      ///  Identifies if host element is a Wall or a Column\r\n      /// </summary>\r\n      /// <param name=\"hostElement\">The host element having associated parts.</param>\r\n      /// <returns>True if Wall or Column, false otherwise.</returns>\r\n      private static bool IsHostWallOrColumn(Element hostElement)\r\n      {\r\n         string ifcEnumType;\r\n         IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(hostElement, out ifcEnumType);\r\n         return (exportType.ExportInstance == IFCEntityType.IfcWall) || (exportType.ExportInstance == IFCEntityType.IfcColumn);\r\n      }\r\n\r\n      private static bool ElementCanHaveMultipleComponents(Element hostElement)\r\n      {\r\n         // Currently only objects with multi-layer/structure are supported\r\n         return hostElement is Floor\r\n            || hostElement is RoofBase\r\n            || hostElement is Ceiling\r\n            || hostElement is Wall\r\n            || hostElement is FamilyInstance;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the Default IFCExtrusionAxes for part. \r\n      /// Simply having roof/floor/wall/column as Z and everything else as XY.\r\n      /// </summary>\r\n      /// <param name=\"part\">The part.</param>\r\n      /// <returns>TryZ for wall/column/floor/roof category and TryXY for other category.</returns>\r\n      private static IFCExtrusionAxes GetDefaultExtrusionAxesForPart(Part part)\r\n      {\r\n         switch (part.OriginalCategoryId.Value)\r\n         {\r\n            case (long)BuiltInCategory.OST_Walls:\r\n            case (long)BuiltInCategory.OST_Columns:\r\n            case (long)BuiltInCategory.OST_Ceilings:\r\n            case (long)BuiltInCategory.OST_Floors:\r\n            case (long)BuiltInCategory.OST_Roofs:\r\n               return IFCExtrusionAxes.TryZ;\r\n            default:\r\n               return IFCExtrusionAxes.TryXY;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the Default IFCExtrusionAxes for host element. \r\n      /// Simply having roof/floor/wall/column as Z and everything else as XY.\r\n      /// </summary>\r\n      /// <param name=\"hostElement\">The host element to get the IFCExtrusionAxes.</param>\r\n      /// <returns>TryZ for wall/column/floor/roof elements and TryXY for other elements.</returns>\r\n      private static IFCExtrusionAxes GetDefaultExtrusionAxesForHost(Element hostElement)\r\n      {\r\n         IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(hostElement, out _);\r\n\r\n         switch (exportType.ExportInstance)\r\n         {\r\n            case IFCEntityType.IfcWall:\r\n            case IFCEntityType.IfcColumn:\r\n            case IFCEntityType.IfcCovering:\r\n            case IFCEntityType.IfcSlab:\r\n            case IFCEntityType.IfcRoof:\r\n            case IFCEntityType.IfcBuildingElementProxy:\r\n               return IFCExtrusionAxes.TryZ;\r\n            default:\r\n               return IFCExtrusionAxes.TryXY;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Split associated parts when host element is split by level.\r\n      /// </summary>\r\n      /// <param name=\"hostElement\">The host element havign associtaed parts.</param>\r\n      /// <param name=\"partsOrGeometries\">The list of associtated parts or geometries.</param>\r\n      private static void SplitParts(Element hostElement, List<PartOrGeometry> partsOrGeometries)\r\n      {\r\n         if (partsOrGeometries.Count == 0)\r\n            return;\r\n\r\n         IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(hostElement, out _);\r\n\r\n         // Split the host to find the orphan parts.\r\n         IList<ElementId> orphanLevels = new List<ElementId>();\r\n         IList<ElementId> hostLevels = new List<ElementId>();\r\n         IList<IFCRange> hostRanges = new List<IFCRange>();\r\n         LevelUtil.CreateSplitLevelRangesForElement(exportType, hostElement, out hostLevels, out hostRanges);\r\n         orphanLevels = hostLevels;\r\n\r\n         // Split each Parts\r\n         IList<ElementId> levels = new List<ElementId>();\r\n         IList<IFCRange> ranges = new List<IFCRange>();\r\n         // Dictionary to storage the level and its parts.\r\n         Dictionary<ElementId, List<KeyValuePair<PartOrGeometry, IFCRange>>> levelParts = new();\r\n\r\n         bool isGeometry = partsOrGeometries[0].IsGeometry;\r\n\r\n         foreach (var partOrGeometry in partsOrGeometries)\r\n         {\r\n            if (isGeometry)\r\n               LevelUtil.CreateSplitLevelRangesForElementGeometry(exportType, hostElement, partOrGeometry.GeometryElement, out levels, out ranges);\r\n            else\r\n               LevelUtil.CreateSplitLevelRangesForElement(exportType, partOrGeometry.Part, out levels, out ranges);\r\n\r\n            // if the parts are above top level, associate them with nearest bottom level.\r\n            if (ranges.Count == 0)\r\n            {\r\n               BoundingBoxXYZ partBBox = isGeometry ?\r\n                  partOrGeometry.GeometryElement.GetBoundingBox() : partOrGeometry.Part.get_BoundingBox(null);\r\n               ElementId bottomLevelId = FindPartSplitLevel(partBBox);\r\n\r\n               // Assign a single range from the bounding box of the Part, otherwise it may cause problem somewhere that expects the non null value\r\n               IFCRange range = new IFCRange(partBBox.Min.Z, partBBox.Max.Z);\r\n               if (bottomLevelId == ElementId.InvalidElementId)\r\n                  bottomLevelId = isGeometry ? hostElement.LevelId : partOrGeometry.Part.LevelId;\r\n\r\n               if (!levelParts.ContainsKey(bottomLevelId))\r\n                  levelParts.Add(bottomLevelId, new List<KeyValuePair<PartOrGeometry, IFCRange>>());\r\n\r\n               KeyValuePair<PartOrGeometry, IFCRange> splitPartRange = new KeyValuePair<PartOrGeometry, IFCRange>(partOrGeometry, range);\r\n               levelParts[bottomLevelId].Add(splitPartRange);\r\n\r\n               continue;\r\n            }\r\n\r\n            // The parts split by levels are stored in dictionary.\r\n            for (int ii = 0; ii < ranges.Count; ii++)\r\n            {\r\n               if (!levelParts.ContainsKey(levels[ii]))\r\n                  levelParts.Add(levels[ii], new List<KeyValuePair<PartOrGeometry, IFCRange>>());\r\n\r\n               KeyValuePair<PartOrGeometry, IFCRange> splitPartRange = new KeyValuePair<PartOrGeometry, IFCRange>(partOrGeometry, ranges[ii]);\r\n               levelParts[levels[ii]].Add(splitPartRange);\r\n            }\r\n\r\n            if (levels.Count > hostLevels.Count)\r\n            {\r\n               orphanLevels = orphanLevels.Union(levels).ToList();\r\n            }\r\n         }\r\n\r\n         ExporterCacheManager.HostPartsCache.Register(hostElement.Id, levelParts);\r\n\r\n         // The levels of orphan part.\r\n         orphanLevels = orphanLevels.Where(number => !hostLevels.Contains(number)).ToList();\r\n         List<KeyValuePair<ElementId, IFCRange>> levelRangePairList = new List<KeyValuePair<ElementId, IFCRange>>();\r\n         foreach (ElementId orphanLevelId in orphanLevels)\r\n         {\r\n            IFCLevelInfo levelInfo = ExporterCacheManager.LevelInfoCache.GetLevelInfo(orphanLevelId);\r\n            if (levelInfo == null)\r\n               continue;\r\n            double levelHeight = ExporterCacheManager.LevelInfoCache.FindHeight(orphanLevelId);\r\n            IFCRange levelRange = new IFCRange(levelInfo.Elevation, levelInfo.Elevation + levelHeight);\r\n\r\n            List<KeyValuePair<PartOrGeometry, IFCRange>> splitPartRangeList = new();\r\n            splitPartRangeList = ExporterCacheManager.HostPartsCache.Find(hostElement.Id, orphanLevelId);\r\n            IFCRange highestRange = levelRange;\r\n            foreach (KeyValuePair<PartOrGeometry, IFCRange> partRange in splitPartRangeList)\r\n            {\r\n               if (partRange.Value.End > highestRange.End)\r\n               {\r\n                  highestRange = partRange.Value;\r\n               }\r\n            }\r\n            levelRangePairList.Add(new KeyValuePair<ElementId, IFCRange>(orphanLevelId, highestRange));\r\n         }\r\n\r\n         if (levelRangePairList.Count > 0)\r\n         {\r\n            ExporterCacheManager.DummyHostCache.Register(hostElement.Id, levelRangePairList);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Find the nearest bottom level for parts that are above top level.\r\n      /// </summary>\r\n      /// <param name=\"partBBox\">The part above top level.</param>\r\n      /// <returns>The ElementId of nearest bottom level.</returns>\r\n      private static ElementId FindPartSplitLevel(BoundingBoxXYZ partBBox)\r\n      {\r\n         double extension = LevelUtil.GetLevelExtension();\r\n         ElementId theSplitLevelId = ElementId.InvalidElementId;\r\n\r\n         // The levels should have been sorted.\r\n         IList<ElementId> levelIds = ExporterCacheManager.LevelInfoCache.GetBuildingStoriesByElevation();\r\n         // Find the nearest bottom level.\r\n         foreach (ElementId levelId in levelIds)\r\n         {\r\n            IFCLevelInfo levelInfo = ExporterCacheManager.LevelInfoCache.GetLevelInfo(levelId);\r\n            if (levelInfo == null)\r\n               continue;\r\n            if (levelInfo.Elevation < partBBox.Min.Z + extension)\r\n            {\r\n               theSplitLevelId = levelId;\r\n            }\r\n         }\r\n\r\n         // If there is no associated level id, it has to be linked to the lowest level\r\n         if (theSplitLevelId == ElementId.InvalidElementId && levelIds.Count > 0)\r\n         {\r\n            theSplitLevelId = levelIds[0];\r\n         }\r\n\r\n         return theSplitLevelId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Find the root element for a part with its original category. \r\n      /// </summary>\r\n      /// <param name=\"part\">The part element.</param>\r\n      /// <returns>The root element that makes the part; returns null if fail to find the root parent.</returns>\r\n      public static Element FindRootParent(Part part)\r\n      {\r\n         if (part == null)\r\n         {\r\n            return null;\r\n         }\r\n\r\n         ElementId originalCategoryId = part.OriginalCategoryId;\r\n         Element hostElement = null;\r\n\r\n         foreach (LinkElementId linkElementId in part.GetSourceElementIds())\r\n         {\r\n            if (linkElementId.HostElementId == ElementId.InvalidElementId)\r\n            {\r\n               if (linkElementId.LinkInstanceId == ElementId.InvalidElementId)\r\n                  continue;\r\n               Element linkedElement = part.Document.GetElement(linkElementId.LinkInstanceId);\r\n\r\n               RevitLinkInstance linkInstance = linkedElement as RevitLinkInstance;\r\n               if (linkInstance != null)\r\n               {\r\n                  Document document = linkInstance.GetLinkDocument();\r\n                  if (document != null)\r\n                  {\r\n                     ElementId id = linkElementId.LinkedElementId;\r\n                     hostElement = document.GetElement(id);\r\n                     return hostElement;\r\n                  }\r\n               }\r\n               continue;\r\n            }\r\n\r\n            Element parentElement = part.Document.GetElement(linkElementId.HostElementId);\r\n            // If the direct parent is a part, find its parent.\r\n            if (parentElement is Part)\r\n            {\r\n               Part parentPart = parentElement as Part;\r\n               hostElement = FindRootParent(parentPart);\r\n               if (hostElement != null)\r\n                  return hostElement;\r\n            }\r\n            else if (originalCategoryId == CategoryUtil.GetSafeCategoryId(parentElement))\r\n            {\r\n               hostElement = parentElement;\r\n               return hostElement;\r\n            }\r\n         }\r\n\r\n         return hostElement;\r\n      }\r\n\r\n\r\n      private static List<GeometryObject> GeomObjectsFromOriginalGeometry(ExporterIFC exporterIFC, Element hostElement)\r\n      {\r\n         List<GeometryObject> geometryObjects = new List<GeometryObject>();\r\n         Options options = GeometryUtil.GetIFCExportGeometryOptions();\r\n\r\n         // Getting the Part seems to have problem (no Part obtained). We will then use the original geometry of the object\r\n         GeometryElement geometryElement = hostElement.get_Geometry(options);\r\n         if (geometryElement != null)\r\n         {\r\n            SolidMeshGeometryInfo solidMeshInfo = GeometryUtil.GetSplitSolidMeshGeometry(geometryElement);\r\n            IList<Solid> solids = solidMeshInfo.GetSolids();\r\n            IList<Mesh> meshes = solidMeshInfo.GetMeshes();\r\n            geometryObjects.AddRange(FamilyExporterUtil.RemoveInvisibleSolidsAndMeshes(hostElement.Document, exporterIFC, ref solids, ref meshes));\r\n         }\r\n\r\n         return geometryObjects;\r\n      }\r\n\r\n      private static IFCAnyHandle ShapeRepFromListOfGeomObjects(ExporterIFC exporterIFC, Element hostElement, List<GeometryObject> geometryObjects,\r\n         ref BodyData bodyData, ref IList<ElementId> materialIds, IFCExportBodyParams extrusionCreationData)\r\n      {\r\n         if (geometryObjects.Count == 0)\r\n         {\r\n            return null;\r\n         }\r\n\r\n         ElementId catId = CategoryUtil.GetSafeCategoryId(hostElement);\r\n\r\n         BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n         bodyData = BodyExporter.ExportBody(exporterIFC, hostElement, catId, ElementId.InvalidElementId, geometryObjects,\r\n            bodyExporterOptions, extrusionCreationData);\r\n         materialIds = bodyData.MaterialIds;\r\n\r\n         return bodyData.RepresentationHnd;\r\n      }\r\n     \r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PileExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export Pile elements.\r\n   /// </summary>\r\n   class PileExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports an element to IfcPile.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"ifcEnumType\">The string value represents the IFC type.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportPile(ExporterIFC exporterIFC, Element element, GeometryElement geometryElement,\r\n         string ifcEnumType, ProductWrapper productWrapper)\r\n      {\r\n         // NOTE: We expect to incorporate this code into the generic FamilyInstanceExporter at some point.\r\n\r\n         // Export parts or not\r\n         bool exportParts = PartExporter.CanExportParts(element);\r\n         if (exportParts && !PartExporter.CanExportElementInPartExport(element, element.LevelId, false))\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, element, null))\r\n            {\r\n               using (IFCExportBodyParams ecData = new IFCExportBodyParams())\r\n               {\r\n                  ecData.SetLocalPlacement(setter.LocalPlacement);\r\n\r\n                  IFCAnyHandle prodRep = null;\r\n                  ElementId matId = ElementId.InvalidElementId;\r\n                  if (!exportParts)\r\n                  {\r\n                     ElementId catId = CategoryUtil.GetSafeCategoryId(element);\r\n\r\n\r\n                     matId = BodyExporter.GetBestMaterialIdFromGeometryOrParameter(geometryElement, element);\r\n                     BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n\r\n                     StructuralMemberAxisInfo axisInfo = StructuralMemberExporter.GetStructuralMemberAxisTransform(element);\r\n                     if (axisInfo != null)\r\n                     {\r\n                        ecData.CustomAxis = axisInfo.AxisDirection;\r\n                        ecData.PossibleExtrusionAxes = IFCExtrusionAxes.TryCustom;\r\n                     }\r\n                     else\r\n                        ecData.PossibleExtrusionAxes = IFCExtrusionAxes.TryZ;\r\n\r\n                     prodRep = RepresentationUtil.CreateAppropriateProductDefinitionShape(exporterIFC,\r\n                        element, catId, geometryElement, bodyExporterOptions, null, ecData, true);\r\n                     if (IFCAnyHandleUtil.IsNullOrHasNoValue(prodRep))\r\n                     {\r\n                        ecData.ClearOpenings();\r\n                        return;\r\n                     }\r\n                  }\r\n\r\n                  string instanceGUID = GUIDUtil.CreateGUID(element);\r\n                  IFCExportInfoPair exportInfo = new IFCExportInfoPair(Common.Enums.IFCEntityType.IfcPile, ifcEnumType);\r\n\r\n                  IFCAnyHandle pile = IFCInstanceExporter.CreatePile(exporterIFC, element, instanceGUID, ExporterCacheManager.OwnerHistoryHandle,\r\n                      ecData.GetLocalPlacement(), prodRep, ifcEnumType, null);\r\n\r\n                  // TODO: to allow shared geometry for Piles. For now, Pile export will not use shared geometry\r\n                  if (exportInfo.ExportType != Common.Enums.IFCEntityType.UnKnown)\r\n                  {\r\n                     IFCAnyHandle type = ExporterUtil.CreateGenericTypeFromElement(element, exportInfo, file, productWrapper);\r\n                     ExporterCacheManager.TypeRelationsCache.Add(type, pile);\r\n                  }\r\n                  if (exportParts)\r\n                  {\r\n                     PartExporter.ExportHostPart(exporterIFC, element, pile, setter, setter.LocalPlacement, null);\r\n                  }\r\n                  else\r\n                  {\r\n                     if (matId != ElementId.InvalidElementId)\r\n                     {\r\n                        CategoryUtil.CreateMaterialAssociation(exporterIFC, pile, matId);\r\n                     }\r\n                  }\r\n\r\n                  productWrapper.AddElement(element, pile, setter, ecData, true, exportInfo);\r\n\r\n                  OpeningUtil.CreateOpeningsIfNecessary(pile, element, ecData, null,\r\n                      exporterIFC, ecData.GetLocalPlacement(), setter, productWrapper);\r\n               }\r\n            }\r\n\r\n            tr.Commit();\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PipeInsulationExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export a Revit element as IfcCovering of type INSULATION.\r\n   /// </summary>\r\n   class PipeInsulationExporter : InsulationExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports an element as a covering of type insulation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <returns>True if exported successfully, false otherwise.</returns>\r\n      public static bool ExportPipeInsulation(ExporterIFC exporterIFC, Element element,\r\n          GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         return ExportInsulation(exporterIFC, element, geometryElement, productWrapper);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/AttributeEntry.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Toolkit;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet\n{\n   /// <summary>\n   /// Represents a mapping from a Revit parameter or calculated quantity to an IFC property.\n   /// </summary>\n   public class AttributeEntry : Entry<AttributeEntryMap>\n   {\n      /// <summary>\n      /// The type of the IFC property set entry. Default is label.\n      /// </summary>\n      PropertyType m_PropertyType = PropertyType.Label;\n\n      public PropertyType PropertyType\n      {\n         get\n         {\n            return m_PropertyType;\n         }\n         private set\n         {\n            m_PropertyType = value;\n         }\n      }\n      /// <summary>\n      /// Constructs a PropertySetEntry object.\n      /// </summary>\n      /// <param name=\"revitParameterName\">\n      /// Revit parameter name.\n      /// </param>\n      internal AttributeEntry(string name, PropertyType propertyType, List<AttributeEntryMap> mapping) : base(name, mapping)\n      {\n         PropertyType = propertyType;\n      }\n\n\n      internal string AsString(Element element)\n      {\n         if (element == null)\n            return null;\n         foreach (AttributeEntryMap entry in Entries)\n         {\n            string result = entry.AsString(element);\n            if (result != null)\n               return result;\n         }\n         return null;\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/AttributeEntryMap.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Toolkit;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet\n{\n   /// <summary>\n   /// Represents a mapping from a Revit parameter or calculated quantity to an IFC property.\n   /// </summary>\n   public class AttributeEntryMap : EntryMap\n   {\n      public AttributeEntryMap()\n      {\n\n      }\n      public AttributeEntryMap(string name, BuiltInParameter builtInParameter) : base(name, builtInParameter)\n      {\n\n      }\n\n\n      internal string AsString(Element element)\n      {\n         if (element == null)\n            return null;\n         Parameter parameter = null;\n         if (RevitBuiltInParameter != BuiltInParameter.INVALID)\n         {\n            parameter = element.get_Parameter(RevitBuiltInParameter);\n         }\n         else\n         {\n            parameter = ParameterUtil.GetParameterFromName(element.Id, RevitParameterName);\n         }\n         if (parameter == null)\n            return null;\n         return parameter.AsString();\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/AttributeSetDescription.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet\r\n{\r\n   /// <summary>\r\n   /// A description mapping of a group of Revit parameters and/or calculated values to an IfcPropertySet.\r\n   /// </summary>\r\n   /// <remarks>\r\n   /// The mapping includes: the name of the IFC property set, the entity type this property to which this set applies,\r\n   /// and an array of property set entries.  A property set description is valid for only one entity type.\r\n   /// </remarks>\r\n   public class AttributeSetDescription : Description\r\n   {\r\n      /// <summary>\r\n      /// The entries stored in this property set description.\r\n      /// </summary>\r\n      Dictionary<Tuple<PropertyType, string>, AttributeEntry> m_Entries = new Dictionary<Tuple<PropertyType, string>, AttributeEntry>();\r\n\r\n      /// <summary>\r\n      /// The entries stored in this property set description.\r\n      /// </summary>\r\n      public IList<AttributeEntry> Entries { get { return m_Entries.Values.ToList(); } }\r\n      /// <summary>\r\n      /// The entries stored in this property set description.\r\n      /// </summary>\r\n      public void AddEntry(AttributeEntry entry)\r\n      {\r\n         PropertySetupType propertyMappingSetup = PropertySetupType.UserDefinedPropertySets;\r\n\r\n         IFCPropertyMappingInfo mappedRevitParameter = GetMappedRevitParameterForDescription(propertyMappingSetup, entry.PropertyName);\r\n         if (mappedRevitParameter != null) \r\n         {\r\n            entry.IsExcluded = !mappedRevitParameter.ExportFlag;\r\n\r\n            ElementId parameterId = mappedRevitParameter.RevitPropertyId;\r\n            string parameterName = mappedRevitParameter.RevitPropertyName;\r\n            if (ParameterUtils.IsBuiltInParameter(parameterId))\r\n            {\r\n               entry.SetRevitBuiltInParameter((BuiltInParameter)parameterId.Value);\r\n            }\r\n            else if (!string.IsNullOrEmpty(parameterName))\r\n            {\r\n               entry.SetRevitParameterName(parameterName);\r\n            }\r\n         }\r\n         entry.UpdateEntry();\r\n         m_Entries[new Tuple<PropertyType, string>(entry.PropertyType, entry.PropertyName)] = entry;\r\n      }\r\n\r\n      public AttributeEntry GetEntry(PropertyType propertyType, string name)\r\n      {\r\n         AttributeEntry result = null;\r\n         m_Entries.TryGetValue(new Tuple<PropertyType, string>(propertyType, name), out result);\r\n         return result;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Remove an entry from the attributes map.\r\n      /// </summary>\r\n      /// <param name=\"entry\">The entry to remove.</param>\r\n      public bool RemoveEntry(AttributeEntry entry)\r\n      {\r\n         return Entries.Remove(entry);\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/AreaCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate area for a Door.\r\n   /// </summary>\r\n   class AreaCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_Area = 0;\r\n\r\n      /// <summary>\r\n      /// The AreaCalculator instance.\r\n      /// </summary>\r\n      public static AreaCalculator Instance { get; } = new AreaCalculator();\r\n\r\n      /// <summary>\r\n      /// Calculates the area.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>True if the operation succeed, false otherwise.</returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         // Check the parameter override.\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Area, entryMap.CompatibleRevitParameterName, \"IfcQtyArea\") != null)\r\n         {\r\n            m_Area = UnitUtil.ScaleArea(m_Area);\r\n            if (m_Area > MathUtil.Eps() * MathUtil.Eps())\r\n               return true;\r\n         }\r\n\r\n         double height = 0.0;\r\n         double width = 0.0;\r\n\r\n         ElementId categoryId = CategoryUtil.GetSafeCategoryId(element);\r\n\r\n         // Work for Door element\r\n         if (categoryId == new ElementId(BuiltInCategory.OST_Doors))\r\n         {\r\n            if ((ParameterUtil.GetDoubleValueFromElementOrSymbol(element, BuiltInParameter.DOOR_HEIGHT, out height) != null) &&\r\n                  (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, BuiltInParameter.DOOR_WIDTH, out width) != null))\r\n            {\r\n               m_Area = UnitUtil.ScaleArea(height * width);\r\n               return true;\r\n            }\r\n         }\r\n         // Work for Window element\r\n         else if (categoryId == new ElementId(BuiltInCategory.OST_Windows))\r\n         {\r\n            if ((ParameterUtil.GetDoubleValueFromElementOrSymbol(element, BuiltInParameter.WINDOW_HEIGHT, out height) != null) &&\r\n                  (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, BuiltInParameter.WINDOW_WIDTH, out width) != null))\r\n            {\r\n               m_Area = UnitUtil.ScaleArea(height * width);\r\n               return true;\r\n            }\r\n         }\r\n         else if (categoryId == new ElementId(BuiltInCategory.OST_Ceilings) || categoryId == new ElementId(BuiltInCategory.OST_Floors)\r\n            || element is Floor)\r\n         {\r\n            if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, BuiltInParameter.HOST_AREA_COMPUTED, out height) != null)\r\n            {\r\n               m_Area = UnitUtil.ScaleArea(height * width);\r\n               return true;\r\n            }\r\n         }\r\n\r\n         // Work for Space element or other element that has extrusion\r\n         m_Area = extrusionCreationData?.ScaledArea ?? 0.0;\r\n         return m_Area > MathUtil.Eps() * MathUtil.Eps();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_Area;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/ConcealedCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB.IFC;\nusing Autodesk.Revit.DB;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   class ConcealedCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A boolean variable to keep the calculated value.\n      /// </summary>\n      private bool Concealed { get; set; } = false;\n\n      /// <summary>\n      /// The SpaceConcealCalculator instance.\n      /// </summary>\n      public static ConcealedCalculator Instance { get; } = new ConcealedCalculator();\n\n      /// <summary>\n      /// Calculates concealed value for a space.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>True if the operation succeed, false otherwise.</returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         int? concealed = ParameterUtil.GetIntValueFromElementOrSymbol(element, entryMap.RevitParameterName, entryMap.CompatibleRevitParameterName);\n\n         if (!concealed.HasValue)\n            return false;\n\n         Concealed = concealed.GetValueOrDefault(0) != 0;\n         return true;\n      }\n\n      /// <summary>\n      /// Gets the calculated boolean value.\n      /// </summary>\n      /// <returns>\n      /// The boolean value.\n      /// </returns>\n      public override bool GetBooleanValue()\n      {\n         return Concealed;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/ConcealedCeiling.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB.IFC;\nusing Autodesk.Revit.DB;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   class ConcealedCeilingCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A boolean variable to keep the calculated value.\n      /// </summary>\n      private bool Concealed { get; set; } = false;\n\n      /// <summary>\n      /// The SpaceConcealCalculator instance.\n      /// </summary>\n      public static ConcealedCeilingCalculator Instance { get; } = new ConcealedCeilingCalculator();\n\n      /// <summary>\n      /// Calculates concealed value for a space.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>True if the operation succeed, false otherwise.</returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         int? concealedCeiling = ParameterUtil.GetIntValueFromElementOrSymbol(element, entryMap.RevitParameterName, entryMap.CompatibleRevitParameterName);\n         if (!concealedCeiling.HasValue)\n            return false;\n\n         Concealed = concealedCeiling.GetValueOrDefault(0) != 0;\n         return true;\n      }\n\n      /// <summary>\n      /// Gets the calculated boolean value.\n      /// </summary>\n      /// <returns>\n      /// The boolean value.\n      /// </returns>\n      public override bool GetBooleanValue()\n      {\n         return Concealed;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/ConcealedCeilingOffset.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB.IFC;\nusing Autodesk.Revit.DB;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   class ConcealedCeilingOffsetCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A boolean variable to keep the calculated value.\n      /// </summary>\n      private bool Concealed { get; set; } = false;\n\n      /// <summary>\n      /// The SpaceConcealCalculator instance.\n      /// </summary>\n      public static ConcealedCeilingOffsetCalculator Instance { get; } = new ConcealedCeilingOffsetCalculator();\n\n      /// <summary>\n      /// Calculates concealed value for a space.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>True if the operation succeed, false otherwise.</returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         int? concealedCeilingOffset = ParameterUtil.GetIntValueFromElementOrSymbol(element, entryMap.RevitParameterName, entryMap.CompatibleRevitParameterName);\n         if (!concealedCeilingOffset.HasValue)\n            return false;\n\n         Concealed = concealedCeilingOffset.GetValueOrDefault(0) != 0;\n         return true;\n      }\n\n      /// <summary>\n      /// Gets the calculated boolean value.\n      /// </summary>\n      /// <returns>\n      /// The boolean value.\n      /// </returns>\n      public override bool GetBooleanValue()\n      {\n         return Concealed;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/ConcealedFlooring.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB.IFC;\nusing Autodesk.Revit.DB;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   class ConcealedFlooringCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A boolean variable to keep the calculated value.\n      /// </summary>\n      private bool Concealed { get; set; } = false;\n\n      /// <summary>\n      /// The SpaceConcealCalculator instance.\n      /// </summary>\n      public static ConcealedFlooringCalculator Instance { get; } = new ConcealedFlooringCalculator();\n\n      /// <summary>\n      /// Calculates concealed value for a space.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>True if the operation succeed, false otherwise.</returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         int? concealedFlooring = ParameterUtil.GetIntValueFromElementOrSymbol(element, entryMap.RevitParameterName, entryMap.CompatibleRevitParameterName);\n         if (!concealedFlooring.HasValue)\n            return false;\n\n         Concealed = concealedFlooring.GetValueOrDefault(0) != 0;\n         return true;\n      }\n\n      /// <summary>\n      /// Gets the calculated boolean value.\n      /// </summary>\n      /// <returns>\n      /// The boolean value.\n      /// </returns>\n      public override bool GetBooleanValue()\n      {\n         return Concealed;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/ConcealedFlooringOffset.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB.IFC;\nusing Autodesk.Revit.DB;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   class ConcealedFlooringOffsetCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A boolean variable to keep the calculated value.\n      /// </summary>\n      private bool Concealed { get; set; } = false;\n\n      /// <summary>\n      /// The SpaceConcealCalculator instance.\n      /// </summary>\n      public static ConcealedFlooringOffsetCalculator Instance { get; } = new ConcealedFlooringOffsetCalculator();\n\n      /// <summary>\n      /// Calculates concealed value for a space.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>True if the operation succeed, false otherwise.</returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         int? concealedFlooringOffset = ParameterUtil.GetIntValueFromElementOrSymbol(element, entryMap.RevitParameterName, entryMap.CompatibleRevitParameterName);\n         if (!concealedFlooringOffset.HasValue)\n            return false;\n\n         Concealed = concealedFlooringOffset.GetValueOrDefault(0) != 0;\n         return true;\n      }\n\n      /// <summary>\n      /// Gets the calculated boolean value.\n      /// </summary>\n      /// <returns>\n      /// The boolean value.\n      /// </returns>\n      public override bool GetBooleanValue()\n      {\n         return Concealed;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/CounterSlopeCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Utility;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Windows.Media;\r\nusing static Revit.IFC.Export.Utility.ParameterUtil;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate slope value.\r\n   /// </summary>\r\n   class CounterSlopeCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double? m_CounterSlope = null;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static CounterSlopeCalculator s_Instance = new CounterSlopeCalculator();\r\n\r\n      /// <summary>\r\n      /// The CounterSlopeCalculator instance.\r\n      /// </summary>\r\n      public static CounterSlopeCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates slope value.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>True if the operation succeed, false otherwise.</returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         if(extrusionCreationData == null)\r\n            return false;\r\n\r\n         double slope = extrusionCreationData.Slope;\r\n\r\n         if (!MathUtil.IsAlmostZero(slope))\r\n         { \r\n            m_CounterSlope = UnitUtil.ScaleAngle(Math.PI / 2.0) - slope;\r\n            return true;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         if (m_CounterSlope.HasValue)\r\n            return m_CounterSlope.Value;\r\n         else\r\n            return 0.0;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/CrossSectionAreaCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate cross section area.\r\n   /// </summary>\r\n   class CrossSectionAreaCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_Area = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static CrossSectionAreaCalculator s_Instance = new CrossSectionAreaCalculator();\r\n\r\n      /// <summary>\r\n      /// The CrossSectionAreaCalculator instance.\r\n      /// </summary>\r\n      public static CrossSectionAreaCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates cross area.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"extrusionCreationData\">\r\n      /// The IFCExportBodyParams.\r\n      /// </param>\r\n      /// <param name=\"element\">\r\n      /// The element to calculate the value.\r\n      /// </param>\r\n      /// <param name=\"elementType\">\r\n      /// The element type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         double crossSectionArea = 0;\r\n\r\n         // 1. Check override parameter\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out crossSectionArea, \r\n            entryMap.CompatibleRevitParameterName, \"IfcQtyCrossSectionArea\") != null)\r\n         {\r\n            m_Area = UnitUtil.ScaleArea(crossSectionArea);\r\n            if (m_Area > MathUtil.Eps() * MathUtil.Eps())\r\n               return true;\r\n         }\r\n\r\n         // 2. try using extrusion data\r\n         if (extrusionCreationData != null)\r\n         {\r\n            m_Area = extrusionCreationData.ScaledArea;\r\n            if (m_Area > MathUtil.Eps() * MathUtil.Eps())\r\n               return true;\r\n         }\r\n\r\n         // 3. Use the builtin parameter after extrusionCreationData because the HOST_AREA_COMPUTED returns total area\r\n         if (ParameterUtil.GetDoubleValueFromElement(element, BuiltInParameter.HOST_AREA_COMPUTED, out crossSectionArea) != null)\r\n         {\r\n            m_Area = UnitUtil.ScaleArea(crossSectionArea);\r\n            if (m_Area > MathUtil.Eps() * MathUtil.Eps())\r\n               return true;\r\n         }\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_Area;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/DepthCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Autodesk.Revit.DB.Structure;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate the depth of a provision for void.\n   /// </summary>\n   class DepthCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double m_Depth = 0.0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static DepthCalculator s_Instance = new DepthCalculator();\n\n      /// <summary>\n      /// The ProvisionForVoidDepthCalculator instance.\n      /// </summary>\n      public static DepthCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates the depth of a provision for void.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Depth, entryMap.CompatibleRevitParameterName, \"IfcQtyDepth\") != null)\n         {\n            m_Depth = UnitUtil.ScaleLength(m_Depth);\n            if (m_Depth > MathUtil.Eps() * MathUtil.Eps())\n               return true;\n         }\n\n         if (extrusionCreationData == null)\n            return false;\n\n         // For Slab, Depth is equal to the extrusion length (from ScaledLength)\n         IFCAnyHandle hnd = ExporterCacheManager.ElementToHandleCache.Find(element.Id);\n         if (IFCAnyHandleUtil.IsSubTypeOf(hnd, IFCEntityType.IfcSlab))\n         {\n            m_Depth = extrusionCreationData.ScaledLength;\n         }\n         else\n         {\n            m_Depth = extrusionCreationData.ScaledHeight;\n         }\n\n         return (m_Depth > MathUtil.Eps());\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_Depth;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/DiameterCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Autodesk.Revit.DB.Structure;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Export.Toolkit;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate the diameter of a provision for void.\n   /// </summary>\n   class DiameterCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double m_Diameter = 0.0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static DiameterCalculator s_Instance = new DiameterCalculator();\n\n      /// <summary>\n      /// The ProvisionForVoidDiameterCalculator instance.\n      /// </summary>\n      public static DiameterCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates the diameter of a provision for void.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Diameter, entryMap.CompatibleRevitParameterName, \"IfcQtyDiameter\") != null)\n         {\n            m_Diameter = UnitUtil.ScaleLength(m_Diameter);\n            if (m_Diameter > MathUtil.Eps() * MathUtil.Eps())\n               return true;\n         }\n\n         if (extrusionCreationData == null)\n            return false;\n\n         // For ProvisionForVoid\n         ShapeCalculator shapeCalculator = ShapeCalculator.Instance;\n         if (shapeCalculator != null && shapeCalculator.GetCurrentElement() == element)\n         {\n            if (String.Compare(shapeCalculator.GetStringValue(), IFCProvisionForVoidShapeType.Round.ToString()) == 0)\n            {\n               m_Diameter = extrusionCreationData.ScaledOuterPerimeter / Math.PI;\n               if (m_Diameter > MathUtil.Eps())\n                  return true;\n            }\n         }\n\n         return false;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_Diameter;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/ExtendToStructureCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate extend to structure value for a wall.\r\n   /// </summary>\r\n   class ExtendToStructureCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A boolean variable to keep the calculated value.\r\n      /// </summary>\r\n      private bool m_ExtendToStructure = false;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static ExtendToStructureCalculator s_Instance = new ExtendToStructureCalculator();\r\n\r\n      /// <summary>\r\n      /// The ExtendToStructureCalculator instance.\r\n      /// </summary>\r\n      public static ExtendToStructureCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates extend to structure value for a wall.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"extrusionCreationData\">\r\n      /// The IFCExportBodyParams.\r\n      /// </param>\r\n      /// <param name=\"element,\">\r\n      /// The element to calculate the value.\r\n      /// </param>\r\n      /// <param name=\"elementType\">\r\n      /// The element type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         Wall wall = element as Wall;\r\n         if (wall != null)\r\n         {\r\n            m_ExtendToStructure = ExporterIFCUtils.IsWallJoinedToTop(wall);\r\n            return true;\r\n         }\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated boolean value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The boolean value.\r\n      /// </returns>\r\n      public override bool GetBooleanValue()\r\n      {\r\n         return m_ExtendToStructure;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/FinishCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate load bearing value for a column.\n   /// </summary>\n   class FinishCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A boolean variable to keep the calculated value.\n      /// </summary>\n      private string m_Finish = string.Empty;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static FinishCalculator s_Instance = new FinishCalculator();\n\n      /// <summary>\n      /// The CoveringFinishCalculator instance.\n      /// </summary>\n      public static FinishCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates covering finish value.\n      /// </summary>\n      /// <remarks>\n      /// True for structural columns, and false for architectural ones.\n      /// </remarks>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         if (ParameterUtil.GetStringValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Finish, entryMap.CompatibleRevitParameterName) != null\n            && !string.IsNullOrEmpty(m_Finish))\n               return true;\n\n         if (element is Ceiling)\n         {\n            m_Finish = string.Empty;\n            ISet<ElementId> matIds = HostObjectExporter.GetFinishMaterialIds(element as HostObject);\n            foreach (ElementId matId in matIds)\n            {\n               string materialName = NamingUtil.GetMaterialName(element.Document, matId);\n               if (string.IsNullOrWhiteSpace(materialName))\n                  continue;\n               m_Finish += materialName + \";\";\n            }\n            return !string.IsNullOrEmpty(m_Finish);\n         }\n         return false;\n      }\n\n      /// <summary>\n      /// Gets the calculated boolean value.\n      /// </summary>\n      /// <returns>\n      /// The boolean value.\n      /// </returns>\n      public override string GetStringValue()\n      {\n         return m_Finish;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/FireRatingCalculator.cs",
    "content": "﻿// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate Fire Rating value for an element.\n   /// </summary>\n   class FireRatingCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A string variable to keep the calculated value.\n      /// </summary>\n      string m_FireRating = String.Empty;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static FireRatingCalculator s_Instance = new FireRatingCalculator();\n\n      /// <summary>\n      /// The FireRatingCalculator instance.\n      /// </summary>\n      public static FireRatingCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates the reference.\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         if (ParameterUtil.GetStringValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_FireRating, entryMap.CompatibleRevitParameterName, \"Fire Rating\") != null\n            && !string.IsNullOrEmpty(m_FireRating))\n            return true;\n\n         return false;\n      }\n\n      /// <summary>\n      /// Gets the calculated string value.\n      /// </summary>\n      /// <returns>\n      /// The string value.\n      /// </returns>\n      public override string GetStringValue()\n      {\n         return m_FireRating;\n      }\n   }\n}\n\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/GrossAreaCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate gross area.\r\n   /// </summary>\r\n   class GrossAreaCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_Area = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static GrossAreaCalculator s_Instance = new GrossAreaCalculator();\r\n\r\n      /// <summary>\r\n      /// The GrossAreaCalculator instance.\r\n      /// </summary>\r\n      public static GrossAreaCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates cross area.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"extrusionCreationData\">\r\n      /// The IFCExportBodyParams.\r\n      /// </param>\r\n      /// <param name=\"element\">\r\n      /// The element to calculate the value.\r\n      /// </param>\r\n      /// <param name=\"elementType\">\r\n      /// The element type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Area, entryMap.CompatibleRevitParameterName, \"IfcQtyGrossArea\");\r\n         m_Area = UnitUtil.ScaleArea(m_Area);\r\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\r\n            return true;\r\n\r\n         if (extrusionCreationData != null)\r\n         {\r\n            m_Area = extrusionCreationData.ScaledArea;\r\n\r\n            if (m_Area > MathUtil.Eps() * MathUtil.Eps())\r\n               return true;\r\n         }\r\n\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, BuiltInParameter.HOST_AREA_COMPUTED, out m_Area) != null)\r\n         {\r\n            m_Area = UnitUtil.ScaleArea(m_Area);\r\n            if (m_Area > MathUtil.Eps() * MathUtil.Eps())\r\n               return true;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_Area;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/GrossCeilingAreaCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Common.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate gross area.\n   /// </summary>\n   class GrossCeilingAreaCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double m_Area = 0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static GrossCeilingAreaCalculator s_Instance = new GrossCeilingAreaCalculator();\n\n      /// <summary>\n      /// The GrossAreaCalculator instance.\n      /// </summary>\n      public static GrossCeilingAreaCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates cross area.\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Area, entryMap.CompatibleRevitParameterName, \"IfcQtyGrossCeilingArea\");\n         m_Area = UnitUtil.ScaleArea(m_Area);\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\n            return true;\n\n         m_Area = UnitUtil.ScaleArea(CalculateSpatialElementGrossCeilingArea(element as SpatialElement));\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\n            return true;\n\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, BuiltInParameter.HOST_AREA_COMPUTED, out m_Area) != null)\n         {\n            m_Area = UnitUtil.ScaleArea(m_Area);\n            if (m_Area > MathUtil.Eps() * MathUtil.Eps())\n               return true;\n         }\n\n         if (extrusionCreationData == null)\n            return false;\n\n         m_Area = extrusionCreationData.ScaledArea;\n\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\n            return true;\n\n         return false;\n      }\n\n      private double CalculateSpatialElementGrossCeilingArea(SpatialElement spatialElement)\n      {\n         double area = 0.0;\n\n         if (spatialElement == null)\n            return area;\n\n         // Get the outer boundary loops of the SpatialElement.\n         IList<IList<BoundarySegment>> boundaryLoops = spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions());\n\n         //Search for a outer loop with the largest area.\n         foreach (IList<BoundarySegment> boundaryLoop in boundaryLoops)\n         {\n            CurveLoop curveLoop = new CurveLoop();\n            foreach (BoundarySegment boundarySegment in boundaryLoop)\n            {\n               try\n               {\n                  Curve curve = boundarySegment.GetCurve();\n                  curveLoop.Append(curve);\n               }\n               catch (Autodesk.Revit.Exceptions.ArgumentException)\n               {\n                  //For some special cases, BoundarySegments of the element are not valid for CurveLoop creation\n                  //(curveLoop.Append(curve) throws exception because \"This curve will make the loop discontinuous.\") \n\n                  return 0.0;\n               }\n            }\n\n            double loopArea = ExporterIFCUtils.ComputeAreaOfCurveLoops(new List<CurveLoop>() { curveLoop });\n\n            if (area < loopArea)\n               area = loopArea;\n         }\n\n         return area;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_Area;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/GrossCrossSectionAreaCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Common.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate gross cross section area.\n   /// </summary>\n   class GrossCrossSectionAreaCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double m_Area = 0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static GrossCrossSectionAreaCalculator s_Instance = new GrossCrossSectionAreaCalculator();\n\n      /// <summary>\n      /// The GrossCrossSectionAreaCalculator instance.\n      /// </summary>\n      public static GrossCrossSectionAreaCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates gross cross area.\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         double crossSectionArea = 0;\n\n         // 1. Check override parameter\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out crossSectionArea, entryMap.CompatibleRevitParameterName, \"IfcQtyGrossCrossSectionArea\");\n         m_Area = UnitUtil.ScaleArea(crossSectionArea);\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\n            return true;\n\n         // 2. try using extrusion data\n         if (extrusionCreationData == null)\n            return false;\n\n         m_Area = extrusionCreationData.ScaledArea;\n         return m_Area > MathUtil.Eps() * MathUtil.Eps();\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_Area;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/GrossFloorAreaCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Common.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate gross area.\n   /// </summary>\n   class GrossFloorAreaCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double m_Area = 0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static GrossFloorAreaCalculator s_Instance = new GrossFloorAreaCalculator();\n\n      /// <summary>\n      /// The GrossAreaCalculator instance.\n      /// </summary>\n      public static GrossFloorAreaCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates cross area.\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Area, entryMap.CompatibleRevitParameterName, \"IfcQtyGrossFloorArea\");\n         m_Area = UnitUtil.ScaleArea(m_Area);\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\n            return true;\n\n         m_Area = UnitUtil.ScaleArea(CalculateSpatialElementGrossFloorArea(element as SpatialElement));\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\n            return true;\n\n         if (extrusionCreationData == null)\n            return false;\n\n         m_Area = extrusionCreationData.ScaledArea;\n\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\n            return true;\n\n         return false;\n      }\n\n      private double CalculateSpatialElementGrossFloorArea(SpatialElement spatialElement)\n      {\n         double area = 0.0;\n\n         if (spatialElement == null)\n            return area;\n\n         // Get the outer boundary loops of the SpatialElement.\n         IList<IList<BoundarySegment>> boundaryLoops = spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions());\n\n         //Search for a outer loop with the largest area.\n         foreach (IList<BoundarySegment> boundaryLoop in boundaryLoops)\n         {\n            CurveLoop curveLoop = new CurveLoop();\n            foreach (BoundarySegment boundarySegment in boundaryLoop)\n            {\n               try\n               {\n                  Curve curve = boundarySegment.GetCurve();\n                  curveLoop.Append(curve);\n               }\n               catch (Autodesk.Revit.Exceptions.ArgumentException)\n               {\n                  //For some special cases, BoundarySegments of the element are not valid for CurveLoop creation\n                  //(curveLoop.Append(curve) throws exception because \"This curve will make the loop discontinuous.\") \n\n                  return 0.0;\n               }\n            }\n\n            double loopArea = ExporterIFCUtils.ComputeAreaOfCurveLoops(new List<CurveLoop>() { curveLoop });\n\n            if (area < loopArea)\n               area = loopArea;\n         }\n\n         return area;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_Area;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/GrossSideAreaCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Common.Enums;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate gross side area.\n   /// </summary>\n   class GrossSideAreaCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double m_Area = 0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static GrossSideAreaCalculator s_Instance = new GrossSideAreaCalculator();\n\n      /// <summary>\n      /// The GrossSideAreaCalculator instance.\n      /// </summary>\n      public static GrossSideAreaCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates cross side area.\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Area, entryMap.CompatibleRevitParameterName, \"IfcQtyGrossSideArea\");\n         m_Area = UnitUtil.ScaleArea(m_Area);\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\n            return true;\n\n         IFCAnyHandle hnd = ExporterCacheManager.ElementToHandleCache.Find(element.Id);\n         if (IFCAnyHandleUtil.IsSubTypeOf(hnd, IFCEntityType.IfcCurtainWall) \n            && ParameterUtil.GetDoubleValueFromElementOrSymbol(element, BuiltInParameter.HOST_AREA_COMPUTED, out m_Area) != null)\n         {\n            m_Area = UnitUtil.ScaleArea(m_Area);\n            if (m_Area > MathUtil.Eps() * MathUtil.Eps())\n               return true;\n         }\n\n         if (extrusionCreationData == null)\n            return false;\n\n         m_Area = extrusionCreationData.ScaledArea;\n\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\n            return true;\n\n         return false;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_Area;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/GrossSurfaceAreaCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate gross surface area.\r\n   /// </summary>\r\n   class GrossSurfaceAreaCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_Area = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static GrossSurfaceAreaCalculator s_Instance = new GrossSurfaceAreaCalculator();\r\n\r\n      /// <summary>\r\n      /// The GrossSurfaceAreaCalculator instance.\r\n      /// </summary>\r\n      public static GrossSurfaceAreaCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates gross surface area.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"extrusionCreationData\">\r\n      /// The IFCExportBodyParams.\r\n      /// </param>\r\n      /// <param name=\"element\">\r\n      /// The element to calculate the value.\r\n      /// </param>\r\n      /// <param name=\"elementType\">\r\n      /// The element type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Area, entryMap.CompatibleRevitParameterName, \"IfcQtyGrossSurfaceArea\") != null)\r\n         {\r\n            m_Area = UnitUtil.ScaleArea(m_Area);\r\n            if (m_Area > MathUtil.Eps() * MathUtil.Eps())\r\n               return true;\r\n         }\r\n\r\n         if (extrusionCreationData == null)\r\n            return false;\r\n\r\n         double extrudedArea = extrusionCreationData.ScaledArea;\r\n\r\n         // The base units for length and area may be different, especially in metric.\r\n         // E.g., the length unit may be in mm, while the area unit may be m^2.\r\n         // As such, we have to unscale the length units, and then rescale to the area units.\r\n         double length = UnitUtil.UnscaleLength(extrusionCreationData.ScaledLength);\r\n         double perimeter = UnitUtil.UnscaleLength(extrusionCreationData.ScaledOuterPerimeter);\r\n         if (length > MathUtil.Eps() && perimeter > MathUtil.Eps())\r\n         {\r\n            m_Area = UnitUtil.ScaleArea(perimeter * length) + 2 * extrudedArea;\r\n            return true;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_Area;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/GrossVolumeCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate gross volume.\r\n   /// </summary>\r\n   class GrossVolumeCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_Volume = 0;\r\n\r\n      /// <summary>\r\n      /// The SlabGrossVolumeCalculator instance.\r\n      /// </summary>\r\n      public static GrossVolumeCalculator Instance { get; } = new GrossVolumeCalculator();\r\n\r\n      /// <summary>\r\n      /// Calculates gross volume.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>True if the operation succeeded, false otherwise.</returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Volume, entryMap.CompatibleRevitParameterName, \"IfcQtyGrossVolume\") != null)\r\n         {\r\n            m_Volume = UnitUtil.ScaleVolume(m_Volume);\r\n            if (m_Volume > MathUtil.Eps() * MathUtil.Eps() * MathUtil.Eps())\r\n               return true;\r\n         }\r\n\r\n         m_Volume = UnitUtil.ScaleVolume(CalculateSpatialElementGrossVolume(element as SpatialElement, extrusionCreationData));\r\n         if (m_Volume > MathUtil.Eps() * MathUtil.Eps() * MathUtil.Eps())\r\n            return true;\r\n\r\n         if (extrusionCreationData == null)\r\n            return false;\r\n\r\n         // While it would be unlikely that area and volume have different base length units,\r\n         // it is still safer to unscale and rescale the results.  For length, it is somewhat\r\n         // common to have mm as the length unit and m^3 as the volume unit.\r\n         double area = UnitUtil.UnscaleArea(extrusionCreationData.ScaledArea);\r\n         double length = UnitUtil.UnscaleLength(extrusionCreationData.ScaledLength);\r\n         m_Volume = UnitUtil.ScaleVolume(area * length);\r\n         return (m_Volume > MathUtil.Eps() * MathUtil.Eps() * MathUtil.Eps());\r\n      }\r\n\r\n      private double CalculateSpatialElementGrossVolume(SpatialElement spatialElement, IFCExportBodyParams extrusionCreationData)\r\n      {\r\n         double area = 0.0;\r\n\r\n         if (spatialElement == null || extrusionCreationData == null)\r\n            return area;\r\n\r\n         // Get the outer boundary loops of the SpatialElement.\r\n         IList<IList<BoundarySegment>> boundaryLoops = spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions());\r\n\r\n         //Search for a outer loop with the largest area.\r\n         foreach (IList<BoundarySegment> boundaryLoop in boundaryLoops)\r\n         {\r\n            CurveLoop curveLoop = new CurveLoop();\r\n            foreach (BoundarySegment boundarySegment in boundaryLoop)\r\n            {\r\n               try\r\n               {\r\n                  Curve curve = boundarySegment.GetCurve();\r\n                  curveLoop.Append(curve);\r\n               }\r\n               catch (Autodesk.Revit.Exceptions.ArgumentException)\r\n               {\r\n                  //For some special cases, BoundarySegments of the element are not valid for CurveLoop creation\r\n                  //(curveLoop.Append(curve) throws exception because \"This curve will make the loop discontinuous.\") \r\n\r\n                  return 0.0;\r\n               }\r\n            }\r\n\r\n            double loopArea = ExporterIFCUtils.ComputeAreaOfCurveLoops(new List<CurveLoop>() { curveLoop });\r\n\r\n            if (area < loopArea)\r\n               area = loopArea;\r\n         }\r\n\r\n         double length = UnitUtil.UnscaleLength(extrusionCreationData.ScaledLength);\r\n\r\n         return area * length;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>The calculated volume.</returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_Volume;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/GrossWeightCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate gross weight.\r\n   /// </summary>\r\n   class GrossWeightCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_Weight = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static GrossWeightCalculator s_Instance = new GrossWeightCalculator();\r\n\r\n   /// <summary>\r\n   /// The GrossWeightCalculator instance.\r\n   /// </summary>\r\n   public static GrossWeightCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates gross weight from parameter.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"extrusionCreationData\">\r\n      /// The IFCExportBodyParams.\r\n      /// </param>\r\n      /// <param name=\"element\">\r\n      /// The element to calculate the value.\r\n      /// </param>\r\n      /// <param name=\"elementType\">\r\n      /// The element type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Weight, entryMap.CompatibleRevitParameterName, \"IfcQtyGrossWeight\");\r\n\r\n         if (m_Weight > MathUtil.Eps())\r\n            return true;\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_Weight;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/HeightCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.Architecture;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Export.Toolkit;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate height for a railing.\n   /// </summary>\n   class HeightCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double m_Height = 0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static HeightCalculator s_Instance = new HeightCalculator();\n\n      /// <summary>\n      /// The RailingHeightCalculator instance.\n      /// </summary>\n      public static HeightCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates height for a Revit element.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>True if the operation succeed, false otherwise.</returns>\n      public override bool Calculate(ExporterIFC exporterIFC, \n         IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, \n         EntryMap entryMap)\n      {\n         m_Height = 0.0;\n         if (element == null)\n            return false;\n\n         // For Railing\n         RailingType railingType = element.Document.GetElement(element.GetTypeId()) as RailingType;\n         if (railingType != null)\n         {\n            m_Height = UnitUtil.ScaleLength(railingType.TopRailHeight);\n            return true;\n         }\n\n         double eps = MathUtil.Eps();\n\n         // For ProvisionForVoid\n         ShapeCalculator shapeCalculator = ShapeCalculator.Instance;\n         if (shapeCalculator != null && shapeCalculator.GetCurrentElement() == element)\n         {\n            if (String.Compare(shapeCalculator.GetStringValue(), IFCProvisionForVoidShapeType.Rectangle.ToString()) == 0)\n            {\n               IFCAnyHandle rectProfile = shapeCalculator.GetCurrentProfileHandle();\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(rectProfile))\n               {\n                  // This is already scaled.\n                  double? height = IFCAnyHandleUtil.GetDoubleAttribute(rectProfile, \"YDim\");\n                  m_Height = height.HasValue ? height.Value : 0.0;\n                  if (m_Height > eps)\n                     return true;\n               }\n            }\n         }\n\n         ElementId categoryId = CategoryUtil.GetSafeCategoryId(element);\n         IFCAnyHandle hnd = ExporterCacheManager.ElementToHandleCache.Find(element.Id);\n\n         m_Height = 0.0;\n         if (IFCAnyHandleUtil.IsSubTypeOf(hnd, IFCEntityType.IfcDoor) || categoryId == new ElementId(BuiltInCategory.OST_Doors))\n         {\n            ParameterUtil.GetDoubleValueFromElementOrSymbol(element, BuiltInParameter.DOOR_HEIGHT, out m_Height);\n         }\n         else if (IFCAnyHandleUtil.IsSubTypeOf(hnd, IFCEntityType.IfcWindow) || categoryId == new ElementId(BuiltInCategory.OST_Windows))\n         {\n            ParameterUtil.GetDoubleValueFromElementOrSymbol(element, BuiltInParameter.WINDOW_HEIGHT, out m_Height);\n         }\n         else if (IFCAnyHandleUtil.IsSubTypeOf(hnd, IFCEntityType.IfcCurtainWall))\n         {\n            BoundingBoxXYZ boundingBox = element.get_BoundingBox(null);\n            if (boundingBox != null)\n               m_Height = boundingBox.Max.Z - boundingBox.Min.Z;\n         }\n\n         if (m_Height > eps)\n         {\n            m_Height = UnitUtil.ScaleLength(m_Height);\n            return true;\n         }\n\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Height, entryMap.CompatibleRevitParameterName);\n\n         if (m_Height > eps)\n         {\n            m_Height = UnitUtil.ScaleLength(m_Height);\n            return true;\n         }\n\n         // For other elements\n         m_Height = extrusionCreationData?.ScaledHeight ?? 0.0;\n         return m_Height > eps;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_Height;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/ISOCD3766BendingEndHookCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate the end hook angle for a rebar.\r\n   /// </summary>\r\n   class ISOCD3766BendingEndHookCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_Angle = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static ISOCD3766BendingEndHookCalculator s_Instance = new ISOCD3766BendingEndHookCalculator();\r\n\r\n      /// <summary>\r\n      /// The ISOCD3766BendingEndHookCalculator instance.\r\n      /// </summary>\r\n      public static ISOCD3766BendingEndHookCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates the end hook angle for a rebar.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         if (element is Rebar)\r\n         {\r\n            Rebar rebar = element as Rebar;\r\n            if (rebar.CanBeMatchedWithMultipleShapes())\r\n               return false; // In case of the Bent free form the hook angle should be obtain from subelement\r\n         }\r\n\r\n         RebarBendData bendData = null;\r\n         if (element is Rebar)\r\n            bendData = (element as Rebar).GetBendData();\r\n         else if (element is RebarInSystem)\r\n            bendData = (element as RebarInSystem).GetBendData();\r\n\r\n         if (bendData != null)\r\n         {\r\n            if (bendData.HookLength1 > MathUtil.Eps())\r\n            {\r\n               // HookAngle1 is already in degress, so convert to radians and then scale.\r\n               double hookAngleInRadians = bendData.HookAngle1 * (Math.PI / 180.0);\r\n               m_Angle = UnitUtil.ScaleAngle(hookAngleInRadians);\r\n               return true;\r\n            }\r\n         }\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates the end hook angle for a rebar subelement, from the subelement cache. This is used for Free Form Rebar when the Workshop intructions are Bent.\r\n      /// <param name=\"element\">\r\n      /// The element to calculate the value.\r\n      /// </param>\r\n      /// <param name=\"handle\">\r\n      /// The IFC handle that may offer parameter overrides.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool GetParameterFromSubelementCache(Element element, IFCAnyHandle handle)\r\n      {\r\n         Parameter param = element.get_Parameter(BuiltInParameter.REBAR_ELEM_HOOK_END_TYPE);\r\n         if (param == null)\r\n            return false;\r\n\r\n         if (param.Definition == null)\r\n            return false;\r\n\r\n         ElementIdParameterValue paramVal = ParameterUtil.getParameterValueByNameFromSubelementCache(element.Id, handle, param.Definition.Name) as ElementIdParameterValue;\r\n         if (paramVal != null)\r\n         {\r\n            RebarHookType hookType = element.Document.GetElement(paramVal.Value) as RebarHookType;\r\n            if (hookType == null)\r\n               return false;\r\n\r\n            m_Angle = UnitUtil.ScaleAngle(hookType.HookAngle);\r\n\r\n            return true;\r\n         }\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_Angle;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/ISOCD3766BendingStartHookCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate the start hook angle for a rebar.\r\n   /// </summary>\r\n   class ISOCD3766BendingStartHookCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_Angle = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static ISOCD3766BendingStartHookCalculator s_Instance = new ISOCD3766BendingStartHookCalculator();\r\n\r\n      /// <summary>\r\n      /// The ISOCD3766BendingStartHookCalculator instance.\r\n      /// </summary>\r\n      public static ISOCD3766BendingStartHookCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates the start hook angle for a rebar.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         if (element is Rebar)\r\n         {\r\n            Rebar rebar = element as Rebar;\r\n            if (rebar.CanBeMatchedWithMultipleShapes())\r\n               return false; // In case of the Bent free form the hook angle should be obtain from subelement\r\n         }\r\n\r\n         RebarBendData bendData = null;\r\n         if (element is Rebar)\r\n            bendData = (element as Rebar).GetBendData();\r\n         else if (element is RebarInSystem)\r\n            bendData = (element as RebarInSystem).GetBendData();\r\n\r\n         if (bendData != null)\r\n         {\r\n            if (bendData.HookLength0 > MathUtil.Eps())\r\n            {\r\n               // HookAngle0 is already in degress, so convert to radians and then scale.\r\n               double hookAngleInRadians = bendData.HookAngle0 * (Math.PI / 180.0);\r\n               m_Angle = UnitUtil.ScaleAngle(hookAngleInRadians);\r\n               return true;\r\n            }\r\n         }\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates the start hook angle for a rebar subelement, from the subelement cache. This is used for Free Form Rebar when the Workshop intructions are Bent.\r\n      /// <param name=\"element\">\r\n      /// The element to calculate the value.\r\n      /// </param>\r\n      /// <param name=\"handle\">\r\n      /// The IFC handle that may offer parameter overrides.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool GetParameterFromSubelementCache(Element element, IFCAnyHandle handle)\r\n      {\r\n         Parameter param = element.get_Parameter(BuiltInParameter.REBAR_ELEM_HOOK_START_TYPE);\r\n         if (param == null)\r\n            return false;\r\n\r\n         if (param.Definition == null)\r\n            return false;\r\n\r\n         ElementIdParameterValue paramVal = ParameterUtil.getParameterValueByNameFromSubelementCache(element.Id, handle, param.Definition.Name) as ElementIdParameterValue;\r\n         if (paramVal != null)\r\n         {\r\n            RebarHookType hookType = element.Document.GetElement(paramVal.Value) as RebarHookType;\r\n            if (hookType == null)\r\n               return false;\r\n\r\n            m_Angle = UnitUtil.ScaleAngle(hookType.HookAngle);\r\n\r\n            return true;\r\n         }\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_Angle;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/ISOCD3766ShapeCode.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate the shape code for a rebar.\r\n   /// </summary>\r\n   class ISOCD3766ShapeCodeCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A string variable to keep the calculated value.\r\n      /// </summary>\r\n      private string m_ShapeCode = null;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static ISOCD3766ShapeCodeCalculator s_Instance = new ISOCD3766ShapeCodeCalculator();\r\n\r\n      /// <summary>\r\n      /// The ISOCD3766ShapeCodeCalculator instance.\r\n      /// </summary>\r\n      public static ISOCD3766ShapeCodeCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines if the calculator allows string values to be cached.\r\n      /// </summary>\r\n      public override bool CacheStringValues\r\n      {\r\n         get { return true; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates the shape code for a rebar.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         ElementId rebarShapeId;\r\n         if (ParameterUtil.GetElementIdValueFromElement(element, BuiltInParameter.REBAR_SHAPE, out rebarShapeId) == null)\r\n            return false;\r\n\r\n         Element rebarShape = element.Document.GetElement(rebarShapeId);\r\n         if (rebarShape == null)\r\n            return false;\r\n\r\n         m_ShapeCode = rebarShape.Name;\r\n         return true;\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Calculates the shape code for a rebar subelement, from the subelement cache. This is used for Free Form Rebar when the Workshop intructions are Bent.\r\n      /// <param name=\"element\">\r\n      /// The element to calculate the value.\r\n      /// </param>\r\n      /// <param name=\"handle\">\r\n      /// The IFC handle that may offer parameter overrides.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool GetParameterFromSubelementCache(Element element, IFCAnyHandle handle)\r\n      {\r\n         Parameter param = element.get_Parameter(BuiltInParameter.REBAR_SHAPE);\r\n         if (param == null)\r\n            return false;\r\n\r\n         if (param.Definition == null)\r\n            return false;\r\n\r\n         ElementIdParameterValue paramVal = ParameterUtil.getParameterValueByNameFromSubelementCache(element.Id, handle, param.Definition.Name) as ElementIdParameterValue;\r\n         if (paramVal != null)\r\n         {\r\n            Element rebarShape = element.Document.GetElement(paramVal.Value);\r\n            if (rebarShape == null)\r\n               return false;\r\n\r\n            m_ShapeCode = rebarShape.Name;\r\n\r\n            return true;\r\n         }\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated string value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The string value.\r\n      /// </returns>\r\n      public override string GetStringValue()\r\n      {\r\n         return m_ShapeCode;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/ISOCD3766ShapeParameterACalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate shape parameter \"A\" for a rebar.\r\n   /// </summary>\r\n   class ISOCD3766ShapeParameter_aCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_ShapeParameterA = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static ISOCD3766ShapeParameter_aCalculator s_Instance = new ISOCD3766ShapeParameter_aCalculator();\r\n\r\n      /// <summary>\r\n      /// The ISOCD3766ShapeParameter_aCalculator instance.\r\n      /// </summary>\r\n      public static ISOCD3766ShapeParameter_aCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates shape parameter A for a rebar.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         if (element is Rebar)\r\n         {\r\n            Rebar rebar = element as Rebar;\r\n            if (rebar.CanBeMatchedWithMultipleShapes())\r\n               return false; // In case of the Bent free form the parameter should be obtain from subelement. (It can have value for another bar in set and we don't want that value). \r\n         }\r\n\r\n         bool ret = (ParameterUtil.GetDoubleValueFromElement(element, GroupTypeId.Geometry, \"A\", out m_ShapeParameterA) != null);\r\n         if (ret)\r\n            m_ShapeParameterA = UnitUtil.ScaleLength(m_ShapeParameterA);\r\n         return ret;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Retrieves shape parameter A for a rebar subelement, from the subelement cache.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"handle\">The IFC handle that may offer parameter overrides.</param>\r\n      /// <returns>True if the operation succeed, false otherwise.</returns>\r\n      public override bool GetParameterFromSubelementCache(Element element, IFCAnyHandle handle)\r\n      {\r\n         DoubleParameterValue paramVal = ParameterUtil.getParameterValueByNameFromSubelementCache(element.Id, handle, \"A\") as DoubleParameterValue;\r\n         if (paramVal != null)\r\n         {\r\n            m_ShapeParameterA = UnitUtil.ScaleLength(paramVal.Value);\r\n            return true;\r\n         }\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>The double value.</returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_ShapeParameterA;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/ISOCD3766ShapeParameterBCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate shape parameter \"B\" for a rebar.\r\n   /// </summary>\r\n   class ISOCD3766ShapeParameter_bCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_ShapeParameterB = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static ISOCD3766ShapeParameter_bCalculator s_Instance = new ISOCD3766ShapeParameter_bCalculator();\r\n\r\n      /// <summary>\r\n      /// The ISOCD3766ShapeParameter_bCalculator instance.\r\n      /// </summary>\r\n      public static ISOCD3766ShapeParameter_bCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates shape parameter B for a rebar.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>       \r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         if (element is Rebar)\r\n         {\r\n            Rebar rebar = element as Rebar;\r\n            if (rebar.CanBeMatchedWithMultipleShapes())\r\n               return false; // In case of the Bent free form the parameter should be obtain from subelement. (It can have value for another bar in set and we don't want that value). \r\n         }\r\n\r\n         bool ret = ParameterUtil.GetDoubleValueFromElement(element, GroupTypeId.Geometry, \"B\", out m_ShapeParameterB) != null;\r\n         if (ret)\r\n            m_ShapeParameterB = UnitUtil.ScaleLength(m_ShapeParameterB);\r\n         return ret;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Retrieves shape parameter B for a rebar subelement, from the subelement cache.\r\n      /// </summary>\r\n      /// <param name=\"element\">\r\n      /// The element to calculate the value.\r\n      /// </param>\r\n      /// <param name=\"handle\">\r\n      /// The IFC handle that may offer parameter overrides.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool GetParameterFromSubelementCache(Element element, IFCAnyHandle handle)\r\n      {\r\n         DoubleParameterValue paramVal = ParameterUtil.getParameterValueByNameFromSubelementCache(element.Id, handle, \"B\") as DoubleParameterValue;\r\n         if (paramVal != null)\r\n         {\r\n            m_ShapeParameterB = UnitUtil.ScaleLength(paramVal.Value);\r\n            return true;\r\n         }\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_ShapeParameterB;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/ISOCD3766ShapeParameterCCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate shape parameter \"C\" for a rebar.\r\n   /// </summary>\r\n   class ISOCD3766ShapeParameter_cCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_ShapeParameterC = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static ISOCD3766ShapeParameter_cCalculator s_Instance = new ISOCD3766ShapeParameter_cCalculator();\r\n\r\n      /// <summary>\r\n      /// The ISOCD3766ShapeParameter_cCalculator instance.\r\n      /// </summary>\r\n      public static ISOCD3766ShapeParameter_cCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates shape parameter C for a rebar.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         if (element is Rebar)\r\n         {\r\n            Rebar rebar = element as Rebar;\r\n            if (rebar.CanBeMatchedWithMultipleShapes())\r\n               return false; // In case of the Bent free form the parameter should be obtain from subelement. (It can have value for another bar in set and we don't want that value). \r\n         }\r\n\r\n         bool ret = (ParameterUtil.GetDoubleValueFromElement(element, GroupTypeId.Geometry, \"C\", out m_ShapeParameterC) != null);\r\n         if (ret)\r\n            m_ShapeParameterC = UnitUtil.ScaleLength(m_ShapeParameterC);\r\n         return ret;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Retrieves shape parameter C for a rebar subelement, from the subelement cache.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"handle\">The IFC handle that may offer parameter overrides.</param>\r\n      /// <returns>True if the operation succeed, false otherwise.</returns>\r\n      public override bool GetParameterFromSubelementCache(Element element, IFCAnyHandle handle)\r\n      {\r\n         DoubleParameterValue paramVal = ParameterUtil.getParameterValueByNameFromSubelementCache(element.Id, handle, \"C\") as DoubleParameterValue;\r\n         if (paramVal != null)\r\n         {\r\n            m_ShapeParameterC = UnitUtil.ScaleLength(paramVal.Value);\r\n            return true;\r\n         }\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>The double value.</returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_ShapeParameterC;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/ISOCD3766ShapeParameterDCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate shape parameter \"D\" for a rebar.\r\n   /// </summary>\r\n   class ISOCD3766ShapeParameter_dCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_ShapeParameterD = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static ISOCD3766ShapeParameter_dCalculator s_Instance = new ISOCD3766ShapeParameter_dCalculator();\r\n\r\n      /// <summary>\r\n      /// The ISOCD3766ShapeParameter_dCalculator instance.\r\n      /// </summary>\r\n      public static ISOCD3766ShapeParameter_dCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates shape parameter D for a rebar.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         if (element is Rebar)\r\n         {\r\n            Rebar rebar = element as Rebar;\r\n            if (rebar.CanBeMatchedWithMultipleShapes())\r\n               return false; // In case of the Bent free form the parameter should be obtain from subelement. (It can have value for another bar in set and we don't want that value). \r\n         }\r\n\r\n         bool ret = (ParameterUtil.GetDoubleValueFromElement(element, GroupTypeId.Geometry, \"D\", out m_ShapeParameterD) != null);\r\n         if (ret)\r\n            m_ShapeParameterD = UnitUtil.ScaleLength(m_ShapeParameterD);\r\n         return ret;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Retrieves shape parameter D for a rebar subelement, from the subelement cache.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"handle\">The IFC handle that may offer parameter overrides.</param>\r\n      /// <returns>True if the operation succeed, false otherwise.</returns>\r\n      public override bool GetParameterFromSubelementCache(Element element, IFCAnyHandle handle)\r\n      {\r\n         DoubleParameterValue paramVal = ParameterUtil.getParameterValueByNameFromSubelementCache(element.Id, handle, \"D\") as DoubleParameterValue;\r\n         if (paramVal != null)\r\n         {\r\n            m_ShapeParameterD = UnitUtil.ScaleLength(paramVal.Value);\r\n            return true;\r\n         }\r\n         return false;\r\n      }\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>The double value.</returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_ShapeParameterD;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/ISOCD3766ShapeParameterECalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate shape parameter \"E\" for a rebar.\r\n   /// </summary>\r\n   class ISOCD3766ShapeParameter_eCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_ShapeParameterE = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static ISOCD3766ShapeParameter_eCalculator s_Instance = new ISOCD3766ShapeParameter_eCalculator();\r\n\r\n      /// <summary>\r\n      /// The ISOCD3766ShapeParameter_eCalculator instance.\r\n      /// </summary>\r\n      public static ISOCD3766ShapeParameter_eCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates shape parameter E for a rebar.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         if (element is Rebar)\r\n         {\r\n            Rebar rebar = element as Rebar;\r\n            if (rebar.CanBeMatchedWithMultipleShapes())\r\n               return false; // In case of the Bent free form the parameter should be obtain from subelement. (It can have value for another bar in set and we don't want that value). \r\n         }\r\n\r\n         bool ret = (ParameterUtil.GetDoubleValueFromElement(element, GroupTypeId.Geometry, \"E\", out m_ShapeParameterE) != null);\r\n         if (ret)\r\n            m_ShapeParameterE = UnitUtil.ScaleLength(m_ShapeParameterE);\r\n         return ret;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Retrieves shape parameter E for a rebar subelement, from the subelement cache.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"handle\">The IFC handle that may offer parameter overrides.</param>\r\n      /// <returns>True if the operation succeed, false otherwise.</returns>\r\n      public override bool GetParameterFromSubelementCache(Element element, IFCAnyHandle handle)\r\n      {\r\n         DoubleParameterValue paramVal = ParameterUtil.getParameterValueByNameFromSubelementCache(element.Id, handle, \"E\") as DoubleParameterValue;\r\n         if (paramVal != null)\r\n         {\r\n            m_ShapeParameterE = UnitUtil.ScaleLength(paramVal.Value);\r\n            return true;\r\n         }\r\n         return false;\r\n      }\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>The double value.</returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_ShapeParameterE;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/ISOCD3766ShapeParameterRCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Autodesk.Revit.DB.Structure;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate shape parameter \"R\" for a rebar.\n   /// </summary>\n   class ISOCD3766ShapeParameter_RCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double m_Radius = 0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static ISOCD3766ShapeParameter_RCalculator s_Instance = new ISOCD3766ShapeParameter_RCalculator();\n\n      /// <summary>\n      /// The ISOCD3766ShapeParameter_RCalculator instance.\n      /// </summary>\n      public static ISOCD3766ShapeParameter_RCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates the bending radius for a rebar.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         if (element is Rebar)\n         {\n            Rebar rebar = element as Rebar;\n            if (rebar.CanBeMatchedWithMultipleShapes())\n               return false; // In case of the Bent free form the parameter should be obtain from subelement. (It can have value for another bar in set and we don't want that value). \n         }\n\n         bool ret = (ParameterUtil.GetDoubleValueFromElement(element, GroupTypeId.Geometry, \"R\", out m_Radius) != null);\n         if (ret)\n            m_Radius = UnitUtil.ScaleLength(m_Radius);\n         return ret;\n      }\n\n      /// <summary>\n      /// Retrieves shape parameter R for a rebar subelement, from the subelement cache.\n      /// </summary>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"handle\">The IFC handle that may offer parameter overrides.</param>\n      /// <returns>True if the operation succeed, false otherwise.</returns>\n      public override bool GetParameterFromSubelementCache(Element element, IFCAnyHandle handle)\n      {\n         DoubleParameterValue paramVal = ParameterUtil.getParameterValueByNameFromSubelementCache(element.Id, handle, \"R\") as DoubleParameterValue;\n         if (paramVal != null)\n         {\n            m_Radius = UnitUtil.ScaleLength(paramVal.Value);\n            return true;\n         }\n         return false;\n      }\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_Radius;\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/IsExternalCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate external value for an element.\n   /// </summary>\n   class IsExternalCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A boolean variable to keep the calculated value.\n      /// </summary>\n      private bool? IsExternal { get; set; } = false;\n\n      /// <summary>\n      /// The IsExternalCalculator instance.\n      /// </summary>\n      public static IsExternalCalculator Instance { get; } = new IsExternalCalculator();\n\n      /// <summary>\n      /// Calculates external value for an element.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>True if the operation succeed, false otherwise.</returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         IsExternal = CategoryUtil.IsElementExternal(element);\n\n         if (IsExternal == null)\n            return false;\n\n         return true;\n      }\n\n      /// <summary>\n      /// Gets the calculated boolean value.\n      /// </summary>\n      /// <returns>The boolean value.</returns>\n      public override bool GetBooleanValue()\n      {\n         return IsExternal ?? false;\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/LengthCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.Architecture;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate gross area.\r\n   /// </summary>\r\n   class LengthCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_Length = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static LengthCalculator s_Instance = new LengthCalculator();\r\n\r\n   /// <summary>\r\n   /// The LengthCalculator instance.\r\n   /// </summary>\r\n   public static LengthCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates cross area.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"extrusionCreationData\">\r\n      /// The IFCExportBodyParams.\r\n      /// </param>\r\n      /// <param name=\"element\">\r\n      /// The element to calculate the value.\r\n      /// </param>\r\n      /// <param name=\"elementType\">\r\n      /// The element type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         double lengthFromParam = 0;\r\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out lengthFromParam, entryMap.CompatibleRevitParameterName, \"IfcQtyLength\");\r\n\r\n         m_Length = UnitUtil.ScaleLength(lengthFromParam);\r\n\r\n         // Check for Stair Run - Do special computation for the length\r\n         if (element is StairsRun)\r\n         {\r\n            StairsRun flight = element as StairsRun;\r\n            double flightLen = flight.GetStairsPath().GetExactLength();\r\n            flightLen = UnitUtil.ScaleLength(flightLen);\r\n            if (flightLen > MathUtil.Eps())\r\n            {\r\n               m_Length = flightLen;\r\n               return true;\r\n            }\r\n            // consider override as specified in a parameter\r\n            else if (m_Length > MathUtil.Eps())\r\n               return true;\r\n            // exit when none for StairsRun\r\n            else\r\n               return false;\r\n         }\r\n         else if (element is Railing)\r\n         {\r\n            ParameterUtil.GetDoubleValueFromElementOrSymbol(element, BuiltInParameter.CURVE_ELEM_LENGTH, out lengthFromParam);\r\n            m_Length = UnitUtil.ScaleLength(lengthFromParam);\r\n         }\r\n         else if (element is Wall)\r\n         {\r\n            Wall wallElement = element as Wall;\r\n            if (wallElement != null && wallElement.Location != null)\r\n            {\r\n               Curve wallAxis = (wallElement.Location as LocationCurve).Curve;\r\n               if (wallAxis != null)\r\n               {\r\n                  m_Length = UnitUtil.ScaleLength(wallAxis.Length);\r\n               }\r\n            }\r\n         }\r\n\r\n         // For others\r\n         if (m_Length > MathUtil.Eps())\r\n            return true;\r\n\r\n         if (extrusionCreationData == null)\r\n         {\r\n            if (ParameterUtil.GetDoubleValueFromElement(element, BuiltInParameter.EXTRUSION_LENGTH, out m_Length) != null)\r\n               m_Length = UnitUtil.ScaleLength(m_Length);\r\n         }\r\n         else\r\n         {\r\n            // For Slab, length is the major edge of the rectangle area profile (get it from ScaledWidth)\r\n            // Also for Stair support\r\n            IFCAnyHandle hnd = ExporterCacheManager.ElementToHandleCache.Find(element.Id);\r\n            if (PropertyUtil.IsWidthLengthReversed(hnd) ||\r\n               CategoryUtil.GetSafeCategoryId(element).Value == (long)BuiltInCategory.OST_StairsStringerCarriage)\r\n            {\r\n               m_Length = extrusionCreationData.ScaledWidth;\r\n            }\r\n            else\r\n            {\r\n               m_Length = extrusionCreationData.ScaledLength;\r\n            }\r\n         }\r\n\r\n         if (m_Length > MathUtil.Eps())\r\n            return true;\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_Length;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/LoadBearingCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate load bearing value for a wall.\r\n   /// </summary>\r\n   class LoadBearingCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A boolean variable to keep the calculated value.\r\n      /// </summary>\r\n      private bool m_LoadBearing = false;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static LoadBearingCalculator s_Instance = new LoadBearingCalculator();\r\n\r\n      /// <summary>\r\n      /// The LoadBearingCalculator instance.\r\n      /// </summary>\r\n      public static LoadBearingCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates load bearing value for a wall.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"calcValues\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>True if the operation succeeded, false otherwise.</returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         Wall wall = element as Wall;\r\n         if (wall != null)\r\n         {\r\n            m_LoadBearing = wall.StructuralUsage == StructuralWallUsage.Bearing;\r\n            return true;\r\n         }\r\n\r\n         // This may be set for Column, Beam, Brace\r\n         ElementId catId = CategoryUtil.GetSafeCategoryId(element);\r\n         if (catId == new ElementId(BuiltInCategory.OST_StructuralColumns)\r\n            || catId == new ElementId(BuiltInCategory.OST_StructuralFraming)\r\n            || catId == new ElementId(BuiltInCategory.OST_StructuralFramingSystem)\r\n            || catId == new ElementId(BuiltInCategory.OST_StructuralTruss))\r\n         {\r\n            m_LoadBearing = true;\r\n            return true;\r\n         }\r\n\r\n         // This is for Floor/Slab\r\n         Parameter parameter = element.get_Parameter(BuiltInParameter.FLOOR_PARAM_IS_STRUCTURAL);\r\n         if (parameter != null && parameter.HasValue && parameter.StorageType == StorageType.Integer)\r\n         {\r\n            m_LoadBearing = (parameter.AsInteger() != 0) ? true : false;\r\n            return true;\r\n         }\r\n\r\n         // If other entities, look for the parameter value for Load Bearing\r\n         int? intLoadBearing = ParameterUtil.GetIntValueFromElementOrSymbol(element, entryMap.RevitParameterName, entryMap.CompatibleRevitParameterName);\r\n\r\n         if (!intLoadBearing.HasValue)\r\n            return false;\r\n\r\n         m_LoadBearing = (intLoadBearing.Value != 0);\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated boolean value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The boolean value.\r\n      /// </returns>\r\n      public override bool GetBooleanValue()\r\n      {\r\n         return m_LoadBearing;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/LongitudinalBarNominalDiameter.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Autodesk.Revit.DB.Structure;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate longitudinal bar nominal diameter value for an element.\n   /// </summary>\n   class LongitudinalBarNominalDiameterCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double LongitudinalBarNominalDiameter { get; set; } = 0.0;\n\n      /// <summary>\n      /// The LongitudinalBarNominalDiameter instance.\n      /// </summary>\n      public static LongitudinalBarNominalDiameterCalculator Instance { get; } = new LongitudinalBarNominalDiameterCalculator();\n\n      /// <summary>\n      /// Calculates external value for an element.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>True if the operation succeed, false otherwise.</returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         FabricParams fabricParams = null;\n         if (!ExporterCacheManager.FabricParamsCache.TryGetValue(element?.Id, out fabricParams))\n            return false;\n\n         LongitudinalBarNominalDiameter = fabricParams.LongitudinalBarNominalDiameter;\n         return true;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>The double value.</returns>\n      public override double GetDoubleValue()\n      {\n         return LongitudinalBarNominalDiameter;\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/LongitudinalBarSpacing.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Autodesk.Revit.DB.Structure;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate longitudinal bar spacing value for an element.\n   /// </summary>\n   class LongitudinalBarSpacingCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double LongitudinalBarSpacing { get; set; } = 0.0;\n\n      /// <summary>\n      /// The MeshWidthCalculator instance.\n      /// </summary>\n      public static LongitudinalBarSpacingCalculator Instance { get; } = new LongitudinalBarSpacingCalculator();\n\n      /// <summary>\n      /// Calculates external value for an element.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>True if the operation succeed, false otherwise.</returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         FabricParams fabricParams = null;\n         if (!ExporterCacheManager.FabricParamsCache.TryGetValue(element?.Id, out fabricParams))\n            return false;\n\n         LongitudinalBarSpacing = fabricParams.LongitudinalBarSpacing;\n         return true;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>The double value.</returns>\n      public override double GetDoubleValue()\n      {\n         return LongitudinalBarSpacing;\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/MeshLengthCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Autodesk.Revit.DB.Structure;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate mesh length value for an element.\n   /// </summary>\n   class MeshLengthCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double MeshLength { get; set; } = 0.0;\n\n      /// <summary>\n      /// The MeshLengthCalculator instance.\n      /// </summary>\n      public static MeshLengthCalculator Instance { get; } = new MeshLengthCalculator();\n\n      /// <summary>\n      /// Calculates external value for an element.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>True if the operation succeed, false otherwise.</returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         FabricParams fabricParams = null;\n         if (!ExporterCacheManager.FabricParamsCache.TryGetValue(element?.Id, out fabricParams))\n            return false;\n        \n         MeshLength = fabricParams.MeshLength;\n         return true;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>The double value.</returns>\n      public override double GetDoubleValue()\n      {\n         return MeshLength;\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/MeshWidthCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Autodesk.Revit.DB.Structure;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate mesh width value for an element.\n   /// </summary>\n   class MeshWidthCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double MeshWidth { get; set; } = 0.0;\n\n      /// <summary>\n      /// The MeshWidthCalculator instance.\n      /// </summary>\n      public static MeshWidthCalculator Instance { get; } = new MeshWidthCalculator();\n\n      /// <summary>\n      /// Calculates external value for an element.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>True if the operation succeed, false otherwise.</returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         FabricParams fabricParams = null;\n         if (!ExporterCacheManager.FabricParamsCache.TryGetValue(element?.Id, out fabricParams))\n            return false;\n\n         MeshWidth = fabricParams.MeshWidth;\n         return true;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>The double value.</returns>\n      public override double GetDoubleValue()\n      {\n         return MeshWidth;\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/NetAreaCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate gross area.\r\n   /// </summary>\r\n   class NetAreaCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_Area = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static NetAreaCalculator s_Instance = new NetAreaCalculator();\r\n\r\n      /// <summary>\r\n      /// The GrossAreaCalculator instance.\r\n      /// </summary>\r\n      public static NetAreaCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates cross area.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"extrusionCreationData\">\r\n      /// The IFCExportBodyParams.\r\n      /// </param>\r\n      /// <param name=\"element\">\r\n      /// The element to calculate the value.\r\n      /// </param>\r\n      /// <param name=\"elementType\">\r\n      /// The element type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Area, entryMap.CompatibleRevitParameterName, \"IfcQtyNetArea\");\r\n         m_Area = UnitUtil.ScaleArea(m_Area);\r\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\r\n            return true;\r\n\r\n         // HOST_AREA_COMPUTED is incorrect in case of not in-place families.\r\n         // Do not export 'Net Area' quantity.\r\n         if (element is FamilyInstance familyInstance && !IsInPlace(familyInstance))\r\n            return false;\r\n         \r\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, BuiltInParameter.HOST_AREA_COMPUTED, out m_Area);\r\n         m_Area = UnitUtil.ScaleArea(m_Area);\r\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\r\n            return true;\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_Area;\r\n      }\r\n\r\n      private bool IsInPlace(FamilyInstance familyInstance)\r\n      {\r\n         return familyInstance?.Symbol?.Family?.IsInPlace ?? false;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/NetCrossSectionAreaCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Common.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate net cross section area.\n   /// </summary>\n   class NetCrossSectionAreaCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double m_Area = 0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static NetCrossSectionAreaCalculator s_Instance = new NetCrossSectionAreaCalculator();\n\n      /// <summary>\n      /// The NetCrossSectionAreaCalculator instance.\n      /// </summary>\n      public static NetCrossSectionAreaCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates cross area.\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         double crossSectionArea = 0;\n\n         // 1. Check override parameter\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out crossSectionArea, entryMap.CompatibleRevitParameterName, \"IfcQtyNetCrossSectionArea\");\n         m_Area = UnitUtil.ScaleArea(crossSectionArea);\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\n            return true;\n\n         // 2. try using extrusion data\n         if (extrusionCreationData == null)\n            return false;\n\n         m_Area = extrusionCreationData.ScaledArea;\n         return m_Area > MathUtil.Eps() * MathUtil.Eps();\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_Area;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/NetFloorAreaCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.Architecture;\nusing Autodesk.Revit.DB.Mechanical;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Common.Enums;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate gross area.\n   /// </summary>\n   class NetFloorAreaCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double m_Area = 0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static NetFloorAreaCalculator s_Instance = new NetFloorAreaCalculator();\n\n      /// <summary>\n      /// The GrossAreaCalculator instance.\n      /// </summary>\n      public static NetFloorAreaCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates cross area.\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Area, entryMap.CompatibleRevitParameterName, \"IfcQtyNetFloorArea\");\n         m_Area = UnitUtil.ScaleArea(m_Area);\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\n            return true;\n\n         m_Area = UnitUtil.ScaleArea(CalculateSpatialElementNetFloorArea(element as SpatialElement));\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\n            return true;\n\n         ElementId categoryId = CategoryUtil.GetSafeCategoryId(element);\n         IFCAnyHandle hnd = ExporterCacheManager.ElementToHandleCache.Find(element.Id);\n         if (element is SpatialElement\n            || categoryId == new ElementId(BuiltInCategory.OST_Rooms) || categoryId == new ElementId(BuiltInCategory.OST_MEPSpaces)\n            || categoryId == new ElementId(BuiltInCategory.OST_Areas)\n            || IFCAnyHandleUtil.IsSubTypeOf(hnd, IFCEntityType.IfcSpace))\n         {\n            SpatialElement sp = element as SpatialElement;\n            if (sp != null)\n               m_Area = sp.Area;\n         }\n         else\n         {\n            ParameterUtil.GetDoubleValueFromElementOrSymbol(element, BuiltInParameter.HOST_AREA_COMPUTED, out m_Area);\n         }\n\n         m_Area = UnitUtil.ScaleArea(m_Area);\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\n            return true;\n\n         return false;\n      }\n\n      private double CalculateSpatialElementNetFloorArea(SpatialElement spatialElement)\n      {\n         double netFloorArea = 0.0;\n\n         if (spatialElement == null)\n            return netFloorArea;\n\n         // Get the boundary loops of the SpatialElement\n         IList<IList<BoundarySegment>> boundaryLoops = spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions());\n\n         double outerLoopArea = 0.0;\n         double loopsArea = 0.0;\n         foreach (IList<BoundarySegment> boundaryLoop in boundaryLoops)\n         {\n            CurveLoop curveLoop = new CurveLoop();\n            foreach (BoundarySegment boundarySegment in boundaryLoop)\n            {\n               try\n               {\n                  Curve curve = boundarySegment.GetCurve();\n                  curveLoop.Append(curve);\n               }\n               catch (Autodesk.Revit.Exceptions.ArgumentException)\n               {\n                  //For some special cases, BoundarySegments of the element are not valid for CurveLoop creation\n                  //(curveLoop.Append(curve) throws exception because \"This curve will make the loop discontinuous.\") \n\n                  return 0.0;\n               }\n            }\n\n            double loopArea = ExporterIFCUtils.ComputeAreaOfCurveLoops(new List<CurveLoop>() { curveLoop });\n\n            if (outerLoopArea < loopArea)\n               outerLoopArea = loopArea;\n\n            loopsArea += loopArea;\n         }\n\n         //To define the net area, we need to subtract the area of the holes from the area of the outerLoopArea.\n         //loopsArea is the sum of the areas of all the loops.\n         double innerLoopsArea = loopsArea - outerLoopArea;\n         netFloorArea = outerLoopArea - innerLoopsArea;\n\n         return netFloorArea;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_Area;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/NetSideAreaCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Common.Enums;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate net side area.\n   /// </summary>\n   class NetSideAreaCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double m_Area = 0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static NetSideAreaCalculator s_Instance = new NetSideAreaCalculator();\n\n      /// <summary>\n      /// The NetSideAreaCalculator instance.\n      /// </summary>\n      public static NetSideAreaCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates net side area.\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Area, entryMap.CompatibleRevitParameterName, \"IfcQtyNetSideArea\");\n         m_Area = UnitUtil.ScaleArea(m_Area);\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\n            return true;\n\n         IFCAnyHandle hnd = ExporterCacheManager.ElementToHandleCache.Find(element.Id);\n         if (IFCAnyHandleUtil.IsSubTypeOf(hnd, IFCEntityType.IfcCurtainWall))\n         {\n            ParameterUtil.GetDoubleValueFromElementOrSymbol(element, BuiltInParameter.HOST_AREA_COMPUTED, out m_Area);\n            m_Area = UnitUtil.ScaleArea(m_Area);\n            if (m_Area > MathUtil.Eps() * MathUtil.Eps())\n               return true;\n         }\n\n         return false;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_Area;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/NetSurfaceAreaCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate net surface area.\r\n   /// </summary>\r\n   class NetSurfaceAreaCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_Area = 0;\r\n\r\n      /// <summary>\r\n      /// The NetSurfaceAreaCalculator instance.\r\n      /// </summary>\r\n      public static NetSurfaceAreaCalculator Instance { get; } = new NetSurfaceAreaCalculator();\r\n\r\n      /// <summary>\r\n      /// Calculates net surface area.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>True if the operation succeeded, false otherwise.</returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         double areaEps = MathUtil.Eps() * MathUtil.Eps();\r\n\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Area, entryMap.CompatibleRevitParameterName, \"IfcQtyNetSurfaceArea\") != null)\r\n         {\r\n            m_Area = UnitUtil.ScaleArea(m_Area);\r\n            if (m_Area > areaEps)\r\n               return true;\r\n         }\r\n\r\n         double areaSum = 0;\r\n         SolidMeshGeometryInfo geomInfo = GeometryUtil.GetSolidMeshGeometry(element);\r\n         if (geomInfo.SolidsCount() > 0)\r\n         {\r\n            for (int ii = 0; ii < geomInfo.SolidsCount(); ++ii)\r\n            {\r\n               foreach (Face f in geomInfo.GetSolids()[ii].Faces)\r\n                  areaSum += f.Area;\r\n            }\r\n         }\r\n        \r\n         if (geomInfo.MeshesCount() > 0)\r\n         {\r\n            for (int jj = 0; jj < geomInfo.MeshesCount(); ++jj)\r\n            {\r\n               Mesh geomMesh = geomInfo.GetMeshes()[jj];\r\n               XYZ arbitraryOrig = geomMesh.Vertices[0];\r\n               for (int ii = 0; ii < geomMesh.NumTriangles; ++ii)\r\n               {\r\n                  MeshTriangle meshTri = geomMesh.get_Triangle(ii);\r\n                  double a = meshTri.get_Vertex(1).DistanceTo(meshTri.get_Vertex(0));\r\n                  double b = meshTri.get_Vertex(2).DistanceTo(meshTri.get_Vertex(1));\r\n                  double c = meshTri.get_Vertex(0).DistanceTo(meshTri.get_Vertex(2));\r\n                  areaSum += (a + b + c) / 2.0;\r\n               }\r\n            }\r\n         }\r\n\r\n         m_Area = UnitUtil.ScaleArea(areaSum);\r\n         return (m_Area > areaEps);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>The net surface area.</returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_Area;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/NetVolumeCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate gross volume.\r\n   /// </summary>\r\n   class NetVolumeCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_Volume = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static NetVolumeCalculator s_Instance = new NetVolumeCalculator();\r\n\r\n      /// <summary>\r\n      /// The NetVolumeCalculator instance.\r\n      /// </summary>\r\n      public static NetVolumeCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates net volume.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"extrusionCreationData\">\r\n      /// The IFCExportBodyParams.\r\n      /// </param>\r\n      /// <param name=\"element\">\r\n      /// The element to calculate the value.\r\n      /// </param>\r\n      /// <param name=\"elementType\">\r\n      /// The element type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         double volumeEps = MathUtil.Eps() * MathUtil.Eps() * MathUtil.Eps();\r\n\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Volume, entryMap.CompatibleRevitParameterName, \"IfcQtyNetVolume\") != null)\r\n         {\r\n            m_Volume = UnitUtil.ScaleVolume(m_Volume);\r\n            if (m_Volume > volumeEps)\r\n               return true;\r\n         }\r\n\r\n         double vol = 0;\r\n         SolidMeshGeometryInfo geomInfo = GeometryUtil.GetSolidMeshGeometry(element);\r\n         if (geomInfo.SolidsCount() > 0)\r\n         {\r\n            for (int ii = 0; ii <geomInfo.SolidsCount(); ++ii)\r\n               vol += geomInfo.GetSolids()[ii].Volume;\r\n         }\r\n\r\n         if (geomInfo.MeshesCount() > 0)\r\n         {\r\n            for (int jj = 0; jj < geomInfo.MeshesCount(); ++jj)\r\n            {\r\n               Mesh geomMesh = geomInfo.GetMeshes()[jj];\r\n               XYZ arbitraryOrig = geomMesh.Vertices[0];\r\n               for (int i = 0; i < geomMesh.NumTriangles; ++i)\r\n               {\r\n                  MeshTriangle meshTri = geomMesh.get_Triangle(i);\r\n                  XYZ v1 = meshTri.get_Vertex(0) - arbitraryOrig;\r\n                  XYZ v2 = meshTri.get_Vertex(1) - arbitraryOrig;\r\n                  XYZ v3 = meshTri.get_Vertex(2) - arbitraryOrig;\r\n                  vol += v1.DotProduct(v2.CrossProduct(v3)) / 6.0f;\r\n               }\r\n            }\r\n         }\r\n\r\n         m_Volume = UnitUtil.ScaleVolume(vol);\r\n         return (m_Volume > volumeEps);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_Volume;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/NetWeightCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate net weight.\r\n   /// </summary>\r\n   class NetWeightCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_Weight = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static NetWeightCalculator s_Instance = new NetWeightCalculator();\r\n\r\n      /// <summary>\r\n      /// The NetWeightCalculator instance.\r\n      /// </summary>\r\n      public static NetWeightCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates net weight\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"extrusionCreationData\">\r\n      /// The IFCExportBodyParams.\r\n      /// </param>\r\n      /// <param name=\"element\">\r\n      /// The element to calculate the value.\r\n      /// </param>\r\n      /// <param name=\"elementType\">\r\n      /// The element type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Weight, entryMap.CompatibleRevitParameterName, \"IfcQtyNetWeight\");\r\n         if (m_Weight < MathUtil.Eps())\r\n            return false;\r\n         else\r\n            return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_Weight;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/NosingLengthCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.Architecture;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate nosing length parameters.\n   /// </summary>\n   class NosingLengthCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// An int variable to keep the calculated NosingLength value.\n      /// </summary>\n      private double m_NosingLength = 0.0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static NosingLengthCalculator s_Instance = new NosingLengthCalculator();\n\n      /// <summary>\n      /// The StairNumberOfRisersCalculator instance.\n      /// </summary>\n      public static NosingLengthCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates number of risers for a stair.\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         bool valid = true;\n         if (StairsExporter.IsLegacyStairs(element))\n         {\n         double riserHeight, treadLength, treadLengthAtInnerSide, waistThickness = 0;\n         int numberOfRisers, numberOfTreads = 0;\n         ExporterIFCUtils.GetLegacyStairsProperties(exporterIFC, element,\n               out numberOfRisers, out numberOfTreads,\n               out riserHeight, out treadLength, out treadLengthAtInnerSide,\n               out m_NosingLength, out waistThickness);\n         }\n         else if (element is Stairs)\n         {\n            Stairs stairs = element as Stairs;\n            ICollection<ElementId> stairRuns = stairs.GetStairsRuns();\n            if (stairRuns.Count > 0)\n            {\n               // Get the run width from one of the run/flight to compute the walking line offset\n               StairsRun run = stairs.Document.GetElement(stairRuns.First()) as StairsRun;\n               StairsRunType stairsRunType = run.Document.GetElement(run.GetTypeId()) as StairsRunType;\n               m_NosingLength = UnitUtil.ScaleLength(stairsRunType.NosingLength);\n            }\n         }\n         else if (element is StairsRun)\n         {\n            StairsRun stairsRun = element as StairsRun;\n            StairsRunType stairsRunType = stairsRun.Document.GetElement(stairsRun.GetTypeId()) as StairsRunType;\n            m_NosingLength = UnitUtil.ScaleLength(stairsRunType.NosingLength);\n         }\n         else\n         {\n            valid = false;\n         }\n         return valid;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_NosingLength;\n\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/NumberOfRiserCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.Architecture;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Toolkit.IFC4;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate number of riser parameters.\n   /// </summary>\n   class NumberOfRiserCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// An int variable to keep the calculated NumberOfRisers value.\n      /// </summary>\n      private int m_NumberOfRisers = 0;\n\n      /// <summary>\n      /// The NumberOfRiserCalculator instance.\n      /// </summary>\n      public static NumberOfRiserCalculator Instance { get; } = new NumberOfRiserCalculator();\n      \n      /// <summary>\n      /// Calculates number of risers for a stair.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>True if the operation succeed, false otherwise.</returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         bool valid = true;\n         if (StairsExporter.IsLegacyStairs(element))\n         {\n            double riserHeight, treadLength, treadLengthAtInnerSide, nosingLength, waistThickness = 0;\n            int numberOfTreads;\n\n            ExporterIFCUtils.GetLegacyStairsProperties(exporterIFC, element,\n                  out m_NumberOfRisers, out numberOfTreads,\n                  out riserHeight, out treadLength, out treadLengthAtInnerSide,\n                  out nosingLength, out waistThickness);\n         }\n         else if (element is Stairs)\n         {\n            Stairs stairs = element as Stairs;\n            m_NumberOfRisers = stairs.ActualRisersNumber;\n         }\n         else if (element is StairsRun)\n         {\n            StairsRun stairsRun = element as StairsRun;\n            StairsRunType stairsRunType = stairsRun.Document.GetElement(stairsRun.GetTypeId()) as StairsRunType;\n            m_NumberOfRisers = stairsRun.ActualRisersNumber;\n         }\n         else\n         {\n            valid = false;\n         }\n\n         // Get override from parameter\n         int? noRiserOverride = ParameterUtil.GetIntValueFromElementOrSymbol(element, entryMap.RevitParameterName, entryMap.CompatibleRevitParameterName);\n\n         if (noRiserOverride.HasValue)\n         {\n            m_NumberOfRisers = noRiserOverride.Value;\n            valid = true;\n         }\n\n         return valid;\n      }\n\n      /// <summary>\n      /// Gets the calculated int value.\n      /// </summary>\n      /// <returns>\n      /// The int value.\n      /// </returns>\n      public override int GetIntValue()\n      {\n         return m_NumberOfRisers;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_NumberOfRisers;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/NumberOfStoreysCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate number of storeys.\r\n   /// </summary>\r\n   class NumberOfStoreysCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// An integer variable to keep the calculated value.\r\n      /// </summary>\r\n      int m_NumberOfStoreys = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static NumberOfStoreysCalculator s_Instance = new NumberOfStoreysCalculator();\r\n\r\n      /// <summary>\r\n      /// The NumberOfStoreysCalculator instance.\r\n      /// </summary>\r\n      public static NumberOfStoreysCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates number of storeys.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"extrusionCreationData\">\r\n      /// The IFCExportBodyParams.\r\n      /// </param>\r\n      /// <param name=\"element,\">\r\n      /// The element to calculate the value.\r\n      /// </param>\r\n      /// <param name=\"elementType\">\r\n      /// The element type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         m_NumberOfStoreys = ExporterCacheManager.LevelInfoCache?.LevelsById?.Count ?? 0;\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated integer value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The integer value.\r\n      /// </returns>\r\n      public override int GetIntValue()\r\n      {\r\n         return m_NumberOfStoreys;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_NumberOfStoreys;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/NumberOfTreadsCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.Architecture;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate number of tread parameters.\n   /// </summary>\n   class NumberOfTreadsCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// An int variable to keep the calculated NumberOfTreads value.\n      /// </summary>\n      private int m_NumberOfTreads = 0;\n\n      /// <summary>\n      /// The NumberOfTreadsCalculator instance.\n      /// </summary>\n      public static NumberOfTreadsCalculator Instance { get; } = new NumberOfTreadsCalculator();\n\n      /// <summary>\n      /// Calculates number of risers for a stair.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>True if the operation succeed, false otherwise.</returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         bool valid = true;\n         if (StairsExporter.IsLegacyStairs(element))\n         {\n            double riserHeight, treadLength, treadLengthAtInnerSide, nosingLength, waistThickness = 0;\n            int numberOfRisers = 0;\n\n            ExporterIFCUtils.GetLegacyStairsProperties(exporterIFC, element,\n                  out numberOfRisers, out m_NumberOfTreads,\n                  out riserHeight, out treadLength, out treadLengthAtInnerSide,\n                  out nosingLength, out waistThickness);\n         }\n         else if (element is Stairs)\n         {\n            Stairs stairs = element as Stairs;\n            m_NumberOfTreads = stairs.ActualTreadsNumber;\n         }\n         else if (element is StairsRun)\n         {\n            StairsRun stairsRun = element as StairsRun;\n            StairsRunType stairsRunType = stairsRun.Document.GetElement(stairsRun.GetTypeId()) as StairsRunType;\n            m_NumberOfTreads = stairsRun.ActualTreadsNumber;\n         }\n         else\n         {\n            valid = false;\n         }\n\n         // Get override from parameter\n         int? noOfTreadsOverride = ParameterUtil.GetIntValueFromElementOrSymbol(element, entryMap.RevitParameterName, entryMap.CompatibleRevitParameterName);\n         if (noOfTreadsOverride > 0)\n         {\n            m_NumberOfTreads = noOfTreadsOverride.Value;\n            valid = true;\n         }\n\n         return valid;\n      }\n\n      /// <summary>\n      /// Gets the calculated int value.\n      /// </summary>\n      /// <returns>\n      /// The int value.\n      /// </returns>\n      public override int GetIntValue()\n      {\n         return m_NumberOfTreads;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_NumberOfTreads;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/OuterSurfaceAreaCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate gross volume for a slab.\r\n   /// </summary>\r\n   class OuterSurfaceAreaCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_Area = 0;\r\n\r\n      /// <summary>\r\n      /// The OuterSurfaceAreaCalculator instance.\r\n      /// </summary>\r\n      public static OuterSurfaceAreaCalculator Instance { get; } = new OuterSurfaceAreaCalculator();\r\n      \r\n      /// <summary>\r\n      /// Calculates gross volume for a slab.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>True if the operation succeed, false otherwise.</returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         double areaEps = MathUtil.Eps() * MathUtil.Eps();\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Area, entryMap.CompatibleRevitParameterName, \"IfcQtyOuterSurfaceArea\") != null)\r\n         {\r\n            m_Area = UnitUtil.ScaleArea(m_Area);\r\n            if (m_Area > areaEps)\r\n               return true;\r\n         }\r\n\r\n         if (extrusionCreationData == null)\r\n            return false;\r\n\r\n         // It may be that the length component of the area unit is not the same\r\n         // as the length unit itself (e.g. length in mm, area in m^2).  As such,\r\n         // we unscale the length values and then re-scale them to the area unit.\r\n         double outerPerimeter = UnitUtil.UnscaleLength(extrusionCreationData.ScaledOuterPerimeter);\r\n         double length = UnitUtil.UnscaleLength(extrusionCreationData.ScaledLength);\r\n         m_Area = UnitUtil.ScaleArea(outerPerimeter * length);\r\n         \r\n         return (m_Area > areaEps);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_Area;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/PerimeterCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Exporter.PropertySet.IFC2X2;\r\nusing Revit.IFC.Export.Utility;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Windows.Media.Media3D;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate perimeter for a host object.\r\n   /// </summary>\r\n   class PerimeterCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_Perimeter = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static PerimeterCalculator s_Instance = new PerimeterCalculator();\r\n\r\n      /// <summary>\r\n      /// The PerimeterCalculator instance.\r\n      /// </summary>\r\n      public static PerimeterCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates perimeter for a space or floor.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>True if the operation succeed, false otherwise.</returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, \r\n         Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Perimeter,\r\n            entryMap.CompatibleRevitParameterName, \"IfcQtyPerimeter\");\r\n         if (m_Perimeter > MathUtil.Eps())\r\n         {\r\n            m_Perimeter = UnitUtil.ScaleLength(m_Perimeter);\r\n            return true;\r\n         }\r\n\r\n         ParameterUtil.GetDoubleValueFromElement(element, BuiltInParameter.HOST_PERIMETER_COMPUTED, out m_Perimeter);\r\n         if (m_Perimeter > MathUtil.Eps())\r\n         {\r\n            m_Perimeter = UnitUtil.ScaleLength(m_Perimeter);\r\n            return true;\r\n         }\r\n\r\n         m_Perimeter = extrusionCreationData?.ScaledOuterPerimeter ?? 0.0;\r\n         return m_Perimeter > MathUtil.Eps();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_Perimeter;\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// A calculation class to calculate perimeter for a space.\r\n   /// </summary>\r\n   class GrossPerimeterCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_GrossPerimeter = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static GrossPerimeterCalculator s_Instance = new();\r\n\r\n      /// <summary>\r\n      /// The GrossPerimeterCalculator instance.\r\n      /// </summary>\r\n      public static GrossPerimeterCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates perimeter for a space or floor.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>True if the operation succeed, false otherwise.</returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_GrossPerimeter,\r\n            entryMap.CompatibleRevitParameterName, \"IfcQtyGrossPerimeter\");\r\n\r\n         if (m_GrossPerimeter > MathUtil.Eps())\r\n         {\r\n            m_GrossPerimeter = UnitUtil.ScaleLength(m_GrossPerimeter);\r\n            return true;\r\n         }\r\n\r\n         m_GrossPerimeter = extrusionCreationData?.ScaledOuterPerimeter ?? 0.0;\r\n         return m_GrossPerimeter > MathUtil.Eps();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_GrossPerimeter;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/ProjectedAreaCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Common.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate projected area for a roof.\n   /// </summary>\n   class ProjectedAreaCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double m_Area = 0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static ProjectedAreaCalculator s_Instance = new ProjectedAreaCalculator();\n\n      /// <summary>\n      /// The RoofProjectedAreaCalculatorinstance.\n      /// </summary>\n      public static ProjectedAreaCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates total area for a roof\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Area, entryMap.CompatibleRevitParameterName);\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\n            return true;\n\n         m_Area = UnitUtil.ScaleArea(ExporterIFCUtils.ComputeRoofProjectedArea(element));\n         return (m_Area > MathUtil.Eps() * MathUtil.Eps());\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>The double value.</returns>\n      public override double GetDoubleValue()\n      {\n         return m_Area;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/ReferenceCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to find the reference.\r\n   /// </summary>\r\n   class ReferenceCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A string variable to keep the calculated value.\r\n      /// </summary>\r\n      string m_ReferenceName = string.Empty;\r\n\r\n      /// <summary>\r\n      /// The ReferenceCalculator instance.\r\n      /// </summary>\r\n      public static ReferenceCalculator Instance { get; } = new ReferenceCalculator();\r\n\r\n      /// <summary>\r\n      /// Calculates the reference.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>True if the operation succeed, false otherwise.</returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         ParameterUtil.GetStringValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_ReferenceName, entryMap.CompatibleRevitParameterName);\r\n         if (!string.IsNullOrEmpty(m_ReferenceName))\r\n            return true;\r\n\r\n         // If the element is an element type, \"Reference\" doesn't mean much, since IFC doesn't\r\n         // care about the type of a type.  We'll keep the override in place in case someone wants\r\n         // to force it, but otherwise will not export the value.\r\n         if (element is ElementType)\r\n            return false;\r\n\r\n         if (elementType == null)\r\n            m_ReferenceName = element.Name;\r\n         else\r\n         {\r\n            string elementTypeName = elementType.Name;\r\n            if (ExporterCacheManager.ExportOptionsCache.NamingOptions.UseFamilyAndTypeNameForReference ||\r\n               string.IsNullOrEmpty(elementTypeName))\r\n            {\r\n               if (!String.IsNullOrEmpty(elementTypeName))\r\n                  m_ReferenceName = String.Format(\"{0}:{1}\", elementType.FamilyName, elementTypeName);\r\n               else\r\n                  m_ReferenceName = elementType.FamilyName;\r\n            }\r\n            else\r\n               m_ReferenceName = elementTypeName;\r\n         }\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated string value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The string value.\r\n      /// </returns>\r\n      public override string GetStringValue()\r\n      {\r\n         return m_ReferenceName;\r\n      }\r\n   }\r\n\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/RiserHeightCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.Architecture;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Common.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate riser and tread parameters.\n   /// </summary>\n   class RiserHeightCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// An int variable to keep the calculated RiserHeight value.\n      /// </summary>\n      private double m_RiserHeight = 0.0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static RiserHeightCalculator s_Instance = new RiserHeightCalculator();\n\n      /// <summary>\n      /// The RiserHeightCalculator instance.\n      /// </summary>\n      public static RiserHeightCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates number of risers for a stair.\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         bool valid = true;\n         if (StairsExporter.IsLegacyStairs(element))\n         {\n            double treadLength, treadLengthAtInnerSide, nosingLength, waistThickness = 0;\n            int numberOfRisers, numberOfTreads = 0;\n            ExporterIFCUtils.GetLegacyStairsProperties(exporterIFC, element,\n                  out numberOfRisers, out numberOfTreads,\n                  out m_RiserHeight, out treadLength, out treadLengthAtInnerSide,\n                  out nosingLength, out waistThickness);\n         }\n         else if (element is Stairs)\n         {\n            Stairs stairs = element as Stairs;\n            m_RiserHeight = UnitUtil.ScaleLength(stairs.ActualRiserHeight);\n         }\n         else if (element is StairsRun)\n         {\n            StairsRun stairsRun = element as StairsRun;\n            StairsRunType stairsRunType = stairsRun.Document.GetElement(stairsRun.GetTypeId()) as StairsRunType;\n            m_RiserHeight = UnitUtil.ScaleLength(stairsRun.Height / stairsRun.ActualRisersNumber);\n         }\n         else\n         {\n            valid = false;\n         }\n\n         // Get override from parameter\n         double riserHeightOverride = 0.0;\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out riserHeightOverride, entryMap.CompatibleRevitParameterName) != null)\n         {\n            m_RiserHeight = UnitUtil.ScaleArea(riserHeightOverride);\n         }\n\n         return valid;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_RiserHeight;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/RollCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// Get Builtin Parameter for Roll property\n   /// </summary>\n   class RollCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double m_Roll = 0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static RollCalculator s_Instance = new RollCalculator();\n\n      /// <summary>\n      /// The StructuralMemberRollCalculator instance.\n      /// </summary>\n      public static RollCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates Roll value (Rotation angle) for a beam, column and member\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         Parameter rollPar = element.get_Parameter(BuiltInParameter.STRUCTURAL_BEND_DIR_ANGLE);\n         if (rollPar != null)\n         {\n            double? roll = rollPar.AsDouble();\n            if (roll != null && roll.HasValue)\n            {\n               m_Roll = UnitUtil.ScaleAngle(roll.Value);\n               return true;\n            }\n         }\n\n         // For other elements with ExtrusionData. Parameter will take precedence (override)\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Roll, entryMap.CompatibleRevitParameterName);\n         m_Roll = UnitUtil.ScaleAngle(m_Roll);\n         if (m_Roll > MathUtil.Eps())\n            return true;\n\n         return false;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_Roll;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/ShapeCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Autodesk.Revit.DB.Structure;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Export.Toolkit;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate the shape for a provision for void.\n   /// </summary>\n   class ShapeCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// The element being processed.\n      /// </summary>\n      private Element m_CurrentElement = null;\n\n      /// <summary>\n      /// The extrusion profile of the element being processed.\n      /// </summary>\n      private IFCAnyHandle m_CurrentProfileHandle = null;\n\n      /// <summary>\n      /// A string variable to keep the calculated value.\n      /// </summary>\n      private string m_Shape = null;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static ShapeCalculator s_Instance = new ShapeCalculator();\n\n      /// <summary>\n      /// The ProvisionForVoidShapeCalculator instance.\n      /// </summary>\n      public static ShapeCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates the shape for a provision for void.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         if (extrusionCreationData == null)\n            return false;\n\n         IFCAnyHandle provisionForVoidHnd = ExporterCacheManager.ElementToHandleCache.Find(element.Id);\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(provisionForVoidHnd))\n            return false;\n\n         IFCAnyHandle prodRepHnd = IFCAnyHandleUtil.GetInstanceAttribute(provisionForVoidHnd, \"Representation\");\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(prodRepHnd))\n            return false;\n\n         // TODO: See if we need to extend this beyond provisions for voids and duct segments.\n         bool isDuctSegmentTypeShapeParam =\n            string.Compare(entryMap.RevitParameterName, \"Pset_DuctSegmentTypeCommon.Shape\", true) == 0;\n\n         IList<IFCAnyHandle> repHnds = IFCAnyHandleUtil.GetRepresentations(prodRepHnd);\n         foreach (IFCAnyHandle repHnd in repHnds)\n         {\n            string repId = IFCAnyHandleUtil.GetStringAttribute(repHnd, \"RepresentationIdentifier\");\n            if (String.Compare(repId, \"Body\", true) != 0)\n               continue;\n\n            string repType = IFCAnyHandleUtil.GetStringAttribute(repHnd, \"RepresentationType\");\n            if (String.Compare(repType, \"SweptSolid\", true) != 0)\n               return false;\n\n            HashSet<IFCAnyHandle> repItemSet = IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(repHnd, \"Items\");\n            int numRepItems = repItemSet.Count;\n            if (numRepItems == 0)\n               return false;\n\n            if (numRepItems == 1)\n            {\n               IFCAnyHandle repItemHnd = repItemSet.ElementAt(0);\n               if (!IFCAnyHandleUtil.IsSubTypeOf(repItemHnd, IFCEntityType.IfcExtrudedAreaSolid))\n                  return false;\n\n               IFCAnyHandle sweptAreaHnd = IFCAnyHandleUtil.GetInstanceAttribute(repItemHnd, \"SweptArea\");\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(sweptAreaHnd))\n                  return false;\n\n               m_CurrentProfileHandle = sweptAreaHnd;\n\n               // \"Shape\" isn't just for Provision For Void; it is also for \n               // Pset_DuctSegmentTypeCommon.Shape.  They have different values, so we will\n               // figure out the base value and then \"translate\".\n               // TODO: Deal with potentially different schemas.\n               if (IFCAnyHandleUtil.IsTypeOf(m_CurrentProfileHandle, IFCEntityType.IfcRectangleProfileDef))\n               {\n                  m_Shape = isDuctSegmentTypeShapeParam ? IFC4.PEnum_DuctSegmentShape.RECTANGULAR.ToString() :\n                     IFCProvisionForVoidShapeType.Rectangle.ToString();\n               }\n               else if (IFCAnyHandleUtil.IsTypeOf(m_CurrentProfileHandle, IFCEntityType.IfcCircleProfileDef))\n               {\n                  m_Shape = IFCProvisionForVoidShapeType.Round.ToString();\n               }\n            }\n\n            if (m_Shape == null)\n            {\n               m_Shape = isDuctSegmentTypeShapeParam ? IFC4.PEnum_DuctSegmentShape.OTHER.ToString() :\n                  IFCProvisionForVoidShapeType.Undefined.ToString();\n               m_CurrentProfileHandle = null;\n            }\n\n            m_CurrentElement = element;\n            return true;\n         }\n\n         return false;\n      }\n\n      /// <summary>\n      /// Returns the Element corresponding to the shape value.\n      /// </summary>\n      /// <returns>The element.</returns>\n      /// <remarks>Other calculators use the return value of this function to determine if they are appropriate or not.  We store\n      /// the current element to make sure that the return values are still applicable.</remarks>\n      public Element GetCurrentElement()\n      {\n         return m_CurrentElement;\n      }\n\n      /// <summary>\n      /// Returns the extrusion profile handle corresponding to the shape value.\n      /// </summary>\n      /// <returns>The extrusion profile handle.</returns>\n      public IFCAnyHandle GetCurrentProfileHandle()\n      {\n         return m_CurrentProfileHandle;\n      }\n\n      /// <summary>\n      /// Gets the calculated string value.\n      /// </summary>\n      /// <returns>\n      /// The string value.\n      /// </returns>\n      public override string GetStringValue()\n      {\n         return m_Shape;\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/SlabLoadBearingCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate load bearing value for a slab.\r\n   /// </summary>\r\n   class SlabLoadBearingCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static SlabLoadBearingCalculator s_Instance = new SlabLoadBearingCalculator();\r\n\r\n      /// <summary>\r\n      /// A boolean variable to keep the calculated value.\r\n      /// </summary>\r\n      private bool m_LoadBearing = true;\r\n\r\n      /// <summary>\r\n      /// The SlabLoadBearingCalculator instance.\r\n      /// </summary>\r\n      public static SlabLoadBearingCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates load bearing value for a slab.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExtrusionCreationData.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>\r\n      /// True if the value is successfully calculated, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExtrusionCreationData extrusionCreationData, Element element, ElementType elementType)\r\n      {\r\n         if (element == null)\r\n            return false;\r\n\r\n         Parameter parameter = element.get_Parameter(BuiltInParameter.FLOOR_PARAM_IS_STRUCTURAL);\r\n         if (parameter != null && parameter.HasValue && parameter.StorageType == StorageType.Integer)\r\n         {\r\n            m_LoadBearing = (parameter.AsInteger() != 0) ? true : false;\r\n            return true;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated boolean value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The boolean value.\r\n      /// </returns>\r\n      public override bool GetBooleanValue()\r\n      {\r\n         return m_LoadBearing;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/SlopeCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate slope value.\r\n   /// </summary>\r\n   class SlopeCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double? m_Slope = null;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static SlopeCalculator s_Instance = new SlopeCalculator();\r\n\r\n      /// <summary>\r\n      /// The SlopeCalculator instance.\r\n      /// </summary>\r\n      public static SlopeCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates slope value.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>True if the operation succeed, false otherwise.</returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         double slope = double.NaN;\r\n         // We may have an extrusionCreationData that doesn't have anything set.  We will check this by seeing if there is a valid length set.\r\n         // This works for Beam \r\n         if (extrusionCreationData == null || MathUtil.IsAlmostZero(extrusionCreationData.ScaledLength))\r\n         {\r\n            // Try looking for parameters that we can calculate slope from.\r\n            double startParamHeight = 0.0;\r\n            double endParamHeight = 0.0;\r\n            double length = 0.0;\r\n\r\n            if ((ParameterUtil.GetDoubleValueFromElement(element, BuiltInParameter.STRUCTURAL_BEAM_END0_ELEVATION, out startParamHeight) != null) &&\r\n               (ParameterUtil.GetDoubleValueFromElement(element, BuiltInParameter.STRUCTURAL_BEAM_END1_ELEVATION, out endParamHeight) != null) &&\r\n               (ParameterUtil.GetDoubleValueFromElement(element, BuiltInParameter.INSTANCE_LENGTH_PARAM, out length) != null))\r\n            {\r\n               if (!MathUtil.IsAlmostZero(length))\r\n               {\r\n                  double factor = Math.Abs(endParamHeight - startParamHeight) / length;\r\n                  slope = UnitUtil.ScaleAngle(MathUtil.SafeAsin(factor));\r\n                  if (!double.IsNaN(slope))\r\n                  {\r\n                     m_Slope = slope;\r\n                     return true;\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         // This works for Ramp/RampFlight\r\n         if (ParameterUtil.GetDoubleValueFromElement(element, BuiltInParameter.RAMP_ATTR_MIN_INV_SLOPE, out slope) != null)\r\n         {\r\n            m_Slope = UnitUtil.ScaleAngle(Math.Atan(slope));\r\n            return true;\r\n         }\r\n\r\n         // For other elements with ExtrusionData. Parameter will take precedence (override)\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, \"Slope\", out slope) != null)\r\n         {\r\n            m_Slope = UnitUtil.ScaleAngle(Math.Atan(slope));\r\n            return true;\r\n         }\r\n\r\n         if (extrusionCreationData != null)\r\n         {\r\n            if (extrusionCreationData.Slope > MathUtil.Eps())\r\n            {\r\n               m_Slope = extrusionCreationData.Slope;\r\n               return true;\r\n            }\r\n            else\r\n            {\r\n               // For any element that has axis, the slope will be computed based on the angle of the line vector\r\n               if (element.Location != null && element.Location is LocationCurve)\r\n               {\r\n                  LocationCurve axis = element.Location as LocationCurve;\r\n                  if (axis.Curve is Line)\r\n                  {\r\n                     Line axisCurve = axis.Curve as Line;\r\n                     XYZ vectorProjOnXY = new XYZ(axisCurve.Direction.X, axisCurve.Direction.Y, 0.0).Normalize(); //Project the vector to XY plane\r\n                     if (axisCurve.Direction.GetLength() > 0.0 && vectorProjOnXY.GetLength() > 0.0)\r\n                        slope = UnitUtil.ScaleAngle(MathUtil.SafeAcos(axisCurve.Direction.DotProduct(vectorProjOnXY) / (axisCurve.Direction.GetLength() * vectorProjOnXY.GetLength())));\r\n\r\n                     if (!double.IsNaN(slope))\r\n                     {\r\n                        m_Slope = slope;\r\n                        return true;\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         // The last attempt to compute the slope angle is to get the slope of the largest top facing face of the geometry\r\n         GeometryElement geomElem = element.get_Geometry(GeometryUtil.GetIFCExportGeometryOptions());\r\n         Face largestTopFace = null;\r\n\r\n         if (geomElem == null)\r\n            return false;\r\n\r\n         foreach (GeometryObject geomObj in geomElem)\r\n         {\r\n            largestTopFace = GeometryUtil.GetLargestFaceInSolid(geomObj, new XYZ(0,0,1));\r\n         }\r\n\r\n         if (largestTopFace != null)\r\n         {\r\n            XYZ faceNormal = largestTopFace.ComputeNormal(new UV());\r\n            XYZ faceNormalProjXYPlane = new XYZ(faceNormal.X, faceNormal.Y, 0.0).Normalize();\r\n            slope = GeometryUtil.GetAngleOfFace(largestTopFace, faceNormalProjXYPlane);\r\n            if (!double.IsNaN(slope))\r\n            {\r\n               m_Slope = slope;\r\n               return true;\r\n            }\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         if (m_Slope.HasValue)\r\n            return m_Slope.Value;\r\n         else\r\n            return 0.0;\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// The PitchAngleCalculator calculator, which is the same as the SlopeCalculator.\r\n   /// </summary>\r\n   class PitchAngleCalculator : SlopeCalculator\r\n   {\r\n\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/SpaceLevelAreaCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   /// A calculation class to calculate level area for a space.\r\n   /// </summary>\r\n   class SpaceLevelAreaCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_Area = 0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static SpaceLevelAreaCalculator s_Instance = new SpaceLevelAreaCalculator();\r\n\r\n      /// <summary>\r\n      /// The SpaceLevelAreaCalculator instance.\r\n      /// </summary>\r\n      public static SpaceLevelAreaCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates level area for a space.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"extrusionCreationData\">\r\n      /// The IFCExportBodyParams.\r\n      /// </param>\r\n      /// <param name=\"element\">\r\n      /// The element to calculate the value.\r\n      /// </param>\r\n      /// <param name=\"elementType\">\r\n      /// The element type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Area, entryMap.CompatibleRevitParameterName);\r\n         m_Area = UnitUtil.ScaleArea(m_Area);\r\n         if (m_Area > MathUtil.Eps() * MathUtil.Eps())\r\n            return true;\r\n\r\n         if (extrusionCreationData == null || element == null)\r\n               return false;\r\n\r\n         Area areaElement = element as Area;\r\n         if (areaElement == null || !areaElement.IsGrossInterior)\r\n               return false;\r\n\r\n         m_Area = extrusionCreationData.ScaledArea;\r\n\r\n         return m_Area > MathUtil.Eps() * MathUtil.Eps();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The double value.\r\n      /// </returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_Area;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/SpaceLevelDescriptionCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   /// <summary>\r\n   ///    The description calculator for the COBIE BaseQuantities from a spatial element\r\n   ///    to its associated level.\r\n   /// </summary>\r\n   class SpaceLevelDescriptionCalculator : DescriptionCalculator\r\n   {\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static SpaceLevelDescriptionCalculator s_Instance = new SpaceLevelDescriptionCalculator();\r\n\r\n      /// <summary>\r\n      /// The SpaceLevelDescriptionCalculator instance.\r\n      /// </summary>\r\n      public static SpaceLevelDescriptionCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds the spatial element to its associated level.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"element\">\r\n      /// The element.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The handle.\r\n      /// </returns>\r\n      public override IFCAnyHandle RedirectDescription(Element element)\r\n      {\r\n         SpatialElement spatialElem = element as SpatialElement;\r\n         if (spatialElem != null)\r\n         {\r\n               ElementId levelId = spatialElem.LevelId;\r\n               IFCLevelInfo levelInfo = ExporterCacheManager.LevelInfoCache.GetLevelInfo(levelId);\r\n            if (levelInfo != null)\r\n                  return levelInfo.GetBuildingStorey();\r\n         }\r\n\r\n         return null;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/SpanCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Utility;\nusing Autodesk.Revit.DB.Structure;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate span value for a beam.\n   /// </summary>\n   class SpanCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double m_Span = 0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static SpanCalculator s_Instance = new SpanCalculator();\n\n      /// <summary>\n      /// The BeamSpanCalculator instance.\n      /// </summary>\n      public static SpanCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates span value for a beam.\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         // Check the override first from \"IfcSpan\" parameter, if not overriden use the geometry data from extrusion\n         double spanVal;\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out spanVal, entryMap.CompatibleRevitParameterName) == null)\n               return false;\n\n         spanVal = UnitUtil.ScaleLength(spanVal);\n         if (spanVal > MathUtil.Eps())\n         {\n            m_Span = spanVal;\n            return true;\n         }\n\n         if (extrusionCreationData == null || MathUtil.IsAlmostZero(extrusionCreationData.ScaledLength))\n         {\n            return false;\n         }\n         m_Span = extrusionCreationData.ScaledLength;\n\n         // No support, do nothing. Leave the Span to be the length of the entire beam\n         return true;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_Span;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/SpecificZoneCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   class SpecificZoneCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A string list to keep the calculated value.\r\n      /// </summary>\r\n      private List<string> m_SpecificZones = new List<string>();\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static SpecificZoneCalculator s_Instance = new SpecificZoneCalculator();\r\n\r\n      /// <summary>\r\n      /// The SpecificZoneCalculator instance.\r\n      /// </summary>\r\n      public static SpecificZoneCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates specific zones for a space.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>True if the operation succeed, false otherwise.</returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         string basePropSpecZoneString = \"Project Specific Zone\";\r\n         int val = 0;\r\n         while (++val < 1000)   // prevent infinite loop.\r\n         {\r\n            string propSpecZoneString;\r\n            if (val == 1)\r\n               propSpecZoneString = basePropSpecZoneString;\r\n            else\r\n               propSpecZoneString = basePropSpecZoneString + \" \" + val;\r\n\r\n            string value;\r\n            if ((ParameterUtil.GetStringValueFromElementOrSymbol(element, propSpecZoneString, out value) == null)\r\n                || string.IsNullOrEmpty(value))\r\n               break;\r\n\r\n            m_SpecificZones.Add(value);\r\n         }\r\n\r\n         return m_SpecificZones.Count > 0;\r\n      }\r\n\r\n      public override bool CalculatesMutipleValues\r\n      {\r\n         get { return true; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated string values.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The string values.\r\n      /// </returns>\r\n      public override IList<string> GetStringValues()\r\n      {\r\n         return m_SpecificZones;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/TemperatureCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\r\n{\r\n   class SpaceTemperatureSummerCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_SpaceTemperatureSummer = 0.0;\r\n      \r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static SpaceTemperatureSummerCalculator s_Instance = new SpaceTemperatureSummerCalculator();\r\n\r\n      /// <summary>\r\n      /// The SpaceTemperatureSummerCalculator instance.\r\n      /// </summary>\r\n      public static SpaceTemperatureSummerCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates temperature value for a space.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>True if the operation succeed, false otherwise.</returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_SpaceTemperatureSummer, entryMap.CompatibleRevitParameterName) != null)\r\n            return true;\r\n\r\n         double maxValue = 0, minValue = 0;\r\n         if ((ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName + \"Max\", out maxValue) != null) &&\r\n            (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName + \"Min\", out minValue) != null)\r\n            || (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.CompatibleRevitParameterName + \"Max\", out maxValue) != null) &&\r\n            (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.CompatibleRevitParameterName + \"Min\", out minValue) != null))\r\n         {\r\n            m_SpaceTemperatureSummer = (maxValue + minValue) / 2.0;\r\n            return true;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>The double value.</returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_SpaceTemperatureSummer;\r\n      }\r\n   }\r\n\r\n   class SpaceTemperatureWinterCalculator : PropertyCalculator\r\n   {\r\n      /// <summary>\r\n      /// A double variable to keep the calculated value.\r\n      /// </summary>\r\n      private double m_SpaceTemperatureWinter = 0.0;\r\n\r\n      /// <summary>\r\n      /// A static instance of this class.\r\n      /// </summary>\r\n      static SpaceTemperatureWinterCalculator s_Instance = new SpaceTemperatureWinterCalculator();\r\n\r\n      /// <summary>\r\n      /// The SpaceTemperatureWinterCalculator instance.\r\n      /// </summary>\r\n      public static SpaceTemperatureWinterCalculator Instance\r\n      {\r\n         get { return s_Instance; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates temperature value for a space.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element to calculate the value.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <returns>True if the operation succeed, false otherwise.</returns>\r\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\r\n      {\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_SpaceTemperatureWinter, entryMap.CompatibleRevitParameterName) != null)\r\n            return true;\r\n\r\n         double maxValue = 0, minValue = 0;\r\n         if (((ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName + \"Max\", out maxValue) != null) &&\r\n            (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName + \"Min\", out minValue) != null))\r\n            || ((ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.CompatibleRevitParameterName + \"Max\", out maxValue) != null) &&\r\n            (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.CompatibleRevitParameterName + \"Min\", out minValue) != null)))\r\n         {\r\n            m_SpaceTemperatureWinter = (maxValue + minValue) / 2.0;\r\n            return true;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <returns>The double value.</returns>\r\n      public override double GetDoubleValue()\r\n      {\r\n         return m_SpaceTemperatureWinter;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/TransverseBarNominalDiameter.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Autodesk.Revit.DB.Structure;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate transverse bar nominal diameter value for an element.\n   /// </summary>\n   class TransverseBarNominalDiameterCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double TransverseBarNominalDiameter { get; set; } = 0.0;\n\n      /// <summary>\n      /// The TransverseBarNominalDiameter instance.\n      /// </summary>\n      public static TransverseBarNominalDiameterCalculator Instance { get; } = new TransverseBarNominalDiameterCalculator();\n\n      /// <summary>\n      /// Calculates external value for an element.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>True if the operation succeed, false otherwise.</returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         FabricParams fabricParams = null;\n         if (!ExporterCacheManager.FabricParamsCache.TryGetValue(element?.Id, out fabricParams))\n            return false;\n\n         TransverseBarNominalDiameter = fabricParams.TransverseBarNominalDiameter;\n         return true;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>The double value.</returns>\n      public override double GetDoubleValue()\n      {\n         return TransverseBarNominalDiameter;\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/TransverseBarSpacing.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Autodesk.Revit.DB.Structure;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate transverse bar spacing for an element.\n   /// </summary>\n   class TransverseBarSpacingCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double TransverseBarSpacing { get; set; } = 0.0;\n\n      /// <summary>\n      /// The TransverseBarSpacingCalculator instance.\n      /// </summary>\n      public static TransverseBarSpacingCalculator Instance { get; } = new TransverseBarSpacingCalculator();\n\n      /// <summary>\n      /// Calculates external value for an element.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>True if the operation succeed, false otherwise.</returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         FabricParams fabricParams = null;\n         if (!ExporterCacheManager.FabricParamsCache.TryGetValue(element?.Id, out fabricParams))\n            return false;\n\n         TransverseBarSpacing = fabricParams.TransverseBarSpacing;\n         return true;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>The double value.</returns>\n      public override double GetDoubleValue()\n      {\n         return TransverseBarSpacing;\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/TreadLengthAtInnerSideCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.Architecture;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Common.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate tread length at the inner side parameters.\n   /// </summary>\n   class TreadLengthAtInnerSideCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// An int variable to keep the calculated TreadLength value.\n      /// </summary>\n      private double m_TreadLengthAtInnerSide = 0.0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static TreadLengthAtInnerSideCalculator s_Instance = new TreadLengthAtInnerSideCalculator();\n\n      /// <summary>\n      /// The TreadLengthAtInnerSideCalculator instance.\n      /// </summary>\n      public static TreadLengthAtInnerSideCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates number of risers for a stair.\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         bool valid = true;\n\n         if (StairsExporter.IsLegacyStairs(element))\n         {\n            double riserHeight, treadLength, nosingLength, waistThickness = 0;\n            int numberOfRisers, numberOfTreads = 0;\n            ExporterIFCUtils.GetLegacyStairsProperties(exporterIFC, element,\n                  out numberOfRisers, out numberOfTreads,\n                  out riserHeight, out treadLength, out m_TreadLengthAtInnerSide,\n                  out nosingLength, out waistThickness);\n         }\n         else if (element is Stairs || element is StairsRun)\n         {\n            Stairs stairs;\n            if (element is StairsRun)\n            {\n               StairsRun stairsRun = element as StairsRun;\n               stairs = stairsRun.GetStairs();\n            }\n            else\n               stairs = element as Stairs;\n\n            StairsType stairsType = stairs.Document.GetElement(stairs.GetTypeId()) as StairsType;\n\n            double treadLengthAtInnerSide;\n            if (ParameterUtil.GetDoubleValueFromElement(stairsType,\n                BuiltInParameter.STAIRSTYPE_MINIMUM_TREAD_WIDTH_INSIDE_BOUNDARY, out treadLengthAtInnerSide) != null)\n               m_TreadLengthAtInnerSide = UnitUtil.ScaleLength(treadLengthAtInnerSide);\n\n            if (m_TreadLengthAtInnerSide <= 0)\n               m_TreadLengthAtInnerSide = UnitUtil.ScaleLength(stairs.ActualTreadDepth);\n         }\n         else\n         {\n            valid = false;\n         }\n\n         // Get override from parameter\n         double treadLengthAtInnerSideOverride = 0.0;\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out treadLengthAtInnerSideOverride, entryMap.CompatibleRevitParameterName) != null)\n         {\n            m_TreadLengthAtInnerSide = UnitUtil.ScaleArea(treadLengthAtInnerSideOverride);\n         }\n\n         return valid;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_TreadLengthAtInnerSide;\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/TreadLengthAtOffsetCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.Architecture;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Common.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate tread length at offset parameters.\n   /// </summary>\n   class TreadLengthAtOffsetCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// An int variable to keep the calculated m_TreadLengthAtOffset value.\n      /// </summary>\n      private double m_TreadLengthAtOffset = 0.0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static TreadLengthAtOffsetCalculator s_Instance = new TreadLengthAtOffsetCalculator();\n\n      /// <summary>\n      /// The TreadLengthAtOffsetCalculator instance.\n      /// </summary>\n      public static TreadLengthAtOffsetCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates number of risers for a stair.\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         bool valid = true;\n         if (StairsExporter.IsLegacyStairs(element))\n         {\n            double riserHeight, treadLength, treadLengthAtInnerSide, nosingLength, waistThickness = 0;\n            int numberOfRisers, numberOfTreads = 0;\n            ExporterIFCUtils.GetLegacyStairsProperties(exporterIFC, element,\n                  out numberOfRisers, out numberOfTreads,\n                  out riserHeight, out treadLength, out treadLengthAtInnerSide,\n                  out nosingLength, out waistThickness);\n            m_TreadLengthAtOffset = treadLength;\n         }\n         else if (element is Stairs)\n         {\n            Stairs stairs = element as Stairs;\n            m_TreadLengthAtOffset = UnitUtil.ScaleLength(stairs.ActualTreadDepth);\n         }\n         else if (element is StairsRun)\n         {\n            StairsRun stairsRun = element as StairsRun;\n            Stairs stairs = stairsRun.GetStairs();\n            m_TreadLengthAtOffset = UnitUtil.ScaleLength(stairs.ActualTreadDepth);\n         }\n         else\n         {\n            valid = false;\n         }\n\n         // Get override from parameter\n         double treadLengthAtOffset = 0.0;\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out treadLengthAtOffset, entryMap.CompatibleRevitParameterName) != null)\n         {\n            m_TreadLengthAtOffset = UnitUtil.ScaleArea(treadLengthAtOffset);\n         }\n\n         return valid;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_TreadLengthAtOffset;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/TreadLengthCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.Architecture;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Common.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate tread length parameters.\n   /// </summary>\n   class TreadLengthCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// An int variable to keep the calculated TreadLength value.\n      /// </summary>\n      private double m_TreadLength = 0.0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static TreadLengthCalculator s_Instance = new TreadLengthCalculator();\n\n      /// <summary>\n      /// The TreadLengthCalculator instance.\n      /// </summary>\n      public static TreadLengthCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates number of risers for a stair.\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         bool valid = true;\n         if (StairsExporter.IsLegacyStairs(element))\n         {\n            double riserHeight, treadLengthAtInnerSide, nosingLength, waistThickness = 0;\n            int numberOfRisers, numberOfTreads = 0;\n            ExporterIFCUtils.GetLegacyStairsProperties(exporterIFC, element,\n                  out numberOfRisers, out numberOfTreads,\n                  out riserHeight, out m_TreadLength, out treadLengthAtInnerSide,\n                  out nosingLength, out waistThickness);\n         }\n         else if (element is Stairs)\n         {\n            Stairs stairs = element as Stairs;\n            m_TreadLength = UnitUtil.ScaleLength(stairs.ActualTreadDepth);\n         }\n         else if (element is StairsRun)\n         {\n            StairsRun stairsRun = element as StairsRun;\n            StairsRunType stairsRunType = stairsRun.Document.GetElement(stairsRun.GetTypeId()) as StairsRunType;\n            Stairs stairs = stairsRun.GetStairs();\n\n            m_TreadLength = UnitUtil.ScaleLength(stairs.ActualTreadDepth);\n         }\n         else\n         {\n            valid = false;\n         }\n\n         // Get override from parameter\n         double treadLengthOverride = 0.0;\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out treadLengthOverride, entryMap.CompatibleRevitParameterName) != null)\n         {\n            m_TreadLength = UnitUtil.ScaleArea(treadLengthOverride);\n         }\n\n         return valid;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_TreadLength;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/VolumeCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Common.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate volume for a space.\n   /// </summary>\n   class VolumeCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double m_Volume = 0;\n\n      /// <summary>\n      /// The SpaceVolumeCalculator instance.\n      /// </summary>\n      public static VolumeCalculator Instance { get; } = new VolumeCalculator();\n\n      /// <summary>\n      /// Calculates volume for a space.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\n      /// <param name=\"calcValues\">The IFCExportBodyParams.</param>\n      /// <param name=\"element\">The element to calculate the value.</param>\n      /// <param name=\"elementType\">The element type.</param>\n      /// <returns>True if the operation succeed, false otherwise.</returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         double volumeEps = MathUtil.Eps() * MathUtil.Eps() * MathUtil.Eps();\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Volume, entryMap.CompatibleRevitParameterName, \"IfcQtyVolume\") != null)\n         {\n            m_Volume = UnitUtil.ScaleArea(m_Volume);\n            if (m_Volume > volumeEps)\n               return true;\n         }\n\n         if (extrusionCreationData == null)\n            return false;\n\n         double area = UnitUtil.UnscaleArea(extrusionCreationData.ScaledArea);\n         double height = UnitUtil.UnscaleLength(extrusionCreationData.ScaledHeight);\n         m_Volume = UnitUtil.ScaleVolume(area * height);\n         return (m_Volume > volumeEps);\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>The double value.</returns>\n      public override double GetDoubleValue()\n      {\n         return m_Volume;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/WaistThicknessCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.Architecture;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate waist thickness parameters.\n   /// </summary>\n   class WaistThicknessCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// An int variable to keep the calculated WaistThickness value.\n      /// </summary>\n      private double m_WaistThickness = 0.0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static WaistThicknessCalculator s_Instance = new WaistThicknessCalculator();\n\n      /// <summary>\n      /// The WaistThicknessCalculator instance.\n      /// </summary>\n      public static WaistThicknessCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates number of risers for a stair.\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         bool valid = true;\n\n         // Get override from parameter\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_WaistThickness, entryMap.CompatibleRevitParameterName) != null)\n            m_WaistThickness = UnitUtil.ScaleArea(m_WaistThickness);\n\n         return valid;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_WaistThickness;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/WalkingLineOffsetCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.Architecture;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Common.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate walking line offset parameters.\n   /// </summary>\n   class WalkingLineOffsetCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// An int variable to keep the calculated WalkingLineOffset value.\n      /// </summary>\n      private double m_WalkingLineOffset = 0.0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static WalkingLineOffsetCalculator s_Instance = new WalkingLineOffsetCalculator();\n\n      /// <summary>\n      /// The WalkingLineOffsetCalculator instance.\n      /// </summary>\n      public static WalkingLineOffsetCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates number of risers for a stair.\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         bool valid = true;\n         if (StairsExporter.IsLegacyStairs(element))\n         {\n            double riserHeight, treadLength, treadLengthAtInnerSide, nosingLength, waistThickness = 0;\n            int numberOfRisers, numberOfTreads = 0;\n            ExporterIFCUtils.GetLegacyStairsProperties(exporterIFC, element,\n                  out numberOfRisers, out numberOfTreads,\n                  out riserHeight, out treadLength, out treadLengthAtInnerSide,\n                  out nosingLength, out waistThickness);\n            m_WalkingLineOffset = waistThickness / 2.0;        // !! The waist thickness seems to be wrongly associated with the width of the run!\n         }\n         else if (element is Stairs)\n         {\n            Stairs stairs = element as Stairs;\n            ICollection<ElementId> stairRuns = stairs.GetStairsRuns();\n            if (stairRuns.Count > 0)\n            {\n               // Get the run width from one of the run/flight to compute the walking line offset\n               StairsRun run = stairs.Document.GetElement(stairRuns.First()) as StairsRun;\n               m_WalkingLineOffset = run.ActualRunWidth / 2.0;\n            }\n         }\n         else if (element is StairsRun)\n         {\n            StairsRun stairsRun = element as StairsRun;\n            StairsRunType stairsRunType = stairsRun.Document.GetElement(stairsRun.GetTypeId()) as StairsRunType;\n            m_WalkingLineOffset = stairsRun.ActualRunWidth / 2.0;\n         }\n         else\n         {\n            valid = false;\n         }\n\n         // Get override from parameter\n         double walkingLineOffsetOverride = 0.0;\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out walkingLineOffsetOverride, entryMap.CompatibleRevitParameterName) != null)\n         {\n            m_WalkingLineOffset = UnitUtil.ScaleArea(walkingLineOffsetOverride);\n         }\n\n         return valid;\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_WalkingLineOffset;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Calculators/WidthCalculator.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Export.Toolkit;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.Calculators\n{\n   /// <summary>\n   /// A calculation class to calculate width for a slab.\n   /// </summary>\n   class WidthCalculator : PropertyCalculator\n   {\n      /// <summary>\n      /// A double variable to keep the calculated value.\n      /// </summary>\n      private double m_Width = 0;\n\n      /// <summary>\n      /// A static instance of this class.\n      /// </summary>\n      static WidthCalculator s_Instance = new WidthCalculator();\n\n      /// <summary>\n      /// The SlabWidthCalculator instance.\n      /// </summary>\n      public static WidthCalculator Instance\n      {\n         get { return s_Instance; }\n      }\n\n      /// <summary>\n      /// Calculates width for a slab.\n      /// </summary>\n      /// <param name=\"exporterIFC\">\n      /// The ExporterIFC object.\n      /// </param>\n      /// <param name=\"extrusionCreationData\">\n      /// The IFCExportBodyParams.\n      /// </param>\n      /// <param name=\"element\">\n      /// The element to calculate the value.\n      /// </param>\n      /// <param name=\"elementType\">\n      /// The element type.\n      /// </param>\n      /// <returns>\n      /// True if the operation succeed, false otherwise.\n      /// </returns>\n      public override bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType, EntryMap entryMap)\n      {\n         ShapeCalculator shapeCalculator = ShapeCalculator.Instance;\n         if (shapeCalculator != null && shapeCalculator.GetCurrentElement() == element)\n         {\n            if (String.Compare(shapeCalculator.GetStringValue(), IFCProvisionForVoidShapeType.Rectangle.ToString()) == 0)\n            {\n               IFCAnyHandle rectProfile = shapeCalculator.GetCurrentProfileHandle();\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(rectProfile))\n               {\n                  // This is already scaled.\n                  double? width = IFCAnyHandleUtil.GetDoubleAttribute(rectProfile, \"XDim\");\n                  m_Width = width.HasValue ? width.Value : 0.0;\n                  if (m_Width > MathUtil.Eps())\n                     return true;\n               }\n            }\n         }\n\n         ParameterUtil.GetDoubleValueFromElementOrSymbol(element, entryMap.RevitParameterName, out m_Width, entryMap.CompatibleRevitParameterName, \"IfcQtyWidth\");\n\n         m_Width = UnitUtil.ScaleLength(m_Width);\n         if (m_Width > MathUtil.Eps())\n            return true;\n\n         ElementId categoryId = CategoryUtil.GetSafeCategoryId(element); \n         IFCAnyHandle hnd = ExporterCacheManager.ElementToHandleCache.Find(element.Id);\n\n         if (IFCAnyHandleUtil.IsSubTypeOf(hnd, IFCEntityType.IfcDoor) || categoryId == new ElementId(BuiltInCategory.OST_Doors))\n         {\n            ParameterUtil.GetDoubleValueFromElementOrSymbol(element, BuiltInParameter.DOOR_WIDTH, out m_Width);\n         }\n         else if (IFCAnyHandleUtil.IsSubTypeOf(hnd, IFCEntityType.IfcWindow) || categoryId == new ElementId(BuiltInCategory.OST_Windows))\n         {\n            ParameterUtil.GetDoubleValueFromElementOrSymbol(element, BuiltInParameter.WINDOW_WIDTH, out m_Width);\n         }\n         else if (IFCAnyHandleUtil.IsSubTypeOf(hnd, IFCEntityType.IfcRampFlight)\n            || IFCAnyHandleUtil.IsSubTypeOf(hnd, IFCEntityType.IfcStairFlight))\n         {\n            ParameterUtil.GetDoubleValueFromElementOrSymbol(element, BuiltInParameter.STAIRS_ATTR_TREAD_WIDTH, out m_Width);\n         }\n         else if (IFCAnyHandleUtil.IsSubTypeOf(hnd, IFCEntityType.IfcCurtainWall))\n         {\n            m_Width = (element as Wall)?.Width ?? 0.0;\n         }\n\n         m_Width = UnitUtil.ScaleLength(m_Width);\n         if (m_Width > MathUtil.Eps())\n            return true;\n\n         if (extrusionCreationData == null)\n            return false;\n\n         // For Slab width is the length of the extrusion of the rectangle area profile (get it from ScaledHeight)\n         if (PropertyUtil.IsWidthLengthReversed(hnd))\n         {\n            m_Width = extrusionCreationData.ScaledHeight;\n         }\n         else\n         {\n            m_Width = extrusionCreationData.ScaledWidth;\n         }\n\n         return m_Width > MathUtil.Eps();\n      }\n\n      /// <summary>\n      /// Gets the calculated double value.\n      /// </summary>\n      /// <returns>\n      /// The double value.\n      /// </returns>\n      public override double GetDoubleValue()\n      {\n         return m_Width;\n      }\n   }\n\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/ClassificationUtil.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing System.Text.RegularExpressions;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Extensions;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet\r\n{\r\n   /// <summary>\r\n   /// Provides static methods to create varies IFC classifications.\r\n   /// </summary>\r\n   public class ClassificationUtil\r\n   {\r\n      private static string GetUniformatURL()\r\n      {\r\n         return \"https://www.csiresources.org/standards/uniformat\";\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates uniformat classification for a single element handle\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC</param>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"element\">the element</param>\r\n      /// <param name=\"elemHnd\">the element handle</param>\r\n      public static void CreateUniformatClassification(IFCFile file, Element element, IFCAnyHandle elemHnd)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportGeometryOnly)\r\n            return;\r\n\r\n         IFCEntityType entType = IFCEntityType.IfcObjectDefinition;\r\n         if (!Enum.TryParse(elemHnd.TypeName, out IFCEntityType hndEntType))\r\n            entType = hndEntType;\r\n         List<IFCAnyHandle> elemHnds = [ elemHnd ];\r\n         CreateUniformatClassification(file, element, elemHnds, entType);\r\n      }\r\n\r\n      private static IFCAnyHandle GetOrCreateClassification(IFCFile file, string uniformatKeyString)\r\n      {\r\n         if (!ExporterCacheManager.ClassificationCache.ClassificationHandles.TryGetValue(uniformatKeyString, out IFCAnyHandle classification))\r\n         {\r\n            classification = IFCInstanceExporter.CreateClassification(file, \"CSI (Construction Specifications Institute)\", \"1998\", 0, 0, 0,\r\n               uniformatKeyString, \"UniFormat Classification\", GetUniformatURL());\r\n            ExporterCacheManager.ClassificationCache.ClassificationHandles.Add(uniformatKeyString, classification);\r\n         }\r\n\r\n         return classification;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates uniformat classification.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"elemHnds\">The list of element handles that are part of the aggregate of the element.</param>\r\n      /// <param name=\"constraintEntType\">The IFC entity of which type the classification to be considered</param>\r\n      public static void CreateUniformatClassification(IFCFile file, Element element, IList<IFCAnyHandle> elemHnds, \r\n         IFCEntityType constraintEntType)\r\n      {\r\n         if (ExporterCacheManager.ClassificationCache.UniformatOverridden)\r\n            return;\r\n\r\n         // Create Uniformat classification, if it is not set.\r\n         IFCAnyHandle classification = null;\r\n         string uniformatKeyString = \"Uniformat\";\r\n         string uniformatDescription = \"\";\r\n\r\n         foreach (IFCAnyHandle elemHnd in elemHnds)\r\n         {\r\n            if (!IFCAnyHandleUtil.IsSubTypeOf(elemHnd, constraintEntType))\r\n               continue;\r\n\r\n            ElementId elementId = ExporterCacheManager.HandleToElementCache.Find(elemHnd);\r\n            Element elementToUse = (elementId == ElementId.InvalidElementId) ? element : element?.Document?.GetElement(elementId);\r\n            if (elementToUse == null)\r\n               continue;\r\n\r\n            if (ParameterUtil.GetStringValueFromElementOrSymbol(elementToUse, BuiltInParameter.ASSEMBLY_CODE, false, out string uniformatCode) == null)\r\n               ParameterUtil.GetStringValueFromElementOrSymbol(elementToUse, \"Assembly Code\", out uniformatCode);\r\n\r\n            if (!string.IsNullOrWhiteSpace(uniformatCode))\r\n            {\r\n               if (ParameterUtil.GetStringValueFromElementOrSymbol(elementToUse, BuiltInParameter.ASSEMBLY_DESCRIPTION, false, out string uniformatRefName) == null)\r\n                  ParameterUtil.GetStringValueFromElementOrSymbol(elementToUse, \"Assembly Description\", out uniformatRefName);\r\n\r\n               classification ??= GetOrCreateClassification(file, uniformatKeyString);\r\n\r\n               ClassificationReferenceKey key = new ClassificationReferenceKey(GetUniformatURL(),\r\n                  uniformatCode, uniformatRefName, uniformatDescription, classification);\r\n               InsertClassificationReference(file, key, elemHnd);\r\n            }\r\n         }\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create IfcClassification references from hardwired or custom classification code fields.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporterIFC class.</param>\r\n      /// <param name=\"file\">The IFC file class.</param>\r\n      /// <param name=\"element\">The element to export.</param>\r\n      /// <param name=\"elemHnd\">The corresponding IFC entity handle.</param>\r\n      /// <returns>True if a classification or classification reference is created.</returns>\r\n      public static bool CreateClassification(ExporterIFC exporterIFC, IFCFile file, \r\n         Element element, IFCAnyHandle elemHnd)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportGeometryOnly)\r\n            return false;\r\n\r\n         bool createdClassification = false;\r\n\r\n         string paramClassificationCode = string.Empty;\r\n         string baseClassificationCodeFieldName = \"ClassificationCode\";\r\n         List<string> customClassificationCodeNames = [];\r\n\r\n         string classificationName = null;\r\n         string classificationCode = null;\r\n         string classificationDescription = null;\r\n         string classificationRefName = null;\r\n\r\n         int customPass = 0;\r\n         int standardPass = 1;\r\n         int numCustomCodes = ExporterCacheManager.ClassificationCache.CustomClassificationCodeNames.Count;\r\n\r\n         // Note that we do the \"custom\" nodes first, and then the 10 standard ones.\r\n         Element elementType = element.Document.GetElement(element.GetTypeId());\r\n         while (standardPass <= 10)\r\n         {\r\n            // Create a classification, if it is not set.\r\n            string classificationCodeFieldName = null;\r\n            if (customPass < numCustomCodes)\r\n            {\r\n               classificationCodeFieldName = ExporterCacheManager.ClassificationCache.CustomClassificationCodeNames[customPass];\r\n               customPass++;\r\n\r\n               if (string.IsNullOrWhiteSpace(classificationCodeFieldName))\r\n                  continue;\r\n            }\r\n            else\r\n            {\r\n               classificationCodeFieldName = baseClassificationCodeFieldName;\r\n               if (standardPass > 1)\r\n                  classificationCodeFieldName += \"(\" + standardPass + \")\";\r\n               standardPass++;\r\n            }\r\n\r\n            if (ParameterUtil.GetStringValueFromElementOrSymbol(element, elementType, classificationCodeFieldName,\r\n               out paramClassificationCode) == null)\r\n            {\r\n               continue;\r\n            }\r\n\r\n            ParseClassificationCode(paramClassificationCode, classificationCodeFieldName, out classificationName, out classificationCode, out classificationRefName);\r\n\r\n            if (string.IsNullOrEmpty(classificationRefName))\r\n            {\r\n               if (string.Compare(classificationCodeFieldName, \"Assembly Code\", true) == 0)\r\n               {\r\n                  ParameterUtil.GetStringValueFromElementOrSymbol(element, elementType, BuiltInParameter.ASSEMBLY_DESCRIPTION, false, out classificationRefName);\r\n               }\r\n               else if (string.Compare(classificationCodeFieldName, \"Classification Number\", true) == 0)\r\n               {\r\n                  ParameterUtil.GetStringValueFromElementOrSymbol(element, elementType, BuiltInParameter.CLASSIFICATION_DESCRIPTION, false, out classificationRefName);\r\n               }\r\n            }\r\n            // If classificationName is empty, there is no classification to export.\r\n            if (String.IsNullOrEmpty(classificationName))\r\n               continue;\r\n\r\n            IFCAnyHandle classification;\r\n            if (!ExporterCacheManager.ClassificationCache.ClassificationHandles.TryGetValue(classificationName, out classification))\r\n            {\r\n               IFCClassification savedClassification = new IFCClassification();\r\n               if (ExporterCacheManager.ClassificationCache.ClassificationsByName.TryGetValue(classificationName, out savedClassification))\r\n               {\r\n                  if (savedClassification.ClassificationEditionDate != null)\r\n                  {\r\n                     classification = IFCInstanceExporter.CreateClassification(file, savedClassification.ClassificationSource, savedClassification.ClassificationEdition,\r\n                         savedClassification.ClassificationEditionDate.Day, savedClassification.ClassificationEditionDate.Month, savedClassification.ClassificationEditionDate.Year,\r\n                         savedClassification.ClassificationName, null, savedClassification.ClassificationLocation);\r\n                  }\r\n                  else\r\n                  {\r\n                     classification = IFCInstanceExporter.CreateClassification(file, savedClassification.ClassificationSource, savedClassification.ClassificationEdition,\r\n                         0, 0, 0, savedClassification.ClassificationName, null, savedClassification.ClassificationLocation);\r\n                  }\r\n\r\n                  if (!string.IsNullOrEmpty(savedClassification.ClassificationLocation))\r\n                     ExporterCacheManager.ClassificationLocationCache.Add(classificationName, savedClassification.ClassificationLocation);\r\n               }\r\n               else\r\n               {\r\n                  classification = IFCInstanceExporter.CreateClassification(file, \"\", \"\", 0, 0, 0, classificationName, null, null);\r\n               }\r\n\r\n               ExporterCacheManager.ClassificationCache.ClassificationHandles.Add(classificationName, classification);\r\n               createdClassification = true;\r\n            }\r\n\r\n            string location = null;\r\n            ExporterCacheManager.ClassificationLocationCache.TryGetValue(classificationName, out location);\r\n            if (!string.IsNullOrEmpty(classificationCode))\r\n            {\r\n               ClassificationReferenceKey key = new ClassificationReferenceKey(location,\r\n                  classificationCode, classificationRefName, classificationDescription, classification);\r\n               InsertClassificationReference(file, key, elemHnd);\r\n               createdClassification = true;\r\n            }\r\n         }\r\n\r\n         return createdClassification;\r\n      }\r\n\r\n      /// <summary>\r\n      /// \r\n      /// </summary>\r\n      /// <param name=\"paramClassificationCode\"></param>\r\n      /// <param name=\"classificationCodeFieldName\">ClassificationCode parameter name to check whether there is assignment in the UI</param>\r\n      /// <param name=\"classificationName\">the classificationName alwayws return something, default will be: \"Default Classification\"</param>\r\n      /// <param name=\"classificationCode\"></param>\r\n      /// <param name=\"classificationRefName\"></param>\r\n      /// <returns>True if any classification was found.</returns>\r\n      public static bool ParseClassificationCode(string paramClassificationCode, string classificationCodeFieldName, out string classificationName, out string classificationCode, out string classificationRefName)\r\n      {\r\n         // Processing the following format: [<classification name>] <classification code> | <classification description>\r\n         // Partial format will also be supported as long as it follows: (following existing OmniClass style for COBIe, using :)\r\n         //          <classification code>\r\n         //          <classification code> : <classification description>\r\n         //          [<Classification name>] <classification code>\r\n         //          [<Classification name>] <classification code> : <classification description>\r\n         // Note that the classification code can contain brackets and colons without specifying the classification name and description if the following syntax is used:\r\n         //          []<classification code>:\r\n\r\n         classificationName = null;\r\n         classificationCode = null;\r\n         classificationRefName = null;\r\n         \r\n         if (string.IsNullOrWhiteSpace(paramClassificationCode))\r\n            return false;     // do nothing if it is empty\r\n\r\n         int numCodeparts = 0;\r\n         // Only remove the left bracket if it is the first non-empty character in the string, and if there is a corresponding right bracket.\r\n         string parsedParamClassificationCode = paramClassificationCode.Trim();\r\n         if (parsedParamClassificationCode[0] == '[')\r\n         {\r\n            int rightBracket = parsedParamClassificationCode.IndexOf(\"]\");\r\n            if (rightBracket > 0)\r\n            {\r\n               // found [<classification Name>]\r\n               if (rightBracket > 1)\r\n                  classificationName = parsedParamClassificationCode.Substring(1, rightBracket - 1);\r\n               parsedParamClassificationCode = parsedParamClassificationCode.Substring(rightBracket + 1);\r\n               numCodeparts++;\r\n            }\r\n         }\r\n\r\n         // Now search for the last colon, for the description override.  Note that we allow the classification name to have a colon in it if the last character is a colon.\r\n         int colon = parsedParamClassificationCode.LastIndexOf(\":\");\r\n         if (colon >= 0)\r\n         {\r\n            if (colon < parsedParamClassificationCode.Count() - 1)\r\n            {\r\n               classificationRefName = parsedParamClassificationCode.Substring(colon + 1).Trim();\r\n               numCodeparts++;\r\n            }\r\n            parsedParamClassificationCode = parsedParamClassificationCode.Substring(0, colon);\r\n         }\r\n\r\n         classificationCode = parsedParamClassificationCode.Trim();\r\n         numCodeparts++;\r\n\r\n         if (string.IsNullOrEmpty(classificationName))\r\n         {\r\n            // No Classification Name specified, look for Classification Name assignment from the cache (from UI)\r\n            if (string.IsNullOrEmpty(classificationCodeFieldName)\r\n               || !ExporterCacheManager.ClassificationCache.FieldNameToClassificationNames.TryGetValue(classificationCodeFieldName, out classificationName))\r\n               classificationName = \"Default Classification\";\r\n         }\r\n\r\n         return numCodeparts > 0;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a new classification reference and associate it with the Element (ElemHnd)\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporterIFC class.</param>\r\n      /// <param name=\"file\">The IFC file class.</param>\r\n      /// <param name=\"elemHnd\">The corresponding IFC entity handle.</param>\r\n      /// <param name=\"classificationKeyString\">The classification name.</param>\r\n      /// <param name=\"classificationCode\">The classification code.</param>\r\n      /// <param name=\"classificationDescription\">The classification description.</param>\r\n      /// <param name=\"location\">The location of the classification.</param>\r\n      public static void InsertClassificationReference(IFCFile file,\r\n         ClassificationReferenceKey key, IFCAnyHandle elemHnd)\r\n      {\r\n         string relName = key.Name + \" \" + key.ItemReference;\r\n         string relGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n            GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAssociatesClassification, relName, elemHnd));\r\n         ExporterCacheManager.ClassificationCache.AddRelation(file, key, relGuid, null, elemHnd);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Description.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet\r\n{\r\n   /// <summary>\r\n   /// A description mapping of a group of Revit parameters and/or calculated values to an IfcPropertySet or IfcElementQuantity.\r\n   /// </summary>\r\n   /// <remarks>\r\n   /// A property or quantity set mapping is valid for only one entity type.\r\n   /// </remarks>\r\n   abstract public class Description\r\n   {\r\n      /// <summary>\r\n      /// The name of the property or quantity set.\r\n      /// </summary>\r\n      public string Name { get; set; } = String.Empty;\r\n\r\n      /// <summary>\r\n      /// The optional description of the property set or quantity.  Null by default.\r\n      /// </summary>\r\n      public string DescriptionOfSet { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The document and element id of the ViewSchedule that generated this description.\r\n      /// </summary>\r\n      public ElementId ViewScheduleId { get; set; } = ElementId.InvalidElementId;\r\n\r\n      /// <summary>\r\n      /// The type of element appropriate for this property or quantity set.\r\n      /// </summary>\r\n      public HashSet<IFCEntityType> EntityTypes { get; } = new HashSet<IFCEntityType>();\r\n\r\n      private string m_ObjectType = null;\r\n      /// <summary>\r\n      /// The object type of element appropriate for this property or quantity set.\r\n      /// Primarily used for identifying proxies.\r\n      /// </summary>\r\n      /// <remarks>Only one ObjectType is supported.</remarks>\r\n      public string ObjectType \r\n      { \r\n         private get \r\n         { \r\n            return m_ObjectType;  \r\n         }\r\n         set \r\n         {\r\n            // The data in ObjectType is frequently wrong and should be fixed.  In the meantime, we will\r\n            // fix the value here.\r\n            // Note that we expect only one object type - we will revisit that assumption upon fixing the data.\r\n            string[] objectTypeList = value.Split(',') ?? new string[] { };\r\n            foreach (string objectType in objectTypeList)\r\n            {\r\n               if (!(objectType.StartsWith(\"IFC\", StringComparison.InvariantCultureIgnoreCase)\r\n                  || objectType.StartsWith(\"Pset\", StringComparison.InvariantCultureIgnoreCase)))\r\n               {\r\n                  m_ObjectType = objectType;\r\n                  return;\r\n               }\r\n            }\r\n            m_ObjectType = string.Empty; \r\n         } \r\n      }\r\n\r\n      /// <summary>\r\n      /// The pre-defined type of element appropriate for this property or quantity set.\r\n      /// Primarily used for identifying sub-types of MEP objects.\r\n      /// </summary>\r\n      /// <remarks>Currently limited to one entity type.</remarks>\r\n      public string PredefinedType { get; set; } = string.Empty;\r\n\r\n      /// <summary>\r\n      /// The redirect calculator associated with this property or quantity set.\r\n      /// </summary>\r\n      public DescriptionCalculator DescriptionCalculator { get; set; }\r\n\r\n      /// <summary>\r\n      /// Identifies if the input handle is sub type of one IFCEntityType in the EntityTypes list.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <returns>True if it is sub type, false otherwise.</returns>\r\n      private bool IsSubTypeOfEntityTypes(IFCAnyHandle handle)\r\n      {\r\n         // Note that although EntityTypes is represented as a set, we still need to go through each item in the last to check for subtypes.\r\n         foreach (IFCEntityType entityType in EntityTypes)\r\n         {\r\n            if (IFCAnyHandleUtil.IsSubTypeOf(handle, entityType))\r\n               return true;\r\n         }\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// \r\n      /// </summary>\r\n      /// <param name=\"handle\"></param>\r\n      /// <returns></returns>\r\n      private bool IsSubTypeOfEntityTypes(IFCEntityType ifcEntityType)\r\n      {\r\n         IFCVersion ifcVersion = ExporterCacheManager.ExportOptionsCache.FileVersion;\r\n         var ifcEntitySchemaTree = IfcSchemaEntityTree.GetEntityDictFor(ExporterCacheManager.ExportOptionsCache.FileVersion);\r\n         if (ifcEntitySchemaTree == null || ifcEntitySchemaTree.IfcEntityDict == null || ifcEntitySchemaTree.IfcEntityDict.Count == 0)\r\n            return false;\r\n\r\n         // Note that although EntityTypes is represented as a set, we still need to go through each item in the last to check for subtypes.\r\n         foreach (IFCEntityType entityType in EntityTypes)\r\n         {\r\n            if (IfcSchemaEntityTree.IsSubTypeOf(ifcVersion, ifcEntityType.ToString(), entityType.ToString(), strict: false))\r\n               return true;\r\n         }\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the input handle matches the type of element, and optionally the object type, \r\n      /// to which this description applies.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <returns>True if it matches, false otherwise.</returns>\r\n      public bool IsAppropriateType(IFCAnyHandle handle)\r\n      {\r\n         if (handle == null || !IsSubTypeOfEntityTypes(handle))\r\n            return false;\r\n         if (string.IsNullOrEmpty(ObjectType))\r\n            return true;\r\n\r\n         IFCEntityType entityType = IFCAnyHandleUtil.GetEntityType(handle);\r\n         return EntityTypes.Contains(entityType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if either the entity or object type match this description.\r\n      /// </summary>\r\n      /// <param name=\"entity\">the Entity</param>\r\n      /// <returns>true if matches</returns>\r\n      public bool IsAppropriateEntityAndObjectType(IFCEntityType entity, string objectType)\r\n      {\r\n         if (entity == IFCEntityType.UnKnown || !IsSubTypeOfEntityTypes(entity))\r\n         {\r\n            return false;\r\n         }\r\n\r\n         if (string.IsNullOrEmpty(ObjectType))\r\n         {\r\n            return true;\r\n         }\r\n\r\n         return string.Equals(ObjectType, objectType, StringComparison.InvariantCultureIgnoreCase);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the input string matches the non-empty object type of the description.\r\n      /// </summary>\r\n      /// <param name=\"objectType\">The object type to check.</param>\r\n      /// <returns></returns>\r\n      public bool IsValidObjectType(string objectType)\r\n      {\r\n         return string.IsNullOrEmpty(ObjectType) ? false : \r\n            string.Equals(ObjectType, objectType, StringComparison.InvariantCultureIgnoreCase);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Find mapping information for property of this description.\r\n      /// </summary>\r\n      /// <param name=\"propertySetup\">The property setup type.</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <returns>The mapping info.</returns>\r\n      protected IFCPropertyMappingInfo GetMappedRevitParameterForDescription(PropertySetupType propertySetup, string propertyName)\r\n      {\r\n         string psetName = GetCorrectedPropertySetName(propertySetup);\r\n         return PropertyUtil.GetParameterMappingInfoFromCache(propertySetup, psetName, ElementId.InvalidElementId, propertyName);\r\n      }\r\n\r\n      private string GetCorrectedPropertySetName(PropertySetupType propertySetupType)\r\n      {\r\n         if (propertySetupType != PropertySetupType.IfcBaseQuantities || Name != \"BaseQuantities\")\r\n            return Name;\r\n         \r\n         if (!EntityTypes.Any())\r\n            return Name;\r\n\r\n         string entityName = EntityTypes.First().ToString();\r\n         if (string.IsNullOrEmpty(entityName) || !entityName.StartsWith(\"Ifc\"))\r\n            return Name;\r\n\r\n         return \"Qto_\" + entityName.Substring(3) + Name;\r\n      }\r\n\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/DescriptionCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing Autodesk.Revit;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet\r\n{\r\n   /// <summary>\r\n   /// A special calculator that is used to reassign a set of values from one entity to another.\r\n   /// </summary>\r\n   /// <remarks>\r\n   /// There are cases where properties or quantities are calculated by one entity, but assigned to another.  This object\r\n   /// describes an override in which a different entity is associated with the property set or quantity description.\r\n   /// At this time, it is not possible to define a new type of this class externally. The class contains\r\n   /// static utilities to obtain instances of the currently supported types of redirections.\r\n   /// </remarks>\r\n   abstract public class DescriptionCalculator\r\n   {\r\n      /// <summary>\r\n      /// Causes the calculation to be reassigned per the implementation of this particular redirection calculator.\r\n      /// </summary>\r\n      /// <param name=\"element\">\r\n      /// The element.\r\n      /// </param>\r\n      abstract public IFCAnyHandle RedirectDescription(Element element);\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/Entry.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.ApplicationServices;\r\nusing Autodesk.Revit.DB;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet\r\n{\r\n   /// <summary>\r\n   /// Represents a mapping from a Revit parameter or calculated value to an IFC property or quantity.\r\n   /// </summary>\r\n   /// <remarks>\r\n   /// Symbol property is true if the property comes from the symbol (vs. the element itself).  Default is TRUE.\r\n   /// Revit parameter type defaults to RPTString.\r\n   ///\r\n   /// One of the following:\r\n   /// <list type=\"bullet\">\r\n   /// <item>Revit parameter name</item>\r\n   /// <item>Revit built-in parameter</item>\r\n   /// <item>Calculator</item>\r\n   /// </list>\r\n   /// must be set. If more than one is valid,\r\n   /// generally, parameter name is used first, followed by parameter id,\r\n   /// then by function.\r\n   /// </remarks>\r\n   abstract public class Entry<T> where T : EntryMap, new()\r\n   {\r\n      /// <summary>\r\n      /// The name of the property or quantity as stored in the IFC export.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// Default is empty; if empty the name of the Revit parameter will be used.\r\n      /// </remarks>\r\n      public string PropertyName { get; set; } = string.Empty;\r\n\r\n      /// <summary>\r\n      /// True if the property comes from the element's type (vs. the element itself).\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// The default value is true.\r\n      /// </remarks>\r\n      public bool IsElementTypeProperty { get; set; } = true;\r\n\r\n      /// <summary>\r\n      /// True if the property is excluded from export in the Parameter Mapping dialog\r\n      /// </summary>\r\n      public bool IsExcluded { get; set; } = false;\r\n\r\n      public List<T> Entries { get; set; } = new List<T>();\r\n\r\n      /// <summary>\r\n      /// Constructor to create an Entry object.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// The parameter name for this Entry.\r\n      /// </param>\r\n      public Entry(string revitParameterName, string compatibleParamName = null)\r\n      {\r\n         Entries.Add(new T() { RevitParameterName = revitParameterName, CompatibleRevitParameterName = compatibleParamName }) ;\r\n         PropertyName = revitParameterName;\r\n      }\r\n\r\n      public Entry(string propertyName, T entry)\r\n      {\r\n         Entries.Add(entry);\r\n         PropertyName = propertyName;\r\n      }\r\n\r\n      public Entry(string propertyName, IEnumerable<T> entries)\r\n      {\r\n         Entries.AddRange(entries);\r\n         PropertyName = propertyName;\r\n      }\r\n\r\n      public PropertyCalculator PropertyCalculator\r\n      {\r\n         set\r\n         {\r\n            if (Entries.Count > 0)\r\n               Entries[0].PropertyCalculator = value;\r\n         }\r\n      }\r\n      public void AddLocalizedParameterName(LanguageType locale, string localizedName)\r\n      {\r\n         if (Entries.Count > 0)\r\n            Entries[0].AddLocalizedParameterName(locale, localizedName);\r\n      }\r\n\r\n      public void AddEntry(T entry)\r\n      {\r\n         Entries.Add(entry);\r\n      }\r\n\r\n      public void UpdateEntry()\r\n      {\r\n         foreach (T entry in Entries)\r\n            entry.UpdateEntry();\r\n      }\r\n      public void SetRevitParameterName(string revitParameterName)\r\n      {\r\n         if (Entries.Count == 0)\r\n            Entries.Add(new T() { RevitParameterName = revitParameterName });\r\n         else\r\n            Entries[0].RevitParameterName = revitParameterName;\r\n      }\r\n\r\n      public void SetRevitBuiltInParameter(BuiltInParameter builtInParameter)\r\n      {\r\n         if (Entries.Count == 0)\r\n            Entries.Add(new T() { RevitBuiltInParameter = builtInParameter });\r\n         else\r\n            Entries[0].RevitBuiltInParameter = builtInParameter;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/EntryMap.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Text;\nusing Autodesk.Revit;\nusing Autodesk.Revit.ApplicationServices;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet\n{\n   /// <summary>\n   /// Represents a mapping from a Revit parameter or calculated value to an IFC property or quantity.\n   /// </summary>\n   /// <remarks>\n   /// Symbol property is true if the property comes from the symbol (vs. the element itself).  Default is TRUE.\n   /// Revit parameter type defaults to RPTString.\n   ///\n   /// One of the following:\n   /// <list type=\"bullet\">\n   /// <item>Revit parameter name</item>\n   /// <item>Revit built-in parameter</item>\n   /// <item>Calculator</item>\n   /// </list>\n   /// must be set. If more than one is valid,\n   /// generally, parameter name is used first, followed by parameter id,\n   /// then by function.\n   /// </remarks>\n   abstract public class EntryMap\n   {\n      /// <summary>\n      /// The parameter name to be used to get the parameter value.  This is generally in English (ENU).\n      /// </summary>\n      public string RevitParameterName { get; set; } = string.Empty;\n\n      /// <summary>\n      /// The name kept for backward compatibility when the revit parameter name uses the old format, which is equal to the property name \n      /// </summary>\n      public string CompatibleRevitParameterName { get; set; } = string.Empty;\n\n      /// <summary>\n      /// The parameter name to be used to get the parameter value in other locales.\n      /// </summary>\n      public Dictionary<LanguageType, string> LocalizedRevitParameterNames { get; set; } = null;\n\n      /// <summary>\n      /// The built in parameter.\n      /// </summary>\n      public BuiltInParameter RevitBuiltInParameter { get; set; } = BuiltInParameter.INVALID;\n\n      /// <summary>\n      /// The property calculator to calculate the property value.\n      /// </summary>\n      public PropertyCalculator PropertyCalculator { get; set; }\n\n      /// <summary>\n      /// Indicates if the property value is retrieved only from the calculator.\n      /// </summary>\n      public bool UseCalculatorOnly { get; set; }  = false;\n\n      /// <summary>\n      /// Calculated value indicates whether or not there is a valid parameter name associated with this entry.\n      /// </summary>\n      public bool ParameterNameIsValid { get; private set; } = false;\n\n      public EntryMap() { }\n\n      /// <summary>\n      /// Constructor to create an Entry object.\n      /// </summary>\n      /// <param name=\"revitParameterName\">\n      /// The parameter name for this Entry.\n      /// </param>\n      public EntryMap(string revitParameterName, string compatibleParamName)\n      {\n         RevitParameterName = revitParameterName;\n         CompatibleRevitParameterName = compatibleParamName;\n      }\n\n      public EntryMap(BuiltInParameter builtInParameter)\n      {\n         RevitBuiltInParameter = builtInParameter;\n      }\n\n      public EntryMap(PropertyCalculator calculator)\n      {\n         PropertyCalculator = calculator;\n      }\n\n      public EntryMap(string revitParameterName, BuiltInParameter builtInParameter)\n      {\n         RevitParameterName = revitParameterName;\n         RevitBuiltInParameter = builtInParameter;\n      }\n\n      /// <summary>\n      /// Updates caches to make use of this Entry faster after it is completed.\n      /// </summary>\n      public void UpdateEntry()\n      {\n         ParameterNameIsValid = (!UseCalculatorOnly && (!string.IsNullOrEmpty(RevitParameterName) || (RevitBuiltInParameter != BuiltInParameter.INVALID)));\n      }\n\n      /// <summary>\n      /// The localized name of the parameter in Revit (if it exists).\n      /// </summary>\n      /// <param name=\"locale\">The language.</param>\n      /// <returns>The localized name, or null if it does not exist.</returns>\n      public string LocalizedRevitParameterName(LanguageType locale)\n      {\n         if (LocalizedRevitParameterNames != null)\n         {\n            if (LocalizedRevitParameterNames.TryGetValue(locale, out string localizedName))\n               return localizedName;\n         }\n         return null;\n      }\n\n      /// <summary>\n      /// Adds a localized name for the entry.\n      /// </summary>\n      /// <param name=\"locale\">The language.</param>\n      /// <param name=\"localizedName\">The name for that language.</param>\n      public void AddLocalizedParameterName(LanguageType locale, string localizedName)\n      {\n         if (LocalizedRevitParameterNames == null)\n            LocalizedRevitParameterNames = new Dictionary<LanguageType, string>();\n\n         if (LocalizedRevitParameterNames.ContainsKey(locale))\n            throw new ArgumentException(\"Locale value already defined.\");\n         LocalizedRevitParameterNames[locale] = localizedName;\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/ExporterInitializer_PsetDefIFC2X2Enum.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Autodesk.Revit;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Exporter.PropertySet;\nusing Revit.IFC.Export.Exporter.PropertySet.Calculators;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Export.Toolkit;\nusing Revit.IFC.Common.Enums;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.IFC2X2\n{\n\n\n   public enum PEnum_RequestSourceType {\n      Email,\n      Fax,\n      Phone,\n      Post,\n      Verbal,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_RequestStatus {\n      Hold,\n      NoAction,\n      Schedule,\n      Urgent,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_FailPosition {\n      FailOpen,\n      FailClosed,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ElectricActuatorType {\n      MotorDrive,\n      Magnetic,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_AirSideSystemType {\n      CONSTANTVOLUME,\n      CONSTANTVOLUMESINGLEZONE,\n      CONSTANTVOLUMEMULTIPLEZONEREHEAT,\n      CONSTANTVOLUMEBYPASS,\n      VARIABLEAIRVOLUME,\n      VARIABLEAIRVOLUMEREHEAT,\n      VARIABLEAIRVOLUMEINDUCTION,\n      VARIABLEAIRVOLUMEFANPOWERED,\n      VARIABLEAIRVOLUMEDUALCONDUIT,\n      VARIABLEAIRVOLUMEVARIABLEDIFFUSERS,\n      VARIABLEAIRVOLUMEVARIABLETEMPERATURE,\n      OTHER,\n      NOTKNOWN,\n      UNSET\n}\n\n   public enum PEnum_AirSideSystemDistributionType {\n      SINGLEDUCT,\n      DUALDUCT,\n      MULTIZONE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalBoxArrangementType {\n      SINGLEDUCT,\n      DUALDUCT,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalBoxReheatType {\n      ELECTRICALREHEAT,\n      WATERCOILREHEAT,\n      STEAMCOILREHEAT,\n      GASREHEAT,\n      NONE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalShape {\n      ROUND,\n      RECTANGULAR,\n      SQUARE,\n      SLOT,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalFlowPattern {\n      LINEARSINGLE,\n      LINEARDOUBLE,\n      LINEARFOURWAY,\n      RADIAL,\n      SWIRL,\n      DISPLACMENT,\n      COMPACTJET,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalDischargeDirection {\n      PARALLEL,\n      PERPENDICULAR,\n      ADJUSTABLE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalFinishType {\n      ANNODIZED,\n      PAINTED,\n      NONE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalMountingType {\n      SURFACE,\n      FLATFLUSH,\n      LAYIN,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalCoreType {\n      SHUTTERBLADE,\n      CURVEDBLADE,\n      REMOVABLE,\n      REVERSIBLE,\n      NONE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalFlowControlType {\n      DAMPER,\n      BELLOWS,\n      NONE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalFaceType {\n      FOURWAYPATTERN,\n      SINGLEDEFLECTION,\n      DOUBLEDEFLECTION,\n      SIGHTPROOF,\n      EGGCRATE,\n      PERFORATED,\n      LOUVERED,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirToAirHeatTransferHeatTransferType {\n      SENSIBLE,\n      LATENT,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_BACnetEventEnableType {\n      ToOffNormal,\n      ToFault,\n      ToNormal,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_BACnetNotifyType {\n      Alarm,\n      Event,\n      AcknowledgeNotification,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_AssetAccountingType {\n      Fixed,\n      NonFixed,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_AssetTaxType {\n      Capitalised,\n      Expensed,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_AssetInsuranceType {\n      Personal,\n      Real,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_PolarityEnum {\n      Normal,\n      Reverse,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_BACnetFeedbackValueType {\n      Active,\n      Inactive,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_BACnetAckedTransitionsType {\n      ToOffNormal,\n      ToFault,\n      ToNormal,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_BACnetAlarmValueType {\n      Active,\n      Inactive,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_BoilerOperatingMode {\n      FIXED,\n      TWOSTEP,\n      MODULATING,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_ConduitShapeType {\n      Circular,\n      Oval,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ConductorFunction {\n      Phase,\n      Neutral,\n      ProtectiveGround,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_CoilCoolant {\n      WATER,\n      BRINE,\n      GLYCOL,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CoilConnectionDirection {\n      LEFT,\n      RIGHT,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CoilFluidArrangement {\n      CROSSFLOW,\n      CROSSCOUNTERFLOW,\n      CROSSPARALLELFLOW,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CompressorTypePowerSource {\n      MOTORDRIVEN,\n      ENGINEDRIVEN,\n      GASTURBINE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_RefrigerantClass {\n      CFC,\n      HCFC,\n      HFC,\n      HYDROCARBONS,\n      AMMONIA,\n      CO2,\n      H2O,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CooledBeamActiveAirFlowConfigurationType {\n      BIDIRECTIONAL,\n      UNIDIRECTIONALRIGHT,\n      UNIDIRECTIONALLEFT,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CooledBeamSupplyAirConnectionType {\n      STRAIGHT,\n      RIGHT,\n      LEFT,\n      TOP,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CooledBeamWaterFlowControlSystemType {\n      NONE,\n      ONOFFVALVE,\n      _2WAYVALVE,\n      _3WAYVALVE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CooledBeamIntegratedLightingType {\n      NONE,\n      DIRECT,\n      INDIRECT,\n      DIRECTANDINDIRECT,\n      OTHER,\n      NOTKNOWN,\n      UNSET\n}\n\n   public enum PEnum_CooledBeamPipeConnection {\n      STRAIGHT,\n      RIGHT,\n      LEFT,\n      TOP,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CoolingTowerCircuitType {\n      OPENCIRCUIT,\n      CLOSEDCIRCUITWET,\n      CLOSEDCIRCUITDRY,\n      CLOSEDCIRCUITDRYWET,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CoolingTowerFlowArrangement {\n      COUNTERFLOW,\n      CROSSFLOW,\n      PARALLELFLOW,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CoolingTowerSprayType {\n      SPRAYFILLED,\n      SPLASHTYPEFILL,\n      FILMTYPEFILL,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CoolingTowerCapacityControl {\n      FANCYCLING,\n      TWOSPEEDFAN,\n      VARIABLESPEEDFAN,\n      DAMPERSCONTROL,\n      BYPASSVALVECONTROL,\n      MULTIPLESERIESPUMPS,\n      TWOSPEEDPUMP,\n      VARIABLESPEEDPUMP,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CoolingTowerControlStrategy {\n      FIXEDEXITINGWATERTEMP,\n      WETBULBTEMPRESET,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_DamperOperation {\n      AUTOMATIC,\n      MANUAL,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_DamperOrientation {\n      VERTICAL,\n      HORIZONTAL,\n      VERTICALORHORIZONTAL,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_DamperBladeAction {\n      FOLDINGCURTAIN,\n      PARALLEL,\n      OPPOSED,\n      SINGLE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_DamperBladeShape {\n      FLAT,\n      FABRICATEDAIRFOIL,\n      EXTRUDEDAIRFOIL,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_DamperBladeEdge {\n      CRIMPED,\n      UNCRIMPED,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_ControlDamperOperation {\n      LINEAR,\n      EXPONENTIAL,\n      IFCPOLYLINE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FireDamperActuationType {\n      GRAVITY,\n      SPRING,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FireDamperClosureRating {\n      DYNAMIC,\n      STATIC,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_DuctConnectionType {\n      BEADEDSLEEVE,\n      COMPRESSION,\n      CRIMP,\n      DRAWBAND,\n      DRIVESLIP,\n      FLANGED,\n      OUTSIDESLEEVE,\n      SLIPON,\n      SOLDERED,\n      SSLIP,\n      STANDINGSEAM,\n      SWEDGE,\n      WELDED,\n      OTHER,\n      NONE,\n      USERDEFINED,\n      NOTDEFINED}\n\n   public enum PEnum_PipeEndStyleTreatment {\n      BRAZED,\n      COMPRESSION,\n      FLANGED,\n      GROOVED,\n      OUTSIDESLEEVE,\n      SOLDERED,\n      SWEDGE,\n      THREADED,\n      WELDED,\n      OTHER,\n      NONE,\n      UNSET}\n\n   public enum PEnum_DuctSizingMethod {\n      CONSTANTFRICTION,\n      CONSTANTPRESSURE,\n      STATICREGAIN,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_DuctSegmentShape {\n      FLATOVAL,\n      RECTANGULAR,\n      ROUND,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_DuctSilencerShape {\n      FLATOVAL,\n      RECTANGULAR,\n      ROUND,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_InsulationStandardClass {\n      Class0Appliance,\n      Class0IAppliance,\n      ClassIAppliance,\n      ClassIIAppliance,\n      ClassIIIAppliance,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_MotorEnclosureType {\n      OpenDripProof,\n      TotallyEnclosedAirOver,\n      TotallyEnclosedFanCooled,\n      TotallyEnclosedNonVentilated,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ElementShading {\n      FIXED,\n      MOVABLE,\n      EXTERIOR,\n      INTERIOR,\n      OVERHANG,\n      SIDEFIN,\n      USERDEFINED,\n      NOTDEFINED}\n\n   public enum PEnum_EvaporativeCoolerFlowArrangement {\n      COUNTERFLOW,\n      CROSSFLOW,\n      PARALLELFLOW,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_EvaporatorMediumType {\n      COLDLIQUID,\n      COLDAIR,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_EvaporatorCoolant {\n      WATER,\n      BRINE,\n      GLYCOL,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FanMotorConnectionType {\n      DIRECTDRIVE,\n      BELTDRIVE,\n      COUPLING,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FanCapacityControlType {\n      INLETVANE,\n      VARIABLESPEEDDRIVE,\n      BLADEPITCHANGLE,\n      TWOSPEED,\n      DISCHARGEDAMPER,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FilterAirParticleFilterType {\n      COARSEMETALSCREEN,\n      COARSECELLFOAMS,\n      COARSESPUNGLASS,\n      MEDIUMELECTRETFILTER,\n      MEDIUMNATURALFIBERFILTER,\n      HEPAFILTER,\n      ULPAFILTER,\n      MEMBRANEFILTERS,\n      RENEWABLEMOVINGCURTIANDRYMEDIAFILTER,\n      ELECTRICALFILTER,\n      ROLLFORM,\n      ADHESIVERESERVOIR,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FilterAirParticleFilterSeparationType {\n      BAG,\n      PLEAT,\n      TREADSEPARATION,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_BreechingInletType {\n      TWOWAY,\n      FOURWAY,\n      OTHER,\n      USERDEFINED,\n      NOTDEFINED}\n\n   public enum PEnum_BreechingInletCouplingType {\n      INSTANTANEOUS_FEMALE,\n      INSTANTANEOUS_MALE,\n      OTHER,\n      USERDEFINED,\n      NOTDEFINED}\n\n   public enum PEnum_FireHydrantType {\n      DryBarrel,\n      WetBarrel,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_HoseReelType {\n      Rack,\n      Reel,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_HoseReelMountingType {\n      Cabinet_Recessed,\n      Cabinet_SemiRecessed,\n      Surface,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_HoseNozzleType {\n      Fog,\n      StraightStream,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_SprinklerType {\n      Ceiling,\n      Concealed,\n      Cutoff,\n      Pendant,\n      RecessedPendant,\n      Sidewall,\n      Upright,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_SprinklerActivation {\n      Bulb,\n      FusibleSolder,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_SprinklerResponse {\n      Quick,\n      Standard}\n\n   public enum PEnum_SprinklerBulbLiquidColor {\n      Orange,\n      Red,\n      Yellow,\n      Green,\n      Blue,\n      Mauve,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_DamperSizingMethod {\n      NOMINAL,\n      EXACT,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FlowMeterPurpose {\n      MASTER,\n      SUBMASTER,\n      SUBMETER,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_PressureGaugeType {\n      Dial,\n      Digital,\n      Manometer,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ThermometerType {\n      Dial,\n      Digital,\n      Stem,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_MeterReadOutType {\n      DIAL,\n      DIGITAL,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_GasType {\n      COMMERCIALBUTANE,\n      COMMERCIALPROPANE,\n      LIQUEFIEDPETROLEUMGAS,\n      NATURALGAS,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_WaterMeterType {\n      COMPOUND,\n      INFERENTIAL,\n      PISTON,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_BackflowPreventerType {\n      NONE,\n      ATMOSPHERICVACUUMBREAKER,\n      ANTISIPHONVALVE,\n      DOUBLECHECKBACKFLOWPREVENTER,\n      PRESSUREVACUUMBREAKER,\n      REDUCEDPRESSUREBACKFLOWPREVENTER,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FanDischargeType {\n      DUCT,\n      SCREEN,\n      LOUVER,\n      DAMPER,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FanApplicationType {\n      SUPPLY,\n      RETURN,\n      EXHAUST,\n      COOLINGTOWER,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FanCoilPosition {\n      DRAWTHROUGH,\n      BLOWTHROUGH,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FanMotorPosition {\n      INAIRSTREAM,\n      OUTOFAIRSTREAM,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FanMountingType {\n      MANUFACTUREDCURB,\n      FIELDERECTEDCURB,\n      CONCRETEPAD,\n      SUSPENDED,\n      WALLMOUNTED,\n      DUCTMOUNTED,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CentrifugalFanDischargePosition {\n      TOPHORIZONTAL,\n      TOPANGULARDOWN,\n      TOPANGULARUP,\n      DOWNBLAST,\n      BOTTOMANGULARDOWN,\n      BOTTOMHORIZONTAL,\n      BOTTOMANGULARUP,\n      UPBLAST,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CentrifugalFanRotation {\n      CLOCKWISE,\n      COUNTERCLOCKWISE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CentrifugalFanArrangement {\n      ARRANGEMENT1,\n      ARRANGEMENT2,\n      ARRANGEMENT3,\n      ARRANGEMENT4,\n      ARRANGEMENT7,\n      ARRANGEMENT8,\n      ARRANGEMENT9,\n      ARRANGEMENT10,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_PumpBaseType {\n      FRAME,\n      BASE,\n      NONE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_PumpDriveConnectionType {\n      DIRECTDRIVE,\n      BELTDRIVE,\n      COUPLING,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_TankComposition {\n      COMPLEX,\n      ELEMENT,\n      PARTIAL,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalAirflowType {\n      SUPPLYAIR,\n      RETURNAIR,\n      EXHAUSTAIR,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalLocation {\n      SIDEWALLHIGH,\n      SIDEWALLLOW,\n      CEILINGPERIMETER,\n      CEILINGINTERIOR,\n      FLOOR,\n      SILL,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_GasApplianceType {\n      GASFIRE,\n      GASCOOKER,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FlueType {\n      BALANCEDFLUE,\n      FLUED,\n      FLUELESS,\n      OPENFLUED,\n      ROOMSEALED,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_GasBurnerType {\n      FORCEDDRAFT,\n      NATURALDRAFT,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_HeatExchangerArrangement {\n      COUNTERFLOW,\n      CROSSFLOW,\n      PARALLELFLOW,\n      MULTIPASS,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_HumidifierApplication {\n      PORTABLE,\n      FIXED,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_HumidifierInternalControl {\n      ONOFF,\n      STEPPED,\n      MODULATING,\n      NONE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_LampBallastType {\n      Conventional,\n      Electronic,\n      LowLoss,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_LampCompensationType {\n      Capacitive,\n      Inductive,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_LightFixtureMountingType {\n      CableSpanned,\n      FreeStanding,\n      Pole_Side,\n      Pole_Top,\n      Recessed,\n      Surface,\n      Suspended,\n      TrackMounted,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_LightFixturePlacingType {\n      Ceiling,\n      Floor,\n      Furniture,\n      Pole,\n      Wall,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_BuildingThermalExposure {\n      LIGHT,\n      MEDIUM,\n      HEAVY,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_PackingCareType {\n      Fragile,\n      HandleWithCare,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_PermitType {\n      Access,\n      Work,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ProjectionElementShadingDeviceType {\n      FIXED,\n      MOVABLE,\n      EXTERIOR,\n      INTERIOR,\n      OVERHANG,\n      SIDEFIN,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_MaintenanceType {\n      ConditionBased,\n      Corrective,\n      PlannedCorrective,\n      Scheduled,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_PriorityType {\n      High,\n      Medium,\n      Low,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_PropertyAgreementType {\n      Assignment,\n      Lease,\n      Tenant,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_CircuitBreakerType {\n      ACB,\n      MCB,\n      MCCB,\n      Vacuum,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_EarthFailureDeviceType {\n      Standard,\n      TimeDelayed,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_FuseDisconnectorType {\n      EngineProtectionDevice,\n      FusedSwitch,\n      HRC,\n      OverloadProtectionDevice,\n      SwitchDisconnectorFuse,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_VaristorType {\n      MetalOxide,\n      ZincOxide,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ReinforcementBarType {\n      RING,\n      SPIRAL,\n      OTHER,\n      USERDEFINED,\n      NOTDEFINED}\n\n   public enum PEnum_ReinforcementBarAllocationType {\n      SINGLE,\n      DOUBLE,\n      ALTERNATE,\n      OTHER,\n      USERDEFINED,\n      NOTDEFINED}\n\n   public enum PEnum_RiskType {\n      Business,\n      Hazard,\n      HealthAndSafety,\n      Insurance,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_BathType {\n      Domestic,\n      DomesticCorner,\n      Foot,\n      Jacuzzi,\n      Plunge,\n      Sitz,\n      Treatment,\n      Whirlpool,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_SanitaryMounting {\n      BackToWall,\n      Pedestal,\n      CounterTop,\n      WallHung,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_CisternHeight {\n      HighLevel,\n      LowLevel,\n      None,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_FlushType {\n      Lever,\n      Pull,\n      Push,\n      Sensor,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_FountainType {\n      DrinkingWater,\n      Eyewash,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ShowerType {\n      Drench,\n      Individual,\n      Tunnel,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_SinkType {\n      Belfast,\n      Bucket,\n      Cleaners,\n      Combination_Left,\n      Combination_Right,\n      Combination_Double,\n      Drip,\n      Laboratory,\n      London,\n      Plaster,\n      Pot,\n      Rinsing,\n      Shelf,\n      VegetablePreparation,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ToiletType {\n      BedPanWasher,\n      Chemical,\n      CloseCoupled,\n      LooseCoupled,\n      SlopHopper,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_ToiletPanType {\n      Siphonic,\n      Squat,\n      WashDown,\n      WashOut,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_UrinalType {\n      Bowl,\n      Slab,\n      Stall,\n      Trough,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_WashHandBasinType {\n      DentalCuspidor,\n      HandRinse,\n      Hospital,\n      Tipup,\n      Washfountain,\n      WashingTrough,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ToiletSeatType {\n      Extension,\n      Inset,\n      OpenFrontSeat,\n      RingSeat,\n      SelfRaising,\n      None,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_MovementSensingType {\n      PhotoElectricCell,\n      PressurePad,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_TemperatureSensorType {\n      HighLimit,\n      LowLimit,\n      OutsideTemperature,\n      OperatingTemperature,\n      RoomTemperature,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_SpaceHeaterTemperatureClassification {\n      LOWTEMPERATURE,\n      HIGHTEMPERATURE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_HeatingSource {\n      FUEL,\n      GAS,\n      ELECTRICITY,\n      HOTWATER,\n      STEAM,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_SwitchFunctionType {\n      OnOffSwitch,\n      IntermediateSwitch,\n      DoubleThrowSwitch,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ContactorType {\n      CapacitorSwitching,\n      LowCurrent,\n      MagneticLatching,\n      MechanicalLatching,\n      Modular,\n      Reversing,\n      Standard,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_StarterType {\n      AutoTransformer,\n      Manual,\n      DirectOnLine,\n      Frequency,\n      nStep,\n      Rheostatic,\n      StarDelta,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_SwitchDisconnectorType {\n      CenterBreak,\n      DividedSupport,\n      DoubleBreak,\n      EarthingSwitch,\n      Isolator,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_LoadDisconnectionType {\n      OffLoad,\n      OnLoad,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_ToggleSwitchType {\n      BreakGlass,\n      Changeover,\n      Dimmer,\n      KeyOperated,\n      ManualPull,\n      PushButton,\n      Pullcord,\n      Rocker,\n      Selector,\n      Twist,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_SwitchUsage {\n      Emergency,\n      Guard,\n      Limit,\n      Start,\n      Stop,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_SwitchActivation {\n      Actuator,\n      Foot,\n      Hand,\n      Proximity,\n      Sound,\n      TwoHand,\n      Wire,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_FurniturePanelType {\n      Acoustical,\n      Glazed,\n      Horz_Seg,\n      Monolithic,\n      Open,\n      Ends,\n      Door,\n      Screen,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_TankType {\n      BREAKPRESSURE,\n      EXPANSION,\n      FEEDANDEXPANSION,\n      GASSTORAGEBUTANE,\n      GASSTORAGELIQUIFIEDPETROLEUMGAS,\n      GASSTORAGEPROPANE,\n      OILSERVICE,\n      OILSTORAGE,\n      PRESSUREVESSEL,\n      WATERSTORAGEGENERAL,\n      WATERSTORAGEPOTABLE,\n      WATERSTORAGEPROCESS,\n      WATERSTORAGECOOLINGTOWERMAKEUP,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_TankAccessType {\n      NONE,\n      LOOSECOVER,\n      MANHOLE,\n      SECUREDCOVER,\n      SECUREDCOVERWITHMANHOLE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_TankPatternType {\n      HORIZONTALCYLINDER,\n      VERTICALCYLINDER,\n      RECTANGULAR,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_EndShapeType {\n      CONCAVECONVEX,\n      FLATCONVEX,\n      CONVEXCONVEX,\n      CONCAVEFLAT,\n      FLATFLAT,\n      OTHER,\n      NOTKNOWN,\n      UNSET\n}\n\n   public enum PEnum_SecondaryCurrentType {\n      AC,\n      DC,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_AirHandlerConstruction {\n      MANUFACTUREDITEM,\n      CONSTRUCTEDONSITE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirHandlerFanCoilArrangement {\n      BLOWTHROUGH,\n      DRAWTHROUGH,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_ValvePattern {\n      SINGLEPORT,\n      ANGLED_2_PORT,\n      STRAIGHT_2_PORT,\n      STRAIGHT_3_PORT,\n      CROSSOVER_4_PORT,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_ValveOperation {\n      DROPWEIGHT,\n      FLOAT,\n      HYDRAULIC,\n      LEVER,\n      LOCKSHIELD,\n      MOTORIZED,\n      PNEUMATIC,\n      SOLENOID,\n      SPRING,\n      THERMOSTATIC,\n      WHEEL,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_ValveMechanism {\n      BALL,\n      BUTTERFLY,\n      CONFIGUREDGATE,\n      GLAND,\n      GLOBE,\n      LUBRICATEDPLUG,\n      NEEDLE,\n      PARALLELSLIDE,\n      PLUG,\n      WEDGEGATE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FaucetType {\n      BIB,\n      GLOBE,\n      DIVERTER,\n      DIVIDEDFLOWCOMBINATION,\n      PILLAR,\n      SINGLEOUTLETCOMBINATION,\n      SPRAY,\n      SPRAYMIXING,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FaucetOperation {\n      CERAMICDISC,\n      LEVERHANDLE,\n      NONCONCUSSIVESELFCLOSING,\n      QUATERTURN,\n      QUICKACTION,\n      SCREWDOWN,\n      SELFCLOSING,\n      TIMEDSELFCLOSING,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FaucetFunction {\n      COLD,\n      HOT,\n      MIXED,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_IsolatingPurpose {\n      LANDING,\n      LANDINGWITHPRESSUREREGULATION,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_MixingValveControl {\n      MANUAL,\n      PREDEFINED,\n      THERMOSTATIC,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_TrapType {\n      None,\n      P_Trap,\n      Q_Trap,\n      S_Trap,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_InletPatternType {\n      None,\n      _1 = 1,\n      _2 = 2,\n      _3 = 3,\n      _4 = 4,\n      _12 = 12,\n      _13 = 13,\n      _14 = 14,\n      _23 = 23,\n      _24 = 24,\n      _34 = 34,\n      _123 = 123,\n      _124 = 124,\n      _134 = 134,\n      _234 = 234,\n      _1234 = 1234}\n\n   public enum PEnum_GullyType {\n      Vertical,\n      BackInlet,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_BackInletPatternType {\n      None,\n      _1 = 1,\n      _2 = 2,\n      _3 = 3,\n      _4 = 4,\n      _12 = 12,\n      _13 = 13,\n      _14 = 14,\n      _23 = 23,\n      _24 = 24,\n      _34 = 34,\n      _123 = 123,\n      _124 = 124,\n      _134 = 134,\n      _234 = 234,\n      _1234 = 1234}\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/ExporterInitializer_PsetDefIFC2X3Enum.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Autodesk.Revit;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Exporter.PropertySet;\nusing Revit.IFC.Export.Exporter.PropertySet.Calculators;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Export.Toolkit;\nusing Revit.IFC.Common.Enums;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet.IFC2X3\n{\n\n\n   public enum PEnum_RequestSourceType {\n      Email,\n      Fax,\n      Phone,\n      Post,\n      Verbal,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_RequestStatus {\n      Hold,\n      NoAction,\n      Schedule,\n      Urgent,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_FailPosition {\n      FailOpen,\n      FailClosed,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ElectricActuatorType {\n      MotorDrive,\n      Magnetic,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_AirSideSystemType {\n      CONSTANTVOLUME,\n      CONSTANTVOLUMESINGLEZONE,\n      CONSTANTVOLUMEMULTIPLEZONEREHEAT,\n      CONSTANTVOLUMEBYPASS,\n      VARIABLEAIRVOLUME,\n      VARIABLEAIRVOLUMEREHEAT,\n      VARIABLEAIRVOLUMEINDUCTION,\n      VARIABLEAIRVOLUMEFANPOWERED,\n      VARIABLEAIRVOLUMEDUALCONDUIT,\n      VARIABLEAIRVOLUMEVARIABLEDIFFUSERS,\n      VARIABLEAIRVOLUMEVARIABLETEMPERATURE,\n      OTHER,\n      NOTKNOWN,\n      UNSET\n}\n\n   public enum PEnum_AirSideSystemDistributionType {\n      SINGLEDUCT,\n      DUALDUCT,\n      MULTIZONE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalBoxArrangementType {\n      SINGLEDUCT,\n      DUALDUCT,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalBoxReheatType {\n      ELECTRICALREHEAT,\n      WATERCOILREHEAT,\n      STEAMCOILREHEAT,\n      GASREHEAT,\n      NONE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalShape {\n      ROUND,\n      RECTANGULAR,\n      SQUARE,\n      SLOT,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalFlowPattern {\n      LINEARSINGLE,\n      LINEARDOUBLE,\n      LINEARFOURWAY,\n      RADIAL,\n      SWIRL,\n      DISPLACMENT,\n      COMPACTJET,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalDischargeDirection {\n      PARALLEL,\n      PERPENDICULAR,\n      ADJUSTABLE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalFinishType {\n      ANNODIZED,\n      PAINTED,\n      NONE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalMountingType {\n      SURFACE,\n      FLATFLUSH,\n      LAYIN,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalCoreType {\n      SHUTTERBLADE,\n      CURVEDBLADE,\n      REMOVABLE,\n      REVERSIBLE,\n      NONE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalFlowControlType {\n      DAMPER,\n      BELLOWS,\n      NONE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalFaceType {\n      FOURWAYPATTERN,\n      SINGLEDEFLECTION,\n      DOUBLEDEFLECTION,\n      SIGHTPROOF,\n      EGGCRATE,\n      PERFORATED,\n      LOUVERED,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirToAirHeatTransferHeatTransferType {\n      SENSIBLE,\n      LATENT,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_BACnetEventEnableType {\n      ToOffNormal,\n      ToFault,\n      ToNormal,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_BACnetNotifyType {\n      Alarm,\n      Event,\n      AcknowledgeNotification,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_AssetAccountingType {\n      Fixed,\n      NonFixed,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_AssetTaxType {\n      Capitalised,\n      Expensed,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_AssetInsuranceType {\n      Personal,\n      Real,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_PolarityEnum {\n      Normal,\n      Reverse,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_BACnetFeedbackValueType {\n      Active,\n      Inactive,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_BACnetAckedTransitionsType {\n      ToOffNormal,\n      ToFault,\n      ToNormal,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_BACnetAlarmValueType {\n      Active,\n      Inactive,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_BoilerOperatingMode {\n      FIXED,\n      TWOSTEP,\n      MODULATING,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_ConduitShapeType {\n      Circular,\n      Oval,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ConductorFunction {\n      Phase,\n      Neutral,\n      ProtectiveGround,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_CoilCoolant {\n      WATER,\n      BRINE,\n      GLYCOL,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CoilConnectionDirection {\n      LEFT,\n      RIGHT,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CoilFluidArrangement {\n      CROSSFLOW,\n      CROSSCOUNTERFLOW,\n      CROSSPARALLELFLOW,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CompressorTypePowerSource {\n      MOTORDRIVEN,\n      ENGINEDRIVEN,\n      GASTURBINE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_RefrigerantClass {\n      CFC,\n      HCFC,\n      HFC,\n      HYDROCARBONS,\n      AMMONIA,\n      CO2,\n      H2O,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_ControlType {\n      Hysteresis,\n      Constant,\n      Divide,\n      Integral,\n      Subtract,\n      Report,\n      Absolute,\n      Sum,\n      Average,\n      Maximum,\n      Minimum,\n      Modifier,\n      Product,\n      Split,\n      RunningAverage,\n      Inverse,\n      Binary,\n      LowerLimitControl,\n      UpperLimitControl,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ProportionalControlType {\n      Proportional,\n      ProportionalIntegral,\n      ExponentialDelay,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_TwoPositionControlType {\n      Not,\n      And,\n      Or,\n      Xor,\n      LowerLimitSwitch,\n      UpperLimitSwitch,\n      LowerBandSwitch,\n      UpperBandSwitch,\n      Average,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_CooledBeamActiveAirFlowConfigurationType {\n      BIDIRECTIONAL,\n      UNIDIRECTIONALRIGHT,\n      UNIDIRECTIONALLEFT,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CooledBeamSupplyAirConnectionType {\n      STRAIGHT,\n      RIGHT,\n      LEFT,\n      TOP,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CooledBeamWaterFlowControlSystemType {\n      NONE,\n      ONOFFVALVE,\n      _2WAYVALVE,\n      _3WAYVALVE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CooledBeamIntegratedLightingType {\n      NONE,\n      DIRECT,\n      INDIRECT,\n      DIRECTANDINDIRECT,\n      OTHER,\n      NOTKNOWN,\n      UNSET\n}\n\n   public enum PEnum_CooledBeamPipeConnection {\n      STRAIGHT,\n      RIGHT,\n      LEFT,\n      TOP,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CoolingTowerCircuitType {\n      OPENCIRCUIT,\n      CLOSEDCIRCUITWET,\n      CLOSEDCIRCUITDRY,\n      CLOSEDCIRCUITDRYWET,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CoolingTowerFlowArrangement {\n      COUNTERFLOW,\n      CROSSFLOW,\n      PARALLELFLOW,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CoolingTowerSprayType {\n      SPRAYFILLED,\n      SPLASHTYPEFILL,\n      FILMTYPEFILL,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CoolingTowerCapacityControl {\n      FANCYCLING,\n      TWOSPEEDFAN,\n      VARIABLESPEEDFAN,\n      DAMPERSCONTROL,\n      BYPASSVALVECONTROL,\n      MULTIPLESERIESPUMPS,\n      TWOSPEEDPUMP,\n      VARIABLESPEEDPUMP,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CoolingTowerControlStrategy {\n      FIXEDEXITINGWATERTEMP,\n      WETBULBTEMPRESET,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_DamperOperation {\n      AUTOMATIC,\n      MANUAL,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_DamperOrientation {\n      VERTICAL,\n      HORIZONTAL,\n      VERTICALORHORIZONTAL,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_DamperBladeAction {\n      FOLDINGCURTAIN,\n      PARALLEL,\n      OPPOSED,\n      SINGLE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_DamperBladeShape {\n      FLAT,\n      FABRICATEDAIRFOIL,\n      EXTRUDEDAIRFOIL,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_DamperBladeEdge {\n      CRIMPED,\n      UNCRIMPED,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_ControlDamperOperation {\n      LINEAR,\n      EXPONENTIAL,\n      IFCPOLYLINE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FireDamperActuationType {\n      GRAVITY,\n      SPRING,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FireDamperClosureRating {\n      DYNAMIC,\n      STATIC,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_DuctConnectionType {\n      BEADEDSLEEVE,\n      COMPRESSION,\n      CRIMP,\n      DRAWBAND,\n      DRIVESLIP,\n      FLANGED,\n      OUTSIDESLEEVE,\n      SLIPON,\n      SOLDERED,\n      SSLIP,\n      STANDINGSEAM,\n      SWEDGE,\n      WELDED,\n      OTHER,\n      NONE,\n      USERDEFINED,\n      NOTDEFINED}\n\n   public enum PEnum_PipeEndStyleTreatment {\n      BRAZED,\n      COMPRESSION,\n      FLANGED,\n      GROOVED,\n      OUTSIDESLEEVE,\n      SOLDERED,\n      SWEDGE,\n      THREADED,\n      WELDED,\n      OTHER,\n      NONE,\n      UNSET}\n\n   public enum PEnum_DuctSizingMethod {\n      CONSTANTFRICTION,\n      CONSTANTPRESSURE,\n      STATICREGAIN,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_DuctSegmentShape {\n      FLATOVAL,\n      RECTANGULAR,\n      ROUND,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_DuctSilencerShape {\n      FLATOVAL,\n      RECTANGULAR,\n      ROUND,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_InsulationStandardClass {\n      Class0Appliance,\n      Class0IAppliance,\n      ClassIAppliance,\n      ClassIIAppliance,\n      ClassIIIAppliance,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_MotorEnclosureType {\n      OpenDripProof,\n      TotallyEnclosedAirOver,\n      TotallyEnclosedFanCooled,\n      TotallyEnclosedNonVentilated,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ElementShading {\n      FIXED,\n      MOVABLE,\n      EXTERIOR,\n      INTERIOR,\n      OVERHANG,\n      SIDEFIN,\n      USERDEFINED,\n      NOTDEFINED}\n\n   public enum PEnum_EvaporativeCoolerFlowArrangement {\n      COUNTERFLOW,\n      CROSSFLOW,\n      PARALLELFLOW,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_EvaporatorMediumType {\n      COLDLIQUID,\n      COLDAIR,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_EvaporatorCoolant {\n      WATER,\n      BRINE,\n      GLYCOL,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FanMotorConnectionType {\n      DIRECTDRIVE,\n      BELTDRIVE,\n      COUPLING,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FanCapacityControlType {\n      INLETVANE,\n      VARIABLESPEEDDRIVE,\n      BLADEPITCHANGLE,\n      TWOSPEED,\n      DISCHARGEDAMPER,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FilterAirParticleFilterType {\n      COARSEMETALSCREEN,\n      COARSECELLFOAMS,\n      COARSESPUNGLASS,\n      MEDIUMELECTRETFILTER,\n      MEDIUMNATURALFIBERFILTER,\n      HEPAFILTER,\n      ULPAFILTER,\n      MEMBRANEFILTERS,\n      RENEWABLEMOVINGCURTIANDRYMEDIAFILTER,\n      ELECTRICALFILTER,\n      ROLLFORM,\n      ADHESIVERESERVOIR,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FilterAirParticleFilterSeparationType {\n      BAG,\n      PLEAT,\n      TREADSEPARATION,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_BreechingInletType {\n      TWOWAY,\n      FOURWAY,\n      OTHER,\n      USERDEFINED,\n      NOTDEFINED}\n\n   public enum PEnum_BreechingInletCouplingType {\n      INSTANTANEOUS_FEMALE,\n      INSTANTANEOUS_MALE,\n      OTHER,\n      USERDEFINED,\n      NOTDEFINED}\n\n   public enum PEnum_FireHydrantType {\n      DryBarrel,\n      WetBarrel,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_HoseReelType {\n      Rack,\n      Reel,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_HoseReelMountingType {\n      Cabinet_Recessed,\n      Cabinet_SemiRecessed,\n      Surface,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_HoseNozzleType {\n      Fog,\n      StraightStream,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_SprinklerType {\n      Ceiling,\n      Concealed,\n      Cutoff,\n      Pendant,\n      RecessedPendant,\n      Sidewall,\n      Upright,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_SprinklerActivation {\n      Bulb,\n      FusibleSolder,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_SprinklerResponse {\n      Quick,\n      Standard}\n\n   public enum PEnum_SprinklerBulbLiquidColor {\n      Orange,\n      Red,\n      Yellow,\n      Green,\n      Blue,\n      Mauve,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_DamperSizingMethod {\n      NOMINAL,\n      EXACT,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FlowMeterPurpose {\n      MASTER,\n      SUBMASTER,\n      SUBMETER,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_PressureGaugeType {\n      Dial,\n      Digital,\n      Manometer,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ThermometerType {\n      Dial,\n      Digital,\n      Stem,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_MeterReadOutType {\n      DIAL,\n      DIGITAL,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_GasType {\n      COMMERCIALBUTANE,\n      COMMERCIALPROPANE,\n      LIQUEFIEDPETROLEUMGAS,\n      NATURALGAS,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_WaterMeterType {\n      COMPOUND,\n      INFERENTIAL,\n      PISTON,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_BackflowPreventerType {\n      NONE,\n      ATMOSPHERICVACUUMBREAKER,\n      ANTISIPHONVALVE,\n      DOUBLECHECKBACKFLOWPREVENTER,\n      PRESSUREVACUUMBREAKER,\n      REDUCEDPRESSUREBACKFLOWPREVENTER,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FanDischargeType {\n      DUCT,\n      SCREEN,\n      LOUVER,\n      DAMPER,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FanApplicationType {\n      SUPPLY,\n      RETURN,\n      EXHAUST,\n      COOLINGTOWER,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FanCoilPosition {\n      DRAWTHROUGH,\n      BLOWTHROUGH,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FanMotorPosition {\n      INAIRSTREAM,\n      OUTOFAIRSTREAM,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FanMountingType {\n      MANUFACTUREDCURB,\n      FIELDERECTEDCURB,\n      CONCRETEPAD,\n      SUSPENDED,\n      WALLMOUNTED,\n      DUCTMOUNTED,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CentrifugalFanDischargePosition {\n      TOPHORIZONTAL,\n      TOPANGULARDOWN,\n      TOPANGULARUP,\n      DOWNBLAST,\n      BOTTOMANGULARDOWN,\n      BOTTOMHORIZONTAL,\n      BOTTOMANGULARUP,\n      UPBLAST,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CentrifugalFanRotation {\n      CLOCKWISE,\n      COUNTERCLOCKWISE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_CentrifugalFanArrangement {\n      ARRANGEMENT1,\n      ARRANGEMENT2,\n      ARRANGEMENT3,\n      ARRANGEMENT4,\n      ARRANGEMENT7,\n      ARRANGEMENT8,\n      ARRANGEMENT9,\n      ARRANGEMENT10,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_PumpBaseType {\n      FRAME,\n      BASE,\n      NONE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_PumpDriveConnectionType {\n      DIRECTDRIVE,\n      BELTDRIVE,\n      COUPLING,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_TankComposition {\n      COMPLEX,\n      ELEMENT,\n      PARTIAL,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalAirflowType {\n      SUPPLYAIR,\n      RETURNAIR,\n      EXHAUSTAIR,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirTerminalLocation {\n      SIDEWALLHIGH,\n      SIDEWALLLOW,\n      CEILINGPERIMETER,\n      CEILINGINTERIOR,\n      FLOOR,\n      SILL,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_GasApplianceType {\n      GASFIRE,\n      GASCOOKER,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FlueType {\n      BALANCEDFLUE,\n      FLUED,\n      FLUELESS,\n      OPENFLUED,\n      ROOMSEALED,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_GasBurnerType {\n      FORCEDDRAFT,\n      NATURALDRAFT,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_HeatExchangerArrangement {\n      COUNTERFLOW,\n      CROSSFLOW,\n      PARALLELFLOW,\n      MULTIPASS,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_HumidifierApplication {\n      PORTABLE,\n      FIXED,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_HumidifierInternalControl {\n      ONOFF,\n      STEPPED,\n      MODULATING,\n      NONE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_LampBallastType {\n      Conventional,\n      Electronic,\n      LowLoss,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_LampCompensationType {\n      Capacitive,\n      Inductive,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_LightFixtureMountingType {\n      CableSpanned,\n      FreeStanding,\n      Pole_Side,\n      Pole_Top,\n      Recessed,\n      Surface,\n      Suspended,\n      TrackMounted,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_LightFixturePlacingType {\n      Ceiling,\n      Floor,\n      Furniture,\n      Pole,\n      Wall,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_SelfTestType {\n      Central,\n      Local,\n      None,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_BackupSupplySystemType {\n      LocalBattery,\n      CentralBattery,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_PictogramEscapeDirectionType {\n      RightArrow,\n      LeftArrow,\n      DownArrow,\n      UpArrow,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_AddressabilityType {\n      Implemented,\n      UpgradeableTo,\n      NotImplemented,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_BuildingThermalExposure {\n      LIGHT,\n      MEDIUM,\n      HEAVY,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_PackingCareType {\n      Fragile,\n      HandleWithCare,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_PermitType {\n      Access,\n      Work,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_MaintenanceType {\n      ConditionBased,\n      Corrective,\n      PlannedCorrective,\n      Scheduled,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_PriorityType {\n      High,\n      Medium,\n      Low,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_PropertyAgreementType {\n      Assignment,\n      Lease,\n      Tenant,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_CircuitBreakerType {\n      ACB,\n      MCB,\n      MCCB,\n      Vacuum,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_EarthFailureDeviceType {\n      Standard,\n      TimeDelayed,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_FuseDisconnectorType {\n      EngineProtectionDevice,\n      FusedSwitch,\n      HRC,\n      OverloadProtectionDevice,\n      SwitchDisconnectorFuse,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_VaristorType {\n      MetalOxide,\n      ZincOxide,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ReinforcementBarType {\n      RING,\n      SPIRAL,\n      OTHER,\n      USERDEFINED,\n      NOTDEFINED}\n\n   public enum PEnum_ReinforcementBarAllocationType {\n      SINGLE,\n      DOUBLE,\n      ALTERNATE,\n      OTHER,\n      USERDEFINED,\n      NOTDEFINED}\n\n   public enum PEnum_RiskType {\n      Business,\n      Hazard,\n      HealthAndSafety,\n      Insurance,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_RiskAssessment {\n      AlmostCertain,\n      VeryLikely,\n      Likely,\n      VeryPossible,\n      Possible,\n      SomewhatPossible,\n      Unlikely,\n      VeryUnlikely,\n      Rare,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_RiskConsequence {\n      Catastrophic,\n      Severe,\n      Major,\n      Considerable,\n      Moderate,\n      Some,\n      Minor,\n      VeryLow,\n      Insignificant,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_RiskRating {\n      Critical,\n      VeryHigh,\n      High,\n      Considerable,\n      Moderate,\n      Some,\n      Low,\n      VeryLow,\n      Insignificant,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_RiskOwner {\n      Designer,\n      Specifier,\n      Constructor,\n      Installer,\n      Maintainer,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_BathType {\n      Domestic,\n      DomesticCorner,\n      Foot,\n      Jacuzzi,\n      Plunge,\n      Sitz,\n      Treatment,\n      Whirlpool,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_SanitaryMounting {\n      BackToWall,\n      Pedestal,\n      CounterTop,\n      WallHung,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_CisternHeight {\n      HighLevel,\n      LowLevel,\n      None,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_FlushType {\n      Lever,\n      Pull,\n      Push,\n      Sensor,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_FountainType {\n      DrinkingWater,\n      Eyewash,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ShowerType {\n      Drench,\n      Individual,\n      Tunnel,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_SinkType {\n      Belfast,\n      Bucket,\n      Cleaners,\n      Combination_Left,\n      Combination_Right,\n      Combination_Double,\n      Drip,\n      Laboratory,\n      London,\n      Plaster,\n      Pot,\n      Rinsing,\n      Shelf,\n      VegetablePreparation,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ToiletType {\n      BedPanWasher,\n      Chemical,\n      CloseCoupled,\n      LooseCoupled,\n      SlopHopper,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_ToiletPanType {\n      Siphonic,\n      Squat,\n      WashDown,\n      WashOut,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_UrinalType {\n      Bowl,\n      Slab,\n      Stall,\n      Trough,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_WashHandBasinType {\n      DentalCuspidor,\n      HandRinse,\n      Hospital,\n      Tipup,\n      Washfountain,\n      WashingTrough,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ToiletSeatType {\n      Extension,\n      Inset,\n      OpenFrontSeat,\n      RingSeat,\n      SelfRaising,\n      None,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_MovementSensingType {\n      PhotoElectricCell,\n      PressurePad,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_TemperatureSensorType {\n      HighLimit,\n      LowLimit,\n      OutsideTemperature,\n      OperatingTemperature,\n      RoomTemperature,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_SpaceHeaterTemperatureClassification {\n      LOWTEMPERATURE,\n      HIGHTEMPERATURE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_HeatingSource {\n      FUEL,\n      GAS,\n      ELECTRICITY,\n      HOTWATER,\n      STEAM,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_SwitchFunctionType {\n      OnOffSwitch,\n      IntermediateSwitch,\n      DoubleThrowSwitch,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_ContactorType {\n      CapacitorSwitching,\n      LowCurrent,\n      MagneticLatching,\n      MechanicalLatching,\n      Modular,\n      Reversing,\n      Standard,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_StarterType {\n      AutoTransformer,\n      Manual,\n      DirectOnLine,\n      Frequency,\n      nStep,\n      Rheostatic,\n      StarDelta,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_SwitchDisconnectorType {\n      CenterBreak,\n      DividedSupport,\n      DoubleBreak,\n      EarthingSwitch,\n      Isolator,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_LoadDisconnectionType {\n      OffLoad,\n      OnLoad,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_ToggleSwitchType {\n      BreakGlass,\n      Changeover,\n      Dimmer,\n      KeyOperated,\n      ManualPull,\n      PushButton,\n      Pullcord,\n      Rocker,\n      Selector,\n      Twist,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_SwitchUsage {\n      Emergency,\n      Guard,\n      Limit,\n      Start,\n      Stop,\n      Other,\n      NotKnown,\n      Unset\n}\n\n   public enum PEnum_SwitchActivation {\n      Actuator,\n      Foot,\n      Hand,\n      Proximity,\n      Sound,\n      TwoHand,\n      Wire,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_FurniturePanelType {\n      Acoustical,\n      Glazed,\n      Horz_Seg,\n      Monolithic,\n      Open,\n      Ends,\n      Door,\n      Screen,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_TankType {\n      BREAKPRESSURE,\n      EXPANSION,\n      FEEDANDEXPANSION,\n      GASSTORAGEBUTANE,\n      GASSTORAGELIQUIFIEDPETROLEUMGAS,\n      GASSTORAGEPROPANE,\n      OILSERVICE,\n      OILSTORAGE,\n      PRESSUREVESSEL,\n      WATERSTORAGEGENERAL,\n      WATERSTORAGEPOTABLE,\n      WATERSTORAGEPROCESS,\n      WATERSTORAGECOOLINGTOWERMAKEUP,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_TankAccessType {\n      NONE,\n      LOOSECOVER,\n      MANHOLE,\n      SECUREDCOVER,\n      SECUREDCOVERWITHMANHOLE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_TankPatternType {\n      HORIZONTALCYLINDER,\n      VERTICALCYLINDER,\n      RECTANGULAR,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_EndShapeType {\n      CONCAVECONVEX,\n      FLATCONVEX,\n      CONVEXCONVEX,\n      CONCAVEFLAT,\n      FLATFLAT,\n      OTHER,\n      NOTKNOWN,\n      UNSET\n}\n\n   public enum PEnum_SecondaryCurrentType {\n      AC,\n      DC,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_AirHandlerConstruction {\n      MANUFACTUREDITEM,\n      CONSTRUCTEDONSITE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_AirHandlerFanCoilArrangement {\n      BLOWTHROUGH,\n      DRAWTHROUGH,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_ValvePattern {\n      SINGLEPORT,\n      ANGLED_2_PORT,\n      STRAIGHT_2_PORT,\n      STRAIGHT_3_PORT,\n      CROSSOVER_4_PORT,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_ValveOperation {\n      DROPWEIGHT,\n      FLOAT,\n      HYDRAULIC,\n      LEVER,\n      LOCKSHIELD,\n      MOTORIZED,\n      PNEUMATIC,\n      SOLENOID,\n      SPRING,\n      THERMOSTATIC,\n      WHEEL,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_ValveMechanism {\n      BALL,\n      BUTTERFLY,\n      CONFIGUREDGATE,\n      GLAND,\n      GLOBE,\n      LUBRICATEDPLUG,\n      NEEDLE,\n      PARALLELSLIDE,\n      PLUG,\n      WEDGEGATE,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FaucetType {\n      BIB,\n      GLOBE,\n      DIVERTER,\n      DIVIDEDFLOWCOMBINATION,\n      PILLAR,\n      SINGLEOUTLETCOMBINATION,\n      SPRAY,\n      SPRAYMIXING,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FaucetOperation {\n      CERAMICDISC,\n      LEVERHANDLE,\n      NONCONCUSSIVESELFCLOSING,\n      QUATERTURN,\n      QUICKACTION,\n      SCREWDOWN,\n      SELFCLOSING,\n      TIMEDSELFCLOSING,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_FaucetFunction {\n      COLD,\n      HOT,\n      MIXED,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_IsolatingPurpose {\n      LANDING,\n      LANDINGWITHPRESSUREREGULATION,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_MixingValveControl {\n      MANUAL,\n      PREDEFINED,\n      THERMOSTATIC,\n      OTHER,\n      NOTKNOWN,\n      UNSET}\n\n   public enum PEnum_TrapType {\n      None,\n      P_Trap,\n      Q_Trap,\n      S_Trap,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_InletPatternType {\n      None,\n      _1 = 1,\n      _2 = 2,\n      _3 = 3,\n      _4 = 4,\n      _12 = 12,\n      _13 = 13,\n      _14 = 14,\n      _23 = 23,\n      _24 = 24,\n      _34 = 34,\n      _123 = 123,\n      _124 = 124,\n      _134 = 134,\n      _234 = 234,\n      _1234 = 1234}\n\n   public enum PEnum_GullyType {\n      Vertical,\n      BackInlet,\n      Other,\n      NotKnown,\n      Unset}\n\n   public enum PEnum_BackInletPatternType {\n      None,\n      _1 = 1,\n      _2 = 2,\n      _3 = 3,\n      _4 = 4,\n      _12 = 12,\n      _13 = 13,\n      _14 = 14,\n      _23 = 23,\n      _24 = 24,\n      _34 = 34,\n      _123 = 123,\n      _124 = 124,\n      _134 = 134,\n      _234 = 234,\n      _1234 = 1234}\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/ExporterInitializer_PsetDefIFC4Enum.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing Autodesk.Revit;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Export.Exporter.PropertySet.Calculators;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.IFC4\r\n{\r\n\r\n\r\n   public enum PEnum_ElementStatus {\r\n      NEW,\r\n      EXISTING,\r\n      DEMOLISH,\r\n      TEMPORARY,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FailPosition {\r\n      FAILOPEN,\r\n      FAILCLOSED,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ActuatorApplication {\r\n      ENTRYEXITDEVICE,\r\n      FIRESMOKEDAMPERACTUATOR,\r\n      DAMPERACTUATOR,\r\n      VALVEPOSITIONER,\r\n      LAMPACTUATOR,\r\n      SUNBLINDACTUATOR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ElectricActuatorType {\r\n      MOTORDRIVE,\r\n      MAGNETIC,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirSideSystemType {\r\n      CONSTANTVOLUME,\r\n      CONSTANTVOLUMESINGLEZONE,\r\n      CONSTANTVOLUMEMULTIPLEZONEREHEAT,\r\n      CONSTANTVOLUMEBYPASS,\r\n      VARIABLEAIRVOLUME,\r\n      VARIABLEAIRVOLUMEREHEAT,\r\n      VARIABLEAIRVOLUMEINDUCTION,\r\n      VARIABLEAIRVOLUMEFANPOWERED,\r\n      VARIABLEAIRVOLUMEDUALCONDUIT,\r\n      VARIABLEAIRVOLUMEVARIABLEDIFFUSERS,\r\n      VARIABLEAIRVOLUMEVARIABLETEMPERATURE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirSideSystemDistributionType {\r\n      SINGLEDUCT,\r\n      DUALDUCT,\r\n      MULTIZONE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalBoxArrangementType {\r\n      SINGLEDUCT,\r\n      DUALDUCT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalBoxReheatType {\r\n      ELECTRICALREHEAT,\r\n      WATERCOILREHEAT,\r\n      STEAMCOILREHEAT,\r\n      GASREHEAT,\r\n      NONE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalAirflowType {\r\n      SUPPLYAIR,\r\n      RETURNAIR,\r\n      EXHAUSTAIR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalLocation {\r\n      SIDEWALLHIGH,\r\n      SIDEWALLLOW,\r\n      CEILINGPERIMETER,\r\n      CEILINGINTERIOR,\r\n      FLOOR,\r\n      SILL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalShape {\r\n      ROUND,\r\n      RECTANGULAR,\r\n      SQUARE,\r\n      SLOT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalFaceType {\r\n      FOURWAYPATTERN,\r\n      SINGLEDEFLECTION,\r\n      DOUBLEDEFLECTION,\r\n      SIGHTPROOF,\r\n      EGGCRATE,\r\n      PERFORATED,\r\n      LOUVERED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalFlowPattern {\r\n      LINEARSINGLE,\r\n      LINEARDOUBLE,\r\n      LINEARFOURWAY,\r\n      RADIAL,\r\n      SWIRL,\r\n      DISPLACMENT,\r\n      COMPACTJET,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalDischargeDirection {\r\n      PARALLEL,\r\n      PERPENDICULAR,\r\n      ADJUSTABLE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalFinishType {\r\n      ANNODIZED,\r\n      PAINTED,\r\n      NONE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalMountingType {\r\n      SURFACE,\r\n      FLATFLUSH,\r\n      LAYIN,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalCoreType {\r\n      SHUTTERBLADE,\r\n      CURVEDBLADE,\r\n      REMOVABLE,\r\n      REVERSIBLE,\r\n      NONE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalFlowControlType {\r\n      DAMPER,\r\n      BELLOWS,\r\n      NONE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_HeatTransferType {\r\n      SENSIBLE,\r\n      LATENT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AcquisitionMethod {\r\n      GPS,\r\n      LASERSCAN_AIRBORNE,\r\n      LASERSCAN_GROUND,\r\n      SONAR,\r\n      THEODOLITE,\r\n      USERDEFINED,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AssetAccountingType {\r\n      FIXED,\r\n      NONFIXED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AssetTaxType {\r\n      CAPITALISED,\r\n      EXPENSED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AssetInsuranceType {\r\n      PERSONAL,\r\n      REAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualAmplifierType {\r\n      FIXED,\r\n      VARIABLE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualCameraType {\r\n      PHOTO,\r\n      VIDEO,\r\n      AUDIOVIDEO,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualDisplayType {\r\n      CRT,\r\n      DLP,\r\n      LCD,\r\n      LED,\r\n      PLASMA,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualDisplayTouchScreen {\r\n      SINGLETOUCH,\r\n      MULTITOUCH,\r\n      NONE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualPlayerType {\r\n      AUDIO,\r\n      VIDEO,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualProjectorType {\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualReceiverType {\r\n      AUDIO,\r\n      AUDIOVIDEO,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualSpeakerType {\r\n      FULLRANGE,\r\n      MIDRANGE,\r\n      WOOFER,\r\n      TWEETER,\r\n      COAXIAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualSpeakerMounting {\r\n      FREESTANDING,\r\n      CEILING,\r\n      WALL,\r\n      OUTDOOR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualTunerType {\r\n      AUDIO,\r\n      VIDEO,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_BoilerOperatingMode {\r\n      FIXED,\r\n      TWOSTEP,\r\n      MODULATING,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_EnergySource {\r\n      COAL,\r\n      COAL_PULVERIZED,\r\n      ELECTRICITY,\r\n      GAS,\r\n      OIL,\r\n      PROPANE,\r\n      WOOD,\r\n      WOOD_CHIP,\r\n      WOOD_PELLET,\r\n      WOOD_PULVERIZED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ConduitShapeType {\r\n      CIRCULAR,\r\n      OVAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_InstallationMethodFlagEnum {\r\n      INDUCT,\r\n      INSOIL,\r\n      ONWALL,\r\n      BELOWCEILING,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_MountingMethodEnum {\r\n      PERFORATEDTRAY,\r\n      LADDER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FunctionEnum {\r\n      LINE,\r\n      NEUTRAL,\r\n      PROTECTIVEEARTH,\r\n      PROTECTIVEEARTHNEUTRAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_MaterialEnum {\r\n      ALUMINIUM,\r\n      COPPER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ConstructionEnum {\r\n      SOLIDCONDUCTOR,\r\n      STRANDEDCONDUCTOR,\r\n      FLEXIBLESTRANDEDCONDUCTOR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ShapeEnum {\r\n      HELICALCONDUCTOR,\r\n      CIRCULARCONDUCTOR,\r\n      SECTORCONDUCTOR,\r\n      RECTANGULARCONDUCTOR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoreColorsEnum {\r\n      BLACK,\r\n      BLUE,\r\n      BROWN,\r\n      GOLD,\r\n      GREEN,\r\n      GREY,\r\n      ORANGE,\r\n      PINK,\r\n      RED,\r\n      SILVER,\r\n      TURQUOISE,\r\n      VIOLET,\r\n      WHITE,\r\n      YELLOW,\r\n      GREENANDYELLOW,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoilPlacementType {\r\n      FLOOR,\r\n      CEILING,\r\n      UNIT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoilCoolant {\r\n      WATER,\r\n      BRINE,\r\n      GLYCOL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoilConnectionDirection {\r\n      LEFT,\r\n      RIGHT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoilFluidArrangement {\r\n      CROSSFLOW,\r\n      CROSSCOUNTERFLOW,\r\n      CROSSPARALLELFLOW,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CompressorTypePowerSource {\r\n      MOTORDRIVEN,\r\n      ENGINEDRIVEN,\r\n      GASTURBINE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_RefrigerantClass {\r\n      CFC,\r\n      HCFC,\r\n      HFC,\r\n      HYDROCARBONS,\r\n      AMMONIA,\r\n      CO2,\r\n      H2O,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ControllerTypeFloating {\r\n      CONSTANT,\r\n      MODIFIER,\r\n      ABSOLUTE,\r\n      INVERSE,\r\n      HYSTERESIS,\r\n      RUNNINGAVERAGE,\r\n      DERIVATIVE,\r\n      INTEGRAL,\r\n      BINARY,\r\n      ACCUMULATOR,\r\n      PULSECONVERTER,\r\n      LOWERLIMITCONTROL,\r\n      UPPERLIMITCONTROL,\r\n      SUM,\r\n      SUBTRACT,\r\n      PRODUCT,\r\n      DIVIDE,\r\n      AVERAGE,\r\n      MAXIMUM,\r\n      MINIMUM,\r\n      REPORT,\r\n      SPLIT,\r\n      INPUT,\r\n      OUTPUT,\r\n      VARIABLE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ControllerMultiPositionType {\r\n      INPUT,\r\n      OUTPUT,\r\n      VARIABLE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ControllerTypeProgrammable {\r\n      PRIMARY,\r\n      SECONDARY,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ControllerApplication {\r\n      MODEMCONTROLLER,\r\n      TELEPHONEDIRECTORY,\r\n      FANCOILUNITCONTROLLER,\r\n      ROOFTOPUNITCONTROLLER,\r\n      UNITVENTILATORCONTROLLER,\r\n      SPACECONFORTCONTROLLER,\r\n      VAV,\r\n      PUMPCONTROLLER,\r\n      BOILERCONTROLLER,\r\n      DISCHARGEAIRCONTROLLER,\r\n      OCCUPANCYCONTROLLER,\r\n      CONSTANTLIGHTCONTROLLER,\r\n      SCENECONTROLLER,\r\n      PARTITIONWALLCONTROLLER,\r\n      REALTIMEKEEPER,\r\n      REALTIMEBASEDSCHEDULER,\r\n      LIGHTINGPANELCONTROLLER,\r\n      SUNBLINDCONTROLLER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ControllerProportionalType {\r\n      PROPORTIONAL,\r\n      PROPORTIONALINTEGRAL,\r\n      PROPORTIONALINTEGRALDERIVATIVE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ControllerTwoPositionType {\r\n      NOT,\r\n      AND,\r\n      OR,\r\n      XOR,\r\n      LOWERLIMITSWITCH,\r\n      UPPERLIMITSWITCH,\r\n      LOWERBANDSWITCH,\r\n      UPPERBANDSWITCH,\r\n      AVERAGE,\r\n      CALENDAR,\r\n      INPUT,\r\n      OUTPUT,\r\n      VARIABLE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CooledBeamActiveAirFlowConfigurationType {\r\n      BIDIRECTIONAL,\r\n      UNIDIRECTIONALRIGHT,\r\n      UNIDIRECTIONALLEFT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CooledBeamSupplyAirConnectionType {\r\n      STRAIGHT,\r\n      RIGHT,\r\n      LEFT,\r\n      TOP,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CooledBeamPipeConnection {\r\n      STRAIGHT,\r\n      RIGHT,\r\n      LEFT,\r\n      TOP,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CooledBeamWaterFlowControlSystemType {\r\n      NONE,\r\n      ONOFFVALVE,\r\n      _2WAYVALVE,\r\n      _3WAYVALVE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CooledBeamIntegratedLightingType {\r\n      NONE,\r\n      DIRECT,\r\n      INDIRECT,\r\n      DIRECTANDINDIRECT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoolingTowerCircuitType {\r\n      OPENCIRCUIT,\r\n      CLOSEDCIRCUITWET,\r\n      CLOSEDCIRCUITDRY,\r\n      CLOSEDCIRCUITDRYWET,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoolingTowerFlowArrangement {\r\n      COUNTERFLOW,\r\n      CROSSFLOW,\r\n      PARALLELFLOW,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoolingTowerSprayType {\r\n      SPRAYFILLED,\r\n      SPLASHTYPEFILL,\r\n      FILMTYPEFILL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoolingTowerCapacityControl {\r\n      FANCYCLING,\r\n      TWOSPEEDFAN,\r\n      VARIABLESPEEDFAN,\r\n      DAMPERSCONTROL,\r\n      BYPASSVALVECONTROL,\r\n      MULTIPLESERIESPUMPS,\r\n      TWOSPEEDPUMP,\r\n      VARIABLESPEEDPUMP,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoolingTowerControlStrategy {\r\n      FIXEDEXITINGWATERTEMP,\r\n      WETBULBTEMPRESET,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DamperSizingMethod {\r\n      NOMINAL,\r\n      EXACT,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DamperOperation {\r\n      AUTOMATIC,\r\n      MANUAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DamperOrientation {\r\n      VERTICAL,\r\n      HORIZONTAL,\r\n      VERTICALORHORIZONTAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DamperBladeAction {\r\n      FOLDINGCURTAIN,\r\n      PARALLEL,\r\n      OPPOSED,\r\n      SINGLE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DamperBladeShape {\r\n      FLAT,\r\n      FABRICATEDAIRFOIL,\r\n      EXTRUDEDAIRFOIL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DamperBladeEdge {\r\n      CRIMPED,\r\n      UNCRIMPED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ControlDamperOperation {\r\n      LINEAR,\r\n      EXPONENTIAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FireDamperActuationType {\r\n      GRAVITY,\r\n      SPRING,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FireDamperClosureRating {\r\n      DYNAMIC,\r\n      STATIC,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DistributionPortElectricalType {\r\n      ACPLUG,\r\n      DCPLUG,\r\n      CRIMPCOAXIAL,\r\n      RJ,\r\n      RADIO,\r\n      DIN,\r\n      DSUB,\r\n      DVI,\r\n      EIAJ,\r\n      HDMI,\r\n      RCA,\r\n      TRS,\r\n      XLR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ConnectionGender {\r\n      MALE,\r\n      FEMALE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ConductorFunction {\r\n      PHASE_L1,\r\n      PHASE_L2,\r\n      PHASE_L3,\r\n      NEUTRAL,\r\n      PROTECTIVEEARTH,\r\n      PROTECTIVEEARTHNEUTRAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DuctConnectionType {\r\n      BEADEDSLEEVE,\r\n      COMPRESSION,\r\n      CRIMP,\r\n      DRAWBAND,\r\n      DRIVESLIP,\r\n      FLANGED,\r\n      OUTSIDESLEEVE,\r\n      SLIPON,\r\n      SOLDERED,\r\n      SSLIP,\r\n      STANDINGSEAM,\r\n      SWEDGE,\r\n      WELDED,\r\n      OTHER,\r\n      NONE,\r\n      USERDEFINED,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_PipeEndStyleTreatment {\r\n      BRAZED,\r\n      COMPRESSION,\r\n      FLANGED,\r\n      GROOVED,\r\n      OUTSIDESLEEVE,\r\n      SOLDERED,\r\n      SWEDGE,\r\n      THREADED,\r\n      WELDED,\r\n      OTHER,\r\n      NONE,\r\n      UNSET}\r\n\r\n   public enum PEnum_DistributionSystemElectricalType {\r\n      TN,\r\n      TN_C,\r\n      TN_S,\r\n      TN_C_S,\r\n      TT,\r\n      IT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DistributionSystemElectricalCategory {\r\n      HIGHVOLTAGE,\r\n      LOWVOLTAGE,\r\n      EXTRALOWVOLTAGE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DuctSizingMethod {\r\n      CONSTANTFRICTION,\r\n      CONSTANTPRESSURE,\r\n      STATICREGAIN,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DuctSegmentShape {\r\n      FLATOVAL,\r\n      RECTANGULAR,\r\n      ROUND,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ConductorFunctionEnum {\r\n      PHASE_L1,\r\n      PHASE_L2,\r\n      PHASE_L3,\r\n      NEUTRAL,\r\n      PROTECTIVEEARTH,\r\n      PROTECTIVEEARTHNEUTRAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_InsulationStandardClass {\r\n      CLASS0APPLIANCE,\r\n      CLASS0IAPPLIANCE,\r\n      CLASSIAPPLIANCE,\r\n      CLASSIIAPPLIANCE,\r\n      CLASSIIIAPPLIANCE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ElectricApplianceDishwasherType {\r\n      POTWASHER,\r\n      TRAYWASHER,\r\n      DISHWASHER,\r\n      BOTTLEWASHER,\r\n      CUTLERYWASHER,\r\n      OTHER,\r\n      UNKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ElectricApplianceElectricCookerType {\r\n      STEAMCOOKER,\r\n      DEEPFRYER,\r\n      STOVE,\r\n      OVEN,\r\n      TILTINGFRYINGPAN,\r\n      COOKINGKETTLE,\r\n      OTHER,\r\n      UNKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_MotorEnclosureType {\r\n      OPENDRIPPROOF,\r\n      TOTALLYENCLOSEDAIROVER,\r\n      TOTALLYENCLOSEDFANCOOLED,\r\n      TOTALLYENCLOSEDNONVENTILATED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DeliveryType {\r\n      CAST_IN_PLACE,\r\n      WELDED_TO_STRUCTURE,\r\n      LOOSE,\r\n      ATTACHED_FOR_DELIVERY,\r\n      PRECAST,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_CorrosionTreatment {\r\n      PAINTED,\r\n      EPOXYCOATED,\r\n      GALVANISED,\r\n      STAINLESS,\r\n      NONE,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_EngineEnergySource {\r\n      DIESEL,\r\n      GASOLINE,\r\n      NATURALGAS,\r\n      PROPANE,\r\n      BIODIESEL,\r\n      SEWAGEGAS,\r\n      HYDROGEN,\r\n      BIFUEL,\r\n      OTHER,\r\n      UNKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_LifeCyclePhase {\r\n      ACQUISITION,\r\n      CRADLETOSITE,\r\n      DECONSTRUCTION,\r\n      DISPOSAL,\r\n      DISPOSALTRANSPORT,\r\n      GROWTH,\r\n      INSTALLATION,\r\n      MAINTENANCE,\r\n      MANUFACTURE,\r\n      OCCUPANCY,\r\n      OPERATION,\r\n      PROCUREMENT,\r\n      PRODUCTION,\r\n      PRODUCTIONTRANSPORT,\r\n      RECOVERY,\r\n      REFURBISHMENT,\r\n      REPAIR,\r\n      REPLACEMENT,\r\n      TRANSPORT,\r\n      USAGE,\r\n      WASTE,\r\n      WHOLELIFECYCLE,\r\n      USERDEFINED,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_EvaporativeCoolerFlowArrangement {\r\n      COUNTERFLOW,\r\n      CROSSFLOW,\r\n      PARALLELFLOW,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_EvaporatorMediumType {\r\n      COLDLIQUID,\r\n      COLDAIR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_EvaporatorCoolant {\r\n      WATER,\r\n      BRINE,\r\n      GLYCOL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CentrifugalFanDischargePosition {\r\n      TOPHORIZONTAL,\r\n      TOPANGULARDOWN,\r\n      TOPANGULARUP,\r\n      DOWNBLAST,\r\n      BOTTOMANGULARDOWN,\r\n      BOTTOMHORIZONTAL,\r\n      BOTTOMANGULARUP,\r\n      UPBLAST,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CentrifugalFanRotation {\r\n      CLOCKWISE,\r\n      COUNTERCLOCKWISE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CentrifugalFanArrangement {\r\n      ARRANGEMENT1,\r\n      ARRANGEMENT2,\r\n      ARRANGEMENT3,\r\n      ARRANGEMENT4,\r\n      ARRANGEMENT7,\r\n      ARRANGEMENT8,\r\n      ARRANGEMENT9,\r\n      ARRANGEMENT10,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FanDischargeType {\r\n      DUCT,\r\n      SCREEN,\r\n      LOUVER,\r\n      DAMPER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FanApplicationType {\r\n      SUPPLYAIR,\r\n      RETURNAIR,\r\n      EXHAUSTAIR,\r\n      COOLINGTOWER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FanCoilPosition {\r\n      DRAWTHROUGH,\r\n      BLOWTHROUGH,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FanMotorPosition {\r\n      INAIRSTREAM,\r\n      OUTOFAIRSTREAM,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FanMountingType {\r\n      MANUFACTUREDCURB,\r\n      FIELDERECTEDCURB,\r\n      CONCRETEPAD,\r\n      SUSPENDED,\r\n      WALLMOUNTED,\r\n      DUCTMOUNTED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FanMotorConnectionType {\r\n      DIRECTDRIVE,\r\n      BELTDRIVE,\r\n      COUPLING,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FanCapacityControlType {\r\n      INLETVANE,\r\n      VARIABLESPEEDDRIVE,\r\n      BLADEPITCHANGLE,\r\n      TWOSPEED,\r\n      DISCHARGEDAMPER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FilterAirParticleFilterType {\r\n      COARSEMETALSCREEN,\r\n      COARSECELLFOAMS,\r\n      COARSESPUNGLASS,\r\n      MEDIUMELECTRETFILTER,\r\n      MEDIUMNATURALFIBERFILTER,\r\n      HEPAFILTER,\r\n      ULPAFILTER,\r\n      MEMBRANEFILTERS,\r\n      RENEWABLEMOVINGCURTIANDRYMEDIAFILTER,\r\n      ELECTRICALFILTER,\r\n      ROLLFORM,\r\n      ADHESIVERESERVOIR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FilterAirParticleFilterSeparationType {\r\n      BAG,\r\n      PLEAT,\r\n      TREADSEPARATION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CompressedAirFilterType {\r\n      ACTIVATEDCARBON,\r\n      PARTICLE_FILTER,\r\n      COALESCENSE_FILTER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FilterWaterFilterType {\r\n      FILTRATION_DIATOMACEOUSEARTH,\r\n      FILTRATION_SAND,\r\n      PURIFICATION_DEIONIZING,\r\n      PURIFICATION_REVERSEOSMOSIS,\r\n      SOFTENING_ZEOLITE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_BreechingInletType {\r\n      TWOWAY,\r\n      FOURWAY,\r\n      OTHER,\r\n      USERDEFINED,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_BreechingInletCouplingType {\r\n      INSTANTANEOUS_FEMALE,\r\n      INSTANTANEOUS_MALE,\r\n      OTHER,\r\n      USERDEFINED,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_FireHydrantType {\r\n      DRYBARREL,\r\n      WETBARREL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_HoseReelType {\r\n      RACK,\r\n      REEL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_HoseReelMountingType {\r\n      CABINET_RECESSED,\r\n      CABINET_SEMIRECESSED,\r\n      SURFACE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_HoseNozzleType {\r\n      FOG,\r\n      STRAIGHTSTREAM,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SprinklerType {\r\n      CEILING,\r\n      CONCEALED,\r\n      CUTOFF,\r\n      PENDANT,\r\n      RECESSEDPENDANT,\r\n      SIDEWALL,\r\n      UPRIGHT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SprinklerActivation {\r\n      BULB,\r\n      FUSIBLESOLDER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SprinklerResponse {\r\n      QUICK,\r\n      STANDARD,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SprinklerBulbLiquidColor {\r\n      ORANGE,\r\n      RED,\r\n      YELLOW,\r\n      GREEN,\r\n      BLUE,\r\n      MAUVE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PressureGaugeType {\r\n      DIAL,\r\n      DIGITAL,\r\n      MANOMETER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ThermometerType {\r\n      DIAL,\r\n      DIGITAL,\r\n      STEM,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FlowMeterPurpose {\r\n      MASTER,\r\n      SUBMASTER,\r\n      SUBMETER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_MeterReadOutType {\r\n      DIAL,\r\n      DIGITAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_GasType {\r\n      COMMERCIALBUTANE,\r\n      COMMERCIALPROPANE,\r\n      LIQUEFIEDPETROLEUMGAS,\r\n      NATURALGAS,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_WaterMeterType {\r\n      COMPOUND,\r\n      INFERENTIAL,\r\n      PISTON,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_BackflowPreventerType {\r\n      NONE,\r\n      ATMOSPHERICVACUUMBREAKER,\r\n      ANTISIPHONVALVE,\r\n      DOUBLECHECKBACKFLOWPREVENTER,\r\n      PRESSUREVACUUMBREAKER,\r\n      REDUCEDPRESSUREBACKFLOWPREVENTER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_HeatExchangerArrangement {\r\n      COUNTERFLOW,\r\n      CROSSFLOW,\r\n      PARALLELFLOW,\r\n      MULTIPASS,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_HumidifierApplication {\r\n      PORTABLE,\r\n      FIXED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_HumidifierInternalControl {\r\n      ONOFF,\r\n      STEPPED,\r\n      MODULATING,\r\n      NONE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_JunctionBoxShapeType {\r\n      RECTANGULAR,\r\n      ROUND,\r\n      SLOT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_JunctionBoxPlacingType {\r\n      CEILING,\r\n      FLOOR,\r\n      WALL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_JunctionBoxMountingType {\r\n      FACENAIL,\r\n      SIDENAIL,\r\n      CUT_IN,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_LampBallastType {\r\n      CONVENTIONAL,\r\n      ELECTRONIC,\r\n      LOWLOSS,\r\n      OTHER,\r\n      RESISTOR,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_LampCompensationType {\r\n      CAPACITIVE,\r\n      INDUCTIVE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_LightFixtureMountingType {\r\n      CABLESPANNED,\r\n      FREESTANDING,\r\n      POLE_SIDE,\r\n      POLE_TOP,\r\n      RECESSED,\r\n      SURFACE,\r\n      SUSPENDED,\r\n      TRACKMOUNTED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_LightFixturePlacingType {\r\n      CEILING,\r\n      FLOOR,\r\n      FURNITURE,\r\n      POLE,\r\n      WALL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_LightFixtureSecurityLightingType {\r\n      SAFETYLIGHT,\r\n      WARNINGLIGHT,\r\n      EMERGENCYEXITLIGHT,\r\n      BLUEILLUMINATION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SelfTestType {\r\n      CENTRAL,\r\n      LOCAL,\r\n      NONE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_BackupSupplySystemType {\r\n      LOCALBATTERY,\r\n      CENTRALBATTERY,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PictogramEscapeDirectionType {\r\n      RIGHTARROW,\r\n      LEFTARROW,\r\n      DOWNARROW,\r\n      UPARROW,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AddressabilityType {\r\n      IMPLEMENTED,\r\n      UPGRADEABLETO,\r\n      NOTIMPLEMENTED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AssemblyPlace {\r\n      FACTORY,\r\n      OFFSITE,\r\n      SITE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_BuildingThermalExposure {\r\n      LIGHT,\r\n      MEDIUM,\r\n      HEAVY,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PackingCareType {\r\n      FRAGILE,\r\n      HANDLEWITHCARE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PipeFittingJunctionType {\r\n      TEE,\r\n      CROSS,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_MaintenanceType {\r\n      CONDITIONBASED,\r\n      CORRECTIVE,\r\n      PLANNEDCORRECTIVE,\r\n      SCHEDULED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PriorityType {\r\n      HIGH,\r\n      MEDIUM,\r\n      LOW,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PropertyAgreementType {\r\n      ASSIGNMENT,\r\n      LEASE,\r\n      TENANT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_VoltageLevels {\r\n      U230,\r\n      U400,\r\n      U440,\r\n      U525,\r\n      U690,\r\n      U1000,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PoleUsage {\r\n      _1P,\r\n      _2P,\r\n      _3P,\r\n      _4P,\r\n      _1PN,\r\n      _3PN,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TrippingCurveType {\r\n      UPPER,\r\n      LOWER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AdjustmentValueType {\r\n      RANGE,\r\n      LIST}\r\n\r\n   public enum PEnum_ElectroMagneticTrippingUnitType {\r\n      OL,\r\n      TMP_STD,\r\n      TMP_SC,\r\n      TMP_MP,\r\n      TMP_BM,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ElectronicTrippingUnitType {\r\n      EP_BM,\r\n      EP_MP,\r\n      EP_SC,\r\n      EP_STD,\r\n      EP_TIMEDELAYED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TrippingUnitReleaseCurrent {\r\n      _10 = 10,\r\n      _30 = 30,\r\n      _100 = 100,\r\n      _300 = 300,\r\n      _500 = 500,\r\n      _1000 = 1000,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ThermalTrippingUnitType {\r\n      NH_FUSE,\r\n      DIAZED,\r\n      MINIZED,\r\n      NEOZED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_EarthFailureDeviceType {\r\n      STANDARD,\r\n      TIMEDELAYED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FuseDisconnectorType {\r\n      ENGINEPROTECTIONDEVICE,\r\n      FUSEDSWITCH,\r\n      HRC,\r\n      OVERLOADPROTECTIONDEVICE,\r\n      SWITCHDISCONNECTORFUSE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_VaristorType {\r\n      METALOXIDE,\r\n      ZINCOXIDE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PumpBaseType {\r\n      FRAME,\r\n      BASE,\r\n      NONE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PumpDriveConnectionType {\r\n      DIRECTDRIVE,\r\n      BELTDRIVE,\r\n      COUPLING,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ReinforcementBarType {\r\n      RING,\r\n      SPIRAL,\r\n      OTHER,\r\n      USERDEFINED,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_ReinforcementBarAllocationType {\r\n      SINGLE,\r\n      DOUBLE,\r\n      ALTERNATE,\r\n      OTHER,\r\n      USERDEFINED,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_ReinforcementBarSurface {\r\n      PLAIN,\r\n      TEXTURED,\r\n      OTHER,\r\n      USERDEFINED,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_RiskType {\r\n      BUSINESS,\r\n      HAZARD,\r\n      HEALTHANDSAFETY,\r\n      INSURANCE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_RiskAssessment {\r\n      ALMOSTCERTAIN,\r\n      VERYLIKELY,\r\n      LIKELY,\r\n      VERYPOSSIBLE,\r\n      POSSIBLE,\r\n      SOMEWHATPOSSIBLE,\r\n      UNLIKELY,\r\n      VERYUNLIKELY,\r\n      RARE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_RiskConsequence {\r\n      CATASTROPHIC,\r\n      SEVERE,\r\n      MAJOR,\r\n      CONSIDERABLE,\r\n      MODERATE,\r\n      SOME,\r\n      MINOR,\r\n      VERYLOW,\r\n      INSIGNIFICANT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_RiskRating {\r\n      CRITICAL,\r\n      VERYHIGH,\r\n      HIGH,\r\n      CONSIDERABLE,\r\n      MODERATE,\r\n      SOME,\r\n      LOW,\r\n      VERYLOW,\r\n      INSIGNIFICANT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_RiskOwner {\r\n      DESIGNER,\r\n      SPECIFIER,\r\n      CONSTRUCTOR,\r\n      INSTALLER,\r\n      MAINTAINER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_BathType {\r\n      DOMESTIC,\r\n      DOMESTICCORNER,\r\n      FOOT,\r\n      JACUZZI,\r\n      PLUNGE,\r\n      SITZ,\r\n      TREATMENT,\r\n      WHIRLPOOL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SanitaryMounting {\r\n      BACKTOWALL,\r\n      PEDESTAL,\r\n      COUNTERTOP,\r\n      WALLHUNG,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CisternHeight {\r\n      HIGHLEVEL,\r\n      LOWLEVEL,\r\n      NONE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FlushType {\r\n      LEVER,\r\n      PULL,\r\n      PUSH,\r\n      SENSOR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FountainType {\r\n      DRINKINGWATER,\r\n      EYEWASH,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ShowerType {\r\n      DRENCH,\r\n      INDIVIDUAL,\r\n      TUNNEL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SinkType {\r\n      BELFAST,\r\n      BUCKET,\r\n      CLEANERS,\r\n      COMBINATION_LEFT,\r\n      COMBINATION_RIGHT,\r\n      COMBINATION_DOUBLE,\r\n      DRIP,\r\n      LABORATORY,\r\n      LONDON,\r\n      PLASTER,\r\n      POT,\r\n      RINSING,\r\n      SHELF,\r\n      VEGETABLEPREPARATION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ToiletType {\r\n      BEDPANWASHER,\r\n      CHEMICAL,\r\n      CLOSECOUPLED,\r\n      LOOSECOUPLED,\r\n      SLOPHOPPER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ToiletPanType {\r\n      SIPHONIC,\r\n      SQUAT,\r\n      WASHDOWN,\r\n      WASHOUT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_UrinalType {\r\n      BOWL,\r\n      SLAB,\r\n      STALL,\r\n      TROUGH,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_WashHandBasinType {\r\n      DENTALCUSPIDOR,\r\n      HANDRINSE,\r\n      HOSPITAL,\r\n      TIPUP,\r\n      WASHFOUNTAIN,\r\n      WASHINGTROUGH,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_MovementSensingType {\r\n      PHOTOELECTRICCELL,\r\n      PRESSUREPAD,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TemperatureSensorType {\r\n      HIGHLIMIT,\r\n      LOWLIMIT,\r\n      OUTSIDETEMPERATURE,\r\n      OPERATINGTEMPERATURE,\r\n      ROOMTEMPERATURE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_WindSensorType {\r\n      CUP,\r\n      WINDMILL,\r\n      HOTWIRE,\r\n      LASERDOPPLER,\r\n      SONIC,\r\n      PLATE,\r\n      TUBE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ElementShading {\r\n      FIXED,\r\n      MOVABLE,\r\n      OVERHANG,\r\n      SIDEFIN,\r\n      USERDEFINED,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_SoundScale {\r\n      DBA,\r\n      DBB,\r\n      DBC,\r\n      NC,\r\n      NR}\r\n\r\n   public enum PEnum_SpaceHeaterPlacementType {\r\n      BASEBOARD,\r\n      TOWELWARMER,\r\n      SUSPENDED,\r\n      WALL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SpaceHeaterTemperatureClassification {\r\n      LOWTEMPERATURE,\r\n      HIGHTEMPERATURE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SpaceHeaterHeatTransferDimension {\r\n      POINT,\r\n      PATH,\r\n      SURFACE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_HeatTransferMedium {\r\n      WATER,\r\n      STEAM,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SpaceHeaterConvectorType {\r\n      FORCED,\r\n      NATURAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SpaceHeaterRadiatorType {\r\n      FINNEDTUBE,\r\n      PANEL,\r\n      SECTIONAL,\r\n      TUBULAR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SwitchFunctionType {\r\n      ONOFFSWITCH,\r\n      INTERMEDIATESWITCH,\r\n      DOUBLETHROWSWITCH,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ContactorType {\r\n      CAPACITORSWITCHING,\r\n      LOWCURRENT,\r\n      MAGNETICLATCHING,\r\n      MECHANICALLATCHING,\r\n      MODULAR,\r\n      REVERSING,\r\n      STANDARD,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SwitchingDeviceDimmerSwitchType {\r\n      ROCKER,\r\n      SELECTOR,\r\n      TWIST,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SwitchingDeviceEmergencyStopType {\r\n      MUSHROOM,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SwitchingDeviceKeypadType {\r\n      BUTTONS,\r\n      TOUCHSCREEN,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SwitchingDeviceMomentarySwitchType {\r\n      BUTTON,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SwitchUsage {\r\n      EMERGENCY,\r\n      GUARD,\r\n      LIMIT,\r\n      START,\r\n      STOP,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SwitchActivation {\r\n      ACTUATOR,\r\n      FOOT,\r\n      HAND,\r\n      PROXIMITY,\r\n      SOUND,\r\n      TWOHAND,\r\n      WIRE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_StarterType {\r\n      AUTOTRANSFORMER,\r\n      MANUAL,\r\n      DIRECTONLINE,\r\n      FREQUENCY,\r\n      NSTEP,\r\n      RHEOSTATIC,\r\n      STARDELTA,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SwitchDisconnectorType {\r\n      CENTERBREAK,\r\n      DIVIDEDSUPPORT,\r\n      DOUBLEBREAK,\r\n      EARTHINGSWITCH,\r\n      ISOLATOR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_LoadDisconnectionType {\r\n      OFFLOAD,\r\n      ONLOAD,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SwitchingDeviceToggleSwitchType {\r\n      BREAKGLASS,\r\n      CHANGEOVER,\r\n      KEYOPERATED,\r\n      MANUALPULL,\r\n      PUSHBUTTON,\r\n      PULLCORD,\r\n      ROCKER,\r\n      SELECTOR,\r\n      TWIST,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FurniturePanelType {\r\n      ACOUSTICAL,\r\n      GLAZED,\r\n      HORZ_SEG,\r\n      MONOLITHIC,\r\n      OPEN,\r\n      ENDS,\r\n      DOOR,\r\n      SCREEN,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TankComposition {\r\n      COMPLEX,\r\n      ELEMENT,\r\n      PARTIAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TankAccessType {\r\n      NONE,\r\n      LOOSECOVER,\r\n      MANHOLE,\r\n      SECUREDCOVER,\r\n      SECUREDCOVERWITHMANHOLE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TankStorageType {\r\n      ICE,\r\n      WATER,\r\n      RAINWATER,\r\n      WASTEWATER,\r\n      POTABLEWATER,\r\n      FUEL,\r\n      OIL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TankPatternType {\r\n      HORIZONTALCYLINDER,\r\n      VERTICALCYLINDER,\r\n      RECTANGULAR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_EndShapeType {\r\n      CONCAVECONVEX,\r\n      FLATCONVEX,\r\n      CONVEXCONVEX,\r\n      CONCAVEFLAT,\r\n      FLATFLAT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SecondaryCurrentType {\r\n      AC,\r\n      DC,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TransformerVectorGroup {\r\n      DD0,\r\n      DD6,\r\n      DY5,\r\n      DY11,\r\n      YD5,\r\n      YD11,\r\n      DZ0,\r\n      DZ6,\r\n      YY0,\r\n      YY6,\r\n      YZ5,\r\n      YZ11,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_UnitaryControlElementApplication {\r\n      LIFTPOSITIONINDICATOR,\r\n      LIFTHALLLANTERN,\r\n      LIFTARRIVALGONG,\r\n      LIFTCARDIRECTIONLANTERN,\r\n      LIFTFIRESYSTEMSPORT,\r\n      LIFTVOICEANNOUNCER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirHandlerConstruction {\r\n      MANUFACTUREDITEM,\r\n      CONSTRUCTEDONSITE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirHandlerFanCoilArrangement {\r\n      BLOWTHROUGH,\r\n      DRAWTHROUGH,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ValvePattern {\r\n      SINGLEPORT,\r\n      ANGLED_2_PORT,\r\n      STRAIGHT_2_PORT,\r\n      STRAIGHT_3_PORT,\r\n      CROSSOVER_4_PORT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ValveOperation {\r\n      DROPWEIGHT,\r\n      FLOAT,\r\n      HYDRAULIC,\r\n      LEVER,\r\n      LOCKSHIELD,\r\n      MOTORIZED,\r\n      PNEUMATIC,\r\n      SOLENOID,\r\n      SPRING,\r\n      THERMOSTATIC,\r\n      WHEEL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ValveMechanism {\r\n      BALL,\r\n      BUTTERFLY,\r\n      CONFIGUREDGATE,\r\n      GLAND,\r\n      GLOBE,\r\n      LUBRICATEDPLUG,\r\n      NEEDLE,\r\n      PARALLELSLIDE,\r\n      PLUG,\r\n      WEDGEGATE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FaucetType {\r\n      BIB,\r\n      GLOBE,\r\n      DIVERTER,\r\n      DIVIDEDFLOWCOMBINATION,\r\n      PILLAR,\r\n      SINGLEOUTLETCOMBINATION,\r\n      SPRAY,\r\n      SPRAYMIXING,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FaucetOperation {\r\n      CERAMICDISC,\r\n      LEVERHANDLE,\r\n      NONCONCUSSIVESELFCLOSING,\r\n      QUATERTURN,\r\n      QUICKACTION,\r\n      SCREWDOWN,\r\n      SELFCLOSING,\r\n      TIMEDSELFCLOSING,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FaucetFunction {\r\n      COLD,\r\n      HOT,\r\n      MIXED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_IsolatingPurpose {\r\n      LANDING,\r\n      LANDINGWITHPRESSUREREGULATION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_MixingValveControl {\r\n      MANUAL,\r\n      PREDEFINED,\r\n      THERMOSTATIC,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TrapType {\r\n      NONE,\r\n      P_TRAP,\r\n      Q_TRAP,\r\n      S_TRAP,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_InletPatternType {\r\n      NONE,\r\n      _1 = 1,\r\n      _2 = 2,\r\n      _3 = 3,\r\n      _4 = 4,\r\n      _12 = 12,\r\n      _13 = 13,\r\n      _14 = 14,\r\n      _23 = 23,\r\n      _24 = 24,\r\n      _34 = 34,\r\n      _123 = 123,\r\n      _124 = 124,\r\n      _134 = 134,\r\n      _234 = 234,\r\n      _1234 = 1234}\r\n\r\n   public enum PEnum_GullyType {\r\n      VERTICAL,\r\n      BACKINLET,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_BackInletPatternType {\r\n      NONE,\r\n      _1 = 1,\r\n      _2 = 2,\r\n      _3 = 3,\r\n      _4 = 4,\r\n      _12 = 12,\r\n      _13 = 13,\r\n      _14 = 14,\r\n      _23 = 23,\r\n      _24 = 24,\r\n      _34 = 34,\r\n      _123 = 123,\r\n      _124 = 124,\r\n      _134 = 134,\r\n      _234 = 234,\r\n      _1234 = 1234}\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/ExporterInitializer_PsetDefIFC4X3Enum.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing Autodesk.Revit;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Export.Exporter.PropertySet.Calculators;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet.IFC4X3\r\n{\r\n\r\n\r\n   public enum PEnum_ElementStatus {\r\n      DEMOLISH,\r\n      EXISTING,\r\n      NEW,\r\n      TEMPORARY,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FailPosition {\r\n      FAILCLOSED,\r\n      FAILOPEN,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ActuatorApplication {\r\n      DAMPERACTUATOR,\r\n      ENTRYEXITDEVICE,\r\n      FIRESMOKEDAMPERACTUATOR,\r\n      LAMPACTUATOR,\r\n      SUNBLINDACTUATOR,\r\n      VALVEPOSITIONER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ElectricActuatorType {\r\n      MAGNETIC,\r\n      MOTORDRIVE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AddressType {\r\n      DISTRIBUTIONPOINT,\r\n      HOME,\r\n      OFFICE,\r\n      SITE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirSideSystemType {\r\n      CONSTANTVOLUME,\r\n      CONSTANTVOLUMEBYPASS,\r\n      CONSTANTVOLUMEMULTIPLEZONEREHEAT,\r\n      CONSTANTVOLUMESINGLEZONE,\r\n      VARIABLEAIRVOLUME,\r\n      VARIABLEAIRVOLUMEDUALCONDUIT,\r\n      VARIABLEAIRVOLUMEFANPOWERED,\r\n      VARIABLEAIRVOLUMEINDUCTION,\r\n      VARIABLEAIRVOLUMEREHEAT,\r\n      VARIABLEAIRVOLUMEVARIABLEDIFFUSERS,\r\n      VARIABLEAIRVOLUMEVARIABLETEMPERATURE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirSideSystemDistributionType {\r\n      DUALDUCT,\r\n      MULTIZONE,\r\n      SINGLEDUCT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalBoxArrangementType {\r\n      DUALDUCT,\r\n      SINGLEDUCT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalBoxReheatType {\r\n      ELECTRICALREHEAT,\r\n      GASREHEAT,\r\n      NONE,\r\n      STEAMCOILREHEAT,\r\n      WATERCOILREHEAT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalAirFlowType {\r\n      EXHAUSTAIR,\r\n      RETURNAIR,\r\n      SUPPLYAIR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalLocation {\r\n      CEILINGINTERIOR,\r\n      CEILINGPERIMETER,\r\n      FLOOR,\r\n      SIDEWALLHIGH,\r\n      SIDEWALLLOW,\r\n      SILL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalShape {\r\n      RECTANGULAR,\r\n      ROUND,\r\n      SLOT,\r\n      SQUARE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalFaceType {\r\n      DOUBLEDEFLECTION,\r\n      EGGCRATE,\r\n      FOURWAYPATTERN,\r\n      LOUVERED,\r\n      PERFORATED,\r\n      SIGHTPROOF,\r\n      SINGLEDEFLECTION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalFlowPattern {\r\n      COMPACTJET,\r\n      DISPLACMENT,\r\n      LINEARDOUBLE,\r\n      LINEARFOURWAY,\r\n      LINEARSINGLE,\r\n      RADIAL,\r\n      SWIRL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalDischargeDirection {\r\n      ADJUSTABLE,\r\n      PARALLEL,\r\n      PERPENDICULAR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalFinishType {\r\n      ANNODIZED,\r\n      NONE,\r\n      PAINTED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalMountingType {\r\n      FLATFLUSH,\r\n      LAYIN,\r\n      SURFACE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalCoreType {\r\n      CURVEDBLADE,\r\n      NONE,\r\n      REMOVABLE,\r\n      REVERSIBLE,\r\n      SHUTTERBLADE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirTerminalFlowControlType {\r\n      BELLOWS,\r\n      DAMPER,\r\n      NONE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirToAirHeatTransferHeatTransferType {\r\n      LATENT,\r\n      SENSIBLE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AcquisitionMethod {\r\n      GPS,\r\n      LASERSCAN_AIRBORNE,\r\n      LASERSCAN_GROUND,\r\n      SONAR,\r\n      THEODOLITE,\r\n      NOTKNOWN,\r\n      UNSET,\r\n      USERDEFINED}\r\n\r\n   public enum PEnum_AssetAccountingType {\r\n      FIXED,\r\n      NONFIXED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AssetTaxType {\r\n      CAPITALISED,\r\n      EXPENSED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AssetInsuranceType {\r\n      PERSONAL,\r\n      REAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualAmplifierType {\r\n      FIXED,\r\n      VARIABLE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualCameraType {\r\n      AUDIOVIDEO,\r\n      PHOTO,\r\n      VIDEO,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualDisplayType {\r\n      CRT,\r\n      DLP,\r\n      LCD,\r\n      LED,\r\n      PLASMA,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualDisplayTouchScreen {\r\n      MULTITOUCH,\r\n      NONE,\r\n      SINGLETOUCH,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualPlayerType {\r\n      AUDIO,\r\n      VIDEO,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualProjectorType {\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_RailwayCommunicationTerminalType {\r\n      IP,\r\n      LEGACY,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualReceiverType {\r\n      AUDIO,\r\n      AUDIOVIDEO,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualSpeakerType {\r\n      COAXIAL,\r\n      FULLRANGE,\r\n      MIDRANGE,\r\n      TWEETER,\r\n      WOOFER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualSpeakerMounting {\r\n      CEILING,\r\n      FREESTANDING,\r\n      OUTDOOR,\r\n      WALL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AudioVisualTunerType {\r\n      AUDIO,\r\n      VIDEO,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AxleCountingEquipmentType {\r\n      EVALUATOR,\r\n      WHEELDETECTOR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_BerthApproach {\r\n      END,\r\n      SIDE}\r\n\r\n   public enum PEnum_BerthMode {\r\n      BOW,\r\n      STERN}\r\n\r\n   public enum PEnum_BoilerOperatingMode {\r\n      FIXED,\r\n      MODULATING,\r\n      TWOSTEP,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_EnergySource {\r\n      COAL,\r\n      COAL_PULVERIZED,\r\n      ELECTRICITY,\r\n      GAS,\r\n      OIL,\r\n      PROPANE,\r\n      WOOD,\r\n      WOOD_CHIP,\r\n      WOOD_PELLET,\r\n      WOOD_PULVERIZED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_BoreholeState {\r\n      CAP_REPLACED,\r\n      CASING_INSTALLED,\r\n      CASING_PARTIALLY_REPLACED,\r\n      CASING_REPLACED,\r\n      CHAMBER_RECONDITIONED,\r\n      DECONSTRUCTED,\r\n      INSTALLED,\r\n      PARTIALLY_DECONSTRUCTED,\r\n      PARTIALLY_REFILLED,\r\n      RECONDITIONED,\r\n      REFILLED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_StructureIndicator {\r\n      COATED,\r\n      COMPOSITE,\r\n      HOMOGENEOUS}\r\n\r\n   public enum PEnum_LineCharacteristic {\r\n      ENTERDEPOT,\r\n      EXITDEPOT,\r\n      FREIGHT,\r\n      PASSENGER,\r\n      PASSENGERANDFREIGHT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TrackUsage {\r\n      CATCHSIDING,\r\n      CLASSIFICATIONTRACK,\r\n      CONNECTINGLINE,\r\n      FREIGHTTRACK,\r\n      LOCOMOTIVEHOLDTRACK,\r\n      LOCOMOTIVERUNNINGTRACK,\r\n      LOCOMOTIVESERVICETRACK,\r\n      MAINTRACK,\r\n      MULTIPLEUNITRUNNINGTRACK,\r\n      RECEIVINGDEPARTURETRACK,\r\n      REFUGESIDING,\r\n      REPAIRSIDING,\r\n      ROLLINGFORBIDDENTRACK,\r\n      ROLLINGTRACK,\r\n      ROUNDABOUTLINE,\r\n      STORAGETRACK,\r\n      SWITCHINGLEAD,\r\n      UNTWININGLINE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TrackCharacteristic {\r\n      FUNICULAR,\r\n      NORMAL,\r\n      RACK,\r\n      RIGIDOVERHEAD,\r\n      THIRDRAIL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ConduitShapeType {\r\n      CIRCULAR,\r\n      OVAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DistributionPortGender {\r\n      FEMALE,\r\n      MALE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_InstallationMethodFlagEnum {\r\n      BELOWCEILING,\r\n      INDUCT,\r\n      INSOIL,\r\n      ONWALL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_MountingMethodEnum {\r\n      LADDER,\r\n      PERFORATEDTRAY,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_InsulatorType {\r\n      LONGRODINSULATOR,\r\n      PININSULATOR,\r\n      POSTINSULATOR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FunctionEnum {\r\n      LINE,\r\n      NEUTRAL,\r\n      PROTECTIVEEARTH,\r\n      PROTECTIVEEARTHNEUTRAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_MaterialEnum {\r\n      ALUMINIUM,\r\n      COPPER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ConstructionEnum {\r\n      FLEXIBLESTRANDEDCONDUCTOR,\r\n      SOLIDCONDUCTOR,\r\n      STRANDEDCONDUCTOR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ShapeEnum {\r\n      CIRCULARCONDUCTOR,\r\n      HELICALCONDUCTOR,\r\n      RECTANGULARCONDUCTOR,\r\n      SECTORCONDUCTOR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoreColoursEnum {\r\n      BLACK,\r\n      BLUE,\r\n      BROWN,\r\n      GOLD,\r\n      GREEN,\r\n      GREENANDYELLOW,\r\n      GREY,\r\n      ORANGE,\r\n      PINK,\r\n      RED,\r\n      SILVER,\r\n      TURQUOISE,\r\n      VIOLET,\r\n      WHITE,\r\n      YELLOW,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FiberColour {\r\n      AQUA,\r\n      BLACK,\r\n      BLUE,\r\n      BROWN,\r\n      GREEN,\r\n      ORANGE,\r\n      RED,\r\n      ROSE,\r\n      SLATE,\r\n      VIOLET,\r\n      WHITE,\r\n      YELLOW,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FiberType {\r\n      BEND_INSENSITIVEFIBER,\r\n      CUTOFFSHIFTEDFIBER,\r\n      DISPERSIONSHIFTEDFIBER,\r\n      LOWWATERPEAKFIBER,\r\n      NON_ZERODISPERSIONSHIFTEDFIBER,\r\n      OM1,\r\n      OM2,\r\n      OM3,\r\n      OM4,\r\n      OM5,\r\n      STANDARDSINGLEMODEFIBER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_OpticalCableStructureType {\r\n      BREAKOUT,\r\n      LOOSETUBE,\r\n      PATCHCORD,\r\n      PIGTAIL,\r\n      TIGHTBUFFERED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FiberMode {\r\n      MULTIMODE,\r\n      SINGLEMODE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_WirePairType {\r\n      COAXIAL,\r\n      TWISTED,\r\n      UNTWISTED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ProcessItem {\r\n      BARREL,\r\n      CGT,\r\n      PASSENGER,\r\n      TEU,\r\n      TONNE,\r\n      VEHICLE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AdditionalProcessing {\r\n      INSPECTION,\r\n      ISOLATION,\r\n      NONE,\r\n      TARIFFS}\r\n\r\n   public enum PEnum_ProcessDirection {\r\n      EXPORT,\r\n      IMPORT,\r\n      TRANSFER}\r\n\r\n   public enum PEnum_RelativePosition {\r\n      LEFT,\r\n      MIDDLE,\r\n      RIGHT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CheckRailType {\r\n      TYPE_33C1,\r\n      TYPE_40C1,\r\n      TYPE_47C1,\r\n      TYPE_CR3_60U,\r\n      TYPE_R260,\r\n      TYPE_R320CR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_UsagePurpose {\r\n      MAINTENANCE,\r\n      RESCUESERVICES,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoilPlacementType {\r\n      CEILING,\r\n      FLOOR,\r\n      UNIT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoilCoolant {\r\n      BRINE,\r\n      GLYCOL,\r\n      WATER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoilConnectionDirection {\r\n      LEFT,\r\n      RIGHT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoilFluidArrangement {\r\n      CROSSCOUNTERFLOW,\r\n      CROSSFLOW,\r\n      CROSSPARALLELFLOW,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PolarizationMode {\r\n      DUALPOLARIZATION,\r\n      SINGLEPOLARIZATION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_RadiationPattern {\r\n      DIRECTIONAL,\r\n      FANBEAM,\r\n      OMNIDIRECTIONAL,\r\n      PENCILBEAM,\r\n      SHAPEDBEAM,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AntennaType {\r\n      CEILING,\r\n      PANEL,\r\n      YAGI,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_InputOutputSignalType {\r\n      CURRENT,\r\n      VOLTAGE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ComputerUIType {\r\n      CLI,\r\n      GUI,\r\n      TOUCHSCREEN,\r\n      TOUCHTONE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CommonInterfaceType {\r\n      DRYCONTACTSINTERFACE,\r\n      MANAGEMENTINTERFACE,\r\n      OTHER_IO_INTERFACE,\r\n      SYNCHRONIZATIONINTERFACE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ModemTrafficInterfaceType {\r\n      E1,\r\n      FASTETHERNET,\r\n      XDSL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_OpticalNetworkUnitType {\r\n      ACTIVE,\r\n      PASSIVE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TransportEquipmentType {\r\n      MPLS_TP,\r\n      OTN,\r\n      PDH,\r\n      SDH,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TransportEquipmentAssemblyType {\r\n      FIXEDCONFIGURATION,\r\n      MODULARCONFIGURATION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CompressorTypePowerSource {\r\n      ENGINEDRIVEN,\r\n      GASTURBINE,\r\n      MOTORDRIVEN,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_RefrigerantClass {\r\n      AMMONIA,\r\n      CFC,\r\n      CO2,\r\n      H2O,\r\n      HCFC,\r\n      HFC,\r\n      HYDROCARBONS,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AssemblyPlace {\r\n      FACTORY,\r\n      OFFSITE,\r\n      SITE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ConcreteCastingMethod {\r\n      INSITU,\r\n      MIXED,\r\n      PRECAST,\r\n      PRINTED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ControllerTypeFloating {\r\n      ABSOLUTE,\r\n      ACCUMULATOR,\r\n      AVERAGE,\r\n      BINARY,\r\n      CONSTANT,\r\n      DERIVATIVE,\r\n      DIVIDE,\r\n      HYSTERESIS,\r\n      INPUT,\r\n      INTEGRAL,\r\n      INVERSE,\r\n      LOWERLIMITCONTROL,\r\n      MAXIMUM,\r\n      MINIMUM,\r\n      MODIFIER,\r\n      OUTPUT,\r\n      PRODUCT,\r\n      PULSECONVERTER,\r\n      REPORT,\r\n      RUNNINGAVERAGE,\r\n      SPLIT,\r\n      SUBTRACT,\r\n      SUM,\r\n      UPPERLIMITCONTROL,\r\n      VARIABLE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ControllerMultiPositionType {\r\n      INPUT,\r\n      OUTPUT,\r\n      VARIABLE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ControllerTypeProgrammable {\r\n      PRIMARY,\r\n      SECONDARY,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ControllerApplication {\r\n      BOILERCONTROLLER,\r\n      CONSTANTLIGHTCONTROLLER,\r\n      DISCHARGEAIRCONTROLLER,\r\n      FANCOILUNITCONTROLLER,\r\n      LIGHTINGPANELCONTROLLER,\r\n      MODEMCONTROLLER,\r\n      OCCUPANCYCONTROLLER,\r\n      PARTITIONWALLCONTROLLER,\r\n      PUMPCONTROLLER,\r\n      REALTIMEBASEDSCHEDULER,\r\n      REALTIMEKEEPER,\r\n      ROOFTOPUNITCONTROLLER,\r\n      SCENECONTROLLER,\r\n      SPACECONFORTCONTROLLER,\r\n      SUNBLINDCONTROLLER,\r\n      TELEPHONEDIRECTORY,\r\n      UNITVENTILATORCONTROLLER,\r\n      VAV,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ControllerProportionalType {\r\n      PROPORTIONAL,\r\n      PROPORTIONALINTEGRAL,\r\n      PROPORTIONALINTEGRALDERIVATIVE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ControllerTwoPositionType {\r\n      AND,\r\n      AVERAGE,\r\n      CALENDAR,\r\n      INPUT,\r\n      LOWERBANDSWITCH,\r\n      LOWERLIMITSWITCH,\r\n      NOT,\r\n      OR,\r\n      OUTPUT,\r\n      UPPERBANDSWITCH,\r\n      UPPERLIMITSWITCH,\r\n      VARIABLE,\r\n      XOR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CooledBeamActiveAirFlowConfigurationType {\r\n      BIDIRECTIONAL,\r\n      UNIDIRECTIONALLEFT,\r\n      UNIDIRECTIONALRIGHT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CooledBeamSupplyAirConnectionType {\r\n      LEFT,\r\n      RIGHT,\r\n      STRAIGHT,\r\n      TOP,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CooledBeamPipeConnection {\r\n      LEFT,\r\n      RIGHT,\r\n      STRAIGHT,\r\n      TOP,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CooledBeamWaterFlowControlSystemType {\r\n      _2WAYVALVE,\r\n      _3WAYVALVE,\r\n      NONE,\r\n      ONOFFVALVE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CooledBeamIntegratedLightingType {\r\n      DIRECT,\r\n      DIRECTANDINDIRECT,\r\n      INDIRECT,\r\n      NONE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoolingTowerCircuitType {\r\n      CLOSEDCIRCUITDRY,\r\n      CLOSEDCIRCUITDRYWET,\r\n      CLOSEDCIRCUITWET,\r\n      OPENCIRCUIT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoolingTowerFlowArrangement {\r\n      COUNTERFLOW,\r\n      CROSSFLOW,\r\n      PARALLELFLOW,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoolingTowerSprayType {\r\n      FILMTYPEFILL,\r\n      SPLASHTYPEFILL,\r\n      SPRAYFILLED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoolingTowerCapacityControl {\r\n      BYPASSVALVECONTROL,\r\n      DAMPERSCONTROL,\r\n      FANCYCLING,\r\n      MULTIPLESERIESPUMPS,\r\n      TWOSPEEDFAN,\r\n      TWOSPEEDPUMP,\r\n      VARIABLESPEEDFAN,\r\n      VARIABLESPEEDPUMP,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CoolingTowerControlStrategy {\r\n      FIXEDEXITINGWATERTEMP,\r\n      WETBULBTEMPRESET,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DamperSizingMethod {\r\n      EXACT,\r\n      NOMINAL,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DamperOperation {\r\n      AUTOMATIC,\r\n      MANUAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DamperOrientation {\r\n      HORIZONTAL,\r\n      VERTICAL,\r\n      VERTICALORHORIZONTAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DamperBladeAction {\r\n      FOLDINGCURTAIN,\r\n      OPPOSED,\r\n      PARALLEL,\r\n      SINGLE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DamperBladeShape {\r\n      EXTRUDEDAIRFOIL,\r\n      FABRICATEDAIRFOIL,\r\n      FLAT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DamperBladeEdge {\r\n      CRIMPED,\r\n      UNCRIMPED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ControlDamperOperation {\r\n      EXPONENTIAL,\r\n      LINEAR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FireDamperActuationType {\r\n      GRAVITY,\r\n      SPRING,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FireDamperClosureRating {\r\n      DYNAMIC,\r\n      STATIC,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SerialInterfaceType {\r\n      RS_232,\r\n      RS_422,\r\n      RS_485,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DataTransmissionUnitUsage {\r\n      EARTHQUAKE,\r\n      FOREIGNOBJECT,\r\n      WINDANDRAIN,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ArrangerPositionEnum {\r\n      FRONTSIDE,\r\n      HORIZONTAL,\r\n      REARSIDE,\r\n      VERTICAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_LubricationSystemType {\r\n      ACTIVE_LUBRICATION,\r\n      PASSIVE_LUBRICATION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_LubricationPowerSupply {\r\n      ELECTRIC,\r\n      PHOTOVOLTAIC,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_RailPadStiffness {\r\n      MEDIUM,\r\n      SOFT,\r\n      STIFF,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DispatchingBoardType {\r\n      CENTER,\r\n      STATION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TypeOfShaft {\r\n      DIVERSIONSHAFT,\r\n      FLUSHINGCHAMBER,\r\n      GATESHAFT,\r\n      GULLY,\r\n      INSPECTIONCHAMBER,\r\n      PUMPSHAFT,\r\n      ROOFWATERSHAFT,\r\n      SHAFTWITHCHECKVALVE,\r\n      SLURRYCOLLECTOR,\r\n      SOAKAWAY,\r\n      WELL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DistributionPortElectricalType {\r\n      ACPLUG,\r\n      COAXIAL,\r\n      CRIMP,\r\n      DCPLUG,\r\n      DIN,\r\n      DSUB,\r\n      DVI,\r\n      EIAJ,\r\n      HDMI,\r\n      RADIO,\r\n      RCA,\r\n      RJ,\r\n      SOCKET,\r\n      TRS,\r\n      USB,\r\n      XLR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ConductorFunctionEnum {\r\n      NEUTRAL,\r\n      PHASE_L1,\r\n      PHASE_L2,\r\n      PHASE_L3,\r\n      PROTECTIVEEARTH,\r\n      PROTECTIVEEARTHNEUTRAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DuctConnectionType {\r\n      BEADEDSLEEVE,\r\n      COMPRESSION,\r\n      CRIMP,\r\n      DRAWBAND,\r\n      DRIVESLIP,\r\n      FLANGED,\r\n      NONE,\r\n      OUTSIDESLEEVE,\r\n      SLIPON,\r\n      SOLDERED,\r\n      SSLIP,\r\n      STANDINGSEAM,\r\n      SWEDGE,\r\n      WELDED,\r\n      OTHER,\r\n      USERDEFINED,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_PipeEndStyleTreatment {\r\n      BRAZED,\r\n      COMPRESSION,\r\n      FLANGED,\r\n      GROOVED,\r\n      NONE,\r\n      OUTSIDESLEEVE,\r\n      SOLDERED,\r\n      SWEDGE,\r\n      THREADED,\r\n      WELDED,\r\n      OTHER,\r\n      UNSET}\r\n\r\n   public enum PEnum_DistributionSystemElectricalType {\r\n      IT,\r\n      TN,\r\n      TN_C,\r\n      TN_C_S,\r\n      TN_S,\r\n      TT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DistributionSystemElectricalCategory {\r\n      EXTRALOWVOLTAGE,\r\n      HIGHVOLTAGE,\r\n      LOWVOLTAGE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_OverheadContactLineType {\r\n      COMPOUND_CATENARY_SUSPENSION,\r\n      OCL_WITH_CATENARY_SUSPENSION,\r\n      OCL_WITH_STITCHED_CATENARY_SUSPENSION,\r\n      RIGID_CATENARY,\r\n      TROLLY_TYPE_CONTACT_LINE,\r\n      TROLLY_TYPE_WITH_STITCHWIRE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DuctSizingMethod {\r\n      CONSTANTFRICTION,\r\n      CONSTANTPRESSURE,\r\n      STATICREGAIN,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DoorPanelOperationEnum {\r\n      DOUBLE_ACTING,\r\n      FIXEDPANEL,\r\n      FOLDING,\r\n      REVOLVING,\r\n      ROLLINGUP,\r\n      SLIDING,\r\n      SWINGING,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_DoorPanelPositionEnum {\r\n      LEFT,\r\n      MIDDLE,\r\n      RIGHT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TurnstileType {\r\n      SWINGGATEBRAKE,\r\n      THREEPOLEROTARYBRAKE,\r\n      WINGGATEBRAKE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DuctSegmentShape {\r\n      FLATOVAL,\r\n      RECTANGULAR,\r\n      ROUND,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_InsulationStandardClass {\r\n      CLASS0APPLIANCE,\r\n      CLASS0IAPPLIANCE,\r\n      CLASSIAPPLIANCE,\r\n      CLASSIIAPPLIANCE,\r\n      CLASSIIIAPPLIANCE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ElectricalFeederType {\r\n      ALONGTRACKFEEDER,\r\n      BYPASSFEEDER,\r\n      NEGATIVEFEEDER,\r\n      POSITIVEFEEDER,\r\n      REINFORCINGFEEDER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ElectricApplianceDishwasherType {\r\n      BOTTLEWASHER,\r\n      CUTLERYWASHER,\r\n      DISHWASHER,\r\n      POTWASHER,\r\n      TRAYWASHER,\r\n      UNKNOWN,\r\n      OTHER,\r\n      UNSET}\r\n\r\n   public enum PEnum_ElectricApplianceElectricCookerType {\r\n      COOKINGKETTLE,\r\n      DEEPFRYER,\r\n      OVEN,\r\n      STEAMCOOKER,\r\n      STOVE,\r\n      TILTINGFRYINGPAN,\r\n      UNKNOWN,\r\n      OTHER,\r\n      UNSET}\r\n\r\n   public enum PEnum_BatteryChargingType {\r\n      RECHARGEABLE,\r\n      SINGLECHARGE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ElectronicFilterType {\r\n      BANDPASSFLITER,\r\n      BANDSTOPFILTER,\r\n      FILTERCAPACITOR,\r\n      HARMONICFILTER,\r\n      HIGHPASSFILTER,\r\n      LOWPASSFILTER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_MotorEnclosureType {\r\n      OPENDRIPPROOF,\r\n      TOTALLYENCLOSEDAIROVER,\r\n      TOTALLYENCLOSEDFANCOOLED,\r\n      TOTALLYENCLOSEDNONVENTILATED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CantileverAssemblyType {\r\n      CENTER_CANTILEVER,\r\n      DIRECT_SUSPENSION,\r\n      INSULATED_OVERLAP_CANTILEVER,\r\n      INSULATED_SUSPENSION_SET,\r\n      MECHANICAL_OVERLAP_CANTILEVER,\r\n      MIDPOINT_CANTILEVER,\r\n      MULTIPLE_TRACK_CANTILEVER,\r\n      OUT_OF_RUNNING_CANTILEVER,\r\n      PHASE_SEPARATION_CANTILEVER,\r\n      SINGLE,\r\n      SYSTEM_SEPARATION_CANTILEVER,\r\n      TRANSITION_CANTILEVER,\r\n      TURNOUT_CANTILEVER,\r\n      UNDERBRIDGE_CANTILEVER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ExpansionDirection {\r\n      BI_DIRECTION,\r\n      SINGLE_DIRECTION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_BladesOrientation {\r\n      BLADESINSIDE,\r\n      BLADESOUTSIDE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SteadyDeviceType {\r\n      PULL_OFF,\r\n      PUSH_OFF,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SupportingSystemType {\r\n      ENDCATENARYSUPPORT,\r\n      HEADSPANSUPPORT,\r\n      HERSE,\r\n      MULTITRACKSUPPORT,\r\n      RIGIDGANTRY,\r\n      SIMPLESUPPORT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_BranchLineDirection {\r\n      LEFTDEVIATION,\r\n      LEFT_LEFTDEVIATION,\r\n      LEFT_RIGHTDEVIATION,\r\n      RIGHTDEVIATION,\r\n      RIGHT_LEFTDEVIATION,\r\n      RIGHT_RIGHTDEVIATION,\r\n      SYMETRIC,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TypeOfCurvedTurnout {\r\n      CIRCULAR_ARC,\r\n      STRAIGHT,\r\n      TRANSITION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TypeOfDrivingDevice {\r\n      ELECTRIC,\r\n      HYDRAULIC,\r\n      MANUAL,\r\n      MIXED,\r\n      MOTORISED,\r\n      PNEUMATIC,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TurnoutPanelOrientation {\r\n      BACK,\r\n      FRONT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TurnoutHeaterType {\r\n      ELECTRIC,\r\n      GAS,\r\n      GEOTHERMAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TypeOfJunction {\r\n      ISOLATED_JOINT,\r\n      JOINTED,\r\n      WELDED_AND_INSERTABLE,\r\n      WELDED_AND_NOT_INSERTABLE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TypeOfTurnout {\r\n      DERAILMENT_TURNOUT,\r\n      DIAMOND_CROSSING,\r\n      DOUBLE_SLIP_CROSSING,\r\n      SCISSOR_CROSSOVER,\r\n      SINGLE_SLIP_CROSSING,\r\n      SLIP_TURNOUT_AND_SCISSORS_CROSSING,\r\n      SYMMETRIC_TURNOUT,\r\n      THREE_WAYS_TURNOUT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ElementComponentDeliveryType {\r\n      ATTACHED_FOR_DELIVERY,\r\n      CAST_IN_PLACE,\r\n      LOOSE,\r\n      PRECAST,\r\n      WELDED_TO_STRUCTURE,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_ElementComponentCorrosionTreatment {\r\n      EPOXYCOATED,\r\n      GALVANISED,\r\n      NONE,\r\n      PAINTED,\r\n      STAINLESS,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_EngineEnergySource {\r\n      BIFUEL,\r\n      BIODIESEL,\r\n      DIESEL,\r\n      GASOLINE,\r\n      HYDROGEN,\r\n      NATURALGAS,\r\n      PROPANE,\r\n      SEWAGEGAS,\r\n      UNKNOWN,\r\n      OTHER,\r\n      UNSET}\r\n\r\n   public enum PEnum_LifeCyclePhase {\r\n      ACQUISITION,\r\n      CRADLETOSITE,\r\n      DECONSTRUCTION,\r\n      DISPOSAL,\r\n      DISPOSALTRANSPORT,\r\n      GROWTH,\r\n      INSTALLATION,\r\n      MAINTENANCE,\r\n      MANUFACTURE,\r\n      OCCUPANCY,\r\n      OPERATION,\r\n      PROCUREMENT,\r\n      PRODUCTION,\r\n      PRODUCTIONTRANSPORT,\r\n      RECOVERY,\r\n      REFURBISHMENT,\r\n      REPAIR,\r\n      REPLACEMENT,\r\n      TRANSPORT,\r\n      USAGE,\r\n      WASTE,\r\n      WHOLELIFECYCLE,\r\n      USERDEFINED,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_EvaporativeCoolerFlowArrangement {\r\n      COUNTERFLOW,\r\n      CROSSFLOW,\r\n      PARALLELFLOW,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_EvaporatorMediumType {\r\n      COLDAIR,\r\n      COLDLIQUID,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_EvaporatorCoolant {\r\n      BRINE,\r\n      GLYCOL,\r\n      WATER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CentrifugalFanDischargePosition {\r\n      BOTTOMANGULARDOWN,\r\n      BOTTOMANGULARUP,\r\n      BOTTOMHORIZONTAL,\r\n      DOWNBLAST,\r\n      TOPANGULARDOWN,\r\n      TOPANGULARUP,\r\n      TOPHORIZONTAL,\r\n      UPBLAST,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CentrifugalFanRotation {\r\n      CLOCKWISE,\r\n      COUNTERCLOCKWISE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CentrifugalFanArrangement {\r\n      ARRANGEMENT1,\r\n      ARRANGEMENT10,\r\n      ARRANGEMENT2,\r\n      ARRANGEMENT3,\r\n      ARRANGEMENT4,\r\n      ARRANGEMENT7,\r\n      ARRANGEMENT8,\r\n      ARRANGEMENT9,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FanDischargeType {\r\n      DAMPER,\r\n      DUCT,\r\n      LOUVER,\r\n      SCREEN,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FanApplicationType {\r\n      COOLINGTOWER,\r\n      EXHAUSTAIR,\r\n      RETURNAIR,\r\n      SUPPLYAIR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FanCoilPosition {\r\n      BLOWTHROUGH,\r\n      DRAWTHROUGH,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FanMotorPosition {\r\n      INAIRSTREAM,\r\n      OUTOFAIRSTREAM,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FanMountingType {\r\n      CONCRETEPAD,\r\n      DUCTMOUNTED,\r\n      FIELDERECTEDCURB,\r\n      MANUFACTUREDCURB,\r\n      SUSPENDED,\r\n      WALLMOUNTED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FanMotorConnectionType {\r\n      BELTDRIVE,\r\n      COUPLING,\r\n      DIRECTDRIVE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FanCapacityControlType {\r\n      BLADEPITCHANGLE,\r\n      DISCHARGEDAMPER,\r\n      INLETVANE,\r\n      TWOSPEED,\r\n      VARIABLESPEEDDRIVE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FenderType {\r\n      ARCH,\r\n      CELL,\r\n      CONE,\r\n      CYLINDER,\r\n      PNEUMATIC}\r\n\r\n   public enum PEnum_AddedMassCoefficientMethod {\r\n      PIANC,\r\n      SHIGERU_UEDA,\r\n      VASCO_COSTA}\r\n\r\n   public enum PEnum_FilterAirParticleFilterType {\r\n      ADHESIVERESERVOIR,\r\n      COARSECELLFOAMS,\r\n      COARSEMETALSCREEN,\r\n      COARSESPUNGLASS,\r\n      ELECTRICALFILTER,\r\n      HEPAFILTER,\r\n      MEDIUMELECTRETFILTER,\r\n      MEDIUMNATURALFIBERFILTER,\r\n      MEMBRANEFILTERS,\r\n      RENEWABLEMOVINGCURTIANDRYMEDIAFILTER,\r\n      ROLLFORM,\r\n      ULPAFILTER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FilterAirParticleFilterSeparationType {\r\n      BAG,\r\n      PLEAT,\r\n      TREADSEPARATION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CompressedAirFilterType {\r\n      ACTIVATEDCARBON,\r\n      COALESCENSE_FILTER,\r\n      PARTICLE_FILTER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FilterWaterFilterType {\r\n      FILTRATION_DIATOMACEOUSEARTH,\r\n      FILTRATION_SAND,\r\n      PURIFICATION_DEIONIZING,\r\n      PURIFICATION_REVERSEOSMOSIS,\r\n      SOFTENING_ZEOLITE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_BreechingInletType {\r\n      FOURWAY,\r\n      TWOWAY,\r\n      OTHER,\r\n      USERDEFINED,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_BreechingInletCouplingType {\r\n      INSTANTANEOUS_FEMALE,\r\n      INSTANTANEOUS_MALE,\r\n      OTHER,\r\n      USERDEFINED,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_FireHydrantType {\r\n      DRYBARREL,\r\n      WETBARREL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_HoseReelType {\r\n      RACK,\r\n      REEL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_HoseReelMountingType {\r\n      CABINET_RECESSED,\r\n      CABINET_SEMIRECESSED,\r\n      SURFACE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_HoseNozzleType {\r\n      FOG,\r\n      STRAIGHTSTREAM,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SprinklerType {\r\n      CEILING,\r\n      CONCEALED,\r\n      CUTOFF,\r\n      PENDANT,\r\n      RECESSEDPENDANT,\r\n      SIDEWALL,\r\n      UPRIGHT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SprinklerActivation {\r\n      BULB,\r\n      FUSIBLESOLDER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SprinklerResponse {\r\n      QUICK,\r\n      STANDARD,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SprinklerBulbLiquidColour {\r\n      BLUE,\r\n      GREEN,\r\n      MAUVE,\r\n      ORANGE,\r\n      RED,\r\n      YELLOW,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FittingJunctionType {\r\n      CROSS,\r\n      TEE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PressureGaugeType {\r\n      DIAL,\r\n      DIGITAL,\r\n      MANOMETER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ThermometerType {\r\n      DIAL,\r\n      DIGITAL,\r\n      STEM,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FlowMeterPurpose {\r\n      MASTER,\r\n      SUBMASTER,\r\n      SUBMETER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_MeterReadOutType {\r\n      DIAL,\r\n      DIGITAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_GasType {\r\n      COMMERCIALBUTANE,\r\n      COMMERCIALPROPANE,\r\n      LIQUEFIEDPETROLEUMGAS,\r\n      NATURALGAS,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_WaterMeterType {\r\n      COMPOUND,\r\n      INFERENTIAL,\r\n      PISTON,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_BackflowPreventerType {\r\n      ANTISIPHONVALVE,\r\n      ATMOSPHERICVACUUMBREAKER,\r\n      DOUBLECHECKBACKFLOWPREVENTER,\r\n      NONE,\r\n      PRESSUREVACUUMBREAKER,\r\n      REDUCEDPRESSUREBACKFLOWPREVENTER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_StrataAssemblyPurpose {\r\n      DEPOSIT,\r\n      ENVIRONMENTAL,\r\n      FEEDSTOCK,\r\n      GEOLOGICAL,\r\n      GEOTHERMAL,\r\n      HYDROCARBON,\r\n      HYDROGEOLOGICAL,\r\n      MINERAL,\r\n      PEDOLOGICAL,\r\n      SITE_INVESTIGATION,\r\n      STORAGE,\r\n      NOTKNOWN,\r\n      USERDEFINED,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_HeatExchangerArrangement {\r\n      COUNTERFLOW,\r\n      CROSSFLOW,\r\n      MULTIPASS,\r\n      PARALLELFLOW,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_HumidifierApplication {\r\n      FIXED,\r\n      PORTABLE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_HumidifierInternalControl {\r\n      MODULATING,\r\n      NONE,\r\n      ONOFF,\r\n      STEPPED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_BumperOrientation {\r\n      OPPOSITETOSTATIONDIRECTION,\r\n      STATIONDIRECTION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SectionType {\r\n      CLOSED,\r\n      OPEN}\r\n\r\n   public enum PEnum_JunctionBoxShapeType {\r\n      RECTANGULAR,\r\n      ROUND,\r\n      SLOT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_JunctionBoxPlacingType {\r\n      CEILING,\r\n      FLOOR,\r\n      WALL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_JunctionBoxMountingType {\r\n      CUT_IN,\r\n      FACENAIL,\r\n      SIDENAIL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DataConnectionType {\r\n      COPPER,\r\n      FIBER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_LampBallastType {\r\n      CONVENTIONAL,\r\n      ELECTRONIC,\r\n      LOWLOSS,\r\n      RESISTOR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_LampCompensationType {\r\n      CAPACITIVE,\r\n      INDUCTIVE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_LightFixtureMountingType {\r\n      CABLESPANNED,\r\n      FREESTANDING,\r\n      POLE_SIDE,\r\n      POLE_TOP,\r\n      RECESSED,\r\n      SURFACE,\r\n      SUSPENDED,\r\n      TRACKMOUNTED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_LightFixturePlacingType {\r\n      CEILING,\r\n      FLOOR,\r\n      FURNITURE,\r\n      POLE,\r\n      WALL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_LightFixtureSecurityLightingType {\r\n      BLUEILLUMINATION,\r\n      EMERGENCYEXITLIGHT,\r\n      SAFETYLIGHT,\r\n      WARNINGLIGHT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SelfTestType {\r\n      CENTRAL,\r\n      LOCAL,\r\n      NONE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_BackupSupplySystemType {\r\n      CENTRALBATTERY,\r\n      LOCALBATTERY,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PictogramEscapeDirectionType {\r\n      DOWNARROW,\r\n      LEFTARROW,\r\n      RIGHTARROW,\r\n      UPARROW,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AddressabilityType {\r\n      IMPLEMENTED,\r\n      NOTIMPLEMENTED,\r\n      UPGRADEABLETO,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_LRMType {\r\n      LRM_ABSOLUTE,\r\n      LRM_INTERPOLATIVE,\r\n      LRM_RELATIVE,\r\n      LRM_USERDEFINED}\r\n\r\n   public enum PEnum_AssetRating {\r\n      HIGH,\r\n      LOW,\r\n      MODERATE,\r\n      VERYHIGH,\r\n      VERYLOW}\r\n\r\n   public enum PEnum_MonitoringType {\r\n      FEEDBACK,\r\n      INSPECTION,\r\n      IOT,\r\n      PPM,\r\n      SENSORS}\r\n\r\n   public enum PEnum_AccidentResponse {\r\n      EMERGENCYINSPECTION,\r\n      EMERGENCYPROCEDURE,\r\n      REACTIVE,\r\n      URGENTINSPECTION,\r\n      URGENTPROCEDURE}\r\n\r\n   public enum PEnum_MarkerType {\r\n      APPROACHING_MARKER,\r\n      CABLE_POST_MARKER,\r\n      COMMUNICATION_MODE_CONVERSION_MARKER,\r\n      EMU_STOP_POSITION_SIGN,\r\n      FOUR_ASPECT_CAB_SIGNAL_CONNECT_SIGN,\r\n      FOUR_ASPECT_CAB_SIGNAL_DISCONNECT_SIGN,\r\n      LEVEL_CONVERSION_SIGN,\r\n      LOCOMOTIVE_STOP_POSITION_SIGN,\r\n      RELAY_STATION_SIGN,\r\n      RESTRICTION_PLACE_SIGN,\r\n      RESTRICTION_PROTECTION_AREA_TERMINAL_SIGN,\r\n      RESTRICTION_SIGN,\r\n      SECTION_SIGNAL_MARKER,\r\n      STOP_SIGN,\r\n      TRACK_CIRCUIT_TUNING_ZONE_SIGN,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_OCSFasteningType {\r\n      EARTHING_FITTING,\r\n      JOINT_FITTING,\r\n      REGISTRATION_FITTING,\r\n      SUPPORT_FITTING,\r\n      SUSPENSION_FITTING,\r\n      TENSIONING_FITTING,\r\n      TERMINATION_FITTING,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TrackFasteningElasticityType {\r\n      ELASTIC_FASTENING,\r\n      RIGID_FASTENING,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SleeperArrangement {\r\n      BETWEENSLEEPERS,\r\n      TWINSLEEPER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_MechanicalStressType {\r\n      MECHANICAL_COMPRESSION,\r\n      MECHANICAL_TRACTION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CatenaryStayType {\r\n      DOUBLE_STAY,\r\n      SINGLE_STAY,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TransmissionType {\r\n      FIBER,\r\n      RADIO,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TransmittedSignal {\r\n      CDMA,\r\n      GSM,\r\n      LTE,\r\n      TD_SCDMA,\r\n      WCDMA,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_MasterUnitType {\r\n      ANALOG,\r\n      DIGITAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_UnitConnectionType {\r\n      CHAIN,\r\n      MIXED,\r\n      RING,\r\n      STAR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_MooringDeviceType {\r\n      CLEAT,\r\n      DOUBLEBUTT,\r\n      HORN,\r\n      KIDNEY,\r\n      PILLAR,\r\n      RING,\r\n      SINGLEBUTT,\r\n      THEAD}\r\n\r\n   public enum PEnum_AnchorageType {\r\n      CASTIN,\r\n      DRILLEDANDFIXED,\r\n      THROUGHBOLTED}\r\n\r\n   public enum PEnum_ControllerInterfaceType {\r\n      EARTHQUAKERELAYINTERFACE,\r\n      FOREIGNOBJECTRELAYINTERFACE,\r\n      RS_422,\r\n      RS_485,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_OpticalSplitterType {\r\n      MULTIMODE,\r\n      SINGLEMODE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_BuildingThermalExposure {\r\n      HEAVY,\r\n      LIGHT,\r\n      MEDIUM,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PackingCareType {\r\n      FRAGILE,\r\n      HANDLEWITHCARE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PermeableCoveringOperationEnum {\r\n      GRILL,\r\n      LOUVER,\r\n      SCREEN,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_WindowPanelPositionEnum {\r\n      BOTTOM,\r\n      LEFT,\r\n      MIDDLE,\r\n      RIGHT,\r\n      TOP,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ComplementaryWorks {\r\n      DISPERSING_WELLS,\r\n      LIFTING_WATER_WELLS,\r\n      TRANSVERSAL_WATER_REMOVAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_ProjectType {\r\n      MODIFICATION,\r\n      NEWBUILD,\r\n      OPERATIONMAINTENANCE,\r\n      RENOVATION,\r\n      REPAIR}\r\n\r\n   public enum PEnum_MaintenanceType {\r\n      CONDITIONBASED,\r\n      CORRECTIVE,\r\n      PLANNEDCORRECTIVE,\r\n      SCHEDULED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PriorityType {\r\n      HIGH,\r\n      LOW,\r\n      MEDIUM,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PropertyAgreementType {\r\n      ASSIGNMENT,\r\n      LEASE,\r\n      TENANT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_VoltageLevels {\r\n      U1000,\r\n      U230,\r\n      U400,\r\n      U440,\r\n      U525,\r\n      U690,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PoleUsage {\r\n      _1P,\r\n      _1PN,\r\n      _2P,\r\n      _3P,\r\n      _3PN,\r\n      _4P,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TrippingCurveType {\r\n      LOWER,\r\n      UPPER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AdjustmentValueType {\r\n      LIST,\r\n      RANGE}\r\n\r\n   public enum PEnum_ElectroMagneticTrippingUnitType {\r\n      OL,\r\n      TMP_BM,\r\n      TMP_MP,\r\n      TMP_SC,\r\n      TMP_STD,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ElectronicTrippingUnitType {\r\n      EP_BM,\r\n      EP_MP,\r\n      EP_SC,\r\n      EP_STD,\r\n      EP_TIMEDELAYED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TrippingUnitReleaseCurrent {\r\n      _10 = 10,\r\n      _100 = 100,\r\n      _1000 = 1000,\r\n      _30 = 30,\r\n      _300 = 300,\r\n      _500 = 500,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ThermalTrippingUnitType {\r\n      DIAZED,\r\n      MINIZED,\r\n      NEOZED,\r\n      NH_FUSE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_EarthFailureDeviceType {\r\n      STANDARD,\r\n      TIMEDELAYED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FuseDisconnectorType {\r\n      ENGINEPROTECTIONDEVICE,\r\n      FUSEDSWITCH,\r\n      HRC,\r\n      OVERLOADPROTECTIONDEVICE,\r\n      SWITCHDISCONNECTORFUSE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SparkGapType {\r\n      AIRSPARKGAP,\r\n      GASFILLEDSPARKGAP,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_VaristorType {\r\n      METALOXIDE,\r\n      ZINCOXIDE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PumpBaseType {\r\n      BASE,\r\n      FRAME,\r\n      NONE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PumpDriveConnectionType {\r\n      BELTDRIVE,\r\n      COUPLING,\r\n      DIRECTDRIVE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CurveShapeEnum {\r\n      EXTERNAL,\r\n      INTERNAL}\r\n\r\n   public enum PEnum_GuardRailConnection {\r\n      FISHPLATE,\r\n      NONE,\r\n      WELD,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_GuardRailType {\r\n      GUARDRAILANDSPOTSLEEPERS,\r\n      GUARDRAILSONLY,\r\n      SPOTSLEEPERSONLY,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_RailDeliveryState {\r\n      HEATTREATMENT,\r\n      HOTROLLING,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_RailCondition {\r\n      NEWRAIL,\r\n      REGENERATEDRAIL,\r\n      REUSEDRAIL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DrillOnRail {\r\n      BOTHENDS,\r\n      NONE,\r\n      ONEEND,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_RailElementaryLength {\r\n      _100M,\r\n      _108M,\r\n      _120M,\r\n      _12M,\r\n      _144M,\r\n      _18M,\r\n      _24M,\r\n      _25M,\r\n      _27M,\r\n      _30M,\r\n      _36M,\r\n      _400M,\r\n      _48M,\r\n      _54M,\r\n      _60M,\r\n      _6M,\r\n      _72M,\r\n      _75M,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_RailwayBaliseType {\r\n      ACTIVEBALISE,\r\n      PASSIVEBALISE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TrainCategory {\r\n      FREIGHT,\r\n      PASSENGER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SignalIndicatorType {\r\n      DEPARTUREINDICATOR,\r\n      DEPARTUREROUTEINDICATOR,\r\n      DERAILINDICATOR,\r\n      ROLLINGSTOCKSTOPINDICATOR,\r\n      ROUTEINDICATOR,\r\n      SHUNTINGINDICATOR,\r\n      SWITCHINDICATOR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_RailwaySignalType {\r\n      APPROACHSIGNAL,\r\n      BLOCKSIGNAL,\r\n      DISTANTSIGNAL,\r\n      HOMESIGNAL,\r\n      HUMPAUXILIARYSIGANL,\r\n      HUMPSIGNAL,\r\n      LEVELCROSSINGSIGNAL,\r\n      OBSTRUCTIONSIGNAL,\r\n      REPEATINGSIGNAL,\r\n      SHUNTINGSIGNAL,\r\n      STARTINGSIGNAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TrackSupportingStructure {\r\n      BRIDGE,\r\n      CONCRETE,\r\n      ONSPECIALFOUNDATION,\r\n      PAVEMENT,\r\n      SUBGRADELAYER,\r\n      TRANSITIONSECTION,\r\n      TUNNEL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ReinforcementBarType {\r\n      RING,\r\n      SPIRAL,\r\n      OTHER,\r\n      USERDEFINED,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_ReinforcementBarAllocationType {\r\n      ALTERNATE,\r\n      DOUBLE,\r\n      SINGLE,\r\n      OTHER,\r\n      USERDEFINED,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_RiskType {\r\n      ASBESTOSEFFECTS,\r\n      ASPHIXIATION,\r\n      BUSINESS,\r\n      BUSINESSISSUES,\r\n      CHEMICALEFFECTS,\r\n      COMMERICALISSUES,\r\n      CONFINEMENT,\r\n      CRUSHING,\r\n      DROWNINGANDFLOODING,\r\n      ELECTRICSHOCK,\r\n      ENVIRONMENTALISSUES,\r\n      EVENT,\r\n      FALL,\r\n      FALLEDGE,\r\n      FALLFRAGILEMATERIAL,\r\n      FALLSCAFFOLD,\r\n      FALL_LADDER,\r\n      FIRE_EXPLOSION,\r\n      HANDLING,\r\n      HAZARD,\r\n      HAZARDOUSDUST,\r\n      HEALTHANDSAFETY,\r\n      HEALTHISSUE,\r\n      INSURANCE,\r\n      INSURANCE_ISSUES,\r\n      LEADEFFECTS,\r\n      MACHINERYGUARDING,\r\n      MATERIALEFFECTS,\r\n      MATERIALSHANDLING,\r\n      MECHANICALEFFECTS,\r\n      MECHANICAL_LIFTING,\r\n      MOBILE_ELEVATEDWORKPLATFORM,\r\n      NOISE_EFFECTS,\r\n      OPERATIONALISSUES,\r\n      OTHERISSUES,\r\n      OVERTURINGPLANT,\r\n      PUBLICPROTECTIONISSUES,\r\n      SAFETYISSUE,\r\n      SILICADUST,\r\n      SLIPTRIP,\r\n      SOCIALISSUES,\r\n      STRUCK,\r\n      STRUCKFALLINFOBJECT,\r\n      STRUCKVEHICLE,\r\n      TOOLUSAGE,\r\n      TRAPPED,\r\n      UNINTENDEDCOLLAPSE,\r\n      VIBRATION,\r\n      WELFAREISSUE,\r\n      WOODDUST,\r\n      WORKINGOVERHEAD,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_RiskRating {\r\n      CONSIDERABLE,\r\n      CRITICAL,\r\n      HIGH,\r\n      INSIGNIFICANT,\r\n      LOW,\r\n      MODERATE,\r\n      SOME,\r\n      VERYHIGH,\r\n      VERYLOW,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_BathType {\r\n      DOMESTIC,\r\n      FOOT,\r\n      PLUNGE,\r\n      POOL,\r\n      SITZ,\r\n      SPA,\r\n      TREATMENT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SanitaryMounting {\r\n      BACKTOWALL,\r\n      COUNTERTOP,\r\n      PEDESTAL,\r\n      WALLHUNG,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CisternHeight {\r\n      HIGHLEVEL,\r\n      LOWLEVEL,\r\n      NONE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FlushType {\r\n      LEVER,\r\n      PULL,\r\n      PUSH,\r\n      SENSOR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FountainType {\r\n      DRINKINGWATER,\r\n      EYEWASH,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ShowerType {\r\n      DRENCH,\r\n      INDIVIDUAL,\r\n      TUNNEL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SinkType {\r\n      BELFAST,\r\n      BUCKET,\r\n      CLEANERS,\r\n      COMBINATION_DOUBLE,\r\n      COMBINATION_LEFT,\r\n      COMBINATION_RIGHT,\r\n      DRIP,\r\n      LABORATORY,\r\n      LONDON,\r\n      PLASTER,\r\n      POT,\r\n      RINSING,\r\n      SHELF,\r\n      VEGETABLEPREPARATION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ToiletType {\r\n      BEDPANWASHER,\r\n      CHEMICAL,\r\n      CLOSECOUPLED,\r\n      LOOSECOUPLED,\r\n      SLOPHOPPER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ToiletPanType {\r\n      SIPHONIC,\r\n      SQUAT,\r\n      WASHDOWN,\r\n      WASHOUT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_UrinalType {\r\n      BOWL,\r\n      SLAB,\r\n      STALL,\r\n      TROUGH,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_WashHandBasinType {\r\n      DENTALCUSPIDOR,\r\n      HANDRINSE,\r\n      HOSPITAL,\r\n      TIPUP,\r\n      WASHFOUNTAIN,\r\n      WASHINGTROUGH,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SectioningDeviceType {\r\n      DIFFERENT_POWER_SUPPLY_SEPARATION,\r\n      PHASE_SEPARATION,\r\n      SAME_FEEDING_SECTION_SEPARATION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_DataCollectionType {\r\n      AUTOMATICANDCONTINUOUS,\r\n      MANUALANDSINGLE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_EarthquakeSensorType {\r\n      _2DIRECTION,\r\n      _3DIRECTION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ForeignObjectDetectionSensorType {\r\n      DUALPOWERNETWORK,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_MovementSensingType {\r\n      PHOTOELECTRICCELL,\r\n      PRESSUREPAD,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_RainSensorType {\r\n      MICROWAVE,\r\n      PIEZOELECTRIC,\r\n      TIPPINGBUCKET,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ImageShootingMode {\r\n      AUTOMATIC,\r\n      MANUAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SnowSensorType {\r\n      LASERIRRADIATION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TemperatureSensorType {\r\n      HIGHLIMIT,\r\n      LOWLIMIT,\r\n      OPERATINGTEMPERATURE,\r\n      OUTSIDETEMPERATURE,\r\n      ROOMTEMPERATURE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_WindSensorType {\r\n      CUP,\r\n      HOTWIRE,\r\n      LASERDOPPLER,\r\n      PLATE,\r\n      SONIC,\r\n      TUBE,\r\n      WINDMILL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ElementShading {\r\n      FIXED,\r\n      MOVABLE,\r\n      OVERHANG,\r\n      SIDEFIN,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SoilCompositeFractions {\r\n      BOULDERS,\r\n      BOULDERS_WITH_COBBLES,\r\n      BOULDERS_WITH_FINER_SOILS,\r\n      CLAY,\r\n      CLAYEY_SILT,\r\n      COBBLES,\r\n      COBBLES_WITH_BOULDERS,\r\n      COBBLES_WITH_FINER_SOILS,\r\n      FILL,\r\n      GRAVEL,\r\n      GRAVELLY_SAND,\r\n      GRAVEL_WITH_CLAY_OR_SILT,\r\n      GRAVEL_WITH_COBBLES,\r\n      ORGANIC_CLAY,\r\n      ORGANIC_SILT,\r\n      SAND,\r\n      SANDY_CLAYEY_SILT,\r\n      SANDY_GRAVEL,\r\n      SANDY_GRAVELLY_CLAY,\r\n      SANDY_GRAVELLY_SILT,\r\n      SANDY_GRAVEL_WITH_COBBLES,\r\n      SANDY_PEAT,\r\n      SANDY_SILT,\r\n      SAND_WITH_CLAY_AND_SILT,\r\n      SILT,\r\n      SILTY_CLAY,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SoundScale {\r\n      DBA,\r\n      DBB,\r\n      DBC,\r\n      NC,\r\n      NR}\r\n\r\n   public enum PEnum_SpaceHeaterPlacementType {\r\n      BASEBOARD,\r\n      SUSPENDED,\r\n      TOWELWARMER,\r\n      WALL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SpaceHeaterTemperatureClassification {\r\n      HIGHTEMPERATURE,\r\n      LOWTEMPERATURE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SpaceHeaterHeatTransferDimension {\r\n      PATH,\r\n      POINT,\r\n      SURFACE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_HeatTransferMedium {\r\n      STEAM,\r\n      WATER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SpaceHeaterConvectorType {\r\n      FORCED,\r\n      NATURAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SpaceHeaterRadiatorType {\r\n      FINNEDTUBE,\r\n      PANEL,\r\n      SECTIONAL,\r\n      TUBULAR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SideType {\r\n      BOTH,\r\n      LEFT,\r\n      RIGHT}\r\n\r\n   public enum PEnum_TransitionSuperelevationType {\r\n      LINEAR}\r\n\r\n   public enum PEnum_SwitchFunctionType {\r\n      DOUBLETHROWSWITCH,\r\n      INTERMEDIATESWITCH,\r\n      ONOFFSWITCH,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ContactorType {\r\n      CAPACITORSWITCHING,\r\n      LOWCURRENT,\r\n      MAGNETICLATCHING,\r\n      MECHANICALLATCHING,\r\n      MODULAR,\r\n      REVERSING,\r\n      STANDARD,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SwitchingDeviceDimmerSwitchType {\r\n      ROCKER,\r\n      SELECTOR,\r\n      TWIST,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SwitchingDeviceEmergencyStopType {\r\n      MUSHROOM,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SwitchingDeviceKeypadType {\r\n      BUTTONS,\r\n      TOUCHSCREEN,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SwitchingDeviceMomentarySwitchType {\r\n      BUTTON,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SwitchUsage {\r\n      EMERGENCY,\r\n      GUARD,\r\n      LIMIT,\r\n      START,\r\n      STOP,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SwitchActivation {\r\n      ACTUATOR,\r\n      FOOT,\r\n      HAND,\r\n      PROXIMITY,\r\n      SOUND,\r\n      TWOHAND,\r\n      WIRE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_StarterType {\r\n      AUTOTRANSFORMER,\r\n      DIRECTONLINE,\r\n      FREQUENCY,\r\n      MANUAL,\r\n      NSTEP,\r\n      RHEOSTATIC,\r\n      STARDELTA,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SwitchDisconnectorType {\r\n      CENTERBREAK,\r\n      DIVIDEDSUPPORT,\r\n      DOUBLEBREAK,\r\n      EARTHINGSWITCH,\r\n      ISOLATOR,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_LoadDisconnectionType {\r\n      OFFLOAD,\r\n      ONLOAD,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SwitchingDeviceToggleSwitchType {\r\n      BREAKGLASS,\r\n      CHANGEOVER,\r\n      KEYOPERATED,\r\n      MANUALPULL,\r\n      PULLCORD,\r\n      PUSHBUTTON,\r\n      ROCKER,\r\n      SELECTOR,\r\n      TWIST,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FurniturePanelType {\r\n      ACOUSTICAL,\r\n      DOOR,\r\n      ENDS,\r\n      GLAZED,\r\n      HORZ_SEG,\r\n      MONOLITHIC,\r\n      OPEN,\r\n      SCREEN,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TankComposition {\r\n      COMPLEX,\r\n      ELEMENT,\r\n      PARTIAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TankAccessType {\r\n      LOOSECOVER,\r\n      MANHOLE,\r\n      NONE,\r\n      SECUREDCOVER,\r\n      SECUREDCOVERWITHMANHOLE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TankStorageType {\r\n      FUEL,\r\n      ICE,\r\n      OIL,\r\n      POTABLEWATER,\r\n      RAINWATER,\r\n      WASTEWATER,\r\n      WATER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TankPatternType {\r\n      HORIZONTALCYLINDER,\r\n      RECTANGULAR,\r\n      VERTICALCYLINDER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_EndShapeType {\r\n      CONCAVECONVEX,\r\n      CONCAVEFLAT,\r\n      CONVEXCONVEX,\r\n      FLATCONVEX,\r\n      FLATFLAT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CableFunctionType {\r\n      POWERSUPPLY,\r\n      TELECOMMUNICATION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CableArmourType {\r\n      DIELECTRIC,\r\n      METALLIC,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PaymentMethod {\r\n      CARD,\r\n      CASH,\r\n      E_PAYMENT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TicketVendingMachineType {\r\n      TICKETREDEMPTIONMACHINE,\r\n      TICKETREFUNDINGMACHINE,\r\n      TICKETVENDINGMACHINE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_VendingMachineUserInterface {\r\n      MOUSECHOOSETYPE,\r\n      TOUCHSCREEN,\r\n      TOUCH_TONE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ToleranceBasis {\r\n      APPEARANCE,\r\n      ASSEMBLY,\r\n      DEFLECTION,\r\n      EXPANSION,\r\n      FUNCTIONALITY,\r\n      SETTLEMENT,\r\n      STRUCTURAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_UnderSleeperPadStiffness {\r\n      MEDIUM,\r\n      SOFT,\r\n      STIFF,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_InstalledCondition {\r\n      NEW,\r\n      REGENERATED,\r\n      REUSED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SleeperType {\r\n      COMPOSITESLEEPER,\r\n      CONCRETESLEEPER,\r\n      INSULATEDSTEELSLEEPER,\r\n      MONOBLOCKCONCRETESLEEPER,\r\n      NOTINSULATEDSTEELSLEEPER,\r\n      TWOBLOCKCONCRETESLEEPER,\r\n      WOODENSLEEPER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_PowerSupplyMode {\r\n      AC,\r\n      DC,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ElectrificationType {\r\n      AC,\r\n      DC,\r\n      NON_ELECTRIFIED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_SecondaryCurrentType {\r\n      AC,\r\n      DC,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TransformerVectorGroup {\r\n      DD0,\r\n      DD6,\r\n      DY11,\r\n      DY5,\r\n      DZ0,\r\n      DZ6,\r\n      YD11,\r\n      YD5,\r\n      YY0,\r\n      YY6,\r\n      YZ11,\r\n      YZ5,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_UncertaintyBasis {\r\n      ASSESSMENT,\r\n      ESTIMATE,\r\n      INTERPRETATION,\r\n      MEASUREMENT,\r\n      OBSERVATION,\r\n      NOTKNOWN,\r\n      USERDEFINED,\r\n      NOTDEFINED}\r\n\r\n   public enum PEnum_UnitaryControlElementApplication {\r\n      LIFTARRIVALGONG,\r\n      LIFTCARDIRECTIONLANTERN,\r\n      LIFTFIRESYSTEMSPORT,\r\n      LIFTHALLLANTERN,\r\n      LIFTPOSITIONINDICATOR,\r\n      LIFTVOICEANNOUNCER,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirHandlerConstruction {\r\n      CONSTRUCTEDONSITE,\r\n      MANUFACTUREDITEM,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_AirHandlerFanCoilArrangement {\r\n      BLOWTHROUGH,\r\n      DRAWTHROUGH,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ValvePattern {\r\n      ANGLED_2_PORT,\r\n      CROSSOVER_4_PORT,\r\n      SINGLEPORT,\r\n      STRAIGHT_2_PORT,\r\n      STRAIGHT_3_PORT,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ValveOperation {\r\n      DROPWEIGHT,\r\n      FLOAT,\r\n      HYDRAULIC,\r\n      LEVER,\r\n      LOCKSHIELD,\r\n      MOTORIZED,\r\n      PNEUMATIC,\r\n      SOLENOID,\r\n      SPRING,\r\n      THERMOSTATIC,\r\n      WHEEL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_ValveMechanism {\r\n      BALL,\r\n      BUTTERFLY,\r\n      CONFIGUREDGATE,\r\n      GLAND,\r\n      GLOBE,\r\n      LUBRICATEDPLUG,\r\n      NEEDLE,\r\n      PARALLELSLIDE,\r\n      PLUG,\r\n      WEDGEGATE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FaucetType {\r\n      BIB,\r\n      DIVERTER,\r\n      DIVIDEDFLOWCOMBINATION,\r\n      GLOBE,\r\n      PILLAR,\r\n      SINGLEOUTLETCOMBINATION,\r\n      SPRAY,\r\n      SPRAYMIXING,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FaucetOperation {\r\n      CERAMICDISC,\r\n      LEVERHANDLE,\r\n      NONCONCUSSIVESELFCLOSING,\r\n      QUARTERTURN,\r\n      QUICKACTION,\r\n      SCREWDOWN,\r\n      SELFCLOSING,\r\n      TIMEDSELFCLOSING,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_FaucetFunction {\r\n      COLD,\r\n      HOT,\r\n      MIXED,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_IsolatingPurpose {\r\n      LANDING,\r\n      LANDINGWITHPRESSUREREGULATION,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_MixingValveControl {\r\n      MANUAL,\r\n      PREDEFINED,\r\n      THERMOSTATIC,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_TrapType {\r\n      NONE,\r\n      P_TRAP,\r\n      Q_TRAP,\r\n      S_TRAP,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_InletPatternType {\r\n      _1 = 1,\r\n      _12 = 12,\r\n      _123 = 123,\r\n      _1234 = 1234,\r\n      _124 = 124,\r\n      _13 = 13,\r\n      _134 = 134,\r\n      _14 = 14,\r\n      _2 = 2,\r\n      _23 = 23,\r\n      _234 = 234,\r\n      _24 = 24,\r\n      _3 = 3,\r\n      _34 = 34,\r\n      _4 = 4,\r\n      NONE}\r\n\r\n   public enum PEnum_GullyType {\r\n      BACKINLET,\r\n      VERTICAL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_BackInletPatternType {\r\n      _1 = 1,\r\n      _12 = 12,\r\n      _123 = 123,\r\n      _1234 = 1234,\r\n      _124 = 124,\r\n      _13 = 13,\r\n      _134 = 134,\r\n      _14 = 14,\r\n      _2 = 2,\r\n      _23 = 23,\r\n      _234 = 234,\r\n      _24 = 24,\r\n      _3 = 3,\r\n      _34 = 34,\r\n      _4 = 4,\r\n      NONE}\r\n\r\n   public enum PEnum_TransitionWidthType {\r\n      CONST,\r\n      LINEAR}\r\n\r\n   public enum PEnum_WindowPanelOperationEnum {\r\n      BOTTOMHUNG,\r\n      FIXEDCASEMENT,\r\n      OTHEROPERATION,\r\n      PIVOTHORIZONTAL,\r\n      PIVOTVERTICAL,\r\n      REMOVABLECASEMENT,\r\n      SIDEHUNGLEFTHAND,\r\n      SIDEHUNGRIGHTHAND,\r\n      SLIDINGHORIZONTAL,\r\n      SLIDINGVERTICAL,\r\n      TILTANDTURNLEFTHAND,\r\n      TILTANDTURNRIGHTHAND,\r\n      TOPHUNG,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n\r\n   public enum PEnum_CommunicationStandard {\r\n      ETHERNET,\r\n      STM_1,\r\n      STM_16,\r\n      STM_256,\r\n      STM_4,\r\n      STM_64,\r\n      USB,\r\n      XDSL,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET}\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/PreDefinedPropertySetDescription.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet\n{\n   /// <summary>\n   /// A description mapping of a group of Revit parameters to an predefined properties.\n   /// </summary>\n   /// <remarks>\n   /// The mapping includes: the name of the IFC property set, the entity type this property to which this set applies,\n   /// and an array of property set entries.  A property set description is valid for only one entity type.\n   /// </remarks>\n   public class PreDefinedPropertySetDescription : Description\n   {\n      /// <summary>\n      /// The entries stored in this predefined property set description.\n      /// </summary>\n      IList<PreDefinedPropertySetEntry> m_Entries = new List<PreDefinedPropertySetEntry>();\n\n\n      /// <summary>\n      /// Add entry to this predefined property set description.\n      /// </summary>\n      public void AddEntry(PreDefinedPropertySetEntry entry)\n      {\n         //if the PreDefinedPropertySetDescription name and PreDefinedPropertySetEntry name are in the dictionary, \n         Tuple<string, string> key = new Tuple<string, string>(this.Name, entry.PropertyName);\n         if (ExporterCacheManager.PropertyMapCache.ContainsKey(key))\n         {\n            //replace the PreDefinedPropertySetEntry.RevitParameterName by the value in the cache.\n            entry.SetRevitParameterName(ExporterCacheManager.PropertyMapCache[key]);\n         }\n\n         entry.SetRevitBuiltInParameter(RevitBuiltInParameterMapper.GetRevitBuiltInParameter(key.Item1, key.Item2));\n         entry.UpdateEntry();\n         m_Entries.Add(entry);\n      }\n\n      /// <summary>\n      /// Creates attributes for predefined property.\n      /// </summary>\n      /// <param name=\"element\">The base element.</param>\n      /// <returns>A set attributes for predefined property.</returns>\n      public IList<(string name, PropertyValueType type, IList<IFCData> data)> ProcessEntries(IFCFile file, Element element)\n      {\n         IList<(string name, PropertyValueType type, IList<IFCData> data)> createdAttributes = null;\n\n         foreach (PreDefinedPropertySetEntry entry in m_Entries)\n         {\n            IList<IFCData> data = entry.ProcessEntry(file, element);\n\n            if (data == null && ExporterCacheManager.ExportOptionsCache.PropertySetOptions.ExportMaterialPsets)\n                  data = MaterialBuiltInParameterUtil.CreatePredefinedDataIfBuiltIn(Name, entry.PropertyName, entry.PropertyType, element);\n\n            if (data == null)\n               continue;\n\n            if (createdAttributes == null)\n               createdAttributes = new List<(string, PropertyValueType, IList<IFCData>)>();\n\n            createdAttributes.Add((entry.PropertyName, entry.PropertyValueType, data));\n         }\n\n         return createdAttributes;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/PreDefinedPropertySetEntry.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet\n{\n   /// <summary>\n   /// Represents a mapping from a Revit parameter to an IFC predefined property.\n   /// </summary>\n   public class PreDefinedPropertySetEntry : Entry<PreDefinedPropertySetEntryMap>\n   {\n      /// <summary>\n      /// The type of the IFC predefined property set entry. Default is label.\n      /// </summary>\n      public PropertyType PropertyType { get; set; } = PropertyType.Label;\n\n      /// <summary>\n      /// The value type of the IFC predefined property set entry.\n      /// </summary>\n      public PropertyValueType PropertyValueType { get; set; } = PropertyValueType.SingleValue;\n\n      /// <summary>\n      /// The type of the Enum that will validate the value for an enumeration.\n      /// </summary>\n      public Type PropertyEnumerationType { get; set; } = null;\n      \n      /// <summary>\n      /// Constructs a PreDefinedPropertySetEntry object.\n      /// </summary>\n      /// <param name=\"revitParameterName\">\n      /// Revit parameter name.\n      /// </param>\n      public PreDefinedPropertySetEntry(string revitParameterName, string compatibleParamName = null)\n          : base(revitParameterName, compatibleParamName)\n      {\n      }\n\n      public PreDefinedPropertySetEntry(PropertyType propertyType, string revitParameterName)\n          : base(revitParameterName)\n      {\n         PropertyType = propertyType;\n      }\n      public PreDefinedPropertySetEntry(PropertyType propertyType, string propertyName, BuiltInParameter builtInParameter)\n             : base(propertyName, new PreDefinedPropertySetEntryMap(propertyName) { RevitBuiltInParameter = builtInParameter })\n      {\n         PropertyType = propertyType;\n      }\n      public PreDefinedPropertySetEntry(PropertyType propertyType, string propertyName, PropertyCalculator propertyCalculator)\n             : base(propertyName, new PreDefinedPropertySetEntryMap(propertyName) { PropertyCalculator = propertyCalculator })\n      {\n         PropertyType = propertyType;\n      }\n      public PreDefinedPropertySetEntry(PropertyType propertyType, string propertyName, BuiltInParameter builtInParameter, PropertyCalculator propertyCalculator)\n             : base(propertyName, new PreDefinedPropertySetEntryMap(propertyName) { RevitBuiltInParameter = builtInParameter, PropertyCalculator = propertyCalculator })\n      {\n         PropertyType = propertyType;\n      }\n      public PreDefinedPropertySetEntry(PropertyType propertyType, string propertyName, PreDefinedPropertySetEntryMap entry)\n           : base(propertyName, entry)\n      {\n         PropertyType = propertyType;\n      }\n      public PreDefinedPropertySetEntry(PropertyType propertyType, string propertyName, IEnumerable<PreDefinedPropertySetEntryMap> entries)\n           : base(propertyName, entries)\n      {\n         PropertyType = propertyType;\n      }\n\n      /// <summary>\n      /// Process to create predefined property data.\n      /// </summary>\n      /// <param name=\"element\">The element for which this property is created for.</param>\n      /// <returns>The created predefined property data.</returns>\n      public IList<IFCData> ProcessEntry(IFCFile file, Element element)\n      {\n         foreach (PreDefinedPropertySetEntryMap map in Entries)\n         {\n            IList<IFCData> propHnd = map.ProcessEntry(file, element, PropertyType, PropertyValueType, PropertyEnumerationType);\n            if (propHnd != null)\n               return propHnd;\n         }\n\n         return null;\n      }\n\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/PreDefinedPropertySetEntryMap.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Toolkit;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Export.Utility;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet\n{\n   /// <summary>\n   /// Represents a mapping from a Revit parameter to an IFC predefined property.\n   /// </summary>\n   public class PreDefinedPropertySetEntryMap : EntryMap\n   {\n      public PreDefinedPropertySetEntryMap() { }\n\n      /// <summary>\n      /// Constructs a PreDefinedPropertySetEntry object.\n      /// </summary>\n      /// <param name=\"revitParameterName\">\n      /// Revit parameter name.\n      /// </param>\n      public PreDefinedPropertySetEntryMap(string revitParameterName)\n          : base(revitParameterName, null)\n      {\n\n      }\n\n      public PreDefinedPropertySetEntryMap(PropertyCalculator calculator)\n           : base(calculator)\n      {\n\n      }\n      public PreDefinedPropertySetEntryMap(string revitParameterName, BuiltInParameter builtInParameter)\n       : base(revitParameterName, builtInParameter)\n      {\n\n      }\n\n      public IList<IFCData> ProcessEntry(IFCFile file, Element element, PropertyType propertyType, PropertyValueType valueType, Type propertyEnumerationType)\n      {\n         IList<IFCData> data = null;\n         if (element == null)\n            return data;\n\n         if (ParameterNameIsValid)\n            data = CreateDataFromElement(file, element, propertyType, valueType, propertyEnumerationType);\n\n         return data;\n      }\n\n      IList<IFCData> CreateDataFromElement(IFCFile file, Element element, PropertyType propertyType, PropertyValueType valueType, Type propertyEnumerationType)\n      {\n         string localizedRevitParameterName = LocalizedRevitParameterName(ExporterCacheManager.LanguageType);\n         IList<IFCData> data = null;\n\n         if (localizedRevitParameterName != null)\n            data = CreateDataFromElementBase(file, element, localizedRevitParameterName, propertyType, valueType, propertyEnumerationType);\n\n         if (data == null)\n            data = CreateDataFromElementBase(file, element, RevitParameterName, propertyType, valueType, propertyEnumerationType);\n\n         if (data == null && RevitBuiltInParameter != BuiltInParameter.INVALID)\n            data = CreateDataFromElementBase(file, element, LabelUtils.GetLabelFor(RevitBuiltInParameter), propertyType, valueType, propertyEnumerationType);\n\n         if (data == null)\n            data = CreateDataFromElementBase(file, element, CompatibleRevitParameterName, propertyType, valueType, propertyEnumerationType);\n         \n         return data;\n      }\n\n      private static IList<IFCData> CreateDataFromElementBase(IFCFile file, Element element, string revitParamNameToUse, PropertyType propertyType, PropertyValueType valueType, Type propertyEnumerationType)\n      {\n         IList<IFCData> data = null;\n\n         switch (valueType)\n         {\n            case PropertyValueType.ListValue:\n               {\n                  IFCData singleData = null;\n                  int ii = 1;\n                  string currentName = revitParamNameToUse;\n                  while (singleData != null || ii == 1)\n                  {  \n                     currentName = revitParamNameToUse + \"(\" + ii + \")\";\n\n                     singleData = CreateSingleDataFromElementBase(file, element, currentName, propertyType, valueType, propertyEnumerationType);\n\n                     // For the first list item look also for the parameter name without index\n                     if (singleData == null && ii == 1)\n                        singleData = CreateSingleDataFromElementBase(file, element, revitParamNameToUse, propertyType, valueType, propertyEnumerationType);\n\n                     if (singleData != null)\n                     {\n                        if (data == null)\n                           data = new List<IFCData>();\n                        data.Add(singleData);\n                     }\n                     ++ii;\n                  }\n                  break;\n               }\n            case PropertyValueType.SingleValue:\n            case PropertyValueType.EnumeratedValue:\n               {\n                  IFCData singleData = CreateSingleDataFromElementBase(file, element, revitParamNameToUse, propertyType, valueType, propertyEnumerationType);\n                  if (singleData != null)\n                     data = new List<IFCData>() { singleData };\n                  break;\n               }\n            default:\n                  throw new InvalidOperationException(\"Missing predefined property case!\");\n\n         }\n\n         return data;\n      }\n\n      private static IFCData CreateSingleDataFromElementBase(IFCFile file, Element element, string revitParamNameToUse, PropertyType propertyType, PropertyValueType valueType, Type propertyEnumerationType)\n      {\n         IFCData singleData = null;\n\n         switch (propertyType)\n         {\n            case PropertyType.ThermodynamicTemperature:\n               {\n                  singleData = IFCDataUtil.CreateThermodynamicTemperatureMeasureFromElement(element, revitParamNameToUse);\n                  break;\n               }\n            case PropertyType.Boolean:\n               {\n                  singleData = IFCDataUtil.CreateBooleanFromElement(element, revitParamNameToUse);\n                  break;\n               }\n            case PropertyType.DynamicViscosity:\n               {\n                  singleData = IFCDataUtil.CreateDynamicViscosityMeasureFromElement(element, revitParamNameToUse);\n                  break;\n               }\n            case PropertyType.HeatingValue:\n               {\n                  singleData = IFCDataUtil.CreateHeatingValueMeasureFromElement(element, revitParamNameToUse);\n                  break;\n               }\n            case PropertyType.IonConcentration:\n               {\n                  singleData = IFCDataUtil.CreateIonConcentrationMeasureFromElement(element, revitParamNameToUse);\n                  break;\n               }\n            case PropertyType.MoistureDiffusivity:\n               {\n                  singleData = IFCDataUtil.CreateMoistureDiffusivityMeasureFromElement(element, revitParamNameToUse);\n                  break;\n               }\n            case PropertyType.IsothermalMoistureCapacity:\n               {\n                  singleData = IFCDataUtil.CreateIsothermalMoistureCapacityMeasureFromElement(element, revitParamNameToUse);\n                  break;\n               }\n            case PropertyType.Label:\n               {\n                  singleData = IFCDataUtil.CreateLabelFromElement(element, revitParamNameToUse, valueType, propertyEnumerationType);\n                  break;\n               }\n            case PropertyType.MassDensity:\n               {\n                  singleData = IFCDataUtil.CreateMassDensityMeasureFromElement(element, revitParamNameToUse);\n                  break;\n               }\n            case PropertyType.ModulusOfElasticity:\n               {\n                  singleData = IFCDataUtil.CreateModulusOfElasticityMeasureFromElement(element, revitParamNameToUse);\n                  break;\n               }\n            case PropertyType.PositiveLength:\n               {\n                  singleData = IFCDataUtil.CreatePositiveLengthMeasureFromElement(element, revitParamNameToUse);\n                  break;\n               }\n            case PropertyType.Ratio:\n            case PropertyType.NormalisedRatio:\n            case PropertyType.PositiveRatio:\n               {\n                  singleData = IFCDataUtil.CreateRatioMeasureFromElement(element, revitParamNameToUse, propertyType);\n                  break;\n               }\n            case PropertyType.Pressure:\n               {\n                  singleData = IFCDataUtil.CreatePressureMeasureFromElement(element, revitParamNameToUse);\n                  break;\n               }\n            case PropertyType.SpecificHeatCapacity:\n               {\n                  singleData = IFCDataUtil.CreateSpecificHeatCapacityMeasureFromElement(element, revitParamNameToUse);\n                  break;\n               }\n            case PropertyType.Text:\n               {\n                  singleData = IFCDataUtil.CreateTextFromElement(element, revitParamNameToUse);\n                  break;\n               }\n            case PropertyType.ThermalConductivity:\n               {\n                  singleData = IFCDataUtil.CreateThermalConductivityMeasureFromElement(element, revitParamNameToUse);\n                  break;\n               }\n            case PropertyType.ThermalExpansionCoefficient:\n               {\n                  singleData = IFCDataUtil.CreateThermalExpansionCoefficientMeasureFromElement(element, revitParamNameToUse);\n                  break;\n               }\n            case PropertyType.VaporPermeability:\n               {\n                  singleData = IFCDataUtil.CreateVaporPermeabilityMeasureFromElement(element, revitParamNameToUse);\n                  break;\n               }\n            case PropertyType.IfcRelaxation:\n               {\n                  IFCData relaxationValue = IFCDataUtil.CreateRatioMeasureFromElement(element, revitParamNameToUse + \".RelaxationValue\", PropertyType.NormalisedRatio);\n                  IFCData initialStress = IFCDataUtil.CreateRatioMeasureFromElement(element, revitParamNameToUse + \".InitialStress\", PropertyType.NormalisedRatio);\n\n                  if (relaxationValue?.PrimitiveType == IFCDataPrimitiveType.Double && initialStress?.PrimitiveType == IFCDataPrimitiveType.Double)\n                  {\n                     IFCAnyHandle relaxationHnd = IFCInstanceExporter.CreateRelaxation(file, relaxationValue.AsDouble(), initialStress.AsDouble());\n                     if (!IFCAnyHandleUtil.IsNullOrHasNoValue(relaxationHnd))\n                        singleData = IFCData.CreateIFCAnyHandle(relaxationHnd);\n                  }\n                  break;\n               }\n         }\n         return singleData;\n      }\n\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/PropertyCalculator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing Autodesk.Revit;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Structure;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet\r\n{\r\n    /// <summary>\r\n    /// A utility class that execute a calculation to determine the value of special IFC parameters.\r\n    /// </summary>\r\n    abstract public class PropertyCalculator\r\n    {\r\n        /// <summary>\r\n        /// Performs the calculation. \r\n        /// NOTE: the general rule to follow when overriding Calculate method in order of priority:\r\n        ///       1. If it the property is dependent on the object or the geometry, such as dimension of a door, the first priority is to be given to the values provided by Revit\r\n        ///       2. If it does not give any appropriate value, look at the override parameters. It is generally the name of the IFC property, or prefixed with Ifc (for Pset property) or IfcQty (for quantity)\r\n        ///       3. If still does not give the appropriate value, and it has an Extrusion data, calculte the appropriate dimension from the extrusion data\r\n        ///       4. If everything fails, return false\r\n        /// </summary>\r\n        /// <param name=\"exporterIFC\">\r\n        /// The ExporterIFC object.\r\n        /// </param>\r\n        /// <param name=\"extrusionCreationData\">\r\n        /// The IFCExportBodyParams.\r\n        /// </param>\r\n        /// <param name=\"element\">\r\n        /// The element to calculate the value.\r\n        /// </param>\r\n        /// <param name=\"elementType\">\r\n        /// The element type.\r\n        /// </param>\r\n        /// <returns>\r\n        /// True if the operation succeed, false otherwise.\r\n        /// </returns>\r\n        abstract public bool Calculate(ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, \r\n           Element element, ElementType elementType, EntryMap psetOrQtoEntryMap);\r\n\r\n      /// <summary>\r\n      /// If implemented in derived classes, may retrieve parameter data for a specific IFC handle.\r\n      /// Designed to retrieve data for subelement parameter overrides.\r\n      /// By default returns false.\r\n      /// </summary>\r\n      /// <param name=\"element\">\r\n      /// The element to calculate the value.\r\n      /// </param>\r\n      /// <param name=\"handle\">\r\n      /// The IFC handle that may offer parameter overrides.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the operation succeed, false otherwise.\r\n      /// </returns>\r\n      virtual public bool GetParameterFromSubelementCache(Element element, IFCAnyHandle handle)\r\n      {\r\n         return false;\r\n      }\r\n      \r\n      /// <summary>\r\n      /// Determines if the calculator calculates only one value, or multiple.\r\n      /// </summary>\r\n      public virtual bool CalculatesMutipleValues\r\n      {\r\n         get { return false; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines if the calculator allows string values to be cached.\r\n      /// </summary>\r\n      public virtual bool CacheStringValues\r\n      {\r\n         get { return false; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated string value.\r\n      /// </summary>\r\n      /// <exception cref=\"System.NotImplementedException\">\r\n      /// Default method is not implemented.\r\n      /// </exception>\r\n      /// <returns>\r\n      /// The calculated string value.\r\n      /// </returns>\r\n      public virtual string GetStringValue()\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated string values.  Use if CalculatesMutipleValues is true.\r\n      /// </summary>\r\n      /// <returns>The list of strings.</returns>\r\n      public virtual IList<string> GetStringValues()\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated boolean value.\r\n      /// </summary>\r\n      /// <exception cref=\"System.NotImplementedException\">\r\n      /// Default method is not implemented.\r\n      /// </exception>\r\n      /// <returns>\r\n      /// The calculated boolean value.\r\n      /// </returns>\r\n      public virtual bool GetBooleanValue()\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated logical value.\r\n      /// </summary>\r\n      /// <exception cref=\"System.NotImplementedException\">\r\n      /// Default method is not implemented.\r\n      /// </exception>\r\n      /// <returns>\r\n      /// The calculated boolean value.\r\n      /// </returns>\r\n      public virtual IFCLogical GetLogicalValue()\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated double value.\r\n      /// </summary>\r\n      /// <exception cref=\"System.NotImplementedException\">\r\n      /// Default method is not implemented.\r\n      /// </exception>\r\n      /// <returns>\r\n      /// The calculated double value.\r\n      /// </returns>\r\n      public virtual double GetDoubleValue()\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the calculated integer value.\r\n      /// </summary>\r\n      /// <exception cref=\"System.NotImplementedException\">\r\n      /// Default method is not implemented.\r\n      /// </exception>\r\n      /// <returns>\r\n      /// The calculated integer value.\r\n      /// </returns>\r\n      public virtual int GetIntValue()\r\n      {\r\n         throw new NotImplementedException();\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/PropertySetDescription.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet\r\n{\r\n   public class RevitBuiltInParameterMapper\r\n   {\r\n      /// <summary>\r\n      /// This is currently a hardwired list of properties that can be retrieved from Revit\r\n      /// built-in parameters.\r\n      /// </summary>\r\n      static private IDictionary<KeyValuePair<string, string>, BuiltInParameter> m_BuiltInSpecificParameterMapping = null;\r\n\r\n      static private IDictionary<string, BuiltInParameter> m_BuiltInGeneralParameterMapping = null;\r\n\r\n      static private void AddEntry(string propertyName, BuiltInParameter revitParameter)\r\n      {\r\n         m_BuiltInGeneralParameterMapping.Add(propertyName, revitParameter);\r\n      }\r\n\r\n      static private void AddEntry(string psetName, string propertyName, BuiltInParameter revitParameter)\r\n      {\r\n         m_BuiltInSpecificParameterMapping.Add(new KeyValuePair<string, string>(psetName, propertyName), revitParameter);\r\n      }\r\n\r\n      static private void Initialize()\r\n      {\r\n         m_BuiltInSpecificParameterMapping = new Dictionary<KeyValuePair<string, string>, BuiltInParameter>();\r\n         AddEntry(\"Pset_CoveringCommon\", \"TotalThickness\", BuiltInParameter.CEILING_THICKNESS);\r\n         AddEntry(\"Pset_LightFixtureTypeCommon\", \"TotalWattage\", BuiltInParameter.LIGHTING_FIXTURE_WATTAGE);\r\n         AddEntry(\"Pset_ManufacturerTypeInformation\", \"Manufacturer\", BuiltInParameter.ALL_MODEL_MANUFACTURER);\r\n         AddEntry(\"Pset_RoofCommon\", \"TotalArea\", BuiltInParameter.HOST_AREA_COMPUTED);\r\n         AddEntry(\"Qto_SpaceBaseQuantities\", \"GrossPerimeter\", BuiltInParameter.ROOM_PERIMETER);\r\n\r\n         m_BuiltInGeneralParameterMapping = new Dictionary<string, BuiltInParameter>();\r\n         AddEntry(\"CeilingCovering\", BuiltInParameter.ROOM_FINISH_CEILING);\r\n         AddEntry(\"FireRating\", BuiltInParameter.FIRE_RATING);\r\n         AddEntry(\"FloorCovering\", BuiltInParameter.ROOM_FINISH_FLOOR);\r\n         AddEntry(\"Span\", BuiltInParameter.INSTANCE_LENGTH_PARAM);\r\n         AddEntry(\"ThermalTransmittance\", BuiltInParameter.ANALYTICAL_THERMAL_TRANSMITTANCE);\r\n         AddEntry(\"WallCovering\", BuiltInParameter.ROOM_FINISH_WALL);\r\n      }\r\n\r\n      static private IDictionary<KeyValuePair<string, string>, BuiltInParameter> BuiltInSpecificParameterMapping\r\n      {\r\n         get\r\n         {\r\n            if (m_BuiltInSpecificParameterMapping == null)\r\n               Initialize();\r\n            return m_BuiltInSpecificParameterMapping;\r\n         }\r\n      }\r\n\r\n      static private IDictionary<string, BuiltInParameter> BuiltInGeneralParameterMapping\r\n      {\r\n         get\r\n         {\r\n            if (m_BuiltInGeneralParameterMapping == null)\r\n               Initialize();\r\n            return m_BuiltInGeneralParameterMapping;\r\n         }\r\n      }\r\n\r\n      static public BuiltInParameter GetRevitBuiltInParameter(string psetName, string propertyName)\r\n      {\r\n         BuiltInParameter builtInParameter = BuiltInParameter.INVALID;\r\n         if (BuiltInGeneralParameterMapping.TryGetValue(propertyName, out builtInParameter))\r\n            return builtInParameter;\r\n         if (BuiltInSpecificParameterMapping.TryGetValue(new KeyValuePair<string, string>(psetName, propertyName),\r\n               out builtInParameter))\r\n            return builtInParameter;\r\n         return BuiltInParameter.INVALID;\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// A description mapping of a group of Revit parameters and/or calculated values to an IfcPropertySet.\r\n   /// </summary>\r\n   /// <remarks>\r\n   /// The mapping includes: the name of the IFC property set, the entity type this property to which this set applies,\r\n   /// and an array of property set entries.  A property set description is valid for only one entity type.\r\n   /// </remarks>\r\n   public class PropertySetDescription : Description\r\n   {\r\n      /// <summary>\r\n      /// The entries stored in this property set description.\r\n      /// </summary>\r\n      IList<PropertySetEntry> m_Entries = new List<PropertySetEntry>();\r\n\r\n      /// <summary>\r\n      /// The entries stored in this property set description.\r\n      /// </summary>\r\n      public IList<PropertySetEntry> Entries { get { return m_Entries; } }\r\n\r\n      /// <summary>\r\n      /// Determines whether properties from the element's type should be added to the instance.\r\n      /// </summary>\r\n      public bool AddTypePropertiesToInstance { get; set; }\r\n\r\n      /// <summary>\r\n      /// Determines whether this property set description is user-defined.\r\n      /// </summary>\r\n      public bool IsUserDefined { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// The entries stored in this property set description.\r\n      /// </summary>\r\n      public void AddEntry(PropertySetEntry entry)\r\n      {\r\n         PropertySetupType propertyMappingSetup = IsUserDefined ?\r\n            PropertySetupType.UserDefinedPropertySets : PropertySetupType.IfcCommonPropertySets;\r\n\r\n         IFCPropertyMappingInfo mappedRevitParameter = GetMappedRevitParameterForDescription(propertyMappingSetup, entry.PropertyName);\r\n\r\n         if (mappedRevitParameter != null)\r\n         {\r\n            entry.IsExcluded = !mappedRevitParameter.ExportFlag;\r\n            \r\n            ElementId parameterId = mappedRevitParameter.RevitPropertyId;\r\n            string parameterName = mappedRevitParameter.RevitPropertyName;\r\n            if (ParameterUtils.IsBuiltInParameter(parameterId))\r\n            {\r\n               entry.SetRevitBuiltInParameter((BuiltInParameter)parameterId.Value);\r\n            }\r\n            else if (!string.IsNullOrEmpty(parameterName))\r\n            {\r\n               entry.SetRevitParameterName(parameterName);\r\n            }\r\n         }\r\n         else\r\n         {\r\n            //if the PropertySetDescription name and PropertySetEntry name are in the dictionary, \r\n            Tuple<string, string> key = new Tuple<string, string>(this.Name, entry.PropertyName);\r\n            if (ExporterCacheManager.PropertyMapCache.ContainsKey(key))\r\n            {\r\n               //replace the PropertySetEntry.RevitParameterName by the value in the cache.\r\n               entry.SetRevitParameterName(ExporterCacheManager.PropertyMapCache[key]);\r\n            }\r\n\r\n            entry.SetRevitBuiltInParameter(RevitBuiltInParameterMapper.GetRevitBuiltInParameter(key.Item1, key.Item2));\r\n         }\r\n         entry.UpdateEntry();\r\n         m_Entries.Add(entry);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Remove an entry from the property map.\r\n      /// </summary>\r\n      /// <param name=\"entry\">The entry to remove.</param>\r\n      public bool RemoveEntry(PropertySetEntry entry)\r\n      {\r\n         return Entries.Remove(entry);\r\n      }\r\n\r\n      private string UsablePropertyName(IFCAnyHandle propHnd, IDictionary<string, IFCAnyHandle> propertiesByName)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\r\n            return null;\r\n\r\n         string currPropertyName = IFCAnyHandleUtil.GetStringAttribute(propHnd, \"Name\");\r\n         if (string.IsNullOrWhiteSpace(currPropertyName))\r\n            return null;   // This shouldn't be posssible.\r\n\r\n         // Don't override if the new value is empty.\r\n         if (propertiesByName.ContainsKey(currPropertyName))\r\n         {\r\n            try\r\n            {\r\n               // Only IfcSimplePropertyValue has the NominalValue attribute; any other type of property will throw.\r\n               IFCData currPropertyValue = propHnd.GetAttribute(\"NominalValue\");\r\n               if (currPropertyValue.PrimitiveType == IFCDataPrimitiveType.String && string.IsNullOrWhiteSpace(currPropertyValue.AsString()))\r\n                  return null;\r\n            }\r\n            catch\r\n            {\r\n               // Not an IfcSimplePropertyValue - no need to verify.\r\n            }\r\n         }\r\n\r\n         return currPropertyName;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates handles for the properties.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC class.</param>\r\n      /// <param name=\"ifcParams\">The extrusion creation data, used to get extra parameter information.</param>\r\n      /// <param name=\"elementOrConnectorToUse\">The base element or connector.</param>\r\n      /// <param name=\"elemTypeToUse\">The base element type.</param>\r\n      /// <param name=\"handle\">The handle for which we process the entries.</param>\r\n      /// <returns>A set of property handles.</returns>\r\n      public ISet<IFCAnyHandle> ProcessEntries(IFCFile file, ExporterIFC exporterIFC, IFCExportBodyParams ifcParams, \r\n         ElementOrConnector elementOrConnectorToUse, ElementType elemTypeToUse, IFCAnyHandle handle)\r\n      {\r\n         // We need to ensure that we don't have the same property name twice in the same property set.\r\n         // By convention, we will keep the last property with the same name.  This allows for a user-defined\r\n         // property set to look at both the type and the instance for a property value, if the type and instance properties\r\n         // have different names.\r\n         IDictionary<string, IFCAnyHandle> propertiesByName = new SortedDictionary<string, IFCAnyHandle>();\r\n\r\n         // Get the property from Type for this element if the pset is for schedule or \r\n         // if element doesn't have an associated type (e.g. IfcRoof)\r\n         bool lookInType = (ExporterUtil.ExportingHostModel() &&\r\n            ExporterCacheManager.ViewScheduleElementCache.ContainsKey(ViewScheduleId)) || \r\n            (AddTypePropertiesToInstance && \r\n            IFCAnyHandleUtil.IsTypeOneOf(handle, PropertyUtil.EntitiesWithNoRelatedType));\r\n\r\n         foreach (PropertySetEntry entry in m_Entries)\r\n         {\r\n            try\r\n            {\r\n               IFCAnyHandle propHnd = entry.ProcessEntry(file, exporterIFC, Name, ifcParams, elementOrConnectorToUse, elemTypeToUse, handle, lookInType, AddTypePropertiesToInstance);\r\n\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd) && ExporterCacheManager.ExportOptionsCache.PropertySetOptions.ExportMaterialPsets)\r\n                  propHnd = MaterialBuiltInParameterUtil.CreateMaterialPropertyIfBuiltIn(Name, entry.PropertyName, entry.PropertyType, elementOrConnectorToUse?.Element, file);\r\n\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\r\n                  continue;\r\n\r\n               string currPropertyName = UsablePropertyName(propHnd, propertiesByName);\r\n               if (currPropertyName != null)\r\n                  propertiesByName[currPropertyName] = propHnd;\r\n            }\r\n            catch(Exception) { }\r\n         }\r\n\r\n         ISet<IFCAnyHandle> props = new HashSet<IFCAnyHandle>(propertiesByName.Values);\r\n         return props;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/PropertySetEntry.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing static Revit.IFC.Export.Utility.ParameterUtil;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet\r\n{\r\n   /// <summary>\r\n   /// Represents the type of the container for a property.\r\n   /// </summary>\r\n   public enum PropertyValueType\r\n   {\r\n      /// <summary>\r\n      /// A single property (IfcPropertySingleValue)\r\n      /// </summary>\r\n      SingleValue,\r\n      /// <summary>\r\n      /// An enumerated property (IfcPropertyEnumeratedValue)\r\n      /// </summary>\r\n      EnumeratedValue,\r\n      /// <summary>\r\n      /// A list property (IfcPropertyListValue)\r\n      /// </summary>\r\n      ListValue,\r\n      /// <summary>\r\n      /// A reference property (IfcPropertyReferenceValue)\r\n      /// </summary>\r\n      ReferenceValue,\r\n      /// <summary>\r\n      /// A Table property (IfcPropertyTableValue)\r\n      /// </summary>\r\n      TableValue,\r\n      /// <summary>\r\n      /// A Bounded Value property (IfcPropertyBoundedValue)\r\n      /// </summary>\r\n      BoundedValue\r\n   }\r\n\r\n   /// <summary>\r\n   /// Represents the type of a property.\r\n   /// </summary>\r\n   public enum PropertyType\r\n   {\r\n      /// <summary>\r\n      /// A label (string value), up to 255 characters in length.\r\n      /// </summary>\r\n      Label,\r\n      /// <summary>\r\n      /// A text (string value) of unlimited length.\r\n      /// </summary>\r\n      Text,\r\n      /// <summary>\r\n      /// A boolean value.\r\n      /// </summary>\r\n      Boolean,\r\n      /// <summary>\r\n      /// A real number value.\r\n      /// </summary>\r\n      Integer,\r\n      /// <summary>\r\n      /// An integer number value.\r\n      /// </summary>\r\n      Real,\r\n      /// <summary>\r\n      /// A positive length value.\r\n      /// </summary>\r\n      PositiveLength,\r\n      /// <summary>\r\n      /// A positive ratio value.\r\n      /// </summary>\r\n      PositiveRatio,\r\n      /// <summary>\r\n      /// An angular value.\r\n      /// </summary>\r\n      PlaneAngle,\r\n      /// <summary>\r\n      /// An area value.\r\n      /// </summary>\r\n      Area,\r\n      /// <summary>\r\n      /// An identifier value.\r\n      /// </summary>\r\n      Identifier,\r\n      /// <summary>\r\n      /// A count value.\r\n      /// </summary>\r\n      Count,\r\n      /// <summary>\r\n      /// A thermodynamic temperature value.\r\n      /// </summary>\r\n      ThermodynamicTemperature,\r\n      /// <summary>\r\n      /// A length value.\r\n      /// </summary>\r\n      Length,\r\n      /// <summary>\r\n      /// A ratio value.\r\n      /// </summary>\r\n      Ratio,\r\n      /// <summary>\r\n      /// A thermal transmittance (coefficient of heat transfer) value.\r\n      /// </summary>\r\n      ThermalTransmittance,\r\n      /// <summary>\r\n      /// A volumetric flow rate value.\r\n      /// </summary>\r\n      VolumetricFlowRate,\r\n      /// <summary>\r\n      /// A logical value: true, false, or unknown.\r\n      /// </summary>\r\n      Logical,\r\n      /// <summary>\r\n      /// A power value.\r\n      /// </summary>\r\n      Power,\r\n      /// <summary>\r\n      /// An IfcClassificationReference value.\r\n      /// </summary>\r\n      ClassificationReference,\r\n      /// <summary>\r\n      /// A Frequency value.\r\n      /// </summary>\r\n      Frequency,\r\n      /// <summary>\r\n      /// A positive angular value.\r\n      /// </summary>\r\n      PositivePlaneAngle,\r\n      /// <summary>\r\n      /// An electric current value\r\n      /// </summary>\r\n      ElectricCurrent,\r\n      /// <summary>\r\n      /// An electric voltage value\r\n      /// </summary>\r\n      ElectricVoltage,\r\n      /// <summary>\r\n      /// Volume\r\n      /// </summary>\r\n      Volume,\r\n      /// <summary>\r\n      /// Luminous Flux\r\n      /// </summary>\r\n      LuminousFlux,\r\n      /// <summary>\r\n      /// Force\r\n      /// </summary>\r\n      Force,\r\n      /// <summary>\r\n      /// Pressure\r\n      /// </summary>\r\n      Pressure,\r\n      /// <summary>\r\n      /// Color temperature, distinguished from thermodyamic temperature\r\n      /// </summary>\r\n      ColorTemperature,\r\n      /// <summary>\r\n      /// Currency\r\n      /// </summary>\r\n      Currency,\r\n      /// <summary>\r\n      /// Electrical Efficacy\r\n      /// </summary>\r\n      ElectricalEfficacy,\r\n      /// <summary>\r\n      /// Luminous Intensity\r\n      /// </summary>\r\n      LuminousIntensity,\r\n      /// <summary>\r\n      /// Illuminance\r\n      /// </summary>\r\n      Illuminance,\r\n      /// <summary>\r\n      /// Normalised Ratio\r\n      /// </summary>\r\n      NormalisedRatio,\r\n      /// <summary>\r\n      /// Linear Velocity\r\n      /// </summary>\r\n      LinearVelocity,\r\n      /// <summary>\r\n      /// Mass Density\r\n      /// </summary>\r\n      MassDensity,\r\n      IfcPerson,\r\n      IfcTimeSeries,\r\n      Torque,\r\n      IfcMaterial,\r\n      Mass,\r\n      SoundPower,\r\n      Time,\r\n      LocalTime,\r\n      Energy,\r\n      LinearForce,\r\n      PlanarForce,\r\n      Monetary,\r\n      ThermalConductivity,\r\n      IfcMaterialDefinition,\r\n      RotationalFrequency,\r\n      AreaDensity,\r\n      Date,\r\n      IfcExternalReference,\r\n      MassFlowRate,\r\n      ElectricResistance,\r\n      MassPerLength,\r\n      IfcCalendarDate,\r\n      IfcOrganization,\r\n      SpecificHeatCapacity,\r\n      MolecularWeight,\r\n      HeatingValue,\r\n      IsothermalMoistureCapacity,\r\n      VaporPermeability,\r\n      MoistureDiffusivity,\r\n      DynamicViscosity,\r\n      ModulusOfElasticity,\r\n      ThermalExpansionCoefficient,\r\n      IonConcentration,\r\n      PH,\r\n      DateTime,\r\n      IfcDateAndTime,\r\n      IfcLocalTime,\r\n      IfcClassificationReference,\r\n      NonNegativeLength,\r\n      MomentOfInertia,\r\n      WarpingConstant,\r\n      SectionModulus,\r\n      Duration,\r\n      ElectricConductance,\r\n      TemperatureRateOfChange,\r\n      RadioActivity,\r\n      SoundPressure,\r\n      HeatFluxDensity,\r\n      ComplexNumber,\r\n      ThermalResistance,\r\n      Numeric,\r\n      ElectricCapacitance,\r\n      URIReference,\r\n      Acceleration,\r\n      SoundPowerLevel,\r\n      IntegerCountRate,\r\n      IfcDocumentReference,\r\n      ElectricCharge,\r\n      Inductance,\r\n      AngularVelocity,\r\n      IfcCostValue,\r\n      IfcRelaxation,\r\n      FrictionLoss,\r\n      LinearMoment,\r\n      LinearStiffness,\r\n      CostPerArea,\r\n      ApparentPowerDensity,\r\n      CostRateEnergy,\r\n      CostRatePower,\r\n      Efficacy,\r\n      Luminance,\r\n      ElectricalPowerDensity,\r\n      PowerPerLength,\r\n      ElectricalResistivity,\r\n      HeatCapacityPerArea,\r\n      ThermalGradientCoefficientForMoistureCapacity,\r\n      ThermalMass,\r\n      AirFlowDensity,\r\n      AirFlowDividedByCoolingLoad,\r\n      AirFlowDividedByVolume,\r\n      AreaDividedByCoolingLoad,\r\n      AreaDividedByHeatingLoad,\r\n      CoolingLoadDividedByArea,\r\n      CoolingLoadDividedByVolume,\r\n      FlowPerPower,\r\n      HvacFriction,\r\n      HeatingLoadDividedByArea,\r\n      HeatingLoadDividedByVolume,\r\n      PowerPerFlow,\r\n      PipingFriction,\r\n      AreaSpringCoefficient,\r\n      LineSpringCoefficient,\r\n      MassPerUnitArea,\r\n      ReinforcementAreaPerUnitLength,\r\n      RotationalLineSpringCoefficient,\r\n      RotationalPointSpringCoefficient,\r\n      UnitWeight\r\n   }\r\n\r\n   /// <summary>\r\n   /// Represents a mapping from a Revit parameter or calculated quantity to an IFC property.\r\n   /// </summary>\r\n   public class PropertySetEntry : Entry<PropertySetEntryMap>\r\n   {\r\n      /// <summary>\r\n      /// The type of the IFC property set entry. Default is label.\r\n      /// </summary>\r\n      public PropertyType PropertyType { get; set; } = PropertyType.Label;\r\n\r\n      /// <summary>\r\n      /// The type of the IFC argument of table property set entry. Use if PropertyValueType is TableValue\r\n      /// </summary>\r\n      public PropertyType PropertyArgumentType { get; set; } = PropertyType.Label;\r\n\r\n      /// <summary>\r\n      /// The value type of the IFC property set entry.\r\n      /// </summary>\r\n      public PropertyValueType PropertyValueType { get; set; } = PropertyValueType.SingleValue;\r\n\r\n      /// <summary>\r\n      /// The type of the Enum that will validate the value for an enumeration.\r\n      /// </summary>\r\n      public Type PropertyEnumerationType { get; set; } = null;\r\n\r\n      IFCAnyHandle DefaultProperty { get; set; } = null;\r\n\r\n      public IList<TableCellCombinedParameterData> CombinedParameterData { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Constructs a PropertySetEntry object.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      public PropertySetEntry(string revitParameterName, string compatibleParamName = null)\r\n          : base(revitParameterName, compatibleParamName)\r\n      {\r\n      }\r\n\r\n      public PropertySetEntry(PropertyType propertyType, string revitParameterName)\r\n          : base(revitParameterName)\r\n      {\r\n         PropertyType = propertyType;\r\n      }\r\n      public PropertySetEntry(PropertyType propertyType, string propertyName, BuiltInParameter builtInParameter)\r\n             : base(propertyName, new PropertySetEntryMap(propertyName) { RevitBuiltInParameter = builtInParameter })\r\n      {\r\n         PropertyType = propertyType;\r\n      }\r\n      public PropertySetEntry(PropertyType propertyType, string propertyName, PropertyCalculator propertyCalculator)\r\n             : base(propertyName, new PropertySetEntryMap(propertyName) { PropertyCalculator = propertyCalculator })\r\n      {\r\n         PropertyType = propertyType;\r\n      }\r\n      public PropertySetEntry(PropertyType propertyType, string propertyName, BuiltInParameter builtInParameter, PropertyCalculator propertyCalculator)\r\n             : base(propertyName, new PropertySetEntryMap(propertyName) { RevitBuiltInParameter = builtInParameter, PropertyCalculator = propertyCalculator })\r\n      {\r\n         PropertyType = propertyType;\r\n      }\r\n      public PropertySetEntry(PropertyType propertyType, string propertyName, PropertySetEntryMap entry)\r\n           : base(propertyName, entry)\r\n      {\r\n         PropertyType = propertyType;\r\n      }\r\n      public PropertySetEntry(PropertyType propertyType, string propertyName, IEnumerable<PropertySetEntryMap> entries)\r\n           : base(propertyName, entries)\r\n      {\r\n         PropertyType = propertyType;\r\n      }\r\n\r\n      private string GetPartialParameterValueOnePass(Element element, ElementId paramId)\r\n      {\r\n         if (element == null)\r\n         {\r\n            return null;\r\n         }\r\n\r\n         Parameter parameter = null;\r\n         if (ParameterUtils.IsBuiltInParameter(paramId))\r\n         {\r\n            parameter = element.get_Parameter((BuiltInParameter)paramId.Value);\r\n         }\r\n         else\r\n         {\r\n            ParameterElement parameterElem = element.Document.GetElement(paramId) as ParameterElement;\r\n            if (parameterElem != null)\r\n            {\r\n               parameter = element.get_Parameter(parameterElem.GetDefinition());\r\n            }\r\n         }\r\n\r\n         return parameter?.AsValueString();\r\n      }\r\n    \r\n      private string GetPartialParameterValueById(Element element, ProjectInfo projectInformation, ElementId paramId)\r\n      {\r\n         // We need to look in (up to) 3 places: the Element, the ElementType, and ProjectInformation, in that order.\r\n         string value = GetPartialParameterValueOnePass(element, paramId);\r\n         if (value == null && element != null && !(element is ElementType))\r\n         {\r\n            Element elementType = element.Document.GetElement(element.GetTypeId());\r\n            value = GetPartialParameterValueOnePass(elementType, paramId);\r\n         }\r\n\r\n         if (value == null && projectInformation != null)\r\n         {\r\n            value = GetPartialParameterValueOnePass(projectInformation, paramId);\r\n         }\r\n\r\n         return value ?? string.Empty;\r\n      }\r\n\r\n      private IFCAnyHandle CreateTextPropertyFromCombinedParameterData(IFCFile file, Element element)\r\n      {\r\n         string parameterString = string.Empty;\r\n         ProjectInfo projectInfo = element?.Document?.ProjectInformation;\r\n         foreach (var parameterData in CombinedParameterData)\r\n         {\r\n            string currentPart = GetPartialParameterValueById(element, projectInfo, parameterData.ParamId);\r\n            if (string.IsNullOrEmpty(currentPart))\r\n            {\r\n               continue;\r\n            }\r\n            parameterString += parameterData.Prefix;\r\n            parameterString += currentPart;\r\n            parameterString += (parameterData.Suffix + parameterData.Separator);\r\n         }\r\n\r\n         PropertyDescription propertyDescription = new PropertyDescription(PropertyName);\r\n         return PropertyUtil.CreateTextPropertyFromCache(file, propertyDescription, parameterString, PropertyValueType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Process to create element or connector property.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"owningPsetName\">Name of Property Set this entry belongs to .</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"elementOrConnector\">The element or connector of which this property is created for.</param>\r\n      /// <param name=\"elementType\">The element type of which this property is created for.</param>\r\n      /// <param name=\"handle\">The handle for which this property is created for.</param>\r\n      /// <param name=\"lookInType\">True if it's appropriate to look for value in element type.</param>\r\n      /// <param name=\"addTypePropertiesToInstance\">Indicates whether properties from the element's type should be added to the instance.</param>\r\n      /// <returns>The created property handle.</returns>\r\n      public IFCAnyHandle ProcessEntry(IFCFile file, ExporterIFC exporterIFC, string owningPsetName, \r\n         IFCExportBodyParams extrusionCreationData, ElementOrConnector elementOrConnector,\r\n         ElementType elementType, IFCAnyHandle handle, bool lookInType = false, bool addTypePropertiesToInstance = false)\r\n      {\r\n         // if CombinedParameterData, then we have to recreate the parameter value, since there is no\r\n         // API for this.\r\n         if (CombinedParameterData != null)\r\n         {\r\n            if (elementOrConnector.Element == null)\r\n            {\r\n               // We don't support connectors for combined parameters.\r\n               return null;\r\n            }\r\n            return CreateTextPropertyFromCombinedParameterData(file, elementOrConnector.Element);\r\n         }\r\n\r\n         // Otherwise, do standard processing.\r\n         foreach (PropertySetEntryMap map in Entries)\r\n         {\r\n            IFCAnyHandle propHnd = map.ProcessEntry(file, exporterIFC, owningPsetName,\r\n               extrusionCreationData, elementOrConnector, elementType, handle, PropertyType,\r\n               PropertyArgumentType, PropertyValueType, PropertyEnumerationType, PropertyName,\r\n               lookInType, addTypePropertiesToInstance);\r\n            if (propHnd != null)\r\n               return propHnd;\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type given by propertyType.\r\n      /// </summary>\r\n      /// <param name=\"propetyType\">The property type.</param>\r\n      /// <param name=\"revitParameterName\">Revit parameter name.</param>\r\n      /// <returns>The PropertySetEntry.</returns>\r\n      public static PropertySetEntry CreateGenericEntry(PropertyType propertyType, string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = propertyType;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type real.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The PropertySetEntry.\r\n      /// </returns>\r\n      public static PropertySetEntry CreateReal(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.Real;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type Power.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">Revit parameter name.</param>\r\n      /// <returns>The PropertySetEntry.</returns>\r\n      public static PropertySetEntry CreatePower(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.Power;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type Frequency.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">Revit parameter name.</param>\r\n      /// <returns>The PropertySetEntry.</returns>\r\n      public static PropertySetEntry CreateFrequency(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.Frequency;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type ElectricalCurrent.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">Revit parameter name.</param>\r\n      /// <returns>The PropertySetEntry.</returns>\r\n      public static PropertySetEntry CreateElectricCurrent(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.ElectricCurrent;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type ElectricalVoltage.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">Revit parameter name.</param>\r\n      /// <returns>The PropertySetEntry.</returns>\r\n      public static PropertySetEntry CreateElectricVoltage(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.ElectricVoltage;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type Illuminance.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">Revit parameter name.</param>\r\n      /// <returns>The PropertySetEntry.</returns>\r\n      public static PropertySetEntry CreateIlluminance(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.Illuminance;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type Volume.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">Revit parameter name.</param>\r\n      /// <returns>The PropertySetEntry.</returns>\r\n      public static PropertySetEntry CreateVolume(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.Volume;\r\n         return pse;\r\n      }\r\n      \r\n      /// <summary>\r\n      /// Creates an entry of type VolumetricFlowRate.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">Revit parameter name.</param>\r\n      /// <returns>The PropertySetEntry.</returns>\r\n      public static PropertySetEntry CreateVolumetricFlowRate(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.VolumetricFlowRate;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type ThermodynamicTemperature.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">Revit parameter name.</param>\r\n      /// <returns>The PropertySetEntry.</returns>\r\n      public static PropertySetEntry CreateThermodynamicTemperature(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.ThermodynamicTemperature;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type ThermalTransmittance.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">Revit parameter name.</param>\r\n      /// <returns>The PropertySetEntry.</returns>\r\n      public static PropertySetEntry CreateThermalTransmittance(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.ThermalTransmittance;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type boolean.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The PropertySetEntry.\r\n      /// </returns>\r\n      public static PropertySetEntry CreateBoolean(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.Boolean;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type logical.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The PropertySetEntry.\r\n      /// </returns>\r\n      public static PropertySetEntry CreateLogical(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.Logical;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type label.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The PropertySetEntry.\r\n      /// </returns>\r\n      public static PropertySetEntry CreateLabel(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.Label;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type text.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The PropertySetEntry.\r\n      /// </returns>\r\n      public static PropertySetEntry CreateText(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.Text;\r\n         return pse;\r\n      }\r\n\r\n      public static PropertySetEntry CreateParameterEntry(string propertyName, \r\n         IList<TableCellCombinedParameterData> combinedParameterData)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(propertyName);\r\n         pse.PropertyType = PropertyType.Text;\r\n         pse.CombinedParameterData = combinedParameterData;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type identifier.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The PropertySetEntry.\r\n      /// </returns>\r\n      public static PropertySetEntry CreateIdentifier(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.Identifier;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type integer.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The PropertySetEntry.\r\n      /// </returns>\r\n      public static PropertySetEntry CreateInteger(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.Integer;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type area.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The PropertySetEntry.\r\n      /// </returns>\r\n      public static PropertySetEntry CreateArea(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.Area;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type length.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The PropertySetEntry.\r\n      /// </returns>\r\n      public static PropertySetEntry CreateLength(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.Length;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type positive length.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The PropertySetEntry.\r\n      /// </returns>\r\n      public static PropertySetEntry CreatePositiveLength(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.PositiveLength;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type ratio.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The PropertySetEntry.\r\n      /// </returns>\r\n      public static PropertySetEntry CreateRatio(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.Ratio;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type linear velocity.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The PropertySetEntry.\r\n      /// </returns>\r\n      public static PropertySetEntry CreateLinearVelocity(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.LinearVelocity;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type normalised ratio.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The PropertySetEntry.\r\n      /// </returns>\r\n      public static PropertySetEntry CreateNormalisedRatio(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.NormalisedRatio;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type positive ratio.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The PropertySetEntry.\r\n      /// </returns>\r\n      public static PropertySetEntry CreatePositiveRatio(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(revitParameterName);\r\n         pse.PropertyType = PropertyType.PositiveRatio;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type enumerated value.\r\n      /// The type of the enumarated value is also given.\r\n      /// Note that the enumeration list is not supported here.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      /// <param name=\"propertyType\">\r\n      /// The property type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The PropertySetEntry.\r\n      /// </returns>\r\n      public static PropertySetEntry CreateEnumeratedValue(string revitParameterName, PropertyType propertyType, Type enumType)\r\n      {\r\n         return CreateEnumeratedValue(revitParameterName, propertyType, enumType, new PropertySetEntryMap(revitParameterName));\r\n      }\r\n      public static PropertySetEntry CreateEnumeratedValue(string revitParameterName, PropertyType propertyType, Type enumType, PropertySetEntryMap entryMap)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(propertyType, revitParameterName, entryMap);\r\n         pse.PropertyValueType = PropertyValueType.EnumeratedValue;\r\n         pse.PropertyEnumerationType = enumType;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an external reference to IfcClassificationReference.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">Revit parameter name.</param>\r\n      /// <returns>The PropertySetEntry.</returns>\r\n      public static PropertySetEntry CreateClassificationReference(string revitParameterName)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(PropertyType.ClassificationReference, revitParameterName);\r\n         pse.PropertyValueType = PropertyValueType.ReferenceValue;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry of type list value.\r\n      /// The type of the list value is also given.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">Revit parameter name.</param>\r\n      /// <param name=\"propertyType\">The property type.</param>\r\n      /// <returns>The PropertySetEntry.</returns>\r\n      public static PropertySetEntry CreateListValue(string revitParameterName, PropertyType propertyType, PropertySetEntryMap entry)\r\n      {\r\n         PropertySetEntry pse = new PropertySetEntry(propertyType, revitParameterName, entry);\r\n         pse.PropertyValueType = PropertyValueType.ListValue;\r\n         return pse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an entry for a given parameter.\r\n      /// </summary>\r\n      /// <param name=\"parameter\">Revit parameter.</param>\r\n      /// <returns>The PropertySetEntry.</returns>\r\n      public static PropertySetEntry CreateParameterEntry(Parameter parameter, BuiltInParameter builtInParameter)\r\n      {\r\n         Definition parameterDefinition = parameter.Definition;\r\n         if (parameterDefinition == null)\r\n            return null;\r\n\r\n         PropertyType propertyType = PropertyType.Text;\r\n         switch (parameter.StorageType)\r\n         {\r\n            case StorageType.None:\r\n               return null;\r\n            case StorageType.Integer:\r\n               {\r\n                  // YesNo or actual integer?\r\n                  if (parameterDefinition.GetDataType() == SpecTypeId.Boolean.YesNo)\r\n                     propertyType = PropertyType.Boolean;\r\n                  else if (parameterDefinition.GetDataType().Empty())\r\n                     propertyType = PropertyType.Identifier;\r\n                  else\r\n                     propertyType = PropertyType.Count;\r\n                  break;\r\n               }\r\n            case StorageType.Double:\r\n               {\r\n                  bool assigned = true;\r\n                  ForgeTypeId type = parameterDefinition.GetDataType();\r\n                  if (type == SpecTypeId.Acceleration)\r\n                  {\r\n                     propertyType = PropertyType.Acceleration;\r\n                  }\r\n                  else if (type == SpecTypeId.Angle ||\r\n                     type == SpecTypeId.Rotation ||\r\n                     type == SpecTypeId.RotationAngle)\r\n                  {\r\n                     propertyType = PropertyType.PlaneAngle;\r\n                  }\r\n                  else if (type == SpecTypeId.Area ||\r\n                     type == SpecTypeId.CrossSection ||\r\n                     type == SpecTypeId.ReinforcementArea ||\r\n                     type == SpecTypeId.SectionArea)\r\n                  {\r\n                     propertyType = PropertyType.Area;\r\n                  }\r\n                  else if (type == SpecTypeId.BarDiameter ||\r\n                     type == SpecTypeId.CrackWidth ||\r\n                     type == SpecTypeId.Displacement ||\r\n                     type == SpecTypeId.Distance ||\r\n                     type == SpecTypeId.CableTraySize ||\r\n                     type == SpecTypeId.ConduitSize ||\r\n                     type == SpecTypeId.Length ||\r\n                     type == SpecTypeId.DuctInsulationThickness ||\r\n                     type == SpecTypeId.DuctLiningThickness ||\r\n                     type == SpecTypeId.DuctSize ||\r\n                     type == SpecTypeId.HvacRoughness ||\r\n                     type == SpecTypeId.PipeDimension ||\r\n                     type == SpecTypeId.PipeInsulationThickness ||\r\n                     type == SpecTypeId.PipeSize ||\r\n                     type == SpecTypeId.PipingRoughness ||\r\n                     type == SpecTypeId.ReinforcementCover ||\r\n                     type == SpecTypeId.ReinforcementLength ||\r\n                     type == SpecTypeId.ReinforcementSpacing ||\r\n                     type == SpecTypeId.SectionDimension ||\r\n                     type == SpecTypeId.SectionProperty ||\r\n                     type == SpecTypeId.WireDiameter ||\r\n                     type == SpecTypeId.SurfaceAreaPerUnitLength)\r\n                  {\r\n                     propertyType = PropertyType.Length;\r\n                  }\r\n                  else if (type == SpecTypeId.ColorTemperature)\r\n                  {\r\n                     propertyType = PropertyType.ColorTemperature;\r\n                  }\r\n                  else if (type == SpecTypeId.Currency)\r\n                  {\r\n                     propertyType = PropertyType.Currency;\r\n                  }\r\n                  else if (type == SpecTypeId.Energy ||\r\n                     type == SpecTypeId.HvacEnergy)\r\n                  {\r\n                     propertyType = PropertyType.Energy;\r\n                  }\r\n                  else if (type == SpecTypeId.LuminousIntensity)\r\n                  {\r\n                     propertyType = PropertyType.LuminousIntensity;\r\n                  }\r\n                  else if (type == SpecTypeId.Illuminance)\r\n                  {\r\n                     propertyType = PropertyType.Illuminance;\r\n                  }\r\n                  else if (type == SpecTypeId.ApparentPower ||\r\n                     type == SpecTypeId.ElectricalPower ||\r\n                     type == SpecTypeId.Wattage ||\r\n                     type == SpecTypeId.CoolingLoad ||\r\n                     type == SpecTypeId.HeatGain ||\r\n                     type == SpecTypeId.HeatingLoad ||\r\n                     type == SpecTypeId.HvacPower)\r\n                  {\r\n                     propertyType = PropertyType.Power;\r\n                  }\r\n                  else if (type == SpecTypeId.Current)\r\n                  {\r\n                     propertyType = PropertyType.ElectricCurrent;\r\n                  }\r\n                  else if (type == SpecTypeId.ElectricalPotential)\r\n                  {\r\n                     propertyType = PropertyType.ElectricVoltage;\r\n                  }\r\n                  else if (type == SpecTypeId.ElectricalFrequency ||\r\n                     type == SpecTypeId.StructuralFrequency)\r\n                  {\r\n                     propertyType = PropertyType.Frequency;\r\n                  }\r\n                  else if (type == SpecTypeId.LuminousFlux)\r\n                  {\r\n                     propertyType = PropertyType.LuminousFlux;\r\n                  }\r\n                  else if (type == SpecTypeId.ElectricalTemperature ||\r\n                     type == SpecTypeId.HvacTemperature ||\r\n                     type == SpecTypeId.PipingTemperature)\r\n                  {\r\n                     propertyType = PropertyType.ThermodynamicTemperature;\r\n                  }\r\n                  else if (type == SpecTypeId.HeatTransferCoefficient)\r\n                  {\r\n                     propertyType = PropertyType.ThermalTransmittance;\r\n                  }\r\n                  else if (type == SpecTypeId.Force ||\r\n                     type == SpecTypeId.Weight)\r\n                  {\r\n                     propertyType = PropertyType.Force;\r\n                  }\r\n                  else if (type == SpecTypeId.AirFlow ||\r\n                     type == SpecTypeId.Flow)\r\n                  {\r\n                     propertyType = PropertyType.VolumetricFlowRate;\r\n                  }\r\n                  else if (type == SpecTypeId.HvacPressure ||\r\n                     type == SpecTypeId.PipingPressure ||\r\n                     type == SpecTypeId.Stress)\r\n                  {\r\n                     propertyType = PropertyType.Pressure;\r\n                  }\r\n                  else if (type == SpecTypeId.MassDensity ||\r\n                     type == SpecTypeId.HvacDensity)\r\n                  {\r\n                     propertyType = PropertyType.MassDensity;\r\n                  }\r\n                  else if (type == SpecTypeId.PipingVolume ||\r\n                     type == SpecTypeId.ReinforcementVolume ||\r\n                     type == SpecTypeId.SectionModulus ||\r\n                     type == SpecTypeId.Volume)\r\n                  {\r\n                     propertyType = PropertyType.Volume;\r\n                  }\r\n                  else if (type == SpecTypeId.PipingMassPerTime ||\r\n                     type == SpecTypeId.HvacMassPerTime)\r\n                  {\r\n                     propertyType = PropertyType.MassFlowRate;\r\n                  }\r\n                  else if (type == SpecTypeId.AngularSpeed)\r\n                  {\r\n                     propertyType = PropertyType.RotationalFrequency;\r\n                  }\r\n                  else if (type == SpecTypeId.MassPerUnitArea && !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n                  {\r\n                     propertyType = PropertyType.AreaDensity;\r\n                  }\r\n                  else if (type == SpecTypeId.HvacViscosity ||\r\n                     type == SpecTypeId.PipingViscosity)\r\n                  {\r\n                     propertyType = PropertyType.DynamicViscosity;\r\n                  }\r\n                  else if (type == SpecTypeId.SpecificHeatOfVaporization)\r\n                  {\r\n                     propertyType = PropertyType.HeatingValue;\r\n                  }\r\n                  else if (type == SpecTypeId.PipingDensity)\r\n                  {\r\n                     propertyType = PropertyType.IonConcentration;\r\n                  }\r\n                  else if (type == SpecTypeId.IsothermalMoistureCapacity)\r\n                  {\r\n                     propertyType = PropertyType.IsothermalMoistureCapacity;\r\n                  }\r\n                  else if (type == SpecTypeId.HvacPowerDensity)\r\n                  {\r\n                     propertyType = PropertyType.HeatFluxDensity;\r\n                  }\r\n                  else if (type == SpecTypeId.HvacVelocity ||\r\n                     type == SpecTypeId.PipingVelocity ||\r\n                     type == SpecTypeId.StructuralVelocity ||\r\n                     type == SpecTypeId.Speed)\r\n                  {\r\n                     propertyType = PropertyType.LinearVelocity;\r\n                  }\r\n                  else if (type == SpecTypeId.LinearForce ||\r\n                     type == SpecTypeId.WeightPerUnitLength)\r\n                  {\r\n                     propertyType = PropertyType.LinearForce;\r\n                  }\r\n                  else if (type == SpecTypeId.LinearMoment)\r\n                  {\r\n                     propertyType = PropertyType.LinearMoment;\r\n                  }\r\n                  else if (type == SpecTypeId.Mass ||\r\n                     type == SpecTypeId.PipingMass)\r\n                  {\r\n                     propertyType = PropertyType.Mass;\r\n                  }\r\n                  else if (type == SpecTypeId.MassPerUnitLength ||\r\n                     type == SpecTypeId.PipeMassPerUnitLength)\r\n                  {\r\n                     propertyType = PropertyType.MassPerLength;\r\n                  }\r\n                  else if (type == SpecTypeId.Diffusivity)\r\n                  {\r\n                     propertyType = PropertyType.MoistureDiffusivity;\r\n                  }\r\n                  else if (type == SpecTypeId.Moment)\r\n                  {\r\n                     propertyType = PropertyType.Torque;\r\n                  }\r\n                  else if (type == SpecTypeId.MomentOfInertia)\r\n                  {\r\n                     propertyType = PropertyType.MomentOfInertia;\r\n                  }\r\n                  else if (type == SpecTypeId.AreaForce)\r\n                  {\r\n                     propertyType = PropertyType.PlanarForce;\r\n                  }\r\n                  else if (type == SpecTypeId.SpecificHeat)\r\n                  {\r\n                     propertyType = PropertyType.SpecificHeatCapacity;\r\n                  }\r\n                  else if (type == SpecTypeId.ThermalConductivity)\r\n                  {\r\n                     propertyType = PropertyType.ThermalConductivity;\r\n                  }\r\n                  else if (type == SpecTypeId.ThermalExpansionCoefficient)\r\n                  {\r\n                     propertyType = PropertyType.ThermalExpansionCoefficient;\r\n                  }\r\n                  else if (type == SpecTypeId.ThermalResistance)\r\n                  {\r\n                     propertyType = PropertyType.ThermalResistance;\r\n                  }\r\n                  else if (type == SpecTypeId.Time ||\r\n                     type == SpecTypeId.Period)\r\n                  {\r\n                     propertyType = PropertyType.Time;\r\n                  }\r\n                  else if (type == SpecTypeId.Permeability)\r\n                  {\r\n                     propertyType = PropertyType.VaporPermeability;\r\n                  }\r\n                  else if (type == SpecTypeId.PointSpringCoefficient)\r\n                  {\r\n                     propertyType = PropertyType.LinearStiffness;\r\n                  }\r\n                  else if (type == SpecTypeId.Pulsation)\r\n                  {\r\n                     propertyType = PropertyType.AngularVelocity;\r\n                  }\r\n                  else if (type == SpecTypeId.WarpingConstant)\r\n                  {\r\n                     propertyType = PropertyType.WarpingConstant;\r\n                  }\r\n                  else if (type == SpecTypeId.CostPerArea)\r\n                  {\r\n                     propertyType = PropertyType.CostPerArea;\r\n                  }\r\n                  else if (type == SpecTypeId.ApparentPowerDensity)\r\n                  {\r\n                     propertyType = PropertyType.ApparentPowerDensity;\r\n                  }\r\n                  else if (type == SpecTypeId.CostRateEnergy)\r\n                  {\r\n                     propertyType = PropertyType.CostRateEnergy;\r\n                  }\r\n                  else if (type == SpecTypeId.CostRatePower)\r\n                  {\r\n                     propertyType = PropertyType.CostRatePower;\r\n                  }\r\n                  else if (type == SpecTypeId.Efficacy)\r\n                  {\r\n                     propertyType = PropertyType.ElectricalEfficacy;\r\n                  }\r\n                  else if (type == SpecTypeId.Luminance)\r\n                  {\r\n                     propertyType = PropertyType.Luminance;\r\n                  }\r\n                  else if (type == SpecTypeId.ElectricalPowerDensity)\r\n                  {\r\n                     propertyType = PropertyType.ElectricalPowerDensity;\r\n                  }\r\n                  else if (type == SpecTypeId.PowerPerLength)\r\n                  {\r\n                     propertyType = PropertyType.PowerPerLength;\r\n                  }\r\n                  else if (type == SpecTypeId.ElectricalResistivity)\r\n                  {\r\n                     propertyType = PropertyType.ElectricalResistivity;\r\n                  }\r\n                  else if (type == SpecTypeId.HeatCapacityPerArea)\r\n                  {\r\n                     propertyType = PropertyType.HeatCapacityPerArea;\r\n                  }\r\n                  else if (type == SpecTypeId.ThermalGradientCoefficientForMoistureCapacity)\r\n                  {\r\n                     propertyType = PropertyType.ThermalGradientCoefficientForMoistureCapacity;\r\n                  }\r\n                  else if (type == SpecTypeId.ThermalMass)\r\n                  {\r\n                     propertyType = PropertyType.ThermalMass;\r\n                  }\r\n                  else if (type == SpecTypeId.AirFlowDensity)\r\n                  {\r\n                     propertyType = PropertyType.AirFlowDensity;\r\n                  }\r\n                  else if (type == SpecTypeId.AirFlowDividedByCoolingLoad)\r\n                  {\r\n                     propertyType = PropertyType.AirFlowDividedByCoolingLoad;\r\n                  }\r\n                  else if (type == SpecTypeId.AirFlowDividedByVolume)\r\n                  {\r\n                     propertyType = PropertyType.AirFlowDividedByVolume;\r\n                  }\r\n                  else if (type == SpecTypeId.AreaDividedByCoolingLoad)\r\n                  {\r\n                     propertyType = PropertyType.AreaDividedByCoolingLoad;\r\n                  }\r\n                  else if (type == SpecTypeId.AreaDividedByHeatingLoad)\r\n                  {\r\n                     propertyType = PropertyType.AreaDividedByHeatingLoad;\r\n                  }\r\n                  else if (type == SpecTypeId.CoolingLoadDividedByArea)\r\n                  {\r\n                     propertyType = PropertyType.CoolingLoadDividedByArea;\r\n                  }\r\n                  else if (type == SpecTypeId.CoolingLoadDividedByVolume)\r\n                  {\r\n                     propertyType = PropertyType.CoolingLoadDividedByVolume;\r\n                  }\r\n                  else if (type == SpecTypeId.FlowPerPower)\r\n                  {\r\n                     propertyType = PropertyType.FlowPerPower;\r\n                  }\r\n                  else if (type == SpecTypeId.HvacFriction)\r\n                  {\r\n                     propertyType = PropertyType.FrictionLoss;\r\n                  }\r\n                  else if (type == SpecTypeId.HeatingLoadDividedByArea)\r\n                  {\r\n                     propertyType = PropertyType.HeatingLoadDividedByArea;\r\n                  }\r\n                  else if (type == SpecTypeId.HeatingLoadDividedByVolume)\r\n                  {\r\n                     propertyType = PropertyType.HeatingLoadDividedByVolume;\r\n                  }\r\n                  else if (type == SpecTypeId.PowerPerFlow)\r\n                  {\r\n                     propertyType = PropertyType.PowerPerFlow;\r\n                  }\r\n                  else if (type == SpecTypeId.PipingFriction)\r\n                  {\r\n                     propertyType = PropertyType.PipingFriction;\r\n                  }\r\n                  else if (type == SpecTypeId.AreaSpringCoefficient)\r\n                  {\r\n                     propertyType = PropertyType.AreaSpringCoefficient;\r\n                  }\r\n                  else if (type == SpecTypeId.LineSpringCoefficient)\r\n                  {\r\n                     propertyType = PropertyType.LineSpringCoefficient;\r\n                  }\r\n                  else if (type == SpecTypeId.MassPerUnitArea)\r\n                  {\r\n                     propertyType = PropertyType.MassPerUnitArea;\r\n                  }\r\n                  else if (type == SpecTypeId.ReinforcementAreaPerUnitLength)\r\n                  {\r\n                     propertyType = PropertyType.ReinforcementAreaPerUnitLength;\r\n                  }\r\n                  else if (type == SpecTypeId.RotationalLineSpringCoefficient)\r\n                  {\r\n                     propertyType = PropertyType.RotationalLineSpringCoefficient;\r\n                  }\r\n                  else if (type == SpecTypeId.RotationalPointSpringCoefficient)\r\n                  {\r\n                     propertyType = PropertyType.RotationalPointSpringCoefficient;\r\n                  }\r\n                  else if (type == SpecTypeId.UnitWeight)\r\n                  {\r\n                     propertyType = PropertyType.UnitWeight;\r\n                  }\r\n                  else\r\n                  {\r\n                     assigned = false;\r\n                  }\r\n\r\n                  if (!assigned)\r\n                     propertyType = PropertyType.Real;\r\n                  break;\r\n               }\r\n            case StorageType.String:\r\n               {\r\n                  propertyType = PropertyType.Text;\r\n                  break;\r\n               }\r\n            case StorageType.ElementId:\r\n               {\r\n                  propertyType = PropertyType.Label;\r\n                  break;\r\n               }\r\n         }\r\n\r\n         return new PropertySetEntry(propertyType, parameterDefinition.Name, builtInParameter);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/PropertySetEntryMap.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\nusing static Revit.IFC.Export.Utility.ParameterUtil;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet\r\n{\r\n   /// <summary>\r\n   /// Represents a mapping from a Revit parameter or calculated quantity to an IFC property.\r\n   /// </summary>\r\n   public class PropertySetEntryMap : EntryMap\r\n   {\r\n      public PropertySetEntryMap() { }\r\n      /// <summary>\r\n      /// Constructs a PropertySetEntry object.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      public PropertySetEntryMap(string revitParameterName)\r\n          : base(revitParameterName, null)\r\n      {\r\n\r\n      }\r\n\r\n      public PropertySetEntryMap(PropertyCalculator calculator)\r\n           : base(calculator)\r\n      {\r\n\r\n      }\r\n      public PropertySetEntryMap(string revitParameterName, BuiltInParameter builtInParameter)\r\n       : base(revitParameterName, builtInParameter)\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Process to create element or connector property.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"owningPsetName\">Name of Property Set this entry belongs to.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"elementOrConnector\">The element or connector of which this property is created for.</param>\r\n      /// <param name=\"elementType\">The element type of which this property is created for.</param>\r\n      /// <param name=\"handle\">The handle for which this property is created for.</param>\r\n      /// <param name=\"propertyArgumentType\">The type of argument property (for table).</param>\r\n      /// <param name=\"propertyType\">The type of property.</param>\r\n      /// <param name=\"valueType\">The type of the container for a property.</param>\r\n      /// <param name=\"propertyEnumerationType\">The type of property.</param>\r\n      /// <param name=\"propertyName\">The name of property to create.</param>\r\n      /// <param name=\"lookInType\">True if it's appropriate to look for value in element type.</param>\r\n      /// <param name=\"addTypePropertiesToInstance\">Indicates whether properties from the element's type should be added to the instance.</param>\r\n      /// <returns>The created property handle.</returns>\r\n      public IFCAnyHandle ProcessEntry(IFCFile file, ExporterIFC exporterIFC, string owningPsetName, \r\n         IFCExportBodyParams extrusionCreationData, ElementOrConnector elementOrConnector, \r\n         ElementType elementType, IFCAnyHandle handle, PropertyType propertyType, \r\n         PropertyType propertyArgumentType, PropertyValueType valueType, Type propertyEnumerationType,\r\n         string propertyName, bool lookInType, bool addTypePropertiesToInstance)\r\n      {\r\n         IFCAnyHandle propHnd = null;\r\n\r\n         if (elementOrConnector == null)\r\n            return propHnd;\r\n\r\n         // First try to create property from Element \r\n         if (elementOrConnector.Element != null)\r\n         {\r\n            if (ParameterNameIsValid)\r\n            {\r\n               Element element = elementOrConnector.Element;\r\n               propHnd = CreatePropertyFromElementOrSymbol(file, exporterIFC, owningPsetName, element,\r\n                  elementType, propertyType, propertyArgumentType, valueType, propertyEnumerationType,\r\n                  propertyName, lookInType, addTypePropertiesToInstance);\r\n            }\r\n         }\r\n\r\n         // If unsuccessful - from calculator (element) or description (connector)\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\r\n         {\r\n            propHnd = CreatePropertyFromCalculatorOrDescription(file, exporterIFC, extrusionCreationData, elementOrConnector, elementType, handle,\r\n                  propertyType, valueType, propertyEnumerationType, propertyName);\r\n         }\r\n\r\n         return propHnd;\r\n      }\r\n\r\n      private static IFCData GetPropertyDataFromString(string valueString, PropertyType propertyType)\r\n      {\r\n         IFCData data = null;\r\n\r\n         // Trim unit symbol\r\n         int index = valueString.IndexOf(\" \");\r\n         if (index > 0)\r\n            valueString = valueString.Substring(0, index);\r\n\r\n         switch (propertyType)\r\n         {\r\n            case PropertyType.Area:\r\n               {\r\n                  if (double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsAreaMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.AreaDensity:\r\n               {\r\n                  if (double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsAreaDensityMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.Boolean:\r\n               {\r\n                  if (int.TryParse(valueString, out int value))\r\n                     data = IFCDataUtil.CreateAsBoolean((value != 0));\r\n                  break;\r\n               }\r\n            case PropertyType.ClassificationReference:\r\n               {\r\n                  break;\r\n               }\r\n            case PropertyType.ColorTemperature:\r\n               {\r\n                  if (double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsReal(value);\r\n                  break;\r\n               }\r\n            case PropertyType.Count:\r\n               {\r\n                  if (double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsCountMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.Currency:\r\n               {\r\n                  if (double.TryParse(valueString, out double value))\r\n                  {\r\n                     data = ExporterCacheManager.UnitsCache.ContainsKey(\"CURRENCY\") ?\r\n                        IFCDataUtil.CreateAsMonetaryMeasure(value) : IFCDataUtil.CreateAsReal(value);\r\n                  }\r\n                  break;\r\n               }\r\n            case PropertyType.ElectricalEfficacy:\r\n               {\r\n                  if (double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsReal(value);\r\n                  break;\r\n               }\r\n            case PropertyType.ElectricCurrent:\r\n               {\r\n                  if (double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsElectricCurrentMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.ElectricVoltage:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsElectricVoltageMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.Force:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsForceMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.Frequency:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsFrequencyMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.Identifier:\r\n               {\r\n                  data = IFCDataUtil.CreateAsIdentifier(valueString);\r\n                  break;\r\n               }\r\n            case PropertyType.Integer:\r\n               {\r\n                  if (Int32.TryParse(valueString, out int value))\r\n                     data = IFCDataUtil.CreateAsInteger(value);\r\n                  break;\r\n               }\r\n            case PropertyType.Illuminance:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsIlluminanceMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.HeatFluxDensity:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsHeatFluxDensityMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.Label:\r\n               {\r\n                  data = IFCDataUtil.CreateAsLabel(valueString);\r\n                  break;\r\n               }\r\n            case PropertyType.Length:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsLengthMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.LinearVelocity:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsLinearVelocityMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.Logical:\r\n               {\r\n                  if (Int32.TryParse(valueString, out int value))\r\n                     data = IFCDataUtil.CreateAsLogical((value != 0) ? IFCLogical.True : IFCLogical.False);\r\n                  break;\r\n               }\r\n            case PropertyType.LuminousFlux:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsLuminousFluxMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.LuminousIntensity:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsLuminousIntensityMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.LinearForce:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsLinearForceMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.Mass:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsMassMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.MassDensity:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsMassDensityMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.MassFlowRate:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsMassFlowRateMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.ModulusOfElasticity:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsModulusOfElasticityMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.NormalisedRatio:\r\n               {\r\n                  data = PropertyUtil.CreateNormalisedRatioMeasureDataFromString(valueString);\r\n                  break;\r\n               }\r\n            case PropertyType.Numeric:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsNumeric(value);\r\n                  break;\r\n               }\r\n            case PropertyType.PlaneAngle:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsPlaneAngleMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.PlanarForce:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsPlanarForceMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.PositiveLength:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsPositiveLengthMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.PositiveRatio:\r\n               {\r\n                  data = PropertyUtil.CreatePositiveRatioMeasureDataFromString(valueString);\r\n                  break;\r\n               }\r\n            case PropertyType.PositivePlaneAngle:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsPositivePlaneAngleMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.Power:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsPowerMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.Pressure:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsPressureMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.Ratio:\r\n               {\r\n                  data = PropertyUtil.CreateRatioMeasureDataFromString(valueString);\r\n                  break;\r\n               }\r\n            case PropertyType.Real:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsReal(value);\r\n                  break;\r\n               }\r\n            case PropertyType.RotationalFrequency:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsRotationalFrequencyMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.SoundPower:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsSoundPowerMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.SoundPressure:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsSoundPressureMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.Text:\r\n               {\r\n                  data = IFCDataUtil.CreateAsText(valueString);\r\n                  break;\r\n               }\r\n            case PropertyType.ThermalTransmittance:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsThermalTransmittanceMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.ThermodynamicTemperature:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsThermodynamicTemperatureMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.Volume:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsVolumeMeasure(value);\r\n                  break;\r\n               }\r\n               \r\n            case PropertyType.VolumetricFlowRate:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsVolumetricFlowRateMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.Time:\r\n               {\r\n                  if (Double.TryParse(valueString, out double value))\r\n                     data = IFCDataUtil.CreateAsTimeMeasure(value);\r\n                  break;\r\n               }\r\n            // Known unhandled cases:\r\n            case PropertyType.IfcCalendarDate:\r\n            case PropertyType.IfcClassificationReference:\r\n            case PropertyType.IfcExternalReference:\r\n            case PropertyType.IfcMaterial:\r\n            case PropertyType.IfcOrganization:\r\n            case PropertyType.Monetary:\r\n               return null;\r\n            default:\r\n               // Unexpected unhandled cases.\r\n               return null;\r\n         }\r\n\r\n         return data;\r\n      }\r\n\r\n      // This function is static to make sure that no properties are used directly from the entry.\r\n      private static IFCAnyHandle CreatePropertyFromElementBase(IFCFile file, ExporterIFC exporterIFC, Element element,\r\n          string revitParamNameToUse, PropertyDescription propertyDescription, BuiltInParameter builtInParameter,\r\n          PropertyType propertyType, PropertyType propertyArgumentType, PropertyValueType valueType, Type propertyEnumerationType)\r\n      {\r\n         IFCAnyHandle propHnd = null;\r\n         if (valueType == PropertyValueType.TableValue)\r\n         {\r\n            IList<IFCData> definingValues;\r\n            IList<IFCData> definedValues;\r\n\r\n            CollectTableDataFromElement(element, revitParamNameToUse, builtInParameter, \r\n               propertyType, propertyArgumentType, out definingValues, out definedValues);\r\n\r\n            if (definingValues == null || definedValues == null || definingValues.Count() != definedValues.Count() || definedValues.Count() < 1)\r\n               return propHnd;\r\n\r\n            propHnd = PropertyUtil.CreateTableProperty(file, propertyDescription, definingValues, definedValues, null, null);\r\n         }\r\n         else\r\n         {\r\n\r\n            switch (propertyType)\r\n            {\r\n               case PropertyType.Area:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateAreaPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Acceleration:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateAccelerationPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.AngularVelocity:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateAngularVelocityPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.AreaDensity:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateAreaDensityPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Boolean:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateBooleanPropertyFromElement(file, element, revitParamNameToUse, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.ClassificationReference:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateClassificationReferencePropertyFromElement(file, exporterIFC, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription);\r\n                     break;\r\n                  }\r\n               case PropertyType.ColorTemperature:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse, builtInParameter,\r\n                         propertyDescription, valueType, SpecTypeId.ColorTemperature, \"COLORTEMPERATURE\");\r\n                     break;\r\n                  }\r\n               case PropertyType.Count:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateCountMeasurePropertyFromElement(file, exporterIFC, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Currency:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateCurrencyPropertyFromElement(file, exporterIFC, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.DynamicViscosity:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateDynamicViscosityPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.ElectricCurrent:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateElectricCurrentPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.ElectricVoltage:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateElectricVoltagePropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Energy:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateEnergyPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Force:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateForcePropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Frequency:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateFrequencyPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.HeatingValue:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateHeatingValuePropertyFromElement(file, element, revitParamNameToUse, \r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Identifier:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateIdentifierPropertyFromElement(file, element, revitParamNameToUse, \r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Illuminance:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateIlluminancePropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Integer:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateIntegerPropertyFromElement(file, element, revitParamNameToUse, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.IonConcentration:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateIonConcentrationPropertyFromElement(file, element, revitParamNameToUse, \r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.IsothermalMoistureCapacity:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateIsothermalMoistureCapacityPropertyFromElement(file, element, revitParamNameToUse, \r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.HeatFluxDensity:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateHeatFluxDensityPropertyFromElement(file, element, revitParamNameToUse, \r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Label:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateLabelPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, propertyEnumerationType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Length:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateLengthPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.LinearForce:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateLinearForcePropertyFromElement(file, element, revitParamNameToUse, \r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.LinearMoment:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateLinearMomentPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.LinearStiffness:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateLinearStiffnessPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.LinearVelocity:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateLinearVelocityPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Logical:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateLogicalPropertyFromElement(file, element, revitParamNameToUse, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.LuminousFlux:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateLuminousFluxPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.LuminousIntensity:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateLuminousIntensityPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Mass:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateMassPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.MassDensity:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateMassDensityPropertyFromElement(file, element, revitParamNameToUse, \r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.MassFlowRate:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateMassFlowRatePropertyFromElement(file, element, revitParamNameToUse, \r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.MassPerLength:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateMassPerLengthPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.ModulusOfElasticity:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateModulusOfElasticityPropertyFromElement(file, element, revitParamNameToUse, \r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.MoistureDiffusivity:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateMoistureDiffusivityPropertyFromElement(file, element, revitParamNameToUse, \r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.MomentOfInertia:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateMomentOfInertiaPropertyFromElement(file, element, revitParamNameToUse, \r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.NormalisedRatio:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateNormalisedRatioPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Numeric:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateNumericPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.PlaneAngle:\r\n                  {\r\n                     propHnd = PropertyUtil.CreatePlaneAnglePropertyFromElement(file, element, revitParamNameToUse,\r\n                        builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.PlanarForce:\r\n                  {\r\n                     propHnd = PropertyUtil.CreatePlanarForcePropertyFromElement(file, element, revitParamNameToUse, \r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.PositiveLength:\r\n                  {\r\n                     propHnd = PropertyUtil.CreatePositiveLengthPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.PositiveRatio:\r\n                  {\r\n                     propHnd = PropertyUtil.CreatePositiveRatioPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.PositivePlaneAngle:\r\n                  {\r\n                     propHnd = PropertyUtil.CreatePositivePlaneAnglePropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Power:\r\n                  {\r\n                     propHnd = PropertyUtil.CreatePowerPropertyFromElement(file, element, revitParamNameToUse, \r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Pressure:\r\n                  {\r\n                     propHnd = PropertyUtil.CreatePressurePropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Ratio:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateRatioPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Real:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.RotationalFrequency:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateRotationalFrequencyPropertyFromElement(file, element, revitParamNameToUse, \r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.SoundPower:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateSoundPowerPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.SoundPressure:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateSoundPressurePropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.SpecificHeatCapacity:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateSpecificHeatCapacityPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Text:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateTextPropertyFromElement(file, element, revitParamNameToUse, \r\n                         builtInParameter, propertyDescription, valueType, propertyEnumerationType);\r\n                     break;\r\n                  }\r\n               case PropertyType.ThermalConductivity:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateThermalConductivityPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.ThermalExpansionCoefficient:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateThermalExpansionCoefficientPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.ThermalResistance:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateThermalResistancePropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.ThermalTransmittance:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateThermalTransmittancePropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.ThermodynamicTemperature:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateThermodynamicTemperaturePropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.VaporPermeability:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateVaporPermeabilityPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Volume:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateVolumePropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.VolumetricFlowRate:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateVolumetricFlowRatePropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Time:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateTimePropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.Torque:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateTorquePropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.WarpingConstant:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateWarpingConstantPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType);\r\n                     break;\r\n                  }\r\n               case PropertyType.CostPerArea:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.CostPerArea, \"COSTPERAREA\");\r\n                     break;\r\n                  }\r\n               case PropertyType.ApparentPowerDensity:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.ApparentPowerDensity, \"APPARENTPOWERDENSITY\");\r\n                     break;\r\n                  }\r\n               case PropertyType.CostRateEnergy:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.CostRateEnergy, \"COSTRATEENERGY\");\r\n                     break;\r\n                  }\r\n               case PropertyType.CostRatePower:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.CostRatePower, \"COSTRATEPOWER\");\r\n                     break;\r\n                  }\r\n               case PropertyType.ElectricalEfficacy:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.Efficacy, \"LUMINOUSEFFICACY\");\r\n                     break;\r\n                  }\r\n               case PropertyType.Luminance:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.Luminance, \"LUMINANCE\");\r\n                     break;\r\n                  }\r\n               case PropertyType.ElectricalPowerDensity:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.ElectricalPowerDensity, \"ELECTRICALPOWERDENSITY\");\r\n                     break;\r\n                  }\r\n               case PropertyType.PowerPerLength:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.PowerPerLength, \"POWERPERLENGTH\");\r\n                     break;\r\n                  }\r\n               case PropertyType.ElectricalResistivity:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.ElectricalResistivity, \"ELECTRICALRESISTIVITY\");\r\n                     break;\r\n                  }\r\n               case PropertyType.HeatCapacityPerArea:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.HeatCapacityPerArea, \"HEATCAPACITYPERAREA\");\r\n                     break;\r\n                  }\r\n               case PropertyType.ThermalGradientCoefficientForMoistureCapacity:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.ThermalGradientCoefficientForMoistureCapacity, \"THERMALGRADIENTCOEFFICIENTFORMOISTURECAPACITY\");\r\n                     break;\r\n                  }\r\n               case PropertyType.ThermalMass:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.ThermalMass, \"THERMALMASS\");\r\n                     break;\r\n                  }\r\n               case PropertyType.AirFlowDensity:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.AirFlowDensity, \"AIRFLOWDENSITY\");\r\n                     break;\r\n                  }\r\n               case PropertyType.AirFlowDividedByCoolingLoad:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.AirFlowDividedByCoolingLoad, \"AIRFLOWDIVIDEDBYCOOLINGLOAD\");\r\n                     break;\r\n                  }\r\n               case PropertyType.AirFlowDividedByVolume:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.AirFlowDividedByVolume, \"AIRFLOWDIVIDEDBYVOLUME\");\r\n                     break;\r\n                  }\r\n               case PropertyType.AreaDividedByCoolingLoad:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.AreaDividedByCoolingLoad, \"AREADIVIDEDBYCOOLINGLOAD\");\r\n                     break;\r\n                  }\r\n               case PropertyType.AreaDividedByHeatingLoad:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.AreaDividedByHeatingLoad, \"AREADIVIDEDBYHEATINGLOAD\");\r\n                     break;\r\n                  }\r\n               case PropertyType.CoolingLoadDividedByArea:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.CoolingLoadDividedByArea, \"COOLINGLOADDIVIDEDBYAREA\");\r\n                     break;\r\n                  }\r\n               case PropertyType.CoolingLoadDividedByVolume:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.CoolingLoadDividedByVolume, \"COOLINGLOADDIVIDEDBYVOLUME\");\r\n                     break;\r\n                  }\r\n               case PropertyType.FlowPerPower:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.FlowPerPower, \"FLOWPERPOWER\");\r\n                     break;\r\n                  }\r\n               case PropertyType.FrictionLoss:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.HvacFriction, \"FRICTIONLOSS\");\r\n                     break;\r\n                  }\r\n               case PropertyType.HeatingLoadDividedByArea:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.HeatingLoadDividedByArea, \"HEATINGLOADDIVIDEDBYAREA\");\r\n                     break;\r\n                  }\r\n               case PropertyType.HeatingLoadDividedByVolume:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.HeatingLoadDividedByVolume, \"HEATINGLOADDIVIDEDBYVOLUME\");\r\n                     break;\r\n                  }\r\n               case PropertyType.PowerPerFlow:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.PowerPerFlow, \"POWERPERFLOW\");\r\n                     break;\r\n                  }\r\n               case PropertyType.PipingFriction:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.PipingFriction, \"PIPINGFRICTION\");\r\n                     break;\r\n                  }\r\n               case PropertyType.AreaSpringCoefficient:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.AreaSpringCoefficient, \"AREASPRINGCOEFFICIENT\");\r\n                     break;\r\n                  }\r\n               case PropertyType.LineSpringCoefficient:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.LineSpringCoefficient, \"LINESPRINGCOEFFICIENT\");\r\n                     break;\r\n                  }\r\n               case PropertyType.MassPerUnitArea:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.MassPerUnitArea, \"MASSPERUNITAREA\");\r\n                     break;\r\n                  }\r\n               case PropertyType.ReinforcementAreaPerUnitLength:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.ReinforcementAreaPerUnitLength, \"REINFORCEMENTAREAPERUNITLENGTH\");\r\n                     break;\r\n                  }\r\n               case PropertyType.RotationalLineSpringCoefficient:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.RotationalLineSpringCoefficient, \"ROTATIONALLINESPRINGCOEFFICIENT\");\r\n                     break;\r\n                  }\r\n               case PropertyType.RotationalPointSpringCoefficient:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.RotationalPointSpringCoefficient, \"ROTATIONALPOINTSPRINGCOEFFICIENT\");\r\n                     break;\r\n                  }\r\n               case PropertyType.UnitWeight:\r\n                  {\r\n                     propHnd = PropertyUtil.CreateUserDefinedRealPropertyFromElement(file, element, revitParamNameToUse,\r\n                         builtInParameter, propertyDescription, valueType, SpecTypeId.UnitWeight, \"UNITWEIGHT\");\r\n                     break;\r\n                  }\r\n               // Known unhandled cases:\r\n               case PropertyType.IfcCalendarDate:\r\n               case PropertyType.IfcClassificationReference:\r\n               case PropertyType.IfcExternalReference:\r\n               case PropertyType.IfcMaterial:\r\n               case PropertyType.IfcOrganization:\r\n               case PropertyType.Monetary:\r\n                  return null;\r\n               default:\r\n                  // Unexpected unhandled cases.\r\n                  return null;\r\n            }\r\n         }\r\n\r\n         return propHnd;\r\n      }\r\n\r\n      private static bool CollectTableDataFromElement(Element element, string revitParamNameToUse, \r\n         BuiltInParameter builtInParameter, PropertyType propertyType, PropertyType propertyArgumentType,\r\n         out IList<IFCData> definingValues, out IList<IFCData> definedValues)\r\n      {\r\n         definingValues = null;\r\n         definedValues = null;\r\n\r\n         // Get multiline string from element parameter\r\n         string tableString = String.Empty;\r\n         ParameterUtil.GetStringValueFromElement(element, revitParamNameToUse, out tableString);\r\n         if (tableString == null && builtInParameter != BuiltInParameter.INVALID)\r\n         {\r\n            string builtInParamName = LabelUtils.GetLabelFor(builtInParameter);\r\n            ParameterUtil.GetStringValueFromElement(element, builtInParamName, out tableString);\r\n         }\r\n\r\n         if (String.IsNullOrEmpty(tableString))\r\n            return false;\r\n\r\n         // Parse this string as a list of value pairs\r\n         IList<Tuple<string, string>> parsedTable = new List<Tuple<string, string>>();\r\n\r\n         string[] tableRaws = tableString.Split(new char[] { '\\n', '\\r' }, StringSplitOptions.RemoveEmptyEntries);         \r\n         foreach (string raw in tableRaws)\r\n         {\r\n            string[] splitRaw = raw.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);\r\n            if (splitRaw.Count() == 2)\r\n               parsedTable.Add(new Tuple<string, string>(splitRaw[0], splitRaw[1]));\r\n         }\r\n\r\n         if (parsedTable.Count() < 1)\r\n            return false;\r\n\r\n         definingValues = new List<IFCData>();\r\n         definedValues = new List<IFCData>();\r\n         // Create IFCData for each value according to its type\r\n         foreach (Tuple<string, string> pair in parsedTable)\r\n         {\r\n            IFCData definingData = GetPropertyDataFromString(pair.Item1, propertyArgumentType);\r\n            IFCData definedData = GetPropertyDataFromString(pair.Item2, propertyType);\r\n\r\n            if (definingData != null && definedData != null)\r\n            {\r\n               definingValues.Add(definingData);\r\n               definedValues.Add(definedData);\r\n            }\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a property from element or its type's parameter.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"elementType\">The element type, if it is appropriate to look in it for value.</param>\r\n      /// <param name=\"lookInType\">True if it's appropriate to look for value in element type.</param>\r\n      /// <param name=\"addTypePropertiesToInstance\">Indicates whether properties from the element's type should be added to the instance.</param>\r\n      /// <returns>The property handle.</returns>\r\n      IFCAnyHandle CreatePropertyFromElementOrSymbol(IFCFile file, ExporterIFC exporterIFC, string owningPsetName, Element element, Element elementType,\r\n         PropertyType propertyType, PropertyType propertyArgumentType, PropertyValueType valueType, Type propertyEnumerationType, string propertyName, \r\n         bool lookInType = false, bool addTypePropertiesToInstance = false)\r\n      {\r\n         // Pset from schedule will be created only on the instance and not on the type (type properties in the schedule will be added into the instance's pset\r\n         if ((element is ElementType || element is FamilySymbol) && lookInType)\r\n            return null;\r\n\r\n         string localizedRevitParameterName = LocalizedRevitParameterName(ExporterCacheManager.LanguageType);\r\n         string revitParameterName = RevitParameterName;\r\n\r\n         PropertyDescription propertyDescription = new PropertyDescription(propertyName);\r\n\r\n         IFCAnyHandle propHnd = null;\r\n         if (localizedRevitParameterName != null)\r\n         {\r\n            propHnd = CreatePropertyFromElementBase(file, exporterIFC, element,\r\n                 localizedRevitParameterName, propertyDescription, BuiltInParameter.INVALID,\r\n                 propertyType, propertyArgumentType, valueType, propertyEnumerationType);\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd) && (element is ElementType || element is FamilySymbol))\r\n            {\r\n               localizedRevitParameterName += \"[Type]\";\r\n               propHnd = CreatePropertyFromElementBase(file, exporterIFC, element,\r\n                 localizedRevitParameterName, propertyDescription, BuiltInParameter.INVALID,\r\n                 propertyType, propertyArgumentType, valueType, propertyEnumerationType);\r\n            }\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\r\n         {\r\n            propHnd = CreatePropertyFromElementBase(file, exporterIFC, element,\r\n                 revitParameterName, propertyDescription, RevitBuiltInParameter,\r\n                 propertyType, propertyArgumentType, valueType, propertyEnumerationType);\r\n\r\n            // For backward compatibility, if the new param name does not return anyhing, try the original name\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\r\n               propHnd = CreatePropertyFromElementBase(file, exporterIFC, element,\r\n                 CompatibleRevitParameterName, propertyDescription, RevitBuiltInParameter,\r\n                 propertyType, propertyArgumentType, valueType, propertyEnumerationType);\r\n\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd) && (element is ElementType || element is FamilySymbol))\r\n            {\r\n               revitParameterName += \"[Type]\";\r\n               propHnd = CreatePropertyFromElementBase(file, exporterIFC, element,\r\n                 revitParameterName, propertyDescription, RevitBuiltInParameter,\r\n                 propertyType, propertyArgumentType, valueType, propertyEnumerationType);\r\n\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\r\n                  propHnd = CreatePropertyFromElementBase(file, exporterIFC, element,\r\n                    CompatibleRevitParameterName + \"[Type]\", propertyDescription, RevitBuiltInParameter,\r\n                    propertyType, propertyArgumentType, valueType, propertyEnumerationType);\r\n            }\r\n         }\r\n\r\n         // Get the property from Type for this element if the pset is for schedule or \r\n         // if element doesn't have an associated type (e.g. IfcRoof)\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd) && (elementType != null) && (lookInType || addTypePropertiesToInstance))\r\n            return CreatePropertyFromElementOrSymbol(file, exporterIFC, owningPsetName, elementType, null,\r\n               propertyType, propertyArgumentType, valueType, propertyEnumerationType, propertyName, false);\r\n\r\n         return propHnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a property from the calculator (in case of Element)\r\n      /// or from Description (in case of Connector).\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"elementOrConnector\">The element or connector.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <param name=\"handle\">The handle for which we calculate the property.</param>\r\n      /// <param name=\"propertyType\">The type of property.</param>\r\n      /// <param name=\"valueType\">The type of the container for a property.</param>\r\n      /// <param name=\"propertyEnumerationType\">The type of property.</param>\r\n      /// <param name=\"propertyName\">The name of property to create.</param>\r\n      /// <returns>The property handle.</returns>\r\n      IFCAnyHandle CreatePropertyFromCalculatorOrDescription(IFCFile file, ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData, ElementOrConnector elementOrConnector,\r\n            ElementType elementType, IFCAnyHandle handle, PropertyType propertyType, PropertyValueType valueType, Type propertyEnumerationType, string propertyName)\r\n      {\r\n         IFCAnyHandle propHnd = null;\r\n         if (elementOrConnector.Connector != null)\r\n         {\r\n            // Read property value string from connector description\r\n            Connector connector = elementOrConnector.Connector;\r\n            if (connector == null)\r\n               return propHnd;\r\n\r\n            string propertValue = ConnectorExporter.GetConnectorParameterFromDescription(connector, propertyName);\r\n            if (String.IsNullOrEmpty(propertValue))\r\n               return propHnd;\r\n\r\n            // Create property from property string value\r\n            propHnd = CreatePropertyFromCalculator(file, propertyType, valueType, propertyEnumerationType, propertyName, propertValue);\r\n         }\r\n         else if (elementOrConnector.Element != null)\r\n         {\r\n            // Calculate property by calculator\r\n            Element element = elementOrConnector.Element;\r\n            if (element == null || PropertyCalculator == null)\r\n               return propHnd;\r\n\r\n            // Create property from calculator value\r\n            if (PropertyCalculator.GetParameterFromSubelementCache(element, handle) ||\r\n                PropertyCalculator.Calculate(exporterIFC, extrusionCreationData, element, elementType, this))\r\n            {\r\n               propHnd = CreatePropertyFromCalculator(file, propertyType, valueType, propertyEnumerationType, propertyName, null);\r\n            }\r\n         }\r\n\r\n         return propHnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a property from the calculator\r\n      /// or just converting the string property value (if it's not null)\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"propertyType\">The type of property.</param>\r\n      /// <param name=\"valueType\">The type of the container for a property.</param>\r\n      /// <param name=\"propertyEnumerationType\">The type of property.</param>\r\n      /// <param name=\"propertyName\">The name of property to create.</param>\r\n      /// <param name=\"propertyValue\">The string value of property to create.</param>\r\n      /// <returns>The property handle.</returns>\r\n      IFCAnyHandle CreatePropertyFromCalculator(IFCFile file, PropertyType propertyType, PropertyValueType valueType,\r\n            Type propertyEnumerationType, string propertyName, string propertyValue)\r\n      {\r\n         IFCAnyHandle propHnd = null;\r\n\r\n         bool useCalculator = (propertyValue == null);\r\n\r\n         PropertyDescription propertyDescription = new PropertyDescription(propertyName);\r\n         switch (propertyType)\r\n         {\r\n            case PropertyType.Label:\r\n               {\r\n                  if (useCalculator && PropertyCalculator.CalculatesMutipleValues)\r\n                  {\r\n                     propHnd = PropertyUtil.CreateLabelProperty(file, propertyDescription, PropertyCalculator.GetStringValues(), valueType, propertyEnumerationType);\r\n                  }\r\n                  else\r\n                  {\r\n                     bool cacheLabel = useCalculator && PropertyCalculator.CacheStringValues;\r\n                     string val = (useCalculator) ? PropertyCalculator.GetStringValue() : propertyValue;\r\n\r\n                     propHnd = PropertyUtil.CreateLabelPropertyFromCache(file, null, propertyDescription, val, valueType, cacheLabel, propertyEnumerationType);\r\n                  }\r\n                  break;\r\n               }\r\n            case PropertyType.Text:\r\n               {\r\n                  string val = (useCalculator) ? PropertyCalculator.GetStringValue() : propertyValue;\r\n                  propHnd = PropertyUtil.CreateTextPropertyFromCache(file, propertyDescription, val, valueType);\r\n                  break;\r\n               }\r\n            case PropertyType.Identifier:\r\n               {\r\n                  string val = (useCalculator) ? PropertyCalculator.GetStringValue() : propertyValue;\r\n                  propHnd = PropertyUtil.CreateIdentifierPropertyFromCache(file, propertyDescription, val, valueType);\r\n                  break;\r\n               }\r\n            case PropertyType.Boolean:\r\n               {\r\n                  bool val = (useCalculator) ? PropertyCalculator.GetBooleanValue() : bool.Parse(propertyValue);\r\n                  propHnd = PropertyUtil.CreateBooleanPropertyFromCache(file, propertyDescription, val, valueType);\r\n                  break;\r\n               }\r\n            case PropertyType.Logical:\r\n               {\r\n                  IFCLogical val;\r\n                  if (useCalculator)\r\n                     val = PropertyCalculator.GetLogicalValue();\r\n                  else\r\n                     val = int.Parse(propertyValue) != 0 ? IFCLogical.True : IFCLogical.False;\r\n\r\n                  propHnd = PropertyUtil.CreateLogicalPropertyFromCache(file, propertyDescription, val, valueType);\r\n                  break;\r\n               }\r\n            case PropertyType.Integer:\r\n               {\r\n                  int val = (useCalculator) ? PropertyCalculator.GetIntValue() : int.Parse(propertyValue);\r\n                  propHnd = PropertyUtil.CreateIntegerPropertyFromCache(file, propertyDescription, val, valueType);\r\n                  break;\r\n               }\r\n            case PropertyType.Real:\r\n               {\r\n                  double val = (useCalculator) ? PropertyCalculator.GetDoubleValue() : double.Parse(propertyValue);\r\n                  propHnd = PropertyUtil.CreateRealPropertyFromCache(file, propertyDescription, new List<double?>() { val }, valueType, null);\r\n                  break;\r\n               }\r\n            case PropertyType.Length:\r\n               {\r\n                  double val = (useCalculator) ? PropertyCalculator.GetDoubleValue() : double.Parse(propertyValue);\r\n                  propHnd = PropertyUtil.CreateLengthPropertyFromCache(file, propertyDescription, new List<double?>() { val }, valueType, null);\r\n                  break;\r\n               }\r\n            case PropertyType.PositiveLength:\r\n               {\r\n                  double val = (useCalculator) ? PropertyCalculator.GetDoubleValue() : double.Parse(propertyValue);\r\n                  propHnd = PropertyUtil.CreatePositiveLengthProperty(file, propertyDescription, new List<double?>() { val }, valueType, null);\r\n                  break;\r\n               }\r\n            case PropertyType.NormalisedRatio:\r\n               {\r\n                  double val = (useCalculator) ? PropertyCalculator.GetDoubleValue() : double.Parse(propertyValue);\r\n                  propHnd = PropertyUtil.CreateNormalisedRatioProperty(file, propertyDescription, new List<double?>() { val }, valueType, null);\r\n                  break;\r\n               }\r\n            case PropertyType.Numeric:\r\n               {\r\n                  double val = (useCalculator) ? PropertyCalculator.GetDoubleValue() : double.Parse(propertyValue);\r\n                  propHnd = PropertyUtil.CreateNumericPropertyFromCache(file, propertyDescription, new List<double?>() { val }, valueType, null);\r\n                  break;\r\n               }\r\n            case PropertyType.PositiveRatio:\r\n               {\r\n                  double val = (useCalculator) ? PropertyCalculator.GetDoubleValue() : double.Parse(propertyValue);\r\n                  propHnd = PropertyUtil.CreatePositiveRatioProperty(file, propertyDescription, new List<double?>() { val }, valueType, null);\r\n                  break;\r\n               }\r\n            case PropertyType.Ratio:\r\n               {\r\n                  double val = (useCalculator) ? PropertyCalculator.GetDoubleValue() : double.Parse(propertyValue);\r\n                  propHnd = PropertyUtil.CreateRatioProperty(file, propertyDescription, new List<double?>() { val }, valueType, null);\r\n                  break;\r\n               }\r\n            case PropertyType.PlaneAngle:\r\n               {\r\n                  double val = (useCalculator) ? PropertyCalculator.GetDoubleValue() : double.Parse(propertyValue);\r\n                  propHnd = PropertyUtil.CreatePlaneAnglePropertyFromCache(file, propertyDescription, new List<double?>() { val }, valueType, null);\r\n                  break;\r\n               }\r\n            case PropertyType.PositivePlaneAngle:\r\n               {\r\n                  double val = (useCalculator) ? PropertyCalculator.GetDoubleValue() : double.Parse(propertyValue);\r\n                  propHnd = PropertyUtil.CreatePositivePlaneAnglePropertyFromCache(file, propertyDescription, new List<double?>() { val }, valueType, null);\r\n                  break;\r\n               }\r\n            case PropertyType.Area:\r\n               {\r\n                  double val = (useCalculator) ? PropertyCalculator.GetDoubleValue() : double.Parse(propertyValue);\r\n                  propHnd = PropertyUtil.CreateAreaProperty(file, propertyDescription, new List<double?>() { val }, valueType, null);\r\n                  break;\r\n               }\r\n            case PropertyType.Count:\r\n               {\r\n                  if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4x3)\r\n                  {\r\n                     double val = (useCalculator) ? PropertyCalculator.GetDoubleValue() : double.Parse(propertyValue);\r\n                     propHnd = PropertyUtil.CreateCountMeasureProperty(file, propertyDescription, val, valueType);\r\n                  }\r\n                  else\r\n                  {\r\n                     int val = (useCalculator) ? PropertyCalculator.GetIntValue() : int.Parse(propertyValue);\r\n                     propHnd = PropertyUtil.CreateCountMeasureProperty(file, propertyDescription, val, valueType);\r\n                  }\r\n                  break;\r\n               }\r\n            case PropertyType.Frequency:\r\n               {\r\n                  double val = (useCalculator) ? PropertyCalculator.GetDoubleValue() : double.Parse(propertyValue);\r\n                  propHnd = PropertyUtil.CreateFrequencyProperty(file, propertyDescription, new List<double?>() { val }, valueType, null);\r\n                  break;\r\n               }\r\n            case PropertyType.Power:\r\n               {\r\n                  double val = (useCalculator) ? PropertyCalculator.GetDoubleValue() : double.Parse(propertyValue);\r\n                  propHnd = PropertyUtil.CreatePowerPropertyFromCache(file, propertyDescription, new List<double?>() { val }, valueType, null);\r\n                  break;\r\n               }\r\n            case PropertyType.ThermodynamicTemperature:\r\n               {\r\n                  double val = (useCalculator) ? PropertyCalculator.GetDoubleValue() : double.Parse(propertyValue);\r\n                  propHnd = PropertyUtil.CreateThermodynamicTemperaturePropertyFromCache(file, propertyDescription, new List<double?>() { val }, valueType, null);\r\n                  break;\r\n               }\r\n            case PropertyType.ThermalTransmittance:\r\n               {\r\n                  double val = (useCalculator) ? PropertyCalculator.GetDoubleValue() : double.Parse(propertyValue);\r\n                  propHnd = PropertyUtil.CreateThermalTransmittancePropertyFromCache(file, propertyDescription, new List<double?>() { val }, valueType, null);\r\n                  break;\r\n               }\r\n            case PropertyType.VolumetricFlowRate:\r\n               {\r\n                  double val = (useCalculator) ? PropertyCalculator.GetDoubleValue() : double.Parse(propertyValue);\r\n                  propHnd = PropertyUtil.CreateVolumetricFlowRateProperty(file, propertyDescription, new List<double?>() { val }, valueType, null);\r\n                  break;\r\n               }\r\n            case PropertyType.LinearVelocity:\r\n               {\r\n                  double val = (useCalculator) ? PropertyCalculator.GetDoubleValue() : double.Parse(propertyValue);\r\n                  propHnd = PropertyUtil.CreateLinearVelocityProperty(file, propertyDescription, new List<double?>() { val }, valueType, null);\r\n                  break;\r\n               }\r\n            default:\r\n               throw new InvalidOperationException();\r\n         }\r\n\r\n         return propHnd;\r\n      }\r\n\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/PropertySetEntryUtil.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.ApplicationServices;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Exporter.PropertySet.Calculators;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet\r\n{\r\n   /// <summary>\r\n   /// Provides static methods to create varies IFC PropertySetEntries.\r\n   /// </summary>\r\n   public class PropertySetEntryUtil\r\n   {\r\n      /// <summary>\r\n      /// Gets the localized version of the \"IsExternal\" parameter name.\r\n      /// </summary>\r\n      /// <param name=\"language\">The current language.</param>\r\n      /// <returns>The string containing the localized value, or \"IsExternal\" as default.</returns>\r\n      public static string GetLocalizedIsExternal(LanguageType language)\r\n      {\r\n         switch (language)\r\n         {\r\n            case LanguageType.English_USA:\r\n               return \"IsExternal\";\r\n            case LanguageType.Chinese_Simplified:\r\n               return \"是否外部构件\";\r\n            case LanguageType.French:\r\n               return \"EstExterieur\";\r\n            case LanguageType.German:\r\n               return \"Außenbauteil\";\r\n            case LanguageType.Japanese:\r\n               return \"外部区分\";\r\n         }\r\n         return null;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/PropertyUtil.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Export.Utility;\nusing Revit.IFC.Export.Toolkit;\nusing System.Linq;\n\nusing PropertyDescription = Revit.IFC.Export.Utility.ParameterUtil.PropertyDescription;\nusing static Revit.IFC.Export.Utility.ParameterUtil;\n\nnamespace Revit.IFC.Export.Exporter.PropertySet\n{\n   using ParameterMappingKey = Tuple<PropertySetupType, string, ElementId, string>;\n\n   /// <summary>\n   /// Provides static methods to create varies IFC properties.\n   /// </summary>\n   public class PropertyUtil\n   {\n      private static readonly ISet<IFCEntityType> PreIFC4EntitiesWithNoRelatedType = new HashSet<IFCEntityType>()\n      {\n         IFCEntityType.IfcFooting,\n         IFCEntityType.IfcPile,\n         IFCEntityType.IfcRamp,\n         IFCEntityType.IfcRoof,\n         IFCEntityType.IfcStair\n      };\n\n      /// <summary>\n      /// Maps IFC4 quantity names to their corresponding names in pre-IFC4 versions (IFC2x2 and IFC2x3)\n      /// </summary>\n      private static Dictionary<IFCVersion, Dictionary<(string, string), string>> PreIFC4QuantityNamesMap = new()\n      {\n         { IFCVersion.IFC2x2, \n            new() { \n               { (\"Qto_BeamBaseQuantities\", \"Length\"), \"NominalLength\" },\n               { (\"Qto_BeamBaseQuantities\", \"GrossSurfaceArea\"), \"TotalSurfaceArea\" },\n               { (\"Qto_BeamBaseQuantities\", \"CrossSectionArea\"), \"CrossSectionArea\" },\n               { (\"Qto_BeamBaseQuantities\", \"GrossVolume\"), \"GrossVolume\" },\n               { (\"Qto_BeamBaseQuantities\", \"NetVolume\"), \"NetVolume\" },\n               { (\"Qto_BeamBaseQuantities\", \"OuterSurfaceArea\"), \"OuterSurfaceArea\" },\n               { (\"Qto_ColumnBaseQuantities\", \"Length\"), \"NominalLength\" },\n               { (\"Qto_ColumnBaseQuantities\", \"GrossSurfaceArea\"), \"TotalSurfaceArea\" },\n               { (\"Qto_ColumnBaseQuantities\", \"CrossSectionArea\"), \"CrossSectionArea\" },\n               { (\"Qto_ColumnBaseQuantities\", \"GrossVolume\"), \"GrossVolume\" },\n               { (\"Qto_ColumnBaseQuantities\", \"NetVolume\"), \"NetVolume\" },\n               { (\"Qto_ColumnBaseQuantities\", \"OuterSurfaceArea\"), \"OuterSurfaceArea\" },\n               { (\"Qto_MemberBaseQuantities\", \"Length\"), \"NominalLength\" },\n               { (\"Qto_MemberBaseQuantities\", \"GrossSurfaceArea\"), \"TotalSurfaceArea\" },\n               { (\"Qto_MemberBaseQuantities\", \"CrossSectionArea\"), \"CrossSectionArea\" },\n               { (\"Qto_MemberBaseQuantities\", \"GrossVolume\"), \"GrossVolume\" },\n               { (\"Qto_MemberBaseQuantities\", \"NetVolume\"), \"NetVolume\" },\n               { (\"Qto_MemberBaseQuantities\", \"OuterSurfaceArea\"), \"OuterSurfaceArea\" },\n               { (\"Qto_OpeningElementBaseQuantities\", \"Area\"), \"OpeningArea\" },\n               { (\"Qto_SlabBaseQuantities\", \"GrossArea\"), \"SurfaceArea\" },\n               { (\"Qto_SlabBaseQuantities\", \"GrossVolume\"), \"GrossVolume\" },\n               { (\"Qto_SlabBaseQuantities\", \"NetVolume\"), \"NetVolume\" },\n               { (\"Qto_WallBaseQuantities\", \"Length\"), \"NominalLength\" },\n               { (\"Qto_WallBaseQuantities\", \"GrossVolume\"), \"GrossVolume\" },\n               { (\"Qto_WallBaseQuantities\", \"NetVolume\"), \"NetVolume\" },\n               { (\"Qto_WallBaseQuantities\", \"GrossFootprintArea\"), \"GrossFootprintArea\" }\n            }\n         },\n         { IFCVersion.IFC2x3,\n            new() {\n               { (\"Qto_BeamBaseQuantities\", \"Length\"), \"NominalLength\" },\n               { (\"Qto_BeamBaseQuantities\", \"GrossSurfaceArea\"), \"TotalSurfaceArea\" },\n               { (\"Qto_BeamBaseQuantities\", \"CrossSectionArea\"), \"CrossSectionArea\" },\n               { (\"Qto_BeamBaseQuantities\", \"GrossVolume\"), \"GrossVolume\" },\n               { (\"Qto_BeamBaseQuantities\", \"NetVolume\"), \"NetVolume\" },\n               { (\"Qto_BeamBaseQuantities\", \"OuterSurfaceArea\"), \"OuterSurfaceArea\" },\n               { (\"Qto_ColumnBaseQuantities\", \"Length\"), \"NominalLength\" },\n               { (\"Qto_ColumnBaseQuantities\", \"GrossSurfaceArea\"), \"TotalSurfaceArea\" },\n               { (\"Qto_ColumnBaseQuantities\", \"CrossSectionArea\"), \"CrossSectionArea\" },\n               { (\"Qto_ColumnBaseQuantities\", \"GrossVolume\"), \"GrossVolume\" },\n               { (\"Qto_ColumnBaseQuantities\", \"NetVolume\"), \"NetVolume\" },\n               { (\"Qto_ColumnBaseQuantities\", \"OuterSurfaceArea\"), \"OuterSurfaceArea\" },\n               { (\"Qto_MemberBaseQuantities\", \"Length\"), \"NominalLength\" },\n               { (\"Qto_MemberBaseQuantities\", \"GrossSurfaceArea\"), \"TotalSurfaceArea\" },\n               { (\"Qto_MemberBaseQuantities\", \"CrossSectionArea\"), \"CrossSectionArea\" },\n               { (\"Qto_MemberBaseQuantities\", \"GrossVolume\"), \"GrossVolume\" },\n               { (\"Qto_MemberBaseQuantities\", \"NetVolume\"), \"NetVolume\" },\n               { (\"Qto_MemberBaseQuantities\", \"OuterSurfaceArea\"), \"OuterSurfaceArea\" },\n               { (\"Qto_OpeningElementBaseQuantities\", \"Area\"), \"NominalArea\" },\r\n               { (\"Qto_OpeningElementBaseQuantities\", \"Volume\"), \"NominalVolume\" },\n               { (\"Qto_SlabBaseQuantities\", \"GrossArea\"), \"GrossArea\" },\n               { (\"Qto_SlabBaseQuantities\", \"NetArea\"), \"NetArea\" },\n               { (\"Qto_SlabBaseQuantities\", \"GrossVolume\"), \"GrossVolume\" },\n               { (\"Qto_SlabBaseQuantities\", \"NetVolume\"), \"NetVolume\" },\n               { (\"Qto_WallBaseQuantities\", \"Length\"), \"NominalLength\" },\n               { (\"Qto_WallBaseQuantities\", \"Width\"), \"NominalWidth\" },\n               { (\"Qto_WallBaseQuantities\", \"Height\"), \"NominalHeight\" },\n               { (\"Qto_WallBaseQuantities\", \"GrossSideArea\"), \"GrossSideArea\" },\n               { (\"Qto_WallBaseQuantities\", \"NetSideArea\"), \"NetSideArea\" },\n               { (\"Qto_WallBaseQuantities\", \"GrossVolume\"), \"GrossVolume\" },\n               { (\"Qto_WallBaseQuantities\", \"NetVolume\"), \"NetVolume\" },\n               { (\"Qto_WallBaseQuantities\", \"GrossFootprintArea\"), \"GrossFootprintArea\" }\n            }\n         }\n      };\n\n      /// <summary>\n      /// Get a list of IFC entities that have no related type before IFC4\n      /// </summary>\n      public static ISet<IFCEntityType> EntitiesWithNoRelatedType\n      {\n         get\n         {\n            return ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 ? PreIFC4EntitiesWithNoRelatedType : null;\n         }\n      }\n\n      public static IFCAnyHandle CreateCommonPropertyFromList(IFCFile file, PropertyDescription propertyDescription, IList<IFCData> valueList, PropertyValueType valueType, string unitTypeKey)\n      {\n         if (valueList == null || valueList.All(x => x == null))\n            return null;\n\n         IFCAnyHandle unitHnd = (!ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView && unitTypeKey != null) ? ExporterCacheManager.UnitsCache.FindUserDefinedUnit(unitTypeKey) : null;\n\n         switch (valueType)\n         {\n            case PropertyValueType.EnumeratedValue:\n               {\n                  return IFCInstanceExporter.CreatePropertyEnumeratedValue(file, propertyDescription, valueList, null);\n               }\n            case PropertyValueType.SingleValue:\n               {\n                  return IFCInstanceExporter.CreatePropertySingleValue(file, propertyDescription, valueList.First(), unitHnd);\n               }\n            case PropertyValueType.ListValue:\n               {\n                  return IFCInstanceExporter.CreatePropertyListValue(file, propertyDescription, valueList, unitHnd);\n               }\n            case PropertyValueType.BoundedValue:\n               {\n                  return CreateBoundedValuePropertyFromList(file, propertyDescription, valueList, unitTypeKey);\n               }\n            case PropertyValueType.TableValue:\n               {\n                  // for now is handled in CreatePropertyFromElementBase as Multiline Text\n                  throw new InvalidOperationException(\"Unhandled table property!\");\n               }\n            default:\n               throw new InvalidOperationException(\"Missing case!\");\n         }\n      }\n\n      public static IFCAnyHandle CreateCommonProperty(IFCFile file, PropertyDescription propertyDescription, IFCData valueData, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateCommonPropertyFromList(file, propertyDescription, new List<IFCData>() { valueData }, valueType, unitTypeKey);\n      }\n\n      /// <summary>\n      /// Creates an IfcPropertyBoundedValue.\n      /// </summary>\n      /// <param name=\"file\">The file.</param>\n      /// <param name=\"propertyName\">The name.</param>\n      /// <param name=\"valueDataList\">The list of values.</param>\n      /// <param name=\"unitTypeKey\">The unit name.</param>\n      protected static IFCAnyHandle CreateBoundedValuePropertyFromList(IFCFile file, PropertyDescription propertyDescription, IList<IFCData> valueDataList, string unitTypeKey)\n      {\n         if (valueDataList.Count < 1)\n            throw new InvalidOperationException(\"Invalid bounded property!\");\n         IFCAnyHandle unitHnd = (!ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView && unitTypeKey != null) ? ExporterCacheManager.UnitsCache.FindUserDefinedUnit(unitTypeKey) : null;\n\n         IFCData setPointValue = valueDataList[0];\n         IFCData upperBoundValue = valueDataList.Count > 1 ? valueDataList[1] : null;\n         IFCData lowerBoundValue = valueDataList.Count > 2 ? valueDataList[2] : null;\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 && upperBoundValue == null && lowerBoundValue == null)\n         {\n            // In IFC2x3, IfcPropertyBoundedValue has no SetPointValue attribute and upper/lower values should satisfy the rule WR22 : EXISTS(UpperBoundValue) OR EXISTS(LowerBoundValue);\n            return IFCInstanceExporter.CreatePropertySingleValue(file, propertyDescription, setPointValue, null);\n         }\n         else\n         {\n            return IFCInstanceExporter.CreatePropertyBoundedValue(file, propertyDescription, lowerBoundValue, upperBoundValue, setPointValue, unitHnd);\n         }\n      }\n\n      /// <summary>\n      /// Creates an IfcPropertyTableValue.\n      /// </summary>\n      /// <param name=\"file\">The file.</param>\n      /// <param name=\"propertyName\">The name.</param>\n      /// <param name=\"definingValues\">The defining values of the property.</param>\n      /// <param name=\"definedValues\">The defined values of the property.</param>\n      /// <param name=\"definingUnitTypeKey\">Unit for the defining values.</param>\n      /// <param name=\"definedUnitTypeKey\">Unit for the defined values.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateTableProperty(IFCFile file, PropertyDescription propertyDescription, IList<IFCData> definingValues, IList<IFCData> definedValues, string definingUnitTypeKey, string definedUnitTypeKey)\n      {\n         IFCAnyHandle definingUnitHnd = (!ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView && definingUnitTypeKey != null) ? ExporterCacheManager.UnitsCache.FindUserDefinedUnit(definingUnitTypeKey) : null;\n         IFCAnyHandle definedUnitHnd = (!ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView && definedUnitTypeKey != null) ? ExporterCacheManager.UnitsCache.FindUserDefinedUnit(definedUnitTypeKey) : null;\n\n         return IFCInstanceExporter.CreatePropertyTableValue(file, propertyDescription, definingValues, definedValues, definingUnitHnd, definedUnitHnd);\n      }\n\n      /// <summary>\n      /// Create a label property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <param name=\"propertyEnumerationType\">The type of enumeration, if appropriate.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLabelProperty(IFCFile file, PropertyDescription propertyDescription, string value,\n         PropertyValueType valueType, Type propertyEnumerationType)\n      {\n         switch (valueType)\n         {\n            case PropertyValueType.EnumeratedValue:\n               {\n                  IList<IFCData> valueList = new List<IFCData>();\n\n                  if (string.IsNullOrEmpty(value))\n                     return null;\n\n                  bool hasOther = false;\n\n                  string[] subValues = value.Split(new char[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries);\n                  foreach (string item in subValues)\n                  {\n                     string validatedString = IFCDataUtil.ValidateEnumeratedValue(item, propertyEnumerationType);\n                     if (validatedString == null && !hasOther)\n                     {\n                        // Use other if it exists and we haven't already used it.\n                        validatedString = IFCDataUtil.ValidateEnumeratedValue(\"Other\", propertyEnumerationType);\n                        if (validatedString == null)\n                           continue;\n                        else\n                           hasOther = true;\n                     }\n\n                     valueList.Add(IFCDataUtil.CreateAsLabel(validatedString));\n                  }\n\n                  if (valueList.Count == 0)\n                     return null;\n\n                  return IFCInstanceExporter.CreatePropertyEnumeratedValue(file, propertyDescription, valueList, null);\n               }\n            case PropertyValueType.SingleValue:\n               {\n                  return IFCInstanceExporter.CreatePropertySingleValue(file, propertyDescription,\n                     IFCDataUtil.CreateAsLabel(value), null);\n               }\n            case PropertyValueType.ListValue:\n               {\n                  IList<IFCData> valueList = new List<IFCData>() { IFCDataUtil.CreateAsLabel(value) };\n                  return IFCInstanceExporter.CreatePropertyListValue(file, propertyDescription, valueList, null);\n               }\n            default:\n               throw new InvalidOperationException(\"Missing case!\");\n         }\n      }\n\n      /// <summary>\n      /// Create a text property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateTextProperty(IFCFile file, PropertyDescription propertyDescription, string value, PropertyValueType valueType)\n      {\n         IFCData textData = IFCDataUtil.CreateAsText(value);\n         return CreateCommonProperty(file, propertyDescription, textData, valueType, null);\n      }\n\n      /// <summary>\n      /// Create a text property, using the cached value if possible.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateTextPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, string value, PropertyValueType valueType)\n      {\n         bool canCache = (value == string.Empty);\n         StringPropertyInfoCache stringInfoCache = null;\n         IFCAnyHandle textHandle = null;\n\n         if (canCache)\n         {\n            stringInfoCache = ExporterCacheManager.PropertyInfoCache.TextCache;\n            textHandle = stringInfoCache.Find(null, propertyDescription.Name, value);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(textHandle))\n               return textHandle;\n         }\n\n         textHandle = CreateTextProperty(file, propertyDescription, value, valueType);\n\n         if (canCache)\n            stringInfoCache.Add(null, propertyDescription.Name, value, textHandle);\n\n         return textHandle;\n      }\n\n      /// <summary>\n      /// Create a text property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <param name=\"propertyEnumerationType\">The type of the enum, null if valueType isn't EnumeratedValue.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateTextPropertyFromElement(IFCFile file, Element elem, string revitParameterName, PropertyDescription propertyDescription, PropertyValueType valueType, Type propertyEnumerationType)\n      {\n         if (elem == null)\n            return null;\n\n         string propertyValue;\n         if (ParameterUtil.GetStringValueFromElement(elem, revitParameterName, out propertyValue) != null)\n            return CreateTextPropertyFromCache(file, propertyDescription, propertyValue, valueType);\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create a text property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <param name=\"propertyEnumerationType\">The type of the enum, null if valueType isn't EnumeratedValue.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateTextPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n         BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType, Type propertyEnumerationType)\n      {\n         // For Instance\n         IFCAnyHandle propHnd = CreateTextPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType,\n             propertyEnumerationType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateTextPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType, propertyEnumerationType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create a label property, using the cached value if possible.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"parameterId\">The id of the parameter that generated the value.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <param name=\"cacheAllStrings\">Whether to cache all strings (true), or only the empty string (false).</param>\n      /// <param name=\"propertyEnumerationType\">The type of the enum, null if valueType isn't EnumeratedValue.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLabelPropertyFromCache(IFCFile file, ElementId parameterId,\n         PropertyDescription propertyDescription, string value, PropertyValueType valueType, bool cacheAllStrings,\n         Type propertyEnumerationType)\n      {\n         bool canCache = (value == string.Empty) || cacheAllStrings;\n         StringPropertyInfoCache stringInfoCache = null;\n         IFCAnyHandle labelHandle = null;\n\n         string propertyName = propertyDescription.Name;\n         if (canCache)\n         {\n            stringInfoCache = ExporterCacheManager.PropertyInfoCache.LabelCache;\n            labelHandle = stringInfoCache.Find(parameterId, propertyName, value);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(labelHandle))\n               return labelHandle;\n         }\n\n         labelHandle = CreateLabelProperty(file, propertyDescription, value, valueType, propertyEnumerationType);\n\n         if (canCache)\n            stringInfoCache.Add(parameterId, propertyName, value, labelHandle);\n\n         return labelHandle;\n      }\n\n      /// <summary>\n      /// Create a label property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <param name=\"propertyEnumerationType\">The type of the enum, null if valueType isn't EnumeratedValue.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLabelProperty(IFCFile file, PropertyDescription propertyDescription, IList<string> values, PropertyValueType valueType,\n          Type propertyEnumerationType)\n      {\n         switch (valueType)\n         {\n            case PropertyValueType.EnumeratedValue:\n               {\n                  IList<IFCData> valueList = new List<IFCData>();\n                  foreach (string value in values)\n                  {\n                     valueList.Add(IFCDataUtil.CreateAsLabel(value));\n                  }\n                  return IFCInstanceExporter.CreatePropertyEnumeratedValue(file, propertyDescription, valueList, null);\n               }\n            case PropertyValueType.ListValue:\n               {\n                  IList<IFCData> valueList = new List<IFCData>();\n                  foreach (string value in values)\n                  {\n                     valueList.Add(IFCDataUtil.CreateAsLabel(value));\n                  }\n                  return IFCInstanceExporter.CreatePropertyListValue(file, propertyDescription, valueList, null);\n               }\n            default:\n               throw new InvalidOperationException(\"Missing case!\");\n         }\n      }\n\n      /// <summary>\n      /// Create an identifier property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateIdentifierProperty(IFCFile file, PropertyDescription propertyDescription, string value, PropertyValueType valueType)\n      {\n         IFCData idData = IFCDataUtil.CreateAsIdentifier(value);\n         return CreateCommonProperty(file, propertyDescription, idData, valueType, null);\n      }\n\n      /// <summary>\n      /// Create an identifier property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateIdentifierPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, string value, PropertyValueType valueType)\n      {\n         StringPropertyInfoCache stringInfoCache = ExporterCacheManager.PropertyInfoCache.IdentifierCache;\n         string propertyName = propertyDescription.Name;\n         IFCAnyHandle stringHandle = stringInfoCache.Find(null, propertyName, value);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(stringHandle))\n            return stringHandle;\n\n         stringHandle = CreateIdentifierProperty(file, propertyDescription, value, valueType);\n\n         stringInfoCache.Add(null, propertyName, value, stringHandle);\n         return stringHandle;\n      }\n\n      /// <summary>\n      /// Create a boolean property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateBooleanProperty(IFCFile file, PropertyDescription propertyDescription, bool value, PropertyValueType valueType)\n      {\n         IFCData boolData = IFCDataUtil.CreateAsBoolean(value);\n         return CreateCommonProperty(file, propertyDescription, boolData, valueType, null);\n      }\n\n      /// <summary>\n      /// Create a logical property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLogicalProperty(IFCFile file, PropertyDescription propertyDescription, IFCLogical value, PropertyValueType valueType)\n      {\n         IFCData logicalData = IFCDataUtil.CreateAsLogical(value);\n         return CreateCommonProperty(file, propertyDescription, logicalData, valueType, null);\n      }\n\n      /// <summary>\n      /// Create a boolean property or gets one from cache.\n      /// </summary>\n      /// <param name=\"file\">The file.</param>\n      /// <param name=\"propertyName\">The property name.</param>\n      /// <param name=\"value\">The value.</param>\n      /// <param name=\"valueType\">The value type.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateBooleanPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, bool value, PropertyValueType valueType)\n      {\n         BooleanPropertyInfoCache boolInfoCache = ExporterCacheManager.PropertyInfoCache.BooleanCache;\n         string propertyName = propertyDescription.Name;\n         IFCAnyHandle boolHandle = boolInfoCache.Find(propertyName, value);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(boolHandle))\n            return boolHandle;\n\n         boolHandle = CreateBooleanProperty(file, propertyDescription, value, valueType);\n         boolInfoCache.Add(propertyName, value, boolHandle);\n         return boolHandle;\n      }\n\n      /// <summary>\n      /// Create a logical property or gets one from cache.\n      /// </summary>\n      /// <param name=\"file\">The file.</param>\n      /// <param name=\"propertyName\">The property name.</param>\n      /// <param name=\"value\">The value.</param>\n      /// <param name=\"valueType\">The value type.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLogicalPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IFCLogical value, PropertyValueType valueType)\n      {\n         LogicalPropertyInfoCache logicalInfoCache = ExporterCacheManager.PropertyInfoCache.LogicalCache;\n         string propertyName = propertyDescription.Name;\n         IFCAnyHandle logicalHandle = logicalInfoCache.Find(propertyName, value);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(logicalHandle))\n            return logicalHandle;\n\n         logicalHandle = CreateLogicalProperty(file, propertyDescription, value, valueType);\n         logicalInfoCache.Add(propertyName, value, logicalHandle);\n         return logicalHandle;\n      }\n\n      /// <summary>\n      /// Create an integer property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateIntegerProperty(IFCFile file, PropertyDescription propertyDescription, int value, PropertyValueType valueType)\n      {\n         IFCData intData = IFCDataUtil.CreateAsInteger(value);\n         return CreateCommonProperty(file, propertyDescription, intData, valueType, null);\n      }\n\n      /// <summary>\n      /// Create an integer property or gets one from cache.\n      /// </summary>\n      /// <param name=\"file\">The file.</param>\n      /// <param name=\"propertyName\">The property name.</param>\n      /// <param name=\"value\">The value.</param>\n      /// <param name=\"valueType\">The value type.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateIntegerPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, int value, PropertyValueType valueType)\n      {\n         bool canCache = (value >= -10 && value <= 10);\n         IFCAnyHandle intHandle = null;\n         string propertyName = propertyDescription.Name;\n         IntegerPropertyInfoCache intInfoCache = null;\n         if (canCache)\n         {\n            intInfoCache = ExporterCacheManager.PropertyInfoCache.IntegerCache;\n            intHandle = intInfoCache.Find(propertyName, value);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(intHandle))\n               return intHandle;\n         }\n\n         intHandle = CreateIntegerProperty(file, propertyDescription, value, valueType);\n         if (canCache)\n         {\n            intInfoCache.Add(propertyName, value, intHandle);\n         }\n         return intHandle;\n      }\n\n      internal static double? CanCacheDouble(double value)\n      {\n         // We have a partial cache here\n         // Cache multiples of +/- 0.05 up to 10.\n         // Cache multiples of +/- 0.5 up to 300.\n         // Cache multiples of +/- 5 reset.\n\n         if (MathUtil.IsAlmostZero(value))\n            return 0.0;\n\n         double multiplier = 5.0;\n         if (Math.Abs(value) <= 10.0 + MathUtil.Eps())\n            multiplier = 0.05;\n         else if (Math.Abs(value) <= 300.0 + MathUtil.Eps())\n            multiplier = 0.5;\n\n         double valueCorrected = Math.Floor(value / multiplier + MathUtil.Eps());\n         if (MathUtil.IsAlmostZero(value / multiplier - valueCorrected))\n            return valueCorrected * multiplier;\n\n         return null;\n      }\n\n      /// <summary>Create a count measure property.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateCountMeasureProperty(IFCFile file, PropertyDescription propertyDescription, double value, PropertyValueType valueType)\n      {\n         IFCData countData = IFCDataUtil.CreateAsCountMeasure(value);\n         return CreateCommonProperty(file, propertyDescription, countData, valueType, null);\n      }\n\n      /// <summary>Create a count measure property. From IFC4x3 onward the value has been changed to Integer</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateCountMeasureProperty(IFCFile file, PropertyDescription propertyDescription, int value, PropertyValueType valueType)\n      {\n         IFCData countData = IFCDataUtil.CreateAsCountMeasure(value);\n         return CreateCommonProperty(file, propertyDescription, countData, valueType, null);\n      }\n\n      /// <summary>Create a ClassificationReference property.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateClassificationReferenceProperty(IFCFile file, PropertyDescription propertyDescription, string value)\n      {\n         IFCAnyHandle classificationReferenceHandle =\n            IFCInstanceExporter.CreateClassificationReference(file, null, value, null, null, null);\n         return IFCInstanceExporter.CreatePropertyReferenceValue(file, propertyDescription, null, classificationReferenceHandle);\n      }\n\n      /// <summary>\n      /// Create a Time measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateTimePropertyFromElement(IFCFile file, Element elem,\n          string revitParameterName, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         return CreateDoublePropertyFromElement(file, elem, revitParameterName, propertyDescription,\n            \"IfcTimeMeasure\", SpecTypeId.Time, valueType);\n      }\n\n      public static IFCAnyHandle CreateUserDefinedRealPropertyFromElement(IFCFile file, Element elem,\n         string revitParameterName, PropertyDescription propertyDescription, PropertyValueType valueType, ForgeTypeId specType, string unitTypeKey)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, specType, valueType);\n         return CreateRealProperty(file, propertyDescription, doubleValues, valueType, unitTypeKey);\n      }\n\n      /// <summary>\n      /// Create a currency measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"exporterIFC\">The ExporterIFC.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property.  Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateCurrencyPropertyFromElement(IFCFile file, ExporterIFC exporterIFC, Element elem,\n          string revitParameterName, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         string measureName = ExporterCacheManager.UnitsCache.ContainsKey(\"CURRENCY\") ? \"IfcMonetaryMeasure\" : \"IfcReal\";\n\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Number, valueType);\n         return CreateRealProperty(file, propertyDescription, doubleValues, valueType, measureName);\n      }\n\n      public static IFCAnyHandle CreateUserDefinedRealPropertyFromElement(IFCFile file, Element elem,\n          string revitParameterName, BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType, ForgeTypeId specType, string unitTypeKey)\n      {\n         IFCAnyHandle propHnd = CreateUserDefinedRealPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType, specType, unitTypeKey);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateUserDefinedRealPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType, specType, unitTypeKey);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create a currency property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"exporterIFC\">The ExporterIFC.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use, if revitParameterName isn't found.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateCurrencyPropertyFromElement(IFCFile file, ExporterIFC exporterIFC, Element elem,\n          string revitParameterName, BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateCurrencyPropertyFromElement(file, exporterIFC, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateCurrencyPropertyFromElement(file, exporterIFC, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create a Time property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use, if revitParameterName isn't found.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateTimePropertyFromElement(IFCFile file, Element elem,\n          string revitParameterName, BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateTimePropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateTimePropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create an IfcClassificationReference property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"exporterIFC\">The ExporterIFC.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateClassificationReferencePropertyFromElement(IFCFile file, ExporterIFC exporterIFC, Element elem,\n          string revitParameterName, PropertyDescription propertyDescription)\n      {\n         if (elem == null)\n            return null;\n\n         string propertyValue;\n         if (ParameterUtil.GetStringValueFromElement(elem, revitParameterName, out propertyValue) != null)\n            return CreateClassificationReferenceProperty(file, propertyDescription, propertyValue);\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create a generic measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"exporterIFC\">The ExporterIFC.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"measureType\">The IfcMeasure type of the property.</param>\n      /// <param name=\"specTypeId\">Identifier of the property spec.</param>\n      /// <param name=\"valueType\">The property value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      private static IFCAnyHandle CreateDoublePropertyFromElement(IFCFile file, Element elem,\n          string revitParameterName, PropertyDescription propertyDescription, string measureType, ForgeTypeId specTypeId, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, specTypeId, valueType);\n\n         IList<IFCData> doubleData = new List<IFCData>();\n         foreach (var val in doubleValues)\n            doubleData.Add(val.HasValue ? IFCData.CreateDoubleOfType(val.Value, measureType) : null);\n\n         return CreateCommonPropertyFromList(file, propertyDescription, doubleData, valueType, null);\n      }\n\n      /// <summary>\n      /// Create an IfcClassificationReference property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"exporterIFC\">The ExporterIFC.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use, if revitParameterName isn't found.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateClassificationReferencePropertyFromElement(IFCFile file, ExporterIFC exporterIFC, Element elem,\n          string revitParameterName, BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription)\n      {\n         IFCAnyHandle propHnd = CreateClassificationReferencePropertyFromElement(file, exporterIFC, elem, revitParameterName, propertyDescription);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateClassificationReferencePropertyFromElement(file, exporterIFC, elem, builtInParamName, propertyDescription);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create a label property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <param name=\"propertyEnumerationType\">The type of the enum, null if valueType isn't EnumeratedValue.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLabelPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n         PropertyDescription propertyDescription, PropertyValueType valueType, Type propertyEnumerationType)\n      {\n         if (elem == null)\n         {\n            return null;\n         }\n\n         string propertyValue;\n         Parameter parameter = GetStringValueFromElement(elem, revitParameterName, out propertyValue);\n         if (parameter != null)\n         {\n            return CreateLabelPropertyFromCache(file, parameter.Id, propertyDescription, propertyValue, valueType, false, propertyEnumerationType);\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create a label property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <param name=\"propertyEnumerationType\">The type of the enum, null if valueType isn't EnumeratedValue.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLabelPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n         BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType, Type propertyEnumerationType)\n      {\n         // For Instance\n         IFCAnyHandle propHnd = CreateLabelPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType,\n             propertyEnumerationType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateLabelPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType, propertyEnumerationType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create an identifier property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateIdentifierPropertyFromElement(IFCFile file, Element elem, string revitParameterName, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         if (elem == null)\n            return null;\n\n         string propertyValue;\n         if (ParameterUtil.GetStringValueFromElement(elem, revitParameterName, out propertyValue) != null)\n            return CreateIdentifierPropertyFromCache(file, propertyDescription, propertyValue, valueType);\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create an identifier property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateIdentifierPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n         BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         // For Instance\n         IFCAnyHandle propHnd = CreateIdentifierPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateIdentifierPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create a boolean property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property.  Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateBooleanPropertyFromElement(IFCFile file, Element elem,\n         string revitParameterName, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         int propertyValue;\n         if (ParameterUtil.GetIntValueFromElement(elem, revitParameterName, out propertyValue) != null)\n            return CreateBooleanPropertyFromCache(file, propertyDescription, propertyValue != 0, valueType);\n         if (ParameterUtil.GetIntValueFromElement(elem, propertyDescription.Name, out propertyValue) != null)\n            return CreateBooleanPropertyFromCache(file, propertyDescription, propertyValue != 0, valueType);\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create a logical property from the element's or type's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLogicalPropertyFromElement(IFCFile file, Element elem,\n         string revitParameterName, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCLogical ifcLogical = IFCLogical.Unknown;\n         int propertyValue;\n         if (ParameterUtil.GetIntValueFromElement(elem, revitParameterName, out propertyValue) != null)\n         {\n            ifcLogical = propertyValue != 0 ? IFCLogical.True : IFCLogical.False;\n         }\n\n         return CreateLogicalPropertyFromCache(file, propertyDescription, ifcLogical, valueType);\n      }\n\n      /// <summary>\n      /// Create an integer property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateIntegerPropertyFromElement(IFCFile file, Element elem,\n         string revitParameterName, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         int propertyValue;\n         if (ParameterUtil.GetIntValueFromElement(elem, revitParameterName, out propertyValue) != null)\n            return CreateIntegerPropertyFromCache(file, propertyDescription, propertyValue, valueType);\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create a ratio measure data from string value.\n      /// </summary>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <returns>The created property data.</returns>\n      public static IFCData CreateRatioMeasureDataFromString(string value)\n      {\n         double propertyValue;\n         if (Double.TryParse(value, out propertyValue))\n            return IFCDataUtil.CreateRatioMeasureData(propertyValue);\n\n         return null;\n      }\n\n\n\n      /// <summary>\n      /// Create a normalised ratio measure data from string value.\n      /// </summary>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <returns>The created property data.</returns>\n      public static IFCData CreateNormalisedRatioMeasureDataFromString(string value)\n      {\n         double propertyValue;\n         if (Double.TryParse(value, out propertyValue))\n            return IFCDataUtil.CreateNormalisedRatioMeasureData(propertyValue);\n\n         return null;\n      }\n\n\n      /// <summary>\n      /// Create a positive ratio measure data from string value.\n      /// </summary>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <returns>The created property data.</returns>\n      public static IFCData CreatePositiveRatioMeasureDataFromString(string value)\n      {\n         double propertyValue;\n         if (Double.TryParse(value, out propertyValue))\n            return IFCDataUtil.CreatePositiveRatioMeasureData(propertyValue);\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create a count measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"exporterIFC\">The ExporterIFC.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateCountMeasurePropertyFromElement(IFCFile file, ExporterIFC exporterIFC, Element elem,\n          string revitParameterName, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         int propertyValue;\n         double propertyValueReal;\n         if (ParameterUtil.GetDoubleValueFromElement(elem, revitParameterName, out propertyValueReal) != null)\n         {\n            if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4x3)\n            {\n               return CreateCountMeasureProperty(file, propertyDescription, propertyValueReal, valueType);\n            }\n            else if (MathUtil.IsAlmostInteger(propertyValueReal))\n            {\n               propertyValue = (int)Math.Floor(propertyValueReal);\n               return CreateCountMeasureProperty(file, propertyDescription, propertyValue, valueType);\n            }\n         }\n\n         if (ParameterUtil.GetIntValueFromElement(elem, revitParameterName, out propertyValue) != null)\n            return CreateCountMeasureProperty(file, propertyDescription, propertyValue, valueType);\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create a count measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"exporterIFC\">The ExporterIFC.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use, if revitParameterName isn't found.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateCountMeasurePropertyFromElement(IFCFile file, ExporterIFC exporterIFC, Element elem,\n          string revitParameterName, BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateCountMeasurePropertyFromElement(file, exporterIFC, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateCountMeasurePropertyFromElement(file, exporterIFC, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Gets the appropriate quantity name for pre-IFC4 versions based on the export version and quantity set.\n      /// </summary>\n      /// <param name=\"ifcVersion\">The IFC version being exported to.</param>\n      /// <param name=\"quantitySetName\">The IFC quantity set name.</param>\n      /// <param name=\"ifc4QuantityName\">The IFC4 quantity name to map.</param>\n      /// <returns>The mapped quantity name for the specified IFC version, or the original name if exporting to IFC4+.</returns>\n      public static string GetPreIfc4QuantityNameIfNeeded(string quantitySetName, string ifc4QuantityName)\n      {\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\n            return ifc4QuantityName;\n\n         IFCVersion mapVersion = IFCVersion.Default;\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2)\n            mapVersion = IFCVersion.IFC2x2;\n         else if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3)\n            mapVersion = IFCVersion.IFC2x3;\n         else\n            return null;\n\n         if (!PreIFC4QuantityNamesMap.TryGetValue(mapVersion, out var versionMap))\n            return null;\n\n         var key = (quantitySetName, ifc4QuantityName);\n         if (versionMap.TryGetValue(key, out var mappedName))\n            return mappedName;\n\n         return null;\n      }\n\n      /// <summary>\n      /// Retrieves a double value from a Revit element's parameter for IFC quantity export.\n      /// Uses custom parameter mappings if provided, otherwise defaults to \"{quantitySetName}.{quantityName}\" format.\n      /// </summary>\n      /// <param name=\"element\">The Revit element to extract the parameter value from.</param>\n      /// <param name=\"quantitySetName\">The IFC quantity set name.</param>\n      /// <param name=\"quantityName\">The specific quantity name.</param>\n      /// <param name=\"mappingInfo\">Optional custom parameter mapping information.</param>\n      /// <param name=\"quantityType\">The quantity type for proper unit scaling.</param>\n      /// <param name=\"value\">The extracted and scaled parameter value.</param>\n      /// <returns>True if a valid parameter value was found; false otherwise.</returns>\n      public static bool GetQuantityDoubleValueFromMappedOrDefaultParameter(Element element, string quantitySetName,\n         string quantityName, IFCPropertyMappingInfo mappingInfo, QuantityType quantityType, out double value)\n      {\n         string parameterName = (mappingInfo != null) ? \n            mappingInfo.RevitPropertyName :\n            string.Format(\"{0}.{1}\", quantitySetName, quantityName);\n\n         BuiltInParameter paraemterId = (mappingInfo != null) ? \n            (BuiltInParameter)mappingInfo.RevitPropertyId.Value : \n            BuiltInParameter.INVALID;\n\n         return GetQuantityDoubleValueFromParameter(element, parameterName, paraemterId, quantityType, out value);\n      }\n\n      /// <summary>\n      /// Creates the shared beam and column QTO values.  \n      /// </summary>\n      /// <remarks>\n      /// This code uses the native implementation for creating these quantities, and the native class for storing the information.\n      /// This will be obsoleted.\n      /// </remarks>\n      /// <param name=\"exporterIFC\">The exporter.</param>\n      /// <param name=\"elemHandle\">The element handle.</param>\n      /// <param name=\"element\">The beam or column element.</param>\n      /// <param name=\"typeInfo\">The FamilyTypeInfo containing the appropriate data.</param>\n      /// <param name=\"geomObjects\">The list of geometries for the exported column only, used if split walls and columns is set.</param>\n      /// <remarks>The geomObjects is used if we have the split by level option.  It is intended only for columns, as beams and members are not split by level.  \n      /// In this case, we use the solids in the list to determine the real volume of the exported objects. If the list contains meshes, we won't export the volume at all.</remarks>\n      public static void CreateBeamColumnBaseQuantities(ExporterIFC exporterIFC, IFCAnyHandle elemHandle, Element element, FamilyTypeInfo typeInfo, IList<GeometryObject> geomObjects)\n      {\n         // Make sure QTO export is enabled.\n         if (!ExporterCacheManager.ExportIFCBaseQuantities() || (ExporterCacheManager.ExportOptionsCache.ExportAsCOBIE))\n            return;\n\n         string quantitySetName = string.Empty;\n         if (IFCAnyHandleUtil.IsSubTypeOf(elemHandle, IFCEntityType.IfcColumn))\n            quantitySetName = \"Qto_ColumnBaseQuantities\";\n         else if (IFCAnyHandleUtil.IsSubTypeOf(elemHandle, IFCEntityType.IfcBeam))\n            quantitySetName = \"Qto_BeamBaseQuantities\";\n         else if (IFCAnyHandleUtil.IsSubTypeOf(elemHandle, IFCEntityType.IfcMember))\n            quantitySetName = \"Qto_MemberBaseQuantities\";\n\n         string revitPropertyName = string.Empty;\n\n         PropertySetupType propertySetup = PropertySetupType.IfcBaseQuantities;\n         if (IsPropertySetExcluded(propertySetup, quantitySetName))\n            return;\n\n         IFCFile file = exporterIFC.GetFile();\n         HashSet<IFCAnyHandle> quantityHnds = new();\n         double scaledLength = typeInfo.extraParams.ScaledLength;\n         //According to investigation of current code the passed in typeInfo contains grossArea\n         double scaledGrossArea = typeInfo.extraParams.ScaledArea;\n         double crossSectionArea = scaledGrossArea;\n         double scaledOuterPerimeter = typeInfo.extraParams.ScaledOuterPerimeter;\n         double scaledInnerPerimeter = typeInfo.extraParams.ScaledInnerPerimeter;\n         double outSurfaceArea = 0.0;\n         double dblVal = 0.0;\n\n         // Length     \n         string quantityName = GetPreIfc4QuantityNameIfNeeded(quantitySetName, \"Length\");\n         IFCPropertyMappingInfo info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n         if (!string.IsNullOrEmpty(quantityName) && (info?.ExportFlag ?? true))\n         {\n            bool valueFound = GetQuantityDoubleValueFromMappedOrDefaultParameter(element, quantitySetName, quantityName,\n               info, QuantityType.Length, out dblVal);\n\n            if (!valueFound)\n            {\n               if (scaledLength > MathUtil.Eps())\n               {\n                  dblVal = scaledLength;\n                  valueFound = true;\n               }\n            }\n\n            if (valueFound)\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityLength(file, quantityName, null, null, dblVal);\n               quantityHnds.Add(quantityHnd);\n            }\n         }\n\n         // CrossSectionArea         \n         quantityName = GetPreIfc4QuantityNameIfNeeded(quantitySetName, \"CrossSectionArea\");\n         info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n         if (!string.IsNullOrEmpty(quantityName) && (info?.ExportFlag ?? true))\n         {\n            bool valueFound = GetQuantityDoubleValueFromMappedOrDefaultParameter(element, quantitySetName, quantityName,\n               info, QuantityType.Area, out dblVal);\n\n            if (!valueFound)\n            {\n               if (MathUtil.AreaIsAlmostZero(crossSectionArea) && element != null)\n               {\n                  GetDoubleValueFromElement(element, BuiltInParameter.HOST_AREA_COMPUTED, out crossSectionArea);\n                  crossSectionArea = UnitUtil.ScaleArea(crossSectionArea);\n               }\n\n               if (!MathUtil.AreaIsAlmostZero(crossSectionArea))\n               {\n                  dblVal = crossSectionArea;\n                  valueFound = true;\n               }\n            }\n\n            if (valueFound)\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityArea(file, quantityName, null, null, dblVal);\n               quantityHnds.Add(quantityHnd);\n            }\n         }\n\n         // OuterSurfaceArea\n         quantityName = GetPreIfc4QuantityNameIfNeeded(quantitySetName, \"OuterSurfaceArea\");\n         info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n         if (!string.IsNullOrEmpty(quantityName) && (info?.ExportFlag ?? true))\n         {\n            bool valueFound = GetQuantityDoubleValueFromMappedOrDefaultParameter(element, quantitySetName, quantityName,\n               info, QuantityType.Area, out dblVal);\n\n            if (!valueFound)\n            {\n               if (!MathUtil.AreaIsAlmostZero(scaledGrossArea) && !MathUtil.IsAlmostZero(scaledLength) && !MathUtil.IsAlmostZero(scaledOuterPerimeter))\n               {\n                  double scaledPerimeter = scaledOuterPerimeter + scaledInnerPerimeter;\n                  //According to the IFC documentation, OuterSurfaceArea does not include the end caps area, only Length * Perimeter\n                  dblVal = UnitUtil.ScaleArea(UnitUtil.UnscaleLength(scaledLength) * UnitUtil.UnscaleLength(scaledPerimeter));\n                  valueFound = true;\n               }\n            }\n\n            if (valueFound)\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityArea(file, quantityName, null, null, dblVal);\n               quantityHnds.Add(quantityHnd);\n            }\n         }\n\n         // GrossSurfaceArea\n         quantityName = GetPreIfc4QuantityNameIfNeeded(quantitySetName, \"GrossSurfaceArea\");\n         info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n         if (!string.IsNullOrEmpty(quantityName) && (info?.ExportFlag ?? true))\n         {\n            bool valueFound = GetQuantityDoubleValueFromMappedOrDefaultParameter(element, quantitySetName, quantityName,\n               info, QuantityType.Area, out dblVal);\n\n            if (!valueFound)\n            {\n               if (MathUtil.AreaIsAlmostZero(crossSectionArea) && MathUtil.AreaIsAlmostZero(outSurfaceArea))\n               {\n                  double scaledPerimeter = scaledOuterPerimeter + scaledInnerPerimeter;\n                  dblVal = scaledGrossArea * 2 + UnitUtil.ScaleArea(UnitUtil.UnscaleLength(scaledLength) * UnitUtil.UnscaleLength(scaledPerimeter));\n                  valueFound = true;\n               }\n            }\n\n            if (valueFound)\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityArea(file, quantityName, null, null, dblVal);\n               quantityHnds.Add(quantityHnd);\n            }\n         }\n\n         // GrossVolume\n         quantityName = \"GrossVolume\";\n         info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n         if (info?.ExportFlag ?? true)\n         {\n            bool valueFound = GetQuantityDoubleValueFromMappedOrDefaultParameter(element, quantitySetName, quantityName,\n               info, QuantityType.Volume, out dblVal);\n\n            if (!valueFound)\n            {\n               double grossVolume = UnitUtil.ScaleVolume(UnitUtil.UnscaleLength(scaledLength) * UnitUtil.UnscaleArea(scaledGrossArea));\n               if (!MathUtil.VolumeIsAlmostZero(grossVolume))\n               {\n                  dblVal = grossVolume;\n                  valueFound = true;\n               }\n            }\n\n            if (valueFound)\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityVolume(file, quantityName, null, null, dblVal);\n               quantityHnds.Add(quantityHnd);\n            }\n         }\n\n         // NetVolume\n         quantityName = GetPreIfc4QuantityNameIfNeeded(quantitySetName, \"NetVolume\");\n         info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n         if (!string.IsNullOrEmpty(quantityName) && (info?.ExportFlag ?? true))\n         {\n            bool valueFound = GetQuantityDoubleValueFromMappedOrDefaultParameter(element, quantitySetName, quantityName,\n               info, QuantityType.Volume, out dblVal);\n\n            if (!valueFound)\n            {\n               double netVolume = 0.0;\n               if (element != null)\n               {\n                  // If we are splitting columns, we will look at the actual geometry used when exporting this segment\n                  // of the column, but only if we have the geomObjects passed in.\n                  if (geomObjects != null && ExporterCacheManager.ExportOptionsCache.WallAndColumnSplitting)\n                  {\n                     foreach (GeometryObject geomObj in geomObjects)\n                     {\n                        // We don't suport calculating the volume of Meshes at this time.\n                        if (geomObj is Mesh)\n                        {\n                           netVolume = 0.0;\n                           break;\n                        }\n\n                        if (geomObj is Solid)\n                           netVolume += (geomObj as Solid).Volume;\n                     }\n                  }\n                  else\n                  {\n                     GetDoubleValueFromElement(element, BuiltInParameter.HOST_VOLUME_COMPUTED, out netVolume);\n                  }\n                  netVolume = UnitUtil.ScaleVolume(netVolume);\n\n                  if (!MathUtil.VolumeIsAlmostZero(netVolume))\n                  {\n                     dblVal = netVolume;\n                     valueFound = true;\n                  }\n               }\n            }\n\n            if (valueFound)\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityVolume(file, quantityName, null, null, dblVal);\n               quantityHnds.Add(quantityHnd);\n            }\n         }\n\n         string quantitySetNameToUse = ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 ? null : quantitySetName;\n         CreateAndRelateBaseQuantities(file, exporterIFC, elemHandle, quantityHnds, quantitySetNameToUse);\n      }\n\n      /// <summary>\n      /// Creates the spatial element quantities required by GSA before COBIE and adds them to the export.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The exporter.</param>\n      /// <param name=\"elemHnd\">The element handle.</param>\n      /// <param name=\"quantityName\">The quantity name.</param>\n      /// <param name=\"areaName\">The area name.</param>\n      /// <param name=\"area\">The area.</param>\n      public static void CreatePreCOBIEGSAQuantities(ExporterIFC exporterIFC, IFCAnyHandle elemHnd, string quantityName, string areaName, double area)\n      {\n         IFCFile file = exporterIFC.GetFile();\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\n         IFCAnyHandle areaQuantityHnd = IFCInstanceExporter.CreateQuantityArea(file, quantityName, null, null, area);\n         HashSet<IFCAnyHandle> areaQuantityHnds = new HashSet<IFCAnyHandle>();\n         areaQuantityHnds.Add(areaQuantityHnd);\n\n         PropertyUtil.CreateAndRelateBaseQuantities(file, exporterIFC, elemHnd, areaQuantityHnds, quantityName, null, areaName);\n      }\r\n\r\n      /// <summary>\n      /// Creates the opening quantities and adds them to the export.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The exporter.</param>\n      /// <param name=\"openingElement\">The opening element handle.</param>\n      /// <param name=\"extraParams\">The extrusion creation data.</param>\n      public static void CreateOpeningQuantities(ExporterIFC exporterIFC, IFCAnyHandle openingElement, IFCExportBodyParams extraParams)\n      {\r\n         CreateOpeningQuantities(exporterIFC, openingElement, \r\n            extraParams.ScaledLength, extraParams.ScaledHeight, extraParams.ScaledWidth, extraParams.ScaledArea);\r\n      }\r\n\n      /// <summary>\n      /// Creates the opening quantities and adds them to the export.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The exporter.</param>\n      /// <param name=\"openingElement\">The opening element handle.</param>\n      public static void CreateOpeningQuantities(ExporterIFC exporterIFC, IFCAnyHandle openingElement, \r\n         double depth, double height, double width, double area)\n      {\n         string quantitySetName = \"Qto_OpeningElementBaseQuantities\";\n         PropertySetupType propertySetup = PropertySetupType.IfcBaseQuantities;\n         if (IsPropertySetExcluded(propertySetup, quantitySetName))\n            return;\n\n         IFCFile file = exporterIFC.GetFile();\n         HashSet<IFCAnyHandle> quantityHnds = new();\n\n         // Depth\n         string quantityName = GetPreIfc4QuantityNameIfNeeded(quantitySetName, \"Depth\");\n         IFCPropertyMappingInfo info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n         if (!string.IsNullOrEmpty(quantityName) && (info?.ExportFlag ?? true))\n         {\n            if (depth > MathUtil.Eps())\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityLength(file, quantityName, null, null, depth);\n               quantityHnds.Add(quantityHnd);\n            }\n         }\n         \n         if (height > MathUtil.Eps())\n         {\n            // Height\n            quantityName = GetPreIfc4QuantityNameIfNeeded(quantitySetName, \"Height\");\n            info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n            if (!string.IsNullOrEmpty(quantityName) && (info?.ExportFlag ?? true))\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityLength(file, quantityName, null, null, height);\n               quantityHnds.Add(quantityHnd);\n            }\n\n            // Width\n            quantityName = GetPreIfc4QuantityNameIfNeeded(quantitySetName, \"Width\");\n            info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n            if (!string.IsNullOrEmpty(quantityName) && (info?.ExportFlag ?? true))\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityLength(file, quantityName, null, null, width);\n               quantityHnds.Add(quantityHnd);\n            }\n         }\r\n\r\n         // Area\r\n         bool exportArea = true;\r\n         if (area < MathUtil.Eps())\r\n         {\r\n            if (height > MathUtil.Eps() && width > MathUtil.Eps())\r\n               area = height * width;\r\n            else\r\n               exportArea = false;\r\n         }\n         \r\n         if (exportArea)\n         {\n            quantityName = GetPreIfc4QuantityNameIfNeeded(quantitySetName, \"Area\");\n            info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n            if (!string.IsNullOrEmpty(quantityName) && (info?.ExportFlag ?? true))\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityArea(file, quantityName, null, null, area);\n               quantityHnds.Add(quantityHnd);\n            }\n         }\r\n\r\n         // Volume\r\n         double volume = area * depth;\r\n         if (volume > MathUtil.Eps())\n         {\r\n            quantityName = GetPreIfc4QuantityNameIfNeeded(quantitySetName, \"Volume\");\n            info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n            if (!string.IsNullOrEmpty(quantityName) && (info?.ExportFlag ?? true))\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityVolume(file, quantityName, null, null, volume);\n               quantityHnds.Add(quantityHnd);\n            }\n         }\n\n         string quantitySetNameToUse = ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 ? null : quantitySetName;\n         CreateAndRelateBaseQuantities(file, exporterIFC, openingElement, quantityHnds, quantitySetNameToUse);\n      }\n\n      /// <summary>\n      /// Creates and caches area and volume base quantities for slabs.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The exporter.</param>\n      /// <param name=\"slabHnd\">The slab handle.</param>\n      /// <param name=\"extrusionData\">The IFCExportBodyParams containing the slab extrusion creation data.</param>\n      /// <param name=\"outerCurveLoop\">The slab outer loop.</param>\n      public static void CreateSlabBaseQuantities(ExporterIFC exporterIFC, IFCAnyHandle slabHnd, IFCExportBodyParams extrusionData, CurveLoop outerCurveLoop)\n      {\n         if (extrusionData != null)\n         {\n            IFCFile file = exporterIFC.GetFile();\n            HashSet<IFCAnyHandle> quantityHnds = new HashSet<IFCAnyHandle>();\n\n            double netArea = extrusionData.ScaledArea;\n            if (!MathUtil.IsAlmostZero(netArea))\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityArea(file, \"NetArea\", null, null, netArea);\n               quantityHnds.Add(quantityHnd);\n            }\n\n            //The length, area and volume may have different base length units, it safer to unscale and rescale the results.\n            double unscaledArea = UnitUtil.UnscaleArea(netArea);\n            double unscaledLength = UnitUtil.UnscaleLength(extrusionData.ScaledLength);\n            double netVolume = UnitUtil.ScaleVolume(unscaledArea * unscaledLength);\n            if (!MathUtil.IsAlmostZero(netVolume))\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityVolume(file, \"NetVolume\", null, null, netVolume);\n               quantityHnds.Add(quantityHnd);\n            }\n\n            if (outerCurveLoop != null)\n            {\n               double unscaledSlabGrossArea = ExporterIFCUtils.ComputeAreaOfCurveLoops(new List<CurveLoop>() { outerCurveLoop });\n               double scaledSlabGrossArea = UnitUtil.ScaleArea(unscaledSlabGrossArea);\n               if (!MathUtil.IsAlmostZero(scaledSlabGrossArea))\n               {\n                  IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityArea(file, \"GrossArea\", null, null, scaledSlabGrossArea);\n                  quantityHnds.Add(quantityHnd);\n               }\n\n               double grossVolume = UnitUtil.ScaleVolume(unscaledArea * unscaledLength);\n               if (!MathUtil.IsAlmostZero(grossVolume))\n               {\n                  IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityVolume(file, \"GrossVolume\", null, null, grossVolume);\n                  quantityHnds.Add(quantityHnd);\n               }\n            }\n\n            ExporterCacheManager.BaseQuantitiesCache.Add(slabHnd, quantityHnds);\n         }\n      }\n\n      /// <summary>\n      /// Determines whether the given parameter requires scaling.\n      /// </summary>\n      /// <param name=\"param\">The parameter to check.</param>\n      /// <returns>True if the parameter requires scaling; otherwise, false.</returns>\n      public static bool IsParameterScalingRequired(Parameter param)\n      {\n         // Exclude parameters that are of type SpecTypeId.Number.\n         if (ParameterUtil.ParameterDataTypeIsEqualTo(param, SpecTypeId.Number))\n            return false;\n\n         // The built-in \"TotalWattage\" parameter is stored as a string in Revit, likely in the current units, and does not require additional scaling.\n         if (param.Id.Value == (long)BuiltInParameter.LIGHTING_FIXTURE_WATTAGE)\n            return false;\n\n         return true;\n      }\n\n      /// <summary>\n      /// Checks whether the property set is excluded from export.\n      /// </summary>\n      /// <param name=\"propertySetupType\">The property setup type.</param>\n      /// <param name=\"psetName\">The property set name.</param>\n      /// <returns>True is the property set is exists in mapping template and unchecked.</returns>\n      public static bool IsPropertySetExcluded(PropertySetupType propertySetupType, string psetName)\n      {\n         if (string.IsNullOrEmpty(psetName))\n            return false;\n\n         IFCParameterTemplate parameterTemplate = ExporterCacheManager.ParameterMappingTemplate;\n         if (parameterTemplate == null)\n            return false;\n\n         return parameterTemplate.IsPropertySetAMemberOfTemplate(propertySetupType, psetName) &&\n            !parameterTemplate.IsExportingPropertySet(propertySetupType, psetName);\n      }\n\n      /// <summary>\n      /// Creates the wall base quantities and adds them to the export.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The exporter.</param>\n      /// <param name=\"wallElement\">The wall element.</param>\n      /// <param name=\"wallHnd\">The wall handle.</param>\n      /// <param name=\"solids\">The list of solids for the entity created for the wall element.</param>\n      /// <param name=\"meshes\">The list of meshes for the entity created for the wall element.</param>\n      /// <param name=\"scaledLength\">The scaled length.</param>\n      /// <param name=\"scaledDepth\">The scaled depth.</param>\n      /// <param name=\"scaledFootPrintArea\">The scaled foot print area.</param>\n      /// <remarks>If we are splitting walls by level, the list of solids and meshes represent the currently\n      /// exported section of wall, not the entire wall.</remarks>\n      public static void CreateWallBaseQuantities(ExporterIFC exporterIFC, Wall wallElement,\n          IList<Solid> solids, IList<Mesh> meshes,\n          IFCAnyHandle wallHnd,\n          double scaledLength, double scaledDepth, double scaledFootPrintArea,\n          IFCExportBodyParams extrusionData, HashSet<IFCAnyHandle> widthAsComplexQty = null)\n      {\n         string quantitySetName = \"Qto_WallBaseQuantities\";\n         PropertySetupType propertySetup = PropertySetupType.IfcBaseQuantities;\n         if (IsPropertySetExcluded(propertySetup, quantitySetName))\n            return;\n\n         double dblVal = 0.0;\n         IFCFile file = exporterIFC.GetFile();\n         HashSet<IFCAnyHandle> quantityHnds = new();\n\n         // Height\n         string quantityName = GetPreIfc4QuantityNameIfNeeded(quantitySetName, \"Height\");\n         IFCPropertyMappingInfo info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n         if (!string.IsNullOrEmpty(quantityName) && (info?.ExportFlag ?? true))\n         {\n            bool valueFound = GetQuantityDoubleValueFromMappedOrDefaultParameter(wallElement, quantitySetName, quantityName,\n               info, QuantityType.Length, out dblVal);\n\n            if (!valueFound)\n            {\n               if (scaledDepth > MathUtil.Eps())\n               {\n                  dblVal = scaledDepth;\n                  valueFound = true;\n               }\n            }\n\n            if (valueFound)\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityLength(file, quantityName, null, null, dblVal);\n               quantityHnds.Add(quantityHnd);\n            }\n         }\n\n         // Length\n         quantityName = GetPreIfc4QuantityNameIfNeeded(quantitySetName, \"Length\");\n         info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n         if (!string.IsNullOrEmpty(quantityName) && (info?.ExportFlag ?? true))\n         {\n            bool valueFound = GetQuantityDoubleValueFromMappedOrDefaultParameter(wallElement, quantitySetName, quantityName,\n               info, QuantityType.Length, out dblVal);\n\n            if (!valueFound)\n            {\n               if (!MathUtil.IsAlmostZero(scaledLength))\n               {\n                  dblVal = scaledLength;\n                  valueFound = true;\n               }\n               else if (wallElement.Location != null)\n               {\n                  Curve wallAxis = (wallElement.Location as LocationCurve).Curve;\n                  if (wallAxis != null)\n                  {\n                     dblVal = UnitUtil.ScaleLength(wallAxis.Length);\n                     valueFound = true;\n                  }\n               }\n            }\n\n            if (valueFound)\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityLength(file, quantityName, null, null, dblVal);\n               quantityHnds.Add(quantityHnd);\n            }\n         }\n\n         // Width\n         quantityName = GetPreIfc4QuantityNameIfNeeded(quantitySetName, \"Width\");\n         info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n         if (!string.IsNullOrEmpty(quantityName) && (info?.ExportFlag ?? true))\n         {\n            bool valueFound = GetQuantityDoubleValueFromMappedOrDefaultParameter(wallElement, quantitySetName, quantityName,\n               info, QuantityType.Length, out dblVal);\n\n            if (!valueFound)\n            {\n               if (wallElement != null)\n               {\n                  double width = UnitUtil.ScaleLength(wallElement.Width);\n                  if (!MathUtil.IsAlmostZero(width))\n                  {\n                     if ((widthAsComplexQty?.Count ?? 0) == 0)\n                     {\n                        dblVal = width;\n                        valueFound = true;\n                     }\n                     else\n                     {\n                        quantityHnds.UnionWith(widthAsComplexQty);\n                     }\n                  }\n               }\n            }\n\n            if (valueFound)\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityLength(file, quantityName, null, null, dblVal);\n               quantityHnds.Add(quantityHnd);\n            }\n         }\n\n         // GrossFootprintArea\n         quantityName = GetPreIfc4QuantityNameIfNeeded(quantitySetName, \"GrossFootprintArea\");\n         info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n         if (!string.IsNullOrEmpty(quantityName) && (info?.ExportFlag ?? true))\n         {\n            bool valueFound = GetQuantityDoubleValueFromMappedOrDefaultParameter(wallElement, quantitySetName, quantityName,\n               info, QuantityType.Area, out dblVal);\n\n            if (!valueFound)\n            {\n               if (!MathUtil.IsAlmostZero(scaledFootPrintArea))\n               {\n                  dblVal = scaledFootPrintArea;\n                  valueFound = true;\n               }\n            }\n\n            if (valueFound)\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityArea(file, quantityName, null, null, dblVal);\n               quantityHnds.Add(quantityHnd);\n            }\n         }\n\n         double netArea = 0;\n         double grossArea = 0;\n         double volume = 0;\n\n         // We will only assign the area if we have all solids that we are exporting; we won't bother calcuting values for Meshes.\n         if (solids != null && (meshes == null || meshes.Count == 0))\n         {\n            //To determine the side of the wall that is suitable for calculating BaseQuantities, \n            //we group the faces by normal and calculate the total area of each side.\n            Dictionary<XYZ, (List<Face>, double)> wallSides = new Dictionary<XYZ, (List<Face>, double)>();\n            foreach (Solid solid in solids)\n            {\n               foreach (Face face in solid.Faces)\n               {\n                  XYZ faceNormal = face.ComputeNormal(new UV(0, 0));\n                  if (MathUtil.IsAlmostZero(faceNormal.Z))\n                  {\n                     double faceArea = face.Area;\n                     if (wallSides.Any())\n                     {\n                        bool faceAdded = false;\n                        foreach (var wallSide in wallSides)\n                        {\n                           if (faceNormal.IsAlmostEqualTo(wallSide.Key))\n                           {\n                              List<Face> sideFaces = wallSide.Value.Item1;\n                              sideFaces.Add(face);\n                              double sumArea = wallSide.Value.Item2 + faceArea;\n                              wallSides[wallSide.Key] = (sideFaces, sumArea);\n                              faceAdded = true;\n                              break;\n                           }\n                        }\n                        if (!faceAdded)\n                        {\n                           wallSides.Add(faceNormal, (new List<Face> { face }, face.Area));\n                        }\n                     }\n                     else\n                     {\n                        wallSides.Add(faceNormal, (new List<Face> { face }, face.Area));\n                     }\n                  }\n               }\n               volume += solid.Volume;\n            }\n\n            KeyValuePair<XYZ, (List<Face>, double)> largestSide = new KeyValuePair<XYZ, (List<Face>, double)>();\n            foreach (var wallSide in wallSides)\n            {\n               if (wallSide.Value.Item2 > largestSide.Value.Item2)\n                  largestSide = wallSide;\n            }\n\n            List<Face> facesOfLargestWallSide = largestSide.Value.Item1;\n            netArea = largestSide.Value.Item2;\n\n            foreach (Face face in facesOfLargestWallSide)\n            {\n               double largestFaceGrossArea = 0.0;\n               IList<CurveLoop> fCurveLoops = face.GetEdgesAsCurveLoops();\n               for (int ii = 0; ii < fCurveLoops.Count; ii++)\n               {\n                  double grArea = ExporterIFCUtils.ComputeAreaOfCurveLoops(new List<CurveLoop>() { fCurveLoops[ii] });\n                  if (grArea > largestFaceGrossArea)\n                     largestFaceGrossArea = grArea;\n               }\n               grossArea += largestFaceGrossArea;\n            }\n         }\n\n         netArea = UnitUtil.ScaleArea(netArea);\n         grossArea = UnitUtil.ScaleArea(grossArea);\n         volume = UnitUtil.ScaleVolume(volume);\n\n         double scaledWidth = (wallElement != null) ? UnitUtil.ScaleLength(wallElement.Width) : 0.0;\n\n         // GrossVolume\n         quantityName = GetPreIfc4QuantityNameIfNeeded(quantitySetName, \"GrossVolume\");\n         info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n         if (!string.IsNullOrEmpty(quantityName) && (info?.ExportFlag ?? true))\n         {\n            bool valueFound = GetQuantityDoubleValueFromMappedOrDefaultParameter(wallElement, quantitySetName, quantityName,\n               info, QuantityType.Volume, out dblVal);\n\n            if (!valueFound)\n            {\n               if (scaledDepth > MathUtil.Eps() && !MathUtil.IsAlmostZero(scaledWidth) && !MathUtil.IsAlmostZero(grossArea))\n               {\n                  dblVal = UnitUtil.ScaleVolume(UnitUtil.UnscaleLength(scaledWidth) * UnitUtil.UnscaleArea(grossArea));\n                  valueFound = true;\n               }\n            }\n\n            if (valueFound)\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityVolume(file, quantityName, null, null, dblVal);\n               quantityHnds.Add(quantityHnd);\n            }\n         }\n\n         // GrossSideArea\n         quantityName = GetPreIfc4QuantityNameIfNeeded(quantitySetName, \"GrossSideArea\");\n         info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n         if (!string.IsNullOrEmpty(quantityName) && (info?.ExportFlag ?? true))\n         {\n            bool valueFound = GetQuantityDoubleValueFromMappedOrDefaultParameter(wallElement, quantitySetName, quantityName,\n               info, QuantityType.Area, out dblVal);\n\n            if (!valueFound)\n            {\n               if (!MathUtil.IsAlmostZero(grossArea))\n               {\n                  dblVal = UnitUtil.ScaleVolume(UnitUtil.UnscaleLength(scaledWidth) * UnitUtil.UnscaleArea(grossArea));\n                  valueFound = true;\n               }\n            }\n\n            if (valueFound)\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityArea(file, quantityName, null, null, dblVal);\n               quantityHnds.Add(quantityHnd);\n            }\n         }\n\n         // NetSideArea\n         quantityName = GetPreIfc4QuantityNameIfNeeded(quantitySetName, \"NetSideArea\");\n         info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n         if (!string.IsNullOrEmpty(quantityName) && (info?.ExportFlag ?? true))\n         {\n            bool valueFound = GetQuantityDoubleValueFromMappedOrDefaultParameter(wallElement, quantitySetName, quantityName,\n               info, QuantityType.Area, out dblVal);\n\n            if (!valueFound)\n            {\n               if (!MathUtil.IsAlmostZero(netArea))\n               {\n                  dblVal = netArea;\n                  valueFound = true;\n               }\n            }\n\n            if (valueFound)\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityArea(file, quantityName, null, null, dblVal);\n               quantityHnds.Add(quantityHnd);\n            }\n         }\n\n         // NetVolume\n         quantityName = GetPreIfc4QuantityNameIfNeeded(quantitySetName, \"NetVolume\");\n         info = GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\n         if (!string.IsNullOrEmpty(quantityName) && (info?.ExportFlag ?? true))\n         {\n            bool valueFound = GetQuantityDoubleValueFromMappedOrDefaultParameter(wallElement, quantitySetName, quantityName,\n               info, QuantityType.Volume, out dblVal);\n\n            if (!valueFound)\n            {\n               if (!MathUtil.IsAlmostZero(volume))\n               {\n                  dblVal = volume;\n                  valueFound = true;\n               }\n            }\n\n            if (valueFound)\n            {\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityVolume(file, quantityName, null, null, dblVal);\n               quantityHnds.Add(quantityHnd);\n            }\n         }\n\n         string quantitySetNameToUse = ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 ? null : quantitySetName;\n         CreateAndRelateBaseQuantities(file, exporterIFC, wallHnd, quantityHnds, quantitySetNameToUse);\n      }\n\n      /// <summary>\n      /// Creates and relate base quantities to quantity handle.\n      /// </summary>\n      /// <param name=\"file\">The file.</param>\n      /// <param name=\"exporterIFC\">The exporter.</param>\n      /// <param name=\"elemHnd\">The element handle.</param>\n      /// <param name=\"quantityHnds\">The quantity handles.</param>\n      static public void CreateAndRelateBaseQuantities(IFCFile file, ExporterIFC exporterIFC, IFCAnyHandle elemHnd, HashSet<IFCAnyHandle> quantityHnds,\n         string quantitySetName = null, string description = null, string methodOfMeasurement = null)\n      {\n         if (quantityHnds.Count > 0)\n         {\n            if (string.IsNullOrEmpty(quantitySetName))\n               quantitySetName = \"BaseQuantities\";\n            IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\n\n            // Skip if the elementHandle has the associated QuantitySet has been created before \n            if (!ExporterCacheManager.QtoSetCreated.Contains((elemHnd, quantitySetName)))\n            {\n               string quantityGuid = GUIDUtil.GenerateIFCGuidFrom(\n                  GUIDUtil.CreateGUIDString(IFCEntityType.IfcElementQuantity, quantitySetName, elemHnd));\n               IFCAnyHandle quantity = IFCInstanceExporter.CreateElementQuantity(file, elemHnd,\n                  quantityGuid, ownerHistory, quantitySetName, description,\n                  methodOfMeasurement, quantityHnds);\n               HashSet<IFCAnyHandle> relatedObjects = new HashSet<IFCAnyHandle>();\n               relatedObjects.Add(elemHnd);\n\n               string quantityRelGuid = GUIDUtil.GenerateIFCGuidFrom(\n                  GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelDefinesByProperties, quantitySetName, elemHnd));\n               ExporterUtil.CreateRelDefinesByProperties(file, quantityRelGuid, ownerHistory, null, null,\n                  relatedObjects, quantity);\n            }\n         }\n      }\n\n      /// <summary>\n      ///  Creates the shared beam, column and member QTO values.  \n      /// </summary>\n      /// <param name=\"exporterIFC\">The exporter.</param>\n      /// <param name=\"elemHandle\">The element handle.</param>\n      /// <param name=\"element\">The element.</param>\n      /// <param name=\"ecData\">The IFCExportBodyParams containing the appropriate data.</param>\n      public static void CreateBeamColumnMemberBaseQuantities(ExporterIFC exporterIFC, IFCAnyHandle elemHandle, Element element, IFCExportBodyParams ecData)\n      {\n         FamilyTypeInfo ifcTypeInfo = new FamilyTypeInfo() { extraParams = ecData };\n         CreateBeamColumnBaseQuantities(exporterIFC, elemHandle, element, ifcTypeInfo, null);\n      }\n\n      /// <summary>\n      /// True if QTO width and length values should be reversed.  \n      /// </summary>\n      /// <param name=\"elemHandle\">The element handle.</param>\n      public static bool IsWidthLengthReversed(IFCAnyHandle elemHandle)\n      {\n         return (IFCAnyHandleUtil.IsSubTypeOf(elemHandle, IFCEntityType.IfcSlab) || IFCAnyHandleUtil.IsSubTypeOf(elemHandle, IFCEntityType.IfcCovering));\n      }\n\n      /// <summary>\n      /// Creates property sets for Revit groups and parameters, if export options is set.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The ExporterIFC.</param>\n      /// <param name=\"element\">The Element.</param>\n      /// <param name=\"elementSets\">The collection of IFCAnyHandles to relate properties to.</param>\n      /// <param name=\"forceCreate\">Forces properties creation even if 'Export internal properties' is unchecked.</param>\n      public static void CreateInternalRevitPropertySets(ExporterIFC exporterIFC, Element element,\n         ISet<IFCAnyHandle> elementSets, bool forceCreate)\n      {\n         if (exporterIFC == null || element == null ||\n             (!ExporterCacheManager.ExportOptionsCache.PropertySetOptions.ExportInternalRevit && !forceCreate))\n            return;\n\n         // We will allow creating internal Revit property sets for element types with no associated element handles.\n         if (((elementSets?.Count ?? 0) == 0) && !(element is ElementType))\n            return;\n\n         IFCFile file = exporterIFC.GetFile();\n\n         ElementId typeId = element.GetTypeId();\n         Element elementType = element.Document.GetElement(typeId);\n         int whichStart = elementType != null ? 0 : (element is ElementType ? 1 : 0);\n         if (whichStart == 1)\n         {\n            typeId = element.Id;\n            elementType = element as ElementType;\n         }\n\n         SortedDictionary<string, (string, HashSet<IFCAnyHandle>)>[] propertySets =\n         {\n            new SortedDictionary<string, (string, HashSet<IFCAnyHandle>)>(),\n            new SortedDictionary<string, (string, HashSet<IFCAnyHandle>)>()\n         };\n\n         // pass through: element and element type.  If the element is a ElementType, there will only be one pass.\n         for (int which = whichStart; which < 2; which++)\n         {\n            Element whichElement = (which == 0) ? element : elementType;\n            if (whichElement == null)\n               continue;\n\n            // If we have already processed this element, just add the new\n            // IFC entities.\n            if (ExporterCacheManager.CreatedInternalPropertySets.TryAppend(whichElement.Id, elementSets))\n               continue;\n\n            bool createType = (which == 1);\n            if (createType)\n            {\n               if (ExporterCacheManager.TypePropertyInfoCache.HasTypeProperties(typeId))\n                  continue;\n            }\n\n            propertySets[which] = CreateGroupedInternalProperties(file, whichElement);\n         }\n\n         for (int which = whichStart; which < 2; which++)\n         {\n            Element whichElement = (which == 0) ? element : elementType;\n            if (whichElement == null)\n               continue;\n\n            HashSet<IFCAnyHandle> createdPropertySets = new HashSet<IFCAnyHandle>();\n\n            if (propertySets[which].Count == 0)\n            {\n               ExporterCacheManager.TypePropertyInfoCache.AddNewElementHandles(typeId, elementSets);\n               continue;\n            }\n\n            bool materialProperties = element is Material;\n            foreach (KeyValuePair<string, (string, HashSet<IFCAnyHandle>)> currPropertySet in propertySets[which])\n            {\n               if (currPropertySet.Value.Item2.Count == 0)\n                  continue;\n\n               if (materialProperties)\n               {\n                  MaterialPropertiesUtil.ExportGenericMaterialPropertySet(file, elementSets?.ToList().First(), currPropertySet.Value.Item2, null, currPropertySet.Value.Item1);\n               }\n               else\n               {\n                  string psetGUID = GUIDUtil.GenerateIFCGuidFrom(\n                     GUIDUtil.CreateGUIDString(whichElement, \"IfcPropertySet: \" + currPropertySet.Key.ToString()));\n\n                  IFCAnyHandle propertySet = IFCInstanceExporter.CreatePropertySet(file, psetGUID,\n                     ExporterCacheManager.OwnerHistoryHandle, currPropertySet.Value.Item1, null,\n                     currPropertySet.Value.Item2);\n                  createdPropertySets.Add(propertySet);\n               }\n            }\n\n            // Don't need to create relations for material properties\n            if (!materialProperties)\n            {\n               if (which == 0)\n                  ExporterCacheManager.CreatedInternalPropertySets.Add(whichElement.Id, createdPropertySets, elementSets);\n               else\n                  ExporterCacheManager.TypePropertyInfoCache.AddNewTypeProperties(typeId, createdPropertySets, elementSets);\n            }\n         }\n      }\n\n      public static HashSet<IFCAnyHandle> CreateInternalRevitPropertySetsForTemporaryParts(ExporterIFC exporterIFC, Element part)\n      {\n         HashSet<IFCAnyHandle> createdPropertySets = new();\n\n         if (exporterIFC == null || part == null ||\n             (!ExporterCacheManager.ExportOptionsCache.PropertySetOptions.ExportInternalRevit))\n            return createdPropertySets;\n\n         IFCFile file = exporterIFC.GetFile();\n\n         SortedDictionary<string, (string, HashSet<IFCAnyHandle>)> createdProperties = CreateGroupedInternalProperties(file, part);\n\n         if (createdProperties.Count == 0)\n            return createdPropertySets;\n\n         foreach (KeyValuePair<string, (string, HashSet<IFCAnyHandle>)> currPropertySet in createdProperties)\n         {\n            if (currPropertySet.Value.Item2.Count == 0)\n               continue;\n\n            string psetGUID = GUIDUtil.GenerateIFCGuidFrom(\n               GUIDUtil.CreateGUIDString(part, \"IfcPropertySet: \" + currPropertySet.Key.ToString()));\n\n            IFCAnyHandle propertySet = IFCInstanceExporter.CreatePropertySet(file, psetGUID,\n               ExporterCacheManager.OwnerHistoryHandle, currPropertySet.Value.Item1, null,\n               currPropertySet.Value.Item2);\n            createdPropertySets.Add(propertySet);\n         }\n         return createdPropertySets;\n      }\n\n      private static SortedDictionary<string, (string, HashSet<IFCAnyHandle>)> CreateGroupedInternalProperties(IFCFile file, Element element)\n      {\n         SortedDictionary<string, (string, HashSet<IFCAnyHandle>)> propertySets = new();\n\n         IDictionary<string, ParameterElementCache> parameterElementCache =\n            ParameterUtil.GetParametersForElement(element.Id);\n\n         if (parameterElementCache == null)\n            return null;\n         \n         foreach (KeyValuePair<string, ParameterElementCache> parameterElementGroup in parameterElementCache)\n         {\n            ForgeTypeId parameterGroup = new ForgeTypeId(parameterElementGroup.Key);\n            string groupName = LabelUtils.GetLabelForGroup(parameterGroup);\n\n            IFCParameterTemplate parameterTemplate = ExporterCacheManager.ParameterMappingTemplate;\n\n            // Skip property groups excluded from export\n            if (parameterTemplate != null &&\n                parameterTemplate.IsPropertySetAMemberOfTemplate(PropertySetupType.RevitElementParameters, groupName) &&\n               !parameterTemplate.IsExportingPropertySet(PropertySetupType.RevitElementParameters, groupName))\n            {\n               continue;\n            }\n\n            // We are only going to append the \"(Type)\" suffix if we aren't also exporting the corresponding entity type.\n            // In general, we'd like to always export them entity type, regardles of whether it holds any geometry or not - it can hold\n            // at least the parameteric information.  When this is acheived, when can get rid of this entirely.\n            // Unfortunately, IFC2x3 doesn't have types for all entities, so for IFC2x3 at least this will continue to exist\n            // in some fashion.\n            // There was a suggestion in SourceForge that we could \"merge\" the instance/type property sets in the cases where we aren't\n            // creating an entity type, and in the cases where two properties had the same name, use the instance over type.\n            // However, given our intention to generally export all types, this seems like a lot of work for diminishing returns.\n            string groupNameToExport = groupName;\n            if (element is ElementType &&\n              !ExporterCacheManager.ElementTypeToHandleCache.IsRegistered(element as ElementType))\n               groupNameToExport += Properties.Resources.PropertySetTypeSuffix;\n\n            HashSet<IFCAnyHandle> currPropertiesForGroup = new();\n            propertySets[parameterElementGroup.Key] = (groupNameToExport, currPropertiesForGroup);\n\n            foreach (Parameter parameter in parameterElementGroup.Value.ParameterCache.Values)\n            {\n               if (!parameter.HasValue)\n                  continue;\n\n               Definition parameterDefinition = parameter.Definition;\n               if (parameterDefinition == null)\n                  continue;\n\n               string parameterName = parameterDefinition.Name;\n\n               IFCPropertyMappingInfo mappingInfo = GetParameterMappingInfoFromCache(PropertySetupType.RevitElementParameters, groupName, parameter.Id, parameterName);\n               if ((mappingInfo?.ExportFlag ?? true) == false)\n                  continue;\n\n               if (!string.IsNullOrEmpty(mappingInfo?.IFCPropertyName))\n                  parameterName = mappingInfo.IFCPropertyName;\n\n               IFCAnyHandle propertyHnd = CreatePropertyByParameterStorageType(file, parameter, parameterName);\n               if (propertyHnd != null)\n                  currPropertiesForGroup.Add(propertyHnd);\n            }\n         }\n\n         return propertySets;\n      }\n\n\n      /// <summary>\n      /// Creates a property handle for a parameter based on its storage type.\n      /// </summary>\n      /// <param name=\"file\">The file.</param>\n      /// <param name=\"parameter\">The parameter.</param>\n      /// <param name=\"propertyName\">The property name.</param>\n      /// <returns>The property handle.</returns>\n      public static IFCAnyHandle CreatePropertyByParameterStorageType(IFCFile file, Parameter parameter, string propertyName)\n      {\n         Definition parameterDefinition = parameter?.Definition;\n         if (parameterDefinition == null)\n            return null;\n\n         IFCAnyHandle propertyHnd = null;\n\n         string parameterDescription = parameter.Id.Value >= 0L ? parameter.Description : null;\n         PropertyDescription propertyDescription = new(propertyName, parameterDescription);\n\n         switch (parameter.StorageType)\n         {\n            case StorageType.None:\n               break;\n            case StorageType.Integer:\n               {\n                  int value = parameter.AsInteger();\n                  string valueAsString = parameter.AsValueString();\n\n                  // YesNo or actual integer?\n                  if (parameterDefinition.GetDataType() == SpecTypeId.Boolean.YesNo)\n                  {\n                     propertyHnd = CreateBooleanPropertyFromCache(file, propertyDescription, value != 0, PropertyValueType.SingleValue);\n                  }\n                  else if (parameterDefinition.GetDataType().Empty() && (valueAsString != null))\n                  {\n                     // This is probably an internal enumerated type that should be exported as a string.\n                     propertyHnd = CreateIdentifierPropertyFromCache(file, propertyDescription, valueAsString, PropertyValueType.SingleValue);\n                  }\n                  else\n                  {\n                     propertyHnd = CreateIntegerPropertyFromCache(file, propertyDescription, value, PropertyValueType.SingleValue);\n                  }\n                  break;\n               }\n            case StorageType.Double:\n               {\n                  double value = parameter.AsDouble();\n                  propertyHnd = CreateRealPropertyBasedOnParameterType(file, parameter, propertyDescription, value, PropertyValueType.SingleValue);\n                  break;\n               }\n            case StorageType.String:\n               {\n                  string value = parameter.AsString();\n                  if (!string.IsNullOrEmpty(value))\n                     propertyHnd = CreateTextPropertyFromCache(file, propertyDescription, value, PropertyValueType.SingleValue);\n                  break;\n               }\n            case StorageType.ElementId:\n               {\n                  if (parameter.AsElementId() != ElementId.InvalidElementId)\n                  {\n                     string valueString = parameter.AsValueString();\n                     propertyHnd = CreateLabelPropertyFromCache(file, parameter.Id, propertyDescription, valueString, PropertyValueType.SingleValue, true, null);\n                  }\n                  break;\n               }\n         }\n\n         return propertyHnd;\n      }\n\n      /// <summary>\n      /// Gets parameter mapping information from cache.\n      /// </summary>\n      /// <param name=\"propertySetup\">The property setup.</param>\n      /// <param name=\"groupName\">The parameter group name.</param>\n      /// <param name=\"parameterId\">The parameter id.</param>\n      /// <param name=\"parameterName\">parameter name.</param>\n      /// <returns>The parameter mapping info.</returns>\n      public static IFCPropertyMappingInfo GetParameterMappingInfoFromCache(PropertySetupType propertySetup, string groupName, ElementId parameterId, string parameterName)\n      {\n         IFCParameterTemplate parameterTemplate = ExporterCacheManager.ParameterMappingTemplate;\n         if (parameterTemplate == null)\n            return null;\n\n         ParameterMappingKey mappingKey = new(propertySetup, groupName, parameterId, parameterName);\n         if (ExporterCacheManager.PropertyMappingCache.TryGetValue(mappingKey, out IFCPropertyMappingInfo mappingInfo))\n            return mappingInfo;\n         \n         mappingInfo = (parameterId < ElementId.InvalidElementId || string.IsNullOrEmpty(parameterName)) ?\n            parameterTemplate.FindPropertyMappingInfo(propertySetup, groupName, parameterId)\n            : parameterTemplate.FindPropertyMappingInfo(propertySetup, groupName, parameterName);\n\n         ExporterCacheManager.PropertyMappingCache[mappingKey] = mappingInfo;\n         return mappingInfo;\n      }\n\n      /// <summary>\n      /// Get a unit type of parameter.\n      /// IFCUnit for each one.\n      /// </summary>\n      /// <param name=\"parameter\">The parameter.</param>\n      /// <returns>The parameter unit type.</returns>\n      public static ForgeTypeId GetParameterUnitType(Parameter parameter)\n      {\n         ForgeTypeId parameterUnitType = null;\n\n         try\n         {\n            parameterUnitType = parameter?.GetUnitTypeId();\n         }\n         catch\n         {\n            // GetUnitTypeId() can fail for reasons that don't seem to be knowable in\n            // advance, so we won't scale value in these cases.\n         }\n\n         return parameterUnitType;\n      }\n\n      /// <summary>\n      /// Creates property from real parameter.\n      /// There are many different ParameterTypes in Revit that share the same unit dimensions, but that\n      /// have potentially different display units (e.g. Bar Diameter could be in millimeters while the project \n      /// default length parameter is in meters.)  For now, we will only support one unit type.  At a later\n      /// point, we could decide to have different caches for each parameter type, and export a different\n      /// IFCUnit for each one.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"parameter\">The parameter.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"propertyValue\">The value of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateRealPropertyBasedOnParameterType(IFCFile file, Parameter parameter, PropertyDescription propertyDescription, double propertyValue, PropertyValueType valueType)\n      {\n         if (parameter == null)\n            return null;\n\n         ForgeTypeId type = parameter.Definition?.GetDataType();\n         ForgeTypeId fallbackUnitType = GetParameterUnitType(parameter);\n         \n         return CreateRealPropertyByType(file, type, propertyDescription, propertyValue, valueType, fallbackUnitType);\n      }\n\n      /// <summary>\n      /// Creates property from real parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"parameterType\">The type of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"propertyValue\">The value of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <param name=\"fallbackUnitType\">The optional unit type. Can be used for scaling in final case</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateRealPropertyByType(IFCFile file, ForgeTypeId parameterType, \n         PropertyDescription propertyDescription, double propertyValue, PropertyValueType valueType, \n         ForgeTypeId fallbackUnitType = null)\n      {\n         IFCAnyHandle propertyHandle = null;\n\n         // NOTE: For cases where multiple Revit parameterTypes map to one IFC unit system, we take the \n         // display units of only one of the types, regardless of the fact that they could all have different \n         // display units.  To allow for each Revit parameter type to have its separate display units, we\n         // would have to keep track of \"secondary\" units so that (1) they weren't part of IfcUnitAssignment and\n         // (2) we would assign the unit to the IfcProperty.  We would also have to make this not work for\n         // at least IFC4RV, since specifying the unit of an IfcProperty is disallowed.\n         if (parameterType == SpecTypeId.Acceleration)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.Acceleration, propertyValue);\n            propertyHandle = CreateAccelerationPropertyFromCache(file, propertyDescription,\n                new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.Energy ||\n            parameterType == SpecTypeId.HvacEnergy)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.Energy, propertyValue);\n            propertyHandle = CreateEnergyPropertyFromCache(file, propertyDescription,\n                new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.LinearMoment)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.LinearMoment, propertyValue);\n            propertyHandle = CreateLinearMomentPropertyFromCache(file, propertyDescription,\n                new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.MassPerUnitLength ||\n            parameterType == SpecTypeId.PipeMassPerUnitLength)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.MassPerUnitLength, propertyValue);\n            propertyHandle = CreateMassPerLengthPropertyFromCache(file, propertyDescription,\n                new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.Moment)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.Moment, propertyValue);\n            propertyHandle = CreateTorquePropertyFromCache(file, propertyDescription,\n                new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.PointSpringCoefficient)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.PointSpringCoefficient, propertyValue);\n            propertyHandle = CreateLinearStiffnessPropertyFromCache(file, propertyDescription,\n                new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.Pulsation)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.Pulsation, propertyValue);\n            propertyHandle = CreateAngularVelocityPropertyFromCache(file, propertyDescription,\n                new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.ThermalResistance)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.ThermalResistance, propertyValue);\n            propertyHandle = CreateThermalResistancePropertyFromCache(file, propertyDescription,\n                new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.WarpingConstant)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.WarpingConstant, propertyValue);\n            propertyHandle = CreateWarpingConstantPropertyFromCache(file, propertyDescription,\n                new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.Angle ||\n            parameterType == SpecTypeId.Rotation ||\n            parameterType == SpecTypeId.RotationAngle)\n         {\n            double scaledValue = UnitUtil.ScaleAngle(propertyValue);\n            propertyHandle = CreatePlaneAnglePropertyFromCache(file, propertyDescription,\n               new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.Slope ||\n            parameterType == SpecTypeId.HvacSlope ||\n            parameterType == SpecTypeId.PipingSlope ||\n            parameterType == SpecTypeId.DemandFactor ||\n            parameterType == SpecTypeId.Factor)\n         {\n            propertyHandle = CreatePositiveRatioPropertyFromCache(file, propertyDescription,\n               new List<double?>() { propertyValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.Area ||\n            parameterType == SpecTypeId.CrossSection ||\n            parameterType == SpecTypeId.ReinforcementArea ||\n            parameterType == SpecTypeId.SectionArea)\n         {\n            double scaledValue = UnitUtil.ScaleArea(propertyValue);\n            propertyHandle = CreateAreaPropertyFromCache(file, propertyDescription,\n                new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.BarDiameter ||\n            parameterType == SpecTypeId.CrackWidth ||\n            parameterType == SpecTypeId.Displacement ||\n            parameterType == SpecTypeId.Distance ||\n            parameterType == SpecTypeId.CableTraySize ||\n            parameterType == SpecTypeId.ConduitSize ||\n            parameterType == SpecTypeId.Length ||\n            parameterType == SpecTypeId.DuctInsulationThickness ||\n            parameterType == SpecTypeId.DuctLiningThickness ||\n            parameterType == SpecTypeId.DuctSize ||\n            parameterType == SpecTypeId.HvacRoughness ||\n            parameterType == SpecTypeId.PipeDimension ||\n            parameterType == SpecTypeId.PipeInsulationThickness ||\n            parameterType == SpecTypeId.PipeSize ||\n            parameterType == SpecTypeId.PipingRoughness ||\n            parameterType == SpecTypeId.ReinforcementCover ||\n            parameterType == SpecTypeId.ReinforcementLength ||\n            parameterType == SpecTypeId.ReinforcementSpacing ||\n            parameterType == SpecTypeId.SectionDimension ||\n            parameterType == SpecTypeId.SectionProperty ||\n            parameterType == SpecTypeId.WireDiameter ||\n            parameterType == SpecTypeId.SurfaceAreaPerUnitLength)\n         {\n            double scaledValue = UnitUtil.ScaleLength(propertyValue);\n            propertyHandle = CreateLengthPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.Currency)\n         {\n            IFCData currencyData = ExporterCacheManager.UnitsCache.ContainsKey(\"CURRENCY\") ?\n                  IFCDataUtil.CreateAsMonetaryMeasure(propertyValue) :\n                  IFCDataUtil.CreateAsReal(propertyValue);\n            propertyHandle = CreateCommonProperty(file, propertyDescription, currencyData,\n                  valueType, null);\n         }\n         else if (parameterType == SpecTypeId.ApparentPower ||\n            parameterType == SpecTypeId.ElectricalPower ||\n            parameterType == SpecTypeId.Wattage ||\n            parameterType == SpecTypeId.CoolingLoad ||\n            parameterType == SpecTypeId.HeatGain ||\n            parameterType == SpecTypeId.HeatingLoad ||\n            parameterType == SpecTypeId.HvacPower)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.HvacPower, propertyValue);\n            propertyHandle = CreatePowerPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.Current)\n         {\n            double scaledValue = UnitUtil.ScaleElectricCurrent(propertyValue);\n            propertyHandle = CreateElectricCurrentPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.Diffusivity)\n         {\n            double scaledValue = UnitUtil.ScaleMoistureDiffusivity(propertyValue);\n            propertyHandle = CreateMoistureDiffusivityPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.ElectricalFrequency ||\n            parameterType == SpecTypeId.StructuralFrequency)\n         {\n            propertyHandle = CreateFrequencyPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { propertyValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.Illuminance)\n         {\n            double scaledValue = UnitUtil.ScaleIlluminance(propertyValue);\n            propertyHandle = CreateIlluminancePropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.LuminousFlux)\n         {\n            double scaledValue = UnitUtil.ScaleLuminousFlux(propertyValue);\n            propertyHandle = CreateLuminousFluxPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.LuminousIntensity)\n         {\n            double scaledValue = UnitUtil.ScaleLuminousIntensity(propertyValue);\n            propertyHandle = CreateLuminousIntensityPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.ElectricalPotential)\n         {\n            double scaledValue = UnitUtil.ScaleElectricVoltage(propertyValue);\n            propertyHandle = CreateElectricVoltagePropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.HvacTemperature ||\n            parameterType == SpecTypeId.ElectricalTemperature ||\n            parameterType == SpecTypeId.PipingTemperature)\n         {\n            double scaledValue = UnitUtil.ScaleThermodynamicTemperature(propertyValue);\n            propertyHandle = CreateThermodynamicTemperaturePropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.HeatTransferCoefficient)\n         {\n            double scaledValue = UnitUtil.ScaleThermalTransmittance(propertyValue);\n            propertyHandle = CreateThermalTransmittancePropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.Force ||\n            parameterType == SpecTypeId.Weight)\n         {\n            double scaledValue = UnitUtil.ScaleForce(propertyValue);\n            propertyHandle = CreateForcePropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.AreaForce)\n         {\n            double scaledValue = UnitUtil.ScalePlanarForce(propertyValue);\n            propertyHandle = CreatePlanarForcePropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.LinearForce ||\n            parameterType == SpecTypeId.WeightPerUnitLength)\n         {\n            double scaledValue = UnitUtil.ScaleLinearForce(propertyValue);\n            propertyHandle = CreateLinearForcePropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.AirFlow ||\n            parameterType == SpecTypeId.Flow)\n         {\n            double scaledValue = UnitUtil.ScaleVolumetricFlowRate(propertyValue);\n            propertyHandle = CreateVolumetricFlowRatePropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.HvacPressure ||\n            parameterType == SpecTypeId.PipingPressure ||\n            parameterType == SpecTypeId.Stress)\n         {\n            double scaledValue = UnitUtil.ScalePressure(propertyValue);\n            propertyHandle = CreatePressurePropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.HvacVelocity ||\n            parameterType == SpecTypeId.PipingVelocity ||\n            parameterType == SpecTypeId.StructuralVelocity ||\n            parameterType == SpecTypeId.Speed)\n         {\n            double scaledValue = UnitUtil.ScaleLinearVelocity(propertyValue);\n            propertyHandle = CreateLinearVelocityPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.Mass ||\n            parameterType == SpecTypeId.PipingMass)\n         {\n            double scaledValue = UnitUtil.ScaleMass(propertyValue);\n            propertyHandle = CreateMassPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.MassDensity ||\n            parameterType == SpecTypeId.HvacDensity)\n         {\n            double scaledValue = UnitUtil.ScaleMassDensity(propertyValue);\n            propertyHandle = CreateMassDensityPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.PipingDensity)\n         {\n            double scaledValue = UnitUtil.ScaleIonConcentration(propertyValue);\n            propertyHandle = CreateIonConcentrationPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.MomentOfInertia)\n         {\n            double scaledValue = UnitUtil.ScaleMomentOfInertia(propertyValue);\n            propertyHandle = CreateMomentOfInertiaPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.Number)\n         {\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription, new List<double?>() { propertyValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.PipingVolume ||\n            parameterType == SpecTypeId.ReinforcementVolume ||\n            parameterType == SpecTypeId.SectionModulus ||\n            parameterType == SpecTypeId.Volume)\n         {\n            double scaledValue = UnitUtil.ScaleVolume(propertyValue);\n            propertyHandle = CreateVolumePropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.PipingMassPerTime ||\n            parameterType == SpecTypeId.HvacMassPerTime)\n         {\n            double scaledValue = UnitUtil.ScaleMassFlowRate(propertyValue);\n            propertyHandle = CreateMassFlowRatePropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.AngularSpeed)\n         {\n            double scaledValue = UnitUtil.ScaleRotationalFrequency(propertyValue);\n            propertyHandle = CreateRotationalFrequencyPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.ThermalConductivity)\n         {\n            double scaledValue = UnitUtil.ScaleThermalConductivity(propertyValue);\n            propertyHandle = CreateThermalConductivityPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.SpecificHeat)\n         {\n            double scaledValue = UnitUtil.ScaleSpecificHeatCapacity(propertyValue);\n            propertyHandle = CreateSpecificHeatCapacityPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.Permeability)\n         {\n            double scaledValue = UnitUtil.ScaleVaporPermeability(propertyValue);\n            propertyHandle = CreateVaporPermeabilityPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.HvacViscosity ||\n            parameterType == SpecTypeId.PipingViscosity)\n         {\n            double scaledValue = UnitUtil.ScaleDynamicViscosity(propertyValue);\n            propertyHandle = CreateDynamicViscosityPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.ThermalExpansionCoefficient)\n         {\n            double scaledValue = UnitUtil.ScaleThermalExpansionCoefficient(propertyValue);\n            propertyHandle = CreateThermalExpansionCoefficientPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.SpecificHeatOfVaporization)\n         {\n            double scaledValue = UnitUtil.ScaleHeatingValue(propertyValue);\n            propertyHandle = CreateHeatingValuePropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.IsothermalMoistureCapacity)\n         {\n            double scaledValue = UnitUtil.ScaleIsothermalMoistureCapacity(propertyValue);\n            propertyHandle = CreateIsothermalMoistureCapacityPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.HvacPowerDensity)\n         {\n            double scaledValue = UnitUtil.ScaleHeatFluxDensity(propertyValue);\n            propertyHandle = CreateHeatFluxDensityPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.MassPerUnitArea && !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\n         {\n            double scaledValue = UnitUtil.ScaleAreaDensity(propertyValue);\n            propertyHandle = CreateAreaDensityPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, null);\n         }\n         else if (parameterType == SpecTypeId.Time ||\n            parameterType == SpecTypeId.Period)\n         {\n            double scaledValue = UnitUtil.ScaleTime(propertyValue);\n            IFCData timeData = IFCDataUtil.CreateAsTimeMeasure(scaledValue);\n            propertyHandle = CreateCommonProperty(file, propertyDescription, timeData,\n                  valueType, null);\n         }\n         else if (parameterType == SpecTypeId.ColorTemperature)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.ColorTemperature, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"COLORTEMPERATURE\");\n         }\n         else if (parameterType == SpecTypeId.CostPerArea)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.CostPerArea, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"COSTPERAREA\");\n         }\n         else if (parameterType == SpecTypeId.ApparentPowerDensity)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.ApparentPowerDensity, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"APPARENTPOWERDENSITY\");\n         }\n         else if (parameterType == SpecTypeId.CostRateEnergy)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.CostRateEnergy, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"COSTRATEENERGY\");\n         }\n         else if (parameterType == SpecTypeId.CostRatePower)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.CostRatePower, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"COSTRATEPOWER\");\n         }\n         else if (parameterType == SpecTypeId.Efficacy)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.Efficacy, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"LUMINOUSEFFICACY\");\n         }\n         else if (parameterType == SpecTypeId.Luminance)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.Luminance, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"LUMINANCE\");\n         }\n         else if (parameterType == SpecTypeId.ElectricalPowerDensity)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.ElectricalPowerDensity, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"ELECTRICALPOWERDENSITY\");\n         }\n         else if (parameterType == SpecTypeId.PowerPerLength)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.PowerPerLength, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"POWERPERLENGTH\");\n         }\n         else if (parameterType == SpecTypeId.ElectricalResistivity)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.ElectricalResistivity, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"ELECTRICALRESISTIVITY\");\n         }\n         else if (parameterType == SpecTypeId.HeatCapacityPerArea)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.HeatCapacityPerArea, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"HEATCAPACITYPERAREA\");\n         }\n         else if (parameterType == SpecTypeId.ThermalGradientCoefficientForMoistureCapacity)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.ThermalGradientCoefficientForMoistureCapacity, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"THERMALGRADIENTCOEFFICIENTFORMOISTURECAPACITY\");\n         }\n         else if (parameterType == SpecTypeId.ThermalMass)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.ThermalMass, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"THERMALMASS\");\n         }\n         else if (parameterType == SpecTypeId.AirFlowDensity)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.AirFlowDensity, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"AIRFLOWDENSITY\");\n         }\n         else if (parameterType == SpecTypeId.AirFlowDividedByCoolingLoad)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.AirFlowDividedByCoolingLoad, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"AIRFLOWDIVIDEDBYCOOLINGLOAD\");\n         }\n         else if (parameterType == SpecTypeId.AirFlowDividedByVolume)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.AirFlowDividedByVolume, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"AIRFLOWDIVIDEDBYVOLUME\");\n         }\n         else if (parameterType == SpecTypeId.AreaDividedByCoolingLoad)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.AreaDividedByCoolingLoad, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"AREADIVIDEDBYCOOLINGLOAD\");\n         }\n         else if (parameterType == SpecTypeId.AreaDividedByHeatingLoad)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.AreaDividedByHeatingLoad, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"AREADIVIDEDBYHEATINGLOAD\");\n         }\n         else if (parameterType == SpecTypeId.CoolingLoadDividedByArea)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.CoolingLoadDividedByArea, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"COOLINGLOADDIVIDEDBYAREA\");\n         }\n         else if (parameterType == SpecTypeId.CoolingLoadDividedByVolume)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.CoolingLoadDividedByVolume, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"COOLINGLOADDIVIDEDBYVOLUME\");\n         }\n         else if (parameterType == SpecTypeId.FlowPerPower)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.FlowPerPower, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"FLOWPERPOWER\");\n         }\n         else if (parameterType == SpecTypeId.HvacFriction)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.HvacFriction, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n               new List<double?>() { scaledValue }, valueType, \"FRICTIONLOSS\");\n         }\n         else if (parameterType == SpecTypeId.HeatingLoadDividedByArea)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.HeatingLoadDividedByArea, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"HEATINGLOADDIVIDEDBYAREA\");\n         }\n         else if (parameterType == SpecTypeId.HeatingLoadDividedByVolume)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.HeatingLoadDividedByVolume, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"HEATINGLOADDIVIDEDBYVOLUME\");\n         }\n         else if (parameterType == SpecTypeId.PowerPerFlow)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.PowerPerFlow, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"POWERPERFLOW\");\n         }\n         else if (parameterType == SpecTypeId.PipingFriction)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.PipingFriction, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"PIPINGFRICTION\");\n         }\n         else if (parameterType == SpecTypeId.AreaSpringCoefficient)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.AreaSpringCoefficient, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"AREASPRINGCOEFFICIENT\");\n         }\n         else if (parameterType == SpecTypeId.LineSpringCoefficient)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.LineSpringCoefficient, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"LINESPRINGCOEFFICIENT\");\n         }\n         else if (parameterType == SpecTypeId.MassPerUnitArea)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.MassPerUnitArea, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"MASSPERUNITAREA\");\n         }\n         else if (parameterType == SpecTypeId.ReinforcementAreaPerUnitLength)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.ReinforcementAreaPerUnitLength, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"REINFORCEMENTAREAPERUNITLENGTH\");\n         }\n         else if (parameterType == SpecTypeId.RotationalLineSpringCoefficient)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.RotationalLineSpringCoefficient, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"ROTATIONALLINESPRINGCOEFFICIENT\");\n         }\n         else if (parameterType == SpecTypeId.RotationalPointSpringCoefficient)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.RotationalPointSpringCoefficient, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"ROTATIONALPOINTSPRINGCOEFFICIENT\");\n         }\n         else if (parameterType == SpecTypeId.UnitWeight)\n         {\n            double scaledValue = UnitUtil.ScaleDouble(SpecTypeId.UnitWeight, propertyValue);\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription,\n                  new List<double?>() { scaledValue }, valueType, \"UNITWEIGHT\");\n         }\n         else\n         {\n            double scaledValue = propertyValue;\n            if (fallbackUnitType != null)\n               scaledValue = UnitUtils.ConvertFromInternalUnits(propertyValue, fallbackUnitType);\n\n            propertyHandle = CreateRealPropertyFromCache(file, propertyDescription, new List<double?>() { scaledValue }, valueType, null);\n         }\n\n         return propertyHandle;\n      }\n\n      /// <summary>\n      /// Creates and associates the common property sets associated with ElementTypes.  These are handled differently than for elements.\n      /// </summary>\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\n      /// <param name=\"elementType\">The element type whose properties are exported.</param>\n      /// <param name=\"existingPropertySets\">The handles of property sets already associated with the type.</param>\n      /// <param name=\"prodTypeHnd\">The handle of the entity associated with the element type object.</param>\n      public static void CreateElementTypeProperties(ExporterIFC exporterIFC, ElementType elementType,\n          HashSet<IFCAnyHandle> existingPropertySets, IFCAnyHandle prodTypeHnd)\n      {\n         HashSet<IFCAnyHandle> propertySets = new HashSet<IFCAnyHandle>();\n\n         // Pass in an empty set of handles - we don't want IfcRelDefinesByProperties for type properties.\n         ISet<IFCAnyHandle> associatedObjectIds = new HashSet<IFCAnyHandle>();\n         CreateInternalRevitPropertySets(exporterIFC, elementType, associatedObjectIds, false);\n\n         TypePropertyInfo additionalPropertySets = null;\n         ElementId typeId = elementType.Id;\n         if (ExporterCacheManager.TypePropertyInfoCache.TryGetValue(typeId, out additionalPropertySets))\n            propertySets.UnionWith(additionalPropertySets.PropertySets);\n\n         if (existingPropertySets != null && existingPropertySets.Count > 0)\n            propertySets.UnionWith(existingPropertySets);\n\n         IFCFile file = exporterIFC.GetFile();\n         using (IFCTransaction transaction = new IFCTransaction(file))\n         {\n            Document doc = elementType.Document;\n\n            IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\n\n            IList<PropertySetDescription> currPsetsToCreate =\n               ExporterUtil.GetCurrPSetsToCreate(prodTypeHnd, PSetsToProcess.Type);\n            foreach (PropertySetDescription currDesc in currPsetsToCreate)\n            {\n               // Last conditional check: if the property set comes from a ViewSchedule, check if the element is in the schedule.\n               if (currDesc.ViewScheduleId != ElementId.InvalidElementId && ExporterUtil.ExportingHostModel())\r\n               {\r\n                  if (!ExporterCacheManager.ViewScheduleElementCache[currDesc.ViewScheduleId].Contains(typeId))\n                     continue;\r\n               }\r\n\n               ElementOrConnector elementOrConnector = new ElementOrConnector(elementType);\n               ISet<IFCAnyHandle> props = currDesc.ProcessEntries(file, exporterIFC, null, elementOrConnector, elementType, prodTypeHnd);\n               if (props.Count > 0)\n               {\n                  string paramSetName = currDesc.Name;\n                  string guid = GUIDUtil.GenerateIFCGuidFrom(\n                     GUIDUtil.CreateGUIDString(IFCEntityType.IfcPropertySet, paramSetName, prodTypeHnd));\n\n                  IFCAnyHandle propertySet = IFCInstanceExporter.CreatePropertySet(file, guid, ownerHistory, paramSetName, null, props);\n                  propertySets.Add(propertySet);\n               }\n            }\n\n            if (propertySets.Count != 0)\n            {\n               prodTypeHnd.SetAttribute(\"HasPropertySets\", propertySets);\n               // Don't assign the property sets to the instances if we have just assigned them to the type.\n               if (additionalPropertySets != null)\n                  additionalPropertySets.AssignedToType = true;\n            }\n\n            transaction.Commit();\n         }\n      }\n\n      public static bool GetQuantityDoubleValueFromParameter(Element element, string revitParameterName,\n         BuiltInParameter revitBuiltInParameter, QuantityType quantityType, out double value)\n      {\n         if (GetDoubleValueFromElementOrSymbol(element, revitParameterName, revitBuiltInParameter, out value) == null)\n            return false;\n\n         switch (quantityType)\n         {\n            case QuantityType.PositiveLength:\n            case QuantityType.Length:\n               value = UnitUtil.ScaleLength(value);\n               break;\n            case QuantityType.Area:\n               value = UnitUtil.ScaleArea(value);\n               break;\n            case QuantityType.Volume:\n               value = UnitUtil.ScaleVolume(value);\n               break;\n            case QuantityType.Count:\n               break;\n            case QuantityType.Time:\n               break;\n            default:\n               break;\n         }\n\n         return true;\n      }\n\n      public static IList<double?> GetDoubleValuesFromParameterByType(Element elem, string revitParameterName, ForgeTypeId specTypeId, PropertyValueType valueType)\n      {\n         List<double?> values = new List<double?>();\n\n         switch (valueType)\n         {\n            case PropertyValueType.SingleValue:\n            case PropertyValueType.ListValue:   // TODO: REVIT-193510\n            case PropertyValueType.TableValue:\n               {\n                  double? propertyValue = GetScaledDoubleValueFromParameter(elem, revitParameterName, specTypeId);\n                  if (propertyValue.HasValue)\n                     values.Add(propertyValue.Value);\n               }\n               break;\n            case PropertyValueType.BoundedValue:\n               {                  \n                  double? valueSetPoint = GetScaledDoubleValueFromParameter(elem, revitParameterName + \".SetPointValue\", specTypeId);\n                  double? valueUpper = GetScaledDoubleValueFromParameter(elem, revitParameterName + \".UpperBoundValue\", specTypeId);\n                  double? valueLower = GetScaledDoubleValueFromParameter(elem, revitParameterName + \".LowerBoundValue\", specTypeId);\n\n                  if (valueUpper == null && valueLower == null && valueSetPoint == null)\n                     valueUpper = GetScaledDoubleValueFromParameter(elem, revitParameterName, specTypeId);\n\n                  if (valueUpper != null || valueLower != null || valueSetPoint != null)\n                  {\n                     values.Add(valueSetPoint);\n                     values.Add(valueUpper);\n                     values.Add(valueLower);\n                  }\n               }\n               break;\n            default:\n               throw new InvalidOperationException(\"Missing case!\");\n\n         }\n         return values;\n      }\n\n      public static double? GetScaledDoubleValueFromParameter(Element elem, string revitParameterName, ForgeTypeId specTypeId)\n      {\n         double propertyValue = 0.0;\n         Parameter param = ParameterUtil.GetDoubleValueFromElement(elem, revitParameterName, out propertyValue);\n         if (param != null)\n         {\n            if (IsParameterScalingRequired(param)) \n            {\n               propertyValue = UnitUtil.ScaleDouble(specTypeId, propertyValue);\n            }\n\n            // Convert value from internal to displayed units if we want to export it as Real\n            if (specTypeId == SpecTypeId.Number)\n            {\n               ForgeTypeId paramUnitType = GetParameterUnitType(param);\n               if (paramUnitType != null)\n                  propertyValue = UnitUtils.ConvertFromInternalUnits(propertyValue, paramUnitType);\n            }\n\n            return propertyValue;\n         }\n\n         return null;\n      }\n\n      #region Create___PropertyFromElement_1\n      /// <summary>\n      /// Create Area measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateAreaPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateAreaPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateAreaPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create Acceleration measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateAccelerationPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateAccelerationPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateAccelerationPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create AngularVelocity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateAngularVelocityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateAngularVelocityPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateAngularVelocityPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create AreaDensity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateAreaDensityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateAreaDensityPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateAreaDensityPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create DynamicViscosity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateDynamicViscosityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateDynamicViscosityPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateDynamicViscosityPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create ElectricCurrent measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateElectricCurrentPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateElectricCurrentPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateElectricCurrentPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create ElectricVoltage measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateElectricVoltagePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateElectricVoltagePropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateElectricVoltagePropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create Energy measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateEnergyPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateEnergyPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateEnergyPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create Force measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateForcePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateForcePropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateForcePropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create Frequency measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateFrequencyPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateFrequencyPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateFrequencyPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create HeatingValue measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateHeatingValuePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateHeatingValuePropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateHeatingValuePropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create Illuminance measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateIlluminancePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateIlluminancePropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateIlluminancePropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create IonConcentration measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateIonConcentrationPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateIonConcentrationPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateIonConcentrationPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create IsothermalMoistureCapacity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateIsothermalMoistureCapacityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateIsothermalMoistureCapacityPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateIsothermalMoistureCapacityPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create HeatFluxDensity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateHeatFluxDensityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateHeatFluxDensityPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateHeatFluxDensityPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create Length measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLengthPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateLengthPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateLengthPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create LinearForce measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLinearForcePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateLinearForcePropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateLinearForcePropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create LinearMoment measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLinearMomentPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateLinearMomentPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateLinearMomentPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create LinearStiffness measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLinearStiffnessPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateLinearStiffnessPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateLinearStiffnessPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create LinearVelocity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLinearVelocityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateLinearVelocityPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateLinearVelocityPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create LuminousFlux measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLuminousFluxPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateLuminousFluxPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateLuminousFluxPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create LuminousIntensity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLuminousIntensityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateLuminousIntensityPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateLuminousIntensityPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create Mass measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateMassPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateMassPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateMassPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create MassDensity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateMassDensityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateMassDensityPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateMassDensityPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create MassFlowRate measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateMassFlowRatePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateMassFlowRatePropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateMassFlowRatePropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create MassPerLength measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateMassPerLengthPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateMassPerLengthPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateMassPerLengthPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create ModulusOfElasticity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateModulusOfElasticityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateModulusOfElasticityPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateModulusOfElasticityPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create MoistureDiffusivity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateMoistureDiffusivityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateMoistureDiffusivityPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateMoistureDiffusivityPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create MomentOfInertia measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateMomentOfInertiaPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateMomentOfInertiaPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateMomentOfInertiaPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create NormalisedRatio measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateNormalisedRatioPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateNormalisedRatioPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateNormalisedRatioPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create Numeric measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateNumericPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateNumericPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateNumericPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create PlaneAngle measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePlaneAnglePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreatePlaneAnglePropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreatePlaneAnglePropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create PlanarForce measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePlanarForcePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreatePlanarForcePropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreatePlanarForcePropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create PositiveLength measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePositiveLengthPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreatePositiveLengthPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreatePositiveLengthPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create PositiveRatio measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePositiveRatioPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreatePositiveRatioPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreatePositiveRatioPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create PositivePlaneAngle measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePositivePlaneAnglePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreatePositivePlaneAnglePropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreatePositivePlaneAnglePropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create Power measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePowerPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreatePowerPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreatePowerPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create Pressure measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePressurePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreatePressurePropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreatePressurePropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create Ratio measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateRatioPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateRatioPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateRatioPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create Real measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateRealPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateRealPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateRealPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create RotationalFrequency measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateRotationalFrequencyPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateRotationalFrequencyPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateRotationalFrequencyPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create SoundPower measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateSoundPowerPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateSoundPowerPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateSoundPowerPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create SoundPressure measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateSoundPressurePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateSoundPressurePropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateSoundPressurePropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create SpecificHeatCapacity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateSpecificHeatCapacityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateSpecificHeatCapacityPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateSpecificHeatCapacityPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create ThermalConductivity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateThermalConductivityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateThermalConductivityPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateThermalConductivityPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create ThermalExpansionCoefficient measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateThermalExpansionCoefficientPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateThermalExpansionCoefficientPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateThermalExpansionCoefficientPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create ThermalResistance measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateThermalResistancePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateThermalResistancePropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateThermalResistancePropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create ThermalTransmittance measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateThermalTransmittancePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateThermalTransmittancePropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateThermalTransmittancePropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create ThermodynamicTemperature measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateThermodynamicTemperaturePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateThermodynamicTemperaturePropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateThermodynamicTemperaturePropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create VaporPermeability measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateVaporPermeabilityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateVaporPermeabilityPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateVaporPermeabilityPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create Volume measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateVolumePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateVolumePropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateVolumePropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create VolumetricFlowRate measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateVolumetricFlowRatePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateVolumetricFlowRatePropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateVolumetricFlowRatePropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create Torque measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateTorquePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateTorquePropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateTorquePropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Create WarpingConstant measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"revitBuiltInParam\">The built in parameter to use.</param>\n      /// <param name=\"propertyDescription\">The name of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateWarpingConstantPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          BuiltInParameter revitBuiltInParam, PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IFCAnyHandle propHnd = CreateWarpingConstantPropertyFromElement(file, elem, revitParameterName, propertyDescription, valueType);\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n            return propHnd;\n\n         if (revitBuiltInParam != BuiltInParameter.INVALID)\n         {\n            string builtInParamName = LabelUtils.GetLabelFor(revitBuiltInParam);\n            propHnd = CreateWarpingConstantPropertyFromElement(file, elem, builtInParamName, propertyDescription, valueType);\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\n               return propHnd;\n         }\n\n         return null;\n      }\n      #endregion\n\n      #region Create___PropertyFromElement_2\n\n      /// <summary>\n      /// Create a Area measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateAreaPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Area, valueType);\n         IFCAnyHandle property = CreateAreaPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Area, valueType);\n            property = CreateAreaPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a Acceleration measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateAccelerationPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Acceleration, valueType);\n         IFCAnyHandle property = CreateAccelerationPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Acceleration, valueType);\n            property = CreateAccelerationPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a AngularVelocity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateAngularVelocityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Pulsation, valueType);\n         IFCAnyHandle property = CreateAngularVelocityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Pulsation, valueType);\n            property = CreateAngularVelocityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a AreaDensity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateAreaDensityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.MassPerUnitArea, valueType);\n         IFCAnyHandle property = CreateAreaDensityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.MassPerUnitArea, valueType);\n            property = CreateAreaDensityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a DynamicViscosity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateDynamicViscosityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.HvacViscosity, valueType);\n         IFCAnyHandle property = CreateDynamicViscosityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.HvacViscosity, valueType);\n            property = CreateDynamicViscosityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a ElectricCurrent measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateElectricCurrentPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Current, valueType);\n         IFCAnyHandle property = CreateElectricCurrentPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Current, valueType);\n            property = CreateElectricCurrentPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a ElectricVoltage measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateElectricVoltagePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.ElectricalPotential, valueType);\n         IFCAnyHandle property = CreateElectricVoltagePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.ElectricalPotential, valueType);\n            property = CreateElectricVoltagePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a Energy measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateEnergyPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Energy, valueType);\n         IFCAnyHandle property = CreateEnergyPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Energy, valueType);\n            property = CreateEnergyPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a Force measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateForcePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Force, valueType);\n         IFCAnyHandle property = CreateForcePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Force, valueType);\n            property = CreateForcePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a Frequency measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateFrequencyPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Number, valueType);\n         IFCAnyHandle property = CreateFrequencyPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Number, valueType);\n            property = CreateFrequencyPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a HeatingValue measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateHeatingValuePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.SpecificHeatOfVaporization, valueType);\n         IFCAnyHandle property = CreateHeatingValuePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.SpecificHeatOfVaporization, valueType);\n            property = CreateHeatingValuePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a Illuminance measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateIlluminancePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Illuminance, valueType);\n         IFCAnyHandle property = CreateIlluminancePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Illuminance, valueType);\n            property = CreateIlluminancePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a IonConcentration measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateIonConcentrationPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.PipingDensity, valueType);\n         IFCAnyHandle property = CreateIonConcentrationPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.PipingDensity, valueType);\n            property = CreateIonConcentrationPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a IsothermalMoistureCapacity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateIsothermalMoistureCapacityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.IsothermalMoistureCapacity, valueType);\n         IFCAnyHandle property = CreateIsothermalMoistureCapacityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.IsothermalMoistureCapacity, valueType);\n            property = CreateIsothermalMoistureCapacityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a HeatFluxDensity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateHeatFluxDensityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.HvacPowerDensity, valueType);\n         IFCAnyHandle property = CreateHeatFluxDensityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.HvacPowerDensity, valueType);\n            property = CreateHeatFluxDensityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a Length measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLengthPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Length, valueType);\n         IFCAnyHandle property = CreateLengthPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Length, valueType);\n            property = CreateLengthPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a LinearForce measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLinearForcePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.LinearForce, valueType);\n         IFCAnyHandle property = CreateLinearForcePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.LinearForce, valueType);\n            property = CreateLinearForcePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a LinearMoment measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLinearMomentPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.LinearMoment, valueType);\n         IFCAnyHandle property = CreateLinearMomentPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.LinearMoment, valueType);\n            property = CreateLinearMomentPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a LinearStiffness measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLinearStiffnessPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.PointSpringCoefficient, valueType);\n         IFCAnyHandle property = CreateLinearStiffnessPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.PointSpringCoefficient, valueType);\n            property = CreateLinearStiffnessPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a LinearVelocity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLinearVelocityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.HvacVelocity, valueType);\n         IFCAnyHandle property = CreateLinearVelocityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.HvacVelocity, valueType);\n            property = CreateLinearVelocityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a LuminousFlux measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLuminousFluxPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.LuminousFlux, valueType);\n         IFCAnyHandle property = CreateLuminousFluxPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.LuminousFlux, valueType);\n            property = CreateLuminousFluxPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a LuminousIntensity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLuminousIntensityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.LuminousIntensity, valueType);\n         IFCAnyHandle property = CreateLuminousIntensityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.LuminousIntensity, valueType);\n            property = CreateLuminousIntensityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a Mass measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateMassPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Mass, valueType);\n         IFCAnyHandle property = CreateMassPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Mass, valueType);\n            property = CreateMassPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a MassDensity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateMassDensityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.MassDensity, valueType);\n         IFCAnyHandle property = CreateMassDensityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.MassDensity, valueType);\n            property = CreateMassDensityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a MassFlowRate measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateMassFlowRatePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.PipingMassPerTime, valueType);\n         IFCAnyHandle property = CreateMassFlowRatePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.PipingMassPerTime, valueType);\n            property = CreateMassFlowRatePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a MassPerLength measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateMassPerLengthPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.MassPerUnitLength, valueType);\n         IFCAnyHandle property = CreateMassPerLengthPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.MassPerUnitLength, valueType);\n            property = CreateMassPerLengthPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a ModulusOfElasticity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateModulusOfElasticityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Stress, valueType);\n         IFCAnyHandle property = CreateModulusOfElasticityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Stress, valueType);\n            property = CreateModulusOfElasticityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a MoistureDiffusivity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateMoistureDiffusivityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Diffusivity, valueType);\n         IFCAnyHandle property = CreateMoistureDiffusivityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Diffusivity, valueType);\n            property = CreateMoistureDiffusivityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a MomentOfInertia measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateMomentOfInertiaPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.MomentOfInertia, valueType);\n         IFCAnyHandle property = CreateMomentOfInertiaPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.MomentOfInertia, valueType);\n            property = CreateMomentOfInertiaPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a NormalisedRatio measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateNormalisedRatioPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Number, valueType);\n         IFCAnyHandle property = CreateNormalisedRatioPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Number, valueType);\n            property = CreateNormalisedRatioPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a Numeric measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateNumericPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Number, valueType);\n         IFCAnyHandle property = CreateNumericPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Number, valueType);\n            property = CreateNumericPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a PlaneAngle measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePlaneAnglePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Angle, valueType);\n         IFCAnyHandle property = CreatePlaneAnglePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Angle, valueType);\n            property = CreatePlaneAnglePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a PlanarForce measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePlanarForcePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.AreaForce, valueType);\n         IFCAnyHandle property = CreatePlanarForcePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.AreaForce, valueType);\n            property = CreatePlanarForcePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a PositiveLength measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePositiveLengthPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Length, valueType);\n         IFCAnyHandle property = CreatePositiveLengthPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Length, valueType);\n            property = CreatePositiveLengthPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a PositiveRatio measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePositiveRatioPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Number, valueType);\n         IFCAnyHandle property = CreatePositiveRatioPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Number, valueType);\n            property = CreatePositiveRatioPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a PositivePlaneAngle measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePositivePlaneAnglePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Angle, valueType);\n         IFCAnyHandle property = CreatePositivePlaneAnglePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Angle, valueType);\n            property = CreatePositivePlaneAnglePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a Power measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePowerPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.HvacPower, valueType);\n         IFCAnyHandle property = CreatePowerPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.HvacPower, valueType);\n            property = CreatePowerPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a Pressure measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePressurePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.HvacPressure, valueType);\n         IFCAnyHandle property = CreatePressurePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.HvacPressure, valueType);\n            property = CreatePressurePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a Ratio measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateRatioPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Number, valueType);\n         IFCAnyHandle property = CreateRatioPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Number, valueType);\n            property = CreateRatioPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a Real measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateRealPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Number, valueType);\n         IFCAnyHandle property = CreateRealPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Number, valueType);\n            property = CreateRealPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a RotationalFrequency measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateRotationalFrequencyPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.AngularSpeed, valueType);\n         IFCAnyHandle property = CreateRotationalFrequencyPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.AngularSpeed, valueType);\n            property = CreateRotationalFrequencyPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a SoundPower measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateSoundPowerPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Wattage, valueType);\n         IFCAnyHandle property = CreateSoundPowerPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Wattage, valueType);\n            property = CreateSoundPowerPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a SoundPressure measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateSoundPressurePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.HvacPressure, valueType);\n         IFCAnyHandle property = CreateSoundPressurePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.HvacPressure, valueType);\n            property = CreateSoundPressurePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a SpecificHeatCapacity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateSpecificHeatCapacityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.SpecificHeat, valueType);\n         IFCAnyHandle property = CreateSpecificHeatCapacityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.SpecificHeat, valueType);\n            property = CreateSpecificHeatCapacityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a ThermalConductivity measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateThermalConductivityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.ThermalConductivity, valueType);\n         IFCAnyHandle property = CreateThermalConductivityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.ThermalConductivity, valueType);\n            property = CreateThermalConductivityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a ThermalExpansionCoefficient measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateThermalExpansionCoefficientPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.ThermalExpansionCoefficient, valueType);\n         IFCAnyHandle property = CreateThermalExpansionCoefficientPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.ThermalExpansionCoefficient, valueType);\n            property = CreateThermalExpansionCoefficientPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a ThermalResistance measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateThermalResistancePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.ThermalResistance, valueType);\n         IFCAnyHandle property = CreateThermalResistancePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.ThermalResistance, valueType);\n            property = CreateThermalResistancePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a ThermalTransmittance measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateThermalTransmittancePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.HeatTransferCoefficient, valueType);\n         IFCAnyHandle property = CreateThermalTransmittancePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.HeatTransferCoefficient, valueType);\n            property = CreateThermalTransmittancePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a ThermodynamicTemperature measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateThermodynamicTemperaturePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.HvacTemperature, valueType);\n         IFCAnyHandle property = CreateThermodynamicTemperaturePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.HvacTemperature, valueType);\n            property = CreateThermodynamicTemperaturePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a VaporPermeability measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateVaporPermeabilityPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Permeability, valueType);\n         IFCAnyHandle property = CreateVaporPermeabilityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Permeability, valueType);\n            property = CreateVaporPermeabilityPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a Volume measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateVolumePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Volume, valueType);\n         IFCAnyHandle property = CreateVolumePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Volume, valueType);\n            property = CreateVolumePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a VolumetricFlowRate measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateVolumetricFlowRatePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.AirFlow, valueType);\n         IFCAnyHandle property = CreateVolumetricFlowRatePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.AirFlow, valueType);\n            property = CreateVolumetricFlowRatePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a Torque measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateTorquePropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.Moment, valueType);\n         IFCAnyHandle property = CreateTorquePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.Moment, valueType);\n            property = CreateTorquePropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n\n      /// <summary>\n      /// Create a WarpingConstant measure property from the element's parameter.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"elem\">The Element.</param>\n      /// <param name=\"revitParameterName\">The name and description of the parameter.</param>\n      /// <param name=\"propertyDescription\">The name of the property. Also, the backup name of the parameter.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateWarpingConstantPropertyFromElement(IFCFile file, Element elem, string revitParameterName,\n          PropertyDescription propertyDescription, PropertyValueType valueType)\n      {\n         IList<double?> doubleValues = GetDoubleValuesFromParameterByType(elem, revitParameterName, SpecTypeId.WarpingConstant, valueType);\n         IFCAnyHandle property = CreateWarpingConstantPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n\n         if (property == null)\n         {\n            doubleValues = GetDoubleValuesFromParameterByType(elem, propertyDescription.Name, SpecTypeId.WarpingConstant, valueType);\n            property = CreateWarpingConstantPropertyFromCache(file, propertyDescription, doubleValues, valueType, null);\n         }\n\n         return property;\n      }\n      #endregion\n\n      #region Create___PropertyFromCache\n\n      /// <summary>Create property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <param name=\"createProperty\">The function to craete property.</param>\n      /// <param name=\"propertyType\">The property type.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateGenericPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey,\n          Func<IFCFile, PropertyDescription, IList<double?>, PropertyValueType, string, IFCAnyHandle> createProperty, PropertyType propertyType)\n      {\n         if ((values?.Count ?? 0) == 0)\n            return null;\n\n         bool canCache = false;\n         double value = 0.0;\n         if (values.ElementAt(0) != null && valueType == PropertyValueType.SingleValue && string.IsNullOrEmpty(unitTypeKey))\n         {\n            bool isLengthProperty = (propertyType == PropertyType.Length);\n            value = values.ElementAt(0).Value;\n\n            double? adjustedValue = isLengthProperty ? CanCacheDouble(UnitUtil.UnscaleLength(value)) : CanCacheDouble(value);\n            canCache = adjustedValue.HasValue;\n            if (canCache)\n            {\n               value = isLengthProperty ? UnitUtil.ScaleLength(adjustedValue.GetValueOrDefault()) : adjustedValue.GetValueOrDefault();\n               values[0] = value;\n            }\n         }\n\n         IFCAnyHandle propertyHandle;\n         string propertyName = propertyDescription.Name;\n         if (canCache)\n         {\n            propertyHandle = ExporterCacheManager.PropertyInfoCache.GetDoubleCache(propertyType).Find(propertyName, value);\n            if (propertyHandle != null)\n               return propertyHandle;\n         }\n\n         propertyHandle = createProperty(file, propertyDescription, values, valueType, unitTypeKey);\n\n         if (canCache && !IFCAnyHandleUtil.IsNullOrHasNoValue(propertyHandle))\n         {\n            ExporterCacheManager.PropertyInfoCache.GetDoubleCache(propertyType).Add(propertyName, value, propertyHandle);\n         }\n\n         return propertyHandle;\n      }\n\n\n      /// <summary>Create Area property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateAreaPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateAreaProperty, PropertyType.Area);\n      }\n\n      /// <summary>Create Acceleration property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateAccelerationPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateAccelerationProperty, PropertyType.Acceleration);\n      }\n\n      /// <summary>Create AngularVelocity property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateAngularVelocityPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateAngularVelocityProperty, PropertyType.AngularVelocity);\n      }\n\n      /// <summary>Create AreaDensity property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateAreaDensityPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateAreaDensityProperty, PropertyType.AreaDensity);\n      }\n\n      /// <summary>Create DynamicViscosity property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateDynamicViscosityPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateDynamicViscosityProperty, PropertyType.DynamicViscosity);\n      }\n\n      /// <summary>Create ElectricCurrent property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateElectricCurrentPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateElectricCurrentProperty, PropertyType.ElectricCurrent);\n      }\n\n      /// <summary>Create ElectricVoltage property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateElectricVoltagePropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateElectricVoltageProperty, PropertyType.ElectricVoltage);\n      }\n\n      /// <summary>Create Energy property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateEnergyPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateEnergyProperty, PropertyType.Energy);\n      }\n\n      /// <summary>Create Force property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateForcePropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateForceProperty, PropertyType.Force);\n      }\n\n      /// <summary>Create Frequency property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateFrequencyPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateFrequencyProperty, PropertyType.Frequency);\n      }\n\n      /// <summary>Create HeatingValue property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateHeatingValuePropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateHeatingValueProperty, PropertyType.HeatingValue);\n      }\n\n      /// <summary>Create Illuminance property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateIlluminancePropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateIlluminanceProperty, PropertyType.Illuminance);\n      }\n\n      /// <summary>Create IonConcentration property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateIonConcentrationPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateIonConcentrationProperty, PropertyType.IonConcentration);\n      }\n\n      /// <summary>Create IsothermalMoistureCapacity property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateIsothermalMoistureCapacityPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateIsothermalMoistureCapacityProperty, PropertyType.IsothermalMoistureCapacity);\n      }\n\n      /// <summary>Create HeatFluxDensity property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateHeatFluxDensityPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateHeatFluxDensityProperty, PropertyType.HeatFluxDensity);\n      }\n\n      /// <summary>Create Length property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateLengthPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateLengthProperty, PropertyType.Length);\n      }\n\n      /// <summary>Create LinearForce property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateLinearForcePropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateLinearForceProperty, PropertyType.LinearForce);\n      }\n\n      /// <summary>Create LinearMoment property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateLinearMomentPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateLinearMomentProperty, PropertyType.LinearMoment);\n      }\n\n      /// <summary>Create LinearStiffness property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateLinearStiffnessPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateLinearStiffnessProperty, PropertyType.LinearStiffness);\n      }\n\n      /// <summary>Create LinearVelocity property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateLinearVelocityPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateLinearVelocityProperty, PropertyType.LinearVelocity);\n      }\n\n      /// <summary>Create LuminousFlux property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateLuminousFluxPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateLuminousFluxProperty, PropertyType.LuminousFlux);\n      }\n\n      /// <summary>Create LuminousIntensity property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateLuminousIntensityPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateLuminousIntensityProperty, PropertyType.LuminousIntensity);\n      }\n\n      /// <summary>Create Mass property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateMassPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateMassProperty, PropertyType.Mass);\n      }\n\n      /// <summary>Create MassDensity property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateMassDensityPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateMassDensityProperty, PropertyType.MassDensity);\n      }\n\n      /// <summary>Create MassFlowRate property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateMassFlowRatePropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateMassFlowRateProperty, PropertyType.MassFlowRate);\n      }\n\n      /// <summary>Create MassPerLength property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateMassPerLengthPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateMassPerLengthProperty, PropertyType.MassPerLength);\n      }\n\n      /// <summary>Create ModulusOfElasticity property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateModulusOfElasticityPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateModulusOfElasticityProperty, PropertyType.ModulusOfElasticity);\n      }\n\n      /// <summary>Create MoistureDiffusivity property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateMoistureDiffusivityPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateMoistureDiffusivityProperty, PropertyType.MoistureDiffusivity);\n      }\n\n      /// <summary>Create MomentOfInertia property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateMomentOfInertiaPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateMomentOfInertiaProperty, PropertyType.MomentOfInertia);\n      }\n\n      /// <summary>Create NormalisedRatio property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateNormalisedRatioPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateNormalisedRatioProperty, PropertyType.NormalisedRatio);\n      }\n\n      /// <summary>Create Numeric property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateNumericPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateNumericProperty, PropertyType.Numeric);\n      }\n\n      /// <summary>Create PlaneAngle property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreatePlaneAnglePropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreatePlaneAngleProperty, PropertyType.PlaneAngle);\n      }\n\n      /// <summary>Create PlanarForce property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreatePlanarForcePropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreatePlanarForceProperty, PropertyType.PlanarForce);\n      }\n\n      /// <summary>Create PositiveLength property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreatePositiveLengthPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreatePositiveLengthProperty, PropertyType.PositiveLength);\n      }\n\n      /// <summary>Create PositiveRatio property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreatePositiveRatioPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreatePositiveRatioProperty, PropertyType.PositiveRatio);\n      }\n\n      /// <summary>Create PositivePlaneAngle property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreatePositivePlaneAnglePropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreatePositivePlaneAngleProperty, PropertyType.PositivePlaneAngle);\n      }\n\n      /// <summary>Create Power property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreatePowerPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreatePowerProperty, PropertyType.Power);\n      }\n\n      /// <summary>Create Pressure property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreatePressurePropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreatePressureProperty, PropertyType.Pressure);\n      }\n\n      /// <summary>Create Ratio property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateRatioPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateRatioProperty, PropertyType.Ratio);\n      }\n\n      /// <summary>Create Real property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateRealPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateRealProperty, PropertyType.Real);\n      }\n\n      /// <summary>Create RotationalFrequency property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateRotationalFrequencyPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateRotationalFrequencyProperty, PropertyType.RotationalFrequency);\n      }\n\n      /// <summary>Create SoundPower property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateSoundPowerPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateSoundPowerProperty, PropertyType.SoundPower);\n      }\n\n      /// <summary>Create SoundPressure property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateSoundPressurePropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateSoundPressureProperty, PropertyType.SoundPressure);\n      }\n\n      /// <summary>Create SpecificHeatCapacity property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateSpecificHeatCapacityPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateSpecificHeatCapacityProperty, PropertyType.SpecificHeatCapacity);\n      }\n\n      /// <summary>Create ThermalConductivity property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateThermalConductivityPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateThermalConductivityProperty, PropertyType.ThermalConductivity);\n      }\n\n      /// <summary>Create ThermalExpansionCoefficient property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateThermalExpansionCoefficientPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateThermalExpansionCoefficientProperty, PropertyType.ThermalExpansionCoefficient);\n      }\n\n      /// <summary>Create ThermalResistance property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateThermalResistancePropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateThermalResistanceProperty, PropertyType.ThermalResistance);\n      }\n\n      /// <summary>Create ThermalTransmittance property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateThermalTransmittancePropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateThermalTransmittanceProperty, PropertyType.ThermalTransmittance);\n      }\n\n      /// <summary>Create ThermodynamicTemperature property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateThermodynamicTemperaturePropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateThermodynamicTemperatureProperty, PropertyType.ThermodynamicTemperature);\n      }\n\n      /// <summary>Create VaporPermeability property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateVaporPermeabilityPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateVaporPermeabilityProperty, PropertyType.VaporPermeability);\n      }\n\n      /// <summary>Create Volume property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateVolumePropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateVolumeProperty, PropertyType.Volume);\n      }\n\n      /// <summary>Create VolumetricFlowRate property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateVolumetricFlowRatePropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateVolumetricFlowRateProperty, PropertyType.VolumetricFlowRate);\n      }\n\n      /// <summary>Create Torque property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateTorquePropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateTorqueProperty, PropertyType.Torque);\n      }\n\n      /// <summary>Create WarpingConstant property, using a cached value if possible.</summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created or cached property handle.</returns>\n      public static IFCAnyHandle CreateWarpingConstantPropertyFromCache(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericPropertyFromCache(file, propertyDescription, values, valueType, unitTypeKey, CreateWarpingConstantProperty, PropertyType.WarpingConstant);\n      }\n\n\n      #endregion\n\n      #region Create___Property\n\n      /// <summary>\n      /// Create property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <param name=\"createMeasure\">The craete measure function.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateGenericProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, \n         string unitTypeKey, Func<double, IFCData> createMeasure)\n      {\n         if (values == null)\n            return null;\n\n         List<IFCData> dataList = new List<IFCData>();\n         foreach (var val in values)\n            dataList.Add(val.HasValue ? createMeasure(val.Value) : null);\n         return CreateCommonPropertyFromList(file, propertyDescription, dataList, valueType, unitTypeKey);\n      }\n\n      /// <summary>\n      /// Create Area property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateAreaProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsAreaMeasure);\n      }\n\n      /// <summary>\n      /// Create Acceleration property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateAccelerationProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsAccelerationMeasure);\n      }\n\n      /// <summary>\n      /// Create AngularVelocity property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateAngularVelocityProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsAngularVelocityMeasure);\n      }\n\n      /// <summary>\n      /// Create AreaDensity property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateAreaDensityProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsAreaDensityMeasure);\n      }\n\n      /// <summary>\n      /// Create DynamicViscosity property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateDynamicViscosityProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsDynamicViscosityMeasure);\n      }\n\n      /// <summary>\n      /// Create ElectricCurrent property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateElectricCurrentProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsElectricCurrentMeasure);\n      }\n\n      /// <summary>\n      /// Create ElectricVoltage property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateElectricVoltageProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsElectricVoltageMeasure);\n      }\n\n      /// <summary>\n      /// Create Energy property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateEnergyProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsEnergyMeasure);\n      }\n\n      /// <summary>\n      /// Create Force property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateForceProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsForceMeasure);\n      }\n\n      /// <summary>\n      /// Create Frequency property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateFrequencyProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsFrequencyMeasure);\n      }\n\n      /// <summary>\n      /// Create HeatingValue property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateHeatingValueProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsHeatingValueMeasure);\n      }\n\n      /// <summary>\n      /// Create Illuminance property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateIlluminanceProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsIlluminanceMeasure);\n      }\n\n      /// <summary>\n      /// Create IonConcentration property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateIonConcentrationProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsIonConcentrationMeasure);\n      }\n\n      /// <summary>\n      /// Create IsothermalMoistureCapacity property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateIsothermalMoistureCapacityProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsIsothermalMoistureCapacityMeasure);\n      }\n\n      /// <summary>\n      /// Create HeatFluxDensity property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateHeatFluxDensityProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsHeatFluxDensityMeasure);\n      }\n\n      /// <summary>\n      /// Create Length property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLengthProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsLengthMeasure);\n      }\n\n      /// <summary>\n      /// Create LinearForce property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLinearForceProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsLinearForceMeasure);\n      }\n\n      /// <summary>\n      /// Create LinearMoment property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLinearMomentProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsLinearMomentMeasure);\n      }\n\n      /// <summary>\n      /// Create LinearStiffness property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLinearStiffnessProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsLinearStiffnessMeasure);\n      }\n\n      /// <summary>\n      /// Create LinearVelocity property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLinearVelocityProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsLinearVelocityMeasure);\n      }\n\n      /// <summary>\n      /// Create LuminousFlux property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLuminousFluxProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsLuminousFluxMeasure);\n      }\n\n      /// <summary>\n      /// Create LuminousIntensity property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateLuminousIntensityProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsLuminousIntensityMeasure);\n      }\n\n      /// <summary>\n      /// Create Mass property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateMassProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsMassMeasure);\n      }\n\n      /// <summary>\n      /// Create MassDensity property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateMassDensityProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsMassDensityMeasure);\n      }\n\n      /// <summary>\n      /// Create MassFlowRate property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateMassFlowRateProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsMassFlowRateMeasure);\n      }\n\n      /// <summary>\n      /// Create MassPerLength property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateMassPerLengthProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsMassPerLengthMeasure);\n      }\n\n      /// <summary>\n      /// Create ModulusOfElasticity property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateModulusOfElasticityProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsModulusOfElasticityMeasure);\n      }\n\n      /// <summary>\n      /// Create MoistureDiffusivity property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateMoistureDiffusivityProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsMoistureDiffusivityMeasure);\n      }\n\n      /// <summary>\n      /// Create MomentOfInertia property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateMomentOfInertiaProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsMomentOfInertiaMeasure);\n      }\n\n      /// <summary>\n      /// Create NormalisedRatio property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateNormalisedRatioProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsNormalisedRatioMeasure);\n      }\n\n      /// <summary>\n      /// Create Numeric property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateNumericProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsNumeric);\n      }\n\n      /// <summary>\n      /// Create PlaneAngle property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePlaneAngleProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsPlaneAngleMeasure);\n      }\n\n      /// <summary>\n      /// Create PlanarForce property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePlanarForceProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsPlanarForceMeasure);\n      }\n\n      /// <summary>\n      /// Create PositiveLength property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePositiveLengthProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsPositiveLengthMeasure);\n      }\n\n      /// <summary>\n      /// Create PositiveRatio property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePositiveRatioProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsPositiveRatioMeasure);\n      }\n\n      /// <summary>\n      /// Create PositivePlaneAngle property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePositivePlaneAngleProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsPositivePlaneAngleMeasure);\n      }\n\n      /// <summary>\n      /// Create Power property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePowerProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsPowerMeasure);\n      }\n\n      /// <summary>\n      /// Create Pressure property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreatePressureProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsPressureMeasure);\n      }\n\n      /// <summary>\n      /// Create Ratio property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateRatioProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsRatioMeasure);\n      }\n\n      /// <summary>\n      /// Create Real property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateRealProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsReal);\n      }\n\n      /// <summary>\n      /// Create RotationalFrequency property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateRotationalFrequencyProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsRotationalFrequencyMeasure);\n      }\n\n      /// <summary>\n      /// Create SoundPower property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateSoundPowerProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsSoundPowerMeasure);\n      }\n\n      /// <summary>\n      /// Create SoundPressure property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateSoundPressureProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsSoundPressureMeasure);\n      }\n\n      /// <summary>\n      /// Create SpecificHeatCapacity property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateSpecificHeatCapacityProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsSpecificHeatCapacityMeasure);\n      }\n\n      /// <summary>\n      /// Create ThermalConductivity property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateThermalConductivityProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsThermalConductivityMeasure);\n      }\n\n      /// <summary>\n      /// Create ThermalExpansionCoefficient property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateThermalExpansionCoefficientProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsThermalExpansionCoefficientMeasure);\n      }\n\n      /// <summary>\n      /// Create ThermalResistance property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateThermalResistanceProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsThermalResistanceMeasure);\n      }\n\n      /// <summary>\n      /// Create ThermalTransmittance property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateThermalTransmittanceProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsThermalTransmittanceMeasure);\n      }\n\n      /// <summary>\n      /// Create ThermodynamicTemperature property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateThermodynamicTemperatureProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsThermodynamicTemperatureMeasure);\n      }\n\n      /// <summary>\n      /// Create VaporPermeability property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateVaporPermeabilityProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsVaporPermeabilityMeasure);\n      }\n\n      /// <summary>\n      /// Create Volume property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateVolumeProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsVolumeMeasure);\n      }\n\n      /// <summary>\n      /// Create VolumetricFlowRate property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateVolumetricFlowRateProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsVolumetricFlowRateMeasure);\n      }\n\n      /// <summary>\n      /// Create Torque property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateTorqueProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsTorqueMeasure);\n      }\n\n      /// <summary>\n      /// Create WarpingConstant property.\n      /// </summary>\n      /// <param name=\"file\">The IFC file.</param>\n      /// <param name=\"propertyDescription\">The name and description of the property.</param>\n      /// <param name=\"values\">The values of the property.</param>\n      /// <param name=\"valueType\">The value type of the property.</param>\n      /// <returns>The created property handle.</returns>\n      public static IFCAnyHandle CreateWarpingConstantProperty(IFCFile file, PropertyDescription propertyDescription, IList<double?> values, PropertyValueType valueType, string unitTypeKey)\n      {\n         return CreateGenericProperty(file, propertyDescription, values, valueType, unitTypeKey, IFCDataUtil.CreateAsWarpingConstantMeasure);\n      }\n      #endregion\n\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/QuantityDescription.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet\r\n{\r\n   /// <summary>\r\n   /// A description mapping of a group of Revit parameters and/or calculated values to an IfcElementQuantity.\r\n   /// </summary>\r\n   /// <remarks>\r\n   /// The mapping includes: the name of the IFC quantity, the entity type to which this mapping of quantities apply,\r\n   /// and an array of quantities.  A quantity description is valid for only one entity type.\r\n   /// </remarks>\r\n   public class QuantityDescription : Description\r\n   {\r\n      /// <summary>\r\n      /// The quantities stored in this quantity description.\r\n      /// </summary>\r\n      public IList<QuantityEntry> Entries { get; set; } = new List<QuantityEntry>();\r\n\r\n      /// <summary>\r\n      /// Defines the building code used to calculate the element quantity.\r\n      /// </summary>\r\n      public string MethodOfMeasurement { get; set; } = String.Empty;\r\n\r\n      /// <summary>\r\n      /// Determines whether this quantity set description is user-defined.\r\n      /// </summary>\r\n      public bool IsUserDefined { get; set; } = false;\r\n\r\n      public QuantityDescription() { }\r\n\r\n      public QuantityDescription(string baseName, IFCEntityType entityType)\r\n      {\r\n         string quantitySetName = (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4) ?\r\n             \"BaseQuantities\" : \"Qto_\" + baseName + \"BaseQuantities\";\r\n         Name = quantitySetName;\r\n         EntityTypes.Add(entityType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add an entry to the quantity map.\r\n      /// </summary>\r\n      /// <param name=\"entry\">The entry to add.</param>\r\n      public void AddEntry(QuantityEntry entry)\r\n      {\r\n         PropertySetupType propertyMappingSetup = IsUserDefined ?\r\n            PropertySetupType.UserDefinedPropertySets : PropertySetupType.IfcBaseQuantities;\r\n\r\n         IFCPropertyMappingInfo mappedRevitParameter = GetMappedRevitParameterForDescription(propertyMappingSetup, entry.PropertyName);\r\n\r\n         if (mappedRevitParameter != null)\r\n         {\r\n            entry.IsExcluded = !mappedRevitParameter.ExportFlag;\r\n\r\n            ElementId parameterId = mappedRevitParameter.RevitPropertyId;\r\n            string parameterName = mappedRevitParameter.RevitPropertyName;\r\n            if (ParameterUtils.IsBuiltInParameter(parameterId))\r\n            {\r\n               entry.SetRevitBuiltInParameter((BuiltInParameter)parameterId.Value);\r\n            }\r\n            else if (!string.IsNullOrEmpty(parameterName))\r\n            {\r\n               entry.SetRevitParameterName(parameterName);\r\n            }\r\n         }\r\n\r\n         entry.UpdateEntry();\r\n         Entries.Add(entry);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Remove an entry from the quantity map.\r\n      /// </summary>\r\n      /// <param name=\"entry\">The entry to remove.</param>\r\n      public bool RemoveEntry(QuantityEntry entry)\r\n      {\r\n         return Entries.Remove(entry);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates handles for the quantities.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC class.</param>\r\n      /// <param name=\"ifcParams\">The extrusion creation data, used to get extra parameter information.</param>\r\n      /// <param name=\"elementToUse\">The base element.</param>\r\n      /// <param name=\"elemTypeToUse\">The base element type.</param>\r\n      /// <returns>A set of quantities handles.</returns>\r\n      public HashSet<IFCAnyHandle> ProcessEntries(IFCFile file, ExporterIFC exporterIFC, IFCExportBodyParams ifcParams, Element elementToUse, ElementType elemTypeToUse)\r\n      {\r\n         HashSet<IFCAnyHandle> props = new HashSet<IFCAnyHandle>();\r\n         foreach (QuantityEntry entry in Entries)\r\n         {\r\n            IFCAnyHandle propHnd = entry.ProcessEntry(file, exporterIFC, ifcParams, elementToUse, elemTypeToUse);\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propHnd))\r\n               props.Add(propHnd);\r\n         }\r\n         return props;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/QuantityEntry.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet\r\n{\r\n   /// <summary>\r\n   /// This enumerated type represents the types of quantities that can be exported.\r\n   /// </summary>\r\n   public enum QuantityType\r\n   {\r\n      /// <summary>\r\n      /// A real number quantity.\r\n      /// </summary>\r\n      Real,\r\n      /// <summary>\r\n      /// A length quantity.\r\n      /// </summary>\r\n      Length,\r\n      PositiveLength,\r\n      /// <summary>\r\n      /// An area quantity.\r\n      /// </summary>\r\n      Area,\r\n      /// <summary>\r\n      /// A volume quantity.\r\n      /// </summary>\r\n      Volume,\r\n      /// <summary>\r\n      /// A Weight quantity\r\n      /// </summary>\r\n      Weight,\r\n      /// <summary>\r\n      /// A Count quantity\r\n      /// </summary>\r\n      Count,\r\n      /// <summary>\r\n      /// A time duration quantity\r\n      /// </summary>\r\n      Time,\r\n      Mass\r\n   }\r\n\r\n   /// <summary>\r\n   /// Represents a mapping from a Revit parameter or calculated quantity to an IFC quantity.\r\n   /// </summary>\r\n   public class QuantityEntry : Entry<QuantityEntryMap>\r\n   {\r\n      /// <summary>\r\n      /// Constructs a QuantityEntry object.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      /// \r\n      public QuantityEntry(string revitParameterName)\r\n          : base(revitParameterName)\r\n      {\r\n\r\n      }\r\n      public QuantityEntry(string revitParameterName, string propertyName)\r\n          : base(propertyName, new QuantityEntryMap(revitParameterName, propertyName))\r\n      {\r\n\r\n      }\r\n      public QuantityEntry(string propertyName, BuiltInParameter builtInParameter)\r\n          : base(propertyName, new QuantityEntryMap(propertyName, null) { RevitBuiltInParameter = builtInParameter })\r\n      {\r\n\r\n      }\r\n      public QuantityEntry(string propertyName, PropertyCalculator calculator)\r\n          : base(propertyName, new QuantityEntryMap(propertyName, null) { PropertyCalculator = calculator })\r\n      {\r\n\r\n      }\r\n\r\n      public QuantityEntry(QuantityType quantityType, string propertyName, IEnumerable<QuantityEntryMap> entries)\r\n           : base(propertyName, entries)\r\n      {\r\n         QuantityType = quantityType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The type of the quantity.\r\n      /// </summary>\r\n      public QuantityType QuantityType { get; set; } = QuantityType.Real;\r\n\r\n      /// <summary>\r\n      /// Defines the building code used to calculate the element quantity.\r\n      /// </summary>\r\n      public string MethodOfMeasurement { get; set; } = String.Empty;\r\n\r\n      /// <summary>\r\n      /// Process to create element quantity.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element of which this property is created for.</param>\r\n      /// <param name=\"elementType\">The element type of which this quantity is created for.</param>\r\n      /// <returns>The created quantity handle.</returns>\r\n      public IFCAnyHandle ProcessEntry(IFCFile file, ExporterIFC exporterIFC,\r\n         IFCExportBodyParams extrusionCreationData, Element element, ElementType elementType)\r\n      {\r\n         foreach (QuantityEntryMap entry in Entries)\r\n         {\r\n            IFCAnyHandle result = entry.ProcessEntry(file, exporterIFC, extrusionCreationData, element, \r\n               elementType, this);\r\n            if (result != null)\r\n               return result;\r\n         }\r\n         return null;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/PropertySet/QuantityEntryMap.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\n\r\nnamespace Revit.IFC.Export.Exporter.PropertySet\r\n{\r\n\r\n\r\n   /// <summary>\r\n   /// Represents a mapping from a Revit parameter or calculated quantity to an IFC quantity.\r\n   /// </summary>\r\n   public class QuantityEntryMap : EntryMap\r\n   {\r\n      public QuantityEntryMap() { }\r\n      /// <summary>\r\n      /// Constructs a QuantityEntry object.\r\n      /// </summary>\r\n      /// <param name=\"revitParameterName\">\r\n      /// Revit parameter name.\r\n      /// </param>\r\n      public QuantityEntryMap(string revitParameterName, string compatibleParamName)\r\n          : base(revitParameterName, compatibleParamName)\r\n      {\r\n\r\n      }\r\n\r\n      public QuantityEntryMap(BuiltInParameter builtInParameter)\r\n           : base(builtInParameter)\r\n      {\r\n\r\n      }\r\n\r\n      public QuantityEntryMap(PropertyCalculator calculator)\r\n           : base(calculator)\r\n      {\r\n\r\n      }\r\n\r\n      public QuantityEntryMap(string revitParameterName, BuiltInParameter builtInParameter)\r\n          : base(revitParameterName, builtInParameter)\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Process to create element quantity.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"extrusionCreationData\">The IFCExportBodyParams.</param>\r\n      /// <param name=\"element\">The element of which this property is created for.</param>\r\n      /// <param name=\"elementType\">The element type of which this quantity is created for.</param>\r\n      /// <returns>The created quantity handle.</returns>\r\n      public IFCAnyHandle ProcessEntry(IFCFile file, ExporterIFC exporterIFC, IFCExportBodyParams extrusionCreationData,\r\n             Element element, ElementType elementType, QuantityEntry parentEntry)\r\n      {\r\n         bool useProperty = (!String.IsNullOrEmpty(RevitParameterName)) || (RevitBuiltInParameter != BuiltInParameter.INVALID);\r\n\r\n         bool success = false;\r\n         object val = 0;\r\n         if (useProperty)\r\n         {\r\n            if (parentEntry.QuantityType is QuantityType.Count)\r\n            {\r\n               int? intValPar = null;\r\n               intValPar = (ParameterUtil.GetIntValueFromElementOrSymbol(element, RevitParameterName));\r\n               if (intValPar.HasValue)\r\n               {\r\n                  success = true;\r\n                  val = intValPar.Value;\r\n               }\r\n            }\r\n            else\r\n            {\r\n               if (PropertyUtil.GetQuantityDoubleValueFromParameter(element, RevitParameterName, RevitBuiltInParameter, parentEntry.QuantityType, out double dblVal))\r\n                  val = dblVal;\r\n            }\r\n         }\r\n         \r\n         if (PropertyCalculator != null && !success)\r\n         {\r\n            success = PropertyCalculator.Calculate(exporterIFC, extrusionCreationData, element, elementType, this);\r\n            if (success && parentEntry.QuantityType == QuantityType.Count)\r\n               val = PropertyCalculator.GetIntValue();\r\n            else\r\n               val = PropertyCalculator.GetDoubleValue();\r\n         }\r\n\r\n         IFCAnyHandle quantityHnd = null;\r\n         if (success)\r\n         {\r\n            switch (parentEntry.QuantityType)\r\n            {\r\n               case QuantityType.PositiveLength:\r\n               case QuantityType.Length:\r\n                  quantityHnd = IFCInstanceExporter.CreateQuantityLength(file, parentEntry.PropertyName, parentEntry.MethodOfMeasurement, null, (double)val);\r\n                  break;\r\n               case QuantityType.Area:\r\n                  quantityHnd = IFCInstanceExporter.CreateQuantityArea(file, parentEntry.PropertyName, parentEntry.MethodOfMeasurement, null, (double)val);\r\n                  break;\r\n               case QuantityType.Volume:\r\n                  quantityHnd = IFCInstanceExporter.CreateQuantityVolume(file, parentEntry.PropertyName, parentEntry.MethodOfMeasurement, null, (double)val);\r\n                  break;\r\n               case QuantityType.Weight:\r\n               case QuantityType.Mass:\r\n                  // NOTE: There is no distinction between weight and mass currently in IFC4.quantityHnd = IFCInstanceExporter.CreateQuantityWeight(file, parentEntry.PropertyName, parentEntry.MethodOfMeasurement, null, (double)val);\r\n                  break;\r\n               case QuantityType.Count:\r\n                  quantityHnd = IFCInstanceExporter.CreateQuantityCount(file, parentEntry.PropertyName, parentEntry.MethodOfMeasurement, null, (int)val);\r\n                  break;\r\n               case QuantityType.Time:\r\n                  quantityHnd = IFCInstanceExporter.CreateQuantityTime(file, parentEntry.PropertyName, parentEntry.MethodOfMeasurement, null, (double)val);\r\n                  break;\r\n               default:\r\n                  throw new InvalidOperationException(\"Missing case!\");\r\n            }\r\n         }\r\n\r\n         return quantityHnd;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/ProxyElementExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export a Revit element as IfcBuildingElementProxy.\r\n   /// </summary>\r\n   class ProxyElementExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports an element as building element proxy.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <returns>True if exported successfully, false otherwise.</returns>\r\n      public static bool Export(ExporterIFC exporterIFC, Element element,\r\n          GeometryElement geometryElement, ProductWrapper productWrapper, IFCExportInfoPair exportType=null)\r\n      {\r\n         bool exported = false;\r\n         if (element == null || geometryElement == null)\r\n            return exported;\r\n\r\n         exportType ??= new IFCExportInfoPair(IFCEntityType.IfcBuildingElementProxy, IFCEntityType.IfcBuildingElementProxyType, null);\r\n         \r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            exported = (GenericElementExporter.ExportSimpleGenericElement(exporterIFC, element, geometryElement, productWrapper, exportType) != null);\r\n            if (exported)\r\n               tr.Commit();\r\n         }\r\n\r\n         return exported;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/RailingExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.Architecture;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing System.Linq;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export ceilings.\r\n   /// </summary>\r\n   class RailingExporter\r\n   {\r\n      private static ElementId GetStairOrRampHostId(Railing railingElem)\r\n      {\r\n         ElementId returnHostId = ElementId.InvalidElementId;\r\n\r\n         if (railingElem == null)\r\n            return returnHostId;\r\n\r\n         ElementId hostId = railingElem.HostId;\r\n         if (hostId == ElementId.InvalidElementId)\r\n            return returnHostId;\r\n\r\n         if (!ExporterCacheManager.StairRampContainerInfoCache.ContainsStairRampContainerInfo(hostId))\r\n            return returnHostId;\r\n\r\n         Element host = railingElem.Document.GetElement(hostId);\r\n         if (host == null)\r\n            return returnHostId;\r\n\r\n         if (!(host is Stairs) && !StairsExporter.IsLegacyStairs(host) && !RampExporter.IsRamp(host))\r\n            return returnHostId;\r\n\r\n         returnHostId = hostId;\r\n         return returnHostId;\r\n      }\r\n\r\n      private static IFCAnyHandle CopyRailingHandle(ExporterIFC exporterIFC, Element elem, \r\n         ElementId catId, IFCAnyHandle origLocalPlacement, IFCAnyHandle origRailing, int index)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         IFCAnyHandle origRailingObjectPlacement = IFCAnyHandleUtil.GetObjectPlacement(origRailing);\r\n         IFCAnyHandle railingRelativePlacement = IFCAnyHandleUtil.GetInstanceAttribute(origRailingObjectPlacement, \"RelativePlacement\");\r\n         IFCAnyHandle parentRelativePlacement = IFCAnyHandleUtil.GetInstanceAttribute(origLocalPlacement, \"RelativePlacement\");\r\n\r\n         IFCAnyHandle newRelativePlacement = null;\r\n         IFCAnyHandle parentRelativeOrig = IFCAnyHandleUtil.GetInstanceAttribute(parentRelativePlacement, \"Location\");\r\n\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(parentRelativeOrig))\r\n         {\r\n            IList<double> parentVec = IFCAnyHandleUtil.GetCoordinates(parentRelativeOrig);\r\n            IFCAnyHandle railingRelativeOrig = IFCAnyHandleUtil.GetInstanceAttribute(railingRelativePlacement, \"Location\");\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(railingRelativeOrig))\r\n            {\r\n               IList<double> railingVec = IFCAnyHandleUtil.GetCoordinates(railingRelativeOrig);\r\n\r\n               IList<double> newMeasure = new List<double>();\r\n               newMeasure.Add(railingVec[0] - parentVec[0]);\r\n               newMeasure.Add(railingVec[1] - parentVec[1]);\r\n               newMeasure.Add(railingVec[2]);\r\n\r\n               IFCAnyHandle locPtHnd = ExporterUtil.CreateCartesianPoint(file, newMeasure);\r\n               newRelativePlacement = IFCInstanceExporter.CreateAxis2Placement3D(file, locPtHnd, null, null);\r\n            }\r\n            else\r\n            {\r\n               IList<double> railingMeasure = new List<double>();\r\n               railingMeasure.Add(-parentVec[0]);\r\n               railingMeasure.Add(-parentVec[1]);\r\n               railingMeasure.Add(0.0);\r\n               IFCAnyHandle locPtHnd = ExporterUtil.CreateCartesianPoint(file, railingMeasure);\r\n               newRelativePlacement = IFCInstanceExporter.CreateAxis2Placement3D(file, locPtHnd, null, null);\r\n            }\r\n         }\r\n\r\n         IFCAnyHandle newLocalPlacement = IFCInstanceExporter.CreateLocalPlacement(file, origLocalPlacement, newRelativePlacement);\r\n         IFCAnyHandle origRailingRep = IFCAnyHandleUtil.GetInstanceAttribute(origRailing, \"Representation\");\r\n         IFCAnyHandle newProdRep = ExporterUtil.CopyProductDefinitionShape(exporterIFC, elem, catId, origRailingRep);\r\n\r\n         string ifcEnumTypeAsString = IFCAnyHandleUtil.GetEnumerationAttribute(origRailing, \"PredefinedType\");\r\n\r\n         string copyGUID = GUIDUtil.GenerateIFCGuidFrom(\r\n            GUIDUtil.CreateGUIDString(IFCEntityType.IfcRailing, index.ToString(), origRailing));\r\n         IFCAnyHandle copyOwnerHistory = IFCAnyHandleUtil.GetInstanceAttribute(origRailing, \"OwnerHistory\");\r\n\r\n         return IFCInstanceExporter.CreateRailing(exporterIFC, elem, copyGUID, copyOwnerHistory, newLocalPlacement, newProdRep, ifcEnumTypeAsString);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a railing to IFC railing\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"railing\">\r\n      /// The ceiling element to be exported.\r\n      /// </param>\r\n      /// <param name=\"geomElement\">\r\n      /// The geometry element.\r\n      /// </param>\r\n      /// <param name=\"productWrapper\">\r\n      /// The ProductWrapper.\r\n      /// </param>\r\n      public static void ExportRailingElement(ExporterIFC exporterIFC, Railing railing, ProductWrapper productWrapper)\r\n      {\r\n         if (railing == null)\r\n            return;\r\n\r\n         Options geomOptions = GeometryUtil.GetIFCExportGeometryOptions();\r\n         var oneLevelGeom = GeometryUtil.GetOneLevelGeometryElement(railing.get_Geometry(geomOptions), 0);\r\n         GeometryElement geomElement = oneLevelGeom.element;\r\n\r\n         // If this is a multistory railing, the geometry will contain all of the levels of railing.  We only want one.\r\n         if (geomElement == null)\r\n            return;\r\n\r\n         string ifcEnumType;\r\n         IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(railing, out ifcEnumType);\r\n         if (exportType.IsUnKnown)\r\n         {\r\n            ifcEnumType = ExporterUtil.GetIFCTypeFromExportTable(railing);\r\n         }\r\n         \r\n         ExportRailing(exporterIFC, railing, geomElement, ifcEnumType, productWrapper);\r\n      }\r\n\r\n      private static IList<ElementId> CollectSubElements(Railing railingElem)\r\n      {\r\n         IList<ElementId> subElementIds = new List<ElementId>();\r\n         if (railingElem != null)\r\n         {\r\n            ElementId topRailId = railingElem.TopRail;\r\n            if (topRailId != ElementId.InvalidElementId)\r\n               subElementIds.Add(topRailId);\r\n            IList<ElementId> handRailIds = railingElem.GetHandRails();\r\n            if (handRailIds != null)\r\n            {\r\n               foreach (ElementId handRailId in handRailIds)\r\n               {\r\n                  HandRail handRail = railingElem.Document.GetElement(handRailId) as HandRail;\r\n                  if (handRail != null)\r\n                  {\r\n                     subElementIds.Add(handRailId);\r\n                     IList<ElementId> supportIds = handRail.GetSupports();\r\n                     foreach (ElementId supportId in supportIds)\r\n                     {\r\n                        subElementIds.Add(supportId);\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         return subElementIds;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a type handle for the railing element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The railing element to be exported.</param>\r\n      /// <param name=\"file\">The IFC file handle.</param>\r\n      /// <param name=\"exportInfo\">The export information of the railing element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <param name=\"railingHandle\">The IfcRailing handle to be exported.</param>\r\n      private static void CreateTypeHandle(IFCExportInfoPair exportInfo, Element element, IFCFile file, ProductWrapper productWrapper, IFCAnyHandle railingHandle)\r\n      {\r\n         IFCAnyHandle typeHnd = ExporterUtil.CreateGenericTypeFromElement(element, exportInfo, file, productWrapper);\r\n         ExporterCacheManager.TypeRelationsCache.Add(typeHnd, railingHandle);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collects the sub-elements of a Railing, to prevent double export.\r\n      /// </summary>\r\n      /// <param name=\"railingElem\">\r\n      /// The railing.\r\n      /// </param>\r\n      public static void AddSubElementsToCache(Railing railingElem)\r\n      {\r\n         IList<ElementId> subElementIds = CollectSubElements(railingElem);\r\n         foreach (ElementId subElementId in subElementIds)\r\n            ExporterCacheManager.RailingSubElementCache.Add(subElementId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports an element as IFC railing.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"element\">\r\n      /// The element to be exported.\r\n      /// </param>\r\n      /// <param name=\"geometryElement\">\r\n      /// The geometry element.\r\n      /// </param>\r\n      /// <param name=\"productWrapper\">\r\n      /// The ProductWrapper.\r\n      /// </param>\r\n      public static void ExportRailing(ExporterIFC exporterIFC, Element element, GeometryElement geomElem, string ifcEnumType, ProductWrapper productWrapper)\r\n      {\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         Common.Enums.IFCEntityType elementClassTypeEnum = Common.Enums.IFCEntityType.IfcRailing;\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n            return;\r\n\r\n         ElementType elemType = element.Document.GetElement(element.GetTypeId()) as ElementType;\r\n         IFCFile file = exporterIFC.GetFile();\r\n         Options geomOptions = GeometryUtil.GetIFCExportGeometryOptions();\r\n\r\n         using (IFCTransaction transaction = new IFCTransaction(file))\r\n         {\r\n            using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, element, null))\r\n            {\r\n               using (IFCExportBodyParams ecData = new IFCExportBodyParams())\r\n               {\r\n                  IFCAnyHandle localPlacement = setter.LocalPlacement;\r\n                  StairRampContainerInfo stairRampInfo = null;\r\n                  ElementId hostId = GetStairOrRampHostId(element as Railing);\r\n                  Transform inverseTrf = Transform.Identity;\r\n                  if (hostId != ElementId.InvalidElementId)\r\n                  {\r\n                     stairRampInfo = ExporterCacheManager.StairRampContainerInfoCache.GetStairRampContainerInfo(hostId);\r\n                     IFCAnyHandle stairRampLocalPlacement = stairRampInfo.LocalPlacements[0];\r\n                     Transform relTrf = ExporterIFCUtils.GetRelativeLocalPlacementOffsetTransform(stairRampLocalPlacement, localPlacement);\r\n                     inverseTrf = relTrf.Inverse;\r\n\r\n                     IFCAnyHandle railingLocalPlacement = ExporterUtil.CreateLocalPlacement(file, stairRampLocalPlacement,\r\n                         inverseTrf.Origin, inverseTrf.BasisZ, inverseTrf.BasisX);\r\n                     localPlacement = railingLocalPlacement;\r\n                  }\r\n                  ecData.SetLocalPlacement(localPlacement);\r\n\r\n                  SolidMeshGeometryInfo solidMeshInfo = GeometryUtil.GetSplitSolidMeshGeometry(geomElem);\r\n                  IList<Solid> solids = solidMeshInfo.GetSolids();\r\n                  IList<Mesh> meshes = solidMeshInfo.GetMeshes();\r\n                  IList<GeometryObject> gObjs = FamilyExporterUtil.RemoveInvisibleSolidsAndMeshes(element.Document, exporterIFC, ref solids, ref meshes);\r\n\r\n                  Railing railingElem = element as Railing;\r\n                  IList<ElementId> subElementIds = CollectSubElements(railingElem);\r\n\r\n                  foreach (ElementId subElementId in subElementIds)\r\n                  {\r\n                     Element subElement = railingElem.Document.GetElement(subElementId);\r\n                     if (subElement != null)\r\n                     {\r\n                        GeometryElement allLevelsGeometry = subElement.get_Geometry(geomOptions);\r\n                        var oneLevelGeom = GeometryUtil.GetOneLevelGeometryElement(allLevelsGeometry, 0);\r\n                        GeometryElement subElementGeom = oneLevelGeom.element;\r\n                        // Get rail terminations geometry\r\n                        List<GeometryElement> overallGeometry = GeometryUtil.GetAdditionalOneLevelGeometry(allLevelsGeometry, oneLevelGeom.symbolId);\r\n                        overallGeometry.Add(subElementGeom);\r\n\r\n                        foreach (GeometryElement subGeomentry in overallGeometry)\r\n                        {\r\n                           SolidMeshGeometryInfo subElementSolidMeshInfo = GeometryUtil.GetSplitSolidMeshGeometry(subGeomentry);\r\n                           IList<Solid> subElemSolids = subElementSolidMeshInfo.GetSolids();\r\n                           IList<Mesh> subElemMeshes = subElementSolidMeshInfo.GetMeshes();\r\n                           IList<GeometryObject> partGObjs = FamilyExporterUtil.RemoveInvisibleSolidsAndMeshes(element.Document, exporterIFC, ref subElemSolids, ref subElemMeshes);\r\n\r\n                           foreach (Solid subElSolid in subElemSolids)\r\n                              solids.Add(subElSolid);\r\n                           foreach (Mesh subElMesh in subElemMeshes)\r\n                              meshes.Add(subElMesh);\r\n                        }\r\n                     }\r\n                  }\r\n\r\n                  ElementId catId = CategoryUtil.GetSafeCategoryId(element);\r\n                  BodyData bodyData = null;\r\n                  BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.Medium);\r\n\r\n                  if (solids.Count > 0 || meshes.Count > 0)\r\n                  {\r\n                     bodyData = BodyExporter.ExportBody(exporterIFC, element, catId, ElementId.InvalidElementId, solids, meshes, bodyExporterOptions, ecData);\r\n                  }\r\n                  else\r\n                  {\r\n                     IList<GeometryObject> geomlist = new List<GeometryObject>();\r\n                     geomlist.Add(geomElem);\r\n                     bodyData = BodyExporter.ExportBody(exporterIFC, element, catId, ElementId.InvalidElementId, geomlist, bodyExporterOptions, ecData);\r\n                  }\r\n\r\n                  IFCAnyHandle bodyRep = bodyData.RepresentationHnd;\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(bodyRep))\r\n                  {\r\n                     if (ecData != null)\r\n                        ecData.ClearOpenings();\r\n                     return;\r\n                  }\r\n\r\n                  IList<IFCAnyHandle> representations = new List<IFCAnyHandle>();\r\n                  representations.Add(bodyRep);\r\n\r\n                  IList<GeometryObject> geomObjects = new List<GeometryObject>(solids);\r\n                  foreach (Mesh mesh in meshes)\r\n                     geomObjects.Add(mesh);\r\n\r\n                  Transform boundingBoxTrf = (bodyData.OffsetTransform != null) ? bodyData.OffsetTransform.Inverse : Transform.Identity;\r\n                  boundingBoxTrf = inverseTrf.Multiply(boundingBoxTrf);\r\n                  IFCAnyHandle boundingBoxRep = BoundingBoxExporter.ExportBoundingBox(exporterIFC, geomObjects, boundingBoxTrf);\r\n                  if (boundingBoxRep != null)\r\n                     representations.Add(boundingBoxRep);\r\n\r\n                  IFCAnyHandle prodRep = IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, representations);\r\n\r\n                  IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n                  string instanceGUID = GUIDUtil.CreateGUID(element);\r\n\r\n                  IFCExportInfoPair exportInfo = ExporterUtil.GetProductExportType(element, out ifcEnumType);\r\n\r\n                  IFCAnyHandle railing = IFCInstanceExporter.CreateGenericIFCEntity(exportInfo, file, element, instanceGUID, ownerHistory,\r\n                            ecData.GetLocalPlacement(), prodRep);\r\n\r\n                  CreateTypeHandle(exportInfo, element, file, productWrapper, railing);\r\n\r\n                  bool associateToLevel = (hostId == ElementId.InvalidElementId);\r\n\r\n                  productWrapper.AddElement(element, railing, setter, ecData, associateToLevel, exportInfo);\r\n                  OpeningUtil.CreateOpeningsIfNecessary(railing, element, ecData, bodyData.OffsetTransform,\r\n                      exporterIFC, ecData.GetLocalPlacement(), setter, productWrapper);\r\n\r\n                  IFCAnyHandle singleMaterialOverrideHnd = null;\r\n                  IList<ElementId> matIds = null;\r\n                  ElementId defaultMatId = ElementId.InvalidElementId;\r\n                  ElementId matId = CategoryUtil.GetBaseMaterialIdForElement(element);\r\n\r\n                  // Get IfcSingleMaterialOverride to work for railing\r\n                  singleMaterialOverrideHnd = ExporterUtil.GetSingleMaterial(file, element, matId);\r\n                  if (singleMaterialOverrideHnd != null)\r\n                  {\r\n                     matIds = new List<ElementId> { matId };\r\n                  }\r\n                  else\r\n                  {\r\n                     matIds = bodyData.MaterialIds;\r\n                     defaultMatId = matIds[0];\r\n\r\n                     // Check if all the items are the same, then get the first material id\r\n                     if (matIds.All(x => x == defaultMatId))\r\n                     {\r\n                        matIds = new List<ElementId> { defaultMatId };\r\n                     }\r\n                  }\r\n\r\n                  CategoryUtil.CreateMaterialAssociationWithShapeAspect(exporterIFC, element, railing, bodyData.RepresentationItemInfo);\r\n\r\n                  // Create multi-story duplicates of this railing.\r\n                  if (stairRampInfo != null)\r\n                  {\r\n                     stairRampInfo.AddComponent(0, railing);\r\n\r\n                     List<IFCAnyHandle> stairHandles = stairRampInfo.StairOrRampHandles;\r\n                     int levelCount = stairHandles.Count;\r\n\r\n                     if (levelCount > 0 && railingElem != null)\r\n                     {\r\n                        Stairs stairs = railingElem.Document.GetElement(railingElem.HostId) as Stairs;\r\n                        if ((stairs?.MultistoryStairsId ?? ElementId.InvalidElementId) != ElementId.InvalidElementId)\r\n                        {\r\n                           // If the railing is hosted by stairs, don't use stairHandles.Count,\r\n                           // use ids (count) of levels the railing is placed on.\r\n                           ISet<ElementId> multistoryStairsPlacementLevels = railingElem.GetMultistoryStairsPlacementLevels();\r\n                           if (multistoryStairsPlacementLevels != null)\r\n                              levelCount = multistoryStairsPlacementLevels.Count;\r\n                        }\r\n                     }\r\n                        \r\n                     for (int ii = 1; ii < levelCount; ii++)\r\n                     {\r\n                        IFCAnyHandle railingLocalPlacement = stairRampInfo.LocalPlacements[ii];\r\n                        if (!IFCAnyHandleUtil.IsNullOrHasNoValue(railingLocalPlacement))\r\n                        {\r\n                           IFCAnyHandle railingHndCopy = CopyRailingHandle(exporterIFC, element, catId,\r\n                              railingLocalPlacement, railing, ii);\r\n                           stairRampInfo.AddComponent(ii, railingHndCopy);\r\n                           productWrapper.AddElement(element, railingHndCopy, (IFCLevelInfo)null, ecData, false, exportInfo);\r\n                           CategoryUtil.CreateMaterialAssociationWithShapeAspect(exporterIFC, element, railingHndCopy, bodyData.RepresentationItemInfo);\r\n                        }\r\n                     }\r\n\r\n                     ExporterCacheManager.StairRampContainerInfoCache.AddStairRampContainerInfo(hostId, stairRampInfo);\r\n                  }\r\n               }\r\n               transaction.Commit();\r\n            }\r\n         }\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/RampExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing static Revit.IFC.Export.Utility.ParameterUtil;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export ramps\r\n   /// </summary>\r\n   class RampExporter\r\n   {\r\n      /// <summary>\r\n      /// Checks if exporting an element of Ramp category.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>True if element is of category OST_Ramps.</returns>\r\n      static public bool IsRamp(Element element)\r\n      {\r\n         // FaceWall should be exported as IfcWall.\r\n         return (CategoryUtil.GetSafeCategoryId(element) == new ElementId(BuiltInCategory.OST_Ramps));\r\n      }\r\n\r\n      static private double GetDefaultHeightForRamp()\r\n      {\r\n         // The default height for ramps is 3'.\r\n         return UnitUtil.ScaleLength(3.0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the ramp height for a ramp.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The unscaled height.</returns>\r\n      static public double GetRampHeight(Element element)\r\n      {\r\n         // Re-use the code for stairs height for legacy stairs.\r\n         return StairsExporter.GetStairsHeightForLegacyStair(element, GetDefaultHeightForRamp());\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the number of flights of a multi-story ramp.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The number of flights (at least 1.)</returns>\r\n      static public int GetNumFlightsForRamp(Element element)\r\n      {\r\n         return StairsExporter.GetNumFlightsForLegacyStair(element, GetDefaultHeightForRamp());\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets IFCRampType from ramp type name.\r\n      /// </summary>\r\n      /// <param name=\"rampTypeName\">The ramp type name.</param>\r\n      /// <returns>The IFCRampType.</returns>\r\n      public static string GetIFCRampType(string rampTypeName)\r\n      {\r\n         string typeName = NamingUtil.RemoveSpacesAndUnderscores(rampTypeName);\r\n\r\n         if (string.Compare(typeName, \"StraightRun\", true) == 0 ||\r\n             string.Compare(typeName, \"StraightRunRamp\", true) == 0)\r\n            return \"Straight_Run_Ramp\";\r\n         if (string.Compare(typeName, \"TwoStraightRun\", true) == 0 ||\r\n             string.Compare(typeName, \"TwoStraightRunRamp\", true) == 0)\r\n            return \"Two_Straight_Run_Ramp\";\r\n         if (string.Compare(typeName, \"QuarterTurn\", true) == 0 ||\r\n             string.Compare(typeName, \"QuarterTurnRamp\", true) == 0)\r\n            return \"Quarter_Turn_Ramp\";\r\n         if (string.Compare(typeName, \"TwoQuarterTurn\", true) == 0 ||\r\n             string.Compare(typeName, \"TwoQuarterTurnRamp\", true) == 0)\r\n            return \"Two_Quarter_Turn_Ramp\";\r\n         if (string.Compare(typeName, \"HalfTurn\", true) == 0 ||\r\n             string.Compare(typeName, \"HalfTurnRamp\", true) == 0)\r\n            return \"Half_Turn_Ramp\";\r\n         if (string.Compare(typeName, \"Spiral\", true) == 0 ||\r\n             string.Compare(typeName, \"SpiralRamp\", true) == 0)\r\n            return \"Spiral_Ramp\";\r\n         if (string.Compare(typeName, \"UserDefined\", true) == 0)\r\n            return \"UserDefined\";\r\n\r\n         return \"NotDefined\";\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports the top stories of a multistory ramp.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"ramp\">The ramp element.</param>\r\n      /// <param name=\"numFlights\">The number of flights for a multistory ramp.</param>\r\n      /// <param name=\"rampHnd\">The stairs container handle.</param>\r\n      /// <param name=\"components\">The components handles.</param>\r\n      /// <param name=\"ecData\">The extrusion creation data.</param>\r\n      /// <param name=\"componentECData\">The extrusion creation data for the components.</param>\r\n      /// <param name=\"placementSetter\">The placement setter.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportMultistoryRamp(ExporterIFC exporterIFC, Element ramp, int numFlights,\r\n          IFCAnyHandle rampHnd, IList<IFCAnyHandle> components, IList<IFCExportBodyParams> componentECData,\r\n          PlacementSetter placementSetter, ProductWrapper productWrapper)\r\n      {\r\n         if (numFlights < 2)\r\n            return;\r\n\r\n         double heightNonScaled = GetRampHeight(ramp);\r\n         if (heightNonScaled < MathUtil.Eps())\r\n            return;\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(rampHnd))\r\n            return;\r\n\r\n         IFCAnyHandle localPlacement = IFCAnyHandleUtil.GetObjectPlacement(rampHnd);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(localPlacement))\r\n            return;\r\n\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         Document doc = ramp.Document;\r\n\r\n         IFCAnyHandle relPlacement = GeometryUtil.GetRelativePlacementFromLocalPlacement(localPlacement);\r\n         IFCAnyHandle ptHnd = IFCAnyHandleUtil.GetLocation(relPlacement);\r\n         IList<double> origCoords = IFCAnyHandleUtil.GetCoordinates(ptHnd);\r\n\r\n         IList<IFCAnyHandle> rampLocalPlacementHnds = new List<IFCAnyHandle>();\r\n         IList<IFCLevelInfo> levelInfos = new List<IFCLevelInfo>();\r\n         for (int ii = 0; ii < numFlights - 1; ii++)\r\n         {\r\n            IFCAnyHandle newLevelHnd = null;\r\n\r\n            // We are going to avoid internal scaling routines, and instead scale in .NET.\r\n            double newOffsetUnscaled = 0.0;\r\n            IFCLevelInfo currLevelInfo =\r\n                placementSetter.GetOffsetLevelInfoAndHandle(heightNonScaled * (ii + 1), 1.0, doc, out newLevelHnd, out newOffsetUnscaled);\r\n            double newOffsetScaled = UnitUtil.ScaleLength(newOffsetUnscaled);\r\n\r\n            levelInfos.Add(currLevelInfo ?? placementSetter.LevelInfo);\r\n\r\n            XYZ orig;\r\n            if (ptHnd.HasValue)\r\n               orig = new XYZ(origCoords[0], origCoords[1], newOffsetScaled);\r\n            else\r\n               orig = new XYZ(0.0, 0.0, newOffsetScaled);\r\n\r\n            rampLocalPlacementHnds.Add(ExporterUtil.CreateLocalPlacement(file, newLevelHnd, orig, null, null));\r\n         }\r\n\r\n         IList<List<IFCAnyHandle>> newComponents = new List<List<IFCAnyHandle>>();\r\n         for (int ii = 0; ii < numFlights - 1; ii++)\r\n            newComponents.Add(new List<IFCAnyHandle>());\r\n\r\n         int compIdx = 0;\r\n         ElementId catId = CategoryUtil.GetSafeCategoryId(ramp);\r\n         string predefType = ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 ? \"ShapeType\" : \"PredefinedType\";\r\n\r\n         foreach (IFCAnyHandle component in components)\r\n         {\r\n            string componentName = IFCAnyHandleUtil.GetStringAttribute(component, \"Name\");\r\n            IFCAnyHandle componentProdRep = IFCAnyHandleUtil.GetInstanceAttribute(component, \"Representation\");\r\n\r\n            IList<string> localComponentNames = new List<string>();\r\n            IList<IFCAnyHandle> componentPlacementHnds = new List<IFCAnyHandle>();\r\n\r\n            IFCAnyHandle localLocalPlacement = IFCAnyHandleUtil.GetObjectPlacement(component);\r\n            IFCAnyHandle localRelativePlacement =\r\n                (localLocalPlacement == null) ? null : IFCAnyHandleUtil.GetInstanceAttribute(localLocalPlacement, \"RelativePlacement\");\r\n\r\n            bool isSubRamp = component.IsSubTypeOf(IFCEntityType.IfcRamp.ToString());\r\n            for (int ii = 0; ii < numFlights - 1; ii++)\r\n            {\r\n               localComponentNames.Add((componentName == null) ? (ii + 2).ToString() : (componentName + \":\" + (ii + 2)));\r\n               if (isSubRamp)\r\n                  componentPlacementHnds.Add(ExporterUtil.CopyLocalPlacement(file, rampLocalPlacementHnds[ii]));\r\n               else\r\n                  componentPlacementHnds.Add(IFCInstanceExporter.CreateLocalPlacement(file, rampLocalPlacementHnds[ii], localRelativePlacement));\r\n            }\r\n\r\n            IList<IFCAnyHandle> localComponentHnds = new List<IFCAnyHandle>();\r\n            IList<IFCExportInfoPair> localCompExportInfo = new List<IFCExportInfoPair>();\r\n            if (isSubRamp)\r\n            {\r\n               string componentType = IFCAnyHandleUtil.GetEnumerationAttribute(component, predefType);\r\n               string localRampType = GetIFCRampType(componentType);\r\n               \r\n               for (int ii = 0; ii < numFlights - 1; ii++)\r\n               {\r\n                  string flightGUID = GUIDUtil.CreateSubElementGUID(ramp, ii + (int) IFCRampSubElements.FlightIdOffset);\r\n                  IFCAnyHandle representationCopy =\r\n                      ExporterUtil.CopyProductDefinitionShape(exporterIFC, ramp, catId, componentProdRep);\r\n\r\n                  IFCAnyHandle localComponent = IFCInstanceExporter.CreateRamp(exporterIFC, ramp, flightGUID, ownerHistory,\r\n                      componentPlacementHnds[ii], representationCopy, localRampType);\r\n\r\n                  localComponentHnds.Add(localComponent);\r\n                  IFCAnyHandleUtil.OverrideNameAttribute(localComponent, localComponentNames[ii]);\r\n                  IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcRamp, localRampType);\r\n                  localCompExportInfo.Add(exportInfo);\r\n               }\r\n            }\r\n            else if (IFCAnyHandleUtil.IsSubTypeOf(component, IFCEntityType.IfcRampFlight))\r\n            {\r\n               for (int ii = 0; ii < numFlights - 1; ii++)\r\n               {\r\n                  string flightGUID = GUIDUtil.CreateSubElementGUID(ramp, ii + (int) IFCRampSubElements.FlightIdOffset);\r\n                  IFCAnyHandle representationCopy =\r\n                      ExporterUtil.CopyProductDefinitionShape(exporterIFC, ramp, catId, componentProdRep);\r\n\r\n                  string rampFlightType = \"NOTDEFINED\";\r\n                  IFCAnyHandle localComponent = IFCInstanceExporter.CreateRampFlight(exporterIFC, ramp, flightGUID, ownerHistory,\r\n                      componentPlacementHnds[ii], representationCopy, rampFlightType);\r\n\r\n                  IFCAnyHandleUtil.OverrideNameAttribute(localComponent, localComponentNames[ii]);\r\n                  localComponentHnds.Add(localComponent);\r\n                  IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcRampFlight, rampFlightType);\r\n                  localCompExportInfo.Add(exportInfo);\r\n               }\r\n            }\r\n            else if (IFCAnyHandleUtil.IsSubTypeOf(component, IFCEntityType.IfcSlab))\r\n            {\r\n               string componentType = IFCAnyHandleUtil.GetEnumerationAttribute(component, \"PredefinedType\");\r\n               IFCSlabType localLandingType = FloorExporter.GetIFCSlabType(componentType);\r\n\r\n               for (int ii = 0; ii < numFlights - 1; ii++)\r\n               {\r\n                  string landingGUID = GUIDUtil.CreateSubElementGUID(ramp, ii + (int)IFCRampSubElements.LandingIdOffset);\r\n                  IFCAnyHandle representationCopy =\r\n                      ExporterUtil.CopyProductDefinitionShape(exporterIFC, ramp, catId, componentProdRep);\r\n\r\n                  IFCAnyHandle localComponent = IFCInstanceExporter.CreateSlab(exporterIFC, ramp, landingGUID, ownerHistory,\r\n                      componentPlacementHnds[ii], representationCopy, localLandingType.ToString());\r\n                  localComponentHnds.Add(localComponent);\r\n                  IFCAnyHandleUtil.OverrideNameAttribute(localComponent, localComponentNames[ii]);\r\n                  IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcSlab, localLandingType.ToString());\r\n                  localCompExportInfo.Add(exportInfo);\r\n               }\r\n            }\r\n            else if (IFCAnyHandleUtil.IsSubTypeOf(component, IFCEntityType.IfcMember))\r\n            {\r\n               for (int ii = 0; ii < numFlights - 1; ii++)\r\n               {\r\n                  string stringerGUID = GUIDUtil.CreateSubElementGUID(ramp, ii + (int)IFCRampSubElements.StringerIdOffset);\r\n                  IFCAnyHandle representationCopy =\r\n                      ExporterUtil.CopyProductDefinitionShape(exporterIFC, ramp, catId, componentProdRep);\r\n                  string localMemberType = \"STRINGER\";\r\n\r\n                  IFCAnyHandle localComponent = IFCInstanceExporter.CreateMember(exporterIFC, ramp, stringerGUID, ownerHistory,\r\n                componentPlacementHnds[ii], representationCopy, localMemberType);\r\n                  localComponentHnds.Add(localComponent);\r\n                  IFCAnyHandleUtil.OverrideNameAttribute(localComponent, localComponentNames[ii]);\r\n                  IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcMember, localMemberType);\r\n                  localCompExportInfo.Add(exportInfo);\r\n               }\r\n            }\r\n\r\n            for (int ii = 0; ii < numFlights - 1; ii++)\r\n            {\r\n               if (localComponentHnds[ii] != null)\r\n               {\r\n                  newComponents[ii].Add(localComponentHnds[ii]);\r\n                  productWrapper.AddElement(null, localComponentHnds[ii], levelInfos[ii], componentECData[compIdx], false, localCompExportInfo[ii]);\r\n               }\r\n            }\r\n            compIdx++;\r\n         }\r\n\r\n         // finally add a copy of the container.\r\n         IList<IFCAnyHandle> rampCopyHnds = new List<IFCAnyHandle>();\r\n         for (int ii = 0; ii < numFlights - 1; ii++)\r\n         {\r\n            string rampTypeAsString = IFCAnyHandleUtil.GetEnumerationAttribute(rampHnd, predefType);\r\n            string rampType = GetIFCRampType(rampTypeAsString);\r\n            \r\n            string containerRampName = \r\n               IFCAnyHandleUtil.GetStringAttribute(rampHnd, \"Name\") + \":\" + (ii + 2);\r\n            string containerGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(ramp, containerRampName));\r\n            IFCAnyHandle rampCopyHnd = IFCInstanceExporter.CreateRamp(exporterIFC, ramp,\r\n               containerGuid, ownerHistory, rampLocalPlacementHnds[ii], null, rampType);\r\n\r\n            rampCopyHnds.Add(rampCopyHnd);\r\n            IFCAnyHandleUtil.OverrideNameAttribute(rampCopyHnd, containerRampName);\r\n            IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcRamp, rampType);\r\n            productWrapper.AddElement(ramp, rampCopyHnds[ii], levelInfos[ii], null, true, exportInfo);\r\n         }\r\n\r\n         for (int ii = 0; ii < numFlights - 1; ii++)\r\n         {\r\n            StairRampContainerInfo stairRampInfo = new StairRampContainerInfo(rampCopyHnds[ii], newComponents[ii],\r\n                rampLocalPlacementHnds[ii]);\r\n            ExporterCacheManager.StairRampContainerInfoCache.AppendStairRampContainerInfo(ramp.Id, stairRampInfo);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a ramp to IfcRamp, without decomposing into separate runs and landings.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"ifcEnumType\">The ramp type.</param>\r\n      /// <param name=\"ramp\">The ramp element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"numFlights\">The number of flights for a multistory ramp.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportRamp(ExporterIFC exporterIFC, string ifcEnumType, Element ramp, GeometryElement geometryElement,\r\n          int numFlights, ProductWrapper productWrapper)\r\n      {\r\n         if (ramp == null || geometryElement == null)\r\n            return;\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         IFCEntityType elementClassTypeEnum = IFCEntityType.IfcRamp;\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         ElementId categoryId = CategoryUtil.GetSafeCategoryId(ramp);\r\n\r\n         Document doc = ramp.Document;\r\n         ElementType rampType = doc.GetElement(ramp.GetTypeId()) as ElementType;\r\n\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            using (PlacementSetter placementSetter = PlacementSetter.Create(exporterIFC, ramp, null))\r\n            {\r\n               IFCAnyHandle contextOfItemsFootPrint = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.FootPrint);\r\n               IFCAnyHandle contextOfItemsAxis = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Axis);\r\n\r\n               Transform trf = ExporterIFCUtils.GetUnscaledTransform(exporterIFC, placementSetter.LocalPlacement);\r\n               IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n               string predefType = ifcEnumType;\r\n               IFCExportInfoPair exportTypePair = ExporterUtil.GetProductExportType(ramp, out ifcEnumType);\r\n               if (!exportTypePair.IsPredefinedTypeDefault)\r\n               {\r\n                  predefType = exportTypePair.PredefinedType;\r\n               }\r\n\r\n               SortedDictionary<double,IList<(Solid body, Face largestTopFace)>> rampFlights = null;\r\n               SortedDictionary<double, IList<(Solid body, Face largestTopFace)>> landings = null;\r\n               if (IdentifyRampFlightAndLanding(geometryElement, out rampFlights, out landings))\r\n               {\r\n                  string rampGUID = GUIDUtil.CreateGUID(ramp);\r\n                  IFCAnyHandle rampLocalPlacement = placementSetter.LocalPlacement;\r\n\r\n                  // Create appropriate type\r\n                  IFCExportInfoPair exportType = CreateRampExportInfoPair(IFCEntityType.IfcRamp, IFCEntityType.IfcRampType, predefType);\r\n\r\n                  // For IFC4 and Structural Exchange Requirement export, ramp container will be exported as IFCSlab type\r\n                  IFCAnyHandle rampContainerHnd = IFCInstanceExporter.CreateGenericIFCEntity(exportType, file, ramp, rampGUID, ownerHistory,\r\n                     rampLocalPlacement, null);\r\n\r\n                  IFCAnyHandle rampTypeHnd = ExporterUtil.CreateGenericTypeFromElement(ramp, exportType, file, productWrapper);\r\n                  ExporterCacheManager.TypeRelationsCache.Add(rampTypeHnd, rampContainerHnd);\r\n                  productWrapper.AddElement(ramp, rampContainerHnd, placementSetter.LevelInfo, null, true, exportType);\r\n\r\n                  //Breakdown the Ramp into its components: RampFlights and Landings\r\n                  int rampFlightIndex = 0;\r\n                  int landingIndex = 0;\r\n                  HashSet<IFCAnyHandle> rampComponents = new ();\r\n                  foreach (KeyValuePair<double,IList<(Solid body, Face topFace)>> rampFlight in rampFlights)\r\n                  {\r\n                     foreach ((Solid body, Face topFace) flightItem in rampFlight.Value)\r\n                     {\r\n                        using (IFCExportBodyParams ecData = new IFCExportBodyParams())\r\n                        {\r\n                           ecData.AllowVerticalOffsetOfBReps = false;\r\n                           ecData.SetLocalPlacement(ExporterUtil.CreateLocalPlacement(file, placementSetter.LocalPlacement, null));\r\n                           ecData.ReuseLocalPlacement = true;\r\n                           BodyExporterOptions bodyExporterOptions = new (true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n                           BodyData bodyData = BodyExporter.ExportBody(exporterIFC, ramp, categoryId, ElementId.InvalidElementId, flightItem.body, bodyExporterOptions, ecData);\r\n\r\n                           IFCAnyHandle bodyRep = bodyData.RepresentationHnd;\r\n                           if (IFCAnyHandleUtil.IsNullOrHasNoValue(bodyRep))\r\n                           {\r\n                              ecData.ClearOpenings();\r\n                              continue;\r\n                           }\r\n                           List<IFCAnyHandle> reps = [ bodyRep ];\r\n\r\n                           Transform boundingBoxTrf = (bodyData.OffsetTransform == null) ? Transform.Identity : bodyData.OffsetTransform.Inverse;\r\n                           IList<GeometryObject> solidList = [ flightItem.body ];\r\n                           IFCAnyHandle boundingBoxRep = BoundingBoxExporter.ExportBoundingBox(exporterIFC, solidList, boundingBoxTrf);\r\n                           if (boundingBoxRep != null)\r\n                              reps.Add(boundingBoxRep);\r\n\r\n                           IFCAnyHandle representation = IFCInstanceExporter.CreateProductDefinitionShape(exporterIFC.GetFile(), null, null, reps);\r\n\r\n                           rampFlightIndex++;\r\n                           string flightGUID = GUIDUtil.CreateSubElementGUID(ramp, rampFlightIndex + (int)IFCRampSubElements.FlightIdOffset);\r\n                           string origFlightName = IFCAnyHandleUtil.GetStringAttribute(rampContainerHnd, \"Name\") + \" \" + rampFlightIndex;\r\n                           string flightName = NamingUtil.GetOverrideStringValue(ramp, \"IfcRampFlight.Name (\" + rampFlightIndex + \")\", origFlightName);\r\n\r\n                           IFCAnyHandle flightLocalPlacement = ecData.GetLocalPlacement();\r\n                           string flightPredefType = NamingUtil.GetOverrideStringValue(ramp, \"IfcRampFlight.PredefinedType (\" + rampFlightIndex + \")\", null);\r\n                           if (string.IsNullOrEmpty(flightPredefType))\r\n                              flightPredefType = NamingUtil.GetOverrideStringValue(ramp, \"IfcRampFlight.PredefinedType\", null);\r\n\r\n                           // Create appropriate type\r\n                           IFCExportInfoPair flightExportType = CreateRampExportInfoPair(IFCEntityType.IfcRampFlight, IFCEntityType.IfcRampFlightType, flightPredefType);\r\n\r\n                           // For IFC4 and Structural Exchange Requirement export, ramp container will be exported as IFCSlab type\r\n                           IFCAnyHandle rampFlightHnd = IFCInstanceExporter.CreateGenericIFCEntity(flightExportType, file, null, flightGUID, ownerHistory,\r\n                              flightLocalPlacement, representation);\r\n\r\n                           IFCAnyHandleUtil.OverrideNameAttribute(rampFlightHnd, flightName);\r\n                           rampComponents.Add(rampFlightHnd);\r\n\r\n                           // Create type\r\n                           string flightTypeGUID = GUIDUtil.CreateSubElementGUID(rampType, rampFlightIndex + (int)IFCRampSubElements.FlightIdOffset);\r\n                           IFCAnyHandle flightTypeHnd = IFCInstanceExporter.CreateGenericIFCType(flightExportType, \r\n                              rampType, flightTypeGUID, exporterIFC.GetFile(), null, null);\r\n                           IFCAnyHandleUtil.OverrideNameAttribute(flightTypeHnd, flightName);\r\n                           ExporterCacheManager.TypeRelationsCache.Add(flightTypeHnd, rampFlightHnd);\r\n\r\n                           CategoryUtil.CreateMaterialAssociation(exporterIFC, ramp, rampFlightHnd, bodyData.MaterialIds);\r\n\r\n                           IFCAnyHandle psetRampFlightCommonHnd = CreatePSetRampFlightCommon(file, ramp, rampFlightIndex, flightItem.topFace);\r\n\r\n                           if (!IFCAnyHandleUtil.IsNullOrHasNoValue(psetRampFlightCommonHnd))\r\n                           {\r\n                              HashSet<IFCAnyHandle> relatedObjects = new() { rampFlightHnd };\r\n                              ExporterUtil.CreateRelDefinesByProperties(file, ownerHistory, null, null, relatedObjects, psetRampFlightCommonHnd);\r\n                           }\r\n\r\n                           CreateQuantitySetRampFlight(exporterIFC, file, rampFlightHnd, ramp, flightItem, rampFlightIndex);\r\n                        }\r\n                     }\r\n                  }\r\n\r\n                  foreach (KeyValuePair<double, IList<(Solid body, Face largestTopFace)>> landing in landings)\r\n                  {\r\n                     foreach ((Solid body, Face topFace) landingItem in landing.Value)\r\n                     {\r\n                        using (IFCExportBodyParams ecData = new ())\r\n                        {\r\n                           ecData.AllowVerticalOffsetOfBReps = false;\r\n                           ecData.SetLocalPlacement(ExporterUtil.CreateLocalPlacement(file, placementSetter.LocalPlacement, null));\r\n                           ecData.ReuseLocalPlacement = true;\r\n                           BodyExporterOptions bodyExporterOptions = new (true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n                           BodyData bodyData = BodyExporter.ExportBody(exporterIFC, ramp, categoryId, ElementId.InvalidElementId, landingItem.body, bodyExporterOptions, ecData);\r\n\r\n                           IFCAnyHandle bodyRep = bodyData.RepresentationHnd;\r\n                           if (IFCAnyHandleUtil.IsNullOrHasNoValue(bodyRep))\r\n                           {\r\n                              ecData.ClearOpenings();\r\n                              continue;\r\n                           }\r\n                           List<IFCAnyHandle> reps = [ bodyRep ];\r\n\r\n                           Transform boundingBoxTrf = (bodyData.OffsetTransform == null) ? Transform.Identity : bodyData.OffsetTransform.Inverse;\r\n                           IList<GeometryObject> solidList = [ landingItem.body ];\r\n                           IFCAnyHandle boundingBoxRep = BoundingBoxExporter.ExportBoundingBox(exporterIFC, solidList, boundingBoxTrf);\r\n                           if (boundingBoxRep != null)\r\n                              reps.Add(boundingBoxRep);\r\n\r\n                           IFCAnyHandle representation = IFCInstanceExporter.CreateProductDefinitionShape(exporterIFC.GetFile(), null, null, reps);\r\n\r\n                           landingIndex++;\r\n                           string landingGUID = GUIDUtil.CreateSubElementGUID(ramp, landingIndex + (int)IFCRampSubElements.LandingIdOffset);\r\n                           string origLandingName = IFCAnyHandleUtil.GetStringAttribute(rampContainerHnd, \"Name\") + \" \" + landingIndex;\r\n                           string landingName = NamingUtil.GetOverrideStringValue(ramp, \"IfcRampLanding.Name (\" + landingIndex + \")\", origLandingName);\r\n\r\n                           IFCAnyHandle landingLocalPlacement = ecData.GetLocalPlacement();\r\n                           string landingPredefType = \"LANDING\";\r\n\r\n                           IFCAnyHandle rampLandingHnd = IFCInstanceExporter.CreateSlab(exporterIFC, ramp, landingGUID, ownerHistory, landingLocalPlacement,\r\n                               representation, landingPredefType);\r\n                           IFCAnyHandleUtil.OverrideNameAttribute(rampLandingHnd, landingName);\r\n                           rampComponents.Add(rampLandingHnd);\r\n\r\n                           // Create type\r\n                           IFCExportInfoPair landingExportType = new (IFCEntityType.IfcSlab, landingPredefType);\r\n                           string landingTypeGUID = GUIDUtil.CreateSubElementGUID(rampType, landingIndex + (int)IFCRampSubElements.LandingIdOffset);\r\n                           \r\n                           IFCAnyHandle landingTypeHnd = IFCInstanceExporter.CreateGenericIFCType(landingExportType, \r\n                              rampType, landingTypeGUID, exporterIFC.GetFile(), null, null);\r\n                           IFCAnyHandleUtil.OverrideNameAttribute(landingTypeHnd, landingName);\r\n                           ExporterCacheManager.TypeRelationsCache.Add(landingTypeHnd, rampLandingHnd);\r\n\r\n                           CategoryUtil.CreateMaterialAssociation(exporterIFC, ramp, rampLandingHnd, bodyData.MaterialIds);\r\n\r\n                           IFCAnyHandle psetSlabCommonHnd = CreatePSetRampLandingCommon(file, ramp, landingIndex);\r\n\r\n                           if (!IFCAnyHandleUtil.IsNullOrHasNoValue(psetSlabCommonHnd))\r\n                           {\r\n                              HashSet<IFCAnyHandle> relatedObjects = new() { rampLandingHnd };\r\n                              ExporterUtil.CreateRelDefinesByProperties(file, ownerHistory, null, null, relatedObjects, psetSlabCommonHnd);\r\n                           }\r\n\r\n                           CreateQuantitySetLanding(exporterIFC, file, rampLandingHnd, ramp, landingItem, landingIndex);\r\n                        }\r\n                     }\r\n                  }\r\n\r\n                  if (rampComponents.Count > 0)\r\n                  {\r\n                     string relGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                        GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAggregates, rampContainerHnd));\r\n                     IFCInstanceExporter.CreateRelAggregates(file, relGuid, ownerHistory, null, null, rampContainerHnd, rampComponents);\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  using (IFCExportBodyParams ecData = new())\r\n                  {\r\n                     ecData.SetLocalPlacement(placementSetter.LocalPlacement);\r\n                     ecData.ReuseLocalPlacement = false;\r\n\r\n                     var oneLevelGeom = GeometryUtil.GetOneLevelGeometryElement(geometryElement, numFlights);\r\n                     GeometryElement rampGeom = oneLevelGeom.element;\r\n\r\n                     BodyData bodyData;\r\n\r\n                     BodyExporterOptions bodyExporterOptions = new(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n                     IFCAnyHandle representation = RepresentationUtil.CreateAppropriateProductDefinitionShape(exporterIFC,\r\n                         ramp, categoryId, rampGeom, bodyExporterOptions, null, ecData, out bodyData, instanceGeometry: true);\r\n\r\n                     if (IFCAnyHandleUtil.IsNullOrHasNoValue(representation))\r\n                     {\r\n                        ecData.ClearOpenings();\r\n                        return;\r\n                     }\r\n\r\n                     string containedRampGuid = GUIDUtil.CreateSubElementGUID(ramp, (int)IFCRampSubElements.ContainedRamp);\r\n                     IFCAnyHandle containedRampLocalPlacement = ExporterUtil.CreateLocalPlacement(file, ecData.GetLocalPlacement(), null);\r\n                     \r\n                     if (numFlights == 1)\r\n                     {\r\n                        string guid = GUIDUtil.CreateGUID(ramp);\r\n                        IFCAnyHandle localPlacement = ecData.GetLocalPlacement();\r\n\r\n                        IFCAnyHandle rampHnd = IFCInstanceExporter.CreateRamp(exporterIFC, ramp, guid, ownerHistory,\r\n                           localPlacement, representation, exportTypePair.GetPredefinedTypeOrDefault());\r\n                        productWrapper.AddElement(ramp, rampHnd, placementSetter.LevelInfo, ecData, true, exportTypePair);\r\n                        CategoryUtil.CreateMaterialAssociation(exporterIFC, ramp,rampHnd, bodyData.MaterialIds);\r\n\r\n                        IFCAnyHandle rampTypeHnd = ExporterCacheManager.ElementTypeToHandleCache.Find(rampType, exportTypePair);\r\n                        if (IFCAnyHandleUtil.IsNullOrHasNoValue(rampTypeHnd))\r\n                        {\r\n                           string typeGuid = GUIDUtil.GenerateIFCGuidFrom(rampType, exportTypePair);\r\n                           rampTypeHnd = IFCInstanceExporter.CreateGenericIFCType(exportTypePair,\r\n                              rampType, typeGuid, exporterIFC.GetFile(), null, null);\r\n                           productWrapper.RegisterHandleWithElementType(rampType, exportTypePair, rampTypeHnd, null);\r\n                        }\r\n                        ExporterCacheManager.TypeRelationsCache.Add(rampTypeHnd, rampHnd);\r\n                     }\r\n                     else\r\n                     {\r\n                        List<IFCAnyHandle> components = [];\r\n                        List<IFCExportBodyParams> componentExtrusionData = [];\r\n                        IFCAnyHandle containedRampHnd = IFCInstanceExporter.CreateRamp(exporterIFC, ramp, containedRampGuid, ownerHistory,\r\n                           containedRampLocalPlacement, representation, exportTypePair.GetPredefinedTypeOrDefault());\r\n                        components.Add(containedRampHnd);\r\n                        componentExtrusionData.Add(ecData);\r\n                        \r\n                        CategoryUtil.CreateMaterialAssociation(exporterIFC, ramp, containedRampHnd, bodyData.MaterialIds);\r\n\r\n                        string guid = GUIDUtil.CreateGUID(ramp);\r\n                        IFCAnyHandle localPlacement = ecData.GetLocalPlacement();\r\n\r\n                        IFCAnyHandle rampHnd = IFCInstanceExporter.CreateRamp(exporterIFC, ramp, guid, ownerHistory,\r\n                           localPlacement, null, exportTypePair.GetPredefinedTypeOrDefault());\r\n                        productWrapper.AddElement(ramp, rampHnd, placementSetter.LevelInfo, ecData, true, exportTypePair);\r\n\r\n                        string typeGuid = GUIDUtil.CreateGUID(rampType);\r\n                        IFCAnyHandle rampTypeHnd = IFCInstanceExporter.CreateGenericIFCType(exportTypePair,\r\n                           rampType, typeGuid, exporterIFC.GetFile(), null, null);\r\n                        ExporterCacheManager.TypeRelationsCache.Add(rampTypeHnd, rampHnd);\r\n\r\n                        StairRampContainerInfo stairRampInfo = new(rampHnd, components, localPlacement);\r\n                        ExporterCacheManager.StairRampContainerInfoCache.AddStairRampContainerInfo(ramp.Id, stairRampInfo);\r\n\r\n                        ExportMultistoryRamp(exporterIFC, ramp, numFlights, rampHnd, components, componentExtrusionData, placementSetter,\r\n                            productWrapper);\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n            tr.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a ramp to IfcRamp.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The ramp element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void Export(ExporterIFC exporterIFC, Element element, GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(element, out _);\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            StairsExporter.ExportLegacyStairOrRampAsContainer(exporterIFC, exportType.GetPredefinedTypeOrDefault(), element, geometryElement, productWrapper);\r\n\r\n            // If we didn't create a handle here, then the element wasn't a \"native\" Ramp, and is likely a FamilyInstance or a DirectShape.\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(productWrapper.GetAnElement()))\r\n            {\r\n               int numFlights = GetNumFlightsForRamp(element);\r\n               if (numFlights > 0)\r\n                  ExportRamp(exporterIFC, exportType.PredefinedType, element, geometryElement, numFlights, productWrapper);\r\n            }\r\n\r\n            tr.Commit();\r\n         }\r\n      }\r\n\r\n      static bool IdentifyRampFlightAndLanding(GeometryElement rampGeom, out SortedDictionary<double,IList<(Solid body, Face largestTopFace)>> rampFlights, out SortedDictionary<double, IList<(Solid body, Face largestTopFace)>> landings)\r\n      {\r\n         rampFlights = new SortedDictionary<double, IList<(Solid body, Face largestTopFace)>>();\r\n         landings = new SortedDictionary<double, IList<(Solid body, Face largestTopFace)>>();\r\n         int totalComponents = 0;\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAs2x2)\r\n         {\r\n            SolidMeshGeometryInfo info = GeometryUtil.GetSplitSolidMeshGeometry(rampGeom, Transform.Identity);\r\n            IList<Solid> solidList = info.GetSolids();\r\n            foreach (Solid solid in solidList)\r\n            {\r\n               // Determine the largest face and with normal pointing to upward (+Z region). If the normal is exactly at +Z (0,0,1), then it should be landing\r\n               Face rampComponentFace = GeometryUtil.GetLargestFaceInSolid(solid, new XYZ(0, 0, 1));\r\n               if (rampComponentFace == null)\r\n                  continue;\r\n\r\n               // The solids will be sorted by their lowest Z position from the bounding box\r\n               XYZ normal = rampComponentFace.ComputeNormal(new UV());\r\n               BoundingBoxXYZ bBox = solid.GetBoundingBox();\r\n               double lowestbbZ = bBox.Transform.OfPoint(bBox.Min).Z;\r\n               if (MathUtil.IsAlmostEqual(normal.Z, 1.0))\r\n               {\r\n                  if (landings.ContainsKey(lowestbbZ))\r\n                  {\r\n                     landings[lowestbbZ].Add((solid, rampComponentFace));\r\n                     totalComponents++;\r\n                  }\r\n                  else\r\n                  {\r\n                     IList<(Solid body, Face largestTopFace)> bodies = new List<(Solid body, Face largestTopFace)>() { (solid, rampComponentFace) };\r\n                     landings.Add(lowestbbZ, bodies);\r\n                     totalComponents++;\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  if (rampFlights.ContainsKey(lowestbbZ))\r\n                  {\r\n                     rampFlights[lowestbbZ].Add((solid, rampComponentFace));\r\n                     totalComponents++;\r\n                  }\r\n                  else\r\n                  {\r\n                     IList<(Solid body, Face largestTopFace)> bodies = new List<(Solid body, Face largestTopFace)>() { (solid, rampComponentFace) };\r\n                     rampFlights.Add(lowestbbZ, bodies);\r\n                     totalComponents++;\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         // Return false if there is no components identified, or if total is only one (a single geometry). For a single geometry, IfcRamp will be created with this geometry\r\n         if ((rampFlights.Count == 0 && landings.Count == 0) || totalComponents == 1)\r\n            return false;\r\n\r\n         return true;\r\n      }\r\n\r\n      static IFCExportInfoPair CreateRampExportInfoPair(IFCEntityType entityName, IFCEntityType entityType, string predefType)\r\n      {\r\n         // For IFC4 and Structural Exchange Requirement export, ramps will be exported as IFCSlab type\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 && \r\n            (ExporterCacheManager.ExportOptionsCache.ExchangeRequirement == KnownERNames.Structural))\r\n         {\r\n            entityName = IFCEntityType.IfcSlab;\r\n            entityType = IFCEntityType.IfcSlabType;\r\n         }\r\n\r\n         return new IFCExportInfoPair(entityName, entityType, predefType);\r\n      }\r\n\r\n      private static IFCAnyHandle CreatePSetRampFlightCommon(IFCFile file, Element element, int flightIndex, Face topFace)\r\n      {\r\n         HashSet<IFCAnyHandle> properties = new HashSet<IFCAnyHandle>();\r\n\r\n         string paramSetName = \"Pset_RampFlightCommon\";\r\n\r\n         AddStringValueToPropertySet(file, element, properties, paramSetName, \"Reference\", flightIndex,\r\n            IFCDataUtil.CreateAsIdentifier);\r\n\r\n         AddDoubleValueToPropertySet(file, element, properties, paramSetName, \"HeadRoom\", flightIndex,\r\n            UnitUtil.ScaleLength, IFCDataUtil.CreateAsPositiveLengthMeasure);\r\n\r\n         // Slope\r\n         double slope = 0.0;\r\n         if (topFace != null)\r\n         {\r\n            XYZ faceNormal = topFace.ComputeNormal(new UV());\r\n            XYZ projectionToXYPlane = new XYZ(faceNormal.X, faceNormal.Y, 0);\r\n            slope = GeometryUtil.GetAngleOfFace(topFace, projectionToXYPlane);\r\n         }\r\n\r\n         // The property set for components is determined by index in the parameter name, but if it does not exist, it will check a common one without index \r\n         double doubleParamOverride = 0.0;\r\n         if (GetDoubleValueFromElement(element, \"Pset_RampFlightCommon.Slope (\" + flightIndex.ToString() + \")\", out doubleParamOverride) != null\r\n            || GetDoubleValueFromElement(element, \"Pset_RampFlightCommon.Slope\", out doubleParamOverride) != null)\r\n         {\r\n            slope = doubleParamOverride;\r\n         }\r\n\r\n         // Slope\r\n         if (!MathUtil.IsAlmostZero(slope))\r\n         {\r\n            IFCData paramVal = IFCDataUtil.CreateAsPlaneAngleMeasure(slope);\r\n            PropertyDescription propertyDescription = new PropertyDescription(\"Slope\");\r\n            IFCAnyHandle propSingleValue = IFCInstanceExporter.CreatePropertySingleValue(file, propertyDescription, paramVal, null);\r\n            properties.Add(propSingleValue);\r\n         }\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            string baseParamName = \"Status\";\r\n            string baseFullParamName = paramSetName + \".\" + baseParamName;\r\n            Parameter param = GetStringValueFromElement(element, baseFullParamName + \" (\" + flightIndex.ToString() + \")\", out string stringParam);\r\n            if (param == null)\r\n               param = GetStringValueFromElement(element, baseFullParamName, out stringParam);\r\n            if (param != null)\r\n            {\r\n               PropertyDescription propertyDescription = new PropertyDescription(baseParamName);\r\n               IFCAnyHandle propSingleValue = PropertyUtil.CreateLabelPropertyFromCache(file, param.Id, propertyDescription, stringParam, PropertyValueType.EnumeratedValue,\r\n                     true, typeof(PropertySet.IFC4.PEnum_ElementStatus));\r\n          \r\n               if (propSingleValue != null)\r\n                  properties.Add(propSingleValue);\r\n            }\r\n\r\n            AddDoubleValueToPropertySet(file, element, properties, paramSetName, \"ClearWidth\", flightIndex,\r\n               UnitUtil.ScaleLength, IFCDataUtil.CreateAsPositiveLengthMeasure);\r\n\r\n            double doubleParam = 0.0;\r\n            if (!MathUtil.IsAlmostZero(slope))\r\n               doubleParam = UnitUtil.ScaleAngle(Math.PI / 2.0) - slope;\r\n            if (GetDoubleValueFromElement(element, \"Pset_RampFlightCommon.CounterSlope (\" + flightIndex.ToString() + \")\", out doubleParamOverride) != null\r\n               || GetDoubleValueFromElement(element, \"Pset_RampFlightCommon.CounterSlope\", out doubleParamOverride) != null)\r\n            {\r\n               doubleParam = doubleParamOverride;\r\n            }\r\n\r\n            if (!MathUtil.IsAlmostZero(doubleParam))\r\n            {\r\n               IFCData paramVal = IFCDataUtil.CreateAsPlaneAngleMeasure(doubleParam);\r\n               PropertyDescription propertyDescription = new PropertyDescription(\"CounterSlope\");\r\n               IFCAnyHandle propSingleValue = IFCInstanceExporter.CreatePropertySingleValue(file, propertyDescription, paramVal, null);\r\n               properties.Add(propSingleValue);\r\n            }\r\n         }\r\n\r\n         if (properties.Count > 0)\r\n         {\r\n            string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(element, paramSetName + \": \" + flightIndex.ToString()));\r\n            return IFCInstanceExporter.CreatePropertySet(file,\r\n               guid, ExporterCacheManager.OwnerHistoryHandle, paramSetName, null, properties);\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      private static void AddStringValueToPropertySet(IFCFile file, Element element, \r\n         HashSet<IFCAnyHandle> properties, string psetName, string propertyName, int index, \r\n         Func<string, IFCData> dataFn)\r\n      {\r\n         if (GetStringValueFromElement(element, psetName + \".\" + propertyName + \" (\" + index.ToString() + \")\", out string param) == null)\r\n            GetStringValueFromElement(element, psetName + \".\" + propertyName, out param);\r\n         {\r\n            IFCData paramVal = dataFn(param);\r\n            PropertyDescription propertyDescription = new PropertyDescription(propertyName);\r\n            IFCAnyHandle propSingleValue = IFCInstanceExporter.CreatePropertySingleValue(file, propertyDescription, paramVal, null);\r\n            properties.Add(propSingleValue);\r\n         }\r\n      }\r\n\r\n      private static void AddDoubleValueToPropertySet(IFCFile file, Element element,\r\n         HashSet<IFCAnyHandle> properties, string psetName, string propertyName, int index,\r\n         Func<double, double> scalar, Func<double, IFCData> dataFn)\r\n      {\r\n         if (GetDoubleValueFromElement(element, psetName + \".\" + propertyName + \" (\" + index.ToString() + \")\", out double doubleParam) == null)\r\n            GetDoubleValueFromElement(element, psetName + \".\" + propertyName, out doubleParam);\r\n         {\r\n            if (scalar != null)\r\n               doubleParam = scalar(doubleParam);\r\n            IFCData paramVal = dataFn(doubleParam);\r\n            PropertyDescription propertyDescription = new PropertyDescription(propertyName);\r\n            IFCAnyHandle propSingleValue = IFCInstanceExporter.CreatePropertySingleValue(file, propertyDescription, paramVal, null);\r\n            properties.Add(propSingleValue);\r\n         }\r\n      }\r\n\r\n      private static void AddBoolValueToPropertySet(IFCFile file, Element element,\r\n         HashSet<IFCAnyHandle> properties, string psetName, string propertyName, int index,\r\n         Func<bool, IFCData> dataFn)\r\n      {\r\n         if (GetIntValueFromElement(element, psetName + \".\" + propertyName + \" (\" + index.ToString() + \")\", out int intParam) == null)\r\n            GetIntValueFromElement(element, psetName + \".\" + propertyName, out intParam);\r\n         {\r\n            IFCData paramVal = dataFn(intParam != 0);\r\n            PropertyDescription propertyDescription = new PropertyDescription(propertyName);\r\n            IFCAnyHandle propSingleValue = IFCInstanceExporter.CreatePropertySingleValue(file, propertyDescription, paramVal, null);\r\n            properties.Add(propSingleValue);\r\n         }\r\n      }\r\n\r\n\r\n      private static IFCAnyHandle CreatePSetRampLandingCommon(IFCFile file, Element element, int landingIndex)\r\n      {\r\n         HashSet<IFCAnyHandle> properties = new HashSet<IFCAnyHandle>();\r\n\r\n         string psetName = \"Pset_SlabCommon\";\r\n         AddStringValueToPropertySet(file, element, properties, psetName, \"Reference\", landingIndex,\r\n            IFCDataUtil.CreateAsIdentifier);\r\n         AddStringValueToPropertySet(file, element, properties, psetName, \"AcousticRating\", landingIndex,\r\n            IFCDataUtil.CreateAsLabel);\r\n         AddStringValueToPropertySet(file, element, properties, psetName, \"FireRating\", landingIndex,\r\n            IFCDataUtil.CreateAsLabel);\r\n         AddStringValueToPropertySet(file, element, properties, psetName, \"SurfaceSpreadOfFlame\", landingIndex,\r\n            IFCDataUtil.CreateAsLabel);\r\n\r\n         // Skip PitchAngle, it does not write the property as it should be 0 (a criteria for Landing)\r\n\r\n         AddDoubleValueToPropertySet(file, element, properties, psetName, \"ThermalTransmittance\", landingIndex,\r\n            UnitUtil.ScaleThermalTransmittance, IFCDataUtil.CreateAsThermalTransmittanceMeasure);\r\n         \r\n         AddBoolValueToPropertySet(file, element, properties, psetName, \"Combustible\", landingIndex,\r\n            IFCDataUtil.CreateAsBoolean);\r\n         AddBoolValueToPropertySet(file, element, properties, psetName, \"Compartmentation\", landingIndex,\r\n            IFCDataUtil.CreateAsBoolean);\r\n         AddBoolValueToPropertySet(file, element, properties, psetName, \"IsExternal\", landingIndex,\r\n            IFCDataUtil.CreateAsBoolean);\r\n         AddBoolValueToPropertySet(file, element, properties, psetName, \"LoadBearing\", landingIndex,\r\n            IFCDataUtil.CreateAsBoolean);\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            string propertyName = \"Status\";\r\n            string baseParamName = psetName + \".\" + propertyName;\r\n            Parameter param = GetStringValueFromElement(element, baseParamName + \" (\" + landingIndex.ToString() + \")\", out string stringParam);\r\n            if (param == null)\r\n               param = GetStringValueFromElement(element, baseParamName, out stringParam);\r\n            if (param != null)\r\n            {\r\n               PropertyDescription propertyDescription = new PropertyDescription(propertyName);\r\n               IFCAnyHandle propSingleValue = PropertyUtil.CreateLabelPropertyFromCache(file, param.Id, propertyDescription,\r\n                  stringParam, PropertyValueType.EnumeratedValue,\r\n                  true, typeof(PropertySet.IFC4.PEnum_ElementStatus));\r\n\r\n               if (propSingleValue != null)\r\n                  properties.Add(propSingleValue);\r\n            }\r\n         }\r\n\r\n         if (properties.Count > 0)\r\n         {\r\n            string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(element, \r\n               \"Landing \" + psetName + \": \" + landingIndex.ToString()));\r\n            return IFCInstanceExporter.CreatePropertySet(file, guid,\r\n               ExporterCacheManager.OwnerHistoryHandle, psetName, null, properties);\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      private static void CreateQuantitySetRampFlight(ExporterIFC exporterIFC, IFCFile file, IFCAnyHandle rampFlightHnd, Element element, (Solid body, Face topFace) geometry, int flightIndex)\r\n      {\r\n         string quantitySetName = \"Qto_RampFlightBaseQuantities\";\r\n         PropertySetupType propertySetup = PropertySetupType.IfcBaseQuantities;\r\n         if (PropertyUtil.IsPropertySetExcluded(propertySetup, quantitySetName))\r\n            return;\r\n\r\n         HashSet<IFCAnyHandle> quantityHnds = new();\r\n         double dblVal = 0.0;\r\n\r\n         // NetArea\r\n         string quantityName = \"NetArea\";\r\n         IFCPropertyMappingInfo info = PropertyUtil.GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\r\n         if (info?.ExportFlag ?? true)\r\n         {\r\n            bool valueFound = (info == null) ? false :\r\n               PropertyUtil.GetQuantityDoubleValueFromParameter(element, info.RevitPropertyName,\r\n               (BuiltInParameter)info.RevitPropertyId.Value, QuantityType.Area, out dblVal);\r\n\r\n            if (!valueFound)\r\n            {\r\n               double area = geometry.topFace.Area;\r\n               if (!MathUtil.IsAlmostZero(area))\r\n               {\r\n                  dblVal = UnitUtil.ScaleArea(area);\r\n                  valueFound = true;\r\n               }\r\n            }\r\n\r\n            if (valueFound)\r\n            {\r\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityArea(file, quantityName, null, null, dblVal);\r\n               quantityHnds.Add(quantityHnd);\r\n            }\r\n         }\r\n\r\n         // NetVolume\r\n         quantityName = \"NetVolume\";\r\n         info = PropertyUtil.GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\r\n         if (info?.ExportFlag ?? true)\r\n         {\r\n            bool valueFound = (info == null) ? false :\r\n               PropertyUtil.GetQuantityDoubleValueFromParameter(element, info.RevitPropertyName,\r\n               (BuiltInParameter)info.RevitPropertyId.Value, QuantityType.Volume, out dblVal);\r\n\r\n            if (!valueFound)\r\n            {\r\n               double volume = geometry.body.Volume;\r\n               if (!MathUtil.IsAlmostZero(volume))\r\n               {\r\n                  dblVal = UnitUtil.ScaleVolume(volume);\r\n                  valueFound = true;\r\n               }\r\n            }\r\n\r\n            if (valueFound)\r\n            {\r\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityVolume(file, quantityName, null, null, dblVal);\r\n               quantityHnds.Add(quantityHnd);\r\n            }\r\n         }\r\n\r\n         // For the rest of quantities, we cannot determine the quantities for freeform RampFlight and therefore it will rely on parameters\r\n\r\n         // Length\r\n         quantityName = \"Length\";\r\n         info = PropertyUtil.GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\r\n         if (info?.ExportFlag ?? true)\r\n         {\r\n            bool valueFound = (info == null) ? false :\r\n               PropertyUtil.GetQuantityDoubleValueFromParameter(element, info.RevitPropertyName,\r\n               (BuiltInParameter)info.RevitPropertyId.Value, QuantityType.Length, out dblVal);\r\n\r\n            if (!valueFound)\r\n            {\r\n               double doubleParam = 0.0;\r\n               if (GetDoubleValueFromElement(element, \"IfcRampFlight.IfcQtyLength (\" + flightIndex.ToString() + \")\", out doubleParam) != null\r\n                  || GetDoubleValueFromElement(element, \"IfcRampFlight.IfcQtyLength\", out doubleParam) != null)\r\n               {\r\n                  dblVal = UnitUtil.ScaleLength(doubleParam);\r\n                  valueFound = true;\r\n               }\r\n            }\r\n\r\n            if (valueFound)\r\n            {\r\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityLength(file, quantityName, null, null, dblVal);\r\n               quantityHnds.Add(quantityHnd);\r\n            }\r\n         }\r\n\r\n         // Width\r\n         quantityName = \"Width\";\r\n         info = PropertyUtil.GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\r\n         if (info?.ExportFlag ?? true)\r\n         {\r\n            bool valueFound = (info == null) ? false :\r\n               PropertyUtil.GetQuantityDoubleValueFromParameter(element, info.RevitPropertyName,\r\n               (BuiltInParameter)info.RevitPropertyId.Value, QuantityType.Length, out dblVal);\r\n\r\n            if (!valueFound)\r\n            {\r\n               double doubleParam = 0.0;\r\n               if (GetDoubleValueFromElement(element, \"IfcRampFlight.IfcQtyWidth (\" + flightIndex.ToString() + \")\", out doubleParam) != null\r\n                  || GetDoubleValueFromElement(element, \"IfcRampFlight.IfcQtyWidth\", out doubleParam) != null)\r\n               {\r\n                  dblVal = UnitUtil.ScaleLength(doubleParam);\r\n                  valueFound = true;\r\n               }\r\n            }\r\n\r\n            if (valueFound)\r\n            {\r\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityLength(file, quantityName, null, null, dblVal);\r\n               quantityHnds.Add(quantityHnd);\r\n            }\r\n         }\r\n\r\n         // GrossArea\r\n         quantityName = \"GrossArea\";\r\n         info = PropertyUtil.GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\r\n         if (info?.ExportFlag ?? true)\r\n         {\r\n            bool valueFound = (info == null) ? false :\r\n               PropertyUtil.GetQuantityDoubleValueFromParameter(element, info.RevitPropertyName,\r\n               (BuiltInParameter)info.RevitPropertyId.Value, QuantityType.Area, out dblVal);\r\n\r\n            if (!valueFound)\r\n            {\r\n               double doubleParam = 0.0;\r\n               if (GetDoubleValueFromElement(element, \"IfcRampFlight.IfcQtyGrossArea (\" + flightIndex.ToString() + \")\", out doubleParam) != null\r\n                  || GetDoubleValueFromElement(element, \"IfcRampFlight.IfcQtyGrossArea\", out doubleParam) != null)\r\n               {\r\n                  dblVal = UnitUtil.ScaleArea(doubleParam);\r\n                  valueFound = true;\r\n               }\r\n            }\r\n\r\n            if (valueFound)\r\n            {\r\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityArea(file, quantityName, null, null, dblVal);\r\n               quantityHnds.Add(quantityHnd);\r\n            }\r\n         }\r\n\r\n         // GrossVolume\r\n         quantityName = \"GrossVolume\";\r\n         info = PropertyUtil.GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\r\n         if (info?.ExportFlag ?? true)\r\n         {\r\n            bool valueFound = (info == null) ? false :\r\n               PropertyUtil.GetQuantityDoubleValueFromParameter(element, info.RevitPropertyName,\r\n               (BuiltInParameter)info.RevitPropertyId.Value, QuantityType.Volume, out dblVal);\r\n\r\n            if (!valueFound)\r\n            {\r\n               double doubleParam = 0.0;\r\n               if (GetDoubleValueFromElement(element, \"IfcRampFlight.IfcQtyGrossVolume (\" + flightIndex.ToString() + \")\", out doubleParam) != null\r\n                  || GetDoubleValueFromElement(element, \"IfcRampFlight.IfcQtyGrossVolume\", out doubleParam) != null)\r\n               {\r\n                  dblVal = UnitUtil.ScaleVolume(doubleParam);\r\n                  valueFound = true;\r\n               }\r\n            }\r\n\r\n            if (valueFound)\r\n            {\r\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityVolume(file, quantityName, null, null, dblVal);\r\n               quantityHnds.Add(quantityHnd);\r\n            }\r\n         }\r\n\r\n         string quantitySetNameToUse = ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 ? null : quantitySetName;\r\n         PropertyUtil.CreateAndRelateBaseQuantities(file, exporterIFC, rampFlightHnd, quantityHnds, quantitySetNameToUse);\r\n      }\r\n\r\n      private static void CreateQuantitySetLanding(ExporterIFC exporterIFC, IFCFile file, IFCAnyHandle rampLandingHnd, Element element, (Solid body, Face topFace) geometry, int flightIndex)\r\n      {\r\n         string quantitySetName = \"Qto_SlabBaseQuantities\";\r\n         PropertySetupType propertySetup = PropertySetupType.IfcBaseQuantities;\r\n         if (PropertyUtil.IsPropertySetExcluded(propertySetup, quantitySetName))\r\n            return;\r\n\r\n         HashSet<IFCAnyHandle> quantityHnds = new();\r\n         double dblVal = 0.0;\r\n\r\n         // NetArea\r\n         string quantityName = \"NetArea\";\r\n         IFCPropertyMappingInfo info = PropertyUtil.GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\r\n         if (info?.ExportFlag ?? true)\r\n         {\r\n            bool valueFound = (info == null) ? false :\r\n               PropertyUtil.GetQuantityDoubleValueFromParameter(element, info.RevitPropertyName,\r\n               (BuiltInParameter)info.RevitPropertyId.Value, QuantityType.Area, out dblVal);\r\n\r\n            if (!valueFound)\r\n            {\r\n               double area = geometry.topFace.Area;\r\n               if (!MathUtil.IsAlmostZero(area))\r\n               {\r\n                  dblVal = UnitUtil.ScaleArea(area);\r\n                  valueFound = true;\r\n               }\r\n            }\r\n\r\n            if (valueFound)\r\n            {\r\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityArea(file, quantityName, null, null, dblVal);\r\n               quantityHnds.Add(quantityHnd);\r\n            }\r\n         }\r\n\r\n         // NetVolume\r\n         quantityName = \"NetVolume\";\r\n         info = PropertyUtil.GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\r\n         if (info?.ExportFlag ?? true)\r\n         {\r\n            bool valueFound = (info == null) ? false :\r\n               PropertyUtil.GetQuantityDoubleValueFromParameter(element, info.RevitPropertyName,\r\n               (BuiltInParameter)info.RevitPropertyId.Value, QuantityType.Volume, out dblVal);\r\n\r\n            if (!valueFound)\r\n            {\r\n               double volume = geometry.body.Volume;\r\n               if (!MathUtil.IsAlmostZero(volume))\r\n               {\r\n                  dblVal = UnitUtil.ScaleVolume(volume);\r\n                  valueFound = true;\r\n               }\r\n            }\r\n\r\n            if (valueFound)\r\n            {\r\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityVolume(file, quantityName, null, null, dblVal);\r\n               quantityHnds.Add(quantityHnd);\r\n            }\r\n         }\r\n\r\n         // Perimeter\r\n         quantityName = \"Perimeter\";\r\n         info = PropertyUtil.GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\r\n         if (info?.ExportFlag ?? true)\r\n         {\r\n            bool valueFound = (info == null) ? false :\r\n               PropertyUtil.GetQuantityDoubleValueFromParameter(element, info.RevitPropertyName,\r\n               (BuiltInParameter)info.RevitPropertyId.Value, QuantityType.Length, out dblVal);\r\n\r\n            if (!valueFound)\r\n            {\r\n               IList<CurveLoop> curveLoops = geometry.topFace.GetEdgesAsCurveLoops();\r\n               double perimeter = curveLoops[0].GetExactLength();\r\n               if (!MathUtil.IsAlmostZero(perimeter))\r\n               {\r\n                  dblVal = UnitUtil.ScaleLength(perimeter);\r\n                  valueFound = true;\r\n               }\r\n            }\r\n\r\n            if (valueFound)\r\n            {\r\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityLength(file, quantityName, null, null, dblVal);\r\n               quantityHnds.Add(quantityHnd);\r\n            }\r\n         }\r\n\r\n         // For the rest of quantities, we cannot determine the quantities for freeform Landing and therefore it will rely on parameters\r\n\r\n         // Length\r\n         quantityName = \"Length\";\r\n         info = PropertyUtil.GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\r\n         if (info?.ExportFlag ?? true)\r\n         {\r\n            bool valueFound = (info == null) ? false :\r\n               PropertyUtil.GetQuantityDoubleValueFromParameter(element, info.RevitPropertyName,\r\n               (BuiltInParameter)info.RevitPropertyId.Value, QuantityType.Length, out dblVal);\r\n\r\n            if (!valueFound)\r\n            {\r\n               double doubleParam = 0.0;\r\n               if (GetDoubleValueFromElement(element, \"IfcRampLanding.IfcQtyLength (\" + flightIndex.ToString() + \")\", out doubleParam) != null\r\n                  || GetDoubleValueFromElement(element, \"IfcRampLanding.IfcQtyLength\", out doubleParam) != null)\r\n               {\r\n                  dblVal = UnitUtil.ScaleLength(doubleParam);\r\n                  valueFound = true;\r\n               }\r\n            }\r\n\r\n            if (valueFound)\r\n            {\r\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityLength(file, quantityName, null, null, dblVal);\r\n               quantityHnds.Add(quantityHnd);\r\n            }\r\n         }\r\n\r\n         // Width\r\n         quantityName = \"Width\";\r\n         info = PropertyUtil.GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\r\n         if (info?.ExportFlag ?? true)\r\n         {\r\n            bool valueFound = (info == null) ? false :\r\n               PropertyUtil.GetQuantityDoubleValueFromParameter(element, info.RevitPropertyName,\r\n               (BuiltInParameter)info.RevitPropertyId.Value, QuantityType.Length, out dblVal);\r\n\r\n            if (!valueFound)\r\n            {\r\n               double doubleParam = 0.0;\r\n               if (GetDoubleValueFromElement(element, \"IfcRampLanding.IfcQtyWidth (\" + flightIndex.ToString() + \")\", out doubleParam) != null\r\n                  || GetDoubleValueFromElement(element, \"IfcRampLanding.IfcQtyWidth\", out doubleParam) != null)\r\n               {\r\n                  dblVal = UnitUtil.ScaleLength(doubleParam);\r\n                  valueFound = true;\r\n               }\r\n            }\r\n\r\n            if (valueFound)\r\n            {\r\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityLength(file, quantityName, null, null, dblVal);\r\n               quantityHnds.Add(quantityHnd);\r\n            }\r\n         }\r\n\r\n         // Depth\r\n         quantityName = \"Depth\";\r\n         info = PropertyUtil.GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\r\n         if (info?.ExportFlag ?? true)\r\n         {\r\n            bool valueFound = (info == null) ? false :\r\n               PropertyUtil.GetQuantityDoubleValueFromParameter(element, info.RevitPropertyName,\r\n               (BuiltInParameter)info.RevitPropertyId.Value, QuantityType.Length, out dblVal);\r\n\r\n            if (!valueFound)\r\n            {\r\n               double doubleParam = 0.0;\r\n               if (GetDoubleValueFromElement(element, \"IfcRampLanding.IfcQtyDepth (\" + flightIndex.ToString() + \")\", out doubleParam) != null\r\n                  || GetDoubleValueFromElement(element, \"IfcRampLanding.IfcQtyDepth\", out doubleParam) != null)\r\n               {\r\n                  dblVal = UnitUtil.ScaleLength(doubleParam);\r\n                  valueFound = true;\r\n               }\r\n            }\r\n\r\n            if (valueFound)\r\n            {\r\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityLength(file, quantityName, null, null, dblVal);\r\n               quantityHnds.Add(quantityHnd);\r\n            }\r\n         }\r\n\r\n         // GrossArea\r\n         quantityName = \"GrossArea\";\r\n         info = PropertyUtil.GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\r\n         if (info?.ExportFlag ?? true)\r\n         {\r\n            bool valueFound = (info == null) ? false :\r\n               PropertyUtil.GetQuantityDoubleValueFromParameter(element, info.RevitPropertyName,\r\n               (BuiltInParameter)info.RevitPropertyId.Value, QuantityType.Area, out dblVal);\r\n\r\n            if (!valueFound)\r\n            {\r\n               double doubleParam = 0.0;\r\n               if (GetDoubleValueFromElement(element, \"IfcRampLanding.IfcQtyGrossArea (\" + flightIndex.ToString() + \")\", out doubleParam) != null\r\n                  || GetDoubleValueFromElement(element, \"IfcRampLanding.IfcQtyGrossArea\", out doubleParam) != null)\r\n               {\r\n                  dblVal = UnitUtil.ScaleArea(doubleParam);\r\n                  valueFound = true;\r\n               }\r\n            }\r\n\r\n            if (valueFound)\r\n            {\r\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityArea(file, quantityName, null, null, dblVal);\r\n               quantityHnds.Add(quantityHnd);\r\n            }\r\n         }\r\n\r\n         // GrossVolume\r\n         quantityName = \"GrossVolume\";\r\n         info = PropertyUtil.GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\r\n         if (info?.ExportFlag ?? true)\r\n         {\r\n            bool valueFound = (info == null) ? false :\r\n               PropertyUtil.GetQuantityDoubleValueFromParameter(element, info.RevitPropertyName,\r\n               (BuiltInParameter)info.RevitPropertyId.Value, QuantityType.Volume, out dblVal);\r\n\r\n            if (!valueFound)\r\n            {\r\n               double doubleParam = 0.0;\r\n               if (GetDoubleValueFromElement(element, \"IfcRampLanding.IfcQtyGrossVolume (\" + flightIndex.ToString() + \")\", out doubleParam) != null\r\n                  || GetDoubleValueFromElement(element, \"IfcRampLanding.IfcQtyGrossVolume\", out doubleParam) != null)\r\n               {\r\n                  dblVal = UnitUtil.ScaleVolume(doubleParam);\r\n                  valueFound = true;\r\n               }\r\n            }\r\n\r\n            if (valueFound)\r\n            {\r\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityVolume(file, quantityName, null, null, dblVal);\r\n               quantityHnds.Add(quantityHnd);\r\n            }\r\n         }\r\n\r\n         // GrossWeight\r\n         quantityName = \"GrossWeight\";\r\n         info = PropertyUtil.GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\r\n         if (info?.ExportFlag ?? true)\r\n         {\r\n            bool valueFound = (info == null) ? false :\r\n               PropertyUtil.GetQuantityDoubleValueFromParameter(element, info.RevitPropertyName,\r\n               (BuiltInParameter)info.RevitPropertyId.Value, QuantityType.Length, out dblVal);\r\n\r\n            if (!valueFound)\r\n            {\r\n               double doubleParam = 0.0;\r\n               if (GetDoubleValueFromElement(element, \"IfcRampLanding.IfcQtyGrossWeight (\" + flightIndex.ToString() + \")\", out doubleParam) != null\r\n                  || GetDoubleValueFromElement(element, \"IfcRampLanding.IfcQtyGrossWeight\", out doubleParam) != null)\r\n               {\r\n                  dblVal = doubleParam;\r\n                  valueFound = true;\r\n               }\r\n            }\r\n\r\n            if (valueFound)\r\n            {\r\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityLength(file, quantityName, null, null, dblVal);\r\n               quantityHnds.Add(quantityHnd);\r\n            }\r\n         }\r\n\r\n         // NetWeight\r\n         quantityName = \"NetWeight\";\r\n         info = PropertyUtil.GetParameterMappingInfoFromCache(propertySetup, quantitySetName, ElementId.InvalidElementId, quantityName);\r\n         if (info?.ExportFlag ?? true)\r\n         {\r\n            bool valueFound = (info == null) ? false :\r\n               PropertyUtil.GetQuantityDoubleValueFromParameter(element, info.RevitPropertyName,\r\n               (BuiltInParameter)info.RevitPropertyId.Value, QuantityType.Length, out dblVal);\r\n\r\n            if (!valueFound)\r\n            {\r\n               double doubleParam = 0.0;\r\n               if (GetDoubleValueFromElement(element, \"IfcRampLanding.IfcQtyNetWeight (\" + flightIndex.ToString() + \")\", out doubleParam) != null\r\n                  || GetDoubleValueFromElement(element, \"IfcRampLanding.IfcQtyNetWeight\", out doubleParam) != null)\r\n               {\r\n                  dblVal = doubleParam;\r\n                  valueFound = true;\r\n               }\r\n            }\r\n\r\n            if (valueFound)\r\n            {\r\n               IFCAnyHandle quantityHnd = IFCInstanceExporter.CreateQuantityLength(file, quantityName, null, null, dblVal);\r\n               quantityHnds.Add(quantityHnd);\r\n            }\r\n         }\r\n\r\n         string quantitySetNameToUse = ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 ? null : quantitySetName;\r\n         PropertyUtil.CreateAndRelateBaseQuantities(file, exporterIFC, rampLandingHnd, quantityHnds, quantitySetNameToUse);\r\n      }\r\n\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/RebarCouplerExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing System.Reflection;\r\n\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export rebar couplers.\r\n   /// </summary>\r\n   class RebarCouplerExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports a Rebar Coupler,\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"coupler\">The RebarCoupler element.</param>\r\n      /// <param name=\"productWrapper\">The product wrapper.</param>\r\n      public static void ExportCoupler(ExporterIFC exporterIFC, RebarCoupler coupler, ProductWrapper productWrapper)\r\n      {\r\n         if (coupler == null)\r\n            return;\r\n\r\n         ElementId typeId = coupler.GetTypeId();\r\n         FamilySymbol familySymbol = coupler.Document.GetElement(typeId) as FamilySymbol;\r\n         if (familySymbol == null)\r\n            return;\r\n\r\n         IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(coupler, out string ifcEnumType);\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(exportType.ExportInstance))\r\n            return;\r\n\r\n         ElementId categoryId = CategoryUtil.GetSafeCategoryId(coupler);\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n         Options options = GeometryUtil.GetIFCExportGeometryOptions();\r\n\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            bool containedInAssembly = ExporterUtil.IsContainedInAssembly(coupler);\r\n            TypeObjectKey typeKey = new(typeId, ElementId.InvalidElementId, false, exportType, ElementId.InvalidElementId, containedInAssembly);\r\n            \r\n            FamilyTypeInfo currentTypeInfo = ExporterCacheManager.FamilySymbolToTypeInfoCache.Find(typeKey);\r\n            bool found = currentTypeInfo.IsValid();\r\n            if (!found)\r\n            {\r\n               string typeObjectType = NamingUtil.GetDefaultObjectType(familySymbol);\r\n\r\n               HashSet<IFCAnyHandle> propertySetsOpt = new();\r\n\r\n               GeometryElement exportGeometry = familySymbol.get_Geometry(options);\r\n\r\n               BodyExporterOptions bodyExporterOptions = new(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n               BodyData bodyData = BodyExporter.ExportBody(exporterIFC, coupler, categoryId, ElementId.InvalidElementId, exportGeometry, bodyExporterOptions, null);\r\n\r\n               IFCAnyHandle origin = ExporterUtil.CreateAxis2Placement3D(file);\r\n               List<IFCAnyHandle> repMap = [ IFCInstanceExporter.CreateRepresentationMap(file, origin, bodyData.RepresentationHnd) ];\r\n\r\n               string typeGuid = GUIDUtil.GenerateIFCGuidFrom(familySymbol, exportType);\r\n               IFCAnyHandle styleHandle = FamilyExporterUtil.ExportGenericType(file, exportType, propertySetsOpt, repMap, coupler, familySymbol, typeGuid);\r\n               productWrapper.RegisterHandleWithElementType(familySymbol, exportType, styleHandle, propertySetsOpt);\r\n\r\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(styleHandle))\r\n               {\r\n                  currentTypeInfo.Style = styleHandle;\r\n                  ExporterCacheManager.FamilySymbolToTypeInfoCache.Register(typeKey, currentTypeInfo, false);\r\n               }\r\n            }\r\n\r\n            int nCouplerQuantity = coupler.GetCouplerQuantity();\r\n            if (nCouplerQuantity <= 0)\r\n               return;\r\n\r\n            HashSet<IFCAnyHandle> createdRebarCouplerHandles = new();\r\n            string origInstanceName = NamingUtil.GetNameOverride(coupler, NamingUtil.GetIFCName(coupler));\r\n\r\n            bool hasTypeInfo = !IFCAnyHandleUtil.IsNullOrHasNoValue(currentTypeInfo.Style);\r\n            bool bExportAsSingleIFCEntity = !ExporterCacheManager.ExportOptionsCache.ExportBarsInUniformSetsAsSeparateIFCEntities;\r\n            HashSet<IFCAnyHandle> representations = new();\r\n            for (int idx = 0; idx < nCouplerQuantity; idx++)\r\n            {\r\n               string extraId = bExportAsSingleIFCEntity ? string.Empty : \":\" + (idx + 1).ToString();\r\n               string instanceGUID = GUIDUtil.GenerateIFCGuidFrom(GUIDUtil.CreateGUIDString(coupler, \"Fastener\" + extraId));\r\n\r\n               IFCAnyHandle style = currentTypeInfo.Style;\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(style))\r\n                  return;\r\n\r\n               IList<IFCAnyHandle> repMapList = GeometryUtil.GetRepresentationMaps(style);\r\n               if ((repMapList?.Count ?? 0) == 0)\r\n                  return;\r\n\r\n               IFCAnyHandle contextOfItems3d = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Body);\r\n\r\n               Transform trf = coupler.GetCouplerPositionTransform(idx);\r\n\r\n               if (!bExportAsSingleIFCEntity)\r\n               {\r\n                  representations = new() { ExporterUtil.CreateDefaultMappedItem(file, repMapList[0], XYZ.Zero) };\r\n               }\r\n               else\r\n               {\r\n                  IFCAnyHandle axis1 = ExporterUtil.CreateDirection(file, trf.BasisX, GeometryUtil.Dimension.Dim3D);\r\n                  IFCAnyHandle axis2 = ExporterUtil.CreateDirection(file, trf.BasisY, GeometryUtil.Dimension.Dim3D);\r\n                  IFCAnyHandle axis3 = ExporterUtil.CreateDirection(file, trf.BasisZ, GeometryUtil.Dimension.Dim3D);\r\n                  IFCAnyHandle origin = ExporterUtil.CreateCartesianPoint(file, UnitUtil.ScaleLength(trf.Origin));\r\n                  double scale = 1.0;\r\n                  IFCAnyHandle mappingTarget = IFCInstanceExporter.CreateCartesianTransformationOperator3D(file, axis1, axis2, origin, scale, axis3);\r\n                  representations.Add(IFCInstanceExporter.CreateMappedItem(file, repMapList[0], mappingTarget));\r\n               }\r\n\r\n               if (!bExportAsSingleIFCEntity || (bExportAsSingleIFCEntity && representations.Count == nCouplerQuantity))\r\n               {\r\n                  List<IFCAnyHandle> shapeReps = \r\n                     [ RepresentationUtil.CreateBodyMappedItemRep(exporterIFC, coupler, categoryId, contextOfItems3d, representations) ];\r\n\r\n                  IFCAnyHandle productRepresentation = IFCInstanceExporter.CreateProductDefinitionShape(exporterIFC.GetFile(), null, null, shapeReps);\r\n\r\n                  if (bExportAsSingleIFCEntity)\r\n                     trf = Transform.Identity;\r\n\r\n                  using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, coupler, trf, null))\r\n                  {\r\n                     IFCAnyHandle instanceHandle = IFCInstanceExporter.CreateGenericIFCEntity(exportType, file, \r\n                        coupler, instanceGUID, ownerHistory,setter.LocalPlacement, productRepresentation);\r\n\r\n                     string extraName = bExportAsSingleIFCEntity ? string.Empty : (\": \" + idx);\r\n                     string instanceName = NamingUtil.GetNameOverride(instanceHandle, coupler, origInstanceName + extraName);\r\n\r\n                     IFCAnyHandleUtil.OverrideNameAttribute(instanceHandle, instanceName);\r\n                     createdRebarCouplerHandles.Add(instanceHandle);\r\n\r\n                     productWrapper.AddElement(coupler, instanceHandle, setter, null, true, exportType);\r\n\r\n                     if (hasTypeInfo)\r\n                     {\r\n                        ExporterCacheManager.TypeRelationsCache.Add(currentTypeInfo.Style, instanceHandle);\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n\r\n            string couplerGUID = GUIDUtil.CreateGUID(coupler);\r\n\r\n            if (nCouplerQuantity > 1 && !bExportAsSingleIFCEntity)\r\n            {\r\n               // Create a group to hold all of the created IFC entities, if the coupler aren't already in an assembly.  \r\n               // We want to avoid nested groups of groups of couplers.\r\n               if (coupler.AssemblyInstanceId == ElementId.InvalidElementId)\r\n               {\r\n                  string revitObjectType = NamingUtil.GetFamilyAndTypeName(coupler);\r\n                  string name = NamingUtil.GetNameOverride(coupler, revitObjectType);\r\n                  string description = NamingUtil.GetDescriptionOverride(coupler, null);\r\n                  string objectType = NamingUtil.GetObjectTypeOverride(coupler, revitObjectType);\r\n\r\n                  IFCAnyHandle rebarGroup = IFCInstanceExporter.CreateGroup(file, couplerGUID,\r\n                      ownerHistory, name, description, objectType);\r\n\r\n                  productWrapper.AddElement(coupler, rebarGroup, exportType);\r\n\r\n                  string groupGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                     GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAssignsToGroup, string.Empty, rebarGroup));\r\n                  IFCInstanceExporter.CreateRelAssignsToGroup(file, groupGuid, ownerHistory,\r\n                      null, null, createdRebarCouplerHandles, null, rebarGroup);\r\n               }\r\n            }\r\n            else\r\n            {\r\n               // We will update the GUID of the one created element to be the element GUID.\r\n               // This will allow the IfcGUID parameter to be use/set if appropriate.\r\n               ExporterUtil.SetGlobalId(createdRebarCouplerHandles.ElementAt(0), couplerGUID, coupler);\r\n            }\r\n\r\n            tr.Commit();\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/RebarExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Revit.IFC.Export.Properties;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing System.Windows.Forms;\r\n\r\n\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export beams.\r\n   /// </summary>\r\n   class RebarExporter\r\n   {\r\n      /// <summary>\r\n      /// A class to allow for a delayed add to the product wrapper.  Used by Rebars to determine if a level association is necessary or not.\r\n      /// </summary>\r\n      class DelayedProductWrapper\r\n      {\r\n         /// <summary>\r\n         /// The constructor for the class.\r\n         /// </summary>\r\n         /// <param name=\"rebarElement\">The element that created the rebar.</param>\r\n         /// <param name=\"elementHandle\">The associated IFC element handle.</param>\r\n         /// <param name=\"levelInfo\">The information for the associated level.</param>\r\n         public DelayedProductWrapper(Element rebarElement, IFCAnyHandle elementHandle, IFCLevelInfo levelInfo, IFCExportInfoPair exportInfo)\r\n         {\r\n            RebarElement = rebarElement;\r\n            ElementHandle = elementHandle;\r\n            LevelInfo = levelInfo;\r\n            ExportInfo = exportInfo;\r\n         }\r\n\r\n         public Element RebarElement { get; protected set; }\r\n\r\n         public IFCAnyHandle ElementHandle { get; protected set; }\r\n\r\n         public IFCLevelInfo LevelInfo { get; protected set; }\r\n\r\n         public IFCExportInfoPair ExportInfo { get; protected set; }\r\n      }\r\n\r\n      private static void CreateRebarGroup(ExporterIFC exporterIFC, Element element,\r\n         string guid, ProductWrapper productWrapper,\r\n         ISet<IFCAnyHandle> createdRebarHandles)\r\n      {\r\n         IFCEntityType elementClassTypeEnum = IFCEntityType.IfcGroup;\r\n         if (!ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n         {\r\n            IFCFile file = exporterIFC.GetFile();\r\n            using (IFCTransaction tr = new IFCTransaction(file))\r\n            {\r\n               IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n               string revitObjectType = NamingUtil.GetFamilyAndTypeName(element);\r\n               string name = NamingUtil.GetNameOverride(element, revitObjectType);\r\n               string description = NamingUtil.GetDescriptionOverride(element, null);\r\n               string objectType = NamingUtil.GetObjectTypeOverride(element, revitObjectType);\r\n\r\n               IFCAnyHandle rebarGroup = IFCInstanceExporter.CreateGroup(file, guid,\r\n                   ownerHistory, name, description, objectType);\r\n               IFCExportInfoPair exportInfo = new IFCExportInfoPair(elementClassTypeEnum);\r\n               productWrapper.AddElement(element, rebarGroup, exportInfo);\r\n\r\n               string groupGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAssignsToGroup, rebarGroup));\r\n               IFCInstanceExporter.CreateRelAssignsToGroup(file, groupGuid, ownerHistory,\r\n                  null, null, createdRebarHandles, null, rebarGroup);\r\n               tr.Commit();\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a Rebar, AreaReinforcement or PathReinforcement to IFC ReinforcingBar.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"productWrapper\">The product wrapper.</param>\r\n      public static void Export(ExporterIFC exporterIFC, Element element, ProductWrapper productWrapper)\r\n      {\r\n         ISet<DelayedProductWrapper> createdRebars = new HashSet<DelayedProductWrapper>();\r\n\r\n         // First, we will create individual rebars based on the Revit element.\r\n         if (element is Rebar)\r\n         {\r\n            createdRebars = ExportRebar(exporterIFC, element, productWrapper);\r\n         }\r\n         else if (element is AreaReinforcement)\r\n         {\r\n            AreaReinforcement areaReinforcement = element as AreaReinforcement;\r\n            IList<ElementId> rebarIds = areaReinforcement.GetRebarInSystemIds();\r\n\r\n            Document doc = areaReinforcement.Document;\r\n            foreach (ElementId id in rebarIds)\r\n            {\r\n               Element rebarInSystem = doc.GetElement(id);\r\n               ISet<DelayedProductWrapper> newlyCreatedRebars = ExportRebar(exporterIFC, rebarInSystem, productWrapper);\r\n               if (newlyCreatedRebars != null)\r\n                  createdRebars.UnionWith(newlyCreatedRebars);\r\n            }\r\n         }\r\n         else if (element is PathReinforcement)\r\n         {\r\n            PathReinforcement pathReinforcement = element as PathReinforcement;\r\n            IList<ElementId> rebarIds = pathReinforcement.GetRebarInSystemIds();\r\n\r\n            Document doc = pathReinforcement.Document;\r\n            foreach (ElementId id in rebarIds)\r\n            {\r\n               Element rebarInSystem = doc.GetElement(id);\r\n               ISet<DelayedProductWrapper> newlyCreatedRebars = ExportRebar(exporterIFC, rebarInSystem, productWrapper);\r\n               if (newlyCreatedRebars != null)\r\n                  createdRebars.UnionWith(newlyCreatedRebars);\r\n            }\r\n         }\r\n         else if (element is RebarContainer)\r\n         {\r\n            int itemIndex = 1;\r\n            RebarContainer rebarContainer = element as RebarContainer;\r\n            foreach (RebarContainerItem rebarContainerItem in rebarContainer)\r\n            {\r\n               ISet<DelayedProductWrapper> newlyCreatedRebars = ExportRebar(exporterIFC, rebarContainerItem, rebarContainer, itemIndex, productWrapper);\r\n               if (newlyCreatedRebars != null)\r\n               {\r\n                  itemIndex += newlyCreatedRebars.Count;\r\n                  createdRebars.UnionWith(newlyCreatedRebars);\r\n               }\r\n            }\r\n         }\r\n\r\n         // If we've created any rebar, we will group them below into three conceptual groups:\r\n         // 1. One rebar that shouldn't be grouped or be in an assembly, \r\n         //    but be directly contained in a building story.\r\n         // 2. Rebar that are in assemblies, where the assembly is contained in a building story.\r\n         // 3. Multiple rebar that aren't in assembles, which should both be in a group and \r\n         //    directly contained in a building story.\r\n         //\r\n         // The reason for the cases above:\r\n         // 1. Nested groups/assemblies aren't allow in IFC.  So we can only have one level.\r\n         // 2. IfcGroups don't have level assignment.  So the individual components inside have \r\n         //    to be directly contained in a building story.\r\n         // 3. IfcAssemblies do have level assignment, so individual components can't be directly\r\n         //    contained in a building story.   This does mean that rebars in assemblies may\r\n         //    be associated with the wrong level, but that is an IFC limitation.\r\n         if ((createdRebars?.Count ?? 0) != 0)\r\n         {\r\n            // Only one created element can have the consistent GUID of the main element.\r\n            // This will be either the first created assembly or the first rebar element.\r\n            string guid = GUIDUtil.CreateGUID(element);\r\n\r\n            // While it seems likely that all of the rebar would have the same assembly id,\r\n            // there's no need to assume this.  Make a map of assembly id to created rebar.\r\n            IDictionary<ElementId, ISet<DelayedProductWrapper>> relatedRebar =\r\n               new Dictionary<ElementId, ISet<DelayedProductWrapper>>();\r\n            relatedRebar[ElementId.InvalidElementId] = new HashSet<DelayedProductWrapper>();\r\n\r\n            // Go through the created rebar and sort into buckets by assembly id.\r\n            foreach (DelayedProductWrapper delayedProductWrapper in createdRebars)\r\n            {\r\n               Element rebarElement = delayedProductWrapper.RebarElement;\r\n               if (rebarElement == null)\r\n                  continue;\r\n\r\n               ElementId rebarAssemblyInstanceId = rebarElement.AssemblyInstanceId;\r\n               ISet<DelayedProductWrapper> currentRebarSet = null;\r\n               if (!relatedRebar.TryGetValue(rebarAssemblyInstanceId, out currentRebarSet))\r\n               {\r\n                  currentRebarSet = new HashSet<DelayedProductWrapper>();\r\n                  relatedRebar[rebarAssemblyInstanceId] = currentRebarSet;\r\n               }\r\n               currentRebarSet.Add(delayedProductWrapper);\r\n            }\r\n\r\n            int numGroups = relatedRebar.Count;\r\n            for (int ii = 0; ii < numGroups; ii++)\r\n            {\r\n               KeyValuePair<ElementId, ISet<DelayedProductWrapper>> relatedToAssembly = relatedRebar.ElementAt(ii);\r\n\r\n               // Ignore buckets with no items in them.\r\n               if (relatedToAssembly.Value.Count == 0)\r\n                  continue;\r\n\r\n               // We will attach rebar to an assembly for rebar belonging to an assembly; \r\n               // otherwise we will create a group, assuming there are at least 2 rebar to group.\r\n               ElementId assemblyId = relatedToAssembly.Key;\r\n               bool hasAssemblyId = (assemblyId != ElementId.InvalidElementId);\r\n               bool attachToLevel = !hasAssemblyId;\r\n\r\n               ISet<IFCAnyHandle> createdRebarHandles = new HashSet<IFCAnyHandle>();\r\n               foreach (DelayedProductWrapper delayedProductWrapper in relatedToAssembly.Value)\r\n               {\r\n                  IFCAnyHandle currentRebarHandle = delayedProductWrapper.ElementHandle;\r\n                  productWrapper.AddElement(delayedProductWrapper.RebarElement, currentRebarHandle,\r\n                     delayedProductWrapper.LevelInfo, null, attachToLevel, delayedProductWrapper.ExportInfo);\r\n                  createdRebarHandles.Add(currentRebarHandle);\r\n               }\r\n\r\n               if (hasAssemblyId)\r\n               {\r\n                  ExporterCacheManager.AssemblyInstanceCache.RegisterElements(assemblyId, productWrapper);\r\n               }\r\n               else if (createdRebarHandles.Count > 1)\r\n               {\r\n                  // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n                  string rebarGUID = guid ?? GUIDUtil.GenerateIFCGuidFrom(\r\n                     GUIDUtil.CreateGUIDString(element, \"Rebar Group\" + ii.ToString()));\r\n                  CreateRebarGroup(exporterIFC, element, rebarGUID, productWrapper, createdRebarHandles);\r\n                  guid = null;\r\n               }\r\n            }\r\n\r\n            // We will update the GUID of the one created IfcReinforcingElement to be the element GUID.\r\n            // This will allow the IfcGUID parameter to be use/set if appropriate.\r\n            if (createdRebars.Count == 1 && guid != null)\r\n            {\r\n               IFCAnyHandle rebarHandle = createdRebars.ElementAt(0).ElementHandle;\r\n               string originalGUID = IFCAnyHandleUtil.GetStringAttribute(rebarHandle, \"GlobalId\");\r\n               if (string.Compare(originalGUID, guid, false) != 0)\r\n               {\r\n                  ExporterUtil.SetGlobalId(rebarHandle, guid, element);\r\n               }\r\n            }\r\n         }\r\n      }\r\n   \r\n      private static IFCReinforcingBarRole GetReinforcingBarRole(string role)\r\n      {\r\n         if (string.IsNullOrWhiteSpace(role))\r\n            return IFCReinforcingBarRole.NotDefined;\r\n\r\n         IFCReinforcingBarRole barRole;\r\n         if (Enum.TryParse(role, true, out barRole))\r\n            return barRole;\r\n\r\n         return IFCReinforcingBarRole.NotDefined;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports an element as building element proxy.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// This function is called from the Export function, but can also be called directly if you do not\r\n      /// want CreateInternalPropertySets to be called.\r\n      /// </remarks>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <returns>The handle if created, null otherwise.</returns>\r\n      private static IFCAnyHandle ExportRebarAsProxy(ExporterIFC exporterIFC, Element element,\r\n          GeometryElement geometryElement, ProductWrapper productWrapper, IFCExportInfoPair exportType = null)\r\n      {\r\n         if (element == null || geometryElement == null)\r\n            return null;\r\n\r\n         if (exportType == null)\r\n         {\r\n            exportType = new IFCExportInfoPair(IFCEntityType.IfcBuildingElementProxy, IFCEntityType.IfcBuildingElementProxyType, \"NOTDEFINED\");\r\n         }\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         Common.Enums.IFCEntityType elementClassTypeEnum = Common.Enums.IFCEntityType.IfcBuildingElementProxy;\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n            return null;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle buildingElementProxy = null;\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            using (PlacementSetter placementSetter = PlacementSetter.Create(exporterIFC, element, null))\r\n            {\r\n               using (IFCExportBodyParams ecData = new IFCExportBodyParams())\r\n               {\r\n                  ecData.SetLocalPlacement(placementSetter.LocalPlacement);\r\n\r\n                  ElementId categoryId = CategoryUtil.GetSafeCategoryId(element);\r\n\r\n                  BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n                  IFCAnyHandle representation = RepresentationUtil.CreateAppropriateProductDefinitionShape(exporterIFC, element,\r\n                      categoryId, geometryElement, bodyExporterOptions, null, ecData, true);\r\n\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(representation))\r\n                  {\r\n                     ecData.ClearOpenings();\r\n                     return null;\r\n                  }\r\n\r\n                  string guid = GUIDUtil.CreateGUID(element);\r\n                  IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n                  IFCAnyHandle localPlacement = ecData.GetLocalPlacement();\r\n\r\n                  buildingElementProxy = IFCInstanceExporter.CreateBuildingElementProxy(exporterIFC, element, guid,\r\n                      ownerHistory, localPlacement, representation, exportType.GetPredefinedTypeOrDefault());\r\n\r\n                  productWrapper.AddElement(element, buildingElementProxy, placementSetter.LevelInfo, ecData, true, exportType);\r\n               }\r\n               tr.Commit();\r\n            }\r\n         }\r\n\r\n         return buildingElementProxy;\r\n      }\r\n\r\n      /// <summary>\r\n      /// A special case function that can export a Rebar element as an IfcBuildingElementProxy for view-specific exports where the exact geometry of the rebar matters.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"rebarElement\">The rebar element to be exported.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper object.</param>\r\n      /// <param name=\"cannotExportRebar\">True if we tried to create an IFC entity but failed.</param>\r\n      /// <returns>True if the rebar was exported here, false otherwise.</returns>\r\n      /// <remarks>This functionality may be obsoleted in the future.</remarks>\r\n      private static IFCAnyHandle ExportRebarAsProxyElementInView(ExporterIFC exporterIFC, Element rebarElement, ProductWrapper productWrapper, out bool cannotExportRebar)\r\n      {\r\n         IFCAnyHandle rebarEntity = null;\r\n         cannotExportRebar = false;\r\n\r\n         if (rebarElement is Rebar && ExporterCacheManager.ExportOptionsCache.FilterViewForExport != null)\r\n         {\r\n            // The only options handled here is IfcBuildingElementProxy.\r\n            // Not Exported is handled previously, and ReinforcingBar vs Mesh will be handled later.\r\n            string ifcEnumType;\r\n            IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(rebarElement, out ifcEnumType);\r\n\r\n            if (exportType.ExportInstance == IFCEntityType.IfcBuildingElementProxy ||\r\n                exportType.ExportType == IFCEntityType.IfcBuildingElementProxyType)\r\n            {\r\n               Rebar rebar = rebarElement as Rebar;\r\n               GeometryElement rebarGeometry = rebar.GetFullGeometryForView(ExporterCacheManager.ExportOptionsCache.FilterViewForExport);\r\n               if (rebarGeometry != null)\r\n                  rebarEntity = ExportRebarAsProxy(exporterIFC, rebarElement, rebarGeometry, productWrapper);\r\n\r\n               cannotExportRebar = IFCAnyHandleUtil.IsNullOrHasNoValue(rebarEntity);\r\n            }\r\n         }\r\n\r\n         return rebarEntity;\r\n      }\r\n\r\n      private static Curve ApplyNonConformalTransformIfPossible(Curve baseCurve, Transform transform)\r\n      {\r\n         if (!(baseCurve?.IsBound ?? false) || transform == null)\r\n            return null;\r\n\r\n         Line baseLine = baseCurve as Line;\r\n         if (baseLine != null)\r\n         {\r\n            XYZ newStartPoint = transform.OfPoint(baseLine.GetEndPoint(0));\r\n            XYZ newEndPoint = transform.OfPoint(baseLine.GetEndPoint(1));\r\n\r\n            return Line.CreateBound(newStartPoint, newEndPoint);\r\n         }\r\n\r\n         Arc baseArc = baseCurve as Arc;\r\n         if (baseArc != null)\r\n         {\r\n            // Strictly speaking, the non-conformal transform of an arc is an ellipse.\r\n            // However, this method is intended for very slightly non-conformal transforms,\r\n            // and an arc that is within a small tolerance of the \"real\" ellipse is more\r\n            // useful (and accurate to intent) than an ellipse.\r\n            XYZ newStartPoint = transform.OfPoint(baseArc.GetEndPoint(0));\r\n            XYZ newEndPoint = transform.OfPoint(baseArc.GetEndPoint(1));\r\n\r\n            double midParameter = (baseArc.GetEndParameter(0) + baseArc.GetEndParameter(1)) / 2.0;\r\n            XYZ newPointOnArc = transform.OfPoint(baseArc.Evaluate(midParameter, false));\r\n\r\n            return Arc.Create(newStartPoint, newEndPoint, newPointOnArc);\r\n         }\r\n\r\n         // At the moment, rebar segments can only be lines or arcs, so no need to worry\r\n         // about other cases.\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a Rebar to IFC ReinforcingBar.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"rebarItem\">The rebar to be exported.  This might be an element or a sub-element.</param>\r\n      /// <param name=\"rebarElement\">The element that contains the rebar to be exported.  This may be the same as rebarItem.</param>\r\n      /// <param name=\"itemIndex\">If greater than 0, the index of the first rebar in the rebarItem in the rebarElement, used for naming and GUID creation.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper object.</param>\r\n      /// <returns>The set of handles created, to add to the ProductWrapper in the calling function.</returns>\r\n      private static ISet<DelayedProductWrapper> ExportRebar(ExporterIFC exporterIFC, object rebarItem, Element rebarElement, int itemIndex, ProductWrapper productWrapper)\r\n      {\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         IFCEntityType elementClassTypeEnum = IFCEntityType.IfcReinforcingBar;\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n            return null;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         HashSet<DelayedProductWrapper> createdRebars = new HashSet<DelayedProductWrapper>();\r\n\r\n         int rebarQuantity = GetRebarQuantity(rebarItem);\r\n         if (rebarQuantity == 0)\r\n            return null;\r\n\r\n         using (IFCTransaction transaction = new IFCTransaction(file))\r\n         {\r\n            // Exporting rebar as a proxy element means that they will be independent\r\n            // and local placement is handled in ProxyElementExporter.ExportBuildingElementProxy()\r\n            bool cannotExportRebar = false;\r\n            IFCAnyHandle rebarHandle = ExportRebarAsProxyElementInView(exporterIFC, rebarElement, productWrapper, out cannotExportRebar);\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(rebarHandle) || cannotExportRebar)\r\n            {\r\n               if (!cannotExportRebar)\r\n                  transaction.Commit();\r\n               return null;   // Rebar doesn't create a group.\r\n            }\r\n\r\n            using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, rebarElement, null))\r\n            {\r\n               IFCAnyHandle prodRep = null;\r\n\r\n               double totalBarLengthUnscale = GetRebarTotalLength(rebarItem);\r\n               double volumeUnscale = GetRebarVolume(rebarItem);\r\n               double totalBarLength = UnitUtil.ScaleLength(totalBarLengthUnscale);\r\n\r\n               if (MathUtil.IsAlmostZero(totalBarLength))\r\n                  return null;\r\n\r\n               ElementId materialId = ElementId.InvalidElementId;\r\n               ParameterUtil.GetElementIdValueFromElementOrSymbol(rebarElement, BuiltInParameter.MATERIAL_ID_PARAM, out materialId);\r\n\r\n               double longitudinalBarNominalDiameter = 0.0, modelDiameter = 0.0;\r\n               GetBarDiameters(rebarItem, out longitudinalBarNominalDiameter, out modelDiameter);\r\n               double longitudinalBarCrossSectionArea = UnitUtil.ScaleArea(volumeUnscale / totalBarLengthUnscale);\r\n\r\n               int numberOfBarPositions = GetNumberOfBarPositions(rebarItem);\r\n\r\n               string steelGrade = NamingUtil.GetOverrideStringValue(rebarElement, \"SteelGrade\", null);\r\n\r\n               Element rebarElementType = rebarElement.Document.GetElement(rebarElement.GetTypeId());\r\n\r\n               // Note that \"BarRole\" is now obsoleted by the built-in IFC_EXPORT_PREDEFINEDTYPE\r\n               // parameter.  But we haven't done an upgrade for this, so we will still check it.\r\n               string predefinedType = NamingUtil.GetOverrideStringValue(rebarElement, \"BarRole\", null);\r\n               if (string.IsNullOrWhiteSpace(predefinedType))\r\n                  predefinedType = ExporterUtil.GetExportTypeFromTypeParameter(rebarElement, rebarElementType);\r\n               IFCReinforcingBarRole role = GetReinforcingBarRole(predefinedType);\r\n\r\n               string origRebarName = NamingUtil.GetNameOverride(rebarElement, NamingUtil.GetIFCName(rebarElement));\r\n\r\n               const int maxBarGUIDS = IFCReinforcingBarSubElements.BarEnd - IFCReinforcingBarSubElements.BarStart + 1;\r\n               ElementId categoryId = CategoryUtil.GetSafeCategoryId(rebarElement);\r\n\r\n               IFCAnyHandle originalPlacement = setter.LocalPlacement;\r\n\r\n               // Potential issue : totalBarLength has a rounded value but individual lengths (from centerlines) do not have rounded values.\r\n               // Also dividing a rounded totalBarLength does not result in barLength rounded by the same round value.\r\n               double barLength = totalBarLength / rebarQuantity;\r\n               IList<Curve> baseCurves = GetRebarCenterlineCurves(rebarItem, true, false, false, MultiplanarOption.IncludeAllMultiplanarCurves);\r\n\r\n               ElementId barLengthParamId = new ElementId(BuiltInParameter.REBAR_ELEM_LENGTH);\r\n               ParameterSet rebarElementParams = rebarElement.Parameters;\r\n\r\n               Rebar rebar = rebarElement as Rebar;\r\n               RebarInSystem rebarInSystem = rebarElement as RebarInSystem;\r\n\r\n               HashSet<IFCAnyHandle> bodyItems = new HashSet<IFCAnyHandle>() { };\r\n               string rebarName = null;\r\n               bool bExportAsSingleIFCEntity = false;\r\n\r\n               if ((!ExporterCacheManager.ExportOptionsCache.ExportBarsInUniformSetsAsSeparateIFCEntities) &&\r\n               ((rebar != null && !rebar.HasVariableLengthBars) || rebarInSystem != null))\r\n                  bExportAsSingleIFCEntity = true;\r\n\r\n               for (int ii = 0; ii < numberOfBarPositions; ii++)\r\n               {\r\n                  if (!DoesBarExistAtPosition(rebarItem, ii))\r\n                     continue;\r\n\r\n                  if (rebar != null && rebar.CanHaveVaryingLengthBars)\r\n                  {\r\n                     baseCurves = GetRebarCenterlineCurves(rebar, true, false, false, MultiplanarOption.IncludeAllMultiplanarCurves, ii);\r\n                     DoubleParameterValue barLengthParamVal = rebar.GetParameterValueAtIndex(barLengthParamId, ii) as DoubleParameterValue;\r\n                     if (barLengthParamVal != null)\r\n                        barLength = barLengthParamVal.Value;\r\n                  }\r\n\r\n                  string rebarNameFormated = origRebarName;\r\n                  if (rebar != null && rebar.CanBeMatchedWithMultipleShapes())\r\n                  {\r\n                     string shapeName = GetShapeNameAtIndex(rebar, ii);\r\n                     string elementName = rebar.Name;\r\n                     if (!elementName.Contains(shapeName))\r\n                     {\r\n                        // this means that our rebar is a free form bent with varying shapes. We want to have in its name \"Shape xx\"\r\n                        shapeName = Resources.Shape + \" \" + shapeName; // This is something like - \"Shape 00\" or \"Shape 17\"\r\n                        string formatedString = elementName + \" : \" + shapeName;\r\n                        rebarNameFormated = origRebarName.Replace(elementName, formatedString);\r\n                     }\r\n                  }\r\n\r\n                  int indexForNamingAndGUID = ii + itemIndex;\r\n\r\n                  if (!bExportAsSingleIFCEntity)\r\n                     rebarName = NamingUtil.GetNameOverride(rebarElement, rebarNameFormated + \": \" + indexForNamingAndGUID);\r\n                  else\r\n                     rebarName = NamingUtil.GetNameOverride(rebarElement, rebarNameFormated);\r\n\r\n                 Transform barTrf = GetBarPositionTransform(rebarItem, ii);\r\n\r\n                  IList<Curve> curves = new List<Curve>();\r\n                  double endParam = 0.0;\r\n                  foreach (Curve baseCurve in baseCurves)\r\n                  {\r\n                     if (baseCurve is Arc || baseCurve is Ellipse)\r\n                     {\r\n                        if (baseCurve.IsBound)\r\n                           endParam += UnitUtil.ScaleAngle(baseCurve.GetEndParameter(1) - baseCurve.GetEndParameter(0));\r\n                        else\r\n                           endParam += UnitUtil.ScaleAngle(2 * Math.PI);\r\n                     }\r\n                     else\r\n                        endParam += 1.0;\r\n\r\n                     if (barTrf.IsConformal)\r\n                     {\r\n                        curves.Add(baseCurve.CreateTransformed(barTrf));\r\n                     }\r\n                     else\r\n                     {\r\n                        // There are cases where the Rebar API returns slightly non-conformal\r\n                        // transforms that cause an exception in CreateTransformed above.  Until\r\n                        // that API is improved, we will do our own non-conformal transformation\r\n                        // if possible.\r\n                        Curve curve = ApplyNonConformalTransformIfPossible(baseCurve, barTrf);\r\n                        if (curve == null)\r\n                           throw new InvalidOperationException(\"Couldn't transform rebar curve.\");\r\n                        \r\n                        curves.Add(curve);\r\n                     }\r\n                  }\r\n\r\n                  // For IFC4 and Structural Exchange Requirement export, Entity type not allowed for RV: IfcPolyline\r\n                  IFCAnyHandle compositeCurve = GeometryUtil.CreateCompositeOrIndexedCurve(exporterIFC, curves, null, null);\r\n                  IFCAnyHandle sweptDiskSolid = IFCInstanceExporter.CreateSweptDiskSolid(file, compositeCurve, modelDiameter / 2, null, 0, endParam);\r\n                  RepresentationUtil.CreateStyledItemAndAssign(file, rebarElement.Document, materialId, sweptDiskSolid);\r\n\r\n                  if (!bExportAsSingleIFCEntity)\r\n                     bodyItems = new HashSet<IFCAnyHandle>() { sweptDiskSolid };\r\n                  else\r\n                     bodyItems.Add(sweptDiskSolid);\r\n\r\n                  //for uniform sets we export only after we have all solids\r\n                  if (!bExportAsSingleIFCEntity || (bExportAsSingleIFCEntity && bodyItems.Count == rebarQuantity))\r\n                  {\r\n                     IFCAnyHandle contextOfItems = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Body);\r\n                     IFCAnyHandle shapeRep = RepresentationUtil.CreateAdvancedSweptSolidRep(exporterIFC,\r\n                        rebarElement, categoryId, contextOfItems, bodyItems, null);\r\n                     IList<IFCAnyHandle> shapeReps = new List<IFCAnyHandle>() { shapeRep };\r\n                     prodRep = IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, shapeReps);\r\n\r\n                     IFCAnyHandle copyLevelPlacement = (ii == 0 || bExportAsSingleIFCEntity) ? originalPlacement : ExporterUtil.CopyLocalPlacement(file, originalPlacement);\r\n\r\n                     string rebarGUID = (indexForNamingAndGUID < maxBarGUIDS) ?\r\n                         GUIDUtil.CreateSubElementGUID(rebarElement, indexForNamingAndGUID + (int)IFCReinforcingBarSubElements.BarStart - 1) :\r\n                         GUIDUtil.GenerateIFCGuidFrom(\r\n                            GUIDUtil.CreateGUIDString(rebarElement, indexForNamingAndGUID.ToString()));\r\n                     IFCAnyHandle elemHnd = IFCInstanceExporter.CreateReinforcingBar(exporterIFC, rebarElement, rebarGUID, ExporterCacheManager.OwnerHistoryHandle,\r\n                        copyLevelPlacement, prodRep, steelGrade, longitudinalBarNominalDiameter, longitudinalBarCrossSectionArea, barLength, role, null);\r\n                     IFCAnyHandleUtil.OverrideNameAttribute(elemHnd, rebarName);\r\n                     IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcReinforcingBar);\r\n\r\n                     // We will not add the element to the productWrapper here, but instead in the function that calls\r\n                     // ExportRebar.  The reason for this is that we don't currently know if the handles such be associated\r\n                     // to the level or not, depending on whether they will or won't be grouped.\r\n                     createdRebars.Add(new DelayedProductWrapper(rebarElement, elemHnd, setter.LevelInfo, exportInfo));\r\n\r\n                     CacheSubelementParameterValues(rebarElement, rebarElementParams, ii, elemHnd);\r\n\r\n                     ExporterCacheManager.HandleToElementCache.Register(elemHnd, rebarElement.Id);\r\n                     CategoryUtil.CreateMaterialAssociation(exporterIFC, elemHnd, materialId);\r\n\r\n                     IFCAnyHandle typeHnd = ExporterUtil.CreateGenericTypeFromElement(rebarElement,\r\n                        exportInfo, file, productWrapper);\r\n                     if (!IFCAnyHandleUtil.IsNullOrHasNoValue(typeHnd))\r\n                     {\r\n                        ExporterCacheManager.TypeRelationsCache.Add(typeHnd, elemHnd);\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n            transaction.Commit();\r\n         }\r\n         return createdRebars;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a Rebar to IFC ReinforcingBar.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"rebarElement\">The rebar to be exported.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <returns>The list of IfcReinforcingBar handles created.</returns>\r\n      private static ISet<DelayedProductWrapper> ExportRebar(ExporterIFC exporterIFC, Element rebarElement, ProductWrapper productWrapper)\r\n      {\r\n         return ExportRebar(exporterIFC, rebarElement, rebarElement, 1, productWrapper);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets total length of a rebar.\r\n      /// </summary>\r\n      /// <param name=\"element\">The rebar element.</param>\r\n      /// <returns>The length.</returns>\r\n      static double GetRebarTotalLength(object element)\r\n      {\r\n         if (element is Rebar)\r\n         {\r\n            return (element as Rebar).TotalLength;\r\n         }\r\n         else if (element is RebarInSystem)\r\n         {\r\n            return (element as RebarInSystem).TotalLength;\r\n         }\r\n         else if (element is RebarContainerItem)\r\n         {\r\n            return (element as RebarContainerItem).TotalLength;\r\n         }\r\n         else\r\n            throw new ArgumentException(\"Not a rebar.\");\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Gets volume of a rebar.\r\n      /// </summary>\r\n      /// <param name=\"element\">The rebar element.</param>\r\n      /// <returns>The volume.</returns>\r\n      static double GetRebarVolume(object element)\r\n      {\r\n         if (element is Rebar)\r\n         {\r\n            return (element as Rebar).Volume;\r\n         }\r\n         else if (element is RebarInSystem)\r\n         {\r\n            return (element as RebarInSystem).Volume;\r\n         }\r\n         else if (element is RebarContainerItem)\r\n         {\r\n            return (element as RebarContainerItem).Volume;\r\n         }\r\n         else\r\n            throw new ArgumentException(\"Not a rebar.\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets quantity of a rebar.\r\n      /// </summary>\r\n      /// <param name=\"element\">The rebar element.</param>\r\n      /// <returns>The number.</returns>\r\n      static int GetRebarQuantity(object element)\r\n      {\r\n         if (element is Rebar)\r\n         {\r\n            return (element as Rebar).Quantity;\r\n         }\r\n         else if (element is RebarInSystem)\r\n         {\r\n            return (element as RebarInSystem).Quantity;\r\n         }\r\n         else if (element is RebarContainerItem)\r\n         {\r\n            return (element as RebarContainerItem).Quantity;\r\n         }\r\n         else\r\n            throw new ArgumentException(\"Not a rebar.\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets center line curves of a rebar.\r\n      /// </summary>\r\n      /// <param name=\"element\">The rebar element.</param>\r\n      /// <param name=\"adjustForSelfIntersection\">Identifies if curves should be adjusted to avoid intersection.</param>\r\n      /// <param name=\"suppressHooks\">Identifies if the chain will include hooks curves.</param>\r\n      /// <param name=\"suppressBendRadius\">Identifies if the connected chain will include unfilled curves.</param>\r\n      /// <returns></returns>\r\n      static IList<Curve> GetRebarCenterlineCurves(object element, bool adjustForSelfIntersection, bool suppressHooks, bool suppressBendRadius,\r\n        MultiplanarOption multiplanarOption = MultiplanarOption.IncludeOnlyPlanarCurves, int barPositionIndex = 0)\r\n      {\r\n         if (element is Rebar)\r\n         {\r\n            return (element as Rebar).GetCenterlineCurves(adjustForSelfIntersection, suppressHooks, suppressBendRadius, multiplanarOption, barPositionIndex);\r\n         }\r\n         else if (element is RebarInSystem)\r\n         {\r\n            return (element as RebarInSystem).GetCenterlineCurves(adjustForSelfIntersection, suppressHooks, suppressBendRadius);\r\n         }\r\n         else if (element is RebarContainerItem)\r\n         {\r\n            return (element as RebarContainerItem).GetCenterlineCurves(adjustForSelfIntersection, suppressHooks, suppressBendRadius);\r\n         }\r\n         else\r\n            throw new ArgumentException(\"Not a rebar.\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets number of rebar positions.\r\n      /// </summary>\r\n      /// <param name=\"element\">The rebar element.</param>\r\n      /// <returns>The number.</returns>\r\n      static int GetNumberOfBarPositions(object element)\r\n      {\r\n         if (element is Rebar)\r\n         {\r\n            return (element as Rebar).NumberOfBarPositions;\r\n         }\r\n         else if (element is RebarInSystem)\r\n         {\r\n            return (element as RebarInSystem).NumberOfBarPositions;\r\n         }\r\n         else if (element is RebarContainerItem)\r\n         {\r\n            return (element as RebarContainerItem).NumberOfBarPositions;\r\n         }\r\n         else\r\n            throw new ArgumentException(\"Not a rebar.\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if rebar exists at a certain position.\r\n      /// </summary>\r\n      /// <param name=\"element\">The rebar element.</param>\r\n      /// <param name=\"barPosition\">The bar position.</param>\r\n      /// <returns>True if it exists.</returns>\r\n      static bool DoesBarExistAtPosition(object element, int barPosition)\r\n      {\r\n         if (element is Rebar)\r\n         {\r\n            return (element as Rebar).DoesBarExistAtPosition(barPosition);\r\n         }\r\n         else if (element is RebarInSystem)\r\n         {\r\n            return (element as RebarInSystem).DoesBarExistAtPosition(barPosition);\r\n         }\r\n         else if (element is RebarContainerItem)\r\n         {\r\n            return (element as RebarContainerItem).DoesBarExistAtPosition(barPosition);\r\n         }\r\n         else\r\n            throw new ArgumentException(\"Not a rebar.\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets bar position transform.\r\n      /// </summary>\r\n      /// <param name=\"element\">The rebar element.</param>\r\n      /// <param name=\"barPositionIndex\">The bar position.</param>\r\n      /// <returns>The transform.</returns>\r\n      static Transform GetBarPositionTransform(object element, int barPositionIndex)\r\n      {\r\n         if (element is Rebar)\r\n         {\r\n            Rebar rebar = element as Rebar;\r\n            Transform movedBarTransform = rebar.GetMovedBarTransform(barPositionIndex);\r\n            if (rebar.IsRebarFreeForm())\r\n            {\r\n               return movedBarTransform;\r\n            }\r\n            else\r\n            {\r\n               // shape driven\r\n               Transform barPosTrf = rebar.GetShapeDrivenAccessor().GetBarPositionTransform(barPositionIndex);\r\n               Transform entireTrf = movedBarTransform.Multiply(barPosTrf);\r\n               return entireTrf;\r\n            }\r\n         }\r\n         else if (element is RebarInSystem)\r\n         {\r\n            RebarInSystem rebarInSystem = element as RebarInSystem;\r\n            Transform barPosTrf = rebarInSystem.GetBarPositionTransform(barPositionIndex);\r\n            Transform movedBarTrf = rebarInSystem.GetMovedBarTransform(barPositionIndex);\r\n            Transform entireTrf = movedBarTrf.Multiply(barPosTrf);\r\n            return entireTrf;\r\n         }\r\n         else if (element is RebarContainerItem)\r\n         {\r\n            return (element as RebarContainerItem).GetBarPositionTransform(barPositionIndex);\r\n         }\r\n         else\r\n            throw new ArgumentException(\"Not a rebar.\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the bar diameters (model and nominal) from the rebar object.\r\n      /// </summary>\r\n      /// <param name=\"element\">The rebar object.</param>\r\n      /// <out param name=\"nominalDiameter\">The nominal diameter.</param>\r\n      /// <out param name=\"modelDiameter\">The model diameter</param>\r\n      static void GetBarDiameters(object element, out double nominalDiameter, out double modelDiameter)\r\n      {\r\n         nominalDiameter = 0.0;\r\n         modelDiameter = 0.0;\r\n\r\n         if (element is RebarContainerItem)\r\n         {\r\n            RebarBendData bendData = (element as RebarContainerItem).GetBendData();\r\n            if (bendData != null)\r\n            {\r\n               nominalDiameter = UnitUtil.ScaleLength(bendData.BarNominalDiameter);\r\n               modelDiameter = UnitUtil.ScaleLength(bendData.BarModelDiameter);\r\n            }\r\n         }\r\n         else if (element is Element)\r\n         {\r\n            Element rebarElement = element as Element;\r\n            Document doc = rebarElement.Document;\r\n            ElementId typeId = rebarElement.GetTypeId();\r\n            RebarBarType elementType = doc.GetElement(rebarElement.GetTypeId()) as RebarBarType;\r\n            if (elementType != null)\r\n            {\r\n               nominalDiameter = UnitUtil.ScaleLength(elementType.BarNominalDiameter);\r\n               modelDiameter = UnitUtil.ScaleLength(elementType.BarModelDiameter);\r\n            }\r\n         }\r\n\r\n         if (nominalDiameter < MathUtil.Eps())\r\n            nominalDiameter = UnitUtil.ScaleLength(1.0 / 12.0);\r\n\r\n         if (modelDiameter < MathUtil.Eps())\r\n            modelDiameter = UnitUtil.ScaleLength(1.0 / 12.0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Caches all parameter value overrides of the subelement.\r\n      /// </summary>\r\n      /// <param name=\"element\">The rebar element.</param>\r\n      /// <param name=\"parameters\">The paramters of the rebar element.</param>\r\n      /// <param name=\"barIndex\">The index of the subelement.</param>\r\n      /// <param name=\"handleSubelement\">The handle of the subelement.</param>\r\n      static void CacheSubelementParameterValues(Element element, ParameterSet parameters, int barIndex, IFCAnyHandle handleSubelement)\r\n      {\r\n         if (element == null)\r\n            return;\r\n\r\n         if (element is Rebar)\r\n         {\r\n            Rebar rebar = element as Rebar;\r\n            if (!rebar.CanHaveVaryingLengthBars)\r\n               return;\r\n\r\n            foreach (Parameter param in parameters)\r\n               ParameterUtil.CacheParameterValuesForSubelementHandle(element.Id, handleSubelement, param, rebar.GetParameterValueAtIndex(param.Id, barIndex));\r\n         }\r\n      }\r\n\r\n      static public string GetShapeNameAtIndex(Rebar rebar, int barPositionIndex)\r\n      {\r\n         string shapeName = \"\";\r\n         if (rebar == null)\r\n            return shapeName;\r\n         RebarFreeFormAccessor accessor = rebar.GetFreeFormAccessor();\r\n         if (accessor == null)\r\n            return shapeName;\r\n         if (rebar.Document == null)\r\n            return shapeName;\r\n\r\n         ElementId idShape = accessor.GetShapeIdAtIndex(barPositionIndex);\r\n         RebarShape shape = rebar.Document.GetElement(idShape) as RebarShape;\r\n         if (shape == null)\r\n            return shapeName;\r\n         shapeName = shape.Name;\r\n         return shapeName;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/RoofExporter.cs",
    "content": "//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing System.Linq;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export Roof elements.\r\n   /// </summary>\r\n   class RoofExporter\r\n   {\r\n      const string slabRoofPredefinedType = \"ROOF\";\r\n\r\n      /// <summary>\r\n      /// Exports a roof to IfcRoof.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"roof\">The roof element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static IFCAnyHandle ExportRoof(ExporterIFC exporterIFC, Element roof, ref GeometryElement geometryElement,\r\n          ProductWrapper productWrapper)\r\n      {\r\n         if (roof == null || geometryElement == null)\r\n            return null;\r\n\r\n         bool exportRoofAsSingleGeometry = ExporterCacheManager.ExportOptionsCache.ExportHostAsSingleEntity ||\r\n            (productWrapper != null &&\r\n            !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 &&\r\n            IFCAnyHandleUtil.IsNullOrHasNoValue(productWrapper.GetAnElement()));\r\n\r\n         string ifcEnumType;\r\n         IFCExportInfoPair roofExportType = ExporterUtil.GetProductExportType(roof, out ifcEnumType);\r\n         if (roofExportType.IsUnKnown)\r\n         {\r\n            roofExportType = new IFCExportInfoPair(IFCEntityType.IfcRoof, \"\");\r\n         }\r\n\r\n         MaterialLayerSetInfo layersetInfo = new MaterialLayerSetInfo(exporterIFC, roof, productWrapper);\r\n         IFCFile file = exporterIFC.GetFile();\r\n         Document doc = roof.Document;\r\n\r\n         IFCAnyHandle roofHnd = null;\r\n         using (SubTransaction tempPartTransaction = new SubTransaction(doc))\r\n         {\r\n            // For IFC4RV export, Element will be split into its parts(temporarily) in order to export the wall by its parts\r\n            // If Parts are created by code and not by user then their name should be equal to Material name.\r\n            ExporterUtil.ExportPartAs exportPartAs = ExporterUtil.CanExportParts(roof);\r\n            bool exportParts = exportPartAs == ExporterUtil.ExportPartAs.Part && !exportRoofAsSingleGeometry;\r\n            bool exportByComponents = exportPartAs == ExporterUtil.ExportPartAs.ShapeAspect;\r\n            ExporterCacheManager.TemporaryPartsCache.SetPartExportType(roof.Id, exportPartAs);\r\n\r\n            using (IFCTransaction tr = new IFCTransaction(file))\r\n            {\r\n               using (PlacementSetter placementSetter = PlacementSetter.Create(exporterIFC, roof, null))\r\n               {\r\n                  using (IFCExportBodyParams ecData = new IFCExportBodyParams())\r\n                  {\r\n                     // If the roof is an in-place family, we will allow any arbitrary orientation.  While this may result in some\r\n                     // in-place \"cubes\" exporting with the wrong direction, it is unlikely that an in-place family would be\r\n                     // used for this reason in the first place.\r\n                     ecData.PossibleExtrusionAxes = (roof is FamilyInstance) ? IFCExtrusionAxes.TryXYZ : IFCExtrusionAxes.TryZ;\r\n                     ecData.AreInnerRegionsOpenings = true;\r\n                     ecData.SetLocalPlacement(placementSetter.LocalPlacement);\r\n\r\n                     ElementId categoryId = CategoryUtil.GetSafeCategoryId(roof);\r\n\r\n                     BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n                     BodyData bodyData = null;\r\n                     IFCAnyHandle prodRep = null;\r\n                     IList<IFCAnyHandle> representations = new List<IFCAnyHandle>();\r\n                     IList<ElementId> materialIds = new List<ElementId>();\r\n\r\n                     if (!exportByComponents)\r\n                     {\r\n                        prodRep = RepresentationUtil.CreateAppropriateProductDefinitionShape(exporterIFC, roof,\r\n                            categoryId, geometryElement, bodyExporterOptions, null, ecData, out bodyData, instanceGeometry: true);\r\n                        if (bodyData != null && bodyData.MaterialIds != null)\r\n                           materialIds = bodyData.MaterialIds;\r\n                        if (IFCAnyHandleUtil.IsNullOrHasNoValue(prodRep))\r\n                        {\r\n                           ecData.ClearOpenings();\r\n                           return null;\r\n                        }\r\n                     }\r\n\r\n                     bool exportSlab = ((ecData.ScaledLength > MathUtil.Eps() || exportByComponents) &&\r\n                        roofExportType.ExportInstance == IFCEntityType.IfcRoof && !exportRoofAsSingleGeometry);\r\n\r\n                     string guid = GUIDUtil.CreateGUID(roof);\r\n                     IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n                     IFCAnyHandle localPlacement = ecData.GetLocalPlacement();\r\n\r\n                     if (exportByComponents)\r\n                     {\r\n                        if (exportSlab || exportRoofAsSingleGeometry)\r\n                        {\r\n                           prodRep = RepresentationUtil.CreateProductDefinitionShapeWithoutBodyRep(exporterIFC, roof, categoryId, geometryElement, representations);\r\n                           IFCAnyHandle hostShapeRepFromParts = PartExporter.ExportHostPartAsShapeAspects(exporterIFC, \r\n                              roof, prodRep, ElementId.InvalidElementId, layersetInfo, ecData);\r\n                        }\r\n                        else\r\n                        {\r\n                           ecData.ClearOpenings();\r\n                           return null;\r\n                        }\r\n                     }\r\n\r\n                     roofHnd = IFCInstanceExporter.CreateGenericIFCEntity(roofExportType, file, roof, guid, \r\n                        ownerHistory, localPlacement, exportSlab ? null : prodRep);\r\n\r\n                     IFCAnyHandle typeHnd = ExporterUtil.CreateGenericTypeFromElement(roof,\r\n                        roofExportType, file, productWrapper);\r\n                     ExporterCacheManager.TypeRelationsCache.Add(typeHnd, roofHnd);\r\n\r\n                     productWrapper.AddElement(roof, roofHnd, placementSetter.LevelInfo, ecData, true, roofExportType);\r\n\r\n                     if (!(roof is RoofBase))\r\n                        CategoryUtil.CreateMaterialAssociation(exporterIFC, roof, roofHnd, materialIds);\r\n\r\n                     Transform offsetTransform = (bodyData != null) ? bodyData.OffsetTransform : Transform.Identity;\r\n\r\n                     if (exportSlab)\r\n                     {\r\n                        string slabGUID = GUIDUtil.CreateSubElementGUID(roof, (int)IFCRoofSubElements.RoofSlabStart);\r\n                        string slabName = IFCAnyHandleUtil.GetStringAttribute(roofHnd, \"Name\") + \":1\";\r\n\r\n                        IFCAnyHandle slabHnd = IFCInstanceExporter.CreateSlab(exporterIFC, roof, slabGUID, ownerHistory,\r\n                           ecData.GetLocalPlacement(), prodRep, slabRoofPredefinedType);\r\n                        IFCAnyHandleUtil.OverrideNameAttribute(slabHnd, slabName);\r\n\r\n                        OpeningUtil.CreateOpeningsIfNecessary(slabHnd, roof, ecData, offsetTransform,\r\n                            exporterIFC, ecData.GetLocalPlacement(), placementSetter, productWrapper);\r\n\r\n                        ExporterUtil.RelateObject(exporterIFC, roofHnd, slabHnd);\r\n                        IFCExportInfoPair slabRoofExportType = new IFCExportInfoPair(IFCEntityType.IfcSlab, slabRoofPredefinedType);\r\n\r\n                        productWrapper.AddElement(null, slabHnd, placementSetter.LevelInfo, ecData, false, slabRoofExportType);\r\n\r\n                        // Create type\r\n                        IFCAnyHandle slabRoofTypeHnd = ExporterUtil.CreateGenericTypeFromElement(roof, slabRoofExportType, exporterIFC.GetFile(), productWrapper);\r\n                        ExporterCacheManager.TypeRelationsCache.Add(slabRoofTypeHnd, slabHnd);\r\n\r\n                        ExporterUtil.AddIntoComplexPropertyCache(slabHnd, layersetInfo);\r\n                        // For earlier than IFC4 version of IFC export, the material association will be done at the Roof host level with MaterialSetUsage\r\n                        // This one is only for IFC4 and above\r\n                        if ((roof is RoofBase) && !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n                        {\r\n                           if (layersetInfo != null && !IFCAnyHandleUtil.IsNullOrHasNoValue(layersetInfo.MaterialLayerSetHandle))\r\n                           {\r\n                              CategoryUtil.CreateMaterialAssociation(slabHnd, layersetInfo.MaterialLayerSetHandle);\r\n                           }\r\n                           else if (bodyData != null)\r\n                           {\r\n                              CategoryUtil.CreateMaterialAssociation(exporterIFC, roof, slabHnd, bodyData.MaterialIds);\r\n                           }\r\n                        }\r\n                     }\r\n                     else\r\n                     {\r\n                        OpeningUtil.CreateOpeningsIfNecessary(roofHnd, roof, ecData, offsetTransform,\r\n                           exporterIFC, localPlacement, placementSetter, productWrapper);\r\n\r\n                        // For earlier than IFC4 version of IFC export, the material association will be done at the Roof host level with MaterialSetUsage\r\n                        // This one is only for IFC4 and above\r\n                        if ((roof is RoofBase) && !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n                        {\r\n                           if (layersetInfo != null && !IFCAnyHandleUtil.IsNullOrHasNoValue(layersetInfo.MaterialLayerSetHandle))\r\n                           {\r\n                              CategoryUtil.CreateMaterialAssociation(roofHnd, layersetInfo.MaterialLayerSetHandle);\r\n                           }\r\n                           else if (layersetInfo != null && layersetInfo.MaterialIds != null)\r\n                           {\r\n                              materialIds = layersetInfo.MaterialIds.Select(x => x.BaseMatId).ToList();\r\n                              CategoryUtil.CreateMaterialAssociation(exporterIFC, roof, roofHnd, materialIds);\r\n                           }\r\n                        }\r\n                     }\r\n                  }\r\n                  tr.Commit();\r\n               }\r\n            }\r\n         }\r\n\r\n         return roofHnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a roof element to the appropriate IFC entity.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"roof\">The roof element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void Export(ExporterIFC exporterIFC, RoofBase roof, ref GeometryElement geometryElement, \r\n         ProductWrapper productWrapper)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            // export parts or not\r\n            bool exportParts = PartExporter.CanExportParts(roof);\r\n            bool isCurtainRoof = CurtainSystemExporter.IsCurtainSystem(roof);\r\n\r\n            if (exportParts)\r\n            {\r\n               if (!PartExporter.CanExportElementInPartExport(roof, roof.LevelId, false))\r\n                  return;\r\n               ExportRoofAsParts(exporterIFC, roof, geometryElement, productWrapper); // Right now, only flat roof could have parts.\r\n            }\r\n            else if (isCurtainRoof)\r\n            {\r\n               CurtainSystemExporter.ExportCurtainRoof(exporterIFC, roof, productWrapper);\r\n            }\r\n            else\r\n            {\r\n               IFCExportInfoPair roofExportType = ExporterUtil.GetProductExportType(roof, out _);\r\n\r\n               IFCAnyHandle roofHnd = null;\r\n               if (roofExportType.ExportInstance != IFCEntityType.IfcRoof)\r\n               {\r\n                  roofHnd = ExportRoof(exporterIFC, roof, ref geometryElement, productWrapper);\r\n               }\r\n               else\r\n               {\r\n                  roofHnd = ExportRoofOrFloorAsContainer(exporterIFC, roof,\r\n                      geometryElement, productWrapper, roofExportType);\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(roofHnd))\r\n                  {\r\n                     roofHnd = ExportRoof(exporterIFC, roof, ref geometryElement, productWrapper);\r\n                  }\r\n               }\r\n\r\n               // call for host objects; curtain roofs excused from call (no material information)\r\n               if (!ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n                  HostObjectExporter.ExportHostObjectMaterials(exporterIFC, roof, roofHnd,\r\n                      geometryElement, productWrapper, ElementId.InvalidElementId, IFCLayerSetDirection.Axis3, null, null);\r\n            }\r\n            tr.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a roof or floor as a container of multiple roof slabs.  Returns the handle, \r\n      /// if successful.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"element\">The roof or floor element.</param>\r\n      /// <param name=\"geometry\">The geometry of the element.</param>\r\n      /// <param name=\"productWrapper\">The product wrapper.</param>\r\n      /// <param name=\"roofExportType\">The export intent for the element.</param>\r\n      /// <returns>The roof handle.</returns>\r\n      /// <remarks>For floors, if there is only one component, return null, as we do not want to \r\n      /// create a container.</remarks>\r\n      public static IFCAnyHandle ExportRoofOrFloorAsContainer(ExporterIFC exporterIFC, \r\n         Element element, GeometryElement geometry, ProductWrapper productWrapper, IFCExportInfoPair roofExportType)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         // We support ExtrusionRoofs, FootPrintRoofs, and Floors only.\r\n         bool elementIsRoof = (element is ExtrusionRoof) || (element is FootPrintRoof);\r\n         bool elementIsFloor = (element is Floor);\r\n         if (!elementIsRoof && !elementIsFloor)\r\n            return null;\r\n\r\n         if (roofExportType.IsUnKnown)\r\n         {\r\n            IFCEntityType elementClassTypeEnum = \r\n               elementIsFloor ? IFCEntityType.IfcSlab: IFCEntityType.IfcRoof;\r\n            roofExportType = new IFCExportInfoPair(elementClassTypeEnum, \"\");\r\n         }\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(roofExportType.ExportType))\r\n            return null;\r\n\r\n         Document doc = element.Document;\r\n         using (SubTransaction tempPartTransaction = new SubTransaction(doc))\r\n         {\r\n            using (IFCTransaction transaction = new IFCTransaction(file))\r\n            {\r\n               MaterialLayerSetInfo layersetInfo = new MaterialLayerSetInfo(exporterIFC, element, productWrapper);\r\n               bool hasLayers = (layersetInfo.MaterialIds.Count > 1);\r\n               bool exportByComponents = ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView && hasLayers;\r\n\r\n               // We want to delay creating entity handles until as late as possible, so that if we\r\n               // abort the IFC transaction, we don't have to delete elements.  This is both for\r\n               // performance reasons and to potentially extend the number of projects that can be\r\n               // exported by reducing (a small amount) of waste.\r\n               IList<HostObjectSubcomponentInfo> hostObjectSubcomponents = null;\r\n               try\r\n               {\r\n                  hostObjectSubcomponents = ExporterIFCUtils.ComputeSubcomponents(element as HostObject);\r\n                  if (hostObjectSubcomponents == null)\r\n                     return null;\r\n               }\r\n               catch\r\n               {\r\n                  return null;\r\n               }\r\n\r\n               bool createSubcomponents = !ExporterCacheManager.ExportOptionsCache.ExportHostAsSingleEntity;\r\n\r\n               int numSubcomponents = hostObjectSubcomponents.Count;\r\n               if (numSubcomponents == 0 || (elementIsFloor && numSubcomponents == 1))\r\n               {\r\n                  return null;\r\n               }\r\n\r\n               // TODO: If we find exactly 1 sub-component and we are exporting a floor, then we will\r\n               // continue, but with createSubcomponents set to false.\r\n               // if (createSubcomponents && elementIsFloor && numSubcomponents == 1) createSubcomponents = false;\r\n\r\n               using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, element, null))\r\n               {\r\n                  IFCAnyHandle localPlacement = setter.LocalPlacement;\r\n\r\n                  IFCAnyHandle hostObjectHandle = null;\r\n                  try\r\n                  {\r\n                     using (IFCExportBodyParams extrusionCreationData = new IFCExportBodyParams())\r\n                     {\r\n                        IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n                        extrusionCreationData.SetLocalPlacement(localPlacement);\r\n                        extrusionCreationData.ReuseLocalPlacement = true;\r\n\r\n                        using (TransformSetter trfSetter = TransformSetter.Create())\r\n                        {\r\n                           IList<GeometryObject> geometryList = new List<GeometryObject>() { geometry };\r\n                           trfSetter.InitializeFromBoundingBox(exporterIFC, geometryList, extrusionCreationData);\r\n\r\n                           // If element is floor, then the profile curve loop of hostObjectSubComponent is computed from the top face of the floor\r\n                           // else if element is roof, then the profile curve loop is taken from the bottom face of the roof instead \r\n                           XYZ extrusionDir = elementIsFloor ? -XYZ.BasisZ : XYZ.BasisZ;\r\n                           bool reverseMaterialList = !elementIsFloor;\r\n\r\n                           ElementId catId = CategoryUtil.GetSafeCategoryId(element);\r\n\r\n                           IList<IFCAnyHandle> slabHandles = new List<IFCAnyHandle>();\r\n\r\n                           IList<CurveLoop> hostObjectOpeningLoops = new List<CurveLoop>();\r\n                           double maximumScaledDepth = 0.0;\r\n\r\n                           int loopNum = 0;\r\n                           int subElementStart = elementIsRoof ? (int)IFCRoofSubElements.RoofSlabStart : (int)IFCSlabSubElements.SubSlabStart;\r\n\r\n                           // Figure out the appropriate slabExportType from the main handle.\r\n                           IFCExportInfoPair subInfoPair;\r\n                           switch (roofExportType.ExportInstance)\r\n                           {\r\n                              case IFCEntityType.IfcRoof:\r\n                                 subInfoPair = new IFCExportInfoPair(IFCEntityType.IfcSlab, \"Roof\");\r\n                                 break;\r\n                              case IFCEntityType.IfcSlab:\r\n                                 subInfoPair = roofExportType;\r\n                                 break;\r\n                              default:\r\n                                 subInfoPair = new IFCExportInfoPair(IFCEntityType.IfcBuildingElementPart);\r\n                                 break;\r\n                           }\r\n\r\n                           List<IFCAnyHandle> hostBodyItems = new List<IFCAnyHandle>();\r\n                           IFCAnyHandle contextOfItems = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Body);\r\n                           IList<IFCAnyHandle> elementHandles = new List<IFCAnyHandle>();\r\n\r\n                           foreach (HostObjectSubcomponentInfo hostObjectSubcomponent in hostObjectSubcomponents)\r\n                           {\r\n                              IFCExportBodyParams slabExtrusionCreationData = null;\r\n\r\n                              if (createSubcomponents)\r\n                              {\r\n                                 slabExtrusionCreationData = new IFCExportBodyParams();\r\n\r\n                                 slabExtrusionCreationData.SetLocalPlacement(extrusionCreationData.GetLocalPlacement());\r\n                                 slabExtrusionCreationData.ReuseLocalPlacement = false;\r\n                                 slabExtrusionCreationData.ForceOffset = true;\r\n\r\n                                 trfSetter.InitializeFromBoundingBox(exporterIFC, geometryList, slabExtrusionCreationData);\r\n                              }\r\n\r\n                              Plane plane = hostObjectSubcomponent.GetPlane();\r\n                              Transform lcs = GeometryUtil.CreateTransformFromPlane(plane);\r\n\r\n                              IList<CurveLoop> curveLoops = new List<CurveLoop>();\r\n                              CurveLoop slabCurveLoop = hostObjectSubcomponent.GetCurveLoop();\r\n                              curveLoops.Add(slabCurveLoop);\r\n\r\n                              double slope = Math.Abs(plane.Normal.Z);\r\n                              double scaledDepth = UnitUtil.ScaleLength(hostObjectSubcomponent.Depth);\r\n                              double scaledExtrusionDepth = scaledDepth * slope;\r\n                              IList<string> matLayerNames = new List<string>();\r\n\r\n                              // Create representation items based on the layers\r\n                              // Because in this case, the Roof components are not derived from Parts, but by \"splitting\" geometry part that can be extruded,\r\n                              //    the creation of the Items for IFC4RV will be different by using \"manual\" split based on the layer thickness\r\n                              IList<IFCAnyHandle> bodyItems = new List<IFCAnyHandle>();\r\n                              if (!exportByComponents)\r\n                              {\r\n                                 IFCAnyHandle itemShapeRep =\r\n                                    ExtrusionExporter.CreateExtrudedSolidFromCurveLoop(exporterIFC,\r\n                                    null, curveLoops, lcs, extrusionDir, scaledExtrusionDepth, false,\r\n                                    out IList<CurveLoop> validatedCurveLoops);\r\n                                 if (IFCAnyHandleUtil.IsNullOrHasNoValue(itemShapeRep))\r\n                                 {\r\n                                    productWrapper.ClearInternalHandleWrapperData(element);\r\n                                    if ((validatedCurveLoops?.Count ?? 0) == 0) continue;\r\n\r\n                                    return null;\r\n                                 }\r\n                                 ElementId matId = HostObjectExporter.GetFirstLayerMaterialId(element as HostObject);\r\n                                 BodyExporter.CreateSurfaceStyleForRepItem(exporterIFC,\r\n                                    element.Document, false, itemShapeRep, matId);\r\n                                 bodyItems.Add(itemShapeRep);\r\n                              }\r\n                              else\r\n                              {\r\n                                 IList<MaterialLayerSetInfo.MaterialInfo> materialIds = reverseMaterialList ?\r\n                                    layersetInfo.MaterialIds.Reverse<MaterialLayerSetInfo.MaterialInfo>().ToList() : layersetInfo.MaterialIds;\r\n\r\n                                 foreach (MaterialLayerSetInfo.MaterialInfo matLayerInfo in materialIds)\r\n                                 {\r\n                                    double itemExtrDepth = matLayerInfo.Width;\r\n                                    double scaledItemExtrDepth = UnitUtil.ScaleLength(itemExtrDepth) * slope;\r\n                                    IFCAnyHandle itemShapeRep = ExtrusionExporter.CreateExtrudedSolidFromCurveLoop(exporterIFC, null, curveLoops, lcs, extrusionDir, scaledItemExtrDepth, false, out _);\r\n                                    if (IFCAnyHandleUtil.IsNullOrHasNoValue(itemShapeRep))\r\n                                    {\r\n                                       productWrapper.ClearInternalHandleWrapperData(element);\r\n                                       return null;\r\n                                    }\r\n\r\n                                    BodyExporter.CreateSurfaceStyleForRepItem(exporterIFC, element.Document, false, itemShapeRep, matLayerInfo.BaseMatId);\r\n\r\n                                    bodyItems.Add(itemShapeRep);\r\n                                    matLayerNames.Add(matLayerInfo.LayerName);\r\n\r\n                                    XYZ offset = new XYZ(0, 0, itemExtrDepth * extrusionDir.Z);   // offset is calculated as extent in the direction of extrusion\r\n                                    lcs.Origin += offset;\r\n                                 }\r\n                              }\r\n\r\n                              if (createSubcomponents)\r\n                              {\r\n                                 IList<IFCAnyHandle> shapeReps = new List<IFCAnyHandle>\r\n                                 {\r\n                                    RepresentationUtil.CreateSweptSolidRep(exporterIFC, element,\r\n                                    catId, contextOfItems, bodyItems.ToHashSet(), null, null)\r\n                                 };\r\n\r\n                                 IFCAnyHandle prodDefShape =\r\n                                    IFCInstanceExporter.CreateProductDefinitionShape(file, null, null,\r\n                                    shapeReps);\r\n\r\n                                 if (exportByComponents)\r\n                                 {\r\n                                    string representationType = ShapeRepresentationType.SweptSolid.ToString();\r\n                                    int count = bodyItems.Count();\r\n                                    for (int ii = 0; ii < count; ii++)\r\n                                    {\r\n                                       RepresentationUtil.CreateRepForShapeAspect(exporterIFC, element,\r\n                                          prodDefShape, representationType, matLayerNames[ii],\r\n                                          bodyItems[ii]);\r\n                                    }\r\n                                 }\r\n\r\n                                 // We could replace the code below to just use the newer, and better, \r\n                                 // GenerateIFCGuidFrom.  The code below maintains compatibility with older\r\n                                 // versions while generating a stable GUID for all slabs (in the unlikely\r\n                                 // case that we have more than 255 of them).\r\n                                 string slabGUID = (loopNum < 256) ?\r\n                                    GUIDUtil.CreateSubElementGUID(element, subElementStart + loopNum) :\r\n                                    GUIDUtil.GenerateIFCGuidFrom(\r\n                                       GUIDUtil.CreateGUIDString(element, \"Slab: \" + loopNum.ToString()));\r\n\r\n                                 IFCAnyHandle slabPlacement = ExporterUtil.CreateLocalPlacement(file, slabExtrusionCreationData.GetLocalPlacement(), null);\r\n                                 IFCAnyHandle slabHnd = IFCInstanceExporter.CreateGenericIFCEntity(\r\n                                    subInfoPair, file, element, slabGUID, ownerHistory,\r\n                                    slabPlacement, prodDefShape);\r\n\r\n                                 //slab quantities\r\n                                 slabExtrusionCreationData.ScaledLength = scaledExtrusionDepth;\r\n                                 slabExtrusionCreationData.ScaledArea = UnitUtil.ScaleArea(UnitUtil.ScaleArea(hostObjectSubcomponent.AreaOfCurveLoop));\r\n                                 slabExtrusionCreationData.ScaledOuterPerimeter = UnitUtil.ScaleLength(curveLoops[0].GetExactLength());\r\n                                 slabExtrusionCreationData.Slope = UnitUtil.ScaleAngle(MathUtil.SafeAcos(Math.Abs(slope)));\r\n\r\n                                 if (ExporterCacheManager.ExportIFCBaseQuantities())\r\n                                    PropertyUtil.CreateSlabBaseQuantities(exporterIFC, slabHnd, slabExtrusionCreationData, curveLoops[0]);\r\n\r\n                                 productWrapper.AddElement(null, slabHnd, setter, slabExtrusionCreationData, false, roofExportType);\r\n\r\n                                 // Create type\r\n                                 IFCAnyHandle slabRoofTypeHnd = ExporterUtil.CreateGenericTypeFromElement(element,\r\n                                    subInfoPair, exporterIFC.GetFile(), productWrapper);\r\n                                 ExporterCacheManager.TypeRelationsCache.Add(slabRoofTypeHnd, slabHnd);\r\n\r\n                                 elementHandles.Add(slabHnd);\r\n                                 slabHandles.Add(slabHnd);\r\n\r\n                                 hostObjectOpeningLoops.Add(slabCurveLoop);\r\n                                 maximumScaledDepth = Math.Max(maximumScaledDepth, scaledDepth);\r\n                                 loopNum++;\r\n\r\n                                 ExporterUtil.AddIntoComplexPropertyCache(slabHnd, layersetInfo);\r\n\r\n                                 // Create material association here\r\n                                 if (layersetInfo != null && !IFCAnyHandleUtil.IsNullOrHasNoValue(layersetInfo.MaterialLayerSetHandle))\r\n                                 {\r\n                                    CategoryUtil.CreateMaterialAssociation(slabHnd, layersetInfo.MaterialLayerSetHandle);\r\n                                 }\r\n                              }\r\n                              else\r\n                              {\r\n                                 hostBodyItems.AddRange(bodyItems);\r\n                              }\r\n                           }\r\n\r\n                           IFCAnyHandle hostProdDefShape = null;\r\n                           if (hostBodyItems.Count() > 0)\r\n                           {\r\n                              IList<IFCAnyHandle> shapeReps = new List<IFCAnyHandle>\r\n                              {\r\n                                 RepresentationUtil.CreateSweptSolidRep(exporterIFC, element,\r\n                                    catId, contextOfItems, hostBodyItems.ToHashSet(), null, null)\r\n                              };\r\n\r\n                              hostProdDefShape = IFCInstanceExporter.CreateProductDefinitionShape(\r\n                                 file, null, null, shapeReps);\r\n                           }\r\n\r\n                           string elementGUID = GUIDUtil.CreateGUID(element);\r\n\r\n                           hostObjectHandle = IFCInstanceExporter.CreateGenericIFCEntity(\r\n                              roofExportType, file, element, elementGUID, ownerHistory,\r\n                              localPlacement, hostProdDefShape);\r\n\r\n                           elementHandles.Add(hostObjectHandle);\r\n\r\n                           productWrapper.AddElement(element, hostObjectHandle, setter, extrusionCreationData, true, roofExportType);\r\n\r\n                           if ((slabHandles?.Count ?? 0) > 0)\r\n                           {\r\n                              ExporterUtil.RelateObjects(exporterIFC, null, hostObjectHandle, slabHandles);\r\n                           }\r\n\r\n                           int noOpening = OpeningUtil.AddOpeningsToElement(exporterIFC, elementHandles, hostObjectOpeningLoops, element, null, maximumScaledDepth,\r\n                               null, setter, localPlacement, productWrapper);\r\n\r\n                           transaction.Commit();\r\n                           return hostObjectHandle;\r\n                        }\r\n                     }\r\n                  }\r\n                  catch\r\n                  {\r\n                     // Something wrong with the above process, unable to create the\r\n                     // extrusion data. Reset any internal handles that may have been\r\n                     // partially created since they are not committed.\r\n                     // TODO: Clear out any created GUIDs, since doing an alternate approach\r\n                     // will result in incorrect \"reuse\" of GUIDs.\r\n                     productWrapper.ClearInternalHandleWrapperData(element);\r\n                     return null;\r\n                  }\r\n                  finally\r\n                  {\r\n                     exporterIFC.ClearFaceWithElementHandleMap();\r\n                  }\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export the roof to IfcRoof containing its parts.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The roof element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportRoofAsParts(ExporterIFC exporterIFC, Element element, GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         string ifcEnumType;\r\n         IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(element, out ifcEnumType);\r\n         if (exportType.IsUnKnown)\r\n            exportType = new IFCExportInfoPair(IFCEntityType.IfcRoof);\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(exportType.ExportType))\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         using (IFCTransaction transaction = new IFCTransaction(file))\r\n         {\r\n            using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, element, null))\r\n            {\r\n               IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n               IFCAnyHandle localPlacement = setter.LocalPlacement;\r\n\r\n               IFCAnyHandle prodRepHnd = null;\r\n\r\n               string elementGUID = GUIDUtil.CreateGUID(element);\r\n\r\n               IFCAnyHandle roofHandle = IFCInstanceExporter.CreateGenericIFCEntity(\r\n                  exportType, file, \r\n                  element, elementGUID, ownerHistory,\r\n                  localPlacement, prodRepHnd);\r\n               \r\n               // Export the parts\r\n               PartExporter.ExportHostPart(exporterIFC, element, roofHandle, setter, localPlacement, null);\r\n\r\n               productWrapper.AddElement(element, roofHandle, setter, null, true, exportType);\r\n\r\n               transaction.Commit();\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets IFCRoofType from roof type name.\r\n      /// </summary>\r\n      /// <param name=\"roofTypeName\">The roof type name.</param>\r\n      /// <returns>The IFCRoofType.</returns>\r\n      public static string GetIFCRoofType(string roofTypeName)\r\n      {\r\n         string typeName = NamingUtil.RemoveSpacesAndUnderscores(roofTypeName);\r\n\r\n         if (string.Compare(typeName, \"ROOFTYPEENUM\", true) == 0 ||\r\n             string.Compare(typeName, \"ROOFTYPEENUMFREEFORM\", true) == 0)\r\n            return \"FREEFORM\";\r\n         if (string.Compare(typeName, \"FLAT\", true) == 0 ||\r\n             string.Compare(typeName, \"FLATROOF\", true) == 0)\r\n            return \"FLAT_ROOF\";\r\n         if (string.Compare(typeName, \"SHED\", true) == 0 ||\r\n             string.Compare(typeName, \"SHEDROOF\", true) == 0)\r\n            return \"SHED_ROOF\";\r\n         if (string.Compare(typeName, \"GABLE\", true) == 0 ||\r\n             string.Compare(typeName, \"GABLEROOF\", true) == 0)\r\n            return \"GABLE_ROOF\";\r\n         if (string.Compare(typeName, \"HIP\", true) == 0 ||\r\n             string.Compare(typeName, \"HIPROOF\", true) == 0)\r\n            return \"HIP_ROOF\";\r\n         if (string.Compare(typeName, \"HIPPED_GABLE\", true) == 0 ||\r\n             string.Compare(typeName, \"HIPPED_GABLEROOF\", true) == 0)\r\n            return \"HIPPED_GABLE_ROOF\";\r\n         if (string.Compare(typeName, \"MANSARD\", true) == 0 ||\r\n             string.Compare(typeName, \"MANSARDROOF\", true) == 0)\r\n            return \"MANSARD_ROOF\";\r\n         if (string.Compare(typeName, \"BARREL\", true) == 0 ||\r\n             string.Compare(typeName, \"BARRELROOF\", true) == 0)\r\n            return \"BARREL_ROOF\";\r\n         if (string.Compare(typeName, \"BUTTERFLY\", true) == 0 ||\r\n             string.Compare(typeName, \"BUTTERFLYROOF\", true) == 0)\r\n            return \"BUTTERFLY_ROOF\";\r\n         if (string.Compare(typeName, \"PAVILION\", true) == 0 ||\r\n             string.Compare(typeName, \"PAVILIONROOF\", true) == 0)\r\n            return \"PAVILION_ROOF\";\r\n         if (string.Compare(typeName, \"DOME\", true) == 0 ||\r\n             string.Compare(typeName, \"DOMEROOF\", true) == 0)\r\n            return \"DOME_ROOF\";\r\n\r\n         return typeName;        //return unchanged. Validation for ENUM will be done later specific to schema version\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/SiteExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Architecture;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export sites.\r\n   /// </summary>\r\n   class SiteExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports topography surface as IFC site object.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"topoSurface\">The TopographySurface object.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportTopographySurface(ExporterIFC exporterIFC, TopographySurface topoSurface, GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         // Skip if the element is already processed and the Site has been created before\r\n         if (ExporterCacheManager.SiteExportInfo.IsSiteExported() && !IFCAnyHandleUtil.IsNullOrHasNoValue(ExporterCacheManager.ElementToHandleCache.Find(topoSurface.Id)))\r\n            return;\r\n\r\n         string ifcEnumType;\r\n         IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(topoSurface, out ifcEnumType);\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         Common.Enums.IFCEntityType elementClassTypeEnum;\r\n\r\n         if (Enum.TryParse<Common.Enums.IFCEntityType>(exportType.ExportInstance.ToString(), out elementClassTypeEnum)\r\n               || Enum.TryParse<Common.Enums.IFCEntityType>(exportType.ExportType.ToString(), out elementClassTypeEnum))\r\n         {\r\n            if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n               return;\r\n\r\n            if (elementClassTypeEnum == Common.Enums.IFCEntityType.IfcSite)\r\n               ExportSiteBase(exporterIFC, topoSurface.Document, topoSurface, geometryElement, productWrapper);\r\n            else\r\n            {\r\n               // Export Default Site first before exporting the TopographySurface as a generic element\r\n               ExportDefaultSite(exporterIFC, topoSurface.Document, productWrapper);\r\n               using (ProductWrapper genElemProductWrapper = ProductWrapper.Create(exporterIFC, true))\r\n               {\r\n                  GenericElementExporter.ExportSimpleGenericElement(exporterIFC, topoSurface, geometryElement, genElemProductWrapper, exportType);\r\n                  ExporterUtil.ExportRelatedProperties(exporterIFC, topoSurface, genElemProductWrapper);\r\n               }\r\n               productWrapper.ClearInternalHandleWrapperData(topoSurface.Document.ProjectInformation);\r\n            }\r\n         }\r\n         else\r\n            ExportSiteBase(exporterIFC, null, topoSurface, geometryElement, productWrapper);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gives Revit the capability to export one Element (such as a Floor) as the \"main\" IfcSite.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">IFC Exporter Object controlling export.</param>\r\n      /// <param name=\"element\">Which Element that will be exported as an IfcSite.</param>\r\n      /// <param name=\"geometryElement\">Geometry for the main IfcSite.</param>\r\n      /// <param name=\"productWrapper\">Wraps the product if needed.</param>\r\n      /// <returns>True if element exported as an IfcSite, False otherwise.</returns>\r\n      public static bool ExportGenericElementAsSite(ExporterIFC exporterIFC, Element element, GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         if ((element == null) || !ExporterCacheManager.SiteExportInfo.IsPotentialSiteElementId(element.Id))\r\n            return false;\r\n\r\n         ExportSiteBase(exporterIFC, element.Document, element, geometryElement, productWrapper);\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Indicates if Element should be exported as an IfcSite.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The Exporter object.</param>\r\n      /// <param name=\"element\">Element to be exported.</param>\r\n      /// <returns>True if the Element should be exported as an IfcSite, false otherwise.</returns>\r\n      public static bool ShouldExportElementAsSite(Element element)\r\n      {\r\n         string enumTypeValue = string.Empty;\r\n         IFCExportInfoPair pair = ExporterUtil.GetPotentialProductExportType(element);\r\n         return (pair.ExportInstance == Common.Enums.IFCEntityType.IfcSite);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports IFC site object if having latitude and longitude.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"document\">\r\n      /// The Revit document.\r\n      /// </param>\r\n      /// <param name=\"productWrapper\">\r\n      /// The ProductWrapper.\r\n      /// </param>\r\n      public static void ExportDefaultSite(ExporterIFC exporterIFC, Document document, ProductWrapper productWrapper)\r\n      {\r\n         ExportSiteBase(exporterIFC, document, null, null, productWrapper);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Base implementation to export IFC site object.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"document\">The Revit document.  It may be null if element isn't.</param>\r\n      /// <param name=\"element\">The element.  It may be null if document isn't.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      private static void ExportSiteBase(ExporterIFC exporterIFC, Document document, Element element, GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         IFCAnyHandle siteHandle = ExporterCacheManager.SiteExportInfo.SiteHandle;\r\n\r\n         // Nothing to do if we've already created an IfcSite, and have no site element to try to\r\n         // export or append to the existing site.\r\n         if (element == null && ExporterCacheManager.SiteExportInfo.IsSiteExported())\r\n            return;\r\n\r\n         Document doc = document;\r\n         if (doc == null)\r\n         {\r\n            if (element != null)\r\n               doc = element.Document;\r\n            else\r\n               throw new ArgumentException(\"Both document and element are null.\");\r\n         }\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         Common.Enums.IFCEntityType elementClassTypeEnum = Common.Enums.IFCEntityType.IfcSite;\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            IFCAnyHandle siteRepresentation = null;\r\n            if (element != null)\r\n            {\r\n               // It would be possible that they actually represent several different sites with different buildings, \r\n               // but until we have a concept of a building in Revit, we have to assume 0-1 sites, 1 building.\r\n               bool appendedToSite = false;\r\n               bool exportAsFacetation = !ExporterCacheManager.ExportOptionsCache.ExportAsCoordinationView2;\r\n               if (ExporterCacheManager.SiteExportInfo.IsSiteExported())\r\n               {\r\n                  IList<IFCAnyHandle> representations = IFCAnyHandleUtil.GetProductRepresentations(siteHandle);\r\n                  if (representations.Count > 0)\r\n                  {\r\n                     IFCAnyHandle bodyRep = representations[0];\r\n                     IFCAnyHandle boundaryRep = null;\r\n                     if (representations.Count > 1)\r\n                        boundaryRep = representations[1];\r\n\r\n                     siteRepresentation = RepresentationUtil.CreateSurfaceProductDefinitionShape(exporterIFC, element, geometryElement, true, exportAsFacetation, ref bodyRep, ref boundaryRep);\r\n                     if (representations.Count == 1 && !IFCAnyHandleUtil.IsNullOrHasNoValue(boundaryRep))\r\n                     {\r\n                        // If the first site has no boundaryRep,\r\n                        // we will add the boundaryRep from second site to it.\r\n                        representations.Clear();\r\n                        representations.Add(boundaryRep);\r\n                        IFCAnyHandleUtil.AddProductRepresentations(siteHandle, representations);\r\n                     }\r\n                     appendedToSite = true;\r\n                  }\r\n               }\r\n\r\n               if (!appendedToSite)\r\n               {\r\n                  siteRepresentation = RepresentationUtil.CreateSurfaceProductDefinitionShape(exporterIFC, element, geometryElement, true, exportAsFacetation);\r\n               }\r\n            }\r\n\r\n            List<int> latitude = new List<int>();\r\n            List<int> longitude = new List<int>();\r\n            ProjectLocation projLocation = ExporterCacheManager.SelectedSiteProjectLocation;\r\n\r\n            double unscaledElevation = 0.0;\r\n            if (projLocation != null)\r\n            {\r\n               const double scaleToDegrees = 180 / Math.PI;\r\n               double latitudeInDeg = projLocation.GetSiteLocation().Latitude * scaleToDegrees;\r\n               double longitudeInDeg = projLocation.GetSiteLocation().Longitude * scaleToDegrees;\r\n\r\n               if (CoordReferenceInfo.MainModelGeoRefOrWCS != null)\r\n               {\r\n                  unscaledElevation = CoordReferenceInfo.MainModelGeoRefOrWCS.Origin.Z;\r\n               }\r\n\r\n               int latDeg = ((int)latitudeInDeg); latitudeInDeg -= latDeg; latitudeInDeg *= 60;\r\n               int latMin = ((int)latitudeInDeg); latitudeInDeg -= latMin; latitudeInDeg *= 60;\r\n               int latSec = ((int)latitudeInDeg); latitudeInDeg -= latSec; latitudeInDeg *= 1000000;\r\n               int latFracSec = ((int)latitudeInDeg);\r\n               latitude.Add(latDeg);\r\n               latitude.Add(latMin);\r\n               latitude.Add(latSec);\r\n               if (!ExporterCacheManager.ExportOptionsCache.ExportAs2x2)\r\n                  latitude.Add(latFracSec);\r\n\r\n               int longDeg = ((int)longitudeInDeg); longitudeInDeg -= longDeg; longitudeInDeg *= 60;\r\n               int longMin = ((int)longitudeInDeg); longitudeInDeg -= longMin; longitudeInDeg *= 60;\r\n               int longSec = ((int)longitudeInDeg); longitudeInDeg -= longSec; longitudeInDeg *= 1000000;\r\n               int longFracSec = ((int)longitudeInDeg);\r\n               longitude.Add(longDeg);\r\n               longitude.Add(longMin);\r\n               longitude.Add(longSec);\r\n               if (!ExporterCacheManager.ExportOptionsCache.ExportAs2x2)\r\n                  longitude.Add(longFracSec);\r\n            }\r\n\r\n            // Get elevation for site.\r\n            IFCAnyHandle relativePlacement = null;\r\n            IFCAnyHandle localPlacement = null;\r\n            if (ExporterUtil.ExportingHostModel())\r\n            {\r\n               if (ExporterCacheManager.ExportOptionsCache.IncludeSiteElevation)\r\n                  unscaledElevation = 0.0;\r\n               Transform siteTrf = GeometryUtil.GetSiteLocalPlacement(doc);\r\n               if (siteTrf != null && !siteTrf.IsIdentity)\r\n               {\r\n                  relativePlacement = ExporterUtil.CreateAxis2Placement3D(file, UnitUtil.ScaleLength(siteTrf.Origin), siteTrf.BasisZ, siteTrf.BasisX);\r\n                  localPlacement = IFCInstanceExporter.CreateLocalPlacement(file, null, relativePlacement);\r\n                  CoordReferenceInfo.MainModelCoordReferenceOffset = siteTrf;\r\n               }\r\n            }\r\n\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(relativePlacement))\r\n               relativePlacement = ExporterUtil.CreateAxis2Placement3D(file);\r\n\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(localPlacement))\r\n               localPlacement = IFCInstanceExporter.CreateLocalPlacement(file, null, relativePlacement);\r\n\r\n            IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n            string siteObjectType = null;\r\n\r\n            ProjectInfo projectInfo = doc.ProjectInformation;\r\n            Element mainSiteElement = (element != null) ? element : projectInfo;\r\n\r\n            string siteGUID = null;\r\n            string siteName = null;\r\n            string siteLongName = null;\r\n            string siteLandTitleNumber = null;\r\n            string siteDescription = null;\r\n            bool exportSite = false;\r\n\r\n            if ((element != null && IFCAnyHandleUtil.IsNullOrHasNoValue(siteHandle)) || (element == null))\r\n            {\r\n               exportSite = true;\r\n\r\n               // We will use the Project Information site name as the primary name, if it exists.\r\n               siteGUID = (element != null) ? GUIDUtil.CreateSiteGUID(doc, element) : GUIDUtil.CreateProjectLevelGUID(doc, GUIDUtil.ProjectLevelGUIDType.Site); ;\r\n\r\n               if (element != null)\r\n               {\r\n                  siteName = NamingUtil.GetNameOverride(element, NamingUtil.GetIFCName(element));\r\n                  siteDescription = NamingUtil.GetDescriptionOverride(element, null);\r\n                  siteObjectType = NamingUtil.GetObjectTypeOverride(element, null);\r\n                  siteLongName = NamingUtil.GetLongNameOverride(element, null);\r\n                  siteLandTitleNumber = NamingUtil.GetOverrideStringValue(element, \"IfcLandTitleNumber\", null);\r\n               }\r\n               else\r\n               {\r\n                  siteName = \"Default\";\r\n               }\r\n\r\n               siteName = NamingUtil.GetOverrideStringValue(projectInfo, \"SiteName\", siteName);\r\n               siteDescription = NamingUtil.GetOverrideStringValue(projectInfo, \"SiteDescription\", siteDescription);\r\n               siteObjectType = NamingUtil.GetOverrideStringValue(projectInfo, \"SiteObjectType\", siteObjectType);\r\n               siteLongName = NamingUtil.GetOverrideStringValue(projectInfo, \"SiteLongName\", siteLongName);\r\n               siteLandTitleNumber = NamingUtil.GetOverrideStringValue(projectInfo, \"SiteLandTitleNumber\", siteLandTitleNumber);\r\n\r\n               if (element == null)\r\n               {\r\n                  // don't bother exporting if we have nothing in the site whatsoever, and it is virtual.\r\n                  if ((latitude.Count == 0 || longitude.Count == 0) &&\r\n                     IFCAnyHandleUtil.IsNullOrHasNoValue(relativePlacement) &&\r\n                     string.IsNullOrWhiteSpace(siteLongName) &&\r\n                     string.IsNullOrWhiteSpace(siteLandTitleNumber))\r\n                  {\r\n                     return;\r\n                  }\r\n               }\r\n            }\r\n\r\n            COBieProjectInfo cobieProjectInfo = ExporterCacheManager.ExportOptionsCache.COBieProjectInfo;\r\n            // Override Site information when it is a special COBie export\r\n            if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3COBIE24DesignDeliverable && cobieProjectInfo != null)\r\n            {\r\n               siteName = cobieProjectInfo.SiteLocation;\r\n               siteDescription = cobieProjectInfo.SiteDescription;\r\n            }\r\n\r\n            if (exportSite)\r\n            {\r\n               IFCAnyHandle address = null;\r\n               if (Exporter.NeedToCreateAddressForSite(doc))\r\n                  address = Exporter.CreateIFCAddress(file, doc, projectInfo);\r\n\r\n               double elevation = UnitUtil.ScaleLength(unscaledElevation);\r\n\r\n               ExporterCacheManager.SiteExportInfo.SiteHandle = IFCInstanceExporter.CreateSite(exporterIFC, element, siteGUID, ownerHistory, siteName, siteDescription, siteObjectType, localPlacement,\r\n                  siteRepresentation, siteLongName, IFCElementComposition.Element, latitude, longitude, elevation, siteLandTitleNumber, address);\r\n               productWrapper.AddSite(mainSiteElement, ExporterCacheManager.SiteExportInfo.SiteHandle);\r\n               ExporterCacheManager.SiteExportInfo.SiteElementId = element?.Id ?? ElementId.InvalidElementId;\r\n            }\r\n\r\n\r\n            tr.Commit();\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/SpaceBoundary.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// The class contains information for creating IFC space boundary.\r\n   /// </summary>\r\n   public class SpaceBoundary\r\n   {\r\n      /// <summary>\r\n      /// The optional unique name of this space boundary.\r\n      /// </summary>\r\n      public string Name { get; private set; } = null;\r\n\r\n      /// <summary>\r\n      /// The identifier of the spatial element represented by this space boundary.\r\n      /// </summary>\r\n      public ElementId SpatialElementId { get; private set; } = ElementId.InvalidElementId;\r\n\r\n      /// <summary>\r\n      /// The id of the non-spatial element which forms the boundary.\r\n      /// </summary>\r\n      /// <remarks>For a virtual boundary, this will still be supplied, and will be\r\n      /// the element id of the CurveElement.</remarks>\r\n      public ElementId NonSpatialElementId { get; private set; } = ElementId.InvalidElementId;\r\n\r\n      /// <summary>\r\n      /// The level id.\r\n      /// </summary>\r\n      public ElementId LevelId { get; private set; } = ElementId.InvalidElementId;\r\n\r\n      /// <summary>\r\n      /// The IfcConnectionGeometry handle.\r\n      /// </summary>\r\n      public IFCAnyHandle ConnectionGeometryHandle { get; private set; } = null;\r\n\r\n      /// <summary>\r\n      /// The type of the space boundary.\r\n      /// </summary>\r\n      public IFCPhysicalOrVirtual SpaceBoundaryType { get; private set; } = IFCPhysicalOrVirtual.NotDefined;\r\n\r\n      /// <summary>\r\n      /// Indicates if the space boundary is external or not.\r\n      /// </summary>\r\n      public IFCInternalOrExternal InternalOrExternal { get; private set; } = IFCInternalOrExternal.Internal;\r\n\r\n      /// <summary>\r\n      /// Generate a Hash Code for this space boundary.\r\n      /// </summary>\r\n      /// <returns>A mostly unique string to identify this space boundary.</returns>\r\n      public string GetBoundaryHashCode()\r\n      {\r\n         if (!string.IsNullOrEmpty(Name))\r\n            return SpatialElementId.ToString() + \":\" + Name;\r\n\r\n         // TODO_GUID: ConnectionGeometryHandle isn't very stable.  Can we expand how boundaries\r\n         // are named?\r\n         return SpatialElementId.ToString() + \":\" +\r\n            NonSpatialElementId.ToString() + \":\" +\r\n            LevelId.ToString() + \":\" +\r\n            SpaceBoundaryType.ToString() +\r\n            InternalOrExternal.ToString() +\r\n            ConnectionGeometryHandle.Id;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs a default SpaceBoundary object.\r\n      /// </summary>\r\n      public SpaceBoundary() { }\r\n\r\n      /// <summary>\r\n      /// Constructs a SpaceBoundary object.\r\n      /// </summary>\r\n      /// <param name=\"name\">The optional name of the space boundary.</param>\r\n      /// <param name=\"spatialElementId\">The spatial element id.</param>\r\n      /// <param name=\"nonSpatialElementId\">The building or curve element id.</param>\r\n      /// <param name=\"levelId\">The level element id.</param>\r\n      /// <param name=\"connectionGeometry\">The connection geometry handle.</param>\r\n      /// <param name=\"type\">The type of the space boundary.</param>\r\n      /// <param name=\"isExternal\">Indicates if the space boundary is external or not.</param>\r\n      public SpaceBoundary(string name, ElementId spatialElementId, ElementId nonSpatialElementId,\r\n         ElementId levelId, IFCAnyHandle connectionGeometry, \r\n         IFCPhysicalOrVirtual type, IFCInternalOrExternal internalOrExternal)\r\n      {\r\n         Name = name;\r\n         SpatialElementId = spatialElementId;\r\n         NonSpatialElementId = nonSpatialElementId;\r\n         ConnectionGeometryHandle = connectionGeometry;\r\n         SpaceBoundaryType = type;\r\n         InternalOrExternal = internalOrExternal;\r\n         LevelId = levelId;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/SpaceOccupantInfo.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// The class contains information for creating IFC zone.\r\n   /// </summary>\r\n   public class SpaceOccupantInfo\r\n   {\r\n      /// <summary>\r\n      /// The associated room handles.\r\n      /// </summary>\r\n      private HashSet<IFCAnyHandle> m_AssocRoomHandles = new HashSet<IFCAnyHandle>();\r\n\r\n      /// <summary>\r\n      /// The associated IfcClassificationReference handles.\r\n      /// </summary>\r\n      private Dictionary<string, IFCAnyHandle> m_ClassificationReferences = new Dictionary<string, IFCAnyHandle>();\r\n\r\n      /// <summary>\r\n      /// The associated Pset_SpaceOccupant handle, if any.\r\n      /// </summary>\r\n      private IFCAnyHandle m_SpaceOccupantProperySetHandle = null;\r\n\r\n      /// <summary>\r\n      /// Constructs a SpaceOccupantInfo object.\r\n      /// </summary>\r\n      /// <param name=\"roomHandle\">The room handle for this space occupant.</param>\r\n      /// <param name=\"classificationReferences\">The classification references for this space occupant.</param>\r\n      /// <param name=\"psetHnd\">The Pset_SpaceOccupant handle for this space occupant.</param>\r\n      public SpaceOccupantInfo(IFCAnyHandle roomHandle, Dictionary<string, IFCAnyHandle> classificationReferences, IFCAnyHandle psetHnd)\r\n      {\r\n         RoomHandles.Add(roomHandle);\r\n         ClassificationReferences = classificationReferences;\r\n         SpaceOccupantProperySetHandle = psetHnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The associated room handles.\r\n      /// </summary>\r\n      public HashSet<IFCAnyHandle> RoomHandles\r\n      {\r\n         get { return m_AssocRoomHandles; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The associated IfcClassificationReference handles.\r\n      /// </summary>\r\n      public Dictionary<string, IFCAnyHandle> ClassificationReferences\r\n      {\r\n         get { return m_ClassificationReferences; }\r\n         set { m_ClassificationReferences = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The associated IfcClassificationReference handles.\r\n      /// </summary>\r\n      public IFCAnyHandle SpaceOccupantProperySetHandle\r\n      {\r\n         get { return m_SpaceOccupantProperySetHandle; }\r\n         set { m_SpaceOccupantProperySetHandle = value; }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/SpatialElementExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.Analysis;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing System.Linq;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export spatial elements.\r\n   /// </summary>\r\n   class SpatialElementExporter\r\n   {\r\n      /// <summary>\r\n      /// The SpatialElementGeometryCalculator object that contains some useful results from previous calculator.\r\n      /// </summary>\r\n      private static SpatialElementGeometryCalculator s_SpatialElementGeometryCalculator = null;\r\n\r\n      /// <summary>\r\n      /// Initializes SpatialElementGeometryCalculator object.\r\n      /// </summary>\r\n      /// <param name=\"document\">\r\n      /// The Revit document.\r\n      /// </param>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      public static void InitializeSpatialElementGeometryCalculator(Document document)\r\n      {\r\n         SpatialElementBoundaryOptions options = GetSpatialElementBoundaryOptions(null);\r\n         s_SpatialElementGeometryCalculator = new SpatialElementGeometryCalculator(document, options);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Destroys SpatialElementGeometryCalculator object.\r\n      /// </summary>\r\n      public static void DestroySpatialElementGeometryCalculator()\r\n      {\r\n         if (s_SpatialElementGeometryCalculator != null)\r\n         {\r\n            s_SpatialElementGeometryCalculator.Dispose();\r\n            s_SpatialElementGeometryCalculator = null;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports spatial elements, including rooms, areas and spaces. 1st level space boundaries.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"spatialElement\">\r\n      /// The spatial element.\r\n      /// </param>\r\n      /// <param name=\"productWrapper\">\r\n      /// The ProductWrapper.\r\n      /// </param>\r\n      public static void ExportSpatialElement(ExporterIFC exporterIFC, SpatialElement spatialElement, ProductWrapper productWrapper)\r\n      {\r\n         string ifcEnumType;\r\n         IFCExportInfoPair exportInfo = ExporterUtil.GetProductExportType(spatialElement, out ifcEnumType);\r\n\r\n         // Force the default export to IfcSpace for Spatial Element if it is set to UnKnown\r\n         if (exportInfo.IsUnKnown)\r\n         {\r\n            exportInfo.SetByTypeAndPredefinedType(IFCEntityType.IfcSpace, ifcEnumType);\r\n         }\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(exportInfo.ExportInstance))\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction transaction = new IFCTransaction(file))\r\n         {\r\n            using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, spatialElement, null, null))\r\n            {\r\n               SpatialElementGeometryResults spatialElemGeomResult = null;\r\n               IFCAnyHandle spaceHnd = CreateIFCSpace(exporterIFC, spatialElement,\r\n                  productWrapper, setter, exportInfo, out spatialElemGeomResult);\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(spaceHnd))\r\n               {\r\n                  return;\r\n               }\r\n\r\n               // Do not create boundary information for areas.\r\n               if (!(spatialElement is Area) && \r\n                  (ExporterCacheManager.ExportOptionsCache.SpaceBoundaryLevel == 1))\r\n               {\r\n                  Document document = spatialElement.Document;\r\n                  ElementId levelId = spatialElement.LevelId;\r\n                  IFCLevelInfo levelInfo = ExporterCacheManager.LevelInfoCache.GetLevelInfo(levelId);\r\n                  double baseHeightNonScaled = spatialElement.Level?.Elevation ?? 0.0;\r\n\r\n                  try\r\n                  {\r\n                     // This can throw an exception.  If it does, continue to export element without boundary information.\r\n                     // We will re-use the previously generated value, if we have it.\r\n                     // TODO: warn user.\r\n                     if (spatialElemGeomResult == null)\r\n                        spatialElemGeomResult = s_SpatialElementGeometryCalculator.CalculateSpatialElementGeometry(spatialElement);\r\n\r\n                     Solid spatialElemGeomSolid = spatialElemGeomResult.GetGeometry();\r\n                     FaceArray faces = spatialElemGeomSolid.Faces;\r\n                     foreach (Face face in faces)\r\n                     {\r\n                        IList<SpatialElementBoundarySubface> spatialElemBoundarySubfaces = spatialElemGeomResult.GetBoundaryFaceInfo(face);\r\n                        foreach (SpatialElementBoundarySubface spatialElemBSubface in spatialElemBoundarySubfaces)\r\n                        {\r\n                           if (spatialElemBSubface.SubfaceType == SubfaceType.Side)\r\n                              continue;\r\n\r\n                           if (spatialElemBSubface.GetSubface() == null)\r\n                              continue;\r\n\r\n                           ElementId elemId = spatialElemBSubface.SpatialBoundaryElement.LinkInstanceId;\r\n                           if (elemId == ElementId.InvalidElementId)\r\n                           {\r\n                              elemId = spatialElemBSubface.SpatialBoundaryElement.HostElementId;\r\n                           }\r\n\r\n                           Element boundingElement = document.GetElement(elemId);\r\n                           if (boundingElement == null)\r\n                              continue;\r\n\r\n                           IFCInternalOrExternal internalOrExternal = IFCInternalOrExternal.NotDefined;\r\n                           if (CategoryUtil.IsElementExternal(boundingElement).HasValue)\r\n                              internalOrExternal = CategoryUtil.IsElementExternal(boundingElement).Value ? IFCInternalOrExternal.External : IFCInternalOrExternal.Internal;\r\n\r\n                           IFCGeometryInfo info = IFCGeometryInfo.CreateSurfaceGeometryInfo(spatialElement.Document.Application.VertexTolerance);\r\n\r\n                           Face subFace = spatialElemBSubface.GetSubface();\r\n                           ExporterIFCUtils.CollectGeometryInfo(exporterIFC, info, subFace, XYZ.Zero, false);\r\n\r\n                           foreach (IFCAnyHandle surfaceHnd in info.GetSurfaces())\r\n                           {\r\n                              IFCAnyHandle connectionGeometry = IFCInstanceExporter.CreateConnectionSurfaceGeometry(file, \r\n                                 surfaceHnd, null);\r\n\r\n                              SpaceBoundary spaceBoundary = new SpaceBoundary(null, \r\n                                 spatialElement.Id, \r\n                                 boundingElement.Id, setter.LevelId, \r\n                                 connectionGeometry, \r\n                                 IFCPhysicalOrVirtual.Physical,\r\n                                 internalOrExternal);\r\n\r\n                              if (!ProcessIFCSpaceBoundary(exporterIFC, spaceBoundary, file))\r\n                                 ExporterCacheManager.SpaceBoundaryCache.Add(spaceBoundary);\r\n                           }\r\n                        }\r\n                     }\r\n                  }\r\n                  catch\r\n                  {\r\n                  }\r\n\r\n                  IList<IList<BoundarySegment>> roomBoundaries = spatialElement.GetBoundarySegments(GetSpatialElementBoundaryOptions(spatialElement));\r\n                  double scaledRoomHeight = GetScaledHeight(spatialElement, levelId, levelInfo);\r\n                  double unscaledHeight = UnitUtil.UnscaleLength(scaledRoomHeight);\r\n\r\n                  Transform lcs = Transform.Identity;\r\n\r\n                  foreach (IList<BoundarySegment> roomBoundaryList in roomBoundaries)\r\n                  {\r\n                     foreach (BoundarySegment roomBoundary in roomBoundaryList)\r\n                     {\r\n                        Element boundingElement = document.GetElement(roomBoundary.ElementId);\r\n\r\n                        if (boundingElement == null)\r\n                           continue;\r\n\r\n                        ElementId boundingElementId = boundingElement.Id;\r\n                        Curve trimmedCurve = roomBoundary.GetCurve();\r\n\r\n                        if (trimmedCurve == null)\r\n                           continue;\r\n\r\n                        IFCAnyHandle connectionGeometry = ExtrusionExporter.CreateConnectionSurfaceGeometry(\r\n                           exporterIFC, trimmedCurve, lcs, scaledRoomHeight, baseHeightNonScaled);\r\n\r\n                        IFCPhysicalOrVirtual physOrVirt = IFCPhysicalOrVirtual.Physical;\r\n                        if (boundingElement is CurveElement)\r\n                           physOrVirt = IFCPhysicalOrVirtual.Virtual;\r\n                        else if (boundingElement is Autodesk.Revit.DB.Architecture.Room)\r\n                           physOrVirt = IFCPhysicalOrVirtual.NotDefined;\r\n\r\n                        IFCInternalOrExternal internalOrExternal = IFCInternalOrExternal.NotDefined;\r\n                        if (CategoryUtil.IsElementExternal(boundingElement).HasValue)\r\n                           internalOrExternal = CategoryUtil.IsElementExternal(boundingElement).Value ? IFCInternalOrExternal.External : IFCInternalOrExternal.Internal;\r\n\r\n                        bool isObjectPhys = (physOrVirt == IFCPhysicalOrVirtual.Physical);\r\n\r\n                        SpaceBoundary spaceBoundary = new SpaceBoundary(null, \r\n                           spatialElement.Id,\r\n                           boundingElement.Id,\r\n                           setter.LevelId, \r\n                           !IFCAnyHandleUtil.IsNullOrHasNoValue(connectionGeometry) ? connectionGeometry : null,\r\n                           physOrVirt,\r\n                           internalOrExternal);\r\n\r\n                        if (!ProcessIFCSpaceBoundary(exporterIFC, spaceBoundary, file))\r\n                           ExporterCacheManager.SpaceBoundaryCache.Add(spaceBoundary);\r\n\r\n                        // try to add doors and windows for host objects if appropriate.\r\n                        if (isObjectPhys && boundingElement is HostObject)\r\n                        {\r\n                           HostObject hostObj = boundingElement as HostObject;\r\n                           \r\n                           HashSet<ElementId> elemIds = new HashSet<ElementId>();\r\n                           elemIds.UnionWith(hostObj.FindInserts(false, false, false, false));\r\n                           if (elemIds.Count == 0)\r\n                           {\r\n                              CurtainGridSet curtainGridSet = CurtainSystemExporter.GetCurtainGridSet(hostObj);\r\n                              if (curtainGridSet != null)\r\n                              {\r\n                                 foreach (CurtainGrid curtainGrid in curtainGridSet)\r\n                                 {\r\n                                    elemIds.UnionWith(CurtainSystemExporter.GetVisiblePanelsForGrid(\r\n                                       curtainGrid, document));\r\n                                 }\r\n                              }\r\n                           }\r\n\r\n                           foreach (ElementId elemId in elemIds)\r\n                           {\r\n                              // we are going to do a simple bbox export, not complicated geometry.\r\n                              Element instElem = document.GetElement(elemId);\r\n                              if (instElem == null)\r\n                                 continue;\r\n\r\n                              BoundingBoxXYZ instBBox = instElem.get_BoundingBox(null);\r\n                              if (instBBox == null)\r\n                                 continue;\r\n\r\n                              // make copy of original trimmed curve.\r\n                              Curve instCurve = trimmedCurve.Clone();\r\n                              XYZ instOrig = instCurve.GetEndPoint(0);\r\n\r\n                              // make sure that the insert is on this level.\r\n                              if (instBBox.Max.Z < instOrig.Z)\r\n                                 continue;\r\n                              if (instBBox.Min.Z > instOrig.Z + unscaledHeight)\r\n                                 continue;\r\n\r\n                              double insHeight = Math.Min(instBBox.Max.Z, instOrig.Z + unscaledHeight) - Math.Max(instOrig.Z, instBBox.Min.Z);\r\n                              if (insHeight < (1.0 / (12.0 * 16.0)))\r\n                                 continue;\r\n\r\n                              // move base curve to bottom of bbox.\r\n                              XYZ moveDir = new XYZ(0.0, 0.0, instBBox.Min.Z - instOrig.Z);\r\n                              Transform moveTrf = Transform.CreateTranslation(moveDir);\r\n                              instCurve = instCurve.CreateTransformed(moveTrf);\r\n\r\n                              bool isHorizOrVert = false;\r\n                              if (instCurve is Line)\r\n                              {\r\n                                 Line instLine = instCurve as Line;\r\n                                 XYZ lineDir = instLine.Direction;\r\n                                 if (MathUtil.IsAlmostEqual(Math.Abs(lineDir.X), 1.0) || (MathUtil.IsAlmostEqual(Math.Abs(lineDir.Y), 1.0)))\r\n                                    isHorizOrVert = true;\r\n                              }\r\n\r\n                              double[] parameters = new double[2];\r\n                              double[] origEndParams = new double[2];\r\n                              bool paramsSet = false;\r\n\r\n                              if (!isHorizOrVert)\r\n                              {\r\n                                 FamilyInstance famInst = instElem as FamilyInstance;\r\n                                 if (famInst == null)\r\n                                    continue;\r\n\r\n                                 ElementType elementType = document.GetElement(famInst.GetTypeId()) as ElementType;\r\n                                 if (elementType == null)\r\n                                    continue;\r\n\r\n                                 BoundingBoxXYZ symBBox = elementType.get_BoundingBox(null);\r\n                                 if (symBBox != null)\r\n                                 {\r\n                                    Curve symCurve = trimmedCurve.Clone();\r\n                                    Transform trf = famInst.GetTransform();\r\n                                    Transform invTrf = trf.Inverse;\r\n                                    Curve trfCurve = symCurve.CreateTransformed(invTrf);\r\n                                    parameters[0] = trfCurve.Project(symBBox.Min).Parameter;\r\n                                    parameters[1] = trfCurve.Project(symBBox.Max).Parameter;\r\n                                    paramsSet = true;\r\n                                 }\r\n                              }\r\n\r\n                              if (!paramsSet)\r\n                              {\r\n                                 parameters[0] = instCurve.Project(instBBox.Min).Parameter;\r\n                                 parameters[1] = instCurve.Project(instBBox.Max).Parameter;\r\n                              }\r\n\r\n                              // ignore if less than 1/16\".\r\n                              if (Math.Abs(parameters[1] - parameters[0]) < 1.0 / (12.0 * 16.0))\r\n                                 continue;\r\n                              if (parameters[0] > parameters[1])\r\n                              {\r\n                                 //swap\r\n                                 double tempParam = parameters[0];\r\n                                 parameters[0] = parameters[1];\r\n                                 parameters[1] = tempParam;\r\n                              }\r\n\r\n                              origEndParams[0] = instCurve.GetEndParameter(0);\r\n                              origEndParams[1] = instCurve.GetEndParameter(1);\r\n\r\n                              if (origEndParams[0] > parameters[1] - (1.0 / (12.0 * 16.0)))\r\n                                 continue;\r\n                              if (origEndParams[1] < parameters[0] + (1.0 / (12.0 * 16.0)))\r\n                                 continue;\r\n\r\n                              instCurve.MakeBound(parameters[0] > origEndParams[0] ? parameters[0] : origEndParams[0],\r\n                                                  parameters[1] < origEndParams[1] ? parameters[1] : origEndParams[1]);\r\n\r\n                              double insHeightScaled = UnitUtil.ScaleLength(insHeight);\r\n                              IFCAnyHandle insConnectionGeom = ExtrusionExporter.CreateConnectionSurfaceGeometry(exporterIFC, instCurve, lcs,\r\n                                 insHeightScaled, baseHeightNonScaled);\r\n\r\n                              SpaceBoundary instBoundary = new SpaceBoundary(null, \r\n                                 spatialElement.Id, elemId, setter.LevelId, \r\n                                 !IFCAnyHandleUtil.IsNullOrHasNoValue(insConnectionGeom) ? insConnectionGeom : null, \r\n                                 physOrVirt,\r\n                                 internalOrExternal);\r\n                              if (!ProcessIFCSpaceBoundary(exporterIFC, instBoundary, file))\r\n                                 ExporterCacheManager.SpaceBoundaryCache.Add(instBoundary);\r\n                           }\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n            transaction.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports spatial elements, including rooms, areas and spaces. 2nd level space boundaries.\r\n      /// </summary>\r\n      /// <param name=\"ifcExporter\">The Exporter object.</param>\r\n      /// <param name=\"exporterIFC\"> The ExporterIFC object.</param>\r\n      /// <param name=\"document\">The Revit document.</param>\r\n      /// <returns>The set of exported spaces.  This is used to try to export using the standard routine for spaces that failed.</returns>\r\n      public static ISet<ElementId> ExportSpatialElement2ndLevel(Exporter ifcExporter, ExporterIFC exporterIFC, Document document)\r\n      {\r\n         ISet<ElementId> exportedSpaceIds = new HashSet<ElementId>();\r\n\r\n         using (SubTransaction st = new SubTransaction(document))\r\n         {\r\n            st.Start();\r\n\r\n            EnergyAnalysisDetailModel model = null;\r\n            try\r\n            {\r\n               View filterView = ExporterCacheManager.ExportOptionsCache.FilterViewForExport;\r\n               IFCFile file = exporterIFC.GetFile();\r\n               using (IFCTransaction transaction = new IFCTransaction(file))\r\n               {\r\n                  EnergyDataSettings.GetEnergyDataSettings(document).AnalysisType = AnalysisMode.RoomsOrSpaces;\r\n\r\n                  try\r\n                  {\r\n                     model = EnergyAnalysisDetailModel.Create(document);\r\n                  }\r\n                  catch (System.Exception)\r\n                  {\r\n                     return exportedSpaceIds;\r\n                  }\r\n\r\n                  IList<EnergyAnalysisSpace> spaces = model.GetAnalyticalSpaces();\r\n                  foreach (EnergyAnalysisSpace space in spaces)\r\n                  {\r\n                     SpatialElement spatialElement = document.GetElement(space.CADObjectUniqueId) as SpatialElement;\r\n\r\n                     if (spatialElement == null)\r\n                        continue;\r\n\r\n                     //current view only\r\n                     if (!ElementFilteringUtil.IsElementVisible(spatialElement))\r\n                        continue;\r\n\r\n                     if (!ElementFilteringUtil.ShouldElementBeExported(spatialElement, false))\r\n                        continue;\r\n\r\n                     if (ElementFilteringUtil.IsRoomInInvalidPhase(spatialElement))\r\n                        continue;\r\n\r\n                     Options geomOptions = GeometryUtil.GetIFCExportGeometryOptions();\r\n                     View ownerView = spatialElement.Document.GetElement(spatialElement.OwnerViewId) as View;\r\n                     if (ownerView != null)\r\n                        geomOptions.View = ownerView;\r\n                     GeometryElement geomElem = spatialElement.get_Geometry(geomOptions);\r\n\r\n                     try\r\n                     {\r\n                        exporterIFC.PushExportState(spatialElement, geomElem);\r\n\r\n                        using (ProductWrapper productWrapper = ProductWrapper.Create(exporterIFC, true))\r\n                        {\r\n                           using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, spatialElement))\r\n                           {\r\n                              // We won't use the SpatialElementGeometryResults, as these are 1st level boundaries, not 2nd level.\r\n                              SpatialElementGeometryResults results = null;\r\n                              IFCAnyHandle spaceHnd = CreateIFCSpace(exporterIFC,\r\n                                 spatialElement, productWrapper, setter, null, out results);\r\n                              if (IFCAnyHandleUtil.IsNullOrHasNoValue(spaceHnd))\r\n                              {\r\n                                 continue;\r\n                              }\r\n\r\n                              exportedSpaceIds.Add(spatialElement.Id);\r\n\r\n                              XYZ offset = GetSpaceBoundaryOffset(setter);\r\n\r\n                              //get boundary information from surfaces\r\n                              IList<EnergyAnalysisSurface> surfaces = space.GetAnalyticalSurfaces();\r\n                              foreach (EnergyAnalysisSurface surface in surfaces)\r\n                              {\r\n                                 Element boundingElement = GetBoundaryElement(document, surface.CADLinkUniqueId, surface.CADObjectUniqueId);\r\n\r\n                                 IList<EnergyAnalysisOpening> openings = surface.GetAnalyticalOpenings();\r\n                                 IFCAnyHandle connectionGeometry = CreateConnectionSurfaceGeometry(exporterIFC, surface, openings, offset);\r\n                                 string name = surface.Name;\r\n                                 CreateIFCSpaceBoundary(file, exporterIFC, name, spatialElement, \r\n                                    boundingElement, setter.LevelId, connectionGeometry);\r\n\r\n                                 // try to add doors and windows for host objects if appropriate.\r\n                                 if (boundingElement is HostObject)\r\n                                 {\r\n                                    foreach (EnergyAnalysisOpening opening in openings)\r\n                                    {\r\n                                       Element openingBoundingElem = GetBoundaryElement(document, opening.CADLinkUniqueId, opening.CADObjectUniqueId);\r\n                                       IFCAnyHandle openingConnectionGeom = CreateConnectionSurfaceGeometry(exporterIFC, opening, offset);\r\n                                       CreateIFCSpaceBoundary(file, exporterIFC, opening.OpeningName,\r\n                                          spatialElement, openingBoundingElem, setter.LevelId, openingConnectionGeom);\r\n                                    }\r\n                                 }\r\n                              }\r\n\r\n                              ExporterUtil.ExportRelatedProperties(exporterIFC, spatialElement, productWrapper);\r\n                           }\r\n                        }\r\n                     }\r\n                     catch (Exception ex)\r\n                     {\r\n                        ifcExporter.HandleUnexpectedException(ex, spatialElement);\r\n                     }\r\n                     finally\r\n                     {\r\n                        exporterIFC.PopExportState();\r\n                     }\r\n                  }\r\n                  transaction.Commit();\r\n               }\r\n            }\r\n            finally\r\n            {\r\n               if (model != null)\r\n                  document.Delete(model.Id);\r\n            }\r\n\r\n            st.RollBack();\r\n            return exportedSpaceIds;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates SpaceBoundary from a bounding element.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"name\">The optional unique name of the space boundary.</param>\r\n      /// <param name=\"spatialElement\">The spatial element.</param>\r\n      /// <param name=\"boundingElement\">The bounding element.</param>\r\n      /// <param name=\"levelId\">The level id.</param>\r\n      /// <param name=\"connectionGeometry\">The connection geometry handle.</param>\r\n      static void CreateIFCSpaceBoundary(IFCFile file, ExporterIFC exporterIFC, string name,\r\n         SpatialElement spatialElement, Element boundingElement, ElementId levelId,\r\n         IFCAnyHandle connectionGeometry)\r\n      {\r\n         IFCPhysicalOrVirtual physOrVirt = IFCPhysicalOrVirtual.Physical;\r\n         if (boundingElement == null || boundingElement is CurveElement)\r\n            physOrVirt = IFCPhysicalOrVirtual.Virtual;\r\n         else if (boundingElement is Autodesk.Revit.DB.Architecture.Room)\r\n            physOrVirt = IFCPhysicalOrVirtual.NotDefined;\r\n\r\n         IFCInternalOrExternal internalOrExternal = IFCInternalOrExternal.NotDefined;\r\n         if (CategoryUtil.IsElementExternal(boundingElement).HasValue)\r\n            internalOrExternal = CategoryUtil.IsElementExternal(boundingElement).Value ? IFCInternalOrExternal.External : IFCInternalOrExternal.Internal;\r\n\r\n         SpaceBoundary spaceBoundary = new SpaceBoundary(name, spatialElement.Id,\r\n            boundingElement?.Id ?? ElementId.InvalidElementId,\r\n            levelId, connectionGeometry, physOrVirt,\r\n            internalOrExternal);\r\n\r\n         if (!ProcessIFCSpaceBoundary(exporterIFC, spaceBoundary, file))\r\n            ExporterCacheManager.SpaceBoundaryCache.Add(spaceBoundary);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets element from a CAD Link's UniqueId and a CAD Object's UniqueId.\r\n      /// </summary>\r\n      /// <param name=\"document\">\r\n      /// The Revit document.\r\n      /// </param>\r\n      /// <param name=\"CADLinkUniqueId\">\r\n      /// The CAD Link's unique id.\r\n      /// </param>\r\n      /// <param name=\"CADObjectUniqueId\">\r\n      /// The CAD Object's unique id.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The element.\r\n      /// </returns>\r\n      static Element GetBoundaryElement(Document document, string CADLinkUniqueId, string CADObjectUniqueId)\r\n      {\r\n         Document documentToUse = document;\r\n         if (!String.IsNullOrEmpty(CADLinkUniqueId))\r\n         {\r\n            RevitLinkInstance CADLinkInstance = document.GetElement(CADLinkUniqueId) as RevitLinkInstance;\r\n            if (CADLinkInstance != null)\r\n            {\r\n               documentToUse = CADLinkInstance.GetLinkDocument();\r\n            }\r\n         }\r\n\r\n         return documentToUse.GetElement(CADObjectUniqueId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the boundary options of a spatial element.\r\n      /// </summary>\r\n      /// <param name=\"spatialElement\">The spatial element. null to get the default options.</param>\r\n      /// <returns>The SpatialElementBoundaryOptions.</returns>\r\n      static SpatialElementBoundaryOptions GetSpatialElementBoundaryOptions(SpatialElement spatialElement)\r\n      {\r\n         SpatialElementBoundaryOptions spatialElementBoundaryOptions = new SpatialElementBoundaryOptions();\r\n         spatialElementBoundaryOptions.SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.Finish;\r\n\r\n         if (spatialElement == null)\r\n            return spatialElementBoundaryOptions;\r\n\r\n         SpatialElementType spatialElementType = SpatialElementType.Room;\r\n         if (spatialElement is Autodesk.Revit.DB.Architecture.Room)\r\n         {\r\n            spatialElementType = SpatialElementType.Room;\r\n         }\r\n         else if (spatialElement is Area)\r\n         {\r\n            spatialElementType = SpatialElementType.Area;\r\n         }\r\n         else if (spatialElement is Autodesk.Revit.DB.Mechanical.Space)\r\n         {\r\n            spatialElementType = SpatialElementType.Space;\r\n         }\r\n         else\r\n            return spatialElementBoundaryOptions;\r\n\r\n         AreaVolumeSettings areaSettings = AreaVolumeSettings.GetAreaVolumeSettings(spatialElement.Document);\r\n         if (areaSettings != null)\r\n         {\r\n            spatialElementBoundaryOptions.SpatialElementBoundaryLocation = areaSettings.GetSpatialElementBoundaryLocation(spatialElementType);\r\n         }\r\n\r\n         return spatialElementBoundaryOptions;\r\n      }\r\n\r\n      /// <summary>Creates IFC connection surface geometry from a surface object.</summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"surface\">The EnergyAnalysisSurface.</param>\r\n      /// <param name=\"openings\">List of EnergyAnalysisOpenings.</param>\r\n      /// <param name=\"offset\">The offset of the geometry.</param>\r\n      /// <returns>The connection geometry handle.</returns>\r\n      static IFCAnyHandle CreateConnectionSurfaceGeometry(ExporterIFC exporterIFC, EnergyAnalysisSurface surface, IList<EnergyAnalysisOpening> openings, XYZ offset)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         Polyloop outerLoop = surface.GetPolyloops().FirstOrDefault();\r\n         IList<XYZ> outerLoopPoints = outerLoop.GetPoints();\r\n\r\n         IList<XYZ> newOuterLoopPoints = new List<XYZ>();\r\n         foreach (XYZ point in outerLoopPoints)\r\n         {\r\n            newOuterLoopPoints.Add(UnitUtil.ScaleLength(point.Subtract(offset)));\r\n         }\r\n\r\n         IList<IList<XYZ>> innerLoopPoints = new List<IList<XYZ>>();\r\n         foreach (EnergyAnalysisOpening opening in openings)\r\n         {\r\n            IList<XYZ> openingPoints = opening.GetPolyloops().FirstOrDefault().GetPoints();\r\n            List<XYZ> newOpeningPoints = new List<XYZ>();\r\n            foreach (XYZ openingPoint in openingPoints)\r\n            {\r\n               newOpeningPoints.Add(UnitUtil.ScaleLength(openingPoint.Subtract(offset)));\r\n            }\r\n            innerLoopPoints.Add(newOpeningPoints);\r\n         }\r\n\r\n         IFCAnyHandle hnd = ExporterUtil.CreateCurveBoundedPlane(file, newOuterLoopPoints, innerLoopPoints);\r\n\r\n         return IFCInstanceExporter.CreateConnectionSurfaceGeometry(file, hnd, null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IFC connection surface geometry from an opening object.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"opening\">The EnergyAnalysisOpening.</param>\r\n      /// <param name=\"offset\">The offset of opening.</param>\r\n      /// <returns>The connection surface geometry handle.</returns>\r\n      static IFCAnyHandle CreateConnectionSurfaceGeometry(ExporterIFC exporterIFC, EnergyAnalysisOpening opening, XYZ offset)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         Polyloop outerLoop = opening.GetPolyloops().FirstOrDefault();\r\n         IList<XYZ> outerLoopPoints = outerLoop.GetPoints();\r\n\r\n         List<XYZ> newOuterLoopPoints = new List<XYZ>();\r\n         foreach (XYZ point in outerLoopPoints)\r\n         {\r\n            newOuterLoopPoints.Add(UnitUtil.ScaleLength(point.Subtract(offset)));\r\n         }\r\n\r\n         IList<IList<XYZ>> innerLoopPoints = new List<IList<XYZ>>();\r\n\r\n         IFCAnyHandle hnd = ExporterUtil.CreateCurveBoundedPlane(file, newOuterLoopPoints, innerLoopPoints);\r\n\r\n         return IFCInstanceExporter.CreateConnectionSurfaceGeometry(file, hnd, null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the height of a spatial element.\r\n      /// </summary>\r\n      /// <param name=\"spatialElement\">The spatial element.</param>\r\n      /// <param name=\"levelId\">The level id.</param>\r\n      /// <param name=\"levelInfo\">The level info.</param>\r\n      /// <returns>The height, scaled in IFC units.</returns>\r\n      static double GetScaledHeight(SpatialElement spatialElement, ElementId levelId, IFCLevelInfo levelInfo)\r\n      {\r\n         Document document = spatialElement.Document;\r\n         \r\n         ElementId topLevelId = ElementId.InvalidElementId;\r\n         double topOffset = 0.0;\r\n\r\n         // These values are internally set for areas, but are invalid.  Ignore them and just use the level height.\r\n         if (!(spatialElement is Area))\r\n         {\r\n            ParameterUtil.GetElementIdValueFromElement(spatialElement, BuiltInParameter.ROOM_UPPER_LEVEL, out topLevelId);\r\n            ParameterUtil.GetDoubleValueFromElement(spatialElement, BuiltInParameter.ROOM_UPPER_OFFSET, out topOffset);\r\n         }\r\n\r\n         double bottomOffset;\r\n         ParameterUtil.GetDoubleValueFromElement(spatialElement, BuiltInParameter.ROOM_LOWER_OFFSET, out bottomOffset);\r\n\r\n         Level bottomLevel = document.GetElement(levelId) as Level;\r\n         Level topLevel =\r\n            (levelId == topLevelId) ? bottomLevel : document.GetElement(topLevelId) as Level;\r\n\r\n         double roomHeight = 0.0;\r\n         if (bottomLevel != null && topLevel != null)\r\n         {\r\n            roomHeight = (topLevel.Elevation - bottomLevel.Elevation) + (topOffset - bottomOffset);\r\n            roomHeight = UnitUtil.ScaleLength(roomHeight);\r\n         }\r\n\r\n         if (MathUtil.IsAlmostZero(roomHeight))\r\n         {\r\n            double levelHeight = ExporterCacheManager.LevelInfoCache.FindHeight(levelId);\r\n            if (levelHeight < 0.0)\r\n               levelHeight = LevelUtil.CalculateDistanceToNextLevel(document, levelId, levelInfo);\r\n\r\n            roomHeight = UnitUtil.ScaleLength(levelHeight);\r\n         }\r\n\r\n         // For area spaces, we assign a dummy height (1 unit), as we are not allowed to export IfcSpaces without a volumetric representation.\r\n         if (MathUtil.IsAlmostZero(roomHeight) && spatialElement is Area)\r\n         {\r\n            roomHeight = 1.0;\r\n         }\r\n\r\n         return roomHeight;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the offset of the space boundary.\r\n      /// </summary>\r\n      /// <param name=\"setter\">The placement settter.</param>\r\n      /// <returns>The offset.</returns>\r\n      static XYZ GetSpaceBoundaryOffset(PlacementSetter setter)\r\n      {\r\n         IFCAnyHandle localPlacement = setter.LocalPlacement;\r\n         double zOffset = setter.Offset;\r\n\r\n         IFCAnyHandle relPlacement = GeometryUtil.GetRelativePlacementFromLocalPlacement(localPlacement);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(relPlacement))\r\n         {\r\n            IFCAnyHandle ptHnd = IFCAnyHandleUtil.GetLocation(relPlacement);\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(ptHnd))\r\n            {\r\n               IList<double> addToCoords = IFCAnyHandleUtil.GetCoordinates(ptHnd);\r\n               return new XYZ(addToCoords[0], addToCoords[1], addToCoords[2] + zOffset);\r\n            }\r\n         }\r\n\r\n         return new XYZ(0, 0, zOffset);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates space boundary.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"boundary\">The space boundary object.</param>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <returns>True if processed successfully, false otherwise.</returns>\r\n      public static bool ProcessIFCSpaceBoundary(ExporterIFC exporterIFC, SpaceBoundary boundary,\r\n         IFCFile file)\r\n      {\r\n         string ifcSpaceBoundaryName = string.Empty;\r\n         if (ExporterCacheManager.ExportOptionsCache.SpaceBoundaryLevel == 1)\r\n            ifcSpaceBoundaryName = \"1stLevel\";\r\n         else if (ExporterCacheManager.ExportOptionsCache.SpaceBoundaryLevel == 2)\r\n            ifcSpaceBoundaryName = \"2ndLevel\";\r\n\r\n         IFCAnyHandle spatialElemHnd = ExporterCacheManager.SpaceInfoCache.FindSpaceHandle(boundary.SpatialElementId);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(spatialElemHnd))\r\n            return false;\r\n\r\n         IFCPhysicalOrVirtual boundaryType = boundary.SpaceBoundaryType;\r\n         IFCAnyHandle buildingElemHnd = null;\r\n         if (boundaryType == IFCPhysicalOrVirtual.Physical)\r\n         {\r\n            buildingElemHnd = exporterIFC.FindSpaceBoundingElementHandle(boundary.NonSpatialElementId, boundary.LevelId);\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(buildingElemHnd))\r\n               return false;\r\n         }\r\n\r\n         string hashCode = boundary.GetBoundaryHashCode();\r\n         string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n            GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelSpaceBoundary, hashCode));\r\n\r\n         IFCInstanceExporter.CreateRelSpaceBoundary(file, guid,\r\n            ExporterCacheManager.OwnerHistoryHandle, ifcSpaceBoundaryName, null,\r\n            spatialElemHnd, buildingElemHnd, boundary.ConnectionGeometryHandle, boundaryType,\r\n            boundary.InternalOrExternal);\r\n\r\n         return true;\r\n      }\r\n\r\n      private static IFCAnyHandle CreateGenericSpaceType(IFCFile file, IFCExportInfoPair exportInfo)\r\n      {\r\n         // Can't search for null.\r\n         string typeKey = exportInfo.PredefinedType ?? \"NOTDEFINED\";\r\n         if (!ExporterCacheManager.SpaceTypeCache.TryGetValue(typeKey, out IFCAnyHandle type))\r\n         {\r\n            string guidKey = \"IfcSpaceType: \" + typeKey;\r\n            GUIDUtil.GUIDString guidString = new(guidKey, GUIDUtil.GUIDString.KeyType.Hash);\r\n            string guid = GUIDUtil.GenerateIFCGuidFrom(guidString);\r\n            type = IFCInstanceExporter.CreateSpaceType(file, null, guid, null, null, typeKey);\r\n            IFCAnyHandleUtil.SetAttribute(type, \"Name\", typeKey);\r\n            ExporterCacheManager.SpaceTypeCache.Add(typeKey, type);\r\n         }\r\n\r\n         return type;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates COBIESpaceClassifications.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC.</param>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"spaceHnd\">The space handle.</param>\r\n      /// <param name=\"spatialElement\">The spatial element.</param>\r\n      private static void CreateCOBIESpaceClassifications(IFCFile file, IFCAnyHandle spaceHnd,\r\n         SpatialElement spatialElement)\r\n      {\r\n         string bimStandardsLocation = ExporterCacheManager.ClassificationCache.GetBIMStandardsURL(spatialElement);\r\n         \r\n         // OCCS - Space by Function.\r\n         if (ParameterUtil.GetStringValueFromElement(spatialElement, \"OmniClass Number\", out string itemReference) != null)\r\n         {\r\n            string itemName;\r\n            ParameterUtil.GetStringValueFromElement(spatialElement, \"OmniClass Title\", out itemName);\r\n\r\n            IFCAnyHandle classification;\r\n            if (!ExporterCacheManager.ClassificationCache.ClassificationHandles.TryGetValue(\"OmniClass\", out classification))\r\n            {\r\n               classification = IFCInstanceExporter.CreateClassification(file, \"CSI (Construction Specifications Institute)\", \"v 1.0\", 0, 0, 0, \r\n                  \"OmniClass\", \"OmniClass Classification\", \"http://www.omniclass.org\");\r\n               ExporterCacheManager.ClassificationCache.ClassificationHandles.Add(\"OmniClass\", classification);\r\n            }\r\n\r\n            string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(spatialElement, \"IfcRelAssociatesClassification: OmniClass\"));\r\n            ClassificationReferenceKey key = new ClassificationReferenceKey(\r\n               \"http://www.omniclass.org/tables/OmniClass_13_2006-03-28.pdf\", itemReference,\r\n               itemName, null, classification);\r\n            ExporterCacheManager.ClassificationCache.AddRelation(file, key, guid, null,\r\n               spaceHnd);\r\n         }\r\n\r\n         // Space Type (Owner)\r\n         CreateOneCOBIEClassificationReference(file, spatialElement, spaceHnd, null, \r\n            \"Space Type (Owner)\", bimStandardsLocation);\r\n\r\n         // Space Category (Owner)\r\n         CreateOneCOBIEClassificationReference(file, spatialElement, spaceHnd, null,\r\n            \"Space Category (Owner)\", bimStandardsLocation);\r\n\r\n         // Space Category (BOMA)\r\n         CreateOneCOBIEClassificationReference(file, spatialElement, spaceHnd, null,\r\n            \"Space Category (BOMA)\", \"http://www.BOMA.org\");\r\n      }\r\n\r\n      static void AddAreaToAreaScheme(Element spatialElement, IFCAnyHandle spaceHnd)\r\n      {\r\n         Element areaScheme = (spatialElement as Area)?.AreaScheme;\r\n\r\n         if (areaScheme != null)\r\n         {\r\n            ElementId areaSchemeId = areaScheme.Id;\r\n            HashSet<IFCAnyHandle> areas = null;\r\n            if (!ExporterCacheManager.AreaSchemeCache.TryGetValue(areaSchemeId, out areas))\r\n            {\r\n               areas = new HashSet<IFCAnyHandle>();\r\n               ExporterCacheManager.AreaSchemeCache[areaSchemeId] = areas;\r\n            }\r\n            areas.Add(spaceHnd);\r\n         }\r\n      }\r\n\r\n      static IFCAnyHandle CreateExtrudedShape(ExporterIFC exporterIFC, IFCFile file, Element spatialElement, GeometryElement geomElem,\r\n         IList<CurveLoop> curveLoops, double scaledRoomHeight, Transform lcs, ElementId catId)\r\n      {\r\n         IFCAnyHandle shapeRep = ExtrusionExporter.CreateExtrudedSolidFromCurveLoop(exporterIFC, null, curveLoops, lcs, XYZ.BasisZ, scaledRoomHeight, true, out _);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(shapeRep))\r\n         {\r\n            return null;\r\n         }\r\n\r\n         // Spaces shouldn't have styled items.\r\n         HashSet<IFCAnyHandle> bodyItems = new HashSet<IFCAnyHandle>() { shapeRep };\r\n\r\n         IFCAnyHandle contextOfItems = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Body);\r\n         shapeRep = RepresentationUtil.CreateSweptSolidRep(exporterIFC, spatialElement, catId, contextOfItems, bodyItems, null, null);\r\n         IList<IFCAnyHandle> shapeReps = new List<IFCAnyHandle>() { shapeRep };\r\n\r\n         IFCAnyHandle boundingBoxRep = BoundingBoxExporter.ExportBoundingBox(exporterIFC, geomElem, Transform.Identity);\r\n         if (boundingBoxRep != null)\r\n            shapeReps.Add(boundingBoxRep);\r\n\r\n         return IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, shapeReps);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IFC room/space/area item, not include boundaries. \r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"spatialElement\">The spatial element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      /// <param name=\"setter\">The PlacementSetter.</param>\r\n      /// <returns>Returns the created handle, or null.</returns>\r\n      static IFCAnyHandle CreateIFCSpace(ExporterIFC exporterIFC, SpatialElement spatialElement, ProductWrapper productWrapper,\r\n          PlacementSetter setter, IFCExportInfoPair exportInfo, out SpatialElementGeometryResults results)\r\n      {\r\n         results = null;\r\n\r\n         if (exportInfo == null)\r\n            exportInfo = new IFCExportInfoPair(IFCEntityType.IfcSpace);\r\n\r\n         // Avoid throwing for a spatial element with no location.\r\n         if (spatialElement.Location == null)\r\n            return null;\r\n\r\n         IList<CurveLoop> curveLoops = null;\r\n         GeometryElement geomElem = null;\r\n\r\n         Area spatialElementAsArea = spatialElement as Area;\r\n\r\n         // Advanced Option Use2DRoomBoundaryForRoomVolumeCreation --> No Geometry Element used.\r\n         if (!ExporterCacheManager.ExportOptionsCache.Use2DRoomBoundaryForRoomVolumeCreation)\r\n         {\r\n            geomElem = (spatialElement as Autodesk.Revit.DB.Architecture.Room)?.ClosedShell;\r\n            if (geomElem == null)\r\n            {\r\n               geomElem = (spatialElement as Autodesk.Revit.DB.Mechanical.Space)?.ClosedShell;\r\n               if (geomElem == null && spatialElementAsArea != null)\r\n               {\r\n                  Options geomOptions = GeometryUtil.GetIFCExportGeometryOptions();\r\n                  geomElem = spatialElementAsArea.get_Geometry(geomOptions);\r\n               }\r\n            }\r\n         }\r\n\r\n         // If the override container parameter is detected, the LevelInfo and LocalPlacement will be overridden\r\n         IFCAnyHandle overrideContainer;\r\n         ElementId overrideContainerId = ParameterUtil.OverrideContainmentParameter(spatialElement, out overrideContainer);\r\n\r\n         ElementId levelId = spatialElement.LevelId;\r\n         IFCLevelInfo levelInfo = ExporterCacheManager.LevelInfoCache.GetLevelInfo(levelId);\r\n\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(overrideContainer))\r\n         {\r\n            if (overrideContainerId != ElementId.InvalidElementId)\r\n            {\r\n               levelInfo = ExporterCacheManager.LevelInfoCache.GetLevelInfo(overrideContainerId);\r\n               levelId = overrideContainerId;\r\n            }\r\n            else\r\n            {\r\n               levelInfo = null;    //Reset LevelInfo, since the override container does not have an associated element\r\n            }\r\n         }\r\n\r\n         double scaledRoomHeight = GetScaledHeight(spatialElement, levelId, levelInfo);\r\n         if (scaledRoomHeight <= 0.0)\r\n            return null;\r\n\r\n         double dArea = 0.0;  // Will be calculated later.\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         IFCAnyHandle spaceHnd = null;\r\n         using (IFCExportBodyParams extraParams = new())\r\n         {\r\n            IFCAnyHandle localPlacement = setter.LocalPlacement;\r\n\r\n            extraParams.SetLocalPlacement(localPlacement);\r\n            extraParams.PossibleExtrusionAxes = IFCExtrusionAxes.TryZ;\r\n\r\n            using (IFCTransaction transaction2 = new(file))\r\n            {\r\n               ElementId catId = CategoryUtil.GetSafeCategoryId(spatialElement);\r\n\r\n               // 'SweptSolid' requires CurveLoops for its 'Body' geometry.\r\n               // 'BRep' requires CurveLoops for mandatory 'Footprint' geometry only.\r\n               IFCAnyHandle repHnd = null;\r\n               SpatialElementBoundaryOptions options = GetSpatialElementBoundaryOptions(spatialElement);\r\n\r\n               try\r\n               {\r\n                  curveLoops = ExporterIFCUtils.GetRoomBoundaryAsCurveLoopArray(spatialElement, options, true);\r\n                  if (curveLoops == null || curveLoops.Count == 0)\r\n                     return null;\r\n               }\r\n               catch\r\n               {\r\n                  return null;\r\n               }\r\n\r\n               double elevation = spatialElement.Level?.Elevation ?? 0.0;\r\n               ParameterUtil.GetDoubleValueFromElement(spatialElement, BuiltInParameter.ROOM_LOWER_OFFSET, out double bottomOffset);\r\n               double relativeBaseElevation = GetLevelRelativeBaseElevation(spatialElement); \r\n\r\n               XYZ orig = new(0, 0, elevation + bottomOffset + relativeBaseElevation);\r\n               Transform lcs = Transform.CreateTranslation(orig); // room calculated as level offset.\r\n\r\n               // Attempt 1:  'SweptSolid' IfcShapeRepresentation (with a 'BoudingBox').\r\n               // For Use2DRoomBoundaryForRoomVolumeCreation no Bounding Box will be created.\r\n               bool tryCreateExtrudedShapeFirst = ExporterCacheManager.ExportOptionsCache.Use2DRoomBoundaryForRoomVolumeCreation || geomElem == null;\r\n               if (tryCreateExtrudedShapeFirst)\r\n               {\r\n                  repHnd = CreateExtrudedShape(exporterIFC, file, spatialElement, geomElem, curveLoops, scaledRoomHeight, lcs, catId);\r\n               }\r\n\r\n               // Attempt 2:  'BRep' IfcShapeRepresentation and 'Footprint' IfcShapeRepresentation.\r\n               // This will not run for Use2DRoomBoundaryForRoomVolumeCreation advanced option.\r\n               if ((repHnd == null) && (geomElem != null))\r\n               {\r\n                  // Attempt to create Body Geometry for IfcSpace.\r\n                  BodyData bodyData;\r\n                  BodyExporterOptions bodyExporterOptions = new(true, ExportOptionsCache.ExportTessellationLevel.Medium);\r\n                  repHnd = RepresentationUtil.CreateAppropriateProductDefinitionShape(exporterIFC, spatialElement,\r\n                      catId, geomElem, bodyExporterOptions, null, extraParams, out bodyData, false);\r\n\r\n                  if (!IFCAnyHandleUtil.IsNullOrHasNoValue(repHnd))\r\n                  {\r\n                     if (bodyData.RepresentationHnd == null)\r\n                     {\r\n                        repHnd = null;\r\n                     }\r\n                     else if (bodyData.ShapeRepresentationType == ShapeRepresentationType.Brep)\r\n                     {\r\n                        FootPrintInfo fInfo = new(curveLoops, lcs);\r\n                        IFCAnyHandle footprintShapeRep = fInfo.CreateFootprintShapeRepresentation(exporterIFC);\r\n                        List<IFCAnyHandle> representations = [ footprintShapeRep ];\r\n                        IFCAnyHandleUtil.AddRepresentations(repHnd, representations);\r\n                     }\r\n                  }\r\n               }\r\n\r\n               // Attempt 3 (final fallback): Try 'SweptSolid' using the CurveLoops, forcing the Use2DRoomBoundaryForRoomVolumeCreation option.\r\n               // If the Use2DRoomBoundaryForRoomVolumeCreation was already set, this was already done for attempt 1, so there is no need to  do it again here.\r\n               // Also the CurveLoops were used to build the FootPrint, so this should be equivalent to using any 'FootPrint' alternate representation.\r\n               if ((repHnd == null) && !tryCreateExtrudedShapeFirst)\r\n               {\r\n                  repHnd = CreateExtrudedShape(exporterIFC, file, spatialElement, geomElem,\r\n                     curveLoops, scaledRoomHeight, lcs, catId);\r\n               }\r\n\r\n               if (ParameterUtil.GetDoubleValueFromElement(spatialElement, BuiltInParameter.ROOM_AREA, out dArea) != null)\r\n                  dArea = UnitUtil.ScaleArea(dArea);\r\n\r\n               extraParams.ScaledHeight = scaledRoomHeight;\r\n               extraParams.ScaledArea = dArea;\r\n\r\n               double outerPerimeter = ExtrusionExporter.ComputeOuterPerimeterOfCurveLoops(curveLoops);\r\n               if (outerPerimeter > 0.0)\r\n                  extraParams.ScaledOuterPerimeter = UnitUtil.ScaleLength(outerPerimeter);\r\n\r\n               if (exportInfo.ExportInstance == IFCEntityType.IfcSpace)\r\n               {\r\n                  IFCInternalOrExternal internalOrExternal = IFCInternalOrExternal.NotDefined;\r\n                  if(CategoryUtil.IsElementExternal(spatialElement).HasValue)\r\n                     internalOrExternal = CategoryUtil.IsElementExternal(spatialElement).Value ? IFCInternalOrExternal.External : IFCInternalOrExternal.Internal;\r\n                  \r\n                  string preDefinedType = exportInfo.GetPredefinedTypeOrDefault();\r\n\r\n                  spaceHnd = IFCInstanceExporter.CreateSpace(exporterIFC, spatialElement, \r\n                     GUIDUtil.CreateGUID(spatialElement), ExporterCacheManager.OwnerHistoryHandle,\r\n                     extraParams.GetLocalPlacement(), repHnd, IFCElementComposition.Element,\r\n                     internalOrExternal, preDefinedType);\r\n               }\r\n               else\r\n               {\r\n                  spaceHnd = IFCInstanceExporter.CreateGenericIFCEntity(exportInfo, file, \r\n                     spatialElement, GUIDUtil.CreateGUID(spatialElement), \r\n                     ExporterCacheManager.OwnerHistoryHandle, extraParams.GetLocalPlacement(), repHnd);\r\n               }\r\n\r\n               IFCAnyHandle type = null;\r\n               switch (exportInfo.ExportType)\r\n               {\r\n                  case IFCEntityType.IfcSpace:\r\n                  case IFCEntityType.IfcSpaceType:\r\n                     type = CreateGenericSpaceType(file, exportInfo);\r\n                     break;\r\n                  case IFCEntityType.UnKnown:\r\n                     break;\r\n                  default:\r\n                     type = ExporterUtil.CreateGenericTypeFromElement(spatialElement, exportInfo, file, productWrapper);\r\n                     break;\r\n               }\r\n\r\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(type))\r\n               {\r\n                  ExporterCacheManager.TypeRelationsCache.Add(type, spaceHnd);\r\n               }\r\n\r\n               transaction2.Commit();\r\n            }\r\n\r\n            if (spaceHnd != null)\r\n            {\r\n               productWrapper.AddSpace(spatialElement, spaceHnd, levelInfo, extraParams, true, exportInfo);\r\n               AddAreaToAreaScheme(spatialElement, spaceHnd);\r\n            }\r\n         }\r\n\r\n         // Save room handle for later use/relationships\r\n         ExporterCacheManager.SpaceInfoCache.SetSpaceHandle(spatialElement, spaceHnd);\r\n\r\n         // Find Ceiling as a Space boundary and keep the relationship in a cache for use later\r\n         GetCeilingSpaceBoundary(spatialElement, out results);\r\n\r\n         if (!MathUtil.IsAlmostZero(dArea))\r\n         {\r\n            // TODO: Determine if we even need this for IFC2x2, or just IFC2x3.  This is a workaround for the pre-2010 GSA requirements, that don't have their own MVD.\r\n            bool mvdSupportDesignGrossArea = ExporterCacheManager.ExportOptionsCache.ExportAs2x2 || ExporterCacheManager.ExportOptionsCache.ExportAs2x3CoordinationView1;\r\n            bool addonMVDSupportDesignGrossArea = !ExporterCacheManager.ExportIFCBaseQuantities();\r\n            if (mvdSupportDesignGrossArea && addonMVDSupportDesignGrossArea)\r\n            {\r\n               string strSpaceNumber = null;\r\n               if (ParameterUtil.GetStringValueFromElement(spatialElement, BuiltInParameter.ROOM_NUMBER, out strSpaceNumber) == null)\r\n                  strSpaceNumber = null;\r\n\r\n               string spatialElementName = NamingUtil.GetNameOverride(spatialElement, strSpaceNumber);\r\n\r\n               bool isDesignGrossArea = (string.Compare(spatialElementName, \"GSA Design Gross Area\") > 0);\r\n               PropertyUtil.CreatePreCOBIEGSAQuantities(exporterIFC, spaceHnd, \"GSA Space Areas\", (isDesignGrossArea ? \"GSA Design Gross Area\" : \"GSA BIM Area\"), dArea);\r\n            }\r\n         }\r\n\r\n         // Export Classifications for SpatialElement for GSA/COBIE.\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsCOBIE)\r\n            CreateCOBIESpaceClassifications(file, spaceHnd, spatialElement);\r\n\r\n         return spaceHnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the level relative base elevation.\r\n      /// </summary>\r\n      /// <param name=\"spatialElement\">The spatial element.</param>\r\n      /// <returns>The level relative base elevation.</returns>\r\n      static double GetLevelRelativeBaseElevation(SpatialElement spatialElement)\r\n      {\r\n         ElementType levelType = spatialElement.Document?.GetElement(spatialElement.Level.GetTypeId()) as ElementType;\r\n         Parameter elevBaseParam = levelType?.get_Parameter(BuiltInParameter.LEVEL_RELATIVE_BASE_TYPE);\r\n         int elevBase = elevBaseParam?.AsInteger() ?? -1;\r\n\r\n         // 0 = Project Base Point, 1 = Survey Point\r\n         if (elevBase != 0 && elevBase != 1)\r\n            return 0.0;\r\n\r\n         BasePoint elevBasePoint = (elevBase == 0) ? BasePoint.GetProjectBasePoint(spatialElement.Document)\r\n            : BasePoint.GetSurveyPoint(spatialElement.Document);\r\n\r\n         return (elevBase == 0) ? elevBasePoint?.Position?.Z ?? 0.0\r\n            : (elevBasePoint?.Position?.Z ?? 0.0) - (elevBasePoint?.SharedPosition?.Z ?? 0.0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collect relationship information from Ceiling to Room to be used later to determine whether a Ceiling can be contained in a Room\r\n      /// </summary>\r\n      /// <param name=\"spatialElement\">The revit spatial object to process</param>\r\n      /// <param name=\"results\">The results of the CalculateSpatialElementGeometry call, for caching for later use.</param>\r\n      /// <returns>True if it found a ceiling, false otherwise.</returns>\r\n      static private bool GetCeilingSpaceBoundary(SpatialElement spatialElement, out SpatialElementGeometryResults results)\r\n      {\r\n         results = null;\r\n\r\n         // Areas don't have a 3D rep, so no ceiling space boundaries.\r\n         if (spatialElement is Area)\r\n            return false;\r\n\r\n         // Represents the criteria for boundary elements to be considered bounding Ceiling\r\n         LogicalOrFilter categoryFilter = new LogicalOrFilter(new ElementCategoryFilter(BuiltInCategory.OST_Ceilings),\r\n                                                     new ElementCategoryFilter(BuiltInCategory.OST_Ceilings));\r\n\r\n         try\r\n         {\r\n            if (s_SpatialElementGeometryCalculator == null)\r\n               return false;\r\n            results = s_SpatialElementGeometryCalculator.CalculateSpatialElementGeometry(spatialElement);\r\n         }\r\n         catch\r\n         {\r\n            return false;\r\n         }\r\n\r\n         Solid geometry = results.GetGeometry();\r\n\r\n         // Go through the boundary faces to identify whether it is bounded by a Ceiling. If it is Ceiling, add into the Cache\r\n         foreach (Face face in geometry.Faces)\r\n         {\r\n            IList<SpatialElementBoundarySubface> boundaryFaces = results.GetBoundaryFaceInfo(face);\r\n            foreach (SpatialElementBoundarySubface boundaryFace in boundaryFaces)\r\n            {\r\n               // Get boundary element\r\n               LinkElementId boundaryElementId = boundaryFace.SpatialBoundaryElement;\r\n\r\n               // Only considering local file room bounding elements\r\n               ElementId localElementId = boundaryElementId.HostElementId;\r\n               // Evaluate if element meets criteria using PassesFilter()\r\n               if (localElementId != ElementId.InvalidElementId && categoryFilter.PassesFilter(spatialElement.Document, localElementId))\r\n               {\r\n                  if (ExporterCacheManager.CeilingSpaceRelCache.ContainsKey(localElementId))\r\n                  {\r\n                     // The ceiling already exists in the Dictionary, add the Space into list\r\n                     IList<ElementId> roomlist = ExporterCacheManager.CeilingSpaceRelCache[localElementId];\r\n                     roomlist.Add(spatialElement.Id);\r\n                  }\r\n                  else\r\n                  {\r\n                     // The first time this Ceiling Id appears\r\n                     IList<ElementId> roomlist = new List<ElementId>();\r\n                     roomlist.Add(spatialElement.Id);\r\n                     ExporterCacheManager.CeilingSpaceRelCache.Add(localElementId, roomlist);\r\n                  }\r\n\r\n               }\r\n            }\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates spatial zone energy analysis property set.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC.</param>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The handle.</returns>\r\n      static private IFCAnyHandle CreateSpatialZoneEnergyAnalysisPSet(IFCFile file, Element element)\r\n      {\r\n         // Property Sets.  We don't use the generic Property Set mechanism because Zones aren't \"real\" elements.\r\n         HashSet<IFCAnyHandle> properties = new HashSet<IFCAnyHandle>();\r\n\r\n         string paramValue = \"\";\r\n         if (ParameterUtil.GetStringValueFromElement(element, \"Spatial Zone Conditioning Requirement\", out paramValue) != null)\r\n         {\r\n            IFCData paramVal = IFCDataUtil.CreateAsLabel(paramValue);\r\n            ParameterUtil.PropertyDescription propertyDescription = new(\"SpatialZoneConditioningRequirement\");\r\n            IFCAnyHandle propSingleValue = IFCInstanceExporter.CreatePropertySingleValue(file,\r\n               propertyDescription, paramVal, null);\r\n            properties.Add(propSingleValue);\r\n         }\r\n\r\n         if (ParameterUtil.GetStringValueFromElement(element, \"HVAC System Type\", out paramValue) != null)\r\n         {\r\n            IFCData paramVal = IFCDataUtil.CreateAsLabel(paramValue);\r\n            ParameterUtil.PropertyDescription propertyDescription = new(\"HVACSystemType\");\r\n            IFCAnyHandle propSingleValue = IFCInstanceExporter.CreatePropertySingleValue(file, propertyDescription, paramVal, null);\r\n            properties.Add(propSingleValue);\r\n         }\r\n\r\n         if (ParameterUtil.GetStringValueFromElement(element, \"User Defined HVAC System Type\", out paramValue) != null)\r\n         {\r\n            IFCData paramVal = IFCDataUtil.CreateAsLabel(paramValue);\r\n            ParameterUtil.PropertyDescription propertyDescription = new(\"UserDefinedHVACSystemType\");\r\n            IFCAnyHandle propSingleValue = IFCInstanceExporter.CreatePropertySingleValue(file,\r\n               propertyDescription, paramVal, null);\r\n            properties.Add(propSingleValue);\r\n         }\r\n\r\n         double infiltrationRate = 0.0;\r\n         if (ParameterUtil.GetDoubleValueFromElement(element, \"Infiltration Rate\", out infiltrationRate) != null)\r\n         {\r\n            IFCData paramVal = IFCDataUtil.CreateAsReal(infiltrationRate);\r\n            IFCAnyHandle unitHnd = !ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView ? ExporterCacheManager.UnitsCache.FindUserDefinedUnit(\"ACH\") : null;\r\n            ParameterUtil.PropertyDescription propertyDescription = new(\"InfiltrationRate\");\r\n            IFCAnyHandle propSingleValue = IFCInstanceExporter.CreatePropertySingleValue(file, propertyDescription, paramVal, unitHnd);\r\n            properties.Add(propSingleValue);\r\n         }\r\n\r\n         int isDaylitZone = 0;\r\n         if (ParameterUtil.GetIntValueFromElement(element, \"Is Daylit Zone\", out isDaylitZone) != null)\r\n         {\r\n            IFCData paramVal = IFCDataUtil.CreateAsBoolean(isDaylitZone != 0);\r\n            ParameterUtil.PropertyDescription propertyDescription = new(\"IsDaylitZone\");\r\n            IFCAnyHandle propSingleValue = IFCInstanceExporter.CreatePropertySingleValue(file, propertyDescription, paramVal, null);\r\n            properties.Add(propSingleValue);\r\n         }\r\n\r\n         int numberOfDaylightSensors = 0;\r\n         if (ParameterUtil.GetIntValueFromElement(element, \"Number of Daylight Sensors\", out numberOfDaylightSensors) != null)\r\n         {\r\n            IFCData paramVal = IFCDataUtil.CreateAsInteger(numberOfDaylightSensors);\r\n            ParameterUtil.PropertyDescription propertyDescription = new(\"NumberOfDaylightSensors\");\r\n            IFCAnyHandle propSingleValue = IFCInstanceExporter.CreatePropertySingleValue(file, propertyDescription, paramVal, null);\r\n            properties.Add(propSingleValue);\r\n         }\r\n\r\n         double designIlluminance = 0.0;\r\n         if (ParameterUtil.GetDoubleValueFromElement(element, \"Design Illuminance\", out designIlluminance) != null)\r\n         {\r\n            double scaledValue = UnitUtil.ScaleIlluminance(designIlluminance);\r\n            IFCData paramVal = IFCDataUtil.CreateAsIlluminanceMeasure(designIlluminance);\r\n            ParameterUtil.PropertyDescription propertyDescription = new(\"DesignIlluminance\");\r\n            IFCAnyHandle propSingleValue = IFCInstanceExporter.CreatePropertySingleValue(file, propertyDescription, paramVal, null);\r\n            properties.Add(propSingleValue);\r\n         }\r\n\r\n         if (ParameterUtil.GetStringValueFromElement(element, \"Lighting Controls Type\", out paramValue) != null)\r\n         {\r\n            IFCData paramVal = IFCDataUtil.CreateAsLabel(paramValue);\r\n            ParameterUtil.PropertyDescription propertyDescription = new(\"LightingControlsType\");\r\n            IFCAnyHandle propSingleValue = IFCInstanceExporter.CreatePropertySingleValue(file, propertyDescription, paramVal, null);\r\n            properties.Add(propSingleValue);\r\n         }\r\n\r\n         if (properties.Count > 0)\r\n         {\r\n            string psetGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(element, \"ePset_SpatialZoneEnergyAnalysis\"));\r\n            return IFCInstanceExporter.CreatePropertySet(file, psetGuid, \r\n               ExporterCacheManager.OwnerHistoryHandle, \"ePset_SpatialZoneEnergyAnalysis\", null, properties);\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates zone common property set.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"index\">The index to use for the shared parameter names.</param>\r\n      /// <returns>The handle.</returns>\r\n      /// <summary>\r\n      /// Creates the ePset_SpaceOccupant.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The handle.</returns>\r\n      private static IFCAnyHandle CreatePSetSpaceOccupant(IFCFile file, Element element)\r\n      {\r\n         HashSet<IFCAnyHandle> properties = new HashSet<IFCAnyHandle>();\r\n\r\n         string paramValue = \"\";\r\n         if (ParameterUtil.GetStringValueFromElement(element, \"Space Occupant Organization Abbreviation\", out paramValue) != null)\r\n         {\r\n            IFCData paramVal = IFCDataUtil.CreateAsLabel(paramValue);\r\n            ParameterUtil.PropertyDescription propertyDescription = new(\"SpaceOccupantOrganizationAbbreviation\");\r\n            IFCAnyHandle propSingleValue = IFCInstanceExporter.CreatePropertySingleValue(file,\r\n               propertyDescription, paramVal, null);\r\n            properties.Add(propSingleValue);\r\n         }\r\n\r\n         if (ParameterUtil.GetStringValueFromElement(element, \"Space Occupant Organization Name\", out paramValue) != null)\r\n         {\r\n            IFCData paramVal = IFCDataUtil.CreateAsLabel(paramValue);\r\n            ParameterUtil.PropertyDescription propertyDescription = new(\"SpaceOccupantOrganizationName\");\r\n            IFCAnyHandle propSingleValue = IFCInstanceExporter.CreatePropertySingleValue(file, propertyDescription,\r\n               paramVal, null);\r\n            properties.Add(propSingleValue);\r\n         }\r\n\r\n         if (properties.Count > 0)\r\n         {\r\n            string psetGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(element, \"ePset_SpaceOccupant\"));\r\n            return IFCInstanceExporter.CreatePropertySet(file, psetGuid, \r\n               ExporterCacheManager.OwnerHistoryHandle, \"ePset_SpaceOccupant\", null, properties);\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      static void CreateOneCOBIEClassificationReference(IFCFile file, Element element, \r\n         IFCAnyHandle spaceHnd, IDictionary<string, IFCAnyHandle> classificationHandles,\r\n         string name, string location)\r\n      {\r\n         IFCAnyHandle handle = null;\r\n         if (classificationHandles?.TryGetValue(name, out handle) ?? false)\r\n         {\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(handle))\r\n               return;\r\n         }\r\n\r\n         string itemReference;\r\n         if (ParameterUtil.GetStringValueFromElementOrSymbol(element, name + \" Reference\", out itemReference) != null)\r\n         {\r\n            string itemName;\r\n            ParameterUtil.GetStringValueFromElementOrSymbol(element, name + \" Name\", out itemName);\r\n\r\n            ClassificationReferenceKey key = new ClassificationReferenceKey(location, \r\n               itemReference, itemName, null, null);\r\n            string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(element, \"IfcRelAssociatesClassification: \" + name));\r\n            IFCAnyHandle classificationReference = ExporterCacheManager.ClassificationCache.AddRelation(\r\n               file, key, guid, null, spaceHnd);\r\n\r\n            if (classificationHandles != null)\r\n               classificationHandles[name] = classificationReference;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collect information to create space occupants and cache them to create when end export.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporterIFC object.</param>\r\n      /// <param name=\"file\">The IFCFile object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"spaceHnd\">The space handle.</param>\r\n      public static void CreateSpaceOccupantInfo(IFCFile file, Element element, IFCAnyHandle spaceHnd)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(spaceHnd))\r\n         {\r\n            return;\r\n         }\r\n\r\n         bool exportToCOBIE = ExporterCacheManager.ExportOptionsCache.ExportAsCOBIE;\r\n\r\n         string name;\r\n         if (ParameterUtil.GetStringValueFromElement(element, \"Occupant\", out name) != null)\r\n         {\r\n            string location = exportToCOBIE ?\r\n               ExporterCacheManager.ClassificationCache.GetBIMStandardsURL(element) : null;\r\n\r\n            Dictionary<string, IFCAnyHandle> classificationReferences;\r\n            SpaceOccupantInfo spaceOccupantInfo = ExporterCacheManager.SpaceOccupantInfoCache.Find(name);\r\n            if (spaceOccupantInfo == null)\r\n            {\r\n               classificationReferences = new Dictionary<string, IFCAnyHandle>();\r\n               spaceOccupantInfo = new SpaceOccupantInfo(spaceHnd, classificationReferences, null);\r\n               ExporterCacheManager.SpaceOccupantInfoCache.Register(name, spaceOccupantInfo);\r\n            }\r\n            else\r\n            {\r\n               spaceOccupantInfo.RoomHandles.Add(spaceHnd);\r\n               classificationReferences = spaceOccupantInfo.ClassificationReferences;\r\n            }\r\n\r\n            if (exportToCOBIE)\r\n            {\r\n               CreateOneCOBIEClassificationReference(file, element, spaceHnd, classificationReferences,\r\n                  \"Space Occupant Organization ID\", location);\r\n\r\n               CreateOneCOBIEClassificationReference(file, element, spaceHnd, classificationReferences,\r\n                  \"Space Occupant Sub-Organization ID\", location);\r\n\r\n               CreateOneCOBIEClassificationReference(file, element, spaceHnd, classificationReferences,\r\n                  \"Space Occupant Organization Billing ID\", location);\r\n            }\r\n\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(spaceOccupantInfo.SpaceOccupantProperySetHandle))\r\n            {\r\n               // Look for Parameter Set definition.  We don't use the general approach as\r\n               // Space Occupants are not \"real\" elements.\r\n               spaceOccupantInfo.SpaceOccupantProperySetHandle = \r\n                  CreatePSetSpaceOccupant(file, element);\r\n            }\r\n         }\r\n      }\r\n\r\n      static private void CreateOneGSAClassification(IFCFile file, ZoneInfo zoneInfo, \r\n         string name, string location, Element element)\r\n      {\r\n         if (!zoneInfo.ClassificationReferences.ContainsKey(name))\r\n         {\r\n            if (ParameterUtil.GetStringValueFromElementOrSymbol(element, name + \" Reference\", out string itemReference) != null)\r\n            {\r\n               ParameterUtil.GetStringValueFromElementOrSymbol(element, name + \" Name\", out string itemName);\r\n\r\n               ClassificationReferenceKey key = new ClassificationReferenceKey(location,\r\n                  itemReference, itemName, null, null);\r\n               IFCAnyHandle classificationReference =\r\n                  ExporterCacheManager.ClassificationCache.FindOrCreateClassificationReference(file, key);\r\n               zoneInfo.ClassificationReferences[name] = classificationReference;\r\n            }\r\n         }\r\n      }\r\n\r\n      static private void CreateGSAInformation(IFCFile file, Element element, \r\n         ZoneInfo zoneInfo, string zoneObjectType)\r\n      {\r\n         bool isSpatialZone = NamingUtil.IsEqualIgnoringCaseAndSpaces(zoneObjectType, \"SpatialZone\");\r\n         if (isSpatialZone)\r\n         {\r\n            // Classifications.\r\n            string location = ExporterCacheManager.ClassificationCache.GetBIMStandardsURL(element);\r\n\r\n            // Spatial Zone Type (Owner)\r\n            CreateOneGSAClassification(file, zoneInfo, \"Spatial Zone Type (Owner)\", location, element);\r\n\r\n            // Spatial Zone Security Level (Owner)\r\n            CreateOneGSAClassification(file, zoneInfo, \"Spatial Zone Security Level (Owner)\", location, element);\r\n\r\n            // Spatial Zone Type (Energy Analysis)\r\n            if (!zoneInfo.ClassificationReferences.ContainsKey(\"ASHRAE Zone Type\"))\r\n            { \r\n               if (ParameterUtil.GetStringValueFromElementOrSymbol(element, \"ASHRAE Zone Type\", \r\n                  out string itemName) != null)\r\n               {\r\n                  ClassificationReferenceKey key = new ClassificationReferenceKey(\"ASHRAE 90.1\", \r\n                     \"Common Space Type\", itemName, null, null);\r\n                  IFCAnyHandle classificationReference =\r\n                     ExporterCacheManager.ClassificationCache.FindOrCreateClassificationReference(file, key);\r\n                  zoneInfo.ClassificationReferences[\"ASHRAE Zone Type\"] = classificationReference;\r\n               }\r\n            }\r\n         }\r\n\r\n         if (isSpatialZone || NamingUtil.IsEqualIgnoringCaseAndSpaces(zoneObjectType, \"EnergyAnalysisZone\"))\r\n         {\r\n            // Property Sets.  We don't use the generic Property Set mechanism because Zones aren't \"real\" elements.\r\n            CreateSpatialZoneEnergyAnalysisPSet(file, element);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collect information to create zones and cache them to create when end export.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFCFile object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"spaceHandle\">The space handle.</param>\r\n      static public void CreateZoneInfos(IFCFile file, Element element, IFCAnyHandle spaceHandle)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(spaceHandle))\r\n         {\r\n            return;\r\n         }\r\n\r\n         bool exportToCOBIE = ExporterCacheManager.ExportOptionsCache.ExportAsCOBIE;\r\n\r\n         // Extra zone information, since Revit doesn't have architectural zones.\r\n         ZoneInfoFinder zoneInfoFinder = new ZoneInfoFinder();\r\n\r\n         do\r\n         {\r\n            bool hasZoneValues = zoneInfoFinder.SetPropZoneValues(element);\r\n            if (!hasZoneValues)\r\n               break;\r\n\r\n            // If we have an empty zone name, but the value exists, keep looking to make sure there aren't valid values later.\r\n            string zoneName = zoneInfoFinder.GetPropZoneValue(ZoneInfoLabel.Name);\r\n            if (string.IsNullOrWhiteSpace(zoneName))\r\n               continue;\r\n\r\n            string zoneClassificationCode = zoneInfoFinder.GetPropZoneValue(ZoneInfoLabel.ClassificationCode);\r\n            \r\n            ZoneInfo zoneInfo = ExporterCacheManager.ZoneInfoCache.Find(zoneName);\r\n            if (zoneInfo == null)\r\n            {\r\n               zoneInfo = new ZoneInfo(zoneInfoFinder, spaceHandle);\r\n               zoneInfo.CollectZoneCommonPSetData(file, element, zoneInfoFinder.CurrentZoneNumber);\r\n               zoneInfo.ConditionalAddClassification(file, zoneClassificationCode);\r\n               ExporterCacheManager.ZoneInfoCache.Register(zoneName, zoneInfo);\r\n            }\r\n            else\r\n            {\r\n               // If description, long name or object type were empty, overwrite.\r\n               zoneInfo.UpdateZoneInfo(zoneInfoFinder);\r\n               zoneInfo.RoomHandles.Add(spaceHandle);\r\n               zoneInfo.CollectZoneCommonPSetData(file, element, zoneInfoFinder.CurrentZoneNumber);\r\n               zoneInfo.ConditionalAddClassification(file, zoneClassificationCode);\r\n            }\r\n\r\n            if (exportToCOBIE)\r\n            {\r\n               string zoneObjectType = zoneInfoFinder.GetPropZoneValue(ZoneInfoLabel.ObjectType);\r\n               CreateGSAInformation(file, element, zoneInfo, zoneObjectType);\r\n            }\r\n         } while (zoneInfoFinder.IncrementCount()); // prevent infinite loop.\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determine if the export instance type is compatible with IfcZone.\r\n      /// </summary>\r\n      /// <param name=\"exportType\">The export type to check.</param>\r\n      /// <returns>True if non-null, and an entity instance type that can go in a zone.</returns>\r\n      public static bool IsZoneCompatible(IFCExportInfoPair exportType)\r\n      {\r\n         if (exportType == null)\r\n            return false;\r\n\r\n         return exportType.ExportInstance == IFCEntityType.IfcSpace ||\r\n            exportType.ExportInstance == IFCEntityType.IfcSpatialZone;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/StairRampContainerInfo.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// The class contains the components information for stairs or ramps.\r\n   /// </summary>\r\n   public class StairRampContainerInfo\r\n   {\r\n      /// <summary>\r\n      /// Stair or ramp handles.\r\n      /// </summary>\r\n      List<IFCAnyHandle> m_StairOrRampHandles;\r\n\r\n      /// <summary>\r\n      /// Sub components handles of stairs or ramps.\r\n      /// </summary>\r\n      List<List<IFCAnyHandle>> m_Components;\r\n\r\n      /// <summary>\r\n      /// Local placements.\r\n      /// </summary>\r\n      List<IFCAnyHandle> m_LocalPlacements;\r\n\r\n      /// <summary>\r\n      /// Constructs an StairRampContainerInfo.\r\n      /// </summary>\r\n      /// <param name=\"stairOrRampHandles\">The stair or ramp handles.</param>\r\n      /// <param name=\"components\">The sub components.</param>\r\n      /// <param name=\"localPlacements\">The local placements.</param>\r\n      private void Construct(List<IFCAnyHandle> stairOrRampHandles, List<List<IFCAnyHandle>> components, List<IFCAnyHandle> localPlacements)\r\n      {\r\n         m_StairOrRampHandles = stairOrRampHandles;\r\n         m_Components = components;\r\n         m_LocalPlacements = localPlacements;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an StairRampContainerInfo.\r\n      /// </summary>\r\n      /// <param name=\"stairOrRampHandles\">The stair or ramp handles.</param>\r\n      /// <param name=\"components\">The sub components.</param>\r\n      /// <param name=\"localPlacements\">The local placements.</param>\r\n      public StairRampContainerInfo(List<IFCAnyHandle> stairOrRampHandles, List<List<IFCAnyHandle>> components, List<IFCAnyHandle> localPlacements)\r\n      {\r\n         Construct(stairOrRampHandles, components, localPlacements);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an StairRampContainerInfo.\r\n      /// </summary>\r\n      /// <param name=\"stairOrRampHandle\">The stair or ramp handle.</param>\r\n      /// <param name=\"components\">The sub components.</param>\r\n      /// <param name=\"localPlacement\">The local placement.</param>\r\n      public StairRampContainerInfo(IFCAnyHandle stairOrRampHandle, List<IFCAnyHandle> components, IFCAnyHandle localPlacement)\r\n      {\r\n         List<IFCAnyHandle> stairOrRampHandles = new List<IFCAnyHandle>();\r\n         stairOrRampHandles.Add(stairOrRampHandle);\r\n\r\n         List<List<IFCAnyHandle>> componentsList = new List<List<IFCAnyHandle>>();\r\n         componentsList.Add(components);\r\n\r\n         List<IFCAnyHandle> localPlacemtns = new List<IFCAnyHandle>();\r\n         localPlacemtns.Add(localPlacement);\r\n\r\n         Construct(stairOrRampHandles, componentsList, localPlacemtns);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Stair or ramp handles.\r\n      /// </summary>\r\n      public List<IFCAnyHandle> StairOrRampHandles\r\n      {\r\n         get { return m_StairOrRampHandles; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sub components handles of stairs or ramps.\r\n      /// </summary>\r\n      public List<List<IFCAnyHandle>> Components\r\n      {\r\n         get { return m_Components; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Local placements.\r\n      /// </summary>\r\n      public List<IFCAnyHandle> LocalPlacements\r\n      {\r\n         get { return m_LocalPlacements; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a sub component to the container.\r\n      /// </summary>\r\n      /// <param name=\"index\">The index of the container.</param>\r\n      /// <param name=\"component\">The component.</param>\r\n      public void AddComponent(int index, IFCAnyHandle component)\r\n      {\r\n         if (index < 0 || index >= Components.Count)\r\n            throw new ArgumentOutOfRangeException(\"index\");\r\n\r\n         Components[index].Add(component);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/StairsExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.Architecture;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export stairs\r\n   /// </summary>\r\n   class StairsExporter\r\n   {\r\n      /// <summary>\r\n      /// The IfcMemberType shared by all stringers to keep their type.  This is a placeholder IfcMemberType.\r\n      /// </summary>\r\n      public static IFCAnyHandle GetMemberTypeHandle(ExporterIFC exporterIFC, Element stringer)\r\n      {\r\n         ElementType stringerType = stringer.Document.GetElement(stringer.GetTypeId()) as ElementType;\r\n         IFCAnyHandle memberType = ExporterCacheManager.ElementToHandleCache.Find(stringerType.Id);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(memberType))\r\n         {\r\n            IFCFile file = exporterIFC.GetFile();\r\n            memberType = IFCInstanceExporter.CreateMemberType(file, stringerType, null, null, null, IFCMemberType.Stringer.ToString());\r\n            ExporterCacheManager.ElementToHandleCache.Register(stringerType.Id, memberType);\r\n         }\r\n         return memberType;\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Determines if an element is a legacy (created in R2012 or before) Stairs element.\r\n      /// </summary>\r\n      /// <param name=\"element\">\r\n      /// The element.\r\n      /// </param>\r\n      /// <returns>\r\n      /// Returns true if the element is a legacy (created in R2012 or before) Stairs element, false otherwise.\r\n      /// </returns>\r\n      static public bool IsLegacyStairs(Element element)\r\n      {\r\n         if (CategoryUtil.GetSafeCategoryId(element) != new ElementId(BuiltInCategory.OST_Stairs))\r\n            return false;\r\n\r\n         return !(element is Stairs) && !(element is FamilyInstance) && !(element is DirectShape);\r\n      }\r\n\r\n      static private double GetDefaultHeightForLegacyStair(Document doc)\r\n      {\r\n         // The default height for legacy stairs are either 12' or 3.5m.  Figure it out based on the scale of the export, and convert to feet.\r\n         return (doc.DisplayUnitSystem == DisplayUnit.IMPERIAL) ? 12.0 : 3.5 * (100 / (12 * 2.54));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the stairs height for a legacy (R2012 or before) stairs.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"defaultHeight\">The default height of the stair, in feet.</param>\r\n      /// <returns>The unscaled height.</returns>\r\n      static public double GetStairsHeightForLegacyStair(Element element, double defaultHeight)\r\n      {\r\n         ElementId baseLevelId;\r\n         if (ParameterUtil.GetElementIdValueFromElement(element, BuiltInParameter.STAIRS_BASE_LEVEL_PARAM, out baseLevelId) == null)\r\n            return 0.0;\r\n\r\n         Level bottomLevel = element.Document.GetElement(baseLevelId) as Level;\r\n         if (bottomLevel == null)\r\n            return 0.0;\r\n         double bottomLevelElev = bottomLevel.Elevation;\r\n\r\n         ElementId topLevelId;\r\n         Level topLevel = null;\r\n         if ((ParameterUtil.GetElementIdValueFromElement(element, BuiltInParameter.STAIRS_TOP_LEVEL_PARAM, out topLevelId) != null) &&\r\n             (topLevelId != ElementId.InvalidElementId))\r\n            topLevel = element.Document.GetElement(topLevelId) as Level;\r\n\r\n         double bottomLevelOffset;\r\n         ParameterUtil.GetDoubleValueFromElement(element, BuiltInParameter.STAIRS_BASE_OFFSET, out bottomLevelOffset);\r\n\r\n         double topLevelOffset;\r\n         ParameterUtil.GetDoubleValueFromElement(element, BuiltInParameter.STAIRS_TOP_OFFSET, out topLevelOffset);\r\n\r\n         double minHeight = bottomLevelElev + bottomLevelOffset;\r\n         double maxHeight = (topLevel != null) ? topLevel.Elevation + topLevelOffset : minHeight + defaultHeight;\r\n\r\n         double stairsHeight = maxHeight - minHeight;\r\n         return stairsHeight;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the number of flights of a multi-story staircase for a legacy (R2012 or before) stairs.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"defaultHeight\">The default height.</param>\r\n      /// <returns>The number of flights (at least 1.)</returns>\r\n      static public int GetNumFlightsForLegacyStair(Element element, double defaultHeight)\r\n      {\r\n         ElementId multistoryTopLevelId;\r\n         if ((ParameterUtil.GetElementIdValueFromElement(element, BuiltInParameter.STAIRS_MULTISTORY_TOP_LEVEL_PARAM, out multistoryTopLevelId) == null) ||\r\n             (multistoryTopLevelId == ElementId.InvalidElementId))\r\n            return 1;\r\n\r\n         ElementId baseLevelId;\r\n         if ((ParameterUtil.GetElementIdValueFromElement(element, BuiltInParameter.STAIRS_BASE_LEVEL_PARAM, out baseLevelId) == null) ||\r\n             (baseLevelId == ElementId.InvalidElementId))\r\n            return 1;\r\n\r\n         Level bottomLevel = element.Document.GetElement(baseLevelId) as Level;\r\n         if (bottomLevel == null)\r\n            return 1;\r\n         double bottomLevelElev = bottomLevel.Elevation;\r\n\r\n         Level multistoryTopLevel = element.Document.GetElement(multistoryTopLevelId) as Level;\r\n         double multistoryLevelElev = multistoryTopLevel.Elevation;\r\n\r\n         Level topLevel = null;\r\n         ElementId topLevelId;\r\n         if ((ParameterUtil.GetElementIdValueFromElement(element, BuiltInParameter.STAIRS_TOP_LEVEL_PARAM, out topLevelId) != null) &&\r\n             (topLevelId != ElementId.InvalidElementId))\r\n            topLevel = element.Document.GetElement(topLevelId) as Level;\r\n\r\n         double bottomLevelOffset;\r\n         ParameterUtil.GetDoubleValueFromElement(element, BuiltInParameter.STAIRS_BASE_OFFSET, out bottomLevelOffset);\r\n\r\n         double topLevelOffset;\r\n         ParameterUtil.GetDoubleValueFromElement(element, BuiltInParameter.STAIRS_TOP_OFFSET, out topLevelOffset);\r\n\r\n         double minHeight = bottomLevelElev + bottomLevelOffset;\r\n         double maxHeight = (topLevel != null) ? topLevel.Elevation + topLevelOffset : minHeight + defaultHeight;\r\n         double unconnectedHeight = maxHeight;\r\n\r\n         double stairsHeight = GetStairsHeightForLegacyStair(element, defaultHeight);\r\n\r\n         double topElev = (topLevel != null) ? topLevel.Elevation : unconnectedHeight;\r\n\r\n         if ((topElev + MathUtil.Eps() > multistoryLevelElev) || (bottomLevelElev + MathUtil.Eps() > multistoryLevelElev))\r\n            return 1;\r\n\r\n         double multistoryHeight = multistoryLevelElev - bottomLevelElev;\r\n         double oneStairHeight = stairsHeight;\r\n         double currentHeight = oneStairHeight;\r\n\r\n         if (oneStairHeight < MathUtil.Eps())\r\n            return 1;\r\n\r\n         int flightNumber = 0;\r\n         for (; currentHeight < multistoryHeight + MathUtil.Eps() * flightNumber;\r\n             currentHeight += oneStairHeight, flightNumber++)\r\n         {\r\n            // Fail if we reach some arbitrarily huge number.\r\n            if (flightNumber > 100000)\r\n               return 1;\r\n         }\r\n\r\n         return (flightNumber > 0) ? flightNumber : 1;\r\n      }\r\n\r\n      static private double GetStairsHeight(Element stair)\r\n      {\r\n         if (IsLegacyStairs(stair))\r\n         {\r\n            // The default height for legacy stairs are either 12' or 3.5m.  Figure it out based on the scale of the export, and convert to feet.\r\n            double defaultHeight = GetDefaultHeightForLegacyStair(stair.Document);\r\n            return GetStairsHeightForLegacyStair(stair, defaultHeight);\r\n         }\r\n\r\n         if (stair is Stairs)\r\n         {\r\n            return (stair as Stairs).Height;\r\n         }\r\n\r\n         return 0.0;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get validated IfcStairFlightTypeEnum from Revit StairsRun\r\n      /// </summary>\r\n      /// <param name=\"stairsRun\">Revit StairsRun object</param>\r\n      /// <returns>string value of the validated IfcStairFlightTypeEnum</returns>\r\n      public static string GetValidatedStairFlightType(StairsRun stairsRun)\r\n      {\r\n         StairsRunStyle runStyle = stairsRun.StairsRunStyle;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4)\r\n         {\r\n            if (Enum.TryParse(runStyle.ToString(), true, out Toolkit.IFC4.IFCStairFlightType stairFlightTypeEnum))\r\n               return stairFlightTypeEnum.ToString();\r\n         }\r\n         else\r\n         {\r\n            if (Enum.TryParse(runStyle.ToString(), true, out IFCStairFlightType stairFlightTypeEnum))\r\n               return stairFlightTypeEnum.ToString();               \r\n         }\r\n\r\n         return \"NOTDEFINED\";\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get validated IfcStairTypeEnum of Revit stairs based on the information obtained from its components.\r\n      /// </summary>\r\n      /// <param name=\"stairs\">The Revit stair object.</param>\r\n      /// <param name=\"ifcExportType\">The potential shared parameter override value.</param>\r\n      /// <returns>The string value of the validated IfcStairTypeEnum.</returns>\r\n      public static string GetValidatedStairType(Stairs stairs, string ifcExportType)\r\n      {\r\n         string stairType = \"NOTDEFINED\";\r\n         if (stairs == null)\r\n            return stairType;\r\n\r\n         ICollection<ElementId> flights = stairs.GetStairsRuns();\r\n         if (flights.Count == 0)\r\n            return stairType;\r\n\r\n         int noLandings = stairs.GetStairsLandings().Count;\r\n         int noStraightFlights = 0;\r\n         int noCurvedFlights = 0;\r\n         int noWinder = 0;\r\n         List<Line> straightFlightPaths = new List<Line>();\r\n\r\n         foreach (ElementId flight in flights)\r\n         {\r\n            StairsRun stairRun = stairs.Document.GetElement(flight) as StairsRun;\r\n            StairsRunStyle runStyle = stairRun.StairsRunStyle;\r\n            switch (runStyle)\r\n            {\r\n               case StairsRunStyle.Winder:\r\n                  noWinder++;\r\n                  break;\r\n               case StairsRunStyle.Straight:\r\n                  CurveLoop flightPath = stairRun.GetStairsPath();\r\n                  int lineCnt = 0;\r\n                  List<Line> lines = new List<Line>();\r\n                  foreach (Curve path in flightPath)\r\n                  {\r\n                     if (path is Line)\r\n                     {\r\n                        lineCnt++;\r\n                        lines.Add(path as Line);\r\n                     }\r\n                     else\r\n                        break;      // Ignore if it is somehow not a Line\r\n                  }\r\n                  if (lineCnt > 1)\r\n                     break;         // Skip if the path is made of multiple curve segments\r\n\r\n                  noStraightFlights++;\r\n                  straightFlightPaths.AddRange(lines);\r\n                  break;\r\n               case StairsRunStyle.Sketched:\r\n                  // If it is sketched, we need to evaluate the path and see whether we can infer that is is straight or curved flight\r\n                  CurveLoop flightPath2 = stairRun.GetStairsPath();\r\n                  int lineCnt2 = 0;\r\n                  int curveCnt = 0;\r\n                  List<Line> lines2 = new List<Line>();\r\n                  foreach (Curve curvePath in flightPath2)\r\n                  {\r\n                     if (curvePath is Line)\r\n                     {\r\n                        lineCnt2++;\r\n                        lines2.Add(curvePath as Line);\r\n                     }\r\n                     else\r\n                        curveCnt++;\r\n                  }\r\n                  // We only deal with a single curve segment in the path\r\n                  if (lineCnt2 == 1 && curveCnt == 0)\r\n                  {\r\n                     noStraightFlights++;\r\n                     straightFlightPaths.AddRange(lines2);\r\n                  }\r\n                  else if (lineCnt2 == 0 && curveCnt == 1)\r\n                     noCurvedFlights++;\r\n\r\n                  break;\r\n               case StairsRunStyle.Spiral:\r\n                  stairType = \"SPIRAL_STAIR\";\r\n                  break;\r\n               default:\r\n                  break;\r\n            }\r\n         }\r\n\r\n         if (stairType.Equals(\"NOTDEFINED\"))\r\n         {\r\n            // Now use all the information we collect, i.e. no of Landing, no of flight and their type to determine the correct IfcStairTypeEnum\r\n            // Note that IfcStairTypeEnum only handle a limited no of flights and/or landings (see http://www.buildingsmart-tech.org/ifc/IFC4/Add2TC1/html/schema/ifcsharedbldgelements/lexical/ifcstairtypeenum.htm)\r\n            int noFlights = noStraightFlights + noCurvedFlights;\r\n            if (noFlights == 1)\r\n            {\r\n               if (noStraightFlights == 1)\r\n                  stairType = \"STRAIGHT_RUN_STAIR\";\r\n               else if (noCurvedFlights == 1)\r\n                  stairType = \"CURVED_RUN_STAIR\";\r\n            }\r\n            else if (noFlights == 2 && noCurvedFlights == 2 && noLandings == 1)\r\n            {\r\n               stairType = \"TWO_CURVED_RUN_STAIR\";\r\n            }\r\n            else if (noFlights == 2 && noStraightFlights == 2 && straightFlightPaths.Count == 2)\r\n            {\r\n               double dirLines = straightFlightPaths[0].Direction.DotProduct(straightFlightPaths[1].Direction);\r\n               if (MathUtil.IsAlmostEqual(dirLines, 1.0) && noLandings == 1)  //parallel in the same direction\r\n                  stairType = \"TWO_STRAIGHT_RUN_STAIR\";\r\n               else if (MathUtil.IsAlmostEqual(dirLines, 0.0))                     // perpendicular\r\n               {\r\n                  if (noLandings == 1)\r\n                     stairType = \"QUARTER_TURN_STAIR\";\r\n                  else if (noWinder == 1)\r\n                     stairType = \"HALF_WINDING_STAIR\";\r\n               }\r\n               else if (MathUtil.IsAlmostEqual(dirLines, -1.0))\r\n               {\r\n                  if (noWinder == 1)\r\n                     stairType = \"HALF_WINDING_STAIR\";\r\n                  else if (noLandings == 1)\r\n                     stairType = \"HALF_TURN_STAIR\";\r\n               }\r\n            }\r\n            else if (noFlights == 3 && noStraightFlights == 3 && straightFlightPaths.Count == 3)\r\n            {\r\n               // Directions must be 90 degree turn\r\n               if (MathUtil.IsAlmostZero(straightFlightPaths[0].Direction.DotProduct(straightFlightPaths[1].Direction))\r\n                     && MathUtil.IsAlmostZero(straightFlightPaths[1].Direction.DotProduct(straightFlightPaths[2].Direction)))\r\n               {\r\n                  if (noWinder == 2)\r\n                     stairType = \"TWO_QUARTER_WINDING_STAIR\";\r\n                  else if (noLandings == 2)\r\n                  {\r\n                     if (MathUtil.IsAlmostEqual(straightFlightPaths[0].GetEndPoint(0).Z, straightFlightPaths[1].GetEndPoint(0).Z)\r\n                        || MathUtil.IsAlmostEqual(straightFlightPaths[0].GetEndPoint(0).Z, straightFlightPaths[2].GetEndPoint(0).Z)\r\n                        || MathUtil.IsAlmostEqual(straightFlightPaths[1].GetEndPoint(0).Z, straightFlightPaths[2].GetEndPoint(0).Z))\r\n                        stairType = \"DOUBLE_RETURN_STAIR\";          // two of the flights have the same starting elevation\r\n                     else\r\n                        stairType = \"TWO_QUARTER_TURN_STAIR\";\r\n                  }\r\n               }\r\n            }\r\n            else if (noFlights == 4 && noStraightFlights == 4 && straightFlightPaths.Count == 4)\r\n            {\r\n               // Directions must be 90 degree turn\r\n               if (MathUtil.IsAlmostZero(straightFlightPaths[0].Direction.DotProduct(straightFlightPaths[1].Direction))\r\n                     && MathUtil.IsAlmostZero(straightFlightPaths[1].Direction.DotProduct(straightFlightPaths[2].Direction))\r\n                     && MathUtil.IsAlmostZero(straightFlightPaths[2].Direction.DotProduct(straightFlightPaths[3].Direction)))\r\n               {\r\n                  if (noWinder == 3)\r\n                     stairType = \"THREE_QUARTER_WINDING_STAIR\";\r\n                  else if (noLandings == 3)\r\n                     stairType = \"THREE_QUARTER_TURN_STAIR\";\r\n               }\r\n            }\r\n         }\r\n\r\n         // if NOTDEFINED, set to default if supplied. Validate the type enum\r\n         if (stairType.Equals(\"NOTDEFINED\", StringComparison.InvariantCultureIgnoreCase) && !string.IsNullOrEmpty(ifcExportType))\r\n            stairType = ifcExportType;\r\n\r\n         // Now validate the string using the enum\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4)\r\n         {\r\n            Toolkit.IFC4.IFCStairType enumType = Toolkit.IFC4.IFCStairType.NOTDEFINED;\r\n            Enum.TryParse(stairType, true, out enumType);\r\n            stairType = enumType.ToString();\r\n         }\r\n         else\r\n         {\r\n            Toolkit.IFCStairType enumType = Toolkit.IFCStairType.NotDefined;\r\n            Enum.TryParse(stairType, true, out enumType);\r\n            stairType = enumType.ToString();\r\n         }\r\n\r\n         return stairType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets IFCStairType from stair type name.\r\n      /// </summary>\r\n      /// <param name=\"stairTypeName\">The stair type name.</param>\r\n      /// <returns>The IFCStairType.</returns>\r\n      public static string GetIFCStairType(string stairTypeName)\r\n      {\r\n         string typeName = NamingUtil.RemoveSpacesAndUnderscores(stairTypeName);\r\n\r\n         if (String.Compare(typeName, \"StraightRun\", true) == 0 ||\r\n             String.Compare(typeName, \"StraightRunStair\", true) == 0)\r\n            return \"Straight_Run_Stair\";\r\n         if (String.Compare(typeName, \"QuarterWinding\", true) == 0 ||\r\n             String.Compare(typeName, \"QuarterWindingStair\", true) == 0)\r\n            return \"Quarter_Winding_Stair\";\r\n         if (String.Compare(typeName, \"QuarterTurn\", true) == 0 ||\r\n             String.Compare(typeName, \"QuarterTurnStair\", true) == 0)\r\n            return \"Quarter_Turn_Stair\";\r\n         if (String.Compare(typeName, \"HalfWinding\", true) == 0 ||\r\n             String.Compare(typeName, \"HalfWindingStair\", true) == 0)\r\n            return \"Half_Winding_Stair\";\r\n         if (String.Compare(typeName, \"HalfTurn\", true) == 0 ||\r\n             String.Compare(typeName, \"HalfTurnStair\", true) == 0)\r\n            return \"Half_Turn_Stair\";\r\n         if (String.Compare(typeName, \"TwoQuarterWinding\", true) == 0 ||\r\n             String.Compare(typeName, \"TwoQuarterWindingStair\", true) == 0)\r\n            return \"Two_Quarter_Winding_Stair\";\r\n         if (String.Compare(typeName, \"TwoStraightRun\", true) == 0 ||\r\n             String.Compare(typeName, \"TwoStraightRunStair\", true) == 0)\r\n            return \"Two_Straight_Run_Stair\";\r\n         if (String.Compare(typeName, \"TwoQuarterTurn\", true) == 0 ||\r\n             String.Compare(typeName, \"TwoQuarterTurnStair\", true) == 0)\r\n            return \"Two_Quarter_Turn_Stair\";\r\n         if (String.Compare(typeName, \"ThreeQuarterWinding\", true) == 0 ||\r\n             String.Compare(typeName, \"ThreeQuarterWindingStair\", true) == 0)\r\n            return \"Three_Quarter_Winding_Stair\";\r\n         if (String.Compare(typeName, \"ThreeQuarterTurn\", true) == 0 ||\r\n             String.Compare(typeName, \"ThreeQuarterTurnStair\", true) == 0)\r\n            return \"Three_Quarter_Turn_Stair\";\r\n         if (String.Compare(typeName, \"Spiral\", true) == 0 ||\r\n             String.Compare(typeName, \"SpiralStair\", true) == 0)\r\n            return \"Spiral_Stair\";\r\n         if (String.Compare(typeName, \"DoubleReturn\", true) == 0 ||\r\n             String.Compare(typeName, \"DoubleReturnStair\", true) == 0)\r\n            return \"Double_Return_Stair\";\r\n         if (String.Compare(typeName, \"CurvedRun\", true) == 0 ||\r\n             String.Compare(typeName, \"CurvedRunStair\", true) == 0)\r\n            return \"Curved_Run_Stair\";\r\n         if (String.Compare(typeName, \"TwoCurvedRun\", true) == 0 ||\r\n             String.Compare(typeName, \"TwoCurvedRunStair\", true) == 0)\r\n            return \"Two_Curved_Run_Stair\";\r\n         if (String.Compare(typeName, \"UserDefined\", true) == 0)\r\n            return \"UserDefined\";\r\n\r\n         return \"NotDefined\";\r\n      }\r\n\r\n      /// <summary>\r\n      /// While the MultistoryStairs function is introduced, there is a new way to generate multiply flights for a stairs.\r\n      /// Different from the flights which are generated by \"Multistory Top Level\" parameter, \r\n      /// the flights which are generated by new multistory stairs doesn't needs to be connected.\r\n      /// </summary>\r\n      /// <param name=\"stair\">the stair which contains the stair flights</param>\r\n      /// <returns>The offset list of stairs flights which different from the original flight. \r\n      /// the original flight will be contained in the return list, its offset is zero.</returns>\r\n      public static List<double> GetFlightsOffsetList(Stairs stair)\r\n      {\r\n         List<double> offsetList = new List<double>();\r\n         // the flights are generated by \"Multistory Top Level\" parameter\r\n         if (stair.MultistoryStairsId == ElementId.InvalidElementId)\r\n         {\r\n            int numberOfFlights = stair.NumberOfStories;\r\n            double heightNonScaled = GetStairsHeight(stair);\r\n            for (int ii = 0; ii < numberOfFlights; ii++)\r\n            {\r\n               offsetList.Add(heightNonScaled * ii);\r\n            }\r\n         }\r\n         else\r\n         {\r\n            Document doc = stair.Document;\r\n            MultistoryStairs msStairs = doc.GetElement(stair.MultistoryStairsId) as MultistoryStairs;\r\n            if (null != msStairs)\r\n            {\r\n               List<ElementId> placementLevelIds = new List<ElementId>(msStairs.GetStairsPlacementLevels(stair));\r\n               Level baseLevel = (doc.GetElement(stair.get_Parameter(BuiltInParameter.STAIRS_BASE_LEVEL_PARAM).AsElementId()) as Level);\r\n               if (null != baseLevel)\r\n               {\r\n                  offsetList.Add(0.0); // base level should always be the 1st.\r\n                  double original = baseLevel.ProjectElevation;\r\n                  foreach (var levelId in placementLevelIds)\r\n                  {\r\n                     if (levelId != baseLevel.Id)\r\n                     {\r\n                        Level placementLevel = doc.GetElement(levelId) as Level;\r\n                        if (placementLevel != null)\r\n                        {\r\n                           double elevationOffset = placementLevel.ProjectElevation - original;\r\n                           offsetList.Add(elevationOffset);\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         return offsetList;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports the top stories of a multistory staircase.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"stair\">The stairs element.</param>\r\n      /// <param name=\"flightOffsets\">The offset list of flights for a multistory staircase, doesn't include base level.</param>\r\n      /// <param name=\"stairHnd\">The stairs container handle.</param>\r\n      /// <param name=\"components\">The components handles.</param>\r\n      /// <param name=\"ecData\">The extrusion creation data.</param>\r\n      /// <param name=\"componentECData\">The extrusion creation data for the components.</param>\r\n      /// <param name=\"placementSetter\">The placement setter.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportMultistoryStair(ExporterIFC exporterIFC, Element stair, List<double> flightOffsets,\r\n          IFCAnyHandle stairHnd, IList<IFCAnyHandle> components, IList<IFCExportBodyParams> componentECData,\r\n          PlacementSetter placementSetter, ProductWrapper productWrapper)\r\n      {\r\n         int numFlights = flightOffsets.Count;\r\n         if (numFlights < 2)\r\n            return;\r\n\r\n         double heightNonScaled = GetStairsHeight(stair);\r\n         if (heightNonScaled < MathUtil.Eps())\r\n            return;\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(stairHnd))\r\n            return;\r\n\r\n         IFCAnyHandle localPlacement = IFCAnyHandleUtil.GetObjectPlacement(stairHnd);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(localPlacement))\r\n            return;\r\n\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         IFCAnyHandle relPlacement = GeometryUtil.GetRelativePlacementFromLocalPlacement(localPlacement);\r\n         IFCAnyHandle ptHnd = IFCAnyHandleUtil.GetLocation(relPlacement);\r\n         IList<double> origCoords = IFCAnyHandleUtil.GetCoordinates(ptHnd);\r\n\r\n         ICollection<ElementId> runIds = null;\r\n         ICollection<ElementId> landingIds = null;\r\n         ICollection<ElementId> supportIds = null;\r\n\r\n         if (stair is Stairs)\r\n         {\r\n            Stairs stairAsStairs = stair as Stairs;\r\n            runIds = stairAsStairs.GetStairsRuns();\r\n            landingIds = stairAsStairs.GetStairsLandings();\r\n            supportIds = stairAsStairs.GetStairsSupports();\r\n         }\r\n\r\n         IList<IFCAnyHandle> stairLocalPlacementHnds = new List<IFCAnyHandle>();\r\n         IList<IFCLevelInfo> levelInfos = new List<IFCLevelInfo>();\r\n         for (int ii = 1; ii < numFlights; ii++)\r\n         {\r\n            IFCAnyHandle newLevelHnd = null;\r\n\r\n            // We are going to avoid internal scaling routines, and instead scale in .NET.\r\n            double newOffsetUnscaled = 0.0;\r\n            IFCLevelInfo currLevelInfo =\r\n                placementSetter.GetOffsetLevelInfoAndHandle(flightOffsets[ii], 1.0, stair.Document, out newLevelHnd, out newOffsetUnscaled);\r\n            double newOffsetScaled = UnitUtil.ScaleLength(newOffsetUnscaled);\r\n\r\n            if (currLevelInfo != null)\r\n               levelInfos.Add(currLevelInfo);\r\n            else\r\n               levelInfos.Add(placementSetter.LevelInfo);\r\n\r\n            XYZ orig;\r\n            if (ptHnd.HasValue)\r\n            {\r\n               orig = new XYZ(origCoords[0], origCoords[1], newOffsetScaled);\r\n            }\r\n            else\r\n            {\r\n               orig = new XYZ(0.0, 0.0, newOffsetScaled);\r\n            }\r\n            stairLocalPlacementHnds.Add(ExporterUtil.CreateLocalPlacement(file, newLevelHnd, orig, null, null));\r\n         }\r\n\r\n         IList<List<IFCAnyHandle>> newComponents = new List<List<IFCAnyHandle>>();\r\n         for (int ii = 0; ii < numFlights - 1; ii++)\r\n            newComponents.Add(new List<IFCAnyHandle>());\r\n\r\n         int compIdx = 0;\r\n         IEnumerator<ElementId> runIter = null;\r\n         if (runIds != null)\r\n         {\r\n            runIter = runIds.GetEnumerator();\r\n            runIter.MoveNext();\r\n         }\r\n         IEnumerator<ElementId> landingIter = null;\r\n         if (landingIds != null)\r\n         {\r\n            landingIter = landingIds.GetEnumerator();\r\n            landingIter.MoveNext();\r\n         }\r\n         IEnumerator<ElementId> supportIter = null;\r\n         if (supportIds != null)\r\n         {\r\n            supportIter = supportIds.GetEnumerator();\r\n            supportIter.MoveNext();\r\n         }\r\n\r\n         foreach (IFCAnyHandle component in components)\r\n         {\r\n            string componentName = IFCAnyHandleUtil.GetStringAttribute(component, \"Name\");\r\n            IFCAnyHandle componentProdRep = IFCAnyHandleUtil.GetInstanceAttribute(component, \"Representation\");\r\n\r\n            IList<string> localComponentNames = new List<string>();\r\n            IList<IFCAnyHandle> componentPlacementHnds = new List<IFCAnyHandle>();\r\n\r\n            IFCAnyHandle localLocalPlacement = IFCAnyHandleUtil.GetObjectPlacement(component);\r\n            IFCAnyHandle localRelativePlacement =\r\n                (localLocalPlacement == null) ? null : IFCAnyHandleUtil.GetInstanceAttribute(localLocalPlacement, \"RelativePlacement\");\r\n\r\n            bool isSubStair = IFCAnyHandleUtil.IsSubTypeOf(component, IFCEntityType.IfcStair);\r\n            for (int ii = 0; ii < numFlights - 1; ii++)\r\n            {\r\n               localComponentNames.Add((componentName == null) ? (ii + 2).ToString() : (componentName + \":\" + (ii + 2)));\r\n               if (isSubStair)\r\n                  componentPlacementHnds.Add(ExporterUtil.CopyLocalPlacement(file, stairLocalPlacementHnds[ii]));\r\n               else\r\n                  componentPlacementHnds.Add(IFCInstanceExporter.CreateLocalPlacement(file, stairLocalPlacementHnds[ii], localRelativePlacement));\r\n            }\r\n\r\n            IList<IFCAnyHandle> localComponentHnds = new List<IFCAnyHandle>();\r\n            IList<IFCExportInfoPair> localCompExportInfo = new List<IFCExportInfoPair>();\r\n\r\n            if (isSubStair)\r\n            {\r\n               string componentType = IFCAnyHandleUtil.GetEnumerationAttribute(component, !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 ? \"PredefinedType\" : \"ShapeType\");\r\n               string localStairType = GetIFCStairType(componentType);\r\n               \r\n               ElementId catId = CategoryUtil.GetSafeCategoryId(stair);\r\n\r\n               for (int ii = 0; ii < numFlights - 1; ii++)\r\n               {\r\n                  IFCAnyHandle representationCopy =\r\n                     ExporterUtil.CopyProductDefinitionShape(exporterIFC, stair, catId, componentProdRep);\r\n\r\n                  string stairGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                     GUIDUtil.CreateGUIDString(stair, \"IfcStair: \" + (ii+1).ToString()));\r\n                  IFCAnyHandle localComponent = IFCInstanceExporter.CreateStair(exporterIFC, null,\r\n                     stairGuid, ownerHistory, componentPlacementHnds[ii], representationCopy, localStairType);\r\n                  IFCAnyHandleUtil.OverrideNameAttribute(localComponent, localComponentNames[ii]);\r\n                  localComponentHnds.Add(localComponent);\r\n                  IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcStair, localStairType);\r\n                  localCompExportInfo.Add(exportInfo);\r\n               }\r\n            }\r\n            else if (IFCAnyHandleUtil.IsSubTypeOf(component, IFCEntityType.IfcStairFlight))\r\n            {\r\n               Element runElem = (runIter == null) ? stair : stair.Document.GetElement(runIter.Current);\r\n               Element runElemToUse = runElem ?? stair;\r\n               ElementId catId = CategoryUtil.GetSafeCategoryId(runElemToUse);\r\n\r\n               int? numberOfRiser = IFCAnyHandleUtil.GetIntAttribute(component, \"NumberOfRiser\");\r\n               int? numberOfTreads = IFCAnyHandleUtil.GetIntAttribute(component, \"NumberOfTreads\");\r\n               double? riserHeight = IFCAnyHandleUtil.GetDoubleAttribute(component, \"RiserHeight\");\r\n               double? treadLength = IFCAnyHandleUtil.GetDoubleAttribute(component, \"TreadLength\");\r\n\r\n               for (int ii = 0; ii < numFlights - 1; ii++)\r\n               {\r\n                  IFCAnyHandle representationCopy =\r\n                      ExporterUtil.CopyProductDefinitionShape(exporterIFC, runElemToUse, catId, componentProdRep);\r\n\r\n                  string ifcType = \"NOTDEFINED\";\r\n                  string stairFlightGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                     GUIDUtil.CreateGUIDString(runElemToUse, \"IfcStairFlight: \" + ii.ToString()));\r\n                  IFCAnyHandle localComponent = IFCInstanceExporter.CreateStairFlight(exporterIFC, runElemToUse,\r\n                     stairFlightGuid, ownerHistory, componentPlacementHnds[ii], representationCopy, \r\n                     numberOfRiser, numberOfTreads, riserHeight, treadLength, ifcType);\r\n                  IFCAnyHandleUtil.OverrideNameAttribute(localComponent, localComponentNames[ii]);\r\n                  localComponentHnds.Add(localComponent);\r\n                  IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcStairFlight, ifcType);\r\n                  localCompExportInfo.Add(exportInfo);\r\n               }\r\n               runIter.MoveNext();\r\n            }\r\n            else if (IFCAnyHandleUtil.IsSubTypeOf(component, IFCEntityType.IfcSlab))\r\n            {\r\n               Element landingElem = (landingIter == null) ? stair : stair.Document.GetElement(landingIter.Current);\r\n               Element landingElemToUse = landingElem ?? stair;\r\n               ElementId catId = CategoryUtil.GetSafeCategoryId(landingElemToUse);\r\n\r\n               for (int ii = 0; ii < numFlights - 1; ii++)\r\n               {\r\n                  IFCAnyHandle representationCopy =\r\n                      ExporterUtil.CopyProductDefinitionShape(exporterIFC, landingElemToUse, catId, componentProdRep);\r\n\r\n                  string ifcType = \"LANDING\";\r\n                  string slabGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                     GUIDUtil.CreateGUIDString(landingElemToUse, \"IfcSlab: \" + ii.ToString()));\r\n\r\n                  IFCAnyHandle localComponent = IFCInstanceExporter.CreateSlab(exporterIFC, landingElemToUse,\r\n                     slabGuid, ownerHistory, componentPlacementHnds[ii], representationCopy, ifcType);\r\n                  IFCAnyHandleUtil.OverrideNameAttribute(localComponent, localComponentNames[ii]);\r\n                  localComponentHnds.Add(localComponent);\r\n                  IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcSlab, ifcType);\r\n                  localCompExportInfo.Add(exportInfo);\r\n               }\r\n\r\n               landingIter.MoveNext();\r\n            }\r\n            else if (IFCAnyHandleUtil.IsSubTypeOf(component, IFCEntityType.IfcMember))\r\n            {\r\n               Element supportElem = (supportIter == null) ? stair : stair.Document.GetElement(supportIter.Current);\r\n               Element supportElemToUse = supportElem ?? stair;\r\n               ElementId catId = CategoryUtil.GetSafeCategoryId(supportElemToUse);\r\n\r\n               IFCAnyHandle memberType = (supportElemToUse != stair) ? GetMemberTypeHandle(exporterIFC, supportElemToUse) : null;\r\n\r\n               for (int ii = 0; ii < numFlights - 1; ii++)\r\n               {\r\n                  IFCAnyHandle representationCopy =\r\n                  ExporterUtil.CopyProductDefinitionShape(exporterIFC, supportElemToUse, catId, componentProdRep);\r\n\r\n                  string ifcType = \"STRINGER\";\r\n                  string memberGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                     GUIDUtil.CreateGUIDString(supportElemToUse, \"IfcMember: \" + ii.ToString()));\r\n\r\n                  IFCAnyHandle localComponent = IFCInstanceExporter.CreateMember(exporterIFC, supportElemToUse,\r\n                     memberGuid, ownerHistory, componentPlacementHnds[ii], representationCopy, ifcType);\r\n                  IFCAnyHandleUtil.OverrideNameAttribute(localComponent, localComponentNames[ii]);\r\n                  localComponentHnds.Add(localComponent);\r\n                  IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcMember, ifcType);\r\n                  localCompExportInfo.Add(exportInfo);\r\n                  if (memberType != null)\r\n                     ExporterCacheManager.TypeRelationsCache.Add(memberType, localComponentHnds[ii]);\r\n               }\r\n\r\n               supportIter.MoveNext();\r\n            }\r\n\r\n            for (int ii = 0; ii < numFlights - 1; ii++)\r\n            {\r\n               if (localComponentHnds[ii] != null)\r\n               {\r\n                  newComponents[ii].Add(localComponentHnds[ii]);\r\n                  productWrapper.AddElement(null, localComponentHnds[ii], levelInfos[ii], componentECData[compIdx], false, localCompExportInfo[ii]);\r\n               }\r\n            }\r\n            compIdx++;\r\n         }\r\n\r\n         // finally add a copy of the container.\r\n         {\r\n            IList<IFCAnyHandle> stairCopyHnds = new List<IFCAnyHandle>();\r\n            string stairTypeAttribute = !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 ? \r\n               \"PredefinedType\" : \"ShapeType\";\r\n            for (int ii = 0; ii < numFlights - 1; ii++)\r\n            {\r\n               string stairTypeAsString = IFCAnyHandleUtil.GetEnumerationAttribute(stairHnd,\r\n                  stairTypeAttribute);\r\n                  \r\n               string stairType = GetIFCStairType(stairTypeAsString);\r\n\r\n               string containerStairName = IFCAnyHandleUtil.GetStringAttribute(stairHnd, \"Name\") + \":\" + (ii + 2);\r\n               string containerGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(stair, \"IfcStair Copy: \" + (ii+2).ToString()));\r\n               IFCAnyHandle containerStairHnd = IFCInstanceExporter.CreateStair(exporterIFC, stair,\r\n                  containerGuid, ownerHistory, stairLocalPlacementHnds[ii], null, stairType);\r\n               IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcStair, stairType);\r\n               stairCopyHnds.Add(containerStairHnd);\r\n               IFCAnyHandleUtil.OverrideNameAttribute(containerStairHnd, containerStairName);\r\n\r\n               productWrapper.AddElement(stair, stairCopyHnds[ii], levelInfos[ii], null, true,exportInfo);\r\n            }\r\n\r\n            for (int ii = 0; ii < numFlights - 1; ii++)\r\n            {\r\n               StairRampContainerInfo stairRampInfo = new StairRampContainerInfo(stairCopyHnds[ii], newComponents[ii],\r\n                   stairLocalPlacementHnds[ii]);\r\n               ExporterCacheManager.StairRampContainerInfoCache.AppendStairRampContainerInfo(stair.Id, stairRampInfo);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a staircase to IfcStair, without decomposing into separate runs and landings.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"ifcEnumType\">The stairs type.</param>\r\n      /// <param name=\"stair\">The stairs element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"flightOffsets\">The offset list of flights for a multistory staircase.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportStairAsSingleGeometry(ExporterIFC exporterIFC, string ifcEnumType, Element stair, GeometryElement geometryElement,\r\n          List<double> flightOffsets, ProductWrapper productWrapper)\r\n      {\r\n         if (stair == null || geometryElement == null)\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            using (PlacementSetter placementSetter = PlacementSetter.Create(exporterIFC, stair, null))\r\n            {\r\n               using (IFCExportBodyParams ecData = new IFCExportBodyParams())\r\n               {\r\n                  ecData.SetLocalPlacement(placementSetter.LocalPlacement);\r\n                  ecData.ReuseLocalPlacement = false;\r\n                  Transform trf = ExporterIFCUtils.GetUnscaledTransform(exporterIFC, placementSetter.LocalPlacement);\r\n\r\n                  int numFlights = flightOffsets.Count;\r\n                  var oneLevelGeom = GeometryUtil.GetOneLevelGeometryElement(geometryElement, numFlights);\r\n                  GeometryElement stairsGeom = oneLevelGeom.element;\r\n\r\n                  BodyData bodyData;\r\n                  ElementId categoryId = CategoryUtil.GetSafeCategoryId(stair);\r\n\r\n                  BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n                  IFCAnyHandle representation = RepresentationUtil.CreateAppropriateProductDefinitionShape(exporterIFC,\r\n                      stair, categoryId, stairsGeom, bodyExporterOptions, null, ecData, out bodyData, instanceGeometry: true);\r\n\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(representation))\r\n                  {\r\n                     ecData.ClearOpenings();\r\n                     return;\r\n                  }\r\n\r\n                  if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n                  {\r\n                     List<IFCAnyHandle> reps = IFCAnyHandleUtil.GetRepresentations(representation);\r\n                     Stairs theStairs = stair as Stairs;\r\n                     if (theStairs != null)\r\n                     {\r\n                        foreach (ElementId runElementId in theStairs.GetStairsRuns())\r\n                        {\r\n                           StairsRun stairRun = theStairs.Document.GetElement(runElementId) as StairsRun;\r\n                           CreateWalkingLineAndFootprint(exporterIFC, stairRun, bodyData, categoryId, trf, ref reps);\r\n                        }\r\n                        foreach (ElementId landingElementId in theStairs.GetStairsLandings())\r\n                        {\r\n                           StairsLanding stairLanding = theStairs.Document.GetElement(landingElementId) as StairsLanding;\r\n                           CreateWalkingLineAndFootprint(exporterIFC, stairLanding, bodyData, categoryId, trf, ref reps);\r\n                        }\r\n                        // Update the representations with Footprint and WalkingLine\r\n                        representation.SetAttribute(\"Representations\", reps);\r\n                     }\r\n                  }\r\n\r\n                  string stairGuid = GUIDUtil.CreateGUID(stair);\r\n                  string containedStairGuid;\r\n                  if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n                     containedStairGuid = GUIDUtil.CreateSubElementGUID(stair, (int)IFCStairSubElements.ContainedStair);\r\n                  else\r\n                     containedStairGuid = stairGuid;\r\n\r\n                  IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n                  IFCAnyHandle containedStairLocalPlacement = ExporterUtil.CreateLocalPlacement(file, ecData.GetLocalPlacement(), null);\r\n                  //string predefType = GetValidatedStairType(stair as Stairs, ifcEnumType);\r\n                  IFCExportInfoPair exportType = new IFCExportInfoPair(IFCEntityType.IfcStair, ifcEnumType);\r\n\r\n                  List<IFCAnyHandle> components = new List<IFCAnyHandle>();\r\n                  IList<IFCExportBodyParams> componentExtrusionData = new List<IFCExportBodyParams>();\r\n                  IFCAnyHandle containedStairHnd = IFCInstanceExporter.CreateStair(exporterIFC, stair, containedStairGuid, ownerHistory,\r\n                      containedStairLocalPlacement, representation, exportType.GetPredefinedTypeOrDefault());\r\n\r\n                  // Create appropriate type\r\n\r\n                  IFCAnyHandle stairTypeHnd = ExporterUtil.CreateGenericTypeFromElement(stair, exportType, exporterIFC.GetFile(), productWrapper);\r\n                  ExporterCacheManager.TypeRelationsCache.Add(stairTypeHnd, containedStairHnd);\r\n                  CategoryUtil.CreateMaterialAssociation(exporterIFC, stair, containedStairHnd, bodyData.MaterialIds);\r\n\r\n                  if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n                  {\r\n                     components.Add(containedStairHnd);\r\n                     componentExtrusionData.Add(ecData);\r\n\r\n                     IFCAnyHandle localPlacement = ecData.GetLocalPlacement();\r\n\r\n                     IFCAnyHandle stairContainerHnd = IFCInstanceExporter.CreateStair(exporterIFC, stair, stairGuid, ownerHistory,\r\n                          localPlacement, null, exportType.GetPredefinedTypeOrDefault());\r\n\r\n                     // Create appropriate type for the container\r\n                     //string contPredefType = GetValidatedStairType(stair as Stairs, ifcEnumType);\r\n                     IFCAnyHandle stairContTypeHnd = ExporterUtil.CreateGenericTypeFromElement(stair, exportType, exporterIFC.GetFile(), productWrapper);\r\n                     ExporterCacheManager.TypeRelationsCache.Add(stairContTypeHnd, stairContainerHnd);\r\n\r\n                     productWrapper.AddElement(stair, stairContainerHnd, placementSetter.LevelInfo, ecData, true, exportType);\r\n\r\n                     StairRampContainerInfo stairRampInfo = new StairRampContainerInfo(stairContainerHnd, components, localPlacement);\r\n                     ExporterCacheManager.StairRampContainerInfoCache.AddStairRampContainerInfo(stair.Id, stairRampInfo);\r\n\r\n                     ExportMultistoryStair(exporterIFC, stair, flightOffsets, stairContainerHnd, components,\r\n                        componentExtrusionData, placementSetter, productWrapper);\r\n                  }\r\n                  else\r\n                  {\r\n                     // From IFC4 onward, a single geometry Stair will be exported directly as IfcStair without container\r\n                     productWrapper.AddElement(stair, containedStairHnd, placementSetter.LevelInfo, ecData, true, exportType);\r\n                     StairRampContainerInfo stairRampInfo = new StairRampContainerInfo(containedStairHnd, components, containedStairLocalPlacement);\r\n                     ExporterCacheManager.StairRampContainerInfoCache.AddStairRampContainerInfo(stair.Id, stairRampInfo);\r\n\r\n                     ExportMultistoryStair(exporterIFC, stair, flightOffsets, containedStairHnd, components,\r\n                         componentExtrusionData, placementSetter, productWrapper);\r\n                  }\r\n               }\r\n               tr.Commit();\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a staircase to IfcStair, composing into separate runs and landings.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"ifcEnumType\">The stairs type.</param>\r\n      /// <param name=\"stair\">The stairs element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"flightOffsets\">The offset list of flights for a multistory staircase.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportStairsAsContainer(ExporterIFC exporterIFC, string ifcEnumType, Stairs stair, GeometryElement geometryElement,\r\n          List<double> flightOffsets, ProductWrapper productWrapper)\r\n      {\r\n         if (stair == null || geometryElement == null)\r\n            return;\r\n\r\n         Document doc = stair.Document;\r\n         IFCFile file = exporterIFC.GetFile();\r\n         Options geomOptions = GeometryUtil.GetIFCExportGeometryOptions();\r\n         ElementId categoryId = CategoryUtil.GetSafeCategoryId(stair);\r\n\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            using (PlacementSetter placementSetter = PlacementSetter.Create(exporterIFC, stair, null))\r\n            {\r\n               List<IFCAnyHandle> componentHandles = [];\r\n               List<IFCExportBodyParams> componentExtrusionData = [];\r\n\r\n               IFCAnyHandle contextOfItemsFootPrint = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.FootPrint);\r\n               IFCAnyHandle contextOfItemsAxis = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Axis);\r\n\r\n               Transform trf = ExporterIFCUtils.GetUnscaledTransform(exporterIFC, placementSetter.LocalPlacement);\r\n\r\n               IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n               string stairGUID = GUIDUtil.CreateGUID(stair);\r\n               IFCAnyHandle stairLocalPlacement = placementSetter.LocalPlacement;\r\n\r\n               string predefinedType = ifcEnumType;\r\n               if (string.IsNullOrWhiteSpace(predefinedType))\r\n                  predefinedType = GetValidatedStairType(stair, null); // override by stair components if predefined type is not set\r\n\r\n               IFCAnyHandle stairContainerHnd = IFCInstanceExporter.CreateStair(exporterIFC, stair, stairGUID, ownerHistory,\r\n                   stairLocalPlacement, null, predefinedType);\r\n\r\n               // Create appropriate type\r\n               IFCExportInfoPair exportType = new IFCExportInfoPair(IFCEntityType.IfcStair, predefinedType);\r\n               IFCAnyHandle stairTypeHnd = ExporterUtil.CreateGenericTypeFromElement(stair, exportType, exporterIFC.GetFile(), productWrapper);\r\n               ExporterCacheManager.TypeRelationsCache.Add(stairTypeHnd, stairContainerHnd);\r\n\r\n               productWrapper.AddElement(stair, stairContainerHnd, placementSetter.LevelInfo, null, true, exportType);\r\n\r\n               string ifcCADLayer = RepresentationUtil.GetPresentationLayerOverride(stair);\r\n\r\n               // Get List of runs to export their geometry.\r\n               ICollection<ElementId> runIds = stair.GetStairsRuns();\r\n               int index = 0;\r\n               foreach (ElementId runId in runIds)\r\n               {\r\n                  index++;\r\n                  StairsRun run = doc.GetElement(runId) as StairsRun;\r\n\r\n                  IFCExportBodyParams ecData = new();\r\n                  ecData.AllowVerticalOffsetOfBReps = false;\r\n                  ecData.SetLocalPlacement(ExporterUtil.CreateLocalPlacement(file, placementSetter.LocalPlacement, null));\r\n                  ecData.ReuseLocalPlacement = true;\r\n                  ecData.IFCCADLayerOverride = ifcCADLayer;\r\n                  GeometryElement runGeometryElement = run.get_Geometry(geomOptions);\r\n\r\n                  BodyExporterOptions bodyExporterOptions = new(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n                  BodyData bodyData = BodyExporter.ExportBody(exporterIFC, run, categoryId, ElementId.InvalidElementId, runGeometryElement,\r\n                      bodyExporterOptions, ecData);\r\n\r\n                  IFCAnyHandle bodyRep = bodyData.RepresentationHnd;\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(bodyRep))\r\n                  {\r\n                     ecData.ClearOpenings();\r\n                     ecData.Dispose();\r\n                     continue;\r\n                  }\r\n\r\n                  List<IFCAnyHandle> reps = [bodyRep];\r\n\r\n                  if (!ExporterCacheManager.ExportOptionsCache.ExportAsCoordinationView2)\r\n                  {\r\n                     CreateWalkingLineAndFootprint(exporterIFC, run, bodyData, categoryId, trf, ref reps);\r\n                  }\r\n\r\n                  Transform boundingBoxTrf = (bodyData.OffsetTransform == null) ? Transform.Identity : bodyData.OffsetTransform.Inverse;\r\n                  reps.AddIfNotNull(BoundingBoxExporter.ExportBoundingBox(exporterIFC, runGeometryElement, boundingBoxTrf));\r\n\r\n                  IFCAnyHandle representation = IFCInstanceExporter.CreateProductDefinitionShape(exporterIFC.GetFile(), null, null, reps);\r\n\r\n                  string runGUID = GUIDUtil.CreateGUID(run);\r\n                  string origRunName = IFCAnyHandleUtil.GetStringAttribute(stairContainerHnd, \"Name\") + \" Run \" + index;\r\n                  string runName = NamingUtil.GetNameOverride(run, origRunName);\r\n\r\n                  IFCAnyHandle runLocalPlacement = ecData.GetLocalPlacement();\r\n                  string runElementTag = NamingUtil.GetTagOverride(run);\r\n\r\n                  // NOTE: If we are exporting stairs, we are ignoring the IfcExportAs for the Run, and forcing export\r\n                  // to IfcStairFlight.\r\n                  IFCExportInfoPair runExportType = ExporterUtil.GetProductExportType(run, out string flightPredefType);\r\n                  if (runExportType.ExportInstance != IFCEntityType.IfcStairFlight || ExporterUtil.IsNotDefined(flightPredefType))\r\n                  {\r\n                     flightPredefType = GetValidatedStairFlightType(run);\r\n                  }\r\n\r\n                  IFCAnyHandle stairFlightHnd = IFCInstanceExporter.CreateStairFlight(exporterIFC, run, runGUID, ownerHistory, runLocalPlacement,\r\n                      representation, run.ActualRisersNumber, run.ActualTreadsNumber, stair.ActualRiserHeight, stair.ActualTreadDepth, flightPredefType);\r\n                  IFCAnyHandleUtil.OverrideNameAttribute(stairFlightHnd, runName);\r\n\r\n                  // Create type\r\n                  IFCExportInfoPair flightExportType = new IFCExportInfoPair(IFCEntityType.IfcStairFlight, flightPredefType);\r\n                  IFCAnyHandle flightTypeHnd = ExporterUtil.CreateGenericTypeFromElement(run, flightExportType, exporterIFC.GetFile(), productWrapper);\r\n                  ExporterCacheManager.TypeRelationsCache.Add(flightTypeHnd, stairFlightHnd);\r\n\r\n                  componentHandles.Add(stairFlightHnd);\r\n                  componentExtrusionData.Add(ecData);\r\n\r\n                  CategoryUtil.CreateMaterialAssociation(exporterIFC, run, stairFlightHnd, bodyData.MaterialIds);\r\n\r\n                  productWrapper.AddElement(run, stairFlightHnd, placementSetter.LevelInfo, ecData, false, flightExportType);\r\n\r\n                  ExporterCacheManager.HandleToElementCache.Register(stairFlightHnd, run.Id);\r\n               }\r\n\r\n               // Get List of landings to export their geometry.\r\n               ICollection<ElementId> landingIds = stair.GetStairsLandings();\r\n               index = 0;\r\n               foreach (ElementId landingId in landingIds)\r\n               {\r\n                  index++;\r\n                  StairsLanding landing = doc.GetElement(landingId) as StairsLanding;\r\n\r\n                  IFCExportBodyParams ecData = new IFCExportBodyParams();\r\n                  ecData.AllowVerticalOffsetOfBReps = false;\r\n                  ecData.SetLocalPlacement(ExporterUtil.CreateLocalPlacement(file, placementSetter.LocalPlacement, null));\r\n                  ecData.ReuseLocalPlacement = true;\r\n\r\n                  GeometryElement landingGeometryElement = landing.get_Geometry(geomOptions);\r\n\r\n                  BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n                  BodyData bodyData = BodyExporter.ExportBody(exporterIFC, landing, categoryId, ElementId.InvalidElementId, landingGeometryElement,\r\n                      bodyExporterOptions, ecData);\r\n\r\n                  IFCAnyHandle bodyRep = bodyData.RepresentationHnd;\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(bodyRep))\r\n                  {\r\n                     ecData.ClearOpenings();\r\n                     ecData.Dispose();\r\n                     continue;\r\n                  }\r\n\r\n                  // create Boundary rep.\r\n                  List<IFCAnyHandle> reps = [bodyRep];\r\n\r\n                  if (!ExporterCacheManager.ExportOptionsCache.ExportAsCoordinationView2)\r\n                  {\r\n                     CreateWalkingLineAndFootprint(exporterIFC, landing, bodyData, categoryId, trf, ref reps);\r\n                  }\r\n\r\n                  Transform boundingBoxTrf = (bodyData.OffsetTransform == null) ? Transform.Identity : bodyData.OffsetTransform.Inverse;\r\n                  IFCAnyHandle boundingBoxRep = BoundingBoxExporter.ExportBoundingBox(exporterIFC, landingGeometryElement, boundingBoxTrf);\r\n                  reps.AddIfNotNull(boundingBoxRep);\r\n\r\n                  string landingGUID = GUIDUtil.CreateGUID(landing);\r\n                  string origLandingName = IFCAnyHandleUtil.GetStringAttribute(stairContainerHnd, \"Name\") + \" Landing \" + index;\r\n                  string landingName = NamingUtil.GetNameOverride(landing, origLandingName);\r\n                  IFCAnyHandle landingLocalPlacement = ecData.GetLocalPlacement();\r\n\r\n                  IFCAnyHandle representation = IFCInstanceExporter.CreateProductDefinitionShape(exporterIFC.GetFile(), null, null, reps);\r\n\r\n                  string landingPredefinedType = \"LANDING\";\r\n                  IFCAnyHandle landingHnd = IFCInstanceExporter.CreateSlab(exporterIFC, landing, landingGUID, ownerHistory,\r\n                      landingLocalPlacement, representation, landingPredefinedType);\r\n                  IFCAnyHandleUtil.OverrideNameAttribute(landingHnd, landingName);\r\n\r\n                  // Create type\r\n                  IFCExportInfoPair landingExportType = new IFCExportInfoPair(IFCEntityType.IfcSlab, landingPredefinedType);\r\n                  IFCAnyHandle landingTypeHnd = ExporterUtil.CreateGenericTypeFromElement(landing, landingExportType, exporterIFC.GetFile(), productWrapper);\r\n                  ExporterCacheManager.TypeRelationsCache.Add(landingTypeHnd, landingHnd);\r\n\r\n                  componentHandles.Add(landingHnd);\r\n                  componentExtrusionData.Add(ecData);\r\n\r\n                  CategoryUtil.CreateMaterialAssociation(exporterIFC, landing, landingHnd, bodyData.MaterialIds);\r\n\r\n                  productWrapper.AddElement(landing, landingHnd, placementSetter.LevelInfo, ecData, false, landingExportType);\r\n                  ExporterCacheManager.HandleToElementCache.Register(landingHnd, landing.Id);\r\n               }\r\n\r\n               // Get List of supports to export their geometry.  Supports are not exposed to API, so export as generic Element.\r\n               ICollection<ElementId> supportIds = stair.GetStairsSupports();\r\n               index = 0;\r\n               foreach (ElementId supportId in supportIds)\r\n               {\r\n                  index++;\r\n                  Element support = doc.GetElement(supportId);\r\n\r\n                  IFCExportBodyParams ecData = new IFCExportBodyParams();\r\n                  ecData.SetLocalPlacement(ExporterUtil.CreateLocalPlacement(file, placementSetter.LocalPlacement, null));\r\n                  ecData.ReuseLocalPlacement = true;\r\n                  ecData.IFCCADLayerOverride = ifcCADLayer;\r\n\r\n                  GeometryElement supportGeometryElement = support.get_Geometry(geomOptions);\r\n                  BodyData bodyData;\r\n                  BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n                  IFCAnyHandle representation = RepresentationUtil.CreateAppropriateProductDefinitionShape(exporterIFC,\r\n                      support, categoryId, supportGeometryElement, bodyExporterOptions, null, ecData, out bodyData, instanceGeometry: true);\r\n\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(representation))\r\n                  {\r\n                     ecData.ClearOpenings();\r\n                     ecData.Dispose();\r\n                     continue;\r\n                  }\r\n\r\n                  string supportGUID = GUIDUtil.CreateGUID(support);\r\n                  string origSupportName = IFCAnyHandleUtil.GetStringAttribute(stairContainerHnd, \"Name\") + \" Stringer \" + index;\r\n                  string supportName = NamingUtil.GetNameOverride(support, origSupportName);\r\n                  IFCAnyHandle supportLocalPlacement = ecData.GetLocalPlacement();\r\n\r\n                  string stringerPredefType = \"STRINGER\";\r\n                  IFCExportInfoPair stringerExportInfo = new IFCExportInfoPair(IFCEntityType.IfcMember, stringerPredefType);\r\n                  IFCAnyHandle type = GetMemberTypeHandle(exporterIFC, support);\r\n\r\n                  IFCAnyHandle supportHnd = IFCInstanceExporter.CreateMember(exporterIFC, support, supportGUID, ownerHistory,\r\n                      supportLocalPlacement, representation, stringerPredefType);\r\n                  IFCAnyHandleUtil.OverrideNameAttribute(supportHnd, supportName);\r\n                  componentHandles.Add(supportHnd);\r\n                  componentExtrusionData.Add(ecData);\r\n\r\n                  CategoryUtil.CreateMaterialAssociation(exporterIFC, support, supportHnd, bodyData.MaterialIds);\r\n\r\n                  productWrapper.AddElement(support, supportHnd, placementSetter.LevelInfo, ecData, false, stringerExportInfo);\r\n\r\n                  ExporterCacheManager.TypeRelationsCache.Add(type, supportHnd);\r\n               }\r\n\r\n               StairRampContainerInfo stairRampInfo = new StairRampContainerInfo(stairContainerHnd, componentHandles, stairLocalPlacement);\r\n               ExporterCacheManager.StairRampContainerInfoCache.AddStairRampContainerInfo(stair.Id, stairRampInfo);\r\n\r\n               ExportMultistoryStair(exporterIFC, stair, flightOffsets, stairContainerHnd, componentHandles, componentExtrusionData,\r\n                   placementSetter, productWrapper);\r\n            }\r\n            tr.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a legacy staircase or ramp to IfcStair or IfcRamp, composing into separate runs and landings.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"ifcEnumType\">>The ifc type.</param>\r\n      /// <param name=\"legacyStair\">The legacy stairs or ramp element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportLegacyStairOrRampAsContainer(ExporterIFC exporterIFC, string ifcEnumType, Element legacyStair, GeometryElement geometryElement,\r\n          ProductWrapper productWrapper)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         ElementId categoryId = CategoryUtil.GetSafeCategoryId(legacyStair);\r\n\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            using (PlacementSetter placementSetter = PlacementSetter.Create(exporterIFC, legacyStair, null))\r\n            {\r\n               IFCLegacyStairOrRamp legacyStairOrRamp = null;\r\n               try\r\n               {\r\n                  legacyStairOrRamp = ExporterIFCUtils.GetLegacyStairOrRampComponents(exporterIFC, legacyStair);\r\n               }\r\n               catch\r\n               {\r\n                  legacyStairOrRamp = null;\r\n               }\r\n\r\n               if (legacyStairOrRamp == null)\r\n                  return;\r\n\r\n               bool isRamp = legacyStairOrRamp.IsRamp;\r\n\r\n               using (IFCExportBodyParams ifcECData = new IFCExportBodyParams())\r\n               {\r\n                  double defaultHeight = GetDefaultHeightForLegacyStair(legacyStair.Document);\r\n                  double stairHeight = GetStairsHeightForLegacyStair(legacyStair, defaultHeight);\r\n                  int numFlights = GetNumFlightsForLegacyStair(legacyStair, defaultHeight);\r\n\r\n                  List<IFCLevelInfo> localLevelInfoForFlights = new List<IFCLevelInfo>();\r\n                  List<IFCAnyHandle> localPlacementForFlights = new List<IFCAnyHandle>();\r\n                  List<List<IFCAnyHandle>> components = new List<List<IFCAnyHandle>>();\r\n\r\n                  components.Add(new List<IFCAnyHandle>());\r\n\r\n                  if (numFlights > 1)\r\n                  {\r\n                     XYZ zDir = new XYZ(0.0, 0.0, 1.0);\r\n                     XYZ xDir = new XYZ(1.0, 0.0, 0.0);\r\n                     for (int ii = 1; ii < numFlights; ii++)\r\n                     {\r\n                        components.Add(new List<IFCAnyHandle>());\r\n                        IFCAnyHandle newLevelHnd = null;\r\n\r\n                        // We are going to avoid internal scaling routines, and instead scale in .NET.\r\n                        double newOffsetUnscaled = 0.0;\r\n                        IFCLevelInfo currLevelInfo =\r\n                            placementSetter.GetOffsetLevelInfoAndHandle(stairHeight * ii, 1.0, legacyStair.Document, out newLevelHnd, out newOffsetUnscaled);\r\n                        double newOffsetScaled = UnitUtil.ScaleLength(newOffsetUnscaled);\r\n\r\n                        localLevelInfoForFlights.Add(currLevelInfo);\r\n\r\n                        XYZ orig = new XYZ(0.0, 0.0, newOffsetScaled);\r\n                        localPlacementForFlights.Add(ExporterUtil.CreateLocalPlacement(file, newLevelHnd, orig, zDir, xDir));\r\n                     }\r\n                  }\r\n\r\n                  IList<IFCAnyHandle> walkingLineReps = CreateWalkLineReps(exporterIFC, legacyStairOrRamp, legacyStair);\r\n                  IList<IFCAnyHandle> boundaryReps = CreateBoundaryLineReps(exporterIFC, legacyStairOrRamp, legacyStair);\r\n                  IList<IList<GeometryObject>> geometriesOfRuns = legacyStairOrRamp.GetRunGeometries();\r\n                  IList<int> numRisers = legacyStairOrRamp.GetNumberOfRisers();\r\n                  IList<int> numTreads = legacyStairOrRamp.GetNumberOfTreads();\r\n                  IList<double> treadsLength = legacyStairOrRamp.GetTreadsLength();\r\n                  double riserHeight = legacyStairOrRamp.RiserHeight;\r\n\r\n                  int runCount = geometriesOfRuns.Count;\r\n                  int walkingLineCount = walkingLineReps.Count;\r\n                  int boundaryRepCount = boundaryReps.Count;\r\n\r\n                  for (int ii = 0; ii < runCount; ii++)\r\n                  {\r\n                     BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.Medium);\r\n\r\n                     IList<GeometryObject> geometriesOfARun = geometriesOfRuns[ii];\r\n                     BodyData bodyData = BodyExporter.ExportBody(exporterIFC, legacyStair, categoryId, ElementId.InvalidElementId, geometriesOfARun,\r\n                         bodyExporterOptions, ifcECData);\r\n\r\n                     IFCAnyHandle bodyRep = bodyData.RepresentationHnd;\r\n                     if (IFCAnyHandleUtil.IsNullOrHasNoValue(bodyRep))\r\n                     {\r\n                        if (ii < walkingLineCount)\r\n                           ExporterCacheManager.HandleToDeleteCache.Add(walkingLineReps[ii]);\r\n\r\n                        if (ii < boundaryRepCount)\r\n                           ExporterCacheManager.HandleToDeleteCache.Add(boundaryReps[ii]);\r\n\r\n                        continue;\r\n                     }\r\n\r\n                     HashSet<IFCAnyHandle> flightHnds = new HashSet<IFCAnyHandle>();\r\n                     List<IFCAnyHandle> representations = new List<IFCAnyHandle>();\r\n                     if (ii < walkingLineCount)\r\n                        representations.AddIfNotNull(walkingLineReps[ii]);\r\n\r\n                     if (ii < boundaryRepCount)\r\n                        representations.AddIfNotNull(boundaryReps[ii]);\r\n\r\n                     representations.Add(bodyRep);\r\n\r\n                     IFCAnyHandle boundingBoxRep = BoundingBoxExporter.ExportBoundingBox(exporterIFC, geometriesOfARun, Transform.Identity);\r\n                     if (boundingBoxRep != null)\r\n                        representations.Add(boundingBoxRep);\r\n\r\n                     IFCAnyHandle flightRep = IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, representations);\r\n                     IFCAnyHandle flightLocalPlacement = ExporterUtil.CreateLocalPlacement(file, placementSetter.LocalPlacement, null);\r\n\r\n                     IFCAnyHandle flightHnd;\r\n                     string stairName = NamingUtil.GetNameOverride(legacyStair, NamingUtil.GetIFCNamePlusIndex(legacyStair, ii + 1));\r\n                     string ifcType = \"NOTDEFINED\";\r\n                     IFCExportInfoPair exportTypePair = ExporterUtil.GetProductExportType(legacyStair, out ifcType);\r\n                     if (string.IsNullOrEmpty(ifcEnumType))\r\n                        ifcEnumType = ifcType;\r\n\r\n                     string uniqueFlightIndex = \"Flight:0\" + \"Run:\" + ii.ToString();\r\n                     string flightGUID = GUIDUtil.GenerateIFCGuidFrom(\r\n                        GUIDUtil.CreateGUIDString(legacyStair, uniqueFlightIndex));\r\n                     if (isRamp)\r\n                     {\r\n                        flightHnd = IFCInstanceExporter.CreateRampFlight(exporterIFC, legacyStair, flightGUID, ExporterCacheManager.OwnerHistoryHandle,\r\n                            flightLocalPlacement, flightRep, ifcType);\r\n                        flightHnds.Add(flightHnd);\r\n                        IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcRampFlight, ifcType);\r\n                        productWrapper.AddElement(null, flightHnd, placementSetter.LevelInfo, ifcECData, false, exportInfo);\r\n                     }\r\n                     else\r\n                     {\r\n                        flightHnd = IFCInstanceExporter.CreateStairFlight(exporterIFC, legacyStair, flightGUID, ExporterCacheManager.OwnerHistoryHandle,\r\n                            flightLocalPlacement, flightRep, numRisers[ii], numTreads[ii],\r\n                            riserHeight, treadsLength[ii], ifcType);\r\n                        flightHnds.Add(flightHnd);\r\n                        IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcStairFlight, ifcType);\r\n                        productWrapper.AddElement(null, flightHnd, placementSetter.LevelInfo, null, false, exportInfo);\r\n                     }\r\n                     IFCAnyHandleUtil.OverrideNameAttribute(flightHnd, stairName);\r\n                     CategoryUtil.CreateMaterialAssociation(exporterIFC, legacyStair, flightHnd, bodyData.MaterialIds);\r\n\r\n                     components[0].Add(flightHnd);\r\n                     for (int compIdx = 1; compIdx < numFlights; compIdx++)\r\n                     {\r\n                        IFCExportInfoPair exportInfo = new IFCExportInfoPair();\r\n                        uniqueFlightIndex = \"Flight:\" + compIdx.ToString() + \"Run:\" + ii.ToString();\r\n                        string flightCompGUID = GUIDUtil.GenerateIFCGuidFrom(\r\n                           GUIDUtil.CreateGUIDString(legacyStair, uniqueFlightIndex)); \r\n                        if (isRamp)\r\n                        {\r\n                           IFCAnyHandle newLocalPlacement = ExporterUtil.CreateLocalPlacement(file, localPlacementForFlights[compIdx - 1], null);\r\n                           IFCAnyHandle newProdRep = ExporterUtil.CopyProductDefinitionShape(exporterIFC, legacyStair, categoryId, IFCAnyHandleUtil.GetRepresentation(flightHnd));\r\n                           flightHnd = IFCInstanceExporter.CreateRampFlight(exporterIFC, legacyStair, flightCompGUID, ExporterCacheManager.OwnerHistoryHandle,\r\n                               newLocalPlacement, newProdRep, ifcType);\r\n                           components[compIdx].Add(flightHnd);\r\n                           exportInfo.SetByTypeAndPredefinedType(IFCEntityType.IfcRampFlight, ifcType);\r\n                        }\r\n                        else\r\n                        {\r\n                           IFCAnyHandle newLocalPlacement = ExporterUtil.CreateLocalPlacement(file, localPlacementForFlights[compIdx - 1], null);\r\n                           IFCAnyHandle newProdRep = ExporterUtil.CopyProductDefinitionShape(exporterIFC, legacyStair, categoryId, IFCAnyHandleUtil.GetRepresentation(flightHnd));\r\n\r\n                           flightHnd = IFCInstanceExporter.CreateStairFlight(exporterIFC, legacyStair, flightCompGUID, ExporterCacheManager.OwnerHistoryHandle,\r\n                               newLocalPlacement, newProdRep, numRisers[ii], numTreads[ii], riserHeight, treadsLength[ii], ifcType);\r\n                           components[compIdx].Add(flightHnd);\r\n                           exportInfo.SetByTypeAndPredefinedType(IFCEntityType.IfcStairFlight, ifcType);\r\n                        }\r\n                        IFCAnyHandleUtil.OverrideNameAttribute(flightHnd, stairName);\r\n\r\n                        productWrapper.AddElement(null, flightHnd, placementSetter.LevelInfo, null, false, exportInfo);\r\n                        CategoryUtil.CreateMaterialAssociation(exporterIFC, legacyStair, flightHnd, bodyData.MaterialIds);\r\n                        flightHnds.Add(flightHnd);\r\n                     }\r\n                  }\r\n\r\n                  ifcECData.SetLocalPlacement(placementSetter.LocalPlacement);\r\n\r\n                  IList<IList<GeometryObject>> geometriesOfLandings = legacyStairOrRamp.GetLandingGeometries();\r\n                  for (int ii = 0; ii < geometriesOfLandings.Count; ii++)\r\n                  {\r\n                     using (IFCExportBodyParams ecData = new IFCExportBodyParams())\r\n                     {\r\n                        BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n                        bodyExporterOptions.TessellationLevel = BodyExporterOptions.BodyTessellationLevel.Coarse;\r\n                        IList<GeometryObject> geometriesOfALanding = geometriesOfLandings[ii];\r\n                        BodyData bodyData = BodyExporter.ExportBody(exporterIFC, legacyStair, categoryId, ElementId.InvalidElementId, geometriesOfALanding,\r\n                            bodyExporterOptions, ecData);\r\n\r\n                        IFCAnyHandle bodyRep = bodyData.RepresentationHnd;\r\n                        if (IFCAnyHandleUtil.IsNullOrHasNoValue(bodyRep))\r\n                        {\r\n                           ecData.ClearOpenings();\r\n                           if ((ii + runCount) < walkingLineCount)\r\n                              ExporterCacheManager.HandleToDeleteCache.Add(walkingLineReps[ii + runCount]);\r\n\r\n                           if ((ii + runCount) < boundaryRepCount)\r\n                              ExporterCacheManager.HandleToDeleteCache.Add(boundaryReps[ii + runCount]);\r\n\r\n                           continue;\r\n                        }\r\n\r\n                        List<IFCAnyHandle> representations = new List<IFCAnyHandle>();\r\n                        if ((ii + runCount) < walkingLineCount)\r\n                           representations.AddIfNotNull(walkingLineReps[ii + runCount]);\r\n\r\n                        if ((ii + runCount) < boundaryRepCount)\r\n                           representations.AddIfNotNull(boundaryReps[ii + runCount]);\r\n\r\n                        representations.Add(bodyRep);\r\n\r\n                        IFCAnyHandle boundingBoxRep = BoundingBoxExporter.ExportBoundingBox(exporterIFC, geometriesOfALanding, Transform.Identity);\r\n                        if (boundingBoxRep != null)\r\n                           representations.Add(boundingBoxRep);\r\n\r\n                        IFCAnyHandle shapeHnd = IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, representations);\r\n                        IFCAnyHandle landingLocalPlacement = ExporterUtil.CreateLocalPlacement(file, placementSetter.LocalPlacement, null);\r\n                        string stairName = NamingUtil.GetIFCNamePlusIndex(legacyStair, ii + 1);\r\n                        string uniqueLandingIndex = \"Flight:0\" + \"Landing:\" + ii.ToString();\r\n                        string landingGUID = GUIDUtil.GenerateIFCGuidFrom(\r\n                           GUIDUtil.CreateGUIDString(legacyStair, uniqueLandingIndex));\r\n\r\n                        string ifcType = \"LANDING\";\r\n                        IFCAnyHandle slabHnd = IFCInstanceExporter.CreateSlab(exporterIFC, legacyStair, landingGUID, ExporterCacheManager.OwnerHistoryHandle,\r\n                            landingLocalPlacement, shapeHnd, ifcType);\r\n                        IFCAnyHandleUtil.OverrideNameAttribute(slabHnd, stairName);\r\n                        IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcSlab, ifcType);\r\n                        productWrapper.AddElement(null, slabHnd, placementSetter.LevelInfo, ecData, false, exportInfo);\r\n                        CategoryUtil.CreateMaterialAssociation(exporterIFC, legacyStair, slabHnd, bodyData.MaterialIds);\r\n\r\n                        components[0].Add(slabHnd);\r\n                        for (int compIdx = 1; compIdx < numFlights; compIdx++)\r\n                        {\r\n                           uniqueLandingIndex = \"Flight:\" + compIdx.ToString() + \"Landing:\" + ii.ToString();\r\n                           landingGUID = GUIDUtil.GenerateIFCGuidFrom(\r\n                              GUIDUtil.CreateGUIDString(legacyStair, uniqueLandingIndex));\r\n\r\n                           IFCAnyHandle newLocalPlacement = ExporterUtil.CreateLocalPlacement(file, localPlacementForFlights[compIdx - 1], null);\r\n                           IFCAnyHandle newProdRep = ExporterUtil.CopyProductDefinitionShape(exporterIFC, legacyStair, categoryId, IFCAnyHandleUtil.GetRepresentation(slabHnd));\r\n\r\n                           IFCAnyHandle newSlabHnd = IFCInstanceExporter.CreateSlab(exporterIFC, legacyStair, landingGUID, ExporterCacheManager.OwnerHistoryHandle,\r\n                               newLocalPlacement, newProdRep, ifcType);\r\n                           IFCAnyHandleUtil.OverrideNameAttribute(newSlabHnd, stairName);\r\n                           CategoryUtil.CreateMaterialAssociation(exporterIFC, legacyStair, slabHnd, bodyData.MaterialIds);\r\n                           components[compIdx].Add(newSlabHnd);\r\n                           IFCExportInfoPair compExportInfo = new IFCExportInfoPair(IFCEntityType.IfcSlab, ifcType);\r\n                           productWrapper.AddElement(null, newSlabHnd, placementSetter.LevelInfo, ecData, false, compExportInfo);\r\n                        }\r\n                     }\r\n                  }\r\n\r\n                  IList<GeometryObject> geometriesOfStringer = legacyStairOrRamp.GetStringerGeometries();\r\n                  for (int ii = 0; ii < geometriesOfStringer.Count; ii++)\r\n                  {\r\n                     using (IFCExportBodyParams ecData = new IFCExportBodyParams())\r\n                     {\r\n                        BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n                        bodyExporterOptions.TessellationLevel = BodyExporterOptions.BodyTessellationLevel.Coarse;\r\n                        GeometryObject geometryOfStringer = geometriesOfStringer[ii];\r\n                        BodyData bodyData = BodyExporter.ExportBody(exporterIFC, legacyStair, categoryId, ElementId.InvalidElementId, geometryOfStringer,\r\n                            bodyExporterOptions, ecData);\r\n\r\n                        IFCAnyHandle bodyRep = bodyData.RepresentationHnd;\r\n                        if (IFCAnyHandleUtil.IsNullOrHasNoValue(bodyRep))\r\n                        {\r\n                           ecData.ClearOpenings();\r\n                           continue;\r\n                        }\r\n\r\n                        List<IFCAnyHandle> representations = new List<IFCAnyHandle>();\r\n                        representations.Add(bodyRep);\r\n\r\n                        IFCAnyHandle boundingBoxRep = BoundingBoxExporter.ExportBoundingBox(exporterIFC, geometriesOfStringer, Transform.Identity);\r\n                        if (boundingBoxRep != null)\r\n                           representations.Add(boundingBoxRep);\r\n\r\n                        IFCAnyHandle stringerRepHnd = IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, representations);\r\n                        IFCAnyHandle stringerLocalPlacement = ExporterUtil.CreateLocalPlacement(file, placementSetter.LocalPlacement, null);\r\n                        string stairName = NamingUtil.GetIFCNamePlusIndex(legacyStair, ii + 1);\r\n                        string uniqueStringerIndex = \"Flight:0\" + \"Stringer:\" + ii.ToString();\r\n                        string stringerGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                           GUIDUtil.CreateGUIDString(legacyStair, uniqueStringerIndex));\r\n                        string ifcType = \"STRINGER\";\r\n                        IFCAnyHandle memberHnd = IFCInstanceExporter.CreateMember(exporterIFC, \r\n                           legacyStair, stringerGuid, ExporterCacheManager.OwnerHistoryHandle,\r\n                           stringerLocalPlacement, stringerRepHnd, ifcType);\r\n                        IFCAnyHandleUtil.OverrideNameAttribute(memberHnd, stairName);\r\n                        IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcMember, ifcType);\r\n                        productWrapper.AddElement(null, memberHnd, placementSetter.LevelInfo, ecData, false, exportInfo);\r\n                        PropertyUtil.CreateBeamColumnMemberBaseQuantities(exporterIFC, memberHnd, null, ecData);\r\n                        CategoryUtil.CreateMaterialAssociation(exporterIFC, legacyStair, memberHnd, bodyData.MaterialIds);\r\n\r\n                        components[0].Add(memberHnd);\r\n                        for (int compIdx = 1; compIdx < numFlights; compIdx++)\r\n                        {\r\n                           uniqueStringerIndex = \"Flight:\" + compIdx.ToString() + \"Stringer:\" + ii.ToString();\r\n                           stringerGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                              GUIDUtil.CreateGUIDString(legacyStair, uniqueStringerIndex));\r\n\r\n                           IFCAnyHandle newLocalPlacement = ExporterUtil.CreateLocalPlacement(file, localPlacementForFlights[compIdx - 1], null);\r\n                           IFCAnyHandle newProdRep = ExporterUtil.CopyProductDefinitionShape(exporterIFC, legacyStair, categoryId, IFCAnyHandleUtil.GetRepresentation(memberHnd));\r\n\r\n                           IFCAnyHandle newMemberHnd = IFCInstanceExporter.CreateMember(exporterIFC, legacyStair,\r\n                              stringerGuid, ExporterCacheManager.OwnerHistoryHandle, newLocalPlacement, newProdRep,ifcType);\r\n                           IFCAnyHandleUtil.OverrideNameAttribute(newMemberHnd, stairName);\r\n                           CategoryUtil.CreateMaterialAssociation(exporterIFC, legacyStair,memberHnd, bodyData.MaterialIds);\r\n                           components[compIdx].Add(newMemberHnd);\r\n                           IFCExportInfoPair compExportInfo = new IFCExportInfoPair(IFCEntityType.IfcOpeningElement, ifcType);\r\n                           productWrapper.AddElement(null, newMemberHnd, placementSetter.LevelInfo, ecData, true, compExportInfo);\r\n                        }\r\n                     }\r\n                  }\r\n\r\n                  List<IFCAnyHandle> createdStairs = new List<IFCAnyHandle>();\r\n                  if (!string.IsNullOrEmpty(ifcEnumType))\r\n                  {\r\n                     IFCExportInfoPair exportTypePair = ExporterUtil.GetProductExportType(legacyStair, out ifcEnumType);\r\n                  }\r\n                  if (isRamp)\r\n                  {\r\n                     string rampType = RampExporter.GetIFCRampType(ifcEnumType);\r\n                     string rampName = NamingUtil.GetIFCName(legacyStair);\r\n                     IFCAnyHandle containedRampHnd = IFCInstanceExporter.CreateRamp(exporterIFC, legacyStair, GUIDUtil.CreateGUID(legacyStair), ExporterCacheManager.OwnerHistoryHandle,\r\n                         placementSetter.LocalPlacement, null, rampType);\r\n                     IFCAnyHandleUtil.OverrideNameAttribute(containedRampHnd, rampName);\r\n                     IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcRamp, rampType);\r\n                     IFCAnyHandle typeHnd = ExporterUtil.CreateGenericTypeFromElement(legacyStair, exportInfo, file, productWrapper);\r\n                     if (!IFCAnyHandleUtil.IsNullOrHasNoValue(typeHnd))\r\n                        ExporterCacheManager.TypeRelationsCache.Add(typeHnd, containedRampHnd);\r\n                     productWrapper.AddElement(legacyStair, containedRampHnd, placementSetter.LevelInfo, ifcECData, true, exportInfo);\r\n                     createdStairs.Add(containedRampHnd);\r\n                  }\r\n                  else\r\n                  {\r\n                     string stairType = GetIFCStairType(ifcEnumType);\r\n                     string stairName = NamingUtil.GetIFCName(legacyStair);\r\n                     IFCAnyHandle containedStairHnd = IFCInstanceExporter.CreateStair(exporterIFC, legacyStair, GUIDUtil.CreateGUID(legacyStair), ExporterCacheManager.OwnerHistoryHandle,\r\n                         placementSetter.LocalPlacement, null, stairType);\r\n                     IFCAnyHandleUtil.OverrideNameAttribute(containedStairHnd, stairName);\r\n                     IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcStair, stairType);\r\n                     IFCAnyHandle typeHnd = ExporterUtil.CreateGenericTypeFromElement(legacyStair, exportInfo, file, productWrapper);\r\n                     if (!IFCAnyHandleUtil.IsNullOrHasNoValue(typeHnd))\r\n                        ExporterCacheManager.TypeRelationsCache.Add(typeHnd, containedStairHnd);\r\n                     productWrapper.AddElement(legacyStair, containedStairHnd, placementSetter.LevelInfo, ifcECData, true, exportInfo);\r\n                     createdStairs.Add(containedStairHnd);\r\n                  }\r\n\r\n                  // multi-story stairs.\r\n                  if (numFlights > 1)\r\n                  {\r\n                     IFCAnyHandle localPlacement = placementSetter.LocalPlacement;\r\n                     IFCAnyHandle relPlacement = GeometryUtil.GetRelativePlacementFromLocalPlacement(localPlacement);\r\n                     IFCAnyHandle ptHnd = IFCAnyHandleUtil.GetLocation(relPlacement);\r\n                     IList<double> origCoords = null;\r\n                     if (!IFCAnyHandleUtil.IsNullOrHasNoValue(ptHnd))\r\n                        origCoords = IFCAnyHandleUtil.GetCoordinates(ptHnd);\r\n\r\n                     for (int ii = 1; ii < numFlights; ii++)\r\n                     {\r\n                        IFCLevelInfo levelInfo = localLevelInfoForFlights[ii - 1];\r\n                        if (levelInfo == null)\r\n                           levelInfo = placementSetter.LevelInfo;\r\n\r\n                        localPlacement = localPlacementForFlights[ii - 1];\r\n\r\n                        // relate to bottom stair or closest level?  For code checking, we need closest level, and\r\n                        // that seems good enough for the general case.\r\n                        if (!IFCAnyHandleUtil.IsNullOrHasNoValue(ptHnd))\r\n                        {\r\n                           IFCAnyHandle relPlacement2 = GeometryUtil.GetRelativePlacementFromLocalPlacement(localPlacement);\r\n                           IFCAnyHandle newPt = IFCAnyHandleUtil.GetLocation(relPlacement2);\r\n\r\n                           List<double> newCoords = new List<double>();\r\n                           newCoords.Add(origCoords[0]);\r\n                           newCoords.Add(origCoords[1]);\r\n                           newCoords.Add(origCoords[2]);\r\n                           if (!IFCAnyHandleUtil.IsNullOrHasNoValue(newPt))\r\n                           {\r\n                              IList<double> addToCoords;\r\n                              addToCoords = IFCAnyHandleUtil.GetCoordinates(newPt);\r\n                              newCoords[0] += addToCoords[0];\r\n                              newCoords[1] += addToCoords[1];\r\n                              newCoords[2] = addToCoords[2];\r\n                           }\r\n\r\n                           IFCAnyHandle locPt = ExporterUtil.CreateCartesianPoint(file, newCoords);\r\n                           IFCAnyHandleUtil.SetAttribute(relPlacement2, \"Location\", locPt);\r\n                        }\r\n\r\n                        string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n                           GUIDUtil.CreateGUIDString(legacyStair, \"Main Flight:\" + ii.ToString()));\r\n                        if (isRamp)\r\n                        {\r\n                           string rampType = RampExporter.GetIFCRampType(ifcEnumType);\r\n                           string stairName = NamingUtil.GetIFCName(legacyStair);\r\n                           IFCAnyHandle containedRampHnd = IFCInstanceExporter.CreateRamp(exporterIFC, \r\n                              legacyStair, guid, ExporterCacheManager.OwnerHistoryHandle,\r\n                              localPlacement, null, rampType);\r\n                           IFCAnyHandleUtil.OverrideNameAttribute(containedRampHnd, stairName);\r\n                           IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcRamp, rampType);\r\n                           productWrapper.AddElement(legacyStair, containedRampHnd, levelInfo, ifcECData, true, exportInfo);\r\n                           // TODO: Determine why we don't add containedRampHnd here.\r\n                        }\r\n                        else\r\n                        {\r\n                           string stairType = GetIFCStairType(ifcEnumType);\r\n                           string stairName = NamingUtil.GetIFCName(legacyStair);\r\n                           IFCAnyHandle containedStairHnd = IFCInstanceExporter.CreateStair(exporterIFC, \r\n                              legacyStair, guid, ExporterCacheManager.OwnerHistoryHandle,\r\n                              localPlacement, null, stairType);\r\n                           IFCAnyHandleUtil.OverrideNameAttribute(containedStairHnd, stairName);\r\n                           IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcStair, stairType);\r\n                           productWrapper.AddElement(legacyStair, containedStairHnd, levelInfo, ifcECData, true, exportInfo);\r\n                           createdStairs.Add(containedStairHnd);\r\n                        }\r\n                     }\r\n                  }\r\n\r\n                  localPlacementForFlights.Insert(0, placementSetter.LocalPlacement);\r\n\r\n                  StairRampContainerInfo stairRampInfo = new StairRampContainerInfo(createdStairs, components, localPlacementForFlights);\r\n                  ExporterCacheManager.StairRampContainerInfoCache.AddStairRampContainerInfo(legacyStair.Id, stairRampInfo);\r\n               }\r\n            }\r\n\r\n            tr.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a staircase to IfcStair.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The stairs element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void Export(ExporterIFC exporterIFC, Element element, GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(IFCEntityType.IfcStair))\r\n            return;\r\n\r\n         IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(element, out _);\r\n         string ifcEnumType = exportType.GetPredefinedTypeOrDefault();\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            if (element is Stairs)\r\n            {\r\n               Stairs stair = element as Stairs;\r\n               List<double> flightOffsets = GetFlightsOffsetList(stair);\r\n               if (flightOffsets.Count > 0)\r\n               {\r\n                  ExportStairsAsContainer(exporterIFC, exportType.PredefinedType, stair, geometryElement, flightOffsets, productWrapper);\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(productWrapper.GetAnElement()))\r\n                     ExportStairAsSingleGeometry(exporterIFC, ifcEnumType, element, geometryElement, flightOffsets, productWrapper);\r\n               }\r\n            }\r\n            else\r\n            {\r\n               // If we didn't create a handle here, then the element wasn't a \"native\" legacy Stairs, and is likely a FamilyInstance or a DirectShape.\r\n               ExportLegacyStairOrRampAsContainer(exporterIFC, ifcEnumType, element, geometryElement, productWrapper);\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(productWrapper.GetAnElement()))\r\n               {\r\n                  double defaultHeight = GetDefaultHeightForLegacyStair(element.Document);\r\n                  int numFlights = GetNumFlightsForLegacyStair(element, defaultHeight);\r\n                  List<double> flightOffsets = new List<double>();\r\n                  double heightNonScaled = GetStairsHeight(element);\r\n                  for (int ii = 0; ii < numFlights; ii++)\r\n                  {\r\n                     flightOffsets.Add(heightNonScaled * ii);\r\n                  }\r\n                  if (numFlights > 0)\r\n                     ExportStairAsSingleGeometry(exporterIFC, ifcEnumType, element, geometryElement, flightOffsets, productWrapper);\r\n               }\r\n            }\r\n\r\n            tr.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates boundary line representations from stair boundary lines.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"legacyStair\">The stair.</param>\r\n      /// <param name=\"legacyStairElem\">The stair element.</param>\r\n      /// <returns>Boundary line representations.</returns>\r\n      static IList<IFCAnyHandle> CreateBoundaryLineReps(ExporterIFC exporterIFC, IFCLegacyStairOrRamp legacyStair, Element legacyStairElem)\r\n      {\r\n         IFCAnyHandle contextOfItemsBoundary = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.FootPrint);\r\n         \r\n         IList<IFCAnyHandle> boundaryLineReps = new List<IFCAnyHandle>();\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         ElementId cateId = CategoryUtil.GetSafeCategoryId(legacyStairElem);\r\n\r\n         HashSet<IFCAnyHandle> curveSet = new HashSet<IFCAnyHandle>();\r\n         IList<CurveLoop> boundaryLines = legacyStair.GetBoundaryLines();\r\n         foreach (CurveLoop curveLoop in boundaryLines)\r\n         {\r\n            Transform lcs = Transform.Identity;\r\n            foreach (Curve curve in curveLoop)\r\n            {\r\n               if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n               {\r\n                  curveSet.AddIfNotNull(GeometryUtil.CreatePolyCurveFromCurve(exporterIFC, curve));\r\n               }\r\n               else\r\n               {\r\n                  IFCGeometryInfo info = IFCGeometryInfo.CreateCurveGeometryInfo(exporterIFC, lcs, XYZ.BasisZ, false);\r\n                  ExporterIFCUtils.CollectGeometryInfo(exporterIFC, info, curve, XYZ.Zero, false);\r\n                  IList<IFCAnyHandle> curves = info.GetCurves();\r\n\r\n                  if (curves.Count == 1)\r\n                  {\r\n                     curveSet.AddIfNotNull(curves[0]);\r\n                  }\r\n               }\r\n            }\r\n            IFCAnyHandle curveRepresentationItem = IFCInstanceExporter.CreateGeometricSet(file, curveSet);\r\n            HashSet<IFCAnyHandle> bodyItems = new HashSet<IFCAnyHandle>();\r\n            bodyItems.Add(curveRepresentationItem);\r\n            IFCAnyHandle boundaryLineRep = RepresentationUtil.CreateGeometricSetRep(exporterIFC, legacyStairElem, cateId, \"FootPrint\",\r\n               contextOfItemsBoundary, bodyItems);\r\n            boundaryLineReps.Add(boundaryLineRep);\r\n         }\r\n         return boundaryLineReps;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates walk line representations from stair walk lines.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"legacyStair\">The stair.</param>\r\n      /// <param name=\"legacyStairElem\">The stair element.</param>\r\n      /// <returns>The walk line representation handles.  Some of them may be null.</returns>\r\n      static IList<IFCAnyHandle> CreateWalkLineReps(ExporterIFC exporterIFC, IFCLegacyStairOrRamp legacyStair, Element legacyStairElem)\r\n      {\r\n         IList<IFCAnyHandle> walkLineReps = new List<IFCAnyHandle>();\r\n         IFCAnyHandle contextOfItemsWalkLine = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Axis);\r\n\r\n         ElementId cateId = CategoryUtil.GetSafeCategoryId(legacyStairElem);\r\n         Transform lcs = Transform.Identity;\r\n         XYZ projDir = XYZ.BasisZ;\r\n\r\n         IList<IList<Curve>> curvesArr = legacyStair.GetWalkLines();\r\n         foreach (IList<Curve> curves in curvesArr)\r\n         {\r\n            IFCAnyHandle curve = GeometryUtil.CreateIFCCurveFromCurves(exporterIFC, curves, lcs, projDir);\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(curve))\r\n            {\r\n               HashSet<IFCAnyHandle> bodyItems = new HashSet<IFCAnyHandle>() { curve };\r\n               walkLineReps.Add(RepresentationUtil.CreateShapeRepresentation(exporterIFC, legacyStairElem, cateId,\r\n                   contextOfItemsWalkLine, \"Axis\", \"Curve2D\", bodyItems));\r\n            }\r\n            else\r\n               walkLineReps.Add(null);\r\n         }\r\n         return walkLineReps;\r\n      }\r\n\r\n      private static void CreateWalkingLineAndFootprint(ExporterIFC exporterIFC, Element element, BodyData bodyData, \r\n         ElementId categoryId, Transform trf, ref List<IFCAnyHandle> reps)\r\n      {\r\n         // Only for StairsRun or StairsLanding\r\n         bool isStairRun;\r\n         if (element is StairsRun)\r\n            isStairRun = true;\r\n         else if (element is StairsLanding)\r\n            isStairRun = false;\r\n         else\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle contextOfItemsFootPrint = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.FootPrint);\r\n         IFCAnyHandle contextOfItemsAxis = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Axis);\r\n\r\n         Transform trfFromBodyData = new Transform(bodyData.OffsetTransform);\r\n         trfFromBodyData.Origin = bodyData.OffsetTransform.Origin;\r\n         Transform boundaryTrf = (bodyData.OffsetTransform == null) ? trf : trf.Multiply(trfFromBodyData);\r\n         XYZ runBoundaryProjDir = boundaryTrf.BasisZ;\r\n\r\n         CurveLoop boundary;\r\n         if (isStairRun)\r\n            boundary = (element as StairsRun).GetFootprintBoundary();\r\n         else\r\n            boundary = (element as StairsLanding).GetFootprintBoundary();\r\n\r\n         IFCAnyHandle boundaryHnd = GeometryUtil.CreateIFCCurveFromCurveLoop(exporterIFC, boundary,\r\n             boundaryTrf, runBoundaryProjDir);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(boundaryHnd))\r\n         {\r\n            HashSet<IFCAnyHandle> geomSelectSet = new HashSet<IFCAnyHandle>() { boundaryHnd };\r\n\r\n            HashSet<IFCAnyHandle> boundaryItems = new HashSet<IFCAnyHandle>()\r\n            { IFCInstanceExporter.CreateGeometricSet(file, geomSelectSet) };\r\n\r\n            IFCAnyHandle boundaryRep = RepresentationUtil.CreateGeometricSetRep(exporterIFC, element, categoryId, \"FootPrint\",\r\n                contextOfItemsFootPrint, boundaryItems);\r\n            reps.Add(boundaryRep);\r\n         }\r\n\r\n         CurveLoop walkingLine;\r\n         if (isStairRun)\r\n            walkingLine = (element as StairsRun).GetStairsPath();\r\n         else\r\n            walkingLine = (element as StairsLanding).GetStairsPath();\r\n\r\n         IFCAnyHandle walkingLineHnd = GeometryUtil.CreateIFCCurveFromCurveLoop(exporterIFC, walkingLine,\r\n             boundaryTrf, runBoundaryProjDir);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(walkingLineHnd))\r\n         {\r\n            HashSet<IFCAnyHandle> geomSelectSet = new HashSet<IFCAnyHandle>() { walkingLineHnd };\r\n\r\n            HashSet<IFCAnyHandle> walkingLineItems = new HashSet<IFCAnyHandle>()\r\n            { IFCInstanceExporter.CreateGeometricSet(file, geomSelectSet) };\r\n\r\n            IFCAnyHandle walkingLineRep = RepresentationUtil.CreateGeometricSetRep(exporterIFC, element, categoryId, \"Axis\",\r\n                contextOfItemsAxis, walkingLineItems);\r\n            reps.Add(walkingLineRep);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Delete StairFlight data in case it is not needed anymore, to be collpased into a single IfcStair in case it is a single object\r\n      /// </summary>\r\n      /// <param name=\"flightHnd\"></param>\r\n      public static void DeleteStairFlightData(IFCAnyHandle flightHnd)\r\n      {\r\n         // Clear references to the StairFlight in the Cache before deleting\r\n         ExporterCacheManager.HandleToElementCache.Delete(flightHnd);\r\n\r\n         // This cannot be deleted yet until all the necessary references in the cache can be removed. The actual delete will be done at the end of EndExport\r\n         //flightHnd.Delete();\r\n         ExporterCacheManager.HandleToDeleteCache.Add(flightHnd);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/StructuralMemberExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// A structure to contain information about the defining axis of a structural member element (beam, column, brace).\r\n   /// </summary>\r\n   public class StructuralMemberAxisInfo\r\n   {\r\n      /// <summary>\r\n      /// The default constructor.\r\n      /// </summary>\r\n      public StructuralMemberAxisInfo()\r\n      {\r\n         Axis = null;\r\n         LCSAsTransform = null;\r\n         AxisDirection = null;\r\n         AxisNormal = null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The curve that represents the structural member axis.\r\n      /// </summary>\r\n      public Curve Axis { get; set; }\r\n\r\n      /// <summary>\r\n      /// The local coordinate system of the structural member used for IFC export as a transform.\r\n      /// </summary>\r\n      public Transform LCSAsTransform { get; set; }\r\n\r\n      /// <summary>\r\n      /// The tangent to the axis at the start parameter of the axis curve.\r\n      /// </summary>\r\n      public XYZ AxisDirection { get; set; }\r\n\r\n      /// <summary>\r\n      /// The normal to the axis at the start parameter of the axis curve.\r\n      /// </summary>\r\n      public XYZ AxisNormal { get; set; }\r\n   }\r\n\r\n   class StructuralMemberExporter\r\n   {\r\n      /// <summary>\r\n      /// Get information about the structural member axis, if possible.\r\n      /// Here we will do the following:\r\n      /// - Calculate the Axis LCS by using the Axis curve itself with the StartPoint of the curve to be the origin and the tangent of the curve at origin as the direction\r\n      /// - The curve is then transformed to its LCS\r\n      /// </summary>\r\n      /// <param name=\"element\">The structural member element.</param>\r\n      /// <returns>The StructuralMemberAxisInfo structure, or null if the structural member has no axis, or it is not a Line or Arc.</returns>\r\n      public static StructuralMemberAxisInfo GetStructuralMemberAxisTransform(Element element)\r\n      {\r\n         StructuralMemberAxisInfo axisInfo = null;\r\n         Transform orientTrf = Transform.Identity;\r\n\r\n         XYZ structMemberDirection = null;\r\n         XYZ projDir = null;\r\n         Curve curve = null;\r\n\r\n         LocationCurve locCurve = element.Location as LocationCurve;\r\n         bool canExportAxis = (locCurve != null);\r\n\r\n         if (canExportAxis)\r\n         {\r\n            // Here we are defining the Axis Curve LCS by using the start point (for line) as the origin.\r\n            // For the Arc, the center is the origin\r\n            // The Structural member direction is the X-Axis\r\n            curve = locCurve.Curve;\r\n            if (curve is Line)\r\n            {\r\n               Line line = curve as Line;\r\n               XYZ planeY;\r\n\r\n               XYZ LCSorigin = line.GetEndPoint(0);\r\n               structMemberDirection = line.Direction.Normalize();\r\n               if (Math.Abs(structMemberDirection.Z) < 0.707)  // approx 1.0/sqrt(2.0)\r\n               {\r\n                  planeY = XYZ.BasisZ.CrossProduct(structMemberDirection).Normalize();\r\n               }\r\n               else\r\n               {\r\n                  planeY = XYZ.BasisX.CrossProduct(structMemberDirection).Normalize();\r\n               }\r\n               projDir = structMemberDirection.CrossProduct(planeY);\r\n               orientTrf.BasisX = structMemberDirection; orientTrf.BasisY = planeY; orientTrf.BasisZ = projDir; orientTrf.Origin = LCSorigin;\r\n            }\r\n            else if (curve is Arc)\r\n            {\r\n               XYZ yDir;\r\n               Arc arc = curve as Arc;\r\n               structMemberDirection = arc.XDirection.Normalize();\r\n               yDir = arc.YDirection.Normalize();\r\n               projDir = arc.Normal;\r\n\r\n               XYZ center = arc.Center;\r\n\r\n               if (!MathUtil.IsAlmostZero(structMemberDirection.DotProduct(yDir)))\r\n               {\r\n                  // ensure that beamDirection and yDir are orthogonal\r\n                  yDir = projDir.CrossProduct(structMemberDirection);\r\n                  yDir = yDir.Normalize();\r\n               }\r\n               orientTrf.BasisX = structMemberDirection; orientTrf.BasisY = yDir; orientTrf.BasisZ = projDir; orientTrf.Origin = center;\r\n            }\r\n            else\r\n            {\r\n               canExportAxis = false;\r\n            }\r\n         }\r\n\r\n         if (canExportAxis)\r\n         {\r\n            axisInfo = new StructuralMemberAxisInfo();\r\n            axisInfo.Axis = curve.CreateTransformed(orientTrf.Inverse);       // transform the curve into its LCS\r\n            axisInfo.AxisDirection = orientTrf.BasisX;                // We define here the Axis Curve to be following the X-axis\r\n            axisInfo.AxisNormal = orientTrf.BasisZ;\r\n            axisInfo.LCSAsTransform = orientTrf;\r\n         }\r\n\r\n         return axisInfo;\r\n      }\r\n\r\n      static Transform FlipYTrf()\r\n      {\r\n         Transform flipYTrf = Transform.Identity;\r\n         flipYTrf.BasisX = new XYZ(1, 0, 0);\r\n         flipYTrf.BasisY = new XYZ(0, -1, 0);\r\n         flipYTrf.BasisZ = new XYZ(0, 0, 1);\r\n         flipYTrf.Origin = new XYZ(0, 0, 0);\r\n         return flipYTrf;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create the handle corresponding to the \"Axis\" IfcRepresentation for a structural member objects, if possible.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC class.</param>\r\n      /// <param name=\"element\">The structural member element.</param>\r\n      /// <param name=\"catId\">The structural member category id.</param>\r\n      /// <param name=\"axisInfo\">The optional structural member axis information.</param>\r\n      /// <param name=\"offsetTransform\">The optional offset transform applied to the \"Body\" representation.</param>\r\n      /// <returns>The handle, or null if not created.</returns>\r\n      public static IFCAnyHandle CreateStructuralMemberAxis(ExporterIFC exporterIFC, Element element, ElementId catId, StructuralMemberAxisInfo axisInfo, Transform newTransformLCS)\r\n      {\r\n         if (axisInfo == null)\r\n            return null;\r\n\r\n         // This Axis should have been transformed into its ECS position previously (in GetStructuralMemberAxisTransform())\r\n         Curve curve = axisInfo.Axis;\r\n         Transform offset = Transform.Identity;\r\n         if (newTransformLCS != null)\r\n         {\r\n            // We need to flip the Left-handed transform to the right-hand one as IFC only support right-handed coordinate system\r\n            if (newTransformLCS.Determinant < 0)\r\n            {\r\n               XYZ orig = newTransformLCS.Origin;\r\n               newTransformLCS.Origin = XYZ.Zero;\r\n               offset = FlipYTrf().Multiply(newTransformLCS);\r\n               offset.Origin = orig;\r\n            }\r\n            else\r\n               offset = newTransformLCS;\r\n         }\r\n\r\n         // Calculate the transformation matrix to tranform the original Axis Curve at its ECS into the new ECS assigned in the offset\r\n         curve = curve.CreateTransformed(offset.Inverse.Multiply(axisInfo.LCSAsTransform));\r\n\r\n         IDictionary<IFCFuzzyXYZ, IFCAnyHandle> cachePoints = new Dictionary<IFCFuzzyXYZ, IFCAnyHandle>();\r\n         const GeometryUtil.TrimCurvePreference trimCurvePreference = GeometryUtil.TrimCurvePreference.TrimmedCurve;\r\n         IFCAnyHandle ifcCurveHnd = GeometryUtil.CreateIFCCurveFromRevitCurve(exporterIFC.GetFile(), \r\n            exporterIFC, curve, true, cachePoints, trimCurvePreference);\r\n         IList<IFCAnyHandle> axis_items = new List<IFCAnyHandle>();\r\n         if (!(IFCAnyHandleUtil.IsNullOrHasNoValue(ifcCurveHnd)))\r\n            axis_items.Add(ifcCurveHnd);\r\n\r\n         if (axis_items.Count > 0)\r\n         {\r\n            IFCRepresentationIdentifier identifier = IFCRepresentationIdentifier.Axis;\r\n            string identifierOpt = identifier.ToString();   // This is by IFC2x2+ convention.\r\n            string representationTypeOpt = \"Curve3D\";  // This is by IFC2x2+ convention.\r\n            IFCAnyHandle contextOfItems = ExporterCacheManager.Get3DContextHandle(identifier);\r\n            IFCAnyHandle axisRep = RepresentationUtil.CreateShapeRepresentation(exporterIFC, \r\n               element, catId, contextOfItems, identifierOpt, representationTypeOpt, \r\n               axis_items);\r\n            return axisRep;\r\n         }\r\n\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/SurfaceExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export geometry to surface representation.\r\n   /// </summary>\r\n   class SurfaceExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports a geometry element to boundary representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"exportBoundaryRep\">True if to export boundary representation.</param>\r\n      /// <param name=\"exportAsFacetation\">True if to export the geometry as facetation.</param>\r\n      /// <param name=\"bodyRep\">Body representation.</param>\r\n      /// <param name=\"boundaryRep\">Boundary representation.</param>\r\n      /// <returns>True if success, false if fail.</returns>\r\n      public static bool ExportSurface(ExporterIFC exporterIFC, Element element, GeometryElement geometryElement,\r\n         bool exportBoundaryRep, bool exportAsFacetation, ref IFCAnyHandle bodyRep, ref IFCAnyHandle boundaryRep)\r\n      {\r\n         if (geometryElement == null)\r\n            return false;\r\n\r\n         IFCGeometryInfo ifcGeomInfo = null;\r\n         Document doc = element.Document;\r\n         Plane plane = GeometryUtil.CreateDefaultPlane();\r\n         XYZ projDir = new XYZ(0, 0, 1);\r\n         double eps = UnitUtil.ScaleLength(doc.Application.VertexTolerance);\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle surface;\r\n         ICollection<IFCAnyHandle> boundaryRepresentations = new List<IFCAnyHandle>();\r\n\r\n         ISet<IFCAnyHandle> surfaceItems = new HashSet<IFCAnyHandle>();\r\n         // Use tessellated geometry for surface in IFC Reference View\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView || ExporterCacheManager.ExportOptionsCache.ExportAs4General)\r\n         {\r\n            BodyExporterOptions options = new BodyExporterOptions(false, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n            IList<IFCAnyHandle> items = BodyExporter.ExportBodyAsTessellatedFaceSet(exporterIFC, element, options, geometryElement);\r\n            if (items == null || items.Count == 0)\r\n               return false;\r\n\r\n            foreach (IFCAnyHandle item in items)\r\n               surfaceItems.Add(item);\r\n         }\r\n         else\r\n         {\r\n            ifcGeomInfo = IFCGeometryInfo.CreateFaceGeometryInfo(exporterIFC, plane, projDir, eps, exportBoundaryRep);\r\n\r\n            ExporterIFCUtils.CollectGeometryInfo(exporterIFC, ifcGeomInfo, geometryElement, XYZ.Zero, true);\r\n\r\n            HashSet<IFCAnyHandle> faceSets = new HashSet<IFCAnyHandle>();\r\n            IList<ICollection<IFCAnyHandle>> faceList = ifcGeomInfo.GetFaces();\r\n            foreach (ICollection<IFCAnyHandle> faces in faceList)\r\n            {\r\n               // no faces, don't complain.\r\n               if (faces.Count == 0)\r\n                  continue;\r\n               HashSet<IFCAnyHandle> faceSet = new HashSet<IFCAnyHandle>(faces);\r\n               faceSets.Add(IFCInstanceExporter.CreateConnectedFaceSet(file, faceSet));\r\n            }\r\n\r\n            if (faceSets.Count == 0)\r\n               return false;\r\n\r\n            surface = IFCInstanceExporter.CreateFaceBasedSurfaceModel(file, faceSets);\r\n\r\n            // Collect Footprint data\r\n            boundaryRepresentations = ifcGeomInfo.GetRepresentations();\r\n\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(surface))\r\n               return false;\r\n\r\n            // This is currently never a void.\r\n            BodyExporter.CreateSurfaceStyleForRepItem(exporterIFC, doc, false, surface, \r\n               BodyExporter.GetBestMaterialIdFromGeometryOrParameter(geometryElement, element));\r\n\r\n            surfaceItems.Add(surface);\r\n         }\r\n\r\n\r\n         ElementId catId = CategoryUtil.GetSafeCategoryId(element);\r\n         IFCAnyHandle contextOfItems = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Body);\r\n\r\n         bodyRep = RepresentationUtil.CreateSurfaceRep(exporterIFC, element, catId,\r\n            contextOfItems, surfaceItems, exportAsFacetation, bodyRep);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(bodyRep))\r\n            return false;\r\n\r\n         if (exportBoundaryRep && boundaryRepresentations.Count > 0)\r\n         {\r\n            HashSet<IFCAnyHandle> boundaryRepresentationSet = new HashSet<IFCAnyHandle>();\r\n            boundaryRepresentationSet.UnionWith(boundaryRepresentations);\r\n            IFCAnyHandle contextOfItemsFootPrint = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.FootPrint);\r\n\r\n            boundaryRep = RepresentationUtil.CreateBoundaryRep(exporterIFC, element, catId,\r\n               contextOfItemsFootPrint, boundaryRepresentationSet, boundaryRep);\r\n         }\r\n\r\n         return true;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/SweptSolidExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Utility;\r\n\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export swept solid.\r\n   /// </summary>\r\n   class SweptSolidExporter\r\n   {\r\n      /// <summary>\r\n      /// The representation item for a swept solid.  Either this or the hash set will be used.\r\n      /// </summary>\r\n      IFCAnyHandle m_RepresentationItem = null;\r\n\r\n      /// <summary>\r\n      /// The representation item for a swept solid exported as a BRep.  Either this or the representation item will be used.\r\n      /// </summary>\r\n      HashSet<IFCAnyHandle> m_Facets = null;\r\n\r\n      /// <summary>\r\n      /// Enumeration value of the representation type used by SweptSolidExporter in its final form\r\n      /// </summary>\r\n      ShapeRepresentationType m_RepresentationType = ShapeRepresentationType.Undefined;\r\n\r\n      /// <summary>\r\n      /// Footprint representation info\r\n      /// </summary>\r\n      FootPrintInfo m_FootprintInfo = null;\r\n\r\n      /// <summary>\r\n      /// Return the enum of Representation type being used\r\n      /// </summary>\r\n      public ShapeRepresentationType RepresentationType\r\n      {\r\n         get { return m_RepresentationType; }\r\n         protected set { m_RepresentationType = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check whether the representation type used is of a specific type\r\n      /// </summary>\r\n      /// <param name=\"repType\">the enum value that needs to be cchecked/compared to</param>\r\n      /// <returns>true/false</returns>\r\n      public bool isSpecificRepresentationType(ShapeRepresentationType repType)\r\n      {\r\n         return (repType == m_RepresentationType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check whether the representation type used is of a specific type but with string value (of the enum) as an input\r\n      /// </summary>\r\n      /// <param name=\"repTypeStr\">the string value of the enum to be checked/compared to</param>\r\n      /// <returns>true/false</returns>\r\n      public bool isSpecificRepresentationType(string repTypeStr)\r\n      {\r\n         ShapeRepresentationType inputEnum;\r\n         Enum.TryParse(repTypeStr, out inputEnum);\r\n         return (inputEnum == m_RepresentationType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// The representation item for a swept solid.  Either this or the hash set will be used.\r\n      /// </summary>\r\n      public IFCAnyHandle RepresentationItem\r\n      {\r\n         get { return m_RepresentationItem; }\r\n         protected set { m_RepresentationItem = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The representation item for a swept solid exported as a BRep.  Either this or the representation item will be used.\r\n      /// </summary>\r\n      public HashSet<IFCAnyHandle> Facets\r\n      {\r\n         get { return m_Facets; }\r\n         protected set { m_Facets = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Additional representation for the Footprint\r\n      /// </summary>\r\n      public FootPrintInfo FootprintInfo\r\n      {\r\n         get { return m_FootprintInfo; }\r\n         set { m_FootprintInfo = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines if we can create a swept solid from the passed in geometry.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"solid\">The solid.</param>\r\n      /// <param name=\"normal\">The optional normal of the plane that the path lies on.</param>\r\n      /// <returns>If it is possible to create a swept solid, the SimpleSweptSolidAnalyzer that contains the information, otherwise null.</returns>\r\n      public static SimpleSweptSolidAnalyzer CanExportAsSweptSolid(ExporterIFC exporterIFC, Solid solid, XYZ normal, GeometryObject potentialPathGeom = null)\r\n      {\r\n         try\r\n         {\r\n            SimpleSweptSolidAnalyzer sweptAnalyzer = SimpleSweptSolidAnalyzer.Create(solid, normal, potentialPathGeom);\r\n            if (sweptAnalyzer == null)\r\n               return null;\r\n\r\n            // TODO: support openings and recess for a swept solid\r\n            if (sweptAnalyzer.UnalignedFaces != null && sweptAnalyzer.UnalignedFaces.Count > 0)\r\n               return null;\r\n\r\n            return sweptAnalyzer;\r\n         }\r\n         catch (Exception)\r\n         {\r\n            return null;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a SweptSolidExporter.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"solid\">The solid.</param>\r\n      /// <param name=\"normal\">The normal of the plane that the path lies on.</param>\r\n      /// <param name=\"addInfo\">A set of flags for which representations we should generate.</param>\r\n      /// <param name=\"isCoarse\">True if we should do a coarse parameterization of the directrix.</param>\r\n      /// <returns>The SweptSolidExporter.</returns>\r\n      public static SweptSolidExporter Create(ExporterIFC exporterIFC, Element element, SimpleSweptSolidAnalyzer sweptAnalyzer, GeometryObject geomObject,\r\n         GenerateAdditionalInfo addInfo, bool isCoarse)\r\n      {\r\n         try\r\n         {\r\n            if (sweptAnalyzer == null)\r\n               return null;\r\n\r\n            SweptSolidExporter sweptSolidExporter = null;\r\n\r\n            IList<GeometryUtil.FaceBoundaryType> faceBoundaryTypes;\r\n            IList<CurveLoop> faceBoundaries = GeometryUtil.GetFaceBoundaries(sweptAnalyzer.ProfileFace, null, out faceBoundaryTypes);\r\n\r\n            string profileName = null;\r\n            if (element != null)\r\n            {\r\n               ElementType type = element.Document.GetElement(element.GetTypeId()) as ElementType;\r\n               if (type != null)\r\n                  profileName = type.Name;\r\n            }\r\n\r\n            // Is it really an extrusion?\r\n            if (sweptAnalyzer.PathCurve is Line)\r\n            {\r\n               Line line = sweptAnalyzer.PathCurve as Line;\r\n\r\n               // invalid case\r\n               if (MathUtil.VectorsAreOrthogonal(line.Direction, sweptAnalyzer.ProfileFace.FaceNormal))\r\n                  return null;\r\n\r\n               sweptSolidExporter = new SweptSolidExporter();\r\n               sweptSolidExporter.RepresentationType = ShapeRepresentationType.SweptSolid;\r\n               Transform lcs = GeometryUtil.CreateTransformFromPlanarFace(sweptAnalyzer.ProfileFace);\r\n               sweptSolidExporter.RepresentationItem = ExtrusionExporter.CreateExtrudedSolidFromCurveLoop(exporterIFC, profileName, faceBoundaries, lcs,\r\n                   line.Direction, UnitUtil.ScaleLength(line.Length), false, out _);\r\n               if ((addInfo & GenerateAdditionalInfo.GenerateFootprint) != 0)\r\n               {\r\n                  sweptSolidExporter.FootprintInfo = new FootPrintInfo(faceBoundaries, lcs);\r\n               }\r\n            }\r\n            else\r\n            {\r\n               sweptSolidExporter = new SweptSolidExporter();\r\n               if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n               {\r\n                  // Use tessellated geometry in IFC Reference View\r\n                  if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView || ExporterCacheManager.ExportOptionsCache.ExportAs4General)\r\n                  {\r\n                     // TODO: Create CreateSimpleSweptSolidAsTessellation routine that takes advantage of the superior tessellation of this class.\r\n                     BodyExporterOptions options = new BodyExporterOptions(false, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n                     sweptSolidExporter.RepresentationItem = BodyExporter.ExportBodyAsTessellatedFaceSet(exporterIFC, element, options, geomObject)[0];\r\n                     sweptSolidExporter.RepresentationType = ShapeRepresentationType.Tessellation;\r\n                  }\r\n                  else\r\n                  {\r\n                     sweptSolidExporter.RepresentationItem = CreateSimpleSweptSolid(exporterIFC, profileName, faceBoundaries, sweptAnalyzer.PathCurve);\r\n                     sweptSolidExporter.RepresentationType = ShapeRepresentationType.AdvancedSweptSolid;\r\n                     if ((addInfo & GenerateAdditionalInfo.GenerateFootprint) != 0)\r\n                     {\r\n                        Transform lcs = GeometryUtil.CreateTransformFromPlanarFace(sweptAnalyzer.ProfileFace);\r\n                        sweptSolidExporter.FootprintInfo = new FootPrintInfo(faceBoundaries, lcs);\r\n                     }\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  sweptSolidExporter.Facets = CreateSimpleSweptSolidAsBRep(exporterIFC, faceBoundaries, \r\n                     sweptAnalyzer.PathCurve, isCoarse);\r\n                  sweptSolidExporter.RepresentationType = ShapeRepresentationType.Brep;\r\n               }\r\n            }\r\n            return sweptSolidExporter;\r\n         }\r\n         catch (Exception)\r\n         {\r\n            return null;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a simple swept solid.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"solid\">The solid.</param>\r\n      /// <param name=\"normal\">The normal of the plane that the path lies on.</param>\r\n      /// <returns>The swept solid representation handle.</returns>\r\n      public static IFCAnyHandle CreateSimpleSweptSolid(ExporterIFC exporterIFC, Element element, Solid solid, XYZ normal)\r\n      {\r\n         try\r\n         {\r\n            SimpleSweptSolidAnalyzer sweptAnalyzer = SimpleSweptSolidAnalyzer.Create(solid, normal);\r\n            if (sweptAnalyzer != null)\r\n            {\r\n               // TODO: support openings and recess for a swept solid\r\n               if (sweptAnalyzer.UnalignedFaces != null && sweptAnalyzer.UnalignedFaces.Count > 0)\r\n                  return null;\r\n\r\n               IList<Revit.IFC.Export.Utility.GeometryUtil.FaceBoundaryType> faceBoundaryTypes;\r\n               IList<CurveLoop> faceBoundaries = GeometryUtil.GetFaceBoundaries(sweptAnalyzer.ProfileFace, null, out faceBoundaryTypes);\r\n\r\n               string profileName = null;\r\n               if (element != null)\r\n               {\r\n                  ElementType type = element.Document.GetElement(element.GetTypeId()) as ElementType;\r\n                  if (type != null)\r\n                     profileName = type.Name;\r\n               }\r\n\r\n               return CreateSimpleSweptSolid(exporterIFC, profileName, faceBoundaries, sweptAnalyzer.PathCurve);\r\n            }\r\n         }\r\n         catch (Exception)\r\n         {\r\n            return null;\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      private static bool CanCreateSimpleSweptSolid(IList<CurveLoop> profileCurveLoops, Curve directrix)\r\n      {\r\n         if (directrix == null || profileCurveLoops == null || profileCurveLoops.Count == 0)\r\n            return false;\r\n\r\n         if (directrix is Arc)\r\n            return true;\r\n\r\n         // We don't handle unbound lines, or curves other than lines or arcs.  We'll extend to other curve types later.\r\n         if (!(directrix is Line) || !directrix.IsBound)\r\n            return false;\r\n\r\n         // All of the profileCurveLoops should be closed.\r\n         foreach (CurveLoop profileCurveLoop in profileCurveLoops)\r\n         {\r\n            if (profileCurveLoop.IsOpen())\r\n               return false;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      private static Transform CreateProfileCurveTransform(ExporterIFC exporterIFC, Curve directrix, double param)\r\n      {\r\n         Transform directrixDirs = directrix.ComputeDerivatives(param, false);\r\n         XYZ origin = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, directrixDirs.Origin);\r\n\r\n         // We are constructing the profile plane so that the normal matches the curve tangent,\r\n         // and the X matches the direction orthogonal to the curve in the plane of the curve\r\n         XYZ profilePlaneXDir = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, -directrixDirs.BasisY.Normalize());\r\n         XYZ profilePlaneYDir = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, -directrixDirs.BasisZ.Normalize());\r\n         XYZ profilePlaneZDir = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, directrixDirs.BasisX.Normalize());\r\n\r\n         Transform profileCurveTransform = Transform.CreateTranslation(origin);\r\n         profileCurveTransform.BasisX = profilePlaneXDir;\r\n         profileCurveTransform.BasisY = profilePlaneYDir;\r\n         profileCurveTransform.BasisZ = profilePlaneZDir;\r\n\r\n         return profileCurveTransform;\r\n      }\r\n\r\n      private static void CreateAxisAndProfileCurveLCS(Curve directrix, double param, out Transform axisLCS, out Transform profileCurveLCS)\r\n      {\r\n         Transform directrixDirs = directrix.ComputeDerivatives(param, false);\r\n         XYZ startPoint = directrixDirs.Origin;\r\n\r\n         // The X and Y are reversed for the axisPlane; the X is the direction orthogonal to the curve in the plane of the curve, and Y is the tangent.\r\n         XYZ curveXDir = -directrixDirs.BasisY.Normalize();\r\n         XYZ curveYDir = directrixDirs.BasisX.Normalize();\r\n         XYZ curveZDir = directrixDirs.BasisZ.Normalize();\r\n\r\n         // We are constructing the profile plane so that the normal matches the curve tangent,\r\n         // and the X matches the direction orthogonal to the curve in the plane of the curve\r\n        XYZ profilePlaneXDir = curveXDir;\r\n        XYZ profilePlaneYDir = -curveZDir;\r\n        XYZ profilePlaneZDir = curveYDir;\r\n         axisLCS = GeometryUtil.CreateTransformFromVectorsAndOrigin(curveXDir, curveYDir, curveZDir, startPoint);\r\n\r\n         profileCurveLCS = GeometryUtil.CreateTransformFromVectorsAndOrigin(profilePlaneXDir, profilePlaneYDir, profilePlaneZDir, startPoint);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a simple swept solid from a list of curve loops.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"profileName\">The profile name.</param>\r\n      /// <param name=\"profileCurveLoops\">The profile curve loops.</param>\r\n      /// <param name=\"normal\">The normal of the plane that the path lies on.</param>\r\n      /// <param name=\"directrix\">The path curve.</param>\r\n      /// <returns>The swept solid handle.</returns>\r\n      public static IFCAnyHandle CreateSimpleSweptSolid(ExporterIFC exporterIFC, string profileName, IList<CurveLoop> profileCurveLoops,\r\n         Curve directrix)\r\n      {\r\n         // see definition of IfcSurfaceCurveSweptAreaSolid from\r\n         // http://www.buildingsmart-tech.org/ifc/IFC2x4/rc4/html/schema/ifcgeometricmodelresource/lexical/ifcsurfacecurvesweptareasolid.htm\r\n\r\n         IFCAnyHandle simpleSweptSolidHnd = null;\r\n\r\n         if (!CanCreateSimpleSweptSolid(profileCurveLoops, directrix))\r\n            return simpleSweptSolidHnd;\r\n\r\n         bool isBound = directrix.IsBound;\r\n         double originalStartParam = isBound ? directrix.GetEndParameter(0) : 0.0;\r\n\r\n         Transform axisLCS, profileLCS;\r\n         CreateAxisAndProfileCurveLCS(directrix, originalStartParam, out axisLCS, out profileLCS);\r\n\r\n         IList<CurveLoop> curveLoops = null;\r\n         try\r\n         {\r\n            // Check that curve loops are valid.\r\n            curveLoops = ExporterIFCUtils.ValidateCurveLoops(profileCurveLoops, profileLCS.BasisZ);\r\n         }\r\n         catch (Exception)\r\n         {\r\n            return null;\r\n         }\r\n\r\n         if ((curveLoops?.Count ?? 0) == 0)\r\n            return simpleSweptSolidHnd;\r\n\r\n         double startParam = 0.0, endParam = 1.0;\r\n         if (directrix is Arc)\r\n         {\r\n            // This effectively resets the start parameter to 0.0, and end parameter = length of curve.\r\n            if (isBound)\r\n            {\r\n               // Put the parameters in range of [0, 2*Pi]\r\n               double inRangeStartParam = (directrix.GetEndParameter(0) % (2 * Math.PI));\r\n               double inRangeEndParam = (directrix.GetEndParameter(1) % (2 * Math.PI));\r\n               // We want the angle direction is anti-clockwise (+ direction), therefore we will always start with the smaller one\r\n               if (inRangeEndParam < inRangeStartParam)\r\n               {\r\n                  (inRangeStartParam, inRangeEndParam) = (inRangeEndParam, inRangeStartParam);\r\n               }\r\n               \r\n               // If start param is negative, we will reset it to 0 and shift the end accordingly\r\n               inRangeEndParam -= inRangeStartParam;\r\n               endParam = UnitUtil.ScaleAngle(inRangeEndParam);\r\n            }\r\n            else\r\n            {\r\n               endParam = 2.0 * Math.PI;\r\n            }\r\n         }\r\n\r\n         // Start creating IFC entities.\r\n\r\n         IFCAnyHandle sweptArea = ExtrusionExporter.CreateSweptArea(exporterIFC, profileName, curveLoops, profileLCS, profileLCS.BasisZ);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(sweptArea))\r\n            return simpleSweptSolidHnd;\r\n\r\n         IFCAnyHandle referenceSurfaceHandle = ExtrusionExporter.CreateSurfaceOfLinearExtrusionFromCurve(exporterIFC, directrix, axisLCS, 1.0, 1.0,\r\n             out IFCAnyHandle curveHandle);\r\n\r\n         XYZ scaledOrigin = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, axisLCS.Origin);\r\n         XYZ scaledXDir = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, axisLCS.BasisX).Normalize();\r\n         XYZ scaledNormal = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, axisLCS.BasisZ).Normalize();\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         IFCAnyHandle solidAxis = ExporterUtil.CreateAxis(file, scaledOrigin, scaledNormal, scaledXDir);\r\n\r\n         simpleSweptSolidHnd = IFCInstanceExporter.CreateSurfaceCurveSweptAreaSolid(file, sweptArea, solidAxis, curveHandle, startParam,\r\n             endParam, referenceSurfaceHandle);\r\n         return simpleSweptSolidHnd;\r\n      }\r\n\r\n      private static IList<double> CreateParametricTessellation(Curve curve, bool isCoarse)\r\n      {\r\n         IList<XYZ> originalTessellation = curve.Tessellate();\r\n\r\n         int numPoints = originalTessellation.Count;\r\n         int numTargetPoints = isCoarse ? Math.Min(numPoints, 12) : numPoints;\r\n         int numInteriorPoints = numTargetPoints - 2;\r\n\r\n         IList<double> roughTessellation = new List<double>(numTargetPoints);\r\n\r\n         // Skip the first point as redundant.\r\n         IntersectionResult result = null;\r\n\r\n         for (int ii = 0; ii < numInteriorPoints; ii++)\r\n         {\r\n            XYZ initialPoint = originalTessellation[(int)(numPoints - 2) * (ii + 1) / numInteriorPoints];\r\n            result = curve.Project(initialPoint);\r\n            roughTessellation.Add(result.Parameter);\r\n         }\r\n\r\n         XYZ finalPoint = originalTessellation[numPoints - 1];\r\n         result = curve.Project(finalPoint);\r\n         roughTessellation.Add(result.Parameter);\r\n\r\n         return roughTessellation;\r\n      }\r\n\r\n      private static IList<XYZ> CreateRoughTessellation(ExporterIFC exporterIFC, Curve curve)\r\n      {\r\n         IList<XYZ> originalTessellation = curve.Tessellate();\r\n\r\n         int numPoints = originalTessellation.Count;\r\n         int numTargetPoints = Math.Min(numPoints, 12);\r\n         int numInteriorPoints = numTargetPoints - 2;\r\n\r\n         IList<XYZ> roughTessellation = new List<XYZ>(numTargetPoints);\r\n\r\n         // Always add the first point, scaled; then add approximately equally spaced interior points.   Never add the last point\r\n         // As this should be part of a closed curve loop.\r\n         AddScaledPointToList(exporterIFC, roughTessellation, originalTessellation[0]);\r\n         for (int ii = 0; ii < numInteriorPoints; ii++)\r\n         {\r\n            AddScaledPointToList(exporterIFC, roughTessellation, originalTessellation[(int)(numPoints - 2) * (ii + 1) / numInteriorPoints]);\r\n         }\r\n\r\n         return roughTessellation;\r\n      }\r\n\r\n      private static void AddScaledPointToList(ExporterIFC exporterIFC, IList<XYZ> list, XYZ point)\r\n      {\r\n         XYZ pointScaled = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, point);\r\n         list.Add(pointScaled);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a facetation of a simple swept solid from a list of curve loops.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"profileCurveLoops\">The profile curve loops.</param>\r\n      /// <param name=\"normal\">The normal of the plane that the path lies on.</param>\r\n      /// <param name=\"directrix\">The path curve.</param>\r\n      /// <param name=\"isCoarse\">If true, create a coarse approximation of the directrix.</param>\r\n      /// <returns>The list of facet handles.</returns>\r\n      public static HashSet<IFCAnyHandle> CreateSimpleSweptSolidAsBRep(ExporterIFC exporterIFC, IList<CurveLoop> profileCurveLoops,\r\n         Curve directrix, bool isCoarse)\r\n      {\r\n         // see definition of IfcSurfaceCurveSweptAreaSolid from\r\n         // http://www.buildingsmart-tech.org/ifc/IFC2x4/rc4/html/schema/ifcgeometricmodelresource/lexical/ifcsurfacecurvesweptareasolid.htm\r\n\r\n         HashSet<IFCAnyHandle> facetHnds = null;\r\n\r\n         if (!CanCreateSimpleSweptSolid(profileCurveLoops, directrix))\r\n            return facetHnds;\r\n\r\n         // An extra requirement, as we can't tessellate an unbound curve.\r\n         if (!directrix.IsBound)\r\n            return facetHnds;\r\n         double originalStartParam = directrix.GetEndParameter(0);\r\n\r\n         Transform axisLCS, profileLCS;\r\n         CreateAxisAndProfileCurveLCS(directrix, originalStartParam, out axisLCS, out profileLCS);\r\n\r\n         IList<CurveLoop> curveLoops = null;\r\n         try\r\n         {\r\n            // Check that curve loops are valid.\r\n            curveLoops = ExporterIFCUtils.ValidateCurveLoops(profileCurveLoops, profileLCS.BasisZ);\r\n         }\r\n         catch (Exception)\r\n         {\r\n            return null;\r\n         }\r\n\r\n         if (curveLoops == null || curveLoops.Count == 0)\r\n            return facetHnds;\r\n\r\n         // Tessellate the curve loops.  We don't add the last point, as these should all be closed curves.\r\n         IList<IList<XYZ>> tessellatedOutline = new List<IList<XYZ>>();\r\n         foreach (CurveLoop curveLoop in curveLoops)\r\n         {\r\n            List<XYZ> tessellatedCurve = new List<XYZ>();\r\n            foreach (Curve curve in curveLoop)\r\n            {\r\n               if (curve is Line)\r\n               {\r\n                  AddScaledPointToList(exporterIFC, tessellatedCurve, curve.GetEndPoint(0));\r\n               }\r\n               else\r\n               {\r\n                  IList<XYZ> curveTessellation = CreateRoughTessellation(exporterIFC, curve);\r\n                  tessellatedCurve.AddRange(curveTessellation);\r\n               }\r\n            }\r\n\r\n            if (tessellatedCurve.Count != 0)\r\n               tessellatedOutline.Add(tessellatedCurve);\r\n         }\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         IList<IList<IList<IFCAnyHandle>>> facetVertexHandles = new List<IList<IList<IFCAnyHandle>>>();\r\n\r\n         IList<IList<IFCAnyHandle>> tessellatedOutlineHandles = new List<IList<IFCAnyHandle>>();\r\n         foreach (IList<XYZ> tessellatedOutlinePolygon in tessellatedOutline)\r\n         {\r\n            IList<IFCAnyHandle> tessellatedOutlinePolygonHandles = new List<IFCAnyHandle>();\r\n            foreach (XYZ tessellatedOutlineXYZ in tessellatedOutlinePolygon)\r\n            {\r\n               tessellatedOutlinePolygonHandles.Add(ExporterUtil.CreateCartesianPoint(file, tessellatedOutlineXYZ));\r\n            }\r\n            tessellatedOutlineHandles.Add(tessellatedOutlinePolygonHandles);\r\n         }\r\n         facetVertexHandles.Add(tessellatedOutlineHandles);\r\n\r\n         // Tessellate the Directrix.  This only works for bound Directrix curves. Unfortunately, we get XYZ values, which we will have to convert\r\n         // back to parameter values to get the local transform.\r\n         IList<double> tessellatedDirectrixParameters = CreateParametricTessellation(directrix, isCoarse);\r\n\r\n         // Create all of the other outlines by transformng the first tessellated outline to the current transform.\r\n         Transform profilePlaneTrf = Transform.CreateTranslation(ExporterIFCUtils.TransformAndScalePoint(exporterIFC, profileLCS.Origin));\r\n         profilePlaneTrf.BasisX = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, profileLCS.BasisX);\r\n         profilePlaneTrf.BasisY = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, profileLCS.BasisY);\r\n         profilePlaneTrf.BasisZ = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, profileLCS.BasisZ);\r\n\r\n         // The inverse transform will be applied to generate the delta transform for the profile curves from the start of the directrix\r\n         // to the current location.  This could be optimized in the case of a Line, but current usage is really only for a single arc.\r\n         // If that changes, we should revisit optimization possibilities.\r\n         Transform profilePlaneTrfInverse = profilePlaneTrf.Inverse;\r\n\r\n         IList<IList<XYZ>> projectedTessellatedOutline = new List<IList<XYZ>>();\r\n         foreach (IList<XYZ> pointLoop in tessellatedOutline)\r\n         {\r\n            IList<XYZ> projectedPointLoop = new List<XYZ>();\r\n            foreach (XYZ point in pointLoop)\r\n            {\r\n               projectedPointLoop.Add(profilePlaneTrfInverse.OfPoint(point));\r\n            }\r\n            projectedTessellatedOutline.Add(projectedPointLoop);\r\n         }\r\n\r\n         // Create the delta transforms and the offset tessellated profiles.\r\n         foreach (double parameter in tessellatedDirectrixParameters)\r\n         {\r\n            Transform directrixDirs = CreateProfileCurveTransform(exporterIFC, directrix, parameter);\r\n            \r\n            IList<IList<IFCAnyHandle>> currTessellatedOutline = new List<IList<IFCAnyHandle>>();\r\n            foreach (IList<XYZ> projectedPointLoop in projectedTessellatedOutline)\r\n            {\r\n               IList<IFCAnyHandle> currTessellatedPointLoop = new List<IFCAnyHandle>();\r\n               foreach (XYZ projectedPoint in projectedPointLoop)\r\n               {\r\n                  XYZ transformedPoint = directrixDirs.OfPoint(projectedPoint);\r\n                  IFCAnyHandle transformedPointHandle = ExporterUtil.CreateCartesianPoint(file, transformedPoint);\r\n                  currTessellatedPointLoop.Add(transformedPointHandle);\r\n               }\r\n               currTessellatedOutline.Add(currTessellatedPointLoop);\r\n            }\r\n            facetVertexHandles.Add(currTessellatedOutline);\r\n         }\r\n\r\n         // Create the side facets.\r\n         facetHnds = new HashSet<IFCAnyHandle>();\r\n\r\n         int numFacets = facetVertexHandles.Count - 1;\r\n         for (int ii = 0; ii < numFacets; ii++)\r\n         {\r\n            IList<IList<IFCAnyHandle>> firstOutline = facetVertexHandles[ii];\r\n            IList<IList<IFCAnyHandle>> secondOutline = facetVertexHandles[ii + 1];\r\n\r\n            int numLoops = firstOutline.Count;\r\n            for (int jj = 0; jj < numLoops; jj++)\r\n            {\r\n               IList<IFCAnyHandle> firstLoop = firstOutline[jj];\r\n               IList<IFCAnyHandle> secondLoop = secondOutline[jj];\r\n\r\n               int numVertices = firstLoop.Count;\r\n\r\n               for (int kk = 0; kk < numVertices; kk++)\r\n               {\r\n                  IList<IFCAnyHandle> polyLoopHandles = new List<IFCAnyHandle>(4)\r\n                  {\r\n                     secondLoop[kk],\r\n                     secondLoop[(kk + 1) % numVertices],\r\n                     firstLoop[(kk + 1) % numVertices],\r\n                     firstLoop[kk]\r\n                  };\r\n\r\n                  IFCAnyHandle face = BodyExporter.CreateFaceFromVertexList(file, polyLoopHandles);\r\n                  facetHnds.AddIfNotNull(face);\r\n               }\r\n            }\r\n         }\r\n\r\n         // Create the end facets.\r\n         for (int ii = 0; ii < 2; ii++)\r\n         {\r\n            int faceIndex = (ii == 0) ? 0 : facetVertexHandles.Count - 1;\r\n\r\n            int numLoops = facetVertexHandles[faceIndex].Count;\r\n            HashSet<IFCAnyHandle> faceBounds = new HashSet<IFCAnyHandle>();\r\n\r\n            for (int jj = 0; jj < numLoops; jj++)\r\n            {\r\n               IList<IFCAnyHandle> polyLoopHandles = null;\r\n               if (ii == 0)\r\n                  polyLoopHandles = facetVertexHandles[faceIndex][jj];\r\n               else\r\n               {\r\n                  int numHandles = facetVertexHandles[faceIndex][jj].Count;\r\n                  polyLoopHandles = new List<IFCAnyHandle>(numHandles);\r\n                  for (int kk = numHandles - 1; kk >= 0; kk--)\r\n                     polyLoopHandles.Add(facetVertexHandles[faceIndex][jj][kk]);\r\n               }\r\n\r\n               IFCAnyHandle polyLoop = IFCInstanceExporter.CreatePolyLoop(file, polyLoopHandles);\r\n               IFCAnyHandle faceBound = (jj == 0) ?\r\n                   IFCInstanceExporter.CreateFaceOuterBound(file, polyLoop, true) :\r\n                   IFCInstanceExporter.CreateFaceBound(file, polyLoop, true);\r\n               faceBounds.Add(faceBound);\r\n            }\r\n\r\n            IFCAnyHandle face = IFCInstanceExporter.CreateFace(file, faceBounds);\r\n            facetHnds.Add(face);\r\n         }\r\n\r\n         return facetHnds;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/TextNoteExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing Autodesk.Revit;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export text notes.\r\n   /// </summary>\r\n   class TextNoteExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports text note elements.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"textNote\">The text note element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void Export(ExporterIFC exporterIFC, TextNote textNote, ProductWrapper productWrapper)\r\n      {\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(textNote, out string predefinedType);\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(exportType.ExportInstance))\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            string textString = textNote.Text;\r\n            if (String.IsNullOrEmpty(textString))\r\n               return;\r\n\r\n            ElementId symId = textNote.GetTypeId();\r\n            if (symId == ElementId.InvalidElementId)\r\n               throw new Exception(\"TextNote does not have valid type id.\");\r\n\r\n            PresentationStyleAssignmentCache cache = ExporterCacheManager.PresentationStyleAssignmentCache;\r\n            IFCAnyHandle presHnd = cache.Find(symId);\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(presHnd))\r\n            {\r\n               TextElementType textElemType = textNote.Symbol;\r\n               CreatePresentationStyleAssignmentForTextElementType(exporterIFC, textElemType, cache);\r\n               presHnd = cache.Find(symId);\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(presHnd))\r\n                  throw new Exception(\"Failed to create presentation style assignment for TextElementType.\");\r\n            }\r\n\r\n            HashSet<IFCAnyHandle> presHndSet = new HashSet<IFCAnyHandle>();\r\n            presHndSet.Add(presHnd);\r\n\r\n            using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, textNote))\r\n            {\r\n               const double planScale = 100.0;  // currently hardwired.\r\n\r\n               XYZ orig = UnitUtil.ScaleLength(textNote.Coord);\r\n               XYZ yDir = textNote.UpDirection;\r\n               XYZ xDir = textNote.BaseDirection;\r\n               XYZ zDir = xDir.CrossProduct(yDir);\r\n\r\n               double sizeX = UnitUtil.ScaleLength(textNote.Width * planScale);\r\n               double sizeY = UnitUtil.ScaleLength(textNote.Height * planScale);\r\n\r\n               // When we display text on screen, we \"flip\" it if the xDir is negative with relation to\r\n               // the X-axis.  So if it is, we'll flip x and y.\r\n               bool flipOrig = false;\r\n               if (xDir.X < 0)\r\n               {\r\n                  xDir = xDir.Multiply(-1.0);\r\n                  yDir = yDir.Multiply(-1.0);\r\n                  flipOrig = true;\r\n               }\r\n\r\n               // xFactor, yFactor only used if flipOrig.\r\n               double xFactor = 0.0, yFactor = 0.0;\r\n               string boxAlignment = ConvertTextNoteAlignToBoxAlign(textNote, out xFactor, out yFactor);\r\n\r\n               // modify the origin to match the alignment.  In Revit, the origin is at the top-left (unless flipped,\r\n               // then bottom-right).\r\n               if (flipOrig)\r\n               {\r\n                  orig = orig.Add(xDir.Multiply(sizeX * xFactor));\r\n                  orig = orig.Add(yDir.Multiply(sizeY * yFactor));\r\n               }\r\n\r\n               IFCAnyHandle origin = ExporterUtil.CreateAxis(file, orig, zDir, xDir);\r\n\r\n               IFCAnyHandle extent = IFCInstanceExporter.CreatePlanarExtent(file, sizeX, sizeY);\r\n               IFCAnyHandle repItemHnd = IFCInstanceExporter.CreateTextLiteralWithExtent(file, textString, origin, Toolkit.IFCTextPath.Left, extent, boxAlignment);\r\n               IFCAnyHandle annoTextOccHnd = IFCInstanceExporter.CreateStyledItem(file, repItemHnd, presHndSet, null);\r\n\r\n               ElementId catId = CategoryUtil.GetSafeCategoryId(textNote);\r\n               HashSet<IFCAnyHandle> bodyItems = new HashSet<IFCAnyHandle>() { repItemHnd };\r\n               IFCAnyHandle context2d = ExporterCacheManager.Get2DContextHandle(IFCRepresentationIdentifier.Annotation);\r\n               IFCAnyHandle bodyRepHnd = RepresentationUtil.CreateAnnotationSetRep(exporterIFC, \r\n                  textNote, catId, context2d, bodyItems, false);\r\n\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(bodyRepHnd))\r\n                  throw new Exception(\"Failed to create shape representation.\");\r\n\r\n               IList<IFCAnyHandle> shapeReps = new List<IFCAnyHandle>() { bodyRepHnd };\r\n\r\n               IFCAnyHandle prodShapeHnd = IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, shapeReps);\r\n               string guid = GUIDUtil.CreateGUID(textNote);\r\n               IFCAnyHandle instHnd;\r\n               if (exportType.ExportInstance == Common.Enums.IFCEntityType.IfcAnnotation)\r\n               {\r\n                  instHnd = IFCInstanceExporter.CreateAnnotation(exporterIFC, textNote, guid,\r\n                     ExporterCacheManager.OwnerHistoryHandle, setter.LocalPlacement, prodShapeHnd,\r\n                     null);\r\n               }\r\n               else\r\n               {\r\n                  instHnd = IFCInstanceExporter.CreateGenericIFCEntity(exportType, file,\r\n                     textNote, guid, ExporterCacheManager.OwnerHistoryHandle,\r\n                     setter.LocalPlacement, prodShapeHnd);\r\n               }\r\n\r\n               productWrapper.AddAnnotation(instHnd, setter.LevelInfo, true);\r\n            }\r\n\r\n            tr.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IfcPresentationStyleAssignment for text element type.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"textElemType\">\r\n      /// The text note element type.\r\n      /// </param>\r\n      /// <param name=\"cache\">\r\n      /// The cache of IfcPresentationStyleAssignment.\r\n      /// </param>\r\n      static void CreatePresentationStyleAssignmentForTextElementType(ExporterIFC exporterIFC, TextElementType textElemType, PresentationStyleAssignmentCache cache)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         string fontName;\r\n         if (ParameterUtil.GetStringValueFromElement(textElemType, BuiltInParameter.TEXT_FONT, out fontName) == null)\r\n            fontName = null;\r\n\r\n         double fontSize;\r\n         if (ParameterUtil.GetDoubleValueFromElement(textElemType, BuiltInParameter.TEXT_SIZE, out fontSize) == null)\r\n            fontSize = -1.0;\r\n\r\n         double viewScale = 100.0;  // currently hardwired.\r\n         fontSize = UnitUtil.ScaleLength(fontSize * viewScale);\r\n\r\n         string ifcPreDefinedItemName = \"Text Font\";\r\n\r\n         IList<string> fontNameList = new List<string>();\r\n         fontNameList.Add(fontName);\r\n\r\n         IFCAnyHandle textSyleFontModelHnd = IFCInstanceExporter.CreateTextStyleFontModel(file, ifcPreDefinedItemName, fontNameList, null, null, null, IFCDataUtil.CreateAsPositiveLengthMeasure(fontSize));\r\n\r\n         int color;\r\n         ParameterUtil.GetIntValueFromElement(textElemType, BuiltInParameter.LINE_COLOR, out color);\r\n\r\n         double blueVal = ((double)((color & 0xff0000) >> 16)) / 255.0;\r\n         double greenVal = ((double)((color & 0xff00) >> 8)) / 255.0;\r\n         double redVal = ((double)(color & 0xff)) / 255.0;\r\n\r\n         IFCAnyHandle colorHnd = IFCInstanceExporter.CreateColourRgb(file, null, redVal, greenVal, blueVal);\r\n         IFCAnyHandle fontColorHnd = IFCInstanceExporter.CreateTextStyleForDefinedFont(file, colorHnd, null);\r\n\r\n         string ifcAttrName = textElemType.Name;\r\n         IFCAnyHandle textStyleHnd = IFCInstanceExporter.CreateTextStyle(file, textElemType.Name, fontColorHnd, null, textSyleFontModelHnd);\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(textStyleHnd))\r\n            return;\r\n\r\n         HashSet<IFCAnyHandle> presStyleSet = new HashSet<IFCAnyHandle>();\r\n         presStyleSet.Add(textStyleHnd);\r\n\r\n         IFCAnyHandle presStyleHnd = IFCInstanceExporter.CreatePresentationStyleAssignment(file, presStyleSet);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(presStyleHnd))\r\n            return;\r\n\r\n         cache.Register(textElemType.Id, presStyleHnd);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts text note align to box align.\r\n      /// </summary>\r\n      /// <param name=\"textNote\">\r\n      /// The text note element.\r\n      /// </param>\r\n      /// <param name=\"xFactor\">\r\n      /// The X factor.\r\n      /// </param>\r\n      /// <param name=\"yFactor\">\r\n      /// The Y factor.\r\n      /// </param>\r\n      static string ConvertTextNoteAlignToBoxAlign(TextNote textNote, out double xFactor, out double yFactor)\r\n      {\r\n         xFactor = yFactor = 0.0;\r\n\r\n         // boxAlignment consist of a combination of vertical and horizontal alignment\r\n         // except for the middle-middle alignment which is named simply \"center\"\r\n         // The xFactor and yFactor are set as follows:\r\n         //      +1\r\n         //   -1  0  +1\r\n         //      -1\r\n\r\n         // The center-middle is an odd case; we can deal with it firs\r\n\r\n         if ((HorizontalTextAlignment.Center == textNote.HorizontalAlignment)\r\n            && (VerticalTextAlignment.Middle == textNote.VerticalAlignment))\r\n         {\r\n            return \"center\";\r\n         }\r\n\r\n         string boxAlignment = null;\r\n\r\n         switch (textNote.VerticalAlignment)\r\n         {\r\n            case VerticalTextAlignment.Top:\r\n               yFactor = 1.0;\r\n               boxAlignment = \"top-\";\r\n               break;\r\n            case VerticalTextAlignment.Middle:\r\n               boxAlignment = \"middle-\";\r\n               break;\r\n            case VerticalTextAlignment.Bottom:\r\n               yFactor = -1.0;\r\n               boxAlignment = \"bottom-\";\r\n               break;\r\n         }\r\n\r\n         switch (textNote.HorizontalAlignment)\r\n         {\r\n            case HorizontalTextAlignment.Left:\r\n               xFactor = -1.0;\r\n               boxAlignment += \"left\";\r\n               break;\r\n            case HorizontalTextAlignment.Center:\r\n               boxAlignment += \"middle\";\r\n               break;\r\n            case HorizontalTextAlignment.Right:\r\n               xFactor = 1.0;\r\n               boxAlignment += \"right\";\r\n               break;\r\n         }\r\n\r\n         return boxAlignment;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/TypePropertyInfo.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Contains information about IFC property sets and IFC type elements.\r\n   /// </summary>\r\n   public class TypePropertyInfo\r\n   {\r\n      bool m_assignedToType = false;\r\n      HashSet<IFCAnyHandle> m_PropertySets;\r\n      HashSet<IFCAnyHandle> m_Elements;\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected TypePropertyInfo()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// The flag that determines if the type properties have been associated with an IfcTypeObject, and should not\r\n      /// be associated with an IfcElement.\r\n      /// </summary>\r\n      public bool AssignedToType\r\n      {\r\n         get { return m_assignedToType; }\r\n         set { m_assignedToType = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs a TypePropertyInfo objects.\r\n      /// </summary>\r\n      /// <param name=\"propertySets\">The property sets.</param>\r\n      /// <param name=\"elements\">The elements.</param>\r\n      public TypePropertyInfo(ICollection<IFCAnyHandle> propertySets, ICollection<IFCAnyHandle> elements)\r\n      {\r\n         m_PropertySets = new HashSet<IFCAnyHandle>(propertySets);\r\n         m_Elements = new HashSet<IFCAnyHandle>(elements);\r\n      }\r\n\r\n      /// <summary>\r\n      /// The property sets.\r\n      /// </summary>\r\n      public HashSet<IFCAnyHandle> PropertySets\r\n      {\r\n         get { return m_PropertySets; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The IFC elements.\r\n      /// </summary>\r\n      public HashSet<IFCAnyHandle> Elements\r\n      {\r\n         get { return m_Elements; }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/WallConnectionData.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Toolkit;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// The class contains wall connection information.\r\n   /// </summary>\r\n   public class WallConnectionData\r\n   {\r\n      /// <summary>\r\n      /// Registers a connection between a wall and another element.\r\n      /// </summary>\r\n      /// <param name=\"firstId\">The first element id. This can be a wall or a column.</param>\r\n      /// <param name=\"secondId\">The second element id.  This can be a wall or a column.</param>\r\n      /// <param name=\"firstConnectionType\">The connection type for the first connected element.</param>\r\n      /// <param name=\"secondConnectionType\">The connection type for the second connected element.</param>\r\n      /// <param name=\"connectionGeometry\">The IfcConnectionGeometry handle related to the connection.  A valueless handle is also permitted.</param>\r\n      public WallConnectionData(ElementId firstId, ElementId secondId, IFCConnectionType firstConnectionType,\r\n         IFCConnectionType secondConnectionType, IFCAnyHandle connectionGeometry)\r\n      {\r\n         if (firstId < secondId)\r\n         {\r\n            FirstId = firstId;\r\n            SecondId = secondId;\r\n            FirstConnectionType = firstConnectionType;\r\n            SecondConnectionType = secondConnectionType;\r\n         }\r\n         else\r\n         {\r\n            FirstId = secondId;\r\n            SecondId = firstId;\r\n            FirstConnectionType = secondConnectionType;\r\n            SecondConnectionType = firstConnectionType;\r\n         }\r\n\r\n         ConnectionGeometry = connectionGeometry;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The first connection element id.\r\n      /// </summary>\r\n      public ElementId FirstId { get; private set; }\r\n\r\n      /// <summary>\r\n      /// The second connection element id.\r\n      /// </summary>\r\n      public ElementId SecondId { get; private set; }\r\n\r\n      /// <summary>\r\n      /// The first connection type.\r\n      /// </summary>\r\n      public IFCConnectionType FirstConnectionType { get; private set; }\r\n\r\n      /// <summary>\r\n      /// The second connection type.\r\n      /// </summary>\r\n      public IFCConnectionType SecondConnectionType { get; private set; }\r\n\r\n      /// <summary>\r\n      /// The connection geometry handle.\r\n      /// </summary>\r\n      public IFCAnyHandle ConnectionGeometry { get; private set; }\r\n\r\n      /// <summary>\r\n      /// Override operator ==.\r\n      /// </summary>\r\n      /// <param name=\"first\">The WallConnectionData.</param>\r\n      /// <param name=\"second\">The other WallConnectionData.</param>\r\n      /// <returns>True if they are equal, false otherwise.</returns>\r\n      static public bool operator ==(WallConnectionData first, WallConnectionData second)\r\n      {\r\n         Object lhsObject = first;\r\n         Object rhsObject = second;\r\n         if (null == lhsObject)\r\n            return (null == rhsObject);\r\n         \r\n         if (null == rhsObject)\r\n            return false;\r\n\r\n         return first.FirstId == second.FirstId && first.SecondId == second.SecondId &&\r\n            first.FirstConnectionType == second.FirstConnectionType && first.SecondConnectionType == second.SecondConnectionType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Override operator !=.\r\n      /// </summary>\r\n      /// <param name=\"first\">The WallConnectionData.</param>\r\n      /// <param name=\"second\">The other WallConnectionData.</param>\r\n      /// <returns>True if they are not equal, false otherwise.</returns>\r\n      static public bool operator !=(WallConnectionData first, WallConnectionData second)\r\n      {\r\n         return !(first == second);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Override method Equals.\r\n      /// </summary>\r\n      /// <param name=\"obj\">The WallConnectionData object.</param>\r\n      /// <returns>True if they are equal, false otherwise.</returns>\r\n      public override bool Equals(object obj)\r\n      {\r\n         if (null == obj)\r\n         {\r\n            return false;\r\n         }\r\n\r\n         WallConnectionData wallConnectionData = obj as WallConnectionData;\r\n\r\n         if (null == wallConnectionData)\r\n         {\r\n            return false;\r\n         }\r\n\r\n         return (this == wallConnectionData);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Override method GetHashCode.\r\n      /// </summary>\r\n      /// <returns>The hash code.</returns>\r\n      public override int GetHashCode()\r\n      {\r\n         return FirstId.GetHashCode() ^ SecondId.GetHashCode();\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/WallExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Autodesk.Revit.DB.Mechanical;\r\nusing System.Linq;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   // Alias to make it easier to deal with ExportInfoCache.\r\n   using ExportTypeInfo = Tuple<IFCExportInfoPair, string, ExportTypeOverrideHelper>;\r\n\r\n   /// <summary>\r\n   /// Allows GetProductExportType to override the ExportType for IfcWallStandardCase entities.\r\n   /// </summary>\r\n   class WallExporterWallStandardCaseOverrideHelper : ExportTypeOverrideHelper   \r\n   {\r\n      /// <summary>\r\n      /// Constructs the override helper.\r\n      /// </summary>\r\n      /// <param name=\"elementForExport\">Element associated with the override.</param>\r\n      public WallExporterWallStandardCaseOverrideHelper(string predefinedType)\r\n      {\r\n         PredefinedType = predefinedType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// When the cache is invalidated, this overrides the ExportType without calling GetExportType().\r\n      /// </summary>\r\n      /// <param name=\"exportTypeInfo\">Previous Export Type data (from cache).</param>\r\n      /// <returns>Updated Export Type data, or null if unable to override.</returns>\r\n      public override ExportTypeInfo ApplyOverride(ExportTypeInfo exportTypeInfo)\r\n      {\r\n         IFCExportInfoPair ifcExportInfoPair = exportTypeInfo?.Item1;\r\n         if (ifcExportInfoPair == null)\r\n            return null;\r\n\r\n         ifcExportInfoPair.SetByTypeAndPredefinedType(IFCEntityType.IfcWallStandardCase, exportTypeInfo.Item2);\r\n         return new ExportTypeInfo(ifcExportInfoPair, exportTypeInfo.Item2, this);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Equality check for two Override Handlers.  Required to keep cache up-to-date.\r\n      /// </summary>\r\n      /// <param name=\"other\">The other OverrideHandler for comparison.</param>\r\n      /// <returns>True if equal, False otherwise.</returns>\r\n      public override bool Equals(ExportTypeOverrideHelper other)\r\n      {\r\n         WallExporterWallStandardCaseOverrideHelper otherWallOverrider = other as WallExporterWallStandardCaseOverrideHelper;\r\n         if (otherWallOverrider == null)\r\n            return false; \r\n\r\n         if (string.IsNullOrWhiteSpace(otherWallOverrider.PredefinedType) && string.IsNullOrWhiteSpace(PredefinedType))\r\n            return true;\r\n\r\n         return string.Compare(otherWallOverrider.PredefinedType, PredefinedType) == 0;\r\n      }\r\n\r\n      public string PredefinedType { get; protected set; } = string.Empty;\r\n   }\r\n\r\n   /// <summary>\r\n   /// Allows GetProductExportType to override PredefinedType portion of ExportTypes.\r\n   /// </summary>\r\n   class WallExporterPredefinedTypeSetterOverrideHelper : ExportTypeOverrideHelper\r\n   {\r\n      /// <summary>\r\n      /// Constructor.\r\n      /// </summary>\r\n      /// <param name=\"predefinedType\">Predefined type involved in override.</param>\r\n      public WallExporterPredefinedTypeSetterOverrideHelper(string predefinedType)\r\n      {\r\n         PredefinedType = predefinedType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// When the cache is invalidated, this overrides the ExportType without calling GetExportType().\r\n      /// </summary>\r\n      /// <param name=\"exportTypeInfo\">Previous Export Type data (from cache).</param>\r\n      /// <returns>Updated Export Type data, or null if unable to override.</returns>\r\n      public override ExportTypeInfo ApplyOverride(ExportTypeInfo exportTypeInfo)\r\n      {\r\n         IFCExportInfoPair ifcExportInfoPair = exportTypeInfo?.Item1;\r\n         if (ifcExportInfoPair == null)\r\n            return null;\r\n\r\n         ifcExportInfoPair.PredefinedType = PredefinedType;\r\n         return new ExportTypeInfo(ifcExportInfoPair, exportTypeInfo.Item2, this);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Equality check for two Override Handlers.  Required to keep cache up-to-date.\r\n      /// </summary>\r\n      /// <param name=\"other\">The other OverrideHandler for comparison.</param>\r\n      /// <returns>True if equal, False otherwise.</returns>\r\n      public override bool Equals(ExportTypeOverrideHelper other)\r\n      {\r\n         WallExporterPredefinedTypeSetterOverrideHelper otherWallOverrider = other as WallExporterPredefinedTypeSetterOverrideHelper;\r\n         if (otherWallOverrider == null)\r\n            return false;\r\n\r\n         if (string.IsNullOrWhiteSpace(otherWallOverrider.PredefinedType) && string.IsNullOrWhiteSpace(PredefinedType))\r\n            return true;\r\n\r\n         return string.Compare(otherWallOverrider.PredefinedType, PredefinedType) == 0;\r\n      }\r\n\r\n      public string PredefinedType { get; protected set; } = string.Empty;\r\n   }\r\n\r\n\r\n   /// <summary>\r\n   /// Provides methods to export walls.\r\n   /// </summary>\r\n   class WallExporter\r\n   {\r\n      private static CurveLoop SafeCreateViaThicken(Curve axisCurve, double width)\r\n      {\r\n         CurveLoop newLoop = null;\r\n         try\r\n         {\r\n            if (axisCurve.IsReadOnly)\r\n               axisCurve = axisCurve.Clone();\r\n            newLoop = CurveLoop.CreateViaThicken(axisCurve, width, XYZ.BasisZ);\r\n         }\r\n         catch\r\n         {\r\n         }\r\n\r\n         if (newLoop == null)\r\n            return null;\r\n\r\n         if (!newLoop.IsCounterclockwise(XYZ.BasisZ))\r\n            newLoop = GeometryUtil.ReverseOrientation(newLoop);\r\n\r\n         return newLoop;\r\n      }\r\n\r\n      private static bool GetDifferenceFromWallJoins(Document doc, ElementId wallId, Solid baseSolid, IList<IList<IFCConnectedWallData>> connectedWalls)\r\n      {\r\n         Options options = GeometryUtil.GetIFCExportGeometryOptions();\r\n         foreach (IList<IFCConnectedWallData> wallDataList in connectedWalls)\r\n         {\r\n            foreach (IFCConnectedWallData wallData in wallDataList)\r\n            {\r\n               ElementId otherWallId = wallData.ElementId;\r\n               if (otherWallId == wallId)\r\n                  continue;\r\n\r\n               Element otherElem = doc.GetElement(otherWallId);\r\n               GeometryElement otherGeomElem = otherElem?.get_Geometry(options);\r\n               if (otherGeomElem == null)\r\n                  continue;\r\n\r\n               SolidMeshGeometryInfo solidMeshInfo = GeometryUtil.GetSplitSolidMeshGeometry(otherGeomElem);\r\n               if (solidMeshInfo.GetMeshes().Count != 0)\r\n                  return false;\r\n\r\n               IList<SolidInfo> solidInfos = solidMeshInfo.SolidInfoList;\r\n               foreach (SolidInfo solidInfo in solidInfos)\r\n               {\r\n                  try\r\n                  {\r\n                     BooleanOperationsUtils.ExecuteBooleanOperationModifyingOriginalSolid(baseSolid,\r\n                        solidInfo.Solid, BooleanOperationsType.Difference);\r\n                  }\r\n                  catch\r\n                  {\r\n                     return false;\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      private static Solid CreateBaseWallGeometry(Curve baseCurve, double unscaledWidth, \r\n         double scaledDepth)\r\n      {\r\n         CurveLoop newLoop = SafeCreateViaThicken(baseCurve, unscaledWidth);\r\n         if (newLoop == null)\r\n            return null;\r\n\r\n         IList<CurveLoop> boundaryLoops = new List<CurveLoop>();\r\n         boundaryLoops.Add(newLoop);\r\n\r\n         XYZ normal = XYZ.BasisZ;\r\n         SolidOptions solidOptions = new SolidOptions(ElementId.InvalidElementId, ElementId.InvalidElementId);\r\n         double unscaledDepth = UnitUtil.UnscaleLength(scaledDepth);\r\n         Solid baseSolid = GeometryCreationUtilities.CreateExtrusionGeometry(boundaryLoops, normal, scaledDepth, solidOptions);\r\n\r\n         return baseSolid;\r\n      }\r\n\r\n      private static Solid CreateWallEndClippedWallGeometry(Wall wallElement, IList<IList<IFCConnectedWallData>> connectedWalls,\r\n         Curve baseCurve, double unscaledWidth, double scaledDepth)\r\n      {\r\n         Solid baseSolid = CreateBaseWallGeometry(baseCurve, unscaledWidth, scaledDepth);\r\n         if (baseSolid == null)\r\n            return null;\r\n\r\n         if (!GetDifferenceFromWallJoins(wallElement.Document, wallElement.Id, baseSolid, connectedWalls))\r\n            return null;\r\n\r\n         return baseSolid;\r\n      }\r\n\r\n      private static Curve MaybeStretchBaseCurve(Curve baseCurve, Curve trimmedCurve)\r\n      {\r\n         // Only works for bound curves.\r\n         if (!baseCurve.IsBound || !trimmedCurve.IsBound)\r\n            return null;\r\n\r\n         // The original end parameters.\r\n         double baseCurveParam0 = baseCurve.GetEndParameter(0);\r\n         double baseCurveParam1 = baseCurve.GetEndParameter(1);\r\n\r\n         // The trimmed curve may actually extend beyond the base curve at one end - make sure we extend the base curve.\r\n         XYZ trimmedEndPt0 = trimmedCurve.GetEndPoint(0);\r\n         XYZ trimmedEndPt1 = trimmedCurve.GetEndPoint(1);\r\n\r\n         Curve axisCurve = baseCurve.Clone();\r\n         if (axisCurve == null)\r\n            return null;\r\n\r\n         // We need to make the curve unbound before we find the trimmed end parameters, because Project finds the closest point\r\n         // on the bounded curve, whereas we want to find the closest point on the unbounded curve.\r\n         axisCurve.MakeUnbound();\r\n\r\n         IntersectionResult result0 = axisCurve.Project(trimmedEndPt0);\r\n         IntersectionResult result1 = axisCurve.Project(trimmedEndPt1);\r\n\r\n         // One of the intersection points is not on the unbound curve - abort.\r\n         if (!MathUtil.IsAlmostZero(result0.Distance) || !MathUtil.IsAlmostZero(result1.Distance))\r\n            return null;\r\n\r\n         double projectedEndParam0 = result0.Parameter;\r\n         double projectedEndParam1 = result1.Parameter;\r\n\r\n         double minParam = baseCurveParam0;\r\n         double maxParam = baseCurveParam1;\r\n\r\n         // Check that the orientation is correct.\r\n         if (axisCurve.IsCyclic)\r\n         {\r\n            XYZ midTrimmedPtXYZ = (trimmedCurve.Evaluate(0.5, true));\r\n            IntersectionResult result2 = axisCurve.Project(midTrimmedPtXYZ);\r\n            if (!MathUtil.IsAlmostZero(result2.Distance))\r\n               return null;\r\n\r\n            double projectedEndParamMid = (projectedEndParam0 + projectedEndParam1) / 2.0;\r\n            bool parametersAreNotFlipped = MathUtil.IsAlmostEqual(projectedEndParamMid, result2.Parameter);\r\n            bool trimmedCurveIsCCW = ((projectedEndParam0 < projectedEndParam1) == parametersAreNotFlipped);\r\n\r\n            if (!trimmedCurveIsCCW)\r\n            {\r\n               double tmp = projectedEndParam0; projectedEndParam0 = projectedEndParam1; projectedEndParam1 = tmp;\r\n            }\r\n\r\n            // While this looks inefficient, in practice we expect to do each while loop 0 or 1 times.\r\n            double period = axisCurve.Period;\r\n            while (projectedEndParam0 > baseCurveParam1) projectedEndParam0 -= period;\r\n            while (projectedEndParam1 < baseCurveParam0) projectedEndParam1 += period;\r\n\r\n            minParam = Math.Min(minParam, projectedEndParam0);\r\n            maxParam = Math.Max(maxParam, projectedEndParam1);\r\n         }\r\n         else\r\n         {\r\n            minParam = Math.Min(minParam, Math.Min(projectedEndParam0, projectedEndParam1));\r\n            maxParam = Math.Max(maxParam, Math.Max(projectedEndParam0, projectedEndParam1));\r\n         }\r\n\r\n         axisCurve.MakeBound(minParam, maxParam);\r\n         return axisCurve;\r\n      }\r\n\r\n      private static IList<CurveLoop> GetBoundaryLoopsFromBaseCurve(Wall wallElement,\r\n          IList<IList<IFCConnectedWallData>> connectedWalls,\r\n          Curve baseCurve,\r\n          Curve trimmedCurve,\r\n          double unscaledWidth,\r\n          double scaledDepth)\r\n      {\r\n         // If we don't have connected wall information, we can't clip them away.  Abort.\r\n         if (connectedWalls == null)\r\n            return null;\r\n\r\n         Curve axisCurve = MaybeStretchBaseCurve(baseCurve, trimmedCurve);\r\n         if (axisCurve == null)\r\n            return null;\r\n\r\n         // Create the extruded wall minus the wall joins.\r\n         Solid baseSolid = CreateWallEndClippedWallGeometry(wallElement, connectedWalls, axisCurve, unscaledWidth, scaledDepth);\r\n         if (baseSolid == null)\r\n            return null;\r\n\r\n         // Get the one face pointing in the -Z direction.  If there are multiple, abort.\r\n         IList<CurveLoop> boundaryLoops = new List<CurveLoop>();\r\n         foreach (Face potentialBaseFace in baseSolid.Faces)\r\n         {\r\n            if (potentialBaseFace is PlanarFace)\r\n            {\r\n               PlanarFace planarFace = potentialBaseFace as PlanarFace;\r\n               if (planarFace.FaceNormal.IsAlmostEqualTo(-XYZ.BasisZ))\r\n               {\r\n                  if (boundaryLoops.Count > 0)\r\n                     return null;\r\n                  boundaryLoops = planarFace.GetEdgesAsCurveLoops();\r\n               }\r\n            }\r\n         }\r\n\r\n         return boundaryLoops;\r\n      }\r\n\r\n      private static IList<CurveLoop> GetBoundaryLoopsFromWall(ExporterIFC exporterIFC,\r\n          Wall wallElement,\r\n          bool alwaysThickenCurve,\r\n          Curve trimmedCurve,\r\n          double unscaledWidth)\r\n      {\r\n         IList<CurveLoop> boundaryLoops = new List<CurveLoop>();\r\n\r\n         if (!alwaysThickenCurve)\r\n         {\r\n            boundaryLoops = GetLoopsFromTopBottomFace(wallElement, exporterIFC);\r\n            if (boundaryLoops.Count == 0)\r\n               return null;\r\n         }\r\n         else\r\n         {\r\n            CurveLoop newLoop = SafeCreateViaThicken(trimmedCurve, unscaledWidth);\r\n            if (newLoop == null)\r\n               return null;\r\n\r\n            boundaryLoops.Add(newLoop);\r\n         }\r\n\r\n         return boundaryLoops;\r\n      }\r\n\r\n      private static bool WallHasGeometryToExport(Wall wallElement,\r\n          IList<Solid> solids,\r\n          IList<Mesh> meshes,\r\n          IFCRange range,\r\n          out bool isCompletelyClipped)\r\n      {\r\n         isCompletelyClipped = false;\r\n\r\n         bool hasExtrusion = HasElevationProfile(wallElement);\r\n         if (hasExtrusion)\r\n         {\r\n            IList<CurveLoop> loops = GetElevationProfile(wallElement);\r\n            if (loops.Count == 0)\r\n               hasExtrusion = false;\r\n            else\r\n            {\r\n               IList<IList<CurveLoop>> sortedLoops = ExporterIFCUtils.SortCurveLoops(loops);\r\n               if (sortedLoops.Count == 0)\r\n                  return false;\r\n\r\n               // Current limitation: can't handle wall split into multiple disjointed pieces.\r\n               int numSortedLoops = sortedLoops.Count;\r\n               if (numSortedLoops > 1)\r\n                  return false;\r\n\r\n               bool ignoreExtrusion = true;\r\n               bool cantHandle = false;\r\n               bool hasGeometry = false;\r\n               for (int ii = 0; (ii < numSortedLoops) && !cantHandle; ii++)\r\n               {\r\n                  int sortedLoopSize = sortedLoops[ii].Count;\r\n                  if (sortedLoopSize == 0)\r\n                     continue;\r\n                  if (!ExporterIFCUtils.IsCurveLoopConvexWithOpenings(sortedLoops[ii][0], wallElement, range, out ignoreExtrusion))\r\n                  {\r\n                     if (ignoreExtrusion)\r\n                     {\r\n                        // we need more information.  Is there something to export?  If so, we'll\r\n                        // ignore the extrusion.  Otherwise, we will fail.\r\n\r\n                        if (solids.Count == 0 && meshes.Count == 0)\r\n                           continue;\r\n                     }\r\n                     else\r\n                     {\r\n                        cantHandle = true;\r\n                     }\r\n                     hasGeometry = true;\r\n                  }\r\n                  else\r\n                  {\r\n                     hasGeometry = true;\r\n                  }\r\n               }\r\n\r\n               if (!hasGeometry)\r\n               {\r\n                  isCompletelyClipped = true;\r\n                  return false;\r\n               }\r\n\r\n               if (cantHandle)\r\n                  return false;\r\n            }\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      private static bool HasUnsupportedCutsWallSweeps(Wall wallElement, bool hasCutsWallSweep)\r\n      {\r\n         if (!hasCutsWallSweep)\r\n            return false;\r\n\r\n         Parameter topExtensionDistParam = wallElement.GetParameter(ParameterTypeId.WallTopExtensionDistParam);\r\n         if (topExtensionDistParam != null)\r\n         {\r\n            double? topDistValue = topExtensionDistParam.AsDouble();\r\n            if (topDistValue != null && topDistValue.HasValue && !MathUtil.IsAlmostZero(topDistValue.Value))\r\n               return true;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      private static IFCAnyHandle TryToCreateAsExtrusion(ExporterIFC exporterIFC,\r\n          Wall wallElement,\r\n          IFCExportInfoPair exportType,\r\n          IList<IList<IFCConnectedWallData>> connectedWalls,\r\n          IList<Solid> solids,\r\n          IList<Mesh> meshes,\r\n          double baseWallElevation,\r\n          ElementId catId,\r\n          Curve baseCurve,\r\n          Curve trimmedCurve,\r\n          Transform wallLCS,\r\n          double scaledDepth,\r\n          IFCRange zSpan,\r\n          IFCRange range,\r\n          PlacementSetter setter,\r\n          out IList<IFCExtrusionData> cutPairOpenings,\r\n          out bool isCompletelyClipped,\r\n          out double scaledFootprintArea,\r\n          out double scaledLength)\r\n      {\r\n         cutPairOpenings = new List<IFCExtrusionData>();\r\n         IFCAnyHandle bodyRep;\r\n         scaledFootprintArea = 0;\r\n\r\n         double unscaledLength = trimmedCurve != null ? trimmedCurve.Length : 0;\r\n         scaledLength = UnitUtil.ScaleLength(unscaledLength);\r\n\r\n         XYZ localOrig = wallLCS.Origin;\r\n\r\n         // Check to see if the wall has geometry given the specified range.\r\n         if (!WallHasGeometryToExport(wallElement, solids, meshes, range,\r\n            out isCompletelyClipped))\r\n            return null;\r\n\r\n         // This is our major check here that goes into internal code.  If we have enough\r\n         // information to faithfully reproduce the wall as an extrusion with clippings and\r\n         // openings, we will continue.  Otherwise, export it as a BRep.\r\n         if (!CanExportWallGeometryAsExtrusion(wallElement, range, trimmedCurve))\r\n            return null;\r\n\r\n         // Extrusion direction.\r\n         XYZ extrusionDir = GetWallExtrusionDirection(wallElement);\r\n         if (extrusionDir == null)\r\n            return null;\r\n\r\n         // Create extrusion boundary.\r\n         bool alwaysThickenCurve = IsWallBaseRectangular(wallElement, trimmedCurve) &&\r\n            !ExporterCacheManager.ExportOptionsCache.WallAndColumnSplitting;\r\n\r\n         double unscaledHorizontalWidth = wallElement.Width;\r\n         double? optWallSlantAngle = ExporterCacheManager.WallCrossSectionCache.GetUniformSlantAngle(wallElement);\r\n         double wallSlantAngle = optWallSlantAngle.GetValueOrDefault(0.0);\r\n         double wallAngle = Math.Cos(wallSlantAngle);\r\n         if(!MathUtil.IsAlmostZero(wallAngle))\r\n            unscaledHorizontalWidth /= wallAngle;\r\n\r\n         IList<CurveLoop> originalBoundaryLoops = GetBoundaryLoopsFromWall(exporterIFC,\r\n            wallElement, alwaysThickenCurve, trimmedCurve, unscaledHorizontalWidth);\r\n         if ((originalBoundaryLoops?.Count ?? 0) == 0)\r\n            return null;\r\n\r\n         // If the wall is connected to a non-vertical wall, in which case the shape of the wall may have extensions or cuts \r\n         // that do not allow to export it correctly as an extrusion. In this case, export it as BRep.\r\n         if (IsConnectedWithNonVerticalWall(connectedWalls, wallElement))\r\n            return null;\r\n\r\n         double fullUnscaledLength = baseCurve.Length;\r\n         double unscaledFootprintArea = ExporterIFCUtils.ComputeAreaOfCurveLoops(originalBoundaryLoops);\r\n         scaledFootprintArea = UnitUtil.ScaleArea(unscaledFootprintArea);\r\n         // We are going to do a little sanity check here.  If the scaledFootprintArea is significantly less than the \r\n         // width * length of the wall footprint, we probably calculated the area wrong, and will abort.\r\n         // This could occur because of a door or window that cuts a corner of the wall (i.e., has no wall material on one side).\r\n         // We want the scaledFootprintArea to be at least (95% of approximateBaseArea - 2 * side wall area).  \r\n         // The \"side wall area\" is an approximate value that takes into account potential wall joins.  \r\n         // This prevents us from doing extra work for many small walls because of joins.  We'll allow 1' (~30 cm) per side for this.\r\n\r\n         // Note that this heuristic is fallable.  One known case where it can fail is when exporting a wall infill.  For this case,\r\n         // the infill inherits the base curve (axis) of the parent wall, but has no openings of its own.  Unfortunately, we can't\r\n         // detect if a wall is an infill - that information isn't readily available to the API - so we will instead add to the heuristic:\r\n         // if we do \"expand\" the base extrusion below, but we later find no cutPairOpenings, we will abort this case and fallback\r\n         // to the next heuristic in the calling function.\r\n         double approximateUnscaledBaseArea = unscaledHorizontalWidth * fullUnscaledLength;\r\n         bool expandedWallExtrusion = false;\r\n\r\n         // Check whether wall has opening. If it has, exporting it in the Reference View will need to be in a tessellated geometry that includes the opening cut\r\n         IList<IFCOpeningData> openingDataList = ExporterIFCUtils.GetOpeningData(exporterIFC, wallElement, wallLCS, range);\r\n         bool wallHasOpening = openingDataList.Count > 0;\r\n         \r\n         // IfcRelVoidsElement only works for subtypes of IfcElement.  In this case, we can't\r\n         // use this function.\r\n         if (wallHasOpening && !ExporterUtil.IsSubTypeOf(exportType.ExportInstance, IFCEntityType.IfcElement))\r\n            return null;\r\n\r\n         IList<CurveLoop> boundaryLoops = null;\r\n\r\n         // Continue only if the infill wall is ordinary. The other cases will be handled by the BRep exporter.\r\n         if (!wallElement.HasPhases())\r\n         {\r\n            Plane basePlane = GeometryUtil.CreatePlaneFromTransformNearOrigin(wallLCS);\r\n            if (solids.Count != 1 || !GeometryUtil.TryGetExtrusionEndFaces(solids[0], basePlane, basePlane.Origin,\r\n               tryNonPerpendicularExtrusion: false, checkOrdinarity: true, out _, out _))\r\n               return null;\r\n         }\r\n\r\n         if (unscaledFootprintArea < (approximateUnscaledBaseArea * .95 - 2 * unscaledHorizontalWidth))\r\n         {\r\n            // Can't handle the case where we don't have a simple extrusion to begin with.\r\n            if (!alwaysThickenCurve)\r\n               return null;\r\n\r\n            boundaryLoops = GetBoundaryLoopsFromBaseCurve(wallElement, connectedWalls, baseCurve, trimmedCurve, unscaledHorizontalWidth, scaledDepth);\r\n            if (boundaryLoops == null || boundaryLoops.Count == 0)\r\n               return null;\r\n\r\n            expandedWallExtrusion = true;\r\n         }\r\n         else\r\n         {\r\n            if (wallElement.HasPhases() && wallHasOpening)\r\n               boundaryLoops = GetLoopsFromTopBottomFace(wallElement, exporterIFC);\r\n\r\n            if (boundaryLoops == null || boundaryLoops.Count == 0 || unscaledFootprintArea > ExporterIFCUtils.ComputeAreaOfCurveLoops(boundaryLoops))\r\n               boundaryLoops = originalBoundaryLoops;\r\n         }\r\n\r\n         // origin gets scaled later.\r\n         double baseWallZOffset = localOrig[2] - ((range == null) ? baseWallElevation : Math.Min(range.Start, baseWallElevation));\r\n         XYZ modifiedSetterOffset = new XYZ(0, 0, setter.Offset + baseWallZOffset);\r\n\r\n         IFCAnyHandle baseBodyItemHnd = null;\r\n         IFCAnyHandle bodyItemHnd = null;\r\n         IFCFile file = exporterIFC.GetFile();\r\n         bool hasClipping = false;\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            baseBodyItemHnd = ExtrusionExporter.CreateExtrudedSolidFromCurveLoop(exporterIFC, null, boundaryLoops, wallLCS,\r\n                extrusionDir, scaledDepth, false, out _);\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(baseBodyItemHnd))\r\n               return null;\r\n\r\n            bodyItemHnd = AddClippingsToBaseExtrusion(exporterIFC, wallElement,\r\n               modifiedSetterOffset, range, zSpan, baseBodyItemHnd, out cutPairOpenings);\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(bodyItemHnd))\r\n               return null;\r\n            hasClipping = bodyItemHnd.Id != baseBodyItemHnd.Id;\r\n\r\n            // If there is clipping in IFC4 RV, it also needs to rollback\r\n            if ((expandedWallExtrusion && !hasClipping)\r\n               || (hasClipping && ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView))\r\n            {\r\n               // We expanded the wall base, expecting to find cutouts, but found none.  Delete the extrusion and try again below.\r\n               tr.RollBack();\r\n               baseBodyItemHnd = null;\r\n               bodyItemHnd = null;\r\n            }\r\n            //If there is clipping right next to the opening it can cause incorrect geometry as far one clipping face will be missed. In this case, export wall it as BRep.\r\n            else if (wallHasOpening && hasClipping && OpeningsIntersectClippings(wallElement, openingDataList))\r\n            {\r\n               tr.RollBack();\r\n               return null;\r\n            }\r\n            else\r\n               tr.Commit();\r\n         }\r\n\r\n         // We created an extrusion, but we determined that it was too big (there were no cutouts).  So try again with our first guess.\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(bodyItemHnd))\r\n         {\r\n            IList<CurveLoop> tempCurveLoop = originalBoundaryLoops;\r\n            // If wall is \"infill\" use boundary curve instead of original\r\n            if (wallElement.HasPhases())\r\n               tempCurveLoop = boundaryLoops;\r\n\r\n            baseBodyItemHnd = bodyItemHnd = ExtrusionExporter.CreateExtrudedSolidFromCurveLoop(exporterIFC, null, tempCurveLoop, wallLCS,\r\n               extrusionDir, scaledDepth, false, out _);\r\n         }\r\n\r\n         ElementId matId = HostObjectExporter.GetFirstLayerMaterialId(wallElement);\r\n         BodyExporter.CreateSurfaceStyleForRepItem(exporterIFC, wallElement.Document, false, baseBodyItemHnd, matId);\r\n\r\n         HashSet<IFCAnyHandle> bodyItems = new HashSet<IFCAnyHandle>();\r\n         bodyItems.Add(bodyItemHnd);\r\n\r\n         BodyExporterOptions options = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n\r\n         IFCAnyHandle contextOfItemsBody = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Body);\r\n         if (!hasClipping)\r\n         {\r\n            // Check whether wall has opening. If it has, exporting it in Reference View will need to be in a tesselated geometry that includes the opening cut\r\n            if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView && wallHasOpening)\r\n            {\r\n               List<GeometryObject> geomList = new List<GeometryObject>();\r\n               bodyItems.Clear();       // Since we will change the geometry, clear existing extrusion data first\r\n               geomList.AddRange(solids);\r\n               geomList.AddRange(meshes); \r\n               foreach (GeometryObject geom in geomList)\r\n               {\r\n                  IList<IFCAnyHandle> triangulatedBodyItems = BodyExporter.ExportBodyAsTessellatedFaceSet(exporterIFC, wallElement, options, geom);\r\n                  if (triangulatedBodyItems != null && triangulatedBodyItems.Count > 0)\r\n                  {\r\n                     foreach (IFCAnyHandle triangulatedBodyItem in triangulatedBodyItems)\r\n                        bodyItems.Add(triangulatedBodyItem);\r\n                  }\r\n               }\r\n               bodyRep = RepresentationUtil.CreateTessellatedRep(exporterIFC, wallElement, catId, contextOfItemsBody, bodyItems, null);\r\n            }\r\n            else\r\n               bodyRep = RepresentationUtil.CreateSweptSolidRep(exporterIFC, wallElement, catId, contextOfItemsBody, bodyItems, null, null);\r\n         }\r\n         else\r\n         {\r\n            // Create TessellatedRep geometry if it is Reference View.\r\n            if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n            {\r\n\r\n               List<GeometryObject> geomList = new List<GeometryObject>();\r\n               // The native function AddClippingsToBaseExtrusion will create the IfcBooleanClippingResult entity and therefore here we need to delete it\r\n               foreach (IFCAnyHandle item in bodyItems)\r\n               {\r\n                  item.Dispose();     //Still DOES NOT work, the IfcBooleanClippingResult is still orphaned in the IFC file!\r\n               }\r\n               bodyItems.Clear();       // Since we will change the geometry, clear existing extrusion data first\r\n\r\n               geomList.AddRange(solids);\r\n               geomList.AddRange(meshes); \r\n               foreach (GeometryObject geom in geomList)\r\n               {\r\n                  IList<IFCAnyHandle> triangulatedBodyItems = BodyExporter.ExportBodyAsTessellatedFaceSet(exporterIFC, wallElement, options, geom);\r\n                  if (triangulatedBodyItems != null && triangulatedBodyItems.Count > 0)\r\n                  {\r\n                     foreach (IFCAnyHandle triangulatedBodyItem in triangulatedBodyItems)\r\n                        bodyItems.Add(triangulatedBodyItem);\r\n                  }\r\n               }\r\n               bodyRep = RepresentationUtil.CreateTessellatedRep(exporterIFC, wallElement, catId, contextOfItemsBody, bodyItems, null);\r\n            }\r\n            else\r\n               bodyRep = RepresentationUtil.CreateClippingRep(exporterIFC, wallElement, catId, contextOfItemsBody, bodyItems);\r\n         }\r\n\r\n         return bodyRep;\r\n      }\r\n\r\n      // Get a list of solids and meshes, but only if we haven't already done so.\r\n      private static void GetSolidsAndMeshes(Document doc, ExporterIFC exporterIFC, GeometryElement geometryElement, \r\n         IFCRange range, ref IList<Solid> solids, ref IList<Mesh> meshes, out bool hasCutsWallSweep)\r\n      {\r\n         hasCutsWallSweep = false;\r\n\r\n         if (solids.Count > 0 || meshes.Count > 0)\r\n            return;\r\n\r\n         SolidMeshGeometryInfo solidMeshInfo =\r\n             (range == null) ? GeometryUtil.GetSplitSolidMeshGeometry(geometryElement) :\r\n                 GeometryUtil.GetSplitClippedSolidMeshGeometry(geometryElement, range);\r\n\r\n         foreach (SolidInfo solidInfo in solidMeshInfo.SolidInfoList)\r\n         {\r\n            // Walls can have integral wall sweeps.  These wall sweeps will be exported\r\n            // separately by the WallSweep element itself.  If we try to include the wall sweep\r\n            // here, it will affect our bounding box calculations and potentially create\r\n            // a base extrusion that is too high.\r\n            if (solidInfo.OwnerElement is WallSweep)\r\n            {\r\n               WallSweep wallSweepItem = solidInfo.OwnerElement as WallSweep;\r\n               if (wallSweepItem != null && !hasCutsWallSweep)\r\n               {\r\n                  WallSweepInfo info = wallSweepItem.GetWallSweepInfo();\r\n                  if (info != null && info.CutsWall)\r\n                     hasCutsWallSweep = true;\r\n               }\r\n               continue;\r\n            }\r\n\r\n            solids.Add(solidInfo.Solid);\r\n         }\r\n\r\n         meshes = solidMeshInfo.MeshesList;\r\n\r\n         FamilyExporterUtil.RemoveInvisibleSolidsAndMeshes(doc, exporterIFC, ref solids, ref meshes);\r\n      }\r\n\r\n      // Get List of Solids that are from Wall Sweep\r\n      private static IList<Solid> GetSolidOfWallSweep(GeometryElement geometryElement, IFCRange range)\r\n      {\r\n         IList<Solid> solids = new List<Solid>();\r\n\r\n         SolidMeshGeometryInfo solidMeshInfo =\r\n             (range == null) ? GeometryUtil.GetSplitSolidMeshGeometry(geometryElement) :\r\n                 GeometryUtil.GetSplitClippedSolidMeshGeometry(geometryElement, range);\r\n\r\n         foreach (SolidInfo solidInfo in solidMeshInfo.SolidInfoList)\r\n         {\r\n            if (solidInfo.OwnerElement is WallSweep)\r\n               solids.Add(solidInfo.Solid);\r\n         }\r\n         return solids;\r\n      }\r\n\r\n      // Takes into account the transform, assuming any rotation.\r\n      private static IFCRange GetBoundingBoxZRange(BoundingBoxXYZ boundingBox)\r\n      {\r\n         double minZ = 1e+30;\r\n         double maxZ = -1e+30;\r\n\r\n         for (int ii = 0; ii < 8; ii++)\r\n         {\r\n            XYZ currXYZ = new XYZ(((ii & 1) == 0) ? boundingBox.Min.X : boundingBox.Max.X,\r\n                ((ii & 2) == 0) ? boundingBox.Min.Y : boundingBox.Max.Y,\r\n                ((ii & 4) == 0) ? boundingBox.Min.Z : boundingBox.Max.Z);\r\n            XYZ transformedXYZ = boundingBox.Transform.OfPoint(currXYZ);\r\n\r\n            minZ = Math.Min(minZ, transformedXYZ.Z);\r\n            maxZ = Math.Max(maxZ, transformedXYZ.Z);\r\n         }\r\n\r\n         if (minZ >= maxZ)\r\n            return null;\r\n\r\n         return new IFCRange(minZ, maxZ);\r\n      }\r\n\r\n      private static IFCRange GetBoundingBoxOfSolids(IList<Solid> solids)\r\n      {\r\n         double minZ = 1e+30;\r\n         double maxZ = -1e+30;\r\n\r\n         foreach (Solid solid in solids)\r\n         {\r\n            BoundingBoxXYZ boundingBox = solid.GetBoundingBox();\r\n            if (boundingBox == null)\r\n               continue;\r\n\r\n            IFCRange solidRange = GetBoundingBoxZRange(boundingBox);\r\n            if (solidRange == null)\r\n               continue;\r\n\r\n            minZ = Math.Min(minZ, solidRange.Start);\r\n            maxZ = Math.Max(maxZ, solidRange.End);\r\n         }\r\n\r\n         if (minZ >= maxZ)\r\n            return null;\r\n\r\n         return new IFCRange(minZ, maxZ);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the curve type is supported as-is as the wall axis, given a particular MVD.\r\n      /// </summary>\r\n      /// <param name=\"curve\">The axis curve.</param>\r\n      /// <returns>True if the curve is s\r\n      /// </returns>\r\n      private static bool IsAllowedWallAxisCurveType(Curve curve)\r\n      {\r\n         if (curve == null)\r\n            return false;\r\n\r\n         // Default options for versions before IFC4.\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            return (curve is Line || curve is Arc);\r\n\r\n         return true;\r\n      }\r\n\r\n      private static bool CanExportAsWallStandardCase(Wall wallElement, bool exportParts)\r\n      {\r\n         if (exportParts)\r\n            return false;\r\n\r\n         XYZ extrusionDirection = GetWallExtrusionDirection(wallElement);\r\n         if ((extrusionDirection == null) ||\r\n            !MathUtil.IsAlmostEqual(extrusionDirection.Z, 1.0))\r\n            return false;\r\n\r\n         return ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4;\r\n      }\r\n\r\n      private static bool CanTryToCreateAsExtrusion(Wall wallElement, bool exportParts, bool exportByComponents, bool exportingWallElement,\r\n         bool exportingAxis, Curve trimmedCurve, bool isCurtainPanel, bool hasCutsWallSweep)\r\n      {\r\n         return (!exportParts && !exportByComponents && exportingWallElement && exportingAxis &&\r\n            trimmedCurve != null && !isCurtainPanel &&\r\n            !HasUnsupportedStackWallOpenings(wallElement) &&\r\n            !HasUnsupportedCutsWallSweeps(wallElement, hasCutsWallSweep));\r\n      }\r\n \r\n      private static bool HasUnsupportedStackWallOpenings(Wall wallElement)\r\n      {\r\n         if (wallElement == null)\r\n            return false;\r\n\r\n         ElementId stackedWallId = wallElement.StackedWallOwnerId;\r\n         if (stackedWallId == ElementId.InvalidElementId)\r\n            return false;\r\n\r\n         Document document = wallElement.Document;\r\n         Wall stackedWall = document.GetElement(stackedWallId) as Wall;\r\n         if (stackedWall == null)\r\n            return false;\r\n\r\n         ElementFilter openingFilter = new ElementClassFilter(typeof(Opening));\r\n         IList<ElementId> openingElements = stackedWall.GetDependentElements(openingFilter);\r\n         return (openingElements != null && openingElements.Count > 0);\r\n      }\r\n\r\n      private static string CalculateElementGUID(Element element)\r\n      {\r\n         // The first part maintains GUID compatibility with previous versions,\r\n         // while still allowing for unlimited subelements.\r\n         int subElementIndex = ExporterStateManager.GetCurrentRangeIndex();\r\n         if (subElementIndex > 0 && subElementIndex <= ExporterStateManager.RangeIndexSetter.GetMaxStableGUIDs())\r\n            return GUIDUtil.CreateSubElementGUID(element, subElementIndex + (int)IFCGenericSubElements.SplitInstanceStart - 1);\r\n         \r\n         if (subElementIndex != 0)\r\n            return GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(element, subElementIndex.ToString()));\r\n\r\n         return GUIDUtil.CreateGUID(element);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adjust the IFC Enum Type value string after the default \"GetExportType()\" method is called in WallExporter.\r\n      /// </summary>\r\n      /// <param name=\"wallElement\">Wall Element that the ifcEnumType refers to.</param>\r\n      /// <param name=\"exportType\">Default export type.</param>\r\n      /// <param name=\"ifcEnumType\">Default ifcEnumType.</param>\r\n      /// <returns></returns>\r\n      private static string AdjustDefaultExportTypeEnum(Wall wallElement, IFCExportInfoPair exportType, string ifcEnumType)\r\n      {\r\n         if ((wallElement != null) && (exportType.IsPredefinedTypeDefault) && \r\n             ((exportType.ExportInstance == IFCEntityType.IfcWall) || (exportType.ExportInstance == IFCEntityType.IfcWallStandardCase)))\r\n         {\r\n            WallType wallType = wallElement.WallType;\r\n            if (wallType != null)\r\n            {\r\n               if (wallType.Kind == WallKind.Basic)\r\n               {\r\n                  ifcEnumType = \"STANDARD\";\r\n               }\r\n            }\r\n         }\r\n\r\n         return ifcEnumType;\r\n      }\r\n      /// <summary>\r\n      /// Main implementation to export walls.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"connectedWalls\">Information about walls joined to this wall.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"origWrapper\">The ProductWrapper.</param>\r\n      /// <param name=\"overrideLevelId\">The level id.</param>\r\n      /// <param name=\"range\">The range to be exported for the element.</param>\r\n      /// <returns>The exported wall handle.</returns>\r\n      public static IFCAnyHandle ExportWallBase(ExporterIFC exporterIFC, string ifcEnumType, Element element, IList<IList<IFCConnectedWallData>> connectedWalls,\r\n          ref GeometryElement geometryElement, ProductWrapper origWrapper, ElementId overrideLevelId, IFCRange range)\r\n      {\r\n         if (element == null)\r\n            return null;\r\n\r\n         // Check cases where we choose not to export early.\r\n         ElementId catId = CategoryUtil.GetSafeCategoryId(element);\r\n\r\n         // We have special case code below depending on what the original element type is.  We care if:\r\n         // 1. The element is a Wall: we can get Wall-specific information from it.\r\n         // 2. The element is a HostObject: we can get a list of materials from it.\r\n         // 3. The element is a FamilyInstance: we can get in-place family information from it.\r\n         // All other elements will be treated generically.\r\n         Wall wallElement = element as Wall;\r\n         bool exportingWallElement = (wallElement != null);\r\n\r\n         bool exportingHostObject = element is HostObject;\r\n\r\n         if (exportingWallElement && IsWallCompletelyClipped(wallElement, exporterIFC, range))\r\n            return null;\r\n\r\n         if (!ElementFilteringUtil.IsElementVisible(element))\r\n            return null;\r\n\r\n         IFCRange zSpan = null;\r\n         double depth = 0.0;\r\n         bool validRange = (range != null && !MathUtil.IsAlmostZero(range.Start - range.End));\r\n\r\n         Document doc = element.Document;\r\n         // Collect solids of Wall Sweep first before attempting to split into Parts because once it is split, we cannot get the information\r\n         // the owner being Wall Sweep\r\n         IList<Solid> solidsOfWallSweep = GetSolidOfWallSweep(geometryElement, range);\r\n         using (SubTransaction tempPartTransaction = new SubTransaction(doc))\r\n         {\r\n            bool exportByComponents = false;\r\n            bool exportParts = false;\r\n            bool setMaterialNameToPartName = false;\r\n            MaterialLayerSetInfo layersetInfo = new MaterialLayerSetInfo(exporterIFC, element, origWrapper, geometryElement);\r\n\r\n            if (exportingWallElement)  // If it is not Wall, e.g. FamilyInstance, skip split to Parts as this may cause problem later\r\n            {\r\n               // For IFC4RV export, Element will be split into its parts(temporarily) in order to export the wall by its parts\r\n               ExporterUtil.ExportPartAs exportPartAs = ExporterUtil.CanExportParts(element);\r\n               exportByComponents = exportPartAs == ExporterUtil.ExportPartAs.ShapeAspect;\r\n               exportParts = exportPartAs == ExporterUtil.ExportPartAs.Part;\r\n               // If Parts are created by code and not by user then their name should be equal to Material name.\r\n               if (ExporterCacheManager.TemporaryPartsCache.HasTemporaryParts(element.Id))\r\n               {\r\n                  setMaterialNameToPartName = true;\r\n                  ExporterCacheManager.TemporaryPartsCache.SetPartExportType(element.Id, exportPartAs);\r\n               }\r\n\r\n               if (exportParts && !PartExporter.CanExportElementInPartExport(element, validRange ? overrideLevelId : element.LevelId, validRange))\r\n               {\r\n                  return null;\r\n               }\r\n            }\r\n\r\n            IList<Solid> solids = new List<Solid>();\r\n            IList<Mesh> meshes = new List<Mesh>();\r\n            bool hasCutsWallSweep = false;\r\n            bool isCurtainPanel = CategoryUtil.GetSafeCategoryId(element).Value ==\r\n               (long)BuiltInCategory.OST_CurtainWallPanels;\r\n            bool exportingInplaceOpenings = false;\r\n\r\n            if (!exportParts)\r\n            {\r\n               if (!(element is FamilyInstance))\r\n               {\r\n                  // For IFC4 RV, only collect the solid and mesh here. Split Wall will be handled when processing individual parts later\r\n                  GetSolidsAndMeshes(element.Document, exporterIFC, geometryElement, exportByComponents ? null : range,\r\n                     ref solids, ref meshes, out hasCutsWallSweep);\r\n                  if (solids.Count == 0 && meshes.Count == 0)\r\n                     return null;\r\n               }\r\n               else\r\n               {\r\n                  FamilyInstance famInstWallElem = element as FamilyInstance;\r\n\r\n                  GeometryElement geomElemToUse = GetGeometryFromInplaceWall(famInstWallElem);\r\n                  if (geomElemToUse != null)\r\n                  {\r\n                     exportingInplaceOpenings = true;\r\n                  }\r\n                  else\r\n                  {\r\n                     exportingInplaceOpenings = false;\r\n                     geomElemToUse = geometryElement;\r\n                  }\r\n\r\n                  Transform trf = Transform.Identity;\r\n                  if (geomElemToUse != geometryElement)\r\n                     trf = famInstWallElem.GetTransform();\r\n\r\n                  SolidMeshGeometryInfo solidMeshCapsule = GeometryUtil.GetSplitSolidMeshGeometry(geomElemToUse, trf);\r\n                  solids = solidMeshCapsule.GetSolids();\r\n                  meshes = solidMeshCapsule.GetMeshes();\r\n                  IList<GeometryObject> gObjs = FamilyExporterUtil.RemoveInvisibleSolidsAndMeshes(element.Document, exporterIFC, ref solids, ref meshes);\r\n               }\r\n            }\r\n\r\n            IFCFile file = exporterIFC.GetFile();\r\n            using (IFCTransaction tr = new IFCTransaction(file))\r\n            {\r\n               using (ProductWrapper localWrapper = ProductWrapper.Create(origWrapper))\r\n               {\r\n                  // get bounding box height so that we can subtract out pieces properly.\r\n                  // only for Wall, not FamilyInstance.\r\n                  if (exportingWallElement && geometryElement != null)\r\n                  {\r\n                     // There is a problem in the API where some walls with vertical structures are overreporting\r\n                     // their height, making it appear as if there are clipping problems on export.  We will work\r\n                     // around this by getting the height directly from the solid(s).\r\n                     // This can also overreport, though, so we will use the smallest of the two.  Note that this\r\n                     // is just a heuristic, so we will try to use the best approximation possible.\r\n                     if (solids.Count > 0 && meshes.Count == 0)\r\n                     {\r\n                        zSpan = GetBoundingBoxOfSolids(solids);\r\n                     }\r\n                     \r\n                     BoundingBoxXYZ boundingBox = wallElement.get_BoundingBox(null);\r\n                     if (boundingBox != null)\r\n                     {\r\n                        IFCRange zSpanAlt = GetBoundingBoxZRange(boundingBox);\r\n                        if (zSpan == null || (zSpanAlt.Start >= zSpan.Start && zSpanAlt.End <= zSpan.End))\r\n                        {\r\n                           zSpan = zSpanAlt;\r\n                        }\r\n                     }\r\n\r\n                     if (zSpan == null)\r\n                        return null;\r\n\r\n                     // if we have a top clipping plane, modify depth accordingly.\r\n                     double bottomHeight = validRange ? Math.Max(zSpan.Start, range.Start) : zSpan.Start;\r\n                     double topHeight = validRange ? Math.Min(zSpan.End, range.End) : zSpan.End;\r\n                     depth = topHeight - bottomHeight;\r\n                     if (MathUtil.IsAlmostZero(depth))\r\n                        return null;\r\n\r\n                     depth = UnitUtil.ScaleLength(depth);\r\n                  }\r\n                  else\r\n                  {\r\n                     zSpan = new IFCRange();\r\n                  }\r\n\r\n                  //Document doc = element.Document;\r\n\r\n                  double baseWallElevation = 0.0;\r\n                  ElementId baseLevelId = LevelUtil.GetBaseLevelIdForElement(element);\r\n                  if (baseLevelId != ElementId.InvalidElementId)\r\n                  {\r\n                     Element baseLevel = doc.GetElement(baseLevelId);\r\n                     baseWallElevation = (baseLevel as Level)?.Elevation ?? 0.0;\r\n                  }\r\n\r\n                  IFCAnyHandle axisRep = null;\r\n                  IFCAnyHandle bodyRep = null;\r\n\r\n                  bool exportingAxis = false;\r\n                  Curve trimmedCurve = null;\r\n\r\n                  bool exportedAsWallWithAxis = false;\r\n                  bool exportedBodyDirectly = false;\r\n                  Curve centerCurve = GetWallAxis(wallElement);\r\n\r\n                  XYZ localXDir = XYZ.BasisX;\r\n                  XYZ localYDir = XYZ.BasisY;\r\n                  XYZ localZDir = XYZ.BasisZ;\r\n                  XYZ localOrig = XYZ.Zero;\r\n                  double eps = MathUtil.Eps();\r\n\r\n                  if (centerCurve != null)\r\n                  {\r\n                     Curve baseCurve = GetWallAxisAtBaseHeight(wallElement);\r\n                     trimmedCurve = GetWallTrimmedCurve(wallElement, baseCurve);\r\n\r\n                     IFCRange curveBounds;\r\n                     XYZ oldOrig;\r\n                     GeometryUtil.GetAxisAndRangeFromCurve(trimmedCurve, out curveBounds, out localXDir, out oldOrig);\r\n\r\n                     // Move the curve to the bottom of the geometry or the bottom of the range, which is higher.\r\n                     if (baseCurve != null)\r\n                        localOrig = new XYZ(oldOrig.X, oldOrig.Y, validRange ? Math.Max(range.Start, zSpan.Start) : zSpan.Start);\r\n                     else\r\n                        localOrig = oldOrig;\r\n\r\n                     double zDiff = localOrig[2] - oldOrig[2];\r\n                     if (!MathUtil.IsAlmostZero(zDiff))\r\n                     {\r\n                        // TODO: Determine what to do for tapered walls.\r\n                        double? optWallSlantAngle = ExporterCacheManager.WallCrossSectionCache.GetUniformSlantAngle(wallElement);\r\n                        double wallSlantAngle = optWallSlantAngle.GetValueOrDefault(0.0);\r\n                        if (!MathUtil.IsAlmostZero(wallSlantAngle))\r\n                        {\r\n                           // If the wall is slanted and localOrig does not lie on the base curve (zDiff != 0), move \r\n                           // localOrig horizontally to the point where exported portion of the wall is located.\r\n                           Transform derivs = trimmedCurve.ComputeDerivatives(curveBounds.Start, false/*normalized*/);\r\n                           if (derivs.BasisX.IsZeroLength())\r\n                              return null;\r\n\r\n                           // horizontalRightSideVec will be a horizontal unit vector pointing to the wall's right side at \r\n                           // the given point (as seen by an upright observer facing the direction of the wall's path curve).\r\n                           XYZ horizontalRightSideVec = derivs.BasisX.CrossProduct(XYZ.BasisZ).Normalize();\r\n                           localOrig += horizontalRightSideVec * zDiff * Math.Tan(wallSlantAngle);\r\n                        }\r\n\r\n                        XYZ moveVec = localOrig - oldOrig;\r\n                        trimmedCurve = GeometryUtil.MoveCurve(trimmedCurve, moveVec);\r\n                     }\r\n\r\n                     localYDir = localZDir.CrossProduct(localXDir);\r\n\r\n                     // ensure that X and Z axes are orthogonal.\r\n                     double xzDot = localZDir.DotProduct(localXDir);\r\n                     if (!MathUtil.IsAlmostZero(xzDot))\r\n                        localXDir = localYDir.CrossProduct(localZDir);\r\n                  }\r\n                  else\r\n                  {\r\n                     BoundingBoxXYZ boundingBox = element.get_BoundingBox(null);\r\n                     if (boundingBox != null)\r\n                     {\r\n                        XYZ bBoxMin = boundingBox.Min;\r\n                        XYZ bBoxMax = boundingBox.Max;\r\n                        if (validRange)\r\n                           localOrig = new XYZ(bBoxMin.X, bBoxMin.Y, range.Start);\r\n                        else\r\n                           localOrig = boundingBox.Min;\r\n\r\n                        XYZ localXDirMax = null;\r\n                        Transform bTrf = boundingBox.Transform;\r\n                        XYZ localXDirMax1 = new XYZ(bBoxMax.X, localOrig.Y, localOrig.Z);\r\n                        localXDirMax1 = bTrf.OfPoint(localXDirMax1);\r\n                        XYZ localXDirMax2 = new XYZ(localOrig.X, bBoxMax.Y, localOrig.Z);\r\n                        localXDirMax2 = bTrf.OfPoint(localXDirMax2);\r\n                        if (localXDirMax1.DistanceTo(localOrig) >= localXDirMax2.DistanceTo(localOrig))\r\n                           localXDirMax = localXDirMax1;\r\n                        else\r\n                           localXDirMax = localXDirMax2;\r\n\r\n                        // An invalid bounding box may lead to a zero-length vector here, eventually causing a (soft) crash.\r\n                        localXDir = localXDirMax.Subtract(localOrig);\r\n                        localXDir = localXDir.Normalize();\r\n                        if (!localXDir.IsUnitLength())\r\n                           return null;\r\n\r\n                        localYDir = localZDir.CrossProduct(localXDir);\r\n\r\n                        // ensure that X and Z axes are orthogonal.\r\n                        double xzDot = localZDir.DotProduct(localXDir);\r\n                        if (!MathUtil.IsAlmostZero(xzDot))\r\n                           localXDir = localYDir.CrossProduct(localZDir);\r\n                     }\r\n                  }\r\n\r\n                  IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n                  Transform orientationTrf = Transform.Identity;\r\n                  orientationTrf.BasisX = localXDir;\r\n                  orientationTrf.BasisY = localYDir;\r\n                  orientationTrf.BasisZ = localZDir;\r\n                  orientationTrf.Origin = localOrig;\r\n\r\n                  double scaledFootprintArea = 0;\r\n                  double scaledLength = 0;\r\n\r\n                  // Check for containment override\r\n                  IFCAnyHandle overrideContainerHnd = null;\r\n                  ElementId overrideContainerId = ParameterUtil.OverrideContainmentParameter(element, out overrideContainerHnd);\r\n                  if ((overrideLevelId == null || overrideLevelId == ElementId.InvalidElementId) && overrideContainerId != ElementId.InvalidElementId)\r\n                     overrideLevelId = overrideContainerId;\r\n\r\n                  using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, element, null, orientationTrf, overrideLevelId, overrideContainerHnd))\r\n                  {\r\n                     IFCAnyHandle localPlacement = setter.LocalPlacement;\r\n\r\n                     // The local coordinate system of the wall as defined by IFC for IfcWallStandardCase.\r\n                     XYZ projDir = XYZ.BasisZ;\r\n\r\n                     // two representations: axis, body.         \r\n                     {\r\n                        if (!exportParts && IsAllowedWallAxisCurveType(centerCurve))\r\n                        {\r\n                           string identifierOpt = \"Axis\";   // IFC2x2 convention\r\n                           string representationTypeOpt = null;\r\n\r\n                           HashSet<IFCAnyHandle> axisItemSet = new HashSet<IFCAnyHandle>();\r\n\r\n                           if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n                           {\r\n                              axisItemSet.AddIfNotNull(GeometryUtil.CreatePolyCurveFromCurve(\r\n                                 exporterIFC, trimmedCurve));\r\n                              representationTypeOpt = \"Curve3D\";  // We use Curve3D for IFC4RV\r\n                           }\r\n                           else\r\n                           {\r\n                              IFCGeometryInfo info = IFCGeometryInfo.CreateCurveGeometryInfo(exporterIFC, orientationTrf, projDir, false);\r\n                              ExporterIFCUtils.CollectGeometryInfo(exporterIFC, info, trimmedCurve, XYZ.Zero, true);\r\n                              IList<IFCAnyHandle> tmpAxisHandles = info.GetCurves();\r\n                              foreach (IFCAnyHandle axisHandle in tmpAxisHandles)\r\n                              {\r\n                                 if (axisItemSet.AddIfNotNull(axisHandle))\r\n                                 {\r\n                                    // We will only export the first curve as the axis.\r\n                                    break;\r\n                                 }\r\n                              }\r\n\r\n                              representationTypeOpt = \"Curve2D\";  // Convention since IFC2x2\r\n                           }\r\n\r\n                           exportingAxis = ((axisItemSet?.Count ?? 0) == 1);\r\n                           if (exportingAxis)\r\n                           {\r\n                              IFCAnyHandle contextOfItemsAxis = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Axis);\r\n                              axisRep = RepresentationUtil.CreateShapeRepresentation(exporterIFC, element, catId, contextOfItemsAxis,\r\n                                 identifierOpt, representationTypeOpt, axisItemSet);\r\n                           }\r\n                        }\r\n                     }\r\n\r\n                     // We try this first because it can fail.  If it does, we revert to standard export.\r\n                     using (IFCExportBodyParams extraParams = new IFCExportBodyParams())\r\n                     {\r\n                        IFCExportBodyParams partECData = null;\r\n                        IFCAnyHandle prodRep = null;\r\n                        IFCAnyHandle hostShapeRepFromPartsList = null;\r\n                       \r\n                        if (!exportParts)\r\n                        {\r\n                           prodRep = IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, null);\r\n\r\n                           if (exportByComponents)\r\n                           {\r\n                              partECData = new IFCExportBodyParams();\r\n                              hostShapeRepFromPartsList = PartExporter.ExportHostPartAsShapeAspects(exporterIFC,\r\n                                 element, prodRep, overrideLevelId, layersetInfo, partECData, solidsOfWallSweep);\r\n                              if (IFCAnyHandleUtil.IsNullOrHasNoValue(hostShapeRepFromPartsList))\r\n                              {\r\n                                 partECData.ClearOpenings();\r\n                                 extraParams.ClearOpenings();\r\n                                 exportByComponents = false;\r\n                              }\r\n                           }\r\n                        }\r\n\r\n                        // If it is export by components, there will be no body at this step, the exportedAsWallWithAxis will be set to true here\r\n                        if (exportByComponents && !IFCAnyHandleUtil.IsNullOrHasNoValue(axisRep))\r\n                        {\r\n                           exportedAsWallWithAxis = true;\r\n                        }\r\n\r\n                        IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(element, out ifcEnumType);\r\n\r\n                        // For In this case, the Default ifcEnuMType May require modification after the ExportType calculation.\r\n                        // Note:  the cache may have \"UNDEFINED\" stored, but the adjustedEnumType here may be \"STANDARD\".\r\n                        string adjustedEnumType = AdjustDefaultExportTypeEnum(wallElement, exportType, ifcEnumType);\r\n\r\n                        IList<IFCExtrusionData> cutPairOpenings = new List<IFCExtrusionData>();\r\n                        // We only try to export by extrusion using this function if:\r\n                        // 1. We aren't trying to create parts or components.\r\n                        // 2. We have a native Revit wall whose non-trimmed axis we are exporting.\r\n                        // 3. We don't have a wall that's part of a stacked wall, if the stacked wall has openings.\r\n                        // Any of the cases above could mean that the internal API function would return\r\n                        // incorrect results (generally, missing openings or clippings).\r\n\r\n                        if (CanTryToCreateAsExtrusion(wallElement, exportParts, exportByComponents, exportingWallElement,\r\n                           exportingAxis, trimmedCurve, isCurtainPanel, hasCutsWallSweep))\r\n                        {\r\n                           bool isCompletelyClipped;\r\n                           bodyRep = TryToCreateAsExtrusion(exporterIFC, wallElement, exportType,\r\n                              connectedWalls, solids, meshes, baseWallElevation, catId,\r\n                              centerCurve, trimmedCurve, orientationTrf, depth, zSpan, range, setter,\r\n                              out cutPairOpenings, out isCompletelyClipped, out scaledFootprintArea, out scaledLength);\r\n                           if (isCompletelyClipped)\r\n                              return null;\r\n\r\n                           if (!IFCAnyHandleUtil.IsNullOrHasNoValue(bodyRep))\r\n                              exportedAsWallWithAxis = true;\r\n                        }\r\n\r\n                        BodyData bodyData = null;\r\n\r\n                        // If it is not a Wall object (FamilyInstance) then this part needs to run even for IFC4RV\r\n                        if (!exportedAsWallWithAxis && (!exportByComponents || !exportingWallElement))\r\n                        {\r\n                           BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n\r\n                           if (isCurtainPanel)\r\n                           {\r\n                              bodyExporterOptions.TryToExportAsExtrusion = true;\r\n                              extraParams.PossibleExtrusionAxes = IFCExtrusionAxes.TryXYZ;\r\n                           }\r\n                           else\r\n                              extraParams.PossibleExtrusionAxes = IFCExtrusionAxes.TryZ;   // only allow vertical extrusions!\r\n\r\n                           extraParams.AreInnerRegionsOpenings = true;\r\n\r\n                           // Swept solids are not natively exported as part of CV2.0.  \r\n                           // We have removed the UI toggle for this, so that it is by default false, but keep for possible future use.\r\n                           if (ExporterCacheManager.ExportOptionsCache.ExportAdvancedSweptSolids)\r\n                              bodyExporterOptions.TryToExportAsSweptSolid = true;\r\n\r\n                           ElementId overrideMaterialId = ElementId.InvalidElementId;\r\n                           if (exportingWallElement)\r\n                              overrideMaterialId = HostObjectExporter.GetFirstLayerMaterialId(wallElement);\r\n\r\n                           if (!exportParts)\r\n                           {\r\n                              if ((solids.Count > 0) || (meshes.Count > 0))\r\n                              {\r\n                                 bodyRep = BodyExporter.ExportBody(exporterIFC, element, catId, overrideMaterialId,\r\n                                     solids, meshes, bodyExporterOptions, extraParams).RepresentationHnd;\r\n                              }\r\n                              else\r\n                              {\r\n                                 List<GeometryObject> geomElemList = new() { geometryElement };\r\n                                 bodyData = BodyExporter.ExportBody(exporterIFC, element, catId, overrideMaterialId,\r\n                                     geomElemList, bodyExporterOptions, extraParams);\r\n                                 bodyRep = bodyData.RepresentationHnd;\r\n                              }\r\n\r\n                              if (IFCAnyHandleUtil.IsNullOrHasNoValue(bodyRep))\r\n                              {\r\n                                 extraParams.ClearOpenings();\r\n                                 return null;\r\n                              }\r\n                           }\r\n\r\n                           // We will be able to export as a IfcWallStandardCase as long as we have an axis curve.\r\n                           XYZ extrDirUsed = XYZ.Zero;\r\n                           if (extraParams.HasExtrusionDirection)\r\n                           {\r\n                              extrDirUsed = extraParams.ExtrusionDirection;\r\n                              if (MathUtil.IsAlmostEqual(Math.Abs(extrDirUsed[2]), 1.0))\r\n                              {\r\n                                 if ((solids.Count == 1) && (meshes.Count == 0))\r\n                                    exportedAsWallWithAxis = exportingAxis;\r\n                                 exportedBodyDirectly = true;\r\n                              }\r\n                           }\r\n                        }\r\n\r\n                        if (!exportParts)\r\n                        {\r\n                           IList<IFCAnyHandle> representations = new List<IFCAnyHandle>();\r\n                           if (exportingAxis)\r\n                              representations.AddIfNotNull(axisRep);\r\n                           //If at this step we do not have a body representation, it is possible that\r\n                           //the body representation was created during PartExporter.ExportHostPartAsShapeAspects execution.\r\n                           if (!IFCAnyHandleUtil.IsNullOrHasNoValue(bodyRep))\r\n                              representations.Add(bodyRep);\r\n                           else\r\n                              representations.AddIfNotNull(hostShapeRepFromPartsList);\r\n\r\n                           IFCAnyHandle boundingBoxRep = null;\r\n                           if ((solids.Count > 0) || (meshes.Count > 0))\r\n                              boundingBoxRep = BoundingBoxExporter.ExportBoundingBox(exporterIFC, solids, meshes, Transform.Identity);\r\n                           else\r\n                              boundingBoxRep = BoundingBoxExporter.ExportBoundingBox(exporterIFC, geometryElement, Transform.Identity);\r\n                           representations.AddIfNotNull(boundingBoxRep);\r\n\r\n                           IFCAnyHandleUtil.SetAttribute(prodRep, \"Representations\", representations);\r\n                        }\r\n\r\n                        ElementId matId = ElementId.InvalidElementId;\r\n                        string objectType = NamingUtil.GetDefaultObjectType(element);\r\n                        IFCAnyHandle wallHnd = null;\r\n\r\n                        string elemGUID = CalculateElementGUID(element);\r\n\r\n                        if (exportedAsWallWithAxis && CanExportAsWallStandardCase(wallElement, exportParts)\r\n                           && (exportType.ExportInstance == IFCEntityType.IfcWall || exportType.ExportInstance == IFCEntityType.IfcWallStandardCase))\r\n                        {\r\n                           // Make sure to use the \"Adjusted Enum Type\" here.\r\n                           wallHnd = IFCInstanceExporter.CreateWallStandardCase(file, element, elemGUID, ownerHistory,\r\n                              localPlacement, prodRep, adjustedEnumType);\r\n\r\n                           // This will override the default \"ExportType\" in the cache for this Element to be\r\n                           // (EntityInstanceType = IfcWallStandardCase, PredefinedType = adjustedEnumType).\r\n                           exportType = ExporterUtil.GetProductExportType(element, out ifcEnumType, new WallExporterWallStandardCaseOverrideHelper(adjustedEnumType));\r\n                        }\r\n                        else\r\n                        {\r\n                           wallHnd = IFCInstanceExporter.CreateGenericIFCEntity(exportType, file, element, elemGUID, ownerHistory,\r\n                            localPlacement, exportParts ? null : prodRep);\r\n                        }\r\n\r\n                        if (exportParts && !exportByComponents)\r\n                        {\r\n                           PartExporter.ExportHostPart(exporterIFC, element, wallHnd, setter, localPlacement, overrideLevelId, setMaterialNameToPartName);\r\n                        }\r\n                        else if (exportByComponents)\r\n                        {\r\n                           // We can only associate the openings with the wall after the wall handle has been created.\r\n                           Transform offsetTransform = (bodyData != null) ? bodyData.OffsetTransform : Transform.Identity;\r\n                           OpeningUtil.CreateOpeningsIfNecessary(wallHnd, element, partECData, offsetTransform, exporterIFC, localPlacement, setter, localWrapper);\r\n                        }\r\n\r\n                        localWrapper.AddElement(element, wallHnd, setter, extraParams, true, exportType);\r\n\r\n                        // This code was refactored because there was a lot of duplication\r\n                        // between the exportedAsWallWithAxis and !exportedAsWallWithAxis\r\n                        // branches.  More concerning is the parts that aren't duplicated,\r\n                        // and these need to be examined later.\r\n                        if (exportedAsWallWithAxis)\r\n                        {\r\n                           if (!exportParts)\r\n                           {\r\n                              OpeningUtil.CreateOpeningsIfNecessary(wallHnd, element, cutPairOpenings, null,\r\n                                  exporterIFC, localPlacement, setter, localWrapper);\r\n                              if (exportedBodyDirectly)\r\n                              {\r\n                                 Transform offsetTransform = (bodyData != null) ? bodyData.OffsetTransform : Transform.Identity;\r\n                                 OpeningUtil.CreateOpeningsIfNecessary(wallHnd, element, extraParams, offsetTransform,\r\n                                     exporterIFC, localPlacement, setter, localWrapper);\r\n                              }\r\n                              else\r\n                              {\r\n                                 double scaledWidth = UnitUtil.ScaleLength(wallElement.Width);\r\n                                 OpeningUtil.AddOpeningsToElement(exporterIFC, wallHnd, wallElement, null, scaledWidth, range, setter, localPlacement, localWrapper);\r\n                              }\r\n                           }\r\n\r\n                           // export Base Quantities\r\n                           if (ExporterCacheManager.ExportIFCBaseQuantities() && exportType.ExportType == IFCEntityType.IfcWallType)\r\n                           {\r\n                              scaledFootprintArea = MathUtil.AreaIsAlmostZero(scaledFootprintArea) ? extraParams.ScaledArea : scaledFootprintArea;\r\n                              scaledLength = MathUtil.IsAlmostZero(scaledLength) ? extraParams.ScaledLength : scaledLength;\r\n                              if (exportByComponents && layersetInfo != null)\r\n                              {\r\n                                 PropertyUtil.CreateWallBaseQuantities(exporterIFC, wallElement, solids, meshes, wallHnd, scaledLength, depth,\r\n                                    scaledFootprintArea, extraParams, layersetInfo.LayerQuantityWidthHnd);\r\n                              }\r\n                              else\r\n                              {\r\n                                 PropertyUtil.CreateWallBaseQuantities(exporterIFC, wallElement, solids, meshes, wallHnd, scaledLength, depth, scaledFootprintArea, extraParams);\r\n                              }\r\n                           }\r\n                        }\r\n                        else\r\n                        {\r\n                           if (!exportParts)\r\n                           {\r\n                              // Only export one material for 2x2; for future versions, export the\r\n                              // whole list.\r\n                              // We will associate the material id with the type later.\r\n                              if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 || !exportingHostObject)\r\n                              {\r\n                                 matId = BodyExporter.GetBestMaterialIdFromGeometryOrParameter(solids, meshes, element);\r\n                              }\r\n\r\n                              if (exportingInplaceOpenings)\r\n                              {\r\n                                 OpeningUtil.AddOpeningsToElement(exporterIFC, wallHnd, element, null, 0.0, range, setter, localPlacement, localWrapper);\r\n                              }\r\n\r\n                              if (exportedBodyDirectly)\r\n                              {\r\n                                 Transform offsetTransform = (bodyData != null) ? bodyData.OffsetTransform : Transform.Identity;\r\n                                 OpeningUtil.CreateOpeningsIfNecessary(wallHnd, element, extraParams, offsetTransform,\r\n                                     exporterIFC, localPlacement, setter, localWrapper);\r\n                              }\r\n                           }\r\n\r\n                           // export Base Quantities if it is IFC4RV and the extrusion information is available\r\n                           if (exportByComponents && ExporterCacheManager.ExportIFCBaseQuantities())\r\n                           {\r\n                              scaledFootprintArea = MathUtil.AreaIsAlmostZero(scaledFootprintArea) ? extraParams.ScaledArea : scaledFootprintArea;\r\n                              scaledLength = MathUtil.IsAlmostZero(scaledLength) ? extraParams.ScaledLength : scaledLength;\r\n                              if (layersetInfo != null)\r\n                              {\r\n                                 PropertyUtil.CreateWallBaseQuantities(exporterIFC, wallElement, solids, meshes, wallHnd, scaledLength, depth,\r\n                                    scaledFootprintArea, extraParams, layersetInfo.LayerQuantityWidthHnd);\r\n                              }\r\n                              else\r\n                              {\r\n                                 PropertyUtil.CreateWallBaseQuantities(exporterIFC, wallElement, solids, meshes, wallHnd, scaledLength, depth, scaledFootprintArea, extraParams);\r\n                              }\r\n                           }\r\n                        }\r\n\r\n                        ElementId wallLevelId = (validRange) ? setter.LevelId : ElementId.InvalidElementId;\r\n\r\n                        if (!exportParts && exportingHostObject)\r\n                        {\r\n                           HostObject hostObject = element as HostObject;\r\n                           if (!ExporterCacheManager.ExportOptionsCache.ExportAs2x2 || exportedAsWallWithAxis)\r\n                              HostObjectExporter.ExportHostObjectMaterials(exporterIFC, hostObject, localWrapper.GetAnElement(),\r\n                                  geometryElement, localWrapper, wallLevelId, Toolkit.IFCLayerSetDirection.Axis2, !exportedAsWallWithAxis, null, layersetInfo);\r\n                        }\r\n\r\n                        ExportGenericType(exporterIFC, localWrapper, wallHnd, element, matId, adjustedEnumType);\r\n\r\n                        SpaceBoundingElementUtil.RegisterSpaceBoundingElementHandle(exporterIFC, wallHnd, element.Id, wallLevelId);\r\n\r\n                        tr.Commit();\r\n                        return wallHnd;\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports element as Wall.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"connectedWalls\">Information about walls joined to this wall.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportWall(ExporterIFC exporterIFC, string ifcEnumType, Element element, IList<IList<IFCConnectedWallData>> connectedWalls, ref GeometryElement geometryElement,\r\n         ProductWrapper productWrapper)\r\n      {\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         IFCEntityType elementClassTypeEnum = IFCEntityType.IfcWall;\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n            return;\r\n\r\n         IList<IFCAnyHandle> createdWalls = new List<IFCAnyHandle>();\r\n\r\n         // We will not split walls and columns if the assemblyId is set, as we would like to keep the original wall\r\n         // associated with the assembly, on the level of the assembly.\r\n         bool splitWall = ExporterCacheManager.ExportOptionsCache.WallAndColumnSplitting && !ExporterUtil.IsContainedInAssembly(element);\r\n         if (splitWall)\r\n         {\r\n            IList<ElementId> levels = new List<ElementId>();\r\n            IList<IFCRange> ranges = new List<IFCRange>();\r\n            if (element is Wall && geometryElement != null)\r\n            {\r\n               IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcWall, ifcEnumType);\r\n               LevelUtil.CreateSplitLevelRangesForElement(exportInfo, element, out levels, out ranges);\r\n            }\r\n\r\n            int numPartsToExport = ranges.Count;\r\n            if (numPartsToExport == 0)\r\n            {\r\n               createdWalls.AddIfNotNull(ExportWallBase(exporterIFC, ifcEnumType, element, \r\n                  connectedWalls, ref geometryElement, productWrapper, \r\n                  ElementId.InvalidElementId, null));\r\n            }\r\n            else\r\n            {\r\n               using (ExporterStateManager.RangeIndexSetter rangeSetter = new ExporterStateManager.RangeIndexSetter())\r\n               {\r\n                  for (int ii = 0; ii < numPartsToExport; ii++)\r\n                  {\r\n                     rangeSetter.IncreaseRangeIndex();\r\n                     createdWalls.AddIfNotNull(ExportWallBase(exporterIFC, ifcEnumType, \r\n                        element, connectedWalls, ref geometryElement, productWrapper, \r\n                        levels[ii], ranges[ii]));\r\n                  }\r\n               }\r\n            }\r\n\r\n            if (ExporterCacheManager.DummyHostCache.HasRegistered(element.Id))\r\n            {\r\n               using (ExporterStateManager.RangeIndexSetter rangeSetter = new ExporterStateManager.RangeIndexSetter())\r\n               {\r\n                  List<KeyValuePair<ElementId, IFCRange>> levelRangeList = ExporterCacheManager.DummyHostCache.Find(element.Id);\r\n                  foreach (KeyValuePair<ElementId, IFCRange> levelRange in levelRangeList)\r\n                  {\r\n                     rangeSetter.IncreaseRangeIndex();\r\n                     createdWalls.AddIfNotNull(ExportDummyWall(exporterIFC, element, \r\n                        geometryElement, productWrapper, levelRange.Key, levelRange.Value));\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         if (createdWalls.Count == 0)\r\n            ExportWallBase(exporterIFC, ifcEnumType, element, connectedWalls, ref geometryElement, productWrapper, ElementId.InvalidElementId, null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports Walls.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"wallElement\">The wall element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void Export(ExporterIFC exporterIFC, Wall wallElement, ref GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         // Don't export a wall if it is a panel of a curtain wall.  Note that this takes advantage of incorrect API functionality, so\r\n         // will need to be fixed when it is.\r\n         ElementId containerId = wallElement.StackedWallOwnerId;\r\n         if (containerId != ElementId.InvalidElementId)\r\n         {\r\n            Element container = wallElement.Document.GetElement(containerId);\r\n            if (container != null)\r\n            {\r\n               // We originally skipped exporting the wall only if the containing curtain wall was also exported.\r\n               // However, if the container isn't being exported, the panel shouldn't be either.\r\n               if ((container is Wall) && ((container as Wall).CurtainGrid != null))\r\n               {\r\n                  return;\r\n               }\r\n            }\r\n         }\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            WallType wallType = wallElement.WallType;\r\n            WallKind wallTypeKind = wallType.Kind;\r\n\r\n            // We skip over the \"stacked wall\" but the invidual walls inside that stacked wall will still be exported.  \r\n            if (wallTypeKind == WallKind.Stacked)\r\n            {\r\n               return;\r\n            }\r\n\r\n            IList<IList<IFCConnectedWallData>> connectedWalls = new List<IList<IFCConnectedWallData>>\r\n            {\r\n               ExporterIFCUtils.GetConnectedWalls(wallElement, IFCConnectedWallDataLocation.Start),\r\n               ExporterIFCUtils.GetConnectedWalls(wallElement, IFCConnectedWallDataLocation.End)\r\n            };\r\n\r\n            if (CurtainSystemExporter.IsCurtainSystem(wallElement))\r\n            {\r\n               CurtainSystemExporter.ExportWall(exporterIFC, wallElement, productWrapper);\r\n            }\r\n            else\r\n            {\r\n               // ExportWall may decide to export as an IfcFooting for some retaining and foundation walls.\r\n               ExportWall(exporterIFC, null, wallElement, connectedWalls, ref geometryElement, productWrapper);\r\n            }\r\n\r\n            // create join information.\r\n            ElementId id = wallElement.Id;\r\n\r\n            for (int ii = 0; ii < 2; ii++)\r\n            {\r\n               int count = connectedWalls[ii].Count;\r\n               IFCConnectedWallDataLocation currConnection = (ii == 0) ? IFCConnectedWallDataLocation.Start : IFCConnectedWallDataLocation.End;\r\n               for (int jj = 0; jj < count; jj++)\r\n               {\r\n                  ElementId otherId = connectedWalls[ii][jj].ElementId;\r\n                  IFCConnectedWallDataLocation joinedEnd = connectedWalls[ii][jj].Location;\r\n\r\n                  if ((otherId == id) && (joinedEnd == currConnection))  //self-reference\r\n                     continue;\r\n\r\n                  ExporterCacheManager.WallConnectionDataCache.Add(new WallConnectionData(id, otherId, GetIFCConnectionTypeFromLocation(currConnection),\r\n                      GetIFCConnectionTypeFromLocation(joinedEnd), null));\r\n               }\r\n            }\r\n\r\n            // look for connected columns.  Note that this is only for columns that interrupt the wall path.\r\n            IList<FamilyInstance> attachedColumns = ExporterIFCUtils.GetAttachedColumns(wallElement);\r\n            int numAttachedColumns = attachedColumns.Count;\r\n            for (int ii = 0; ii < numAttachedColumns; ii++)\r\n            {\r\n               ElementId otherId = attachedColumns[ii].Id;\r\n\r\n               IFCConnectionType connect1 = IFCConnectionType.NotDefined;   // can't determine at the moment.\r\n               IFCConnectionType connect2 = IFCConnectionType.NotDefined;   // meaningless for column\r\n\r\n               ExporterCacheManager.WallConnectionDataCache.Add(new WallConnectionData(id, otherId, connect1, connect2, null));\r\n            }\r\n\r\n            tr.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export the dummy wall to host an orphan part. It usually happens in the cases of associated parts are higher than split sub-wall.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The wall element.</param>\r\n      /// <param name=\"geometryElement\">The geometry of wall.</param>\r\n      /// <param name=\"origWrapper\">The ProductWrapper.</param>\r\n      /// <param name=\"overrideLevelId\">The ElementId that will crate the dummy wall.</param>\r\n      /// <param name=\"range\">The IFCRange corresponding to the dummy wall.</param>\r\n      /// <returns>The handle of dummy wall.</returns>\r\n      public static IFCAnyHandle ExportDummyWall(ExporterIFC exporterIFC, Element element, GeometryElement geometryElement,\r\n         ProductWrapper origWrapper, ElementId overrideLevelId, IFCRange range)\r\n      {\r\n         using (ProductWrapper localWrapper = ProductWrapper.Create(origWrapper))\r\n         {\r\n            ElementId catId = CategoryUtil.GetSafeCategoryId(element);\r\n\r\n            Wall wallElement = element as Wall;\r\n            if (wallElement == null)\r\n               return null;\r\n\r\n            if (IsWallCompletelyClipped(wallElement, exporterIFC, range))\r\n               return null;\r\n\r\n            // get global values.\r\n            Document doc = element.Document;\r\n\r\n            IFCFile file = exporterIFC.GetFile();\r\n            IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n            bool validRange = range != null && !MathUtil.IsAlmostZero(range.Start - range.End);\r\n\r\n            bool exportParts = PartExporter.CanExportParts(wallElement);\r\n            if (exportParts && !PartExporter.CanExportElementInPartExport(wallElement, validRange ? overrideLevelId : wallElement.LevelId, validRange))\r\n               return null;\r\n\r\n            string objectType = NamingUtil.GetDefaultObjectType(element);\r\n            IFCAnyHandle wallHnd = null;\r\n\r\n            string elemGUID = null;\r\n            int subElementIndex = ExporterStateManager.GetCurrentRangeIndex();\r\n            if (subElementIndex == 0)\r\n               elemGUID = GUIDUtil.CreateGUID(element);\r\n            else if (subElementIndex <= ExporterStateManager.RangeIndexSetter.GetMaxStableGUIDs())\r\n               elemGUID = GUIDUtil.CreateSubElementGUID(element, subElementIndex + (int)IFCGenericSubElements.SplitInstanceStart - 1);\r\n            else\r\n               elemGUID = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(element, subElementIndex.ToString()));\r\n\r\n            Transform orientationTrf = Transform.Identity;\r\n\r\n            // Check for containment override\r\n            IFCAnyHandle overrideContainerHnd = null;\r\n            if (overrideLevelId == null || overrideLevelId == ElementId.InvalidElementId)\r\n            {\r\n               ElementId overrideContainerId = ParameterUtil.OverrideContainmentParameter(element, out overrideContainerHnd);\r\n               if (overrideContainerId != ElementId.InvalidElementId)\r\n               {\r\n                  overrideLevelId = overrideContainerId;\r\n               }\r\n            }\r\n\r\n            using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, element, null, orientationTrf, overrideLevelId, overrideContainerHnd))\r\n            {\r\n               IFCAnyHandle localPlacement = setter.LocalPlacement;\r\n               string predefType = \"NOTDEFINED\";\r\n               wallHnd = IFCInstanceExporter.CreateWall(exporterIFC, element, elemGUID, ownerHistory,\r\n                   localPlacement, null, predefType);\r\n               IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcWall, predefType);\r\n\r\n               if (exportParts)\r\n                  PartExporter.ExportHostPart(exporterIFC, element, wallHnd, setter, localPlacement, overrideLevelId);\r\n\r\n               IFCExportBodyParams extraParams = new IFCExportBodyParams();\r\n               extraParams.PossibleExtrusionAxes = IFCExtrusionAxes.TryZ;   // only allow vertical extrusions!\r\n               extraParams.AreInnerRegionsOpenings = true;\r\n               localWrapper.AddElement(element, wallHnd, setter, extraParams, true, exportInfo);\r\n\r\n               ElementId wallLevelId = validRange ? setter.LevelId : ElementId.InvalidElementId;\r\n               SpaceBoundingElementUtil.RegisterSpaceBoundingElementHandle(exporterIFC, wallHnd, element.Id, wallLevelId);\r\n            }\r\n\r\n            return wallHnd;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports wall types.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"wrapper\">The ProductWrapper class.</param>\r\n      /// <param name=\"elementHandle\">The element handle.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"overrideMaterialId\">The material id used for the element type.</param>\r\n      public static void ExportGenericType(ExporterIFC exporterIFC, ProductWrapper wrapper, \r\n         IFCAnyHandle elementHandle, Element element, ElementId overrideMaterialId, string ifcTypeEnum)\r\n      {\r\n         if (elementHandle == null || element == null)\r\n            return;\r\n\r\n         Document doc = element.Document;\r\n         ElementId typeElemId = element.GetTypeId();\r\n         ElementType elementType = doc.GetElement(typeElemId) as ElementType;\r\n         if (elementType == null)\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(element, out _, new WallExporterPredefinedTypeSetterOverrideHelper(ifcTypeEnum));\r\n\r\n         IFCAnyHandle wallType = ExporterCacheManager.ElementTypeToHandleCache.Find(elementType, exportType);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(wallType))\r\n         {\r\n            ExporterCacheManager.TypeRelationsCache.Add(wallType, elementHandle);\r\n            return;\r\n         }\r\n\r\n         string guid = GUIDUtil.GenerateIFCGuidFrom(elementType, exportType);\r\n         wallType = FamilyExporterUtil.ExportGenericType(file, exportType, null, null, element, elementType, guid);\r\n\r\n         wrapper.RegisterHandleWithElementType(elementType, exportType, wallType, null);\r\n\r\n         if (overrideMaterialId != ElementId.InvalidElementId)\r\n         {\r\n            CategoryUtil.CreateMaterialAssociation(exporterIFC, wallType, overrideMaterialId);\r\n         }\r\n         else\r\n         {\r\n            // try to get material set from the cache\r\n            IFCAnyHandle materialLayerSet = ExporterCacheManager.MaterialSetCache.FindLayerSet(typeElemId);\r\n            if (materialLayerSet != null && wallType != null)\r\n               ExporterCacheManager.MaterialRelationsCache.Add(materialLayerSet, wallType);\r\n         }\r\n\r\n         ExporterCacheManager.TypeRelationsCache.Add(wallType, elementHandle);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the wall is clipped completely.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"wallElement\">\r\n      /// The wall element.\r\n      /// </param>\r\n      /// <param name=\"range\">\r\n      /// The range of which may clip the wall.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the wall is clipped completely, false otherwise.\r\n      /// </returns>\r\n      static bool IsWallCompletelyClipped(Wall wallElement, ExporterIFC exporterIFC, IFCRange range)\r\n      {\r\n         return ExporterIFCUtils.IsWallCompletelyClipped(wallElement, exporterIFC, range);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets wall axis.\r\n      /// </summary>\r\n      /// <param name=\"wallElement\">\r\n      /// The wall element.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The curve.\r\n      /// </returns>\r\n      static public Curve GetWallAxis(Wall wallElement)\r\n      {\r\n         if (wallElement == null)\r\n            return null;\r\n         LocationCurve locationCurve = wallElement.Location as LocationCurve;\r\n         return locationCurve.Curve;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets wall axis at base height.\r\n      /// </summary>\r\n      /// <param name=\"wallElement\">\r\n      /// The wall element.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The curve.\r\n      /// </returns>\r\n      static Curve GetWallAxisAtBaseHeight(Wall wallElement)\r\n      {\r\n         LocationCurve locationCurve = wallElement.Location as LocationCurve;\r\n         Curve nonBaseCurve = locationCurve.Curve;\r\n\r\n         double baseOffset = ExporterIFCUtils.GetWallBaseOffset(wallElement);\r\n\r\n         Transform trf = Transform.CreateTranslation(new XYZ(0, 0, baseOffset));\r\n\r\n         return nonBaseCurve.CreateTransformed(trf);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets wall trimmed curve.\r\n      /// </summary>\r\n      /// <param name=\"wallElement\">\r\n      /// The wall element.\r\n      /// </param>\r\n      /// <param name=\"baseCurve\">\r\n      /// The base curve.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The curve.\r\n      /// </returns>\r\n      static Curve GetWallTrimmedCurve(Wall wallElement, Curve baseCurve)\r\n      {\r\n         Curve result = ExporterIFCUtils.GetWallTrimmedCurve(wallElement);\r\n         if (result == null)\r\n            return baseCurve;\r\n\r\n         return result;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the wall has a sketched elevation profile.\r\n      /// </summary>\r\n      /// <param name=\"wallElement\">\r\n      /// The wall element.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the wall has a sketch elevation profile, false otherwise.\r\n      /// </returns>\r\n      static bool HasElevationProfile(Wall wallElement)\r\n      {\r\n         return ExporterIFCUtils.HasElevationProfile(wallElement);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Obtains the curve loops which bound the wall's elevation profile.\r\n      /// </summary>\r\n      /// <param name=\"wallElement\">\r\n      /// The wall element.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The collection of curve loops.\r\n      /// </returns>\r\n      static IList<CurveLoop> GetElevationProfile(Wall wallElement)\r\n      {\r\n         return ExporterIFCUtils.GetElevationProfile(wallElement);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the base geometry of the wall can be represented as an extrusion.\r\n      /// </summary>\r\n      /// <param name=\"element\">\r\n      /// The wall element.\r\n      /// </param>\r\n      /// <param name=\"range\">\r\n      /// The range. This consists of two double values representing the height in Z at the start and the end\r\n      /// of the range.  If the values are identical the entire wall is used.\r\n      /// </param>\r\n      /// <param name=\"curve\">\r\n      /// The wall's base curve.\r\n      /// <returns>\r\n      /// True if the wall export can be made in the form of an extrusion, false if the\r\n      /// geometry cannot be assigned to an extrusion.\r\n      /// </returns>\r\n      static bool CanExportWallGeometryAsExtrusion(Element element, IFCRange range, Curve curve)\r\n      {\r\n         return ExporterIFCUtils.CanExportWallGeometryAsExtrusion(element, range, curve);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Obtains a special snapshot of the geometry of an in-place wall element suitable for export.\r\n      /// </summary>\r\n      /// <param name=\"famInstWallElem\">\r\n      /// The in-place wall instance.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The in-place wall geometry.\r\n      /// </returns>\r\n      static GeometryElement GetGeometryFromInplaceWall(FamilyInstance famInstWallElem)\r\n      {\r\n         return ExporterIFCUtils.GetGeometryFromInplaceWall(famInstWallElem);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the vertical extrusion direction for a wall, if there is one such direction.\r\n      /// </summary>\r\n      /// <param name=\"wallElement\">The wall.</param>\r\n      /// <returns>The vertical extrusion direction of the wall, \r\n      /// or null if it can't be extruded vertically.</returns>\r\n      /// <remarks>\r\n      /// 1. This will return null if we have a slanted wall with a non-linear.\r\n      /// 2. We assume the path curve is horizontal.\r\n      /// 3. By \"vertical\", we mean that the base wall geometry could be represented\r\n      /// by a extrusion of its footprint.  For vertical walls, we expect this direction\r\n      /// to be (0,0,1).  For slanted walls, this would have a positive Z component.\r\n      /// </remarks>\r\n      public static XYZ GetWallExtrusionDirection(Wall wallElement)\r\n      {\r\n         double? optWallSlantedAngle = ExporterCacheManager.WallCrossSectionCache.GetUniformSlantAngle(wallElement);\r\n         if (optWallSlantedAngle == null)\r\n            return null;\r\n\r\n         double slantAngle = optWallSlantedAngle.Value;\r\n         if (MathUtil.IsAlmostZero(slantAngle))\r\n            return XYZ.BasisZ;\r\n\r\n         // Wall is definitely slanted; check if it has an extrusion direction.\r\n         Line pathCurve = GetWallAxis(wallElement) as Line;\r\n         if (pathCurve == null)\r\n            return null;\r\n\r\n         XYZ referenceDirection = pathCurve.Direction;\r\n         if (referenceDirection == null)\r\n            return null;\r\n\r\n         // First, rotate Z direction based on slantAngle around the X axis,\r\n         // Then based on refDirection around the Z axis.\r\n\r\n         // The slant direction vector is a unit vector perpendicular to referenceDirection\r\n         // and making an angle \"slantAngle\" with respect to the vertical direction. For a \r\n         // positive angle, it slants toward the right as seen by an upright observer looking\r\n         // along the path curve's direction; for a negative angle, it slants toward the left.\r\n         double yRot = Math.Sin(slantAngle);\r\n         return new XYZ(yRot * referenceDirection.Y,\r\n            -yRot * referenceDirection.X,\r\n            Math.Cos(slantAngle));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the wall's base can be represented by a direct thickening of the wall's base curve.\r\n      /// </summary>\r\n      /// <param name=\"wallElement\">The wall.</param>\r\n      /// <param name=\"curve\">The wall's base curve.</param>\r\n      /// <returns>\r\n      /// True if the wall's base can be represented by a direct thickening of the wall's base curve.\r\n      /// False is the wall's base shape is affected by other geometry, and thus cannot be represented\r\n      /// by a direct thickening of the wall's base cure.\r\n      /// </returns>\r\n      static bool IsWallBaseRectangular(Wall wallElement, Curve curve)\r\n      {\r\n         return ExporterIFCUtils.IsWallBaseRectangular(wallElement, curve);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the wall is connected to another non-vertical wall.\r\n      /// </summary>\r\n      /// <param name=\"connectedWalls\">Information about walls joined to this wall.</param>\r\n      /// <param name=\"wallElement\">The wall.</param>\r\n      /// <returns>True if there is at least one non-vertical wall among the <paramref name=\"connectedWalls\"/> \r\n      /// that are connected to <paramref name=\"wallElement\"/>. Otherwise return false.</returns>\r\n      static bool IsConnectedWithNonVerticalWall(IList<IList<IFCConnectedWallData>> connectedWalls, Wall wallElement)\r\n      {\r\n         if (connectedWalls == null)\r\n            return false;\r\n\r\n         foreach (var connectedWallsList in connectedWalls)\r\n         {\r\n            foreach (var wall in connectedWallsList)\r\n            {\r\n               if (wall.ElementId == wallElement.Id)\r\n                  continue;\r\n\r\n               Wall connectedWall = ExporterCacheManager.Document.GetElement(wall.ElementId) as Wall;\r\n               if (connectedWall.CrossSection != WallCrossSection.Vertical)\r\n                  return true;\r\n            }\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if any of the wall openings intersect with the floor clippings.\r\n      /// </summary>\r\n      /// <param name=\"wallElement\">The wall element.</param>\r\n      /// <param name=\"openingDataList\">The wall openings data.</param>\r\n      /// <returns>Returns true if any of wall openings intersect with floor clippings</returns>\r\n      static bool OpeningsIntersectClippings(Wall wallElement, IList<IFCOpeningData> openingDataList)\r\n      {\r\n         Document doc = wallElement.Document;\r\n         ICollection<ElementId> joinedElements = JoinGeometryUtils.GetJoinedElements(doc, wallElement);\r\n\r\n         foreach (IFCOpeningData openingData in openingDataList)\r\n         {\r\n            ElementId openingId = openingData.OpeningElementId;\r\n            Element openingElement = doc.GetElement(openingId);\r\n            if (openingElement == null)\r\n               continue;\r\n\r\n            GeometryElement openingGeometry = openingElement.get_Geometry(new Options());\r\n            if (openingGeometry == null)\r\n               continue;\r\n\r\n            BoundingBoxXYZ openingElementBoundingBox = openingElement.get_BoundingBox(null);\r\n\r\n            SolidMeshGeometryInfo openingSolidMeshInfo = GeometryUtil.GetSplitSolidMeshGeometry(openingGeometry);\r\n            foreach (ElementId joinedElementId in joinedElements)\r\n            {\r\n               Element joinedElement = doc.GetElement(joinedElementId);\r\n               if (joinedElement == null || !(joinedElement is Floor))\r\n                  continue;\r\n\r\n               //Checking bounding boxes first to avoid unnecessary geometry calculations.\r\n               //If bounding boxes don't overlap, we can skip the further looking for intersections.\r\n               BoundingBoxXYZ joinedElementBoundingBox = joinedElement.get_BoundingBox(null);\r\n               if(!GeometryUtil.BoundingBoxesOverlap(openingElementBoundingBox, joinedElementBoundingBox))\r\n                  continue;\r\n\r\n               GeometryElement joinedElementGeometry = joinedElement.get_Geometry(new Options());\r\n               if (joinedElementGeometry == null)\r\n                  continue;\r\n\r\n               SolidMeshGeometryInfo joinedElementSolidMeshInfo = GeometryUtil.GetSplitSolidMeshGeometry(joinedElementGeometry);\r\n               foreach (SolidInfo openingSolidInfo in openingSolidMeshInfo.SolidInfoList)\r\n               {\r\n                  foreach (SolidInfo joinedElementSolidInfo in joinedElementSolidMeshInfo.SolidInfoList)\r\n                  {\r\n                     try\r\n                     {\r\n                        BooleanOperationsUtils.ExecuteBooleanOperationModifyingOriginalSolid(openingSolidInfo.Solid,\r\n                                                                         joinedElementSolidInfo.Solid, BooleanOperationsType.Intersect);\r\n                     }\r\n                     catch\r\n                     {\r\n                        continue;\r\n                     }\r\n\r\n                     return true;\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the curve loop(s) that represent the bottom or top face of the wall.\r\n      /// </summary>\r\n      /// <param name=\"wallElement\">\r\n      /// The wall.\r\n      /// </param>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The exporter.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The curve loops.\r\n      /// </returns>\r\n      static IList<CurveLoop> GetLoopsFromTopBottomFace(Wall wallElement, ExporterIFC exporterIFC)\r\n      {\r\n         return ExporterIFCUtils.GetLoopsFromTopBottomFace(exporterIFC, wallElement);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes the geometry of the wall to create an extruded area solid representing the geometry of the wall (including\r\n      /// any clippings imposed by neighboring elements).\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The exporter.\r\n      /// </param>\r\n      /// <param name=\"wallElement\">\r\n      /// The wall.\r\n      /// </param>\r\n      /// <param name=\"setterOffset\">\r\n      /// The offset from the placement setter.\r\n      /// </param>\r\n      /// <param name=\"range\">\r\n      /// The range.  This consists of two double values representing the height in Z at the start and the end\r\n      /// of the range.  If the values are identical the entire wall is used.\r\n      /// </param>\r\n      /// <param name=\"zSpan\">\r\n      /// The overall span in Z of the wall.\r\n      /// </param>\r\n      /// <param name=\"baseBodyItemHnd\">\r\n      /// The IfcExtrudedAreaSolid handle generated initially for the wall.\r\n      /// </param>\r\n      /// <param name=\"cutPairOpenings\">\r\n      /// A collection of extruded openings that can be derived from the wall geometry.\r\n      /// </param>\r\n      /// <returns>\r\n      /// IfcEtxtrudedAreaSolid handle.  This may be the same handle as was input, or a modified handle derived from the clipping\r\n      /// geometry.  If the function fails this handle will have no value.\r\n      /// </returns>\r\n      static IFCAnyHandle AddClippingsToBaseExtrusion(ExporterIFC exporterIFC, Wall wallElement,\r\n         XYZ setterOffset, IFCRange range, IFCRange zSpan, IFCAnyHandle baseBodyItemHnd, out IList<IFCExtrusionData> cutPairOpenings)\r\n      {\r\n         return ExporterIFCUtils.AddClippingsToBaseExtrusion(exporterIFC, wallElement, setterOffset, range, zSpan, baseBodyItemHnd, out cutPairOpenings);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets IFCConnectionType from IFCConnectedWallDataLocation.\r\n      /// </summary>\r\n      /// <param name=\"location\">The IFCConnectedWallDataLocation.</param>\r\n      /// <returns>The IFCConnectionType.</returns>\r\n      static IFCConnectionType GetIFCConnectionTypeFromLocation(IFCConnectedWallDataLocation location)\r\n      {\r\n         switch (location)\r\n         {\r\n            case IFCConnectedWallDataLocation.Start:\r\n               return IFCConnectionType.AtStart;\r\n            case IFCConnectedWallDataLocation.End:\r\n               return IFCConnectionType.AtEnd;\r\n            case IFCConnectedWallDataLocation.Path:\r\n               return IFCConnectionType.AtPath;\r\n            case IFCConnectedWallDataLocation.NotDefined:\r\n               return IFCConnectionType.NotDefined;\r\n            default:\r\n               throw new ArgumentException(\"Invalid IFCConnectedWallDataLocation\", \"location\");\r\n         }\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/WallSweepExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export a wall sweep.\r\n   /// </summary>\r\n   class WallSweepExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports a wall sweep.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"wallSweep\">The WallSweep.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void Export(ExporterIFC exporterIFC, WallSweep wallSweep, GeometryElement geometryElement, ProductWrapper productWrapper)\r\n      {\r\n         WallSweepInfo wallSweepInfo = wallSweep.GetWallSweepInfo();\r\n         //Reveals are exported as openings with wall exporter.\r\n         if (wallSweepInfo.WallSweepType == WallSweepType.Reveal)\r\n            return;\r\n\r\n         if (!GenericElementExporter.ExportElement(exporterIFC, wallSweep, geometryElement, productWrapper))\r\n            return;\r\n\r\n         HostObjectExporter.ExportHostObjectMaterials(exporterIFC, wallSweep, productWrapper.GetAnElement(),\r\n            geometryElement, productWrapper,\r\n            ElementId.InvalidElementId, Toolkit.IFCLayerSetDirection.Axis2, null, null);\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/ZoneExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.Analysis;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Mechanical;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export a Revit element as IfcZone.\r\n   /// </summary>\r\n   class ZoneExporter\r\n   {\r\n      /// <summary>\r\n      /// Exports an element as a zone.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper.</param>\r\n      public static void ExportZone(ExporterIFC exporterIFC, GenericZone element,\r\n          ProductWrapper productWrapper)\r\n      {\r\n         if (element == null)\r\n            return;\r\n\r\n         // Check the intended IFC entity or type name is in the exclude list specified in the UI\r\n         Common.Enums.IFCEntityType elementClassTypeEnum = Common.Enums.IFCEntityType.IfcZone;\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(elementClassTypeEnum))\r\n            return;\r\n\r\n         HashSet<IFCAnyHandle> spaceHnds = new HashSet<IFCAnyHandle>();\r\n\r\n         foreach (ElementId spaceId in element.GetSpaceIds())\r\n         {\r\n            IFCAnyHandle spaceHnd = ExporterCacheManager.SpaceInfoCache.FindSpaceHandle(spaceId);\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(spaceHnd))\r\n               spaceHnds.Add(spaceHnd);\r\n         }\r\n\r\n         if (spaceHnds.Count == 0)\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         using (IFCTransaction tr = new IFCTransaction(file))\r\n         {\r\n            string guid = GUIDUtil.CreateGUID(element);\r\n            IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n            string name = NamingUtil.GetNameOverride(element, NamingUtil.GetIFCName(element));\r\n            string description = NamingUtil.GetDescriptionOverride(element, null);\r\n            string objectType = NamingUtil.GetDefaultObjectType(element);\r\n            string longName = NamingUtil.GetLongNameOverride(element, null);\r\n\r\n            IFCAnyHandle zoneHnd = IFCInstanceExporter.CreateZone(file, guid, ownerHistory, name, description, objectType, longName);\r\n            IFCExportInfoPair exportInfo = new IFCExportInfoPair(elementClassTypeEnum);\r\n\r\n            productWrapper.AddElement(element, zoneHnd, exportInfo);\r\n\r\n            string relAssignsGuid = GUIDUtil.CreateSubElementGUID(element, (int)IFCZoneSubElements.RelAssignsToGroup);\r\n            IFCInstanceExporter.CreateRelAssignsToGroup(file, relAssignsGuid, ownerHistory, null, null, spaceHnds, null, zoneHnd);\r\n\r\n            tr.Commit();\r\n            return;\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Exporter/ZoneInfo.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Utility;\r\nusing static Revit.IFC.Export.Utility.ParameterUtil;\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// A label associated with a zone property.\r\n   /// </summary>\r\n   public enum ZoneInfoLabel\r\n   {\r\n      Name,\r\n      ObjectType,\r\n      Description,\r\n      LongName,\r\n      ClassificationCode,\r\n      GroupName\r\n   }\r\n\r\n   /// <summary>\r\n   /// Class to assist in finding property values associated with zones.\r\n   /// </summary>\r\n   public class ZoneInfoFinder\r\n   {\r\n      const int MaxIterations = 1000;\r\n\r\n      /// <summary>\r\n      /// The list of base zone parameter names we are looking for.\r\n      /// </summary>\r\n      static IDictionary<ZoneInfoLabel, string> BasePropZoneLabels = null;\r\n\r\n      public IDictionary<ZoneInfoLabel, string> CurrentPropZoneLabels { get; protected set; } = null;\r\n\r\n      public IDictionary<ZoneInfoLabel, string> CurrentPropZoneValues { get; protected set; } = null;\r\n\r\n      void InitBasePropZoneLabels()\r\n      {\r\n         if (BasePropZoneLabels != null)\r\n            return;\r\n\r\n         BasePropZoneLabels = new Dictionary<ZoneInfoLabel, string>();\r\n         foreach (ZoneInfoLabel key in Enum.GetValues(typeof(ZoneInfoLabel)))\r\n         {\r\n            string labelName = string.Format(\"Zone{0}\", key.ToString());\r\n            BasePropZoneLabels.Add(key, labelName);\r\n         }\r\n      }\r\n\r\n      public int CurrentZoneNumber { get; private set; } = 1;\r\n\r\n      private void SetPropZoneLabels()\r\n      {\r\n         if (CurrentZoneNumber == 1)\r\n         {\r\n            CurrentPropZoneLabels = BasePropZoneLabels;\r\n         }\r\n         else\r\n         {\r\n            CurrentPropZoneLabels = new Dictionary<ZoneInfoLabel, string>();\r\n            foreach (KeyValuePair<ZoneInfoLabel, string> propZoneLabel in BasePropZoneLabels)\r\n            {\r\n               CurrentPropZoneLabels.Add(\r\n                  new KeyValuePair<ZoneInfoLabel, string>(propZoneLabel.Key, propZoneLabel.Value + \" \" + CurrentZoneNumber));\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the current shared parameter name for a particular type of zone parameter.\r\n      /// </summary>\r\n      /// <param name=\"label\">The type of zone parameter.</param>\r\n      /// <returns>The name of the shared parameter for this zone for this iteration.</returns>\r\n      public string GetPropZoneLabel(ZoneInfoLabel label)\r\n      {\r\n         string value = null;\r\n         if (CurrentPropZoneLabels == null || !CurrentPropZoneLabels.TryGetValue(label, out value))\r\n            return null;\r\n         return value;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the value of the current shared parameter name for a particular type of zone parameter.\r\n      /// </summary>\r\n      /// <param name=\"label\">The type of zone parameter.</param>\r\n      /// <returns>The value of the shared parameter for this zone for this iteration.</returns>\r\n      public string GetPropZoneValue(ZoneInfoLabel label)\r\n      {\r\n         string value = null;\r\n         if (CurrentPropZoneValues == null || !CurrentPropZoneValues.TryGetValue(label, out value))\r\n            return null;\r\n         return value;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collects the zone parameter values from an element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element potentially containing the shared parameter information.</param>\r\n      /// <returns>True if the zone name parameter was found, even if empty; false otherwise.</returns>\r\n      /// <remarks>CurrentPropZoneLabels will be null if zone name parameter wasn't found,\r\n      /// and empty if it was found but had no value.</remarks>\r\n      public bool SetPropZoneValues(Element element)\r\n      {\r\n         CurrentPropZoneValues = null;\r\n\r\n         SetPropZoneLabels();\r\n         if (CurrentPropZoneLabels == null)\r\n            return false;\r\n\r\n         string zoneNameLabel = GetPropZoneLabel(ZoneInfoLabel.Name);\r\n         string zoneName;\r\n         if (ParameterUtil.GetOptionalStringValueFromElementOrSymbol(element, zoneNameLabel, out zoneName) == null)\r\n            return false;\r\n\r\n         CurrentPropZoneValues = new Dictionary<ZoneInfoLabel, string>();\r\n\r\n         if (!string.IsNullOrWhiteSpace(zoneName))\r\n         {\r\n            CurrentPropZoneValues.Add(ZoneInfoLabel.Name, zoneName);\r\n            foreach (KeyValuePair<ZoneInfoLabel, string> propZoneLabel in CurrentPropZoneLabels)\r\n            {\r\n               if (propZoneLabel.Key == ZoneInfoLabel.Name)\r\n                  continue;\r\n\r\n               string zoneValue;\r\n               ParameterUtil.GetStringValueFromElementOrSymbol(element, propZoneLabel.Value, out zoneValue);\r\n               CurrentPropZoneValues.Add(propZoneLabel.Key, zoneValue);\r\n            }\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Increment the current zone number.\r\n      /// </summary>\r\n      /// <returns>True if he haven't reached the maximum number of iterations, false otherwise.</returns>\r\n      public bool IncrementCount()\r\n      {\r\n         return (CurrentZoneNumber++ < MaxIterations);\r\n      }\r\n\r\n      /// <summary>\r\n      /// The constructor.\r\n      /// </summary>\r\n      public ZoneInfoFinder()\r\n      {\r\n         InitBasePropZoneLabels();\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// The class contains information for creating IFC zone.\r\n   /// </summary>\r\n   public class ZoneInfo\r\n   {\r\n      /// <summary>\r\n      /// Constructs a ZoneInfo object.\r\n      /// </summary>\r\n      /// <param name=\"zoneInfoFinder\">Container with string information.</param>\r\n      /// <param name=\"roomHandle\">The room handle for this zone.</param>\r\n      public ZoneInfo(ZoneInfoFinder zoneInfoFinder, IFCAnyHandle roomHandle)\r\n      {\r\n         if (zoneInfoFinder != null)\r\n         {\r\n            ObjectType = zoneInfoFinder.GetPropZoneValue(ZoneInfoLabel.ObjectType);\r\n            Description = zoneInfoFinder.GetPropZoneValue(ZoneInfoLabel.Description);\r\n            LongName = zoneInfoFinder.GetPropZoneValue(ZoneInfoLabel.LongName);\r\n            GroupName = zoneInfoFinder.GetPropZoneValue(ZoneInfoLabel.GroupName);\r\n         }\r\n\r\n         RoomHandles.Add(roomHandle);\r\n      }\r\n\r\n      /// <summary>\r\n      /// The object type of this zone.\r\n      /// </summary>\r\n      public string ObjectType { get; private set; } = string.Empty;\r\n\r\n      /// <summary>\r\n      /// The description.\r\n      /// </summary>\r\n      public string Description { get; private set; } = string.Empty;\r\n\r\n      /// <summary>\r\n      /// The group name for this zone.\r\n      /// </summary>\r\n      public string GroupName { get; private set; } = string.Empty;\r\n\r\n      /// <summary>\r\n      /// Sets the zone information from the ZoneInfoFinder, if previously unset.\r\n      /// </summary>\r\n      /// <param name=\"zoneInfoFinder\">Container with string information.</param>\r\n      public void UpdateZoneInfo(ZoneInfoFinder zoneInfoFinder)\r\n      {\r\n         if (zoneInfoFinder == null)\r\n            return;\r\n\r\n         if (string.IsNullOrEmpty(ObjectType))\r\n            ObjectType = zoneInfoFinder.GetPropZoneValue(ZoneInfoLabel.ObjectType);\r\n\r\n         if (string.IsNullOrEmpty(Description))\r\n            Description = zoneInfoFinder.GetPropZoneValue(ZoneInfoLabel.Description);\r\n\r\n         if (string.IsNullOrEmpty(LongName))\r\n            LongName = zoneInfoFinder.GetPropZoneValue(ZoneInfoLabel.LongName);\r\n\r\n         if (string.IsNullOrEmpty(GroupName))\r\n            GroupName = zoneInfoFinder.GetPropZoneValue(ZoneInfoLabel.GroupName);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create classification reference (IfcClassificationReference) entity, and add new classification to cache (if it is new classification)\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file class.</param>\r\n      /// <param name=\"classificationKeyString\">The classification name.</param>\r\n      /// <param name=\"classificationCode\">The classification code.</param>\r\n      /// <param name=\"classificationDescription\">The classification description.</param>\r\n      /// <param name=\"location\">The location of the classification.</param>\r\n      /// <returns></returns>\r\n      /// <summary>\r\n      /// Creates and add a classification reference to the zone info if it doesn't already exist. \r\n      /// </summary>\r\n      /// <param name=\"file\">The IFCFile, used to create the instance.</param>\r\n      /// <param name=\"zoneClassificationCode\">The name of the classification code.</param>\r\n      public void ConditionalAddClassification(IFCFile file, string zoneClassificationCode)\r\n      {\r\n         if (string.IsNullOrEmpty(zoneClassificationCode))\r\n            return;\r\n\r\n         if (ClassificationReferences.ContainsKey(zoneClassificationCode))\r\n            return;\r\n\r\n         ClassificationUtil.ParseClassificationCode(zoneClassificationCode, null,\r\n            out string classificationName, out string classificationCode,\r\n            out string classificationRefName);\r\n         ExporterCacheManager.ClassificationLocationCache.TryGetValue(classificationName,\r\n            out string location);\r\n\r\n         IFCAnyHandle classification;\r\n\r\n         // Check whether Classification is already defined before\r\n         if (!ExporterCacheManager.ClassificationCache.ClassificationHandles.TryGetValue(\r\n            classificationName, out classification))\r\n         {\r\n            classification = IFCInstanceExporter.CreateClassification(file, \"\", \"\", 0, 0, 0,\r\n               classificationName, null, location);\r\n            ExporterCacheManager.ClassificationCache.ClassificationHandles.Add(classificationName, classification);\r\n         }\r\n\r\n         ClassificationReferenceKey key = new ClassificationReferenceKey(location,\r\n            classificationCode, classificationRefName, null, classification);\r\n         ClassificationReferences[zoneClassificationCode] =\r\n            ExporterCacheManager.ClassificationCache.FindOrCreateClassificationReference(file, key);\r\n      }\r\n\r\n      static private IFCAnyHandle CreateLabelPropertyFromPattern(string[] patterns, string basePropertyName,\r\n         IFCFile file, Element element)\r\n      {\r\n         PropertyDescription propertyDescription = new PropertyDescription(basePropertyName);\r\n\r\n         foreach (string pattern in patterns)\r\n         {\r\n            string propertyName = string.Format(pattern, basePropertyName);\r\n            IFCAnyHandle propSingleValue = PropertyUtil.CreateLabelPropertyFromElement(file, element,\r\n               propertyName, BuiltInParameter.INVALID, propertyDescription, PropertyValueType.SingleValue,\r\n               null);\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propSingleValue))\r\n               return propSingleValue;\r\n         }\r\n         return null;\r\n      }\r\n\r\n      static private IFCAnyHandle CreateIdentifierPropertyFromPattern(string[] patterns, string basePropertyName,\r\n         IFCFile file, Element element)\r\n      {\r\n         PropertyDescription propertyDescription = new PropertyDescription(basePropertyName);\r\n\r\n         foreach (string pattern in patterns)\r\n         {\r\n            string propertyName = string.Format(pattern, basePropertyName);\r\n            IFCAnyHandle propSingleValue = PropertyUtil.CreateIdentifierPropertyFromElement(file,\r\n               element, propertyName, BuiltInParameter.INVALID, propertyDescription,\r\n               PropertyValueType.SingleValue);\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propSingleValue))\r\n               return propSingleValue;\r\n         }\r\n         return null;\r\n      }\r\n\r\n      static private IFCAnyHandle CreateAreaMeasurePropertyFromPattern(string[] patterns, string basePropertyName,\r\n         IFCFile file, Element element)\r\n      {\r\n         PropertyDescription propertyDescription = new PropertyDescription(basePropertyName);\r\n\r\n         foreach (string pattern in patterns)\r\n         {\r\n            string propertyName = string.Format(pattern, basePropertyName);\r\n            IFCAnyHandle propSingleValue = PropertyUtil.CreateAreaPropertyFromElement(file,\r\n               element, propertyName, BuiltInParameter.INVALID, propertyDescription,\r\n               PropertyValueType.SingleValue);\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propSingleValue))\r\n               return propSingleValue;\r\n         }\r\n         return null;\r\n      }\r\n\r\n      static private IFCAnyHandle CreateBooleanPropertyFromPattern(string[] patterns, string basePropertyName,\r\n         IFCFile file, Element element)\r\n      {\r\n         PropertyDescription propertyDescription = new PropertyDescription(basePropertyName);\r\n\r\n         foreach (string pattern in patterns)\r\n         {\r\n            string propertyName = string.Format(pattern, basePropertyName);\r\n            IFCAnyHandle propSingleValue = PropertyUtil.CreateBooleanPropertyFromElement(file, element,\r\n               propertyName, propertyDescription, PropertyValueType.SingleValue);\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(propSingleValue))\r\n               return propSingleValue;\r\n         }\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the name of the net planned area property, depending on the current schema, for levels and zones.\r\n      /// </summary>\r\n      /// <returns>The name of the net planned area property.</returns>\r\n      /// <remarks>Note that PSet_SpaceCommon has had the property \"NetPlannedArea\" since IFC2x3.</remarks>\r\n      static private string GetLevelAndZoneNetPlannedAreaName()\r\n      {\r\n         return ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 ? \"NetAreaPlanned\" : \"NetPlannedArea\";\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the name of the gross planned area property, depending on the current schema, for levels and zones.\r\n      /// </summary>\r\n      /// <returns>The name of the net planned area property.</returns>\r\n      /// <remarks>Note that PSet_SpaceCommon has had the property \"GrossPlannedArea\" since IFC2x3.</remarks>\r\n      static private string GetLevelAndZoneGrossPlannedAreaName()\r\n      {\r\n         return ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 ? \"GrossAreaPlanned\" : \"GrossPlannedArea\";\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collect the information needed to create PSet_ZoneCommon.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"element\">The Revit element.</param>\r\n      /// <param name=\"index\">The index of the zone for the current space.</param>\r\n      public void CollectZoneCommonPSetData(IFCFile file, Element element, int index)\r\n      {\r\n         // We don't use the generic Property Set mechanism because Zones aren't \"real\" elements.\r\n         string indexString = (index > 1) ? index.ToString() : string.Empty;\r\n         const string basePSetName = \"Pset_ZoneCommon\";\r\n\r\n         string[] patterns = new string[2] {\r\n            basePSetName + indexString + \".{0}\",\r\n            \"Zone\" + \"{0}\" + indexString\r\n         };\r\n\r\n         ZoneCommonHandles.AddIfNotNullAndNewKey(\"Category\",\r\n            CreateLabelPropertyFromPattern(patterns, \"Category\", file, element));\r\n\r\n         string grossPlannedAreaName = GetLevelAndZoneGrossPlannedAreaName();\r\n         ZoneCommonHandles.AddIfNotNullAndNewKey(grossPlannedAreaName,\r\n            CreateAreaMeasurePropertyFromPattern(patterns, grossPlannedAreaName, file,\r\n            element));\r\n\r\n         string netPlannedAreaName = GetLevelAndZoneNetPlannedAreaName();\r\n         ZoneCommonHandles.AddIfNotNullAndNewKey(netPlannedAreaName, \r\n            CreateAreaMeasurePropertyFromPattern(patterns, netPlannedAreaName, file, element));\r\n\r\n         ZoneCommonHandles.AddIfNotNullAndNewKey(\"PubliclyAccessible\",\r\n            CreateBooleanPropertyFromPattern(patterns, \"PubliclyAccessible\", file, element));\r\n\r\n         ZoneCommonHandles.AddIfNotNullAndNewKey(\"HandicapAccessible\",\r\n            CreateBooleanPropertyFromPattern(patterns, \"HandicapAccessible\", file, element));\r\n\r\n         ZoneCommonHandles.AddIfNotNullAndNewKey(\"IsExternal\",\r\n            CreateBooleanPropertyFromPattern(patterns, \"IsExternal\", file, element));\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4x3)\r\n         {\r\n            ZoneCommonHandles.AddIfNotNullAndNewKey(\"Reference\",\r\n               CreateIdentifierPropertyFromPattern(patterns, \"Reference\", file, element));\r\n         }\r\n\r\n         if (ZoneCommonHandles.Count > 0 && ZoneCommonGUID == null)\r\n         {\r\n            string psetName = basePSetName + indexString;\r\n            ZoneCommonGUID = GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(element, psetName));\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create the PSet_ZoneCommon property set, if applicable.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFCFile parameter.</param>\r\n      /// <returns>The handle to the PSet_ZoneCommon property set, if created.</returns>\r\n      public IFCAnyHandle CreateZoneCommonPSetData(IFCFile file)\r\n      {\r\n         if (ZoneCommonHandles.Count == 0 || ZoneCommonGUID == null)\r\n            return null;\r\n\r\n         return IFCInstanceExporter.CreatePropertySet(file, ZoneCommonGUID,\r\n            ExporterCacheManager.OwnerHistoryHandle, \"PSet_ZoneCommon\", null,\r\n            ZoneCommonHandles.Values.ToHashSet());\r\n      }\r\n\r\n      /// <summary>\r\n      /// The long name, for IFC4+.\r\n      /// </summary>\r\n      public string LongName { get; private set; } = string.Empty;\r\n\r\n      /// <summary>\r\n      /// The associated room handles.\r\n      /// </summary>\r\n      public HashSet<IFCAnyHandle> RoomHandles { get; } = new HashSet<IFCAnyHandle>();\r\n\r\n      /// <summary>\r\n      /// A list of the names of already created IfcClassificationReferences.\r\n      /// </summary>\r\n      public IDictionary<string, IFCAnyHandle> ClassificationReferences { get; set; } = \r\n         new Dictionary<string, IFCAnyHandle>();\r\n\r\n      public IDictionary<string, IFCAnyHandle> ZoneCommonHandles { get; set; } =\r\n         new Dictionary<string, IFCAnyHandle>();\r\n\r\n      /// <summary>\r\n      /// The GUID for the Pset_ZoneCommon.\r\n      /// </summary>\r\n      public string ZoneCommonGUID { get; private set; } = null;\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Properties/AssemblyInfo.cs",
    "content": "using System.Reflection;\r\nusing System.Runtime.Versioning;\r\n#region Using directives\r\n\r\n[assembly: SupportedOSPlatform(\"windows7.0\")]\r\n\r\n#if IFC_OPENSOURCE\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"IFC Exporter for Revit\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"Autodesk\")]\r\n[assembly: AssemblyProduct(\"IFC Exporter for Revit\")]\r\n[assembly: AssemblyCopyright(\" 2012-2026 Autodesk, Inc. All rights reserved.\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n[assembly: AssemblyVersion(\"27.0.1.0\")]\r\n[assembly: AssemblyFileVersion(\"27.0.1.0\")]\r\n\r\n#endif\r\n\r\n\r\n// Version information can now be found in Source\\Foundation\\RevitENU\\Version.cs\r\n//\r\n#endregion\r\n\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.42000\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace Revit.IFC.Export.Properties {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    internal class Resources {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Resources() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Revit.IFC.Export.Properties.Resources\", typeof(Resources).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Arched (ARCHED).\r\n        /// </summary>\r\n        internal static string BridgeArched {\r\n            get {\r\n                return ResourceManager.GetString(\"BridgeArched\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cable Stayed (CABLESTAYED).\r\n        /// </summary>\r\n        internal static string BridgeCableStayed {\r\n            get {\r\n                return ResourceManager.GetString(\"BridgeCableStayed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cantilever (CANTILEVER).\r\n        /// </summary>\r\n        internal static string BridgeCantilever {\r\n            get {\r\n                return ResourceManager.GetString(\"BridgeCantilever\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Culvert (CULVERT).\r\n        /// </summary>\r\n        internal static string BridgeCulvert {\r\n            get {\r\n                return ResourceManager.GetString(\"BridgeCulvert\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Framework (FRAMEWORK).\r\n        /// </summary>\r\n        internal static string BridgeFramework {\r\n            get {\r\n                return ResourceManager.GetString(\"BridgeFramework\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Girder (GIRDER).\r\n        /// </summary>\r\n        internal static string BridgeGirder {\r\n            get {\r\n                return ResourceManager.GetString(\"BridgeGirder\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Suspension (SUSPENSION).\r\n        /// </summary>\r\n        internal static string BridgeSuspension {\r\n            get {\r\n                return ResourceManager.GetString(\"BridgeSuspension\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Truss (TRUSS).\r\n        /// </summary>\r\n        internal static string BridgeTruss {\r\n            get {\r\n                return ResourceManager.GetString(\"BridgeTruss\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Conical Face Profile Curve.\r\n        /// </summary>\r\n        internal static string ConicalFaceProfileCurve {\r\n            get {\r\n                return ResourceManager.GetString(\"ConicalFaceProfileCurve\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Default phase to export.\r\n        /// </summary>\r\n        internal static string DefaultPhase {\r\n            get {\r\n                return ResourceManager.GetString(\"DefaultPhase\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Delete old configuration.\r\n        /// </summary>\r\n        internal static string DeleteOldConfiguration {\r\n            get {\r\n                return ResourceManager.GetString(\"DeleteOldConfiguration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Delete old IFC export setups.\r\n        /// </summary>\r\n        internal static string DeleteOldSetups {\r\n            get {\r\n                return ResourceManager.GetString(\"DeleteOldSetups\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Architectural Reference Exchange.\r\n        /// </summary>\r\n        internal static string ER_Architecture {\r\n            get {\r\n                return ResourceManager.GetString(\"ER_Architecture\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Architecture.\r\n        /// </summary>\r\n        internal static string ER_ArchitectureShort {\r\n            get {\r\n                return ResourceManager.GetString(\"ER_ArchitectureShort\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to MEP Reference Exchange.\r\n        /// </summary>\r\n        internal static string ER_BuildingService {\r\n            get {\r\n                return ResourceManager.GetString(\"ER_BuildingService\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to BuildingService.\r\n        /// </summary>\r\n        internal static string ER_BuildingServiceShort {\r\n            get {\r\n                return ResourceManager.GetString(\"ER_BuildingServiceShort\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Structural Reference Exchange.\r\n        /// </summary>\r\n        internal static string ER_Structural {\r\n            get {\r\n                return ResourceManager.GetString(\"ER_Structural\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Structural.\r\n        /// </summary>\r\n        internal static string ER_StructuralShort {\r\n            get {\r\n                return ResourceManager.GetString(\"ER_StructuralShort\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Bridge (IfcBridge).\r\n        /// </summary>\r\n        internal static string FacilityBridge {\r\n            get {\r\n                return ResourceManager.GetString(\"FacilityBridge\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Building (IfcBuilding).\r\n        /// </summary>\r\n        internal static string FacilityBuilding {\r\n            get {\r\n                return ResourceManager.GetString(\"FacilityBuilding\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Marine Facility (IfcMarineFacility).\r\n        /// </summary>\r\n        internal static string FacilityMarineFacility {\r\n            get {\r\n                return ResourceManager.GetString(\"FacilityMarineFacility\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Railway (IfcRailway).\r\n        /// </summary>\r\n        internal static string FacilityRailway {\r\n            get {\r\n                return ResourceManager.GetString(\"FacilityRailway\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Road (IfcRoad).\r\n        /// </summary>\r\n        internal static string FacilityRoad {\r\n            get {\r\n                return ResourceManager.GetString(\"FacilityRoad\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC2x3 COBie 2.4 Design Deliverable View.\r\n        /// </summary>\r\n        internal static string IFC2x3FM {\r\n            get {\r\n                return ResourceManager.GetString(\"IFC2x3FM\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC4 for General Use.\r\n        /// </summary>\r\n        internal static string IFC4 {\r\n            get {\r\n                return ResourceManager.GetString(\"IFC4\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC4 Design Transfer View [Unofficial].\r\n        /// </summary>\r\n        internal static string IFC4DTV {\r\n            get {\r\n                return ResourceManager.GetString(\"IFC4DTV\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC4 Reference View.\r\n        /// </summary>\r\n        internal static string IFC4RV {\r\n            get {\r\n                return ResourceManager.GetString(\"IFC4RV\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC4.3 Design Transfer View [Unofficial].\r\n        /// </summary>\r\n        internal static string IFC4x3DTV {\r\n            get {\r\n                return ResourceManager.GetString(\"IFC4x3DTV\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC4.3 Reference View.\r\n        /// </summary>\r\n        internal static string IFC4x3RV {\r\n            get {\r\n                return ResourceManager.GetString(\"IFC4x3RV\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Export Complete.\r\n        /// </summary>\r\n        internal static string IFCExportComplete {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCExportComplete\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot add new Property {0} to Reserved Property Set {1}..\r\n        /// </summary>\r\n        internal static string IFCExportWarningCannotAddPropertyToReservedPropertySet {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCExportWarningCannotAddPropertyToReservedPropertySet\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to User-defined Property Set {0} contains reserved string {1}. Extending property set name to {2}..\r\n        /// </summary>\r\n        internal static string IFCExportWarningCannotAddUserDefinedPropertySet {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCExportWarningCannotAddUserDefinedPropertySet\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC 2x3 Coordination View 2.0.\r\n        /// </summary>\r\n        internal static string IFCMVD2x3CV2 {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCMVD2x3CV2\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC 2x3 Basic FM Handover View.\r\n        /// </summary>\r\n        internal static string IFCMVDFMHandOver {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCMVDFMHandOver\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC 2x3 GSA Concept Design BIM 2010.\r\n        /// </summary>\r\n        internal static string IFCMVDGSA {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCMVDGSA\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Export: Processing Area Schemes: {0} of {1} (Area Scheme ID: {2}).\r\n        /// </summary>\r\n        internal static string IFCProcessingAreaSchemes {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCProcessingAreaSchemes\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Export: Processing Beam Systems: {0} of {1} (Beam System ID: {2}).\r\n        /// </summary>\r\n        internal static string IFCProcessingBeamSystems {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCProcessingBeamSystems\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Export: Processing Export Zones: {0} of {1} (Export Zone ID: {2}).\r\n        /// </summary>\r\n        internal static string IFCProcessingExportZones {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCProcessingExportZones\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Export: Processing Fabric Areas: {0} of {1} (Fabric Area ID: {2}).\r\n        /// </summary>\r\n        internal static string IFCProcessingFabricAreas {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCProcessingFabricAreas\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Export: Processing Groups: {0} of {1} (Group ID: {2}).\r\n        /// </summary>\r\n        internal static string IFCProcessingGroups {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCProcessingGroups\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Export: Processing Non Spatial Elements: {0} of {1} (Element ID: {2}).\r\n        /// </summary>\r\n        internal static string IFCProcessingNonSpatialElements {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCProcessingNonSpatialElements\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Export: Processing Railings: {0} of {1} (Railing ID: {2}).\r\n        /// </summary>\r\n        internal static string IFCProcessingRailings {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCProcessingRailings\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Export: Processing Spatial Elements: {0} of {1} (Element ID: {2}).\r\n        /// </summary>\r\n        internal static string IFCProcessingSpatialElements {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCProcessingSpatialElements\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Export: Processing Trusses: {0} of {1} (Truss ID: {2}).\r\n        /// </summary>\r\n        internal static string IFCProcessingTrusses {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCProcessingTrusses\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC+SG Regulatory Requirements View.\r\n        /// </summary>\r\n        internal static string IFCSG {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCSG\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC 2x2 Coordination View.\r\n        /// </summary>\r\n        internal static string IFCVersion2x2 {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCVersion2x2\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC 2x3 Coordination View.\r\n        /// </summary>\r\n        internal static string IFCVersion2x3 {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCVersion2x3\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC4x3.\r\n        /// </summary>\r\n        internal static string IFCVersion4x3 {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCVersion4x3\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unrecognized IFC version.\r\n        /// </summary>\r\n        internal static string IFCVersionUnrecognized {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCVersionUnrecognized\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &lt;In-Session Setup&gt;.\r\n        /// </summary>\r\n        internal static string InSessionConfiguration {\r\n            get {\r\n                return ResourceManager.GetString(\"InSessionConfiguration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Barrier Beach (BARRIERBEACH).\r\n        /// </summary>\r\n        internal static string MarineFacilityBarrierBeach {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityBarrierBeach\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Breakwater (BREAKWATER).\r\n        /// </summary>\r\n        internal static string MarineFacilityBreakwater {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityBreakwater\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Canal (CANAL).\r\n        /// </summary>\r\n        internal static string MarineFacilityCanal {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityCanal\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Dry Dock (DRYDOCK).\r\n        /// </summary>\r\n        internal static string MarineFacilityDryDock {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityDryDock\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Floating Dock (FLOATINGDOCK).\r\n        /// </summary>\r\n        internal static string MarineFacilityFloatingDock {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityFloatingDock\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Hydrolift (HYDROLIFT).\r\n        /// </summary>\r\n        internal static string MarineFacilityHydrolift {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityHydrolift\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Jetty (JETTY).\r\n        /// </summary>\r\n        internal static string MarineFacilityJetty {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityJetty\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Launch Recovery Facility (LAUNCHRECOVERYFACILITY).\r\n        /// </summary>\r\n        internal static string MarineFacilityLaunchRecovery {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityLaunchRecovery\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Marine Defense (MARINEDEFENCE).\r\n        /// </summary>\r\n        internal static string MarineFacilityMarineDefense {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityMarineDefense\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Navigational Channel (NAVIGATIONALCHANNEL).\r\n        /// </summary>\r\n        internal static string MarineFacilityNavigationalChannel {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityNavigationalChannel\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Port (PORT).\r\n        /// </summary>\r\n        internal static string MarineFacilityPort {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityPort\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Quay (QUAY).\r\n        /// </summary>\r\n        internal static string MarineFacilityQuay {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityQuay\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Revetment (REVETMENT).\r\n        /// </summary>\r\n        internal static string MarineFacilityRevetment {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityRevetment\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Shiplift (SHIPLIFT).\r\n        /// </summary>\r\n        internal static string MarineFacilityShipLift {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityShipLift\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Ship Lock (SHIPLOCK).\r\n        /// </summary>\r\n        internal static string MarineFacilityShipLock {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityShipLock\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Shipyard (SHIPYARD).\r\n        /// </summary>\r\n        internal static string MarineFacilityShipyard {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityShipyard\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Slipway (SLIPWAY).\r\n        /// </summary>\r\n        internal static string MarineFacilitySlipway {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilitySlipway\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Waterway (WATERWAY).\r\n        /// </summary>\r\n        internal static string MarineFacilityWaterway {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityWaterway\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Waterway Shiplift (WATERWAYSHIPLIFT).\r\n        /// </summary>\r\n        internal static string MarineFacilityWaterwayShiplift {\r\n            get {\r\n                return ResourceManager.GetString(\"MarineFacilityWaterwayShiplift\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Not Defined.\r\n        /// </summary>\r\n        internal static string NotDefined {\r\n            get {\r\n                return ResourceManager.GetString(\"NotDefined\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to (Type).\r\n        /// </summary>\r\n        internal static string PropertySetTypeSuffix {\r\n            get {\r\n                return ResourceManager.GetString(\"PropertySetTypeSuffix\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Revolved Face Profile Curve.\r\n        /// </summary>\r\n        internal static string RevolvedFaceProfileCurve {\r\n            get {\r\n                return ResourceManager.GetString(\"RevolvedFaceProfileCurve\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Ruled Face Profile Curve.\r\n        /// </summary>\r\n        internal static string RuledFaceProfileCurve {\r\n            get {\r\n                return ResourceManager.GetString(\"RuledFaceProfileCurve\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Save changes to IFC export configuration.\r\n        /// </summary>\r\n        internal static string SaveConfigurationChanges {\r\n            get {\r\n                return ResourceManager.GetString(\"SaveConfigurationChanges\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Setup.\r\n        /// </summary>\r\n        internal static string Setup {\r\n            get {\r\n                return ResourceManager.GetString(\"Setup\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Shape.\r\n        /// </summary>\r\n        internal static string Shape {\r\n            get {\r\n                return ResourceManager.GetString(\"Shape\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Update IFC export setups.\r\n        /// </summary>\r\n        internal static string UpdateExportSetups {\r\n            get {\r\n                return ResourceManager.GetString(\"UpdateExportSetups\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to User Defined.\r\n        /// </summary>\r\n        internal static string UserDefined {\r\n            get {\r\n                return ResourceManager.GetString(\"UserDefined\", resourceCulture);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"BridgeArched\" xml:space=\"preserve\">\r\n    <value>Arched (ARCHED)</value>\r\n  </data>\r\n  <data name=\"ConicalFaceProfileCurve\" xml:space=\"preserve\">\r\n    <value>Conical Face Profile Curve</value>\r\n  </data>\r\n  <data name=\"IFCExportComplete\" xml:space=\"preserve\">\r\n    <value>IFC Export Complete</value>\r\n  </data>\r\n  <data name=\"IFCExportWarningCannotAddPropertyToReservedPropertySet\" xml:space=\"preserve\">\r\n    <value>Cannot add new Property {0} to Reserved Property Set {1}.</value>\r\n  </data>\r\n  <data name=\"IFCExportWarningCannotAddUserDefinedPropertySet\" xml:space=\"preserve\">\r\n    <value>User-defined Property Set {0} contains reserved string {1}. Extending property set name to {2}.</value>\r\n  </data>\r\n  <data name=\"IFCProcessingAreaSchemes\" xml:space=\"preserve\">\r\n    <value>IFC Export: Processing Area Schemes: {0} of {1} (Area Scheme ID: {2})</value>\r\n  </data>\r\n  <data name=\"IFCProcessingBeamSystems\" xml:space=\"preserve\">\r\n    <value>IFC Export: Processing Beam Systems: {0} of {1} (Beam System ID: {2})</value>\r\n  </data>\r\n  <data name=\"IFCProcessingExportZones\" xml:space=\"preserve\">\r\n    <value>IFC Export: Processing Export Zones: {0} of {1} (Export Zone ID: {2})</value>\r\n  </data>\r\n  <data name=\"IFCProcessingFabricAreas\" xml:space=\"preserve\">\r\n    <value>IFC Export: Processing Fabric Areas: {0} of {1} (Fabric Area ID: {2})</value>\r\n  </data>\r\n  <data name=\"IFCProcessingGroups\" xml:space=\"preserve\">\r\n    <value>IFC Export: Processing Groups: {0} of {1} (Group ID: {2})</value>\r\n  </data>\r\n  <data name=\"IFCProcessingNonSpatialElements\" xml:space=\"preserve\">\r\n    <value>IFC Export: Processing Non Spatial Elements: {0} of {1} (Element ID: {2})</value>\r\n  </data>\r\n  <data name=\"IFCProcessingRailings\" xml:space=\"preserve\">\r\n    <value>IFC Export: Processing Railings: {0} of {1} (Railing ID: {2})</value>\r\n  </data>\r\n  <data name=\"IFCProcessingSpatialElements\" xml:space=\"preserve\">\r\n    <value>IFC Export: Processing Spatial Elements: {0} of {1} (Element ID: {2})</value>\r\n  </data>\r\n  <data name=\"IFCProcessingTrusses\" xml:space=\"preserve\">\r\n    <value>IFC Export: Processing Trusses: {0} of {1} (Truss ID: {2})</value>\r\n  </data>\r\n  <data name=\"PropertySetTypeSuffix\" xml:space=\"preserve\">\r\n    <value>(Type)</value>\r\n  </data>\r\n  <data name=\"RevolvedFaceProfileCurve\" xml:space=\"preserve\">\r\n    <value>Revolved Face Profile Curve</value>\r\n  </data>\r\n  <data name=\"RuledFaceProfileCurve\" xml:space=\"preserve\">\r\n    <value>Ruled Face Profile Curve</value>\r\n  </data>\r\n  <data name=\"Shape\" xml:space=\"preserve\">\r\n    <value>Shape</value>\r\n  </data>\r\n  <data name=\"BridgeCableStayed\" xml:space=\"preserve\">\r\n    <value>Cable Stayed (CABLESTAYED)</value>\r\n  </data>\r\n  <data name=\"BridgeCantilever\" xml:space=\"preserve\">\r\n    <value>Cantilever (CANTILEVER)</value>\r\n  </data>\r\n  <data name=\"BridgeCulvert\" xml:space=\"preserve\">\r\n    <value>Culvert (CULVERT)</value>\r\n  </data>\r\n  <data name=\"BridgeFramework\" xml:space=\"preserve\">\r\n    <value>Framework (FRAMEWORK)</value>\r\n  </data>\r\n  <data name=\"BridgeGirder\" xml:space=\"preserve\">\r\n    <value>Girder (GIRDER)</value>\r\n  </data>\r\n  <data name=\"BridgeSuspension\" xml:space=\"preserve\">\r\n    <value>Suspension (SUSPENSION)</value>\r\n  </data>\r\n  <data name=\"BridgeTruss\" xml:space=\"preserve\">\r\n    <value>Truss (TRUSS)</value>\r\n  </data>\r\n  <data name=\"DefaultPhase\" xml:space=\"preserve\">\r\n    <value>Default phase to export</value>\r\n  </data>\r\n  <data name=\"DeleteOldConfiguration\" xml:space=\"preserve\">\r\n    <value>Delete old configuration</value>\r\n  </data>\r\n  <data name=\"DeleteOldSetups\" xml:space=\"preserve\">\r\n    <value>Delete old IFC export setups</value>\r\n  </data>\r\n  <data name=\"ER_Architecture\" xml:space=\"preserve\">\r\n    <value>Architectural Reference Exchange</value>\r\n  </data>\r\n  <data name=\"ER_ArchitectureShort\" xml:space=\"preserve\">\r\n    <value>Architecture</value>\r\n  </data>\r\n  <data name=\"ER_BuildingService\" xml:space=\"preserve\">\r\n    <value>MEP Reference Exchange</value>\r\n  </data>\r\n  <data name=\"ER_BuildingServiceShort\" xml:space=\"preserve\">\r\n    <value>BuildingService</value>\r\n  </data>\r\n  <data name=\"ER_Structural\" xml:space=\"preserve\">\r\n    <value>Structural Reference Exchange</value>\r\n  </data>\r\n  <data name=\"ER_StructuralShort\" xml:space=\"preserve\">\r\n    <value>Structural</value>\r\n  </data>\r\n  <data name=\"FacilityBridge\" xml:space=\"preserve\">\r\n    <value>Bridge (IfcBridge)</value>\r\n  </data>\r\n  <data name=\"FacilityBuilding\" xml:space=\"preserve\">\r\n    <value>Building (IfcBuilding)</value>\r\n  </data>\r\n  <data name=\"FacilityMarineFacility\" xml:space=\"preserve\">\r\n    <value>Marine Facility (IfcMarineFacility)</value>\r\n  </data>\r\n  <data name=\"FacilityRailway\" xml:space=\"preserve\">\r\n    <value>Railway (IfcRailway)</value>\r\n  </data>\r\n  <data name=\"FacilityRoad\" xml:space=\"preserve\">\r\n    <value>Road (IfcRoad)</value>\r\n  </data>\r\n  <data name=\"IFC2x3FM\" xml:space=\"preserve\">\r\n    <value>IFC2x3 COBie 2.4 Design Deliverable View</value>\r\n  </data>\r\n  <data name=\"IFC4\" xml:space=\"preserve\">\r\n    <value>IFC4 for General Use</value>\r\n  </data>\r\n  <data name=\"IFC4DTV\" xml:space=\"preserve\">\r\n    <value>IFC4 Design Transfer View [Unofficial]</value>\r\n  </data>\r\n  <data name=\"IFC4RV\" xml:space=\"preserve\">\r\n    <value>IFC4 Reference View</value>\r\n  </data>\r\n  <data name=\"IFC4x3DTV\" xml:space=\"preserve\">\r\n    <value>IFC4.3 Design Transfer View [Unofficial]</value>\r\n  </data>\r\n  <data name=\"IFC4x3RV\" xml:space=\"preserve\">\r\n    <value>IFC4.3 Reference View</value>\r\n  </data>\r\n  <data name=\"IFCMVD2x3CV2\" xml:space=\"preserve\">\r\n    <value>IFC 2x3 Coordination View 2.0</value>\r\n  </data>\r\n  <data name=\"IFCMVDFMHandOver\" xml:space=\"preserve\">\r\n    <value>IFC 2x3 Basic FM Handover View</value>\r\n  </data>\r\n  <data name=\"IFCMVDGSA\" xml:space=\"preserve\">\r\n    <value>IFC 2x3 GSA Concept Design BIM 2010</value>\r\n  </data>\r\n  <data name=\"IFCSG\" xml:space=\"preserve\">\r\n    <value>IFC+SG Regulatory Requirements View</value>\r\n  </data>\r\n  <data name=\"IFCVersion2x2\" xml:space=\"preserve\">\r\n    <value>IFC 2x2 Coordination View</value>\r\n  </data>\r\n  <data name=\"IFCVersion2x3\" xml:space=\"preserve\">\r\n    <value>IFC 2x3 Coordination View</value>\r\n  </data>\r\n  <data name=\"IFCVersion4x3\" xml:space=\"preserve\">\r\n    <value>IFC4x3</value>\r\n  </data>\r\n  <data name=\"IFCVersionUnrecognized\" xml:space=\"preserve\">\r\n    <value>Unrecognized IFC version</value>\r\n  </data>\r\n  <data name=\"InSessionConfiguration\" xml:space=\"preserve\">\r\n    <value>&lt;In-Session Setup&gt;</value>\r\n  </data>\r\n  <data name=\"MarineFacilityBarrierBeach\" xml:space=\"preserve\">\r\n    <value>Barrier Beach (BARRIERBEACH)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityBreakwater\" xml:space=\"preserve\">\r\n    <value>Breakwater (BREAKWATER)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityCanal\" xml:space=\"preserve\">\r\n    <value>Canal (CANAL)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityDryDock\" xml:space=\"preserve\">\r\n    <value>Dry Dock (DRYDOCK)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityFloatingDock\" xml:space=\"preserve\">\r\n    <value>Floating Dock (FLOATINGDOCK)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityHydrolift\" xml:space=\"preserve\">\r\n    <value>Hydrolift (HYDROLIFT)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityJetty\" xml:space=\"preserve\">\r\n    <value>Jetty (JETTY)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityLaunchRecovery\" xml:space=\"preserve\">\r\n    <value>Launch Recovery Facility (LAUNCHRECOVERYFACILITY)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityMarineDefense\" xml:space=\"preserve\">\r\n    <value>Marine Defense (MARINEDEFENCE)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityNavigationalChannel\" xml:space=\"preserve\">\r\n    <value>Navigational Channel (NAVIGATIONALCHANNEL)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityPort\" xml:space=\"preserve\">\r\n    <value>Port (PORT)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityQuay\" xml:space=\"preserve\">\r\n    <value>Quay (QUAY)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityRevetment\" xml:space=\"preserve\">\r\n    <value>Revetment (REVETMENT)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityShipLift\" xml:space=\"preserve\">\r\n    <value>Shiplift (SHIPLIFT)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityShipLock\" xml:space=\"preserve\">\r\n    <value>Ship Lock (SHIPLOCK)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityShipyard\" xml:space=\"preserve\">\r\n    <value>Shipyard (SHIPYARD)</value>\r\n  </data>\r\n  <data name=\"MarineFacilitySlipway\" xml:space=\"preserve\">\r\n    <value>Slipway (SLIPWAY)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityWaterway\" xml:space=\"preserve\">\r\n    <value>Waterway (WATERWAY)</value>\r\n  </data>\r\n  <data name=\"MarineFacilityWaterwayShiplift\" xml:space=\"preserve\">\r\n    <value>Waterway Shiplift (WATERWAYSHIPLIFT)</value>\r\n  </data>\r\n  <data name=\"NotDefined\" xml:space=\"preserve\">\r\n    <value>Not Defined</value>\r\n  </data>\r\n  <data name=\"SaveConfigurationChanges\" xml:space=\"preserve\">\r\n    <value>Save changes to IFC export configuration</value>\r\n  </data>\r\n  <data name=\"Setup\" xml:space=\"preserve\">\r\n    <value>Setup</value>\r\n  </data>\r\n  <data name=\"UpdateExportSetups\" xml:space=\"preserve\">\r\n    <value>Update IFC export setups</value>\r\n  </data>\r\n  <data name=\"UserDefined\" xml:space=\"preserve\">\r\n    <value>User Defined</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Source/Revit.IFC.Export/Revit.IFC.Export.csproj",
    "content": "﻿<Project Sdk=\"\">\n  <PropertyGroup>\n    <RootNamespace>Revit.IFC.Export</RootNamespace>\n    <AssemblyName>Revit.IFC.Export</AssemblyName>\n  </PropertyGroup>\n  <PropertyGroup>\n    <Antlr4UseCSharpGenerator>True</Antlr4UseCSharpGenerator>\n    <BaseOutputPath></BaseOutputPath>\n  </PropertyGroup>\n  <Import Project=\"$(SolutionDir)VSProps\\Revit.CSharp.Sdk.props\" />\n  <ItemGroup>\n    <FrameworkReference Include=\"Microsoft.WindowsDesktop.App\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Update=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Revit.IFC.Common\\Revit.IFC.Common.csproj\">\n      <Private>False</Private>\n      <ExcludeAssets>All</ExcludeAssets>\n      <PrivateAssets>All</PrivateAssets>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n      <SubType>Designer</SubType>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <Antlr4 Include=\"Utility\\ParamExprGrammar.g4\">\n      <Generator>MSBuild:Compile</Generator>\n      <CustomToolNamespace>Revit.IFC.Export.Utility</CustomToolNamespace>\n      <Listener>True</Listener>\n      <Visitor>True</Visitor>\n    </Antlr4>\n  </ItemGroup>\n  <!--\n    Always Import the appropriate *.OutputPath.targets file BEFORE the\n    Revit.CSharp.targets file, otherwise VisualStudio will complain\n    about missing OutputPath tags.\n    -->\n  <Import Project=\"$(SolutionDir)VSProps\\Revit.CSharp.Sdk.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ItemGroup>\n    <Compile Remove=\"Exporter\\PropertySet\\Calculators\\SlabLoadBearingCalculator.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Antlr4\" Version=\"4.6.6\">\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n    <PackageReference Include=\"Antlr4.CodeGenerator\">\n      <Version>4.6.6</Version>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n    <PackageReference Include=\"Antlr4.Runtime\">\n      <Version>4.6.6</Version>\n    </PackageReference>\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"13.0.1\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"RevitAPI\">\n      <HintPath>..\\..\\..\\API\\2027\\RevitAPI.dll</HintPath>\n    </Reference>\n    <Reference Include=\"RevitAPIIFC\">\n      <HintPath>..\\..\\..\\API\\2027\\RevitAPIIFC.dll</HintPath>\n    </Reference>\n    <Reference Include=\"RevitAPIUI\">\n      <HintPath>..\\..\\..\\API\\2027\\RevitAPIUI.dll</HintPath>\n    </Reference>\n    <Reference Include=\"AddInLoader\">\n      <HintPath>..\\..\\..\\API\\2027\\AddInLoader.dll</HintPath>\n      <Private>False</Private>\n    </Reference>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Toolkit/IFC4Enums.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace Revit.IFC.Export.Toolkit.IFC4\r\n{\r\n\r\n   public enum IFCActionRequestType\r\n   {\r\n      EMAIL\r\n  , FAX\r\n  , PHONE\r\n  , POST\r\n  , VERBAL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCActionSourceType\r\n   {\r\n      DEAD_LOAD_G\r\n  , COMPLETION_G1\r\n  , LIVE_LOAD_Q\r\n  , SNOW_S\r\n  , WIND_W\r\n  , PRESTRESSING_P\r\n  , SETTLEMENT_U\r\n  , TEMPERATURE_T\r\n  , EARTHQUAKE_E\r\n  , FIRE\r\n  , IMPULSE\r\n  , IMPACT\r\n  , TRANSPORT\r\n  , ERECTION\r\n  , PROPPING\r\n  , SYSTEM_IMPERFECTION\r\n  , SHRINKAGE\r\n  , CREEP\r\n  , LACK_OF_FIT\r\n  , BUOYANCY\r\n  , ICE\r\n  , CURRENT\r\n  , WAVE\r\n  , RAIN\r\n  , BRAKES\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCActionType\r\n   {\r\n      PERMANENT_G\r\n  , VARIABLE_Q\r\n  , EXTRAORDINARY_A\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCActuatorType\r\n   {\r\n      ELECTRICACTUATOR\r\n  , HANDOPERATEDACTUATOR\r\n  , HYDRAULICACTUATOR\r\n  , PNEUMATICACTUATOR\r\n  , THERMOSTATICACTUATOR\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCAddressType\r\n   {\r\n      OFFICE\r\n  , SITE\r\n  , HOME\r\n  , DISTRIBUTIONPOINT\r\n  , USERDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCAirTerminalBoxType\r\n   {\r\n      CONSTANTFLOW\r\n  , VARIABLEFLOWPRESSUREDEPENDANT\r\n  , VARIABLEFLOWPRESSUREINDEPENDANT\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCAirTerminalType\r\n   {\r\n      DIFFUSER\r\n  , GRILLE\r\n  , LOUVRE\r\n  , REGISTER\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCAirToAirHeatRecoveryType\r\n   {\r\n      FIXEDPLATECOUNTERFLOWEXCHANGER\r\n  , FIXEDPLATECROSSFLOWEXCHANGER\r\n  , FIXEDPLATEPARALLELFLOWEXCHANGER\r\n  , ROTARYWHEEL\r\n  , RUNAROUNDCOILLOOP\r\n  , HEATPIPE\r\n  , TWINTOWERENTHALPYRECOVERYLOOPS\r\n  , THERMOSIPHONSEALEDTUBEHEATEXCHANGERS\r\n  , THERMOSIPHONCOILTYPEHEATEXCHANGERS\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCAlarmType\r\n   {\r\n      BELL\r\n  , BREAKGLASSBUTTON\r\n  , LIGHT\r\n  , MANUALPULLBOX\r\n  , SIREN\r\n  , WHISTLE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCAnalysisModelType\r\n   {\r\n      IN_PLANE_LOADING_2D\r\n  , OUT_PLANE_LOADING_2D\r\n  , LOADING_3D\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCAnalysisTheoryType\r\n   {\r\n      FIRST_ORDER_THEORY\r\n  , SECOND_ORDER_THEORY\r\n  , THIRD_ORDER_THEORY\r\n  , FULL_NONLINEAR_THEORY\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCArithmeticOperator\r\n   {\r\n      ADD\r\n  , DIVIDE\r\n  , MULTIPLY\r\n  , SUBTRACT\r\n   }\r\n\r\n\r\n   public enum IFCAssemblyPlace\r\n   {\r\n      SITE\r\n  , FACTORY\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCAudioVisualApplianceType\r\n   {\r\n      AMPLIFIER\r\n  , CAMERA\r\n  , DISPLAY\r\n  , MICROPHONE\r\n  , PLAYER\r\n  , PROJECTOR\r\n  , RECEIVER\r\n  , SPEAKER\r\n  , SWITCHER\r\n  , TELEPHONE\r\n  , TUNER\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCBSplineCurveForm\r\n   {\r\n      POLYLINE_FORM\r\n  , CIRCULAR_ARC\r\n  , ELLIPTIC_ARC\r\n  , PARABOLIC_ARC\r\n  , HYPERBOLIC_ARC\r\n  , UNSPECIFIED\r\n   }\r\n\r\n\r\n   public enum IFCBSplineSurfaceForm\r\n   {\r\n      PLANE_SURF\r\n  , CYLINDRICAL_SURF\r\n  , CONICAL_SURF\r\n  , SPHERICAL_SURF\r\n  , TOROIDAL_SURF\r\n  , SURF_OF_REVOLUTION\r\n  , RULED_SURF\r\n  , GENERALISED_CONE\r\n  , QUADRIC_SURF\r\n  , SURF_OF_LINEAR_EXTRUSION\r\n  , UNSPECIFIED\r\n   }\r\n\r\n\r\n   public enum IFCBeamType\r\n   {\r\n      BEAM\r\n  , JOIST\r\n  , HOLLOWCORE\r\n  , LINTEL\r\n  , SPANDREL\r\n  , T_BEAM\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCBenchmark\r\n   {\r\n      GREATERTHAN\r\n  , GREATERTHANOREQUALTO\r\n  , LESSTHAN\r\n  , LESSTHANOREQUALTO\r\n  , EQUALTO\r\n  , NOTEQUALTO\r\n  , INCLUDES\r\n  , NOTINCLUDES\r\n  , INCLUDEDIN\r\n  , NOTINCLUDEDIN\r\n   }\r\n\r\n\r\n   public enum IFCBoilerType\r\n   {\r\n      WATER\r\n  , STEAM\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCBooleanOperator\r\n   {\r\n      UNION\r\n  , INTERSECTION\r\n  , DIFFERENCE\r\n   }\r\n\r\n\r\n   public enum IFCBuildingElementPartType\r\n   {\r\n      INSULATION\r\n  , PRECASTPANEL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCBuildingElementProxyType\r\n   {\r\n      COMPLEX\r\n  , ELEMENT\r\n  , PARTIAL\r\n  , PROVISIONFORVOID\r\n  , PROVISIONFORSPACE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCBuildingSystemType\r\n   {\r\n      FENESTRATION\r\n  , FOUNDATION\r\n  , LOADBEARING\r\n  , OUTERSHELL\r\n  , SHADING\r\n  , TRANSPORT\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCBurnerType\r\n   {\r\n      USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCCableCarrierFittingType\r\n   {\r\n      BEND\r\n  , CROSS\r\n  , REDUCER\r\n  , TEE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCCableCarrierSegmentType\r\n   {\r\n      CABLELADDERSEGMENT\r\n  , CABLETRAYSEGMENT\r\n  , CABLETRUNKINGSEGMENT\r\n  , CONDUITSEGMENT\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCCableFittingType\r\n   {\r\n      CONNECTOR\r\n  , ENTRY\r\n  , EXIT\r\n  , JUNCTION\r\n  , TRANSITION\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCCableSegmentType\r\n   {\r\n      BUSBARSEGMENT\r\n  , CABLESEGMENT\r\n  , CONDUCTORSEGMENT\r\n  , CORESEGMENT\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCChangeAction\r\n   {\r\n      NOCHANGE\r\n  , MODIFIED\r\n  , ADDED\r\n  , DELETED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCChillerType\r\n   {\r\n      AIRCOOLED\r\n  , WATERCOOLED\r\n  , HEATRECOVERY\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCChimneyType\r\n   {\r\n      USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCCoilType\r\n   {\r\n      DXCOOLINGCOIL\r\n  , ELECTRICHEATINGCOIL\r\n  , GASHEATINGCOIL\r\n  , HYDRONICCOIL\r\n  , STEAMHEATINGCOIL\r\n  , WATERCOOLINGCOIL\r\n  , WATERHEATINGCOIL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCColumnType\r\n   {\r\n      COLUMN\r\n  , PILASTER\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCCommunicationsApplianceType\r\n   {\r\n      ANTENNA\r\n  , COMPUTER\r\n  , FAX\r\n  , GATEWAY\r\n  , MODEM\r\n  , NETWORKAPPLIANCE\r\n  , NETWORKBRIDGE\r\n  , NETWORKHUB\r\n  , PRINTER\r\n  , REPEATER\r\n  , ROUTER\r\n  , SCANNER\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCComplexPropertyTemplateType\r\n   {\r\n      P_COMPLEX\r\n  , Q_COMPLEX\r\n   }\r\n\r\n\r\n   public enum IFCCompressorType\r\n   {\r\n      DYNAMIC\r\n  , RECIPROCATING\r\n  , ROTARY\r\n  , SCROLL\r\n  , TROCHOIDAL\r\n  , SINGLESTAGE\r\n  , BOOSTER\r\n  , OPENTYPE\r\n  , HERMETIC\r\n  , SEMIHERMETIC\r\n  , WELDEDSHELLHERMETIC\r\n  , ROLLINGPISTON\r\n  , ROTARYVANE\r\n  , SINGLESCREW\r\n  , TWINSCREW\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCCondenserType\r\n   {\r\n      AIRCOOLED\r\n  , EVAPORATIVECOOLED\r\n  , WATERCOOLED\r\n  , WATERCOOLEDBRAZEDPLATE\r\n  , WATERCOOLEDSHELLCOIL\r\n  , WATERCOOLEDSHELLTUBE\r\n  , WATERCOOLEDTUBEINTUBE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCConnectionType\r\n   {\r\n      ATPATH\r\n  , ATSTART\r\n  , ATEND\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCConstraint\r\n   {\r\n      HARD\r\n  , SOFT\r\n  , ADVISORY\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCConstructionEquipmentResourceType\r\n   {\r\n      DEMOLISHING\r\n  , EARTHMOVING\r\n  , ERECTING\r\n  , HEATING\r\n  , LIGHTING\r\n  , PAVING\r\n  , PUMPING\r\n  , TRANSPORTING\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCConstructionMaterialResourceType\r\n   {\r\n      AGGREGATES\r\n  , CONCRETE\r\n  , DRYWALL\r\n  , FUEL\r\n  , GYPSUM\r\n  , MASONRY\r\n  , METAL\r\n  , PLASTIC\r\n  , WOOD\r\n  , NOTDEFINED\r\n  , USERDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCConstructionProductResourceType\r\n   {\r\n      ASSEMBLY\r\n  , FORMWORK\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCControllerType\r\n   {\r\n      FLOATING\r\n  , PROGRAMMABLE\r\n  , PROPORTIONAL\r\n  , MULTIPOSITION\r\n  , TWOPOSITION\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCCooledBeamType\r\n   {\r\n      ACTIVE\r\n  , PASSIVE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCCoolingTowerType\r\n   {\r\n      NATURALDRAFT\r\n  , MECHANICALINDUCEDDRAFT\r\n  , MECHANICALFORCEDDRAFT\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCCostItemType\r\n   {\r\n      USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCCostScheduleType\r\n   {\r\n      BUDGET\r\n  , COSTPLAN\r\n  , ESTIMATE\r\n  , TENDER\r\n  , PRICEDBILLOFQUANTITIES\r\n  , UNPRICEDBILLOFQUANTITIES\r\n  , SCHEDULEOFRATES\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCCoveringType\r\n   {\r\n      CEILING\r\n  , FLOORING\r\n  , CLADDING\r\n  , ROOFING\r\n  , MOLDING\r\n  , SKIRTINGBOARD\r\n  , INSULATION\r\n  , MEMBRANE\r\n  , SLEEVING\r\n  , WRAPPING\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCCrewResourceType\r\n   {\r\n      OFFICE\r\n  , SITE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCCurveInterpolation\r\n   {\r\n      LINEAR\r\n  , LOG_LINEAR\r\n  , LOG_LOG\r\n  , NOTDEFINED\r\n   }\r\n\r\n   public enum IFCCurtainWallType\r\n   {\r\n      USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n   public enum IFCDamperType\r\n   {\r\n      BACKDRAFTDAMPER\r\n  , BALANCINGDAMPER\r\n  , BLASTDAMPER\r\n  , CONTROLDAMPER\r\n  , FIREDAMPER\r\n  , FIRESMOKEDAMPER\r\n  , FUMEHOODEXHAUST\r\n  , GRAVITYDAMPER\r\n  , GRAVITYRELIEFDAMPER\r\n  , RELIEFDAMPER\r\n  , SMOKEDAMPER\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCDataOrigin\r\n   {\r\n      MEASURED\r\n  , PREDICTED\r\n  , SIMULATED\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCDerivedUnit\r\n   {\r\n      ANGULARVELOCITYUNIT\r\n  , AREADENSITYUNIT\r\n  , COMPOUNDPLANEANGLEUNIT\r\n  , DYNAMICVISCOSITYUNIT\r\n  , HEATFLUXDENSITYUNIT\r\n  , INTEGERCOUNTRATEUNIT\r\n  , ISOTHERMALMOISTURECAPACITYUNIT\r\n  , KINEMATICVISCOSITYUNIT\r\n  , LINEARVELOCITYUNIT\r\n  , MASSDENSITYUNIT\r\n  , MASSFLOWRATEUNIT\r\n  , MOISTUREDIFFUSIVITYUNIT\r\n  , MOLECULARWEIGHTUNIT\r\n  , SPECIFICHEATCAPACITYUNIT\r\n  , THERMALADMITTANCEUNIT\r\n  , THERMALCONDUCTANCEUNIT\r\n  , THERMALRESISTANCEUNIT\r\n  , THERMALTRANSMITTANCEUNIT\r\n  , VAPORPERMEABILITYUNIT\r\n  , VOLUMETRICFLOWRATEUNIT\r\n  , ROTATIONALFREQUENCYUNIT\r\n  , TORQUEUNIT\r\n  , MOMENTOFINERTIAUNIT\r\n  , LINEARMOMENTUNIT\r\n  , LINEARFORCEUNIT\r\n  , PLANARFORCEUNIT\r\n  , MODULUSOFELASTICITYUNIT\r\n  , SHEARMODULUSUNIT\r\n  , LINEARSTIFFNESSUNIT\r\n  , ROTATIONALSTIFFNESSUNIT\r\n  , MODULUSOFSUBGRADEREACTIONUNIT\r\n  , ACCELERATIONUNIT\r\n  , CURVATUREUNIT\r\n  , HEATINGVALUEUNIT\r\n  , IONCONCENTRATIONUNIT\r\n  , LUMINOUSINTENSITYDISTRIBUTIONUNIT\r\n  , MASSPERLENGTHUNIT\r\n  , MODULUSOFLINEARSUBGRADEREACTIONUNIT\r\n  , MODULUSOFROTATIONALSUBGRADEREACTIONUNIT\r\n  , PHUNIT\r\n  , ROTATIONALMASSUNIT\r\n  , SECTIONAREAINTEGRALUNIT\r\n  , SECTIONMODULUSUNIT\r\n  , SOUNDPOWERLEVELUNIT\r\n  , SOUNDPOWERUNIT\r\n  , SOUNDPRESSURELEVELUNIT\r\n  , SOUNDPRESSUREUNIT\r\n  , TEMPERATUREGRADIENTUNIT\r\n  , TEMPERATURERATEOFCHANGEUNIT\r\n  , THERMALEXPANSIONCOEFFICIENTUNIT\r\n  , WARPINGCONSTANTUNIT\r\n  , WARPINGMOMENTUNIT\r\n  , USERDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCDirectionSense\r\n   {\r\n      POSITIVE\r\n  , NEGATIVE\r\n   }\r\n\r\n\r\n   public enum IFCDiscreteAccessoryType\r\n   {\r\n      ANCHORPLATE\r\n  , BRACKET\r\n  , SHOE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCDistributionChamberElementType\r\n   {\r\n      FORMEDDUCT\r\n  , INSPECTIONCHAMBER\r\n  , INSPECTIONPIT\r\n  , MANHOLE\r\n  , METERCHAMBER\r\n  , SUMP\r\n  , TRENCH\r\n  , VALVECHAMBER\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCDistributionPortType\r\n   {\r\n      CABLE\r\n  , CABLECARRIER\r\n  , DUCT\r\n  , PIPE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCDistributionSystem\r\n   {\r\n      AIRCONDITIONING\r\n  , AUDIOVISUAL\r\n  , CHEMICAL\r\n  , CHILLEDWATER\r\n  , COMMUNICATION\r\n  , COMPRESSEDAIR\r\n  , CONDENSERWATER\r\n  , CONTROL\r\n  , CONVEYING\r\n  , DATA\r\n  , DISPOSAL\r\n  , DOMESTICCOLDWATER\r\n  , DOMESTICHOTWATER\r\n  , DRAINAGE\r\n  , EARTHING\r\n  , ELECTRICAL\r\n  , ELECTROACOUSTIC\r\n  , EXHAUST\r\n  , FIREPROTECTION\r\n  , FUEL\r\n  , GAS\r\n  , HAZARDOUS\r\n  , HEATING\r\n  , LIGHTING\r\n  , LIGHTNINGPROTECTION\r\n  , MUNICIPALSOLIDWASTE\r\n  , OIL\r\n  , OPERATIONAL\r\n  , POWERGENERATION\r\n  , RAINWATER\r\n  , REFRIGERATION\r\n  , SECURITY\r\n  , SEWAGE\r\n  , SIGNAL\r\n  , STORMWATER\r\n  , TELEPHONE\r\n  , TV\r\n  , VACUUM\r\n  , VENT\r\n  , VENTILATION\r\n  , WASTEWATER\r\n  , WATERSUPPLY\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCDocumentConfidentiality\r\n   {\r\n      PUBLIC\r\n  , RESTRICTED\r\n  , CONFIDENTIAL\r\n  , PERSONAL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCDocumentStatus\r\n   {\r\n      DRAFT\r\n  , FINALDRAFT\r\n  , FINAL\r\n  , REVISION\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCDoorPanelOperation\r\n   {\r\n      SWINGING\r\n  , DOUBLE_ACTING\r\n  , SLIDING\r\n  , FOLDING\r\n  , REVOLVING\r\n  , ROLLINGUP\r\n  , FIXEDPANEL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCDoorPanelPosition\r\n   {\r\n      LEFT\r\n  , MIDDLE\r\n  , RIGHT\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCDoorStyleConstruction\r\n   {\r\n      ALUMINIUM\r\n  , HIGH_GRADE_STEEL\r\n  , STEEL\r\n  , WOOD\r\n  , ALUMINIUM_WOOD\r\n  , ALUMINIUM_PLASTIC\r\n  , PLASTIC\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCDoorStyleOperation\r\n   {\r\n      SINGLE_SWING_LEFT\r\n  , SINGLE_SWING_RIGHT\r\n  , DOUBLE_DOOR_SINGLE_SWING\r\n  , DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT\r\n  , DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT\r\n  , DOUBLE_SWING_LEFT\r\n  , DOUBLE_SWING_RIGHT\r\n  , DOUBLE_DOOR_DOUBLE_SWING\r\n  , SLIDING_TO_LEFT\r\n  , SLIDING_TO_RIGHT\r\n  , DOUBLE_DOOR_SLIDING\r\n  , FOLDING_TO_LEFT\r\n  , FOLDING_TO_RIGHT\r\n  , DOUBLE_DOOR_FOLDING\r\n  , REVOLVING\r\n  , ROLLINGUP\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCDoorType\r\n   {\r\n      DOOR\r\n  , GATE\r\n  , TRAPDOOR\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCDoorTypeOperation\r\n   {\r\n      SINGLE_SWING_LEFT\r\n  , SINGLE_SWING_RIGHT\r\n  , DOUBLE_DOOR_SINGLE_SWING\r\n  , DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT\r\n  , DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT\r\n  , DOUBLE_SWING_LEFT\r\n  , DOUBLE_SWING_RIGHT\r\n  , DOUBLE_DOOR_DOUBLE_SWING\r\n  , SLIDING_TO_LEFT\r\n  , SLIDING_TO_RIGHT\r\n  , DOUBLE_DOOR_SLIDING\r\n  , FOLDING_TO_LEFT\r\n  , FOLDING_TO_RIGHT\r\n  , DOUBLE_DOOR_FOLDING\r\n  , REVOLVING\r\n  , ROLLINGUP\r\n  , SWING_FIXED_LEFT\r\n  , SWING_FIXED_RIGHT\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCDuctFittingType\r\n   {\r\n      BEND\r\n  , CONNECTOR\r\n  , ENTRY\r\n  , EXIT\r\n  , JUNCTION\r\n  , OBSTRUCTION\r\n  , TRANSITION\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCDuctSegmentType\r\n   {\r\n      RIGIDSEGMENT\r\n  , FLEXIBLESEGMENT\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCDuctSilencerType\r\n   {\r\n      FLATOVAL\r\n  , RECTANGULAR\r\n  , ROUND\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCElectricApplianceType\r\n   {\r\n      DISHWASHER\r\n  , ELECTRICCOOKER\r\n  , FREESTANDINGELECTRICHEATER\r\n  , FREESTANDINGFAN\r\n  , FREESTANDINGWATERHEATER\r\n  , FREESTANDINGWATERCOOLER\r\n  , FREEZER\r\n  , FRIDGE_FREEZER\r\n  , HANDDRYER\r\n  , KITCHENMACHINE\r\n  , MICROWAVE\r\n  , PHOTOCOPIER\r\n  , REFRIGERATOR\r\n  , TUMBLEDRYER\r\n  , VENDINGMACHINE\r\n  , WASHINGMACHINE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCElectricDistributionBoardType\r\n   {\r\n      CONSUMERUNIT\r\n  , DISTRIBUTIONBOARD\r\n  , MOTORCONTROLCENTRE\r\n  , SWITCHBOARD\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCElectricFlowStorageDeviceType\r\n   {\r\n      BATTERY\r\n  , CAPACITORBANK\r\n  , HARMONICFILTER\r\n  , INDUCTORBANK\r\n  , UPS\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCElectricGeneratorType\r\n   {\r\n      CHP\r\n  , ENGINEGENERATOR\r\n  , STANDALONE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCElectricMotorType\r\n   {\r\n      DC\r\n  , INDUCTION\r\n  , POLYPHASE\r\n  , RELUCTANCESYNCHRONOUS\r\n  , SYNCHRONOUS\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCElectricTimeControlType\r\n   {\r\n      TIMECLOCK\r\n  , TIMEDELAY\r\n  , RELAY\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCElementAssemblyType\r\n   {\r\n      ACCESSORY_ASSEMBLY\r\n  , ARCH\r\n  , BEAM_GRID\r\n  , BRACED_FRAME\r\n  , GIRDER\r\n  , REINFORCEMENT_UNIT\r\n  , RIGID_FRAME\r\n  , SLAB_FIELD\r\n  , TRUSS\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCElementComposition\r\n   {\r\n      COMPLEX\r\n  , ELEMENT\r\n  , PARTIAL\r\n   }\r\n\r\n\r\n   public enum IFCEngineType\r\n   {\r\n      EXTERNALCOMBUSTION\r\n  , INTERNALCOMBUSTION\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCEvaporativeCoolerType\r\n   {\r\n      DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER\r\n  , DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER\r\n  , DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER\r\n  , DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER\r\n  , DIRECTEVAPORATIVEAIRWASHER\r\n  , INDIRECTEVAPORATIVEPACKAGEAIRCOOLER\r\n  , INDIRECTEVAPORATIVEWETCOIL\r\n  , INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER\r\n  , INDIRECTDIRECTCOMBINATION\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCEvaporatorType\r\n   {\r\n      DIRECTEXPANSION\r\n  , DIRECTEXPANSIONSHELLANDTUBE\r\n  , DIRECTEXPANSIONTUBEINTUBE\r\n  , DIRECTEXPANSIONBRAZEDPLATE\r\n  , FLOODEDSHELLANDTUBE\r\n  , SHELLANDCOIL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCEventTriggerType\r\n   {\r\n      EVENTRULE\r\n  , EVENTMESSAGE\r\n  , EVENTTIME\r\n  , EVENTCOMPLEX\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCEventType\r\n   {\r\n      STARTEVENT\r\n  , ENDEVENT\r\n  , INTERMEDIATEEVENT\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCExternalSpatialElementType\r\n   {\r\n      EXTERNAL\r\n  , EXTERNAL_EARTH\r\n  , EXTERNAL_WATER\r\n  , EXTERNAL_FIRE\r\n  , USERDEFINED\r\n  , NOTDEFIEND\r\n   }\r\n\r\n\r\n   public enum IFCFanType\r\n   {\r\n      CENTRIFUGALFORWARDCURVED\r\n  , CENTRIFUGALRADIAL\r\n  , CENTRIFUGALBACKWARDINCLINEDCURVED\r\n  , CENTRIFUGALAIRFOIL\r\n  , TUBEAXIAL\r\n  , VANEAXIAL\r\n  , PROPELLORAXIAL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCFastenerType\r\n   {\r\n      GLUE\r\n  , MORTAR\r\n  , WELD\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCFilterType\r\n   {\r\n      AIRPARTICLEFILTER\r\n  , COMPRESSEDAIRFILTER\r\n  , ODORFILTER\r\n  , OILFILTER\r\n  , STRAINER\r\n  , WATERFILTER\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCFireSuppressionTerminalType\r\n   {\r\n      BREECHINGINLET\r\n  , FIREHYDRANT\r\n  , HOSEREEL\r\n  , SPRINKLER\r\n  , SPRINKLERDEFLECTOR\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCFlowDirection\r\n   {\r\n      SOURCE\r\n  , SINK\r\n  , SOURCEANDSINK\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCFlowInstrumentType\r\n   {\r\n      PRESSUREGAUGE\r\n  , THERMOMETER\r\n  , AMMETER\r\n  , FREQUENCYMETER\r\n  , POWERFACTORMETER\r\n  , PHASEANGLEMETER\r\n  , VOLTMETER_PEAK\r\n  , VOLTMETER_RMS\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCFlowMeterType\r\n   {\r\n      ENERGYMETER\r\n  , GASMETER\r\n  , OILMETER\r\n  , WATERMETER\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCFootingType\r\n   {\r\n      CAISSON_FOUNDATION\r\n  , FOOTING_BEAM\r\n  , PAD_FOOTING\r\n  , PILE_CAP\r\n  , STRIP_FOOTING\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCFurnitureType\r\n   {\r\n      CHAIR\r\n  , TABLE\r\n  , DESK\r\n  , BED\r\n  , FILECABINET\r\n  , SHELF\r\n  , SOFA\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCGeographicElementType\r\n   {\r\n      TERRAIN\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCGeometricProjection\r\n   {\r\n      GRAPH_VIEW\r\n  , SKETCH_VIEW\r\n  , MODEL_VIEW\r\n  , PLAN_VIEW\r\n  , REFLECTED_PLAN_VIEW\r\n  , SECTION_VIEW\r\n  , ELEVATION_VIEW\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCGlobalOrLocal\r\n   {\r\n      GLOBAL_COORDS\r\n  , LOCAL_COORDS\r\n   }\r\n\r\n\r\n   public enum IFCGridType\r\n   {\r\n      RECTANGULAR\r\n  , RADIAL\r\n  , TRIANGULAR\r\n  , IRREGULAR\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCHeatExchangerType\r\n   {\r\n      PLATE\r\n  , SHELLANDTUBE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCHumidifierType\r\n   {\r\n      STEAMINJECTION\r\n  , ADIABATICAIRWASHER\r\n  , ADIABATICPAN\r\n  , ADIABATICWETTEDELEMENT\r\n  , ADIABATICATOMIZING\r\n  , ADIABATICULTRASONIC\r\n  , ADIABATICRIGIDMEDIA\r\n  , ADIABATICCOMPRESSEDAIRNOZZLE\r\n  , ASSISTEDELECTRIC\r\n  , ASSISTEDNATURALGAS\r\n  , ASSISTEDPROPANE\r\n  , ASSISTEDBUTANE\r\n  , ASSISTEDSTEAM\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCInterceptorType\r\n   {\r\n      CYCLONIC\r\n  , GREASE\r\n  , OIL\r\n  , PETROL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCInternalOrExternal\r\n   {\r\n      INTERNAL\r\n  , EXTERNAL\r\n  , EXTERNAL_EARTH\r\n  , EXTERNAL_WATER\r\n  , EXTERNAL_FIRE\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCInventoryType\r\n   {\r\n      ASSETINVENTORY\r\n  , SPACEINVENTORY\r\n  , FURNITUREINVENTORY\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCJunctionBoxType\r\n   {\r\n      DATA\r\n  , POWER\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCKnotType\r\n   {\r\n      UNIFORM_KNOTS\r\n  , QUASI_UNIFORM_KNOTS\r\n  , PIECEWISE_BEZIER_KNOTS\r\n  , UNSPECIFIED\r\n   }\r\n\r\n\r\n   public enum IFCLaborResourceType\r\n   {\r\n      ADMINISTRATION\r\n  , CARPENTRY\r\n  , CLEANING\r\n  , CONCRETE\r\n  , DRYWALL\r\n  , ELECTRIC\r\n  , FINISHING\r\n  , FLOORING\r\n  , GENERAL\r\n  , HVAC\r\n  , LANDSCAPING\r\n  , MASONRY\r\n  , PAINTING\r\n  , PAVING\r\n  , PLUMBING\r\n  , ROOFING\r\n  , SITEGRADING\r\n  , STEELWORK\r\n  , SURVEYING\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCLampType\r\n   {\r\n      COMPACTFLUORESCENT\r\n  , FLUORESCENT\r\n  , HALOGEN\r\n  , HIGHPRESSUREMERCURY\r\n  , HIGHPRESSURESODIUM\r\n  , LED\r\n  , METALHALIDE\r\n  , OLED\r\n  , TUNGSTENFILAMENT\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCLayerSetDirection\r\n   {\r\n      AXIS1\r\n  , AXIS2\r\n  , AXIS3\r\n   }\r\n\r\n\r\n   public enum IFCLightDistributionCurve\r\n   {\r\n      TYPE_A\r\n  , TYPE_B\r\n  , TYPE_C\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCLightEmissionSource\r\n   {\r\n      COMPACTFLUORESCENT\r\n  , FLUORESCENT\r\n  , HIGHPRESSUREMERCURY\r\n  , HIGHPRESSURESODIUM\r\n  , LIGHTEMITTINGDIODE\r\n  , LOWPRESSURESODIUM\r\n  , LOWVOLTAGEHALOGEN\r\n  , MAINVOLTAGEHALOGEN\r\n  , METALHALIDE\r\n  , TUNGSTENFILAMENT\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCLightFixtureType\r\n   {\r\n      POINTSOURCE\r\n  , DIRECTIONSOURCE\r\n  , SECURITYLIGHTING\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCLoadGroupType\r\n   {\r\n      LOAD_GROUP\r\n  , LOAD_CASE\r\n  , LOAD_COMBINATION\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCLogicalOperator\r\n   {\r\n      LOGICALAND\r\n  , LOGICALOR\r\n  , LOGICALXOR\r\n  , LOGICALNOTAND\r\n  , LOGICALNOTOR\r\n   }\r\n\r\n\r\n   public enum IFCMechanicalFastenerType\r\n   {\r\n      ANCHORBOLT\r\n  , BOLT\r\n  , DOWEL\r\n  , NAIL\r\n  , NAILPLATE\r\n  , RIVET\r\n  , SCREW\r\n  , SHEARCONNECTOR\r\n  , STAPLE\r\n  , STUDSHEARCONNECTOR\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCMedicalDeviceType\r\n   {\r\n      AIRSTATION\r\n  , FEEDAIRUNIT\r\n  , OXYGENGENERATOR\r\n  , OXYGENPLANT\r\n  , VACUUMSTATION\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCMemberType\r\n   {\r\n      BRACE\r\n  , CHORD\r\n  , COLLAR\r\n  , MEMBER\r\n  , MULLION\r\n  , PLATE\r\n  , POST\r\n  , PURLIN\r\n  , RAFTER\r\n  , STRINGER\r\n  , STRUT\r\n  , STUD\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCMotorConnectionType\r\n   {\r\n      BELTDRIVE\r\n  , COUPLING\r\n  , DIRECTDRIVE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCNullStyle\r\n   { NULL }\r\n\r\n\r\n   public enum IFCObjectType\r\n   {\r\n      PRODUCT\r\n  , PROCESS\r\n  , CONTROL\r\n  , RESOURCE\r\n  , ACTOR\r\n  , GROUP\r\n  , PROJECT\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCObjective\r\n   {\r\n      CODECOMPLIANCE\r\n  , CODEWAIVER\r\n  , DESIGNINTENT\r\n  , EXTERNAL\r\n  , HEALTHANDSAFETY\r\n  , MERGECONFLICT\r\n  , MODELVIEW\r\n  , PARAMETER\r\n  , REQUIREMENT\r\n  , SPECIFICATION\r\n  , TRIGGERCONDITION\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCOccupantType\r\n   {\r\n      ASSIGNEE\r\n  , ASSIGNOR\r\n  , LESSEE\r\n  , LESSOR\r\n  , LETTINGAGENT\r\n  , OWNER\r\n  , TENANT\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCOpeningElementType\r\n   {\r\n      OPENING\r\n  , RECESS\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCOutletType\r\n   {\r\n      AUDIOVISUALOUTLET\r\n  , COMMUNICATIONSOUTLET\r\n  , POWEROUTLET\r\n  , DATAOUTLET\r\n  , TELEPHONEOUTLET\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCPerformanceHistoryType\r\n   {\r\n      USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCPermeableCoveringOperation\r\n   {\r\n      GRILL\r\n  , LOUVER\r\n  , SCREEN\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCPermitType\r\n   {\r\n      ACCESS\r\n  , BUILDING\r\n  , WORK\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCPhysicalOrVirtual\r\n   {\r\n      PHYSICAL\r\n  , VIRTUAL\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCPileConstruction\r\n   {\r\n      CAST_IN_PLACE\r\n  , COMPOSITE\r\n  , PRECAST_CONCRETE\r\n  , PREFAB_STEEL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCPileType\r\n   {\r\n      BORED\r\n  , DRIVEN\r\n  , JETGROUTING\r\n  , COHESION\r\n  , FRICTION\r\n  , SUPPORT\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCPipeFittingType\r\n   {\r\n      BEND\r\n  , CONNECTOR\r\n  , ENTRY\r\n  , EXIT\r\n  , JUNCTION\r\n  , OBSTRUCTION\r\n  , TRANSITION\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCPipeSegmentType\r\n   {\r\n      CULVERT\r\n  , FLEXIBLESEGMENT\r\n  , RIGIDSEGMENT\r\n  , GUTTER\r\n  , SPOOL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCPlateType\r\n   {\r\n      CURTAIN_PANEL\r\n  , SHEET\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCProcedureType\r\n   {\r\n      ADVICE_CAUTION\r\n  , ADVICE_NOTE\r\n  , ADVICE_WARNING\r\n  , CALIBRATION\r\n  , DIAGNOSTIC\r\n  , SHUTDOWN\r\n  , STARTUP\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCProfileType\r\n   {\r\n      CURVE\r\n  , AREA\r\n   }\r\n\r\n\r\n   public enum IFCProjectOrderType\r\n   {\r\n      CHANGEORDER\r\n  , MAINTENANCEWORKORDER\r\n  , MOVEORDER\r\n  , PURCHASEORDER\r\n  , WORKORDER\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCProjectedOrTrueLength\r\n   {\r\n      PROJECTED_LENGTH\r\n  , TRUE_LENGTH\r\n   }\r\n\r\n\r\n   public enum IFCProjectionElementType\r\n   {\r\n      USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCPropertySetTemplateType\r\n   {\r\n      PSET_TYPEDRIVENONLY\r\n  , PSET_TYPEDRIVENOVERRIDE\r\n  , PSET_OCCURRENCEDRIVEN\r\n  , PSET_PERFORMANCEDRIVEN\r\n  , QTO_TYPEDRIVENONLY\r\n  , QTO_TYPEDRIVENOVERRIDE\r\n  , QTO_OCCURRENCEDRIVEN\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCProtectiveDeviceTrippingUnitType\r\n   {\r\n      ELECTRONIC\r\n  , ELECTROMAGNETIC\r\n  , RESIDUALCURRENT\r\n  , THERMAL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCProtectiveDeviceType\r\n   {\r\n      CIRCUITBREAKER\r\n  , EARTHLEAKAGECIRCUITBREAKER\r\n  , EARTHINGSWITCH\r\n  , FUSEDISCONNECTOR\r\n  , RESIDUALCURRENTCIRCUITBREAKER\r\n  , RESIDUALCURRENTSWITCH\r\n  , VARISTOR\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCPumpType\r\n   {\r\n      CIRCULATOR\r\n  , ENDSUCTION\r\n  , SPLITCASE\r\n  , SUBMERSIBLEPUMP\r\n  , SUMPPUMP\r\n  , VERTICALINLINE\r\n  , VERTICALTURBINE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCRailingType\r\n   {\r\n      HANDRAIL\r\n  , GUARDRAIL\r\n  , BALUSTRADE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCRampFlightType\r\n   {\r\n      STRAIGHT\r\n  , SPIRAL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCRampType\r\n   {\r\n      STRAIGHT_RUN_RAMP\r\n  , TWO_STRAIGHT_RUN_RAMP\r\n  , QUARTER_TURN_RAMP\r\n  , TWO_QUARTER_TURN_RAMP\r\n  , HALF_TURN_RAMP\r\n  , SPIRAL_RAMP\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCRecurrenceType\r\n   {\r\n      DAILY\r\n  , WEEKLY\r\n  , MONTHLY_BY_DAY_OF_MONTH\r\n  , MONTHLY_BY_POSITION\r\n  , BY_DAY_COUNT\r\n  , BY_WEEKDAY_COUNT\r\n  , YEARLY_BY_DAY_OF_MONTH\r\n  , YEARLY_BY_POSITION\r\n   }\r\n\r\n\r\n   public enum IFCReflectanceMethod\r\n   {\r\n      BLINN\r\n  , FLAT\r\n  , GLASS\r\n  , MATT\r\n  , METAL\r\n  , MIRROR\r\n  , PHONG\r\n  , PLASTIC\r\n  , STRAUSS\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCReinforcingBarRole\r\n   {\r\n      MAIN\r\n  , SHEAR\r\n  , LIGATURE\r\n  , STUD\r\n  , PUNCHING\r\n  , EDGE\r\n  , RING\r\n  , ANCHORING\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCReinforcingBarSurface\r\n   {\r\n      PLAIN\r\n  , TEXTURED\r\n   }\r\n\r\n\r\n   public enum IFCReinforcingBarType\r\n   {\r\n      ANCHORING\r\n  , EDGE\r\n  , LIGATURE\r\n  , MAIN\r\n  , PUNCHING\r\n  , RING\r\n  , SHEAR\r\n  , STUD\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCReinforcingMeshType\r\n   {\r\n      USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCRole\r\n   {\r\n      SUPPLIER\r\n  , MANUFACTURER\r\n  , CONTRACTOR\r\n  , SUBCONTRACTOR\r\n  , ARCHITECT\r\n  , STRUCTURALENGINEER\r\n  , COSTENGINEER\r\n  , CLIENT\r\n  , BUILDINGOWNER\r\n  , BUILDINGOPERATOR\r\n  , MECHANICALENGINEER\r\n  , ELECTRICALENGINEER\r\n  , PROJECTMANAGER\r\n  , FACILITIESMANAGER\r\n  , CIVILENGINEER\r\n  , COMMISSIONINGENGINEER\r\n  , ENGINEER\r\n  , OWNER\r\n  , CONSULTANT\r\n  , CONSTRUCTIONMANAGER\r\n  , FIELDCONSTRUCTIONMANAGER\r\n  , RESELLER\r\n  , USERDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCRoofType\r\n   {\r\n      FLAT_ROOF\r\n  , SHED_ROOF\r\n  , GABLE_ROOF\r\n  , HIP_ROOF\r\n  , HIPPED_GABLE_ROOF\r\n  , GAMBREL_ROOF\r\n  , MANSARD_ROOF\r\n  , BARREL_ROOF\r\n  , RAINBOW_ROOF\r\n  , BUTTERFLY_ROOF\r\n  , PAVILION_ROOF\r\n  , DOME_ROOF\r\n  , FREEFORM\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCSIPrefix\r\n   {\r\n      EXA\r\n  , PETA\r\n  , TERA\r\n  , GIGA\r\n  , MEGA\r\n  , KILO\r\n  , HECTO\r\n  , DECA\r\n  , DECI\r\n  , CENTI\r\n  , MILLI\r\n  , MICRO\r\n  , NANO\r\n  , PICO\r\n  , FEMTO\r\n  , ATTO\r\n   }\r\n\r\n\r\n   public enum IFCSIUnitName\r\n   {\r\n      AMPERE\r\n  , BECQUEREL\r\n  , CANDELA\r\n  , COULOMB\r\n  , CUBIC_METRE\r\n  , DEGREE_CELSIUS\r\n  , FARAD\r\n  , GRAM\r\n  , GRAY\r\n  , HENRY\r\n  , HERTZ\r\n  , JOULE\r\n  , KELVIN\r\n  , LUMEN\r\n  , LUX\r\n  , METRE\r\n  , MOLE\r\n  , NEWTON\r\n  , OHM\r\n  , PASCAL\r\n  , RADIAN\r\n  , SECOND\r\n  , SIEMENS\r\n  , SIEVERT\r\n  , SQUARE_METRE\r\n  , STERADIAN\r\n  , TESLA\r\n  , VOLT\r\n  , WATT\r\n  , WEBER\r\n   }\r\n\r\n\r\n   public enum IFCSanitaryTerminalType\r\n   {\r\n      BATH\r\n  , BIDET\r\n  , CISTERN\r\n  , SHOWER\r\n  , SINK\r\n  , SANITARYFOUNTAIN\r\n  , TOILETPAN\r\n  , URINAL\r\n  , WASHHANDBASIN\r\n  , WCSEAT\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCSectionType\r\n   {\r\n      UNIFORM\r\n  , TAPERED\r\n   }\r\n\r\n\r\n   public enum IFCSensorType\r\n   {\r\n      COSENSOR\r\n  , CO2SENSOR\r\n  , CONDUCTANCESENSOR\r\n  , CONTACTSENSOR\r\n  , FIRESENSOR\r\n  , FLOWSENSOR\r\n  , FROSTSENSOR\r\n  , GASSENSOR\r\n  , HEATSENSOR\r\n  , HUMIDITYSENSOR\r\n  , IDENTIFIERSENSOR\r\n  , IONCONCENTRATIONSENSOR\r\n  , LEVELSENSOR\r\n  , LIGHTSENSOR\r\n  , MOISTURESENSOR\r\n  , MOVEMENTSENSOR\r\n  , PHSENSOR\r\n  , PRESSURESENSOR\r\n  , RADIATIONSENSOR\r\n  , RADIOACTIVITYSENSOR\r\n  , SMOKESENSOR\r\n  , SOUNDSENSOR\r\n  , TEMPERATURESENSOR\r\n  , WINDSENSOR\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCSequence\r\n   {\r\n      START_START\r\n  , START_FINISH\r\n  , FINISH_START\r\n  , FINISH_FINISH\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCShadingDeviceType\r\n   {\r\n      JALOUSIE\r\n  , SHUTTER\r\n  , AWNING\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCSimplePropertyTemplateType\r\n   {\r\n      P_SINGLEVALUE\r\n  , P_ENUMERATEDVALUE\r\n  , P_BOUNDEDVALUE\r\n  , P_LISTVALUE\r\n  , P_TABLEVALUE\r\n  , P_REFERENCEVALUE\r\n  , Q_LENGTH\r\n  , Q_AREA\r\n  , Q_VOLUME\r\n  , Q_COUNT\r\n  , Q_WEIGHT\r\n  , Q_TIME\r\n   }\r\n\r\n\r\n   public enum IFCSlabType\r\n   {\r\n      FLOOR\r\n  , ROOF\r\n  , LANDING\r\n  , BASESLAB\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCSolarDeviceType\r\n   {\r\n      SOLARCOLLECTOR\r\n  , SOLARPANEL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCSpaceHeaterType\r\n   {\r\n      CONVECTOR\r\n  , RADIATOR\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCSpaceType\r\n   {\r\n      SPACE\r\n  , PARKING\r\n  , GFA\r\n  , INTERNAL\r\n  , EXTERNAL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCSpatialZoneType\r\n   {\r\n      CONSTRUCTION\r\n  , FIRESAFETY\r\n  , LIGHTING\r\n  , OCCUPANCY\r\n  , SECURITY\r\n  , THERMAL\r\n  , TRANSPORT\r\n  , VENTILATION\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCStackTerminalType\r\n   {\r\n      BIRDCAGE\r\n  , COWL\r\n  , RAINWATERHOPPER\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCStairFlightType\r\n   {\r\n      STRAIGHT\r\n  , WINDER\r\n  , SPIRAL\r\n  , CURVED\r\n  , FREEFORM\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCStairType\r\n   {\r\n      STRAIGHT_RUN_STAIR\r\n  , TWO_STRAIGHT_RUN_STAIR\r\n  , QUARTER_WINDING_STAIR\r\n  , QUARTER_TURN_STAIR\r\n  , HALF_WINDING_STAIR\r\n  , HALF_TURN_STAIR\r\n  , TWO_QUARTER_WINDING_STAIR\r\n  , TWO_QUARTER_TURN_STAIR\r\n  , THREE_QUARTER_WINDING_STAIR\r\n  , THREE_QUARTER_TURN_STAIR\r\n  , SPIRAL_STAIR\r\n  , DOUBLE_RETURN_STAIR\r\n  , CURVED_RUN_STAIR\r\n  , TWO_CURVED_RUN_STAIR\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCState\r\n   {\r\n      READWRITE\r\n  , READONLY\r\n  , LOCKED\r\n  , READWRITELOCKED\r\n  , READONLYLOCKED\r\n   }\r\n\r\n\r\n   public enum IFCStructuralCurveActivityType\r\n   {\r\n      CONST\r\n  , LINEAR\r\n  , POLYGONAL\r\n  , EQUIDISTANT\r\n  , SINUS\r\n  , PARABOLA\r\n  , DISCRETE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCStructuralCurveMemberType\r\n   {\r\n      RIGID_JOINED_MEMBER\r\n  , PIN_JOINED_MEMBER\r\n  , CABLE\r\n  , TENSION_MEMBER\r\n  , COMPRESSION_MEMBER\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCStructuralSurfaceActivityType\r\n   {\r\n      CONST\r\n  , BILINEAR\r\n  , DISCRETE\r\n  , ISOCONTOUR\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCStructuralSurfaceMemberType\r\n   {\r\n      BENDING_ELEMENT\r\n  , MEMBRANE_ELEMENT\r\n  , SHELL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCSubContractResourceType\r\n   {\r\n      PURCHASE\r\n  , WORK\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCSurfaceFeatureType\r\n   {\r\n      MARK\r\n  , TAG\r\n  , TREATMENT\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCSurfaceSide\r\n   {\r\n      POSITIVE\r\n  , NEGATIVE\r\n  , BOTH\r\n   }\r\n\r\n\r\n   public enum IFCSwitchingDeviceType\r\n   {\r\n      CONTACTOR\r\n  , DIMMERSWITCH\r\n  , EMERGENCYSTOP\r\n  , KEYPAD\r\n  , MOMENTARYSWITCH\r\n  , SELECTORSWITCH\r\n  , STARTER\r\n  , SWITCHDISCONNECTOR\r\n  , TOGGLESWITCH\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCSystemFurnitureElementType\r\n   {\r\n      PANEL\r\n  , WORKSURFACE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCTankType\r\n   {\r\n      BASIN\r\n  , BREAKPRESSURE\r\n  , EXPANSION\r\n  , FEEDANDEXPANSION\r\n  , PRESSUREVESSEL\r\n  , STORAGE\r\n  , VESSEL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCTaskDuration\r\n   {\r\n      ELAPSEDTIME\r\n  , WORKTIME\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCTaskType\r\n   {\r\n      ATTENDANCE\r\n  , CONSTRUCTION\r\n  , DEMOLITION\r\n  , DISMANTLE\r\n  , DISPOSAL\r\n  , INSTALLATION\r\n  , LOGISTIC\r\n  , MAINTENANCE\r\n  , MOVE\r\n  , OPERATION\r\n  , REMOVAL\r\n  , RENOVATION\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCTendonAnchorType\r\n   {\r\n      COUPLER\r\n  , FIXED_END\r\n  , TENSIONING_END\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCTendonType\r\n   {\r\n      BAR\r\n  , COATED\r\n  , STRAND\r\n  , WIRE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCTextPath\r\n   {\r\n      LEFT\r\n  , RIGHT\r\n  , UP\r\n  , DOWN\r\n   }\r\n\r\n\r\n   public enum IFCTimeSeriesDataType\r\n   {\r\n      CONTINUOUS\r\n  , DISCRETE\r\n  , DISCRETEBINARY\r\n  , PIECEWISEBINARY\r\n  , PIECEWISECONSTANT\r\n  , PIECEWISECONTINUOUS\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCTransformerType\r\n   {\r\n      CURRENT\r\n  , FREQUENCY\r\n  , INVERTER\r\n  , RECTIFIER\r\n  , VOLTAGE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCTransitionCode\r\n   {\r\n      DISCONTINUOUS\r\n  , CONTINUOUS\r\n  , CONTSAMEGRADIENT\r\n  , CONTSAMEGRADIENTSAMECURVATURE\r\n   }\r\n\r\n\r\n   public enum IFCTransportElementType\r\n   {\r\n      ELEVATOR\r\n  , ESCALATOR\r\n  , MOVINGWALKWAY\r\n  , CRANEWAY\r\n  , LIFTINGGEAR\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCTrimmingPreference\r\n   {\r\n      CARTESIAN\r\n  , PARAMETER\r\n  , UNSPECIFIED\r\n   }\r\n\r\n\r\n   public enum IFCTubeBundleType\r\n   {\r\n      FINNED\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCUnit\r\n   {\r\n      ABSORBEDDOSEUNIT\r\n  , AMOUNTOFSUBSTANCEUNIT\r\n  , AREAUNIT\r\n  , DOSEEQUIVALENTUNIT\r\n  , ELECTRICCAPACITANCEUNIT\r\n  , ELECTRICCHARGEUNIT\r\n  , ELECTRICCONDUCTANCEUNIT\r\n  , ELECTRICCURRENTUNIT\r\n  , ELECTRICRESISTANCEUNIT\r\n  , ELECTRICVOLTAGEUNIT\r\n  , ENERGYUNIT\r\n  , FORCEUNIT\r\n  , FREQUENCYUNIT\r\n  , ILLUMINANCEUNIT\r\n  , INDUCTANCEUNIT\r\n  , LENGTHUNIT\r\n  , LUMINOUSFLUXUNIT\r\n  , LUMINOUSINTENSITYUNIT\r\n  , MAGNETICFLUXDENSITYUNIT\r\n  , MAGNETICFLUXUNIT\r\n  , MASSUNIT\r\n  , PLANEANGLEUNIT\r\n  , POWERUNIT\r\n  , PRESSUREUNIT\r\n  , RADIOACTIVITYUNIT\r\n  , SOLIDANGLEUNIT\r\n  , THERMODYNAMICTEMPERATUREUNIT\r\n  , TIMEUNIT\r\n  , VOLUMEUNIT\r\n  , USERDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCUnitaryControlElementType\r\n   {\r\n      ALARMPANEL\r\n  , CONTROLPANEL\r\n  , GASDETECTIONPANEL\r\n  , INDICATORPANEL\r\n  , MIMICPANEL\r\n  , HUMIDISTAT\r\n  , THERMOSTAT\r\n  , WEATHERSTATION\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCUnitaryEquipmentType\r\n   {\r\n      AIRHANDLER\r\n  , AIRCONDITIONINGUNIT\r\n  , DEHUMIDIFIER\r\n  , SPLITSYSTEM\r\n  , ROOFTOPUNIT\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCValveType\r\n   {\r\n      AIRRELEASE\r\n  , ANTIVACUUM\r\n  , CHANGEOVER\r\n  , CHECK\r\n  , COMMISSIONING\r\n  , DIVERTING\r\n  , DRAWOFFCOCK\r\n  , DOUBLECHECK\r\n  , DOUBLEREGULATING\r\n  , FAUCET\r\n  , FLUSHING\r\n  , GASCOCK\r\n  , GASTAP\r\n  , ISOLATING\r\n  , MIXING\r\n  , PRESSUREREDUCING\r\n  , PRESSURERELIEF\r\n  , REGULATING\r\n  , SAFETYCUTOFF\r\n  , STEAMTRAP\r\n  , STOPCOCK\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCVibrationIsolatorType\r\n   {\r\n      COMPRESSION\r\n  , SPRING\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCVoidingFeatureType\r\n   {\r\n      CUTOUT\r\n  , NOTCH\r\n  , HOLE\r\n  , MITER\r\n  , CHAMFER\r\n  , EDGE\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCWallType\r\n   {\r\n      MOVABLE\r\n  , PARAPET\r\n  , PARTITIONING\r\n  , PLUMBINGWALL\r\n  , SHEAR\r\n  , SOLIDWALL\r\n  , STANDARD\r\n  , POLYGONAL\r\n  , ELEMENTEDWALL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCWasteTerminalType\r\n   {\r\n      FLOORTRAP\r\n  , FLOORWASTE\r\n  , GULLYSUMP\r\n  , GULLYTRAP\r\n  , ROOFDRAIN\r\n  , WASTEDISPOSALUNIT\r\n  , WASTETRAP\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCWindowPanelOperation\r\n   {\r\n      SIDEHUNGRIGHTHAND\r\n  , SIDEHUNGLEFTHAND\r\n  , TILTANDTURNRIGHTHAND\r\n  , TILTANDTURNLEFTHAND\r\n  , TOPHUNG\r\n  , BOTTOMHUNG\r\n  , PIVOTHORIZONTAL\r\n  , PIVOTVERTICAL\r\n  , SLIDINGHORIZONTAL\r\n  , SLIDINGVERTICAL\r\n  , REMOVABLECASEMENT\r\n  , FIXEDCASEMENT\r\n  , OTHEROPERATION\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCWindowPanelPosition\r\n   {\r\n      LEFT\r\n  , MIDDLE\r\n  , RIGHT\r\n  , BOTTOM\r\n  , TOP\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCWindowStyleConstruction\r\n   {\r\n      ALUMINIUM\r\n  , HIGH_GRADE_STEEL\r\n  , STEEL\r\n  , WOOD\r\n  , ALUMINIUM_WOOD\r\n  , PLASTIC\r\n  , OTHER_CONSTRUCTION\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCWindowStyleOperation\r\n   {\r\n      SINGLE_PANEL\r\n  , DOUBLE_PANEL_VERTICAL\r\n  , DOUBLE_PANEL_HORIZONTAL\r\n  , TRIPLE_PANEL_VERTICAL\r\n  , TRIPLE_PANEL_BOTTOM\r\n  , TRIPLE_PANEL_TOP\r\n  , TRIPLE_PANEL_LEFT\r\n  , TRIPLE_PANEL_RIGHT\r\n  , TRIPLE_PANEL_HORIZONTAL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCWindowType\r\n   {\r\n      WINDOW\r\n  , SKYLIGHT\r\n  , LIGHTDOME\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n\r\n   public enum IFCWindowTypePartitioning\r\n   {\r\n      SINGLE_PANEL\r\n  , DOUBLE_PANEL_VERTICAL\r\n  , DOUBLE_PANEL_HORIZONTAL\r\n  , TRIPLE_PANEL_VERTICAL\r\n  , TRIPLE_PANEL_BOTTOM\r\n  , TRIPLE_PANEL_TOP\r\n  , TRIPLE_PANEL_LEFT\r\n  , TRIPLE_PANEL_RIGHT\r\n  , TRIPLE_PANEL_HORIZONTAL\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n   public enum IFCWorkCalendarType\r\n   {\r\n      FIRSTSHIFT\r\n  , SECONDSHIFT\r\n  , THIRDSHIFT\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n   public enum IFCWorkPlanType\r\n   {\r\n      ACTUAL\r\n  , BASELINE\r\n  , PLANNED\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n   public enum IFCWorkScheduleType\r\n   {\r\n      ACTUAL\r\n  , BASELINE\r\n  , PLANNED\r\n  , USERDEFINED\r\n  , NOTDEFINED\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetElementShading::ShadingDeviceType possible values.\r\n   /// </summary>\r\n   public enum PSetElementShading_ShadingDeviceType\r\n   {\r\n      Fixed,\r\n      Movable,\r\n      Exterior,\r\n      Interior,\r\n      Overhang,\r\n      SideFin,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetLightFixtureTypeCommon::LightFixtureMountingType possible values.\r\n   /// </summary>\r\n   public enum PSetLightFixtureTypeCommon_LightFixtureMountingType\r\n   {\r\n      CableSpanned,\r\n      FreeStanding,\r\n      Pole_Side,\r\n      Pole_Top,\r\n      Recessed,\r\n      Surface,\r\n      Suspended,\r\n      TrackMounted,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetLightFixtureTypeCommon::LightFixturePlacingType possible values.\r\n   /// </summary>\r\n   public enum PSetLightFixtureTypeCommon_LightFixturePlacingType\r\n   {\r\n      Ceiling,\r\n      Floor,\r\n      Furniture,\r\n      Pole,\r\n      Wall,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetFlowTerminalAirTerminal::AirTerminalAirflowType possible values.\r\n   /// </summary>\r\n   public enum PSetFlowTerminalAirTerminal_AirTerminalAirflowType\r\n   {\r\n      SupplyAir,\r\n      ReturnAir,\r\n      ExhaustAir,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetFlowTerminalAirTerminal::AirTerminalLocation possible values.\r\n   /// </summary>\r\n   public enum PSetFlowTerminalAirTerminal_AirTerminalLocation\r\n   {\r\n      SideWallHigh,\r\n      SideWallLow,\r\n      CeilingPerimeter,\r\n      CeilingInterior,\r\n      Floor,\r\n      Sill,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalShape possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalShape\r\n   {\r\n      Round,\r\n      Rectangular,\r\n      Square,\r\n      Slot,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalFlowPattern possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalFlowPattern\r\n   {\r\n      LinearSingle,\r\n      LinearDouble,\r\n      LinearFourWay,\r\n      Radial,\r\n      Swirl,\r\n      Displacement, // Official Displacment in IFC2x3_TC1 help.\r\n      CompactJet,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalDischargeDirection possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalDischargeDirection\r\n   {\r\n      Parallel,\r\n      Perpendicular,\r\n      Adjustable,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalFinishType possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalFinishType\r\n   {\r\n      Annodized,\r\n      Painted,\r\n      None,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalMountingType possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalMountingType\r\n   {\r\n      Surface,\r\n      FlatFlush,\r\n      LayIn,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalCoreType possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalCoreType\r\n   {\r\n      ShutterBlade,\r\n      CurvedBlade,\r\n      Removable,\r\n      Reversible,\r\n      None,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalFlowControlType possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalFlowControlType\r\n   {\r\n      Damper,\r\n      Bellows,\r\n      None,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetElectricalDeviceCommon::InsulationStandardClass possible values.\r\n   /// </summary>\r\n   public enum PSetElectricalDeviceCommon_InsulationStandardClass\r\n   {\r\n      Class0Appliance,\r\n      Class0IAppliance,\r\n      ClassIAppliance,\r\n      ClassIIAppliance,\r\n      ClassIIIAppliance,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// ADDITIONAL Definition for PsetElectricalDeviceCommon::ConductorFunction possible values.\r\n   /// </summary>\r\n   public enum PsetElectricalDeviceCommon_ConductorFunction\r\n   {\r\n      L1,\r\n      L2,\r\n      L3\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PsetSanitaryTerminalTypeToiletPan::ToiletType possible values.\r\n   /// </summary>\r\n   public enum PsetSanitaryTerminalTypeToiletPan_ToiletType\r\n   {\r\n      BedPanWasher,\r\n      Chemical,\r\n      CloseCoupled,\r\n      LooseCoupled,\r\n      SlopHopper,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PsetSanitaryTerminalTypeToiletPan::ToiletPanType possible values.\r\n   /// </summary>\r\n   public enum PsetSanitaryTerminalTypeToiletPan_ToiletPanType\r\n   {\r\n      Siphonic,\r\n      Squat,\r\n      WashDown,\r\n      WashOut,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PsetSanitaryTerminalTypeToiletPan::SanitaryMounting possible values.\r\n   /// </summary>\r\n   public enum PsetSanitaryTerminalTypeToiletPan_SanitaryMounting\r\n   {\r\n      BackToWall,\r\n      Pedestal,\r\n      CounterTop,\r\n      WallHung,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   // <summary>\r\n   /// Defines the PSetElectricalDeviceCommon::InsulationStandardClass possible values.\r\n   /// </summary>\r\n   public enum PsetSwitchingDeviceTypeCommon_SwitchFunction\r\n   {\r\n      OnOffSwitch,\r\n      IntermediateSwitch,\r\n      DoubleThrowSwitch,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   // <summary>\r\n   /// Defines the PsetSwitchingDeviceTypeToggleSwitch::ToggleSwitchType possible values.\r\n   /// </summary>\r\n   public enum PsetSwitchingDeviceTypeToggleSwitch_ToggleSwitchType\r\n   {\r\n      BreakGlass,\r\n      Changeover,\r\n      Dimmer,\r\n      KeyOperated,\r\n      ManualPull,\r\n      PushButton,\r\n      Pullcord,\r\n      Rocker,\r\n      Selector,\r\n      Twist,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   // <summary>\r\n   /// Defines the PsetSwitchingDeviceTypeToggleSwitch::SwitchUsage possible values.\r\n   /// </summary>\r\n   public enum PsetSwitchingDeviceTypeToggleSwitch_SwitchUsage\r\n   {\r\n      Emergency,\r\n      Guard,\r\n      Limit,\r\n      Start,\r\n      Stop,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   // <summary>\r\n   /// Defines the PsetSwitchingDeviceTypeToggleSwitch::SwitchActivation possible values.\r\n   /// </summary>\r\n   public enum PsetSwitchingDeviceTypeToggleSwitch_SwitchActivation\r\n   {\r\n      Actuator,\r\n      Foot,\r\n      Hand,\r\n      Proximity,\r\n      Sound,\r\n      TwoHand,\r\n      Wire,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines PsetManufacturerTypeInformation::AssemblyPlace possible values.\r\n   /// </summary>\r\n   public enum PsetManufacturerTypeInformation_AssemblyPlace\r\n   {\r\n      FACTORY,\r\n      OFFSITE,\r\n      SITE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines possible Pset property Status values.\r\n   /// </summary>\r\n   public enum PsetElementStatus\r\n   {\r\n      NEW,\r\n      EXISTING,\r\n      DEMOLISH,\r\n      TEMPORARY,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Toolkit/IFC4x3Enums.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace Revit.IFC.Export.Toolkit.IFC4x3\r\n{\r\n   public enum IFCActionRequestType\r\n   {\r\n      EMAIL,\r\n      FAX,\r\n      PHONE,\r\n      POST,\r\n      VERBAL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCActionSourceType\r\n   {\r\n      BRAKES,\r\n      BUOYANCY,\r\n      COMPLETION_G1,\r\n      CREEP,\r\n      CURRENT,\r\n      DEAD_LOAD_G,\r\n      EARTHQUAKE_E,\r\n      ERECTION,\r\n      FIRE,\r\n      ICE,\r\n      IMPACT,\r\n      IMPULSE,\r\n      LACK_OF_FIT,\r\n      LIVE_LOAD_Q,\r\n      PRESTRESSING_P,\r\n      PROPPING,\r\n      RAIN,\r\n      SETTLEMENT_U,\r\n      SHRINKAGE,\r\n      SNOW_S,\r\n      SYSTEM_IMPERFECTION,\r\n      TEMPERATURE_T,\r\n      TRANSPORT,\r\n      WAVE,\r\n      WIND_W,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCActionType\r\n   {\r\n      EXTRAORDINARY_A,\r\n      PERMANENT_G,\r\n      VARIABLE_Q,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCActuatorType\r\n   {\r\n      ELECTRICACTUATOR,\r\n      HANDOPERATEDACTUATOR,\r\n      HYDRAULICACTUATOR,\r\n      PNEUMATICACTUATOR,\r\n      THERMOSTATICACTUATOR,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCAddressType\r\n   {\r\n      DISTRIBUTIONPOINT,\r\n      HOME,\r\n      OFFICE,\r\n      SITE,\r\n      USERDEFINED\r\n   }\r\n\r\n   public enum IFCAirTerminalBoxType\r\n   {\r\n      CONSTANTFLOW,\r\n      VARIABLEFLOWPRESSUREDEPENDANT,\r\n      VARIABLEFLOWPRESSUREINDEPENDANT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCAirTerminalType\r\n   {\r\n      DIFFUSER,\r\n      GRILLE,\r\n      LOUVRE,\r\n      REGISTER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCAirToAirHeatRecoveryType\r\n   {\r\n      FIXEDPLATECOUNTERFLOWEXCHANGER,\r\n      FIXEDPLATECROSSFLOWEXCHANGER,\r\n      FIXEDPLATEPARALLELFLOWEXCHANGER,\r\n      HEATPIPE,\r\n      ROTARYWHEEL,\r\n      RUNAROUNDCOILLOOP,\r\n      THERMOSIPHONCOILTYPEHEATEXCHANGERS,\r\n      THERMOSIPHONSEALEDTUBEHEATEXCHANGERS,\r\n      TWINTOWERENTHALPYRECOVERYLOOPS,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCAlarmType\r\n   {\r\n      BELL,\r\n      BREAKGLASSBUTTON,\r\n      LIGHT,\r\n      MANUALPULLBOX,\r\n      RAILWAYCROCODILE,\r\n      RAILWAYDETONATOR,\r\n      SIREN,\r\n      WHISTLE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCAlignmentCantSegmentType\r\n   {\r\n      BLOSSCURVE,\r\n      CONSTANTCANT,\r\n      COSINECURVE,\r\n      HELMERTCURVE,\r\n      LINEARTRANSITION,\r\n      SINECURVE,\r\n      VIENNESEBEND\r\n   }\r\n\r\n   public enum IFCAlignmentHorizontalSegmentType\r\n   {\r\n      BLOSSCURVE,\r\n      CIRCULARARC,\r\n      CLOTHOID,\r\n      COSINECURVE,\r\n      CUBIC,\r\n      HELMERTCURVE,\r\n      LINE,\r\n      SINECURVE,\r\n      VIENNESEBEND\r\n   }\r\n\r\n   public enum IFCAlignmentType\r\n   {\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCAlignmentVerticalSegmentType\r\n   {\r\n      CIRCULARARC,\r\n      CLOTHOID,\r\n      CONSTANTGRADIENT,\r\n      PARABOLICARC\r\n   }\r\n\r\n   public enum IFCAnalysisModelType\r\n   {\r\n      IN_PLANE_LOADING_2D,\r\n      LOADING_3D,\r\n      OUT_PLANE_LOADING_2D,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCAnalysisTheoryType\r\n   {\r\n      FIRST_ORDER_THEORY,\r\n      FULL_NONLINEAR_THEORY,\r\n      SECOND_ORDER_THEORY,\r\n      THIRD_ORDER_THEORY,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCAnnotationType\r\n   {\r\n      CONTOURLINE,\r\n      DIMENSION,\r\n      ISOBAR,\r\n      ISOLUX,\r\n      ISOTHERM,\r\n      LEADER,\r\n      SURVEY,\r\n      SYMBOL,\r\n      TEXT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCArithmeticOperator\r\n   {\r\n      ADD,\r\n      DIVIDE,\r\n      MODULO,\r\n      MULTIPLY,\r\n      SUBTRACT\r\n   }\r\n\r\n   public enum IFCAssemblyPlace\r\n   {\r\n      FACTORY,\r\n      SITE,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCAudioVisualApplianceType\r\n   {\r\n      AMPLIFIER,\r\n      CAMERA,\r\n      COMMUNICATIONTERMINAL,\r\n      DISPLAY,\r\n      MICROPHONE,\r\n      PLAYER,\r\n      PROJECTOR,\r\n      RECEIVER,\r\n      RECORDINGEQUIPMENT,\r\n      SPEAKER,\r\n      SWITCHER,\r\n      TELEPHONE,\r\n      TUNER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCBSplineCurveForm\r\n   {\r\n      CIRCULAR_ARC,\r\n      ELLIPTIC_ARC,\r\n      HYPERBOLIC_ARC,\r\n      PARABOLIC_ARC,\r\n      POLYLINE_FORM,\r\n      UNSPECIFIED\r\n   }\r\n\r\n   public enum IFCBSplineSurfaceForm\r\n   {\r\n      CONICAL_SURF,\r\n      CYLINDRICAL_SURF,\r\n      GENERALISED_CONE,\r\n      PLANE_SURF,\r\n      QUADRIC_SURF,\r\n      RULED_SURF,\r\n      SPHERICAL_SURF,\r\n      SURF_OF_LINEAR_EXTRUSION,\r\n      SURF_OF_REVOLUTION,\r\n      TOROIDAL_SURF,\r\n      UNSPECIFIED\r\n   }\r\n\r\n   public enum IFCBeamType\r\n   {\r\n      BEAM,\r\n      CORNICE,\r\n      DIAPHRAGM,\r\n      EDGEBEAM,\r\n      GIRDER_SEGMENT,\r\n      HATSTONE,\r\n      HOLLOWCORE,\r\n      JOIST,\r\n      LINTEL,\r\n      PIERCAP,\r\n      SPANDREL,\r\n      T_BEAM,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCBearingType\r\n   {\r\n      CYLINDRICAL,\r\n      DISK,\r\n      ELASTOMERIC,\r\n      GUIDE,\r\n      POT,\r\n      ROCKER,\r\n      ROLLER,\r\n      SPHERICAL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCBenchmark\r\n   {\r\n      EQUALTO,\r\n      GREATERTHAN,\r\n      GREATERTHANOREQUALTO,\r\n      INCLUDEDIN,\r\n      INCLUDES,\r\n      LESSTHAN,\r\n      LESSTHANOREQUALTO,\r\n      NOTEQUALTO,\r\n      NOTINCLUDEDIN,\r\n      NOTINCLUDES\r\n   }\r\n\r\n   public enum IFCBoilerType\r\n   {\r\n      STEAM,\r\n      WATER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCBooleanOperator\r\n   {\r\n      DIFFERENCE,\r\n      INTERSECTION,\r\n      UNION\r\n   }\r\n\r\n   public enum IFCBridgePartType\r\n   {\r\n      ABUTMENT,\r\n      DECK,\r\n      DECK_SEGMENT,\r\n      FOUNDATION,\r\n      PIER,\r\n      PIER_SEGMENT,\r\n      PYLON,\r\n      SUBSTRUCTURE,\r\n      SUPERSTRUCTURE,\r\n      SURFACESTRUCTURE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCBridgeType\r\n   {\r\n      ARCHED,\r\n      CABLE_STAYED,\r\n      CANTILEVER,\r\n      CULVERT,\r\n      FRAMEWORK,\r\n      GIRDER,\r\n      SUSPENSION,\r\n      TRUSS,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCBuildingElementPartType\r\n   {\r\n      APRON,\r\n      ARMOURUNIT,\r\n      INSULATION,\r\n      PRECASTPANEL,\r\n      SAFETYCAGE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCBuildingElementProxyType\r\n   {\r\n      COMPLEX,\r\n      ELEMENT,\r\n      PARTIAL,\r\n      PROVISIONFORSPACE,\r\n      PROVISIONFORVOID,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCBuildingSystemType\r\n   {\r\n      FENESTRATION,\r\n      FOUNDATION,\r\n      LOADBEARING,\r\n      OUTERSHELL,\r\n      SHADING,\r\n      TRANSPORT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCBuiltSystemType\r\n   {\r\n      EROSIONPREVENTION,\r\n      FENESTRATION,\r\n      FOUNDATION,\r\n      LOADBEARING,\r\n      MOORING,\r\n      OUTERSHELL,\r\n      PRESTRESSING,\r\n      RAILWAYLINE,\r\n      RAILWAYTRACK,\r\n      REINFORCING,\r\n      SHADING,\r\n      TRACKCIRCUIT,\r\n      TRANSPORT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCBurnerType\r\n   {\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCCableCarrierFittingType\r\n   {\r\n      BEND,\r\n      CONNECTOR,\r\n      CROSS,\r\n      JUNCTION,\r\n      REDUCER,\r\n      TEE,\r\n      TRANSITION,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCCableCarrierSegmentType\r\n   {\r\n      CABLEBRACKET,\r\n      CABLELADDERSEGMENT,\r\n      CABLETRAYSEGMENT,\r\n      CABLETRUNKINGSEGMENT,\r\n      CATENARYWIRE,\r\n      CONDUITSEGMENT,\r\n      DROPPER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCCableFittingType\r\n   {\r\n      CONNECTOR,\r\n      ENTRY,\r\n      EXIT,\r\n      FANOUT,\r\n      JUNCTION,\r\n      TRANSITION,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCCableSegmentType\r\n   {\r\n      BUSBARSEGMENT,\r\n      CABLESEGMENT,\r\n      CONDUCTORSEGMENT,\r\n      CONTACTWIRESEGMENT,\r\n      CORESEGMENT,\r\n      FIBERSEGMENT,\r\n      FIBERTUBE,\r\n      OPTICALCABLESEGMENT,\r\n      STITCHWIRE,\r\n      WIREPAIRSEGMENT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCCaissonFoundationType\r\n   {\r\n      CAISSON,\r\n      WELL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCChangeAction\r\n   {\r\n      ADDED,\r\n      DELETED,\r\n      MODIFIED,\r\n      NOCHANGE,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCChillerType\r\n   {\r\n      AIRCOOLED,\r\n      HEATRECOVERY,\r\n      WATERCOOLED,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCChimneyType\r\n   {\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCCoilType\r\n   {\r\n      DXCOOLINGCOIL,\r\n      ELECTRICHEATINGCOIL,\r\n      GASHEATINGCOIL,\r\n      HYDRONICCOIL,\r\n      STEAMHEATINGCOIL,\r\n      WATERCOOLINGCOIL,\r\n      WATERHEATINGCOIL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCColumnType\r\n   {\r\n      COLUMN,\r\n      PIERSTEM,\r\n      PIERSTEM_SEGMENT,\r\n      PILASTER,\r\n      STANDCOLUMN,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCCommunicationsApplianceType\r\n   {\r\n      ANTENNA,\r\n      AUTOMATON,\r\n      COMPUTER,\r\n      FAX,\r\n      GATEWAY,\r\n      INTELLIGENTPERIPHERAL,\r\n      IPNETWORKEQUIPMENT,\r\n      LINESIDEELECTRONICUNIT,\r\n      MODEM,\r\n      NETWORKAPPLIANCE,\r\n      NETWORKBRIDGE,\r\n      NETWORKHUB,\r\n      OPTICALLINETERMINAL,\r\n      OPTICALNETWORKUNIT,\r\n      PRINTER,\r\n      RADIOBLOCKCENTER,\r\n      REPEATER,\r\n      ROUTER,\r\n      SCANNER,\r\n      TELECOMMAND,\r\n      TELEPHONYEXCHANGE,\r\n      TRANSITIONCOMPONENT,\r\n      TRANSPONDER,\r\n      TRANSPORTEQUIPMENT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCComplexPropertyTemplateType\r\n   {\r\n      P_COMPLEX,\r\n      Q_COMPLEX\r\n   }\r\n\r\n   public enum IFCCompressorType\r\n   {\r\n      BOOSTER,\r\n      DYNAMIC,\r\n      HERMETIC,\r\n      OPENTYPE,\r\n      RECIPROCATING,\r\n      ROLLINGPISTON,\r\n      ROTARY,\r\n      ROTARYVANE,\r\n      SCROLL,\r\n      SEMIHERMETIC,\r\n      SINGLESCREW,\r\n      SINGLESTAGE,\r\n      TROCHOIDAL,\r\n      TWINSCREW,\r\n      WELDEDSHELLHERMETIC,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCCondenserType\r\n   {\r\n      AIRCOOLED,\r\n      EVAPORATIVECOOLED,\r\n      WATERCOOLED,\r\n      WATERCOOLEDBRAZEDPLATE,\r\n      WATERCOOLEDSHELLCOIL,\r\n      WATERCOOLEDSHELLTUBE,\r\n      WATERCOOLEDTUBEINTUBE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCConnectionType\r\n   {\r\n      ATEND,\r\n      ATPATH,\r\n      ATSTART,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCConstraint\r\n   {\r\n      ADVISORY,\r\n      HARD,\r\n      SOFT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCConstructionEquipmentResourceType\r\n   {\r\n      DEMOLISHING,\r\n      EARTHMOVING,\r\n      ERECTING,\r\n      HEATING,\r\n      LIGHTING,\r\n      PAVING,\r\n      PUMPING,\r\n      TRANSPORTING,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCConstructionMaterialResourceType\r\n   {\r\n      AGGREGATES,\r\n      CONCRETE,\r\n      DRYWALL,\r\n      FUEL,\r\n      GYPSUM,\r\n      MASONRY,\r\n      METAL,\r\n      PLASTIC,\r\n      WOOD,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCConstructionProductResourceType\r\n   {\r\n      ASSEMBLY,\r\n      FORMWORK,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCControllerType\r\n   {\r\n      FLOATING,\r\n      MULTIPOSITION,\r\n      PROGRAMMABLE,\r\n      PROPORTIONAL,\r\n      TWOPOSITION,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCConveyorSegmentType\r\n   {\r\n      BELTCONVEYOR,\r\n      BUCKETCONVEYOR,\r\n      CHUTECONVEYOR,\r\n      SCREWCONVEYOR,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCCooledBeamType\r\n   {\r\n      ACTIVE,\r\n      PASSIVE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCCoolingTowerType\r\n   {\r\n      MECHANICALFORCEDDRAFT,\r\n      MECHANICALINDUCEDDRAFT,\r\n      NATURALDRAFT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCCostItemType\r\n   {\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCCostScheduleType\r\n   {\r\n      BUDGET,\r\n      COSTPLAN,\r\n      ESTIMATE,\r\n      PRICEDBILLOFQUANTITIES,\r\n      SCHEDULEOFRATES,\r\n      TENDER,\r\n      UNPRICEDBILLOFQUANTITIES,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCCourseType\r\n   {\r\n      ARMOUR,\r\n      BALLASTBED,\r\n      CORE,\r\n      FILTER,\r\n      PAVEMENT,\r\n      PROTECTION,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCCoveringType\r\n   {\r\n      CEILING,\r\n      CLADDING,\r\n      COPING,\r\n      FLOORING,\r\n      INSULATION,\r\n      MEMBRANE,\r\n      MOLDING,\r\n      ROOFING,\r\n      SKIRTINGBOARD,\r\n      SLEEVING,\r\n      TOPPING,\r\n      WRAPPING,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCCrewResourceType\r\n   {\r\n      OFFICE,\r\n      SITE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCCurtainWallType\r\n   {\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCCurveInterpolation\r\n   {\r\n      LINEAR,\r\n      LOG_LINEAR,\r\n      LOG_LOG,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCDamperType\r\n   {\r\n      BACKDRAFTDAMPER,\r\n      BALANCINGDAMPER,\r\n      BLASTDAMPER,\r\n      CONTROLDAMPER,\r\n      FIREDAMPER,\r\n      FIRESMOKEDAMPER,\r\n      FUMEHOODEXHAUST,\r\n      GRAVITYDAMPER,\r\n      GRAVITYRELIEFDAMPER,\r\n      RELIEFDAMPER,\r\n      SMOKEDAMPER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCDataOrigin\r\n   {\r\n      MEASURED,\r\n      PREDICTED,\r\n      SIMULATED,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCDerivedUnit\r\n   {\r\n      ACCELERATIONUNIT,\r\n      ANGULARVELOCITYUNIT,\r\n      AREADENSITYUNIT,\r\n      COMPOUNDPLANEANGLEUNIT,\r\n      CURVATUREUNIT,\r\n      DYNAMICVISCOSITYUNIT,\r\n      HEATFLUXDENSITYUNIT,\r\n      HEATINGVALUEUNIT,\r\n      INTEGERCOUNTRATEUNIT,\r\n      IONCONCENTRATIONUNIT,\r\n      ISOTHERMALMOISTURECAPACITYUNIT,\r\n      KINEMATICVISCOSITYUNIT,\r\n      LINEARFORCEUNIT,\r\n      LINEARMOMENTUNIT,\r\n      LINEARSTIFFNESSUNIT,\r\n      LINEARVELOCITYUNIT,\r\n      LUMINOUSINTENSITYDISTRIBUTIONUNIT,\r\n      MASSDENSITYUNIT,\r\n      MASSFLOWRATEUNIT,\r\n      MASSPERLENGTHUNIT,\r\n      MODULUSOFELASTICITYUNIT,\r\n      MODULUSOFLINEARSUBGRADEREACTIONUNIT,\r\n      MODULUSOFROTATIONALSUBGRADEREACTIONUNIT,\r\n      MODULUSOFSUBGRADEREACTIONUNIT,\r\n      MOISTUREDIFFUSIVITYUNIT,\r\n      MOLECULARWEIGHTUNIT,\r\n      MOMENTOFINERTIAUNIT,\r\n      PHUNIT,\r\n      PLANARFORCEUNIT,\r\n      ROTATIONALFREQUENCYUNIT,\r\n      ROTATIONALMASSUNIT,\r\n      ROTATIONALSTIFFNESSUNIT,\r\n      SECTIONAREAINTEGRALUNIT,\r\n      SECTIONMODULUSUNIT,\r\n      SHEARMODULUSUNIT,\r\n      SOUNDPOWERLEVELUNIT,\r\n      SOUNDPOWERUNIT,\r\n      SOUNDPRESSURELEVELUNIT,\r\n      SOUNDPRESSUREUNIT,\r\n      SPECIFICHEATCAPACITYUNIT,\r\n      TEMPERATUREGRADIENTUNIT,\r\n      TEMPERATURERATEOFCHANGEUNIT,\r\n      THERMALADMITTANCEUNIT,\r\n      THERMALCONDUCTANCEUNIT,\r\n      THERMALEXPANSIONCOEFFICIENTUNIT,\r\n      THERMALRESISTANCEUNIT,\r\n      THERMALTRANSMITTANCEUNIT,\r\n      TORQUEUNIT,\r\n      VAPORPERMEABILITYUNIT,\r\n      VOLUMETRICFLOWRATEUNIT,\r\n      WARPINGCONSTANTUNIT,\r\n      WARPINGMOMENTUNIT,\r\n      USERDEFINED\r\n   }\r\n\r\n   public enum IFCDirectionSense\r\n   {\r\n      NEGATIVE,\r\n      POSITIVE\r\n   }\r\n\r\n   public enum IFCDiscreteAccessoryType\r\n   {\r\n      ANCHORPLATE,\r\n      BIRDPROTECTION,\r\n      BRACKET,\r\n      CABLEARRANGER,\r\n      ELASTIC_CUSHION,\r\n      EXPANSION_JOINT_DEVICE,\r\n      FILLER,\r\n      FLASHING,\r\n      INSULATOR,\r\n      LOCK,\r\n      PANEL_STRENGTHENING,\r\n      POINTMACHINEMOUNTINGDEVICE,\r\n      POINT_MACHINE_LOCKING_DEVICE,\r\n      RAILBRACE,\r\n      RAILPAD,\r\n      RAIL_LUBRICATION,\r\n      RAIL_MECHANICAL_EQUIPMENT,\r\n      SHOE,\r\n      SLIDINGCHAIR,\r\n      SOUNDABSORPTION,\r\n      TENSIONINGEQUIPMENT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCDistributionBoardType\r\n   {\r\n      CONSUMERUNIT,\r\n      DISPATCHINGBOARD,\r\n      DISTRIBUTIONBOARD,\r\n      DISTRIBUTIONFRAME,\r\n      MOTORCONTROLCENTRE,\r\n      SWITCHBOARD,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCDistributionChamberElementType\r\n   {\r\n      FORMEDDUCT,\r\n      INSPECTIONCHAMBER,\r\n      INSPECTIONPIT,\r\n      MANHOLE,\r\n      METERCHAMBER,\r\n      SUMP,\r\n      TRENCH,\r\n      VALVECHAMBER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCDistributionPortType\r\n   {\r\n      CABLE,\r\n      CABLECARRIER,\r\n      DUCT,\r\n      PIPE,\r\n      WIRELESS,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCDistributionSystem\r\n   {\r\n      AIRCONDITIONING,\r\n      AUDIOVISUAL,\r\n      CATENARY_SYSTEM,\r\n      CHEMICAL,\r\n      CHILLEDWATER,\r\n      COMMUNICATION,\r\n      COMPRESSEDAIR,\r\n      CONDENSERWATER,\r\n      CONTROL,\r\n      CONVEYING,\r\n      DATA,\r\n      DISPOSAL,\r\n      DOMESTICCOLDWATER,\r\n      DOMESTICHOTWATER,\r\n      DRAINAGE,\r\n      EARTHING,\r\n      ELECTRICAL,\r\n      ELECTROACOUSTIC,\r\n      EXHAUST,\r\n      FIREPROTECTION,\r\n      FIXEDTRANSMISSIONNETWORK,\r\n      FUEL,\r\n      GAS,\r\n      HAZARDOUS,\r\n      HEATING,\r\n      LIGHTING,\r\n      LIGHTNINGPROTECTION,\r\n      MOBILENETWORK,\r\n      MONITORINGSYSTEM,\r\n      MUNICIPALSOLIDWASTE,\r\n      OIL,\r\n      OPERATIONAL,\r\n      OPERATIONALTELEPHONYSYSTEM,\r\n      OVERHEAD_CONTACTLINE_SYSTEM,\r\n      POWERGENERATION,\r\n      RAINWATER,\r\n      REFRIGERATION,\r\n      RETURN_CIRCUIT,\r\n      SECURITY,\r\n      SEWAGE,\r\n      SIGNAL,\r\n      STORMWATER,\r\n      TELEPHONE,\r\n      TV,\r\n      VACUUM,\r\n      VENT,\r\n      VENTILATION,\r\n      WASTEWATER,\r\n      WATERSUPPLY,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCDocumentConfidentiality\r\n   {\r\n      CONFIDENTIAL,\r\n      PERSONAL,\r\n      PUBLIC,\r\n      RESTRICTED,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCDocumentStatus\r\n   {\r\n      DRAFT,\r\n      FINAL,\r\n      FINALDRAFT,\r\n      REVISION,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCDoorPanelOperation\r\n   {\r\n      DOUBLE_ACTING,\r\n      FIXEDPANEL,\r\n      FOLDING,\r\n      REVOLVING,\r\n      ROLLINGUP,\r\n      SLIDING,\r\n      SWINGING,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCDoorPanelPosition\r\n   {\r\n      LEFT,\r\n      MIDDLE,\r\n      RIGHT,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCDoorType\r\n   {\r\n      BOOM_BARRIER,\r\n      DOOR,\r\n      GATE,\r\n      TRAPDOOR,\r\n      TURNSTILE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCDoorTypeOperation\r\n   {\r\n      DOUBLE_DOOR_DOUBLE_SWING,\r\n      DOUBLE_DOOR_FOLDING,\r\n      DOUBLE_DOOR_LIFTING_VERTICAL,\r\n      DOUBLE_DOOR_SINGLE_SWING,\r\n      DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT,\r\n      DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT,\r\n      DOUBLE_DOOR_SLIDING,\r\n      DOUBLE_SWING_LEFT,\r\n      DOUBLE_SWING_RIGHT,\r\n      FOLDING_TO_LEFT,\r\n      FOLDING_TO_RIGHT,\r\n      LIFTING_HORIZONTAL,\r\n      LIFTING_VERTICAL_LEFT,\r\n      LIFTING_VERTICAL_RIGHT,\r\n      REVOLVING,\r\n      REVOLVING_VERTICAL,\r\n      ROLLINGUP,\r\n      SINGLE_SWING_LEFT,\r\n      SINGLE_SWING_RIGHT,\r\n      SLIDING_TO_LEFT,\r\n      SLIDING_TO_RIGHT,\r\n      SWING_FIXED_LEFT,\r\n      SWING_FIXED_RIGHT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCDuctFittingType\r\n   {\r\n      BEND,\r\n      CONNECTOR,\r\n      ENTRY,\r\n      EXIT,\r\n      JUNCTION,\r\n      OBSTRUCTION,\r\n      TRANSITION,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCDuctSegmentType\r\n   {\r\n      FLEXIBLESEGMENT,\r\n      RIGIDSEGMENT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCDuctSilencerType\r\n   {\r\n      FLATOVAL,\r\n      RECTANGULAR,\r\n      ROUND,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCEarthworksCutType\r\n   {\r\n      BASE_EXCAVATION,\r\n      CUT,\r\n      DREDGING,\r\n      EXCAVATION,\r\n      OVEREXCAVATION,\r\n      PAVEMENTMILLING,\r\n      STEPEXCAVATION,\r\n      TOPSOILREMOVAL,\r\n      TRENCH,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCEarthworksFillType\r\n   {\r\n      BACKFILL,\r\n      COUNTERWEIGHT,\r\n      EMBANKMENT,\r\n      SLOPEFILL,\r\n      SUBGRADE,\r\n      SUBGRADEBED,\r\n      TRANSITIONSECTION,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCElectricApplianceType\r\n   {\r\n      DISHWASHER,\r\n      ELECTRICCOOKER,\r\n      FREESTANDINGELECTRICHEATER,\r\n      FREESTANDINGFAN,\r\n      FREESTANDINGWATERCOOLER,\r\n      FREESTANDINGWATERHEATER,\r\n      FREEZER,\r\n      FRIDGE_FREEZER,\r\n      HANDDRYER,\r\n      KITCHENMACHINE,\r\n      MICROWAVE,\r\n      PHOTOCOPIER,\r\n      REFRIGERATOR,\r\n      TUMBLEDRYER,\r\n      VENDINGMACHINE,\r\n      WASHINGMACHINE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCElectricDistributionBoardType\r\n   {\r\n      CONSUMERUNIT,\r\n      DISTRIBUTIONBOARD,\r\n      MOTORCONTROLCENTRE,\r\n      SWITCHBOARD,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCElectricFlowStorageDeviceType\r\n   {\r\n      BATTERY,\r\n      CAPACITOR,\r\n      CAPACITORBANK,\r\n      COMPENSATOR,\r\n      HARMONICFILTER,\r\n      INDUCTOR,\r\n      INDUCTORBANK,\r\n      RECHARGER,\r\n      UPS,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCElectricFlowTreatmentDeviceType\r\n   {\r\n      ELECTRONICFILTER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCElectricGeneratorType\r\n   {\r\n      CHP,\r\n      ENGINEGENERATOR,\r\n      STANDALONE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCElectricMotorType\r\n   {\r\n      DC,\r\n      INDUCTION,\r\n      POLYPHASE,\r\n      RELUCTANCESYNCHRONOUS,\r\n      SYNCHRONOUS,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCElectricTimeControlType\r\n   {\r\n      RELAY,\r\n      TIMECLOCK,\r\n      TIMEDELAY,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCElementAssemblyType\r\n   {\r\n      ABUTMENT,\r\n      ACCESSORY_ASSEMBLY,\r\n      ARCH,\r\n      BEAM_GRID,\r\n      BRACED_FRAME,\r\n      CROSS_BRACING,\r\n      DECK,\r\n      DILATATIONPANEL,\r\n      ENTRANCEWORKS,\r\n      GIRDER,\r\n      GRID,\r\n      MAST,\r\n      PIER,\r\n      PYLON,\r\n      RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY,\r\n      REINFORCEMENT_UNIT,\r\n      RIGID_FRAME,\r\n      SHELTER,\r\n      SIGNALASSEMBLY,\r\n      SLAB_FIELD,\r\n      SUMPBUSTER,\r\n      SUPPORTINGASSEMBLY,\r\n      SUSPENSIONASSEMBLY,\r\n      TRACKPANEL,\r\n      TRACTION_SWITCHING_ASSEMBLY,\r\n      TRAFFIC_CALMING_DEVICE,\r\n      TRUSS,\r\n      TURNOUTPANEL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCElementComposition\r\n   {\r\n      COMPLEX,\r\n      ELEMENT,\r\n      PARTIAL\r\n   }\r\n\r\n   public enum IFCEngineType\r\n   {\r\n      EXTERNALCOMBUSTION,\r\n      INTERNALCOMBUSTION,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCEvaporativeCoolerType\r\n   {\r\n      DIRECTEVAPORATIVEAIRWASHER,\r\n      DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER,\r\n      DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER,\r\n      DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER,\r\n      DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER,\r\n      INDIRECTDIRECTCOMBINATION,\r\n      INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER,\r\n      INDIRECTEVAPORATIVEPACKAGEAIRCOOLER,\r\n      INDIRECTEVAPORATIVEWETCOIL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCEvaporatorType\r\n   {\r\n      DIRECTEXPANSION,\r\n      DIRECTEXPANSIONBRAZEDPLATE,\r\n      DIRECTEXPANSIONSHELLANDTUBE,\r\n      DIRECTEXPANSIONTUBEINTUBE,\r\n      FLOODEDSHELLANDTUBE,\r\n      SHELLANDCOIL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCEventTriggerType\r\n   {\r\n      EVENTCOMPLEX,\r\n      EVENTMESSAGE,\r\n      EVENTRULE,\r\n      EVENTTIME,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCEventType\r\n   {\r\n      ENDEVENT,\r\n      INTERMEDIATEEVENT,\r\n      STARTEVENT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCExternalSpatialElementType\r\n   {\r\n      EXTERNAL,\r\n      EXTERNAL_EARTH,\r\n      EXTERNAL_FIRE,\r\n      EXTERNAL_WATER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCFacilityPartCommonType\r\n   {\r\n      ABOVEGROUND,\r\n      BELOWGROUND,\r\n      JUNCTION,\r\n      LEVELCROSSING,\r\n      SEGMENT,\r\n      SUBSTRUCTURE,\r\n      SUPERSTRUCTURE,\r\n      TERMINAL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCFacilityUsage\r\n   {\r\n      LATERAL,\r\n      LONGITUDINAL,\r\n      REGION,\r\n      VERTICAL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCFanType\r\n   {\r\n      CENTRIFUGALAIRFOIL,\r\n      CENTRIFUGALBACKWARDINCLINEDCURVED,\r\n      CENTRIFUGALFORWARDCURVED,\r\n      CENTRIFUGALRADIAL,\r\n      PROPELLORAXIAL,\r\n      TUBEAXIAL,\r\n      VANEAXIAL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCFastenerType\r\n   {\r\n      GLUE,\r\n      MORTAR,\r\n      WELD,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCFilterType\r\n   {\r\n      AIRPARTICLEFILTER,\r\n      COMPRESSEDAIRFILTER,\r\n      ODORFILTER,\r\n      OILFILTER,\r\n      STRAINER,\r\n      WATERFILTER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCFireSuppressionTerminalType\r\n   {\r\n      BREECHINGINLET,\r\n      FIREHYDRANT,\r\n      FIREMONITOR,\r\n      HOSEREEL,\r\n      SPRINKLER,\r\n      SPRINKLERDEFLECTOR,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCFlowDirection\r\n   {\r\n      SINK,\r\n      SOURCE,\r\n      SOURCEANDSINK,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCFlowInstrumentType\r\n   {\r\n      AMMETER,\r\n      COMBINED,\r\n      FREQUENCYMETER,\r\n      PHASEANGLEMETER,\r\n      POWERFACTORMETER,\r\n      PRESSUREGAUGE,\r\n      THERMOMETER,\r\n      VOLTMETER,\r\n      VOLTMETER_PEAK,\r\n      VOLTMETER_RMS,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCFlowMeterType\r\n   {\r\n      ENERGYMETER,\r\n      GASMETER,\r\n      OILMETER,\r\n      WATERMETER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCFootingType\r\n   {\r\n      CAISSON_FOUNDATION,\r\n      FOOTING_BEAM,\r\n      PAD_FOOTING,\r\n      PILE_CAP,\r\n      STRIP_FOOTING,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCFurnitureType\r\n   {\r\n      BED,\r\n      CHAIR,\r\n      DESK,\r\n      FILECABINET,\r\n      SHELF,\r\n      SOFA,\r\n      TABLE,\r\n      TECHNICALCABINET,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCGeographicElementType\r\n   {\r\n      SOIL_BORING_POINT,\r\n      TERRAIN,\r\n      VEGETATION,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCGeometricProjection\r\n   {\r\n      ELEVATION_VIEW,\r\n      GRAPH_VIEW,\r\n      MODEL_VIEW,\r\n      PLAN_VIEW,\r\n      REFLECTED_PLAN_VIEW,\r\n      SECTION_VIEW,\r\n      SKETCH_VIEW,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCGeotechnicalStratumType\r\n   {\r\n      SOLID,\r\n      VOID,\r\n      WATER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCGlobalOrLocal\r\n   {\r\n      GLOBAL_COORDS,\r\n      LOCAL_COORDS\r\n   }\r\n\r\n   public enum IFCGridType\r\n   {\r\n      IRREGULAR,\r\n      RADIAL,\r\n      RECTANGULAR,\r\n      TRIANGULAR,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCHeatExchangerType\r\n   {\r\n      PLATE,\r\n      SHELLANDTUBE,\r\n      TURNOUTHEATING,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCHumidifierType\r\n   {\r\n      ADIABATICAIRWASHER,\r\n      ADIABATICATOMIZING,\r\n      ADIABATICCOMPRESSEDAIRNOZZLE,\r\n      ADIABATICPAN,\r\n      ADIABATICRIGIDMEDIA,\r\n      ADIABATICULTRASONIC,\r\n      ADIABATICWETTEDELEMENT,\r\n      ASSISTEDBUTANE,\r\n      ASSISTEDELECTRIC,\r\n      ASSISTEDNATURALGAS,\r\n      ASSISTEDPROPANE,\r\n      ASSISTEDSTEAM,\r\n      STEAMINJECTION,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCImpactProtectionDeviceType\r\n   {\r\n      BUMPER,\r\n      CRASHCUSHION,\r\n      DAMPINGSYSTEM,\r\n      FENDER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCInterceptorType\r\n   {\r\n      CYCLONIC,\r\n      GREASE,\r\n      OIL,\r\n      PETROL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCInternalOrExternal\r\n   {\r\n      EXTERNAL,\r\n      EXTERNAL_EARTH,\r\n      EXTERNAL_FIRE,\r\n      EXTERNAL_WATER,\r\n      INTERNAL,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCInventoryType\r\n   {\r\n      ASSETINVENTORY,\r\n      FURNITUREINVENTORY,\r\n      SPACEINVENTORY,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCJunctionBoxType\r\n   {\r\n      DATA,\r\n      POWER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCKerbType\r\n   {\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCKnotType\r\n   {\r\n      PIECEWISE_BEZIER_KNOTS,\r\n      QUASI_UNIFORM_KNOTS,\r\n      UNIFORM_KNOTS,\r\n      UNSPECIFIED\r\n   }\r\n\r\n   public enum IFCLaborResourceType\r\n   {\r\n      ADMINISTRATION,\r\n      CARPENTRY,\r\n      CLEANING,\r\n      CONCRETE,\r\n      DRYWALL,\r\n      ELECTRIC,\r\n      FINISHING,\r\n      FLOORING,\r\n      GENERAL,\r\n      HVAC,\r\n      LANDSCAPING,\r\n      MASONRY,\r\n      PAINTING,\r\n      PAVING,\r\n      PLUMBING,\r\n      ROOFING,\r\n      SITEGRADING,\r\n      STEELWORK,\r\n      SURVEYING,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCLampType\r\n   {\r\n      COMPACTFLUORESCENT,\r\n      FLUORESCENT,\r\n      HALOGEN,\r\n      HIGHPRESSUREMERCURY,\r\n      HIGHPRESSURESODIUM,\r\n      LED,\r\n      METALHALIDE,\r\n      OLED,\r\n      TUNGSTENFILAMENT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCLayerSetDirection\r\n   {\r\n      AXIS1,\r\n      AXIS2,\r\n      AXIS3\r\n   }\r\n\r\n   public enum IFCLightDistributionCurve\r\n   {\r\n      TYPE_A,\r\n      TYPE_B,\r\n      TYPE_C,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCLightEmissionSource\r\n   {\r\n      COMPACTFLUORESCENT,\r\n      FLUORESCENT,\r\n      HIGHPRESSUREMERCURY,\r\n      HIGHPRESSURESODIUM,\r\n      LIGHTEMITTINGDIODE,\r\n      LOWPRESSURESODIUM,\r\n      LOWVOLTAGEHALOGEN,\r\n      MAINVOLTAGEHALOGEN,\r\n      METALHALIDE,\r\n      TUNGSTENFILAMENT,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCLightFixtureType\r\n   {\r\n      DIRECTIONSOURCE,\r\n      POINTSOURCE,\r\n      SECURITYLIGHTING,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCLiquidTerminalType\r\n   {\r\n      HOSEREEL,\r\n      LOADINGARM,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCLoadGroupType\r\n   {\r\n      LOAD_CASE,\r\n      LOAD_COMBINATION,\r\n      LOAD_GROUP,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCLogicalOperator\r\n   {\r\n      LOGICALAND,\r\n      LOGICALNOTAND,\r\n      LOGICALNOTOR,\r\n      LOGICALOR,\r\n      LOGICALXOR\r\n   }\r\n\r\n   public enum IFCMarineFacilityType\r\n   {\r\n      BARRIERBEACH,\r\n      BREAKWATER,\r\n      CANAL,\r\n      DRYDOCK,\r\n      FLOATINGDOCK,\r\n      HYDROLIFT,\r\n      JETTY,\r\n      LAUNCHRECOVERY,\r\n      MARINEDEFENCE,\r\n      NAVIGATIONALCHANNEL,\r\n      PORT,\r\n      QUAY,\r\n      REVETMENT,\r\n      SHIPLIFT,\r\n      SHIPLOCK,\r\n      SHIPYARD,\r\n      SLIPWAY,\r\n      WATERWAY,\r\n      WATERWAYSHIPLIFT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCMarinePartType\r\n   {\r\n      ABOVEWATERLINE,\r\n      ANCHORAGE,\r\n      APPROACHCHANNEL,\r\n      BELOWWATERLINE,\r\n      BERTHINGSTRUCTURE,\r\n      CHAMBER,\r\n      CILL_LEVEL,\r\n      COPELEVEL,\r\n      CORE,\r\n      CREST,\r\n      GATEHEAD,\r\n      GUDINGSTRUCTURE,\r\n      HIGHWATERLINE,\r\n      LANDFIELD,\r\n      LEEWARDSIDE,\r\n      LOWWATERLINE,\r\n      MANUFACTURING,\r\n      NAVIGATIONALAREA,\r\n      PROTECTION,\r\n      SHIPTRANSFER,\r\n      STORAGEAREA,\r\n      VEHICLESERVICING,\r\n      WATERFIELD,\r\n      WEATHERSIDE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCMechanicalFastenerType\r\n   {\r\n      ANCHORBOLT,\r\n      BOLT,\r\n      CHAIN,\r\n      COUPLER,\r\n      DOWEL,\r\n      NAIL,\r\n      NAILPLATE,\r\n      RAILFASTENING,\r\n      RAILJOINT,\r\n      RIVET,\r\n      ROPE,\r\n      SCREW,\r\n      SHEARCONNECTOR,\r\n      STAPLE,\r\n      STUDSHEARCONNECTOR,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCMedicalDeviceType\r\n   {\r\n      AIRSTATION,\r\n      FEEDAIRUNIT,\r\n      OXYGENGENERATOR,\r\n      OXYGENPLANT,\r\n      VACUUMSTATION,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCMemberType\r\n   {\r\n      ARCH_SEGMENT,\r\n      BRACE,\r\n      CHORD,\r\n      COLLAR,\r\n      MEMBER,\r\n      MULLION,\r\n      PLATE,\r\n      POST,\r\n      PURLIN,\r\n      RAFTER,\r\n      STAY_CABLE,\r\n      STIFFENING_RIB,\r\n      STRINGER,\r\n      STRUCTURALCABLE,\r\n      STRUT,\r\n      STUD,\r\n      SUSPENDER,\r\n      SUSPENSION_CABLE,\r\n      TIEBAR,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCMobileTelecommunicationsApplianceType\r\n   {\r\n      ACCESSPOINT,\r\n      BASEBANDUNIT,\r\n      BASETRANSCEIVERSTATION,\r\n      E_UTRAN_NODE_B,\r\n      GATEWAY_GPRS_SUPPORT_NODE,\r\n      MASTERUNIT,\r\n      MOBILESWITCHINGCENTER,\r\n      MSCSERVER,\r\n      PACKETCONTROLUNIT,\r\n      REMOTERADIOUNIT,\r\n      REMOTEUNIT,\r\n      SERVICE_GPRS_SUPPORT_NODE,\r\n      SUBSCRIBERSERVER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCMooringDeviceType\r\n   {\r\n      BOLLARD,\r\n      LINETENSIONER,\r\n      MAGNETICDEVICE,\r\n      MOORINGHOOKS,\r\n      VACUUMDEVICE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCMotorConnectionType\r\n   {\r\n      BELTDRIVE,\r\n      COUPLING,\r\n      DIRECTDRIVE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCNavigationElementType\r\n   {\r\n      BEACON,\r\n      BUOY,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCObjective\r\n   {\r\n      CODECOMPLIANCE,\r\n      CODEWAIVER,\r\n      DESIGNINTENT,\r\n      EXTERNAL,\r\n      HEALTHANDSAFETY,\r\n      MERGECONFLICT,\r\n      MODELVIEW,\r\n      PARAMETER,\r\n      REQUIREMENT,\r\n      SPECIFICATION,\r\n      TRIGGERCONDITION,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCOccupantType\r\n   {\r\n      ASSIGNEE,\r\n      ASSIGNOR,\r\n      LESSEE,\r\n      LESSOR,\r\n      LETTINGAGENT,\r\n      OWNER,\r\n      TENANT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCOpeningElementType\r\n   {\r\n      OPENING,\r\n      RECESS,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCOutletType\r\n   {\r\n      AUDIOVISUALOUTLET,\r\n      COMMUNICATIONSOUTLET,\r\n      DATAOUTLET,\r\n      POWEROUTLET,\r\n      TELEPHONEOUTLET,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCPavementType\r\n   {\r\n      FLEXIBLE,\r\n      RIGID,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCPerformanceHistoryType\r\n   {\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCPermeableCoveringOperation\r\n   {\r\n      GRILL,\r\n      LOUVER,\r\n      SCREEN,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCPermitType\r\n   {\r\n      ACCESS,\r\n      BUILDING,\r\n      WORK,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCPhysicalOrVirtual\r\n   {\r\n      PHYSICAL,\r\n      VIRTUAL,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCPileConstruction\r\n   {\r\n      CAST_IN_PLACE,\r\n      COMPOSITE,\r\n      PRECAST_CONCRETE,\r\n      PREFAB_STEEL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCPileType\r\n   {\r\n      BORED,\r\n      COHESION,\r\n      DRIVEN,\r\n      FRICTION,\r\n      JETGROUTING,\r\n      SUPPORT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCPipeFittingType\r\n   {\r\n      BEND,\r\n      CONNECTOR,\r\n      ENTRY,\r\n      EXIT,\r\n      JUNCTION,\r\n      OBSTRUCTION,\r\n      TRANSITION,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCPipeSegmentType\r\n   {\r\n      CULVERT,\r\n      FLEXIBLESEGMENT,\r\n      GUTTER,\r\n      RIGIDSEGMENT,\r\n      SPOOL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCPlateType\r\n   {\r\n      BASE_PLATE,\r\n      COVER_PLATE,\r\n      CURTAIN_PANEL,\r\n      FLANGE_PLATE,\r\n      GUSSET_PLATE,\r\n      SHEET,\r\n      SPLICE_PLATE,\r\n      STIFFENER_PLATE,\r\n      WEB_PLATE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCPreferredSurfaceCurveRepresentation\r\n   {\r\n      CURVE3D,\r\n      PCURVE_S1,\r\n      PCURVE_S2\r\n   }\r\n\r\n   public enum IFCProcedureType\r\n   {\r\n      ADVICE_CAUTION,\r\n      ADVICE_NOTE,\r\n      ADVICE_WARNING,\r\n      CALIBRATION,\r\n      DIAGNOSTIC,\r\n      SHUTDOWN,\r\n      STARTUP,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCProfileType\r\n   {\r\n      AREA,\r\n      CURVE\r\n   }\r\n\r\n   public enum IFCProjectOrderType\r\n   {\r\n      CHANGEORDER,\r\n      MAINTENANCEWORKORDER,\r\n      MOVEORDER,\r\n      PURCHASEORDER,\r\n      WORKORDER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCProjectedOrTrueLength\r\n   {\r\n      PROJECTED_LENGTH,\r\n      TRUE_LENGTH\r\n   }\r\n\r\n   public enum IFCProjectionElementType\r\n   {\r\n      BLISTER,\r\n      DEVIATOR,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCPropertySetTemplateType\r\n   {\r\n      PSET_MATERIALDRIVEN,\r\n      PSET_OCCURRENCEDRIVEN,\r\n      PSET_PERFORMANCEDRIVEN,\r\n      PSET_PROFILEDRIVEN,\r\n      PSET_TYPEDRIVENONLY,\r\n      PSET_TYPEDRIVENOVERRIDE,\r\n      QTO_OCCURRENCEDRIVEN,\r\n      QTO_TYPEDRIVENONLY,\r\n      QTO_TYPEDRIVENOVERRIDE,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCProtectiveDeviceTrippingUnitType\r\n   {\r\n      ELECTROMAGNETIC,\r\n      ELECTRONIC,\r\n      RESIDUALCURRENT,\r\n      THERMAL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCProtectiveDeviceType\r\n   {\r\n      ANTI_ARCING_DEVICE,\r\n      CIRCUITBREAKER,\r\n      EARTHINGSWITCH,\r\n      EARTHLEAKAGECIRCUITBREAKER,\r\n      FUSEDISCONNECTOR,\r\n      RESIDUALCURRENTCIRCUITBREAKER,\r\n      RESIDUALCURRENTSWITCH,\r\n      SPARKGAP,\r\n      VARISTOR,\r\n      VOLTAGELIMITER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCPumpType\r\n   {\r\n      CIRCULATOR,\r\n      ENDSUCTION,\r\n      SPLITCASE,\r\n      SUBMERSIBLEPUMP,\r\n      SUMPPUMP,\r\n      VERTICALINLINE,\r\n      VERTICALTURBINE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCRailType\r\n   {\r\n      BLADE,\r\n      CHECKRAIL,\r\n      GUARDRAIL,\r\n      RACKRAIL,\r\n      RAIL,\r\n      STOCKRAIL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCRailingType\r\n   {\r\n      BALUSTRADE,\r\n      FENCE,\r\n      GUARDRAIL,\r\n      HANDRAIL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCRailwayPartType\r\n   {\r\n      ABOVETRACK,\r\n      DILATIONTRACK,\r\n      LINESIDE,\r\n      LINESIDEPART,\r\n      PLAINTRACK,\r\n      SUBSTRUCTURE,\r\n      TRACK,\r\n      TRACKPART,\r\n      TURNOUTTRACK,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCRailwayType\r\n   {\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCRampFlightType\r\n   {\r\n      SPIRAL,\r\n      STRAIGHT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCRampType\r\n   {\r\n      HALF_TURN_RAMP,\r\n      QUARTER_TURN_RAMP,\r\n      SPIRAL_RAMP,\r\n      STRAIGHT_RUN_RAMP,\r\n      TWO_QUARTER_TURN_RAMP,\r\n      TWO_STRAIGHT_RUN_RAMP,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCRecurrenceType\r\n   {\r\n      BY_DAY_COUNT,\r\n      BY_WEEKDAY_COUNT,\r\n      DAILY,\r\n      MONTHLY_BY_DAY_OF_MONTH,\r\n      MONTHLY_BY_POSITION,\r\n      WEEKLY,\r\n      YEARLY_BY_DAY_OF_MONTH,\r\n      YEARLY_BY_POSITION\r\n   }\r\n\r\n   public enum IFCReferentType\r\n   {\r\n      BOUNDARY,\r\n      INTERSECTION,\r\n      KILOPOINT,\r\n      LANDMARK,\r\n      MILEPOINT,\r\n      POSITION,\r\n      REFERENCEMARKER,\r\n      STATION,\r\n      SUPERELEVATIONEVENT,\r\n      WIDTHEVENT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCReflectanceMethod\r\n   {\r\n      BLINN,\r\n      FLAT,\r\n      GLASS,\r\n      MATT,\r\n      METAL,\r\n      MIRROR,\r\n      PHONG,\r\n      PHYSICAL,\r\n      PLASTIC,\r\n      STRAUSS,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCReinforcedSoilType\r\n   {\r\n      DYNAMICALLYCOMPACTED,\r\n      GROUTED,\r\n      REPLACED,\r\n      ROLLERCOMPACTED,\r\n      SURCHARGEPRELOADED,\r\n      VERTICALLYDRAINED,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCReinforcingBarRole\r\n   {\r\n      ANCHORING,\r\n      EDGE,\r\n      LIGATURE,\r\n      MAIN,\r\n      PUNCHING,\r\n      RING,\r\n      SHEAR,\r\n      STUD,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCReinforcingBarSurface\r\n   {\r\n      PLAIN,\r\n      TEXTURED\r\n   }\r\n\r\n   public enum IFCReinforcingBarType\r\n   {\r\n      ANCHORING,\r\n      EDGE,\r\n      LIGATURE,\r\n      MAIN,\r\n      PUNCHING,\r\n      RING,\r\n      SHEAR,\r\n      SPACEBAR,\r\n      STUD,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCReinforcingMeshType\r\n   {\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCRoadPartType\r\n   {\r\n      BICYCLECROSSING,\r\n      BUS_STOP,\r\n      CARRIAGEWAY,\r\n      CENTRALISLAND,\r\n      CENTRALRESERVE,\r\n      HARDSHOULDER,\r\n      INTERSECTION,\r\n      LAYBY,\r\n      PARKINGBAY,\r\n      PASSINGBAY,\r\n      PEDESTRIAN_CROSSING,\r\n      RAILWAYCROSSING,\r\n      REFUGEISLAND,\r\n      ROADSEGMENT,\r\n      ROADSIDE,\r\n      ROADSIDEPART,\r\n      ROADWAYPLATEAU,\r\n      ROUNDABOUT,\r\n      SHOULDER,\r\n      SIDEWALK,\r\n      SOFTSHOULDER,\r\n      TOLLPLAZA,\r\n      TRAFFICISLAND,\r\n      TRAFFICLANE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCRoadType\r\n   {\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCRole\r\n   {\r\n      ARCHITECT,\r\n      BUILDINGOPERATOR,\r\n      BUILDINGOWNER,\r\n      CIVILENGINEER,\r\n      CLIENT,\r\n      COMMISSIONINGENGINEER,\r\n      CONSTRUCTIONMANAGER,\r\n      CONSULTANT,\r\n      CONTRACTOR,\r\n      COSTENGINEER,\r\n      ELECTRICALENGINEER,\r\n      ENGINEER,\r\n      FACILITIESMANAGER,\r\n      FIELDCONSTRUCTIONMANAGER,\r\n      MANUFACTURER,\r\n      MECHANICALENGINEER,\r\n      OWNER,\r\n      PROJECTMANAGER,\r\n      RESELLER,\r\n      STRUCTURALENGINEER,\r\n      SUBCONTRACTOR,\r\n      SUPPLIER,\r\n      USERDEFINED\r\n   }\r\n\r\n   public enum IFCRoofType\r\n   {\r\n      BARREL_ROOF,\r\n      BUTTERFLY_ROOF,\r\n      DOME_ROOF,\r\n      FLAT_ROOF,\r\n      FREEFORM,\r\n      GABLE_ROOF,\r\n      GAMBREL_ROOF,\r\n      HIPPED_GABLE_ROOF,\r\n      HIP_ROOF,\r\n      MANSARD_ROOF,\r\n      PAVILION_ROOF,\r\n      RAINBOW_ROOF,\r\n      SHED_ROOF,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCSIPrefix\r\n   {\r\n      ATTO,\r\n      CENTI,\r\n      DECA,\r\n      DECI,\r\n      EXA,\r\n      FEMTO,\r\n      GIGA,\r\n      HECTO,\r\n      KILO,\r\n      MEGA,\r\n      MICRO,\r\n      MILLI,\r\n      NANO,\r\n      PETA,\r\n      PICO,\r\n      TERA\r\n   }\r\n\r\n   public enum IFCSIUnitName\r\n   {\r\n      AMPERE,\r\n      BECQUEREL,\r\n      CANDELA,\r\n      COULOMB,\r\n      CUBIC_METRE,\r\n      DEGREE_CELSIUS,\r\n      FARAD,\r\n      GRAM,\r\n      GRAY,\r\n      HENRY,\r\n      HERTZ,\r\n      JOULE,\r\n      KELVIN,\r\n      LUMEN,\r\n      LUX,\r\n      METRE,\r\n      MOLE,\r\n      NEWTON,\r\n      OHM,\r\n      PASCAL,\r\n      RADIAN,\r\n      SECOND,\r\n      SIEMENS,\r\n      SIEVERT,\r\n      SQUARE_METRE,\r\n      STERADIAN,\r\n      TESLA,\r\n      VOLT,\r\n      WATT,\r\n      WEBER\r\n   }\r\n\r\n   public enum IFCSanitaryTerminalType\r\n   {\r\n      BATH,\r\n      BIDET,\r\n      CISTERN,\r\n      SANITARYFOUNTAIN,\r\n      SHOWER,\r\n      SINK,\r\n      TOILETPAN,\r\n      URINAL,\r\n      WASHHANDBASIN,\r\n      WCSEAT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCSectionType\r\n   {\r\n      TAPERED,\r\n      UNIFORM\r\n   }\r\n\r\n   public enum IFCSensorType\r\n   {\r\n      CO2SENSOR,\r\n      CONDUCTANCESENSOR,\r\n      CONTACTSENSOR,\r\n      COSENSOR,\r\n      EARTHQUAKESENSOR,\r\n      FIRESENSOR,\r\n      FLOWSENSOR,\r\n      FOREIGNOBJECTDETECTIONSENSOR,\r\n      FROSTSENSOR,\r\n      GASSENSOR,\r\n      HEATSENSOR,\r\n      HUMIDITYSENSOR,\r\n      IDENTIFIERSENSOR,\r\n      IONCONCENTRATIONSENSOR,\r\n      LEVELSENSOR,\r\n      LIGHTSENSOR,\r\n      MOISTURESENSOR,\r\n      MOVEMENTSENSOR,\r\n      OBSTACLESENSOR,\r\n      PHSENSOR,\r\n      PRESSURESENSOR,\r\n      RADIATIONSENSOR,\r\n      RADIOACTIVITYSENSOR,\r\n      RAINSENSOR,\r\n      SMOKESENSOR,\r\n      SNOWDEPTHSENSOR,\r\n      SOUNDSENSOR,\r\n      TEMPERATURESENSOR,\r\n      TRAINSENSOR,\r\n      TURNOUTCLOSURESENSOR,\r\n      WHEELSENSOR,\r\n      WINDSENSOR,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCSequence\r\n   {\r\n      FINISH_FINISH,\r\n      FINISH_START,\r\n      START_FINISH,\r\n      START_START,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCShadingDeviceType\r\n   {\r\n      AWNING,\r\n      JALOUSIE,\r\n      SHUTTER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCSignType\r\n   {\r\n      MARKER,\r\n      MIRROR,\r\n      PICTORAL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCSignalType\r\n   {\r\n      AUDIO,\r\n      MIXED,\r\n      VISUAL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCSimplePropertyTemplateType\r\n   {\r\n      P_BOUNDEDVALUE,\r\n      P_ENUMERATEDVALUE,\r\n      P_LISTVALUE,\r\n      P_REFERENCEVALUE,\r\n      P_SINGLEVALUE,\r\n      P_TABLEVALUE,\r\n      Q_AREA,\r\n      Q_COUNT,\r\n      Q_LENGTH,\r\n      Q_NUMBER,\r\n      Q_TIME,\r\n      Q_VOLUME,\r\n      Q_WEIGHT\r\n   }\r\n\r\n   public enum IFCSlabType\r\n   {\r\n      APPROACH_SLAB,\r\n      BASESLAB,\r\n      FLOOR,\r\n      LANDING,\r\n      PAVING,\r\n      ROOF,\r\n      SIDEWALK,\r\n      TRACKSLAB,\r\n      WEARING,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCSolarDeviceType\r\n   {\r\n      SOLARCOLLECTOR,\r\n      SOLARPANEL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCSpaceHeaterType\r\n   {\r\n      CONVECTOR,\r\n      RADIATOR,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCSpaceType\r\n   {\r\n      BERTH,\r\n      EXTERNAL,\r\n      GFA,\r\n      INTERNAL,\r\n      PARKING,\r\n      SPACE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCSpatialZoneType\r\n   {\r\n      CONSTRUCTION,\r\n      FIRESAFETY,\r\n      INTERFERENCE,\r\n      LIGHTING,\r\n      OCCUPANCY,\r\n      RESERVATION,\r\n      SECURITY,\r\n      THERMAL,\r\n      TRANSPORT,\r\n      VENTILATION,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCStackTerminalType\r\n   {\r\n      BIRDCAGE,\r\n      COWL,\r\n      RAINWATERHOPPER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCStairFlightType\r\n   {\r\n      CURVED,\r\n      FREEFORM,\r\n      SPIRAL,\r\n      STRAIGHT,\r\n      WINDER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCStairType\r\n   {\r\n      CURVED_RUN_STAIR,\r\n      DOUBLE_RETURN_STAIR,\r\n      HALF_TURN_STAIR,\r\n      HALF_WINDING_STAIR,\r\n      LADDER,\r\n      QUARTER_TURN_STAIR,\r\n      QUARTER_WINDING_STAIR,\r\n      SPIRAL_STAIR,\r\n      STRAIGHT_RUN_STAIR,\r\n      THREE_QUARTER_TURN_STAIR,\r\n      THREE_QUARTER_WINDING_STAIR,\r\n      TWO_CURVED_RUN_STAIR,\r\n      TWO_QUARTER_TURN_STAIR,\r\n      TWO_QUARTER_WINDING_STAIR,\r\n      TWO_STRAIGHT_RUN_STAIR,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCState\r\n   {\r\n      LOCKED,\r\n      READONLY,\r\n      READONLYLOCKED,\r\n      READWRITE,\r\n      READWRITELOCKED\r\n   }\r\n\r\n   public enum IFCStructuralCurveActivityType\r\n   {\r\n      CONST,\r\n      DISCRETE,\r\n      EQUIDISTANT,\r\n      LINEAR,\r\n      PARABOLA,\r\n      POLYGONAL,\r\n      SINUS,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCStructuralCurveMemberType\r\n   {\r\n      CABLE,\r\n      COMPRESSION_MEMBER,\r\n      PIN_JOINED_MEMBER,\r\n      RIGID_JOINED_MEMBER,\r\n      TENSION_MEMBER,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCStructuralSurfaceActivityType\r\n   {\r\n      BILINEAR,\r\n      CONST,\r\n      DISCRETE,\r\n      ISOCONTOUR,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCStructuralSurfaceMemberType\r\n   {\r\n      BENDING_ELEMENT,\r\n      MEMBRANE_ELEMENT,\r\n      SHELL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCSubContractResourceType\r\n   {\r\n      PURCHASE,\r\n      WORK,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCSurfaceFeatureType\r\n   {\r\n      DEFECT,\r\n      HATCHMARKING,\r\n      LINEMARKING,\r\n      MARK,\r\n      NONSKIDSURFACING,\r\n      PAVEMENTSURFACEMARKING,\r\n      RUMBLESTRIP,\r\n      SYMBOLMARKING,\r\n      TAG,\r\n      TRANSVERSERUMBLESTRIP,\r\n      TREATMENT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCSurfaceSide\r\n   {\r\n      BOTH,\r\n      NEGATIVE,\r\n      POSITIVE\r\n   }\r\n\r\n   public enum IFCSwitchingDeviceType\r\n   {\r\n      CONTACTOR,\r\n      DIMMERSWITCH,\r\n      EMERGENCYSTOP,\r\n      KEYPAD,\r\n      MOMENTARYSWITCH,\r\n      RELAY,\r\n      SELECTORSWITCH,\r\n      STARTER,\r\n      START_AND_STOP_EQUIPMENT,\r\n      SWITCHDISCONNECTOR,\r\n      TOGGLESWITCH,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCSystemFurnitureElementType\r\n   {\r\n      PANEL,\r\n      SUBRACK,\r\n      WORKSURFACE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCTankType\r\n   {\r\n      BASIN,\r\n      BREAKPRESSURE,\r\n      EXPANSION,\r\n      FEEDANDEXPANSION,\r\n      OILRETENTIONTRAY,\r\n      PRESSUREVESSEL,\r\n      STORAGE,\r\n      VESSEL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCTaskDuration\r\n   {\r\n      ELAPSEDTIME,\r\n      WORKTIME,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCTaskType\r\n   {\r\n      ADJUSTMENT,\r\n      ATTENDANCE,\r\n      CALIBRATION,\r\n      CONSTRUCTION,\r\n      DEMOLITION,\r\n      DISMANTLE,\r\n      DISPOSAL,\r\n      EMERGENCY,\r\n      INSPECTION,\r\n      INSTALLATION,\r\n      LOGISTIC,\r\n      MAINTENANCE,\r\n      MOVE,\r\n      OPERATION,\r\n      REMOVAL,\r\n      RENOVATION,\r\n      SAFETY,\r\n      SHUTDOWN,\r\n      STARTUP,\r\n      TESTING,\r\n      TROUBLESHOOTING,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCTendonAnchorType\r\n   {\r\n      COUPLER,\r\n      FIXED_END,\r\n      TENSIONING_END,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCTendonConduitType\r\n   {\r\n      COUPLER,\r\n      DIABOLO,\r\n      DUCT,\r\n      GROUTING_DUCT,\r\n      TRUMPET,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCTendonType\r\n   {\r\n      BAR,\r\n      COATED,\r\n      STRAND,\r\n      WIRE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCTextPath\r\n   {\r\n      DOWN,\r\n      LEFT,\r\n      RIGHT,\r\n      UP\r\n   }\r\n\r\n   public enum IFCTimeSeriesDataType\r\n   {\r\n      CONTINUOUS,\r\n      DISCRETE,\r\n      DISCRETEBINARY,\r\n      PIECEWISEBINARY,\r\n      PIECEWISECONSTANT,\r\n      PIECEWISECONTINUOUS,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCTrackElementType\r\n   {\r\n      BLOCKINGDEVICE,\r\n      DERAILER,\r\n      FROG,\r\n      HALF_SET_OF_BLADES,\r\n      SLEEPER,\r\n      SPEEDREGULATOR,\r\n      TRACKENDOFALIGNMENT,\r\n      VEHICLESTOP,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCTransformerType\r\n   {\r\n      CHOPPER,\r\n      COMBINED,\r\n      CURRENT,\r\n      FREQUENCY,\r\n      INVERTER,\r\n      RECTIFIER,\r\n      VOLTAGE,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCTransitionCode\r\n   {\r\n      CONTINUOUS,\r\n      CONTSAMEGRADIENT,\r\n      CONTSAMEGRADIENTSAMECURVATURE,\r\n      DISCONTINUOUS\r\n   }\r\n\r\n   public enum IFCTransportElementType\r\n   {\r\n      CRANEWAY,\r\n      ELEVATOR,\r\n      ESCALATOR,\r\n      HAULINGGEAR,\r\n      LIFTINGGEAR,\r\n      MOVINGWALKWAY,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCTrimmingPreference\r\n   {\r\n      CARTESIAN,\r\n      PARAMETER,\r\n      UNSPECIFIED\r\n   }\r\n\r\n   public enum IFCTubeBundleType\r\n   {\r\n      FINNED,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCUnit\r\n   {\r\n      ABSORBEDDOSEUNIT,\r\n      AMOUNTOFSUBSTANCEUNIT,\r\n      AREAUNIT,\r\n      DOSEEQUIVALENTUNIT,\r\n      ELECTRICCAPACITANCEUNIT,\r\n      ELECTRICCHARGEUNIT,\r\n      ELECTRICCONDUCTANCEUNIT,\r\n      ELECTRICCURRENTUNIT,\r\n      ELECTRICRESISTANCEUNIT,\r\n      ELECTRICVOLTAGEUNIT,\r\n      ENERGYUNIT,\r\n      FORCEUNIT,\r\n      FREQUENCYUNIT,\r\n      ILLUMINANCEUNIT,\r\n      INDUCTANCEUNIT,\r\n      LENGTHUNIT,\r\n      LUMINOUSFLUXUNIT,\r\n      LUMINOUSINTENSITYUNIT,\r\n      MAGNETICFLUXDENSITYUNIT,\r\n      MAGNETICFLUXUNIT,\r\n      MASSUNIT,\r\n      PLANEANGLEUNIT,\r\n      POWERUNIT,\r\n      PRESSUREUNIT,\r\n      RADIOACTIVITYUNIT,\r\n      SOLIDANGLEUNIT,\r\n      THERMODYNAMICTEMPERATUREUNIT,\r\n      TIMEUNIT,\r\n      VOLUMEUNIT,\r\n      USERDEFINED\r\n   }\r\n\r\n   public enum IFCUnitaryControlElementType\r\n   {\r\n      ALARMPANEL,\r\n      BASESTATIONCONTROLLER,\r\n      COMBINED,\r\n      CONTROLPANEL,\r\n      GASDETECTIONPANEL,\r\n      HUMIDISTAT,\r\n      INDICATORPANEL,\r\n      MIMICPANEL,\r\n      THERMOSTAT,\r\n      WEATHERSTATION,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCUnitaryEquipmentType\r\n   {\r\n      AIRCONDITIONINGUNIT,\r\n      AIRHANDLER,\r\n      DEHUMIDIFIER,\r\n      ROOFTOPUNIT,\r\n      SPLITSYSTEM,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCValveType\r\n   {\r\n      AIRRELEASE,\r\n      ANTIVACUUM,\r\n      CHANGEOVER,\r\n      CHECK,\r\n      COMMISSIONING,\r\n      DIVERTING,\r\n      DOUBLECHECK,\r\n      DOUBLEREGULATING,\r\n      DRAWOFFCOCK,\r\n      FAUCET,\r\n      FLUSHING,\r\n      GASCOCK,\r\n      GASTAP,\r\n      ISOLATING,\r\n      MIXING,\r\n      PRESSUREREDUCING,\r\n      PRESSURERELIEF,\r\n      REGULATING,\r\n      SAFETYCUTOFF,\r\n      STEAMTRAP,\r\n      STOPCOCK,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCVehicleType\r\n   {\r\n      CARGO,\r\n      ROLLINGSTOCK,\r\n      VEHICLE,\r\n      VEHICLEAIR,\r\n      VEHICLEMARINE,\r\n      VEHICLETRACKED,\r\n      VEHICLEWHEELED,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCVibrationDamperType\r\n   {\r\n      AXIAL_YIELD,\r\n      BENDING_YIELD,\r\n      FRICTION,\r\n      RUBBER,\r\n      SHEAR_YIELD,\r\n      VISCOUS,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCVibrationIsolatorType\r\n   {\r\n      BASE,\r\n      COMPRESSION,\r\n      SPRING,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCVirtualElementType\r\n   {\r\n      BOUNDARY,\r\n      CLEARANCE,\r\n      PROVISIONFORVOID,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCVoidingFeatureType\r\n   {\r\n      CHAMFER,\r\n      CUTOUT,\r\n      EDGE,\r\n      HOLE,\r\n      MITER,\r\n      NOTCH,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCWallType\r\n   {\r\n      ELEMENTEDWALL,\r\n      MOVABLE,\r\n      PARAPET,\r\n      PARTITIONING,\r\n      PLUMBINGWALL,\r\n      POLYGONAL,\r\n      RETAININGWALL,\r\n      SHEAR,\r\n      SOLIDWALL,\r\n      STANDARD,\r\n      WAVEWALL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCWasteTerminalType\r\n   {\r\n      FLOORTRAP,\r\n      FLOORWASTE,\r\n      GULLYSUMP,\r\n      GULLYTRAP,\r\n      ROOFDRAIN,\r\n      WASTEDISPOSALUNIT,\r\n      WASTETRAP,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCWindowPanelOperation\r\n   {\r\n      BOTTOMHUNG,\r\n      FIXEDCASEMENT,\r\n      OTHEROPERATION,\r\n      PIVOTHORIZONTAL,\r\n      PIVOTVERTICAL,\r\n      REMOVABLECASEMENT,\r\n      SIDEHUNGLEFTHAND,\r\n      SIDEHUNGRIGHTHAND,\r\n      SLIDINGHORIZONTAL,\r\n      SLIDINGVERTICAL,\r\n      TILTANDTURNLEFTHAND,\r\n      TILTANDTURNRIGHTHAND,\r\n      TOPHUNG,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCWindowPanelPosition\r\n   {\r\n      BOTTOM,\r\n      LEFT,\r\n      MIDDLE,\r\n      RIGHT,\r\n      TOP,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCWindowType\r\n   {\r\n      LIGHTDOME,\r\n      SKYLIGHT,\r\n      WINDOW,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCWindowTypePartitioning\r\n   {\r\n      DOUBLE_PANEL_HORIZONTAL,\r\n      DOUBLE_PANEL_VERTICAL,\r\n      SINGLE_PANEL,\r\n      TRIPLE_PANEL_BOTTOM,\r\n      TRIPLE_PANEL_HORIZONTAL,\r\n      TRIPLE_PANEL_LEFT,\r\n      TRIPLE_PANEL_RIGHT,\r\n      TRIPLE_PANEL_TOP,\r\n      TRIPLE_PANEL_VERTICAL,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCWorkCalendarType\r\n   {\r\n      FIRSTSHIFT,\r\n      SECONDSHIFT,\r\n      THIRDSHIFT,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCWorkPlanType\r\n   {\r\n      ACTUAL,\r\n      BASELINE,\r\n      PLANNED,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   public enum IFCWorkScheduleType\r\n   {\r\n      ACTUAL,\r\n      BASELINE,\r\n      PLANNED,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetElementShading::ShadingDeviceType possible values.\r\n   /// </summary>\r\n   public enum PSetElementShading_ShadingDeviceType\r\n   {\r\n      Fixed,\r\n      Movable,\r\n      Exterior,\r\n      Interior,\r\n      Overhang,\r\n      SideFin,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetLightFixtureTypeCommon::LightFixtureMountingType possible values.\r\n   /// </summary>\r\n   public enum PSetLightFixtureTypeCommon_LightFixtureMountingType\r\n   {\r\n      CableSpanned,\r\n      FreeStanding,\r\n      Pole_Side,\r\n      Pole_Top,\r\n      Recessed,\r\n      Surface,\r\n      Suspended,\r\n      TrackMounted,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetLightFixtureTypeCommon::LightFixturePlacingType possible values.\r\n   /// </summary>\r\n   public enum PSetLightFixtureTypeCommon_LightFixturePlacingType\r\n   {\r\n      Ceiling,\r\n      Floor,\r\n      Furniture,\r\n      Pole,\r\n      Wall,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetFlowTerminalAirTerminal::AirTerminalAirflowType possible values.\r\n   /// </summary>\r\n   public enum PSetFlowTerminalAirTerminal_AirTerminalAirflowType\r\n   {\r\n      SupplyAir,\r\n      ReturnAir,\r\n      ExhaustAir,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetFlowTerminalAirTerminal::AirTerminalLocation possible values.\r\n   /// </summary>\r\n   public enum PSetFlowTerminalAirTerminal_AirTerminalLocation\r\n   {\r\n      SideWallHigh,\r\n      SideWallLow,\r\n      CeilingPerimeter,\r\n      CeilingInterior,\r\n      Floor,\r\n      Sill,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalShape possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalShape\r\n   {\r\n      Round,\r\n      Rectangular,\r\n      Square,\r\n      Slot,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalFlowPattern possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalFlowPattern\r\n   {\r\n      LinearSingle,\r\n      LinearDouble,\r\n      LinearFourWay,\r\n      Radial,\r\n      Swirl,\r\n      Displacement, // Official Displacment in IFC2x3_TC1 help.\r\n      CompactJet,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalDischargeDirection possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalDischargeDirection\r\n   {\r\n      Parallel,\r\n      Perpendicular,\r\n      Adjustable,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalFinishType possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalFinishType\r\n   {\r\n      Annodized,\r\n      Painted,\r\n      None,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalMountingType possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalMountingType\r\n   {\r\n      Surface,\r\n      FlatFlush,\r\n      LayIn,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalCoreType possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalCoreType\r\n   {\r\n      ShutterBlade,\r\n      CurvedBlade,\r\n      Removable,\r\n      Reversible,\r\n      None,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalFlowControlType possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalFlowControlType\r\n   {\r\n      Damper,\r\n      Bellows,\r\n      None,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetElectricalDeviceCommon::InsulationStandardClass possible values.\r\n   /// </summary>\r\n   public enum PSetElectricalDeviceCommon_InsulationStandardClass\r\n   {\r\n      Class0Appliance,\r\n      Class0IAppliance,\r\n      ClassIAppliance,\r\n      ClassIIAppliance,\r\n      ClassIIIAppliance,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// ADDITIONAL Definition for PsetElectricalDeviceCommon::ConductorFunction possible values.\r\n   /// </summary>\r\n   public enum PsetElectricalDeviceCommon_ConductorFunction\r\n   {\r\n      L1,\r\n      L2,\r\n      L3\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PsetSanitaryTerminalTypeToiletPan::ToiletType possible values.\r\n   /// </summary>\r\n   public enum PsetSanitaryTerminalTypeToiletPan_ToiletType\r\n   {\r\n      BedPanWasher,\r\n      Chemical,\r\n      CloseCoupled,\r\n      LooseCoupled,\r\n      SlopHopper,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PsetSanitaryTerminalTypeToiletPan::ToiletPanType possible values.\r\n   /// </summary>\r\n   public enum PsetSanitaryTerminalTypeToiletPan_ToiletPanType\r\n   {\r\n      Siphonic,\r\n      Squat,\r\n      WashDown,\r\n      WashOut,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PsetSanitaryTerminalTypeToiletPan::SanitaryMounting possible values.\r\n   /// </summary>\r\n   public enum PsetSanitaryTerminalTypeToiletPan_SanitaryMounting\r\n   {\r\n      BackToWall,\r\n      Pedestal,\r\n      CounterTop,\r\n      WallHung,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   // <summary>\r\n   /// Defines the PSetElectricalDeviceCommon::InsulationStandardClass possible values.\r\n   /// </summary>\r\n   public enum PsetSwitchingDeviceTypeCommon_SwitchFunction\r\n   {\r\n      OnOffSwitch,\r\n      IntermediateSwitch,\r\n      DoubleThrowSwitch,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   // <summary>\r\n   /// Defines the PsetSwitchingDeviceTypeToggleSwitch::ToggleSwitchType possible values.\r\n   /// </summary>\r\n   public enum PsetSwitchingDeviceTypeToggleSwitch_ToggleSwitchType\r\n   {\r\n      BreakGlass,\r\n      Changeover,\r\n      Dimmer,\r\n      KeyOperated,\r\n      ManualPull,\r\n      PushButton,\r\n      Pullcord,\r\n      Rocker,\r\n      Selector,\r\n      Twist,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   // <summary>\r\n   /// Defines the PsetSwitchingDeviceTypeToggleSwitch::SwitchUsage possible values.\r\n   /// </summary>\r\n   public enum PsetSwitchingDeviceTypeToggleSwitch_SwitchUsage\r\n   {\r\n      Emergency,\r\n      Guard,\r\n      Limit,\r\n      Start,\r\n      Stop,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   // <summary>\r\n   /// Defines the PsetSwitchingDeviceTypeToggleSwitch::SwitchActivation possible values.\r\n   /// </summary>\r\n   public enum PsetSwitchingDeviceTypeToggleSwitch_SwitchActivation\r\n   {\r\n      Actuator,\r\n      Foot,\r\n      Hand,\r\n      Proximity,\r\n      Sound,\r\n      TwoHand,\r\n      Wire,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines PsetManufacturerTypeInformation::AssemblyPlace possible values.\r\n   /// </summary>\r\n   public enum PsetManufacturerTypeInformation_AssemblyPlace\r\n   {\r\n      FACTORY,\r\n      OFFSITE,\r\n      SITE,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines possible Pset property Status values.\r\n   /// </summary>\r\n   public enum PsetElementStatus\r\n   {\r\n      NEW,\r\n      EXISTING,\r\n      DEMOLISH,\r\n      TEMPORARY,\r\n      OTHER,\r\n      NOTKNOWN,\r\n      UNSET\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Toolkit/IFCDataUtil.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Toolkit\r\n{\r\n   /// <summary>\r\n   /// Represents IfcValue.\r\n   /// </summary>\r\n   class IFCDataUtil\r\n   {\r\n      /// <summary>\r\n      /// Event is fired when code reduces length of string to maximal allowed size.\r\n      /// It sends information string which can be logged or shown to user.\r\n      /// </summary>\r\n      /// /// <param name=\"warnText\">Infromation string with diangostic info about truncation happened.</param>\r\n      public delegate void Notify(string warnText);\r\n      public static event Notify IFCStringTooLongWarn;\r\n      private static void OnIFCStringTooLongWarn(string val, int reducedToSize)\r\n      {\r\n         string warnMsg = String.Format(\"IFC warning: Size of string \\\"{0}\\\" was reduced to {1}\", val, reducedToSize);\r\n         IFCStringTooLongWarn?.Invoke(warnMsg);\r\n      }\r\n      public static void EventClear()\r\n      {\r\n         IFCStringTooLongWarn = null;\r\n      }\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcLabel.\r\n      /// </summary>\r\n      /// <param name=\"value\">The string value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsLabel(string value)\r\n      {\r\n         if (value == null)\r\n            return null;\r\n\r\n         if (value.Length > IFCLimits.MAX_IFCLABEL_STR_LEN)\r\n         {\r\n            OnIFCStringTooLongWarn(value, IFCLimits.MAX_IFCLABEL_STR_LEN);\r\n            value = value.Remove(IFCLimits.MAX_IFCLABEL_STR_LEN);\r\n         }\r\n         return IFCData.CreateStringOfType(value, \"IfcLabel\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcText.\r\n      /// </summary>\r\n      /// <param name=\"value\">The string value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsText(string value)\r\n      {\r\n         if (value == null)\r\n            return null;\r\n\r\n         int maxStrLen = IFCLimits.CalculateMaxAllowedSize(value);\r\n         if (value.Length > maxStrLen)\r\n         {\r\n            OnIFCStringTooLongWarn(value, maxStrLen);\r\n            value = value.Remove(maxStrLen);\r\n         }\r\n         return IFCData.CreateStringOfType(value, \"IfcText\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcIdentifier.\r\n      /// </summary>\r\n      /// <param name=\"value\">The string value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsIdentifier(string value)\r\n      {\r\n         if (value == null)\r\n            return null;\r\n\r\n         if (value.Length > IFCLimits.MAX_IFCIDENTIFIER_STR_LEN)\r\n         {\r\n            OnIFCStringTooLongWarn(value, IFCLimits.MAX_IFCIDENTIFIER_STR_LEN);\r\n            value = value.Remove(IFCLimits.MAX_IFCIDENTIFIER_STR_LEN);\r\n         }\r\n         return IFCData.CreateStringOfType(value, \"IfcIdentifier\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcBoolean.\r\n      /// </summary>\r\n      /// <param name=\"value\">The boolean value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsBoolean(bool value)\r\n      {\r\n         return IFCData.CreateBooleanOfType(value, \"IfcBoolean\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcLogical.\r\n      /// </summary>\r\n      /// <param name=\"value\">The logical value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsLogical(IFCLogical value)\r\n      {\r\n         return IFCData.CreateLogicalOfType(value, \"IfcLogical\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcInteger.\r\n      /// </summary>\r\n      /// <param name=\"value\">The integer value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsInteger(int value)\r\n      {\r\n         return IFCData.CreateIntegerOfType(value, \"IfcInteger\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcReal.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsReal(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcReal\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcNumericMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsNumeric(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcNumericMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcRatioMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsRatioMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcRatioMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcNormalisedRatioMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsNormalisedRatioMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcNormalisedRatioMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcSpecularExponent.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsSpecularExponent(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcSpecularExponent\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcPositiveRatioMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsPositiveRatioMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcPositiveRatioMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcLengthMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsLengthMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcLengthMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcVolumeMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsVolumeMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcVolumeMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcPositiveLengthMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsPositiveLengthMeasure(double value)\r\n      {\r\n         if (value > MathUtil.Eps())\r\n            return CreateAsMeasureWithUnit(value, \"IfcPositiveLengthMeasure\");\r\n         else\r\n            return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcPositivePlaneAngleMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsPositivePlaneAngleMeasure(double value)\r\n      {\r\n         if (value > MathUtil.Eps())\r\n            return CreateAsMeasureWithUnit(value, \"IfcPositivePlaneAngleMeasure\");\r\n         else\r\n            return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcPlaneAngleMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsPlaneAngleMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcPlaneAngleMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcAreaMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsAreaMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcAreaMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcAccelerationMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsAccelerationMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcAccelerationMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcEnergyMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsEnergyMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcEnergyMeasure\");\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Creates corresponding ifc unit for a measure name\r\n      /// </summary>\r\n      public static void CreateCorrespondingUnit(string measureName)\r\n      {\r\n         ForgeTypeId specType = UnitMappingUtil.GetUnitSpecTypeFromString(measureName);\r\n         UnitMappingUtil.GetOrCreateUnitInfo(specType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as an IfcMeasure of the right type\r\n      /// and creates the corresponding Revit unit.\r\n      /// </summary>\r\n      /// <param name=\"value\">The int value.</param>\r\n      /// <param name=\"measureName\">The type of IfcMeasure (e.g. IfcForceMeasure).</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsMeasureWithUnit(int value, string measureName)\r\n      {\r\n         CreateCorrespondingUnit(measureName);\r\n         return CreateAsMeasure(value, measureName);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as an IfcMeasure of the right type\r\n      /// and creates the corresponding Revit unit.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <param name=\"measureName\">The type of IfcMeasure (e.g. IfcForceMeasure).</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsMeasureWithUnit(double value, string measureName)\r\n      {\r\n         CreateCorrespondingUnit(measureName);\r\n         return CreateAsMeasure(value, measureName);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcLinearMomentMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsLinearMomentMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcLinearMomentMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcMassPerLengthMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsMassPerLengthMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcMassPerLengthMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcTorqueMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsTorqueMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcTorqueMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcLinearStiffnessMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsLinearStiffnessMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcLinearStiffnessMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcAngularVelocityMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsAngularVelocityMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcAngularVelocityMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcThermalResistanceMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsThermalResistanceMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcThermalResistanceMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcWarpingConstantMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsWarpingConstantMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcWarpingConstantMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcLinearVelocityMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsLinearVelocityMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcLinearVelocityMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcCountMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsCountMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcCountMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcCountMeasure. Since IFC4x3 the Count measure value has been changed to Integer\r\n      /// </summary>\r\n      /// <param name=\"value\">The integer value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsCountMeasure(int value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcCountMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcParameterValue.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsParameterValue(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcParameterValue\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcPowerMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsPowerMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcPowerMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcSoundPowerMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsSoundPowerMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcSoundPowerMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcSoundPressureMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsSoundPressureMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcSoundPressureMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcFrequencyMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsFrequencyMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcFrequencyMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcElectricCurrentMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsElectricCurrentMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcElectricCurrentMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcElectricVoltageMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsElectricVoltageMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcElectricVoltageMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcThermodynamicTemperatureMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsThermodynamicTemperatureMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcThermodynamicTemperatureMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcDynamicViscosityMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsDynamicViscosityMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcDynamicViscosityMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcIsothermalMoistureCapacityMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsIsothermalMoistureCapacityMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcIsothermalMoistureCapacityMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcMassDensityMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsMassDensityMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcMassDensityMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcModulusOfElasticityMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsModulusOfElasticityMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcModulusOfElasticityMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcVaporPermeabilityMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsVaporPermeabilityMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcVaporPermeabilityMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcThermalExpansionCoefficientMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsThermalExpansionCoefficientMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcThermalExpansionCoefficientMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcPressureMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsPressureMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcPressureMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcMonetaryMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsMonetaryMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcMonetaryMeasure\");\r\n      }\r\n      \r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcSpecificHeatCapacityMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsSpecificHeatCapacityMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcSpecificHeatCapacityMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcHeatingValueMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsHeatingValueMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcHeatingValueMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcMoistureDiffusivityMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsMoistureDiffusivityMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcMoistureDiffusivityMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcIonConcentrationMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsIonConcentrationMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcIonConcentrationMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcMomentOfInertiaMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsMomentOfInertiaMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcMomentOfInertiaMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcHeatFluxDensityMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsHeatFluxDensityMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcHeatFluxDensityMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcAreaDensityMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsAreaDensityMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcAreaDensityMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcThermalConductivityMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsThermalConductivityMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcThermalConductivityMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcRotationalFrequencyMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsRotationalFrequencyMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcRotationalFrequencyMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcMassFlowRateMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsMassFlowRateMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcMassFlowRateMeasure\");\r\n      }\r\n      \r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcThermalTransmittanceMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsThermalTransmittanceMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcThermalTransmittanceMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a positive ratio measure data from value.\r\n      /// </summary>\r\n      /// <param name=\"value\">The value of the property.</param>\r\n      /// <returns>The created property data.</returns>\r\n      public static IFCData CreatePositiveRatioMeasureData(double value)\r\n      {\r\n         return CreateRatioMeasureDataCommon(value, PropertyType.PositiveRatio);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a ratio measure data from value.\r\n      /// </summary>\r\n      /// <param name=\"value\">The value of the property.</param>\r\n      /// <returns>The created property data.</returns>\r\n      public static IFCData CreateRatioMeasureData(double value)\r\n      {\r\n         return CreateRatioMeasureDataCommon(value, PropertyType.Ratio);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a normalised ratio measure data from value.\r\n      /// </summary>\r\n      /// <param name=\"value\">The value of the property.</param>\r\n      /// <returns>The created property data.</returns>\r\n      public static IFCData CreateNormalisedRatioMeasureData(double value)\r\n      {\r\n         return CreateRatioMeasureDataCommon(value, PropertyType.NormalisedRatio);\r\n      }\r\n\r\n      public static IFCData CreateRatioMeasureDataCommon(double value, PropertyType propertyType)\r\n      {\r\n         IFCData ratioData = null;\r\n         switch (propertyType)\r\n         {\r\n            case PropertyType.PositiveRatio:\r\n               {\r\n                  if (value < MathUtil.Eps())\r\n                     return null;\r\n\r\n                  ratioData = CreateAsPositiveRatioMeasure(value);\r\n                  break;\r\n               }\r\n            case PropertyType.NormalisedRatio:\r\n               {\r\n                  if (value < -MathUtil.Eps() || value > 1.0 + MathUtil.Eps())\r\n                     return null;\r\n\r\n                  ratioData = CreateAsNormalisedRatioMeasure(value);\r\n                  break;\r\n               }\r\n            default:\r\n               {\r\n                  ratioData = CreateAsRatioMeasure(value);\r\n                  break;\r\n               }\r\n         }\r\n\r\n         return ratioData;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcVolumetricFlowRate.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsVolumetricFlowRateMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcVolumetricFlowRateMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcIlluminanceMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsIlluminanceMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcIlluminanceMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcLuminousFluxMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsLuminousFluxMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcLuminousFluxMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcLuminousIntensityMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsLuminousIntensityMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcLuminousIntensityMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcForceMeasure.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsForceMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcForceMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcLinearForceMeasure\r\n      /// </summary>\r\n      /// <param name=\"value\">the double value</param>\r\n      /// <returns>the IFCData object</returns>\r\n      public static IFCData CreateAsLinearForceMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcLinearForceMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcMassMeasure\r\n      /// </summary>\r\n      /// <param name=\"value\">the double value</param>\r\n      /// <returns>the IFCData object</returns>\r\n      public static IFCData CreateAsMassMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcMassMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcTimeMeasure\r\n      /// </summary>\r\n      /// <param name=\"value\">the double value</param>\r\n      /// <returns>the IFCData object</returns>\r\n      public static IFCData CreateAsTimeMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcTimeMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as IfcPlanarForceMeasure\r\n      /// </summary>\r\n      /// <param name=\"value\">the double value</param>\r\n      /// <returns>the IFCData object</returns>\r\n      public static IFCData CreateAsPlanarForceMeasure(double value)\r\n      {\r\n         return CreateAsMeasureWithUnit(value, \"IfcPlanarForceMeasure\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as an IfcMeasure of the right type.\r\n      /// </summary>\r\n      /// <param name=\"value\">The double value.</param>\r\n      /// <param name=\"type\">The type of IfcMeasure (e.g. IfcForceMeasure).</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsMeasure(double value, string type)\r\n      {\r\n         return IFCData.CreateDoubleOfType(value, type);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCData object as an IfcMeasure of the right type. The value type for Count Measure is changed to Integer from IFC4x3 onward\r\n      /// </summary>\r\n      /// <param name=\"value\">The integer value.</param>\r\n      /// <param name=\"type\">The type of IfcMeasure (e.g. IfcForceMeasure).</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateAsMeasure(int value, string type)\r\n      {\r\n         return IFCData.CreateIntegerOfType(value, type);\r\n      }\r\n\r\n\r\n      public static string ValidateEnumeratedValue(string value, Type propertyEnumerationType)\r\n      {\r\n         if (propertyEnumerationType != null && propertyEnumerationType.IsEnum && !string.IsNullOrEmpty(value))\r\n         {\r\n            foreach (object enumeratedValue in Enum.GetValues(propertyEnumerationType))\r\n            {\r\n               string enumValue = enumeratedValue.ToString();\r\n               if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, enumValue))\r\n               {\r\n                  return enumValue;\r\n               }\r\n            }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Creates an ThermodynamicTemperature IFCData object from element parameter by name\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateThermodynamicTemperatureMeasureFromElement(Element element, string parameterName)\r\n      {\r\n         IFCData data = null;\r\n         Parameter param = ParameterUtil.GetDoubleValueFromElement(element, parameterName, out double propertyValue);\r\n         if (param != null)\r\n         {\r\n            if (!ParameterUtil.ParameterDataTypeIsEqualTo(param, SpecTypeId.Number))\r\n               propertyValue = UnitUtil.ScaleThermodynamicTemperature(propertyValue);\r\n            data = CreateAsThermodynamicTemperatureMeasure(propertyValue);\r\n         }\r\n         return data;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an DynamicViscosity IFCData object from element parameter by name\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateDynamicViscosityMeasureFromElement(Element element, string parameterName)\r\n      {\r\n         IFCData data = null;\r\n         Parameter param = ParameterUtil.GetDoubleValueFromElement(element, parameterName, out double propertyValue);\r\n         if (param != null)\r\n         {\r\n            if (!ParameterUtil.ParameterDataTypeIsEqualTo(param, SpecTypeId.Number))\r\n               propertyValue = UnitUtil.ScaleDynamicViscosity(propertyValue);\r\n            data = CreateAsDynamicViscosityMeasure(propertyValue);\r\n         }\r\n         return data;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an HeatingValue IFCData object from element parameter by name\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateHeatingValueMeasureFromElement(Element element, string parameterName)\r\n      {\r\n         IFCData data = null;\r\n         Parameter param = ParameterUtil.GetDoubleValueFromElement(element, parameterName, out double propertyValue);\r\n         if (param != null)\r\n         {\r\n            if (!ParameterUtil.ParameterDataTypeIsEqualTo(param, SpecTypeId.Number))\r\n               propertyValue = UnitUtil.ScaleHeatingValue(propertyValue);\r\n            data = CreateAsHeatingValueMeasure(propertyValue);\r\n         }\r\n         return data;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IsothermalMoistureCapacity IFCData object from element parameter by name\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateIsothermalMoistureCapacityMeasureFromElement(Element element, string parameterName)\r\n      {\r\n         IFCData data = null;\r\n         Parameter param = ParameterUtil.GetDoubleValueFromElement(element, parameterName, out double propertyValue);\r\n         if (param != null)\r\n         {\r\n            if (!ParameterUtil.ParameterDataTypeIsEqualTo(param, SpecTypeId.Number))\r\n               propertyValue = UnitUtil.ScaleIsothermalMoistureCapacity(propertyValue);\r\n            data = CreateAsIsothermalMoistureCapacityMeasure(propertyValue);\r\n         }\r\n         return data;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an PositiveLength IFCData object from element parameter by name\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreatePositiveLengthMeasureFromElement(Element element, string parameterName)\r\n      {\r\n         IFCData data = null;\r\n         Parameter param = ParameterUtil.GetDoubleValueFromElement(element, parameterName, out double propertyValue);\r\n         if (param != null)\r\n         {\r\n            if (!ParameterUtil.ParameterDataTypeIsEqualTo(param, SpecTypeId.Number))\r\n               propertyValue = UnitUtil.ScaleLength(propertyValue);\r\n            data = CreateAsPositiveLengthMeasure(propertyValue);\r\n         }\r\n         return data;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an Ratio IFCData object from element parameter by name\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateRatioMeasureFromElement(Element element, string parameterName, PropertyType propertyType)\r\n      {\r\n         IFCData data = null;\r\n         Parameter param = ParameterUtil.GetDoubleValueFromElement(element, parameterName, out double propertyValue);\r\n         if (param != null)\r\n         {\r\n            data = CreateRatioMeasureDataCommon(propertyValue, propertyType);\r\n         }\r\n         return data;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an MassDensity IFCData object from element parameter by name\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateMassDensityMeasureFromElement(Element element, string parameterName)\r\n      {\r\n         IFCData data = null;\r\n         Parameter param = ParameterUtil.GetDoubleValueFromElement(element, parameterName, out double propertyValue);\r\n         if (param != null)\r\n         {\r\n            if (!ParameterUtil.ParameterDataTypeIsEqualTo(param, SpecTypeId.Number))\r\n               propertyValue = UnitUtil.ScaleMassDensity(propertyValue);\r\n            data = CreateAsMassDensityMeasure(propertyValue);\r\n         }\r\n         return data;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an ModulusOfElasticity IFCData object from element parameter by name\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateModulusOfElasticityMeasureFromElement(Element element, string parameterName)\r\n      {\r\n         IFCData data = null;\r\n         Parameter param = ParameterUtil.GetDoubleValueFromElement(element, parameterName, out double propertyValue);\r\n         if (param != null)\r\n         {\r\n            if (!ParameterUtil.ParameterDataTypeIsEqualTo(param, SpecTypeId.Number))\r\n               propertyValue = UnitUtil.ScaleModulusOfElasticity(propertyValue);\r\n            data = CreateAsModulusOfElasticityMeasure(propertyValue);\r\n         }\r\n         return data;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an MoistureDiffusivity IFCData object from element parameter by name\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateMoistureDiffusivityMeasureFromElement(Element element, string parameterName)\r\n      {\r\n         IFCData data = null;\r\n         Parameter param = ParameterUtil.GetDoubleValueFromElement(element, parameterName, out double propertyValue);\r\n         if (param != null)\r\n         {\r\n            if (!ParameterUtil.ParameterDataTypeIsEqualTo(param, SpecTypeId.Number))\r\n               propertyValue = UnitUtil.ScaleMoistureDiffusivity(propertyValue);\r\n            data = CreateAsMoistureDiffusivityMeasure(propertyValue);\r\n         }\r\n         return data;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IonConcentration IFCData object from element parameter by name\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateIonConcentrationMeasureFromElement(Element element, string parameterName)\r\n      {\r\n         IFCData data = null;\r\n         Parameter param = ParameterUtil.GetDoubleValueFromElement(element, parameterName, out double propertyValue);\r\n         if (param != null)\r\n         {\r\n            if (!ParameterUtil.ParameterDataTypeIsEqualTo(param, SpecTypeId.Number))\r\n               propertyValue = UnitUtil.ScaleIonConcentration(propertyValue);\r\n            data = CreateAsIonConcentrationMeasure(propertyValue);\r\n         }\r\n         return data;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an VaporPermeability IFCData object from element parameter by name\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateVaporPermeabilityMeasureFromElement(Element element, string parameterName)\r\n      {\r\n         IFCData data = null;\r\n         Parameter param = ParameterUtil.GetDoubleValueFromElement(element, parameterName, out double propertyValue);\r\n         if (param != null)\r\n         {\r\n            if (!ParameterUtil.ParameterDataTypeIsEqualTo(param, SpecTypeId.Number))\r\n               propertyValue = UnitUtil.ScaleVaporPermeability(propertyValue);\r\n            data = CreateAsVaporPermeabilityMeasure(propertyValue);\r\n         }\r\n         return data;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an ThermalExpansionCoefficient IFCData object from element parameter by name\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateThermalExpansionCoefficientMeasureFromElement(Element element, string parameterName)\r\n      {\r\n         IFCData data = null;\r\n         Parameter param = ParameterUtil.GetDoubleValueFromElement(element, parameterName, out double propertyValue);\r\n         if (param != null)\r\n         {\r\n            if (!ParameterUtil.ParameterDataTypeIsEqualTo(param, SpecTypeId.Number))\r\n               propertyValue = UnitUtil.ScaleThermalExpansionCoefficient(propertyValue);\r\n            data = CreateAsThermalExpansionCoefficientMeasure(propertyValue);\r\n         }\r\n         return data;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an Pressure IFCData object from element parameter by name\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreatePressureMeasureFromElement(Element element, string parameterName)\r\n      {\r\n         IFCData data = null;\r\n         Parameter param = ParameterUtil.GetDoubleValueFromElement(element, parameterName, out double propertyValue);\r\n         if (param != null)\r\n         {\r\n            if (!ParameterUtil.ParameterDataTypeIsEqualTo(param, SpecTypeId.Number))\r\n               propertyValue = UnitUtil.ScalePressure(propertyValue);\r\n            data = CreateAsPressureMeasure(propertyValue);\r\n         }\r\n         return data;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an SpecificHeatCapacity IFCData object from element parameter by name\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateSpecificHeatCapacityMeasureFromElement(Element element, string parameterName)\r\n      {\r\n         IFCData data = null;\r\n         Parameter param = ParameterUtil.GetDoubleValueFromElement(element, parameterName, out double propertyValue);\r\n         if (param != null)\r\n         {\r\n            if (!ParameterUtil.ParameterDataTypeIsEqualTo(param, SpecTypeId.Number))\r\n               propertyValue = UnitUtil.ScaleSpecificHeatCapacity(propertyValue);\r\n            data = CreateAsSpecificHeatCapacityMeasure(propertyValue);\r\n         }\r\n         return data;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an ThermalConductivity IFCData object from element parameter by name\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateThermalConductivityMeasureFromElement(Element element, string parameterName)\r\n      {\r\n         IFCData data = null;\r\n         Parameter param = ParameterUtil.GetDoubleValueFromElement(element, parameterName, out double propertyValue);\r\n         if (param != null)\r\n         {\r\n            if (!ParameterUtil.ParameterDataTypeIsEqualTo(param, SpecTypeId.Number))\r\n               propertyValue = UnitUtil.ScaleThermalConductivity(propertyValue);\r\n            data = CreateAsThermalConductivityMeasure(propertyValue);\r\n         }\r\n         return data;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an Text IFCData object from element parameter by name\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateTextFromElement(Element element, string parameterName)\r\n      {\r\n         IFCData data = null;\r\n         Parameter param = ParameterUtil.GetStringValueFromElement(element, parameterName, out string propertyValue);\r\n         if (param != null)\r\n            data = CreateAsText(propertyValue);\r\n         return data;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an Boolean IFCData object from element parameter by name\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateBooleanFromElement(Element element, string parameterName)\r\n      {\r\n         IFCData data = null;\r\n         Parameter param = ParameterUtil.GetIntValueFromElement(element, parameterName, out int propertyValue);\r\n         if (param != null)\r\n            data = CreateAsBoolean(propertyValue != 0);         \r\n         return data;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an Label IFCData object from element parameter by name\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <returns>The IFCData object.</returns>\r\n      public static IFCData CreateLabelFromElement(Element element, string parameterName, PropertyValueType valueType, Type propertyEnumerationType)\r\n      {\r\n         IFCData data = null;\r\n         if (ParameterUtil.GetStringValueFromElement(element, parameterName, out string propertyValue) != null)\r\n         {\r\n            if (!string.IsNullOrEmpty(propertyValue))\r\n            {\r\n               if (valueType == PropertyValueType.EnumeratedValue)\r\n               {\r\n                  propertyValue = ValidateEnumeratedValue(propertyValue, propertyEnumerationType);\r\n                  data = IFCData.CreateEnumeration(propertyValue);\r\n               }\r\n               else\r\n               {\r\n                  data = CreateAsLabel(propertyValue);\r\n               }\r\n            }\r\n         }\r\n         return data;\r\n      }\r\n\r\n\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Toolkit/IFCEnums.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace Revit.IFC.Export.Toolkit\r\n{\r\n   /// <summary>\r\n   /// Defines the basic configuration of the window type in terms of the number of window panels and the subdivision of the total window.\r\n   /// </summary>\r\n   public enum IFCWindowStyleOperation\r\n   {\r\n      Single_Panel,\r\n      Double_Panel_Vertical,\r\n      Double_Panel_Horizontal,\r\n      Triple_Panel_Vertical,\r\n      Triple_Panel_Bottom,\r\n      Triple_Panel_Top,\r\n      Triple_Panel_Left,\r\n      Triple_Panel_Right,\r\n      Triple_Panel_Horizontal,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic types of construction of windows.\r\n   /// </summary>\r\n   public enum IFCWindowStyleConstruction\r\n   {\r\n      Aluminium,\r\n      High_Grade_Steel,\r\n      Steel,\r\n      Wood,\r\n      Aluminium_Wood,\r\n      Plastic,\r\n      Other_Construction,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic configuration of the window type in terms of the location of window panels.\r\n   /// </summary>\r\n   public enum IFCWindowPanelPosition\r\n   {\r\n      Left,\r\n      Middle,\r\n      Right,\r\n      Bottom,\r\n      Top,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic ways to describe how window panels operate. \r\n   /// </summary>\r\n   public enum IFCWindowPanelOperation\r\n   {\r\n      SideHungRightHand,\r\n      SideHungLeftHand,\r\n      TiltAndTurnRightHand,\r\n      TiltAndTurnLeftHand,\r\n      TopHung,\r\n      BottomHung,\r\n      PivotHorizontal,\r\n      PivotVertical,\r\n      SlidingHorizontal,\r\n      SlidingVertical,\r\n      RemovableCasement,\r\n      FixedCasement,\r\n      OtherOperation,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Determines the direction of the text characters in respect to each other.\r\n   /// </summary>\r\n   public enum IFCTextPath\r\n   {\r\n      Left,\r\n      Right,\r\n      Up,\r\n      Down\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines a list of commonly shared property set definitions of a slab and an optional set of product representations.\r\n   /// </summary>\r\n   public enum IFCSlabType\r\n   {\r\n      Floor,\r\n      Roof,\r\n      Landing,\r\n      BaseSlab,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different types of spaces or space boundaries in terms of either being inside the building or outside the building.\r\n   /// </summary>\r\n   public enum IFCInternalOrExternal\r\n   {\r\n      Internal,\r\n      External,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different types of space boundaries in terms of its physical manifestation.\r\n   /// </summary>\r\n   public enum IFCPhysicalOrVirtual\r\n   {\r\n      Physical,\r\n      Virtual,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration denoting whether sense of direction is positive or negative along the given axis.\r\n   /// </summary>\r\n   public enum IFCDirectionSense\r\n   {\r\n      Positive,\r\n      Negative\r\n   }\r\n\r\n   /// <summary>\r\n   /// Identification of the axis of element geometry, denoting the layer set thickness direction, or direction of layer offsets.\r\n   /// </summary>\r\n   public enum IFCLayerSetDirection\r\n   {\r\n      Axis1,\r\n      Axis2,\r\n      Axis3\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the various representation types that can be semantically distinguished.\r\n   /// </summary>\r\n   public enum IFCGeometricProjection\r\n   {\r\n      Graph_View,\r\n      Sketch_View,\r\n      Model_View,\r\n      Plan_View,\r\n      Reflected_Plan_View,\r\n      Section_View,\r\n      Elevation_View,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the generic footing type.\r\n   /// </summary>\r\n   public enum IFCFootingType\r\n   {\r\n      Footing_Beam,\r\n      Pad_Footing,\r\n      Pile_Cap,\r\n      Strip_Footing,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic types of construction of doors.\r\n   /// </summary>\r\n   public enum IFCDoorStyleConstruction\r\n   {\r\n      Aluminium,\r\n      High_Grade_Steel,\r\n      Steel,\r\n      Wood,\r\n      Aluminium_Wood,\r\n      Aluminium_Plastic,\r\n      Plastic,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic ways to describe how doors operate. \r\n   /// </summary>\r\n   public enum IFCDoorStyleOperation\r\n   {\r\n      Single_Swing_Left,\r\n      Single_Swing_Right,\r\n      Double_Door_Single_Swing,\r\n      Double_Door_Single_Swing_Opposite_Left,\r\n      Double_Door_Single_Swing_Opposite_Right,\r\n      Double_Swing_Left,\r\n      Double_Swing_Right,\r\n      Double_Door_Double_Swing,\r\n      Sliding_To_Left,\r\n      Sliding_To_Right,\r\n      Double_Door_Sliding,\r\n      Folding_To_Left,\r\n      Folding_To_Right,\r\n      Double_Door_Folding,\r\n      Revolving,\r\n      RollingUp,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic ways to describe the location of a door panel within a door lining.\r\n   /// </summary>\r\n   public enum IFCDoorPanelPosition\r\n   {\r\n      Left,\r\n      Middle,\r\n      Right,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic ways how individual door panels operate. \r\n   /// </summary>\r\n   public enum IFCDoorPanelOperation\r\n   {\r\n      Swinging,\r\n      Double_Acting,\r\n      Sliding,\r\n      Folding,\r\n      Revolving,\r\n      RollingUp,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the flow direction at a connection point as either a Source, Sink, or both SourceAndSink.\r\n   /// </summary>\r\n   public enum IFCFlowDirection\r\n   {\r\n      Source,\r\n      Sink,\r\n      SourceAndSink,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining where the assembly is intended to take place, either in a factory or on the building site.\r\n   /// </summary>\r\n   public enum IFCAssemblyPlace\r\n   {\r\n      Site,\r\n      Factory,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines different types of standard assemblies.\r\n   /// </summary>\r\n   public enum IFCElementAssemblyType\r\n   {\r\n      Accessory_Assembly,\r\n      Arch,\r\n      Beam_Grid,\r\n      Braced_Frame,\r\n      Girder,\r\n      Reinforcement_Unit,\r\n      Rigid_Frame,\r\n      Slab_Field,\r\n      Truss,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of waste terminal that can be specified.\r\n   /// </summary>\r\n   public enum IFCWasteTerminalType\r\n   {\r\n      FloorTrap,\r\n      FloorWaste,\r\n      GullySump,\r\n      GullyTrap,\r\n      GreaseInterceptor,\r\n      OilInterceptor,\r\n      PetrolInterceptor,\r\n      RoofDrain,\r\n      WasteDisposalUnit,\r\n      WasteTrap,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of valve that can be specified.\r\n   /// </summary>\r\n   public enum IFCValveType\r\n   {\r\n      AirRelease,\r\n      AntiVacuum,\r\n      ChangeOver,\r\n      Check,\r\n      Commissioning,\r\n      Diverting,\r\n      DrawOffCock,\r\n      DoubleCheck,\r\n      DoubleRegulating,\r\n      Faucet,\r\n      Flushing,\r\n      GasCock,\r\n      GasTap,\r\n      Isolating,\r\n      Mixing,\r\n      PressureReducing,\r\n      PressureRelief,\r\n      Regulating,\r\n      SafetyCutoff,\r\n      SteamTrap,\r\n      StopCock,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the functional type of unitary equipment.\r\n   /// </summary>\r\n   public enum IFCUnitaryEquipmentType\r\n   {\r\n      AirHandler,\r\n      AirConditioningUnit,\r\n      SplitSystem,\r\n      RoofTopUnit,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of tube bundles.\r\n   /// </summary>\r\n   public enum IFCTubeBundleType\r\n   {\r\n      Finned,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Identifies primary transport element types.\r\n   /// </summary>\r\n   public enum IFCTransportElementType\r\n   {\r\n      Elevator,\r\n      Escalator,\r\n      MovingWalkWay,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// \r\n   /// </summary>\r\n   public enum IFCTransformerType\r\n   {\r\n      Current,\r\n      Frequency,\r\n      Voltage,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of transformer that can be specified.\r\n   /// </summary>\r\n   public enum IFCTankType\r\n   {\r\n      Preformed,\r\n      Sectional,\r\n      Expansion,\r\n      PressureVessel,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Define the range of different types of Tendon that can be specified\r\n   /// </summary>\r\n   public enum IFCTendonType\r\n   {\r\n      STRAND,\r\n      WIRE,\r\n      BAR,\r\n      COATED,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of switch that can be specified.\r\n   /// </summary>\r\n   public enum IFCSwitchingDeviceType\r\n   {\r\n      Contactor,\r\n      EmergencyStop,\r\n      Starter,\r\n      SwitchDisconnector,\r\n      ToggleSwitch,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of stack terminal that can be specified for use at the top of a vertical stack subsystem.\r\n   /// </summary>\r\n   public enum IFCStackTerminalType\r\n   {\r\n      BirdCage,\r\n      Cowl,\r\n      RainwaterHopper,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the functional type of space heater.\r\n   /// </summary>\r\n   public enum IFCSpaceHeaterType\r\n   {\r\n      SectionalRadiator,\r\n      PanelRadiator,\r\n      TubularRadiator,\r\n      Convector,\r\n      BaseBoardHeater,\r\n      FinnedTubeUnit,\r\n      UnitHeater,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the functional type of space \r\n   /// </summary>\r\n   public enum IFCSpaceType\r\n   {\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of sensor that can be specified.\r\n   /// </summary>\r\n   public enum IFCSensorType\r\n   {\r\n      Co2Sensor,\r\n      FireSensor,\r\n      FlowSensor,\r\n      GasSensor,\r\n      HeatSensor,\r\n      HumiditySensor,\r\n      LightSensor,\r\n      MoistureSensor,\r\n      MovementSensor,\r\n      PressureSensor,\r\n      SmokeSensor,\r\n      SoundSensor,\r\n      TemperatureSensor,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of sanitary terminal that can be specified.\r\n   /// </summary>\r\n   public enum IFCSanitaryTerminalType\r\n   {\r\n      Bath,\r\n      Bidet,\r\n      Cistern,\r\n      Shower,\r\n      Sink,\r\n      SanitaryFountain,\r\n      ToiletPan,\r\n      Urinal,\r\n      WashhandBasin,\r\n      WCSeat,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines shape types for provisions for voids.\r\n   /// </summary>\r\n   public enum IFCProvisionForVoidShapeType\r\n   {\r\n      Round,\r\n      Rectangle,\r\n      Undefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines general types of pumps.\r\n   /// </summary>\r\n   public enum IFCPumpType\r\n   {\r\n      Circulator,\r\n      EndSuction,\r\n      SplitCase,\r\n      VerticalInline,\r\n      VerticalTurbine,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different breaker unit types that can be used in conjunction with protective device.\r\n   /// </summary>\r\n   public enum IFCProtectiveDeviceType\r\n   {\r\n      FuseDisconnector,\r\n      CircuitBreaker,\r\n      EarthFailureDevice,\r\n      ResidualCurrentCircuitBreaker,\r\n      ResidualCurrentSwitch,\r\n      Varistor,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Identifies the primary purpose of a pipe segment.\r\n   /// </summary>\r\n   public enum IFCPipeSegmentType\r\n   {\r\n      FlexibleSegment,\r\n      RigidSegment,\r\n      Gutter,\r\n      Spool,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Identifies the primary purpose of a pipe fitting.\r\n   /// </summary>\r\n   public enum IFCPipeFittingType\r\n   {\r\n      Bend,\r\n      Connector,\r\n      Entry,\r\n      Exit,\r\n      Junction,\r\n      Obstruction,\r\n      Transition,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different types of piles.\r\n   /// </summary>\r\n   public enum IFCPileType\r\n   {\r\n      Cohesion,\r\n      Friction,\r\n      Support,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different materials for pile construction.\r\n   /// </summary>\r\n   public enum IFCPileConstructionEnum\r\n   {\r\n      Cast_In_Place,\r\n      Composite,\r\n      Precast_Concrete,\r\n      Prefab_Steel,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different types of planar elements.\r\n   /// </summary>\r\n   public enum IFCPlateType\r\n   {\r\n      Curtain_Panel,\r\n      Sheet,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of outlet that can be specified.\r\n   /// </summary>\r\n   public enum IFCOutletType\r\n   {\r\n      AudiovisualOutlet,\r\n      CommunicationsOutlet,\r\n      PowerOutlet,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of motor connection that can be specified.\r\n   /// </summary>\r\n   public enum IFCMotorConnectionType\r\n   {\r\n      BeltDrive,\r\n      Coupling,\r\n      DirectDrive,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different types of linear elements an IfcMemberType object can fulfill.\r\n   /// </summary>\r\n   public enum IFCMemberType\r\n   {\r\n      Brace,\r\n      Chord,\r\n      Collar,\r\n      Member,\r\n      Mullion,\r\n      Plate,\r\n      Post,\r\n      Purlin,\r\n      Rafter,\r\n      Stringer,\r\n      Strut,\r\n      Stud,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of light fixture available.\r\n   /// </summary>\r\n   public enum IFCLightFixtureType\r\n   {\r\n      PointSource,\r\n      DirectionSource,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of lamp available.\r\n   /// </summary>\r\n   public enum IFCLampType\r\n   {\r\n      CompactFluorescent,\r\n      Fluorescent,\r\n      HighPressureMercury,\r\n      HighPressureSodium,\r\n      MetalHalide,\r\n      TungstenFilament,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of types of junction boxes available.\r\n   /// </summary>\r\n   public enum IFCJunctionBoxType\r\n   {\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of humidifiers.\r\n   /// </summary>\r\n   public enum IFCHumidifierType\r\n   {\r\n      SteamInjection,\r\n      AdiabaticAirWasher,\r\n      AdiabaticPan,\r\n      AdiabaticWettedElement,\r\n      AdiabaticAtomizing,\r\n      AdiabaticUltraSonic,\r\n      AdiabaticRigidMedia,\r\n      AdiabaticCompressedAirNozzle,\r\n      AssistedElectric,\r\n      AssistedNaturalGas,\r\n      AssistedPropane,\r\n      AssistedButane,\r\n      AssistedSteam,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of heat exchangers.\r\n   /// </summary>\r\n   public enum IFCHeatExchangerType\r\n   {\r\n      Plate,\r\n      ShellAndTube,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the functional type of gas terminal.\r\n   /// </summary>\r\n   public enum IFCGasTerminalType\r\n   {\r\n      GasAppliance,\r\n      GasBooster,\r\n      GasBurner,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines various types of flow meter.\r\n   /// </summary>\r\n   public enum IFCFlowMeterType\r\n   {\r\n      ElectricMeter,\r\n      EnergyMeter,\r\n      FlowMeter,\r\n      GasMeter,\r\n      OilMeter,\r\n      WaterMeter,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of flow instrument that can be specified.\r\n   /// </summary>\r\n   public enum IFCFlowInstrumentType\r\n   {\r\n      PressureGauge,\r\n      Thermometer,\r\n      Ammeter,\r\n      FrequencyMeter,\r\n      PowerFactorMeter,\r\n      PhaseAngleMeter,\r\n      VoltMeter_Peak,\r\n      VoltMeter_Rms,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of fire suppression terminal that can be specified.\r\n   /// </summary>\r\n   public enum IFCFireSuppressionTerminalType\r\n   {\r\n      BreechingInlet,\r\n      FireHydrant,\r\n      HoseReel,\r\n      Sprinkler,\r\n      SprinklerDeflector,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the various types of filter typically used within building services distribution systems.\r\n   /// </summary>\r\n   public enum IFCFilterType\r\n   {\r\n      AirParticleFilter,\r\n      OdorFilter,\r\n      OilFilter,\r\n      Strainer,\r\n      WaterFilter,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of fans.\r\n   /// </summary>\r\n   public enum IFCFanType\r\n   {\r\n      CentrifugalForwardCurved,\r\n      CentrifugalRadial,\r\n      CentrifugalBackwardInclinedCurved,\r\n      CentrifugalAirfoil,\r\n      TubeAxial,\r\n      VaneAxial,\r\n      PropellorAxial,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of evaporators.\r\n   /// </summary>\r\n   public enum IFCEvaporatorType\r\n   {\r\n      DirectExpansionShellAndTube,\r\n      DirectExpansionTubeInTube,\r\n      DirectExpansionBrazedPlate,\r\n      FloodedShellAndTube,\r\n      ShellAndCoil,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of evaporative coolers. \r\n   /// </summary>\r\n   public enum IFCEvaporativeCoolerType\r\n   {\r\n      DirectEvaporativeRandomMediaAirCooler,\r\n      DirectEvaporativeRigidMediaAirCooler,\r\n      DirectEvaporativeSlingersPackagedAirCooler,\r\n      DirectEvaporativePackagedRotaryAirCooler,\r\n      DirectEvaporativeAirWasher,\r\n      IndirectEvaporativePackageAirCooler,\r\n      IndirectEvaporativeWetCoil,\r\n      IndirectEvaporativeCoolingTowerOrCoilCooler,\r\n      IndirectDirectCombination,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of types of electrical time control available.\r\n   /// </summary>\r\n   public enum IFCElectricTimeControlType\r\n   {\r\n      TimeClock,\r\n      TimeDelay,\r\n      Relay,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of electric motor that can be specified.\r\n   /// </summary>\r\n   public enum IFCElectricMotorType\r\n   {\r\n      DC,\r\n      Induction,\r\n      Polyphase,\r\n      ReluctanceSynchronous,\r\n      Synchronous,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of types of electric heater available.\r\n   /// </summary>\r\n   public enum IFCElectricHeaterType\r\n   {\r\n      ElectricPointHeater,\r\n      ElectricCableHeater,\r\n      ElectricMatHeater,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of types of electric generators available.\r\n   /// </summary>\r\n   public enum IFCElectricGeneratorType\r\n   {\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of electrical flow storage device available.\r\n   /// </summary>\r\n   public enum IFCElectricFlowStorageDeviceType\r\n   {\r\n      Battery,\r\n      CapacitorBank,\r\n      HarmonicFilter,\r\n      InductorBank,\r\n      Ups,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of electrical appliance that can be specified.\r\n   /// </summary>\r\n   public enum IFCElectricApplianceType\r\n   {\r\n      Computer,\r\n      DirectWaterHeater,\r\n      DishWasher,\r\n      ElectricCooker,\r\n      ElectricHeater,\r\n      Facsimile,\r\n      FreeStandingFan,\r\n      Freezer,\r\n      Fridge_Freezer,\r\n      HandDryer,\r\n      IndirectWaterHeater,\r\n      Microwave,\r\n      PhotoCopier,\r\n      Printer,\r\n      Refrigerator,\r\n      RadianTheater,\r\n      Scanner,\r\n      Telephone,\r\n      TumbleDryer,\r\n      TV,\r\n      VendingMachine,\r\n      WashingMachine,\r\n      WaterHeater,\r\n      WaterCooler,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of IfcElectricDistributionPoint\r\n   /// Note: that this is a little bit of a \"HACK\" because the code can only check enumeration name [IfcEntity] or [IfcEntityType] and this one is IfcElectricDistributionPointFunction\r\n   /// </summary>\r\n   public enum IfcElectricDistributionPointType\r\n   {\r\n      ALARMPANEL,\r\n      CONSUMERUNIT,\r\n      CONTROLPANEL,\r\n      DISTRIBUTIONBOARD,\r\n      GASDETECTORPANEL,\r\n      INDICATORPANEL,\r\n      MIMICPANEL,\r\n      MOTORCONTROLCENTRE,\r\n      SWITCHBOARD,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of duct silencers.\r\n   /// </summary>\r\n   public enum IFCDuctSilencerType\r\n   {\r\n      FlatOval,\r\n      Rectangular,\r\n      Round,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Identifies the primary purpose of a duct segment. \r\n   /// </summary>\r\n   public enum IFCDuctSegmentType\r\n   {\r\n      RigidSegment,\r\n      FlexibleSegment,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Identifies the primary purpose of a duct fitting.\r\n   /// </summary>\r\n   public enum IFCDuctFittingType\r\n   {\r\n      Bend,\r\n      Connector,\r\n      Entry,\r\n      Exit,\r\n      Junction,\r\n      Obstruction,\r\n      Transition,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Identifies different types of distribution chambers.\r\n   /// </summary>\r\n   public enum IFCDistributionChamberElementType\r\n   {\r\n      FormedDuct,\r\n      InspectionChamber,\r\n      InspectionPit,\r\n      Manhole,\r\n      MeterChamber,\r\n      Sump,\r\n      Trench,\r\n      ValveChamber,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the various types of damper.\r\n   /// </summary>\r\n   public enum IFCDamperType\r\n   {\r\n      ControlDamper,\r\n      FireDamper,\r\n      SmokeDamper,\r\n      FireSmokeDamper,\r\n      BackDraftDamper,\r\n      ReliefDamper,\r\n      BlastDamper,\r\n      GravityDamper,\r\n      GravityReliefDamper,\r\n      BalancingDamper,\r\n      FumeHoodExhaust,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of cooling towers.\r\n   /// </summary>\r\n   public enum IFCCoolingTowerType\r\n   {\r\n      NaturalDraft,\r\n      MechanicalInducedDraft,\r\n      MechanicalForcedDraft,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of cooled beams.\r\n   /// </summary>\r\n   public enum IFCCooledBeamType\r\n   {\r\n      Active,\r\n      Passive,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of controller that can be specified.\r\n   /// </summary>\r\n   public enum IFCControllerType\r\n   {\r\n      Floating,\r\n      Proportional,\r\n      ProportionalIntegral,\r\n      ProportionalIntegralDerivative,\r\n      TimedTwoPosition,\r\n      TwoPosition,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of condensers.\r\n   /// </summary>\r\n   public enum IFCCondenserType\r\n   {\r\n      WaterCooledShellTube,\r\n      WaterCooledShellCoil,\r\n      WaterCooledTubeInTube,\r\n      WaterCooledBrazedPlate,\r\n      AirCooled,\r\n      EvaporativeCooled,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Types of compressors.\r\n   /// </summary>\r\n   public enum IFCCompressorType\r\n   {\r\n      Dynamic,\r\n      Reciprocating,\r\n      Rotary,\r\n      Scroll,\r\n      Trochoidal,\r\n      SingleStage,\r\n      Booster,\r\n      OpenType,\r\n      Hermetic,\r\n      SemiHermetic,\r\n      WeldedShellHermetic,\r\n      RollingPiston,\r\n      RotaryVane,\r\n      SingleScrew,\r\n      TwinScrew,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of coils.\r\n   /// </summary>\r\n   public enum IFCCoilType\r\n   {\r\n      DXCoolingCoil,\r\n      WaterCoolingCoil,\r\n      SteamHeatingCoil,\r\n      WaterHeatingCoil,\r\n      ElectricHeatingCoil,\r\n      GasHeatingCoil,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of Chillers classified by their method of heat rejection.\r\n   /// </summary>\r\n   public enum IFCChillerType\r\n   {\r\n      AirCooled,\r\n      WaterCooled,\r\n      HeatRecovery,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of cable segment that can be specified.\r\n   /// </summary>\r\n   public enum IFCCableSegmentType\r\n   {\r\n      CableSegment,\r\n      ConductorSegment,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of cable carrier segment that can be specified.\r\n   /// </summary>\r\n   public enum IFCCableCarrierSegmentType\r\n   {\r\n      CableLadderSEGMENT,\r\n      CableTraySegment,\r\n      CableTrunkingSegment,\r\n      ConduitSegment,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of cable carrier fitting that can be specified.\r\n   /// </summary>\r\n   public enum IFCCableCarrierFittingType\r\n   {\r\n      Bend,\r\n      Cross,\r\n      Reducer,\r\n      Tee,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of boilers.\r\n   /// </summary>\r\n   public enum IFCBoilerType\r\n   {\r\n      Water,\r\n      Steam,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of alarm that can be specified.\r\n   /// </summary>\r\n   public enum IFCAlarmType\r\n   {\r\n      Bell,\r\n      BreakGlassButton,\r\n      Light,\r\n      ManualPullBox,\r\n      Siren,\r\n      Whistle,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines general types of pumps.\r\n   /// </summary>\r\n   public enum IFCAirToAirHeatRecoveryType\r\n   {\r\n      FixedPlateCounterFlowExchanger,\r\n      FixedPlateCrossFlowExchanger,\r\n      FixedPlateParallelFlowExchanger,\r\n      RotaryWheel,\r\n      RunaroundCoilloop,\r\n      HeatPipe,\r\n      TwinTowerEnthalpyRecoveryLoops,\r\n      ThermosiphonSealedTubeHeatExchangers,\r\n      ThermosiphonCoilTypeHeatExchangers,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the functional types of air terminals.\r\n   /// </summary>\r\n   public enum IFCAirTerminalType\r\n   {\r\n      Grille,\r\n      Register,\r\n      Diffuser,\r\n      EyeBall,\r\n      Iris,\r\n      LinearGrille,\r\n      LinearDiffuser,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Identifies different types of air terminal boxes. \r\n   /// </summary>\r\n   public enum IFCAirTerminalBoxType\r\n   {\r\n      ConstantFlow,\r\n      VariableFlowPressureDependant,\r\n      VariableFlowPressureIndependant,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of actuator that can be specified.\r\n   /// </summary>\r\n   public enum IFCActuatorType\r\n   {\r\n      ElectricActuator,\r\n      HandOperatedActuator,\r\n      HydraulicActuator,\r\n      PneumaticActuator,\r\n      ThermostaticActuator,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different types of linear elements an IfcBeamType object can fulfill.\r\n   /// </summary>\r\n   public enum IFCBeamType\r\n   {\r\n      Beam,\r\n      Joist,\r\n      Lintel,\r\n      T_Beam,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different types of linear elements an IfcColumnType object can fulfill.\r\n   /// </summary>\r\n   public enum IFCColumnType\r\n   {\r\n      Column,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Types of currency.\r\n   /// </summary>\r\n   public enum IFCCurrencyType\r\n   {\r\n      AED,\r\n      AES,\r\n      ATS,\r\n      AUD,\r\n      BBD,\r\n      BEG,\r\n      BGL,\r\n      BHD,\r\n      BMD,\r\n      BND,\r\n      BRL,\r\n      BSD,\r\n      BWP,\r\n      BZD,\r\n      CAD,\r\n      CBD,\r\n      CHF,\r\n      CLP,\r\n      CNY,\r\n      CYS,\r\n      CZK,\r\n      DDP,\r\n      DEM,\r\n      DKK,\r\n      EGL,\r\n      EST,\r\n      EUR,\r\n      FAK,\r\n      FIM,\r\n      FJD,\r\n      FKP,\r\n      FRF,\r\n      GBP,\r\n      GIP,\r\n      GMD,\r\n      GRX,\r\n      HKD,\r\n      HUF,\r\n      ICK,\r\n      IDR,\r\n      ILS,\r\n      INR,\r\n      IRP,\r\n      ITL,\r\n      JMD,\r\n      JOD,\r\n      JPY,\r\n      KES,\r\n      KRW,\r\n      KWD,\r\n      KYD,\r\n      LKR,\r\n      LUF,\r\n      MTL,\r\n      MUR,\r\n      MXN,\r\n      MYR,\r\n      NLG,\r\n      NZD,\r\n      OMR,\r\n      PGK,\r\n      PHP,\r\n      PKR,\r\n      PLN,\r\n      PTN,\r\n      QAR,\r\n      RUR,\r\n      SAR,\r\n      SCR,\r\n      SEK,\r\n      SGD,\r\n      SKP,\r\n      THB,\r\n      TRL,\r\n      TTD,\r\n      TWD,\r\n      USD,\r\n      VEB,\r\n      VND,\r\n      XEU,\r\n      ZAR,\r\n      ZWD,\r\n      NOK\r\n   }\r\n\r\n   /// <summary>\r\n   /// The type of a derived unit.\r\n   /// </summary>\r\n   public enum IFCDerivedUnitEnum\r\n   {\r\n      AngularVelocityUnit,\r\n      CompoundPlaneAngleUnit,\r\n      DynamicViscosityUnit,\r\n      HeatFluxDensityUnit,\r\n      IntegerCountRateUnit,\r\n      IsothermalMoistureCapacityUnit,\r\n      KinematicViscosityUnit,\r\n      LinearVelocityUnit,\r\n      MassDensityUnit,\r\n      MassFlowRateUnit,\r\n      MoistureDiffusivityUnit,\r\n      MolecularWeightUnit,\r\n      SpecificHeatCapacityUnit,\r\n      ThermalAdmittanceUnit,\r\n      ThermalConductanceUnit,\r\n      ThermalResistanceUnit,\r\n      ThermalTransmittanceUnit,\r\n      VaporPermeabilityUnit,\r\n      VolumetricFlowRateUnit,\r\n      RotationalFrequencyUnit,\r\n      Torqueunit,\r\n      MomentOfInertiaUnit,\r\n      LinearMomentUnit,\r\n      LinearForceUnit,\r\n      PlanarForceUnit,\r\n      ModulusOfElasticityUnit,\r\n      ShearModulusUnit,\r\n      LinearStiffnessUnit,\r\n      RotationalStiffnessUnit,\r\n      ModulusOfSubGradeReactionUnit,\r\n      AccelerationUnit,\r\n      CurvatureUnit,\r\n      HeatingValueUnit,\r\n      IonConcentrationUnit,\r\n      LuminousIntensityDistributionUnit,\r\n      MassPerLengthUnit,\r\n      ModulusOfLinearSubGradeReactionUnit,\r\n      ModulusOfRotationalSubGradeReactionUnit,\r\n      PhUnit,\r\n      RotationalMassUnit,\r\n      SectionAreaIntegralUnit,\r\n      SectionModulusUnit,\r\n      SoundPowerUnit,\r\n      SoundPressureUnit,\r\n      TemperatureGradientUnit,\r\n      ThermalExpansionCoefficientUnit,\r\n      WarpingConstantUnit,\r\n      WarpingMomentUnit,\r\n      UserDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// The name of an SI unit.\r\n   /// </summary>\r\n   public enum IFCSIUnitName\r\n   {\r\n      Ampere,\r\n      Becquerel,\r\n      Candela,\r\n      Coulomb,\r\n      Cubic_Metre,\r\n      Degree_Celsius,\r\n      Farad,\r\n      Gram,\r\n      Gray,\r\n      Henry,\r\n      Hertz,\r\n      Joule,\r\n      Kelvin,\r\n      Lumen,\r\n      Lux,\r\n      Metre,\r\n      Mole,\r\n      Newton,\r\n      Ohm,\r\n      Pascal,\r\n      Radian,\r\n      Second,\r\n      Siemens,\r\n      Sievert,\r\n      Square_Metre,\r\n      Steradian,\r\n      Tesla,\r\n      Volt,\r\n      Watt,\r\n      Weber\r\n   }\r\n\r\n   /// <summary>\r\n   /// The name of a prefix that may be associated with an SI unit.\r\n   /// </summary>\r\n   public enum IFCSIPrefix\r\n   {\r\n      Exa,\r\n      Peta,\r\n      Tera,\r\n      Giga,\r\n      Mega,\r\n      Kilo,\r\n      Hecto,\r\n      Deca,\r\n      Deci,\r\n      Centi,\r\n      Milli,\r\n      Micro,\r\n      Nano,\r\n      Pico,\r\n      Femto,\r\n      Atto\r\n   }\r\n\r\n   /// <summary>\r\n   /// Allowed unit types of IfcNamedUnit. \r\n   /// </summary>\r\n   public enum IFCUnit\r\n   {\r\n      AbsorbedDoseUnit,\r\n      AmountOfSubstanceUnit,\r\n      AreaUnit,\r\n      DoseEquivalentUnit,\r\n      ElectricCapacitanceUnit,\r\n      ElectricChargeUnit,\r\n      ElectricConductanceUnit,\r\n      ElectricCurrentUnit,\r\n      ElectricResistanceUnit,\r\n      ElectricVoltageUnit,\r\n      EnergyUnit,\r\n      ForceUnit,\r\n      FrequencyUnit,\r\n      IlluminanceUnit,\r\n      InductanceUnit,\r\n      LengthUnit,\r\n      LuminousFluxUnit,\r\n      LuminousIntensityUnit,\r\n      MagneticFluxDensityUnit,\r\n      MagneticFluxUnit,\r\n      MassUnit,\r\n      PlaneAngleUnit,\r\n      PowerUnit,\r\n      PressureUnit,\r\n      RadioActivityUnit,\r\n      SolidAngleUnit,\r\n      ThermoDynamicTemperatureUnit,\r\n      TimeUnit,\r\n      VolumeUnit,\r\n      UserDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Identifies the logical location of the address.\r\n   /// </summary>\r\n   public enum IFCAddressType\r\n   {\r\n      Office,\r\n      Site,\r\n      Home,\r\n      DistributionPoint,\r\n      UserDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration identifying the type of change that might have occurred to the object during the last session.\r\n   /// </summary>\r\n   public enum IFCChangeAction\r\n   {\r\n      NoChange,\r\n      Modified,\r\n      Added,\r\n      Deleted,\r\n      ModifiedAdded,\r\n      ModifiedDeleted\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration identifying the state or accessibility of the object.\r\n   /// </summary>\r\n   public enum IFCState\r\n   {\r\n      ReadWrite,\r\n      ReadOnly,\r\n      Locked,\r\n      ReadWriteLocked,\r\n      ReadOnlyLocked\r\n   }\r\n\r\n   /// <summary>\r\n   /// Indicates the element composition type.\r\n   /// </summary>\r\n   public enum IFCElementComposition\r\n   {\r\n      Complex,\r\n      Element,\r\n      Partial\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the applicable object categories.\r\n   /// </summary>\r\n   public enum IFCObjectType\r\n   {\r\n      Product,\r\n      Process,\r\n      Control,\r\n      Resource,\r\n      Actor,\r\n      Group,\r\n      Project,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of covering that can further specify an IfcCovering or an IfcCoveringType. \r\n   /// </summary>\r\n   public enum IFCCoveringType\r\n   {\r\n      Ceiling,\r\n      Flooring,\r\n      Cladding,\r\n      Roofing,\r\n      Insulation,\r\n      Membrane,\r\n      Sleeving,\r\n      Wrapping,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different types of walls an IfcWallType object can fulfill.\r\n   /// </summary>\r\n   public enum IFCWallType\r\n   {\r\n      Standard,\r\n      Polygonal,\r\n      Shear,\r\n      ElementedWall,\r\n      PlumbingWall,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of covering that can further specify an IfcRailing\r\n   /// </summary>\r\n   public enum IFCRailingType\r\n   {\r\n      HandRail,\r\n      GuardRail,\r\n      Balustrade,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the types of IfcReinforcingBar roles\r\n   /// </summary>\r\n   public enum IFCReinforcingBarRole\r\n   {\r\n      Main,\r\n      Shear,\r\n      Ligature,\r\n      Stud,\r\n      Punching,\r\n      Edge,\r\n      Ring,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines reflectance methods for IfcSurfaceStyleRendering\r\n   /// </summary>\r\n   public enum IFCReflectanceMethod\r\n   {\r\n      Blinn,\r\n      Flat,\r\n      Glass,\r\n      Matt,\r\n      Metal,\r\n      Mirror,\r\n      Phong,\r\n      Plastic,\r\n      Strauss,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the types of IfcReinforcingBar surfaces\r\n   /// </summary>\r\n   public enum IFCReinforcingBarSurface\r\n   {\r\n      Plain,\r\n      Textured\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic configuration of the roof in terms of the different roof shapes. \r\n   /// </summary>\r\n   public enum IFCRoofType\r\n   {\r\n      Flat_Roof,\r\n      Shed_Roof,\r\n      Gable_Roof,\r\n      Hip_Roof,\r\n      Hipped_Gable_Roof,\r\n      Gambrel_Roof,\r\n      Mansard_Roof,\r\n      Barrel_Roof,\r\n      Rainbow_Roof,\r\n      Butterfly_Roof,\r\n      Pavilion_Roof,\r\n      Dome_Roof,\r\n      FreeForm,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic configuration of the ramps in terms of the different ramp shapes. \r\n   /// </summary>\r\n   public enum IFCRampType\r\n   {\r\n      Straight_Run_Ramp,\r\n      Two_Straight_Run_Ramp,\r\n      Quarter_Turn_Ramp,\r\n      Two_Quarter_Turn_Ramp,\r\n      Half_Turn_Ramp,\r\n      Spiral_Ramp,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic configuration of the ramp flight in term of different ramp flight shapes.\r\n   /// </summary>\r\n   public enum IFCRampFlightType\r\n   {\r\n      Straight,\r\n      Spiral,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic configuration of the stairs in terms of the different stair shapes. \r\n   /// </summary>\r\n   public enum IFCStairType\r\n   {\r\n      Straight_Run_Stair,\r\n      Two_Straight_Run_Stair,\r\n      Quarter_Winding_Stair,\r\n      Quarter_Turn_Stair,\r\n      Half_Winding_Stair,\r\n      Half_Turn_Stair,\r\n      Two_Quarter_Winding_Stair,\r\n      Two_Quarter_Turn_Stair,\r\n      Three_Quarter_Winding_Stair,\r\n      Three_Quarter_Turn_Stair,\r\n      Spiral_Stair,\r\n      Double_Return_Stair,\r\n      Curved_Run_Stair,\r\n      Two_Curved_Run_Stair,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic type of the stairflight\r\n   /// </summary>\r\n   public enum IFCStairFlightType\r\n   {\r\n      STRAIGHT,\r\n      WINDER,\r\n      SPIRAL,\r\n      CURVED,\r\n      FREEFORM,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines suface sides for IfcSurfaceStyle\r\n   /// </summary>\r\n   public enum IFCSurfaceSide\r\n   {\r\n      Positive,\r\n      Negative,\r\n      Both\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different ways how path based elements can connect.\r\n   /// </summary>\r\n   public enum IFCConnectionType\r\n   {\r\n      AtPath,\r\n      AtStart,\r\n      AtEnd,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the types of occupant from which the type required can be selected.\r\n   /// </summary>\r\n   public enum IFCOccupantType\r\n   {\r\n      Assignee,\r\n      Assignor,\r\n      Lessee,\r\n      Lessor,\r\n      LettingAgent,\r\n      Owner,\r\n      Tenant,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Roles which may be played by an actor.\r\n   /// </summary>\r\n   public enum IFCRoleEnum\r\n   {\r\n      Supplier,\r\n      Manufacturer,\r\n      Contractor,\r\n      Subcontractor,\r\n      Architect,\r\n      StructuralEngineer,\r\n      CostEngineer,\r\n      Client,\r\n      BuildingOwner,\r\n      BuildingOperator,\r\n      MechanicalEngineer,\r\n      ElectricalEngineer,\r\n      ProjectManager,\r\n      FacilitiesManager,\r\n      CivilEngineer,\r\n      CommissioningEngineer,\r\n      Engineer,\r\n      Owner,\r\n      Consultant,\r\n      ConstructionManager,\r\n      FieldConstructionManager,\r\n      Reseller,\r\n      UserDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of profiles.\r\n   /// </summary>\r\n   public enum IFCProfileType\r\n   {\r\n      Curve,\r\n      Area\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the boolean operators used in clipping.\r\n   /// </summary>\r\n   public enum IFCBooleanOperator\r\n   {\r\n      Union,\r\n      Intersection,\r\n      Difference\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the transition type used by compositive curve segments.\r\n   /// </summary>\r\n   public enum IFCTransitionCode\r\n   {\r\n      Discontinuous,\r\n      Continuous,\r\n      ContSameGradient,\r\n      ContSameGradientSameCurvature\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the trimming preference used by bounded curves.\r\n   /// </summary>\r\n   public enum IFCTrimmingPreference\r\n   {\r\n      Cartesian,\r\n      Parameter,\r\n      Unspecified\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the predefined types of curtain walls.\r\n   /// </summary>\r\n   public enum IFCCurtainWallType\r\n   {\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   public enum IFCBuildingElementProxyType\r\n   {\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   public enum IFCVibrationIsolatorType\r\n   {\r\n      COMPRESSION,\r\n      SPRING,\r\n      USERDEFINED,\r\n      NOTDEFINED\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetElementShading::ShadingDeviceType possible values.\r\n   /// </summary>\r\n   public enum PSetElementShading_ShadingDeviceType\r\n   {\r\n      Fixed,\r\n      Movable,\r\n      Exterior,\r\n      Interior,\r\n      Overhang,\r\n      SideFin,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetLightFixtureTypeCommon::LightFixtureMountingType possible values.\r\n   /// </summary>\r\n   public enum PSetLightFixtureTypeCommon_LightFixtureMountingType\r\n   {\r\n      CableSpanned,\r\n      FreeStanding,\r\n      Pole_Side,\r\n      Pole_Top,\r\n      Recessed,\r\n      Surface,\r\n      Suspended,\r\n      TrackMounted,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetLightFixtureTypeCommon::LightFixturePlacingType possible values.\r\n   /// </summary>\r\n   public enum PSetLightFixtureTypeCommon_LightFixturePlacingType\r\n   {\r\n      Ceiling,\r\n      Floor,\r\n      Furniture,\r\n      Pole,\r\n      Wall,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetFlowTerminalAirTerminal::AirTerminalAirflowType possible values.\r\n   /// </summary>\r\n   public enum PSetFlowTerminalAirTerminal_AirTerminalAirflowType\r\n   {\r\n      SupplyAir,\r\n      ReturnAir,\r\n      ExhaustAir,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetFlowTerminalAirTerminal::AirTerminalLocation possible values.\r\n   /// </summary>\r\n   public enum PSetFlowTerminalAirTerminal_AirTerminalLocation\r\n   {\r\n      SideWallHigh,\r\n      SideWallLow,\r\n      CeilingPerimeter,\r\n      CeilingInterior,\r\n      Floor,\r\n      Sill,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalShape possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalShape\r\n   {\r\n      Round,\r\n      Rectangular,\r\n      Square,\r\n      Slot,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalFlowPattern possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalFlowPattern\r\n   {\r\n      LinearSingle,\r\n      LinearDouble,\r\n      LinearFourWay,\r\n      Radial,\r\n      Swirl,\r\n      Displacement, // Official Displacment in IFC2x3_TC1 help.\r\n      CompactJet,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalDischargeDirection possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalDischargeDirection\r\n   {\r\n      Parallel,\r\n      Perpendicular,\r\n      Adjustable,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalFinishType possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalFinishType\r\n   {\r\n      Annodized,\r\n      Painted,\r\n      None,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalMountingType possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalMountingType\r\n   {\r\n      Surface,\r\n      FlatFlush,\r\n      LayIn,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalCoreType possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalCoreType\r\n   {\r\n      ShutterBlade,\r\n      CurvedBlade,\r\n      Removable,\r\n      Reversible,\r\n      None,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalFlowControlType possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalFlowControlType\r\n   {\r\n      Damper,\r\n      Bellows,\r\n      None,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetElectricalDeviceCommon::InsulationStandardClass possible values.\r\n   /// </summary>\r\n   public enum PSetElectricalDeviceCommon_InsulationStandardClass\r\n   {\r\n      Class0Appliance,\r\n      Class0IAppliance,\r\n      ClassIAppliance,\r\n      ClassIIAppliance,\r\n      ClassIIIAppliance,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PsetSanitaryTerminalTypeBath::BathType possible values.\r\n   /// </summary>\r\n   public enum PsetSanitaryTerminalTypeBath_BathType\r\n   {\r\n      Domestic,\r\n      DomesticCorner,\r\n      Foot,\r\n      Jacuzzi,\r\n      Plunge,\r\n      Sitz,\r\n      Treatment,\r\n      Whirlpool,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PsetSanitaryTerminalTypeShower::ShowerType possible values.\r\n   /// </summary>\r\n   public enum PsetSanitaryTerminalTypeShower_ShowerType\r\n   {\r\n      Drench,\r\n      Individual,\r\n      Tunnel,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PsetSanitaryTerminalTypeSink::SinkType possible values.\r\n   /// </summary>\r\n   public enum PsetSanitaryTerminalTypeSink_SinkType\r\n   {\r\n      Belfast,\r\n      Bucket,\r\n      Cleaners,\r\n      Combination_Left,\r\n      Combination_Right,\r\n      Combination_Double,\r\n      Drip,\r\n      Laboratory,\r\n      London,\r\n      Plaster,\r\n      Pot,\r\n      Rinsing,\r\n      Shelf,\r\n      VegetablePreparation,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PsetSanitaryTerminalTypeToiletPan::ToiletType possible values.\r\n   /// </summary>\r\n   public enum PsetSanitaryTerminalTypeToiletPan_ToiletType\r\n   {\r\n      BedPanWasher,\r\n      Chemical,\r\n      CloseCoupled,\r\n      LooseCoupled,\r\n      SlopHopper,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PsetSanitaryTerminalTypeToiletPan::ToiletPanType possible values.\r\n   /// </summary>\r\n   public enum PsetSanitaryTerminalTypeToiletPan_ToiletPanType\r\n   {\r\n      Siphonic,\r\n      Squat,\r\n      WashDown,\r\n      WashOut,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PsetSanitaryTerminalTypeToiletPan::SanitaryMounting possible values.\r\n   /// </summary>\r\n   public enum PsetSanitaryTerminalTypeToiletPan_SanitaryMounting\r\n   {\r\n      BackToWall,\r\n      Pedestal,\r\n      CounterTop,\r\n      WallHung,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PsetSanitaryTerminalTypeWashHandBasin::WashHandBasinType possible values.\r\n   /// </summary>\r\n   public enum PsetSanitaryTerminalTypeWashHandBasin_WashHandBasinType\r\n   {\r\n      DentalCuspidor,\r\n      HandRinse,\r\n      Hospital,\r\n      Tipup,\r\n      Washfountain,\r\n      WashingTrough,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   // <summary>\r\n   /// Defines the PSetElectricalDeviceCommon::InsulationStandardClass possible values.\r\n   /// </summary>\r\n   public enum PsetSwitchingDeviceTypeCommon_SwitchFunction\r\n   {\r\n      OnOffSwitch,\r\n      IntermediateSwitch,\r\n      DoubleThrowSwitch,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   // <summary>\r\n   /// Defines the PsetSwitchingDeviceTypeToggleSwitch::ToggleSwitchType possible values.\r\n   /// </summary>\r\n   public enum PsetSwitchingDeviceTypeToggleSwitch_ToggleSwitchType\r\n   {\r\n      BreakGlass,\r\n      Changeover,\r\n      Dimmer,\r\n      KeyOperated,\r\n      ManualPull,\r\n      PushButton,\r\n      Pullcord,\r\n      Rocker,\r\n      Selector,\r\n      Twist,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   // <summary>\r\n   /// Defines the PsetSwitchingDeviceTypeToggleSwitch::SwitchUsage possible values.\r\n   /// </summary>\r\n   public enum PsetSwitchingDeviceTypeToggleSwitch_SwitchUsage\r\n   {\r\n      Emergency,\r\n      Guard,\r\n      Limit,\r\n      Start,\r\n      Stop,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   // <summary>\r\n   /// Defines the PsetSwitchingDeviceTypeToggleSwitch::SwitchActivation possible values.\r\n   /// </summary>\r\n   public enum PsetSwitchingDeviceTypeToggleSwitch_SwitchActivation\r\n   {\r\n      Actuator,\r\n      Foot,\r\n      Hand,\r\n      Proximity,\r\n      Sound,\r\n      TwoHand,\r\n      Wire,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Toolkit/IFCInstanceExporter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing static Revit.IFC.Export.Utility.ParameterUtil;\r\n\r\nnamespace Revit.IFC.Export.Toolkit\r\n{\r\n   public class IFCInstanceExporter\r\n   {\r\n      /////////////////////////////////////////////////////////////////\r\n      // SetXXX method is to set base entities' attributes.\r\n      // So we have below layout for these methods:\r\n      //   SetABCBaseEntity(...) { ... }\r\n      //   CreateABCEntity(...)\r\n      //      {\r\n      //         //Code to create ABC instance goes here.\r\n      //         //Code to set ABC entity's own attributes goes here.\r\n      //         SetABCBaseEntity(...);\r\n      //      }\r\n      ///////////////////////////////////////////////////////////////\r\n\r\n      private class MissingPredefinedAttributeCache\r\n      {\r\n         /// <summary>\r\n         /// See if a particular entity type is missing the \"PredefinedType\" attribute for a particular version.\r\n         /// </summary>\r\n         /// <param name=\"version\">The IFC schema version.</param>\r\n         /// <param name=\"type\">The IFC entity type.</param>\r\n         /// <returns>True if it is missing, false otherwise.</returns>\r\n         /// <remarks>We intend to add items to this cache as we encounter them in the Add function.</remarks>\r\n         public bool Find(IFCVersion version, IFCEntityType type)\r\n         {\r\n            ISet<IFCEntityType> missingPredefinedEntityCacheForVersion = null;\r\n            if (!MissingAttributeCache.TryGetValue(version, out missingPredefinedEntityCacheForVersion))\r\n               return false;\r\n\r\n            return missingPredefinedEntityCacheForVersion.Contains(type);\r\n         }\r\n\r\n         /// <summary>\r\n         /// Add an entity type that is missing the \"PredefinedType\" attribute for a particular version.\r\n         /// </summary>\r\n         /// <param name=\"version\">The IFC schema version.</param>\r\n         /// <param name=\"type\">The IFC entity type.</param>\r\n         /// <remarks>We intend to add items to this cache as we encounter them.</remarks>\r\n         public void Add(IFCVersion version, IFCEntityType type)\r\n         {\r\n            ISet<IFCEntityType> missingPredefinedEntityCacheForVersion = null;\r\n            if (!MissingAttributeCache.TryGetValue(version, out missingPredefinedEntityCacheForVersion))\r\n            {\r\n               missingPredefinedEntityCacheForVersion = new HashSet<IFCEntityType>();\r\n               MissingAttributeCache[version] = missingPredefinedEntityCacheForVersion;\r\n            }\r\n\r\n            missingPredefinedEntityCacheForVersion.Add(type);\r\n         }\r\n\r\n         private IDictionary<IFCVersion, ISet<IFCEntityType>> MissingAttributeCache =\r\n            new Dictionary<IFCVersion, ISet<IFCEntityType>>();\r\n      }\r\n\r\n      private static MissingPredefinedAttributeCache MissingAttributeCache { get; set; } =\r\n         new MissingPredefinedAttributeCache();\r\n\r\n      private static IFCAnyHandle CreateInstance(IFCFile file, IFCEntityType type, Element element)\r\n      {\r\n         IFCAnyHandle hnd = IFCAnyHandleUtil.CreateInstance(file, type);\r\n\r\n         // Set the IfcRoot Name and Description override here to make it consistent accross\r\n         if (element != null && IFCAnyHandleUtil.IsSubTypeOf(hnd, IFCEntityType.IfcRoot))\r\n         {\r\n            string nameOverride = NamingUtil.GetNameOverride(element, null);\r\n            if (!string.IsNullOrEmpty(nameOverride))\r\n               IFCAnyHandleUtil.SetAttribute(hnd, \"Name\", nameOverride);\r\n\r\n            string descOverride = NamingUtil.GetDescriptionOverride(element, null);\r\n            if (!string.IsNullOrEmpty(descOverride))\r\n               IFCAnyHandleUtil.SetAttribute(hnd, \"Description\", descOverride);\r\n         }\r\n         return hnd;\r\n      }\r\n\r\n      \r\n      #region private validation and set methods goes here\r\n\r\n      /// <summary>\r\n      /// To validate that the Entity Type string is a valid type and further check that it is valid within the specific schema version selected\r\n      /// </summary>\r\n      /// <param name=\"entityTypeStr\">IFC entity type in string format</param>\r\n      /// <returns>The handle, or null.</returns>\r\n      private static string ValidateEntityTypeStr(string entityTypeStr)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3)\r\n         {\r\n            Revit.IFC.Common.Enums.IFC4x3.IFCEntityType entityTypeEnum;\r\n            if (Enum.TryParse(entityTypeStr, true, out entityTypeEnum))     //check for valid IFC4x3 entity type\r\n               return entityTypeStr;                                       //if valid, return the original type str\r\n         }\r\n         else if (ExporterCacheManager.ExportOptionsCache.ExportAs4)\r\n         {\r\n            Revit.IFC.Common.Enums.IFC4.IFCEntityType entityTypeEnum;\r\n            if (Enum.TryParse(entityTypeStr, true, out entityTypeEnum))     //check for valid IFC4 entity type\r\n               return entityTypeStr;                                       //if valid, return the original type str\r\n         }\r\n         else\r\n         {\r\n            Revit.IFC.Common.Enums.IFC2x.IFCEntityType entityTypeEnum;\r\n            if (!Enum.TryParse(entityTypeStr, true, out entityTypeEnum))    //check for valid IFC2x- entity type\r\n            {\r\n               IFCEntityType entTypeTest, entTypeUse;\r\n               if (Enum.TryParse(entityTypeStr, true, out entTypeTest))    //check for valid IFC entity type (combined)\r\n               {\r\n                  if (IFCCompatibilityType.CheckCompatibleType(entTypeTest, out entTypeUse))  //check whether it is MEP type that needs to create the supertype in IFC2x-\r\n                     return entTypeUse.ToString();\r\n                  else\r\n                     return entityTypeStr;\r\n               }\r\n            }\r\n         }\r\n         throw new ArgumentException(\"Entity string is invalid\", entityTypeStr);\r\n      }\r\n\r\n      private static (IFCAnyHandle ownerHistory, string name, string description) DefaultRootData(Element revitType)\r\n      {\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n         string name = NamingUtil.GetIFCName(revitType);\r\n         return (ownerHistory, name, null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcRoot.\r\n      /// </summary>\r\n      /// <param name=\"root\">The IfcRoot.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      private static void SetRoot(IFCAnyHandle root, Element element, string guid, IFCAnyHandle ownerHistory, string name, string description)\r\n      {\r\n         ExporterUtil.SetGlobalId(root, guid, element);\r\n\r\n         IFCAnyHandleUtil.SetAttribute(root, \"OwnerHistory\", ownerHistory);\r\n\r\n         string overrideName = name;\r\n         if (element != null)\r\n         {\r\n            if (string.IsNullOrEmpty(overrideName))\r\n               overrideName = NamingUtil.GetIFCName(element);\r\n            overrideName = NamingUtil.GetNameOverride(root, element, overrideName);\r\n         }\r\n         IFCAnyHandleUtil.SetAttribute(root, \"Name\", overrideName);\r\n\r\n         string overrideDescription = description;\r\n         if (element != null)\r\n            overrideDescription = NamingUtil.GetDescriptionOverride(root, element, null);\r\n         IFCAnyHandleUtil.SetAttribute(root, \"Description\", overrideDescription);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcObjectDefinition.\r\n      /// </summary>\r\n      /// <param name=\"objectDefinition\">The IfcObjectDefinition.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      private static void SetObjectDefinition(IFCAnyHandle objectDefinition, Element element, string guid, IFCAnyHandle ownerHistory, string name, string description)\r\n      {\r\n         SetRoot(objectDefinition, element, guid, ownerHistory, name, description);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcTypeObject.\r\n      /// </summary>\r\n      /// <param name=\"typeObject\">The IfcTypeObject.</param>\r\n      /// <param name=\"revitType\">The Revit element.</param>\r\n      /// <param name=\"propertySets\">The property set(s) associated with the type.</param>\r\n      private static void SetTypeObject(IFCAnyHandle typeHandle, Element revitType,\r\n         string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n         string applicableOccurrence, HashSet<IFCAnyHandle> propertySets)\r\n      {\r\n         if (typeHandle.IsSubTypeOf(\"IFCTYPEOBJECT\"))\r\n         {\r\n            string overrideApplicableOccurrence = null;\r\n            if (revitType != null)\r\n            {\r\n               overrideApplicableOccurrence = NamingUtil.GetOverrideStringValue(revitType, \"IfcApplicableOccurrence\", applicableOccurrence);\r\n               IFCAnyHandleUtil.SetAttribute(typeHandle, \"ApplicableOccurrence\", overrideApplicableOccurrence);\r\n            }\r\n\r\n            if (propertySets != null && propertySets.Count > 0)\r\n               IFCAnyHandleUtil.SetAttribute(typeHandle, \"HasPropertySets\", propertySets);\r\n         }\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2)\r\n            SetPropertyDefinition(typeHandle, revitType, guid, ExporterCacheManager.OwnerHistoryHandle, name, description);\r\n         else\r\n            SetObjectDefinition(typeHandle, revitType, guid, ExporterCacheManager.OwnerHistoryHandle, name, description);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set IfcElementType entity with minimum parameters for backward compatibility of existing \r\n      /// codes for creating Type, and returns if the element type attribute value is appropriate for the\r\n      /// predefined type.\r\n      /// </summary>\r\n      /// <param name=\"typeHandle\">The Type handle.</param>\r\n      /// <param name=\"element\">The Element, usually but not necessarily an ElementType.</param>\r\n      /// <param name=\"predefinedType\">The PredefinedType attribute value.</param>\r\n      /// <param name=\"guid\">The IFC global Id.</param>\r\n      /// <param name=\"propertySets\">The related property sets.</param>\r\n      /// <param name=\"representationMaps\">The related representation maps.</param>\r\n      /// <remarks>\r\n      /// It is disallowed to have the predefined type to be USERDEFINED, but the ElementType attribute to be empty.\r\n      /// In this case, we will reset predefinedType to NOTDEFINED.\r\n      /// </remarks>\r\n      private static void SetElementType(IFCAnyHandle typeHandle, Element element, ref string predefinedType,\r\n         string guid, HashSet<IFCAnyHandle> propertySets, IList<IFCAnyHandle> representationMaps)\r\n      {\r\n         // Note that we could generate the guid from the elementType, but that isn't always correct\r\n         // for FamilySymbols.  As such, we pass it in in these cases, but calculate it as a fallback.\r\n         guid ??= GUIDUtil.CreateGUID(element);\r\n\r\n         // It is possible that we pass in the instance as a fake type here.\r\n         if (string.Compare(predefinedType, \"USERDEFINED\") == 0)\r\n         {\r\n            string baseElementType = (element is ElementType) ? NamingUtil.GetFamilyName(element as ElementType) :\r\n               NamingUtil.GetFamilyAndTypeName(element);\r\n\r\n            string elementType = NamingUtil.GetElementTypeOverride(element, baseElementType);\r\n            if (string.IsNullOrEmpty(elementType))\r\n            {\r\n               predefinedType = \"NOTDEFINED\";\r\n            }\r\n            else\r\n            {\r\n               try\r\n               {\r\n                  // Not everything has \"ElementType\".\r\n                  IFCAnyHandleUtil.SetAttribute(typeHandle, \"ElementType\", elementType);\r\n               }\r\n               catch\r\n               {\r\n               }\r\n            }\r\n         }\r\n\r\n         SetTypeProduct(typeHandle, element, guid, ExporterCacheManager.OwnerHistoryHandle, null, null, null, propertySets, representationMaps, null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcTypeProduct.\r\n      /// </summary>\r\n      /// <param name=\"typeProduct\">The IfcTypeProduct.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"applicableOccurrence\">The attribute optionally defines the data type of the occurrence object.</param>\r\n      /// <param name=\"propertySets\">The property set(s) associated with the type.</param>\r\n      /// <param name=\"representationMaps\">The mapped geometries associated with the type.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      private static void SetTypeProduct(IFCAnyHandle typeProduct, Element revitType,\r\n         string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n         string applicableOccurrence, HashSet<IFCAnyHandle> propertySets,\r\n         IList<IFCAnyHandle> representationMaps, string tag)\r\n      {\r\n         if (typeProduct.IsSubTypeOf(\"IFCTYPEPRODUCT\"))\r\n         {\r\n            if (representationMaps != null && representationMaps.Count > 0)\r\n            {\r\n               IFCAnyHandleUtil.SetAttribute(typeProduct, \"RepresentationMaps\", representationMaps);\r\n            }\r\n\r\n            string overrideTag = (revitType != null) ? NamingUtil.GetTagOverride(revitType) : tag;\r\n            IFCAnyHandleUtil.SetAttribute(typeProduct, \"Tag\", overrideTag);\r\n         }\r\n\r\n         SetTypeObject(typeProduct, revitType, guid, ownerHistory, name, description, applicableOccurrence, propertySets);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcPropertyDefinition.\r\n      /// </summary>\r\n      /// <param name=\"propertyDefinition\">The IfcPropertyDefinition.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      private static void SetPropertyDefinition(IFCAnyHandle propertyDefinition, Element element, string guid, IFCAnyHandle ownerHistory, string name, string description)\r\n      {\r\n         SetRoot(propertyDefinition, element, guid, ownerHistory, name, description);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcRelationship.\r\n      /// </summary>\r\n      /// <param name=\"relationship\">The IfcRelationship.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      private static void SetRelationship(IFCAnyHandle relationship,\r\n          string guid, IFCAnyHandle ownerHistory, string name, string description)\r\n      {\r\n         SetRoot(relationship, null, guid, ownerHistory, name, description);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcPropertySetDefinition.\r\n      /// </summary>\r\n      /// <param name=\"propertySetDefinition\">The IfcPropertySetDefinition.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      private static void SetPropertySetDefinition(IFCAnyHandle propertySetDefinition,\r\n          string guid, IFCAnyHandle ownerHistory, string name, string description)\r\n      {\r\n         SetPropertyDefinition(propertySetDefinition, null, guid, ownerHistory, name, description);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcRelAssociates.\r\n      /// </summary>\r\n      /// <param name=\"relAssociates\">The IfcRelAssociates.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatedObjects\">The objects to be related to the material.</param>\r\n      private static void SetRelAssociates(IFCAnyHandle relAssociates,\r\n          string guid, IFCAnyHandle ownerHistory, string name, string description, ISet<IFCAnyHandle> relatedObjects)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(relAssociates, \"RelatedObjects\", relatedObjects);\r\n         SetRelationship(relAssociates, guid, ownerHistory, name, description);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcRelDefines.\r\n      /// </summary>\r\n      /// <param name=\"relDefines\">The IfcRelDefines.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatedObjects\">The objects to be related to a type.</param>\r\n      private static void SetRelDefines(IFCAnyHandle relDefines,\r\n          string guid, IFCAnyHandle ownerHistory, string name, string description, ISet<IFCAnyHandle> relatedObjects)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(relDefines, \"RelatedObjects\", relatedObjects);\r\n         SetRelationship(relDefines, guid, ownerHistory, name, description);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcRelDecomposes.\r\n      /// </summary>\r\n      /// <param name=\"relDecomposes\">The IfcRelDecomposes.</param>\r\n      /// <param name=\"guid\">The GUID for the entity.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatingObject\">The element to which the structure contributes.</param>\r\n      /// <param name=\"relatedObjects\">The elements that make up the structure.</param>\r\n      private static void SetRelDecomposes(IFCAnyHandle relDecomposes,\r\n          string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n          IFCAnyHandle relatingObject, HashSet<IFCAnyHandle> relatedObjects)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(relDecomposes, \"RelatingObject\", relatingObject);\r\n         IFCAnyHandleUtil.SetAttribute(relDecomposes, \"RelatedObjects\", relatedObjects);\r\n         SetRelationship(relDecomposes, guid, ownerHistory, name, description);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcRelDecomposes (for IFC4 and above), which has different attributes than the older versions\r\n      /// </summary>\r\n      /// <param name=\"relDecomposes\">The IfcRelDecomposes</param>\r\n      /// <param name=\"guid\">the GUID</param>\r\n      /// <param name=\"ownerHistory\">the owner history</param>\r\n      /// <param name=\"name\">the name</param>\r\n      /// <param name=\"description\">the description</param>\r\n      private static void SetRelDecomposes(IFCAnyHandle relDecomposes,\r\n         string guid, IFCAnyHandle ownerHistory, string name, string description)\r\n      {\r\n         SetRelationship(relDecomposes, guid, ownerHistory, name, description);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcRelConnects.\r\n      /// </summary>\r\n      /// <param name=\"relConnects\">The IfcRelConnects.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      private static void SetRelConnects(IFCAnyHandle relConnects,\r\n          string guid, IFCAnyHandle ownerHistory, string name, string description)\r\n      {\r\n         SetRelationship(relConnects, guid, ownerHistory, name, description);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcObject.\r\n      /// </summary>\r\n      /// <param name=\"obj\">The IfcObject.</param>\r\n      /// <param name=\"guid\">The GUID to use to label the wall.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      private static void SetObject(IFCAnyHandle obj, Element element,\r\n         string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n         string objectType)\r\n      {\r\n         string overrideObjectType = objectType;\r\n         if (element != null)\r\n         {\r\n            // Older than IFC4 may not have Predefined Type set.  If the predefined type is null, \r\n            string enumTypeValue = null;\r\n            IFCExportInfoPair exportType = ExporterUtil.GetObjectExportType(element, out enumTypeValue);\r\n            bool calcObjectType = false;\r\n            // If predefinedType is USERDEFINED, we have to export some value.  Otherwise it is OK to export nothing.\r\n            bool forceObjectType = false;\r\n\r\n            if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            {\r\n               string predefinedType = exportType?.PredefinedType;\r\n               forceObjectType = !string.IsNullOrWhiteSpace(predefinedType);\r\n               calcObjectType = !forceObjectType || predefinedType == \"USERDEFINED\";\r\n            }\r\n            else\r\n            {\r\n               calcObjectType = string.Compare(exportType?.PredefinedType ?? enumTypeValue, \"USERDEFINED\") == 0;\r\n            }\r\n\r\n            if (calcObjectType)\r\n            {\r\n               if (forceObjectType)\r\n               {\r\n                  objectType ??= NamingUtil.GetFamilyAndTypeName(element);\r\n               }\r\n               overrideObjectType = NamingUtil.GetObjectTypeOverride(obj, element, objectType);\r\n            }\r\n         }\r\n\r\n         // Whitespace should be considered as null.\r\n         IFCAnyHandleUtil.SetAttribute(obj, \"ObjectType\", string.IsNullOrWhiteSpace(overrideObjectType) ? null : overrideObjectType);\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2)\r\n         {\r\n            SetRoot(obj, element, guid, ownerHistory, name, description);\r\n         }\r\n         else\r\n         {\r\n            SetObjectDefinition(obj, element, guid, ownerHistory, name, description);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcProduct.\r\n      /// </summary>\r\n      /// <param name=\"product\">The IfcProduct.</param>\r\n      /// <param name=\"guid\">The GUID to use to label the wall.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The local placement.</param>\r\n      /// <param name=\"representation\">The representation object assigned to the wall.</param>\r\n\r\n      private static void SetProduct(IFCAnyHandle product, Element element,\r\n         string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n         string objectType,\r\n         IFCAnyHandle objectPlacement, IFCAnyHandle representation)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(product, \"ObjectPlacement\", objectPlacement);\r\n         IFCAnyHandleUtil.SetAttribute(product, \"Representation\", representation);\r\n         SetObject(product, element, guid, ownerHistory, name, description, objectType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcGroup.\r\n      /// </summary>\r\n      /// <param name=\"group\">The IfcGroup.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      private static void SetGroup(IFCAnyHandle group,\r\n          string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n          string objectType)\r\n      {\r\n         SetObject(group, null, guid, ownerHistory, name, description, objectType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcSystem.\r\n      /// </summary>\r\n      /// <param name=\"system\">The IfcSystem.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      private static void SetSystem(IFCAnyHandle system,\r\n          string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n          string objectType)\r\n      {\r\n         SetGroup(system, guid, ownerHistory, name, description, objectType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcDistributionSystem.\r\n      /// </summary>\r\n      /// <param name=\"distributionSystem\">The IfcDistributionSystem.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      private static void SetDistributionSystem(IFCAnyHandle distributionSystem,\r\n          string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n          string objectType, string longName, string predefinedType)\r\n      {\r\n         SetSystem(distributionSystem, guid, ownerHistory, name, description, objectType);\r\n\r\n         if (!string.IsNullOrEmpty(predefinedType))\r\n            IFCAnyHandleUtil.SetAttribute(distributionSystem, \"PredefinedType\", predefinedType, true);\r\n         if (!string.IsNullOrEmpty(longName))\r\n            IFCAnyHandleUtil.SetAttribute(distributionSystem, \"LongName\", longName, false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcElement.\r\n      /// </summary>\r\n      /// <param name=\"element\">The IfcElement.</param>\r\n      /// <param name=\"revitElement\">The Revit element.</param>\r\n      /// <param name=\"guid\">The GUID to use to label the wall.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"objectPlacement\">The local placement.</param>\r\n      /// <param name=\"representation\">The representation object assigned to the wall.</param>\r\n      /// <param name=\"allowTag\">Optional parameter; if false, don't create the tag.</param>\r\n      private static void SetElement(IFCAnyHandle element, Element revitElement,\r\n         string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n         string objectType,\r\n         IFCAnyHandle objectPlacement, IFCAnyHandle representation,\r\n         string tag)\r\n      {\r\n         SetProduct(element, revitElement, guid, ownerHistory, name, description, objectType, objectPlacement, representation);\r\n\r\n         string elementTag = (revitElement != null) ? NamingUtil.GetTagOverride(revitElement) : tag;\r\n\r\n         try\r\n         {\r\n            IFCAnyHandleUtil.SetAttribute(element, \"Tag\", elementTag);\r\n         }\r\n         catch\r\n         {\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcFacilityPart.\r\n      /// </summary>\r\n      /// <param name=\"facilityPart\">The IfcFacilityPart.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The representation object.</param>\r\n      /// <param name=\"longName\">The long name.</param>\r\n      /// <param name=\"compositionType\">The composition type.</param>\r\n      private static void SetFacilityPart(IFCAnyHandle facilityPart, Element element,\r\n         string guid, IFCAnyHandle ownerHistory, string name, string description, string objectType,\r\n         IFCAnyHandle objectPlacement, IFCAnyHandle representation, string longName,\r\n         IFCElementComposition compositionType)\r\n      {\r\n         SetSpatialStructureElement(facilityPart, element, guid, ownerHistory, name, description, objectType,\r\n            objectPlacement, representation, longName, compositionType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcFacility.\r\n      /// </summary>\r\n      /// <param name=\"facility\">The IfcFacility.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The representation object.</param>\r\n      /// <param name=\"longName\">The long name.</param>\r\n      /// <param name=\"compositionType\">The composition type.</param>\r\n      private static void SetFacility(IFCAnyHandle facility, Element element,\r\n         string guid, IFCAnyHandle ownerHistory, string name, string description, string objectType,\r\n         IFCAnyHandle objectPlacement, IFCAnyHandle representation, string longName,\r\n         IFCElementComposition compositionType)\r\n      {\r\n         SetSpatialStructureElement(facility, element, guid, ownerHistory, name, description, objectType,\r\n            objectPlacement, representation, longName, compositionType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcSpatialStructureElement.\r\n      /// </summary>\r\n      /// <param name=\"spatialStructureElement\">The IfcSpatialStructureElement.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The representation object.</param>\r\n      /// <param name=\"longName\">The long name.</param>\r\n      /// <param name=\"compositionType\">The composition type.</param>\r\n      private static void SetSpatialStructureElement(IFCAnyHandle spatialStructureElement, Element element,\r\n         string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n         string objectType, IFCAnyHandle objectPlacement, IFCAnyHandle representation, string longName,\r\n         IFCElementComposition compositionType)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(spatialStructureElement, \"CompositionType\", compositionType);\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            IFCAnyHandleUtil.SetAttribute(spatialStructureElement, \"LongName\", longName);\r\n            SetProduct(spatialStructureElement, element, guid, ownerHistory, name, description, objectType, objectPlacement, representation);\r\n         }\r\n         else\r\n         {\r\n            SetSpatialElement(spatialStructureElement, element, guid, ownerHistory, name, description, objectType, objectPlacement, representation, longName);\r\n         }\r\n      }\r\n\r\n      private static void SetSpatialElement(IFCAnyHandle spatialStructureElement, Element element,\r\n         string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n         string objectType,\r\n         IFCAnyHandle objectPlacement, IFCAnyHandle representation,\r\n         string longName)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(spatialStructureElement, \"LongName\", longName);\r\n         SetProduct(spatialStructureElement, element, guid, ownerHistory, name, description, objectType, objectPlacement, representation);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcRelConnectsElements.\r\n      /// </summary>\r\n      /// <param name=\"relConnectsElements\">The IfcRelConnectsElements.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"connectionGeometry\">The geometric shape representation of the connection geometry.</param>\r\n      /// <param name=\"relatingElement\">Reference to a subtype of IfcElement that is connected by the connection relationship in the role of RelatingElement.</param>\r\n      /// <param name=\"relatedElement\">Reference to a subtype of IfcElement that is connected by the connection relationship in the role of RelatedElement.</param>\r\n      private static void SetRelConnectsElements(IFCAnyHandle relConnectsElements, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, IFCAnyHandle connectionGeometry, IFCAnyHandle relatingElement, IFCAnyHandle relatedElement)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(relConnectsElements, \"ConnectionGeometry\", connectionGeometry);\r\n         IFCAnyHandleUtil.SetAttribute(relConnectsElements, \"RelatingElement\", relatingElement);\r\n         IFCAnyHandleUtil.SetAttribute(relConnectsElements, \"RelatedElement\", relatedElement);\r\n         SetRelConnects(relConnectsElements, guid, ownerHistory, name, description);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcRelAssigns.\r\n      /// </summary>\r\n      /// <param name=\"relAssigns\">The IfcRelAssigns.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatedObjects\">Related objects, which are assigned to a single object.</param>\r\n      /// <param name=\"relatedObjectsType\">Particular type of the assignment relationship. Must be unset for IFC4 and greater.</param>\r\n      private static void SetRelAssigns(IFCAnyHandle relAssigns, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, ISet<IFCAnyHandle> relatedObjects, IFCObjectType? relatedObjectsType)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(relAssigns, \"RelatedObjects\", relatedObjects);\r\n         IFCAnyHandleUtil.SetAttribute(relAssigns, \"RelatedObjectsType\", relatedObjectsType);\r\n         SetRelationship(relAssigns, guid, ownerHistory, name, description);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcProductRepresentation.\r\n      /// </summary>\r\n      /// <param name=\"productDefinitionShape\">The IfcProductRepresentation.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"representations\">The collection of representations assigned to the shape.</param>\r\n      private static void SetProductRepresentation(IFCAnyHandle productDefinitionShape,\r\n          string name, string description, IList<IFCAnyHandle> representations)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(productDefinitionShape, \"Name\", name);\r\n         IFCAnyHandleUtil.SetAttribute(productDefinitionShape, \"Description\", description);\r\n         IFCAnyHandleUtil.SetAttribute(productDefinitionShape, \"Representations\", representations);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcProperty.\r\n      /// </summary>\r\n      /// <param name=\"property\">The IfcProperty.</param>\r\n      /// <param name=\"propertyDescription\">The name and description.</param>\r\n      private static void SetProperty(IFCAnyHandle property, PropertyDescription propertyDescription)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(property, \"Name\", propertyDescription.Name);\r\n\r\n         // Preserve existing behavior for objects that could have a description, but don't.\r\n         if (!string.IsNullOrWhiteSpace(propertyDescription.Description))\r\n         {\r\n            string attributeName = ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4x3 ? \"Description\" : \"Specification\";\r\n            IFCAnyHandleUtil.SetAttribute(property, attributeName, propertyDescription.Description);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcRepresentationContext.\r\n      /// </summary>\r\n      /// <param name=\"representationContext\">The IfcRepresentationContext.</param>\r\n      /// <param name=\"identifier\">The identifier.</param>\r\n      /// <param name=\"type\">The description of the type of a representation context.</param>\r\n      private static void SetRepresentationContext(IFCAnyHandle representationContext, string identifier, string type)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(representationContext, \"ContextIdentifier\", identifier);\r\n         IFCAnyHandleUtil.SetAttribute(representationContext, \"ContextType\", type);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcConnectedFaceSet.\r\n      /// </summary>\r\n      /// <param name=\"connectedFaceSet\">The IfcConnectedFaceSet.</param>\r\n      /// <param name=\"faces\">The collection of faces.</param>\r\n      private static void SetConnectedFaceSet(IFCAnyHandle connectedFaceSet, HashSet<IFCAnyHandle> faces)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(connectedFaceSet, \"CfsFaces\", faces);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcGeometricSet.\r\n      /// </summary>\r\n      /// <param name=\"geometricSet\">The IfcGeometricSet.</param>\r\n      /// <param name=\"geometryElements\">The collection of geometric elements.</param>\r\n      private static void SetGeometricSet(IFCAnyHandle geometricSet, HashSet<IFCAnyHandle> geometryElements)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(geometricSet, \"Elements\", geometryElements);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcAddress.\r\n      /// </summary>\r\n      /// <param name=\"address\">The IfcAddress.</param>\r\n      /// <param name=\"purpose\">Identifies the logical location of the address.</param>\r\n      /// <param name=\"description\">Text that relates the nature of the address.</param>\r\n      /// <param name=\"userDefinedPurpose\">Allows for specification of user specific purpose of the address.</param>\r\n      private static void SetAddress(IFCAnyHandle address, IFCAddressType? purpose, string description, string userDefinedPurpose)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(address, \"Purpose\", purpose);\r\n         IFCAnyHandleUtil.SetAttribute(address, \"Description\", description);\r\n         IFCAnyHandleUtil.SetAttribute(address, \"UserDefinedPurpose\", userDefinedPurpose);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcNamedUnit.\r\n      /// </summary>\r\n      /// <param name=\"namedUnit\">The IfcNamedUnit.</param>\r\n      /// <param name=\"dimensions\">The dimensions.</param>\r\n      /// <param name=\"unitType\">The type of the unit.</param>\r\n      private static void SetNamedUnit(IFCAnyHandle namedUnit, IFCAnyHandle dimensions, IFCUnit unitType)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(namedUnit, \"Dimensions\", dimensions);\r\n         IFCAnyHandleUtil.SetAttribute(namedUnit, \"UnitType\", unitType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcPlacement.\r\n      /// </summary>\r\n      /// <param name=\"placement\">The IfcPlacement.</param>\r\n      /// <param name=\"location\">The origin.</param>\r\n      private static void SetPlacement(IFCAnyHandle placement, IFCAnyHandle location)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(placement, \"Location\", location);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcCartesianTransformationOperator.\r\n      /// </summary>\r\n      /// <param name=\"cartesianTransformationOperator\">The IfcCartesianTransformationOperator.</param>\r\n      /// <param name=\"axis1\">The X direction of the transformation coordinate system.</param>\r\n      /// <param name=\"axis2\">The Y direction of the transformation coordinate system.</param>\r\n      /// <param name=\"localOrigin\">The origin of the transformation coordinate system.</param>\r\n      /// <param name=\"scale\">The scale factor.</param>\r\n      private static void SetCartesianTransformationOperator(IFCAnyHandle cartesianTransformationOperator, IFCAnyHandle axis1,\r\n          IFCAnyHandle axis2, IFCAnyHandle localOrigin, double? scale)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(cartesianTransformationOperator, \"Axis1\", axis1);\r\n         IFCAnyHandleUtil.SetAttribute(cartesianTransformationOperator, \"Axis2\", axis2);\r\n         IFCAnyHandleUtil.SetAttribute(cartesianTransformationOperator, \"LocalOrigin\", localOrigin);\r\n         IFCAnyHandleUtil.SetAttribute(cartesianTransformationOperator, \"Scale\", scale);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcManifoldSolidBrep.\r\n      /// </summary>\r\n      /// <param name=\"manifoldSolidBrep\">The IfcManifoldSolidBrep.</param>\r\n      /// <param name=\"outer\">The closed shell.</param>\r\n      private static void SetManifoldSolidBrep(IFCAnyHandle manifoldSolidBrep, IFCAnyHandle outer)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(manifoldSolidBrep, \"Outer\", outer);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcGeometricRepresentationContext.\r\n      /// </summary>\r\n      /// <param name=\"geometricRepresentationContext\">The IfcGeometricRepresentationContext.</param>\r\n      /// <param name=\"identifier\">The identifier.</param>\r\n      /// <param name=\"type\">The description of the type of a representation context.</param>\r\n      /// <param name=\"dimension\">The integer dimension count of the coordinate space modeled in a geometric representation context.</param>\r\n      /// <param name=\"precision\">Value of the model precision for geometric models.</param>\r\n      /// <param name=\"worldCoordinateSystem\">Establishment of the engineering coordinate system (often referred to as the world coordinate system in CAD)\r\n      /// for all representation contexts used by the project.</param>\r\n      /// <param name=\"trueNorth\">Direction of the true north relative to the underlying coordinate system.</param>\r\n      private static void SetGeometricRepresentationContext(IFCAnyHandle geometricRepresentationContext,\r\n          string identifier, string type, int dimension, double? precision, IFCAnyHandle worldCoordinateSystem,\r\n          IFCAnyHandle trueNorth)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(geometricRepresentationContext, \"CoordinateSpaceDimension\", dimension);\r\n         IFCAnyHandleUtil.SetAttribute(geometricRepresentationContext, \"Precision\", precision);\r\n         IFCAnyHandleUtil.SetAttribute(geometricRepresentationContext, \"WorldCoordinateSystem\", worldCoordinateSystem);\r\n         IFCAnyHandleUtil.SetAttribute(geometricRepresentationContext, \"TrueNorth\", trueNorth);\r\n         SetRepresentationContext(geometricRepresentationContext, identifier, type);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcPhysicalQuantity.\r\n      /// </summary>\r\n      /// <param name=\"physicalQuantity\">The IfcPhysicalQuantity.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      private static void SetPhysicalQuantity(IFCAnyHandle physicalQuantity, string name, string description)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(physicalQuantity, \"Name\", name);\r\n         IFCAnyHandleUtil.SetAttribute(physicalQuantity, \"Description\", description);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcPhysicalSimpleQuantity.\r\n      /// </summary>\r\n      /// <param name=\"physicalSimpleQuantity\">The IfcPhysicalSimpleQuantity.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"unit\">The unit.</param>\r\n      private static void SetPhysicalSimpleQuantity(IFCAnyHandle physicalSimpleQuantity, string name, string description, IFCAnyHandle unit)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(physicalSimpleQuantity, \"Unit\", unit);\r\n         SetPhysicalQuantity(physicalSimpleQuantity, name, description);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcRepresentation.\r\n      /// </summary>\r\n      /// <param name=\"representation\">The IfcRepresentation.</param>\r\n      /// <param name=\"contextOfItems\">The context of the items.</param>\r\n      /// <param name=\"identifier\">The identifier.</param>\r\n      /// <param name=\"type\">The representation type.</param>\r\n      /// <param name=\"items\">The items that belong to the shape representation.</param>\r\n      private static void SetRepresentation(IFCAnyHandle representation, IFCAnyHandle contextOfItems, string identifier, string type, ISet<IFCAnyHandle> items)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(representation, \"ContextOfItems\", contextOfItems);\r\n         IFCAnyHandleUtil.SetAttribute(representation, \"RepresentationIdentifier\", identifier);\r\n         IFCAnyHandleUtil.SetAttribute(representation, \"RepresentationType\", type);\r\n         IFCAnyHandleUtil.SetAttribute(representation, \"Items\", items);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcPresentationStyle.\r\n      /// </summary>\r\n      /// <param name=\"presentationStyle\">The IfcPresentationStyle.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      private static void SetPresentationStyle(IFCAnyHandle presentationStyle, string name)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(presentationStyle, \"Name\", name);\r\n      }\r\n\r\n      private static void SetPresentationLayerAssigment(IFCAnyHandle presentationLayerAssigment, string name, string description, ISet<IFCAnyHandle> assignedItems, string identifier)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(presentationLayerAssigment, \"Name\", name);\r\n         IFCAnyHandleUtil.SetAttribute(presentationLayerAssigment, \"Description\", description);\r\n         IFCAnyHandleUtil.SetAttribute(presentationLayerAssigment, \"AssignedItems\", assignedItems);\r\n         IFCAnyHandleUtil.SetAttribute(presentationLayerAssigment, \"Identifier\", identifier);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcPreDefinedItem.\r\n      /// </summary>\r\n      /// <param name=\"preDefinedItem\">The IfcPreDefinedItem.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      private static void SetPreDefinedItem(IFCAnyHandle preDefinedItem, string name)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(preDefinedItem, \"Name\", name);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcExternalReference.\r\n      /// </summary>\r\n      /// <param name=\"externalReference\">The IfcExternalReference.</param>\r\n      /// <param name=\"location\">Location of the reference (e.g. URL).</param>\r\n      /// <param name=\"itemReference\">Location of the item within the reference source.</param>\r\n      /// <param name=\"name\">Name of the reference.</param>\r\n      private static void SetExternalReference(IFCAnyHandle externalReference,\r\n         string location, string itemReference, string name)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(externalReference, \"Location\", location);\r\n         IFCAnyHandleUtil.SetAttribute(externalReference, (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4) ? \"ItemReference\" : \"Identification\", itemReference);\r\n         IFCAnyHandleUtil.SetAttribute(externalReference, \"Name\", name);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcActor.\r\n      /// </summary>\r\n      /// <param name=\"actor\">The IfcActor.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"theActor\">The actor.</param>\r\n      private static void SetActor(IFCAnyHandle actor,\r\n         string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n         string objectType,\r\n         IFCAnyHandle theActor)\r\n      {\r\n         SetObject(actor, null, guid, ownerHistory, name, description, objectType);\r\n         IFCAnyHandleUtil.SetAttribute(actor, \"TheActor\", theActor);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes to IfcRelAssignsToActor.\r\n      /// </summary>\r\n      /// <param name=\"relActor\">The IfcRelAssignsToActor.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatedObjects\">Related objects, which are assigned to a single object.</param>\r\n      /// <param name=\"relatedObjectsType\">Particular type of the assignment relationship.</param>\r\n      /// <param name=\"relatingActor\">The actor.</param>\r\n      /// <param name=\"actingRole\">The role of the actor.</param>\r\n      private static void SetRelAssignsToActor(IFCAnyHandle relActor, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, HashSet<IFCAnyHandle> relatedObjects, IFCObjectType? relatedObjectsType,\r\n          IFCAnyHandle relatingActor, IFCAnyHandle actingRole)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(relActor, \"RelatingActor\", relatingActor);\r\n         IFCAnyHandleUtil.SetAttribute(relActor, \"ActingRole\", actingRole);\r\n         SetRelAssigns(relActor, guid, ownerHistory, name, description, relatedObjects, relatedObjectsType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes for IfcProfileDef.\r\n      /// </summary>\r\n      /// <param name=\"profileDef\">The IfcProfileDef.</param>\r\n      /// <param name=\"profileType\">The profile type.</param>\r\n      /// <param name=\"profileName\">The profile name.</param>\r\n      private static void SetProfileDef(IFCAnyHandle profileDef, IFCProfileType profileType, string profileName)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(profileDef, \"ProfileType\", profileType);\r\n         IFCAnyHandleUtil.SetAttribute(profileDef, \"ProfileName\", profileName);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes for IfcParameterizedProfileDef.\r\n      /// </summary>\r\n      /// <param name=\"profileDef\">The IfcProfileDef.</param>\r\n      /// <param name=\"profileType\">The profile type.</param>\r\n      /// <param name=\"profileName\">The profile name.</param>\r\n      /// <param name=\"position\">The profile position.</param>\r\n      private static void SetParameterizedProfileDef(IFCAnyHandle profileDef, IFCProfileType profileType, string profileName, IFCAnyHandle position)\r\n      {\r\n         SetProfileDef(profileDef, profileType, profileName);\r\n         IFCAnyHandleUtil.SetAttribute(profileDef, \"Position\", position);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes for IfcCircleProfileDef.\r\n      /// </summary>\r\n      /// <param name=\"profileDef\">The IfcCircleProfileDef.</param>\r\n      /// <param name=\"profileType\">The profile type.</param>\r\n      /// <param name=\"profileName\">The profile name.</param>\r\n      /// <param name=\"position\">The profile position.</param>\r\n      private static void SetCircleProfileDef(IFCAnyHandle profileDef, IFCProfileType profileType, string profileName, IFCAnyHandle position, double radius)\r\n      {\r\n         SetParameterizedProfileDef(profileDef, profileType, profileName, position);\r\n         IFCAnyHandleUtil.SetAttribute(profileDef, \"Radius\", radius);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes for IfcArbitraryClosedProfileDef.\r\n      /// </summary>\r\n      /// <param name=\"arbitraryClosedProfileDef\">The IfcArbitraryClosedProfileDef.</param>\r\n      /// <param name=\"profileType\">The profile type.</param>\r\n      /// <param name=\"profileName\">The profile name.</param>\r\n      /// <param name=\"outerCurve\">The outer curve.</param>\r\n      private static void SetArbitraryClosedProfileDef(IFCAnyHandle arbitraryClosedProfileDef, IFCProfileType profileType, string profileName,\r\n          IFCAnyHandle outerCurve)\r\n      {\r\n         SetProfileDef(arbitraryClosedProfileDef, profileType, profileName);\r\n         IFCAnyHandleUtil.SetAttribute(arbitraryClosedProfileDef, \"OuterCurve\", outerCurve);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes for IfcSweptAreaSolid.\r\n      /// </summary>\r\n      /// <param name=\"SweptAreaSolid\">The IfcSweptAreaSolid.</param>\r\n      /// <param name=\"sweptArea\">The profile.</param>\r\n      /// <param name=\"position\">The profile origin.</param>\r\n      private static void SetSweptAreaSolid(IFCAnyHandle sweptAreaSolid, IFCAnyHandle sweptArea, IFCAnyHandle position)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(sweptAreaSolid, \"SweptArea\", sweptArea);\r\n         IFCAnyHandleUtil.SetAttribute(sweptAreaSolid, \"Position\", position);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets attributes for IfcSweptSurface.\r\n      /// </summary>\r\n      /// <param name=\"sweptSurface\">The IfcSweptSurface.</param>\r\n      /// <param name=\"sweptCurve\">The curve.</param>\r\n      /// <param name=\"position\">The position.</param>\r\n      private static void SetSweptSurface(IFCAnyHandle sweptSurface, IFCAnyHandle sweptCurve, IFCAnyHandle position)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(sweptSurface, \"SweptCurve\", sweptCurve);\r\n         IFCAnyHandleUtil.SetAttribute(sweptSurface, \"Position\", position);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set attributes for IfcBSplineCurveWithKnots\r\n      /// </summary>\r\n      /// <param name=\"bSplineCurveWithKnots\">The IfcBSplineCurveWithKnots</param>\r\n      /// <param name=\"degree\">The degree</param>\r\n      /// <param name=\"controlPointsList\">The list of control points</param>\r\n      /// <param name=\"curveForm\">The curve form</param>\r\n      /// <param name=\"closedCurve\">Indicates whether this curve is closed or not (or unknown)</param>\r\n      /// <param name=\"selfIntersect\">Indicates whether this curve is self-intersect (or unknown)</param>\r\n      /// <param name=\"knotMultiplicities\">The knot multiplicites</param>\r\n      /// <param name=\"knots\">The list of disctinct knots, the multiplicity of each knot is stored in knotMultiplicities</param>\r\n      /// <param name=\"knotSpec\">The description of knot type</param>\r\n      private static void SetBSplineCurveWithKnots(IFCAnyHandle bSplineCurveWithKnots, int degree, IList<IFCAnyHandle> controlPointsList, IFC4.IFCBSplineCurveForm curveForm,\r\n          IFCLogical closedCurve, IFCLogical selfIntersect, IList<int> knotMultiplicities, IList<double> knots, IFC4.IFCKnotType knotSpec)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(bSplineCurveWithKnots, \"KnotMultiplicities\", knotMultiplicities);\r\n         IFCAnyHandleUtil.SetAttribute(bSplineCurveWithKnots, \"Knots\", knots);\r\n         IFCAnyHandleUtil.SetAttribute(bSplineCurveWithKnots, \"KnotSpec\", knotSpec);\r\n         SetBSplineCurve(bSplineCurveWithKnots, degree, controlPointsList, curveForm, closedCurve, selfIntersect);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set attributes for IfcBSplineCurve\r\n      /// </summary>\r\n      /// <param name=\"bSplineCurve\">The IfcBSplineCurve</param>\r\n      /// <param name=\"degree\">The degree</param>\r\n      /// <param name=\"controlPointsList\">The list of control points</param>\r\n      /// <param name=\"curveForm\">The curve form</param>\r\n      /// <param name=\"closedCurve\">Indicates whether this curve is closed or not, (or unknown)</param>\r\n      /// <param name=\"selfIntersect\">Indicates whether this curve is self-intersect or not, (or unknown)</param>\r\n      private static void SetBSplineCurve(IFCAnyHandle bSplineCurve, int degree, IList<IFCAnyHandle> controlPointsList, IFC4.IFCBSplineCurveForm curveForm,\r\n          IFCLogical closedCurve, IFCLogical selfIntersect)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(bSplineCurve, \"Degree\", degree);\r\n         IFCAnyHandleUtil.SetAttribute(bSplineCurve, \"ControlPointsList\", controlPointsList);\r\n         IFCAnyHandleUtil.SetAttribute(bSplineCurve, \"CurveForm\", curveForm);\r\n         IFCAnyHandleUtil.SetAttribute(bSplineCurve, \"ClosedCurve\", closedCurve);\r\n         IFCAnyHandleUtil.SetAttribute(bSplineCurve, \"SelfIntersect\", selfIntersect);\r\n      }\r\n      #endregion\r\n\r\n      #region public creation methods goes here\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcWall and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID to use to label the wall.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The local placement.</param>\r\n      /// <param name=\"representation\">The representation object assigned to the wall.</param>\r\n      /// <param name=\"elementTag\">The tag for the identifier of the element.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateWall(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string preDefinedType)\r\n      {\r\n         IFCAnyHandle wall = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcWall, element);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            SetSpecificEnumAttr(wall, \"PredefinedType\", preDefinedType, \"IfcWallType\");\r\n\r\n         SetElement(wall, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return wall;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcWallStandardCase and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID to use to label the wall.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The local placement.</param>\r\n      /// <param name=\"elementTag\">The tag for the identifier of the element.</param>\r\n      /// <param name=\"representation\">The representation object assigned to the wall.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateWallStandardCase(IFCFile file, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string preDefinedType)\r\n      {\r\n         IFCAnyHandle wallStandardCase;\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            wallStandardCase = CreateInstance(file, IFCEntityType.IfcWall, element);   // We export IfcWall only beginning IFC4\r\n            SetSpecificEnumAttr(wallStandardCase, \"PredefinedType\", preDefinedType, \"IfcWallType\");\r\n         }\r\n         else\r\n            wallStandardCase = CreateInstance(file, IFCEntityType.IfcWallStandardCase, element);\r\n\r\n         SetElement(wallStandardCase, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n\r\n         return wallStandardCase;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcCurtainWallType and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID to use to label the wall.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"applicableOccurrence\">The attribute optionally defines the data type of the occurrence object.</param>\r\n      /// <param name=\"propertySets\">The property set(s) associated with the type.</param>\r\n      /// <param name=\"representationMaps\">The mapped geometries associated with the type.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <param name=\"elementType\">The type name.</param>\r\n      /// <param name=\"predefinedType\">The predefined types.</param>\r\n      /// <returns>The handle.</returns>\r\n      /// <remarks>IfcCurtainWallType is new to IFC2x3; we will use IfcTypeObject for IFC2x2.</remarks>\r\n      public static IFCAnyHandle CreateCurtainWallType(IFCFile file, ElementType revitType,\r\n         string guid, HashSet<IFCAnyHandle> propertySets,\r\n         List<IFCAnyHandle> representationMaps, string elementTag, string predefinedType)\r\n      {\r\n         IFCAnyHandle curtainWallType = null;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2)\r\n         {\r\n            curtainWallType = CreateInstance(file, IFCEntityType.IfcTypeObject, revitType);\r\n            SetElementType(curtainWallType, revitType, ref predefinedType, guid, propertySets, null);\r\n         }\r\n         else\r\n         {\r\n            curtainWallType = CreateInstance(file, IFCEntityType.IfcCurtainWallType, revitType);\r\n            SetElementType(curtainWallType, revitType, ref predefinedType, guid, propertySets, representationMaps);\r\n            SetSpecificEnumAttr(curtainWallType, \"PredefinedType\", predefinedType, \"IfcCurtainWallType\");\r\n         }\r\n\r\n         return curtainWallType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcProductDefinitionShape and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"representations\">The collection of representations assigned to the shape.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateProductDefinitionShape(IFCFile file, string name, string description, IList<IFCAnyHandle> representations)\r\n      {\r\n         IFCAnyHandle productDefinitionShape = CreateInstance(file, IFCEntityType.IfcProductDefinitionShape, null);\r\n         SetProductRepresentation(productDefinitionShape, name, description, representations);\r\n         return productDefinitionShape;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcRelaxation and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"relaxationValue\">Time dependent loss of stress.</param>\r\n      /// <param name=\"initialStress\">Stress at the beginning.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRelaxation(IFCFile file, double relaxationValue, double initialStress)\r\n      {\r\n         IFCAnyHandle relaxation = CreateInstance(file, IFCEntityType.IfcRelaxation, null);\r\n         IFCAnyHandleUtil.SetAttribute(relaxation, \"RelaxationValue\", relaxationValue);\r\n         IFCAnyHandleUtil.SetAttribute(relaxation, \"InitialStress\", initialStress);\r\n\r\n         return relaxation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcBoundingBox and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"corner\">The lower left corner of the bounding box.</param>\r\n      /// <param name=\"xDim\">The positive length in the X-direction.</param>\r\n      /// <param name=\"yDim\">The positive length in the Y-direction.</param>\r\n      /// <param name=\"zDim\">The positive length in the Z-direction.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateBoundingBox(IFCFile file, IFCAnyHandle corner, double xDim, double yDim, double zDim)\r\n      {\r\n         if (xDim < MathUtil.Eps())\r\n            throw new ArgumentOutOfRangeException(\"xDim\", \"The x-Value of the bounding box must be positive.\");\r\n         if (yDim < MathUtil.Eps())\r\n            throw new ArgumentOutOfRangeException(\"yDim\", \"The y-Value of the bounding box must be positive.\");\r\n         if (zDim < MathUtil.Eps())\r\n            throw new ArgumentOutOfRangeException(\"zDim\", \"The z-Value of the bounding box must be positive.\");\r\n\r\n         IFCAnyHandle boundingBox = CreateInstance(file, IFCEntityType.IfcBoundingBox, null);\r\n         boundingBox.SetAttribute(\"Corner\", corner);\r\n         boundingBox.SetAttribute(\"XDim\", xDim);\r\n         boundingBox.SetAttribute(\"YDim\", yDim);\r\n         boundingBox.SetAttribute(\"ZDim\", zDim);\r\n         return boundingBox;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcConnectedFaceSet and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"faces\">The collection of faces.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateConnectedFaceSet(IFCFile file, HashSet<IFCAnyHandle> faces)\r\n      {\r\n         IFCAnyHandle connectedFaceSet = CreateInstance(file, IFCEntityType.IfcConnectedFaceSet, null);\r\n         SetConnectedFaceSet(connectedFaceSet, faces);\r\n         return connectedFaceSet;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcClosedShell and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"faces\">The collection of faces.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateClosedShell(IFCFile file, HashSet<IFCAnyHandle> faces)\r\n      {\r\n         IFCAnyHandle closedShell = CreateInstance(file, IFCEntityType.IfcClosedShell, null);\r\n         SetConnectedFaceSet(closedShell, faces);\r\n         return closedShell;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcOpenShell and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"faces\">The collection of faces.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateOpenShell(IFCFile file, HashSet<IFCAnyHandle> faces)\r\n      {\r\n         IFCAnyHandle openShell = CreateInstance(file, IFCEntityType.IfcOpenShell, null);\r\n         SetConnectedFaceSet(openShell, faces);\r\n         return openShell;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcFaceBasedSurfaceModel and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"faces\">The collection of faces.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateFaceBasedSurfaceModel(IFCFile file, HashSet<IFCAnyHandle> faces)\r\n      {\r\n         IFCAnyHandle faceBasedSurfaceModel = CreateInstance(file, IFCEntityType.IfcFaceBasedSurfaceModel, null);\r\n         IFCAnyHandleUtil.SetAttribute(faceBasedSurfaceModel, \"FbsmFaces\", faces);\r\n         return faceBasedSurfaceModel;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcCovering, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID for the entity.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The local placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity, in the IfcProductRepresentation.</param>\r\n      /// <param name=\"elementTag\">The tag for the identifier of the element.</param>\r\n      /// <param name=\"coveringType\">The covering type.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateCovering(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string coveringType)\r\n      {\r\n         string validatedType = coveringType;\r\n         //coveringType can be optional\r\n\r\n         IFCAnyHandle covering = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcCovering, element);\r\n         SetSpecificEnumAttr(covering, \"PredefinedType\", coveringType, \"IfcCoveringType\");\r\n\r\n         SetElement(covering, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return covering;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcFooting, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity, in the IfcProductRepresentation.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <param name=\"predefinedType\">The footing type.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateFooting(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string predefinedType)\r\n      {\r\n         string validatedType = predefinedType;\r\n\r\n         IFCAnyHandle footing = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcFooting, element);\r\n         SetSpecificEnumAttr(footing, \"PredefinedType\", predefinedType, \"IfcFootingType\");\r\n\r\n         SetElement(footing, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return footing;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcSlab and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The geometric representation of the entity, in the IfcProductRepresentation.</param>\r\n      /// <param name=\"representation\"></param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <param name=\"predefinedType\">The slab type.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateSlab(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string predefinedType)\r\n      {\r\n         IFCAnyHandle slab = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcSlab, element);\r\n         SetSpecificEnumAttr(slab, \"PredefinedType\", predefinedType, \"IfcSlabType\");\r\n\r\n         SetElement(slab, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return slab;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcCurtainWall and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID for the entity.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The local placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity, in the IfcProductRepresentation.</param>\r\n      /// <returns>The handle.</returns>\r\n      /// <param name=\"elementTag\">The tag for the identifier of the element.</param>\r\n      public static IFCAnyHandle CreateCurtainWall(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string predefinedType)\r\n      {\r\n         IFCAnyHandle curtainWall = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcCurtainWall, element);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            SetSpecificEnumAttr(curtainWall, \"PredefinedType\", predefinedType, \"IfcCurtainWallType\");\r\n\r\n         SetElement(curtainWall, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return curtainWall;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcPile and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID for the entity.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The local placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity, in the IfcProductRepresentation.</param>\r\n      /// <param name=\"elementTag\">The tag for the identifier of the element.</param>\r\n      /// <param name=\"preDefinedType\">The pile type.</param>\r\n      /// <param name=\"constructionType\">The optional material for the construction of the pile.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePile(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string preDefinedType, IFCPileConstructionEnum? constructionType)\r\n      {\r\n         string validatedType = preDefinedType;\r\n\r\n         IFCAnyHandle pile = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcPile, element);\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            SetSpecificEnumAttr(pile, \"PredefinedType\", preDefinedType, \"IfcPileType\");\r\n            SetSpecificEnumAttr(pile, \"ConstructionType\", constructionType.ToString(), \"IfcPileConstruction\");\r\n         }\r\n         else\r\n         {\r\n            SetSpecificEnumAttr(pile, \"PredefinedType\", preDefinedType, \"IfcPileType\");\r\n            SetSpecificEnumAttr(pile, \"ConstructionType\", constructionType.ToString(), \"IFCPileConstructionEnum\");\r\n         }\r\n\r\n         SetElement(pile, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return pile;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcRailing and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID for the entity.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The local placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity, in the IfcProductRepresentation.</param>\r\n      /// <param name=\"elementTag\">The tag for the identifier of the element.</param>\r\n      /// <param name=\"predefinedType\">The railing type.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRailing(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string predefinedType)\r\n      {\r\n         IFCAnyHandle railing = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcRailing, element);\r\n         SetSpecificEnumAttr(railing, \"PredefinedType\", predefinedType, \"IfcRailingType\");\r\n\r\n         SetElement(railing, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return railing;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcRamp and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID for the entity.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The local placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity, in the IfcProductRepresentation.</param>\r\n      /// <param name=\"elementTag\">The tag for the identifier of the element.</param>\r\n      /// <param name=\"shapeType\">The ramp type.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRamp(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string shapeType)\r\n      {\r\n         IFCAnyHandle ramp = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcRamp, element);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            SetSpecificEnumAttr(ramp, \"PredefinedType\", shapeType, \"IfcRampType\");\r\n         }\r\n         else\r\n         {\r\n            SetSpecificEnumAttr(ramp, \"ShapeType\", shapeType, \"IfcRampType\");\r\n         }\r\n\r\n         SetElement(ramp, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return ramp;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcRoof and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID for the entity.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The local placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity, in the IfcProductRepresentation.</param>\r\n      /// <param name=\"elementTag\">The tag for the identifier of the element.</param>\r\n      /// <param name=\"shapeType\">The roof type.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRoof(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string shapeType)\r\n      {\r\n         string validatedType = shapeType;\r\n\r\n         IFCAnyHandle roof = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcRoof, element);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            SetSpecificEnumAttr(roof, \"PredefinedType\", shapeType, \"IfcRoofType\");\r\n         }\r\n         else\r\n         {\r\n            SetSpecificEnumAttr(roof, \"ShapeType\", shapeType, \"IfcRoofType\");\r\n         }\r\n         SetElement(roof, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return roof;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcStair and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID for the entity.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The local placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity, in the IfcProductRepresentation.</param>\r\n      /// <param name=\"elementTag\">The tag for the identifier of the element.</param>\r\n      /// <param name=\"shapeType\">The stair type.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateStair(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string shapeType)\r\n      {\r\n         IFCAnyHandle stair = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcStair, element);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            SetSpecificEnumAttr(stair, \"PredefinedType\", shapeType, \"IfcStairType\");\r\n         }\r\n         else\r\n         {\r\n            SetSpecificEnumAttr(stair, \"ShapeType\", shapeType, \"IfcStairType\");\r\n         }\r\n         SetElement(stair, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return stair;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcStairFlight and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID for the entity.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The local placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity, in the IfcProductRepresentation.</param>\r\n      /// <param name=\"elementTag\">The tag for the identifier of the element.</param>\r\n      /// <param name=\"shapeType\">The stair type.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateStairFlight(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation,\r\n          int? numberOfRiser, int? numberOfTreads, double? riserHeight, double? treadLength, string preDefinedType)\r\n      {\r\n         IFCAnyHandle stairFlight = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcStairFlight, element);\r\n         SetElement(stairFlight, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n\r\n         // Deprecated for IFC4.\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            IFCAnyHandleUtil.SetAttribute(stairFlight, \"NumberOfRiser\", numberOfRiser);\r\n            IFCAnyHandleUtil.SetAttribute(stairFlight, \"NumberOfTreads\", numberOfTreads);\r\n            IFCAnyHandleUtil.SetAttribute(stairFlight, \"RiserHeight\", riserHeight);\r\n            IFCAnyHandleUtil.SetAttribute(stairFlight, \"TreadLength\", treadLength);\r\n         }\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            SetSpecificEnumAttr(stairFlight, \"PredefinedType\", preDefinedType, \"IfcStairFlightType\");\r\n         }\r\n\r\n         return stairFlight;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcRampFlight and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID for the entity.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The local placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity, in the IfcProductRepresentation.</param>\r\n      /// <param name=\"elementTag\">The tag for the identifier of the element.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRampFlight(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string preDefinedType)\r\n      {\r\n         IFCAnyHandle rampFlight = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcRampFlight, element);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            SetSpecificEnumAttr(rampFlight, \"PredefinedType\", preDefinedType, \"IfcRampFlightType\");\r\n         }\r\n\r\n         SetElement(rampFlight, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return rampFlight;\r\n      }\r\n\r\n      private static void SetReinforcingElement(IFCAnyHandle reinforcingElement, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string steelGrade)\r\n      {\r\n         SetElement(reinforcingElement, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n\r\n         //SteelGrade attribute has been deprecated in IFC4\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            IFCAnyHandleUtil.SetAttribute(reinforcingElement, \"SteelGrade\", steelGrade);\r\n      }\r\n\r\n      private static void SetSurfaceStyleShading(IFCAnyHandle surfaceStyleRendering, IFCAnyHandle surfaceColour)\r\n      {\r\n         surfaceStyleRendering.SetAttribute(\"SurfaceColour\", surfaceColour);\r\n      }\r\n\r\n      private static void SetMaterialProperties(IFCAnyHandle materialProperties, IFCAnyHandle material)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(materialProperties, \"Material\", material);\r\n      }\r\n\r\n      private static void SetExtendedProperties(IFCAnyHandle extendedProperties, string name, string description, ISet<IFCAnyHandle> properties)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(extendedProperties, \"Name\", name);\r\n         IFCAnyHandleUtil.SetAttribute(extendedProperties, \"Description\", description);\r\n         IFCAnyHandleUtil.SetAttribute(extendedProperties, \"Properties\", properties);\r\n      }\r\n\r\n      private static void SetBooleanResult(IFCAnyHandle booleanResultHnd, IFCBooleanOperator clipOperator,\r\n          IFCAnyHandle firstOperand, IFCAnyHandle secondOperand)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(booleanResultHnd, \"Operator\", clipOperator);\r\n         IFCAnyHandleUtil.SetAttribute(booleanResultHnd, \"FirstOperand\", firstOperand);\r\n         IFCAnyHandleUtil.SetAttribute(booleanResultHnd, \"SecondOperand\", secondOperand);\r\n      }\r\n\r\n      private static void SetElementarySurface(IFCAnyHandle elementarySurfaceHnd, IFCAnyHandle position)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(elementarySurfaceHnd, \"Position\", position);\r\n      }\r\n\r\n      private static void SetHalfSpaceSolid(IFCAnyHandle halfSpaceSolidHnd, IFCAnyHandle baseSurface, bool agreementFlag)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(halfSpaceSolidHnd, \"BaseSurface\", baseSurface);\r\n         IFCAnyHandleUtil.SetAttribute(halfSpaceSolidHnd, \"AgreementFlag\", agreementFlag);\r\n      }\r\n\r\n      private static void SetConic(IFCAnyHandle conic, IFCAnyHandle position)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(conic, \"Position\", position);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcReinforcingBar and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID for the entity.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The local placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity, in the IfcProductRepresentation.</param>\r\n      /// <param name=\"elementTag\">The tag for the identifier of the element.</param>\r\n      /// <param name=\"steelGrade\">The steel grade.</param>\r\n      /// <param name=\"longitudinalBarNominalDiameter\">The nominal diameter.</param>\r\n      /// <param name=\"longitudinalBarCrossSectionArea\">The cross section area.</param>\r\n      /// <param name=\"barLength\">The bar length (optional).</param>\r\n      /// <param name=\"role\">The role.</param>\r\n      /// <param name=\"surface\">The surface (optional).</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateReinforcingBar(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string steelGrade,\r\n          double longitudinalBarNominalDiameter, double longitudinalBarCrossSectionArea,\r\n          double? barLength, IFCReinforcingBarRole role, IFCReinforcingBarSurface? surface)\r\n      {\r\n         string predefinedTypeAttribName = !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 ? \"PredefinedType\" : \"BarRole\";\r\n\r\n         IFCAnyHandle reinforcingBar = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcReinforcingBar, element);\r\n         SetReinforcingElement(reinforcingBar, element, guid, ownerHistory, objectPlacement,\r\n             representation, steelGrade);\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            IFCAnyHandleUtil.SetAttribute(reinforcingBar, \"NominalDiameter\", longitudinalBarNominalDiameter);\r\n            IFCAnyHandleUtil.SetAttribute(reinforcingBar, \"CrossSectionArea\", longitudinalBarCrossSectionArea);\r\n            if (barLength != null)\r\n               IFCAnyHandleUtil.SetAttribute(reinforcingBar, \"BarLength\", barLength);\r\n            IFCAnyHandleUtil.SetAttribute(reinforcingBar, predefinedTypeAttribName, role);\r\n            if (surface != null)\r\n               IFCAnyHandleUtil.SetAttribute(reinforcingBar, \"BarSurface\", surface);\r\n         }\r\n\r\n         return reinforcingBar;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcReinforcingBar and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID for the entity.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The local placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity, in the IfcProductRepresentation.</param>\r\n      /// <param name=\"elementTag\">The tag for the identifier of the element.</param>\r\n      /// <param name=\"steelGrade\">The steel grade.</param>\r\n      /// <param name=\"longitudinalBarNominalDiameter\">The nominal diameter.</param>\r\n      /// <param name=\"longitudinalBarCrossSectionArea\">The cross section area.</param>\r\n      /// <param name=\"barLength\">The bar length (optional).</param>\r\n      /// <param name=\"role\">The role.</param>\r\n      /// <param name=\"surface\">The surface (optional).</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateReinforcingMesh(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string steelGrade,\r\n          double? meshLength, double? meshWidth,\r\n          double longitudinalBarNominalDiameter, double transverseBarNominalDiameter,\r\n          double longitudinalBarCrossSectionArea, double transverseBarCrossSectionArea,\r\n          double longitudinalBarSpacing, double transverseBarSpacing)\r\n      {\r\n         IFCAnyHandle reinforcingMesh = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcReinforcingMesh, element);\r\n         SetReinforcingElement(reinforcingMesh, element, guid, ownerHistory, objectPlacement, representation, steelGrade);\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            // All of these have been deprecated in IFC4, and should be included in \r\n            // Pset_ReinforcingMeshCommon instead.\r\n            if (meshLength != null)\r\n               IFCAnyHandleUtil.SetAttribute(reinforcingMesh, \"MeshLength\", meshLength);\r\n            if (meshWidth != null)\r\n               IFCAnyHandleUtil.SetAttribute(reinforcingMesh, \"MeshWidth\", meshWidth);\r\n\r\n            IFCAnyHandleUtil.SetAttribute(reinforcingMesh, \"LongitudinalBarNominalDiameter\", longitudinalBarNominalDiameter);\r\n            IFCAnyHandleUtil.SetAttribute(reinforcingMesh, \"TransverseBarNominalDiameter\", transverseBarNominalDiameter);\r\n            IFCAnyHandleUtil.SetAttribute(reinforcingMesh, \"LongitudinalBarCrossSectionArea\", longitudinalBarCrossSectionArea);\r\n            IFCAnyHandleUtil.SetAttribute(reinforcingMesh, \"TransverseBarCrossSectionArea\", transverseBarCrossSectionArea);\r\n            IFCAnyHandleUtil.SetAttribute(reinforcingMesh, \"LongitudinalBarSpacing\", longitudinalBarSpacing);\r\n            IFCAnyHandleUtil.SetAttribute(reinforcingMesh, \"TransverseBarSpacing\", transverseBarSpacing);\r\n         }\r\n\r\n         return reinforcingMesh;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcRelContainedInSpatialStructure, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID for the entity.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatingObject\">The element to which the structure contributes.</param>\r\n      /// <param name=\"relatedObjects\">The elements that make up the structure.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRelAggregates(IFCFile file, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, IFCAnyHandle relatingObject, HashSet<IFCAnyHandle> relatedObjects)\r\n      {\r\n         IFCAnyHandle relAggregates = CreateInstance(file, IFCEntityType.IfcRelAggregates, null);\r\n         SetRelDecomposes(relAggregates, guid, ownerHistory, name, description, relatingObject, relatedObjects);\r\n         return relAggregates;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcLocalPlacement, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"placementRelTo\">The parent placement.</param>\r\n      /// <param name=\"relativePlacement\">The local offset to the parent placement.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateLocalPlacement(IFCFile file, IFCAnyHandle placementRelTo, IFCAnyHandle relativePlacement)\r\n      {\r\n         IFCAnyHandle localPlacement = CreateInstance(file, IFCEntityType.IfcLocalPlacement, null);\r\n         IFCAnyHandleUtil.SetAttribute(localPlacement, \"PlacementRelTo\", placementRelTo);\r\n         IFCAnyHandleUtil.SetAttribute(localPlacement, \"RelativePlacement\", relativePlacement);\r\n         return localPlacement;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcProject, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"longName\">The long name.</param>\r\n      /// <param name=\"phase\">Current project phase, open to interpretation for all project partner.</param>\r\n      /// <param name=\"representationContexts\">Context of the representations used within the project.</param>\r\n      /// <param name=\"units\">Units globally assigned to measure types used within the context of this project.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateProject(ExporterIFC exporterIFC, ProjectInfo projectInfo, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, string longName, string phase,\r\n          HashSet<IFCAnyHandle> representationContexts, IFCAnyHandle units)\r\n      {\r\n         IFCAnyHandle project = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcProject, null);\r\n         IFCAnyHandleUtil.SetAttribute(project, \"LongName\", longName);\r\n         IFCAnyHandleUtil.SetAttribute(project, \"Phase\", phase);\r\n         IFCAnyHandleUtil.SetAttribute(project, \"RepresentationContexts\", representationContexts);\r\n         IFCAnyHandleUtil.SetAttribute(project, \"UnitsInContext\", units);\r\n         //SetObject(exporterIFC, project, projectInfo, guid, ownerHistory);\r\n         //setRootName(project, name);\r\n         //setRootDescription(project, description);\r\n         SetObject(project, projectInfo, guid, ownerHistory, name, description, null);\r\n         return project;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IfcProjectedCRS\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"name\">name</param>\r\n      /// <param name=\"description\">description</param>\r\n      /// <param name=\"geodeticDatum\">the Geodetic Datum</param>\r\n      /// <param name=\"verticalDatum\">the Verical Datum</param>\r\n      /// <param name=\"mapProjection\">Map Projection</param>\r\n      /// <param name=\"mapZone\">Map Zone</param>\r\n      /// <param name=\"mapUnit\">Map Unit</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateProjectedCRS(IFCFile file, string name, string description, string geodeticDatum,\r\n         string verticalDatum, string mapProjection, string mapZone, IFCAnyHandle mapUnit)\r\n      {\r\n         IFCAnyHandle projectedCRS = CreateInstance(file, IFCEntityType.IfcProjectedCRS, null);\r\n         IFCAnyHandleUtil.SetAttribute(projectedCRS, \"Name\", name);\r\n         if (!string.IsNullOrEmpty(description))\r\n            IFCAnyHandleUtil.SetAttribute(projectedCRS, \"Description\", description);\r\n         if (!string.IsNullOrEmpty(geodeticDatum))\r\n            IFCAnyHandleUtil.SetAttribute(projectedCRS, \"GeodeticDatum\", geodeticDatum);\r\n         if (!string.IsNullOrEmpty(verticalDatum))\r\n            IFCAnyHandleUtil.SetAttribute(projectedCRS, \"VerticalDatum\", verticalDatum);\r\n         if (!string.IsNullOrEmpty(mapProjection))\r\n            IFCAnyHandleUtil.SetAttribute(projectedCRS, \"MapProjection\", mapProjection);\r\n         if (!string.IsNullOrEmpty(mapZone))\r\n            IFCAnyHandleUtil.SetAttribute(projectedCRS, \"MapZone\", mapZone);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(mapUnit))\r\n            IFCAnyHandleUtil.SetAttribute(projectedCRS, \"MapUnit\", mapUnit);\r\n\r\n         return projectedCRS;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcBuilding, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The representation object.</param>\r\n      /// <param name=\"longName\">The long name.</param>\r\n      /// <param name=\"compositionType\">The composition type.</param>\r\n      /// <param name=\"elevationOfRefHeight\">Elevation above sea level of the reference height used for all storey elevation measures, equals to height 0.0.</param>\r\n      /// <param name=\"elevationOfTerrain\">Elevation above the minimal terrain level around the foot print of the building, given in elevation above sea level.</param>\r\n      /// <param name=\"buildingAddress\">Address given to the building for postal purposes.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateBuilding(ExporterIFC exporterIFC, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, string objectType, IFCAnyHandle objectPlacement, IFCAnyHandle representation,\r\n          string longName, IFCElementComposition compositionType, double? elevationOfRefHeight, double? elevationOfTerrain, IFCAnyHandle buildingAddress)\r\n      {\r\n         IFCAnyHandle building = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcBuilding, null);\r\n         IFCAnyHandleUtil.SetAttribute(building, \"ElevationOfRefHeight\", elevationOfRefHeight);\r\n         IFCAnyHandleUtil.SetAttribute(building, \"ElevationOfTerrain\", elevationOfTerrain);\r\n         IFCAnyHandleUtil.SetAttribute(building, \"BuildingAddress\", buildingAddress);\r\n         SetFacility(building, null, guid, ownerHistory, name, description, objectType, objectPlacement, representation, longName, compositionType);\r\n         return building;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcBridge, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The representation object.</param>\r\n      /// <param name=\"longName\">The long name.</param>\r\n      /// <param name=\"compositionType\">The composition type.</param>\r\n      /// <param name=\"predefinedType\">The predefined type of the bridge.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateBridge(ExporterIFC exporterIFC, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, string objectType, IFCAnyHandle objectPlacement, IFCAnyHandle representation,\r\n          string longName, IFCElementComposition compositionType, string predefinedType)\r\n      {\r\n         IFCAnyHandle bridge = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcBridge, null);\r\n         IFCAnyHandleUtil.SetAttribute(bridge, \"PredefinedType\", predefinedType);\r\n         SetFacility(bridge, null, guid, ownerHistory, name, description, objectType, objectPlacement, representation, longName, compositionType);\r\n         return bridge;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcRoad, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The representation object.</param>\r\n      /// <param name=\"longName\">The long name.</param>\r\n      /// <param name=\"compositionType\">The composition type.</param>\r\n      /// <param name=\"predefinedType\">The predefined type of the bridge.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRoad(ExporterIFC exporterIFC, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, string objectType, IFCAnyHandle objectPlacement, IFCAnyHandle representation,\r\n          string longName, IFCElementComposition compositionType, string predefinedType)\r\n      {\r\n         IFCAnyHandle road = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcRoad, null);\r\n         IFCAnyHandleUtil.SetAttribute(road, \"PredefinedType\", predefinedType);\r\n         SetFacility(road, null, guid, ownerHistory, name, description, objectType, objectPlacement, representation, longName, compositionType);\r\n         return road;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcRailway, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The representation object.</param>\r\n      /// <param name=\"longName\">The long name.</param>\r\n      /// <param name=\"compositionType\">The composition type.</param>\r\n      /// <param name=\"predefinedType\">The predefined type of the bridge.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRailway(ExporterIFC exporterIFC, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, string objectType, IFCAnyHandle objectPlacement, IFCAnyHandle representation,\r\n          string longName, IFCElementComposition compositionType, string predefinedType)\r\n      {\r\n         IFCAnyHandle railway = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcRailway, null);\r\n         IFCAnyHandleUtil.SetAttribute(railway, \"PredefinedType\", predefinedType);\r\n         SetFacility(railway, null, guid, ownerHistory, name, description, objectType, objectPlacement, representation, longName, compositionType);\r\n         return railway;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcRailway, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The representation object.</param>\r\n      /// <param name=\"longName\">The long name.</param>\r\n      /// <param name=\"compositionType\">The composition type.</param>\r\n      /// <param name=\"predefinedType\">The predefined type of the bridge.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateMarineFacility(ExporterIFC exporterIFC, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, string objectType, IFCAnyHandle objectPlacement, IFCAnyHandle representation,\r\n          string longName, IFCElementComposition compositionType, string predefinedType)\r\n      {\r\n         IFCAnyHandle marineFacility = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcMarineFacility, null);\r\n         IFCAnyHandleUtil.SetAttribute(marineFacility, \"PredefinedType\", predefinedType);\r\n         SetFacility(marineFacility, null, guid, ownerHistory, name, description, objectType, objectPlacement, representation, longName, compositionType);\r\n         return marineFacility;\r\n      }\r\n      \r\n      /// <summary>\r\n       /// Creates a handle representing an IfcBuildingStorey and assigns it to the file.\r\n       /// </summary>\r\n       /// <param name=\"file\">The file.</param>\r\n       /// <param name=\"guid\">The GUID.</param>\r\n       /// <param name=\"ownerHistory\">The owner history.</param>\r\n       /// <param name=\"name\">The name.</param>\r\n       /// <param name=\"description\">The description.</param>\r\n       /// <param name=\"objectType\">The object type.</param>\r\n       /// <param name=\"objectPlacement\">The object placement.</param>\r\n       /// <param name=\"representation\">The representation object.</param>\r\n       /// <param name=\"longName\">The long name.</param>\r\n       /// <param name=\"compositionType\">The composition type.</param>\r\n       /// <param name=\"elevation\">The elevation with flooring measurement.</param>\r\n       /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateBuildingStorey(ExporterIFC exporterIFC, Level level, IFCAnyHandle ownerHistory, string objectType, IFCAnyHandle objectPlacement,\r\n          IFCElementComposition compositionType, double elevation)\r\n      {\r\n         IFCAnyHandle buildingStorey = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcBuildingStorey, null);\r\n         string guid = GUIDUtil.GetLevelGUID(level);\r\n         string name = NamingUtil.GetNameOverride(buildingStorey, level, level.Name);\r\n         string description = NamingUtil.GetDescriptionOverride(level, null);\r\n         string longName = NamingUtil.GetLongNameOverride(level, level.Name);\r\n\r\n         IFCAnyHandleUtil.SetAttribute(buildingStorey, \"Elevation\", elevation);\r\n         SetFacilityPart(buildingStorey, level, guid, ownerHistory, name, description, objectType, objectPlacement, null, longName, compositionType);\r\n         return buildingStorey;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcMarinePart and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The representation object.</param>\r\n      /// <param name=\"longName\">The long name.</param>\r\n      /// <param name=\"compositionType\">The composition type.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateMarinePart(ExporterIFC exporterIFC, Level level, IFCAnyHandle ownerHistory, string objectType, IFCAnyHandle objectPlacement,\r\n          IFCElementComposition compositionType)\r\n      {\r\n         IFCAnyHandle marinePart = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcMarinePart, null);\r\n         string guid = GUIDUtil.GetLevelGUID(level);\r\n         string name = NamingUtil.GetNameOverride(marinePart, level, level.Name);\r\n         string description = NamingUtil.GetDescriptionOverride(level, null);\r\n         string longName = NamingUtil.GetLongNameOverride(level, level.Name);\r\n\r\n         SetFacilityPart(marinePart, level, guid, ownerHistory, name, description, objectType, objectPlacement, null, longName, compositionType);\r\n         return marinePart;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcRoadPart and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The representation object.</param>\r\n      /// <param name=\"longName\">The long name.</param>\r\n      /// <param name=\"compositionType\">The composition type.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRoadPart(ExporterIFC exporterIFC, Level level, IFCAnyHandle ownerHistory, string objectType, IFCAnyHandle objectPlacement,\r\n          IFCElementComposition compositionType)\r\n      {\r\n         IFCAnyHandle roadPart = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcRoadPart, null);\r\n         string guid = GUIDUtil.GetLevelGUID(level);\r\n         string name = NamingUtil.GetNameOverride(roadPart, level, level.Name);\r\n         string description = NamingUtil.GetDescriptionOverride(level, null);\r\n         string longName = NamingUtil.GetLongNameOverride(level, level.Name);\r\n\r\n         SetFacilityPart(roadPart, level, guid, ownerHistory, name, description, objectType, objectPlacement, null, longName, compositionType);\r\n         return roadPart;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcRailwayPart and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The representation object.</param>\r\n      /// <param name=\"longName\">The long name.</param>\r\n      /// <param name=\"compositionType\">The composition type.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRailwayPart(ExporterIFC exporterIFC, Level level, IFCAnyHandle ownerHistory, string objectType, IFCAnyHandle objectPlacement,\r\n          IFCElementComposition compositionType)\r\n      {\r\n         IFCAnyHandle railwayPart = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcRailwayPart, null);\r\n         string guid = GUIDUtil.GetLevelGUID(level);\r\n         string name = NamingUtil.GetNameOverride(railwayPart, level, level.Name);\r\n         string description = NamingUtil.GetDescriptionOverride(level, null);\r\n         string longName = NamingUtil.GetLongNameOverride(level, level.Name);\r\n\r\n         SetFacilityPart(railwayPart, level, guid, ownerHistory, name, description, objectType, objectPlacement, null, longName, compositionType);\r\n         return railwayPart;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcBridgePart and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The representation object.</param>\r\n      /// <param name=\"longName\">The long name.</param>\r\n      /// <param name=\"compositionType\">The composition type.</param>\r\n      /// <param name=\"predefinedType\">The predefined type of the bridge part.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateBridgePart(ExporterIFC exporterIFC, Level level, IFCAnyHandle ownerHistory, string objectType, IFCAnyHandle objectPlacement,\r\n          IFCElementComposition compositionType, string predefinedType)\r\n      {\r\n         IFCAnyHandle bridgePart = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcBridgePart, null);\r\n         string guid = GUIDUtil.GetLevelGUID(level);\r\n         string name = NamingUtil.GetNameOverride(bridgePart, level, level.Name);\r\n         string description = NamingUtil.GetDescriptionOverride(level, null);\r\n         string longName = NamingUtil.GetLongNameOverride(level, level.Name);\r\n\r\n         IFCAnyHandleUtil.SetAttribute(bridgePart, \"PredefinedType\", predefinedType);\r\n         SetFacilityPart(bridgePart, level, guid, ownerHistory, name, description, objectType, objectPlacement, null, longName, compositionType);\r\n         return bridgePart;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcSpace and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The representation object.</param>\r\n      /// <param name=\"longName\">The long name.</param>\r\n      /// <param name=\"compositionType\">The composition type.</param>\r\n      /// <param name=\"internalOrExternal\">Specify if it is an exterior space (i.e. part of the outer space) or an interior space.</param>\r\n      /// <param name=\"predefinedType\">The predefined type of the space (for IFC4+).</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateSpace(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation,\r\n          IFCElementComposition compositionType, IFCInternalOrExternal internalOrExternal, string predefinedType)\r\n      {\r\n         ParameterUtil.GetStringValueFromElement(element, BuiltInParameter.ROOM_NUMBER, \r\n            out string strSpaceNumber);\r\n\r\n         ParameterUtil.GetStringValueFromElement(element, BuiltInParameter.ROOM_NAME,\r\n            out string strSpaceName);\r\n\r\n         ParameterUtil.GetStringValueFromElement(element, BuiltInParameter.ALL_MODEL_INSTANCE_COMMENTS, \r\n            out string strSpaceDesc);\r\n\r\n         IFCAnyHandle space = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcSpace, element);\r\n         string name = NamingUtil.GetNameOverride(space, element, strSpaceNumber);\r\n         string desc = NamingUtil.GetDescriptionOverride(space, element, strSpaceDesc);\r\n         string longName = NamingUtil.GetLongNameOverride(space, element, strSpaceName);\r\n         string objectType = NamingUtil.GetObjectTypeOverride(element, null);\r\n         double? spaceElevationWithFlooring = null;\r\n         if (ParameterUtil.GetDoubleValueFromElement(element, \"IfcElevationWithFlooring\",\r\n            out double elevationWithFlooring) != null)\r\n         {\r\n            spaceElevationWithFlooring = UnitUtil.ScaleLength(elevationWithFlooring);\r\n         }\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            IFCAnyHandleUtil.SetAttribute(space, \"PreDefinedType\", predefinedType);\r\n         }\r\n         else\r\n         {\r\n            // set this attribute only when it is exported to format PRIOR to IFC4.\r\n            // The attribute has been removed/replaced in IFC4 and the property is moved to\r\n            // property set Pset_SpaceCommon.IsExternal\r\n            IFCAnyHandleUtil.SetAttribute(space, \"InteriorOrExteriorSpace\", internalOrExternal);\r\n         }\r\n\r\n         IFCAnyHandleUtil.SetAttribute(space, \"ElevationWithFlooring\", spaceElevationWithFlooring);\r\n         SetSpatialStructureElement(space, element, guid, ownerHistory, name, desc, objectType, objectPlacement, representation, longName, compositionType);\r\n\r\n         return space;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcSpaceType, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"applicableOccurrence\">The attribute optionally defines the data type of the occurrence object.</param>\r\n      /// <param name=\"propertySets\">The property set(s) associated with the type.</param>\r\n      /// <param name=\"representationMaps\">The mapped geometries associated with the type.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <param name=\"elementType\">The type name.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateSpaceType(IFCFile file, ElementType revitType,\r\n         string guid, HashSet<IFCAnyHandle> propertySets,\r\n         IList<IFCAnyHandle> representationMaps, string predefinedType)\r\n      {\r\n         IFCAnyHandle spaceType = CreateInstance(file, IFCEntityType.IfcSpaceType, revitType);\r\n         SetElementType(spaceType, revitType, ref predefinedType, guid, propertySets, representationMaps);\r\n         if (!string.IsNullOrEmpty(predefinedType))\r\n            IFCAnyHandleUtil.SetAttribute(spaceType, \"PredefinedType\", predefinedType, true);\r\n         \r\n         return spaceType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcRelCoversBldgElements, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatingBuildingElement\">The element that is covered by one or more coverings.</param>\r\n      /// <param name=\"relatedCoverings\">The IfcCoverings covering the building element.</param>\r\n      /// <returns>The handle.</returns>\r\n      /// <remarks>This has been deprecated in IFC4, and will redirect to CreateRelAggregates instead.</remarks>\r\n      public static IFCAnyHandle CreateRelCoversBldgElements(IFCFile file, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, IFCAnyHandle relatingBuildingElement, HashSet<IFCAnyHandle> relatedCoverings)\r\n      {\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            return CreateRelAggregates(file, guid, ownerHistory, name, description, relatingBuildingElement, relatedCoverings);\r\n\r\n         IFCAnyHandle relCoversBldgElements = CreateInstance(file, IFCEntityType.IfcRelCoversBldgElements, null);\r\n         IFCAnyHandleUtil.SetAttribute(relCoversBldgElements, \"RelatingBuildingElement\", relatingBuildingElement);\r\n         IFCAnyHandleUtil.SetAttribute(relCoversBldgElements, \"RelatedCoverings\", relatedCoverings);\r\n         SetRelConnects(relCoversBldgElements, guid, ownerHistory, name, description);\r\n         return relCoversBldgElements;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcRelContainedInSpatialStructure, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatedElements\">The elements that make up the structure.</param>\r\n      /// <param name=\"relateingElement\">The element to which the structure contributes.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRelContainedInSpatialStructure(IFCFile file, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, HashSet<IFCAnyHandle> relatedElements, IFCAnyHandle relatingElement)\r\n      {\r\n         IFCAnyHandle relContainedInSpatialStructure = CreateInstance(file, IFCEntityType.IfcRelContainedInSpatialStructure, null);\r\n         IFCAnyHandleUtil.SetAttribute(relContainedInSpatialStructure, \"RelatedElements\", relatedElements);\r\n         IFCAnyHandleUtil.SetAttribute(relContainedInSpatialStructure, \"RelatingStructure\", relatingElement);\r\n         SetRelConnects(relContainedInSpatialStructure, guid, ownerHistory, name, description);\r\n         return relContainedInSpatialStructure;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing a relationship (IfcRelAssociatesMaterial) between a material definition and elements \r\n      /// or element types to which this material definition applies.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatedObjects\">The objects to be related to the material.</param>\r\n      /// <param name=\"relatingMaterial\">The material.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRelAssociatesMaterial(IFCFile file, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, ISet<IFCAnyHandle> relatedObjects, IFCAnyHandle relatingMaterial)\r\n      {\r\n         IFCAnyHandle relAssociatesMaterial = CreateInstance(file, IFCEntityType.IfcRelAssociatesMaterial, null);\r\n         IFCAnyHandleUtil.SetAttribute(relAssociatesMaterial, \"RelatingMaterial\", relatingMaterial);\r\n         SetRelAssociates(relAssociatesMaterial, guid, ownerHistory, name, description, relatedObjects);\r\n         return relAssociatesMaterial;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcRelDefinesByType, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatedObjects\">The objects to be related to a type.</param>\r\n      /// <param name=\"relatingType\">The relating type.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRelDefinesByType(IFCFile file, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, ISet<IFCAnyHandle> relatedObjects, IFCAnyHandle relatingType)\r\n      {\r\n         IFCAnyHandle relDefinesByType = CreateInstance(file, IFCEntityType.IfcRelDefinesByType, null);\r\n         IFCAnyHandleUtil.SetAttribute(relDefinesByType, \"RelatingType\", relatingType);\r\n         SetRelDefines(relDefinesByType, guid, ownerHistory, name, description, relatedObjects);\r\n         return relDefinesByType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcRelConnectsPathElements and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"connectionGeometry\">The geometric shape representation of the connection geometry.</param>\r\n      /// <param name=\"relatingElement\">Reference to a subtype of IfcElement that is connected by the connection relationship in the role of RelatingElement.</param>\r\n      /// <param name=\"relatedElement\">Reference to a subtype of IfcElement that is connected by the connection relationship in the role of RelatedElement.</param>\r\n      /// <param name=\"relatingPriorities\">Priorities for connection.</param>\r\n      /// <param name=\"relatedPriorities\">Priorities for connection.</param>\r\n      /// <param name=\"relatedConnectionType\">The connection type in relation to the path of the RelatingObject.</param>\r\n      /// <param name=\"relatingConnectionType\">The connection type in relation to the path of the RelatingObject.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRelConnectsPathElements(IFCFile file, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, IFCAnyHandle connectionGeometry, IFCAnyHandle relatingElement, IFCAnyHandle relatedElement,\r\n          IList<int> relatingPriorities, IList<int> relatedPriorities, IFCConnectionType relatedConnectionType, IFCConnectionType relatingConnectionType)\r\n      {\r\n         if (relatingPriorities == null)\r\n            throw new ArgumentNullException(\"relatingPriorities\");\r\n         if (relatedPriorities == null)\r\n            throw new ArgumentNullException(\"relatedPriorities\");\r\n\r\n         IFCAnyHandle relConnectsPathElements = CreateInstance(file, IFCEntityType.IfcRelConnectsPathElements, null);\r\n         IFCAnyHandleUtil.SetAttribute(relConnectsPathElements, \"RelatingPriorities\", relatingPriorities);\r\n         IFCAnyHandleUtil.SetAttribute(relConnectsPathElements, \"RelatedPriorities\", relatedPriorities);\r\n         IFCAnyHandleUtil.SetAttribute(relConnectsPathElements, \"RelatedConnectionType\", relatedConnectionType);\r\n         IFCAnyHandleUtil.SetAttribute(relConnectsPathElements, \"RelatingConnectionType\", relatingConnectionType);\r\n         SetRelConnectsElements(relConnectsPathElements, guid, ownerHistory, name, description, connectionGeometry, relatingElement, relatedElement);\r\n         return relConnectsPathElements;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcZone and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"longName\">The long name, valid for IFC4+ schemas.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateZone(IFCFile file, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, string objectType, string longName)\r\n      {\r\n         IFCAnyHandle zone = CreateInstance(file, IFCEntityType.IfcZone, null);\r\n         SetGroup(zone, guid, ownerHistory, name, description, objectType);\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            IFCAnyHandleUtil.SetAttribute(zone, \"LongName\", longName);\r\n\r\n         return zone;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcOccupant and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"theActor\">The actor.</param>\r\n      /// <param name=\"predefinedType\">Predefined occupant types.</param>\r\n      /// <returns></returns>\r\n      public static IFCAnyHandle CreateOccupant(IFCFile file, string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n          string objectType, IFCAnyHandle theActor, IFCOccupantType predefinedType)\r\n      {\r\n         IFCAnyHandle occupant = CreateInstance(file, IFCEntityType.IfcOccupant, null);\r\n         SetActor(occupant, guid, ownerHistory, name, description, objectType, theActor);\r\n         IFCAnyHandleUtil.SetAttribute(occupant, \"PredefinedType\", predefinedType);\r\n\r\n         return occupant;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcRelAssignsToGroup and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatedObjects\">Related objects, which are assigned to a single object.</param>\r\n      /// <param name=\"relatedObjectsType\">Particular type of the assignment relationship.</param>\r\n      /// <param name=\"relatingGroup\">Reference to group that finally contains all assigned group members.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRelAssignsToGroup(IFCFile file, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, ISet<IFCAnyHandle> relatedObjects, IFCObjectType? relatedObjectsType, IFCAnyHandle relatingGroup)\r\n      {\r\n         IFCAnyHandle relAssignsToGroup = CreateInstance(file, IFCEntityType.IfcRelAssignsToGroup, null);\r\n         IFCAnyHandleUtil.SetAttribute(relAssignsToGroup, \"RelatingGroup\", relatingGroup);\r\n         SetRelAssigns(relAssignsToGroup, guid, ownerHistory, name, description, relatedObjects, relatedObjectsType);\r\n         return relAssignsToGroup;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcRelAssignsToActor and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatedObjects\">Related objects, which are assigned to a single object.</param>\r\n      /// <param name=\"relatedObjectsType\">Particular type of the assignment relationship.</param>\r\n      /// <param name=\"relatingActor\">Reference to the information about the actor.</param>\r\n      /// <param name=\"actingRole\">Role of the actor played within the context of the assignment to the object(s).</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRelAssignsToActor(IFCFile file, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, ISet<IFCAnyHandle> relatedObjects, IFCObjectType? relatedObjectsType, IFCAnyHandle relatingActor, IFCAnyHandle actingRole)\r\n      {\r\n         IFCAnyHandle relAssignsToActor = CreateInstance(file, IFCEntityType.IfcRelAssignsToActor, null);\r\n         IFCAnyHandleUtil.SetAttribute(relAssignsToActor, \"RelatingActor\", relatingActor);\r\n         IFCAnyHandleUtil.SetAttribute(relAssignsToActor, \"ActingRole\", actingRole);\r\n         SetRelAssigns(relAssignsToActor, guid, ownerHistory, name, description, relatedObjects, relatedObjectsType);\r\n         return relAssignsToActor;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcRelOccupiesSpaces and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatedObjects\">Related objects, which are assigned to a single object.</param>\r\n      /// <param name=\"relatedObjectsType\">Particular type of the assignment relationship.</param>\r\n      /// <param name=\"relatingActor\">The actor.</param>\r\n      /// <param name=\"actingRole\">The role of the actor.</param>\r\n      /// <returns>The handle.</returns>\r\n      /// <remarks>Note that this has been obsoleted in IFC4, and replaced by IfcRelAssignsToActor.</remarks>\r\n      public static IFCAnyHandle CreateRelOccupiesSpaces(IFCFile file, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, HashSet<IFCAnyHandle> relatedObjects, IFCObjectType? relatedObjectsType,\r\n          IFCAnyHandle relatingActor, IFCAnyHandle actingRole)\r\n      {\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            return CreateRelAssignsToActor(file, guid, ownerHistory, name, description,\r\n                relatedObjects, relatedObjectsType, relatingActor, actingRole);\r\n\r\n         IFCAnyHandle relOccupiesSpaces = CreateInstance(file, IFCEntityType.IfcRelOccupiesSpaces, null);\r\n         SetRelAssignsToActor(relOccupiesSpaces, guid, ownerHistory, name, description, relatedObjects, relatedObjectsType,\r\n             relatingActor, actingRole);\r\n         return relOccupiesSpaces;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcPropertySet and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"hasProperties\">The collection of properties.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePropertySet(IFCFile file, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, ISet<IFCAnyHandle> hasProperties)\r\n      {\r\n         IFCAnyHandle propertySet = CreateInstance(file, IFCEntityType.IfcPropertySet, null);\r\n         IFCAnyHandleUtil.SetAttribute(propertySet, \"HasProperties\", hasProperties);\r\n         SetPropertySetDefinition(propertySet, guid, ownerHistory, name, description);\r\n         return propertySet;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcExtendedMaterialProperties and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <param name=\"extendedProperties\">The collection of properties.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateExtendedMaterialProperties(IFCFile file, IFCAnyHandle material, ISet<IFCAnyHandle> extendedProperties, string description, string name)\r\n      {\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            return null;\r\n         if (name == null)\r\n            throw new ArgumentNullException(\"name\");\r\n\r\n         IFCAnyHandle materialProperties = CreateInstance(file, IFCEntityType.IfcExtendedMaterialProperties, null);\r\n         IFCAnyHandleUtil.SetAttribute(materialProperties, \"ExtendedProperties\", extendedProperties);\r\n         IFCAnyHandleUtil.SetAttribute(materialProperties, \"Name\", name);\r\n         if (!string.IsNullOrEmpty(description))\r\n            IFCAnyHandleUtil.SetAttribute(materialProperties, \"Description\", description);\r\n         SetMaterialProperties(materialProperties, material);\r\n         return materialProperties;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcMaterialProperties and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <param name=\"extendedProperties\">The collection of properties.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateMaterialProperties(IFCFile file, IFCAnyHandle material, ISet<IFCAnyHandle> extendedProperties, string description, string name)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            return null;\r\n\r\n         IFCAnyHandle materialProperties = CreateInstance(file, IFCEntityType.IfcMaterialProperties, null);\r\n         IFCAnyHandleUtil.SetAttribute(materialProperties, \"Material\", material);\r\n         SetExtendedProperties(materialProperties, name, description, extendedProperties);\r\n         return materialProperties;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing a IfcRelDefinesByProperties and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatedObjects\">Related objects, which are assigned to a single object.</param>\r\n      /// <param name=\"relatingPropertyDefinition\">The relating proprety definition.</param>\r\n      /// <returns>The handle.</returns>\r\n      /// <remarks>In IFC4, we are only allowed one relatedObject.</remarks>\r\n      public static IFCAnyHandle CreateRelDefinesByProperties(IFCFile file, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, IFCAnyHandle relatedObject, IFCAnyHandle relatingPropertyDefinition)\r\n      {\r\n         ISet<IFCAnyHandle> relatedObjects = new HashSet<IFCAnyHandle>();\r\n         relatedObjects.Add(relatedObject);\r\n\r\n         return CreateRelDefinesByProperties(file, guid, ownerHistory, name, description, relatedObjects, relatingPropertyDefinition);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing a IfcRelDefinesByProperties and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatedObjects\">Related objects, which are assigned to a single object.</param>\r\n      /// <param name=\"relatingPropertyDefinition\">The relating proprety definition.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRelDefinesByProperties(IFCFile file, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, ISet<IFCAnyHandle> relatedObjects, IFCAnyHandle relatingPropertyDefinition)\r\n      {\r\n         IFCAnyHandle relDefinesByProperties = CreateInstance(file, IFCEntityType.IfcRelDefinesByProperties, null);\r\n         IFCAnyHandleUtil.SetAttribute(relDefinesByProperties, \"RelatingPropertyDefinition\", relatingPropertyDefinition);\r\n         SetRelDefines(relDefinesByProperties, guid, ownerHistory, name, description, relatedObjects);\r\n         return relDefinesByProperties;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcComplexProperty and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"propertyDescription\">The name and description.</param>\r\n      /// <param name=\"usageName\">The name of the property.</param>\r\n      /// <param name=\"hasProperties\">The collection of the component properties.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateComplexProperty(IFCFile file, PropertyDescription propertyDescription, string usageName,\r\n          HashSet<IFCAnyHandle> hasProperties)\r\n      {\r\n         if (usageName == null)\r\n            throw new ArgumentNullException(\"usageName\");\r\n\r\n         IFCAnyHandle complexProperty = CreateInstance(file, IFCEntityType.IfcComplexProperty, null);\r\n         IFCAnyHandleUtil.SetAttribute(complexProperty, \"UsageName\", usageName);\r\n         IFCAnyHandleUtil.SetAttribute(complexProperty, \"HasProperties\", hasProperties);\r\n         SetProperty(complexProperty, propertyDescription);\r\n         return complexProperty;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create ahandle representing a complex quantity and assign it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">The file </param>\r\n      /// <param name=\"name\">The name</param>\r\n      /// <param name=\"description\">the description</param>\r\n      /// <param name=\"hasQuantities\">the complex quantities</param>\r\n      /// <param name=\"discrimination\">the discrimination</param>\r\n      /// <param name=\"quality\">the quality</param>\r\n      /// <param name=\"usage\">the usage</param>\r\n      /// <returns>The handle</returns>\r\n      public static IFCAnyHandle CreatePhysicalComplexQuantity(IFCFile file, string name, string description,\r\n         HashSet<IFCAnyHandle> hasQuantities, string discrimination, string quality, string usage)\r\n      {\r\n         if (discrimination == null)\r\n            throw new ArgumentNullException(\"discrimination\");\r\n\r\n         IFCAnyHandle physicalComplexQuantity = CreateInstance(file, IFCEntityType.IfcPhysicalComplexQuantity, null);\r\n         IFCAnyHandleUtil.SetAttribute(physicalComplexQuantity, \"Name\", name);\r\n         IFCAnyHandleUtil.SetAttribute(physicalComplexQuantity, \"Description\", description);\r\n         IFCAnyHandleUtil.SetAttribute(physicalComplexQuantity, \"HasQuantities\", hasQuantities);\r\n         IFCAnyHandleUtil.SetAttribute(physicalComplexQuantity, \"Discrimination\", discrimination);\r\n         IFCAnyHandleUtil.SetAttribute(physicalComplexQuantity, \"Quality\", quality);\r\n         IFCAnyHandleUtil.SetAttribute(physicalComplexQuantity, \"Usage\", usage);\r\n         return physicalComplexQuantity;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcElementQuantity and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"methodOfMeasurement\">Name of the method of measurement used to calculate the element quantity.</param>\r\n      /// <param name=\"quantities\">The individual quantities for the element.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateElementQuantity(IFCFile file, IFCAnyHandle elemHnd, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, string methodOfMeasurement, HashSet<IFCAnyHandle> quantities)\r\n      {\r\n         IFCAnyHandle elementQuantity = CreateInstance(file, IFCEntityType.IfcElementQuantity, null);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 &&\r\n            string.IsNullOrEmpty(methodOfMeasurement))\r\n         {\r\n            methodOfMeasurement = \"BaseQuantities\";\r\n         }\r\n\r\n         if (!string.IsNullOrEmpty(methodOfMeasurement))\r\n         {\r\n            IFCAnyHandleUtil.SetAttribute(elementQuantity, \"MethodOfMeasurement\", methodOfMeasurement);\r\n         }\r\n\r\n         IFCAnyHandleUtil.SetAttribute(elementQuantity, \"Quantities\", quantities);\r\n         SetPropertySetDefinition(elementQuantity, guid, ownerHistory, name, description);\r\n         ExporterCacheManager.QtoSetCreated.Add((elemHnd, name));\r\n         return elementQuantity;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcOrganization and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"id\">The identifier.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"actorRoles\">Roles played by the organization.</param>\r\n      /// <param name=\"addresses\">Postal and telecom addresses of an organization.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateOrganization(IFCFile file, string id, string name, string description,\r\n          IList<IFCAnyHandle> actorRoles, IList<IFCAnyHandle> addresses)\r\n      {\r\n         string organizationName = name ?? string.Empty;\r\n\r\n         string idAttribName = (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4) ? \"Identifier\" : \"Id\";\r\n\r\n         IFCAnyHandle organization = CreateInstance(file, IFCEntityType.IfcOrganization, null);\r\n         IFCAnyHandleUtil.SetAttribute(organization, idAttribName, id);\r\n         IFCAnyHandleUtil.SetAttribute(organization, \"Name\", organizationName);\r\n         IFCAnyHandleUtil.SetAttribute(organization, \"Description\", description);\r\n         IFCAnyHandleUtil.SetAttribute(organization, \"Roles\", actorRoles);\r\n         IFCAnyHandleUtil.SetAttribute(organization, \"Addresses\", addresses);\r\n         return organization;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcApplication and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"organization\">The organization.</param>\r\n      /// <param name=\"version\">The version.</param>\r\n      /// <param name=\"fullName\">The full name.</param>\r\n      /// <param name=\"identifier\">The identifier.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateApplication(IFCFile file, IFCAnyHandle organization, string version, string fullName, string identifier)\r\n      {\r\n         if (version == null)\r\n            throw new ArgumentNullException(\"version\");\r\n         if (fullName == null)\r\n            throw new ArgumentNullException(\"fullName\");\r\n         if (identifier == null)\r\n            throw new ArgumentNullException(\"identifier\");\r\n\r\n         IFCAnyHandle application = CreateInstance(file, IFCEntityType.IfcApplication, null);\r\n         IFCAnyHandleUtil.SetAttribute(application, \"ApplicationDeveloper\", organization);\r\n         IFCAnyHandleUtil.SetAttribute(application, \"Version\", version);\r\n         IFCAnyHandleUtil.SetAttribute(application, \"ApplicationFullName\", fullName);\r\n         IFCAnyHandleUtil.SetAttribute(application, \"ApplicationIdentifier\", identifier);\r\n         return application;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcDirection and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"directionRatios\">The components in the direction of X axis, of Y axis and of Z axis.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateDirection(IFCFile file, IList<double> directionRatios)\r\n      {\r\n         IFCAnyHandle direction = CreateInstance(file, IFCEntityType.IfcDirection, null);\r\n         IFCAnyHandleUtil.SetAttribute(direction, \"DirectionRatios\", directionRatios);\r\n         return direction;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcGeometricRepresentationContext, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"identifier\">The identifier.</param>\r\n      /// <param name=\"type\">The description of the type of a representation context.</param>\r\n      /// <param name=\"dimension\">The integer dimension count of the coordinate space modeled in a geometric representation context.</param>\r\n      /// <param name=\"precision\">Value of the model precision for geometric models.</param>\r\n      /// <param name=\"worldCoordinateSystem\">Establishment of the engineering coordinate system (often referred to as the world coordinate system in CAD)\r\n      /// for all representation contexts used by the project.</param>\r\n      /// <param name=\"trueNorth\">Direction of the true north relative to the underlying coordinate system.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateGeometricRepresentationContext(IFCFile file, string identifier, string type, int dimension,\r\n          double? precision, IFCAnyHandle worldCoordinateSystem, IFCAnyHandle trueNorth)\r\n      {\r\n         IFCAnyHandle geometricRepresentationContext = CreateInstance(file, IFCEntityType.IfcGeometricRepresentationContext, null);\r\n         SetGeometricRepresentationContext(geometricRepresentationContext, identifier, type, dimension, precision, worldCoordinateSystem,\r\n             trueNorth);\r\n         return geometricRepresentationContext;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcGeometricRepresentationSubContext, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"identifier\">The identifier.</param>\r\n      /// <param name=\"type\">The description of the type of a representation context.</param>\r\n      /// <param name=\"parentContext\">Parent context from which the sub context derives its world coordinate system, precision, space coordinate dimension and true north.</param>\r\n      /// <param name=\"targetScale\">The target plot scale of the representation to which this representation context applies.</param>\r\n      /// <param name=\"targetView\">Target view of the representation to which this representation context applies.</param>\r\n      /// <param name=\"userDefinedTargetView\">User defined target view, this value shall be given, if the targetView is set to UserDefined.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateGeometricRepresentationSubContext(IFCFile file,\r\n          string identifier, string type, IFCAnyHandle parentContext, double? targetScale,\r\n          IFCGeometricProjection targetView, string userDefinedTargetView)\r\n      {\r\n         IFCAnyHandle geometricRepresentationSubContext = CreateInstance(file, IFCEntityType.IfcGeometricRepresentationSubContext, null);\r\n         IFCAnyHandleUtil.SetAttribute(geometricRepresentationSubContext, \"ParentContext\", parentContext);\r\n         IFCAnyHandleUtil.SetAttribute(geometricRepresentationSubContext, \"TargetScale\", targetScale);\r\n         IFCAnyHandleUtil.SetAttribute(geometricRepresentationSubContext, \"TargetView\", targetView);\r\n         IFCAnyHandleUtil.SetAttribute(geometricRepresentationSubContext, \"UserDefinedTargetView\", userDefinedTargetView);\r\n         SetRepresentationContext(geometricRepresentationSubContext, identifier, type);\r\n         return geometricRepresentationSubContext;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcGeometricCurveSet and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"geometryElements\">The collection of curve elements.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateGeometricCurveSet(IFCFile file, HashSet<IFCAnyHandle> geometryElements)\r\n      {\r\n         IFCAnyHandle geometricCurveSet = CreateInstance(file, IFCEntityType.IfcGeometricCurveSet, null);\r\n         SetGeometricSet(geometricCurveSet, geometryElements);\r\n         return geometricCurveSet;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcGeometricSet and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"geometryElements\">The collection of curve elements.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateGeometricSet(IFCFile file, HashSet<IFCAnyHandle> geometryElements)\r\n      {\r\n         IFCAnyHandle geometricSet = CreateInstance(file, IFCEntityType.IfcGeometricSet, null);\r\n         SetGeometricSet(geometricSet, geometryElements);\r\n         return geometricSet;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcPerson, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"identifier\">Identification of the person.</param>\r\n      /// <param name=\"familyName\">The name by which the family identity of the person may be recognized.</param>\r\n      /// <param name=\"givenName\">The name by which a person is known within a family and by which he or she may be familiarly recognized.</param>\r\n      /// <param name=\"middleNames\">Additional names given to a person that enable their identification apart from others\r\n      /// who may have the same or similar family and given names.</param>\r\n      /// <param name=\"prefixTitles\">The word, or group of words, which specify the person's social and/or professional standing and appear before his/her names.</param>\r\n      /// <param name=\"suffixTitles\">The word, or group of words, which specify the person's social and/or professional standing and appear after his/her names.</param>\r\n      /// <param name=\"actorRoles\">Roles played by the person.</param>\r\n      /// <param name=\"addresses\">Postal and telecommunication addresses of a person.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePerson(IFCFile file, string identifier, string familyName, string givenName,\r\n          IList<string> middleNames, IList<string> prefixTitles, IList<string> suffixTitles,\r\n          IList<IFCAnyHandle> actorRoles, IList<IFCAnyHandle> addresses)\r\n      {\r\n         string idAttribName = (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4) ? \"Identifier\" : \"Id\";\r\n\r\n         IFCAnyHandle person = CreateInstance(file, IFCEntityType.IfcPerson, null);\r\n         IFCAnyHandleUtil.SetAttribute(person, idAttribName, identifier);\r\n         IFCAnyHandleUtil.SetAttribute(person, \"FamilyName\", familyName);\r\n         IFCAnyHandleUtil.SetAttribute(person, \"GivenName\", givenName);\r\n         IFCAnyHandleUtil.SetAttribute(person, \"MiddleNames\", middleNames);\r\n         IFCAnyHandleUtil.SetAttribute(person, \"PrefixTitles\", prefixTitles);\r\n         IFCAnyHandleUtil.SetAttribute(person, \"SuffixTitles\", suffixTitles);\r\n         IFCAnyHandleUtil.SetAttribute(person, \"Roles\", actorRoles);\r\n         IFCAnyHandleUtil.SetAttribute(person, \"Addresses\", addresses);\r\n         return person;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcPersonAndOrganization, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"person\">The person who is related to the organization.</param>\r\n      /// <param name=\"organization\">The organization to which the person is related.</param>\r\n      /// <param name=\"actorRoles\">Roles played by the person within the context of an organization.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePersonAndOrganization(IFCFile file, IFCAnyHandle person, IFCAnyHandle organization,\r\n          IList<IFCAnyHandle> actorRoles)\r\n      {\r\n         IFCAnyHandle personAndOrganization = CreateInstance(file, IFCEntityType.IfcPersonAndOrganization, null);\r\n         IFCAnyHandleUtil.SetAttribute(personAndOrganization, \"ThePerson\", person);\r\n         IFCAnyHandleUtil.SetAttribute(personAndOrganization, \"TheOrganization\", organization);\r\n         IFCAnyHandleUtil.SetAttribute(personAndOrganization, \"Roles\", actorRoles);\r\n         return personAndOrganization;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcOwnerHistory, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"owningUser\">Direct reference to the end user who currently \"owns\" this object.</param>\r\n      /// <param name=\"owningApplication\">Direct reference to the application which currently \"Owns\" this object on behalf of the owning user, who uses this application.</param>\r\n      /// <param name=\"state\">Enumeration that defines the current access state of the object.</param>\r\n      /// <param name=\"changeAction\">Enumeration that defines the actions associated with changes made to the object.</param>\r\n      /// <param name=\"lastModifiedDate\">Date and Time at which the last modification occurred.</param>\r\n      /// <param name=\"lastModifyingUser\">User who carried out the last modification.</param>\r\n      /// <param name=\"lastModifyingApplication\">Application used to carry out the last modification.</param>\r\n      /// <param name=\"creationDate\">Time and date of creation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateOwnerHistory(IFCFile file, IFCAnyHandle owningUser, IFCAnyHandle owningApplication,\r\n          IFCState? state, IFCChangeAction changeAction, int? lastModifiedDate, IFCAnyHandle lastModifyingUser,\r\n          IFCAnyHandle lastModifyingApplication, int creationDate)\r\n      {\r\n         IFCAnyHandle ownerHistory = CreateInstance(file, IFCEntityType.IfcOwnerHistory, null);\r\n         IFCAnyHandleUtil.SetAttribute(ownerHistory, \"OwningUser\", owningUser);\r\n         IFCAnyHandleUtil.SetAttribute(ownerHistory, \"OwningApplication\", owningApplication);\r\n         IFCAnyHandleUtil.SetAttribute(ownerHistory, \"State\", state);\r\n         IFCAnyHandleUtil.SetAttribute(ownerHistory, \"ChangeAction\", changeAction);\r\n         IFCAnyHandleUtil.SetAttribute(ownerHistory, \"LastModifiedDate\", lastModifiedDate);\r\n         IFCAnyHandleUtil.SetAttribute(ownerHistory, \"LastModifyingUser\", lastModifyingUser);\r\n         IFCAnyHandleUtil.SetAttribute(ownerHistory, \"LastModifyingApplication\", lastModifyingApplication);\r\n         IFCAnyHandleUtil.SetAttribute(ownerHistory, \"CreationDate\", creationDate);\r\n         return ownerHistory;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcPostalAddress, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"purpose\">Identifies the logical location of the address.</param>\r\n      /// <param name=\"description\">Text that relates the nature of the address.</param>\r\n      /// <param name=\"userDefinedPurpose\">Allows for specification of user specific purpose of the address.</param>\r\n      /// <param name=\"internalLocation\">An organization defined address for internal mail delivery.</param>\r\n      /// <param name=\"addressLines\">The postal address.</param>\r\n      /// <param name=\"postalBox\">An address that is implied by an identifiable mail drop.</param>\r\n      /// <param name=\"town\">The name of a town.</param>\r\n      /// <param name=\"region\">The name of a region.</param>\r\n      /// <param name=\"postalCode\">The code that is used by the country's postal service.</param>\r\n      /// <param name=\"country\">The name of a country.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePostalAddress(IFCFile file, IFCAddressType? purpose, string description, string userDefinedPurpose,\r\n          string internalLocation, IList<string> addressLines, string postalBox, string town, string region,\r\n          string postalCode, string country)\r\n      {\r\n         IFCAnyHandle postalAddress = CreateInstance(file, IFCEntityType.IfcPostalAddress, null);\r\n         IFCAnyHandleUtil.SetAttribute(postalAddress, \"InternalLocation\", internalLocation);\r\n         if ((addressLines?.Count ?? 0) > 0)\r\n            IFCAnyHandleUtil.SetAttribute(postalAddress, \"AddressLines\", addressLines);\r\n         IFCAnyHandleUtil.SetAttribute(postalAddress, \"PostalBox\", postalBox);\r\n         IFCAnyHandleUtil.SetAttribute(postalAddress, \"Town\", town);\r\n         IFCAnyHandleUtil.SetAttribute(postalAddress, \"Region\", region);\r\n         IFCAnyHandleUtil.SetAttribute(postalAddress, \"PostalCode\", postalCode);\r\n         IFCAnyHandleUtil.SetAttribute(postalAddress, \"Country\", country);\r\n         SetAddress(postalAddress, purpose, description, userDefinedPurpose);\r\n         return postalAddress;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcPostalAddress, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"purpose\">Identifies the logical location of the address.</param>\r\n      /// <param name=\"description\">Text that relates the nature of the address.</param>\r\n      /// <param name=\"userDefinedPurpose\">Allows for specification of user specific purpose of the address.</param>\r\n      /// <param name=\"telephoneNumbers\">An optional list of telephone numbers.</param>\r\n      /// <param name=\"facsimileNumbers\">An optional list of fax numbers.</param>\r\n      /// <param name=\"pagerNumber\">An optional pager number.</param>\r\n      /// <param name=\"electronicMailAddresses\">An optional list of e-mail addresses.</param>\r\n      /// <param name=\"WWWHomePageURL\">An optional URL.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateTelecomAddress(IFCFile file, IFCAddressType? purpose, string description,\r\n          string userDefinedPurpose, IList<string> telephoneNumbers, IList<string> facsimileNumbers,\r\n          string pagerNumber, IList<string> electronicMailAddresses, string WWWHomePageURL)\r\n      {\r\n         IFCAnyHandle telecomAddress = CreateInstance(file, IFCEntityType.IfcTelecomAddress, null);\r\n         IFCAnyHandleUtil.SetAttribute(telecomAddress, \"TelephoneNumbers\", telephoneNumbers);\r\n         IFCAnyHandleUtil.SetAttribute(telecomAddress, \"FacsimileNumbers\", facsimileNumbers);\r\n         IFCAnyHandleUtil.SetAttribute(telecomAddress, \"PagerNumber\", pagerNumber);\r\n         IFCAnyHandleUtil.SetAttribute(telecomAddress, \"ElectronicMailAddresses\", electronicMailAddresses);\r\n         IFCAnyHandleUtil.SetAttribute(telecomAddress, \"WWWHomePageURL\", WWWHomePageURL);\r\n         SetAddress(telecomAddress, purpose, description, userDefinedPurpose);\r\n         return telecomAddress;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcSIUnit and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"unitType\">The type of the unit.</param>\r\n      /// <param name=\"prefix\">The SI Prefix for defining decimal multiples and submultiples of the unit.</param>\r\n      /// <param name=\"name\">The word, or group of words, by which the SI unit is referred to.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateSIUnit(IFCFile file, IFCUnit unitType, IFCSIPrefix? prefix,\r\n          IFCSIUnitName name)\r\n      {\r\n         IFCAnyHandle siUnit = CreateInstance(file, IFCEntityType.IfcSIUnit, null);\r\n         IFCAnyHandleUtil.SetAttribute(siUnit, \"Prefix\", prefix);\r\n         IFCAnyHandleUtil.SetAttribute(siUnit, \"Name\", name);\r\n         SetNamedUnit(siUnit, null, unitType);\r\n         return siUnit;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcDerivedUnitElement and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"unit\">The base unit.</param>\r\n      /// <param name=\"exponent\">The exponent of the base unit.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateDerivedUnitElement(IFCFile file, IFCAnyHandle unit, int exponent)\r\n      {\r\n         IFCAnyHandle derivedUnitElement = CreateInstance(file, IFCEntityType.IfcDerivedUnitElement, null);\r\n         IFCAnyHandleUtil.SetAttribute(derivedUnitElement, \"Unit\", unit);\r\n         IFCAnyHandleUtil.SetAttribute(derivedUnitElement, \"Exponent\", exponent);\r\n         return derivedUnitElement;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcDerivedUnit and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"elements\">The derived unit elements of the unit.</param>\r\n      /// <param name=\"unitType\">The derived unit type.</param>\r\n      /// <param name=\"userDefinedType\">The word, or group of words, by which the derived unit is referred to.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateDerivedUnit(IFCFile file, ISet<IFCAnyHandle> elements, Enum unitType,\r\n          string userDefinedType)\r\n      {\r\n         IFCAnyHandle derivedUnit = CreateInstance(file, IFCEntityType.IfcDerivedUnit, null);\r\n         IFCAnyHandleUtil.SetAttribute(derivedUnit, \"Elements\", elements);\r\n         IFCAnyHandleUtil.SetAttribute(derivedUnit, \"UnitType\", unitType);\r\n         IFCAnyHandleUtil.SetAttribute(derivedUnit, \"UserDefinedType\", userDefinedType);\r\n         return derivedUnit;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcDimensionalExponents and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"lengthExponent\">The power of the length base quantity.</param>\r\n      /// <param name=\"massExponent\">The power of the mass base quantity.</param>\r\n      /// <param name=\"timeExponent\">The power of the time base quantity.</param>\r\n      /// <param name=\"electricCurrentExponent\">The power of the electric current base quantity.</param>\r\n      /// <param name=\"thermodynamicTemperatureExponent\">The power of the thermodynamic temperature base quantity.</param>\r\n      /// <param name=\"amountOfSubstanceExponent\">The power of the amount of substance base quantity.</param>\r\n      /// <param name=\"luminousIntensityExponent\">The power of the luminous intensity base quantity.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateDimensionalExponents(IFCFile file, int lengthExponent, int massExponent,\r\n          int timeExponent, int electricCurrentExponent, int thermodynamicTemperatureExponent,\r\n          int amountOfSubstanceExponent, int luminousIntensityExponent)\r\n      {\r\n         IFCAnyHandle dimensionalExponents = CreateInstance(file, IFCEntityType.IfcDimensionalExponents, null);\r\n         IFCAnyHandleUtil.SetAttribute(dimensionalExponents, \"LengthExponent\", lengthExponent);\r\n         IFCAnyHandleUtil.SetAttribute(dimensionalExponents, \"MassExponent\", massExponent);\r\n         IFCAnyHandleUtil.SetAttribute(dimensionalExponents, \"TimeExponent\", timeExponent);\r\n         IFCAnyHandleUtil.SetAttribute(dimensionalExponents, \"ElectricCurrentExponent\", electricCurrentExponent);\r\n         IFCAnyHandleUtil.SetAttribute(dimensionalExponents, \"ThermodynamicTemperatureExponent\", thermodynamicTemperatureExponent);\r\n         IFCAnyHandleUtil.SetAttribute(dimensionalExponents, \"AmountOfSubstanceExponent\", amountOfSubstanceExponent);\r\n         IFCAnyHandleUtil.SetAttribute(dimensionalExponents, \"LuminousIntensityExponent\", luminousIntensityExponent);\r\n         return dimensionalExponents;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcMeasureWithUnit and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"valueComponent\">The value of the physical quantity when expressed in the specified units.</param>\r\n      /// <param name=\"unitComponent\">The unit in which the physical quantity is expressed.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateMeasureWithUnit(IFCFile file, IFCData valueComponent, IFCAnyHandle unitComponent)\r\n      {\r\n         if (valueComponent == null)\r\n            throw new ArgumentNullException(\"valueComponent\");\r\n\r\n         IFCAnyHandle measureWithUnit = CreateInstance(file, IFCEntityType.IfcMeasureWithUnit, null);\r\n         IFCAnyHandleUtil.SetAttribute(measureWithUnit, \"ValueComponent\", valueComponent);\r\n         IFCAnyHandleUtil.SetAttribute(measureWithUnit, \"UnitComponent\", unitComponent);\r\n         return measureWithUnit;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcMonetaryUnit and assigns it to the file for IFC2x3 and before.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"currencyType\">The type of the currency, as supported by IFC.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateMonetaryUnit2x3(IFCFile file, IFCCurrencyType currencyType)\r\n      {\r\n         IFCAnyHandle monetaryUnit = CreateInstance(file, IFCEntityType.IfcMonetaryUnit, null);\r\n         IFCAnyHandleUtil.SetAttribute(monetaryUnit, \"Currency\", currencyType);\r\n         return monetaryUnit;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcMonetaryUnit and assigns it to the file for IFC4 and beyond.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"currencyType\">The type of the currency, as supported by IFC.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateMonetaryUnit4(IFCFile file, string currencyType)\r\n      {\r\n         IFCAnyHandle monetaryUnit = CreateInstance(file, IFCEntityType.IfcMonetaryUnit, null);\r\n         IFCAnyHandleUtil.SetAttribute(monetaryUnit, \"Currency\", currencyType);\r\n         return monetaryUnit;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcConversionBasedUnit and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"dimensions\">The dimensional exponents of the SI base units by which the named unit is defined.</param>\r\n      /// <param name=\"unitType\">The type of the unit.</param>\r\n      /// <param name=\"name\">The word, or group of words, by which the conversion based unit is referred to.</param>\r\n      /// <param name=\"conversionFactor\">The physical quantity from which the converted unit is derived.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateConversionBasedUnit(IFCFile file, IFCAnyHandle dimensions, IFCUnit unitType,\r\n          string name, IFCAnyHandle conversionFactor)\r\n      {\r\n         IFCAnyHandle conversionBasedUnit = CreateInstance(file, IFCEntityType.IfcConversionBasedUnit, null);\r\n         IFCAnyHandleUtil.SetAttribute(conversionBasedUnit, \"Name\", name);\r\n         IFCAnyHandleUtil.SetAttribute(conversionBasedUnit, \"ConversionFactor\", conversionFactor);\r\n         SetNamedUnit(conversionBasedUnit, dimensions, unitType);\r\n         return conversionBasedUnit;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcUnitAssignment and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"units\">Units to be included within a unit assignment.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateUnitAssignment(IFCFile file, HashSet<IFCAnyHandle> units)\r\n      {\r\n         IFCAnyHandle unitAssignment = CreateInstance(file, IFCEntityType.IfcUnitAssignment, null);\r\n         IFCAnyHandleUtil.SetAttribute(unitAssignment, \"Units\", units);\r\n         return unitAssignment;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Validate that the parameters for IfcCircle are valid.\r\n      /// </summary>\r\n      /// <param name=\"radius\">The radius of the circle.</param>\r\n      /// <returns>True if the circle is valid.</returns>\r\n      public static bool ValidateCircle(double radius)\r\n      {\r\n         return radius >= MathUtil.Eps();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcCircle and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"position\">The local coordinate system with the origin at the center of the circle.</param>\r\n      /// <param name=\"radius\">The radius of the circle.  Must be positive.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateCircle(IFCFile file, IFCAnyHandle position, double radius)\r\n      {\r\n         if (!ValidateCircle(radius))\r\n            throw new ArgumentException(\"Radius is tiny, zero, or negative.\");\r\n\r\n         IFCAnyHandle circle = CreateInstance(file, IFCEntityType.IfcCircle, null);\r\n         SetConic(circle, position);\r\n         IFCAnyHandleUtil.SetAttribute(circle, \"Radius\", radius);\r\n         return circle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Validate that the parameters for IfcEllipse are valid.\r\n      /// </summary>\r\n      /// <param name=\"semiAxis1\">The radius in the direction of X in the local coordinate system.</param>\r\n      /// <param name=\"semiAxis2\">The radius in the direction of Y in the local coordinate system.</param>\r\n      /// <returns>True if the ellipse is valid.</returns>\r\n      public static bool ValidateEllipse(double semiAxis1, double semiAxis2)\r\n      {\r\n         return semiAxis1 >= MathUtil.Eps() && semiAxis2 >= MathUtil.Eps();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcEllipse and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"position\">The local coordinate system with the origin at the center of the circle.</param>\r\n      /// <param name=\"semiAxis1\">The radius in the direction of X in the local coordinate system.</param>\r\n      /// <param name=\"semiAxis2\">The radius in the direction of Y in the local coordinate system.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateEllipse(IFCFile file, IFCAnyHandle position, double semiAxis1, double semiAxis2)\r\n      {\r\n         if (!ValidateEllipse(semiAxis1, semiAxis2))\r\n            throw new ArgumentException(\"semiAxis2 is tiny, zero, or negative.\");\r\n\r\n         IFCAnyHandle ellipse = CreateInstance(file, IFCEntityType.IfcEllipse, null);\r\n         SetConic(ellipse, position);\r\n         IFCAnyHandleUtil.SetAttribute(ellipse, \"SemiAxis1\", semiAxis1);\r\n         IFCAnyHandleUtil.SetAttribute(ellipse, \"SemiAxis2\", semiAxis2);\r\n         return ellipse;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcCartesianPoint and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"coordinates\">The coordinates of the point locations.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateCartesianPoint(IFCFile file, IList<double> coordinates)\r\n      {\r\n         if (coordinates == null)\r\n            throw new ArgumentNullException(\"coordinates\");\r\n\r\n         IFCAnyHandle cartesianPoint = CreateInstance(file, IFCEntityType.IfcCartesianPoint, null);\r\n         IFCAnyHandleUtil.SetAttribute(cartesianPoint, \"Coordinates\", coordinates);\r\n         return cartesianPoint;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing IfcVertexPoint and assigns it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"coordinates\">The coordinates of the vertex point</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateVertexPoint(IFCFile file, IList<double> coordinates)\r\n      {\r\n         if (coordinates == null)\r\n            throw new ArgumentNullException(\"coordinates\");\r\n\r\n         IFCAnyHandle vertexGeometry = CreateCartesianPoint(file, coordinates);\r\n         IFCAnyHandle vertexPoint = CreateInstance(file, IFCEntityType.IfcVertexPoint, null);\r\n         IFCAnyHandleUtil.SetAttribute(vertexPoint, \"VertexGeometry\", vertexGeometry);\r\n         return vertexPoint;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing IfcVertexPoint by IfcPoint as an input instead of the list and assigns it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"point\">IfcPoint</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateVertexPoint(IFCFile file, IFCAnyHandle point)\r\n      {\r\n         IFCAnyHandle vertexPoint = CreateInstance(file, IFCEntityType.IfcVertexPoint, null);\r\n         IFCAnyHandleUtil.SetAttribute(vertexPoint, \"VertexGeometry\", point);\r\n         return vertexPoint;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing IfcEdgeCurve and assigns it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"edgeStart\">start vertex of the edge</param>\r\n      /// <param name=\"edgeEnd\">end vertex of the edge</param>\r\n      /// <param name=\"edgeGeometry\">basis curve of the edge</param>\r\n      /// <param name=\"sameSense\">sense agreement of the edge and the curve</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateEdgeCurve(IFCFile file, IFCAnyHandle edgeStart, IFCAnyHandle edgeEnd, IFCAnyHandle edgeGeometry, bool sameSense)\r\n      {\r\n         IFCAnyHandle edgeCurve = CreateInstance(file, IFCEntityType.IfcEdgeCurve, null);\r\n         IFCAnyHandleUtil.SetAttribute(edgeCurve, \"EdgeStart\", edgeStart);\r\n         IFCAnyHandleUtil.SetAttribute(edgeCurve, \"EdgeEnd\", edgeEnd);\r\n         IFCAnyHandleUtil.SetAttribute(edgeCurve, \"EdgeGeometry\", edgeGeometry);\r\n         IFCAnyHandleUtil.SetAttribute(edgeCurve, \"SameSense\", sameSense);\r\n\r\n         return edgeCurve;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing IfcOrientedEdge and assigns it tot the file\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"edgeElement\">the edge element</param>\r\n      /// <param name=\"orientation\">the topological orientation of the edge and the vertices</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateOrientedEdge(IFCFile file, IFCAnyHandle edgeElement, bool orientation)\r\n      {\r\n         IFCAnyHandle orientedEdge = CreateInstance(file, IFCEntityType.IfcOrientedEdge, null);\r\n         IFCAnyHandleUtil.SetAttribute(orientedEdge, \"EdgeElement\", edgeElement);\r\n         IFCAnyHandleUtil.SetAttribute(orientedEdge, \"Orientation\", orientation);\r\n\r\n         return orientedEdge;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing IfcEdgeLoop and assigns it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"orientedEdgeList\">List of the oriented edges</param>\r\n      /// <returns>teh handle</returns>\r\n      public static IFCAnyHandle CreateEdgeLoop(IFCFile file, IList<IFCAnyHandle> orientedEdgeList)\r\n      {\r\n         if (orientedEdgeList == null)\r\n            throw new ArgumentNullException(\"EdgeLIst\");\r\n\r\n         IFCAnyHandle edgeLoop = CreateInstance(file, IFCEntityType.IfcEdgeLoop, null);\r\n         IFCAnyHandleUtil.SetAttribute(edgeLoop, \"EdgeList\", orientedEdgeList);\r\n\r\n         return edgeLoop;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing IfcLine and assigns it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"coordinates\">coordinates point reference of the line</param>\r\n      /// <param name=\"vector\">the vector direction</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateLine(IFCFile file, IList<double> coordinates, IFCAnyHandle vector)\r\n      {\r\n         if (coordinates == null)\r\n            throw new ArgumentNullException(\"Coordinates\");\r\n\r\n         IFCAnyHandle line = CreateInstance(file, IFCEntityType.IfcLine, null);\r\n         IFCAnyHandle pnt = CreateCartesianPoint(file, coordinates);\r\n         IFCAnyHandleUtil.SetAttribute(line, \"Pnt\", pnt);\r\n         IFCAnyHandleUtil.SetAttribute(line, \"Dir\", vector);\r\n\r\n         return line;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing IfcLine taking in IfcCartesianPoint as input, and assigns it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"point\">the point (IfcCartesianPoint)</param>\r\n      /// <param name=\"vector\">the vector direction (IfcVector)</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateLine(IFCFile file, IFCAnyHandle point, IFCAnyHandle vector)\r\n      {\r\n         IFCAnyHandle line = CreateInstance(file, IFCEntityType.IfcLine, null);\r\n         IFCAnyHandleUtil.SetAttribute(line, \"Pnt\", point);\r\n         IFCAnyHandleUtil.SetAttribute(line, \"Dir\", vector);\r\n\r\n         return line;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing IfcVector and assignes it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"orientation\">vector direction</param>\r\n      /// <param name=\"magnitude\">magnitude of the vector</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateVector(IFCFile file, IFCAnyHandle orientation, double magnitude)\r\n      {\r\n         IFCAnyHandle vector = CreateInstance(file, IFCEntityType.IfcVector, null);\r\n         IFCAnyHandleUtil.SetAttribute(vector, \"Orientation\", orientation);\r\n         IFCAnyHandleUtil.SetAttribute(vector, \"Magnitude\", magnitude);\r\n\r\n         return vector;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create IFC instance of IfcCartesianPointList2D\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"coordinateList\">the list of the 2D coordinates</param>\r\n      /// <returns>The handle</returns>\r\n      public static IFCAnyHandle CreateCartesianPointList2D(IFCFile file, IList<IList<double>> coordinateList)\r\n      {\r\n         IFCAnyHandle CreateCartesianPointList2D = CreateInstance(file, IFCEntityType.IfcCartesianPointList2D, null);\r\n         IFCAnyHandleUtil.SetAttribute(CreateCartesianPointList2D, \"CoordList\", coordinateList, 1, null, 2, 2);\r\n\r\n         return CreateCartesianPointList2D;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create IFC instance of IfcCartesianPointList3D\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"coordinateList\">the list of the 3D coordinates</param>\r\n      /// <returns>The handle</returns>\r\n      public static IFCAnyHandle CreateCartesianPointList3D(IFCFile file, IList<IList<double>> coordinateList)\r\n      {\r\n         IFCAnyHandle CreateCartesianPointList3D = CreateInstance(file, IFCEntityType.IfcCartesianPointList3D, null);\r\n         IFCAnyHandleUtil.SetAttribute(CreateCartesianPointList3D, \"CoordList\", coordinateList, 1, null, 3, 3);\r\n\r\n         return CreateCartesianPointList3D;\r\n      }\r\n      /// <summary>\r\n      /// Create IFC instance of IfcCartesianPointList3D\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"coordinateList\">the list of the 3D coordinates</param>\r\n      /// <returns>The handle</returns>\r\n      public static IFCAnyHandle CreateCartesianPointList(IFCFile file, IFCAnyHandleUtil.IfcPointList coordinateList)\r\n      {\r\n         IFCAnyHandle CreateCartesianPointList = null;\r\n         if (coordinateList[0] as Point3D != null)\r\n            CreateCartesianPointList = CreateInstance(file, IFCEntityType.IfcCartesianPointList3D, null);\r\n         else\r\n            CreateCartesianPointList = CreateInstance(file, IFCEntityType.IfcCartesianPointList2D, null);\r\n\r\n         IFCAnyHandleUtil.SetAttribute(CreateCartesianPointList, \"CoordList\", coordinateList, 1, null);\r\n\r\n         return CreateCartesianPointList;\r\n      }\r\n\r\n      public static IFCData CreateLineIndexType(IFCFile file, IList<int> lineIndexList)\r\n      {\r\n         if (lineIndexList == null || lineIndexList.Count == 0)\r\n            throw new ArgumentException(\"The index is empty.\", \"IfcLineIndex\");\r\n         if (lineIndexList.Count < 2)\r\n            throw new ArgumentException(\"The index must contains 2 or more members.\", \"IfcLineIndex\");\r\n\r\n         IFCAggregate lineIndex = null;\r\n         foreach (int index in lineIndexList)\r\n            lineIndex.Add(IFCData.CreateInteger(index));\r\n\r\n         IFCData lineIndexData = IFCData.CreateIFCAggregate(lineIndex);\r\n         return lineIndexData;\r\n      }\r\n\r\n      public static IFCData CreateArcIndexType(IFCFile file, IList<int> arcIndexList)\r\n      {\r\n         if (arcIndexList == null || arcIndexList.Count == 0)\r\n            throw new ArgumentException(\"The index is empty.\", \"IfcArcIndex\");\r\n         if (arcIndexList.Count != 3)\r\n            throw new ArgumentException(\"The index must contains exactly 3 members.\", \"IfcArcIndex\");\r\n\r\n         IFCAggregate arcIndex = null;\r\n         foreach (int index in arcIndexList)\r\n            arcIndex.Add(IFCData.CreateInteger(index));\r\n\r\n         IFCData arcIndexData = IFCData.CreateIFCAggregate(arcIndex);\r\n         return arcIndexData;\r\n      }\r\n\r\n      public static IFCAnyHandle CreateIndexedPolyCurve(IFCFile file, IFCAnyHandle coordinates, IList<GeometryUtil.SegmentIndices> segmentIndexList, bool? selfIntersect)\r\n      {\r\n         if (coordinates == null)\r\n            throw new ArgumentNullException(\"Points\");\r\n         if (segmentIndexList != null && segmentIndexList.Count == 0)\r\n            throw new ArgumentNullException(\"Segments\");\r\n\r\n         IFCAnyHandle indexedPolyCurveHnd = CreateInstance(file, IFCEntityType.IfcIndexedPolyCurve, null);\r\n         IFCAnyHandleUtil.SetAttribute(indexedPolyCurveHnd, \"Points\", coordinates);\r\n         if (segmentIndexList != null)\r\n         {\r\n            IFCAggregate segments = indexedPolyCurveHnd.CreateAggregateAttribute(\"Segments\");\r\n            foreach (GeometryUtil.SegmentIndices segmentIndices in segmentIndexList)\r\n            {\r\n               if (segmentIndices.IsCalculated == false)\r\n                  throw new ArgumentNullException(\"Segments\");\r\n\r\n               IFCData segment = null;\r\n\r\n               var polyLineIndices = segmentIndices as GeometryUtil.PolyLineIndices;\r\n               if (polyLineIndices != null)\r\n               {\r\n                  segments.AddValueOfType(\"IfcLineIndex\");\r\n                  segment = segments.Last();\r\n                  IFCAggregate lineIndexAggr = segment.AsAggregate();\r\n                  foreach (int index in polyLineIndices.Indices)\r\n                     lineIndexAggr.Add(IFCData.CreateInteger(index));\r\n               }\r\n               else\r\n               {\r\n                  var arcIndices = segmentIndices as GeometryUtil.ArcIndices;\r\n                  if (arcIndices != null)\r\n                  {\r\n                     segments.AddValueOfType(\"IfcArcIndex\");\r\n                     segment = segments.Last();\r\n                     IFCAggregate arcIndexAggr = segment.AsAggregate();\r\n                     arcIndexAggr.Add(IFCData.CreateInteger(arcIndices.Start));\r\n                     arcIndexAggr.Add(IFCData.CreateInteger(arcIndices.Mid));\r\n                     arcIndexAggr.Add(IFCData.CreateInteger(arcIndices.End));\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         IFCAnyHandleUtil.SetAttribute(indexedPolyCurveHnd, \"SelfIntersect\", selfIntersect);\r\n\r\n         return indexedPolyCurveHnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcPolyline and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"points\">The coordinates of the vertices.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePolyline(IFCFile file, IList<IFCAnyHandle> points)\r\n      {\r\n         if (points == null)\r\n            throw new ArgumentNullException(\"points\");\r\n\r\n         IFCAnyHandle polylineHnd = CreateInstance(file, IFCEntityType.IfcPolyline, null);\r\n         IFCAnyHandleUtil.SetAttribute(polylineHnd, \"Points\", points);\r\n         return polylineHnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcTrimmedCurve and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"basisCurve\">The base curve.</param>\r\n      /// <param name=\"trim1\">The cartesian point, parameter, or both of end 1.</param>\r\n      /// <param name=\"trim2\">The cartesian point, parameter, or both of end 2.</param>\r\n      /// <param name=\"senseAgreement\">True if the end points match the orientation of the curve.</param>\r\n      /// <param name=\"primaryRepresentation\">An enum stating which trim parameters are available.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateTrimmedCurve(IFCFile file, IFCAnyHandle basisCurve,\r\n          HashSet<IFCData> trim1, HashSet<IFCData> trim2, bool senseAgreement,\r\n          IFCTrimmingPreference primaryRepresentation)\r\n      {\r\n         IFCAnyHandle trimmedCurve = CreateInstance(file, IFCEntityType.IfcTrimmedCurve, null);\r\n         IFCAnyHandleUtil.SetAttribute(trimmedCurve, \"BasisCurve\", basisCurve);\r\n         IFCAnyHandleUtil.SetAttribute(trimmedCurve, \"Trim1\", trim1);\r\n         IFCAnyHandleUtil.SetAttribute(trimmedCurve, \"Trim2\", trim2);\r\n         IFCAnyHandleUtil.SetAttribute(trimmedCurve, \"SenseAgreement\", senseAgreement);\r\n         IFCAnyHandleUtil.SetAttribute(trimmedCurve, \"MasterRepresentation\", primaryRepresentation);\r\n         return trimmedCurve;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcPolyLoop and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"polygon\">The coordinates of the vertices.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePolyLoop(IFCFile file, IList<IFCAnyHandle> polygon)\r\n      {\r\n         if (polygon == null)\r\n            throw new ArgumentNullException(\"polygon\");\r\n\r\n         if (polygon.Count < 3)\r\n            throw new InvalidOperationException(\"IfcPolyLoop has fewer than 3 vertices, ignoring.\");\r\n\r\n         IFCAnyHandle polyLoop = CreateInstance(file, IFCEntityType.IfcPolyLoop, null);\r\n         IFCAnyHandleUtil.SetAttribute(polyLoop, \"Polygon\", polygon);\r\n         return polyLoop;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcCompositeCurveSegment and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"transitionCode\">TheThe continuity between curve segments.</param>\r\n      /// <param name=\"sameSense\">True if the segment has the same orientation as the IfcCompositeCurve.</param>\r\n      /// <param name=\"parentCurve\">The curve segment geometry.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateCompositeCurveSegment(IFCFile file, IFCTransitionCode transitionCode, bool sameSense,\r\n          IFCAnyHandle parentCurve)\r\n      {\r\n         IFCAnyHandle compositeCurveSegment = CreateInstance(file, IFCEntityType.IfcCompositeCurveSegment, null);\r\n         IFCAnyHandleUtil.SetAttribute(compositeCurveSegment, \"Transition\", transitionCode);\r\n         IFCAnyHandleUtil.SetAttribute(compositeCurveSegment, \"SameSense\", sameSense);\r\n         IFCAnyHandleUtil.SetAttribute(compositeCurveSegment, \"ParentCurve\", parentCurve);\r\n         return compositeCurveSegment;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcCompositeCurve and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"segments\">The list of IfcCompositeCurveSegments.</param>\r\n      /// <param name=\"selfIntersect\">True if curve self-intersects, false if not, or unknown.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateCompositeCurve(IFCFile file, IList<IFCAnyHandle> segments, IFCLogical selfIntersect)\r\n      {\r\n         IFCAnyHandle compositeCurve = CreateInstance(file, IFCEntityType.IfcCompositeCurve, null);\r\n         IFCAnyHandleUtil.SetAttribute(compositeCurve, \"Segments\", segments);\r\n         IFCAnyHandleUtil.SetAttribute(compositeCurve, \"SelfIntersect\", selfIntersect);\r\n         return compositeCurve;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcSweptDiskSolid and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"directrix\">The curve used to define the sweeping operation.</param>\r\n      /// <param name=\"radius\">The radius of the circular disk to be swept along the directrix.</param>\r\n      /// <param name=\"innerRadius\">This attribute is optional, if present it defines the radius of a circular hole in the centre of the disk.</param>\r\n      /// <param name=\"startParam\">The parameter value on the directrix at which the sweeping operation commences.</param>\r\n      /// <param name=\"endParam\">The parameter value on the directrix at which the sweeping operation ends.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateSweptDiskSolid(IFCFile file, IFCAnyHandle directrix, double radius,\r\n          double? innerRadius, double startParam, double endParam)\r\n      {\r\n         IFCAnyHandle sweptDiskSolid = file.CreateInstance(IFCEntityType.IfcSweptDiskSolid.ToString());\r\n         IFCAnyHandleUtil.SetAttribute(sweptDiskSolid, \"Directrix\", directrix);\r\n         IFCAnyHandleUtil.SetAttribute(sweptDiskSolid, \"Radius\", radius);\r\n         IFCAnyHandleUtil.SetAttribute(sweptDiskSolid, \"InnerRadius\", innerRadius);\r\n         IFCAnyHandleUtil.SetAttribute(sweptDiskSolid, \"StartParam\", startParam);\r\n         IFCAnyHandleUtil.SetAttribute(sweptDiskSolid, \"EndParam\", endParam);\r\n         return sweptDiskSolid;\r\n      }\r\n\r\n      private static void SetFaceBound(IFCAnyHandle faceBound, IFCAnyHandle bound, bool orientation)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(faceBound, \"Bound\", bound);\r\n         IFCAnyHandleUtil.SetAttribute(faceBound, \"Orientation\", orientation);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcFaceBound and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"bound\">The bounding loop.</param>\r\n      /// <param name=\"orientation\">The orientation of the face relative to the loop.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateFaceBound(IFCFile file, IFCAnyHandle bound, bool orientation)\r\n      {\r\n         if (bound == null)\r\n            throw new ArgumentNullException(\"bound\");\r\n\r\n         IFCAnyHandle faceBound = CreateInstance(file, IFCEntityType.IfcFaceBound, null);\r\n         SetFaceBound(faceBound, bound, orientation);\r\n         return faceBound;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcFaceOuterBound and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"bound\">The bounding loop.</param>\r\n      /// <param name=\"orientation\">The orientation of the face relative to the loop.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateFaceOuterBound(IFCFile file, IFCAnyHandle bound, bool orientation)\r\n      {\r\n         if (bound == null)\r\n            throw new ArgumentNullException(\"bound\");\r\n\r\n         IFCAnyHandle faceOuterBound = CreateInstance(file, IFCEntityType.IfcFaceOuterBound, null);\r\n         SetFaceBound(faceOuterBound, bound, orientation);\r\n         return faceOuterBound;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcFace and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"bounds\">The boundaries.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateFace(IFCFile file, HashSet<IFCAnyHandle> bounds)\r\n      {\r\n         if (bounds == null)\r\n            throw new ArgumentNullException(\"bound\");\r\n         if (bounds.Count == 0)\r\n            throw new ArgumentException(\"no bounds for Face.\");\r\n\r\n         IFCAnyHandle face = CreateInstance(file, IFCEntityType.IfcFace, null);\r\n         IFCAnyHandleUtil.SetAttribute(face, \"Bounds\", bounds);\r\n         return face;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcFaceSurface and assign it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"bounds\">The boundaries</param>\r\n      /// <param name=\"faceSurface\">faceSurface</param>\r\n      /// <param name=\"sameSense\">same sense</param>\r\n      /// <returns>the Handle</returns>\r\n      public static IFCAnyHandle CreateFaceSurface(IFCFile file, HashSet<IFCAnyHandle> bounds, IFCAnyHandle faceSurface, bool sameSense)\r\n      {\r\n         if (bounds == null)\r\n            throw new ArgumentNullException(\"bounds\");\r\n         if (bounds.Count == 0)\r\n            throw new ArgumentException(\"no bounds for FaceSurface.\");\r\n\r\n         IFCAnyHandle fSurface = CreateInstance(file, IFCEntityType.IfcFaceSurface, null);\r\n         IFCAnyHandleUtil.SetAttribute(fSurface, \"Bounds\", bounds);\r\n         IFCAnyHandleUtil.SetAttribute(fSurface, \"FaceSurface\", faceSurface);\r\n         IFCAnyHandleUtil.SetAttribute(fSurface, \"SameSense\", sameSense);\r\n         return fSurface;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcAdvancedFace and assign it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"bounds\">The boundaries</param>\r\n      /// <param name=\"faceSurface\">faceSurface</param>\r\n      /// <param name=\"sameSense\">same sense</param>\r\n      /// <returns>the Handle</returns>\r\n      public static IFCAnyHandle CreateAdvancedFace(IFCFile file, HashSet<IFCAnyHandle> bounds, IFCAnyHandle faceSurface, bool sameSense)\r\n      {\r\n         if (bounds == null)\r\n            throw new ArgumentNullException(\"bounds\");\r\n         if (bounds.Count == 0)\r\n            throw new ArgumentException(\"no bounds for AdvancedFace.\");\r\n\r\n         IFCAnyHandle advancedFace = CreateInstance(file, IFCEntityType.IfcAdvancedFace, null);\r\n         IFCAnyHandleUtil.SetAttribute(advancedFace, \"Bounds\", bounds);\r\n         IFCAnyHandleUtil.SetAttribute(advancedFace, \"FaceSurface\", faceSurface);\r\n         IFCAnyHandleUtil.SetAttribute(advancedFace, \"SameSense\", sameSense);\r\n         return advancedFace;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcRepresentationMap, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"origin\">The origin of the geometry.</param>\r\n      /// <param name=\"representation\">The geometry of the representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRepresentationMap(IFCFile file, IFCAnyHandle origin, IFCAnyHandle representation)\r\n      {\r\n         IFCAnyHandle representationMap = CreateInstance(file, IFCEntityType.IfcRepresentationMap, null);\r\n         IFCAnyHandleUtil.SetAttribute(representationMap, \"MappingOrigin\", origin);\r\n         IFCAnyHandleUtil.SetAttribute(representationMap, \"MappedRepresentation\", representation);\r\n         return representationMap;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a default IfcAxis1Placement and assign it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"location\">The origin</param>\r\n      /// <param name=\"axis\">The Z direction</param>\r\n      /// <returns>The handle</returns>\r\n      public static IFCAnyHandle CreateAxis1Placement(IFCFile file, IFCAnyHandle location, IFCAnyHandle axis)\r\n      {\r\n         IFCAnyHandle axis1Placement = CreateInstance(file, IFCEntityType.IfcAxis1Placement, null);\r\n         SetPlacement(axis1Placement, location);\r\n         IFCAnyHandleUtil.SetAttribute(axis1Placement, \"Axis\", axis);\r\n         return axis1Placement;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a default IfcAxis2Placement2D, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"location\">The origin.</param>\r\n      /// <param name=\"refDirection\">The X direction.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateAxis2Placement2D(IFCFile file, IFCAnyHandle location, IFCAnyHandle refDirection)\r\n      {\r\n         IFCAnyHandle axis2Placement2D = CreateInstance(file, IFCEntityType.IfcAxis2Placement2D, null);\r\n         IFCAnyHandleUtil.SetAttribute(axis2Placement2D, \"RefDirection\", refDirection);\r\n         SetPlacement(axis2Placement2D, location);\r\n         return axis2Placement2D;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a default IfcAxis2Placement3D, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"location\">The origin.</param>\r\n      /// <param name=\"axis\">The Z direction.</param>\r\n      /// <param name=\"refDirection\">The X direction.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateAxis2Placement3D(IFCFile file, IFCAnyHandle location, IFCAnyHandle axis, IFCAnyHandle refDirection)\r\n      {\r\n         IFCAnyHandle axis2Placement3D = CreateInstance(file, IFCEntityType.IfcAxis2Placement3D, null);\r\n         IFCAnyHandleUtil.SetAttribute(axis2Placement3D, \"Axis\", axis);\r\n         IFCAnyHandleUtil.SetAttribute(axis2Placement3D, \"RefDirection\", refDirection);\r\n         SetPlacement(axis2Placement3D, location);\r\n         return axis2Placement3D;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcBeam, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateBeam(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory, IFCAnyHandle objectPlacement,\r\n          IFCAnyHandle representation, string preDefinedType)\r\n      {\r\n         IFCAnyHandle beam = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcBeam, element);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            SetSpecificEnumAttr(beam, \"PredefinedType\", preDefinedType, \"IfcBeamType\");\r\n         }\r\n\r\n         SetElement(beam, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return beam;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcColumn, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateColumn(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory, IFCAnyHandle objectPlacement,\r\n          IFCAnyHandle representation, string preDefinedType)\r\n      {\r\n         string validatedType = preDefinedType;\r\n\r\n         IFCAnyHandle column = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcColumn, element);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            SetSpecificEnumAttr(column, \"PredefinedType\", preDefinedType, \"IfcColumnType\");\r\n         }\r\n\r\n         SetElement(column, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return column;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcMechanicalFastener, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <param name=\"nominalDiameter\">The optinal nominal diameter.</param>\r\n      /// <param name=\"nominalLength\">The optional nominal length.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateMechanicalFastener(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, double? nominalDiameter, double? nominalLength, string preDefinedType)\r\n      {\r\n         IFCAnyHandle fastener = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcMechanicalFastener, element);\r\n         SetElement(fastener, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n\r\n         string validatedType = preDefinedType;\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            // In IFC4 NominalDiameter and NominalLength attributes have been deprecated. PredefinedType attribute was added.\r\n            SetSpecificEnumAttr(fastener, \"PredefinedType\", preDefinedType, \"IfcMechanicalFastenerType\");\r\n         }\r\n         else\r\n         {\r\n            IFCAnyHandleUtil.SetAttribute(fastener, \"NominalDiameter\", nominalDiameter);\r\n            IFCAnyHandleUtil.SetAttribute(fastener, \"NominalLength\", nominalLength);\r\n         }\r\n\r\n         return fastener;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcMemberType, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"applicableOccurrence\">The attribute optionally defines the data type of the occurrence object.</param>\r\n      /// <param name=\"propertySets\">The property set(s) associated with the type.</param>\r\n      /// <param name=\"representationMaps\">The mapped geometries associated with the type.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <param name=\"elementType\">The type name.</param>\r\n      /// <param name=\"predefinedType\">The predefined types.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateMemberType(IFCFile file, ElementType revitType,\r\n         string guid, HashSet<IFCAnyHandle> propertySets,\r\n         IList<IFCAnyHandle> representationMaps, string predefinedType)\r\n      {\r\n         IFCAnyHandle memberType = CreateInstance(file, IFCEntityType.IfcMemberType, revitType);\r\n         SetElementType(memberType, revitType, ref predefinedType, guid, propertySets, representationMaps);\r\n         SetSpecificEnumAttr(memberType, \"PredefinedType\", predefinedType, \"IfcMemberType\");\r\n         return memberType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcFlowSegment, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateFlowSegment(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation)\r\n      {\r\n         IFCAnyHandle flowSegment = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcFlowSegment, element);\r\n         SetElement(flowSegment, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return flowSegment;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcMember, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateMember(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string IFCEnumType)\r\n      {\r\n         IFCAnyHandle member = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcMember, element);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            SetSpecificEnumAttr(member, \"PredefinedType\", IFCEnumType, \"IfcMemberType\");\r\n         }\r\n\r\n         SetElement(member, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return member;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcPlate, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePlate(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string IFCEnumType)\r\n      {\r\n         IFCAnyHandle plate = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcPlate, element);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            SetSpecificEnumAttr(plate, \"PredefinedType\", IFCEnumType, \"IfcPlateType\");\r\n         }\r\n\r\n         SetElement(plate, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return plate;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcBeamType, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"applicableOccurrence\">The attribute optionally defines the data type of the occurrence object.</param>\r\n      /// <param name=\"propertySets\">The property set(s) associated with the type.</param>\r\n      /// <param name=\"representationMaps\">The mapped geometries associated with the type.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <param name=\"elementType\">The type name.</param>\r\n      /// <param name=\"predefinedType\">The predefined types.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateBeamType(IFCFile file, ElementType revitType,\r\n         string guid, HashSet<IFCAnyHandle> propertySets,\r\n         IList<IFCAnyHandle> representationMaps, string predefinedType)\r\n      {\r\n         IFCAnyHandle beamType = CreateInstance(file, IFCEntityType.IfcBeamType, revitType);\r\n         SetElementType(beamType, revitType, ref predefinedType, guid, propertySets, representationMaps);\r\n         SetSpecificEnumAttr(beamType, \"PredefinedType\", predefinedType, \"IfcBeamType\");\r\n         return beamType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcColumnType, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"applicableOccurrence\">The attribute optionally defines the data type of the occurrence object.</param>\r\n      /// <param name=\"propertySets\">The property set(s) associated with the type.</param>\r\n      /// <param name=\"representationMaps\">The mapped geometries associated with the type.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <param name=\"elementType\">The type name.</param>\r\n      /// <param name=\"predefinedType\">The predefined types.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateColumnType(IFCFile file, ElementType revitType, string guid,\r\n         HashSet<IFCAnyHandle> propertySets, IList<IFCAnyHandle> representationMaps, string predefinedType)\r\n      {\r\n         IFCAnyHandle columnType = CreateInstance(file, IFCEntityType.IfcColumnType, revitType);\r\n         SetElementType(columnType, revitType, ref predefinedType, guid, propertySets, representationMaps);\r\n         SetSpecificEnumAttr(columnType, \"PredefinedType\", predefinedType, \"IfcColumnType\");\r\n         return columnType;\r\n      }\r\n\r\n      #region MEPObjects\r\n\r\n      /// <summary>\r\n      /// Get the name for the predefined type attribute, if it is different than \"PredefinedType\".\r\n      /// </summary>\r\n      /// <param name=\"entityType\">The entity type.</param>\r\n      /// <returns>The predefined type attribute, if it exists; null otherwise.</returns>\r\n      /// <remarks>Before IFC4, some instance entities stored their predefined type in an attribute\r\n      /// not called \"PredefinedType\".</remarks>\r\n      public static string GetCustomPredefinedTypeAttributeName(IFCEntityType entityType)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            // The following have \"PredefinedType\", but are out of scope for now:\r\n            // IfcCostSchedule, IfcOccupant, IfcProjectOrder, IfcProjectOrderRecord, IfcServiceLifeFactor\r\n            // IfcStructuralAnalysisModel, IfcStructuralCurveMember, IfcStructuralLoadGroup, IfcStructuralSurfaceMember\r\n            if ((entityType == IFCEntityType.IfcRamp) ||\r\n                (entityType == IFCEntityType.IfcRoof) ||\r\n                (entityType == IFCEntityType.IfcStair))\r\n               return \"ShapeType\";\r\n            else if (entityType == IFCEntityType.IfcElectricDistributionPoint)\r\n               return \"DistributionPointFunction\";\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set non optional attributes by default for some generic types\r\n      /// </summary>\r\n      /// <param name=\"handleType\">The handle type.</param>\r\n      /// <param name=\"entityType\">The entity type.</param>\r\n      public static void SetGenericTypeNonOptionalAttributes(IFCAnyHandle handleType, IFCEntityType entityType)\r\n      {\r\n         if (entityType == IFCEntityType.IfcWindowType)\r\n            IFCAnyHandleUtil.SetAttribute(handleType, \"PartitioningType\", IFC4.IFCWindowTypePartitioning.NOTDEFINED);\r\n         else if (entityType == IFCEntityType.IfcDoorType)\r\n            IFCAnyHandleUtil.SetAttribute(handleType, \"OperationType\", IFC4.IFCDoorTypeOperation.NOTDEFINED);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set the Predefined type or equivalent attribute for the selected entity type.\r\n      /// </summary>\r\n      /// <param name=\"genericIFCEntity\">The handle of the entity whose PredefinedType we are setting.</param>\r\n      /// <param name=\"entityToCreate\">The entity type.</param>\r\n      public static void SetPredefinedType(IFCAnyHandle genericIFCEntity, \r\n         IFCExportInfoPair entityToCreate)\r\n      {\r\n         IFCVersion version = ExporterCacheManager.ExportOptionsCache.FileVersion;\r\n         IFCEntityType entityType = entityToCreate.ExportInstance;\r\n\r\n         // Some entities may not have the PredefinedType property. For these, we will cache them as we find them\r\n         // to avoid the cost of the exception.  We could statically determine all of the entity types that don't\r\n         // have a predefined type, but that is somewhat error-prone.\r\n         try\r\n         {\r\n            string predefinedTypeAttributeName = GetCustomPredefinedTypeAttributeName(entityType);\r\n            if (predefinedTypeAttributeName == null && !MissingAttributeCache.Find(version, entityType))\r\n               predefinedTypeAttributeName = \"PredefinedType\";\r\n            if (predefinedTypeAttributeName != null)\r\n               IFCAnyHandleUtil.SetAttribute(genericIFCEntity, predefinedTypeAttributeName, entityToCreate.GetPredefinedTypeOrDefault(), true);\r\n         }\r\n         catch\r\n         {\r\n            MissingAttributeCache.Add(version, entityType);\r\n         }\r\n      }\r\n\r\n      private static void SetSpecificEntityData(IFCAnyHandle genericIFCEntity, IFCEntityType entityType, Element element)\r\n      {\r\n         switch (entityType)\r\n         {\r\n            case IFCEntityType.IfcElementAssembly:\r\n               {\r\n                  IFCAnyHandleUtil.SetAttribute(genericIFCEntity, \"AssemblyPlace\", IFCAssemblyPlace.NotDefined);\r\n                  return;\r\n               }\r\n            case IFCEntityType.IfcSite:\r\n               {\r\n                  IFCAnyHandleUtil.SetAttribute(genericIFCEntity, \"CompositionType\", IFCElementComposition.Partial);\r\n                  return;\r\n               }\r\n            case IFCEntityType.IfcMechanicalFastener:\r\n               {\r\n                  if (ExporterCacheManager.ExportOptionsCache.ExportAs4)\r\n                  {\r\n                     // In IFC4 NominalDiameter and NominalLength attributes have been deprecated. PredefinedType attribute was added.\r\n                     IFCAnyHandleUtil.SetAttribute(genericIFCEntity, \"PredefinedType\", IFC4.IFCMechanicalFastenerType.USERDEFINED);\r\n                  }\r\n                  else\r\n                  {\r\n                     IFCAnyHandleUtil.SetAttribute(genericIFCEntity, \"NominalDiameter\", element?.get_Parameter(BuiltInParameter.COUPLER_WIDTH)?.AsDouble());\r\n                     IFCAnyHandleUtil.SetAttribute(genericIFCEntity, \"NominalLength\", element?.get_Parameter(BuiltInParameter.COUPLER_LENGTH)?.AsDouble());\r\n                  }\r\n                  return;\r\n               }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFC entity of the given type.\r\n      /// </summary>\r\n      /// <param name=\"entityToCreate\">The specific Entity (Enum) to create</param>\r\n      /// <param name=\"file\">The IFC file</param>\r\n      /// <param name=\"guid\">GUID</param>\r\n      /// <param name=\"ownerHistory\">Owner History</param>\r\n      /// <param name=\"name\">Name attribute</param>\r\n      /// <param name=\"description\">Description</param>\r\n      /// <param name=\"objectType\">ObjectType attribute</param>\r\n      /// <param name=\"objectPlacement\">Placement</param>\r\n      /// <param name=\"representation\">Geometry representation</param>\r\n      /// <param name=\"elementTag\">Element Tag attribute</param>\r\n      /// <returns>The newly created IFC entity.</returns>\r\n      public static IFCAnyHandle CreateGenericIFCEntity(IFCExportInfoPair entityToCreate,\r\n         IFCFile file, Element element, string guid,\r\n         IFCAnyHandle ownerHistory, IFCAnyHandle objectPlacement, IFCAnyHandle representation)\r\n      {\r\n         // There is no need to check for valid entity type because that has been enforced inside\r\n         // IFCExportInfoPair, only default to IfcBuildingElementProxy when it is UnKnown type\r\n         IFCEntityType typeToUse = (entityToCreate.ExportInstance == IFCEntityType.UnKnown) ?\r\n            IFCEntityType.IfcBuildingElementProxy : entityToCreate.ExportInstance;\r\n         IFCAnyHandle genericIFCEntity = CreateInstance(file, typeToUse, element);\r\n\r\n         if (genericIFCEntity == null)\r\n            return null;\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(genericIFCEntity, IFCEntityType.IfcElement))\r\n            SetElement(genericIFCEntity, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(genericIFCEntity, IFCEntityType.IfcProduct))\r\n            SetProduct(genericIFCEntity, element, guid, ownerHistory, null, null, null, objectPlacement, representation);\r\n\r\n         SetPredefinedType(genericIFCEntity, entityToCreate);\r\n\r\n         // Special cases here.  TODO: Provide some interface to pass these in.\r\n         SetSpecificEntityData(genericIFCEntity, entityToCreate.ExportInstance, element);\r\n         return genericIFCEntity;\r\n      }\r\n\r\n      /// <summary>\r\n      /// This is a generic create method for all IFC Type Objects, mainly for MEP objects\r\n      /// </summary>\r\n      /// <param name=\"typeEntityToCreate\">Type entity to create</param>\r\n      /// <param name=\"elementType\">Element Type</param>\r\n      /// <param name=\"guid\">The GUID to use.</param>\r\n      /// <param name=\"file\">The IFC file</param>\r\n      /// <param name=\"propertySets\">Preperty Sets</param>\r\n      /// <param name=\"representationMaps\">RepresentationMap for geometry</param>\r\n      /// <returns>The IFC entity type handle.</returns>\r\n      /// <remarks>The elementType may be different than the element used to create\r\n      /// the geometry; as such, we don't want to create the GUID from the elementType.</remarks>\r\n      public static IFCAnyHandle CreateGenericIFCType(IFCExportInfoPair typeEntityToCreate,\r\n         Element elementType, string guid, IFCFile file, HashSet<IFCAnyHandle> propertySets,\r\n         IList<IFCAnyHandle> representationMaps)\r\n      {\r\n         // No need to check the valid entity type. It has been enforced in IFCExportInfoPair. Rather create IfcBuildingElementTypeProxyType when the instance is IfcBuildingELementProxy and the type is UnKnown.\r\n         // No type will be created if the Instance is Unknown too\r\n         if (typeEntityToCreate.ExportType == IFCEntityType.UnKnown && typeEntityToCreate.ExportInstance == IFCEntityType.UnKnown)\r\n            return null;\r\n\r\n         // IfcBuildingElementProxyType is not supported in IFC2x2.\r\n         IFCEntityType entityTypeToUse = typeEntityToCreate.ExportType;\r\n         string predefinedType = typeEntityToCreate.PredefinedType;\r\n         if (typeEntityToCreate.ExportType == IFCEntityType.UnKnown &&\r\n            typeEntityToCreate.ExportInstance == IFCEntityType.IfcBuildingElementProxy &&\r\n            !ExporterCacheManager.ExportOptionsCache.ExportAs2x2)\r\n         {\r\n            entityTypeToUse = IFCEntityType.IfcBuildingElementProxyType;\r\n            predefinedType = null;\r\n         }\r\n\r\n         if (entityTypeToUse == IFCEntityType.UnKnown)\r\n            return null;\r\n\r\n         IFCAnyHandle genericIFCType = CreateInstance(file, entityTypeToUse, elementType);\r\n         if (guid == null)\r\n         {\r\n            // If we haven't created the GUID by now, we still need to distinguish by at least the entity type.\r\n            IFCExportInfoPair typeEntityToCreateForGUID = new();\r\n            typeEntityToCreateForGUID.SetByTypeAndPredefinedType(entityTypeToUse, predefinedType);\r\n            guid = GUIDUtil.GenerateIFCGuidFrom(elementType, typeEntityToCreateForGUID);\r\n         }\r\n\r\n         string predefinedTypeOrDefault = typeEntityToCreate.GetPredefinedTypeOrDefault();\r\n         SetElementType(genericIFCType, elementType, ref predefinedTypeOrDefault, guid, propertySets, representationMaps);\r\n\r\n         // Earlier types in IFC2x_ may not have PredefinedType property. Ignore error\r\n         try\r\n         {\r\n            if (!string.IsNullOrEmpty(predefinedTypeOrDefault))\r\n            {\r\n               IFCAnyHandleUtil.SetAttribute(genericIFCType, \"PredefinedType\", predefinedTypeOrDefault, true);\r\n            }\r\n         }\r\n         catch { }\r\n\r\n         SetGenericTypeNonOptionalAttributes(genericIFCType, typeEntityToCreate.ExportType);\r\n\r\n         return genericIFCType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcPipeSegmentType, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"applicableOccurrence\">The attribute optionally defines the data type of the occurrence object.</param>\r\n      /// <param name=\"propertySets\">The property set(s) associated with the type.</param>\r\n      /// <param name=\"representationMaps\">The mapped geometries associated with the type.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <param name=\"elementType\">The type name.</param>\r\n      /// <param name=\"predefinedType\">The predefined types.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePipeSegmentType(IFCFile file, ElementType revitType,\r\n          string guid, HashSet<IFCAnyHandle> propertySets, IList<IFCAnyHandle> representationMaps,\r\n          IFCPipeSegmentType ifcPipeSegmentType)\r\n      {\r\n         IFCAnyHandle pipeSegmentType = CreateInstance(file, IFCEntityType.IfcPipeSegmentType, revitType);\r\n\r\n         string predefinedType = ifcPipeSegmentType.ToString();\r\n         SetElementType(pipeSegmentType, revitType, ref predefinedType, guid, propertySets, representationMaps);\r\n         IFCAnyHandleUtil.SetAttribute(pipeSegmentType, \"PredefinedType\", predefinedType);\r\n         return pipeSegmentType;\r\n      }\r\n\r\n      #endregion\r\n\r\n      /// <summary>\r\n      /// Creates an IfcFurnitureType, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"applicableOccurrence\">The attribute optionally defines the data type of the occurrence object.</param>\r\n      /// <param name=\"propertySets\">The property set(s) associated with the type.</param>\r\n      /// <param name=\"representationMaps\">The mapped geometries associated with the type.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <param name=\"elementType\">The type name.</param>\r\n      /// <param name=\"predefinedType\">The predefined types.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateFurnitureType(IFCFile file, ElementType revitType,\r\n          string guid, HashSet<IFCAnyHandle> propertySets, IList<IFCAnyHandle> representationMaps,\r\n          string elementTag, string elementType, string assemblyPlaceStr, string predefinedType)\r\n      {\r\n         IFCAnyHandle furnitureType = CreateInstance(file, IFCEntityType.IfcFurnitureType, revitType);\r\n\r\n         if (string.IsNullOrEmpty(assemblyPlaceStr))\r\n            assemblyPlaceStr = NamingUtil.GetOverrideStringValue(revitType, \"IfcAssemblyPlace\", null);\r\n\r\n         if (!string.IsNullOrEmpty(assemblyPlaceStr))\r\n         {\r\n            IFCAssemblyPlace assemblyPlaceOverride = IFCAssemblyPlace.NotDefined;\r\n            Enum.TryParse(assemblyPlaceStr, true, out assemblyPlaceOverride);\r\n            if (assemblyPlaceOverride != IFCAssemblyPlace.NotDefined)\r\n               assemblyPlaceStr = assemblyPlaceOverride.ToString();\r\n         }\r\n         else\r\n            assemblyPlaceStr = \"NOTDEFINED\";\r\n         IFCAnyHandleUtil.SetAttribute(furnitureType, \"AssemblyPlace\", assemblyPlaceStr, true);\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            predefinedType = IFCValidateEntry.GetValidIFCPredefinedTypeType(predefinedType, predefinedType, \"IFCFurnitureType\");\r\n         }\r\n\r\n         SetElementType(furnitureType, revitType, ref predefinedType, guid, propertySets, representationMaps);\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            IFCAnyHandleUtil.SetAttribute(furnitureType, \"PredefinedType\", predefinedType, true);\r\n         }\r\n\r\n         return furnitureType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcGroup, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateGroup(IFCFile file, string guid, IFCAnyHandle ownerHistory, string name,\r\n          string description, string objectType)\r\n      {\r\n         IFCAnyHandle group = CreateInstance(file, IFCEntityType.IfcGroup, null);\r\n         SetGroup(group, guid, ownerHistory, name, description, objectType);\r\n         return group;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcElectricalCircuit, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <returns>The handle.</returns>\r\n      /// <remarks>NOTE: this is deprecated in Coordination View 2.0, and missing from IFC4, so use sparingly.</remarks>\r\n      public static IFCAnyHandle CreateElectricalCircuit(IFCFile file, string guid, IFCAnyHandle ownerHistory, string name,\r\n          string description, string objectType)\r\n      {\r\n         IFCAnyHandle electricalCircuit = CreateInstance(file, IFCEntityType.IfcElectricalCircuit, null);\r\n         SetSystem(electricalCircuit, guid, ownerHistory, name, description, objectType);\r\n         return electricalCircuit;\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Creates an IfcDistributionSystem, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"entityToCreate\">The specific Entity (Enum) to create</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"longName\">The long name.</param>\r\n      /// <returns></returns>\r\n      public static IFCAnyHandle CreateDistributionSystem(IFCFile file, string guid, IFCAnyHandle ownerHistory, string name,\r\n         string description, string objectType, string longName, string predefinedType)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            return null;\r\n\r\n         IFCAnyHandle distributionSystem = CreateInstance(file, IFCEntityType.IfcDistributionSystem, null);\r\n         SetDistributionSystem(distributionSystem, guid, ownerHistory, name, description, objectType, longName, predefinedType);\r\n\r\n         return distributionSystem;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcDistributionCircuit, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"entityToCreate\">The specific Entity (Enum) to create</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"longName\">The long name.</param>\r\n      /// <returns></returns>\r\n      public static IFCAnyHandle CreateDistributionCircuit(IFCFile file, string guid, IFCAnyHandle ownerHistory, string name,\r\n         string description, string objectType, string longName, string predefinedType)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            return null;\r\n\r\n         IFCAnyHandle distributionCircuit = CreateInstance(file, IFCEntityType.IfcDistributionCircuit, null);\r\n         SetDistributionSystem(distributionCircuit, guid, ownerHistory, name, description, objectType, longName, predefinedType);\r\n\r\n         return distributionCircuit;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcSystem, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateSystem(IFCFile file, string guid, IFCAnyHandle ownerHistory, string name,\r\n          string description, string objectType)\r\n      {\r\n         IFCAnyHandle system = CreateInstance(file, IFCEntityType.IfcSystem, null);\r\n         SetGroup(system, guid, ownerHistory, name, description, objectType);\r\n         return system;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IfcBuildingSystem and assign it to the file. This is new in IFC4.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateBuildingSystem(IFCFile file, IFCExportInfoPair entityToCreate, string guid, IFCAnyHandle ownerHistory, string name,\r\n         string description, string objectType, string longName)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            return null;\r\n\r\n         IFCAnyHandle buildingSystem = CreateInstance(file, IFCEntityType.IfcBuildingSystem, null);\r\n         SetGroup(buildingSystem, guid, ownerHistory, name, description, objectType);\r\n         IFCAnyHandleUtil.SetAttribute(buildingSystem, \"PredefinedType\", entityToCreate.GetPredefinedTypeOrDefault(), true);\r\n         if (!string.IsNullOrEmpty(longName))\r\n            IFCAnyHandleUtil.SetAttribute(buildingSystem, \"LongName\", longName, false);\r\n\r\n         return buildingSystem;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IfcBuiltSystem and assign it to the file. This is new in IFC4.3.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateBuiltSystem(IFCFile file, IFCExportInfoPair entityToCreate, string guid, IFCAnyHandle ownerHistory, string name,\r\n         string description, string objectType, string longName)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4x3)\r\n            return null;\r\n\r\n         IFCAnyHandle builtSystem = CreateInstance(file, IFCEntityType.IfcBuiltSystem, null);\r\n         SetGroup(builtSystem, guid, ownerHistory, name, description, objectType);\r\n         IFCAnyHandleUtil.SetAttribute(builtSystem, \"PredefinedType\", entityToCreate.GetPredefinedTypeOrDefault(), true);\r\n         if (!string.IsNullOrEmpty(longName))\r\n            IFCAnyHandleUtil.SetAttribute(builtSystem, \"LongName\", longName, false);\r\n\r\n         return builtSystem;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcSystemFurnitureElementType, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"applicableOccurrence\">The attribute optionally defines the data type of the occurrence object.</param>\r\n      /// <param name=\"propertySets\">The property set(s) associated with the type.</param>\r\n      /// <param name=\"representationMaps\">The mapped geometries associated with the type.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <param name=\"elementType\">The type name.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateSystemFurnitureElementType(IFCFile file, ElementType revitType,\r\n         string guid, HashSet<IFCAnyHandle> propertySets,\r\n         IList<IFCAnyHandle> representationMaps, string predefinedType)\r\n      {\r\n         IFCAnyHandle systemFurnitureElementType = CreateInstance(file, IFCEntityType.IfcSystemFurnitureElementType, revitType);\r\n\r\n         SetElementType(systemFurnitureElementType, revitType, ref predefinedType, guid, propertySets, representationMaps);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 && !string.IsNullOrEmpty(predefinedType))\r\n            IFCAnyHandleUtil.SetAttribute(systemFurnitureElementType, \"PredefinedType\", predefinedType, true);\r\n         \r\n         return systemFurnitureElementType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcAnnotation and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity.</param>\r\n      /// <param name=\"predefinedType\">The predefined type, for IFC4x3+.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateAnnotation(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string predefinedType)\r\n      {\r\n         IFCAnyHandle annotation = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcAnnotation, element);\r\n         SetProduct(annotation, element, guid, ownerHistory, null, null, null, objectPlacement, representation);\r\n         if (predefinedType != null && ExporterCacheManager.ExportOptionsCache.ExportAs4x3)\r\n         {\r\n            IFCAnyHandleUtil.SetAttribute(annotation, \"PredefinedType\", predefinedType, true);\r\n         }\r\n         return annotation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcBuildingElementProxy, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <param name=\"compositionType\">The element composition of the proxy.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateBuildingElementProxy(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string predefinedType)\r\n      {\r\n         IFCAnyHandle buildingElementProxy = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcBuildingElementProxy, element);\r\n         // We do not support CompositionType for IFC2x3, as it does not match the \r\n         // IfcBuildingElementProxyType \"PredefinedType\" values.\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            IFCAnyHandleUtil.SetAttribute(buildingElementProxy, \"PredefinedType\", predefinedType, true);\r\n         }\r\n         SetElement(buildingElementProxy, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return buildingElementProxy;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcCartesianTransformOperator3D, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"axis1\">The X direction of the transformation coordinate system.</param>\r\n      /// <param name=\"axis2\">The Y direction of the transformation coordinate system.</param>\r\n      /// <param name=\"localOrigin\">The origin of the transformation coordinate system.</param>\r\n      /// <param name=\"scale\">The scale factor.</param>\r\n      /// <param name=\"axis3\">The Z direction of the transformation coordinate system.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateCartesianTransformationOperator3D(IFCFile file, IFCAnyHandle axis1, IFCAnyHandle axis2,\r\n          IFCAnyHandle localOrigin, double? scale, IFCAnyHandle axis3)\r\n      {\r\n         IFCAnyHandle cartesianTransformationOperator3D = CreateInstance(file, IFCEntityType.IfcCartesianTransformationOperator3D, null);\r\n         IFCAnyHandleUtil.SetAttribute(cartesianTransformationOperator3D, \"Axis3\", axis3);\r\n         SetCartesianTransformationOperator(cartesianTransformationOperator3D, axis1, axis2, localOrigin, scale);\r\n         return cartesianTransformationOperator3D;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcColourRgb and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"red\">The red colour component value.</param>\r\n      /// <param name=\"green\">The green colour component value.</param>\r\n      /// <param name=\"blue\">The blue colour component value.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateColourRgb(IFCFile file, string name, double red, double green, double blue)\r\n      {\r\n         IFCAnyHandle colourRgb = CreateInstance(file, IFCEntityType.IfcColourRgb, null);\r\n         IFCAnyHandleUtil.SetAttribute(colourRgb, \"Name\", name);\r\n         IFCAnyHandleUtil.SetAttribute(colourRgb, \"Red\", red);\r\n         IFCAnyHandleUtil.SetAttribute(colourRgb, \"Green\", green);\r\n         IFCAnyHandleUtil.SetAttribute(colourRgb, \"Blue\", blue);\r\n         return colourRgb;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcConnectionSurfaceGeometry and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"surfaceOnRelatingElement\">The handle to the surface on the relating element.  </param>\r\n      /// <param name=\"surfaceOnRelatedElement\">The handle to the surface on the related element.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateConnectionSurfaceGeometry(IFCFile file, IFCAnyHandle surfaceOnRelatingElement,\r\n          IFCAnyHandle surfaceOnRelatedElement)\r\n      {\r\n         IFCAnyHandle connectionSurfaceGeometry = CreateInstance(file, IFCEntityType.IfcConnectionSurfaceGeometry, null);\r\n         IFCAnyHandleUtil.SetAttribute(connectionSurfaceGeometry, \"SurfaceOnRelatingElement\", surfaceOnRelatingElement);\r\n         IFCAnyHandleUtil.SetAttribute(connectionSurfaceGeometry, \"SurfaceOnRelatedElement\", surfaceOnRelatedElement);\r\n         return connectionSurfaceGeometry;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcCurveBoundedPlane and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"basisSurface\">The surface to be bound.</param>\r\n      /// <param name=\"outerBoundary\">The outer boundary of the surface.</param>\r\n      /// <param name=\"innerBoundaries\">An optional set of inner boundaries.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateCurveBoundedPlane(IFCFile file, IFCAnyHandle basisSurface, IFCAnyHandle outerBoundary,\r\n          ISet<IFCAnyHandle> innerBoundaries)\r\n      {\r\n         IFCAnyHandle curveBoundedPlane = CreateInstance(file, IFCEntityType.IfcCurveBoundedPlane, null);\r\n         IFCAnyHandleUtil.SetAttribute(curveBoundedPlane, \"BasisSurface\", basisSurface);\r\n         IFCAnyHandleUtil.SetAttribute(curveBoundedPlane, \"OuterBoundary\", outerBoundary);\r\n         IFCAnyHandleUtil.SetAttribute(curveBoundedPlane, \"InnerBoundaries\", innerBoundaries);\r\n         return curveBoundedPlane;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcCurveBoundedSurface and assign it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"basisSurface\">The surface to be bound</param>\r\n      /// <param name=\"boundaries\">The curve boundaries</param>\r\n      /// <param name=\"implicitOuter\">Whether it uses implicit boundaries</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateCurveBoundedSurface(IFCFile file, IFCAnyHandle basisSurface, HashSet<IFCAnyHandle> boundaries, bool implicitOuter)\r\n      {\r\n         IFCAnyHandle curveBoundedSurface = CreateInstance(file, IFCEntityType.IfcCurveBoundedSurface, null);\r\n         IFCAnyHandleUtil.SetAttribute(curveBoundedSurface, \"BasisSurface\", basisSurface);\r\n         IFCAnyHandleUtil.SetAttribute(curveBoundedSurface, \"Boundaries\", boundaries);\r\n         IFCAnyHandleUtil.SetAttribute(curveBoundedSurface, \"ImplicitOuter\", implicitOuter);\r\n         return curveBoundedSurface;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcRectangularTrimmedSurface and assign it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"basisSurface\">The surface to be bound/trimmed</param>\r\n      /// <param name=\"u1\">First u parametric value</param>\r\n      /// <param name=\"v1\">Fisrt v parametric value</param>\r\n      /// <param name=\"u2\">Second u parametric value</param>\r\n      /// <param name=\"v2\">Second v parametric value</param>\r\n      /// <param name=\"uSense\">direction sense of the first parameter of the trim surface compared to the u of the basissurface</param>\r\n      /// <param name=\"vSense\">direction sense of the second parameter of the trim surface compared to the v of the basissurface</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateRectangularTrimmedSurface(IFCFile file, IFCAnyHandle basisSurface, double u1, double v1, double u2, double v2,\r\n                                  bool uSense, bool vSense)\r\n      {\r\n         IFCAnyHandle rectangularTrimmedSurface = CreateInstance(file, IFCEntityType.IfcRectangularTrimmedSurface, null);\r\n         IFCAnyHandleUtil.SetAttribute(rectangularTrimmedSurface, \"BasisSurface\", basisSurface);\r\n         IFCAnyHandleUtil.SetAttribute(rectangularTrimmedSurface, \"U1\", u1);\r\n         IFCAnyHandleUtil.SetAttribute(rectangularTrimmedSurface, \"V1\", v1);\r\n         IFCAnyHandleUtil.SetAttribute(rectangularTrimmedSurface, \"U2\", u2);\r\n         IFCAnyHandleUtil.SetAttribute(rectangularTrimmedSurface, \"V2\", v2);\r\n         IFCAnyHandleUtil.SetAttribute(rectangularTrimmedSurface, \"Usense\", uSense);\r\n         IFCAnyHandleUtil.SetAttribute(rectangularTrimmedSurface, \"Vsense\", vSense);\r\n\r\n         return rectangularTrimmedSurface;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcBSplineCurveWithKnots, and assigns it to the handle\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"degree\">The degree of the b-spline curve</param>\r\n      /// <param name=\"controlPointLists\">The list of control points</param>\r\n      /// <param name=\"curveForm\">The form of the b-spline curve</param>\r\n      /// <param name=\"closedCurve\">The flag that indicates whether the curve is closed or not</param>\r\n      /// <param name=\"selfIntersect\">The flag that indicates whether the curve is self-intersect or not</param>\r\n      /// <param name=\"knotMultiplicities\">The knot multiplicities</param>\r\n      /// <param name=\"knots\">The knots</param>\r\n      /// <param name=\"knotSpec\">The type of the knots</param>\r\n      /// <returns>The handle</returns>\r\n      public static IFCAnyHandle CreateBSplineCurveWithKnots(IFCFile file, int degree, IList<IFCAnyHandle> controlPointLists, IFC4.IFCBSplineCurveForm curveForm,\r\n          IFCLogical closedCurve, IFCLogical selfIntersect, IList<int> knotMultiplicities, IList<double> knots, IFC4.IFCKnotType knotSpec)\r\n      {\r\n         //TODO: validate parameters\r\n         IFCAnyHandle bSplineCurveWithKnots = CreateInstance(file, IFCEntityType.IfcBSplineCurveWithKnots, null);\r\n         SetBSplineCurveWithKnots(bSplineCurveWithKnots, degree, controlPointLists, curveForm, closedCurve, selfIntersect, knotMultiplicities, knots, knotSpec);\r\n         return bSplineCurveWithKnots;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcRationalBSplineCurveWithKnots, and assigns it to the handle\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"degree\">The degree of the b-spline curve</param>\r\n      /// <param name=\"controlPointLists\">The list of control points</param>\r\n      /// <param name=\"curveForm\">The form of the b-spline curve</param>\r\n      /// <param name=\"closedCurve\">The flag that indicates whether the curve is closed or not</param>\r\n      /// <param name=\"selfIntersect\">The flag that indicates whether the curve is self-intersect or not</param>\r\n      /// <param name=\"knotMultiplicities\">The knot multiplicities</param>\r\n      /// <param name=\"knots\">The knots</param>\r\n      /// <param name=\"knotSpec\">The type of the knots</param>\r\n      /// <param name=\"weightsData\">The weights</param>\r\n      /// <returns>The handle</returns>\r\n      public static IFCAnyHandle CreateRationalBSplineCurveWithKnots(IFCFile file, int degree, IList<IFCAnyHandle> controlPointLists, IFC4.IFCBSplineCurveForm curveForm,\r\n          IFCLogical closedCurve, IFCLogical selfIntersect, IList<int> knotMultiplicities, IList<double> knots, IFC4.IFCKnotType knotSpec, IList<double> weightsData)\r\n      {\r\n         //TODO: validate parameters\r\n         IFCAnyHandle rationBSplineCurveWithKnots = CreateInstance(file, IFCEntityType.IfcRationalBSplineCurveWithKnots, null);\r\n         IFCAnyHandleUtil.SetAttribute(rationBSplineCurveWithKnots, \"WeightsData\", weightsData);\r\n         SetBSplineCurveWithKnots(rationBSplineCurveWithKnots, degree, controlPointLists, curveForm, closedCurve, selfIntersect, knotMultiplicities, knots, knotSpec);\r\n         return rationBSplineCurveWithKnots;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets the values of an IfcBSplineSurface.\r\n      /// </summary>\r\n      /// <param name=\"bsplineSurface\">The IfcBSplineSurface entity.</param>\r\n      /// <param name=\"uDegree\">algebraic degree of basis functions in u</param>\r\n      /// <param name=\"vDegree\">algebraic degree of basis functions in v</param>\r\n      /// <param name=\"controlPointsList\">the list of control points</param>\r\n      /// <param name=\"surfaceForm\">enum of the surface type</param>\r\n      /// <param name=\"uClosed\">whether the surface is closed in the u direction</param>\r\n      /// <param name=\"vClosed\">whether the surface is closed in the v direction</param>\r\n      /// <param name=\"selfIntersect\">whether the surface is self-intersecting</param>\r\n      private static void SetBSplineSurface(IFCAnyHandle bsplineSurface, int uDegree, int vDegree, IList<IList<IFCAnyHandle>> controlPointsList,\r\n                      IFC4.IFCBSplineSurfaceForm surfaceForm, IFCLogical uClosed, IFCLogical vClosed, IFCLogical selfIntersect)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(bsplineSurface, \"UDegree\", uDegree);\r\n         IFCAnyHandleUtil.SetAttribute(bsplineSurface, \"VDegree\", vDegree);\r\n         IFCAnyHandleUtil.SetAttribute(bsplineSurface, \"ControlPointsList\", controlPointsList, 2, null, 2, null);\r\n         IFCAnyHandleUtil.SetAttribute(bsplineSurface, \"SurfaceForm\", surfaceForm);\r\n         IFCAnyHandleUtil.SetAttribute(bsplineSurface, \"UClosed\", uClosed);\r\n         IFCAnyHandleUtil.SetAttribute(bsplineSurface, \"VClosed\", vClosed);\r\n         IFCAnyHandleUtil.SetAttribute(bsplineSurface, \"SelfIntersect\", selfIntersect);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcBSplineSurface and assigns it to the handle\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"uDegree\">algebraic degree of basis functions in u</param>\r\n      /// <param name=\"vDegree\">algebraic degree of basis functions in v</param>\r\n      /// <param name=\"controlPointsList\">the list of control points</param>\r\n      /// <param name=\"surfaceForm\">enum of the surface type</param>\r\n      /// <param name=\"uClosed\">whether the surface is closed in the u direction</param>\r\n      /// <param name=\"vClosed\">whether the surface is closed in the v direction</param>\r\n      /// <param name=\"selfIntersect\">whether the surface is self-intersecting</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateBSplineSurface(IFCFile file, int uDegree, int vDegree, IList<IList<IFCAnyHandle>> controlPointsList,\r\n                      IFC4.IFCBSplineSurfaceForm surfaceForm, IFCLogical uClosed, IFCLogical vClosed, IFCLogical selfIntersect)\r\n      {\r\n         IFCAnyHandle bSplineSurface = CreateInstance(file, IFCEntityType.IfcBSplineSurface, null);\r\n         SetBSplineSurface(bSplineSurface, uDegree, vDegree, controlPointsList, surfaceForm, uClosed, vClosed, selfIntersect);\r\n\r\n         return bSplineSurface;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets the values of an IfcBSplineSurfaceWithKnots.\r\n      /// </summary>\r\n      /// <param name=\"bSplineSurfaceWithKnots\">The IfcBSplineSurfaceWithKnots handle.</param>\r\n      /// <param name=\"uDegree\">algebraic degree of basis functions in u</param>\r\n      /// <param name=\"vDegree\">algebraic degree of basis functions in v</param>\r\n      /// <param name=\"controlPointsList\">the list of control points</param>\r\n      /// <param name=\"surfaceForm\">enum of the surface type</param>\r\n      /// <param name=\"uClosed\">whether the surface is closed in the u direction</param>\r\n      /// <param name=\"vClosed\">whether the surface is closed in the v direction</param>\r\n      /// <param name=\"selfIntersect\">whether the surface is self-intersecting</param>\r\n      /// <param name=\"uMultiplicities\">The multiplicities of the knots in the u parameter direction</param>\r\n      /// <param name=\"vMultiplicities\">The multiplicities of the knots in the v parameter direction</param>\r\n      /// <param name=\"uKnots\">The list of the distinct knots in the u parameter direction</param>\r\n      /// <param name=\"vKnots\">The list of the distinct knots in the v parameter direction</param>\r\n      /// <param name=\"knotSpec\">The description of the knot type.</param>\r\n      public static void SetBSplineSurfaceWithKnots(IFCAnyHandle bSplineSurfaceWithKnots, int uDegree, int vDegree, IList<IList<IFCAnyHandle>> controlPointsList,\r\n                      IFC4.IFCBSplineSurfaceForm surfaceForm, IFCLogical uClosed, IFCLogical vClosed, IFCLogical selfIntersect, IList<int> uMultiplicities, IList<int> vMultiplicities,\r\n                      IList<double> uKnots, IList<double> vKnots, IFC4.IFCKnotType knotSpec)\r\n      {\r\n         SetBSplineSurface(bSplineSurfaceWithKnots, uDegree, vDegree, controlPointsList, surfaceForm, uClosed, vClosed, selfIntersect);\r\n         IFCAnyHandleUtil.SetAttribute(bSplineSurfaceWithKnots, \"UMultiplicities\", uMultiplicities);\r\n         IFCAnyHandleUtil.SetAttribute(bSplineSurfaceWithKnots, \"VMultiplicities\", vMultiplicities);\r\n         IFCAnyHandleUtil.SetAttribute(bSplineSurfaceWithKnots, \"UKnots\", uKnots);\r\n         IFCAnyHandleUtil.SetAttribute(bSplineSurfaceWithKnots, \"VKnots\", vKnots);\r\n         IFCAnyHandleUtil.SetAttribute(bSplineSurfaceWithKnots, \"KnotSpec\", knotSpec);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcBSplineSurfaceWithKnots and assigns it to the handle\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"uDegree\">algebraic degree of basis functions in u</param>\r\n      /// <param name=\"vDegree\">algebraic degree of basis functions in v</param>\r\n      /// <param name=\"controlPointsList\">the list of control points</param>\r\n      /// <param name=\"surfaceForm\">enum of the surface type</param>\r\n      /// <param name=\"uClosed\">whether the surface is closed in the u direction</param>\r\n      /// <param name=\"vClosed\">whether the surface is closed in the v direction</param>\r\n      /// <param name=\"selfIntersect\">whether the surface is self-intersecting</param>\r\n      /// <param name=\"uMultiplicities\">The multiplicities of the knots in the u parameter direction</param>\r\n      /// <param name=\"vMultiplicities\">The multiplicities of the knots in the v parameter direction</param>\r\n      /// <param name=\"uKnots\">The list of the distinct knots in the u parameter direction</param>\r\n      /// <param name=\"vKnots\">The list of the distinct knots in the v parameter direction</param>\r\n      /// <param name=\"knotSpec\">The description of the knot type.</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateBSplineSurfaceWithKnots(IFCFile file, int uDegree, int vDegree, IList<IList<IFCAnyHandle>> controlPointsList,\r\n                      IFC4.IFCBSplineSurfaceForm surfaceForm, IFCLogical uClosed, IFCLogical vClosed, IFCLogical selfIntersect, List<int> uMultiplicities, List<int> vMultiplicities,\r\n                      List<double> uKnots, List<double> vKnots, IFC4.IFCKnotType knotSpec)\r\n      {\r\n         IFCAnyHandle bSplineSurfaceWithKnots = CreateInstance(file, IFCEntityType.IfcBSplineSurfaceWithKnots, null);\r\n         SetBSplineSurfaceWithKnots(bSplineSurfaceWithKnots, uDegree, vDegree, controlPointsList, surfaceForm, uClosed, vClosed, selfIntersect,\r\n            uMultiplicities, vMultiplicities, uKnots, vKnots, knotSpec);\r\n         return bSplineSurfaceWithKnots;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcRationalBSplineSurfaceWithKnots and assigns it to the handle\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"uDegree\">algebraic degree of basis functions in u</param>\r\n      /// <param name=\"vDegree\">algebraic degree of basis functions in v</param>\r\n      /// <param name=\"controlPointsList\">the list of control points</param>\r\n      /// <param name=\"surfaceForm\">enum of the surface type</param>\r\n      /// <param name=\"uClosed\">whether the surface is closed in the u direction</param>\r\n      /// <param name=\"vClosed\">whether the surface is closed in the v direction</param>\r\n      /// <param name=\"selfIntersect\">whether the surface is self-intersecting</param>\r\n      /// <param name=\"uMultiplicities\">The multiplicities of the knots in the u parameter direction</param>\r\n      /// <param name=\"vMultiplicities\">The multiplicities of the knots in the v parameter direction</param>\r\n      /// <param name=\"uKnots\">The list of the distinct knots in the u parameter direction</param>\r\n      /// <param name=\"vKnots\">The list of the distinct knots in the v parameter direction</param>\r\n      /// <param name=\"knotSpec\">The description of the knot type.</param>\r\n      /// <param name=\"weightsData\">The double array of weights for the control points.</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateRationalBSplineSurfaceWithKnots(IFCFile file, int uDegree, int vDegree, IList<IList<IFCAnyHandle>> controlPointsList,\r\n                      IFC4.IFCBSplineSurfaceForm surfaceForm, IFCLogical uClosed, IFCLogical vClosed, IFCLogical selfIntersect, IList<int> uMultiplicities, IList<int> vMultiplicities,\r\n                      IList<double> uKnots, IList<double> vKnots, IFC4.IFCKnotType knotSpec, IList<IList<double>> weightsData)\r\n      {\r\n         IFCAnyHandle rationalBSplineSurfaceWithKnots = CreateInstance(file, IFCEntityType.IfcRationalBSplineSurfaceWithKnots, null);\r\n         SetBSplineSurfaceWithKnots(rationalBSplineSurfaceWithKnots, uDegree, vDegree, controlPointsList, surfaceForm, uClosed, vClosed, selfIntersect,\r\n             uMultiplicities, vMultiplicities, uKnots, vKnots, knotSpec);\r\n         IFCAnyHandleUtil.SetAttribute(rationalBSplineSurfaceWithKnots, \"WeightsData\", weightsData, 2, null, 2, null);\r\n         return rationalBSplineSurfaceWithKnots;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcDistributionControlElement, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <param name=\"controlElementId\">The ControlElement Point Identification assigned to this control element by the Building Automation System.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateDistributionControlElement(ExporterIFC exporterIFC, Element element,\r\n          string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, string controlElementId)\r\n      {\r\n         IFCAnyHandle distributionControlElement = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcDistributionControlElement, element);\r\n         // ControlElementId has been removed in IFC4 in favor of using Classification\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            string ifcelementType = null;\r\n            ParameterUtil.GetStringValueFromElement(element, \"IfcElementType\", out ifcelementType);\r\n            IFCAnyHandleUtil.SetAttribute(distributionControlElement, \"ControlElementId\", controlElementId);\r\n         }\r\n         SetElement(distributionControlElement, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return distributionControlElement;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcDistributionElement, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateDistributionElement(ExporterIFC exporterIFC, Element element,\r\n          string guid, IFCAnyHandle ownerHistory, IFCAnyHandle objectPlacement, IFCAnyHandle representation)\r\n      {\r\n         IFCAnyHandle distributionElement = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcDistributionElement, element);\r\n         SetElement(distributionElement, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return distributionElement;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcDistributionPort and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity.</param>\r\n      /// <param name=\"flowDirection\">The flow direction.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateDistributionPort(ExporterIFC exporterIFC, Element element,\r\n          string guid, IFCAnyHandle ownerHistory, IFCAnyHandle objectPlacement, IFCAnyHandle representation, IFCFlowDirection? flowDirection)\r\n      {\r\n         IFCAnyHandle distributionPort = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcDistributionPort, element);\r\n         IFCAnyHandleUtil.SetAttribute(distributionPort, \"FlowDirection\", flowDirection);\r\n         SetProduct(distributionPort, element, guid, ownerHistory, null, null, null, objectPlacement, representation);\r\n\r\n         return distributionPort;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcDoor, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <param name=\"overallHeight\">The height of the door.</param>\r\n      /// <param name=\"overallWidth\">The width of the door.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateDoor(ExporterIFC exporterIFC, Element element,\r\n          string guid, IFCAnyHandle ownerHistory, IFCAnyHandle objectPlacement, IFCAnyHandle representation,\r\n          double? overallHeight, double? overallWidth, string preDefinedType, string operationType, string userDefinedOperationType)\r\n      {\r\n         IFCAnyHandle door = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcDoor, element);\r\n         IFCAnyHandleUtil.SetAttribute(door, \"OverallHeight\", overallHeight);\r\n         IFCAnyHandleUtil.SetAttribute(door, \"OverallWidth\", overallWidth);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            string validatedPreDefinedType = IFCValidateEntry.ValidateStrEnum<IFC4.IFCDoorType>(preDefinedType);\r\n            IFCAnyHandleUtil.SetAttribute(door, \"PreDefinedType\", validatedPreDefinedType, true);\r\n            string validatedOperationType = IFCValidateEntry.ValidateStrEnum<IFC4.IFCDoorTypeOperation>(operationType);\r\n            IFCAnyHandleUtil.SetAttribute(door, \"OperationType\", validatedOperationType, true);\r\n            if (String.Compare(validatedOperationType, \"USERDEFINED\", true) == 0 && !string.IsNullOrEmpty(userDefinedOperationType))\r\n               IFCAnyHandleUtil.SetAttribute(door, \"UserDefinedOperationType\", userDefinedOperationType);\r\n         }\r\n         SetElement(door, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return door;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcDoorLiningProperties, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"liningDepth\">The depth of the lining.</param>\r\n      /// <param name=\"liningThickness\">The thickness of the lining.</param>\r\n      /// <param name=\"thresholdDepth\">The depth of the threshold.</param>\r\n      /// <param name=\"thresholdThickness\">The thickness of the threshold.</param>\r\n      /// <param name=\"transomThickness\">The thickness of the transom.</param>\r\n      /// <param name=\"transomOffset\">The offset of the transom.</param>\r\n      /// <param name=\"liningOffset\">The offset of the lining.</param>\r\n      /// <param name=\"thresholdOffset\">The offset of the threshold.</param>\r\n      /// <param name=\"casingThickness\">The thickness of the casing.</param>\r\n      /// <param name=\"casingDepth\">The depth of the casing.</param>\r\n      /// <param name=\"shapeAspectStyle\">The shape aspect for the door style.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateDoorLiningProperties(IFCFile file,\r\n          string guid, IFCAnyHandle ownerHistory, string name, string description, double? liningDepth,\r\n          double? liningThickness, double? thresholdDepth, double? thresholdThickness, double? transomThickness,\r\n          double? transomOffset, double? liningOffset, double? thresholdOffset, double? casingThickness,\r\n          double? casingDepth, IFCAnyHandle shapeAspectStyle)\r\n      {\r\n         IFCAnyHandle doorLiningProperties = CreateInstance(file, IFCEntityType.IfcDoorLiningProperties, null);\r\n         IFCAnyHandleUtil.SetAttribute(doorLiningProperties, \"LiningDepth\", liningDepth);\r\n         IFCAnyHandleUtil.SetAttribute(doorLiningProperties, \"LiningThickness\", liningThickness);\r\n         IFCAnyHandleUtil.SetAttribute(doorLiningProperties, \"ThresholdDepth\", thresholdDepth);\r\n         IFCAnyHandleUtil.SetAttribute(doorLiningProperties, \"ThresholdThickness\", thresholdThickness);\r\n         IFCAnyHandleUtil.SetAttribute(doorLiningProperties, \"TransomThickness\", transomThickness);\r\n         IFCAnyHandleUtil.SetAttribute(doorLiningProperties, \"TransomOffset\", transomOffset);\r\n         IFCAnyHandleUtil.SetAttribute(doorLiningProperties, \"LiningOffset\", liningOffset);\r\n         IFCAnyHandleUtil.SetAttribute(doorLiningProperties, \"ThresholdOffset\", thresholdOffset);\r\n         IFCAnyHandleUtil.SetAttribute(doorLiningProperties, \"CasingThickness\", casingThickness);\r\n         IFCAnyHandleUtil.SetAttribute(doorLiningProperties, \"CasingDepth\", casingDepth);\r\n         IFCAnyHandleUtil.SetAttribute(doorLiningProperties, \"ShapeAspectStyle\", shapeAspectStyle);\r\n         SetPropertySetDefinition(doorLiningProperties, guid, ownerHistory, name, description);\r\n         return doorLiningProperties;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcWindowLiningProperties, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"liningDepth\">The depth of the lining.</param>\r\n      /// <param name=\"liningThickness\">The thickness of the lining.</param>\r\n      /// <param name=\"transomThickness\">The thickness of the transom(s).</param>\r\n      /// <param name=\"mullionThickness\">The thickness of the mullion(s).</param>\r\n      /// <param name=\"firstTransomOffset\">The offset of the first transom.</param>\r\n      /// <param name=\"secondTransomOffset\">The offset of the second transom.</param>\r\n      /// <param name=\"firstMullionOffset\">The offset of the first mullion.</param>\r\n      /// <param name=\"secondMullionOffset\">The offset of the second mullion.</param>\r\n      /// <param name=\"shapeAspectStyle\">The shape aspect for the window style.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateWindowLiningProperties(IFCFile file,\r\n          string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n          double? liningDepth, double? liningThickness, double? transomThickness,\r\n          double? mullionThickness, double? firstTransomOffset, double? secondTransomOffset,\r\n          double? firstMullionOffset, double? secondMullionOffset, IFCAnyHandle shapeAspectStyle)\r\n      {\r\n         IFCAnyHandle windowLiningProperties = CreateInstance(file, IFCEntityType.IfcWindowLiningProperties, null);\r\n         IFCAnyHandleUtil.SetAttribute(windowLiningProperties, \"LiningDepth\", liningDepth);\r\n         IFCAnyHandleUtil.SetAttribute(windowLiningProperties, \"LiningThickness\", liningThickness);\r\n         IFCAnyHandleUtil.SetAttribute(windowLiningProperties, \"TransomThickness\", transomThickness);\r\n         IFCAnyHandleUtil.SetAttribute(windowLiningProperties, \"MullionThickness\", mullionThickness);\r\n         IFCAnyHandleUtil.SetAttribute(windowLiningProperties, \"FirstTransomOffset\", firstTransomOffset);\r\n         IFCAnyHandleUtil.SetAttribute(windowLiningProperties, \"SecondTransomOffset\", secondTransomOffset);\r\n         IFCAnyHandleUtil.SetAttribute(windowLiningProperties, \"FirstMullionOffset\", firstMullionOffset);\r\n         IFCAnyHandleUtil.SetAttribute(windowLiningProperties, \"SecondMullionOffset\", secondMullionOffset);\r\n         IFCAnyHandleUtil.SetAttribute(windowLiningProperties, \"ShapeAspectStyle\", shapeAspectStyle);\r\n         SetPropertySetDefinition(windowLiningProperties, guid, ownerHistory, name, description);\r\n         return windowLiningProperties;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcDoorPanelProperties, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"panelDepth\">The depth of the panel.</param>\r\n      /// <param name=\"panelOperation\">The panel operation.</param>\r\n      /// <param name=\"panelWidth\">The width of the panel.</param>\r\n      /// <param name=\"panelPosition\">The panel position.</param>\r\n      /// <param name=\"shapeAspectStyle\">The shape aspect for the door style.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateDoorPanelProperties(IFCFile file,\r\n          string guid, IFCAnyHandle ownerHistory, string name, string description, double? panelDepth,\r\n          string panelOperation, double? panelWidth, string panelPosition, IFCAnyHandle shapeAspectStyle)\r\n      {\r\n         IFCAnyHandle doorPanelProperties = CreateInstance(file, IFCEntityType.IfcDoorPanelProperties, null);\r\n         IFCAnyHandleUtil.SetAttribute(doorPanelProperties, \"PanelDepth\", panelDepth);\r\n         IFCAnyHandleUtil.SetAttribute(doorPanelProperties, \"PanelWidth\", panelWidth);\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            panelOperation = IFCValidateEntry.ValidateStrEnum<IFC4.IFCDoorPanelOperation>(panelOperation);\r\n            panelPosition = IFCValidateEntry.ValidateStrEnum<IFC4.IFCDoorPanelPosition>(panelPosition);\r\n         }\r\n         else\r\n         {\r\n            panelOperation = IFCValidateEntry.ValidateStrEnum<IFCDoorPanelOperation>(panelOperation);\r\n            panelPosition = IFCValidateEntry.ValidateStrEnum<IFCDoorPanelPosition>(panelPosition);\r\n         }\r\n         IFCAnyHandleUtil.SetAttribute(doorPanelProperties, \"PanelOperation\", panelOperation, true);\r\n         IFCAnyHandleUtil.SetAttribute(doorPanelProperties, \"PanelPosition\", panelPosition, true);\r\n\r\n         IFCAnyHandleUtil.SetAttribute(doorPanelProperties, \"ShapeAspectStyle\", shapeAspectStyle);\r\n         SetPropertySetDefinition(doorPanelProperties, guid, ownerHistory, name, description);\r\n         return doorPanelProperties;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcWindowPanelProperties, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"operationType\">The panel operation.</param>\r\n      /// <param name=\"positionType\">The panel position.</param>\r\n      /// <param name=\"frameDepth\">The depth of the frame.</param>\r\n      /// <param name=\"frameThickness\">The thickness of the frame.</param>\r\n      /// <param name=\"shapeAspectStyle\">The shape aspect for the window style.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateWindowPanelProperties(IFCFile file,\r\n          string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n          IFCWindowPanelOperation operationType, IFCWindowPanelPosition positionType,\r\n          double? frameDepth, double? frameThickness, IFCAnyHandle shapeAspectStyle)\r\n      {\r\n         IFCAnyHandle windowPanelProperties = CreateInstance(file, IFCEntityType.IfcWindowPanelProperties, null);\r\n         IFCAnyHandleUtil.SetAttribute(windowPanelProperties, \"OperationType\", operationType);\r\n         IFCAnyHandleUtil.SetAttribute(windowPanelProperties, \"PanelPosition\", positionType);\r\n         IFCAnyHandleUtil.SetAttribute(windowPanelProperties, \"FrameDepth\", frameDepth);\r\n         IFCAnyHandleUtil.SetAttribute(windowPanelProperties, \"FrameThickness\", frameThickness);\r\n         IFCAnyHandleUtil.SetAttribute(windowPanelProperties, \"ShapeAspectStyle\", shapeAspectStyle);\r\n         SetPropertySetDefinition(windowPanelProperties, guid, ownerHistory, name, description);\r\n         return windowPanelProperties;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcDoorStyle, and assigns it to the file. [DEPRECATED from IFC4 onward]\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"applicableOccurrence\">The attribute optionally defines the data type of the occurrence object.</param>\r\n      /// <param name=\"propertySets\">The property set(s) associated with the type.</param>\r\n      /// <param name=\"representationMaps\">The mapped geometries associated with the type.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <param name=\"operationType\">The operation type.</param>\r\n      /// <param name=\"constructionType\">The construction type.</param>\r\n      /// <param name=\"parameterTakesPrecedence\">True if the parameter given in the attached lining and panel properties exactly define the geometry,\r\n      /// false if the attached style shape takes precedence.</param>\r\n      /// <param name=\"sizeable\">True if the attached IfcMappedRepresentation (if given) can be sized (using scale factor of transformation), false if not.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateDoorStyle(IFCFile file, Element revitType, string guid,\r\n         HashSet<IFCAnyHandle> propertySets, IList<IFCAnyHandle> representationMaps,\r\n         string operationType, IFCDoorStyleConstruction constructionType,\r\n         bool parameterTakesPrecedence, bool sizeable)\r\n      {\r\n         IFCAnyHandle doorStyle = CreateInstance(file, IFCEntityType.IfcDoorStyle, revitType);\r\n         IFCAnyHandleUtil.SetAttribute(doorStyle, \"OperationType\", operationType, true);\r\n         IFCAnyHandleUtil.SetAttribute(doorStyle, \"ConstructionType\", constructionType);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n            IFCAnyHandleUtil.SetAttribute(doorStyle, \"ParameterTakesPrecedence\", parameterTakesPrecedence);\r\n         IFCAnyHandleUtil.SetAttribute(doorStyle, \"Sizeable\", sizeable);\r\n\r\n         (IFCAnyHandle ownerHistory, string name, string description) rootData = DefaultRootData(revitType);\r\n         SetTypeProduct(doorStyle, revitType, guid, rootData.ownerHistory, rootData.name, rootData.description, null, propertySets, representationMaps, null);\r\n         return doorStyle;\r\n      }\r\n\r\n      private static string GetValidatedDoorTypeOperation(string originalOperation)\r\n      {\r\n         string validatedPreDefinedType =\r\n            IFCValidateEntry.ValidateStrEnum<IFC4.IFCDoorTypeOperation>(originalOperation);\r\n         if (validatedPreDefinedType != null && ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4x3)\r\n            return validatedPreDefinedType;\r\n\r\n         validatedPreDefinedType =\r\n            IFCValidateEntry.ValidateStrEnum<IFC4x3.IFCDoorTypeOperation>(originalOperation);\r\n         if (validatedPreDefinedType != null)\r\n            return validatedPreDefinedType;\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// New in IFC4, replacing IFCDoorStyle that is now deprecated. Carries similar information as IFCDoorStyle with some changes\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"guid\">the GUID</param>\r\n      /// <param name=\"ownerHistory\">the owner history</param>\r\n      /// <param name=\"name\">the name</param>\r\n      /// <param name=\"description\">the description</param>\r\n      /// <param name=\"applicableOccurrence\">The attribute optionally defines the data type of the occurrence object.</param>\r\n      /// <param name=\"propertySets\">The property set(s) associated with the type.</param>\r\n      /// <param name=\"representationMaps\">The mapped geometries associated with the type.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <param name=\"preDefinedType\">Predefined generic type for a door that is specified in an enumeration.</param>\r\n      /// <param name=\"operationType\">the operation type</param>\r\n      /// <param name=\"parameterTakesPrecedence\">True if the parameter given in the attached lining and panel properties exactly define the geometry,\r\n      /// false if the attached style shape takes precedence.</param>\r\n      /// <param name=\"userDefinedOperationType\">Designator for the user defined operation type, shall only be provided, if the value of OperationType is set to USERDEFINED.</param>\r\n      /// <returns></returns>\r\n      public static IFCAnyHandle CreateDoorType(IFCFile file, ElementType revitType,\r\n         string guid, HashSet<IFCAnyHandle> propertySets,\r\n         IList<IFCAnyHandle> representationMaps, string preDefinedType, string operationType,\r\n         bool parameterTakesPrecedence, string userDefinedOperationType)\r\n      {\r\n         IFCAnyHandle doorType = CreateInstance(file, IFCEntityType.IfcDoorType, revitType);\r\n         string validatedPreDefinedType = IFCValidateEntry.ValidateStrEnum<IFC4.IFCDoorType>(preDefinedType);\r\n         string validatedOperationType = GetValidatedDoorTypeOperation(operationType);\r\n         IFCAnyHandleUtil.SetAttribute(doorType, \"OperationType\", validatedOperationType, true);\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n            IFCAnyHandleUtil.SetAttribute(doorType, \"ParameterTakesPrecedence\", parameterTakesPrecedence);\r\n         if (string.Compare(validatedOperationType, \"USERDEFINED\", true) == 0 && !string.IsNullOrEmpty(userDefinedOperationType))\r\n            IFCAnyHandleUtil.SetAttribute(doorType, \"UserDefinedOperationType\", userDefinedOperationType);\r\n\r\n         SetElementType(doorType, revitType, ref validatedPreDefinedType, guid, propertySets, representationMaps);\r\n         IFCAnyHandleUtil.SetAttribute(doorType, \"PreDefinedType\", validatedPreDefinedType, true);\r\n         return doorType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcWindowStyle, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"applicableOccurrence\">The attribute optionally defines the data type of the occurrence object.</param>\r\n      /// <param name=\"propertySets\">The property set(s) associated with the type.</param>\r\n      /// <param name=\"representationMaps\">The mapped geometries associated with the type.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <param name=\"operationType\">The operation type.</param>\r\n      /// <param name=\"constructionType\">The construction type.</param>\r\n      /// <param name=\"paramTakesPrecedence\"> True if the parameter given in the attached lining and panel properties exactly define the geometry,\r\n      /// false if the attached style shape takes precedence.</param>\r\n      /// <param name=\"sizeable\">True if the attached IfcMappedRepresentation (if given) can be sized (using scale factor of transformation), false if not.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateWindowStyle(IFCFile file, Element revitType, string guid,\r\n         HashSet<IFCAnyHandle> propertySets, IList<IFCAnyHandle> representationMaps,\r\n         IFCWindowStyleConstruction constructionType, IFCWindowStyleOperation operationType,\r\n         bool paramTakesPrecedence, bool sizeable)\r\n      {\r\n         IFCAnyHandle windowStyle = CreateInstance(file, IFCEntityType.IfcWindowStyle, revitType);\r\n         IFCAnyHandleUtil.SetAttribute(windowStyle, \"ConstructionType\", constructionType);\r\n         IFCAnyHandleUtil.SetAttribute(windowStyle, \"OperationType\", operationType);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n            IFCAnyHandleUtil.SetAttribute(windowStyle, \"ParameterTakesPrecedence\", paramTakesPrecedence);\r\n         IFCAnyHandleUtil.SetAttribute(windowStyle, \"Sizeable\", sizeable);\r\n\r\n         (IFCAnyHandle ownerHistory, string name, string description) rootData = DefaultRootData(revitType);\r\n         SetTypeProduct(windowStyle, revitType, guid, rootData.ownerHistory, rootData.name,\r\n            rootData.description, null, propertySets, representationMaps, null);\r\n\r\n         return windowStyle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// New in IFC4, replacing IFCWindowStyle that is now deprecated. Carries similar information as IFCWindowStyle with some changes\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"guid\">the guid</param>\r\n      /// <param name=\"ownerHistory\">the owner history</param>\r\n      /// <param name=\"name\">the name</param>\r\n      /// <param name=\"description\">the description</param>\r\n      /// <param name=\"applicableOccurrence\">The attribute optionally defines the data type of the occurrence object.</param>\r\n      /// <param name=\"propertySets\">The property set(s) associated with the type.</param>\r\n      /// <param name=\"representationMaps\">The mapped geometries associated with the type.</param>\r\n      /// <param name=\"elementTag\">The tag that represents the entity.</param>\r\n      /// <param name=\"preDefinedType\">Identifies the predefined types of a window element from which the type required may be set.</param>\r\n      /// <param name=\"partitioningType\">Type defining the general layout of the window type in terms of the partitioning of panels.</param>\r\n      /// <param name=\"paramTakesPrecedence\">The Boolean value reflects, whether the parameter given in the attached lining and panel properties exactly define the geometry (TRUE), or whether the attached style shape take precedence (FALSE). In the last case the parameter have only informative value. If not provided, no such information can be infered. </param>\r\n      /// <param name=\"userDefinedPartitioningType\">Designator for the user defined partitioning type, shall only be provided, if the value of PartitioningType is set to USERDEFINED.</param>\r\n      /// <returns></returns>\r\n      public static IFCAnyHandle CreateWindowType(IFCFile file, ElementType revitType,\r\n         string guid, HashSet<IFCAnyHandle> propertySets,\r\n         IList<IFCAnyHandle> representationMaps, string preDefinedType,\r\n         string partitioningType, bool paramTakesPrecedence, string userDefinedPartitioningType)\r\n      {\r\n         IFCAnyHandle windowType = CreateInstance(file, IFCEntityType.IfcWindowType, revitType);\r\n         string validatedPreDefinedType = IFCValidateEntry.ValidateStrEnum<IFC4.IFCWindowType>(preDefinedType);\r\n         string validatedPartitioningType = IFCValidateEntry.ValidateStrEnum<IFC4.IFCWindowTypePartitioning>(partitioningType);\r\n         IFCAnyHandleUtil.SetAttribute(windowType, \"PartitioningType\", validatedPartitioningType, true);\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n            IFCAnyHandleUtil.SetAttribute(windowType, \"ParameterTakesPrecedence\", paramTakesPrecedence);\r\n         if (string.Compare(validatedPartitioningType, \"USERDEFINED\", true) == 0 && !string.IsNullOrEmpty(userDefinedPartitioningType))\r\n            IFCAnyHandleUtil.SetAttribute(windowType, \"UserDefinedPartitioningType\", userDefinedPartitioningType);\r\n         \r\n         SetElementType(windowType, revitType, ref validatedPreDefinedType, guid, propertySets, representationMaps);\r\n         IFCAnyHandleUtil.SetAttribute(windowType, \"PreDefinedType\", validatedPreDefinedType, true);\r\n\r\n         return windowType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcFacetedBrep and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"outer\">The closed shell.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateFacetedBrep(IFCFile file, IFCAnyHandle outer)\r\n      {\r\n         IFCAnyHandle facetedBrep = CreateInstance(file, IFCEntityType.IfcFacetedBrep, null);\r\n         SetManifoldSolidBrep(facetedBrep, outer);\r\n         return facetedBrep;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create instance of AdvancedBrep RepresentationItem\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"outer\">The outer closed shell</param>\r\n      /// <returns>The handle</returns>\r\n      public static IFCAnyHandle CreateAdvancedBrep(IFCFile file, IFCAnyHandle outer)\r\n      {\r\n         IFCAnyHandle advancedBrep = CreateInstance(file, IFCEntityType.IfcAdvancedBrep, null);\r\n         SetManifoldSolidBrep(advancedBrep, outer);\r\n         return advancedBrep;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IfcMapConversion\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"sourceCRS\">the source coordinate reference system</param>\r\n      /// <param name=\"targetCRS\">the target coordinate reference system</param>\r\n      /// <param name=\"eastings\">eastings</param>\r\n      /// <param name=\"northings\">northings</param>\r\n      /// <param name=\"orthogonalHeight\">orthogonal height</param>\r\n      /// <param name=\"xAxisAbscissa\">value along the easting axis in the X-Axis</param>\r\n      /// <param name=\"xAxisOrdinate\">value along the northing axis in the X-Axis</param>\r\n      /// <param name=\"scale\">scale</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateMapConversion(IFCFile file, IFCAnyHandle sourceCRS, IFCAnyHandle targetCRS, double eastings, double northings,\r\n         double orthogonalHeight, double? xAxisAbscissa, double? xAxisOrdinate, double? scale)\r\n      {\r\n         IFCAnyHandle mapConversion = CreateInstance(file, IFCEntityType.IfcMapConversion, null);\r\n         IFCAnyHandleUtil.SetAttribute(mapConversion, \"SourceCRS\", sourceCRS);\r\n         IFCAnyHandleUtil.SetAttribute(mapConversion, \"TargetCRS\", targetCRS);\r\n         IFCAnyHandleUtil.SetAttribute(mapConversion, \"Eastings\", eastings);\r\n         IFCAnyHandleUtil.SetAttribute(mapConversion, \"Northings\", northings);\r\n         IFCAnyHandleUtil.SetAttribute(mapConversion, \"OrthogonalHeight\", orthogonalHeight);\r\n         if (xAxisAbscissa.HasValue)\r\n            IFCAnyHandleUtil.SetAttribute(mapConversion, \"XAxisAbscissa\", xAxisAbscissa.Value);\r\n         if (xAxisOrdinate.HasValue)\r\n            IFCAnyHandleUtil.SetAttribute(mapConversion, \"XAxisOrdinate\", xAxisOrdinate.Value);\r\n         if (scale.HasValue)\r\n            IFCAnyHandleUtil.SetAttribute(mapConversion, \"Scale\", scale.Value);\r\n\r\n         return mapConversion;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcMappedItem, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"mappingSource\">The mapped geometry.</param>\r\n      /// <param name=\"mappingTarget\">The transformation operator for this instance of the mapped geometry.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateMappedItem(IFCFile file, IFCAnyHandle mappingSource, IFCAnyHandle mappingTarget)\r\n      {\r\n         IFCAnyHandle mappedItem = CreateInstance(file, IFCEntityType.IfcMappedItem, null);\r\n         IFCAnyHandleUtil.SetAttribute(mappedItem, \"MappingSource\", mappingSource);\r\n         IFCAnyHandleUtil.SetAttribute(mappedItem, \"MappingTarget\", mappingTarget);\r\n         return mappedItem;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcMaterial and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateMaterial(IFCFile file, string name, string description = null, string category = null)\r\n      {\r\n         if (name == null)\r\n            throw new ArgumentNullException(\"name\");\r\n\r\n         IFCAnyHandle material = CreateInstance(file, IFCEntityType.IfcMaterial, null);\r\n         IFCAnyHandleUtil.SetAttribute(material, \"Name\", name);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            if (!string.IsNullOrEmpty(description))\r\n               IFCAnyHandleUtil.SetAttribute(material, \"Description\", description);\r\n            if (!string.IsNullOrEmpty(category))\r\n               IFCAnyHandleUtil.SetAttribute(material, \"Category\", category);\r\n         }\r\n         return material;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcMaterialList and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"materials\">The list of materials.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateMaterialList(IFCFile file, IList<IFCAnyHandle> materials)\r\n      {\r\n         if (materials.Count == 0)\r\n            throw new ArgumentNullException(\"materials\");\r\n\r\n         IFCAnyHandle materialList = CreateInstance(file, IFCEntityType.IfcMaterialList, null);\r\n         IFCAnyHandleUtil.SetAttribute(materialList, \"Materials\", materials);\r\n         return materialList;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcMaterialDefinitionRepresentation and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"representations\">The collection of representations assigned to the material.</param>\r\n      /// <param name=\"representedMaterial\">The material.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateMaterialDefinitionRepresentation(IFCFile file, string name, string description, IList<IFCAnyHandle> representations,\r\n          IFCAnyHandle representedMaterial)\r\n      {\r\n         IFCAnyHandle productDefinitionShape = CreateInstance(file, IFCEntityType.IfcMaterialDefinitionRepresentation, null);\r\n         SetProductRepresentation(productDefinitionShape, name, description, representations);\r\n         IFCAnyHandleUtil.SetAttribute(productDefinitionShape, \"RepresentedMaterial\", representedMaterial);\r\n\r\n         return productDefinitionShape;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcMaterialLayer and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <param name=\"layerThickness\">The thickness of the layer.</param>\r\n      /// <param name=\"isVentilated\">  Indication of whether the material layer represents an air layer (or cavity).</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateMaterialLayer(IFCFile file, IFCAnyHandle material, double layerThickness, IFCLogical? isVentilated,\r\n         string name = null, string description = null, string category = null, int? priority = null)\r\n      {\r\n         IFCAnyHandle materialLayer = CreateInstance(file, IFCEntityType.IfcMaterialLayer, null);\r\n         IFCAnyHandleUtil.SetAttribute(materialLayer, \"Material\", material);\r\n         IFCAnyHandleUtil.SetAttribute(materialLayer, \"LayerThickness\", layerThickness);\r\n         if (isVentilated.HasValue)\r\n            IFCAnyHandleUtil.SetAttribute(materialLayer, \"IsVentilated\", isVentilated);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            if (!string.IsNullOrEmpty(name))\r\n               IFCAnyHandleUtil.SetAttribute(materialLayer, \"Name\", name);\r\n            if (!string.IsNullOrEmpty(description))\r\n               IFCAnyHandleUtil.SetAttribute(materialLayer, \"Description\", description);\r\n            if (!string.IsNullOrEmpty(category))\r\n               IFCAnyHandleUtil.SetAttribute(materialLayer, \"Category\", category);\r\n            if (priority.HasValue)\r\n               IFCAnyHandleUtil.SetAttribute(materialLayer, \"Priority\", priority);\r\n         }\r\n         return materialLayer;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcMaterialLayerSet and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"materiallayers\">The material layers.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateMaterialLayerSet(IFCFile file, IList<IFCAnyHandle> materiallayers, string name, string description = null)\r\n      {\r\n         IFCAnyHandle materialLayerSet = CreateInstance(file, IFCEntityType.IfcMaterialLayerSet, null);\r\n         IFCAnyHandleUtil.SetAttribute(materialLayerSet, \"MaterialLayers\", materiallayers);\r\n         IFCAnyHandleUtil.SetAttribute(materialLayerSet, \"LayerSetName\", name);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            if (!string.IsNullOrEmpty(description))\r\n               IFCAnyHandleUtil.SetAttribute(materialLayerSet, \"Description\", description);\r\n         }\r\n         return materialLayerSet;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcMaterialLayerSetUsage and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"materialLayerSet\">The material layer set handle.</param>\r\n      /// <param name=\"direction\">The direction of the material layer set.</param>\r\n      /// <param name=\"directionSense\">The direction sense.</param>\r\n      /// <param name=\"offset\">Offset of the material layer set base line (MlsBase) from reference geometry (line or plane).</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateMaterialLayerSetUsage(IFCFile file, IFCAnyHandle materialLayerSet, IFCLayerSetDirection direction,\r\n          IFCDirectionSense directionSense, double offset)\r\n      {\r\n         IFCAnyHandle materialLayerSetUsage = CreateInstance(file, IFCEntityType.IfcMaterialLayerSetUsage, null);\r\n         IFCAnyHandleUtil.SetAttribute(materialLayerSetUsage, \"ForLayerSet\", materialLayerSet);\r\n         IFCAnyHandleUtil.SetAttribute(materialLayerSetUsage, \"LayerSetDirection\", direction);\r\n         IFCAnyHandleUtil.SetAttribute(materialLayerSetUsage, \"DirectionSense\", directionSense);\r\n         IFCAnyHandleUtil.SetAttribute(materialLayerSetUsage, \"OffsetFromReferenceLine\", offset);\r\n         return materialLayerSetUsage;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create IfcMaterialProfile and assign it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"Profile\">Profile of the element that has a material assigned to it</param>\r\n      /// <param name=\"name\">name</param>\r\n      /// <param name=\"description\">description</param>\r\n      /// <param name=\"Material\">the Material of the Profile</param>\r\n      /// <param name=\"priority\">properity</param>\r\n      /// <param name=\"category\">category</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateMaterialProfile(IFCFile file, IFCAnyHandle Profile, string name = null, string description = null,\r\n         IFCAnyHandle Material = null, double? priority = null, string category = null)\r\n      {\r\n         IFCAnyHandle materialProfile = CreateInstance(file, IFCEntityType.IfcMaterialProfile, null);\r\n         IFCAnyHandleUtil.SetAttribute(materialProfile, \"Profile\", Profile);\r\n\r\n         if (name != null)\r\n            IFCAnyHandleUtil.SetAttribute(materialProfile, \"Name\", name);\r\n         if (description != null)\r\n            IFCAnyHandleUtil.SetAttribute(materialProfile, \"Description\", description);\r\n         if (Material != null)\r\n            IFCAnyHandleUtil.SetAttribute(materialProfile, \"Material\", Material);\r\n         if (priority.HasValue)\r\n            IFCAnyHandleUtil.SetAttribute(materialProfile, \"Priority\", priority.Value);\r\n         if (category != null)\r\n            IFCAnyHandleUtil.SetAttribute(materialProfile, \"Category\", category);\r\n         return materialProfile;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create IfcMaterialProfileSet and assign it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"materialprofiles\">the list of IfcMaterialProfile</param>\r\n      /// <param name=\"name\">name</param>\r\n      /// <param name=\"description\">description</param>\r\n      /// <param name=\"compositeProfile\">Composite profile which this material profile set is associated to</param>\r\n      /// <returns></returns>\r\n      public static IFCAnyHandle CreateMaterialProfileSet(IFCFile file, IList<IFCAnyHandle> materialprofiles, string name = null, string description = null,\r\n         IFCAnyHandle compositeProfile = null)\r\n      {\r\n         IFCAnyHandle materialProfileSet = CreateInstance(file, IFCEntityType.IfcMaterialProfileSet, null);\r\n         IFCAnyHandleUtil.SetAttribute(materialProfileSet, \"MaterialProfiles\", materialprofiles);\r\n         if (name != null)\r\n            IFCAnyHandleUtil.SetAttribute(materialProfileSet, \"Name\", name);\r\n         if (description != null)\r\n            IFCAnyHandleUtil.SetAttribute(materialProfileSet, \"Description\", description);\r\n         if (compositeProfile != null)\r\n            IFCAnyHandleUtil.SetAttribute(materialProfileSet, \"CompositeProfile\", compositeProfile);\r\n         return materialProfileSet;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create IfcMaterialProfileSetUsage and assign it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"profileSet\">the ProfileSet</param>\r\n      /// <param name=\"cardinalPoint\">cardinal point</param>\r\n      /// <param name=\"referenceExtent\">reference extent</param>\r\n      /// <returns></returns>\r\n      public static IFCAnyHandle CreateMaterialProfileSetUsage(IFCFile file, IFCAnyHandle profileSet, int? cardinalPoint, double? referenceExtent)\r\n      {\r\n         IFCAnyHandle materialProfileSetUsage = CreateInstance(file, IFCEntityType.IfcMaterialProfileSetUsage, null);\r\n         IFCAnyHandleUtil.SetAttribute(materialProfileSetUsage, \"ForProfileSet\", profileSet);\r\n         if (cardinalPoint.HasValue)\r\n            IFCAnyHandleUtil.SetAttribute(materialProfileSetUsage, \"CardinalPoint\", cardinalPoint);\r\n         if (referenceExtent.HasValue)\r\n            IFCAnyHandleUtil.SetAttribute(materialProfileSetUsage, \"ReferenceExtent\", referenceExtent.Value);\r\n         return materialProfileSetUsage;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create IfcMaterialProfileSetUsageTapering and assign it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"profileSet\">profileSet</param>\r\n      /// <param name=\"cardinalPoint\">the cardinal point</param>\r\n      /// <param name=\"referenceExtent\">reference extent</param>\r\n      /// <param name=\"forProfileEndSet\">profileSet at the end</param>\r\n      /// <param name=\"cardinalEndPoint\">the cardinal point at the end</param>\r\n      /// <returns></returns>\r\n      public static IFCAnyHandle CreateMaterialProfileSetUsageTapering(IFCFile file, IFCAnyHandle profileSet, int? cardinalPoint, double? referenceExtent,\r\n          IFCAnyHandle forProfileEndSet, int? cardinalEndPoint)\r\n      {\r\n         IFCAnyHandle materialProfileSetUsageTapering = CreateInstance(file, IFCEntityType.IfcMaterialProfileSetUsageTapering, null);\r\n         IFCAnyHandleUtil.SetAttribute(materialProfileSetUsageTapering, \"ForProfileSet\", profileSet);\r\n         IFCAnyHandleUtil.SetAttribute(materialProfileSetUsageTapering, \"ForProfileEndSet\", forProfileEndSet);\r\n\r\n         if (cardinalPoint.HasValue)\r\n            IFCAnyHandleUtil.SetAttribute(materialProfileSetUsageTapering, \"CardinalPoint\", cardinalPoint.Value);\r\n         if (referenceExtent.HasValue)\r\n            IFCAnyHandleUtil.SetAttribute(materialProfileSetUsageTapering, \"ReferenceExtent\", referenceExtent.Value);\r\n         if (cardinalEndPoint.HasValue)\r\n            IFCAnyHandleUtil.SetAttribute(materialProfileSetUsageTapering, \"CardinalEndPoint\", cardinalEndPoint.Value);\r\n         return materialProfileSetUsageTapering;\r\n      }\r\n\r\n      public static IFCAnyHandle CreateMaterialConstituent(IFCFile file, IFCAnyHandle material, string name = null, string description = null,\r\n           IFCData fraction = null, string category = null)\r\n      {\r\n         IFCAnyHandle materialConstituent = CreateInstance(file, IFCEntityType.IfcMaterialConstituent, null);\r\n         IFCAnyHandleUtil.SetAttribute(materialConstituent, \"Material\", material);\r\n\r\n         if (name != null)\r\n            IFCAnyHandleUtil.SetAttribute(materialConstituent, \"Name\", name);\r\n         if (description != null)\r\n            IFCAnyHandleUtil.SetAttribute(materialConstituent, \"Description\", description);\r\n         if (fraction != null)\r\n            IFCAnyHandleUtil.SetAttribute(materialConstituent, \"Fraction\", fraction);\r\n         if (category != null)\r\n            IFCAnyHandleUtil.SetAttribute(materialConstituent, \"Category\", category);\r\n         return materialConstituent;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IfcMaterialConstituentSet and assign it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"materialprofiles\">The list of IfcMaterialProfiles.</param>\r\n      /// <param name=\"name\">The optional name of the IfcMaterialConstituentSet.</param>\r\n      /// <param name=\"description\">The optional description of the IfcMaterialConstituentSet.</param>\r\n      /// <returns>The handle of the created IfcMaterialConstituentSet.</returns>\r\n      public static IFCAnyHandle CreateMaterialConstituentSet(IFCFile file, ISet<IFCAnyHandle> materialConstituents,\r\n          string name, string description)\r\n      {\r\n         IFCAnyHandle materialConstituentSet = CreateInstance(file, IFCEntityType.IfcMaterialConstituentSet, null);\r\n         IFCAnyHandleUtil.SetAttribute(materialConstituentSet, \"MaterialConstituents\", materialConstituents);\r\n         if (name != null)\r\n            IFCAnyHandleUtil.SetAttribute(materialConstituentSet, \"Name\", name);\r\n         if (description != null)\r\n            IFCAnyHandleUtil.SetAttribute(materialConstituentSet, \"Description\", description);\r\n\r\n         return materialConstituentSet;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcOpeningElement, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity.</param>\r\n      /// <param name=\"tag\">The tag.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateOpeningElement(ExporterIFC exporterIFC,\r\n         string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n         string objectType, IFCAnyHandle objectPlacement, IFCAnyHandle representation,\r\n         string tag)\r\n      {\r\n         IFCAnyHandle openingElement = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcOpeningElement, null);\r\n\r\n         // In IFC4, Recess or Opening can be set in PreDefinedType attribute.\r\n         // Process this first as it might blank out the object type.\r\n         string objectTypeToUse = objectType;\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            IFC4.IFCOpeningElementType openingElementType;\r\n            if (!Enum.TryParse(objectType, true, out openingElementType))\r\n               openingElementType = IFC4.IFCOpeningElementType.OPENING;\r\n            else\r\n               objectTypeToUse = null;\r\n            IFCAnyHandleUtil.SetAttribute(openingElement, \"PreDefinedType\", openingElementType);\r\n         }\r\n\r\n         SetElement(openingElement, null, guid, ownerHistory, name, description, objectTypeToUse, objectPlacement, representation, tag);\r\n\r\n         return openingElement;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcPlanarExtent and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"sizeInX\">The extent in the direction of the x-axis.</param>\r\n      /// <param name=\"sizeInY\">The extent in the direction of the y-axis.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePlanarExtent(IFCFile file, double sizeInX, double sizeInY)\r\n      {\r\n         IFCAnyHandle planarExtent = CreateInstance(file, IFCEntityType.IfcPlanarExtent, null);\r\n         IFCAnyHandleUtil.SetAttribute(planarExtent, \"SizeInX\", sizeInX);\r\n         IFCAnyHandleUtil.SetAttribute(planarExtent, \"SizeInY\", sizeInY);\r\n         return planarExtent;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcPresentationLayerAssignment and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"styles\">A set of presentation styles that are assigned to styled items.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePresentationLayerAssignment(IFCFile file, string name, string description,\r\n          ISet<IFCAnyHandle> assignedItems, string identifier)\r\n      {\r\n         IFCAnyHandle presentationLayerAssignment = CreateInstance(file, IFCEntityType.IfcPresentationLayerAssignment, null);\r\n         SetPresentationLayerAssigment(presentationLayerAssignment, name, description, assignedItems, identifier);\r\n         return presentationLayerAssignment;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcPresentationStyleAssignment and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"styles\">A set of presentation styles that are assigned to styled items.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePresentationStyleAssignment(IFCFile file, ISet<IFCAnyHandle> styles)\r\n      {\r\n         IFCAnyHandle presentationStyleAssignment = CreateInstance(file, IFCEntityType.IfcPresentationStyleAssignment, null);\r\n         IFCAnyHandleUtil.SetAttribute(presentationStyleAssignment, \"Styles\", styles);\r\n         return presentationStyleAssignment;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcQuantityArea and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"unit\">The unit.</param>\r\n      /// <param name=\"areaValue\">The value of the quantity, in the appropriate units.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateQuantityArea(IFCFile file, string name, string description, IFCAnyHandle unit, double areaValue)\r\n      {\r\n         IFCAnyHandle quantityArea = CreateInstance(file, IFCEntityType.IfcQuantityArea, null);\r\n         IFCAnyHandleUtil.SetAttribute(quantityArea, \"AreaValue\", areaValue);\r\n         SetPhysicalSimpleQuantity(quantityArea, name, description, unit);\r\n         return quantityArea;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcQuantityLength and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"unit\">The unit.</param>\r\n      /// <param name=\"lengthValue\">The value of the quantity, in the appropriate units.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateQuantityLength(IFCFile file, string name, string description, IFCAnyHandle unit, double lengthValue)\r\n      {\r\n         IFCAnyHandle quantityLength = CreateInstance(file, IFCEntityType.IfcQuantityLength, null);\r\n         IFCAnyHandleUtil.SetAttribute(quantityLength, \"LengthValue\", lengthValue);\r\n         SetPhysicalSimpleQuantity(quantityLength, name, description, unit);\r\n         return quantityLength;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcQuantityVolume and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"unit\">The unit.</param>\r\n      /// <param name=\"lengthValue\">The value of the quantity, in the appropriate units.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateQuantityVolume(IFCFile file, string name, string description, IFCAnyHandle unit, double volumeValue)\r\n      {\r\n         IFCAnyHandle quantityVolume = CreateInstance(file, IFCEntityType.IfcQuantityVolume, null);\r\n         IFCAnyHandleUtil.SetAttribute(quantityVolume, \"VolumeValue\", volumeValue);\r\n         SetPhysicalSimpleQuantity(quantityVolume, name, description, unit);\r\n         return quantityVolume;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcQuantityWeight and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"name\">The name</param>\r\n      /// <param name=\"description\">The description</param>\r\n      /// <param name=\"unit\">The unit</param>\r\n      /// <param name=\"weightValue\">The value of the quantity, in the appropriate units.</param>\r\n      /// <returns>The handle</returns>\r\n      public static IFCAnyHandle CreateQuantityWeight(IFCFile file, string name, string description, IFCAnyHandle unit, double weightValue)\r\n      {\r\n         IFCAnyHandle quantityWeight = CreateInstance(file, IFCEntityType.IfcQuantityWeight, null);\r\n         IFCAnyHandleUtil.SetAttribute(quantityWeight, \"WeightValue\", weightValue);\r\n         SetPhysicalSimpleQuantity(quantityWeight, name, description, unit);\r\n         return quantityWeight;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcQuantityCount and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"name\">The name</param>\r\n      /// <param name=\"description\">The description</param>\r\n      /// <param name=\"unit\">The unit</param>\r\n      /// <param name=\"weightValue\">The value of the quantity, in the appropriate units.</param>\r\n      /// <returns>The handle</returns>\r\n      public static IFCAnyHandle CreateQuantityCount(IFCFile file, string name, string description, IFCAnyHandle unit, int countValue)\r\n      {\r\n         IFCAnyHandle quantityCount = CreateInstance(file, IFCEntityType.IfcQuantityCount, null);\r\n         IFCAnyHandleUtil.SetAttribute(quantityCount, \"CountValue\", countValue);\r\n         SetPhysicalSimpleQuantity(quantityCount, name, description, unit);\r\n         return quantityCount;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcQuantityTime and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"name\">The name</param>\r\n      /// <param name=\"description\">The description</param>\r\n      /// <param name=\"unit\">The unit</param>\r\n      /// <param name=\"weightValue\">The value of the quantity, in the appropriate units.</param>\r\n      /// <returns>The handle</returns>\r\n      public static IFCAnyHandle CreateQuantityTime(IFCFile file, string name, string description, IFCAnyHandle unit, double timeValue)\r\n      {\r\n         IFCAnyHandle quantityTime = CreateInstance(file, IFCEntityType.IfcQuantityTime, null);\r\n         IFCAnyHandleUtil.SetAttribute(quantityTime, \"TimeValue\", timeValue);\r\n         SetPhysicalSimpleQuantity(quantityTime, name, description, unit);\r\n         return quantityTime;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcRelConnectsPorts and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatingPort\">The port handle.</param>\r\n      /// <param name=\"relatedPort\">The port handle.</param>\r\n      /// <param name=\"realizingElement\">The element handle. Must be null for IFC4RV.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRelConnectsPorts(IFCFile file, string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n          IFCAnyHandle relatingPort, IFCAnyHandle relatedPort, IFCAnyHandle realizingElement)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView && realizingElement != null)\r\n            throw new ArgumentException(\"IfcRelConnectsPorts.RealizingElement must be null for IFC4RV.\", \"RealizingElement\");\r\n\r\n         IFCAnyHandle relConnectsPorts = CreateInstance(file, IFCEntityType.IfcRelConnectsPorts, null);\r\n         IFCAnyHandleUtil.SetAttribute(relConnectsPorts, \"RelatingPort\", relatingPort);\r\n         IFCAnyHandleUtil.SetAttribute(relConnectsPorts, \"RelatedPort\", relatedPort);\r\n         IFCAnyHandleUtil.SetAttribute(relConnectsPorts, \"RealizingElement\", realizingElement);\r\n         SetRelConnects(relConnectsPorts, guid, ownerHistory, name, description);\r\n         return relConnectsPorts;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcRelServicesBuildings and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatingSystem\">The system handle.</param>\r\n      /// <param name=\"relatedBuildings\">The related spatial structure handles.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRelServicesBuildings(IFCFile file, string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n          IFCAnyHandle relatingSystem, ISet<IFCAnyHandle> relatedBuildings)\r\n      {\r\n         IFCAnyHandle relServicesBuildings = CreateInstance(file, IFCEntityType.IfcRelServicesBuildings, null);\r\n         IFCAnyHandleUtil.SetAttribute(relServicesBuildings, \"RelatingSystem\", relatingSystem);\r\n         IFCAnyHandleUtil.SetAttribute(relServicesBuildings, \"RelatedBuildings\", relatedBuildings);\r\n         SetRelConnects(relServicesBuildings, guid, ownerHistory, name, description);\r\n         return relServicesBuildings;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcRelConnectsPortToElement and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatingPort\">The port handle.</param>\r\n      /// <param name=\"relatedElement\">The element handle.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRelConnectsPortToElement(IFCFile file, string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n          IFCAnyHandle relatingPort, IFCAnyHandle relatedElement)\r\n      {\r\n         IFCAnyHandle relConnectsPortToElement = CreateInstance(file, IFCEntityType.IfcRelConnectsPortToElement, null);\r\n         IFCAnyHandleUtil.SetAttribute(relConnectsPortToElement, \"RelatingPort\", relatingPort);\r\n         IFCAnyHandleUtil.SetAttribute(relConnectsPortToElement, \"RelatedElement\", relatedElement);\r\n         SetRelConnects(relConnectsPortToElement, guid, ownerHistory, name, description);\r\n         return relConnectsPortToElement;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcRelNests and assign it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">the File</param>\r\n      /// <param name=\"guid\">the GUID</param>\r\n      /// <param name=\"ownerHistory\">the owner history</param>\r\n      /// <param name=\"name\">the name</param>\r\n      /// <param name=\"description\">the description</param>\r\n      /// <param name=\"hostElement\">the host element</param>\r\n      /// <param name=\"nestedElements\">the nested elements</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateRelNests(IFCFile file, string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n          IFCAnyHandle hostElement, IList<IFCAnyHandle> nestedElements)\r\n      {\r\n         IFCAnyHandle relNests = CreateInstance(file, IFCEntityType.IfcRelNests, null);\r\n         IFCAnyHandleUtil.SetAttribute(relNests, \"RelatingObject\", hostElement);\r\n         IFCAnyHandleUtil.SetAttribute(relNests, \"RelatedObjects\", nestedElements);\r\n         SetRelDecomposes(relNests, guid, ownerHistory, name, description);\r\n         return relNests;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcRelFillsElement, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatingOpeningElement\">The opening element.</param>\r\n      /// <param name=\"relatedBuildingElement\">The building element that fills or partially fills the opening.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRelFillsElement(IFCFile file, string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n          IFCAnyHandle relatingOpeningElement, IFCAnyHandle relatedBuildingElement)\r\n      {\r\n         IFCAnyHandle relFillsElement = CreateInstance(file, IFCEntityType.IfcRelFillsElement, null);\r\n         IFCAnyHandleUtil.SetAttribute(relFillsElement, \"RelatingOpeningElement\", relatingOpeningElement);\r\n         IFCAnyHandleUtil.SetAttribute(relFillsElement, \"RelatedBuildingElement\", relatedBuildingElement);\r\n         SetRelConnects(relFillsElement, guid, ownerHistory, name, description);\r\n         return relFillsElement;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcRelSpaceBoundary and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatingSpace\">The relating space handle.</param>\r\n      /// <param name=\"relatedBuildingElement\">The related building element.</param>\r\n      /// <param name=\"connectionGeometry\">The connection geometry.</param>\r\n      /// <param name=\"physicalOrVirtual\">The space boundary type, physical or virtual.</param>\r\n      /// <param name=\"internalOrExternal\">Internal or external.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRelSpaceBoundary(IFCFile file, string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n          IFCAnyHandle relatingSpace, IFCAnyHandle relatedBuildingElement, IFCAnyHandle connectionGeometry, IFCPhysicalOrVirtual physicalOrVirtual,\r\n          IFCInternalOrExternal internalOrExternal)\r\n      {\r\n         IFCAnyHandle relSpaceBoundary = CreateInstance(file, IFCEntityType.IfcRelSpaceBoundary, null);\r\n         IFCAnyHandleUtil.SetAttribute(relSpaceBoundary, \"RelatingSpace\", relatingSpace);\r\n         IFCAnyHandleUtil.SetAttribute(relSpaceBoundary, \"RelatedBuildingElement\", relatedBuildingElement);\r\n         IFCAnyHandleUtil.SetAttribute(relSpaceBoundary, \"ConnectionGeometry\", connectionGeometry);\r\n         IFCAnyHandleUtil.SetAttribute(relSpaceBoundary, \"PhysicalOrVirtualBoundary\", physicalOrVirtual);\r\n         IFCAnyHandleUtil.SetAttribute(relSpaceBoundary, \"InternalOrExternalBoundary\", internalOrExternal);\r\n         SetRelConnects(relSpaceBoundary, guid, ownerHistory, name, description);\r\n         return relSpaceBoundary;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcRelVoidsElement, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatingBuildingElement\">The building element.</param>\r\n      /// <param name=\"relatedOpeningElement\">The opening element that removes material from the building element.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRelVoidsElement(IFCFile file, string guid, IFCAnyHandle ownerHistory, string name, string description,\r\n          IFCAnyHandle relatingBuildingElement, IFCAnyHandle relatedOpeningElement)\r\n      {\r\n         IFCAnyHandle relVoidsElement = CreateInstance(file, IFCEntityType.IfcRelVoidsElement, null);\r\n         IFCAnyHandleUtil.SetAttribute(relVoidsElement, \"RelatingBuildingElement\", relatingBuildingElement);\r\n         IFCAnyHandleUtil.SetAttribute(relVoidsElement, \"RelatedOpeningElement\", relatedOpeningElement);\r\n         SetRelConnects(relVoidsElement, guid, ownerHistory, name, description);\r\n         return relVoidsElement;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IfcShapeAspect, and assign it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"shapeRepresentations\">list of representations</param>\r\n      /// <param name=\"name\">name</param>\r\n      /// <param name=\"description\">description</param>\r\n      /// <param name=\"productDefinitional\">An indication that the shape aspect is on the physical boundary of the product definition shape</param>\r\n      /// <param name=\"partOfProductDefinitionShape\">Reference to the IfcProductDefinitionShape or the IfcRepresentationMap of which this shape is an aspect</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateShapeAspect(IFCFile file, IList<IFCAnyHandle> shapeRepresentations, string name, string description, IFCLogical? productDefinitional, IFCAnyHandle partOfProductDefinitionShape)\r\n      {\r\n         if (shapeRepresentations == null || shapeRepresentations.Count < 1)\r\n            throw new ArgumentNullException(\"ShapeRepresentations\");\r\n\r\n         IFCAnyHandle shapeAspect = CreateInstance(file, IFCEntityType.IfcShapeAspect, null);\r\n         IFCAnyHandleUtil.SetAttribute(shapeAspect, \"ShapeRepresentations\", shapeRepresentations);\r\n         if (partOfProductDefinitionShape != null && !IFCAnyHandleUtil.IsNullOrHasNoValue(partOfProductDefinitionShape))\r\n            IFCAnyHandleUtil.SetAttribute(shapeAspect, \"PartOfProductDefinitionShape\", partOfProductDefinitionShape);\r\n         if (!string.IsNullOrEmpty(name))\r\n            IFCAnyHandleUtil.SetAttribute(shapeAspect, \"Name\", name);\r\n         if (!string.IsNullOrEmpty(description))\r\n            IFCAnyHandleUtil.SetAttribute(shapeAspect, \"Description\", description);\r\n         if (productDefinitional.HasValue)\r\n            IFCAnyHandleUtil.SetAttribute(shapeAspect, \"ProductDefinitional\", productDefinitional.Value);\r\n         else\r\n            IFCAnyHandleUtil.SetAttribute(shapeAspect, \"ProductDefinitional\", IFCData.CreateLogical(IFCLogical.Unknown));\r\n\r\n         return shapeAspect;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcShapeRepresentation and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"contextOfItems\">The context of the items.</param>\r\n      /// <param name=\"identifier\">The identifier.</param>\r\n      /// <param name=\"type\">The representation type.</param>\r\n      /// <param name=\"items\">The items that belong to the shape representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateShapeRepresentation(IFCFile file,\r\n          IFCAnyHandle contextOfItems, string identifier, string type, ISet<IFCAnyHandle> items)\r\n      {\r\n         IFCAnyHandle shapeRepresentation = CreateInstance(file, IFCEntityType.IfcShapeRepresentation, null);\r\n         SetRepresentation(shapeRepresentation, contextOfItems, identifier, type, items);\r\n         return shapeRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcSite and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The product representation.</param>\r\n      /// <param name=\"longName\">The long name.</param>\r\n      /// <param name=\"compositionType\">The composition type.</param>\r\n      /// <param name=\"latitude\">The latitude.</param>\r\n      /// <param name=\"longitude\">The longitude.</param>\r\n      /// <param name=\"elevation\">The elevation.</param>\r\n      /// <param name=\"landTitleNumber\">The title number. Deprecated in IFC4x3.</param>\r\n      /// <param name=\"address\">The address. Deprecated in IFC4x3.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateSite(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory, string name,\r\n          string description, string objectType, IFCAnyHandle objectPlacement, IFCAnyHandle representation, string longName,\r\n          IFCElementComposition compositionType, IList<int> latitude, IList<int> longitude,\r\n          double? elevation, string landTitleNumber, IFCAnyHandle address)\r\n      {\r\n         IFCAnyHandle site = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcSite, element);\r\n         IFCAnyHandleUtil.SetAttribute(site, \"RefLatitude\", latitude);\r\n         IFCAnyHandleUtil.SetAttribute(site, \"RefLongitude\", longitude);\r\n         IFCAnyHandleUtil.SetAttribute(site, \"RefElevation\", elevation);\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAs4x3)\r\n         {\r\n            // All of these have been deprecated in IFC4x3, and should be included in \r\n            // Pset_LandRegistration.LandTitleID and Pset_Address instead.\r\n            IFCAnyHandleUtil.SetAttribute(site, \"LandTitleNumber\", landTitleNumber);\r\n            IFCAnyHandleUtil.SetAttribute(site, \"SiteAddress\", address);\r\n         }\r\n         SetSpatialStructureElement(site, element, guid, ownerHistory, name, description, objectType, objectPlacement, representation, longName, compositionType);\r\n         return site;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcStyledItem and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"item\">The geometric representation item to which the style is assigned.</param>\r\n      /// <param name=\"styles\">Representation style assignments which are assigned to an item.</param>\r\n      /// <param name=\"name\">The word, or group of words, by which the styled item is referred to.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateStyledItem(IFCFile file,\r\n          IFCAnyHandle item, HashSet<IFCAnyHandle> styles, string name)\r\n      {\r\n         IFCAnyHandle styledItem = CreateInstance(file, IFCEntityType.IfcStyledItem, null);\r\n         IFCAnyHandleUtil.SetAttribute(styledItem, \"Item\", item);\r\n         IFCAnyHandleUtil.SetAttribute(styledItem, \"Styles\", styles);\r\n         IFCAnyHandleUtil.SetAttribute(styledItem, \"Name\", name);\r\n         return styledItem;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcStyledRepresentation and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"representation\">The IfcRepresentation.</param>\r\n      /// <param name=\"contextOfItems\">The context of the items.</param>\r\n      /// <param name=\"identifier\">The identifier.</param>\r\n      /// <param name=\"type\">The representation type.</param>\r\n      /// <param name=\"items\">The items that belong to the shape representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateStyledRepresentation(IFCFile file, IFCAnyHandle contextOfItems, string identifier, string type,\r\n          HashSet<IFCAnyHandle> items)\r\n      {\r\n         IFCAnyHandle styledRepresentation = CreateInstance(file, IFCEntityType.IfcStyledRepresentation, null);\r\n         SetRepresentation(styledRepresentation, contextOfItems, identifier, type, items);\r\n         return styledRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcTextLiteralWithExtent and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"literal\">The text literal to be presented.</param>\r\n      /// <param name=\"placement\">The IfcAxis2Placement that determines the placement and orientation of the presented string.</param>\r\n      /// <param name=\"path\">The writing direction of the text literal.</param>\r\n      /// <param name=\"extent\">The extent in the x and y direction of the text literal.</param>\r\n      /// <param name=\"boxAlignment\">The alignment of the text literal relative to its position.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateTextLiteralWithExtent(IFCFile file,\r\n          string literal, IFCAnyHandle placement, IFCTextPath path, IFCAnyHandle extent, string boxAlignment)\r\n      {\r\n         if (literal == null)\r\n            throw new ArgumentNullException(\"literal\");\r\n         if (boxAlignment == null)\r\n            throw new ArgumentNullException(\"boxAlignment\");\r\n\r\n         IFCAnyHandle textLiteralWithExtent = CreateInstance(file, IFCEntityType.IfcTextLiteralWithExtent, null);\r\n         IFCAnyHandleUtil.SetAttribute(textLiteralWithExtent, \"Literal\", literal);\r\n         IFCAnyHandleUtil.SetAttribute(textLiteralWithExtent, \"Placement\", placement);\r\n         IFCAnyHandleUtil.SetAttribute(textLiteralWithExtent, \"Path\", path);\r\n         IFCAnyHandleUtil.SetAttribute(textLiteralWithExtent, \"Extent\", extent);\r\n         IFCAnyHandleUtil.SetAttribute(textLiteralWithExtent, \"BoxAlignment\", boxAlignment);\r\n         return textLiteralWithExtent;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcTextStyle and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"characterAppearance\">The character style to be used for presented text.</param>\r\n      /// <param name=\"style\">The style applied to the text block for its visual appearance.</param>\r\n      /// <param name=\"fontStyle\">The style applied to the text font for its visual appearance.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateTextStyle(IFCFile file,\r\n          string name, IFCAnyHandle characterAppearance, IFCAnyHandle style, IFCAnyHandle fontStyle)\r\n      {\r\n         IFCAnyHandle textStyle = CreateInstance(file, IFCEntityType.IfcTextStyle, null);\r\n         IFCAnyHandleUtil.SetAttribute(textStyle, \"TextCharacterAppearance\", characterAppearance);\r\n         IFCAnyHandleUtil.SetAttribute(textStyle, \"TextStyle\", style);\r\n         IFCAnyHandleUtil.SetAttribute(textStyle, \"TextFontStyle\", fontStyle);\r\n         SetPresentationStyle(textStyle, name);\r\n         return textStyle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcTextStyleFontModel and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"fontFamily\">The font family.</param>\r\n      /// <param name=\"fontStyle\">The font style.</param>\r\n      /// <param name=\"fontVariant\">The font variant.</param>\r\n      /// <param name=\"fontWeight\">The font weight.</param>\r\n      /// <param name=\"fontSize\">The font size.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateTextStyleFontModel(IFCFile file,\r\n          string name, IList<string> fontFamily, string fontStyle, string fontVariant,\r\n          string fontWeight, IFCData fontSize)\r\n      {\r\n         if (fontSize == null)\r\n            throw new ArgumentNullException(\"fontSize\");\r\n\r\n         IFCAnyHandle textStyleFontModel = CreateInstance(file, IFCEntityType.IfcTextStyleFontModel, null);\r\n         IFCAnyHandleUtil.SetAttribute(textStyleFontModel, \"FontFamily\", fontFamily);\r\n         IFCAnyHandleUtil.SetAttribute(textStyleFontModel, \"FontStyle\", fontStyle);\r\n         IFCAnyHandleUtil.SetAttribute(textStyleFontModel, \"FontVariant\", fontVariant);\r\n         IFCAnyHandleUtil.SetAttribute(textStyleFontModel, \"FontWeight\", fontWeight);\r\n         IFCAnyHandleUtil.SetAttribute(textStyleFontModel, \"FontSize\", fontSize);\r\n         SetPreDefinedItem(textStyleFontModel, name);\r\n         return textStyleFontModel;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcTextStyleForDefinedFont and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"color\">The color.</param>\r\n      /// <param name=\"backgroundColor\">The background color.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateTextStyleForDefinedFont(IFCFile file,\r\n          IFCAnyHandle color, IFCAnyHandle backgroundColor)\r\n      {\r\n         IFCAnyHandle textStyleForDefinedFont = CreateInstance(file, IFCEntityType.IfcTextStyleForDefinedFont, null);\r\n         IFCAnyHandleUtil.SetAttribute(textStyleForDefinedFont, \"Colour\", color);\r\n         IFCAnyHandleUtil.SetAttribute(textStyleForDefinedFont, \"BackgroundColour\", backgroundColor);\r\n         return textStyleForDefinedFont;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcTransportElement, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID to use to label the wall.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The local placement.</param>\r\n      /// <param name=\"representation\">The representation object assigned to the wall.</param>\r\n      /// <param name=\"elementTag\">The tag for the identifier of the element.</param>\r\n      /// <param name=\"operationType\">The transport operation type. | in IFC4 this attribute becomes PreDefinedType</param>\r\n      /// <param name=\"capacityByWeight\">The capacity by weight.</param>\r\n      /// <param name=\"capacityByNumber\">The capacity by number.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateTransportElement(ExporterIFC exporterIFC, Element element,\r\n          string guid, IFCAnyHandle ownerHistory, IFCAnyHandle objectPlacement, IFCAnyHandle representation,\r\n          string operationType, double? capacityByWeight, double? capacityByNumber)\r\n      {\r\n         IFCAnyHandle transportElement = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcTransportElement, element);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            IFCAnyHandleUtil.SetAttribute(transportElement, \"PreDefinedType\", operationType, true);\r\n         }\r\n         else\r\n         {\r\n            IFCAnyHandleUtil.SetAttribute(transportElement, \"OperationType\", operationType, true);\r\n            IFCAnyHandleUtil.SetAttribute(transportElement, \"CapacityByWeight\", capacityByWeight);\r\n            IFCAnyHandleUtil.SetAttribute(transportElement, \"CapacityByNumber\", capacityByNumber);\r\n         }\r\n         SetElement(transportElement, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return transportElement;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IfcIndexedPolygonalFace and assigns it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"coordIndex\">the coordIndex</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateIndexedPolygonalFace(IFCFile file, IList<int> coordIndex)\r\n      {\r\n         if (coordIndex == null)\r\n            throw new ArgumentNullException(\"CoordIndex\");\r\n         if (coordIndex.Count < 3)\r\n            throw new IndexOutOfRangeException(\"CoordIndex must be at least 3 members\");\r\n\r\n         IFCAnyHandle indexedPolygonalFace = CreateInstance(file, IFCEntityType.IfcIndexedPolygonalFace, null);\r\n         IFCAnyHandleUtil.SetAttribute(indexedPolygonalFace, \"CoordIndex\", coordIndex);\r\n\r\n         return indexedPolygonalFace;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IfcIndexedPolygonalFaceWithVoids and assigns it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"coordIndex\">the CoordIndex</param>\r\n      /// <param name=\"innerCoordIndices\">the hole/void coordinates indices</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateIndexedPolygonalFaceWithVoids(IFCFile file, IList<int> coordIndex, IList<IList<int>> innerCoordIndices)\r\n      {\r\n         if (coordIndex == null)\r\n            throw new ArgumentNullException(\"CoordIndex\");\r\n         if (innerCoordIndices == null)\r\n            throw new ArgumentNullException(\"InnerCoordIndices\");\r\n         if (coordIndex.Count < 3)\r\n            throw new IndexOutOfRangeException(\"CoordIndex must be at least 3 members\");\r\n\r\n         foreach (IList<int> innerCoordinate in innerCoordIndices)\r\n         {\r\n            if (innerCoordinate == null)\r\n               throw new ArgumentNullException(\"InnerCoordinateIndex\");\r\n         }\r\n\r\n         IFCAnyHandle indexedPolygonalFaceWithVoids = CreateInstance(file, IFCEntityType.IfcIndexedPolygonalFaceWithVoids, null);\r\n         IFCAnyHandleUtil.SetAttribute(indexedPolygonalFaceWithVoids, \"CoordIndex\", coordIndex);\r\n         IFCAnyHandleUtil.SetAttribute(indexedPolygonalFaceWithVoids, \"InnerCoordIndices\", innerCoordIndices, 1, null, 3, null);\r\n\r\n         return indexedPolygonalFaceWithVoids;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates the IfcPolygonalFaceSet and assigns it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"coordinates\">coordinates list</param>\r\n      /// <param name=\"closed\">closed or open faceSet</param>\r\n      /// <param name=\"faces\">the Faces</param>\r\n      /// <param name=\"pnIndex\">the Optional point index</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreatePolygonalFaceSet(IFCFile file, IFCAnyHandle coordinates, bool? closed, IList<IFCAnyHandle> faces, IList<int> pnIndex)\r\n      {\r\n         if (coordinates == null)\r\n            throw new ArgumentNullException(\"coordinates\");\r\n\r\n         IFCAnyHandle polygonalFaceSet = CreateInstance(file, IFCEntityType.IfcPolygonalFaceSet, null);\r\n         IFCAnyHandleUtil.SetAttribute(polygonalFaceSet, \"Coordinates\", coordinates);\r\n         IFCAnyHandleUtil.SetAttribute(polygonalFaceSet, \"Closed\", closed);\r\n         IFCAnyHandleUtil.SetAttribute(polygonalFaceSet, \"Faces\", faces);\r\n         IFCAnyHandleUtil.SetAttribute(polygonalFaceSet, \"PnIndex\", pnIndex);\r\n\r\n         return polygonalFaceSet;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an instance of IFCTriangulatedFaceSet\r\n      /// </summary>\r\n      /// <param name=\"file\">the IFC file</param>\r\n      /// <param name=\"coordinates\">Coordinates attribute (IfcCartesianPointList3D)</param>\r\n      /// <param name=\"normals\">List of Normals</param>\r\n      /// <param name=\"closed\">Closed attribute</param>\r\n      /// <param name=\"coordIndex\">Triangle Indexes</param>\r\n      /// <param name=\"normalIndex\">Normal Indexes</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateTriangulatedFaceSet(IFCFile file, IFCAnyHandle coordinates, IList<IList<double>> normals, bool? closed,\r\n              IList<IList<int>> coordIndex, IList<IList<int>> normalIndex = null, IList<int> pnIndex = null)\r\n      {\r\n         if (coordinates == null)\r\n            throw new ArgumentNullException(\"coordinates\");\r\n\r\n         IFCAnyHandle triangulatedFaceSet = CreateInstance(file, IFCEntityType.IfcTriangulatedFaceSet, null);\r\n         IFCAnyHandleUtil.SetAttribute(triangulatedFaceSet, \"Coordinates\", coordinates);\r\n         IFCAnyHandleUtil.SetAttribute(triangulatedFaceSet, \"Normals\", normals, 1, null, 3, 3);\r\n         IFCAnyHandleUtil.SetAttribute(triangulatedFaceSet, \"Closed\", closed);\r\n         IFCAnyHandleUtil.SetAttribute(triangulatedFaceSet, \"CoordIndex\", coordIndex, 1, null, 3, 3);\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            IFCAnyHandleUtil.SetAttribute(triangulatedFaceSet, \"PnIndex\", pnIndex);\r\n         else\r\n            IFCAnyHandleUtil.SetAttribute(triangulatedFaceSet, \"NormalIndex\", normalIndex, 1, null, 3, 3);\r\n\r\n         return triangulatedFaceSet;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcWindow, and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID to use to label the wall.</param>\r\n      /// <param name=\"ownerHistory\">The IfcOwnerHistory.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The local placement.</param>\r\n      /// <param name=\"representation\">The representation object assigned to the wall.</param>\r\n      /// <param name=\"elementTag\">The tag for the identifier of the element.</param>\r\n      /// <param name=\"height\">The height of the window.</param>\r\n      /// <param name=\"width\">The width of the window.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateWindow(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation,\r\n          double? height, double? width, string preDefinedType, string partitioningType, string userDefinedPartitioningType)\r\n      {\r\n         IFCAnyHandle window = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcWindow, element);\r\n         IFCAnyHandleUtil.SetAttribute(window, \"OverallHeight\", height);\r\n         IFCAnyHandleUtil.SetAttribute(window, \"OverallWidth\", width);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            string validatedType = IFCValidateEntry.ValidateStrEnum<IFC4.IFCWindowType>(preDefinedType);\r\n            IFCAnyHandleUtil.SetAttribute(window, \"PreDefinedType\", validatedType, true);\r\n            validatedType = IFCValidateEntry.ValidateStrEnum<IFC4.IFCWindowTypePartitioning>(partitioningType);\r\n            IFCAnyHandleUtil.SetAttribute(window, \"PartitioningType\", validatedType, true);\r\n            if (String.Compare(partitioningType, \"UserDefined\", true) == 0 && string.IsNullOrEmpty(userDefinedPartitioningType))\r\n               IFCAnyHandleUtil.SetAttribute(window, \"UserDefinedPartitioningType\", userDefinedPartitioningType);\r\n         }\r\n         SetElement(window, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return window;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcPropertySingleValue and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"nominalValue\">The value of the property.</param>\r\n      /// <param name=\"unit\">The unit. Must be unset for IFC4RV.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePropertySingleValue(IFCFile file,\r\n         PropertyDescription propertyDescription, IFCData nominalValue, IFCAnyHandle unit)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView && unit != null)\r\n            throw new ArgumentException(\"IfcPropertySingleValue.Unit must be null for IFC4RV.\", \"unit\");\r\n\r\n         IFCAnyHandle propertySingleValue = CreateInstance(file, IFCEntityType.IfcPropertySingleValue, null);\r\n         IFCAnyHandleUtil.SetAttribute(propertySingleValue, \"NominalValue\", nominalValue);\r\n         IFCAnyHandleUtil.SetAttribute(propertySingleValue, \"Unit\", unit);\r\n         SetProperty(propertySingleValue, propertyDescription);\r\n         return propertySingleValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcPropertyEnumeratedValue and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"propertyDescription\">The name and description.</param>\r\n      /// <param name=\"enumerationValues\">The values of the property.</param>\r\n      /// <param name=\"enumerationReference\">The enumeration reference.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePropertyEnumeratedValue(IFCFile file,\r\n          PropertyDescription propertyDescription, IList<IFCData> enumerationValues, IFCAnyHandle enumerationReference)\r\n      {\r\n         IFCAnyHandle propertyEnumeratedValue = CreateInstance(file, IFCEntityType.IfcPropertyEnumeratedValue, null);\r\n         if ((enumerationValues?.Count ?? 0) > 0)\r\n         {\r\n            IFCAnyHandleUtil.SetAttribute(propertyEnumeratedValue, \"EnumerationValues\", enumerationValues);\r\n         }\r\n         else \r\n         {\r\n            throw new InvalidOperationException(\"Trying to create IfcPropertyEnumeratedValue with no values.\");\r\n         }\r\n         IFCAnyHandleUtil.SetAttribute(propertyEnumeratedValue, \"EnumerationReference\", enumerationReference);\r\n         SetProperty(propertyEnumeratedValue, propertyDescription);\r\n         return propertyEnumeratedValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcPropertyReferenceValue and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"propertyDescription\">The name and description.</param>\r\n      /// <param name=\"usageName\">The use of the value within the property.</param>\r\n      /// <param name=\"propertyReference\">The entity being referenced.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePropertyReferenceValue(IFCFile file,\r\n         PropertyDescription propertyDescription, string usageName, IFCAnyHandle propertyReference)\r\n      {\r\n         IFCAnyHandle propertyReferenceValue = CreateInstance(file, IFCEntityType.IfcPropertyReferenceValue, null);\r\n         IFCAnyHandleUtil.SetAttribute(propertyReferenceValue, \"UsageName\", usageName);\r\n         IFCAnyHandleUtil.SetAttribute(propertyReferenceValue, \"PropertyReference\", propertyReference);\r\n         SetProperty(propertyReferenceValue, propertyDescription);\r\n         return propertyReferenceValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcPropertyListValue and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"propertyDescription\">The name and description.</param>\r\n      /// <param name=\"listValues\">The values of the property.</param>\r\n      /// <param name=\"unit\">The unit. Must be unset for IFC4RV.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePropertyListValue(IFCFile file,\r\n         PropertyDescription propertyDescription, IList<IFCData> listValues, IFCAnyHandle unit)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView && unit != null)\r\n            throw new ArgumentException(\"IfcPropertyListValue.Unit must be null for IFC4RV.\", \"unit\");\r\n\r\n         IFCAnyHandle propertyListValue = CreateInstance(file, IFCEntityType.IfcPropertyListValue, null);\r\n         IFCAnyHandleUtil.SetAttribute(propertyListValue, \"ListValues\", listValues);\r\n         IFCAnyHandleUtil.SetAttribute(propertyListValue, \"Unit\", unit);\r\n         SetProperty(propertyListValue, propertyDescription);\r\n         return propertyListValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcPropertyTableValue and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"propertyDescription\">The name and description.</param>\r\n      /// <param name=\"definingValues\">The defining values of the property.</param>\r\n      /// <param name=\"definedValues\">The defined values of the property.</param>\r\n      /// <param name=\"definingUnit\">Unit for the defining values. Must be unset for IFC4RV.</param>\r\n      /// <param name=\"definedUnit\">Unit for the defined values. Must be unset for IFC4RV.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePropertyTableValue(IFCFile file,\r\n          PropertyDescription propertyDescription, IList<IFCData> definingValues, IList<IFCData> definedValues, IFCAnyHandle definingUnit, IFCAnyHandle definedUnit)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView && definingUnit != null)\r\n            throw new ArgumentException(\"IfcPropertyTableValue.DefiningUnit must be null for IFC4RV.\", \"definingUnit\");\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView && definedUnit != null)\r\n            throw new ArgumentException(\"IfcPropertyTableValue.DefinedUnit must be null for IFC4RV.\", \"definedUnit\");\r\n\r\n         IFCAnyHandle propertyTableValue = CreateInstance(file, IFCEntityType.IfcPropertyTableValue, null);\r\n         IFCAnyHandleUtil.SetAttribute(propertyTableValue, \"DefiningValues\", definingValues);\r\n         IFCAnyHandleUtil.SetAttribute(propertyTableValue, \"DefinedValues\", definedValues);\r\n         IFCAnyHandleUtil.SetAttribute(propertyTableValue, \"DefiningUnit\", definingUnit);\r\n         IFCAnyHandleUtil.SetAttribute(propertyTableValue, \"DefinedUnit\", definedUnit);\r\n         SetProperty(propertyTableValue, propertyDescription);\r\n         return propertyTableValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcPropertyBoundedValue and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"lowerBoundValue\">The lower bound value of the property.</param>\r\n      /// <param name=\"upperBoundValue\">The upper bound value of the property.</param>\r\n      /// <param name=\"setPointValue\">The point value of the property.</param>\r\n      /// <param name=\"unit\">The unit.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePropertyBoundedValue(IFCFile file,\r\n         PropertyDescription propertyDescription, IFCData lowerBoundValue, IFCData upperBoundValue, IFCData setPointValue, IFCAnyHandle unit)\r\n      {\r\n         IFCAnyHandle propertyBoundedValue = CreateInstance(file, IFCEntityType.IfcPropertyBoundedValue, null);\r\n         IFCAnyHandleUtil.SetAttribute(propertyBoundedValue, \"LowerBoundValue\", lowerBoundValue);\r\n         IFCAnyHandleUtil.SetAttribute(propertyBoundedValue, \"UpperBoundValue\", upperBoundValue);\r\n         IFCAnyHandleUtil.SetAttribute(propertyBoundedValue, \"SetPointValue\", setPointValue);\r\n         IFCAnyHandleUtil.SetAttribute(propertyBoundedValue, \"Unit\", unit);\r\n\r\n         SetProperty(propertyBoundedValue, propertyDescription);\r\n         return propertyBoundedValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcCalendarDate and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"day\">The day of the month in the date.</param>\r\n      /// <param name=\"month\">The month in the date.</param>\r\n      /// <param name=\"year\">The year in the date.</param>\r\n      /// <returns>The handle.</returns>\r\n      private static IFCAnyHandle CreateCalendarDate(IFCFile file, int day, int month, int year)\r\n      {\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            return null;\r\n\r\n         IFCAnyHandle date = CreateInstance(file, IFCEntityType.IfcCalendarDate, null);\r\n\r\n         IFCAnyHandleUtil.SetAttribute(date, \"DayComponent\", day);\r\n         IFCAnyHandleUtil.SetAttribute(date, \"MonthComponent\", month);\r\n         IFCAnyHandleUtil.SetAttribute(date, \"YearComponent\", year);\r\n         return date;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcClassification and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"source\">The source of the classification.</param>\r\n      /// <param name=\"edition\">The edition of the classification system.</param>\r\n      /// <param name=\"editionDateDay\">The Day part of the date associated with this edition of the classification system.</param>\r\n      /// <param name=\"editionDateMonth\">The Month part of the date associated with this edition of the classification system.</param>\r\n      /// <param name=\"editionDateYear\">The Year part of the date associated with this edition of the classification system.</param>\r\n      /// <param name=\"name\">The name of the classification.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateClassification(IFCFile file, string source, string edition, int editionDateDay, int editionDateMonth, int editionDateYear,\r\n         string name, string description, string location)\r\n      {\r\n         IFCAnyHandle classification = CreateInstance(file, IFCEntityType.IfcClassification, null);\r\n         IFCAnyHandleUtil.SetAttribute(classification, \"Source\", source);\r\n         IFCAnyHandleUtil.SetAttribute(classification, \"Edition\", edition);\r\n         IFCAnyHandleUtil.SetAttribute(classification, \"Name\", name);\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            if (editionDateDay > 0 && editionDateMonth > 0 && editionDateYear > 0)\r\n            {\r\n               IFCAnyHandle editionDate = CreateCalendarDate(file, editionDateDay, editionDateMonth, editionDateYear);\r\n               IFCAnyHandleUtil.SetAttribute(classification, \"EditionDate\", editionDate);\r\n            }\r\n         }\r\n         else\r\n         {\r\n            if (editionDateDay > 0 && editionDateMonth > 0 && editionDateYear > 0)\r\n            {\r\n               string editionDate = editionDateYear.ToString(\"D4\") + \"-\" + editionDateMonth.ToString(\"D2\") + \"-\" + editionDateDay.ToString(\"D2\");\r\n               IFCAnyHandleUtil.SetAttribute(classification, \"EditionDate\", editionDate);\r\n            }\r\n\r\n            if (!string.IsNullOrEmpty(description))\r\n               IFCAnyHandleUtil.SetAttribute(classification, \"Description\", description);\r\n\r\n            string attributeName = (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4x3) ? \"Location\" : \"Specification\";\r\n            if (!string.IsNullOrEmpty(location))\r\n               IFCAnyHandleUtil.SetAttribute(classification, attributeName, location);\r\n         }\r\n         return classification;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcClassificationReference and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"location\">Location of the reference (e.g. URL).</param>\r\n      /// <param name=\"itemReference\">Location of the item within the reference source.</param>\r\n      /// <param name=\"name\">Name of the reference.</param>\r\n      /// <param name=\"referencedSource\">The referenced classification.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateClassificationReference(IFCFile file, string location,\r\n         string itemReference, string name, string description, IFCAnyHandle referencedSource)\r\n      {\r\n         // All IfcExternalReference arguments are optional.\r\n         IFCAnyHandle classificationReference = CreateInstance(file, IFCEntityType.IfcClassificationReference, null);\r\n         SetExternalReference(classificationReference, location, itemReference, name);\r\n         IFCAnyHandleUtil.SetAttribute(classificationReference, \"ReferencedSource\", referencedSource);\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            IFCAnyHandleUtil.SetAttribute(classificationReference, \"Description\", description);\r\n\r\n         return classificationReference;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcRelAssociatesClassification and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"globalId\">The GUID of the IfcRelAssociatesClassification.</param>\r\n      /// <param name=\"ownerHistory\">The owner history of the IfcRelAssociatesClassification.</param>\r\n      /// <param name=\"name\">Name of the relation.</param>\r\n      /// <param name=\"description\">Description of the relation.</param>\r\n      /// <param name=\"relatedObjects\">The handles of the objects associated to the classification.</param>\r\n      /// <param name=\"relatingClassification\">The classification assigned to the objects.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRelAssociatesClassification(IFCFile file, string globalId, IFCAnyHandle ownerHistory,\r\n         string name, string description, HashSet<IFCAnyHandle> relatedObjects, IFCAnyHandle relatingClassification)\r\n      {\r\n         IFCAnyHandle relAssociatesClassification = CreateInstance(file, IFCEntityType.IfcRelAssociatesClassification, null);\r\n         SetRelAssociates(relAssociatesClassification, globalId, ownerHistory, name, description, relatedObjects);\r\n         IFCAnyHandleUtil.SetAttribute(relAssociatesClassification, \"RelatingClassification\", relatingClassification);\r\n         return relAssociatesClassification;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcCreateElementAssembly and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"globalId\">The GUID of the IfcCreateElementAssembly.</param>\r\n      /// <param name=\"ownerHistory\">The owner history of the IfcCreateElementAssembly.</param>\r\n      /// <param name=\"name\">Name of the assembly.</param>\r\n      /// <param name=\"description\">Description of the assembly.</param>\r\n      /// <param name=\"objectType\">The object type of the assembly, usually the name of the Assembly type.</param>\r\n      /// <param name=\"objectPlacement\">The placement of the assembly.</param>\r\n      /// <param name=\"representation\">The representation of the assembly, usually empty.</param>\r\n      /// <param name=\"tag\">The tag of the assembly, usually represented by the Element ID.</param>\r\n      /// <param name=\"assemblyPlace\">The place where the assembly is made.</param>\r\n      /// <param name=\"predefinedType\">The type of the assembly, from a list of pre-defined types.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateElementAssembly(ExporterIFC exporterIFC, Element element, string globalId, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, IFCAssemblyPlace? assemblyPlace, IFCElementAssemblyType predefinedType)\r\n      {\r\n         IFCAnyHandle elementAssembly = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcElementAssembly, element);\r\n         SetElement(elementAssembly, element, globalId, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n\r\n         if (assemblyPlace != null)\r\n            IFCAnyHandleUtil.SetAttribute(elementAssembly, \"AssemblyPlace\", assemblyPlace);\r\n\r\n         IFCAnyHandleUtil.SetAttribute(elementAssembly, \"PredefinedType\", predefinedType);\r\n         return elementAssembly;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcBuildingElementPart and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID of the IfcBuildingElementPart.</param>\r\n      /// <param name=\"ownerHistory\">The owner history of the IfcBuildingElementPart.</param>\r\n      /// <param name=\"name\">Name of the entity.</param>\r\n      /// <param name=\"description\">Description of the entity.</param>\r\n      /// <param name=\"objectType\">Object type of the entity.</param>\r\n      /// <param name=\"objectPlacement\">Placement handle of the entity.</param>\r\n      /// <param name=\"representation\">Representation handle of the enti</param>\r\n      /// <param name=\"elementTag\">The element tag.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateBuildingElementPart(ExporterIFC exporterIFC, Element element, string guid, IFCAnyHandle ownerHistory,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation)\r\n      {\r\n         IFCAnyHandle part = CreateInstance(exporterIFC.GetFile(), IFCEntityType.IfcBuildingElementPart, element);\r\n         SetElement(part, element, guid, ownerHistory, null, null, null, objectPlacement, representation, null);\r\n         return part;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcAnnotationFillArea and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"outerBoundary\">The outer boundary.</param>\r\n      /// <param name=\"innerBoundaries\">The inner boundaries.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateAnnotationFillArea(IFCFile file, IFCAnyHandle outerBoundary, HashSet<IFCAnyHandle> innerBoundaries)\r\n      {\r\n         IFCAnyHandle annotationFillArea = CreateInstance(file, IFCEntityType.IfcAnnotationFillArea, null);\r\n         IFCAnyHandleUtil.SetAttribute(annotationFillArea, \"OuterBoundary\", outerBoundary);\r\n         IFCAnyHandleUtil.SetAttribute(annotationFillArea, \"InnerBoundaries\", innerBoundaries);\r\n         return annotationFillArea;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcArbitraryClosedProfileDef and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"profileType\">The profile type.</param>\r\n      /// <param name=\"profileName\">The profile name.</param>\r\n      /// <param name=\"outerCurve\">The profile curve.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateArbitraryClosedProfileDef(IFCFile file, IFCProfileType profileType, string profileName, IFCAnyHandle outerCurve)\r\n      {\r\n         IFCAnyHandle arbitraryClosedProfileDef = CreateInstance(file, IFCEntityType.IfcArbitraryClosedProfileDef, null);\r\n         SetArbitraryClosedProfileDef(arbitraryClosedProfileDef, profileType, profileName, outerCurve);\r\n         return arbitraryClosedProfileDef;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcArbitraryOpenProfileDef and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"profileType\">The profile type.</param>\r\n      /// <param name=\"profileName\">The profile name.</param>\r\n      /// <param name=\"curve\">The profile curve.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateArbitraryOpenProfileDef(IFCFile file, IFCProfileType profileType, string profileName, IFCAnyHandle curve)\r\n      {\r\n         IFCAnyHandle arbitraryOpenProfileDef = CreateInstance(file, IFCEntityType.IfcArbitraryOpenProfileDef, null);\r\n         SetProfileDef(arbitraryOpenProfileDef, profileType, profileName);\r\n         IFCAnyHandleUtil.SetAttribute(arbitraryOpenProfileDef, \"Curve\", curve);\r\n\r\n         return arbitraryOpenProfileDef;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcArbitraryProfileDefWithVoids and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"profileType\">The profile type.</param>\r\n      /// <param name=\"profileName\">The profile name.</param>\r\n      /// <param name=\"positionHnd\">The profile position.</param>\r\n      /// <param name=\"radius\">The profile radius.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateArbitraryProfileDefWithVoids(IFCFile file, IFCProfileType profileType, string profileName, IFCAnyHandle outerCurve,\r\n          HashSet<IFCAnyHandle> innerCurves)\r\n      {\r\n         IFCAnyHandle arbitraryProfileDefWithVoids = CreateInstance(file, IFCEntityType.IfcArbitraryProfileDefWithVoids, null);\r\n         SetArbitraryClosedProfileDef(arbitraryProfileDefWithVoids, profileType, profileName, outerCurve);\r\n         IFCAnyHandleUtil.SetAttribute(arbitraryProfileDefWithVoids, \"InnerCurves\", innerCurves);\r\n         return arbitraryProfileDefWithVoids;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcCircleProfileDef and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"profileType\">The profile type.</param>\r\n      /// <param name=\"profileName\">The profile name.</param>\r\n      /// <param name=\"positionHnd\">The profile position.</param>\r\n      /// <param name=\"radius\">The profile radius.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateCircleProfileDef(IFCFile file, IFCProfileType profileType, string profileName, IFCAnyHandle positionHnd,\r\n          double radius)\r\n      {\r\n         IFCAnyHandle circleProfileDef = CreateInstance(file, IFCEntityType.IfcCircleProfileDef, null);\r\n         SetCircleProfileDef(circleProfileDef, profileType, profileName, positionHnd, radius);\r\n         return circleProfileDef;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcCircleHollowProfileDef and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"profileType\">The profile type.</param>\r\n      /// <param name=\"profileName\">The profile name.</param>\r\n      /// <param name=\"positionHnd\">The profile position.</param>\r\n      /// <param name=\"radius\">The profile radius.</param>\r\n      /// <param name=\"wallThickness\">The wall thickness.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateCircleHollowProfileDef(IFCFile file, IFCProfileType profileType, string profileName, IFCAnyHandle positionHnd,\r\n          double radius, double wallThickness)\r\n      {\r\n         if (wallThickness < MathUtil.Eps())\r\n            throw new ArgumentException(\"Non-positive wall thickness parameter.\", \"wallThickness\");\r\n\r\n         IFCAnyHandle circleHollowProfileDef = CreateInstance(file, IFCEntityType.IfcCircleHollowProfileDef, null);\r\n         SetCircleProfileDef(circleHollowProfileDef, profileType, profileName, positionHnd, radius);\r\n         IFCAnyHandleUtil.SetAttribute(circleHollowProfileDef, \"WallThickness\", wallThickness);\r\n         return circleHollowProfileDef;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcRectangleProfileDef and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"profileType\">The profile type.</param>\r\n      /// <param name=\"profileName\">The profile name.</param>\r\n      /// <param name=\"positionHnd\">The profile position.</param>\r\n      /// <param name=\"xLen\">The profile length.</param>\r\n      /// <param name=\"yLen\">The profile width.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateRectangleProfileDef(IFCFile file, IFCProfileType profileType, string profileName, IFCAnyHandle positionHnd,\r\n          double length, double width)\r\n      {\r\n         if (length < MathUtil.Eps())\r\n            throw new ArgumentException(\"Non-positive length parameter.\", \"length\");\r\n         if (width < MathUtil.Eps())\r\n            throw new ArgumentException(\"Non-positive width parameter.\", \"width\");\r\n\r\n         IFCAnyHandle rectangleProfileDef = CreateInstance(file, IFCEntityType.IfcRectangleProfileDef, null);\r\n         SetParameterizedProfileDef(rectangleProfileDef, profileType, profileName, positionHnd);\r\n         IFCAnyHandleUtil.SetAttribute(rectangleProfileDef, \"XDim\", length);\r\n         IFCAnyHandleUtil.SetAttribute(rectangleProfileDef, \"YDim\", width);\r\n         return rectangleProfileDef;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcIShapeProfileDef and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"profileType\">The profile type.</param>\r\n      /// <param name=\"profileName\">The profile name.</param>\r\n      /// <param name=\"positionHnd\">The profile position.</param>\r\n      /// <param name=\"xLen\">The profile length.</param>\r\n      /// <param name=\"yLen\">The profile width.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateIShapeProfileDef(IFCFile file, IFCProfileType profileType, string profileName, IFCAnyHandle positionHnd,\r\n          double overallWidth, double overallDepth, double webThickness, double flangeThickness, double? filletRadius)\r\n      {\r\n         if (overallWidth < MathUtil.Eps())\r\n            throw new ArgumentException(\"Non-positive width parameter.\", \"overallWidth\");\r\n         if (overallDepth < MathUtil.Eps())\r\n            throw new ArgumentException(\"Non-positive depth parameter.\", \"overallDepth\");\r\n         if (webThickness < MathUtil.Eps())\r\n            throw new ArgumentException(\"Non-positive web thickness parameter.\", \"webThickness\");\r\n         if (flangeThickness < MathUtil.Eps())\r\n            throw new ArgumentException(\"Non-positive flange thickness parameter.\", \"flangeThickness\");\r\n         if ((filletRadius != null) && filletRadius.GetValueOrDefault() < MathUtil.Eps())\r\n            throw new ArgumentException(\"Non-positive fillet radius parameter.\", \"filletRadius\");\r\n\r\n         IFCAnyHandle iShapeProfileDef = CreateInstance(file, IFCEntityType.IfcIShapeProfileDef, null);\r\n         SetParameterizedProfileDef(iShapeProfileDef, profileType, profileName, positionHnd);\r\n         IFCAnyHandleUtil.SetAttribute(iShapeProfileDef, \"OverallWidth\", overallWidth);\r\n         IFCAnyHandleUtil.SetAttribute(iShapeProfileDef, \"OverallDepth\", overallDepth);\r\n         IFCAnyHandleUtil.SetAttribute(iShapeProfileDef, \"WebThickness\", webThickness);\r\n         IFCAnyHandleUtil.SetAttribute(iShapeProfileDef, \"FlangeThickness\", flangeThickness);\r\n         IFCAnyHandleUtil.SetAttribute(iShapeProfileDef, \"FilletRadius\", filletRadius);\r\n         return iShapeProfileDef;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcExtrudedAreaSolid and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"sweptArea\">The profile.</param>\r\n      /// <param name=\"solidAxis\">The plane of the profile.</param>\r\n      /// <param name=\"extrudedDirection\">The extrusion direction.</param>\r\n      /// <param name=\"depth\">The extrusion depth.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateExtrudedAreaSolid(IFCFile file, IFCAnyHandle sweptArea, IFCAnyHandle solidAxis, IFCAnyHandle extrudedDirection,\r\n          double depth)\r\n      {\r\n         if (depth < MathUtil.Eps())\r\n            throw new ArgumentException(\"Non-positive depth parameter.\", \"depth\");\r\n\r\n         IFCAnyHandle extrudedAreaSolid = CreateInstance(file, IFCEntityType.IfcExtrudedAreaSolid, null);\r\n         SetSweptAreaSolid(extrudedAreaSolid, sweptArea, solidAxis);\r\n         IFCAnyHandleUtil.SetAttribute(extrudedAreaSolid, \"ExtrudedDirection\", extrudedDirection);\r\n         IFCAnyHandleUtil.SetAttribute(extrudedAreaSolid, \"Depth\", depth);\r\n         return extrudedAreaSolid;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcSurfaceCurveSweptAreaSolid and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"sweptArea\">The profile.</param>\r\n      /// <param name=\"solidAxis\">The plane of the profile.</param>\r\n      /// <param name=\"directrix\">The curve used to define the sweeping operation.</param>\r\n      /// <param name=\"startParam\">The start parameter of sweeping.</param>\r\n      /// <param name=\"endParam\">The end parameter of sweeping.</param>\r\n      /// <param name=\"referencePlane\">The surface containing the Directrix.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateSurfaceCurveSweptAreaSolid(IFCFile file, IFCAnyHandle sweptArea, IFCAnyHandle solidAxis, IFCAnyHandle directrix,\r\n          double startParam, double endParam, IFCAnyHandle referencePlane)\r\n      {\r\n         IFCAnyHandle surfaceCurveSweptAreaSolid = CreateInstance(file, IFCEntityType.IfcSurfaceCurveSweptAreaSolid, null);\r\n         SetSweptAreaSolid(surfaceCurveSweptAreaSolid, sweptArea, solidAxis);\r\n         IFCAnyHandleUtil.SetAttribute(surfaceCurveSweptAreaSolid, \"Directrix\", directrix);\r\n\r\n         IFCData startParamData = IFCData.CreateDoubleOfType(startParam, \"IfcParameterValue\");\r\n         IFCAnyHandleUtil.SetAttribute(surfaceCurveSweptAreaSolid, \"StartParam\", startParamData);\r\n\r\n         IFCData endParamData = IFCData.CreateDoubleOfType(endParam, \"IfcParameterValue\");\r\n         IFCAnyHandleUtil.SetAttribute(surfaceCurveSweptAreaSolid, \"EndParam\", endParamData);\r\n\r\n         IFCAnyHandleUtil.SetAttribute(surfaceCurveSweptAreaSolid, \"ReferenceSurface\", referencePlane);\r\n         return surfaceCurveSweptAreaSolid;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcSurfaceOfLinearExtrusion and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"sweptCurve\">The swept curve.</param>\r\n      /// <param name=\"position\">The position.</param>\r\n      /// <param name=\"direction\">The direction.</param>\r\n      /// <param name=\"depth\">The depth.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateSurfaceOfLinearExtrusion(IFCFile file, IFCAnyHandle sweptCurve, IFCAnyHandle position, IFCAnyHandle direction,\r\n          double depth)\r\n      {\r\n         IFCAnyHandle surfaceOfLinearExtrusion = CreateInstance(file, IFCEntityType.IfcSurfaceOfLinearExtrusion, null);\r\n         SetSweptSurface(surfaceOfLinearExtrusion, sweptCurve, position);\r\n         IFCAnyHandleUtil.SetAttribute(surfaceOfLinearExtrusion, \"ExtrudedDirection\", direction);\r\n         IFCAnyHandleUtil.SetAttribute(surfaceOfLinearExtrusion, \"Depth\", depth);\r\n         return surfaceOfLinearExtrusion;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create Advanced Face: IfcSurfaceOfRevolution\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"sweptCurve\">The swept curve</param>\r\n      /// <param name=\"position\">The position</param>\r\n      /// <param name=\"axisPosition\">The axis of revolution</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateSurfaceOfRevolution(IFCFile file, IFCAnyHandle sweptCurve, IFCAnyHandle position, IFCAnyHandle axisPosition)\r\n      {\r\n         IFCAnyHandle revolvedFace = CreateInstance(file, IFCEntityType.IfcSurfaceOfRevolution, null);\r\n         SetSweptSurface(revolvedFace, sweptCurve, position);\r\n         IFCAnyHandleUtil.SetAttribute(revolvedFace, \"AxisPosition\", axisPosition);\r\n         return revolvedFace;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcSurfaceStyleRendering and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"surfaceColour\">The optional surface colour.</param>\r\n      /// <param name=\"transparency\">The optional transparency.</param>\r\n      /// <param name=\"diffuseColour\">The optional diffuse colour, as a handle or normalised ratio.</param>\r\n      /// <param name=\"transmissionColour\">The optional transmission colour, as a handle or normalised ratio.</param>\r\n      /// <param name=\"diffuseTransmissionColour\">The optional diffuse transmission colour, as a handle or normalised ratio.</param>\r\n      /// <param name=\"reflectionColour\">The optional reflection colour, as a handle or normalised ratio.</param>\r\n      /// <param name=\"specularColour\">The optional specular colour, as a handle or normalised ratio.</param>\r\n      /// <param name=\"specularHighlight\">The optional specular highlight, as a handle or normalised ratio.</param>\r\n      /// <param name=\"method\">The reflectance method.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateSurfaceStyleRendering(IFCFile file, IFCAnyHandle surfaceColour,\r\n          double? transparency, IFCData diffuseColour,\r\n          IFCData transmissionColour, IFCData diffuseTransmissionColour,\r\n          IFCData reflectionColour, IFCData specularColour, IFCData specularHighlight, IFCReflectanceMethod method)\r\n      {\r\n         IFCAnyHandle surfaceStyleRendering = CreateInstance(file, IFCEntityType.IfcSurfaceStyleRendering, null);\r\n         SetSurfaceStyleShading(surfaceStyleRendering, surfaceColour);\r\n         IFCAnyHandleUtil.SetAttribute(surfaceStyleRendering, \"Transparency\", transparency);\r\n         IFCAnyHandleUtil.SetAttribute(surfaceStyleRendering, \"DiffuseColour\", diffuseColour);\r\n         IFCAnyHandleUtil.SetAttribute(surfaceStyleRendering, \"TransmissionColour\", transmissionColour);\r\n         IFCAnyHandleUtil.SetAttribute(surfaceStyleRendering, \"DiffuseTransmissionColour\", diffuseTransmissionColour);\r\n         IFCAnyHandleUtil.SetAttribute(surfaceStyleRendering, \"ReflectionColour\", reflectionColour);\r\n         IFCAnyHandleUtil.SetAttribute(surfaceStyleRendering, \"SpecularColour\", specularColour);\r\n         IFCAnyHandleUtil.SetAttribute(surfaceStyleRendering, \"SpecularHighlight\", specularHighlight);\r\n         IFCAnyHandleUtil.SetAttribute(surfaceStyleRendering, \"ReflectanceMethod\", method);\r\n\r\n         return surfaceStyleRendering;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcSurfaceStyle and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"side\">The side of the surface being used.</param>\r\n      /// <param name=\"styles\">The styles associated with the surface.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateSurfaceStyle(IFCFile file, string name, IFCSurfaceSide side, ISet<IFCAnyHandle> styles)\r\n      {\r\n         IFCAnyHandle surfaceStyle = CreateInstance(file, IFCEntityType.IfcSurfaceStyle, null);\r\n         SetPresentationStyle(surfaceStyle, name);\r\n         IFCAnyHandleUtil.SetAttribute(surfaceStyle, \"Side\", side);\r\n         IFCAnyHandleUtil.SetAttribute(surfaceStyle, \"Styles\", styles);\r\n         return surfaceStyle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcCurveStyle and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"font\">A curve style font which is used to present a curve.</param>\r\n      /// <param name=\"width\">A positive length measure in units of the presentation area for the width of a presented curve.</param>\r\n      /// <param name=\"colour\">The colour of the visible part of the curve.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateCurveStyle(IFCFile file, string name, IFCAnyHandle font, IFCData width, IFCAnyHandle colour)\r\n      {\r\n         IFCAnyHandle curveStyle = CreateInstance(file, IFCEntityType.IfcCurveStyle, null);\r\n         SetPresentationStyle(curveStyle, name);\r\n         IFCAnyHandleUtil.SetAttribute(curveStyle, \"CurveFont\", font);\r\n         IFCAnyHandleUtil.SetAttribute(curveStyle, \"CurveWidth\", width);\r\n         IFCAnyHandleUtil.SetAttribute(curveStyle, \"CurveColour\", colour);\r\n         return curveStyle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcHalfSpaceSoild and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"baseSurface\">The clipping surface.</param>\r\n      /// <param name=\"agreementFlag\">True if the normal of the half space solid points away from the base extrusion, false otherwise.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateHalfSpaceSolid(IFCFile file, IFCAnyHandle baseSurface, bool agreementFlag)\r\n      {\r\n         IFCAnyHandle halfSpaceSolidHnd = CreateInstance(file, IFCEntityType.IfcHalfSpaceSolid, null);\r\n         SetHalfSpaceSolid(halfSpaceSolidHnd, baseSurface, agreementFlag);\r\n         return halfSpaceSolidHnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcBooleanClippingResult and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"clipOperator\">The clipping operator.</param>\r\n      /// <param name=\"firstOperand\">The handle to be clipped.</param>\r\n      /// <param name=\"secondOperand\">The clipping handle.</param>\r\n      /// <returns>The IfcBooleanClippingResult handle.</returns>\r\n      public static IFCAnyHandle CreateBooleanClippingResult(IFCFile file, IFCBooleanOperator clipOperator,\r\n          IFCAnyHandle firstOperand, IFCAnyHandle secondOperand)\r\n      {\r\n         IFCAnyHandle booleanClippingResultHnd = CreateInstance(file, IFCEntityType.IfcBooleanClippingResult, null);\r\n         SetBooleanResult(booleanClippingResultHnd, clipOperator, firstOperand, secondOperand);\r\n         return booleanClippingResultHnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcBooleanResult and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"boolOperator\">The boolean operator.</param>\r\n      /// <param name=\"firstOperand\">The first operand to be operated upon by the Boolean operation.</param>\r\n      /// <param name=\"secondOperand\">The second operand specified for the operation.</param>\r\n      /// <returns>The IfcBooleanResult handle.</returns>\r\n      public static IFCAnyHandle CreateBooleanResult(IFCFile file, IFCBooleanOperator boolOperator,\r\n          IFCAnyHandle firstOperand, IFCAnyHandle secondOperand)\r\n      {\r\n         IFCAnyHandle booleanResultHnd = CreateInstance(file, IFCEntityType.IfcBooleanResult, null);\r\n         SetBooleanResult(booleanResultHnd, boolOperator, firstOperand, secondOperand);\r\n         return booleanResultHnd;\r\n      }\r\n\r\n      public static IFCAnyHandle CreatePolygonalBoundedHalfSpace(IFCFile file, IFCAnyHandle position, IFCAnyHandle polygonalBoundary,\r\n          IFCAnyHandle baseSurface, bool agreementFlag)\r\n      {\r\n         IFCAnyHandle polygonalBoundedHalfSpaceHnd = CreateInstance(file, IFCEntityType.IfcPolygonalBoundedHalfSpace, null);\r\n         SetHalfSpaceSolid(polygonalBoundedHalfSpaceHnd, baseSurface, agreementFlag);\r\n         IFCAnyHandleUtil.SetAttribute(polygonalBoundedHalfSpaceHnd, \"Position\", position);\r\n         IFCAnyHandleUtil.SetAttribute(polygonalBoundedHalfSpaceHnd, \"PolygonalBoundary\", polygonalBoundary);\r\n         return polygonalBoundedHalfSpaceHnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcPlane and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"position\">The plane coordinate system.</param>\r\n      /// <returns>The IfcPlane handle.</returns>\r\n      public static IFCAnyHandle CreatePlane(IFCFile file, IFCAnyHandle position)\r\n      {\r\n         IFCAnyHandle planeHnd = CreateInstance(file, IFCEntityType.IfcPlane, null);\r\n         SetElementarySurface(planeHnd, position);\r\n         return planeHnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create unbounded Advanced Face: IfcCylindricalSurface\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"position\">the origin</param>\r\n      /// <param name=\"radius\">The radius of the cylinder</param>\r\n      /// <returns>the handle</returns>\r\n      public static IFCAnyHandle CreateCylindricalSurface(IFCFile file, IFCAnyHandle position, double radius)\r\n      {\r\n         IFCAnyHandle cylindricalSurface = CreateInstance(file, IFCEntityType.IfcCylindricalSurface, null);\r\n         SetElementarySurface(cylindricalSurface, position);\r\n         IFCAnyHandleUtil.SetAttribute(cylindricalSurface, \"Radius\", radius);\r\n         return cylindricalSurface;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing an IfcActor and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name</param>\r\n      /// <param name=\"description\">The description</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"theActor\">The actor.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateActor(IFCFile file, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, string objectType, IFCAnyHandle theActor)\r\n      {\r\n         IFCAnyHandle actorHandle = CreateInstance(file, IFCEntityType.IfcActor, null);\r\n         SetActor(actorHandle, guid, ownerHistory, name, description, objectType, theActor);\r\n         return actorHandle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a handle representing IfcActorRole and assign it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">the file</param>\r\n      /// <param name=\"roleStr\">Role enum in string format</param>\r\n      /// <param name=\"userDefinedRole\">string for User Defined Role</param>\r\n      /// <param name=\"description\">description</param>\r\n      /// <returns></returns>\r\n      public static IFCAnyHandle CreateActorRole(IFCFile file, string roleStr, string userDefinedRole, string description)\r\n      {\r\n\r\n         IFCAnyHandle actorRole = CreateInstance(file, IFCEntityType.IfcActorRole, null);\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            Revit.IFC.Export.Toolkit.IFC4.IFCRole roleEnum;\r\n            if (!Enum.TryParse(roleStr, out roleEnum)) roleEnum = Revit.IFC.Export.Toolkit.IFC4.IFCRole.USERDEFINED;\r\n            IFCAnyHandleUtil.SetAttribute(actorRole, \"Role\", roleEnum);\r\n         }\r\n         else\r\n         {\r\n            Revit.IFC.Export.Toolkit.IFCRoleEnum roleEnum;\r\n            if (!Enum.TryParse(roleStr, out roleEnum)) roleEnum = Revit.IFC.Export.Toolkit.IFCRoleEnum.UserDefined;\r\n            IFCAnyHandleUtil.SetAttribute(actorRole, \"Role\", roleEnum);\r\n         }\r\n         IFCAnyHandleUtil.SetAttribute(actorRole, \"UserDefinedRole\", userDefinedRole);\r\n         IFCAnyHandleUtil.SetAttribute(actorRole, \"Description\", description);\r\n         return actorRole;\r\n      }\r\n\r\n      /// Creates an IfcGrid and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"objectType\">The object type.</param>\r\n      /// <param name=\"objectPlacement\">The object placement.</param>\r\n      /// <param name=\"representation\">The geometric representation of the entity.</param>\r\n      /// <param name=\"uAxes\">The grid lines along the U axis.</param>\r\n      /// <param name=\"vAxes\">The grid lines along the V axis.</param>\r\n      /// <param name=\"wAxes\">The optional grid lines along the W axis.</param>\r\n      /// <param name=\"predefinedType\">The optional predefined type.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateGrid(IFCFile file, string guid, IFCAnyHandle ownerHistory, string name,\r\n          IFCAnyHandle objectPlacement, IFCAnyHandle representation, IList<IFCAnyHandle> uAxes, IList<IFCAnyHandle> vAxes, \r\n          IList<IFCAnyHandle> wAxes, string predefinedType)\r\n      {\r\n         IFCAnyHandle grid = CreateInstance(file, IFCEntityType.IfcGrid, null);\r\n         IFCAnyHandleUtil.SetAttribute(grid, \"UAxes\", uAxes);\r\n         IFCAnyHandleUtil.SetAttribute(grid, \"VAxes\", vAxes);\r\n         IFCAnyHandleUtil.SetAttribute(grid, \"wAxes\", wAxes);\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            SetSpecificEnumAttr(grid, \"PredefinedType\", predefinedType, \"IfcGridType\");\r\n         }\r\n\r\n         SetProduct(grid, null, guid, ownerHistory, name, null, null, objectPlacement, representation);\r\n         return grid;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcGridAxis and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"axisTag\">The AxisTag.</param>\r\n      /// <param name=\"axisCurve\">The curve handle of the grid axis.</param>\r\n      /// <param name=\"sameSense\">The SameSense.</param>\r\n      /// <returns>The handle</returns>\r\n      public static IFCAnyHandle CreateGridAxis(IFCFile file, string axisTag, IFCAnyHandle axisCurve, bool sameSense)\r\n      {\r\n         IFCAnyHandle gridAxis = CreateInstance(file, IFCEntityType.IfcGridAxis, null);\r\n         if (axisTag != string.Empty)\r\n         {\r\n            IFCAnyHandleUtil.SetAttribute(gridAxis, \"AxisTag\", axisTag);\r\n         }\r\n         IFCAnyHandleUtil.SetAttribute(gridAxis, \"AxisCurve\", axisCurve);\r\n         IFCAnyHandleUtil.SetAttribute(gridAxis, \"SameSense\", sameSense);\r\n         return gridAxis;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcGridPlacement and assigns it to the file.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"placementLocation\">The PlacementLocation.</param>\r\n      /// <param name=\"placementRefDirection\">The PlacementRefDirection.</param>\r\n      /// <returns>The handle</returns>\r\n      public static IFCAnyHandle CreateGridPlacement(IFCFile file, IFCAnyHandle placementLocation, IFCAnyHandle placementRefDirection)\r\n      {\r\n         IFCAnyHandle gridPlacement = CreateInstance(file, IFCEntityType.IfcGridPlacement, null);\r\n         IFCAnyHandleUtil.SetAttribute(gridPlacement, \"PlacementLocation\", placementLocation);\r\n         IFCAnyHandleUtil.SetAttribute(gridPlacement, \"PlacementRefDirection\", placementRefDirection);\r\n         return gridPlacement;\r\n      }\r\n      /// <summary>\r\n      /// Create IfcIndexedColourMap entity and assign it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"mappedTo\">The associated IfcTesselatedFaceSet</param>\r\n      /// <param name=\"opacity\">The opacity</param>\r\n      /// <param name=\"colours\">the IfcColourRgbList entity</param>\r\n      /// <param name=\"colourIndex\">the colour index</param>\r\n      /// <returns>the IfcIndexedColourMap entity</returns>\r\n      public static IFCAnyHandle CreateIndexedColourMap(IFCFile file, IFCAnyHandle mappedTo, double? opacity, IFCAnyHandle colours, IList<int> colourIndex)\r\n      {\r\n         IFCAnyHandle indexedColourMap = CreateInstance(file, IFCEntityType.IfcIndexedColourMap, null);\r\n         IFCAnyHandleUtil.SetAttribute(indexedColourMap, \"MappedTo\", mappedTo);\r\n         if (opacity.HasValue)\r\n         {\r\n            double inRangeOpacity = Math.Min(Math.Max(opacity.Value, 0.0), 1.0);\r\n            IFCAnyHandleUtil.SetAttribute(indexedColourMap, \"Opacity\", inRangeOpacity);\r\n         }\r\n         IFCAnyHandleUtil.SetAttribute(indexedColourMap, \"Colours\", colours);\r\n         IFCAnyHandleUtil.SetAttribute(indexedColourMap, \"ColourIndex\", colourIndex);\r\n         return indexedColourMap;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create IfcColourRgbList entity and assign it to the file\r\n      /// </summary>\r\n      /// <param name=\"file\">the File</param>\r\n      /// <param name=\"colourList\">the ColourRgbList data</param>\r\n      /// <returns>return IfcColourRgbList</returns>\r\n      public static IFCAnyHandle CreateColourRgbList(IFCFile file, IList<IList<double>> colourList)\r\n      {\r\n         IFCAnyHandle colourRgbList = CreateInstance(file, IFCEntityType.IfcColourRgbList, null);\r\n         IFCAnyHandleUtil.SetAttribute(colourRgbList, \"ColourList\", colourList, 1, null, 3, 3);\r\n         return colourRgbList;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create IfcCoordinateReferenceSystem\r\n      /// </summary>\r\n      /// <param name=\"file\">the File</param>\r\n      /// <param name=\"name\">Coordinate reference system name</param>\r\n      /// <param name=\"description\">description</param>\r\n      /// <param name=\"geodeticDatum\">Geomdetic Datum</param>\r\n      /// <param name=\"verticalDatum\">Vertical Datum</param>\r\n      /// <returns></returns>\r\n      public static IFCAnyHandle ProjectedCRS(IFCFile file, string name, string description, string geodeticDatum, string verticalDatum,\r\n            string mapProjection, string mapZone, IFCAnyHandle mapUnit)\r\n      {\r\n         IFCAnyHandle coordinateReferenceSystem = CreateInstance(file, IFCEntityType.IfcProjectedCRS, null);\r\n         IFCAnyHandleUtil.SetAttribute(coordinateReferenceSystem, \"Name\", name);\r\n         if (string.IsNullOrEmpty(description))\r\n            IFCAnyHandleUtil.SetAttribute(coordinateReferenceSystem, \"Description\", description);\r\n         if (string.IsNullOrEmpty(geodeticDatum))\r\n            IFCAnyHandleUtil.SetAttribute(coordinateReferenceSystem, \"GeodeticDatum\", geodeticDatum);\r\n         if (string.IsNullOrEmpty(verticalDatum))\r\n            IFCAnyHandleUtil.SetAttribute(coordinateReferenceSystem, \"VerticalDatum\", verticalDatum);\r\n         if (string.IsNullOrEmpty(verticalDatum))\r\n            IFCAnyHandleUtil.SetAttribute(coordinateReferenceSystem, \"MapProjection\", mapProjection);\r\n         if (string.IsNullOrEmpty(verticalDatum))\r\n            IFCAnyHandleUtil.SetAttribute(coordinateReferenceSystem, \"MapZone\", mapZone);\r\n         if (string.IsNullOrEmpty(verticalDatum))\r\n            IFCAnyHandleUtil.SetAttribute(coordinateReferenceSystem, \"MapUnit\", mapUnit);\r\n\r\n         return coordinateReferenceSystem;\r\n      }\r\n\r\n      private static bool IsDeprecatedType(string theEnumType, string validatedString)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            return false;\r\n\r\n         if (string.Compare(theEnumType, \"IfcWallType\", true) == 0)\r\n         {\r\n            if ((string.Compare(validatedString, \"STANDARD\", true) == 0) ||\r\n               (string.Compare(validatedString, \"POLYGONAL\", true) == 0) ||\r\n               (string.Compare(validatedString, \"ELEMENTEDWALL\", true) == 0))\r\n               return true;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      private static void SetSpecificEnumAttr(IFCAnyHandle elemHnd, string attributeNane, string predefTypeStr, string theEnumType)\r\n      {\r\n         string validatedType = IFCValidateEntry.GetValidIFCPredefinedType(predefTypeStr, theEnumType);\r\n         if (string.IsNullOrEmpty(validatedType))\r\n            validatedType = \"NOTDEFINED\";\r\n\r\n         // This is for Enum value that is still in the list but has been deprecated\r\n         if (IsDeprecatedType(theEnumType, validatedType))\r\n            validatedType = \"NOTDEFINED\";\r\n\r\n         // In some cases, NOTDEFINED enum is not defined. Ignore error in this case\r\n         try\r\n         {\r\n            IFCAnyHandleUtil.SetAttribute(elemHnd, attributeNane, validatedType, true);\r\n         }\r\n         catch { }\r\n      }\r\n      #endregion\r\n\r\n      #region public header creation methods\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing file schema in the header.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateFileSchema(IFCFile file)\r\n      {\r\n         return file.CreateHeaderInstance(\"file_schema\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing file description section in the header.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"descriptions\">The description strings.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateFileDescription(IFCFile file, IList<string> descriptions)\r\n      {\r\n         IFCAnyHandle fileDescription = file.CreateHeaderInstance(\"file_description\");\r\n         IFCAnyHandleUtil.SetAttribute(fileDescription, \"description\", descriptions);\r\n         return fileDescription;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a handle representing file name section in the header.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"name\">The name for the file.</param>\r\n      /// <param name=\"author\">The author list.</param>\r\n      /// <param name=\"organization\">The organization list.</param>\r\n      /// <param name=\"preprocessorVersion\">The preprocessor version.</param>\r\n      /// <param name=\"originatingSystem\">The orginating system.</param>\r\n      /// <param name=\"authorisation\">The authorisation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateFileName(IFCFile file, string name, IList<string> author, IList<string> organization, string preprocessorVersion,\r\n          string originatingSystem, string authorisation)\r\n      {\r\n         IFCAnyHandle fileName = file.CreateHeaderInstance(\"file_name\");\r\n         IFCAnyHandleUtil.SetAttribute(fileName, \"name\", name);\r\n         IFCAnyHandleUtil.SetAttribute(fileName, \"author\", author);\r\n         IFCAnyHandleUtil.SetAttribute(fileName, \"organisation\", organization);\r\n         IFCAnyHandleUtil.SetAttribute(fileName, \"preprocessor_version\", preprocessorVersion);\r\n         IFCAnyHandleUtil.SetAttribute(fileName, \"originating_system\", originatingSystem);\r\n         IFCAnyHandleUtil.SetAttribute(fileName, \"authorisation\", authorisation);\r\n         return fileName;\r\n      }\r\n\r\n      #endregion\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Toolkit/IFCSubElementEnums.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\n// The enums below specify sub-element values to be used in the CreateSubElementGUID function.\r\n// This ensures that their GUIDs are consistent across exports.\r\n// Note that sub-element GUIDs can not be stored on import, so they do not survive roundtrips.\r\nnamespace Revit.IFC.Export.Toolkit\r\n{\r\n   enum IFCAssemblyInstanceSubElements\r\n   {\r\n      RelContainedInSpatialStructure = 1,\r\n      RelAggregates = 2\r\n   }\r\n\r\n   enum IFCBuildingStoreySubElements\r\n   {\r\n      RelContainedInSpatialStructure = 1,\r\n      RelAggregates = 2\r\n   }\r\n\r\n   // Curtain Walls can be created from a variety of elements, including Walls and Roofs.\r\n   // As such, start their subindexes high enough to not bother potential hosts.\r\n   enum IFCCurtainWallSubElements\r\n   {\r\n      RelAggregates = 1024\r\n   }\r\n\r\n   enum IFCDoorSubElements\r\n   {\r\n      DoorLining = 1,\r\n      DoorPanelStart = 2,\r\n      DoorPanelEnd = 17, // 2 through 17 are reserved for panels.\r\n      DoorOpening = 19,\r\n      DoorOpeningRelVoid = 20,\r\n      DoorStyle = 21,\r\n      DoorType = 22\r\n   }\r\n\r\n   enum IFCGroupSubElements\r\n   {\r\n      RelAssignsToGroup = 1,\r\n   }\r\n\r\n   // Used for internal Revit property sets, split instances, and connectors.\r\n   enum IFCGenericSubElements\r\n   {\r\n      PSetRevitInternalStart = 1536,\r\n      PSetRevitInternalEnd = PSetRevitInternalStart + 255,\r\n      PSetRevitInternalRelStart = PSetRevitInternalEnd + 1,\r\n      PSetRevitInternalRelEnd = PSetRevitInternalRelStart + 255, // 2047\r\n                                                                 // 2048 is IFCFamilyInstance.InstanceAsType\r\n      SplitInstanceStart = 2049,\r\n      SplitInstanceEnd = SplitInstanceStart + 255,\r\n      SplitTypeStart = SplitInstanceEnd + 1,\r\n      SplitTypeEnd = SplitTypeStart + 255, // 2560\r\n   }\r\n\r\n   // Family Instances can create a variety of elements.\r\n   // As such, start their subindexes high enough to not bother potential hosts.\r\n   enum IFCFamilyInstanceSubElements\r\n   {\r\n      InstanceAsType = 2048\r\n   }\r\n\r\n   enum IFCHostedSweepSubElements\r\n   {\r\n      PipeSegmentType = 1\r\n   }\r\n\r\n   enum IFCProjectSubElements\r\n   {\r\n      RelContainedInBuildingSpatialStructure = 1,\r\n      RelContainedInSiteSpatialStructure = 2,\r\n      RelAggregatesBuildingStories = 3\r\n   }\r\n\r\n   enum IFCRampSubElements\r\n   {\r\n      ContainedRamp = 2,\r\n      ContainmentRelation = 3, // same as IFCStairSubElements.ContainmentRelation\r\n      FlightIdOffset = 4,\r\n      LandingIdOffset = 201,\r\n      StringerIdOffset = 401\r\n}\r\n\r\n   enum IFCReinforcingBarSubElements\r\n   {\r\n      BarStart = 5,\r\n      BarEnd = BarStart + 1023\r\n   }\r\n\r\n   enum IFCRoofSubElements\r\n   {\r\n      RoofSlabStart = 2,\r\n      RoofSlabEnd = RoofSlabStart + 255\r\n   }\r\n\r\n   enum IFCSlabSubElements\r\n   {\r\n      SubSlabStart = 2,\r\n      SubSlabEnd = SubSlabStart + 255\r\n   }\r\n\r\n   enum IFCStairSubElements\r\n   {\r\n      ContainedStair = 2,\r\n      ContainmentRelation = 3,\r\n      FlightIdOffset = 4,\r\n      LandingIdOffset = 201,\r\n      StringerIdOffset = 401,\r\n}\r\n\r\n   enum IFCWallSubElements\r\n   {\r\n      RelAggregatesReserved = IFCCurtainWallSubElements.RelAggregates\r\n   }\r\n\r\n   enum IFCWindowSubElements\r\n   {\r\n      WindowLining = IFCDoorSubElements.DoorLining,\r\n      WindowPanelStart = IFCDoorSubElements.DoorPanelStart,\r\n      WindowPanelEnd = IFCDoorSubElements.DoorPanelEnd,\r\n      WindowOpening = IFCDoorSubElements.DoorOpening,\r\n      WindowOpeningRelVoid = IFCDoorSubElements.DoorOpeningRelVoid,\r\n      WindowStyle = IFCDoorSubElements.DoorStyle,\r\n      WindowType = IFCDoorSubElements.DoorType\r\n   }\r\n\r\n   enum IFCZoneSubElements\r\n   {\r\n      RelAssignsToGroup = 1,\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Toolkit/IFCValidateEntry.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\n\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Toolkit\r\n{\r\n   public static class IFCValidateEntry\r\n   {\r\n      /// <summary>\r\n      /// Get the IFC type from shared parameters, or from a type name.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"typeName\">The original value.</param>\r\n      /// <returns>The found value.</returns>\r\n      public static string GetValidIFCPredefinedType(/*Element element, */string typeName, string theTypeEnumstr)\r\n      {\r\n         return GetValidIFCPredefinedTypeType(/*element,*/ typeName, null, theTypeEnumstr);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the IFC type from shared parameters, from a type name, or from a default value.\r\n      /// </summary>\r\n      /// <param name=\"typeName\">The type value.</param>\r\n      /// <param name=\"defaultValue\">A default value that can be null.</param>\r\n      /// <returns>The found value.</returns>\r\n      public static string GetValidIFCPredefinedTypeType(string typeName, string defaultValue, string theTypeEnumStr)\r\n      {\r\n         string enumValue = null;\r\n\r\n         if (typeName != null || defaultValue != null)\r\n         {\r\n            IFCVersion ifcVer = IFCVersion.Default;\r\n            if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3)\r\n               //desiredTypeExtra = \"IFC4x3.\";\r\n               ifcVer = IFCVersion.IFC4x3;\r\n            else if (ExporterCacheManager.ExportOptionsCache.ExportAs4)\r\n               //desiredTypeExtra = \"IFC4.\";\r\n               ifcVer = IFCVersion.IFC4;\r\n            else if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3)\r\n               ifcVer = IFCVersion.IFC2x3;\r\n            else if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2)\r\n               ifcVer = IFCVersion.IFC2x2;\r\n            else\r\n            {\r\n               // Default to\r\n               ifcVer = IFCVersion.IFC4;\r\n            }\r\n\r\n            IfcSchemaEntityTree schemaTree = IfcSchemaEntityTree.GetEntityDictFor(ifcVer);\r\n            if (schemaTree != null && typeName != null)\r\n            {\r\n               IList<string> pdefTypeList = IfcSchemaEntityTree.GetPredefinedTypeList(schemaTree, theTypeEnumStr);\r\n               if (pdefTypeList != null && pdefTypeList.Contains(typeName, StringComparer.InvariantCultureIgnoreCase))\r\n                  enumValue = typeName;\r\n            }\r\n         }\r\n\r\n         if (string.IsNullOrEmpty(enumValue) && !string.IsNullOrEmpty(defaultValue))\r\n            return defaultValue;\r\n\r\n         return enumValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the IFC type from shared parameters, from a type name, or from a default value.\r\n      /// </summary>\r\n      /// <typeparam name=\"TEnum\">The type of Enum.</typeparam>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"typeName\">The type value.</param>\r\n      /// <param name=\"defaultValue\">A default value that can be null.</param>\r\n      /// <returns>The found value, or null.</returns>\r\n      public static string GetValidIFCType<TEnum>(Element element, string typeName, string defaultValue) where TEnum : struct\r\n      {\r\n         BuiltInParameter paramId = (element is ElementType) ? BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE_TYPE :\r\n            BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE;\r\n         Parameter exportElementParameter = element.get_Parameter(paramId);\r\n         string value = exportElementParameter?.AsString();\r\n         if (ValidateStrEnum<TEnum>(value) != null)\r\n            return value;\r\n         \r\n         if (paramId == BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE)\r\n         {\r\n            Element elementType = element.Document.GetElement(element.GetTypeId());\r\n            exportElementParameter = elementType?.get_Parameter(BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE_TYPE);\r\n            value = exportElementParameter?.AsString();\r\n            if (ValidateStrEnum<TEnum>(value) != null)\r\n               return value;\r\n         }\r\n\r\n         if (!string.IsNullOrEmpty(typeName) && \r\n            (string.Compare(typeName, \"NotDefined\", true) != 0 || string.IsNullOrEmpty(defaultValue)))\r\n         {\r\n            if (ValidateStrEnum<TEnum>(typeName) != null)\r\n               return typeName;\r\n         }\r\n\r\n         if (!String.IsNullOrEmpty(defaultValue))\r\n            return defaultValue;\r\n\r\n         // We used to return \"NotDefined\" here.  However, that assumed that all types had \"NotDefined\" as a value.\r\n         // It is better to return null.\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Validates that a string belongs to an Enum class.\r\n      /// </summary>\r\n      /// <typeparam name=\"TEnum\">The type of Enum.</typeparam>\r\n      /// <param name=\"strEnumCheck\">The string to check.</param>\r\n      /// <returns>The original string, if valid, or null.</returns>\r\n      public static string ValidateStrEnum<TEnum>(string strEnumCheck) where TEnum : struct\r\n      {\r\n         TEnum enumValue;\r\n\r\n         if (typeof(TEnum).IsEnum)\r\n         {\r\n            // We used to return \"NotDefined\" here.  However, that assumed that all types had \"NotDefined\" as a value.\r\n            // It is better to return null.\r\n            if (!Enum.TryParse(strEnumCheck, true, out enumValue))\r\n               return null;\r\n         }\r\n         return strEnumCheck;\r\n      }\r\n\r\n      public static TEnum ValidateEntityEnum<TEnum>(TEnum entityCheck)\r\n      {\r\n         return entityCheck;\r\n      }\r\n\r\n      public static bool ProcessRuleExceptions(ref string theTypeEnumStr)\r\n      {\r\n         bool processed = false;\r\n         // Particular case: the Predefined type of IfcDistributionCircuit is in IfcDistributionSystemEnum\r\n         if (theTypeEnumStr == \"IfcDistributionCircuit\")\r\n         {\r\n            theTypeEnumStr = \"IfcDistributionSystem\";\r\n            processed = true;\r\n         }\r\n         return processed;\r\n      }\r\n      \r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Toolkit/PlacementSetter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.Architecture;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Toolkit\r\n{\r\n   /// <summary>\r\n   ///    A state-based class that establishes the current IfcLocalPlacement applied to an element being exported.\r\n   /// </summary>\r\n   /// <remarks>\r\n   ///    This class is intended to maintain the placement for the duration that it is needed.\r\n   ///    To ensure that the lifetime of the object is correctly managed, you should declare an instance of this class\r\n   ///    as a part of a 'using' statement in C# or similar construct in other languages.\r\n   /// </remarks>\r\n   public class PlacementSetter : IDisposable\r\n   {\r\n      protected ExporterIFC ExporterIFC { get; set; } = null;\r\n\r\n      /// <summary>\r\n      ///    The handle to the IfcLocalPlacement stored with this setter.\r\n      /// </summary>\r\n      public IFCAnyHandle LocalPlacement { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      ///    The offset to the level.\r\n      /// </summary>\r\n      public double Offset { get; protected set; } = 0.0;\r\n\r\n      /// <summary>\r\n      ///    The level id associated with the element and placement.\r\n      /// </summary>\r\n      public ElementId LevelId { get; protected set; } = ElementId.InvalidElementId;\r\n\r\n      /// <summary>\r\n      ///    The level info related to the element's local placement.\r\n      /// </summary>\r\n      public IFCLevelInfo LevelInfo { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      ///    Creates a new placement setter instance for the given element.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The placement setter.</returns>\r\n      public static PlacementSetter Create(ExporterIFC exporterIFC, Element elem)\r\n      {\r\n         return new PlacementSetter(exporterIFC, elem, null, null, LevelUtil.GetBaseLevelIdForElement(elem), true);\r\n      }\r\n\r\n      /// <summary>\r\n      ///    Creates a new placement setter instance for the given element with the ability to specific overridden transformations.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"instanceOffsetTrf\">The offset transformation for the instance of a type.  Optional, can be <see langword=\"null\"/>.</param>\r\n      /// <param name=\"orientationTrf\">The orientation transformation for the local coordinates being used to export the element.  \r\n      /// Optional, can be <see langword=\"null\"/>.</param>\r\n      public static PlacementSetter Create(ExporterIFC exporterIFC, Element elem, Transform instanceOffsetTrf, Transform orientationTrf)\r\n      {\r\n         return new PlacementSetter(exporterIFC, elem, instanceOffsetTrf, orientationTrf, LevelUtil.GetBaseLevelIdForElement(elem), true);\r\n      }\r\n\r\n      /// <summary>\r\n      ///    Creates a new placement setter instance for the given element with the ability to specific overridden transformations\r\n      ///    and level id.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"orientationTrf\">The orientation transformation for the local coordinates being used to export the element.  \r\n      /// Optional, can be <see langword=\"null\"/>.</param>\r\n      public static PlacementSetter Create(ExporterIFC exporterIFC, Element elem, Transform orientationTrf)\r\n      {\r\n         IFCAnyHandle containerOverrideHnd;\r\n         ElementId overrideLevelId = ParameterUtil.OverrideContainmentParameter(elem, out containerOverrideHnd);\r\n         return Create(exporterIFC, elem, null, orientationTrf, overrideLevelId, containerOverrideHnd);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a placement setter that only pushes a transform without creating an IFC local placement.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"transform\">The transform to push to the exporter's transform stack.</param>\r\n      /// <returns>A new placement setter instance that will pop the transform when disposed.</returns>\r\n      /// <remarks>\r\n      /// This method is useful when you need to temporarily modify the coordinate system\r\n      /// without generating an IFC local placement handle.\r\n      /// </remarks>\r\n      public static PlacementSetter Create(ExporterIFC exporterIFC, Transform transform)\r\n      {\r\n         return new PlacementSetter(exporterIFC, transform);\r\n      }\r\n\r\n      /// <summary>\r\n      ///    Creates a new placement setter instance for the given element with the ability to specific overridden transformations\r\n      ///    and level id.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"instanceOffsetTrf\">The offset transformation for the instance of a type.  Optional, can be <see langword=\"null\"/>.</param>\r\n      /// <param name=\"orientationTrf\">The orientation transformation for the local coordinates being used to export the element.  \r\n      /// Optional, can be <see langword=\"null\"/>.</param>\r\n      /// <param name=\"overrideLevelId\">The level id to reference.  This is intended for use when splitting walls and columns by level.</param>\r\n      /// <param name=\"containerOverrideHnd\">The handle to the level to reference.</param>\r\n      public static PlacementSetter Create(ExporterIFC exporterIFC, Element elem, Transform instanceOffsetTrf, \r\n         Transform orientationTrf, ElementId overrideLevelId, IFCAnyHandle containerOverrideHnd)\r\n      {\r\n         // Call a different PlacementSetter if the containment is overridden to the Site or the Building\r\n         bool allowOverride = true;\r\n         if ((overrideLevelId == null || overrideLevelId == ElementId.InvalidElementId) && containerOverrideHnd != null)\r\n         {\r\n            if (IFCAnyHandleUtil.IsTypeOf(containerOverrideHnd, IFCEntityType.IfcSite)\r\n               || IFCAnyHandleUtil.IsTypeOf(containerOverrideHnd, IFCEntityType.IfcBuilding))\r\n            {\r\n               return new PlacementSetter(exporterIFC, elem, instanceOffsetTrf, orientationTrf, containerOverrideHnd);\r\n            }\r\n\r\n            if (IFCAnyHandleUtil.IsTypeOf(containerOverrideHnd, IFCEntityType.IfcBuildingStorey))\r\n            {\r\n               overrideLevelId = ParameterUtil.OverrideContainmentParameter(elem, out _);\r\n            }\r\n         }\r\n\r\n         if (overrideLevelId == null || overrideLevelId == ElementId.InvalidElementId)\r\n         {\r\n            overrideLevelId = LevelUtil.GetBaseLevelIdForElement(elem);\r\n         }\r\n         else\r\n         {\r\n            allowOverride = false;\r\n         }\r\n\r\n         return new PlacementSetter(exporterIFC, elem, instanceOffsetTrf, orientationTrf, overrideLevelId, allowOverride);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs a simple placement setter that only pushes a transform without taking into account the level transform.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"transform\">The transform to push to the exporter's transform stack.</param>\r\n      /// <remarks>\r\n      /// This constructor creates a minimal PlacementSetter that only manages a transform.\r\n      /// It does not create or manage any IFC entities.\r\n      /// The transform will be popped from the stack when the PlacementSetter is disposed.\r\n      /// </remarks>\r\n      public PlacementSetter(ExporterIFC exporterIFC, Transform transform)\r\n      {\r\n         LocalPlacement = null;\r\n         Offset = 0.0;\r\n         LevelId = ElementId.InvalidElementId;\r\n         LevelInfo = null;\r\n         ExporterIFC = exporterIFC;\r\n         ExporterIFC.PushTransform(transform);\r\n      }\r\n\r\n      /// <summary>\r\n      ///    Constructs a new placement setter instance for the given element with the ability to specific overridden transformations\r\n      ///    and level id.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"familyTrf\">The offset transformation for the instance of a type.  Optional, can be <see langword=\"null\"/>.</param>\r\n      /// <param name=\"orientationTrf\">The orientation transformation for the local coordinates being used to export the element.\r\n      /// Optional, can be <see langword=\"null\"/>.</param>\r\n      /// <param name=\"baseLevelId\">The level id to reference.</param>\r\n      /// <param name=\"allowOverride\">If set to true, allow shared parameters to override the base level id.</param>\r\n      public PlacementSetter(ExporterIFC exporterIFC, Element elem, Transform familyTrf, \r\n         Transform orientationTrf, ElementId baseLevelId, bool allowOverride)\r\n      {\r\n         ExporterIFC = exporterIFC;\r\n\r\n         ElementId overrideLevelId = null;\r\n\r\n         // If allowOverride is true and the base level id is set, then we will override it here.\r\n         if (!allowOverride || baseLevelId == null || \r\n            !ExporterCacheManager.LevelInfoCache.LevelParameterOverride.TryGetValue(baseLevelId, out overrideLevelId))\r\n         {\r\n            overrideLevelId = baseLevelId;\r\n         }\r\n         overrideLevelId ??= ElementId.InvalidElementId;\r\n\r\n         Document doc = elem.Document;\r\n         Element hostElem = elem;\r\n         ElementId elemId = elem.Id;\r\n         ElementId newLevelId = overrideLevelId;\r\n\r\n         bool useOverrideOrigin = false;\r\n         XYZ overrideOrigin = XYZ.Zero;\r\n\r\n         IDictionary<ElementId, IFCLevelInfo> levelInfos = ExporterCacheManager.LevelInfoCache.LevelsById;\r\n\r\n         if (overrideLevelId == ElementId.InvalidElementId)\r\n         {\r\n            if (familyTrf == null)\r\n            {\r\n               // Override for CurveElems -- base level calculation on origin of sketch Plane.\r\n               if (elem is CurveElement)\r\n               {\r\n                  SketchPlane sketchPlane = (elem as CurveElement).SketchPlane;\r\n                  if (sketchPlane != null)\r\n                  {\r\n                     useOverrideOrigin = true;\r\n                     overrideOrigin = sketchPlane.GetPlane().Origin;\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  ElementId hostElemId = ElementId.InvalidElementId;\r\n                  // a bit of a hack.  If we have a railing, we want it to have the same level base as its host Stair (because of\r\n                  // the way the stairs place railings and stair flights together).\r\n                  if (elem is Railing)\r\n                  {\r\n                     hostElemId = (elem as Railing).HostId;\r\n                  }\r\n                  else if (elem.Category.Id.Value == (long)BuiltInCategory.OST_Assemblies)\r\n                  {\r\n                     hostElemId = elem.AssemblyInstanceId;\r\n                  }\r\n\r\n                  if (hostElemId != ElementId.InvalidElementId)\r\n                  {\r\n                     hostElem = doc.GetElement(hostElemId);\r\n                  }\r\n\r\n                  newLevelId = hostElem != null ? hostElem.LevelId : ElementId.InvalidElementId;\r\n               }\r\n            }\r\n\r\n            // todo: store.\r\n            double bottomHeight = double.MaxValue;\r\n            ElementId bottomLevelId = ElementId.InvalidElementId;\r\n            if ((newLevelId == ElementId.InvalidElementId) || orientationTrf != null)\r\n            {\r\n               // if we have a trf, it might geometrically push the instance to a new level.  Check that case.\r\n               // actually, we should ALWAYS check the bbox vs the settings\r\n               newLevelId = ElementId.InvalidElementId;\r\n               XYZ originToUse = XYZ.Zero;\r\n               bool originIsValid = useOverrideOrigin;\r\n\r\n               if (useOverrideOrigin)\r\n               {\r\n                  originToUse = overrideOrigin;\r\n               }\r\n               else\r\n               {\r\n                  BoundingBoxXYZ bbox = elem.get_BoundingBox(null);\r\n                  if (bbox != null)\r\n                  {\r\n                     originToUse = bbox.Min;\r\n                     originIsValid = true;\r\n                  }\r\n                  else if (hostElem.Id != elemId)\r\n                  {\r\n                     bbox = hostElem.get_BoundingBox(null);\r\n                     if (bbox != null)\r\n                     {\r\n                        originToUse = bbox.Min;\r\n                        originIsValid = true;\r\n                     }\r\n                  }\r\n               }\r\n\r\n\r\n               // The original heuristic here was that the origin determined the level containment based on exact location:\r\n               // if the Z of the origin was higher than the current level but lower than the next level, it was contained\r\n               // on that level.\r\n               // However, in some places (e.g. Germany), the containment is thought to start just below the level, because floors\r\n               // are placed before the level, not above.  So we have made a small modification so that anything within\r\n               // 10cm of the 'next' level is on that level.\r\n\r\n               double levelExtension = LevelUtil.LevelExtension;\r\n               foreach (KeyValuePair<ElementId, IFCLevelInfo> levelInfoPair in levelInfos)\r\n               {\r\n                  // the cache contains levels from all the exported documents\r\n                  // if the export is performed for a linked document, filter the levels that are not from this document\r\n                  if (ExporterCacheManager.ExportOptionsCache.ExportLinkedFileAs != LinkedFileExportAs.DontExport)\r\n                  {\r\n                     Element levelElem = doc.GetElement(levelInfoPair.Key);\r\n                     if (levelElem == null || !(levelElem is Level))\r\n                        continue;\r\n                  }\r\n\r\n                  IFCLevelInfo levelInfo = levelInfoPair.Value;\r\n                  double startHeight = levelInfo.Elevation - levelExtension;\r\n                  double height = levelInfo.DistanceToNextLevel;\r\n                  bool useHeight = !MathUtil.IsAlmostZero(height);\r\n                  double endHeight = startHeight + height;\r\n\r\n                  if (originIsValid && ((originToUse[2] > (startHeight - MathUtil.Eps())) && (!useHeight || originToUse[2] < (endHeight - MathUtil.Eps()))))\r\n                  {\r\n                     newLevelId = levelInfoPair.Key;\r\n                  }\r\n\r\n                  if (startHeight < (bottomHeight + MathUtil.Eps()))\r\n                  {\r\n                     bottomLevelId = levelInfoPair.Key;\r\n                     bottomHeight = startHeight;\r\n                  }\r\n               }\r\n            }\r\n\r\n            if (newLevelId == ElementId.InvalidElementId)\r\n               newLevelId = bottomLevelId;\r\n\r\n            // Finally, override the level if needed.\r\n            // Note that if there is an override level, we will always use that instead.\r\n            if (ExporterCacheManager.LevelInfoCache.LevelParameterOverride.TryGetValue(newLevelId, out ElementId parameterOverrideLevelId))\r\n            {\r\n               newLevelId = parameterOverrideLevelId;\r\n            }\r\n         }\r\n\r\n         LevelInfo = ExporterCacheManager.LevelInfoCache.GetLevelInfo(newLevelId);\r\n         if (LevelInfo == null)\r\n         {\r\n            foreach (KeyValuePair<ElementId, IFCLevelInfo> levelInfoPair in levelInfos)\r\n            {\r\n               // the cache contains levels from all the exported documents\r\n               // if the export is performed for a linked document, filter the levels that are not from this document\r\n               if (ExporterCacheManager.ExportOptionsCache.ExportLinkedFileAs != LinkedFileExportAs.DontExport)\r\n               {\r\n                  Element levelElem = doc.GetElement(levelInfoPair.Key);\r\n                  if (levelElem == null || !(levelElem is Level))\r\n                     continue;\r\n               }\r\n               LevelInfo = levelInfoPair.Value;\r\n               break;\r\n            }\r\n         }\r\n\r\n         double elevation = LevelInfo?.Elevation ?? 0.0;\r\n         IFCAnyHandle levelPlacement = LevelInfo?.GetLocalPlacement();\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         Transform trf = Transform.Identity;\r\n\r\n         if (familyTrf != null)\r\n         {\r\n            XYZ origin, xDir, yDir, zDir;\r\n\r\n            xDir = familyTrf.BasisX; yDir = familyTrf.BasisY; zDir = familyTrf.BasisZ;\r\n\r\n            Transform origOffsetTrf = Transform.Identity;\r\n            XYZ negLevelOrigin = new XYZ(0, 0, -elevation);\r\n            origOffsetTrf.Origin = negLevelOrigin;\r\n\r\n            Transform newTrf = origOffsetTrf * familyTrf;\r\n\r\n            origin = newTrf.Origin;\r\n\r\n            trf.BasisX = xDir; trf.BasisY = yDir; trf.BasisZ = zDir;\r\n            trf = trf.Inverse;\r\n\r\n            origin = UnitUtil.ScaleLength(origin);\r\n            LocalPlacement = ExporterUtil.CreateLocalPlacement(file, levelPlacement, origin, zDir, xDir);\r\n         }\r\n         else if (orientationTrf != null)\r\n         {\r\n            XYZ origin, xDir, yDir, zDir;\r\n\r\n            xDir = orientationTrf.BasisX; yDir = orientationTrf.BasisY; zDir = orientationTrf.BasisZ; origin = orientationTrf.Origin;\r\n\r\n            XYZ levelOrigin = new XYZ(0, 0, elevation);\r\n            origin = origin - levelOrigin;\r\n\r\n            trf.BasisX = xDir; trf.BasisY = yDir; trf.BasisZ = zDir; trf.Origin = origin;\r\n            trf = trf.Inverse;\r\n\r\n            origin = UnitUtil.ScaleLength(origin);\r\n            LocalPlacement = ExporterUtil.CreateLocalPlacement(file, levelPlacement, origin, zDir, xDir);\r\n         }\r\n         else\r\n         {\r\n            LocalPlacement = ExporterUtil.CreateLocalPlacement(file, levelPlacement, null, null, null);\r\n         }\r\n\r\n         Transform origOffsetTrf2 = Transform.Identity;\r\n         XYZ negLevelOrigin2 = new XYZ(0, 0, -elevation);\r\n         origOffsetTrf2.Origin = negLevelOrigin2;\r\n         Transform newTrf2 = trf * origOffsetTrf2;\r\n\r\n         ExporterIFC.PushTransform(newTrf2);\r\n         Offset = elevation;\r\n         LevelId = newLevelId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// A special PlacementSetter constructor for element to be placed to the Site or Building\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">the exporterIFC</param>\r\n      /// <param name=\"elem\">the element</param>\r\n      /// <param name=\"familyTrf\">The optional family transform.</param>\r\n      /// <param name=\"orientationTrf\">The optional orientation of the element based on IFC standards or agreements.</param>\r\n      /// <param name=\"siteOrBuilding\">IfcSite or IfcBuilding</param>\r\n      public PlacementSetter(ExporterIFC exporterIFC, Element elem, Transform familyTrf, Transform orientationTrf, IFCAnyHandle siteOrBuilding)\r\n      {\r\n         if (!IFCAnyHandleUtil.IsTypeOf(siteOrBuilding, Common.Enums.IFCEntityType.IfcSite) && !IFCAnyHandleUtil.IsTypeOf(siteOrBuilding, Common.Enums.IFCEntityType.IfcBuilding))\r\n            throw new ArgumentException(\"Argument siteOrBuilding (\" + IFCAnyHandleUtil.GetEntityType(siteOrBuilding).ToString() + \") must be either IfcSite or IfcBuilding!\");\r\n\r\n         ExporterIFC = exporterIFC;\r\n         Transform trf = Transform.Identity;\r\n         if (familyTrf != null)\r\n         {\r\n            XYZ origin, xDir, yDir, zDir;\r\n\r\n            xDir = familyTrf.BasisX; yDir = familyTrf.BasisY; zDir = familyTrf.BasisZ; origin = familyTrf.Origin;\r\n\r\n            trf = trf.Inverse;\r\n\r\n            origin = UnitUtil.ScaleLength(origin);\r\n            LocalPlacement = ExporterUtil.CreateLocalPlacement(exporterIFC.GetFile(), null, origin, zDir, xDir);\r\n         }\r\n         else if (orientationTrf != null)\r\n         {\r\n            XYZ origin, xDir, yDir, zDir;\r\n\r\n            xDir = orientationTrf.BasisX; yDir = orientationTrf.BasisY; zDir = orientationTrf.BasisZ; origin = orientationTrf.Origin;\r\n\r\n            trf = orientationTrf.Inverse;\r\n\r\n            origin = UnitUtil.ScaleLength(origin);\r\n            LocalPlacement = ExporterUtil.CreateLocalPlacement(exporterIFC.GetFile(), null, origin, zDir, xDir);\r\n         }\r\n         else\r\n         {\r\n            LocalPlacement = ExporterUtil.CreateLocalPlacement(exporterIFC.GetFile(), null, null, null, null);\r\n         }\r\n\r\n         ExporterIFC.PushTransform(trf);\r\n         Offset = 0.0;\r\n         LevelId = ElementId.InvalidElementId;\r\n         LevelInfo = null;\r\n      }\r\n\r\n      /// <summary>\r\n      ///   Obtains the handle to an alternate local placement for a room-related element.\r\n      /// </summary>\r\n      /// <param name=\"roomHnd\">Handle to the element.</param>\r\n      /// <param name=\"placementToUse\">The handle to the IfcLocalPlacement to use for the given room-related element.</param>\r\n      /// <returns>  \r\n      /// </returns>\r\n      private void UpdatePlacement(IFCAnyHandle roomHnd, out IFCAnyHandle placement)\r\n      {\r\n         placement = LocalPlacement;\r\n\r\n         if (roomHnd == null)\r\n            return;\r\n\r\n         IFCAnyHandle roomPlacementHnd = IFCAnyHandleUtil.GetObjectPlacement(roomHnd);\r\n         Transform trf = ExporterIFCUtils.GetRelativeLocalPlacementOffsetTransform(placement, roomPlacementHnd);\r\n         placement = ExporterUtil.CreateLocalPlacement(ExporterIFC.GetFile(), roomPlacementHnd, trf.Origin, trf.BasisZ, trf.BasisX);\r\n      }\r\n\r\n      /// <summary>\r\n      ///    Obtains the handle to an alternate local placement for a room-related element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>\r\n      ///    The id of the spatial element related to the element.  InvalidElementId if the element\r\n      ///    is not room-related, in which case the output will contain the placement handle from\r\n      ///    LocalPlacement.\r\n      /// </returns>\r\n      private ElementId GetIdInSpatialStructure(Element elem)\r\n      {\r\n         FamilyInstance famInst = elem as FamilyInstance;\r\n         if (famInst == null)\r\n            return ElementId.InvalidElementId;\r\n\r\n         Element roomOrSpace = null;\r\n         if (roomOrSpace == null)\r\n         {\r\n            try\r\n            {\r\n               roomOrSpace = ExporterCacheManager.SpaceInfoCache.ContainsRooms ? famInst.get_Room(ExporterCacheManager.ExportOptionsCache.ActivePhaseElement) : null;\r\n            }\r\n            catch\r\n            {\r\n               roomOrSpace = null;\r\n            }\r\n         }\r\n\r\n         if (roomOrSpace == null)\r\n         {\r\n            try\r\n            {\r\n               roomOrSpace = ExporterCacheManager.SpaceInfoCache.ContainsSpaces ? famInst.get_Space(ExporterCacheManager.ExportOptionsCache.ActivePhaseElement) : null;\r\n            }\r\n            catch\r\n            {\r\n               roomOrSpace = null;\r\n            }\r\n         }\r\n\r\n         if (roomOrSpace == null || roomOrSpace.Location == null)\r\n            return ElementId.InvalidElementId;\r\n\r\n         return roomOrSpace.Id;\r\n      }\r\n\r\n      /// <summary>\r\n      ///    Obtains the handle to an alternate local placement for a room-related element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"placementToUse\">The handle to the IfcLocalPlacement to use for the given room-related element.</param>\r\n      /// <returns>\r\n      ///    The id of the spatial element related to the element.  InvalidElementId if the element\r\n      ///    is not room-related, in which case the output will contain the placement handle from\r\n      ///    LocalPlacement.\r\n      /// </returns>\r\n      public ElementId UpdateRoomRelativeCoordinates(Element elem, out IFCAnyHandle placement)\r\n      {\r\n         placement = LocalPlacement;\r\n         ElementId roomId = ElementId.InvalidElementId;\r\n\r\n         if (elem == null)\r\n            return roomId;\r\n\r\n         IFCAnyHandle roomHnd = null;\r\n         GroupInfo groupInfo;\r\n         if (ExporterCacheManager.GroupCache.TryGetValue(elem.Id, out groupInfo))\r\n         {\r\n            if (groupInfo != null && groupInfo.ElementHandles != null && groupInfo.ElementHandles.Count != 0)\r\n            {\r\n               Document document = elem.Document;\r\n               if (document == null)\r\n                  return roomId;\r\n               \r\n               bool initialized = false;\r\n               foreach (IFCAnyHandle handleElem in groupInfo.ElementHandles)\r\n               {\r\n                  ElementId elementId = ExporterCacheManager.HandleToElementCache.Find(handleElem);\r\n                  Element element = document.GetElement(elementId);\r\n                  if (element == null)\r\n                     continue;\r\n                  \r\n                  ElementId currentRoomId = GetIdInSpatialStructure(element);\r\n                  if (currentRoomId == ElementId.InvalidElementId)\r\n                     return ElementId.InvalidElementId;\r\n                  \r\n                  if (!initialized)\r\n                  { \r\n                     roomId = currentRoomId;\r\n                     initialized = true;\r\n                  }\r\n                  \r\n                  if (currentRoomId != roomId)\r\n                     return ElementId.InvalidElementId;\r\n               }\r\n\r\n               roomHnd = ExporterCacheManager.SpaceInfoCache.FindSpaceHandle(roomId);\r\n\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(roomHnd))\r\n                  return ElementId.InvalidElementId;\r\n\r\n               UpdatePlacement(roomHnd, out placement);\r\n\r\n               return roomId;\r\n            }\r\n         }\r\n\r\n         roomId = GetIdInSpatialStructure(elem);\r\n\r\n         if (roomId == ElementId.InvalidElementId)\r\n            return ElementId.InvalidElementId;\r\n\r\n         roomHnd = ExporterCacheManager.SpaceInfoCache.FindSpaceHandle(roomId);\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(roomHnd))\r\n            return ElementId.InvalidElementId;\r\n\r\n         UpdatePlacement(roomHnd, out placement);\r\n\r\n         return roomId;\r\n      }\r\n\r\n      /// <summary>\r\n      ///    Gets the level info related to an offset of the element's local placement.\r\n      /// </summary>\r\n      /// <param name=\"offset\">The vertical offset to the local placement.</param>\r\n      /// <param name=\"scale\">The linear scale.</param>\r\n      /// <param name=\"pPlacementHnd\">The handle to the new local placement.</param>\r\n      /// <param name=\"pScaledOffsetFromNewLevel\">The scaled offset from the new level.</param>\r\n      /// <returns>The level info.</returns>\r\n      public IFCLevelInfo GetOffsetLevelInfoAndHandle(double offset, double scale, Document document, out IFCAnyHandle placementHnd, out double scaledOffsetFromNewLevel)\r\n      {\r\n         placementHnd = null;\r\n         scaledOffsetFromNewLevel = 0;\r\n\r\n         double newHeight = Offset + offset;\r\n\r\n         IDictionary<ElementId, IFCLevelInfo> levelInfos = ExporterCacheManager.LevelInfoCache.LevelsById;\r\n         foreach (KeyValuePair<ElementId, IFCLevelInfo> levelInfoPair in levelInfos)\r\n         {\r\n            // the cache contains levels from all the exported documents\r\n            // if the export is performed for a linked document, filter the levels that are not from this document\r\n            if (ExporterCacheManager.ExportOptionsCache.ExportLinkedFileAs != LinkedFileExportAs.DontExport)\r\n            {\r\n               Element levelElem = document.GetElement(levelInfoPair.Key);\r\n               if (levelElem == null || !(levelElem is Level))\r\n                  continue;\r\n            }\r\n\r\n            IFCLevelInfo levelInfo = levelInfoPair.Value;\r\n            double startHeight = levelInfo.Elevation;\r\n\r\n            if (startHeight > newHeight + MathUtil.Eps())\r\n               continue;\r\n\r\n            double height = levelInfo.DistanceToNextLevel;\r\n            bool useHeight = !MathUtil.IsAlmostZero(height);\r\n\r\n            if (!useHeight)\r\n            {\r\n               scaledOffsetFromNewLevel = (newHeight - startHeight) * scale;\r\n               placementHnd = levelInfo.GetLocalPlacement();\r\n               return levelInfo;\r\n            }\r\n\r\n            double endHeight = startHeight + height;\r\n            if (newHeight < endHeight - MathUtil.Eps())\r\n            {\r\n               scaledOffsetFromNewLevel = (newHeight - startHeight) * scale;\r\n               placementHnd = levelInfo.GetLocalPlacement();\r\n               return levelInfo;\r\n            }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      #region IDisposable Members\r\n\r\n      public void Dispose()\r\n      {\r\n         if (ExporterIFC != null)\r\n            ExporterIFC.PopTransform();\r\n      }\r\n\r\n      #endregion\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Toolkit/TransformSetter.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Export.Utility;\r\n\r\nnamespace Revit.IFC.Export.Toolkit\r\n{\r\n   /// <summary>\r\n   ///    A state-based class that forces an extra transformation applied to objects being exported.\r\n   /// </summary>\r\n   /// <remarks>\r\n   ///    IFC has a system of local placements; these are created from a set of transforms in Revit.\r\n   ///    Sometimes there is a need to create a 'fake' transform to get the right local placement structure for IFC.\r\n   ///    This class is intended to maintain the transformation for the duration that it is needed.\r\n   ///    To ensure that the lifetime of the object is correctly managed, you should declare an instance\r\n   ///    of this class as a part of a 'using' statement in C# or\r\n   ///    similar construct in other languages.\r\n   /// </remarks>\r\n   public class TransformSetter : IDisposable\r\n   {\r\n      bool m_Initialized = false;\r\n\r\n      ExporterIFC m_ExporterIFC = null;\r\n\r\n      /// <summary>\r\n      ///    Creates a new instance of a transform setter.\r\n      /// </summary>\r\n      /// <returns>\r\n      ///    The new transform setter.\r\n      /// </returns>\r\n      public static TransformSetter Create()\r\n      {\r\n         return new TransformSetter();\r\n      }\r\n\r\n      /// <summary>\r\n      ///    Initializes the transformation in the transform setter.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      ///    The exporter.\r\n      /// </param>\r\n      /// <param name=\"transform\">\r\n      ///    The transform.\r\n      /// </param>\r\n      public void Initialize(ExporterIFC exporterIFC, Transform trf)\r\n      {\r\n         Initialize(exporterIFC, trf.Origin, trf.BasisX, trf.BasisY);\r\n      }\r\n\r\n      void Initialize(ExporterIFC exporterIFC, XYZ origin, XYZ xDir, XYZ yDir)\r\n      {\r\n         if (!m_Initialized)\r\n         {\r\n            m_ExporterIFC = exporterIFC;\r\n            Transform trf = Transform.Identity;\r\n            trf.Origin = origin;\r\n            trf.BasisX = xDir;\r\n            trf.BasisY = yDir;\r\n            m_ExporterIFC.PushTransform(trf);\r\n            m_Initialized = true;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      ///    Initializes the transformation in the transform setter.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"geometryList\">The set of geometry used to determine the bounding box.</param>\r\n      /// <param name=\"ecData\">The extrusion creation data which contains the local placement.</param>\r\n      /// <returns>The transform corresponding to the movement, if any.</returns>\r\n      /// <remarks>This method will eventually be obsoleted by the InitializeFromBoundingBox/CreateLocalPlacementFromOffset pair below, which delays creating or updating the local placement\r\n      /// until we are certain we will use it, saving time and reducing wasted line numbers.</remarks>\r\n      public Transform InitializeFromBoundingBox(ExporterIFC exporterIFC, IList<GeometryObject> geometryList, IFCExportBodyParams ecData)\r\n      {\r\n         if (ecData == null)\r\n            return null;\r\n         Transform trf = Transform.Identity;\r\n\r\n         IFCAnyHandle localPlacement = ecData.GetLocalPlacement();\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(localPlacement))\r\n         {\r\n            IFCFile file = exporterIFC.GetFile();\r\n            BoundingBoxXYZ bbox = GeometryUtil.GetBBoxOfGeometries(geometryList);\r\n\r\n            // If the BBox passes through (0,0, 0), or no bbox, do nothing.\r\n            if (bbox == null ||\r\n                ((bbox.Min.X < MathUtil.Eps() && bbox.Max.X > -MathUtil.Eps()) &&\r\n                 (bbox.Min.Y < MathUtil.Eps() && bbox.Max.Y > -MathUtil.Eps()) &&\r\n                 (bbox.Min.Z < MathUtil.Eps() && bbox.Max.Z > -MathUtil.Eps())))\r\n            {\r\n               if (!ecData.ReuseLocalPlacement)\r\n                  ecData.SetLocalPlacement(ExporterUtil.CopyLocalPlacement(file, localPlacement));\r\n               return trf;\r\n            }\r\n\r\n            XYZ bboxMin = bbox.Min;\r\n            XYZ scaledOrig = UnitUtil.ScaleLength(bboxMin);\r\n\r\n            Transform scaledTrf = GeometryUtil.GetScaledTransform(exporterIFC);\r\n\r\n            XYZ lpOrig = scaledTrf.OfPoint(scaledOrig);\r\n            if (!ecData.AllowVerticalOffsetOfBReps)\r\n               lpOrig = new XYZ(lpOrig.X, lpOrig.Y, 0.0);\r\n\r\n            Transform scaledTrfInv = scaledTrf.Inverse;\r\n            XYZ scaledInvOrig = scaledTrfInv.OfPoint(XYZ.Zero);\r\n\r\n            XYZ unscaledInvOrig = UnitUtil.UnscaleLength(scaledInvOrig);\r\n\r\n            XYZ trfOrig = unscaledInvOrig - bboxMin;\r\n            if (!ecData.AllowVerticalOffsetOfBReps)\r\n               trfOrig = new XYZ(trfOrig.X, trfOrig.Y, 0.0);\r\n\r\n            if (!MathUtil.IsAlmostZero(trfOrig.DotProduct(trfOrig)))\r\n            {\r\n               Initialize(exporterIFC, trfOrig, XYZ.BasisX, XYZ.BasisY);\r\n               if (!ecData.ReuseLocalPlacement)\r\n                  ecData.SetLocalPlacement(ExporterUtil.CreateLocalPlacement(file, localPlacement, lpOrig, null, null));\r\n               else\r\n               {\r\n                  IFCAnyHandle relativePlacement = GeometryUtil.GetRelativePlacementFromLocalPlacement(localPlacement);\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(relativePlacement))\r\n                  {\r\n                     IFCAnyHandle newRelativePlacement = ExporterUtil.CreateAxis(file, lpOrig, null, null);\r\n                     GeometryUtil.SetRelativePlacement(localPlacement, newRelativePlacement);\r\n                  }\r\n                  else\r\n                  {\r\n                     IFCAnyHandle oldOriginHnd, zDirHnd, xDirHnd;\r\n                     xDirHnd = IFCAnyHandleUtil.GetInstanceAttribute(relativePlacement, \"RefDirection\");\r\n                     zDirHnd = IFCAnyHandleUtil.GetInstanceAttribute(relativePlacement, \"Axis\");\r\n                     oldOriginHnd = IFCAnyHandleUtil.GetInstanceAttribute(relativePlacement, \"Location\");\r\n\r\n                     bool trfSet = false;\r\n                     XYZ xDir = XYZ.BasisX; XYZ zDir = XYZ.BasisZ; XYZ oldCoords = XYZ.Zero;\r\n                     if (!IFCAnyHandleUtil.IsNullOrHasNoValue(xDirHnd))\r\n                     {\r\n                        xDir = GeometryUtil.GetDirectionRatios(xDirHnd);\r\n                        trfSet = true;\r\n                     }\r\n                     if (!IFCAnyHandleUtil.IsNullOrHasNoValue(zDirHnd))\r\n                     {\r\n                        zDir = GeometryUtil.GetDirectionRatios(zDirHnd);\r\n                        trfSet = true;\r\n                     }\r\n                     if (!IFCAnyHandleUtil.IsNullOrHasNoValue(oldOriginHnd))\r\n                     {\r\n                        oldCoords = GeometryUtil.GetCoordinates(oldOriginHnd);\r\n                     }\r\n\r\n                     if (trfSet)\r\n                     {\r\n                        XYZ yDir = zDir.CrossProduct(xDir);\r\n                        Transform relPlacementTrf = Transform.Identity;\r\n                        relPlacementTrf.Origin = oldCoords; relPlacementTrf.BasisX = xDir;\r\n                        relPlacementTrf.BasisY = yDir; relPlacementTrf.BasisZ = zDir;\r\n                        lpOrig = relPlacementTrf.OfPoint(lpOrig);\r\n                     }\r\n                     else\r\n                        lpOrig = oldCoords + lpOrig;\r\n\r\n                     IFCAnyHandle newOriginHnd = ExporterUtil.CreateCartesianPoint(file, lpOrig);\r\n                     IFCAnyHandleUtil.SetAttribute(relativePlacement, \"Location\", newOriginHnd);\r\n                  }\r\n               }\r\n\r\n               trf.Origin = lpOrig;\r\n            }\r\n            else if (ecData.ForceOffset)\r\n               ecData.SetLocalPlacement(ExporterUtil.CreateLocalPlacement(file, localPlacement, null));\r\n            else if (!ecData.ReuseLocalPlacement)\r\n               ecData.SetLocalPlacement(ExporterUtil.CopyLocalPlacement(file, localPlacement));\r\n         }\r\n         return trf;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initializes the transformation in the transform setter.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"bbox\">The bounding box.</param>\r\n      /// <param name=\"ecData\">The extrusion creation data which contains the local placement.</param>\r\n      /// <param name=\"unscaledTrfOrig\">The scaled local placement origin.</param>\r\n      /// <param name=\"location\">The optional location.</param>\r\n      /// <param name=\"useInstanceGeometry\">True if the instance geometry is used.</param>\r\n      /// <returns>The transform corresponding to the movement, if any.</returns>\r\n      public Transform InitializeFromBoundingBox(ExporterIFC exporterIFC, BoundingBoxXYZ bbox, IFCExportBodyParams ecData, Location location, bool useInstanceGeometry, out XYZ unscaledTrfOrig)\r\n      {\r\n         unscaledTrfOrig = new XYZ();\r\n         if (ecData == null)\r\n            return null;\r\n\r\n         LocationCurve locationCurve = location as LocationCurve;\r\n         LocationPoint locationPoint = location as LocationPoint;\r\n\r\n         Transform trf = Transform.Identity;\r\n         IFCAnyHandle localPlacement = ecData.GetLocalPlacement();\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(localPlacement))\r\n         {\r\n            IFCFile file = exporterIFC.GetFile();\r\n\r\n            // If the BBox passes through (0,0, 0), or no bbox, do nothing.\r\n            if (bbox == null ||\r\n                ((bbox.Min.X < MathUtil.Eps() && bbox.Max.X > -MathUtil.Eps()) &&\r\n                 (bbox.Min.Y < MathUtil.Eps() && bbox.Max.Y > -MathUtil.Eps()) &&\r\n                 (bbox.Min.Z < MathUtil.Eps() && bbox.Max.Z > -MathUtil.Eps())))\r\n               return trf;\r\n\r\n            XYZ corner = bbox.Min;\r\n\r\n            // Rise the origin to the top corner for some linear inclined geometries\r\n            // to fix the problem of misalignment between Body and 'Curve2D' Axis\r\n            if (locationCurve != null && locationCurve.Curve is Line)\r\n            {\r\n               XYZ lineDir = (locationCurve.Curve as Line).Direction;\r\n               double angle = 0.0;\r\n               if (!MathUtil.IsAlmostZero(lineDir.X))\r\n                  angle = Math.Atan2(lineDir.Z, lineDir.X);\r\n               else\r\n                  angle = Math.Atan2(lineDir.Z, lineDir.Y);\r\n\r\n               if (angle > 0.5 * Math.PI && angle < Math.PI || angle > -0.5 * Math.PI && angle < 0)\r\n                  corner = new XYZ(corner.X, corner.Y, bbox.Max.Z);\r\n            }\r\n            else if (useInstanceGeometry && locationPoint != null)\r\n            {\r\n               corner = new XYZ(0.0, 0.0, locationPoint.Point.Z);\r\n            }\r\n\r\n            XYZ scaledOrig = UnitUtil.ScaleLength(corner);\r\n\r\n            Transform scaledTrf = GeometryUtil.GetScaledTransform(exporterIFC);\r\n\r\n            XYZ lpOrig = scaledTrf.OfPoint(scaledOrig);\r\n            if (!ecData.AllowVerticalOffsetOfBReps)\r\n               lpOrig = new XYZ(lpOrig.X, lpOrig.Y, 0.0);\r\n\r\n            Transform scaledTrfInv = scaledTrf.Inverse;\r\n            XYZ scaledInvOrig = scaledTrfInv.OfPoint(XYZ.Zero);\r\n\r\n            XYZ unscaledInvOrig = UnitUtil.UnscaleLength(scaledInvOrig);\r\n\r\n            unscaledTrfOrig = unscaledInvOrig - corner;\r\n            if (!ecData.AllowVerticalOffsetOfBReps)\r\n               unscaledTrfOrig = new XYZ(unscaledTrfOrig.X, unscaledTrfOrig.Y, 0.0);\r\n\r\n            if (!MathUtil.IsAlmostZero(unscaledTrfOrig.DotProduct(unscaledTrfOrig)))\r\n            {\r\n               Initialize(exporterIFC, unscaledTrfOrig, XYZ.BasisX, XYZ.BasisY);\r\n               if (!ecData.ReuseLocalPlacement)\r\n               {\r\n               }\r\n               else\r\n               {\r\n                  IFCAnyHandle relativePlacement = GeometryUtil.GetRelativePlacementFromLocalPlacement(localPlacement);\r\n                  if (!IFCAnyHandleUtil.IsNullOrHasNoValue(relativePlacement))\r\n                  {\r\n                     IFCAnyHandle oldOriginHnd, zDirHnd, xDirHnd;\r\n                     xDirHnd = IFCAnyHandleUtil.GetInstanceAttribute(relativePlacement, \"RefDirection\");\r\n                     zDirHnd = IFCAnyHandleUtil.GetInstanceAttribute(relativePlacement, \"Axis\");\r\n                     oldOriginHnd = IFCAnyHandleUtil.GetInstanceAttribute(relativePlacement, \"Location\");\r\n\r\n                     bool trfSet = false;\r\n                     XYZ xDir = XYZ.BasisX; XYZ zDir = XYZ.BasisZ; XYZ oldCoords = XYZ.Zero;\r\n                     if (!IFCAnyHandleUtil.IsNullOrHasNoValue(xDirHnd))\r\n                     {\r\n                        xDir = GeometryUtil.GetDirectionRatios(xDirHnd);\r\n                        trfSet = true;\r\n                     }\r\n                     if (!IFCAnyHandleUtil.IsNullOrHasNoValue(zDirHnd))\r\n                     {\r\n                        zDir = GeometryUtil.GetDirectionRatios(zDirHnd);\r\n                        trfSet = true;\r\n                     }\r\n                     if (!IFCAnyHandleUtil.IsNullOrHasNoValue(oldOriginHnd))\r\n                     {\r\n                        oldCoords = GeometryUtil.GetCoordinates(oldOriginHnd);\r\n                     }\r\n\r\n                     if (trfSet)\r\n                     {\r\n                        XYZ yDir = zDir.CrossProduct(xDir);\r\n                        Transform relPlacementTrf = Transform.Identity;\r\n                        relPlacementTrf.Origin = oldCoords; relPlacementTrf.BasisX = xDir;\r\n                        relPlacementTrf.BasisY = yDir; relPlacementTrf.BasisZ = zDir;\r\n                        lpOrig = relPlacementTrf.OfPoint(lpOrig);\r\n                     }\r\n                     else\r\n                        lpOrig = oldCoords + lpOrig;\r\n                  }\r\n               }\r\n\r\n               trf.Origin = UnitUtil.UnscaleLength(lpOrig);\r\n            }\r\n         }\r\n         return trf;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or updates the IfcLocalPlacement associated with the current origin offset.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"bbox\">The bounding box.</param>\r\n      /// <param name=\"ecData\">The extrusion creation data which contains the local placement.</param>\r\n      /// <param name=\"lpOrig\">The local placement origin.</param>\r\n      /// <param name=\"unscaledTrfOrig\">The unscaled local placement origin.</param>\r\n      public void CreateLocalPlacementFromOffset(ExporterIFC exporterIFC, BoundingBoxXYZ bbox, IFCExportBodyParams ecData, XYZ lpOrig, XYZ unscaledTrfOrig)\r\n      {\r\n         if (ecData == null)\r\n            return;\r\n\r\n         IFCAnyHandle localPlacement = ecData.GetLocalPlacement();\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(localPlacement))\r\n         {\r\n            IFCFile file = exporterIFC.GetFile();\r\n\r\n            // If the BBox passes through (0,0, 0), or no bbox, do nothing.\r\n            if (bbox == null ||\r\n                ((bbox.Min.X < MathUtil.Eps() && bbox.Max.X > -MathUtil.Eps()) &&\r\n                 (bbox.Min.Y < MathUtil.Eps() && bbox.Max.Y > -MathUtil.Eps()) &&\r\n                 (bbox.Min.Z < MathUtil.Eps() && bbox.Max.Z > -MathUtil.Eps())))\r\n            {\r\n               if (!ecData.ReuseLocalPlacement)\r\n                  ecData.SetLocalPlacement(ExporterUtil.CopyLocalPlacement(file, localPlacement));\r\n               return;\r\n            }\r\n\r\n            if (!MathUtil.IsAlmostZero(unscaledTrfOrig.DotProduct(unscaledTrfOrig)))\r\n            {\r\n               if (!ecData.ReuseLocalPlacement)\r\n                  ecData.SetLocalPlacement(ExporterUtil.CreateLocalPlacement(file, localPlacement, lpOrig, null, null));\r\n               else\r\n               {\r\n                  IFCAnyHandle relativePlacement = GeometryUtil.GetRelativePlacementFromLocalPlacement(localPlacement);\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(relativePlacement))\r\n                  {\r\n                     IFCAnyHandle newRelativePlacement = ExporterUtil.CreateAxis(file, lpOrig, null, null);\r\n                     GeometryUtil.SetRelativePlacement(localPlacement, newRelativePlacement);\r\n                  }\r\n                  else\r\n                  {\r\n                     IFCAnyHandle newOriginHnd = ExporterUtil.CreateCartesianPoint(file, lpOrig);\r\n                     IFCAnyHandleUtil.SetAttribute(relativePlacement, \"Location\", newOriginHnd);\r\n                  }\r\n               }\r\n            }\r\n            else if (ecData.ForceOffset)\r\n               ecData.SetLocalPlacement(ExporterUtil.CreateLocalPlacement(file, localPlacement, null));\r\n            else if (!ecData.ReuseLocalPlacement)\r\n               ecData.SetLocalPlacement(ExporterUtil.CopyLocalPlacement(file, localPlacement));\r\n         }\r\n      }\r\n\r\n      #region IDisposable Members\r\n\r\n      public void Dispose()\r\n      {\r\n         if (m_Initialized)\r\n         {\r\n            m_ExporterIFC.PopTransform();\r\n         }\r\n      }\r\n\r\n      #endregion\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/AssemblyInstanceCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to import and export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of the created IfcElementAssemblies and related IfcElement handles.\r\n   /// </summary>\r\n   public class AssemblyInstanceCache : Dictionary<ElementId, AssemblyInstanceInfo>\r\n   {\r\n      /// <summary>\r\n      /// Add the instance handle of an AssemblyInstance to the cache.  It will either add it\r\n      /// to an existing entry, or create a new entry.\r\n      /// </summary>\r\n      /// <param name=\"instanceId\">The ElementId of the AssemblyInstance.</param>\r\n      /// <param name=\"instanceHnd\">The IFC handle of the AssemblyInstance.</param>\r\n      public void RegisterAssemblyInstance(ElementId instanceId, IFCAnyHandle instanceHnd, ElementId levelId = null)\r\n      {\r\n         AssemblyInstanceInfo assemblyInstanceInfo;\r\n         if (!TryGetValue(instanceId, out assemblyInstanceInfo))\r\n         {\r\n            assemblyInstanceInfo = new AssemblyInstanceInfo();\r\n         }\r\n         assemblyInstanceInfo.AssemblyInstanceHandle = instanceHnd;\r\n         assemblyInstanceInfo.AssignedLevelId = levelId;\r\n         this[instanceId] = assemblyInstanceInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add the instance handle of an element in an AssemblyInstance to the cache.  It will either add it\r\n      /// to an existing entry, or create a new entry.\r\n      /// </summary>\r\n      /// <param name=\"instanceId\">The ElementId of the AssemblyInstance.</param>\r\n      /// <param name=\"elementHnd\">The IFC handle of the element.</param>\r\n      public void RegisterAssemblyElement(ElementId instanceId, IFCAnyHandle elementHnd)\r\n      {\r\n         AssemblyInstanceInfo assemblyInstanceInfo;\r\n         if (!TryGetValue(instanceId, out assemblyInstanceInfo))\r\n         {\r\n            assemblyInstanceInfo = new AssemblyInstanceInfo();\r\n         }\r\n         assemblyInstanceInfo.ElementHandles.Add(elementHnd);\r\n         this[instanceId] = assemblyInstanceInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add the instance handle of one or more elements in an AssemblyInstance to the cache.  It will either add it\r\n      /// to an existing entry, or create a new entry.\r\n      /// </summary>\r\n      /// <param name=\"instanceId\">The ElementId of the AssemblyInstance.</param>\r\n      /// <param name=\"elementHnds\">The IFC handle of the elements.</param>\r\n      public void RegisterAssemblyElements(ElementId instanceId, HashSet<IFCAnyHandle> elementHnds)\r\n      {\r\n         if (elementHnds.Count == 0)\r\n            return;\r\n\r\n         AssemblyInstanceInfo assemblyInstanceInfo;\r\n         if (!TryGetValue(instanceId, out assemblyInstanceInfo))\r\n         {\r\n            assemblyInstanceInfo = new AssemblyInstanceInfo();\r\n         }\r\n\r\n         assemblyInstanceInfo.ElementHandles.UnionWith(elementHnds);\r\n         this[instanceId] = assemblyInstanceInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Registers all of the created handles in the product wrapper that are of the right type to an AssemblyInstance.\r\n      /// </summary>\r\n      /// <param name=\"instanceId\">The ElementId of the AssemblyInstance.</param>\r\n      /// <param name=\"instanceHnd\">The product wrapper.</param>\r\n      public void RegisterElements(ElementId assemblyId, ProductWrapper productWrapper)\r\n      {\r\n         ICollection<IFCAnyHandle> objects = productWrapper.GetAllObjects();\r\n         HashSet<IFCAnyHandle> elementsToAdd = new HashSet<IFCAnyHandle>();\r\n         foreach (IFCAnyHandle hnd in objects)\r\n         {\r\n            if (IFCAnyHandleUtil.IsSubTypeOf(hnd, IFCEntityType.IfcProduct) ||\r\n                IFCAnyHandleUtil.IsSubTypeOf(hnd, IFCEntityType.IfcGroup))\r\n               elementsToAdd.Add(hnd);\r\n         }\r\n         if (elementsToAdd.Count > 0)\r\n            RegisterAssemblyElements(assemblyId, elementsToAdd);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/AttributeCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of Attribute Mapping when exporting an element.\r\n   /// </summary>\r\n   public class AttributeCache\r\n   {\r\n      /// <summary>\r\n      /// List of Attribute Maps.\r\n      /// </summary>\r\n      private List<AttributeSetDescription> m_AttributeSets;\r\n\r\n      /// <summary>\r\n      /// List of Attribute Maps.\r\n      /// </summary>\r\n      public List<AttributeSetDescription> AttributeSets { get { return m_AttributeSets; } }\r\n\r\n      /// <summary>\r\n      /// Constructs a default AttributeCache object.\r\n      /// </summary>\r\n      public AttributeCache()\r\n      {\r\n         m_AttributeSets = new List<AttributeSetDescription>();\r\n      }\r\n\r\n      public void AddAttributeSet(AttributeSetDescription attribute)\r\n      {\r\n         m_AttributeSets.Add(attribute);\r\n      }\r\n\r\n      public List<AttributeEntry> GetEntry(IFCAnyHandle handle, PropertyType propertyType, string name)\r\n      {\r\n         List<AttributeEntry> result = new List<AttributeEntry>();\r\n         foreach (AttributeSetDescription set in m_AttributeSets)\r\n         {\r\n            if (set.IsAppropriateType(handle))\r\n            {\r\n               AttributeEntry entry = set.GetEntry(propertyType, name);\r\n               if (entry != null)\r\n                  result.Add(entry);\r\n            }\r\n         }\r\n         return result;\r\n      }\r\n\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/BaseRelationsCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of the IfcRoot handles mapping to a generic handle.\r\n   /// </summary>\r\n   public class BaseRelationsCache\r\n   {\r\n      public class IFCAnyHandleComparer : IComparer<IFCAnyHandle>\r\n      {\r\n         /// <summary>\r\n         /// A comparison for two IFCAnyHandles.\r\n         /// </summary>\r\n         /// <param name=\"hnd1\">The first handle.</param>\r\n         /// <param name=\"hnd2\">The second handle.</param>\r\n         /// <returns>-1 if the first handle is smaller, 1 if larger, 0 if equal.</returns>\r\n         /// <remarks>This function assumes both handles are valid.</remarks>\r\n         public int Compare(IFCAnyHandle hnd1, IFCAnyHandle hnd2)\r\n         {\r\n            int id1 = hnd1.Id;\r\n            int id2 = hnd2.Id;\r\n            return (id1 < id2) ? -1 : ((id1 > id2) ? 1 : 0);\r\n         }\r\n      }\r\n\r\n      public SortedDictionary<IFCAnyHandle, ISet<IFCAnyHandle>> Cache { get; } = new(new IFCAnyHandleComparer());\r\n\r\n      public ICollection<IFCAnyHandle> Keys { get { return Cache.Keys; } }\r\n      \r\n      /// <summary>\r\n      /// Adds the IfcRoot handle to the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"product\">The related product handle.</param>\r\n      public void Add(IFCAnyHandle handle, IFCAnyHandle product)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(handle) || IFCAnyHandleUtil.IsNullOrHasNoValue(product))\r\n            return;\r\n\r\n         if (!IsValidRelatedObject(handle))\r\n            return;\r\n\r\n         if (Cache.ContainsKey(handle))\r\n         {\r\n            Cache[handle].Add(product);\r\n         }\r\n         else\r\n         {\r\n            HashSet<IFCAnyHandle> products = new() { product };\r\n            Cache[handle] = products;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Try to get the set of handles associated with a particular key.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The key.</param>\r\n      /// <param name=\"values\">The set of associated values.</param>\r\n      /// <returns>True if the handle is in the dictionary.</returns>\r\n      public bool TryGetValue(IFCAnyHandle handle, out ISet<IFCAnyHandle> values)\r\n      {\r\n         return Cache.TryGetValue(handle, out values);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Indicates if the related object is valid.  At this level, just do a simple null check.  Subclasses may have tighter restrictions.\r\n      /// </summary>\r\n      /// <param name=\"relatedObject\">Object to check.</param>\r\n      /// <returns>True if relatedObject is valid, False otherwise.</returns>\r\n      public virtual bool IsValidRelatedObject(IFCAnyHandle relatedObject) => !IFCAnyHandleUtil.IsNullOrHasNoValue(relatedObject);\r\n\r\n      /// <summary>\r\n      /// To clean the set of reference objects from the cache in case of some \r\n      /// deleted entities.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The key handle.</param>\r\n      /// <returns>The cleaned reference objects.</returns>\r\n      public ISet<IFCAnyHandle> CleanRefObjects(IFCAnyHandle handle)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(handle))\r\n            return null;\r\n\r\n         if (!Cache.TryGetValue(handle, out ISet<IFCAnyHandle> cacheHandles))\r\n            return null;\r\n\r\n         return ExporterUtil.CleanRefObjects(cacheHandles);\r\n      }\r\n\r\n      public virtual void Clear()\r\n      {\r\n         Cache.Clear();\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/BooleanPropertyInfoCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of IFC boolean properties.\r\n   /// </summary>\r\n   public class BooleanPropertyInfoCache : Dictionary<KeyValuePair<string, bool>, IFCAnyHandle>\r\n   {\r\n      /// <summary>\r\n      /// Finds if it contains the property with the specified bool value.\r\n      /// </summary>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"value\">The value.</param>\r\n      /// <returns>True if it has, false otherwise.</returns>\r\n      public IFCAnyHandle Find(string propertyName, bool value)\r\n      {\r\n         KeyValuePair<string, bool> key = new KeyValuePair<string, bool>(propertyName, value);\r\n\r\n         IFCAnyHandle propertyHandle;\r\n         if (TryGetValue(key, out propertyHandle))\r\n            return propertyHandle;\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a new property of a bool value to the cache.\r\n      /// </summary>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"value\">The value.</param>\r\n      /// <param name=\"propertyHandle\">The property handle.</param>\r\n      public void Add(string propertyName, bool value, IFCAnyHandle propertyHandle)\r\n      {\r\n         KeyValuePair<string, bool> key = new KeyValuePair<string, bool>(propertyName, value);\r\n         this[key] = propertyHandle;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/CategoryUtil.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.ApplicationServices;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Export.Toolkit;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides static methods for category related manipulations.\r\n   /// </summary>\r\n   public class CategoryUtil\r\n   {\r\n      /// <summary>\r\n      /// Gets category of an element, if it has one.\r\n      /// </summary>\r\n      /// <remarks>Returns null when argument is null.</remarks>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The category.</returns>\r\n      public static Category GetSafeCategory(Element element)\r\n      {\r\n         if (element == null)\r\n            return null;\r\n\r\n         // Special cases below.\r\n         if (element is ModelCurve)\r\n         {\r\n            CurveElement modelCurve = element as ModelCurve;\r\n            GraphicsStyle lineStyle = modelCurve.LineStyle as GraphicsStyle;\r\n            if (lineStyle != null)\r\n               return lineStyle.GraphicsStyleCategory;\r\n         }\r\n         else if (element is ModelText)\r\n         {\r\n            Parameter parameter = element.GetParameter(ParameterTypeId.ModelCategoryIdParam);\r\n            if (parameter != null && parameter.HasValue && parameter.StorageType == StorageType.ElementId)\r\n            {\r\n               return Category.GetCategory(element.Document, parameter.AsElementId());\r\n            }\r\n         }\r\n\r\n         return element.Category;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets category id of an element.\r\n      /// </summary>\r\n      /// <remarks>Returns InvalidElementId when argument is null.</remarks>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The category id.</returns>\r\n      public static ElementId GetSafeCategoryId(Element element)\r\n      {\r\n         return GetSafeCategory(element)?.Id ?? ElementId.InvalidElementId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets category id of an element.\r\n      /// </summary>\r\n      /// <remarks>Returns InvalidElementId when argument is null.</remarks>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The category id.</returns>\r\n      public static ElementId GetSafeCategoryId(FabricSheetExporter.FabricSheetExportConfig config)\r\n      {\r\n         return config.CategoryId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets category name of an element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The category name.</returns>\r\n      public static string GetCategoryName(Element element)\r\n      {\r\n         return GetSafeCategory(element)?.Name ?? string.Empty;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets material id of the category of an element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The material id.</returns>\r\n      /// <remarks>\r\n      /// Returns the material id of the parent category when the category of the element has no material.\r\n      /// </remarks>\r\n      public static ElementId GetBaseMaterialIdForElement(Element element)\r\n      {\r\n         ElementId baseMaterialId = ElementId.InvalidElementId;\r\n         Category category = GetSafeCategory(element);\r\n         if (category != null)\r\n         {\r\n            Material baseMaterial = category.Material;\r\n            if (baseMaterial != null)\r\n               baseMaterialId = baseMaterial.Id;\r\n            else\r\n            {\r\n               category = category.Parent;\r\n               if (category != null)\r\n               {\r\n                  baseMaterial = category.Material;\r\n                  if (baseMaterial != null)\r\n                     baseMaterialId = baseMaterial.Id;\r\n               }\r\n            }\r\n         }\r\n         return baseMaterialId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the original color if it is valid, or a default color (grey) if it isn't.\r\n      /// </summary>\r\n      /// <param name=\"originalColor\">The original color.</param>\r\n      /// <returns>The original color if it is valid, or a default color (grey) if it isn't.</returns>\r\n      public static Color GetSafeColor(Color originalColor)\r\n      {\r\n         if (originalColor?.IsValid ?? false)\r\n            return originalColor;\r\n\r\n         // Default color is grey.\r\n         return new Color(0x7f, 0x7f, 0x7f);\r\n      }\r\n\r\n      public static IFCAnyHandle CreateMaterialList(IFCFile file, IList<IFCAnyHandle> materials)\r\n      {\r\n         string hash = string.Empty;\r\n         foreach (IFCAnyHandle material in materials)\r\n         {\r\n            string matName = IFCAnyHandleUtil.GetStringAttribute(material, \"Name\");\r\n            hash += \"Material:\" + matName + \",\";\r\n         }\r\n         IFCAnyHandle matList = ExporterCacheManager.MaterialSetUsageCache.GetHandle(hash);\r\n         if (matList == null)\r\n         {\r\n            matList = IFCInstanceExporter.CreateMaterialList(file, materials);\r\n            ExporterCacheManager.MaterialSetUsageCache.AddHash(matList, hash);\r\n         }\r\n         return matList;\r\n      }\r\n\r\n      public static IFCAnyHandle CreateMaterialProfileSetUsage(IFCFile file, \r\n         IFCAnyHandle materialProfileSet, int? cardinalPoint)\r\n      {\r\n         string materialProfileSetName = IFCAnyHandleUtil.GetStringAttribute(materialProfileSet, \"Name\");\r\n         string hash = materialProfileSetName + \":\" + (cardinalPoint?.ToString() ?? string.Empty);\r\n         IFCAnyHandle matSetUsage = ExporterCacheManager.MaterialSetUsageCache.GetHandle(hash);\r\n         if (matSetUsage == null)\r\n         {\r\n            matSetUsage = IFCInstanceExporter.CreateMaterialProfileSetUsage(file,\r\n               materialProfileSet, cardinalPoint, null);\r\n            ExporterCacheManager.MaterialSetUsageCache.AddHash(matSetUsage, hash);\r\n         }\r\n         return matSetUsage;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Generate a default color from the line color of a category.\r\n      /// </summary>\r\n      /// <param name=\"category\">The category.</param>\r\n      /// <returns>The line color, or grey if it is black.</returns>\r\n      public static Color GetColorFromLineColor(Category category)\r\n      {\r\n         Color color = GetSafeColor(category?.LineColor);\r\n\r\n         // Grey is returned in place of pure black.  For systems which default to a black background color, \r\n         // Grey is more of a contrast.  \r\n         if (color.Red == 0 && color.Green == 0 && color.Blue == 0)\r\n            color = new Color(0x7f, 0x7f, 0x7f);\r\n\r\n         return color;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the color of the material of the category of an element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The color of the element.</returns>\r\n      /// <remarks>\r\n      /// Returns the line color of the category when the category of the element has no \r\n      /// material.\r\n      /// </remarks>\r\n      public static Color GetElementColor(Element element)\r\n      {\r\n         Category category = GetSafeCategory(element);\r\n         Material material = category?.Material;\r\n\r\n         if (material != null)\r\n         {\r\n            return GetSafeColor(material.Color);\r\n         }\r\n\r\n         return GetColorFromLineColor(category);\r\n      }\r\n\r\n      private static bool CacheIsElementExternal(ElementId elementId, bool isExternal)\r\n      {\r\n         ExporterCacheManager.IsExternalParameterValueCache[elementId] = isExternal;\r\n         return isExternal;\r\n      }\r\n\r\n      private static bool? IsElementExternalViaParameter(Element element)\r\n      {\r\n         int? intIsExternal = null;\r\n         string localExternalParamName = PropertySetEntryUtil.GetLocalizedIsExternal(ExporterCacheManager.LanguageType);\r\n         if (localExternalParamName != null)\r\n         {\r\n            intIsExternal = ParameterUtil.GetIntValueFromElementOrSymbol(element, localExternalParamName);\r\n            if (intIsExternal.HasValue)\r\n            {\r\n               return (intIsExternal.Value != 0);\r\n            }\r\n         }\r\n\r\n         if (ExporterCacheManager.LanguageType != LanguageType.English_USA)\r\n         {\r\n            string externalParamName = PropertySetEntryUtil.GetLocalizedIsExternal(LanguageType.English_USA);\r\n            intIsExternal = ParameterUtil.GetIntValueFromElementOrSymbol(element, externalParamName);\r\n            if (intIsExternal.HasValue)\r\n            {\r\n               return (intIsExternal.Value != 0);\r\n            }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if element is external.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// An element is considered external if either:\r\n      ///   <li> A special Yes/No parameter \"IsExternal\" is applied to it or its type and its value is set to \"yes\".</li>\r\n      ///   <li> The element itself has information about being an external element.</li>\r\n      /// All other elements are internal.\r\n      /// </remarks>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>True if the element is external, false otherwise and null if will not export the value.</returns>\r\n      public static bool? IsElementExternal(Element element)\r\n      {\r\n         if (element == null || element is ElementType)\r\n            return null;\r\n\r\n         // Look for a parameter \"IsExternal\", potentially localized.\r\n         ElementId elementId = element.Id;\r\n\r\n         bool isExternal;\r\n         if (ExporterCacheManager.IsExternalParameterValueCache.TryGetValue(elementId, out isExternal))\r\n         {\r\n            return isExternal;\r\n         }\r\n\r\n         bool? maybeIsExternal = IsElementExternalViaParameter(element);\r\n         if (maybeIsExternal.HasValue)\r\n         {\r\n            return CacheIsElementExternal(elementId, maybeIsExternal.Value);\r\n         }\r\n         \r\n         ElementId elementTypeId = element.GetTypeId();\r\n         Element elementType = null;\r\n         if (elementTypeId != ElementId.InvalidElementId)\r\n         {\r\n            if (ExporterCacheManager.IsExternalParameterValueCache.TryGetValue(elementTypeId, out isExternal))\r\n            {\r\n               return isExternal;\r\n            }\r\n\r\n            elementType = element.Document.GetElement(element.GetTypeId());\r\n         }\r\n\r\n         // Many element types have the FUNCTION_PARAM parameter.  If this is set, use its value.\r\n         int elementFunction;\r\n         if ((elementType != null) && ParameterUtil.GetIntValueFromElement(elementType, BuiltInParameter.FUNCTION_PARAM, out elementFunction) != null)\r\n         {\r\n            // Note that the WallFunction enum value is the same for many different kinds of objects.\r\n            // Note: it is unclear whether Soffit walls should be considered exterior, but won't change\r\n            // existing functionality for now.\r\n            isExternal = (elementFunction != ((int)WallFunction.Interior));\r\n            if (elementId != elementTypeId && elementTypeId != ElementId.InvalidElementId)\r\n               ExporterCacheManager.IsExternalParameterValueCache[elementTypeId] = isExternal;\r\n            return CacheIsElementExternal(elementId, isExternal);\r\n         }\r\n\r\n         // Specific element types that know if they are external or not if the built-in parameter isn't set.\r\n         // Categories are used, and not types, to also support in-place families \r\n\r\n         // Roofs are always external\r\n         long categoryValue = GetSafeCategoryId(element).Value;\r\n         if (categoryValue == (long) BuiltInCategory.OST_Roofs ||\r\n             categoryValue == (long) BuiltInCategory.OST_MassExteriorWall)\r\n         {\r\n            return CacheIsElementExternal(elementId, true);\r\n         }\r\n\r\n         // Mass interior walls are always internal\r\n         if (categoryValue == (long) BuiltInCategory.OST_MassInteriorWall)\r\n         {\r\n            return CacheIsElementExternal(elementId, false);\r\n         }\r\n\r\n         // Family instances may be hosted on an external element\r\n         if (element is FamilyInstance)\r\n         {\r\n            FamilyInstance familyInstance = element as FamilyInstance;\r\n            Element familyInstanceHost = familyInstance.Host;\r\n            if (familyInstanceHost == null)\r\n            {\r\n               Reference familyInstanceHostReference = familyInstance.HostFace;\r\n               if (familyInstanceHostReference != null)\r\n                  familyInstanceHost = element.Document.GetElement(familyInstanceHostReference);\r\n            }\r\n\r\n            if (familyInstanceHost != null)\r\n               return IsElementExternal(familyInstanceHost);\r\n         }\r\n\r\n         return CacheIsElementExternal(elementId, false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create material association with inputs of 2 IFCAnyHandle. It is used for example to create material relation between an instance and its material set usage\r\n      /// </summary>\r\n      /// <param name=\"instanceHnd\">the instance handle</param>\r\n      /// <param name=\"materialSetHnd\">the material usage handle, e.g. material set usage</param>\r\n      /// <returns>True if added, false otherwise.</returns>\r\n      public static bool CreateMaterialAssociation(IFCAnyHandle instanceHnd, IFCAnyHandle materialSetHnd)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(materialSetHnd) ||\r\n             IFCAnyHandleUtil.IsNullOrHasNoValue(instanceHnd))\r\n            return false;\r\n         \r\n         ExporterCacheManager.MaterialRelationsCache.Add(materialSetHnd, instanceHnd);\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create or add into exsiting relation for a material set from a family symbol.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">the exporter IFC</param>\r\n      /// <param name=\"familySymbol\">the element family symbol</param>\r\n      /// <param name=\"typeStyle\">the IFC type object created for the above family symbol</param>\r\n      /// <param name=\"materialAndProfile\">a dictionary that keeps the association of the material elementid and the associated profile def</param>\r\n      public static void CreateMaterialAssociation(ExporterIFC exporterIFC, FamilySymbol familySymbol, IFCAnyHandle typeStyle, MaterialAndProfile materialAndProfile)\r\n      {\r\n         ElementId typeId = familySymbol.Id;\r\n         IFCAnyHandle materialSet = GetOrCreateMaterialSet(exporterIFC, familySymbol, materialAndProfile);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(materialSet))\r\n            ExporterCacheManager.MaterialRelationsCache.Add(materialSet, typeStyle);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an association between a material handle and an instance handle.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"instanceHandle\">The IFC instance handle.</param>\r\n      /// <param name=\"materialId\">The material id.</param>\r\n      public static void CreateMaterialAssociation(ExporterIFC exporterIFC, IFCAnyHandle instanceHandle, ElementId materialId)\r\n      {\r\n         // Create material association if any.\r\n         if (materialId != ElementId.InvalidElementId)\r\n         {\r\n            IFCAnyHandle materialNameHandle = GetOrCreateMaterialHandle(exporterIFC, materialId);\r\n\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(materialNameHandle))\r\n               ExporterCacheManager.MaterialRelationsCache.Add(materialNameHandle, instanceHandle);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an association between a list of material handles and an instance handle.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"instanceHandle\">The IFC instance handle.</param>\r\n      /// <param name=\"materialList\">The list of material ids.</param>\r\n      /// <param name=\"materialToVolumeMap\">The cached volumes of materials.</param>\r\n      public static void CreateMaterialAssociation(ExporterIFC exporterIFC, IFCAnyHandle instanceHandle, \r\n         ICollection<ElementId> materialList, IDictionary<ElementId, double> materialToVolumeMap)\r\n      {\r\n         CreateMaterialAssociationCommon(exporterIFC, element: null, instanceHandle, materialList, materialToVolumeMap);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an association between a list of material handles and an instance handle.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The Element.</param>\r\n      /// <param name=\"instanceHandle\">The IFC instance handle.</param>\r\n      /// <param name=\"materialList\">The list of material ids.</param>\r\n      public static void CreateMaterialAssociation(ExporterIFC exporterIFC, Element element,\r\n         IFCAnyHandle instanceHandle, ICollection<ElementId> materialList)\r\n      {\r\n         CreateMaterialAssociationCommon(exporterIFC, element, instanceHandle, materialList, materialToVolumeMap: null);\r\n      }\r\n\r\n      private static void CreateMaterialAssociationCommon(ExporterIFC exporterIFC, Element element,\r\n         IFCAnyHandle instanceHandle, ICollection<ElementId> materialList, IDictionary<ElementId, double> materialToVolumeMap)\r\n      {\r\n         if (element == null && materialToVolumeMap == null)\r\n            return;\r\n\r\n         bool useVolumeMap = materialToVolumeMap != null;\r\n         // Create material association if any.\r\n         bool createConstituentSet = (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4);\r\n         HashSet<IFCAnyHandle> materials = createConstituentSet ? null : new HashSet<IFCAnyHandle>();\r\n         ISet<ElementId> alreadySeenIds = createConstituentSet ? new HashSet<ElementId>() : null;\r\n\r\n         IFCAnyHandle matHnd = null;\r\n         foreach (ElementId materialId in materialList)\r\n         {\r\n            matHnd = GetOrCreateMaterialHandle(exporterIFC, materialId);\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(matHnd))\r\n               continue;\r\n\r\n            // Strictly speaking, we only need at most one material if createConstituentSet is true.\r\n            if (createConstituentSet)\r\n               alreadySeenIds.Add(materialId);\r\n            else\r\n               materials.Add(matHnd);\r\n         }\r\n\r\n         int numMaterials = createConstituentSet ? alreadySeenIds.Count : materials.Count;\r\n         if (numMaterials == 0)\r\n            return;\r\n\r\n         // If there is only one material, we will associate the one material directly.\r\n         // matHnd above is guaranteed to have a valid value if numMaterials > 0.\r\n         if (numMaterials == 1)\r\n         {\r\n            ExporterCacheManager.MaterialRelationsCache.Add(matHnd, instanceHandle);\r\n            return;\r\n         }\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         if (createConstituentSet)\r\n         {\r\n            double totalVolume = 0.0;\r\n            Dictionary<ElementId, double> volumeMaterialIdDict = new Dictionary<ElementId, double>();\r\n            foreach (ElementId materialId in alreadySeenIds)\r\n            {\r\n               double currVolume = 0.0;\r\n               if (materialId != ElementId.InvalidElementId)\r\n               {\r\n                  if (useVolumeMap)\r\n                     materialToVolumeMap.TryGetValue(materialId, out currVolume);\r\n                  else\r\n                     currVolume = element?.GetMaterialVolume(materialId) ?? 0.0;\r\n               }\r\n\r\n               volumeMaterialIdDict[materialId] = currVolume;\r\n               totalVolume += currVolume;\r\n            }\r\n\r\n            ISet<Tuple<ElementId, double>> alreadySeenMaterialIds = new HashSet<Tuple<ElementId, double>>();\r\n            foreach (ElementId materialId in alreadySeenIds)\r\n            {\r\n               alreadySeenMaterialIds.Add(new Tuple<ElementId, double>(materialId, \r\n                  MathUtil.IsAlmostZero(totalVolume) ? 0.0 : volumeMaterialIdDict[materialId] / totalVolume));\r\n            }\r\n            \r\n            ExporterCacheManager.MaterialConstituentCache.Clear();\r\n            HashSet<IFCAnyHandle> constituentSet = new HashSet<IFCAnyHandle>();\r\n            // in IFC4 we will create IfcConstituentSet instead of MaterialList, create the associated IfcConstituent here from IfcMaterial\r\n            foreach (Tuple<ElementId, double> materialIdAndFraction in alreadySeenMaterialIds)\r\n            {\r\n               constituentSet.AddIfNotNull(GetOrCreateMaterialConstituent(exporterIFC, \r\n                  materialIdAndFraction.Item1, materialIdAndFraction.Item2));\r\n            }\r\n\r\n            GetOrCreateMaterialConstituentSet(file, instanceHandle, constituentSet);\r\n         }\r\n         else\r\n         {\r\n            IFCAnyHandle materialContainerHnd = CreateMaterialList(file, materials.ToList());\r\n            ExporterCacheManager.MaterialSetUsageCache.Add(materialContainerHnd, instanceHandle);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an association between a list of material handles and an instance handle, and create the relevant IfcShapeAspect\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element</param>\r\n      /// <param name=\"instanceHandle\">The IFC instance handle.</param>\r\n      /// <param name=\"representationItemInfoSet\">RepresentationItem info set</param>\r\n      public static void CreateMaterialAssociationWithShapeAspect(ExporterIFC exporterIFC, Element element, IFCAnyHandle instanceHandle, HashSet<Tuple<MaterialConstituentInfo, IFCAnyHandle>> representationItemInfoSet)\r\n      {\r\n         // Create material association if any.\r\n         bool createConstituentSet = (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4);\r\n         HashSet<IFCAnyHandle> materials = createConstituentSet ? null : new HashSet<IFCAnyHandle>();\r\n         ISet<ElementId> alreadySeenMaterialIds = createConstituentSet ? new HashSet<ElementId>() : null;\r\n         IFCAnyHandle matHnd = null;\r\n         foreach (Tuple<MaterialConstituentInfo, IFCAnyHandle> repItemInfo in representationItemInfoSet)\r\n         {\r\n            matHnd = GetOrCreateMaterialHandle(exporterIFC, repItemInfo.Item1.MaterialId);\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(matHnd))\r\n               continue;\r\n\r\n            // Strictly speaking, we only need at most one material if createConstituentSet is true.\r\n            if (createConstituentSet)\r\n               alreadySeenMaterialIds.Add(repItemInfo.Item1.MaterialId);\r\n            else\r\n               materials.Add(matHnd);\r\n         }\r\n\r\n         int numMaterials = createConstituentSet ? alreadySeenMaterialIds.Count : materials.Count;\r\n         if (numMaterials == 0)\r\n            return;\r\n\r\n         // If there is only one material, we will associate the one material directly.\r\n         // matHnd above is guaranteed to have a valid value if numMaterials > 0.\r\n         if (numMaterials == 1)\r\n         {\r\n            ExporterCacheManager.MaterialRelationsCache.Add(matHnd, instanceHandle);\r\n            return;\r\n         }\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle materialContainerHnd = null;\r\n\r\n         if (createConstituentSet)\r\n         {\r\n            ExporterCacheManager.MaterialConstituentCache.Clear();\r\n            string repType = null;\r\n            IFCAnyHandle prodRep = null;\r\n            if (IFCAnyHandleUtil.IsSubTypeOf(instanceHandle, IFCEntityType.IfcProduct))\r\n            {\r\n               prodRep = IFCAnyHandleUtil.GetRepresentation(instanceHandle);\r\n               IList<IFCAnyHandle> reps = IFCAnyHandleUtil.GetRepresentations(prodRep);\r\n               // Get RepresentationType for shapeAspect in \"Body\" representation\r\n               foreach (IFCAnyHandle rep in reps)\r\n               {\r\n                  if (IFCAnyHandleUtil.GetRepresentationIdentifier(rep).Equals(\"Body\"))\r\n                  {\r\n                     repType = IFCAnyHandleUtil.GetRepresentationType(rep);\r\n                     if (repType.Equals(\"MappedRepresentation\", StringComparison.InvariantCultureIgnoreCase))\r\n                     {\r\n                        HashSet<IFCAnyHandle> items = IFCAnyHandleUtil.GetItems(rep);\r\n                        foreach (IFCAnyHandle item in items)\r\n                        {\r\n                           IFCAnyHandle mappingSource = IFCAnyHandleUtil.GetInstanceAttribute(item, \"MappingSource\");\r\n                           IFCAnyHandle mappingSourceRep = IFCAnyHandleUtil.GetInstanceAttribute(mappingSource, \"MappedRepresentation\");\r\n                           repType = IFCAnyHandleUtil.GetRepresentationType(mappingSourceRep);\r\n                        }\r\n                     }\r\n                     break;\r\n                  }\r\n               }\r\n            }\r\n            else if (IFCAnyHandleUtil.IsSubTypeOf(instanceHandle, IFCEntityType.IfcTypeProduct))\r\n            {\r\n               IList<IFCAnyHandle> repMaps = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(instanceHandle, \"RepresentationMaps\");\r\n               if (repMaps != null && repMaps.Count > 0)\r\n               {\r\n                  // Will use representation maps for shapeAspect if there is \"Body\"\r\n                  foreach (IFCAnyHandle repMap in repMaps)\r\n                  {\r\n                     IFCAnyHandle rep = IFCAnyHandleUtil.GetInstanceAttribute(repMap, \"MappedRepresentation\");\r\n                     if (IFCAnyHandleUtil.GetRepresentationIdentifier(rep).Equals(\"Body\"))\r\n                     {\r\n                        prodRep = repMap;\r\n                        repType = IFCAnyHandleUtil.GetRepresentationType(rep);\r\n                        break;\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n\r\n            // Collect ALL representationItems that have the same Category and MaterialId into one Set\r\n            MaterialConsituentInfoComparer comparer = new MaterialConsituentInfoComparer();\r\n            IDictionary<MaterialConstituentInfo, HashSet<IFCAnyHandle>> repItemInfoGroup = new Dictionary<MaterialConstituentInfo, HashSet<IFCAnyHandle>>(comparer);\r\n            foreach (Tuple<MaterialConstituentInfo, IFCAnyHandle> repItemInfo in representationItemInfoSet)\r\n            {\r\n               if (!repItemInfoGroup.ContainsKey(repItemInfo.Item1))\r\n               {\r\n                  HashSet<IFCAnyHandle> repItemSet = new HashSet<IFCAnyHandle>() { repItemInfo.Item2 };\r\n                  repItemInfoGroup.Add(repItemInfo.Item1, repItemSet);\r\n               }\r\n               else\r\n               {\r\n                  repItemInfoGroup[repItemInfo.Item1].Add(repItemInfo.Item2);\r\n               }\r\n            }\r\n\r\n            double totalVolume = 0.0;\r\n            IDictionary<ElementId, double> volumeMaterialIdDict = new Dictionary<ElementId, double>();\r\n            foreach (KeyValuePair<MaterialConstituentInfo, HashSet<IFCAnyHandle>> repItemInfoSet in repItemInfoGroup)\r\n            {\r\n               ElementId materialId = repItemInfoSet.Key.MaterialId;\r\n               double currVolume = (materialId != ElementId.InvalidElementId) ? element.GetMaterialVolume(materialId) : 0.0;\r\n               volumeMaterialIdDict[materialId] = currVolume;\r\n               totalVolume += currVolume;\r\n            }\r\n\r\n            if (!MathUtil.IsAlmostZero(totalVolume))\r\n            {\r\n               foreach (KeyValuePair<MaterialConstituentInfo, HashSet<IFCAnyHandle>> repItemInfoSet in repItemInfoGroup)\r\n               {\r\n                  repItemInfoSet.Key.Fraction = volumeMaterialIdDict[repItemInfoSet.Key.MaterialId] / totalVolume;\r\n               }\r\n            }\r\n\r\n            HashSet<IFCAnyHandle> constituentSet = new HashSet<IFCAnyHandle>();\r\n            // in IFC4 we will create IfcConstituentSet instead of MaterialList, create the associated IfcConstituent here from IfcMaterial\r\n            foreach (KeyValuePair<MaterialConstituentInfo, HashSet<IFCAnyHandle>> repItemInfoSet in repItemInfoGroup)\r\n            {\r\n               constituentSet.AddIfNotNull(GetOrCreateMaterialConstituent(exporterIFC, \r\n                  repItemInfoSet.Key));\r\n\r\n               RepresentationUtil.CreateRepForShapeAspect(exporterIFC, element, prodRep, repType, repItemInfoSet.Key.ComponentCat, repItemInfoSet.Value);\r\n            }\r\n\r\n            if (constituentSet.Count > 0)\r\n            {\r\n               GetOrCreateMaterialConstituentSet(file, instanceHandle, constituentSet);\r\n            }\r\n         }\r\n         else\r\n         {\r\n            materialContainerHnd = CreateMaterialList(file, materials.ToList());\r\n            ExporterCacheManager.MaterialSetUsageCache.Add(materialContainerHnd, instanceHandle);\r\n         }\r\n      }\r\n\r\n      public static void TryToCreateMaterialAssocation(ExporterIFC exporterIFC, BodyData bodyData,\r\n         Element elementType, Element element, GeometryElement exportGeometry, IFCAnyHandle typeStyle,\r\n         FamilyTypeInfo typeInfo)\r\n      {\r\n         if (bodyData != null && bodyData.RepresentationItemInfo != null &&\r\n            bodyData.RepresentationItemInfo.Count > 0)\r\n         {\r\n            CreateMaterialAssociationWithShapeAspect(exporterIFC,\r\n               elementType, typeStyle, bodyData.RepresentationItemInfo);\r\n            return;\r\n         }\r\n\r\n         bool addedMaterialAssociation = false;\r\n\r\n         IList<ElementId> matIds = BodyExporter.GetMaterialIdsFromGeometryOrParameters(exportGeometry,\r\n            elementType, element);\r\n         if (matIds.Count > 0)\r\n         {\r\n            CreateMaterialAssociation(exporterIFC, elementType, typeStyle, matIds);\r\n            addedMaterialAssociation = true;\r\n\r\n            if (typeInfo.MaterialIdList.Count == 0)\r\n               typeInfo.MaterialIdList = matIds;\r\n         }\r\n\r\n         if (!addedMaterialAssociation)\r\n            CreateMaterialAssociation(exporterIFC, elementType, typeStyle, typeInfo.MaterialIdList);\r\n\r\n         return;\r\n      }\r\n\r\n      public static IFCAnyHandle GetOrCreateMaterialStyle(Document document, IFCFile file, ElementId materialId)\r\n      {\r\n         IFCAnyHandle styleHnd = ExporterCacheManager.MaterialIdToStyleHandleCache.Find(materialId);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(styleHnd))\r\n         {\r\n            Material material = document.GetElement(materialId) as Material;\r\n            if (material == null)\r\n               return null;\r\n\r\n            string matName = NamingUtil.GetMaterialName(material);\r\n\r\n            Color color = GetSafeColor(material.Color);\r\n            double blueVal = color.Blue / 255.0;\r\n            double greenVal = color.Green / 255.0;\r\n            double redVal = color.Red / 255.0;\r\n\r\n            IFCAnyHandle colorHnd = IFCInstanceExporter.CreateColourRgb(file, null, redVal, greenVal, blueVal);\r\n\r\n            double transparency = ((double)material.Transparency) / 100.0;\r\n            IFCData smoothness = IFCDataUtil.CreateAsNormalisedRatioMeasure(((double)material.Smoothness) / 100.0);\r\n\r\n            IFCData specularExp = IFCDataUtil.CreateAsSpecularExponent(material.Shininess);\r\n\r\n            IFCReflectanceMethod method = IFCReflectanceMethod.NotDefined;\r\n\r\n            IFCAnyHandle renderingHnd = IFCInstanceExporter.CreateSurfaceStyleRendering(file, colorHnd, transparency,\r\n                null, null, null, null, smoothness, specularExp, method);\r\n\r\n            ISet<IFCAnyHandle> surfStyles = new HashSet<IFCAnyHandle>();\r\n            surfStyles.Add(renderingHnd);\r\n\r\n            IFCSurfaceSide surfSide = IFCSurfaceSide.Both;\r\n            styleHnd = IFCInstanceExporter.CreateSurfaceStyle(file, matName, surfSide, surfStyles);\r\n            ExporterCacheManager.MaterialIdToStyleHandleCache.Register(materialId, styleHnd);\r\n         }\r\n\r\n         return styleHnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get or Create (if not yet exists) a handle for IfcMaterialConstituent with default name. It points to an IfcMaterial\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\"></param>\r\n      /// <param name=\"materialId\"></param>\r\n      /// <param name=\"fraction\"></param>\r\n      /// <returns>The Handle to IfcMaterialConstituent</returns>\r\n      public static IFCAnyHandle GetOrCreateMaterialConstituent(ExporterIFC exporterIFC, ElementId materialId, double fraction)\r\n      {\r\n         IFCAnyHandle materialConstituentHandle = ExporterCacheManager.MaterialConstituentCache.Find(materialId, fraction);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(materialConstituentHandle))\r\n         {\r\n            Document document = ExporterCacheManager.Document;\r\n            GetOrCreateMaterialHandle(exporterIFC, materialId);\r\n\r\n            //Material constituent name will be defaulted to the same as the material name\r\n            Material material = document.GetElement(materialId) as Material;\r\n            string constituentName = (material != null) ? NamingUtil.GetMaterialName(material) : \"<Unnamed>\";\r\n            MaterialConstituentInfo constInfo = new MaterialConstituentInfo(constituentName, materialId, fraction);\r\n\r\n            materialConstituentHandle = GetOrCreateMaterialConstituent(exporterIFC, constInfo);\r\n         }\r\n\r\n         return materialConstituentHandle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get or Create (if not yet exists) a handle for IfcMaterialConstituent. It points to an IfcMaterial\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\"></param>\r\n      /// <param name=\"constInfo\"></param>\r\n      /// <returns>The Handle to IfcMaterialConstituent</returns>\r\n      public static IFCAnyHandle GetOrCreateMaterialConstituent(ExporterIFC exporterIFC, MaterialConstituentInfo constInfo)\r\n      {\r\n         IFCAnyHandle materialConstituentHandle = ExporterCacheManager.MaterialConstituentCache.Find(constInfo);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(materialConstituentHandle))\r\n         {\r\n            Document document = ExporterCacheManager.Document;\r\n            IFCAnyHandle materialHnd = GetOrCreateMaterialHandle(exporterIFC, constInfo.MaterialId);\r\n\r\n            Material material = document.GetElement(constInfo.MaterialId) as Material;\r\n            string category = (material != null) ? NamingUtil.GetMaterialCategoryName(material) : string.Empty;\r\n\r\n            IFCData fractionData = IFCDataUtil.CreateAsNormalisedRatioMeasure(constInfo.Fraction);\r\n\r\n            materialConstituentHandle = IFCInstanceExporter.CreateMaterialConstituent(exporterIFC.GetFile(), materialHnd, \r\n               name: constInfo.ComponentCat, category: category, fraction: fractionData);\r\n            ExporterCacheManager.MaterialConstituentCache.Register(constInfo, materialConstituentHandle);\r\n         }\r\n\r\n         return materialConstituentHandle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets material handle from material id or creates one if there is none.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"materialId\">The material id.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle GetOrCreateMaterialHandle(ExporterIFC exporterIFC, ElementId materialId)\r\n      {\r\n         Document document = ExporterCacheManager.Document;\r\n         IFCAnyHandle materialNameHandle = ExporterCacheManager.MaterialHandleCache.Find(materialId);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(materialNameHandle))\r\n         {\r\n            string materialName = \"<Unnamed>\";\r\n            string description = null;\r\n            string category = null;\r\n            if (materialId != ElementId.InvalidElementId)\r\n            {\r\n               Material material = document.GetElement(materialId) as Material;\r\n               if (material != null)\r\n               {\r\n                  materialName = NamingUtil.GetMaterialName(material);\r\n\r\n                  if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n                  {\r\n                     category = NamingUtil.GetMaterialCategoryName(material);\r\n                     description = NamingUtil.GetOverrideStringValue(material, \"IfcDescription\", null);\r\n                  }\r\n               }\r\n            }\r\n\r\n            IFCFile file = exporterIFC.GetFile();\r\n            materialNameHandle = IFCInstanceExporter.CreateMaterial(file, materialName, description: description, category: category);\r\n\r\n            ExporterCacheManager.MaterialHandleCache.Register(materialId, materialNameHandle);\r\n\r\n            // associate Material with SurfaceStyle if necessary.\r\n            if (materialId != ElementId.InvalidElementId && !ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && materialNameHandle.HasValue)\r\n            {\r\n               HashSet<IFCAnyHandle> matRepHandles = IFCAnyHandleUtil.GetHasRepresentation(materialNameHandle);\r\n               if (matRepHandles.Count == 0)\r\n               {\r\n                  Material matElem = document.GetElement(materialId) as Material;\r\n\r\n                  // TODO_DOUBLE_PATTERN - deal with background pattern\r\n                  ElementId fillPatternId = (matElem != null) ? matElem.CutForegroundPatternId : ElementId.InvalidElementId;\r\n                  Color color = (matElem != null) ? GetSafeColor(matElem.CutForegroundPatternColor) : new Color(0, 0, 0);\r\n\r\n                  double planScale = 100.0;\r\n\r\n                  HashSet<IFCAnyHandle> styles = new HashSet<IFCAnyHandle>();\r\n\r\n                  bool hasFill = false;\r\n\r\n                  IFCAnyHandle styledRepItem = null;\r\n                  IFCAnyHandle matStyleHnd = GetOrCreateMaterialStyle(document, file, materialId);\r\n                  if (!ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView &&\r\n                     styles.AddIfNotNull(matStyleHnd))\r\n                  {\r\n                     bool supportCutStyles = !ExporterCacheManager.ExportOptionsCache.ExportAsCoordinationView2;\r\n                     if (fillPatternId != ElementId.InvalidElementId && supportCutStyles)\r\n                     {\r\n                        IFCAnyHandle cutStyleHnd = exporterIFC.GetOrCreateFillPattern(fillPatternId, color, planScale);\r\n                        if (cutStyleHnd.HasValue)\r\n                        {\r\n                           styles.Add(cutStyleHnd);\r\n                           hasFill = true;\r\n                        }\r\n                     }\r\n\r\n                     IFCAnyHandle styledItemHnd;\r\n                     if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n                     {\r\n                        IFCAnyHandle presStyleHnd = IFCInstanceExporter.CreatePresentationStyleAssignment(file, styles);\r\n\r\n                        HashSet<IFCAnyHandle> presStyleSet = new HashSet<IFCAnyHandle>();\r\n                        presStyleSet.Add(presStyleHnd);\r\n\r\n                        styledItemHnd = IFCInstanceExporter.CreateStyledItem(file, styledRepItem, presStyleSet, null);\r\n                     }\r\n                     else\r\n                     {\r\n                        styledItemHnd = IFCInstanceExporter.CreateStyledItem(file, styledRepItem, styles, null);\r\n                     }\r\n\r\n                     IFCAnyHandle contextOfItems = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.None);\r\n\r\n                     string repId = \"Style\";\r\n                     string repType = (hasFill) ? \"Material and Cut Pattern\" : \"Material\";\r\n                     HashSet<IFCAnyHandle> repItems = new HashSet<IFCAnyHandle>();\r\n\r\n                     repItems.Add(styledItemHnd);\r\n\r\n                     IFCAnyHandle styleRepHnd = IFCInstanceExporter.CreateStyledRepresentation(file, contextOfItems, repId, repType, repItems);\r\n\r\n                     List<IFCAnyHandle> repList = new List<IFCAnyHandle>();\r\n                     repList.Add(styleRepHnd);\r\n\r\n                     IFCAnyHandle matDefRepHnd = IFCInstanceExporter.CreateMaterialDefinitionRepresentation(file, null, null, repList, materialNameHandle);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         return materialNameHandle;\r\n      }\r\n\r\n      public static IFCAnyHandle GetOrCreateMaterialSet(ExporterIFC exporterIFC, FamilySymbol familySymbol, MaterialAndProfile materialAndProfile)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         ElementId typeId = familySymbol.Id;\r\n         IFCAnyHandle materialSet = ExporterCacheManager.MaterialSetCache.FindProfileSet(typeId);\r\n         if (materialSet == null && materialAndProfile != null)\r\n         {\r\n            IList<IFCAnyHandle> matProf = new List<IFCAnyHandle>();\r\n            foreach (KeyValuePair<ElementId, IFCAnyHandle> MnP in materialAndProfile.GetKeyValuePairs())\r\n            {\r\n               IFCAnyHandle materialHnd = CategoryUtil.GetOrCreateMaterialHandle(exporterIFC, MnP.Key);\r\n               if (materialHnd != null && !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 && !ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n                  matProf.Add(IFCInstanceExporter.CreateMaterialProfile(file, MnP.Value, Material: materialHnd, name: familySymbol.Name));\r\n            }\r\n\r\n            if (matProf.Count > 0)\r\n            {\r\n               materialSet = IFCInstanceExporter.CreateMaterialProfileSet(file, matProf, name: familySymbol.Name);\r\n               ExporterCacheManager.MaterialSetCache.RegisterProfileSet(typeId, materialSet);\r\n            }\r\n         }\r\n\r\n         return materialSet;\r\n      }\r\n\r\n      public static ElementId GetElementIdFromHandle(IFCAnyHandle instanceHandle)\r\n      {\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(instanceHandle, IFCEntityType.IfcProduct))\r\n            return ExporterCacheManager.HandleToElementCache.Find(instanceHandle);\r\n         \r\n         if (IFCAnyHandleUtil.IsSubTypeOf(instanceHandle, IFCEntityType.IfcTypeProduct))\r\n         {\r\n            ElementTypeKey eTypeKey = ExporterCacheManager.ElementTypeToHandleCache.Find(instanceHandle);\r\n            if (eTypeKey != null)\r\n               return eTypeKey.Item1.Id;\r\n         }\r\n\r\n         return ElementId.InvalidElementId;\r\n      }\r\n\r\n      public static IFCAnyHandle GetOrCreateMaterialConstituentSet(IFCFile file,\r\n         IFCAnyHandle instanceHandle, HashSet<IFCAnyHandle> constituentSet,\r\n         string name = null, string description = null)\r\n      {\r\n         ElementId elementId = GetElementIdFromHandle(instanceHandle);\r\n         return GetOrCreateMaterialConstituentSet(file, elementId, instanceHandle, constituentSet, name, description);   \r\n      }\r\n\r\n      public static IFCAnyHandle GetOrCreateMaterialConstituentSet(IFCFile file,\r\n         ElementId elementId, IFCAnyHandle instanceHandle, ISet<IFCAnyHandle> constituentSet,\r\n         string name = null, string description = null)\r\n      {\r\n         IFCAnyHandle constituentSetHnd = \r\n            ExporterCacheManager.MaterialConstituentSetCache.Find(constituentSet);\r\n         \r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(constituentSetHnd))\r\n         {\r\n            constituentSetHnd = IFCInstanceExporter.CreateMaterialConstituentSet(file,\r\n               constituentSet, name, description);\r\n         }\r\n\r\n         ExporterCacheManager.MaterialConstituentSetCache.Register(elementId, instanceHandle,\r\n            constituentSetHnd, constituentSet);\r\n\r\n         return constituentSetHnd;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ClassificationCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Extensions;\r\nusing Revit.IFC.Export.Toolkit;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// A structure to hold the key for the classification reference dictionary.\r\n   /// </summary>\r\n   public class ClassificationReferenceKey : IComparable<ClassificationReferenceKey>\r\n   {\r\n      private int CompareStrings(string first, string second)\r\n      {\r\n         return (first ?? string.Empty).CompareTo(second ?? string.Empty);\r\n      }\r\n\r\n      public int CompareTo(ClassificationReferenceKey other)\r\n      {\r\n         // If other is not a valid object reference, this instance is greater.\r\n         if (other == null) \r\n            return 1;\r\n\r\n         int myReferencedSourceId = ReferencedSource?.Id ?? -1;\r\n         int otherReferencedSourceId = other.ReferencedSource?.Id ?? -1;\r\n         if (myReferencedSourceId != otherReferencedSourceId)\r\n            return (myReferencedSourceId < otherReferencedSourceId) ? -1 : 1;\r\n\r\n         int compVal;\r\n         if ((compVal = CompareStrings(Name, other.Name)) != 0)\r\n            return compVal;\r\n         if ((compVal = CompareStrings(Location, other.Location)) != 0)\r\n            return compVal;\r\n         if ((compVal = CompareStrings(ItemReference, other.ItemReference)) != 0)\r\n            return compVal;\r\n         return CompareStrings(Description, other.Description);\r\n      }\r\n\r\n      /// <summary>\r\n      /// The classification reference location.\r\n      /// </summary>\r\n      public string Location { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The classification reference item reference.\r\n      /// </summary>\r\n      public string ItemReference { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The classification reference name.\r\n      /// </summary>\r\n      public string Name { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The classification reference description.\r\n      /// </summary>\r\n      public string Description { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The classification reference referenced source.\r\n      /// </summary>\r\n      public IFCAnyHandle ReferencedSource { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The default constructor.\r\n      /// </summary>\r\n      public ClassificationReferenceKey(string location, string itemReference, string name,\r\n         string description, IFCAnyHandle referencedSource)\r\n      {\r\n         Location = location;\r\n         ItemReference = itemReference;\r\n         Name = name;\r\n         Description = description;\r\n         ReferencedSource = referencedSource;\r\n      }\r\n   };\r\n\r\n   public class ClassificationCacheInfo\r\n   {\r\n      public ClassificationCacheInfo(string globalId, string name, \r\n         string description, HashSet<IFCAnyHandle> relatedObjects)\r\n      {\r\n         GlobalId = globalId;\r\n         Name = name;\r\n         Description = description;\r\n         RelatedObjects = relatedObjects;\r\n      }\r\n\r\n      public string GlobalId { get; set; } = null;\r\n\r\n      public string Name { get; set; } = null;\r\n\r\n      public string Description { get; set; } = null;\r\n\r\n      public HashSet<IFCAnyHandle> RelatedObjects { get; set; } = null;\r\n   }\r\n\r\n   /// <summary>\r\n   /// Used to keep a cache of the created IfcClassifications.\r\n   /// </summary>\r\n   public class ClassificationCache\r\n   {\r\n      public bool UniformatOverridden { get; private set; } = false;\r\n\r\n      /// <summary>\r\n      /// The map of classification names to the IfcClassification handles.\r\n      /// </summary>\r\n      public IDictionary<string, IFCAnyHandle> ClassificationHandles { get; } = \r\n         new SortedDictionary<string, IFCAnyHandle>();\r\n\r\n      /// <summary>\r\n      /// The map of classification references to the related objects.\r\n      /// </summary>\r\n      public IDictionary<IFCAnyHandle, ClassificationCacheInfo> ClassificationRelations { get; } =\r\n         new Dictionary<IFCAnyHandle, ClassificationCacheInfo>();\r\n\r\n      public IDictionary<ClassificationReferenceKey, IFCAnyHandle> ClassificationReferenceHandles { get; } =\r\n         new SortedDictionary<ClassificationReferenceKey, IFCAnyHandle>();\r\n\r\n      /// <summary>\r\n      /// The list of defined classifications, sorted by name.\r\n      /// </summary>\r\n      public IDictionary<string, IFCClassification> ClassificationsByName { get; } = \r\n         new Dictionary<string, IFCClassification>();\r\n\r\n      /// <summary>\r\n      /// The names of the shared parameters used to defined custom classifications.\r\n      /// </summary>\r\n      public IList<string> CustomClassificationCodeNames { get; } = new List<string>();\r\n\r\n      /// <summary>\r\n      /// The map of shared parameter field name to the corresponding classification name.\r\n      /// </summary>\r\n      public IDictionary<string, string> FieldNameToClassificationNames { get; } = \r\n         new Dictionary<string, string>();\r\n\r\n      public IFCAnyHandle FindOrCreateClassificationReference(IFCFile file, \r\n         ClassificationReferenceKey key)\r\n      {\r\n         if (!ClassificationReferenceHandles.TryGetValue(key, out IFCAnyHandle classificationReference))\r\n         {\r\n            classificationReference = IFCInstanceExporter.CreateClassificationReference(file,\r\n              key.Location, key.ItemReference, key.Name, key.Description, key.ReferencedSource);\r\n\r\n            ClassificationReferenceHandles[key] = classificationReference;\r\n         }\r\n\r\n         return classificationReference;\r\n      }\r\n\r\n      public IFCAnyHandle AddRelation(IFCFile file, ClassificationReferenceKey key,\r\n         string relGuid, string relationName, IFCAnyHandle relatedObject)\r\n      {\r\n         IFCAnyHandle classificationReference = FindOrCreateClassificationReference(file, key);\r\n         AddRelation(classificationReference, relGuid, key.Name, key.ItemReference,\r\n            new HashSet<IFCAnyHandle>() { relatedObject });\r\n         return classificationReference;\r\n      }\r\n\r\n      public void AddRelation(IFCAnyHandle classificationReference, string guid, \r\n         string keyName, string keyReference, ISet<IFCAnyHandle> relatedObject)\r\n      {\r\n         if (!ClassificationRelations.TryGetValue(classificationReference, out var relations))\r\n         {\r\n            bool hasKeyName = !string.IsNullOrWhiteSpace(keyName);\r\n            bool hasKeyReference = !string.IsNullOrWhiteSpace(keyReference);\r\n            string relName = hasKeyName ? keyName : keyReference;\r\n            string relDescription = (hasKeyName ? keyName : string.Empty) + \r\n               ((hasKeyName || hasKeyReference) ? \":\" : string.Empty) + \r\n               (hasKeyReference ? keyReference : string.Empty);\r\n            relations = new ClassificationCacheInfo(guid, relName, relDescription,\r\n               new HashSet<IFCAnyHandle>());\r\n            ClassificationRelations[classificationReference] = relations;\r\n         }\r\n         relations.RelatedObjects.UnionWith(relatedObject);\r\n      }\r\n\r\n      private bool m_BimStandardsCacheInitialized = false;\r\n\r\n      private string m_BimStandardsCache = null;\r\n\r\n      public string GetBIMStandardsURL(Element element)\r\n      {\r\n         if (!m_BimStandardsCacheInitialized)\r\n         {\r\n            m_BimStandardsCacheInitialized = true;\r\n\r\n            ProjectInfo projectInfo = element?.Document?.ProjectInformation;\r\n            if (projectInfo != null)\r\n            {\r\n               ParameterUtil.GetStringValueFromElement(projectInfo, \"BIM Standards URL\",\r\n                  out m_BimStandardsCache);\r\n            }\r\n         }\r\n\r\n         return m_BimStandardsCache;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a new ClassificationCache.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      public ClassificationCache(Document doc)\r\n      {\r\n         // The UI currently supports only one, but future UIs may support a list.\r\n         IList<IFCClassification> classifications;\r\n         if (IFCClassificationMgr.GetSavedClassifications(doc, null, out classifications))\r\n         {\r\n            foreach (IFCClassification classification in classifications)\r\n            {\r\n               bool classificationHasName = !string.IsNullOrWhiteSpace(classification.ClassificationName);\r\n               if (classificationHasName)\r\n                  ClassificationsByName[classification.ClassificationName] = classification;\r\n               if (!string.IsNullOrWhiteSpace(classification.ClassificationFieldName))\r\n               {\r\n                  string[] splitResult = classification.ClassificationFieldName.Split(new Char[] { ',', ';', '\\t', '\\n' }, StringSplitOptions.RemoveEmptyEntries);\r\n                  for (int ii = 0; ii < splitResult.Length; ii++)\r\n                  {\r\n                     // found [<Classification Field Names>]\r\n                     string classificationFieldName = splitResult[ii].Trim();\r\n                     if (string.Compare(\"Assembly Code\", classificationFieldName, true) == 0)\r\n                        UniformatOverridden = true;\r\n                     CustomClassificationCodeNames.Add(classificationFieldName);\r\n                     if (classificationHasName)\r\n                        FieldNameToClassificationNames[classificationFieldName] = classification.ClassificationName;\r\n                  }\r\n               }\r\n            }\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ClassificationLocationCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Export.Toolkit;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of the created Classification Locations.\r\n   /// </summary>\r\n   public class ClassificationLocationCache : Dictionary<string, string>\r\n   {\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ContainmentCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Export.Toolkit;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of the elements contained in another element.\r\n   /// For example, by default, IFCPROJECT would have one item, IFCSITE.\r\n   /// </summary>\r\n   public class ContainmentCache \r\n   {\r\n      public Dictionary<IFCAnyHandle, HashSet<IFCAnyHandle>> Cache { get; set; } = new();\r\n\r\n      Dictionary<IFCAnyHandle, string> ContainerGUIDs { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// Get the GUID for the IFCRELAGGREGATES.\r\n      /// </summary>\r\n      /// <param name=\"container\">The container.</param>\r\n      /// <returns>The GUID, if it exists.</returns>\r\n      public string GetGUIDForRelation(IFCAnyHandle container)\r\n      {\r\n         return ContainerGUIDs.TryGetValue(container, out string existingGUID) ? existingGUID : null;\r\n      }\r\n\r\n      private HashSet<IFCAnyHandle> GetContainedItemsForHandle(IFCAnyHandle container, string guid)\r\n      {\r\n         if (!Cache.TryGetValue(container, out HashSet<IFCAnyHandle> containedItems))\r\n         {\r\n            ContainerGUIDs[container] = guid ??\r\n               GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelContainedInSpatialStructure, container));\r\n            containedItems = new HashSet<IFCAnyHandle>();\r\n            Cache[container] = containedItems;\r\n         }\r\n         return containedItems;\r\n      }\r\n\r\n      /// <summary>\r\n      /// And an object to a container.\r\n      /// </summary>\r\n      /// <param name=\"container\">The container.</param>\r\n      /// <param name=\"objectHnd\">The object to add.</param>\r\n      public void AddRelation(IFCAnyHandle container, IFCAnyHandle objectHnd)\r\n      {\r\n         HashSet<IFCAnyHandle> containedItems = GetContainedItemsForHandle(container, null);\r\n         containedItems.Add(objectHnd);\r\n      }\r\n\r\n      /// <summary>\r\n      /// And a collection of objects to a container.\r\n      /// </summary>\r\n      /// <param name=\"container\">The container.</param>\r\n      /// <param name=\"objectHnds\">The objects to add.</param>\r\n      public void AddRelations(IFCAnyHandle container, string guid, ICollection<IFCAnyHandle> objectHnds)\r\n      {\r\n         HashSet<IFCAnyHandle> containedItems = GetContainedItemsForHandle(container, guid);\r\n         containedItems.UnionWith(objectHnds);\r\n      }\r\n\r\n      public void Clear()\r\n      {\r\n         Cache.Clear();\r\n         ContainerGUIDs.Clear();\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/CurveAnnotationCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of the curve style handles mapping to curve annotations.\r\n   /// </summary>\r\n   public class CurveAnnotationCache\r\n   {\r\n      /// <summary>\r\n      /// Used as a curveAnnotationKey for a dictionary.\r\n      /// </summary>\r\n      struct CurveAnnotationKey\r\n      {\r\n         /// <summary>\r\n         /// The sketch plane id.\r\n         /// </summary>\r\n         public ElementId SketchPlaneId;\r\n         /// <summary>\r\n         /// The curve style handle.\r\n         /// </summary>\r\n         public IFCAnyHandle CurveStyleHandle;\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// The dictionary mapping from CurveAnnotationKey to curve annotation handle. \r\n      /// </summary>\r\n      Dictionary<CurveAnnotationKey, IFCAnyHandle> AnnotationMap { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// Constructs a default CurveAnnotationCache object.\r\n      /// </summary>\r\n      public CurveAnnotationCache()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the curve annotation handle from the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"sketchPlaneId\">The sketch plane id.</param>\r\n      /// <param name=\"curveStyleHandle\">The curve style handle.</param>\r\n      /// <returns>The curve annotation handle.</returns>\r\n      public IFCAnyHandle GetAnnotation(ElementId sketchPlaneId, IFCAnyHandle curveStyleHandle)\r\n      {\r\n         IFCAnyHandle curveAnnotationHandle;\r\n         CurveAnnotationKey curveAnnotationKey = new CurveAnnotationKey();\r\n         curveAnnotationKey.SketchPlaneId = sketchPlaneId;\r\n         curveAnnotationKey.CurveStyleHandle = curveStyleHandle;\r\n         if (AnnotationMap.TryGetValue(curveAnnotationKey, out curveAnnotationHandle))\r\n         {\r\n            return curveAnnotationHandle;\r\n         }\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a curve annotation handle to the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"sketchPlaneId\">The sketch plane id.</param>\r\n      /// <param name=\"curveStyleHandle\">The curve style handle.</param>\r\n      /// <param name=\"curveAnnotation\">The curve annotation handle.</param>\r\n      public void AddAnnotation(ElementId sketchPlaneId, IFCAnyHandle curveStyleHandle, IFCAnyHandle curveAnnotation)\r\n      {\r\n         CurveAnnotationKey curveAnnotationKey = new CurveAnnotationKey();\r\n         curveAnnotationKey.SketchPlaneId = sketchPlaneId;\r\n         curveAnnotationKey.CurveStyleHandle = curveStyleHandle;\r\n\r\n         if (AnnotationMap.ContainsKey(curveAnnotationKey))\r\n         {\r\n            throw new Exception(\"CurveAnnotationCache already contains this curveAnnotationKey\");\r\n         }\r\n\r\n         AnnotationMap[curveAnnotationKey] = curveAnnotation;\r\n      }\r\n\r\n      public void Clear()\r\n      {\r\n         AnnotationMap.Clear();\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/DoorWindowDelayedOpeningCreator.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Stores information on which doors and windows need openings created after host is processed.\r\n   /// </summary>\r\n   public class DoorWindowDelayedOpeningCreator\r\n   {\r\n      /// <summary>\r\n      /// Indicates if this creator has valid geometries or not.\r\n      /// </summary>\r\n      public bool HasValidGeometry { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// Indicates if this creator is created from DoorWindowInfo or not.\r\n      /// </summary>\r\n      public bool CreatedFromDoorWindowInfo { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// Positive hinge side.\r\n      /// </summary>\r\n      public bool PosHingeSide { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// Opening or recess.\r\n      /// </summary>\r\n      public bool IsRecess { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// The host id.\r\n      /// </summary>\r\n      public ElementId HostId { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// The insert id.\r\n      /// </summary>\r\n      public ElementId InsertId { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// The door or window handle.\r\n      /// </summary>\r\n      public IFCAnyHandle DoorWindowHnd { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// The host handle.\r\n      /// </summary>\r\n      public IFCAnyHandle HostHnd { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// The level id.\r\n      /// </summary>\r\n      public ElementId LevelId { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// The extrusion creation data.\r\n      /// </summary>\r\n      public IList<IFCExtrusionData> ExtrusionData { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// The solids.\r\n      /// </summary>\r\n      public IList<Solid> Solids { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// The scaled host element width.\r\n      /// </summary>\r\n      public double ScaledHostWidth { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// Copy constructor.\r\n      /// </summary>\r\n      /// <param name=\"orig\">The DoorWindowDelayedOpeningCreator.</param>\r\n      public DoorWindowDelayedOpeningCreator(DoorWindowDelayedOpeningCreator orig)\r\n      {\r\n         HasValidGeometry = orig.HasValidGeometry;\r\n         CreatedFromDoorWindowInfo = orig.CreatedFromDoorWindowInfo;\r\n         PosHingeSide = orig.PosHingeSide;\r\n         IsRecess = orig.IsRecess;\r\n         HostId = orig.HostId;\r\n         InsertId = orig.InsertId;\r\n         DoorWindowHnd = orig.DoorWindowHnd;\r\n         HostHnd = orig.HostHnd;\r\n         LevelId = orig.LevelId;\r\n         ExtrusionData = orig.ExtrusionData;\r\n         Solids = orig.Solids;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected DoorWindowDelayedOpeningCreator()\r\n      {\r\n         HasValidGeometry = false;\r\n         CreatedFromDoorWindowInfo = false;\r\n         PosHingeSide = true;\r\n         IsRecess = false;\r\n         HostId = ElementId.InvalidElementId;\r\n         InsertId = ElementId.InvalidElementId;\r\n         DoorWindowHnd = null;\r\n         HostHnd = null;\r\n         LevelId = ElementId.InvalidElementId;\r\n         ExtrusionData = null;\r\n         Solids = null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Copies geometries from another creator.\r\n      /// </summary>\r\n      /// <param name=\"otherCreator\">The other creator.</param>\r\n      public void CopyGeometry(DoorWindowDelayedOpeningCreator otherCreator)\r\n      {\r\n         ExtrusionData = otherCreator.ExtrusionData;\r\n         Solids = otherCreator.Solids;\r\n         IsRecess = otherCreator.IsRecess;\r\n         ScaledHostWidth = otherCreator.ScaledHostWidth;\r\n\r\n         if ((ExtrusionData != null && ExtrusionData.Count > 0) || (Solids != null && Solids.Count > 0))\r\n            HasValidGeometry = true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds geometries from another creator.\r\n      /// </summary>\r\n      /// <param name=\"otherCreator\">The other creator.</param>\r\n      public void AddGeometry(DoorWindowDelayedOpeningCreator otherCreator)\r\n      {\r\n         // Nothing to add.\r\n         if (!otherCreator.HasValidGeometry)\r\n         {\r\n            return;\r\n         }\r\n\r\n         bool copyExtrusionData = otherCreator.ExtrusionData != null;\r\n         if (ExtrusionData == null && copyExtrusionData)\r\n         {\r\n            ExtrusionData = otherCreator.ExtrusionData;\r\n            copyExtrusionData = false;\r\n         }\r\n\r\n         bool copySolids = otherCreator.Solids != null;\r\n         if (Solids == null && copySolids)\r\n         {\r\n            Solids = otherCreator.Solids;\r\n            copySolids = false;\r\n         }\r\n\r\n         if (copyExtrusionData)\r\n         {\r\n            foreach (IFCExtrusionData extrusionData in otherCreator.ExtrusionData)\r\n            {\r\n               ExtrusionData.Add(extrusionData);\r\n            }\r\n         }\r\n\r\n         if (copySolids)\r\n         {\r\n            foreach (Solid solid in otherCreator.Solids)\r\n            {\r\n               Solids.Add(solid);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Excutes the creator.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"doc\">The document.</param>\r\n      public void Execute(ExporterIFC exporterIFC, Document doc)\r\n      {\r\n         IFCAnyHandle hostObjHnd = !IFCAnyHandleUtil.IsNullOrHasNoValue(HostHnd) ? HostHnd :\r\n             DoorWindowUtil.GetHndForHostAndLevel(exporterIFC, HostId, LevelId);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(hostObjHnd))\r\n            return;\r\n\r\n         IList<DoorWindowOpeningInfo> doorWindowOpeningInfoList = new List<DoorWindowOpeningInfo>();\r\n\r\n         Element doorElem = doc.GetElement(InsertId);\r\n         string levelHash = \"Level: \" + LevelId.ToString();\r\n         if (ExtrusionData != null)\r\n         {\r\n            foreach (IFCExtrusionData extrusionData in ExtrusionData)\r\n            {\r\n               int index = doorWindowOpeningInfoList.Count;\r\n               string openingGUID = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(doorElem, levelHash + \" IfcOpeningElement: \" + index.ToString()));\r\n               DoorWindowOpeningInfo openingInfo = DoorWindowUtil.CreateOpeningForDoorWindow(exporterIFC, doc, hostObjHnd,\r\n                   HostId, InsertId, openingGUID, extrusionData.GetLoops()[0], extrusionData.ExtrusionDirection,\r\n                   UnitUtil.UnscaleLength(extrusionData.ScaledExtrusionLength), PosHingeSide, IsRecess);\r\n               if (openingInfo != null && !IFCAnyHandleUtil.IsNullOrHasNoValue(openingInfo.OpeningHnd))\r\n                  doorWindowOpeningInfoList.Add(openingInfo);\r\n            }\r\n         }\r\n\r\n         if (Solids != null)\r\n         {\r\n            foreach (Solid solid in Solids)\r\n            {\r\n               int index = doorWindowOpeningInfoList.Count;\r\n               string openingGUID = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(doorElem, levelHash + \"IfcOpeningElement: \" + index.ToString()));\r\n               DoorWindowOpeningInfo openingInfo = DoorWindowUtil.CreateOpeningForDoorWindow(exporterIFC, doc, hostObjHnd,\r\n                   HostId, InsertId, openingGUID, solid, ScaledHostWidth, IsRecess);\r\n               if (openingInfo != null && !IFCAnyHandleUtil.IsNullOrHasNoValue(openingInfo.OpeningHnd))\r\n                  doorWindowOpeningInfoList.Add(openingInfo);\r\n            }\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(DoorWindowHnd))\r\n            return;\r\n\r\n         bool foundOpening = false;\r\n         bool foundHeight = false;\r\n         bool foundWidth = false;\r\n         bool? isDoorOrWindowOpening = null;\r\n\r\n         foreach (DoorWindowOpeningInfo openingInfo in doorWindowOpeningInfoList)\r\n         {\r\n            // If we've updated the door/window placement, and set its height and width, there's nothing more to do here.\r\n            if (foundOpening && foundHeight && foundWidth)\r\n               break;\r\n\r\n            // update original door or window to be relative to the first opening we find.\r\n            // We only allow one IfcRelFillsElement per door or window, so only do this for the first opening.\r\n            if (!foundOpening)\r\n            {\r\n               IFCFile file = exporterIFC.GetFile();\r\n               IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n               IFCAnyHandle openingHnd = openingInfo.OpeningHnd;\r\n\r\n               foundOpening = true;\r\n               string relGUID = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelFillsElement, openingHnd, DoorWindowHnd));\r\n               IFCInstanceExporter.CreateRelFillsElement(file, relGUID, ownerHistory, null, null, openingHnd, DoorWindowHnd);\r\n\r\n               IFCAnyHandle openingPlacement = IFCAnyHandleUtil.GetObjectPlacement(openingHnd);\r\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(openingPlacement))\r\n               {\r\n                  IFCAnyHandle origObjectPlacement = IFCAnyHandleUtil.GetObjectPlacement(DoorWindowHnd);\r\n                  Transform relTransform = ExporterUtil.GetRelativePlacementOffsetTransform(exporterIFC, origObjectPlacement, openingPlacement);\r\n\r\n                  IFCAnyHandle newLocalPlacement = ExporterUtil.CreateLocalPlacement(file, openingPlacement,\r\n                      relTransform.Origin, relTransform.BasisZ, relTransform.BasisX);\r\n\r\n                  IFCAnyHandleUtil.SetAttribute(DoorWindowHnd, \"ObjectPlacement\", newLocalPlacement);\r\n                  IFCAnyHandleUtil.Delete(origObjectPlacement);\r\n               }\r\n            }\r\n\r\n            // The first entry for a particular door may not have the height or width set, so keep looking until we find an entry that does.\r\n            if (!isDoorOrWindowOpening.HasValue)\r\n               isDoorOrWindowOpening = IFCAnyHandleUtil.IsTypeOf(DoorWindowHnd, IFCEntityType.IfcDoor) || IFCAnyHandleUtil.IsTypeOf(DoorWindowHnd, IFCEntityType.IfcWindow);\r\n\r\n            if (!(foundHeight && foundWidth) && isDoorOrWindowOpening.Value)\r\n            {\r\n               double openingHeight = openingInfo.OpeningHeight;\r\n               double openingWidth = openingInfo.OpeningWidth;\r\n\r\n               if (openingHeight > MathUtil.Eps())\r\n               {\r\n                  foundHeight = true;\r\n                  IFCAnyHandleUtil.SetAttribute(DoorWindowHnd, \"OverallHeight\", UnitUtil.ScaleLength(openingHeight));\r\n               }\r\n\r\n               if (openingWidth > MathUtil.Eps())\r\n               {\r\n                  foundWidth = true;\r\n                  IFCAnyHandleUtil.SetAttribute(DoorWindowHnd, \"OverallWidth\", UnitUtil.ScaleLength(openingWidth));\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a creator from DoorWindowInfo.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"doorWindowInfo\">The DoorWindowInfo.</param>\r\n      /// <param name=\"instanceHandle\">The instance handle.</param>\r\n      /// <param name=\"levelId\">The level id.</param>\r\n      /// <returns>The creator.</returns>\r\n      public static DoorWindowDelayedOpeningCreator Create(ExporterIFC exporterIFC, DoorWindowInfo doorWindowInfo, IFCAnyHandle instanceHandle, ElementId levelId)\r\n      {\r\n         if (exporterIFC == null || doorWindowInfo == null)\r\n            return null;\r\n\r\n         DoorWindowDelayedOpeningCreator doorWindowDelayedOpeningCreator = null;\r\n\r\n         if (doorWindowInfo.HasRealWallHost)\r\n         {\r\n            Document doc = doorWindowInfo.HostObject.Document;\r\n            Wall wall = doorWindowInfo.HostObject as Wall;\r\n            FamilyInstance famInst = doorWindowInfo.InsertInstance;\r\n            ElementId hostId = wall != null ? wall.Id : ElementId.InvalidElementId;\r\n            ElementId instId = famInst != null ? famInst.Id : ElementId.InvalidElementId;\r\n\r\n            doorWindowDelayedOpeningCreator = new DoorWindowDelayedOpeningCreator();\r\n            doorWindowDelayedOpeningCreator.HostId = hostId;\r\n            doorWindowDelayedOpeningCreator.InsertId = instId;\r\n            doorWindowDelayedOpeningCreator.PosHingeSide = doorWindowInfo.PosHingeSide;\r\n            doorWindowDelayedOpeningCreator.DoorWindowHnd = instanceHandle;\r\n            doorWindowDelayedOpeningCreator.LevelId = levelId;\r\n            doorWindowDelayedOpeningCreator.CreatedFromDoorWindowInfo = true;\r\n\r\n            WallType wallType = doc.GetElement(wall.GetTypeId()) as WallType;\r\n            double unScaledWidth = ((wallType != null) && (wallType.Kind != WallKind.Curtain)) ? wallType.Width : 0.0;\r\n            if (!MathUtil.IsAlmostZero(unScaledWidth))\r\n            {\r\n               IFCAnyHandle openingHnd = exporterIFC.GetDoorWindowOpeningHandle(instId);\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(openingHnd))\r\n               {\r\n                  XYZ cutDir = null;\r\n                  CurveLoop cutLoop = null;\r\n                  try\r\n                  {\r\n                     cutLoop = ExporterIFCUtils.GetInstanceCutoutFromWall(wall.Document, wall, famInst, out cutDir);\r\n                  }\r\n                  catch\r\n                  {\r\n                     cutLoop = null;\r\n                     // Couldn't create opening for door in wall - report as error in log when we create log file.\r\n                  }\r\n\r\n                  if (cutLoop != null)\r\n                  {\r\n                     if (doorWindowDelayedOpeningCreator.ExtrusionData == null)\r\n                        doorWindowDelayedOpeningCreator.ExtrusionData = new List<IFCExtrusionData>();\r\n\r\n                     IFCExtrusionData extrusionData = new IFCExtrusionData();\r\n                     extrusionData.ExtrusionDirection = cutDir;\r\n                     extrusionData.ScaledExtrusionLength = UnitUtil.ScaleLength(unScaledWidth);\r\n                     extrusionData.AddLoop(cutLoop);\r\n                     doorWindowDelayedOpeningCreator.ScaledHostWidth = UnitUtil.ScaleLength(unScaledWidth);\r\n                     doorWindowDelayedOpeningCreator.ExtrusionData.Add(extrusionData);\r\n                     doorWindowDelayedOpeningCreator.HasValidGeometry = true;\r\n                  }\r\n                  else\r\n                  {\r\n                     // Couldn't create opening for door in wall - report as error in log when we create log file.\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         return doorWindowDelayedOpeningCreator;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a creator from IFCOpeningData.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"openingData\">The IFCOpeningData.</param>\r\n      /// <param name=\"scaledHostWidth\">The scaled host width.</param>\r\n      /// <param name=\"hostId\">The host id.</param>\r\n      /// <param name=\"hostHnd\">The host handle.</param>\r\n      /// <param name=\"levelId\">The base level id.</param>\r\n      /// <returns>The creator.</returns>\r\n      public static DoorWindowDelayedOpeningCreator Create(ExporterIFC exporterIFC, IFCOpeningData openingData, double scaledHostWidth,\r\n          ElementId hostId, IFCAnyHandle hostHnd, ElementId levelId)\r\n      {\r\n         DoorWindowDelayedOpeningCreator creator = new DoorWindowDelayedOpeningCreator();\r\n         creator.InsertId = openingData.OpeningElementId;\r\n         creator.HostId = hostId;\r\n         creator.HostHnd = hostHnd;\r\n         creator.ExtrusionData = openingData.GetExtrusionData();\r\n\r\n         // We can't be guaranteed that the GetOpeningSolids data won't be stale by the time we are ready\r\n         // to use it.  As such, we will clone the geometry here.\r\n         IList<Solid> openingSolids = openingData.GetOpeningSolids();\r\n         IList<Solid> creatorSolids = new List<Solid>();\r\n         foreach (Solid openingSolid in openingSolids)\r\n         {\r\n            creatorSolids.Add(SolidUtils.Clone(openingSolid));\r\n         }\r\n\r\n         creator.Solids = creatorSolids;\r\n         creator.IsRecess = openingData.IsRecess;\r\n         creator.CreatedFromDoorWindowInfo = false;\r\n         creator.ScaledHostWidth = scaledHostWidth;\r\n         creator.LevelId = levelId;\r\n\r\n         if ((creator.ExtrusionData != null && creator.ExtrusionData.Count > 0) || (creator.Solids != null && creator.Solids.Count > 0))\r\n            creator.HasValidGeometry = true;\r\n         return creator;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/DoorWindowDelayedOpeningCreatorCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache to create door window openings.\r\n   /// </summary>\r\n   public class DoorWindowDelayedOpeningCreatorCache\r\n   {\r\n      // An opening associated with an insert may cut more than one host if the host has been split by level.  Ensure that we create all of the appropriate openings.\r\n      // The ElementId of the main dictionary key is the insert id; the ElementId of the internal dictionary key is the base level id.\r\n      // If we are not splitting by level, we ignore the level id.\r\n      // TODO: we should split the openings so that they are \"trimmed\" by the extents of the host element.\r\n      Dictionary<ElementId, Dictionary<ElementId, DoorWindowDelayedOpeningCreator>> DelayedOpeningCreators\r\n      { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// Adds a new DoorWindowDelayedOpeningCreator.\r\n      /// </summary>\r\n      /// <param name=\"creator\">The creator.</param>\r\n      public void Add(DoorWindowDelayedOpeningCreator creator, bool extend)\r\n      {\r\n         if (creator == null)\r\n            return;\r\n\r\n         Dictionary<ElementId, DoorWindowDelayedOpeningCreator> existingOpenings = null;\r\n         if (!DelayedOpeningCreators.TryGetValue(creator.InsertId, out existingOpenings))\r\n         {\r\n            existingOpenings = new Dictionary<ElementId, DoorWindowDelayedOpeningCreator>();\r\n            DelayedOpeningCreators[creator.InsertId] = existingOpenings;\r\n         }\r\n\r\n         ElementId levelIdToUse = ExporterCacheManager.ExportOptionsCache.WallAndColumnSplitting ? creator.LevelId : ElementId.InvalidElementId;\r\n\r\n         if (existingOpenings.TryGetValue(levelIdToUse, out DoorWindowDelayedOpeningCreator oldCreator))\r\n         {\r\n            // from DoorWindowInfo has higher priority\r\n            if (oldCreator.CreatedFromDoorWindowInfo)\r\n            {\r\n               CopyOrAddGeometry(oldCreator, creator, extend);\r\n            }\r\n            else if (creator.CreatedFromDoorWindowInfo)\r\n            {\r\n               CopyOrAddGeometry(creator, oldCreator, extend);\r\n               existingOpenings[levelIdToUse] = creator;\r\n            }\r\n         }\r\n         else\r\n            existingOpenings[levelIdToUse] = creator;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Executes all opening creators in this cache.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"doc\">The document.</param>\r\n      public void ExecuteCreators(ExporterIFC exporterIFC, Document doc)\r\n      {\r\n         foreach (Dictionary<ElementId, DoorWindowDelayedOpeningCreator> creators in DelayedOpeningCreators.Values)\r\n         {\r\n            foreach (DoorWindowDelayedOpeningCreator creator in creators.Values)\r\n            {\r\n               //Geometry can become invalid when ExtrusionData or Solids are null or count is 0\r\n               if (creator.HasValidGeometry)\r\n                  creator.Execute(exporterIFC, doc);\r\n            }\r\n         }\r\n      }\r\n\r\n      private void CopyOrAddGeometry(DoorWindowDelayedOpeningCreator oldCreator, DoorWindowDelayedOpeningCreator newCreator, bool extend)\r\n      {\r\n         if (!oldCreator.HasValidGeometry && newCreator.HasValidGeometry)\r\n         {\r\n            oldCreator.CopyGeometry(newCreator);\r\n         }\r\n         else if (oldCreator.HasValidGeometry && newCreator.HasValidGeometry && extend)\r\n         {\r\n            oldCreator.AddGeometry(newCreator);\r\n         }\r\n      }\r\n\r\n      public void Clear()\r\n      {\r\n         DelayedOpeningCreators.Clear();\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/DoorWindowInfo.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing Autodesk.Revit;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   public class DoorWindowInfo\r\n   {\r\n      const double ShortDist = 1.0 / (16.0 * 12.0);\r\n      const double tolForArcCenter = 1.0 / 2;\r\n\r\n      /// <summary>\r\n      /// The host object associated with the door or window.\r\n      /// </summary>\r\n      public HostObject HostObject { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// The door or window element.\r\n      /// </summary>\r\n      public FamilyInstance InsertInstance { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// True if the HostObject is a real Revit wall.\r\n      /// </summary>\r\n      public bool HasRealWallHost { get; set; }\r\n\r\n      /// <summary>\r\n      /// True if we are exporting a door.\r\n      /// </summary>\r\n      public bool ExportingDoor { get; set; }\r\n\r\n      /// <summary>\r\n      /// True if we are exporting a window.\r\n      /// </summary>\r\n      public bool ExportingWindow { get; set; }\r\n\r\n      /// <summary>\r\n      /// True if the door or window element is flipped in the X direction.\r\n      /// </summary>\r\n      public bool FlippedX { get; set; }\r\n\r\n      /// <summary>\r\n      /// True if the door or window element is flipped in the Y direction.\r\n      /// </summary>\r\n      public bool FlippedY { get; set; }\r\n\r\n      /// <summary>\r\n      /// True if the door or window element is flipped.\r\n      /// </summary>\r\n      public bool FlippedSymbol { get; set; }\r\n\r\n      /// <summary>\r\n      /// True if the door or window hinge is on the \"right-hand\" side of the door.\r\n      /// </summary>\r\n      public bool PosHingeSide { get; set; }\r\n\r\n      /// <summary>\r\n      /// The Window partitioning type enum\r\n      /// </summary>\r\n      public string WindowPartitioningTypeString { get; set; }\r\n\r\n      /// <summary>\r\n      /// Captures user defined partitioning type from parameter\r\n      /// </summary>\r\n      public string UserDefinedPartitioningType { get; set; }\r\n\r\n      /// <summary>\r\n      /// The door operation type enum.\r\n      /// </summary>\r\n      public string DoorOperationTypeString { get; set; }\r\n\r\n      /// <summary>\r\n      /// Captures user defined operation type from parameter\r\n      /// </summary>\r\n      public string UserDefinedOperationType { get; set; }\r\n\r\n      /// <summary>\r\n      /// PreDefinedType Enum\r\n      /// </summary>\r\n      public string PreDefinedType { get; set; }\r\n\r\n      public DoorWindowInfo()\r\n      {\r\n         HostObject = null;\r\n         InsertInstance = null;\r\n         HasRealWallHost = false;\r\n         PosHingeSide = true;\r\n         ExportingDoor = false;\r\n         ExportingWindow = false;\r\n         FlippedX = false;\r\n         FlippedY = false;\r\n         FlippedSymbol = false;\r\n         DoorOperationTypeString = \"NOTDEFINED\";\r\n         WindowPartitioningTypeString = \"NOTDEFINED\";\r\n         UserDefinedOperationType = null;\r\n         UserDefinedPartitioningType = null;\r\n      }\r\n\r\n      private KeyValuePair<double, double> GetAdjustedEndParameters(Arc arc, bool flipped, double offset)\r\n      {\r\n         double endParam0 = (flipped ? arc.GetEndParameter(1) : arc.GetEndParameter(0)) - offset;\r\n         double endParam1 = (flipped ? arc.GetEndParameter(0) : arc.GetEndParameter(1)) - offset;\r\n         double angle = endParam1 - endParam0;\r\n         endParam0 = MathUtil.PutInRange(endParam0, Math.PI, 2 * Math.PI);\r\n         endParam1 = endParam0 + angle;\r\n\r\n         return new KeyValuePair<double, double>(endParam0, endParam1);\r\n      }\r\n\r\n      private string ReverseDoorStyleOperation(string orig)\r\n      {\r\n         bool exportAsOlderthanIFC4x3 = ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4x3;\r\n         string doorOrPanel = exportAsOlderthanIFC4x3 ? \"DOOR\" : \"PANEL\";\r\n\r\n         if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(orig, \r\n            \"DoubleDoorSingleSwingOppositeLeft\", \"DoublePanelSingleSwingOppositeLeft\"))\r\n            return \"DOUBLE_\" + doorOrPanel + \"_SINGLE_SWING_OPPOSITE_RIGHT\";\r\n         \r\n         if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(orig, \r\n            \"DoubleDoorSingleSwingOppositeRight\", \"DoublePanelSingleSwingOppositeRight\"))\r\n            return \"DOUBLE_\" + doorOrPanel + \"_SINGLE_SWING_OPPOSITE_LEFT\";\r\n         \r\n         if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(orig, \"DoubleSwingLeft\"))\r\n            return \"DOUBLE_SWING_RIGHT\";\r\n         \r\n         if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(orig, \"DoubleSwingRight\"))\r\n            return \"DOUBLE_SWING_LEFT\";\r\n         \r\n         if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(orig, \"FoldingToLeft\"))\r\n            return \"FOLDING_TO_RIGHT\";\r\n         \r\n         if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(orig, \"FoldingToRight\"))\r\n            return \"FOLDING_TO_LEFT\";\r\n         \r\n         if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(orig, \"SingleSwingLeft\"))\r\n            return \"SINGLE_SWING_RIGHT\";\r\n         \r\n         if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(orig, \"SingleSwingRight\"))\r\n            return \"SINGLE_SWING_LEFT\";\r\n         \r\n         if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(orig, \"SlidingToLeft\"))\r\n            return \"SLIDING_TO_RIGHT\";\r\n         \r\n         if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(orig, \"SlidingToRight\"))\r\n            return \"SLIDING_TO_LEFT\";\r\n         \r\n         // New to IFC4.3.\r\n         if (!exportAsOlderthanIFC4x3)\r\n         {\r\n            if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(orig, \"LiftingVerticalLeft\"))\r\n               return \"LIFTING_VERTICAL_RIGHT\";\r\n\r\n            if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(orig, \"LiftingVerticalRight\"))\r\n               return \"LIFTING_VERTICAL_LEFT\";\r\n         }\r\n\r\n         return orig;\r\n      }\r\n\r\n      private string CalculateDoorOperationStyle(FamilyInstance currElem, Transform trf)\r\n      {\r\n         // TODO: See if we can support new IFC4.3 types.\r\n\r\n         int leftPosYArcCount = 0;\r\n         int leftNegYArcCount = 0;\r\n         int rightPosYArcCount = 0;\r\n         int rightNegYArcCount = 0;\r\n         int fullCircleCount = 0;\r\n         int leftHalfCircleCount = 0;\r\n         int rightHalfCircleCount = 0;\r\n         double allowance = 0.0001;\r\n\r\n         if (currElem == null)\r\n            return \"NOTDEFINED\";\r\n\r\n         FamilySymbol famSymbol = currElem.Symbol;\r\n         if (famSymbol == null)\r\n            return \"NOTDEFINED\";\r\n         Family fam = famSymbol.Family;\r\n         if (fam == null)\r\n            return \"NOTDEFINED\";\r\n\r\n         Transform doorWindowTrf = ExporterIFCUtils.GetTransformForDoorOrWindow(currElem, famSymbol, FlippedX, FlippedY);\r\n\r\n         IList<Curve> origArcs = GeometryUtil.Get2DArcOrLineFromSymbol(currElem, allCurveType: false, inclArc: true);\r\n         if ((origArcs?.Count ?? 0) == 0)\r\n            return \"NOTDEFINED\";\r\n\r\n         BoundingBoxXYZ doorBB = GetBoundingBoxFromSolids(currElem);\r\n\r\n         // Translate curtain door origin to have proper 2D arc position\r\n         Wall wall = HostObject as Wall;\r\n         if ((wall?.WallType.Kind ?? WallKind.Unknown) == WallKind.Curtain)\r\n         {\r\n            Transform offsetOrigTrf = Transform.CreateTranslation(-XYZ.BasisX * doorBB.Min.X);\r\n            doorWindowTrf = offsetOrigTrf.Multiply(doorWindowTrf);\r\n         }\r\n\r\n         XYZ bbMin = doorWindowTrf.OfPoint(doorBB.Min);\r\n         XYZ bbMax = doorWindowTrf.OfPoint(doorBB.Max);\r\n\r\n         // Reorganize the bbox min and max after transform\r\n         double xmin = bbMin.X, xmax = bbMax.X, ymin = bbMin.Y, ymax = bbMax.Y, zmin = bbMin.Z, zmax = bbMax.Z;\r\n         if (bbMin.X > bbMax.X)\r\n         {\r\n            xmin = bbMax.X;\r\n            xmax = bbMin.X;\r\n         }\r\n         if (bbMin.Y > bbMax.Y)\r\n         {\r\n            ymin = bbMax.Y;\r\n            ymax = bbMin.Y;\r\n         }\r\n         if (bbMin.Z > bbMax.Z)\r\n         {\r\n            zmin = bbMax.Z;\r\n            zmax = bbMin.Z;\r\n         }\r\n         bbMin = new(xmin - tolForArcCenter, ymin - tolForArcCenter, zmin - tolForArcCenter);\r\n         bbMax = new(xmax + tolForArcCenter, ymax + tolForArcCenter, zmax + tolForArcCenter);\r\n\r\n         List<XYZ> arcCenterLocations = new();\r\n         SortedSet<double> arcRadii = new();\r\n\r\n         double angleTolerance = currElem.Document.Application.AngleTolerance * 180.0 / Math.PI;\r\n\r\n         foreach (Arc arc in origArcs)\r\n         {\r\n            Arc trfArc = arc.CreateTransformed(doorWindowTrf) as Arc;\r\n\r\n            // Filter only Arcs that is on XY plane and at the Z=0 of the Door/Window transform\r\n            if (!(MathUtil.IsAlmostEqual(Math.Abs(trfArc.Normal.Z), 1.0) /*&& MathUtil.IsAlmostEqual(Math.Abs(trfArc.Center.Z), Math.Abs(doorWindowTrf.Origin.Z))*/))\r\n               continue;\r\n\r\n            // Filter only Arcs that have center within the bounding box\r\n            if (trfArc.Center.X > bbMax.X || trfArc.Center.X < bbMin.X || trfArc.Center.Y > bbMax.Y || trfArc.Center.Y < bbMin.Y)\r\n               continue;\r\n\r\n            if (!trfArc.IsBound)\r\n            {\r\n               fullCircleCount++;\r\n            }\r\n            else\r\n            {\r\n               XYZ v1 = CorrectNearlyZeroValueToZero((trfArc.GetEndPoint(0) - trfArc.Center).Normalize());\r\n               XYZ v2 = CorrectNearlyZeroValueToZero((trfArc.GetEndPoint(1) - trfArc.Center).Normalize());\r\n               double angleOffOfXYInRadians = MathUtil.SafeAcos(v1.DotProduct(v2));\r\n               double absAngleOffOfXYInDegress = Math.Abs(angleOffOfXYInRadians * 180.0 / Math.PI);\r\n               bool alignedToX = MathUtil.IsAlmostEqual(Math.Abs(v1.X), 1.0, allowance) || MathUtil.IsAlmostEqual(Math.Abs(v2.X), 1.0, allowance);\r\n\r\n               if (absAngleOffOfXYInDegress is >= 60.0 and <= 240.0 && Math.Sign(v1.Y) != Math.Sign(v2.Y) &&\r\n                  (!alignedToX || absAngleOffOfXYInDegress >= 90.0 + angleTolerance))\r\n               {\r\n                  // Consider the opening swing between -30 to +30 up to -120 to +120 degree,\r\n                  // where Y axes must be at the opposite sides.\r\n                  // If it is alignedToX, we don't consider this a \"half circle\" unless we are significantly\r\n                  // above 90 degrees.\r\n                  if (trfArc.Center.X >= -tolForArcCenter && trfArc.Center.X <= tolForArcCenter)\r\n                     leftHalfCircleCount++;\r\n                  else\r\n                     rightHalfCircleCount++;\r\n               }\r\n               else if (absAngleOffOfXYInDegress is >= 30.0 and <= 170.0 && alignedToX)\r\n               {\r\n                  // Consider the opening swing between 30 to 170 degree, beginning at X axis\r\n                  XYZ yDir = MathUtil.IsAlmostEqual(Math.Abs(v1.Y), Math.Abs(Math.Sin(angleOffOfXYInRadians)), 0.01) ? v1 : v2;\r\n\r\n                  // if the Normal is pointing to -Z, it is flipped. Flip the Y if it is\r\n                  if (MathUtil.IsAlmostEqual(trfArc.Normal.Z, -1.0))\r\n                     yDir = yDir.Negate();\r\n\r\n                  // Check the center location in the X-direction to determine LEFT/RIGHT\r\n                  if (Math.Abs(trfArc.Center.X) <= tolForArcCenter)\r\n                  {\r\n                     // on the LEFT\r\n                     if ((yDir.Y > 0.0 && trfArc.YDirection.Y > 0.0) || (yDir.Y < 0.0 && trfArc.YDirection.Y < 0.0))\r\n                        leftPosYArcCount++;\r\n                     else if ((yDir.Y > 0.0 && trfArc.YDirection.Y < 0.0) || (yDir.Y < 0.0 && trfArc.YDirection.Y > 0.0))\r\n                        leftNegYArcCount++;\r\n                     else\r\n                        continue;\r\n                  }\r\n                  else\r\n                  {\r\n                     // on the RIGHT\r\n                     if ((yDir.Y > 0.0 && trfArc.YDirection.Y > 0.0) || (yDir.Y < 0.0 && trfArc.YDirection.Y < 0.0))\r\n                        rightPosYArcCount++;\r\n                     else if ((yDir.Y > 0.0 && trfArc.YDirection.Y < 0.0) || (yDir.Y < 0.0 && trfArc.YDirection.Y > 0.0))\r\n                        rightNegYArcCount++;\r\n                     else\r\n                        continue;\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  continue;\r\n               }\r\n\r\n               // Collect all distinct Arc Center if it is counted as the door opening, to ensure that for cases that there are more than 2 leafs, it is not worngly labelled\r\n               bool foundExisting = false;\r\n               foreach (XYZ existingCenter in arcCenterLocations)\r\n               {\r\n                  if ((trfArc.Center.X > existingCenter.X - tolForArcCenter) && (trfArc.Center.X <= existingCenter.X + tolForArcCenter)\r\n                     && (trfArc.Center.Y > existingCenter.Y - tolForArcCenter) && (trfArc.Center.Y <= existingCenter.Y + tolForArcCenter))\r\n                  {\r\n                     foundExisting = true;\r\n                     break;\r\n                  }\r\n               }\r\n               if (!foundExisting)\r\n               {\r\n                  arcCenterLocations.Add(trfArc.Center);\r\n                  arcRadii.Add(trfArc.Radius);\r\n               }\r\n            }\r\n         }\r\n\r\n         // When only full circle(s) exists\r\n         if (fullCircleCount > 0\r\n               && rightHalfCircleCount == 0 && leftHalfCircleCount == 0 && leftPosYArcCount == 0 && leftNegYArcCount == 0 && rightPosYArcCount == 0 && rightNegYArcCount == 0)\r\n            return \"REVOLVING\";\r\n\r\n         // There are more than 2 arc centers, no IFC Door operation type fits this, return NOTDEFINED\r\n         if (arcCenterLocations.Count > 2)\r\n            return \"NOTDEFINED\";\r\n\r\n         // When half circle arc(s) exists\r\n         if (leftHalfCircleCount > 0 && fullCircleCount == 0)\r\n         {\r\n            if (rightHalfCircleCount == 0 && leftPosYArcCount == 0 && leftNegYArcCount == 0 && rightPosYArcCount == 0 && rightNegYArcCount == 0)\r\n               return \"DOUBLE_SWING_LEFT\";\r\n\r\n            if ((rightHalfCircleCount > 0 || (rightPosYArcCount > 0 && rightNegYArcCount > 0)) && leftPosYArcCount == 0 && leftNegYArcCount == 0)\r\n               return \"DOUBLE_DOOR_DOUBLE_SWING\";\r\n         }\r\n\r\n         if (rightHalfCircleCount > 0 && fullCircleCount == 0)\r\n         {\r\n            if (leftHalfCircleCount == 0 && leftPosYArcCount == 0 && leftNegYArcCount == 0 && rightPosYArcCount == 0 && rightNegYArcCount == 0)\r\n               return \"DOUBLE_SWING_RIGHT\";\r\n\r\n            if ((leftHalfCircleCount > 0 || (leftPosYArcCount > 0 && leftNegYArcCount > 0)) && rightPosYArcCount == 0 && rightNegYArcCount == 0)\r\n               return \"DOUBLE_DOOR_DOUBLE_SWING\";\r\n         }\r\n\r\n         // When only 90-degree arc(s) exists\r\n         if (leftPosYArcCount > 0\r\n               && fullCircleCount == 0 && rightHalfCircleCount == 0 && leftHalfCircleCount == 0 && leftNegYArcCount == 0 && rightPosYArcCount == 0 && rightNegYArcCount == 0)\r\n         {\r\n            // if the arc is less than 50%of the boundingbox, treat this to be a door with partially fixed panel\r\n            if (arcRadii.Max < (bbMax.X - bbMin.X) * 0.5)\r\n            {\r\n               return ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 ? \"NOTDEFINED\" : \"SWING_FIXED_LEFT\";\r\n            }\r\n            return \"SINGLE_SWING_LEFT\";\r\n         }\r\n\r\n         if (rightPosYArcCount > 0\r\n               && fullCircleCount == 0 && rightHalfCircleCount == 0 && leftHalfCircleCount == 0 && leftNegYArcCount == 0 && leftPosYArcCount == 0 && rightNegYArcCount == 0)\r\n         {\r\n            // if the arc is less than 50%of the boundingbox, treat this to be a door with partially fixed panel\r\n            if (arcRadii.Max < (bbMax.X - bbMin.X) * 0.5)\r\n            {\r\n               return ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 ? \"NOTDEFINED\" : \"SWING_FIXED_RIGHT\";\r\n            }\r\n            return \"SINGLE_SWING_RIGHT\";\r\n         }\r\n\r\n         if (leftPosYArcCount > 0 && leftNegYArcCount > 0\r\n               && fullCircleCount == 0 && rightHalfCircleCount == 0 && leftHalfCircleCount == 0 && rightPosYArcCount == 0 && rightNegYArcCount == 0)\r\n            return \"DOUBLE_SWING_LEFT\";\r\n\r\n         if (rightPosYArcCount > 0 && rightNegYArcCount > 0\r\n               && fullCircleCount == 0 && rightHalfCircleCount == 0 && leftHalfCircleCount == 0 && leftNegYArcCount == 0 && leftPosYArcCount == 0)\r\n            return \"DOUBLE_SWING_RIGHT\";\r\n\r\n         if (leftPosYArcCount > 0 && rightPosYArcCount > 0\r\n               && fullCircleCount == 0 && rightHalfCircleCount == 0 && leftHalfCircleCount == 0 && leftNegYArcCount == 0 && rightNegYArcCount == 0)\r\n            return \"DOUBLE_DOOR_SINGLE_SWING\";\r\n\r\n         if (leftPosYArcCount > 0 && rightPosYArcCount > 0 && leftNegYArcCount > 0 && rightNegYArcCount > 0\r\n               && fullCircleCount == 0 && rightHalfCircleCount == 0 && leftHalfCircleCount == 0)\r\n            return \"DOUBLE_DOOR_DOUBLE_SWING\";\r\n\r\n         if (leftPosYArcCount > 0 && rightNegYArcCount > 0\r\n               && fullCircleCount == 0 && rightHalfCircleCount == 0 && leftHalfCircleCount == 0 && leftNegYArcCount == 0 && rightPosYArcCount == 0)\r\n            return \"DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT\";\r\n\r\n         if (leftNegYArcCount > 0 && rightPosYArcCount > 0\r\n               && fullCircleCount == 0 && rightHalfCircleCount == 0 && leftHalfCircleCount == 0 && leftPosYArcCount == 0 && rightNegYArcCount == 0)\r\n            return \"DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT\";\r\n\r\n         return \"NOTDEFINED\";\r\n      }\r\n\r\n      private void Initialize(bool isDoor, bool isWindow, FamilyInstance famInst, HostObject hostObject, IFCExportInfoPair exportType)\r\n      {\r\n         HostObject = hostObject;\r\n         InsertInstance = famInst;\r\n\r\n         ExportingDoor = isDoor;\r\n         if (isDoor)\r\n         {\r\n            PreDefinedType = exportType.GetPredefinedTypeOrDefault(\"DOOR\");\r\n         }\r\n\r\n         ExportingWindow = isWindow;\r\n         if (isWindow)\r\n         {\r\n            PreDefinedType = exportType.GetPredefinedTypeOrDefault(\"WINDOW\");\r\n         }\r\n\r\n         FlippedSymbol = false;\r\n\r\n         DoorOperationTypeString = \"NOTDEFINED\";\r\n         WindowPartitioningTypeString = \"NOTDEFINED\";\r\n\r\n         FlippedX = (famInst == null) ? false : famInst.HandFlipped;\r\n         FlippedY = (famInst == null) ? false : famInst.FacingFlipped;\r\n\r\n         Wall wall = (hostObject == null) ? null : hostObject as Wall;\r\n         Curve centerCurve = WallExporter.GetWallAxis(wall);\r\n         HasRealWallHost = ((wall != null) && (centerCurve != null) && ((centerCurve is Line) || (centerCurve is Arc)));\r\n      }\r\n\r\n      private void CalculateDoorWindowInformation(ExporterIFC exporterIFC, FamilyInstance famInst,\r\n          ElementId overrideLevelId, Transform trf)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         if (ExportingDoor)\r\n         {\r\n            string doorOperationType = null;\r\n\r\n            Element doorType = famInst.Document.GetElement(famInst.GetTypeId());\r\n            if (doorType != null)\r\n            {\r\n               // Look at the \"Operation\" override first, then the built-in parameter.\r\n               ParameterUtil.GetStringValueFromElementOrSymbol(doorType, \"Operation\", out doorOperationType);\r\n               if (string.IsNullOrWhiteSpace(doorOperationType))\r\n                  ParameterUtil.GetStringValueFromElement(doorType, BuiltInParameter.DOOR_OPERATION_TYPE, out doorOperationType);\r\n            }\r\n\r\n            DoorOperationTypeString = \"NOTDEFINED\";\r\n            if (!string.IsNullOrWhiteSpace(doorOperationType))\r\n            {\r\n               Type enumType = null;\r\n               if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n                  enumType = typeof(Toolkit.IFC4.IFCDoorTypeOperation);\r\n               else\r\n                  enumType = typeof(Toolkit.IFCDoorStyleOperation);\r\n\r\n               foreach (Enum ifcDoorStyleOperation in Enum.GetValues(enumType))\r\n               {\r\n                  string enumAsString = ifcDoorStyleOperation.ToString();\r\n                  if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(enumAsString, doorOperationType))\r\n                  {\r\n                     DoorOperationTypeString = enumAsString;\r\n                     break;\r\n                  }\r\n               }\r\n            }\r\n\r\n            if (DoorOperationTypeString == \"NOTDEFINED\")\r\n            {\r\n               // We are going to try to guess the hinge placement.\r\n               DoorOperationTypeString = CalculateDoorOperationStyle(famInst, trf);\r\n            }\r\n            else\r\n            {\r\n            if (FlippedX ^ FlippedY)\r\n               DoorOperationTypeString = ReverseDoorStyleOperation(DoorOperationTypeString);\r\n            }\r\n\r\n            if (String.Compare(DoorOperationTypeString, \"USERDEFINED\", true) == 0)\r\n            {\r\n               string userDefinedOperationType;\r\n               ParameterUtil.GetStringValueFromElementOrSymbol(doorType, \"UserDefinedOperationType\", out userDefinedOperationType);\r\n               if (!string.IsNullOrEmpty(userDefinedOperationType))\r\n                  UserDefinedOperationType = userDefinedOperationType;\r\n               else\r\n                  DoorOperationTypeString = \"NOTDEFINED\";         //re-set to NotDefined if operation type is set to UserDefined but the userDefinedOperationType parameter is empty!\r\n            }\r\n         }\r\n\r\n         if (HasRealWallHost)\r\n         {\r\n            // do hingeside calculation\r\n            Wall wall = HostObject as Wall;\r\n            PosHingeSide = true;\r\n\r\n            BoundingBoxXYZ famBBox = null;\r\n            Options options = GeometryUtil.GetIFCExportGeometryOptions();\r\n            GeometryElement geomElement = famInst.GetOriginalGeometry(options);\r\n            if (geomElement != null)\r\n               famBBox = geomElement.GetBoundingBox();\r\n\r\n            if (famBBox != null)\r\n            {\r\n               XYZ bboxCtr = trf.OfPoint((famBBox.Min + famBBox.Max) / 2.0);\r\n\r\n               Curve curve = WallExporter.GetWallAxis(wall);\r\n\r\n               XYZ wallZDir = WallExporter.GetWallExtrusionDirection(wall);\r\n               if (wallZDir == null)\r\n                  wallZDir = XYZ.BasisZ; // Right thing here?\r\n\r\n               // famInst.HostParameter will fail if FamilyPlacementType is WorkPlaneBased, regardless of whether or not the reported host is a Wall.\r\n               // In this case, just use the start parameter of the curve.\r\n               bool hasHostParameter = famInst.Symbol.Family.FamilyPlacementType != FamilyPlacementType.WorkPlaneBased;\r\n               double param = hasHostParameter ? famInst.HostParameter : curve.GetEndParameter(0);\r\n\r\n               Transform wallTrf = curve.ComputeDerivatives(param, false);\r\n               XYZ wallOrig = wallTrf.Origin;\r\n               XYZ wallXDir = wallTrf.BasisX;\r\n               XYZ wallYDir = wallZDir.CrossProduct(wallXDir);\r\n\r\n               double eps = MathUtil.Eps();\r\n\r\n               bboxCtr -= wallOrig;\r\n               PosHingeSide = (bboxCtr.DotProduct(wallYDir) > -eps);\r\n\r\n               XYZ famInstYDir = trf.BasisY;\r\n               FlippedSymbol = (PosHingeSide != (wallYDir.DotProduct(famInstYDir) > -eps));\r\n            }\r\n         }\r\n      }\r\n\r\n      public static DoorWindowInfo CreateDoor(ExporterIFC exporterIFC, FamilyInstance famInst, HostObject hostObj,\r\n          ElementId overrideLevelId, Transform trf, IFCExportInfoPair exportType)\r\n      {\r\n         DoorWindowInfo doorWindowInfo = new DoorWindowInfo();\r\n         doorWindowInfo.Initialize(true, false, famInst, hostObj, exportType);\r\n         doorWindowInfo.CalculateDoorWindowInformation(exporterIFC, famInst, overrideLevelId, trf);\r\n\r\n         return doorWindowInfo;\r\n      }\r\n\r\n      public static DoorWindowInfo CreateWindow(ExporterIFC exporterIFC, FamilyInstance famInst, HostObject hostObj,\r\n          ElementId overrideLevelId, Transform trf, IFCExportInfoPair exportType)\r\n      {\r\n         DoorWindowInfo doorWindowInfo = new DoorWindowInfo();\r\n         doorWindowInfo.Initialize(false, true, famInst, hostObj, exportType);\r\n         doorWindowInfo.CalculateDoorWindowInformation(exporterIFC, famInst, overrideLevelId, trf);\r\n\r\n         return doorWindowInfo;\r\n      }\r\n\r\n      XYZ CorrectNearlyZeroValueToZero(XYZ input)\r\n      {\r\n         double xVal = 0.0;\r\n         double yVal = 0.0;\r\n         double zVal = 0.0;\r\n\r\n         if (!MathUtil.IsAlmostZero(input.X))\r\n            xVal = input.X;\r\n\r\n         if (!MathUtil.IsAlmostZero(input.Y))\r\n            yVal = input.Y;\r\n\r\n         if (!MathUtil.IsAlmostZero(input.Z))\r\n            zVal = input.Z;\r\n\r\n         return new XYZ(xVal, yVal, zVal);\r\n      }\r\n\r\n      BoundingBoxXYZ GetBoundingBoxFromSolids(FamilyInstance element)\r\n      {\r\n         BoundingBoxXYZ bbox = new BoundingBoxXYZ();\r\n\r\n         double xmin = double.MaxValue;\r\n         double ymin = double.MaxValue;\r\n         double zmin = double.MaxValue;\r\n         double xmax = double.MinValue;\r\n         double ymax = double.MinValue;\r\n         double zmax = double.MinValue;\r\n\r\n         IList<Solid> arcList = new List<Solid>();\r\n         GeometryElement geoms = element.Symbol.get_Geometry(GeometryUtil.GetIFCExportGeometryOptions());\r\n         foreach (GeometryObject geomObj in geoms)\r\n         {\r\n            if (geomObj is Solid)\r\n            {\r\n               Solid geomSolid = geomObj as Solid;\r\n               if (geomSolid.Volume == 0.0)\r\n                  continue;\r\n\r\n               BoundingBoxXYZ solidBB = geomSolid.GetBoundingBox();\r\n               if (solidBB.Min.X < xmin)\r\n                  xmin = solidBB.Min.X;\r\n               if (solidBB.Max.X > xmax)\r\n                  xmax = solidBB.Max.X;\r\n               if (solidBB.Min.Y < ymin)\r\n                  ymin = solidBB.Min.Y;\r\n               if (solidBB.Max.Y > ymax)\r\n                  ymax = solidBB.Max.Y;\r\n               if (solidBB.Min.Z < zmin)\r\n                  zmin = solidBB.Min.Z;\r\n               if (solidBB.Max.Z > zmax)\r\n                  zmax = solidBB.Max.Z;\r\n            }\r\n         }\r\n\r\n         bbox.Min = new XYZ(xmin, ymin, zmin);\r\n         bbox.Max = new XYZ(xmax, ymax, zmax);\r\n         return bbox;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/DoorWindowOpeningInfo.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing Autodesk.Revit;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Toolkit;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Contains return value for CreateOpeningForDoorWindow.\r\n   /// </summary>\r\n   public class DoorWindowOpeningInfo\r\n   {\r\n      IFCAnyHandle m_OpeningHnd = null;\r\n\r\n      double m_OpeningHeight = -1.0;\r\n\r\n      double m_OpeningWidth = -1.0;\r\n\r\n      private DoorWindowOpeningInfo() { }\r\n\r\n      /// <summary>\r\n      /// The public Create function.\r\n      /// </summary>\r\n      /// <param name=\"hnd\">The opening handle.</param>\r\n      /// <param name=\"placement\">The opening local placement.</param>\r\n      /// <param name=\"height\">The opening height.</param>\r\n      /// <param name=\"width\">The opening width.</param>\r\n      /// <returns>The DoorWindowOpeningInfo class.</returns>\r\n      static public DoorWindowOpeningInfo Create(IFCAnyHandle hnd, double height, double width)\r\n      {\r\n         DoorWindowOpeningInfo doorWindowOpeningInfo = new DoorWindowOpeningInfo();\r\n         doorWindowOpeningInfo.m_OpeningHnd = hnd;\r\n         doorWindowOpeningInfo.m_OpeningHeight = height;\r\n         doorWindowOpeningInfo.m_OpeningWidth = width;\r\n         return doorWindowOpeningInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Access the opening handle.\r\n      /// </summary>\r\n      public IFCAnyHandle OpeningHnd { get { return m_OpeningHnd; } }\r\n\r\n      /// <summary>\r\n      /// Access the opening height.\r\n      /// </summary>\r\n      public double OpeningHeight { get { return m_OpeningHeight; } }\r\n\r\n      /// <summary>\r\n      /// Access the opening width.\r\n      /// </summary>\r\n      public double OpeningWidth { get { return m_OpeningWidth; } }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/DoorWindowUtil.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing Autodesk.Revit;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   using Revit.IFC.Common.Utility;\r\n   using Revit.IFC.Export.Exporter.PropertySet;\r\n\r\n   /// <summary>\r\n   /// Provides static methods for door and window related manipulations.\r\n   /// </summary>\r\n   class DoorWindowUtil\r\n   {\r\n      /// <summary>\r\n      /// Gets the panel operation from door style operation.\r\n      /// </summary>\r\n      /// <param name=\"ifcDoorStyleOperationType\">The IFCDoorStyleOperation.</param>\r\n      /// <returns>The string represents the door panel operation.</returns>\r\n      private static string GetPanelOperationFromDoorStyleOperation(string ifcDoorStyleOperationType)\r\n      {\r\n         string baseValue = \"NOTDEFINED\";\r\n         if (string.IsNullOrWhiteSpace(ifcDoorStyleOperationType))\r\n            return baseValue;\r\n\r\n         string allCapsDoorStyleOperationType = \r\n            NamingUtil.RemoveSpacesAndUnderscores(ifcDoorStyleOperationType).ToUpper();\r\n         if (allCapsDoorStyleOperationType.Contains(\"SINGLESWING\"))\r\n            return \"SWINGING\";\r\n\r\n         if (allCapsDoorStyleOperationType.Contains(\"DOUBLESWING\"))\r\n            return \"DOUBLE_ACTING\";\r\n\r\n         if (allCapsDoorStyleOperationType.Contains(\"SLIDING\"))\r\n            return \"SLIDING\";\r\n\r\n         if (allCapsDoorStyleOperationType.Contains(\"FOLDING\"))\r\n            return \"FOLDING\";\r\n\r\n         if (allCapsDoorStyleOperationType.Contains(\"REVOLVING\"))\r\n            return \"REVOLVING\";\r\n\r\n         if (allCapsDoorStyleOperationType.Contains(\"ROLLINGUP\"))\r\n            return \"ROLLINGUP\";\r\n\r\n         if (allCapsDoorStyleOperationType.Contains(\"USERDEFINED\"))\r\n            return \"USERDEFINED\";\r\n\r\n         if (allCapsDoorStyleOperationType.Contains(\"FIXED\"))\r\n            return \"FIXEDPANEL\";\r\n\r\n         return baseValue;\r\n      }\r\n\r\n      private static double? GetValueFromIndexedParameter(Element element, string baseParameterName, int index)\r\n      {\r\n         string parameterName = baseParameterName + index.ToString();\r\n         double value = 0.0;\r\n         if (ParameterUtil.GetPositiveDoubleValueFromElementOrSymbol(element, parameterName, out value, null) != null)\r\n            return value;\r\n\r\n         // If the index is 1, we will try again with baseParameterName.\r\n         if (index == 1 && ParameterUtil.GetPositiveDoubleValueFromElementOrSymbol(element, baseParameterName, out value, null) != null)\r\n            return value;\r\n\r\n         return null;\r\n      }\r\n\r\n      private class DoorPanelInformation\r\n      {\r\n         public double? Depth { get; private set; } = null;\r\n         public double? Width { get; private set; } = null;\r\n         public string Operation { get; private set; } = null;\r\n         public string Position { get; private set; } = null;\r\n\r\n         public DoorPanelInformation(double? depth, double? width, string operation, string position) \r\n         {\r\n            Depth = depth;\r\n            Width = width;\r\n            Operation = operation;\r\n            Position = position;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates door panel properties.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"doorWindowInfo\">The DoorWindowInfo object.</param>\r\n      /// <param name=\"familyInstance\">The family instance of a door.</param>\r\n      /// <returns>The list of handles created.</returns>\r\n      public static IList<IFCAnyHandle> CreateDoorPanelProperties(ExporterIFC exporterIFC,\r\n         DoorWindowInfo doorWindowInfo, Element familyInstance)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n         IList<IFCAnyHandle> doorPanels = new List<IFCAnyHandle>();\r\n\r\n         IList<DoorPanelInformation> doorPanelInfoList = new List<DoorPanelInformation>();\r\n\r\n         int panelNumber = 1;\r\n         const int maxPanels = 64;  // arbitrary large number to prevent infinite loops.\r\n         \r\n         for (; panelNumber < maxPanels; panelNumber++)\r\n         {\r\n            // We will always create one default panel, but after that, we stop looking.\r\n            double? panelDepth = GetValueFromIndexedParameter(familyInstance, \"PanelDepth\", panelNumber);\r\n            if (panelDepth == null && panelNumber > 1)\r\n               break;\r\n\r\n            double? panelWidth = (panelDepth != null) ? \r\n               GetValueFromIndexedParameter(familyInstance, \"PanelWidth\", panelNumber) : null;\r\n            if (panelWidth == null)\r\n            {\r\n               if (panelNumber > 1)\r\n                  break;\r\n               panelDepth = null;\r\n            }\r\n\r\n            bool breakAfterCreation = (panelDepth == null || panelWidth == null);\r\n            if (!breakAfterCreation)\r\n            {\r\n               panelDepth = UnitUtil.ScaleLength(panelDepth.Value);\r\n               panelWidth = (panelWidth.Value < 0.0) ? 0.0 : ((panelWidth.Value > 1.0) ? 1.0 : panelWidth);\r\n            }\r\n\r\n            // We will always have at least one panel definition as long as the panelOperation is not\r\n            // NotDefined.\r\n            string panelOperaton = GetPanelOperationFromDoorStyleOperation(doorWindowInfo?.DoorOperationTypeString);\r\n\r\n            bool flippedX = doorWindowInfo?.FlippedX ?? false;\r\n            bool flippedY = doorWindowInfo?.FlippedY ?? false;\r\n\r\n            // If the panel operation is defined we'll allow no panel position for the 1st panel.\r\n            bool flip = flippedX ^ flippedY;\r\n            string panelPosition = GetIFCDoorPanelPosition(familyInstance, panelNumber, flip);\r\n\r\n            doorPanelInfoList.Add(new DoorPanelInformation(panelDepth, panelWidth, panelOperaton, panelPosition));\r\n\r\n            if (breakAfterCreation)\r\n               break;\r\n         }\r\n\r\n         string baseDoorPanelName = NamingUtil.GetIFCName(familyInstance);\r\n         panelNumber = 1;\r\n         foreach (DoorPanelInformation doorPanelInfo in doorPanelInfoList)\r\n         {\r\n            string doorPanelName = baseDoorPanelName + \":\" + panelNumber.ToString();\r\n            string doorPanelGUID = GUIDUtil.CreateSubElementGUID(familyInstance, (int)IFCDoorSubElements.DoorPanelStart + panelNumber-1);\r\n            IFCAnyHandle doorPanel = IFCInstanceExporter.CreateDoorPanelProperties(file, doorPanelGUID, ownerHistory,\r\n               doorPanelName, null, doorPanelInfo.Depth, doorPanelInfo.Operation,\r\n               doorPanelInfo.Width, doorPanelInfo.Position, null);\r\n            doorPanels.Add(doorPanel);\r\n            panelNumber++;\r\n         }\r\n\r\n         return doorPanels;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates door lining properties.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"familyInstance\">\r\n      /// The family instance of a door.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The handle created.\r\n      /// </returns>\r\n      public static IFCAnyHandle CreateDoorLiningProperties(ExporterIFC exporterIFC, Element familyInstance)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n         double? liningDepthOpt = null;\r\n         double? liningThicknessOpt = null;\r\n         double? thresholdDepthOpt = null;\r\n         double? thresholdThicknessOpt = null;\r\n         double? transomThicknessOpt = null;\r\n         double? transomOffsetOpt = null;\r\n         double? liningOffsetOpt = null;\r\n         double? thresholdOffsetOpt = null;\r\n         double? casingThicknessOpt = null;\r\n         double? casingDepthOpt = null;\r\n\r\n         double value1, value2;\r\n\r\n         // both of these must be defined, or not defined - if only one is defined, we ignore the values.\r\n         if ((ParameterUtil.GetPositiveDoubleValueFromElementOrSymbol(familyInstance, \"IfcDoorLiningProperties.LiningDepth\", out value1, \"LiningDepth\") != null) &&\r\n             (ParameterUtil.GetPositiveDoubleValueFromElementOrSymbol(familyInstance, \"IfcDoorLiningProperties.LiningThickness\", out value2, \"LiningThickness\") != null))\r\n         {\r\n            liningDepthOpt = UnitUtil.ScaleLength(value1);\r\n            liningThicknessOpt = UnitUtil.ScaleLength(value2);\r\n         }\r\n\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"IfcDoorLiningProperties.LiningOffset\", out value1, \"LiningOffset\") != null)\r\n            liningOffsetOpt = UnitUtil.ScaleLength(value1);\r\n\r\n         // both of these must be defined, or not defined - if only one is defined, we ignore the values.\r\n         if ((ParameterUtil.GetPositiveDoubleValueFromElementOrSymbol(familyInstance, \"IfcDoorLiningProperties.ThresholdDepth\", out value1, \"ThresholdDepth\") != null) &&\r\n             (ParameterUtil.GetPositiveDoubleValueFromElementOrSymbol(familyInstance, \"IfcDoorLiningProperties.ThresholdThickness\", out value2, \"ThresholdThickness\") != null))\r\n         {\r\n            thresholdDepthOpt = UnitUtil.ScaleLength(value1);\r\n            thresholdThicknessOpt = UnitUtil.ScaleLength(value2);\r\n         }\r\n\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"IfcDoorLiningProperties.ThresholdOffset\", out value1, \"ThresholdOffset\") != null)\r\n            liningOffsetOpt = UnitUtil.ScaleLength(value1);\r\n\r\n         // both of these must be defined, or not defined - if only one is defined, we ignore the values.\r\n         if ((ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"IfcDoorLiningProperties.TransomOffset\", out value1, \"TransomOffset\") != null) &&\r\n             (ParameterUtil.GetPositiveDoubleValueFromElementOrSymbol(familyInstance, \"IfcDoorLiningProperties.TransomThickness\", out value2, \"TransomThickness\") != null))\r\n         {\r\n            transomOffsetOpt = UnitUtil.ScaleLength(value1);\r\n            transomThicknessOpt = UnitUtil.ScaleLength(value2);\r\n         }\r\n\r\n         // both of these must be defined, or not defined - if only one is defined, we ignore the values.\r\n         if ((ParameterUtil.GetPositiveDoubleValueFromElementOrSymbol(familyInstance, \"IfcDoorLiningProperties.CasingDepth\", out value1, \"CasingDepth\") != null) &&\r\n             (ParameterUtil.GetPositiveDoubleValueFromElementOrSymbol(familyInstance, \"IfcDoorLiningProperties.CasingThickness\", out value2, \"CasingThickness\") != null))\r\n         {\r\n            casingDepthOpt = UnitUtil.ScaleLength(value1);\r\n            casingThicknessOpt = UnitUtil.ScaleLength(value2);\r\n         }\r\n\r\n         string doorLiningGUID = GUIDUtil.CreateSubElementGUID(familyInstance, (int)IFCDoorSubElements.DoorLining);\r\n         string doorLiningName = NamingUtil.GetIFCName(familyInstance);\r\n         return IFCInstanceExporter.CreateDoorLiningProperties(file, doorLiningGUID, ownerHistory,\r\n            doorLiningName, null, liningDepthOpt, liningThicknessOpt, thresholdDepthOpt, thresholdThicknessOpt,\r\n            transomThicknessOpt, transomOffsetOpt, liningOffsetOpt, thresholdOffsetOpt, casingThicknessOpt,\r\n            casingDepthOpt, null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets door panel position.\r\n      /// </summary>\r\n      /// <param name=\"element\">The door element.</param>\r\n      /// <param name=\"number\">The number of panel position.</param>\r\n      /// <param name=\"flip\">True if the position value should be reversed.</param>\r\n      /// <returns>The string represents the door panel position.</returns>\r\n      private static string GetIFCDoorPanelPosition(Element element, int number, bool flip)\r\n      {\r\n         string baseValue = \"NOTDEFINED\";\r\n\r\n         string basePanelName = \"PanelPosition\";\r\n         string currPanelName = \"PanelPosition\" + number.ToString();\r\n\r\n         string value = null;\r\n         if (ParameterUtil.GetStringValueFromElementOrSymbol(element, \"IfcDoorPanelProperties.\" + currPanelName, out value, currPanelName) == null)\r\n         {\r\n            if (ParameterUtil.GetStringValueFromElementOrSymbol(element, \"IfcDoorPanelProperties.\" + basePanelName, out value, basePanelName) == null)\r\n               return baseValue;\r\n         }\r\n\r\n         if (string.IsNullOrWhiteSpace(value))\r\n            return baseValue;\r\n         if (string.Compare(value, \"left\", true) == 0)\r\n            return flip ? \"RIGHT\" : \"LEFT\";\r\n         if (string.Compare(value, \"middle\", true) == 0)\r\n            return \"MIDDLE\";\r\n         if (string.Compare(value, \"right\", true) == 0)\r\n            return flip ? \"LEFT\" : \"RIGHT\";\r\n         \r\n         return baseValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets window style operation.\r\n      /// </summary>\r\n      /// <param name=\"familySymbol\">The element type of window.</param>\r\n      /// <returns>The IFCWindowStyleOperation.</returns>\r\n      public static Toolkit.IFCWindowStyleOperation GetIFCWindowStyleOperation(ElementType familySymbol)\r\n      {\r\n         string value;\r\n         ParameterUtil.GetStringValueFromElement(familySymbol, BuiltInParameter.WINDOW_OPERATION_TYPE, out value);\r\n\r\n         if (String.IsNullOrEmpty(value))\r\n            return Toolkit.IFCWindowStyleOperation.NotDefined;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"UserDefined\"))\r\n            return Toolkit.IFCWindowStyleOperation.UserDefined;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"SinglePanel\"))\r\n            return Toolkit.IFCWindowStyleOperation.Single_Panel;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"DoublePanelVertical\"))\r\n            return Toolkit.IFCWindowStyleOperation.Double_Panel_Vertical;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"DoublePanelHorizontal\"))\r\n            return Toolkit.IFCWindowStyleOperation.Double_Panel_Horizontal;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"TriplePanelVertical\"))\r\n            return Toolkit.IFCWindowStyleOperation.Triple_Panel_Vertical;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"TriplePanelBottom\"))\r\n            return Toolkit.IFCWindowStyleOperation.Triple_Panel_Bottom;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"TriplePanelTop\"))\r\n            return Toolkit.IFCWindowStyleOperation.Triple_Panel_Top;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"TriplePanelLeft\"))\r\n            return Toolkit.IFCWindowStyleOperation.Triple_Panel_Left;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"TriplePanelRight\"))\r\n            return Toolkit.IFCWindowStyleOperation.Triple_Panel_Right;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"TriplePanelHorizontal\"))\r\n            return Toolkit.IFCWindowStyleOperation.Triple_Panel_Horizontal;\r\n\r\n         return Toolkit.IFCWindowStyleOperation.NotDefined;\r\n      }\r\n\r\n      /// <summary>\r\n      /// New in IFC4: to get Partitioning type information from Window. In IFC2x3 is called Window Operation Type\r\n      /// </summary>\r\n      /// <param name=\"familySymbol\"></param>\r\n      /// <returns>The partitioning type information.</returns>\r\n      public static string GetIFCWindowPartitioningType(ElementType familySymbol)\r\n      {\r\n         string value;\r\n         ParameterUtil.GetStringValueFromElement(familySymbol, \"WINDOW_PARTITIONING_TYPE\", out value);\r\n\r\n         if (String.IsNullOrEmpty(value))\r\n            return \"NOTDEFINED\";\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"UserDefined\"))\r\n            return \"USERDEFINED\";\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"SinglePanel\"))\r\n            return \"SINGLE_PANEL\";\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"DoublePanelVertical\"))\r\n            return \"DOUBLE_PANEL_VERTICAL\";\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"DoublePanelHorizontal\"))\r\n            return \"DOUBLE_PANEL_HORIZONTAL\";\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"TriplePanelVertical\"))\r\n            return \"TRIPLE_PANEL_VERTICAL\";\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"TriplePanelHorizontal\"))\r\n            return \"TRIPLE_PANEL_HORIZONTAL\";\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"TriplePanelBottom\"))\r\n            return \"TRIPLE_PANEL_BOTTOM\";\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"TriplePanelTop\"))\r\n            return \"TRIPLE_PANEL_TOP\";\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"TriplePanelLeft\"))\r\n            return \"TRIPLE_PANEL_LEFT\";\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"TriplePanelRight\"))\r\n            return \"TRIPLE_PANEL_RIGHT\";\r\n\r\n         return \"NOTDEFINED\";\r\n      }\r\n\r\n      public static string GetIFCWindowType(ElementType familySymbol)\r\n      {\r\n         string value;\r\n         ParameterUtil.GetStringValueFromElement(familySymbol, \"WINDOW_PREDEFINED_TYPE\", out value);\r\n\r\n         if (String.IsNullOrEmpty(value))\r\n            return \"NOTDEFINED\";\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"Movable\"))\r\n            return \"MOVABLE\";\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"Parapet\"))\r\n            return \"PARAPET\";\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"Partitioning\"))\r\n            return \"PARTITIONING\";\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"PlumbingWall\"))\r\n            return \"PLUMBINGWALL\";\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"Shear\"))\r\n            return \"SHEAR\";\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"SolidWall\"))\r\n            return \"SOLIDWALL\";\r\n\r\n         return \"NOTDEFINED\";\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets IFCDoorStyleConstruction from construction type name.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The IFCDoorStyleConstruction.</returns>\r\n      public static IFCDoorStyleConstruction GetDoorStyleConstruction(Element element)\r\n      {\r\n         string value = null;\r\n         if (ParameterUtil.GetStringValueFromElementOrSymbol(element, \"IfcDoorStyle.ConstructionType\", out value, \"ConstructionType\", \"Construction\") == null)\r\n            ParameterUtil.GetStringValueFromElementOrSymbol(element, BuiltInParameter.DOOR_CONSTRUCTION_TYPE, false, out value);\r\n\r\n         if (String.IsNullOrEmpty(value))\r\n            return IFCDoorStyleConstruction.NotDefined;\r\n\r\n         string newValue = NamingUtil.RemoveSpacesAndUnderscores(value);\r\n\r\n         if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(newValue, \"USERDEFINED\"))\r\n            return IFCDoorStyleConstruction.UserDefined;\r\n         if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(newValue, \"ALUMINIUM\"))\r\n            return IFCDoorStyleConstruction.Aluminium;\r\n         if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(newValue, \"HIGHGRADESTEEL\"))\r\n            return IFCDoorStyleConstruction.High_Grade_Steel;\r\n         if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(newValue, \"STEEL\"))\r\n            return IFCDoorStyleConstruction.Steel;\r\n         if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(newValue, \"WOOD\"))\r\n            return IFCDoorStyleConstruction.Wood;\r\n         if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(newValue, \"ALUMINIUMWOOD\"))\r\n            return IFCDoorStyleConstruction.Aluminium_Wood;\r\n         if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(newValue, \"ALUMINIUMPLASTIC\"))\r\n            return IFCDoorStyleConstruction.Aluminium_Plastic;\r\n         if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(newValue, \"PLASTIC\"))\r\n            return IFCDoorStyleConstruction.Plastic;\r\n\r\n         return IFCDoorStyleConstruction.UserDefined;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets window style construction.\r\n      /// </summary>\r\n      /// <param name=\"element\">The window element.</param>\r\n      /// <returns>The string represents the window style construction.</returns>\r\n      public static IFCWindowStyleConstruction GetIFCWindowStyleConstruction(Element element)\r\n      {\r\n         string value;\r\n         if (ParameterUtil.GetStringValueFromElementOrSymbol(element, \"IfcWindowStyle.ConstructionType\", out value, \"ConstructionType\", \"Construction\") == null)\r\n            ParameterUtil.GetStringValueFromElementOrSymbol(element, BuiltInParameter.WINDOW_CONSTRUCTION_TYPE, false, out value);\r\n\r\n         if (String.IsNullOrWhiteSpace(value))\r\n            return IFCWindowStyleConstruction.NotDefined;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"Aluminum\"))\r\n            return IFCWindowStyleConstruction.Aluminium;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"HighGradeSteel\"))\r\n            return IFCWindowStyleConstruction.High_Grade_Steel;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"Steel\"))\r\n            return IFCWindowStyleConstruction.Steel;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"Wood\"))\r\n            return IFCWindowStyleConstruction.Wood;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"AluminumWood\"))\r\n            return IFCWindowStyleConstruction.Aluminium_Wood;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"Plastic\"))\r\n            return IFCWindowStyleConstruction.Plastic;\r\n\r\n         //else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"OtherConstruction\"))\r\n         return IFCWindowStyleConstruction.Other_Construction;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets window panel operation.\r\n      /// </summary>\r\n      /// <param name=\"initialValue\">\r\n      /// The initial value.\r\n      /// </param>\r\n      /// <param name=\"element\">\r\n      /// The window element.\r\n      /// </param>\r\n      /// <param name=\"number\">\r\n      /// The number of panel operation.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The string represents the window panel operation.\r\n      /// </returns>\r\n      public static IFCWindowPanelOperation GetIFCWindowPanelOperation(string initialValue, Element element, int number)\r\n      {\r\n         string currPanelName = \"PanelOperation\" + number.ToString();\r\n\r\n         string value;\r\n         if (ParameterUtil.GetStringValueFromElementOrSymbol(element, \"IfcWindowPanelProperties.\" + currPanelName, out value, currPanelName) == null)\r\n            value = initialValue;\r\n\r\n         if (value == \"\")\r\n            return IFCWindowPanelOperation.NotDefined;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"SideHungRightHand\"))\r\n            return IFCWindowPanelOperation.SideHungRightHand;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"SideHungLeftHand\"))\r\n            return IFCWindowPanelOperation.SideHungLeftHand;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"TiltAndTurnRightHand\"))\r\n            return IFCWindowPanelOperation.TiltAndTurnRightHand;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"TiltAndTurnLeftHand\"))\r\n            return IFCWindowPanelOperation.TiltAndTurnLeftHand;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"TopHung\"))\r\n            return IFCWindowPanelOperation.TopHung;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"BottomHung\"))\r\n            return IFCWindowPanelOperation.BottomHung;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"PivotHorizontal\"))\r\n            return IFCWindowPanelOperation.PivotHorizontal;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"PivotVertical\"))\r\n            return IFCWindowPanelOperation.PivotVertical;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"SlidingHorizontal\"))\r\n            return IFCWindowPanelOperation.SlidingHorizontal;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"SlidingVertical\"))\r\n            return IFCWindowPanelOperation.SlidingVertical;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"RemovableCasement\"))\r\n            return IFCWindowPanelOperation.RemovableCasement;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"FixedCasement\"))\r\n            return IFCWindowPanelOperation.FixedCasement;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"OtherOperation\"))\r\n            return IFCWindowPanelOperation.OtherOperation;\r\n\r\n         return IFCWindowPanelOperation.NotDefined;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets window panel position.\r\n      /// </summary>\r\n      /// <param name=\"initialValue\">\r\n      /// The initial value.\r\n      /// </param>\r\n      /// <param name=\"element\">\r\n      /// The window element.\r\n      /// </param>\r\n      /// <param name=\"number\">\r\n      /// The number of panel position.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The string represents the window panel position.\r\n      /// </returns>\r\n      public static IFCWindowPanelPosition GetIFCWindowPanelPosition(string initialValue, Element element, int number)\r\n      {\r\n         string currPanelName = \"PanelPosition\" + number.ToString();\r\n\r\n         string value;\r\n         if (ParameterUtil.GetStringValueFromElementOrSymbol(element, \"IfcWindowPanelProperties.\" + currPanelName, out value, currPanelName) == null)\r\n            value = initialValue;\r\n\r\n         if (value == \"\")\r\n            return IFCWindowPanelPosition.NotDefined;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"Left\"))\r\n            return IFCWindowPanelPosition.Left;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"Middle\"))\r\n            return IFCWindowPanelPosition.Middle;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"Right\"))\r\n            return IFCWindowPanelPosition.Right;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"Bottom\"))\r\n            return IFCWindowPanelPosition.Bottom;\r\n         else if (NamingUtil.IsEqualIgnoringCaseSpacesAndUnderscores(value, \"Top\"))\r\n            return IFCWindowPanelPosition.Top;\r\n\r\n         return IFCWindowPanelPosition.NotDefined;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates window panel position.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"familyInstance\">\r\n      /// The family instance of a window.\r\n      /// </param>\r\n      /// <param name=\"description\">\r\n      /// The description.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The handle created.\r\n      /// </returns>\r\n      public static IFCAnyHandle CreateWindowLiningProperties(ExporterIFC exporterIFC,\r\n         Element familyInstance, string description)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n         double? liningDepthOpt = null;\r\n         double? liningThicknessOpt = null;\r\n         double? transomThicknessOpt = null;\r\n         double? mullionThicknessOpt = null;\r\n         double? firstTransomOffsetOpt = null;\r\n         double? secondTransomOffsetOpt = null;\r\n         double? firstMullionOffsetOpt = null;\r\n         double? secondMullionOffsetOpt = null;\r\n\r\n         double value1 = 0.0;\r\n         double value2 = 0.0;\r\n\r\n         // both of these must be defined (or not defined)\r\n         if ((ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"IfcWindowLiningProperties.LiningDepth\", out value1, \"LiningDepth\") != null) &&\r\n             (ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"IfcWindowLiningProperties.LiningThickness\", out value2, \"LiningThickness\") != null))\r\n         {\r\n            liningDepthOpt = UnitUtil.ScaleLength(value1);\r\n            liningThicknessOpt = UnitUtil.ScaleLength(value2);\r\n         }\r\n\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"IfcWindowLiningProperties.TransomThickness\", out value1, \"TransomThickness\") != null)\r\n            transomThicknessOpt = UnitUtil.ScaleLength(value1);\r\n\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"IfcWindowLiningProperties.FirstTransomOffset\", out value1, \"FirstTransomOffset\") != null)\r\n            firstTransomOffsetOpt = UnitUtil.ScaleLength(value1);\r\n\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"IfcWindowLiningProperties.SecondTransomOffset\", out value1, \"SecondTransomOffset\") != null)\r\n            secondTransomOffsetOpt = UnitUtil.ScaleLength(value1);\r\n\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"IfcWindowLiningProperties.MullionThickness\", out value1, \"MullionThickness\") != null)\r\n            mullionThicknessOpt = UnitUtil.ScaleLength(value1);\r\n\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"IfcWindowLiningProperties.FirstMullionOffset\", out value1, \"FirstMullionOffset\") != null)\r\n            firstMullionOffsetOpt = UnitUtil.ScaleLength(value1);\r\n\r\n         if (ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"IfcWindowLiningProperties.SecondMullionOffset\", out value1, \"SecondMullionOffset\") != null)\r\n            secondMullionOffsetOpt = UnitUtil.ScaleLength(value1);\r\n\r\n         string windowLiningGUID = GUIDUtil.CreateSubElementGUID(familyInstance, (int)IFCWindowSubElements.WindowLining);\r\n         string windowLiningName = NamingUtil.GetIFCName(familyInstance);\r\n         return IFCInstanceExporter.CreateWindowLiningProperties(file, windowLiningGUID, ownerHistory,\r\n            windowLiningName, description, liningDepthOpt, liningThicknessOpt, transomThicknessOpt, mullionThicknessOpt,\r\n            firstTransomOffsetOpt, secondTransomOffsetOpt, firstMullionOffsetOpt, secondMullionOffsetOpt, null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates window panel properties.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"doorWindowInfo\">\r\n      /// The IFCDoorWindowInfo object.\r\n      /// </param>\r\n      /// <param name=\"familyInstance\">\r\n      /// The family instance of a window.\r\n      /// </param>\r\n      /// <param name=\"description\">\r\n      /// The description.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The list of handles created.\r\n      /// </returns>\r\n      public static IList<IFCAnyHandle> CreateWindowPanelProperties(ExporterIFC exporterIFC,\r\n         Element familyInstance, string description)\r\n      {\r\n         IList<IFCAnyHandle> panels = new List<IFCAnyHandle>();\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n         const int maxPanels = 1000;  // arbitrary large number to prevent infinite loops.\r\n         for (int panelNumber = 1; panelNumber < maxPanels; panelNumber++)\r\n         {\r\n            string frameDepthCurrString = \"FrameDepth\" + panelNumber.ToString();\r\n            string frameThicknessCurrString = \"FrameThickness\" + panelNumber.ToString();\r\n\r\n            IFCWindowPanelOperation panelOperation = GetIFCWindowPanelOperation(\"\", familyInstance, panelNumber);\r\n            IFCWindowPanelPosition panelPosition = GetIFCWindowPanelPosition(\"\", familyInstance, panelNumber);\r\n            if (panelOperation == IFCWindowPanelOperation.NotDefined && panelPosition == IFCWindowPanelPosition.NotDefined)\r\n               break;\r\n\r\n            double? frameDepth = null;\r\n            double? frameThickness = null;\r\n\r\n            double value1, value2;\r\n            if (((ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"IfcWindowPanelProperties.\" + frameDepthCurrString, out value1, frameDepthCurrString) != null) ||\r\n                ((panelNumber == 1) && (ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"IfcWindowPanelProperties.FrameDepth\", out value1, \"FrameDepth\") != null))) &&\r\n               ((ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"IfcWindowPanelProperties.\" + frameThicknessCurrString, out value2, frameThicknessCurrString) != null) ||\r\n                ((panelNumber == 1) && (ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"IfcWindowPanelProperties.FrameThickness\", out value2, \"FrameThickness\") != null))))\r\n            {\r\n               frameDepth = UnitUtil.ScaleLength(value1);\r\n               frameThickness = UnitUtil.ScaleLength(value2);\r\n            }\r\n\r\n            string panelGUID = GUIDUtil.CreateSubElementGUID(familyInstance, (int)IFCWindowSubElements.WindowPanelStart + panelNumber);\r\n            string panelName = NamingUtil.GetIFCNamePlusIndex(familyInstance, panelNumber);\r\n            panels.Add(IFCInstanceExporter.CreateWindowPanelProperties(file, panelGUID, ownerHistory,\r\n               panelName, description, panelOperation, panelPosition, frameDepth, frameThickness, null));\r\n         }\r\n         return panels;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Access the HostObjects map to get the handle associated with a wall at a particular level.  This does something special only \r\n      /// for walls split by level.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporterIFC class.</param>\r\n      /// <param name=\"hostId\">The (wall) host id.</param>\r\n      /// <param name=\"levelId\">The level id.</param>\r\n      /// <returns>The IFC handle associated with the host at that level.</returns>\r\n      static public IFCAnyHandle GetHndForHostAndLevel(ExporterIFC exporterIFC, ElementId hostId, ElementId levelId)\r\n      {\r\n         if (hostId == ElementId.InvalidElementId)\r\n            return null;\r\n\r\n         IFCAnyHandle hostObjectHnd = null;\r\n\r\n         IList<IDictionary<ElementId, IFCAnyHandle>> hostObjects = exporterIFC.GetHostObjects();\r\n         int idx = -1;\r\n         if (ExporterCacheManager.HostObjectsLevelIndex.TryGetValue(levelId, out idx))\r\n         {\r\n            IDictionary<ElementId, IFCAnyHandle> mapForLevel = hostObjects[idx];\r\n            mapForLevel.TryGetValue(hostId, out hostObjectHnd);\r\n         }\r\n\r\n         // If we can't find a specific handle for the host on that level, look for a generic handle for the host.\r\n         // These are stored in the \"invalidElementId\" level id map.\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(hostObjectHnd))\r\n         {\r\n            if (ExporterCacheManager.HostObjectsLevelIndex.TryGetValue(ElementId.InvalidElementId, out idx))\r\n            {\r\n               IDictionary<ElementId, IFCAnyHandle> mapForLevel = hostObjects[idx];\r\n               mapForLevel.TryGetValue(hostId, out hostObjectHnd);\r\n            }\r\n         }\r\n\r\n         return hostObjectHnd;\r\n      }\r\n\r\n      private static void ComputeArcBoundingBox(Arc arc, IList<XYZ> pts, double startParam, double endParam)\r\n      {\r\n         XYZ point = arc.Evaluate(startParam, false);\r\n         XYZ otherPoint = arc.Evaluate(endParam, false);\r\n\r\n         double eps = MathUtil.Eps();\r\n         XYZ maximum = new XYZ(Math.Max(point[0], otherPoint[0]),\r\n             Math.Max(point[1], otherPoint[1]),\r\n             Math.Max(point[2], otherPoint[2]));\r\n         XYZ minimum = new XYZ(Math.Min(point[0], otherPoint[0]),\r\n             Math.Min(point[1], otherPoint[1]),\r\n             Math.Min(point[2], otherPoint[2]));\r\n\r\n         if (endParam < startParam + eps)\r\n            return;\r\n\r\n         // find mins and maxs along each axis\r\n         for (int aa = 0; aa < 3; aa++)    // aa is the axis index\r\n         {\r\n            XYZ axis = new XYZ((aa == 0) ? 1 : 0, (aa == 1) ? 1 : 0, (aa == 2) ? 1 : 0);\r\n            double xProj = arc.XDirection.DotProduct(axis);\r\n            double yProj = arc.YDirection.DotProduct(axis);\r\n            if (Math.Abs(xProj) < eps && Math.Abs(yProj) < eps)\r\n               continue;\r\n\r\n            double angle = Math.Atan2(yProj, xProj);\r\n\r\n            if (angle > startParam)\r\n               angle -= Math.PI * ((int)((angle - startParam) / Math.PI));\r\n            else\r\n               angle += Math.PI * (1 + ((int)((startParam - angle) / Math.PI)));\r\n\r\n            for (; angle < endParam; angle += Math.PI)\r\n            {\r\n               point = arc.Evaluate(angle, false);\r\n               maximum = new XYZ(Math.Max(point[0], maximum[0]),\r\n                   Math.Max(point[1], maximum[1]),\r\n                   Math.Max(point[2], maximum[2]));\r\n               minimum = new XYZ(Math.Min(point[0], minimum[0]),\r\n                   Math.Min(point[1], minimum[1]),\r\n                   Math.Min(point[2], minimum[2]));\r\n            }\r\n         }\r\n\r\n         pts.Add(minimum);\r\n         pts.Add(maximum);\r\n      }\r\n\r\n      private static void ComputeArcBoundingBox(Arc arc, IList<XYZ> pts)\r\n      {\r\n         if (arc == null)\r\n            return;\r\n\r\n         if (arc.IsBound)\r\n         {\r\n            ComputeArcBoundingBox(arc, pts, arc.GetEndParameter(0), arc.GetEndParameter(1));\r\n         }\r\n         else\r\n         {\r\n            ComputeArcBoundingBox(arc, pts, 0.0, Math.PI);\r\n            ComputeArcBoundingBox(arc, pts, Math.PI, 2.0 * Math.PI);\r\n         }\r\n      }\r\n\r\n      private static BoundingBoxXYZ ComputeApproximateCurveLoopBBoxForOpening(CurveLoop curveLoop, Transform trf)\r\n      {\r\n         Transform trfInv = (trf != null) ? trf.Inverse : null;\r\n\r\n         XYZ ll = null;\r\n         XYZ ur = null;\r\n\r\n         bool init = false;\r\n         foreach (Curve curve in curveLoop)\r\n         {\r\n            IList<XYZ> pts = new List<XYZ>();\r\n            if (curve is Line)\r\n            {\r\n               pts.Add(curve.GetEndPoint(0));\r\n               pts.Add(curve.GetEndPoint(1));\r\n            }\r\n            else if (curve is Arc)\r\n            {\r\n               ComputeArcBoundingBox(curve as Arc, pts);\r\n            }\r\n            else\r\n               pts = curve.Tessellate();\r\n\r\n            foreach (XYZ pt in pts)\r\n            {\r\n               XYZ ptToUse = (trf != null) ? trfInv.OfPoint(pt) : pt;\r\n               if (!init)\r\n               {\r\n                  ll = ptToUse;\r\n                  ur = ptToUse;\r\n                  init = true;\r\n               }\r\n               else\r\n               {\r\n                  ll = new XYZ(Math.Min(ll.X, ptToUse.X), Math.Min(ll.Y, ptToUse.Y), Math.Min(ll.Z, ptToUse.Z));\r\n                  ur = new XYZ(Math.Max(ur.X, ptToUse.X), Math.Max(ur.Y, ptToUse.Y), Math.Max(ur.Z, ptToUse.Z));\r\n               }\r\n            }\r\n         }\r\n\r\n         if (!init)\r\n            return null;\r\n\r\n         if (trf != null)\r\n         {\r\n            ll = trf.OfPoint(ll);\r\n            ur = trf.OfPoint(ur);\r\n         }\r\n\r\n         BoundingBoxXYZ curveLoopBounds = new BoundingBoxXYZ();\r\n         curveLoopBounds.set_Bounds(0, ll);\r\n         curveLoopBounds.set_Bounds(1, ur);\r\n         return curveLoopBounds;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create the opening associated to an already created door or window.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter class.</param>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"hostObjHnd\">The host object IFC handle.</param>\r\n      /// <param name=\"hostId\">The host object element id.</param>\r\n      /// <param name=\"insertId\">The insert element id.</param>\r\n      /// <param name=\"openingGUID\">The GUID for the IfcOpeningElement.</param>\r\n      /// <param name=\"cutLoop\">The 2D outline representing the opening geometry.</param>\r\n      /// <param name=\"cutDir\">The direction of the extrusion representing the opening geometry.</param>\r\n      /// <param name=\"origUnscaledDepth\">The width of the host object that the opening is cutting.</param>\r\n      /// <param name=\"posHingeSide\">True if the 2D outline is on the plane containing the hinge.</param>\r\n      /// <param name=\"isRecess\">True if the IfcOpeningElement should represent a recess.</param>\r\n      /// <returns>The class containing information about the opening.</returns>\r\n      static public DoorWindowOpeningInfo CreateOpeningForDoorWindow(ExporterIFC exporterIFC, Document doc,\r\n          IFCAnyHandle hostObjHnd, ElementId hostId, ElementId insertId, string openingGUID, CurveLoop cutLoop, XYZ cutDir,\r\n          double origUnscaledDepth, bool posHingeSide, bool isRecess)\r\n      {\r\n         double openingHeight = 0.0, openingWidth = 0.0;\r\n         Transform loopLcs = cutLoop.HasPlane() ? GeometryUtil.CreateTransformFromPlane(cutLoop.GetPlane()) : null;\r\n         BoundingBoxXYZ cutLoopBBox = ComputeApproximateCurveLoopBBoxForOpening(cutLoop, loopLcs);\r\n         if (cutLoopBBox != null)\r\n         {\r\n            XYZ dist = cutLoopBBox.Max - cutLoopBBox.Min;\r\n            openingHeight = Math.Abs(dist.Z);\r\n            openingWidth = Math.Sqrt(dist.X * dist.X + dist.Y * dist.Y);\r\n         }\r\n\r\n         Element wallElement = doc.GetElement(hostId);\r\n         Wall wall = (wallElement != null) ? wallElement as Wall : null;\r\n         Curve curve = WallExporter.GetWallAxis(wall);\r\n         if (curve == null)\r\n            return null;\r\n\r\n         // Don't export opening if we are exporting parts on a wall, as the parts will already have the openings cut out.\r\n         if (PartExporter.CanExportParts(wall))\r\n            return null;\r\n\r\n         Element doorWindowElement = doc.GetElement(insertId);\r\n\r\n         double? optWallSlantAngle = ExporterCacheManager.WallCrossSectionCache.GetUniformSlantAngle(wall);\r\n         bool wallIsVertical = (optWallSlantAngle != null) && MathUtil.IsAlmostZero(optWallSlantAngle.Value);\r\n         Parameter insertOrientation = doorWindowElement.get_Parameter(BuiltInParameter.INSERT_ORIENTATION);\r\n         bool insertIsVertical = (insertOrientation != null && insertOrientation.HasValue && insertOrientation.StorageType == StorageType.Integer && insertOrientation.AsInteger() == 0 /*vertical orientation*/);\r\n\r\n         ElementId catId = CategoryUtil.GetSafeCategoryId(wall);\r\n\r\n         double unScaledDepth = origUnscaledDepth;\r\n\r\n         IFCAnyHandle hostObjPlacementHnd = IFCAnyHandleUtil.GetObjectPlacement(hostObjHnd);\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n         XYZ relOrig = XYZ.Zero;\r\n         XYZ relZ = XYZ.BasisZ;\r\n         XYZ relX = XYZ.BasisX;\r\n\r\n         Transform openingTrf = ExporterIFCUtils.GetUnscaledTransform(exporterIFC, hostObjPlacementHnd);\r\n         openingTrf = openingTrf.Inverse;\r\n\r\n         // Create a copy of the opening loop that will be expressed in the local coordinate system relative to the wall\r\n         CurveLoop tmpCutLoop = GeometryUtil.TransformCurveLoop(cutLoop, openingTrf);\r\n         loopLcs = openingTrf.Multiply(loopLcs);\r\n         cutDir = openingTrf.OfVector(cutDir);\r\n\r\n         if (curve is Line)\r\n         {\r\n            // TODO: Check this code for inserts in tapered walls.\r\n            if (wallIsVertical == insertIsVertical) // For vertical inserts in vertical walls and slanted inserts in slanted walls\r\n            {\r\n               XYZ wallExtrusionDir = WallExporter.GetWallExtrusionDirection(wall) ?? XYZ.BasisZ;\r\n\r\n               // Create a plane that goes through the center of the wall along its length\r\n               XYZ localExtrusionDir = openingTrf.OfVector(wallExtrusionDir);\r\n               Transform curveData = curve.ComputeDerivatives(curve.GetEndParameter(0), false);\r\n               if (curveData.BasisX.IsZeroLength())\r\n                  return null;\r\n\r\n               curveData = openingTrf.Multiply(curveData);\r\n               Plane wallCenterPlane = Plane.CreateByOriginAndBasis(curveData.Origin, curveData.BasisX.Normalize(), localExtrusionDir.Normalize());\r\n               // Calculate a center wall point relative to the origin of the opening loop\r\n               wallCenterPlane.Project(loopLcs.Origin, out UV uv, out _);\r\n\r\n               // Revit API doesn't seem to provide a plane evaluation method, so calculating the point by hand here\r\n               XYZ wallCenterPoint = wallCenterPlane.Origin + wallCenterPlane.XVec * uv.U + wallCenterPlane.YVec * uv.V;\r\n\r\n               // Place the opening loop on the proper side related to insert's hinge\r\n               // This is not applicable to vertical inserts in slanted walls, since they won't cut \r\n               // the wall if cutout loop is placed on the side of the insert closer to the wall.\r\n               double desiredLoopOffset = posHingeSide ? (-unScaledDepth / 2.0) : (unScaledDepth / 2.0);\r\n               XYZ localY = localExtrusionDir.CrossProduct(curveData.BasisX).Normalize();\r\n               XYZ desiredPosition = wallCenterPoint + localY * desiredLoopOffset;\r\n               if (!loopLcs.Origin.IsAlmostEqualTo(desiredPosition))\r\n               {\r\n                  XYZ moveVec = desiredPosition - loopLcs.Origin;\r\n                  tmpCutLoop = GeometryUtil.MoveCurveLoop(tmpCutLoop, moveVec);\r\n               }\r\n\r\n               bool cutDirRelToHostObjY = (cutDir[1] > 0.0); // true = same sense, false = opp. sense\r\n               if (posHingeSide != cutDirRelToHostObjY)\r\n               {\r\n                  cutDir = cutDir.Negate();\r\n               }\r\n\r\n               loopLcs.BasisX = localExtrusionDir;\r\n            }\r\n            else // For vertical inserts in slanted walls\r\n            {\r\n               if (wallIsVertical && insertIsVertical)\r\n                  return null; // This shouldn't be possible\r\n\r\n               // TODO: Is this right for tapered walls?\r\n               double slantAngle = optWallSlantAngle.GetValueOrDefault(0.0);\r\n\r\n               // Handle cases where cut direction is looking away from the wall\r\n               // Positive Y coordinate in cutDir means it's looking away from the positive slant direction\r\n               if ((cutDir[1] > 0.0) != (slantAngle < 0.0))\r\n               {\r\n                  // Move the cut loop forward to make sure that the width of the opening will also be cut out\r\n                  XYZ moveVec = cutDir * unScaledDepth;\r\n                  tmpCutLoop = GeometryUtil.MoveCurveLoop(tmpCutLoop, moveVec);\r\n                  // Flip the cut direction so that the cut would intersect the wall\r\n                  cutDir = cutDir.Negate();\r\n               }\r\n\r\n               // Calculate the distance from the top of the insert to the wall\r\n               double distToWall = openingHeight * Math.Tan(Math.Abs(slantAngle));\r\n               // Add wall's width to make sure the cut reaches its opposite side\r\n               unScaledDepth = distToWall + wall.Width;\r\n\r\n               loopLcs.BasisX = XYZ.BasisZ;\r\n            }\r\n\r\n            // In IFC the local X direction should point upwards along the wall, \r\n            // and local Y direction should point horizontally along the wall.\r\n            loopLcs.BasisY = cutDir.CrossProduct(loopLcs.BasisX).Normalize();\r\n            loopLcs.BasisZ = cutDir;\r\n         }\r\n         else if (curve is Arc)\r\n         {\r\n            Arc arc = curve as Arc;\r\n            double radius = arc.Radius;\r\n         \r\n            XYZ curveCtr = arc.Center;\r\n\r\n            // check orientation to cutDir, make sure it points to center of arc.\r\n            XYZ origLL = new XYZ(cutLoopBBox.Min.X, cutLoopBBox.Min.Y, curveCtr.Z);\r\n            XYZ origUR = new XYZ(cutLoopBBox.Max.X, cutLoopBBox.Max.Y, curveCtr.Z);\r\n            XYZ origCtr = (origLL + origUR) / 2.0;\r\n         \r\n            double centerDist = origCtr.DistanceTo(curveCtr);\r\n            XYZ approxMoveDir = (origCtr - curveCtr).Normalize();\r\n         \r\n            bool cutDirPointingIn = (cutDir.DotProduct(approxMoveDir) < 0.0);\r\n            bool centerInsideArc = (centerDist < radius);\r\n            if (centerInsideArc == cutDirPointingIn)\r\n            {\r\n               XYZ moveVec = cutDir * -unScaledDepth;\r\n               origCtr += moveVec;\r\n               tmpCutLoop = GeometryUtil.MoveCurveLoop(tmpCutLoop, moveVec);\r\n            }\r\n         \r\n            // not for windows that are too big ... forget about it.  Very rare case.\r\n            double depthFactor = openingWidth / (2.0 * radius);\r\n            double eps = MathUtil.Eps();\r\n            if (depthFactor < 1.0 - eps)\r\n            {\r\n               double depthFactorSq = depthFactor * depthFactor * 4;\r\n               double extraDepth = radius * (1.0 - Math.Sqrt(1.0 - depthFactorSq));\r\n               if (extraDepth > eps)\r\n               {\r\n                  XYZ moveVec = cutDir * -extraDepth;\r\n                  tmpCutLoop = GeometryUtil.MoveCurveLoop(tmpCutLoop, moveVec);\r\n                  unScaledDepth += extraDepth;\r\n               }\r\n            }\r\n         \r\n            // extra fudge on the other side of the window opening.\r\n            depthFactor = origUnscaledDepth / (2.0 * radius);\r\n            if (depthFactor < 1.0 - eps)\r\n            {\r\n               double extraDepth = radius * (1.0 - Math.Sqrt(1.0 - depthFactor));\r\n               if (extraDepth > eps)\r\n                  unScaledDepth += extraDepth;\r\n            }\r\n         }\r\n\r\n         Transform lcs = new Transform(loopLcs)\r\n         {\r\n            Origin = XYZ.Zero\r\n         };\r\n\r\n         // now move to origin in this coordinate system.\r\n         // todo: update openingtrf if we are to use it again!\r\n         BoundingBoxXYZ tmpBBox = ComputeApproximateCurveLoopBBoxForOpening(tmpCutLoop, lcs);\r\n         if (tmpBBox != null)\r\n         {\r\n            relOrig = tmpBBox.Min;\r\n            XYZ moveVec = relOrig * -1.0;\r\n            tmpCutLoop = GeometryUtil.MoveCurveLoop(tmpCutLoop, moveVec);\r\n         }\r\n\r\n         IList<CurveLoop> oCutLoopList = new List<CurveLoop>();\r\n         oCutLoopList.Add(tmpCutLoop);\r\n\r\n         double depth = UnitUtil.ScaleLength(unScaledDepth);\r\n\r\n         IFCAnyHandle openingRepHnd = RepresentationUtil.CreateExtrudedProductDefShape(exporterIFC, doorWindowElement, catId,\r\n             oCutLoopList, lcs, cutDir, depth);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(openingRepHnd))\r\n            return null;\r\n\r\n         // care only about first loop.\r\n         IFCFile file = exporterIFC.GetFile();\r\n         XYZ scaledOrig = UnitUtil.ScaleLength(relOrig);\r\n         IFCAnyHandle openingPlacement = ExporterUtil.CreateLocalPlacement(file, hostObjPlacementHnd, scaledOrig, relZ, relX);\r\n\r\n         string openingObjectType = isRecess ? \"Recess\" : \"Opening\";\r\n         string origOpeningName = NamingUtil.GetIFCNamePlusIndex(doorWindowElement, 1);\r\n         string openingDescription = NamingUtil.GetDescriptionOverride(doorWindowElement, null);\r\n         string openingName = NamingUtil.GetNameOverride(doorWindowElement, origOpeningName);\r\n         string openingTag = NamingUtil.GetTagOverride(doorWindowElement);\r\n         IFCAnyHandle openingHnd = IFCInstanceExporter.CreateOpeningElement(exporterIFC, \r\n            openingGUID, ownerHistory, \r\n            openingName, openingDescription, openingObjectType,\r\n            openingPlacement, openingRepHnd, openingTag);\r\n         \r\n         string openingVoidsGUID = GUIDUtil.CreateSubElementGUID(doorWindowElement, (int)IFCDoorSubElements.DoorOpeningRelVoid);\r\n         IFCInstanceExporter.CreateRelVoidsElement(file, openingVoidsGUID, ownerHistory, null, null, hostObjHnd, openingHnd);\r\n\r\n         if (ExporterCacheManager.ExportIFCBaseQuantities())\r\n         {\r\n            using (IFCExportBodyParams extraParams = new IFCExportBodyParams())\r\n            {\r\n               double height = 0.0, width = 0.0;\r\n               OpeningUtil.GetOpeningDirections(wallElement, out _, out XYZ wallAxis);\r\n               if (GeometryUtil.ComputeHeightWidthOfCurveLoop(tmpCutLoop, wallAxis, out height, out width))\r\n               {\r\n                  extraParams.ScaledHeight = UnitUtil.ScaleLength(height);\r\n                  extraParams.ScaledWidth = UnitUtil.ScaleLength(width);\r\n               }\r\n\r\n               IList<CurveLoop> curveLoops = new List<CurveLoop>();\r\n               curveLoops.Add(tmpCutLoop);\r\n               double area = ExporterIFCUtils.ComputeAreaOfCurveLoops(curveLoops);\r\n               if (area > 0.0)\r\n                  extraParams.ScaledArea = UnitUtil.ScaleArea(area);\r\n\r\n               extraParams.ScaledLength = depth;\r\n               PropertyUtil.CreateOpeningQuantities(exporterIFC, openingHnd, extraParams);\r\n            }\r\n         }\r\n\r\n         return DoorWindowOpeningInfo.Create(openingHnd, openingHeight, openingWidth);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create the opening associated to an already created door or window.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter class.</param>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"hostObjHnd\">The host object IFC handle.</param>\r\n      /// <param name=\"hostId\">The host object element id.</param>\r\n      /// <param name=\"insertId\">The insert element id.</param>\r\n      /// <param name=\"openingGUID\">The GUID for the IfcOpeningElement.</param>\r\n      /// <param name=\"solid\">The solid representing the opening geometry.</param>\r\n      /// <param name=\"scaledHostWidth\">The width of the host object that the opening is cutting.</param>\r\n      /// <param name=\"isRecess\">True if the IfcOpeningElement should represent a recess.</param>\r\n      /// <returns>The class containing information about the opening.</returns>\r\n      static public DoorWindowOpeningInfo CreateOpeningForDoorWindow(ExporterIFC exporterIFC, Document doc,\r\n          IFCAnyHandle hostObjHnd, ElementId hostId, ElementId insertId, string openingGUID, Solid solid, double scaledHostWidth, bool isRecess)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         Element hostElement = doc.GetElement(hostId);\r\n         Element insertElement = doc.GetElement(insertId);\r\n\r\n         ElementId catId = CategoryUtil.GetSafeCategoryId(hostElement);\r\n\r\n         using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, insertElement))\r\n         {\r\n            using (IFCExportBodyParams extrusionCreationData = new IFCExportBodyParams())\r\n            {\r\n               extrusionCreationData.SetLocalPlacement(ExporterUtil.CreateLocalPlacement(file, setter.LocalPlacement, null));\r\n               extrusionCreationData.ReuseLocalPlacement = true;\r\n\r\n               IFCAnyHandle openingHnd = OpeningUtil.CreateOpening(exporterIFC, hostObjHnd, hostElement, insertElement, openingGUID, solid, scaledHostWidth,\r\n                   isRecess, extrusionCreationData, null, null, null, -1, -1);\r\n\r\n               double unscaledHeight = UnitUtil.UnscaleLength(extrusionCreationData.ScaledHeight);\r\n               double unscaledWidth = UnitUtil.UnscaleLength(extrusionCreationData.ScaledWidth);\r\n               return DoorWindowOpeningInfo.Create(openingHnd, unscaledHeight, unscaledWidth);\r\n            }\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/DoublePropertyInfoCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of IFC double properties.\r\n   /// </summary>\r\n   public class DoublePropertyInfoCache : Dictionary<KeyValuePair<string, double>, IFCAnyHandle>\r\n   {\r\n      /// <summary>\r\n      /// Finds if it contains the property with the specified double value.\r\n      /// </summary>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"value\">The value.</param>\r\n      /// <returns>True if it has, false otherwise.</returns>\r\n      public IFCAnyHandle Find(string propertyName, double value)\r\n      {\r\n         KeyValuePair<string, double> key = new KeyValuePair<string, double>(propertyName, value);\r\n\r\n         IFCAnyHandle propertyHandle;\r\n         if (TryGetValue(key, out propertyHandle))\r\n            return propertyHandle;\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a new property of a double value to the cache.\r\n      /// </summary>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"value\">The value.</param>\r\n      /// <param name=\"propertyHandle\">The property handle.</param>\r\n      public void Add(string propertyName, double value, IFCAnyHandle propertyHandle)\r\n      {\r\n         KeyValuePair<string, double> key = new KeyValuePair<string, double>(propertyName, value);\r\n         this[key] = propertyHandle;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/DummyHostCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// The cache which holds dummy element and its levels and ranges.\r\n   /// You can check, find, and crate a dummy element via the ElementId of host element. \r\n   /// </summary>\r\n   public class DummyHostCache\r\n   {\r\n      /// <summary>\r\n      /// The dictionary mapping from a dummy host element and its levels and ranges. \r\n      /// </summary>\r\n      private Dictionary<ElementId, List<KeyValuePair<ElementId, IFCRange>>> m_DummyHostDictionary = new Dictionary<ElementId, List<KeyValuePair<ElementId, IFCRange>>>();\r\n\r\n      /// <summary>\r\n      /// Find the levels and ranges of from a host element.\r\n      /// </summary>\r\n      /// <param name=\"hostId\">The ElementId of host element.</param>\r\n      /// <returns>The list of level and IFCRange pair.</returns>\r\n      public List<KeyValuePair<ElementId, IFCRange>> Find(ElementId hostId)\r\n      {\r\n         List<KeyValuePair<ElementId, IFCRange>> levelRange;\r\n         if (m_DummyHostDictionary.TryGetValue(hostId, out levelRange))\r\n         {\r\n            return levelRange;\r\n         }\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Register the host element and its levels and ranges.\r\n      /// </summary>\r\n      /// <param name=\"hostId\">The ElementId of host element.</param>\r\n      /// <param name=\"levelRanges\">The list of level and IFCRange pair.</param>\r\n      public void Register(ElementId hostId, List<KeyValuePair<ElementId, IFCRange>> levelRanges)\r\n      {\r\n         if (HasRegistered(hostId))\r\n            return;\r\n\r\n         m_DummyHostDictionary[hostId] = levelRanges;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the host element been registered.\r\n      /// </summary>\r\n      /// <param name=\"hostId\">The ElementId of host element.</param>\r\n      /// <returns>True if registered, false otherwise.</returns>\r\n      public bool HasRegistered(ElementId hostId)\r\n      {\r\n         if (m_DummyHostDictionary.ContainsKey(hostId))\r\n            return true;\r\n         return false;\r\n      }\r\n\r\n      public void Clear()\r\n      {\r\n         m_DummyHostDictionary.Clear();\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ElementFilteringUtil.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.Architecture;\r\nusing Autodesk.Revit.DB.Electrical;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Export.Toolkit;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides static methods for filtering elements.\r\n   /// </summary>\r\n   class ElementFilteringUtil\r\n   {\r\n      /// <summary>\r\n      /// Create the based export element collector used for filtering elements\r\n      /// </summary>\r\n      /// <param name=\"document\">The document.</param>\r\n      /// <param name=\"useFilterViewIfExists\">If false, don't use the filter view\r\n      /// even if it exists.</param>\r\n      /// <returns>The FilteredElementCollector.</returns>\r\n      /// <remarks>useFilterViewIfExists is intended to be false for cases\r\n      /// where we want to potentially export some invisible elements, such\r\n      /// as rooms in 3D views.</remarks>\r\n      public static FilteredElementCollector GetExportElementCollector(\r\n         Document document, bool useFilterViewIfExists)\r\n      {\r\n         ExportOptionsCache exportOptionsCache = ExporterCacheManager.ExportOptionsCache;\r\n         ICollection<ElementId> idsToExport = exportOptionsCache.ElementsForExport;\r\n         if (idsToExport.Count > 0)\r\n         {\r\n            return new FilteredElementCollector(document, idsToExport);\r\n         }\r\n\r\n         View filterView = useFilterViewIfExists ?\r\n            exportOptionsCache.FilterViewForExport : null;\r\n\r\n         if (filterView == null)\r\n         {\r\n            return new FilteredElementCollector(document);\r\n         }\r\n\r\n         if (ExporterStateManager.CurrentLinkId != ElementId.InvalidElementId)\r\n         {\r\n            return new FilteredElementCollector(filterView.Document, filterView.Id,\r\n               ExporterStateManager.CurrentLinkId);\r\n         }\r\n\r\n         return new FilteredElementCollector(filterView.Document, filterView.Id);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets spatial element filter.\r\n      /// </summary>\r\n      /// <param name=\"document\">The Revit document.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <returns>The element filter.</returns>\r\n      public static ElementFilter GetSpatialElementFilter(Document document, ExporterIFC exporterIFC)\r\n      {\r\n         return GetExportFilter(document, exporterIFC, true);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the filtered non-spatial elements.\r\n      /// </summary>\r\n      /// <param name=\"document\">The Revit document.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <returns>The set of filtered non-spatial elements.</returns>\r\n      public static ISet<ElementId> GetNonSpatialElements(Document document, ExporterIFC exporterIFC)\r\n      {\r\n         ICollection<ElementId> nonSpatialElements;\r\n         if (ExporterCacheManager.ExportOptionsCache.ElementsForExport.Count > 0)\r\n         {\r\n            nonSpatialElements = ExporterCacheManager.ExportOptionsCache.ElementsForExport;\r\n         }\r\n         else\r\n         {\r\n            FilteredElementCollector otherElementCollector = GetExportElementCollector(document, true);\r\n            ElementFilter nonSpatialElementFilter = GetExportFilter(document, exporterIFC, false);\r\n            otherElementCollector.WherePasses(nonSpatialElementFilter);\r\n            nonSpatialElements = otherElementCollector.ToElementIds();\r\n         }\r\n\r\n         ExporterCacheManager.NonSpatialElements.UnionWith(nonSpatialElements);\r\n\r\n         return ExporterCacheManager.NonSpatialElements;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets element filter for export.\r\n      /// </summary>\r\n      /// <param name=\"document\">The Revit document.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"forSpatialElements\">True to get spatial element filter, false for non spatial elements filter.</param>\r\n      /// <returns>The element filter.</returns>\r\n      private static ElementFilter GetExportFilter(Document document, ExporterIFC exporterIFC, bool forSpatialElements)\r\n      {\r\n         // Class types & categories\r\n         ElementFilter classFilter = GetClassFilter(forSpatialElements);\r\n\r\n         // Special handling for family instances and view specific elements\r\n         if (!forSpatialElements)\r\n         {\r\n            ElementFilter familyInstanceFilter = GetFamilyInstanceFilter(exporterIFC);\r\n\r\n            List<ElementFilter> classFilters = [ classFilter, familyInstanceFilter ];\r\n\r\n            if (ExporterCacheManager.ExportOptionsCache.ExportAnnotations)\r\n            {\r\n               ElementFilter ownerViewFilter = GetViewSpecificTypesFilter(exporterIFC);\r\n               classFilters.Add(ownerViewFilter);\r\n            }\r\n\r\n            classFilter = new LogicalOrFilter(classFilters);\r\n         }\r\n\r\n         List<ElementFilter> filters = [ classFilter ];\r\n\r\n         // Design options\r\n         ElementFilter designOptionsFilter = GetDesignOptionFilter();\r\n         if(designOptionsFilter != null)\r\n            filters.Add(designOptionsFilter);\r\n\r\n         // Phases: only for non-spatial elements.  For spatial elements, we will do a check afterwards.\r\n         if (!forSpatialElements && ExporterUtil.ExportingHostModel())\r\n            filters.Add(GetPhaseStatusFilter(document));\r\n\r\n         return new LogicalAndFilter(filters);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets element filter for family instance.\r\n      /// </summary>\r\n      /// <param name=\"exporter\">The ExporterIFC object.</param>\r\n      /// <returns>The element filter.</returns>\r\n      private static ElementFilter GetFamilyInstanceFilter(ExporterIFC exporter)\r\n      {\r\n         List<ElementFilter> filters = [ new ElementOwnerViewFilter(ElementId.InvalidElementId), \r\n            new ElementClassFilter(typeof(FamilyInstance)) ];\r\n         LogicalAndFilter andFilter = new(filters);\r\n\r\n         return andFilter;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets element filter meeting design option requirements.\r\n      /// </summary>\r\n      /// <returns>The element filter.</returns>\r\n      private static ElementFilter GetDesignOptionFilter()\r\n      {\r\n         View filterView = ExporterCacheManager.ExportOptionsCache.FilterViewForExport;\r\n         if (filterView == null && !ExporterUtil.ExportingHostModel())\r\n            return null;\r\n\r\n         // We will respect the active design option if we are exporting a specific view.\r\n         ElementDesignOptionFilter noDesignOptionFilter = new(ElementId.InvalidElementId);\r\n         PrimaryDesignOptionMemberFilter primaryOptionsFilter = new();\r\n         LogicalOrFilter designOptionFilter = new(noDesignOptionFilter, primaryOptionsFilter);\r\n\r\n         if (filterView != null)\r\n         {\r\n            ElementId designOptionId = DesignOption.GetActiveDesignOptionId(ExporterCacheManager.Document);\r\n            if (designOptionId != ElementId.InvalidElementId)\r\n            {\r\n               ElementDesignOptionFilter activeDesignOptionFilter = new(designOptionId);\r\n               return new LogicalOrFilter(designOptionFilter, activeDesignOptionFilter);\r\n            }\r\n         }\r\n\r\n         return designOptionFilter;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if an element with a given ExportIFCCategoryInfo should be exported.\r\n      /// </summary>\r\n      /// <param name=\"info\">The exporting mapping information for a category.</param>\r\n      /// <param name=\"element\">The optional element.</param>\r\n      /// <param name=\"allowSeparateOpeningExport\">True if IfcOpeningElement is allowed to be exported.</param>\r\n      /// <returns>True if the element should be exported, false otherwise.</returns>\r\n      public static bool ShouldExportMappingInfo(ExportIFCCategoryInfo info, Element element, bool allowSeparateOpeningExport)\r\n      {\r\n         string entityName = info?.IFCEntityName;\r\n         bool? exportFlag = info?.IFCExportFlag;\r\n\r\n         // If the element is null, we won't do this check.  If the entityName is empty, it is\r\n         // likely a sub-category that should defer to its parent to make a final decision.\r\n         if (info == null && element != null)\r\n         {\r\n            if (element is AreaScheme || element is Group)\r\n               entityName = \"IfcGroup\";\r\n            else if (element is ElectricalSystem)\r\n               entityName = \"IfcSystem\";\r\n            else\r\n               return false;\r\n\r\n            exportFlag = true;\r\n         }\r\n\r\n         if (!(exportFlag ?? false))\r\n            return false;\r\n\r\n         if (!allowSeparateOpeningExport && (string.Compare(entityName, \"IfcOpeningElement\", true) == 0))\r\n            return false;\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.HasExcludeList())\r\n         {\r\n            if (ExporterCacheManager.ExportOptionsCache.IsEntityInExcludeList(entityName))\r\n               return false;\r\n\r\n            IFCExportInfoPair pair = new IFCExportInfoPair();\r\n            pair.SetByTypeName(entityName);\r\n            if (ExporterCacheManager.ExportOptionsCache.IsEntityInExcludeList(pair.ExportType.ToString()))\r\n               return false;\r\n\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if element in certain category should be exported.\r\n      /// </summary>\r\n      /// <param name=\"allowSeparateOpeningExport\">True if IfcOpeningElement is allowed to be exported.</param>\r\n      /// <returns>True if the element should be exported, false otherwise.</returns>\r\n      public static bool ShouldCategoryBeExported(Category category, bool allowSeparateOpeningExport)\r\n      {\r\n         // If the category isn't visible, we don't need to check further.\r\n         if (!IsCategoryVisible(category, ExporterCacheManager.ExportOptionsCache.FilterViewForExport))\r\n         {\r\n            return false;\r\n         }\r\n\r\n         ElementId categoryId = category?.Id ?? ElementId.InvalidElementId;\r\n         if (ExporterUtil.GetCategoryInfoById(categoryId, null, out ExportIFCCategoryInfo info))\r\n         {\r\n            return ShouldExportMappingInfo(info, null, allowSeparateOpeningExport);\r\n         }\r\n         \r\n         ElementId parentCategoryId = category?.Parent?.Id ?? ElementId.InvalidElementId;\r\n         if (parentCategoryId != ElementId.InvalidElementId)\r\n         {\r\n            if (ExporterUtil.GetCategoryInfoById(parentCategoryId, null, out info))\r\n               return ShouldExportMappingInfo(info, null, allowSeparateOpeningExport);\r\n         }\r\n\r\n         // The category is not in the mapping template, and not invisible in the view, return true.\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if element in certain category should be exported.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"allowSeparateOpeningExport\">True if IfcOpeningElement is allowed to be exported.</param>\r\n      /// <returns>True if the element should be exported, false otherwise.</returns>\r\n      private static bool ShouldCategoryBeExported(Element element, bool allowSeparateOpeningExport)\r\n      {\r\n         ExportIFCCategoryInfo info = ExporterUtil.GetIFCCategoryExportMappingInfo(element);\r\n         return ShouldExportMappingInfo(info, element, allowSeparateOpeningExport);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if an element should be exported based on parameter settings.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"elementType\">The element type, if any.</param>\r\n      /// <returns>An IFCExportElement value, calculated from several parameters, or null if inconclusive.</returns>\r\n      /// <remarks>This routine will never return IFCExportElement.ByType: it will return Yes, No, or null.</remarks>\r\n      public static IFCExportElement? GetExportElementState(Element element, Element elementType)\r\n      {\r\n         Parameter exportElement = element.get_Parameter(BuiltInParameter.IFC_EXPORT_ELEMENT);\r\n         IFCExportElement value = (exportElement != null) ? (IFCExportElement)exportElement.AsInteger() : IFCExportElement.ByType;\r\n         if (value != IFCExportElement.ByType)\r\n            return value;\r\n\r\n         // Element is ByType - look at the ElementType, if it exists.\r\n         Parameter exportElementType = elementType?.get_Parameter(BuiltInParameter.IFC_EXPORT_ELEMENT_TYPE);\r\n         IFCExportElementType typeValue = (exportElementType != null) ? (IFCExportElementType)exportElementType.AsInteger() : IFCExportElementType.Default;\r\n         switch (typeValue)\r\n         {\r\n            case IFCExportElementType.No:\r\n               return IFCExportElement.No;\r\n            case IFCExportElementType.Yes:\r\n               return IFCExportElement.Yes;\r\n            case IFCExportElementType.Default:\r\n               return null;\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if element should be exported using a variety of different checks.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"allowSeparateOpeningExport\">True if IfcOpeningElement is allowed to be exported.</param>\r\n      /// <returns>True if the element should be exported, false otherwise.</returns>\r\n      /// <remarks>There are some inefficiencies here, as we call GetExportInfoFromParameters\r\n      /// in other contexts.  We should attempt to get the value only once.</remarks>\r\n      public static bool ShouldElementBeExported(Element element, bool allowSeparateOpeningExport)\r\n      {\r\n         // Allow the ExporterStateManager to say that an element should be exported regardless of settings.\r\n         if (ExporterStateManager.CanExportElementOverride)\r\n            return true;\r\n\r\n         // First, check if the element is set explicitly to be exported or not exported.  This\r\n         // overrides category settings.\r\n         Element elementType = element.Document.GetElement(element.GetTypeId());\r\n         IFCExportElement? exportElementState = GetExportElementState(element, elementType);\r\n         if (exportElementState.HasValue)\r\n            return exportElementState.Value == IFCExportElement.Yes;\r\n\r\n         // Check to see if the category should be exported if parameters aren't set.\r\n         // Note that in previous versions, the category override the parameter settings.  This is\r\n         // no longer true.\r\n         if (!ShouldCategoryBeExported(element, allowSeparateOpeningExport))\r\n            return false;\r\n\r\n         // Check whether the intended Entity type is inside the export exclusion set\r\n         IFCExportInfoPair exportInfo = ExporterUtil.GetIFCExportElementParameterInfo(element, IFCEntityType.IfcRoot);\r\n         return !ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(exportInfo.ExportInstance);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines if the selected element meets extra criteria for export.\r\n      /// </summary>\r\n      /// <param name=\"element\">The current element to export.</param>\r\n      /// <param name=\"allowSeparateOpeningExport\">True if IfcOpeningElement is allowed to be exported.</param>\r\n      /// <returns>True if the element should be exported, false otherwise.</returns>\r\n      public static bool CanExportElement(Element element, bool allowSeparateOpeningExport)\r\n      {\r\n         if (!ShouldElementBeExported(element, allowSeparateOpeningExport))\r\n            return false;\r\n\r\n         // if we allow exporting parts as independent building elements, then prevent also exporting the host elements containing the parts.\r\n         bool checkIfExportingPart = ExporterCacheManager.ExportOptionsCache.ExportPartsAsBuildingElements || element is Part;\r\n         if (checkIfExportingPart && PartExporter.CanExportParts(element))\r\n            return false;\r\n\r\n         return true;\r\n      }\r\n\r\n      static readonly Dictionary<string, IFCEntityType> PreIFC4Remap = new Dictionary<string, IFCEntityType>()\r\n      {\r\n         { \"IFCAUDIOVISUALAPPLIANCE\", IFCEntityType.IfcElectricApplianceType },\r\n         { \"IFCBURNER\", IFCEntityType.IfcGasTerminalType },\r\n         { \"IFCELECTRICDISTRIBUTIONBOARD\", IFCEntityType.IfcElectricDistributionPoint }\r\n      };\r\n\r\n      static readonly Dictionary<string, IFCEntityType> IFC4Remap = new Dictionary<string, IFCEntityType>()\r\n      {\r\n         { \"IFCGASTERMINAL\", IFCEntityType.IfcBurnerType },\r\n         { \"IFCELECTRICDISTRIBUTIONPOINT\", IFCEntityType.IfcElectricDistributionBoardType },\r\n         { \"IFCELECTRICHEATER\", IFCEntityType.IfcSpaceHeaterType }\r\n      };\r\n\r\n      /// <summary>\r\n      /// Gets export type from IFC class name.\r\n      /// </summary>\r\n      /// <param name=\"originalIFCClassName\">The IFC class name.</param>\r\n      /// <returns>The export type.</returns>\r\n      public static IFCExportInfoPair GetExportTypeFromClassName(string originalIFCClassName)\r\n      {\r\n         IFCExportInfoPair exportInfoPair = new IFCExportInfoPair();\r\n\r\n         string cleanIFCClassName = originalIFCClassName.Trim().ToUpper();\r\n         if (cleanIFCClassName.StartsWith(\"IFC\"))\r\n         {\r\n            // Here we try to catch any possible types that are missing above by checking both the class name or the type name\r\n            // Unless there is any special treatment needed most of the above check can be done here\r\n            string clName = cleanIFCClassName.EndsWith(\"TYPE\") ?\r\n               cleanIFCClassName.Substring(0, cleanIFCClassName.Length - 4) : cleanIFCClassName;\r\n            \r\n            // Deal with small number of IFC2x3/IFC4 types that have changed in a hardwired way.\r\n            if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            {\r\n               if (PreIFC4Remap.TryGetValue(clName, out IFCEntityType ifcEntityType))\r\n                  exportInfoPair.SetByType(ifcEntityType);\r\n               else\r\n                  exportInfoPair.SetByTypeName(clName);\r\n            }\r\n            else\r\n            {\r\n               if (IFC4Remap.TryGetValue(clName, out IFCEntityType ifcEntityType))\r\n                  exportInfoPair.SetByType(ifcEntityType);\r\n               else\r\n                  exportInfoPair.SetByTypeName(clName);\r\n            }\r\n\r\n            if (exportInfoPair.ExportInstance == IFCEntityType.UnKnown)\r\n               exportInfoPair.SetByType(IFCEntityType.IfcBuildingElementProxy);\r\n         }\r\n\r\n         exportInfoPair.PredefinedType = null;\r\n\r\n         return exportInfoPair;\r\n      }\r\n\r\n      static readonly Dictionary<BuiltInCategory, (IFCEntityType, string)> CategoryToExportType = new Dictionary<BuiltInCategory, (IFCEntityType, string)>() {\r\n         { BuiltInCategory.OST_Cornices, (IFCEntityType.IfcBeam, \"NOTDEFINED\") },\r\n         { BuiltInCategory.OST_Ceilings, (IFCEntityType.IfcCovering, \"NOTDEFINED\") },\r\n         { BuiltInCategory.OST_CurtainWallPanels, (IFCEntityType.IfcPlate, \"CURTAIN_PANEL\") },\r\n         { BuiltInCategory.OST_Furniture, (IFCEntityType.IfcFurniture, \"NOTDEFINED\") },\r\n         { BuiltInCategory.OST_Floors, (IFCEntityType.IfcSlab, \"FLOOR\") },\r\n         { BuiltInCategory.OST_IOSModelGroups, (IFCEntityType.IfcGroup, \"NOTDEFINED\") },\r\n         { BuiltInCategory.OST_Mass, (IFCEntityType.IfcBuildingElementProxy, \"NOTDEFINED\") },\r\n         { BuiltInCategory.OST_CurtainWallMullions, (IFCEntityType.IfcMember, \"MULLION\") },\r\n         { BuiltInCategory.OST_Railings, (IFCEntityType.IfcRailing, \"NOTDEFINED\") },\r\n         { BuiltInCategory.OST_Ramps, (IFCEntityType.IfcRamp, \"NOTDEFINED\") },\r\n         { BuiltInCategory.OST_Roofs, (IFCEntityType.IfcRoof, \"NOTDEFINED\") },\r\n         { BuiltInCategory.OST_Site, (IFCEntityType.IfcSite, \"NOTDEFINED\") },\r\n         { BuiltInCategory.OST_Stairs, (IFCEntityType.IfcStair, \"NOTDEFINED\") },\r\n         { BuiltInCategory.OST_Walls, (IFCEntityType.IfcWall, \"NOTDEFINED\") },\r\n         { BuiltInCategory.OST_Windows, (IFCEntityType.IfcWindow, \"NOTDEFINED\") }\r\n      };\r\n\r\n      /// <summary>\r\n      /// Gets export type from category id.\r\n      /// </summary>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <returns>The export type.</returns>\r\n      public static IFCExportInfoPair GetExportTypeFromCategoryId(ElementId categoryId)\r\n      {\r\n         (IFCEntityType, string) exportInfoPair;\r\n         BuiltInCategory builtInCategory = (BuiltInCategory)categoryId.Value;\r\n         if (CategoryToExportType.TryGetValue(builtInCategory, out exportInfoPair))\r\n            return new IFCExportInfoPair(exportInfoPair.Item1, exportInfoPair.Item2);\r\n         return new IFCExportInfoPair();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets element filter for specific views.\r\n      /// </summary>\r\n      /// <param name=\"exporter\">The ExporterIFC object.</param>\r\n      /// <returns>The element filter.</returns>\r\n      private static ElementFilter GetViewSpecificTypesFilter(ExporterIFC exporter)\r\n      {\r\n         ElementFilter ownerViewFilter = GetOwnerViewFilter(exporter);\r\n\r\n         List<Type> viewSpecificTypes = new List<Type>()\r\n         {\r\n            typeof(TextNote),\r\n            typeof(FilledRegion)\r\n         };\r\n\r\n         ElementMulticlassFilter classFilter = new ElementMulticlassFilter(viewSpecificTypes);\r\n\r\n         LogicalAndFilter viewSpecificTypesFilter = new LogicalAndFilter(ownerViewFilter, classFilter);\r\n         return viewSpecificTypesFilter;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets element filter to match elements which are owned by a particular view.\r\n      /// </summary>\r\n      /// <param name=\"exporter\">The exporter.</param>\r\n      /// <returns>The element filter.</returns>\r\n      private static ElementFilter GetOwnerViewFilter(ExporterIFC exporter)\r\n      {\r\n         List<ElementFilter> filters = new List<ElementFilter>();\r\n         ICollection<ElementId> viewIds = ExporterCacheManager.DBViewsToExport.Keys;\r\n         foreach (ElementId id in viewIds)\r\n         {\r\n            filters.Add(new ElementOwnerViewFilter(id));\r\n         }\r\n         filters.Add(new ElementOwnerViewFilter(ElementId.InvalidElementId));\r\n         LogicalOrFilter viewFilters = new LogicalOrFilter(filters);\r\n\r\n         return viewFilters;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets element filter that match certain types.\r\n      /// </summary>\r\n      /// <param name=\"forSpatialElements\">True if to get filter for spatial element, false for other elements.</param>\r\n      /// <returns>The element filter.</returns>\r\n      private static ElementFilter GetClassFilter(bool forSpatialElements)\r\n      {\r\n         if (forSpatialElements)\r\n         {\r\n            return new ElementClassFilter(typeof(SpatialElement));\r\n         }\r\n         else\r\n         {\r\n            List<Type> excludedTypes = new List<Type>\r\n            {\r\n               typeof(AnalyticalElement),\r\n\r\n               // AreaScheme elements are exported as groups after all Areas have been\r\n               // exported.\r\n               typeof(AreaScheme),\r\n\r\n               // curtain wall sub-types we are ignoring.\r\n               typeof(CurtainGridLine),\r\n               // typeof(Mullion),\r\n      \r\n               typeof(ElevationMarker),\r\n\r\n               // FabricArea elements are exported as groups after all FabricSheets have\r\n               // been exported.\r\n               typeof(FabricArea),\r\n\r\n               // exclude levels that are covered in BeginExport\r\n               typeof(Level),\r\n\r\n               // this will be gotten from the element(s) it cuts.\r\n               typeof(Opening),\r\n\r\n               // Spatial element are exported in a separate pass.\r\n               typeof(SpatialElement),\r\n   \r\n               // 2D types we are ignoring\r\n               typeof(FaceSplitter),\r\n               typeof(Revision),\r\n               typeof(SketchBase),\r\n\r\n                // 2D types covered by the element owner view filter\r\n               typeof(FilledRegion),\r\n               typeof(TextNote),\r\n\r\n               typeof(BaseArray),\r\n               typeof(BasePoint),\r\n               typeof(ColorFillScheme),\r\n               typeof(ElementType),\r\n               typeof(GraphicsStyle),\r\n               typeof(Family),\r\n               typeof(FamilyInstance),\r\n               typeof(FillPatternElement),\r\n               typeof(InternalOrigin),\r\n               typeof(LinePatternElement),\r\n               typeof(LoadBase),\r\n               typeof(LoadCase),\r\n               typeof(Material),\r\n               typeof(Phase),\r\n               typeof(SketchPlane),\r\n               typeof(SunAndShadowSettings),\r\n               typeof(View)\r\n            };\r\n\r\n            ElementFilter excludedClassFilter = new ElementMulticlassFilter(excludedTypes,\r\n               true);\r\n\r\n            List<BuiltInCategory> excludedCategories = new List<BuiltInCategory>()\r\n            { \r\n               // Native Revit types without match in API\r\n               BuiltInCategory.OST_ConduitCenterLine,\r\n               BuiltInCategory.OST_ConduitFittingCenterLine,\r\n               BuiltInCategory.OST_DecalElement,\r\n               //BuiltInCategory.OST_Parts,\r\n               //BuiltInCategory.OST_RvtLinks,\r\n               BuiltInCategory.OST_DuctCurvesCenterLine,\r\n               BuiltInCategory.OST_DuctFittingCenterLine,\r\n               BuiltInCategory.OST_FlexDuctCurvesCenterLine,\r\n               BuiltInCategory.OST_FlexPipeCurvesCenterLine,\r\n               BuiltInCategory.OST_HVAC_Load_Schedules,\r\n               BuiltInCategory.OST_IOS_GeoLocations,\r\n               BuiltInCategory.OST_IOSSketchGrid,\r\n               BuiltInCategory.OST_PipeCurvesCenterLine,\r\n               BuiltInCategory.OST_PipeFittingCenterLine,\r\n               BuiltInCategory.OST_Property,\r\n               BuiltInCategory.OST_SitePropertyLineSegment,\r\n               BuiltInCategory.OST_TopographyContours,\r\n               BuiltInCategory.OST_Viewers,\r\n               BuiltInCategory.OST_Viewports,\r\n               BuiltInCategory.OST_Views,\r\n\r\n               // Exclude elements with no category. \r\n               BuiltInCategory.INVALID\r\n            };\r\n\r\n            ElementMulticategoryFilter excludedCategoryFilter = \r\n               new ElementMulticategoryFilter(excludedCategories, true);\r\n\r\n            LogicalAndFilter exclusionFilter = new LogicalAndFilter(excludedClassFilter, \r\n               excludedCategoryFilter);\r\n\r\n            ElementOwnerViewFilter ownerViewFilter = \r\n               new ElementOwnerViewFilter(ElementId.InvalidElementId);\r\n\r\n            LogicalAndFilter returnedFilter = new LogicalAndFilter(exclusionFilter, \r\n               ownerViewFilter);\r\n\r\n            return returnedFilter;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the room is in an invalid phase.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element, which may or may not be a room element.</param>\r\n      /// <returns>True if the element is in the room, has a phase set, which is different from the active phase.</returns>\r\n      public static bool IsRoomInInvalidPhase(Element element)\r\n      {\r\n         if (element is Room)\r\n         {\r\n            Parameter phaseParameter = element.get_Parameter(BuiltInParameter.ROOM_PHASE);\r\n            if (phaseParameter != null)\r\n            {\r\n               ElementId phaseId = phaseParameter.AsElementId();\r\n               if (phaseId != ElementId.InvalidElementId && phaseId != ExporterCacheManager.ExportOptionsCache.ActivePhaseId)\r\n                  return true;\r\n            }\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets element filter that match certain phases. \r\n      /// </summary>\r\n      /// <param name=\"document\">The Revit document.</param>\r\n      /// <returns>The element filter.</returns>\r\n      private static ElementFilter GetPhaseStatusFilter(Document document)\r\n      {\r\n         ElementId phaseId = ExporterCacheManager.ExportOptionsCache.ActivePhaseId;\r\n\r\n         List<ElementOnPhaseStatus> phaseStatuses = new List<ElementOnPhaseStatus>();\r\n         phaseStatuses.Add(ElementOnPhaseStatus.None);  //include \"none\" because we might want to export phaseless elements.\r\n         phaseStatuses.Add(ElementOnPhaseStatus.Existing);\r\n         phaseStatuses.Add(ElementOnPhaseStatus.New);\r\n\r\n         return new ElementPhaseStatusFilter(phaseId, phaseStatuses);\r\n      }\r\n\r\n      private static IDictionary<ElementId, bool> m_CategoryVisibilityCache = new Dictionary<ElementId, bool>();\r\n\r\n      /// <summary>\r\n      /// Initialize the category visibility cache\r\n      /// </summary>\r\n      public static void InitCategoryVisibilityCache()\r\n      {\r\n         m_CategoryVisibilityCache.Clear();\r\n      }\r\n\r\n      private static bool ProcessingLink()\r\n      {\r\n         return ExporterCacheManager.ExportOptionsCache.HostViewId != ElementId.InvalidElementId ||\r\n            ExporterStateManager.CurrentLinkId != ElementId.InvalidElementId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if a category is visible for certain view.\r\n      /// </summary>\r\n      /// <param name=\"category\">The category.</param>\r\n      /// <param name=\"filterView\">The view.</param>\r\n      /// <returns>True if the category is visible, false otherwise.</returns>\r\n      public static bool IsCategoryVisible(Category category, View filterView)\r\n      {\r\n         // This routine is generally used to decide whether or not to export geometry assigned to a particular category.\r\n         // Default behavior is to return true, even for a null category.  In general, we want to err on the side of showing geometry over hiding it.\r\n         if (category == null || filterView == null)\r\n            return true;\r\n\r\n         bool isVisible;\r\n         if (m_CategoryVisibilityCache.TryGetValue(category.Id, out isVisible))\r\n            return isVisible;\r\n\r\n         if (category.Id.Value > 0 && ProcessingLink())\r\n         {\r\n            // We don't support checking the visibility of link document custom categories\r\n            // in the host view here.  We will use a different filter for this.\r\n            isVisible = true;\r\n         }\r\n         else\r\n         {\r\n            // The category will be visible if either we don't allow visibility controls (default: true), or\r\n            // we do allow visibility controls and the category is visible in the view.\r\n            isVisible = (!category.get_AllowsVisibilityControl(filterView) || category.get_Visible(filterView));\r\n         }\r\n\r\n         m_CategoryVisibilityCache[category.Id] = isVisible;\r\n         return isVisible;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if element is visible for certain view.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>True if the element is visible, false otherwise.</returns>\r\n      public static bool IsElementVisible(Element element)\r\n      {\r\n         View filterView = ExporterCacheManager.ExportOptionsCache.FilterViewForExport;\r\n         if (filterView == null)\r\n            return true;\r\n\r\n         bool hidden = element.IsHidden(filterView);\r\n         if (hidden)\r\n            return false;\r\n\r\n         Category category = CategoryUtil.GetSafeCategory(element);\r\n         hidden = !IsCategoryVisible(category, filterView);\r\n         if (hidden)\r\n            return false;\r\n\r\n         if (ProcessingLink())\r\n            return true;\r\n\r\n         return filterView.IsElementVisibleInTemporaryViewMode(TemporaryViewMode.TemporaryHideIsolate, element.Id);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the IFC type is MEP type.\r\n      /// </summary>\r\n      /// <param name=\"exportType\">IFC Export Type to check</param>\r\n      /// <returns>True for MEP type of elements.</returns>\r\n      public static bool IsMEPType(IFCExportInfoPair exportType)\r\n      {\r\n         bool instanceIsMEPInst = IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportInstance.ToString(), IFCEntityType.IfcDistributionElement.ToString(), strict:false);\r\n\r\n         // The Type probably is not needed for check?\r\n         bool typeIsMEPType = IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportType.ToString(), IFCEntityType.IfcDistributionElementType.ToString(), strict:false);\r\n\r\n         return (instanceIsMEPInst);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check if an element assigned to IfcBuildingElementProxy is of MEP Type (by checking its connectors) to enable IfcBuildingElementProxy to take part\r\n      /// in the System component and connectivity\r\n      /// </summary>\r\n      /// <param name=\"element\">The element</param>\r\n      /// <param name=\"exportType\">IFC Export Type to check: only for IfcBuildingElementProxy or IfcBuildingElementProxyType</param>\r\n      /// <returns></returns>\r\n      public static bool ProxyForMEPType(Element element, IFCExportInfoPair exportType)\r\n      {\r\n         if ((exportType.ExportInstance == IFCEntityType.IfcBuildingElementProxy) || (exportType.ExportType == IFCEntityType.IfcBuildingElementProxyType))\r\n         {\r\n            try\r\n            {\r\n               if (element is FamilyInstance)\r\n               {\r\n                  MEPModel m = ((FamilyInstance)element).MEPModel;\r\n                  if (m != null && m.ConnectorManager != null)\r\n                  {\r\n                     return true;\r\n                  }\r\n               }\r\n               else\r\n                  return false;\r\n            }\r\n            catch\r\n            {\r\n            }\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get valid IFC entity type by using the official IFC schema (using the XML schema). It checks the non-abstract valid entity. \r\n      /// If it is found to be abstract, it will try to find its supertype until it finds a non-abstract type.  \r\n      /// </summary>\r\n      /// <param name=\"entityType\">the IFC entity type (string) to check</param>\r\n      /// <returns>return the appropriate IFCEntityType enumeration or Unknown</returns>\r\n      public static IFCEntityType GetValidIFCEntityType (string entityType)\r\n      {\r\n         IFCVersion ifcVersion = ExporterCacheManager.ExportOptionsCache.FileVersion;\r\n         IFCEntityType ret = IFCEntityType.UnKnown;\r\n\r\n         var ifcEntitySchemaTree = IfcSchemaEntityTree.GetEntityDictFor(ExporterCacheManager.ExportOptionsCache.FileVersion);\r\n         if (ifcEntitySchemaTree == null || ifcEntitySchemaTree.IfcEntityDict == null || ifcEntitySchemaTree.IfcEntityDict.Count == 0)\r\n            throw new Exception(\"Unable to locate IFC Schema xsd file! Make sure the relevant xsd \" + ExporterCacheManager.ExportOptionsCache.FileVersion + \" exists.\");\r\n\r\n         IfcSchemaEntityNode node = ifcEntitySchemaTree.Find(entityType);\r\n         IFCEntityType ifcType = IFCEntityType.UnKnown;\r\n         if (node != null && !node.isAbstract)\r\n         {\r\n            // Only IfcProduct or IfcTypeProduct can be assigned for export type\r\n            //if (!node.IsSubTypeOf(\"IfcProduct\") && !node.IsSubTypeOf(\"IfcTypeProduct\") && !node.Name.Equals(\"IfcGroup\", StringComparison.InvariantCultureIgnoreCase))\r\n            if ((node.IsSubTypeOf(\"IfcObject\") && \r\n                     (node.IsSubTypeOf(\"IfcProduct\") || node.IsSubTypeOf(\"IfcGroup\") || node.Name.Equals(\"IfcGroup\", StringComparison.InvariantCultureIgnoreCase)))\r\n                  || node.IsSubTypeOf(\"IfcProject\") || node.Name.Equals(\"IfcProject\", StringComparison.InvariantCultureIgnoreCase)\r\n                  || node.IsSubTypeOf(\"IfcTypeObject\") || node.Name.Equals(\"IfcMaterial\", StringComparison.InvariantCultureIgnoreCase))\r\n            {\r\n               if (IFCEntityType.TryParse(entityType, true, out ifcType))\r\n                  ret = ifcType;\r\n            }\r\n            else\r\n               ret = ifcType;\r\n         }\r\n         else if (node != null && node.isAbstract)\r\n         {\r\n            node = IfcSchemaEntityTree.FindNonAbsSuperType(ifcVersion, entityType, \"IfcProduct\", \"IfcProductType\", \"IfcGroup\", \"IfcProject\");\r\n            if (node != null)\r\n            {\r\n               if (Enum.TryParse<IFCEntityType>(node.Name, true, out ifcType))\r\n                  ret = ifcType;\r\n            }\r\n         }\r\n\r\n         return ret;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get valid IFC entity type by using the official IFC schema (using the XML schema). It checks the non-abstract valid entity. \r\n      /// If it is found to be abstract, it will try to find its supertype until it finds a non-abstract type. \r\n      /// </summary>\r\n      /// <param name=\"entityType\">the IFC Entity type enum</param>\r\n      /// <returns>return the appropriate entity type or Unknown</returns>\r\n      public static IFCEntityType GetValidIFCEntityType (IFCEntityType entityType)\r\n      {\r\n         return GetValidIFCEntityType(entityType.ToString());\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ElementOrConnector.cs",
    "content": "﻿using Autodesk.Revit.DB;\n\nnamespace Revit.IFC.Export.Utility\n{\n   /// <summary>\n   /// A simple class to store eigther element or connector.\n   /// </summary>\n   public class ElementOrConnector\n   {\n      /// <summary>\n      /// The element object\n      /// </summary>\n      public Element Element { get; set; } = null;\n\n      /// <summary>\n      /// The connector object\n      /// </summary>\n      public Connector Connector { get; set; } = null;\n\n      /// <summary>\n      /// Initialize the class with the element\n      /// </summary>\n      /// <param name=\"element\">The element</param>\n      public ElementOrConnector(Element element)\n      {\n         Element = element;\n      }\n\n      /// <summary>\n      /// Initialize the class with the connector\n      /// </summary>\n      /// <param name=\"connector\">The connector</param>\n      public ElementOrConnector(Connector connector)\n      {\n         Connector = connector;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ElementToHandleCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of a mapping of an ElementId to a handle.\r\n   /// </summary>\r\n   public class ElementToHandleCache\r\n   {\r\n      /// <summary>\r\n      /// The dictionary mapping from an ElementId to a handle and its export information. \r\n      /// </summary>\r\n      public Dictionary<ElementId, Tuple<IFCAnyHandle, IFCExportInfoPair>> ElementIdToHandleAndInfo { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// Finds the handle from the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element elementId.</param>\r\n      /// <returns>The handle.</returns>\r\n      public IFCAnyHandle Find(ElementId elementId)\r\n      {\r\n         IFCAnyHandle handle = null;\r\n         Tuple<IFCAnyHandle, IFCExportInfoPair> handleAndInfo = null;\r\n         if (ElementIdToHandleAndInfo.TryGetValue(elementId, out handleAndInfo))\r\n         {\r\n            // We need to make sure the handle isn't stale.  If it is, remove it. \r\n            try\r\n            {\r\n               handle = handleAndInfo.Item1;\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(handle))\r\n               {\r\n                  ElementIdToHandleAndInfo.Remove(elementId);\r\n                  handle = null;\r\n               }\r\n            }\r\n            catch\r\n            {\r\n               ElementIdToHandleAndInfo.Remove(elementId);\r\n               handle = null;\r\n            }\r\n         }\r\n         return handle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Find IFCExportInforPair of the Element with the ElementId. Used for applicable Pset\r\n      /// </summary>\r\n      /// <param name=\"matchingHandle\">The handle associated with the elementId.</param>\r\n      /// <param name=\"elementId\">The ElementId</param>\r\n      /// <returns>PredefinedType string or null if not found, or the handle doesn't match.</returns>\r\n      public IFCExportInfoPair FindPredefinedType(IFCAnyHandle matchingHandle, ElementId elementId)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(matchingHandle))\r\n            return null;\r\n\r\n         Tuple<IFCAnyHandle, IFCExportInfoPair> handleAndInfo = null;\r\n         if (ElementIdToHandleAndInfo.TryGetValue(elementId, out handleAndInfo))\r\n         {\r\n            // It is possible that the handle associated to the element id is not the same as\r\n            // the handle for which we are looking for information.  As such, do a match first.\r\n            if (matchingHandle.Id == handleAndInfo.Item1.Id)\r\n               return handleAndInfo.Item2;\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Removes invalid handles from the cache.\r\n      /// </summary>\r\n      /// <param name=\"elementIds\">The element ids.</param>\r\n      /// <param name=\"expectedType\">The expected type of the handles.</param>\r\n      public void RemoveInvalidHandles(ISet<ElementId> elementIds, IFCEntityType expectedType)\r\n      {\r\n         foreach (ElementId elementId in elementIds)\r\n         {\r\n            Tuple<IFCAnyHandle, IFCExportInfoPair> handleAndInfo = null;\r\n            if (ElementIdToHandleAndInfo.TryGetValue(elementId, out handleAndInfo))\r\n            {\r\n               try\r\n               {\r\n                  if (!IFCAnyHandleUtil.IsSubTypeOf(handleAndInfo.Item1, expectedType))\r\n                  {\r\n                     ElementIdToHandleAndInfo.Remove(elementId);\r\n                  }\r\n               }\r\n               catch\r\n               {\r\n                  ElementIdToHandleAndInfo.Remove(elementId);\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds the handle to the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element elementId.</param>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      public void Register(ElementId elementId, IFCAnyHandle handle, IFCExportInfoPair exportType = null)\r\n      {\r\n         if (ElementIdToHandleAndInfo.ContainsKey(elementId))\r\n            return;\r\n\r\n         ElementIdToHandleAndInfo[elementId] = Tuple.Create(handle, exportType);\r\n         // Register also handle to elementid cache at the same time in order to make the two caches consistent\r\n         ExporterCacheManager.HandleToElementCache.Register(handle, elementId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Delete an element from the cache\r\n      /// </summary>\r\n      /// <param name=\"element\">the element</param>\r\n      public void Delete(ElementId elementId)\r\n      {\r\n         if (ElementIdToHandleAndInfo.ContainsKey(elementId))\r\n         {\r\n            IFCAnyHandle handle = ElementIdToHandleAndInfo[elementId].Item1;\r\n            ElementIdToHandleAndInfo.Remove(elementId);\r\n            ExporterCacheManager.HandleToElementCache.Delete(handle);\r\n         }\r\n      }\r\n\r\n      public void Clear()\r\n      {\r\n         ElementIdToHandleAndInfo.Clear();\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ElementTypeToHandleCache.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Reflection.Metadata;\nusing System.Windows.Input;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Common.Utility;\n\nnamespace Revit.IFC.Export.Utility\n{\n   /// <summary>\n   /// ElementType to IFC handle key for dictionary comparer\n   /// </summary>\n   public sealed class ElementTypeKey : Tuple<ElementType, IFCEntityType, string>\n   {\n      public ElementTypeKey(ElementType elementType, IFCExportInfoPair exportAs) : base(elementType, exportAs.ExportType, exportAs.GetPredefinedTypeOrDefault()) { }\n   }\n\n   /// <summary>\n   /// Equality test for the ElementType IFC handle key comparer\n   /// </summary>\n   internal class TypeHndKeyCompare : IEqualityComparer<ElementTypeKey>\n   {\n      public bool Equals(ElementTypeKey key1, ElementTypeKey key2)\n      {\n         if (key1.Item1.Id == key2.Item1.Id\n            && key1.Item2 == key2.Item2\n            && string.Equals(key1.Item3, key2.Item3, StringComparison.InvariantCultureIgnoreCase))\n            return true;\n         else\n            return false;\n      }\n\n      public int GetHashCode(ElementTypeKey key)\n      {\n         int hash = 23;\n         hash = hash * 31 + key.Item1.Id.GetHashCode();\n         hash = hash * 31 + (int) key.Item2;\n         if (key.Item3 != null)\n            hash = hash * 31 + key.Item3.GetHashCode();\n         return hash;\n      }\n   }\n\n   internal class ElementTypeComparer : IEqualityComparer<ElementType>\n   {\n      public bool Equals(ElementType key1, ElementType key2)\n      {\n         if (key1.Id == key2.Id)\n            return true;\n         else\n            return false;\n      }\n\n      public int GetHashCode(ElementType key)\n      {\n         int hash = key.Id.GetHashCode();\n         return hash;\n      }\n   }\n\n   /// <summary>\n   /// Used to keep a cache of a mapping of an ElementType to a handle.\n   /// This is specially handled because the same type can be assigned to different IFC entities \n   /// based on parameter settings.\n   /// </summary>\n   public class ElementTypeToHandleCache\n   {\n      static TypeHndKeyCompare keyComparer = new TypeHndKeyCompare();\n\n      /// <summary>\n      /// The dictionary mapping from an ElementType to an  handle.\n      /// The key is made up by ElementId, IFC entity to export to, and the predefinedtype. PredefinedType will be assigned to a value \"NULL\" for the default if not specified\n      /// </summary>\n      private Dictionary<ElementTypeKey, IFCAnyHandle> ElementTypeToHandleDictionary { get; set; } = new(keyComparer);\n      private Dictionary<IFCAnyHandle, ElementTypeKey> HandleToElementTypeDictionary { get; set; } = new();\n      private HashSet<ElementType> RegisteredElementType { get; set; } = new(new ElementTypeComparer());\n\n      /// <summary>\n      /// Finds the handle from the dictionary.\n      /// </summary>\n      /// <param name=\"elementId\">The element elementId.</param>\n      /// <returns>The handle.</returns>\n      public IFCAnyHandle Find(ElementType elementType, IFCExportInfoPair exportType)\n      {\n         IFCAnyHandle handle;\n         var key = new ElementTypeKey(elementType, exportType);\n         if (ElementTypeToHandleDictionary.TryGetValue(key, out handle))\n         {\n            return handle;\n         }\n         return null;\n      }\n\n      /// <summary>\n      /// Find registered type and predefinedType by a type handle\n      /// </summary>\n      /// <param name=\"typeHnd\">the type handle</param>\n      /// <returns>ElementTypeKey if found</returns>\n      public ElementTypeKey Find(IFCAnyHandle typeHnd)\n      {\n         ElementTypeKey etKey;\n         if (HandleToElementTypeDictionary.TryGetValue(typeHnd, out etKey))\n         {\n            return etKey;\n         }\n         return null;\n      }\n\n      /// <summary>\n      /// CHeck whether an ElementType has been registered\n      /// </summary>\n      /// <param name=\"elType\">the ElementType</param>\n      /// <returns>true/false</returns>\n      public bool IsRegistered(ElementType elType)\n      {\n         if (RegisteredElementType.Contains(elType))\n            return true;\n         return false;\n      }\n\n      /// <summary>\n      /// Removes invalid handles from the cache.\n      /// </summary>\n      /// <param name=\"elementIds\">The element ids.</param>\n      /// <param name=\"expectedType\">The expected type of the handles.</param>\n      public void RemoveInvalidHandles(ISet<ElementTypeKey> keys)\n      {\n         foreach (ElementTypeKey key in keys)\n         {\n            IFCAnyHandle handle;\n            if (ElementTypeToHandleDictionary.TryGetValue(key, out handle))\n            {\n               try\n               {\n                  bool isType = IFCAnyHandleUtil.IsSubTypeOf(handle, key.Item2);\n                  if (!isType)\n                     ElementTypeToHandleDictionary.Remove(key);\n               }\n               catch\n               {\n                  ElementTypeToHandleDictionary.Remove(key);\n               }\n            }\n         }\n      }\n\n      /// <summary>\n      /// Adds the handle to the dictionary.\n      /// </summary>\n      /// <param name=\"elementId\">The element elementId.</param>\n      /// <param name=\"handle\">The handle.</param>\n      public void Register(ElementType elementType, IFCExportInfoPair exportType, IFCAnyHandle handle)\n      {\n         var key = new ElementTypeKey(elementType, exportType);\n\n         if (ElementTypeToHandleDictionary.ContainsKey(key) || exportType.ExportType == IFCEntityType.UnKnown)\n            return;\n\n         ElementTypeToHandleDictionary[key] = handle;\n         HandleToElementTypeDictionary[handle] = key;\n         RegisteredElementType.Add(key.Item1);\n      }\n\n      public void Clear()\n      {\n         ElementTypeToHandleDictionary.Clear();\n         HandleToElementTypeDictionary.Clear();\n         RegisteredElementType.Clear();\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ExportOptionsCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing System.Globalization;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Extensions;\r\n\r\n\r\n// CQ_TODO: Better storage of pipe insulation options\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// The cache which holds all export options.\r\n   /// </summary>\r\n   public class ExportOptionsCache\r\n   {\r\n      /// <summary>\r\n      /// The pointer to the host document, set when exporting links as separate\r\n      /// IFC files.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// For active-view only export to work when exporting links as separate files,\r\n      /// we need access to the host document.  However, this can't be passed using\r\n      /// standard methods.  So we have a static pointer that can be set.  It is only\r\n      /// expected to be valid when exporting links as separate files.\r\n      /// </remarks>\r\n      public static Document HostDocument { get; set; } = null;\r\n\r\n      public SiteTransformBasis SiteTransformation { get; set; } = SiteTransformBasis.Shared;\r\n\r\n      public enum ExportTessellationLevel\r\n      {\r\n         ExtraLow = 1,\r\n         Low = 2,\r\n         Medium = 3,\r\n         High = 4\r\n      }\r\n\r\n      public COBieCompanyInfo COBieCompanyInfo { get; set; }\r\n\r\n      public COBieProjectInfo COBieProjectInfo { get; set; }\r\n\r\n      public IFCFileHeaderItem FileHeaderItem \r\n      { \r\n         get \r\n         { \r\n            return OptionsUtil.FileHeaderIFC; \r\n         } \r\n      }\r\n\r\n      /// <summary>\r\n      /// Always export floors and roofs as a single entity unless exporting parts.\r\n      /// </summary>\r\n      public bool ExportHostAsSingleEntity { get; private set; } = false;\r\n\r\n      /// <summary>\r\n      /// If set, set the IfcOwnerHistory LastModified attribute to be the Author in Project Information.\r\n      /// </summary>\r\n      public bool OwnerHistoryLastModified { get; private set; } = false;\r\n\r\n      public bool ExportBarsInUniformSetsAsSeparateIFCEntities { get; private set; } = false;\r\n\r\n      public KnownERNames ExchangeRequirement { get; set; } = KnownERNames.NotDefined;\r\n\r\n      public KnownFacilityTypes FacilityType { get; set; } = KnownFacilityTypes.Building;\r\n\r\n      public string FacilityPredefinedType { get; set; } = null;\r\n\r\n      public string GeoRefCRSName { get; private set; }\r\n\r\n      public string GeoRefCRSDesc { get; private set; }\r\n\r\n      public string GeoRefEPSGCode { get; private set; }\r\n\r\n      public string GeoRefGeodeticDatum { get; private set; }\r\n\r\n      public string GeoRefMapUnit { get; private set; }\r\n\r\n      /// <summary>\r\n      /// If we are exporting a linked file as a separate document and using a filter view, \r\n      /// contains the element id of the filter view in the host document.\r\n      /// </summary>\r\n      public ElementId HostViewId { get; private set; } = ElementId.InvalidElementId;\r\n\r\n      public bool IncludeSteelElements { get; set; }\r\n\r\n      public IDictionary<long, string> FederatedLinkInfo { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Public default constructor.\r\n      /// </summary>\r\n      public ExportOptionsCache()\r\n      {\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// de-serialize vector passed from UI trough options \r\n      /// </summary>\r\n      private static XYZ ParseXYZ(string value)\r\n      {\r\n         XYZ retVal = null;\r\n\r\n         //split string to components by removing seprator characters\r\n         string[] separator = [ \",\", \"(\", \")\", \" \" ];\r\n         string[] sList = [ \"\", \"\", \"\" ];\r\n         sList = value.Split(separator, StringSplitOptions.RemoveEmptyEntries);\r\n         //should remain only 3 values if everything is OK\r\n\r\n         try\r\n         {\r\n            // XYZ values are serialized in Revit using C++ format, which seems to use invariant culture.\r\n            // Better yet would be not to pass doubles as strings, but this is a fairly limited use and\r\n            // easily worked around here.\r\n            double valX = double.Parse(sList[0], CultureInfo.InvariantCulture); //parsing values\r\n            double valY = double.Parse(sList[1], CultureInfo.InvariantCulture);\r\n            double valZ = double.Parse(sList[2], CultureInfo.InvariantCulture);\r\n            //if no exception then put it in return value\r\n            retVal = new(valX, valY, valZ);\r\n         }\r\n         catch (FormatException)\r\n         {\r\n\r\n         }\r\n         //return null if there is a problem or a value \r\n         return retVal;\r\n      }\r\n\r\n      /// <summary>\r\n      /// de-serialize transform passed from UI trough options \r\n      /// </summary>\r\n      private static Transform ParseTransform(string value)\r\n      {\r\n         Transform retVal = null;\r\n\r\n         try\r\n         {\r\n            //spit string by separator; it should remain 4 items\r\n            string[] separator = [ \";\" ];\r\n            string[] sList = [ \"\", \"\", \"\", \"\" ];\r\n\r\n            sList = value.Split(separator, StringSplitOptions.RemoveEmptyEntries);\r\n            Transform tr = new(Transform.Identity);\r\n            // parse each item in part\r\n            tr.Origin = ParseXYZ(sList[0]);\r\n            tr.BasisX = ParseXYZ(sList[1]);\r\n            tr.BasisY = ParseXYZ(sList[2]);\r\n            tr.BasisZ = ParseXYZ(sList[3]);\r\n            // verify if value was correctly parsed\r\n            if (tr.Origin != null && tr.BasisX != null &&\r\n                tr.BasisY != null && tr.BasisZ != null)\r\n               retVal = tr;\r\n         }\r\n         catch\r\n         {\r\n            retVal = null;\r\n         }\r\n\r\n         //return value\r\n         return retVal;\r\n      }\r\n\r\n      private static ElementId ParseElementId(String singleElementValue)\r\n      {\r\n         ElementId elementId;\r\n         if (ElementId.TryParse(singleElementValue, out elementId))\r\n         {\r\n            return elementId;\r\n         }\r\n         else\r\n         {\r\n            // Error - the option supplied could not be mapped to int.\r\n            // TODO: consider logging this error later and handling results better.\r\n            throw new Exception(\"String did not map to a usable element id\");\r\n         }\r\n      }\r\n\r\n      private static List<ElementId> ParseElementIds(string elementsToExportValue)\r\n      {\r\n         string[] elements = elementsToExportValue.Split(';');\r\n         List<ElementId> ids = [];\r\n\r\n         foreach (string element in elements)\r\n         {\r\n            ElementId elementId;\r\n            if (ElementId.TryParse(element, out elementId))\r\n            {\r\n               ids.Add(elementId);\r\n            }\r\n            else\r\n            {\r\n               // Error - the option supplied could not be mapped to int.\r\n               // TODO: consider logging this error later and handling results better.\r\n               throw new Exception(\"Substring \" + element + \" did not map to a usable element id\");\r\n            }\r\n         }\r\n         return ids;\r\n      }\r\n\r\n      private static IDictionary<long, string> ParseFederatedLinkInfo(\r\n         string federatedInfoString)\r\n      {\r\n         if (federatedInfoString == null)\r\n            return null;\r\n\r\n         SortedDictionary<long, string> federatedLinkInfo = new();\r\n\r\n         string[] idsAndGuids = federatedInfoString.Split(';');\r\n         foreach (string idAndGuid in idsAndGuids)\r\n         {\r\n            if (idAndGuid == null)\r\n               continue;\r\n\r\n            string[] idGuidPair = idAndGuid.Split(',');\r\n            if (idGuidPair.Count() != 2)\r\n               continue;\r\n\r\n            ElementId elementId;\r\n            if (!ElementId.TryParse(idGuidPair[0], out elementId))\r\n               continue;\r\n\r\n            if (federatedLinkInfo.ContainsKey(elementId.Value))\r\n               continue;\r\n\r\n            if (string.IsNullOrWhiteSpace(idGuidPair[1]))\r\n               continue;\r\n\r\n            federatedLinkInfo[elementId.Value] = idGuidPair[1];\r\n         }\r\n\r\n         return federatedLinkInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a new export options cache from the data in the ExporterIFC passed from Revit.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC handle passed during export.</param>\r\n      /// <param name=\"document\">The current document.</param>\r\n      /// <param name=\"filterView\">The optional filter view.</param>\r\n      /// <returns>The new cache.</returns>\r\n      public static ExportOptionsCache Create(ExporterIFC exporterIFC, Document document, View filterView)\r\n      {\r\n         IDictionary<string, string> options = exporterIFC.GetOptions();\r\n\r\n         ExportOptionsCache cache = new();\r\n         cache.FileVersion = exporterIFC.FileVersion;\r\n         cache.FullFileName = exporterIFC.FileName;\r\n         cache.FileNameOnly = Path.GetFileName(cache.FullFileName);\r\n         cache.WallAndColumnSplitting = exporterIFC.WallAndColumnSplitting;\r\n         cache.SpaceBoundaryLevel = exporterIFC.SpaceBoundaryLevel;\r\n         // Export Part element only if 'Current View Only' is checked and 'Show Parts' is selected. Or if it is exported as IFC4RV\r\n         cache.ExportParts = (filterView != null && filterView.PartsVisibility == PartsVisibility.ShowPartsOnly);\r\n         cache.ExportPartsAsBuildingElementsOverride = null;\r\n         cache.ExportAnnotationsOverride = null;\r\n         cache.ExportCeilingGrids = false;\r\n\r\n         // We are going to default to \"true\" for IncludeSteelElements to allow the default API\r\n         // export to match the default UI.\r\n         bool? includeSteelElements = OptionsUtil.GetNamedBooleanOption(options, \"IncludeSteelElements\");\r\n         cache.IncludeSteelElements = includeSteelElements.HasValue && includeSteelElements.Value;\r\n\r\n         if (filterView == null)\r\n         {\r\n            // if the filter view is null, but we have a HostViewId set, that means that we are\r\n            // exporting a link as a separate file, and need to get the view from the host\r\n            // document.\r\n            long? filterViewIdInt = OptionsUtil.GetNamedInt64Option(options, \"HostViewId\", false);\r\n            if (filterViewIdInt.HasValue)\r\n            {\r\n               cache.HostViewId = new ElementId(filterViewIdInt.Value);\r\n               cache.FilterViewForExport = HostDocument?.GetElement(cache.HostViewId) as View;\r\n            }\r\n         }\r\n         else\r\n         {\r\n            // There is a bug in the native code that doesn't allow us to cast the filterView to\r\n            // any sub-type of View.  Work around this by re-getting the element pointer.\r\n            cache.FilterViewForExport = filterView?.Document.GetElement(filterView.Id) as View;\r\n         }\r\n\r\n         cache.ExportBoundingBoxOverride = null;\r\n         cache.IncludeSiteElevation = false;\r\n\r\n         cache.PropertySetOptions = PropertySetOptions.Create(exporterIFC, document, cache.FileVersion);\r\n\r\n         string use2DRoomBoundary = Environment.GetEnvironmentVariable(\"Use2DRoomBoundaryForRoomVolumeCalculationOnIFCExport\");\r\n         bool? use2DRoomBoundaryOption = OptionsUtil.GetNamedBooleanOption(options, \"Use2DRoomBoundaryForVolume\");\r\n         cache.Use2DRoomBoundaryForRoomVolumeCreation =\r\n             ((use2DRoomBoundary != null && use2DRoomBoundary == \"1\") ||\r\n             cache.ExportAs2x2 ||\r\n             (use2DRoomBoundaryOption != null && use2DRoomBoundaryOption.GetValueOrDefault()));\r\n\r\n         bool? exportAdvancedSweptSolids = OptionsUtil.GetNamedBooleanOption(options, \"ExportAdvancedSweptSolids\");\r\n         cache.ExportAdvancedSweptSolids = (exportAdvancedSweptSolids.HasValue) ? exportAdvancedSweptSolids.Value : false;\r\n\r\n         string exchangeRequirementString = OptionsUtil.GetNamedStringOption(options, \"ExchangeRequirement\");\r\n         if (Enum.TryParse(exchangeRequirementString, out KnownERNames exchangeRequirment))\r\n         {\r\n            cache.ExchangeRequirement = exchangeRequirment;\r\n         }\r\n\r\n         string facilityTypeString = OptionsUtil.GetNamedStringOption(options, \"FacilityType\");\r\n         if (Enum.TryParse(facilityTypeString, out KnownFacilityTypes facilityType) &&\r\n            facilityType != KnownFacilityTypes.NotDefined)\r\n         {\r\n            cache.FacilityType = facilityType;\r\n         }\r\n\r\n         cache.FacilityPredefinedType = OptionsUtil.GetNamedStringOption(options, \"FacilityPredefinedType\");\r\n         \r\n         // Set GUIDOptions here.\r\n         {\r\n            // This option should be rarely used, and is only for consistency with old files.  As such, it is set by environment variable only.\r\n            string use2009GUID = Environment.GetEnvironmentVariable(\"Assign2009GUIDToBuildingStoriesOnIFCExport\");\r\n            cache.GUIDOptions.Use2009BuildingStoreyGUIDs = (use2009GUID != null && use2009GUID == \"1\");\r\n\r\n            bool? allowGUIDParameterOverride = OptionsUtil.GetNamedBooleanOption(options, \"AllowGUIDParameterOverride\");\r\n            if (allowGUIDParameterOverride != null)\r\n               cache.GUIDOptions.AllowGUIDParameterOverride = allowGUIDParameterOverride.Value;\r\n\r\n            bool? storeIFCGUID = OptionsUtil.GetNamedBooleanOption(options, \"StoreIFCGUID\");\r\n            if (storeIFCGUID != null)\r\n               cache.GUIDOptions.StoreIFCGUID = storeIFCGUID.Value;\r\n         }\r\n\r\n         // Set NamingOptions here.\r\n         cache.NamingOptions = new NamingOptions();\r\n         {\r\n            bool? useFamilyAndTypeNameForReference = OptionsUtil.GetNamedBooleanOption(options, \"UseFamilyAndTypeNameForReference\");\r\n            cache.NamingOptions.UseFamilyAndTypeNameForReference =\r\n                (useFamilyAndTypeNameForReference != null) && useFamilyAndTypeNameForReference.GetValueOrDefault();\r\n\r\n            bool? useVisibleRevitNameAsEntityName = OptionsUtil.GetNamedBooleanOption(options, \"UseVisibleRevitNameAsEntityName\");\r\n            cache.NamingOptions.UseVisibleRevitNameAsEntityName =\r\n                (useVisibleRevitNameAsEntityName != null) && useVisibleRevitNameAsEntityName.GetValueOrDefault();\r\n\r\n            bool? useOnlyTypeNameForIfcType = OptionsUtil.GetNamedBooleanOption(options, \"UseTypeNameOnlyForIfcType\");\r\n            cache.NamingOptions.UseTypeNameOnlyForIfcType =\r\n                (useOnlyTypeNameForIfcType != null) && useOnlyTypeNameForIfcType.GetValueOrDefault();\r\n         }\r\n\r\n         bool? exportHostAsSingleEntity = OptionsUtil.GetNamedBooleanOption(options, \"ExportHostAsSingleEntity\");\r\n         cache.ExportHostAsSingleEntity = exportHostAsSingleEntity.GetValueOrDefault(false);\r\n\r\n         bool? ownerHistoryLastModified = OptionsUtil.GetNamedBooleanOption(options, \"OwnerHistoryLastModified\");\r\n         cache.OwnerHistoryLastModified = ownerHistoryLastModified.GetValueOrDefault(false);\r\n\r\n         bool? exportBarsInUniformSetsAsSeparateIFCEntities = OptionsUtil.GetNamedBooleanOption(options, \"ExportBarsInUniformSetsAsSeparateIFCEntities\");\r\n         cache.ExportBarsInUniformSetsAsSeparateIFCEntities = exportBarsInUniformSetsAsSeparateIFCEntities.GetValueOrDefault(false);\r\n\r\n         // \"SingleElement\" export option - useful for debugging - only one input element will be processed for export\r\n         if (options.TryGetValue(\"SingleElement\", out string singleElementValue))\r\n         {\r\n            ElementId elementId = ParseElementId(singleElementValue);\r\n\r\n            List<ElementId> ids = [ elementId ];\r\n            cache.ElementsForExport = ids;\r\n         }\r\n         else if (options.TryGetValue(\"SingleElementGeometry\", out string singleElementGeometryValue))\r\n         {\r\n            ElementId elementId = ParseElementId(singleElementGeometryValue);\r\n\r\n            List<ElementId> ids = [elementId];\r\n            cache.ElementsForExport = ids;\r\n            cache.ExportGeometryOnly = true;\r\n         }\r\n         else if (options.TryGetValue(\"ElementsForExport\", out string elementsToExportValue))\r\n         {\r\n            List<ElementId> ids = ParseElementIds(elementsToExportValue);\r\n            cache.ElementsForExport = ids;\r\n         }\r\n\r\n         // \"ExportAnnotations\" override\r\n         cache.ExportAnnotationsOverride = OptionsUtil.GetNamedBooleanOption(options, \"Export2DElements\");\r\n\r\n         // \"ExportAnnotations\" override\r\n         cache.ExportCeilingGrids = OptionsUtil.GetNamedBooleanOption(options, \"ExportCeilingGrids\").GetValueOrDefault(false);\r\n\r\n         // \"ExportSeparateParts\" override\r\n         cache.ExportPartsAsBuildingElementsOverride = OptionsUtil.GetNamedBooleanOption(options, \"ExportPartsAsBuildingElements\");\r\n\r\n         // \"ExportBoundingBox\" override\r\n         cache.ExportBoundingBoxOverride = OptionsUtil.GetNamedBooleanOption(options, \"ExportBoundingBox\");\r\n\r\n         bool? exportRoomsInView = OptionsUtil.GetNamedBooleanOption(options, \"ExportRoomsInView\");\r\n         cache.ExportRoomsInView = exportRoomsInView != null ? exportRoomsInView.Value : false;\r\n\r\n         // Include IFCSITE elevation in the site local placement origin\r\n         bool? includeIfcSiteElevation = OptionsUtil.GetNamedBooleanOption(options, \"IncludeSiteElevation\");\r\n         cache.IncludeSiteElevation = includeIfcSiteElevation != null ? includeIfcSiteElevation.Value : false;\r\n\r\n         string siteTransformation = OptionsUtil.GetNamedStringOption(options, \"SitePlacement\");\r\n         if (!string.IsNullOrEmpty(siteTransformation))\r\n         {\r\n            if (Enum.TryParse(siteTransformation, out SiteTransformBasis trfBasis))\r\n               cache.SiteTransformation = trfBasis;\r\n         }\r\n         // We have two ways to get information about level of detail:\r\n         // 1. The old Boolean \"UseCoarseTessellation\".\r\n         // 2. The new double \"TessellationLevelOfDetail\".\r\n         // We will combine these both into a LevelOfDetail integer that can be used by different elements differently.\r\n         // The scale is from 1 (Extra Low) to 4 (High), where :\r\n         // UseCoarseTessellation = true -> 1, UseCoarseTessellation = false -> 4\r\n         // TessellationLevelOfDetail * 4 = LevelOfDetail\r\n         // TessellationLevelOfDetail takes precedence over UseCoarseTessellation.\r\n\r\n         cache.LevelOfDetail = ExportTessellationLevel.Low;\r\n\r\n         bool? useCoarseTessellation = OptionsUtil.GetNamedBooleanOption(options, \"UseCoarseTessellation\");\r\n         if (useCoarseTessellation.HasValue)\r\n            cache.LevelOfDetail = useCoarseTessellation.Value ? ExportTessellationLevel.ExtraLow : ExportTessellationLevel.High;\r\n\r\n         double? tessellationLOD = OptionsUtil.GetNamedDoubleOption(options, \"TessellationLevelOfDetail\");\r\n         if (tessellationLOD.HasValue)\r\n         {\r\n            int levelOfDetail = (int)(tessellationLOD.Value * 4.0 + 0.5);\r\n            // Ensure LOD is between 1 to 4, inclusive.\r\n            levelOfDetail = Math.Min(Math.Max(levelOfDetail, 1), 4);\r\n            cache.LevelOfDetail = (ExportTessellationLevel)levelOfDetail;\r\n         }\r\n\r\n         bool? useOnlyTriangulation = OptionsUtil.GetNamedBooleanOption(options, \"UseOnlyTriangulation\");\r\n         cache.UseOnlyTriangulation = useOnlyTriangulation.HasValue ? useOnlyTriangulation.Value : false;\r\n\r\n         /// Allow exporting a mix of extrusions and BReps as a solid model, if possible.\r\n         bool? canExportSolidModelRep = OptionsUtil.GetNamedBooleanOption(options, \"ExportSolidModelRep\");\r\n         cache.CanExportSolidModelRep = canExportSolidModelRep != null ? canExportSolidModelRep.Value : false;\r\n\r\n         // Set the phase we are exporting\r\n         cache.ActivePhaseId = ElementId.InvalidElementId;\r\n\r\n         string activePhaseElementValue;\r\n         if (options.TryGetValue(\"ActivePhaseId\", out activePhaseElementValue))\r\n            cache.ActivePhaseId = ParseElementId(activePhaseElementValue);\r\n\r\n         // If we have a filter view, the phase to be exported is only the phase of the\r\n         // view.  So we ignore any phase sent.\r\n         if (cache.FilterViewForExport != null)\r\n         {\r\n            Parameter currPhase = cache.FilterViewForExport.get_Parameter(BuiltInParameter.VIEW_PHASE);\r\n            if (currPhase != null)\r\n               cache.ActivePhaseId = currPhase.AsElementId();\r\n         }\r\n\r\n         // \"FileType\" - note - setting is not respected yet\r\n         ParseFileType(options, cache);\r\n\r\n         cache.SelectedConfigName = OptionsUtil.GetNamedStringOption(options, \"ConfigName\");\r\n\r\n         cache.SelectedParametermappingTableName = OptionsUtil.GetNamedStringOption(options, \"ExportUserDefinedParameterMappingFileName\");\r\n\r\n         cache.CategoryMappingTemplateName = OptionsUtil.GetNamedStringOption(options, \"CategoryMapping\");\r\n\r\n         // This is for the option to export links as part of a federated export.\r\n         string federatedInfoString = OptionsUtil.GetNamedStringOption(options, \"FederatedLinkInfo\");\r\n         cache.FederatedLinkInfo = ParseFederatedLinkInfo(federatedInfoString);\r\n\r\n         // This is for the option to export links as separate IFC files.\r\n         string exportLinkedFileAsString = OptionsUtil.GetNamedStringOption(options, \"ExportingLinks\");\r\n         if (!string.IsNullOrWhiteSpace(exportLinkedFileAsString))\r\n         {\r\n            if (Enum.TryParse(exportLinkedFileAsString, out LinkedFileExportAs linkedFileExportAs))\r\n               cache.ExportLinkedFileAs = linkedFileExportAs;\r\n         }\r\n\r\n         if (cache.ExportingSeparateLink())\r\n         {\r\n            int? numInstances = OptionsUtil.GetNamedIntOption(options, \"NumberOfExportedLinkInstances\");\r\n            for (int ii = 0; ii < numInstances; ii++)\r\n            {\r\n               string optionName = (ii == 0) ? \"ExportLinkInstanceTransform\" : \"ExportLinkInstanceTransform\" + (ii + 1).ToString();\r\n               string aLinkInstanceTransform = OptionsUtil.GetNamedStringOption(options, optionName);\r\n\r\n               // We don't expect this to fail.  But in case it does, all it means is that we\r\n               // can't filter out hidden elements.\r\n               optionName = (ii == 0) ? \"ExportLinkId\" : \"ExportLinkId\" + (ii + 1).ToString();\r\n               long? linkIdInt = OptionsUtil.GetNamedInt64Option(options, optionName, false);\r\n               ExporterStateManager.CurrentLinkId = \r\n                  new ElementId(linkIdInt.HasValue ? linkIdInt.Value : -1);\r\n\r\n               Transform currTransform = null;\r\n               if (!string.IsNullOrEmpty(aLinkInstanceTransform))\r\n               {\r\n                  //reconstruct transform\r\n                  Transform tr = ParseTransform(aLinkInstanceTransform);\r\n                  //set to cache\r\n                  if (tr != null)\r\n                     currTransform = tr;\r\n               }\r\n\r\n               string fileName = null;\r\n\r\n               if (ii > 0)\r\n               {\r\n                  optionName = \"ExportLinkInstanceFileName\" + (ii + 1).ToString();\r\n                  fileName = OptionsUtil.GetNamedStringOption(options, optionName);\r\n               }\r\n\r\n               if (currTransform == null)\r\n                  cache.LinkInstanceInfos.Add(new Tuple<string, Transform>(fileName, Transform.Identity));\r\n               else\r\n                  cache.LinkInstanceInfos.Add(new Tuple<string, Transform>(fileName, currTransform));\r\n            }\r\n         }\r\n\r\n         cache.ExcludeFilter = OptionsUtil.GetNamedStringOption(options, \"ExcludeFilter\");\r\n\r\n         cache.GeoRefCRSName = OptionsUtil.GetNamedStringOption(options, \"GeoRefCRSName\");\r\n         cache.GeoRefCRSDesc = OptionsUtil.GetNamedStringOption(options, \"GeoRefCRSDesc\");\r\n         cache.GeoRefEPSGCode = OptionsUtil.GetNamedStringOption(options, \"GeoRefEPSGCode\");\r\n         cache.GeoRefGeodeticDatum = OptionsUtil.GetNamedStringOption(options, \"GeoRefGeodeticDatum\");\r\n         cache.GeoRefMapUnit = OptionsUtil.GetNamedStringOption(options, \"GeoRefMapUnit\");\r\n\r\n         return cache;\r\n      }\r\n\r\n      public void UpdateForDocument(ExporterIFC exporterIFC, Document document, string guid)\r\n      {\r\n         ExporterCacheManager.BaseLinkedDocumentGUID = guid;\r\n         ExporterCacheManager.Document = document;\r\n\r\n         IDictionary<string, string> options = exporterIFC.GetOptions();\r\n\r\n         if (ActivePhaseId == ElementId.InvalidElementId)\r\n         {\r\n            PhaseArray phaseArray = document.Phases;\r\n            Phase lastPhase = phaseArray.get_Item(phaseArray.Size - 1);\r\n            ActivePhaseId = lastPhase.Id;\r\n            ActivePhaseElement = lastPhase;\r\n         }\r\n         else\r\n         {\r\n            ActivePhaseElement = document.GetElement(ActivePhaseId) as Phase;\r\n         }\r\n\r\n         bool? useActiveViewGeometry = OptionsUtil.GetNamedBooleanOption(options, \"UseActiveViewGeometry\");\r\n         UseActiveViewGeometry = useActiveViewGeometry.HasValue ? useActiveViewGeometry.Value : false;\r\n\r\n         if (UseActiveViewGeometry)\r\n         {\r\n            long? viewId = OptionsUtil.GetNamedInt64Option(options, \"ActiveViewId\", false);\r\n            ElementId activeViewId = viewId.HasValue ? new ElementId(viewId.Value) : ElementId.InvalidElementId;\r\n            View activeView = null;\r\n            try\r\n            {\r\n               activeView = document.GetElement(activeViewId) as View;\r\n            }\r\n            catch\r\n            {\r\n            }\r\n            ActiveView = activeView;\r\n         }\r\n\r\n         // Geo Reference info\r\n         ExporterCacheManager.SelectedSiteProjectLocation = null;\r\n         string selSite = OptionsUtil.GetNamedStringOption(options, \"SelectedSite\");\r\n         foreach (ProjectLocation pLoc in document.ProjectLocations.Cast<ProjectLocation>().ToList())\r\n         {\r\n            if (pLoc.Name.Equals(selSite))\r\n            {\r\n               ExporterCacheManager.SelectedSiteProjectLocation = pLoc;\r\n               break;\r\n            }\r\n         }\r\n\r\n         // Ensure the cache is set to the default (ActiveProjectLocation) if not set\r\n         ExporterCacheManager.SelectedSiteProjectLocation ??= document.ActiveProjectLocation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Utility for parsing IFC file type.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If the file type can't be retrieved from the options collection, it will parse the file name extension.\r\n      /// </remarks>\r\n      /// <param name=\"options\">The collection of named options for IFC export.</param>\r\n      /// <param name=\"cache\">The export options cache.</param>\r\n      private static void ParseFileType(IDictionary<String, String> options, ExportOptionsCache cache)\r\n      {\r\n         String fileTypeString;\r\n         if (options.TryGetValue(\"IFCFileType\", out fileTypeString))\r\n         {\r\n            IFCFileFormat fileType;\r\n            if (Enum.TryParse<IFCFileFormat>(fileTypeString, true, out fileType))\r\n            {\r\n               cache.IFCFileFormat = fileType;\r\n            }\r\n            else\r\n            {\r\n               // Error - the option supplied could not be mapped to ExportFileType.\r\n               // TODO: consider logging this error later and handling results better.\r\n               throw new Exception(\"Option 'FileType' did not match an existing IFCFileFormat value\");\r\n            }\r\n         }\r\n         else if (!string.IsNullOrEmpty(cache.FileNameOnly))\r\n         {\r\n            if (cache.FileNameOnly.EndsWith(\".ifcXML\")) //localization?\r\n            {\r\n               cache.IFCFileFormat = IFCFileFormat.IfcXML;\r\n            }\r\n            else if (cache.FileNameOnly.EndsWith(\".ifcZIP\"))\r\n            {\r\n               cache.IFCFileFormat = IFCFileFormat.IfcZIP;\r\n            }\r\n            else\r\n            {\r\n               cache.IFCFileFormat = IFCFileFormat.Ifc;\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The property set options.\r\n      /// </summary>\r\n      public PropertySetOptions PropertySetOptions\r\n      {\r\n         get;\r\n         set;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The file version.\r\n      /// Used in ExportIntializer to define the Property Sets.\r\n      /// Try not to use it outside of ExportOptionsCache except to initialize the Property Sets.\r\n      /// </summary>\r\n      public IFCVersion FileVersion { get; set; }\r\n\r\n      /// <summary>\r\n      /// The full file name, including path.\r\n      /// </summary>\r\n      public string FullFileName { get; set; }\r\n\r\n      /// <summary>\r\n      /// The file name, not the including path.\r\n      /// </summary>\r\n      public string FileNameOnly { get; set; }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema version being exported is IFC 2x2.\r\n      /// </summary>\r\n      public bool ExportAs2x2\r\n      {\r\n         get\r\n         {\r\n            return OptionsUtil.ExportAs2x2(FileVersion);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema version being exported is IFC 2x3 Coordination View 1.0.\r\n      /// </summary>\r\n      public bool ExportAs2x3CoordinationView1\r\n      {\r\n         get\r\n         {\r\n            return OptionsUtil.ExportAs2x3CoordinationView1(FileVersion);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema version being exported is IFC 2x3 Coordination View 2.0.\r\n      /// </summary>\r\n      public bool ExportAs2x3CoordinationView2\r\n      {\r\n         get\r\n         {\r\n            return OptionsUtil.ExportAs2x3CoordinationView2(FileVersion);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema version being exported is IFC 2x3 Extended FM Handover View (e.g., UK COBie).\r\n      /// </summary>\r\n      public bool ExportAs2x3ExtendedFMHandoverView\r\n      {\r\n         get\r\n         {\r\n            return OptionsUtil.ExportAs2x3ExtendedFMHandoverView(FileVersion);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema version and MVD being exported is IFC 2x3 Coordination View 2.0 or any IFC 4 MVD.\r\n      /// </summary>\r\n      /// <remarks>IFC 4 Coordination View 2.0 is not a real MVD; this was a placeholder and is obsolete.</remarks>\r\n      public bool ExportAsCoordinationView2\r\n      {\r\n         get\r\n         {\r\n            return OptionsUtil.ExportAsCoordinationView2(FileVersion);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the IFC schema version is older than IFC 4.\r\n      /// </summary>\r\n      public bool ExportAsOlderThanIFC4\r\n      {\r\n         get\r\n         {\r\n            return OptionsUtil.ExportAsOlderThanIFC4(FileVersion);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the IFC schema version is older than IFC 4x3.\r\n      /// </summary>\r\n      public bool ExportAsOlderThanIFC4x3\r\n      {\r\n         get\r\n         {\r\n            return OptionsUtil.ExportAsOlderThanIFC4x3(FileVersion);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the IFC schema version being exported is IFC 4.\r\n      /// </summary>\r\n      public bool ExportAs4\r\n      {\r\n         get\r\n         {\r\n            return OptionsUtil.ExportAs4(FileVersion);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema used is IFC 2x3.\r\n      /// </summary>\r\n      public bool ExportAs2x3\r\n      {\r\n         get\r\n         {\r\n            return OptionsUtil.ExportAs2x3(FileVersion);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema and MVD used is the IFC 2x3 GSA 2010 COBie specification.\r\n      /// </summary>\r\n      public bool ExportAsCOBIE\r\n      {\r\n         get\r\n         {\r\n            return OptionsUtil.ExportAsCOBIE(FileVersion);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema and MVD used is the IFC 4 Reference View.\r\n      /// </summary>\r\n      public bool ExportAs4ReferenceView\r\n      {\r\n         get\r\n         {\r\n            return OptionsUtil.ExportAs4ReferenceView(FileVersion);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema and MVD used is the IFC 4 Design Transfer View.\r\n      /// </summary>\r\n      public bool ExportAs4DesignTransferView\r\n      {\r\n         get\r\n         {\r\n            return OptionsUtil.ExportAs4DesignTransferView(FileVersion);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Option to be used for general IFC4 export (not specific to RV or DTV MVDs). Useful when there is a need to export entities that are not strictly valid within RV or DTV\r\n      /// It should work like IFC2x3, except that it will use IFC4 tessellated geometry instead of IFC2x3 BREP\r\n      /// </summary>\r\n      public bool ExportAs4General\r\n      {\r\n         get\r\n         {\r\n            return OptionsUtil.ExportAs4General(FileVersion);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Option for IFC4x3 export option\r\n      /// </summary>\r\n      public bool ExportAs4x3\r\n      {\r\n         get\r\n         {\r\n            return OptionsUtil.ExportAs4x3(FileVersion);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema and MVD used is the IFC 4.3 Design Transfer View.\r\n      /// </summary>\r\n      public bool ExportAs4x3DesignTransferView\r\n      {\r\n         get\r\n         {\r\n            return OptionsUtil.ExportAs4x3DesignTransferView(FileVersion);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the schema and MVD used is the IFC 4.3 Reference View.\r\n      /// </summary>\r\n      public bool ExportAs4x3ReferenceView\r\n      {\r\n         get\r\n         {\r\n            return OptionsUtil.ExportAs4x3ReferenceView(FileVersion);\r\n         }\r\n      }      \r\n\r\n      /// <summary>\r\n      /// Identifies if the schema and MVD used is the IFC 2x3 COBie 2.4 Design Deliverable.\r\n      /// </summary>\r\n      public bool ExportAs2x3COBIE24DesignDeliverable\r\n      {\r\n         get\r\n         {\r\n            return OptionsUtil.ExportAs2x3COBIE24DesignDeliverable(FileVersion);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Cache variable for the export annotations override (if set independently via the UI or API inputs)\r\n      /// </summary>\r\n      private bool? ExportAnnotationsOverride { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Cache variable for the export ceiling grids override (if set independently via the UI or API inputs)\r\n      /// </summary>\r\n      public bool ExportCeilingGrids { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Identifies if the file version being exported supports annotations.\r\n      /// </summary>\r\n      public bool ExportAnnotations\r\n      {\r\n         get\r\n         {\r\n            if (ExportAnnotationsOverride != null)\r\n               return (bool)ExportAnnotationsOverride;\r\n            return (!ExportAs2x2 && !ExportAsCoordinationView2);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if we allow exporting advanced swept solids (vs. BReps if false).\r\n      /// </summary>\r\n      public bool ExportAdvancedSweptSolids\r\n      {\r\n         get;\r\n         set;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Whether or not split walls and columns.\r\n      /// </summary>\r\n      public bool WallAndColumnSplitting\r\n      {\r\n         get;\r\n         set;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The space boundary level.\r\n      /// </summary>\r\n      public int SpaceBoundaryLevel { get; set; } = 0;\r\n\r\n      /// <summary>\r\n      /// True to use the active view when generating geometry.\r\n      /// False to use default export options.\r\n      /// </summary>\r\n      public bool UseActiveViewGeometry\r\n      {\r\n         get;\r\n         set;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Whether or not export the Part element from host.\r\n      /// Export Part element only if 'Current View Only' is checked and 'Show Parts' is selected. \r\n      /// </summary>\r\n      public bool ExportParts\r\n      {\r\n         get;\r\n         set;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Cache variable for the ExportPartsAsBuildingElements override (if set independently via the UI)\r\n      /// </summary>\r\n      public bool? ExportPartsAsBuildingElementsOverride\r\n      {\r\n         get;\r\n         set;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Whether or not export the Parts as independent building elements.\r\n      /// Only if allows export parts and 'Export parts as building elements' is selected. \r\n      /// </summary>\r\n      public bool ExportPartsAsBuildingElements\r\n      {\r\n         get\r\n         {\r\n            if (ExportPartsAsBuildingElementsOverride != null)\r\n               return (bool)ExportPartsAsBuildingElementsOverride;\r\n            return false;\r\n         }\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Cache variable for the ExportBoundingBox override (if set independently via the UI)\r\n      /// </summary>\r\n      public bool? ExportBoundingBoxOverride\r\n      {\r\n         get;\r\n         set;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Whether or not export the bounding box.\r\n      /// </summary>\r\n      public bool ExportBoundingBox\r\n      {\r\n         get\r\n         {\r\n            // if the option is set by alternate UI, return the setting in UI.\r\n            if (ExportBoundingBoxOverride != null)\r\n               return (bool)ExportBoundingBoxOverride;\r\n            // otherwise export the bounding box only if it is GSA export.\r\n            else if (FileVersion == IFCVersion.IFCCOBIE)\r\n               return true;\r\n            return false;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Whether or not include IFCSITE elevation in the site local placement origin.\r\n      /// </summary>\r\n      public bool IncludeSiteElevation\r\n      {\r\n         get;\r\n         set;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The level of detail to use when exporting geometry.  Different elements will use this differently.\r\n      /// </summary>\r\n      public ExportTessellationLevel LevelOfDetail\r\n      {\r\n         get;\r\n         set;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The option to leave tessellation results as triangulation and not optimized into polygonal faceset (supported from IFC4_ADD2)\r\n      /// </summary>\r\n      public bool UseOnlyTriangulation\r\n      {\r\n         get;\r\n         set;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The version of the exporter.\r\n      /// </summary>\r\n      public string ExporterVersion\r\n      {\r\n         get\r\n         {\r\n            string assemblyFile = typeof(Revit.IFC.Export.Exporter.Exporter).Assembly.Location;\r\n            string exporterVersion = \"Unknown Exporter version\";\r\n            if (File.Exists(assemblyFile))\r\n            {\r\n               exporterVersion = FileVersionInfo.GetVersionInfo(assemblyFile).FileVersion;\r\n            }\r\n            return exporterVersion;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// A bare-bones IFC export that include only BRep geometry, generally for\r\n      /// a specific set of elements.\r\n      /// </summary>\r\n      public bool ExportGeometryOnly { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// A collection of elements from which to export (before filtering is applied).  If empty, all elements in the document\r\n      /// are used as the initial set of elements before filtering is applied.\r\n      /// </summary>\r\n      public List<ElementId> ElementsForExport { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// The filter view for export.  \r\n      /// </summary>\r\n      /// <remarks>This is the optional view that determines which elements to\r\n      /// export based on visibility settings for the view.  It does not control\r\n      /// what geometry is exported for the element.</remarks>\r\n      public View FilterViewForExport\r\n      {\r\n         get;\r\n         set;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines how to generate space volumes on export.  True means that we use the 2D room boundary and extrude it upwards based\r\n      /// on the room height.  This is the method used in 2x2 and by user option.  False means using the room geometry.  The user option\r\n      /// is needed for certain governmental requirements, such as in Korea for non-residental buildings.\r\n      /// </summary>\r\n      public bool Use2DRoomBoundaryForRoomVolumeCreation\r\n      {\r\n         get;\r\n         set;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Contains options for controlling how IFC GUIDs are generated on export.\r\n      /// </summary>\r\n      public GUIDOptions GUIDOptions { get; } = new GUIDOptions();\r\n\r\n      /// <summary>\r\n      /// Contains options for setting how entity names are generated.\r\n      /// </summary>\r\n      public NamingOptions NamingOptions { get; set; }\r\n\r\n      /// <summary>\r\n      /// The file format to export.  Not used currently.\r\n      /// </summary>\r\n      // TODO: Connect this to the output file being written by the client.\r\n      public IFCFileFormat IFCFileFormat { get; set; }\r\n\r\n      /// <summary>\r\n      /// Select export Config Name from the UI\r\n      /// </summary>\r\n      public string SelectedConfigName { get; set; }\r\n\r\n      /// <summary>\r\n      /// Select export Config Name from the UI\r\n      /// </summary>\r\n      public string SelectedParametermappingTableName { get; set; }\r\n\r\n      /// <summary>\r\n      /// Allow exporting a mix of extrusions and BReps as a solid model, if possible.\r\n      /// </summary>\r\n      public bool CanExportSolidModelRep { get; set; }\r\n\r\n      /// <summary>\r\n      /// Specifies which phase id to export.  May be expanded to phases.\r\n      /// </summary>\r\n      public ElementId ActivePhaseId { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// The phase element corresponding to the phase id.\r\n      /// </summary>\r\n      public Phase ActivePhaseElement { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// The status of how to handle Revit link instances.\r\n      /// </summary>\r\n      public LinkedFileExportAs ExportLinkedFileAs { get; set; } = LinkedFileExportAs.DontExport;\r\n\r\n      ///<summary>\r\n      /// Returns true if we are exporting links as separate files.\r\n      /// </summary>\r\n      /// <returns>True if we are exporting links as separate files, false otherwise.</returns>\r\n      public bool ExportingSeparateLink() \r\n      {\r\n         return ExportLinkedFileAs == LinkedFileExportAs.ExportAsSeparate;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The table that contains Revit class to IFC entity mappings.\r\n      /// </summary>\r\n      public string CategoryMappingTemplateName { get; set; } = null;\r\n\r\n      private IList<Tuple<string, Transform>> LinkInstanceInfos { get; } = new List<Tuple<string, Transform>>();\r\n\r\n      /// <summary>\r\n      /// Get the number of RevitLinkInstance transforms for this export.\r\n      /// </summary>\r\n      /// <returns>The number of Revit Link Instance transforms for this export.</returns>\r\n      public int GetNumLinkInstanceInfos()\r\n      {\r\n         return LinkInstanceInfos?.Count ?? 0;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the file name of the link corresponding to the given index.\r\n      /// </summary>\r\n      /// <param name=\"idx\">The index</param>\r\n      /// <returns>The transform corresponding to the given index, or the Identity transform if out of range.</returns>\r\n      /// <remarks>Note that the file name for index 0 is not stored here, and returns null.</remarks>\r\n      public string GetLinkInstanceFileName(int idx)\r\n      {\r\n         if (idx < 1 || idx >= GetNumLinkInstanceInfos())\r\n            return null;\r\n\r\n         return LinkInstanceInfos[idx].Item1;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the transform corresponding to the given index.\r\n      /// </summary>\r\n      /// <param name=\"idx\">The index</param>\r\n      /// <returns>The transform corresponding to the given index, or the Identity transform if out of range.</returns>\r\n      public Transform GetUnscaledLinkInstanceTransform(int idx)\r\n      {\r\n         if (idx < 0 || idx >= GetNumLinkInstanceInfos())\r\n            return Transform.Identity;\r\n\r\n         Transform unscaledTransform = new Transform(LinkInstanceInfos[idx].Item2);\r\n         unscaledTransform.Origin = UnitUtil.UnscaleLength(unscaledTransform.Origin);\r\n         return unscaledTransform;\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Whether or not to export all the rooms in the view.\r\n      /// This option is only enabled if \"export elements visible in view\" is selected.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If ExportRoomsInView is true and section box is active: then every room whose bounding box intersects with the section box is exported,\r\n      /// otherwise if ExportRoomsInView is false and section box is not active then every room is exported.\r\n      /// However, if Room is set to \"Not Exported\" in IFC Option then none of the room will be exported whether ExportRoomsInView is true or not.\r\n      /// </remarks>\r\n      public bool ExportRoomsInView\r\n      {\r\n         get;\r\n         set;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The active view\r\n      /// </summary>\r\n      public View ActiveView\r\n      {\r\n         get;\r\n         set;\r\n      }\r\n\r\n      /// <summary>\r\n      /// To check whether a specified IFC Entity is listed in the Exclude Filter (from configuration)\r\n      /// </summary>\r\n      /// <param name=\"entity\">IFCEntityType enumeration representing the IFC entity concerned</param>\r\n      /// <returns>true if the entity found in the set</returns>\r\n      public bool IsElementInExcludeList(IFCEntityType entity)\r\n      {\r\n         return IsEntityInExcludeList(entity.ToString());\r\n      }\r\n\r\n      /// <summary>\r\n      /// To check whether a specified IFC Entity is listed in the Exclude Filter (from configuration)\r\n      /// </summary>\r\n      /// <param name=\"entity\">IFCEntityType enumeration representing the IFC entity concerned</param>\r\n      /// <returns>true if the entity found in the set</returns>\r\n      public bool IsEntityInExcludeList(string entityTypeName)\r\n      {\r\n         return ExcludeElementSet.Contains(entityTypeName);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check whether there is an Exclude Filter (from configuration)\r\n      /// </summary>\r\n      /// <returns>True if there are any entities excluded.</returns>\r\n      public bool HasExcludeList()\r\n      {\r\n         return ExcludeElementSet.Count > 0;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The exclude filter from the UI/configuration\r\n      /// </summary>\r\n      public string ExcludeFilter { get; set; }\r\n      HashSet<string> _excludesElementSet = null;\r\n\r\n      HashSet<string> ExcludeElementSet\r\n      {\r\n         get\r\n         {\r\n            if (_excludesElementSet != null)\r\n               return _excludesElementSet;\r\n\r\n            HashSet<string> exclSet = new HashSet<string>();\r\n            if (!string.IsNullOrEmpty(ExcludeFilter))\r\n            {\r\n               string[] eList = ExcludeFilter.Split(';');\r\n               foreach (string entityToFilter in eList)\r\n               {\r\n                  if (!string.IsNullOrWhiteSpace(entityToFilter))\r\n                  {\r\n                     exclSet.Add(entityToFilter);\r\n                  }\r\n               }\r\n            }\r\n            _excludesElementSet = exclSet;\r\n            return _excludesElementSet;\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ExportTypeOverrideHelper.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012-2016  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing Autodesk.Revit.DB;\nusing System;\n\nnamespace Revit.IFC.Export.Utility\n{\n   // Alias to make it easier to deal with ExportInfoCache.\n   using ExportTypeInfo = Tuple<IFCExportInfoPair, string, ExportTypeOverrideHelper>;\n\n   /// <summary>\n   /// This is a very simple class to allow an ElementExporter to override the \"GetExportType\" behavior.\n   /// The intent is to allow GetExportType() to return a valid contextual Export Type, so callers do not need to modify the Export Type\n   /// post-GetExportType().\n   /// Another OverrideHelper should be used if the Export Type needs to be updated.\n   /// </summary>\n   public abstract class ExportTypeOverrideHelper\n   {\n      /// <summary>\n      /// Constructor.\n      /// </summary>\n      /// <param name=\"element\">Element corresponding to Override Helper.</param>\n      public ExportTypeOverrideHelper()\n      {\n      }\n\n      /// <summary>\n      /// Allows derived class to do something contextual to set the ExportType of the Element in question.\n      /// </summary>\n      //public abstract (IFCExportInfoPair, string) ApplyOverride(IFCExportInfoPair ifcExportInfoPair, string enumTypeValue);\n\n      public abstract ExportTypeInfo ApplyOverride(ExportTypeInfo exportTypeInfo);\n\n      /// <summary>\n      /// Determines equivalence of Override Helpers based on Element Id.\n      /// </summary>\n      /// <param name=\"other\"></param>\n      /// <returns></returns>\n      public virtual bool Equals(ExportTypeOverrideHelper other)\n      {\n         return (other != null);\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ExporterCacheManager.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\n\r\nusing Autodesk.Revit.ApplicationServices;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\n\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   // Alias to make it easier to deal with ExportInfoCache.\r\n   using ExportTypeInfo = Tuple<IFCExportInfoPair, string, ExportTypeOverrideHelper>;\r\n   using ParameterMappingKey = Tuple<PropertySetupType, string, ElementId, string>;\r\n\r\n   /// <summary>\r\n   /// Manages caches necessary for IFC export.\r\n   /// </summary>\r\n   public class ExporterCacheManager\r\n   {\r\n      /// <summary>\r\n      /// The AllocatedGeometryObjectCache object.\r\n      /// </summary>\r\n      public static AllocatedGeometryObjectCache AllocatedGeometryObjectCache { get; protected set; } = new();\r\n\r\n      /// <summary>\r\n      /// The AreaSchemeCache object.\r\n      /// </summary>\r\n      public static Dictionary<ElementId, HashSet<IFCAnyHandle>> AreaSchemeCache = new();\r\n\r\n      /// <summary>\r\n      /// The AssemblyInstanceCache object.\r\n      /// </summary>\r\n      public static AssemblyInstanceCache AssemblyInstanceCache { get; private set; } = new();\r\n\r\n      public static AttributeCache AttributeCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The base guid to use for all entities when exporting, used when exporting linked documents.\r\n      /// </summary>\r\n      public static string BaseLinkedDocumentGUID { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Cache for Base Quantities that require separate calculation.\r\n      /// </summary>\r\n      public static Dictionary<IFCAnyHandle, HashSet<IFCAnyHandle>> BaseQuantitiesCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// A mapping of element ids to a material id determined by looking at element parameters.\r\n      /// </summary>\r\n      /// <summary>\r\n      /// The BeamSystemCache object.\r\n      /// </summary>\r\n      public static HashSet<ElementId> BeamSystemCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The IfcBuilding handle.\r\n      /// </summary>\r\n      public static IFCAnyHandle BuildingHandle { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// A cache to keep track of what beams can be exported as extrusions.\r\n      /// Strictly for performance issues.\r\n      /// </summary>\r\n      public static Dictionary<ElementId, bool> CanExportBeamGeometryAsExtrusionCache { get; private set; } = new();\r\n\r\n      private static IFCCategoryTemplate m_CategoryMappingTemplate = null;\r\n\r\n      /// <summary>\r\n      /// Ceiling and Space relationship cache. We need it to check whether a Ceiling should be contained in a Space later on when exporting Ceiling\r\n      /// </summary>\r\n      public static Dictionary<ElementId, IList<ElementId>> CeilingSpaceRelCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The CertifiedEntitiesAndPsetsCache\r\n      /// </summary>\r\n      public static IFCCertifiedEntitiesAndPSets CertifiedEntitiesAndPsetsCache { get; private set; } = new();\r\n\r\n      private static ClassificationCache m_ClassificationCache = null;\r\n\r\n      public static ClassificationLocationCache ClassificationLocationCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// Cache for additional Quantities or Properties to be created later with the other quantities\r\n      /// </summary>\r\n      public static Dictionary<IFCAnyHandle, HashSet<IFCAnyHandle>> ComplexPropertyCache { get; private set; } = new();\r\n\r\n      public static ContainmentCache ContainmentCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The top level 2D context handles by identifier.\r\n      /// </summary>\r\n      private static Dictionary<IFCRepresentationIdentifier, IFCAnyHandle> Context2DHandles { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// The top level 3D context handles by identifier.\r\n      /// </summary>\r\n      private static Dictionary<IFCRepresentationIdentifier, IFCAnyHandle> Context3DHandles { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// Cache for \"special\" property sets to make sure we don't re-export them.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// At the moment, this is only for Pset_Draughting for 2x2.  But really we\r\n      /// should combine this with CreatedInternalPropertySets.\r\n      /// </remarks>\r\n      public static PropertySetCache CreatedSpecialPropertySets { get; private set; } = new();\r\n\r\n      public static PropertySetCache CreatedInternalPropertySets { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The CurveAnnotationCache object.\r\n      /// </summary>\r\n      public static CurveAnnotationCache CurveAnnotationCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// A convenience function to check if we are exporting IFC base quantities.\r\n      /// </summary>\r\n      /// <returns>True if we are exporting base quantities.</returns>\r\n      static public bool ExportIFCBaseQuantities() { return ExportOptionsCache.PropertySetOptions.ExportIFCBaseQuantities; }\r\n\r\n      ///<summary>\r\n      /// A map containing the level to export for a particular view.\r\n      /// </summary>\r\n      public static Dictionary<ElementId, ElementId> DBViewsToExport { get; private set; } = new();\r\n\r\n      private static IFCAnyHandle m_DefaultCartesianTransformationOperator3D = null;\r\n\r\n      /// <summary>\r\n      /// The Document object passed to the Exporter class.\r\n      /// </summary>\r\n      public static Document Document { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Cache contains warnings that may have occurred outside a transaction, but will be posted within a transaction (at the end of export).\r\n      /// </summary>\r\n      public static List<String> DelayedWarnings { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The cache containing the openings that need to be created for doors and windows.\r\n      /// </summary>\r\n      public static DoorWindowDelayedOpeningCreatorCache DoorWindowDelayedOpeningCreatorCache { get; private set; } = new();\r\n\r\n      private static Units m_DocumentUnits = null;\r\n\r\n      /// <summary>\r\n      /// A cache of Document.GetUnits().\r\n      /// </summary>\r\n      public static Units DocumentUnits\r\n      {\r\n         get\r\n         {\r\n            m_DocumentUnits ??= Document.GetUnits();\r\n            return m_DocumentUnits;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The DummyHostCache object.\r\n      /// </summary>\r\n      public static DummyHostCache DummyHostCache { get; private set; } = new();\r\n\r\n      public static Dictionary<ElementId, ElementId> ElementIdMaterialParameterCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The elements in assemblies cache.\r\n      /// </summary>\r\n      public static HashSet<IFCAnyHandle> ElementsInAssembliesCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The ElementToHandleCache object, used to cache Revit element ids to IFC entity handles.\r\n      /// </summary>\r\n      public static ElementToHandleCache ElementToHandleCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The ElementTypeToHandleCache object, used to cache Revit element type ids to IFC entity handles.\r\n      /// </summary>\r\n      public static ElementTypeToHandleCache ElementTypeToHandleCache { get; private set; } = new();\r\n\r\n      private static bool? m_ExportCeilingGrids { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The ExporterIFC used to access internal IFC API functions.\r\n      /// </summary>\r\n      public static ExporterIFC ExporterIFC { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The ExportOptionsCache object.\r\n      /// </summary>\r\n      public static ExportOptionsCache ExportOptionsCache { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// The ContainmentCache object.\r\n      /// </summary>\r\n      /// <summary>\r\n      /// On each export, each Element will always have one and always one IFCExportInfoPair class associated with it.\r\n      /// This cache keeps track of that.\r\n      /// </summary>\r\n      public static Dictionary<ElementId, ExportTypeInfo> ExportTypeInfoCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The FabricArea id to FabricSheet handle cache.\r\n      /// </summary>\r\n      public static Dictionary<ElementId, HashSet<IFCAnyHandle>> FabricAreaHandleCache { get; private set; } = new();\r\n\r\n      public static Dictionary<ElementId, FabricParams> FabricParamsCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// Keeps track of the active IFC parameter mapping template.\r\n      /// </summary>\r\n      static IFCParameterTemplate m_ParameterMappingTemplate = null;\r\n\r\n      /// <summary>\r\n      /// The FamilySymbolToTypeInfoCache object.  This maps a FamilySymbol id to the related created IFC information (the TypeObjectsCache).\r\n      /// </summary>\r\n      public static TypeObjectsCache FamilySymbolToTypeInfoCache { get; private set; } = new();\r\n\r\n      private static IFCAnyHandle m_Global2DOriginHandle = null;\r\n      \r\n      private static IFCAnyHandle m_Global3DOriginHandle = null;\r\n\r\n      /// <summary>\r\n      /// The GridCache object.\r\n      /// </summary>\r\n      public static List<Element> GridCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The GroupCache object.\r\n      /// </summary>\r\n      public static GroupCache GroupCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The GUIDCache object.\r\n      /// </summary>\r\n      public static HashSet<string> GUIDCache { get; } = new();\r\n\r\n      /// <summary>\r\n      /// The GUIDs to store in elements at the end of export, if the option to store GUIDs has been selected.\r\n      /// </summary>\r\n      public static Dictionary<(ElementId, BuiltInParameter), string> GUIDsToStoreCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// Collection of IFC Handles to delete\r\n      /// </summary>\r\n      public static HashSet<IFCAnyHandle> HandleToDeleteCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The HandleToElementCache object.\r\n      /// </summary>\r\n      public static HandleToElementCache HandleToElementCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// This contains the mapping from Level element id to index in the IList returned by GetHostObjects.\r\n      /// This is redundant with a native list that is being deprecated, which has inadequate API access.\r\n      /// </summary>\r\n      public static Dictionary<ElementId, int> HostObjectsLevelIndex { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The HostPartsCache object.\r\n      /// </summary>\r\n      public static HostPartsCache HostPartsCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// A cache of internally created IfcRoot-derived handles.\r\n      /// </summary>\r\n      /// <remarks></remarks>\r\n      public static Dictionary<IFCAnyHandle, ElementId> InternallyCreatedRootHandles { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The IsExternalParameterValueCache object.\r\n      /// </summary>\r\n      public static Dictionary<ElementId, bool> IsExternalParameterValueCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The language of the current Revit document.\r\n      /// </summary>\r\n      public static LanguageType LanguageType { get; set; } = LanguageType.Unknown;\r\n\r\n      /// <summary>\r\n      /// The precision used in the IfcRepresentationContext in Revit units.\r\n      /// </summary>\r\n      public static double LengthPrecision { get; set; } = MathUtil.Eps();\r\n\r\n      /// <summary>\r\n      /// The LevelInfoCache object.  This contains extra information on top of\r\n      /// IFCLevelInfo, and will eventually replace it.\r\n      /// </summary>\r\n      public static LevelInfoCache LevelInfoCache { get; private set; } = new();\r\n\r\n\r\n      /// <summary>\r\n      /// The MaterialConstituent to IfcMaterial cache\r\n      /// </summary>\r\n      public static MaterialConstituentCache MaterialConstituentCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The MaterialConstituentSet cache\r\n      /// </summary>\r\n      public static MaterialConstituentSetCache MaterialConstituentSetCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The MaterialHandleCache object.\r\n      /// </summary>\r\n      public static ElementToHandleCache MaterialHandleCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The material id to style handle cache.\r\n      /// </summary>\r\n      public static ElementToHandleCache MaterialIdToStyleHandleCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The MaterialRelationsCache object.\r\n      /// </summary>\r\n      public static MaterialRelationsCache MaterialRelationsCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The Material___SetCache object (includes IfcMaterialLayerSet, IfcMaterialProfileSet, IfcMaterialConstituentSet in IFC4).\r\n      /// </summary>\r\n      public static MaterialSetCache MaterialSetCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The MaterialLayerRelationsCache object.\r\n      /// </summary>\r\n      public static MaterialSetUsageCache MaterialSetUsageCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The MEPCache object.\r\n      /// </summary>\r\n      public static MEPCache MEPCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// Non-spatial Elements (e.g., Floor) for export.\r\n      /// </summary>\r\n      public static HashSet<ElementId> NonSpatialElements { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The Cache for 2D curves information of a FamilySymbol\r\n      /// </summary>\r\n      public static Dictionary<ElementId, IList<Curve>> Object2DCurvesCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The top level IfcOwnerHistory handle.\r\n      /// </summary>\r\n      public static IFCAnyHandle OwnerHistoryHandle { get; set; } = null;\r\n\r\n      \r\n      /// <summary>\r\n      /// The ParameterCache object.\r\n      /// </summary>\r\n      public static ParameterCache ParameterCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The top level IfcProject handle.\r\n      /// </summary>\r\n      public static IFCAnyHandle ProjectHandle { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The PartExportedCache object.\r\n      /// </summary>\r\n      public static PartExportedCache PartExportedCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The PresentationLayerSetCache object.\r\n      /// </summary>\r\n      public static PresentationLayerSetCache PresentationLayerSetCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The PresentationStyleAssignmentCache object.\r\n      /// </summary>\r\n      public static PresentationStyleAssignmentCache PresentationStyleAssignmentCache { get; private set; } = new();\r\n\r\n      private static IDictionary<Tuple<string, string>, string> m_PropertyMapCache = null;\r\n\r\n      /// Cache for information whether a QuantitySet specified in the Dict. value has been created for the elementHandle\r\n      /// </summary>\r\n      public static HashSet<(IFCAnyHandle, string)> QtoSetCreated { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The predefined property sets to be exported for an entity type, regardless of Object Type.\r\n      /// </summary>\r\n      public static Dictionary<PropertySetKey, IList<PreDefinedPropertySetDescription>> PreDefinedPropertySetsForTypeCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The PropertyInfoCache object.\r\n      /// </summary>\r\n      public static PropertyInfoCache PropertyInfoCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// Cache for property mappings.\r\n      /// </summary>\r\n      public static Dictionary<ParameterMappingKey, IFCPropertyMappingInfo> PropertyMappingCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The common property sets to be exported for an entity type, regardless of Object Type.\r\n      /// </summary>\r\n      public static Dictionary<PropertySetKey, IList<PropertySetDescription>> PropertySetsForTypeCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The RailingCache object.\r\n      /// </summary>\r\n      public static HashSet<ElementId> RailingCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The RailingSubElementCache object.  This ensures that we don't export sub-elements of railings (e.g. supports) separately.\r\n      /// </summary>\r\n      public static HashSet<ElementId> RailingSubElementCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// Cache for the Project Location that comes from the Selected Site on export option\r\n      /// </summary>\r\n      public static ProjectLocation SelectedSiteProjectLocation { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// This keeps track of IfcSite-related information.\r\n      /// </summary>\r\n      public static SiteExportInfo SiteExportInfo { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The SpaceBoundaryCache object.\r\n      /// </summary>\r\n      public static SpaceBoundaryCache SpaceBoundaryCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The SpaceInfo cache that maps Revit SpatialElement id to the SpaceInfo.\r\n      /// </summary>\r\n      public static SpaceInfoCache SpaceInfoCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The SpaceOccupantInfoCache object.\r\n      /// </summary>\r\n      public static SpaceOccupantInfoCache SpaceOccupantInfoCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The SpaceTypeCache object.  Used for space elements in Revit with no type.\r\n      /// </summary>\r\n      /// <remarks>The key is the predefined type of the IfcSpaceType.</remarks>\r\n      public static Dictionary<string, IFCAnyHandle> SpaceTypeCache { get; private set; } = new();\r\n      \r\n      /// <summary>\r\n      /// The StairRampContainerInfoCache object.\r\n      /// </summary>\r\n      public static StairRampContainerInfoCache StairRampContainerInfoCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The SystemsCache object.\r\n      /// </summary>\r\n      public static SystemsCache SystemsCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The TrussCache object.\r\n      /// </summary>\r\n      public static HashSet<ElementId> TrussCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// A container of geometry associated with temporary parts.\r\n      /// </summary>\r\n      public static TemporaryPartsCache TemporaryPartsCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The TypePropertyInfoCache object.\r\n      /// </summary>\r\n      public static TypePropertyInfoCache TypePropertyInfoCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The TypeRelationsCache object.\r\n      /// </summary>\r\n      public static TypeRelationsCache TypeRelationsCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The UnitsCache object.\r\n      /// </summary>\r\n      public static UnitsCache UnitsCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The ViewScheduleElementCache object.\r\n      /// </summary>\r\n      public static Dictionary<ElementId, HashSet<ElementId>> ViewScheduleElementCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The WallConnectionDataCache object.\r\n      /// </summary>\r\n      public static WallConnectionDataCache WallConnectionDataCache { get; private set; } = new();\r\n\r\n      public static WallCrossSectionCache WallCrossSectionCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The ZoneCache object.\r\n      /// </summary>\r\n      public static HashSet<ElementId> ZoneCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The ZoneInfoCache object.\r\n      /// </summary>\r\n      public static ZoneInfoCache ZoneInfoCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// Caches the context handle for a particular IfcGeometricRepresentationContext in this\r\n      /// cache and in the internal cache if necessary.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporterIFC class for access to the internal cache.</param>\r\n      /// <param name=\"identifier\">The identifier.</param>\r\n      /// <param name=\"contextHandle\">The created context handle.</param>\r\n      public static void Set3DContextHandle(ExporterIFC exporterIFC, \r\n         IFCRepresentationIdentifier identifier, \r\n         IFCAnyHandle contextHandle)\r\n      {\r\n         string identifierAsString = identifier == IFCRepresentationIdentifier.None ? \r\n            string.Empty : identifier.ToString();\r\n         exporterIFC.Set3DContextHandle(contextHandle, identifierAsString);\r\n         Context3DHandles[identifier] = contextHandle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the handle associated to a particular IfcGeometricRepresentationContext.\r\n      /// </summary>\r\n      /// <param name=\"identifier\">The identifier.</param>\r\n      /// <returns>The corresponding IfcGeometricRepresentationContext handle.</returns>\r\n      public static IFCAnyHandle Get3DContextHandle(IFCRepresentationIdentifier identifier)\r\n      {\r\n         if (Context3DHandles.TryGetValue(identifier, out IFCAnyHandle handle))\r\n            return handle;\r\n\r\n         if (!Context3DHandles.TryGetValue(IFCRepresentationIdentifier.None, out IFCAnyHandle context3D))\r\n            return handle;\r\n\r\n         IFCGeometricProjection projection = (identifier == IFCRepresentationIdentifier.Axis) ?\r\n            IFCGeometricProjection.Graph_View : IFCGeometricProjection.Model_View;\r\n\r\n         IFCFile file = ExporterIFC.GetFile();\r\n         IFCAnyHandle context3DHandle = IFCInstanceExporter.CreateGeometricRepresentationSubContext(file,\r\n                identifier.ToString(), \"Model\", context3D, null, projection, null);\r\n         Set3DContextHandle(ExporterIFC, identifier, context3DHandle);\r\n         return context3DHandle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines if we should export ceiling grids.\r\n      /// </summary>\r\n      /// <returns>True if the user has chosen to export ceiling grids and ceiling surface patterns are exported.</returns>\r\n      public static bool ExportCeilingGrids()\r\n      {\r\n         if (!ExportOptionsCache.ExportCeilingGrids)\r\n         {\r\n            return false;\r\n         }\r\n\r\n         if (!m_ExportCeilingGrids.HasValue)\r\n         {\r\n            m_ExportCeilingGrids = CategoryMappingTemplate?.GetMappingInfoById(Document,\r\n               new ElementId(BuiltInCategory.OST_CeilingsSurfacePattern), CustomSubCategoryId.None)?.IFCExportFlag ?? false;\r\n         }\r\n\r\n         return m_ExportCeilingGrids.Value;         \r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the current parameter mapping template.\r\n      /// </summary>\r\n      public static IFCParameterTemplate ParameterMappingTemplate\r\n      {\r\n         get\r\n         {\r\n            // TODO: this isn't really correct if we are exporting multiple documents.\r\n            if (m_ParameterMappingTemplate == null)\r\n            {\r\n               try\r\n               {\r\n                  string templateName = ExportOptionsCache.PropertySetOptions?.ParameterMappingTemplateName;\r\n                  if (string.IsNullOrEmpty(templateName))\r\n                     return null; \r\n                  \r\n                  Document document = ExportOptionsCache.HostDocument ?? Document;\r\n                  if (document != null)\r\n                     m_ParameterMappingTemplate = IFCParameterTemplate.FindByName(document, templateName);\r\n                  \r\n               }\r\n               catch\r\n               {\r\n                  m_ParameterMappingTemplate = null;\r\n               }\r\n\r\n               if (Document != null && m_ParameterMappingTemplate == null)\r\n                  m_ParameterMappingTemplate = IFCParameterTemplate.GetOrCreateInSessionTemplate(Document);\r\n            }\r\n\r\n            return m_ParameterMappingTemplate;\r\n         }\r\n      }\r\n\r\n      public static IFCCategoryTemplate CategoryMappingTemplate\r\n      {\r\n         get\r\n         {\r\n            if (m_CategoryMappingTemplate == null)\r\n            {\r\n               try\r\n               {\r\n                  string name = ExportOptionsCache.CategoryMappingTemplateName;\r\n                  if (name != null)\r\n                  {\r\n                     Document documentToUse = ExportOptionsCache.HostDocument ?? Document;\r\n                     if (documentToUse != null)\r\n                     {\r\n                        m_CategoryMappingTemplate = IFCCategoryTemplate.FindByName(documentToUse, name);\r\n                     }\r\n                  }\r\n               }\r\n               catch\r\n               {\r\n                  m_CategoryMappingTemplate = null;\r\n               }\r\n\r\n               bool getFromLink = (m_CategoryMappingTemplate == null);\r\n               m_CategoryMappingTemplate ??= IFCCategoryTemplate.GetOrCreateInSessionTemplate(Document);\r\n               if (ExportOptionsCache.HostDocument == null || getFromLink)\r\n               {\r\n                  // TODO: This routine currently doesn't work will if the mapping template and the Document we are\r\n                  // updating the category list from are from different documents.  We need to fix that.\r\n                  m_CategoryMappingTemplate?.UpdateCategoryList(Document);\r\n               }\r\n            }\r\n\r\n            return m_CategoryMappingTemplate;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the handle associated to a particular IfcGeometricRepresentationContext, or create it\r\n      /// if it doesn't exist.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFCFile class.</param>\r\n      /// <param name=\"identifier\">The identifier.</param>\r\n      /// <returns>The corresponding IfcGeometricRepresentationContext handle.</returns>\r\n      public static IFCAnyHandle GetOrCreate3DContextHandle(ExporterIFC exporterIFC, \r\n         IFCRepresentationIdentifier identifier)\r\n      {\r\n         IFCAnyHandle context3d = Get3DContextHandle(identifier);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(context3d))\r\n            return context3d;\r\n\r\n         // This is primarily intended for model curves; we don't\r\n         // want to add the IfcGeometricRepresentationContext unless it is actually used.\r\n         if (!Context3DHandles.TryGetValue(IFCRepresentationIdentifier.None, out IFCAnyHandle parent))\r\n            return null;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle newContext3D = IFCInstanceExporter.CreateGeometricRepresentationSubContext(\r\n            file, identifier.ToString(), \"Model\", parent, null, IFCGeometricProjection.Model_View, null);\r\n         Set3DContextHandle(exporterIFC, identifier, newContext3D);\r\n         return newContext3D;\r\n      }\r\n      \r\n      /// <summary>\r\n      /// Caches the context handle for a particular IfcGeometricRepresentationContext in this\r\n      /// cache and in the internal cache if necessary.\r\n      /// </summary>\r\n      /// <param name=\"identifier\">The identifier.</param>\r\n      /// <param name=\"contextHandle\">The created context handle.</param>\r\n      public static void Set2DContextHandle(IFCRepresentationIdentifier identifier,\r\n         IFCAnyHandle contextHandle)\r\n      {\r\n         Context2DHandles[identifier] = contextHandle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the handle associated to a particular IfcGeometricRepresentationContext.\r\n      /// </summary>\r\n      /// <param name=\"identifier\">The identifier.</param>\r\n      /// <returns>The corresponding IfcGeometricRepresentationContext handle.</returns>\r\n      public static IFCAnyHandle Get2DContextHandle(IFCRepresentationIdentifier identifier)\r\n      {\r\n         if (Context2DHandles.TryGetValue(identifier, out IFCAnyHandle handle))\r\n            return handle;\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The ClassificationCache object.\r\n      /// </summary>\r\n      public static ClassificationCache ClassificationCache\r\n      {\r\n         get\r\n         {\r\n            m_ClassificationCache ??= new ClassificationCache(Document);\r\n            return m_ClassificationCache;\r\n         }\r\n         set \r\n         { \r\n            m_ClassificationCache = value; \r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// This class is used to identify property set in cache.\r\n      /// Current logic uses a combination of instance type and predefined type\r\n      /// to uniquely identify relation of ifc object and property set.\r\n      /// </summary>\r\n      public class PropertySetKey : IComparable<PropertySetKey>\r\n      {\r\n         public PropertySetKey(IFCEntityType entityType, string predefinedType)\r\n         {\r\n            EntityType = entityType;\r\n            PredefinedType = predefinedType;\r\n         }\r\n\r\n         public IFCEntityType EntityType { get; protected set; } = IFCEntityType.UnKnown;\r\n\r\n         public string PredefinedType { get; protected set; } = null;\r\n\r\n         public int CompareTo(PropertySetKey other)\r\n         {\r\n            if (other == null) \r\n               return 1;\r\n\r\n            if (EntityType < other.EntityType)\r\n               return -1;\r\n\r\n            if (EntityType > other.EntityType)\r\n               return 1;\r\n\r\n            if (PredefinedType == null)\r\n               return other.PredefinedType == null ? 0 : -1;\r\n            \r\n            if (other.PredefinedType == null)\r\n               return 1;\r\n\r\n            return PredefinedType.CompareTo(other.PredefinedType);\r\n         }\r\n\r\n         public static bool operator ==(PropertySetKey first, PropertySetKey second)\r\n         {\r\n            object lhsObject = first;\r\n            object rhsObject = second;\r\n            if (null == lhsObject)\r\n            {\r\n               if (null == rhsObject)\r\n                  return true;\r\n               return false;\r\n            }\r\n            if (null == rhsObject)\r\n               return false;\r\n\r\n            if (first.EntityType != second.EntityType)\r\n               return false;\r\n\r\n            if (first.PredefinedType != second.PredefinedType)\r\n               return false;\r\n\r\n            return true;\r\n         }\r\n\r\n         public static bool operator !=(PropertySetKey first, PropertySetKey second)\r\n         {\r\n            return !(first == second);\r\n         }\r\n\r\n         public override bool Equals(object obj)\r\n         {\r\n            if (obj == null)\r\n               return false;\r\n\r\n            PropertySetKey second = obj as PropertySetKey;\r\n            return this == second;\r\n         }\r\n\r\n         public override int GetHashCode()\r\n         {\r\n            return EntityType.GetHashCode() + \r\n               (PredefinedType != null ? PredefinedType.GetHashCode() : 0);\r\n         }\r\n      }\r\n\r\n      public static IFCAnyHandle GetDefaultCartesianTransformationOperator3D(IFCFile file)\r\n      {\r\n         if (m_DefaultCartesianTransformationOperator3D == null)\r\n         {\r\n            XYZ orig = new XYZ();\r\n            IFCAnyHandle origHnd = ExporterUtil.CreateCartesianPoint(file, orig);\r\n            m_DefaultCartesianTransformationOperator3D = IFCInstanceExporter.CreateCartesianTransformationOperator3D(file, null, null, origHnd, 1.0, null);\r\n         }\r\n         return m_DefaultCartesianTransformationOperator3D;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The PropertyMap cache\r\n      /// </summary>\r\n      public static IDictionary<Tuple<string, string>, string> PropertyMapCache\r\n      {\r\n         get\r\n         {\r\n            m_PropertyMapCache ??= PropertyMap.LoadParameterMap();\r\n            return m_PropertyMapCache;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// A local copy of the internal IfcCartesianPoint for the global 2D origin.\r\n      public static IFCAnyHandle Global2DOriginHandle\r\n      {\r\n         get\r\n         {\r\n            m_Global2DOriginHandle ??= ExporterIFCUtils.GetGlobal2DOriginHandle();\r\n            return m_Global2DOriginHandle;\r\n         }\r\n      }\r\n      \r\n      /// <summary>\r\n      /// A local copy of the internal IfcCartesianPoint for the global origin.\r\n      public static IFCAnyHandle Global3DOriginHandle\r\n      {\r\n         get\r\n         {\r\n            m_Global3DOriginHandle ??= ExporterIFCUtils.GetGlobal3DOriginHandle();\r\n            return m_Global3DOriginHandle;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Clear all caches contained in this manager.\r\n      /// </summary>\r\n      public static void Clear(bool fullClear)\r\n      {\r\n         if (fullClear)\r\n         {\r\n            m_CategoryMappingTemplate = null;\r\n            CertifiedEntitiesAndPsetsCache = new IFCCertifiedEntitiesAndPSets(); // No Clear() for this, just remake.\r\n            ExporterIFC = null;\r\n            ExportOptionsCache = new();    // This will need to be re-initialized before use.\r\n            m_Global2DOriginHandle = null;\r\n            m_Global3DOriginHandle = null;\r\n            Context2DHandles.Clear();\r\n            Context3DHandles.Clear();\r\n            DelayedWarnings = new();\r\n            GUIDCache.Clear();\r\n            OwnerHistoryHandle = null;\r\n            ParameterCache.Clear();\r\n            m_ParameterMappingTemplate = null;\r\n            ProjectHandle = null;\r\n            UnitsCache.Clear();\r\n         }\r\n\r\n         // Special case: if we are sharing the IfcSite, don't clear it after the host\r\n         // document export.\r\n         if (fullClear || ExportOptionsCache.ExportLinkedFileAs != LinkedFileExportAs.ExportSameSite)\r\n         {\r\n            SiteExportInfo.Clear();\r\n         }\r\n\r\n         AllocatedGeometryObjectCache.DisposeCache();\r\n         ParameterUtil.ClearParameterValueCaches();\r\n\r\n         AreaSchemeCache.Clear();\r\n         AssemblyInstanceCache.Clear();\r\n         BaseLinkedDocumentGUID = null;\r\n         BeamSystemCache.Clear();\r\n         BuildingHandle = null;\r\n         CanExportBeamGeometryAsExtrusionCache.Clear();\r\n         CeilingSpaceRelCache.Clear();\r\n         m_ClassificationCache = null;\r\n         ClassificationLocationCache.Clear();\r\n         ContainmentCache.Clear();\r\n         ComplexPropertyCache.Clear();\r\n         BaseQuantitiesCache.Clear();\r\n         CreatedInternalPropertySets.Clear();\r\n         CreatedSpecialPropertySets.Clear();\r\n         CurveAnnotationCache.Clear();\r\n         DBViewsToExport.Clear();\r\n         m_DefaultCartesianTransformationOperator3D = null;\r\n         DoorWindowDelayedOpeningCreatorCache.Clear();\r\n         m_DocumentUnits = null;\r\n         DummyHostCache.Clear();\r\n         ElementsInAssembliesCache.Clear();\r\n         ElementIdMaterialParameterCache.Clear();\r\n         ElementToHandleCache.Clear();\r\n         ElementTypeToHandleCache.Clear();\r\n         m_ExportCeilingGrids = null;\r\n         ExportTypeInfoCache.Clear();\r\n         FabricAreaHandleCache.Clear();\r\n         FabricParamsCache.Clear();\r\n         FamilySymbolToTypeInfoCache.Clear();\r\n         GridCache.Clear();\r\n         GroupCache.Clear();\r\n         GUIDsToStoreCache.Clear();\r\n         HandleToDeleteCache.Clear();\r\n         HandleToElementCache.Clear();\r\n         HostObjectsLevelIndex.Clear();\r\n         HostPartsCache.Clear();\r\n         InternallyCreatedRootHandles.Clear();\r\n         IsExternalParameterValueCache.Clear();\r\n         LengthPrecision = MathUtil.Eps();\r\n         LevelInfoCache.Clear();\r\n         MaterialIdToStyleHandleCache.Clear();\r\n         MaterialSetUsageCache.Clear();\r\n         MaterialSetCache.Clear();\r\n         MaterialConstituentCache.Clear();\r\n         MaterialConstituentSetCache.Clear();\r\n         MaterialHandleCache.Clear();\r\n         MaterialRelationsCache.Clear();\r\n         MEPCache.Clear();\r\n         NonSpatialElements.Clear();\r\n         Object2DCurvesCache.Clear();\r\n         PartExportedCache.Clear();\r\n         PresentationLayerSetCache.Clear();\r\n         PresentationStyleAssignmentCache.Clear();\r\n         PropertyInfoCache.Clear();\r\n         PropertyMappingCache.Clear();\r\n         m_PropertyMapCache = null;\r\n         PropertySetsForTypeCache.Clear();\r\n         PreDefinedPropertySetsForTypeCache.Clear();\r\n         RailingCache.Clear();\r\n         RailingSubElementCache.Clear();\r\n         // SelectedSiteProjectLocation is dealt with in ExportOptionsCache.UpdateForDocument().\r\n         SpaceBoundaryCache.Clear();\r\n         SpaceInfoCache.Clear();\r\n         SpaceOccupantInfoCache.Clear();\r\n         SpaceTypeCache.Clear();\r\n         StairRampContainerInfoCache.Clear();\r\n         SystemsCache.Clear();\r\n         TemporaryPartsCache.Clear();\r\n         TrussCache.Clear();\r\n         TypePropertyInfoCache.Clear();\r\n         TypeRelationsCache.Clear();\r\n         ViewScheduleElementCache.Clear();\r\n         WallConnectionDataCache.Clear();\r\n         WallCrossSectionCache.Clear();\r\n         ZoneCache.Clear();\r\n         ZoneInfoCache.Clear();\r\n         QtoSetCreated.Clear();\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ExporterStateManager.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing Autodesk.Revit.ApplicationServices;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Manages state information for the current export session.  Intended to eventually replace \r\n   /// ExporterIFC for most state operations.\r\n   /// </summary>\r\n   public class ExporterStateManager\r\n   {\r\n      static IList<string> CADLayerOverrides { get; set; } = new List<string>();\r\n\r\n      static int RangeIndex { get; set; }\r\n\r\n      /// <summary>\r\n      /// A utility class that manages keeping track of a sub-element index for ranges for splitting walls and columns.  \r\n      /// Intended to be using with \"using\" keyword.\r\n      /// </summary>\r\n      public class RangeIndexSetter : IDisposable\r\n      {\r\n         /// <summary>\r\n         /// Increment the range index.\r\n         /// </summary>\r\n         public void IncreaseRangeIndex()\r\n         {\r\n            RangeIndex++;\r\n         }\r\n\r\n         /// <summary>\r\n         /// Return the maximum allowed number of stable GUIDs for elements split by range.\r\n         /// </summary>\r\n         /// <returns>The maximum allowed number of stable GUIDs for elements split by range. </returns>\r\n         static public int GetMaxStableGUIDs()\r\n         {\r\n            const int maxSplitIndices = IFCGenericSubElements.SplitInstanceEnd - IFCGenericSubElements.SplitInstanceStart + 1;\r\n            return maxSplitIndices;\r\n         }\r\n\r\n         #region IDisposable Members\r\n\r\n         /// <summary>\r\n         /// Reset the range index.\r\n         /// </summary>\r\n         public void Dispose()\r\n         {\r\n            RangeIndex = 0;\r\n         }\r\n\r\n         #endregion\r\n      }\r\n\r\n      /// <summary>\r\n      /// Preserve the element parameter cache after the element export, as it will be used again.\r\n      /// This should be checked before it is overridden\r\n      /// </summary>\r\n      static Element CurrentElementToPreserveParameterCache = null;\r\n\r\n      /// <summary>\r\n      /// Determines whether this elements parameter cache should be removed after this element is exported.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"preserve\">True to preserve, false otherwise.</param>\r\n      static public void PreserveElementParameterCache(Element element, bool preserve)\r\n      {\r\n         CurrentElementToPreserveParameterCache = preserve ? element : null;\r\n      }\r\n\r\n      static public bool ShouldPreserveElementParameterCache(Element element)\r\n      {\r\n         return (CurrentElementToPreserveParameterCache == element);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Skip the \"CanElementBeExported\" function for cached elements that have already passed the\r\n      /// test.\r\n      /// </summary>\r\n      public static bool CanExportElementOverride { get; private set; } = false;\r\n\r\n      /// <summary>\r\n      /// A utility class that skips the \"CanElementBeExported\" function for cached elements that have already passed the test.\r\n      /// </summary>\r\n      public class ForceElementExport : IDisposable\r\n      {\r\n         bool OldCanExportElementOverride { get; set; } = false;\r\n\r\n         /// <summary>\r\n         /// The constructor that sets forced element export to be true.\r\n         /// </summary>\r\n         public ForceElementExport()\r\n         {\r\n            OldCanExportElementOverride = CanExportElementOverride;\r\n            CanExportElementOverride = true;\r\n         }\r\n\r\n         /// <summary>\r\n         /// The destructor that sets forced element export to be false.\r\n         /// </summary>\r\n         public void Dispose()\r\n         {\r\n            CanExportElementOverride = OldCanExportElementOverride;\r\n         }\r\n      }\r\n\r\n      static public ElementId CurrentLinkId { get; set; } = ElementId.InvalidElementId;\r\n\r\n      /// <summary>\r\n      /// A utility class that manages pushing and popping CAD layer overrides for containers.  Intended to be using with \"using\" keyword.\r\n      /// </summary>\r\n      public class CADLayerOverrideSetter : IDisposable\r\n      {\r\n         bool ValidString = false;\r\n\r\n         /// <summary>\r\n         /// The constructor that sets the current CAD layer override string.  Will do nothing if the string in invalid or null.\r\n         /// </summary>\r\n         /// <param name=\"overrideString\">The value.</param>\r\n         public CADLayerOverrideSetter(string overrideString)\r\n         {\r\n            if (!string.IsNullOrWhiteSpace(overrideString))\r\n            {\r\n               ExporterStateManager.PushCADLayerOverride(overrideString);\r\n               ValidString = true;\r\n            }\r\n         }\r\n\r\n         #region IDisposable Members\r\n\r\n         /// <summary>\r\n         /// Pop the current CAD layer override string, if valid.\r\n         /// </summary>\r\n         public void Dispose()\r\n         {\r\n            if (ValidString)\r\n            {\r\n               ExporterStateManager.PopCADLayerOverride();\r\n            }\r\n         }\r\n\r\n         #endregion\r\n      }\r\n\r\n      static private void PushCADLayerOverride(string overrideString)\r\n      {\r\n         CADLayerOverrides.Add(overrideString);\r\n      }\r\n\r\n      static private void PopCADLayerOverride()\r\n      {\r\n         int size = CADLayerOverrides.Count;\r\n         if (size > 0)\r\n            CADLayerOverrides.RemoveAt(size - 1);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the current CAD layer override string.\r\n      /// </summary>\r\n      /// <returns>The CAD layer override string, or null if not set.</returns>\r\n      static public string GetCurrentCADLayerOverride()\r\n      {\r\n         if (CADLayerOverrides.Count > 0)\r\n         {\r\n            // Should this be 0 or Count-1?\r\n            return CADLayerOverrides[0];\r\n         }\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the current range index.\r\n      /// </summary>\r\n      /// <returns>The current range index, or 0 if there are no ranges.</returns>\r\n      static public int GetCurrentRangeIndex()\r\n      {\r\n         return RangeIndex;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Resets the state manager.\r\n      /// </summary>\r\n      static public void Clear()\r\n      {\r\n         CADLayerOverrides.Clear();\r\n         RangeIndex = 0;\r\n         CurrentLinkId = ElementId.InvalidElementId;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ExporterUtil.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Mechanical;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing static Revit.IFC.Export.Utility.ParameterUtil;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   // Alias to make it easier to deal with ExportInfoCache.\r\n   using ExportTypeInfo = Tuple<IFCExportInfoPair, string, ExportTypeOverrideHelper>;\r\n\r\n   /// <summary>\r\n   /// An enum to decide what types of property sets to return for an entity.\r\n   /// </summary>\r\n   public enum PSetsToProcess\r\n   {\r\n      Type,\r\n      Instance,\r\n      Both\r\n   }\r\n\r\n   /// <summary>\r\n   /// Provides general utility methods for IFC export.\r\n   /// </summary>\r\n   public class ExporterUtil\r\n   {\r\n      private static Dictionary<BuiltInCategory, ExportIFCCategoryInfo> sExtendedCategoryMap = new()\r\n      {\r\n         { BuiltInCategory.OST_ProjectInformation, new ExportIFCCategoryInfo(true, \"IfcBuilding\", \"\", \"\", \"\") }\r\n      };\r\n\r\n      private static ProjectPosition GetSafeProjectPosition(Document doc)\r\n      {\r\n         ProjectLocation projLoc = ExporterCacheManager.SelectedSiteProjectLocation;\r\n         try\r\n         {\r\n            return projLoc.GetProjectPosition(XYZ.Zero);\r\n         }\r\n         catch\r\n         {\r\n            return null;\r\n         }\r\n      }\r\n      private static void Union<T>(ref IList<T> lList, IList<T> rList)\r\n      {\r\n         if (rList == null || rList.Count() == 0)\r\n            return;\r\n\r\n         if (lList.Count() == 0)\r\n            lList = rList;\r\n         else\r\n            lList = lList.Union(rList).ToList();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the \"GlobalId\" value for a handle, or an empty string if it doesn't exist.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The IFC entity.</param>\r\n      /// <returns>The \"GlobalId\" value for a handle, or an empty string if it doesn't exist.</returns>\r\n      public static string GetGlobalId(IFCAnyHandle handle)\r\n      {\r\n         try\r\n         {\r\n            return IFCAnyHandleUtil.GetStringAttribute(handle, \"GlobalId\");\r\n         }\r\n         catch\r\n         {\r\n            return String.Empty;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set the \"GlobalId\" value for a handle if it exists.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The IFC entity.</param>\r\n      /// <param name=\"guid\">The GUID value.</param>\r\n      public static void SetGlobalId(IFCAnyHandle handle, string guid, Element element = null)\r\n      {\r\n         try\r\n         {\r\n            guid = GUIDUtil.RegisterGUID(element, guid);\r\n            IFCAnyHandleUtil.SetAttribute(handle, \"GlobalId\", guid);\r\n         }\r\n         catch\r\n         {\r\n         }\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the angle associated with the project position for a particular document.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"angle\">The angle, or 0.0 if it can't be generated.</param>\r\n      /// <returns>True if the angle is found, false if it can't be determined.</returns>\r\n      public static bool GetSafeProjectPositionAngle(Document doc, out double angle)\r\n      {\r\n         angle = 0.0;\r\n         ProjectPosition projPos = GetSafeProjectPosition(doc);\r\n         if (projPos == null)\r\n            return false;\r\n\r\n         angle = projPos.Angle;\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the elevation associated with the project position for a particular document. \r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"elevation\">The elevation, or 0.0 if it can't be generated.</param>\r\n      /// <returns>True if the elevation is found, false if it can't be determined.</returns>\r\n      public static bool GetSafeProjectPositionElevation(Document doc, out double elevation)\r\n      {\r\n         elevation = 0.0;\r\n         ProjectPosition projPos = GetSafeProjectPosition(doc);\r\n         if (projPos == null)\r\n            return false;\r\n\r\n         elevation = projPos.Elevation;\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Relates one object to another. \r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"relatingObject\">\r\n      /// The relating object.\r\n      /// </param>\r\n      /// <param name=\"relatedObject\">\r\n      /// The related object.\r\n      /// </param>\r\n      public static void RelateObject(ExporterIFC exporterIFC, IFCAnyHandle relatingObject, IFCAnyHandle relatedObject)\r\n      {\r\n         HashSet<IFCAnyHandle> relatedObjects = new HashSet<IFCAnyHandle>();\r\n         relatedObjects.Add(relatedObject);\r\n         RelateObjects(exporterIFC, null, relatingObject, relatedObjects);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Relates one object to a collection of others. \r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The ExporterIFC object.\r\n      /// </param>\r\n      /// <param name=\"optionalGUID\">\r\n      /// A GUID value, or null to generate a random GUID.\r\n      /// </param>\r\n      /// <param name=\"relatingObject\">\r\n      /// The relating object.\r\n      /// </param>\r\n      /// <param name=\"relatedObjects\">\r\n      /// The related objects.\r\n      /// </param>\r\n      public static void RelateObjects(ExporterIFC exporterIFC, string optionalGUID, IFCAnyHandle relatingObject, ICollection<IFCAnyHandle> relatedObjects)\r\n      {\r\n         string guid = optionalGUID ?? GUIDUtil.GenerateIFCGuidFrom(\r\n            GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelAggregates, relatingObject));\r\n         IFCInstanceExporter.CreateRelAggregates(exporterIFC.GetFile(), guid, ExporterCacheManager.OwnerHistoryHandle, null, null, relatingObject, new HashSet<IFCAnyHandle>(relatedObjects));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IfcAxis2Placement3D object.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"origin\">The origin.</param>\r\n      /// <param name=\"zDirection\">The Z direction.</param>\r\n      /// <param name=\"xDirection\">The X direction.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateAxis(IFCFile file, XYZ origin, XYZ zDirection, XYZ xDirection)\r\n      {\r\n         IFCAnyHandle direction = null;\r\n         IFCAnyHandle refDirection = null;\r\n         IFCAnyHandle location = null;\r\n\r\n         if (origin != null)\r\n         {\r\n            List<double> measure = new() { origin.X, origin.Y, origin.Z };\r\n            location = CreateCartesianPoint(file, measure);\r\n         }\r\n         else\r\n         {\r\n            location = ExporterCacheManager.Global3DOriginHandle;\r\n         }\r\n\r\n         bool exportzDirectionAndxDirection = (zDirection != null && xDirection != null && (!MathUtil.IsAlmostEqual(zDirection[2], 1.0) || !MathUtil.IsAlmostEqual(xDirection[0], 1.0)));\r\n\r\n         if (exportzDirectionAndxDirection)\r\n         {\r\n            List<double> axisPts = new() { zDirection.X, zDirection.Y, zDirection.Z };\r\n            direction = CreateDirection(file, axisPts);\r\n         }\r\n\r\n         if (exportzDirectionAndxDirection)\r\n         {\r\n            List<double> axisPts = new() { xDirection.X, xDirection.Y, xDirection.Z };\r\n            refDirection = CreateDirection(file, axisPts);\r\n         }\r\n\r\n         return IFCInstanceExporter.CreateAxis2Placement3D(file, location, direction, refDirection);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IfcDirection object.\r\n      /// </summary>\r\n      /// <param name=\"file\">\r\n      /// The IFC file.\r\n      /// </param>\r\n      /// <param name=\"realList\">\r\n      /// The list of doubles to create the direction.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The handle.\r\n      /// </returns>\r\n      public static IFCAnyHandle CreateDirection(IFCFile file, IList<double> realList)\r\n      {\r\n         List<double> cleanList = new();\r\n\r\n         foreach (double measure in realList)\r\n         {\r\n            double ceilMeasure = Math.Ceiling(measure);\r\n            double floorMeasure = Math.Floor(measure);\r\n\r\n            if (MathUtil.IsAlmostEqual(measure, ceilMeasure))\r\n               cleanList.Add(ceilMeasure);\r\n            else if (MathUtil.IsAlmostEqual(measure, floorMeasure))\r\n               cleanList.Add(floorMeasure);\r\n            else\r\n               cleanList.Add(measure);\r\n         }\r\n\r\n         int sz = realList.Count;\r\n\r\n         if (sz == 3)\r\n         {\r\n            for (int ii = 0; ii < 3; ii++)\r\n            {\r\n               if (MathUtil.IsAlmostEqual(cleanList[ii], 1.0))\r\n               {\r\n                  if (!MathUtil.IsAlmostZero(cleanList[(ii + 1) % 3]) || !MathUtil.IsAlmostZero(cleanList[(ii + 2) % 3]))\r\n                     break;\r\n                  return ExporterIFCUtils.GetGlobal3DDirectionHandle(ii, true);\r\n               }\r\n               else if (MathUtil.IsAlmostEqual(cleanList[ii], -1.0))\r\n               {\r\n                  if (!MathUtil.IsAlmostZero(cleanList[(ii + 1) % 3]) || !MathUtil.IsAlmostZero(cleanList[(ii + 2) % 3]))\r\n                     break;\r\n                  return ExporterIFCUtils.GetGlobal3DDirectionHandle(ii, false);\r\n               }\r\n            }\r\n         }\r\n         else if (sz == 2)\r\n         {\r\n            for (int ii = 0; ii < 2; ii++)\r\n            {\r\n               if (MathUtil.IsAlmostEqual(cleanList[ii], 1.0))\r\n               {\r\n                  if (!MathUtil.IsAlmostZero(cleanList[1 - ii]))\r\n                     break;\r\n                  return ExporterIFCUtils.GetGlobal2DDirectionHandle(ii, true);\r\n               }\r\n               else if (MathUtil.IsAlmostEqual(cleanList[ii], -1.0))\r\n               {\r\n                  if (!MathUtil.IsAlmostZero(cleanList[1 - ii]))\r\n                     break;\r\n                  return ExporterIFCUtils.GetGlobal2DDirectionHandle(ii, false);\r\n               }\r\n            }\r\n         }\r\n\r\n         IFCAnyHandle directionHandle = IFCInstanceExporter.CreateDirection(file, cleanList);\r\n         return directionHandle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IfcDirection object.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"direction\">The direction.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateDirection(IFCFile file, XYZ direction, GeometryUtil.Dimension dim)\r\n      {\r\n         List<double> measure = (dim == GeometryUtil.Dimension.Dim2D) ? \r\n            [ direction.X, direction.Y ] :\r\n            [direction.X, direction.Y, direction.Z];\r\n         return CreateDirection(file, measure);\r\n      }\r\n\r\n      /// <summary>\r\n       /// Creates IfcVector object.\r\n       /// </summary>\r\n       /// <param name=\"file\">The IFC file.</param>\r\n       /// <param name=\"directionXYZ\">The XYZ value represention the vector direction.</param>\r\n       /// <returns>The IfcVector handle.</returns>\r\n      public static IFCAnyHandle CreateVector(IFCFile file, XYZ directionXYZ, double length)\r\n      {\r\n         IFCAnyHandle direction = CreateDirection(file, directionXYZ, GeometryUtil.Dimension.Dim3D);\r\n         return IFCInstanceExporter.CreateVector(file, direction, length);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IfcCartesianPoint object from a 2D point.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"point\">The point</param>\r\n      /// <returns>The IfcCartesianPoint handle.</returns>\r\n      public static IFCAnyHandle CreateCartesianPoint(IFCFile file, UV point)\r\n      {\r\n         if (point == null)\r\n            throw new ArgumentNullException(\"point\");\r\n\r\n         List<double> points = new List<double>();\r\n         points.Add(point.U);\r\n         points.Add(point.V);\r\n\r\n         return CreateCartesianPoint(file, points);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IfcCartesianPoint object from a 3D point.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"point\">The point</param>\r\n      /// <returns>The IfcCartesianPoint handle.</returns>\r\n      public static IFCAnyHandle CreateCartesianPoint(IFCFile file, XYZ point)\r\n      {\r\n         if (point == null)\r\n            throw new ArgumentNullException(\"point\");\r\n\r\n         List<double> points = new List<double>();\r\n         points.Add(point.X);\r\n         points.Add(point.Y);\r\n         points.Add(point.Z);\r\n\r\n         return CreateCartesianPoint(file, points);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IfcCartesianPoint object.\r\n      /// </summary>\r\n      /// <param name=\"file\">\r\n      /// The IFC file.\r\n      /// </param>\r\n      /// <param name=\"measure\">\r\n      /// The list of doubles to create the Cartesian point.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The handle.\r\n      /// </returns>\r\n      public static IFCAnyHandle CreateCartesianPoint(IFCFile file, IList<double> measure)\r\n      {\r\n         IList<double> cleanMeasure = new List<double>();\r\n         foreach (double value in measure)\r\n         {\r\n            double ceilMeasure = Math.Ceiling(value);\r\n            double floorMeasure = Math.Floor(value);\r\n\r\n            if (MathUtil.IsAlmostZero(value - ceilMeasure))\r\n               cleanMeasure.Add(ceilMeasure);\r\n            else if (MathUtil.IsAlmostZero(value - floorMeasure))\r\n               cleanMeasure.Add(floorMeasure);\r\n            else\r\n               cleanMeasure.Add(value);\r\n         }\r\n\r\n         if (MathUtil.IsAlmostZero(cleanMeasure[0]) && MathUtil.IsAlmostZero(cleanMeasure[1]))\r\n         {\r\n            if (measure.Count == 2)\r\n            {\r\n               return ExporterIFCUtils.GetGlobal2DOriginHandle();\r\n            }\r\n            if (measure.Count == 3 && MathUtil.IsAlmostZero(cleanMeasure[2]))\r\n            {\r\n               return ExporterCacheManager.Global3DOriginHandle;\r\n            }\r\n\r\n         }\r\n\r\n         IFCAnyHandle pointHandle = IFCInstanceExporter.CreateCartesianPoint(file, cleanMeasure);\r\n\r\n         return pointHandle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcAxis2Placement2D object.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"location\">The origin. If null, it will use the global origin handle.</param>\r\n      /// <param name=\"refDirection\">The X direction.</param>\r\n      /// <returns>the handle.</returns>\r\n      public static IFCAnyHandle CreateAxis2Placement2D(IFCFile file, XYZ location, XYZ refDirection)\r\n      {\r\n         IFCAnyHandle locationHandle = null;\r\n         if (location != null)\r\n         {\r\n            List<double> measure = [location.X, location.Y];\r\n            locationHandle = CreateCartesianPoint(file, measure);\r\n         }\r\n         else\r\n         {\r\n            locationHandle = ExporterCacheManager.Global2DOriginHandle;\r\n         }\r\n\r\n\r\n         IFCAnyHandle refDirectionHandle = null;\r\n         if (refDirection != null && !MathUtil.IsAlmostEqual(refDirection[0], 1.0))\r\n         {\r\n            List<double> measure = [refDirection.X, refDirection.Y];\r\n            refDirectionHandle = CreateDirection(file, measure);\r\n         }\r\n\r\n         return IFCInstanceExporter.CreateAxis2Placement2D(file, locationHandle, refDirectionHandle);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcAxis2Placement3D object.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"location\">The origin. If null, it will use the global origin handle.</param>\r\n      /// <param name=\"axis\">The Z direction.</param>\r\n      /// <param name=\"refDirection\">The X direction.</param>\r\n      /// <returns>the handle.</returns>\r\n      public static IFCAnyHandle CreateAxis2Placement3D(IFCFile file, XYZ location, XYZ axis, XYZ refDirection)\r\n      {\r\n         IFCAnyHandle locationHandle = null;\r\n         if (location != null)\r\n         {\r\n            List<double> measure = new List<double>();\r\n            measure.Add(location.X);\r\n            measure.Add(location.Y);\r\n            measure.Add(location.Z);\r\n            locationHandle = CreateCartesianPoint(file, measure);\r\n         }\r\n         else\r\n         {\r\n            locationHandle = ExporterCacheManager.Global3DOriginHandle;\r\n         }\r\n\r\n\r\n         bool exportDirAndRef = (axis != null && refDirection != null &&\r\n             (!MathUtil.IsAlmostEqual(axis[2], 1.0) || !MathUtil.IsAlmostEqual(refDirection[0], 1.0)));\r\n\r\n         if ((axis != null) ^ (refDirection != null))\r\n         {\r\n            exportDirAndRef = false;\r\n         }\r\n\r\n         IFCAnyHandle axisHandle = null;\r\n         if (exportDirAndRef)\r\n         {\r\n            List<double> measure = new() { axis.X, axis.Y, axis.Z };\r\n            axisHandle = CreateDirection(file, measure);\r\n         }\r\n\r\n         IFCAnyHandle refDirectionHandle = null;\r\n         if (exportDirAndRef)\r\n         {\r\n            List<double> measure = new() { refDirection.X, refDirection.Y, refDirection.Z };\r\n            refDirectionHandle = CreateDirection(file, measure);\r\n         }\r\n\r\n         return IFCInstanceExporter.CreateAxis2Placement3D(file, locationHandle, axisHandle, refDirectionHandle);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcAxis2Placement3D object.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"location\">The origin.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateAxis2Placement3D(IFCFile file, XYZ location)\r\n      {\r\n         return CreateAxis2Placement3D(file, location, null, null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a default IfcAxis2Placement3D object.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateAxis2Placement3D(IFCFile file)\r\n      {\r\n         return CreateAxis2Placement3D(file, null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IfcMappedItem object from an origin.\r\n      /// </summary>\r\n      /// <param name=\"file\">\r\n      /// The IFC file.\r\n      /// </param>\r\n      /// <param name=\"repMap\">\r\n      /// The handle to be mapped.\r\n      /// </param>\r\n      /// <param name=\"orig\">\r\n      /// The orig for mapping transformation.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The handle.\r\n      /// </returns>\r\n      public static IFCAnyHandle CreateDefaultMappedItem(IFCFile file, IFCAnyHandle repMap, XYZ orig)\r\n      {\r\n         if (MathUtil.IsAlmostZero(orig.X) && MathUtil.IsAlmostZero(orig.Y) && MathUtil.IsAlmostZero(orig.Z))\r\n            return CreateDefaultMappedItem(file, repMap);\r\n\r\n         IFCAnyHandle origin = CreateCartesianPoint(file, orig);\r\n         double scale = 1.0;\r\n         IFCAnyHandle mappingTarget =\r\n            IFCInstanceExporter.CreateCartesianTransformationOperator3D(file, null, null, origin, scale, null);\r\n         return IFCInstanceExporter.CreateMappedItem(file, repMap, mappingTarget);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IfcMappedItem object at (0,0,0).\r\n      /// </summary>\r\n      /// <param name=\"file\">\r\n      /// The IFC file.\r\n      /// </param>\r\n      /// <param name=\"repMap\">\r\n      /// The handle to be mapped.\r\n      /// </param>\r\n      /// <param name=\"orig\">\r\n      /// The orig for mapping transformation.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The handle.\r\n      /// </returns>\r\n      public static IFCAnyHandle CreateDefaultMappedItem(IFCFile file, IFCAnyHandle repMap)\r\n      {\r\n         IFCAnyHandle transformHnd = ExporterCacheManager.GetDefaultCartesianTransformationOperator3D(file);\r\n         return IFCInstanceExporter.CreateMappedItem(file, repMap, transformHnd);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IfcMappedItem object from a transform\r\n      /// </summary>\r\n      /// <param name=\"file\">\r\n      /// The IFC file.\r\n      /// </param>\r\n      /// <param name=\"repMap\">\r\n      /// The handle to be mapped.\r\n      /// </param>\r\n      /// <param name=\"transform\">\r\n      /// The transform.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The handle.\r\n      /// </returns>\r\n      public static IFCAnyHandle CreateMappedItemFromTransform(IFCFile file, IFCAnyHandle repMap, Transform transform)\r\n      {\r\n         IFCAnyHandle axis1 = CreateDirection(file, transform.BasisX, GeometryUtil.Dimension.Dim3D);\r\n         IFCAnyHandle axis2 = CreateDirection(file, transform.BasisY, GeometryUtil.Dimension.Dim3D);\r\n         IFCAnyHandle axis3 = CreateDirection(file, transform.BasisZ, GeometryUtil.Dimension.Dim3D);\r\n         IFCAnyHandle origin = CreateCartesianPoint(file, transform.Origin);\r\n         double scale = 1.0;\r\n         IFCAnyHandle mappingTarget =\r\n            IFCInstanceExporter.CreateCartesianTransformationOperator3D(file, axis1, axis2, origin, scale, axis3);\r\n         return IFCInstanceExporter.CreateMappedItem(file, repMap, mappingTarget);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcPolyLine from a list of UV points.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"polylinePts\">This list of UV values.</param>\r\n      /// <returns>An IfcPolyline handle.</returns>\r\n      public static IFCAnyHandle CreatePolyline(IFCFile file, IList<UV> polylinePts)\r\n      {\r\n         int numPoints = polylinePts.Count;\r\n         if (numPoints < 2)\r\n            return null;\r\n\r\n         bool closed = MathUtil.IsAlmostEqual(polylinePts[0], polylinePts[numPoints - 1]);\r\n         if (closed)\r\n         {\r\n            if (numPoints == 2)\r\n               return null;\r\n            numPoints--;\r\n         }\r\n\r\n         IList<IFCAnyHandle> points = new List<IFCAnyHandle>();\r\n         for (int ii = 0; ii < numPoints; ii++)\r\n         {\r\n            points.Add(CreateCartesianPoint(file, polylinePts[ii]));\r\n         }\r\n         if (closed)\r\n            points.Add(points[0]);\r\n\r\n         return IFCInstanceExporter.CreatePolyline(file, points);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a copy of local placement object.\r\n      /// </summary>\r\n      /// <param name=\"file\">\r\n      /// The IFC file.\r\n      /// </param>\r\n      /// <param name=\"originalPlacement\">\r\n      /// The original placement object to be copied.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The handle.\r\n      /// </returns>\r\n      public static IFCAnyHandle CopyLocalPlacement(IFCFile file, IFCAnyHandle originalPlacement)\r\n      {\r\n         IFCAnyHandle placementRelToOpt = GeometryUtil.GetPlacementRelToFromLocalPlacement(originalPlacement);\r\n         IFCAnyHandle relativePlacement = GeometryUtil.GetRelativePlacementFromLocalPlacement(originalPlacement);\r\n         return IFCInstanceExporter.CreateLocalPlacement(file, placementRelToOpt, relativePlacement);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a new local placement object.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"placementRelTo\">The placement object.</param>\r\n      /// <param name=\"relativePlacement\">The relative placement. Null to create a identity relative placement.</param>\r\n      /// <returns></returns>\r\n      public static IFCAnyHandle CreateLocalPlacement(IFCFile file, IFCAnyHandle placementRelTo, IFCAnyHandle relativePlacement)\r\n      {\r\n         if (relativePlacement == null)\r\n         {\r\n            relativePlacement = ExporterUtil.CreateAxis2Placement3D(file);\r\n         }\r\n         return IFCInstanceExporter.CreateLocalPlacement(file, placementRelTo, relativePlacement);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a new local placement object.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"placementRelTo\">The placement object.</param>\r\n      /// <param name=\"location\">The relative placement origin.</param>\r\n      /// <param name=\"axis\">The relative placement Z value.</param>\r\n      /// <param name=\"refDirection\">The relative placement X value.</param>\r\n      /// <returns></returns>\r\n      public static IFCAnyHandle CreateLocalPlacement(IFCFile file, IFCAnyHandle placementRelTo, XYZ location, XYZ axis, XYZ refDirection)\r\n      {\r\n         IFCAnyHandle relativePlacement = ExporterUtil.CreateAxis2Placement3D(file, location, axis, refDirection);\r\n         return IFCInstanceExporter.CreateLocalPlacement(file, placementRelTo, relativePlacement);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a relative transformation from two local placemets.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporterIFC class.</param>\r\n      /// <param name=\"originalPlacement\">The placement object one.</param>\r\n      /// <param name=\"newPlacement\">The placement object two.</param>\r\n      /// <returns>The transformation.</returns>\r\n      /// <remarks>\r\n      /// The method is similar to ExporterIFCUtils.GetRelativeLocalPlacementOffsetTransform\r\n      /// but it uses API that doesn't fix vectors direction \r\n      /// </remarks>\r\n      public static Transform GetRelativePlacementOffsetTransform(ExporterIFC exporterIFC, IFCAnyHandle originalPlacement, IFCAnyHandle newPlacement)\r\n      {\r\n         Transform originalTrf = ExporterIFCUtils.GetUnscaledTransform(exporterIFC, originalPlacement);\r\n         Transform newTrf = ExporterIFCUtils.GetUnscaledTransform(exporterIFC, newPlacement);\r\n\r\n         Transform resultTrf = new Transform(Transform.Identity);\r\n         \r\n         resultTrf.BasisZ = new XYZ(newTrf.BasisX.DotProduct(originalTrf.BasisZ),\r\n                                    newTrf.BasisY.DotProduct(originalTrf.BasisZ),\r\n                                    newTrf.BasisZ.DotProduct(originalTrf.BasisZ));\r\n\r\n         resultTrf.BasisX = new XYZ(newTrf.BasisX.DotProduct(originalTrf.BasisX),\r\n                                    newTrf.BasisY.DotProduct(originalTrf.BasisX),\r\n                                    newTrf.BasisZ.DotProduct(originalTrf.BasisX));\r\n\r\n         XYZ tmpRelOrig = originalTrf.Origin - newTrf.Origin;\r\n\r\n         resultTrf.Origin = new XYZ(newTrf.BasisX.DotProduct(tmpRelOrig),\r\n                           newTrf.BasisY.DotProduct(tmpRelOrig),\r\n                           newTrf.BasisZ.DotProduct(tmpRelOrig));\r\n\r\n         resultTrf.Origin = UnitUtil.ScaleLength(resultTrf.Origin);\r\n         resultTrf.BasisY = resultTrf.BasisZ.CrossProduct(resultTrf.BasisX).Normalize();\r\n\r\n         return resultTrf;\r\n      }\r\n\r\n      public static IList<IFCAnyHandle> CopyRepresentations(ExporterIFC exporterIFC, Element element, ElementId catId, IFCAnyHandle origProductRepresentation)\r\n      {\r\n         IList<IFCAnyHandle> origReps = IFCAnyHandleUtil.GetRepresentations(origProductRepresentation);\r\n         IList<IFCAnyHandle> newReps = new List<IFCAnyHandle>();\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         int num = origReps.Count;\r\n         for (int ii = 0; ii < num; ii++)\r\n         {\r\n            IFCAnyHandle repHnd = origReps[ii];\r\n            if (IFCAnyHandleUtil.IsTypeOf(repHnd, IFCEntityType.IfcShapeRepresentation))\r\n            {\r\n               IFCAnyHandle newRepHnd = RepresentationUtil.CreateShapeRepresentation(exporterIFC, element, catId,\r\n                   IFCAnyHandleUtil.GetContextOfItems(repHnd),\r\n                   IFCAnyHandleUtil.GetRepresentationIdentifier(repHnd), IFCAnyHandleUtil.GetRepresentationType(repHnd),\r\n                   IFCAnyHandleUtil.GetItems(repHnd));\r\n               newReps.Add(newRepHnd);\r\n            }\r\n            else\r\n            {\r\n               // May want to throw exception here.\r\n               newReps.Add(repHnd);\r\n            }\r\n         }\r\n\r\n         return newReps;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a copy of a product definition shape.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">\r\n      /// The exporter.\r\n      /// </param>\r\n      /// <param name=\"origProductDefinitionShape\">\r\n      /// The original product definition shape to be copied.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The handle.\r\n      /// </returns>\r\n      public static IFCAnyHandle CopyProductDefinitionShape(ExporterIFC exporterIFC,\r\n          Element elem,\r\n          ElementId catId,\r\n          IFCAnyHandle origProductDefinitionShape)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(origProductDefinitionShape))\r\n            return null;\r\n\r\n         IList<IFCAnyHandle> representations = CopyRepresentations(exporterIFC, elem, catId, origProductDefinitionShape);\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         return IFCInstanceExporter.CreateProductDefinitionShape(file, IFCAnyHandleUtil.GetProductDefinitionShapeName(origProductDefinitionShape),\r\n             IFCAnyHandleUtil.GetProductDefinitionShapeDescription(origProductDefinitionShape), representations);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the mapping information for a particular category and wall function.\r\n      /// </summary>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"wallFunction\">The optional wall function.</param>\r\n      /// <param name=\"info\">The mapping information for the category if it exists.</param>\r\n      /// <returns></returns>\r\n      public static bool GetCategoryInfoById(ElementId categoryId, WallFunction? wallFunction, \r\n         out ExportIFCCategoryInfo info)\r\n      {\r\n         CustomSubCategoryId customSubCategoryId = WallFunctionToCustomSubCategoryId(wallFunction);\r\n         info = ExporterCacheManager.CategoryMappingTemplate.GetMappingInfoById(ExporterCacheManager.Document, categoryId, customSubCategoryId);\r\n         return !(info?.IsDefault() ?? true);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the mapping information for a particular category.\r\n      /// </summary>\r\n      /// <param name=\"category\">The category.</param>\r\n      /// <param name=\"info\">The mapping information for the category if it exists.</param>\r\n      /// <returns></returns>\r\n      public static bool GetCategoryInfoById(Category category, out ExportIFCCategoryInfo exportInfo)\r\n      {\r\n         exportInfo = null;\r\n\r\n         if(category == null)\r\n            return false;\r\n\r\n         ElementId elementId = category.Parent?.Id ?? ElementId.InvalidElementId;\r\n         if (elementId != ElementId.InvalidElementId)\r\n            return ExporterUtil.GetCategoryInfoById(elementId, null, out exportInfo);\r\n         else\r\n            return sExtendedCategoryMap.TryGetValue(category.BuiltInCategory, out exportInfo);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts WallFunction enum to IFC CustomSubCategoryId\r\n      /// </summary>\r\n      /// <param name=\"wallFunction\">Optional wall function.</param>\r\n      /// <returns>The custom sub-category id.</returns>\r\n      public static CustomSubCategoryId WallFunctionToCustomSubCategoryId(WallFunction? wallFunction)\r\n      {\r\n         CustomSubCategoryId specialType = CustomSubCategoryId.None;\r\n         if (wallFunction == null)\r\n            return specialType;\r\n\r\n         switch (wallFunction)\r\n         {\r\n            case WallFunction.Coreshaft: specialType = CustomSubCategoryId.Coreshaft; break;\r\n            case WallFunction.Exterior: specialType = CustomSubCategoryId.ExteriorWall; break;\r\n            case WallFunction.Foundation: specialType = CustomSubCategoryId.FoundationWall; break;\r\n            case WallFunction.Interior: specialType = CustomSubCategoryId.InteriorWall; break;\r\n            case WallFunction.Retaining: specialType = CustomSubCategoryId.RetainingWall; break;\r\n            case WallFunction.Soffit: specialType = CustomSubCategoryId.Soffit; break;\r\n         }\r\n         return specialType;\r\n      }\r\n\r\n      private static string GetIFCEntityNameFromExportTable(WallFunction wallFunction)\r\n      {\r\n         if (GetCategoryInfoById(new ElementId(BuiltInCategory.OST_Walls), wallFunction,\r\n            out ExportIFCCategoryInfo info))\r\n         {\r\n            return info.IFCEntityName;\r\n         }\r\n         return null;\r\n      }\r\n\r\n      private static string GetIFCTypeFromExportTable(WallFunction wallFunction)\r\n      {\r\n         if (GetCategoryInfoById(new ElementId(BuiltInCategory.OST_Walls), wallFunction, \r\n            out ExportIFCCategoryInfo info))\r\n         {\r\n            return info.IFCPredefinedType;\r\n         }\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the category and function information for an element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The category and the optional function</returns>\r\n      public static (Category, WallFunction?) GetMappingKeyInformationForElement(Element element)\r\n      {\r\n         // TODO: This should really return CustomSubCategoryId, which in theory could apply to more than walls.\r\n         Category category = CategoryUtil.GetSafeCategory(element);\r\n         WallFunction? wallFunction = null;\r\n\r\n         ElementId categoryId = category?.Id ?? ElementId.InvalidElementId;\r\n         if (categoryId == new ElementId(BuiltInCategory.OST_Walls) && (element is Wall))\r\n         {\r\n            WallType wallType = element.Document.GetElement(element.GetTypeId()) as WallType;\r\n            if (wallType != null)\r\n            {\r\n               wallFunction = wallType.Function;\r\n            }\r\n         }\r\n\r\n         return (category, wallFunction);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the IFC category mapping information associated with an element.\r\n      /// </summary>\r\n      /// <param name=\"category\">The element.</param>\r\n      /// <returns>The category mapping information, if found.</returns>\r\n      public static ExportIFCCategoryInfo GetIFCCategoryExportMappingInfo(Element element)\r\n      {\r\n         (Category category, WallFunction? wallFunction) = GetMappingKeyInformationForElement(element);\r\n\r\n         ElementId categoryId = category?.Id ?? ElementId.InvalidElementId;\r\n         ExportIFCCategoryInfo info;\r\n         if (GetCategoryInfoById(categoryId, wallFunction, out info))\r\n         {\r\n            // If the category information is default (i.e., export and <By Category>), then we try our luck\r\n            // with the parent.  If the flag is false, we aren't exporting it anyway.  In the future, we may\r\n            // get the parent info and override the flag, if there is value to that.\r\n            if (!info.IsDefault())\r\n            {\r\n               return info;\r\n            }\r\n         }\r\n\r\n         // If the wall function is not null, then the \"parent\" category id is the original\r\n         // category id, minus the wall function.\r\n         ElementId parentCategoryId = category?.Parent?.Id ?? (wallFunction == null ? ElementId.InvalidElementId : categoryId);\r\n         if (parentCategoryId != ElementId.InvalidElementId)\r\n         {\r\n            if (GetCategoryInfoById(parentCategoryId, null, out ExportIFCCategoryInfo parentInfo))\r\n            {\r\n               return parentInfo;\r\n            }\r\n         }\r\n\r\n         return info;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the IFC entity name assigned in the category mapping table for a particular categoy.\r\n      /// </summary>\r\n      /// <param name=\"category\">The category.</param>\r\n      /// <returns>The entity name if found.</returns>\r\n      public static string GetIFCEntityNameFromExportTable(Category category)\r\n      {\r\n         if (category == null)\r\n         {\r\n            return null;\r\n         }\r\n\r\n         if (GetCategoryInfoById(category.Id, null, out ExportIFCCategoryInfo info))\r\n         {\r\n            return info.IFCEntityName;\r\n         }\r\n\r\n         ElementId parentCategoryId = category.Parent?.Id ?? ElementId.InvalidElementId;\r\n         if (parentCategoryId != ElementId.InvalidElementId)\r\n         {\r\n            if (GetCategoryInfoById(parentCategoryId, null, out info))\r\n            {\r\n               return info.IFCEntityName;\r\n            }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the IFC predefined type name assigned in the category mapping table for a particular categoy.\r\n      /// </summary>\r\n      /// <param name=\"categoryId\">The category.</param>\r\n      /// <returns>The predefined type if found.</returns>\r\n      public static string GetIFCTypeFromExportTable(Category category)\r\n      {\r\n         if (category == null)\r\n            return null;\r\n\r\n         if (GetCategoryInfoById(category.Id, null, out ExportIFCCategoryInfo info))\r\n            return info.IFCPredefinedType;\r\n     \r\n         if (category.Parent != null)\r\n         {\r\n            if (GetCategoryInfoById(category.Parent.Id, null, out info))\r\n               return info.IFCPredefinedType;\r\n         }\r\n\r\n         return null;\r\n       }\r\n\r\n      private static Category GetCategoryForMass(Element element)\r\n      {\r\n         Options geomOptions = GeometryUtil.GetIFCExportGeometryOptions();\r\n         GeometryElement geomElem = element.get_Geometry(geomOptions);\r\n         if (geomElem == null)\r\n            return null;\r\n\r\n         SolidMeshGeometryInfo solidMeshCapsule = GeometryUtil.GetSplitSolidMeshGeometry(geomElem);\r\n         IList<SolidInfo> solidInfos = solidMeshCapsule.SolidInfoList;\r\n         IList<Mesh> meshes = solidMeshCapsule.GetMeshes();\r\n\r\n         Category overrideCategory = null;\r\n         bool initOverrideCatId = false;\r\n\r\n         Document doc = element.Document;\r\n\r\n         foreach (SolidInfo solidInfo in solidInfos)\r\n         {\r\n            if (!ProcessObjectForGStyle(doc, solidInfo.Solid, ref overrideCategory, ref initOverrideCatId))\r\n               return null;\r\n         }\r\n\r\n         foreach (Mesh mesh in meshes)\r\n         {\r\n            if (!ProcessObjectForGStyle(doc, mesh, ref overrideCategory, ref initOverrideCatId))\r\n               return null;\r\n         }\r\n\r\n         return overrideCategory;\r\n      }\r\n\r\n      private static string GetIFCClassNameOrTypeForMass(Element element, bool getClassName)\r\n      {\r\n         Category overrideCategory = GetCategoryForMass(element);\r\n         if (getClassName)\r\n            return GetIFCEntityNameFromExportTable(overrideCategory);\r\n\r\n         // At the moment, we don't have the right API to get the type from a categoryId instead of from an element\r\n         // from the category table.  As such, we are going to hardwire this.  The only one that matters is OST_MassFloor.\r\n         if ((overrideCategory?.Id.Value ?? -1) == (int) BuiltInCategory.OST_MassFloor)\r\n         {\r\n            string className = GetIFCEntityNameFromExportTable(overrideCategory);\r\n            if (string.Compare(className, \"IfcSlab\", true) == 0)\r\n               return \"FLOOR\";\r\n            if (string.Compare(className, \"IfcCovering\", true) == 0)\r\n               return \"FLOORING\";\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      private static ExportIFCCategoryInfo GetCategoryInfoForMass(Element element)\r\n      {\r\n         Category overrideCategory = GetCategoryForMass(element);\r\n         ElementId categoryId = overrideCategory?.Id ?? ElementId.InvalidElementId;\r\n         GetCategoryInfoById(categoryId, null, out ExportIFCCategoryInfo info);\r\n         return info;\r\n      }\r\n\r\n      private static string GetIFCClassNameOrTypeForWalls(Wall wall, bool getClassName)\r\n      {\r\n         WallType wallType = wall.WallType;\r\n         if (wallType == null)\r\n            return null;\r\n\r\n         int wallFunction;\r\n         if (ParameterUtil.GetIntValueFromElement(wallType, BuiltInParameter.FUNCTION_PARAM, out wallFunction) != null)\r\n         {\r\n            if (getClassName)\r\n               return GetIFCEntityNameFromExportTable((WallFunction) wallFunction);\r\n            else\r\n               return GetIFCTypeFromExportTable((WallFunction)wallFunction);\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      private static ExportIFCCategoryInfo GetCategoryInfoForWalls(Wall wall)\r\n      {\r\n         WallFunction? function = wall?.WallType?.Function;\r\n         GetCategoryInfoById(new ElementId(BuiltInCategory.OST_Walls), function, out ExportIFCCategoryInfo info);\r\n         return info;\r\n      }\r\n\r\n      private static bool ProcessObjectForGStyle(Document doc, GeometryObject geomObj, \r\n         ref Category overrideCategory, ref bool initOverrideCatId)\r\n      {\r\n         GraphicsStyle gStyle = doc.GetElement(geomObj.GraphicsStyleId) as GraphicsStyle;\r\n         Category currCategory = gStyle?.GraphicsStyleCategory;\r\n         if (currCategory == null)\r\n            return true;\r\n\r\n         if (!initOverrideCatId)\r\n         {\r\n            initOverrideCatId = true;\r\n            overrideCategory = currCategory;\r\n            return true;\r\n         }\r\n\r\n         if (currCategory.Id != overrideCategory.Id)\r\n         {\r\n            overrideCategory = null;\r\n            return false;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      private static string GetIFCClassNameOrTypeFromSpecialEntry(Element element, ElementId categoryId, bool getClassName)\r\n      {\r\n         if (element == null)\r\n            return null;\r\n\r\n         // We do special checks for Wall and Massing categories.\r\n         // For walls, we check if it is an interior or exterior wall.\r\n         // For massing, we check the geometry.  If it is all in the same sub-category, we use that instead.\r\n         if (categoryId == new ElementId(BuiltInCategory.OST_Walls))\r\n         {\r\n            if (element is Wall)\r\n               return GetIFCClassNameOrTypeForWalls(element as Wall, getClassName);\r\n         }\r\n         else if (categoryId == new ElementId(BuiltInCategory.OST_Mass))\r\n         {\r\n            return GetIFCClassNameOrTypeForMass(element, getClassName);\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      private static ExportIFCCategoryInfo GetCategoryInfoForSpecialEntry(Element element, ElementId categoryId)\r\n      {\r\n         if (element == null)\r\n            return null;\r\n\r\n         // We do special checks for Wall and Massing categories.\r\n         // For walls, we check if it is an interior or exterior wall.\r\n         // For massing, we check the geometry.  If it is all in the same sub-category, we use that instead.\r\n         if (categoryId.Value == (int) BuiltInCategory.OST_Walls)\r\n         {\r\n            return GetCategoryInfoForWalls(element as Wall);\r\n         }\r\n         else if (categoryId.Value == (int) BuiltInCategory.OST_Mass)\r\n         {\r\n            return GetCategoryInfoForMass(element);\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the category id that will be used for category mapping for this element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The category and element id of the category, if it exists.</returns>\r\n      public static (Category, ElementId) GetSpecificCategoryForElement(Element element)\r\n      {\r\n         Category actualCategory = CategoryUtil.GetSafeCategory(element);\r\n\r\n         ElementId categoryId = actualCategory?.Id ?? ElementId.InvalidElementId;\r\n         if (categoryId == ElementId.InvalidElementId)\r\n            return (null, categoryId);\r\n\r\n         // Special Case for Beams: if the structural usage is set, use that sub-category.\r\n         ElementId actualCategoryId = categoryId;\r\n         StructuralInstanceUsage usage = (element as FamilyInstance)?.StructuralUsage ?? StructuralInstanceUsage.Undefined;\r\n         switch (usage)\r\n         {\r\n            case StructuralInstanceUsage.Automatic:\r\n            case StructuralInstanceUsage.Column:\r\n            case StructuralInstanceUsage.Undefined:\r\n            case StructuralInstanceUsage.Wall:\r\n               break;\r\n            case StructuralInstanceUsage.Brace:\r\n               actualCategoryId = new ElementId(BuiltInCategory.OST_VerticalBracing);\r\n               break;\r\n            case StructuralInstanceUsage.Girder:\r\n               actualCategoryId = new ElementId(BuiltInCategory.OST_Girder);\r\n               break;\r\n            case StructuralInstanceUsage.HorizontalBracing:\r\n               actualCategoryId = new ElementId(BuiltInCategory.OST_HorizontalBracing);\r\n               break;\r\n            case StructuralInstanceUsage.Joist:\r\n               actualCategoryId = new ElementId(BuiltInCategory.OST_Joist);\r\n               break;\r\n            case StructuralInstanceUsage.KickerBracing:\r\n               actualCategoryId = new ElementId(BuiltInCategory.OST_KickerBracing);\r\n               break;\r\n            case StructuralInstanceUsage.Other:\r\n               {\r\n                  if (categoryId == new ElementId(BuiltInCategory.OST_StructuralFraming))\r\n                  {\r\n                     actualCategoryId = new ElementId(BuiltInCategory.OST_StructuralFramingOther);\r\n                  }\r\n                  break;\r\n               }\r\n            case StructuralInstanceUsage.Purlin:\r\n               actualCategoryId = new ElementId(BuiltInCategory.OST_Purlin);\r\n               break;\r\n            case StructuralInstanceUsage.TrussChord:\r\n               actualCategoryId = new ElementId(BuiltInCategory.OST_TrussChord);\r\n               break;\r\n            case StructuralInstanceUsage.TrussWeb:\r\n               actualCategoryId = new ElementId(BuiltInCategory.OST_TrussWeb);\r\n               break;\r\n         }\r\n\r\n         if (actualCategoryId != categoryId)\r\n         {\r\n            actualCategory = Category.GetCategory(element.Document, actualCategoryId);\r\n         }\r\n         return (actualCategory, actualCategoryId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the mapping information assigned in the IFC category table for a category.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"categoryId\">The returned category id.</param>\r\n      /// <returns>The entity name.</returns>\r\n      public static ExportIFCCategoryInfo GetCategoryInfoFromExportTable(Element element, out ElementId categoryId)\r\n      {\r\n         Category category;\r\n         (category, categoryId) = GetSpecificCategoryForElement(element);\r\n         if (categoryId == ElementId.InvalidElementId)\r\n            return null;\r\n\r\n         ExportIFCCategoryInfo info = GetCategoryInfoForSpecialEntry(element, categoryId);\r\n         if (!info?.IsDefault() ?? false)\r\n         {\r\n            return info;\r\n         }\r\n\r\n         if (!GetCategoryInfoById(categoryId, null, out info))\r\n         {\r\n            ElementId parentCategoryId = category.Parent?.Id ?? ElementId.InvalidElementId;\r\n            if (parentCategoryId != ElementId.InvalidElementId)\r\n            {\r\n               GetCategoryInfoById(parentCategoryId, null, out info);\r\n            }\r\n         }\r\n\r\n         return info;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the IFC entity name assigned in the IFC category table for a category.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"categoryId\">The returned category id.</param>\r\n      /// <returns>The entity name.</returns>\r\n      public static string GetIFCEntityNameFromExportTable(Element element, out ElementId categoryId)\r\n      {\r\n         Category category = CategoryUtil.GetSafeCategory(element);\r\n\r\n         categoryId = category?.Id ?? ElementId.InvalidElementId;\r\n         if (categoryId == ElementId.InvalidElementId)\r\n            return null;\r\n         \r\n         string specialEntry = GetIFCClassNameOrTypeFromSpecialEntry(element, categoryId, true);\r\n         if (specialEntry != null)\r\n            return specialEntry;\r\n\r\n         return GetIFCEntityNameFromExportTable(category);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the IFC predefined type assigned in the export layers table for a category.  Cache values to avoid calls to internal code.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The predefined type.</returns>\r\n      public static string GetIFCTypeFromExportTable(Element element)\r\n      {\r\n         Category category = CategoryUtil.GetSafeCategory(element);\r\n         if (category == null)\r\n            return null;\r\n\r\n         ElementId categoryId = category.Id;\r\n         string specialEntry = GetIFCClassNameOrTypeFromSpecialEntry(element, categoryId, false);\r\n         if (specialEntry != null)\r\n            return specialEntry;\r\n\r\n         return GetIFCTypeFromExportTable(category);\r\n      }\r\n\r\n      private class ApplicablePsets<T> where T : Description\r\n      {\r\n         public class PsetsByTypeAndPredefinedType\r\n         {\r\n            public void Initialize(bool process, PsetsByTypeAndPredefinedType cachedPsets)\r\n            {\r\n               if (process)\r\n               {\r\n                  SearchByType = cachedPsets?.ByType == null;\r\n                  SearchByPredefinedType = cachedPsets?.ByPredefinedType == null;\r\n                  SearchByAltPredefinedType = cachedPsets?.ByAltPredefinedType == null;\r\n               }\r\n\r\n               ByType = new List<T>();\r\n               ByPredefinedType = new List<T>();\r\n               ByAltPredefinedType = new List<T>();\r\n            }\r\n\r\n            public void UnionWith(PsetsByTypeAndPredefinedType applicablePsets)\r\n            {\r\n               if (SearchByType)\r\n                  ByType = ByType.Union(applicablePsets.ByType).ToList();\r\n               if (SearchByPredefinedType)\r\n                  ByPredefinedType = ByPredefinedType.Union(applicablePsets.ByPredefinedType).ToList();\r\n               if (SearchByAltPredefinedType)\r\n                  ByAltPredefinedType = ByAltPredefinedType.Union(applicablePsets.ByAltPredefinedType).ToList();\r\n            }\r\n\r\n            public void PopulateFromCache(PsetsByTypeAndPredefinedType cacheToUse)\r\n            {\r\n               if (!SearchByType)\r\n                  ByType = cacheToUse.ByType;\r\n               if (!SearchByPredefinedType)\r\n                  ByPredefinedType = cacheToUse.ByPredefinedType;\r\n               if (!SearchByAltPredefinedType)\r\n                  ByAltPredefinedType = cacheToUse.ByAltPredefinedType;\r\n            }\r\n\r\n            public void PopulateCache(IFCEntityType entityType,\r\n               string predefinedType,\r\n               string altPredefinedType,\r\n               IDictionary<ExporterCacheManager.PropertySetKey, IList<T>> cacheToUse)\r\n            {\r\n               if (SearchByType && ByType.Count > 0)\r\n                  cacheToUse[new ExporterCacheManager.PropertySetKey(entityType, null)] = ByType;\r\n               if (SearchByPredefinedType && ByPredefinedType.Count > 0)\r\n                  cacheToUse[new ExporterCacheManager.PropertySetKey(entityType, predefinedType)] = ByPredefinedType;\r\n               if (SearchByAltPredefinedType && ByAltPredefinedType.Count > 0)\r\n                  cacheToUse[new ExporterCacheManager.PropertySetKey(entityType, altPredefinedType)] = ByAltPredefinedType;\r\n            }\r\n\r\n            public void AddToList(List<T> currList)\r\n            {\r\n               currList.AddRange(ByType);\r\n               currList.AddRange(ByPredefinedType);\r\n               currList.AddRange(ByAltPredefinedType);\r\n            }\r\n\r\n            public bool NeedSearch()\r\n            {\r\n               return SearchByType || SearchByPredefinedType || SearchByAltPredefinedType;\r\n            }\r\n\r\n            public IList<T> ByType { get; set; } = null;\r\n            public IList<T> ByPredefinedType { get; set; } = null;\r\n            public IList<T> ByAltPredefinedType { get; set; } = null;\r\n\r\n            private bool SearchByType { get; set; } = false;\r\n            private bool SearchByPredefinedType { get; set; } = false;\r\n            private bool SearchByAltPredefinedType { get; set; } = false;\r\n         }\r\n\r\n         public PsetsByTypeAndPredefinedType ByIfcEntity { get; set; } = new PsetsByTypeAndPredefinedType();\r\n         public PsetsByTypeAndPredefinedType ByIfcEntityType { get; set; } = new PsetsByTypeAndPredefinedType();\r\n\r\n         public void Initialize(bool processInstance, bool processType,\r\n            ApplicablePsets<T> cachedPsets)\r\n         {\r\n            ProcessInstance = processInstance;\r\n            ProcessType = processType;\r\n\r\n            ByIfcEntity.Initialize(ProcessInstance, cachedPsets?.ByIfcEntity);\r\n            ByIfcEntityType.Initialize(ProcessType, cachedPsets?.ByIfcEntityType);\r\n         }\r\n\r\n         public void PopulateFromCache(ApplicablePsets<T> cacheToUse)\r\n         {\r\n            if (ProcessInstance)\r\n            {\r\n               ByIfcEntity.PopulateFromCache(cacheToUse.ByIfcEntity);\r\n            }\r\n\r\n            if (ProcessType)\r\n            {\r\n               ByIfcEntityType.PopulateFromCache(cacheToUse.ByIfcEntityType);\r\n            }\r\n         }\r\n\r\n         public void UnionWith(ApplicablePsets<T> applicablePsets)\r\n         {\r\n            if (ProcessInstance)\r\n            {\r\n               ByIfcEntity.UnionWith(applicablePsets.ByIfcEntity);\r\n            }\r\n\r\n            if (ProcessType)\r\n            {\r\n               ByIfcEntityType.UnionWith(applicablePsets.ByIfcEntityType);\r\n            }\r\n         }\r\n\r\n         public bool NeedSearch()\r\n         {\r\n            return ByIfcEntity.NeedSearch() || ByIfcEntityType.NeedSearch();\r\n         }\r\n\r\n         public void PopulateCache(IFCEntityType instanceEntity,\r\n            IFCEntityType typeEntity,\r\n            string predefinedType,\r\n            string altPredefinedType,\r\n            IDictionary<ExporterCacheManager.PropertySetKey, IList<T>> cacheToUse)\r\n         {\r\n            if (ProcessInstance)\r\n            {\r\n               ByIfcEntity.PopulateCache(instanceEntity, predefinedType, altPredefinedType, cacheToUse);\r\n            }\r\n\r\n            if (ProcessType)\r\n            {\r\n               ByIfcEntityType.PopulateCache(typeEntity, predefinedType, altPredefinedType, cacheToUse);\r\n            }\r\n         }\r\n\r\n         public void AddItem(bool addToInstance, bool addToType, IFCExportInfoPair exportInfo,\r\n            string objectType, T currDesc)\r\n         {\r\n            bool userdefinedPdefType = false;\r\n\r\n            if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            {\r\n               userdefinedPdefType = true;\r\n            }\r\n            else\r\n            {\r\n               if (!string.IsNullOrEmpty(currDesc.PredefinedType)\r\n                  && currDesc.PredefinedType.Equals(exportInfo.PredefinedType, StringComparison.InvariantCultureIgnoreCase)\r\n                  && currDesc.PredefinedType.Equals(\"USERDEFINED\", StringComparison.InvariantCultureIgnoreCase))\r\n                  userdefinedPdefType = true;\r\n            }\r\n\r\n            bool appropriateObjectType = currDesc.IsValidObjectType(objectType);\r\n\r\n            if (string.IsNullOrEmpty(currDesc.PredefinedType))\r\n            {\r\n               if (addToInstance)\r\n                  ByIfcEntity.ByType.Add(currDesc);\r\n               if (addToType)\r\n                  ByIfcEntityType.ByType.Add(currDesc);\r\n            }\r\n            // Also check ObjectType for extended predefined of USERDEFINED (for IFC4 onward only)\r\n            else if (appropriateObjectType && userdefinedPdefType)\r\n            {\r\n               if (addToInstance)\r\n                  ByIfcEntity.ByAltPredefinedType.Add(currDesc);\r\n               if (addToType)\r\n                  ByIfcEntityType.ByAltPredefinedType.Add(currDesc);\r\n            }\r\n            else if (!string.IsNullOrEmpty(currDesc.PredefinedType) &&\r\n               currDesc.PredefinedType.Equals(exportInfo.PredefinedType, StringComparison.InvariantCultureIgnoreCase))\r\n            {\r\n               if (addToInstance)\r\n                  ByIfcEntity.ByPredefinedType.Add(currDesc);\r\n               if (addToType)\r\n                  ByIfcEntityType.ByPredefinedType.Add(currDesc);\r\n            }\r\n         }\r\n\r\n         public IList<T> AsList()\r\n         {\r\n            List<T> newList = new List<T>();\r\n            if (ProcessInstance)\r\n            {\r\n               ByIfcEntity.AddToList(newList);\r\n            }\r\n\r\n            if (ProcessType)\r\n            {\r\n               ByIfcEntityType.AddToList(newList);\r\n            }\r\n            return newList;\r\n         }\r\n\r\n         private bool ProcessInstance { get; set; } = false;\r\n\r\n         private bool ProcessType { get; set; } = false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines if an IFCEntityType is a non-strict sub-type of another IFCEntityType for the\r\n      /// current IFC schema.\r\n      /// </summary>\r\n      /// <param name=\"entityType\">The child entity type.</param>\r\n      /// <param name=\"parentType\">The parent entity type.</param>\r\n      /// <returns>True if the child is a non-strict sub-type.</returns>\r\n      public static bool IsSubTypeOf(IFCEntityType entityType, IFCEntityType parentType)\r\n      {\r\n         return IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion,\r\n            entityType.ToString(), parentType.ToString(), strict: false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the list of defined property sets appropriate to this handle.\r\n      /// </summary>\r\n      /// <param name=\"prodHnd\">The handle.</param>\r\n      /// <param name=\"psetsToProcess\">Process instance or type properties (or both).</param>\r\n      /// <returns>The list of property sets for this handle.</returns>\r\n      public static IList<PropertySetDescription> GetCurrPSetsToCreate(IFCAnyHandle prodHnd,\r\n         PSetsToProcess psetsToProcess)\r\n      {\r\n         ParameterCache parameterCache = ExporterCacheManager.ParameterCache;\r\n         IList<IList<PropertySetDescription>> psetsToCreate = parameterCache.PropertySets;\r\n         IList<int> instanceAndTypePsetIndices = parameterCache.InstanceAndTypePsetIndices;\r\n         \r\n         return GetCurrPSetsToCreateGeneric(prodHnd, psetsToCreate, instanceAndTypePsetIndices,\r\n            ExporterCacheManager.PropertySetsForTypeCache, psetsToProcess);\r\n      }\r\n      /// <summary>\r\n      /// Gets the list of predefined property sets appropriate to this handle\r\n      /// </summary>\r\n      /// <param name=\"prodHnd\">The handle.</param>\r\n      /// <param name=\"psetsToCreate\">The list of all property sets.</param>\r\n      /// <returns>The list of predefined property sets for this handle.</returns>\r\n      public static IList<PreDefinedPropertySetDescription> GetCurrPreDefinedPSetsToCreate(IFCAnyHandle prodHnd,\r\n         IList<IList<PreDefinedPropertySetDescription>> psetsToCreate,\r\n         PSetsToProcess psetsToProcess)\r\n      {\r\n         return GetCurrPSetsToCreateGeneric(prodHnd, psetsToCreate, null,\r\n            ExporterCacheManager.PreDefinedPropertySetsForTypeCache, psetsToProcess);\r\n      }\r\n\r\n      public static IFCExportInfoPair GetExportInfoForProperties(IFCAnyHandle prodHnd)\r\n      {\r\n         IFCExportInfoPair exportInfo = null;\r\n\r\n         IFCEntityType prodHndType = IFCAnyHandleUtil.GetEntityType(prodHnd);\r\n\r\n         // PropertySetEntry will only have an information about IFC entity (or type) for the Pset definition but may not be both\r\n         // Here we will check for both and assign Pset to create equally for both Element or ElementType\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(prodHnd, IFCEntityType.IfcObject))\r\n         {\r\n            ElementId elemId = ExporterCacheManager.HandleToElementCache.Find(prodHnd);\r\n            if (elemId != ElementId.InvalidElementId)\r\n            {\r\n               exportInfo = ExporterCacheManager.ElementToHandleCache.FindPredefinedType(prodHnd, elemId);\r\n            }\r\n\r\n            if (exportInfo == null)\r\n            {\r\n               exportInfo = new IFCExportInfoPair(prodHndType);\r\n            }\r\n         }\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(prodHnd, IFCEntityType.IfcTypeObject))\r\n         {\r\n            exportInfo = new IFCExportInfoPair();\r\n            ElementTypeKey etKey = ExporterCacheManager.ElementTypeToHandleCache.Find(prodHnd);\r\n            if (etKey != null)\r\n            {\r\n               exportInfo.SetByTypeAndPredefinedType(etKey.Item2, etKey.Item3);\r\n            }\r\n            else\r\n            {\r\n               exportInfo.SetByType(prodHndType);\r\n            }\r\n         }\r\n         else\r\n         {\r\n            // Default\r\n            exportInfo = new IFCExportInfoPair(prodHndType);\r\n         }\r\n\r\n         return exportInfo;\r\n      }\r\n\r\n      private static IList<T> GetCachedValue<T>(bool process,\r\n         IDictionary<ExporterCacheManager.PropertySetKey, IList<T>> cacheToUse,\r\n         IFCEntityType entityType,\r\n         string predefinedType) where T : Description\r\n      {\r\n         if (!process)\r\n            return null;\r\n\r\n         ExporterCacheManager.PropertySetKey key =\r\n            new ExporterCacheManager.PropertySetKey(entityType, predefinedType);\r\n         if (cacheToUse.TryGetValue(key, out IList<T> tmpCachedPsets))\r\n            return tmpCachedPsets;\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get PropertySets from cache.\r\n      /// Current logic searches psets by 6 different PropertySet keys:\r\n      ///   1)IfcEntity,\r\n      ///   2)IfcEntity + PredefinedType,\r\n      ///   3)IfcEntity + AltPredefinedType,\r\n      ///   4)IfcEntityType,\r\n      ///   5)IfcEntityType + PredefinedType.\r\n      ///   6)IfcEntityType + AltPredefinedType,\r\n      /// Found psets are stored separately in ApplicablePsets object.\r\n      /// </summary>\r\n      /// <param name=\"exportInfo\">the export infor pair</param>\r\n      /// <returns>ApplicablePsets object with 6 containers which store 6 different groups of psets.\r\n      /// If size of container is 0 then this means that search hasn't found any Psets associated with\r\n      /// this type which is why empty container was cached. This function finds it and returns.\r\n      /// If container is null then this means that info for this type is not cached because search has\r\n      /// never been performed for it.\r\n      /// </returns>\r\n      private static ApplicablePsets<T> GetCachedPropertySetsGeneric<T>(IFCExportInfoPair exportInfo,\r\n         string objectType, IDictionary<ExporterCacheManager.PropertySetKey, IList<T>> cacheToUse,\r\n         PSetsToProcess psetsToProcess) where T : Description\r\n      {\r\n         // For IFC2x3, we can have a situation where there isn't a 1:1 mapping of instance to type,\r\n         // and so we get the type passed in as exportInfo.ExportInstance.  In this case, we use the\r\n         // Instance ExportInstance but populate the ByIfcEntityType fields.\r\n         bool processInstance = psetsToProcess != PSetsToProcess.Type;\r\n         bool processType = psetsToProcess != PSetsToProcess.Instance;\r\n\r\n         ApplicablePsets<T> applicablePsets = new ApplicablePsets<T>();\r\n\r\n         if (!processInstance && !processType)\r\n            return applicablePsets;\r\n\r\n         bool unknownType = exportInfo.ExportType == IFCEntityType.UnKnown;\r\n\r\n         IFCEntityType instanceEntity = exportInfo.ExportInstance;\r\n         IFCEntityType typeEntity =\r\n            (processType && unknownType) ? exportInfo.ExportInstance : exportInfo.ExportType;\r\n\r\n         applicablePsets.ByIfcEntity.ByType =\r\n            GetCachedValue(processInstance, cacheToUse, instanceEntity, null);\r\n         applicablePsets.ByIfcEntityType.ByType =\r\n            GetCachedValue(processType, cacheToUse, typeEntity, null);\r\n\r\n         if (!exportInfo.IsPredefinedTypeDefault)\r\n         {\r\n            applicablePsets.ByIfcEntity.ByPredefinedType =\r\n               GetCachedValue(processInstance, cacheToUse, instanceEntity, exportInfo.PredefinedType);\r\n            applicablePsets.ByIfcEntityType.ByPredefinedType =\r\n               GetCachedValue(processType, cacheToUse, typeEntity, exportInfo.PredefinedType);\r\n         }\r\n\r\n         if (!string.IsNullOrEmpty(objectType))\r\n         {\r\n            applicablePsets.ByIfcEntity.ByAltPredefinedType =\r\n               GetCachedValue(processInstance, cacheToUse, instanceEntity, objectType);\r\n            applicablePsets.ByIfcEntityType.ByAltPredefinedType =\r\n               GetCachedValue(processType, cacheToUse, typeEntity, objectType);\r\n         }\r\n\r\n         return applicablePsets;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the list of common property sets appropriate to this handle.\r\n      /// </summary>\r\n      /// <param name=\"prodHnd\">The handle.</param>\r\n      /// <param name=\"psetsToCreate\">The list of all property sets.</param>\r\n      /// <param name=\"cacheToUse\">The cache for property sets.</param>\r\n      /// <returns>The list of property sets for this handle.</returns>\r\n      public static IList<T> GetCurrPSetsToCreateGeneric<T>(IFCAnyHandle prodHnd,\r\n         IList<IList<T>> psetsToCreate, IList<int> instanceAndTypePsetIndices,\r\n         IDictionary<ExporterCacheManager.PropertySetKey,\r\n         IList<T>> cacheToUse, PSetsToProcess psetsToProcess) where T : Description\r\n      {\r\n         IFCExportInfoPair exportInfo = GetExportInfoForProperties(prodHnd);\r\n\r\n         bool processInstance = psetsToProcess != PSetsToProcess.Type;\r\n         bool processType = psetsToProcess != PSetsToProcess.Instance;\r\n\r\n         if (!processInstance && !processType)\r\n            return new List<T>();\r\n\r\n         string objectType = IFCAnyHandleUtil.GetStringAttribute(prodHnd, \"ObjectType\");\r\n\r\n         // Find existing Psets list for the given type in the cache\r\n         var cachedPsets = GetCachedPropertySetsGeneric(exportInfo, objectType, cacheToUse,\r\n            psetsToProcess);\r\n\r\n         //Set bool variables to true below to search for property sets If they were not found in cache \r\n         ApplicablePsets<T> currPsets = new ApplicablePsets<T>();\r\n         currPsets.Initialize(processInstance, processType, cachedPsets);\r\n\r\n         if (currPsets.NeedSearch())\r\n         {\r\n            int numPsetsToCreate = psetsToCreate.Count;\r\n            for (int ii = 0; ii < numPsetsToCreate; ii++)\r\n            {\r\n               IList<T> currStandard = psetsToCreate[ii];\r\n               bool isInstanceAndTypePset = instanceAndTypePsetIndices?.Contains(ii) ?? false;\r\n               var applicablePsets = GetApplicablePropertySets(exportInfo, objectType,\r\n                  currStandard, isInstanceAndTypePset, psetsToProcess);\r\n\r\n               currPsets.UnionWith(applicablePsets);\r\n            }\r\n\r\n            bool unknownType = exportInfo.ExportType == IFCEntityType.UnKnown;\r\n\r\n            IFCEntityType typeEntity =\r\n               (processType && unknownType) ? exportInfo.ExportInstance : exportInfo.ExportType;\r\n\r\n            currPsets.PopulateCache(exportInfo.ExportInstance, typeEntity, exportInfo.PredefinedType,\r\n               objectType, cacheToUse);\r\n         }\r\n\r\n         currPsets.PopulateFromCache(cachedPsets);\r\n\r\n         return currPsets.AsList();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get applicable PropertySets for an entity type with optional condition for \r\n      /// PredefinedType.\r\n      ///    The logic needs some explanation here. The quality of IFC documentation is rather poor\r\n      ///    especially the earlier version (i.e. IFC2x2, IFC2x3).\r\n      ///    The use of ObjectType in the PSD is unclear sometime it is a duplicate of applicable \r\n      ///    classes, sometimes it is showing PredefinedType (in IFC2x2), sometimes purely useless\r\n      ///    information. Due to that, we will also check ObjectType for applicable entity if not\r\n      ///    present, and also check for PredefinedType if not present.\r\n      /// </summary>\r\n      /// <param name=\"exportInfo\">The export info pair.</param>\r\n      /// <param name=\"psetList\">The pset list to iterate.</param>\r\n      /// <returns>Filtered results of the applicable Psets. Output psets are grouped by type they\r\n      /// relate to.</returns>\r\n      static ApplicablePsets<T> GetApplicablePropertySets<T>(IFCExportInfoPair exportInfo,\r\n         string objectType, IEnumerable<T> psetList, bool isInstanceAndTypePSet,\r\n         PSetsToProcess psetsToProcess)\r\n         where T : Description\r\n      {\r\n         bool processInstance = psetsToProcess != PSetsToProcess.Type;\r\n         bool processType = psetsToProcess != PSetsToProcess.Instance;\r\n\r\n         ApplicablePsets<T> applicablePsets = new ApplicablePsets<T>();\r\n         if (!processInstance && !processType)\r\n            return applicablePsets;\r\n\r\n         applicablePsets.Initialize(processInstance, processType, null);\r\n\r\n         bool unknownType = exportInfo.ExportType == IFCEntityType.UnKnown;\r\n\r\n         IFCEntityType instanceEntity = exportInfo.ExportInstance;\r\n         IFCEntityType typeEntity =\r\n            (processType && unknownType) ? exportInfo.ExportInstance : exportInfo.ExportType;\r\n\r\n         foreach (T currDesc in psetList)\r\n         {\r\n            bool addToInstance = false;\r\n            bool addToType = false;\r\n\r\n            if (processInstance || (processType && isInstanceAndTypePSet))\r\n            {\r\n               if (currDesc.IsAppropriateEntityAndObjectType(instanceEntity, objectType))\r\n               {\r\n                  addToInstance = true;\r\n                  addToType = isInstanceAndTypePSet;\r\n               }\r\n            }\r\n\r\n            // ObjectType if the Applicable type is missing\r\n            if (processType || (processInstance && isInstanceAndTypePSet))\r\n            {\r\n               if (currDesc.IsAppropriateEntityAndObjectType(typeEntity, objectType))\r\n               {\r\n                  addToInstance = isInstanceAndTypePSet;\r\n                  addToType = true;\r\n               }\r\n            }\r\n\r\n            if (addToInstance || addToType)\r\n            {\r\n               applicablePsets.AddItem(addToInstance, addToType,\r\n                  exportInfo, objectType, currDesc);\r\n            }\r\n         }\r\n         return applicablePsets;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports Pset_Draughting for IFC 2x2 standard.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"element \">The element whose properties are exported.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper object.</param>\r\n      private static void ExportPsetDraughtingFor2x2(ExporterIFC exporterIFC, Element element, ProductWrapper productWrapper)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction transaction = new IFCTransaction(file))\r\n         {\r\n            IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n            string catName = CategoryUtil.GetCategoryName(element);\r\n            Color color = CategoryUtil.GetElementColor(element);\r\n            HashSet<IFCAnyHandle> nameAndColorProps = new HashSet<IFCAnyHandle>()\r\n            {\r\n               PropertyUtil.CreateLabelPropertyFromCache(file, null, new PropertyDescription(\"Layername\", null),\r\n                  catName, PropertyValueType.SingleValue, true, null)\r\n            };\r\n\r\n            //color\r\n            {\r\n               HashSet<IFCAnyHandle> colorProps = new HashSet<IFCAnyHandle>()\r\n               {\r\n                  PropertyUtil.CreateIntegerPropertyFromCache(file, new PropertyDescription(\"Red\"), color.Red, PropertyValueType.SingleValue),\r\n                  PropertyUtil.CreateIntegerPropertyFromCache(file, new PropertyDescription(\"Green\"), color.Green, PropertyValueType.SingleValue),\r\n                  PropertyUtil.CreateIntegerPropertyFromCache(file, new PropertyDescription(\"Blue\"), color.Blue, PropertyValueType.SingleValue)\r\n               };\r\n               string propertyName = \"Color\";\r\n               PropertyDescription propertyDescription = new PropertyDescription(propertyName);\r\n               nameAndColorProps.Add(IFCInstanceExporter.CreateComplexProperty(file, propertyDescription, propertyName, colorProps));\r\n            }\r\n\r\n            HashSet<IFCAnyHandle> relatedObjects = new HashSet<IFCAnyHandle>(productWrapper.GetAllObjects());\r\n            if (!ExporterCacheManager.CreatedSpecialPropertySets.TryAppend(element.Id, relatedObjects))\r\n            {\r\n               string name = \"Pset_Draughting\";   // IFC 2x2 standard\r\n               string psetGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(element, name));\r\n               IFCAnyHandle propertySetDraughting = IFCInstanceExporter.CreatePropertySet(file, psetGuid, ownerHistory, name, null, nameAndColorProps);\r\n               HashSet<IFCAnyHandle> propertySets = new HashSet<IFCAnyHandle>() { propertySetDraughting };\r\n               ExporterCacheManager.CreatedSpecialPropertySets.Add(element.Id, propertySets, relatedObjects);\r\n            }\r\n\r\n            transaction.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports the element properties.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"element\">The element whose properties are exported.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper object.</param>\r\n      private static void ExportElementProperties(ExporterIFC exporterIFC, Element element, ProductWrapper productWrapper)\r\n      {\r\n         if (productWrapper.IsEmpty())\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction transaction = new IFCTransaction(file))\r\n         {\r\n            Document doc = element.Document;\r\n\r\n            ElementType elemType = doc.GetElement(element.GetTypeId()) as ElementType;\r\n\r\n            IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n            ICollection<IFCAnyHandle> productSet = productWrapper.GetAllObjects();\r\n            \r\n            // In some cases, like multi-story stairs and ramps, we may have the same Pset used for multiple levels.\r\n            // If ifcParams is null, re-use the property set.\r\n            IDictionary<Tuple<Element, Element, string>, IFCAnyHandle> createdPropertySets =\r\n                new Dictionary<Tuple<Element, Element, string>, IFCAnyHandle>();\r\n            IDictionary<IFCAnyHandle, HashSet<IFCAnyHandle>> relDefinesByPropertiesMap =\r\n                new Dictionary<IFCAnyHandle, HashSet<IFCAnyHandle>>();\r\n\r\n            foreach (IFCAnyHandle prodHnd in productSet)\r\n            {\r\n               // Need to check whether the handle is valid. In some cases object that has parts may not be complete and may have orphaned handles that are not valid\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(prodHnd))\r\n                  continue;\r\n\r\n               IList<PropertySetDescription> currPsetsToCreate =\r\n                  GetCurrPSetsToCreate(prodHnd, PSetsToProcess.Instance);\r\n               if (currPsetsToCreate.Count == 0)\r\n                  continue;\r\n\r\n               ElementId overrideElementId = ExporterCacheManager.HandleToElementCache.Find(prodHnd);\r\n               Element elementToUse = (overrideElementId == ElementId.InvalidElementId) ? element : doc.GetElement(overrideElementId);\r\n               Element elemOfProd = doc.GetElement(ExporterCacheManager.HandleToElementCache.Find(prodHnd));\r\n               if (elemOfProd != null)\r\n                  elementToUse = elemOfProd;\r\n               ElementType elemTypeToUse = (overrideElementId == ElementId.InvalidElementId) ? elemType : doc.GetElement(elementToUse.GetTypeId()) as ElementType;\r\n               if (elemTypeToUse == null)\r\n                  elemTypeToUse = elemType;\r\n\r\n               IFCExportBodyParams ifcParams = productWrapper.FindExtrusionCreationParameters(prodHnd);\r\n\r\n               bool exportingHostModel = ExportingHostModel();\r\n               foreach (PropertySetDescription currDesc in currPsetsToCreate)\r\n               {\r\n                  if (exportingHostModel && currDesc.ViewScheduleId != ElementId.InvalidElementId &&\r\n                     (!ExporterCacheManager.ViewScheduleElementCache[currDesc.ViewScheduleId].Contains(elementToUse.Id)))\r\n                     continue;\r\n\r\n                  Tuple<Element, Element, string> propertySetKey = new Tuple<Element, Element, string>(elementToUse, elemTypeToUse, currDesc.Name);\r\n                  IFCAnyHandle propertySet = null;\r\n                  if ((ifcParams != null) || (!createdPropertySets.TryGetValue(propertySetKey, out propertySet)))\r\n                  {\r\n                     ElementOrConnector elementOrConnector = new ElementOrConnector(elementToUse);\r\n                     ISet<IFCAnyHandle> props = currDesc.ProcessEntries(file, exporterIFC, ifcParams, elementOrConnector, elemTypeToUse, prodHnd);\r\n                     if (props.Count > 0)\r\n                     {\r\n                        string paramSetName = currDesc.Name;\r\n                        string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n                           GUIDUtil.CreateGUIDString(IFCEntityType.IfcPropertySet, paramSetName, prodHnd));\r\n\r\n                        propertySet = IFCInstanceExporter.CreatePropertySet(file, guid, ownerHistory, paramSetName, currDesc.DescriptionOfSet, props);\r\n                        if (ifcParams == null)\r\n                           createdPropertySets[propertySetKey] = propertySet;\r\n                     }\r\n                  }\r\n\r\n                  if (propertySet != null)\r\n                  {\r\n                     IFCAnyHandle prodHndToUse = prodHnd;\r\n                     DescriptionCalculator ifcRDC = currDesc.DescriptionCalculator;\r\n                     if (ifcRDC != null)\r\n                     {\r\n                        IFCAnyHandle overrideHnd = ifcRDC.RedirectDescription(elementToUse);\r\n                        if (!IFCAnyHandleUtil.IsNullOrHasNoValue(overrideHnd))\r\n                           prodHndToUse = overrideHnd;\r\n                     }\r\n\r\n                     HashSet<IFCAnyHandle> relatedObjects = null;\r\n                     if (!relDefinesByPropertiesMap.TryGetValue(propertySet, out relatedObjects))\r\n                     {\r\n                        relatedObjects = new HashSet<IFCAnyHandle>();\r\n                        relDefinesByPropertiesMap[propertySet] = relatedObjects;\r\n                     }\r\n                     relatedObjects.Add(prodHndToUse);\r\n                  }\r\n               }\r\n            }\r\n\r\n            foreach (KeyValuePair<IFCAnyHandle, HashSet<IFCAnyHandle>> relDefinesByProperties in relDefinesByPropertiesMap)\r\n            {\r\n               CreateRelDefinesByProperties(file, ownerHistory, null, null, relDefinesByProperties.Value, relDefinesByProperties.Key);\r\n            }\r\n\r\n            transaction.Commit();\r\n         }\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2)\r\n            ExportPsetDraughtingFor2x2(exporterIFC, element, productWrapper);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports the IFC element quantities.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"element \">The element whose quantities are exported.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper object.</param>\r\n      private static void ExportElementQuantities(ExporterIFC exporterIFC, Element element, ProductWrapper productWrapper)\r\n      {\r\n         if (productWrapper.IsEmpty())\r\n            return;\r\n\r\n         IList<IList<QuantityDescription>> quantitiesToCreate = ExporterCacheManager.ParameterCache.Quantities;\r\n         if (quantitiesToCreate.Count == 0)\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction transaction = new IFCTransaction(file))\r\n         {\r\n            Document doc = element.Document;\r\n\r\n            ElementType elemType = doc.GetElement(element.GetTypeId()) as ElementType;\r\n\r\n            IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n\r\n            ICollection<IFCAnyHandle> productSet = productWrapper.GetAllObjects();\r\n\r\n            foreach (IList<QuantityDescription> currStandard in quantitiesToCreate)\r\n            {\r\n               foreach (QuantityDescription currDesc in currStandard)\r\n               {\r\n                  foreach (IFCAnyHandle prodHnd in productSet)\r\n                  {\r\n                     // For an aggregate, the member product must be processed with its element and type\r\n                     ElementId overrideElementId = ExporterCacheManager.HandleToElementCache.Find(prodHnd);\r\n                     Element elementToUse = (overrideElementId == ElementId.InvalidElementId) ? element : doc.GetElement(overrideElementId);\r\n                     ElementType elemTypeToUse = (overrideElementId == ElementId.InvalidElementId) ? elemType : doc.GetElement(elementToUse.GetTypeId()) as ElementType;\r\n                     if (elemTypeToUse == null)\r\n                        elemTypeToUse = elemType;\r\n\r\n                     if (currDesc.IsAppropriateType(prodHnd) && !ExporterCacheManager.QtoSetCreated.Contains((prodHnd, currDesc.Name)))\r\n                     {\r\n                        HashSet<string> uniqueQuantityNames = new HashSet<string>();\r\n                        HashSet<IFCAnyHandle> quantities = new HashSet<IFCAnyHandle>();\r\n\r\n                        HashSet<IFCAnyHandle> addQuantity;\r\n                        if (ExporterCacheManager.ComplexPropertyCache.TryGetValue(prodHnd, out addQuantity))\r\n                        {\r\n                           foreach (IFCAnyHandle addQty in addQuantity)\r\n                           {\r\n                              quantities.Add(addQty);\r\n                              string addQtyName = IFCAnyHandleUtil.GetStringAttribute(addQty, \"Name\");\r\n                              uniqueQuantityNames.Add(addQtyName);\r\n                           }\r\n                        }\r\n\r\n                        if (ExporterCacheManager.BaseQuantitiesCache.TryGetValue(prodHnd, out addQuantity))\r\n                        {\r\n                           foreach (IFCAnyHandle addQty in addQuantity)\r\n                           {\r\n                              quantities.Add(addQty);\r\n                              string addQtyName = IFCAnyHandleUtil.GetStringAttribute(addQty, \"Name\");\r\n                              uniqueQuantityNames.Add(addQtyName);\r\n                           }\r\n                        }\r\n\r\n                        IFCExportBodyParams ifcParams = productWrapper.FindExtrusionCreationParameters(prodHnd);\r\n\r\n                        HashSet<IFCAnyHandle> qtyFromInit = currDesc.ProcessEntries(file, exporterIFC, ifcParams, elementToUse, elemTypeToUse);\r\n                        foreach (IFCAnyHandle qty in qtyFromInit)\r\n                        {\r\n                           if (IFCAnyHandleUtil.IsNullOrHasNoValue(qty) || IFCAnyHandleUtil.IsNullOrHasNoValue(qty))\r\n                              continue;\r\n\r\n                           string qtyName = IFCAnyHandleUtil.GetStringAttribute(qty, \"Name\");\r\n                           // Check for duplicate name. Do not write a quantity that is already defined\r\n                           if (!uniqueQuantityNames.Contains(qtyName))\r\n                           {\r\n                              quantities.Add(qty);\r\n                              uniqueQuantityNames.Add(qtyName);\r\n                           }\r\n                        }\r\n\r\n                        if (quantities.Count > 0)\r\n                        {\r\n                           string paramSetName = currDesc.Name;\r\n                           string methodName = currDesc.MethodOfMeasurement;\r\n                           string description = currDesc.DescriptionOfSet;\r\n\r\n\r\n                           // Skip if the elementHandle has the associated QuantitySet has been created before\r\n                           if (!ExporterCacheManager.QtoSetCreated.Contains((prodHnd, paramSetName)))\r\n                           {\r\n                              string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n                                 GUIDUtil.CreateGUIDString(IFCEntityType.IfcElementQuantity,\r\n                                 \"QuantitySet: \" + paramSetName, prodHnd));\r\n                              IFCAnyHandle quantity = IFCInstanceExporter.CreateElementQuantity(file,\r\n                                 prodHnd, guid, ownerHistory, paramSetName, description,\r\n                                 methodName, quantities);\r\n                              IFCAnyHandle prodHndToUse = prodHnd;\r\n                              DescriptionCalculator ifcRDC = currDesc.DescriptionCalculator;\r\n                              if (ifcRDC != null)\r\n                              {\r\n                                 IFCAnyHandle overrideHnd = ifcRDC.RedirectDescription(element);\r\n                                 if (!IFCAnyHandleUtil.IsNullOrHasNoValue(overrideHnd))\r\n                                    prodHndToUse = overrideHnd;\r\n                              }\r\n                              HashSet<IFCAnyHandle> relatedObjects = new HashSet<IFCAnyHandle>();\r\n                              relatedObjects.Add(prodHndToUse);\r\n                              CreateRelDefinesByProperties(file, ownerHistory, null, null, relatedObjects, quantity);\r\n                           }\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n            transaction.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>Exports the element classification(s)./// </summary>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"element\">The element whose classifications are exported.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper object.</param>\r\n      private static void ExportElementUniformatClassifications(ExporterIFC exporterIFC,\r\n         Element element, ProductWrapper productWrapper)\r\n      {\r\n         if (productWrapper.IsEmpty() || ExporterCacheManager.ClassificationCache.UniformatOverridden)\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction transaction = new IFCTransaction(file))\r\n         {\r\n            ICollection<IFCAnyHandle> productSet = productWrapper.GetAllObjects();\r\n            ClassificationUtil.CreateUniformatClassification(file, element, productSet.ToList(), IFCEntityType.IfcElement);\r\n            transaction.Commit();\r\n         }\r\n      }\r\n\r\n      private static void ExportElementClassifications(ExporterIFC exporterIFC, Element element, ProductWrapper productWrapper)\r\n      {\r\n         if (productWrapper.IsEmpty())\r\n            return;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         using (IFCTransaction transaction = new IFCTransaction(file))\r\n         {\r\n            ICollection<IFCAnyHandle> productSet = productWrapper.GetAllObjects();\r\n            foreach (IFCAnyHandle prodHnd in productSet)\r\n            {\r\n               if (productSet.Count > 1 && prodHnd == productSet.First() && IFCAnyHandleUtil.IsTypeOf(prodHnd, IFCEntityType.IfcElementAssembly))\r\n                  continue;   //Classification for the ELementAssembly should have been created before when processing ElementAssembly\r\n\r\n               ElementId elementId = ExporterCacheManager.HandleToElementCache.Find(prodHnd);\r\n               Element elementToUse = (elementId == ElementId.InvalidElementId) ? element : element?.Document?.GetElement(elementId);\r\n               if (elementToUse == null)\r\n                  continue;\r\n               \r\n               // No need to check the subtype since Classification can be assigned to IfcRoot\r\n               ClassificationUtil.CreateClassification(exporterIFC, file, elementToUse, prodHnd);\r\n            }\r\n            transaction.Commit();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Export IFC common property set, Quantity (if set) and Classification (or Uniformat for COBIE) information for an element.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporterIFC class.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"productWrapper\">The ProductWrapper class that contains the associated IFC handles.</param>\r\n      public static void ExportRelatedProperties(ExporterIFC exporterIFC, Element element, ProductWrapper productWrapper)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportGeometryOnly)\r\n            return;\r\n\r\n         ExportElementProperties(exporterIFC, element, productWrapper);\r\n         if (ExporterCacheManager.ExportIFCBaseQuantities() && !(ExporterCacheManager.ExportOptionsCache.ExportAsCOBIE))\r\n            ExportElementQuantities(exporterIFC, element, productWrapper);\r\n         ExportElementClassifications(exporterIFC, element, productWrapper);                     // Exporting ClassificationCode from IFC parameter \r\n         ExportElementUniformatClassifications(exporterIFC, element, productWrapper);            // Default classification, if filled out.\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks an enumTypeValue to determine if it is defined or not.\r\n      /// </summary>\r\n      /// <param name=\"enumTypeValue\">The enum type value to check.</param>\r\n      /// <returns>True if the enumTypeValue is null, empty, or set to \"NOTDEFINED\".</returns>\r\n      public static bool IsNotDefined(string enumTypeValue)\r\n      {\r\n         return (string.IsNullOrWhiteSpace(enumTypeValue) || (string.Compare(enumTypeValue, \"NOTDEFINED\", true) == 0));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the string value from IFC_EXPORT_PREDEFINEDTYPE* built-in parameters.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"elementType\">The optional element type.</param>\r\n      /// <returns>The string value of IFC_EXPORT_PREDEFINEDTYPE if assigned, or \r\n      /// IFC_EXPORT_PREDEFINEDTYPE_TYPE if not.</returns>\r\n      public static string GetExportTypeFromTypeParameter(Element element, Element elementType)\r\n      {\r\n         BuiltInParameter paramId = (element is ElementType) ? BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE_TYPE :\r\n            BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE;\r\n         Parameter exportElementParameter = element.get_Parameter(paramId);\r\n         string pdefFromParam = exportElementParameter?.AsString();\r\n         if (string.IsNullOrEmpty(pdefFromParam) && (paramId == BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE))\r\n         {\r\n            if (elementType == null)\r\n               elementType = element.Document.GetElement(element.GetTypeId());\r\n            exportElementParameter = elementType?.get_Parameter(BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE_TYPE);\r\n            pdefFromParam = exportElementParameter?.AsString();\r\n         }\r\n\r\n         return pdefFromParam;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the export entity and predefined type information as reported by the\r\n      /// IFC_EXPORT_ELEMENT*_AS parameter.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"restrictedGroup\">The subset of IFC entities allowed.</param>\r\n      /// <returns>The IFC entity/predefined type pair.</returns>\r\n      public static IFCExportInfoPair GetIFCExportElementParameterInfo(Element element,\r\n         IFCEntityType restrictedGroup)\r\n      {\r\n         if (element == null)\r\n            return IFCExportInfoPair.UnKnown;\r\n\r\n         BuiltInParameter paramId = (element is ElementType) ? BuiltInParameter.IFC_EXPORT_ELEMENT_TYPE_AS :\r\n            BuiltInParameter.IFC_EXPORT_ELEMENT_AS;\r\n         Parameter exportElementParameter = element.get_Parameter(paramId);\r\n         string symbolClassName = exportElementParameter?.AsString();\r\n         if (string.IsNullOrEmpty(symbolClassName) && (paramId == BuiltInParameter.IFC_EXPORT_ELEMENT_AS))\r\n         {\r\n            Element elementType = element.Document.GetElement(element.GetTypeId());\r\n            exportElementParameter = elementType?.get_Parameter(BuiltInParameter.IFC_EXPORT_ELEMENT_TYPE_AS);\r\n            symbolClassName = exportElementParameter?.AsString();\r\n         }\r\n\r\n         IFCExportInfoPair exportType = IFCExportInfoPair.UnKnown;\r\n\r\n         string predefType = null;\r\n         if (!string.IsNullOrEmpty(symbolClassName))\r\n         {\r\n            ExportEntityAndPredefinedType(symbolClassName, out symbolClassName, out predefType);\r\n\r\n            // Ignore the value if we can't process it.\r\n            IFCExportInfoPair overrideExportType = ElementFilteringUtil.GetExportTypeFromClassName(symbolClassName);\r\n            if (!overrideExportType.IsUnKnown &&\r\n               IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, overrideExportType.ExportInstance, restrictedGroup))\r\n            {\r\n               exportType = overrideExportType;\r\n            }\r\n         }\r\n\r\n         if (!string.IsNullOrEmpty(predefType))\r\n         {\r\n            exportType.PredefinedType = predefType;\r\n         }\r\n\r\n         return exportType;\r\n      }\r\n\r\n      private static IFCExportInfoPair GetExportTypeForFurniture(Element element)\r\n      {\r\n         if (element.GroupId == null || element.GroupId == ElementId.InvalidElementId)\r\n            return IFCExportInfoPair.UnKnown;\r\n\r\n         IFCExportInfoPair groupType;\r\n         if (ExporterCacheManager.GroupCache.TryGetValue(element.GroupId, out GroupInfo groupInfo) && groupInfo.GroupType.ExportInstance != IFCEntityType.UnKnown)\r\n         {\r\n            groupType = groupInfo.GroupType;\r\n         }\r\n         else\r\n         {\r\n            Element groupElement = element.Document.GetElement(element.GroupId);\r\n            IFCExportInfoPair exportGroupAs = GetObjectExportType(groupElement, out _);\r\n            ExporterCacheManager.GroupCache.RegisterOrUpdateGroupType(element.GroupId, exportGroupAs);\r\n            groupType = exportGroupAs;\r\n         }\r\n\r\n         if (groupType.ExportInstance == IFCEntityType.IfcFurniture)\r\n         {\r\n            return new IFCExportInfoPair(IFCEntityType.IfcSystemFurnitureElement, \"NOTDEFINED\");\r\n         }\r\n\r\n         return IFCExportInfoPair.UnKnown;\r\n      }\r\n\r\n      private static IFCExportInfoPair GetExportTypeForCurtainSystem(Element element, string predefinedType)\r\n      {\r\n         if (CurtainSystemExporter.IsCurtainSystem(element) || CurtainSystemExporter.IsLegacyCurtainElement(element))\r\n         {\r\n            if (element is RoofBase)\r\n            {\r\n               return new IFCExportInfoPair(IFCEntityType.IfcRoof, predefinedType);\r\n            }\r\n            else\r\n            {\r\n               return new IFCExportInfoPair(IFCEntityType.IfcCurtainWall, predefinedType);\r\n            }\r\n         }\r\n\r\n         return IFCExportInfoPair.UnKnown;\r\n      }\r\n\r\n      private static IFCExportInfoPair OverrideExportTypeForStructuralFamilies(Element element,\r\n         IFCExportInfoPair originalExportInfoPair)\r\n      {\r\n         if ((!originalExportInfoPair.IsUnKnown) &&\r\n            (originalExportInfoPair.ExportInstance != IFCEntityType.IfcBuildingElementProxy) &&\r\n            (originalExportInfoPair.ExportType != IFCEntityType.IfcBuildingElementProxyType))\r\n            return originalExportInfoPair;\r\n\r\n         FamilyInstance familyInstance = element as FamilyInstance;\r\n         if (familyInstance == null)\r\n            return originalExportInfoPair;\r\n\r\n         string enumTypeValue = originalExportInfoPair.PredefinedType;\r\n\r\n         switch (familyInstance.StructuralType)\r\n         {\r\n            case Autodesk.Revit.DB.Structure.StructuralType.Beam:\r\n               if (string.IsNullOrEmpty(enumTypeValue))\r\n                  enumTypeValue = \"BEAM\";\r\n               return new IFCExportInfoPair(IFCEntityType.IfcBeam, enumTypeValue);\r\n            case Autodesk.Revit.DB.Structure.StructuralType.Brace:\r\n               if (string.IsNullOrEmpty(enumTypeValue))\r\n                  enumTypeValue = \"BRACE\";\r\n               return new IFCExportInfoPair(IFCEntityType.IfcMember, enumTypeValue);\r\n            case Autodesk.Revit.DB.Structure.StructuralType.Footing:\r\n               return new IFCExportInfoPair(IFCEntityType.IfcFooting, enumTypeValue);\r\n            case Autodesk.Revit.DB.Structure.StructuralType.Column:\r\n               if (string.IsNullOrEmpty(enumTypeValue))\r\n                  enumTypeValue = \"COLUMN\";\r\n               return new IFCExportInfoPair(IFCEntityType.IfcColumn, enumTypeValue);\r\n         }\r\n\r\n         return originalExportInfoPair;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Override the IFC entity type for fabrication straights and fittings.\r\n      /// </summary>\r\n      /// <param name=\"element\"></param>\r\n      /// <param name=\"originalExportInfoPair\"></param>\r\n      /// <returns>The new IFCExportInfoPair if successfully updated, or the original value.</returns>\r\n      private static IFCExportInfoPair OverrideExportTypeForFabricationParts(Element element, IFCExportInfoPair originalExportInfoPair)\r\n      {\r\n         if ((!originalExportInfoPair.IsUnKnown) &&\r\n            (originalExportInfoPair.ExportInstance != IFCEntityType.IfcBuildingElementProxy) &&\r\n            (originalExportInfoPair.ExportType != IFCEntityType.IfcBuildingElementProxyType))\r\n            return originalExportInfoPair;\r\n\r\n         FabricationPart fabPart = element as FabricationPart;\r\n         if (fabPart == null)\r\n            return originalExportInfoPair;\r\n\r\n         string enumTypeValue = originalExportInfoPair.PredefinedType;\r\n         ElementId fabCategory = CategoryUtil.GetSafeCategoryId(fabPart);\r\n         if (fabPart.IsAStraight())\r\n         {\r\n            if (fabCategory == new ElementId(BuiltInCategory.OST_FabricationDuctwork))\r\n               return new IFCExportInfoPair(IFCEntityType.IfcDuctSegment, enumTypeValue);\r\n            else if (fabCategory == new ElementId(BuiltInCategory.OST_FabricationPipework))\r\n               return new IFCExportInfoPair(IFCEntityType.IfcPipeSegment, enumTypeValue);\r\n         }\r\n         else\r\n         {\r\n            // For now, we treat all non-straight fabrication parts as fittings.\r\n            if (fabCategory == new ElementId(BuiltInCategory.OST_FabricationDuctwork))\r\n               return new IFCExportInfoPair(IFCEntityType.IfcDuctFitting, enumTypeValue);\r\n            else if (fabCategory == new ElementId(BuiltInCategory.OST_FabricationPipework))\r\n               return new IFCExportInfoPair(IFCEntityType.IfcPipeFitting, enumTypeValue);\r\n         }\r\n         return originalExportInfoPair;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets export type for an element in pair information of the IfcEntity and its type.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"restrictedGroup\">The base class of the allowed entity instances.</param>\r\n      /// <param name=\"enumTypeValue\">The output string value represents the enum type.</param>\r\n      /// <returns>The IFCExportInfoPair.</returns>\r\n      /// <remarks>If restrictedGroup is null, GetExportType will return any legal IFC entity.\r\n      /// However, most uses of this function should have some restriction.</remarks>\r\n      private static IFCExportInfoPair GetExportTypeImpl(Element element,\r\n         IFCEntityType restrictedGroup, out string enumTypeValue)\r\n      {\r\n         enumTypeValue = null;\r\n\r\n         // Overall outline of this function.  We do the checks in order so that if an earlier\r\n         // check finds an acceptable value, we won't do the later ones.\r\n         // 1. Check specifically to see if the user has marked the category as \"Not exported\"\r\n         // in the IFC Export Options table.  If so, this overrides all other settings.\r\n         // 2. For the special case of an element in a group, check if it in an IfcFurniture group.\r\n         // 3. Check the parameters IFC_EXPORT_ELEMENT*_AS.\r\n         // 4. If Element is intended to be exported as a curtain systen, find the default export settings for that.\r\n         // 5. Look at class specified by the IFC Export Options table in step 1, if set.\r\n         // 6. Check at a pre-defined mapping from Revit category to IFC entity and pre-defined type.\r\n         // 7. Check whether the intended Entity type is inside the export exclusion set.\r\n         // 8. Check whether we override IfcBuildingElementProxy/Unknown values with structural known values.\r\n         // 9. Check whether we should override the IFC entity type based on fabrication part information.\r\n         // 10. Check to see if we should override the ValidatedPredefinedType from IFC_EXPORT_PREDEFINEDTYPE*.\r\n         // 11. Handle IfcSite (always set it to something else).\r\n\r\n         // Steps start below.\r\n\r\n         // 1. Check specifically to see if the user has marked the category as \"Not exported\"\r\n         // in the IFC Export Options table.  If so, this overrides all other settings.\r\n         // This will also return the ifcClassName, which will be checked later (if it isn't\r\n         // set to \"Not exported\".\r\n         // Note that this means that if the Walls category is not exported, but a wall is set to be\r\n         // exported as, e.g., an IfcCeilingType, it won't be exported.  We may want to reconsider this\r\n         // in the future based on customer feedback.\r\n         ElementId categoryId = ElementId.InvalidElementId;\r\n         string ifcClassName = null;\r\n         ExportIFCCategoryInfo info = GetCategoryInfoFromExportTable(element, out categoryId);\r\n         if (info != null && !info.IFCExportFlag)\r\n            return IFCExportInfoPair.UnKnown;\r\n         ifcClassName = info?.IFCEntityName;\r\n\r\n         // 2. If Element is contained within a Group that is exported as IfcFurniture, it should be \r\n         // exported as an IfcSystemFurnitureElement, regardless of other settings.\r\n         IFCExportInfoPair exportType = GetExportTypeForFurniture(element);\r\n\r\n         // 3. Check the parameters IFC_EXPORT_ELEMENT*_AS.\r\n         bool isExportTypeDefinedInParameters = false;\r\n         if (exportType.IsUnKnown)\r\n         {\r\n            exportType = GetIFCExportElementParameterInfo(element, restrictedGroup);\r\n            isExportTypeDefinedInParameters = !exportType.IsUnKnown;\r\n         }\r\n\r\n         // 4. If Element is intended to be exported as a curtain systen, find the default export\r\n         // settings for that.\r\n         if (!isExportTypeDefinedInParameters)\r\n         {\r\n            exportType = GetExportTypeForCurtainSystem(element, exportType.PredefinedType);\r\n         }\r\n         \r\n         // 5. Look at class specified by the IFC Export Options table in step 1.\r\n         if (exportType.IsUnKnown && !string.IsNullOrEmpty(ifcClassName))\r\n         {\r\n            if (string.IsNullOrEmpty(enumTypeValue))\r\n            {\r\n               enumTypeValue = info?.IFCPredefinedType ?? GetIFCTypeFromExportTable(element);\r\n            }\r\n            \r\n            // if using name, override category id if match is found.\r\n            if (!ifcClassName.Equals(\"Default\", StringComparison.OrdinalIgnoreCase))\r\n            {\r\n               exportType = ElementFilteringUtil.GetExportTypeFromClassName(ifcClassName);\r\n               exportType.PredefinedType = enumTypeValue;\r\n            }\r\n         }\r\n\r\n         // 6. Check at a pre-defined mapping from Revit category to IFC entity and pre-defined type.\r\n         if (exportType.IsUnKnown)\r\n         {\r\n            exportType = ElementFilteringUtil.GetExportTypeFromCategoryId(categoryId);\r\n            if (string.IsNullOrEmpty(enumTypeValue))\r\n               enumTypeValue = exportType.PredefinedType;\r\n         }\r\n\r\n         // 7. Check whether the intended Entity type is inside the export exclusion set.  If it is,\r\n         // we are done - we won't export it.\r\n         if (ExporterCacheManager.ExportOptionsCache.IsElementInExcludeList(exportType.ExportInstance))\r\n            return IFCExportInfoPair.UnKnown;\r\n\r\n         // 8. Check whether we override IfcBuildingElementProxy/Unknown values with \r\n         // structural known values.\r\n         if (!isExportTypeDefinedInParameters)\r\n            exportType = OverrideExportTypeForStructuralFamilies(element, exportType);\r\n\r\n         // 9. Check whether we should override IFC entity type based on fabrication part information.\r\n         if (!isExportTypeDefinedInParameters)\r\n         {\r\n            exportType = OverrideExportTypeForFabricationParts(element, exportType);\r\n         }\r\n\r\n         // 10. Check to see if we should override the ValidatedPredefinedType from\r\n         // IFC_EXPORT_PREDEFINEDTYPE*.\r\n         string pdefFromParam = GetExportTypeFromTypeParameter(element, null);\r\n         if (!string.IsNullOrEmpty(pdefFromParam))\r\n            enumTypeValue = pdefFromParam;\r\n\r\n         if (!string.IsNullOrEmpty(enumTypeValue))\r\n            exportType.PredefinedType = enumTypeValue;\r\n\r\n         // Set the out parameter here.\r\n         enumTypeValue = exportType.PredefinedType;\r\n\r\n         if (string.IsNullOrEmpty(enumTypeValue))\r\n            enumTypeValue = \"NOTDEFINED\";\r\n\r\n         // 11. Handle sites if needed.\r\n         if ((exportType.ExportInstance == IFCEntityType.IfcSite) && ExporterCacheManager.SiteExportInfo.IsSiteExported())\r\n         {\r\n            exportType = OverrideExportTypeForSites(element, exportType);\r\n         }\r\n\r\n         return exportType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets export type for an element in pair information of the IfcEntity and its type.\r\n      /// Restricted to sub-types of IfcProduct.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"enumTypeValue\">The output string value represents the enum type.</param>\r\n      /// <returns>The IFCExportInfoPair.</returns>\r\n      public static IFCExportInfoPair GetProductExportType(Element element, out string enumTypeValue, \r\n         ExportTypeOverrideHelper helper = null)\r\n      {\r\n         return GetExportType(element, IFCEntityType.IfcProduct, out enumTypeValue, helper);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets export type for an element in pair information of the IfcEntity and its type.\r\n      /// Restricted to sub-types of IfcObject.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"enumTypeValue\">The output string value represents the enum type.</param>\r\n      /// <returns>The IFCExportInfoPair.</returns>\r\n      public static IFCExportInfoPair GetObjectExportType(Element element, out string enumTypeValue, \r\n         ExportTypeOverrideHelper helper = null)\r\n      {\r\n         return GetExportType(element, IFCEntityType.IfcObject, out enumTypeValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the export entity and predefined type information as reported by built-in parameters.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"restrictedGroup\">The base class of the allowed entity instances.</param>\r\n      /// <returns>The IFCExportInfoPair.</returns>\r\n      public static IFCExportInfoPair GetExportTypeFromParameters(Element element, IFCEntityType restrictedGroup)\r\n      {\r\n         IFCExportInfoPair exportType = GetIFCExportElementParameterInfo(element, restrictedGroup);\r\n\r\n         string pdefFromParam = GetExportTypeFromTypeParameter(element, null);\r\n         if (!string.IsNullOrEmpty(pdefFromParam))\r\n            exportType.PredefinedType = pdefFromParam;\r\n\r\n         return exportType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets export type for an element in pair information of the IfcEntity and its type.\r\n      /// If the element is already cached, this method will use that.  Otherwise, a new value will be cached.\r\n      /// </summary>\r\n      /// <param name=\"element\">Element being exported.</param>\r\n      /// <param name=\"restrictedGroup\">The base class of the allowed entity instances.</param>\r\n      /// <param name=\"enumTypeValue\">The output string value represents the enum Type.</param>\r\n      /// <param name=\"helper\">Helper that will allow caller to override the actual behavior in GetExportType().</param>\r\n      /// <returns>Export Type information for the Element.</returns>\r\n      private static IFCExportInfoPair GetExportType(Element element, \r\n         IFCEntityType restrictedGroup, out string enumTypeValue, ExportTypeOverrideHelper helper = null)\r\n      {\r\n         // If already in cache, either return that, or apply an OverriderHelper.\r\n         if ((ExporterCacheManager.ExportTypeInfoCache.TryGetValue(element.Id, out ExportTypeInfo exportInfo) && (exportInfo != null)))\r\n         {\r\n            // Four cases with helpers:\r\n            // 1. Previously no helper (cache has default), now there is a helper ==> Invalidate Cache, apply helper.\r\n            // 3. Previously no helper (cache has default), now there is no helper ==> Do not invalidate cache.\r\n            // 2. Previously helper (cache contains non-default), now there is no helper ==> Invalidate Cache, use default.\r\n            // 4. Previously helper (cache contains non-default), now there is a helper, and helpers are equal ==> Do not invalidate cache.\r\n            // 5. Previously helper (cache contains non-default), now there is a helper, and helpers are not equal ==> Invalidate cache, and apply helper.\r\n            // If the helpers are equivalent, then look in cache.  Otherwise, invalidate cache.\r\n            ExportTypeOverrideHelper previousHelper = exportInfo.Item3;\r\n            bool invalidateCache = false;\r\n            bool applyNewHelper = false;\r\n            if ((previousHelper == null) && (helper != null))\r\n            {\r\n               invalidateCache = true;\r\n               applyNewHelper = true;\r\n            }\r\n            else if (helper == null)\r\n            {\r\n               invalidateCache = true;\r\n               applyNewHelper = false;\r\n            }\r\n            else if (!helper.Equals(previousHelper))\r\n            {\r\n               invalidateCache = true;\r\n               applyNewHelper = true;\r\n            }\r\n\r\n            if (!invalidateCache)\r\n            {\r\n               enumTypeValue = exportInfo.Item2;\r\n               return exportInfo.Item1;\r\n            }\r\n\r\n            // If there is a helper, apply it here, to override the default behavior.\r\n            if (applyNewHelper)\r\n            {\r\n               ExportTypeInfo overridenExportInfo = helper.ApplyOverride(exportInfo);\r\n               if (overridenExportInfo != null)\r\n               {\r\n                  ExporterCacheManager.ExportTypeInfoCache[element.Id] = overridenExportInfo;\r\n                  enumTypeValue = overridenExportInfo.Item2;\r\n                  return overridenExportInfo.Item1;\r\n               }\r\n            }\r\n         }\r\n\r\n         IFCExportInfoPair exportInfoPair = GetExportTypeImpl(element, restrictedGroup, out enumTypeValue);\r\n\r\n         // And then cache.\r\n         if (element != null)\r\n         {\r\n            ExporterCacheManager.ExportTypeInfoCache[element.Id] = new ExportTypeInfo(exportInfoPair, enumTypeValue, helper);\r\n         }\r\n         return exportInfoPair;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the possible ExportType that the IfcProject can map to.\r\n      /// This does not allow for caching, nor does it allow for the returning of an enumeration string,\r\n      /// for later usage with Predefined Type.  As such, this should only be used when answering the\r\n      /// \"Can\" or \"Cannot\" question.\r\n      /// </summary>\r\n      /// <param name=\"element\">Element to get ExportType for.</param>\r\n      /// <returns></returns>\r\n      public static IFCExportInfoPair GetPotentialProductExportType(Element element)\r\n      {\r\n         return GetExportTypeImpl(element, IFCEntityType.IfcProduct, out _);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Override SpatialStructuralElements IFCExportInfoPair if needed.\r\n      /// Specifically if the export type would have been IfcSite and the Element's Built-in category is Site.\r\n      /// </summary>\r\n      /// <param name=\"element\">Element to inspect.</param>\r\n      /// <param name=\"originalExportType\">Export type that may need overriding.</param>\r\n      /// <returns>Either the input export type, or a new overriding export type.</returns>\r\n      private static IFCExportInfoPair OverrideExportTypeForSites(Element element, IFCExportInfoPair originalExportType)\r\n      {\r\n         if ((element == null) || (originalExportType == null))\r\n            return originalExportType;\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            return new IFCExportInfoPair(IFCEntityType.IfcBuildingElementProxy);\r\n         }\r\n\r\n         return new IFCExportInfoPair(IFCEntityType.IfcGeographicElement);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get export entity and predefinedType from symbolClassName. Generally it should come from\r\n      /// the built-in parameters (for symbolClassName)\r\n      /// </summary>\r\n      /// <param name=\"symbolClassName\">the IFC_EXPORT_ELEMENT_AS parameter value</param>\r\n      /// <param name=\"exportEntity\">output export entity string</param>\r\n      /// <param name=\"predefinedTypeStr\">output predefinedType string</param>\r\n      public static void ExportEntityAndPredefinedType(string symbolClassName, out string exportEntity, out string predefinedTypeStr)\r\n      {\r\n         exportEntity = symbolClassName;\r\n         predefinedTypeStr = string.Empty;\r\n\r\n         if (!string.IsNullOrEmpty(symbolClassName))\r\n         {\r\n            // We are expanding the format to also support: <IfcTypeEntity>.<predefinedType>.\r\n            // Therefore we need to parse here. This format will override value in IFCExportType\r\n            // if any.\r\n            string[] splitResult = symbolClassName.Split(new Char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);\r\n            if (splitResult.Length > 1)\r\n            {\r\n               // found <IfcTypeEntity>.<PredefinedType>\r\n               exportEntity = splitResult[0].Trim();\r\n               predefinedTypeStr = splitResult[1].Trim();\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create IFC Entity Type in a generic way from an Element\r\n      /// </summary>\r\n      /// <param name=\"element\">the Element</param>\r\n      /// <param name=\"exportType\">the export Type</param>\r\n      /// <param name=\"file\">the IFC File</param>\r\n      /// <returns>IFCAnyHandle if successful, null otherwise</returns>\r\n      public static IFCAnyHandle CreateGenericTypeFromElement(Element element,\r\n         IFCExportInfoPair exportType, IFCFile file, ProductWrapper productWrapper)\r\n      {\r\n         Document doc = element.Document;\r\n         ElementId typeElemId = element.GetTypeId();\r\n         ElementType elementType = doc.GetElement(typeElemId) as ElementType;\r\n\r\n         IFCAnyHandle entType = null;\r\n\r\n         if (elementType != null)\r\n         {\r\n            entType = ExporterCacheManager.ElementTypeToHandleCache.Find(elementType, exportType);\r\n            if (entType != null)\r\n               return entType;\r\n\r\n            string typeGuid = GUIDUtil.GenerateIFCGuidFrom(elementType, exportType);\r\n            entType = IFCInstanceExporter.CreateGenericIFCType(exportType, elementType, typeGuid, file, null, null);\r\n\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(entType))\r\n            {\r\n               productWrapper.RegisterHandleWithElementType(elementType, exportType, entType, null);\r\n            }\r\n         }\r\n         else\r\n         {\r\n            string typeGuid = GUIDUtil.CreateSubElementGUID(element, (int)IFCFamilyInstanceSubElements.InstanceAsType);\r\n            entType = IFCInstanceExporter.CreateGenericIFCType(exportType, element, typeGuid, file, null, null);\r\n         }\r\n         return entType;\r\n      }\r\n\r\n      /// Creates a list of IfcCartesianPoints corresponding to a list of UV points that represent a closed boundary loop.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFCFile.</param>\r\n      /// <param name=\"projVecData\">The list of UV points.</param>\r\n      /// <returns>The corresponding list of IfcCartesianPoints.</returns>\r\n      /// <remarks>We expect that the input UV list is composed of distinct points (i.e., the last point is not the first point, repeated.)\r\n      /// Our output requires that the first IfcCartesianPoint is the same as the last one, and does so by reusing the IfcCartesianPoint handle.</remarks>\r\n      private static IList<IFCAnyHandle> CreateCartesianPointList(IFCFile file, IList<UV> projVecData)\r\n      {\r\n         if (projVecData == null)\r\n            return null;\r\n\r\n         // Generate handles for the boundary loop.\r\n         IList<IFCAnyHandle> polyLinePts = new List<IFCAnyHandle>();\r\n         foreach (UV uv in projVecData)\r\n            polyLinePts.Add(CreateCartesianPoint(file, uv));\r\n\r\n         // We expect the input to consist of distinct points, i.e., that the first and last points in projVecData are not equal.\r\n         // Our output requires that the first and last points are equal, and as such we reuse the first handle for the last point,\r\n         // to reduce file size and ensure that the endpoints are identically in the same location by sharing the same IfcCartesianPoint reference.\r\n         polyLinePts.Add(polyLinePts[0]);\r\n\r\n         return polyLinePts;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Call the correct CreateRelDefinesByProperties depending on the schema to create one or more IFC entites.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatedObjects\">The related objects, required to be only 1 for IFC4.</param>\r\n      /// <param name=\"relatingPropertyDefinition\">The property definition to relate to the IFC object entity/entities.</param>\r\n      public static void CreateRelDefinesByProperties(IFCFile file, string guid, IFCAnyHandle ownerHistory,\r\n          string name, string description, ISet<IFCAnyHandle> relatedObjects, IFCAnyHandle relatingPropertyDefinition)\r\n      {\r\n         if (relatedObjects == null)\r\n            return;\r\n\r\n         // This code isn't actually valid for IFC4 - IFC4 requires that there be a 1:1 relationship between\r\n         // the one relatedObject and the relatingPropertyDefinition.  This requires a cloning of the IfcPropertySet\r\n         // in addition to cloning the IfcRelDefinesByProperties.  This will be done in the next update.\r\n         IFCInstanceExporter.CreateRelDefinesByProperties(file, guid, ownerHistory, name, description,\r\n             relatedObjects, relatingPropertyDefinition);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Call the correct CreateRelDefinesByProperties depending on the schema to create one or more IFC entites.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"ownerHistory\">The owner history.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <param name=\"description\">The description.</param>\r\n      /// <param name=\"relatedObjects\">The related objects, required to be only 1 for IFC4.</param>\r\n      /// <param name=\"relatingPropertyDefinition\">The property definition to relate to the IFC object entity/entities.</param>\r\n      public static void CreateRelDefinesByProperties(IFCFile file, IFCAnyHandle ownerHistory,\r\n          string name, string description, ISet<IFCAnyHandle> relatedObjects, IFCAnyHandle relatingPropertyDefinition)\r\n      {\r\n         if (relatedObjects == null)\r\n            return;\r\n\r\n         string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n            GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelDefinesByProperties, name, relatingPropertyDefinition));\r\n         CreateRelDefinesByProperties(file, guid, ownerHistory, name, description, relatedObjects,\r\n            relatingPropertyDefinition);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IfcCreateCurveBoundedPlane given a polygonal outer boundary and 0 or more polygonal inner boundaries.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFCFile.</param>\r\n      /// <param name=\"newOuterLoopPoints\">The list of points representating the outer boundary of the plane.</param>\r\n      /// <param name=\"innerLoopPoints\">The list of inner boundaries of the plane.  This list can be null.</param>\r\n      /// <returns>The IfcCreateCurveBoundedPlane.</returns>\r\n      public static IFCAnyHandle CreateCurveBoundedPlane(IFCFile file, IList<XYZ> newOuterLoopPoints, IList<IList<XYZ>> innerLoopPoints)\r\n      {\r\n         if (newOuterLoopPoints == null)\r\n            return null;\r\n\r\n         // We need at least 3 distinct points for the outer polygon.\r\n         int outerSz = newOuterLoopPoints.Count;\r\n         if (outerSz < 3)\r\n            return null;\r\n\r\n         // We allow the polygon to duplicate the first and last points, or not.  If the last point is duplicated, we will generally ignore it.\r\n         bool firstIsLast = newOuterLoopPoints[0].IsAlmostEqualTo(newOuterLoopPoints[outerSz - 1]);\r\n         if (firstIsLast && (outerSz == 3))\r\n            return null;\r\n\r\n         // Calculate the X direction of the plane using the first point and the next point that generates a valid direction.\r\n         XYZ firstDir = null;\r\n         int ii = 1;\r\n         for (; ii < outerSz; ii++)\r\n         {\r\n            firstDir = (newOuterLoopPoints[ii] - newOuterLoopPoints[0]).Normalize();\r\n            if (firstDir != null)\r\n               break;\r\n         }\r\n         if (firstDir == null)\r\n            return null;\r\n\r\n         // Calculate the Y direction of the plane using the first point and the next point that generates a valid direction that isn't\r\n         // parallel to the first direction.\r\n         XYZ secondDir = null;\r\n         for (ii++; ii < outerSz; ii++)\r\n         {\r\n            secondDir = (newOuterLoopPoints[ii] - newOuterLoopPoints[0]).Normalize();\r\n            if (secondDir == null)\r\n               continue;\r\n\r\n            if (MathUtil.IsAlmostEqual(Math.Abs(firstDir.DotProduct(secondDir)), 1.0))\r\n               continue;\r\n\r\n            break;\r\n         }\r\n         if (secondDir == null)\r\n            return null;\r\n\r\n         // Generate the normal of the plane, ensure it is valid.\r\n         XYZ norm = firstDir.CrossProduct(secondDir);\r\n         if (norm == null || norm.IsZeroLength())\r\n            return null;\r\n\r\n         norm = norm.Normalize();\r\n         if (norm == null)\r\n            return null;\r\n\r\n         // The original secondDir was almost certainly not orthogonal to firstDir; generate an orthogonal direction.\r\n         secondDir = norm.CrossProduct(firstDir);\r\n         firstDir = firstDir.Normalize();\r\n         secondDir = secondDir.Normalize();\r\n         Transform projLCS = GeometryUtil.CreateTransformFromVectorsAndOrigin(firstDir, secondDir, norm, newOuterLoopPoints[0]);\r\n\r\n         // If the first and last points are the same, ignore the last point for IFC processing.\r\n         if (firstIsLast)\r\n            outerSz--;\r\n\r\n         // Create the UV points before we create handles, to avoid deleting handles on failure.\r\n         IList<UV> projVecData = new List<UV>();\r\n         for (ii = 0; ii < outerSz; ii++)\r\n         {\r\n            UV uv = GeometryUtil.ProjectPointToXYPlaneOfLCS(projLCS, newOuterLoopPoints[ii]);\r\n            if (uv == null)\r\n               return null;\r\n            projVecData.Add(uv);\r\n         }\r\n\r\n         // Generate handles for the outer boundary.  This will close the loop by adding the first IfcCartesianPointHandle to the end of polyLinePts.\r\n         IList<IFCAnyHandle> polyLinePts = CreateCartesianPointList(file, projVecData);\r\n\r\n         IFCAnyHandle outerBound = IFCInstanceExporter.CreatePolyline(file, polyLinePts);\r\n\r\n         IFCAnyHandle origHnd = CreateCartesianPoint(file, newOuterLoopPoints[0]);\r\n         IFCAnyHandle refHnd = CreateDirection(file, firstDir, GeometryUtil.Dimension.Dim3D);\r\n         IFCAnyHandle dirHnd = CreateDirection(file, norm, GeometryUtil.Dimension.Dim3D);\r\n\r\n         IFCAnyHandle positionHnd = IFCInstanceExporter.CreateAxis2Placement3D(file, origHnd, dirHnd, refHnd);\r\n         IFCAnyHandle basisPlane = IFCInstanceExporter.CreatePlane(file, positionHnd);\r\n\r\n         // Inner bounds isn't optional.\r\n         HashSet<IFCAnyHandle> innerBounds = new();\r\n         if (innerLoopPoints != null)\r\n         {\r\n            int innerSz = innerLoopPoints.Count;\r\n            for (ii = 0; ii < innerSz; ii++)\r\n            {\r\n               IList<XYZ> currInnerLoopVecData = innerLoopPoints[ii];\r\n               int loopSz = currInnerLoopVecData.Count;\r\n               if (loopSz == 0)\r\n                  continue;\r\n\r\n               projVecData.Clear();\r\n               firstIsLast = currInnerLoopVecData[0].IsAlmostEqualTo(currInnerLoopVecData[loopSz - 1]);\r\n\r\n               // If the first and last points are the same, ignore the last point for IFC processing.\r\n               if (firstIsLast)\r\n                  loopSz--;\r\n\r\n               // Be lenient on what we find, but we need at least 3 distinct points to process an inner polygon.\r\n               bool continueOnFailure = (loopSz < 3);\r\n               for (int jj = 0; jj < loopSz && !continueOnFailure; jj++)\r\n               {\r\n                  UV uv = GeometryUtil.ProjectPointToXYPlaneOfLCS(projLCS, currInnerLoopVecData[jj]);\r\n                  if (uv == null)\r\n                     continueOnFailure = true;\r\n                  else\r\n                     projVecData.Add(uv);\r\n               }\r\n\r\n               // We allow for bad inners - we just ignore them.\r\n               if (continueOnFailure)\r\n                  continue;\r\n\r\n               // Generate handles for the inner boundary.  This will close the loop by adding the first IfcCartesianPointHandle to the end of polyLinePts.\r\n               polyLinePts = CreateCartesianPointList(file, projVecData);\r\n               IFCAnyHandle polyLine = IFCInstanceExporter.CreatePolyline(file, polyLinePts);\r\n\r\n               innerBounds.Add(polyLine);\r\n            }\r\n         }\r\n\r\n         return IFCInstanceExporter.CreateCurveBoundedPlane(file, basisPlane, outerBound, innerBounds);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a copy of the given SolidOrShellTessellationControls object\r\n      /// </summary>\r\n      /// <param name=\"tessellationControls\">The given SolidOrShellTessellationControls object</param>\r\n      /// <returns>The copy of the input object</returns>\r\n      public static SolidOrShellTessellationControls CopyTessellationControls(SolidOrShellTessellationControls tessellationControls)\r\n      {\r\n         SolidOrShellTessellationControls newTessellationControls = new SolidOrShellTessellationControls();\r\n\r\n         if (tessellationControls.Accuracy > 0 && tessellationControls.Accuracy <= 30000)\r\n            newTessellationControls.Accuracy = tessellationControls.Accuracy;\r\n         if (tessellationControls.LevelOfDetail >= 0 && tessellationControls.LevelOfDetail <= 1)\r\n            newTessellationControls.LevelOfDetail = tessellationControls.LevelOfDetail;\r\n         if (tessellationControls.MinAngleInTriangle >= 0 && tessellationControls.MinAngleInTriangle < Math.PI / 3)\r\n            newTessellationControls.MinAngleInTriangle = tessellationControls.MinAngleInTriangle;\r\n         if (tessellationControls.MinExternalAngleBetweenTriangles > 0 && tessellationControls.MinExternalAngleBetweenTriangles <= 30000)\r\n            newTessellationControls.MinExternalAngleBetweenTriangles = tessellationControls.MinExternalAngleBetweenTriangles;\r\n\r\n         return newTessellationControls;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get tessellation control information for the given element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element</param>\r\n      /// <param name=\"tessellationControls\">The original tessellation control.</param>\r\n      /// <returns>For some elements, a modified version of the tessellationControls input arugment.  \r\n      /// By default, returns a copy of the original tessellationControls input argument.</returns>\r\n      /// <remarks>This method doesn't alter the tessellationControls input argument.</remarks>\r\n      public static SolidOrShellTessellationControls GetTessellationControl(Element element, SolidOrShellTessellationControls tessellationControls)\r\n      {\r\n         SolidOrShellTessellationControls copyTessellationControls = CopyTessellationControls(tessellationControls);\r\n\r\n         Document document = element.Document;\r\n         Element elementType = null;\r\n\r\n         //Use the insulations host as the host will have the same shape as the insulation, and then triangulate the insulation. \r\n         if (element as DuctInsulation != null)\r\n         {\r\n            ElementId hostId = (element as DuctInsulation).HostElementId;\r\n\r\n            Element hostElement = document.GetElement(hostId);\r\n\r\n            elementType = document.GetElement(hostElement.GetTypeId());\r\n\r\n         }\r\n         else\r\n         {\r\n            elementType = document.GetElement(element.GetTypeId());\r\n         }\r\n\r\n\r\n         if (elementType as FamilySymbol != null)\r\n         {\r\n            FamilySymbol symbol = elementType as FamilySymbol;\r\n            Family family = symbol.Family;\r\n            if (family != null)\r\n            {\r\n               Parameter para = family.GetParameter(ParameterTypeId.FamilyContentPartType);\r\n               if (para != null)\r\n               {\r\n                  if (element as DuctInsulation != null)\r\n                  {\r\n                     copyTessellationControls = GetTessellationControlsForInsulation(copyTessellationControls,\r\n                        ExporterCacheManager.ExportOptionsCache.LevelOfDetail,\r\n                        para.AsInteger());\r\n                  }\r\n                  else\r\n                  {\r\n                     copyTessellationControls = GetTessellationControlsForDuct(copyTessellationControls,\r\n                        ExporterCacheManager.ExportOptionsCache.LevelOfDetail,\r\n                        para.AsInteger());\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         return copyTessellationControls;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the tessellation controls with the right setings for an elbow, tee or cross.\r\n      /// </summary>\r\n      /// <param name=\"controls\">The controls to be used in the tessellation</param>\r\n      /// <param name=\"lod\">The level of detail.  </param>\r\n      /// <param name=\"type\">the type of the duct. </param>\r\n      /// <returns>The new SolidOrShellTessellationControls based on the controls input argument.</returns>\r\n      public static SolidOrShellTessellationControls GetTessellationControlsForDuct(SolidOrShellTessellationControls controls,\r\n         ExportOptionsCache.ExportTessellationLevel lod,\r\n         int type)\r\n      {\r\n         // Note that we make no changes of the level of detail is set to High.\r\n         if (type == 5) //Elbow\r\n         {\r\n            switch (lod)\r\n            {\r\n               case ExportOptionsCache.ExportTessellationLevel.ExtraLow:\r\n                  controls.Accuracy = 0.81;\r\n                  controls.LevelOfDetail = 0.05;\r\n                  controls.MinAngleInTriangle = 0.13;\r\n                  controls.MinExternalAngleBetweenTriangles = 1.7;\r\n                  break;\r\n               case ExportOptionsCache.ExportTessellationLevel.Low:\r\n                  controls.Accuracy = 0.84;\r\n                  controls.LevelOfDetail = 0.4;\r\n                  controls.MinAngleInTriangle = 0.13;\r\n                  controls.MinExternalAngleBetweenTriangles = 1.25;\r\n                  break;\r\n               case ExportOptionsCache.ExportTessellationLevel.Medium:\r\n                  controls.Accuracy = 0.74;\r\n                  controls.LevelOfDetail = 0.4;\r\n                  controls.MinAngleInTriangle = 0.13;\r\n                  controls.MinExternalAngleBetweenTriangles = 0.74;\r\n                  break;\r\n               case ExportOptionsCache.ExportTessellationLevel.High:\r\n                  break;\r\n            }\r\n         }\r\n         else if (type == 6) //Tee\r\n         {\r\n            switch (lod)\r\n            {\r\n               case ExportOptionsCache.ExportTessellationLevel.ExtraLow:\r\n                  controls.Accuracy = 1.21;\r\n                  controls.LevelOfDetail = 0.05;\r\n                  controls.MinAngleInTriangle = 0.13;\r\n                  controls.MinExternalAngleBetweenTriangles = 1.7;\r\n                  break;\r\n               case ExportOptionsCache.ExportTessellationLevel.Low:\r\n                  controls.Accuracy = 0.84;\r\n                  controls.LevelOfDetail = 0.3;\r\n                  controls.MinAngleInTriangle = 0.13;\r\n                  controls.MinExternalAngleBetweenTriangles = 1.0;\r\n                  break;\r\n               case ExportOptionsCache.ExportTessellationLevel.Medium:\r\n                  controls.Accuracy = 0.84;\r\n                  controls.LevelOfDetail = 0.4;\r\n                  controls.MinAngleInTriangle = 0.13;\r\n                  controls.MinExternalAngleBetweenTriangles = 0.54;\r\n                  break;\r\n               case ExportOptionsCache.ExportTessellationLevel.High:\r\n                  break;\r\n            }\r\n         }\r\n         else if (type == 8) //Cross\r\n         {\r\n            switch (lod)\r\n            {\r\n               case ExportOptionsCache.ExportTessellationLevel.ExtraLow:\r\n                  controls.Accuracy = 0.81;\r\n                  controls.LevelOfDetail = 0.05;\r\n                  controls.MinAngleInTriangle = 0.13;\r\n                  controls.MinExternalAngleBetweenTriangles = 1.7;\r\n                  break;\r\n               case ExportOptionsCache.ExportTessellationLevel.Low:\r\n                  controls.Accuracy = 0.84;\r\n                  controls.LevelOfDetail = 0.2;\r\n                  controls.MinAngleInTriangle = 0.13;\r\n                  controls.MinExternalAngleBetweenTriangles = 0.8;\r\n                  break;\r\n               case ExportOptionsCache.ExportTessellationLevel.Medium:\r\n                  controls.Accuracy = 0.81;\r\n                  controls.LevelOfDetail = 0.4;\r\n                  controls.MinAngleInTriangle = 0.13;\r\n                  controls.MinExternalAngleBetweenTriangles = 0.84;\r\n                  break;\r\n               case ExportOptionsCache.ExportTessellationLevel.High:\r\n                  break;\r\n            }\r\n         }\r\n         return controls;\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      ///  Returns the tessellation controls with the right setings for insulations for a duct of type elbow,tee or cross\r\n      /// </summary>\r\n      /// <param name=\"controls\">The controls to be used in the tessellation</param>\r\n      /// <param name=\"lod\">The level of detail.  </param>\r\n      /// <param name=\"type\">the type of the duct. </param>\r\n      /// <returns>The new SolidOrShellTessellationControls based on the controls input argument.</returns>\r\n      public static SolidOrShellTessellationControls GetTessellationControlsForInsulation(SolidOrShellTessellationControls controls,\r\n         ExportOptionsCache.ExportTessellationLevel lod,\r\n         int type)\r\n      {\r\n         if (type == 5) //Elbow\r\n         {\r\n            switch (lod)\r\n            {\r\n               case ExportOptionsCache.ExportTessellationLevel.ExtraLow:\r\n                  controls.Accuracy = 0.6;\r\n                  controls.LevelOfDetail = 0.1;\r\n                  controls.MinAngleInTriangle = 0.13;\r\n                  controls.MinExternalAngleBetweenTriangles = 1.2;\r\n                  break;\r\n               case ExportOptionsCache.ExportTessellationLevel.Low:\r\n                  controls.Accuracy = 0.6;\r\n                  controls.LevelOfDetail = 0.3;\r\n                  controls.MinAngleInTriangle = 0.13;\r\n                  controls.MinExternalAngleBetweenTriangles = 0.7;\r\n                  break;\r\n               case ExportOptionsCache.ExportTessellationLevel.Medium:\r\n                  controls.Accuracy = 0.5;\r\n                  controls.LevelOfDetail = 0.4;\r\n                  controls.MinAngleInTriangle = 0.13;\r\n                  controls.MinExternalAngleBetweenTriangles = 0.35;\r\n                  break;\r\n               case ExportOptionsCache.ExportTessellationLevel.High:\r\n                  break;\r\n            }\r\n         }\r\n         else if (type == 6) //Tee\r\n         {\r\n            switch (lod)\r\n            {\r\n               case ExportOptionsCache.ExportTessellationLevel.ExtraLow:\r\n                  controls.Accuracy = 0.6;\r\n                  controls.LevelOfDetail = 0.1;\r\n                  controls.MinAngleInTriangle = 0.13;\r\n                  controls.MinExternalAngleBetweenTriangles = 1.2;\r\n                  break;\r\n               case ExportOptionsCache.ExportTessellationLevel.Low:\r\n                  controls.Accuracy = 0.6;\r\n                  controls.LevelOfDetail = 0.2;\r\n                  controls.MinAngleInTriangle = 0.13;\r\n                  controls.MinExternalAngleBetweenTriangles = 0.9;\r\n                  break;\r\n               case ExportOptionsCache.ExportTessellationLevel.Medium:\r\n                  controls.Accuracy = 0.5;\r\n                  controls.LevelOfDetail = 0.4;\r\n                  controls.MinAngleInTriangle = 0.13;\r\n                  controls.MinExternalAngleBetweenTriangles = 0.55;\r\n                  break;\r\n               case ExportOptionsCache.ExportTessellationLevel.High:\r\n                  break;\r\n            }\r\n         }\r\n         else if (type == 8) //Cross\r\n         {\r\n            switch (lod)\r\n            {\r\n               case ExportOptionsCache.ExportTessellationLevel.ExtraLow:\r\n                  controls.Accuracy = 0.6;\r\n                  controls.LevelOfDetail = 0.1;\r\n                  controls.MinAngleInTriangle = 0.13;\r\n                  controls.MinExternalAngleBetweenTriangles = 1.2;\r\n                  break;\r\n               case ExportOptionsCache.ExportTessellationLevel.Low:\r\n                  controls.Accuracy = 0.6;\r\n                  controls.LevelOfDetail = 0.2;\r\n                  controls.MinAngleInTriangle = 0.13;\r\n                  controls.MinExternalAngleBetweenTriangles = 0.9;\r\n                  break;\r\n               case ExportOptionsCache.ExportTessellationLevel.Medium:\r\n                  controls.Accuracy = 0.5;\r\n                  controls.LevelOfDetail = 0.4;\r\n                  controls.MinAngleInTriangle = 0.13;\r\n                  controls.MinExternalAngleBetweenTriangles = 0.55;\r\n                  break;\r\n               case ExportOptionsCache.ExportTessellationLevel.High:\r\n                  break;\r\n            }\r\n         }\r\n         return controls;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get information about single material.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"matId\">The material id.</param>\r\n      /// <returns>The single material handle.</returns>\r\n      public static IFCAnyHandle GetSingleMaterial(IFCFile file, Element element, ElementId matId)\r\n      {\r\n         string paramValue;\r\n         IFCAnyHandle singleMaterialOverrideHnd = null;\r\n\r\n         ParameterUtil.GetStringValueFromElementOrSymbol(element, \"IfcSingleMaterialOverride\", out paramValue);\r\n         if (!string.IsNullOrEmpty(paramValue))\r\n         {\r\n            singleMaterialOverrideHnd = IFCInstanceExporter.CreateMaterial(file, paramValue, null, null);\r\n            ExporterCacheManager.MaterialHandleCache.Register(matId, singleMaterialOverrideHnd);\r\n         }\r\n         return singleMaterialOverrideHnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets material name from element's IfcSingleMaterialOverride parameter\r\n      /// and searches for Material with equal name in Document.\r\n      /// </summary>\r\n      /// <param name=\"element\">the element</param>\r\n      /// <returns>Material ID</returns>\r\n      public static ElementId GetSingleMaterial(Element element)\r\n      {\r\n         ElementId matID = ElementId.InvalidElementId;\r\n\r\n         string matName;\r\n         ParameterUtil.GetStringValueFromElementOrSymbol(element, \"IfcSingleMaterialOverride\", out matName);\r\n         if (!string.IsNullOrEmpty(matName))\r\n         {\r\n            Material mat = new FilteredElementCollector(element.Document)\r\n                        .WhereElementIsNotElementType()\r\n                        .OfClass(typeof(Material))\r\n                        .Where(m => m.Name == matName)\r\n                        .Cast<Material>()\r\n                        .FirstOrDefault();\r\n            if (mat != null)\r\n               matID = mat.Id;\r\n         }\r\n\r\n         return matID;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get Transform from an IfcLocalPlacement\r\n      /// </summary>\r\n      /// <param name=\"ecsHnd\">Handle to the IfcLocalPlacement</param>\r\n      /// <param name=\"unscaleOrigin\">If true, return the origin in Revit coordinates (feet).  If false, in IFC coordinates.</param>\r\n      /// <returns>Transform from the RelativePlacement attribute of the IfcLocalPlacement</returns>\r\n      public static Transform GetTransformFromLocalPlacementHnd(IFCAnyHandle ecsHnd, bool unscaleOrigin)\r\n      {\r\n         if (!IFCAnyHandleUtil.IsTypeOf(ecsHnd, IFCEntityType.IfcLocalPlacement))\r\n            return Transform.Identity;\r\n\r\n         IFCAnyHandle relPlacement = IFCAnyHandleUtil.GetInstanceAttribute(ecsHnd, \"RelativePlacement\");       // expected: IfcAxis2Placement3D\r\n         if (!IFCAnyHandleUtil.IsTypeOf(relPlacement, IFCEntityType.IfcAxis2Placement3D))\r\n            return Transform.Identity;\r\n\r\n         IFCAnyHandle zDir = IFCAnyHandleUtil.GetInstanceAttribute(relPlacement, \"Axis\");                      // IfcDirection\r\n         IFCAnyHandle xDir = IFCAnyHandleUtil.GetInstanceAttribute(relPlacement, \"RefDirection\");              // IfcDirection\r\n         IFCAnyHandle pos = IFCAnyHandleUtil.GetInstanceAttribute(relPlacement, \"Location\");                   // IfcCartesianPoint\r\n\r\n         XYZ xDirection = null;\r\n         XYZ zDirection = null;\r\n\r\n         if (zDir != null)\r\n         {\r\n            IList<double> zDirValues = IFCAnyHandleUtil.GetAggregateDoubleAttribute<List<double>>(zDir, \"DirectionRatios\");\r\n            zDirection = new XYZ(zDirValues[0], zDirValues[1], zDirValues[2]);\r\n         }\r\n         else\r\n         {\r\n            // Default Z-Direction\r\n            zDirection = XYZ.BasisZ;\r\n         }\r\n\r\n         if (xDir != null)\r\n         {\r\n            IList<double> xDirValues = IFCAnyHandleUtil.GetAggregateDoubleAttribute<List<double>>(xDir, \"DirectionRatios\");\r\n            xDirection = new(xDirValues[0], xDirValues[1], xDirValues[2]);\r\n         }\r\n         else\r\n         {\r\n            // Default X-Direction\r\n            xDirection = XYZ.BasisX;\r\n         }\r\n\r\n         XYZ yDirection = zDirection.CrossProduct(xDirection);\r\n         IList<double> posCoords = IFCAnyHandleUtil.GetAggregateDoubleAttribute<List<double>>(pos, \"Coordinates\");\r\n         XYZ position = new(posCoords[0], posCoords[1], posCoords[2]);\r\n\r\n         Transform ecsFromHnd = Transform.Identity;\r\n         ecsFromHnd.BasisX = xDirection;\r\n         ecsFromHnd.BasisY = yDirection;\r\n         ecsFromHnd.BasisZ = zDirection;\r\n         ecsFromHnd.Origin = unscaleOrigin ? UnitUtil.UnscaleLength(position) : position;\r\n\r\n         return ecsFromHnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Compute the total tansform of a local placement\r\n      /// </summary>\r\n      /// <param name=\"localPlacementHnd\">the local placement handle</param>\r\n      /// <returns>the resulting total transform</returns>\r\n      public static Transform GetTotalTransformFromLocalPlacement(IFCAnyHandle localPlacementHnd)\r\n      {\r\n         Transform totalTrf = Transform.Identity;\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(localPlacementHnd))\r\n            return totalTrf;\r\n\r\n         if (!localPlacementHnd.IsTypeOf(\"IfcLocalPlacement\"))\r\n            return totalTrf;\r\n\r\n         totalTrf = GetTransformFromLocalPlacementHnd(localPlacementHnd, false);\r\n\r\n         IFCAnyHandle placementRelTo = IFCAnyHandleUtil.GetInstanceAttribute(localPlacementHnd, \"PlacementRelTo\");\r\n         while (!IFCAnyHandleUtil.IsNullOrHasNoValue(placementRelTo))\r\n         {\r\n            Transform trf = GetTransformFromLocalPlacementHnd(placementRelTo, false);\r\n            if (trf == null)\r\n               return null;        // the placementRelTo is not the type of IfcLocalPlacement, return null. We don't handle this\r\n\r\n            totalTrf = trf.Multiply(totalTrf);\r\n            placementRelTo = IFCAnyHandleUtil.GetInstanceAttribute(placementRelTo, \"PlacementRelTo\");\r\n         }\r\n\r\n         return totalTrf;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Simple scaling of Transform from scaled unit (used in IFC) to the internal unscaled Revit tansform\r\n      /// </summary>\r\n      /// <param name=\"scaledTrf\">scaled Transform</param>\r\n      /// <returns>unscaled Transform</returns>\r\n      public static Transform UnscaleTransformOrigin(Transform scaledTrf)\r\n      {\r\n         Transform unscaledTrf = new Transform(scaledTrf);\r\n         unscaledTrf.Origin = UnitUtil.UnscaleLength(scaledTrf.Origin);\r\n         return unscaledTrf;\r\n      }\r\n\r\n      public static ISet<IFCAnyHandle> CleanRefObjects(ISet<IFCAnyHandle> cacheHandles)\r\n      {\r\n         if (cacheHandles == null)\r\n            return null;\r\n\r\n         IList<IFCAnyHandle> refObjToDel = new List<IFCAnyHandle>();\r\n         foreach (IFCAnyHandle cacheHandle in cacheHandles)\r\n         {\r\n            if (ExporterCacheManager.HandleToDeleteCache.Contains(cacheHandle))\r\n            {\r\n               refObjToDel.Add(cacheHandle);\r\n            }\r\n            else if (IFCAnyHandleUtil.IsNullOrHasNoValue(cacheHandle))\r\n            {\r\n               // If we get to these lines of code, then there is an error somewhere\r\n               // where we deleted a handle but didn't properly mark it as deleted.\r\n               // This should be investigated, but this will at least not prevent\r\n               // the export.\r\n               ExporterCacheManager.HandleToDeleteCache.Add(cacheHandle);\r\n               refObjToDel.Add(cacheHandle);\r\n            }\r\n         }\r\n\r\n         foreach (IFCAnyHandle refObjHandle in refObjToDel)\r\n         {\r\n            cacheHandles.Remove(refObjHandle);\r\n         }\r\n\r\n         return cacheHandles;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add into the Complex property cache for the product handle. This will be used later when the complex Quantities are created\r\n      /// </summary>\r\n      /// <param name=\"productHandle\">the product handle</param>\r\n      /// <param name=\"layersetInfo\">the layersetinfo</param>\r\n      public static bool AddIntoComplexPropertyCache(IFCAnyHandle productHandle, MaterialLayerSetInfo layersetInfo)\r\n      {\r\n         // export Width Base Quantities if it is IFC4RV and the data is available\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView && ExporterCacheManager.ExportIFCBaseQuantities())\r\n         {\r\n            if (layersetInfo != null && layersetInfo.LayerQuantityWidthHnd != null && layersetInfo.LayerQuantityWidthHnd.Count > 0)\r\n            {\r\n               // Add to cache to be assigned later when processing the Quantities\r\n               ExporterCacheManager.ComplexPropertyCache.Add(productHandle, layersetInfo.LayerQuantityWidthHnd);\r\n               return true;\r\n            }\r\n         }\r\n         return false;\r\n      }\r\n\r\n      public enum ExportPartAs\r\n      {\r\n         Part,\r\n         ShapeAspect,\r\n         None\r\n      }\r\n\r\n      /// <summary>\r\n      /// A function to determine if configuration settings suggest exporting the element as parts.\r\n      /// </summary>\r\n      /// <param name=\"layerCount\">The number of layers</param>\r\n      /// <returns>False if we shouldn't export parts, true if further checks don't restrict it.</returns>\r\n      public static bool ShouldExportPartsForRV(int layerCount)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportParts)\r\n            return true;\r\n\r\n         if (layerCount < 2)\r\n            return false;\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExchangeRequirement != KnownERNames.Structural)\r\n            return false;\r\n\r\n         return ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView ||\r\n            ExporterCacheManager.ExportOptionsCache.ExportAs4x3ReferenceView;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates parts for element if it is possible.\r\n      /// </summary>\r\n      /// <param name=\"element\">the element</param>\r\n      /// <param name=\"layersCount\">number of element's layers or associated parts</param>\r\n      /// <returns>true - if parts have been successfully created. false - is creation of parts is not possible.</returns>\r\n      public static ExportPartAs CanExportParts(Element element)\r\n      {\r\n         if (element == null)\r\n            return ExportPartAs.None;\r\n\r\n         ElementId elementId = element.Id;\r\n         if (!ExporterCacheManager.TemporaryPartsCache.HasTemporaryParts(elementId) && \r\n            !PartUtils.HasAssociatedParts(element.Document, elementId))\r\n            return ExportPartAs.None;\r\n\r\n         int associatedPartsCount = ExporterCacheManager.TemporaryPartsCache.HasTemporaryParts(elementId) ?\r\n            ExporterCacheManager.TemporaryPartsCache.GeometriesCount(elementId) : \r\n            PartUtils.GetAssociatedParts(element.Document, element.Id, false, true).Count;\r\n\r\n         if (ShouldExportPartsForRV(associatedPartsCount))\r\n            return ExportPartAs.Part;\r\n\r\n         // If we get here, exportParts is false.\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView && associatedPartsCount > 1)\r\n            return ExportPartAs.ShapeAspect;\r\n\r\n         return ExportPartAs.None;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if ElementId corresponds to an Element in a Document.\r\n      /// </summary>\r\n      /// <param name=\"id\">the element id</param>\r\n      /// <returns>true - if id is built in or invalid, false - otherwise</returns>\r\n      public static bool IsElementIdBuiltInOrInvalid(ElementId id)\r\n      {\r\n         return id <= ElementId.InvalidElementId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return true if we are exporting the host model.\r\n      /// </summary>\r\n      /// <returns>True if we are exporting the host model, false otherwise.</returns>\r\n      public static bool ExportingHostModel()\r\n      {\r\n         return !ExporterCacheManager.ExportOptionsCache.ExportingSeparateLink() &&\r\n            (ExporterCacheManager.BaseLinkedDocumentGUID == null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Detects if Element is part of Assembly.  This is useful during Export.\r\n      /// </summary>\r\n      /// <param name=\"element\">Element to check.</param>\r\n      /// <returns>True if non-null Element is part of Assembly, false otherwise.</returns>\r\n      public static bool IsContainedInAssembly(Element element) => ((element?.AssemblyInstanceId ?? ElementId.InvalidElementId) != ElementId.InvalidElementId);\r\n\r\n      /// <summary>\r\n      /// Get the view containing the geometry for this element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The associated view, if any.</returns>\r\n      public static View GetViewForElementGeometry(Element element)\r\n      {\r\n         return ExporterCacheManager.ExportOptionsCache.UseActiveViewGeometry ?\r\n            ExporterCacheManager.ExportOptionsCache.ActiveView :\r\n            element.Document.GetElement(element.OwnerViewId) as View;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collect schedules from the document.\r\n      /// </summary>\r\n      public static List<(string, ScheduleDefinition)> CollectSchedules(Document document)\r\n      {\r\n         List<(string, ScheduleDefinition)> collectedSchedules = new();\r\n         if (document == null)\r\n            return collectedSchedules;\r\n\r\n         FilteredElementCollector viewScheduleElementCollector = new(document);\r\n         ElementFilter viewScheduleElementFilter = new ElementClassFilter(typeof(ViewSchedule));\r\n         viewScheduleElementCollector.WherePasses(viewScheduleElementFilter);\r\n         List<ViewSchedule> filteredSchedules = viewScheduleElementCollector.Cast<ViewSchedule>().ToList();\r\n\r\n         foreach (ViewSchedule schedule in filteredSchedules)\r\n         {\r\n            if (schedule.IsTemplate)\r\n               continue;\r\n\r\n            ScheduleDefinition definition = schedule.Definition;\r\n            if (definition == null)\r\n               continue;\r\n\r\n            int fieldCount = definition.GetFieldCount();\r\n            if (fieldCount == 0)\r\n               continue;\r\n\r\n            collectedSchedules.Add((schedule.Name, definition));\r\n         }\r\n\r\n         return collectedSchedules;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/FabricParams.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.Structure;\n\nnamespace Revit.IFC.Export.Utility\n{\n   /// <summary>\n   /// Used to keep the properties of a FabricSheet for use in Pset_ReinforcingMeshCommon.\n   /// </summary>\n   public class FabricParams\n   {\n      /// <summary>\n      /// The steel grade attribute.\n      /// </summary>\n      public string SteelGrade { get; private set; } = string.Empty;\n\n      /// <summary>\n      /// The mesh length attribute.\n      /// </summary>\n      public double MeshLength { get; private set; } = 0.0;\n\n      /// <summary>\n      /// The mesh width attribute.\n      /// </summary>\n      public double MeshWidth { get; private set; } = 0.0;\n\n      /// <summary>\n      /// The longitudinal bar nominal diameter attribute.\n      /// </summary>\n      public double LongitudinalBarNominalDiameter { get; private set; } = 0.0;\n\n      /// <summary>\n      /// The transverse bar nominal diameter attribute.\n      /// </summary>\n      public double TransverseBarNominalDiameter { get; private set; } = 0.0;\n\n      /// <summary>\n      /// The longitudinal bar cross section area attribute.\n      /// </summary>\n      public double LongitudinalBarCrossSectionArea { get; private set; } = 0.0;\n\n      /// <summary>\n      /// The transverse bar cross section area attribute.\n      /// </summary>\n      public double TransverseBarCrossSectionArea { get; private set; } = 0.0;\n\n      /// <summary>\n      /// The longitudinal bar spacing attribute.\n      /// </summary>\n      public double LongitudinalBarSpacing { get; private set; } = 0.0;\n\n      /// <summary>\n      /// The transverse bar spacing attribute.\n      /// </summary>\n      public double TransverseBarSpacing { get; private set; } = 0.0;\n\n      private void GetFabricSheetParams(FabricSheet sheet)\n      {\n         if (sheet == null)\n            return;\n\n         MeshLength = sheet.CutOverallLength;\n         MeshWidth = sheet.CutOverallWidth;\n\n         if (sheet == null)\n            return;\n\n         Document doc = sheet.Document;\n         Element fabricSheetTypeElem = doc?.GetElement(sheet.GetTypeId());\n         FabricSheetType fabricSheetType = fabricSheetTypeElem as FabricSheetType;\n         SteelGrade = NamingUtil.GetOverrideStringValue(sheet, \"SteelGrade\", null);\n\n         Element majorFabricWireTypeElem = doc?.GetElement(fabricSheetType?.MajorDirectionWireType);\n         FabricWireType majorFabricWireType = (majorFabricWireTypeElem == null) ? null : (majorFabricWireTypeElem as FabricWireType);\n         if (majorFabricWireType != null)\n         {\n            LongitudinalBarNominalDiameter = UnitUtil.ScaleLength(majorFabricWireType.WireDiameter);\n            double localRadius = LongitudinalBarNominalDiameter / 2.0;\n            LongitudinalBarCrossSectionArea = localRadius * localRadius * Math.PI;\n         }\n\n         Element minorFabricWireTypeElem = doc?.GetElement(fabricSheetType?.MinorDirectionWireType);\n         FabricWireType minorFabricWireType = (minorFabricWireTypeElem == null) ? null : (minorFabricWireTypeElem as FabricWireType);\n         if (minorFabricWireType != null)\n         {\n            TransverseBarNominalDiameter = UnitUtil.ScaleLength(minorFabricWireType.WireDiameter);\n            double localRadius = TransverseBarNominalDiameter / 2.0;\n            TransverseBarCrossSectionArea = localRadius * localRadius * Math.PI;\n         }\n\n         LongitudinalBarSpacing = UnitUtil.ScaleLength(fabricSheetType.MajorSpacing);\n         TransverseBarSpacing = UnitUtil.ScaleLength(fabricSheetType.MinorSpacing);\n      }\n\n      /// <summary>\n      /// The constructor.  Populates the parameters needed for Pset_ReinforcementMeshCommon.\n      /// </summary>\n      /// <param name=\"fabricSheet\">The Revit fabric sheet.</param>\n      public FabricParams(FabricSheet fabricSheet)\n      {\n         GetFabricSheetParams(fabricSheet);\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/FamilyExporterUtil.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   /// <summary>\r\n   /// Provides methods to export generic family instances and types.\r\n   /// </summary>\r\n   class FamilyExporterUtil\r\n   {\r\n      /// <summary>\r\n      /// Checks if export type is distribution control element.\r\n      /// </summary>\r\n      /// <param name=\"exportType\">\r\n      /// The export type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if it is distribution control element, false otherwise.\r\n      /// </returns>\r\n      public static bool IsDistributionControlElementSubType(IFCExportInfoPair exportType)\r\n      {\r\n         return IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportInstance.ToString(), IFCEntityType.IfcDistributionControlElement.ToString(), strict: false) ||\r\n            IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportType.ToString(), IFCEntityType.IfcDistributionControlElementType.ToString(), strict: false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if export type is distribution flow element.\r\n      /// </summary>\r\n      /// <param name=\"exportType\">\r\n      /// The export type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if it is distribution flow element, false otherwise.\r\n      /// </returns>\r\n      public static bool IsDistributionFlowElementSubType(IFCExportInfoPair exportType)\r\n      {\r\n         return IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportInstance.ToString(), IFCEntityType.IfcDistributionFlowElement.ToString(), strict: false) ||\r\n            IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportType.ToString(), IFCEntityType.IfcDistributionFlowElementType.ToString(), strict: false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if export type is conversion device.\r\n      /// </summary>\r\n      /// <param name=\"exportType\">\r\n      /// The export type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if it is conversion device, false otherwise.\r\n      /// </returns>\r\n      public static bool IsEnergyConversionDeviceSubType(IFCExportInfoPair exportType)\r\n      {\r\n         return IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportInstance.ToString(), IFCEntityType.IfcEnergyConversionDevice.ToString(), strict: false) ||\r\n            IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportType.ToString(), IFCEntityType.IfcEnergyConversionDeviceType.ToString(), strict: false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if export type is flow fitting.\r\n      /// </summary>\r\n      /// <param name=\"exportType\">\r\n      /// The export type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if it is flow fitting, false otherwise.\r\n      /// </returns>\r\n      public static bool IsFlowFittingSubType(IFCExportInfoPair exportType)\r\n      {\r\n         return IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportInstance.ToString(), IFCEntityType.IfcFlowFitting.ToString(), strict: false) ||\r\n            IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportType.ToString(), IFCEntityType.IfcFlowFittingType.ToString(), strict: false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if export type is flow moving device.\r\n      /// </summary>\r\n      /// <param name=\"exportType\">\r\n      /// The export type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if it is flow moving device, false otherwise.\r\n      /// </returns>\r\n      public static bool IsFlowMovingDeviceSubType(IFCExportInfoPair exportType)\r\n      {\r\n         return IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportInstance.ToString(), IFCEntityType.IfcFlowMovingDevice.ToString(), strict: false) ||\r\n            IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportType.ToString(), IFCEntityType.IfcFlowMovingDeviceType.ToString(), strict: false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if export type is flow segment.\r\n      /// </summary>\r\n      /// <param name=\"exportType\">\r\n      /// The export type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if it is flow segment, false otherwise.\r\n      /// </returns>\r\n      public static bool IsFlowSegmentSubType(IFCExportInfoPair exportType)\r\n      {\r\n         return IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportInstance.ToString(), IFCEntityType.IfcFlowSegment.ToString(), strict: false) ||\r\n            IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportType.ToString(), IFCEntityType.IfcFlowSegmentType.ToString(), strict: false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if export type is flow storage device.\r\n      /// </summary>\r\n      /// <param name=\"exportType\">\r\n      /// The export type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if it is flow storage device, false otherwise.\r\n      /// </returns>\r\n      public static bool IsFlowStorageDeviceSubType(IFCExportInfoPair exportType)\r\n      {\r\n         return IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportInstance.ToString(), IFCEntityType.IfcFlowStorageDevice.ToString(), strict: false) ||\r\n            IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportType.ToString(), IFCEntityType.IfcFlowStorageDeviceType.ToString(), strict: false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if export type is flow terminal.\r\n      /// </summary>\r\n      /// <param name=\"exportType\">\r\n      /// The export type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if it is flow terminal, false otherwise.\r\n      /// </returns>\r\n      public static bool IsFlowTerminalSubType(IFCExportInfoPair exportType)\r\n      {\r\n         return IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportInstance.ToString(), IFCEntityType.IfcFlowTerminal.ToString(), strict: false) ||\r\n            IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportType.ToString(), IFCEntityType.IfcFlowTerminalType.ToString(), strict: false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if export type is flow treatment device.\r\n      /// </summary>\r\n      /// <param name=\"exportType\">\r\n      /// The export type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if it is flow treatment device, false otherwise.\r\n      /// </returns>\r\n      public static bool IsFlowTreatmentDeviceSubType(IFCExportInfoPair exportType)\r\n      {\r\n         return IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportInstance.ToString(), IFCEntityType.IfcFlowTreatmentDevice.ToString(), strict: false) ||\r\n            IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportType.ToString(), IFCEntityType.IfcFlowTreatmentDeviceType.ToString(), strict: false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if export type is flow controller.\r\n      /// </summary>\r\n      /// <param name=\"exportType\">\r\n      /// The export type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if it is flow controller, false otherwise.\r\n      /// </returns>\r\n      public static bool IsFlowControllerSubType(IFCExportInfoPair exportType)\r\n      {\r\n         return IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportInstance.ToString(), IFCEntityType.IfcFlowController.ToString(), strict: false) ||\r\n            IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportType.ToString(), IFCEntityType.IfcFlowControllerType.ToString(), strict: false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if export type is furnishing element.\r\n      /// </summary>\r\n      /// <param name=\"exportType\">\r\n      /// The export type.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if it is furnishing element, false otherwise.\r\n      /// </returns>\r\n      public static bool IsFurnishingElementSubType(IFCExportInfoPair exportType)\r\n      {\r\n         return IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportInstance.ToString(), IFCEntityType.IfcFurnishingElement.ToString(), strict: false) ||\r\n            IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportType.ToString(), IFCEntityType.IfcFurnishingElementType.ToString(), strict: false);\r\n      }\r\n\r\n      public static bool IsFurnitureSubType(IFCExportInfoPair exportType)\r\n      {\r\n         return IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportInstance.ToString(), IFCEntityType.IfcFurniture.ToString(), strict: false) ||\r\n            IfcSchemaEntityTree.IsSubTypeOf(ExporterCacheManager.ExportOptionsCache.FileVersion, exportType.ExportType.ToString(), IFCEntityType.IfcFurnitureType.ToString(), strict: false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports a generic family instance as IFC instance.\r\n      /// </summary>\r\n      /// <param name=\"type\">The export type.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"familyInstance\">The element.</param>\r\n      /// <param name=\"wrapper\">The ProductWrapper.</param>\r\n      /// <param name=\"setter\">The PlacementSetter.</param>\r\n      /// <param name=\"extraParams\">The extrusion creation data.</param>\r\n      /// <param name=\"instanceGUID\">The guid.</param>\r\n      /// <param name=\"ownerHistory\">The owner history handle.</param>\r\n      /// <param name=\"productRepresentation\">The representation handle.</param>\r\n      /// <param name=\"overrideLocalPlacement\">The local placement to use instead of the one in the placement setter, if appropriate.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle ExportGenericInstance(IFCExportInfoPair type,\r\n         ExporterIFC exporterIFC, Element familyInstance,\r\n         ProductWrapper wrapper, PlacementSetter setter, IFCExportBodyParams extraParams,\r\n         string instanceGUID, IFCAnyHandle ownerHistory, IFCAnyHandle productRepresentation,\r\n         IFCAnyHandle overrideLocalPlacement)\r\n      {\r\n         // NOTE: if overrideLocalPlacement is passed in, it is assumed that the entity to be\r\n         // created is a child in a container.  This currently only happens when exporting curtain\r\n         // walls, which is definitely the case.  If overrideLocalPlacement is used in other cases,\r\n         // then this assumption will have to be reconsidered.\r\n         bool useOverridePlacement = !IFCAnyHandleUtil.IsNullOrHasNoValue(overrideLocalPlacement);\r\n         IFCAnyHandle localPlacementToUse =\r\n            useOverridePlacement ? overrideLocalPlacement : setter.LocalPlacement;\r\n\r\n         bool isChildInContainer = ExporterUtil.IsContainedInAssembly(familyInstance) || useOverridePlacement;\r\n\r\n         ElementId roomId = ElementId.InvalidElementId;\r\n         if (IsRoomRelated(type))\r\n         {\r\n            roomId = setter.UpdateRoomRelativeCoordinates(familyInstance, out localPlacementToUse);\r\n         }\r\n\r\n         //should remove the create method where there is no use of this handle for API methods\r\n         //some places uses the return value of ExportGenericInstance as input parameter for API methods\r\n         string defaultPreDefinedType = null;\r\n         switch (type.ExportInstance)\r\n         {\r\n            case IFCEntityType.IfcBeam:\r\n               defaultPreDefinedType = \"BEAM\";\r\n               break;\r\n            case IFCEntityType.IfcColumn:\r\n               defaultPreDefinedType = \"COLUMN\";\r\n               break;\r\n            case IFCEntityType.IfcMember:\r\n               defaultPreDefinedType = \"BRACE\";\r\n               break;\r\n            default:\r\n               defaultPreDefinedType = \"NOTDEFINED\";\r\n               break;\r\n         }\r\n\r\n         string preDefinedType = type.IsPredefinedTypeDefault ? defaultPreDefinedType : type.PredefinedType;\r\n\r\n         IFCAnyHandle instanceHandle = null;\r\n         switch (type.ExportInstance)\r\n         {\r\n            case IFCEntityType.IfcBeam:\r\n               {\r\n                  instanceHandle = IFCInstanceExporter.CreateBeam(exporterIFC, familyInstance, instanceGUID, ownerHistory,\r\n                      localPlacementToUse, productRepresentation, preDefinedType);\r\n                  break;\r\n               }\r\n            case IFCEntityType.IfcColumn:\r\n               {\r\n                  instanceHandle = IFCInstanceExporter.CreateColumn(exporterIFC, familyInstance, \r\n                     instanceGUID, ownerHistory, localPlacementToUse, productRepresentation, \r\n                     preDefinedType);\r\n                  break;\r\n               }\r\n            case IFCEntityType.IfcCurtainWall:\r\n               {\r\n                  instanceHandle = IFCInstanceExporter.CreateCurtainWall(exporterIFC, familyInstance, \r\n                     instanceGUID, ownerHistory, localPlacementToUse, productRepresentation, \r\n                     preDefinedType);\r\n                  break;\r\n               }\r\n            case IFCEntityType.IfcMember:\r\n               {\r\n                  instanceHandle = IFCInstanceExporter.CreateMember(exporterIFC, familyInstance, \r\n                     instanceGUID, ownerHistory, localPlacementToUse, productRepresentation, \r\n                     preDefinedType);\r\n\r\n                  // Register the members's IFC handle for later use by truss export.\r\n                  ExporterCacheManager.ElementToHandleCache.Register(familyInstance.Id, instanceHandle, type);\r\n                  break;\r\n               }\r\n            case IFCEntityType.IfcPlate:\r\n               {\r\n                  instanceHandle = IFCInstanceExporter.CreatePlate(exporterIFC, familyInstance, \r\n                     instanceGUID, ownerHistory, localPlacementToUse, productRepresentation, \r\n                     preDefinedType);\r\n                  break;\r\n               }\r\n            case IFCEntityType.IfcMechanicalFastener:\r\n               {\r\n                  double? nominalDiameter = null;\r\n                  double? nominalLength = null;\r\n\r\n                  double nominalDiameterVal, nominalLengthVal;\r\n                  if (ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"NominalDiameter\", out nominalDiameterVal) != null)\r\n                     nominalDiameter = UnitUtil.ScaleLength(nominalDiameterVal);\r\n                  if (ParameterUtil.GetDoubleValueFromElementOrSymbol(familyInstance, \"NominalLength\", out nominalLengthVal) != null)\r\n                     nominalLength = UnitUtil.ScaleLength(nominalLengthVal);\r\n\r\n                  instanceHandle = IFCInstanceExporter.CreateMechanicalFastener(exporterIFC, \r\n                     familyInstance, instanceGUID, ownerHistory, localPlacementToUse,\r\n                     productRepresentation, nominalDiameter, nominalLength, preDefinedType);\r\n                  break;\r\n               }\r\n            case IFCEntityType.IfcRailing:\r\n               {\r\n                  instanceHandle = IFCInstanceExporter.CreateRailing(exporterIFC, familyInstance, \r\n                     instanceGUID, ownerHistory, localPlacementToUse, productRepresentation, \r\n                     preDefinedType);\r\n                  break;\r\n               }\r\n            case IFCEntityType.IfcSpace:\r\n               {\r\n                  IFCInternalOrExternal internalOrExternal = IFCInternalOrExternal.NotDefined;\r\n                  if(CategoryUtil.IsElementExternal(familyInstance).HasValue)\r\n                     internalOrExternal = CategoryUtil.IsElementExternal(familyInstance).Value? IFCInternalOrExternal.External : IFCInternalOrExternal.Internal;\r\n\r\n                  instanceHandle = IFCInstanceExporter.CreateSpace(exporterIFC, familyInstance, \r\n                     instanceGUID, ownerHistory, localPlacementToUse, productRepresentation, \r\n                     IFCElementComposition.Element, internalOrExternal, preDefinedType);\r\n                  break;\r\n               }\r\n            default:\r\n               {\r\n                  IFCFile file = exporterIFC.GetFile();\r\n\r\n                  // !!! These entities are deprecated in IFC4 and will be made abstract in the next version. \r\n                  //     It is still kept as it is because if we generate an IfcBuildingElementProxy, teh connectivity will be lost\r\n                  if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 &&\r\n                         (type.ExportInstance == IFCEntityType.IfcDistributionElement ||\r\n                          type.ExportInstance == IFCEntityType.IfcEnergyConversionDevice ||\r\n                          type.ExportInstance == IFCEntityType.IfcFlowController ||\r\n                          type.ExportInstance == IFCEntityType.IfcFlowFitting ||\r\n                          type.ExportInstance == IFCEntityType.IfcFlowMovingDevice ||\r\n                          type.ExportInstance == IFCEntityType.IfcFlowSegment ||\r\n                          type.ExportInstance == IFCEntityType.IfcFlowStorageDevice ||\r\n                          type.ExportInstance == IFCEntityType.IfcFlowTerminal ||\r\n                          type.ExportInstance == IFCEntityType.IfcFlowTreatmentDevice))\r\n                  {\r\n                     instanceHandle = IFCInstanceExporter.CreateGenericIFCEntity(type, file, familyInstance, instanceGUID, ownerHistory,\r\n                        localPlacementToUse, productRepresentation);\r\n                  }\r\n                  else\r\n                  {\r\n                     if (type.ExportInstance != IFCEntityType.UnKnown)\r\n                     {\r\n                        instanceHandle = IFCInstanceExporter.CreateGenericIFCEntity(type, file, familyInstance, instanceGUID, ownerHistory,\r\n                           localPlacementToUse, productRepresentation);\r\n                     }\r\n                  }\r\n                  break;\r\n               }\r\n         }\r\n\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(instanceHandle) && type.ExportInstance != IFCEntityType.IfcSpace)\r\n         {\r\n            bool containedInSpace = (roomId != ElementId.InvalidElementId);\r\n            bool associateToLevel = !containedInSpace && !isChildInContainer;\r\n            wrapper.AddElement(familyInstance, instanceHandle, setter, extraParams, associateToLevel, type);\r\n            if (containedInSpace)\r\n               ExporterCacheManager.SpaceInfoCache.RelateToSpace(roomId, instanceHandle);\r\n         }\r\n         return instanceHandle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the GUID for the IFC entity type handle associated with an element.\r\n      /// </summary>\r\n      /// <param name=\"familyInstance\">The family instance, if it exists.</param>\r\n      /// <param name=\"elementType\">The element type to use for GUID generation if the family instance is null.</param>\r\n      /// <returns>The GUID.</returns>\r\n      public static string GetGUIDForFamilySymbol(FamilyInstance familyInstance, \r\n         ElementType elementType, IFCExportInfoPair exportType)\r\n      {\r\n         // GUID_TODO: Can this be called for doors and windows? If so, we need to check for\r\n         // flipped status.\r\n         Element elementTypeToUse = (familyInstance != null) ?\r\n            ExporterIFCUtils.GetOriginalSymbol(familyInstance) : elementType;\r\n         return GUIDUtil.GenerateIFCGuidFrom(elementTypeToUse, exportType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports IFC type.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// This method will override the default value of the elemId label for certain element types, and then pass it on\r\n      /// to the generic routine.\r\n      /// </remarks>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"type\">The export type.</param>\r\n      /// <param name=\"propertySets\">The property sets.</param>\r\n      /// <param name=\"representationMapList\">List of representations.</param>\r\n      /// <param name=\"instance\">The family instance.</param>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <param name=\"guid\">The global id of the instance, if provided.</param>\r\n      /// <returns>The handle.</returns>\r\n      /// <remarks>If the guid is not provided, it will be generated from the elementType.</remarks>\r\n      public static IFCAnyHandle ExportGenericType(IFCFile file,\r\n         IFCExportInfoPair type,\r\n         HashSet<IFCAnyHandle> propertySets,\r\n         IList<IFCAnyHandle> representationMapList,\r\n         Element instance,\r\n         ElementType elementType,\r\n         string guid)\r\n      {\r\n         IFCAnyHandle typeHandle = null;\r\n\r\n         try\r\n         {\r\n            // Skip export type object that does not have associated IfcTypeObject\r\n            if (type.ExportInstance != IFCEntityType.IfcSite && type.ExportInstance != IFCEntityType.IfcBuildingStorey && type.ExportInstance != IFCEntityType.IfcSystem\r\n                     && type.ExportInstance != IFCEntityType.IfcZone && type.ExportInstance != IFCEntityType.IfcGroup && type.ExportInstance != IFCEntityType.IfcGrid)\r\n            {\r\n               string elemIdToUse = null;\r\n               switch (type.ExportInstance)\r\n               {\r\n                  case IFCEntityType.IfcFurniture:\r\n                  case IFCEntityType.IfcMember:\r\n                  case IFCEntityType.IfcPlate:\r\n                     {\r\n                        elemIdToUse = NamingUtil.GetTagOverride(instance);\r\n                        break;\r\n                     }\r\n               }\r\n\r\n               if (guid == null)\r\n                  guid = GUIDUtil.CreateGUID(elementType);\r\n\r\n               // TODO_GUID: This is just a patch at the moment.  We should fix the callers of\r\n               // this function so that we don't need to do this here.  Furthermore, we should\r\n               // take into account the exportType into the guid generation.\r\n               type = AdjustExportTypeForSchema(type);\r\n\r\n               typeHandle = IFCInstanceExporter.CreateGenericIFCType(type, elementType, guid, file,\r\n                  propertySets, representationMapList);\r\n               if (!string.IsNullOrEmpty(elemIdToUse))\r\n                  IFCAnyHandleUtil.SetAttribute(typeHandle, \"Tag\", elemIdToUse);\r\n            }\r\n         }\r\n         catch\r\n         {\r\n         }\r\n\r\n         return typeHandle;\r\n      }\r\n\r\n      public static IFCExportInfoPair AdjustExportTypeForSchema(IFCExportInfoPair exportType)\r\n      {\r\n         IFCExportInfoPair exportInfo = exportType;\r\n         string ifcEnumType = exportType.PredefinedType;\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            // Handle special cases for upward compatibility\r\n            switch (exportType.ExportType)\r\n            {\r\n               case IFCEntityType.IfcBurnerType:\r\n                  exportInfo.SetByTypeAndPredefinedType(IFCEntityType.IfcGasTerminalType, ifcEnumType);\r\n                  break;\r\n               case IFCEntityType.IfcDoorType:\r\n                  exportInfo.SetByTypeAndPredefinedType(IFCEntityType.IfcDoorStyle, ifcEnumType);\r\n                  break;\r\n               case IFCEntityType.IfcWindowType:\r\n                  exportInfo.SetByTypeAndPredefinedType(IFCEntityType.IfcWindowStyle, ifcEnumType);\r\n                  break;\r\n               case IFCEntityType.UnKnown:\r\n                  {\r\n                     if (exportType.ExportInstance == IFCEntityType.IfcFooting)\r\n                     {\r\n                        exportInfo.SetValue(IFCEntityType.IfcFooting, IFCEntityType.IfcTypeProduct, ifcEnumType);\r\n                     }\r\n                     break;\r\n                  }\r\n            }\r\n         }\r\n         else\r\n         {\r\n            // Handle special cases of backward compatibility\r\n            switch (exportType.ExportType)\r\n            {\r\n               // For compatibility with IFC2x3 and before. IfcGasTerminalType has been removed and IfcBurnerType replaces it in IFC4\r\n               case IFCEntityType.IfcGasTerminalType:\r\n                  exportInfo.SetByTypeAndPredefinedType(IFCEntityType.IfcBurnerType, ifcEnumType);\r\n                  break;\r\n               // For compatibility with IFC2x3 and before. IfcElectricHeaterType has been removed and IfcSpaceHeaterType replaces it in IFC4\r\n               case IFCEntityType.IfcElectricHeaterType:\r\n                  exportInfo.SetByTypeAndPredefinedType(IFCEntityType.IfcSpaceHeaterType, ifcEnumType);\r\n                  break;\r\n               case IFCEntityType.UnKnown:\r\n                  {\r\n                     if (exportType.ExportInstance == IFCEntityType.IfcFooting)\r\n                     {\r\n                        exportInfo.SetByTypeAndPredefinedType(IFCEntityType.IfcFootingType, ifcEnumType);\r\n                     }\r\n                     break;\r\n                  }\r\n            }\r\n         }\r\n\r\n         return exportInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if export type is room related.\r\n      /// </summary>\r\n      /// <param name=\"exportType\">The export type.</param>\r\n      /// <returns>True if the export type is room related, false otherwise.</returns>\r\n      private static bool IsRoomRelated(IFCExportInfoPair exportType)\r\n      {\r\n         return (IsFurnishingElementSubType(exportType) ||\r\n            IsFurnitureSubType(exportType) ||\r\n            IsDistributionControlElementSubType(exportType) ||\r\n            IsDistributionFlowElementSubType(exportType) ||\r\n            IsEnergyConversionDeviceSubType(exportType) ||\r\n            IsFlowFittingSubType(exportType) ||\r\n            IsFlowMovingDeviceSubType(exportType) ||\r\n            IsFlowSegmentSubType(exportType) ||\r\n            IsFlowStorageDeviceSubType(exportType) ||\r\n            IsFlowTerminalSubType(exportType) ||\r\n            IsFlowTreatmentDeviceSubType(exportType) ||\r\n            IsFlowControllerSubType(exportType) ||\r\n            exportType.ExportInstance == IFCEntityType.IfcBuildingElementProxy ||\r\n            exportType.ExportType == IFCEntityType.IfcBuildingElementProxyType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Generic check for the PreDefinedType string from IFC_EXPORT_PREDEFINEDTYPE*.\r\n      /// </summary>\r\n      /// <typeparam name=\"TEnum\">The Enum to verify</typeparam>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"elementType\">The optional element type.</param>\r\n      /// <param name=\"ifcEnumTypeStr\">Enum String if already obtained from IFC_EXPORT_ELEMENT*_AS or IFC_EXPORT_PREDEFINEDTYPE*</param>\r\n      /// <returns>\"NotDefined if the string is not defined as Enum</returns>\r\n      public static TEnum GetPreDefinedType<TEnum>(Element element, Element elementType, string ifcEnumTypeStr) where TEnum : struct\r\n      {\r\n         TEnum enumValue;\r\n         Enum.TryParse(\"NotDefined\", true, out enumValue);\r\n\r\n         string value = ExporterUtil.GetExportTypeFromTypeParameter(element, elementType);\r\n         if (string.IsNullOrEmpty(value))\r\n            value = ifcEnumTypeStr;\r\n\r\n         if (!string.IsNullOrEmpty(value))\r\n            Enum.TryParse(value, true, out enumValue);\r\n         \r\n         return enumValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a list of geometry objects to export from an initial list of solids and meshes, excluding invisible and not exported categories.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"solids\">The list of solids, possibly empty.</param>\r\n      /// <param name=\"meshes\">The list of meshes, possibly empty.</param>\r\n      /// <returns>The combined list of solids and meshes that are visible given category export settings and view visibility settings.</returns>\r\n      public static List<GeometryObject> RemoveInvisibleSolidsAndMeshes(Document doc, ExporterIFC exporterIFC, \r\n         ref IList<Solid> solids, ref IList<Mesh> meshes, \r\n         IList<Solid> excludeSolids = null)\r\n      {\r\n         // Remove excluded solids from the original list of solids\r\n         List<GeometryObject> geomObjectsIn = [.. RemoveExcludedSolid(solids, excludeSolids)];\r\n\r\n         if (meshes != null && meshes.Count > 0)\r\n            geomObjectsIn.AddRange(meshes);\r\n\r\n         if (doc == null)\r\n         {\r\n            return geomObjectsIn;\r\n         }\r\n\r\n         List<GeometryObject> geomObjectsOut = [];\r\n\r\n         View filterView = ExporterCacheManager.ExportOptionsCache.FilterViewForExport;\r\n\r\n         foreach (GeometryObject obj in geomObjectsIn)\r\n         {\r\n            GraphicsStyle gStyle = doc.GetElement(obj.GraphicsStyleId) as GraphicsStyle;\r\n            if (gStyle != null)\r\n            {\r\n               Category graphicsStyleCategory = gStyle.GraphicsStyleCategory;\r\n               if (graphicsStyleCategory != null)\r\n               {\r\n                  bool removeObject = !ElementFilteringUtil.ShouldCategoryBeExported(graphicsStyleCategory, false);\r\n\r\n                  if (removeObject)\r\n                  {\r\n                     if (obj is Solid)\r\n                     {\r\n                        solids.Remove(obj as Solid);\r\n                     }\r\n                     else if (obj is Mesh)\r\n                     {\r\n                        meshes.Remove(obj as Mesh);\r\n                     }\r\n\r\n                     continue;\r\n                  }\r\n               }\r\n            }\r\n            geomObjectsOut.Add(obj);\r\n         }\r\n\r\n         return geomObjectsOut;\r\n      }\r\n\r\n      static IList<Solid> RemoveExcludedSolid(IList<Solid> originalList, IList<Solid> excludeSolids)\r\n      {\r\n         IList<Solid> cleanedUpList = new List<Solid>();\r\n         if (originalList == null)\r\n            return cleanedUpList;\r\n\r\n         if (excludeSolids == null || excludeSolids.Count == 0)\r\n            return originalList;\r\n\r\n         foreach (Solid solid in originalList)\r\n         {\r\n            int itemToRemove = -1;\r\n            for (int ii = 0; ii < excludeSolids.Count; ++ii)\r\n            {\r\n               if (GeometryUtil.SolidsQuickEqualityCompare(solid, excludeSolids[ii]))\r\n               {\r\n                  itemToRemove = ii;\r\n                  break;\r\n               }\r\n            }\r\n            // If there is item to remove identified (means solid is equal to one of the exclude list), skip this solid and remove the equivalent one from the excludeSolids\r\n            if (itemToRemove >= 0)\r\n               excludeSolids.RemoveAt(itemToRemove);\r\n            else\r\n               cleanedUpList.Add(solid);\r\n         }\r\n         return cleanedUpList;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/FamilyTypeInfo.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Utility;\r\nusing Revit.IFC.Common.Utility;\r\nusing System.Linq;\r\nusing System;\r\n\r\n\r\nnamespace Revit.IFC.Export.Exporter\r\n{\r\n   public class FamilyGeometrySummaryData\r\n   {\r\n      public int CurveCount { get; set; } = 0;\r\n      public double CurveLengthTotal { get; set; } = 0.0;\r\n      public int EdgeCount { get; set; } = 0;\r\n      public int FaceCount { get; set; } = 0;\r\n      public double FaceAreaTotal { get; set; } = 0.0;\r\n      public int MeshCount { get; set; } = 0;\r\n      public int MeshNumberOfTriangleTotal { get; set; } = 0;\r\n      public int PointCount { get; set; } = 0;\r\n      public int PolylineCount { get; set; } = 0;\r\n      public int PolylineNumberOfCoordinatesTotal { get; set; } = 0;\r\n      public int ProfileCount { get; set; } = 0;\r\n      public int SolidCount { get; set; } = 0;\r\n      public double SolidVolumeTotal { get; set; } = 0.0;\r\n      public double SolidSurfaceAreaTotal { get; set; } = 0.0;\r\n      public int SolidFacesCountTotal { get; set; } = 0;\r\n      public int SolidEdgesCountTotal { get; set; } = 0;\r\n      public int GeometryInstanceCount { get; set; } = 0;\r\n\r\n      public void Add(FamilyGeometrySummaryData otherData)\r\n      {\r\n         if (otherData == null)\r\n            return;\r\n\r\n         CurveCount += otherData.CurveCount;\r\n         CurveLengthTotal += otherData.CurveLengthTotal;\r\n         EdgeCount += otherData.EdgeCount;\r\n         FaceCount += otherData.FaceCount;\r\n         FaceAreaTotal += otherData.FaceAreaTotal;\r\n         MeshCount += otherData.MeshCount;\r\n         MeshNumberOfTriangleTotal += otherData.MeshNumberOfTriangleTotal;\r\n         PointCount += otherData.PointCount;\r\n         PolylineCount += otherData.PolylineCount;\r\n         PolylineNumberOfCoordinatesTotal += otherData.PolylineNumberOfCoordinatesTotal;\r\n         ProfileCount += otherData.ProfileCount;\r\n         SolidCount += otherData.SolidCount;\r\n         SolidVolumeTotal += otherData.SolidVolumeTotal;\r\n         SolidSurfaceAreaTotal += otherData.SolidSurfaceAreaTotal;\r\n         SolidFacesCountTotal += otherData.SolidFacesCountTotal;\r\n         SolidEdgesCountTotal += otherData.SolidEdgesCountTotal;\r\n         GeometryInstanceCount += otherData.GeometryInstanceCount;\r\n      }\r\n\r\n      public bool Equal(FamilyGeometrySummaryData otherData)\r\n      {\r\n         if (otherData == null)\r\n            return false;\r\n\r\n         if (CurveCount == otherData.CurveCount\r\n            && MathUtil.IsAlmostEqual(CurveLengthTotal, otherData.CurveLengthTotal)\r\n            && EdgeCount == otherData.EdgeCount\r\n            && FaceCount == otherData.FaceCount\r\n            && MathUtil.IsAlmostEqual(FaceAreaTotal, otherData.FaceAreaTotal)\r\n            && MeshCount == otherData.MeshCount\r\n            && MeshNumberOfTriangleTotal == otherData.MeshNumberOfTriangleTotal\r\n            && PointCount == otherData.PointCount\r\n            && PolylineCount == otherData.PolylineCount\r\n            && PolylineNumberOfCoordinatesTotal == otherData.PolylineNumberOfCoordinatesTotal\r\n            && ProfileCount == otherData.ProfileCount\r\n            && SolidCount == otherData.SolidCount\r\n            && MathUtil.IsAlmostEqual(SolidVolumeTotal, otherData.SolidVolumeTotal)\r\n            && MathUtil.IsAlmostEqual(SolidSurfaceAreaTotal, otherData.SolidSurfaceAreaTotal)\r\n            && SolidFacesCountTotal == otherData.SolidFacesCountTotal\r\n            && SolidEdgesCountTotal == otherData.SolidEdgesCountTotal)\r\n               return true;\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// If the geometry element contains only a GeometryInstance\r\n      /// </summary>\r\n      /// <returns>true/false</returns>\r\n      public bool OnlyContainsGeometryInstance()\r\n      {\r\n         if (GeometryInstanceCount > 0\r\n            && CurveCount == 0\r\n            && EdgeCount == 0\r\n            && FaceCount == 0\r\n            && MeshCount == 0\r\n            && PointCount == 0\r\n            && PolylineCount == 0\r\n            && ProfileCount == 0\r\n            && SolidCount == 0)\r\n               return true;\r\n\r\n         return false;\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   ///  An class representing data about a given family element type.\r\n   /// </summary>\r\n   public class FamilyTypeInfo\r\n   {\r\n      /// <summary>\r\n      ///  Identifies if the object represents a valid type info.\r\n      ///  A type info must have either the style, 3d map handle, or 2d map handle set\r\n      /// to a valid value to be valid.\r\n      /// </summary>\r\n      /// <returns>\r\n      /// True if the object is valid, false otherwise. \r\n      /// </returns>\r\n      public bool IsValid()\r\n      {\r\n         return !IFCAnyHandleUtil.IsNullOrHasNoValue(Style) ||\r\n             !IFCAnyHandleUtil.IsNullOrHasNoValue(Map2DHandle) ||\r\n             !IFCAnyHandleUtil.IsNullOrHasNoValue(Map3DHandle);\r\n      }\r\n\r\n      /// <summary>\r\n      /// The associated handle to an IfcTypeProduct for the type.\r\n      /// </summary>\r\n      public IFCAnyHandle Style { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The associated handle to a 2D IfcRepresentationMap for the type.\r\n      /// </summary>\r\n      public IFCAnyHandle Map2DHandle { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The associated handle to a 3D IfcRepresentationMap for the type.\r\n      /// </summary>\r\n      public IFCAnyHandle Map3DHandle { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The material id associated with this type.\r\n      /// </summary>\r\n      public IList<ElementId> MaterialIdList { get; set; } = new List<ElementId>();\r\n\r\n      [Obsolete(\"MaterialIds as HashSet has been replaced with IList<ElementId> MaterialIdList\", false)]\r\n      public HashSet<ElementId> MaterialIds {\r\n         get\r\n         {\r\n            return MaterialIdList.ToHashSet();\r\n         }\r\n         set \r\n         {\r\n            MaterialIdList = value.ToList();\r\n         } \r\n      }\r\n\r\n      /// <summary>  \r\n      /// The transform between the coordinate system of the type and the coordinate system of the \r\n      /// instance's location in the Revit model.\r\n      /// </summary>\r\n      public Transform StyleTransform { get; set; } = Transform.Identity;\r\n\r\n      public IFCExportBodyParams extraParams { get; set; } = new IFCExportBodyParams();\r\n\r\n      public MaterialAndProfile MaterialAndProfile { get; set; } = new MaterialAndProfile();\r\n\r\n      public FamilyGeometrySummaryData FamilyGeometrySummaryData { get; set; } = new FamilyGeometrySummaryData();\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/FootPrintInfo.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   public class FootPrintInfo\r\n   {\r\n      /// <summary>\r\n      /// The extrusion base loop that will be used to generate Footprint information\r\n      /// </summary>\r\n      public IList<CurveLoop> ExtrusionBaseLoops { get; private set; } = new List<CurveLoop>();\r\n\r\n      public Transform ExtrusionBaseLCS { get; private set; }\r\n\r\n      /// <summary>\r\n      /// Set the ExtrusionBase from a CurveLoop\r\n      /// </summary>\r\n      /// <param name=\"curveLoop\">curveloop</param>\r\n      /// <param name=\"lcs\">the LCS</param>\r\n      public FootPrintInfo(CurveLoop curveLoop, Transform lcs = null)\r\n      {\r\n         ExtrusionBaseLoops.Add(curveLoop);\r\n\r\n         if (lcs == null)\r\n            lcs = Transform.Identity;\r\n         ExtrusionBaseLCS = lcs;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set the ExtrusionBase from the curveloops\r\n      /// </summary>\r\n      /// <param name=\"curveLoops\">the list of CurveLoops</param>\r\n      /// <param name=\"lcs\">the LCS to use</param>\r\n      public FootPrintInfo(IList<CurveLoop> curveLoops, Transform lcs = null)\r\n      {\r\n         ExtrusionBaseLoops = curveLoops;\r\n         if (lcs == null)\r\n            lcs = Transform.Identity;\r\n\r\n         ExtrusionBaseLCS = lcs;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set the ExtrusionBase from the ExtrusionAnalyzer\r\n      /// </summary>\r\n      /// <param name=\"extrusionAnalyzer\">Extrusion Analyzer</param>\r\n      /// <param name=\"lcs\">the LCS</param>\r\n      /// <param name=\"baseLoopOffset\">offset</param>\r\n      public FootPrintInfo(ExtrusionAnalyzer extrusionAnalyzer, Transform lcs = null, XYZ baseLoopOffset = null)\r\n      {\r\n         Face extrusionBase = extrusionAnalyzer.GetExtrusionBase();\r\n         IList<GeometryUtil.FaceBoundaryType> boundaryTypes;\r\n\r\n         if (lcs == null)\r\n            lcs = Transform.Identity;\r\n\r\n         if (baseLoopOffset == null)\r\n            baseLoopOffset = XYZ.Zero;\r\n\r\n         IList<CurveLoop> extrusionBoundaryLoops =\r\n                GeometryUtil.GetFaceBoundaries(extrusionBase, baseLoopOffset, out boundaryTypes);\r\n         if (extrusionBoundaryLoops == null || extrusionBoundaryLoops.Count == 0 || extrusionBoundaryLoops[0] == null)\r\n            return;\r\n\r\n         // Move base plane to start parameter location.\r\n         Plane extrusionBasePlane = null;\r\n         try\r\n         {\r\n            extrusionBasePlane = extrusionBoundaryLoops[0].GetPlane();\r\n         }\r\n         catch\r\n         {\r\n            return;\r\n         }\r\n\r\n         // Only the first CurveLoop will be used as the foorprint\r\n         ExtrusionBaseLoops = extrusionBoundaryLoops;\r\n         ExtrusionBaseLCS = lcs;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create Footprint shapre representation from already initialized ExtrusionBaseLoops data\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">the ExporterIFC</param>\r\n      /// <returns>the footprint shape representation</returns>\r\n      public IFCAnyHandle CreateFootprintShapeRepresentation(ExporterIFC exporterIFC)\r\n      {\r\n         if (ExtrusionBaseLoops == null || ExtrusionBaseLoops.Count == 0 || ExtrusionBaseLoops[0] == null)\r\n            return null;\r\n\r\n         if (ExtrusionBaseLCS == null)\r\n            ExtrusionBaseLCS = Transform.Identity;\r\n\r\n         ISet<IFCAnyHandle> repItems = new HashSet<IFCAnyHandle>();\r\n         foreach (CurveLoop extrusionBoundaryLoop in ExtrusionBaseLoops)\r\n         {\r\n            repItems.AddIfNotNull(GeometryUtil.CreateIFCCurveFromCurveLoop(exporterIFC,\r\n               extrusionBoundaryLoop, ExtrusionBaseLCS, XYZ.BasisZ));\r\n         }\r\n\r\n         IFCAnyHandle footprintShapeRep = null;\r\n         if (repItems.Count > 0)\r\n         {\r\n            IFCAnyHandle contextOfItemsFootprint = exporterIFC.Get3DContextHandle(\"FootPrint\");\r\n            footprintShapeRep = RepresentationUtil.CreateBaseShapeRepresentation(exporterIFC, contextOfItemsFootprint, \r\n               \"FootPrint\", \"Curve2D\", repItems);\r\n         }\r\n\r\n         return footprintShapeRep;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/GUIDOptions.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// A class that controls how IFC GUIDs are generated on export.\r\n   /// </summary>\r\n   public class GUIDOptions\r\n   {\r\n      /// <summary>\r\n      /// public default constructor.\r\n      /// </summary>\r\n      public GUIDOptions()\r\n      {\r\n         AllowGUIDParameterOverride = true;\r\n         Use2009BuildingStoreyGUIDs = false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines whether to use the \"IFCGuid\" parameter, if set, to generate the IFC GUID on export.\r\n      /// 1. true: Use the \"IFCGuid\" parameter, if set. (default)\r\n      /// 2. false: Ignore the \"IFCGuid\" parameter; always use the Revit API DWF/IFC GUID creation function.\r\n      /// </summary>\r\n      public bool AllowGUIDParameterOverride { get; set; }\r\n\r\n      /// <summary>\r\n      /// Whether or not to use R2009 GUIDs for exporting Levels.  If this option is set, export will write the old\r\n      /// GUID value into an IfcGUID parameter for the Level, requiring the user to save the file if they want to\r\n      /// ensure that the old GUID is used permanently.\r\n      /// To set this to true, add the environment variable Assign2009GUIDToBuildingStoriesOnIFCExport and set the value to 1.\r\n      /// </summary>\r\n      public bool Use2009BuildingStoreyGUIDs { get; set; }\r\n\r\n      /// <summary>\r\n      /// Whether or not to store the IFC GUIDs generated during export.  The user is required to save the file if they want to\r\n      /// ensure that the GUID parameter is used permanently.\r\n      /// </summary>\r\n      public bool StoreIFCGUID { get; set; }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/GUIDUtil.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Export.Toolkit;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides static methods for GUID related manipulations.\r\n   /// </summary>\r\n   public class GUIDUtil\r\n   {\r\n      /// <summary>\r\n      /// Contains the information necessary to generate an IFC GUID.\r\n      /// </summary>\r\n      public class GUIDString\r\n      {\r\n         /// <summary>\r\n         /// The key used to generate the IFC GUID value.\r\n         /// </summary>\r\n         public string Key { get; private set; } = null;\r\n\r\n         /// <summary>\r\n         /// An enum representating the meaning of the string contained in GUIDString.\r\n         /// </summary>\r\n         public enum KeyType\r\n         {\r\n            /// <summary>\r\n            /// An invalid key.\r\n            /// </summary>\r\n            Unknown,\r\n            /// <summary>\r\n            /// A hash value, that must be converted into an IFC GUID.\r\n            /// </summary>\r\n            Hash,\r\n            /// <summary>\r\n            /// An already valid IFC GUID value.\r\n            /// </summary>\r\n            IFCGUID\r\n         };\r\n\r\n         /// <summary>\r\n         /// The meaning of the string contained in GUIDString.\r\n         /// </summary>\r\n         public KeyType GUIDType { get; protected set; } = KeyType.Unknown;\r\n\r\n         public GUIDString(string key, KeyType guidType)\r\n         {\r\n            Key = key;\r\n            GUIDType = guidType;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if a GUID string is properly formatted as an IFC GUID.\r\n      /// </summary>\r\n      /// <param name=\"guid\">The GUID value to check.</param>\r\n      /// <returns>True if it qualifies as a valid IFC GUID.</returns>\r\n      private static bool IsValidIFCGUID(string guid)\r\n      {\r\n         if ((guid?.Length ?? 0) != 22)\r\n            return false;\r\n\r\n         // The first character is limited to { 0, 1, 2, 3 }.\r\n         if (guid[0] < '0' || guid[0] > '3')\r\n            return false;\r\n\r\n         // Redundant check for the first character, but it's a fairly\r\n         // inexpensive check.\r\n         foreach (char guidChar in guid)\r\n         {\r\n            if ((guidChar >= '0' && guidChar <= '9') ||\r\n                (guidChar >= 'A' && guidChar <= 'Z') ||\r\n                (guidChar >= 'a' && guidChar <= 'z') ||\r\n                (guidChar == '_' || guidChar == '$'))\r\n               continue;\r\n\r\n            return false;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a GUIDString from an IFCEntityType, an object name and a handle.\r\n      /// </summary>\r\n      /// <param name=\"type\">The IFCEntityType.</param>\r\n      /// <param name=\"name\">The object name.</param>\r\n      /// <param name=\"handle\">An entity handle.</param>\r\n      /// <returns>A GUIDString containing a hash value that can be converted to an IFC GUID.</returns>\r\n      public static GUIDString CreateGUIDString(IFCEntityType type, string name, IFCAnyHandle handle)\r\n      {\r\n         string hashKey = type.ToString() + \":\" + name + \":\" + ExporterUtil.GetGlobalId(handle);\r\n         return new GUIDString(hashKey, GUIDString.KeyType.Hash);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a GUIDString for the project, building, or site.\r\n      /// </summary>\r\n      /// <param name=\"document\">The document.</param>\r\n      /// <param name=\"guidType\">An enum choosing project, building, or site.</param>\r\n      /// <returns>A GUIDString containing an IFC GUID.</returns>\r\n      public static GUIDString CreateGUIDString(Document document, ProjectLevelGUIDType guidType)\r\n      {\r\n         ElementId projectLevelElementId = new ElementId((long)guidType);\r\n         Guid guid = ExportUtils.GetExportId(document, projectLevelElementId);\r\n         return new GUIDString(ConvertToIFCGuid(guid), GUIDString.KeyType.IFCGUID);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a GUIDString from a uniquely indexed object associated with two elements.\r\n      /// </summary>\r\n      /// <param name=\"index\">The index, unique for this element pair.</param>\r\n      /// <param name=\"firstElement\">The first element.</param>\r\n      /// <param name=\"secondElement\">The second element.</param>\r\n      /// <returns>A GUIDString containing a hash value that can be converted to an IFC GUID.</returns>\r\n      public static GUIDString CreateGUIDString(string index, Element firstElement, Element secondElement)\r\n      {\r\n         string hashKey = index + CreateSimpleGUID(firstElement) + CreateSimpleGUID(secondElement);\r\n         return new GUIDString(hashKey, GUIDString.KeyType.Hash);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a GUIDString from a uniquely indexed object associated with an elements.\r\n      /// </summary>\r\n      /// <param name=\"element\">The first element.</param>\r\n      /// <param name=\"index\">The index, unique for this element.</param>\r\n      /// <returns>A GUIDString containing a hash value that can be converted to an IFC GUID.</returns>\r\n      public static GUIDString CreateGUIDString(Element element, string index)\r\n      {\r\n         string hashKey = CreateSimpleGUID(element) + \"Sub-element:\" + index;\r\n         return new GUIDString(hashKey, GUIDString.KeyType.Hash);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a GUIDString from an element parameter, by name or id.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"parameterName\">The optional name of the parameter.</param>\r\n      /// <param name=\"parameterId\">The optional parameter id of the parameter.</param>\r\n      /// <returns>A GUIDString containing an IFC GUID if found.</returns>\r\n      private static GUIDString CreateGUIDString(Element element, string parameterName, BuiltInParameter parameterId)\r\n      {\r\n         string paramValue = null;\r\n         if (parameterName != null)\r\n            ParameterUtil.GetStringValueFromElement(element, parameterName, out paramValue);\r\n         if (!IsValidIFCGUID(paramValue) && parameterId != BuiltInParameter.INVALID)\r\n            ParameterUtil.GetStringValueFromElement(element, parameterId, out paramValue);\r\n         if (!IsValidIFCGUID(paramValue) || ExporterCacheManager.GUIDCache.Contains(paramValue))\r\n            return new GUIDString(string.Empty, GUIDString.KeyType.Unknown);\r\n         return new GUIDString(paramValue, GUIDString.KeyType.IFCGUID);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a GUIDString from an IFCEntityType uniquely associated with two IFCAnyHandles.\r\n      /// </summary>\r\n      /// <param name=\"type\">The entity type.</param>\r\n      /// <param name=\"firstHandle\">The first handle.</param>\r\n      /// <param name=\"secondHandle\">The second handle.</param>\r\n      /// <returns>A GUIDString containing a hash value that can be converted to an IFC GUID.</returns>\r\n      public static GUIDString CreateGUIDString(IFCEntityType type, IFCAnyHandle firstHandle, IFCAnyHandle secondHandle)\r\n      {\r\n         string hashKey = type.ToString() + \":\" + ExporterUtil.GetGlobalId(firstHandle) +\r\n            ExporterUtil.GetGlobalId(secondHandle);\r\n         return new GUIDString(hashKey, GUIDString.KeyType.Hash);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a GUIDString from an IFCEntityType uniquely associated with an IFCAnyHandle.\r\n      /// </summary>\r\n      /// <param name=\"type\">The entity type.</param>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <returns>A GUIDString containing a hash value that can be converted to an IFC GUID.</returns>\r\n      public static GUIDString CreateGUIDString(IFCEntityType type, IFCAnyHandle handle)\r\n      {\r\n         string hashKey = type.ToString() + \":\" + ExporterUtil.GetGlobalId(handle);\r\n         return new GUIDString(hashKey, GUIDString.KeyType.Hash);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a GUIDString from a Level element.\r\n      /// </summary>\r\n      /// <param name=\"level\">The level.</param>\r\n      /// <returns>A GUIDString containing an IFC GUID.</returns>\r\n      public static GUIDString CreateLevel(Level level)\r\n      {\r\n         return new GUIDString(ExporterIFCUtils.CreateAlternateGUID(level), GUIDString.KeyType.IFCGUID);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a GUIDString from an element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>A GUIDString containing an IFC GUID.</returns>\r\n      public static GUIDString CreateGUIDString(Element element)\r\n      {\r\n         if (element == null)\r\n            return new GUIDString(string.Empty, GUIDString.KeyType.Unknown);\r\n\r\n         bool shouldStore;\r\n         BuiltInParameter parameterName = (element is ElementType) ? BuiltInParameter.IFC_TYPE_GUID : BuiltInParameter.IFC_GUID;\r\n\r\n         string ifcGUID = CreateGUIDBase(element, parameterName, out shouldStore);\r\n         if (shouldStore && ExporterCacheManager.ExportOptionsCache.GUIDOptions.StoreIFCGUID ||\r\n             (ExporterCacheManager.ExportOptionsCache.GUIDOptions.Use2009BuildingStoreyGUIDs && element is Level))\r\n            ExporterCacheManager.GUIDsToStoreCache[(element.Id, parameterName)] = ifcGUID;\r\n\r\n         return new GUIDString(ifcGUID, GUIDString.KeyType.IFCGUID);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a GUIDString from an element and an index unique to that element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"index\">The index unique to that element.</param>\r\n      /// <returns>A GUIDString containing an IFC GUID.</returns>\r\n      public static GUIDString CreateGUIDString(Element element, int index)\r\n      {\r\n         return new GUIDString(ExporterIFCUtils.CreateSubElementGUID(element, index), GUIDString.KeyType.IFCGUID);\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Generates IFC GUID from an IFC entity type and a string unique to this project.\r\n      /// </summary>\r\n      /// <param name=\"type\">The ifc entity type.</param>\r\n      /// <param name=\"uniqueKey\">The key unique to this project.</param>\r\n      /// <returns>A GUIDString containing a hash value that can be converted to an IFC GUID.</returns>\r\n      public static GUIDString CreateGUIDString(IFCEntityType type, string uniqueKey)\r\n      {\r\n         string hashKey = ExporterUtil.GetGlobalId(ExporterCacheManager.ProjectHandle) +\r\n            type.ToString() + \":\" + uniqueKey;\r\n         return new GUIDString(hashKey, GUIDString.KeyType.Hash);\r\n      }\r\n\r\n      private static GUIDString CreateInternal(bool useInstanceGeometry,\r\n      Element instanceOrSymbol, IFCExportInfoPair exportInfoPair, bool isFlipped,\r\n      ElementId levelId, int? index, bool useEntityType, ElementId materialId, bool inAssembly)\r\n      {\r\n         int subElementIndex = ExporterStateManager.GetCurrentRangeIndex();\r\n         bool hasLevelId = (levelId != ElementId.InvalidElementId);\r\n         bool hasMaterialId = (materialId != ElementId.InvalidElementId);\r\n\r\n         // Legacy GUIDs.\r\n         if (useInstanceGeometry && !useEntityType && !hasLevelId && !hasMaterialId)\r\n         {\r\n            if (subElementIndex == 0)\r\n               return CreateGUIDString(instanceOrSymbol, (int)IFCFamilyInstanceSubElements.InstanceAsType);\r\n            if (subElementIndex <= ExporterStateManager.RangeIndexSetter.GetMaxStableGUIDs())\r\n               return CreateGUIDString(instanceOrSymbol, (int)IFCGenericSubElements.SplitTypeStart + subElementIndex - 1);\r\n         }\r\n\r\n         // Cases where the default GUID isn't good enough.\r\n         string hash = null;\r\n         if (exportInfoPair.ExportInstance == IFCEntityType.IfcDoor ||\r\n            exportInfoPair.ExportInstance == IFCEntityType.IfcWindow)\r\n         {\r\n            hash = \"Flipped: \" + isFlipped.ToString();\r\n         }\r\n         else if (useInstanceGeometry || useEntityType || (subElementIndex > 0) || hasLevelId || hasMaterialId)\r\n         {\r\n            hash = string.Empty;\r\n         }\r\n\r\n         if (hash != null)\r\n         {\r\n            if (subElementIndex > 0)\r\n               hash += \" Index: \" + subElementIndex.ToString();\r\n\r\n            if (useEntityType)\r\n            {\r\n               IFCEntityType entityType =\r\n                  useInstanceGeometry ? exportInfoPair.ExportInstance : exportInfoPair.ExportType;\r\n               string predefinedType = exportInfoPair.PredefinedType ?? string.Empty;\r\n               hash += \" Entity: \" + entityType.ToString() + \":\" + predefinedType;\r\n            }\r\n\r\n            if (hasLevelId)\r\n               hash += \" Level: \" + levelId.ToString();\r\n\r\n            if (index.HasValue)\r\n               hash += \" Copy: \" + index.ToString();\r\n\r\n            if (hasMaterialId)\r\n               hash += \" Material: \" + materialId.ToString();\r\n\r\n            hash += \" InAssembly: \" + inAssembly.ToString();\r\n\r\n            return CreateGUIDString(instanceOrSymbol, hash);\r\n         }\r\n\r\n         return CreateGUIDString(instanceOrSymbol);\r\n      }\r\n\r\n      public static GUIDString CreateGUIDString(bool useInstanceGeometry, Element instanceOrSymbol,\r\n      IFCExportInfoPair exportInfoPair, TypeObjectKey typeKey, int? index)\r\n      {\r\n         bool isFlipped = typeKey?.IsFlipped ?? false;\r\n         ElementId levelId = typeKey?.LevelId ?? ElementId.InvalidElementId;\r\n         ElementId materialId = typeKey?.MaterialId ?? ElementId.InvalidElementId;\r\n         bool inAssembly = typeKey?.InAssembly ?? false;\r\n\r\n         GUIDString guidString = CreateInternal(useInstanceGeometry, instanceOrSymbol,\r\n            exportInfoPair, isFlipped, levelId, index, false, materialId, inAssembly);\r\n\r\n         // We want to preserve existing GUIDs, so we will only use entityType if there is a\r\n         // conflict.\r\n         if (!ExporterCacheManager.GUIDCache.Contains(GenerateIFCGuidFrom(guidString, false)))\r\n            return guidString;\r\n\r\n         return CreateInternal(useInstanceGeometry, instanceOrSymbol,\r\n               exportInfoPair, isFlipped, levelId, index, true, materialId, inAssembly);\r\n      }\r\n\r\n      /// <summary>\r\n      /// An enum that contains fake element ids corresponding to the IfcProject, IfcSite, and IfcBuilding entities.\r\n      /// </summary>\r\n      /// <remarks>The numbers below allow for the generation of stable GUIDs for these entities, that are\r\n      /// consistent with previous versions of the exporter.</remarks>\r\n      public enum ProjectLevelGUIDType\r\n      {\r\n         Building = -15,\r\n         Project = -16,\r\n         Site = -14\r\n      };\r\n\r\n      static string s_ConversionTable_2X = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_$\";\r\n\r\n      private static System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();\r\n\r\n      private static string ConvertToIFCGuid(Guid guid)\r\n      {\r\n         byte[] byteArray = guid.ToByteArray();\r\n         ulong[] num = new ulong[6];\r\n         num[0] = byteArray[3];\r\n         num[1] = byteArray[2] * (ulong)65536 + byteArray[1] * (ulong)256 + byteArray[0];\r\n         num[2] = byteArray[5] * (ulong)65536 + byteArray[4] * (ulong)256 + byteArray[7];\r\n         num[3] = byteArray[6] * (ulong)65536 + byteArray[8] * (ulong)256 + byteArray[9];\r\n         num[4] = byteArray[10] * (ulong)65536 + byteArray[11] * (ulong)256 + byteArray[12];\r\n         num[5] = byteArray[13] * (ulong)65536 + byteArray[14] * (ulong)256 + byteArray[15];\r\n\r\n         char[] buf = new char[22];\r\n         int offset = 0;\r\n\r\n         for (int ii = 0; ii < 6; ii++)\r\n         {\r\n            int len = (ii == 0) ? 2 : 4;\r\n            for (int jj = 0; jj < len; jj++)\r\n            {\r\n               buf[offset + len - jj - 1] = s_ConversionTable_2X[(int)(num[ii] % 64)];\r\n               num[ii] /= 64;\r\n            }\r\n            offset += len;\r\n         }\r\n\r\n         return new string(buf);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a Project, Site, or Building GUID.  If a shared parameter is set with a valid IFC GUID value,\r\n      /// that value will override the default one.\r\n      /// </summary>\r\n      /// <param name=\"document\">The document.</param>\r\n      /// <param name=\"guidType\">The GUID being created.</param>\r\n      /// <returns>The IFC GUID value.</returns>\r\n      /// <remarks>For Sites, the user should only use this routine if there is no Site element in the file.  Otherwise, they\r\n      /// should use CreateSiteGUID below, which takes an Element pointer.</remarks>\r\n      public static string CreateProjectLevelGUID(Document document, ProjectLevelGUIDType guidType)\r\n      {\r\n         string parameterName = \"Ifc\" + guidType.ToString() + \" GUID\";\r\n         ProjectInfo projectInfo = document.ProjectInformation;\r\n\r\n         BuiltInParameter parameterId = BuiltInParameter.INVALID;\r\n         switch (guidType)\r\n         {\r\n            case ProjectLevelGUIDType.Building:\r\n               parameterId = BuiltInParameter.IFC_BUILDING_GUID;\r\n               break;\r\n            case ProjectLevelGUIDType.Project:\r\n               parameterId = BuiltInParameter.IFC_PROJECT_GUID;\r\n               break;\r\n            case ProjectLevelGUIDType.Site:\r\n               parameterId = BuiltInParameter.IFC_SITE_GUID;\r\n               break;\r\n            default:\r\n               // This should eventually log an error.\r\n               return null;\r\n         }\r\n\r\n         if (projectInfo != null)\r\n         {\r\n            GUIDString guidString = CreateGUIDString(projectInfo, parameterName, parameterId);\r\n            if (guidString.GUIDType != GUIDString.KeyType.Unknown)\r\n               return GenerateIFCGuidFrom(guidString);\r\n         }\r\n\r\n         string ifcGUID = GenerateIFCGuidFrom(CreateGUIDString(document, guidType));\r\n\r\n         if ((projectInfo != null) && ExporterCacheManager.ExportOptionsCache.GUIDOptions.StoreIFCGUID)\r\n         {\r\n            if (parameterId != BuiltInParameter.INVALID)\r\n               ExporterCacheManager.GUIDsToStoreCache[(projectInfo.Id, parameterId)] = ifcGUID;\r\n         }\r\n         return ifcGUID;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a Site GUID for a Site element.  If \"IfcSite GUID\" is set to a valid IFC GUID\r\n      /// in the site element, that value will override any value stored in ProjectInformation.\r\n      /// </summary>\r\n      /// <param name=\"document\">The document pointer.</param>\r\n      /// <param name=\"element\">The Site element.</param>\r\n      /// <returns>The GUID as a string.</returns>\r\n      public static string CreateSiteGUID(Document document, Element element)\r\n      {\r\n         if (element != null)\r\n         {\r\n            GUIDString guidString = CreateGUIDString(element, \"IfcSiteGUID\", BuiltInParameter.INVALID);\r\n            if (guidString.GUIDType != GUIDString.KeyType.Unknown)\r\n               return GenerateIFCGuidFrom(guidString);\r\n         }\r\n\r\n         return CreateProjectLevelGUID(document, ProjectLevelGUIDType.Site);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the GUID for a storey level, depending on whether we are using R2009 GUIDs or current GUIDs.\r\n      /// </summary>\r\n      /// <param name=\"level\">The level.</param>\r\n      /// <returns>The GUID.</returns>\r\n      public static string GetLevelGUID(Level level)\r\n      {\r\n         if (!ExporterCacheManager.ExportOptionsCache.GUIDOptions.Use2009BuildingStoreyGUIDs)\r\n         {\r\n            string ifcGUID = GenerateIFCGuidFrom(CreateLevel(level));\r\n            if (ExporterCacheManager.ExportOptionsCache.GUIDOptions.StoreIFCGUID)\r\n               ExporterCacheManager.GUIDsToStoreCache[(level.Id, BuiltInParameter.IFC_GUID)] = ifcGUID;\r\n            return ifcGUID;\r\n         }\r\n\r\n         return CreateGUID(level);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a sub-element GUID for a given element, or a random GUID if element is null, or subindex is nonpositive.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element - null allowed.</param>\r\n      /// <param name=\"subIndex\">The index value - should be greater than 0.</param>\r\n      /// <returns>The GUID.</returns>\r\n      public static string CreateSubElementGUID(Element element, int subIndex)\r\n      {\r\n         if (element == null || subIndex <= 0)\r\n            return CreateGUID();\r\n         return GenerateIFCGuidFrom(CreateGUIDString(element, subIndex));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a unique, consistent GUID for a family instance or symbol.\r\n      /// </summary>\r\n      /// <param name=\"useInstanceGeometry\">True if we are using instance geometry.</param>\r\n      /// <param name=\"instanceOrSymbol\">The family instance or symbol.</param>\r\n      /// <param name=\"exportInfoPair\">The entity type.</param>\r\n      /// <param name=\"typeKey\">Extra information about the use of this element.</param>\r\n      /// <param name=\"index\">The optional index, if we are creating multiple instances from this type.</param>\r\n      /// <returns>The GUID.</returns>\r\n      public static string GenerateIFCGuidFrom(bool useInstanceGeometry, Element instanceOrSymbol,\r\n         IFCExportInfoPair exportInfoPair, TypeObjectKey typeKey, int? index)\r\n      {\r\n         return GenerateIFCGuidFrom(CreateGUIDString(useInstanceGeometry, instanceOrSymbol,\r\n            exportInfoPair, typeKey, index));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a unique, consistent GUID for a family instance or symbol.\r\n      /// </summary>\r\n      /// <param name=\"instanceOrSymbol\">The family instance or symbol.</param>\r\n      /// <param name=\"exportInfoPair\">The entity type information.</param>\r\n      /// <returns>The GUID.</returns>\r\n      public static string GenerateIFCGuidFrom(Element instanceOrSymbol,\r\n         IFCExportInfoPair exportInfoPair)\r\n      {\r\n         return GenerateIFCGuidFrom(CreateGUIDString(false, instanceOrSymbol,\r\n            exportInfoPair, null, null));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Generates IFC GUID from a GUIDString.\r\n      /// </summary>\r\n      /// <param name=\"keyGenerator\">The GUIDString, generated from handle information.</param>\r\n      /// <returns>String in IFC GUID format. Uniqueness is highly likely, but not guaranteed even\r\n      /// if input GUIDString has a unique string.</returns>\r\n      public static string GenerateIFCGuidFrom(GUIDString keyGenerator, bool useLinkGUID = true)\r\n      {\r\n         GUIDString.KeyType keyType = keyGenerator.GUIDType;\r\n         string key = keyGenerator.Key;\r\n\r\n         if (useLinkGUID && ExporterCacheManager.BaseLinkedDocumentGUID != null)\r\n         {\r\n            keyType = GUIDString.KeyType.Hash;\r\n            key = ExporterCacheManager.BaseLinkedDocumentGUID + \":\" + key;\r\n         }\r\n\r\n         switch (keyType)\r\n         {\r\n            case GUIDString.KeyType.IFCGUID:\r\n               return key;\r\n            case GUIDString.KeyType.Hash:\r\n               byte[] hash = md5.ComputeHash(Encoding.UTF8.GetBytes(key));\r\n               return ConvertToIFCGuid(new Guid(hash));\r\n            default:\r\n               return CreateGUID();\r\n         }\r\n      }\r\n\r\n      private static string CreateSimpleGUID(Element element)\r\n      {\r\n         Guid guid = ExportUtils.GetExportId(element.Document, element.Id);\r\n         return ConvertToIFCGuid(guid);\r\n      }\r\n\r\n      private static string CreateGUIDBase(Element element, BuiltInParameter parameterId, out bool shouldStore)\r\n      {\r\n         shouldStore = CanStoreGUID(element);\r\n\r\n         // Avoid getting into an object if the object is part of the Group. It may cause regrenerate that invalidate other ElementIds\r\n         if (shouldStore && ExporterCacheManager.ExportOptionsCache.GUIDOptions.AllowGUIDParameterOverride)\r\n         {\r\n            GUIDString guidString = CreateGUIDString(element, null, parameterId);\r\n            if (guidString.GUIDType != GUIDString.KeyType.Unknown)\r\n            {\r\n               return GenerateIFCGuidFrom(guidString);\r\n            }\r\n         }\r\n\r\n         return CreateSimpleGUID(element);\r\n      }\r\n\r\n      private static bool CanStoreGUID(Element element)\r\n      {\r\n         bool isCurtainElement = false;\r\n\r\n         // Cannot set IfcGUID to curtain wall because doing so will potentially invalidate other element/delete the insert (even in interactive mode)\r\n         if (element is Wall)\r\n         {\r\n            Wall wallElem = element as Wall;\r\n            isCurtainElement = wallElem.CurtainGrid != null;\r\n         }\r\n         return !isCurtainElement;\r\n      }\r\n\r\n      public static string RegisterGUID(Element element, string guid)\r\n      {\r\n         // We want to make sure that we don't write out duplicate GUIDs to the file.  As such, we will check the GUID against\r\n         // already created guids, and export a random GUID if necessary.\r\n         // TODO: log message to user.\r\n         if (ExporterCacheManager.GUIDCache.Contains(guid))\r\n         {\r\n            guid = CreateGUID();\r\n            if ((element != null) &&\r\n               CanStoreGUID(element) &&\r\n               ExporterCacheManager.ExportOptionsCache.GUIDOptions.AllowGUIDParameterOverride)\r\n            {\r\n               BuiltInParameter parameterName = (element is ElementType) ? BuiltInParameter.IFC_TYPE_GUID : BuiltInParameter.IFC_GUID;\r\n               ExporterCacheManager.GUIDsToStoreCache[(element.Id, parameterName)] = guid;\r\n            }\r\n         }\r\n         else\r\n            ExporterCacheManager.GUIDCache.Add(guid);\r\n\r\n         return guid;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Thin wrapper for the CreateGUID() Revit API function.\r\n      /// </summary>\r\n      /// <returns>A random GUID.</returns>\r\n      private static string CreateGUID()\r\n      {\r\n         ExporterCacheManager.Document.Application.WriteJournalComment(\"IFC_Duplicate_GUID: \" + Environment.StackTrace, false);\r\n         return ExporterIFCUtils.CreateGUID();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Thin wrapper for the CreateGUID(element) Revit API function.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>A consistent GUID for the element.</returns>\r\n      public static string CreateGUID(Element element)\r\n      {\r\n         return GenerateIFCGuidFrom(CreateGUIDString(element));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns true if elementGUID == CreateGUID(element).\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"elementGUID\">The GUID to check</param>\r\n      /// <returns>True if elementGUID == CreateGUID(element)</returns>\r\n      public static bool IsGUIDFor(Element element, string elementGUID)\r\n      {\r\n         BuiltInParameter parameterName = (element is ElementType) ? BuiltInParameter.IFC_TYPE_GUID : BuiltInParameter.IFC_GUID;\r\n\r\n         return (string.Compare(elementGUID, CreateGUIDBase(element, parameterName, out _)) == 0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the IFC GUID for the element, either from the parameter or as a simple guid.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The GUID.</returns>\r\n      /// <remarks>This is intended to be used to get a guid associated with an element; it\r\n      /// does not guarantee uniqueness.</remarks>\r\n      public static string GetSimpleElementIFCGUID(Element element)\r\n      {\r\n         BuiltInParameter parameterId = (element is ElementType) ? BuiltInParameter.IFC_TYPE_GUID : BuiltInParameter.IFC_GUID;\r\n         GUIDString guidString = CreateGUIDString(element, null, parameterId);\r\n         if (guidString.GUIDType == GUIDString.KeyType.Unknown)\r\n            return CreateSimpleGUID(element);\r\n         return GenerateIFCGuidFrom(guidString, false);\r\n      }\r\n\r\n      static public bool IsGUIDFor(Element element, Element openingElement, IFCRange range, int openingIndex, int solidIndex, string elementGUID)\r\n      {\r\n         BuiltInParameter parameterName = (element is ElementType) ? BuiltInParameter.IFC_TYPE_GUID : BuiltInParameter.IFC_GUID;\r\n\r\n         return (string.Compare(elementGUID, OpeningUtil.CreateOpeningGUID(element, openingElement, range, openingIndex, solidIndex)) == 0);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/GeometryUtil.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides static methods for geometry related manipulations.\r\n   /// </summary>\r\n   public class GeometryUtil\r\n   {\r\n      /// <summary>\r\n      /// An enum used by several geometric routines to determine the dimensionality\r\n      /// of created geometry.\r\n      /// </summary>\r\n\r\n      public enum Dimension\r\n      {\r\n         Dim2D,\r\n         Dim3D\r\n      };\r\n\r\n      /// <summary>\r\n      /// An enum used in CreateIFCCurveFromRevitCurve to determine how to create\r\n      /// the Revit curve in IFC entities.\r\n      /// </summary>\r\n      public enum TrimCurvePreference\r\n      {\r\n         BaseCurve,              // Do not trim the curve.\r\n         TrimmedCurve,           // Use a base curve and trim the curve\r\n         UsePolyLineOrTrim,      // Use a polyline for a bounded line, otherwise trim.\r\n         Use2DPolyLineOrTrim,    // Use a 2D polyline for a bounded line, otherwise trim a 2D curve.\r\n      }\r\n      /// <summary>\r\n      /// The comparer for comparing XYZ.\r\n      /// </summary>\r\n      public struct XYZComparer : IComparer<XYZ>\r\n      {\r\n         /// <summary>\r\n         /// Check if 2 XYZ values are almost equal, such that for each component n of x and y, |x[n]-y[n]| < MathUtil.Eps().\r\n         /// </summary>\r\n         /// <param name=\"x\">The first XYZ value.</param>\r\n         /// <param name=\"y\">The second XYZ value.</param>\r\n         /// <returns>-1 if x is less than y, 1 if x is greater than y, and 0 if x is almost equal to y.</returns>\r\n         public int Compare(XYZ x, XYZ y)\r\n         {\r\n            double eps = MathUtil.Eps();\r\n            if (x.X < y.X - eps)\r\n               return -1;\r\n            if (x.X > y.X + eps)\r\n               return 1;\r\n            if (x.Y < y.Y - eps)\r\n               return -1;\r\n            if (x.Y > y.Y + eps)\r\n               return 1;\r\n            if (x.Z < y.Z - eps)\r\n               return -1;\r\n            if (x.Z > y.Z + eps)\r\n               return 1;\r\n            return 0;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The EqualityComparer for comparing EdgeEndPoint.\r\n      /// </summary>\r\n      public class EdgeEndPointComparer : EqualityComparer<EdgeEndPoint>\r\n      {\r\n         /// <summary>\r\n         /// Check if two EdgeEndPoints are equal by checking that IDs of corresponding edges and indices of corresponding endpoints are equal.\r\n         /// </summary>\r\n         /// <param name=\"edgePnt1\">The first EdgeEndPoint value.</param>\r\n         /// <param name=\"edgePnt2\">The second EdgeEndPoint value.</param>\r\n         /// <returns>True if both EdgeEndPoint refer to the same Edge and the same endpoint of that Edge</returns>\r\n         public override bool Equals(EdgeEndPoint edgePnt1, EdgeEndPoint edgePnt2)\r\n         {\r\n            return edgePnt1.Edge.Id == edgePnt2.Edge.Id && edgePnt1.Index == edgePnt2.Index;\r\n         }\r\n\r\n         /// <summary>\r\n         /// Calculate hash code for EdgeEndPoint.\r\n         /// </summary>\r\n         /// <param name=\"edgePnt\">The EdgeEndPoint for which the hash code will be calculated.</param>\r\n         /// <returns>Hash code of edgePnt as a combination of hash codes of its corresponding Edge ID and endpoint</returns>\r\n         public override int GetHashCode(EdgeEndPoint edgePnt)\r\n         {\r\n            return edgePnt.Edge.Id.GetHashCode() ^ edgePnt.Index.GetHashCode();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Stores vertices list of geometry primitives.\r\n      /// Derived classes concretize the actual primitive type the vertices list belong to.\r\n      /// </summary>\r\n      private abstract class PrimVertices\r\n      {\r\n         public IFCAnyHandleUtil.IfcPointList PointList { get; protected set; } = new IFCAnyHandleUtil.IfcPointList();\r\n         public PointBase this[int key]\r\n         {\r\n            get => PointList[key];\r\n            set => PointList[key] = value;\r\n         }\r\n         public PointBase Last() { return PointList.Last(); }\r\n      }\r\n      private class PolyLineVertices : PrimVertices\r\n      {\r\n         public PolyLineVertices(UV beg, UV end)\r\n         {\r\n            PointList.AddPoints(beg, end);\r\n         }\r\n         public PolyLineVertices(XYZ beg, XYZ end)\r\n         {\r\n            PointList.AddPoints(beg, end);\r\n         }\r\n         public PolyLineVertices(List<XYZ> points)\r\n         {\r\n            if (points.Count < 2)\r\n               throw new ArgumentException(\"Number of points must be 2 or greater\");\r\n\r\n            PointList.AddPoints(points);\r\n         }\r\n         public PolyLineVertices(List<UV> points)\r\n         {\r\n            if (points.Count < 2)\r\n               throw new ArgumentException(\"Number of points must be 2 or greater\");\r\n\r\n            PointList.AddPoints(points);\r\n         }\r\n      }\r\n      private class ArcVertices : PrimVertices\r\n      {\r\n         public ArcVertices(UV start, UV mid, UV end)\r\n         {\r\n            PointList.AddPoints(start, mid, end);\r\n         }\r\n         public ArcVertices(XYZ start, XYZ mid, XYZ end)\r\n         {\r\n            PointList.AddPoints(start, mid, end);\r\n         }\r\n      }\r\n      /// <summary>\r\n      /// Stores indices list used to build geometry primitives.\r\n      /// Derived classes concretize the primitive type defined by indices.\r\n      /// </summary>\r\n      public abstract class SegmentIndices\r\n      {\r\n         public abstract int GetStart();\r\n         public abstract int GetEnd();\r\n         public abstract void SetEnd(int endIndex);\r\n         public abstract void CalcIndices(int startIdx);\r\n         public bool IsCalculated { get; protected set; } = false;\r\n         public virtual bool TryMerge(SegmentIndices segmentIndices)\r\n         {\r\n            return false;\r\n         }\r\n      }\r\n      public class PolyLineIndices : SegmentIndices\r\n      {\r\n         public PolyLineIndices(int lineCount)\r\n         { LineCount = lineCount; }\r\n         public List<int> Indices { get; protected set; }\r\n         public int m_lineCount = 0;\r\n         public int LineCount\r\n         {\r\n            get { return m_lineCount; }\r\n            //Indices are not valid because line count has been changed. So delete indince list.\r\n            set { m_lineCount = value; IsCalculated = false; }\r\n         }\r\n         public override int GetStart()\r\n         { return Indices[0]; }\r\n         public override int GetEnd()\r\n         { return Indices.Last(); }\r\n         public override void SetEnd(int endIndex)\r\n         { Indices[Indices.Count - 1] = endIndex; }\r\n         public override void CalcIndices(int startIdx)\r\n         {\r\n            Indices = new List<int> { startIdx };\r\n            Indices.AddRange(Enumerable.Range(startIdx, LineCount).Select(x => x + 1));\r\n            IsCalculated = true;\r\n         }\r\n         //Function assumes that input and this segmants are consecutive. End index of this segmant must be equal to start index of input segment.\r\n         public override bool TryMerge(SegmentIndices segmentIndices)\r\n         {\r\n            PolyLineIndices inputPolyLineIndices = segmentIndices as PolyLineIndices;\r\n            if (segmentIndices == this || inputPolyLineIndices == null)\r\n               return false;\r\n\r\n            //Indices array after merge must not contain duplicated indices.\r\n            //So remove either End index of this segment or Start index of input segment.\r\n            Indices.RemoveAt(Indices.Count - 1);\r\n            Indices.AddRange(inputPolyLineIndices.Indices);\r\n            return true;\r\n         }\r\n      }\r\n      public class ArcIndices : SegmentIndices\r\n      {\r\n         public int Start { get; protected set; }\r\n         public int Mid { get; protected set; }\r\n         public int End { get; protected set; }\r\n         public override int GetStart()\r\n         { return Start; }\r\n         public override int GetEnd()\r\n         { return End; }\r\n         public override void SetEnd(int endIndex)\r\n         { End = endIndex; }\r\n         public override void CalcIndices(int startIdx)\r\n         {\r\n            Start = startIdx;\r\n            Mid = startIdx + 1;\r\n            End = startIdx + 2;\r\n            IsCalculated = true;\r\n         }\r\n      }\r\n      /// <summary>\r\n      /// Accumulates vertices and calculates indices.\r\n      /// This class assumes that primitive vertices should be connected in the order they appear in the array.\r\n      /// Based on this assumption this class constructs indices array.\r\n      /// </summary>\r\n      private class PolyCurve\r\n      {\r\n         private List<PrimVertices> PrimVerticesList { get; set; } = new List<PrimVertices>();\r\n         public bool PolyLinesOnly { get; protected set; } = true;\r\n         //PointList and SegmentsIndices are built by BuildVerticesAndIndices()\r\n         public IFCAnyHandleUtil.IfcPointList PointList { get; protected set; } = new IFCAnyHandleUtil.IfcPointList();\r\n         public List<SegmentIndices> SegmentsIndices { get; protected set; } = null;\r\n\r\n         public PolyCurve(PrimVertices primVertices)\r\n         {\r\n            if (!AddPrimVertices(primVertices))\r\n               throw new ArgumentException(\"Error when constructing PolyCurve\");\r\n         }\r\n\r\n         public void BuildVerticesAndIndices()\r\n         {\r\n            foreach (PrimVertices primVertices in PrimVerticesList)\r\n            {\r\n               const int MinIndexValue = 1;\r\n\r\n               //1. Build point list.\r\n               //Current poly curve's end point and start point of primitive curve are always equal.\r\n               //So remove one of them from point list.\r\n               if (PointList.Count != 0)\r\n                  PointList.Points.RemoveAt(PointList.Count - 1);\r\n               PointList.AddPointList(primVertices.PointList);\r\n\r\n               //2. Build indices. Do not do it if poly curve contains poly line segments only.\r\n               PointBase endPoint = PointList.Last();\r\n               bool startEndPointsAreEqual = CoordsAreWithinVertexTol(PointList[0], endPoint);\r\n               SegmentIndices segmentIndices = null;\r\n               if (PolyLinesOnly)\r\n               {\r\n                  // Kind of workaround to ensure that the first and last points, if they are supposed to be \r\n                  // the same, are exactly the same.\r\n                  if (startEndPointsAreEqual)\r\n                     PointList[0] = endPoint;\r\n               }\r\n               else\r\n               {\r\n                  if (SegmentsIndices == null)\r\n                     SegmentsIndices = new List<SegmentIndices>();\r\n\r\n                  if (primVertices as PolyLineVertices != null)\r\n                  {\r\n                     segmentIndices = new PolyLineIndices(primVertices.PointList.Count - 1);\r\n                  }\r\n                  else if (primVertices as ArcVertices != null)\r\n                  {\r\n                     segmentIndices = new ArcIndices();\r\n                  }\r\n                  else\r\n                     throw new ArgumentException(\"Unknown PrimVertices object\");\r\n\r\n                  segmentIndices.CalcIndices(SegmentsIndices.Count == 0 ? MinIndexValue : SegmentsIndices.Last().GetEnd());\r\n\r\n                  // if start and end points of poly curve are equal we should remove duplicated point from vertices array.\r\n                  // Indices array should be updated accordingly ( to access end point programmer should use start index).\r\n                  if (startEndPointsAreEqual)\r\n                  {\r\n                     PointList.Points.RemoveAt(PointList.Count - 1);\r\n                     segmentIndices.SetEnd(MinIndexValue);\r\n                  }\r\n\r\n                  //TryMerge is implemented for polylines because we can easily merge two consecutive polyline segments.\r\n                  if (SegmentsIndices.Count == 0 || !SegmentsIndices.Last().TryMerge(segmentIndices))\r\n                     SegmentsIndices.Add(segmentIndices);\r\n               }\r\n            }\r\n         }\r\n\r\n         public bool AddPrimVertices(PrimVertices primVertices)\r\n         {\r\n            if (primVertices == null)\r\n               return false;\r\n\r\n            //PrimVertices class guarantees that number of points is always >= 2.\r\n            var curvePoints = primVertices.PointList.Points;\r\n            var pointsCount = curvePoints.Count;\r\n\r\n            PointBase currentStartPoint = PrimVerticesList.Count != 0 ? PrimVerticesList[0][0] : null;\r\n            PointBase currentEndPoint = PrimVerticesList.Count != 0 ? PrimVerticesList.Last().Last() : null;\r\n            bool addAtEnd = true;\r\n            bool reverseCurve = false;\r\n\r\n            if (currentStartPoint != null && currentEndPoint != null)\r\n            {\r\n               // Need to check all possible connections between the current curve and the\r\n               // existing curve by checking start and endpoints.\r\n\r\n               // For options to attach the next curve to the existing curve below.\r\n               if (!CoordsAreWithinVertexTol(curvePoints[0], currentEndPoint))\r\n               {\r\n                  if (CoordsAreWithinVertexTol(curvePoints[pointsCount - 1], currentEndPoint))\r\n                  {\r\n                     reverseCurve = true;\r\n                  }\r\n                  else\r\n                  {\r\n                     addAtEnd = false;\r\n                     if (CoordsAreWithinVertexTol(curvePoints[0], currentStartPoint))\r\n                     {\r\n                        reverseCurve = true;\r\n                     }\r\n                     else\r\n                     {\r\n                        //Neither start nor end point of Input curve coincide with any of this polycurve's edge points.\r\n                        //In this case we do not know how to connect them, so return false.\r\n                        return false;\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n\r\n            if (reverseCurve)\r\n               curvePoints.Reverse();\r\n\r\n            if (primVertices as PolyLineVertices == null)\r\n               PolyLinesOnly = false;\r\n\r\n            if (addAtEnd)\r\n               PrimVerticesList.Add(primVertices);\r\n            else\r\n               PrimVerticesList.Insert(0, primVertices);\r\n\r\n            return true;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a default plane whose origin is at (0, 0, 0) and normal is (0, 0, 1).\r\n      /// </summary>\r\n      /// <returns>\r\n      /// The Plane.\r\n      /// </returns>\r\n      public static Plane CreateDefaultPlane()\r\n      {\r\n         return CreatePlaneByNormalAtOrigin(XYZ.BasisZ);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a plane whose origin is at (0, 0, 0) and normal is zDir.\r\n      /// </summary>\r\n      /// <param name=\"zDir\">The plane normal.</param>\r\n      /// <returns>\r\n      /// The Plane.\r\n      /// </returns>\r\n      public static Plane CreatePlaneByNormalAtOrigin(XYZ zDir)\r\n      {\r\n         if (zDir == null)\r\n            return null;\r\n         return Plane.CreateByNormalAndOrigin(zDir, XYZ.Zero);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a plane by its X and Y directions whose origin is at (0, 0, 0).\r\n      /// </summary>\r\n      /// <param name=\"xDir\">The plane X direction.</param>\r\n      /// <param name=\"yDir\">The plane Y direction.</param>\r\n      /// <returns>\r\n      /// The Plane.\r\n      /// </returns>\r\n      public static Plane CreatePlaneByXYVectorsAtOrigin(XYZ xDir, XYZ yDir)\r\n      {\r\n         if (xDir == null || yDir == null)\r\n            return null;\r\n         return CreatePlaneByXYVectorsContainingPoint(xDir, yDir, XYZ.Zero);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Try to create a Plane from a Transform whose origin is acceptable by Revit standards.\r\n      /// </summary>\r\n      /// <param name=\"lcs\">The transform.  It may be null.</param>\r\n      /// <returns>A valid Plane, or null if the input is null.</returns>\r\n      /// <remarks>Note: this does not guarantee that the plane origin will be acceptable, if, for example,\r\n      /// the closest point to the origin on the Plane is still farther away than the Revit limit.</remarks>\r\n      public static Plane CreatePlaneFromTransformNearOrigin(Transform lcs)\r\n      {\r\n         if (lcs == null)\r\n            return null;\r\n         return CreatePlaneByXYVectorsContainingPoint(lcs.BasisX, lcs.BasisY, lcs.Origin);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a plane whose normal is zDir and which contains the point point.\r\n      /// </summary>\r\n      /// <param name=\"xDir\">The plane X direction.</param>\r\n      /// <param name=\"yDir\">The plane Y direction.</param>\r\n      /// <param name=\"point\">A point on the plane.</param>\r\n      /// <returns>The Plane.</returns>\r\n      /// <remarks>The origin of the plane will be the original point as long as it isn't \"too far\" from the origin.\r\n      /// If it is greater than about 20 miles from the origin, the closest point to the global origin on the plane will be used.\r\n      /// Note: this does not guarantee that the plane origin will be acceptable, if, for example,\r\n      /// the closest point to the origin on the Plane is still farther away than the Revit internal limit.</remarks>\r\n      public static Plane CreatePlaneByXYVectorsContainingPoint(XYZ xDir, XYZ yDir, XYZ point)\r\n      {\r\n         if (xDir == null || yDir == null || point == null)\r\n            return null;\r\n         XYZ zDir = xDir.CrossProduct(yDir);\r\n\r\n         double distanceToOrigin = point.DistanceTo(XYZ.Zero);\r\n         XYZ orig = (distanceToOrigin < 100000) ? point : zDir.DotProduct(point) * zDir;\r\n         return Plane.Create(new Frame(orig, xDir, yDir, zDir));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a Transform from an X vector, a Y vector, a Z vector, and an origin.\r\n      /// </summary>\r\n      /// <param name=\"xVec\">The X vector.</param>\r\n      /// <param name=\"yVec\">The Y vector.</param>\r\n      /// <param name=\"zVec\">The Z vector.</param>\r\n      /// <param name=\"origin\">The origin.</param>\r\n      /// <returns>The Transform.</returns>\r\n      public static Transform CreateTransformFromVectorsAndOrigin(XYZ xVec, XYZ yVec, XYZ zVec, XYZ origin)\r\n      {\r\n         if (xVec == null || yVec == null || zVec == null || origin == null)\r\n            return null;\r\n         Transform transform = Transform.CreateTranslation(origin);\r\n         transform.BasisX = xVec;\r\n         transform.BasisY = yVec;\r\n         transform.BasisZ = zVec;\r\n         return transform;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a Transform from a Plane.\r\n      /// </summary>\r\n      /// <param name=\"plane\">The plane.</param>\r\n      /// <returns>A Transform with the same X, Y, Z vectors and origin as the input plane.</returns>\r\n      public static Transform CreateTransformFromPlane(Plane plane)\r\n      {\r\n         if (plane == null)\r\n            return null;\r\n         Transform transform = Transform.CreateTranslation(plane.Origin);\r\n         transform.BasisX = plane.XVec;\r\n         transform.BasisY = plane.YVec;\r\n         transform.BasisZ = plane.Normal;\r\n         return transform;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a Transform from a PlanarFace.\r\n      /// </summary>\r\n      /// <param name=\"face\">The PlanarFace.</param>\r\n      /// <returns>A Transform with the same X, Y, Z vectors and origin as the input face.</returns>\r\n      public static Transform CreateTransformFromPlanarFace(PlanarFace face)\r\n      {\r\n         if (face == null)\r\n            return null;\r\n         Transform transform = Transform.CreateTranslation(face.Origin);\r\n         transform.BasisX = face.XVector;\r\n         transform.BasisY = face.YVector;\r\n         transform.BasisZ = face.FaceNormal;\r\n         return transform;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if curve is flipped relative to a local coordinate system.\r\n      /// </summary>\r\n      /// <param name=\"lcs\">The local coordinate system.</param>\r\n      /// <param name=\"curve\">The curve.</param>\r\n      /// <returns>True if the curve is flipped to the plane, false otherwise.</returns>\r\n      public static bool MustFlipCurve(Transform lcs, Curve curve)\r\n      {\r\n         XYZ xVector = null;\r\n         XYZ yVector = null;\r\n         if (curve is Arc)\r\n         {\r\n            Arc arc = curve as Arc;\r\n            xVector = arc.XDirection;\r\n            yVector = arc.YDirection;\r\n         }\r\n         else if (curve is Ellipse)\r\n         {\r\n            Ellipse ellipse = curve as Ellipse;\r\n            xVector = ellipse.XDirection;\r\n            yVector = ellipse.YDirection;\r\n         }\r\n         else\r\n            return false;\r\n\r\n         UV realListX = ConvertVectorToLocalCoordinates(lcs, xVector);\r\n         UV realListY = ConvertVectorToLocalCoordinates(lcs, yVector);\r\n\r\n         double dot = realListY.U * (-realListX.V) + realListY.V * (realListX.U);\r\n         if (dot < -MathUtil.Eps())\r\n            return true;\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates the slope of an extrusion relative to an axis.\r\n      /// </summary>\r\n      /// <param name=\"extrusionDirection\">The extrusion direction.</param>\r\n      /// <param name=\"axis\">The axis.</param>\r\n      /// <returns>The slope.</returns>\r\n      /// <remarks>This is a simple routine mainly intended for beams and columns.</remarks>\r\n      static public double GetSimpleExtrusionSlope(XYZ extrusionDirection, IFCExtrusionBasis axis)\r\n      {\r\n         double zOff = (axis == IFCExtrusionBasis.BasisZ) ? (1.0 - Math.Abs(extrusionDirection[2])) : Math.Abs(extrusionDirection[2]);\r\n         double scaledAngle = UnitUtil.ScaleAngle(MathUtil.SafeAsin(zOff));\r\n         return scaledAngle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts vector from global coordinates (X,Y,Z) to local coordinates (U,V).\r\n      /// </summary>\r\n      /// <param name=\"lcs\">The local coordinate system.  If not supplied, assumed to be identity.</param>\r\n      /// <param name=\"vector\">The vector in global coordinates.</param>\r\n      /// <returns>The converted values.</returns>\r\n      public static UV ConvertVectorToLocalCoordinates(Transform lcs, XYZ vector)\r\n      {\r\n         if (lcs != null)\r\n         {\r\n            return new UV(vector.DotProduct(lcs.BasisX), vector.DotProduct(lcs.BasisY));\r\n         }\r\n\r\n         return new UV(vector.X, vector.Y);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Obtains a new curve transformed via the indicated translation vector. \r\n      /// </summary>\r\n      /// <param name=\"originalCurve\">The curve.</param>\r\n      /// <param name=\"translationVector\">The translation vector.</param>\r\n      /// <returns>The new translated curve.</returns>\r\n      public static Curve MoveCurve(Curve originalCurve, XYZ translationVector)\r\n      {\r\n         Transform moveTrf = Transform.CreateTranslation(translationVector);\r\n         return originalCurve.CreateTransformed(moveTrf);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Obtains a new CurveLoop transformed via the indicated translation vector. \r\n      /// </summary>\r\n      /// <param name=\"originalCurveLoop\">The curve loop.</param>\r\n      /// <param name=\"translationVector\">The translation vector.</param>\r\n      /// <returns>The new translated curve loop.</returns>\r\n      public static CurveLoop MoveCurveLoop(CurveLoop originalCurveLoop, XYZ translationVector)\r\n      {\r\n         Transform moveTrf = Transform.CreateTranslation(translationVector);\r\n         CurveLoop newCurveLoop = new CurveLoop();\r\n         foreach (Curve curve in originalCurveLoop)\r\n            newCurveLoop.Append(MoveCurve(curve, translationVector));\r\n         return newCurveLoop;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Obtains a new CurveLoop transformed via the indicated transform.\r\n      /// </summary>\r\n      /// <param name=\"originalCurveLoop\">The curve loop.</param>\r\n      /// <param name=\"trf\">The transform.</param>\r\n      /// <returns>The new transformed curve loop.</returns>\r\n      public static CurveLoop TransformCurveLoop(CurveLoop originalCurveLoop, Transform trf)\r\n      {\r\n         CurveLoop newCurveLoop = new CurveLoop();\r\n         foreach (Curve curve in originalCurveLoop)\r\n            newCurveLoop.Append(curve.CreateTransformed(trf));\r\n         return newCurveLoop;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if curve is line or arc.\r\n      /// </summary>\r\n      /// <param name=\"curve\">\r\n      /// The curve.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the curve is line or arc, false otherwise.\r\n      /// </returns>\r\n      public static bool CurveIsLineOrArc(Curve curve)\r\n      {\r\n         return curve is Line || curve is Arc;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Reverses curve loop.\r\n      /// </summary>\r\n      /// <param name=\"curveloop\">The curveloop.</param>\r\n      /// <returns>The reversed curve loop.</returns>\r\n      public static CurveLoop ReverseOrientation(CurveLoop curveloop)\r\n      {\r\n         CurveLoop copyOfCurveLoop = CurveLoop.CreateViaCopy(curveloop);\r\n         copyOfCurveLoop.Flip();\r\n         return copyOfCurveLoop;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets origin, X direction and curve bound from a curve.\r\n      /// </summary>\r\n      /// <param name=\"curve\">The curve.</param>\r\n      /// <param name=\"curveBounds\">The output curve bounds.</param>\r\n      /// <param name=\"xDirection\">The output X direction.</param>\r\n      /// <param name=\"origin\">The output origin.</param>\r\n      public static void GetAxisAndRangeFromCurve(Curve curve,\r\n         out IFCRange curveBounds, out XYZ xDirection, out XYZ origin)\r\n      {\r\n         curveBounds = new IFCRange(curve.GetEndParameter(0), curve.GetEndParameter(1));\r\n         origin = curve.Evaluate(curveBounds.Start, false);\r\n         if (curve is Arc)\r\n         {\r\n            Arc arc = curve as Arc;\r\n            xDirection = arc.XDirection;\r\n         }\r\n         else if (curve is Ellipse)\r\n         {\r\n            Ellipse ellipse = curve as Ellipse;\r\n            xDirection = ellipse.XDirection;\r\n         }\r\n         else\r\n         {\r\n            Transform trf = curve.ComputeDerivatives(curveBounds.Start, false);\r\n            xDirection = trf.get_Basis(0);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates and returns an instance of the Options class with current view's DetailLevel or the detail level set to Fine if current view is not checked.\r\n      /// </summary>\r\n      public static Options GetIFCExportGeometryOptions()\r\n      {\r\n         Options options = new Options();\r\n         options.DetailLevel =\r\n            ExporterCacheManager.ExportOptionsCache.FilterViewForExport?.DetailLevel ??\r\n            ViewDetailLevel.Fine;\r\n         return options;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collects all solids and meshes within a GeometryElement.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// Added in 2013 to replace the temporary API method ExporterIFCUtils.GetSolidMeshGeometry.\r\n      /// </remarks>\r\n      /// <param name=\"geomElemToUse\">The GeometryElement.</param>\r\n      /// <param name=\"trf\">The initial Transform applied on the GeometryElement.</param>\r\n      /// <returns>The collection of solids and meshes.</returns>\r\n      public static SolidMeshGeometryInfo GetSolidMeshGeometry(GeometryElement geomElemToUse, Transform trf)\r\n      {\r\n         SolidMeshGeometryInfo geometryInfo = new SolidMeshGeometryInfo();\r\n         if (geomElemToUse != null)\r\n         {\r\n            // call to recursive helper method to obtain all solid and mesh geometry within geomElemToUse\r\n            geometryInfo.CollectSolidMeshGeometry(geomElemToUse, ExporterCacheManager.AllocatedGeometryObjectCache);\r\n         }\r\n         return geometryInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collects all solids and meshes within a GeometryElement, given the input the Element\r\n      /// </summary>\r\n      /// <param name=\"element\">the Element</param>\r\n      /// <returns>SolidMeshGeometryInfo</returns>\r\n      public static SolidMeshGeometryInfo GetSolidMeshGeometry(Element element)\r\n      {\r\n         Options options = GetIFCExportGeometryOptions();\r\n         GeometryElement geomElem = element.get_Geometry(options);\r\n         return GetSolidMeshGeometry(geomElem, Transform.Identity);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collects all meshes within a GeometryElement and all solids clipped between a given IFCRange.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// Added in 2013 to replace the temporary API method ExporterIFCUtils.GetClippedSolidMeshGeometry.\r\n      /// </remarks>\r\n      /// <param name=\"elem\">\r\n      /// The Element from which we can obtain a bounding box. Not handled directly in this method, it is used in an internal helper method.\r\n      /// </param>\r\n      /// <param name=\"geomElemToUse\">\r\n      /// The GeometryElement.\r\n      /// </param>\r\n      /// <param name=\"range\">\r\n      /// The upper and lower levels which act as the clipping boundaries.\r\n      /// </param>\r\n      /// <returns>The collection of solids and meshes.</returns>\r\n      public static SolidMeshGeometryInfo GetClippedSolidMeshGeometry(GeometryElement geomElemToUse, IFCRange range)\r\n      {\r\n         SolidMeshGeometryInfo geometryInfo = GetSolidMeshGeometry(geomElemToUse, Transform.Identity);\r\n         geometryInfo.ClipSolidsList(geomElemToUse, range);\r\n         return geometryInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collects all solids and meshes within a GeometryElement; the solids which consist of multiple closed volumes\r\n      /// will be split into single closed volume Solids.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// Added in 2013 to replace the temporary API method ExporterIFCUtils.GetSplitSolidMeshGeometry.\r\n      /// </remarks>\r\n      /// <param name=\"geomElemToUse\">The GeometryElement.</param>\r\n      /// <param name=\"trf\">The transform.</param>\r\n      /// <returns>The collection of solids and meshes.</returns>\r\n      public static SolidMeshGeometryInfo GetSplitSolidMeshGeometry(GeometryElement geomElemToUse, Transform trf)\r\n      {\r\n         SolidMeshGeometryInfo geometryInfo = GetSolidMeshGeometry(geomElemToUse, Transform.Identity);\r\n         SplitSolids(geometryInfo);\r\n         return geometryInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collects all solids and meshes within a GeometryElement; the solids which consist of multiple closed volumes\r\n      /// will be split into single closed volume Solids.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// Added in 2013 to replace the temporary API method ExporterIFCUtils.GetSplitSolidMeshGeometry.\r\n      /// </remarks>\r\n      /// <param name=\"geomElemToUse\">The GeometryElement.</param>\r\n      /// <returns>The collection of solids and meshes.</returns>\r\n      public static SolidMeshGeometryInfo GetSplitSolidMeshGeometry(GeometryElement geomElemToUse)\r\n      {\r\n         return GetSplitSolidMeshGeometry(geomElemToUse, Transform.Identity);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collects all solids and meshes within a GeometryElement; the solids which consist of multiple closed volumes\r\n      /// will be split into single closed volume Solids.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// Added in 2013 to replace the temporary API method ExporterIFCUtils.GetSplitClippedSolidMeshGeometry.\r\n      /// </remarks>\r\n      /// <param name=\"range\">\r\n      /// The upper and lower levels which act as the clipping boundaries.\r\n      /// </param>\r\n      /// <param name=\"geomElemToUse\">The GeometryElement.</param>\r\n      /// <returns>The collection of solids and meshes.</returns>\r\n      public static SolidMeshGeometryInfo GetSplitClippedSolidMeshGeometry(GeometryElement geomElemToUse, IFCRange range)\r\n      {\r\n         if (range == null)\r\n            return GetSplitSolidMeshGeometry(geomElemToUse);\r\n\r\n         SolidMeshGeometryInfo geometryInfo = GetClippedSolidMeshGeometry(geomElemToUse, range);\r\n         SplitSolids(geometryInfo);\r\n         return geometryInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The maximum number of faces in a Solid before we decide not to split it.\r\n      /// Larger than this can cause sigificant performance issues.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// Internal tests show perfectly good behavior at 1044 faces, so setting\r\n      /// this value based on that.  This may be tweaked over time, or other\r\n      /// methods used instead.\r\n      /// </remarks>\r\n      public static int MaxFaceCountForSplitVolumes = 2048;\r\n\r\n      /// <summary>\r\n      /// Splits a Solid into distinct volumes.\r\n      /// </summary>\r\n      /// <param name=\"solid\">The initial solid.</param>\r\n      /// <returns>The list of volumes.</returns>\r\n      /// <remarks>This calls the internal SolidUtils.SplitVolumes routine, but does additional cleanup work to properly dispose of stale data.</remarks>\r\n      public static IList<Solid> SplitVolumes(Solid solid)\r\n      {\r\n         IList<Solid> splitVolumes = null;\r\n         try\r\n         {\r\n            if (solid.Faces.Size < GeometryUtil.MaxFaceCountForSplitVolumes)\r\n            {\r\n               splitVolumes = SolidUtils.SplitVolumes(solid);\r\n\r\n               // Fall back to exporting just the original Solid if we got any Solids without volume\r\n               if (splitVolumes.Any(x => x.Volume < 0.0 || MathUtil.IsAlmostEqual(x.Volume, 0.0)))\r\n                  throw new InvalidOperationException();\r\n\r\n               foreach (Solid currSolid in splitVolumes)\r\n               {\r\n                  // The geometry element created by SplitVolumes is a copy which will have its own allocated\r\n                  // membership - this needs to be stored and disposed of (see AllocatedGeometryObjectCache\r\n                  // for details)\r\n                  ExporterCacheManager.AllocatedGeometryObjectCache.AddGeometryObject(currSolid);\r\n               }\r\n            }\r\n         }\r\n         catch\r\n         {\r\n            splitVolumes = null;\r\n         }\r\n\r\n         if (splitVolumes == null)\r\n         {\r\n            // Split volumes can fail; in this case, we'll export the original solid.\r\n            splitVolumes = new List<Solid>() { solid };\r\n         }\r\n\r\n         return splitVolumes;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Splits any solid volumes which consist of multiple closed bodies into individual solids (and updates the storage accordingly).\r\n      /// </summary>\r\n      public static void SplitSolids(SolidMeshGeometryInfo info)\r\n      {\r\n         IList<SolidInfo> splitSolidsList = new List<SolidInfo>();\r\n\r\n         foreach (SolidInfo solidInfo in info.SolidInfoList)\r\n         {\r\n            Element element = solidInfo.OwnerElement;\r\n            IList<Solid> splitSolids = GeometryUtil.SplitVolumes(solidInfo.Solid);\r\n            foreach (Solid splitSolid in splitSolids)\r\n            {\r\n               splitSolidsList.Add(new SolidInfo(splitSolid, element));\r\n            }\r\n         }\r\n\r\n         info.SolidInfoList = splitSolidsList;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Indicates whether or not the loop has the same sense when used to bound the face as when first defined.\r\n      /// </summary>\r\n      /// <param name=\"boundary\">The boundary.</param>\r\n      /// <returns>If false the senses of all its component oriented edges are implicitly reversed when used in the face.</returns>\r\n      public static bool BoundaryHasSameSense(IFCAnyHandle boundary)\r\n      {\r\n         bool? hasSameSense = IFCAnyHandleUtil.GetBooleanAttribute(boundary, \"Orientation\");\r\n         return hasSameSense.HasValue && hasSameSense.Value;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the boundary polygon for a given boundary.\r\n      /// </summary>\r\n      /// <param name=\"boundary\">The boundary.</param>\r\n      /// <returns>The boundary curves for the polygon.</returns>\r\n      public static List<IFCAnyHandle> GetBoundaryPolygon(IFCAnyHandle boundary)\r\n      {\r\n         IFCAnyHandle bound = IFCAnyHandleUtil.GetInstanceAttribute(boundary, \"Bound\");\r\n\r\n         return IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(bound, \"Polygon\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the boundary handles for a given face.\r\n      /// </summary>\r\n      /// <param name=\"face\">The face.</param>\r\n      /// <returns>The boundary handles.</returns>\r\n      public static HashSet<IFCAnyHandle> GetFaceBounds(IFCAnyHandle face)\r\n      {\r\n         return IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(face, \"Bounds\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the IfcObjectPlacement handle stored as the reference for an IfcLocalPlacement.\r\n      /// </summary>\r\n      /// <param name=\"localPlacement\"></param>\r\n      /// <returns>The IfcObjectPlacement handle.  Return can be a handle without a value, if there is no value set in the IfcLocalPlacement.</returns>\r\n      public static IFCAnyHandle GetPlacementRelToFromLocalPlacement(IFCAnyHandle localPlacement)\r\n      {\r\n         return IFCAnyHandleUtil.GetInstanceAttribute(localPlacement, \"PlacementRelTo\");\r\n      }\r\n\r\n      /// <summary>\r\n      ///  Gets the IfcAxis2Placement handle stored as the relative placement for an IfcLocalPlacement.\r\n      /// </summary>\r\n      /// <param name=\"localPlacement\"> The IfcLocalPlacement handle.</param>\r\n      /// <returns>The IfcAxis2Placement handle.</returns>\r\n      public static IFCAnyHandle GetRelativePlacementFromLocalPlacement(IFCAnyHandle localPlacement)\r\n      {\r\n         return IFCAnyHandleUtil.GetInstanceAttribute(localPlacement, \"RelativePlacement\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the collection of IfcRepresentationMaps stored in an IfcTypeProduct handle.\r\n      /// </summary>\r\n      /// <param name=\"typeProduct\">The IfcTypeProduct handle.</param>\r\n      /// <returns>The representation maps.</returns>\r\n      public static List<IFCAnyHandle> GetRepresentationMaps(IFCAnyHandle typeProduct)\r\n      {\r\n         return IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(typeProduct, \"RepresentationMaps\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds items to a given shape handle.\r\n      /// </summary>\r\n      /// <param name=\"shape\">The shape handle.</param>\r\n      /// <param name=\"items\">The items.</param>\r\n      public static void AddItemsToShape(IFCAnyHandle shape, ISet<IFCAnyHandle> items)\r\n      {\r\n         HashSet<IFCAnyHandle> repItemSet = IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(shape, \"Items\");\r\n         foreach (IFCAnyHandle repItem in items)\r\n         {\r\n            repItemSet.Add(repItem);\r\n         }\r\n         IFCAnyHandleUtil.SetAttribute(shape, \"Items\", repItemSet);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets the IfcAxis2Placement handle stored as the placement relative to for an IfcLocalPlacement.\r\n      /// </summary>\r\n      /// <param name=\"localPlacement\">The IfcLocalPlacement handle.</param>\r\n      /// <param name=\"newPlacementRelTo\">The IfcObjectPlacement handle to use as the placement relative to.</param>\r\n      public static void SetPlacementRelTo(IFCAnyHandle localPlacement, IFCAnyHandle newPlacementRelTo)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(localPlacement, \"PlacementRelTo\", newPlacementRelTo);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets the IfcAxis2Placement handle stored as the relative placement for an IfcLocalPlacement.\r\n      /// </summary>\r\n      /// <param name=\"localPlacement\">The IfcLocalPlacement handle.</param>\r\n      /// <param name=\"newRelativePlacement\">The IfcAxis2Placement handle to use as the relative placement.</param>\r\n      public static void SetRelativePlacement(IFCAnyHandle localPlacement, IFCAnyHandle newRelativePlacement)\r\n      {\r\n         IFCAnyHandleUtil.SetAttribute(localPlacement, \"RelativePlacement\", newRelativePlacement);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets the IfcAxis2Placement handle stored as the placement relative to for an IfcLocalPlacement.\r\n      /// </summary>\r\n      /// <param name=\"localPlacement\">The IfcLocalPlacement handle.</param>\r\n      /// <param name=\"newRelativePlacement\">The IfcAxis2Placement handle to use as the relative placement.</param>\r\n      /// <param name=\"newPlacementRelTo\">The IfcObjectPlacement handle to use as the placement relative to.</param>\r\n      public static void UpdateLocalPlacement(IFCAnyHandle localPlacement, IFCAnyHandle newPlacementRelTo, IFCAnyHandle newRelativePlacement)\r\n      {\r\n         SetPlacementRelTo(localPlacement, newPlacementRelTo);\r\n         SetRelativePlacement(localPlacement, newRelativePlacement);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get geometry of one level of a potentially multi-story stair, ramp, or railing.\r\n      /// </summary>\r\n      /// <param name=\"geomElement\">The original geometry.</param>\r\n      /// <param name=\"numFlights\">The number of stair flights, or 0 if unknown.  If there is exactly 1 flight, return the original geoemtry.</param>\r\n      /// <returns>The geometry element with its symbol id.</returns>\r\n      /// <remarks>This routine may not work properly for railings created before 2006.  If you get\r\n      /// poor representations from such railings, please upgrade the railings if possible.</remarks>\r\n      public static (GeometryElement element, ElementId symbolId) GetOneLevelGeometryElement(GeometryElement geomElement, int numFlights)\r\n      {\r\n         if (geomElement == null)\r\n            return (null, null);\r\n\r\n         if (numFlights == 1)\r\n            return (geomElement, null);\r\n\r\n         foreach (GeometryObject geomObject in geomElement)\r\n         {\r\n            if (!(geomObject is GeometryInstance))\r\n               continue;\r\n            GeometryInstance geomInstance = geomObject as GeometryInstance;\r\n            if (!MathUtil.IsAlmostZero(geomInstance.Transform.Origin.Z))\r\n               continue;\r\n            Element baseSymbol = geomInstance.GetDocument()?.GetElement(geomInstance.GetSymbolGeometryId().SymbolId);\r\n            if (!(baseSymbol is ElementType))\r\n               continue;\r\n            GeometryElement symbolGeomElement = geomInstance.GetSymbolGeometry();\r\n\r\n            // For railings created before 2006, the GeometryElement could be null.  In this case, we will use\r\n            // a more general technique of getting geometry below, which will unfortanately result in worse\r\n            // representations.  If this is a concern, please upgrade the railings to any format since 2006.\r\n            if (symbolGeomElement != null)\r\n            {\r\n               ElementId oneLevelGeomSymbolId = geomInstance.GetSymbolGeometryId().SymbolId;\r\n               Transform trf = geomInstance.Transform;\r\n               if (trf != null && !trf.IsIdentity)\r\n                  return (symbolGeomElement.GetTransformed(trf), oneLevelGeomSymbolId);\r\n               else\r\n                  return (symbolGeomElement, oneLevelGeomSymbolId);\r\n            }\r\n         }\r\n         return (geomElement, null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get additional geometry of one level of a potentially multi-story stair, ramp, or railing that wasn't added in GetOneLevelGeometryElement\r\n      /// </summary>\r\n      /// <param name=\"allLevelsGeometry\">The original geometry.</param>\r\n      /// <param name=\"mainGeometrySymbolId\">The symbol id of the level main geometry.</param>\r\n      /// <returns>The geometry elements list.</returns>\r\n      public static List<GeometryElement> GetAdditionalOneLevelGeometry(GeometryElement allLevelsGeometry, ElementId mainGeometrySymbolId)\r\n      {\r\n         List<GeometryElement> additionalGeometry = new List<GeometryElement>();\r\n\r\n         if (allLevelsGeometry == null || mainGeometrySymbolId == null)\r\n            return additionalGeometry;\r\n\r\n         // Collect geometry and its Origin.Z grouped by symbols\r\n         Dictionary<ElementId, IList<Tuple<GeometryInstance, double>>> symbols = new Dictionary<ElementId, IList<Tuple<GeometryInstance, double>>>();\r\n         foreach (GeometryObject geomObject in allLevelsGeometry)\r\n         {\r\n            GeometryInstance instance = geomObject as GeometryInstance;\r\n            if (instance == null || instance.GetSymbolGeometryId() == null)\r\n               continue;\r\n\r\n            ElementId id = instance.GetSymbolGeometryId().SymbolId;\r\n\r\n            IList<Tuple<GeometryInstance, double>> geomInstances;\r\n            if (!symbols.TryGetValue(id, out geomInstances))\r\n            {\r\n               geomInstances = new List<Tuple<GeometryInstance, double>>();\r\n               symbols[id] = geomInstances;\r\n            }\r\n            geomInstances.Add(new Tuple<GeometryInstance, double>(instance, instance.Transform.Origin.Z));\r\n         }\r\n\r\n         // Define the number of flights as number of main instances\r\n         int numFlights = 0;\r\n         IList<Tuple<GeometryInstance, double>> instances;\r\n         if (symbols.TryGetValue(mainGeometrySymbolId, out instances))\r\n            numFlights = instances.Count;\r\n\r\n         if (numFlights < 1)\r\n            return additionalGeometry;\r\n\r\n         // Collect proper amount of instances of each geometry\r\n         List<GeometryInstance> instncesToAdd = new List<GeometryInstance>();\r\n         foreach (KeyValuePair<ElementId, IList<Tuple<GeometryInstance, double>>> symbol in symbols)\r\n         {\r\n            if (symbol.Key == mainGeometrySymbolId)\r\n               continue;\r\n\r\n            int numCurrInstances = symbol.Value.Count;\r\n            if (numCurrInstances == 0 || numCurrInstances % numFlights != 0)\r\n               continue;\r\n\r\n            // We take 'numCurrInstances/numFlights' instances with the lowest Origin.Z\r\n            // The oter instances are repeateble geometry of another level(flight)\r\n            int numInstancesToAdd = symbol.Value.Count / numFlights;\r\n            List<Tuple<GeometryInstance, double>> currInstances = symbol.Value.ToList();\r\n            instncesToAdd.AddRange(symbol.Value.OrderBy(x => x.Item2).Select(x => x.Item1).Take(numInstancesToAdd).ToList());\r\n         }\r\n\r\n         // Collect output geometry\r\n         foreach (GeometryInstance instance in instncesToAdd)\r\n         {\r\n            Element baseSymbol = instance.GetDocument()?.GetElement(instance.GetSymbolGeometryId().SymbolId);\r\n            if (!(baseSymbol is ElementType))\r\n               continue;\r\n            GeometryElement symbolGeomElement = instance.GetSymbolGeometry();\r\n            if (symbolGeomElement != null)\r\n            {\r\n               Transform trf = instance.Transform;\r\n               if (trf != null && !trf.IsIdentity)\r\n                  additionalGeometry.Add(symbolGeomElement.GetTransformed(trf));\r\n               else\r\n                  additionalGeometry.Add(symbolGeomElement);\r\n            }\r\n         }\r\n         return additionalGeometry;\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Projects a point to the closest point on the XY plane of a local coordinate system.\r\n      /// </summary>\r\n      /// <param name=\"lcs\">The local coordinate system.</param>\r\n      /// <param name=\"point\">The point.</param>\r\n      /// <returns>The UV of the projected point.</returns>\r\n      public static UV ProjectPointToXYPlaneOfLCS(Transform lcs, XYZ point)\r\n      {\r\n         if (lcs == null || point == null)\r\n            return null;\r\n\r\n         XYZ diff = (point - lcs.Origin);\r\n         return new UV(diff.DotProduct(lcs.BasisX), diff.DotProduct(lcs.BasisY));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Generates the UV value of a point projected to the XY plane of a transform representing a local coordinate system, given an extrusion direction.\r\n      /// </summary>\r\n      /// <param name=\"lcs\">The local coordinate system.</param>\r\n      /// <param name=\"projDir\">The projection direction.</param>\r\n      /// <param name=\"point\">The point.</param>\r\n      /// <returns>The UV value.</returns>\r\n      public static UV ProjectPointToXYPlaneOfLCS(Transform lcs, XYZ projDir, XYZ point)\r\n      {\r\n         XYZ zDir = lcs.BasisZ;\r\n\r\n         double denom = projDir.DotProduct(zDir);\r\n         if (MathUtil.IsAlmostZero(denom))\r\n            return new UV(point.X, point.Y);\r\n\r\n         XYZ xDir = lcs.BasisX;\r\n         XYZ yDir = lcs.BasisY;\r\n         XYZ orig = lcs.Origin;\r\n\r\n         double distToPlane = ((orig - point).DotProduct(zDir)) / denom;\r\n         XYZ pointProj = distToPlane * projDir + point;\r\n         XYZ pointProjOffset = pointProj - orig;\r\n         UV pointProjUV = new UV(pointProjOffset.DotProduct(xDir), pointProjOffset.DotProduct(yDir));\r\n         return pointProjUV;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Specifies the types of curves found in a boundary curve loop.\r\n      /// </summary>\r\n      public enum FaceBoundaryType\r\n      {\r\n         Polygonal,  // all curves are line segments.\r\n         LinesAndArcs, // all curves are line segments or arcs.\r\n         Complex // some curves are neither line segments nor arcs.\r\n      }\r\n\r\n      private static CurveLoop GetFaceBoundary(Face face, EdgeArray faceBoundary, XYZ baseLoopOffset,\r\n          bool polygonalOnly, out FaceBoundaryType faceBoundaryType)\r\n      {\r\n         faceBoundaryType = FaceBoundaryType.Polygonal;\r\n         CurveLoop currLoop = new CurveLoop();\r\n         foreach (Edge faceBoundaryEdge in faceBoundary)\r\n         {\r\n            Curve edgeCurve = faceBoundaryEdge.AsCurveFollowingFace(face);\r\n            Curve offsetCurve = (baseLoopOffset != null) ? MoveCurve(edgeCurve, baseLoopOffset) : edgeCurve;\r\n            if (!(offsetCurve is Line))\r\n            {\r\n               if (polygonalOnly)\r\n               {\r\n                  IList<XYZ> tessPts = offsetCurve.Tessellate();\r\n                  int numTessPts = tessPts.Count;\r\n                  for (int ii = 0; ii < numTessPts - 1; ii++)\r\n                  {\r\n                     Line line = Line.CreateBound(tessPts[ii], tessPts[ii + 1]);\r\n                     currLoop.Append(line);\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  currLoop.Append(offsetCurve);\r\n               }\r\n\r\n               if (offsetCurve is Arc)\r\n                  faceBoundaryType = FaceBoundaryType.LinesAndArcs;\r\n               else\r\n                  faceBoundaryType = FaceBoundaryType.Complex;\r\n            }\r\n            else\r\n               currLoop.Append(offsetCurve);\r\n         }\r\n         return currLoop;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the outer and inner boundaries of a Face as CurveLoops.\r\n      /// </summary>\r\n      /// <param name=\"face\">The face.</param>\r\n      /// <param name=\"baseLoopOffset\">The amount to translate the origin of the face plane.  This is used if the start of the extrusion\r\n      /// is offset from the base face.  The argument is null otherwise.</param>\r\n      /// <param name=\"faceBoundaryTypes\">Returns whether the boundaries consist of lines only, lines and arcs, or complex curves.</param>\r\n      /// <returns>1 outer and 0 or more inner curve loops corresponding to the face boundaries.</returns>\r\n      public static IList<CurveLoop> GetFaceBoundaries(Face face, XYZ baseLoopOffset, out IList<FaceBoundaryType> faceBoundaryTypes)\r\n      {\r\n         faceBoundaryTypes = new List<FaceBoundaryType>();\r\n\r\n         EdgeArrayArray faceBoundaries = face.EdgeLoops;\r\n         IList<CurveLoop> extrusionBoundaryLoops = new List<CurveLoop>();\r\n         foreach (EdgeArray faceBoundary in faceBoundaries)\r\n         {\r\n            FaceBoundaryType currFaceBoundaryType;\r\n            CurveLoop currLoop = GetFaceBoundary(face, faceBoundary, baseLoopOffset, false, out currFaceBoundaryType);\r\n            faceBoundaryTypes.Add(currFaceBoundaryType);\r\n            extrusionBoundaryLoops.Add(currLoop);\r\n         }\r\n         return extrusionBoundaryLoops;\r\n      }\r\n\r\n      private static CurveLoop GetOuterFaceBoundary(Face face, XYZ baseLoopOffset, bool polygonalOnly, out FaceBoundaryType faceBoundaryType)\r\n      {\r\n         faceBoundaryType = FaceBoundaryType.Polygonal;\r\n\r\n         EdgeArrayArray faceBoundaries = face.EdgeLoops;\r\n         foreach (EdgeArray faceOuterBoundary in faceBoundaries)\r\n            return GetFaceBoundary(face, faceOuterBoundary, baseLoopOffset, polygonalOnly, out faceBoundaryType);\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Group the extra faces in the extrusion by element id, representing clippings, recesses, and openings.\r\n      /// </summary>\r\n      /// <param name=\"elem\">The element generating the base extrusion.</param>\r\n      /// <param name=\"analyzer\">The extrusion analyzer.</param>\r\n      /// <returns>A list of connected faces for each element id that cuts the extrusion</returns>\r\n      public static IDictionary<ElementId, ICollection<ICollection<Face>>> GetCuttingElementFaces(Element elem, ExtrusionAnalyzer analyzer)\r\n      {\r\n         IDictionary<ElementId, ICollection<Face>> cuttingElementFaces = new Dictionary<ElementId, ICollection<Face>>();\r\n\r\n         IDictionary<Face, ExtrusionAnalyzerFaceAlignment> allFaces = analyzer.CalculateFaceAlignment();\r\n         foreach (KeyValuePair<Face, ExtrusionAnalyzerFaceAlignment> currFace in allFaces)\r\n         {\r\n            if (currFace.Value == ExtrusionAnalyzerFaceAlignment.FullyAligned)\r\n               continue;\r\n\r\n            EdgeArrayArray faceEdges = currFace.Key.EdgeLoops;\r\n            int numBoundaries = faceEdges.Size;\r\n            if (numBoundaries == 0)\r\n               continue;\r\n\r\n            // In some cases the native function throws an exception, skip this face if it occurs\r\n            ICollection<ElementId> generatingElementIds;\r\n            try\r\n            {\r\n               generatingElementIds = elem.GetGeneratingElementIds(currFace.Key);\r\n            }\r\n            catch\r\n            {\r\n               throw new ArgumentException(string.Format(\"Can't get generating element Ids for face: {0}\", currFace.Key.Id));\r\n            }\r\n\r\n            if (generatingElementIds == null)\r\n               continue;\r\n\r\n            foreach (ElementId generatingElementId in generatingElementIds)\r\n            {\r\n               ICollection<Face> elementFaces;\r\n\r\n               if (cuttingElementFaces.ContainsKey(generatingElementId))\r\n               {\r\n                  elementFaces = cuttingElementFaces[generatingElementId];\r\n               }\r\n               else\r\n               {\r\n                  elementFaces = new HashSet<Face>();\r\n                  cuttingElementFaces[generatingElementId] = elementFaces;\r\n               }\r\n\r\n               elementFaces.Add(currFace.Key);\r\n            }\r\n         }\r\n\r\n         IDictionary<ElementId, ICollection<ICollection<Face>>> cuttingElementFaceCollections =\r\n             new Dictionary<ElementId, ICollection<ICollection<Face>>>();\r\n         foreach (KeyValuePair<ElementId, ICollection<Face>> cuttingElementFaceCollection in cuttingElementFaces)\r\n         {\r\n            ICollection<ICollection<Face>> faceCollections = new List<ICollection<Face>>();\r\n            // Split into separate collections based on connectivity.\r\n            while (cuttingElementFaceCollection.Value.Count > 0)\r\n            {\r\n               IList<Face> currCollection = new List<Face>();\r\n               IEnumerator<Face> cuttingElementFaceCollectionEnumerator = cuttingElementFaceCollection.Value.GetEnumerator();\r\n               cuttingElementFaceCollectionEnumerator.MoveNext();\r\n               Face currFace = cuttingElementFaceCollectionEnumerator.Current;\r\n               currCollection.Add(currFace);\r\n               cuttingElementFaceCollection.Value.Remove(currFace);\r\n\r\n               IList<Face> facesToProcess = new List<Face>();\r\n               facesToProcess.Add(currFace);\r\n\r\n               if (cuttingElementFaceCollection.Value.Count > 0)\r\n               {\r\n                  while (facesToProcess.Count > 0)\r\n                  {\r\n                     currFace = facesToProcess[0];\r\n                     EdgeArray faceOuterBoundary = currFace.EdgeLoops.get_Item(0);\r\n\r\n                     foreach (Edge edge in faceOuterBoundary)\r\n                     {\r\n                        Face adjoiningFace = edge.GetFace(1);\r\n                        if (adjoiningFace.Equals(currFace))\r\n                           adjoiningFace = edge.GetFace(0);\r\n\r\n                        if (cuttingElementFaceCollection.Value.Contains(adjoiningFace))\r\n                        {\r\n                           currCollection.Add(adjoiningFace);\r\n                           cuttingElementFaceCollection.Value.Remove(adjoiningFace);\r\n                           facesToProcess.Add(adjoiningFace);\r\n                        }\r\n                     }\r\n\r\n                     facesToProcess.Remove(facesToProcess[0]);\r\n                  }\r\n               }\r\n\r\n               faceCollections.Add(currCollection);\r\n            }\r\n\r\n            cuttingElementFaceCollections[cuttingElementFaceCollection.Key] = faceCollections;\r\n         }\r\n\r\n         return cuttingElementFaceCollections;\r\n      }\r\n\r\n      private static IFCRange GetExtrusionRangeOfCurveLoop(CurveLoop loop, XYZ extrusionDirection)\r\n      {\r\n         IFCRange range = new IFCRange();\r\n         bool init = false;\r\n         foreach (Curve curve in loop)\r\n         {\r\n            if (!init)\r\n            {\r\n               if (curve.IsBound)\r\n               {\r\n                  IList<XYZ> coords = curve.Tessellate();\r\n                  foreach (XYZ coord in coords)\r\n                  {\r\n                     double val = coord.DotProduct(extrusionDirection);\r\n                     if (!init)\r\n                     {\r\n                        range.Start = val;\r\n                        range.End = val;\r\n                        init = true;\r\n                     }\r\n                     else\r\n                     {\r\n                        range.Start = Math.Min(range.Start, val);\r\n                        range.End = Math.Max(range.End, val);\r\n                     }\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  double val = curve.GetEndPoint(0).DotProduct(extrusionDirection);\r\n                  range.Start = val;\r\n                  range.End = val;\r\n                  init = true;\r\n               }\r\n            }\r\n            else\r\n            {\r\n               double val = curve.GetEndPoint(0).DotProduct(extrusionDirection);\r\n               range.Start = Math.Min(range.Start, val);\r\n               range.End = Math.Max(range.End, val);\r\n            }\r\n         }\r\n         return range;\r\n      }\r\n\r\n      private static bool IsInRange(IFCRange range, Transform lcs, XYZ extrusionDirection, out bool clipCompletely)\r\n      {\r\n         clipCompletely = false;\r\n         if (range != null)\r\n         {\r\n            // This check is only applicable for cuts that are perpendicular to the extrusion direction.\r\n            // For cuts that aren't, we can't easily tell if this cut is extraneous or not.\r\n            if (!MathUtil.IsAlmostEqual(Math.Abs(lcs.BasisZ.DotProduct(extrusionDirection)), 1.0))\r\n               return true;\r\n\r\n            double eps = MathUtil.Eps();\r\n\r\n            double parameterValue = lcs.Origin.DotProduct(extrusionDirection);\r\n\r\n            if (range.Start > parameterValue - eps)\r\n            {\r\n               clipCompletely = true;\r\n               return false;\r\n            }\r\n            if (range.End < parameterValue + eps)\r\n               return false;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      private static IList<UV> TransformAndProjectCurveLoopToPlane(ExporterIFC exporterIFC, CurveLoop loop, Transform lcs)\r\n      {\r\n         IList<UV> uvs = new List<UV>();\r\n\r\n         XYZ projDir = lcs.BasisZ;\r\n         foreach (Curve curve in loop)\r\n         {\r\n            XYZ point = curve.GetEndPoint(0);\r\n            XYZ scaledPoint = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, point);\r\n\r\n            UV scaledUV = ProjectPointToXYPlaneOfLCS(lcs, projDir, scaledPoint);\r\n            uvs.Add(scaledUV);\r\n         }\r\n         return uvs;\r\n      }\r\n\r\n      // return null if parent should be completely clipped.\r\n      // TODO: determine whether or not to use face boundary.\r\n      private static IFCAnyHandle ProcessClippingFace(ExporterIFC exporterIFC, CurveLoop outerBoundary, Transform boundaryLCS,\r\n          Transform extrusionBaseLCS, XYZ extrusionDirection, IFCRange range, bool useFaceBoundary, IFCAnyHandle bodyItemHnd)\r\n      {\r\n         if (outerBoundary == null || boundaryLCS == null)\r\n            throw new Exception(\"Invalid face boundary.\");\r\n\r\n         double clippingSlant = boundaryLCS.BasisZ.DotProduct(extrusionDirection);\r\n         if (useFaceBoundary)\r\n         {\r\n            if (MathUtil.IsAlmostZero(clippingSlant))\r\n               return bodyItemHnd;\r\n         }\r\n\r\n         bool clipCompletely;\r\n         if (!IsInRange(range, boundaryLCS, extrusionDirection, out clipCompletely))\r\n            return clipCompletely ? null : bodyItemHnd;\r\n\r\n         if (MathUtil.IsAlmostZero(clippingSlant))\r\n            throw new Exception(\"Can't create clipping perpendicular to extrusion.\");\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         XYZ scaledOrig = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, boundaryLCS.Origin);\r\n         XYZ scaledNorm = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, boundaryLCS.BasisZ);\r\n         XYZ scaledXDir = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, boundaryLCS.BasisX);\r\n\r\n         IFCAnyHandle planeAxisHnd = ExporterUtil.CreateAxis(file, scaledOrig, scaledNorm, scaledXDir);\r\n         IFCAnyHandle surfHnd = IFCInstanceExporter.CreatePlane(file, planeAxisHnd);\r\n\r\n         IFCAnyHandle clippedBodyItemHnd = null;\r\n         IFCAnyHandle halfSpaceHnd = null;\r\n\r\n         if (useFaceBoundary)\r\n         {\r\n            IFCAnyHandle boundedCurveHnd;\r\n            if (extrusionBaseLCS != null)\r\n            {\r\n               XYZ projScaledOrigin = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, extrusionBaseLCS.Origin);\r\n               XYZ projScaledX = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, extrusionBaseLCS.BasisX).Normalize();\r\n               XYZ projScaledY = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, extrusionBaseLCS.BasisY).Normalize();\r\n               XYZ projScaledNorm = projScaledX.CrossProduct(projScaledY);\r\n\r\n               Transform projScaledLCS = CreateTransformFromVectorsAndOrigin(projScaledX, projScaledY, projScaledNorm, projScaledOrigin);\r\n\r\n               IList<UV> polylinePts = TransformAndProjectCurveLoopToPlane(exporterIFC, outerBoundary, projScaledLCS);\r\n               polylinePts.Add(polylinePts[0]);\r\n               boundedCurveHnd = ExporterUtil.CreatePolyline(file, polylinePts);\r\n\r\n               IFCAnyHandle boundedAxisHnd = ExporterUtil.CreateAxis(file, projScaledOrigin, projScaledNorm, projScaledX);\r\n\r\n               halfSpaceHnd = IFCInstanceExporter.CreatePolygonalBoundedHalfSpace(file, boundedAxisHnd, boundedCurveHnd, surfHnd, false);\r\n            }\r\n            else\r\n            {\r\n               throw new Exception(\"Can't create non-polygonal face boundary.\");\r\n            }\r\n         }\r\n         else\r\n         {\r\n            halfSpaceHnd = IFCInstanceExporter.CreateHalfSpaceSolid(file, surfHnd, false);\r\n         }\r\n\r\n         if (halfSpaceHnd == null)\r\n            throw new Exception(\"Can't create clipping.\");\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(bodyItemHnd, IFCEntityType.IfcBooleanClippingResult) ||\r\n             IFCAnyHandleUtil.IsSubTypeOf(bodyItemHnd, IFCEntityType.IfcSweptAreaSolid))\r\n            clippedBodyItemHnd = IFCInstanceExporter.CreateBooleanClippingResult(file, IFCBooleanOperator.Difference,\r\n                bodyItemHnd, halfSpaceHnd);\r\n         else\r\n            clippedBodyItemHnd = IFCInstanceExporter.CreateBooleanResult(file, IFCBooleanOperator.Difference,\r\n                bodyItemHnd, halfSpaceHnd);\r\n\r\n         return clippedBodyItemHnd;\r\n      }\r\n\r\n      // returns true if either, but not both, the start or end of the extrusion is clipped.\r\n      private static KeyValuePair<bool, bool> CollectionClipsExtrusionEnds(IList<CurveLoop> curveLoopBoundaries, XYZ extrusionDirection,\r\n          IFCRange extrusionRange)\r\n      {\r\n         bool clipStart = false;\r\n         bool clipEnd = false;\r\n         double eps = MathUtil.Eps();\r\n\r\n         foreach (CurveLoop curveLoop in curveLoopBoundaries)\r\n         {\r\n            IFCRange loopRange = GetExtrusionRangeOfCurveLoop(curveLoop, extrusionDirection);\r\n            if (loopRange.End >= extrusionRange.End - eps)\r\n               clipEnd = true;\r\n            if (loopRange.Start <= extrusionRange.Start + eps)\r\n               clipStart = true;\r\n         }\r\n\r\n         KeyValuePair<bool, bool> clipResults = new KeyValuePair<bool, bool>(clipStart, clipEnd);\r\n         return clipResults;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Attempts to create a clipping or recess from a collection of planar faces.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"allowMultipleClipPlanes\">Determine whether we are allowed to create more than one clip plane if necessary.</param>\r\n      /// <param name=\"extrusionBaseLCS\">The local coordinate system whose XY plane contains the extrusion base.</param>\r\n      /// <param name=\"extrusionDirection\">The extrusion direction.</param>\r\n      /// <param name=\"clippingFaces\">The original collection of faces.  Currently these should all be planar faces.</param>\r\n      /// <param name=\"range\">The valid range of the extrusion.</param>\r\n      /// <param name=\"origBodyRepHnd\">The original body representation.</param>\r\n      /// <param name=\"skippedFaces\">The faces that weren't handled by this operation.  These may represent openings.</param>\r\n      /// <returns>The new body representation.  If the clipping completely clips the extrusion, this will be null.  Otherwise, this\r\n      /// will be the clipped representation if a clipping was done, or the original representation if not.</returns>\r\n      public static IFCAnyHandle CreateClippingFromPlanarFaces(ExporterIFC exporterIFC, bool allowMultipleClipPlanes, Transform extrusionBaseLCS,\r\n          XYZ extrusionDirection, ICollection<PlanarFace> clippingFaces, IFCRange range, IFCAnyHandle origBodyRepHnd, out ICollection<Face> skippedFaces)\r\n      {\r\n         skippedFaces = null;\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(origBodyRepHnd))\r\n            return null;\r\n\r\n         bool polygonalOnly = ExporterCacheManager.ExportOptionsCache.ExportAs2x2;\r\n\r\n         IList<CurveLoop> outerCurveLoops = new List<CurveLoop>();\r\n         IList<Transform> outerCurveLoopLCS = new List<Transform>();\r\n         IList<bool> boundaryIsPolygonal = new List<bool>();\r\n\r\n         UV faceOriginUV = new UV(0, 0);\r\n\r\n         foreach (PlanarFace face in clippingFaces)\r\n         {\r\n            FaceBoundaryType faceBoundaryType;\r\n            CurveLoop curveLoop = GetOuterFaceBoundary(face, null, polygonalOnly, out faceBoundaryType);\r\n            outerCurveLoops.Add(curveLoop);\r\n            boundaryIsPolygonal.Add(faceBoundaryType == FaceBoundaryType.Polygonal);\r\n\r\n            PlanarFace planarFace = face as PlanarFace;\r\n            Transform lcs = CreateTransformFromPlanarFace(planarFace);\r\n            outerCurveLoopLCS.Add(lcs);\r\n\r\n            if (!curveLoop.IsCounterclockwise(planarFace.FaceNormal))\r\n               curveLoop.Flip();\r\n         }\r\n\r\n         int numFaces = clippingFaces.Count;\r\n\r\n         KeyValuePair<bool, bool> clipsExtrusionEnds = CollectionClipsExtrusionEnds(outerCurveLoops, extrusionDirection, range);\r\n         if (clipsExtrusionEnds.Key == true || clipsExtrusionEnds.Value == true)\r\n         {\r\n            // Don't clip for a door, window or opening.\r\n            if (!allowMultipleClipPlanes)\r\n               throw new Exception(\"Unhandled opening.\");\r\n\r\n            ICollection<int> facesToSkip = new HashSet<int>();\r\n            bool clipStart = (clipsExtrusionEnds.Key == true);\r\n            bool clipBoth = (clipsExtrusionEnds.Key == true && clipsExtrusionEnds.Value == true);\r\n            if (!clipBoth)\r\n            {\r\n               for (int ii = 0; ii < numFaces; ii++)\r\n               {\r\n                  double slant = outerCurveLoopLCS[ii].BasisZ.DotProduct(extrusionDirection);\r\n                  if (!MathUtil.IsAlmostZero(slant))\r\n                  {\r\n                     if (clipStart && (slant > 0.0))\r\n                        throw new Exception(\"Unhandled clip plane direction.\");\r\n                     if (!clipStart && (slant < 0.0))\r\n                        throw new Exception(\"Unhandled clip plane direction.\");\r\n                  }\r\n                  else\r\n                  {\r\n                     facesToSkip.Add(ii);\r\n                  }\r\n               }\r\n            }\r\n            else\r\n            {\r\n               // If we are clipping both the start and end of the extrusion, we have to make sure all of the clipping\r\n               // planes have the same a non-negative dot product relative to one another.\r\n               int clipOrientation = 0;\r\n               for (int ii = 0; ii < numFaces; ii++)\r\n               {\r\n                  double slant = outerCurveLoopLCS[ii].BasisZ.DotProduct(extrusionDirection);\r\n                  if (!MathUtil.IsAlmostZero(slant))\r\n                  {\r\n                     if (slant > 0.0)\r\n                     {\r\n                        if (clipOrientation < 0)\r\n                           throw new Exception(\"Unhandled clipping orientations.\");\r\n                        clipOrientation = 1;\r\n                     }\r\n                     else\r\n                     {\r\n                        if (clipOrientation > 0)\r\n                           throw new Exception(\"Unhandled clipping orientations.\");\r\n                        clipOrientation = -1;\r\n                     }\r\n                  }\r\n                  else\r\n                  {\r\n                     facesToSkip.Add(ii);\r\n                  }\r\n               }\r\n            }\r\n\r\n            // Special case: one face is a clip plane.\r\n            if (numFaces == 1)\r\n            {\r\n               return ProcessClippingFace(exporterIFC, outerCurveLoops[0], outerCurveLoopLCS[0], extrusionBaseLCS,\r\n                   extrusionDirection, range, false, origBodyRepHnd);\r\n            }\r\n\r\n            IFCAnyHandle newBodyRepHnd = origBodyRepHnd;\r\n            skippedFaces = new HashSet<Face>();\r\n\r\n            // originalFaces is an ICollection, so we can't index it.  Instead, we will keep the count ourselves.\r\n            int faceIdx = -1;   // start at -1 so that first increment puts faceIdx at 0.\r\n            foreach (PlanarFace planarFace in clippingFaces)\r\n            {\r\n               faceIdx++;\r\n\r\n               if (facesToSkip.Contains(faceIdx))\r\n               {\r\n                  skippedFaces.Add(planarFace);\r\n                  continue;\r\n               }\r\n\r\n               newBodyRepHnd = ProcessClippingFace(exporterIFC, outerCurveLoops[faceIdx], outerCurveLoopLCS[faceIdx],\r\n                   extrusionBaseLCS, extrusionDirection, range, true, newBodyRepHnd);\r\n               if (newBodyRepHnd == null)\r\n                  return null;\r\n            }\r\n            return newBodyRepHnd;\r\n         }\r\n\r\n         //not handled\r\n         throw new Exception(\"Unhandled clipping.\");\r\n      }\r\n\r\n      public static IFCAnyHandle CreateOpeningFromFaces(ExporterIFC exporterIFC, Plane extrusionBasePlane,\r\n          XYZ extrusionDirection, ICollection<Face> faces, IFCRange range, IFCAnyHandle origBodyRepHnd)\r\n      {\r\n         // If we have no faces, return the original value.\r\n         if (faces.Count == 0)\r\n            return origBodyRepHnd;\r\n\r\n         // We will attempt to \"sew\" the faces, and see what we have left over.  Depending on what we have, we have an opening, recess, or clipping.\r\n\r\n         // top and bottom profile curves to create extrusion\r\n         IDictionary<Face, IList<Curve>> boundaryCurves = new Dictionary<Face, IList<Curve>>();\r\n         // curves on same side face to check if they are valid for extrusion\r\n         IDictionary<Face, IList<Curve>> boundaryCurvesInSameExistingFace = new Dictionary<Face, IList<Curve>>();\r\n\r\n         foreach (Face face in faces)\r\n         {\r\n            EdgeArrayArray faceBoundaries = face.EdgeLoops;\r\n            // We only know how to deal with the outer loop; we'll throw if we have multiple boundaries.\r\n            if (faceBoundaries.Size != 1)\r\n               throw new Exception(\"Can't process faces with inner boundaries.\");\r\n\r\n            EdgeArray faceBoundary = faceBoundaries.get_Item(0);\r\n            foreach (Edge edge in faceBoundary)\r\n            {\r\n               Face face1 = edge.GetFace(0);\r\n               Face face2 = edge.GetFace(1);\r\n               Face missingFace = null;\r\n               Face existingFace = null;\r\n               if (!faces.Contains(face1))\r\n               {\r\n                  missingFace = face1;\r\n                  existingFace = face2;\r\n               }\r\n               else if (!faces.Contains(face2))\r\n               {\r\n                  missingFace = face2;\r\n                  existingFace = face1;\r\n               }\r\n\r\n               if (missingFace != null)\r\n               {\r\n                  Curve curve = edge.AsCurve();\r\n                  if (!boundaryCurves.ContainsKey(missingFace))\r\n                     boundaryCurves[missingFace] = new List<Curve>();\r\n                  boundaryCurves[missingFace].Add(curve);\r\n                  if (!boundaryCurvesInSameExistingFace.ContainsKey(existingFace))\r\n                     boundaryCurvesInSameExistingFace[existingFace] = new List<Curve>();\r\n                  boundaryCurvesInSameExistingFace[existingFace].Add(curve);\r\n               }\r\n            }\r\n         }\r\n\r\n         //might be recess\r\n         if (boundaryCurves.Count == 1)\r\n         {\r\n            // boundaryCurves contains one curve loop of top profile of an extrusion\r\n            // try to find bottom profile\r\n            IList<Curve> curves1 = boundaryCurves.Values.ElementAt(0);\r\n            CurveLoop curveloop = CurveLoop.Create(curves1);\r\n\r\n            // find the parallel face\r\n            XYZ normal = curveloop.GetPlane().Normal;\r\n\r\n            PlanarFace recessFace = null;\r\n            foreach (Face face in faces)\r\n            {\r\n               PlanarFace planarFace = face as PlanarFace;\r\n               if (planarFace != null && MathUtil.VectorsAreParallel(planarFace.FaceNormal, normal))\r\n               {\r\n                  if (recessFace == null)\r\n                     recessFace = planarFace;\r\n                  else\r\n                     throw new Exception(\"Can't handle.\");\r\n               }\r\n            }\r\n\r\n            if (recessFace != null)\r\n            {\r\n               EdgeArrayArray edgeLoops = recessFace.EdgeLoops;\r\n               if (edgeLoops.Size != 1)\r\n                  throw new Exception(\"Can't handle.\");\r\n\r\n               EdgeArray edges = edgeLoops.get_Item(0);\r\n\r\n               IList<Edge> recessFaceEdges = new List<Edge>();\r\n               foreach (Edge edge in edges)\r\n               {\r\n                  Face sideFace = edge.GetFace(0);\r\n                  if (sideFace == recessFace)\r\n                     sideFace = edge.GetFace(1);\r\n\r\n                  // there should be already one exist during above processing\r\n                  if (!boundaryCurvesInSameExistingFace.ContainsKey(sideFace))\r\n                     throw new Exception(\"Can't handle.\");\r\n                  boundaryCurvesInSameExistingFace[sideFace].Add(edge.AsCurve());\r\n               }\r\n            }\r\n         }\r\n         else if (boundaryCurves.Count == 2)\r\n         {\r\n            // might be an internal opening, process them later\r\n            // do nothing now\r\n         }\r\n         else if (boundaryCurves.Count == 3) //might be an opening on an edge\r\n         {\r\n            IList<Curve> curves1 = boundaryCurves.Values.ElementAt(0);\r\n            IList<Curve> curves2 = boundaryCurves.Values.ElementAt(1);\r\n            IList<Curve> curves3 = boundaryCurves.Values.ElementAt(2);\r\n\r\n            IList<Curve> firstValidCurves = null;\r\n            IList<Curve> secondValidCurves = null;\r\n\r\n            PlanarFace face1 = boundaryCurves.Keys.ElementAt(0) as PlanarFace;\r\n            PlanarFace face2 = boundaryCurves.Keys.ElementAt(1) as PlanarFace;\r\n            PlanarFace face3 = boundaryCurves.Keys.ElementAt(2) as PlanarFace;\r\n\r\n            if (face1 == null || face2 == null || face3 == null)\r\n            {\r\n               //Error\r\n               throw new Exception(\"Can't handle.\");\r\n            }\r\n\r\n            Face removedFace = null;\r\n\r\n            // find two parallel faces\r\n            if (MathUtil.VectorsAreParallel(face1.FaceNormal, face2.FaceNormal))\r\n            {\r\n               firstValidCurves = curves1;\r\n               secondValidCurves = curves2;\r\n               removedFace = face3;\r\n            }\r\n            else if (MathUtil.VectorsAreParallel(face1.FaceNormal, face3.FaceNormal))\r\n            {\r\n               firstValidCurves = curves1;\r\n               secondValidCurves = curves3;\r\n               removedFace = face2;\r\n            }\r\n            else if (MathUtil.VectorsAreParallel(face2.FaceNormal, face3.FaceNormal))\r\n            {\r\n               firstValidCurves = curves2;\r\n               secondValidCurves = curves3;\r\n               removedFace = face1;\r\n            }\r\n\r\n            // remove the third one and its edge curves\r\n            if (removedFace != null)\r\n            {\r\n               foreach (Curve curve in boundaryCurves[removedFace])\r\n               {\r\n                  foreach (KeyValuePair<Face, IList<Curve>> faceEdgePair in boundaryCurvesInSameExistingFace)\r\n                  {\r\n                     if (faceEdgePair.Value.Contains(curve))\r\n                        boundaryCurvesInSameExistingFace[faceEdgePair.Key].Remove(curve);\r\n                  }\r\n               }\r\n               boundaryCurves.Remove(removedFace);\r\n            }\r\n\r\n            // sew, “closing” them with a simple line\r\n            IList<IList<Curve>> curvesCollection = new List<IList<Curve>>();\r\n            if (firstValidCurves != null)\r\n               curvesCollection.Add(firstValidCurves);\r\n            if (secondValidCurves != null)\r\n               curvesCollection.Add(secondValidCurves);\r\n\r\n            foreach (IList<Curve> curves in curvesCollection)\r\n            {\r\n               if (curves.Count < 2) //not valid\r\n                  throw new Exception(\"Can't handle.\");\r\n\r\n               XYZ end0 = curves[0].GetEndPoint(0);\r\n               XYZ end1 = curves[0].GetEndPoint(1);\r\n\r\n               IList<Curve> processedCurves = new List<Curve>();\r\n               processedCurves.Add(curves[0]);\r\n               curves.Remove(curves[0]);\r\n\r\n               Curve nextCurve = null;\r\n               Curve preCurve = null;\r\n\r\n               // find the end points on the edges not connected\r\n               while (curves.Count > 0)\r\n               {\r\n                  foreach (Curve curve in curves)\r\n                  {\r\n                     XYZ curveEnd0 = curve.GetEndPoint(0);\r\n                     XYZ curveEnd1 = curve.GetEndPoint(1);\r\n                     if (end1.IsAlmostEqualTo(curveEnd0))\r\n                     {\r\n                        nextCurve = curve;\r\n                        end1 = curveEnd1;\r\n                        break;\r\n                     }\r\n                     else if (end0.IsAlmostEqualTo(curveEnd1))\r\n                     {\r\n                        preCurve = curve;\r\n                        end0 = curveEnd0;\r\n                        break;\r\n                     }\r\n                  }\r\n\r\n                  if (nextCurve != null)\r\n                  {\r\n                     processedCurves.Add(nextCurve);\r\n                     curves.Remove(nextCurve);\r\n                     nextCurve = null;\r\n                  }\r\n                  else if (preCurve != null)\r\n                  {\r\n                     processedCurves.Insert(0, preCurve);\r\n                     curves.Remove(preCurve);\r\n                     preCurve = null;\r\n                  }\r\n                  else\r\n                     throw new Exception(\"Can't process edges.\");\r\n               }\r\n\r\n               // connect them with a simple line\r\n               Curve newCurve = Line.CreateBound(end1, end0);\r\n               processedCurves.Add(newCurve);\r\n               if (!boundaryCurvesInSameExistingFace.ContainsKey(removedFace))\r\n                  boundaryCurvesInSameExistingFace[removedFace] = new List<Curve>();\r\n               boundaryCurvesInSameExistingFace[removedFace].Add(newCurve);\r\n               foreach (Curve curve in processedCurves)\r\n               {\r\n                  curves.Add(curve);\r\n               }\r\n            }\r\n         }\r\n         else\r\n            throw new Exception(\"Can't handle.\");\r\n\r\n         // now we should have 2 boundary curve loops\r\n         IList<Curve> firstCurves = boundaryCurves.Values.ElementAt(0);\r\n         IList<Curve> secondCurves = boundaryCurves.Values.ElementAt(1);\r\n         PlanarFace firstFace = boundaryCurves.Keys.ElementAt(0) as PlanarFace;\r\n         PlanarFace secondFace = boundaryCurves.Keys.ElementAt(1) as PlanarFace;\r\n\r\n         if (firstFace == null || secondFace == null)\r\n         {\r\n            //Error, can't handle this\r\n            throw new Exception(\"Can't handle.\");\r\n         }\r\n\r\n         if (firstCurves.Count != secondCurves.Count)\r\n         {\r\n            //Error, can't handle this\r\n            throw new Exception(\"Can't handle.\");\r\n         }\r\n\r\n         CurveLoop curveLoop1 = null;\r\n         CurveLoop curveLoop2 = null;\r\n\r\n         SortCurves(firstCurves);\r\n         curveLoop1 = CurveLoop.Create(firstCurves);\r\n         SortCurves(secondCurves);\r\n         curveLoop2 = CurveLoop.Create(secondCurves);\r\n\r\n         if (curveLoop1.IsOpen() || curveLoop2.IsOpen() || !curveLoop1.HasPlane() || !curveLoop2.HasPlane())\r\n         {\r\n            //Error, can't handle this\r\n            throw new Exception(\"Can't handle.\");\r\n         }\r\n\r\n         Plane plane1 = curveLoop1.GetPlane();\r\n         Plane plane2 = curveLoop2.GetPlane();\r\n\r\n         if (!curveLoop1.IsCounterclockwise(plane1.Normal))\r\n         {\r\n            curveLoop1.Flip();\r\n         }\r\n\r\n         if (!curveLoop2.IsCounterclockwise(plane2.Normal))\r\n         {\r\n            curveLoop2.Flip();\r\n         }\r\n\r\n         // Check that the faces are planar and parallel to each other.\r\n         // If the faces have normals that are parallel to the extrusion direction, it could be better to either:\r\n         // 1. export the opening as an IfcOpeningElement, or\r\n         // 2. add the boundary as an inner boundary of the extrusion.\r\n         // as these would be less sensitive to Boolean operation errors.\r\n         // This will be considered for a future improvement.\r\n\r\n         if (!MathUtil.VectorsAreParallel(plane1.Normal, plane2.Normal))\r\n         {\r\n            //Error, can't handle this\r\n            throw new Exception(\"Can't handle.\");\r\n         }\r\n\r\n         //get the distance\r\n         XYZ origDistance = plane1.Origin - plane2.Origin;\r\n         double planesDistance = Math.Abs(origDistance.DotProduct(plane1.Normal));\r\n\r\n         // check the curves on top and bottom profiles are “identical”\r\n         foreach (KeyValuePair<Face, IList<Curve>> faceEdgeCurvePair in boundaryCurvesInSameExistingFace)\r\n         {\r\n            IList<Curve> curves = faceEdgeCurvePair.Value;\r\n            if (curves.Count != 2)\r\n            {\r\n               //Error, can't handle this\r\n               throw new Exception(\"Can't handle.\");\r\n            }\r\n\r\n            Curve edgeCurve1 = curves[0];\r\n            Curve edgeCurve2 = curves[1];\r\n            Face sideFace = faceEdgeCurvePair.Key;\r\n\r\n            if (!MathUtil.IsAlmostEqual(edgeCurve1.GetEndPoint(0).DistanceTo(edgeCurve2.GetEndPoint(1)), planesDistance)\r\n              || !MathUtil.IsAlmostEqual(edgeCurve1.GetEndPoint(1).DistanceTo(edgeCurve2.GetEndPoint(0)), planesDistance))\r\n            {\r\n               //Error, can't handle this\r\n               throw new Exception(\"Can't handle.\");\r\n            }\r\n\r\n            if (edgeCurve1 is Line)\r\n            {\r\n               if (!(edgeCurve2 is Line) || !(sideFace is PlanarFace))\r\n               {\r\n                  //Error, can't handle this\r\n                  throw new Exception(\"Can't handle.\");\r\n               }\r\n            }\r\n            else if (edgeCurve1 is Arc)\r\n            {\r\n               if (!(edgeCurve2 is Arc) || !(sideFace is CylindricalFace))\r\n               {\r\n                  //Error, can't handle this\r\n                  throw new Exception(\"Can't handle.\");\r\n               }\r\n\r\n               Arc arc1 = edgeCurve1 as Arc;\r\n               Arc arc2 = edgeCurve2 as Arc;\r\n\r\n               if (!MathUtil.IsAlmostEqual(arc1.Center.DistanceTo(arc2.Center), planesDistance))\r\n               {\r\n                  //Error, can't handle this\r\n                  throw new Exception(\"Can't handle.\");\r\n               }\r\n\r\n               XYZ sideFaceAxis = (sideFace as CylindricalFace).Axis;\r\n               if (!MathUtil.VectorsAreOrthogonal(sideFaceAxis, extrusionDirection))\r\n               {\r\n                  throw new Exception(\"Can't handle.\");\r\n               }\r\n            }\r\n            else if (edgeCurve1 is Ellipse)\r\n            {\r\n               if (!(edgeCurve2 is Ellipse) || !(sideFace is RuledFace) || !(sideFace as RuledFace).RulingsAreParallel)\r\n               {\r\n                  //Error, can't handle this\r\n                  throw new Exception(\"Can't handle.\");\r\n               }\r\n\r\n               Ellipse ellipse1 = edgeCurve1 as Ellipse;\r\n               Ellipse ellipse2 = edgeCurve2 as Ellipse;\r\n\r\n               if (!MathUtil.IsAlmostEqual(ellipse1.Center.DistanceTo(ellipse2.Center), planesDistance)\r\n                   || !MathUtil.IsAlmostEqual(ellipse1.RadiusX, ellipse2.RadiusX) || !MathUtil.IsAlmostEqual(ellipse1.RadiusY, ellipse2.RadiusY))\r\n               {\r\n                  //Error, can't handle this\r\n                  throw new Exception(\"Can't handle.\");\r\n               }\r\n            }\r\n            else if (edgeCurve1 is HermiteSpline)\r\n            {\r\n               if (!(edgeCurve2 is HermiteSpline) || !(sideFace is RuledFace) || !(sideFace as RuledFace).RulingsAreParallel)\r\n               {\r\n                  //Error, can't handle this\r\n                  throw new Exception(\"Can't handle.\");\r\n               }\r\n\r\n               HermiteSpline hermiteSpline1 = edgeCurve1 as HermiteSpline;\r\n               HermiteSpline hermiteSpline2 = edgeCurve2 as HermiteSpline;\r\n\r\n               IList<XYZ> controlPoints1 = hermiteSpline1.ControlPoints;\r\n               IList<XYZ> controlPoints2 = hermiteSpline2.ControlPoints;\r\n\r\n               int controlPointCount = controlPoints1.Count;\r\n               if (controlPointCount != controlPoints2.Count)\r\n               {\r\n                  //Error, can't handle this\r\n                  throw new Exception(\"Can't handle.\");\r\n               }\r\n\r\n               for (int ii = 0; ii < controlPointCount; ii++)\r\n               {\r\n                  if (!MathUtil.IsAlmostEqual(controlPoints1[ii].DistanceTo(controlPoints2[controlPointCount - ii - 1]), planesDistance))\r\n                  {\r\n                     //Error, can't handle this\r\n                     throw new Exception(\"Can't handle.\");\r\n                  }\r\n               }\r\n\r\n               DoubleArray parameters1 = hermiteSpline1.Parameters;\r\n               DoubleArray parameters2 = hermiteSpline1.Parameters;\r\n\r\n               int parametersCount = parameters1.Size;\r\n               if (parametersCount != parameters2.Size)\r\n               {\r\n                  //Error, can't handle this\r\n                  throw new Exception(\"Can't handle.\");\r\n               }\r\n\r\n               for (int ii = 0; ii < parametersCount; ii++)\r\n               {\r\n                  if (!MathUtil.IsAlmostEqual(parameters1.get_Item(ii), parameters2.get_Item(ii)))\r\n                  {\r\n                     //Error, can't handle this\r\n                     throw new Exception(\"Can't handle.\");\r\n                  }\r\n               }\r\n            }\r\n            else if (edgeCurve1 is NurbSpline)\r\n            {\r\n               if (!(edgeCurve2 is NurbSpline) || !(sideFace is RuledFace) || !(sideFace as RuledFace).RulingsAreParallel)\r\n               {\r\n                  //Error, can't handle this\r\n                  throw new Exception(\"Can't handle.\");\r\n               }\r\n\r\n               NurbSpline nurbSpline1 = edgeCurve1 as NurbSpline;\r\n               NurbSpline nurbSpline2 = edgeCurve2 as NurbSpline;\r\n\r\n               IList<XYZ> controlPoints1 = nurbSpline1.CtrlPoints;\r\n               IList<XYZ> controlPoints2 = nurbSpline2.CtrlPoints;\r\n\r\n               int controlPointCount = controlPoints1.Count;\r\n               if (controlPointCount != controlPoints2.Count)\r\n               {\r\n                  //Error, can't handle this\r\n                  throw new Exception(\"Can't handle.\");\r\n               }\r\n\r\n               for (int i = 0; i < controlPointCount; i++)\r\n               {\r\n                  if (!MathUtil.IsAlmostEqual(controlPoints1[i].DistanceTo(controlPoints2[controlPointCount - i - 1]), planesDistance))\r\n                  {\r\n                     //Error, can't handle this\r\n                     throw new Exception(\"Can't handle.\");\r\n                  }\r\n               }\r\n\r\n               DoubleArray weights1 = nurbSpline1.Weights;\r\n               DoubleArray weights2 = nurbSpline2.Weights;\r\n\r\n               int weightsCount = weights1.Size;\r\n               if (weightsCount != weights2.Size)\r\n               {\r\n                  //Error, can't handle this\r\n                  throw new Exception(\"Can't handle.\");\r\n               }\r\n\r\n               for (int ii = 0; ii < weightsCount; ii++)\r\n               {\r\n                  if (!MathUtil.IsAlmostEqual(weights1.get_Item(ii), weights2.get_Item(ii)))\r\n                  {\r\n                     //Error, can't handle this\r\n                     throw new Exception(\"Can't handle.\");\r\n                  }\r\n               }\r\n\r\n               DoubleArray knots1 = nurbSpline1.Knots;\r\n               DoubleArray knots2 = nurbSpline2.Knots;\r\n\r\n               int knotsCount = knots1.Size;\r\n               if (knotsCount != knots2.Size)\r\n               {\r\n                  //Error, can't handle this\r\n                  throw new Exception(\"Can't handle.\");\r\n               }\r\n\r\n               for (int i = 0; i < knotsCount; i++)\r\n               {\r\n                  if (!MathUtil.IsAlmostEqual(knots1.get_Item(i), knots2.get_Item(i)))\r\n                  {\r\n                     //Error, can't handle this\r\n                     throw new Exception(\"Can't handle.\");\r\n                  }\r\n               }\r\n            }\r\n            else\r\n            {\r\n               //Error, can't handle this\r\n               throw new Exception(\"Can't handle.\");\r\n            }\r\n         }\r\n\r\n         XYZ extDir = plane2.Origin - plane1.Origin;\r\n         XYZ plane1Normal = plane1.Normal;\r\n         int vecParallel = MathUtil.VectorsAreParallel2(extDir, plane1Normal);\r\n         if (vecParallel == 1)\r\n         {\r\n            extDir = plane1Normal;\r\n         }\r\n         else if (vecParallel == -1)\r\n         {\r\n            extDir = -plane1Normal;\r\n         }\r\n         else\r\n            throw new Exception(\"Can't handle.\");\r\n\r\n         IList<CurveLoop> origCurveLoops = new List<CurveLoop>();\r\n         origCurveLoops.Add(curveLoop1);\r\n\r\n         double scaledPlanesDistance = UnitUtil.ScaleLength(planesDistance);\r\n         Transform plane1LCS = GeometryUtil.CreateTransformFromPlane(plane1);\r\n         IFCAnyHandle extrusionHandle = ExtrusionExporter.CreateExtrudedSolidFromCurveLoop(exporterIFC, null, origCurveLoops, plane1LCS, extDir, scaledPlanesDistance, false, out _);\r\n\r\n         IFCAnyHandle booleanBodyItemHnd = IFCInstanceExporter.CreateBooleanResult(exporterIFC.GetFile(), IFCBooleanOperator.Difference,\r\n             origBodyRepHnd, extrusionHandle);\r\n\r\n         return booleanBodyItemHnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Common method to create a poly line segment for an IfcCompositeCurve.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"points\">The line points.</param>\r\n      /// <param name=\"dim\">The dimensionality of the points, either 2 or 3.</param>\r\n      /// <returns>The handle.</returns>\r\n      static private IFCAnyHandle CreatePolyLineSegmentCommon(ExporterIFC exporterIFC, IList<XYZ> points, \r\n         Dimension dim)\r\n      {\r\n         if (exporterIFC == null || points == null)\r\n            throw new ArgumentNullException();\r\n\r\n         int count = points.Count;\r\n         if (count < 2)\r\n            throw new InvalidOperationException(\"Invalid polyline.\");\r\n\r\n         bool isClosed = points[0].IsAlmostEqualTo(points[count - 1]);\r\n         if (isClosed)\r\n            count--;\r\n\r\n         if (count < 2)\r\n            throw new InvalidOperationException(\"Invalid polyline.\");\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n         List<IFCAnyHandle> polyLinePoints = new List<IFCAnyHandle>();\r\n         for (int ii = 0; ii < count; ii++)\r\n         {\r\n            XYZ point = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, points[ii]);\r\n            IFCAnyHandle pointHandle = (dim == Dimension.Dim2D) ?\r\n               ExporterUtil.CreateCartesianPoint(file, new UV(point.X, point.Y)) :\r\n               ExporterUtil.CreateCartesianPoint(file, point); \r\n            polyLinePoints.Add(pointHandle);\r\n         }\r\n\r\n         if (isClosed)\r\n            polyLinePoints.Add(polyLinePoints[0]);\r\n\r\n         return IFCInstanceExporter.CreatePolyline(file, polyLinePoints);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a 2D or 3D IFC line segment for an IfcCompositeCurve from a Revit line object.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"line\">The line.</param>\r\n      /// <param name=\"dim\">The dimensionality, which can be 2 or 3.</param>\r\n      /// <returns>The line handle.</returns>\r\n      public static IFCAnyHandle CreateLineSegment(ExporterIFC exporterIFC, Line line, Dimension dim)\r\n      {\r\n         List<XYZ> points = [line.GetEndPoint(0), line.GetEndPoint(1)];\r\n         return CreatePolyLineSegmentCommon(exporterIFC, points, dim);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns an Ifc handle corresponding to the curve segment after processing its bounds, if any.\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFCFile handle.</param>\r\n      /// <param name=\"curveHnd\">The unbounded curve handle.</param>\r\n      /// <param name=\"curve\">The Revit curve to process.</param>\r\n      /// <returns>The original handle if the curve is unbound, or a new IfcTrimmedCurve handle if bounded.</returns>\r\n      /// <remarks>This routine expects that bounded curves are periodic curves with a periodicity of 2*PI.</remarks>\r\n      private static IFCAnyHandle CreateBoundsIfNecessary(IFCFile file, IFCAnyHandle curveHnd, Curve curve)\r\n      {\r\n         if (!curve.IsBound)\r\n            return curveHnd;\r\n\r\n         if (!curve.IsCyclic || !MathUtil.IsAlmostEqual(curve.Period, 2 * Math.PI))\r\n            throw new InvalidOperationException(\"Expected periodic curve with period of 2*PI.\");\r\n\r\n         double endParam0 = curve.GetEndParameter(0);\r\n         double endParam1 = curve.GetEndParameter(1);\r\n\r\n         IFCData firstParam = IFCDataUtil.CreateAsParameterValue(UnitUtil.ScaleAngle(MathUtil.PutInRange(endParam0, Math.PI, 2 * Math.PI)));\r\n         IFCData secondParam = IFCDataUtil.CreateAsParameterValue(UnitUtil.ScaleAngle(MathUtil.PutInRange(endParam1, Math.PI, 2 * Math.PI)));\r\n\r\n         // todo: check that firstParam != secondParam.\r\n         HashSet<IFCData> trim1 = new HashSet<IFCData>();\r\n         trim1.Add(firstParam);\r\n         HashSet<IFCData> trim2 = new HashSet<IFCData>();\r\n         trim2.Add(secondParam);\r\n\r\n         return IFCInstanceExporter.CreateTrimmedCurve(file, curveHnd, trim1, trim2, true, IFCTrimmingPreference.Parameter);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFC arc segment for an IfcCompositeCurve from a Revit arc object.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"arc\">The arc.</param>\r\n      /// <param name=\"dim\">The dimensionality of the points, either 2 or 3.</param>\r\n      /// <returns>The arc handle.</returns>\r\n      public static IFCAnyHandle CreateArcSegment(ExporterIFC exporterIFC, Arc arc, Dimension dim)\r\n      {\r\n         double arcRadius = UnitUtil.ScaleLength(arc.Radius);\r\n         if (!IFCInstanceExporter.ValidateCircle(arcRadius))\r\n         {\r\n            return null;\r\n         }\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         XYZ centerPoint = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, arc.Center);\r\n\r\n         XYZ xDirection = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, arc.XDirection);\r\n         IFCAnyHandle axis = (dim == Dimension.Dim2D) ?\r\n            ExporterUtil.CreateAxis2Placement2D(file, centerPoint, xDirection) :\r\n            ExporterUtil.CreateAxis2Placement3D(file, centerPoint, arc.Normal, xDirection);\r\n         IFCAnyHandle circle = IFCInstanceExporter.CreateCircle(file, axis, arcRadius);\r\n         return CreateBoundsIfNecessary(file, circle, arc);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFC ellipse segment for an IfcCompositeCurve from a Revit ellipse object.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"ellipticalArc\">The elliptical arc.</param>\r\n      /// <param name=\"dim\">The dimensionality of the points, either 2 or 3.</param>\r\n      /// <returns>The ellipse handle.</returns>\r\n      public static IFCAnyHandle CreateEllipticalArcSegment(ExporterIFC exporterIFC, Ellipse ellipticalArc,\r\n         Dimension dim)\r\n      {\r\n         double ellipseRadiusX = UnitUtil.ScaleLength(ellipticalArc.RadiusX);\r\n         double ellipseRadiusY = UnitUtil.ScaleLength(ellipticalArc.RadiusY);\r\n         if (!IFCInstanceExporter.ValidateEllipse(ellipseRadiusX, ellipseRadiusY))\r\n         {\r\n            return null;\r\n         }\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         XYZ centerPoint = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, ellipticalArc.Center);\r\n\r\n         XYZ xDirection = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, ellipticalArc.XDirection);\r\n         IFCAnyHandle axis = (dim == Dimension.Dim2D) ?\r\n           ExporterUtil.CreateAxis2Placement2D(file, centerPoint, xDirection) :\r\n           ExporterUtil.CreateAxis2Placement3D(file, centerPoint, ellipticalArc.Normal, xDirection);\r\n         IFCAnyHandle ellipse = IFCInstanceExporter.CreateEllipse(file, axis, ellipseRadiusX, ellipseRadiusY);\r\n         return CreateBoundsIfNecessary(file, ellipse, ellipticalArc);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFC composite curve from an array of curves.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"curves\">The curves.</param>\r\n      /// <param name=\"dim\">The dimensionality of the points, either 2 or 3.</param>\r\n      /// <returns>The IfcCompositeCurve handle.</returns>\r\n      /// <remarks>This function tessellates all curve types except lines, arcs, and ellipses.</remarks>\r\n      private static IFCAnyHandle CreateCompositeCurve(ExporterIFC exporterIFC, IList<Curve> curves, Dimension dim)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         List<IFCAnyHandle> segments = new List<IFCAnyHandle>();\r\n         foreach (Curve curve in curves)\r\n         {\r\n            if (curve == null)\r\n               continue;\r\n\r\n            IFCAnyHandle curveHandle = null;\r\n            if (curve is Line line)\r\n            {\r\n               curveHandle = CreateLineSegment(exporterIFC, line, dim);\r\n            }\r\n            else if (curve is Arc arc)\r\n            {\r\n               curveHandle = CreateArcSegment(exporterIFC, arc, dim);\r\n            }\r\n            else if (curve is Ellipse ellipse)\r\n            {\r\n               curveHandle = CreateEllipticalArcSegment(exporterIFC, ellipse, dim);\r\n            }\r\n            else\r\n            {\r\n               IList<XYZ> points = curve.Tessellate();\r\n               curveHandle = CreatePolyLineSegmentCommon(exporterIFC, points, dim);\r\n            }\r\n\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(curveHandle))\r\n            {\r\n               segments.Add(IFCInstanceExporter.CreateCompositeCurveSegment(file, IFCTransitionCode.Continuous, true, curveHandle));\r\n            }\r\n         }\r\n\r\n         if (segments.Count > 0)\r\n         {\r\n            return IFCInstanceExporter.CreateCompositeCurve(file, segments, IFCLogical.False);\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFC composite or indexed curve from an array of curves.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"curves\">The list of curves.</param>\r\n      /// <param name=\"lcs\">The local coordinate system whose XY plane the curves are projected on.</param>\r\n      /// <param name=\"projDir\">The project direction.</param>\r\n      /// <returns>The created curve.</returns>\r\n      public static IFCAnyHandle CreateCompositeOrIndexedCurve(ExporterIFC exporterIFC, IList<Curve> curves, Transform lcs, XYZ projDir)\r\n      {\r\n         IFCAnyHandle compositeCurve;\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n         {\r\n            compositeCurve = CreatePolyCurveFromCurveLoop(exporterIFC, curves, lcs, projDir);\r\n         }\r\n         else\r\n         {\r\n            Dimension dim = (lcs == null) ? Dimension.Dim3D : Dimension.Dim2D;\r\n            compositeCurve = CreateCompositeCurve(exporterIFC, curves, dim);\r\n         }\r\n\r\n         return compositeCurve;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IfcSweptDiskSolid from a base curve.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporterIFC class.</param>\r\n      /// <param name=\"file\">The IFCFile.</param>\r\n      /// <param name=\"centerCurve\">The directrix of the sweep.</param>\r\n      /// <param name=\"radius\">The outer radius.</param>\r\n      /// <param name=\"innerRadius\">The optional inner radius.</param>\r\n      /// <returns>The IfcSweptDiskSolid.</returns>\r\n      public static IFCAnyHandle CreateSweptDiskSolid(ExporterIFC exporterIFC, IFCFile file, Curve centerCurve, double radius, double? innerRadius)\r\n      {\r\n         if (centerCurve == null || radius < MathUtil.Eps() || (innerRadius.HasValue && innerRadius.Value > radius - MathUtil.Eps()))\r\n            return null;\r\n\r\n         IList<Curve> curves = new List<Curve>();\r\n         double endParam = 0.0;\r\n         if (centerCurve is Arc || centerCurve is Ellipse)\r\n         {\r\n            if (centerCurve.IsBound)\r\n               endParam = UnitUtil.ScaleAngle(centerCurve.GetEndParameter(1) - centerCurve.GetEndParameter(0));\r\n            else\r\n               endParam = UnitUtil.ScaleAngle(2 * Math.PI);\r\n         }\r\n         else\r\n            endParam = 1.0;\r\n         curves.Add(centerCurve);\r\n\r\n         IFCAnyHandle compositeCurve = GeometryUtil.CreateCompositeOrIndexedCurve(exporterIFC, curves, null, null);\r\n         return IFCInstanceExporter.CreateSweptDiskSolid(file, compositeCurve, radius, innerRadius, 0, endParam);\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Sorts curves to allow CurveLoop creation that means each curve end must meet next curve start.\r\n      /// </summary>\r\n      /// <param name=\"curves\">The curves.</param>\r\n      public static void SortCurves(IList<Curve> curves)\r\n      {\r\n         IList<Curve> sortedCurves = new List<Curve>();\r\n         Curve currentCurve = curves[0];\r\n         sortedCurves.Add(currentCurve);\r\n\r\n         bool found = false;\r\n\r\n         do\r\n         {\r\n            found = false;\r\n            for (int i = 1; i < curves.Count; i++)\r\n            {\r\n               Curve curve = curves[i];\r\n               if (currentCurve.GetEndPoint(1).IsAlmostEqualTo(curve.GetEndPoint(0)))\r\n               {\r\n                  sortedCurves.Add(curve);\r\n                  currentCurve = curve;\r\n                  found = true;\r\n                  break;\r\n               }\r\n            }\r\n         } while (found);\r\n\r\n         if (sortedCurves.Count != curves.Count)\r\n            throw new InvalidOperationException(\"Failed to sort curves.\");\r\n\r\n         // add back\r\n         curves.Clear();\r\n         foreach (Curve curve in sortedCurves)\r\n         {\r\n            curves.Add(curve);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the color RGB values from color integer value.\r\n      /// </summary>\r\n      /// <param name=\"color\">The color integer value</param>\r\n      /// <param name=\"blueValue\">The blue value.</param>\r\n      /// <param name=\"greenValue\">The green value.</param>\r\n      /// <param name=\"redValue\">The red value.</param>\r\n      public static void GetRGBFromIntValue(int color, out double blueValue, out double greenValue, out double redValue)\r\n      {\r\n         blueValue = ((double)((color & 0xff0000) >> 16)) / 255.0;\r\n         greenValue = ((double)((color & 0xff00) >> 8)) / 255.0;\r\n         redValue = ((double)(color & 0xff)) / 255.0;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets bounding box of geometries.\r\n      /// </summary>\r\n      /// <param name=\"geometryList\">The geometries.</param>\r\n      /// <returns>The bounding box.</returns>\r\n      public static BoundingBoxXYZ GetBBoxOfGeometries(IList<GeometryObject> geometryList)\r\n      {\r\n         BoundingBoxXYZ bbox = new BoundingBoxXYZ();\r\n         bool bboxIsSet = false;\r\n         bbox.Min = new XYZ(1, 1, 1);\r\n         bbox.Max = new XYZ(0, 0, 0);\r\n\r\n         foreach (GeometryObject geomObject in geometryList)\r\n         {\r\n            BoundingBoxXYZ localBbox = null;\r\n            if (geomObject is GeometryElement)\r\n            {\r\n               localBbox = (geomObject as GeometryElement).GetBoundingBox();\r\n            }\r\n            else if (geomObject is Solid)\r\n            {\r\n               localBbox = (geomObject as Solid).GetBoundingBox();\r\n            }\r\n\r\n            if (localBbox != null)\r\n            {\r\n               Transform trf = localBbox.Transform;\r\n\r\n               XYZ origMin = bbox.Min;\r\n               XYZ origMax = bbox.Max;\r\n               XYZ localMin = trf.OfPoint(localBbox.Min);\r\n               XYZ localMax = trf.OfPoint(localBbox.Max);\r\n               if (bboxIsSet)\r\n               {\r\n                  double newCornerX, newCornerY, newCornerZ;\r\n                  newCornerX = Math.Min(origMin.X, localMin.X);\r\n                  newCornerY = Math.Min(origMin.Y, localMin.Y);\r\n                  newCornerZ = Math.Min(origMin.Z, localMin.Z);\r\n                  bbox.Min = new XYZ(newCornerX, newCornerY, newCornerZ);\r\n                  newCornerX = Math.Max(origMax.X, localMax.X);\r\n                  newCornerY = Math.Max(origMax.Y, localMax.Y);\r\n                  newCornerZ = Math.Max(origMax.Z, localMax.Z);\r\n                  bbox.Max = new XYZ(newCornerX, newCornerY, newCornerZ);\r\n               }\r\n               else\r\n               {\r\n                  bboxIsSet = true;\r\n                  bbox.Min = localMin;\r\n                  bbox.Max = localMax;\r\n               }\r\n            }\r\n         }\r\n\r\n         if (!bboxIsSet)\r\n            return null;\r\n\r\n         if (bbox.Min.X > bbox.Max.X || bbox.Min.Y > bbox.Max.Y || bbox.Min.Z > bbox.Max.Z)\r\n            return null;\r\n\r\n         return bbox;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets a scaled transform.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <returns>The transform.</returns>\r\n      public static Transform GetScaledTransform(ExporterIFC exporterIFC)\r\n      {\r\n         XYZ scaledOrigin = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, XYZ.Zero);\r\n         XYZ scaledXDir = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, XYZ.BasisX);\r\n         XYZ scaledYDir = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, XYZ.BasisY);\r\n         XYZ scaledZDir = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, XYZ.BasisZ);\r\n\r\n         Transform scaledTrf = Transform.Identity;\r\n         scaledTrf.Origin = scaledOrigin;\r\n         scaledTrf.BasisX = scaledXDir;\r\n         scaledTrf.BasisY = scaledYDir;\r\n         scaledTrf.BasisZ = scaledZDir;\r\n\r\n         return scaledTrf;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets ratios of a direction.\r\n      /// </summary>\r\n      /// <param name=\"dirHandle\">The direction handle.</param>\r\n      /// <returns>The XYZ represents the ratios.</returns>\r\n      public static XYZ GetDirectionRatios(IFCAnyHandle dirHandle)\r\n      {\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(dirHandle))\r\n         {\r\n            List<double> ratios = IFCAnyHandleUtil.GetAggregateDoubleAttribute<List<double>>(dirHandle, \"DirectionRatios\");\r\n            int size = ratios.Count;\r\n            double x = size > 0 ? ratios[0] : 0;\r\n            double y = size > 1 ? ratios[1] : 0;\r\n            double z = size > 2 ? ratios[2] : 0;\r\n            return new XYZ(x, y, z);\r\n         }\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets coordinates of a point.\r\n      /// </summary>\r\n      /// <param name=\"cartesianPoint\">The point handle.</param>\r\n      /// <returns>The XYZ represents coordinates.</returns>\r\n      public static XYZ GetCoordinates(IFCAnyHandle cartesianPoint)\r\n      {\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(cartesianPoint))\r\n         {\r\n            List<double> ratios = IFCAnyHandleUtil.GetAggregateDoubleAttribute<List<double>>(cartesianPoint, \"Coordinates\");\r\n            int size = ratios.Count;\r\n            double x = size > 0 ? ratios[0] : 0;\r\n            double y = size > 1 ? ratios[1] : 0;\r\n            double z = size > 2 ? ratios[2] : 0;\r\n            return new XYZ(x, y, z);\r\n         }\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if a CurveLoop is inside another CurveLoop.\r\n      /// </summary>\r\n      /// <param name=\"innerLoop\">The inner loop.</param>\r\n      /// <param name=\"outerLoop\">The outer loop.</param>\r\n      /// <returns>True if the CurveLoop is inside the other CurveLoop.</returns>\r\n      public static bool CurveLoopsInside(CurveLoop innerLoop, CurveLoop outerLoop)\r\n      {\r\n         if (innerLoop == null || outerLoop == null)\r\n            return false;\r\n\r\n         if (!innerLoop.HasPlane() || !outerLoop.HasPlane() || outerLoop.IsOpen())\r\n            return false;\r\n\r\n         XYZ outerOrigin = outerLoop.GetPlane().Origin;\r\n         XYZ outerNormal = outerLoop.GetPlane().Normal;\r\n\r\n         foreach (Curve innerCurve in innerLoop)\r\n         {\r\n            XYZ innerCurveEnd0 = innerCurve.GetEndPoint(0);\r\n\r\n            XYZ outerOriginToEnd0 = innerCurveEnd0 - outerOrigin;\r\n            if (!MathUtil.VectorsAreOrthogonal(outerOriginToEnd0, outerNormal))\r\n               return false;\r\n\r\n            Line line0 = Line.CreateBound(innerCurveEnd0, outerOrigin);\r\n            foreach (Curve outerCurve in outerLoop)\r\n            {\r\n               if (SetComparisonResult.Overlap == line0.Intersect(outerCurve, CurveIntersectResultOption.Simple)?.Result)\r\n               {\r\n                  return false;\r\n               }\r\n            }\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if a CurveLoop intersects with another CurveLoop.\r\n      /// </summary>\r\n      /// <param name=\"loop1\">The CurveLoop.</param>\r\n      /// <param name=\"loop2\">The CurveLoop.</param>\r\n      /// <returns>True if the CurveLoop intersects with the other CurveLoop.</returns>\r\n      public static bool CurveLoopsIntersect(CurveLoop loop1, CurveLoop loop2)\r\n      {\r\n         if (loop1 == null || loop2 == null)\r\n            return false;\r\n\r\n         foreach (Curve curve1 in loop1)\r\n         {\r\n            foreach (Curve curve2 in loop2)\r\n            {\r\n               if (SetComparisonResult.Overlap != curve1.Intersect(curve2, CurveIntersectResultOption.Simple)?.Result)\r\n               {\r\n                  return true;\r\n               }\r\n            }\r\n         }\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Computes height and width of a curve loop with respect to a projection plane.\r\n      /// </summary>\r\n      /// <param name=\"curveLoop\">The curve loop.</param>\r\n      /// <param name=\"lcs\">The local coordinate system whose XY plane the represents the projection plane.</param>\r\n      /// <param name=\"height\">The height.</param>\r\n      /// <param name=\"width\">The width.</param>\r\n      /// <returns>True if success, false if fail.</returns>\r\n      public static bool ComputeHeightWidthOfCurveLoop(CurveLoop curveLoop, Transform lcs, out double height, out double width)\r\n      {\r\n         height = 0.0;\r\n         width = 0.0;\r\n\r\n         Plane localPlane = null;\r\n         try\r\n         {\r\n            localPlane = CreatePlaneFromTransformNearOrigin(lcs);\r\n         }\r\n         catch\r\n         {\r\n            return false;\r\n         }\r\n\r\n         if (localPlane == null)\r\n         {\r\n            try\r\n            {\r\n               localPlane = curveLoop.GetPlane();\r\n            }\r\n            catch\r\n            {\r\n               return false;\r\n            }\r\n         }\r\n\r\n         if (curveLoop.IsRectangular(localPlane))\r\n         {\r\n            height = curveLoop.GetRectangularHeight(localPlane);\r\n            width = curveLoop.GetRectangularWidth(localPlane);\r\n            return true;\r\n         }\r\n         else\r\n            return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Computes the height and width of a CurveLoop.\r\n      /// </summary>\r\n      /// <param name=\"curveLoop\">The CurveLoop.</param>\r\n      /// <param name=\"height\">The height.</param>\r\n      /// <param name=\"width\">The width.</param>\r\n      /// <returns>True if gets the values successfully.</returns>\r\n      public static bool ComputeHeightWidthOfCurveLoop(CurveLoop curveLoop, XYZ expectedWidthDir, out double height, out double width)\r\n      {\r\n         bool result = false;\r\n         height = width = 0;\r\n\r\n         if (!curveLoop.HasPlane())\r\n            return result;\r\n\r\n         Plane plane = curveLoop.GetPlane();\r\n         Transform lcs = CreateTransformFromPlane(plane);\r\n\r\n         result = ComputeHeightWidthOfCurveLoop(curveLoop, lcs, out height, out width);\r\n\r\n         // The plane might be flipped. Swap height and width in this case\r\n         if (expectedWidthDir != null && MathUtil.VectorsAreParallel(expectedWidthDir, plane.YVec))\r\n            (height, width) = (width, height);\r\n\r\n         return result;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Computes the area defined by a polygonal loop.\r\n      /// </summary>\r\n      /// <param name=\"loop\">The polygonal loop.</param>\r\n      /// <param name=\"normal\">The normal of the face.</param>\r\n      /// <param name=\"refPoint\">Reference point for area computation.</param>\r\n      /// <returns>The area.</returns>\r\n      public static double ComputePolygonalLoopArea(IList<XYZ> loop, XYZ normal, XYZ refPoint)\r\n      {\r\n         double area = 0.0;\r\n         int numVertices = loop.Count;\r\n         for (int ii = 0; ii < numVertices; ii++)\r\n         {\r\n            XYZ currEdge = loop[(ii + 1) % numVertices] - loop[ii];\r\n            double length = currEdge.GetLength();\r\n\r\n            XYZ heightVec = normal.CrossProduct(currEdge).Normalize();\r\n            XYZ otherEdge = refPoint - loop[ii];\r\n            double height = heightVec.DotProduct(otherEdge);\r\n            area += (length * height);\r\n         }\r\n         return area / 2.0;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the volume of a solid, if it is possible.\r\n      /// </summary>\r\n      /// <param name=\"solid\">The solid.</param>\r\n      /// <returns>The volume of the solid, or null if it can't be determined.</returns>\r\n      public static double? GetSafeVolume(Solid solid)\r\n      {\r\n         try\r\n         {\r\n            return solid?.Volume ?? null;\r\n         }\r\n         catch\r\n         {\r\n            return null;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IFC curve from curve loop.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"curveLoop\">The curve loop.</param>\r\n      /// <param name=\"lcs\">The local coordinate system whose XY plane the curves are projected on.</param>\r\n      /// <param name=\"projDir\">The project direction.</param>\r\n      /// <returns>The created curve.</returns>\r\n      public static IFCAnyHandle CreateIFCCurveFromCurveLoop(ExporterIFC exporterIFC, CurveLoop curveLoop, Transform lcs, XYZ projDir)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         List<IFCAnyHandle> segments = new List<IFCAnyHandle>();\r\n         List<UV> polylinePts = new List<UV>(); // for simple case\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n         {\r\n            return CreatePolyCurveFromCurveLoop(exporterIFC, curveLoop.ToList(), lcs, projDir);\r\n         }\r\n         else\r\n         {\r\n            bool useSimpleBoundary = false;\r\n            if (!AllowComplexBoundary(lcs.BasisZ, projDir, curveLoop, null))\r\n               useSimpleBoundary = true;\r\n\r\n            foreach (Curve curve in curveLoop)\r\n            {\r\n               bool success = ProcessCurve(exporterIFC, curve, lcs, projDir, useSimpleBoundary,\r\n                polylinePts, segments);\r\n               if (!success)\r\n                  return null;\r\n            }\r\n\r\n            bool needToClose = false;\r\n            if (useSimpleBoundary)\r\n            {\r\n               int sz = polylinePts.Count;\r\n               if (sz < 2)\r\n                  return null;\r\n\r\n               // Original CurveLoop may have been is closed.\r\n               // Only remove the last point in polylinePoints if it really is the same as the first.\r\n               if (!curveLoop.IsOpen())\r\n               {\r\n                  if (polylinePts[0].IsAlmostEqualTo(polylinePts[polylinePts.Count - 1]))\r\n                  {\r\n                     polylinePts.RemoveAt(sz - 1);\r\n                  }\r\n                  needToClose = true;\r\n               }\r\n            }\r\n\r\n            return CreateCurveFromComponents(file, useSimpleBoundary, needToClose, polylinePts, segments);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IFC curve from curve array.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"curves\">The curves.</param>\r\n      /// <param name=\"lcs\">The local coordinate system whose XY plane the curves are projected on.</param>\r\n      /// <param name=\"projDir\">The project direction.</param>\r\n      /// <returns>The created curve.</returns>\r\n      public static IFCAnyHandle CreateIFCCurveFromCurves(ExporterIFC exporterIFC, IList<Curve> curves, Transform lcs, XYZ projDir)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         List<IFCAnyHandle> segments = new List<IFCAnyHandle>();\r\n         List<UV> polylinePts = new List<UV>(); // for simple case\r\n\r\n         bool useSimpleBoundary = false;\r\n         if (!AllowComplexBoundary(lcs.BasisZ, projDir, null, curves))\r\n            useSimpleBoundary = true;\r\n\r\n         foreach (Curve curve in curves)\r\n         {\r\n            bool success = ProcessCurve(exporterIFC, curve, lcs, projDir, useSimpleBoundary,\r\n             polylinePts, segments);\r\n            if (!success)\r\n               return null;\r\n         }\r\n\r\n         bool needToClose = false;\r\n         if (useSimpleBoundary)\r\n         {\r\n            int polySz = polylinePts.Count;\r\n            if (polySz > 2)\r\n            {\r\n               if (MathUtil.IsAlmostEqual(polylinePts[0][0], polylinePts[polySz - 1][0]) && MathUtil.IsAlmostEqual(polylinePts[0][1], polylinePts[polySz - 1][1]))\r\n               {\r\n                  needToClose = true;\r\n                  polylinePts.RemoveAt(polySz - 1);\r\n               }\r\n            }\r\n         }\r\n\r\n         return CreateCurveFromComponents(file, useSimpleBoundary, needToClose, polylinePts, segments);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets polyline points or curve segments from a curve.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"curve\">The curve.</param>\r\n      /// <param name=\"lcs\">The local coordinate system whose XY vectors represent the plane on which the curve is projected.</param>\r\n      /// <param name=\"projectDir\">The project direction.</param>\r\n      /// <param name=\"useSimpleBoundary\">True if to create tessellated curve, false to create segments.</param>\r\n      /// <param name=\"polylinePoints\">The polyline points get from the curve.</param>\r\n      /// <param name=\"curveSegments\">The curve segments get from the curve.</param>\r\n      /// <returns>True if process successfully.</returns>\r\n      public static bool ProcessCurve(ExporterIFC exporterIFC, Curve curve, Transform lcs, XYZ projectDir, bool useSimpleBoundary,\r\n          List<UV> polylinePoints, List<IFCAnyHandle> curveSegments)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         bool exportAs2x2 = ExporterCacheManager.ExportOptionsCache.ExportAs2x2;\r\n\r\n         if (!useSimpleBoundary)\r\n         {\r\n            XYZ zDir = lcs.BasisZ;\r\n            if (exportAs2x2 && !MathUtil.IsAlmostEqual(Math.Abs(zDir.DotProduct(projectDir)), 1.0))\r\n            {\r\n               useSimpleBoundary = true;\r\n            }\r\n         }\r\n\r\n         if (useSimpleBoundary)\r\n         {\r\n            IList<UV> currPts = new List<UV>();\r\n\r\n            IList<XYZ> points = curve.Tessellate();\r\n            foreach (XYZ point in points)\r\n            {\r\n               UV projectPoint = GeometryUtil.ProjectPointToXYPlaneOfLCS(lcs, projectDir, point);\r\n               if (projectPoint == null)\r\n                  return false;\r\n               currPts.Add(UnitUtil.ScaleLength(projectPoint));\r\n            }\r\n\r\n            // polylinePoints is accumulating projected points.\r\n            // currPts are the points from the current curve.\r\n            // If there are currently no points in polylinePoints --> just add all currPts to polylinePoints.\r\n            if (polylinePoints.Count == 0)\r\n            {\r\n               polylinePoints.AddRange(currPts);\r\n            }\r\n            else\r\n            {\r\n               // Otherwise look at both ends of both collections.\r\n               UV lastPolylinePoint = polylinePoints[polylinePoints.Count - 1];\r\n               UV firstPolylinePoint = polylinePoints[0];\r\n               UV lastCurrPt = currPts[currPts.Count - 1];\r\n               UV firstCurrPt = currPts[0];\r\n\r\n               if (lastPolylinePoint.IsAlmostEqualTo(firstCurrPt))\r\n               {\r\n                  currPts.RemoveAt(0);\r\n                  polylinePoints.AddRange(currPts);\r\n               }\r\n               else if (lastPolylinePoint.IsAlmostEqualTo(lastCurrPt))\r\n               {\r\n                  currPts.Reverse();\r\n                  currPts.RemoveAt(0);\r\n                  polylinePoints.AddRange(currPts);\r\n               }\r\n               else if (firstPolylinePoint.IsAlmostEqualTo(firstCurrPt))\r\n               {\r\n                  currPts.Reverse();\r\n                  polylinePoints.RemoveAt(0);\r\n                  polylinePoints.InsertRange(0, currPts);\r\n               }\r\n               else if (firstPolylinePoint.IsAlmostEqualTo(lastCurrPt))\r\n               {\r\n                  polylinePoints.RemoveAt(0);\r\n                  polylinePoints.InsertRange(0, currPts);\r\n               }\r\n               else\r\n               {\r\n                  // Default:  just add currPts to the end.\r\n                  polylinePoints.AddRange(currPts);\r\n               }\r\n            }\r\n         }\r\n         else\r\n         {\r\n            IFCGeometryInfo info = IFCGeometryInfo.CreateCurveGeometryInfo(exporterIFC, lcs, projectDir, false);\r\n            ExporterIFCUtils.CollectGeometryInfo(exporterIFC, info, curve, XYZ.Zero, false);\r\n            IList<IFCAnyHandle> curves = info.GetCurves();\r\n            if (curves.Count != 1 || !IFCAnyHandleUtil.IsSubTypeOf(curves[0], IFCEntityType.IfcBoundedCurve))\r\n               return false;\r\n\r\n            IFCAnyHandle boundedCurve = curves[0];\r\n\r\n            bool mustFlip = MustFlipCurve(lcs, curve);\r\n            curveSegments.Add(IFCInstanceExporter.CreateCompositeCurveSegment(file, IFCTransitionCode.Continuous, !mustFlip, boundedCurve));\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      static UV ScaledUVListFromXYZ(XYZ thePoint, Transform lcs, XYZ projectDir)\r\n      {\r\n         UV projectPoint = GeometryUtil.ProjectPointToXYPlaneOfLCS(lcs, projectDir, thePoint);\r\n         return UnitUtil.ScaleLength(projectPoint);\r\n      }\r\n\r\n      private static double DistanceSquaredBetweenVertices(XYZ coord1, XYZ coord2)\r\n      {\r\n         var dX = coord1.X - coord2.X;\r\n         var dY = coord1.Y - coord2.Y;\r\n         var dZ = coord1.Z - coord2.Z;\r\n\r\n         return dX * dX + dY * dY + dZ * dZ;\r\n      }\r\n      private static double DistanceSquaredBetweenVertices(UV coord1, UV coord2)\r\n      {\r\n         var dU = coord1.U - coord2.U;\r\n         var dV = coord1.V - coord2.V;\r\n\r\n         return dU * dU + dV * dV;\r\n      }\r\n\r\n      private static bool CoordsAreWithinVertexTol(PointBase coord1, PointBase coord2)\r\n      {\r\n         double vertexTol = UnitUtil.ScaleLength(ExporterCacheManager.Document.Application.VertexTolerance);\r\n         Point3D coord13D = coord1 as Point3D;\r\n         Point3D coord23D = coord2 as Point3D;\r\n         if (coord13D != null && coord23D != null)\r\n            return (DistanceSquaredBetweenVertices(coord13D.coords, coord23D.coords) < vertexTol * vertexTol);\r\n         Point2D coord12D = coord1 as Point2D;\r\n         Point2D coord22D = coord2 as Point2D;\r\n         if (coord12D != null && coord22D != null)\r\n            return (DistanceSquaredBetweenVertices(coord12D.coords, coord22D.coords) < vertexTol * vertexTol);\r\n\r\n         throw new ArgumentException(\"Invalid Point type\");\r\n      }\r\n      private static bool CoordsAreWithinVertexTol(XYZ coord1, XYZ coord2)\r\n      {\r\n         double vertexTol = UnitUtil.ScaleLength(ExporterCacheManager.Document.Application.VertexTolerance);\r\n         return (DistanceSquaredBetweenVertices(coord1, coord2) < vertexTol * vertexTol);\r\n      }\r\n      private static bool CoordsAreWithinVertexTol(UV coord1, UV coord2)\r\n      {\r\n         double vertexTol = UnitUtil.ScaleLength(ExporterCacheManager.Document.Application.VertexTolerance);\r\n         return (DistanceSquaredBetweenVertices(coord1, coord2) < vertexTol * vertexTol);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create IFC4 IfcIndexedPolyCurve from Revit Curve\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">the ExporterIFC</param>\r\n      /// <param name=\"curve\">the Revit curve</param>\r\n      /// <param name=\"lcs\">Transform for the LCS (default=null)</param>\r\n      /// <param name=\"projectDir\">Projection direction (default=null)</param>\r\n      /// <returns>IFCAnyHandle for the created IfcIndexedPolyCurve</returns>\r\n      public static IFCAnyHandle CreatePolyCurveFromCurve(ExporterIFC exporterIFC, Curve curve, Transform lcs = null, XYZ projectDir = null)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         PrimVertices vertices = PointListFromCurve(exporterIFC, curve, lcs, projectDir);\r\n         // Points from the curve may have been merged after projection, so skip curves that\r\n         // won't add any new points.\r\n         if (vertices == null)\r\n            return null;\r\n\r\n         PolyCurve polyCurve = new PolyCurve(vertices);\r\n         polyCurve.BuildVerticesAndIndices();\r\n         IList<SegmentIndices> segmentsIndices = polyCurve.SegmentsIndices;\r\n\r\n         IFCAnyHandle pointListHnd = IFCInstanceExporter.CreateCartesianPointList(file, polyCurve.PointList);\r\n         return IFCInstanceExporter.CreateIndexedPolyCurve(file, pointListHnd, segmentsIndices, false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a IFC4 IfcIndexedPolyCurve from a Revit CurveLoop\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporterIFC context.</param>\r\n      /// <param name=\"curves\">Curves.</param>\r\n      /// <param name=\"lcs\">The local coordinate system transform.</param>\r\n      /// <param name=\"projectDir\">The projection direction.</param>\r\n      /// <returns>The IfcIndexedPolyCurve handle, or null if it couldn't be created.</returns>\r\n      public static IFCAnyHandle CreatePolyCurveFromCurveLoop(ExporterIFC exporterIFC, IList<Curve> curves,\r\n         Transform lcs, XYZ projectDir)\r\n      {\r\n         if (curves.Count() == 0)\r\n            return null;\r\n\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         PolyCurve polyCurve = null;\r\n         foreach (Curve curve in curves)\r\n         {\r\n            PrimVertices vertices = PointListFromCurve(exporterIFC, curve, lcs, projectDir);\r\n            // Points from the curve may have been merged after projection, so skip curves that\r\n            // won't add any new points.\r\n            if (vertices == null)\r\n               continue;\r\n\r\n            if (polyCurve == null)\r\n               polyCurve = new PolyCurve(vertices);\r\n            else if (!polyCurve.AddPrimVertices(vertices))\r\n               return null;\r\n         }\r\n\r\n         polyCurve.BuildVerticesAndIndices();\r\n         IList<SegmentIndices> segmentsIndices = polyCurve.SegmentsIndices;\r\n\r\n         IFCAnyHandle pointListHnd = IFCInstanceExporter.CreateCartesianPointList(file, polyCurve.PointList);\r\n         return IFCInstanceExporter.CreateIndexedPolyCurve(file, pointListHnd, segmentsIndices, false);\r\n      }\r\n\r\n      private static PrimVertices PointListFromCurve(ExporterIFC exporterIFC, Curve curve,\r\n         Transform lcs, XYZ projectDir)\r\n      {\r\n         if (curve == null)\r\n            return null;\r\n\r\n         if (curve is Line)\r\n            return PointListFromLine(exporterIFC, curve as Line, lcs, projectDir);\r\n\r\n         if (curve is Arc)\r\n            return PointListFromArc(exporterIFC, curve as Arc, lcs, projectDir);\r\n\r\n         return PointListFromGenericCurve(exporterIFC, curve, lcs, projectDir);\r\n      }\r\n\r\n      private static PolyLineVertices PointListFromLine(ExporterIFC exporterIFC, Line line,\r\n         Transform lcs, XYZ projectDir)\r\n      {\r\n         bool use3DPoint = (lcs == null || projectDir == null);\r\n\r\n         if (use3DPoint)\r\n         {\r\n            XYZ startPoint = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, line.GetEndPoint(0));\r\n            XYZ endPoint = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, line.GetEndPoint(1));\r\n            // Avoid consecutive duplicates\r\n            if (CoordsAreWithinVertexTol(startPoint, endPoint))\r\n               return null;\r\n\r\n            return new PolyLineVertices(startPoint, endPoint);\r\n         }\r\n         else\r\n         {\r\n            var startPoint = ScaledUVListFromXYZ(line.GetEndPoint(0), lcs, projectDir);\r\n            var endPoint = ScaledUVListFromXYZ(line.GetEndPoint(1), lcs, projectDir);\r\n            // Avoid consecutive duplicates\r\n            if (CoordsAreWithinVertexTol(startPoint, endPoint))\r\n               return null;\r\n\r\n            return new PolyLineVertices(startPoint, endPoint);\r\n         }\r\n      }\r\n\r\n      private static PrimVertices PointListFromArc(ExporterIFC exporterIFC, Arc arc,\r\n         Transform lcs, XYZ projectDir)\r\n      {\r\n         bool use3DPoint = (lcs == null || projectDir == null);\r\n\r\n         if (use3DPoint && arc.IsBound)\r\n         {\r\n            XYZ startPoint = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, arc.Evaluate(0, true));\r\n            XYZ midPoint = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, arc.Evaluate(0.5, true));\r\n            XYZ endPoint = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, arc.Evaluate(1, true));\r\n\r\n            return new ArcVertices(startPoint, midPoint, endPoint);\r\n         }\r\n         else\r\n         {\r\n            //If arc's normal is parallel to projection direction and Z axis of lcs then projected arc will be of correct shape.\r\n            //That is why it can be defined by 3 points: start, mid, end.\r\n            if (MathUtil.VectorsAreParallel(arc.Normal, projectDir) && MathUtil.VectorsAreParallel(lcs.BasisZ, projectDir) && arc.IsBound)\r\n            {\r\n               var startPoint = ScaledUVListFromXYZ(arc.Evaluate(0, true), lcs, projectDir);\r\n               var midPoint = ScaledUVListFromXYZ(arc.Evaluate(0.5, true), lcs, projectDir);\r\n               var endPoint = ScaledUVListFromXYZ(arc.Evaluate(1, true), lcs, projectDir);\r\n\r\n               return new ArcVertices(startPoint, midPoint, endPoint);\r\n            }\r\n\r\n            //Handle cases when Arc is a circle (arc.IsBound == false) or projected arc is of incorrect shape\r\n            //and cannot be defined by 3 points. Tesselate it in this case.\r\n            List<XYZ> pointList3D = new List<XYZ>();\r\n            List<UV> pointList2D = new List<UV>();\r\n\r\n            // An integer value is used here to get an accurate interval the value ranges from\r\n            // 0 to 90 or 100 percent, depending on whether the arc is bound or not.\r\n            int normalizedEnd = arc.IsBound ? 10 : 9;\r\n            XYZ lastPoint3D = null;\r\n            UV lastPoint2D = null;\r\n            for (int ii = 0; ii <= normalizedEnd; ++ii)\r\n            {\r\n               XYZ tessellationPt = arc.Evaluate(ii / 10.0, arc.IsBound);\r\n               if (use3DPoint)\r\n               {\r\n                  XYZ point = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, tessellationPt);\r\n\r\n                  // Avoid consecutive duplicates\r\n                  if (lastPoint3D == null || !CoordsAreWithinVertexTol(point, lastPoint3D))\r\n                  {\r\n                     pointList3D.Add(point);\r\n                     lastPoint3D = point;\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  var point2D = ScaledUVListFromXYZ(tessellationPt, lcs, projectDir);\r\n\r\n                  // Avoid consecutive duplicates\r\n                  if (lastPoint2D == null || !CoordsAreWithinVertexTol(point2D, lastPoint2D))\r\n                  {\r\n                     pointList2D.Add(point2D);\r\n                     lastPoint2D = point2D;\r\n                  }\r\n               }\r\n            }\r\n\r\n            if (pointList3D != null && pointList3D.Count >= 2)\r\n               return new PolyLineVertices(pointList3D);\r\n            else if (pointList2D != null && pointList2D.Count >= 2)\r\n               return new PolyLineVertices(pointList2D);\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      private static PolyLineVertices PointListFromGenericCurve(ExporterIFC exporterIFC,\r\n         Curve curve, Transform lcs, XYZ projectDir)\r\n      {\r\n         bool use3DPoint = (lcs == null || projectDir == null);\r\n\r\n         List<XYZ> listXYZ = new List<XYZ>();\r\n         List<UV> listUV = new List<UV>();\r\n\r\n         IList<XYZ> tessellatedCurve = curve.Tessellate();\r\n         var pointsCount = tessellatedCurve.Count;\r\n         for (int ii = 0; ii < pointsCount; ++ii)\r\n         {\r\n            if (use3DPoint)\r\n            {\r\n               var point = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, tessellatedCurve[ii]);\r\n               // Avoid consecutive duplicates\r\n               if (listXYZ.Count == 0 || !CoordsAreWithinVertexTol(point, listXYZ.Last()))\r\n                  listXYZ.Add(point);\r\n            }\r\n            else\r\n            {\r\n               var point = ScaledUVListFromXYZ(tessellatedCurve[ii], lcs, projectDir);\r\n               // Avoid consecutive duplicates\r\n               if (listUV.Count == 0 || !CoordsAreWithinVertexTol(point, listUV.Last()))\r\n                  listUV.Add(point);\r\n            }\r\n         }\r\n\r\n         if (listXYZ != null && listXYZ.Count >= 2)\r\n            return new PolyLineVertices(listXYZ);\r\n         else if (listUV != null && listUV.Count >= 2)\r\n            return new PolyLineVertices(listUV);\r\n\r\n         return null;\r\n      }\r\n\r\n      static private bool AllowedCurveForAllowComplexBoundary(Curve curve)\r\n      {\r\n         if (curve == null)\r\n            return false;\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            return true;\r\n\r\n         return ((curve is Line) || (curve is Arc) || (curve is Ellipse));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if complex boundary is allowed for the CurveLoop or the curve array. \r\n      /// </summary>\r\n      /// <param name=\"zDir\">The normal of the plane to project on.</param>\r\n      /// <param name=\"projDir\">The project direction.</param>\r\n      /// <param name=\"curveLoop\">The curve loop.</param>\r\n      /// <param name=\"curves\">The curve array.</param>\r\n      /// <returns>True if complex boundary is allowed.</returns>\r\n      static bool AllowComplexBoundary(XYZ zDir, XYZ projDir, CurveLoop curveLoop, IList<Curve> curves)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && !MathUtil.IsAlmostEqual(Math.Abs(zDir.DotProduct(projDir)), 1.0))\r\n            return false;\r\n\r\n         // Checks below are for IFC2x3 or earlier only.\r\n         if (curveLoop != null)\r\n         {\r\n            bool allLines = true;\r\n\r\n            foreach (Curve curve in curveLoop)\r\n            {\r\n               if (!AllowedCurveForAllowComplexBoundary(curve))\r\n                  return false;\r\n               if (!(curve is Line))\r\n                  allLines = false;\r\n            }\r\n\r\n            if (allLines)\r\n               return false;\r\n         }\r\n\r\n         if (curves != null)\r\n         {\r\n            bool allLines = true;\r\n\r\n            foreach (Curve curve in curves)\r\n            {\r\n               if (!AllowedCurveForAllowComplexBoundary(curve))\r\n                  return false;\r\n               if (!(curve is Line))\r\n                  allLines = false;\r\n            }\r\n\r\n            if (allLines)\r\n               return false;\r\n\r\n            if (allLines)\r\n               return false;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFC curve from polyline points or curve segments.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <param name=\"useSimpleBoundary\">True to use simple boundary.</param>\r\n      /// <param name=\"needToClose\">True if the curve needs to be close.</param>\r\n      /// <param name=\"pts\">The polyline points.</param>\r\n      /// <param name=\"segments\">The curve segments.</param>\r\n      /// <param mame=\"filterDuplicates\">Filter duplicate points.  Example use case:  curves projected </param>\r\n      /// <returns>The created IFC curve.</returns>\r\n      static IFCAnyHandle CreateCurveFromComponents(IFCFile file, bool useSimpleBoundary, bool needToClose, IList<UV> pts, IList<IFCAnyHandle> segments)\r\n      {\r\n         IFCAnyHandle profileCurve;\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n         {\r\n            IList<IList<double>> coords = new List<IList<double>>();\r\n            foreach (UV pt in pts)\r\n            {\r\n               IList<double> uvPoint = new List<double>();\r\n               uvPoint.Add(pt.U);\r\n               uvPoint.Add(pt.V);\r\n               coords.Add(uvPoint);\r\n            }\r\n            if (coords.Count < 2)\r\n               return null;\r\n\r\n            IFCAnyHandle coordsHnd = IFCInstanceExporter.CreateCartesianPointList2D(file, coords);\r\n            profileCurve = IFCInstanceExporter.CreateIndexedPolyCurve(file, coordsHnd, null, false);\r\n            return profileCurve;\r\n         }\r\n\r\n         if (useSimpleBoundary)\r\n         {\r\n            int sz = pts.Count;\r\n            if (sz < 2)\r\n               return null;\r\n\r\n            int uniqueUVFuzzyCompare(UV first, UV second)\r\n            {\r\n               if (first == null)\r\n               {\r\n                  return (second == null) ? 0 : -1;\r\n               }\r\n\r\n               if (second == null)\r\n               {\r\n                  return 1;\r\n               }\r\n\r\n               if (!first.IsAlmostEqualTo(second))\r\n               {\r\n                  double tolerance = ExporterCacheManager.LengthPrecision;\r\n                  for (int ii = 0; ii < 2; ii++)\r\n                  {\r\n                     double diff = first[ii] - second[ii];\r\n                     if (diff < -tolerance)\r\n                        return -1;\r\n                     if (diff > tolerance)\r\n                        return 1;\r\n                  }\r\n               }\r\n\r\n               return 0;\r\n            }\r\n\r\n            SortedSet<UV> uniqueSet = new(Comparer<UV>.Create(uniqueUVFuzzyCompare));\r\n            List<UV> uniquePoints = new();\r\n            foreach (UV pt in pts)\r\n            {\r\n               if (uniqueSet.Contains(pt))\r\n                  continue;\r\n\r\n               uniqueSet.Add(pt);\r\n               uniquePoints.Add(pt);\r\n            }\r\n\r\n            IList<IFCAnyHandle> polyLinePts = new List<IFCAnyHandle>();\r\n            foreach (UV pt in uniquePoints)\r\n            {\r\n               polyLinePts.Add(ExporterUtil.CreateCartesianPoint(file, pt));\r\n            }\r\n\r\n            if (needToClose)\r\n               polyLinePts.Add(polyLinePts[0]);\r\n\r\n            if (polyLinePts.Count < 2)\r\n               return null;\r\n\r\n            profileCurve = IFCInstanceExporter.CreatePolyline(file, polyLinePts);\r\n         }\r\n         else\r\n         {\r\n            profileCurve = IFCInstanceExporter.CreateCompositeCurve(file, segments, IFCLogical.False);\r\n         }\r\n         return profileCurve;\r\n      }\r\n\r\n      public class TriangleDictionaryComparer : IComparer<XYZ>\r\n      {\r\n         public int Compare(XYZ first, XYZ second)\r\n         {\r\n            const double tol = TriangleMergeUtil.Tolerance;\r\n\r\n            if (first == null)\r\n               return (second == null) ? 0 : -1;\r\n            if (second == null)\r\n               return 1;\r\n\r\n            for (int ii = 0; ii < 3; ii++)\r\n            {\r\n               double diff = first[ii] - second[ii];\r\n               if (diff < -tol)\r\n                  return -1;\r\n               if (diff > tol)\r\n                  return 1;\r\n            }\r\n            return 0;\r\n         }\r\n      }\r\n\r\n      public class TriangleDictionary\r\n      {\r\n         public SortedDictionary<XYZ, int> VertexMap { get; } = new SortedDictionary<XYZ, int>(new TriangleDictionaryComparer());\r\n      }\r\n\r\n      /// <summary>\r\n      /// Function to process list of triangles set into an indexed triangles format for Tessellated geometry\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file.</param>\r\n      /// <param name=\"triangleList\">The list of triangles.</param>\r\n      /// <returns>An IFC handle for an IfcTriangulatedFaceSet.</returns>\r\n      public static IFCAnyHandle GetIndexedTriangles(IFCFile file, List<List<XYZ>> triangleList)\r\n      {\r\n         TriangleDictionary vertexMap = new();\r\n\r\n         IList<IList<int>> triangleIndices = new List<IList<int>>();\r\n\r\n         if (triangleList.Count == 0)\r\n            return null;\r\n\r\n         int count = 1;\r\n         foreach (List<XYZ> triangle in triangleList)\r\n         {\r\n            // This is probably overkill since we expect triangle to have 3 entries.\r\n            // However, noting actually ensures that, and this should be fast anyway.\r\n            ISet<int> usedIndices = new HashSet<int>(3);\r\n            bool addCurrent = true;\r\n\r\n            // Create triangle index and insert the index list of 3 into the triangle index list\r\n            List<int> currentTriangleIndices = new List<int>();\r\n            foreach (XYZ vertex in triangle)\r\n            {\r\n               int index;\r\n               if (!vertexMap.VertexMap.TryGetValue(vertex, out index))\r\n               {\r\n                  // Point not found, insert the point into the list\r\n                  vertexMap.VertexMap[vertex] = count;\r\n                  index = count++;\r\n               }\r\n\r\n               if (usedIndices.Contains(index))\r\n               {\r\n                  // Triangle has a 0 length side, within tolerance.  Don't add.\r\n                  addCurrent = false;\r\n                  break;\r\n               }\r\n               usedIndices.Add(index);\r\n\r\n               //!!! The index starts at 1 (and not 0) following X3D standard\r\n               currentTriangleIndices.Add(index);\r\n            }\r\n\r\n            if (addCurrent)\r\n               triangleIndices.Add(currentTriangleIndices);\r\n         }\r\n\r\n         // Didn't add anything.\r\n         int mapCount = vertexMap.VertexMap.Count;\r\n         if (mapCount == 0 || triangleIndices.Count == 0)\r\n            return null;\r\n\r\n         List<IList<double>> coordList = new();\r\n         CollectionsMarshal.SetCount(coordList, mapCount);\r\n\r\n         foreach (KeyValuePair<XYZ, int> vertexAndIndex in vertexMap.VertexMap)\r\n         {\r\n            XYZ vertex = vertexAndIndex.Key;\r\n            int index = vertexAndIndex.Value - 1;\r\n            coordList[index] = new List<double> { vertex.X, vertex.Y, vertex.Z };\r\n         }\r\n\r\n         IFCAnyHandle coordPointLists = IFCInstanceExporter.CreateCartesianPointList3D(file, coordList);\r\n\r\n         IFCAnyHandle triangulatedItem = IFCInstanceExporter.CreateTriangulatedFaceSet(file, coordPointLists, null, null, triangleIndices, null);\r\n\r\n         return triangulatedItem;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check if two bounding boxes overlap. \r\n      /// </summary>\r\n      /// <param name=\"originalBox1\">The first bounding box.</param>\r\n      /// <param name=\"originalBox2\">The second bounding box.</param>\r\n      /// <returns>True if originalBox1 overlaps with originalBox2.</returns>\r\n      /// <remarks>\r\n      /// If the given bounding boxes are transformed, then this function will create two \r\n      /// axes-aligned bounding boxes of these two boxes in the model coordinate system, \r\n      /// and then check if the two new bounding boxes.  This could result in false-positive\r\n      /// results in some cases.\r\n      /// </remarks>\r\n      public static bool BoundingBoxesOverlap(BoundingBoxXYZ originalBox1, BoundingBoxXYZ originalBox2)\r\n      {\r\n         if ((originalBox1 == null || !originalBox1.Enabled || originalBox2 == null || !originalBox2.Enabled))\r\n            return false;\r\n\r\n         BoundingBoxXYZ bbox1 = BoundingBoxInModelCoordinate(originalBox1);\r\n         BoundingBoxXYZ bbox2 = BoundingBoxInModelCoordinate(originalBox2);\r\n\r\n         if (bbox1 == null || bbox2 == null)\r\n            return false;\r\n\r\n         // We want bbox1 to be such that for all of X, Y and Z, either\r\n         // min or max is inside the bbox2 range.\r\n         return (bbox1.Max.X >= bbox2.Min.X) && (bbox1.Min.X <= bbox2.Max.X)\r\n             && (bbox1.Max.Y >= bbox2.Min.Y) && (bbox1.Min.Y <= bbox2.Max.Y)\r\n             && (bbox1.Max.Z >= bbox2.Min.Z) && (bbox1.Min.Z <= bbox2.Max.Z);\r\n      }\r\n\r\n      // return the bounding box in model coordinate of the given box\r\n      private static BoundingBoxXYZ BoundingBoxInModelCoordinate(BoundingBoxXYZ bbox)\r\n      {\r\n         if (bbox == null)\r\n            return null;\r\n\r\n         double[] xVals = new double[] { bbox.Min.X, bbox.Max.X };\r\n         double[] yVals = new double[] { bbox.Min.Y, bbox.Max.Y };\r\n         double[] zVals = new double[] { bbox.Min.Z, bbox.Max.Z };\r\n\r\n         XYZ toTest;\r\n\r\n         double minX, minY, minZ, maxX, maxY, maxZ;\r\n         minX = minY = minZ = double.MaxValue;\r\n         maxX = maxY = maxZ = double.MinValue;\r\n\r\n         // Get the max and min coordinate from the 8 vertices\r\n         for (int iX = 0; iX < 2; iX++)\r\n         {\r\n            for (int iY = 0; iY < 2; iY++)\r\n            {\r\n               for (int iZ = 0; iZ < 2; iZ++)\r\n               {\r\n                  toTest = bbox.Transform.OfPoint(new XYZ(xVals[iX], yVals[iY], zVals[iZ]));\r\n                  minX = Math.Min(minX, toTest.X);\r\n                  minY = Math.Min(minY, toTest.Y);\r\n                  minZ = Math.Min(minZ, toTest.Z);\r\n\r\n                  maxX = Math.Max(maxX, toTest.X);\r\n                  maxY = Math.Max(maxY, toTest.Y);\r\n                  maxZ = Math.Max(maxZ, toTest.Z);\r\n               }\r\n            }\r\n         }\r\n\r\n         BoundingBoxXYZ returnBox = new BoundingBoxXYZ();\r\n         returnBox.Max = new XYZ(maxX, maxY, maxZ);\r\n         returnBox.Min = new XYZ(minX, minY, minZ);\r\n\r\n         return returnBox;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Organizes the edge loops of a face in groups of one outer loop and its corresponding inner loops.\r\n      /// </summary>\r\n      /// <param name=\"face\">The input face</param>\r\n      /// <returns></returns>\r\n      public static List<(EdgeArray outerLoop, List<EdgeArray>)> GetOuterLoopsWithInnerLoops(Face face)\r\n      {\r\n         EdgeArrayArray edgeLoops = face.EdgeLoops;\r\n         int numLoops = edgeLoops?.Size ?? 0;\r\n         if (numLoops == 0)\r\n         {\r\n            return [];\r\n         }\r\n\r\n         if (numLoops == 1)\r\n         {\r\n            // If there is only one loop, return it as the outer loop with no inner loops.\r\n            return [(edgeLoops.get_Item(0), [])];\r\n         }\r\n\r\n         IList<IList<int>> sortedLoops = ExporterIFCUtils.SortFaceEdges(face);\r\n         if (sortedLoops == null)\r\n         {\r\n            return [];\r\n         }\r\n\r\n         int numSortedLoops = 0;\r\n         foreach (IList<int> edgeIndices in sortedLoops)\r\n         {\r\n            numSortedLoops += edgeIndices.Count;\r\n         }\r\n         \r\n         if (numSortedLoops != numLoops)\r\n         {\r\n            // If the number of sorted loops does not match the number of edge loops, return an empty list.\r\n            return [];\r\n         }\r\n\r\n         List<(EdgeArray outerLoop, List<EdgeArray>)> sortedEdgeLoops = [];\r\n         foreach (IList<int> edgeIndices in sortedLoops)\r\n         {\r\n            EdgeArray outerEdgeArray = null;\r\n            List<EdgeArray> innerEdgeArrays = [];\r\n\r\n            foreach (int index in edgeIndices)\r\n            {\r\n               EdgeArray edgeArray = edgeLoops.get_Item(index);\r\n               if (index < 0 || index >= numLoops)\r\n               {\r\n                  // If we have an invalid index or edge array, abort trying to sort the loops.\r\n                  return [];\r\n               }\r\n\r\n               if (outerEdgeArray == null)\r\n               {\r\n                  // The first edge array we encounter is the outer loop.\r\n                  outerEdgeArray = edgeArray;\r\n                  continue;\r\n               }\r\n\r\n               // Any subsequent edge arrays are inner loops.\r\n               innerEdgeArrays.Add(edgeArray);\r\n            }\r\n\r\n            sortedEdgeLoops.Add((outerEdgeArray, innerEdgeArrays));\r\n         }\r\n\r\n         return sortedEdgeLoops;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create IFCCurve from the given curve\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"exporterIFC\">The exporter</param>\r\n      /// <param name=\"curve\">The curve that needs to convert to IFCCurve</param>\r\n      /// <param name=\"allowAdvancedCurve\">If true, don't tessellate non-lines and non-arcs.</param>\r\n      /// <param name=\"cartesianPoints\">A map of already created cartesian points, to avoid duplication.</param>\r\n      /// <param name=\"trimCurvePreference\">An indication of how to create the curve.</param>\r\n      /// <returns>The handle representing the IFCCurve</returns>\r\n      /// <remarks>This cartesianPoints map caches certain 3D points computed by this function that are related to the \r\n      /// curve, such as the start point of a line and the center of an arc.  It uses the cached values when possible.</remarks>\r\n      public static IFCAnyHandle CreateIFCCurveFromRevitCurve(IFCFile file, \r\n         ExporterIFC exporterIFC, Curve curve, bool allowAdvancedCurve,\r\n         IDictionary<IFCFuzzyXYZ, IFCAnyHandle> cartesianPoints,\r\n         TrimCurvePreference trimCurvePreference)\r\n      {\r\n         IFCAnyHandle ifcCurve = null;\r\n         bool create2d = trimCurvePreference == TrimCurvePreference.Use2DPolyLineOrTrim;\r\n         Dimension dim = create2d ? Dimension.Dim2D : Dimension.Dim3D;\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\r\n         {\r\n            Transform lcs = create2d ? Transform.Identity : null;\r\n            PrimVertices vertices = PointListFromCurve(exporterIFC, curve, lcs, null);\r\n            // Points from the curve may have been merged after projection, so skip curves that\r\n            // won't add any new points.\r\n            if (vertices == null)\r\n               return null;\r\n\r\n            PolyCurve polyCurve = new PolyCurve(vertices);\r\n            polyCurve.BuildVerticesAndIndices();\r\n            IList<SegmentIndices> segmentsIndices = polyCurve.SegmentsIndices;\r\n\r\n            IFCAnyHandle pointListHnd = IFCInstanceExporter.CreateCartesianPointList(file, polyCurve.PointList);\r\n            return IFCInstanceExporter.CreateIndexedPolyCurve(file, pointListHnd, segmentsIndices, false);\r\n         }\r\n\r\n         // if the Curve is a line, do the following\r\n         if (curve is Line)\r\n         {\r\n            // Unbounded line doesn't make sense, skip if somehow it is \r\n            if (!curve.IsBound)\r\n               return null;\r\n\r\n            Line curveLine = curve as Line;\r\n            switch (trimCurvePreference)\r\n            {\r\n               case TrimCurvePreference.UsePolyLineOrTrim:\r\n               case TrimCurvePreference.Use2DPolyLineOrTrim:\r\n                  ifcCurve = CreateLineSegment(exporterIFC, curveLine, dim);\r\n                  break;\r\n               default:\r\n                  // Create line based trimmed curve for Axis\r\n                  IFCAnyHandle curveOrigin = XYZtoIfcCartesianPoint(exporterIFC, curveLine.Origin, cartesianPoints, dim);\r\n                  XYZ dir = curveLine.Direction;\r\n                  IFCAnyHandle vector = VectorToIfcVector(exporterIFC, dir);\r\n                  ifcCurve = IFCInstanceExporter.CreateLine(file, curveOrigin, vector);\r\n\r\n                  if (trimCurvePreference == TrimCurvePreference.TrimmedCurve)\r\n                  {\r\n                     IFCAnyHandle startPoint = XYZtoIfcCartesianPoint(exporterIFC, curveLine.GetEndPoint(0), cartesianPoints, dim);\r\n                     HashSet<IFCData> trim1 = new HashSet<IFCData>() { IFCData.CreateIFCAnyHandle(startPoint) };\r\n                     IFCAnyHandle endPoint = XYZtoIfcCartesianPoint(exporterIFC, curveLine.GetEndPoint(1), cartesianPoints, dim);\r\n                     HashSet<IFCData> trim2 = new HashSet<IFCData>() { IFCData.CreateIFCAnyHandle(endPoint) };\r\n\r\n                     ifcCurve = IFCInstanceExporter.CreateTrimmedCurve(file, ifcCurve, trim1, trim2, true, IFCTrimmingPreference.Cartesian);\r\n                  }\r\n                  break;\r\n            }\r\n         }\r\n         // if the Curve is an Arc do following\r\n         else if (curve is Arc)\r\n         {\r\n            Arc curveArc = curve as Arc;\r\n            double radius = UnitUtil.ScaleLength(curveArc.Radius);\r\n            if (!IFCInstanceExporter.ValidateCircle(radius))\r\n            {\r\n               return null;\r\n            }\r\n\r\n            // Normal and x direction should be transformed to IFC coordinates before applying additional transform\r\n            // arc center will be transformed later in XYZtoIfcCartesianPoint\r\n            XYZ curveArcNormal = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, curveArc.Normal);\r\n            XYZ curveArcXDirection = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, curveArc.XDirection);\r\n\r\n            XYZ curveArcCenter = curveArc.Center;\r\n\r\n            if (curveArcCenter == null || curveArcNormal == null || curveArcXDirection == null)\r\n            {\r\n               // encounter invalid curve, return null\r\n               return null;\r\n            }\r\n\r\n            if (create2d && !MathUtil.IsAlmostEqual(curveArcNormal.Z, 1.0))\r\n            {\r\n               return null;\r\n            }\r\n\r\n            IFCAnyHandle origin = XYZtoIfcCartesianPoint(exporterIFC, curveArcCenter, cartesianPoints, dim);\r\n\r\n            // Create the x-direction\r\n            // No need to transform to IFC coordinates anymore\r\n            IFCAnyHandle refDirection = ExporterUtil.CreateDirection(file, curveArcXDirection, dim);\r\n\r\n            // Create the z-direction\r\n            // No need to transform to IFC coordinates anymore\r\n            IFCAnyHandle axis = create2d ? null : ExporterUtil.CreateDirection(file, curveArcNormal, dim);\r\n\r\n            IFCAnyHandle position3D = create2d ? \r\n               IFCInstanceExporter.CreateAxis2Placement2D(file, origin, refDirection) :\r\n               IFCInstanceExporter.CreateAxis2Placement3D(file, origin, axis, refDirection);\r\n\r\n            ifcCurve = IFCInstanceExporter.CreateCircle(file, position3D, radius);\r\n\r\n            if (trimCurvePreference != TrimCurvePreference.BaseCurve && curve.IsBound)\r\n            {\r\n               IFCAnyHandle startPoint = XYZtoIfcCartesianPoint(exporterIFC, curveArc.GetEndPoint(0), cartesianPoints, dim);\r\n               HashSet<IFCData> trim1 = new() { IFCData.CreateIFCAnyHandle(startPoint) };\r\n\r\n               IFCAnyHandle endPoint = XYZtoIfcCartesianPoint(exporterIFC, curveArc.GetEndPoint(1), cartesianPoints, dim);\r\n               HashSet<IFCData> trim2 = new() { IFCData.CreateIFCAnyHandle(endPoint) };\r\n\r\n               ifcCurve = IFCInstanceExporter.CreateTrimmedCurve(file, ifcCurve, trim1, trim2, true, \r\n                  IFCTrimmingPreference.Cartesian);\r\n            }\r\n         }\r\n         // If curve is an ellipse or elliptical Arc type\r\n         else if (curve is Ellipse)\r\n         {\r\n            Ellipse curveEllipse = curve as Ellipse;\r\n            double semiAxis1 = UnitUtil.ScaleLength(curveEllipse.RadiusX);\r\n            double semiAxis2 = UnitUtil.ScaleLength(curveEllipse.RadiusY);\r\n            if (!IFCInstanceExporter.ValidateEllipse(semiAxis1, semiAxis2))\r\n            {\r\n               return null;\r\n            }\r\n\r\n            // Normal and x direction should be transformed to IFC coordinates before applying additional transform\r\n            XYZ ellipseNormal = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, curveEllipse.Normal);\r\n            XYZ ellipseXDirection = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, curveEllipse.XDirection);\r\n\r\n            if (create2d && !MathUtil.IsAlmostEqual(ellipseNormal.Z, 1.0))\r\n            {\r\n               return null;\r\n            }\r\n\r\n            IFCAnyHandle location = XYZtoIfcCartesianPoint(exporterIFC, curveEllipse.Center, cartesianPoints, dim);\r\n\r\n            // No need to transform to IFC coordinates anymore\r\n            IFCAnyHandle axis = create2d ? null : ExporterUtil.CreateDirection(file, ellipseNormal, dim);\r\n\r\n            // Create the x-direction\r\n            // No need to transform to IFC coordinates anymore\r\n            IFCAnyHandle refDirection = ExporterUtil.CreateDirection(file, ellipseXDirection, dim);\r\n\r\n            IFCAnyHandle position = create2d ?\r\n               IFCInstanceExporter.CreateAxis2Placement2D(file, location, refDirection) :\r\n               IFCInstanceExporter.CreateAxis2Placement3D(file, location, axis, refDirection);\r\n\r\n            ifcCurve = IFCInstanceExporter.CreateEllipse(file, position, semiAxis1, semiAxis2);\r\n\r\n            if (trimCurvePreference != TrimCurvePreference.BaseCurve && curve.IsBound)\r\n            {\r\n               IFCAnyHandle startPoint = XYZtoIfcCartesianPoint(exporterIFC, curveEllipse.GetEndPoint(0), cartesianPoints, dim);\r\n               HashSet<IFCData> trim1 = new() { IFCData.CreateIFCAnyHandle(startPoint) };\r\n\r\n               IFCAnyHandle endPoint = XYZtoIfcCartesianPoint(exporterIFC, curveEllipse.GetEndPoint(1), cartesianPoints, dim);\r\n               HashSet<IFCData> trim2 = new() { IFCData.CreateIFCAnyHandle(endPoint) };\r\n\r\n               ifcCurve = IFCInstanceExporter.CreateTrimmedCurve(file, ifcCurve, trim1, trim2, true, IFCTrimmingPreference.Cartesian);\r\n            }\r\n         }\r\n         else if (allowAdvancedCurve && (curve is HermiteSpline || curve is NurbSpline))\r\n         {\r\n            if (create2d)\r\n            {\r\n               // HermiteSpline and NurbSpline not supported.\r\n               return null;\r\n            }\r\n\r\n            NurbSpline nurbSpline = null;\r\n            if (curve is HermiteSpline)\r\n            {\r\n               nurbSpline = NurbSpline.Create(curve as HermiteSpline);\r\n               if (nurbSpline == null)\r\n               {\r\n                  throw new InvalidOperationException(\"Cannot convert this hermite spline to nurbs\");\r\n               }\r\n            }\r\n            else\r\n            {\r\n               nurbSpline = curve as NurbSpline;\r\n            }\r\n\r\n            int degree = nurbSpline.Degree;\r\n            IList<XYZ> controlPoints = nurbSpline.CtrlPoints;\r\n            IList<IFCAnyHandle> controlPointsInIfc = new List<IFCAnyHandle>();\r\n            foreach (XYZ xyz in controlPoints)\r\n            {\r\n               controlPointsInIfc.Add(XYZtoIfcCartesianPoint(exporterIFC, xyz, cartesianPoints, dim));\r\n            }\r\n\r\n            // Based on IFC4 specification, curveForm is for information only, leave it as UNSPECIFIED for now.\r\n            Toolkit.IFC4.IFCBSplineCurveForm curveForm = Toolkit.IFC4.IFCBSplineCurveForm.UNSPECIFIED;\r\n\r\n            IFCLogical closedCurve = nurbSpline.IsClosed ? IFCLogical.True : IFCLogical.False;\r\n\r\n            // Based on IFC4 specification, selfIntersect is for information only, leave it as Unknown for now\r\n            IFCLogical selfIntersect = IFCLogical.Unknown;\r\n\r\n            // Unlike Revit, IFC uses 2 lists to store knots information. The first list contain every distinct knot, \r\n            // and the second list stores the multiplicities of each knot. The following code creates those 2 lists  \r\n            // from the Knots property of Revit NurbSpline\r\n            DoubleArray revitKnots = nurbSpline.Knots;\r\n            IList<double> ifcKnots = new List<double>();\r\n            IList<int> knotMultiplitices = new List<int>();\r\n\r\n            foreach (double knot in revitKnots)\r\n            {\r\n               if (ifcKnots.Count == 0 || !MathUtil.IsAlmostEqual(knot, ifcKnots[ifcKnots.Count - 1]))\r\n               {\r\n                  ifcKnots.Add(knot);\r\n                  knotMultiplitices.Add(1);\r\n               }\r\n               else\r\n               {\r\n                  knotMultiplitices[knotMultiplitices.Count - 1]++;\r\n               }\r\n            }\r\n\r\n            // Based on IFC4 specification, knotSpec is for information only, leave it as UNSPECIFIED for now.\r\n            Toolkit.IFC4.IFCKnotType knotSpec = Toolkit.IFC4.IFCKnotType.UNSPECIFIED;\r\n\r\n            if (!nurbSpline.isRational)\r\n            {\r\n               ifcCurve = IFCInstanceExporter.CreateBSplineCurveWithKnots\r\n                   (file, degree, controlPointsInIfc, curveForm, closedCurve, selfIntersect, knotMultiplitices, ifcKnots, knotSpec);\r\n            }\r\n            else\r\n            {\r\n               DoubleArray revitWeights = nurbSpline.Weights;\r\n               List<double> ifcWeights = [];\r\n\r\n               foreach (double weight in revitWeights)\r\n               {\r\n                  ifcWeights.Add(weight);\r\n               }\r\n\r\n               ifcCurve = IFCInstanceExporter.CreateRationalBSplineCurveWithKnots\r\n                   (file, degree, controlPointsInIfc, curveForm, closedCurve, selfIntersect, knotMultiplitices,\r\n                   ifcKnots, knotSpec, ifcWeights);\r\n            }\r\n         }\r\n         // if the Curve is of any other type, tessellate it and use polyline to represent it\r\n         else\r\n         {\r\n            // any other curve is not supported, we will tessellate it\r\n            IList<XYZ> tessCurve = curve.Tessellate();\r\n            IList<IFCAnyHandle> polylineVertices = new List<IFCAnyHandle>();\r\n            foreach (XYZ vertex in tessCurve)\r\n            {\r\n               IFCAnyHandle ifcVert = XYZtoIfcCartesianPoint(exporterIFC, vertex, cartesianPoints, dim);\r\n               polylineVertices.Add(ifcVert);\r\n            }\r\n            ifcCurve = IFCInstanceExporter.CreatePolyline(file, polylineVertices);\r\n         }\r\n\r\n         return ifcCurve;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts the given XYZ point to IfcCartesianPoint3D\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter</param>\r\n      /// <param name=\"thePoint\">The point</param>\r\n      /// <param name=\"cartesianPoints\">A map of already created IfcCartesianPoints.  This argument may be null.</param>\r\n      /// <param name=\"dim\">The dimensionality of the points, either 2 or 3.</param>\r\n      /// <returns>The handle representing IfcCartesianPoint</returns>\r\n      private static IFCAnyHandle XYZtoIfcCartesianPointCommon(ExporterIFC exporterIFC, XYZ thePoint,\r\n         IDictionary<IFCFuzzyXYZ, IFCAnyHandle> cartesianPoints, Dimension dim)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         XYZ vertexScaled = ExporterIFCUtils.TransformAndScalePoint(exporterIFC, thePoint);\r\n\r\n         IFCFuzzyXYZ fuzzyVertexScaled = (cartesianPoints != null) ? new IFCFuzzyXYZ(vertexScaled) : null;\r\n\r\n         IFCAnyHandle cartesianPoint = null;\r\n         if (fuzzyVertexScaled != null && cartesianPoints.TryGetValue(fuzzyVertexScaled, out cartesianPoint))\r\n            return cartesianPoint;\r\n\r\n         cartesianPoint = (dim == Dimension.Dim3D) ? ExporterUtil.CreateCartesianPoint(file, vertexScaled) :\r\n            ExporterUtil.CreateCartesianPoint(file, new UV(vertexScaled.X, vertexScaled.Y));\r\n         if (fuzzyVertexScaled != null)\r\n            cartesianPoints[fuzzyVertexScaled] = cartesianPoint;\r\n\r\n         return cartesianPoint;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts the given XYZ point to IfcCartesianPoint3D\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter</param>\r\n      /// <param name=\"thePoint\">The point</param>\r\n      /// <param name=\"cartesianPoints\">A map of already created IfcCartesianPoints.  This argument may be null.</param>\r\n      /// <returns>The handle representing IfcCartesianPoint</returns>\r\n      public static IFCAnyHandle XYZtoIfcCartesianPoint(ExporterIFC exporterIFC, XYZ thePoint,\r\n         IDictionary<IFCFuzzyXYZ, IFCAnyHandle> cartesianPoints, Dimension dim)\r\n      {\r\n         return XYZtoIfcCartesianPointCommon(exporterIFC, thePoint, cartesianPoints, dim);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts the given XYZ vector to IfcDirection\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter</param>\r\n      /// <param name=\"theVector\">The vector</param>\r\n      /// <returns>The hanlde representing IfcDirection</returns>\r\n      public static IFCAnyHandle VectorToIfcDirection(ExporterIFC exporterIFC, XYZ theVector)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         XYZ vectorScaled = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, theVector);\r\n\r\n         IFCAnyHandle direction = ExporterUtil.CreateDirection(file, vectorScaled, GeometryUtil.Dimension.Dim3D);\r\n         return direction;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts the given XYZ vector to IfcVector\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter</param>\r\n      /// <param name=\"theVector\">The vector</param>\r\n      /// <returns>The hanlde representing IfcVector</returns>\r\n      public static IFCAnyHandle VectorToIfcVector(ExporterIFC exporterIFC, XYZ theVector)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         XYZ vectorScaled = ExporterIFCUtils.TransformAndScaleVector(exporterIFC, theVector);\r\n\r\n         double lineLength = UnitUtil.ScaleLength(theVector.GetLength());\r\n\r\n         IFCAnyHandle vector = ExporterUtil.CreateVector(file, vectorScaled, lineLength);\r\n         return vector;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Try to create valid extrusion and extract its end faces.\r\n      /// </summary>\r\n      /// <param name=\"solid\">the solid geometry</param>\r\n      /// <param name=\"basePlane\">base plane of the profile</param>\r\n      /// <param name=\"planeOrigin\">the plane origin</param>\r\n      /// <param name=\"tryNonPerpendicularExtrusion\">option to try non perpendicular extrusion</param>\r\n      /// <param name=\"checkOrdinarity\">option to accept only ordinarity extrusion</param>\r\n      /// <param name=\"extrusionEndFaces\">output extrusion end faces</param>\r\n      /// <param name=\"faceBoundaries\">output face boundaries</param>\r\n      /// <returns>trues if valid extrusion can be created</returns>\r\n      public static bool TryGetExtrusionEndFaces(Solid solid, Plane basePlane, XYZ planeOrigin, bool tryNonPerpendicularExtrusion,\r\n         bool checkOrdinarity, out IList<Face> extrusionEndFaces, out IList<CurveLoop> faceBoundaries)\r\n      {\r\n         extrusionEndFaces = new List<Face>();\r\n         faceBoundaries = new List<CurveLoop>();\r\n\r\n         Plane extrusionAnalyzerPlane = CreatePlaneByXYVectorsContainingPoint(basePlane.XVec, basePlane.YVec, planeOrigin);\r\n         ExtrusionAnalyzer elementAnalyzer = ExtrusionAnalyzer.Create(solid, extrusionAnalyzerPlane, basePlane.Normal);\r\n\r\n         XYZ baseLoopOffset = null;\r\n\r\n         if (!MathUtil.IsAlmostZero(elementAnalyzer.StartParameter))\r\n            baseLoopOffset = elementAnalyzer.StartParameter * basePlane.Normal;\r\n\r\n         Face extrusionBase = elementAnalyzer.GetExtrusionBase();\r\n\r\n         // Ensure there are only 2 unaligned faces and all the rest must be fully aligned\r\n         IDictionary<Face, ExtrusionAnalyzerFaceAlignment> allFaces = elementAnalyzer.CalculateFaceAlignment();\r\n         IList<Face> fullyAlignedFaces = new List<Face>();\r\n         IList<Face> candidateEndFaces = new List<Face>();\r\n         foreach (KeyValuePair<Face, ExtrusionAnalyzerFaceAlignment> item in allFaces)\r\n         {\r\n            if (item.Value == ExtrusionAnalyzerFaceAlignment.FullyAligned)\r\n            {\r\n               // For ordinary extrusion, there will be no unaligned faces. The end faces of extrusion should be fully aligned. \r\n               //   The idetification will be based on their normal = the extrusion base plane normal\r\n               if (!tryNonPerpendicularExtrusion\r\n                  && (item.Key.ComputeNormal(UV.Zero).IsAlmostEqualTo(basePlane.Normal) || item.Key.ComputeNormal(UV.Zero).IsAlmostEqualTo(basePlane.Normal.Negate())))\r\n                  candidateEndFaces.Add(item.Key);\r\n               else\r\n                  fullyAlignedFaces.Add(item.Key);\r\n            }\r\n            else if (tryNonPerpendicularExtrusion && item.Value == ExtrusionAnalyzerFaceAlignment.Unaligned)\r\n               candidateEndFaces.Add(item.Key);\r\n         }\r\n\r\n         if (candidateEndFaces.Count != 2)\r\n            return false;\r\n\r\n         if (checkOrdinarity && (allFaces.Count - fullyAlignedFaces.Count - candidateEndFaces.Count > 0))\r\n            return false;\r\n\r\n         if (!MathUtil.IsAlmostEqual(candidateEndFaces[0].Area, candidateEndFaces[1].Area))\r\n            return false;\r\n\r\n         // All faces will be planar at this time\r\n         XYZ f1Normal = candidateEndFaces[0].ComputeNormal(new UV(0, 0));\r\n         XYZ f2Normal = candidateEndFaces[1].ComputeNormal(new UV(0, 0));\r\n         if (!f1Normal.IsAlmostEqualTo(f2Normal) && !f1Normal.IsAlmostEqualTo(f2Normal.Negate()))\r\n            return false;\r\n\r\n         HashSet<Face> adjoiningFaces = new HashSet<Face>();\r\n         EdgeArray faceOuterBoundary = candidateEndFaces[0].EdgeLoops.get_Item(0);\r\n         double f1Perimeter = 0;\r\n         foreach (Edge edge in faceOuterBoundary)\r\n         {\r\n            Face adjoiningFace = edge.GetFace(1);\r\n            if (adjoiningFace.Equals(candidateEndFaces[0]))\r\n               adjoiningFace = edge.GetFace(0);\r\n            adjoiningFaces.Add(adjoiningFace);\r\n            f1Perimeter += edge.AsCurve().Length;\r\n         }\r\n\r\n         faceOuterBoundary = candidateEndFaces[1].EdgeLoops.get_Item(0);\r\n         double f2Perimeter = 0;\r\n         foreach (Edge edge in faceOuterBoundary)\r\n         {\r\n            Face adjoiningFace = edge.GetFace(1);\r\n            if (adjoiningFace.Equals(candidateEndFaces[0]))\r\n               adjoiningFace = edge.GetFace(0);\r\n            if (adjoiningFaces.Contains(adjoiningFace))\r\n               adjoiningFaces.Remove(adjoiningFace);\r\n            f2Perimeter += edge.AsCurve().Length;\r\n         }\r\n\r\n         if (!MathUtil.IsAlmostEqual(f1Perimeter, f2Perimeter) && adjoiningFaces.Count > 0)\r\n            return false;\r\n\r\n         IList<FaceBoundaryType> faceBoundaryTypes;\r\n         faceBoundaries = GetFaceBoundaries(candidateEndFaces[0], XYZ.Zero, out faceBoundaryTypes);\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView && faceBoundaryTypes.Contains(FaceBoundaryType.Complex))\r\n            return false;\r\n\r\n         extrusionEndFaces.Add(candidateEndFaces[0]);\r\n         extrusionEndFaces.Add(candidateEndFaces[1]);\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Function to get ExtrusionBase profile. It is used especially in IFC4 Reference View because of limitation of geometry in RV. When a structural member\r\n      /// object is exported as tessellated geometry, profile information is still needed for a valid IfcMaterialProfile. This function does it \r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">exporterIFC</param>\r\n      /// <param name=\"solid\">the solid geometry</param>\r\n      /// <param name=\"profileName\">profile name</param>\r\n      /// <param name=\"basePlane\">base plane of the profile</param>\r\n      /// <param name=\"planeOrigin\">the plane origin</param>\r\n      /// <param name=\"extrusionEndFaces\">output extrusion end faces</param>\r\n      /// <param name=\"tryNonPerpendicularExtrusion\">option to try non perpendicular extrusion</param>\r\n      /// <returns>returns the handle to the profile</returns>\r\n      public static IFCAnyHandle GetExtrusionBaseProfile(ExporterIFC exporterIFC, Solid solid, string profileName, Plane basePlane, XYZ planeOrigin,\r\n         out IList<Face> extrusionEndFaces, bool tryNonPerpendicularExtrusion = false)\r\n      {\r\n         IFCAnyHandle extrudedAreaProfile = null;\r\n         IList<CurveLoop> faceBoundaries = null;\r\n\r\n         if (!TryGetExtrusionEndFaces(solid, basePlane, planeOrigin, tryNonPerpendicularExtrusion,\r\n            checkOrdinarity: false, out extrusionEndFaces, out faceBoundaries))\r\n            return extrudedAreaProfile;\r\n\r\n         try\r\n         {\r\n            // For IFC4 RV, only IfcIndexedPolyCurve can be created, use CreateIFCCurveFromCurveLoop to create the IFC curve and use the default/identity transform for it\r\n            IFCAnyHandle curveHandle = GeometryUtil.CreateCompositeOrIndexedCurve(exporterIFC, faceBoundaries[0].ToList(), Transform.Identity, faceBoundaries[0].GetPlane().Normal);\r\n            if (faceBoundaries.Count == 1)\r\n            {\r\n               extrudedAreaProfile = IFCInstanceExporter.CreateArbitraryClosedProfileDef(exporterIFC.GetFile(), IFCProfileType.Curve, profileName, curveHandle);\r\n            }\r\n            else\r\n            {\r\n               HashSet<IFCAnyHandle> innerCurves = new HashSet<IFCAnyHandle>();\r\n               for (int ii = 1; ii < faceBoundaries.Count; ++ii)\r\n               {\r\n                  IFCAnyHandle innerCurveHandle = GeometryUtil.CreateCompositeOrIndexedCurve(exporterIFC, faceBoundaries[ii].ToList(), Transform.Identity, faceBoundaries[ii].GetPlane().Normal);\r\n                  innerCurves.Add(innerCurveHandle);\r\n               }\r\n               extrudedAreaProfile = IFCInstanceExporter.CreateArbitraryProfileDefWithVoids(exporterIFC.GetFile(), IFCProfileType.Area, profileName, curveHandle,\r\n                  innerCurves);\r\n            }\r\n\r\n            return extrudedAreaProfile;\r\n         }\r\n         catch\r\n         {\r\n            return null;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Attempt to get profile and simple material information from a FamilyInstance element.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporterIFC that contains state information for the export.</param>\r\n      /// <param name=\"element\">The element, expected to be a FamilyInstance.</param>\r\n      /// <param name=\"basePlaneNormal\">The normal used to try to find the profile.</param>\r\n      /// <param name=\"basePlaneOrigin\">The original for the profile.</param>\r\n      /// <returns></returns>\r\n      public static MaterialAndProfile GetProfileAndMaterial(ExporterIFC exporterIFC,\r\n         Element element, XYZ basePlaneNormal, XYZ basePlaneOrigin)\r\n      {\r\n         MaterialAndProfile materialAndProfile = new MaterialAndProfile();\r\n\r\n         FamilyInstance familyInstance = element as FamilyInstance;\r\n         if (familyInstance == null)\r\n            return null;\r\n\r\n         FamilySymbol originalFamilySymbol = ExporterIFCUtils.GetOriginalSymbol(familyInstance);\r\n         string profileName = NamingUtil.GetProfileName(originalFamilySymbol);\r\n\r\n         // Check for swept profile\r\n         try\r\n         {\r\n            SweptProfile sweptProfileFromFamInst = familyInstance.GetSweptProfile();\r\n\r\n            IList<Curve> profileCurves = new List<Curve>();\r\n            foreach (Curve curv in sweptProfileFromFamInst.GetSweptProfile().Curves)\r\n               profileCurves.Add(curv);\r\n\r\n            // What if there are multiple materials or multiple profiles in the family??\r\n            XYZ projDir = XYZ.BasisZ;\r\n            try\r\n            {\r\n               CurveLoop curveloop = CurveLoop.Create(profileCurves);\r\n               if (curveloop.HasPlane())\r\n                  projDir = curveloop.GetPlane().Normal;\r\n            }\r\n            catch\r\n            {\r\n               projDir = null;\r\n            }\r\n\r\n            IFCAnyHandle compCurveHandle = GeometryUtil.CreateCompositeOrIndexedCurve(exporterIFC, profileCurves, Transform.Identity, projDir);\r\n\r\n            IFCAnyHandle profileDef = IFCInstanceExporter.CreateArbitraryClosedProfileDef(exporterIFC.GetFile(), IFCProfileType.Curve, profileName, compCurveHandle);\r\n\r\n            ElementId materialId = familyInstance.GetMaterialIds(false).FirstOrDefault();\r\n            if (materialId == null)\r\n               materialId = ElementId.InvalidElementId;\r\n            materialAndProfile.Add(materialId, profileDef);\r\n         }\r\n         catch\r\n         {\r\n            // Do nothing, will go to the next step\r\n         }\r\n\r\n         // If no Sweep, handle for Extrusion using the OriginalSymbol\r\n         // TODO: We probably shouldn't be re-getting this information - it is already probably\r\n         // already at the caller level.  Also, if this is a view specific export, then\r\n         // the material information may be incorrect, since the view may have overriden\r\n         // materials.\r\n         {\r\n            Plane basePlane = GeometryUtil.CreatePlaneByNormalAtOrigin(basePlaneNormal);\r\n            Element exportGeometryElement = (Element)originalFamilySymbol;\r\n            GeometryElement exportGeometry = exportGeometryElement.get_Geometry(new Options());\r\n            foreach (GeometryObject geomObject in exportGeometry)\r\n            {\r\n               if (geomObject is Solid)\r\n               {\r\n                  IList<Face> extrusionEndFaces;\r\n                  Solid solid = geomObject as Solid;\r\n                  if (solid == null || solid.Faces.IsEmpty || solid.Edges.IsEmpty)\r\n                     continue;\r\n\r\n                  ElementId materialId = BodyExporter.GetBestMaterialIdFromGeometryOrParameter(solid, familyInstance);\r\n                  IFCAnyHandle profileDef = GetExtrusionBaseProfile(exporterIFC, solid, profileName, basePlane, basePlaneOrigin, out extrusionEndFaces);\r\n                  if (!IFCAnyHandleUtil.IsNullOrHasNoValue(profileDef))\r\n                     materialAndProfile.Add(materialId, profileDef);\r\n               }\r\n            }\r\n         }\r\n\r\n         return materialAndProfile;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Intersect a plane with a line and return the intersecting point if any\r\n      /// </summary>\r\n      /// <param name=\"plane\">the plane</param>\r\n      /// <param name=\"line\">the line</param>\r\n      /// <param name=\"intersectingPoint\">the intersecting point</param>\r\n      /// <returns>true if the intersection is found</returns>\r\n      public static bool PlaneIntersect(Plane plane, Line line, out XYZ intersectingPoint)\r\n      {\r\n         bool isBound = line.IsBound;\r\n         XYZ refPointLine;\r\n         if (isBound)\r\n            refPointLine = line.GetEndPoint(0);    // use the line staring point\r\n         else\r\n            refPointLine = line.Origin;\r\n\r\n         intersectingPoint = XYZ.Zero;\r\n         double denom = plane.Normal.DotProduct(line.Direction);\r\n         if (MathUtil.IsAlmostZero(denom))\r\n            return false;   // Normal and the lines are perpendicular to each other: line is parallel to the plane, no intersection\r\n\r\n         double rr = plane.Normal.DotProduct(new XYZ(plane.Origin.X - refPointLine.X, plane.Origin.Y - refPointLine.Y, plane.Origin.Z - refPointLine.Z))\r\n                     / denom;\r\n\r\n         if (isBound && (rr < 0.0 || rr > 1.0))\r\n            return false;        // intersection occurs outside of the bound\r\n\r\n         intersectingPoint = new XYZ(refPointLine.X + rr * line.Direction.X, refPointLine.Y + rr * line.Direction.Y, refPointLine.Z + rr * line.Direction.Z);\r\n         return true;\r\n      }\r\n\r\n      public static bool PlaneIntersect(Plane P1, Plane P2, out Line intersectingLine)\r\n      {\r\n         intersectingLine = null;\r\n         if (P1.Normal.IsAlmostEqualTo(P2.Normal))\r\n            return false;                 // THe planes are parallel to each other, no intersection\r\n\r\n         // Find intersecting line using 3 plane intersection\r\n         XYZ intLineDir = P1.Normal.CrossProduct(P2.Normal);\r\n         double da = 1 / (P1.Normal.DotProduct(P2.Normal.CrossProduct(intLineDir)));\r\n         double P1parConstant = -(P1.Normal.X * P1.Origin.X + P1.Normal.Y * P1.Origin.Y + P1.Normal.Z * P1.Origin.Z);\r\n         double P2parConstant = -(P2.Normal.X * P2.Origin.X + P2.Normal.Y * P2.Origin.Y + P2.Normal.Z * P2.Origin.Z);\r\n\r\n         XYZ intLinePoint = (-P1parConstant * (P2.Normal.CrossProduct(intLineDir)) - P2parConstant * (intLineDir.CrossProduct(P1.Normal))) * da;\r\n         Line intLine = Line.CreateUnbound(intLinePoint, intLineDir);\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Intersect a plane and the arc\r\n      /// </summary>\r\n      /// <param name=\"plane\"></param>\r\n      /// <param name=\"arc\"></param>\r\n      /// <param name=\"intersectingPoints\"></param>\r\n      /// <returns></returns>\r\n      public static bool PlaneIntersect(Plane plane, Curve curve, out IList<XYZ> intersectingPoints)\r\n      {\r\n         intersectingPoints = new List<XYZ>();\r\n\r\n         if (curve is CylindricalHelix)\r\n            return false;              // Supports only a planar based curve\r\n\r\n         // Get the plane where the curve lies\r\n         Plane planeOfCurve = PlanarPlaneOf(curve);\r\n         if (plane.Normal.IsAlmostEqualTo(planeOfCurve.Normal))\r\n            return false;                 // THe planes are parallel to each other, no intersection\r\n\r\n         // Find intersecting line \r\n         Line intLine = null;\r\n         if (!PlaneIntersect(plane, planeOfCurve, out intLine))\r\n            return false;\r\n\r\n         // Intersect the curve with the plane intersection line\r\n         try\r\n         {\r\n            CurveIntersectResult result = curve.Intersect(intLine, CurveIntersectResultOption.Detailed);\r\n            if (null == result || result.Result == SetComparisonResult.Disjoint)\r\n            {\r\n               return false;\r\n            }\r\n\r\n            foreach (CurveOverlapPoint point in result.GetOverlaps().Where(e => CurveOverlapPointType.Intersection == e?.Type))\r\n            {\r\n               intersectingPoints.Add(point.Point);\r\n            }\r\n         }\r\n         catch\r\n         {\r\n            return false;\r\n         }\r\n         return true;\r\n      }\r\n\r\n      public static Plane PlanarPlaneOf(Curve curve)\r\n      {\r\n         // We will only try up to six different parameters to find the 3rd point on the curve.\r\n         IList<double> parToTry = new List<double>() { 0.15, 0.3, 0.45, 0.6, 0.75, 0.9 };\r\n\r\n         // Get end points\r\n         XYZ P1 = curve.GetEndPoint(0);\r\n         XYZ P2 = curve.GetEndPoint(1);\r\n         XYZ vec1 = new XYZ((P2.X - P1.X), (P2.Y - P1.Y), (P2.Z - P1.Z)).Normalize();\r\n\r\n         // Get the third point on the curve by getting a point in the middle of the curve using parameter\r\n         XYZ P3 = null;\r\n         foreach (double par in parToTry)\r\n         {\r\n            P3 = curve.Evaluate(par, false);\r\n            XYZ vec2 = new XYZ((P3.X - P1.X), (P3.Y - P1.Y), (P3.Z - P1.Z)).Normalize();\r\n            // if the result is already a point not on the the same line, exit\r\n            if (!vec1.IsAlmostEqualTo(vec2))\r\n               break;\r\n         }\r\n\r\n         double d1X = P2.X - P1.X;\r\n         double d1Y = P2.Y - P1.Y;\r\n         double d1Z = P2.Z - P1.Z;\r\n         XYZ v1 = new XYZ(d1X, d1Y, d1Z);\r\n\r\n         double d2X = P3.X - P1.X;\r\n         double d2Y = P3.Y - P1.Y;\r\n         double d2Z = P3.Z - P1.Z;\r\n         XYZ v2 = new XYZ(d2X, d2Y, d2Z);\r\n\r\n         XYZ normal = v1.CrossProduct(v2);\r\n         normal.Normalize();\r\n         Plane planeOfArc = Plane.CreateByNormalAndOrigin(normal, P1);\r\n         return planeOfArc;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Function to collect Family geometry element data summary for comparison purpose\r\n      /// </summary>\r\n      /// <param name=\"geomElement\">the family geometry element</param>\r\n      /// <returns>FamyGeometrySummaryData</returns>\r\n      public static FamilyGeometrySummaryData CollectFamilyGeometrySummaryData(GeometryElement geomElement)\r\n      {\r\n         FamilyGeometrySummaryData famGeomData = new FamilyGeometrySummaryData();\r\n         foreach (GeometryObject geomObj in geomElement)\r\n         {\r\n            if (geomObj is Curve)\r\n            {\r\n               famGeomData.CurveCount++;\r\n               famGeomData.CurveLengthTotal += (geomObj as Curve).Length;\r\n            }\r\n            else if (geomObj is Edge)\r\n            {\r\n               famGeomData.EdgeCount++;\r\n            }\r\n            else if (geomObj is Face)\r\n            {\r\n               famGeomData.FaceCount++;\r\n               famGeomData.FaceAreaTotal += (geomObj as Face).Area;\r\n            }\r\n            else if (geomObj is GeometryInstance)\r\n            {\r\n               famGeomData.GeometryInstanceCount++;\r\n            }\r\n            else if (geomObj is GeometryElement)\r\n            {\r\n               famGeomData.Add(CollectFamilyGeometrySummaryData(geomObj as GeometryElement));\r\n            }\r\n            else if (geomObj is Mesh)\r\n            {\r\n               famGeomData.MeshCount++;\r\n               famGeomData.MeshNumberOfTriangleTotal += (geomObj as Mesh).NumTriangles;\r\n            }\r\n            else if (geomObj is Point)\r\n            {\r\n               famGeomData.PointCount++;\r\n            }\r\n            else if (geomObj is PolyLine)\r\n            {\r\n               famGeomData.PolylineCount++;\r\n               famGeomData.PolylineNumberOfCoordinatesTotal += (geomObj as PolyLine).NumberOfCoordinates;\r\n            }\r\n            else if (geomObj is Profile)\r\n            {\r\n               famGeomData.ProfileCount++;\r\n            }\r\n            else if (geomObj is Solid)\r\n            {\r\n               famGeomData.SolidCount++;\r\n               famGeomData.SolidVolumeTotal += (geomObj as Solid).Volume;\r\n               famGeomData.SolidSurfaceAreaTotal += (geomObj as Solid).SurfaceArea;\r\n               famGeomData.SolidFacesCountTotal += (geomObj as Solid).Faces.Size;\r\n               famGeomData.SolidEdgesCountTotal += (geomObj as Solid).Edges.Size;\r\n            }\r\n         }\r\n         return famGeomData;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Evaluate whether we should use the geomtry from the family instance, or we can use the common one from the Symbol\r\n      /// </summary>\r\n      /// <param name=\"familyInstance\">the family instance</param>\r\n      /// <returns>true/false</returns>\r\n      public static bool UsesInstanceGeometry(FamilyInstance familyInstance)\r\n      {\r\n         GeometryElement famInstGeom = familyInstance.get_Geometry(GetIFCExportGeometryOptions());\r\n         FamilyGeometrySummaryData instData = CollectFamilyGeometrySummaryData(famInstGeom);\r\n         if (instData.OnlyContainsGeometryInstance())\r\n            return false;\r\n\r\n         GeometryElement famSymbolGeom = familyInstance.Symbol.get_Geometry(GetIFCExportGeometryOptions());\r\n         FamilyGeometrySummaryData symbolData = CollectFamilyGeometrySummaryData(famSymbolGeom);\r\n         if (instData.Equal(symbolData))\r\n            return false;\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get Arc or Line from Family Symbol given a family instance. This works by finding the related 2D geometries that can be obtained from the Plan View\r\n      /// </summary>\r\n      /// <param name=\"element\">the family instance</param>\r\n      /// <param name=\"allCurveType\">set it to true if all 2D based curves are to be included</param>\r\n      /// <param name=\"inclArc\">set it to true if only the Arc to be included</param>\r\n      /// <param name=\"inclLine\">set it to true if only Line to be included</param>\r\n      /// <param name=\"inclEllipse\">set it to true if only Ellipse to be included</param>\r\n      /// <param name=\"inclSpline\">set it to true if only Splines to be included (incl. HermitSpline and NurbSpline)</param>\r\n      /// <returns>the List of 2D curves found</returns>\r\n      public static IList<Curve> Get2DArcOrLineFromSymbol(FamilyInstance element, bool allCurveType,\r\n         bool inclArc = false, bool inclLine = false, bool inclEllipse = false, bool inclSpline = false)\r\n      {\r\n         IList<Curve> curveList = new List<Curve>();\r\n         // If all curve option is set, set all flags to true\r\n         if (!allCurveType && !(inclArc || inclLine || inclEllipse || inclSpline)) if (allCurveType)\r\n               return curveList;       // Nothing is marked included, return empty list\r\n\r\n         IList<Curve> curveListCache;\r\n         if (!ExporterCacheManager.Object2DCurvesCache.TryGetValue(element.Symbol.Id, out curveListCache))\r\n         {\r\n            Document doc = element.Document;\r\n            if (element.LevelId == ElementId.InvalidElementId)\r\n               return curveList;\r\n\r\n            Level level = element.Document.GetElement(element.LevelId) as Level;\r\n            if (level.FindAssociatedPlanViewId() == ElementId.InvalidElementId)\r\n               return curveList;\r\n\r\n            ViewPlan planView = doc.GetElement(level.FindAssociatedPlanViewId()) as ViewPlan;\r\n\r\n            Options defaultOptions = GetIFCExportGeometryOptions();\r\n            Options currentOptions = new Options();\r\n            currentOptions.View = planView;\r\n            currentOptions.ComputeReferences = defaultOptions.ComputeReferences;\r\n            currentOptions.IncludeNonVisibleObjects = defaultOptions.IncludeNonVisibleObjects;\r\n\r\n            curveListCache = new List<Curve>();\r\n\r\n            GeometryElement geoms = element.Symbol.get_Geometry(currentOptions);\r\n            foreach (GeometryObject geomObj in geoms)\r\n            {\r\n               if (geomObj is Curve)\r\n                  curveListCache.Add(geomObj as Curve);\r\n            }\r\n\r\n            // Add into the cache to reduce repeated efforts to get the 2D geometries for the same Symbol\r\n            ExporterCacheManager.Object2DCurvesCache.Add(element.Symbol.Id, curveListCache);\r\n         }\r\n\r\n         if (allCurveType)\r\n         {\r\n            return curveListCache;\r\n         }\r\n\r\n         foreach (Curve curve in curveListCache)\r\n         {\r\n            if (inclArc && curve is Arc)\r\n               curveList.Add(curve);\r\n            else if (inclLine && curve is Line)\r\n               curveList.Add(curve);\r\n            else if (inclEllipse && curve is Ellipse)\r\n               curveList.Add(curve);\r\n            else if (inclSpline && (curve is HermiteSpline || curve is NurbSpline))\r\n               curveList.Add(curve);\r\n         }\r\n\r\n         return curveList;\r\n      }\r\n\r\n      enum NormalDirection\r\n      {\r\n         UsePosX,\r\n         UsePosY,\r\n         UsePosZ,\r\n         UseNegX,\r\n         UseNegY,\r\n         UseNegZ\r\n      }\r\n\r\n      private static bool UseThisDirection(double dirComp, double normComp, double eps)\r\n      {\r\n         return (MathUtil.IsAlmostEqual(dirComp, 1.0) && normComp > eps) ||\r\n            (MathUtil.IsAlmostEqual(dirComp, -1.0) && normComp < eps);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the largest face from a Solid\r\n      /// </summary>\r\n      /// <param name=\"geomObj\">the geometry Solid</param>\r\n      /// <param name=\"normalDirection\">Normal direction of the face to return (only accept (1,0,0), (0,1,0), or (0,0,1))</param>\r\n      /// <returns>the largest face</returns>\r\n      public static Face GetLargestFaceInSolid(GeometryObject geomObj, XYZ normalDirection)\r\n      {\r\n         Face largestFace = null;\r\n         double largestArea = 0.0;\r\n\r\n         if (geomObj == null)\r\n            return largestFace;\r\n\r\n         Solid geomSolid = geomObj as Solid;\r\n         if (geomSolid == null)\r\n            return largestFace;\r\n\r\n         double eps = MathUtil.Eps();\r\n         foreach (Face face in geomSolid.Faces)\r\n         {\r\n            // Identifying the largest area with normal pointing up\r\n            XYZ faceNormal = face.ComputeNormal(new UV());\r\n\r\n            if (!UseThisDirection(normalDirection.X, faceNormal.X, eps) &&\r\n               !UseThisDirection(normalDirection.Y, faceNormal.Y, eps) &&\r\n               !UseThisDirection(normalDirection.Z, faceNormal.Z, eps))\r\n               continue;\r\n\r\n            if (face.Area > largestArea)\r\n            {\r\n               largestFace = face;\r\n               largestArea = face.Area;\r\n            }\r\n         }\r\n\r\n         return largestFace;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get face angle/slope. This will be calculated at UV (0,0)\r\n      /// </summary>\r\n      /// <param name=\"face\">the face</param>\r\n      /// <param name=\"projection\">the XYZ to which the </param>\r\n      /// <returns>the slope angle</returns>\r\n      public static double GetAngleOfFace(Face face, XYZ projection)\r\n      {\r\n         double angle = 0.0;\r\n\r\n         // Compute normal at UV (0,0)\r\n         XYZ faceNormal = face.ComputeNormal(new UV());\r\n         projection = projection.Normalize();\r\n         double normalAngleToProjection = MathUtil.SafeAcos(faceNormal.DotProduct(projection));\r\n         double slopeAngle = 0.5 * Math.PI - normalAngleToProjection;\r\n         angle = UnitUtil.ScaleAngle(slopeAngle);\r\n\r\n         return angle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Iterate and recurse GeometryElement to find all Curves\r\n      /// </summary>\r\n      /// <param name=\"geomElem\">the GeometryElement</param>\r\n      /// <returns>List of Curves found in the GeometryElement</returns>\r\n      public static List<Curve> GetCurvesFromGeometryElement(GeometryElement geomElem)\r\n      {\r\n         List<Curve> curveList = new List<Curve>();\r\n         foreach (GeometryObject geomObject in geomElem)\r\n         {\r\n            if (geomObject is GeometryElement)\r\n            {\r\n               curveList.AddRange(GetCurvesFromGeometryElement(geomObject as GeometryElement));\r\n            }\r\n            else if (geomObject is GeometryInstance)\r\n            {\r\n               GeometryElement instGeom = (geomObject as GeometryInstance).GetInstanceGeometry();\r\n               if (instGeom != null)\r\n                  curveList.AddRange(GetCurvesFromGeometryElement(instGeom));\r\n            }\r\n            else if (geomObject is Curve)\r\n            {\r\n               curveList.Add(geomObject as Curve);\r\n            }\r\n         }\r\n\r\n         return curveList;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Compare 2 solids using the geometry signature taken from: Boundingbox (Min and Max coordinates), SurfaceArea, Volume, No. of Faces, No. of Edges\r\n      /// BEWARE that this is a quick compare and does not guarantee 100% equality (for example solid being mirrored will give false equality), but this is a very quick\r\n      /// compare function and will work well if we really need to compare solids coming from the same source geometry.\r\n      /// </summary>\r\n      /// <param name=\"solid1\">solid 1</param>\r\n      /// <param name=\"solid2\">solid 2</param>\r\n      /// <returns>whether the 2 solids are equal based on their signature only</returns>\r\n      public static bool SolidsQuickEqualityCompare(Solid solid1, Solid solid2)\r\n      {\r\n         // BEWARE that this is a quick compare and does not guarantee 100% equality (for example solid being mirrored will give false equality), but this is a very quick\r\n         // compare function and will work well if we really need to compare solids coming from the same source geometry.\r\n         if ((solid1.GetBoundingBox().Min.IsAlmostEqualTo(solid2.GetBoundingBox().Min))\r\n            && (solid1.GetBoundingBox().Max.IsAlmostEqualTo(solid2.GetBoundingBox().Max))\r\n            && MathUtil.IsAlmostEqual(solid1.SurfaceArea, solid2.SurfaceArea)\r\n            && MathUtil.IsAlmostEqual(solid1.Volume, solid2.Volume)\r\n            && (solid1.Faces.Size == solid2.Faces.Size)\r\n            && (solid1.Edges.Size == solid2.Edges.Size))\r\n            return true;\r\n         else\r\n            return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get Site local placement depending on the coordinate reference selected (unscaled)\r\n      /// </summary>\r\n      /// <param name=\"doc\">the Document</param>\r\n      /// <returns>site local placement transform</returns>\r\n      public static Transform GetSiteLocalPlacement(Document doc)\r\n      {\r\n         Transform trf = null;\r\n         ProjectLocation projLocation = ExporterCacheManager.SelectedSiteProjectLocation;\r\n         if (projLocation == null)\r\n            return trf;\r\n\r\n         using (SubTransaction projLocTr = new SubTransaction(doc))\r\n         {\r\n            projLocTr.Start();\r\n            doc.ActiveProjectLocation = projLocation;\r\n\r\n            BasePoint surveyPoint = BasePoint.GetSurveyPoint(doc);\r\n            BasePoint projectBasePoint = BasePoint.GetProjectBasePoint(doc);\r\n            if (surveyPoint == null || projectBasePoint == null)\r\n               return trf;\r\n\r\n            (double svNorthings, double svEastings, double svElevation, double svAngle, double pbNorthings,\r\n               double pbEastings, double pbElevation, double pbAngle) = OptionsUtil.ProjectLocationInfo(doc, surveyPoint.Position, projectBasePoint.Position);\r\n\r\n            SiteTransformBasis transformBasis = ExporterCacheManager.ExportOptionsCache.SiteTransformation;\r\n\r\n            trf = Transform.Identity;\r\n            Transform rotationTrfAtInternal = Transform.CreateRotationAtPoint(XYZ.BasisZ, pbAngle, XYZ.Zero);\r\n\r\n            // For Linked file, the WCS should always be based on the shared coordinates\r\n            if (ExporterUtil.ExportingHostModel())\r\n            {\r\n               switch (transformBasis)\r\n               {\r\n                  case SiteTransformBasis.Shared:\r\n                     XYZ intPointOffset = rotationTrfAtInternal.OfPoint(projectBasePoint.Position);\r\n                     XYZ xyz = new XYZ((projectBasePoint.SharedPosition.X - intPointOffset.X),\r\n                                    (projectBasePoint.SharedPosition.Y - intPointOffset.Y),\r\n                                     (projectBasePoint.SharedPosition.Z - intPointOffset.Z));\r\n                     trf = CreateTransformFromVectorsAndOrigin(rotationTrfAtInternal.BasisX, rotationTrfAtInternal.BasisY, rotationTrfAtInternal.BasisZ, xyz);\r\n                     break;\r\n                  case SiteTransformBasis.Site:\r\n                     xyz = rotationTrfAtInternal.OfPoint(surveyPoint.Position);\r\n                     xyz = new XYZ(-xyz.X, -xyz.Y, -xyz.Z);\r\n                     trf = CreateTransformFromVectorsAndOrigin(rotationTrfAtInternal.BasisX, rotationTrfAtInternal.BasisY, rotationTrfAtInternal.BasisZ, xyz);\r\n                     break;\r\n                  case SiteTransformBasis.Project:\r\n                     xyz = projectBasePoint.Position;\r\n                     xyz = new XYZ(-xyz.X, -xyz.Y, -xyz.Z);\r\n                     trf = CreateTransformFromVectorsAndOrigin(Transform.Identity.BasisX, Transform.Identity.BasisY, Transform.Identity.BasisZ, xyz);\r\n                     break;\r\n                  case SiteTransformBasis.ProjectInTN:\r\n                     xyz = rotationTrfAtInternal.OfPoint(projectBasePoint.Position);\r\n                     xyz = new XYZ(-xyz.X, -xyz.Y, -xyz.Z);\r\n                     trf = CreateTransformFromVectorsAndOrigin(rotationTrfAtInternal.BasisX, rotationTrfAtInternal.BasisY, rotationTrfAtInternal.BasisZ, xyz);\r\n                     break;\r\n                  case SiteTransformBasis.Internal:\r\n                     xyz = new XYZ(0.0, 0.0, 0.0);\r\n                     trf = CreateTransformFromVectorsAndOrigin(Transform.Identity.BasisX, Transform.Identity.BasisY, Transform.Identity.BasisZ, xyz);\r\n                     break;\r\n                  case SiteTransformBasis.InternalInTN:\r\n                     xyz = rotationTrfAtInternal.OfPoint(new XYZ(0.0, 0.0, 0.0));\r\n                     trf = CreateTransformFromVectorsAndOrigin(rotationTrfAtInternal.BasisX, rotationTrfAtInternal.BasisY, rotationTrfAtInternal.BasisZ, xyz);\r\n                     break;\r\n                  default:\r\n                     break;\r\n               }\r\n            }\r\n            projLocTr.RollBack();\r\n         }\r\n         return trf;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/GroupCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to import and export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of the created IfcGroups and related IfcElement handles.\r\n   /// </summary>\r\n   public class GroupCache : Dictionary<ElementId, GroupInfo>\r\n   {\r\n      /// <summary>\r\n      /// Add the handle of a Group to the cache.  It will either add it\r\n      /// to an existing entry, or create a new entry.\r\n      /// </summary>\r\n      /// <param name=\"groupId\">The elementId of the Group.</param>\r\n      /// <param name=\"groupHnd\">The handle of the IfcGroup.</param>\r\n      /// <returns>GroupInfo of the registered group</returns>\r\n      public GroupInfo RegisterGroup(ElementId groupId, IFCAnyHandle groupHnd)\r\n      {\r\n         GroupInfo groupInfo = GetOrGreateGroupInfo(groupId);\r\n         groupInfo.GroupHandle = groupHnd;\r\n         this[groupId] = groupInfo;\r\n         return groupInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Specify the export type of the cached group.\r\n      /// </summary>\r\n      /// <param name=\"groupId\">The elementId of the Group.</param>\r\n      /// <param name=\"type\">The export type of the Group.</param>\r\n      public void RegisterOrUpdateGroupType(ElementId groupId, IFCExportInfoPair type)\r\n      {\r\n         GroupInfo groupInfo = GetOrGreateGroupInfo(groupId);\r\n         groupInfo.GroupType = type;\r\n         this[groupId] = groupInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add the handle of an element in a Group to the cache.  It will either add it\r\n      /// to an existing entry, or create a new entry.\r\n      /// </summary>\r\n      /// <param name=\"groupId\">The ElementId of the Group.</param>\r\n      /// <param name=\"elementHnd\">The IFC handle of the element.</param>\r\n      public void RegisterElement(ElementId groupId, IFCAnyHandle elementHnd)\r\n      {\r\n         GroupInfo groupInfo = GetOrGreateGroupInfo(groupId);\r\n         groupInfo.ElementHandles.Add(elementHnd);\r\n         this[groupId] = groupInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Registers all of the created handles in the product wrapper that are of the right type to a Group.\r\n      /// </summary>\r\n      /// <param name=\"groupId\">The ElementId of the Group.</param>\r\n      /// <param name=\"productWrapper\">The product wrapper.</param>\r\n      public void RegisterElements(ElementId groupId, ProductWrapper productWrapper)\r\n      {\r\n         ICollection<IFCAnyHandle> objects = productWrapper.GetAllObjects();\r\n         HashSet<IFCAnyHandle> elementsToAdd = new HashSet<IFCAnyHandle>();\r\n         foreach (IFCAnyHandle hnd in objects)\r\n         {\r\n            if (IFCAnyHandleUtil.IsSubTypeOf(hnd, IFCEntityType.IfcProduct) ||\r\n                IFCAnyHandleUtil.IsSubTypeOf(hnd, IFCEntityType.IfcGroup))\r\n               elementsToAdd.Add(hnd);\r\n         }\r\n         if (elementsToAdd.Count > 0)\r\n            RegisterElements(groupId, elementsToAdd);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets the export flag to true.\r\n      /// </summary>\r\n      /// <param name=\"groupId\">Group.</param>\r\n      public void SetExportFlag(ElementId groupId)\r\n      {\r\n         GroupInfo groupInfo = GetOrGreateGroupInfo(groupId);\r\n         groupInfo.ExportFlag = true;\r\n         this[groupId] = groupInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Detects if the group marked to export.\r\n      /// </summary>\r\n      /// <param name=\"groupId\">Group to check.</param>\r\n      /// <returns>True if is marked to export, false otherwise.</returns>\r\n      public bool GetExportFlag(ElementId groupId)\r\n      {\r\n         return ExporterCacheManager.GroupCache.TryGetValue(groupId, out GroupInfo groupInfo) &&\r\n            (groupInfo?.ExportFlag ?? false) == true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Detects if the group is empty.\r\n      /// </summary>\r\n      /// <param name=\"groupId\">Group to check.</param>\r\n      /// <returns>True if group doesn't contain elements, false otherwise.</returns>\r\n      public bool IsEmptyGroup(ElementId groupId)\r\n      {\r\n         return !ExporterCacheManager.GroupCache.TryGetValue(groupId, out GroupInfo groupInfo) ||\r\n            (groupInfo?.ElementHandles?.Count ?? 0) == 0;\r\n      }\r\n\r\n      private GroupInfo GetOrGreateGroupInfo(ElementId groupId)\r\n      {\r\n         if (!TryGetValue(groupId, out GroupInfo groupInfo))\r\n         {\r\n            groupInfo = new GroupInfo();\r\n         }\r\n         return groupInfo;\r\n      }\r\n\r\n      private void RegisterElements(ElementId groupId, HashSet<IFCAnyHandle> elementHnds)\r\n      {\r\n         if (elementHnds.Count == 0)\r\n            return;\r\n\r\n         GroupInfo groupInfo = GetOrGreateGroupInfo(groupId);\r\n         groupInfo.ElementHandles.UnionWith(elementHnds);\r\n         this[groupId] = groupInfo;\r\n      }\r\n\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/HandleToElementCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// This maps an IFC handle to the Element that created it.\r\n   /// </summary>\r\n   /// <remarks>\r\n   /// This is used to identify which element should be used for properties, for elements \r\n   /// (e.g. Stairs) that contain other elements.\r\n   /// </remarks>\r\n   public class HandleToElementCache\r\n   {\r\n      /// <summary>\r\n      /// The dictionary mapping from an IFC handle to ElementId. \r\n      /// </summary>\r\n      private Dictionary<IFCAnyHandle, ElementId> HandleToElement { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// Finds the ElementId from the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"hnd\">The handle.</param>\r\n      /// <returns>The ElementId.</returns>\r\n      public ElementId Find(IFCAnyHandle hnd)\r\n      {\r\n         ElementId id;\r\n         if (HandleToElement.TryGetValue(hnd, out id))\r\n         {\r\n            return id;\r\n         }\r\n         return ElementId.InvalidElementId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds the handle to the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"elementId\">The ElementId.</param>\r\n      public void Register(IFCAnyHandle handle, ElementId elementId)\r\n      {\r\n         if (HandleToElement.ContainsKey(handle))\r\n            return;\r\n\r\n         HandleToElement[handle] = elementId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Delete a handle from the cache\r\n      /// </summary>\r\n      /// <param name=\"handle\">the handle</param>\r\n      public void Delete(IFCAnyHandle handle)\r\n      {\r\n         if (HandleToElement.ContainsKey(handle))\r\n         {\r\n            ElementId elem = HandleToElement[handle];\r\n            HandleToElement.Remove(handle);\r\n            ExporterCacheManager.ElementToHandleCache.Delete(elem);\r\n         }\r\n      }\r\n\r\n      public void Clear()\r\n      {\r\n         HandleToElement.Clear();\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/HostPartsCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// The cache which holds host element and associated parts.\r\n   /// </summary>\r\n   public class HostPartsCache\r\n   {\r\n      /// <summary>\r\n      /// The dictionary mapping from a host element to its parts. \r\n      /// </summary>\r\n      private Dictionary<ElementId, Dictionary<ElementId, List<KeyValuePair<PartOrGeometry, IFCRange>>>> HostToPartsDictionary = new();\r\n\r\n      /// <summary>\r\n      /// Finds the parts from the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"hostId\">The id of host element.</param>\r\n      /// <param name=\"LevelId\">The id of level to finding the parts.</param>\r\n      /// <returns>The list of parts.</returns>\r\n      public List<KeyValuePair<PartOrGeometry, IFCRange>> Find(ElementId hostId, ElementId LevelId)\r\n      {\r\n         Dictionary<ElementId, List<KeyValuePair<PartOrGeometry, IFCRange>>> levelParts;\r\n         List<KeyValuePair<PartOrGeometry, IFCRange>> partsList;\r\n         if (HostToPartsDictionary.TryGetValue(hostId, out levelParts))\r\n         {\r\n            if (levelParts.TryGetValue(LevelId, out partsList))\r\n               return partsList;\r\n         }\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds the list of parts to the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"hostId\">The host element elementId.</param>\r\n      /// <param name=\"partsList\">The list of parts.</param>\r\n      public void Register(ElementId hostId, Dictionary<ElementId, List<KeyValuePair<PartOrGeometry, IFCRange>>> levelParts)\r\n      {\r\n         if (HasRegistered(hostId))\r\n            return;\r\n\r\n         HostToPartsDictionary[hostId] = levelParts;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the host element beem registered.\r\n      /// </summary>\r\n      /// <param name=\"hostId\">The id of host element.</param>\r\n      /// <returns>True if registered, false otherwise.</returns>\r\n      public bool HasRegistered(ElementId hostId)\r\n      {\r\n         return HostToPartsDictionary.ContainsKey(hostId);\r\n      }\r\n\r\n      public void Clear()\r\n      {\r\n         HostToPartsDictionary.Clear();\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/IFCEnumExtensions.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Export.Toolkit.IFC4x3;\r\nusing Revit.IFC.Export.Properties;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   public static class IFCEnumExtensions\r\n   {\r\n      /// <summary>\r\n      /// Converts the <see cref=\"IFCVersion\"/> to string.\r\n      /// </summary>\r\n      /// <returns>The string of IFCVersion.</returns>\r\n      public static string ToLabel(this IFCVersion version)\r\n      {\r\n         switch (version)\r\n         {\r\n            case IFCVersion.IFC2x2:\r\n               return Resources.IFCVersion2x2;\r\n            case IFCVersion.IFC2x3:\r\n               return Resources.IFCVersion2x3;\r\n            case IFCVersion.IFCBCA:\r\n            case IFCVersion.IFC2x3CV2:\r\n               return Resources.IFCMVD2x3CV2;\r\n            case IFCVersion.IFC4:\r\n               return Resources.IFC4;\r\n            case IFCVersion.IFCCOBIE:\r\n               return Resources.IFCMVDGSA;\r\n            case IFCVersion.IFC2x3FM:\r\n               return Resources.IFC2x3FM;\r\n            case IFCVersion.IFC4DTV:\r\n               return Resources.IFC4DTV;\r\n            case IFCVersion.IFC4RV:\r\n               return Resources.IFC4RV;\r\n            case IFCVersion.IFC2x3BFM:\r\n               return Resources.IFCMVDFMHandOver;\r\n            case IFCVersion.IFC4x3:\r\n               return Resources.IFCVersion4x3;\r\n            case IFCVersion.IFC4x3RV:\r\n               return Resources.IFC4x3RV;\r\n            case IFCVersion.IFC4x3DTV:\r\n               return Resources.IFC4x3DTV;\r\n            case IFCVersion.IFCSG:\r\n               return Resources.IFCSG;\r\n            default:\r\n               return Resources.IFCVersionUnrecognized;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts the <see cref=\"KnownERNames\"/> to string.\r\n      /// </summary>\r\n      /// <returns>The string of .</returns>\r\n      public static string ToShortLabel(this KnownERNames erName)\r\n      {\r\n         switch (erName)\r\n         {\r\n            case KnownERNames.Architecture:\r\n               return Resources.ER_ArchitectureShort;\r\n            case KnownERNames.BuildingService:\r\n               return Resources.ER_BuildingServiceShort;\r\n            case KnownERNames.Structural:\r\n               return Resources.ER_StructuralShort;\r\n            default:\r\n               return string.Empty;\r\n         }\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Get the UI Name for the Exchange Requirement (ER). Note that this string may be localized\r\n      /// </summary>\r\n      /// <param name=\"erEnum\">The ER Enum value</param>\r\n      /// <returns>The localized ER name string</returns>\r\n      public static string ToFullLabel(this KnownERNames erEnum)\r\n      {\r\n         switch (erEnum)\r\n         {\r\n            case KnownERNames.Architecture:\r\n               return Resources.ER_Architecture;\r\n            case KnownERNames.BuildingService:\r\n               return Resources.ER_BuildingService;\r\n            case KnownERNames.Structural:\r\n               return Resources.ER_Structural;\r\n            default:\r\n               return string.Empty;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the UI Name for the Facility type. Note that this string may be localized.\r\n      /// </summary>\r\n      /// <param name=\"facilityTypeEnum\">The facility type enum value.</param>\r\n      /// <returns>The localized facility type name.</returns>\r\n      public static string ToFullLabel(this KnownFacilityTypes facilityTypeEnum)\r\n      {\r\n         switch (facilityTypeEnum)\r\n         {\r\n            case KnownFacilityTypes.Bridge:\r\n               return Resources.FacilityBridge;\r\n            case KnownFacilityTypes.Building:\r\n               return Resources.FacilityBuilding;\r\n            case KnownFacilityTypes.MarineFacility:\r\n               return Resources.FacilityMarineFacility;\r\n            case KnownFacilityTypes.Railway:\r\n               return Resources.FacilityRailway;\r\n            case KnownFacilityTypes.Road:\r\n               return Resources.FacilityRoad;\r\n            default:\r\n               return string.Empty;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the UI Name for the IfcBridgeTypeEnum. Note that this string may be localized.\r\n      /// </summary>\r\n      /// <param name=\"bridgeTypeEnum\">The bridge type enum value.</param>\r\n      /// <returns>The localized bridge type name.</returns>\r\n      public static string ToFullLabel(this IFCBridgeType facilityTypeEnum)\r\n      {\r\n         switch (facilityTypeEnum)\r\n         {\r\n            case IFCBridgeType.ARCHED:\r\n               return Resources.BridgeArched;\r\n            case IFCBridgeType.CABLE_STAYED:\r\n               return Resources.BridgeCableStayed;\r\n            case IFCBridgeType.CANTILEVER:\r\n               return Resources.BridgeCantilever;\r\n            case IFCBridgeType.CULVERT:\r\n               return Resources.BridgeCulvert;\r\n            case IFCBridgeType.FRAMEWORK:\r\n               return Resources.BridgeFramework;\r\n            case IFCBridgeType.GIRDER:\r\n               return Resources.BridgeGirder;\r\n            case IFCBridgeType.NOTDEFINED:\r\n               return Resources.NotDefined;\r\n            case IFCBridgeType.SUSPENSION:\r\n               return Resources.BridgeSuspension;\r\n            case IFCBridgeType.TRUSS:\r\n               return Resources.BridgeTruss;\r\n            case IFCBridgeType.USERDEFINED:\r\n               return Resources.UserDefined;\r\n            default:\r\n               return string.Empty;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the UI Name for the IfcMarineFacilityTypeEnum. Note that this string may be localized.\r\n      /// </summary>\r\n      /// <param name=\"marineFacilityTypeEnum\">The marine facility type enum value.</param>\r\n      /// <returns>The localized marine facility type name.</returns>\r\n      public static string ToFullLabel(this IFCMarineFacilityType facilityTypeEnum)\r\n      {\r\n         switch (facilityTypeEnum)\r\n         {\r\n            case IFCMarineFacilityType.BARRIERBEACH:\r\n               return Resources.MarineFacilityBarrierBeach;\r\n            case IFCMarineFacilityType.BREAKWATER:\r\n               return Resources.MarineFacilityBreakwater;\r\n            case IFCMarineFacilityType.CANAL:\r\n               return Resources.MarineFacilityCanal;\r\n            case IFCMarineFacilityType.DRYDOCK:\r\n               return Resources.MarineFacilityDryDock;\r\n            case IFCMarineFacilityType.FLOATINGDOCK:\r\n               return Resources.MarineFacilityFloatingDock;\r\n            case IFCMarineFacilityType.HYDROLIFT:\r\n               return Resources.MarineFacilityHydrolift;\r\n            case IFCMarineFacilityType.JETTY:\r\n               return Resources.MarineFacilityJetty;\r\n            case IFCMarineFacilityType.LAUNCHRECOVERY:\r\n               return Resources.MarineFacilityLaunchRecovery;\r\n            case IFCMarineFacilityType.MARINEDEFENCE:\r\n               return Resources.MarineFacilityMarineDefense;\r\n            case IFCMarineFacilityType.NAVIGATIONALCHANNEL:\r\n               return Resources.MarineFacilityNavigationalChannel;\r\n            case IFCMarineFacilityType.NOTDEFINED:\r\n               return Resources.NotDefined;\r\n            case IFCMarineFacilityType.PORT:\r\n               return Resources.MarineFacilityPort;\r\n            case IFCMarineFacilityType.QUAY:\r\n               return Resources.MarineFacilityQuay;\r\n            case IFCMarineFacilityType.REVETMENT:\r\n               return Resources.MarineFacilityRevetment;\r\n            case IFCMarineFacilityType.SHIPLIFT:\r\n               return Resources.MarineFacilityShipLift;\r\n            case IFCMarineFacilityType.SHIPLOCK:\r\n               return Resources.MarineFacilityShipLock;\r\n            case IFCMarineFacilityType.SHIPYARD:\r\n               return Resources.MarineFacilityShipyard;\r\n            case IFCMarineFacilityType.SLIPWAY:\r\n               return Resources.MarineFacilitySlipway;\r\n            case IFCMarineFacilityType.USERDEFINED:\r\n               return Resources.UserDefined;\r\n            case IFCMarineFacilityType.WATERWAY:\r\n               return Resources.MarineFacilityWaterway;\r\n            case IFCMarineFacilityType.WATERWAYSHIPLIFT:\r\n               return Resources.MarineFacilityWaterwayShiplift;\r\n            default:\r\n               return string.Empty;\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/IFCExchangeRequirements.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Export.Properties;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   public class IFCExchangeRequirements\r\n   {\r\n      /// <summary>\r\n      /// The list of Known Exchange Requirements\r\n      /// </summary>\r\n      static IDictionary<IFCVersion, IList<KnownERNames>> KnownExchangeRequirements = new Dictionary<IFCVersion, IList<KnownERNames>>();\r\n      static IDictionary<IFCVersion, IList<string>> KnownExchangeRequirementsLocalized = new Dictionary<IFCVersion, IList<string>>();\r\n\r\n      static void Initialize()\r\n      {\r\n         if (KnownExchangeRequirements.Count == 0)\r\n         {\r\n            // For IFC2x3 CV2.0\r\n            IFCVersion ifcVersion = IFCVersion.IFC2x3CV2;\r\n            KnownExchangeRequirements.Add(ifcVersion, new List<KnownERNames>() { KnownERNames.Architecture, KnownERNames.BuildingService, KnownERNames.Structural });\r\n            List<string> erNameListForUI = new List<string>(KnownExchangeRequirements[ifcVersion].Select(x => x.ToFullLabel()));\r\n            KnownExchangeRequirementsLocalized.Add(ifcVersion, erNameListForUI);\r\n\r\n            // For IFC4RV\r\n            ifcVersion = IFCVersion.IFC4RV;\r\n            KnownExchangeRequirements.Add(ifcVersion, new List<KnownERNames>() { KnownERNames.Architecture, KnownERNames.BuildingService, KnownERNames.Structural });\r\n            KnownExchangeRequirementsLocalized.Add(ifcVersion, erNameListForUI);\r\n\r\n            // For IFC4.3RV\r\n            ifcVersion = IFCVersion.IFC4x3RV;\r\n            KnownExchangeRequirements.Add(ifcVersion, new List<KnownERNames>() { KnownERNames.Architecture, KnownERNames.BuildingService, KnownERNames.Structural });\r\n            KnownExchangeRequirementsLocalized.Add(ifcVersion, erNameListForUI);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the list of known Exchange Requirements\r\n      /// </summary>\r\n      public static IDictionary<IFCVersion, IList<KnownERNames>> ExchangeRequirements\r\n      {\r\n         get\r\n         {\r\n            Initialize();\r\n            return KnownExchangeRequirements;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get list of ER names for UI based on the given IFC Version\r\n      /// </summary>\r\n      /// <param name=\"ifcVers\">The IFC Version</param>\r\n      /// <returns>The List of known ER</returns>\r\n      public static IList<string> ExchangeRequirementListForUI(IFCVersion ifcVers)\r\n      {\r\n         Initialize();\r\n         return KnownExchangeRequirementsLocalized.FirstOrDefault(x => x.Key == ifcVers).Value;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the enumeration value of the Exchange Requirement given the localized string from the UI\r\n      /// </summary>\r\n      /// <param name=\"UIERStringValue\">the string value from the UI</param>\r\n      /// <returns>the ER enumeration</returns>\r\n      public static KnownERNames GetEREnum(string UIERStringValue)\r\n      {\r\n         KnownERNames erEnum = KnownERNames.NotDefined;\r\n\r\n         if (Resources.ER_Architecture.Equals(UIERStringValue))\r\n            erEnum = KnownERNames.Architecture;\r\n         else if (Resources.ER_BuildingService.Equals(UIERStringValue))\r\n            erEnum = KnownERNames.BuildingService;\r\n         else if (Resources.ER_Structural.Equals(UIERStringValue))\r\n            erEnum = KnownERNames.Structural;\r\n\r\n         return erEnum;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Parse the Exchange Requirement (ER) name string into the associated Enum\r\n      /// </summary>\r\n      /// <param name=\"erName\">The ER Name</param>\r\n      /// <returns>The ER enum</returns>\r\n      public static KnownERNames ParseEREnum(string erName)\r\n      {\r\n         if (Enum.TryParse(erName, out KnownERNames erEnum))\r\n         {\r\n            return erEnum;\r\n         }\r\n\r\n         return KnownERNames.NotDefined;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/IFCExportConfiguration.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.Reflection;\r\nusing System.Linq;\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Extensions;\r\nusing Newtonsoft.Json;\r\nusing Newtonsoft.Json.Linq;\r\nusing Revit.IFC.Export.Properties;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Compare 2 configurations\r\n   /// </summary>\r\n   public static class ConfigurationComparer\r\n   {\r\n      public static bool ConfigurationsAreEqual<T>(T obj1, T obj2)\r\n      {\r\n         JsonSerializerSettings settings = new JsonSerializerSettings\r\n         {\r\n            DateFormatHandling = DateFormatHandling.MicrosoftDateFormat\r\n         };\r\n\r\n         var obj1Ser =  JsonConvert.SerializeObject(obj1, settings);\r\n         var obj2Ser = JsonConvert.SerializeObject(obj2, settings);\r\n         return obj1Ser == obj2Ser;\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Represents a particular setup for an export to IFC.\r\n   /// </summary>\r\n   public class IFCExportConfiguration\r\n   {\r\n      #region GeneralTab\r\n      /// <summary>\r\n      /// The IFCVersion of the configuration.\r\n      /// </summary>\r\n      public IFCVersion IFCVersion { get; set; } = IFCVersion.IFC2x3CV2;\r\n\r\n      private KnownERNames m_ExchangeRequirement = KnownERNames.NotDefined;\r\n\r\n      public KnownERNames ExchangeRequirement\r\n      {\r\n         get\r\n         {\r\n            return m_ExchangeRequirement;\r\n         }\r\n         set\r\n         {\r\n            if (value == KnownERNames.NotDefined || \r\n               (IFCExchangeRequirements.ExchangeRequirements.TryGetValue(IFCVersion, out IList<KnownERNames> erList) &&\r\n               (erList?.Contains(value) ?? false)))\r\n            {\r\n               m_ExchangeRequirement = value;\r\n            }\r\n         }\r\n      }\r\n\r\n      private KnownFacilityTypes m_FacilityType = KnownFacilityTypes.NotDefined;\r\n\r\n      public KnownFacilityTypes FacilityType\r\n      {\r\n         get\r\n         {\r\n            return m_FacilityType;\r\n         }\r\n         set\r\n         {\r\n            if (IFCFacilityTypes.FacilityTypes.TryGetValue(IFCVersion, out IList<KnownFacilityTypes> facilityTypes))\r\n            {\r\n               if (facilityTypes?.Contains(value) ?? false)\r\n               {\r\n                  m_FacilityType = value;\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      private Enum m_FacilityPredefinedType = null;\r\n\r\n      public Enum FacilityPredefinedType\r\n      {\r\n         get\r\n         {\r\n            return m_FacilityPredefinedType;\r\n         }\r\n         set\r\n         {\r\n            m_FacilityPredefinedType = IFCFacilityTypes.ValidatedPredefinedTypeEnum(FacilityType, value);\r\n         }\r\n      }\r\n\r\n      public string CategoryMapping { get; set; } = null;\r\n\r\n      public string PropertyMapping { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The IFCFileFormat of the configuration.\r\n      /// </summary>\r\n      public IFCFileFormat IFCFileType { get; set; } = IFCFileFormat.Ifc;\r\n\r\n      /// <summary>\r\n      /// The phase of the document to export.\r\n      /// </summary>\r\n      public long ActivePhaseId { get; set; } = ElementId.InvalidElementId.Value;\r\n\r\n      /// <summary>\r\n      /// The level of space boundaries of the configuration.\r\n      /// </summary>\r\n      public int SpaceBoundaries { get; set; } = 0;\r\n\r\n      /// <summary>\r\n      /// Whether or not to split walls and columns by building stories.\r\n      /// </summary>\r\n      public bool SplitWallsAndColumns { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Value indicating whether steel elements should be exported.\r\n      /// </summary>\r\n      public bool IncludeSteelElements { get; set; } = true;\r\n\r\n      #region ProjectAddress\r\n\r\n      /// <summary>\r\n      /// Items to set from Project Address Dialog Box\r\n      /// Only the option boolean are going to be remembered as the Address information itself is obtained from ProjectInfo\r\n      /// </summary>\r\n      public IFCAddressItem ProjectAddress { get; set; } = new IFCAddressItem();\r\n\r\n      #endregion  // ProjectAddress\r\n\r\n      #endregion  // GeneralTab\r\n\r\n      // Items under Additional Content Tab\r\n      #region AdditionalContentTab\r\n\r\n      /// <summary>\r\n      /// True to include 2D elements supported by IFC export (notes and filled regions). \r\n      /// False to exclude them.\r\n      /// </summary>\r\n      public bool Export2DElements { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Specify how we export linked files.\r\n      /// </summary>\r\n      [PropertyUpgrader(typeof(ExportLinkedFilesPropertyUpgrader))]\r\n      public LinkedFileExportAs ExportLinkedFiles { get; set; } = LinkedFileExportAs.DontExport;\r\n\r\n      /// <summary>\r\n      /// True to export only the visible elements of the current view (based on filtering and/or element and category hiding). \r\n      /// False to export the entire model.  \r\n      /// </summary>\r\n      public bool VisibleElementsOfCurrentView { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// True to export rooms if their bounding box intersect with the section box.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If the section box isn't visible, then all the rooms are exported if this option is set.\r\n      /// </remarks>\r\n      public bool ExportRoomsInView { get; set; } = false;\r\n\r\n      #endregion     //AdditionalContentTab\r\n\r\n      // Items under Property Sets Tab\r\n      #region PropertySetsTab\r\n\r\n      /// <summary>\r\n      /// True to include the Revit-specific property sets based on parameter groups. \r\n      /// False to exclude them.\r\n      /// </summary>\r\n      public bool ExportInternalRevitPropertySets { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// True to include the IFC common property sets. \r\n      /// False to exclude them.\r\n      /// </summary>\r\n      public bool ExportIFCCommonPropertySets { get; set; } = true;\r\n\r\n      /// <summary>\r\n      /// Whether or not to include base quantities for model elements in the export data. \r\n      /// Base quantities are generated from model geometry to reflect actual physical quantity values, independent of measurement rules or methods.\r\n      /// </summary>\r\n      public bool ExportBaseQuantities { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Whether or not to include ceilings grids for ceilings in the export data. \r\n      /// </summary>\r\n      public bool ExportCeilingGrids { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// True to include the material property sets. \r\n      /// False to exclude them.\r\n      /// </summary>\r\n      public bool ExportMaterialPsets { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// True to allow exports of schedules as custom property sets.\r\n      /// False to exclude them.\r\n      /// </summary>\r\n      public bool ExportSchedulesAsPsets { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// True to export specific schedules.\r\n      /// </summary>\r\n      public bool? ExportSpecificSchedules { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// True to allow user defined property sets to be exported\r\n      /// False to ignore them\r\n      /// </summary>\r\n      public bool ExportUserDefinedPsets { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// The name of the file containing the user defined property sets to be exported.\r\n      /// </summary>\r\n      public string ExportUserDefinedPsetsFileName { get; set; } = \"\";\r\n\r\n      /// <summary>\r\n      /// Whether or not to include type property to the user defined property sets. \r\n      /// </summary>\r\n      public bool UseTypePropertiesInInstacePSets { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// True if the User decides to use the Parameter Mapping Table\r\n      /// False if the user decides to ignore it\r\n      /// </summary>\r\n      public bool ExportUserDefinedParameterMapping { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// The name of the file containing the user defined Parameter Mapping Table to be exported.\r\n      /// </summary>\r\n      public string ExportUserDefinedParameterMappingFileName { get; set; } = \"\";\r\n\r\n      #region ClassificationSettings\r\n\r\n      /// <summary>\r\n      /// Settings from the Classification Dialog Box\r\n      /// </summary>\r\n      public IFCClassification ClassificationSettings { get; set; } = new IFCClassification();\r\n\r\n      #endregion  // ClassificationSettings\r\n\r\n      #endregion  // PropertySetsTab\r\n\r\n      // Items under Level of Detail Tab\r\n      #region LevelOfDetailTab\r\n\r\n      /// <summary>\r\n      /// Value indicating the level of detail to be used by tessellation. Valid valus is between 0 to 1\r\n      /// </summary>\r\n      public double TessellationLevelOfDetail { get; set; } = 0.5;\r\n\r\n      #endregion  //LevelOfDetailTab \r\n\r\n      // Items under Advanced Tab\r\n      #region AdvancedTab\r\n\r\n      /// <summary>\r\n      /// True to export the parts as independent building elements\r\n      /// False to export the parts with host element.\r\n      /// </summary>\r\n      public bool ExportPartsAsBuildingElements { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// True to allow exports of solid models when possible.\r\n      /// False to exclude them.\r\n      /// </summary>\r\n      public bool ExportSolidModelRep { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// True to use the active view when generating geometry.\r\n      /// False to use default export options.\r\n      /// </summary>\r\n      public bool UseActiveViewGeometry { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// True to use the family and type name for references. \r\n      /// False to use the type name only.\r\n      /// </summary>\r\n      public bool UseFamilyAndTypeNameForReference { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// True to use a simplified approach to calculation of room volumes (based on extrusion of 2D room boundaries) which is also the default when exporting to IFC 2x2.   \r\n      /// False to use the Revit calculated room geometry to represent the room volumes (which is the default when exporting to IFC 2x3).\r\n      /// </summary>\r\n      public bool Use2DRoomBoundaryForVolume { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// True to include IFCSITE elevation in the site local placement origin.\r\n      /// </summary>\r\n      public bool IncludeSiteElevation { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// True to store the IFC GUID in the file after the export.  This will require manually saving the file to keep the parameter.\r\n      /// </summary>\r\n      public bool StoreIFCGUID { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// True to export bounding box.\r\n      /// False to exclude them.\r\n      /// </summary>\r\n      public bool ExportBoundingBox { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Value indicating whether tessellated geometry should be kept only as triagulation\r\n      /// (Note: in IFC4_ADD2 IfcPolygonalFaceSet is introduced that can simplify the coplanar triangle faces into a polygonal face. This option skip this)\r\n      /// </summary>\r\n      public bool UseOnlyTriangulation { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Value indicating whether only the Type name will be used to name the IfcTypeObject\r\n      /// </summary>\r\n      public bool UseTypeNameOnlyForIfcType { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Don't create a container entity for floors and roofs unless exporting parts\r\n      /// </summary>\r\n      public bool ExportHostAsSingleEntity { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Use Author field in Project Information to set IfcOwnerHistory LastModified attribute\r\n      /// </summary>\r\n      public bool OwnerHistoryLastModified { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Use this field in Project Information to set how will be bars in uniform sets exported in IFC.\r\n      /// </summary>\r\n      public bool ExportBarsInUniformSetsAsSeparateIFCEntities { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Value indicating whether the IFC Entity Name will use visible Revit Name\r\n      /// </summary>\r\n      public bool UseVisibleRevitNameAsEntityName { get; set; } = false;\r\n\r\n      #endregion  // AdvancedTab\r\n\r\n      // Items under GeoReference Tab\r\n      #region GeoReference\r\n\r\n      /// <summary>\r\n      /// Selected Site name\r\n      /// </summary>\r\n      public string SelectedSite { get; set; }\r\n\r\n      /// <summary>\r\n      /// The origin of the exported file: either shared coordinates (Site Survey Point), Project Base Point, or internal coordinates.\r\n      /// </summary>\r\n      public SiteTransformBasis SitePlacement { get; set; } = SiteTransformBasis.Shared;\r\n\r\n      /// <summary>\r\n      /// Projected Coordinate System Name\r\n      /// </summary>\r\n      public string GeoRefCRSName { get; set; } = \"\";\r\n\r\n      /// <summary>\r\n      /// Projected Coordinate System Desccription\r\n      /// </summary>\r\n      public string GeoRefCRSDesc { get; set; } = \"\";\r\n\r\n      /// <summary>\r\n      /// EPSG Code for the Projected CRS\r\n      /// </summary>\r\n      public string GeoRefEPSGCode { get; set; } = \"\";\r\n\r\n      /// <summary>\r\n      /// The geodetic datum of the ProjectedCRS\r\n      /// </summary>\r\n      public string GeoRefGeodeticDatum { get; set; } = \"\";\r\n\r\n      /// <summary>\r\n      /// The Map Unit of the ProjectedCRS\r\n      /// </summary>\r\n      public string GeoRefMapUnit { get; set; } = \"\";\r\n      #endregion // GeoReference\r\n\r\n      // Items under Entities to Export Tab\r\n      #region EntitiesToExportTab\r\n\r\n      /// <summary>\r\n      /// Exclude filter string (element list in an arrary, seperated with semicolon ';')\r\n      /// </summary>\r\n      public string ExcludeFilter { get; set; } = \"\";\r\n\r\n      #endregion  // EntitiesToExportTab\r\n\r\n      // Items under COBie Tab\r\n      #region COBieTab\r\n\r\n      /// <summary>\r\n      /// COBie specific company information (from a dedicated tab)\r\n      /// </summary>\r\n      public string COBieCompanyInfo { get; set; } = \"\";\r\n\r\n      /// <summary>\r\n      /// COBie specific project information (from a dedicated tab)\r\n      /// </summary>\r\n      public string COBieProjectInfo { get; set; } = \"\";\r\n\r\n      #endregion     // COBieTab\r\n\r\n      /// <summary>\r\n      /// The name of the configuration.\r\n      /// </summary>\r\n      public string Name { get; set; } = \"\";\r\n\r\n      /// <summary>\r\n      /// Id of the active view.\r\n      /// </summary>\r\n      [JsonIgnore]\r\n      public ElementId ActiveViewId { get; set; } = ElementId.InvalidElementId;\r\n\r\n      private static IFCExportConfiguration s_inSessionConfiguration = null;\r\n\r\n      /// <summary>\r\n      /// Properties that should be ignored when updating built-in configurations.\r\n      /// </summary>\r\n      private static readonly HashSet<string> s_excludedPropertiesForBuiltInUpdate = new HashSet<string>\r\n      {\r\n         \"ExportUserDefinedPsetsFileName\"\r\n      };\r\n\r\n      /// <summary>\r\n      /// Whether the configuration is builtIn or not.\r\n      /// </summary>\r\n      [JsonIgnore]\r\n      public bool IsBuiltIn { get; private set; } = false;\r\n\r\n      /// <summary>\r\n      /// Whether the configuration is in-session or not.\r\n      /// </summary>\r\n      [JsonIgnore]\r\n      public bool IsInSession { get; private set; } = false;\r\n\r\n      /// <summary>\r\n      /// Creates a new default configuration.\r\n      /// </summary>\r\n      /// <returns>The new default configuration.</returns>\r\n      public static IFCExportConfiguration CreateDefaultConfiguration()\r\n      {\r\n         IFCExportConfiguration defConfig = new IFCExportConfiguration\r\n         {\r\n            Name = \"<< Default >>\"\r\n         };\r\n         return defConfig;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs a default configuration.\r\n      /// </summary>\r\n      public IFCExportConfiguration()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a builtIn configuration by particular options.\r\n      /// </summary>\r\n      /// <param name=\"name\">The configuration name.</param>\r\n      /// <param name=\"ifcVersion\">The IFCVersion.</param>\r\n      /// <param name=\"spaceBoundaries\">The space boundary level.</param>\r\n      /// <param name=\"exportBaseQuantities\">The ExportBaseQuantities.</param>\r\n      /// <param name=\"splitWalls\">The SplitWallsAndColumns option.</param>\r\n      /// <param name=\"internalSets\">The ExportInternalRevitPropertySets option.</param>\r\n      /// <param name=\"materialPsets\">The ExportMaterialPsets option.</param>\r\n      /// <param name=\"schedulesAsPSets\">The ExportSchedulesAsPsets option.</param>\r\n      /// <param name=\"userDefinedPSets\">The ExportUserDefinedPsets option.</param>\r\n      /// <param name=\"PlanElems2D\">The Export2DElements option.</param>\r\n      /// <param name=\"exportBoundingBox\">The exportBoundingBox option.</param>\r\n      /// <param name=\"exportLinkedFiles\">The exportLinkedFiles option.</param>\r\n      /// <returns>The builtIn configuration.</returns>\r\n      public static IFCExportConfiguration CreateBuiltInConfiguration(IFCVersion ifcVersion,\r\n                                 int spaceBoundaries,\r\n                                 bool exportBaseQuantities,\r\n                                 bool splitWalls,\r\n                                 bool internalSets,\r\n                                 bool materialPsets,\r\n                                 bool schedulesAsPSets,\r\n                                 bool userDefinedPSets,\r\n                                 bool useTypePropertiesInInstacePSets,\r\n                                 bool userDefinedParameterMapping,\r\n                                 bool PlanElems2D,\r\n                                 bool exportBoundingBox,\r\n                                 LinkedFileExportAs exportLinkedFiles,\r\n                                 string excludeFilter = \"\",\r\n                                 bool includeSteelElements = false,\r\n                                 KnownERNames exchangeRequirement = KnownERNames.NotDefined,\r\n                                 string customName = null,\r\n                                 KnownFacilityTypes facilityType = KnownFacilityTypes.NotDefined,\r\n                                 Enum facilityPredefinedType = null,\r\n                                 bool exportCeilingGrids = false)\r\n      {\r\n         IFCExportConfiguration configuration = new IFCExportConfiguration();\r\n\r\n         // Items from General Tab\r\n         configuration.Name = string.IsNullOrWhiteSpace(customName) ? ifcVersion.ToLabel() : customName;\r\n         if (exchangeRequirement != KnownERNames.NotDefined)\r\n         {\r\n            configuration.Name = $\"{configuration.Name} [{exchangeRequirement.ToShortLabel()}]\";\r\n         }\r\n\r\n         configuration.IFCVersion = ifcVersion;\r\n         configuration.ExchangeRequirement = exchangeRequirement;\r\n         configuration.FacilityType = facilityType;\r\n         configuration.FacilityPredefinedType = facilityPredefinedType;\r\n         configuration.IFCFileType = IFCFileFormat.Ifc;\r\n         configuration.ActivePhaseId = ElementId.InvalidElementId.Value;\r\n         configuration.SpaceBoundaries = spaceBoundaries;\r\n\r\n         configuration.SplitWallsAndColumns = splitWalls;\r\n         configuration.IncludeSteelElements = includeSteelElements;\r\n\r\n         // Items from Additional Content Tab\r\n         configuration.Export2DElements = PlanElems2D;\r\n         configuration.ExportLinkedFiles = exportLinkedFiles;\r\n         configuration.ExportCeilingGrids = exportCeilingGrids;\r\n\r\n         // Items from Property Sets Tab\r\n         configuration.ExportInternalRevitPropertySets = internalSets;\r\n         configuration.ExportBaseQuantities = exportBaseQuantities;\r\n         configuration.ExportMaterialPsets = materialPsets;\r\n         configuration.ExportSchedulesAsPsets = schedulesAsPSets;\r\n         configuration.ExportUserDefinedPsets = userDefinedPSets;\r\n         configuration.UseTypePropertiesInInstacePSets = useTypePropertiesInInstacePSets;\r\n         configuration.ExportUserDefinedPsetsFileName = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @\"\\\" + configuration.Name + @\".txt\";\r\n         configuration.ExportUserDefinedParameterMapping = userDefinedParameterMapping;\r\n\r\n         // Items from Advanced Tab\r\n         configuration.ExportBoundingBox = exportBoundingBox;\r\n\r\n         // Items from the Entities to Export Tab\r\n         configuration.ExcludeFilter = excludeFilter;\r\n\r\n         configuration.IsBuiltIn = true;\r\n         configuration.IsInSession = false;\r\n\r\n         PresetConfigurations(ref configuration);\r\n\r\n         return configuration;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Special present for some built-in configurations should be placed here\r\n      /// </summary>\r\n      /// <param name=\"configuration\">the configuration</param>\r\n      static void PresetConfigurations(ref IFCExportConfiguration configuration)\r\n      {\r\n         switch (configuration.IFCVersion)\r\n         {\r\n            case IFCVersion.IFCSG:\r\n               {\r\n                  configuration.ExportUserDefinedPsetsFileName = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @\"\\IFC+SG Property Sets.txt\";\r\n                  configuration.GeoRefCRSName = \"SVY21\";\r\n                  configuration.GeoRefCRSDesc = \"SVY21 / Singapore TM\";\r\n                  configuration.GeoRefEPSGCode = \"EPSG:3414\";\r\n                  configuration.GeoRefGeodeticDatum = \"SVY21\";\r\n                  configuration.GeoRefMapUnit = \"Metre\";\r\n                  configuration.VisibleElementsOfCurrentView = true;\r\n                  configuration.ExportRoomsInView = true;\r\n                  configuration.UseActiveViewGeometry = true;\r\n                  configuration.IncludeSiteElevation = true;\r\n                  configuration.UseOnlyTriangulation = true;\r\n                  configuration.SitePlacement = SiteTransformBasis.Project;\r\n                  break;\r\n               }\r\n            case IFCVersion.IFC2x3FM:\r\n               {\r\n                  configuration.ExportUserDefinedPsetsFileName = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @\"\\IFC2x3 COBie 2.4 Design Deliverable.txt\";\r\n                  break;\r\n               }\r\n            default:\r\n               break;\r\n         }\r\n      }\r\n\r\n      public IFCExportConfiguration Clone()\r\n      {\r\n         IFCExportConfiguration theClone = (IFCExportConfiguration)this.MemberwiseClone();\r\n         theClone.ProjectAddress = this.ProjectAddress.Clone();\r\n         theClone.ClassificationSettings = this.ClassificationSettings.Clone();\r\n         return theClone;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Duplicates this configuration by giving a new name.\r\n      /// </summary>\r\n      /// <param name=\"newName\">The new name of the copy configuration.</param>\r\n      /// <returns>The duplicated configuration.</returns>\r\n      public IFCExportConfiguration Duplicate(String newName, bool makeEditable = false)\r\n      {\r\n         IFCExportConfiguration dup = Clone();\r\n         dup.Name = newName;\r\n         if (makeEditable)\r\n         {\r\n            dup.IsBuiltIn = false;\r\n            dup.IsInSession = false;\r\n         }\r\n         return dup;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the in-session configuration.\r\n      /// </summary>\r\n      /// <returns>The in-session configuration.</returns>\r\n      public static IFCExportConfiguration GetInSession()\r\n      {\r\n         if (s_inSessionConfiguration == null)\r\n         {\r\n            s_inSessionConfiguration = new IFCExportConfiguration();\r\n            s_inSessionConfiguration.Name = Resources.InSessionConfiguration;\r\n            s_inSessionConfiguration.ExportUserDefinedPsetsFileName = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @\"\\DefaultUserDefinedParameterSets.txt\";\r\n            s_inSessionConfiguration.ExportUserDefinedParameterMappingFileName = \"\";\r\n            s_inSessionConfiguration.IsInSession = true;\r\n         }\r\n\r\n         return s_inSessionConfiguration;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set the in-session configuration to cache.\r\n      /// </summary>\r\n      /// <param name=\"configuration\">The the in-session configuration.</param>\r\n      public static void SetInSession(IFCExportConfiguration configuration)\r\n      {\r\n         if (!configuration.IsInSession)\r\n         {\r\n            throw new ArgumentException(\"SetInSession requires an In-Session configuration\", \"configuration\");\r\n         }\r\n         s_inSessionConfiguration = configuration;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Update Built-in configuration from specified configuration (mainly used to update from the cached data) \r\n      /// </summary>\r\n      /// <param name=\"updatedConfig\">the configuration providing the updates</param>\r\n      public void UpdateBuiltInConfiguration(IFCExportConfiguration updatedConfig)\r\n      {\r\n         if (IsBuiltIn && Name.Equals(updatedConfig.Name))\r\n         {\r\n            IDictionary<string, object> updConfigDict = updatedConfig.GetType().GetProperties()\r\n               .Where(x => !s_excludedPropertiesForBuiltInUpdate.Contains(x.Name))\r\n               .ToDictionary(x => x.Name, x => x.GetValue(updatedConfig));\r\n\r\n            foreach (PropertyInfo prop in GetType().GetProperties())\r\n            {\r\n               if (updConfigDict.TryGetValue(prop.Name, out object value))\r\n               {\r\n                  if (prop.GetSetMethod() != null)\r\n                     prop.SetValue(this, value);\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      private (bool useLegacyParameterMappingOptions, IFCParameterTemplate parameterTemplate) GetParameterMappingOptionsSource(Document document, bool isNewParameterMappingEnabled)\r\n      {\r\n         bool useLegacyParameterMappingOptions = !isNewParameterMappingEnabled || IsBuiltIn;\r\n\r\n         IFCParameterTemplate parameterTemplate = null;\r\n         if (!useLegacyParameterMappingOptions)\r\n         {\r\n            parameterTemplate = string.IsNullOrEmpty(PropertyMapping)\r\n                ? IFCParameterTemplate.GetOrCreateInSessionTemplate(document)\r\n                : IFCParameterTemplate.FindByName(document, PropertyMapping);\r\n\r\n            if (parameterTemplate == null)\r\n               useLegacyParameterMappingOptions = true;\r\n         }\r\n\r\n         return (useLegacyParameterMappingOptions, parameterTemplate);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Updates the IFCExportOptions with the settings in this configuration.\r\n      /// </summary>\r\n      /// <param name=\"document\">The Revit document.</param>\r\n      /// <param name=\"options\">The IFCExportOptions to update.</param>\r\n      /// <param name=\"filterViewId\">The id of the view that will be used to select which elements to export.</param>\r\n      public void UpdateOptions(Document document, IFCExportOptions options, ElementId filterViewId, bool isNewParameterMappingEnabled)\r\n      {\r\n         options.FilterViewId = VisibleElementsOfCurrentView ? filterViewId : ElementId.InvalidElementId;\r\n\r\n         (bool useLegacyParameterMappingOptions, IFCParameterTemplate parameterTemplate) = \r\n            GetParameterMappingOptionsSource(document, isNewParameterMappingEnabled);\r\n\r\n         foreach (PropertyInfo prop in GetType().GetProperties())\r\n         {\r\n            switch (prop.Name)\r\n            {\r\n               case \"Name\":\r\n                  options.AddOption(\"ConfigName\", Name);      // Add config name into the option for use in the exporter\r\n                  break;\r\n               case \"IFCVersion\":\r\n                  options.FileVersion = IFCVersion;\r\n                  break;\r\n               case \"ActivePhaseId\":\r\n                  if (options.FilterViewId == ElementId.InvalidElementId && IFCPhaseAttributes.Validate(ActivePhaseId, document))\r\n                     options.AddOption(prop.Name, ActivePhaseId.ToString());\r\n                  break;\r\n               case \"SpaceBoundaries\":\r\n                  options.SpaceBoundaryLevel = SpaceBoundaries;\r\n                  break;\r\n               case \"SplitWallsAndColumns\":\r\n                  options.WallAndColumnSplitting = SplitWallsAndColumns;\r\n                  break;\r\n               case \"ProjectAddress\":\r\n                  string projectAddrJsonString = JsonConvert.SerializeObject(ProjectAddress);\r\n                  options.AddOption(prop.Name, projectAddrJsonString);\r\n                  break;\r\n               case \"ClassificationSettings\":\r\n                  JsonSerializerSettings dateFormatSettings = new JsonSerializerSettings\r\n                  {\r\n                     DateFormatHandling = DateFormatHandling.MicrosoftDateFormat\r\n                  };\r\n                  string classificationJsonStr = JsonConvert.SerializeObject(ClassificationSettings, dateFormatSettings);\r\n                  options.AddOption(prop.Name, classificationJsonStr);\r\n                  break;\r\n               case \"PropertyMapping\":\r\n                  if (!useLegacyParameterMappingOptions && parameterTemplate != null)\r\n                  {\r\n                     options.AddOption(prop.Name, parameterTemplate.Name);\r\n                  }\r\n                  break;\r\n               case \"ExportIFCCommonPropertySets\":\r\n               case \"ExportInternalRevitPropertySets\":\r\n               case \"ExportBaseQuantities\":\r\n               case \"ExportMaterialPsets\":\r\n               case \"ExportSchedulesAsPsets\":\r\n               case \"ExportUserDefinedPsets\":\r\n                  if (useLegacyParameterMappingOptions)\r\n                  {\r\n                     var val = prop.GetValue(this, null);\r\n                     if (val != null)\r\n                        options.AddOption(prop.Name, val.ToString());\r\n                  }\r\n                  break;\r\n               default: \r\n                  var propVal = prop.GetValue(this, null);\r\n                  if (propVal != null)\r\n                     options.AddOption(prop.Name, propVal.ToString());\r\n                  break;\r\n            }\r\n         }\r\n         options.ExportBaseQuantities = ExportBaseQuantities;\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Identifies the version selected by the user.\r\n      /// </summary>\r\n      [JsonIgnore]\r\n      public String FileVersionDescription\r\n      {\r\n         get\r\n         {\r\n            IFCVersionAttributes versionAttributes = new IFCVersionAttributes(IFCVersion);\r\n            return versionAttributes.ToString();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts to the string to identify the configuration.\r\n      /// </summary>\r\n      /// <returns>The string to identify the configuration.</returns>\r\n      public override String ToString()\r\n      {\r\n         if (IsBuiltIn)\r\n         {\r\n            return \"<\" + Name + \" \" + Properties.Resources.Setup + \">\";\r\n         }\r\n         return Name;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Loads the propertie for this configuration from the input Json props.\r\n      /// </summary>\r\n      /// <param name=\"dictionary\">Key, value pairs for each read in property.</param>\r\n      /// <param name=\"serializer\">Json serializer used to load data. </param>\r\n      public void DeserializeFromJson(JObject jsonObject, JsonSerializer serializer)\r\n      {\r\n         Type type = GetType();\r\n\r\n         foreach (var prop in jsonObject.Properties())\r\n         {\r\n            string propName = prop.Name;\r\n            JToken propValue = prop.Value;\r\n\r\n            PropertyInfo propInfo = type.GetProperty(propName);\r\n\r\n            if (propInfo == null)\r\n               continue;\r\n\r\n            if (propInfo.CanWrite && propInfo.GetCustomAttribute(typeof(JsonIgnoreAttribute)) == null)\r\n            {\r\n               if (propInfo.GetCustomAttribute(typeof(PropertyUpgraderAttribute)) is PropertyUpgraderAttribute upgrader)\r\n               {\r\n                  upgrader.Upgrade(this, propInfo, propValue);\r\n                  continue;\r\n               }\r\n\r\n               try\r\n               {\r\n                  propInfo.SetValue(this, propValue.ToObject(propInfo.PropertyType, serializer));\r\n               }\r\n               catch (Exception)\r\n               {\r\n                  // Handle exceptions that may occur during property deserialization to continue loading user configuration.\r\n                  // The default value should be set.\r\n               }\r\n\r\n               continue;\r\n            }\r\n\r\n            if (propName == nameof(IsBuiltIn))\r\n            {\r\n               IsBuiltIn = propValue.ToObject<bool>(serializer);\r\n            }\r\n            else if (propName == nameof(IsInSession))\r\n            {\r\n               IsInSession = propValue.ToObject<bool>(serializer);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Serialize the configuration into Json to be stored\r\n      /// </summary>\r\n      /// <returns>the serialized json string for the configuration</returns>\r\n      public string SerializeConfigToJson()\r\n      {\r\n         JsonSerializerSettings settings = new JsonSerializerSettings\r\n         {\r\n            DateFormatHandling = DateFormatHandling.MicrosoftDateFormat\r\n         };\r\n         return JsonConvert.SerializeObject(this, settings);\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Converter to handle specialize Deserialization for the Configurations. \r\n   /// </summary>\r\n   public class IFCExportConfigurationConverter : JsonConverter\r\n   {\r\n      public override bool CanConvert(Type objectType)\r\n      {\r\n         return objectType == typeof(IFCExportConfiguration);\r\n      }\r\n\r\n      public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\r\n      {\r\n         if (reader.TokenType == JsonToken.Null)\r\n            return null;\r\n\r\n         var jsonObject = JObject.Load(reader);\r\n\r\n         // Create the instance to deserialize into.\r\n         IFCExportConfiguration config = IFCExportConfiguration.CreateDefaultConfiguration();\r\n         config.DeserializeFromJson(jsonObject, serializer);\r\n         return config;\r\n      }\r\n\r\n      public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\r\n      {\r\n         // Since we only need deserialization in this case, writing is not implemented.\r\n         throw new NotImplementedException();\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// An interface for property updaters.\r\n   /// </summary>\r\n   public interface IPropertyUpgrader\r\n   {\r\n      /// <summary>\r\n      /// A method to be called by the <see cref=\"IFCExportConfigurationConverter\"/>\r\n      /// </summary>\r\n      /// <param name=\"destination\">An instance of the <see cref=\"IFCExportConfiguration\"/>.</param>\r\n      /// <param name=\"propertyInfo\">A <see cref=\"PropertyInfo\"/> instance to set upgraded value.</param>\r\n      /// <param name=\"value\">A property value to upgrade.</param>\r\n      void Upgrade(object destination, PropertyInfo propertyInfo, object value);\r\n   }\r\n\r\n   /// <summary>\r\n   /// Used to specify <see cref=\"IPropertyUpgrader\"/>.\r\n   /// </summary>\r\n   [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]\r\n   public sealed class PropertyUpgraderAttribute : Attribute\r\n   {\r\n      private Type m_upgraderType;\r\n\r\n      /// <summary>\r\n      /// Initializes a new instance of the <see cref=\"PropertyUpgraderAttribute\"/> class with the specified upgrader\r\n      /// </summary>\r\n      /// <param name=\"upgraderType\">An <see cref=\"IPropertyUpgrader\"/> type that should be applied to specific property.</param>\r\n      public PropertyUpgraderAttribute(Type upgraderType)\r\n      {\r\n         m_upgraderType = upgraderType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// A method to be called by the <see cref=\"IFCExportConfigurationConverter\"/>\r\n      /// </summary>\r\n      /// <param name=\"destination\">An instance of the <see cref=\"IFCExportConfiguration\"/>.</param>\r\n      /// <param name=\"propertyInfo\">A <see cref=\"PropertyInfo\"/> instance to set upgraded value.</param>\r\n      /// <param name=\"value\">A property value to upgrade.</param>\r\n      public void Upgrade(object destination, PropertyInfo propertyInfo, object value)\r\n      {\r\n         if (Activator.CreateInstance(m_upgraderType) is IPropertyUpgrader upgrader)\r\n         {\r\n            upgrader.Upgrade(destination, propertyInfo, value);\r\n         }\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Upgrader for the <see cref=\"IFCExportConfiguration.ExportLinkedFiles\"/> property.\r\n   /// </summary>\r\n   /// <remarks>\r\n   /// In Revit 2024 the <see cref=\"IFCExportConfiguration.ExportLinkedFiles\"/> property type changed from bool to the <see cref=\"Revit.IFC.Export.Utility.LinkedFileExportAs\"/> enum,\r\n   /// therefore, it is necessary to check the value type to convert to <see cref=\"Revit.IFC.Export.Utility.LinkedFileExportAs\"/>.\r\n   /// </remarks>\r\n   public class ExportLinkedFilesPropertyUpgrader : IPropertyUpgrader\r\n   {\r\n      public void Upgrade(object destination, PropertyInfo propertyInfo, object value)\r\n      {\r\n         if (!propertyInfo.CanWrite || !(value is JValue))\r\n            return;\r\n\r\n         JValue jvalue = value as JValue;\r\n         switch (jvalue.Type)\r\n         {\r\n            case JTokenType.Boolean:\r\n               {\r\n                  bool boolValue = (bool)jvalue.Value;\r\n                  propertyInfo.SetValue(destination, boolValue ? LinkedFileExportAs.ExportAsSeparate : LinkedFileExportAs.DontExport);\r\n                  break;\r\n               }\r\n            case JTokenType.Integer:\r\n               {\r\n                  try\r\n                  {\r\n                     int jvalueAsInt = (int)(long)jvalue.Value;\r\n                     if (Enum.IsDefined(typeof(LinkedFileExportAs), jvalueAsInt))\r\n                     {\r\n                        propertyInfo.SetValue(destination, (LinkedFileExportAs)jvalueAsInt);\r\n                     }\r\n                  }\r\n                  catch\r\n                  {\r\n                     // TODO: Give user error.\r\n                  }\r\n                  break;\r\n               }\r\n         }\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/IFCExportConfigurationsMap.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.ExtensibleStorage;\r\nusing Revit.IFC.Common.Enums;\r\nusing Newtonsoft.Json;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// The map to store BuiltIn and Saved configurations.\r\n   /// </summary>\r\n   public class IFCExportConfigurationsMap\r\n   {\r\n      private Dictionary<String, IFCExportConfiguration> m_configurations = new Dictionary<String, IFCExportConfiguration>();\r\n\r\n      /// <summary>\r\n      /// The document associated with this configuration map.\r\n      /// Must be set before calling methods that access document data.\r\n      /// </summary>\r\n      public Document Document { get; set; } = null;\r\n\r\n      private Schema m_OldSchema = null;\r\n      private static Guid s_OldSchemaId = new Guid(\"A1E672E5-AC88-4933-A019-F9068402CFA7\");\r\n\r\n      private Schema m_mapSchema = null;\r\n      private static Guid s_mapSchemaId = new Guid(\"DCB88B13-594F-44F6-8F5D-AE9477305AC3\");\r\n\r\n      // New schema based on json for the entire configuration instead of individual item\r\n      private Schema m_jsonSchema = null;\r\n      private static Guid s_jsonSchemaId = new Guid(\"C2A3E6FE-CE51-4F35-8FF1-20C34567B687\");\r\n\r\n      /// <summary>\r\n      /// Constructs a default map.\r\n      /// </summary>\r\n      public IFCExportConfigurationsMap()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs a default map with a document.\r\n      /// </summary>\r\n      /// <param name=\"document\">The Revit document.</param>\r\n      public IFCExportConfigurationsMap(Document document)\r\n      {\r\n         Document = document;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs a new map as a copy of an existing one.\r\n      /// </summary>\r\n      /// <param name=\"map\">The specific map to copy.</param>\r\n      public IFCExportConfigurationsMap(IFCExportConfigurationsMap map)\r\n      {\r\n         Document = map.Document;\r\n         // Deep copy\r\n         foreach (IFCExportConfiguration value in map.Values)\r\n         {\r\n            AddOrReplace(value.Clone());\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds the built-in configurations to the map.\r\n      /// </summary>\r\n      public void AddBuiltInConfigurations()\r\n      {\r\n         LinkedFileExportAs linkedFileExportAs = LinkedFileExportAs.DontExport;\r\n\r\n         // These are the built-in configurations.  Provide a more extensible means of storage.\r\n         // Order of construction: name, version, space boundaries, QTO, split walls, internal sets, 2d elems, boundingBox\r\n         AddOrReplace(IFCExportConfiguration.CreateBuiltInConfiguration(IFCVersion.IFC2x3CV2, 0, false, false, false, false, false, false, false, false, false, false, linkedFileExportAs, includeSteelElements: true));\r\n         AddOrReplace(IFCExportConfiguration.CreateBuiltInConfiguration(IFCVersion.IFC2x3, 1, false, false, true, false, false, false, false, false, true, false, linkedFileExportAs, includeSteelElements: true));\r\n         AddOrReplace(IFCExportConfiguration.CreateBuiltInConfiguration(IFCVersion.IFCCOBIE, 2, true, true, true, false, false, false, false, false, true, true, linkedFileExportAs, includeSteelElements: true));\r\n         AddOrReplace(IFCExportConfiguration.CreateBuiltInConfiguration(IFCVersion.IFC2x3BFM, 1, true, true, false, false, false, false, false, false, true, false, linkedFileExportAs, includeSteelElements: true));\r\n         AddOrReplace(IFCExportConfiguration.CreateBuiltInConfiguration(IFCVersion.IFC2x2, 1, false, false, true, false, false, false, false, false, false, false, linkedFileExportAs));\r\n         AddOrReplace(IFCExportConfiguration.CreateBuiltInConfiguration(IFCVersion.IFC2x3FM, 1, true, false, false, false, true, true, false, false, true, true, linkedFileExportAs, includeSteelElements: true));\r\n         AddOrReplace(IFCExportConfiguration.CreateBuiltInConfiguration(IFCVersion.IFC4RV, 0, true, false, false, false, false, false, false, false, false, false, linkedFileExportAs, includeSteelElements: true,\r\n            exchangeRequirement:KnownERNames.Architecture));\r\n         AddOrReplace(IFCExportConfiguration.CreateBuiltInConfiguration(IFCVersion.IFC4RV, 0, true, false, false, false, false, false, false, false, false, false, linkedFileExportAs, includeSteelElements: true,\r\n            exchangeRequirement:KnownERNames.Structural));\r\n         AddOrReplace(IFCExportConfiguration.CreateBuiltInConfiguration(IFCVersion.IFC4RV, 0, true, false, false, false, false, false, false, false, false, false, linkedFileExportAs, includeSteelElements: true,\r\n            exchangeRequirement:KnownERNames.BuildingService));\r\n         AddOrReplace(IFCExportConfiguration.CreateBuiltInConfiguration(IFCVersion.IFC4DTV, 0, true, false, false, false, false, false, false, false, false, false, linkedFileExportAs, includeSteelElements: true));\r\n         AddOrReplace(IFCExportConfiguration.CreateBuiltInConfiguration(IFCVersion.IFC4x3RV, 0, true, false, false, false, false, false, false, false, false, false, linkedFileExportAs, includeSteelElements: true,\r\n            exchangeRequirement:KnownERNames.Architecture));\r\n         AddOrReplace(IFCExportConfiguration.CreateBuiltInConfiguration(IFCVersion.IFC4x3RV, 0, true, false, false, false, false, false, false, false, false, false, linkedFileExportAs, includeSteelElements: true,\r\n            exchangeRequirement:KnownERNames.Structural));\r\n         AddOrReplace(IFCExportConfiguration.CreateBuiltInConfiguration(IFCVersion.IFC4x3RV, 0, true, false, false, false, false, false, false, false, false, false, linkedFileExportAs, includeSteelElements: true,\r\n            exchangeRequirement:KnownERNames.BuildingService));\r\n         AddOrReplace(IFCExportConfiguration.CreateBuiltInConfiguration(IFCVersion.IFC4x3DTV, 0, true, false, false, false, false, false, false, false, false, false, linkedFileExportAs, includeSteelElements: true));\r\n         AddOrReplace(IFCExportConfiguration.CreateBuiltInConfiguration(IFCVersion.IFCSG, 1, true, true, false, false, false, true, false, false, true, false, linkedFileExportAs, includeSteelElements: true));\r\n      }\r\n\r\n      private LinkedFileExportAs ParseLinkedFilesAs(string val,\r\n        Entity configEntity)\r\n      {\r\n         if (string.IsNullOrWhiteSpace(val))\r\n            return LinkedFileExportAs.DontExport;\r\n\r\n         if (Enum.TryParse(val, out LinkedFileExportAs newLinkedFileStatus))\r\n            return newLinkedFileStatus;\r\n\r\n         // Used to be a bool; this is the backup.\r\n         bool oldLinkedFileStatus = false;\r\n         if (!bool.TryParse(val, out oldLinkedFileStatus))  // m_mapSchema case\r\n            oldLinkedFileStatus = configEntity.Get<bool>(s_setupExportLinkedFiles); // m_OldSchema case\r\n\r\n         return oldLinkedFileStatus ?\r\n            LinkedFileExportAs.ExportAsSeparate :\r\n            LinkedFileExportAs.DontExport;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds the saved configuration from document to the map.\r\n      /// </summary>\r\n      /// <param name=\"lastSelectedConfigs\">Optional dictionary of last selected configurations to add.</param>\r\n      public void AddSavedConfigurations(IDictionary<string, IFCExportConfiguration> lastSelectedConfigs)\r\n      {\r\n         try\r\n         {\r\n            // find the config in old schema.\r\n            if (m_OldSchema == null)\r\n            {\r\n               m_OldSchema = Schema.Lookup(s_OldSchemaId);\r\n\r\n               if (m_OldSchema != null)\r\n               {\r\n                  foreach (DataStorage storedSetup in GetSavedConfigurations(m_OldSchema))\r\n                  {\r\n                     Entity configEntity = storedSetup.GetEntity(m_OldSchema);\r\n                     IFCExportConfiguration configuration = IFCExportConfiguration.CreateDefaultConfiguration();\r\n                     configuration.Name = configEntity.Get<string>(s_setupName);\r\n                     configuration.IFCVersion = (IFCVersion)configEntity.Get<int>(s_setupVersion);\r\n                     configuration.ExchangeRequirement = IFCExchangeRequirements.ParseEREnum(configEntity.Get<string>(s_exchangeRequirement));\r\n                     configuration.FacilityType = IFCFacilityTypes.ParseFacilityTypeEnum(configEntity.Get<string>(s_facilityType));\r\n                     configuration.FacilityPredefinedType = IFCFacilityTypes.ParseFacilityPredefinedTypeEnum(configuration.FacilityType, configEntity.Get<string>(s_facilityPredefinedType));\r\n                     configuration.IFCFileType = (IFCFileFormat)configEntity.Get<int>(s_setupFileFormat);\r\n                     configuration.SpaceBoundaries = configEntity.Get<int>(s_setupSpaceBoundaries);\r\n                     configuration.ExportBaseQuantities = configEntity.Get<bool>(s_setupQTO);\r\n                     configuration.SplitWallsAndColumns = configEntity.Get<bool>(s_splitWallsAndColumns);\r\n                     configuration.Export2DElements = configEntity.Get<bool>(s_setupExport2D);\r\n                     configuration.ExportCeilingGrids = configEntity.Get<bool>(s_setupExportCeilingGrids);\r\n                     configuration.ExportInternalRevitPropertySets = configEntity.Get<bool>(s_setupExportRevitProps);\r\n                     configuration.CategoryMapping = configEntity.Get<string>(s_categoryMapping);\r\n                     configuration.PropertyMapping = configEntity.Get<string>(s_propertyMapping);\r\n                     Field fieldIFCCommonPropertySets = m_OldSchema.GetField(s_setupExportIFCCommonProperty);\r\n                     if (fieldIFCCommonPropertySets != null)\r\n                        configuration.ExportIFCCommonPropertySets = configEntity.Get<bool>(s_setupExportIFCCommonProperty);\r\n                     configuration.Use2DRoomBoundaryForVolume = configEntity.Get<bool>(s_setupUse2DForRoomVolume);\r\n                     configuration.UseFamilyAndTypeNameForReference = configEntity.Get<bool>(s_setupUseFamilyAndTypeName);\r\n                     Field fieldPartsAsBuildingElements = m_OldSchema.GetField(s_setupExportPartsAsBuildingElements);\r\n                     if (fieldPartsAsBuildingElements != null)\r\n                        configuration.ExportPartsAsBuildingElements = configEntity.Get<bool>(s_setupExportPartsAsBuildingElements);\r\n                     Field fieldExportBoundingBox = m_OldSchema.GetField(s_setupExportBoundingBox);\r\n                     if (fieldExportBoundingBox != null)\r\n                        configuration.ExportBoundingBox = configEntity.Get<bool>(s_setupExportBoundingBox);\r\n                     Field fieldExportSolidModelRep = m_OldSchema.GetField(s_setupExportSolidModelRep);\r\n                     if (fieldExportSolidModelRep != null)\r\n                        configuration.ExportSolidModelRep = configEntity.Get<bool>(s_setupExportSolidModelRep);\r\n                     Field fieldExportMaterialPsets = m_OldSchema.GetField(s_setupExportMaterialPsets);\r\n                     if (fieldExportMaterialPsets != null)\r\n                        configuration.ExportMaterialPsets = configEntity.Get<bool>(s_setupExportMaterialPsets);\r\n                     Field fieldExportSchedulesAsPsets = m_OldSchema.GetField(s_setupExportSchedulesAsPsets);\r\n                     if (fieldExportSchedulesAsPsets != null)\r\n                        configuration.ExportSchedulesAsPsets = configEntity.Get<bool>(s_setupExportSchedulesAsPsets);\r\n                     Field fieldExportUserDefinedPsets = m_OldSchema.GetField(s_setupExportUserDefinedPsets);\r\n                     if (fieldExportUserDefinedPsets != null)\r\n                        configuration.ExportUserDefinedPsets = configEntity.Get<bool>(s_setupExportUserDefinedPsets);\r\n                     Field fieldExportUserDefinedPsetsFileName = m_OldSchema.GetField(s_setupExportUserDefinedPsetsFileName);\r\n                     if (fieldExportUserDefinedPsetsFileName != null)\r\n                        configuration.ExportUserDefinedPsetsFileName = configEntity.Get<string>(s_setupExportUserDefinedPsetsFileName);\r\n                     Field fieldUseTypePropertiesInInstacePSets = m_OldSchema.GetField(s_setupUseTypePropertiesInInstacePSets);\r\n                     if (fieldExportUserDefinedPsets != null)\r\n                        configuration.UseTypePropertiesInInstacePSets = configEntity.Get<bool>(s_setupUseTypePropertiesInInstacePSets);\r\n\r\n                     Field fieldExportUserDefinedParameterMapingTable = m_OldSchema.GetField(s_setupExportUserDefinedParameterMapping);\r\n                     if (fieldExportUserDefinedParameterMapingTable != null)\r\n                        configuration.ExportUserDefinedParameterMapping = configEntity.Get<bool>(s_setupExportUserDefinedParameterMapping);\r\n\r\n                     Field fieldExportUserDefinedParameterMappingFileName = m_OldSchema.GetField(s_setupExportUserDefinedParameterMappingFileName);\r\n                     if (fieldExportUserDefinedParameterMappingFileName != null)\r\n                        configuration.ExportUserDefinedParameterMappingFileName = configEntity.Get<string>(s_setupExportUserDefinedParameterMappingFileName);\r\n\r\n                     Field fieldExportLinkedFiles = m_OldSchema.GetField(s_setupExportLinkedFiles);\r\n                     if (fieldExportLinkedFiles != null)\r\n                        configuration.ExportLinkedFiles = ParseLinkedFilesAs(s_setupExportLinkedFiles,\r\n                           configEntity);\r\n                     Field fieldIncludeSiteElevation = m_OldSchema.GetField(s_setupIncludeSiteElevation);\r\n                     if (fieldIncludeSiteElevation != null)\r\n                        configuration.IncludeSiteElevation = configEntity.Get<bool>(s_setupIncludeSiteElevation);\r\n                     Field fieldStoreIFCGUID = m_OldSchema.GetField(s_setupStoreIFCGUID);\r\n                     if (fieldStoreIFCGUID != null)\r\n                        configuration.StoreIFCGUID = configEntity.Get<bool>(s_setupStoreIFCGUID);\r\n                     Field fieldActivePhase = m_OldSchema.GetField(s_setupActivePhase);\r\n                     if (fieldActivePhase != null)\r\n                        configuration.ActivePhaseId = int.Parse(configEntity.Get<string>(s_setupActivePhase));\r\n                     Field fieldExportRoomsInView = m_OldSchema.GetField(s_setupExportRoomsInView);\r\n                     if (fieldExportRoomsInView != null)\r\n                        configuration.ExportRoomsInView = configEntity.Get<bool>(s_setupExportRoomsInView);\r\n                     Field fieldIncludeSteelElements = m_OldSchema.GetField(s_includeSteelElements);\r\n                     if (fieldIncludeSteelElements != null)\r\n                        configuration.IncludeSteelElements = configEntity.Get<bool>(s_includeSteelElements);\r\n                     Field fieldUseOnlyTriangulation = m_OldSchema.GetField(s_useOnlyTriangulation);\r\n                     if (fieldUseOnlyTriangulation != null)\r\n                        configuration.UseOnlyTriangulation = configEntity.Get<bool>(s_useOnlyTriangulation);\r\n                     Field fieldUseTypeNameOnlyForIfcType = m_OldSchema.GetField(s_useTypeNameOnlyForIfcType);\r\n                     if (fieldUseTypeNameOnlyForIfcType != null)\r\n                        configuration.UseTypeNameOnlyForIfcType = configEntity.Get<bool>(s_useTypeNameOnlyForIfcType);\r\n                     Field fieldUseVisibleRevitNameAsEntityName = m_OldSchema.GetField(s_useVisibleRevitNameAsEntityName);\r\n                     if (fieldUseVisibleRevitNameAsEntityName != null)\r\n                        configuration.UseVisibleRevitNameAsEntityName = configEntity.Get<bool>(s_useVisibleRevitNameAsEntityName);\r\n                     Field fieldTessellationLevelOfDetail = m_OldSchema.GetField(s_setupTessellationLevelOfDetail);\r\n                     if (fieldTessellationLevelOfDetail != null)\r\n                        configuration.TessellationLevelOfDetail = configEntity.Get<double>(s_setupTessellationLevelOfDetail);\r\n                     Field fieldExportHostAsSingleEntity = m_OldSchema.GetField(s_exportHostAsSingleEntity);\r\n                     if (fieldExportHostAsSingleEntity != null)\r\n                        configuration.ExportHostAsSingleEntity = configEntity.Get<bool>(s_exportHostAsSingleEntity);\r\n                     Field fieldOwnerHistoryLastModified = m_OldSchema.GetField(s_ownerHistoryLastModified);\r\n                     if (fieldOwnerHistoryLastModified != null)\r\n                        configuration.OwnerHistoryLastModified = configEntity.Get<bool>(s_ownerHistoryLastModified);\r\n                     Field fieldExportBarsInUniformRebarSetsAsSeparateIFCEntitiesd = m_OldSchema.GetField(s_exportBarsInUniformRebarSetsAsSeparateIFCEntities);\r\n                     if (fieldExportBarsInUniformRebarSetsAsSeparateIFCEntitiesd != null)\r\n                        configuration.ExportBarsInUniformSetsAsSeparateIFCEntities = configEntity.Get<bool>(s_exportBarsInUniformRebarSetsAsSeparateIFCEntities);\r\n                     AddOrReplace(configuration);\r\n                  }\r\n               }\r\n            }\r\n\r\n            // This is the newer schema\r\n            if (m_mapSchema == null)\r\n            {\r\n               m_mapSchema = Schema.Lookup(s_mapSchemaId);\r\n\r\n               if (m_mapSchema != null)\r\n               {\r\n                  foreach (DataStorage storedSetup in GetSavedConfigurations(m_mapSchema))\r\n                  {\r\n                     Entity configEntity = storedSetup.GetEntity(m_mapSchema);\r\n                     IDictionary<string, string> configMap = configEntity.Get<IDictionary<string, string>>(s_configMapField);\r\n                     IFCExportConfiguration configuration = IFCExportConfiguration.CreateDefaultConfiguration();\r\n                     if (configMap.ContainsKey(s_setupName))\r\n                        configuration.Name = configMap[s_setupName];\r\n                     if (configMap.ContainsKey(s_setupVersion))\r\n                        configuration.IFCVersion = (IFCVersion)Enum.Parse(typeof(IFCVersion), configMap[s_setupVersion]);\r\n                     if (configMap.ContainsKey(s_exchangeRequirement))\r\n                        configuration.ExchangeRequirement = IFCExchangeRequirements.ParseEREnum(configMap[s_exchangeRequirement]);\r\n                     if (configMap.ContainsKey(s_facilityType))\r\n                        configuration.FacilityType = IFCFacilityTypes.ParseFacilityTypeEnum(configMap[s_facilityType]);\r\n                     if (configMap.ContainsKey(s_facilityPredefinedType))\r\n                        configuration.FacilityPredefinedType = IFCFacilityTypes.ParseFacilityPredefinedTypeEnum(configuration.FacilityType, configMap[s_facilityPredefinedType]);\r\n                     if (configMap.ContainsKey(s_setupFileFormat))\r\n                        configuration.IFCFileType = (IFCFileFormat)Enum.Parse(typeof(IFCFileFormat), configMap[s_setupFileFormat]);\r\n                     if (configMap.ContainsKey(s_setupSpaceBoundaries))\r\n                        configuration.SpaceBoundaries = int.Parse(configMap[s_setupSpaceBoundaries]);\r\n                     if (configMap.ContainsKey(s_setupActivePhase))\r\n                        configuration.ActivePhaseId = int.Parse(configMap[s_setupActivePhase]);\r\n                     if (configMap.ContainsKey(s_setupQTO))\r\n                        configuration.ExportBaseQuantities = bool.Parse(configMap[s_setupQTO]);\r\n                     if (configMap.ContainsKey(s_setupCurrentView))\r\n                        configuration.VisibleElementsOfCurrentView = bool.Parse(configMap[s_setupCurrentView]);\r\n                     if (configMap.ContainsKey(s_splitWallsAndColumns))\r\n                        configuration.SplitWallsAndColumns = bool.Parse(configMap[s_splitWallsAndColumns]);\r\n                     if (configMap.ContainsKey(s_setupExport2D))\r\n                        configuration.Export2DElements = bool.Parse(configMap[s_setupExport2D]);\r\n                     if (configMap.ContainsKey(s_setupExportCeilingGrids))\r\n                        configuration.ExportCeilingGrids = bool.Parse(configMap[s_setupExportCeilingGrids]);\r\n                     if (configMap.ContainsKey(s_setupExportRevitProps))\r\n                        configuration.ExportInternalRevitPropertySets = bool.Parse(configMap[s_setupExportRevitProps]);\r\n                     if (configMap.ContainsKey(s_setupExportIFCCommonProperty))\r\n                        configuration.ExportIFCCommonPropertySets = bool.Parse(configMap[s_setupExportIFCCommonProperty]);\r\n                     if (configMap.ContainsKey(s_setupUse2DForRoomVolume))\r\n                        configuration.Use2DRoomBoundaryForVolume = bool.Parse(configMap[s_setupUse2DForRoomVolume]);\r\n                     if (configMap.ContainsKey(s_setupUseFamilyAndTypeName))\r\n                        configuration.UseFamilyAndTypeNameForReference = bool.Parse(configMap[s_setupUseFamilyAndTypeName]);\r\n                     if (configMap.ContainsKey(s_setupExportPartsAsBuildingElements))\r\n                        configuration.ExportPartsAsBuildingElements = bool.Parse(configMap[s_setupExportPartsAsBuildingElements]);\r\n                     if (configMap.ContainsKey(s_useActiveViewGeometry))\r\n                        configuration.UseActiveViewGeometry = bool.Parse(configMap[s_useActiveViewGeometry]);\r\n                     if (configMap.ContainsKey(s_setupExportSpecificSchedules))\r\n                        configuration.ExportSpecificSchedules = bool.Parse(configMap[s_setupExportSpecificSchedules]);\r\n                     if (configMap.ContainsKey(s_setupExportBoundingBox))\r\n                        configuration.ExportBoundingBox = bool.Parse(configMap[s_setupExportBoundingBox]);\r\n                     if (configMap.ContainsKey(s_setupExportSolidModelRep))\r\n                        configuration.ExportSolidModelRep = bool.Parse(configMap[s_setupExportSolidModelRep]);\r\n                     if (configMap.ContainsKey(s_setupExportMaterialPsets))\r\n                        configuration.ExportMaterialPsets = bool.Parse(configMap[s_setupExportMaterialPsets]);\r\n                     if (configMap.ContainsKey(s_setupExportSchedulesAsPsets))\r\n                        configuration.ExportSchedulesAsPsets = bool.Parse(configMap[s_setupExportSchedulesAsPsets]);\r\n                     if (configMap.ContainsKey(s_setupExportUserDefinedPsets))\r\n                        configuration.ExportUserDefinedPsets = bool.Parse(configMap[s_setupExportUserDefinedPsets]);\r\n                     if (configMap.ContainsKey(s_setupExportUserDefinedPsetsFileName))\r\n                        configuration.ExportUserDefinedPsetsFileName = configMap[s_setupExportUserDefinedPsetsFileName];\r\n                     if (configMap.ContainsKey(s_setupExportUserDefinedParameterMapping))\r\n                        configuration.ExportUserDefinedParameterMapping = bool.Parse(configMap[s_setupExportUserDefinedParameterMapping]);\r\n                     if (configMap.ContainsKey(s_setupExportUserDefinedParameterMappingFileName))\r\n                        configuration.ExportUserDefinedParameterMappingFileName = configMap[s_setupExportUserDefinedParameterMappingFileName];\r\n                     if (configMap.ContainsKey(s_setupExportLinkedFiles))\r\n                        configuration.ExportLinkedFiles = ParseLinkedFilesAs(configMap[s_setupExportLinkedFiles], configEntity);\r\n                     if (configMap.ContainsKey(s_setupIncludeSiteElevation))\r\n                        configuration.IncludeSiteElevation = bool.Parse(configMap[s_setupIncludeSiteElevation]);\r\n                     if (configMap.ContainsKey(s_setupStoreIFCGUID))\r\n                        configuration.StoreIFCGUID = bool.Parse(configMap[s_setupStoreIFCGUID]);\r\n                     if (configMap.ContainsKey(s_setupExportRoomsInView))\r\n                        configuration.ExportRoomsInView = bool.Parse(configMap[s_setupExportRoomsInView]);\r\n                     if (configMap.ContainsKey(s_includeSteelElements))\r\n                        configuration.IncludeSteelElements = bool.Parse(configMap[s_includeSteelElements]);\r\n                     if (configMap.ContainsKey(s_useTypeNameOnlyForIfcType))\r\n                        configuration.UseTypeNameOnlyForIfcType = bool.Parse(configMap[s_useTypeNameOnlyForIfcType]);\r\n                     if (configMap.ContainsKey(s_useVisibleRevitNameAsEntityName))\r\n                        configuration.UseVisibleRevitNameAsEntityName = bool.Parse(configMap[s_useVisibleRevitNameAsEntityName]);\r\n                     if (configMap.ContainsKey(s_useOnlyTriangulation))\r\n                        configuration.UseOnlyTriangulation = bool.Parse(configMap[s_useOnlyTriangulation]);\r\n                     if (configMap.ContainsKey(s_exportHostAsSingleEntity))\r\n                        configuration.ExportHostAsSingleEntity = bool.Parse(configMap[s_exportHostAsSingleEntity]);\r\n                     if (configMap.ContainsKey(s_ownerHistoryLastModified))\r\n                        configuration.OwnerHistoryLastModified = bool.Parse(configMap[s_ownerHistoryLastModified]);\r\n                     if (configMap.ContainsKey(s_exportBarsInUniformRebarSetsAsSeparateIFCEntities))\r\n                        configuration.ExportBarsInUniformSetsAsSeparateIFCEntities = bool.Parse(configMap[s_exportBarsInUniformRebarSetsAsSeparateIFCEntities]);\r\n                     if (configMap.ContainsKey(s_setupTessellationLevelOfDetail))\r\n                        configuration.TessellationLevelOfDetail = double.Parse(configMap[s_setupTessellationLevelOfDetail]);\r\n                     if (configMap.ContainsKey(s_categoryMapping))\r\n                        configuration.CategoryMapping = configMap[s_categoryMapping];\r\n                     if (configMap.ContainsKey(s_propertyMapping))\r\n                        configuration.PropertyMapping = configMap[s_propertyMapping];\r\n                     if (configMap.ContainsKey(s_setupSitePlacement))\r\n                     {\r\n                        SiteTransformBasis siteTrfBasis = SiteTransformBasis.Shared;\r\n                        if (Enum.TryParse(configMap[s_setupSitePlacement], out siteTrfBasis))\r\n                           configuration.SitePlacement = siteTrfBasis;\r\n                     }\r\n                     // Geo Reference info\r\n                     if (configMap.ContainsKey(s_selectedSite))\r\n                        configuration.SelectedSite = configMap[s_selectedSite];\r\n                     if (configMap.ContainsKey(s_geoRefCRSName))\r\n                        configuration.GeoRefCRSName = configMap[s_geoRefCRSName];\r\n                     if (configMap.ContainsKey(s_geoRefCRSDesc))\r\n                        configuration.GeoRefCRSDesc = configMap[s_geoRefCRSDesc];\r\n                     if (configMap.ContainsKey(s_geoRefEPSGCode))\r\n                        configuration.GeoRefEPSGCode = configMap[s_geoRefEPSGCode];\r\n                     if (configMap.ContainsKey(s_geoRefGeodeticDatum))\r\n                        configuration.GeoRefGeodeticDatum = configMap[s_geoRefGeodeticDatum];\r\n                     if (configMap.ContainsKey(s_geoRefMapUnit))\r\n                        configuration.GeoRefMapUnit = configMap[s_geoRefMapUnit];\r\n\r\n                     AddOrReplace(configuration);\r\n                  }\r\n               }\r\n            }\r\n\r\n            // In this latest schema, the entire configuration for one config is stored as a json string in the entirety\r\n            if (m_jsonSchema == null)\r\n            {\r\n               m_jsonSchema = Schema.Lookup(s_jsonSchemaId);\r\n               if (m_jsonSchema != null)\r\n               {\r\n                  foreach (DataStorage storedSetup in GetSavedConfigurations(m_jsonSchema))\r\n                  {\r\n                     try\r\n                     {\r\n                        Entity configEntity = storedSetup.GetEntity(m_jsonSchema);\r\n                        string configData = configEntity.Get<string>(s_configMapField);\r\n                        IFCExportConfiguration configuration = JsonConvert.DeserializeObject<IFCExportConfiguration>(configData, new IFCExportConfigurationConverter());\r\n                        AddOrReplace(configuration);\r\n                     }\r\n                     catch (Exception)\r\n                     {\r\n                        // don't skip all configurations if an exception occurs for one\r\n                        Document?.Application?.WriteJournalComment(\"IFC error: Cannot read IFCExportConfigurationMap schema\", true);\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n\r\n            // Add the last selected configurations if any\r\n            if (lastSelectedConfigs != null && lastSelectedConfigs.Count > 0)\r\n            {\r\n               foreach (KeyValuePair<string, IFCExportConfiguration> lastSelConfig in lastSelectedConfigs)\r\n               {\r\n                  AddOrReplace(lastSelConfig.Value);\r\n               }\r\n            }\r\n         }\r\n         catch (System.Exception)\r\n         {\r\n            // to avoid fail to show the dialog if any exception throws in reading schema.\r\n         }\r\n      }\r\n\r\n      // The MapField is to defined the map<string,string> in schema. \r\n      // Please don't change the name values, it affects the schema.\r\n      private const string s_configMapField = \"MapField\";\r\n      // The following are the keys in the MapField in older schema. For oldest schema, they are simple fields.\r\n      // In the latest schema (json based schema), there is no need for individual fields. The entire configuration is stored in one json string\r\n      private const string s_setupName = \"Name\";\r\n      private const string s_setupVersion = \"Version\";\r\n      private const string s_exchangeRequirement = \"ExchangeRequirement\";\r\n      private const string s_facilityType = \"FacilityType\";\r\n      private const string s_facilityPredefinedType = \"FacilityPredefinedType\";\r\n      private const string s_setupFileFormat = \"FileFormat\";\r\n      private const string s_setupSpaceBoundaries = \"SpaceBoundaryLevel\";\r\n      private const string s_setupQTO = \"ExportBaseQuantities\";\r\n      private const string s_splitWallsAndColumns = \"SplitWallsAndColumns\";\r\n      private const string s_setupCurrentView = \"VisibleElementsInCurrentView\";\r\n      private const string s_setupExport2D = \"Export2DElements\";\r\n      private const string s_setupExportCeilingGrids = \"ExportCeilingGrids\";\r\n      private const string s_setupExportRevitProps = \"ExportInternalRevitPropertySets\";\r\n      private const string s_setupExportIFCCommonProperty = \"ExportIFCCommonPropertySets\";\r\n      private const string s_setupUse2DForRoomVolume = \"Use2DBoundariesForRoomVolume\";\r\n      private const string s_setupUseFamilyAndTypeName = \"UseFamilyAndTypeNameForReference\";\r\n      private const string s_setupExportPartsAsBuildingElements = \"ExportPartsAsBuildingElements\";\r\n      private const string s_useActiveViewGeometry = \"UseActiveViewGeometry\";\r\n      private const string s_setupExportSpecificSchedules = \"ExportSpecificSchedules\";\r\n      private const string s_setupExportBoundingBox = \"ExportBoundingBox\";\r\n      private const string s_setupExportSolidModelRep = \"ExportSolidModelRep\";\r\n      private const string s_setupExportMaterialPsets = \"ExportMaterialPsets\";\r\n      private const string s_setupExportSchedulesAsPsets = \"ExportSchedulesAsPsets\";\r\n      private const string s_setupExportUserDefinedPsets = \"ExportUserDefinedPsets\";\r\n      private const string s_setupExportUserDefinedPsetsFileName = \"ExportUserDefinedPsetsFileName\";\r\n      private const string s_setupExportUserDefinedParameterMapping = \"ExportUserDefinedParameterMapping\";\r\n      private const string s_setupExportUserDefinedParameterMappingFileName = \"ExportUserDefinedParameterMappingFileName\";\r\n      private const string s_setupUseTypePropertiesInInstacePSets = \"UseTypePropertiesInInstacePSets\";\r\n      private const string s_setupExportLinkedFiles = \"ExportLinkedFiles\";\r\n      private const string s_setupIncludeSiteElevation = \"IncludeSiteElevation\";\r\n      private const string s_setupTessellationLevelOfDetail = \"TessellationLevelOfDetail\";\r\n      private const string s_useOnlyTriangulation = \"UseOnlyTriangulation\";\r\n      private const string s_setupStoreIFCGUID = \"StoreIFCGUID\";\r\n      private const string s_setupActivePhase = \"ActivePhase\";\r\n      private const string s_setupExportRoomsInView = \"ExportRoomsInView\";\r\n      private const string s_setupSitePlacement = \"SitePlacement\";\r\n      private const string s_useTypeNameOnlyForIfcType = \"UseTypeNameOnlyForIfcType\";\r\n      private const string s_useVisibleRevitNameAsEntityName = \"UseVisibleRevitNameAsEntityName\";\r\n      private const string s_exportHostAsSingleEntity = \"ExportHostAsSingleEntity\";\r\n      private const string s_ownerHistoryLastModified = \"OwnerHistoryLastModified\";\r\n      private const string s_exportBarsInUniformRebarSetsAsSeparateIFCEntities = \"ExportBarsInUniformRebarSetsAsSeparateIFCEntities\";\r\n      private const string s_categoryMapping = \"CategoryMapping\";\r\n      private const string s_propertyMapping = \"PropertyMapping\";\r\n      \r\n      // Used for COBie 2.4\r\n      private const string s_includeSteelElements = \"IncludeSteelElements\";\r\n      // Geo Reference info\r\n      private const string s_selectedSite = \"SelectedSite\";\r\n      private const string s_geoRefCRSName = \"GeoRefCRSName\";\r\n      private const string s_geoRefCRSDesc = \"GeoRefCRSDesc\";\r\n      private const string s_geoRefEPSGCode = \"GeoRefEPSGCode\";\r\n      private const string s_geoRefGeodeticDatum = \"GeoRefGeodeticDatum\";\r\n      private const string s_geoRefMapUnit = \"GeoRefMapUnit\";\r\n\r\n\r\n      /// <summary>\r\n      /// Updates the setups to save into the document.\r\n      /// </summary>\r\n      public void UpdateSavedConfigurations(IFCExportConfigurationsMap initialConfigs)\r\n      {\r\n         DeleteOldSchemas();\r\n         WriteSavedConfigurations(initialConfigs, createTransaction: true);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Removes the setups info from outdated schema.\r\n      /// </summary>\r\n      private void DeleteOldSchemas()\r\n      {\r\n         if (Document == null)\r\n            return;\r\n\r\n         // delete the old schema and the DataStorage.\r\n         if (m_OldSchema == null)\r\n         {\r\n            m_OldSchema = Schema.Lookup(s_OldSchemaId);\r\n         }\r\n         if (m_OldSchema != null)\r\n         {\r\n            IList<DataStorage> oldSavedConfigurations = GetSavedConfigurations(m_OldSchema);\r\n            if (oldSavedConfigurations.Count > 0)\r\n            {\r\n               Transaction deleteTransaction = new(Document,\r\n                  Properties.Resources.DeleteOldSetups);\r\n               try\r\n               {\r\n                  deleteTransaction.Start(Properties.Resources.DeleteOldConfiguration);\r\n                  List<ElementId> dataStorageToDelete = new List<ElementId>();\r\n                  foreach (DataStorage dataStorage in oldSavedConfigurations)\r\n                  {\r\n                     dataStorageToDelete.Add(dataStorage.Id);\r\n                  }\r\n                  Document.Delete(dataStorageToDelete);\r\n                  deleteTransaction.Commit();\r\n               }\r\n               catch (System.Exception)\r\n               {\r\n                  if (deleteTransaction.HasStarted())\r\n                     deleteTransaction.RollBack();\r\n               }\r\n            }\r\n         }\r\n\r\n         // delete the old schema and the DataStorage.\r\n         if (m_mapSchema == null)\r\n         {\r\n            m_mapSchema = Schema.Lookup(s_mapSchemaId);\r\n         }\r\n         if (m_mapSchema != null)\r\n         {\r\n            IList<DataStorage> oldSavedConfigurations = GetSavedConfigurations(m_mapSchema);\r\n            if (oldSavedConfigurations.Count > 0)\r\n            {\r\n               Transaction deleteTransaction = new(Document,\r\n                  Properties.Resources.DeleteOldSetups);\r\n               try\r\n               {\r\n                  deleteTransaction.Start(Properties.Resources.DeleteOldConfiguration);\r\n                  List<ElementId> dataStorageToDelete = new List<ElementId>();\r\n                  foreach (DataStorage dataStorage in oldSavedConfigurations)\r\n                  {\r\n                     dataStorageToDelete.Add(dataStorage.Id);\r\n                  }\r\n                  Document.Delete(dataStorageToDelete);\r\n                  deleteTransaction.Commit();\r\n               }\r\n               catch (System.Exception)\r\n               {\r\n                  if (deleteTransaction.HasStarted())\r\n                     deleteTransaction.RollBack();\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Saves the setups into the document using the latest schema.\r\n      /// </summary>\r\n      public void WriteSavedConfigurations(IFCExportConfigurationsMap initialConfigs, bool createTransaction)\r\n      {\r\n         if (Document == null)\r\n            return;\r\n\r\n         // update the configurations to new map schema.\r\n         if (m_jsonSchema == null)\r\n         {\r\n            m_jsonSchema = Schema.Lookup(s_jsonSchemaId);\r\n         }\r\n\r\n         // Are there any setups to save or resave?\r\n         List<IFCExportConfiguration> setupsToSave = new List<IFCExportConfiguration>();\r\n         foreach (IFCExportConfiguration configuration in m_configurations.Values)\r\n         {\r\n            // Store in-session settings in the cached in-session configuration\r\n            if (configuration.IsInSession)\r\n            {\r\n               IFCExportConfiguration.SetInSession(configuration);\r\n               continue;\r\n            }\r\n\r\n            // Only add to setupsToSave if it is a new or changed configuration\r\n            if (initialConfigs.HasName(configuration.Name))\r\n            {\r\n               if (!ConfigurationComparer.ConfigurationsAreEqual(initialConfigs[configuration.Name], configuration))\r\n                  setupsToSave.Add(configuration);\r\n               else if (!configuration.IsBuiltIn)\r\n                  setupsToSave.Add(configuration);\r\n            }\r\n            else\r\n               setupsToSave.Add(configuration);\r\n         }\r\n\r\n         // If there are no setups to save, and if the schema is not present (which means there are no\r\n         // previously existing setups which might have been deleted) we can skip the rest of this method.\r\n         if (setupsToSave.Count <= 0 && m_jsonSchema == null)\r\n            return;\r\n\r\n         if (m_jsonSchema == null)\r\n         {\r\n            SchemaBuilder builder = new SchemaBuilder(s_jsonSchemaId);\r\n            builder.SetSchemaName(\"IFCExportConfigurationMap\");\r\n            builder.AddSimpleField(s_configMapField, typeof(String));\r\n            m_jsonSchema = builder.Finish();\r\n         }\r\n\r\n         // Overwrite all saved configs with the new list\r\n         Transaction transaction = createTransaction ? new(Document,\r\n            Properties.Resources.UpdateExportSetups) : null;\r\n         try\r\n         {\r\n            transaction?.Start(Properties.Resources.SaveConfigurationChanges);\r\n            IList<DataStorage> savedConfigurations = GetSavedConfigurations(m_jsonSchema);\r\n            int savedConfigurationCount = savedConfigurations.Count<DataStorage>();\r\n            int savedConfigurationIndex = 0;\r\n            foreach (IFCExportConfiguration configuration in setupsToSave)\r\n            {\r\n               DataStorage configStorage;\r\n               if (savedConfigurationIndex >= savedConfigurationCount)\r\n               {\r\n                  configStorage = DataStorage.Create(Document);\r\n               }\r\n               else\r\n               {\r\n                  configStorage = savedConfigurations[savedConfigurationIndex];\r\n                  savedConfigurationIndex++;\r\n               }\r\n\r\n               Entity mapEntity = new Entity(m_jsonSchema);\r\n               string configData = configuration.SerializeConfigToJson();\r\n               mapEntity.Set<string>(s_configMapField, configData);\r\n               configStorage.SetEntity(mapEntity);\r\n            }\r\n\r\n            List<ElementId> elementsToDelete = new List<ElementId>();\r\n            for (; savedConfigurationIndex < savedConfigurationCount; savedConfigurationIndex++)\r\n            {\r\n               DataStorage configStorage = savedConfigurations[savedConfigurationIndex];\r\n               elementsToDelete.Add(configStorage.Id);\r\n            }\r\n            if (elementsToDelete.Count > 0)\r\n               Document.Delete(elementsToDelete);\r\n\r\n            transaction?.Commit();\r\n         }\r\n         catch (System.Exception)\r\n         {\r\n            if (transaction?.HasStarted() ?? false)\r\n               transaction?.RollBack();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the saved setups from the document.\r\n      /// </summary>\r\n      /// <returns>The saved configurations.</returns>\r\n      private IList<DataStorage> GetSavedConfigurations(Schema schema)\r\n      {\r\n         if (Document == null)\r\n            return new List<DataStorage>();\r\n\r\n         FilteredElementCollector collector = new FilteredElementCollector(Document);\r\n         collector.OfClass(typeof(DataStorage));\r\n         Func<DataStorage, bool> hasTargetData = ds => (ds.GetEntity(schema) != null && ds.GetEntity(schema).IsValid());\r\n\r\n         return collector.Cast<DataStorage>().Where<DataStorage>(hasTargetData).ToList<DataStorage>();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a configuration to the map.\r\n      /// </summary>\r\n      /// <param name=\"configuration\">The configuration.</param>\r\n      public void AddOrReplace(IFCExportConfiguration configuration)\r\n      {\r\n         if (m_configurations.ContainsKey(configuration.Name))\r\n         {\r\n            if (m_configurations[configuration.Name].IsBuiltIn)\r\n               m_configurations[configuration.Name].UpdateBuiltInConfiguration(configuration);\r\n            else\r\n               m_configurations[configuration.Name] = configuration;\r\n         }\r\n         else\r\n         {\r\n            m_configurations.Add(configuration.Name, configuration);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Remove a configuration by name.\r\n      /// </summary>\r\n      /// <param name=\"name\">The name of configuration.</param>\r\n      public void Remove(String name)\r\n      {\r\n         m_configurations.Remove(name);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Whether the map has the name of a configuration.\r\n      /// </summary>\r\n      /// <param name=\"name\">The configuration name.</param>\r\n      /// <returns>True for having the name, false otherwise.</returns>\r\n      public bool HasName(String name)\r\n      {\r\n         if (name == null) return false;\r\n         return m_configurations.ContainsKey(name);\r\n      }\r\n\r\n      /// <summary>\r\n      /// The configuration by name.\r\n      /// </summary>\r\n      /// <param name=\"name\">The name of a configuration.</param>\r\n      /// <returns>The configuration of looking by name.</returns>\r\n      public IFCExportConfiguration this[String name]\r\n      {\r\n         get\r\n         {\r\n            return m_configurations[name];\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The configurations in the map.\r\n      /// </summary>\r\n      public IEnumerable<IFCExportConfiguration> Values\r\n      {\r\n         get\r\n         {\r\n            return m_configurations.Values;\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/IFCExportInfoPair.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Export.Toolkit;\nusing Autodesk.Revit.DB;\n\nnamespace Revit.IFC.Export.Utility\n{\n   /// <summary>\n   /// A class that hold information for exporting what IfcEntity and its type pair\n   /// </summary>\n   public class IFCExportInfoPair\n   {\n      IFCEntityType m_ExportInstance = IFCEntityType.UnKnown;\n\n      IFCEntityType m_ExportType = IFCEntityType.UnKnown;\n\n      private string m_PredefinedType = null;\n\n      private string m_UserdefinedType = null;\n\n      /// <summary>\n      /// The IfcEntity for export\n      /// </summary>\n      public IFCEntityType ExportInstance\n      {\n         get\n         {\n            CheckValidEntity();\n            return m_ExportInstance;\n         }\n      }\n\n      /// <summary>\n      /// The type for export\n      /// </summary>\n      public IFCEntityType ExportType \n      {\n         get\n         {\n            CheckValidEntity();\n            return m_ExportType;\n         }\n      }\n\n      /// <summary>\n      /// Validated PredefinedType from IfcExportType (or IfcType for the old param), \n      /// or from IFC_EXPORT_ELEMENT*_AS\n      /// </summary>\n      public string PredefinedType\n      {\n         get\n         {\n            return m_PredefinedType;\n         }\n         set\n         {\n            if (string.IsNullOrWhiteSpace(value))\n            {\n               // always set to null if value is null or empty to make it possible indicate that PredefinedType is default\n               m_PredefinedType = null;\n            }\n\n            string newValidatedPredefinedType = IFCValidateEntry.GetValidIFCPredefinedType(value, m_ExportInstance.ToString());\n            if (ExporterUtil.IsNotDefined(newValidatedPredefinedType))\n            {\n               // if the ExportType is unknown, i.e. Entity without type (e.g. IfcGrid),\n               // must try the enum type from the instance type + \"Type\" generally, but\n               // there are exceptions.\n               if (m_ExportType == IFCEntityType.UnKnown)\n               {\n                  newValidatedPredefinedType = IFCValidateEntry.GetValidIFCPredefinedType(value, IfcSchemaEntityTree.GetTypeNameFromInstanceName(m_ExportInstance.ToString(), ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4));\n               }\n               else\n               {\n                  newValidatedPredefinedType = IFCValidateEntry.GetValidIFCPredefinedType(value, m_ExportType.ToString());\n               }\n            }\n            m_PredefinedType = newValidatedPredefinedType;\n         }\n      }\n\n      /// <summary>\n      /// Gets a value indicating whether the <see cref=\"PredefinedType\"/> is default.\n      /// </summary>\n      public bool IsPredefinedTypeDefault\n      {\n         get { return string.IsNullOrWhiteSpace(m_PredefinedType); }\n      }\n\n      /// <summary>\n      /// Retrieves the current <see cref=\"PredefinedType\"/>, or the <c>NOTDEFINED</c> value\n      /// if the <see cref=\"PredefinedType\"/> is default.\n      /// </summary>\n      /// <returns>\n      /// The value of the <see cref=\"PredefinedType\"/> property if set; otherwise the <c>NOTDEFINED</c> value.\n      /// </returns>\n      public string GetPredefinedTypeOrDefault()\n      {\n         return GetPredefinedTypeOrDefault(\"NOTDEFINED\");\n      }\n\n      /// <summary>\n      /// Retrieves the current <see cref=\"PredefinedType\"/>, or the specified default value\n      /// if the <see cref=\"PredefinedType\"/> is default.\n      /// </summary>\n      /// <param name=\"defaultPredefinedType\">\n      /// A value to return if the <see cref=\"PredefinedType\"/> is default, by default \"NOTDEFINED\".\n      /// </param>\n      /// <returns>\n      /// The value of the <see cref=\"PredefinedType\"/> property if set;\n      /// otherwise the <paramref name=\"defaultPredefinedType\"/> parameter.\n      /// </returns>\n      public string GetPredefinedTypeOrDefault(string defaultPredefinedType)\n      {\n         if (IsPredefinedTypeDefault)\n         {\n            return defaultPredefinedType;\n         }\n\n         return m_PredefinedType;\n      }\n\n      /// <summary>\n      /// Set the <see cref=\"PredefinedType\"/> property if property value is not initialized or \"NOTDEFINED\".\n      /// </summary>\n      /// <param name=\"predefinedType\">A new predefined type value.</param>\n      public void SetPredefinedTypeIfNotDefined(string predefinedType)\n      {\n         if (ExporterUtil.IsNotDefined(m_PredefinedType))\n         {\n            PredefinedType = predefinedType;\n         }\n      }\n\n      /// <summary>\n      /// The user-defined type, if the predefined type is set to USERDEFINED.\n      /// </summary>\n      public string UserDefinedType\n      {\n         get\n         {\n            if (string.Compare(PredefinedType, \"USERDEFINED\", StringComparison.InvariantCultureIgnoreCase) == 0)\n            {\n               return m_UserdefinedType;\n            }\n            return null;\n         }\n         set\n         {\n            m_UserdefinedType = value;\n         }\n      }\n\n      /// <summary>\n      /// Initialization of the class\n      /// </summary>\n      public IFCExportInfoPair()\n      {\n      }\n\n      /// <summary>\n      /// Initialize the class with the entity and the type.\n      /// </summary>\n      /// <param name=\"instance\">The instance entity class.</param>\n      /// <param name=\"type\">The type entity class.</param>\n      public IFCExportInfoPair(IFCEntityType instance, IFCEntityType type, string predefinedType)\n      {\n         SetValue(instance, type, predefinedType);\n      }\n\n      /// <summary>\n      /// Initialize the class with the entity and optional predefinedType and userDefinedType..\n      /// </summary>\n      /// <param name=\"entity\">The entity class.</param>\n      /// <param name=\"predefinedType\">The optional predefined type.</param>\n      /// <param name=\"userDefinedType\">The optional user defined type.</param>\n      public IFCExportInfoPair(IFCEntityType entity, string predefinedType = null, string userDefinedType = null)\n      {\n         if (!string.IsNullOrEmpty(predefinedType))\n            PredefinedType = predefinedType;\n\n         SetByTypeAndPredefinedType(entity, predefinedType);\n\n         if (!string.IsNullOrEmpty(userDefinedType))\n            UserDefinedType = userDefinedType;\n      }\n\n      /// <summary>\n      /// Check whether the export information is unknown type\n      /// </summary>\n      public bool IsUnKnown\n      {\n         get { return m_ExportInstance == IFCEntityType.UnKnown; }\n      }\n\n      /// <summary>\n      /// set an static class to this object with default value unknown\n      /// </summary>\n      public static IFCExportInfoPair UnKnown\n      {\n         get { return new IFCExportInfoPair(); }\n      }\n\n      /// <summary>\n      /// Assign the entity and the type pair\n      /// </summary>\n      /// <param name=\"instance\">the entity</param>\n      /// <param name=\"type\">the type</param>\n      public void SetValue(IFCEntityType instance, IFCEntityType type, string predefinedType)\n      {\n         instance = ElementFilteringUtil.GetValidIFCEntityType(instance);\n         m_ExportInstance = instance;\n\n         type = ElementFilteringUtil.GetValidIFCEntityType(type);\n         m_ExportType = type;\n\n         PredefinedType = predefinedType;\n      }\n\n      /// <summary>\n      /// Set the export type info by given entity type.\n      /// </summary>\n      /// <param name=\"entityType\">The entinty type.</param>\n      public void SetByType(IFCEntityType entityType)\n      {\n         SetByTypeName(entityType.ToString());\n      }\n\n      /// <summary>\n      /// Set the export type info by given entity type name.\n      /// </summary>\n      /// <param name=\"entityTypeName\">The entinty type name.</param>\n      public void SetByTypeName(string entityTypeName)\n      {\n         IFCVersion ifcVersion = ExporterCacheManager.ExportOptionsCache.FileVersion;\n         IfcSchemaEntityTree theTree = IfcSchemaEntityTree.GetEntityDictFor(ifcVersion);\n         int typeLen = 4;\n         bool isType = entityTypeName.EndsWith(\"Type\", StringComparison.CurrentCultureIgnoreCase);\n         if (!isType)\n         {\n            if (entityTypeName.Equals(\"IfcDoorStyle\", StringComparison.InvariantCultureIgnoreCase)\n               || entityTypeName.Equals(\"IfcWindowStyle\", StringComparison.InvariantCultureIgnoreCase))\n            {\n               isType = true;\n               typeLen = 5;\n            }\n         }\n\n         if (isType)\n         {\n            // Get the instance\n            string instName = entityTypeName.Substring(0, entityTypeName.Length - typeLen);\n            IfcSchemaEntityNode node = theTree.Find(instName);\n            if (node != null && !node.isAbstract)\n            {\n               IFCEntityType instType = IFCEntityType.UnKnown;\n               if (IFCEntityType.TryParse(instName, true, out instType))\n                  m_ExportInstance = instType;\n            }\n            else\n            {\n               // If not found, try non-abstract supertype derived from the type\n               node = IfcSchemaEntityTree.FindNonAbsInstanceSuperType(ifcVersion, instName);\n               if (node != null)\n               {\n                  IFCEntityType instType = IFCEntityType.UnKnown;\n                  if (IFCEntityType.TryParse(node.Name, true, out instType))\n                     m_ExportInstance = instType;\n               }\n            }\n\n            // set the type\n            IFCEntityType entityType = ElementFilteringUtil.GetValidIFCEntityType(entityTypeName);\n            if (entityType != IFCEntityType.UnKnown)\n               m_ExportType = entityType;\n            else\n            {\n               node = IfcSchemaEntityTree.FindNonAbsInstanceSuperType(ifcVersion, entityTypeName);\n               if (node != null)\n               {\n                  IFCEntityType instType = IFCEntityType.UnKnown;\n                  if (IFCEntityType.TryParse(node.Name, true, out instType))\n                     m_ExportType = instType;\n               }\n            }\n         }\n         else\n         {\n            // set the instance\n            IFCEntityType instType = ElementFilteringUtil.GetValidIFCEntityType(entityTypeName);\n            if (instType != IFCEntityType.UnKnown)\n               m_ExportInstance = instType;\n            else\n            {\n               // If not found, try non-abstract supertype derived from the type\n               IfcSchemaEntityNode node = IfcSchemaEntityTree.FindNonAbsInstanceSuperType(ifcVersion, entityTypeName);\n               if (node != null)\n               {\n                  instType = IFCEntityType.UnKnown;\n                  if (IFCEntityType.TryParse(node.Name, true, out instType))\n                     m_ExportInstance = instType;\n               }\n            }\n\n            // set the type pair\n            string typeName = entityTypeName;\n            if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 &&\n               (entityTypeName.Equals(\"IfcDoor\", StringComparison.InvariantCultureIgnoreCase)\n               || entityTypeName.Equals(\"IfcWindow\", StringComparison.InvariantCultureIgnoreCase)))\n               typeName += \"Style\";\n            else\n               typeName += \"Type\";\n\n            IFCEntityType entityType = ElementFilteringUtil.GetValidIFCEntityType(typeName);\n\n            if (entityType != IFCEntityType.UnKnown)\n               m_ExportType = entityType;\n            else\n            {\n               // If the type name is not found, likely it does not have the pair at this level,\n               // needs to get the supertype of the instance to get the type pair\n               IList<IfcSchemaEntityNode> instNodes = IfcSchemaEntityTree.FindAllSuperTypes(ifcVersion, entityTypeName, \"IfcProduct\", \"IfcGroup\");\n               foreach (IfcSchemaEntityNode instNode in instNodes)\n               {\n                  typeName = IfcSchemaEntityTree.GetTypeNameFromInstanceName(instNode.Name, ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4);\n                  IfcSchemaEntityNode node = theTree.Find(typeName);\n                  if (node == null)\n                     node = IfcSchemaEntityTree.FindNonAbsInstanceSuperType(ifcVersion, typeName);\n\n                  if (node != null && !node.isAbstract)\n                  {\n                     instType = IFCEntityType.UnKnown;\n                     if (IFCEntityType.TryParse(node.Name, true, out instType))\n                     {\n                        m_ExportType = instType;\n                        break;\n                     }\n                  }\n               }\n            }\n         }\n      }\n\n      /// <summary>\n      /// Set the export type info by given entity type and predefined type.\n      /// </summary>\n      /// <param name=\"entityType\">The entinty type.</param>\n      /// <param name=\"predefinedTypeName\">The PredefinedType attribute value.</param>\n      public void SetByTypeAndPredefinedType(IFCEntityType entityType, string predefinedTypeName)\n      {\n         SetByType(entityType);\n\n         PredefinedType = predefinedTypeName;\n      }\n\n      // Check valid entity and type set according to the MVD used in the export\n      // Also check and correct older standardcase entities and change it without StandardCase for IFC4 and onward\n      void CheckValidEntity()\n      {\n         IFCCertifiedEntitiesAndPSets certEntAndPset = ExporterCacheManager.CertifiedEntitiesAndPsetsCache;\n\n         // Special handling for *StandardCase entities that are not used anymore in IFC4\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\n         {\n            if (m_ExportInstance.ToString().EndsWith(\"StandardCase\", StringComparison.InvariantCultureIgnoreCase))\n            {\n               string newInstanceName = m_ExportInstance.ToString().Remove(m_ExportInstance.ToString().Length - 12);\n\n               // Special handling for IfcOpeningStandardCase to turn it to IfcOpeningElement\n               if (newInstanceName.Equals(\"IfcOpening\", StringComparison.InvariantCultureIgnoreCase))\n                  newInstanceName = newInstanceName + \"Element\";\n\n               IFCEntityType newInst;\n               if (Enum.TryParse<IFCEntityType>(newInstanceName, true, out newInst))\n                  //m_ExportInstance = newInst;\n                  SetByType(newInst);\n            }\n            else if (m_ExportInstance.ToString().EndsWith(\"ElementedCase\", StringComparison.InvariantCultureIgnoreCase))\n            {\n               string newInstanceName = m_ExportInstance.ToString().Remove(m_ExportInstance.ToString().Length - 13);\n               IFCEntityType newInst;\n               if (Enum.TryParse<IFCEntityType>(newInstanceName, true, out newInst))\n                  SetByType(newInst);\n            }\n         }\n\n         if (!certEntAndPset.IsValidEntityInCurrentMVD(m_ExportType.ToString()))\n            m_ExportType = IFCEntityType.UnKnown;\n\n         if (!certEntAndPset.IsValidEntityInCurrentMVD(m_ExportInstance.ToString()))\n            m_ExportInstance = IFCEntityType.UnKnown;\n\n         // IfcProxy is deprecated, we will change it to IfcBuildingElementProxy\n         if (m_ExportInstance == IFCEntityType.IfcProxy && !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\n         {\n            m_ExportInstance = IFCEntityType.IfcBuildingElementProxy;\n            m_ExportType = IFCEntityType.IfcBuildingElementProxyType;\n         }\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/IFCFacilityTypes.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Export.Properties;\r\nusing Revit.IFC.Export.Toolkit.IFC4x3;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   public class IFCFacilityTypes\r\n   {\r\n      /// <summary>\r\n      /// The list of known facility types\r\n      /// </summary>\r\n      static IDictionary<IFCVersion, IList<KnownFacilityTypes>> KnownFacilityTypesByVersion = new Dictionary<IFCVersion, IList<KnownFacilityTypes>>();\r\n      static IDictionary<IFCVersion, IList<string>> KnownFacilityTypesLocalized = new Dictionary<IFCVersion, IList<string>>();\r\n\r\n      static IDictionary<KnownFacilityTypes, IList<string>> KnownFacilityPredefinedTypesLocalized = new Dictionary<KnownFacilityTypes, IList<string>>();\r\n\r\n      static void Initialize()\r\n      {\r\n         if (KnownFacilityTypesByVersion.Count != 0)\r\n            return;\r\n\r\n         // Define common facility types\r\n         var commonFacilityTypes = new List<KnownFacilityTypes>\r\n         {\r\n            KnownFacilityTypes.Bridge,\r\n            KnownFacilityTypes.Building,\r\n            KnownFacilityTypes.MarineFacility,\r\n            KnownFacilityTypes.Railway,\r\n            KnownFacilityTypes.Road\r\n         };\r\n\r\n         // For IFC4.3\r\n         const IFCVersion ifcVersion4x3 = IFCVersion.IFC4x3;\r\n         KnownFacilityTypesByVersion.Add(ifcVersion4x3, commonFacilityTypes);\r\n         // For IFC4.3RV\r\n         const IFCVersion ifcVersion4x3RV = IFCVersion.IFC4x3RV;\r\n         KnownFacilityTypesByVersion.Add(ifcVersion4x3RV, commonFacilityTypes);\r\n         // For IFC4.3DTV\r\n         const IFCVersion ifcVersion4x3DTV = IFCVersion.IFC4x3DTV;\r\n         KnownFacilityTypesByVersion.Add(ifcVersion4x3DTV, commonFacilityTypes);\r\n\r\n         // Generate localized facility type names for each version\r\n         foreach (var ifcVersion in new[] { ifcVersion4x3, ifcVersion4x3RV, ifcVersion4x3DTV })\r\n         {\r\n            IList<string> facilityTypeNameListForUI =\r\n               new List<string>(KnownFacilityTypesByVersion[ifcVersion].Select(x => x.ToFullLabel()));\r\n            KnownFacilityTypesLocalized.Add(ifcVersion, facilityTypeNameListForUI);\r\n         }\r\n\r\n         IList<string> bridgePredefinedTypesForUI = new List<string>();\r\n         foreach (IFCBridgeType type in Enum.GetValues(typeof(IFCBridgeType)))\r\n         {\r\n            bridgePredefinedTypesForUI.Add(type.ToFullLabel());\r\n         }\r\n         KnownFacilityPredefinedTypesLocalized[KnownFacilityTypes.Bridge] = bridgePredefinedTypesForUI;\r\n\r\n         IList<string> marineFacilityPredefinedTypesForUI = new List<string>();\r\n         foreach (IFCMarineFacilityType type in Enum.GetValues(typeof(IFCMarineFacilityType)))\r\n         {\r\n            marineFacilityPredefinedTypesForUI.Add(type.ToFullLabel());\r\n         }\r\n         KnownFacilityPredefinedTypesLocalized[KnownFacilityTypes.MarineFacility] = marineFacilityPredefinedTypesForUI;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the list of known facility types.\r\n      /// </summary>\r\n      public static IDictionary<IFCVersion, IList<KnownFacilityTypes>> FacilityTypes\r\n      {\r\n         get\r\n         {\r\n            Initialize();\r\n            return KnownFacilityTypesByVersion;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the list of facility types for UI based on the given IFC Version.\r\n      /// </summary>\r\n      /// <param name=\"ifcVers\">The IFC Version.</param>\r\n      /// <returns>The list of known facility types.</returns>\r\n      public static IList<string> FacilityTypesForUI(IFCVersion ifcVers)\r\n      {\r\n         Initialize();\r\n         return KnownFacilityTypesLocalized.FirstOrDefault(x => x.Key == ifcVers).Value;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the list of facility predefined types for UI based on the given facility type.\r\n      /// </summary>\r\n      /// <param name=\"facilityType\">The facility type.</param>\r\n      /// <returns>The list of known facility predefined types.</returns>\r\n      public static IList<string> FacilityPredefinedTypesForUI(KnownFacilityTypes facilityType)\r\n      {\r\n         Initialize();\r\n         return KnownFacilityPredefinedTypesLocalized.FirstOrDefault(x => x.Key == facilityType).Value;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the enumeration value of the facility type given the localized string from the UI\r\n      /// </summary>\r\n      /// <param name=\"uiFacilityTypeStringValue\">the string value from the UI</param>\r\n      /// <returns>The facility type enumeration</returns>\r\n      public static KnownFacilityTypes GetFacilityEnum(string uiFacilityTypeStringValue)\r\n      {\r\n         KnownFacilityTypes facilityType = KnownFacilityTypes.NotDefined;\r\n\r\n         if (Resources.FacilityBuilding.Equals(uiFacilityTypeStringValue))\r\n            facilityType = KnownFacilityTypes.Building;\r\n         else if (Resources.FacilityBridge.Equals(uiFacilityTypeStringValue))\r\n            facilityType = KnownFacilityTypes.Bridge;\r\n         else if (Resources.FacilityMarineFacility.Equals(uiFacilityTypeStringValue))\r\n            facilityType = KnownFacilityTypes.MarineFacility;\r\n         else if (Resources.FacilityRoad.Equals(uiFacilityTypeStringValue))\r\n            facilityType = KnownFacilityTypes.Road;\r\n         else if (Resources.FacilityRailway.Equals(uiFacilityTypeStringValue))\r\n            facilityType = KnownFacilityTypes.Railway;\r\n\r\n         return facilityType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the enumeration value of the bridge type given the localized string from the UI\r\n      /// </summary>\r\n      /// <param name=\"uiBridgeTypeStringValue\">the string value from the UI</param>\r\n      /// <returns>The bridge type enumeration</returns>\r\n      private static IFCBridgeType GetBridgePredefinedTypeEnum(string uiBridgeTypeStringValue)\r\n      {\r\n         IFCBridgeType bridgeTypeEnum = IFCBridgeType.NOTDEFINED;\r\n\r\n         if (Resources.BridgeArched.Equals(uiBridgeTypeStringValue))\r\n            bridgeTypeEnum = IFCBridgeType.ARCHED;\r\n         else if (Resources.BridgeCableStayed.Equals(uiBridgeTypeStringValue))\r\n            bridgeTypeEnum = IFCBridgeType.CABLE_STAYED;\r\n         else if (Resources.BridgeCantilever.Equals(uiBridgeTypeStringValue))\r\n            bridgeTypeEnum = IFCBridgeType.CANTILEVER;\r\n         else if (Resources.BridgeCulvert.Equals(uiBridgeTypeStringValue))\r\n            bridgeTypeEnum = IFCBridgeType.CULVERT;\r\n         else if (Resources.BridgeFramework.Equals(uiBridgeTypeStringValue))\r\n            bridgeTypeEnum = IFCBridgeType.FRAMEWORK;\r\n         else if (Resources.BridgeGirder.Equals(uiBridgeTypeStringValue))\r\n            bridgeTypeEnum = IFCBridgeType.GIRDER;\r\n         else if (Resources.BridgeSuspension.Equals(uiBridgeTypeStringValue))\r\n            bridgeTypeEnum = IFCBridgeType.SUSPENSION;\r\n         else if (Resources.BridgeTruss.Equals(uiBridgeTypeStringValue))\r\n            bridgeTypeEnum = IFCBridgeType.TRUSS;\r\n         else if (Resources.UserDefined.Equals(uiBridgeTypeStringValue))\r\n            bridgeTypeEnum = IFCBridgeType.USERDEFINED;\r\n\r\n         return bridgeTypeEnum;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the enumeration value of the marine facility type given the localized string from the UI\r\n      /// </summary>\r\n      /// <param name=\"uiMarineFacilityTypeStringValue\">the string value from the UI</param>\r\n      /// <returns>The bridge type enumeration</returns>\r\n      private static IFCMarineFacilityType GetMarineFacilityPredefinedTypeEnum(string uiMarineFacilityTypeStringValue)\r\n      {\r\n         IFCMarineFacilityType marineFacilityTypeEnum = IFCMarineFacilityType.NOTDEFINED;\r\n\r\n         if (Resources.MarineFacilityBarrierBeach.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.BARRIERBEACH;\r\n         else if (Resources.MarineFacilityBreakwater.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.BREAKWATER;\r\n         else if (Resources.MarineFacilityCanal.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.CANAL;\r\n         else if (Resources.MarineFacilityDryDock.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.DRYDOCK;\r\n         else if (Resources.MarineFacilityFloatingDock.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.FLOATINGDOCK;\r\n         else if (Resources.MarineFacilityHydrolift.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.HYDROLIFT;\r\n         else if (Resources.MarineFacilityJetty.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.JETTY;\r\n         else if (Resources.MarineFacilityLaunchRecovery.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.LAUNCHRECOVERY;\r\n         else if (Resources.MarineFacilityMarineDefense.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.MARINEDEFENCE;\r\n         else if (Resources.MarineFacilityNavigationalChannel.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.NAVIGATIONALCHANNEL;\r\n         else if (Resources.MarineFacilityPort.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.PORT;\r\n         else if (Resources.MarineFacilityQuay.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.QUAY;\r\n         else if (Resources.MarineFacilityRevetment.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.REVETMENT;\r\n         else if (Resources.MarineFacilityShipLift.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.SHIPLIFT;\r\n         else if (Resources.MarineFacilityShipLock.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.SHIPLOCK;\r\n         else if (Resources.MarineFacilityShipyard.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.SHIPYARD;\r\n         else if (Resources.MarineFacilitySlipway.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.SLIPWAY;\r\n         else if (Resources.UserDefined.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.USERDEFINED;\r\n         else if (Resources.MarineFacilityWaterway.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.WATERWAY;\r\n         else if (Resources.MarineFacilityWaterwayShiplift.Equals(uiMarineFacilityTypeStringValue))\r\n            marineFacilityTypeEnum = IFCMarineFacilityType.WATERWAYSHIPLIFT;\r\n\r\n         return marineFacilityTypeEnum;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the enumeration value of the facility predefined type given the localized string from the UI\r\n      /// </summary>\r\n      /// <param name=\"uiFacilityPredefinedTypeStringValue\">the string value from the UI</param>\r\n      /// <returns>the facility predefined type enumeration</returns>\r\n      public static Enum GetFacilityPredefinedTypeEnum(KnownFacilityTypes facilityType, string uiFacilityPredefinedTypeStringValue)\r\n      {\r\n         switch (facilityType)\r\n         {\r\n            case KnownFacilityTypes.Bridge:\r\n               return GetBridgePredefinedTypeEnum(uiFacilityPredefinedTypeStringValue);\r\n            case KnownFacilityTypes.MarineFacility:\r\n               return GetMarineFacilityPredefinedTypeEnum(uiFacilityPredefinedTypeStringValue);\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Parse the Facility Type name string into the associated Enum\r\n      /// </summary>\r\n      /// <param name=\"faciltyTypeName\">The Facility Type Name</param>\r\n      /// <returns>The FacilityType enum</returns>\r\n      public static KnownFacilityTypes ParseFacilityTypeEnum(string erName)\r\n      {\r\n         if (Enum.TryParse(erName, out KnownFacilityTypes erEnum))\r\n         {\r\n            return erEnum;\r\n         }\r\n\r\n         return KnownFacilityTypes.NotDefined;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Parse the Facility Predefined Type name string into the associated Enum\r\n      /// </summary>\r\n      /// <param name=\"faciltyType\">The Facility Type</param>\r\n      /// <param name=\"faciltyPredefinedTypeName\">The Facility Predefined Type Name</param>\r\n      /// <returns>The FacilityPredefinedType enum</returns>\r\n      public static Enum ParseFacilityPredefinedTypeEnum(KnownFacilityTypes facilityTypes, string fptName)\r\n      {\r\n         switch (facilityTypes)\r\n         {\r\n            case KnownFacilityTypes.Bridge:\r\n               {\r\n                  if (Enum.TryParse(fptName, out IFCBridgeType bridgeType))\r\n                  {\r\n                     return bridgeType;\r\n                  }\r\n                  break;\r\n               }\r\n            case KnownFacilityTypes.MarineFacility:\r\n               {\r\n                  if (Enum.TryParse(fptName, out IFCMarineFacilityType marineFacilityType))\r\n                  {\r\n                     return marineFacilityType;\r\n                  }\r\n                  break;\r\n               }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the validated enum value for a facility type.\r\n      /// </summary>\r\n      /// <param name=\"facilityType\">The facility type.</param>\r\n      /// <param name=\"facilityPredefinedTypeEnum\">The unvalidated enum.</param>\r\n      /// <returns>The enum if valid, or null if invalid.</returns>\r\n      public static Enum ValidatedPredefinedTypeEnum(KnownFacilityTypes facilityType, Enum facilityPredefinedTypeEnum)\r\n      {\r\n         if (facilityPredefinedTypeEnum == null)\r\n            return null;\r\n\r\n         switch (facilityType)\r\n         {\r\n            case KnownFacilityTypes.Bridge:\r\n               return facilityPredefinedTypeEnum.GetType() == typeof(IFCBridgeType) ?\r\n                  facilityPredefinedTypeEnum : null;\r\n            case KnownFacilityTypes.MarineFacility:\r\n               return facilityPredefinedTypeEnum.GetType() == typeof(IFCMarineFacilityType) ?\r\n                  facilityPredefinedTypeEnum : null;\r\n         }\r\n         return null;\r\n      }\r\n\r\n      public static string ToFullLabel(KnownFacilityTypes facilityType, Enum facility)\r\n      {\r\n         Enum validatedEnum = ValidatedPredefinedTypeEnum(facilityType, facility);\r\n         if (validatedEnum == null)\r\n            return null;\r\n\r\n         switch (facilityType)\r\n         {\r\n            case KnownFacilityTypes.Bridge:\r\n               return ((IFCBridgeType)validatedEnum).ToFullLabel();\r\n            case KnownFacilityTypes.MarineFacility:\r\n               return ((IFCMarineFacilityType)validatedEnum).ToFullLabel();\r\n         }\r\n\r\n         return null;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/IFCPhaseAttributes.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Export.Properties;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Represents the choices for which phase to export.\r\n   /// </summary>\r\n   public class IFCPhaseAttributes\r\n   {\r\n      /// <summary>\r\n      /// The phase id of room/space boundaries exported.\r\n      /// </summary>\r\n      public ElementId PhaseId { get; set; }\r\n\r\n      /// <summary>\r\n      /// The document associated with this phase attributes.\r\n      /// </summary>\r\n      public Document Document { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The name of the default phase to export (the last phase).\r\n      /// </summary>\r\n      /// <returns></returns>\r\n      static public string GetDefaultPhaseName(Document document)\r\n      {\r\n         PhaseArray phases = document?.Phases;\r\n         if (phases == null || phases.Size == 0)\r\n            return \"\";\r\n         Phase lastPhase = phases.get_Item(phases.Size - 1);\r\n         return lastPhase.Name;\r\n      }\r\n\r\n      /// <summary>\r\n      /// True if the ElementId represents a valid phase.\r\n      /// </summary>\r\n      /// <returns>True if it is valid, false otherwise.</returns>\r\n      static public bool Validate(long phaseId, Document document)\r\n      {\r\n         ElementId checkPhaseId = new ElementId(phaseId);\r\n         if (checkPhaseId == ElementId.InvalidElementId)\r\n            return false;\r\n\r\n         Element checkPhase = document?.GetElement(checkPhaseId);\r\n         return checkPhase is Phase;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs the space boundary levels.\r\n      /// </summary>\r\n      /// <param name=\"level\"></param>\r\n      public IFCPhaseAttributes(ElementId phaseId, Document document)\r\n      {\r\n         Document = document;\r\n         PhaseId = phaseId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts the phase to string.\r\n      /// </summary>\r\n      /// <returns>The name of the phase.</returns>\r\n      public override string ToString()\r\n      {\r\n         Element element = Document?.GetElement(PhaseId);\r\n         if (element != null && element is Phase)\r\n            return element.Name;\r\n         else\r\n            return String.Format(Resources.DefaultPhase, GetDefaultPhaseName(Document));\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/IFCVersionAttributes.cs",
    "content": "﻿//\r\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\r\n// Copyright (C) 2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Represents the choices available for the file version during IFC export.\r\n   /// </summary>\r\n   public class IFCVersionAttributes\r\n   {\r\n      /// <summary>\r\n      /// The IFC file version into which a file may be exported.\r\n      /// </summary>\r\n      public IFCVersion Version { get; set; }\r\n\r\n      /// <summary>\r\n      /// Constructs the file version choices.\r\n      /// </summary>\r\n      /// <param name=\"version\"></param>\r\n      public IFCVersionAttributes(IFCVersion version)\r\n      {\r\n         Version = version;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts the IFCVersion to string.\r\n      /// </summary>\r\n      /// <returns>The string of IFCVersion.</returns>\r\n      public override string ToString() => Version.ToLabel();\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/IntegerPropertyInfoCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of IFC integer properties.\r\n   /// </summary>\r\n   public class IntegerPropertyInfoCache : Dictionary<KeyValuePair<string, int>, IFCAnyHandle>\r\n   {\r\n      /// <summary>\r\n      /// Finds if it contains the property with the specified int value.\r\n      /// </summary>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"value\">The value.</param>\r\n      /// <returns>True if it has, false otherwise.</returns>\r\n      public IFCAnyHandle Find(string propertyName, int value)\r\n      {\r\n         KeyValuePair<string, int> key = new KeyValuePair<string, int>(propertyName, value);\r\n\r\n         IFCAnyHandle propertyHandle;\r\n         if (TryGetValue(key, out propertyHandle))\r\n            return propertyHandle;\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a new property of a int value to the cache.\r\n      /// </summary>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"value\">The value.</param>\r\n      /// <param name=\"propertyHandle\">The property handle.</param>\r\n      public void Add(string propertyName, int value, IFCAnyHandle propertyHandle)\r\n      {\r\n         KeyValuePair<string, int> key = new KeyValuePair<string, int>(propertyName, value);\r\n         this[key] = propertyHandle;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/LevelInfoCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of the heights of levels.\r\n   /// </summary>\r\n   public class LevelInfoCache\r\n   {\r\n      class DuplicateKeyComparer : IComparer<double>\r\n      {\r\n         public int Compare(double key1, double key2)\r\n         {\r\n            if (MathComparisonUtils.IsAlmostEqual(key1, key2))\r\n            {\r\n               if (key1 < key2)\r\n                  return -1;\r\n               else\r\n                  return 1;\r\n            }\r\n            else\r\n               return key1.CompareTo(key2);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The dictionary mapping from an ElementId to a level height.\r\n      /// </summary>\r\n      public SortedDictionary<long, KeyValuePair<ElementId, double>> ElementIdToLevelHeight { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// A list of building storeys (that is, levels that are being exported), sorted by elevation.  \r\n      /// The user is expected to create the list in the proper order; this is done in Exporter.cs.\r\n      /// </summary>\r\n      private SortedList<double, ElementId> BuildingStoriesByElevation = new(new DuplicateKeyComparer());\r\n\r\n      /// <summary>\r\n      /// A list of levels sorted by name.\r\n      /// </summary>\r\n      public Dictionary<double, ElementId> BuildingStoriesByName = new();\r\n\r\n      /// <summary>\r\n      /// A list of levels, sorted by elevation.  \r\n      /// The user is expected to create the list in the proper order; this is done in Exporter.cs.\r\n      /// </summary>\r\n      public Dictionary<ElementId, ElementId> LevelParameterOverride { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// A list of levels, sorted by elevation.  \r\n      /// The user is expected to create the list in the proper order; this is done in Exporter.cs.\r\n      /// </summary>\r\n      private SortedList<double, ElementId> LevelsByElevation = new(new DuplicateKeyComparer());\r\n\r\n      /// <summary>\r\n      /// The main storage of levels, sorted by id.\r\n      /// </summary>\r\n      public Dictionary<ElementId, IFCLevelInfo> LevelsById { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// A list of levels, sorted by elevation.  \r\n      /// The user is expected to create the list in the proper order; this is done in Exporter.cs.\r\n      /// </summary>\r\n      public Dictionary<string, ElementId> LevelsByName { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// A set of IFC entities that should be associated to a level, but there is no level to associate them to.  These are buliding element related.\r\n      /// </summary>\r\n      public HashSet<IFCAnyHandle> OrphanedElements { get; private set; } = new();\r\n\r\n\r\n      /// <summary>\r\n      /// A set of IFC entities that should be associated to a level, but there is no level to associate them to.  These are for spatial elements.\r\n      /// </summary>\r\n      public HashSet<IFCAnyHandle> OrphanedSpaces { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The dictionary mapping from a SlabEdge.Id to a Floor.LevelId.\r\n      /// </summary>\r\n      public Dictionary<ElementId, ElementId> FloorSlabEdgeLevels { get; private set; } = null;\r\n\r\n      /// <summary>\r\n      /// Finds the height of the level from the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The level element elementId.</param>\r\n      /// <returns>The height.  Returns -1.0 if there is no entry in the cache, since valid entries must always be non-negative.</returns>\r\n      public double FindHeight(ElementId elementId)\r\n      {\r\n         if (ElementIdToLevelHeight.TryGetValue(elementId.Value, out KeyValuePair<ElementId, double> info))\r\n         {\r\n            return info.Value;\r\n         }\r\n         return -1.0;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds the next level id, if any, of the level from the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The level element elementId.</param>\r\n      /// <returns>The next level Id.  Returns InvalidElementId if there is no entry in the cache.</returns>\r\n      public ElementId FindNextLevel(ElementId elementId)\r\n      {\r\n         if (ElementIdToLevelHeight.TryGetValue(elementId.Value, out KeyValuePair<ElementId, double> info))\r\n         {\r\n            return info.Key;\r\n         }\r\n         return ElementId.InvalidElementId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds the height and next level id (if valid) to the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The level element elementId.</param>\r\n      /// <param name=\"nextLevelId\">The next level ElementId.</param>\r\n      /// <param name=\"height\">The height.</param>\r\n      public void Register(ElementId elementId, ElementId nextLevelId, double height)\r\n      {\r\n         if (ElementIdToLevelHeight.ContainsKey(elementId.Value))\r\n            return;\r\n\r\n         ElementIdToLevelHeight[elementId.Value] = new(nextLevelId, height);\r\n      }\r\n\r\n      /// <summary>\r\n      /// A list of building storeys (that is, levels that are being exported), sorted by elevation.  \r\n      /// The user is expected to create the list in the proper order; this is done in Exporter.cs.\r\n      /// </summary>\r\n      public IList<ElementId> GetBuildingStoriesByElevation()\r\n      {\r\n         return BuildingStoriesByElevation.Where(k => k.Value != ElementId.InvalidElementId).Select(x => x.Value).ToList();\r\n      }\r\n\r\n      /// <summary>\r\n      /// A list of levels, sorted by elevation.  \r\n      /// The user is expected to create the list in the proper order; this is done in Exporter.cs.\r\n      /// </summary>\r\n      public IList<ElementId> GetLevelsByElevation()\r\n      {\r\n         return LevelsByElevation.Where(k => k.Value != ElementId.InvalidElementId).Select(x => x.Value).ToList();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds an IFCLevelInfo to the LevelsByElevation list, also updating the native cache item.\r\n      /// </summary>\r\n      /// <param name=\"level\">The level.</param>\r\n      /// <param name=\"info\">The IFCLevelInfo.</param>\r\n      /// <param name=\"isBaseBuildingStorey\">True if it is the levelId associated with the building storey.</param>\r\n      public void AddLevelInfo(Level level, IFCLevelInfo info, bool isBaseBuildingStorey)\r\n      {\r\n         if (level == null)\r\n         {\r\n            return;\r\n         }\r\n\r\n         if (LevelsByElevation.Count == 0)\r\n         {\r\n            LevelsByElevation.Add(double.MinValue, ElementId.InvalidElementId);\r\n            LevelsByElevation.Add(double.MaxValue, ElementId.InvalidElementId);\r\n         }\r\n\r\n         ElementId levelId = level.Id;\r\n         LevelsByElevation.Add(level.Elevation, levelId);\r\n         LevelsByName.TryAdd(level.Name, levelId);\r\n         \r\n         if (isBaseBuildingStorey)\r\n         {\r\n            if (BuildingStoriesByElevation.Count == 0)\r\n            {\r\n               BuildingStoriesByElevation.Add(double.MinValue, ElementId.InvalidElementId);\r\n               BuildingStoriesByElevation.Add(double.MaxValue, ElementId.InvalidElementId);\r\n            }\r\n            BuildingStoriesByElevation.Add(info.Elevation, levelId);\r\n         }\r\n\r\n         LevelsById.Add(levelId, info);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add information to allow all elements associated to a level to be re-mapped to another level on export.\r\n      /// </summary>\r\n      /// <param name=\"level\">The level to remap.</param>\r\n      public void AddLevelRemapping(Level level)\r\n      {\r\n         if (level == null)\r\n            return;\r\n\r\n         ElementId overrideLevelId = ParameterUtil.OverrideContainmentParameter(level, out _);\r\n         if (overrideLevelId != null && overrideLevelId != ElementId.InvalidElementId)\r\n         {\r\n            LevelParameterOverride[level.Id] = overrideLevelId;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Clears all caches.\r\n      /// </summary>\r\n      public void Clear()\r\n      {\r\n         // Revert all caches back to original state.\r\n         ElementIdToLevelHeight.Clear();\r\n         BuildingStoriesByElevation.Clear();\r\n         BuildingStoriesByName.Clear();\r\n         FloorSlabEdgeLevels = null;\r\n         LevelParameterOverride.Clear();\r\n         LevelsById.Clear();\r\n         LevelsByElevation.Clear();\r\n         LevelsByName.Clear();\r\n         OrphanedElements.Clear();\r\n         OrphanedSpaces.Clear();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the IFCLevelInfo corresponding to a level.\r\n      /// </summary>\r\n      /// <param name=\"levelId\">The level ElementId.</param>\r\n      /// <returns>The IFCLevelInfo.</returns>\r\n      public IFCLevelInfo GetLevelInfo(ElementId levelId)\r\n      {\r\n         if (!LevelsById.TryGetValue(levelId, out IFCLevelInfo levelInfo))\r\n            return null;\r\n         return levelInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the appropriate levelid for an object. This function will try to get the dependent objects to form\r\n      ///   the overall bounding box to find the right level\r\n      /// </summary>\r\n      /// <param name=\"element\">the element</param>\r\n      /// <returns>return the level id</returns>\r\n      public ElementId GetLevelIdOfObject(Element element)\r\n      {\r\n         ElementId levelId = ElementId.InvalidElementId;\r\n         double lowestPosition = double.MaxValue;\r\n\r\n         if (element.LevelId != ElementId.InvalidElementId)\r\n            return element.LevelId;\r\n\r\n         BoundingBoxXYZ bbox = element.get_BoundingBox(null);\r\n         if (bbox == null)\r\n         {\r\n            Document doc = ExporterCacheManager.Document;\r\n            IList<ElementId> dependentElements = element.GetDependentElements(null);\r\n            if (dependentElements != null && dependentElements.Count > 0)\r\n            {\r\n               foreach (ElementId elemid in dependentElements)\r\n               {\r\n                  Element depElem = doc.GetElement(elemid);\r\n                  BoundingBoxXYZ bboxElem = depElem.get_BoundingBox(null);\r\n                  if (bboxElem != null && bboxElem.Min.Z < lowestPosition)\r\n                     lowestPosition = bboxElem.Min.Z;\r\n               }\r\n            }\r\n         }\r\n         else\r\n         {\r\n            lowestPosition = bbox.Min.Z;\r\n         }\r\n\r\n         if (lowestPosition > double.MinValue)\r\n         {\r\n            double vertexEps = ExporterCacheManager.Document.Application.VertexTolerance;\r\n\r\n            for (int ii = 0; ii < BuildingStoriesByElevation.Count - 2; ++ii)\r\n            {\r\n               if (lowestPosition >= (BuildingStoriesByElevation.Keys[ii] - LevelUtil.LevelExtension - vertexEps) && \r\n                  lowestPosition < BuildingStoriesByElevation.Keys[ii + 1] - vertexEps)\r\n               {\r\n                  if (ii == 0)\r\n                     levelId = BuildingStoriesByElevation.Values[ii + 1];\r\n                  else\r\n                     levelId = BuildingStoriesByElevation.Values[ii];\r\n                  break;\r\n               }\r\n            }\r\n         }\r\n         return levelId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the appropriate level id for a slab edge.\r\n      /// </summary>\r\n      /// <param name=\"slabEdgeId\">The slab edge element id.</param>\r\n      /// <returns>The level id.</returns>\r\n      public ElementId GetSlabEdgeLevelId(ElementId slabEdgeId)\r\n      {\r\n         if (FloorSlabEdgeLevels == null)\r\n         {\r\n            InitFloorSlabEdgeLevels(ExporterCacheManager.Document);\r\n         }\r\n\r\n         if (FloorSlabEdgeLevels.TryGetValue(slabEdgeId, out ElementId levelId))\r\n         {\r\n            return levelId;\r\n         }\r\n\r\n         return ElementId.InvalidElementId;\r\n      }\r\n\r\n      private void InitFloorSlabEdgeLevels(Document document)\r\n      {\r\n         FloorSlabEdgeLevels = new();\r\n\r\n         ElementFilter floorFilter = new ElementClassFilter(typeof(Floor));\r\n         FilteredElementCollector floorCollector = new FilteredElementCollector(document);\r\n         floorCollector.WherePasses(floorFilter);\r\n         IList<Element> floorElements = floorCollector.ToElements();\r\n         if (floorElements?.Count > 0)\r\n         {\r\n            foreach (Element floor in floorElements)\r\n            {\r\n               IList<ElementId> dependentElementIds = floor.GetDependentElements(null);\r\n               if (dependentElementIds?.Count > 0)\r\n               {\r\n                  var levelId = floor.LevelId;\r\n                  foreach(ElementId dependentElementId in dependentElementIds)\r\n                  {\r\n                     if (dependentElementId == ElementId.InvalidElementId)\r\n                        continue;\r\n                     var dependentElement = document.GetElement(dependentElementId);\r\n                     if (dependentElement is SlabEdge)\r\n                     {\r\n                        FloorSlabEdgeLevels[dependentElementId] = levelId;\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/LevelUtil.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.Architecture;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Export.Toolkit;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides static methods for level related manipulations.\r\n   /// </summary>\r\n   public class LevelUtil\r\n   {\r\n      private class LevelElevationComparer : IComparer<Level>\r\n      {\r\n         #region IComparer<Level> Members\r\n\r\n         public int Compare(Level x, Level y)\r\n         {\r\n            if (x == null || y == null)\r\n            {\r\n               if (x == y)\r\n                  return 0;\r\n               if (x == null)\r\n                  return -1;\r\n               return 1;\r\n            }\r\n\r\n            if (x.Id == y.Id)\r\n               return 0;\r\n\r\n            if (x.ProjectElevation == y.ProjectElevation)\r\n               return (x.Id > y.Id) ? 1 : -1;\r\n            return (x.ProjectElevation > y.ProjectElevation) ? 1 : -1;\r\n         }\r\n\r\n         #endregion\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets all levels from Revit document.\r\n      /// </summary>\r\n      /// <param name=\"document\">\r\n      /// The document.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The list of levels found\r\n      /// </returns>\r\n      public static List<Level> FindAllLevels(Document document)\r\n      {\r\n         ElementFilter elementFilter = new ElementClassFilter(typeof(Level));\r\n         FilteredElementCollector collector = new FilteredElementCollector(document);\r\n         List<Level> allLevels = collector.WherePasses(elementFilter).Cast<Level>().ToList();\r\n         LevelElevationComparer comparer = new LevelElevationComparer();\r\n         allLevels.Sort(comparer);\r\n         return allLevels;\r\n      }\r\n\r\n      public static (ElementId, IFCAnyHandle) FindContainer(string containerName)\r\n      {\r\n         if (string.IsNullOrEmpty(containerName))\r\n            return (ElementId.InvalidElementId, null);\r\n\r\n         if (containerName.Equals(\"IFCPROJECT\", StringComparison.CurrentCultureIgnoreCase))\r\n            return (ElementId.InvalidElementId, ExporterCacheManager.ProjectHandle);\r\n\r\n         if (containerName.Equals(\"IFCSITE\", StringComparison.CurrentCultureIgnoreCase))\r\n            return (ElementId.InvalidElementId, ExporterCacheManager.SiteExportInfo.SiteHandle);\r\n\r\n         if (containerName.Equals(\"IFCBUILDING\", StringComparison.CurrentCultureIgnoreCase))\r\n            return (ElementId.InvalidElementId, ExporterCacheManager.BuildingHandle);\r\n\r\n         // Find Level that is designated as the override by iterating through all the Levels for the name match\r\n         IFCAnyHandle overrideContainerHnd = null;\r\n         if (ExporterCacheManager.LevelInfoCache.LevelsByName.TryGetValue(containerName, out ElementId elementId))\r\n         {\r\n            if (elementId != ElementId.InvalidElementId)\r\n            {\r\n               IFCLevelInfo levelInfo = ExporterCacheManager.LevelInfoCache.GetLevelInfo(elementId);\r\n               if (levelInfo != null)\r\n                  overrideContainerHnd = levelInfo.GetBuildingStorey();\r\n            }\r\n         }\r\n\r\n         return (elementId, overrideContainerHnd);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks to see if a particular level is a building story.  Returns true as default.\r\n      /// </summary>\r\n      /// <param name=\"level\">The level.</param>\r\n      /// <returns>True if the level is a building story, false otherwise.</returns>\r\n      public static bool IsBuildingStory(Level level)\r\n      {\r\n         if (level == null)\r\n            return false;\r\n\r\n         Parameter isBuildingStorey = level.get_Parameter(BuiltInParameter.LEVEL_IS_BUILDING_STORY);\r\n         if (isBuildingStorey == null)\r\n            return true;\r\n\r\n         return (isBuildingStorey.AsInteger() != 0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets a representative views generated by levels.\r\n      /// </summary>\r\n      /// <param name=\"document\">The document.</param>\r\n      /// <param name=\"viewType\">The view type.</param>\r\n      /// <param name=\"level\">The list of levels.</param>\r\n      /// <returns>A map of levels to associated views.</returns>\r\n      /// <remarks>This function will prefer the first view it finds with a bottom range set to \r\n      /// an offset of the generating level.  If no such view is found, but a view based on the \r\n      /// generating level exists, that view will be returned.</remarks>\r\n      public static IDictionary<ElementId, View> FindViewsForLevels(Document document, \r\n         ViewType viewType, IList<Level> levels)\r\n      {\r\n         if ((levels?.Count ?? 0) == 0)\r\n            return null;\r\n\r\n         IDictionary<ElementId, View> viewsForLevels = new Dictionary<ElementId, View>();\r\n         IDictionary<ElementId, View> possibleViewsForLevels = new Dictionary<ElementId, View>();\r\n         ISet<ElementId> levelsToFind = new HashSet<ElementId>();\r\n         \r\n         foreach (Level level in levels)\r\n         {\r\n            ElementId levelId = level.Id;\r\n            levelsToFind.Add(levelId);\r\n            possibleViewsForLevels[levelId] = null;\r\n         }\r\n\r\n         ElementFilter elementFilter = new ElementClassFilter(typeof(View));\r\n         FilteredElementCollector collector = new FilteredElementCollector(document);\r\n         collector.WherePasses(elementFilter);\r\n\r\n         foreach (View view in collector)\r\n         {\r\n            if (view.ViewType != viewType)\r\n               continue;\r\n\r\n            Level genLevel = view.GenLevel;\r\n            if (genLevel == null)\r\n               continue;\r\n\r\n            ElementId viewGenLevelId = view.GenLevel.Id;\r\n            if (!levelsToFind.Contains(viewGenLevelId))\r\n               continue;\r\n\r\n            PlanViewRange viewRange = (view as ViewPlan).GetViewRange();\r\n            ElementId bottomClipPlaneId = viewRange.GetLevelId(PlanViewPlane.BottomClipPlane);\r\n            if (bottomClipPlaneId != viewGenLevelId)\r\n            {\r\n               possibleViewsForLevels[viewGenLevelId] = view;\r\n               continue;\r\n            }\r\n\r\n            viewsForLevels[viewGenLevelId] = view;\r\n            levelsToFind.Remove(viewGenLevelId);\r\n         }\r\n\r\n         foreach (ElementId levelId in levelsToFind)\r\n         {\r\n            viewsForLevels[levelId] = possibleViewsForLevels[levelId];\r\n         }\r\n\r\n         return viewsForLevels;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if view is generated by the level.\r\n      /// </summary>\r\n      /// <param name=\"view\">\r\n      /// The view.\r\n      /// </param>\r\n      /// <param name=\"level\">\r\n      /// The level.\r\n      /// </param>\r\n      /// <returns>\r\n      /// True if the view is generated by the level, false otherwise.\r\n      /// </returns>\r\n      public static bool IsViewGeneratedByLevel(View view, Level level)\r\n      {\r\n         Level genLevel = view.GenLevel;\r\n         if (genLevel == null)\r\n            return false;\r\n\r\n         return genLevel.Id == level.Id;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets level extension.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// When we are splitting columns (or walls) by level, we allow for a certain amount of overflow into the next level.\r\n      /// This has been set (somewhat arbitrarily) at 10cm.\r\n      /// </remarks>\r\n      /// <returns>\r\n      /// The level extension.\r\n      /// </returns>\r\n      public static double GetLevelExtension()\r\n      {\r\n         // 10cm, in feet.\r\n         return 10.0 / (12.0 * 2.54);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates the distance to the next level if the UpToLevel parameter is set.\r\n      /// If the parameter is not set, or the distance is negative, 0 is returned.\r\n      /// This is not set in IFCLevelInfo as we want this calculation to be done in .NET code.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"levelId\">The element id of the level.</param>\r\n      /// <param name=\"levelInfo\">The associated level information object.</param>\r\n      public static double CalculateDistanceToNextLevel(Document doc, ElementId levelId, IFCLevelInfo levelInfo)\r\n      {\r\n         double height = 0.0;\r\n         Level level = doc.GetElement(levelId) as Level;\r\n         ElementId nextLevelId = ElementId.InvalidElementId;\r\n\r\n         if (level != null)\r\n         {\r\n            Parameter nextLevelParameter = level.get_Parameter(BuiltInParameter.LEVEL_UP_TO_LEVEL);\r\n            if (nextLevelParameter != null)\r\n            {\r\n               Element nextLevelAsElement = doc.GetElement(nextLevelParameter.AsElementId());\r\n               if (nextLevelAsElement != null)\r\n               {\r\n                  Level possibleNextLevel = nextLevelAsElement as Level;\r\n                  if (possibleNextLevel != null && IsBuildingStory(possibleNextLevel))\r\n                  {\r\n                     double nextLevelElevation = possibleNextLevel.ProjectElevation;\r\n                     double netElevation = nextLevelElevation - level.ProjectElevation;\r\n                     if (netElevation > 0.0)\r\n                     {\r\n                        height = netElevation;\r\n                        nextLevelId = nextLevelParameter.AsElementId();\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         if ((height <= 0.0) && (levelInfo != null))\r\n            height = levelInfo.DistanceToNextLevel;\r\n\r\n         ExporterCacheManager.LevelInfoCache.Register(levelId, nextLevelId, height);\r\n         return height;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the base level of an element.  The method used to find the base level depends on the element type.\r\n      /// </summary>\r\n      public static ElementId GetBaseLevelIdForElement(Element elem)\r\n      {\r\n         // If the element is view specific, use the level of the parent view.\r\n         if (elem.ViewSpecific)\r\n         {\r\n            ElementId viewId = elem.OwnerViewId;\r\n            ElementId viewSpecificlevelId;\r\n            if (ExporterCacheManager.DBViewsToExport.TryGetValue(viewId, out viewSpecificlevelId))\r\n               return viewSpecificlevelId;\r\n         }\r\n\r\n         // Some elements will have a parameter that defines the base level.  Find it if possible.\r\n         IList<BuiltInParameter> priortizedParameterList = new List<BuiltInParameter>();\r\n         Element elemToCheck = elem;\r\n\r\n         if (elem is Wall)\r\n         {\r\n            priortizedParameterList.Add(BuiltInParameter.WALL_BASE_CONSTRAINT);\r\n         }\r\n         else if (elem is FamilyInstance)\r\n         {\r\n            // If this is a nested family, check the top-level instance for the level parameter information.\r\n            elemToCheck = (elem as FamilyInstance).SuperComponent;\r\n            if (elemToCheck == null)\r\n               elemToCheck = elem;\r\n\r\n            // Inplace wall parameter.\r\n            priortizedParameterList.Add(BuiltInParameter.FAMILY_BASE_LEVEL_PARAM);\r\n\r\n            // There are two Family-related parameters for non-inplace walls: INSTANCE_SCHEDULE_ONLY_LEVEL_PARAM and INSTANCE_SCHEDULE_ONLY_LEVEL_PARAM.\r\n            // We prioritize INSTANCE_SCHEDULE_ONLY_LEVEL_PARAM over INSTANCE_SCHEDULE_ONLY_LEVEL_PARAM.\r\n            priortizedParameterList.Add(BuiltInParameter.INSTANCE_SCHEDULE_ONLY_LEVEL_PARAM);\r\n            priortizedParameterList.Add(BuiltInParameter.INSTANCE_REFERENCE_LEVEL_PARAM);\r\n         }\r\n         else if (elem is Truss)\r\n         {\r\n            priortizedParameterList.Add(BuiltInParameter.TRUSS_ELEMENT_REFERENCE_LEVEL_PARAM);\r\n         }\r\n         else if (elem is Stairs || StairsExporter.IsLegacyStairs(elem))\r\n         {\r\n            priortizedParameterList.Add(BuiltInParameter.STAIRS_BASE_LEVEL_PARAM);\r\n         }\r\n         else if (elem is ExtrusionRoof)\r\n         {\r\n            priortizedParameterList.Add(BuiltInParameter.ROOF_CONSTRAINT_LEVEL_PARAM);\r\n         }\r\n         \r\n         // If the level parameter was found, use it.  Otherwise, try asking the element directly.\r\n         foreach (BuiltInParameter levelParameterVal in priortizedParameterList)\r\n         {\r\n            Parameter levelParameter = elemToCheck.get_Parameter(levelParameterVal);\r\n            if (levelParameter != null && levelParameter.StorageType == StorageType.ElementId)\r\n            {\r\n               ElementId levelId = levelParameter.AsElementId();\r\n               if (levelId != ElementId.InvalidElementId)\r\n                  return levelId;\r\n            }\r\n         }\r\n\r\n         // Didn't find a parameter; try asking the element directly.\r\n         if (elem is MEPCurve)\r\n         {\r\n            Level level = (elem as MEPCurve).ReferenceLevel;\r\n            if (level != null)\r\n               return level.Id;\r\n         }\r\n         else if (elem is SlabEdge)\r\n         {\r\n            ElementId levelId = ExporterCacheManager.LevelInfoCache.GetSlabEdgeLevelId(elem.Id);\r\n            if (levelId != ElementId.InvalidElementId)\r\n               return levelId;\r\n         }\r\n         else if (elem is Part)\r\n         {\r\n            ElementId levelId = elem.LevelId;\r\n            if (levelId != null && levelId != ElementId.InvalidElementId)\r\n            {\r\n               return levelId;\r\n            }\r\n\r\n            Part partElement = elem as Part;\r\n            Element hostElement = PartExporter.FindRootParent(partElement);\r\n            if (hostElement != null)\r\n            {\r\n               ElementId hostCategoryId = CategoryUtil.GetSafeCategoryId(hostElement);\r\n               if ((partElement.OriginalCategoryId ?? hostCategoryId) == hostCategoryId)\r\n               {\r\n                  return hostElement.LevelId;\r\n               }\r\n            }\r\n         }\r\n\r\n         return elem.LevelId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a list of ranges to split an element.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// We may need to split an element (e.g. column) into parts by level.\r\n      /// </remarks>\r\n      /// <param name=\"exportType\">The export type. </param>\r\n      /// <param name=\"element\">The element. </param>\r\n      /// <param name=\"levels\">The levels to split the element.</param>\r\n      /// <param name=\"ranges\">The ranges to split the element. These will be non-overlapping.</param>\r\n      public static void CreateSplitLevelRangesForElement(IFCExportInfoPair exportType, Element element,\r\n         out IList<ElementId> levels, out IList<IFCRange> ranges)\r\n      {\r\n         BoundingBoxXYZ boundingBox = element?.get_BoundingBox(null);\r\n         CreateSplitLevelRangesCommon(exportType, element, boundingBox, out levels, out ranges);\r\n      }\r\n      \r\n      /// <summary>\r\n       /// Creates a list of ranges to split an element.\r\n       /// </summary>\r\n       /// <remarks>\r\n       /// We may need to split an element (e.g. column) into parts by level.\r\n       /// </remarks>\r\n       /// <param name=\"exportType\">The export type. </param>\r\n       /// <param name=\"element\">The element. </param>\r\n       /// <param name=\"levels\">The levels to split the element.</param>\r\n       /// <param name=\"ranges\">The ranges to split the element. These will be non-overlapping.</param>\r\n      public static IDictionary<ElementId, IFCRange> CreateSplitLevelRangesForElement(IFCExportInfoPair exportType, Element element)\r\n      {\r\n         Dictionary<ElementId, IFCRange> levelsAndRanges = new();\r\n         \r\n         BoundingBoxXYZ boundingBox = element?.get_BoundingBox(null);\r\n         CreateSplitLevelRangesCommon(exportType, element, boundingBox, out IList<ElementId> levels, out IList<IFCRange> ranges);\r\n         int numParts = ranges.Count;\r\n         for (int ii = 0; ii < numParts; ii++) \r\n         {\r\n            levelsAndRanges[levels[ii]] = ranges[ii];\r\n         }\r\n\r\n         return levelsAndRanges;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a list of ranges to split an element.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// We may need to split an element (e.g. column) into parts by level.\r\n      /// </remarks>\r\n      /// <param name=\"exportType\">The export type.</param>\r\n      /// <param name=\"hostElement\">The host element.</param>\r\n      /// <param name=\"geometryElement\">The element geomtry. </param>      \r\n      /// <param name=\"levels\">The levels to split the element.</param>\r\n      /// <param name=\"ranges\">The ranges to split the element. These will be non-overlapping.</param>\r\n      public static void CreateSplitLevelRangesForElementGeometry(IFCExportInfoPair exportType, Element hostElement, GeometryElement geometryElement,\r\n         out IList<ElementId> levels, out IList<IFCRange> ranges)\r\n      {\r\n         BoundingBoxXYZ boundingBox = geometryElement?.GetBoundingBox();\r\n         CreateSplitLevelRangesCommon(exportType, hostElement, boundingBox, out levels, out ranges);\r\n      }\r\n\r\n      private static void CreateSplitLevelRangesCommon(IFCExportInfoPair exportType, Element element, BoundingBoxXYZ boundingBox,\r\n         out IList<ElementId> levels, out IList<IFCRange> ranges)\r\n      {\r\n         levels = new List<ElementId>();\r\n         ranges = new List<IFCRange>();\r\n\r\n         if (boundingBox == null)\r\n            return;\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.WallAndColumnSplitting)\r\n            return;\r\n\r\n         double extension = GetLevelExtension();\r\n\r\n         bool splitByLevel = (exportType.ExportInstance == IFCEntityType.IfcColumn || exportType.ExportInstance == IFCEntityType.IfcWall) || (exportType.ExportType == IFCEntityType.IfcDuctSegmentType);\r\n\r\n         if (!splitByLevel)\r\n            return;\r\n\r\n         IFCRange zSpan = new IFCRange(boundingBox.Min.Z, boundingBox.Max.Z);\r\n         if (zSpan.Start < zSpan.End)\r\n         {\r\n            bool firstLevel = true;\r\n            ElementId skipToNextLevel = ElementId.InvalidElementId;\r\n\r\n            // If the base level of the element is set, we will start \"looking\" at that level.  Anything below the base level will be included with the base level.\r\n            // We will only do this if the base level is a building story.\r\n            ElementId firstLevelId = GetBaseLevelIdForElement(element);\r\n            bool foundFirstLevel = firstLevelId == ElementId.InvalidElementId;\r\n\r\n            IList<ElementId> levelIds = ExporterCacheManager.LevelInfoCache.GetBuildingStoriesByElevation();\r\n            foreach (ElementId levelId in levelIds)\r\n            {\r\n               if (!foundFirstLevel)\r\n               {\r\n                  if (levelId != firstLevelId)\r\n                     continue;\r\n                  else\r\n                     foundFirstLevel = true;\r\n               }\r\n\r\n               if (skipToNextLevel != ElementId.InvalidElementId && levelId != skipToNextLevel)\r\n                  continue;\r\n\r\n               IFCLevelInfo levelInfo = ExporterCacheManager.LevelInfoCache.GetLevelInfo(levelId);\r\n               if (levelInfo == null)\r\n                  continue;\r\n\r\n               // endBelowLevel \r\n               if (zSpan.End < levelInfo.Elevation + extension)\r\n                  continue;\r\n\r\n               // To calculate the distance to the next level, we check to see if the Level UpToLevel built-in parameter\r\n               // is set.  If so, we calculate the distance by getting the elevation of the UpToLevel level minus the\r\n               // current elevation, and use it if it is greater than 0.  If it is not greater than 0, or the built-in\r\n               // parameter is not set, we use DistanceToNextLevel.\r\n               double levelHeight = ExporterCacheManager.LevelInfoCache.FindHeight(levelId);\r\n               if (levelHeight < 0.0)\r\n                  levelHeight = CalculateDistanceToNextLevel(element.Document, levelId, levelInfo);\r\n               skipToNextLevel = ExporterCacheManager.LevelInfoCache.FindNextLevel(levelId);\r\n\r\n               // startAboveLevel\r\n               if ((!MathUtil.IsAlmostZero(levelHeight)) &&\r\n                  (zSpan.Start > levelInfo.Elevation + levelHeight - extension))\r\n                  continue;\r\n\r\n               bool startBelowLevel = !firstLevel && (zSpan.Start < levelInfo.Elevation - extension);\r\n               bool endAboveLevel = ((!MathUtil.IsAlmostZero(levelHeight)) &&\r\n                  (zSpan.End > levelInfo.Elevation + levelHeight + extension));\r\n               if (!startBelowLevel && !endAboveLevel)\r\n                  break;\r\n\r\n               IFCRange currentSpan = new IFCRange(\r\n                  startBelowLevel ? levelInfo.Elevation : zSpan.Start,\r\n                  endAboveLevel ? (levelInfo.Elevation + levelHeight) : zSpan.End);\r\n\r\n               // We want our ranges to be non-overlapping.  As such, we'll modify the start parameter\r\n               // to be at least as large as the previous end parameter (if any).  If this makes the\r\n               // range invalid, we won't add it.\r\n               if (ranges.Count > 0)\r\n               {\r\n                  IFCRange lastSpan = ranges.Last();\r\n                  if (lastSpan.End > currentSpan.End - MathUtil.Eps())\r\n                     continue;\r\n\r\n                  currentSpan.Start = Math.Max(currentSpan.Start, lastSpan.End);\r\n               }\r\n\r\n               ranges.Add(currentSpan);\r\n               levels.Add(levelId);\r\n\r\n               firstLevel = false;\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets IFCElementComposition types having \"COMPLEX\",\"ELEMENT\",\"PARTIAL\" values for levels\r\n      /// </summary>\r\n      /// <param name=\"element\">The element </param>\r\n      public static IFCElementComposition GetElementCompositionTypeOverride(Element element)\r\n      {\r\n         string nameOverride = \"IfcElementCompositionType\";\r\n\r\n         // If the IfcElementCompositionType is not set by the user, \r\n         // it sets the value to .ELEMENT by default\r\n         string overrideValue = NamingUtil.GetOverrideStringValue(element, nameOverride, \"Element\");\r\n\r\n         IFCElementComposition ifcElementCompositionType;\r\n\r\n         if (Enum.TryParse<IFCElementComposition>(overrideValue, true, out ifcElementCompositionType))\r\n         {\r\n            return ifcElementCompositionType;\r\n         }\r\n\r\n         return IFCElementComposition.Element;\r\n\r\n      }\r\n\r\n      public static double LevelExtension { get; set; } = 10.0 / (12.0 * 2.54);\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/LinkedFileExportAs.cs",
    "content": "﻿//\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\n// Copyright (C) 2016  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nnamespace Revit.IFC.Export.Utility\n{\n   /// <summary>\n   /// An enumeration that specifies how we export linked files.\n   /// </summary>\n   public enum LinkedFileExportAs\n   {\n      DontExport,\n      ExportAsSeparate,\n      ExportSameProject,\n      ExportSameSite\n   };\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/LogicalPropertyInfoCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of IFC logical properties.\r\n   /// </summary>\r\n   public class LogicalPropertyInfoCache : Dictionary<KeyValuePair<string, IFCLogical>, IFCAnyHandle>\r\n   {\r\n      /// <summary>\r\n      /// Finds if it contains the property with the specified logical value.\r\n      /// </summary>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"value\">The value.</param>\r\n      /// <returns>True if it has, false otherwise.</returns>\r\n      public IFCAnyHandle Find(string propertyName, IFCLogical value)\r\n      {\r\n         KeyValuePair<string, IFCLogical> key = new KeyValuePair<string, IFCLogical>(propertyName, value);\r\n\r\n         IFCAnyHandle propertyHandle;\r\n         if (TryGetValue(key, out propertyHandle))\r\n            return propertyHandle;\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a new property of a logical value to the cache.\r\n      /// </summary>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"value\">The value.</param>\r\n      /// <param name=\"propertyHandle\">The property handle.</param>\r\n      public void Add(string propertyName, IFCLogical value, IFCAnyHandle propertyHandle)\r\n      {\r\n         KeyValuePair<string, IFCLogical> key = new KeyValuePair<string, IFCLogical>(propertyName, value);\r\n         this[key] = propertyHandle;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/MEPCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Electrical;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of MEP handles mapping to MEP elements in Revit.\r\n   /// </summary>\r\n   public class MEPCache\r\n   {\r\n      /// <summary>\r\n      /// A cache of elements (Cable Trays and Conduits) that may be assigned to systems\r\n      /// </summary>\r\n      public HashSet<ElementId> CableElementsCache { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// The dictionary mapping from an exported connector to an Ifc handle. \r\n      /// </summary>\r\n      public Dictionary<Connector, IFCAnyHandle> ConnectorCache { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// The dictionary mapping from an exported connector to its description string. \r\n      /// </summary>\r\n      public Dictionary<Connector, string> ConnectorDescriptionCache = new();\r\n\r\n      /// <summary>\r\n      /// A cache of elements (Ducts and Pipes) that may have coverings (Linings and/or Insulations) and their categories.\r\n      /// </summary>\r\n      public Dictionary<ElementId, ElementId> CoveredElementsCache { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// A list of connectors\r\n      /// </summary>\r\n      public List<ConnectorSet> MEPConnectors { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// The dictionary mapping from a MEP element elementId to an Ifc handle. \r\n      /// </summary>\r\n      /// <remarks>ElementId can't be used as a key for a SortedDictionary.</remarks>\r\n      private SortedDictionary<long, IFCAnyHandle> MEPElementHandleDictionary { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// Finds the IFC handle from the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element elementId.</param>\r\n      /// <returns>The IFC handle.</returns>\r\n      public IFCAnyHandle Find(ElementId elementId)\r\n      {\r\n         IFCAnyHandle handle;\r\n         if (MEPElementHandleDictionary.TryGetValue(elementId.Value, out handle))\r\n         {\r\n            return handle;\r\n         }\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds the IFC handle to the dictionary and connectors.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"handle\">The IFC handle.</param>\r\n      public void Register(Element element, IFCAnyHandle handle)\r\n      {\r\n         long idVal = element.Id.Value;\r\n         if (MEPElementHandleDictionary.ContainsKey(idVal))\r\n            return;\r\n\r\n         MEPElementHandleDictionary[idVal] = handle;\r\n\r\n         ConnectorSet connectorts = GetConnectors(element);\r\n         if (connectorts != null)\r\n            MEPConnectors.Add(connectorts);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Provides public access specifically for getting the connectors associated to a wire.\r\n      /// </summary>\r\n      /// <param name=\"wireElement\">The Wire element.</param>\r\n      /// <returns>A set of connectors.</returns>\r\n      /// <remarks>Wires in Revit are annotation elements that aren't currently exported.  As such, we want to get their\r\n      /// connection information to connect the elements at each of the wire together via a bi-directional port.</remarks>\r\n      public static ConnectorSet GetConnectorsForWire(Wire wireElement)\r\n      {\r\n         return GetConnectors(wireElement);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets a set of all connectors hosted by a single element.\r\n      /// Modified from http://thebuildingcoder.typepad.com/blog/2010/06/retrieve-mep-elements-and-connectors.html.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element that may host connectors</param>\r\n      /// <returns>A set of connectors</returns>\r\n      static ConnectorSet GetConnectors(Element element)\r\n      {\r\n         try\r\n         {\r\n            if (element is FamilyInstance)\r\n            {\r\n               return (element as FamilyInstance)?.MEPModel?.ConnectorManager?.Connectors;\r\n            }\r\n\r\n            if (element is Wire)\r\n            {\r\n               return (element as Wire)?.ConnectorManager?.Connectors;\r\n            }\r\n\r\n            if (element is MEPCurve)\r\n            {\r\n               return (element as MEPCurve)?.ConnectorManager?.Connectors;\r\n            }\r\n\r\n            if (element is FabricationPart)\r\n            {\r\n               return (element as FabricationPart)?.ConnectorManager?.Connectors;\r\n            }\r\n         }\r\n         catch\r\n         {\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      public void CacheConnectorHandle(Connector connector, IFCAnyHandle handle)\r\n      {\r\n         if (handle != null && !ConnectorCache.ContainsKey(connector))\r\n         {\r\n            ConnectorCache.Add(connector, handle);\r\n         }\r\n      }\r\n\r\n      public void Clear()\r\n      {\r\n         CableElementsCache.Clear();\r\n         ConnectorCache.Clear();\r\n         ConnectorDescriptionCache.Clear();\r\n         CoveredElementsCache.Clear();\r\n         MEPConnectors.Clear();\r\n         MEPElementHandleDictionary.Clear();\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/MaterialAndProfile.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   public class MaterialAndProfile\r\n   {\r\n      IDictionary<ElementId, HashSet<IFCAnyHandle>> m_MaterialAndProfileDict;\r\n      double? m_scaledExtrusionDepth = null;\r\n      double? m_scaledCrossSectioNArea = null;\r\n      double? m_scaledOuterPerimeter = null;\r\n      double? m_scaledInnerPerimeter = null;\r\n      Transform m_lcsTransformUsed = null;\r\n      Curve m_pathCurve = null;\r\n\r\n      public MaterialAndProfile()\r\n      {\r\n         m_MaterialAndProfileDict = new Dictionary<ElementId, HashSet<IFCAnyHandle>>();\r\n         m_lcsTransformUsed = Transform.Identity;\r\n      }\r\n\r\n      public void Add(ElementId materialId, IFCAnyHandle profileHnd)\r\n      {\r\n         if (!m_MaterialAndProfileDict.ContainsKey(materialId))\r\n         {\r\n            HashSet<IFCAnyHandle> data = new HashSet<IFCAnyHandle>();\r\n            data.Add(profileHnd);\r\n            m_MaterialAndProfileDict.Add(materialId, data);\r\n         }\r\n         else\r\n         {\r\n            HashSet<IFCAnyHandle> data = m_MaterialAndProfileDict[materialId];\r\n            data.Add(profileHnd);\r\n            m_MaterialAndProfileDict[materialId] = data;\r\n         }\r\n      }\r\n\r\n      public bool ContainsKey(ElementId materialId)\r\n      {\r\n         return m_MaterialAndProfileDict.ContainsKey(materialId);\r\n      }\r\n\r\n      public IReadOnlyCollection<KeyValuePair<ElementId, IFCAnyHandle>> GetKeyValuePairs()\r\n      {\r\n         IList<KeyValuePair<ElementId, IFCAnyHandle>> theList = new List<KeyValuePair<ElementId, IFCAnyHandle>>();\r\n         foreach (KeyValuePair<ElementId, HashSet<IFCAnyHandle>> matProf in m_MaterialAndProfileDict)\r\n         {\r\n            foreach (IFCAnyHandle profileHnd in matProf.Value)\r\n            {\r\n               KeyValuePair<ElementId, IFCAnyHandle> pairValue = new KeyValuePair<ElementId, IFCAnyHandle>(matProf.Key, profileHnd);\r\n               theList.Add(pairValue);\r\n            }\r\n         }\r\n         return theList.ToList();\r\n      }\r\n\r\n      public IReadOnlyCollection<IFCAnyHandle> GetProfileHandles(ElementId materialId)\r\n      {\r\n         HashSet<IFCAnyHandle> profileColl;\r\n         m_MaterialAndProfileDict.TryGetValue(materialId, out profileColl);\r\n         return profileColl.ToList();\r\n      }\r\n\r\n      public void Clear()\r\n      {\r\n         m_MaterialAndProfileDict.Clear();\r\n      }\r\n\r\n      public double? ExtrusionDepth\r\n      {\r\n         get { return m_scaledExtrusionDepth; }\r\n         set { m_scaledExtrusionDepth = value; }\r\n      }\r\n\r\n      public double? CrossSectionArea\r\n      {\r\n         get { return m_scaledCrossSectioNArea; }\r\n         set { m_scaledCrossSectioNArea = value; }\r\n      }\r\n\r\n      public double? OuterPerimeter\r\n      {\r\n         get { return m_scaledOuterPerimeter; }\r\n         set { m_scaledOuterPerimeter = value; }\r\n      }\r\n\r\n      public double? InnerPerimeter\r\n      {\r\n         get { return m_scaledInnerPerimeter; }\r\n         set { m_scaledInnerPerimeter = value; }\r\n      }\r\n\r\n      public Transform LCSTransformUsed\r\n      {\r\n         get { return m_lcsTransformUsed; }\r\n         set { m_lcsTransformUsed = value; }\r\n      }\r\n\r\n      public Curve PathCurve\r\n      {\r\n         get { return m_pathCurve; }\r\n         set { m_pathCurve = value; }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/MaterialConstituentCache.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Utility;\n\nnamespace Revit.IFC.Export.Utility\n{\n   /// <summary>\n   /// MaterialConstituentInfo class for Material constituent defined by Component Category name and he Material Id\n   /// </summary>\n   public class MaterialConstituentInfo\n   {\n      /// <summary>\n      /// Geometry component category/sub-category name\n      /// </summary>\n      public string ComponentCat { get; private set; }\n\n      /// <summary>\n      /// Material Id\n      /// </summary>\n      public ElementId MaterialId { get; private set; }\n\n      /// <summary>\n      /// Fraction of the total volume of the material that this constituent represents.\n      /// </summary>\n      public double Fraction { get; set; } = 0.0;\n\n      /// <summary>\n      /// Constructor\n      /// </summary>\n      /// <param name=\"componentCat\">The geometry component category name</param>\n      /// <param name=\"materialId\">The material elementid</param>\n      public MaterialConstituentInfo(string componentCat, ElementId materialId)\n      {\n         ComponentCat = componentCat;\n         MaterialId = materialId;\n      }\n\n      /// <summary>\n      /// Constructor\n      /// </summary>\n      /// <param name=\"componentCat\">The geometry component category name</param>\n      /// <param name=\"materialId\">The material elementid</param>\n      /// <param name=\"fraction\">The material fraction</param>\n      public MaterialConstituentInfo(string componentCat, ElementId materialId, double fraction)\n      {\n         ComponentCat = componentCat;\n         MaterialId = materialId;\n         Fraction = fraction;\n      }\n   }\n\n   /// <summary>\n   /// Comparer class for the MaterialConstituentInfo\n   /// </summary>\n   public class MaterialConsituentInfoComparer : IEqualityComparer<MaterialConstituentInfo>\n   {\n      public bool Equals(MaterialConstituentInfo obj1, MaterialConstituentInfo obj2)\n      {\n         return (obj1.ComponentCat.Equals(obj2.ComponentCat, StringComparison.CurrentCultureIgnoreCase)\n            && obj1.MaterialId.Equals(obj2.MaterialId)\n            && MathUtil.IsAlmostEqual(obj1.Fraction, obj2.Fraction));\n      }\n\n      public int GetHashCode(MaterialConstituentInfo obj)\n      {\n         int hash = 23;\n         hash = hash * 31 + obj.ComponentCat.GetHashCode();\n         hash = hash * 31 + obj.MaterialId.GetHashCode();\n         hash = hash * 31 + Math.Floor(obj.Fraction).GetHashCode();\n         return hash;\n      }\n   }\n\n   public class MaterialConstituentCache\n   {\n      /// <summary>\n      /// The dictionary mapping from a Material Constituent to a handle. \n      /// </summary>\n      private Dictionary<MaterialConstituentInfo, IFCAnyHandle> MaterialConstDictionary { get; set; } =\n         new(new MaterialConsituentInfoComparer());\n\n      /// <summary>\n      /// Find the handle from the cache using only the Material Id.\n      /// </summary>\n      /// <param name=\"materialId\"></param>\n      /// <returns></returns>\n      public IFCAnyHandle Find(ElementId materialId, double fraction)\n      {\n         // If only a Material ElementId is provided, default the constituent name to be the same as the material name\n         Material material = ExporterCacheManager.Document.GetElement(materialId) as Material;\n         string catName = (material != null) ? NamingUtil.GetMaterialName(material) : \"<Unnamed>\";    // Default name to the Material name if not null or <Unnamed>\n         MaterialConstituentInfo constInfo = new MaterialConstituentInfo(catName, materialId, fraction);\n         return Find(constInfo);\n      }\n\n      /// <summary>\n      /// Finds the handle from the dictionary.\n      /// </summary>\n      /// <param name=\"constInfo\">The Material Constituent Info</param>\n      /// <returns>The handle</returns>\n      public IFCAnyHandle Find(MaterialConstituentInfo constInfo)\n      {\n         IFCAnyHandle handle = null;\n         if (MaterialConstDictionary.TryGetValue(constInfo, out handle))\n         {\n            // We need to make sure the handle isn't stale.  If it is, remove it. \n            try\n            {\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(handle))\n               {\n                  MaterialConstDictionary.Remove(constInfo);\n                  handle = null;\n               }\n            }\n            catch\n            {\n               MaterialConstDictionary.Remove(constInfo);\n               handle = null;\n            }\n         }\n         return handle;\n      }\n\n      /// <summary>\n      /// Adds the handle to the dictionary.\n      /// </summary>\n      /// <param name=\"constInfo\">The Material Constituent Info</param>\n      /// <param name=\"handle\">The handle</param>\n      public void Register(MaterialConstituentInfo constInfo, IFCAnyHandle handle)\n      {\n         if (MaterialConstDictionary.ContainsKey(constInfo))\n            return;\n\n         MaterialConstDictionary[constInfo] = handle;\n      }\n\n      /// <summary>\n      /// Register Material Constituent Handle with only Material Id. This is the original behavior\n      /// </summary>\n      /// <param name=\"materialId\">the material elementId</param>\n      /// <param name=\"handle\">the handle</param>\n      public void Register(ElementId materialId, double fraction, IFCAnyHandle handle)\n      {\n         // If only a Material ElementId is provided, default the constituent name to be the same as the material name\n         Material material = ExporterCacheManager.Document.GetElement(materialId) as Material;\n         string catName = (material != null) ? NamingUtil.GetMaterialName(material) : \"<Unnamed>\";    // Default name to the Material name if not null or <Unnamed>\n         MaterialConstituentInfo constInfo = new MaterialConstituentInfo(catName, materialId, fraction);\n         if (MaterialConstDictionary.ContainsKey(constInfo))\n            return;\n\n         MaterialConstDictionary[constInfo] = handle;\n      }\n\n      /// <summary>\n      /// Delete an element from the cache\n      /// </summary>\n      /// <param name=\"consInfo\">the Material Constituent Info</param>\n      public void Delete(MaterialConstituentInfo constInfo)\n      {\n         if (MaterialConstDictionary.ContainsKey(constInfo))\n         {\n            IFCAnyHandle handle = MaterialConstDictionary[constInfo];\n            MaterialConstDictionary.Remove(constInfo);\n            ExporterCacheManager.HandleToElementCache.Delete(handle);\n         }\n      }\n\n      /// <summary>\n      /// Clear the dictionary. Constituent should not be cached beyond the Set\n      /// </summary>\n      public void Clear()\n      {\n         MaterialConstDictionary.Clear();\n      }\n\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/MaterialConstituentSetCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Class to define the quality comparer for the sets\r\n   /// </summary>\r\n   public class ConstituentSetComparer : IEqualityComparer<ISet<IFCAnyHandle>>\r\n   {\r\n      /// <summary>\r\n      /// Whether the two Sets are equal\r\n      /// </summary>\r\n      public bool Equals(ISet<IFCAnyHandle> set1, ISet<IFCAnyHandle> set2)\r\n      {\r\n         return set1.SetEquals(set2);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the hash code for this Set.\r\n      /// </summary>\r\n      public int GetHashCode(ISet<IFCAnyHandle> theSet)\r\n      {\r\n         // Stores the result.\r\n         int result = 0;\r\n\r\n         // Don't compute hash code on null object.\r\n         if (theSet == null)\r\n            return 0;\r\n\r\n         if (theSet.Count == 0)\r\n            return 0;\r\n\r\n         foreach (IFCAnyHandle setMember in theSet)\r\n         {\r\n            // Compute hash for the set using the member Ids and a prime number 251\r\n            result += result * 251 + setMember.Id;\r\n         }\r\n         return result;\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Used to keep a cache of MaterialConstituentSet (new in IFC4). Since objects may be \r\n   /// linked to the same set (but not necessarily in the same order), this cache is chiefly \r\n   /// responsible to keep the unique set regardless of the order inside it.\r\n   /// </summary>\r\n   public class MaterialConstituentSetCache : BaseRelationsCache\r\n   {\r\n      /// <summary>\r\n      /// The dictionary mapping the IfcMaterialConstituentSet to its handle. \r\n      /// </summary>\r\n      private IDictionary<ISet<IFCAnyHandle>, IFCAnyHandle> MatConstituentSetDictionary\r\n      { get; set; } = new Dictionary<ISet<IFCAnyHandle>, IFCAnyHandle>(new ConstituentSetComparer());\r\n\r\n      /// <summary>\r\n      /// The dictionary mapping from an ElementId to an IfcMaterialConstituentSet\r\n      /// </summary>\r\n      private IDictionary<long, IFCAnyHandle> ElementIdToHandle\r\n      { get; set; } = new SortedDictionary<long, IFCAnyHandle>();\r\n\r\n      /// <summary>\r\n      /// Finds the appopriate Handle for the IfcMaterialConstituentSet from the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"constituentSet\">The element id.</param>\r\n      /// <returns>The HashSet of the IfcMaterialConstituentSet.</returns>\r\n      public IFCAnyHandle Find(ISet<IFCAnyHandle> constituentSet)\r\n      {\r\n         if (MatConstituentSetDictionary.TryGetValue(constituentSet, out IFCAnyHandle constituentSetHandle))\r\n            return constituentSetHandle;\r\n         \r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds the IfcMaterialConstituentSet handle from the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"id\">The element id.</param>\r\n      /// <returns>The IfcMaterial handle.</returns>\r\n      public IFCAnyHandle Find(ElementId id)\r\n      {\r\n         if (ElementIdToHandle.TryGetValue(id.Value, out IFCAnyHandle handle))\r\n            return handle;\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds the IfcMaterialConstituentSet and its handle to the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element elementId.</param>\r\n      /// <param name=\"instanceHandle\">The element instance handle.</param>\r\n      /// <param name=\"constituentSetHandle\">The IfcMaterialConstituentSet.</param>\r\n      /// <param name=\"constituents\">The set of IfcMaterialConstituents.</param>\r\n      public void Register(ElementId elementId, IFCAnyHandle instanceHandle,\r\n         IFCAnyHandle constituentSetHandle, ISet<IFCAnyHandle> constituents)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(constituentSetHandle))\r\n            return;\r\n\r\n         if (elementId != ElementId.InvalidElementId && !ElementIdToHandle.ContainsKey(elementId.Value))\r\n            ElementIdToHandle[elementId.Value] = constituentSetHandle;\r\n\r\n         if (!MatConstituentSetDictionary.ContainsKey(constituents))\r\n            MatConstituentSetDictionary[constituents] = constituentSetHandle;\r\n\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(instanceHandle))\r\n         {\r\n            if (!Cache.TryGetValue(constituentSetHandle, out ISet<IFCAnyHandle> relatedObjects))\r\n            {\r\n               relatedObjects = new HashSet<IFCAnyHandle>();\r\n               Cache[constituentSetHandle] = relatedObjects;\r\n            }\r\n            relatedObjects.Add(instanceHandle);\r\n         }\r\n      }\r\n\r\n      public override void Clear()\r\n      {\r\n         MatConstituentSetDictionary.Clear();\r\n         ElementIdToHandle.Clear();\r\n         base.Clear();\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/MaterialLayerSetCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of the element ids mapping to a IfcMaterial___Set handle (includes IfcMaterialLayerSet, IfcMaterialProfileSet, IfcMaterialConstituentSet in IFC4).\r\n   /// </summary>\r\n   public class MaterialSetCache\r\n   {\r\n      /// <summary>\r\n      /// The dictionary mapping from an ElementId to an IfcMaterialLayerSet handle. \r\n      /// </summary>\r\n      private Dictionary<ElementId, IFCAnyHandle> ElementIdToMatLayerSetDictionary { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// The dictionary mapping from an ElementId to an IfcMaterialProfileSet handle. \r\n      /// </summary>\r\n      private Dictionary<ElementId, IFCAnyHandle> ElementIdToMatProfileSetDictionary { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// The dictionary mapping from an ElementId to an IfcMaterialConstituentSet handle. \r\n      /// </summary>\r\n      private Dictionary<ElementId, MaterialLayerSetInfo> ElementIdToMaterialLayerSetInfo { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// The dictionary mapping from an ElementId to a primary IfcMaterial handle. \r\n      /// </summary>\r\n      private Dictionary<ElementId, IFCAnyHandle> ElementIdToMaterialHndDictionary { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// Finds the IfcMaterialLayerSet handle from the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"id\">The element id.</param>\r\n      /// <returns>The IfcMaterialLayerSet handle.</returns>\r\n      public IFCAnyHandle FindLayerSet(ElementId id)\r\n      {\r\n         if (ElementIdToMatLayerSetDictionary.TryGetValue(id, out IFCAnyHandle handle))\r\n            return handle;\r\n         \r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds the IfcMaterialProfileSet handle from the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"id\">The element id.</param>\r\n      /// <returns>The IfcMaterialProfileSet handle.</returns>\r\n      public IFCAnyHandle FindProfileSet(ElementId id)\r\n      {\r\n         if (ElementIdToMatProfileSetDictionary.TryGetValue(id, out IFCAnyHandle handle))\r\n            return handle;\r\n         \r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Find MaterialLayerSetInfo from the dictionary cache\r\n      /// </summary>\r\n      /// <param name=\"id\">The element id</param>\r\n      /// <returns>the MaterialLayerSetInfo</returns>\r\n      public MaterialLayerSetInfo FindMaterialLayerSetInfo(ElementId id)\r\n      {\r\n         if (ElementIdToMaterialLayerSetInfo.TryGetValue(id, out MaterialLayerSetInfo mlsInfo))\r\n            return mlsInfo;\r\n         \r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds the IfcMaterialLayerSet handle to the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element elementId.</param>\r\n      /// <param name=\"handle\">The IfcMaterialLayerSet handle.</param>\r\n      public void RegisterLayerSet(ElementId elementId, IFCAnyHandle handle, MaterialLayerSetInfo mlsInfo = null)\r\n      {\r\n         if (ElementIdToMatLayerSetDictionary.ContainsKey(elementId))\r\n            return;\r\n\r\n         ElementIdToMatLayerSetDictionary[elementId] = handle;\r\n\r\n         if (ElementIdToMaterialLayerSetInfo.ContainsKey(elementId) || mlsInfo == null)\r\n            return;\r\n\r\n         if ((!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 && IFCAnyHandleUtil.IsTypeOf(handle, Common.Enums.IFCEntityType.IfcMaterialConstituentSet))\r\n            || (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && IFCAnyHandleUtil.IsTypeOf(handle, Common.Enums.IFCEntityType.IfcMaterialLayerSet)))\r\n            ElementIdToMaterialLayerSetInfo.Add(elementId, mlsInfo);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Removes element id and associated info from ElementIdToMaterialLayerSetInfo and ElementIdToMatLayerSetDictionary dictionaries.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element elementId.</param>\r\n      public void UnregisterLayerSet(ElementId elementId)\r\n      {\r\n         ElementIdToMaterialLayerSetInfo.Remove(elementId);\r\n         ElementIdToMatLayerSetDictionary.Remove(elementId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds the IfcMaterialProfileSet handle to the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element elementId.</param>\r\n      /// <param name=\"handle\">The IfcMaterialLayerSet handle.</param>\r\n      public void RegisterProfileSet(ElementId elementId, IFCAnyHandle handle)\r\n      {\r\n         if (ElementIdToMatProfileSetDictionary.ContainsKey(elementId))\r\n            return;\r\n\r\n         ElementIdToMatProfileSetDictionary[elementId] = handle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds the primary IfcMaterial handle from the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"id\">The element id.</param>\r\n      /// <returns>The IfcMaterial handle.</returns>\r\n      public IFCAnyHandle FindPrimaryMaterialHnd(ElementId id)\r\n      {\r\n         IFCAnyHandle handle;\r\n         if (ElementIdToMaterialHndDictionary.TryGetValue(id, out handle))\r\n         {\r\n            return handle;\r\n         }\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds the primary IfcMaterial handle to the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element elementId.</param>\r\n      /// <param name=\"handle\">The IfcMaterial handle.</param>\r\n      public void RegisterPrimaryMaterialHnd(ElementId elementId, IFCAnyHandle handle)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(handle))\r\n            return;\r\n\r\n         if (ElementIdToMaterialHndDictionary.ContainsKey(elementId))\r\n            return;\r\n\r\n         ElementIdToMaterialHndDictionary[elementId] = handle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Removes element id and associated info from ElementIdToMaterialHndDictionary dictionary.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element elementId.</param>\r\n      /// <param name=\"handle\">The IfcMaterial handle.</param>\r\n      public void UnregisterPrimaryMaterialHnd(ElementId elementId)\r\n      {\r\n         ElementIdToMaterialHndDictionary.Remove(elementId);\r\n      }\r\n\r\n      public void Clear()\r\n      {\r\n         ElementIdToMatLayerSetDictionary.Clear();\r\n         ElementIdToMatProfileSetDictionary.Clear();\r\n         ElementIdToMaterialLayerSetInfo.Clear();\r\n         ElementIdToMaterialHndDictionary.Clear();\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/MaterialLayerSetInfo.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Toolkit;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Export.Exporter;\n\nnamespace Revit.IFC.Export.Utility\n{\n   public class MaterialLayerSetInfo\n   {\n      public class MaterialInfo\n      {\n         public MaterialInfo(ElementId baseMatId, string layerName, double matWidth, MaterialFunctionAssignment function)\n         {\n            BaseMatId = baseMatId;\n            LayerName = layerName;\n            ShapeAspectName = layerName;\n            Width = matWidth;\n            Function = function;\n         }\n\n         public ElementId BaseMatId { get; private set; } = ElementId.InvalidElementId;\n\n         public string LayerName { get; private set; } = null;\n\n         public string ShapeAspectName { get; set; } = null;\n\n         public double Width { get; set; } = 0.0;\n\n         public MaterialFunctionAssignment Function { get; private set; } = MaterialFunctionAssignment.None;\n      }\n\n      private ExporterIFC ExporterIFC { get; set; } = null;\n\n      private Element Element { get; set; } = null;\n\n      private ProductWrapper ProductWrapper { get; set; } = null;\n\n      private GeometryElement GeometryElement { get; set; } = null;\n      \n      bool NeedToGenerateIFCObjects { get; set; } = false;\n\n      /// <summary>\n      /// Initialize MaterialLayerSetInfo for element\n      /// </summary>\n      /// <param name=\"exporterIFC\">the exporter IFC</param>\n      /// <param name=\"element\">the element</param>\n      /// <param name=\"productWrapper\">the product wrapper</param>\n      public MaterialLayerSetInfo(ExporterIFC exporterIFC, Element element, ProductWrapper productWrapper, GeometryElement geometryElement = null)\n      {\n         Element = element;\n         ExporterIFC = exporterIFC;\n         ProductWrapper = productWrapper;\n         GeometryElement = geometryElement;\n         CollectMaterialLayerSet();\n      }\n\n      public void SingleMaterialOverride (ElementId materialId, double materialWidth)\n      {\n         GenerateIFCObjectsIfNeeded();\n\n         Material material = Element.Document.GetElement(materialId) as Material;\n         string layerName = \"Layer\";\n         if (material != null)\n         {\n            layerName = NamingUtil.GetMaterialLayerName(material);\n         }\n         MaterialInfo matInfo = new MaterialInfo(materialId, layerName, materialWidth, MaterialFunctionAssignment.None);\n         MaterialIds.Add(matInfo);\n\n         IFCAnyHandle singleMaterialOverrideHnd = IFCInstanceExporter.CreateMaterial(ExporterIFC.GetFile(), layerName, null, null);\n         ExporterCacheManager.MaterialHandleCache.Register(MaterialIds[0].BaseMatId, singleMaterialOverrideHnd);\n         m_GeneratedMaterialLayerSetHandle = singleMaterialOverrideHnd;\n      }\n\n      /// <summary>\n      /// Return status whether the LayerSetInfo is empty\n      /// </summary>\n      public bool IsEmpty\n      {\n         get\n         {\n            return (m_GeneratedMaterialLayerSetHandle == null && MaterialIds.Count == 0);\n         }\n      }\n\n      /// <summary>\n      /// List of Material Ids and their associated layer names of the material layer set\n      /// </summary>\n      public List<MaterialInfo> MaterialIds { get; private set; } = new List<MaterialInfo>();\n\n      /// <summary>\n      /// MaterialLayerSet Collected or MaterialConstituentSet (for IFC4RV)\n      /// Warning: Do not call Properties inside class because this can break lazy generation of IFC objects.\n      ///          Use private members instead.\n      /// </summary>\n      private IFCAnyHandle m_GeneratedMaterialLayerSetHandle = null;\n      \n      public IFCAnyHandle MaterialLayerSetHandle\n      {\n         get\n         {\n            GenerateIFCObjectsIfNeeded();\n            return m_GeneratedMaterialLayerSetHandle;\n         }\n      }\n\n      /// <summary>\n      /// Primary Material handle\n      /// Warning: Do not call Properties inside class because this can break lazy generation of IFC objects.\n      ///          Use private members instead.\n      /// </summary>\n      private IFCAnyHandle m_GeneratedPrimaryMaterialHandle = null;\n      \n      public IFCAnyHandle PrimaryMaterialHandle\n      {\n         get\n         {\n            GenerateIFCObjectsIfNeeded();\n\n            return m_GeneratedPrimaryMaterialHandle;\n         }\n      }\n\n      /// <summary>\n      /// Material layer quantity properties\n      /// Warning: Do not call Properties inside class because this can break lazy generation of IFC objects.\n      ///          Use private members instead.\n      /// </summary>\n      private HashSet<IFCAnyHandle> m_GeneratedLayerQuantityWidthHnd = new HashSet<IFCAnyHandle>();\n      \n      public HashSet<IFCAnyHandle> LayerQuantityWidthHnd\n      {\n         get\n         {\n            GenerateIFCObjectsIfNeeded();\n\n            return m_GeneratedLayerQuantityWidthHnd;\n         }\n      }\n\n      /// <summary>\n      /// Total thickness of the material layer set.\n      /// </summary>\n      public double TotalThickness { get; private set; } = 0.0;\n\n      /// <summary>\n      /// Collect information about material layer.\n      ///   For IFC4RV Architectural exchange, it will generate IfcMatrialConstituentSet along with the relevant IfcShapeAspect and the width in the quantityset\n      ///   For IFC4RV Structural exchange, it will generate multiple components as IfcBuildingElementPart for each layer\n      ///   For others IfcMaterialLayer will be created\n      /// </summary>\n      private void CollectMaterialLayerSet()\n      {\n         ElementId typeElemId = Element.GetTypeId();\n         IFCAnyHandle materialLayerSet = ExporterCacheManager.MaterialSetCache.FindLayerSet(typeElemId);\n         // Roofs with no components are only allowed one material.  We will arbitrarily choose the thickest material.\n         m_GeneratedPrimaryMaterialHandle = ExporterCacheManager.MaterialSetCache.FindPrimaryMaterialHnd(typeElemId);\n\n         bool materialHandleIsNotValid = IFCAnyHandleUtil.IsNullOrHasNoValue(materialLayerSet);\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(materialLayerSet) || materialHandleIsNotValid)\n         {\n            if (materialHandleIsNotValid)\n            {\n               UnregisterIFCHandles();\n            }\n            NeedToGenerateIFCObjects = true;\n\n            List<double> widths = new List<double>();\n            List<MaterialFunctionAssignment> functions = new List<MaterialFunctionAssignment>();\n\n            HostObjAttributes hostObjAttr = Element.Document.GetElement(typeElemId) as HostObjAttributes;\n            if (hostObjAttr == null)\n            {\n               // It does not have the HostObjAttribute (where we will get the compound structure for material layer set.\n               // We will define a single material instead and create the material layer set of this single material if there is enough information (At least Material id and thickness) \n               FamilyInstance familyInstance = Element as FamilyInstance;\n               if (familyInstance == null)\n               {\n                  if (GeometryElement != null)\n                  {\n                     ElementId matId = BodyExporter.GetBestMaterialIdFromGeometryOrParameter(GeometryElement, Element);\n                     CategoryUtil.CreateMaterialAssociation(ExporterIFC, ProductWrapper.GetAnElement(), matId);\n                  }\n                  return;\n               }\n\n               FamilySymbol familySymbol = familyInstance.Symbol;\n               ICollection<ElementId> famMatIds = familySymbol.GetMaterialIds(false);\n               if (famMatIds.Count == 0)\n               {\n                  // For some reason Plate type may not return any Material id\n                  ElementId baseMatId = CategoryUtil.GetBaseMaterialIdForElement(Element);\n                  Material material = Element.Document.GetElement(baseMatId) as Material;\n                  if (material == null)\n                     return;\n\n                  string layerName = NamingUtil.GetMaterialLayerName(material);\n                  double matWidth = 0.0;\n                  Parameter thicknessPar = familySymbol.get_Parameter(BuiltInParameter.CURTAIN_WALL_SYSPANEL_THICKNESS);\n                  if (thicknessPar != null)\n                     matWidth = thicknessPar.AsDouble();\n                  widths.Add(matWidth);\n\n                  if (baseMatId != ElementId.InvalidElementId)\n                     MaterialIds.Add(new MaterialInfo(baseMatId, layerName, matWidth, MaterialFunctionAssignment.None));\n                  // How to get the thickness? For CurtainWall Panel (PanelType), there is a builtin parameter CURTAINWALL_SYSPANEL_THICKNESS\n\n                  functions.Add(MaterialFunctionAssignment.None);\n               }\n               else\n               {\n                  foreach (ElementId matid in famMatIds)\n                  {\n                     // How to get the thickness? For CurtainWall Panel (PanelType), there is a builtin parameter CURTAINWALL_SYSPANEL_THICKNESS\n                     double matWidth = familySymbol.get_Parameter(BuiltInParameter.CURTAIN_WALL_SYSPANEL_THICKNESS)?.AsDouble() ?? \n                        ParameterUtil.GetSpecialThicknessParameter(familySymbol);\n                     \n                     if (MathUtil.IsAlmostZero(matWidth))\n                        continue;\n\n                     widths.Add(matWidth);\n                     ElementId baseMatId = CategoryUtil.GetBaseMaterialIdForElement(Element);\n                     if (matid != ElementId.InvalidElementId)\n                     {\n                        Material material = Element.Document.GetElement(matid) as Material;\n                        if (material != null)\n                        {\n                           string layerName = NamingUtil.GetMaterialLayerName(material);\n                           MaterialIds.Add(new MaterialInfo(matid, layerName, matWidth, MaterialFunctionAssignment.None));\n                        }\n                     }\n                     else\n                     {\n                        MaterialIds.Add(new MaterialInfo(baseMatId, null, matWidth, MaterialFunctionAssignment.None));\n                     }\n\n                     functions.Add(MaterialFunctionAssignment.None);\n                  }\n               }\n            }\n            else\n            {\n               ElementId baseMatId = CategoryUtil.GetBaseMaterialIdForElement(Element);\n               CompoundStructure cs = hostObjAttr.GetCompoundStructure();\n\n               if (cs != null)\n               {\n                  double scaledOffset = 0.0, scaledWallWidth = 0.0, wallHeight = 0.0;\n                  Wall wall = Element as Wall;\n                  if (wall != null)\n                  {\n                     scaledWallWidth = UnitUtil.ScaleLength(wall.Width);\n                     scaledOffset = -scaledWallWidth / 2.0;\n                     BoundingBoxXYZ boundingBox = wall.get_BoundingBox(null);\n                     if (boundingBox != null)\n                        wallHeight = boundingBox.Max.Z - boundingBox.Min.Z;\n                  }\n\n                  //TODO: Vertically compound structures are not yet supported by export.\n                  if (!cs.IsVerticallyHomogeneous() && !MathUtil.IsAlmostZero(wallHeight))\n                     cs = cs.GetSimpleCompoundStructure(wallHeight, wallHeight / 2.0);\n\n                  for (int ii = 0; ii < cs.LayerCount; ++ii)\n                  {\n                     double matWidth = cs.GetLayerWidth(ii);\n                     \n                     ElementId matId = cs.GetMaterialId(ii);\n                     widths.Add(matWidth);\n                     // save layer function into ProductWrapper, \n                     // it's used while exporting \"Function\" of Pset_CoveringCommon\n                     functions.Add(cs.GetLayerFunction(ii));\n\n                     if (matId != ElementId.InvalidElementId)\n                     {\n                        Material material = Element.Document.GetElement(matId) as Material;\n                        if (material != null)\n                        {\n                           string layerName = NamingUtil.GetMaterialLayerName(material);\n                           MaterialIds.Add(new MaterialInfo(matId, layerName, matWidth, functions.Last()));\n                        }\n                     }\n                     else\n                     {\n                        MaterialIds.Add(new MaterialInfo(baseMatId, null, matWidth, functions.Last()));\n                     }\n                  }\n               }\n\n               if (MaterialIds.Count == 0)\n               {\n                  double matWidth = cs?.GetWidth() ?? 0.0;\n                  widths.Add(matWidth);\n                  if (baseMatId != ElementId.InvalidElementId)\n                  {\n                     Material material = Element.Document.GetElement(baseMatId) as Material;\n                     if (material != null)\n                     {\n                        string layerName = NamingUtil.GetMaterialLayerName(material);\n                        MaterialIds.Add(new MaterialInfo(baseMatId, layerName, matWidth, MaterialFunctionAssignment.None));\n                     }\n                  }\n                  functions.Add(MaterialFunctionAssignment.None);\n               }\n            }\n            TotalThickness = UnitUtil.ScaleLength(widths.Sum());\n         }\n         else\n         {\n            NeedToGenerateIFCObjects = false;\n\n            m_GeneratedMaterialLayerSetHandle = materialLayerSet;\n\n            MaterialLayerSetInfo mlsInfo = ExporterCacheManager.MaterialSetCache.FindMaterialLayerSetInfo(typeElemId);\n            if (mlsInfo != null)\n            {\n               MaterialIds = mlsInfo.MaterialIds;\n               m_GeneratedPrimaryMaterialHandle = mlsInfo.PrimaryMaterialHandle;\n               m_GeneratedLayerQuantityWidthHnd = mlsInfo.LayerQuantityWidthHnd;\n               TotalThickness = mlsInfo.TotalThickness;\n            }\n         }\n\n         return;\n      }\n\n      private void GenerateIFCObjectsIfNeeded()\n      {\n         if (!NeedToGenerateIFCObjects)\n            return;\n\n         NeedToGenerateIFCObjects = false;\n         IFCAnyHandle materialLayerSet = null;\n\n         if (ProductWrapper != null && !ProductWrapper.ToNative().IsValidObject)\n            ProductWrapper = null;\n\n         ProductWrapper?.ClearFinishMaterials();\n\n         // We can't create IfcMaterialLayers without creating an IfcMaterialLayerSet.  So we will simply collate here.\n         IList<IFCAnyHandle> materialHnds = new List<IFCAnyHandle>();\n         IList<int> widthIndices = new List<int>();\n         double thickestLayer = 0.0;\n         for (int ii = 0; ii < MaterialIds.Count; ++ii)\n         {\n            // Require positive width for IFC2x3 and before, and non-negative width for IFC4.\n            if (MaterialIds[ii].Width < -MathUtil.Eps())\n               continue;\n\n            bool almostZeroWidth = MathUtil.IsAlmostZero(MaterialIds[ii].Width);\n            if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 && almostZeroWidth)\n               continue;\n\n            if (almostZeroWidth)\n            {\n               MaterialIds[ii].Width = 0.0;\n            }\n\n            IFCAnyHandle materialHnd = CategoryUtil.GetOrCreateMaterialHandle(ExporterIFC, MaterialIds[ii].BaseMatId);\n            if (m_GeneratedPrimaryMaterialHandle == null || (MaterialIds[ii].Width > thickestLayer))\n            {\n               m_GeneratedPrimaryMaterialHandle = materialHnd;\n               thickestLayer = MaterialIds[ii].Width;\n            }\n\n            widthIndices.Add(ii);\n            materialHnds.Add(materialHnd);\n\n            if ((ProductWrapper != null) && (MaterialIds[ii].Function == MaterialFunctionAssignment.Finish1 || MaterialIds[ii].Function == MaterialFunctionAssignment.Finish2))\n            {\n               ProductWrapper.AddFinishMaterial(materialHnd);\n            }\n         }\n\n         int numLayersToCreate = widthIndices.Count;\n         if (numLayersToCreate == 0)\n         {\n            m_GeneratedMaterialLayerSetHandle = materialLayerSet;\n            return;\n         }\n\n         // If it is a single material, check single material override (only IfcMaterial without IfcMaterialLayerSet with only 1 member)\n         if (numLayersToCreate == 1 && ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\n         {\n            m_GeneratedMaterialLayerSetHandle = ExporterUtil.GetSingleMaterial(ExporterIFC.GetFile(), Element,\n               MaterialIds[0].BaseMatId) ?? materialHnds[0];\n            return;\n         }\n\n         IFCFile file = ExporterIFC.GetFile();\n         Document document = ExporterCacheManager.Document;\n\n         IList<IFCAnyHandle> layers = new List<IFCAnyHandle>(numLayersToCreate);\n         IList<Tuple<string, IFCAnyHandle>> layerWidthQuantities = new List<Tuple<string, IFCAnyHandle>>();\n         HashSet<string> layerNameUsed = new HashSet<string>();\n         double totalWidth = 0.0;\n\n         for (int ii = 0; ii < numLayersToCreate; ii++)\n         {\n            int widthIndex = widthIndices[ii];\n            double scaledWidth = UnitUtil.ScaleLength(MaterialIds[widthIndex].Width);\n\n            string layerName = \"Layer\";\n            string description = null;\n            string category = null;\n            int? priority = null;\n\n            IFCLogical? isVentilated = null;\n            int isVentilatedValue;\n\n            Material material = document.GetElement(MaterialIds[ii].BaseMatId) as Material;\n            if (material != null)\n            {\n               if (ParameterUtil.GetIntValueFromElement(material, \"IfcMaterialLayer.IsVentilated\", out isVentilatedValue) != null)\n               {\n                  if (isVentilatedValue == 0)\n                     isVentilated = IFCLogical.False;\n                  else if (isVentilatedValue == 1)\n                     isVentilated = IFCLogical.True;\n               }\n\n               if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\n               {\n                  layerName = MaterialIds[ii].ShapeAspectName;\n                  if (string.IsNullOrEmpty(layerName))\n                     layerName = \"Layer\";\n\n                  description = NamingUtil.GetOverrideStringValue(material, \"IfcMaterialLayer.Description\",\n                     IFCAnyHandleUtil.GetStringAttribute(materialHnds[ii], \"Description\"));\n                  category = NamingUtil.GetOverrideStringValue(material, \"IfcMaterialLayer.Category\",\n                     IFCAnyHandleUtil.GetStringAttribute(materialHnds[ii], \"Category\"));\n                  int priorityValue;\n                  if (ParameterUtil.GetIntValueFromElement(material, \"IfcMaterialLayer.Priority\", out priorityValue) != null)\n                     priority = priorityValue;\n               }\n            }\n\n            if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\n            {\n               // Skip component that has zero width (the will be no geometry associated to it\n               if (MathUtil.IsAlmostZero(scaledWidth))\n                  continue;\n\n               IFCData fractionData = null;\n               if (!MathUtil.IsAlmostZero(TotalThickness))\n                  fractionData = IFCDataUtil.CreateAsNormalisedRatioMeasure(scaledWidth / TotalThickness);\n\n               IFCAnyHandle materialConstituent = IFCInstanceExporter.CreateMaterialConstituent(file, materialHnds[ii],\n                  name: layerName, description: description, category: category, fraction: fractionData);\n               layers.Add(materialConstituent);\n\n               IFCAnyHandle layerQtyHnd = IFCInstanceExporter.CreateQuantityLength(file, \"Width\", description, null, scaledWidth);\n               totalWidth += scaledWidth;\n               layerWidthQuantities.Add(new Tuple<string, IFCAnyHandle>(layerName, layerQtyHnd));\n            }\n            else\n            {\n               IFCAnyHandle materialLayer = IFCInstanceExporter.CreateMaterialLayer(file, materialHnds[ii], scaledWidth, isVentilated,\n                  name: layerName, description: description, category: category, priority: priority);\n               layers.Add(materialLayer);\n            }\n         }\n\n         ElementId typeElemId = Element.GetTypeId();\n         if (layers.Count > 0)\n         {\n            ElementType type = document.GetElement(typeElemId) as ElementType;\n            string layerSetBaseName = type.FamilyName + \":\" + type.Name;\n            string layerSetName = NamingUtil.GetOverrideStringValue(type, \"IfcMaterialLayerSet.Name\", layerSetBaseName);\n            string layerSetDesc = NamingUtil.GetOverrideStringValue(type, \"IfcMaterialLayerSet.Description\", null);\n\n            if (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView)\n            {\n               HashSet<IFCAnyHandle> constituents = new HashSet<IFCAnyHandle>(layers);\n               m_GeneratedMaterialLayerSetHandle = CategoryUtil.GetOrCreateMaterialConstituentSet(file,\n                  typeElemId, null, constituents, layerSetName, layerSetDesc);\n               \n               foreach (Tuple<string, IFCAnyHandle> layerWidthQty in layerWidthQuantities)\n               {\n                  m_GeneratedLayerQuantityWidthHnd.Add(IFCInstanceExporter.CreatePhysicalComplexQuantity(file, layerWidthQty.Item1, null,\n                     new HashSet<IFCAnyHandle>() { layerWidthQty.Item2 }, \"Layer\", null, null));\n               }\n               // Finally create the total width as a quantity\n               m_GeneratedLayerQuantityWidthHnd.Add(IFCInstanceExporter.CreateQuantityLength(file, \"Width\", null, null, totalWidth));\n            }\n            else\n            {\n               m_GeneratedMaterialLayerSetHandle = IFCInstanceExporter.CreateMaterialLayerSet(file, layers, layerSetName, layerSetDesc);\n            }\n\n            ExporterCacheManager.MaterialSetCache.RegisterLayerSet(typeElemId, m_GeneratedMaterialLayerSetHandle, this);\n         }\n\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(m_GeneratedPrimaryMaterialHandle))\n            ExporterCacheManager.MaterialSetCache.RegisterPrimaryMaterialHnd(typeElemId, m_GeneratedPrimaryMaterialHandle);\n      }\n\n      private void UnregisterIFCHandles()\n      {\n         ElementId typeElemId = Element.GetTypeId();\n\n         ExporterCacheManager.MaterialSetCache.UnregisterLayerSet(typeElemId);\n         ExporterCacheManager.MaterialSetCache.UnregisterPrimaryMaterialHnd(typeElemId);\n         if (ProductWrapper != null)\n            ProductWrapper.ClearFinishMaterials();\n\n         m_GeneratedMaterialLayerSetHandle = null;\n         m_GeneratedPrimaryMaterialHandle = null;\n         m_GeneratedLayerQuantityWidthHnd.Clear();\n      }\n\n      public enum CompareTwoLists\n      {\n         ListsSequentialEqual,\n         ListsReversedEqual,\n         ListsUnequal\n      }\n\n      public static CompareTwoLists CompareMaterialInfoList(IList<ElementId> materialListBody, IList<ElementId> materialIdsFromMaterialInfo)\n      {\n         if (materialListBody.Count != materialIdsFromMaterialInfo.Count)\n            return CompareTwoLists.ListsUnequal;\n\n         // Forward compare\n         if (Enumerable.SequenceEqual(materialIdsFromMaterialInfo, materialListBody))\n            return CompareTwoLists.ListsSequentialEqual;\n\n         //Backward compare\n         materialIdsFromMaterialInfo = materialIdsFromMaterialInfo.Reverse().ToList();\n         if (Enumerable.SequenceEqual(materialIdsFromMaterialInfo, materialListBody))\n            return CompareTwoLists.ListsReversedEqual;\n\n         return CompareTwoLists.ListsUnequal;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/MaterialPropertiesUtil.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing static Revit.IFC.Export.Utility.ParameterUtil;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides static methods material properties related manipulations.\r\n   /// </summary>\r\n   public class MaterialPropertiesUtil\r\n   {\r\n      /// <summary>\r\n      /// Enumeration for material property types.\r\n      /// </summary>\r\n      public enum MaterialPropertyType\r\n      {\r\n         Identity,\r\n         Structural,\r\n         Thermal\r\n      }\r\n\r\n      /// <summary>\r\n      /// Caches of parameters (id + name + dataType name) for each material property type.\r\n      /// </summary>\r\n      private static List<(BuiltInParameter, string, string)> m_identityParameters = new(); \r\n      private static Dictionary<ThermalMaterialType, List<(BuiltInParameter, string, string)>> m_thermalParameters = new();\r\n      private static Dictionary<(StructuralAssetClass, StructuralBehavior), List<(BuiltInParameter, string, string)>> m_structuralParameters = new();\r\n\r\n      /// <summary>\r\n      /// Structural material parameters for each asset class.\r\n      /// </summary>\r\n      private static readonly Dictionary<StructuralAssetClass, List<BuiltInParameter>> StructuralParameters = new()\r\n      {\r\n         [StructuralAssetClass.Basic] = new List<BuiltInParameter>()\r\n         {\r\n            BuiltInParameter.PROPERTY_SET_DESCRIPTION,\r\n            BuiltInParameter.PROPERTY_SET_KEYWORDS,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_SUBCLASS,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_STRUCTURAL_DENSITY\r\n         },\r\n\r\n         [StructuralAssetClass.Concrete] = new List<BuiltInParameter>()\r\n         {\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_BEHAVIOR,\r\n            BuiltInParameter.PROPERTY_SET_DESCRIPTION,\r\n            BuiltInParameter.PROPERTY_SET_KEYWORDS,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_SUBCLASS,\r\n            BuiltInParameter.MATERIAL_ASSET_PARAM_SOURCE,\r\n            BuiltInParameter.MATERIAL_ASSET_PARAM_SOURCE_URL,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_STRUCTURAL_DENSITY,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_CONCRETE_COMPRESSION,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_SHEAR_STRENGTH_REDUCTION,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_LIGHT_WEIGHT,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_MINIMUM_YIELD_STRESS,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_MINIMUM_TENSILE_STRENGTH\r\n         },\r\n\r\n         [StructuralAssetClass.Gas] = new List<BuiltInParameter>()\r\n         {\r\n            BuiltInParameter.PROPERTY_SET_DESCRIPTION,\r\n            BuiltInParameter.PROPERTY_SET_KEYWORDS,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_SUBCLASS,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_STRUCTURAL_DENSITY,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_EXP_COEFF\r\n         },\r\n\r\n         [StructuralAssetClass.Generic] = new List<BuiltInParameter>()\r\n         {\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_BEHAVIOR,\r\n            BuiltInParameter.PROPERTY_SET_DESCRIPTION,\r\n            BuiltInParameter.PROPERTY_SET_KEYWORDS,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_SUBCLASS,\r\n            BuiltInParameter.MATERIAL_ASSET_PARAM_SOURCE,\r\n            BuiltInParameter.MATERIAL_ASSET_PARAM_SOURCE_URL,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_STRUCTURAL_DENSITY,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_MINIMUM_YIELD_STRESS,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_MINIMUM_TENSILE_STRENGTH\r\n         },\r\n\r\n         [StructuralAssetClass.Liquid] = new List<BuiltInParameter>()\r\n         {\r\n            BuiltInParameter.PROPERTY_SET_DESCRIPTION,\r\n            BuiltInParameter.PROPERTY_SET_KEYWORDS,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_SUBCLASS,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_STRUCTURAL_DENSITY,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_EXP_COEFF\r\n         },\r\n\r\n         [StructuralAssetClass.Metal] = new List<BuiltInParameter>()\r\n         {\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_BEHAVIOR,\r\n            BuiltInParameter.PROPERTY_SET_DESCRIPTION,\r\n            BuiltInParameter.PROPERTY_SET_KEYWORDS,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_SUBCLASS,\r\n            BuiltInParameter.MATERIAL_ASSET_PARAM_SOURCE,\r\n            BuiltInParameter.MATERIAL_ASSET_PARAM_SOURCE_URL,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_STRUCTURAL_DENSITY,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_MINIMUM_YIELD_STRESS,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_MINIMUM_TENSILE_STRENGTH,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_STRUCTURAL_THERMAL_TREATED\r\n         },\r\n\r\n         [StructuralAssetClass.Plastic] = new List<BuiltInParameter>()\r\n         {\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_BEHAVIOR,\r\n            BuiltInParameter.PROPERTY_SET_DESCRIPTION,\r\n            BuiltInParameter.PROPERTY_SET_KEYWORDS,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_SUBCLASS,\r\n            BuiltInParameter.MATERIAL_ASSET_PARAM_SOURCE,\r\n            BuiltInParameter.MATERIAL_ASSET_PARAM_SOURCE_URL,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_STRUCTURAL_DENSITY,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_MINIMUM_YIELD_STRESS,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_MINIMUM_TENSILE_STRENGTH\r\n         },\r\n\r\n         [StructuralAssetClass.Wood] = new List<BuiltInParameter>()\r\n         {\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_BEHAVIOR,\r\n            BuiltInParameter.PROPERTY_SET_DESCRIPTION,\r\n            BuiltInParameter.PROPERTY_SET_KEYWORDS,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_SUBCLASS,\r\n            BuiltInParameter.MATERIAL_ASSET_PARAM_SOURCE,\r\n            BuiltInParameter.MATERIAL_ASSET_PARAM_SOURCE_URL,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_STRUCTURAL_DENSITY,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_MINIMUM_YIELD_STRESS,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_MINIMUM_TENSILE_STRENGTH,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_SPECIES,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_GRADE,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_BENDING,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_COMPRESSION_PARALLEL,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_COMPRESSION_PERPENDICULAR,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_TENSION_PARALLEL,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_SHEAR_PARALLEL,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_TENSION_PERPENDICULAR,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_AVERAGE_MODULUS,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_WOOD_CONSTRUCTION\r\n         }\r\n      };\r\n\r\n      /// <summary>\r\n      /// Structural material parameters for each behaviour type.\r\n      /// </summary>\r\n      private static readonly Dictionary<StructuralBehavior, List<BuiltInParameter>> StructuralBehaviorParameters = new()\r\n      {\r\n         [StructuralBehavior.Isotropic] = new List<BuiltInParameter>()\r\n         {\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_EXP_COEFF,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_YOUNG_MOD,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_POISSON_MOD,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_SHEAR_MOD\r\n         },\r\n         [StructuralBehavior.Orthotropic] = new List<BuiltInParameter>()\r\n         {\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_EXP_COEFF1,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_EXP_COEFF2,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_EXP_COEFF3,\r\n\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_YOUNG_MOD1,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_YOUNG_MOD2,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_YOUNG_MOD3,\r\n\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_POISSON_MOD1,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_POISSON_MOD2,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_POISSON_MOD3,\r\n\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_SHEAR_MOD1,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_SHEAR_MOD2,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_SHEAR_MOD3,\r\n         },\r\n         [StructuralBehavior.TransverseIsotropic] = new List<BuiltInParameter>()\r\n         {\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_EXP_COEFF_1,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_EXP_COEFF_2,\r\n\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_YOUNG_MOD_1,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_YOUNG_MOD_2,\r\n\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_POISSON_MOD_12,\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_POISSON_MOD_23,\r\n\r\n            BuiltInParameter.PHY_MATERIAL_PARAM_SHEAR_MOD_12\r\n         },\r\n      };\r\n\r\n      /// <summary>\r\n      /// Collects the parameter list for a particular assert class and behaviour type.\r\n      /// </summary>\r\n      private static List<BuiltInParameter> GetStructuralParametersFromMap(StructuralAssetClass materialType, StructuralBehavior materialBehaviour)\r\n      {\r\n         if (!StructuralParameters.TryGetValue(materialType, out var parameters))\r\n            return null;\r\n\r\n         if (parameters.FirstOrDefault() != BuiltInParameter.PHY_MATERIAL_PARAM_BEHAVIOR)\r\n            return parameters;\r\n\r\n         if (!StructuralBehaviorParameters.TryGetValue(materialBehaviour, out var behaviourParameters))\r\n            return parameters;\r\n\r\n         return parameters.Union(behaviourParameters).ToList();\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Exports material properties.\r\n      /// </summary>\r\n      /// <param name=\"file\"> The IFC file.</param>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      public static void ExportMaterialProperties(IFCFile file, ExporterIFC exporterIFC)\r\n      {\r\n         bool materialPropertiesAreAllowed =\r\n           !ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 ||\r\n           ExporterCacheManager.CertifiedEntitiesAndPsetsCache.AllowPredefPsetToBeCreated(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \"IfcExtendedMaterialProperties\");\r\n\r\n         if (!materialPropertiesAreAllowed)\r\n            return;\r\n\r\n         Document document = ExporterCacheManager.Document;\r\n\r\n         foreach (KeyValuePair<ElementId, Tuple<IFCAnyHandle, IFCExportInfoPair>> cachedMaterial in ExporterCacheManager.MaterialHandleCache.ElementIdToHandleAndInfo)\r\n         {\r\n            ElementId materialId = cachedMaterial.Key;\r\n            IFCAnyHandle materialHnd = cachedMaterial.Value?.Item1;\r\n\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(materialHnd))\r\n               continue;\r\n\r\n            Material material = document?.GetElement(materialId) as Material;\r\n            if (material == null)\r\n               continue;\r\n\r\n            // Export material properties from 3 tabs in generic fashion\r\n            ExportMaterialSetParameters(file, document, material, materialHnd, MaterialPropertyType.Identity);\r\n            ExportMaterialSetParameters(file, document, material, materialHnd, MaterialPropertyType.Structural);\r\n            ExportMaterialSetParameters(file, document, material, materialHnd, MaterialPropertyType.Thermal);\r\n\r\n            // 1. Maps project/shared parameters to 'built-in material properties'\r\n            // For example, export IfcMechanicalMaterialProperties.DynamicViscosity Revit material project/shared parameter to IfcMechanicalMaterialProperties.DynamicViscosity attribute\r\n            // 2. Exports some hardcoded mapped Revit material parameters (see MaterialBuildInParameterUtil class) to 'built-in material properties'\r\n            // For example, export Revit material parameter Density('Physical' tab) to IfcGeneralMaterialProperties.MassDensity attribute\r\n            ExportMappedMaterialProperties(file, exporterIFC, material, materialHnd);\r\n\r\n            // Export internal Revit properties\r\n            // For example, non-ifc project parameters to IfcExtendedMaterialProperties \r\n            PropertyUtil.CreateInternalRevitPropertySets(exporterIFC, material, new HashSet<IFCAnyHandle>() { materialHnd }, true);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports material properties of the specified property type.\r\n      /// </summary>\r\n      /// <param name=\"file\"> The IFC file.</param>\r\n      /// <param name=\"document\"> The document.</param>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <param name=\"materialHnd\">The tha material handle object.</param>\r\n      /// <param name=\"materialPropertyType\">The tha material set type.</param>\r\n      public static void ExportMaterialSetParameters(IFCFile file, Document document, Material material, IFCAnyHandle materialHnd, MaterialPropertyType materialPropertyType)\r\n      {\r\n         IFCParameterTemplate parameterTemplate = ExporterCacheManager.ParameterMappingTemplate;\r\n         string materialSetName = materialPropertyType.ToString();\r\n\r\n         // Skip property groups excluded from export\r\n         if (parameterTemplate != null &&\r\n            parameterTemplate.IsPropertySetAMemberOfTemplate(PropertySetupType.RevitMaterialParameters, materialSetName) &&\r\n            !parameterTemplate.IsExportingPropertySet(PropertySetupType.RevitMaterialParameters, materialSetName))\r\n         {\r\n            return;\r\n         }\r\n\r\n         HashSet<IFCAnyHandle> properties = CreateSetProperties(file, document, material, materialPropertyType);\r\n         ExportGenericMaterialPropertySet(file, materialHnd, properties, description: null, materialSetName);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a set of material properties of the specified property type.\r\n      /// </summary>\r\n      /// <param name=\"file\"> The IFC file.</param>\r\n      /// <param name=\"document\"> The document.</param>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <param name=\"materialPropertyType\">The material set type.</param>\r\n      public static HashSet<IFCAnyHandle> CreateSetProperties(IFCFile file, Document document, Material material, MaterialPropertyType materialPropertyType)\r\n      {\r\n         if (file == null || document == null || material == null)\r\n            return null;\r\n\r\n         HashSet<IFCAnyHandle> properties = new();\r\n\r\n         List<(BuiltInParameter, string, string)> materialParameters = null;\r\n         Element assertElement = null;\r\n\r\n         switch (materialPropertyType)\r\n         {\r\n            case MaterialPropertyType.Identity:\r\n               {\r\n                  materialParameters = GetIdentityParameters(material);\r\n                  assertElement = material;\r\n                  break;\r\n               }\r\n            case MaterialPropertyType.Structural:\r\n               {\r\n                  materialParameters = GetStructuralParameters(document, material, out assertElement);\r\n                  break;\r\n               }\r\n            case MaterialPropertyType.Thermal:\r\n               {\r\n                  materialParameters = GetThermalParameters(document, material, out assertElement);\r\n                  break;\r\n               }\r\n         }\r\n\r\n         if ((materialParameters?.Count ?? 0) == 0 || assertElement == null)\r\n            return properties;\r\n\r\n         string materialSetName = materialPropertyType.ToString();\r\n\r\n         foreach (var paramPair in materialParameters)\r\n         {\r\n            Parameter param = assertElement.get_Parameter(paramPair.Item1);\r\n            if (param == null)\r\n               continue;\r\n\r\n            string parameterName = paramPair.Item2;\r\n\r\n            // Skip properties exluded from export\r\n            IFCPropertyMappingInfo mappingInfo = PropertyUtil.GetParameterMappingInfoFromCache(\r\n               PropertySetupType.RevitMaterialParameters, materialSetName, param.Id, parameterName);\r\n            if ((mappingInfo?.ExportFlag ?? true) == false)\r\n               continue;\r\n\r\n            if (!string.IsNullOrEmpty(mappingInfo?.IFCPropertyName))\r\n               parameterName = mappingInfo.IFCPropertyName;\r\n\r\n            IFCAnyHandle propertyHnd = PropertyUtil.CreatePropertyByParameterStorageType(file, param, parameterName);\r\n            if (propertyHnd != null)\r\n               properties.Add(propertyHnd);\r\n         }\r\n\r\n         return properties;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collects and caches Identity material parameters\r\n      /// </summary>\r\n      public static List<(BuiltInParameter, string, string)> GetIdentityParameters(Material material)\r\n      {\r\n         if (m_identityParameters.Count != 0)\r\n            return m_identityParameters;\r\n         \r\n         IList<ElementId> identityParamIds = Material.GetIdentityParameterIds();\r\n         if (identityParamIds == null)\r\n            return m_identityParameters;\r\n\r\n         foreach (var identityParam in identityParamIds)\r\n         {\r\n            if (identityParam == null)\r\n               continue;\r\n\r\n            BuiltInParameter builtInParameter = (BuiltInParameter)identityParam.Value;\r\n\r\n            string dataTypeName = string.Empty;\r\n            Parameter param = material.get_Parameter(builtInParameter);\r\n            if(param != null && param.Definition != null)\r\n            {\r\n               ForgeTypeId dataTypeId = param.Definition.GetDataType();\r\n               if ((dataTypeId?.Empty() ?? true) == false)\r\n                  dataTypeName = LabelUtils.GetLabelForSpec(dataTypeId);\r\n            }\r\n\r\n            ForgeTypeId paramTypeId = ParameterUtils.GetParameterTypeId(builtInParameter);\r\n            if ((paramTypeId?.Empty() ?? true) == true)\r\n               continue;\r\n\r\n            string paramName = LabelUtils.GetLabelForBuiltInParameter(paramTypeId);\r\n            if (string.IsNullOrEmpty(paramName))\r\n               continue;\r\n\r\n            m_identityParameters.Add((builtInParameter, paramName, dataTypeName));\r\n         }\r\n\r\n         return m_identityParameters;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collects and caches Structural material parameters\r\n      /// </summary>\r\n      public static List<(BuiltInParameter, string, string)> GetStructuralParameters(Document document, Material material, out Element assetElement)\r\n      {\r\n         assetElement = null;\r\n\r\n         if (document == null || material == null)\r\n            return null;\r\n\r\n         PropertySetElement structuralSet = document.GetElement(material.StructuralAssetId) as PropertySetElement;\r\n         if (structuralSet == null)\r\n            return null;\r\n\r\n         StructuralAsset structuralAsset = structuralSet.GetStructuralAsset();\r\n         if (structuralAsset == null)\r\n            return null;\r\n\r\n         assetElement = structuralSet;\r\n         StructuralAssetClass materialType = structuralAsset.StructuralAssetClass;\r\n         StructuralBehavior materialBehaviour = structuralAsset.Behavior;\r\n\r\n         if (m_structuralParameters.TryGetValue((materialType, materialBehaviour), out var cachedParameters))\r\n            return cachedParameters;\r\n\r\n         cachedParameters = new();\r\n         m_structuralParameters[(materialType, materialBehaviour)] = cachedParameters;\r\n\r\n         // Get parameters from the map. We don't use the same logic as for Thermal parameters \r\n         // because for unknown reason for Structural parameters the GetOrderedParameters always returns\r\n         // an entire list of parameters without filtering it according to the asset class.\r\n         List<BuiltInParameter> structuralParameters = GetStructuralParametersFromMap(materialType, materialBehaviour);\r\n         if ((structuralParameters?.Count ?? 0) == 0)\r\n            return cachedParameters;\r\n\r\n         foreach (BuiltInParameter paramId in structuralParameters)\r\n         {\r\n            if (paramId == BuiltInParameter.INVALID)\r\n               continue;\r\n\r\n            ForgeTypeId paramTypeId = ParameterUtils.GetParameterTypeId(paramId);\r\n            if ((paramTypeId?.Empty() ?? true) == true)\r\n               continue;\r\n\r\n            string paramName = LabelUtils.GetLabelForBuiltInParameter(paramTypeId);\r\n            if (string.IsNullOrEmpty(paramName))\r\n               continue;\r\n\r\n            string dataTypeName = string.Empty;\r\n            Parameter param = material.get_Parameter(paramId);\r\n            if (param != null && param.Definition != null)\r\n            {\r\n               ForgeTypeId dataTypeId = param.Definition.GetDataType();\r\n               if ((dataTypeId?.Empty() ?? true) == false)\r\n                  dataTypeName = LabelUtils.GetLabelForSpec(dataTypeId);\r\n            }\r\n\r\n            cachedParameters.Add((paramId, paramName, dataTypeName));\r\n         }\r\n\r\n         return cachedParameters;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collects and caches Thermal material parameters\r\n      /// </summary>\r\n      public static List<(BuiltInParameter, string, string)> GetThermalParameters(Document document, Material material, out Element assetElement)\r\n      {\r\n         assetElement = null;\r\n\r\n         if (document == null || material == null)\r\n            return null;\r\n\r\n         PropertySetElement thermalSet = document.GetElement(material.ThermalAssetId) as PropertySetElement;\r\n         if (thermalSet == null)\r\n            return null;\r\n\r\n         ThermalAsset thermalAsset = thermalSet.GetThermalAsset();\r\n         if (thermalAsset == null)\r\n            return null;\r\n\r\n         assetElement = thermalSet;\r\n         ThermalMaterialType materialType = thermalAsset.ThermalMaterialType;\r\n\r\n         if (m_thermalParameters.TryGetValue(materialType, out var cachedParameters))\r\n            return cachedParameters;\r\n\r\n         cachedParameters = new();\r\n         m_thermalParameters[materialType] = cachedParameters;\r\n\r\n         ICollection<Parameter> thermalParameters = thermalSet.GetOrderedParameters();\r\n         if (thermalParameters == null)\r\n            return cachedParameters;\r\n\r\n         foreach (Parameter param in thermalParameters)\r\n         {\r\n            if (param == null || param.Definition == null)\r\n               continue;\r\n\r\n            string dataTypeName = string.Empty;\r\n            ForgeTypeId dataTypeId = param.Definition.GetDataType();\r\n            if ((dataTypeId?.Empty() ?? true) == false)\r\n               dataTypeName = LabelUtils.GetLabelForSpec(dataTypeId);\r\n\r\n            cachedParameters.Add(((BuiltInParameter)param.Id.Value, param.Definition.Name, dataTypeName));\r\n         }\r\n\r\n         return cachedParameters;\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Creates generic material properties\r\n      /// </summary>\r\n      /// <param name=\"file\"> The IFC file.</param>\r\n      /// <param name=\"materialHnd\"> The material handle.</param>\r\n      /// <param name=\"properties\"> The properties set.</param>\r\n      /// <param name=\"description\"> The description.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      public static void ExportGenericMaterialPropertySet(IFCFile file, IFCAnyHandle materialHnd, ISet<IFCAnyHandle> properties, string description, string name)\r\n      {\r\n         if (file == null || materialHnd == null || (properties?.Count ?? 0) == 0)\r\n            return;\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            IFCInstanceExporter.CreateExtendedMaterialProperties(file, materialHnd, properties, description, name);\r\n         else\r\n            IFCInstanceExporter.CreateMaterialProperties(file, materialHnd, properties, description, name);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Exports material properties according ot mapping table\r\n      /// </summary>\r\n      /// <param name=\"file\"> The IFC file.</param>\r\n      /// <param name=\"exporterIFC\">The IFC exporter object.</param>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <param name=\"materialHnd\">The tha material handle object.</param>\r\n      static void ExportMappedMaterialProperties(IFCFile file, ExporterIFC exporterIFC, Material material, IFCAnyHandle materialHnd)\r\n      {\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            IList<IList<PreDefinedPropertySetDescription>> psetsToCreate = \r\n               ExporterCacheManager.ParameterCache.PreDefinedPropertySets;\r\n            IList<PreDefinedPropertySetDescription> currPsetsToCreate =\r\n               ExporterUtil.GetCurrPreDefinedPSetsToCreate(materialHnd, psetsToCreate,\r\n               PSetsToProcess.Both);\r\n            \r\n            foreach (PreDefinedPropertySetDescription currDesc in currPsetsToCreate)\r\n            {\r\n               // Create list of IFCData attributes using mapped parameter name\r\n               IList<(string name, PropertyValueType type,  IList<IFCData> data)> createdAttributes = currDesc.ProcessEntries(file, material);\r\n\r\n               if ((createdAttributes?.Count ?? 0) == 0)\r\n                  continue;\r\n\r\n               // Create IfcMaterialProperties derived entity\r\n               IFCAnyHandle propertyHndl = null;\r\n               if (Enum.TryParse(currDesc.Name, out Common.Enums.IFCEntityType propertyType))\r\n                  propertyHndl = IFCAnyHandleUtil.CreateInstance(file, propertyType);\r\n\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(propertyHndl))\r\n                  return;\r\n\r\n               IFCAnyHandleUtil.ValidateSubTypeOf(materialHnd, false, Common.Enums.IFCEntityType.IfcMaterial);\r\n               IFCAnyHandleUtil.SetAttribute(propertyHndl, \"Material\", materialHnd);\r\n               foreach (var createdAttribute in createdAttributes)\r\n               {\r\n                  if ((createdAttribute.data?.Count ?? 0) == 0)\r\n                     continue;\r\n\r\n                  if (createdAttribute.type == PropertyValueType.ListValue)\r\n                     IFCAnyHandleUtil.SetAttribute(propertyHndl, createdAttribute.name, createdAttribute.data);\r\n                  else\r\n                     IFCAnyHandleUtil.SetAttribute(propertyHndl, createdAttribute.name, createdAttribute.data[0]);\r\n               }\r\n            }\r\n         }\r\n         else\r\n         {\r\n            IList<PropertySetDescription> currPsetsToCreate =\r\n               ExporterUtil.GetCurrPSetsToCreate(materialHnd, PSetsToProcess.Instance);\r\n\r\n            foreach (PropertySetDescription currDesc in currPsetsToCreate)\r\n            {\r\n               ElementOrConnector elementOrConnector = new ElementOrConnector(material);\r\n               ISet<IFCAnyHandle> props = currDesc.ProcessEntries(file, exporterIFC, null, elementOrConnector, null, materialHnd);\r\n               if (props.Count > 0)\r\n                  IFCInstanceExporter.CreateMaterialProperties(file, materialHnd, props, currDesc.DescriptionOfSet, currDesc.Name);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Collects parameters for all the materials of the document.\r\n      /// </summary>\r\n      public static Dictionary<string, List<(BuiltInParameter, string, string)>> GetGroupedMaterialParameters(Document document)\r\n      {\r\n         if (document == null)\r\n            return null;\r\n\r\n         FilteredElementCollector materialElementCollector = new(document);\r\n         ElementFilter materialElementFilter = new ElementClassFilter(typeof(Material));\r\n         materialElementCollector.WherePasses(materialElementFilter);\r\n         List<Material> materials = materialElementCollector.Cast<Material>().ToList();\r\n         if ((materials?.Count ?? 0) == 0)\r\n            return null;\r\n\r\n         foreach (Material material in materials)\r\n         {\r\n            // Cache Identity parameters if needed\r\n            if (m_identityParameters.Count == 0)\r\n               GetIdentityParameters(material);\r\n\r\n            // Cache Structural parameters if needed\r\n            PropertySetElement structuralSet = document.GetElement(material.StructuralAssetId) as PropertySetElement;\r\n            StructuralAsset structuralAsset = structuralSet?.GetStructuralAsset();\r\n            if (structuralAsset != null)\r\n            {\r\n               StructuralAssetClass structuralType = structuralAsset.StructuralAssetClass;\r\n               StructuralBehavior structuralBehaviour = structuralAsset.Behavior;\r\n               if (!m_structuralParameters.ContainsKey((structuralType, structuralBehaviour)))\r\n                  GetStructuralParameters(document, material, out _);\r\n            }\r\n\r\n            // Cache Thermal parameters if needed\r\n            PropertySetElement thermalSet = document?.GetElement(material.ThermalAssetId) as PropertySetElement;\r\n            ThermalAsset thermalAsset = thermalSet?.GetThermalAsset();\r\n            if (thermalAsset != null)\r\n            {\r\n               ThermalMaterialType thermalType = thermalAsset.ThermalMaterialType;\r\n               if (!m_thermalParameters.ContainsKey(thermalType))\r\n                  GetThermalParameters(document, material, out _);\r\n            }\r\n         }\r\n\r\n         // Add Identity parameters\r\n         Dictionary<string, List<(BuiltInParameter, string, string)>> groupedMaterialParameters = new();\r\n         if (m_identityParameters.Any())\r\n            groupedMaterialParameters.TryAdd(MaterialPropertyType.Identity.ToString(), m_identityParameters);\r\n\r\n         // Add Structural parameters \r\n         List<(BuiltInParameter, string, string)> allStructuralParameters = new();\r\n         foreach (var structuralParameters in m_structuralParameters.Values)\r\n            allStructuralParameters = allStructuralParameters.Union(structuralParameters).ToList();\r\n\r\n         if (allStructuralParameters.Any())\r\n            groupedMaterialParameters.TryAdd(MaterialPropertyType.Structural.ToString(), allStructuralParameters);\r\n\r\n         // Add Thermal parameters \r\n         List<(BuiltInParameter, string, string)> allThermalParameters = new();\r\n         foreach (var thermalParameters in m_thermalParameters.Values)\r\n            allThermalParameters = allThermalParameters.Union(thermalParameters).ToList();\r\n\r\n         if (allThermalParameters.Any())\r\n            groupedMaterialParameters.TryAdd(MaterialPropertyType.Thermal.ToString(), allThermalParameters);\r\n\r\n         return groupedMaterialParameters;\r\n      }\r\n   }\r\n\r\n\r\n   /// <summary>\r\n   /// Provides static methods for export builtIn material properties to specifict ifc entities.\r\n   /// </summary>\r\n   public class MaterialBuiltInParameterUtil\r\n   {\r\n      // Dictionary of properties to export to specific IFC entities\r\n      // Each property has: list of property sets and function to extract the value\r\n      static readonly Dictionary<string, Tuple<IList<string>, Func<Material, double?>>> materialBuiltInSet = new Dictionary<string, Tuple<IList<string>, Func<Material, double?>>>\r\n      {\r\n         { \"MassDensity\",          new Tuple<IList<string>, Func<Material, double?>>(new List<string>{ \"Pset_MaterialCommon\", \"IfcGeneralMaterialProperties\"}, getBuiltInMassDensity) },\r\n         { \"Porosity\",             new Tuple<IList<string>, Func<Material, double?>>(new List<string>{ \"Pset_MaterialCommon\", \"IfcGeneralMaterialProperties\"}, getBuiltInPorosity) },\r\n         { \"SpecificHeatCapacity\", new Tuple<IList<string>, Func<Material, double?>>(new List<string>{ \"Pset_MaterialThermal\", \"IfcThermalMaterialProperties\"}, getBuiltInSpecificHeatCapacity) },\r\n         { \"ThermalConductivity\",  new Tuple<IList<string>, Func<Material, double?>>(new List<string>{ \"Pset_MaterialThermal\", \"IfcThermalMaterialProperties\"}, getBuiltInThermalConductivity) },\r\n         { \"YieldStress\",          new Tuple<IList<string>, Func<Material, double?>>(new List<string>{ \"Pset_MaterialSteel\", \"IfcMechanicalSteelMaterialProperties\"}, getBuiltInYieldStress) },\r\n         { \"PoissonRatio\",         new Tuple<IList<string>, Func<Material, double?>>(new List<string>{ \"Pset_MaterialMechanical\", \"IfcMechanicalMaterialProperties\"}, getBuiltInPoissonRatio) },\r\n         { \"YoungModulus\",         new Tuple<IList<string>, Func<Material, double?>>(new List<string>{ \"Pset_MaterialMechanical\", \"IfcMechanicalMaterialProperties\"}, getBuiltInYoungModulus) },\r\n         { \"ShearModulus\",         new Tuple<IList<string>, Func<Material, double?>>(new List<string>{ \"Pset_MaterialMechanical\", \"IfcMechanicalMaterialProperties\"}, getBuiltInShearModulus) },\r\n         { \"ThermalExpansionCoefficient\", new Tuple<IList<string>, Func<Material, double?>>(new List<string>{ \"Pset_MaterialMechanical\", \"IfcMechanicalMaterialProperties\"}, getBuiltInThermalExpansionCoefficient) }\r\n      };\r\n\r\n      /// <summary>\r\n      /// Get MassDensity value from material\r\n      /// </summary>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <returns>nullable value.</returns>\r\n      static double? getBuiltInMassDensity(Material material)\r\n      {\r\n         StructuralAsset structuralAsset = getMaterialStructuralAssert(material);\r\n         if (structuralAsset == null)\r\n            return null;\r\n\r\n         return structuralAsset.Density;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get Porosity value from material\r\n      /// </summary>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <returns>nullable value.</returns>\r\n      static double? getBuiltInPorosity(Material material)\r\n      {\r\n         ThermalAsset thermalAsset = getMaterialThermalAssert(material);\r\n         if (thermalAsset == null)\r\n            return null;\r\n         ThermalMaterialType materialType = thermalAsset.ThermalMaterialType;\r\n\r\n         if (materialType == ThermalMaterialType.Solid)\r\n            return thermalAsset.Porosity;\r\n         else\r\n            return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get SpecificHeatCapacity value from material\r\n      /// </summary>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <returns>nullable value.</returns>\r\n      static double? getBuiltInSpecificHeatCapacity(Material material)\r\n      {\r\n         ThermalAsset thermalAsset = getMaterialThermalAssert(material);\r\n         if (thermalAsset == null)\r\n            return null;\r\n\r\n         return thermalAsset.SpecificHeat;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get ThermalConductivity value from material\r\n      /// </summary>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <returns>nullable value.</returns>\r\n      static double? getBuiltInThermalConductivity(Material material)\r\n      {\r\n         ThermalAsset thermalAsset = getMaterialThermalAssert(material);\r\n         if (thermalAsset == null)\r\n            return null;\r\n         ThermalMaterialType materialType = thermalAsset.ThermalMaterialType;\r\n\r\n         if (thermalAsset.Behavior != StructuralBehavior.Orthotropic || materialType != ThermalMaterialType.Solid)\r\n            return thermalAsset.ThermalConductivity;\r\n         else\r\n            return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get YieldStress value from material\r\n      /// </summary>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <returns>nullable value.</returns>\r\n      static double? getBuiltInYieldStress(Material material)\r\n      {\r\n         StructuralAsset structuralAsset = getMaterialStructuralAssert(material);\r\n         if (structuralAsset == null)\r\n            return null;\r\n         StructuralAssetClass assetClass = structuralAsset.StructuralAssetClass;\r\n\r\n         if (assetClass == StructuralAssetClass.Metal || assetClass == StructuralAssetClass.Concrete || assetClass == StructuralAssetClass.Generic\r\n            || assetClass == StructuralAssetClass.Wood || assetClass == StructuralAssetClass.Plastic)\r\n            return structuralAsset.MinimumYieldStress;\r\n         else\r\n            return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get PoissonRatio value from material\r\n      /// </summary>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <returns>nullable value.</returns>\r\n      static double? getBuiltInPoissonRatio(Material material)\r\n      {\r\n         StructuralAsset structuralAsset = getMaterialStructuralAssert(material);\r\n         if (structuralAsset == null)\r\n            return null;\r\n         StructuralAssetClass assetClass = structuralAsset.StructuralAssetClass;\r\n\r\n         if (structuralAsset.Behavior == StructuralBehavior.Isotropic && (assetClass == StructuralAssetClass.Metal || assetClass == StructuralAssetClass.Concrete\r\n            || assetClass == StructuralAssetClass.Generic || assetClass == StructuralAssetClass.Wood || assetClass == StructuralAssetClass.Plastic))\r\n            return structuralAsset.PoissonRatio?.X;\r\n         else\r\n            return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get YoungModulus value from material\r\n      /// </summary>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <returns>nullable value.</returns>\r\n      static double? getBuiltInYoungModulus(Material material)\r\n      {\r\n         StructuralAsset structuralAsset = getMaterialStructuralAssert(material);\r\n         if (structuralAsset == null)\r\n            return null;\r\n         StructuralAssetClass assetClass = structuralAsset.StructuralAssetClass;\r\n\r\n         if (structuralAsset.Behavior == StructuralBehavior.Isotropic && (assetClass == StructuralAssetClass.Metal || assetClass == StructuralAssetClass.Concrete\r\n            || assetClass == StructuralAssetClass.Generic || assetClass == StructuralAssetClass.Wood || assetClass == StructuralAssetClass.Plastic))\r\n            return structuralAsset.YoungModulus?.X;\r\n         else\r\n            return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get ShearModulus value from material\r\n      /// </summary>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <returns>nullable value.</returns>\r\n      static double? getBuiltInShearModulus(Material material)\r\n      {\r\n         StructuralAsset structuralAsset = getMaterialStructuralAssert(material);\r\n         if (structuralAsset == null)\r\n            return null;\r\n         StructuralAssetClass assetClass = structuralAsset.StructuralAssetClass;\r\n\r\n         if (structuralAsset.Behavior == StructuralBehavior.Isotropic && (assetClass == StructuralAssetClass.Metal || assetClass == StructuralAssetClass.Concrete\r\n            || assetClass == StructuralAssetClass.Generic || assetClass == StructuralAssetClass.Wood || assetClass == StructuralAssetClass.Plastic))\r\n            return structuralAsset.ShearModulus?.X;\r\n         else\r\n            return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get ThermalExpansionCoefficient value from material\r\n      /// </summary>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <returns>nullable value.</returns>\r\n      static double? getBuiltInThermalExpansionCoefficient(Material material)\r\n      {\r\n         StructuralAsset structuralAsset = getMaterialStructuralAssert(material);\r\n         if (structuralAsset == null)\r\n            return null;\r\n         StructuralAssetClass assetClass = structuralAsset.StructuralAssetClass;\r\n\r\n         if (structuralAsset.Behavior == StructuralBehavior.Isotropic && (assetClass == StructuralAssetClass.Metal || assetClass == StructuralAssetClass.Concrete\r\n            || assetClass == StructuralAssetClass.Generic || assetClass == StructuralAssetClass.Plastic || assetClass == StructuralAssetClass.Wood)\r\n            || assetClass == StructuralAssetClass.Gas || assetClass == StructuralAssetClass.Liquid)\r\n            return structuralAsset.ThermalExpansionCoefficient?.X;\r\n         else\r\n            return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check if the property must be exported \r\n      /// </summary>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <returns>True if it is to export as material builtIn parameter.</returns>\r\n      public static bool isMaterialBuiltInParameter(string propertyName)\r\n      {\r\n         return materialBuiltInSet.ContainsKey(propertyName);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create material property data if it is built in\r\n      /// </summary>\r\n      /// <param name=\"psetName\">The material.</param>\r\n      /// <param name=\"propertyName\">The material.</param>\r\n      /// <param name=\"propertyType\">The material.</param>\r\n      /// <param name=\"element\">The material.</param>\r\n      /// <returns>Material data.</returns>\r\n      public static IList<IFCData> CreatePredefinedDataIfBuiltIn(string psetName, string propertyName, PropertyType propertyType, Element element)\r\n      {\r\n         IList<IFCData> data = null;\r\n         if (isMaterialBuiltInParameter(propertyName))\r\n         {\r\n            IFCData singleData = CreateMaterialDataFromParameter(psetName, propertyName, propertyType, element);\r\n            if (singleData != null)\r\n               data = new List<IFCData>() { singleData };\r\n         }\r\n\r\n         return data;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get thermal assert from material\r\n      /// </summary>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <returns>The thermal assert.</returns>\r\n      static ThermalAsset getMaterialThermalAssert(Material material)\r\n      {\r\n         if (material == null)\r\n            return null;\r\n         Document document = ExporterCacheManager.Document;\r\n         PropertySetElement thermalSet = document?.GetElement(material.ThermalAssetId) as PropertySetElement;\r\n         return thermalSet?.GetThermalAsset();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get thermal structural from material\r\n      /// </summary>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <returns>The structural assert.</returns>\r\n      static StructuralAsset getMaterialStructuralAssert(Material material)\r\n      {\r\n         if (material == null)\r\n            return null;\r\n         Document document = ExporterCacheManager.Document;\r\n         PropertySetElement structuralSet = document?.GetElement(material.StructuralAssetId) as PropertySetElement;\r\n         return structuralSet?.GetStructuralAsset();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create material property handle\r\n      /// </summary>\r\n      /// <param name=\"psetName\">The material.</param>\r\n      /// <param name=\"propertyName\">The material.</param>\r\n      /// <param name=\"propertyType\">The material.</param>\r\n      /// <param name=\"element\">The material.</param>\r\n      /// <param name=\"file\">The file.</param>\r\n      /// <returns>Material property handle.</returns>\r\n      public static IFCAnyHandle CreateMaterialPropertyIfBuiltIn(string psetName, string propertyName, PropertyType propertyType, Element element, IFCFile file)\r\n      {\r\n         if (!isMaterialBuiltInParameter(propertyName))\r\n         {\r\n            return null;\r\n         }\r\n         \r\n         IFCData data = CreateMaterialDataFromParameter(psetName, propertyName, propertyType, element);\r\n         if (data == null)\r\n         {\r\n            return null;\r\n         }\r\n\r\n         PropertyDescription propertyDescription = new PropertyDescription(propertyName);\r\n         return PropertyUtil.CreateCommonProperty(file, propertyDescription, data, PropertyValueType.SingleValue, null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create material property data\r\n      /// </summary>\r\n      /// <param name=\"psetName\">The material.</param>\r\n      /// <param name=\"propertyName\">The material.</param>\r\n      /// <param name=\"propertyType\">The material.</param>\r\n      /// <param name=\"element\">The material.</param>\r\n      /// <returns>Material data.</returns>\r\n      public static IFCData CreateMaterialDataFromParameter(string psetName, string propertyName, PropertyType propertyType, Element element)\r\n      {\r\n         IFCData data = null;\r\n         if (materialBuiltInSet.TryGetValue(propertyName, out var parameterInfo))\r\n         {\r\n            if (!parameterInfo.Item1.Contains(psetName) || parameterInfo.Item2 == null)\r\n               return data;\r\n\r\n            double? paramValue = parameterInfo.Item2.Invoke(element as Material);\r\n            if (!paramValue.HasValue)\r\n               return data;\r\n\r\n            switch (propertyType)\r\n            {\r\n               case PropertyType.MassDensity:\r\n                  {\r\n                     paramValue = UnitUtil.ScaleMassDensity(paramValue.Value);\r\n                     data = IFCDataUtil.CreateAsMassDensityMeasure(paramValue.Value);\r\n                     break;\r\n                  }\r\n               case PropertyType.Ratio:\r\n               case PropertyType.NormalisedRatio:\r\n               case PropertyType.PositiveRatio:\r\n                  {\r\n                     data = IFCDataUtil.CreateRatioMeasureDataCommon(paramValue.Value, propertyType);\r\n                     break;\r\n                  }\r\n               case PropertyType.SpecificHeatCapacity:\r\n                  {\r\n                     paramValue = UnitUtil.ScaleSpecificHeatCapacity(paramValue.Value);\r\n                     data = IFCDataUtil.CreateAsSpecificHeatCapacityMeasure(paramValue.Value);\r\n                     break;\r\n                  }\r\n               case PropertyType.ThermalConductivity:\r\n                  {\r\n                     paramValue = UnitUtil.ScaleThermalConductivity(paramValue.Value);\r\n                     data = IFCDataUtil.CreateAsThermalConductivityMeasure(paramValue.Value);\r\n                     break;\r\n                  }\r\n               case PropertyType.Pressure:\r\n                  {\r\n                     paramValue = UnitUtil.ScalePressure(paramValue.Value);\r\n                     data = IFCDataUtil.CreateAsPressureMeasure(paramValue.Value);\r\n                     break;\r\n                  }\r\n               case PropertyType.ModulusOfElasticity:\r\n                  {\r\n                     paramValue = UnitUtil.ScaleModulusOfElasticity(paramValue.Value);\r\n                     data = IFCDataUtil.CreateAsModulusOfElasticityMeasure(paramValue.Value);\r\n                     break;\r\n                  }\r\n               case PropertyType.ThermalExpansionCoefficient:\r\n                  {\r\n                     paramValue = UnitUtil.ScaleThermalExpansionCoefficient(paramValue.Value);\r\n                     data = IFCDataUtil.CreateAsThermalExpansionCoefficientMeasure(paramValue.Value);\r\n                     break;\r\n                  }\r\n            }\r\n         }\r\n\r\n         return data;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/MaterialRelationsCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of the IfcRoot handles mapping to an IfcMaterial or IfcMaterialList handle.\r\n   /// </summary>\r\n   public class MaterialRelationsCache : BaseRelationsCache\r\n   {\r\n      /// <summary>\r\n      /// Determines whether the object to be added to RelatedObjects is a subtraction element or not.\r\n      /// </summary>\r\n      /// <param name=\"relatedObject\">Object to be examined.</param>\r\n      /// <returns>True if Related Object is valid, false otherwise.</returns>\r\n      public override bool IsValidRelatedObject(IFCAnyHandle relatedObject)\r\n      {\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            if (IFCAnyHandleUtil.IsSubTypeOf(relatedObject, IFCEntityType.IfcFeatureElementSubtraction))\r\n               return false;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(relatedObject, IFCEntityType.IfcOpeningElement) || \r\n             IFCAnyHandleUtil.IsSubTypeOf(relatedObject, IFCEntityType.IfcVirtualElement))\r\n            return false;\r\n\r\n         return !IFCAnyHandleUtil.IsNullOrHasNoValue(relatedObject);\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/MaterialSetUsageCache.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System.Collections.Generic;\nusing Autodesk.Revit.DB.IFC;\n\nnamespace Revit.IFC.Export.Utility\n{\n   /// <summary>\n   /// Used to keep a cache of the IfcRoot handles mapping to a IfcMaterial___SetUsage handle. It includes IfcMaterialLayerSetUsage, IfcMaterialProfileSetUsage in IFC4\n   /// </summary>\n   public class MaterialSetUsageCache : BaseRelationsCache\n   {\n      private IDictionary<IFCAnyHandle, string> UsageToHashCache { get; } = new Dictionary<IFCAnyHandle, string>();\n\n      private IDictionary<string, IFCAnyHandle> HashToUsageCache { get; } = new Dictionary<string, IFCAnyHandle>();\n\n      public void AddHash(IFCAnyHandle handle, string hash)\n      {\n         UsageToHashCache[handle] = hash;\n         HashToUsageCache[hash] = handle;\n      }\n\n      /// <summary>\n      /// Get the previously stored hash value for a particular handle, if it exists.\n      /// </summary>\n      /// <param name=\"handle\">The handle.</param>\n      /// <returns>The hash value, or the empty string if it can't be found.</returns>\n      /// <remarks>Strictly speaking, it is a bug if the hash value can't be found,\n      /// but the rest of the logic should compensate for that.</remarks>\n      public string GetHash(IFCAnyHandle handle)\n      {\n         if (!UsageToHashCache.TryGetValue(handle, out string hash))\n            return string.Empty;\n         return hash;\n      }\n\n      /// <summary>\n      /// Get the previously stored handle value for a particular hash, if it exists.\n      /// </summary>\n      /// <param name=\"hash\">The hash.</param>\n      /// <returns>The handle, or null if it can't be found.</returns>\n      public IFCAnyHandle GetHandle(string hash)\n      {\n         if (!HashToUsageCache.TryGetValue(hash, out IFCAnyHandle handle))\n            return null;\n         return handle;\n      }\n\n      public override void Clear()\n      {\n         UsageToHashCache.Clear();\n         HashToUsageCache.Clear();\n         base.Clear();\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/NamingOptions.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// A class that controls how Revit elements are named on export.\r\n   /// </summary>\r\n   public class NamingOptions\r\n   {\r\n      /// <summary>\r\n      /// public default constructor.\r\n      /// </summary>\r\n      public NamingOptions()\r\n      {\r\n         UseFamilyAndTypeNameForReference = false;\r\n         UseVisibleRevitNameAsEntityName = false;\r\n         UseTypeNameOnlyForIfcType = false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines how to generate the Reference value for elements.  There are two possibilities:\r\n      /// 1. true: use the family name and the type name.  Ex.  Basic Wall: Generic -8\".  This allows distinguishing between two\r\n      /// identical type names in different families.\r\n      /// 2. false: use the type name only.  Ex:  Generic -8\".  This allows for proper tagging when the type name is determined\r\n      /// by code (e.g. a construction type).\r\n      /// </summary>\r\n      public bool UseFamilyAndTypeNameForReference\r\n      {\r\n         get;\r\n         set;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines how to set the base IFC entity name based on the Revit element name.\r\n      /// 1. true: Constructs the name from FamilyName:TypeName:ElementId.  Uses naming override, if one is set by user.\r\n      /// 2. false: Constructs the name from Category:FamilyName:TypeName.  Ignores naming overrides.\r\n      /// </summary>\r\n      public bool UseVisibleRevitNameAsEntityName\r\n      {\r\n         get;\r\n         set;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines how to set the base IFC type name.\r\n      /// 1. true: Constructs the name only from the TypeName.  Uses naming override, if one is set by user.\r\n      /// 2. false: Constructs the name as the traditional way from FamilyName:TypeName.  Name override will always take precedence.\r\n      /// </summary>\r\n      public bool UseTypeNameOnlyForIfcType\r\n      {\r\n         get;\r\n         set;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/NamingUtil.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing Autodesk.Revit;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing System.Text.RegularExpressions;\r\n\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides static methods for naming and string related operations.\r\n   /// </summary>\r\n   public class NamingUtil\r\n   {\r\n      private static IDictionary<string, Tuple<ElementId, int>> m_NameIncrNumberDict = new Dictionary<string, Tuple<ElementId, int>>();\r\n\r\n      public static void InitNameIncrNumberCache()\r\n      {\r\n         m_NameIncrNumberDict.Clear();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Removes spaces in a string.\r\n      /// </summary>\r\n      /// <param name=\"originalString\">The original string.</param>\r\n      /// <returns>The string without spaces.</returns>\r\n      public static string RemoveSpaces(string originalString)\r\n      {\r\n         return originalString.Replace(\" \", null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Removes underscores in a string.\r\n      /// </summary>\r\n      /// <param name=\"originalString\">The original string.</param>\r\n      /// <returns>The string without underscores.</returns>\r\n      public static string RemoveUnderscores(string originalString)\r\n      {\r\n         return originalString.Replace(\"_\", null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Removes spaces and underscores in a string.\r\n      /// </summary>\r\n      /// <param name=\"originalString\">The original string.</param>\r\n      /// <returns>The string without spaces or underscores.</returns>\r\n      public static string RemoveSpacesAndUnderscores(string originalString)\r\n      {\r\n         return originalString.Replace(\" \", null).Replace(\"_\", null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if two strings are equal ignoring case and spaces.\r\n      /// </summary>\r\n      /// <param name=\"string1\">The string to be compared.</param>\r\n      /// <param name=\"string2\">The other string to be compared.</param>\r\n      /// <returns>True if they are equal, false otherwise.</returns>\r\n      public static bool IsEqualIgnoringCaseAndSpaces(string string1, string string2)\r\n      {\r\n         if (string1 == null || string2 == null)\r\n            return (string1 == string2);\r\n\r\n         string nospace1 = RemoveSpaces(string1);\r\n         string nospace2 = RemoveSpaces(string2);\r\n         return (string.Compare(nospace1, nospace2, true) == 0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if two strings are equal ignoring case, spaces and underscores.\r\n      /// </summary>\r\n      /// <param name=\"string1\">The string to be compared.</param>\r\n      /// <param name=\"string2\">The other string to be compared.</param>\r\n      /// <returns>True if they are equal, false otherwise.</returns>\r\n      public static bool IsEqualIgnoringCaseSpacesAndUnderscores(string string1, string string2)\r\n      {\r\n         string nospaceOrUnderscore1 = RemoveSpacesAndUnderscores(string1);\r\n         string nospaceOrUnderscore2 = RemoveSpacesAndUnderscores(string2);\r\n         return (string.Compare(nospaceOrUnderscore1, nospaceOrUnderscore2, true) == 0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if a string is equal ignoring case, spaces and underscores to one of two possible strings.\r\n      /// </summary>\r\n      /// <param name=\"string1\">The string to be compared.</param>\r\n      /// <param name=\"string2a\">Option 1 to be compared.</param>\r\n      /// <param name=\"string2b\">Option 2 to be compared.</param>\r\n      /// <returns>True if string1 matches string2a or string2b, false otherwise.</returns>\r\n      public static bool IsEqualIgnoringCaseSpacesAndUnderscores(string string1, \r\n         string string2a, string string2b)\r\n      {\r\n         string nospaceOrUnderscore1 = RemoveSpacesAndUnderscores(string1);\r\n         string nospaceOrUnderscore2a = RemoveSpacesAndUnderscores(string2a);\r\n         if (string.Compare(nospaceOrUnderscore1, nospaceOrUnderscore2a, true) == 0)\r\n            return true;\r\n\r\n         string nospaceOrUnderscore2b = RemoveSpacesAndUnderscores(string2b);\r\n         return (string.Compare(nospaceOrUnderscore1, nospaceOrUnderscore2b, true) == 0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets override string value from element parameter.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"paramName\">The parameter name.</param>\r\n      /// <param name=\"originalValue\">The original value.</param>\r\n      /// <returns>The string contains the string value.</returns>\r\n      public static string GetOverrideStringValue(Element element, string paramName, string originalValue)\r\n      {\r\n         //string strValue;\r\n         string paramValue;\r\n\r\n         if (element != null)\r\n         {\r\n            if (ParameterUtil.GetStringValueFromElement(element, paramName, out paramValue) != null && !string.IsNullOrEmpty(paramValue))\r\n            {\r\n               string propertyValue = null;\r\n               object strValue = null;\r\n               ParamExprResolver.CheckForParameterExpr(paramValue, element, paramName, ParamExprResolver.ExpectedValueEnum.STRINGVALUE, out strValue);\r\n               if (strValue != null && strValue is string)\r\n                  propertyValue = strValue as string;\r\n               else\r\n                  propertyValue = paramValue;   // return the original paramValue\r\n\r\n               return propertyValue;\r\n            }\r\n         }\r\n\r\n         return originalValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the IFC name for a material layer, taking into account shared parameter overrides.\r\n      /// </summary>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <returns>The IFC name of the material.</returns>\r\n      public static string GetMaterialLayerName(Material material)\r\n      {\r\n         return GetOverrideStringValue(material, \"IfcMaterialLayer.Name\", GetMaterialName(material));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the category name for a material, taking into account shared parameter overrides.\r\n      /// </summary>\r\n      /// <param name=\"material\">The material.</param>\r\n      /// <returns>The category name of the material.</returns>\r\n      /// <remarks>This is a convenience function for Materials only.</remarks>\r\n      public static string GetMaterialCategoryName(Material material)\r\n      {\r\n         if (material == null)\r\n            return null;\r\n\r\n         return GetOverrideStringValue(material, \"IfcCategory\",\r\n            GetOverrideStringValue(material, \"Category\", material.MaterialCategory));\r\n      }\r\n      \r\n      /// <summary>\r\n       /// Gets the IFC name for a material, taking into account shared parameter overrides.\r\n       /// </summary>\r\n       /// <param name=\"material\">The material.</param>\r\n       /// <returns>The IFC name of the material.</returns>\r\n       /// <remarks>This is a convenience function for Materials only.</remarks>\r\n      public static string GetMaterialName(Material material)\r\n      {\r\n         if (material == null)\r\n            return null;\r\n\r\n         return GetNameOverride(material, material.Name);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the IFC name for a material by id, taking into account shared parameter overrides.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"materialId\">The id of the material.</param>\r\n      /// <returns>The IFC name of the material.</returns>\r\n      /// <remarks>This is a convenience function for Materials only.</remarks>\r\n      public static string GetMaterialName(Document doc, ElementId materialId)\r\n      {\r\n         Material material = doc.GetElement(materialId) as Material;\r\n         return GetMaterialName(material);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the IFC name for an element, taking into account shared parameter overrides.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"originalValue\">The default IFC name of the element, if not overriden.</param>\r\n      /// <returns>The IFC name of the element.</returns>\r\n      public static string GetNameOverride(Element element, string originalValue)\r\n      {\r\n         if (element == null)\r\n            return originalValue;\r\n\r\n         // CQ_TODO: Understand the naming here and possible use GetCleanName - have it as UI option?\r\n\r\n         string overrideValue = GetOverrideStringValue(element, \"IfcName\", originalValue);\r\n\r\n         // For backward compatibility where the old parameter name may still be use (NameOverride), handle it also if the above returns nothing\r\n         if (string.IsNullOrEmpty(overrideValue)\r\n            || (!string.IsNullOrEmpty(overrideValue) && overrideValue.Equals(originalValue)))\r\n         { \r\n            overrideValue = GetOverrideStringValue(element, \"NameOverride\", originalValue);\r\n         }\r\n\r\n         if (element is ElementType || element is FamilySymbol)\r\n         {\r\n            if (string.IsNullOrEmpty(overrideValue)\r\n               || (!string.IsNullOrEmpty(overrideValue) && overrideValue.Equals(originalValue)))\r\n         {\r\n            overrideValue = GetOverrideStringValue(element, \"IfcName[Type]\", originalValue);\r\n         }\r\n      }\r\n\r\n         // CQ_TODO: Understand the naming here and possible use GetCleanName - have it as UI option?\r\n         //overrideValue = GetCleanName(overrideValue);\r\n         //GetOverrideStringValue will return the override value from the parameter specified, otherwise it will return the originalValue\r\n         return overrideValue;\r\n      }\r\n      public static string GetNameOverride(IFCAnyHandle handle, Element element, string originalValue)\r\n      {\r\n         List<Exporter.PropertySet.AttributeEntry> entries = ExporterCacheManager.AttributeCache.GetEntry(handle, Exporter.PropertySet.PropertyType.Label, \"Name\");\r\n         if (entries != null)\r\n         {\r\n            foreach (Exporter.PropertySet.AttributeEntry entry in entries)\r\n            {\r\n               string result = entry.AsString(element);\r\n               if (result != null)\r\n                  return result;\r\n            }\r\n         }\r\n         return GetNameOverride(element, originalValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets override long name from element.\r\n      /// </summary>\r\n      /// <param name=\"element\">\r\n      /// The element.\r\n      /// </param>\r\n      /// <param name=\"originalValue\">\r\n      /// The original value.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The string contains the long name string value.\r\n      /// </returns>\r\n      public static string GetLongNameOverride(Element element, string originalValue)\r\n      {\r\n         string longNameOverride = \"IfcLongName\";\r\n         string overrideValue = GetOverrideStringValue(element, longNameOverride, originalValue);\r\n\r\n         // For backward compatibility where the old parameter name may still be use (LongNameOverride), handle it also if the above returns nothing\r\n         if (string.IsNullOrEmpty(overrideValue)\r\n            || (!string.IsNullOrEmpty(overrideValue) && overrideValue.Equals(originalValue)))\r\n         {\r\n            longNameOverride = \"LongNameOverride\";\r\n            overrideValue = GetOverrideStringValue(element, longNameOverride, originalValue);\r\n         }\r\n         //GetOverrideStringValue will return the override value from the parameter specified, otherwise it will return the originalValue\r\n         return overrideValue;\r\n      }\r\n      public static string GetLongNameOverride(IFCAnyHandle handle, Element element, string originalValue)\r\n      {\r\n         List<Exporter.PropertySet.AttributeEntry> entries = ExporterCacheManager.AttributeCache.GetEntry(handle, Exporter.PropertySet.PropertyType.Text, \"LongName\");\r\n         if (entries != null)\r\n         {\r\n            foreach (Exporter.PropertySet.AttributeEntry entry in entries)\r\n            {\r\n               string result = entry.AsString(element);\r\n               if (result != null)\r\n                  return result;\r\n            }\r\n         }\r\n         return GetLongNameOverride(element, originalValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets override description from element.\r\n      /// </summary>\r\n      /// <param name=\"element\">\r\n      /// The element.\r\n      /// </param>\r\n      /// <param name=\"originalValue\">\r\n      /// The original value.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The string contains the description string value.\r\n      /// </returns>\r\n      public static string GetDescriptionOverride(Element element, string originalValue)\r\n      {\r\n         string nameOverride = \"IfcDescription\";\r\n         string overrideValue = GetOverrideStringValue(element, nameOverride, originalValue);\r\n\r\n         // For backward compatibility where the old parameter name may still be use (DescriptionOverride), handle it also if the above returns nothing\r\n         if (string.IsNullOrEmpty(overrideValue)\r\n            || (!string.IsNullOrEmpty(overrideValue) && overrideValue.Equals(originalValue)))\r\n         {\r\n            overrideValue = GetOverrideStringValue(element, \"DescriptionOverride\", originalValue);\r\n         }\r\n\r\n         if (element is ElementType || element is FamilySymbol)\r\n         {\r\n            if (string.IsNullOrEmpty(overrideValue)\r\n               || (!string.IsNullOrEmpty(overrideValue) && overrideValue.Equals(originalValue)))\r\n            {\r\n               nameOverride = \"IfcDescription[Type]\";\r\n               overrideValue = GetOverrideStringValue(element, nameOverride, originalValue);\r\n            }\r\n         }\r\n         //GetOverrideStringValue will return the override value from the parameter specified, otherwise it will return the originalValue\r\n         return overrideValue;\r\n      }\r\n\r\n      public static string GetDescriptionOverride(IFCAnyHandle handle, Element element, string originalValue)\r\n      {\r\n         List<Exporter.PropertySet.AttributeEntry> entries = ExporterCacheManager.AttributeCache.GetEntry(handle, Exporter.PropertySet.PropertyType.Text, \"Description\");\r\n         if (entries != null)\r\n         {\r\n            foreach (Exporter.PropertySet.AttributeEntry entry in entries)\r\n            {\r\n               string result = entry.AsString(element);\r\n               if (result != null)\r\n                  return result;\r\n            }\r\n         }\r\n         return GetDescriptionOverride(element, originalValue);\r\n      }\r\n      /// <summary>\r\n      /// Gets override object type from element.\r\n      /// </summary>\r\n      /// <param name=\"element\">\r\n      /// The element.\r\n      /// </param>\r\n      /// <param name=\"originalValue\">\r\n      /// The original value.\r\n      /// </param>\r\n      /// <returns>The string contains the object type string value.</returns>\r\n      public static string GetObjectTypeOverride(Element element, string originalValue)\r\n      {\r\n         string objectTypeOverride = \"IfcObjectType\";\r\n         string overrideValue = GetOverrideStringValue(element, objectTypeOverride, null);\r\n\r\n         // For backward compatibility where the old parameter name may still be use (ObjectTypeOverride), handle it also if the above returns nothing\r\n         if (string.IsNullOrEmpty(overrideValue))\r\n         {\r\n            overrideValue = GetOverrideStringValue(element, \"ObjectTypeOverride\", null);\r\n         }\r\n\r\n         // The following is a special treatment for ObjectType. If IfcObjectType is not set, or carrying the original value, \r\n         //   check the existence of IfcObjectType[Type] parameter for the ElementType or the FamilySymbol. If it is set, the \r\n         //   ObjectType attribute will be overridden by that value, allowing ObjectType is set according to the Type setting \r\n         //   such as IfcExportType=\"USERDEFINED\" set in the Type which necessitates ObjectType in the instance to be set to\r\n         //   the appropriate value\r\n         Element typeOrSymbol = null;\r\n         if (string.IsNullOrEmpty(overrideValue))\r\n         {\r\n            typeOrSymbol = element.Document.GetElement(element.GetTypeId()) as ElementType;\r\n            if (typeOrSymbol == null)\r\n            {\r\n               FamilyInstance famInst = element as FamilyInstance;\r\n               if (famInst != null)\r\n                  typeOrSymbol = famInst.Symbol;\r\n            }\r\n\r\n            if (typeOrSymbol != null)\r\n            {\r\n               objectTypeOverride = \"IfcObjectType[Type]\";\r\n               overrideValue = GetOverrideStringValue(typeOrSymbol, objectTypeOverride, null);\r\n            }\r\n         }\r\n\r\n         if (string.IsNullOrEmpty(overrideValue))\r\n         {\r\n            Document document = element.Document;\r\n            ElementId categoryId = element?.Category?.Id ?? ElementId.InvalidElementId;\r\n            CustomSubCategoryId customSubCategoryId = \r\n               ExporterUtil.WallFunctionToCustomSubCategoryId((typeOrSymbol as WallType)?.Function);\r\n            ExportIFCCategoryInfo info = ExporterCacheManager.CategoryMappingTemplate.GetMappingInfoById(document, categoryId, customSubCategoryId);\r\n            if (string.Compare(info?.IFCPredefinedType ?? string.Empty, \"USERDEFINED\", true) == 0)\r\n            {\r\n               overrideValue = info.IFCUserDefinedType;\r\n            }\r\n         }\r\n\r\n         if (!string.IsNullOrEmpty(overrideValue))\r\n         {\r\n            return overrideValue;\r\n         }\r\n\r\n         return originalValue;\r\n      }\r\n\r\n      public static string GetDefaultObjectType(Element element)\r\n      {\r\n         string objectType = GetObjectTypeOverride(element, null);\r\n         if (!string.IsNullOrEmpty(objectType))\r\n         {\r\n            return objectType;\r\n         }\r\n\r\n         return GetFamilyAndTypeName(element);\r\n      }\r\n      \r\n      /// <summary>\r\n      /// Get ObjectType override\r\n      /// </summary>\r\n      /// <param name=\"handle\">the object Handle</param>\r\n      /// <param name=\"element\">the element</param>\r\n      /// <param name=\"originalValue\">the original value</param>\r\n      /// <returns>the override value or the original</returns>\r\n      public static string GetObjectTypeOverride(IFCAnyHandle handle, Element element, string originalValue)\r\n      {\r\n         List<Exporter.PropertySet.AttributeEntry> entries = ExporterCacheManager.AttributeCache.GetEntry(handle, Exporter.PropertySet.PropertyType.Label, \"ObjectType\");\r\n         if (entries != null)\r\n         {\r\n            foreach (Exporter.PropertySet.AttributeEntry entry in entries)\r\n            {\r\n               string result = entry.AsString(element);\r\n               if (result != null)\r\n                  return result;\r\n            }\r\n         }\r\n         return GetObjectTypeOverride(element, originalValue);\r\n      }\r\n      /// <summary>\r\n      /// Gets Tag override from element.\r\n      /// </summary>\r\n      /// <param name=\"element\">\r\n      /// The element.\r\n      /// </param>\r\n      /// <returns>The string contains the object type string value.</returns>\r\n      public static string GetTagOverride(Element element)\r\n      {\r\n         string originalValue = NamingUtil.CreateIFCElementId(element);\r\n\r\n         string nameOverride = \"IfcTag\";\r\n         string overrideValue = GetOverrideStringValue(element, nameOverride, originalValue);\r\n         if (string.IsNullOrEmpty(overrideValue)\r\n            || (!string.IsNullOrEmpty(overrideValue) && overrideValue.Equals(originalValue)))\r\n         {\r\n            overrideValue = GetOverrideStringValue(element, \"TagOverride\", originalValue);\r\n         }\r\n\r\n         if (element is ElementType || element is FamilySymbol)\r\n         {\r\n            if (string.IsNullOrEmpty(overrideValue)\r\n               || (!string.IsNullOrEmpty(overrideValue) && overrideValue.Equals(originalValue)))\r\n            {\r\n               nameOverride = \"IfcTag[Type]\";\r\n               overrideValue = GetOverrideStringValue(element, nameOverride, originalValue);\r\n            }\r\n         }\r\n\r\n         return overrideValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get ElementType attribute override\r\n      /// </summary>\r\n      /// <param name=\"element\">the element (should be the Type)</param>\r\n      /// <param name=\"originalValue\">the original value</param>\r\n      /// <returns>the string that contains the ElementType attribute value</returns>\r\n      private static string GetElementTypeOverrideBase(Element element, string baseParamName, string originalValue)\r\n      {\r\n         string nameOverride = baseParamName;\r\n         string overrideValue = GetOverrideStringValue(element, nameOverride, originalValue);\r\n         if (element is ElementType || element is FamilySymbol)\r\n         {\r\n            if (string.IsNullOrEmpty(overrideValue)\r\n               || (!string.IsNullOrEmpty(overrideValue) && overrideValue.Equals(originalValue)))\r\n            {\r\n               nameOverride = baseParamName + \"[Type]\";\r\n               overrideValue = GetOverrideStringValue(element, nameOverride, originalValue);\r\n            }\r\n         }\r\n         return overrideValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get ElementType attribute override\r\n      /// </summary>\r\n      /// <param name=\"element\">the element (should be the Type)</param>\r\n      /// <param name=\"originalValue\">the original value</param>\r\n      /// <returns>the string that contains the ElementType attribute value</returns>\r\n      public static string GetElementTypeOverride(Element element, string originalValue)\r\n      {\r\n         if (element == null)\r\n            return null;\r\n\r\n         string overrideValue = GetElementTypeOverrideBase(element, \"IfcElementType\", null);\r\n         if (!string.IsNullOrEmpty(overrideValue))\r\n         {\r\n            return overrideValue;\r\n         }\r\n         \r\n         return GetElementTypeOverrideBase(element, \"IfcObjectType\", originalValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Generates the IFC name for the current element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns> The string containing the name.</returns>\r\n      static private string GetIFCBaseName(Element element)\r\n      {\r\n         if (element == null)\r\n            return \"\";\r\n\r\n         bool isType = (element is ElementType);\r\n\r\n         string elementName = element.Name;\r\n         if (elementName == \"???\")\r\n            elementName = \"\";\r\n\r\n         string familyName = \"\";\r\n         ElementType elementType = (isType ? element : element.Document.GetElement(element.GetTypeId())) as ElementType;\r\n         if (elementType != null)\r\n         {\r\n            familyName = elementType.FamilyName;\r\n            if (familyName == \"???\")\r\n               familyName = \"\";\r\n         }\r\n\r\n         string fullName = familyName;\r\n         if (elementName != \"\")\r\n         {\r\n            // if it is a type and the name is set and the option is selected, use the name only\r\n            if (isType && ExporterCacheManager.ExportOptionsCache.NamingOptions.UseTypeNameOnlyForIfcType)\r\n               fullName = elementName;\r\n            else\r\n            {\r\n            if (fullName != \"\")\r\n               fullName = fullName + \":\" + elementName;\r\n            else\r\n               fullName = elementName;\r\n            }\r\n         }\r\n\r\n         if (isType)\r\n            return fullName;\r\n         if (fullName != \"\")\r\n            return fullName + \":\" + CreateIFCElementId(element);\r\n         return CreateIFCElementId(element);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Generates the IFC name based on the Revit display name.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns> The string containing the name.</returns>\r\n      static private string GetRevitDisplayName(Element element)\r\n      {\r\n         if (element == null)\r\n            return string.Empty;\r\n\r\n         string fullName = CategoryUtil.GetCategoryName(element);\r\n         string typeName = element.Name;\r\n         string familyName = string.Empty;\r\n\r\n         ElementType elementType = (element is ElementType) ?\r\n            (element as ElementType) :\r\n            element.Document.GetElement(element.GetTypeId()) as ElementType;\r\n\r\n         if (elementType != null)\r\n            familyName = elementType.FamilyName;\r\n\r\n         if (!string.IsNullOrEmpty(familyName))\r\n         {\r\n            if (!string.IsNullOrEmpty(fullName))\r\n               fullName = fullName + \" : \" + familyName;\r\n            else\r\n               fullName = familyName;\r\n         }\r\n\r\n         if (!string.IsNullOrEmpty(typeName))\r\n         {\r\n            if (!string.IsNullOrEmpty(fullName))\r\n               fullName = fullName + \" : \" + typeName;\r\n            else\r\n               fullName = typeName;\r\n         }\r\n\r\n         return fullName;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Special name format as required by COBie v2.4\r\n      /// </summary>\r\n      /// <param name=\"element\">the Element</param>\r\n      /// <returns>the name</returns>\r\n      static private string GetCOBieDesiredName(Element element)\r\n      {\r\n         if (element == null)\r\n            return \"\";\r\n\r\n         Parameter instanceMarkParam = element.get_Parameter(BuiltInParameter.ALL_MODEL_MARK);\r\n         // if NULL, try DOOR_NUMBER which also has the same parameter name \"Mark\"\r\n         if (instanceMarkParam == null)\r\n            instanceMarkParam = element.get_Parameter(BuiltInParameter.DOOR_NUMBER);\r\n\r\n         ElementType elementType = null;\r\n\r\n         if (element is ElementType)\r\n            elementType = element as ElementType;\r\n         else\r\n            elementType = element.Document.GetElement(element.GetTypeId()) as ElementType;\r\n\r\n         Parameter typeMarkParam = null;\r\n         if (elementType != null)\r\n         {\r\n            typeMarkParam = elementType.get_Parameter(BuiltInParameter.ALL_MODEL_TYPE_MARK);\r\n         }\r\n\r\n         string typeMarkValue = typeMarkParam?.AsString();\r\n         string instanceMarkValue = instanceMarkParam?.AsString();\r\n\r\n         string fullName = null;\r\n         if (string.IsNullOrWhiteSpace(typeMarkValue))\r\n            fullName = string.IsNullOrWhiteSpace(instanceMarkValue) ? \"\" : instanceMarkValue;\r\n         else if (string.IsNullOrWhiteSpace(instanceMarkValue))\r\n            fullName = typeMarkValue;\r\n         else\r\n            fullName = typeMarkValue + \"-\" + instanceMarkValue;\r\n\r\n         Tuple<ElementId, int> tupNameDupl;\r\n         if (!m_NameIncrNumberDict.TryGetValue(fullName, out tupNameDupl))\r\n            m_NameIncrNumberDict.Add(fullName, new Tuple<ElementId, int>(element.Id, 1));\r\n         else\r\n         {\r\n            // Found the same name used before, if not the same ElementId than the previously processed, add an incremental number to name\r\n            if (!element.Id.Equals(tupNameDupl.Item1))\r\n            {\r\n               Tuple<ElementId, int> tup = new Tuple<ElementId, int>(element.Id, tupNameDupl.Item2 + 1);\r\n               m_NameIncrNumberDict[fullName] = tup;\r\n               fullName = fullName + \" (\" + tup.Item2.ToString() + \")\";\r\n            }\r\n         }\r\n         return fullName;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the IFC name of an element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The name.</returns>\r\n      static public string GetIFCName(Element element)\r\n      {\r\n         if (element == null)\r\n            return \"\";\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3COBIE24DesignDeliverable)\r\n            return GetCOBieDesiredName(element);\r\n\r\n         if (ExporterCacheManager.ExportOptionsCache.NamingOptions.UseVisibleRevitNameAsEntityName)\r\n            return GetRevitDisplayName(element);\r\n\r\n         string baseName = GetIFCBaseName(element);\r\n         return GetNameOverride(element, baseName);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFC name for an element, with a suffix.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element./// </param>\r\n      /// <param name=\"index\">/// The index of the name. If it is larger than 0, it is appended to the name./// </param>\r\n      /// <returns>/// The string contains the name string value./// </returns>\r\n      public static string GetIFCNamePlusIndex(Element element, int index)\r\n      {\r\n         string elementName = GetIFCName(element);\r\n         return AddIFCNameIndex(elementName, index);\r\n      }\r\n\r\n      public static string AddIFCNameIndex(string elementName, int index)\r\n      {\r\n         if (index >= 0)\r\n         {\r\n            elementName += \":\";\r\n            elementName += index.ToString();\r\n         }\r\n\r\n         return elementName;\r\n      }\r\n\r\n      public static string GetFamilyName(ElementType elementType)\r\n      {\r\n         if (elementType == null)\r\n            return null;\r\n\r\n         string familyName = elementType?.FamilyName ?? string.Empty;\r\n\r\n         if (familyName == \"???\")\r\n         {\r\n            return null;\r\n         }\r\n\r\n         return familyName;\r\n      }\r\n\r\n      public static string GetFamilyAndTypeName(Element element)\r\n      {\r\n         if (element == null)\r\n            return null;\r\n\r\n         // This maintains the same behavior as the previous export.\r\n         FamilySymbol familySymbol = (element as FamilyInstance)?.Symbol;\r\n         if (familySymbol != null)\r\n            return familySymbol.Name;\r\n\r\n         ElementType elementType = (element as ElementType) ?? \r\n            (element.Document.GetElement(element.GetTypeId()) as ElementType);\r\n\r\n         string typeName = elementType?.Name ?? string.Empty;\r\n         string familyName = elementType?.FamilyName ?? string.Empty;\r\n         \r\n         // set famSym name.\r\n         if (familyName != string.Empty && familyName != \"???\")\r\n         {\r\n            if (typeName != string.Empty && typeName != \"???\")\r\n               return familyName + \":\" + typeName;\r\n\r\n            return familyName;\r\n         }\r\n\r\n         return typeName == \"???\" ? string.Empty : typeName;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFC object name from export state.\r\n      /// </summary>\r\n      /// <remarks>It is combined with family name and element type id.</remarks>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <returns>The name string value, or null if there is none.</returns>\r\n      public static string CreateIFCObjectName(ExporterIFC exporterIFC, Element element)\r\n      {\r\n         // This maintains the same behavior as the previous export.\r\n         FamilySymbol familySymbol = (element as FamilyInstance)?.Symbol;\r\n         if (familySymbol != null)\r\n            return familySymbol.Name;\r\n         \r\n         ElementId typeId = element?.GetTypeId() ?? ElementId.InvalidElementId;\r\n\r\n         string objectName = GetFamilyAndTypeName(element);\r\n         if (typeId != ElementId.InvalidElementId)\r\n         {\r\n            if (objectName == \"\")\r\n               return typeId.ToString();\r\n            else\r\n               return (objectName + \":\" + typeId.ToString());\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFC element id string from element id.\r\n      /// </summary>\r\n      /// <param name=\"element\">\r\n      /// The element.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The string contains the name string value.\r\n      /// </returns>\r\n      public static string CreateIFCElementId(Element element)\r\n      {\r\n         if (element == null)\r\n            return \"NULL\";\r\n\r\n         string elemIdString = element.Id.ToString();\r\n         return elemIdString;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Parses the name string and gets the parts separately.\r\n      /// </summary>\r\n      /// <param name=\"name\">\r\n      /// The name.\r\n      /// </param>\r\n      /// <param name=\"lastName\">\r\n      /// The output last name.\r\n      /// </param>\r\n      /// <param name=\"firstName\">\r\n      /// The output first name.\r\n      /// </param>\r\n      /// <param name=\"middleNames\">\r\n      /// The output middle names.\r\n      /// </param>\r\n      /// <param name=\"prefixTitles\">\r\n      /// The output prefix titles.\r\n      /// </param>\r\n      /// <param name=\"suffixTitles\">\r\n      /// The output suffix titles.\r\n      /// </param>\r\n      public static void ParseName(string name, out string lastName, out string firstName, out List<string> middleNames, out List<string> prefixTitles, out List<string> suffixTitles)\r\n      {\r\n         lastName = string.Empty;\r\n         firstName = string.Empty;\r\n         middleNames = null;\r\n         prefixTitles = null;\r\n         suffixTitles = null;\r\n\r\n         if (String.IsNullOrEmpty(name))\r\n            return;\r\n\r\n         string currName = name;\r\n         List<string> names = new List<string>();\r\n         int noEndlessLoop = 0;\r\n         int index = 0;\r\n         bool foundComma = false;\r\n\r\n         do\r\n         {\r\n            int currIndex = index;   // index might get reset by comma.\r\n\r\n            currName = currName.TrimStart(' ');\r\n            if (String.IsNullOrEmpty(currName))\r\n               break;\r\n\r\n            int comma = foundComma ? currName.Length : currName.IndexOf(',');\r\n            if (comma == -1) comma = currName.Length;\r\n            int space = currName.IndexOf(' ');\r\n            if (space == -1) space = currName.Length;\r\n\r\n            // treat comma as space, mark found.\r\n            if (comma < space)\r\n            {\r\n               foundComma = true;\r\n               index = 0; // start inserting at the beginning again.\r\n               space = comma;\r\n            }\r\n\r\n            if (space == currName.Length)\r\n            {\r\n               names.Add(currName);\r\n               break;\r\n            }\r\n            else if (space == 0)\r\n            {\r\n               if (comma == 0)\r\n                  continue;\r\n               else\r\n                  break;   // shouldn't happen\r\n            }\r\n\r\n            names.Insert(currIndex, currName.Substring(0, space));\r\n            index++;\r\n            currName = currName.Substring(space + 1);\r\n            noEndlessLoop++;\r\n\r\n         } while (noEndlessLoop < 100);\r\n\r\n\r\n         // parse names.\r\n         // assuming anything ending in a dot is a prefix.\r\n         int sz = names.Count;\r\n         for (index = 0; index < sz; index++)\r\n         {\r\n            if (names[index].LastIndexOf('.') == names[index].Length - 1)\r\n            {\r\n               if (prefixTitles == null)\r\n                  prefixTitles = new List<string>();\r\n               prefixTitles.Add(names[index]);\r\n            }\r\n            else\r\n               break;\r\n         }\r\n\r\n         if (index < sz)\r\n         {\r\n            firstName = names[index++];\r\n         }\r\n\r\n         // suffixes, if any.  Note this misses \"III\", \"IV\", etc., but this is not that important!\r\n         int lastIndex;\r\n         for (lastIndex = sz - 1; lastIndex >= index; lastIndex--)\r\n         {\r\n            if (names[lastIndex].LastIndexOf('.') == names[lastIndex].Length - 1)\r\n            {\r\n               if (suffixTitles == null)\r\n                  suffixTitles = new List<string>();\r\n               suffixTitles.Insert(0, names[lastIndex]);\r\n            }\r\n            else\r\n               break;\r\n         }\r\n\r\n         if (lastIndex >= index)\r\n         {\r\n            lastName = names[lastIndex--];\r\n         }\r\n\r\n         // rest are middle names.\r\n         for (; index <= lastIndex; index++)\r\n         {\r\n            if (middleNames == null)\r\n               middleNames = new List<string>();\r\n            middleNames.Add(names[index]);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get an IFC Profile Name from the FamilySymbol (the type) name, or from the override parameter of the type \"IfcProfileName[Type]\"\r\n      /// </summary>\r\n      /// <param name=\"element\">the element (Instance/FamilyInstance or Type/FamilySymbol)</param>\r\n      /// <returns>the profile name</returns>\r\n      public static string GetProfileName(Element element, string originalName = null)\r\n      {\r\n         FamilySymbol fSymb;\r\n         if (element is FamilyInstance)\r\n            fSymb = (element as FamilyInstance).Symbol;\r\n         else\r\n            fSymb = element as FamilySymbol;\r\n\r\n         if (fSymb == null)\r\n            return originalName;\r\n\r\n         // Get a profile name. It is by default set to the type (familySymbol) name, but can be overridden by IfcProfileName[Type] shared parameter\r\n         string profileName = fSymb.Name;\r\n         string profile;\r\n         ParameterUtil.GetStringValueFromElement(fSymb, \"IfcProfileName[Type]\", out profile);\r\n         if (!string.IsNullOrEmpty(profile))\r\n            profileName = profile;\r\n\r\n         if (string.IsNullOrEmpty(profileName))\r\n            return originalName;\r\n\r\n         return profileName;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get unique name by incrementing a number as suffix. It is looking for \"name + (number)\". It works like this:\r\n      /// - if the entry is \"name\" without number, it will return \"name (2)\"\r\n      /// - if the entry is \"name (number)\", it will return \"name (number + 1)\"\r\n      /// Only the last (number) will be evaluated in the case that there are multiple (number) in the string\r\n      /// </summary>\r\n      /// <param name=\"nameToCheck\">the name to check</param>\r\n      /// <returns>the name with incremented number appended</returns>\r\n      public static string GetUniqueNameByIncrement(string nameToCheck)\r\n      {\r\n         string uniqueName = nameToCheck;\r\n         string baseName = null;\r\n         string suffix = null;\r\n         string prefix = null;\r\n         int number = 1;\r\n\r\n         // Looking for pattern \"... name (number)\". If the last part is number in bracket, this number will be incremented\r\n         Regex rx = new Regex(@\"(?<basename>\\w+)\\s*[(]\\s*(?<number>\\d+)\\s*[)]\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\r\n         MatchCollection matches = rx.Matches(uniqueName);\r\n\r\n         // If found matches, increment the number and return \r\n         if (matches.Count > 0)\r\n         {\r\n            Match lastMatch = matches[matches.Count - 1];\r\n            GroupCollection groups = lastMatch.Groups;\r\n            baseName = groups[\"basename\"].Value;\r\n            number = int.Parse(groups[\"number\"].Value);\r\n\r\n            int index = lastMatch.Index;\r\n            int len = lastMatch.Length;\r\n\r\n            if (index > 1)\r\n            {\r\n               prefix = uniqueName.Substring(0, index - 1).Trim();\r\n               if (!string.IsNullOrEmpty(prefix))\r\n                  baseName = prefix + \" \" + baseName;\r\n            }\r\n\r\n            // It ends with word without number, it will be treated the same for the name without number\r\n            if (index + len < uniqueName.Length)\r\n            {\r\n               suffix = uniqueName.Substring(index + len).Trim();\r\n               if (!string.IsNullOrEmpty(suffix))\r\n                  uniqueName = uniqueName + \" (\" + (++number).ToString() + \")\";\r\n               else\r\n               {\r\n                  number = int.Parse(groups[\"number\"].Value);\r\n                  uniqueName = baseName + \" (\" + (++number).ToString() + \")\";\r\n               }\r\n            }\r\n            else\r\n            {\r\n               number = int.Parse(groups[\"number\"].Value);\r\n               uniqueName = baseName + \" (\" + (++number).ToString() + \")\";\r\n            }\r\n         }\r\n         else\r\n         {\r\n            // If no match, return the name plus the incremented number (starting from 2)\r\n            uniqueName = uniqueName + \" (\" + (++number).ToString() + \")\";\r\n         }\r\n\r\n         return uniqueName;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check unique name within the given Set. If the name is unique add the name and return it,\r\n      /// If it is not unique, it will call GetUniqueNameByIncrement() and check the new name for its existence in the Set, until it finds the unique name\r\n      /// </summary>\r\n      /// <param name=\"inputName\">the input name</param>\r\n      /// <param name=\"theNameSet\">the Set where the name should be search</param>\r\n      /// <returns>the unique name that is also added into the Set</returns>\r\n      public static string GetUniqueNameWithinSet(string inputName, HashSet<string> theNameSet)\r\n      {\r\n         string uniqueName = inputName;\r\n         if (!theNameSet.Contains(uniqueName))\r\n         {\r\n            theNameSet.Add(uniqueName);\r\n            return uniqueName;\r\n         }\r\n\r\n         while (true)\r\n         {\r\n            uniqueName = GetUniqueNameByIncrement(uniqueName);\r\n            if (!theNameSet.Contains(uniqueName))\r\n            {\r\n               theNameSet.Add(uniqueName);\r\n               break;\r\n            }\r\n         }\r\n\r\n         return uniqueName;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/OpeningUtil.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012-2016  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides static methods to create openings.\r\n   /// </summary>\r\n   class OpeningUtil\r\n   {\r\n      /// <summary>\r\n      /// Creates openings if there is necessary.\r\n      /// </summary>\r\n      /// <param name=\"elementHandle\">The element handle to create openings.</param>\r\n      /// <param name=\"element\">The element to create openings.</param>\r\n      /// <param name=\"partInfo\">The tepmporary part info.</param>\r\n      /// <param name=\"extrusionData\">The extrusion data.</param>\r\n      /// <param name=\"extraParams\">The extrusion creation data.</param>\r\n      /// <param name=\"offsetTransform\">The offset transform from ExportBody, or the identity transform.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"originalPlacement\">The original placement handle.</param>\r\n      /// <param name=\"setter\">The PlacementSetter.</param>\r\n      /// <param name=\"wrapper\">The ProductWrapper.</param>\r\n      private static void CreateOpeningsIfNecessaryBase(IFCAnyHandle elementHandle, Element element, TemporaryPartInfo partInfo, IList<IFCExtrusionData> extrusionData,\r\n         IFCExportBodyParams extraParams, Transform offsetTransform, ExporterIFC exporterIFC,\r\n         IFCAnyHandle originalPlacement, PlacementSetter setter, ProductWrapper wrapper)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(elementHandle))\r\n            return;\r\n\r\n         bool usePartInfo = false;\r\n         if (partInfo != null &&\r\n            ExporterCacheManager.TemporaryPartsCache.HasTemporaryParts(element.Id) &&\r\n            ExporterCacheManager.TemporaryPartsCache.GetPartExportType(element.Id) == ExporterUtil.ExportPartAs.Part)\r\n            usePartInfo = true;\r\n\r\n         if (extrusionData.Count == 0)\r\n            return;\r\n\r\n         using (TransformSetter transformSetter = TransformSetter.Create())\r\n         {\r\n            if (offsetTransform != null)\r\n            {\r\n               transformSetter.Initialize(exporterIFC, offsetTransform.Inverse);\r\n            }\r\n\r\n            IFCFile file = exporterIFC.GetFile();\r\n            ElementId categoryId = CategoryUtil.GetSafeCategoryId(element);\r\n            \r\n            string openingObjectType = \"Opening\";\r\n\r\n            int openingNumber = 1;\r\n            for (int curr = extrusionData.Count - 1; curr >= 0; curr--)\r\n            {\r\n               IFCAnyHandle extrusionHandle = \r\n                  ExtrusionExporter.CreateExtrudedSolidFromExtrusionData(exporterIFC, element,\r\n                  extrusionData[curr], out _);\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(extrusionHandle))\r\n                  continue;\r\n\r\n               // Openings shouldn't have surface styles for their geometry.\r\n               HashSet<IFCAnyHandle> bodyItems = new HashSet<IFCAnyHandle>() { extrusionHandle };\r\n\r\n               IFCAnyHandle contextOfItems = ExporterCacheManager.Get3DContextHandle(IFCRepresentationIdentifier.Body);\r\n               IFCAnyHandle representationHnd = RepresentationUtil.CreateSweptSolidRep(\r\n                  exporterIFC, element, categoryId, contextOfItems, bodyItems, null, null);\r\n\r\n               IList<IFCAnyHandle> representations = IFCAnyHandleUtil.IsNullOrHasNoValue(representationHnd) ?\r\n                  null : new List<IFCAnyHandle>() { representationHnd };\r\n\r\n               IFCAnyHandle openingRep = IFCInstanceExporter.CreateProductDefinitionShape(file, null,\r\n                  null, representations);\r\n\r\n               IFCAnyHandle openingPlacement = ExporterUtil.CopyLocalPlacement(file, originalPlacement);\r\n               string guid = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(IFCEntityType.IfcOpeningElement, openingNumber.ToString(), elementHandle));\r\n               IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n               string openingName = usePartInfo ?\r\n                  NamingUtil.AddIFCNameIndex(partInfo.IfcName, openingNumber++):\r\n                  NamingUtil.GetIFCNamePlusIndex(element, openingNumber++);\r\n               string openingDescription = usePartInfo ? null : NamingUtil.GetDescriptionOverride(element, null);\r\n               string openingTag = usePartInfo ? partInfo.IfcTag : NamingUtil.GetTagOverride(element);\r\n               \r\n               IFCAnyHandle openingElement = IFCInstanceExporter.CreateOpeningElement(exporterIFC, \r\n                  guid, ownerHistory, openingName, openingDescription, openingObjectType,\r\n                  openingPlacement, openingRep, openingTag);\r\n               IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcOpeningElement);\r\n               wrapper.AddElement(null, openingElement, setter, extraParams, true, exportInfo);\r\n               \r\n               if (ExporterCacheManager.ExportIFCBaseQuantities() && (extraParams != null))\r\n                  PropertyUtil.CreateOpeningQuantities(exporterIFC, openingElement, extraParams);\r\n\r\n               string voidGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n                  GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelVoidsElement, elementHandle, openingElement));\r\n               IFCInstanceExporter.CreateRelVoidsElement(file, voidGuid, ownerHistory, null, null, \r\n                  elementHandle, openingElement);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates openings associated with an extrusion, if there are any.\r\n      /// </summary>\r\n      /// <param name=\"elementHandle\">The element handle to create openings.</param>\r\n      /// <param name=\"element\">The element to create openings.</param>\r\n      /// <param name=\"extrusionData\">The extrusion data.</param>\r\n      /// <param name=\"offsetTransform\">The offset transform from ExportBody, or the identity transform.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"originalPlacement\">The original placement handle.</param>\r\n      /// <param name=\"setter\">The PlacementSetter.</param>\r\n      /// <param name=\"wrapper\">The ProductWrapper.</param>\r\n      public static void CreateOpeningsIfNecessary(IFCAnyHandle elementHandle, Element element, IList<IFCExtrusionData> extrusionData, \r\n        Transform offsetTransform, ExporterIFC exporterIFC, IFCAnyHandle originalPlacement, PlacementSetter setter, ProductWrapper wrapper)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(elementHandle))\r\n            return;\r\n\r\n         using (IFCExportBodyParams extraParams = new IFCExportBodyParams())\r\n         {\r\n            CreateOpeningsIfNecessaryBase(elementHandle, element, partInfo: null, extrusionData, extraParams, offsetTransform, exporterIFC, originalPlacement, setter, wrapper);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates openings associated with an extrusion, if there are any.\r\n      /// </summary>\r\n      /// <param name=\"elementHandle\">The element handle to create openings.</param>\r\n      /// <param name=\"element\">The element to create openings.</param>\r\n      /// <param name=\"extraParams\">The extrusion creation data.</param>\r\n      /// <param name=\"offsetTransform\">The offset transform from ExportBody, or the identity transform.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"originalPlacement\">The original placement handle.</param>\r\n      /// <param name=\"setter\">The PlacementSetter.</param>\r\n      /// <param name=\"wrapper\">The ProductWrapper.</param>\r\n      public static void CreateOpeningsIfNecessary(IFCAnyHandle elementHandle, Element element, IFCExportBodyParams extraParams,\r\n         Transform offsetTransform, ExporterIFC exporterIFC, IFCAnyHandle originalPlacement, PlacementSetter setter, ProductWrapper wrapper)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(elementHandle) || extraParams == null)\r\n            return;\r\n\r\n         IList<IFCExtrusionData> extrusionData = extraParams.GetOpenings();\r\n         CreateOpeningsIfNecessaryBase(elementHandle, element, partInfo: null, extrusionData, extraParams, offsetTransform, exporterIFC, originalPlacement, setter, wrapper);\r\n         extraParams.ClearOpenings();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates openings associated with an extrusion, if there are any.\r\n      /// </summary>\r\n      /// <param name=\"elementHandle\">The element handle to create openings.</param>\r\n      /// <param name=\"element\">The element to create openings.</param>\r\n      /// <param name=\"extraParams\">The extrusion creation data.</param>\r\n      /// <param name=\"offsetTransform\">The offset transform from ExportBody, or the identity transform.</param>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"originalPlacement\">The original placement handle.</param>\r\n      /// <param name=\"setter\">The PlacementSetter.</param>\r\n      /// <param name=\"wrapper\">The ProductWrapper.</param>\r\n      public static void CreateOpeningsIfNecessary(IFCAnyHandle elementHandle, Element element, TemporaryPartInfo partInfo, IFCExportBodyParams extraParams,\r\n         Transform offsetTransform, ExporterIFC exporterIFC, IFCAnyHandle originalPlacement, PlacementSetter setter, ProductWrapper wrapper)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(elementHandle) || extraParams == null)\r\n            return;\r\n\r\n         IList<IFCExtrusionData> extrusionData = extraParams.GetOpenings();\r\n         CreateOpeningsIfNecessaryBase(elementHandle, element, partInfo, extrusionData, extraParams, offsetTransform, exporterIFC, originalPlacement, setter, wrapper);\r\n         extraParams.ClearOpenings();\r\n      }\r\n\r\n      public static bool NeedToCreateOpenings(IFCAnyHandle elementHandle, IFCExportBodyParams extraParams)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(elementHandle))\r\n            return false;\r\n\r\n         if (extraParams == null)\r\n            return false;\r\n\r\n         IList<IFCExtrusionData> extrusionData = extraParams.GetOpenings();\r\n         return (extrusionData.Count > 0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds parent handle from opening CurveLoop and parent CurveLoops.\r\n      /// </summary>\r\n      /// <param name=\"elementHandles\">The parent handles.</param>\r\n      /// <param name=\"curveLoops\">The parent CurveLoops.</param>\r\n      /// <param name=\"openingLoop\">The opening CurveLoop.</param>\r\n      /// <returns>The parent handle.</returns>\r\n      private static IFCAnyHandle FindParentHandle(IList<IFCAnyHandle> elementHandles, \r\n         IList<CurveLoop> curveLoops, IList<IFCExtrusionData> extrusionDataList)\r\n      {\r\n         int numCurveLoops = curveLoops?.Count ?? 0;\r\n         if ((elementHandles.Count != numCurveLoops + 1) || (extrusionDataList.Count == 0))\r\n            return elementHandles[0];\r\n\r\n         CurveLoop openingLoop = extrusionDataList[0].GetLoops()[0];\r\n         // first one is roof handle, others are slabs\r\n         \r\n         for (int ii = 0; ii < numCurveLoops; ii++)\r\n         {\r\n            if (GeometryUtil.CurveLoopsInside(openingLoop, curveLoops[ii]) || GeometryUtil.CurveLoopsIntersect(openingLoop, curveLoops[ii]))\r\n            {\r\n               return elementHandles[ii + 1];\r\n            }\r\n         }\r\n\r\n         return elementHandles[0];\r\n      }\r\n\r\n      public static string CreateOpeningGUID(Element hostElem, Element openingElem, \r\n         IFCRange range, int openingIndex, int solidIndex)\r\n      {\r\n         // GUID_TODO: Range can be potentially unstable; getting the corresponding level would be\r\n         // better.\r\n         string openingId = (range != null) ? \r\n            \"(\" + range.Start.ToString() + \":\" + range.End.ToString() + \")\" : \r\n            string.Empty;\r\n         openingId += \"Opening:\" + openingIndex.ToString() + \"Solid:\" + solidIndex.ToString();\r\n         return GUIDUtil.GenerateIFCGuidFrom(\r\n            GUIDUtil.CreateGUIDString(openingId, hostElem, openingElem));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds openings to an element.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"elementHandles\">The parent handles.</param>\r\n      /// <param name=\"curveLoops\">The parent CurveLoops.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"lcs\">The local coordinate system.</param>\r\n      /// <param name=\"scaledWidth\">The width.</param>\r\n      /// <param name=\"range\">The range.</param>\r\n      /// <param name=\"setter\">The placement setter.</param>\r\n      /// <param name=\"localPlacement\">The local placement.</param>\r\n      /// <param name=\"localWrapper\">The wrapper.</param>\r\n      public static int AddOpeningsToElement(ExporterIFC exporterIFC, IList<IFCAnyHandle> elementHandles,\r\n         IList<CurveLoop> curveLoops, Element element, Transform lcs, double scaledWidth,\r\n         IFCRange range, PlacementSetter setter, IFCAnyHandle localPlacement, ProductWrapper localWrapper)\r\n      {\r\n      \tint createdOpeningCount = 0;\r\n         if (lcs == null && ((curveLoops?.Count ?? 0) > 0))\r\n         {\r\n            // assumption: first curve loop defines the plane.\r\n            Plane hostObjPlane = curveLoops[0].HasPlane() ? curveLoops[0].GetPlane(): null;\r\n\r\n            if (hostObjPlane != null)\r\n               lcs = GeometryUtil.CreateTransformFromPlane(hostObjPlane);\r\n         }\r\n\r\n         IList<IFCOpeningData> openingDataList = ExporterIFCUtils.GetOpeningData(exporterIFC,\r\n            element, lcs, range);\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         int openingIndex = 0;\r\n         foreach (IFCOpeningData openingData in openingDataList)\r\n         {\r\n            openingIndex++;\r\n\r\n            Element openingElem = element.Document.GetElement(openingData.OpeningElementId);\r\n            openingElem ??= element;\r\n\r\n            bool currentWallIsHost = false;\r\n            FamilyInstance openingFInst = openingElem as FamilyInstance;\r\n            if (openingFInst != null && openingFInst.Host != null)\r\n            {\r\n               if (openingFInst.Host.Id == element.Id)\r\n                  currentWallIsHost = true;\r\n            }\r\n\r\n            // Don't export the opening if WallSweep category has been turned off.\r\n            // This is currently restricted to WallSweeps because the element responsible for the opening could be a variety of things, \r\n            // including a line as part of the elevation profile of the wall.\r\n            // As such, we will restrict which element types we check for CanExportElement.\r\n            if ((openingElem is WallSweep) &&\r\n               (!ElementFilteringUtil.CanExportElement(openingElem, true)))\r\n               continue;\r\n\r\n            IList<IFCExtrusionData> extrusionDataList = openingData.GetExtrusionData();\r\n            IFCAnyHandle parentHandle = FindParentHandle(elementHandles, curveLoops, extrusionDataList);\r\n\r\n            string predefinedType;\r\n            IFCExportInfoPair exportType = ExporterUtil.GetProductExportType(openingElem, out predefinedType);\r\n            bool exportingDoorOrWindow = (exportType.ExportInstance == IFCEntityType.IfcDoor ||\r\n               exportType.ExportType == IFCEntityType.IfcDoorType ||\r\n               exportType.ExportInstance == IFCEntityType.IfcWindow ||\r\n               exportType.ExportType == IFCEntityType.IfcWindowType);\r\n\r\n            bool isDoorOrWindowOpening = IsDoorOrWindowOpening(openingElem, element, \r\n               exportingDoorOrWindow);\r\n            \r\n            if (isDoorOrWindowOpening && currentWallIsHost)\r\n            {\r\n               DoorWindowDelayedOpeningCreator delayedCreator =\r\n                   DoorWindowDelayedOpeningCreator.Create(exporterIFC, openingData, scaledWidth,\r\n                   element.Id, parentHandle, setter.LevelId);\r\n               if (delayedCreator != null)\r\n               {\r\n                  ExporterCacheManager.DoorWindowDelayedOpeningCreatorCache.Add(delayedCreator, true);\r\n                  continue;\r\n               }\r\n            }\r\n\r\n            IList<Solid> solids = openingData.GetOpeningSolids();\r\n            int solidIndex = 0;\r\n            bool registerOpening = openingElem is Opening;\r\n            foreach (Solid solid in solids)\r\n            {\r\n               solidIndex++;\r\n\r\n               using (IFCExportBodyParams extrusionCreationData = new IFCExportBodyParams())\r\n               {\r\n                  extrusionCreationData.SetLocalPlacement(ExporterUtil.CreateLocalPlacement(file, localPlacement, null));\r\n                  extrusionCreationData.ReuseLocalPlacement = true;\r\n\r\n                  string openingGUID = CreateOpeningGUID(element, openingElem, range, \r\n                     openingIndex, solidIndex);\r\n                  \r\n                  CreateOpening(exporterIFC, parentHandle, element, openingElem, openingGUID, solid, scaledWidth, openingData.IsRecess, extrusionCreationData,\r\n                      setter, localWrapper, range, openingIndex, solidIndex, registerOpening);\r\n                  createdOpeningCount++;\r\n               }\r\n            }\r\n\r\n            foreach (IFCExtrusionData extrusionData in extrusionDataList)\r\n            {\r\n               solidIndex++;\r\n\r\n               if (extrusionData.ScaledExtrusionLength < MathUtil.Eps())\r\n                  extrusionData.ScaledExtrusionLength = scaledWidth;\r\n\r\n               string openingGUID = CreateOpeningGUID(element, openingElem, range, \r\n                  openingIndex, solidIndex);\r\n                  \r\n               if (CreateOpening(exporterIFC, parentHandle, localPlacement, element, openingElem, openingGUID, extrusionData, lcs, openingData.IsRecess,\r\n                   setter, localWrapper, range, openingIndex, solidIndex, registerOpening) != null)\r\n                  createdOpeningCount++;\r\n            }\r\n         }\r\n         return createdOpeningCount;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds openings to an element.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"elementHandle\">The parent handle.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"lcs\">The local coordinate system.</param>\r\n      /// <param name=\"scaledWidth\">The width.</param>\r\n      /// <param name=\"range\">The range.</param>\r\n      /// <param name=\"setter\">The placement setter.</param>\r\n      /// <param name=\"localPlacement\">The local placement.</param>\r\n      /// <param name=\"localWrapper\">The wrapper.</param>\r\n      public static int AddOpeningsToElement(ExporterIFC exporterIFC, IFCAnyHandle elementHandle, Element element, Transform lcs, double scaledWidth,\r\n          IFCRange range, PlacementSetter setter, IFCAnyHandle localPlacement, ProductWrapper localWrapper)\r\n      {\r\n         IList<IFCAnyHandle> elementHandles = new List<IFCAnyHandle>();\r\n         elementHandles.Add(elementHandle);\r\n         return AddOpeningsToElement(exporterIFC, elementHandles, null, element, lcs, scaledWidth, range, setter, localPlacement, localWrapper);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an opening from a solid.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"hostObjHnd\">The host object handle.</param>\r\n      /// <param name=\"hostElement\">The host element.</param>\r\n      /// <param name=\"insertElement\">The insert element.</param>\r\n      /// <param name=\"openingGUID\">The GUID for the opening, depending on how the opening is created.</param>\r\n      /// <param name=\"solid\">The solid.</param>\r\n      /// <param name=\"scaledHostWidth\">The scaled host width.</param>\r\n      /// <param name=\"isRecess\">True if it is recess.</param>\r\n      /// <param name=\"extrusionCreationData\">The extrusion creation data.</param>\r\n      /// <param name=\"setter\">The placement setter.</param>\r\n      /// <param name=\"localWrapper\">The product wrapper.</param>\r\n      /// <returns>The created opening handle.</returns>\r\n      static public IFCAnyHandle CreateOpening(ExporterIFC exporterIFC, IFCAnyHandle hostObjHnd, Element hostElement, Element insertElement, string openingGUID,\r\n          Solid solid, double scaledHostWidth, bool isRecess, IFCExportBodyParams extrusionCreationData, PlacementSetter setter, ProductWrapper localWrapper, \r\n          IFCRange range, int openingIndex, int solidIndex, bool registerAsOpening = true)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         ElementId catId = CategoryUtil.GetSafeCategoryId(insertElement);\r\n\r\n         XYZ prepToWall, wallAxis;\r\n         bool isLinearWall = GetOpeningDirections(hostElement, out prepToWall, out wallAxis);\r\n         if (isLinearWall)\r\n         {\r\n            extrusionCreationData.CustomAxis = prepToWall;\r\n            extrusionCreationData.PossibleExtrusionAxes = IFCExtrusionAxes.TryCustom;\r\n            extrusionCreationData.PreferredWidthDirection = wallAxis;\r\n         }\r\n\r\n         BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(true, ExportOptionsCache.ExportTessellationLevel.ExtraLow);\r\n         bodyExporterOptions.CreatingVoid = true;\r\n         BodyData bodyData = BodyExporter.ExportBody(exporterIFC, insertElement, catId, ElementId.InvalidElementId,\r\n             solid, bodyExporterOptions, extrusionCreationData);\r\n\r\n         IFCAnyHandle openingRepHnd = bodyData.RepresentationHnd;\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(openingRepHnd))\r\n         {\r\n            extrusionCreationData.ClearOpenings();\r\n            return null;\r\n         }\r\n         IList<IFCAnyHandle> representations = new List<IFCAnyHandle>();\r\n         representations.Add(openingRepHnd);\r\n         IFCAnyHandle prodRep = IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, representations);\r\n\r\n         IFCAnyHandle openingPlacement = extrusionCreationData.GetLocalPlacement();\r\n         IFCAnyHandle hostObjPlacementHnd = IFCAnyHandleUtil.GetObjectPlacement(hostObjHnd);\r\n         Transform relTransform = ExporterUtil.GetRelativePlacementOffsetTransform(exporterIFC, openingPlacement, hostObjPlacementHnd);\r\n\r\n         openingPlacement = ExporterUtil.CreateLocalPlacement(file, hostObjPlacementHnd,\r\n             relTransform.Origin, relTransform.BasisZ, relTransform.BasisX);\r\n\r\n         IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n         double scaledOpeningLength = extrusionCreationData.ScaledLength;\r\n         string openingObjectType;\r\n         if (!MathUtil.IsAlmostZero(scaledHostWidth) && !MathUtil.IsAlmostZero(scaledOpeningLength))\r\n            openingObjectType = scaledOpeningLength < (scaledHostWidth - MathUtil.Eps()) ? \"Recess\" : \"Opening\";\r\n         else\r\n            openingObjectType = isRecess ? \"Recess\" : \"Opening\";\r\n\r\n         string openingName = NamingUtil.GetNameOverride(insertElement, null);\r\n         if (string.IsNullOrEmpty(openingName))\r\n         {\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(hostObjHnd))\r\n               openingName = IFCAnyHandleUtil.GetStringAttribute(hostObjHnd, \"Name\");\r\n            else\r\n               openingName = NamingUtil.GetNameOverride(hostElement, NamingUtil.CreateIFCObjectName(exporterIFC, hostElement));\r\n         }\r\n\r\n         string openingDescription = NamingUtil.GetDescriptionOverride(insertElement, null);\r\n         string openingTag = NamingUtil.GetTagOverride(insertElement);\r\n         IFCAnyHandle openingHnd = IFCInstanceExporter.CreateOpeningElement(exporterIFC, \r\n            openingGUID, ownerHistory, openingName, openingDescription, openingObjectType,\r\n            openingPlacement, prodRep, openingTag);\r\n         IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcOpeningElement, openingObjectType);\r\n         if (ExporterCacheManager.ExportIFCBaseQuantities())\r\n            PropertyUtil.CreateOpeningQuantities(exporterIFC, openingHnd, extrusionCreationData);\r\n\r\n         if (localWrapper != null)\r\n         {\r\n            Element elementForProperties = GUIDUtil.IsGUIDFor(hostElement, insertElement, range, openingIndex, solidIndex, openingGUID) ?\r\n               insertElement : null;\r\n            if (elementForProperties != null)\r\n               registerAsOpening = true;\r\n            localWrapper.AddElement(elementForProperties, openingHnd, setter, extrusionCreationData,\r\n               false, exportInfo, registerAsOpening);\r\n         }\r\n\r\n         string voidGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n            GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelVoidsElement, hostObjHnd, openingHnd));\r\n         IFCInstanceExporter.CreateRelVoidsElement(file, voidGuid, ownerHistory, null, null, \r\n            hostObjHnd, openingHnd);\r\n         return openingHnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an opening from extrusion data.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"hostObjHnd\">The host handle.</param>\r\n      /// <param name=\"hostPlacement\">The host placement.</param>\r\n      /// <param name=\"hostElement\">The host element.</param>\r\n      /// <param name=\"insertElement\">The opening element.</param>\r\n      /// <param name=\"openingGUID\">The opening GUID.</param>\r\n      /// <param name=\"extrusionData\">The extrusion data.</param>\r\n      /// <param name=\"lcs\">The local coordinate system of the base of the extrusion.</param>\r\n      /// <param name=\"isRecess\">True if it is a recess.</param>\r\n      /// <returns>The opening handle.</returns>\r\n      static public IFCAnyHandle CreateOpening(ExporterIFC exporterIFC, IFCAnyHandle hostObjHnd, IFCAnyHandle hostPlacement, Element hostElement,\r\n          Element insertElement, string openingGUID, IFCExtrusionData extrusionData, Transform lcs, bool isRecess,\r\n          PlacementSetter setter, ProductWrapper localWrapper, IFCRange range, int openingIndex, int solidIndex, bool registerAsOpening = true)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         IList<CurveLoop> curveLoops = extrusionData.GetLoops();\r\n\r\n         if (curveLoops.Count == 0)\r\n            return null;\r\n\r\n         if (lcs == null)\r\n         {\r\n            // assumption: first curve loop defines the plane.\r\n            if (!curveLoops[0].HasPlane())\r\n               return null;\r\n            lcs = GeometryUtil.CreateTransformFromPlane(curveLoops[0].GetPlane());\r\n         }\r\n\r\n         Transform transformToUse = lcs;\r\n         if (extrusionData.ScaledExtrusionLength < MathUtil.Eps())\r\n         {\r\n            double extrusionLength = 0.0;\r\n            if (hostElement is Floor || hostElement is RoofBase || hostElement is Ceiling)\r\n               extrusionLength = CalculateOpeningExtrusionInFloorRoofOrCeiling(hostElement, extrusionData, transformToUse);\r\n\r\n            if (extrusionLength < MathUtil.Eps())\r\n               return null;\r\n\r\n            extrusionData.ScaledExtrusionLength = UnitUtil.ScaleLength(extrusionLength);\r\n         }\r\n\r\n         ElementId catId = CategoryUtil.GetSafeCategoryId(insertElement);\r\n         IFCAnyHandle openingHnd = null;\r\n         IFCAnyHandle openingProdRepHnd = RepresentationUtil.CreateExtrudedProductDefShape(exporterIFC, insertElement, catId,\r\n             curveLoops, transformToUse, extrusionData.ExtrusionDirection, extrusionData.ScaledExtrusionLength);\r\n\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(openingProdRepHnd))\r\n         {\r\n            string openingObjectType = isRecess ? \"Recess\" : \"Opening\";\r\n            IFCAnyHandle ownerHistory = ExporterCacheManager.OwnerHistoryHandle;\r\n            string openingName = NamingUtil.GetNameOverride(insertElement, null);\r\n            if (string.IsNullOrEmpty(openingName))\r\n               openingName = NamingUtil.GetNameOverride(hostElement, NamingUtil.CreateIFCObjectName(exporterIFC, hostElement));\r\n            string openingDescription = NamingUtil.GetDescriptionOverride(insertElement, null);\r\n            string openingTag = NamingUtil.GetTagOverride(insertElement);\r\n            openingHnd = IFCInstanceExporter.CreateOpeningElement(exporterIFC,\r\n               openingGUID, ownerHistory, openingName, openingDescription, openingObjectType,\r\n               ExporterUtil.CreateLocalPlacement(file, hostPlacement, null), openingProdRepHnd, openingTag);\r\n            IFCExportInfoPair exportInfo = new IFCExportInfoPair(IFCEntityType.IfcOpeningElement, openingObjectType);\r\n            IFCExportBodyParams ecData = null;\r\n            if (ExporterCacheManager.ExportIFCBaseQuantities())\r\n            {\r\n               double height, width;\r\n               ecData = new IFCExportBodyParams();\r\n               if (GeometryUtil.ComputeHeightWidthOfCurveLoop(curveLoops[0], lcs, out height, out width))\r\n               {\r\n                  ecData.ScaledHeight = UnitUtil.ScaleLength(height);\r\n                  ecData.ScaledWidth = UnitUtil.ScaleLength(width);\r\n               }\r\n               else\r\n               {\r\n                  double area = ExporterIFCUtils.ComputeAreaOfCurveLoops(curveLoops);\r\n                  ecData.ScaledArea = UnitUtil.ScaleArea(area);\r\n               }\r\n               PropertyUtil.CreateOpeningQuantities(exporterIFC, openingHnd, ecData);\r\n            }\r\n\r\n            if (localWrapper != null)\r\n            {\r\n               Element elementForProperties = null;\r\n               if (GUIDUtil.IsGUIDFor(hostElement, insertElement, range, openingIndex, solidIndex, openingGUID))\r\n               {\r\n                  elementForProperties = insertElement;\r\n                  registerAsOpening = true;\r\n               }\r\n               localWrapper.AddElement(elementForProperties, openingHnd, setter, ecData, false, exportInfo, registerAsOpening);\r\n            }\r\n\r\n            string voidGuid = GUIDUtil.GenerateIFCGuidFrom(\r\n               GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelVoidsElement, hostObjHnd, openingHnd));\r\n            IFCInstanceExporter.CreateRelVoidsElement(file, voidGuid, ownerHistory, null, null,\r\n               hostObjHnd, openingHnd);\r\n         }\r\n         return openingHnd;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if it is a door or window opening for a wall.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"openingElem\">The opening element.</param>\r\n      /// <param name=\"hostElement\">The host element.</param>\r\n      /// <returns>True if it is a door or window opening for a wall.</returns>\r\n      public static bool IsDoorOrWindowOpening(Element openingElem, \r\n         Element hostElement, bool exportDoorWindowOpening)\r\n      {\r\n         if (!exportDoorWindowOpening)\r\n            return false;\r\n\r\n         if (!(hostElement is Wall))\r\n            return false;\r\n\r\n         ElementId insertHostId = (openingElem as FamilyInstance)?.Host?.Id ?? ElementId.InvalidElementId;\r\n         return insertHostId == hostElement.Id;\r\n      }\r\n\r\n      public static bool GetOpeningDirections(Element hostElem, out XYZ perpToWall, out XYZ wallAxis)\r\n      {\r\n         bool isLinearWall = false;\r\n         perpToWall = new XYZ(0, 0, 0);\r\n         wallAxis = new XYZ(0, 0, 0);\r\n         Wall wall = hostElem as Wall;\r\n         if (wall != null)\r\n         {\r\n            Curve curve = WallExporter.GetWallAxis(wall);\r\n            if (curve is Line)\r\n            {\r\n               isLinearWall = true;\r\n               wallAxis = (curve as Line).Direction;\r\n               perpToWall = XYZ.BasisZ.CrossProduct(wallAxis);\r\n            }\r\n         }\r\n\r\n         return isLinearWall;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates extrusion length for openings in floor roof or ceiling based on the element thickness for not sloped elements, \r\n      /// and based on bounding box for sloped. Also defines the extrusion direction for sloped elements.\r\n      /// </summary>\r\n      /// <param name=\"hostElement\">The host element.</param>\r\n      /// <param name=\"extrusionData\">The opening extrusion data</param>\r\n      /// <param name=\"lcs\">The local coordinate system of the base of the extrusion for updating if the extrusion length based on bounding box.</param>\r\n      /// <returns>The extrusion length</returns>\r\n      private static double CalculateOpeningExtrusionInFloorRoofOrCeiling(Element hostElement, IFCExtrusionData extrusionData, Transform lcs)\r\n      {\r\n         double extrusionLength = 0.0;\r\n         //Use the element thickness for not sloped elements, if the host element is sloped, the extrusions of the resulting opening will not intersect the host element.  \r\n         //To handle such cases using bounding box height instead of thickness.\r\n         //\r\n         double slopeValue = 0.0;\r\n         Parameter slopeParam = ParameterUtil.GetDoubleValueFromElement(hostElement, BuiltInParameter.ROOF_SLOPE, out slopeValue);\r\n         if (slopeParam != null && MathUtil.IsAlmostZero(slopeValue))\r\n         {\r\n            if (hostElement is Floor)\r\n               ParameterUtil.GetDoubleValueFromElement(hostElement, BuiltInParameter.FLOOR_ATTR_THICKNESS_PARAM, out extrusionLength);\r\n            else if (hostElement is RoofBase)\r\n               ParameterUtil.GetDoubleValueFromElement(hostElement, BuiltInParameter.ROOF_ATTR_THICKNESS_PARAM, out extrusionLength);\r\n            else if (hostElement is Ceiling)\r\n               ParameterUtil.GetDoubleValueFromElement(hostElement, BuiltInParameter.CEILING_THICKNESS, out extrusionLength);\r\n         }\r\n         else\r\n         {\r\n            View view = ExporterUtil.GetViewForElementGeometry(hostElement);\r\n            BoundingBoxXYZ hostElementBoundingBox = hostElement.get_BoundingBox(view);\r\n            extrusionLength = hostElementBoundingBox.Max.Z - hostElementBoundingBox.Min.Z;\r\n\r\n            //Need to recheck the ExtrusionDirection.\r\n            //If slope is positive value the host it will be above.\r\n            //\r\n            extrusionData.ExtrusionDirection = (slopeValue > 0) ? XYZ.BasisZ : -XYZ.BasisZ;\r\n\r\n            // Need to change extrusion plane Z coordinate to bounding box Z if the element is sloped\r\n            // because opening should cut bounding box completely.\r\n            double extrusionOriginZ = (slopeValue > 0) ? hostElementBoundingBox.Min.Z : hostElementBoundingBox.Max.Z;\r\n            lcs.Origin = new XYZ(lcs.Origin.X, lcs.Origin.Y, extrusionOriginZ);\r\n         }\r\n\r\n         return extrusionLength;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ParamExprErrorListener.cs",
    "content": "﻿//\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\n// Copyright (C) 2017  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Antlr4.Runtime;\n\nnamespace Revit.IFC.Export.Utility\n{\n   public class ParamExprErrorListener : BaseErrorListener\n   {\n      /// <summary>\n      /// Checking for syntax error\n      /// </summary>\n      /// <param name=\"recognizer\">recognizer</param>\n      /// <param name=\"offendingSymbol\">offending symbol</param>\n      /// <param name=\"line\">line number of the statement</param>\n      /// <param name=\"charPositionInLine\">position within the line</param>\n      /// <param name=\"msg\">message</param>\n      /// <param name=\"e\">recognizer exception</param>\n      public override void SyntaxError(IRecognizer recognizer, IToken offendingSymbol, int line, int charPositionInLine, string msg, RecognitionException e)\n      {\n         string stackList = null;\n         IList<string> stack = ((Parser)recognizer).GetRuleInvocationStack();\n         stack.Reverse();\n         for (int i = 0; i < stack.Count(); i++)\n         {\n            if (i == 0) stackList = \"[\";\n            stackList = stackList + \" \" + stack[i];\n         }\n         stackList = stackList + \"]\";\n         ParamExprLogger.writeLog(\"\\t\\t-> rule stack: \" + stackList + \"\\n\");\n         ParamExprLogger.writeLog(\"\\t\\t-> line \" + line + \":\" + charPositionInLine + \" at \" + offendingSymbol + \": \" + msg + \"\\n\");\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ParamExprGrammar.g4",
    "content": "/*\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2017  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n*/\r\n\r\n/*\r\n// ANTLR 4 License\r\n// [The BSD License]\r\n// Copyright (c) 2012 Terence Parr and Sam Harwell\r\n// All rights reserved.\r\n// Redistribution and use in source and binary forms, with or without modification, \r\n// are permitted provided that the following conditions are met:\r\n// \r\n// Redistributions of source code must retain the above copyright notice, this list of conditions \r\n// and the following disclaimer.\r\n// Redistributions in binary form must reproduce the above copyright notice, this list of \r\n// conditions and the following disclaimer in the documentation and/or other materials provided \r\n// with the distribution.\r\n// Neither the name of the author nor the names of its contributors may be used to endorse or \r\n// promote products derived from this software without specific prior written permission.\r\n// \r\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS \r\n// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY \r\n// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR \r\n// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR \r\n// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR \r\n// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR \r\n// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \r\n// POSSIBILITY OF SUCH DAMAGE.\r\n*/\r\n\r\ngrammar ParamExprGrammar;\r\n\r\n@header {\r\n   #pragma warning disable 3021\r\n}\r\n\r\n@lexer::members\r\n{\r\n// NOTE: If WHITESPACE is changed from 1, please also change the following line below:\r\n// WS:\t\t\t\t[ \\t\\n\\r]+ -> channel(1) ;\r\n// This is hardwired to 1 (instead of WHITESPACE) to avoid a compiler warning.\r\n   public const int WHITESPACE = 1;\r\n}\r\n\r\n/*\r\n * Parser Rules\r\n */\r\nparam_expr:       '{' expr '}' | '[Uu]' '{' expr '}';\r\nexpr:               value\r\n                  | atomic_param\r\n                  | unary_operator expr\r\n                  | expr ops expr\r\n                  | '(' expr ')' (power_op)?\r\n                  ;\r\natomic_param:     objref param_name ('.' param_name)          // Support only 1 level nested reference, no need for overly complex reference\r\n                  | special_param;\r\nobjref:           THIS | TYPE ;\r\ntype:             TYPE;\r\nspecial_param:    ELEMENTID\r\n                  | RUNNINGNUMBER \r\n                  | RUNNINGNUMBERINSTANCE ;\r\n//                  | AUTOCALCULATE ;\r\nparam_name:       name | type name;\r\n//name:             '(' (ESC | NAMEWITHSPECIALCHAR)+ ')' ;\r\nname:             '(' STRING ')' ;\r\nunary_operator:   '+' | '-' ;\r\nops:              MULTIPLY | DIVIDE | ADDITION | SUBTRACT ;\r\npower_op:         '^' ( '-' | '+' )? INT;\r\nvalue:              realliteral | stringliteral | value_with_unit;\r\nvalue_with_unit:  UNITTYPE '(' atomic_param ')' | UNITTYPE '(' signed_number ')';\r\nstringliteral:\t\tSTRING ;\r\nrealliteral:\t\tsigned_number;\r\nsigned_number:\t   ( '+' | '-' )? NUMBER ;\r\n\r\n/*\r\n * Lexer rules\r\n*/\r\nTHIS:               '$'[Tt][Hh][Ii][Ss];\r\nTYPE:               '$'[Tt][Yy][Pp][Ee];\r\nELEMENTID:          '$'[Ee][Ll][Ee][Mm][Ee][Nn][Tt][Ii][Dd];\r\nRUNNINGNUMBER:      '#';\r\nRUNNINGNUMBERINSTANCE:  '##';\r\nAUTOCALCULATE:      '$'[Aa][Uu][Tt][Oo] | '$'[Aa][Uu][Tt][Oo][Mm][Aa][Tt][Ii][Cc] ;\r\nUNITTYPE:       CHARONLY+ ;\r\n\r\n/* Operators */\r\nMULTIPLY:\t\t'*';\r\nDIVIDE:\t\t\t'/';\r\nADDITION:\t\t'+';\r\nSUBTRACT:\t\t'-';\r\n\r\nSTRING :\t\t(['] (ESC | .)*? ['])\r\n                        | ([\"] (ESC | .)*? [\"]);\r\nNUMBER:\t\t\tINT '.' INT? EXP?   // 1.35, 1.35E-9, 0.3\r\n\t\t\t\t   | '.' INT EXP?\t\t\t// .2, .2e-9\r\n\t\t\t\t   | INT EXP?            // 1e10\r\n\t\t\t\t   | INT                // 45\r\n\t\t\t\t   ;\r\nINT:    INT_DIGITS; \r\nfragment ALPHANUMERIC:          [a-zA-Z0-9_] ;\r\nfragment CHARONLY:              [a-zA-Z_];\r\nfragment ESC:\t\t\t'\\\\' ([\"\\\\/bfnrt] | UNICODE) ;\r\nfragment UNICODE :\t\t'u' HEX HEX HEX HEX ;\r\nfragment HEX :\t\t\t[0-9a-fA-F] ;\r\nfragment NAMEWITHSPECIALCHAR:   [a-zA-Z0-9&*%^@!_=+/.,\\-];\r\nfragment INT_DIGITS:                   [0] | [0-9] [0-9]* ; \r\nfragment EXP:                   [Ee] [+\\-]? INT ; \r\n\r\n// warning AC0177: 'WHITESPACE' is not a recognized channel name\r\nWS:\t\t\t\t[ \\t\\n\\r]+ -> channel(1) ;\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ParamExprListener.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Antlr4.Runtime;\nusing ITerminalNode = Antlr4.Runtime.Tree.ITerminalNode;\nusing IToken = Antlr4.Runtime.IToken;\nusing TokenStreamRewriter = Antlr4.Runtime.TokenStreamRewriter;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Antlr4.Runtime.Misc;\n\nnamespace Revit.IFC.Export.Utility\n{\n   class NodeProperty\n   {\n      public object nodePropertyValue { get; set; }\n      public object originalNodePropertyValue { get; set; }\n      public ForgeTypeId uomTypeId { get; set; } = null;\n   }\n\n   class ParamExprListener : ParamExprGrammarBaseListener\n   {\n      TokenStreamRewriter rewriter;\n      //ParamExprGrammarParser parser;\n      BufferedTokenStream tokens;\n      Antlr4.Runtime.Tree.ParseTreeProperty<NodeProperty> nodeProp = new Antlr4.Runtime.Tree.ParseTreeProperty<NodeProperty>();\n      object FinalParameterValue = null;\n      bool putBackWS = false;\n      bool isUnique = false;\n\n      /// <summary>\n      /// Get/set Revit parameter name being processed\n      /// </summary>\n      public string RevitParameterName { get; set; }\n\n      /// <summary>\n      /// Get/set Revit element that owns the parameter being processed\n      /// </summary>\n      public Element RevitElement { get; set; }\n\n      /// <summary>\n      /// Get/Set Unit of Measure for value marked as having uom\n      /// </summary>\n      public string formattedValue { get; set; } = null;\n\n      /// <summary>\n      /// Get the unit type of the value\n      /// </summary>\n      public ForgeTypeId UnitType { get; private set; } = null;\n\n      // Dictionary to keep information of which parameter that contains the running number. Key is a tuple of Revit_category and parameter name\n      static IDictionary<Tuple<string, string>, int> LastRunningNumberCollection = new Dictionary<Tuple<string, string>, int>();\n\n      // Unique paramameter value dictionary. The key: a tuple of parameter name and parameter value\n      // This dictionary should be reset at the beginning of export or at the end of export\n      static IDictionary<Tuple<string, object>, int> UniqueParameterValue = new Dictionary<Tuple<string, object>, int>();\n\n      /// <summary>\n      /// Reset the internal dictionary that keep unique parameter values. This is needed to be done at the end of export process\n      /// </summary>\n      public static void ResetParamExprInternalDicts()\n      {\n         UniqueParameterValue.Clear();\n         LastRunningNumberCollection.Clear();\n      }\n\n      /// <summary>\n      /// Value in a raw object value. Application must check the datatype of the value\n      /// </summary>\n      public object Value { get { return FinalParameterValue; } }\n\n      /// <summary>\n      /// Check whether the parameter has a value\n      /// </summary>\n      public bool HasValue { get { return (FinalParameterValue != null); } }\n\n      /// <summary>\n      /// Returning as a string value\n      /// </summary>\n      public string ValueAsString { get { return FinalParameterValue.ToString(); } }\n\n      /// <summary>\n      /// Returning as an integer value (null if cannot be converted into an integer value) \n      /// </summary>\n      public int? ValueAsInteger\n      {\n         get\n         {\n            try\n            {\n               int ret = Convert.ToInt32(FinalParameterValue);\n               return ret;\n            }\n            catch (Exception)\n            {\n               return null;\n            }\n         }\n      }\n\n      /// <summary>\n      /// Returning as a double value (null if cannot be converted into a double value)\n      /// </summary>\n      public double? ValueAsDouble\n      {\n         get\n         {\n            try\n            {\n               double ret = Convert.ToDouble(FinalParameterValue);\n               return ret;\n            }\n            catch (Exception)\n            {\n               return null;\n            }\n         }\n      }\n\n      /// <summary>\n      /// Set NodeProperty\n      /// </summary>\n      /// <param name=\"node\">the node</param>\n      /// <param name=\"value\">value</param>\n      public void SetNodePropertyValue(Antlr4.Runtime.Tree.IParseTree node, NodeProperty value)\n      {\n         nodeProp.Put(node, value);\n      }\n\n      /// <summary>\n      /// Get the NodeProperty\n      /// </summary>\n      /// <param name=\"node\">the node</param>\n      /// <returns>NodeProperty</returns>\n      public NodeProperty GetNodePropertyValue(Antlr4.Runtime.Tree.IParseTree node)\n      {\n         return nodeProp.Get(node);\n      }\n\n      /// <summary>\n      /// Instantiating the ParemExprListener\n      /// </summary>\n      /// <param name=\"tokens\">tokens</param>\n      public ParamExprListener(BufferedTokenStream tokens)\n      {\n         this.tokens = tokens;\n         rewriter = new TokenStreamRewriter(tokens);\n      }\n\n      /// <summary>\n      /// Do this when encounters Terminal\n      /// </summary>\n      /// <param name=\"node\">the node</param>\n      public override void VisitTerminal(ITerminalNode node)\n      {\n         string nodeName = node.Symbol.Text;\n         if (putBackWS && whiteSpaceOnRight(node.Symbol.TokenIndex))\n            rewriter.InsertAfter(node.Symbol.StopIndex, \" \");\n      }\n\n      /// <summary>\n      /// Checking whether in the original statement there is a whitespace on the right hand of a token. If there is returns true\n      /// - useful to restore the whitespace to get the original statement (or modified one) back\n      /// </summary>\n      /// <param name=\"idx\">Token index</param>\n      /// <returns>true if there is a whitespace</returns>\n      bool whiteSpaceOnRight(int idx)\n      {\n         try\n         {\n            IList<IToken> WSChannel = this.tokens.GetHiddenTokensToRight(idx, ParamExprGrammarLexer.WHITESPACE);\n            if (WSChannel != null)\n            {\n               IToken ws = WSChannel.First();\n               if (ws != null)\n               {\n                  return true;\n               }\n            }\n            return false;\n         }\n         catch (ArgumentOutOfRangeException)\n         {\n            // Ignore?\n            return false;\n         }\n      }\n\n      /// <summary>\n      /// Executed upon entering param_expr rule\n      /// </summary>\n      /// <param name=\"context\">the param_expr context</param>\n      public override void EnterParam_expr([NotNull] ParamExprGrammarParser.Param_exprContext context)\n      {\n         base.EnterParam_expr(context);\n         if (context.ChildCount == 4 && context.GetChild(0) is ITerminalNode && context.GetChild(0).GetText().Equals(\"U\", StringComparison.CurrentCultureIgnoreCase))\n         {\n            // For unique value case, we will follow '<name>', '<name> (#)' with # as a running number. Unless the \"formula\" contains the RUNNINGNUMBER token\n            // Here, we will make sure that we keep track the value to identify uniqueness\n            isUnique = true;\n         }\n         else\n            isUnique = false;\n      }\n\n      /// <summary>\n      /// Executed upon existing the param_expr rule\n      /// </summary>\n      /// <param name=\"context\">the param_expr context</param>\n      public override void ExitParam_expr([NotNull] ParamExprGrammarParser.Param_exprContext context)\n      {\n         base.ExitParam_expr(context);\n         NodeProperty paramExprNodeProp = GetNodePropertyValue(context.expr());\n         object parValue = paramExprNodeProp.nodePropertyValue;\n         // Unique parameter value can only be \"enforced\" for a string datatype by appending a running number: <parValue> (#), starting with 2\n         if (isUnique && parValue is string)\n         {\n            Tuple<string, object> key = new Tuple<string, object>(RevitParameterName, parValue);\n            int counter = 0;\n            if (UniqueParameterValue.TryGetValue(key, out counter))\n            {\n               counter++;\n               parValue = parValue.ToString() + \" (\" + counter.ToString() + \")\";\n               UniqueParameterValue[key] = counter;\n            }\n            else\n            {\n               UniqueParameterValue.Add(key, 1);\n            }\n         }\n         FinalParameterValue = parValue;\n         UnitType = paramExprNodeProp.uomTypeId;\n         if (paramExprNodeProp.uomTypeId != null)\n         {\n            if (FinalParameterValue is double)\n            {\n               double? paramValueDouble = FinalParameterValue as double?;\n               formattedValue = UnitFormatUtils.Format(ExporterCacheManager.DocumentUnits, paramExprNodeProp.uomTypeId, paramValueDouble.Value, false);\n               FinalParameterValue = UnitUtils.ConvertToInternalUnits(paramValueDouble.Value, paramExprNodeProp.uomTypeId);\n            }\n         }\n      }\n\n      /// <summary>\n      /// Executed upon exiting atomic_param rule\n      /// </summary>\n      /// <param name=\"context\">the atomic_param context</param>\n      public override void ExitAtomic_param([NotNull] ParamExprGrammarParser.Atomic_paramContext context)\n      {\n         base.ExitAtomic_param(context);\n         NodeProperty nodeP = new NodeProperty();\n         nodeP.originalNodePropertyValue = context.GetText();\n\n         // Handle special_param\n         if (context.GetChild(0) is ParamExprGrammarParser.Special_paramContext)\n         {\n            var spParCtx = context.GetChild(0) as ParamExprGrammarParser.Special_paramContext;\n            if (spParCtx.ELEMENTID() != null)\n            {\n               nodeP.nodePropertyValue = RevitElement.Id.Value;\n            }\n            else if (spParCtx.RUNNINGNUMBER() != null)\n            {\n               string categoryName = CategoryUtil.GetCategoryName(RevitElement);\n               var key = new Tuple<string, string>(categoryName, RevitParameterName);\n               int lastNumber;\n               if (LastRunningNumberCollection.ContainsKey(key))\n               {\n                  lastNumber = ++LastRunningNumberCollection[key];\n               }\n               else\n               {\n                  lastNumber = 1;\n                  LastRunningNumberCollection.Add(key, lastNumber);\n               }\n               nodeP.nodePropertyValue = lastNumber;\n            }\n            else if (spParCtx.RUNNINGNUMBERINSTANCE() != null)\n            {\n               var key = new Tuple<string, string>(RevitElement.Id.ToString(), null);\n               int lastNumber;\n               if (LastRunningNumberCollection.ContainsKey(key))\n               {\n                  lastNumber = ++LastRunningNumberCollection[key];\n               }\n               else\n               {\n                  lastNumber = 1;\n                  LastRunningNumberCollection.Add(key, lastNumber);\n               }\n               nodeP.nodePropertyValue = lastNumber;\n            }\n            //else if (spParCtx.AUTOCALCULATE() != null)\n            //{\n\n            //}\n            else\n            {\n               // Not supported\n            }\n         }\n         //  handle objref param_name (',' param_name)\n         else\n         {\n            object parValue = null;\n            var thisObj = context.GetChild(0) as ParamExprGrammarParser.ObjrefContext;\n            var paramNames = context.param_name();\n            if (paramNames.Count() >= 1)\n            {\n               // This is the first level reference\n               if (thisObj.THIS() != null)\n                  parValue = GetValueFromParam_nameContext(RevitElement, paramNames[0]);\n               else if (thisObj.TYPE() != null)\n                  parValue = GetValueFromParam_nameContext(RevitElement.Document.GetElement(RevitElement.GetTypeId()), paramNames[0]);\n            }\n\n            if (paramNames.Count() > 1 && parValue != null && parValue is ElementId)\n            {\n               // Parameter should be obtained from the second level reference if the parameter is of ElementId type\n               parValue = GetValueFromParam_nameContext(RevitElement.Document.GetElement(parValue as ElementId), paramNames[1]);\n            }\n            nodeP.nodePropertyValue = parValue;\n         }\n         SetNodePropertyValue(context, nodeP);\n      }\n\n      /// <summary>\n      /// Executed upon exiting expr rule\n      /// </summary>\n      /// <param name=\"context\">the expr context</param>\n      public override void ExitExpr([NotNull] ParamExprGrammarParser.ExprContext context)\n      {\n         base.ExitExpr(context);\n         NodeProperty retExpr = new NodeProperty();\n\n         // value\n         if (context.GetChild(0) is ParamExprGrammarParser.ValueContext && context.children.Count == 1)\n            retExpr = GetNodePropertyValue(context.GetChild(0));\n         // | atomic_param\n         else if (context.GetChild(0) is ParamExprGrammarParser.Atomic_paramContext && context.children.Count == 1)\n            retExpr = GetNodePropertyValue(context.GetChild(0));\n         // | unary_operator expr\n         else if (context.GetChild(0) is ParamExprGrammarParser.Unary_operatorContext && context.ChildCount == 2)\n            retExpr = ParamExprResolver.ResolveExprUnaryOperator(context.GetChild(0).GetText(), GetNodePropertyValue(context.GetChild(1)));\n         // | expr ops expr\n         else if (context.GetChild(1) is ParamExprGrammarParser.OpsContext && context.ChildCount == 3)\n            retExpr = ParamExprResolver.ResolveExprOpsExpr(context.GetChild(0) as ParamExprGrammarParser.ExprContext, GetNodePropertyValue(context.GetChild(0)),\n                                                            context.GetChild(1) as ParamExprGrammarParser.OpsContext, GetNodePropertyValue(context.GetChild(2)));\n         // | '(' expr ')' (power_op)?\n         else if (context.GetChild(0) is ITerminalNode && context.GetChild(2) is ITerminalNode)\n         {\n            int powerOp = +1;\n            if (context.ChildCount == 4)\n               powerOp = ParamExprResolver.GetPowerOp(context.GetChild(3) as ParamExprGrammarParser.Power_opContext);\n            retExpr = ParamExprResolver.ResolveExprPowerOp(GetNodePropertyValue(context.GetChild(1) as ParamExprGrammarParser.ExprContext), powerOp);\n         }\n         else\n         {\n            // Not valid rule, return nothing? or the original text?\n         }\n\n         SetNodePropertyValue(context, retExpr);\n      }\n\n      /// <summary>\n      /// Executed upon exiting value rule\n      /// </summary>\n      /// <param name=\"context\">the value context</param>\n      public override void ExitValue([NotNull] ParamExprGrammarParser.ValueContext context)\n      {\n         base.ExitValue(context);\n         object value = null;\n         ForgeTypeId convertUnit = SpecTypeId.Number;\n\n         string valueStr = context.GetChild(0).GetText();\n         if (context.GetChild(0) is ParamExprGrammarParser.StringliteralContext)\n         {\n            valueStr = valueStr.Trim().Replace(\"\\'\", \"\").Replace(\"\\\"\", \"\");\n            value = (string)valueStr;\n         }\n         else if (context.GetChild(0) is ParamExprGrammarParser.RealliteralContext)\n         {\n            ParamExprGrammarParser.RealliteralContext realCtx = context.GetChild(0) as ParamExprGrammarParser.RealliteralContext;\n\n            valueStr = realCtx.signed_number().GetText();\n            int valueInt;\n            if (Int32.TryParse(valueStr, out valueInt))\n               value = (int)valueInt;\n            else\n            {\n               double valueDbl;\n               if (Double.TryParse(valueStr, out valueDbl))\n               {\n                  value = (double)valueDbl;\n               }\n            }\n         }\n         else if (context.GetChild(0) is ParamExprGrammarParser.Value_with_unitContext)\n         {\n            ParamExprGrammarParser.Value_with_unitContext vwunitCtx = context.GetChild(0) as ParamExprGrammarParser.Value_with_unitContext;\n            if (vwunitCtx.UNITTYPE() != null)\n            {\n               try\n               {\n                  if (vwunitCtx.GetChild(2) is ParamExprGrammarParser.Atomic_paramContext)\n                  {\n                     NodeProperty val = GetNodePropertyValue(vwunitCtx.GetChild(2));\n                     if (val.nodePropertyValue is double)\n                     {\n                        value = (double)val.nodePropertyValue;\n                     }\n                  }\n                  else if (vwunitCtx.GetChild(2) is ParamExprGrammarParser.Signed_numberContext)\n                  {\n                     ParamExprGrammarParser.Signed_numberContext signedNum = vwunitCtx.GetChild(2) as ParamExprGrammarParser.Signed_numberContext;\n                     valueStr = signedNum.GetText();\n                     double valueDbl;\n                     if (Double.TryParse(valueStr, out valueDbl))\n                     {\n                        value = (double)valueDbl;\n                     }\n                  }\n\n                  string unitTypeName = vwunitCtx.UNITTYPE().GetText();\n                  System.Reflection.PropertyInfo unitType = typeof(Autodesk.Revit.DB.SpecTypeId).GetProperty(unitTypeName);\n                  if (unitType != null)\n                  {\n                     convertUnit = unitType.GetValue(null, null) as ForgeTypeId;\n                  }\n               }\n               catch { }\n            }\n         }\n         NodeProperty nodeP = new NodeProperty();\n         nodeP.originalNodePropertyValue = valueStr;\n         nodeP.nodePropertyValue = value;\n         nodeP.uomTypeId = convertUnit;\n\n         SetNodePropertyValue(context, nodeP);\n      }\n\n      object GetParameterValue(Parameter par)\n      {\n         object parValue = null;\n         if (!par.HasValue)\n            return parValue;\n\n         switch (par.StorageType)\n         {\n            case StorageType.Double:\n               parValue = par.AsDouble();\n               break;\n            case StorageType.Integer:\n               parValue = par.AsInteger();\n               break;\n            case StorageType.String:\n               parValue = par.AsString();\n               break;\n            case StorageType.ElementId:\n               parValue = par.AsElementId();\n               break;\n            default:\n               break;\n         }\n         return parValue;\n      }\n\n      object GetValueFromParam_nameContext(Element elem, ParamExprGrammarParser.Param_nameContext paramName)\n      {\n         object parValue = null;\n         Element el = elem;\n         if (paramName.ChildCount > 1 && paramName.type() != null)\n         {\n            el = elem.Document.GetElement(RevitElement.GetTypeId());\n         }\n         parValue = GetParameterValue(el, paramName);\n         return parValue;\n      }\n\n      object GetParameterValue(Element elem, ParamExprGrammarParser.Param_nameContext paramName)\n      {\n         object parValue = null;\n\n         string parameterName = paramName.name().GetText().Replace(\"(\", \"\").Replace(\")\", \"\").Replace(\"'\", \"\").Replace(\"\\\"\", \"\");     // Remove the brackets\n\n         // Special parameter (not actual parameter in Revit for Name and UniqueId string)\n         if (parameterName.Equals(\"Name\", StringComparison.CurrentCultureIgnoreCase))\n         {\n            parValue = elem.Name;\n         }\n         else if (parameterName.Equals(\"UniqueId\", StringComparison.CurrentCultureIgnoreCase))\n         {\n            parValue = elem.UniqueId;\n         }\n         else\n         {\n            var RevitParams = elem.GetParameters(parameterName);\n            foreach (Parameter par in RevitParams)\n            {\n               parValue = GetParameterValue(par);\n               break;\n            }\n         }\n\n         return parValue;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ParamExprLogger.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2017  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.IO;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Revit.IFC.Export.Utility\n{\n   class ParamExprLogger\n   {\n      private static MemoryStream m_mStream = null;\n\n      /// <summary>\n      /// Logger stream\n      /// </summary>\n      public static MemoryStream loggerStream\n      {\n         get\n         {\n            if (m_mStream == null) m_mStream = new MemoryStream();\n            return m_mStream;\n         }\n      }\n\n      /// <summary>\n      /// reset the logger stream\n      /// </summary>\n      public static void resetStream()\n      {\n         if (m_mStream != null)\n         {\n            m_mStream.Dispose();\n            m_mStream = null;\n         }\n      }\n\n      /// <summary>\n      /// Write log\n      /// </summary>\n      /// <param name=\"msgText\">the message</param>\n      public static void writeLog(string msgText)\n      {\n         if (m_mStream == null) m_mStream = new MemoryStream();\n         UnicodeEncoding uniEncoding = new UnicodeEncoding();\n\n         byte[] msgString = uniEncoding.GetBytes(msgText);\n         m_mStream.Write(msgString, 0, msgString.Length);\n         m_mStream.Flush();\n      }\n\n      /// <summary>\n      /// Get MemoryStream content\n      /// </summary>\n      /// <returns>character array</returns>\n      public static char[] getmStreamContent()\n      {\n         char[] charArray;\n         UnicodeEncoding uniEncoding = new UnicodeEncoding();\n\n         byte[] byteArray = new byte[m_mStream.Length];\n         int countC = uniEncoding.GetCharCount(byteArray);\n         int countB = (int)m_mStream.Length;\n         m_mStream.Seek(0, SeekOrigin.Begin);\n         m_mStream.Read(byteArray, 0, countB);\n         charArray = new char[countC];\n         uniEncoding.GetDecoder().GetChars(byteArray, 0, countB, charArray, 0);\n\n         return charArray;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ParamExprResolver.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2017  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Antlr4.Runtime;\nusing Antlr4.Runtime.Tree;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\n\nnamespace Revit.IFC.Export.Utility\n{\n   class ParamExprResolver\n   {\n      /// <summary>\n      /// Expected paramameter value type enumeration\n      /// </summary>\n      public enum ExpectedValueEnum\n      {\n         STRINGVALUE,\n         INTVALUE,\n         DOUBLEVALUE,\n         UNSUPORTEDVALUETYPE\n      }\n\n      string paramExprContent;\n      static Element _element;\n      string _paramName;\n\n      /// <summary>\n      /// Instatiation of ParamExprResolver\n      /// </summary>\n      /// <param name=\"elem\">Revit element</param>\n      /// <param name=\"paramName\">parameter name</param>\n      /// <param name=\"paramVal\">parameter string value</param>\n      public ParamExprResolver(Element elem, string paramName, string paramVal)\n      {\n         paramExprContent = paramVal;\n         _element = elem;\n         _paramName = paramName;\n      }\n\n      /// <summary>\n      /// Get string value from the expr\n      /// </summary>\n      /// <returns>string value</returns>\n      public string GetStringValue()\n      {\n         object strVal = Process(ExpectedValueEnum.STRINGVALUE);\n         if (strVal == null)\n            return null;\n\n         string val = strVal.ToString();\n         return val;\n      }\n\n      /// <summary>\n      /// Get the integer value from the expr\n      /// </summary>\n      /// <returns>the integer value</returns>\n      public int? GetIntValue()\n      {\n         object intVal = Process(ExpectedValueEnum.INTVALUE);\n         if (intVal == null)\n            return null;\n\n         int val = (int)intVal;\n         return val;\n      }\n\n      /// <summary>\n      /// Get the double value from the expr\n      /// </summary>\n      /// <returns>the double value</returns>\n      public double? GetDoubleValue()\n      {\n         object dblVal = Process(ExpectedValueEnum.DOUBLEVALUE);\n         if (dblVal == null)\n            return null;\n\n         double val = (double)dblVal;\n         return val;\n      }\n\n      public ForgeTypeId UnitType { get; private set; } = null;\n\n      object Process(ExpectedValueEnum expectedValueType)\n      {\n         object val = null;\n         AntlrInputStream input = new AntlrInputStream(paramExprContent);\n         ParamExprGrammarLexer lexer = new ParamExprGrammarLexer(input);\n         CommonTokenStream tokens = new CommonTokenStream(lexer);\n         ParamExprGrammarParser parser = new ParamExprGrammarParser(tokens);\n         parser.RemoveErrorListeners();\n         ParamExprLogger.resetStream();\n         parser.AddErrorListener(new ParamExprErrorListener());\n         IParseTree tree = parser.param_expr();\n         ParseTreeWalker walker = new ParseTreeWalker();\n         ParamExprListener eval = new ParamExprListener(tokens);\n         eval.RevitElement = _element;\n         eval.RevitParameterName = _paramName;\n\n         try\n         {\n            walker.Walk(eval, tree);\n            if (eval.HasValue)\n            {\n               val = eval.Value;\n               UnitType = eval.UnitType;\n            }\n         }\n         catch\n         {\n\n         }\n         return val;\n      }\n\n      /// <summary>\n      /// Resolve unary operator for expr\n      /// </summary>\n      /// <param name=\"unaryOp\">the unary operator</param>\n      /// <param name=\"expr\">the expr</param>\n      /// <returns>NodeProperty</returns>\n      public static NodeProperty ResolveExprUnaryOperator(string unaryOp, NodeProperty expr)\n      {\n         NodeProperty ret = new NodeProperty();\n         ret.originalNodePropertyValue = unaryOp + \" \" + ret.originalNodePropertyValue;\n         if (expr.nodePropertyValue == null)\n         {\n            return ret;\n         }\n\n         if (expr.nodePropertyValue is Int32)\n         {\n            if (unaryOp.Equals(\"-\"))\n               ret.nodePropertyValue = -1 * ((int)expr.nodePropertyValue);\n            else\n               ret.nodePropertyValue = (int)expr.nodePropertyValue;\n         }\n         else if (expr.nodePropertyValue is double)\n         {\n            if (unaryOp.Equals(\"-\"))\n               ret.nodePropertyValue = -1 * ((double)expr.nodePropertyValue);\n            else\n               ret.nodePropertyValue = (double)expr.nodePropertyValue;\n         }\n         else\n         {\n            ret.nodePropertyValue = unaryOp + \" \" + expr.nodePropertyValue.ToString();\n         }\n\n         return ret;\n      }\n\n      /// <summary>\n      /// Resolve \"expr operator expr\"\n      /// </summary>\n      /// <param name=\"expr1Ctx\">context of expr 1</param>\n      /// <param name=\"expr1\">NodeProperty of expr 1</param>\n      /// <param name=\"ops\">operator</param>\n      /// <param name=\"expr2\">NodeProperty of expr 2</param>\n      /// <returns>NodeProperty</returns>\n      public static NodeProperty ResolveExprOpsExpr(ParamExprGrammarParser.ExprContext expr1Ctx, NodeProperty expr1,\n                                                     ParamExprGrammarParser.OpsContext ops, NodeProperty expr2)\n      {\n         NodeProperty ret = new NodeProperty();\n         ret.originalNodePropertyValue = expr1.originalNodePropertyValue + \" \" + ops.GetText() + \" \" + expr2.originalNodePropertyValue;\n\n         if (expr1.nodePropertyValue == null && expr2.nodePropertyValue == null)\n         {\n            return ret;\n         }\n\n         if (expr1.nodePropertyValue == null)\n         {\n            // expr1 is null, the ops is undefined, returns only expr2 as it is\n            ret.nodePropertyValue = expr2.nodePropertyValue;\n            return ret;\n         }\n\n         if (expr2.nodePropertyValue == null)\n         {\n            // expr2 is null, ops is undefined, returns only expr1 as it is\n            ret.nodePropertyValue = expr1.nodePropertyValue;\n            return ret;\n         }\n\n         if (expr1.nodePropertyValue is ElementId || expr2.nodePropertyValue is ElementId)\n         {\n            // For ElementId to be in this oper, the Name of the Element will be used and the rest will be converted to strings\n            string expr1Str = null;\n            if (expr1.nodePropertyValue is ElementId)\n               expr1Str = _element.Document.GetElement((ElementId)expr1.nodePropertyValue).Name;\n            else\n               expr1Str = expr1.nodePropertyValue.ToString();\n\n            string expr2Str = null;\n            if (expr2.nodePropertyValue is ElementId)\n               expr2Str = _element.Document.GetElement((ElementId)expr2.nodePropertyValue).Name;\n            else\n               expr2Str = expr2.nodePropertyValue.ToString();\n\n            //ret.nodePropertyValue = expr1Str + \" \" + ops.GetText() + \" \" + expr2Str;\n            ret.nodePropertyValue = expr1Str + expr2Str;\n         }\n         else if (expr1.nodePropertyValue is string || expr2.nodePropertyValue is string)\n         {\n            // one of the expr is a string, and therefore the entire expr will returns string\n            //ret.nodePropertyValue = expr1.nodePropertyValue.ToString() + \" \" + ops.GetText() + \" \" + expr2.nodePropertyValue.ToString();\n            ret.nodePropertyValue = expr1.nodePropertyValue.ToString() + expr2.nodePropertyValue.ToString();\n         }\n         else if (expr1.nodePropertyValue is double || expr2.nodePropertyValue is double)\n         {\n            if (ops.MULTIPLY() != null)\n               ret.nodePropertyValue = (double)expr1.nodePropertyValue * (double)expr2.nodePropertyValue;\n            if (ops.DIVIDE() != null)\n               ret.nodePropertyValue = (double)expr1.nodePropertyValue / (double)expr2.nodePropertyValue;\n            if (ops.ADDITION() != null)\n               ret.nodePropertyValue = (double)expr1.nodePropertyValue + (double)expr2.nodePropertyValue;\n            if (ops.SUBTRACT() != null)\n               ret.nodePropertyValue = (double)expr1.nodePropertyValue - (double)expr2.nodePropertyValue;\n         }\n         else\n         {\n            if (ops.MULTIPLY() != null)\n               ret.nodePropertyValue = (int)expr1.nodePropertyValue * (int)expr2.nodePropertyValue;\n            if (ops.DIVIDE() != null)\n               ret.nodePropertyValue = (double)((int)expr1.nodePropertyValue / (int)expr2.nodePropertyValue);\n            if (ops.ADDITION() != null)\n               ret.nodePropertyValue = (int)expr1.nodePropertyValue + (int)expr2.nodePropertyValue;\n            if (ops.SUBTRACT() != null)\n               ret.nodePropertyValue = (int)expr1.nodePropertyValue - (int)expr2.nodePropertyValue;\n         }\n\n         return ret;\n      }\n\n      /// <summary>\n      /// Get Math power operator\n      /// </summary>\n      /// <param name=\"powerOp\">the power operator</param>\n      /// <returns>integer value of the power</returns>\n      public static int GetPowerOp(ParamExprGrammarParser.Power_opContext powerOp)\n      {\n         int powerOpNumber = 0;\n         if (powerOp.ChildCount == 3)\n         {\n            powerOpNumber = int.Parse(powerOp.GetChild(2).GetText());\n            if (powerOp.GetChild(1).GetText().Equals(\"-\"))\n               powerOpNumber = -1 * powerOpNumber;\n         }\n         else if (powerOp.ChildCount == 2)\n         {\n            powerOpNumber = int.Parse(powerOp.GetChild(1).GetText());\n         }\n\n         return powerOpNumber;\n      }\n\n      /// <summary>\n      /// Resolve \"(expr)^power\"\n      /// </summary>\n      /// <param name=\"expr\">the expr NodeProperty</param>\n      /// <param name=\"powerOp\">the power operator</param>\n      /// <returns>NodeProperty</returns>\n      public static NodeProperty ResolveExprPowerOp(NodeProperty expr, int powerOp)\n      {\n         NodeProperty ret = new NodeProperty();\n         ret.originalNodePropertyValue = \"(\" + expr.originalNodePropertyValue + \")^\" + powerOp.ToString();\n         if (expr.nodePropertyValue is double || expr.nodePropertyValue is int)\n         {\n            ret.nodePropertyValue = Math.Pow((double)expr.nodePropertyValue, (double)powerOp);\n         }\n         return ret;\n      }\n\n\n      /// <summary>\n      /// Check for a special parameter value containing the Paramater expression\n      /// </summary>\n      /// <param name=\"paramValue\">the Parameter value</param>\n      /// <param name=\"element\">the Element</param>\n      /// <param name=\"paramName\">the Parameter Name</param>\n      /// <returns>the resolved Parameter Expression value or null if not resolved</returns>\n      public static ParamExprResolver CheckForParameterExpr(string paramValue, Element element, string paramName, ExpectedValueEnum expectedDataType, out object propertyValue)\n      {\n         propertyValue = null;\n         string paramValuetrim = paramValue.Trim();\n         if (IsParameterExpr(paramValue))\n         {\n            ParamExprResolver pResv = new ParamExprResolver(element, paramName, paramValuetrim);\n            switch (expectedDataType)\n            {\n               case ExpectedValueEnum.STRINGVALUE:\n                  propertyValue = pResv.GetStringValue();\n                  break;\n               case ExpectedValueEnum.DOUBLEVALUE:\n                  propertyValue = pResv.GetDoubleValue();\n                  break;\n               case ExpectedValueEnum.INTVALUE:\n                  propertyValue = pResv.GetIntValue();\n                  break;\n               default:\n                  break;\n            }\n            return pResv;\n         }\n\n         return null;\n      }\n\n      /// <summary>\n      /// Check whether parameter value contains Parameter Expression\n      /// </summary>\n      /// <param name=\"paramValue\">parameter value</param>\n      /// <returns>true or false</returns>\n      public static bool IsParameterExpr(string paramValue)\n      {\n         // This is kind of hack to quickly check whether we need to parse the parameter or not by checking that the value is enclosed by \"{ }\" or \"u{ }\" for unique value\n         string paramValuetrim = paramValue.Trim();\n         return ((paramValuetrim.Length > 1 && paramValuetrim[0] == '{')\n            || (paramValuetrim.Length > 2 && paramValuetrim[1] == '{')) && (paramValuetrim[paramValuetrim.Length - 1] == '}');\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ParamExprResolverParser.g4",
    "content": "grammar ParamExprResolverParser;\r\n@header {\r\n#pragma warning disable 3021\r\n}\r\n\r\n@lexer::members\r\n{\r\n// NOTE: If WHITESPACE is changed from 1, please also change the following line below:\r\n// WS:\t\t\t\t[ \\t\\n\\r]+ -> channel(1) ;\r\n// This is hardwired to 1 (instead of WHITESPACE) to avoid a compiler warning.\r\n   public const int WHITESPACE = 1;\r\n}\r\n\r\n/*\r\n * Parser Rules\r\n */\r\natomic_param:     ( '{' objref '}'  | '{' atomic_param '}' ) '.' param_name;\r\nobjref:           THIS | TYPE | RUNNINGNUMBER ;\r\nexpr:\t\t\t\t   value\r\n\t\t\t\t\t   | atomic_param\r\n\t\t\t\t\t   | unary_operator expr\r\n\t\t\t\t\t   | expr ops expr\r\n\t\t\t\t\t   | '(' expr ')' (power_op)?\r\n\t\t\t\t\t   ;\r\nparam_name:       NAMEWITHSPECIALCHAR_EXPLICIT+;\r\nunary_operator:   '+' | '-' ;\r\nops:              MULTIPLY | DIVIDE | ADDITION | SUBTRACT ;\r\nINT_DIGIT:    INT;\r\nNAMEWITHSPECIALCHAR_EXPLICIT:    NAMEWITHSPECIALCHAR;\r\npower_op:         '^' ( '-' | '+' )? INT_DIGIT;\r\nvalue:\t\t\t\trealliteral | stringliteral ;\r\nstringliteral:\t\tSTRING ;\r\nrealliteral:\t\tsigned_number ;\r\nsigned_number:\t   ( '+' | '-' )? NUMBER ;\r\n\r\n/*\r\n * Lexer rules\r\n*/\r\nTHIS:    [Tt][Hh][Ii][Ss];\r\nTYPE:    [Tt][Yy][Pp][Ee];\r\nRUNNINGNUMBER: '#';\r\n\r\n/* Operators */\r\nMULTIPLY:\t\t'*';\r\nDIVIDE:\t\t\t'/';\r\nADDITION:\t\t'+';\r\nSUBTRACT:\t\t'-';\r\n\r\nSTRING :\t\t(['] (ESC | .)*? ['])\r\n                        | ([\"] (ESC | .)*? [\"]);\r\nNUMBER:\t\t\tINT '.' INT? EXP?   // 1.35, 1.35E-9, 0.3\r\n\t\t\t\t   | '.' INT EXP?\t\t\t// .2, .2e-9\r\n\t\t\t\t   | INT EXP?            // 1e10\r\n\t\t\t\t   | INT                // 45\r\n\t\t\t\t   ;\r\nfragment ALPHANUMERIC:\t[a-zA-Z0-9_] ;\r\nfragment NAMEWITHSPECIALCHAR:   [a-zA-Z0-9&*%^$#@!_=+,-./\"'];\r\n\r\nfragment INT:   [0] | [0-9] [0-9]* ; \r\nfragment EXP:   [Ee] [+\\-]? INT ;\r\nfragment ESC:\t\t\t'\\\\' ([\"\\\\/bfnrt] | UNICODE) ;\r\nfragment UNICODE :\t\t'u' HEX HEX HEX HEX ;\r\nfragment HEX :\t\t\t[0-9a-fA-F] ;\r\n\r\n// NOTE: If WHITESPACE is changed from 1, please also change the following line below:\r\n// WS:\t\t\t\t[ \\t\\n\\r]+ -> channel(1) ;\r\n// This is hardwired to 1 (instead of WHITESPACE) to avoid a compiler warning.\r\nWS:\t\t\t\t\t\t[ \\t\\n\\r]+ -> channel(1) ;"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ParameterCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of properties and quantities to be created when exporting an element.\r\n   /// </summary>\r\n   public class ParameterCache\r\n   {\r\n      /// <summary>\r\n      /// Constructs a default ParameterCache object.\r\n      /// </summary>\r\n      public ParameterCache()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// The indices into the PropertySets list of lists that indicates which sets of\r\n      /// parameters are applicable for both instance and type.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// This is a simplification that allows us to greatly refactor the property set\r\n      /// code while not doing an even bigger refactoring of how property set definitions\r\n      /// are created.\r\n      /// </remarks>\r\n      public IList<int> InstanceAndTypePsetIndices { get; set; } = new List<int>();\r\n\r\n      /// <summary>\r\n      /// The list of predefined property sets.\r\n      /// </summary>\r\n      public IList<IList<PreDefinedPropertySetDescription>> PreDefinedPropertySets \r\n         { get; private set; } = new List<IList<PreDefinedPropertySetDescription>>();\r\n\r\n      /// <summary>\r\n      /// The list of property sets.\r\n      /// </summary>\r\n      public IList<IList<PropertySetDescription>> PropertySets \r\n         { get; set; } = new List<IList<PropertySetDescription>>();\r\n\r\n      /// <summary>\r\n      /// The list of quantities.\r\n      /// </summary>\r\n      public IList<IList<QuantityDescription>> Quantities \r\n         { get; set; } = new List<IList<QuantityDescription>>();\r\n\r\n      public void Clear()\r\n      {\r\n         InstanceAndTypePsetIndices.Clear();\r\n         PreDefinedPropertySets.Clear();\r\n         PropertySets.Clear();\r\n         Quantities.Clear();\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ParameterElementCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Contains a cache from cleaned parameter name to the first parameter with that name.  \r\n   /// Intended to be grouped by BuiltInParameterGroup.\r\n   /// </summary>\r\n   /// <remarks>\r\n   /// Note that Revit may have multiple parameters with the same name, that IFC doesn't support.\r\n   /// For now, we support only exporting the first Parameter with the same name, as determined\r\n   /// by the parameter with the lowest id.  We'd like to extend this by exporting all parameters\r\n   /// with the same name, uniqified for IFC, but this requires significant changes in routines\r\n   /// that expect one parameter per name.\r\n   /// </remarks>\r\n   public class ParameterElementCache\r\n   {\r\n      /// <summary>\r\n      /// The cache from parameter name to parameter.\r\n      /// </summary>\r\n      public IDictionary<string, Parameter> ParameterCache { get; set; }\r\n\r\n      /// <summary>\r\n      /// The default constructor.\r\n      /// </summary>\r\n      public ParameterElementCache()\r\n      {\r\n         ParameterCache = new SortedDictionary<string, Parameter>(StringComparer.InvariantCultureIgnoreCase);\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Contains a cache from parameter name to parameter value.\r\n   /// </summary>\r\n   public class ParameterValueSubelementCache\r\n   {\r\n      /// <summary>\r\n      /// The cache from parameter name to parameter value.\r\n      /// </summary>\r\n      public IDictionary<String, ParameterValue> ParameterValueCache { get; set; }\r\n\r\n      /// <summary>\r\n      /// The default constructor.\r\n      /// </summary>\r\n      public ParameterValueSubelementCache()\r\n      {\r\n         ParameterValueCache = new SortedDictionary<String, ParameterValue>(StringComparer.InvariantCultureIgnoreCase);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ParameterUtil.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides static methods for parameter related manipulations.\r\n   /// </summary>\r\n   public class ParameterUtil\r\n   {\r\n      /// <summary>\r\n      /// The information needed to create an IFC property.\r\n      /// </summary>\r\n      public class PropertyDescription\r\n      {\r\n         /// <summary>\r\n         /// Create a property description with only a name.\r\n         /// </summary>\r\n         /// <param name=\"name\">The name of the property.</param>\r\n         public PropertyDescription(string name)\r\n         {\r\n            Name = name;\r\n         }\r\n\r\n         /// <summary>\r\n         /// Create a property description with only a name.\r\n         /// </summary>\r\n         /// <param name=\"name\">The name of the property.</param>\r\n         /// <param name=\"description\">The description of the property.</param>\r\n         public PropertyDescription(string name, string description)\r\n         {\r\n            Name = name;\r\n            Description = description;\r\n         }\r\n\r\n         /// <summary>\r\n         ///  The required name.\r\n         /// </summary>\r\n         public string Name { get; set; } = null;\r\n\r\n         /// <summary>\r\n         /// The optional description.\r\n         /// </summary>\r\n         public string Description { get; set; } = null;\r\n      };\r\n\r\n      // Cache the parameters for the current Element.\r\n      private static IDictionary<ElementId, IDictionary<string, ParameterElementCache>> m_Parameters =\r\n         new Dictionary<ElementId, IDictionary<string, ParameterElementCache>>();\r\n\r\n      private static IDictionary<ElementId, IDictionary<IFCAnyHandle, ParameterValueSubelementCache>> m_SubelementParameterValueCache =\r\n         new Dictionary<ElementId, IDictionary<IFCAnyHandle, ParameterValueSubelementCache>>();\r\n\r\n      public static IDictionary<string, ParameterElementCache> GetParametersForElement(ElementId elemId)\r\n      {\r\n         if (elemId == ElementId.InvalidElementId)\r\n            return null;\r\n\r\n         if (!m_Parameters.TryGetValue(elemId, out IDictionary<string, ParameterElementCache> parametersForElement))\r\n         {\r\n            CacheParametersForElement(elemId);\r\n            m_Parameters.TryGetValue(elemId, out parametersForElement);\r\n         }\r\n\r\n         return parametersForElement;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Clears the parameter value caches.\r\n      /// </summary>\r\n      public static void ClearParameterValueCaches()\r\n      {\r\n         m_Parameters.Clear();\r\n         m_SubelementParameterValueCache.Clear();\r\n      }\r\n\r\n      private static Parameter GetStringValueFromElementBase(Element element, string propertyName, bool allowUnset, out string propertyValue)\r\n      {\r\n         propertyValue = string.Empty;\r\n         if (element == null || string.IsNullOrEmpty(propertyName))\r\n            return null;\r\n\r\n         ElementId elementId = element.Id;\r\n         Parameter parameter = GetParameterFromName(elementId, propertyName);\r\n\r\n         if (parameter == null)\r\n            return null;\r\n\r\n         if (parameter.HasValue)\r\n         {\r\n            StorageType storageType = parameter.StorageType;\r\n            if (!(storageType == StorageType.ElementId &&\r\n                  parameter.AsElementId() == ElementId.InvalidElementId))\r\n            {\r\n               propertyValue = parameter.AsValueString();\r\n               if (!string.IsNullOrEmpty(propertyValue))\r\n               {\r\n                  if (storageType == StorageType.String)\r\n                  {\r\n                     ParamExprResolver.CheckForParameterExpr(propertyValue, element,\r\n                        propertyName, ParamExprResolver.ExpectedValueEnum.STRINGVALUE,\r\n                        out object strValue);\r\n                     if (strValue is string)\r\n                        propertyValue = strValue as string;\r\n                  }\r\n                  return parameter;\r\n               }\r\n            }\r\n         }\r\n\r\n         if (!allowUnset)\r\n            return null;\r\n\r\n         propertyValue = null;\r\n         return parameter;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets a non-empty string value from parameter of an element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element, which can be null..</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <exception cref=\"System.ArgumentException\">Thrown when propertyName is null or empty.</exception>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetStringValueFromElement(Element element, string propertyName, out string propertyValue)\r\n      {\r\n         return GetStringValueFromElementBase(element, propertyName, false, out propertyValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets integer value from parameter of an element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element, which can be null.</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <exception cref=\"System.ArgumentNullException\">Thrown when element is null.</exception>\r\n      /// <exception cref=\"System.ArgumentException\">Thrown when propertyName is null or empty.</exception>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetIntValueFromElement(Element element, string propertyName, out int propertyValue)\r\n      {\r\n         propertyValue = 0;\r\n\r\n         if (String.IsNullOrEmpty(propertyName))\r\n            //throw new ArgumentException(\"The name is null or empty.\", \"propertyName\");\r\n            return null;\r\n\r\n         if (element == null)\r\n            return null;\r\n\r\n         Parameter parameter = GetParameterFromName(element.Id, propertyName);\r\n         if (parameter != null && parameter.HasValue)\r\n         {\r\n            switch (parameter.StorageType)\r\n            {\r\n               case StorageType.Double:\r\n                  {\r\n                     try\r\n                     {\r\n                        propertyValue = (int)parameter.AsDouble();\r\n                        return parameter;\r\n                     }\r\n                     catch\r\n                     {\r\n                        return null;\r\n                     }\r\n                  }\r\n               case StorageType.Integer:\r\n                  {\r\n                     propertyValue = parameter.AsInteger();\r\n                     return parameter;\r\n                  }\r\n               case StorageType.String:\r\n                  {\r\n                     string propValue = parameter.AsString();\r\n                     object intValue = null;\r\n                     ParamExprResolver.CheckForParameterExpr(propValue, element, propertyName, ParamExprResolver.ExpectedValueEnum.INTVALUE,\r\n                              out intValue);\r\n\r\n                     if (intValue != null && intValue is int)\r\n                     {\r\n                        propertyValue = (int)intValue;\r\n                        return parameter;\r\n                     }\r\n                     return int.TryParse(propValue, out propertyValue) ? parameter : null;\r\n                  }\r\n            }\r\n         }\r\n         return null;\r\n      }\r\n\r\n      public static Parameter GetDoubleValueFromElement(Element element, string propertyName,\r\n         out double propertyValue)\r\n      {\r\n         return GetDoubleValueFromElement(element, propertyName, out propertyValue, out _);\r\n      }\r\n\r\n      public static Parameter GetDoubleValueFromElement(Element element, ForgeTypeId group, string propertyName,\r\n         out double propertyValue)\r\n      {\r\n         return GetDoubleValueFromElement(element, group, propertyName, out propertyValue, out _);\r\n      }\r\n\r\n      private static bool IsInputValid(Element element, string propertyName)\r\n      {\r\n         return !string.IsNullOrEmpty(propertyName) && element != null;\r\n      }\r\n\r\n      private static Parameter GetParameterValue(Element element, Parameter parameter, string propertyName, out double propertyValue, out ForgeTypeId unitType)\r\n      {\r\n         propertyValue = 0.0;\r\n         unitType = null;\r\n         if (parameter != null && parameter.HasValue)\r\n         {\r\n            switch (parameter.StorageType)\r\n            {\r\n               case StorageType.Double:\r\n                  propertyValue = parameter.AsDouble();\r\n                  return parameter;\r\n               case StorageType.Integer:\r\n                  propertyValue = parameter.AsInteger();\r\n                  return parameter;\r\n               case StorageType.String:\r\n                  {\r\n                     string propValue = parameter.AsString();\r\n                     object dblValue = null;\r\n                     ParamExprResolver pResv = ParamExprResolver.CheckForParameterExpr(propValue, element, propertyName, ParamExprResolver.ExpectedValueEnum.DOUBLEVALUE,\r\n                              out dblValue);\r\n\r\n                     if (dblValue != null && dblValue is double)\r\n                     {\r\n                        propertyValue = (double)dblValue;\r\n                        unitType = pResv.UnitType;\r\n                        return parameter;\r\n                     }\r\n                     return double.TryParse(propValue, out propertyValue) ? parameter : null;\r\n                  }\r\n            }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets double value from parameter of an element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element, which can be null.</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <exception cref=\"System.ArgumentNullException\">Thrown when element is null.</exception>\r\n      /// <exception cref=\"System.ArgumentException\">Thrown when propertyName is null or empty.</exception>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetDoubleValueFromElement(Element element, string propertyName, out double propertyValue, out ForgeTypeId unitType)\r\n      {\r\n         propertyValue = 0.0;\r\n         unitType = null;\r\n\r\n         if (!IsInputValid(element, propertyName))\r\n            return null;\r\n\r\n         Parameter parameter = GetParameterFromName(element.Id, propertyName);\r\n\r\n         return GetParameterValue(element, parameter, propertyName, out propertyValue, out unitType);\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Gets double value from parameter of an element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element, which can be null.</param>\r\n      /// <param name=\"group\">Optional property group to limit search to.</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <exception cref=\"System.ArgumentNullException\">Thrown when element is null.</exception>\r\n      /// <exception cref=\"System.ArgumentException\">Thrown when propertyName is null or empty.</exception>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetDoubleValueFromElement(Element element, ForgeTypeId group, string propertyName, out double propertyValue, out ForgeTypeId unitType)\r\n      {\r\n         propertyValue = 0.0;\r\n         unitType = null;\r\n\r\n         if (!IsInputValid(element, propertyName))\r\n            return null;\r\n\r\n         Parameter parameter = GetParameterFromName(element.Id, group, propertyName);\r\n\r\n         return GetParameterValue(element, parameter, propertyName, out propertyValue, out unitType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets string value from built-in parameter of an element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element, which can be null.</param>\r\n      /// <param name=\"builtInParameter\">The built-in parameter.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <exception cref=\"System.ArgumentNullException\">Thrown when element is null.</exception>\r\n      /// <exception cref=\"System.ArgumentException\">Thrown when builtInParameter in invalid.</exception>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetStringValueFromElement(Element element, BuiltInParameter builtInParameter, out string propertyValue)\r\n      {\r\n         if (builtInParameter == BuiltInParameter.INVALID)\r\n            throw new ArgumentException(\"BuiltInParameter is INVALID\", \"builtInParameter\");\r\n\r\n         propertyValue = string.Empty;\r\n\r\n         Parameter parameter = element?.get_Parameter(builtInParameter);\r\n         if (!(parameter?.HasValue ?? false))\r\n            return null;\r\n\r\n         propertyValue = parameter.AsValueString();\r\n         return parameter;\r\n      }\r\n\r\n      /// <summary>Gets string value from built-in parameter of an element or its type.</summary>\r\n      /// <param name=\"element\">The element, which can be null.</param>\r\n      /// <param name=\"builtInParameter\">The built-in parameter.</param>\r\n      /// <param name=\"nullAllowed\">true if we allow the property value to be empty.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetStringValueFromElementOrSymbol(Element element, BuiltInParameter builtInParameter, bool nullAllowed, out string propertyValue)\r\n      {\r\n         return GetStringValueFromElementOrSymbol(element, null, builtInParameter, nullAllowed, out propertyValue);\r\n      }\r\n\r\n      /// <summary>Gets string value from built-in parameter of an element or its type.</summary>\r\n      /// <param name=\"element\">The element, which can be null.</param>\r\n      /// <param name=\"elementType\">The element, which can be null.  It will be calculated from the element if it is.</param>\r\n      /// <param name=\"builtInParameter\">The built-in parameter.</param>\r\n      /// <param name=\"nullAllowed\">true if we allow the property value to be empty.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetStringValueFromElementOrSymbol(Element element, Element elementType, BuiltInParameter builtInParameter, bool nullAllowed, out string propertyValue)\r\n      {\r\n         propertyValue = string.Empty;\r\n         if (element == null)\r\n            return null;\r\n\r\n         Parameter parameter = GetStringValueFromElement(element, builtInParameter, out propertyValue);\r\n         if (parameter != null)\r\n         {\r\n            if (!string.IsNullOrEmpty(propertyValue))\r\n               return parameter;\r\n         }\r\n\r\n         parameter = null;\r\n         if (elementType == null)\r\n            elementType = element.Document.GetElement(element.GetTypeId());\r\n\r\n         if (elementType != null)\r\n         {\r\n            parameter = GetStringValueFromElement(elementType, builtInParameter, out propertyValue);\r\n            if ((parameter != null) && !nullAllowed && string.IsNullOrEmpty(propertyValue))\r\n               parameter = null;\r\n         }\r\n\r\n         return parameter;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets string value of a built-in parameter of an element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"builtInParameter\">The built-in parameter.</param>\r\n      /// <param name=\"propertyValue\">The property value.</param>\r\n      /// <exception cref=\"System.ArgumentNullException\">Thrown when element is null.</exception>\r\n      /// <exception cref=\"System.ArgumentException\">Thrown when builtInParameter in invalid.</exception>\r\n      public static void SetStringParameter(Element element, BuiltInParameter builtInParameter, string propertyValue)\r\n      {\r\n         if (element == null)\r\n            throw new ArgumentNullException(\"element\");\r\n\r\n         if (builtInParameter == BuiltInParameter.INVALID)\r\n            throw new ArgumentException(\"BuiltInParameter is INVALID\", \"builtInParameter\");\r\n\r\n         Parameter parameter = element.get_Parameter(builtInParameter);\r\n         if (parameter != null &&\r\n            parameter.HasValue &&\r\n            parameter.StorageType == StorageType.String)\r\n         {\r\n            if (!parameter.IsReadOnly)\r\n               parameter.Set(propertyValue);\r\n            return;\r\n         }\r\n\r\n         ElementId parameterId = new ElementId(builtInParameter);\r\n         ExporterIFCUtils.AddValueString(element, parameterId, propertyValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets double value from built-in parameter of an element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element, which can be null.</param>\r\n      /// <param name=\"builtInParameter\">The built-in parameter.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <exception cref=\"System.ArgumentNullException\">Thrown when element is null.</exception>\r\n      /// <exception cref=\"System.ArgumentException\">Thrown when builtInParameter in invalid.</exception>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetDoubleValueFromElement(Element element, BuiltInParameter builtInParameter, out double propertyValue)\r\n      {\r\n         if (builtInParameter == BuiltInParameter.INVALID)\r\n            throw new ArgumentException(\"BuiltInParameter is INVALID\", \"builtInParameter\");\r\n\r\n         propertyValue = 0.0;\r\n\r\n         Parameter parameter = element?.get_Parameter(builtInParameter);\r\n         if (!(parameter?.HasValue ?? false) || parameter.StorageType != StorageType.Double)\r\n            return null;\r\n\r\n         propertyValue = parameter.AsDouble();\r\n         return parameter;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets integer value from built-in parameter of an element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element, which can be null.</param>\r\n      /// <param name=\"builtInParameter\">The built-in parameter.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <exception cref=\"System.ArgumentNullException\">Thrown when element is null.</exception>\r\n      /// <exception cref=\"System.ArgumentException\">Thrown when builtInParameter in invalid.</exception>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetIntValueFromElement(Element element, BuiltInParameter builtInParameter, out int propertyValue)\r\n      {\r\n         if (builtInParameter == BuiltInParameter.INVALID)\r\n            throw new ArgumentException(\"BuiltInParameter is INVALID\", \"builtInParameter\");\r\n\r\n         propertyValue = 0;\r\n\r\n         Parameter parameter = element?.get_Parameter(builtInParameter);\r\n         if (!(parameter?.HasValue ?? false) || parameter.StorageType != StorageType.Integer)\r\n            return null;\r\n\r\n         propertyValue = parameter.AsInteger();\r\n         return parameter;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets double value from parameter of an element or its element type.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element, which can be null.</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"builtInParameter\">The built-in parameter.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetDoubleValueFromElementOrSymbol(Element element, string propertyName, \r\n         BuiltInParameter builtInParameter, out double propertyValue)\r\n      {\r\n         propertyValue = 0.0;\r\n         if (element == null || (string.IsNullOrEmpty(propertyName) && builtInParameter == BuiltInParameter.INVALID))\r\n            return null;\r\n\r\n         Parameter parameter = GetDoubleValueFromElementOrSymbol(element, propertyName, out propertyValue);\r\n         if (parameter != null)\r\n            return parameter;\r\n\r\n         if (builtInParameter != BuiltInParameter.INVALID)\r\n            parameter = GetDoubleValueFromElementOrSymbol(element, builtInParameter, out propertyValue);\r\n\r\n         return parameter;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets double value from parameter of an element or its element type.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element, which can be null.</param>\r\n      /// <param name=\"builtInParameter\">The built-in parameter.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetDoubleValueFromElementOrSymbol(Element element,\r\n         BuiltInParameter builtInParameter, out double propertyValue)\r\n      {\r\n         propertyValue = 0.0;\r\n         if (element == null)\r\n            return null;\r\n\r\n         Parameter parameter = GetDoubleValueFromElement(element, builtInParameter, out propertyValue);\r\n         if (parameter != null)\r\n            return parameter;\r\n\r\n         Document document = element.Document;\r\n         ElementId typeId = element.GetTypeId();\r\n\r\n         Element elemType = document.GetElement(typeId);\r\n         if (elemType != null)\r\n            return GetDoubleValueFromElement(elemType, builtInParameter, out propertyValue);\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets double value from parameter of an element or its element type.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element, which can be null.</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetDoubleValueFromElementOrSymbol(Element element, \r\n         string propertyName, out double propertyValue)\r\n      {\r\n         propertyValue = 0.0;\r\n         if (element == null || string.IsNullOrEmpty(propertyName))\r\n            return null;\r\n\r\n         Parameter parameter = GetDoubleValueFromElement(element, propertyName, out propertyValue);\r\n         if (parameter != null)\r\n            return parameter;\r\n         \r\n         Document document = element.Document;\r\n         ElementId typeId = element.GetTypeId();\r\n\r\n         Element elemType = document.GetElement(typeId);\r\n         if (elemType != null)\r\n         {\r\n            parameter = GetDoubleValueFromElement(elemType, propertyName, out propertyValue);\r\n            if (parameter == null)\r\n               parameter = GetDoubleValueFromElement(elemType, propertyName + \"[Type]\", out propertyValue);\r\n         }\r\n\r\n         return parameter;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets double value from parameter of an element or its element type.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element, which can be null.</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <param name=\"alternateNames\">the variable array of alternate names mainly to support backward compatibility</param>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetDoubleValueFromElementOrSymbol(Element element, \r\n         string propertyName, out double propertyValue, params string[] alternateNames)\r\n      {\r\n         propertyValue = 0.0;\r\n         if (string.IsNullOrEmpty(propertyName))\r\n            return null;\r\n\r\n         Parameter parameter;\r\n         parameter = GetDoubleValueFromElementOrSymbol(element, propertyName, out propertyValue);\r\n         if (parameter == null && alternateNames != null && alternateNames.Length > 0)\r\n         {\r\n            foreach (string altName in alternateNames)\r\n            {\r\n               parameter = GetDoubleValueFromElementOrSymbol(element, altName, out propertyValue);\r\n               if (parameter != null)\r\n                  break;\r\n            }\r\n         }\r\n\r\n         return parameter;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets positive double value from parameter of an element or its element type.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <param name=\"alternateNames\">the variable array of alternate names mainly to support backward compatibility</param>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetPositiveDoubleValueFromElementOrSymbol(Element element, string propertyName, out double propertyValue, params string[] alternateNames)\r\n      {\r\n         Parameter parameter = GetDoubleValueFromElementOrSymbol(element, propertyName, out propertyValue, alternateNames);\r\n         if ((parameter != null) && (propertyValue > 0.0))\r\n            return parameter;\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets element id value from parameter of an element.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element, which can be null.</param>\r\n      /// <param name=\"builtInParameter\">The built in parameter.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetElementIdValueFromElement(Element element, BuiltInParameter builtInParameter, out ElementId propertyValue)\r\n      {\r\n         if (builtInParameter == BuiltInParameter.INVALID)\r\n            throw new ArgumentException(\"BuiltInParameter is INVALID\", \"builtInParameter\");\r\n\r\n         propertyValue = ElementId.InvalidElementId;\r\n\r\n         Parameter parameter = element?.get_Parameter(builtInParameter);\r\n         if (!(parameter?.HasValue ?? false) || parameter.StorageType != StorageType.ElementId)\r\n            return null;\r\n\r\n         propertyValue = parameter.AsElementId();\r\n         return parameter;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets element id value from parameter of an element or its element type.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"builtInParameter\">The built in parameter.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetElementIdValueFromElementOrSymbol(Element element, BuiltInParameter builtInParameter, out ElementId propertyValue)\r\n      {\r\n         propertyValue = ElementId.InvalidElementId;\r\n         if (element == null)\r\n            return null;\r\n\r\n         Parameter parameter = GetElementIdValueFromElement(element, builtInParameter, out propertyValue);\r\n         if (parameter != null)\r\n            return parameter;\r\n\r\n         Document document = element.Document;\r\n         ElementId typeId = element.GetTypeId();\r\n\r\n         Element elemType = document.GetElement(typeId);\r\n         if (elemType != null)\r\n            return GetElementIdValueFromElement(elemType, builtInParameter, out propertyValue);\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return a list of material ids from element's parameters\r\n      /// </summary>\r\n      /// <param name=\"element\">the element</param>\r\n      /// <returns>list of material ids</returns>\r\n      public static IList<ElementId> FindMaterialParameters(Element element)\r\n      {\r\n         IList<ElementId> materialIds = new List<ElementId>();\r\n\r\n         foreach (Parameter param in element.Parameters)\r\n         {\r\n            if (param.Definition == null)\r\n               continue;\r\n\r\n            // Limit to the parameter(s) within builtin parameter group GroupTypeId::Materials\r\n            if (param.Definition.GetDataType() == SpecTypeId.Reference.Material && param.Definition.GetGroupTypeId() == GroupTypeId.Materials)\r\n            {\r\n               materialIds.Add(param.AsElementId());\r\n            }\r\n         }\r\n\r\n         return materialIds;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the parameter by name from an element from the parameter cache.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element id.</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <returns>The parameter.</returns>\r\n      static private Parameter getParameterByNameFromCache(ElementId elementId, string propertyName)\r\n      {\r\n         string cleanPropertyName = NamingUtil.RemoveSpaces(propertyName);\r\n\r\n         if (!m_Parameters.TryGetValue(elementId, out IDictionary<string, ParameterElementCache> parameterGroups))\r\n            return null;\r\n\r\n         foreach (ParameterElementCache otherCache in parameterGroups.Values)\r\n         {\r\n            if (otherCache.ParameterCache.TryGetValue(cleanPropertyName, out Parameter parameter))\r\n            {\r\n               parameter = ValidateParameter(parameter);\r\n               if (parameter != null)\r\n                  return parameter;\r\n            }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the parameter by name from an element from the parameter cache.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element id.</param>\r\n      /// <param name=\"group\">The parameter group.</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <returns>The parameter.</returns>\r\n      static private Parameter getParameterByNameFromCache(ElementId elementId, ForgeTypeId groupId,\r\n         string propertyName)\r\n      {\r\n         string cleanPropertyName = NamingUtil.RemoveSpaces(propertyName);\r\n\r\n         if (!m_Parameters.TryGetValue(elementId, out IDictionary<string, ParameterElementCache> parameterGroups))\r\n            return null;\r\n\r\n         if (!parameterGroups.TryGetValue(groupId.TypeId, out ParameterElementCache cacheForGroup))\r\n            return null;\r\n\r\n         cacheForGroup.ParameterCache.TryGetValue(cleanPropertyName, out Parameter parameter);\r\n         return parameter;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the parameter value by name from the subelement parameter value cache.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element id.</param>\r\n      /// <param name=\"handle\">The subelement ifc handle.</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <returns>The parameter.</returns>\r\n      static public ParameterValue getParameterValueByNameFromSubelementCache(ElementId elementId, IFCAnyHandle subelementHandle, string propertyName)\r\n      {\r\n         ParameterValue parameterVal = null;\r\n         string cleanPropertyName = NamingUtil.RemoveSpaces(propertyName);\r\n\r\n         IDictionary<IFCAnyHandle, ParameterValueSubelementCache> anyHandleParamValMap;\r\n         if (!m_SubelementParameterValueCache.TryGetValue(elementId, out anyHandleParamValMap))\r\n            return parameterVal;\r\n\r\n         ParameterValueSubelementCache paramValueCache;\r\n         if (!anyHandleParamValMap.TryGetValue(subelementHandle, out paramValueCache))\r\n            return parameterVal;\r\n\r\n\r\n         paramValueCache.ParameterValueCache.TryGetValue(cleanPropertyName, out parameterVal);\r\n         return parameterVal;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns true if the built-in parameter has the identical name and value as another parameter.\r\n      /// Used to remove redundant output from the IFC export.\r\n      /// </summary>\r\n      /// <param name=\"parameter\">The parameter</param>\r\n      /// <returns>Returns true if the built-in parameter has the identical name and value as another parameter.</returns>\r\n      static private bool IsDuplicateParameter(Parameter parameter)\r\n      {\r\n         if (parameter.Id.Value == (long)BuiltInParameter.ELEM_CATEGORY_PARAM_MT) // Same as ELEM_CATEGORY_PARAM.\r\n            return true;\r\n         // DPART_ORIGINAL_CATEGORY_ID is the string version of DPART_ORIGINAL_CATEGORY_ID.  Not going to duplicate the data.\r\n         if (parameter.Id.Value == (long)BuiltInParameter.DPART_ORIGINAL_CATEGORY)\r\n            return true;\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Maps built-in parameter ids to the supported ids.  In general, this is an identity mapping, except for special\r\n      /// cases identified in the private function IsDuplicateParameter.\r\n      /// </summary>\r\n      /// <param name=\"parameterId\">The original parameter id.</param>\r\n      /// <returns>The supported parameter id.</returns>\r\n      static public ElementId MapParameterId(ElementId parameterId)\r\n      {\r\n         switch (parameterId.Value)\r\n         {\r\n            case ((long)BuiltInParameter.ELEM_CATEGORY_PARAM_MT):\r\n               return new ElementId(BuiltInParameter.ELEM_CATEGORY_PARAM);\r\n            case ((long)BuiltInParameter.DPART_ORIGINAL_CATEGORY):\r\n               return new ElementId(BuiltInParameter.DPART_ORIGINAL_CATEGORY_ID);\r\n         }\r\n         return parameterId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Cache the parameters for an element, allowing quick access later.\r\n      /// </summary>\r\n      /// <param name=\"id\">The element id.</param>\r\n      static private void CacheParametersForElement(ElementId id)\r\n      {\r\n         if (id == ElementId.InvalidElementId)\r\n            return;\r\n\r\n         if (m_Parameters.ContainsKey(id))\r\n            return;\r\n\r\n         IDictionary<string, ParameterElementCache> parameters = new SortedDictionary<string, ParameterElementCache>();\r\n\r\n         m_Parameters[id] = parameters;\r\n\r\n         Element element = ExporterCacheManager.Document.GetElement(id);\r\n         if (element == null)\r\n            return;\r\n\r\n         ParameterSet parameterIds = element.Parameters;\r\n         if (parameterIds.Size == 0)\r\n            return;\r\n\r\n         IDictionary<long, KeyValuePair<string, Parameter>> stableSortedParameterSet =\r\n            new SortedDictionary<long, KeyValuePair<string, Parameter>>();\r\n\r\n         // We will do two passes.  In the first pass, we will look at parameters in the IFC group.\r\n         // In the second pass, we will look at all other groups.\r\n         ParameterSetIterator parameterIt = parameterIds.ForwardIterator();\r\n\r\n         while (parameterIt.MoveNext())\r\n         {\r\n            Parameter parameter = parameterIt.Current as Parameter;\r\n            if (parameter == null)\r\n               continue;\r\n\r\n            if (IsDuplicateParameter(parameter))\r\n               continue;\r\n\r\n            Definition paramDefinition = parameter.Definition;\r\n            if (paramDefinition == null)\r\n               continue;\r\n\r\n            // Don't cache parameters that aren't visible to the user.\r\n            InternalDefinition internalDefinition = paramDefinition as InternalDefinition;\r\n            if (internalDefinition != null && internalDefinition.Visible == false)\r\n               continue;\r\n\r\n            string name = paramDefinition.Name;\r\n            if (string.IsNullOrWhiteSpace(name))\r\n               continue;\r\n\r\n            stableSortedParameterSet[parameter.Id.Value] = new KeyValuePair<string, Parameter>(name, parameter);\r\n         }\r\n\r\n         foreach (KeyValuePair<string, Parameter> stableSortedParameter in stableSortedParameterSet.Values)\r\n         {\r\n            Parameter parameter = stableSortedParameter.Value;\r\n            Definition paramDefinition = parameter.Definition;\r\n            string cleanPropertyName = NamingUtil.RemoveSpaces(stableSortedParameter.Key);\r\n\r\n            ForgeTypeId groupId = paramDefinition.GetGroupTypeId();\r\n            if (!parameters.TryGetValue(groupId.TypeId, out ParameterElementCache cacheForGroup))\r\n            {\r\n               cacheForGroup = new ParameterElementCache();\r\n               parameters[groupId.TypeId] = cacheForGroup;\r\n            }\r\n\r\n            // We may have situations (due to bugs) where a parameter with the same name appears multiple times.\r\n            // In this case, we will preserve the first parameter with a value.\r\n            // Note that this can still cause inconsistent behavior in the case where multiple parameters with the same\r\n            // name have values, and we should warn about that when we start logging.\r\n            if (!cacheForGroup.ParameterCache.ContainsKey(cleanPropertyName) ||\r\n               !cacheForGroup.ParameterCache[cleanPropertyName].HasValue)\r\n               cacheForGroup.ParameterCache[cleanPropertyName] = parameter;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Cache the parameters for an element's subelement (subelementHandle), allowing quick access later.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element id.</param>\r\n      /// <param name=\"subelementHandle\">The subelement ifc handle.</param>\r\n      /// <param name=\"param\">The element's parameter that we want to override.</param>\r\n      /// <param name=\"paramVal\">The override value.</param>\r\n      static public void CacheParameterValuesForSubelementHandle(ElementId elementId, IFCAnyHandle subelementHandle, Parameter param, ParameterValue paramVal)\r\n      {\r\n         if ((elementId == ElementId.InvalidElementId) ||\r\n             (subelementHandle == null) ||\r\n             (param == null) ||\r\n             (paramVal == null))\r\n            return;\r\n\r\n         if (IsDuplicateParameter(param))\r\n            return;\r\n\r\n         Definition paramDefinition = param.Definition;\r\n         if (paramDefinition == null)\r\n            return;\r\n\r\n         // Don't cache parameters that aren't visible to the user.\r\n         InternalDefinition internalDefinition = paramDefinition as InternalDefinition;\r\n         if (internalDefinition != null && internalDefinition.Visible == false)\r\n            return;\r\n\r\n         if (string.IsNullOrWhiteSpace(paramDefinition.Name))\r\n            return;\r\n\r\n         string cleanPropertyName = NamingUtil.RemoveSpaces(paramDefinition.Name);\r\n\r\n         IDictionary<IFCAnyHandle, ParameterValueSubelementCache> anyHandleParamValMap;\r\n         if (!m_SubelementParameterValueCache.TryGetValue(elementId, out anyHandleParamValMap))\r\n         {\r\n            anyHandleParamValMap = new Dictionary<IFCAnyHandle, ParameterValueSubelementCache>();\r\n            m_SubelementParameterValueCache[elementId] = anyHandleParamValMap;\r\n         }\r\n\r\n         ParameterValueSubelementCache paramCache;\r\n         if (!anyHandleParamValMap.TryGetValue(subelementHandle, out paramCache))\r\n         {\r\n            paramCache = new ParameterValueSubelementCache();\r\n            anyHandleParamValMap[subelementHandle] = paramCache;\r\n         }\r\n\r\n         ParameterValue cachedParamVal;\r\n         if (paramCache.ParameterValueCache.TryGetValue(cleanPropertyName, out cachedParamVal))\r\n            return;\r\n\r\n         paramCache.ParameterValueCache[cleanPropertyName] = paramVal;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Remove an element from the parameter cache, to save space.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element to be used.</param>\r\n      /// <remarks>Generally speaking, we expect to need to access an element's parameters in one pass (this is not true\r\n      /// for types, which could get accessed repeatedly).  As such, we are wasting space keeping an element's parameters cached\r\n      /// after it has already been exported.</remarks>\r\n      static public void RemoveElementFromCache(Element element)\r\n      {\r\n         if (element == null)\r\n            return;\r\n\r\n         ElementId id = element.Id;\r\n         m_Parameters.Remove(id);\r\n         m_SubelementParameterValueCache.Remove(id);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the parameter by name from an element.\r\n      /// </summary>\r\n      /// <param name=\"elemId\">The element id.</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <returns>The Parameter.</returns>\r\n      internal static Parameter GetParameterFromName(ElementId elemId, string propertyName)\r\n      {\r\n         if (!m_Parameters.ContainsKey(elemId))\r\n            CacheParametersForElement(elemId);\r\n\r\n         return getParameterByNameFromCache(elemId, propertyName);\r\n      }\r\n\r\n      private static HashSet<BuiltInParameter> MisleadingParameters { get; } =\r\n         new HashSet<BuiltInParameter>()\r\n         {\r\n            BuiltInParameter.ANALYTICAL_ROUGHNESS,\r\n            BuiltInParameter.DUCT_ROUGHNESS,\r\n            BuiltInParameter.PIPE_ROUGHNESS,\r\n            BuiltInParameter.ELEM_CATEGORY_PARAM\r\n         };\r\n\r\n      internal static Parameter ValidateParameter(Parameter parameter)\r\n      {\r\n         if (MisleadingParameters.Contains((BuiltInParameter)parameter.Id.Value))\r\n            return null;\r\n         return parameter;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the parameter by name from an element for a specific parameter group.\r\n      /// </summary>\r\n      /// <param name=\"elemId\">The element id.</param>\r\n      /// <param name=\"group\">The parameter group.</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <returns>The Parameter.</returns>\r\n      internal static Parameter GetParameterFromName(ElementId elemId, ForgeTypeId group, \r\n         string propertyName)\r\n      {\r\n         if (!m_Parameters.ContainsKey(elemId))\r\n            CacheParametersForElement(elemId);\r\n\r\n         return getParameterByNameFromCache(elemId, group, propertyName);\r\n      }\r\n\r\n      private static Parameter GetStringValueFromElementOrSymbolBase(Element element, Element elementType, string propertyName, bool allowUnset, \r\n         out string propertyValue, params string[] alternateNames)\r\n      {\r\n         Parameter parameter = GetStringValueFromElementBase(element, propertyName, allowUnset, out propertyValue);\r\n         if (parameter == null && alternateNames != null && alternateNames.Length > 0)\r\n         {\r\n            foreach (string altName in alternateNames)\r\n            {\r\n               parameter = GetStringValueFromElementBase(element, altName, allowUnset, out propertyValue);\r\n               if (parameter != null)\r\n                  return parameter;\r\n            }\r\n         }\r\n         else if (parameter != null && !string.IsNullOrEmpty(propertyValue))\r\n               return parameter;\r\n\r\n         if (elementType == null)\r\n            elementType = element.Document.GetElement(element.GetTypeId());\r\n\r\n         if (elementType != null)\r\n         {\r\n            parameter = GetStringValueFromElementBase(elementType, propertyName, allowUnset, out propertyValue);\r\n            if (parameter == null)\r\n               parameter = GetStringValueFromElementBase(elementType, propertyName + \"[Type]\", allowUnset, out propertyValue);\r\n\r\n            if (parameter == null && alternateNames != null && alternateNames.Length > 0)\r\n            {\r\n               foreach (string altName in alternateNames)\r\n               {\r\n                  parameter = GetStringValueFromElementBase(elementType, altName, allowUnset, out propertyValue);\r\n                  if (parameter == null)\r\n                     parameter = GetStringValueFromElementBase(elementType, altName + \"[Type]\", allowUnset, out propertyValue);\r\n\r\n                  if (parameter != null)\r\n                     return parameter;\r\n               }\r\n            }\r\n         }\r\n\r\n         return parameter;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets string value from parameter of an element or its element type.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <param name=\"alternateNames\">the variable array of alternate names mainly to support backward compatibility</param>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetStringValueFromElementOrSymbol(Element element, string propertyName, out string propertyValue, params string[] alternateNames)\r\n      {\r\n         return GetStringValueFromElementOrSymbolBase(element, null, propertyName, false, out propertyValue, alternateNames);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets string value from parameter of an element or its element type.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <param name=\"alternateNames\">the variable array of alternate names mainly to support backward compatibility</param>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetStringValueFromElementOrSymbol(Element element, Element elementType, string propertyName, out string propertyValue, params string[] alternateNames)\r\n      {\r\n         return GetStringValueFromElementOrSymbolBase(element, elementType, propertyName, false, out propertyValue, alternateNames);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets string value from parameter of an element or its element type, which is allowed to be optional.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"propertyValue\">The output property value.</param>\r\n      /// <param name=\"alternateNames\">the variable array of alternate names mainly to support backward compatibility</param>\r\n      /// <returns>The parameter, or null if not found.</returns>\r\n      public static Parameter GetOptionalStringValueFromElementOrSymbol(Element element, string propertyName, out string propertyValue, params string[] alternateNames)\r\n      {\r\n         return GetStringValueFromElementOrSymbolBase(element, null, propertyName, true, out propertyValue, alternateNames);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets integer value from parameter of an element or its element type.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element, which can be null.</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"alternateNames\">the variable array of alternate names mainly to support backward compatibility</param>\r\n      /// <returns>The property value, or null if not found.</returns>\r\n      public static int? GetIntValueFromElementOrSymbol(Element element, string propertyName, params string[] alternateNames)\r\n      {\r\n         if (element == null || string.IsNullOrEmpty(propertyName))\r\n            return null;\r\n\r\n         int propertyValue = 0;\r\n         Parameter parameter = GetIntValueFromElement(element, propertyName, out propertyValue);\r\n         if (parameter == null && alternateNames != null && alternateNames.Length > 0)\r\n         {\r\n            foreach (string altName in alternateNames)\r\n            {\r\n               parameter = GetIntValueFromElement(element, altName, out propertyValue);\r\n               if (parameter != null)\r\n                  return propertyValue;\r\n            }\r\n         }\r\n         else if (parameter != null)\r\n            return propertyValue;\r\n\r\n         bool isElementType = element is ElementType;\r\n         Element elemType = null;\r\n\r\n         if (!isElementType)\r\n         {\r\n            elemType = element.Document.GetElement(element.GetTypeId());\r\n            if (elemType != null)\r\n            {\r\n               parameter = GetIntValueFromElement(elemType, propertyName, out propertyValue);\r\n               if (parameter == null && alternateNames != null && alternateNames.Length > 0)\r\n               {\r\n                  foreach (string altName in alternateNames)\r\n                  {\r\n                     parameter = GetIntValueFromElement(element, altName, out propertyValue);\r\n                     if (parameter != null)\r\n                        return propertyValue;\r\n                  }\r\n               }\r\n               else if (parameter != null)\r\n                  return propertyValue;\r\n            }\r\n         }\r\n         else\r\n         {\r\n            elemType = element;\r\n         }\r\n\r\n         if (elemType != null)\r\n         {\r\n            parameter = GetIntValueFromElement(elemType, propertyName + \"[Type]\", out propertyValue);\r\n            if (parameter == null && alternateNames != null && alternateNames.Length > 0)\r\n            {\r\n               foreach (string altName in alternateNames)\r\n               {\r\n                  parameter = GetIntValueFromElement(element, altName + \"[Type]\", out propertyValue);\r\n                  if (parameter != null)\r\n                     return propertyValue;\r\n               }\r\n            }\r\n            else if (parameter != null)\r\n               return propertyValue;\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// This method returns a special parameter for Offset found in the FamilySymbol that influence the CurtainWall Panel position.\r\n      /// </summary>\r\n      /// <param name=\"the familySymbol\"></param>\r\n      /// <returns>maximum Offset value if there are more than one parameters of the same name</returns>\r\n      public static double GetSpecialOffsetParameter(FamilySymbol familySymbol)\r\n      {\r\n         // This method is isolated here so that it can adopt localized parameter name as necessary\r\n         double maxOffset = 0.0;\r\n\r\n         Parameter paramOffset = familySymbol.GetParameter(ParameterTypeId.FamilyTopLevelOffsetParam);\r\n         if (paramOffset != null)\r\n         {\r\n            maxOffset = paramOffset.AsDouble();\r\n         }\r\n         else\r\n         {\r\n            string offsetParameterName = \"Offset\";\r\n\r\n            // In case there are more than one parameter of the same name, we will get one value that is the largest\r\n            IList<Parameter> offsetParams = familySymbol.GetParameters(offsetParameterName);\r\n            foreach (Parameter offsetP in offsetParams)\r\n            {\r\n               double offset = offsetP.AsDouble();\r\n               if (offset > maxOffset)\r\n                  maxOffset = offset;\r\n            }\r\n         }\r\n\r\n         return maxOffset;\r\n      }\r\n\r\n      /// <summary>\r\n      /// This method returns a special parameter for Material Thickness found in the FamilySymbol that influence the CurtainWall Panel thickness.\r\n      /// </summary>\r\n      /// <param name=\"familySymbol\">the familySymbol</param>\r\n      /// <returns>thickness</returns>\r\n      public static double GetSpecialThicknessParameter(FamilySymbol familySymbol)\r\n      {\r\n         // This method is isolated here so that it can adopt localized parameter name as necessary\r\n\r\n         double thicknessValue = 0.0;\r\n\r\n         Parameter paramThickness = familySymbol.GetParameter(ParameterTypeId.FamilyThicknessParam);\r\n         if (paramThickness != null)\r\n         {\r\n            thicknessValue = paramThickness.AsDouble();\r\n         }\r\n         else\r\n         {\r\n            string thicknessParameterName = \"Thickness\";\r\n            IList<Parameter> thicknessParams = familySymbol.GetParameters(thicknessParameterName);\r\n\r\n            foreach (Parameter thicknessP in thicknessParams)\r\n            {\r\n               // If happens there are more than 1 param with the same name, we will arbitrary choose the thickest value\r\n               double thickness = thicknessP.AsDouble();\r\n               if (thickness > thicknessValue)\r\n                  thicknessValue = thickness;\r\n            }\r\n         }\r\n\r\n         return thicknessValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get override containment value through a parameter \"IfcSpatialContainer\" or \"OverrideElementContainer\". \r\n      /// Value can be \"IFCSITE\", \"IFCBUILDING\", or the appropriate Level name.\r\n      /// </summary>\r\n      /// <param name=\"element\">The input element.</param>\r\n      /// <param name=\"overrideContainerHnd\">The entity handle of the container.</param>\r\n      /// <returns>The element id of the container.</returns>\r\n      public static ElementId OverrideContainmentParameter(Element element, out IFCAnyHandle overrideContainerHnd)\r\n      {\r\n         overrideContainerHnd = null;\r\n\r\n         if (element == null)\r\n         {\r\n            return ElementId.InvalidElementId;\r\n         }\r\n\r\n         // Special case whether an object should be assigned to the Site or Building container\r\n         if (GetStringValueFromElement(element, \"OverrideElementContainer\", out string containerOverrideName) == null)\r\n         {\r\n            GetStringValueFromElement(element, \"IfcSpatialContainer\", out containerOverrideName);\r\n         }\r\n\r\n         (ElementId containerElemId, overrideContainerHnd) = LevelUtil.FindContainer(containerOverrideName);\r\n         return containerElemId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get override containment value through a parameter \"IfcSpatialContainer\" or \"OverrideElementContainer\". \r\n      /// Value can be \"IFCSITE\", \"IFCBUILDING\", or the appropriate Level name, given an IfcSpace entity handle.\r\n      /// </summary>\r\n      /// <param name=\"document\">The document containing the element corresponding the the IfcSpace handle.</param>\r\n      /// <param name=\"spaceHnd\">The entity handle of the IfcSpace.</param>\r\n      /// <param name=\"overrideContainerHnd\">The entity handle of the container.</param>\r\n      /// <returns>The element id of the container.</returns>\r\n      public static ElementId OverrideSpaceContainmentParameter(Document document,\r\n         IFCAnyHandle spaceHnd, out IFCAnyHandle overrideContainerHnd)\r\n      {\r\n         ElementId spaceId = ExporterCacheManager.HandleToElementCache.Find(spaceHnd);\r\n         Element elem = document.GetElement(spaceId);\r\n         return ParameterUtil.OverrideContainmentParameter(elem, out overrideContainerHnd);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the if parameter data type is equal to forgeTypeId\r\n      /// </summary>\r\n      /// <param name=\"parameter\">The parameter.</param>\r\n      /// <param name=\"forgeTypeId\">The ForgeTypeId.</param>\r\n      /// <returns>True if parameter data type is equal to forgeTypeId.</returns>\r\n      public static bool ParameterDataTypeIsEqualTo(Parameter parameter, ForgeTypeId forgeTypeId)\r\n      {\r\n         return (parameter.Definition != null && parameter.Definition.GetDataType() == forgeTypeId);\r\n      }\r\n\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/PartExportedCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of the exported Parts.\r\n   /// </summary>\r\n   public class PartExportedCache\r\n   {\r\n      /// <summary>\r\n      /// The dictionary mapping from a exported part and it's level and host element. \r\n      /// </summary>\r\n      private Dictionary<ElementId, Dictionary<ElementId, ElementId>> PartExportedDictionary { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// Find the host element from a part and a level.\r\n      /// </summary>\r\n      /// <param name=\"partId\">The part exported.</param>\r\n      /// <param name=\"LevelId\">The level to which the part has exported.</param>\r\n      /// <returns>The host element.</returns>\r\n      public ElementId Find(ElementId partId, ElementId LevelId)\r\n      {\r\n         Dictionary<ElementId, ElementId> hostOverrideLevels;\r\n         ElementId hostId;\r\n         if (PartExportedDictionary.TryGetValue(partId, out hostOverrideLevels))\r\n         {\r\n            if (hostOverrideLevels.TryGetValue(LevelId, out hostId))\r\n               return hostId;\r\n         }\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the part in the level has exported or not.\r\n      /// </summary>\r\n      /// <param name=\"partId\">The part.</param>\r\n      /// <param name=\"LevelId\">The level to export.</param>\r\n      /// <returns>True if the part in the level has exported, false otherwise.</returns>\r\n      public bool HasExported(ElementId partId, ElementId LevelId)\r\n      {\r\n         return Find(partId, LevelId) != null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Register the exported part and its host and level.\r\n      /// </summary>\r\n      /// <param name=\"partId\">The exported part.</param>\r\n      /// <param name=\"hostOverrideLevels\">The dictionary of host and level the part has exported.</param>\r\n      public void Register(ElementId partId, Dictionary<ElementId, ElementId> hostOverrideLevels)\r\n      {\r\n         if (HasRegistered(partId))\r\n            return;\r\n\r\n         PartExportedDictionary[partId] = hostOverrideLevels;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Identifies if the part element been registered.\r\n      /// </summary>\r\n      /// <param name=\"hostId\">The id of part element.</param>\r\n      /// <returns>True if registered, false otherwise.</returns>\r\n      public bool HasRegistered(ElementId partId)\r\n      {\r\n         return PartExportedDictionary.ContainsKey(partId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add the exported part to the cache.\r\n      /// </summary>\r\n      /// <param name=\"partId\">The exported part.</param>\r\n      /// <param name=\"levelId\">The level to which the part has exported.</param>\r\n      /// <param name=\"hostId\">The host element the part has exported.</param>\r\n      public void Add(ElementId partId, ElementId levelId, ElementId hostId)\r\n      {\r\n         PartExportedDictionary[partId].Add(levelId, hostId);\r\n      }\r\n\r\n      public void Clear()\r\n      {\r\n         PartExportedDictionary.Clear();\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/PartOrGeometry.cs",
    "content": "﻿using Autodesk.Revit.DB;\n\nnamespace Revit.IFC.Export.Utility\n{\n   /// <summary>\n   /// A simple class to store part element or its geometry.\n   /// </summary>\n   public class PartOrGeometry\n   {\n      /// <summary>\n      /// The Part element\n      /// </summary>\n      public Part Part { get; private set; } = null;\n\n      /// <summary>\n      /// The Geometry element\n      /// </summary>\n      public GeometryElement GeometryElement { get; private set; } = null;\n\n      public PartOrGeometry(Part part)\n      {\n         Part = part;\n      }\n\n      public PartOrGeometry(GeometryElement geometryElement)\n      {\n         GeometryElement = geometryElement;\n      }\n\n      public bool IsPart { get { return Part != null; } }\n\n      public bool IsGeometry { get { return GeometryElement != null; } }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/PresentationLayerSetCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of IfcRepresentation handles for a layer name.\r\n   /// </summary>\r\n   public class PresentationLayerSetCache : Dictionary<string, ICollection<IFCAnyHandle>>\r\n   {\r\n      public void AddRepresentationToLayer(string layerName, IFCAnyHandle repHnd)\r\n      {\r\n         // Not supported for IFC2x2.\r\n         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2)\r\n            return;\r\n\r\n         if (string.IsNullOrWhiteSpace(layerName))\r\n            throw new ArgumentException(\"Empty or null layer name.\");\r\n\r\n         ICollection<IFCAnyHandle> layerList = null;\r\n         if (!TryGetValue(layerName, out layerList))\r\n         {\r\n            layerList = new HashSet<IFCAnyHandle>();\r\n            this[layerName] = layerList;\r\n         }\r\n         layerList.Add(repHnd);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/PresentationStyleAssignmentCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of the IfcPresentationStyleAssignment handles mapping to a text element type in Revit.\r\n   /// </summary>\r\n   public class PresentationStyleAssignmentCache\r\n   {\r\n      /// <summary>\r\n      /// The dictionary mapping from a text element type to an IfcPresentationStyleAssignment handle. \r\n      /// </summary>\r\n      private Dictionary<ElementId, IFCAnyHandle> Styles { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// Constructs a default PresentationStyleAssignmentCache object.\r\n      /// </summary>\r\n      public PresentationStyleAssignmentCache()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds the IfcPresentationStyleAssignment handle for a particular material.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The Material's element id.</param>\r\n      /// <returns>The IfcPresentationStyleAssignment handle.</returns>\r\n      public IFCAnyHandle Find(ElementId materialId)\r\n      {\r\n         IFCAnyHandle presentationStyleAssignment;\r\n         if (Styles.TryGetValue(materialId, out presentationStyleAssignment))\r\n         {\r\n            // Make sure the handle isn't stale.\r\n            try\r\n            {\r\n               bool isPSA = (IFCAnyHandleUtil.IsSubTypeOf(presentationStyleAssignment, IFCEntityType.IfcPresentationStyleAssignment)\r\n                          || IFCAnyHandleUtil.IsSubTypeOf(presentationStyleAssignment, IFCEntityType.IfcPresentationStyle));\r\n               if (isPSA)\r\n                  return presentationStyleAssignment;\r\n            }\r\n            catch\r\n            {\r\n            }\r\n\r\n            Styles.Remove(materialId);\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds the IfcPresentationStyleAssignment handle to the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element elementId.</param>\r\n      /// <param name=\"handle\">The IfcPresentationStyleAssignment handle.</param>\r\n      public void Register(ElementId elementId, IFCAnyHandle handle)\r\n      {\r\n         if (Styles.ContainsKey(elementId))\r\n            throw new Exception(\"TextStyleCache already contains handle for elementId \" + elementId);\r\n\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(handle))\r\n            Styles[elementId] = handle;\r\n         else\r\n            throw new Exception(\"Invalid Handle.\");\r\n      }\r\n\r\n      public void Clear()\r\n      {\r\n         Styles.Clear();\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ProductWrapper.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Export.Toolkit;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// A multi-purpose wrapper used within the export of an element to:\r\n   /// 1. Associate IFC handles to their container (e.g., levels, buildings)\r\n   /// 2. Create properties and quantities for top-level handles.\r\n   /// </summary>\r\n   /// <remarks>The intention of this class is to phase out the use of IFCProductWrapper.  As long as handles are created in native code,\r\n   /// IFCProductWrapper will be necessary, but it should be used for as little as possible.  Note that items added directly to the\r\n   /// ProductWrapper and not the internal IFCProductWrapper will not show up on entity counters in journal files.</remarks>\r\n   public class ProductWrapper :IDisposable\r\n   {\r\n      HashSet<IFCAnyHandle> CreatedHandles { get; set; } = new HashSet<IFCAnyHandle>();\r\n\r\n      IDictionary<Element, HashSet<IFCAnyHandle>> PropertySetsToCreate { get; set; } = new Dictionary<Element, HashSet<IFCAnyHandle>>();\r\n\r\n      Dictionary<Tuple<ElementType, IFCExportInfoPair>, KeyValuePair<IFCAnyHandle, HashSet<IFCAnyHandle>>>\r\n         ElementTypeHandles { get; set; } = new Dictionary<Tuple<ElementType, IFCExportInfoPair>, KeyValuePair<IFCAnyHandle, HashSet<IFCAnyHandle>>>();\r\n\r\n\r\n      IFCProductWrapper InternalWrapper { get; set; } = null;\r\n\r\n      ProductWrapper ParentWrapper { get; set; } = null;\r\n\r\n      ExporterIFC ExporterIFC { get; set; } = null;\r\n\r\n      protected ProductWrapper(ExporterIFC exporterIFC)\r\n      {\r\n         ExporterIFC = exporterIFC;\r\n      }\r\n\r\n      private void RegisterHandleWithElement(Element element, IFCAnyHandle handle, \r\n         IFCExportInfoPair exportType = null)\r\n      {\r\n         if (element == null || IFCAnyHandleUtil.IsNullOrHasNoValue(handle))\r\n            return;\r\n         \r\n         if (!PropertySetsToCreate.TryGetValue(element, out HashSet<IFCAnyHandle> propertySetToCreate))\r\n         {\r\n            propertySetToCreate = new HashSet<IFCAnyHandle>();\r\n            PropertySetsToCreate[element] = propertySetToCreate;\r\n         }\r\n         propertySetToCreate.Add(handle);\r\n\r\n         ExporterCacheManager.ElementToHandleCache.Register(element.Id, handle, exportType);\r\n         ExporterCacheManager.HandleToElementCache.Register(handle, element.Id);\r\n\r\n         if (SpatialElementExporter.IsZoneCompatible(exportType))\r\n         {\r\n            IFCFile file = ExporterIFC.GetFile();\r\n            SpatialElementExporter.CreateZoneInfos(file, element, handle);\r\n            SpatialElementExporter.CreateSpaceOccupantInfo(file, element, handle);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Register an ElementType with the ProductWrapper, to create its property sets on Dispose.\r\n      /// </summary>\r\n      /// <param name=\"elementType\">The element type.</param>\r\n      /// <param name=\"prodTypeHnd\">The handle.</param>\r\n      /// <param name=\"existingPropertySets\">Any existing propertysets.</param>\r\n      public void RegisterHandleWithElementType(ElementType elementType, IFCExportInfoPair exportType, \r\n         IFCAnyHandle prodTypeHnd, HashSet<IFCAnyHandle> existingPropertySets)\r\n      {\r\n         Tuple<ElementType, IFCExportInfoPair> elTypeKey = new Tuple<ElementType, IFCExportInfoPair>(elementType, exportType);\r\n         if (elTypeKey.Item1 == null || IFCAnyHandleUtil.IsNullOrHasNoValue(prodTypeHnd))\r\n            return;\r\n\r\n         KeyValuePair<IFCAnyHandle, HashSet<IFCAnyHandle>> elementTypeHandle;\r\n         if (ElementTypeHandles.TryGetValue(elTypeKey, out elementTypeHandle))\r\n            return;\r\n      \r\n         ElementTypeHandles[elTypeKey] = new KeyValuePair<IFCAnyHandle, HashSet<IFCAnyHandle>>(prodTypeHnd, existingPropertySets);\r\n\r\n         // In addition, add it to the ElementTypeToHandleCache.\r\n         ExporterCacheManager.ElementTypeToHandleCache.Register(elementType, exportType, prodTypeHnd);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Standard static Create function. \r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"allowRelateToLevel\">Whether or not handles are allowed to be related to levels.</param>\r\n      /// <returns>A new ProductWrapper.</returns>\r\n      public static ProductWrapper Create(ExporterIFC exporterIFC, bool allowRelateToLevel)\r\n      {\r\n         ProductWrapper productWrapper = new ProductWrapper(exporterIFC);\r\n         productWrapper.InternalWrapper = IFCProductWrapper.Create(exporterIFC, allowRelateToLevel);\r\n         return productWrapper;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Static Create function for a child wrapper.\r\n      /// </summary>\r\n      /// <param name=\"parentWrapper\">The parent wrapper.</param>\r\n      /// <returns>A new ProductWrapper.</returns>\r\n      public static ProductWrapper Create(ProductWrapper parentWrapper)\r\n      {\r\n         ProductWrapper productWrapper = new ProductWrapper(parentWrapper.ExporterIFC);\r\n         productWrapper.InternalWrapper = IFCProductWrapper.Create(parentWrapper.InternalWrapper);\r\n         productWrapper.ParentWrapper = parentWrapper;\r\n         return productWrapper;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Static Create function for a child wrapper, with a different allowRelateToLevel value.\r\n      /// </summary>\r\n      /// <param name=\"parentWrapper\">The parent wrapper.</param>\r\n      /// <param name=\"allowRelateToLevel\">Whether or not handles are allowed to be related to levels.</param>\r\n      /// <returns>A new ProductWrapper.</returns>\r\n      public static ProductWrapper Create(ProductWrapper parentWrapper, bool allowRelateToLevel)\r\n      {\r\n         ProductWrapper productWrapper = new ProductWrapper(parentWrapper.ExporterIFC);\r\n         productWrapper.InternalWrapper = IFCProductWrapper.Create(parentWrapper.InternalWrapper, allowRelateToLevel);\r\n         productWrapper.ParentWrapper = parentWrapper;\r\n         return productWrapper;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the internal IFCProductWrapper, for use as arguments to native functions.\r\n      /// </summary>\r\n      /// <returns>The internal IFCProductWrapper.</returns>\r\n      public IFCProductWrapper ToNative()\r\n      {\r\n         return InternalWrapper;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets an arbitrary handle from the wrapper, if one exists.\r\n      /// </summary>\r\n      /// <returns>The handle, or null if no handle exists.</returns>\r\n      /// <remarks>Generally intended for when there is only one handle in the wrapper.</remarks>\r\n      public IFCAnyHandle GetAnElement()\r\n      {\r\n         if (CreatedHandles.Count > 0)\r\n         {\r\n            foreach (IFCAnyHandle firstHandle in CreatedHandles)\r\n               return firstHandle;\r\n         }\r\n\r\n         return InternalWrapper.GetAnElement();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines whether there are any handles associated with the wrapper.\r\n      /// </summary>\r\n      /// <returns>True if it is empty, false otherwise.</returns>\r\n      public bool IsEmpty()\r\n      {\r\n         return ((CreatedHandles.Count == 0) && (InternalWrapper.Count == 0));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get all handles in the wrapper.\r\n      /// </summary>\r\n      /// <returns>The collection of handles.</returns>\r\n      public ISet<IFCAnyHandle> GetAllObjects()\r\n      {\r\n         ICollection<IFCAnyHandle> internalObjects = InternalWrapper.GetAllObjects();\r\n         if (internalObjects.Count == 0)\r\n            return CreatedHandles;\r\n\r\n         HashSet<IFCAnyHandle> allObjects = new HashSet<IFCAnyHandle>();\r\n\r\n         // We aren't going to trust that the handles aren't stale.  This needs a rewrite\r\n         // of disposal of entities, and in general a move to .NET only created entities.\r\n         foreach (IFCAnyHandle internalObject in internalObjects)\r\n         {\r\n            allObjects.AddIfNotNull(internalObject);\r\n         }\r\n\r\n         allObjects.UnionWith(CreatedHandles);\r\n         return allObjects;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add a generic element to the wrapper, and create associated internal property sets if option is set.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      public void AddElement(Element element, IFCAnyHandle handle, IFCExportInfoPair exportType, bool register = true)\r\n      {\r\n         CreatedHandles.Add(handle);\r\n         if (register)\r\n            RegisterHandleWithElement(element, handle, exportType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add a generic element to the wrapper, with associated setter and extrusion data information, and create associated internal property sets if option is set.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"handle\">The element handle.</param>\r\n      /// <param name=\"setter\">The placement setter.</param>\r\n      /// <param name=\"data\">The extrusion creation data (can be null.)</param>\r\n      /// <param name=\"relateToLevel\">Relate to the level in the setter, or not.</param>\r\n      public void AddElement(Element element, IFCAnyHandle handle, PlacementSetter setter, IFCExportBodyParams data, bool relateToLevel, \r\n         IFCExportInfoPair exportType, bool register = true)\r\n      {\r\n         // There is a bug in the internal AddElement that requires us to do a levelInfo null check here.\r\n         IFCLevelInfo levelInfo = setter.LevelInfo;\r\n         bool actuallyRelateToLevel = relateToLevel && (levelInfo != null);\r\n         InternalWrapper.AddElement(handle, levelInfo, data?.Data, actuallyRelateToLevel);\r\n         if (levelInfo == null && relateToLevel)\r\n            ExporterCacheManager.LevelInfoCache.OrphanedElements.Add(handle);\r\n         if (register)\r\n            RegisterHandleWithElement(element, handle, exportType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add a generic element to the wrapper, with associated level and extrusion data information, and create associated internal property sets if option is set.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"handle\">The element handle.</param>\r\n      /// <param name=\"levelInfo\">The level information.</param>\r\n      /// <param name=\"data\">The extrusion creation data (can be null.)</param>\r\n      /// <param name=\"relateToLevel\">Relate to the level in the setter, or not.</param>\r\n      public void AddElement(Element element, IFCAnyHandle handle, IFCLevelInfo levelInfo, IFCExportBodyParams data, bool relateToLevel, \r\n         IFCExportInfoPair exportType, bool register = true)\r\n      {\r\n         // There is a bug in the internal AddElement that requires us to do a levelInfo null check here.\r\n         bool actuallyRelateToLevel = relateToLevel && (levelInfo != null);\r\n         InternalWrapper.AddElement(handle, levelInfo, data?.Data, actuallyRelateToLevel);\r\n         if (levelInfo == null && relateToLevel)\r\n            ExporterCacheManager.LevelInfoCache.OrphanedElements.Add(handle);\r\n         if (register)\r\n            RegisterHandleWithElement(element, handle, exportType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add a space to the wrapper, with associated level and extrusion data information.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"handle\">The element handle.</param>\r\n      /// <param name=\"levelInfo\">The level information.</param>\r\n      /// <param name=\"data\">The extrusion creation data (can be null.)</param>\r\n      /// <param name=\"relateToLevel\">Relate to the level in the setter, or not.</param>\r\n      public void AddSpace(Element element, IFCAnyHandle handle, IFCLevelInfo levelInfo, IFCExportBodyParams data, bool relateToLevel, IFCExportInfoPair exportType)\r\n      {\r\n         bool actuallyRelateToLevel = relateToLevel && (levelInfo != null);\r\n         InternalWrapper.AddSpace(handle, levelInfo, data?.Data, actuallyRelateToLevel);\r\n         if (levelInfo == null && relateToLevel)\r\n            ExporterCacheManager.LevelInfoCache.OrphanedSpaces.Add(handle);\r\n         RegisterHandleWithElement(element, handle, exportType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds an annotation handle to associate with the IfcProduct in this wrapper.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The annotation handle.</param>\r\n      /// <param name=\"levelInfo\">The level information, can be null if relateToLevel is false.</param>\r\n      /// <param name=\"relateToLevel\">Whether the annotation is contained in a level.</param>\r\n      public void AddAnnotation(IFCAnyHandle handle, IFCLevelInfo levelInfo, bool relateToLevel)\r\n      {\r\n         // The internal AddAnnotation takes an optional levelInfo, so we don't need to do a levelInfo null check here.\r\n         InternalWrapper.AddAnnotation(handle, levelInfo, relateToLevel);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a building handle to this wrapper.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"handle\">The building handle.</param>\r\n      public void AddBuilding(Element element, IFCAnyHandle handle)\r\n      {\r\n         RegisterHandleWithElement(element, handle);\r\n         InternalWrapper.AddBuilding(handle);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a system handle to this wrapper.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"handle\">The building handle.</param>\r\n      public void AddSystem(Element element, IFCAnyHandle handle)\r\n      {\r\n         RegisterHandleWithElement(element, handle);\r\n         CreatedHandles.Add(handle);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a site (IfcObject) handle to associate with the IfcProduct in this wrapper.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"handle\">The site handle.</param>\r\n      public void AddSite(Element element, IFCAnyHandle handle)\r\n      {\r\n         RegisterHandleWithElement(element, handle);\r\n         InternalWrapper.AddSite(handle);\r\n      }\r\n\r\n      public void AddProject(Element element, IFCAnyHandle handle)\r\n      {\r\n         CreatedHandles.Add(handle);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add temporary part handle to associate with the IfcProduct in this wrapper.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The element handle.</param>\r\n      /// <param name=\"setter\">The placement setter.</param>\r\n      /// <param name=\"data\">The extrusion creation data (can be null.)</param>\r\n      /// <param name=\"relateToLevel\">Relate to the level in the setter, or not.</param>\r\n      public void AddPart(IFCAnyHandle handle, PlacementSetter setter, IFCExportBodyParams data, bool relateToLevel)\r\n      {\r\n         IFCLevelInfo levelInfo = setter.LevelInfo;\r\n         bool actuallyRelateToLevel = relateToLevel && (levelInfo != null);\r\n         InternalWrapper.AddElement(handle, levelInfo, data?.Data, actuallyRelateToLevel);\r\n         if (levelInfo == null && relateToLevel)\r\n            ExporterCacheManager.LevelInfoCache.OrphanedElements.Add(handle);\r\n         CreatedHandles.Add(handle);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a material handle to associate with the IfcProduct in this wrapper.\r\n      /// </summary>\r\n      /// <param name=\"materialHnd\"></param>\r\n      public void AddFinishMaterial(IFCAnyHandle materialHnd)\r\n      {\r\n         InternalWrapper.AddFinishMaterial(materialHnd);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Clear finish materials in this wrapper.\r\n      /// </summary>\r\n      public void ClearFinishMaterials()\r\n      {\r\n         InternalWrapper.ClearFinishMaterials();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the extrusion creation data associated with a handle.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <returns>The extrusion creation data, or null.</returns>\r\n      public IFCExportBodyParams FindExtrusionCreationParameters(IFCAnyHandle handle)\r\n      {\r\n         return new IFCExportBodyParams(InternalWrapper.FindExtrusionCreationParameters(handle));\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Dispose function, to do bookkeeping at end of \"using\" block.\r\n      /// </summary>\r\n      public void Dispose()\r\n      {\r\n         // If we have a parent wrapper, postpone creating property set so that we\r\n         // don't create the same property sets multiple times.\r\n         if (ParentWrapper != null)\r\n         {\r\n            foreach (var propertySetToCreate in PropertySetsToCreate)\r\n            {\r\n               if (!ParentWrapper.PropertySetsToCreate.TryGetValue(propertySetToCreate.Key, \r\n                  out HashSet<IFCAnyHandle> handles))\r\n               {\r\n                  handles = new HashSet<IFCAnyHandle>();\r\n                  ParentWrapper.PropertySetsToCreate.Add(propertySetToCreate.Key, handles);\r\n               }\r\n               handles.UnionWith(propertySetToCreate.Value);\r\n            }\r\n\r\n            ParentWrapper.CreatedHandles.UnionWith(CreatedHandles);\r\n\r\n            foreach (var elementTypeHandle in ElementTypeHandles)\r\n            {\r\n               if (ParentWrapper.ElementTypeHandles.ContainsKey(elementTypeHandle.Key))\r\n                  continue;\r\n               \r\n               ParentWrapper.ElementTypeHandles[elementTypeHandle.Key] = elementTypeHandle.Value;\r\n            }\r\n         }\r\n         else\r\n         {\r\n            foreach (var propertySetToCreate in PropertySetsToCreate)\r\n            {\r\n               PropertyUtil.CreateInternalRevitPropertySets(ExporterIFC, propertySetToCreate.Key, propertySetToCreate.Value, false);\r\n            }\r\n\r\n            foreach (var elementTypeHandle in ElementTypeHandles)\r\n            {\r\n               PropertyUtil.CreateElementTypeProperties(ExporterIFC, elementTypeHandle.Key.Item1, elementTypeHandle.Value.Value, elementTypeHandle.Value.Key);\r\n            }\r\n         }\r\n\r\n         InternalWrapper.Dispose();\r\n      }\r\n\r\n      private ProductWrapper()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Clear propertyset assignments to the internal Handle stored in the wrapper if it is incomplete\r\n      /// </summary>\r\n      /// <param name=\"element\">the element</param>\r\n      public void ClearInternalHandleWrapperData(Element element)\r\n      {\r\n         if (InternalWrapper.Count > 0)\r\n         {\r\n            HashSet<IFCAnyHandle> propertySetToCreate = null;\r\n            if (PropertySetsToCreate.TryGetValue(element, out propertySetToCreate))\r\n            {\r\n               ICollection<IFCAnyHandle> internalObjects = InternalWrapper.GetAllObjects();\r\n               foreach (IFCAnyHandle internalObj in internalObjects)\r\n               {\r\n                  propertySetToCreate.Remove(internalObj);\r\n               }\r\n            }\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/PropertyInfoCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Manages caches necessary for caching properties for IFC export.\r\n   /// </summary>\r\n   public class PropertyInfoCache\r\n   {\r\n      private Dictionary<PropertyType, DoublePropertyInfoCache> DoubleCacheMap { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// The StringPropertyInfoCache object.\r\n      /// </summary>\r\n      private Dictionary<PropertyType, StringPropertyInfoCache> StringCacheMap { get; set; } = new();\r\n\r\n      /// <summary>\r\n      /// The BooleanPropertyInfoCache object.\r\n      /// </summary>\r\n      public BooleanPropertyInfoCache BooleanCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The LogicalPropertyInfoCache object.\r\n      /// </summary>\r\n      public LogicalPropertyInfoCache LogicalCache { get; private set; } = new();\r\n      /// <summary>\r\n      /// The IntegerPropertyInfoCache object.\r\n      /// </summary>\r\n      public IntegerPropertyInfoCache IntegerCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// The StringPropertyInfoCache object for Text property type.\r\n      /// </summary>\r\n      public StringPropertyInfoCache TextCache\r\n      {\r\n         get\r\n         {\r\n            StringPropertyInfoCache textPropertyInfoCache;\r\n            if (!StringCacheMap.TryGetValue(PropertyType.Text, out textPropertyInfoCache))\r\n            {\r\n               textPropertyInfoCache = new StringPropertyInfoCache();\r\n               StringCacheMap[PropertyType.Text] = textPropertyInfoCache;\r\n            }\r\n            return textPropertyInfoCache;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The StringPropertyInfoCache object for Label property type.\r\n      /// </summary>\r\n      public StringPropertyInfoCache LabelCache\r\n      {\r\n         get\r\n         {\r\n            StringPropertyInfoCache labelPropertyInfoCache;\r\n            if (!StringCacheMap.TryGetValue(PropertyType.Label, out labelPropertyInfoCache))\r\n            {\r\n               labelPropertyInfoCache = new StringPropertyInfoCache();\r\n               StringCacheMap[PropertyType.Label] = labelPropertyInfoCache;\r\n            }\r\n            return labelPropertyInfoCache;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The StringPropertyInfoCache object for Label property type.\r\n      /// </summary>\r\n      public StringPropertyInfoCache IdentifierCache\r\n      {\r\n         get\r\n         {\r\n            StringPropertyInfoCache identifierCache;\r\n            if (!StringCacheMap.TryGetValue(PropertyType.Identifier, out identifierCache))\r\n            {\r\n               identifierCache = new StringPropertyInfoCache();\r\n               StringCacheMap[PropertyType.Identifier] = identifierCache;\r\n            }\r\n            return identifierCache;\r\n         }\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Get DoublePropertyInfoCache object for the particular type\r\n      /// </summary>\r\n      public DoublePropertyInfoCache GetDoubleCache(PropertyType propertyType)\r\n      {\r\n         DoublePropertyInfoCache doublePropertyInfoCache;\r\n         if (!DoubleCacheMap.TryGetValue(propertyType, out doublePropertyInfoCache))\r\n         {\r\n            doublePropertyInfoCache = new DoublePropertyInfoCache();\r\n            DoubleCacheMap[propertyType] = doublePropertyInfoCache;\r\n         }\r\n         return doublePropertyInfoCache;\r\n      }\r\n\r\n      public void Clear()\r\n      {\r\n         DoubleCacheMap.Clear();\r\n         StringCacheMap.Clear();\r\n         BooleanCache.Clear();\r\n         LogicalCache.Clear();\r\n         IntegerCache.Clear();\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/PropertyMap.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Windows;\r\nusing System.Windows.Forms.VisualStyles;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\nusing Revit.IFC.Export.Properties;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Validates user-defined property sets to ensure correct creation and modification.\r\n   /// It is considered invalid for the following changes:\r\n   /// 1. Any property set starting with \"PSet_\" that is not a standard property set.  For instance:\r\n   ///   Invalid:   PropertySet:   PSet_MyPropertySet   T  IfcElementType\r\n   ///   Valid:     PropertySet:   PSet_WallCommon      T  IfcElementType\r\n   ///   \r\n   /// 2. Any change to a valid property set other than a remap of an existing property.  For instance:\r\n   ///   Invalid:    MyNewIFCProperty  Text  MyRevitParameter\r\n   ///   Valid:      AcousticRating    Text  MyRevitParameter\r\n   /// \r\n   /// This gives the following combinations:\r\n   /// (1.) Valid and (2.) Valid ==> No warning, combination is allowed.\r\n   /// (1.) Invalid ==> Warning for (1.), Property Set name is extended with an \"e\" on the beginning, and the Property Set is treated as a non-standard Property Set.\r\n   /// (1.) Valid and (2.) Invalid ==> Warning for (2.).\r\n   /// \r\n   /// It is possible that this validation is done outside a transaction.  IFC Export, however, occurs within a transaction.\r\n   /// So this will also keep track of \"delayed\" warnings if needed.\r\n   /// </summary>\r\n   public class UserDefinedPropertySetValidator\r\n   {\r\n      /// <summary>\r\n      /// String to identify reserved property set names.\r\n      /// </summary>\r\n      public static string ReservedString => \"PSet_\";\r\n\r\n      /// <summary>\r\n      /// Returns PropertySetDescription is property set identifies a property set.\r\n      /// </summary>\r\n      /// <param name=\"propertySet\">Property set name.</param>\r\n      /// <returns>PropertySetDescription if the property set is a standard property set, null otherwise.</returns>\r\n      public PropertySetDescription GetPropertySetDescriptionForStandardPropertySet(string propertySet)\r\n      {\r\n         if (!ResemblesStandardPropertySet(propertySet))\r\n            return null;\r\n\r\n         PropertySetDescription psetDescription = null;\r\n         if (PropertySetDescriptionMap.TryGetValue(propertySet, out psetDescription))\r\n         {\r\n            return psetDescription;\r\n         }\r\n\r\n         foreach (IList<PropertySetDescription> psetDescriptionList in ExporterCacheManager.ParameterCache.PropertySets)\r\n         {\r\n            foreach (PropertySetDescription psetDesc in psetDescriptionList)\r\n            {\r\n               PropertySetDescriptionMap[psetDesc.Name] = psetDesc;\r\n               if (propertySet == psetDesc.Name)\r\n               {\r\n                  return psetDesc;\r\n               }\r\n            }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Indicates if user-defined property set resembles a standard property set.\r\n      /// That is, if it starts with \"PSet_\".\r\n      /// </summary>\r\n      /// <param name=\"propertySet\">Property Set name to check.</param>\r\n      /// <returns>True if the property set name resembles a standard property set, false otherwise.</returns>\r\n      public bool ResemblesStandardPropertySet (string propertySet)\r\n      {\r\n         if (string.IsNullOrWhiteSpace(propertySet) || string.IsNullOrWhiteSpace(ReservedString))\r\n            return false;\r\n\r\n         if (propertySet.Length < ReservedString.Length)\r\n            return false;\r\n\r\n         return propertySet.StartsWith(ReservedString, StringComparison.InvariantCultureIgnoreCase);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks to see if a property set resembles a standard property set, but is not.  If so, then this extended the property set name\r\n      /// to have a non-standard naming pattern.  That is, add an \"e\" to the beginning of the property set name.\r\n      /// </summary>\r\n      /// <param name=\"propertySet\">Property Set to check.</param>\r\n      /// <returns>String representing the extended property set, or the passed-in property set name.</returns>\r\n      public (string name, bool changed) ExtendPropertySetNameIfNeeded(string propertySet)\r\n      {\r\n         PropertySetDescription pSetDesc = GetPropertySetDescriptionForStandardPropertySet(propertySet);\r\n\r\n         if (pSetDesc == null)\r\n         {\r\n            // Not a standard property set - safe to use the original name\r\n            return (propertySet, false);\r\n         }\r\n\r\n         // Found a standard property set - add prefix to the name\r\n         string extendedPropertySetName = $\"e{propertySet}\";\r\n         ExporterCacheManager.DelayedWarnings.Add(string.Format(Resources.IFCExportWarningCannotAddUserDefinedPropertySet, propertySet, ReservedString, extendedPropertySetName));\r\n         return (extendedPropertySetName, true);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Indicates if Property is in the given Property Set.\r\n      /// </summary>\r\n      /// <param name=\"description\">Description of the Property Set.</param>\r\n      /// <param name=\"property\">Name of the property to check.</param>\r\n      /// <returns>True if the property is in the Property Set, false otherwise.</returns>\r\n      public bool IsPropertyInPropertySetDescription (PropertySetDescription description, string property)\r\n      {\r\n         if ((description == null) || string.IsNullOrWhiteSpace(property))\r\n            return false;\r\n\r\n         foreach (PropertySetEntry entry in description.Entries)\r\n         {\r\n            if (entry.PropertyName == property)\r\n            {\r\n               return true;\r\n            }\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Allows for lookup of Property Set Name --> PropertySetDescription.\r\n      /// </summary>\r\n      public IDictionary<string, PropertySetDescription> PropertySetDescriptionMap { get; set; } = new Dictionary<string, PropertySetDescription>();\r\n   }\r\n\r\n   /// <summary>\r\n   /// Represents the Revit parameter to get from element.\r\n   /// </summary>\r\n   class UserDefinedPropertyRevitParameter\r\n   {\r\n      /// <summary>\r\n      /// Gets Revit <see cref=\"BuiltInParameter\"/>.\r\n      /// </summary>\r\n      public BuiltInParameter BuiltInParameter { get; private set; } = BuiltInParameter.INVALID;\r\n\r\n      /// <summary>\r\n      /// Gets custom Revit parameter name.\r\n      /// </summary>\r\n      public string RevitParameter { get; private set; } = null;\r\n\r\n      /// <summary>\r\n      /// Gets a value indicating whether the Revit built-in parameter specified.\r\n      /// </summary>\r\n      public bool IsBuiltInParameterDefined { get; private set; } = false;\r\n\r\n      /// <summary>\r\n      /// Creates a new revit parameter representation instance for the given raw definition from the config.\r\n      /// </summary>\r\n      /// <param name=\"rawParameter\">Data to parse.</param>\r\n      /// <returns>A new instance of <see cref=\"UserDefinedPropertyRevitParameter\"/>.</returns>\r\n      public static UserDefinedPropertyRevitParameter Create(string rawParameter)\r\n      {\r\n         if (string.IsNullOrWhiteSpace(rawParameter))\r\n            return null;\r\n\r\n         UserDefinedPropertyRevitParameter parameter = new UserDefinedPropertyRevitParameter();\r\n         const string prefix = \"BuiltInParameter.\";\r\n         if (rawParameter.StartsWith(prefix, StringComparison.InvariantCultureIgnoreCase))\r\n         {\r\n            parameter.IsBuiltInParameterDefined = true;\r\n            string builtinParameterName = rawParameter.Substring(prefix.Length);\r\n            if (Enum.TryParse(builtinParameterName, out BuiltInParameter builtInParameter) && builtInParameter != BuiltInParameter.INVALID)\r\n            {\r\n               parameter.BuiltInParameter = builtInParameter;\r\n            }\r\n         }\r\n         else\r\n         {\r\n            parameter.RevitParameter = rawParameter;\r\n         }\r\n\r\n         return parameter;\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Represents a single property definiton from the config.\r\n   /// </summary>\r\n   class UserDefinedProperty\r\n   {\r\n      /// <summary>\r\n      /// Gets or sets a property name.\r\n      /// </summary>\r\n      public string Name { get; set; }\r\n\r\n      /// <summary>\r\n      /// Gets a list of defined Revit parameters.\r\n      /// </summary>\r\n      public List<UserDefinedPropertyRevitParameter> RevitParameters { get; private set; } = new List<UserDefinedPropertyRevitParameter>();\r\n\r\n      /// <summary>\r\n      /// Gets a property value type. By default <see cref=\"PropertyValueType.SingleValue\"/>.\r\n      /// </summary>\r\n      public PropertyValueType IfcPropertyValueType { get; private set; } = PropertyValueType.SingleValue;\r\n\r\n      /// <summary>\r\n      /// Gets a list of property types.\r\n      /// </summary>\r\n      public List<string> IfcPropertyTypes { get; private set; } = new List<string>();\r\n\r\n      /// <summary>\r\n      /// Parses and sets <see cref=\"IfcPropertyValueType\"/> and <see cref=\"IfcPropertyTypes\"/> by given <paramref name=\"rawIfcPropertyTypes\"/>.\r\n      /// </summary>\r\n      /// <param name=\"rawIfcPropertyTypes\">Property type data to parse.</param>\r\n      public void ParseIfcPropertyTypes(string rawIfcPropertyTypes)\r\n      {\r\n         if (string.IsNullOrWhiteSpace(rawIfcPropertyTypes))\r\n            return;\r\n\r\n         // format: <PropertyVaueType>.<ValueType>/<ValueType>/...\r\n         IfcPropertyTypes.Clear();\r\n         string dataTypePartToParse = string.Empty;\r\n         string[] split = rawIfcPropertyTypes.Split('.') ?? new string[] {};\r\n         if (split.Length == 1)\r\n         {\r\n            IfcPropertyValueType = PropertyValueType.SingleValue;\r\n            dataTypePartToParse = split[0];\r\n         } \r\n         else if (split.Length >= 2)\r\n         {\r\n            const string prefix = \"Property\";\r\n            bool withPrefix = split[0].StartsWith(prefix, StringComparison.InvariantCultureIgnoreCase);\r\n            string rawValueType = withPrefix ? split[0].Substring(prefix.Length) : split[0];\r\n            if (!Enum.TryParse(rawValueType, true, out PropertyValueType propertyValueType))\r\n            {\r\n               propertyValueType = PropertyValueType.SingleValue;\r\n            }\r\n\r\n            IfcPropertyValueType = propertyValueType;\r\n            dataTypePartToParse = split[1];\r\n         }\r\n\r\n         string[] rawPropertyTypes = dataTypePartToParse.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);\r\n         foreach(string rawPropertyType in rawPropertyTypes)\r\n         {\r\n            const string prefix = \"Ifc\";\r\n            bool withPrefix = rawPropertyType.StartsWith(prefix, StringComparison.InvariantCultureIgnoreCase);\r\n            IfcPropertyTypes.Add(withPrefix ? rawPropertyType.Substring(prefix.Length) : rawPropertyType);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Parses a list of revit parameters by given data from config.\r\n      /// </summary>\r\n      /// <param name=\"rawParameters\">Data to parse.</param>\r\n      public void ParseRevitParameters(string rawParameters)\r\n      {\r\n         if (string.IsNullOrWhiteSpace(rawParameters))\r\n            return;\r\n\r\n         RevitParameters.Clear();\r\n         UserDefinedPropertyRevitParameter parameter = UserDefinedPropertyRevitParameter.Create(rawParameters);\r\n         if (parameter != null)\r\n            RevitParameters.Add(parameter);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets Revit parameters mapped into list of T type.\r\n      /// </summary>\r\n      /// <typeparam name=\"T\">The type of list elements.</typeparam>\r\n      /// <param name=\"mapper\">Function to initialize T.</param>\r\n      /// <returns>A list of Revit parameters mapped into list of T type.</returns>\r\n      public List<T> GetEntryMap<T>(Func<string, BuiltInParameter, T> mapper) where T : EntryMap, new()\r\n      {\r\n         List<T> entryMap = new List<T>();\r\n         foreach (UserDefinedPropertyRevitParameter parameter in RevitParameters)\r\n         {\r\n            if (parameter.BuiltInParameter != BuiltInParameter.INVALID)\r\n            {\r\n               entryMap.Add(mapper(Name, parameter.BuiltInParameter));\r\n            }\r\n            else if (!parameter.IsBuiltInParameterDefined)\r\n            {\r\n               entryMap.Add(mapper(parameter.RevitParameter, BuiltInParameter.INVALID));\r\n            }\r\n            else\r\n            {\r\n               // report as error in log when we create log file.\r\n            }\r\n         }\r\n\r\n         return entryMap;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the first element of <see cref=\"IfcPropertyTypes\"/> converted to <typeparamref name=\"TEnum\"/>,\r\n      /// or a <paramref name=\"defaultValue\"/> if <see cref=\"IfcPropertyTypes\"/> contains no elements.\r\n      /// </summary>\r\n      /// <typeparam name=\"TEnum\">The enumeration type to which to convert value.</typeparam>\r\n      /// <param name=\"defaultValue\">\r\n      /// Value to return if the index is out of range, if <see cref=\"IfcPropertyTypes\"/> is empty or\r\n      /// first element value is not represented in the <typeparamref name=\"TEnum\"/>.\r\n      /// </param>\r\n      /// <returns>\r\n      /// <paramref name=\"defaultValue\"/> if source is empty; otherwise, the first element in <see cref=\"IfcPropertyTypes\"/>\r\n      /// converted to <typeparamref name=\"TEnum\"/>\r\n      /// </returns>\r\n      public TEnum FirstIfcPropertyTypeOrDefault<TEnum>(TEnum defaultValue) where TEnum : struct\r\n      {\r\n         if ((IfcPropertyTypes?.Count ?? 0) == 0)\r\n            return defaultValue;\r\n\r\n         if(Enum.TryParse(IfcPropertyTypes[0], true, out TEnum t))\r\n            return t;\r\n\r\n         return defaultValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the type at a specified index in <see cref=\" IfcPropertyTypes\"/> converted to <typeparamref name=\"TEnum\"/>\r\n      /// or a default value if the index is out of range, if <see cref=\"IfcPropertyTypes\"/> is empty, if value at a specified\r\n      /// index is not represented in the <typeparamref name=\"TEnum\"/>.\r\n      /// </summary>\r\n      /// <typeparam name=\"TEnum\">The enumeration type to which to convert value.</typeparam>\r\n      /// <param name=\"index\">The zero-based index of the element to retrieve.</param>\r\n      /// <param name=\"defaultValue\">\r\n      /// Value to return if the index is out of range, if <see cref=\"IfcPropertyTypes\"/> is empty, if value at a specified\r\n      /// index is not represented in the <typeparamref name=\"TEnum\"/>.\r\n      /// </param>\r\n      /// <returns>\r\n      /// <paramref name=\"defaultValue\"/> if the index is outside the bounds of the source sequence or <see cref=\"IfcPropertyTypes\"/> is empty; \r\n      /// otherwise,the element at the specified position in the source sequence.\r\n      /// </returns>\r\n      public TEnum GetIfcPropertyAtOrDefault<TEnum>(int index, TEnum defaultValue) where TEnum : struct\r\n      {\r\n         if ((IfcPropertyTypes?.Count ?? 0) == 0 || IfcPropertyTypes.Count <= index || index < 0)\r\n            return defaultValue;\r\n\r\n         if (Enum.TryParse(IfcPropertyTypes[index], true, out TEnum t))\r\n            return t;\r\n\r\n         return defaultValue;\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Represents a property set from the config.\r\n   /// </summary>\r\n   class UserDefinedPropertySet\r\n   {\r\n      /// <summary>\r\n      /// Gets a property set name.\r\n      /// </summary>\r\n      public string Name { get; set; }\r\n\r\n      /// <summary>\r\n      /// Gets a type of elements group for which the property set is defined.\r\n      /// </summary>\r\n      public string Type { get; set; }\r\n\r\n      /// <summary>\r\n      /// Gets a list of IFC entites for which property set is defined.\r\n      /// </summary>\r\n      public string[] IfcEntities { get; set; }\r\n\r\n      /// <summary>\r\n      /// Gets a list of properties in the property set.\r\n      /// </summary>\r\n      public IList<UserDefinedProperty> Properties { get; set; } = new List<UserDefinedProperty>();\r\n   }\r\n\r\n   class PropertyMap\r\n   {\r\n      /// <summary>\r\n      /// Load parameter mapping. It parses lines until it finds UserdefinedPset\r\n      /// </summary>\r\n      /// <returns>dictionary of parameter mapping</returns>\r\n      public static Dictionary<Tuple<string, string>, string> LoadParameterMap()\r\n      {\r\n         Dictionary<Tuple<string, string>, string> parameterMap = new Dictionary<Tuple<string, string>, string>();\r\n         try\r\n         {\r\n            string filename = GetFilename();\r\n            if (File.Exists(filename))\r\n            {\r\n               using (StreamReader sr = new StreamReader(filename))\r\n               {\r\n                  string line;\r\n                  while ((line = sr.ReadLine()) != null)\r\n                  {\r\n                     line.TrimStart(' ', '\\t');\r\n                     if (String.IsNullOrEmpty(line)) continue;\r\n                     ParseLine(parameterMap, line);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         catch (Exception e)\r\n         {\r\n            Console.WriteLine(\"The file could not be read:\");\r\n            Console.WriteLine(e.Message);\r\n         }\r\n\r\n         return parameterMap;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Parsing lines for Property Mapping\r\n      /// </summary>\r\n      /// <param name=\"parameterMap\">parameter map</param>\r\n      /// <param name=\"line\">line from file</param>\r\n      private static void ParseLine(Dictionary<Tuple<string, string>, string> parameterMap, string line)\r\n      {\r\n         // if not a comment\r\n         if (line[0] != '#')\r\n         {\r\n            // add the line\r\n            string[] split = line.Split(new char[] { '\\t' }, StringSplitOptions.RemoveEmptyEntries);\r\n            if (split.Length >= 3)\r\n               parameterMap.TryAdd(Tuple.Create(split[0], split[1]), split[2]);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Load user-defined Property set\r\n      /// Format:\r\n      ///    PropertySet: <Pset_name> I[nstance]/T[ype] <IFC entity list separated by ','> \r\n      ///              Property_name   Data_type   Revit_Parameter\r\n      ///              ...\r\n      /// Datatype supported: Text, Integer, Real, Boolean\r\n      /// Line divider between Property Mapping and User defined property sets:\r\n      ///     #! UserDefinedPset\r\n      /// </summary>\r\n      /// <returns>List of property set definitions</returns>\r\n      public static IEnumerable<UserDefinedPropertySet> LoadUserDefinedPset()\r\n      {\r\n         List<UserDefinedPropertySet> userDefinedPropertySets = new List<UserDefinedPropertySet>();\r\n\r\n         try\r\n         {\r\n            string filename = ExporterCacheManager.ExportOptionsCache.PropertySetOptions.ExportUserDefinedPsetsFileName;\r\n            if (!File.Exists(filename))\r\n            {\r\n               // This allows for the original behavior of looking in the directory of the export DLL to look for the default file name.\r\n               filename = GetUserDefPsetFilename();\r\n            }\r\n            if (!File.Exists(filename))\r\n               return userDefinedPropertySets;\r\n\r\n            // Format: PropertSet: <Pset_name> I[nstance]/T[ype] <IFC entity list separated by ','> \r\n            //              Property_name   Data_type   Revit_Parameter\r\n            // ** For now it only works for simple property with single value (datatype supported: Text, Integer, Real and Boolean)\r\n            using (StreamReader sr = new StreamReader(filename))\r\n            {\r\n               string line;\r\n\r\n               UserDefinedPropertySetValidator validator = new UserDefinedPropertySetValidator();\r\n\r\n               // current property set\r\n               UserDefinedPropertySet userDefinedPropertySet = null;\r\n               while ((line = sr.ReadLine()) != null)\r\n               {\r\n                  line = line.TrimStart(' ', '\\t');\r\n\r\n                  if (string.IsNullOrEmpty(line) || line[0] == '#')\r\n                     continue;\r\n\r\n                  string[] split = line.Split(new char[] { '\\t' }, StringSplitOptions.RemoveEmptyEntries);\r\n                  if (split.Length >=4 && string.Compare(split[0], \"PropertySet:\", true) == 0) // Any entry with less than 3 parameters is malformed.\r\n                  {\r\n                     (string propertySetName, _) = validator.ExtendPropertySetNameIfNeeded(split[1]);\r\n                     userDefinedPropertySet = new UserDefinedPropertySet()\r\n                     {\r\n                        Name = propertySetName,\r\n                        Type = split[2],\r\n                        IfcEntities = split[3].Split(new char[] { ',', ';', ' ' }, StringSplitOptions.RemoveEmptyEntries)\r\n                     };\r\n\r\n                     userDefinedPropertySets.Add(userDefinedPropertySet);\r\n                  }\r\n                  else if (split.Length >= 2 && userDefinedPropertySet != null) // Skip property definitions outside of property set block.\r\n                  {\r\n                     string propertyName = split[0];\r\n\r\n                     PropertySetDescription psetDesc = validator.GetPropertySetDescriptionForStandardPropertySet(userDefinedPropertySet.Name);\r\n                     if ((psetDesc == null) || validator.IsPropertyInPropertySetDescription(psetDesc, propertyName))\r\n                     {\r\n                        UserDefinedProperty userDefinedProperty = new UserDefinedProperty();\r\n                        userDefinedProperty.Name = propertyName;\r\n\r\n                        userDefinedProperty.ParseIfcPropertyTypes(split[1]);\r\n\r\n                        if (split.Length >= 3)\r\n                        {\r\n                           userDefinedProperty.ParseRevitParameters(split[2]);\r\n                        }\r\n\r\n                        userDefinedPropertySet.Properties.Add(userDefinedProperty);\r\n                     }\r\n                     else\r\n                     {\r\n                        ExporterCacheManager.DelayedWarnings.Add(string.Format(Resources.IFCExportWarningCannotAddPropertyToReservedPropertySet, propertyName, userDefinedPropertySet.Name));\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         catch (Exception e)\r\n         {\r\n            Console.WriteLine(\"The file could not be read:\");\r\n            Console.WriteLine(e.Message);\r\n         }\r\n\r\n         return userDefinedPropertySets;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get file name\r\n      /// </summary>\r\n      /// <returns>file name</returns>\r\n      private static string GetFilename()\r\n      {\r\n         return ExporterCacheManager.ExportOptionsCache?.SelectedParametermappingTableName;\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get file that contains User defined PSet (using the export configuration name as the file name)\r\n      /// </summary>\r\n      /// <returns></returns>\r\n      private static string GetUserDefPsetFilename()\r\n      {\r\n         string directory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);\r\n         return directory + @\"\\\" + ExporterCacheManager.ExportOptionsCache.SelectedConfigName + @\".txt\";\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/PropertySetCache.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\n\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Enums;\n\nnamespace Revit.IFC.Export.Utility\n{\n   /// <summary>\n   /// Manages caches necessary for caching already created property sets.\n   /// </summary>\n   public class PropertySetCache\n   {\n      private SortedDictionary<long, Tuple<ISet<IFCAnyHandle>, ISet<IFCAnyHandle>>> Cache { get; set; } = new();\n\n      public PropertySetCache()\n      {\n      }\n\n      public bool ContainsKey(ElementId elementId)\n      {\n         return Cache.ContainsKey(elementId.Value);\n      }\n\n      /// <summary>\n      /// Append new entity handles to an already existing set of properties.\n      /// </summary>\n      /// <param name=\"element\">The base Revit element.</param>\n      /// <param name=\"elementHandles\">The new IFC entities.</param>\n      /// <returns>True if the value was appended, false otherwise.</returns>\n      public bool TryAppend(ElementId elementId, ISet<IFCAnyHandle> elementHandles)\n      {\n         if (!Cache.TryGetValue(elementId.Value, out var existingHandles))\n            return false;\n\n         existingHandles.Item2.UnionWith(elementHandles);\n         return true;\n      }\n\n      public void Add(ElementId elementId, ISet<IFCAnyHandle> propertySetHandles,\n         ISet<IFCAnyHandle> elementHandles)\n      {\n         Tuple<ISet<IFCAnyHandle>, ISet<IFCAnyHandle>> newHandles =\n            Tuple.Create(propertySetHandles, elementHandles);\n\n         Cache[elementId.Value] = newHandles;\n      }\n\n      public void CreateRelations(IFCFile file)\n      {\n         IFCAnyHandle ownerHandle = ExporterCacheManager.OwnerHistoryHandle;\n         foreach (var elementPropertySets in Cache.Values)\n         {\n            foreach (IFCAnyHandle propertySetHandle in elementPropertySets.Item1)\n            {\n               string psetRelGUID = GUIDUtil.GenerateIFCGuidFrom(\n                  GUIDUtil.CreateGUIDString(IFCEntityType.IfcRelDefinesByProperties,\n                  ExporterUtil.GetGlobalId(propertySetHandle)));\n               ExporterUtil.CreateRelDefinesByProperties(file, psetRelGUID,\n                  ownerHandle, null, null, elementPropertySets.Item2, propertySetHandle);\n            }\n         }\n      }\n\n      public void Clear()\n      {\n         Cache.Clear();\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/PropertySetOptions.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Manages options necessary for exporting properties for IFC.\r\n   /// </summary>\r\n   public class PropertySetOptions\r\n   {\r\n      private bool m_ExportInternalRevit;\r\n\r\n      private string m_ExportUserDefinedPsetsFileName;\r\n\r\n      /// <summary>\r\n      /// Override for the RevitPropertySets value from UI or API options.\r\n      /// </summary>\r\n      private bool? ExportInternalRevitOverride { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The table that contains information on which Revit parameters to export, and to which IFC properties.\r\n      /// </summary>\r\n      public string ParameterMappingTemplateName { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Whether or not to include RevitPropertySets\r\n      /// </summary>\r\n      public bool ExportInternalRevit\r\n      {\r\n         get\r\n         {\r\n            return ExportInternalRevitOverride.GetValueOrDefault(m_ExportInternalRevit);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Override for the ExportIFCCommonPropertySets value from UI or API options.\r\n      /// </summary>\r\n      private bool? ExportIFCCommonOverride { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Whether or not to include IFCCommonPropertySets\r\n      /// </summary>\r\n      public bool ExportIFCCommon { get; set; } = true;\r\n\r\n      /// <summary>\r\n      /// Whether or not to include material property sets.\r\n      /// </summary>\r\n      public bool ExportMaterialPsets { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Whether or not to use schedules as templates for custom property sets.\r\n      /// </summary>\r\n      public bool ExportSchedulesAsPsets { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Whether or not to use only specific schedules as templates for custom property sets.\r\n      /// </summary>\r\n      public bool ExportSpecificSchedules { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Whether or not export base quantities.\r\n      /// </summary>\r\n      public bool ExportIFCBaseQuantities { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Whether or not to export User Defined Pset as defined in the text file corresponding to this export.\r\n      /// </summary>\r\n      public bool ExportUserDefinedPsets { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// The file name of the user defined property set file, if we are exporting user defined property sets.\r\n      /// </summary>\r\n      public string ExportUserDefinedPsetsFileName\r\n      {\r\n         get\r\n         {\r\n            return ExportUserDefinedPsets ? m_ExportUserDefinedPsetsFileName : null;\r\n         }\r\n         protected set \r\n         { \r\n            m_ExportUserDefinedPsetsFileName = value; \r\n         }\r\n      }\r\n\r\n      public bool UseTypePropertiesInInstacePSets { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Private default constructor.\r\n      /// </summary>\r\n      private PropertySetOptions()\r\n      { }\r\n\r\n      /// <summary>\r\n      /// Creates a new property set options cache from the data in the ExporterIFC passed from Revit.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC handle passed during export.</param>\r\n      /// <returns>The new cache.</returns>\r\n      public static PropertySetOptions Create(ExporterIFC exporterIFC, Document document, IFCVersion version)\r\n      {\r\n         IDictionary<string, string> options = exporterIFC.GetOptions();\r\n\r\n         PropertySetOptions propertySetOptions = new();\r\n\r\n         propertySetOptions.m_ExportInternalRevit = !(OptionsUtil.ExportAs2x3CoordinationView2(version) ||\r\n            OptionsUtil.ExportAs2x3COBIE24DesignDeliverable(version));\r\n\r\n         string templateName = propertySetOptions.ParameterMappingTemplateName =\r\n            OptionsUtil.GetNamedStringOption(options, \"PropertyMapping\");\r\n\r\n         if (string.IsNullOrEmpty(templateName))\r\n         {\r\n            // \"ExportIFCCommonPropertySets\"\r\n            propertySetOptions.ExportIFCCommon =\r\n               OptionsUtil.GetNamedBooleanOption(options, \"ExportIFCCommonPropertySets\").GetValueOrDefault(false);\r\n\r\n            // \"Revit property sets\" override\r\n            propertySetOptions.ExportInternalRevitOverride =\r\n               OptionsUtil.GetNamedBooleanOption(options, \"ExportInternalRevitPropertySets\");\r\n\r\n            // \"ExportBaseQuantities\"\r\n            propertySetOptions.ExportIFCBaseQuantities =\r\n               OptionsUtil.GetNamedBooleanOption(options, \"ExportBaseQuantities\").GetValueOrDefault(false);\r\n\r\n            // \"ExportMaterialPsets\"\r\n            propertySetOptions.ExportMaterialPsets =\r\n               OptionsUtil.GetNamedBooleanOption(options, \"ExportMaterialPsets\").GetValueOrDefault(false);\r\n\r\n            // \"ExportSchedulesAsPsets\"\r\n            propertySetOptions.ExportSchedulesAsPsets =\r\n               OptionsUtil.GetNamedBooleanOption(options, \"ExportSchedulesAsPsets\").GetValueOrDefault(false);\r\n\r\n            // \"ExportUserDefinedPsets\"\r\n            propertySetOptions.ExportUserDefinedPsets =\r\n               OptionsUtil.GetNamedBooleanOption(options, \"ExportUserDefinedPsets\").GetValueOrDefault(false);\r\n         }\r\n         else\r\n         {\r\n            IFCParameterTemplate parameterTemplate = IsInSessionTemplateName(document, templateName) ?\r\n               IFCParameterTemplate.GetOrCreateInSessionTemplate(document) :\r\n               IFCParameterTemplate.FindByName(document, templateName);\r\n\r\n            // \"ExportIFCCommonPropertySets\"\r\n            propertySetOptions.ExportIFCCommon = parameterTemplate?.ExportIFCCommonPropertySets ?? false;\r\n\r\n            // \"Revit property sets\" override\r\n            propertySetOptions.ExportInternalRevitOverride = parameterTemplate?.ExportRevitElementParameters;\r\n\r\n            // ExportBaseQuantities\r\n            propertySetOptions.ExportIFCBaseQuantities = parameterTemplate?.ExportIFCBaseQuantities ?? false;\r\n\r\n            // \"ExportMaterialPsets\"\r\n            propertySetOptions.ExportMaterialPsets = parameterTemplate?.ExportRevitMaterialParameters ?? false;\r\n\r\n            // \"ExportSchedulesAsPsets\"\r\n            propertySetOptions.ExportSchedulesAsPsets = parameterTemplate?.ExportRevitSchedules ?? false;\r\n\r\n            // \"ExportUserDefinedPsets\"\r\n            propertySetOptions.ExportUserDefinedPsets = parameterTemplate?.ExportUserDefinedPropertySets ?? false;\r\n         }\r\n\r\n         // \"UseTypePropertiesInInstacePSets\"\r\n         propertySetOptions.UseTypePropertiesInInstacePSets =\r\n            OptionsUtil.GetNamedBooleanOption(options, \"UseTypePropertiesInInstacePSets\").GetValueOrDefault(false);\r\n\r\n         // \"ExportUserDefinedPsetsFileName\" override\r\n         propertySetOptions.ExportUserDefinedPsetsFileName = OptionsUtil.GetNamedStringOption(options, \"ExportUserDefinedPsetsFileName\");\r\n\r\n         // \"ExportSpecificSchedules\"\r\n         propertySetOptions.ExportSpecificSchedules = \r\n            OptionsUtil.GetNamedBooleanOption(options, \"ExportSpecificSchedules\").GetValueOrDefault(false);\r\n\r\n         return propertySetOptions;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines if the given template name refers to the in-session parameter mapping template.\r\n      /// </summary>\r\n      /// <param name=\"templateName\">The template name to check.</param>\r\n      /// <returns>True if the template name is the in-session template; otherwise, false.</returns>\r\n      private static bool IsInSessionTemplateName(Document document, string templateName)\r\n      {\r\n         string inSessionTemplateName = IFCParameterTemplate.GetOrCreateInSessionTemplate(document)?.Name;\r\n         if (string.IsNullOrEmpty(inSessionTemplateName))\r\n            return false;\r\n\r\n         return string.Equals(templateName, inSessionTemplateName, StringComparison.Ordinal);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/RepresentationUtil.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides static methods to create varies IFC representations.\r\n   /// </summary>\r\n   public class RepresentationUtil\r\n   {\r\n      /// <summary>\r\n      /// Creates a shape representation and register it to shape representation layer.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"identifier\">The identifier for the representation.</param>\r\n      /// <param name=\"representationType\">The type handle for the representation.</param>\r\n      /// <param name=\"items\">Collection of geometric representation items that are defined for this representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateBaseShapeRepresentation(ExporterIFC exporterIFC, IFCAnyHandle contextOfItems,\r\n         string identifier, string representationType, ISet<IFCAnyHandle> items)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle newShapeRepresentation = IFCInstanceExporter.CreateShapeRepresentation(file, contextOfItems, identifier, representationType, items);\r\n         return newShapeRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a shape representation or appends existing ones to original representation.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// This function has two modes. \r\n      /// If originalShapeRepresentation has no value, then this function will create a new ShapeRepresentation handle. \r\n      /// If originalShapeRepresentation has a value, then it is expected to be an aggregation of representations, and the new representation\r\n      /// will be appended to the end of the list.\r\n      /// </remarks>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"identifierOpt\">The identifier for the representation.</param>\r\n      /// <param name=\"representationTypeOpt\">The type handle for the representation.</param>\r\n      /// <param name=\"items\">Collection of geometric representation items that are defined for this representation.</param>\r\n      /// <param name=\"originalShapeRepresentation\">The original shape representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateOrAppendShapeRepresentation(ExporterIFC exporterIFC, Element element, ElementId categoryId, IFCAnyHandle contextOfItems,\r\n         string identifierOpt, string representationTypeOpt, ISet<IFCAnyHandle> items, IFCAnyHandle originalShapeRepresentation,\r\n         string ifcCADLayerOverride)\r\n      {\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(originalShapeRepresentation))\r\n         {\r\n            GeometryUtil.AddItemsToShape(originalShapeRepresentation, items);\r\n            return originalShapeRepresentation;\r\n         }\r\n         \r\n         if (!string.IsNullOrWhiteSpace(ifcCADLayerOverride))\r\n            return CreateShapeRepresentation(exporterIFC, contextOfItems, identifierOpt, representationTypeOpt, items, ifcCADLayerOverride);\r\n\r\n         return CreateShapeRepresentation(exporterIFC, element, categoryId, contextOfItems, identifierOpt, representationTypeOpt, items);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determine if there is a per-element presentation layer override for a representation handle.\r\n      /// </summary>\r\n      /// <param name=\"element\">The element associated with the representation handle.</param>\r\n      /// <returns>The name of the layer, or null if there is no override.</returns>\r\n      public static string GetPresentationLayerOverride(Element element)\r\n      {\r\n         // Search for old \"IFCCadLayer\" or new \"IfcPresentationLayer\".\r\n         string ifcCADLayer = null;\r\n         if ((ParameterUtil.GetStringValueFromElementOrSymbol(element, \"IFCCadLayer\", out ifcCADLayer) == null) ||\r\n             string.IsNullOrWhiteSpace(ifcCADLayer))\r\n         {\r\n            if ((ParameterUtil.GetStringValueFromElementOrSymbol(element, \"IfcPresentationLayer\", out ifcCADLayer) == null) ||\r\n                string.IsNullOrWhiteSpace(ifcCADLayer))\r\n            {\r\n               ifcCADLayer = ExporterStateManager.GetCurrentCADLayerOverride();\r\n            }\r\n         }\r\n         return ifcCADLayer;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a shape representation and register it to shape representation layer.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"identifier\">The identifier for the representation.</param>\r\n      /// <param name=\"representationType\">The type handle for the representation.</param>\r\n      /// <param name=\"items\">Collection of geometric representation items that are defined for this representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateShapeRepresentation(ExporterIFC exporterIFC, Element element, ElementId categoryId, IFCAnyHandle contextOfItems,\r\n         string identifier, string representationType, ISet<IFCAnyHandle> items)\r\n      {\r\n         IFCAnyHandle newShapeRepresentation = CreateBaseShapeRepresentation(exporterIFC, contextOfItems, identifier, representationType, items);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(newShapeRepresentation) &&\r\n            !ExporterCacheManager.ExportOptionsCache.ExportAs2x2)\r\n         {\r\n            string ifcCADLayer = \r\n               (ExporterCacheManager.TemporaryPartsCache.HasTemporaryParts(element.Id) &&\r\n               ExporterCacheManager.TemporaryPartsCache.GetPartExportType(element.Id) == ExporterUtil.ExportPartAs.Part) ?\r\n               ExporterCacheManager.TemporaryPartsCache.TemporaryPartPresentationLayer : GetPresentationLayerOverride(element);\r\n\r\n            // We are using the DWG export layer table to correctly map category to DWG layer for the \r\n            // IfcPresentationLayerAsssignment, if it is not overridden.\r\n            if (string.IsNullOrWhiteSpace(ifcCADLayer))\r\n            {\r\n               ifcCADLayer = exporterIFC.GetLayerNameForPresentationLayer(element, categoryId);\r\n            }\r\n\r\n            if (!string.IsNullOrWhiteSpace(ifcCADLayer))\r\n            {\r\n               ExporterCacheManager.PresentationLayerSetCache.AddRepresentationToLayer(ifcCADLayer, newShapeRepresentation);\r\n            }\r\n         }\r\n\r\n         return newShapeRepresentation;\r\n      }\r\n      /// <summary>\r\n      /// Creates a shape representation and register it to shape representation layer.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"identifier\">The identifier for the representation.</param>\r\n      /// <param name=\"representationType\">The type handle for the representation.</param>\r\n      /// <param name=\"items\">Collection of geometric representation items that are defined for this representation.</param>\r\n      /// <param name=\"ifcCADLayer\">The IFC CAD layer name.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateShapeRepresentation(ExporterIFC exporterIFC, IFCAnyHandle contextOfItems,\r\n         string identifier, string representationType, ISet<IFCAnyHandle> items, string ifcCADLayer)\r\n      {\r\n         IFCAnyHandle newShapeRepresentation = CreateBaseShapeRepresentation(exporterIFC, contextOfItems, identifier, representationType, items);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(newShapeRepresentation))\r\n         {\r\n            if (!string.IsNullOrWhiteSpace(ifcCADLayer))\r\n            {\r\n               ExporterCacheManager.PresentationLayerSetCache.AddRepresentationToLayer(ifcCADLayer, newShapeRepresentation);\r\n            }\r\n         }\r\n\r\n         return newShapeRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Delete a Shape Representation. We will also delete it from a PresentationLayerSetCache if it is registered in there during the creation to remove an invalid item\r\n      /// </summary>\r\n      /// <param name=\"handleToDelete\">handle to delete</param>\r\n      public static void DeleteShapeRepresentation(IFCAnyHandle handleToDelete)\r\n      {\r\n         // As the shape representation might be already asigned to Presentation Layer (and in the cache), we need to remove it from there\r\n         foreach (KeyValuePair<string, ICollection<IFCAnyHandle>> presentationLayerSet in ExporterCacheManager.PresentationLayerSetCache)\r\n         {\r\n            if (presentationLayerSet.Value.Contains(handleToDelete))\r\n               presentationLayerSet.Value.Remove(handleToDelete);\r\n         }\r\n         handleToDelete.Delete();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a shape representation and register it to shape representation layer.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"identifierOpt\">The identifier for the representation.</param>\r\n      /// <param name=\"representationTypeOpt\">The type handle for the representation.</param>\r\n      /// <param name=\"items\">List of geometric representation items that are defined for this representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateShapeRepresentation(ExporterIFC exporterIFC, Element element, ElementId categoryId, IFCAnyHandle contextOfItems,\r\n         string identifierOpt, string representationTypeOpt, IList<IFCAnyHandle> items)\r\n      {\r\n         HashSet<IFCAnyHandle> itemSet = new HashSet<IFCAnyHandle>();\r\n         foreach (IFCAnyHandle axisItem in items)\r\n            itemSet.Add(axisItem);\r\n         return CreateShapeRepresentation(exporterIFC, element, categoryId, contextOfItems, identifierOpt, representationTypeOpt, itemSet);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IfcFacetedBrep handle.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"document\">The document being exported.</param>\r\n      /// <param name=\"isVoid\">True is the geometry is void (vs. solid) geometry.</param>\r\n      /// <param name=\"shell\">The closed shell handle.</param>\r\n      /// <param name=\"overrideMaterialId\">Material id to use instead of calculated value.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateFacetedBRep(ExporterIFC exporterIFC, Document document, bool isVoid,\r\n         IFCAnyHandle shell, ElementId overrideMaterialId)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n         IFCAnyHandle brep = IFCInstanceExporter.CreateFacetedBrep(file, shell);\r\n         BodyExporter.CreateSurfaceStyleForRepItem(exporterIFC, document, isVoid, brep, overrideMaterialId);\r\n         return brep;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create tessellated body representation \r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">the ExporterIFC object</param>\r\n      /// <param name=\"element\">the Element</param>\r\n      /// <param name=\"categoryId\">The Category Id</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"bodyItems\">Set of geometric representation items that are defined for this representation.</param>\r\n      /// <param name=\"originalRepresentation\">The original shape representation.</param>\r\n      /// <returns></returns>\r\n      public static IFCAnyHandle CreateTessellatedRep(ExporterIFC exporterIFC, Element element, ElementId categoryId, IFCAnyHandle contextOfItems,\r\n          ISet<IFCAnyHandle> bodyItems, IFCAnyHandle originalRepresentation)\r\n      {\r\n         // Currently set to \"Body\" as shown also in the IFC documentation example. But there is also \"Body-Fallback\" for tessellated geometry.\r\n         string identifierOpt = \"Body\";\r\n         string repTypeOpt = ShapeRepresentationType.Tessellation.ToString();\r\n         IFCAnyHandle bodyRepresentation =\r\n             CreateOrAppendShapeRepresentation(exporterIFC, element, categoryId, contextOfItems, identifierOpt, repTypeOpt,\r\n                 bodyItems, originalRepresentation, null);\r\n         return bodyRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create advanced Brep body representation \r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">the ExporterIFC object</param>\r\n      /// <param name=\"element\">the Element</param>\r\n      /// <param name=\"categoryId\">The Category Id</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"bodyItems\">Set of geometric representation items that are defined for this representation.</param>\r\n      /// <param name=\"originalRepresentation\">The original shape representation.</param>\r\n      /// <returns></returns>\r\n      public static IFCAnyHandle CreateAdvancedBRepRep(ExporterIFC exporterIFC, Element element, ElementId categoryId, IFCAnyHandle contextOfItems,\r\n          ISet<IFCAnyHandle> bodyItems, IFCAnyHandle originalRepresentation)\r\n      {\r\n         string identifierOpt = \"Body\";\r\n         string repTypeOpt = ShapeRepresentationType.AdvancedBrep.ToString();\r\n         IFCAnyHandle bodyRepresentation =\r\n             CreateOrAppendShapeRepresentation(exporterIFC, element, categoryId, contextOfItems, identifierOpt, repTypeOpt,\r\n                 bodyItems, originalRepresentation, null);\r\n         return bodyRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a sweep solid representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"bodyItems\">Set of geometric representation items that are defined for this representation.</param>\r\n      /// <param name=\"originalRepresentation\">The original shape representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateSweptSolidRep(ExporterIFC exporterIFC, Element element, ElementId categoryId, IFCAnyHandle contextOfItems,\r\n          ISet<IFCAnyHandle> bodyItems, IFCAnyHandle originalRepresentation, string ifcCADLayerOverride)\r\n      {\r\n         string identifierOpt = \"Body\";   // this is by IFC2x2 convention, not temporary\r\n         string repTypeOpt = ShapeRepresentationType.SweptSolid.ToString();  // this is by IFC2x2 convention, not temporary\r\n         IFCAnyHandle bodyRepresentation =\r\n            CreateOrAppendShapeRepresentation(exporterIFC, element, categoryId, contextOfItems, identifierOpt, repTypeOpt,\r\n               bodyItems, originalRepresentation, ifcCADLayerOverride);\r\n         return bodyRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an advanced sweep solid representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"bodyItems\">Set of geometric representation items that are defined for this representation.</param>\r\n      /// <param name=\"originalShapeRepresentation\">The original shape representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateAdvancedSweptSolidRep(ExporterIFC exporterIFC, Element element, ElementId categoryId, IFCAnyHandle contextOfItems,\r\n          ISet<IFCAnyHandle> bodyItems, IFCAnyHandle originalRepresentation)\r\n      {\r\n         string identifierOpt = \"Body\";   // this is by IFC2x2 convention, not temporary\r\n         string repTypeOpt = ShapeRepresentationType.AdvancedSweptSolid.ToString();  // this is by IFC2x2 convention, not temporary\r\n         IFCAnyHandle bodyRepresentation =\r\n            CreateOrAppendShapeRepresentation(exporterIFC, element, categoryId, contextOfItems, identifierOpt, repTypeOpt,\r\n               bodyItems, originalRepresentation, null);\r\n         return bodyRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a clipping representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"bodyItems\">Set of geometric representation items that are defined for this representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateClippingRep(ExporterIFC exporterIFC, Element element, ElementId categoryId,\r\n         IFCAnyHandle contextOfItems, HashSet<IFCAnyHandle> bodyItems)\r\n      {\r\n         string identifierOpt = \"Body\";   // this is by IFC2x2 convention, not temporary\r\n         string repTypeOpt = ShapeRepresentationType.Clipping.ToString();  // this is by IFC2x2 convention, not temporary\r\n         IFCAnyHandle bodyRepresentation = CreateShapeRepresentation(exporterIFC, element, categoryId,\r\n            contextOfItems, identifierOpt, repTypeOpt, bodyItems);\r\n         return bodyRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a CSG representation which contains the result of boolean operations between solid models, half spaces, and other boolean operations.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"bodyItems\">Set of geometric representation items that are defined for this representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateCSGRep(ExporterIFC exporterIFC, Element element, ElementId categoryId,\r\n         IFCAnyHandle contextOfItems, ISet<IFCAnyHandle> bodyItems)\r\n      {\r\n         string identifierOpt = \"Body\";   // this is by IFC2x2 convention, not temporary\r\n         string repTypeOpt = ShapeRepresentationType.CSG.ToString();  // this is by IFC2x2 convention, not temporary\r\n         IFCAnyHandle bodyRepresentation = CreateShapeRepresentation(exporterIFC, element, categoryId,\r\n            contextOfItems, identifierOpt, repTypeOpt, bodyItems);\r\n         return bodyRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a Brep representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"bodyItems\">Set of geometric representation items that are defined for this representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateBRepRep(ExporterIFC exporterIFC, Element element, ElementId categoryId,\r\n         IFCAnyHandle contextOfItems, ISet<IFCAnyHandle> bodyItems)\r\n      {\r\n         string identifierOpt = \"Body\";   // this is by IFC2x2 convention, not temporary\r\n         string repTypeOpt = ShapeRepresentationType.Brep.ToString();   // this is by IFC2x2 convention, not temporary\r\n         IFCAnyHandle bodyRepresentation = CreateShapeRepresentation(exporterIFC, element, categoryId,\r\n            contextOfItems, identifierOpt, repTypeOpt, bodyItems);\r\n         return bodyRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a Solid model representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"bodyItems\">Set of geometric representation items that are defined for this representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateSolidModelRep(ExporterIFC exporterIFC, Element element, ElementId categoryId,\r\n         IFCAnyHandle contextOfItems, ISet<IFCAnyHandle> bodyItems)\r\n      {\r\n         string identifierOpt = \"Body\";\r\n         string repTypeOpt = ShapeRepresentationType.SolidModel.ToString();\r\n         IFCAnyHandle bodyRepresentation = CreateShapeRepresentation(exporterIFC, element, categoryId,\r\n            contextOfItems, identifierOpt, repTypeOpt, bodyItems);\r\n         return bodyRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a Brep representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"bodyItems\">Set of geometric representation items that are defined for this representation.</param>\r\n      /// <param name=\"exportAsFacetationOrMesh\">\r\n      /// If this is true, the identifier for the representation is \"Facetation\" as required by IfcSite for IFC2x2, IFC2x3, or \"Mesh\" for GSA.\r\n      /// If this is false, the identifier for the representation is \"Body\" as required by IfcBuildingElement, or IfcSite for IFC2x3 v2.\r\n      /// </param>\r\n      /// <param name=\"originalShapeRepresentation\">The original shape representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateSurfaceRep(ExporterIFC exporterIFC, Element element, ElementId categoryId,\r\n          IFCAnyHandle contextOfItems, ISet<IFCAnyHandle> bodyItems, bool exportAsFacetationOrMesh, IFCAnyHandle originalRepresentation)\r\n      {\r\n         string identifierOpt = null;\r\n         if (exportAsFacetationOrMesh && ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n         {\r\n            if (ExporterCacheManager.ExportOptionsCache.ExportAsCOBIE)\r\n               identifierOpt = ShapeRepresentationType.Mesh.ToString(); // IFC GSA convention\r\n            else\r\n               identifierOpt = ShapeRepresentationType.Facetation.ToString(); // IFC2x2+ convention\r\n         }\r\n         else\r\n            identifierOpt = \"Body\"; // Default\r\n\r\n         string repTypeOpt = ShapeRepresentationType.SurfaceModel.ToString();  // IFC2x2+ convention\r\n         IFCAnyHandle bodyRepresentation = CreateOrAppendShapeRepresentation(exporterIFC, element, categoryId,\r\n            contextOfItems, identifierOpt, repTypeOpt, bodyItems, originalRepresentation, null);\r\n         return bodyRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a boundary representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"bodyItems\">Collection of geometric representation items that are defined for this representation.</param>\r\n      /// <param name=\"originalShapeRepresentation\">The original shape representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateBoundaryRep(ExporterIFC exporterIFC, Element element, ElementId categoryId,\r\n          IFCAnyHandle contextOfItems, ISet<IFCAnyHandle> bodyItems, IFCAnyHandle originalRepresentation)\r\n      {\r\n         string identifierOpt = \"FootPrint\"; // this is by IFC2x3 convention, not temporary\r\n\r\n         string repTypeOpt = ShapeRepresentationType.Curve2D.ToString();  // this is by IFC2x2 convention, not temporary\r\n         IFCAnyHandle bodyRepresentation = CreateOrAppendShapeRepresentation(exporterIFC, element, categoryId,\r\n            contextOfItems, identifierOpt, repTypeOpt, bodyItems, originalRepresentation, null);\r\n         return bodyRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a geometric set representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"type\">The representation type.</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"bodyItems\">Set of geometric representation items that are defined for this representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateGeometricSetRep(ExporterIFC exporterIFC, Element element, ElementId categoryId,\r\n         string type, IFCAnyHandle contextOfItems, HashSet<IFCAnyHandle> bodyItems)\r\n      {\r\n         string identifierOpt = type;\r\n         string repTypeOpt = ShapeRepresentationType.GeometricSet.ToString(); // this is by IFC2x2 convention, not temporary\r\n         IFCAnyHandle bodyRepresentation = CreateShapeRepresentation(exporterIFC, element, categoryId,\r\n            contextOfItems, identifierOpt, repTypeOpt, bodyItems);\r\n         return bodyRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a body bounding box representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"boundingBoxItem\">Set of geometric representation items that are defined for this representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateBoundingBoxRep(ExporterIFC exporterIFC, IFCAnyHandle contextOfItems, IFCAnyHandle boundingBoxItem)\r\n      {\r\n         string identifierOpt = \"Box\"; // this is by IFC2x2+ convention\r\n         string repTypeOpt = ShapeRepresentationType.BoundingBox.ToString();  // this is by IFC2x2+ convention\r\n         ISet<IFCAnyHandle> bodyItems = new HashSet<IFCAnyHandle>();\r\n         bodyItems.Add(boundingBoxItem);\r\n         IFCAnyHandle bodyRepresentation = CreateBaseShapeRepresentation(exporterIFC, contextOfItems, identifierOpt, repTypeOpt, bodyItems);\r\n         return bodyRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a body mapped item representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"bodyItems\">Set of geometric representation items that are defined for this representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateBodyMappedItemRep(ExporterIFC exporterIFC, Element element, ElementId categoryId,\r\n         IFCAnyHandle contextOfItems, ISet<IFCAnyHandle> bodyItems)\r\n      {\r\n         string identifierOpt = IFCAnyHandleUtil.GetStringAttribute(contextOfItems, \"ContextIdentifier\");\r\n         string repTypeOpt = ShapeRepresentationType.MappedRepresentation.ToString();  // this is by IFC2x2+ convention\r\n         IFCAnyHandle bodyRepresentation = CreateShapeRepresentation(exporterIFC, element, categoryId,\r\n            contextOfItems, identifierOpt, repTypeOpt, bodyItems);\r\n         return bodyRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a plan mapped item representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"bodyItems\">Set of geometric representation items that are defined for this representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreatePlanMappedItemRep(ExporterIFC exporterIFC, Element element, ElementId categoryId,\r\n          IFCAnyHandle contextOfItems, HashSet<IFCAnyHandle> bodyItems)\r\n      {\r\n         string identifierOpt = \"FootPrint\"; // this is by IFC2x2+ convention\r\n         string repTypeOpt = ShapeRepresentationType.MappedRepresentation.ToString();  // this is by IFC2x2+ convention\r\n         IFCAnyHandle bodyRepresentation = CreateShapeRepresentation(exporterIFC, element, categoryId,\r\n             contextOfItems, identifierOpt, repTypeOpt, bodyItems);\r\n         return bodyRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a graph mapped item representation for Axis data\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">tje ExporterIFC object</param>\r\n      /// <param name=\"element\">the category Id</param>\r\n      /// <param name=\"categoryId\"></param>\r\n      /// <param name=\"contextOfItems\">he context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"bodyItems\">Set of geometric representation items that are defined for this representation.</param>\r\n      /// <returns></returns>\r\n      public static IFCAnyHandle CreateGraphMappedItemRep(ExporterIFC exporterIFC, Element element, ElementId categoryId,\r\n         IFCAnyHandle contextOfItems, HashSet<IFCAnyHandle> bodyItems)\r\n      {\r\n         string identifierOpt = \"Axis\"; // this is by IFC2x2+ convention\r\n         string repTypeOpt = ShapeRepresentationType.MappedRepresentation.ToString();  // this is by IFC2x2+ convention\r\n         IFCAnyHandle bodyRepresentation = CreateShapeRepresentation(exporterIFC, element, categoryId,\r\n               contextOfItems, identifierOpt, repTypeOpt, bodyItems);\r\n         return bodyRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an annotation representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The exporter.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"contextOfItems\">The context for which the different subtypes of representation are valid.</param>\r\n      /// <param name=\"bodyItems\">Set of geometric representation items that are defined for this representation.</param>\r\n      /// <param name=\"is3D\">If true, creates a GeometricSet instead of an Annotation2D.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateAnnotationSetRep(ExporterIFC exporterIFC, Element element, ElementId categoryId,\r\n            IFCAnyHandle contextOfItems, HashSet<IFCAnyHandle> bodyItems, bool is3D)\r\n      {\r\n         string identifierOpt = \"Annotation\";\r\n         string repTypeOpt = is3D ? ShapeRepresentationType.GeometricSet.ToString() :\r\n            ShapeRepresentationType.Annotation2D.ToString();\r\n\r\n         IFCAnyHandle bodyRepresentation = CreateShapeRepresentation(exporterIFC, element, categoryId,\r\n             contextOfItems, identifierOpt, repTypeOpt, bodyItems);\r\n         return bodyRepresentation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a SweptSolid, Brep, or Surface product definition shape representation, depending on the geoemtry and export version.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"bodyExporterOptions\">The body exporter options.</param>\r\n      /// <param name=\"extraReps\">Extra representations (e.g. Axis, Boundary).  May be null.</param>\r\n      /// <param name=\"extrusionCreationData\">The extrusion creation data.</param>\r\n      /// <param name=\"allowOffsetTransform\">Allows local coordinate system to be placed close to geometry.</param>\r\n      /// <returns>The handle.</returns>\r\n      /// <remarks>allowOffsetTransform should only be set to true if no other associated geometry is going to be exported.  Otherwise,\r\n      /// there could be an offset between this geometry and the other, non-transformed, geometry.</remarks>\r\n      public static IFCAnyHandle CreateAppropriateProductDefinitionShape(ExporterIFC exporterIFC, Element element, ElementId categoryId,\r\n          GeometryElement geometryElement, BodyExporterOptions bodyExporterOptions, IList<IFCAnyHandle> extraReps,\r\n          IFCExportBodyParams extrusionCreationData, bool allowOffsetTransform)\r\n      {\r\n         BodyExporterOptions newBodyExporterOptions = new BodyExporterOptions(bodyExporterOptions);\r\n         newBodyExporterOptions.AllowOffsetTransform = allowOffsetTransform;\r\n\r\n         return CreateAppropriateProductDefinitionShape(exporterIFC, element, categoryId,\r\n             geometryElement, newBodyExporterOptions, extraReps, extrusionCreationData, out _);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a SweptSolid, Brep, SolidModel or SurfaceModel product definition shape representation, based on the geometry and IFC version.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"categoryId\">The category id.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"bodyExporterOptions\">The body exporter options.</param>\r\n      /// <param name=\"extraReps\">Extra representations (e.g. Axis, Boundary).  May be null.</param>\r\n      /// <param name=\"extrusionCreationData\">The extrusion creation data.</param>\r\n      /// <param name=\"bodyData\">The body data.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateAppropriateProductDefinitionShape(ExporterIFC exporterIFC, Element element, ElementId categoryId,\r\n          GeometryElement geometryElement, BodyExporterOptions bodyExporterOptions, IList<IFCAnyHandle> extraReps,\r\n          IFCExportBodyParams extrusionCreationData, out BodyData bodyData, bool skipBody = false, bool instanceGeometry = false)\r\n      {\r\n         bodyData = null;\r\n         SolidMeshGeometryInfo info = null;\r\n         IList<GeometryObject> geometryList = new List<GeometryObject>();\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAs2x2)\r\n         {\r\n            info = GeometryUtil.GetSplitSolidMeshGeometry(geometryElement, Transform.Identity);\r\n            IList<Mesh> meshes = info.GetMeshes();\r\n            if (meshes.Count == 0)\r\n            {\r\n               IList<Solid> solidList = info.GetSolids();\r\n               //foreach (Solid solid in solidList)\r\n               //{\r\n               //   geometryList.Add(solid);\r\n               //}\r\n               geometryList = FamilyExporterUtil.RemoveInvisibleSolidsAndMeshes(element.Document, exporterIFC, ref solidList, ref meshes);\r\n               if (geometryList.Count == 0 && !skipBody)\r\n                  // If element does not has own geometry but contains sub components as family instance we export it to save parameter data.\r\n                  if (!(element is FamilyInstance familyInstance && familyInstance.GetSubComponentIds().Any()))\r\n                     return null;\r\n            }\r\n         }\r\n\r\n         if (geometryList.Count == 0)\r\n            geometryList.Add(geometryElement);\r\n         else\r\n         {\r\n            bodyExporterOptions.TryToExportAsExtrusion = true;\r\n         }\r\n\r\n         List<IFCAnyHandle> bodyReps = new List<IFCAnyHandle>();\r\n         if (!skipBody)\r\n         {\r\n            ElementId matId = ExporterUtil.GetSingleMaterial(element);\r\n            if (matId == ElementId.InvalidElementId)\r\n               matId = HostObjectExporter.GetFirstLayerMaterialId(element as HostObject);\r\n\r\n            bodyData = BodyExporter.ExportBody(exporterIFC, element, categoryId, matId, geometryList,\r\n                bodyExporterOptions, extrusionCreationData, instanceGeometry:instanceGeometry);\r\n            IFCAnyHandle bodyRep = bodyData.RepresentationHnd;\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(bodyRep))\r\n            {\r\n               if (extrusionCreationData != null)\r\n                  extrusionCreationData.ClearOpenings();\r\n            }\r\n            else\r\n               bodyReps.Add(bodyRep);\r\n         }\r\n\r\n         if (extraReps != null)\r\n         {\r\n            foreach (IFCAnyHandle hnd in extraReps)\r\n               bodyReps.Add(hnd);\r\n         }\r\n\r\n         Transform boundingBoxTrf = Transform.Identity;\r\n         if (bodyData != null && bodyData.OffsetTransform != null)\r\n            boundingBoxTrf = bodyData.OffsetTransform.Inverse;\r\n         IFCAnyHandle boundingBoxRep = BoundingBoxExporter.ExportBoundingBox(exporterIFC, geometryElement, boundingBoxTrf);\r\n         if (boundingBoxRep != null)\r\n            bodyReps.Add(boundingBoxRep);\r\n\r\n         // NOTE: This can create an invalid IfcProductDefinitionShape with no representations.  The expectation is\r\n         // that these will be created later, but at the moment that is not guaranteed.\r\n         return IFCInstanceExporter.CreateProductDefinitionShape(exporterIFC.GetFile(), null, null, bodyReps);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a product definition shape representation wihotu Body rep, but incl. bounding box based on the geometry and IFC version.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">exporteriFC</param>\r\n      /// <param name=\"element\">the Element</param>\r\n      /// <param name=\"categoryId\">the cateogory id</param>\r\n      /// <param name=\"geometryElement\">the geometry element</param>\r\n      /// <param name=\"bodyExporterOptions\">exporter option</param>\r\n      /// <param name=\"extraReps\">extra representation to be added to the product definition shape</param>\r\n      /// <returns>product definition shape handle</returns>\r\n      public static IFCAnyHandle CreateProductDefinitionShapeWithoutBodyRep(ExporterIFC exporterIFC, Element element, ElementId categoryId,\r\n          GeometryElement geometryElement, IList<IFCAnyHandle> extraReps)\r\n      {\r\n         BodyData bodyData;\r\n         BodyExporterOptions bodyExporterOptions = new BodyExporterOptions(false, ExportOptionsCache.ExportTessellationLevel.Medium);\r\n\r\n         return CreateAppropriateProductDefinitionShape(exporterIFC, element, categoryId,\r\n             geometryElement, bodyExporterOptions, extraReps, null, out bodyData, skipBody:true);\r\n      }\r\n      \r\n      /// <summary>\r\n         /// Creates a surface product definition shape representation.\r\n         /// </summary>\r\n         /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n         /// <param name=\"element\">The element.</param>\r\n         /// <param name=\"geometryElement\">The geometry element.</param>\r\n         /// <param name=\"exportBoundaryRep\">If this is true, it will export boundary representations.</param>\r\n         /// <param name=\"exportAsFacetation\">If this is true, it will export the geometry as facetation.</param>\r\n         /// <returns>The handle.</returns>\r\n         public static IFCAnyHandle CreateSurfaceProductDefinitionShape(ExporterIFC exporterIFC, Element element,\r\n         GeometryElement geometryElement, bool exportBoundaryRep, bool exportAsFacetation)\r\n      {\r\n         IFCAnyHandle bodyRep = null;\r\n         IFCAnyHandle boundaryRep = null;\r\n         return CreateSurfaceProductDefinitionShape(exporterIFC, element, geometryElement, exportBoundaryRep, exportAsFacetation, ref bodyRep, ref boundaryRep);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a surface product definition shape representation.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If a body representation is supplied, then we expect that this is already contained in a representation list, inside\r\n      /// a product representation. As such, just modify the list and return.\r\n      /// </remarks>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      /// <param name=\"geometryElement\">The geometry element.</param>\r\n      /// <param name=\"exportBoundaryRep\">If this is true, it will export boundary representations.</param>\r\n      /// <param name=\"exportAsFacetation\">If this is true, it will export the geometry as facetation.</param>\r\n      /// <param name=\"bodyRep\">Body representation.</param>\r\n      /// <param name=\"boundaryRep\">Boundary representation.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateSurfaceProductDefinitionShape(ExporterIFC exporterIFC, Element element,\r\n         GeometryElement geometryElement, bool exportBoundaryRep, bool exportAsFacetation, ref IFCAnyHandle bodyRep, ref IFCAnyHandle boundaryRep)\r\n      {\r\n         bool hasOriginalBodyRepresentation = bodyRep != null;\r\n         bool success = SurfaceExporter.ExportSurface(exporterIFC, element, geometryElement, exportBoundaryRep, exportAsFacetation, ref bodyRep, ref boundaryRep);\r\n\r\n         if (!success)\r\n            return null;\r\n\r\n         // If we supplied a body representation, then we expect that this is already contained in a representation list, inside\r\n         // a product representation.  As such, just modify the list and return.\r\n         if (hasOriginalBodyRepresentation)\r\n            return null;\r\n\r\n         List<IFCAnyHandle> representations = new List<IFCAnyHandle>();\r\n         representations.Add(bodyRep);\r\n         if (exportBoundaryRep && !IFCAnyHandleUtil.IsNullOrHasNoValue(boundaryRep))\r\n            representations.Add(boundaryRep);\r\n\r\n         IFCAnyHandle boundingBoxRep = BoundingBoxExporter.ExportBoundingBox(exporterIFC, geometryElement, Transform.Identity);\r\n         if (boundingBoxRep != null)\r\n            representations.Add(boundingBoxRep);\r\n\r\n         return IFCInstanceExporter.CreateProductDefinitionShape(exporterIFC.GetFile(), null, null, representations);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a extruded product definition shape representation.\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">The ExporterIFC object.</param>\r\n      /// <param name=\"element\">The base element.</param>\r\n      /// <param name=\"categoryId\">The category of the element.</param>\r\n      /// <param name=\"curveLoops\">The curve loops defining the extruded surface.</param>\r\n      /// <param name=\"lcs\">The local coordinate system of the bse curve loops.</param>\r\n      /// <param name=\"extrDirVec\">The extrusion direction.</param>\r\n      /// <param name=\"extrusionSize\">The scaled extrusion length.</param>\r\n      /// <returns>The handle.</returns>\r\n      public static IFCAnyHandle CreateExtrudedProductDefShape(ExporterIFC exporterIFC, Element element, ElementId categoryId,\r\n          IList<CurveLoop> curveLoops, Transform lcs, XYZ extrDirVec, double extrusionSize)\r\n      {\r\n         IFCFile file = exporterIFC.GetFile();\r\n\r\n         IFCAnyHandle extrusionHnd = ExtrusionExporter.CreateExtrudedSolidFromCurveLoop(exporterIFC, null, curveLoops, lcs,\r\n             extrDirVec, extrusionSize, false, out _);\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(extrusionHnd))\r\n            return null;\r\n\r\n         ISet<IFCAnyHandle> bodyItems = new HashSet<IFCAnyHandle>();\r\n         bodyItems.Add(extrusionHnd);\r\n\r\n         IFCAnyHandle contextOfItems = exporterIFC.Get3DContextHandle(\"Body\");\r\n         IFCAnyHandle shapeRepHnd = CreateSweptSolidRep(exporterIFC, element, categoryId, contextOfItems, bodyItems, null, null);\r\n\r\n         IList<IFCAnyHandle> shapeReps = new List<IFCAnyHandle>();\r\n         shapeReps.Add(shapeRepHnd);\r\n         return IFCInstanceExporter.CreateProductDefinitionShape(file, null, null, shapeReps);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checking the the geometry representation of a product contains representations that fulfill the requirements for \"StandardCase\"\r\n      /// </summary>\r\n      /// <param name=\"exportType\">the export type of the element</param>\r\n      /// <param name=\"productHnd\">IfcProduct handle</param>\r\n      /// <returns>true if it fulfills the StandardCase requirements</returns>\r\n      public static bool RepresentationForStandardCaseFromProduct(IFCEntityType exportType, IFCAnyHandle productHnd)\r\n      {\r\n         List<IFCAnyHandle> representationHnds = IFCAnyHandleUtil.GetRepresentations(IFCAnyHandleUtil.GetRepresentation(productHnd));\r\n         return RepresentationForStandardCases(exportType, representationHnds);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check the content of IfcRepresentation for geometries that fulfill the requirements for StandardCase\r\n      /// </summary>\r\n      /// <param name=\"exportType\">element export type</param>\r\n      /// <param name=\"representationHnds\">List of IfcRepresentations</param>\r\n      /// <returns>true if the IfcRepresentation (Body) contains the suitable geometry for various types</returns>\r\n      public static bool RepresentationForStandardCases(IFCEntityType exportType, List<IFCAnyHandle> representationHnds)\r\n      {\r\n         if (representationHnds.Count == 0)\r\n            return false;\r\n\r\n         foreach (IFCAnyHandle repHnd in representationHnds)\r\n         {\r\n            IFCAnyHandleUtil.ValidateSubTypeOf(repHnd, false, Common.Enums.IFCEntityType.IfcRepresentation);\r\n            string repIdent = IFCAnyHandleUtil.GetRepresentationIdentifier(repHnd);\r\n            if (repIdent.Equals(\"Body\"))\r\n            {\r\n               HashSet<IFCAnyHandle> repItems = null;\r\n               string repType = IFCAnyHandleUtil.GetRepresentationType(repHnd);\r\n               if (repType.Equals(\"SweptSolid\") || repType.Equals(\"AdvancedSweptSolid\") || repType.Equals(\"Clipping\")\r\n                  || (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView && repType.Equals(\"Tessellation\")))\r\n                  repItems = IFCAnyHandleUtil.GetItems(repHnd);\r\n               else if (repType.Equals(\"MappedRepresentation\"))\r\n               {\r\n                  // It is a MappedRepresentation, get IfcRepresentation from the source\r\n                  HashSet<IFCAnyHandle> mappedRepItems = IFCAnyHandleUtil.GetItems(repHnd);\r\n                  foreach (IFCAnyHandle mappedRepItem in mappedRepItems)\r\n                  {\r\n                     IFCAnyHandle mappingSource = IFCAnyHandleUtil.GetInstanceAttribute(mappedRepItem, \"MappingSource\");\r\n                     IFCAnyHandle mappedRep = IFCAnyHandleUtil.GetInstanceAttribute(mappingSource, \"MappedRepresentation\");\r\n                     repItems = IFCAnyHandleUtil.GetItems(mappedRep);\r\n                  }\r\n               }\r\n               else\r\n                  return false;\r\n\r\n               int validGeomCount = 0;\r\n               foreach (IFCAnyHandle repItem in repItems)\r\n               {\r\n                  if (IFCAnyHandleUtil.IsTypeOf(repItem, Common.Enums.IFCEntityType.IfcExtrudedAreaSolid))\r\n                  {\r\n                     validGeomCount++;\r\n                     continue;\r\n                  }\r\n\r\n                  // IfcOpeningStandardCase only allows IfcExtrudedAreaSolid\r\n                  if (exportType == IFCEntityType.IfcOpeningElement)\r\n                     continue;\r\n\r\n                  // For IfcBooleanClippingResult, we must ensure the that at least one of the leaf is an ExtrudedAreaSolid (should be the base, but we have no way to know)\r\n                  if (IFCAnyHandleUtil.IsTypeOf(repItem, Common.Enums.IFCEntityType.IfcBooleanClippingResult))\r\n                  {\r\n                     IFCAnyHandle firstOperand = IFCAnyHandleUtil.GetInstanceAttribute(repItem, \"FirstOperand\");\r\n                     IFCAnyHandle secondOperand = IFCAnyHandleUtil.GetInstanceAttribute(repItem, \"SecondOperand\");\r\n                     if (BooleanResultLeafIsTypeOf(firstOperand, Common.Enums.IFCEntityType.IfcExtrudedAreaSolid)\r\n                         || BooleanResultLeafIsTypeOf(secondOperand, Common.Enums.IFCEntityType.IfcExtrudedAreaSolid))\r\n                     {\r\n                        validGeomCount++;\r\n                        continue;\r\n                     }\r\n                  }\r\n\r\n                  if ((exportType == IFCEntityType.IfcBeam || exportType == IFCEntityType.IfcBeamType\r\n                        || exportType == IFCEntityType.IfcColumn || exportType == IFCEntityType.IfcColumnType\r\n                        || exportType == IFCEntityType.IfcMember || exportType == IFCEntityType.IfcMemberType)\r\n                      && (IFCAnyHandleUtil.IsTypeOf(repItem, Common.Enums.IFCEntityType.IfcSurfaceCurveSweptAreaSolid)\r\n                        || IFCAnyHandleUtil.IsTypeOf(repItem, Common.Enums.IFCEntityType.IfcFixedReferenceSweptAreaSolid)\r\n                        || IFCAnyHandleUtil.IsTypeOf(repItem, Common.Enums.IFCEntityType.IfcExtrudedAreaSolidTapered)\r\n                        || IFCAnyHandleUtil.IsTypeOf(repItem, Common.Enums.IFCEntityType.IfcRevolvedAreaSolid))\r\n                        || (ExporterCacheManager.ExportOptionsCache.ExportAs4ReferenceView && IFCAnyHandleUtil.IsSubTypeOf(repItem, Common.Enums.IFCEntityType.IfcTessellatedFaceSet)))\r\n                  {\r\n                     validGeomCount++;\r\n                     continue;\r\n                  }\r\n               }\r\n\r\n               // If the valid geometry count is equel to the the number of representation items, it is a valid geometry for Ifc*StandardCase\r\n               if ((validGeomCount == repItems.Count) && (validGeomCount > 0))\r\n                  return true;\r\n            }\r\n         }\r\n         return false;\r\n      }\r\n\r\n      private static bool BooleanResultLeafIsTypeOf(IFCAnyHandle booleanResultOperand, Common.Enums.IFCEntityType entityType)\r\n      {\r\n         bool firstOpLeafOfType = false;\r\n         bool secondOpLeafOfType = false;\r\n\r\n         // It is already a leaf and it is of the right type\r\n         if (IFCAnyHandleUtil.IsTypeOf(booleanResultOperand, entityType))\r\n            return true;\r\n\r\n         if (IFCAnyHandleUtil.IsTypeOf(booleanResultOperand, Common.Enums.IFCEntityType.IfcBooleanClippingResult))\r\n         {\r\n            IFCAnyHandle firstOperand = IFCAnyHandleUtil.GetInstanceAttribute(booleanResultOperand, \"FirstOperand\");\r\n            if (IFCAnyHandleUtil.IsTypeOf(firstOperand, Common.Enums.IFCEntityType.IfcBooleanClippingResult))\r\n            {\r\n               firstOpLeafOfType = BooleanResultLeafIsTypeOf(firstOperand, entityType);\r\n            }\r\n            else\r\n            {\r\n               if (IFCAnyHandleUtil.IsTypeOf(firstOperand, entityType))\r\n                  firstOpLeafOfType = true;\r\n            }\r\n\r\n            IFCAnyHandle secondOperand = IFCAnyHandleUtil.GetInstanceAttribute(booleanResultOperand, \"SecondOperand\");\r\n            if (IFCAnyHandleUtil.IsTypeOf(secondOperand, Common.Enums.IFCEntityType.IfcBooleanClippingResult))\r\n            {\r\n               secondOpLeafOfType = BooleanResultLeafIsTypeOf(secondOperand, entityType);\r\n            }\r\n            else\r\n            {\r\n               if (IFCAnyHandleUtil.IsTypeOf(secondOperand, entityType))\r\n                  secondOpLeafOfType = true;\r\n            }\r\n\r\n         }\r\n         return (firstOpLeafOfType || secondOpLeafOfType);\r\n      }\r\n\r\n      public static int DimOfRepresentationContext(IFCAnyHandle rep)\r\n      {\r\n         if (rep == null)\r\n            throw new ArgumentNullException(\"representation\");\r\n\r\n         if (!rep.HasValue)\r\n            throw new ArgumentException(\"Invalid handle.\");\r\n\r\n         IFCAnyHandle theRep;\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(rep, Common.Enums.IFCEntityType.IfcRepresentationMap))\r\n         {\r\n            theRep = IFCAnyHandleUtil.GetInstanceAttribute(rep, \"MappedRepresentation\");\r\n            if (theRep == null)\r\n               return 0;\r\n         }\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(rep, Common.Enums.IFCEntityType.IfcRepresentation))\r\n         {\r\n            theRep = rep;\r\n         }\r\n         else\r\n            throw new ArgumentException(\"The operation is not valid for this handle.\");\r\n\r\n         IFCAnyHandle context = IFCAnyHandleUtil.GetContextOfItems(theRep);\r\n         if (IFCAnyHandleUtil.IsTypeOf(context, Common.Enums.IFCEntityType.IfcGeometricRepresentationSubContext))\r\n         {\r\n            string targetViewEnum = IFCAnyHandleUtil.GetEnumerationAttribute(context, \"TargetView\");\r\n            if (targetViewEnum.Equals(\"MODEL_VIEW\"))\r\n               return 3;\r\n            if (targetViewEnum.Equals(\"PLAN_VIEW\") || targetViewEnum.Equals(\"SKETCH_VIEW\") || targetViewEnum.Equals(\"REFLECTED_PLAN_VIEW\")\r\n                  || targetViewEnum.Equals(\"SECTION_VIEW\") || targetViewEnum.Equals(\"ELEVATION_VIEW\"))\r\n               return 2;\r\n            if (targetViewEnum.Equals(\"GRAPH_VIEW\"))\r\n               return 1;\r\n         }\r\n\r\n         return 0;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create Shape representation of a geometry item together with its associated IfcShapeAspect. This works only for \"Body\"\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">exporter IFC</param>\r\n      /// <param name=\"hostElement\">the host element owning the geometries</param>\r\n      /// <param name=\"hostProdDefShape\">product definition shape of the host</param>\r\n      /// <param name=\"repType\">Representation type</param>\r\n      /// <param name=\"aspectName\">aspect name: expected to be component category, if not by default should be the same as the material name</param>\r\n      /// <param name=\"itemRep\">the geometry representation item</param>\r\n      public static void CreateRepForShapeAspect(ExporterIFC exporterIFC, Element hostElement, IFCAnyHandle hostProdDefShape, string repType, string aspectName, IFCAnyHandle itemRep)\r\n      {\r\n         CreateRepForShapeAspect(exporterIFC, hostElement, hostProdDefShape, repType, aspectName, new HashSet<IFCAnyHandle>() { itemRep });\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create Shape representation of a geometry item together with its associated IfcShapeAspect. This works only for \"Body\"\r\n      /// </summary>\r\n      /// <param name=\"exporterIFC\">exporter IFC</param>\r\n      /// <param name=\"hostElement\">the host element owning the geometries</param>\r\n      /// <param name=\"hostProdDefShape\">product definition shape of the host</param>\r\n      /// <param name=\"repType\">Representation type</param>\r\n      /// <param name=\"aspectName\">aspect name: expected to be component category, if not by default should be the same as the material name</param>\r\n      /// <param name=\"itemRepSet\">Set of IfcRepresentationItems</param>\r\n      public static void CreateRepForShapeAspect(ExporterIFC exporterIFC, Element hostElement, IFCAnyHandle hostProdDefShape, string repType, string aspectName, HashSet<IFCAnyHandle> itemRepSet)\r\n      {\r\n         string shapeIdent = \"Body\";\r\n         IFCAnyHandle contextOfItems = exporterIFC.Get3DContextHandle(shapeIdent);\r\n         ElementId catId = CategoryUtil.GetSafeCategoryId(hostElement);\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(hostProdDefShape, IFCEntityType.IfcProductRepresentation))\r\n         {\r\n            IFCAnyHandle representationOfItem = RepresentationUtil.CreateShapeRepresentation(exporterIFC, hostElement, catId, contextOfItems, shapeIdent, repType, itemRepSet);\r\n            IFCInstanceExporter.CreateShapeAspect(exporterIFC.GetFile(), new List<IFCAnyHandle>() { representationOfItem }, aspectName, null, null, hostProdDefShape);\r\n         }\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(hostProdDefShape, IFCEntityType.IfcRepresentationMap))\r\n         {\r\n            IFCAnyHandle representation = IFCAnyHandleUtil.GetInstanceAttribute(hostProdDefShape, \"MappedRepresentation\");\r\n            string representationType = IFCAnyHandleUtil.GetRepresentationType(representation);\r\n            IFCAnyHandle representationOfItem = RepresentationUtil.CreateShapeRepresentation(exporterIFC, hostElement, catId, contextOfItems, shapeIdent,\r\n               representationType, itemRepSet);\r\n            IFCInstanceExporter.CreateShapeAspect(exporterIFC.GetFile(), new List<IFCAnyHandle>() { representationOfItem }, aspectName, null, null, hostProdDefShape);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create IfcStyledItem if not yet exists for material and assign it to the bodyItem\r\n      /// </summary>\r\n      /// <param name=\"file\">The IFC file</param>\r\n      /// <param name=\"document\">The document</param>\r\n      /// <param name=\"materialId\">The material id</param>\r\n      /// <param name=\"bodyItem\">The body Item to assign to the StyleItem to</param>\r\n      public static void CreateStyledItemAndAssign(IFCFile file, Document document, ElementId materialId, IFCAnyHandle bodyItem)\r\n      {\r\n         IFCAnyHandle surfStyleHnd = CategoryUtil.GetOrCreateMaterialStyle(document, file, materialId);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(surfStyleHnd))\r\n         {\r\n            IFCAnyHandle style = ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4 ?\r\n               IFCInstanceExporter.CreatePresentationStyleAssignment(file, new HashSet<IFCAnyHandle>() { surfStyleHnd }) :\r\n               surfStyleHnd;\r\n            \r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(style))\r\n            {\r\n               return;\r\n            }\r\n\r\n            IFCInstanceExporter.CreateStyledItem(file, bodyItem, new() { style }, null);\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/SimpleSweptSolidAnalyzer.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// This geometry utility allows you to attempt to “fit” a given piece of geometry into\r\n   /// the shape of a simple swept solid.\r\n   /// </summary>\r\n   /// <remarks>\r\n   /// It now only supports an open sweep with no opening or clippings and with one path curve of a line or arc.\r\n   /// </remarks>\r\n   class SimpleSweptSolidAnalyzer\r\n   {\r\n      /// <summary>\r\n      /// The face that represents the profile of the swept solid.\r\n      /// </summary>\r\n      public PlanarFace ProfileFace { get; private set; } = null;\r\n\r\n      /// <summary>\r\n      /// The edge that represents the path of the swept solid.\r\n      /// </summary>\r\n      public Curve PathCurve { get; private set; } = null;\r\n\r\n      /// <summary>\r\n      /// The unaligned faces, maybe openings or recesses.\r\n      /// </summary>\r\n      public List<Face> UnalignedFaces { get; } = new List<Face>();\r\n\r\n      /// <summary>\r\n      /// Creates a SimpleSweptSolidAnalyzer and computes the swept solid.\r\n      /// </summary>\r\n      /// <param name=\"solid\">The solid geometry.</param>\r\n      /// <param name=\"normal\">The normal of the reference plane that a path might lie on.  If it is null, try to guess based on the geometry.</param>\r\n      /// <returns>The analyzer.</returns>\r\n      public static SimpleSweptSolidAnalyzer Create(Solid solid, XYZ normal, GeometryObject potentialPathGeom = null)\r\n      {\r\n         if (solid == null)\r\n            return null;\r\n\r\n         ICollection<Face> faces = new List<Face>();\r\n         foreach (Face face in solid.Faces)\r\n         {\r\n            faces.Add(face);\r\n         }\r\n\r\n         return Create(faces, normal, potentialPathGeom);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a SimpleSweptSolidAnalyzer and computes the swept solid. This method should be used when a swept curve (directrix) is already known. Even when it is missing (null)\r\n      /// it will simply call the original one where it will try to determine the swept curve (directrix) using the connecting faces\r\n      /// </summary>\r\n      /// <param name=\"faces\">The faces of a solid.</param>\r\n      /// <param name=\"normal\">The normal of the reference plane that a path might lie on.  If it is null, try to guess based on the geometry.</param>\r\n      /// <param name=\"potentialPathGeom\">The potential swept path (e.g. in Revit MEP pipe/duct/fitting may already have this defined as part of the model)</param>\r\n      /// <returns>The analyzer.</returns>\r\n      /// <remarks>This is a simple analyzer, and is not intended to be general - it works in some simple, real-world cases.</remarks>\r\n      public static SimpleSweptSolidAnalyzer Create(ICollection<Face> faces, XYZ normal, GeometryObject potentialPathGeom)\r\n      {\r\n         SimpleSweptSolidAnalyzer simpleSweptSolidAnalyzer = null;\r\n         IList<Tuple<PlanarFace, XYZ>> potentialSweptAreaFaces = new List<Tuple<PlanarFace, XYZ>>();\r\n         Curve directrix = potentialPathGeom as Curve;\r\n\r\n         // In some cases potentialPathGeom comes as PolyLine\r\n         if (directrix == null)\r\n            return Create(faces, normal);\r\n\r\n         XYZ directrixStartPt = directrix.GetEndPoint(0);\r\n         XYZ directrixEndPt = directrix.GetEndPoint(1);\r\n\r\n         // Collect planar faces as candidates for the swept area\r\n         foreach (Face face in faces)\r\n         {\r\n            if (!(face is PlanarFace))\r\n               continue;\r\n\r\n            PlanarFace planarFace = face as PlanarFace;\r\n            // Candidate face must be Orthogonal to the plane where the directrix curve is\r\n            if (MathUtil.VectorsAreOrthogonal(normal, planarFace.FaceNormal))\r\n            {\r\n               // We are also interested to get only end faces where the Curve intersect the Face at the same point as the Curve start or end point\r\n               IntersectionResultArray intersectResults;\r\n               if (planarFace.Intersect(directrix, out intersectResults) == SetComparisonResult.Overlap)\r\n               {\r\n                  foreach (IntersectionResult res in intersectResults)\r\n                  {\r\n                     if (res.XYZPoint.IsAlmostEqualTo(directrixStartPt)\r\n                         || res.XYZPoint.IsAlmostEqualTo(directrixEndPt))\r\n                     {\r\n                        Tuple<PlanarFace, XYZ> potentialEndFaceAndPoint = new Tuple<PlanarFace, XYZ>(planarFace, res.XYZPoint);\r\n                        potentialSweptAreaFaces.Add(potentialEndFaceAndPoint);\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         // If there is more than 1 candidate, we need to find the congruent faces, \r\n         // and they cannot be on the same plane.\r\n         PlanarFace sweptEndStartFace = null;\r\n\r\n         while (potentialSweptAreaFaces.Count > 1 && (sweptEndStartFace == null))\r\n         {\r\n            PlanarFace face0 = potentialSweptAreaFaces[0].Item1;\r\n            XYZ ptDirectrix = potentialSweptAreaFaces[0].Item2;\r\n            potentialSweptAreaFaces.RemoveAt(0);    // remove the item from the List\r\n\r\n            IList<Tuple<PlanarFace, XYZ>> potentialPairList = potentialSweptAreaFaces;\r\n\r\n            foreach (Tuple<PlanarFace, XYZ> potentialPair in potentialPairList)\r\n            {\r\n               PlanarFace face1 = potentialPair.Item1;\r\n\r\n               // Cannot handle faces that are on the same plane or intersecting (will cause self-intersection when being swept)\r\n               // -- Can't do the intersection way because Revit returns intersection of the planes where those faces are defines (unbound)\r\n               //if (face0.Intersect(face1) == FaceIntersectionFaceResult.Intersecting)\r\n               //    continue;\r\n               // If the faces are facing the same direction (or opposite) they may be of the same plane. Skip those of the same plane\r\n               if (face0.FaceNormal.IsAlmostEqualTo(face1.FaceNormal) || face0.FaceNormal.IsAlmostEqualTo(face1.FaceNormal.Negate()))\r\n               {\r\n                  // chose any point in face0 and face1\r\n                  XYZ pF0TopF1 = (face0.EdgeLoops.get_Item(0).get_Item(0).AsCurve().GetEndPoint(0)\r\n                                  - face1.EdgeLoops.get_Item(0).get_Item(0).AsCurve().GetEndPoint(0)).Normalize();\r\n\r\n                  if (pF0TopF1 == null || pF0TopF1.IsZeroLength())\r\n                     continue;\r\n                  // If the vector created from a point in Face0 and a point in Face1 against the face normal is orthogonal, it means the faces are on the same plane\r\n                  if (MathUtil.VectorsAreOrthogonal(face0.FaceNormal, pF0TopF1))\r\n                     continue;\r\n               }\r\n\r\n               if (AreFacesSimpleCongruent(face0, face1))\r\n               {\r\n                  if (ptDirectrix.IsAlmostEqualTo(directrixStartPt))\r\n                     sweptEndStartFace = face0;\r\n                  else\r\n                     sweptEndStartFace = face1;\r\n                  break;\r\n               }\r\n            }\r\n         }\r\n\r\n         if (sweptEndStartFace != null)\r\n         {\r\n            simpleSweptSolidAnalyzer = new SimpleSweptSolidAnalyzer();\r\n            simpleSweptSolidAnalyzer.ProfileFace = sweptEndStartFace;\r\n            simpleSweptSolidAnalyzer.PathCurve = directrix;\r\n         }\r\n\r\n         return simpleSweptSolidAnalyzer;\r\n      }\r\n\r\n      private static Curve GetPathCurve(PlanarFace profileFace1, PlanarFace profileFace2, \r\n         IList<CylindricalFace> cylindricalFaces, EdgeArray edgeArray)\r\n      {\r\n         // Get an arbitrary curve from any of the cylindrical faces that isn't shared with either of\r\n         // the provided planar faces.\r\n         // Assumptions of this routine: 2 planar faces, all cylindrical faces have 4 edges.\r\n         foreach (Edge edge in edgeArray)\r\n         {\r\n            Face edgeFace0 = edge.GetFace(0);\r\n            if (edgeFace0 == profileFace1 || edgeFace0 == profileFace2)\r\n            {\r\n               continue;\r\n            }\r\n\r\n            Face edgeFace1 = edge.GetFace(1);\r\n            if (edgeFace1 == profileFace1 || edgeFace1 == profileFace2)\r\n            {\r\n               continue;\r\n            }\r\n\r\n            Curve curve = edge.AsCurveFollowingFace(cylindricalFaces[0]);\r\n            if (curve is Line)\r\n            {\r\n               // This is a cylinder.\r\n               return null;\r\n            }\r\n\r\n            return curve;\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a SimpleSweptSolidAnalyzer and computes the swept solid.\r\n      /// </summary>\r\n      /// <param name=\"faces\">The faces of a solid.</param>\r\n      /// <returns>The analyzer.</returns>\r\n      /// <remarks>This is very specialized for a solid made of planes and cylinders.</remarks>\r\n      public static SimpleSweptSolidAnalyzer CreateFromSimpleCylindricalSurfaces(ICollection<Face> faces)\r\n      {\r\n         int numFaces = faces?.Count ?? 0;\r\n         if (numFaces < 3)\r\n         {\r\n            // Invalid faces.\r\n            return null;\r\n         }\r\n\r\n         // Only acceptable cases: planarFaces + at least 1 cylindricalFace, and no other face types.\r\n         // All faces have either 4 edges, except for the two end planar faces that have numFaces-2 edges.\r\n         IList<PlanarFace> endPlanarFaces = new List<PlanarFace>();\r\n         IList<CylindricalFace> cylindricalFaces = new List<CylindricalFace>();\r\n         EdgeArray edgeArray = null;\r\n\r\n         int numEndPlanarFaces = 0;\r\n\r\n         foreach (Face face in faces)\r\n         {\r\n            EdgeArrayArray edgeArrayArray = face.EdgeLoops;\r\n            if ((edgeArrayArray?.Size ?? 0) != 1)\r\n            {\r\n               return null;\r\n            }\r\n\r\n            EdgeArray currEdgeArray = edgeArrayArray.get_Item(0);\r\n            int currEdgeArraySize = currEdgeArray.Size;\r\n\r\n            if (face is CylindricalFace)\r\n            {\r\n               if (currEdgeArraySize != 4)\r\n               {\r\n                  return null;\r\n               }\r\n               if (edgeArray == null)\r\n               {\r\n                  edgeArray = currEdgeArray;\r\n               }\r\n\r\n               cylindricalFaces.Add(face as CylindricalFace);\r\n               continue;\r\n            }\r\n            else if (face is PlanarFace)\r\n            {\r\n               PlanarFace planarFace = face as PlanarFace;\r\n               if (currEdgeArraySize == 4)\r\n               {\r\n                  continue;\r\n               }\r\n\r\n               if (numEndPlanarFaces == 2 || currEdgeArraySize != numFaces - 2)\r\n               {\r\n                  return null;\r\n               }\r\n\r\n               numEndPlanarFaces++;\r\n               endPlanarFaces.Add(planarFace);\r\n            }\r\n            else\r\n            {\r\n               return null;\r\n            }\r\n         }\r\n\r\n         if (numEndPlanarFaces < 2 || cylindricalFaces.Count == 0)\r\n         {\r\n            return null;\r\n         }\r\n\r\n         Curve pathCurve = GetPathCurve(endPlanarFaces[0], endPlanarFaces[1], cylindricalFaces, edgeArray);\r\n         if (pathCurve == null || !pathCurve.IsBound)\r\n         {\r\n            return null;\r\n         }\r\n\r\n         XYZ firstPlaneNormal = endPlanarFaces[0].FaceNormal;\r\n         XYZ firstPlaneOrigin = endPlanarFaces[0].Origin;\r\n         if (!MathUtil.IsAlmostZero((pathCurve.GetEndPoint(0) - firstPlaneOrigin).DotProduct(firstPlaneNormal)))\r\n         {\r\n            pathCurve = pathCurve.CreateReversed();\r\n            // Sanity check.\r\n            if (!MathUtil.IsAlmostZero((pathCurve.GetEndPoint(0) - firstPlaneOrigin).DotProduct(firstPlaneNormal)))\r\n            {\r\n               return null;\r\n            }\r\n         }\r\n\r\n         XYZ startPathCurveNormal = pathCurve.ComputeDerivatives(0, true).BasisX.Normalize();\r\n         XYZ endPathCurveNormal = pathCurve.ComputeDerivatives(1, true).BasisX.Normalize();\r\n\r\n         XYZ secondPlaneNormal = endPlanarFaces[1].FaceNormal;\r\n\r\n         if (firstPlaneNormal.IsAlmostEqualTo(-startPathCurveNormal) &&\r\n            secondPlaneNormal.IsAlmostEqualTo(endPathCurveNormal))\r\n         {\r\n            SimpleSweptSolidAnalyzer simpleSweptSolidAnalyzer = new SimpleSweptSolidAnalyzer();\r\n\r\n            simpleSweptSolidAnalyzer.ProfileFace = endPlanarFaces[0];\r\n            simpleSweptSolidAnalyzer.PathCurve = pathCurve;\r\n\r\n            return simpleSweptSolidAnalyzer;\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a SimpleSweptSolidAnalyzer and computes the swept solid.\r\n      /// </summary>\r\n      /// <param name=\"faces\">The faces of a solid.</param>\r\n      /// <param name=\"normal\">The normal of the reference plane that a path might lie on.  If it is null, try to guess based on the geometry.</param>\r\n      /// <returns>The analyzer.</returns>\r\n      /// <remarks>This is a simple analyzer, and is not intended to be general - it works in some simple, real-world cases.</remarks>\r\n      public static SimpleSweptSolidAnalyzer Create(ICollection<Face> faces, XYZ normal)\r\n      {\r\n         SimpleSweptSolidAnalyzer simpleSweptSolidAnalyzer = CreateFromSimpleCylindricalSurfaces(faces);\r\n         if (simpleSweptSolidAnalyzer != null)\r\n         {\r\n            return simpleSweptSolidAnalyzer;\r\n         }\r\n\r\n         int numFaces = faces?.Count ?? 0;\r\n         if (numFaces < 3)\r\n         {\r\n            // Invalid faces.\r\n            return null;\r\n         }\r\n\r\n         if (normal == null)\r\n         {\r\n            foreach (Face face in faces)\r\n            {\r\n               if (face is RevolvedFace)\r\n               {\r\n                  XYZ faceNormal = (face as RevolvedFace).Axis;\r\n                  if (normal == null)\r\n                     normal = faceNormal;\r\n                  else if (!MathUtil.VectorsAreParallel(normal, faceNormal))\r\n                  {\r\n                     // Couldn't calculate swept solid normal.\r\n                     return null;\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         // find potential profile faces, their normal vectors must be orthogonal to the input normal\r\n         List<PlanarFace> potentialSweepEndFaces = new List<PlanarFace>();\r\n         foreach (Face face in faces)\r\n         {\r\n            PlanarFace planarFace = face as PlanarFace;\r\n            if (planarFace == null)\r\n               continue;\r\n            if (MathUtil.VectorsAreOrthogonal(normal, planarFace.FaceNormal))\r\n               potentialSweepEndFaces.Add(planarFace);\r\n         }\r\n\r\n         if (potentialSweepEndFaces.Count < 2)\r\n         {\r\n            // Can't find enough potential end faces.\r\n            return null;\r\n         }\r\n\r\n         int ii = 0;\r\n         PlanarFace candidateProfileFace = null; // the potential profile face for the swept solid\r\n         PlanarFace candidateProfileFace2 = null;\r\n         Edge candidatePathEdge = null;\r\n         bool foundCandidateFace = false;\r\n         do\r\n         {\r\n            candidateProfileFace = potentialSweepEndFaces[ii++];\r\n\r\n            // find edges on the candidate profile face and the side faces with the edges\r\n            // later find edges on the other candidate profile face with same side faces\r\n            // they will be used to compare if the edges are congruent\r\n            // to make sure the two faces are the potential profile faces\r\n\r\n            Dictionary<Face, Edge> sideFacesWithCandidateEdges = new Dictionary<Face, Edge>();\r\n            EdgeArrayArray candidateFaceEdgeLoops = candidateProfileFace.EdgeLoops;\r\n            foreach (EdgeArray edgeArray in candidateFaceEdgeLoops)\r\n            {\r\n               foreach (Edge candidateEdge in edgeArray)\r\n               {\r\n                  Face sideFace = candidateEdge.GetFace(0);\r\n                  if (sideFace == candidateProfileFace)\r\n                     sideFace = candidateEdge.GetFace(1);\r\n\r\n                  if (sideFacesWithCandidateEdges.ContainsKey(sideFace)) // should not happen\r\n                     throw new InvalidOperationException(\"Failed\");\r\n\r\n                  sideFacesWithCandidateEdges[sideFace] = candidateEdge;\r\n               }\r\n            }\r\n\r\n            double candidateProfileFaceArea = candidateProfileFace.Area;\r\n            foreach (PlanarFace theOtherCandidateFace in potentialSweepEndFaces)\r\n            {\r\n               if (theOtherCandidateFace.Equals(candidateProfileFace))\r\n                  continue;\r\n\r\n               if (!MathUtil.IsAlmostEqual(candidateProfileFaceArea, theOtherCandidateFace.Area))\r\n                  continue;\r\n\r\n               EdgeArrayArray theOtherCandidateFaceEdgeLoops = theOtherCandidateFace.EdgeLoops;\r\n\r\n               bool failToFindTheOtherCandidateFace = false;\r\n               Dictionary<Face, Edge> sideFacesWithTheOtherCandidateEdges = new Dictionary<Face, Edge>();\r\n               foreach (EdgeArray edgeArray in theOtherCandidateFaceEdgeLoops)\r\n               {\r\n                  foreach (Edge theOtherCandidateEdge in edgeArray)\r\n                  {\r\n                     Face sideFace = theOtherCandidateEdge.GetFace(0);\r\n                     if (sideFace == theOtherCandidateFace)\r\n                        sideFace = theOtherCandidateEdge.GetFace(1);\r\n\r\n                     if (!sideFacesWithCandidateEdges.ContainsKey(sideFace)) // should already have\r\n                     {\r\n                        failToFindTheOtherCandidateFace = true;\r\n                        break;\r\n                     }\r\n\r\n                     if (sideFacesWithTheOtherCandidateEdges.ContainsKey(sideFace)) // should not happen\r\n                        throw new InvalidOperationException(\"Failed\");\r\n\r\n                     sideFacesWithTheOtherCandidateEdges[sideFace] = theOtherCandidateEdge;\r\n                  }\r\n               }\r\n\r\n               if (failToFindTheOtherCandidateFace)\r\n                  continue;\r\n\r\n               if (sideFacesWithCandidateEdges.Count != sideFacesWithTheOtherCandidateEdges.Count)\r\n                  continue;\r\n\r\n               // side faces with candidate profile face edges\r\n               Dictionary<Face, List<Edge>> sideFacesWithEdgesDic = new Dictionary<Face, List<Edge>>();\r\n               foreach (Face sideFace in sideFacesWithCandidateEdges.Keys)\r\n               {\r\n                  sideFacesWithEdgesDic[sideFace] = new List<Edge>()\r\n                  {\r\n                     sideFacesWithCandidateEdges[sideFace],\r\n                     sideFacesWithTheOtherCandidateEdges[sideFace]\r\n                  };\r\n               }\r\n\r\n               if (!AreFacesSimpleCongruent(sideFacesWithEdgesDic))\r\n                  continue;\r\n\r\n               // find candidate path edges\r\n               Dictionary<Face, List<Edge>> candidatePathEdgesWithFace = new Dictionary<Face, List<Edge>>();\r\n               foreach (KeyValuePair<Face, List<Edge>> sideFaceAndEdges in sideFacesWithEdgesDic)\r\n               {\r\n                  List<Edge> pathEdges = FindCandidatePathEdge(sideFaceAndEdges.Key, sideFaceAndEdges.Value[0], sideFaceAndEdges.Value[1]);\r\n                  // maybe we found two faces of an opening or a recess on the swept solid, skip in this case\r\n                  if (pathEdges.Count < 2)\r\n                  {\r\n                     failToFindTheOtherCandidateFace = true;\r\n                     break;\r\n                  }\r\n                  candidatePathEdgesWithFace[sideFaceAndEdges.Key] = pathEdges;\r\n               }\r\n\r\n               if (failToFindTheOtherCandidateFace)\r\n                  continue;\r\n\r\n               // check if these edges are congruent\r\n               if (!AreEdgesSimpleCongruent(candidatePathEdgesWithFace))\r\n                  continue;\r\n\r\n               candidatePathEdge = candidatePathEdgesWithFace.Values.ElementAt(0).ElementAt(0);\r\n\r\n               foundCandidateFace = true;\r\n               candidateProfileFace2 = theOtherCandidateFace;\r\n               break;\r\n            }\r\n\r\n            if (foundCandidateFace)\r\n               break;\r\n         } while (ii < potentialSweepEndFaces.Count);\r\n\r\n         if (foundCandidateFace)\r\n         {\r\n            simpleSweptSolidAnalyzer = new SimpleSweptSolidAnalyzer();\r\n            Curve pathCurve = candidatePathEdge.AsCurve();\r\n            XYZ endPoint0 = pathCurve.GetEndPoint(0);\r\n\r\n            bool foundProfileFace = false;\r\n            List<PlanarFace> profileFaces = new List<PlanarFace>() { candidateProfileFace, candidateProfileFace2 };\r\n\r\n            foreach (PlanarFace profileFace in profileFaces)\r\n            {\r\n               IntersectionResultArray intersectionResults;\r\n               profileFace.Intersect(pathCurve, out intersectionResults);\r\n               if (intersectionResults != null)\r\n               {\r\n                  foreach (IntersectionResult intersectionResult in intersectionResults)\r\n                  {\r\n                     XYZ intersectPoint = intersectionResult.XYZPoint;\r\n                     if (intersectPoint.IsAlmostEqualTo(endPoint0))\r\n                     {\r\n                        simpleSweptSolidAnalyzer.ProfileFace = profileFace;\r\n                        foundProfileFace = true;\r\n                        break;\r\n                     }\r\n                  }\r\n               }\r\n\r\n               if (foundProfileFace)\r\n                  break;\r\n            }\r\n\r\n            if (!foundProfileFace)\r\n            {\r\n               // Failed to find profile face.\r\n               return null;\r\n            }\r\n\r\n            // TODO: consider one profile face has an opening extrusion inside while the other does not\r\n            List<Face> alignedFaces = FindAlignedFaces(profileFaces.ToList<Face>());\r\n\r\n            foreach (Face face in faces)\r\n            {\r\n               if (profileFaces.Contains(face) || alignedFaces.Contains(face))\r\n                  continue;\r\n\r\n               simpleSweptSolidAnalyzer.UnalignedFaces.Add(face);\r\n            }\r\n\r\n            simpleSweptSolidAnalyzer.PathCurve = pathCurve;\r\n         }\r\n\r\n         return simpleSweptSolidAnalyzer;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds faces aligned with the swept solid.\r\n      /// </summary>\r\n      /// <param name=\"profileFaces\">The profile faces.</param>\r\n      /// <returns>The aligned faces.</returns>\r\n      private static List<Face> FindAlignedFaces(ICollection<Face> profileFaces)\r\n      {\r\n         List<Face> alignedFaces = new List<Face>();\r\n         foreach (Face face in profileFaces)\r\n         {\r\n            EdgeArrayArray edgeLoops = face.EdgeLoops;\r\n            int edgeLoopCount = edgeLoops.Size;\r\n\r\n            for (int ii = 0; ii < edgeLoopCount; ii++)\r\n            {\r\n               foreach (Edge edge in edgeLoops.get_Item(ii))\r\n               {\r\n                  Face alignedFace = edge.GetFace(0);\r\n                  if (alignedFace == face)\r\n                     alignedFace = edge.GetFace(1);\r\n                  alignedFaces.Add(alignedFace);\r\n               }\r\n            }\r\n         }\r\n         return alignedFaces;\r\n      }\r\n\r\n      private static bool AreFacesSimpleCongruent(Face face0, Face face1)\r\n      {\r\n         if (!MathUtil.IsAlmostEqual(face0.Area, face1.Area))\r\n            return false;\r\n\r\n         BoundingBoxUV BB0 = face0.GetBoundingBox();\r\n         BoundingBoxUV BB1 = face1.GetBoundingBox();\r\n         if (!(face0.GetBoundingBox().Min.IsAlmostEqualTo(face0.GetBoundingBox().Min)\r\n             && face0.GetBoundingBox().Max.IsAlmostEqualTo(face0.GetBoundingBox().Max)))\r\n            return false;\r\n\r\n         EdgeArrayArray EArrArr0 = face0.EdgeLoops;\r\n         EdgeArrayArray EArrArr1 = face1.EdgeLoops;\r\n         if (EArrArr0.Size != EArrArr1.Size)\r\n            return false;\r\n\r\n         // Collect all the edges in a simple list. To be congruent both list must be exactly the same (number of edges, edge type, edge properties)\r\n         IList<Edge> simpleEdgeList0 = new List<Edge>();\r\n         foreach (EdgeArray EArr in EArrArr0)\r\n            foreach (Edge edge in EArr)\r\n               simpleEdgeList0.Add(edge);\r\n\r\n         IList<Edge> simpleEdgeList1 = new List<Edge>();\r\n         foreach (EdgeArray EArr in EArrArr1)\r\n            foreach (Edge edge in EArr)\r\n               simpleEdgeList1.Add(edge);\r\n\r\n         if (simpleEdgeList0.Count != simpleEdgeList1.Count)\r\n            return false;\r\n\r\n         for (int ii = 0; ii < simpleEdgeList0.Count; ++ii)\r\n         {\r\n            Curve curve0 = simpleEdgeList0[ii].AsCurve();\r\n            Curve curve1 = simpleEdgeList1[ii].AsCurve();\r\n\r\n            if (curve0 is Line)\r\n            {\r\n               if (!(curve1 is Line))\r\n                  return false;\r\n               if (!MathUtil.IsAlmostEqual(curve0.Length, curve1.Length))\r\n                  return false;\r\n               continue;\r\n            }\r\n            else if (curve0 is Arc)\r\n            {\r\n               if (!(curve1 is Arc))\r\n                  return false;\r\n               if (!MathUtil.IsAlmostEqual(curve0.Length, curve1.Length))\r\n                  return false;\r\n               if (!MathUtil.IsAlmostEqual((curve0 as Arc).Radius, (curve1 as Arc).Radius))\r\n                  return false;\r\n               continue;\r\n            }\r\n\r\n            // not support other types of curves for now\r\n            return false;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if two faces are congruent.\r\n      /// </summary>\r\n      /// <param name=\"faceEdgeDic\">The collection contains edges on the candidate faces combined with same side faces.</param>\r\n      /// <returns>True if congruent, false otherwise.</returns>\r\n      private static bool AreFacesSimpleCongruent(Dictionary<Face, List<Edge>> faceEdgeDic)\r\n      {\r\n         if (faceEdgeDic == null || faceEdgeDic.Count == 0)\r\n            return false;\r\n\r\n         foreach (Face face in faceEdgeDic.Keys)\r\n         {\r\n            List<Edge> edges = faceEdgeDic[face];\r\n            if (edges.Count != 2)\r\n               return false;\r\n\r\n            Curve curve0 = edges[0].AsCurve();\r\n            Curve curve1 = edges[1].AsCurve();\r\n\r\n            if (curve0 is Line)\r\n            {\r\n               if (!(curve1 is Line))\r\n                  return false;\r\n               if (!MathUtil.IsAlmostEqual(curve0.Length, curve1.Length))\r\n                  return false;\r\n               continue;\r\n            }\r\n            else if (curve0 is Arc)\r\n            {\r\n               if (!(curve1 is Arc))\r\n                  return false;\r\n               if (!MathUtil.IsAlmostEqual(curve0.Length, curve1.Length))\r\n                  return false;\r\n               if (!MathUtil.IsAlmostEqual((curve0 as Arc).Radius, (curve1 as Arc).Radius))\r\n                  return false;\r\n               continue;\r\n            }\r\n\r\n            // not support other types of curves for now\r\n            return false;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if edges are congruent.\r\n      /// </summary>\r\n      /// <param name=\"faceEdgeDic\">The collection contains potential path edges on the side faces.</param>\r\n      /// <returns>True if congruent, false otherwise.</returns>\r\n      private static bool AreEdgesSimpleCongruent(Dictionary<Face, List<Edge>> faceEdgeDic)\r\n      {\r\n         if (faceEdgeDic == null || faceEdgeDic.Count == 0)\r\n            return false;\r\n\r\n         foreach (Face face in faceEdgeDic.Keys)\r\n         {\r\n            List<Edge> edges = faceEdgeDic[face];\r\n            if (edges.Count != 2)\r\n               return false;\r\n\r\n            Curve curve0 = edges[0].AsCurveFollowingFace(face);\r\n            Curve curve1 = edges[1].AsCurveFollowingFace(face);\r\n\r\n            if (curve0 is Line)\r\n            {\r\n               if (!(curve1 is Line))\r\n                  return false;\r\n               XYZ moveDir = curve1.GetEndPoint(1) - curve0.GetEndPoint(0);\r\n               Curve movedCurve = GeometryUtil.MoveCurve(curve0, moveDir);\r\n               if (movedCurve.Intersect(curve1, CurveIntersectResultOption.Simple)?.Result != SetComparisonResult.Equal)\r\n                  return false;\r\n               continue;\r\n            }\r\n            else if (curve0 is Arc)\r\n            {\r\n               if (!(curve1 is Arc))\r\n                  return false;\r\n               Arc arc0 = curve0 as Arc;\r\n               XYZ offsetVec = curve1.GetEndPoint(1) - curve0.GetEndPoint(0);\r\n               Arc offsetArc = OffsetArc(arc0, curve0.GetEndPoint(0), offsetVec);\r\n               if (offsetArc.Intersect(curve1, CurveIntersectResultOption.Simple)?.Result != SetComparisonResult.Equal)\r\n                  return false;\r\n               continue;\r\n            }\r\n\r\n            // not support other types of curves for now\r\n            return false;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Offsets an arc along the offset direction from the point on the arc.\r\n      /// </summary>\r\n      /// <param name=\"arc\">The arc.</param>\r\n      /// <param name=\"offsetPntOnArc\">The point on the arc.</param>\r\n      /// <param name=\"offset\">The offset vector.</param>\r\n      /// <returns>The offset Arc.</returns>\r\n      private static Arc OffsetArc(Arc arc, XYZ offsetPntOnArc, XYZ offset)\r\n      {\r\n         if (arc == null || offset == null)\r\n            throw new ArgumentNullException();\r\n\r\n         if (offset.IsZeroLength())\r\n            return arc;\r\n\r\n         XYZ axis = arc.Normal.Normalize();\r\n\r\n         XYZ offsetAlongAxis = axis.Multiply(offset.DotProduct(axis));\r\n         XYZ offsetOrthAxis = offset - offsetAlongAxis;\r\n         XYZ offsetPntToCenter = (arc.Center - offsetPntOnArc).Normalize();\r\n\r\n         double signedOffsetLengthTowardCenter = offsetOrthAxis.DotProduct(offsetPntToCenter);\r\n         double newRadius = arc.Radius - signedOffsetLengthTowardCenter; // signedOffsetLengthTowardCenter > 0, minus, < 0, add\r\n\r\n         Arc offsetArc = Arc.Create(arc.Center, newRadius, arc.GetEndParameter(0), arc.GetEndParameter(1), arc.XDirection, arc.YDirection);\r\n\r\n         offsetArc = GeometryUtil.MoveCurve(offsetArc, offsetAlongAxis) as Arc;\r\n\r\n         return offsetArc;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds candidate path edges from a side face with two edges on the profile face.\r\n      /// </summary>\r\n      /// <param name=\"face\">The side face.</param>\r\n      /// <param name=\"edge0\">The edge on the profile face and the side face.</param>\r\n      /// <param name=\"edge1\">The edge on the profile face and the side face.</param>\r\n      /// <returns>The potential path edges. Should at least have two path on one face</returns>\r\n      private static List<Edge> FindCandidatePathEdge(Face face, Edge edge0, Edge edge1)\r\n      {\r\n         double vertexEps = ExporterCacheManager.Document.Application.VertexTolerance;\r\n\r\n         Curve curve0 = edge0.AsCurveFollowingFace(face);\r\n         Curve curve1 = edge1.AsCurveFollowingFace(face);\r\n\r\n         XYZ[,] endPoints = new XYZ[2, 2] { { curve0.GetEndPoint(0), curve1.GetEndPoint(1) }, { curve0.GetEndPoint(1), curve1.GetEndPoint(0) } };\r\n\r\n         List<Edge> candidatePathEdges = new List<Edge>();\r\n         EdgeArray outerEdgeLoop = face.EdgeLoops.get_Item(0);\r\n         foreach (Edge edge in outerEdgeLoop)\r\n         {\r\n            XYZ endPoint0 = edge.Evaluate(0);\r\n            XYZ endPoint1 = edge.Evaluate(1);\r\n\r\n            for (int ii = 0; ii < 2; ii++)\r\n            {\r\n               bool found = false;\r\n               for (int jj = 0; jj < 2; jj++)\r\n               {\r\n                  if (endPoint0.IsAlmostEqualTo(endPoints[ii, jj], vertexEps))\r\n                  {\r\n                     int kk = 1 - jj;\r\n                     if (endPoint1.IsAlmostEqualTo(endPoints[ii, kk], vertexEps))\r\n                     {\r\n                        candidatePathEdges.Add(edge);\r\n                        found = true;\r\n                        break;\r\n                     }\r\n                  }\r\n               }\r\n               if (found)\r\n                  break;\r\n            }\r\n         }\r\n\r\n         return candidatePathEdges;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/SiteExportInfo.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Utility;\n\nnamespace Revit.IFC.Export.Utility\n{\n   /// <summary>\n   /// Class to encapsulate information about Site Export.\n   /// This includes both SiteHandle (STEP in IFC File) and SiteElementId (Site within Revit).\n   /// </summary>\n   public class SiteExportInfo\n   {\n\n      /// <summary>\n      /// Handle for IfcSite, once it has been exported.\n      /// </summary>\n      public IFCAnyHandle SiteHandle { get; set; } = null;\n\n      /// <summary>\n      /// ElementId corresponding to IfcSite.  If IfcSite corresponds to no Element (i.e., the \"Default Site), then this should\n      /// remain ElementId.InvalidElementId.\n      /// </summary>\n      public ElementId SiteElementId { get; set; } = ElementId.InvalidElementId;\n\n      /// <summary>\n      /// ElementId that can potentially be the Main Site Element.  Only one is checked at a given time.\n      /// </summary>\n      public ElementId PotentialSiteElementId { get; set;} = ElementId.InvalidElementId;\n\n      /// <summary>\n      /// Helper method to indicate if IfcSite has been exported.\n      /// </summary>\n      /// <returns>True if IfcSite exported, false otherwise.</returns>\n      public bool IsSiteExported() => !IFCAnyHandleUtil.IsNullOrHasNoValue(SiteHandle);\n\n      /// <summary>\n      /// Helper method to indicate if IFC File is using the \"Default\" IfcSite.\n      /// </summary>\n      /// <returns>True if using \"Default\" IfcSite, false otherwise.</returns>\n      public bool UsingDefaultSite() => IsSiteExported() && SiteElementId == ElementId.InvalidElementId;\n\n      /// <summary>\n      /// Helper method to indicate if IFC File is using an IfcSite corresponding to an Element (i.e., not the \"Default\" IfcSite).\n      /// </summary>\n      /// <returns>True if corresponds to an Element, false otherwise.</returns>\n      public bool UsingElementSite() => IsSiteExported() && SiteElementId != ElementId.InvalidElementId;\n\n      /// <summary>\n      /// Convenience Function to indicate whether the given ElementId is the SiteElementId (positive identificatioN) or not.\n      /// </summary>\n      /// <param name=\"elementId\">Element to check.</param>\n      /// <returns>True if positively Element has been positively identified as the main Site, False otherwise.</returns>\n      public bool IsSiteElementId(ElementId elementId) => SiteElementId == elementId;\n\n      /// <summary>\n      /// Convenience Function to indicate whether the given ElementId can potentially be the Main Site.\n      /// </summary>\n      /// <param name=\"elementId\">ElementId to check.</param>\n      /// <returns>True if the Element can be the Main Site, False otherwise.</returns>\n      public bool IsPotentialSiteElementId(ElementId elementId) => PotentialSiteElementId == elementId;\n\n      /// <summary>\n      /// Establishes the current \"Potential\" Main Site Element as the Main Site Element.\n      /// </summary>\n      public void EstablishPotentialSiteElement()\n      {\n         SiteElementId = PotentialSiteElementId;\n         PotentialSiteElementId = ElementId.InvalidElementId;\n      }\n\n      /// <summary>\n      /// Resets the Site Information for another Export.\n      /// </summary>\n      public void Clear()\n      {\n         SiteHandle = null;\n         SiteElementId = ElementId.InvalidElementId;\n         PotentialSiteElementId = ElementId.InvalidElementId;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/SpaceBoundaryCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Revit.IFC.Export.Exporter;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of space boundaries.\r\n   /// </summary>\r\n   public class SpaceBoundaryCache : List<SpaceBoundary>\r\n   {\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/SpaceBoundingElementUtil.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing Autodesk.Revit;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Toolkit;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   public class SpaceBoundingElementUtil\r\n   {\r\n      static public void RegisterSpaceBoundingElementHandle(ExporterIFC exporterIFC, IFCAnyHandle elemHnd, ElementId elementId,\r\n          ElementId levelId)\r\n      {\r\n         int idx;\r\n         if (!ExporterCacheManager.HostObjectsLevelIndex.TryGetValue(levelId, out idx))\r\n         {\r\n            int nextIndex = ExporterCacheManager.HostObjectsLevelIndex.Count;\r\n            ExporterCacheManager.HostObjectsLevelIndex.Add(levelId, nextIndex);\r\n         }\r\n\r\n         exporterIFC.RegisterSpaceBoundingElementHandle(elemHnd, elementId, levelId);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/SpaceInfo.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.Architecture;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB.Mechanical;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// The class contains relation of IFC space and elements.\r\n   /// </summary>\r\n   public class SpaceInfo\r\n   {\r\n      IFCAnyHandle m_SpaceHandle;\r\n      HashSet<IFCAnyHandle> m_RelatedElements = new HashSet<IFCAnyHandle>();\r\n\r\n      /// <summary>\r\n      /// Constructs default object.\r\n      /// </summary>\r\n      public SpaceInfo()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Construct a SpaceInfo object.\r\n      /// </summary>\r\n      /// <param name=\"spaceHandle\">The space handle.</param>\r\n      public SpaceInfo(IFCAnyHandle spaceHandle)\r\n      {\r\n         m_SpaceHandle = spaceHandle;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The space handle.\r\n      /// </summary>\r\n      public IFCAnyHandle SpaceHandle\r\n      {\r\n         get { return m_SpaceHandle; }\r\n         set { m_SpaceHandle = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The related elements.\r\n      /// </summary>\r\n      public HashSet<IFCAnyHandle> RelatedElements\r\n      {\r\n         get { return m_RelatedElements; }\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Used to keep a cache of the SpaceInfo objects mapping to a SpatialElement.\r\n   /// </summary>\r\n   public class SpaceInfoCache\r\n   {\r\n      public Dictionary<ElementId, SpaceInfo> SpaceInfos { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// Returns true if any architectural rooms are cached.\r\n      /// </summary>\r\n      public bool ContainsRooms { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Returns true if any MEP spaces are cached.\r\n      /// </summary>\r\n      public bool ContainsSpaces { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Finds the SpaceInfo.\r\n      /// </summary>\r\n      /// <param name=\"spatialElementId\">The SpatialElement id.</param>\r\n      /// <returns></returns>\r\n      public SpaceInfo FindSpaceInfo(ElementId spatialElementId)\r\n      {\r\n         SpaceInfos.TryGetValue(spatialElementId, out SpaceInfo spaceInfo);\r\n         return spaceInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds the space handle from a spatial element id.\r\n      /// </summary>\r\n      /// <param name=\"spatialElementId\">The spatial element id.</param>\r\n      /// <returns>The handle.</returns>\r\n      public IFCAnyHandle FindSpaceHandle(ElementId spatialElementId)\r\n      {\r\n         if (SpaceInfos.TryGetValue(spatialElementId, out SpaceInfo spaceInfo))\r\n            return spaceInfo.SpaceHandle;\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sets the space handle to corresponding spatial element.\r\n      /// </summary>\r\n      /// <param name=\"spatialElement\">The spatial element.</param>\r\n      /// <param name=\"spaceHandle\">The space handle.</param>\r\n      public void SetSpaceHandle(Element spatialElement, IFCAnyHandle spaceHandle)\r\n      {\r\n         if (SpaceInfos.TryGetValue(spatialElement.Id, out SpaceInfo spaceInfo))\r\n         {\r\n            spaceInfo.SpaceHandle = spaceHandle;\r\n         }\r\n         else\r\n         {\r\n            SpaceInfos[spatialElement.Id] = new SpaceInfo(spaceHandle);\r\n         }\r\n\r\n         if (!ContainsRooms)\r\n            ContainsRooms = spatialElement is Room;\r\n         if (!ContainsSpaces)\r\n            ContainsSpaces = spatialElement is Space;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds relation from a element handle to a spatial element.\r\n      /// </summary>\r\n      /// <param name=\"spatialElementId\">The spatial element id.</param>\r\n      /// <param name=\"elemHandle\">The element handle.</param>\r\n      public void RelateToSpace(ElementId spatialElementId, IFCAnyHandle elemHandle)\r\n      {\r\n         SpaceInfo spaceInfo = FindSpaceInfo(spatialElementId);\r\n         if (spaceInfo == null)\r\n         {\r\n            spaceInfo = new SpaceInfo();\r\n            SpaceInfos[spatialElementId] = spaceInfo;\r\n         }\r\n         spaceInfo.RelatedElements.Add(elemHandle);\r\n      }\r\n\r\n      public SpaceInfoCache()\r\n      {\r\n      }\r\n\r\n      public void Clear()\r\n      {\r\n         SpaceInfos.Clear();\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/SpaceOccupantInfoCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Revit.IFC.Export.Exporter;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of information to create zones.\r\n   /// </summary>\r\n   public class SpaceOccupantInfoCache : Dictionary<string, SpaceOccupantInfo>\r\n   {\r\n      /// <summary>\r\n      /// Adds the SpaceOccupantInfo to the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"name\">\r\n      /// The name of the zone.\r\n      /// </param>\r\n      /// <param name=\"spaceOccupantInfo\">\r\n      /// The SpaceOccupantInfo object.\r\n      /// </param>\r\n      public void Register(string name, SpaceOccupantInfo spaceOccupantInfo)\r\n      {\r\n         if (!string.IsNullOrEmpty(name))\r\n            this[name] = spaceOccupantInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds the spaceOccupantInfo from the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"name\">\r\n      /// The name of the zone.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The spaceOccupantInfo object.\r\n      /// </returns>\r\n      public SpaceOccupantInfo Find(string name)\r\n      {\r\n         if (string.IsNullOrEmpty(name))\r\n            return null;\r\n\r\n         SpaceOccupantInfo spaceOccupantInfo;\r\n\r\n         if (TryGetValue(name, out spaceOccupantInfo))\r\n            return spaceOccupantInfo;\r\n\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/StairRampContainerInfoCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Export.Exporter;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of the element ids mapping to a StairRampContainerInfo.\r\n   /// </summary>\r\n   public class StairRampContainerInfoCache : Dictionary<ElementId, StairRampContainerInfo>\r\n   {\r\n      /// <summary>\r\n      /// Adds a StairRampContainerInfo for an element.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element id.</param>\r\n      /// <param name=\"stairRampContainerInfo\">The StairRampContainerInfo.</param>\r\n      public void AddStairRampContainerInfo(ElementId elementId, StairRampContainerInfo stairRampContainerInfo)\r\n      {\r\n         this[elementId] = stairRampContainerInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Appends information of a StairRampContainerInfo to an existing one in the cache or add it if there is no existing one.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element id.</param>\r\n      /// <param name=\"stairRampContainerInfo\">The StairRampContainerInfo.</param>\r\n      public void AppendStairRampContainerInfo(ElementId elementId, StairRampContainerInfo stairRampContainerInfo)\r\n      {\r\n         StairRampContainerInfo existStairRampContainerInfo = null;\r\n\r\n         if (!TryGetValue(elementId, out existStairRampContainerInfo))\r\n            AddStairRampContainerInfo(elementId, stairRampContainerInfo);\r\n         else\r\n         {\r\n            existStairRampContainerInfo.StairOrRampHandles.AddRange(stairRampContainerInfo.StairOrRampHandles);\r\n            existStairRampContainerInfo.Components.AddRange(stairRampContainerInfo.Components);\r\n            existStairRampContainerInfo.LocalPlacements.AddRange(stairRampContainerInfo.LocalPlacements);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if it contains a StairRampContainerInfo of an element.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element id.</param>\r\n      /// <returns>True if there is, false if there is none.</returns>\r\n      public bool ContainsStairRampContainerInfo(ElementId elementId)\r\n      {\r\n         return this.ContainsKey(elementId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the StairRampContainerInfo of an element.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element id.</param>\r\n      /// <returns>The StairRampContainerInfo.</returns>\r\n      public StairRampContainerInfo GetStairRampContainerInfo(ElementId elementId)\r\n      {\r\n         StairRampContainerInfo existStairRampContainerInfo = null;\r\n         TryGetValue(elementId, out existStairRampContainerInfo);\r\n         return existStairRampContainerInfo;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/StringPropertyInfoCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of IFC string properties.\r\n   /// </summary>\r\n   public class StringPropertyInfoCache\r\n   {\r\n      private IDictionary<KeyValuePair<ElementId, string>, IFCAnyHandle> m_PropertiesByIdCache = new Dictionary<KeyValuePair<ElementId, string>, IFCAnyHandle>();\r\n\r\n      private IDictionary<KeyValuePair<string, string>, IFCAnyHandle> m_NamedPropertiesCache = new Dictionary<KeyValuePair<string, string>, IFCAnyHandle>();\r\n\r\n      /// <summary>\r\n      /// Finds if it contains the property with the specified string value.\r\n      /// </summary>\r\n      /// <param name=\"parameterId\">The parameter id.  Can be null or InvalidElementId if propertyName != null.</param>\r\n      /// <param name=\"propertyName\">The property name.  Can be null if elementId != InvalidElementId.</param>\r\n      /// <param name=\"value\">The value.</param>\r\n      /// <returns>True if it has, false otherwise.</returns>\r\n      public IFCAnyHandle Find(ElementId parameterId, string propertyName, string value)\r\n      {\r\n         IFCAnyHandle propertyHandle = null;\r\n         if ((parameterId != null) && (parameterId != ElementId.InvalidElementId))\r\n         {\r\n            ElementId parameterIdToUse = ParameterUtil.MapParameterId(parameterId);\r\n            if (m_PropertiesByIdCache.TryGetValue(new KeyValuePair<ElementId, string>(parameterIdToUse, value), out propertyHandle))\r\n               return propertyHandle;\r\n         }\r\n         else\r\n         {\r\n            if (m_NamedPropertiesCache.TryGetValue(new KeyValuePair<string, string>(propertyName, value), out propertyHandle))\r\n               return propertyHandle;\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a new property of a string value to the cache.\r\n      /// </summary>\r\n      /// <param name=\"parameterId\">The parameter id.  Can be null or InvalidElementId if propertyName != null.</param>\r\n      /// <param name=\"propertyName\">The property name.  Can be null if elementId != InvalidElementId.</param>\r\n      /// <param name=\"value\">The value.</param>\r\n      /// <param name=\"propertyHandle\">The property handle.</param>\r\n      public void Add(ElementId parameterId, string propertyName, string value, IFCAnyHandle propertyHandle)\r\n      {\r\n         if ((parameterId != null) && (parameterId != ElementId.InvalidElementId))\r\n         {\r\n            ElementId parameterIdToUse = ParameterUtil.MapParameterId(parameterId);\r\n            m_PropertiesByIdCache[new KeyValuePair<ElementId, string>(parameterIdToUse, value)] = propertyHandle;\r\n         }\r\n         else\r\n            m_NamedPropertiesCache[new KeyValuePair<string, string>(propertyName, value)] = propertyHandle;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/SystemsCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of systems and the elements contained in them.\r\n   /// </summary>\r\n   public class SystemsCache\r\n   {\r\n      public Dictionary<ElementId, ISet<IFCAnyHandle>> BuiltInSystemsCache { get; private set; } = new();\r\n      public Dictionary<string, ICollection<IFCAnyHandle>> CustomSystemsCache { get; private set; } = new();\r\n      public Dictionary<ElementId, ISet<IFCAnyHandle>> ElectricalSystemsCache { get; private set; } = new();\r\n\r\n      /// <summary>\r\n      /// Creates a new SystemsCache.\r\n      /// </summary>\r\n      public SystemsCache()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets a custom system to the custom systems list.\r\n      /// </summary>\r\n      /// <param name=\"systemName\">The system name.</param>\r\n      /// <returns>The value of the system.</returns>\r\n      private ICollection<IFCAnyHandle> GetCustomSystem(string systemName)\r\n      {\r\n         ICollection<IFCAnyHandle> systemValue;\r\n         if (!CustomSystemsCache.TryGetValue(systemName, out systemValue))\r\n         {\r\n            systemValue = new HashSet<IFCAnyHandle>();\r\n            CustomSystemsCache.TryAdd(systemName, systemValue);\r\n         }\r\n         return systemValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets a system from the systems list.\r\n      /// </summary>\r\n      /// <param name=\"systemElement\">The Revit System element.</param>\r\n      /// <returns>The new system container.</returns>\r\n      private ICollection<IFCAnyHandle> GetSystem(Element systemElement)\r\n      {\r\n         if (systemElement == null)\r\n            throw new ArgumentNullException(\"systemElement\");\r\n\r\n         ISet<IFCAnyHandle> system;\r\n         if (!BuiltInSystemsCache.TryGetValue(systemElement.Id, out system))\r\n         {\r\n            system = new HashSet<IFCAnyHandle>();\r\n            BuiltInSystemsCache.TryAdd(systemElement.Id, system);\r\n         }\r\n\r\n         return system;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a handle to a built-in system.\r\n      /// </summary>\r\n      /// <param name=\"systemElement\">The Revit system element.</param>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      public void AddHandleToBuiltInSystem(Element systemElement, IFCAnyHandle handle)\r\n      {\r\n         if (systemElement == null)\r\n            throw new ArgumentNullException(\"systemElement\");\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(handle))\r\n            return;\r\n\r\n         ICollection<IFCAnyHandle> subSystem = GetSystem(systemElement);\r\n         if (subSystem == null)\r\n            throw new InvalidOperationException(\"Error getting system.\");\r\n         subSystem.Add(handle);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a handle to a custom system.\r\n      /// </summary>\r\n      /// <param name=\"systemName\">The new system.</param>\r\n      /// <param name=\"newSystem\">The Revit System element.</param>\r\n      public void AddHandleToCustomSystem(string customSystemName, IFCAnyHandle handle)\r\n      {\r\n         ICollection<IFCAnyHandle> system = GetCustomSystem(customSystemName);\r\n         if (system == null)\r\n            throw new InvalidOperationException(\"Error getting system.\");\r\n         system.Add(handle);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds an electrical system by Element id, if it doesn't already exist.\r\n      /// </summary>\r\n      /// <param name=\"systemId\">The system element Id.</param>\r\n      public void AddElectricalSystem(ElementId systemId)\r\n      {\r\n         if (!ElectricalSystemsCache.ContainsKey(systemId))\r\n         {\r\n            ElectricalSystemsCache.TryAdd(systemId, new HashSet<IFCAnyHandle>());\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a handle to an existing electrical system.\r\n      /// </summary>\r\n      /// <param name=\"systemId\">The system element Id.</param>\r\n      /// <param name=\"handle\">The entity handle.</param>\r\n      public void AddHandleToElectricalSystem(ElementId systemId, IFCAnyHandle handle)\r\n      {\r\n         if (!ElectricalSystemsCache.ContainsKey(systemId))\r\n            throw new InvalidOperationException(\"Error getting system.\");\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(handle))\r\n            return;\r\n\r\n         ElectricalSystemsCache[systemId].Add(handle);\r\n      }\r\n\r\n      public void Clear()\r\n      {\r\n         BuiltInSystemsCache.Clear();\r\n         CustomSystemsCache.Clear();\r\n         ElectricalSystemsCache.Clear();\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/TemporaryPartsCache.cs",
    "content": "﻿using Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Export.Exporter;\nusing Revit.IFC.Export.Exporter.PropertySet;\nusing System.Collections.Generic;\n\nnamespace Revit.IFC.Export.Utility\n{\n\n   /// <summary>\n   /// The class contains additional information for temporary parts.\n   /// </summary>\n   public class TemporaryPartInfo\n   {\n      public string IfcName { get; set; } = null;\n\n      public string IfcTag { get; set; } = null;\n\n      public int LayerIndex { get; set; } = -1;\n\n      public Dictionary<ElementId, double> MaterialToVolumeMap = null;\n\n      public HashSet<IFCAnyHandle> InternalPropertySets = null;\n   };\n\n   /// <summary>\n   /// Used to keep a cache of temporary parts geomety\n   /// and all the additional information that is not accessible during export.\n   /// </summary>\n   public class TemporaryPartsCache\n   {\n      /// <summary>\n      /// The dictionary mapping from Host element id to list of associated parts geometry elements.\n      /// </summary>\n      private Dictionary<ElementId, List<GeometryElement>> ElementToPartGeometries { get; set; } = new();\n\n      /// <summary>\n      /// The dictionary mapping from part geometry element to additional information about temporary part.\n      /// </summary>\n      private Dictionary<GeometryElement, TemporaryPartInfo> GeometryToPartInfo { get; set; } = new();\n\n      /// <summary>\n      /// The dictionary mapping from Host element id to ExportPartAs type.\n      /// </summary>\n      private Dictionary<ElementId, ExporterUtil.ExportPartAs> PartExportTypes { get; set; } = new();\n\n      /// <summary>\n      /// The temporary part presentation layer.\n      /// </summary>\n      public string TemporaryPartPresentationLayer { get; set; } = null;\n\n      /// <summary>\n      /// Register the part geometry elements for the host element.\n      /// </summary>\n      public void Register(ElementId elementId, List<GeometryElement> partGeometries)\n      {\n         if (elementId == ElementId.InvalidElementId)\n            return;\n\n         ElementToPartGeometries.TryAdd(elementId, partGeometries);\n         PartExportTypes.TryAdd(elementId, ExporterUtil.ExportPartAs.None);\n      }\n\n      /// <summary>\n      /// Find the registered part geometry elements for the host element.\n      /// </summary>\n      public bool Find(ElementId elementId, out List<GeometryElement> partGeometries)\n      {  \n         return ElementToPartGeometries.TryGetValue(elementId, out partGeometries);\n      }\n\n      /// <summary>\n      /// Collect additional information about temporary part.\n      /// </summary>\n      public void CollectTemporaryPartInfo(ExporterIFC exporterIFC, GeometryElement geometryElement, Element part)\n      {\n         if (geometryElement == null)\n            return;\n\n         TemporaryPartInfo temporaryPartInfo = new();\n         temporaryPartInfo.IfcName = NamingUtil.GetIFCName(part);\n         temporaryPartInfo.IfcTag = NamingUtil.GetTagOverride(part);\n\n         // Get layer index\n         if (PartExporter.GetLayerIndex(part, out int layerIndex))\n            temporaryPartInfo.LayerIndex = layerIndex;\n\n         // Collect material volume dictionary\n         ICollection<ElementId> materialIds = part.GetMaterialIds(false);\n         if (materialIds.Count > 0)\n         {\n            temporaryPartInfo.MaterialToVolumeMap = new();\n            foreach (ElementId materialId in materialIds)\n            {\n               double materialVolume = part.GetMaterialVolume(materialId);\n               temporaryPartInfo.MaterialToVolumeMap.TryAdd(materialId, materialVolume);\n            }\n         }\n\n         // Create internal property sets\n         temporaryPartInfo.InternalPropertySets = PropertyUtil.CreateInternalRevitPropertySetsForTemporaryParts(exporterIFC, part);\n\n         GeometryToPartInfo.Add(geometryElement, temporaryPartInfo);\n      }\n\n      /// <summary>\n      /// Determines whether the cache contains the specified temporary part.\n      /// </summary>\n      public bool HasTemporaryParts(ElementId elementId)\n      {\n         return ElementToPartGeometries.ContainsKey(elementId);\n      }\n\n      /// <summary>\n      /// Get the number of part geometries for the host element.\n      /// </summary>\n      public int GeometriesCount(ElementId elementId)\n      {\n         if (ElementToPartGeometries.TryGetValue(elementId, out List<GeometryElement> geometries))\n            return geometries.Count;\n         return 0;\n      }\n\n      /// <summary>\n      /// Find the additional information about temporary part.\n      /// </summary>\n      public bool FindInfo(GeometryElement geometry, out TemporaryPartInfo partInfo)\n      {\n         return GeometryToPartInfo.TryGetValue(geometry, out partInfo);\n      }\n\n      /// <summary>\n      /// Set the export type for the part.\n      /// </summary>\n      public bool SetPartExportType(ElementId elementId, ExporterUtil.ExportPartAs newExportType)\n      {\n         if (PartExportTypes.TryGetValue(elementId, out ExporterUtil.ExportPartAs exportPartAs))\n         {\n            exportPartAs = newExportType;\n            return true;\n         }\n         return false;\n      }\n\n      /// <summary>\n      /// Get the export type for the part.\n      /// </summary>\n      public ExporterUtil.ExportPartAs GetPartExportType(ElementId elementId)\n      {\n         if (PartExportTypes.TryGetValue(elementId, out ExporterUtil.ExportPartAs exportPartAs))\n         {\n            return exportPartAs;\n         }\n         return ExporterUtil.ExportPartAs.None;\n      }\n\n      /// <summary>\n      /// Clear the cache.\n      /// </summary>\n      public void Clear()\n      {\n         ElementToPartGeometries.Clear();\n         GeometryToPartInfo.Clear();\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/TriangleMergeUtil.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012-2016  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Autodesk.Revit.DB;\nusing System.Diagnostics;\n\nnamespace Revit.IFC.Export.Utility\n{\n   /// <summary>\n   /// Private class to creates a face based on the vertex indices\n   /// </summary>\n   class IndexFace\n   {\n      /// <summary>\n      /// Vertex indices for the outer boundary of the face\n      /// </summary>\n      public IList<int> IndexOuterBoundary { get; set; }\n      /// <summary>\n      /// List of vertex indices for the inner boundaries\n      /// </summary>\n      public IList<IList<int>> IndexedInnerBoundaries { get; set; }\n      /// <summary>\n      /// Collection of all the vertices (outer and inner)\n      /// </summary>\n      public IDictionary<int, IndexSegment> OuterAndInnerBoundaries { get; set; } = new Dictionary<int, IndexSegment>();\n      IDictionary<IndexSegment, int> BoundaryLinesDict;\n      /// <summary>\n      /// The normal vector of the face\n      /// </summary>\n      public XYZ Normal { get; set; }\n\n      /// <summary>\n      /// Constructor taking a list of vertex indices (face without hole) \n      /// </summary>\n      /// <param name=\"vertxIndices\">the list of vertex indices (face without hole)</param>\n      public IndexFace(IList<int> vertxIndices, IDictionary<int, XYZ> meshVertices)\n      {\n         IndexOuterBoundary = vertxIndices;\n         SetupEdges(IndexOuterBoundary, 0);\n\n         IList<XYZ> vertices = new List<XYZ>();\n         foreach (int idx in IndexOuterBoundary)\n         {\n            vertices.Add(meshVertices[idx]);\n         }\n         Normal = TriangleMergeUtil.NormalByNewellMethod(vertices);\n      }\n\n      /// <summary>\n      /// Constructor taking in List of List of vertices. The first list will be the outer boundary and the rest are the inner boundaries\n      /// </summary>\n      /// <param name=\"vertxIndices\">List of List of vertices. The first list will be the outer boundary and the rest are the inner boundaries</param>\n      public IndexFace(IList<IList<int>> vertxIndices, IDictionary<int, XYZ> meshVertices)\n      {\n         int vertexCount = vertxIndices?.Count ?? 0;\n         if (vertexCount == 0)\n            return;\n\n         IndexOuterBoundary = vertxIndices[0];\n         SetupEdges(IndexOuterBoundary, 0);\n\n         if (vertexCount > 1)\n         {\n            vertxIndices.RemoveAt(0);\n            IndexedInnerBoundaries = vertxIndices;\n\n            foreach (IList<int> innerBound in IndexedInnerBoundaries)\n            {\n               int idxOffset = OuterAndInnerBoundaries.Count;\n               SetupEdges(innerBound, idxOffset);\n            }\n         }\n\n         // Create normal from only the outer boundary\n         IList<XYZ> vertices = new List<XYZ>();\n         foreach (int idx in IndexOuterBoundary)\n         {\n            vertices.Add(meshVertices[idx]);\n         }\n         Normal = TriangleMergeUtil.NormalByNewellMethod(vertices);\n      }\n\n      /// <summary>\n      /// Reverse the order of the vertices. Only operates on the outer boundary \n      /// </summary>\n      public void Reverse()\n      {\n         // This is used in the process of combining triangles and therefore will work only with the face without holes\n         List<int> revIdxOuter = IndexOuterBoundary.ToList();\n         revIdxOuter.Reverse();\n         OuterAndInnerBoundaries.Clear();\n         BoundaryLinesDict.Clear();\n         SetupEdges(revIdxOuter, 0);\n      }\n\n      /// <summary>\n      /// Find matched line segment in the face boundaries\n      /// </summary>\n      /// <param name=\"inpSeg\">Input line segment as vertex indices</param>\n      /// <returns>Return index of the matched segment</returns>\n      public int FindMatchedIndexSegment(IndexSegment inpSeg)\n      {\n         int idx;\n         if (BoundaryLinesDict.TryGetValue(inpSeg, out idx))\n            return idx;\n         else\n            return -1;\n      }\n\n      void SetupEdges(IList<int> vertxIndices, int idxOffset)\n      {\n         int boundLinesDictOffset = 0;\n\n         if (BoundaryLinesDict == null)\n         {\n            IEqualityComparer<IndexSegment> segCompare = new SegmentComparer(false/*compareBothDirections*/);\n            BoundaryLinesDict = new Dictionary<IndexSegment, int>(segCompare);\n         }\n         else\n            boundLinesDictOffset = BoundaryLinesDict.Count();\n\n         int prevIdx = 0;\n         int idx = 0;\n         int vertCount = vertxIndices.Count;\n         foreach (int vIdx in vertxIndices)\n         {\n            IndexSegment segm = null;\n            if (idx > 0)\n            {\n               segm = new IndexSegment(prevIdx, vIdx);\n               OuterAndInnerBoundaries.Add(idx - 1 + idxOffset, segm);\n               BoundaryLinesDict.Add(segm, (idx - 1 + boundLinesDictOffset));       // boundaryLinesDict is a dictionary for the combined outer and inner boundaries, the values should be sequential\n            }\n            if (idx == vertCount - 1)  // The last index. Close the loop by connecing it to the first index\n            {\n               segm = new IndexSegment(vIdx, vertxIndices[0]);\n               OuterAndInnerBoundaries.Add((idx + idxOffset), segm);\n               BoundaryLinesDict.Add(segm, (idx + boundLinesDictOffset));       // boundaryLinesDict is a dictionary for the combined outer and inner boundaries, the values should be sequential\n            }\n            prevIdx = vIdx;\n            idx++;\n         }\n      }\n\n      public void UpdateIndexes(List<int> removedVertices)\n      {\n         Func<int, IList<int>, int> greaterCount = (index, list) => \n         {\n            int num = 0;\n            foreach (int val in list)\n            {\n               if (val > index)\n                  break; // list is sorted\n               ++num;\n            }\n            return num;\n         };\n\n         if (IndexOuterBoundary != null)\n            for (int ii = 0; ii < IndexOuterBoundary.Count; ii++)\n               IndexOuterBoundary[ii] -= greaterCount(IndexOuterBoundary[ii], removedVertices);\n\n         if (IndexedInnerBoundaries != null)\n            for (int ii = 0; ii < IndexedInnerBoundaries.Count; ii++)\n               for (int jj = 0; jj < IndexedInnerBoundaries[ii].Count; jj++)\n                  IndexedInnerBoundaries[ii][jj] -= greaterCount(IndexedInnerBoundaries[ii][jj], removedVertices);\n\n         if (OuterAndInnerBoundaries != null)\n            for (int ii = 0; ii < OuterAndInnerBoundaries.Count; ii++)\n            {\n               OuterAndInnerBoundaries[ii].StartPindex -= greaterCount(OuterAndInnerBoundaries[ii].StartPindex, removedVertices);\n               OuterAndInnerBoundaries[ii].EndPIndex -= greaterCount(OuterAndInnerBoundaries[ii].EndPIndex, removedVertices);\n            }\n      }\n   }\n\n   /// <summary>\n   /// Private class that defines a line segment defined by index to the vertices\n   /// </summary>\n   class IndexSegment\n   {\n      /// <summary>\n      /// Vertex index of the starting point\n      /// </summary>\n      public int StartPindex { get; set; }\n      /// <summary>\n      /// Vertex index of the end point\n      /// </summary>\n      public int EndPIndex { get; set; }\n      /// <summary>\n      /// Constructor for generating the class\n      /// </summary>\n      /// <param name=\"startIndex\">Vertex index of the starting point</param>\n      /// <param name=\"endIndex\">Vertex index of the end point</param>\n      public IndexSegment(int startIndex, int endIndex)\n      {\n         StartPindex = startIndex;\n         EndPIndex = endIndex;\n      }\n\n      /// <summary>\n      /// Extent size (length) of the line segment\n      /// </summary>\n      public double Extent(IDictionary<int, XYZ> meshVertices)\n      {\n         return meshVertices[StartPindex].DistanceTo(meshVertices[EndPIndex]);\n      }\n\n      /// <summary>\n      /// Test whether a line segment coincides with this one (must be exactly the same start - end, or end - start) \n      /// </summary>\n      /// <param name=\"inputSegment\">Line segment to test for coincidence</param>\n      /// <param name=\"compareBothDirections\">Whether to check if the input segment is the reverse of this one</param>\n      /// <returns>True if coincide</returns>\n      public bool Coincide(IndexSegment inputSegment, bool compareBothDirections)\n      {\n         return ((StartPindex == inputSegment.StartPindex && EndPIndex == inputSegment.EndPIndex)\n            || (compareBothDirections && (EndPIndex == inputSegment.StartPindex && StartPindex == inputSegment.EndPIndex)));\n      }\n\n      /// <summary>\n      /// Reverse the order of the line segment (end to start)\n      /// </summary>\n      /// <returns></returns>\n      public IndexSegment Reverse()\n      {\n         return new IndexSegment(EndPIndex, StartPindex);\n      }\n   }\n\n\n   class SegmentComparer : EqualityComparer<IndexSegment>\n   {\n      private bool m_CompareBothDirections = false;\n\n      public SegmentComparer(bool compareBothDirections)\n      {\n         m_CompareBothDirections = compareBothDirections;\n      }\n\n      public override bool Equals(IndexSegment o1, IndexSegment o2)\n      {\n         return o1.Coincide(o2, m_CompareBothDirections);\n      }\n\n      public override int GetHashCode(IndexSegment obj)\n      {\n         // Simple hashcode implementation as described in Joshua Bloch's \"Effective Java\" book\n         int a = m_CompareBothDirections ? Math.Min(obj.StartPindex, obj.EndPIndex) : obj.StartPindex;\n         int b = m_CompareBothDirections ? Math.Max(obj.StartPindex, obj.EndPIndex) : obj.EndPIndex;\n         int hash = 23;\n         hash = hash * 31 + a;\n         hash = hash * 31 + b;\n         return hash;\n      }\n   }\n\n\n   /// <summary>\n   /// Custom IEqualityComparer for a vector with tolerance for use with Dictionary\n   /// </summary>\n   \n   class VectorCompare : IEqualityComparer<XYZ>\n   {\n      public bool Equals(XYZ o1, XYZ o2)\n      {\n         return (Math.Abs((o1 as XYZ).X - (o2 as XYZ).X) < TriangleMergeUtil.Tolerance) &&\n         (Math.Abs((o1 as XYZ).Y - (o2 as XYZ).Y) < TriangleMergeUtil.Tolerance) &&\n         (Math.Abs((o1 as XYZ).Z - (o2 as XYZ).Z) < TriangleMergeUtil.Tolerance);\n      }\n\n      public int GetHashCode(XYZ obj)\n      {\n         // Uses the precision set in MathUtils to round the values so that the HashCode \n         // will be consistent with the Equals method.\n         double X = Math.Round(obj.X, TriangleMergeUtil.DecimalPrecision);\n         double Y = Math.Round(obj.Y, TriangleMergeUtil.DecimalPrecision);\n         double Z = Math.Round(obj.Z, TriangleMergeUtil.DecimalPrecision);\n\n         return X.GetHashCode() ^ Y.GetHashCode() ^ Z.GetHashCode();\n      }\n   }\n\n   /// <summary>\n   /// This is a special class to be used to merge triangles into polygonal faces (only work for planar faces of course)\n   /// </summary>\n   public class TriangleMergeUtil\n   {\n      protected TriangulatedShellComponent TriangulatedShell { get; set; } = null;\n      protected Mesh MeshGeom { get; set; } = null;\n\n      // A Dictionary is created for the mesh vertices due to performance issue for very large mesh if the vertex is accessed via its index\n      protected IDictionary<int, XYZ> MeshVertices { get; set; } = new Dictionary<int, XYZ>();\n\n      HashSet<int> MergedFaceSet { get; set; } = new HashSet<int>();\n      List<int> MergedFaceIndices { get; set; } = new List<int>();\n\n      IDictionary<int, IndexFace> FacesCollDict { get; set; } = new Dictionary<int, IndexFace>();\n      int FaceIdxOffset { get; set; } = 0;\n\n      // These two must be hand in hand\n      public const int DecimalPrecision = 6;\n      public const double Tolerance = 1e-6;\n      \n      public bool IsMesh { get { return (MeshGeom != null && TriangulatedShell == null); } }\n\n      /// <summary>\n      /// Get the total number of triangles from the Mesh or the TriangulatedShellComponent object.\n      /// </summary>\n      /// <returns>The total number of triangles.</returns>\n      public int GetTriangleCount()\n      {\n         return (IsMesh) ? MeshGeom.NumTriangles : TriangulatedShell.TriangleCount;\n      }\n\n      public List<XYZ> GetVertices() { return MeshVertices.Values.ToList(); }\n\n      /// <summary>\n      /// Function called before and after triangle merging.\n      /// Before merging it calculates the Euler characteristic of the original mesh.\n      /// After merging it calculates the Euler characteristic of the merged mesh.\n      /// </summary>\n      private int CalculateEulerCharacteristic()\n      {\n         int noVertices = 0;\n         int noHoles = 0; // Stays zero if mesh is triangular\n         int noFaces = MergedFaceSet.Count;\n         HashSet<IndexSegment> edges = new HashSet<IndexSegment>(new SegmentComparer(true/*compareBothDirections*/));\n\n         if (noFaces != 0)\n         {\n            // Merging already occurred, calculate new Euler characteristic\n            foreach (int mergedFace in MergedFaceSet)\n            {\n               FacesCollDict[mergedFace].OuterAndInnerBoundaries.ToList().ForEach(vp => edges.Add(vp.Value));\n               if (FacesCollDict[mergedFace].IndexedInnerBoundaries != null)\n                  noHoles += FacesCollDict[mergedFace].IndexedInnerBoundaries.Count;\n            }\n            noVertices = MeshVertices.Count; // m_MeshVertices doesn't contain isolated vertices\n         }\n         else\n         {\n            if (IsMesh)\n            {\n               noVertices = MeshGeom.Vertices.Count;\n               noFaces = MeshGeom.NumTriangles;\n               for (int faceIdx = 0; faceIdx < noFaces; faceIdx++)\n               {\n                  MeshTriangle tri = MeshGeom.get_Triangle(faceIdx);\n                  edges.Add(new IndexSegment((int)tri.get_Index(0), (int)tri.get_Index(1)));\n                  edges.Add(new IndexSegment((int)tri.get_Index(1), (int)tri.get_Index(2)));\n                  edges.Add(new IndexSegment((int)tri.get_Index(2), (int)tri.get_Index(0)));\n               }\n            }\n            else\n            {\n               noVertices = TriangulatedShell.VertexCount;\n               noFaces = TriangulatedShell.TriangleCount;\n               for (int faceIdx = 0; faceIdx < noFaces; faceIdx++)\n               {\n                  TriangleInShellComponent tri = TriangulatedShell.GetTriangle(faceIdx);\n                  edges.Add(new IndexSegment(tri.VertexIndex0, tri.VertexIndex1));\n                  edges.Add(new IndexSegment(tri.VertexIndex1, tri.VertexIndex2));\n                  edges.Add(new IndexSegment(tri.VertexIndex2, tri.VertexIndex0));\n               }\n            }\n         }\n\n         // V - E + F - I\n         return noVertices - edges.Count + noFaces - noHoles;\n      }\n\n      /// <summary>\n      /// Constructor for the class, accepting the TriangulatedShellComponent from the result of body tessellation\n      /// </summary>\n      /// <param name=\"triangulatedBody\"></param>\n      public TriangleMergeUtil(TriangulatedShellComponent triangulatedBody)\n      {\n         TriangulatedShell = triangulatedBody;\n         MeshGeom = null;\n         Reset();\n\n      }\n\n      /// <summary>\n      /// Constructor for the class, accepting a Mesh\n      /// </summary>\n      /// <param name=\"triangulatedMesh\">the Mesh</param>\n      public TriangleMergeUtil(Mesh triangulatedMesh)\n      {\n         TriangulatedShell = null;\n         MeshGeom = triangulatedMesh;\n         Reset();\n      }\n\n      /// <summary>\n      /// Reset internal data\n      /// </summary>\n      public void Reset()\n      {\n         MergedFaceSet.Clear();\n         MergedFaceIndices.Clear();\n         FacesCollDict.Clear();\n         MeshVertices.Clear();\n         FaceIdxOffset = 0;\n\n         IList<XYZ> vertices = null;\n         if (TriangulatedShell != null)\n            vertices = TriangulatedShell.GetVertices();\n         else if (MeshGeom != null)\n            vertices = MeshGeom.Vertices;\n\n         if (vertices != null)\n            for (int idx = 0; idx < vertices.Count; ++idx)\n               MeshVertices.Add(idx, vertices[idx]);\n      }\n\n      /// <summary>\n      /// Number of faces in this merged faces\n      /// </summary>\n      public int NoOfFaces\n      {\n         get { return MergedFaceSet.Count; }\n      }\n\n      /// <summary>\n      /// Get the specific outer boundary (index of vertices)\n      /// </summary>\n      /// <param name=\"fIdx\">the index face</param>\n      /// <returns>return index of vertices</returns>\n      public IList<int> IndexOuterboundOfFaceAt(int fIdx)\n      {\n         return FacesCollDict[MergedFaceIndices[fIdx]].IndexOuterBoundary;\n      }\n\n      /// <summary>\n      /// Get the inner boundaries of the merged faces for a specific face\n      /// </summary>\n      /// <param name=\"fIdx\">the index of the face</param>\n      /// <return>List of list of the inner boundaries</returns>\n      public IList<IList<int>> IndexInnerBoundariesOfFaceAt(int fIdx)\n      {\n         return FacesCollDict[MergedFaceIndices[fIdx]].IndexedInnerBoundaries;\n      }\n\n      public static XYZ NormalByNewellMethod(IList<XYZ> vertices)\n      {\n         XYZ normal;\n         int vertCount = vertices.Count;\n         if (vertCount == 3)\n         {\n            // If there are only 3 vertices, which is definitely a planar face, we will use directly 2 vectors and calculate the cross product for the normal vector\n            XYZ v1 = vertices[1] - vertices[0];\n            XYZ v2 = vertices[2] - vertices[1];\n            normal = v1.CrossProduct(v2);\n         }\n         else\n         {\n            double normX = 0;\n            double normY = 0;\n            double normZ = 0;\n\n            // Use Newell algorithm only when there are more than 3 vertices to handle non-convex face and colinear edges\n            int idx = 0;\n            XYZ prevVert = XYZ.Zero;\n            foreach (XYZ vert in vertices)\n            {\n               if (idx > 0 && idx <= vertCount - 1)\n               {\n                  normX += (prevVert.Y - vert.Y) * (prevVert.Z + vert.Z);\n                  normY += (prevVert.Z - vert.Z) * (prevVert.X + vert.X);\n                  normZ += (prevVert.X - vert.X) * (prevVert.Y + vert.Y);\n               }\n               if (idx == vertCount - 1)\n               {\n                  normX += (vert.Y - vertices[0].Y) * (vert.Z + vertices[0].Z);\n                  normY += (vert.Z - vertices[0].Z) * (vert.X + vertices[0].X);\n                  normZ += (vert.X - vertices[0].X) * (vert.Y + vertices[0].Y);\n               }\n\n               prevVert = vert;\n               idx++;\n            }\n            normal = new XYZ(normX, normY, normZ);\n         }\n         return normal.Normalize();\n      }\n\n      /// <summary>\n      /// Combine coplanar triangles from the faceted body if they share the edge. From this process, polygonal faces (with or without holes) will be created\n      /// </summary>\n      public bool SimplifyAndMergeFaces(bool tryToMerge)\n      {\n         int eulerBefore = tryToMerge ? CalculateEulerCharacteristic() : 0;\n\n         int noTriangle = GetTriangleCount();\n         IEqualityComparer<XYZ> normalComparer = new VectorCompare();\n         Dictionary<XYZ, List<int>> faceSortedByNormal = new Dictionary<XYZ, List<int>>(normalComparer);\n\n         for (int ef = 0; ef < noTriangle; ++ef)\n         {\n            IList<int> vertIndex = new List<int>();\n\n            if (IsMesh)\n            {\n               MeshTriangle f = MeshGeom.get_Triangle(ef);\n               vertIndex = new List<int>(3) { (int)f.get_Index(0), (int)f.get_Index(1), (int)f.get_Index(2) };\n            }\n            else\n            {\n               TriangleInShellComponent f = TriangulatedShell.GetTriangle(ef);\n               vertIndex = new List<int>(3) { f.VertexIndex0, f.VertexIndex1, f.VertexIndex2 };\n            }\n\n            IndexFace intF = new IndexFace(vertIndex, MeshVertices);\n            FacesCollDict.Add(FaceIdxOffset++, intF);         // Keep faces in a dictionary and assigns ID\n            List<int> fIDList;\n\n            if (!faceSortedByNormal.TryGetValue(intF.Normal, out fIDList))\n            {\n               fIDList = new List<int>(1) { ef };\n               faceSortedByNormal.Add(intF.Normal, fIDList);\n            }\n            else if (!fIDList.Contains(ef))\n            {\n               fIDList.Add(ef);\n            }\n         }\n\n         foreach (KeyValuePair<XYZ, List<int>> fListDict in faceSortedByNormal)\n         {\n            List<int> mergedFaceList = null;\n            if (fListDict.Value.Count > 1)\n            {\n               if (tryToMerge)\n               {\n                  TryMergeFaces(fListDict.Value, out mergedFaceList);\n               }\n               else\n               {\n                  // keep original face list\n                  mergedFaceList = fListDict.Value;\n               }\n               if (mergedFaceList != null && mergedFaceList.Count > 0)\n               {\n                  // insert only new face indexes as the mergedlist from different vertices can be duplicated\n                  foreach (int fIdx in mergedFaceList)\n                  {\n                     if (!MergedFaceSet.Contains(fIdx))\n                        AddMergedFaceIndex(fIdx);\n                  }\n               }\n            }\n            else if (!MergedFaceSet.Contains(fListDict.Value[0]))\n            {\n               AddMergedFaceIndex(fListDict.Value[0]);    // No pair face, add it into the mergedList\n            }\n         }\n\n         // Remove unused vertices\n         CleanVerticesAndUpdateIndexes();\n\n         int eulerAfter = tryToMerge ? CalculateEulerCharacteristic() : 0;\n         // If eulerBefore != eulerAfter, coplanar merge broke the mesh in some way.\n         // We need to fall back to exporting a triangular mesh.\n         return (eulerBefore == eulerAfter); \n      }\n\n      /// <summary>\n      /// Remove the vertices that became isolated after face merging and update vertices indexes\n      /// </summary>\n      void CleanVerticesAndUpdateIndexes()\n      {\n         List<int> isolatedVertices = new List<int>();\n\n         if (MergedFaceSet.Count != 0)\n         {\n            HashSet<int> vertices = new HashSet<int>();\n\n            foreach (int mergedFace in MergedFaceSet)\n            {\n               FacesCollDict[mergedFace].IndexOuterBoundary.ToList().ForEach(vt => vertices.Add(vt));\n               if (FacesCollDict[mergedFace].IndexedInnerBoundaries != null)\n               {\n                  foreach (IList<int> innerB in FacesCollDict[mergedFace].IndexedInnerBoundaries)\n                  {\n                     innerB.ToList().ForEach(vt => vertices.Add(vt));\n                  }\n               }\n            }\n\n            if (vertices.Count < MeshVertices.Count)\n               isolatedVertices = Enumerable.Range(0, MeshVertices.Count).Except(vertices).OrderBy(x => x).ToList();\n         }\n\n         if (isolatedVertices.Count > 0)\n         {\n            foreach (int vertexInd in isolatedVertices)\n            {\n               MeshVertices.Remove(vertexInd);\n            }\n\n            foreach (IndexFace face in FacesCollDict.Values)\n            {\n               face.UpdateIndexes(isolatedVertices);\n            }\n         }\n      }\n      /// <summary>\n      /// Go through the input face list that share the same vertex and has the same normal (coplannar).\n      /// </summary>\n      /// <param name=\"inputFaceList\"></param>\n      /// <param name=\"outputFaceList\"></param>\n      /// <returns>True if done successfully</returns>\n      void TryMergeFaces(List<int> inputFaceList, out List<int> outputFaceList)\n      {\n         outputFaceList = new List<int>();\n         IndexFace firstF = FacesCollDict[inputFaceList[0]];\n         int currProcFace = inputFaceList[0];\n         inputFaceList.RemoveAt(0);  // remove the first face from the list\n         bool merged = false;\n\n         IEqualityComparer<IndexSegment> segCompare = new SegmentComparer(false/*compareBothDirections*/);\n         IDictionary<IndexSegment, Tuple<int, int>> segmentOfFaceDict = new Dictionary<IndexSegment, Tuple<int, int>>(segCompare);\n         IList<int> discardList = new List<int>();\n         foreach (int fidx in inputFaceList)\n         {\n            if (!SegmentOfFaceToDict(ref segmentOfFaceDict, fidx))\n               discardList.Add(fidx);\n         }\n\n         // Remove bad face from the input list, if any\n         if (discardList.Count > 0)\n            foreach (int fidx in discardList)\n               inputFaceList.Remove(fidx);\n         discardList.Clear();\n\n         while (inputFaceList.Count > 0)\n         {\n            IndexFace mergedFace = null;\n            for (int currEdgeIdx = 0; currEdgeIdx < firstF.OuterAndInnerBoundaries.Count; currEdgeIdx++)\n            {\n               IndexSegment currEdge = firstF.OuterAndInnerBoundaries[currEdgeIdx];\n               IndexSegment reversedEdge = currEdge.Reverse();\n\n               IndexFace currFace = null;\n               int currFaceIdx = -1;\n               int idx = -1;\n               Tuple<int, int> pairedFace = null;\n\n               if (!segmentOfFaceDict.TryGetValue(reversedEdge, out pairedFace))\n               {\n                  if (!segmentOfFaceDict.TryGetValue(currEdge, out pairedFace))\n                  {\n                     merged = false;\n                     continue;\n                  }\n                  else\n                  {\n                     currFaceIdx = pairedFace.Item1;\n                     currFace = FacesCollDict[currFaceIdx];\n\n                     // Need to reverse the face boundaries. Remove the entries in the Dict first, reverse the face, and add them back\n                     for (int cidx = 0; cidx < currFace.OuterAndInnerBoundaries.Count; ++cidx)\n                     {\n                        segmentOfFaceDict.Remove(currFace.OuterAndInnerBoundaries[cidx]);\n                     }\n                     currFace.Reverse();\n                     if (!SegmentOfFaceToDict(ref segmentOfFaceDict, currFaceIdx))\n                     {\n                        // Something is wrong with this face (should not be here in the normal circumstance), discard it and continue\n                        inputFaceList.Remove(currFaceIdx);\n                        merged = false;\n                        continue;\n                     }\n                     if (!segmentOfFaceDict.TryGetValue(reversedEdge, out pairedFace))\n                        if (!segmentOfFaceDict.TryGetValue(currEdge, out pairedFace))\n                        {\n                           // Should not be here. If somehow here, discard the face and continue\n                           inputFaceList.Remove(currFaceIdx);\n                           merged = false;\n                           continue;\n                        }\n                     idx = pairedFace.Item2;\n                  }\n               }\n               else\n               {\n                  currFaceIdx = pairedFace.Item1;\n                  currFace = FacesCollDict[currFaceIdx];\n                  idx = pairedFace.Item2;\n               }\n\n               // Now we need to check other edges of this face whether there is other coincide edge (this is in the case of hole(s))\n               List<int> fFaceIdxList = new List<int>();\n               List<int> currFaceIdxList = new List<int>();\n               int ci = -1;\n               foreach (KeyValuePair<int,IndexSegment> idxSeg in currFace.OuterAndInnerBoundaries)\n               {\n                  ci++;\n                  if (ci == idx)\n                     continue;   // skip already known coincide edge\n                  int ffIdx = -1;\n                  IndexSegment reL = new IndexSegment(idxSeg.Value.EndPIndex, idxSeg.Value.StartPindex);\n                  ffIdx = firstF.FindMatchedIndexSegment(reL);\n                  if (ffIdx > 0)\n                  {\n                     fFaceIdxList.Add(ffIdx);        // List of edges to skip when merging\n                     currFaceIdxList.Add(ci);        // List of edges to skip when merging\n                  }\n               }\n\n               // Now we will remove the paired edges and merge the faces\n               List<IndexSegment> newFaceEdges = new List<IndexSegment>();\n               for (int ii = 0; ii < currEdgeIdx; ii++)\n               {\n                  bool toSkip = false;\n                  if (fFaceIdxList.Count > 0)\n                     toSkip = fFaceIdxList.Contains(ii);\n                  if (!toSkip)\n                     newFaceEdges.Add(firstF.OuterAndInnerBoundaries[ii]);     // add the previous edges from the firstF faces first. This will skip the currEdge\n               }\n\n               // Add the next-in-sequence edges from the second face\n               for (int ii = idx + 1; ii < currFace.OuterAndInnerBoundaries.Count; ii++)\n               {\n                  bool toSkip = false;\n                  if (currFaceIdxList.Count > 0)\n                     toSkip = currFaceIdxList.Contains(ii);\n                  if (!toSkip)\n                     newFaceEdges.Add(currFace.OuterAndInnerBoundaries[ii]);\n               }\n               for (int ii = 0; ii < idx; ii++)\n               {\n                  bool toSkip = false;\n                  if (currFaceIdxList.Count > 0)\n                     toSkip = currFaceIdxList.Contains(ii);\n                  if (!toSkip)\n                     newFaceEdges.Add(currFace.OuterAndInnerBoundaries[ii]);\n               }\n\n               for (int ii = currEdgeIdx + 1; ii < firstF.OuterAndInnerBoundaries.Count; ii++)\n               {\n                  bool toSkip = false;\n                  if (fFaceIdxList.Count > 0)\n                     toSkip = fFaceIdxList.Contains(ii);\n                  if (!toSkip)\n                     newFaceEdges.Add(firstF.OuterAndInnerBoundaries[ii]);\n               }\n\n               // Build a new face\n               // Important to note that the list of edges may not be continuous if there is a hole. We need to go through the list here to identify whether there is any such\n               //   discontinuity and collect the edges into their respective loops\n               List<List<IndexSegment>> loops = new List<List<IndexSegment>>();\n\n               List<IndexSegment> loopEdges = new List<IndexSegment>();\n               loops.Add(loopEdges);\n\n               IndexSegment prevSegm = newFaceEdges[0];\n               foreach (IndexSegment idxSeg in newFaceEdges)\n               {\n                  if (prevSegm == idxSeg)\n                  {\n                     loopEdges.Add(idxSeg);\n                  }\n                  else\n                  {\n                     if (idxSeg.StartPindex == prevSegm.EndPIndex)\n                        loopEdges.Add(idxSeg);\n                     else\n                     {\n                        // Discontinuity detected\n                        loopEdges = new List<IndexSegment>();   // start new loop\n                        loops.Add(loopEdges);\n                        loopEdges.Add(idxSeg);\n                     }\n                  }\n                  prevSegm = idxSeg;\n               }\n\n               List<List<IndexSegment>> finalLoops = new List<List<IndexSegment>>();\n               {\n                  while (loops.Count > 1)\n                  {\n                     // There are more than 1 loops, need to consolidate if there are fragments to combine due to their continuity between the fragments\n                     int toDelIdx = -1;\n                     for (int ii = 1; ii < loops.Count; ii++)\n                     {\n                        if (loops[0][loops[0].Count - 1].EndPIndex == loops[ii][0].StartPindex)\n                        {\n                           // found continuity, merge the loops\n                           List<IndexSegment> newLoop = new List<IndexSegment>(loops[0]);\n                           newLoop.AddRange(loops[ii]);\n                           finalLoops.Add(newLoop);\n                           toDelIdx = ii;\n                           break;\n                        }\n                     }\n                     if (toDelIdx > 0)\n                     {\n                        loops.RemoveAt(toDelIdx);   // !!!! Important to remove the later member first before removing the first one \n                        loops.RemoveAt(0);\n                     }\n                     else\n                     {\n                        // No continuity found, copy the first loop to the final loop\n                        List<IndexSegment> newLoop = new List<IndexSegment>(loops[0]);\n                        finalLoops.Add(newLoop);\n                        loops.RemoveAt(0);\n                     }\n                  }\n                  if (loops.Count > 0)\n                  {\n                     // Add remaining list into the final loops\n                     finalLoops.AddRange(loops);\n                  }\n               }\n\n               if (finalLoops.Count > 1)\n               {\n                  // Find the largest loop and put it in the first position signifying the outer loop and the rest are the inner loops\n                  int largestPerimeterIdx = 0;\n                  double largestPerimeter = 0.0;\n                  for (int ii = 0; ii < finalLoops.Count; ii++)\n                  {\n                     double loopPerimeter = 0.0;\n                     foreach (IndexSegment line in finalLoops[ii])\n                     {\n                        loopPerimeter += line.Extent(MeshVertices);\n                     }\n\n                     if (loopPerimeter > largestPerimeter)\n                     {\n                        largestPerimeter = loopPerimeter;\n                        largestPerimeterIdx = ii;\n                     }\n                  }\n                  // We need to move the largest loop into the head if it is not\n                  if (largestPerimeterIdx > 0)\n                  {\n                     List<IndexSegment> largestLoop = new List<IndexSegment>(finalLoops[largestPerimeterIdx]);\n                     finalLoops.RemoveAt(largestPerimeterIdx);\n                     finalLoops.Insert(0, largestLoop);\n                  }\n               }\n\n               // Collect the vertices from the list of Edges into list of list of vertices starting with the outer loop (largest loop) following the finalLoop\n               IList<IList<int>> newFaceVertsLoops = new List<IList<int>>();\n               foreach (List<IndexSegment> loop in finalLoops)\n               {\n                  IList<int> newFaceVerts = new List<int>();\n                  foreach (IndexSegment idxSeg in loop)\n                  {\n                     newFaceVerts.Add(idxSeg.StartPindex);\n                  }\n\n                  if (newFaceVerts.Count > 0)\n                  {\n                     if (newFaceVerts.Count >= 3)\n                        newFaceVertsLoops.Add(newFaceVerts);\n                     else\n                     {\n                        // Something wrong, a face cannot have less than 3 vertices\n                        Debug.WriteLine(\"Something went wrong when merging faces resulting with a loop that has less than 3 vertices\");\n                     }\n                  }\n               }\n\n               mergedFace = new IndexFace(newFaceVertsLoops, MeshVertices);\n               inputFaceList.Remove(currFaceIdx);\n\n               // Remove the merged face from segmentOfFaceDict\n               foreach (KeyValuePair<int, IndexSegment> idxSeg in FacesCollDict[currFaceIdx].OuterAndInnerBoundaries)\n               {\n                  segmentOfFaceDict.Remove(idxSeg.Value);\n               }\n               if (FacesCollDict.ContainsKey(currFaceIdx))\n                  FacesCollDict.Remove(currFaceIdx);\n\n               merged = true;\n               break;      // Once there is an edge merged, create a new face and continue the process of merging\n            }\n\n            int lastFaceID = FaceIdxOffset++;   // The new index is always the next one in the collection was inserted based on the seq order\n            if (mergedFace != null)\n               FacesCollDict.Add(lastFaceID, mergedFace);\n\n            if (!merged)\n            {\n               // No edge match for this face, add the face into the output face list and move to the next face in the input list\n               outputFaceList.Add(currProcFace);\n\n               if (inputFaceList.Count > 0)\n               {\n                  firstF = FacesCollDict[inputFaceList[0]];\n\n                  // Remove the merged face from segmentOfFaceDict\n                  foreach (KeyValuePair<int, IndexSegment> idxSeg in firstF.OuterAndInnerBoundaries)\n                  {\n                     segmentOfFaceDict.Remove(idxSeg.Value);\n                  }\n                  currProcFace = inputFaceList[0];  // keep the last processed item\n                  inputFaceList.RemoveAt(0);  // remove the first face from the list\n                  merged = false;\n\n                  // If there is no more face to process, add the merged face into the output list\n                  if (inputFaceList.Count == 0)\n                     outputFaceList.Add(currProcFace);\n               }\n            }\n            else\n            {\n               // If there is no more face to process, add the merged face into the output list\n               if (inputFaceList.Count == 0)\n                  outputFaceList.Add(lastFaceID);\n\n               // Remove merged face from the Dict\n               if (FacesCollDict.ContainsKey(currProcFace))\n                  FacesCollDict.Remove(currProcFace);\n\n               if (inputFaceList.Count > 0)\n               {\n                  // use the current face as the next face as a merge candidate\n                  firstF = mergedFace;\n                  currProcFace = lastFaceID;\n                  merged = false;\n               }\n            }\n         }\n\n         // Finally, there may be multiple faces left because there are multiple disconnected faces at the same normal. Collect them and return\n         if (segmentOfFaceDict.Count > 0)\n         {\n            HashSet<int> indexFaces = new HashSet<int>();\n            foreach (KeyValuePair<IndexSegment, Tuple<int, int>> segmentFace in segmentOfFaceDict)\n            {\n               indexFaces.Add(segmentFace.Value.Item1);\n            }\n            foreach (int idxFace in indexFaces)\n               outputFaceList.Add(idxFace);\n         }\n      }\n\n      /// <summary>\n      /// Appends the merged face index to the HashSet and List\n      /// We duplicate the indecies to List<int> to have access by index in constant time.\n      /// The overhead for population and destruction of the list of integers isn't noticeable,\n      /// comparing to the speedup after removing ElementAt calls for HashSet\n      /// </summary>\n      /// <param name=\"faceIdx\"> The merged face index.</param>\n      void AddMergedFaceIndex(int faceIdx)\n      {\n         MergedFaceSet.Add(faceIdx); \n         MergedFaceIndices.Add(faceIdx);\n      }\n\n      bool SegmentOfFaceToDict(ref IDictionary<IndexSegment, Tuple<int, int>> segmentOfFaceDict, int indexFace)\n      {\n         IList<IndexSegment> entriesToRollback = new List<IndexSegment>();\n         IndexFace theFace = FacesCollDict[indexFace];\n         try\n         {\n            int idx = 0;\n            foreach (KeyValuePair<int, IndexSegment> idxSeg in theFace.OuterAndInnerBoundaries)\n            {\n               segmentOfFaceDict.Add(idxSeg.Value, new Tuple<int, int>(indexFace, idx++));\n               entriesToRollback.Add(idxSeg.Value);\n            }\n            return true;\n         }\n         catch\n         {\n            // If exception, it is likely that there is duplicate. Remove all segments of this face first to rollback\n            foreach (IndexSegment segDel in entriesToRollback)\n               segmentOfFaceDict.Remove(segDel);\n            entriesToRollback.Clear();\n         }\n\n         theFace.Reverse();\n         try\n         {\n            int idx = 0;\n            foreach (KeyValuePair<int,IndexSegment> idxSeg in theFace.OuterAndInnerBoundaries)\n            {\n               segmentOfFaceDict.Add(idxSeg.Value, new Tuple<int, int>(indexFace, idx++));\n               entriesToRollback.Add(idxSeg.Value);\n            }\n            return true;\n         }\n         catch\n         {\n            // If still raises an exception (that shouldn't be). It is likely there is simple duplicate face. Cleanup, and return false;\n            foreach (IndexSegment segDel in entriesToRollback)\n               segmentOfFaceDict.Remove(segDel);\n            return false;\n         }\n      }\n   }\n}\n\n\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/TypeObjectsCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// TypeObjectKey has six components:\r\n   /// 1. Symbol id.\r\n   /// 2. Level id (if we are splitting by level).\r\n   /// 3. Flipped (true if the symbol is flipped).\r\n   /// 4. The corresponding IFC entity type.\r\n   /// 5. The corresponding IFC predefined type.\r\n   /// 6. Override material id.\r\n   /// 7. Type of elements contained in assembly.\r\n   /// </summary>\r\n   public sealed class TypeObjectKey : Tuple<ElementId, ElementId, bool, IFCEntityType, string, ElementId, bool>\r\n   {\r\n      public TypeObjectKey(ElementId elementId, ElementId levelId, bool flipped,\r\n         IFCExportInfoPair exportType, ElementId materialId, bool inAssembly) :\r\n         base(elementId, levelId, flipped, exportType.ExportType, exportType.PredefinedType, materialId, inAssembly)\r\n      { }\r\n\r\n      public ElementId ElementId { get { return Item1; } }\r\n\r\n      public ElementId LevelId { get { return Item2; } }\r\n\r\n      public bool IsFlipped { get { return Item3; } }\r\n\r\n      public IFCEntityType EntityType { get { return Item4; } }\r\n\r\n      public string PredefinedType { get { return Item5; } }\r\n\r\n      public ElementId MaterialId { get { return Item6; } }\r\n\r\n      public bool InAssembly { get { return Item7; } }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Used to keep a cache of the FamilyTypeInfos mapping to a tuple of an ElementId, a Boolean and an IFCExportType.\r\n   /// The ElementID is used to differentiate between elements of different family types.\r\n   /// The Boolean is used solely for doors and windows to signal if the doors or windows are flipped or not, the default value is false\r\n   /// for non-doors and windows.\r\n   /// The export type is used to distinguish between two instances of the same family but have different export types, this can happen\r\n   /// if user uses the IFC_EXPORT_ELEMENT_AS parameter at the instance level.\r\n   /// </summary>\r\n   public class TypeObjectsCache : Dictionary<TypeObjectKey, FamilyTypeInfo>\r\n   {\r\n      /// <summary>\r\n      /// A dictionary for use for type objects that can't be shared but for whom we want\r\n      /// stable GUIDS.\r\n      /// </summary>\r\n      /// <remarks>GUID_TODO: This is a workaround for types that have opening information,\r\n      /// which we don't support reuse of.  this allows us to increment a counter when\r\n      /// we make copies of the original type object.</remarks>\r\n      IDictionary<TypeObjectKey, int> AlternateGUIDCounter = new Dictionary<TypeObjectKey, int>();\r\n\r\n      /// <summary>\r\n      /// Adds the FamilyTypeInfo to the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"key\">The information that identifies the type object.</param>\r\n      /// <param name=\"typeInfo\">The information that defines the type object.</param>\r\n      /// <param name=\"hasOpenings\">True if the type object contains openings.</param>\r\n      /// <remarks>If the type object contains openings, we don't want to re-use it,\r\n      /// but we do want to avoid having duplicate GUIDs.  This is less stable than\r\n      /// we'd like to achieve, but requires a re-working of how we compare opening\r\n      /// information.</remarks>\r\n      public void Register(TypeObjectKey key, FamilyTypeInfo typeInfo, bool hasOpenings)\r\n      {\r\n         if (hasOpenings)\r\n         {\r\n            if (AlternateGUIDCounter.ContainsKey(key))\r\n               AlternateGUIDCounter[key]++; \r\n            else\r\n               AlternateGUIDCounter[key] = 1;\r\n            return;\r\n         }\r\n\r\n         this[key] = typeInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds the FamilyTypeInfo from the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"key\">The information that identifies the type object.</param>\r\n      /// <returns>The FamilyTypeInfo object.</returns>\r\n      public FamilyTypeInfo Find(TypeObjectKey key)\r\n      {\r\n         FamilyTypeInfo typeInfo;\r\n\r\n         if (TryGetValue(key, out typeInfo))\r\n            return typeInfo;\r\n\r\n         return new FamilyTypeInfo();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Looks for the current alternate GUID index for a particular key, if it exists.\r\n      /// </summary>\r\n      /// <param name=\"key\">The information that identifies the type object.</param>\r\n      /// <returns>The index, or null if it doesn't exist.</returns>\r\n      public int? GetAlternateGUIDIndex(TypeObjectKey key)\r\n      {\r\n         if (!AlternateGUIDCounter.TryGetValue(key, out int index))\r\n            return null;\r\n         return index;\r\n      }\r\n\r\n      public new void Clear()\r\n      {\r\n         AlternateGUIDCounter.Clear();\r\n         base.Clear();\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/TypePropertyInfoCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of the type property infos.\r\n   /// </summary>\r\n   public class TypePropertyInfoCache : Dictionary<ElementId, TypePropertyInfo>\r\n   {\r\n      /// <summary>\r\n      /// Checks if the element has type properties.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element id.</param>\r\n      /// <returns>True if it has, false if not.</returns>\r\n      public bool HasTypeProperties(ElementId elementId)\r\n      {\r\n         return this.ContainsKey(elementId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds new IFC element handles to the existing element type info.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element id.</param>\r\n      /// <param name=\"elements\">The IFC elements.</param>\r\n      public void AddNewElementHandles(ElementId elementId, ICollection<IFCAnyHandle> elements)\r\n      {\r\n         TypePropertyInfo typePropertyInfo;\r\n         if (TryGetValue(elementId, out typePropertyInfo))\r\n         {\r\n            foreach (IFCAnyHandle element in elements)\r\n               typePropertyInfo.Elements.Add(element);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds a new type info of an element.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">The element id.</param>\r\n      /// <param name=\"propertySets\">The property sets.</param>\r\n      /// <param name=\"elements\">The IFC elements.</param>\r\n      public void AddNewTypeProperties(ElementId elementId, ICollection<IFCAnyHandle> propertySets,\r\n          ICollection<IFCAnyHandle> elements)\r\n      {\r\n         TypePropertyInfo typePropertyInfo = new TypePropertyInfo(propertySets, elements);\r\n         Add(elementId, typePropertyInfo);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/TypeRelationsCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of the IfcObject handles mapping to a IfcTypeObject handle.\r\n   /// </summary>\r\n   public class TypeRelationsCache : BaseRelationsCache\r\n   {\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/UnitMappingUtil.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Toolkit;\r\nusing Revit.IFC.Export.Exporter.PropertySet;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   public class UnitMappingUtil\r\n   {\r\n      /// Creates an apropriate ifc unit entity if it hasn't been already created.\r\n      /// Cache the created unit handle in the UnitsCache.\r\n      /// At the end of export these units are assigned to IfcProject\r\n      public static UnitInfo GetOrCreateUnitInfo(ForgeTypeId specTypeId)\r\n      {\r\n         if (specTypeId == null)\r\n            return null;\r\n\r\n         if (ExporterCacheManager.UnitsCache.FindUnitInfo(specTypeId, out UnitInfo unitInfo))\r\n         {\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(unitInfo?.Handle))\r\n               ExporterCacheManager.UnitsCache.UnregisterUnitInfo(specTypeId);\r\n            else\r\n               return unitInfo;\r\n         }\r\n\r\n         IFCFile file = ExporterCacheManager.ExporterIFC?.GetFile();\r\n         if (file == null)\r\n            return unitInfo;\r\n\r\n         unitInfo = CreateSpecialCases(file, specTypeId);\r\n         unitInfo ??= CreateUnitFromMappings(file, specTypeId);\r\n\r\n         ExporterCacheManager.UnitsCache.RegisterUnitInfo(specTypeId, unitInfo);\r\n         return unitInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Extracts the unit handles to assign to a project \r\n      /// </summary>\r\n      /// <returns>Unit handles set</returns>\r\n      public static HashSet<IFCAnyHandle> GetUnitsToAssign()\r\n      {\r\n         return ExporterCacheManager.UnitsCache.GetUnitsToAssign();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates units spesific to ExportAsCOBIE\r\n      /// </summary>\r\n      public static void CreateCobieUnits()\r\n      {\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsCOBIE)\r\n            return;\r\n\r\n         IFCFile file = ExporterCacheManager.ExporterIFC?.GetFile();\r\n         if (file == null)\r\n            return;\r\n\r\n         // Derived imperial mass unit\r\n         {\r\n            IFCUnit unitType = IFCUnit.MassUnit;\r\n            IFCAnyHandle dims = IFCInstanceExporter.CreateDimensionalExponents(file, 0, 1, 0, 0, 0, 0, 0);\r\n            double factor = 0.45359237; // --> pound to kilogram\r\n            string convName = \"pound\";\r\n\r\n            IFCAnyHandle kilogramUnit = IFCInstanceExporter.CreateSIUnit(file, IFCUnit.MassUnit, IFCSIPrefix.Kilo, IFCSIUnitName.Gram);\r\n            IFCAnyHandle convFactor = IFCInstanceExporter.CreateMeasureWithUnit(file, Toolkit.IFCDataUtil.CreateAsMassMeasure(factor), kilogramUnit);\r\n            IFCAnyHandle massUnit = IFCInstanceExporter.CreateConversionBasedUnit(file, dims, unitType, convName, convFactor);\r\n            ExporterCacheManager.UnitsCache.RegisterUnitInfo(SpecTypeId.Mass, new UnitInfo(massUnit, factor, 0.0));\r\n         }\r\n\r\n         // Air Changes per Hour\r\n         {\r\n            IFCUnit unitType = IFCUnit.FrequencyUnit;\r\n            IFCAnyHandle dims = IFCInstanceExporter.CreateDimensionalExponents(file, 0, 0, -1, 0, 0, 0, 0);\r\n            double factor = 1.0 / 3600.0; // --> seconds to hours\r\n            string convName = \"ACH\";\r\n\r\n            IFCAnyHandle secondUnit = IFCInstanceExporter.CreateSIUnit(file, IFCUnit.TimeUnit, null, IFCSIUnitName.Second);\r\n            IFCAnyHandle convFactor = IFCInstanceExporter.CreateMeasureWithUnit(file, Toolkit.IFCDataUtil.CreateAsTimeMeasure(factor), secondUnit);\r\n            IFCAnyHandle achUnit = IFCInstanceExporter.CreateConversionBasedUnit(file, dims, unitType, convName, convFactor);\r\n            ExporterCacheManager.UnitsCache.RegisterUserDefinedUnit(\"ACH\", achUnit);\r\n            ExporterCacheManager.UnitsCache.RegisterUnitInfo(SpecTypeId.ElectricalFrequency, new UnitInfo(achUnit, factor, 0.0));\r\n         }\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get mapped Revit data type by ifc measure name\r\n      /// </summary>\r\n      public static ForgeTypeId GetUnitSpecTypeFromString(string measureName)\r\n      {\r\n         if (IfcToRevitDataTypeMapping.TryGetValue(measureName, out ForgeTypeId forgeTypeId))\r\n         {\r\n            return forgeTypeId;\r\n         }\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create units for some special cases\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"specTypeId\">Revit data type</param>\r\n      /// <returns>Created unit handle</returns>\r\n      static UnitInfo CreateSpecialCases(IFCFile file, ForgeTypeId specTypeId)\r\n      {\r\n         UnitInfo unitInfo = null;\r\n\r\n         if (specTypeId.Equals(SpecTypeId.Currency))\r\n         {\r\n            // Specific IfcMonetaryUnit\r\n            unitInfo = CreateCurrencyUnit(file);\r\n         }\r\n         else if (specTypeId.Equals(SpecTypeId.ColorTemperature))\r\n         {\r\n            // Color Temperature is in fact ThermoDynamicTemperature\r\n            // Create is specific way to avoid conflict with real HVACTemperature \r\n            unitInfo = CreateColorTemperatureUnit(file);\r\n         }\r\n         else if (specTypeId.Equals(SpecTypeId.MassPerUnitArea))\r\n         {\r\n            // A single unit 'since ifc4'.\r\n            // Make more generic improvement if there are more than one such unit\r\n            if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            {\r\n               DerivedAttributes attrib;\r\n               if (!DerivedUnitMapping.TryGetValue(specTypeId, out attrib))\r\n                  return null;\r\n\r\n               attrib.ifcDrivedUnit = Toolkit.IFC4.IFCDerivedUnit.AREADENSITYUNIT;\r\n               attrib.userDefinedUnitName = string.Empty;\r\n               \r\n               return CreateUnitAsDerivedCommon(file, specTypeId, null, attrib);\r\n            }\r\n         }\r\n\r\n         return unitInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates spesific Currency unit\r\n      /// </summary>\r\n      static UnitInfo CreateCurrencyUnit(IFCFile file)\r\n      {\r\n         UnitInfo unitInfo = null;\r\n\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAs2x3CoordinationView2)\r\n         {\r\n            FormatOptions currencyFormatOptions = ExporterCacheManager.DocumentUnits.GetFormatOptions(SpecTypeId.Currency);\r\n            ForgeTypeId currencySymbol = currencyFormatOptions.GetSymbolTypeId();\r\n\r\n            IFCAnyHandle currencyUnit = null;\r\n\r\n            // Some of these are guesses for IFC2x3, since multiple currencies may use the same symbol, \r\n            // but no detail is given on which currency is being used.  For IFC4, we just use the label.\r\n            if (!ExporterCacheManager.ExportOptionsCache.ExportAsOlderThanIFC4)\r\n            {\r\n               string currencyLabel = null;\r\n               try\r\n               {\r\n                  currencyLabel = LabelUtils.GetLabelForSymbol(currencySymbol);\r\n                  currencyUnit = IFCInstanceExporter.CreateMonetaryUnit4(file, currencyLabel);\r\n               }\r\n               catch\r\n               {\r\n                  currencyUnit = null;\r\n               }\r\n            }\r\n            else\r\n            {\r\n               IFCCurrencyType? currencyType = null;\r\n\r\n               if (currencySymbol.Equals(SymbolTypeId.UsDollar))\r\n               {\r\n                  currencyType = IFCCurrencyType.USD;\r\n               }\r\n               else if (currencySymbol.Equals(SymbolTypeId.EuroPrefix) ||\r\n                  currencySymbol.Equals(SymbolTypeId.EuroSuffix))\r\n               {\r\n                  currencyType = IFCCurrencyType.EUR;\r\n               }\r\n               else if (currencySymbol.Equals(SymbolTypeId.UkPound))\r\n               {\r\n                  currencyType = IFCCurrencyType.GBP;\r\n               }\r\n               else if (currencySymbol.Equals(SymbolTypeId.ChineseHongKongDollar))\r\n               {\r\n                  currencyType = IFCCurrencyType.HKD;\r\n               }\r\n               else if (currencySymbol.Equals(SymbolTypeId.Krone))\r\n               {\r\n                  currencyType = IFCCurrencyType.NOK;\r\n               }\r\n               else if (currencySymbol.Equals(SymbolTypeId.Shekel))\r\n               {\r\n                  currencyType = IFCCurrencyType.ILS;\r\n               }\r\n               else if (currencySymbol.Equals(SymbolTypeId.Yen))\r\n               {\r\n                  currencyType = IFCCurrencyType.JPY;\r\n               }\r\n               else if (currencySymbol.Equals(SymbolTypeId.Won))\r\n               {\r\n                  currencyType = IFCCurrencyType.KRW;\r\n               }\r\n               else if (currencySymbol.Equals(SymbolTypeId.Baht))\r\n               {\r\n                  currencyType = IFCCurrencyType.THB;\r\n               }\r\n               else if (currencySymbol.Equals(SymbolTypeId.Dong))\r\n               {\r\n                  currencyType = IFCCurrencyType.VND;\r\n               }\r\n\r\n               if (currencyType.HasValue)\r\n                  currencyUnit = IFCInstanceExporter.CreateMonetaryUnit2x3(file, currencyType.Value);\r\n            }\r\n\r\n            if (currencyUnit != null)\r\n            {\r\n               unitInfo = new UnitInfo(currencyUnit, 1.0, 0.0);\r\n               ExporterCacheManager.UnitsCache.RegisterUserDefinedUnit(\"CURRENCY\", currencyUnit);\r\n            }\r\n         }\r\n         return unitInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates spesific Color Temperature unit\r\n      /// </summary>\r\n      static UnitInfo CreateColorTemperatureUnit(IFCFile file)\r\n      {\r\n         UnitInfo unitInfo = null;\r\n         if (file == null)\r\n            return unitInfo;\r\n\r\n         IFCAnyHandle colorTempUnit = IFCInstanceExporter.CreateSIUnit(file, IFCUnit.ThermoDynamicTemperatureUnit, null, IFCSIUnitName.Kelvin);\r\n         (double scaleFactor, double offset) = GetScaleFactorAndOffset(UnitTypeId.Kelvin);\r\n         ExporterCacheManager.UnitsCache.RegisterUserDefinedUnit(\"COLORTEMPERATURE\", colorTempUnit);\r\n\r\n         return new UnitInfo(colorTempUnit, scaleFactor, offset);\r\n      }\r\n\r\n\r\n      #region Classes to keep units attributes\r\n      /// <summary>\r\n      /// A structure to contain information about IfcSIUnit\r\n      /// </summary>\r\n      class SIUnitInfo\r\n      {\r\n         public SIUnitInfo(IFCSIUnitName inIfcSIUnitName, IFCSIPrefix? inIfcSIPrefix, bool inIsDefault)\r\n         {\r\n            ifcSIUnitName = inIfcSIUnitName;\r\n            ifcSIPrefix = inIfcSIPrefix;\r\n            isDefault = inIsDefault;\r\n         }\r\n\r\n         readonly public IFCSIUnitName ifcSIUnitName;\r\n         readonly public IFCSIPrefix? ifcSIPrefix;\r\n         readonly public bool isDefault;\r\n      }\r\n\r\n      /// <summary>\r\n      /// A structure to contain information about IfcSIUnit\r\n      /// </summary>\r\n      class SIAttributes\r\n      {\r\n         public SIAttributes(IFCUnit inIfcUnitType, IDictionary<ForgeTypeId, SIUnitInfo> inSIUnitInfoDict)\r\n         {\r\n            ifcUnitType = inIfcUnitType;\r\n            siUnitInfoDict = inSIUnitInfoDict;\r\n         }\r\n\r\n         readonly public IFCUnit ifcUnitType;\r\n         readonly public IDictionary<ForgeTypeId, SIUnitInfo> siUnitInfoDict;\r\n      };\r\n\r\n      /// <summary>\r\n      /// A structure to contain information about IfcConversionBasedUnit\r\n      /// </summary>\r\n      class ConversionUnitInfo\r\n      {\r\n         public ConversionUnitInfo(string inConversionName, bool inIsDefault)\r\n         {\r\n            conversionName = inConversionName;\r\n            isDefault = inIsDefault;\r\n         }\r\n\r\n         readonly public string conversionName;\r\n         readonly public bool isDefault;\r\n      }\r\n\r\n      /// <summary>\r\n      /// A structure to contain information about IfcConversionBasedUnit\r\n      /// </summary>\r\n      class ConversionAttributes\r\n      {\r\n         public ConversionAttributes(IFCUnit inUnit, string inMeasureName, ForgeTypeId inBaseSI, int inLengthExponent, int inMassExponent,\r\n          int inTimeExponent, int inElectricCurrentExponent, int inThermodynamicTemperatureExponent,\r\n          int inAmountOfSubstanceExponent, int inLuminousIntensityExponent, IDictionary<ForgeTypeId, ConversionUnitInfo> inConversionInfoDict)\r\n         {\r\n            ifcUnitType = inUnit;\r\n            measureName = inMeasureName;\r\n            baseSI = inBaseSI;\r\n            length = inLengthExponent;\r\n            mass = inMassExponent;\r\n            time = inTimeExponent;\r\n            electricCurrent = inElectricCurrentExponent;\r\n            thermodynamicTemperature = inThermodynamicTemperatureExponent;\r\n            amountOfSubstance = inAmountOfSubstanceExponent;\r\n            luminousIntensity = inLuminousIntensityExponent;\r\n            conversionInfoDict = inConversionInfoDict;\r\n         }\r\n\r\n         readonly public IFCUnit ifcUnitType;\r\n         readonly public string measureName;\r\n         readonly public ForgeTypeId baseSI;\r\n         readonly public int length;\r\n         readonly public int mass;\r\n         readonly public int time;\r\n         readonly public int electricCurrent;\r\n         readonly public int thermodynamicTemperature;\r\n         readonly public int amountOfSubstance;\r\n         readonly public int luminousIntensity;\r\n         readonly public IDictionary<ForgeTypeId, ConversionUnitInfo> conversionInfoDict;\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// A structure to contain information about IfcDerivedUnit\r\n      /// </summary>\r\n      class DerivedInfo\r\n      {\r\n         public DerivedInfo(double? inExtraScale, bool inIsDefault, IList<Tuple<ForgeTypeId, int>> inDerivedElements)\r\n         {\r\n            extraScale = inExtraScale;\r\n            isDefault = inIsDefault;\r\n            derivedElements = inDerivedElements;\r\n         }\r\n\r\n         public double? extraScale;\r\n         public bool isDefault;\r\n         public IList<Tuple<ForgeTypeId, int>> derivedElements;\r\n      }\r\n\r\n      /// <summary>\r\n      /// A structure to contain information about IfcDerivedUnit\r\n      /// </summary>\r\n      class DerivedAttributes\r\n      {\r\n         public DerivedAttributes(Enum inDerivedUnitType, string inUserDefinedUnitName, IDictionary<ForgeTypeId, DerivedInfo> inDerivedInfoDict)\r\n         {\r\n            ifcDrivedUnit = inDerivedUnitType;\r\n            userDefinedUnitName = inUserDefinedUnitName;\r\n            derivedInfoDict = inDerivedInfoDict;\r\n         }\r\n\r\n\r\n         public Enum ifcDrivedUnit;\r\n         public string userDefinedUnitName;\r\n         public IDictionary<ForgeTypeId, DerivedInfo> derivedInfoDict;\r\n      }\r\n      #endregion\r\n\r\n\r\n      #region Unit creation methods\r\n      /// <summary>\r\n      /// Creates either selected in Revit or default ifc unit of apropriate type.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"specTypeId\">Revit data type</param>\r\n      /// <returns>Created unit handle</returns>\r\n      static UnitInfo CreateUnitFromMappings(IFCFile file, ForgeTypeId specTypeId)\r\n      {\r\n         for (int ii = 0; ii < 2; ii++)\r\n         {\r\n            ForgeTypeId selectedUnitTypeId = null;\r\n\r\n            if (ii == 0)\r\n            {\r\n               FormatOptions formatOptions = ExporterCacheManager.DocumentUnits.GetFormatOptions(specTypeId);\r\n               selectedUnitTypeId = formatOptions.GetUnitTypeId();\r\n\r\n               if (selectedUnitTypeId == null)\r\n                  continue;\r\n            }\r\n\r\n            UnitInfo createdUnit = CreateUnitAsSI(file, specTypeId, selectedUnitTypeId);\r\n            createdUnit ??= CreateUnitAsConversionBased(file, specTypeId, selectedUnitTypeId);\r\n            createdUnit ??= CreateUnitAsDerived(file, specTypeId, selectedUnitTypeId);\r\n\r\n            if (createdUnit != null)\r\n               return createdUnit;\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IfcSIUnit handle for input data/unit types if present in mapping.\r\n      /// If unit type is null - look for default unit.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"specTypeId\">Revit data type</param>\r\n      /// <param name=\"selectedUnitTypeId\">Revit unit type</param>      \r\n      /// <returns>Created unit handle</returns>\r\n      static UnitInfo CreateUnitAsSI(IFCFile file, ForgeTypeId specTypeId, ForgeTypeId selectedUnitTypeId)\r\n      {\r\n         if (file == null)\r\n            return null;\r\n\r\n         SIAttributes attrib;\r\n         if (!SIUnitMapping.TryGetValue(specTypeId, out attrib))\r\n            return null;\r\n\r\n         if (attrib.siUnitInfoDict == null)\r\n            return null;\r\n\r\n         ForgeTypeId unitTypeId = null;\r\n         IFCSIUnitName ifcSIUnitName = 0;\r\n         IFCSIPrefix? ifcSIPrefix = null;\r\n         IFCUnit ifcUnit;\r\n\r\n         if (selectedUnitTypeId == null)\r\n         {\r\n            // Look for default unit\r\n            foreach (var pair in attrib.siUnitInfoDict)\r\n            {\r\n               if (pair.Value.isDefault)\r\n               {\r\n                  unitTypeId = pair.Key;\r\n                  ifcSIUnitName = pair.Value.ifcSIUnitName;\r\n                  ifcSIPrefix = pair.Value.ifcSIPrefix;\r\n                  break;\r\n               }\r\n            }\r\n         }\r\n         else\r\n         {\r\n            SIUnitInfo siInfo = null;\r\n            if (attrib.siUnitInfoDict.TryGetValue(selectedUnitTypeId, out siInfo))\r\n            {\r\n               unitTypeId = selectedUnitTypeId;\r\n               ifcSIUnitName = siInfo.ifcSIUnitName;\r\n               ifcSIPrefix = siInfo.ifcSIPrefix;\r\n            }\r\n         }\r\n         ifcUnit = attrib.ifcUnitType;\r\n\r\n         if (unitTypeId == null)\r\n            return null;\r\n\r\n\r\n\r\n         IFCAnyHandle siUnit = IFCInstanceExporter.CreateSIUnit(file, ifcUnit, ifcSIPrefix, ifcSIUnitName);\r\n         (double scaleFactor, double offset) = GetScaleFactorAndOffset(unitTypeId);\r\n         return new UnitInfo(siUnit, scaleFactor, offset);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IfcConversionBasedUnit handle for input data/unit types if present in mapping.\r\n      /// If unit type is null - look for default unit.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"specTypeId\">Revit data type</param>\r\n      /// <param name=\"selectedUnitTypeId\">Revit unit type</param>      \r\n      /// <returns>Created unit handle</returns>\r\n      static UnitInfo CreateUnitAsConversionBased(IFCFile file, ForgeTypeId specTypeId, ForgeTypeId selectedUnitTypeId)\r\n      {\r\n         if (file == null)\r\n            return null;\r\n\r\n         ConversionAttributes attrib;\r\n         if (!ConversionBasedUnitMapping.TryGetValue(specTypeId, out attrib))\r\n            return null;\r\n\r\n         if (attrib.conversionInfoDict == null)\r\n            return null;\r\n\r\n         ForgeTypeId unitTypeId = null;\r\n         IFCUnit ifcUnit;\r\n         string ifcMeasureName = null;\r\n         ForgeTypeId baseTypeId = null;\r\n\r\n         int length = 0;\r\n         int mass = 0;\r\n         int time = 0;\r\n         int electricCurrent = 0;\r\n         int thermodynamicTemperature = 0;\r\n         int amountOfSubstance = 0;\r\n         int luminousIntensity = 0;\r\n\r\n         string conversionName = null;\r\n\r\n         if (selectedUnitTypeId == null)\r\n         {\r\n            // Look for default unit\r\n            foreach (var pair in attrib.conversionInfoDict)\r\n            {\r\n               if (pair.Value.isDefault)\r\n               {\r\n                  unitTypeId = pair.Key;\r\n                  conversionName = pair.Value.conversionName;\r\n                  break;\r\n               }\r\n            }\r\n         }\r\n         else\r\n         {\r\n            ConversionUnitInfo conversionInfo = null;\r\n            if (attrib.conversionInfoDict.TryGetValue(selectedUnitTypeId, out conversionInfo))\r\n            {\r\n               unitTypeId = selectedUnitTypeId;\r\n               conversionName = conversionInfo.conversionName;\r\n            }\r\n         }\r\n         ifcUnit = attrib.ifcUnitType;\r\n         ifcMeasureName = attrib.measureName;\r\n         baseTypeId = attrib.baseSI;\r\n\r\n         length = attrib.length;\r\n         mass = attrib.mass;\r\n         time = attrib.time;\r\n         electricCurrent = attrib.electricCurrent;\r\n         thermodynamicTemperature = attrib.thermodynamicTemperature;\r\n         amountOfSubstance = attrib.amountOfSubstance;\r\n         luminousIntensity = attrib.luminousIntensity;\r\n\r\n         conversionName = GetCobieUnitName(conversionName);\r\n\r\n         if (unitTypeId == null)\r\n            return null;\r\n\r\n         IFCAnyHandle siBaseUnit = GetOrCreateAuxiliaryUnit(file, baseTypeId);\r\n         if (siBaseUnit == null)\r\n            return null;\r\n\r\n         double siScaleFactor = UnitUtils.Convert(1.0, unitTypeId, baseTypeId);\r\n         IFCAnyHandle dims = IFCInstanceExporter.CreateDimensionalExponents(file, length, mass, time, electricCurrent, thermodynamicTemperature, amountOfSubstance, luminousIntensity);\r\n         IFCAnyHandle conversionFactor = IFCInstanceExporter.CreateMeasureWithUnit(file, IFCDataUtil.CreateAsMeasure(siScaleFactor, ifcMeasureName), siBaseUnit);\r\n         IFCAnyHandle conversionUnit = IFCInstanceExporter.CreateConversionBasedUnit(file, dims, ifcUnit, conversionName, conversionFactor);\r\n\r\n         double scaleFactor = UnitUtils.ConvertFromInternalUnits(1.0, unitTypeId);\r\n         return new UnitInfo(conversionUnit, scaleFactor, 0.0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IfcDerivedUnit handle for input data/unit types if present in mapping.\r\n      /// If unit type is null - look for default unit.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"specTypeId\">Revit data type</param>\r\n      /// <param name=\"selectedUnitTypeId\">Revit unit type</param>      \r\n      /// <returns>Created unit handle</returns>\r\n      static UnitInfo CreateUnitAsDerived(IFCFile file, ForgeTypeId specTypeId, ForgeTypeId selectedUnitTypeId)\r\n      {\r\n         DerivedAttributes attrib;\r\n         if (!DerivedUnitMapping.TryGetValue(specTypeId, out attrib))\r\n            return null;\r\n\r\n         if (attrib.derivedInfoDict == null)\r\n            return null;\r\n\r\n         return CreateUnitAsDerivedCommon(file, specTypeId, selectedUnitTypeId, attrib);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IfcDerivedUnit handle for input data/unit types if present in mapping.\r\n      /// If unit type is null - look for default unit.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"specTypeId\">Revit data type</param>\r\n      /// <param name=\"selectedUnitTypeId\">Revit unit type</param>\r\n      /// <param name=\"attrib\">Derived unit attributes</param>\r\n      /// <returns>Created unit handle</returns>\r\n      static UnitInfo CreateUnitAsDerivedCommon(IFCFile file, ForgeTypeId specTypeId, ForgeTypeId selectedUnitTypeId, DerivedAttributes attrib)\r\n      {\r\n         if (file == null)\r\n            return null;\r\n\r\n         ForgeTypeId unitTypeId = null;\r\n         string userDefName = null;\r\n         double? extraScale = null;\r\n         IList<Tuple<ForgeTypeId, int>> derivedElements = null;\r\n\r\n         if (selectedUnitTypeId == null)\r\n         {\r\n            // Look for default unit\r\n            foreach (var pair in attrib.derivedInfoDict)\r\n            {\r\n               if (pair.Value.isDefault)\r\n               {\r\n                  unitTypeId = pair.Key;\r\n                  extraScale = pair.Value.extraScale;\r\n                  derivedElements = pair.Value.derivedElements;\r\n                  break;\r\n               }\r\n            }\r\n         }\r\n         else\r\n         {\r\n            DerivedInfo derivedInfo = null;\r\n            if (attrib.derivedInfoDict.TryGetValue(selectedUnitTypeId, out derivedInfo))\r\n            {\r\n               unitTypeId = selectedUnitTypeId;\r\n               extraScale = derivedInfo.extraScale;\r\n               derivedElements = derivedInfo.derivedElements;\r\n            }\r\n         }\r\n         Enum ifcDerivedUnit = attrib.ifcDrivedUnit;\r\n         userDefName = attrib.userDefinedUnitName;\r\n\r\n         if (unitTypeId == null || (derivedElements?.Count ?? 0) == 0)\r\n            return null;\r\n\r\n         ISet<IFCAnyHandle> elements = new HashSet<IFCAnyHandle>();\r\n         foreach (var pair in derivedElements)\r\n         {\r\n            IFCAnyHandle baseSIUnit = GetOrCreateAuxiliaryUnit(file, pair.Item1);\r\n            if (baseSIUnit == null)\r\n               return null;\r\n\r\n            elements.Add(GetOrCreateDerivedUnitElement(file, baseSIUnit, pair.Item2));\r\n         }\r\n\r\n         IFCAnyHandle derivedUnitHnd = IFCInstanceExporter.CreateDerivedUnit(file, elements, ifcDerivedUnit, userDefName);\r\n\r\n         if (!string.IsNullOrEmpty(userDefName))\r\n         {\r\n            string capitalName = NamingUtil.RemoveSpaces(userDefName.ToUpper());\r\n            ExporterCacheManager.UnitsCache.RegisterUserDefinedUnit(capitalName, derivedUnitHnd);\r\n         }\r\n\r\n         double scaleFactor = UnitUtils.ConvertFromInternalUnits(1.0, unitTypeId);\r\n         scaleFactor *= extraScale.HasValue ? extraScale.Value : 1.0;\r\n         return new UnitInfo(derivedUnitHnd, scaleFactor, 0.0);\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates IfcDerivedUnitElement handle with caching\r\n      /// If unit type is null - look for default unit.\r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"unit\">Unit handle</param>\r\n      /// <param name=\"exponent\">The exponent</param>      \r\n      /// <returns>Created IfcDerivedUnitElement handle</returns>\r\n      static IFCAnyHandle GetOrCreateDerivedUnitElement(IFCFile file, IFCAnyHandle unit, int exponent)\r\n      {\r\n         Tuple<IFCAnyHandle, int> pair = Tuple.Create(unit, exponent);\r\n         IFCAnyHandle derivedUnitElement = null;\r\n         if (!ExporterCacheManager.UnitsCache.FindDerivedUnitElement(pair, out derivedUnitElement))\r\n         {\r\n            derivedUnitElement = IFCInstanceExporter.CreateDerivedUnitElement(file, unit, exponent);\r\n            ExporterCacheManager.UnitsCache.RegisterDerivedUnit(pair, derivedUnitElement);\r\n         }\r\n         return derivedUnitElement;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates auxiliary unit handle with caching if present in mapping \r\n      /// </summary>\r\n      /// <param name=\"file\">The file</param>\r\n      /// <param name=\"unitTypeId\">Revit unit type</param>      \r\n      /// <returns>Auxiliary unit handle</returns>\r\n      static IFCAnyHandle GetOrCreateAuxiliaryUnit(IFCFile file, ForgeTypeId unitTypeId)\r\n      {\r\n         IFCAnyHandle auxiliaryUnit = null;\r\n         if (ExporterCacheManager.UnitsCache.FindAuxiliaryUnit(unitTypeId, out auxiliaryUnit))\r\n            return auxiliaryUnit;\r\n\r\n         Tuple<IFCSIUnitName, IFCSIPrefix?, IFCUnit> ifcAuxilaryValue = null;\r\n         if (AuxiliaryUnitMapping.TryGetValue(unitTypeId, out ifcAuxilaryValue) == false)\r\n            return null;\r\n\r\n         auxiliaryUnit = IFCInstanceExporter.CreateSIUnit(file, ifcAuxilaryValue.Item3, ifcAuxilaryValue.Item2, ifcAuxilaryValue.Item1);\r\n\r\n         ExporterCacheManager.UnitsCache.RegisterAuxiliaryUnit(unitTypeId, auxiliaryUnit);\r\n\r\n         return auxiliaryUnit;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates scaling and offset values for conversion \r\n      /// from Revit internal units\r\n      /// </summary>\r\n      /// <param name=\"unitTypeId\">Revit unit type</param>      \r\n      /// <returns>Auxiliary unit handle</returns>\r\n      static (double offset, double scaleFactor) GetScaleFactorAndOffset(ForgeTypeId unitTypeId)\r\n      {\r\n         double value0 = UnitUtils.ConvertFromInternalUnits(0.0, unitTypeId);\r\n         double value1 = UnitUtils.ConvertFromInternalUnits(1.0, unitTypeId);\r\n\r\n         double offset = value0;\r\n         double scaleFactor = (value1 - value0);\r\n         if (MathUtil.IsAlmostZero(scaleFactor))\r\n            scaleFactor = 1.0;\r\n\r\n         return (scaleFactor, offset);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get mapped unit name for ExportAsCOBIE\r\n      /// </summary>\r\n      static string GetCobieUnitName(string unitName)\r\n      {\r\n         if (!ExporterCacheManager.ExportOptionsCache.ExportAsCOBIE)\r\n            return unitName;\r\n\r\n         string cobieName;\r\n         if (!CobieUnitNameMapping.TryGetValue(unitName, out cobieName))\r\n            cobieName = unitName.ToLower();\r\n\r\n         return cobieName;\r\n      }\r\n\r\n      #endregion\r\n\r\n\r\n      #region Unit Mapping Tables\r\n      /// <summary>\r\n      /// The dictionary contains the information to create auxiliary ifc unit for a Revit unit type\r\n      /// These are the auxiliary unit handles that don't go to IfcUnitAssignment\r\n      /// </summary>\r\n      private static readonly Dictionary<ForgeTypeId, Tuple<IFCSIUnitName, IFCSIPrefix?, IFCUnit>> AuxiliaryUnitMapping = new Dictionary<ForgeTypeId, Tuple<IFCSIUnitName, IFCSIPrefix?, IFCUnit>>()\r\n      {\r\n         { UnitTypeId.Meters,       Tuple.Create<IFCSIUnitName, IFCSIPrefix?, IFCUnit>(IFCSIUnitName.Metre, null, IFCUnit.LengthUnit) },\r\n         { UnitTypeId.Decimeters,   Tuple.Create<IFCSIUnitName, IFCSIPrefix?, IFCUnit>(IFCSIUnitName.Metre, IFCSIPrefix.Deci, IFCUnit.LengthUnit) },\r\n         { UnitTypeId.SquareMeters, Tuple.Create<IFCSIUnitName, IFCSIPrefix?, IFCUnit>(IFCSIUnitName.Square_Metre, null, IFCUnit.AreaUnit) },\r\n         { UnitTypeId.CubicMeters,  Tuple.Create<IFCSIUnitName, IFCSIPrefix?, IFCUnit>(IFCSIUnitName.Cubic_Metre, null, IFCUnit.VolumeUnit) },\r\n         { UnitTypeId.Kilograms,    Tuple.Create<IFCSIUnitName, IFCSIPrefix?, IFCUnit>(IFCSIUnitName.Gram, IFCSIPrefix.Kilo, IFCUnit.MassUnit) },\r\n         { UnitTypeId.Seconds,      Tuple.Create<IFCSIUnitName, IFCSIPrefix?, IFCUnit>(IFCSIUnitName.Second, null, IFCUnit.TimeUnit) },\r\n         { UnitTypeId.Amperes,      Tuple.Create<IFCSIUnitName, IFCSIPrefix?, IFCUnit>(IFCSIUnitName.Ampere, null, IFCUnit.ElectricCurrentUnit) },\r\n         { UnitTypeId.Kiloamperes,  Tuple.Create<IFCSIUnitName, IFCSIPrefix?, IFCUnit>(IFCSIUnitName.Ampere, IFCSIPrefix.Kilo, IFCUnit.ElectricCurrentUnit) },\r\n         { UnitTypeId.Milliamperes, Tuple.Create<IFCSIUnitName, IFCSIPrefix?, IFCUnit>(IFCSIUnitName.Ampere, IFCSIPrefix.Milli, IFCUnit.ElectricCurrentUnit) },\r\n         { UnitTypeId.Kelvin,       Tuple.Create<IFCSIUnitName, IFCSIPrefix?, IFCUnit>(IFCSIUnitName.Kelvin, null, IFCUnit.ThermoDynamicTemperatureUnit) },\r\n         { UnitTypeId.Candelas,     Tuple.Create<IFCSIUnitName, IFCSIPrefix?, IFCUnit>(IFCSIUnitName.Candela, null, IFCUnit.LuminousIntensityUnit) },\r\n         { UnitTypeId.Radians,      Tuple.Create<IFCSIUnitName, IFCSIPrefix?, IFCUnit>(IFCSIUnitName.Radian, null, IFCUnit.PlaneAngleUnit) },\r\n         { UnitTypeId.Lumens,       Tuple.Create<IFCSIUnitName, IFCSIPrefix?, IFCUnit>(IFCSIUnitName.Lumen, null, IFCUnit.LuminousFluxUnit) },\r\n         { UnitTypeId.Newtons,      Tuple.Create<IFCSIUnitName, IFCSIPrefix?, IFCUnit>(IFCSIUnitName.Newton, null, IFCUnit.ForceUnit) },\r\n\r\n      };\r\n\r\n\r\n      /// <summary>\r\n      /// The dictionary contains the information to create IfcSIUnit for a Revit data type\r\n      /// </summary>\r\n      private static readonly Dictionary<ForgeTypeId, SIAttributes> SIUnitMapping = new Dictionary<ForgeTypeId, SIAttributes>()\r\n      {\r\n         { SpecTypeId.Mass, new SIAttributes(IFCUnit.MassUnit, new Dictionary<ForgeTypeId, SIUnitInfo>()\r\n            {\r\n               { UnitTypeId.Kilograms, new SIUnitInfo(IFCSIUnitName.Gram, IFCSIPrefix.Kilo, true) }\r\n            } )\r\n         },\r\n         { SpecTypeId.Time, new SIAttributes(IFCUnit.TimeUnit, new Dictionary<ForgeTypeId, SIUnitInfo>()\r\n            {\r\n               { UnitTypeId.Seconds, new SIUnitInfo(IFCSIUnitName.Second, null, true) }\r\n            } )\r\n         },\r\n         { SpecTypeId.Current, new SIAttributes(IFCUnit.ElectricCurrentUnit, new Dictionary<ForgeTypeId, SIUnitInfo>()\r\n            {\r\n               { UnitTypeId.Amperes, new SIUnitInfo(IFCSIUnitName.Ampere, null, true) },\r\n               { UnitTypeId.Kiloamperes, new SIUnitInfo(IFCSIUnitName.Ampere, IFCSIPrefix.Kilo, true) }\r\n            } )\r\n         },\r\n         { SpecTypeId.LuminousIntensity, new SIAttributes(IFCUnit.LuminousIntensityUnit, new Dictionary<ForgeTypeId, SIUnitInfo>()\r\n            {\r\n               { UnitTypeId.Candelas, new SIUnitInfo(IFCSIUnitName.Candela, null, true) }\r\n            } )\r\n         },\r\n         { SpecTypeId.HvacTemperature, new SIAttributes(IFCUnit.ThermoDynamicTemperatureUnit, new Dictionary<ForgeTypeId, SIUnitInfo>()\r\n            {\r\n               { UnitTypeId.Celsius, new SIUnitInfo(IFCSIUnitName.Degree_Celsius, null, true) },\r\n               { UnitTypeId.Kelvin, new SIUnitInfo(IFCSIUnitName.Kelvin, null, false) }\r\n            } )\r\n         },\r\n         { SpecTypeId.Length, new SIAttributes(IFCUnit.LengthUnit, new Dictionary<ForgeTypeId, SIUnitInfo>()\r\n            {\r\n               { UnitTypeId.Meters, new SIUnitInfo(IFCSIUnitName.Metre, null, false) },\r\n               { UnitTypeId.MetersCentimeters, new SIUnitInfo(IFCSIUnitName.Metre, null, false) },\r\n               { UnitTypeId.Centimeters, new SIUnitInfo(IFCSIUnitName.Metre, IFCSIPrefix.Centi, false) },\r\n               { UnitTypeId.Millimeters, new SIUnitInfo(IFCSIUnitName.Metre, IFCSIPrefix.Milli, false) }\r\n            } )\r\n         },\r\n         { SpecTypeId.Area, new SIAttributes(IFCUnit.AreaUnit, new Dictionary<ForgeTypeId, SIUnitInfo>()\r\n            {\r\n               { UnitTypeId.SquareMeters, new SIUnitInfo(IFCSIUnitName.Square_Metre, null, false) },\r\n               { UnitTypeId.SquareCentimeters, new SIUnitInfo(IFCSIUnitName.Square_Metre, IFCSIPrefix.Centi, false) },\r\n               { UnitTypeId.SquareMillimeters, new SIUnitInfo(IFCSIUnitName.Square_Metre, IFCSIPrefix.Milli, false) }\r\n            } )\r\n         },\r\n         { SpecTypeId.Volume, new SIAttributes(IFCUnit.VolumeUnit, new Dictionary<ForgeTypeId, SIUnitInfo>()\r\n            {\r\n               { UnitTypeId.CubicMeters, new SIUnitInfo(IFCSIUnitName.Cubic_Metre, null, false) },\r\n               { UnitTypeId.Liters, new SIUnitInfo(IFCSIUnitName.Cubic_Metre, IFCSIPrefix.Deci, false) },\r\n               { UnitTypeId.CubicCentimeters, new SIUnitInfo(IFCSIUnitName.Cubic_Metre, IFCSIPrefix.Centi, false) },\r\n               { UnitTypeId.CubicMillimeters, new SIUnitInfo(IFCSIUnitName.Cubic_Metre, IFCSIPrefix.Milli, false) }\r\n            } )\r\n         },\r\n         { SpecTypeId.Angle, new SIAttributes(IFCUnit.PlaneAngleUnit, new Dictionary<ForgeTypeId, SIUnitInfo>()\r\n            {\r\n               { UnitTypeId.Radians, new SIUnitInfo(IFCSIUnitName.Radian, null, false) }\r\n            } )\r\n         },\r\n         { SpecTypeId.Force, new SIAttributes(IFCUnit.ForceUnit, new Dictionary<ForgeTypeId, SIUnitInfo>()\r\n            {\r\n               { UnitTypeId.Newtons, new SIUnitInfo(IFCSIUnitName.Newton, null, true) },\r\n               { UnitTypeId.Dekanewtons, new SIUnitInfo(IFCSIUnitName.Newton, IFCSIPrefix.Deca, false) },\r\n               { UnitTypeId.Kilonewtons, new SIUnitInfo(IFCSIUnitName.Newton, IFCSIPrefix.Kilo, false) },\r\n               { UnitTypeId.Meganewtons, new SIUnitInfo(IFCSIUnitName.Newton, IFCSIPrefix.Mega, false) }\r\n            } )\r\n         },\r\n         { SpecTypeId.ElectricalFrequency, new SIAttributes(IFCUnit.FrequencyUnit, new Dictionary<ForgeTypeId, SIUnitInfo>()\r\n            {\r\n               { UnitTypeId.Hertz, new SIUnitInfo(IFCSIUnitName.Hertz, null, true) }\r\n            } )\r\n         },\r\n         { SpecTypeId.ElectricalPotential, new SIAttributes(IFCUnit.ElectricVoltageUnit, new Dictionary<ForgeTypeId, SIUnitInfo>()\r\n            {\r\n               { UnitTypeId.Volts, new SIUnitInfo(IFCSIUnitName.Volt, null, true) },\r\n               { UnitTypeId.Kilovolts, new SIUnitInfo(IFCSIUnitName.Volt, IFCSIPrefix.Kilo, true) },\r\n               { UnitTypeId.Millivolts, new SIUnitInfo(IFCSIUnitName.Volt, IFCSIPrefix.Milli, true) },\r\n            } )\r\n         },\r\n         { SpecTypeId.HvacPower, new SIAttributes(IFCUnit.PowerUnit, new Dictionary<ForgeTypeId, SIUnitInfo>()\r\n            {\r\n               { UnitTypeId.Watts, new SIUnitInfo(IFCSIUnitName.Watt, null, true) },\r\n               { UnitTypeId.Kilowatts, new SIUnitInfo(IFCSIUnitName.Watt, IFCSIPrefix.Kilo, true) },\r\n               { UnitTypeId.VoltAmperes, new SIUnitInfo(IFCSIUnitName.Watt, null, true) },\r\n               { UnitTypeId.KilovoltAmperes, new SIUnitInfo(IFCSIUnitName.Watt, IFCSIPrefix.Kilo, true) },\r\n            } )\r\n         },\r\n         { SpecTypeId.Illuminance, new SIAttributes(IFCUnit.IlluminanceUnit, new Dictionary<ForgeTypeId, SIUnitInfo>()\r\n            {\r\n               { UnitTypeId.Lux, new SIUnitInfo(IFCSIUnitName.Lux, null, true) }\r\n            } )\r\n         },\r\n         { SpecTypeId.LuminousFlux, new SIAttributes(IFCUnit.LuminousFluxUnit, new Dictionary<ForgeTypeId, SIUnitInfo>()\r\n            {\r\n               { UnitTypeId.Lumens, new SIUnitInfo(IFCSIUnitName.Lumen, null, true) }\r\n            } )\r\n         },\r\n         { SpecTypeId.Energy, new SIAttributes(IFCUnit.EnergyUnit, new Dictionary<ForgeTypeId, SIUnitInfo>()\r\n            {\r\n               { UnitTypeId.Joules, new SIUnitInfo(IFCSIUnitName.Joule, null, true) },\r\n               { UnitTypeId.Kilojoules, new SIUnitInfo(IFCSIUnitName.Joule, IFCSIPrefix.Kilo, true) },\r\n               { UnitTypeId.Gigajoules, new SIUnitInfo(IFCSIUnitName.Joule, IFCSIPrefix.Giga, true) },\r\n            } )\r\n         },\r\n         { SpecTypeId.HvacPressure, new SIAttributes(IFCUnit.PressureUnit, new Dictionary<ForgeTypeId, SIUnitInfo>()\r\n            {\r\n               { UnitTypeId.Pascals, new SIUnitInfo(IFCSIUnitName.Pascal, null, true) },\r\n               { UnitTypeId.Kilopascals, new SIUnitInfo(IFCSIUnitName.Pascal, IFCSIPrefix.Kilo, false) },\r\n               { UnitTypeId.Megapascals, new SIUnitInfo(IFCSIUnitName.Pascal, IFCSIPrefix.Mega, false) }\r\n            } )\r\n         }\r\n      };\r\n\r\n\r\n      /// <summary>\r\n      /// The dictionary contains the information to create IfcConversionBasedUnit for a Revit data type\r\n      /// </summary>\r\n      private static readonly Dictionary<ForgeTypeId, ConversionAttributes> ConversionBasedUnitMapping = new Dictionary<ForgeTypeId, ConversionAttributes>()\r\n      {\r\n         { SpecTypeId.Length,  new ConversionAttributes(IFCUnit.LengthUnit, \"IfcLengthMeasure\", UnitTypeId.Meters, 1, 0, 0, 0, 0, 0, 0, new Dictionary<ForgeTypeId, ConversionUnitInfo>() {\r\n            { UnitTypeId.Feet, new ConversionUnitInfo(\"FOOT\", true) },\r\n            { UnitTypeId.FeetFractionalInches, new ConversionUnitInfo(\"FOOT\", false)},\r\n            { UnitTypeId.Inches, new ConversionUnitInfo(\"INCH\", false)},\r\n            { UnitTypeId.FractionalInches, new ConversionUnitInfo(\"INCH\", false) } } )\r\n         },\r\n         { SpecTypeId.Area,  new ConversionAttributes(IFCUnit.AreaUnit, \"IfcAreaMeasure\", UnitTypeId.SquareMeters, 2, 0, 0, 0, 0, 0, 0, new Dictionary<ForgeTypeId, ConversionUnitInfo>() {\r\n            { UnitTypeId.SquareFeet, new ConversionUnitInfo(\"SQUARE FOOT\", true) },\r\n            { UnitTypeId.SquareInches, new ConversionUnitInfo(\"SQUARE INCH\", false) } } )\r\n         },\r\n         { SpecTypeId.Volume,  new ConversionAttributes(IFCUnit.VolumeUnit, \"IfcVolumeMeasure\", UnitTypeId.CubicMeters, 3, 0, 0, 0, 0, 0, 0, new Dictionary<ForgeTypeId, ConversionUnitInfo>() {\r\n            { UnitTypeId.CubicFeet, new ConversionUnitInfo(\"CUBIC FOOT\", true) },\r\n            { UnitTypeId.CubicInches, new ConversionUnitInfo(\"CUBIC INCH\", false) } } )\r\n         },\r\n         { SpecTypeId.Angle,  new ConversionAttributes(IFCUnit.PlaneAngleUnit, \"IfcPlaneAngleMeasure\", UnitTypeId.Radians, 0, 0, 0, 0, 0, 0, 0, new Dictionary<ForgeTypeId, ConversionUnitInfo>() {\r\n            { UnitTypeId.Degrees, new ConversionUnitInfo(\"DEGREE\", true) },\r\n            { UnitTypeId.DegreesMinutes, new ConversionUnitInfo(\"DEGREE\", false) },\r\n            { UnitTypeId.Gradians, new ConversionUnitInfo(\"GRAD\", false) } } )\r\n         },\r\n         { SpecTypeId.Force,  new ConversionAttributes(IFCUnit.ForceUnit, \"IfcForceMeasure\", UnitTypeId.Newtons, 1, 1, -2, 0, 0, 0, 0, new Dictionary<ForgeTypeId, ConversionUnitInfo>() {\r\n            { UnitTypeId.KilogramsForce, new ConversionUnitInfo(\"KILOGRAM-FORCE\", false) },\r\n            { UnitTypeId.TonnesForce, new ConversionUnitInfo(\"TONN-FORCE\", false) },\r\n            { UnitTypeId.UsTonnesForce, new ConversionUnitInfo(\"USTONN-FORCE\", false) },\r\n            { UnitTypeId.PoundsForce, new ConversionUnitInfo(\"POUND-FORCE\", false) },\r\n            { UnitTypeId.Kips, new ConversionUnitInfo(\"CUBIC INCH\", false) } } )\r\n         }\r\n      };\r\n\r\n      /// <summary>\r\n      /// The dictionary contains the information to create IfcDerivedUnit for a Revit data type\r\n      /// </summary>\r\n      private static readonly Dictionary<ForgeTypeId, DerivedAttributes> DerivedUnitMapping = new Dictionary<ForgeTypeId, DerivedAttributes>()\r\n      {\r\n         { SpecTypeId.MassDensity, new DerivedAttributes(IFCDerivedUnitEnum.MassDensityUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.KilogramsPerCubicMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, -3) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.PipingDensity, new DerivedAttributes(IFCDerivedUnitEnum.IonConcentrationUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.KilogramsPerCubicMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, -3) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.MomentOfInertia, new DerivedAttributes(IFCDerivedUnitEnum.MomentOfInertiaUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.MetersToTheFourthPower, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Meters, 4) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.HeatTransferCoefficient, new DerivedAttributes(IFCDerivedUnitEnum.ThermalTransmittanceUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.WattsPerSquareMeterKelvin, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Kelvin, -1),\r\n               Tuple.Create(UnitTypeId.Seconds, -3) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.ThermalConductivity, new DerivedAttributes(IFCDerivedUnitEnum.ThermalConductanceUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.WattsPerMeterKelvin, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, 1),\r\n               Tuple.Create(UnitTypeId.Kelvin, -1),\r\n               Tuple.Create(UnitTypeId.Seconds, -3) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.AirFlow, new DerivedAttributes(IFCDerivedUnitEnum.VolumetricFlowRateUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.CubicMetersPerSecond, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Meters, 3),\r\n               Tuple.Create(UnitTypeId.Seconds, -1) } )\r\n            },\r\n            { UnitTypeId.LitersPerSecond, new DerivedInfo(null, false, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Decimeters, 3),\r\n               Tuple.Create(UnitTypeId.Seconds, -1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.PipingMassPerTime, new DerivedAttributes(IFCDerivedUnitEnum.MassFlowRateUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.KilogramsPerSecond, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Seconds, -1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.AngularSpeed, new DerivedAttributes(IFCDerivedUnitEnum.RotationalFrequencyUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.RevolutionsPerSecond, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Seconds, -1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.Wattage, new DerivedAttributes(IFCDerivedUnitEnum.SoundPowerUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.Watts, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, 2),\r\n               Tuple.Create(UnitTypeId.Seconds, -3) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.HvacPressure, new DerivedAttributes(IFCDerivedUnitEnum.SoundPressureUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.Pascals, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, -1),\r\n               Tuple.Create(UnitTypeId.Seconds, -2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.HvacVelocity, new DerivedAttributes(IFCDerivedUnitEnum.LinearVelocityUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.MetersPerSecond, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Meters, 1),\r\n               Tuple.Create(UnitTypeId.Seconds, -1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.LinearForce, new DerivedAttributes(IFCDerivedUnitEnum.LinearForceUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.NewtonsPerMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Seconds, -2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.AreaForce, new DerivedAttributes(IFCDerivedUnitEnum.PlanarForceUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.NewtonsPerSquareMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, -1),\r\n               Tuple.Create(UnitTypeId.Seconds, -2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.SpecificHeat, new DerivedAttributes(IFCDerivedUnitEnum.SpecificHeatCapacityUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.JoulesPerKilogramDegreeCelsius, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Meters, 2),\r\n               Tuple.Create(UnitTypeId.Seconds, -2),\r\n               Tuple.Create(UnitTypeId.Kelvin, -1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.HvacPowerDensity, new DerivedAttributes(IFCDerivedUnitEnum.HeatFluxDensityUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.WattsPerSquareMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Seconds, -3) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.SpecificHeatOfVaporization, new DerivedAttributes(IFCDerivedUnitEnum.HeatingValueUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.JoulesPerGram, new DerivedInfo(1.0e+3, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Meters, 2),\r\n               Tuple.Create(UnitTypeId.Seconds, -2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.Permeability, new DerivedAttributes(IFCDerivedUnitEnum.VaporPermeabilityUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.NanogramsPerPascalSecondSquareMeter, new DerivedInfo(1.0e-12, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Meters, -1),\r\n               Tuple.Create(UnitTypeId.Seconds, 1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.HvacViscosity, new DerivedAttributes(IFCDerivedUnitEnum.DynamicViscosityUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.KilogramsPerMeterSecond, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, -1),\r\n               Tuple.Create(UnitTypeId.Seconds, -1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.ThermalExpansionCoefficient, new DerivedAttributes(IFCDerivedUnitEnum.ThermalExpansionCoefficientUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.InverseDegreesCelsius, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kelvin, -1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.Stress, new DerivedAttributes(IFCDerivedUnitEnum.ModulusOfElasticityUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.Pascals, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, -1),\r\n               Tuple.Create(UnitTypeId.Seconds, -2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.IsothermalMoistureCapacity, new DerivedAttributes(IFCDerivedUnitEnum.IsothermalMoistureCapacityUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.CubicMetersPerKilogram, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, -1),\r\n               Tuple.Create(UnitTypeId.Meters, 3) } )\r\n            } } )\r\n         },\r\n\r\n         { SpecTypeId.Diffusivity, new DerivedAttributes(IFCDerivedUnitEnum.MoistureDiffusivityUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.SquareMetersPerSecond, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Meters, 2),\r\n               Tuple.Create(UnitTypeId.Seconds, -1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.MassPerUnitLength, new DerivedAttributes(IFCDerivedUnitEnum.MassPerLengthUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.KilogramsPerMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, -1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.ThermalResistance, new DerivedAttributes(IFCDerivedUnitEnum.ThermalResistanceUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.SquareMeterKelvinsPerWatt, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, -1),\r\n               Tuple.Create(UnitTypeId.Seconds, 3),\r\n               Tuple.Create(UnitTypeId.Kelvin, 1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.Acceleration, new DerivedAttributes(IFCDerivedUnitEnum.AccelerationUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.MetersPerSecondSquared, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Meters, 1),\r\n               Tuple.Create(UnitTypeId.Seconds, -2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.Pulsation, new DerivedAttributes(IFCDerivedUnitEnum.AngularVelocityUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.RadiansPerSecond, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Radians, 1),\r\n               Tuple.Create(UnitTypeId.Seconds, -1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.PointSpringCoefficient, new DerivedAttributes(IFCDerivedUnitEnum.LinearStiffnessUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.NewtonsPerMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Seconds, -2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.WarpingConstant, new DerivedAttributes(IFCDerivedUnitEnum.WarpingConstantUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.MetersToTheSixthPower, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Meters, 6) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.LinearMoment, new DerivedAttributes(IFCDerivedUnitEnum.LinearMomentUnit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.NewtonMetersPerMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, 1),\r\n               Tuple.Create(UnitTypeId.Seconds, -2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.Moment, new DerivedAttributes(IFCDerivedUnitEnum.Torqueunit, null, new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.NewtonMeters, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, 2),\r\n               Tuple.Create(UnitTypeId.Seconds, -2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.CostPerArea, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Cost Per Area\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.CurrencyPerSquareMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Meters, -2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.ApparentPowerDensity, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Apparent Power Density\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.VoltAmperesPerSquareMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Seconds, -3) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.CostRateEnergy, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Cost Rate Energy\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.CurrencyPerWattHour, new DerivedInfo(1.0 / 3600.0, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, -1),\r\n               Tuple.Create(UnitTypeId.Meters, -2),\r\n               Tuple.Create(UnitTypeId.Seconds, 2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.CostRatePower, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Cost Rate Power\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.CurrencyPerWatt, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, -1),\r\n               Tuple.Create(UnitTypeId.Meters, -2),\r\n               Tuple.Create(UnitTypeId.Seconds, 3) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.Efficacy, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Luminous Efficacy\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.LumensPerWatt, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, -1),\r\n               Tuple.Create(UnitTypeId.Meters, -2),\r\n               Tuple.Create(UnitTypeId.Seconds, 3),\r\n               Tuple.Create(UnitTypeId.Lumens, 1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.Luminance, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Luminance\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.CandelasPerSquareMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Meters, -2),\r\n               Tuple.Create(UnitTypeId.Candelas, 1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.ElectricalPowerDensity, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Electrical Power Density\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.WattsPerSquareMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Seconds, -3) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.PowerPerLength, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Power Per Length\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.WattsPerMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, 1),\r\n               Tuple.Create(UnitTypeId.Seconds, -3) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.ElectricalResistivity, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Electrical Resistivity\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.OhmMeters, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, 3),\r\n               Tuple.Create(UnitTypeId.Seconds, -3),\r\n               Tuple.Create(UnitTypeId.Amperes, -2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.HeatCapacityPerArea, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Heat Capacity Per Area\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.JoulesPerSquareMeterKelvin, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Seconds, -2),\r\n               Tuple.Create(UnitTypeId.Kelvin, -1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.ThermalGradientCoefficientForMoistureCapacity, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Thermal Gradient Coefficient For Moisture Capacity\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.KilogramsPerKilogramKelvin, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kelvin, -1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.ThermalMass, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Thermal Mass\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.JoulesPerKelvin, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, 2),\r\n               Tuple.Create(UnitTypeId.Seconds, -2),\r\n               Tuple.Create(UnitTypeId.Kelvin, -1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.AirFlowDensity, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Air Flow Density\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.CubicMetersPerHourSquareMeter, new DerivedInfo(1.0 / 3600.0, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Meters, 1),\r\n               Tuple.Create(UnitTypeId.Seconds, -1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.AirFlowDividedByCoolingLoad, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Air Flow Divided By Cooling Load\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.LitersPerSecondKilowatt, new DerivedInfo(1.0e-3 * 1.0e-3, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, -1),\r\n               Tuple.Create(UnitTypeId.Meters, 1),\r\n               Tuple.Create(UnitTypeId.Seconds, 2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.AirFlowDividedByVolume, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Air Flow Divided By Volume\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.CubicMetersPerHourCubicMeter, new DerivedInfo(1.0 / 3600.0, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Seconds, -1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.AreaDividedByCoolingLoad, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Area Divided By Cooling Load\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.SquareMetersPerKilowatt, new DerivedInfo(1.0e-3, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, -1),\r\n               Tuple.Create(UnitTypeId.Seconds, 3) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.AreaDividedByHeatingLoad, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Area Divided By Heating Load\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.SquareMetersPerKilowatt, new DerivedInfo(1.0e-3, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, -1),\r\n               Tuple.Create(UnitTypeId.Seconds, 3) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.CoolingLoadDividedByArea, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Cooling Load Divided By Area\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.WattsPerSquareMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Seconds, -3) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.CoolingLoadDividedByVolume, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Cooling Load Divided By Volume\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.WattsPerCubicMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, -1),\r\n               Tuple.Create(UnitTypeId.Seconds, -3) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.FlowPerPower, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Flow Per Power\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.CubicMetersPerWattSecond, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, -1),\r\n               Tuple.Create(UnitTypeId.Meters, 1),\r\n               Tuple.Create(UnitTypeId.Seconds, 2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.HvacFriction, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Friction Loss\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.PascalsPerMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, -2),\r\n               Tuple.Create(UnitTypeId.Seconds, -2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.HeatingLoadDividedByArea, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Heating Load Divided By Area\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.WattsPerSquareMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Seconds, -3) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.HeatingLoadDividedByVolume, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Heating Load Divided By Volume\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.WattsPerCubicMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, -1),\r\n               Tuple.Create(UnitTypeId.Seconds, -3) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.PowerPerFlow, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Power Per Flow\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.WattsPerCubicMeterPerSecond, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, -1),\r\n               Tuple.Create(UnitTypeId.Seconds, -2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.PipingFriction, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Piping Friction\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.PascalsPerMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, -2),\r\n               Tuple.Create(UnitTypeId.Seconds, -2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.AreaSpringCoefficient, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Area Spring Coefficient\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.PascalsPerMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, -2),\r\n               Tuple.Create(UnitTypeId.Seconds, -2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.LineSpringCoefficient, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Line Spring Coefficient\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.Pascals, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, -1),\r\n               Tuple.Create(UnitTypeId.Seconds, -2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.MassPerUnitArea, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Mass Per Unit Area\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.KilogramsPerSquareMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, -2) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.ReinforcementAreaPerUnitLength, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Reinforcement Area Per Unit Length\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.SquareMetersPerMeter, new DerivedInfo(null, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Meters, 2),\r\n               Tuple.Create(UnitTypeId.Meters, -1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.RotationalLineSpringCoefficient, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Rotational Line Spring Coefficient\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.KilonewtonMetersPerDegreePerMeter, new DerivedInfo(1.0e+3 * 180.0 / Math.PI, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, 1),\r\n               Tuple.Create(UnitTypeId.Seconds, -2),\r\n               Tuple.Create(UnitTypeId.Radians, -1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.RotationalPointSpringCoefficient, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Rotational Point Spring Coefficient\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.KilonewtonMetersPerDegree, new DerivedInfo(1.0e+3 * 180.0 / Math.PI, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, 2),\r\n               Tuple.Create(UnitTypeId.Seconds, -2),\r\n               Tuple.Create(UnitTypeId.Radians, -1) } )\r\n            } } )\r\n         },\r\n         { SpecTypeId.UnitWeight, new DerivedAttributes(IFCDerivedUnitEnum.UserDefined, \"Unit Weight\", new Dictionary<ForgeTypeId, DerivedInfo>() {\r\n            { UnitTypeId.KilonewtonsPerCubicMeter, new DerivedInfo(1.0e+3, true, new List<Tuple<ForgeTypeId, int>>() {\r\n               Tuple.Create(UnitTypeId.Kilograms, 1),\r\n               Tuple.Create(UnitTypeId.Meters, -2),\r\n               Tuple.Create(UnitTypeId.Seconds, -2) } )\r\n            } } )\r\n         }\r\n      };\r\n\r\n      /// <summary>\r\n      /// The dictionary contains specific unit name mapping for ExportAsCOBIE\r\n      /// </summary>\r\n      private static readonly Dictionary<string, string> CobieUnitNameMapping = new Dictionary<string, string>()\r\n      {\r\n         { \"SQUARE INCH\", \"inch\" },\r\n         { \"SQUARE FOOT\", \"foot\" },\r\n         { \"CUBIC INCH\", \"inch\" },\r\n         { \"CUBIC FOOT\", \"foot\" }\r\n      };\r\n\r\n      /// <summary>\r\n      /// The dictionary contains Ifc to Revit data type mapping\r\n      /// </summary>\r\n      private static readonly Dictionary<string, ForgeTypeId> IfcToRevitDataTypeMapping = new Dictionary<string, ForgeTypeId>()\r\n      {\r\n         { \"IfcAccelerationMeasure\", SpecTypeId.Acceleration },\r\n         { \"IfcAngularVelocityMeasure\", SpecTypeId.Pulsation },\r\n         { \"IfcAreaDensityMeasure\", SpecTypeId.MassPerUnitArea },\r\n         { \"IfcAreaMeasure\", SpecTypeId.Area },\r\n         { \"IfcDynamicViscosityMeasure\", SpecTypeId.HvacViscosity },\r\n         { \"IfcElectricCurrentMeasure\", SpecTypeId.Current },\r\n         { \"IfcElectricVoltageMeasure\", SpecTypeId.ElectricalPotential },\r\n         { \"IfcEnergyMeasure\", SpecTypeId.Energy },\r\n         { \"IfcForceMeasure\", SpecTypeId.Force },\r\n         { \"IfcFrequencyMeasure\", SpecTypeId.ElectricalFrequency },\r\n         { \"IfcHeatFluxDensityMeasure\", SpecTypeId.HvacPowerDensity },\r\n         { \"IfcHeatingValueMeasure\", SpecTypeId.SpecificHeatOfVaporization },\r\n         { \"IfcIlluminanceMeasure\", SpecTypeId.Illuminance },\r\n         { \"IfcIonConcentrationMeasure\", SpecTypeId.PipingDensity },\r\n         { \"IfcIsothermalMoistureCapacityMeasure\", SpecTypeId.IsothermalMoistureCapacity },\r\n         { \"IfcLengthMeasure\", SpecTypeId.Length },\r\n         { \"IfcLinearForceMeasure\", SpecTypeId.LinearForce },\r\n         { \"IfcLinearMomentMeasure\", SpecTypeId.LinearMoment },\r\n         { \"IfcLinearStiffnessMeasure\", SpecTypeId.PointSpringCoefficient },\r\n         { \"IfcLinearVelocityMeasure\", SpecTypeId.HvacVelocity },\r\n         { \"IfcLuminousFluxMeasure\", SpecTypeId.LuminousFlux },\r\n         { \"IfcLuminousIntensityMeasure\", SpecTypeId.LuminousIntensity },\r\n         { \"IfcMassDensityMeasure\", SpecTypeId.MassDensity },\r\n         { \"IfcMassFlowRateMeasure\", SpecTypeId.PipingMassPerTime },\r\n         { \"IfcMassMeasure\", SpecTypeId.Mass },\r\n         { \"IfcMassPerLengthMeasure\", SpecTypeId.MassPerUnitLength },\r\n         { \"IfcModulusOfElasticityMeasure\", SpecTypeId.Stress },\r\n         { \"IfcMoistureDiffusivityMeasure\", SpecTypeId.Diffusivity },\r\n         { \"IfcMomentOfInertiaMeasure\", SpecTypeId.MomentOfInertia },\r\n         { \"IfcPlanarForceMeasure\", SpecTypeId.AreaForce },\r\n         { \"IfcPlaneAngleMeasure\", SpecTypeId.Angle },\r\n         { \"IfcPositiveLengthMeasure\", SpecTypeId.Length },\r\n         { \"IfcPositivePlaneAngleMeasure\", SpecTypeId.Angle },\r\n         { \"IfcPowerMeasure\", SpecTypeId.HvacPower },\r\n         { \"IfcPressureMeasure\", SpecTypeId.HvacPressure },\r\n         { \"IfcRotationalFrequencyMeasure\", SpecTypeId.AngularSpeed },\r\n         { \"IfcSoundPowerMeasure\", SpecTypeId.Wattage },\r\n         { \"IfcSoundPressureMeasure\", SpecTypeId.HvacPressure },\r\n         { \"IfcSpecificHeatCapacityMeasure\", SpecTypeId.SpecificHeat },\r\n         { \"IfcThermalConductivityMeasure\", SpecTypeId.ThermalConductivity },\r\n         { \"IfcThermalExpansionCoefficientMeasure\", SpecTypeId.ThermalExpansionCoefficient },\r\n         { \"IfcThermalResistanceMeasure\", SpecTypeId.ThermalResistance },\r\n         { \"IfcThermalTransmittanceMeasure\", SpecTypeId.HeatTransferCoefficient },\r\n         { \"IfcThermodynamicTemperatureMeasure\", SpecTypeId.HvacTemperature },\r\n         { \"IfcTimeMeasure\", SpecTypeId.Time },\r\n         { \"IfcTorqueMeasure\", SpecTypeId.Moment },\r\n         { \"IfcVolumeMeasure\", SpecTypeId.Volume },\r\n         { \"IfcVolumetricFlowRateMeasure\", SpecTypeId.AirFlow },\r\n         { \"IfcWarpingConstantMeasure\", SpecTypeId.WarpingConstant },\r\n      };\r\n      #endregion\r\n\r\n\r\n      /// <summary>\r\n      /// Get Revit data type mapped to the ifc proeprty type.\r\n      /// </summary>\r\n      /// <returns> True if the mapping is found. </returns>\r\n      public static bool GetRevitDataTypeFromIfcPropertyType(PropertyType propertyType,\r\n         out StorageType storageType, out HashSet<ForgeTypeId> dataTypes)\r\n      {\r\n         storageType = StorageType.None;\r\n         dataTypes = null;\r\n\r\n         if (!IfcPropertyTypeToRevitDataType.TryGetValue(propertyType, out var revitDataType))\r\n            return false; \r\n\r\n         storageType = revitDataType.storageType;\r\n         dataTypes = revitDataType.dataTypes;\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get Revit data type mapped to the ifc quantity type.\r\n      /// </summary>\r\n      /// <returns> True if the mapping is found. </returns>\r\n      public static bool GetRevitDataTypeFromIfcQuantityType(QuantityType quantityType,\r\n         out StorageType storageType, out HashSet<ForgeTypeId> dataTypes)\r\n      {\r\n         storageType = StorageType.None;\r\n         dataTypes = null;\r\n\r\n         PropertyType? propertyTypeEquivalent = null;\r\n\r\n         switch (quantityType)\r\n         {\r\n            case QuantityType.Area: propertyTypeEquivalent = PropertyType.Area; break;\r\n            case QuantityType.Count: propertyTypeEquivalent = PropertyType.Count; break;\r\n            case QuantityType.Length: propertyTypeEquivalent = PropertyType.Length; break;\r\n            case QuantityType.Mass: propertyTypeEquivalent = PropertyType.Mass; break;\r\n            case QuantityType.PositiveLength: propertyTypeEquivalent = PropertyType.PositiveLength; break;\r\n            case QuantityType.Real: propertyTypeEquivalent = PropertyType.Real; break;\r\n            case QuantityType.Time: propertyTypeEquivalent = PropertyType.Time; break;\r\n            case QuantityType.Volume: propertyTypeEquivalent = PropertyType.Volume; break;\r\n            case QuantityType.Weight: propertyTypeEquivalent = PropertyType.Mass; break;\r\n         }\r\n\r\n         if (!propertyTypeEquivalent.HasValue)\r\n            return false;\r\n\r\n         return GetRevitDataTypeFromIfcPropertyType(propertyTypeEquivalent.Value, out storageType, out dataTypes);\r\n      }\r\n\r\n      /// <summary>\r\n      /// The dictionary contains the ifc property type to Revit parameter storage and data types mappings\r\n      /// </summary>\r\n      private static readonly Dictionary<PropertyType, (StorageType storageType, HashSet<ForgeTypeId> dataTypes)> IfcPropertyTypeToRevitDataType = new()\r\n      {\r\n         { PropertyType.Boolean, (StorageType.Integer, [SpecTypeId.Boolean.YesNo]) },\r\n         { PropertyType.Logical, (StorageType.Integer, [SpecTypeId.Boolean.YesNo]) },\r\n\r\n         { PropertyType.Count, (StorageType.Integer, [SpecTypeId.Int.Integer, SpecTypeId.Int.NumberOfPoles]) },\r\n         { PropertyType.Integer, (StorageType.Integer, [SpecTypeId.Int.Integer, SpecTypeId.Int.NumberOfPoles]) },\r\n\r\n         { PropertyType.Acceleration, (StorageType.Double, [SpecTypeId.Acceleration]) },\r\n         { PropertyType.AirFlowDensity, (StorageType.Double, [SpecTypeId.AirFlowDensity]) },\r\n         { PropertyType.AirFlowDividedByCoolingLoad, (StorageType.Double, [SpecTypeId.AirFlowDividedByCoolingLoad]) },\r\n         { PropertyType.AirFlowDividedByVolume, (StorageType.Double, [SpecTypeId.AirFlowDividedByVolume]) },\r\n         { PropertyType.AngularVelocity, (StorageType.Double, [SpecTypeId.Pulsation]) },\r\n         { PropertyType.ApparentPowerDensity, (StorageType.Double, [SpecTypeId.ApparentPowerDensity]) },\r\n         { PropertyType.Area, (StorageType.Double, [SpecTypeId.Area, SpecTypeId.CrossSection, SpecTypeId.ReinforcementArea, SpecTypeId.SectionArea]) },\r\n         { PropertyType.AreaDensity, (StorageType.Double, [SpecTypeId.MassPerUnitArea]) },\r\n         { PropertyType.AreaDividedByCoolingLoad, (StorageType.Double, [SpecTypeId.AreaDividedByCoolingLoad]) },\r\n         { PropertyType.AreaDividedByHeatingLoad, (StorageType.Double, [SpecTypeId.AreaDividedByHeatingLoad]) },\r\n         { PropertyType.AreaSpringCoefficient, (StorageType.Double, [SpecTypeId.AreaSpringCoefficient]) },\r\n         { PropertyType.ColorTemperature, (StorageType.Double, [SpecTypeId.ColorTemperature]) },\r\n         { PropertyType.CoolingLoadDividedByArea, (StorageType.Double, [SpecTypeId.CoolingLoadDividedByArea]) },\r\n         { PropertyType.CoolingLoadDividedByVolume, (StorageType.Double, [SpecTypeId.CoolingLoadDividedByVolume]) },\r\n         { PropertyType.CostPerArea, (StorageType.Double, [SpecTypeId.CostPerArea]) },\r\n         { PropertyType.CostRateEnergy, (StorageType.Double, [SpecTypeId.CostRateEnergy]) },\r\n         { PropertyType.CostRatePower, (StorageType.Double, [SpecTypeId.CostRatePower]) },\r\n         { PropertyType.Currency, (StorageType.Double, [SpecTypeId.Currency]) },\r\n         { PropertyType.DynamicViscosity, (StorageType.Double, [SpecTypeId.HvacViscosity, SpecTypeId.PipingViscosity]) },\r\n         { PropertyType.ElectricalEfficacy, (StorageType.Double, [SpecTypeId.Efficacy]) },\r\n         { PropertyType.ElectricalPowerDensity, (StorageType.Double, [SpecTypeId.ElectricalPowerDensity]) },\r\n         { PropertyType.ElectricalResistivity, (StorageType.Double, [SpecTypeId.ElectricalResistivity]) },\r\n         { PropertyType.ElectricCurrent, (StorageType.Double, [SpecTypeId.Current]) },\r\n         { PropertyType.ElectricVoltage, (StorageType.Double, [SpecTypeId.ElectricalPotential]) },\r\n         { PropertyType.Energy, (StorageType.Double, [SpecTypeId.Energy, SpecTypeId.HvacEnergy]) },\r\n         { PropertyType.FlowPerPower, (StorageType.Double, [SpecTypeId.FlowPerPower]) },\r\n         { PropertyType.Force, (StorageType.Double, [SpecTypeId.Force, SpecTypeId.Weight]) },\r\n         { PropertyType.Frequency, (StorageType.Double, [SpecTypeId.ElectricalFrequency, SpecTypeId.StructuralFrequency]) },\r\n         { PropertyType.FrictionLoss, (StorageType.Double, [SpecTypeId.HvacFriction]) },\r\n         { PropertyType.HeatCapacityPerArea, (StorageType.Double, [SpecTypeId.HeatCapacityPerArea]) },\r\n         { PropertyType.HeatFluxDensity, (StorageType.Double, [SpecTypeId.HvacPowerDensity]) },\r\n         { PropertyType.HeatingLoadDividedByArea, (StorageType.Double, [SpecTypeId.HeatingLoadDividedByArea]) },\r\n         { PropertyType.HeatingLoadDividedByVolume, (StorageType.Double, [SpecTypeId.HeatingLoadDividedByVolume]) },\r\n         { PropertyType.HeatingValue, (StorageType.Double, [SpecTypeId.SpecificHeatOfVaporization]) },\r\n         { PropertyType.Illuminance, (StorageType.Double, [SpecTypeId.Illuminance]) },\r\n         { PropertyType.IonConcentration, (StorageType.Double, [SpecTypeId.PipingDensity]) },\r\n         { PropertyType.IsothermalMoistureCapacity, (StorageType.Double, [SpecTypeId.IsothermalMoistureCapacity]) },\r\n         { PropertyType.Length, (StorageType.Double, [SpecTypeId.BarDiameter, SpecTypeId.CrackWidth, SpecTypeId.Displacement,\r\n            SpecTypeId.Distance, SpecTypeId.CableTraySize, SpecTypeId.ConduitSize, SpecTypeId.Length, SpecTypeId.DuctInsulationThickness,\r\n            SpecTypeId.DuctLiningThickness, SpecTypeId.DuctSize, SpecTypeId.HvacRoughness, SpecTypeId.PipeDimension,\r\n            SpecTypeId.PipeInsulationThickness, SpecTypeId.PipeSize, SpecTypeId.PipingRoughness, SpecTypeId.ReinforcementCover,\r\n            SpecTypeId.ReinforcementLength, SpecTypeId.ReinforcementSpacing, SpecTypeId.SectionDimension, SpecTypeId.SectionProperty,\r\n            SpecTypeId.WireDiameter, SpecTypeId.SurfaceAreaPerUnitLength]) },\r\n         { PropertyType.LinearForce, (StorageType.Double, [SpecTypeId.LinearForce, SpecTypeId.WeightPerUnitLength]) },\r\n         { PropertyType.LinearMoment, (StorageType.Double, [SpecTypeId.LinearMoment]) },\r\n         { PropertyType.LinearStiffness, (StorageType.Double, [SpecTypeId.PointSpringCoefficient]) },\r\n         { PropertyType.LinearVelocity, (StorageType.Double, [SpecTypeId.HvacVelocity, SpecTypeId.PipingVelocity, SpecTypeId.StructuralVelocity, SpecTypeId.Speed]) },\r\n         { PropertyType.LineSpringCoefficient, (StorageType.Double, [SpecTypeId.LineSpringCoefficient]) },\r\n         { PropertyType.Luminance, (StorageType.Double, [SpecTypeId.Luminance]) },\r\n         { PropertyType.LuminousFlux, (StorageType.Double, [SpecTypeId.LuminousFlux]) },\r\n         { PropertyType.LuminousIntensity, (StorageType.Double, [SpecTypeId.LuminousIntensity]) },\r\n         { PropertyType.Mass, (StorageType.Double, [SpecTypeId.Mass, SpecTypeId.PipingMass]) },\r\n         { PropertyType.MassDensity, (StorageType.Double, [SpecTypeId.MassDensity, SpecTypeId.HvacDensity]) },\r\n         { PropertyType.MassFlowRate, (StorageType.Double, [SpecTypeId.PipingMassPerTime, SpecTypeId.HvacMassPerTime]) },\r\n         { PropertyType.MassPerLength, (StorageType.Double, [SpecTypeId.MassPerUnitLength, SpecTypeId.PipeMassPerUnitLength]) },\r\n         { PropertyType.MassPerUnitArea, (StorageType.Double, [SpecTypeId.MassPerUnitArea]) },\r\n         { PropertyType.ModulusOfElasticity, (StorageType.Double, [SpecTypeId.HvacPressure, SpecTypeId.PipingPressure, SpecTypeId.Stress]) },\r\n         { PropertyType.MoistureDiffusivity, (StorageType.Double, [SpecTypeId.Diffusivity]) },\r\n         { PropertyType.MomentOfInertia, (StorageType.Double, [SpecTypeId.MomentOfInertia]) },\r\n         { PropertyType.NormalisedRatio, (StorageType.Double, [SpecTypeId.Number]) },\r\n         { PropertyType.Numeric, (StorageType.Double, [SpecTypeId.Number]) },\r\n         { PropertyType.PipingFriction, (StorageType.Double, [SpecTypeId.PipingFriction]) },\r\n         { PropertyType.PlanarForce, (StorageType.Double, [SpecTypeId.AreaForce]) },\r\n         { PropertyType.PlaneAngle, (StorageType.Double, [SpecTypeId.Angle, SpecTypeId.Rotation, SpecTypeId.RotationAngle]) },\r\n         { PropertyType.PositiveLength, (StorageType.Double, [SpecTypeId.BarDiameter, SpecTypeId.CrackWidth, SpecTypeId.Displacement,\r\n            SpecTypeId.Distance, SpecTypeId.CableTraySize, SpecTypeId.ConduitSize, SpecTypeId.Length, SpecTypeId.DuctInsulationThickness,\r\n            SpecTypeId.DuctLiningThickness, SpecTypeId.DuctSize, SpecTypeId.HvacRoughness, SpecTypeId.PipeDimension,\r\n            SpecTypeId.PipeInsulationThickness, SpecTypeId.PipeSize, SpecTypeId.PipingRoughness, SpecTypeId.ReinforcementCover,\r\n            SpecTypeId.ReinforcementLength, SpecTypeId.ReinforcementSpacing, SpecTypeId.SectionDimension, SpecTypeId.SectionProperty,\r\n            SpecTypeId.WireDiameter, SpecTypeId.SurfaceAreaPerUnitLength]) },\r\n         { PropertyType.PositivePlaneAngle, (StorageType.Double, [SpecTypeId.Angle, SpecTypeId.Rotation, SpecTypeId.RotationAngle]) },\r\n         { PropertyType.PositiveRatio, (StorageType.Double, [SpecTypeId.Number]) },\r\n         { PropertyType.Power, (StorageType.Double, [SpecTypeId.ApparentPower, SpecTypeId.ElectricalPower, SpecTypeId.Wattage, SpecTypeId.CoolingLoad, SpecTypeId.HeatGain, SpecTypeId.HeatingLoad, SpecTypeId.HvacPower ]) },\r\n         { PropertyType.PowerPerFlow, (StorageType.Double, [SpecTypeId.PowerPerFlow]) },\r\n         { PropertyType.PowerPerLength, (StorageType.Double, [SpecTypeId.PowerPerLength]) },\r\n         { PropertyType.Pressure, (StorageType.Double, [SpecTypeId.HvacPressure, SpecTypeId.PipingPressure, SpecTypeId.Stress]) },\r\n         { PropertyType.Ratio, (StorageType.Double, [SpecTypeId.Number]) },\r\n         { PropertyType.Real, (StorageType.Double, [SpecTypeId.Number]) },\r\n         { PropertyType.ReinforcementAreaPerUnitLength, (StorageType.Double, [SpecTypeId.ReinforcementAreaPerUnitLength]) },\r\n         { PropertyType.RotationalFrequency, (StorageType.Double, [SpecTypeId.AngularSpeed]) },\r\n         { PropertyType.RotationalLineSpringCoefficient, (StorageType.Double, [SpecTypeId.RotationalLineSpringCoefficient]) },\r\n         { PropertyType.RotationalPointSpringCoefficient, (StorageType.Double, [SpecTypeId.RotationalPointSpringCoefficient]) },\r\n         { PropertyType.SoundPower, (StorageType.Double, [SpecTypeId.ApparentPower, SpecTypeId.ElectricalPower, SpecTypeId.Wattage, SpecTypeId.CoolingLoad]) },\r\n         { PropertyType.SoundPressure, (StorageType.Double, [SpecTypeId.HvacPressure, SpecTypeId.PipingPressure, SpecTypeId.Stress]) },\r\n         { PropertyType.SpecificHeatCapacity, (StorageType.Double, [SpecTypeId.SpecificHeat]) },\r\n         { PropertyType.ThermalConductivity, (StorageType.Double, [SpecTypeId.ThermalConductivity]) },\r\n         { PropertyType.ThermalExpansionCoefficient, (StorageType.Double, [SpecTypeId.ThermalExpansionCoefficient]) },\r\n         { PropertyType.ThermalGradientCoefficientForMoistureCapacity, (StorageType.Double, [SpecTypeId.ThermalGradientCoefficientForMoistureCapacity]) },\r\n         { PropertyType.ThermalMass, (StorageType.Double, [SpecTypeId.ThermalMass]) },\r\n         { PropertyType.ThermalResistance, (StorageType.Double, [SpecTypeId.ThermalResistance]) },\r\n         { PropertyType.ThermalTransmittance, (StorageType.Double, [SpecTypeId.HeatTransferCoefficient]) },\r\n         { PropertyType.ThermodynamicTemperature, (StorageType.Double, [SpecTypeId.ElectricalTemperature, SpecTypeId.HvacTemperature, SpecTypeId.PipingTemperature]) },\r\n         { PropertyType.Time, (StorageType.Double, [SpecTypeId.Time, SpecTypeId.Period]) },\r\n         { PropertyType.Torque, (StorageType.Double, [SpecTypeId.Moment]) },\r\n         { PropertyType.UnitWeight, (StorageType.Double, [SpecTypeId.UnitWeight]) },\r\n         { PropertyType.VaporPermeability, (StorageType.Double, [SpecTypeId.Permeability]) },\r\n         { PropertyType.Volume, (StorageType.Double, [SpecTypeId.PipingVolume, SpecTypeId.ReinforcementVolume, SpecTypeId.SectionModulus, SpecTypeId.Volume]) },\r\n         { PropertyType.VolumetricFlowRate, (StorageType.Double, [SpecTypeId.AirFlow, SpecTypeId.Flow]) },\r\n         { PropertyType.WarpingConstant, (StorageType.Double, [SpecTypeId.WarpingConstant]) },\r\n\r\n         { PropertyType.ClassificationReference, (StorageType.String, []) }, // empty DataTypes allow any data type of the specified StorageType\r\n         { PropertyType.Identifier, (StorageType.String, []) },\r\n         { PropertyType.Label, (StorageType.String, []) },\r\n         { PropertyType.Text, (StorageType.String, []) },\r\n         { PropertyType.URIReference, (StorageType.String, []) },\r\n      };\r\n\r\n\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/UnitUtil.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Export.Toolkit;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Utilities to work with ExporterCacheManager.UnitsCache.\r\n   /// </summary>\r\n   public class UnitUtil\r\n   {\r\n      /// <summary>\r\n      /// Returns the scaling factor for length from Revit internal units to IFC units.\r\n      /// </summary>\r\n      /// <returns>The scaling factors.</returns>\r\n      /// <remarks>This routine is intended to be used for API routines that expect a scale parameter.\r\n      /// For .NET routines, use ScaleLength() instead.</remarks>\r\n      static public double ScaleLengthForRevitAPI()\r\n      {\r\n         return ExporterCacheManager.UnitsCache.Scale(SpecTypeId.Length, 1.0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts a position in Revit internal units to IFC units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledUV\">The position in Revit internal units.</param>\r\n      /// <returns>The position in IFC units.</returns>\r\n      static public UV ScaleLength(UV unscaledUV)\r\n      {\r\n         return ExporterCacheManager.UnitsCache.Scale(SpecTypeId.Length, unscaledUV);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts a position in Revit internal units to IFC units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledXYZ\">The position in Revit internal units.</param>\r\n      /// <returns>The position in IFC units.</returns>\r\n      static public XYZ ScaleLength(XYZ unscaledXYZ)\r\n      {\r\n         return ExporterCacheManager.UnitsCache.Scale(SpecTypeId.Length, unscaledXYZ);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts an unscaled value in Revit internal units to IFC units, given the unit type.\r\n      /// </summary>\r\n      /// <param name=\"specTypeId\">Identifier of the spec.</param>\r\n      /// <param name=\"unscaledValue\">The value in Revit internal units.</param>\r\n      /// <returns>The value in IFC units.</returns>\r\n      static public double ScaleDouble(ForgeTypeId specTypeId, double unscaledValue)\r\n      {\r\n         return ExporterCacheManager.UnitsCache.Scale(specTypeId, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts a length in Revit internal units to IFC units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledLength\">The length in Revit internal units.</param>\r\n      /// <returns>The length in IFC units.</returns>\r\n      static public double ScaleLength(double unscaledLength)\r\n      {\r\n         return ScaleDouble(SpecTypeId.Length, unscaledLength);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts a force value in Revit internal units to IFC units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledForce\">The force value in Revit internal units.</param>\r\n      /// <returns>The force in IFC units.</returns>\r\n      static public double ScaleForce(double unscaledForce)\r\n      {\r\n         return ScaleDouble(SpecTypeId.Force, unscaledForce);\r\n      }\r\n\r\n      static public double ScaleLinearForce(double unscaledLinearForce)\r\n      {\r\n         return UnitUtils.ConvertFromInternalUnits(unscaledLinearForce, UnitTypeId.NewtonsPerMeter);\r\n      }\r\n\r\n      static public double ScalePlanarForce(double unscaledPlanarForce)\r\n      {\r\n         return UnitUtils.ConvertFromInternalUnits(unscaledPlanarForce, UnitTypeId.NewtonsPerSquareMeter);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts a thermal transmittance value in Revit internal units to IFC units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledThermalTransmittance\">The thermal transmittance value in Revit internal units.</param>\r\n      /// <returns>The thermal transmittance in IFC units.</returns>\r\n      static public double ScaleThermalTransmittance(double unscaledThermalTransmittance)\r\n      {\r\n         return ScaleDouble(SpecTypeId.HeatTransferCoefficient, unscaledThermalTransmittance);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts an area in Revit internal units to IFC units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledArea\">The area in Revit internal units.</param>\r\n      /// <returns>The area in IFC units.</returns>\r\n      static public double ScaleArea(double unscaledArea)\r\n      {\r\n         return ScaleDouble(SpecTypeId.Area, unscaledArea);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts a volume in Revit internal units to IFC units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledVolume\">The volume in Revit internal units.</param>\r\n      /// <returns>The volume in IFC units.</returns>\r\n      static public double ScaleVolume(double unscaledVolume)\r\n      {\r\n         return ScaleDouble(SpecTypeId.Volume, unscaledVolume);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts a VolumetricFlowRate in Revit internal units to IFC units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledVolumetricFlowRate\">The volumetric flow rate in Revit internal units.</param>\r\n      /// <returns>The volumetric flow rate in IFC units.</returns>\r\n      static public double ScaleVolumetricFlowRate(double unscaledVolumetricFlowRate)\r\n      {\r\n         return ScaleDouble(SpecTypeId.AirFlow, unscaledVolumetricFlowRate);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts a LuminousFlux in Revit internal units to IFC units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledLuminousFlux\">The luminous flux in Revit internal units.</param>\r\n      /// <returns>The luminous flux in IFC units.</returns>\r\n      static public double ScaleLuminousFlux(double unscaledLuminousFlux)\r\n      {\r\n         return ScaleDouble(SpecTypeId.LuminousFlux, unscaledLuminousFlux);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts a LuminousIntensity in Revit internal units to IFC units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledIntensityFlux\">The luminous intensity in Revit internal units.</param>\r\n      /// <returns>The luminous intensity in IFC units.</returns>\r\n      static public double ScaleLuminousIntensity(double unscaledLuminousIntensity)\r\n      {\r\n         return ScaleDouble(SpecTypeId.LuminousIntensity, unscaledLuminousIntensity);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts an angle in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledArea\">The angle in Revit internal units.</param>\r\n      /// <returns>The angle in Revit display units.</returns>\r\n      static public double ScaleAngle(double unscaledAngle)\r\n      {\r\n         return ScaleDouble(SpecTypeId.Angle, unscaledAngle);\r\n      }\r\n\r\n      // <summary>\r\n      /// Converts an electrical current in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledCurrent\">The electrical current in Revit internal units.</param>\r\n      /// <returns>The electrical current in Revit display units.</returns>\r\n      static public double ScaleElectricCurrent(double unscaledCurrent)\r\n      {\r\n         return ScaleDouble(SpecTypeId.Current, unscaledCurrent);\r\n      }\r\n\r\n      // <summary>\r\n      /// Converts an electrical illuminance in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledVoltage\">The elecrical illuminance in Revit internal units.</param>\r\n      /// <returns>The electrical illuminance in Revit display units.</returns>\r\n      static public double ScaleIlluminance(double unscaledIlluminance)\r\n      {\r\n         return ScaleDouble(SpecTypeId.Illuminance, unscaledIlluminance);\r\n      }\r\n\r\n      // <summary>\r\n      /// Converts an electrical voltage in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledVoltage\">The elecrical voltage in Revit internal units.</param>\r\n      /// <returns>The electrical current in Revit display units.</returns>\r\n      static public double ScaleElectricVoltage(double unscaledVoltage)\r\n      {\r\n         return ScaleDouble(SpecTypeId.ElectricalPotential, unscaledVoltage);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts thermodynamic temperature in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The thermodynamic temperature in Revit internal units.</param>\r\n      /// <returns>The thermodynamic temperature in Revit display units.</returns>\r\n      static public double ScaleThermodynamicTemperature(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.HvacTemperature, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts DynamicViscosity in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The DynamicViscosity in Revit internal units.</param>\r\n      /// <returns>The DynamicViscosity in Revit display units.</returns>\r\n      static public double ScaleDynamicViscosity(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.HvacViscosity, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts IsothermalMoistureCapacity in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The IsothermalMoistureCapacity in Revit internal units.</param>\r\n      /// <returns>The IsothermalMoistureCapacity in Revit display units.</returns>\r\n      static public double ScaleIsothermalMoistureCapacity(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.IsothermalMoistureCapacity, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts MassDensity in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The MassDensity in Revit internal units.</param>\r\n      /// <returns>The MassDensity in Revit display units.</returns>\r\n      static public double ScaleMassDensity(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.MassDensity, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts Mass in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The Mass in Revit internal units.</param>\r\n      /// <returns>The Mass in Revit display units.</returns>\r\n      static public double ScaleMass(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.Mass, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts LinearVelocity in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The LinearVelocity in Revit internal units.</param>\r\n      /// <returns>The LinearVelocity in Revit display units.</returns>\r\n      static public double ScaleLinearVelocity(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.HvacVelocity, unscaledValue);\r\n      }\r\n      \r\n      /// <summary>\r\n      /// Converts ModulusOfElasticity in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The ModulusOfElasticity in Revit internal units.</param>\r\n      /// <returns>The ModulusOfElasticity in Revit display units.</returns>\r\n      static public double ScaleModulusOfElasticity(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.Stress, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts VaporPermeability in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The VaporPermeability in Revit internal units.</param>\r\n      /// <returns>The VaporPermeability in Revit display units.</returns>\r\n      static public double ScaleVaporPermeability(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.Permeability, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts ThermalExpansionCoefficient in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The ThermalExpansionCoefficient in Revit internal units.</param>\r\n      /// <returns>The ThermalExpansionCoefficient in Revit display units.</returns>\r\n      static public double ScaleThermalExpansionCoefficient(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.ThermalExpansionCoefficient, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts Pressure in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The Pressure in Revit internal units.</param>\r\n      /// <returns>The Pressure in Revit display units.</returns>\r\n      static public double ScalePressure(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.HvacPressure, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts SpecificHeatCapacity in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The Pressure in Revit internal units.</param>\r\n      /// <returns>The Pressure in Revit display units.</returns>\r\n      static public double ScaleSpecificHeatCapacity(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.SpecificHeat, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts HeatingValue in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The HeatingValue in Revit internal units.</param>\r\n      /// <returns>The HeatingValue in Revit display units.</returns>\r\n      static public double ScaleHeatingValue(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.SpecificHeatOfVaporization, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts MoistureDiffusivity in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The MoistureDiffusivity in Revit internal units.</param>\r\n      /// <returns>The MoistureDiffusivity in Revit display units.</returns>\r\n      static public double ScaleMoistureDiffusivity(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.Diffusivity, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts IonConcentration in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The IonConcentration in Revit internal units.</param>\r\n      /// <returns>The IonConcentration in Revit display units.</returns>\r\n      static public double ScaleIonConcentration(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.PipingDensity, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts HeatFluxDensity in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The HeatFluxDensity in Revit internal units.</param>\r\n      /// <returns>The HeatFluxDensity in Revit display units.</returns>\r\n      static public double ScaleHeatFluxDensity(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.HvacPowerDensity, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts AreaDensity in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The AreaDensity in Revit internal units.</param>\r\n      /// <returns>The AreaDensity in Revit display units.</returns>\r\n      static public double ScaleAreaDensity(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.MassPerUnitArea, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts Time in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The Time in Revit internal units.</param>\r\n      /// <returns>The Time in Revit display units.</returns>\r\n      static public double ScaleTime(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.Time, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts MomentOfInertia in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The MomentOfInertia in Revit internal units.</param>\r\n      /// <returns>The MomentOfInertia in Revit display units.</returns>\r\n      static public double ScaleMomentOfInertia(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.MomentOfInertia, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts ThermalConductivity in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The ThermalConductivity in Revit internal units.</param>\r\n      /// <returns>The ThermalConductivity in Revit display units.</returns>\r\n      static public double ScaleThermalConductivity(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.ThermalConductivity, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts RotationalFrequency in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The RotationalFrequency in Revit internal units.</param>\r\n      /// <returns>The RotationalFrequency in Revit display units.</returns>\r\n      static public double ScaleRotationalFrequency(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.AngularSpeed, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts ScaleMassFlowRate in Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledValue\">The ScaleMassFlowRate in Revit internal units.</param>\r\n      /// <returns>The ScaleMassFlowRate in Revit display units.</returns>\r\n      static public double ScaleMassFlowRate(double unscaledValue)\r\n      {\r\n         return ScaleDouble(SpecTypeId.PipingMassPerTime, unscaledValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts a position in IFC units to Revit internal units.\r\n      /// </summary>\r\n      /// <param name=\"unscaledArea\">The position in IFC units.</param>\r\n      /// <returns>The position in Revit internal units.</returns>\r\n      static public XYZ UnscaleLength(XYZ scaledXYZ)\r\n      {\r\n         return ExporterCacheManager.UnitsCache.Unscale(SpecTypeId.Length, scaledXYZ);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts a position in IFC units to Revit internal units.\r\n      /// </summary>\r\n      /// <param name=\"scaledLength\">The length in IFC units.</param>\r\n      /// <returns>The length in Revit internal units.</returns>\r\n      static public double UnscaleLength(double scaledLength)\r\n      {\r\n         return ExporterCacheManager.UnitsCache.Unscale(SpecTypeId.Length, scaledLength);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts an area in IFC units to Revit internal units.\r\n      /// </summary>\r\n      /// <param name=\"scaledArea\">The area in IFC units.</param>\r\n      /// <returns>The area in Revit internal units.</returns>\r\n      static public double UnscaleArea(double scaledArea)\r\n      {\r\n         return ExporterCacheManager.UnitsCache.Unscale(SpecTypeId.Area, scaledArea);\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/UnitsCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Export.Exporter;\r\nusing Revit.IFC.Export.Toolkit;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// The class contains information about created and mapped unit.\r\n   /// </summary>\r\n   public class UnitInfo\r\n   {\r\n      public UnitInfo(IFCAnyHandle handle, double scaleFactor, double offset)\r\n      {\r\n         Handle = handle;\r\n         ScaleFactor = scaleFactor;\r\n         Offset = offset;\r\n      }\r\n\r\n      public IFCAnyHandle Handle { get; private set; } = null;\r\n      public double ScaleFactor { get; private set; } = 1.0;\r\n      public double Offset { get; private set; } = 0.0;\r\n   }\r\n\r\n\r\n   /// <summary>\r\n   /// Used to keep a cache of the created IfcUnits.\r\n   /// </summary>\r\n   public class UnitsCache : Dictionary<string, IFCAnyHandle>\r\n   {\r\n      /// <summary>\r\n      /// The dictionary mapping from Revit data type (SpecTypeId)\r\n      /// to created ifc unit handle with convesion values (scale and offset). \r\n      /// </summary>\r\n      Dictionary<ForgeTypeId, UnitInfo> m_unitInfoTable =\r\n          new Dictionary<ForgeTypeId, UnitInfo>();\r\n\r\n      /// <summary>\r\n      /// The dictionary mapping from Revit unit (UnitTypeId) to created ifc handle. \r\n      /// These are the auxiliary unit handles that don't go to IfcUnitAssignment\r\n      /// </summary>\r\n      Dictionary<ForgeTypeId, IFCAnyHandle> m_auxiliaryUnitCache = \r\n         new Dictionary<ForgeTypeId, IFCAnyHandle>();\r\n\r\n      /// <summary>\r\n      /// The dictionary mapping from a unit handle with exponent to IfcDerivedUnitElement handle. \r\n      /// </summary>\r\n      Dictionary<Tuple<IFCAnyHandle, int>, IFCAnyHandle> m_derivedUnitElementCache = \r\n         new Dictionary<Tuple<IFCAnyHandle, int>, IFCAnyHandle>();\r\n\r\n      /// <summary>\r\n      /// Finds UnitInfo in dictionary\r\n      /// </summary>\r\n      public bool FindUnitInfo(ForgeTypeId specTypeId, out UnitInfo unitInfo)\r\n      {\r\n         return m_unitInfoTable.TryGetValue(specTypeId, out unitInfo);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds UnitInfo to dictionary\r\n      /// </summary>\r\n      public void RegisterUnitInfo(ForgeTypeId specTypeId, UnitInfo unitInfo)\r\n      {\r\n         m_unitInfoTable[specTypeId] = unitInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Removes associated UnitInfo from dictionary\r\n      /// </summary>\r\n      public void UnregisterUnitInfo(ForgeTypeId specTypeId)\r\n      {\r\n         m_unitInfoTable.Remove(specTypeId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Extracts the unit handles to assign to a project \r\n      /// </summary>\r\n      /// <returns>Unit handles set</returns>\r\n      public HashSet<IFCAnyHandle> GetUnitsToAssign()\r\n      {\r\n         HashSet<IFCAnyHandle> unitSet = new HashSet<IFCAnyHandle>();\r\n         foreach (var unitInfo in m_unitInfoTable)\r\n         {\r\n            // Special case: SpecTypeId.ColorTemperature is mapped to SI IFCUnit.ThermoDynamicTemperatureUnit (Kelvin)\r\n            // and mustn't be assigned to project to avoid conflict with ThermoDynamicTemperatureUnit of SpecTypeId.HvacTemperature\r\n            if (unitInfo.Key.Equals(SpecTypeId.ColorTemperature))\r\n               continue;\r\n\r\n            IFCAnyHandle unitHnd = unitInfo.Value?.Handle;\r\n            if (unitHnd != null)\r\n               unitSet.Add(unitHnd);\r\n         }\r\n         return unitSet;\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Finds auxiliary unit in dictionary\r\n      /// </summary>\r\n      public bool FindAuxiliaryUnit(ForgeTypeId unitTypeId, out IFCAnyHandle auxiliaryUnit)\r\n      {\r\n         return m_auxiliaryUnitCache.TryGetValue(unitTypeId, out auxiliaryUnit);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds auxiliary unit to dictionary\r\n      /// </summary>\r\n      public void RegisterAuxiliaryUnit(ForgeTypeId unitTypeId, IFCAnyHandle auxiliaryUnit)\r\n      {\r\n         m_auxiliaryUnitCache[unitTypeId] = auxiliaryUnit;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds derived unit element in dictionary\r\n      /// </summary>\r\n      public bool FindDerivedUnitElement(Tuple<IFCAnyHandle, int> unitWithExponent, out IFCAnyHandle derivedUnit)\r\n      {\r\n         return m_derivedUnitElementCache.TryGetValue(unitWithExponent, out derivedUnit);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds derived unit element to dictionary\r\n      /// </summary>\r\n      public void RegisterDerivedUnit(Tuple<IFCAnyHandle, int> unitWithExponent, IFCAnyHandle derivedUnit)\r\n      {\r\n         m_derivedUnitElementCache[unitWithExponent] = derivedUnit;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds user defined unit in dictionary\r\n      /// </summary>\r\n      public IFCAnyHandle FindUserDefinedUnit(string unitName)\r\n      {\r\n         return this.ContainsKey(unitName) ? this[unitName] : null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds user defined unit to dictionary\r\n      /// </summary>\r\n      public void RegisterUserDefinedUnit(string unitName, IFCAnyHandle unitHnd)\r\n      {\r\n         this[unitName] = unitHnd;\r\n      }\r\n\r\n      public new void Clear()\r\n      {\r\n         m_unitInfoTable.Clear();\r\n         m_auxiliaryUnitCache.Clear();\r\n         m_derivedUnitElementCache.Clear();\r\n         base.Clear();\r\n      }\r\n\r\n      #region Scale/unscale methods\r\n      /// <summary>\r\n      /// Convert from Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"specTypeId\">Revit data type</param>\r\n      /// <param name=\"unscaledValue\">The value in Revit internal units.</param>\r\n      /// <returns>The value in Revit display units.</returns>\r\n      public double Scale(ForgeTypeId specTypeId, double unscaledValue)\r\n      {\r\n         UnitInfo unitInfo = UnitMappingUtil.GetOrCreateUnitInfo(specTypeId);\r\n         if (unitInfo != null)\r\n            return unscaledValue * unitInfo.ScaleFactor + unitInfo.Offset;\r\n         return unscaledValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Convert from Revit display units to Revit internal units.\r\n      /// </summary>\r\n      /// <param name=\"specTypeId\">Revit data type</param>\r\n      /// <param name=\"scaledValue\">The value in Revit display units.</param>\r\n      /// <returns>The value in Revit internal units.</returns>\r\n      /// <remarks>Ignores the offset component.</remarks>\r\n      public XYZ Unscale(ForgeTypeId specTypeId, XYZ scaledValue)\r\n      {\r\n         UnitInfo unitInfo = UnitMappingUtil.GetOrCreateUnitInfo(specTypeId);\r\n         if (unitInfo != null)\r\n            return scaledValue / unitInfo.ScaleFactor;\r\n         return scaledValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Convert from Revit display units to Revit internal units.\r\n      /// </summary>\r\n      /// <param name=\"specTypeId\">Revit data type</param>\r\n      /// <param name=\"scaledValue\">The value in Revit display units.</param>\r\n      /// <returns>The value in Revit internal units.</returns>\r\n      public double Unscale(ForgeTypeId specTypeId, double scaledValue)\r\n      {\r\n         UnitInfo unitInfo = UnitMappingUtil.GetOrCreateUnitInfo(specTypeId);\r\n         if (unitInfo != null)\r\n            return (scaledValue - unitInfo.Offset) / unitInfo.ScaleFactor;\r\n         return scaledValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Convert from Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"specTypeId\">Revit data type</param>\r\n      /// <param name=\"unscaledValue\">The value in Revit internal units.</param>\r\n      /// <returns>The value in Revit display units.</returns>\r\n      /// <remarks>Ignores the offset component.</remarks>\r\n      public UV Scale(ForgeTypeId specTypeId, UV unscaledValue)\r\n      {\r\n         UnitInfo unitInfo = UnitMappingUtil.GetOrCreateUnitInfo(specTypeId);\r\n         if (unitInfo != null)\r\n            return unscaledValue * unitInfo.ScaleFactor;\r\n         return unscaledValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Convert from Revit internal units to Revit display units.\r\n      /// </summary>\r\n      /// <param name=\"specTypeId\">Revit data type</param>\r\n      /// <param name=\"unscaledValue\">The value in Revit internal units.</param>\r\n      /// <returns>The value in Revit display units.</returns>\r\n      /// <remarks>Ignores the offset component.</remarks>\r\n      public XYZ Scale(ForgeTypeId specTypeId, XYZ unscaledValue)\r\n      {\r\n         UnitInfo unitInfo = UnitMappingUtil.GetOrCreateUnitInfo(specTypeId);\r\n         if (unitInfo != null)\r\n            return unscaledValue * unitInfo.ScaleFactor;\r\n         return unscaledValue;\r\n      }\r\n      #endregion\r\n   }\r\n\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/WallConnectionDataCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Revit.IFC.Export.Exporter;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of the wall connection information.\r\n   /// </summary>\r\n   public class WallConnectionDataCache : HashSet<WallConnectionData>\r\n   {\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/WallCrossSectionCache.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2020  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing Autodesk.Revit.DB;\nusing Revit.IFC.Common.Utility;\n\nnamespace Revit.IFC.Export.Utility\n{\n   /// <summary>\n   /// Holds the wall cross section type and angles for a specific Wall element.\n   /// </summary>\n   public class WallCrossSectionInfo\n   {\n      private WallCrossSectionInfo(WallCrossSection wallCrossSection, double? angle1, double? angle2)\n      {\n         CrossSectionInfo = Tuple.Create(wallCrossSection, angle1, angle2);\n      }\n\n      /// <summary>\n      /// Create the cross section type and angle information for a specified Wall element.\n      /// </summary>\n      /// <param name=\"wallElement\">The wall element.</param>\n      /// <returns>The WallCrossSectionInfo information, or null if not consistent.</returns>\n      /// <remarks>\n      /// The angles returned will be consistent with the cross section type.\n      /// 1. A vertical wall will have no angles set.\n      /// 2. A slanted wall will have one angle set, or will return null if that angle can't be found.\n      /// 3. A tapered wall will have both angles set, or will return null if either angle can't be found.\n      /// </remarks>\n      public static WallCrossSectionInfo Create(Wall wallElement)\n      {\n         if (wallElement == null)\n            return null;\n\n         Parameter crossSectionParam = wallElement.get_Parameter(BuiltInParameter.WALL_CROSS_SECTION);\n         if (crossSectionParam == null || !crossSectionParam.HasValue || crossSectionParam.StorageType != StorageType.Integer)\n            return null;\n\n         WallCrossSection crossSectionType = (WallCrossSection)crossSectionParam.AsInteger();\n         double? angle1 = null;\n         double? angle2 = null;\n\n         switch (crossSectionType)\n         {\n            case WallCrossSection.Vertical:        // Vertical.\n               break;\n            case WallCrossSection.SingleSlanted:   // Slanted.\n               Parameter angleParam = wallElement.get_Parameter(BuiltInParameter.WALL_SINGLE_SLANT_ANGLE_FROM_VERTICAL);\n               if (angleParam != null && angleParam.HasValue && angleParam.StorageType == StorageType.Double)\n                  angle1 = angleParam.AsDouble();\n               else\n                  return null;\n               break;\n            case WallCrossSection.Tapered:   // Vertically tapered.\n               Parameter exteriorAngleParam = wallElement.get_Parameter(BuiltInParameter.WALL_TAPERED_EXTERIOR_INWARD_ANGLE);\n               Parameter rightAngleParam = wallElement.get_Parameter(BuiltInParameter.WALL_TAPERED_INTERIOR_INWARD_ANGLE);\n\n               // The two angles measure the inward slant.  That is, they are positive if the \n               // corresponding side face of the wall slants \"into the wall\" (i.e., toward the \n               // other side of the wall).\n               if ((exteriorAngleParam != null && exteriorAngleParam.HasValue && exteriorAngleParam.StorageType == StorageType.Double) &&\n                   (rightAngleParam != null && rightAngleParam.HasValue && rightAngleParam.StorageType == StorageType.Double))\n               {\n                  angle1 = exteriorAngleParam.AsDouble();\n                  angle2 = rightAngleParam.AsDouble();\n               }\n               else\n                  return null;\n               break;\n            default:\n               // Unknown case.\n               return null;\n         }\n\n         return new WallCrossSectionInfo(crossSectionType, angle1, angle2);\n      }\n\n      /// <summary>\n      /// The cross section type.\n      /// </summary>\n      public WallCrossSection CrossSection \n      {\n         get { return CrossSectionInfo.Item1; }\n      }\n\n      /// <summary>\n      /// The first angle associated with the cross section type, if any.\n      /// </summary>\n      public double? FirstAngle\n      {\n         get { return CrossSectionInfo.Item2; }\n      }\n      /// <summary>\n      /// The second angle associated with the cross section type, if any.\n      /// </summary>\n      public double? SecondAngle\n      {\n         get { return CrossSectionInfo.Item3; }\n      }\n\n      /// <summary>\n      /// The vertical slant offset of the wall, if it exists.\n      /// </summary>\n      public double? GetUniformSlantAngle()\n      {\n         switch (CrossSection)\n         {\n            case WallCrossSection.Vertical:\n               return 0;\n            case WallCrossSection.SingleSlanted:\n               return FirstAngle;\n            case WallCrossSection.Tapered:\n               // We could return a uniform slant angle here if we also took\n               // into account that the width of a tapered wall is measured\n               // differently than the width of a slanted wall.  For now,\n               // ignore this case.\n               return null;\n         }\n\n         return null;\n      }\n\n      private Tuple<WallCrossSection, double?, double?> CrossSectionInfo { get; set; }\n   }\n\n   /// <summary>\n   /// Used to keep a cache of the wall cross section information.\n   /// </summary>\n   public class WallCrossSectionCache\n   {\n      /// <summary>\n      /// Default constructor.\n      /// </summary>\n      public WallCrossSectionCache() { }\n\n      /// <summary>\n      /// Get the cross section information for a particular wall.\n      /// Will create the information if it doesn't exist.\n      /// </summary>\n      /// <param name=\"wallElement\">The wall element.</param>\n      /// <returns>\n      /// The cross section information for a particular wall, or null if invalid.\n      /// </returns>\n      public WallCrossSectionInfo GetCrossSectionInfo(Wall wallElement)\n      {\n         if (wallElement == null)\n            return null;\n\n         WallCrossSectionInfo crossSectionInfo = null;\n         ElementId wallId = wallElement.Id;\n         if (!CrossSectionCache.TryGetValue(wallId, out crossSectionInfo))\n         {\n            crossSectionInfo = WallCrossSectionInfo.Create(wallElement);\n            CrossSectionCache[wallId] = crossSectionInfo;\n         }\n         return crossSectionInfo;\n      }\n\n      /// <summary>\n      /// The vertical slant offset of the wall, if it exists. \n      /// </summary>\n      /// <param name=\"wallElement\">The wall element.</param>\n      /// <returns>The one angle, if it exists, or null otherwise.</returns>\n      public double? GetUniformSlantAngle(Wall wallElement)\n      {\n         WallCrossSectionInfo crossSectionInfo = GetCrossSectionInfo(wallElement);\n         if (crossSectionInfo == null)\n            return null;\n\n         return crossSectionInfo.GetUniformSlantAngle();\n      }\n\n      /// <summary>\n      /// Clears the cache.\n      /// </summary>\n      public void Clear()\n      {\n         CrossSectionCache.Clear();\n      }\n\n      private IDictionary<ElementId, WallCrossSectionInfo> CrossSectionCache { get; set; } =\n         new Dictionary<ElementId, WallCrossSectionInfo>();\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Export/Utility/ZoneInfoCache.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2012  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Revit.IFC.Export.Exporter;\r\n\r\nnamespace Revit.IFC.Export.Utility\r\n{\r\n   /// <summary>\r\n   /// Used to keep a cache of information to create zones.\r\n   /// </summary>\r\n   public class ZoneInfoCache : Dictionary<string, ZoneInfo>\r\n   {\r\n      /// <summary>\r\n      /// Adds the ZoneInfo to the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"name\">\r\n      /// The name of the zone.\r\n      /// </param>\r\n      /// <param name=\"zoneInfo\">\r\n      /// The ZoneInfo object.\r\n      /// </param>\r\n      public void Register(string name, ZoneInfo zoneInfo)\r\n      {\r\n         this[name] = zoneInfo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds the ZoneInfo from the dictionary.\r\n      /// </summary>\r\n      /// <param name=\"name\">\r\n      /// The name of the zone.\r\n      /// </param>\r\n      /// <returns>\r\n      /// The ZoneInfo object.\r\n      /// </returns>\r\n      public ZoneInfo Find(string name)\r\n      {\r\n         ZoneInfo zoneInfo;\r\n\r\n         if (TryGetValue(name, out zoneInfo))\r\n            return zoneInfo;\r\n\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCAddress.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Import.Utility;\n\nnamespace Revit.IFC.Import.Data\n{\n   /// <summary>\n   /// Class for storing IfcAddress\n   /// </summary>\n   public class IFCAddress : IFCEntity\n   {\n      /// <summary>\n      /// The optional logical location of the address.\n      /// </summary>\n      public string Purpose { get; set; } = null;\n\n      /// <summary>\n      /// The optional description of the address.\n      /// </summary>\n      public string Description { get; set; } = null;\n\n      /// <summary>\n      /// The optional user specific purpose of the address.\n      /// </summary>\n      public string UserDefinedPurpose { get; set; } = null;\n\n      protected IFCAddress()\n      {\n      }\n\n      protected IFCAddress(IFCAnyHandle ifcAddress)\n      {\n         Process(ifcAddress);\n      }\n\n      protected override void Process(IFCAnyHandle ifcAddress)\n      {\n         base.Process(ifcAddress);\n\n         Description = IFCImportHandleUtil.GetOptionalStringAttribute(ifcAddress, \"Description\", null);\n         UserDefinedPurpose = IFCImportHandleUtil.GetOptionalStringAttribute(ifcAddress, \"UserDefinedPurpose\", null);\n         Purpose = IFCAnyHandleUtil.GetEnumerationAttribute(ifcAddress, \"Purpose\");\n      }\n\n      /// <summary>\n      /// Create an IFCAddress object from a handle of type IfcAddress.\n      /// </summary>\n      /// <param name=\"ifcAddress\">The IFC handle.</param>\n      /// <returns>The IFCAddress object.</returns>\n      public static IFCAddress ProcessIFCAddress(IFCAnyHandle ifcAddress)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcAddress))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcAddress);\n            return null;\n         }\n\n         IFCEntity address;\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcAddress.StepId, out address))\n            address = new IFCAddress(ifcAddress);\n         return (address as IFCAddress);\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCAdvancedBrep.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCAdvancedBrep entity\r\n   /// </summary>\r\n   public class IFCAdvancedBrep : IFCManifoldSolidBrep\r\n   {\r\n      protected IFCAdvancedBrep()\r\n      {\r\n      }\r\n\r\n      protected IFCAdvancedBrep(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcAdvancedBrep)\r\n      {\r\n         base.Process(ifcAdvancedBrep);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid)\r\n      {\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The shape edit scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      /// <returns>The created geometry.</returns>\r\n      protected override IList<GeometryObject> CreateGeometryInternal(\r\n         IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid)\r\n      {\r\n         // since IFCAdvancedBrep must contain a closed shell, we set the BuildPreferenceType to be solid for now\r\n         for (int pass = 0; pass < 2; pass++)\r\n         {\r\n            using (BuilderScope bs = shapeEditScope.InitializeBuilder(IFCShapeBuilderType.BrepBuilder))\r\n            {\r\n               BrepBuilderScope brepBuilderScope = bs as BrepBuilderScope;\r\n\r\n               BRepType brepType = (pass == 0) ? BRepType.Solid : BRepType.OpenShell;\r\n               brepBuilderScope.StartCollectingFaceSet(brepType);\r\n\r\n               Outer.AllowInvalidFace = (pass == 0);\r\n               Outer.CreateShape(shapeEditScope, scaledLcs, guid);\r\n\r\n               IList<GeometryObject> geomObjs = null;\r\n               geomObjs = brepBuilderScope.CreateGeometry();\r\n\r\n               // We'll return only if we have geometry; otherwise we'll try again with looser validation, if we can.\r\n               if (geomObjs != null)\r\n               {\r\n                  if (pass == 1)\r\n                     Importer.TheLog.LogError(Id, \"Some faces are missing from this Solid; reading in as an Open Shell instead.\", false);\r\n                  return geomObjs;\r\n               }\r\n            }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Create an IFCAdvancedBrep object from a handle of type IfcAdvancedBrep.\r\n      /// </summary>\r\n      /// <param name=\"ifcAdvancedBrep\">The IFC handle.</param>\r\n      /// <returns>The IFCAdvancedBrep object.</returns>\r\n      public static IFCAdvancedBrep ProcessIFCAdvancedBrep(IFCAnyHandle ifcAdvancedBrep)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcAdvancedBrep))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcAdvancedBrep);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity advancedBrep;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcAdvancedBrep.StepId, out advancedBrep))\r\n            advancedBrep = new IFCAdvancedBrep(ifcAdvancedBrep);\r\n         return (advancedBrep as IFCAdvancedBrep);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCAdvancedFace.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IfcAdvancedFace entity\r\n   /// </summary>\r\n   public class IFCAdvancedFace : IFCFaceSurface\r\n   {\r\n      protected IFCAdvancedFace()\r\n      {\r\n      }\r\n\r\n      protected IFCAdvancedFace(IFCAnyHandle ifcAdvancedFace)\r\n      {\r\n         Process(ifcAdvancedFace);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcAdvancedFace)\r\n      {\r\n         base.Process(ifcAdvancedFace);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid)\r\n      {\r\n         if (shapeEditScope.BuilderType == IFCShapeBuilderType.TessellatedShapeBuilder)\r\n         {\r\n            if (FaceSurface is IFCPlane)\r\n            {\r\n               // This is a backup attempt, potentially reset IsValidForCreation flag.\r\n               IsValidForCreation = true;\r\n               base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n               return;\r\n            }\r\n         }\r\n\r\n         if (shapeEditScope.BuilderType != IFCShapeBuilderType.BrepBuilder)\r\n         {\r\n            Importer.TheLog.LogError(Id, \"Couldn't process face, ignoring.\", false);\r\n            IsValidForCreation = false;\r\n            return;\r\n         }\r\n\r\n         // We may revisit this face on a second pass, after a first attempt to create a Solid failed.  Ignore this face.\r\n         if (!IsValidForCreation)\r\n            return;\r\n\r\n         Transform localTransform = scaledLcs ?? Transform.Identity;\r\n\r\n         BrepBuilderScope brepBuilderScope = shapeEditScope.BuilderScope as BrepBuilderScope;\r\n\r\n         brepBuilderScope.StartCollectingFace(FaceSurface, localTransform, SameSense, GetMaterialElementId(shapeEditScope));\r\n\r\n         foreach (IFCFaceBound faceBound in Bounds)\r\n         {\r\n            try\r\n            {\r\n               brepBuilderScope.InitializeNewLoop();\r\n\r\n               faceBound.CreateShape(shapeEditScope, scaledLcs, guid);\r\n               IsValidForCreation = faceBound.IsValidForCreation || (!brepBuilderScope.HaveActiveFace());\r\n\r\n               brepBuilderScope.StopConstructingLoop(IsValidForCreation);\r\n\r\n               if (!IsValidForCreation)\r\n                  break;\r\n            }\r\n            catch\r\n            {\r\n               IsValidForCreation = false;\r\n               break;\r\n            }\r\n         }\r\n\r\n         brepBuilderScope.StopCollectingFace(IsValidForCreation);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCAdvancedFace object from a handle of type IfcAdvancedFace.\r\n      /// </summary>\r\n      /// <param name=\"ifcAdvancedFace\">The IFC handle.</param>\r\n      /// <returns>The IFCAdvancedFace object.</returns>\r\n      public static IFCAdvancedFace ProcessIFCAdvancedFace(IFCAnyHandle ifcAdvancedFace)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcAdvancedFace))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcAdvancedFace);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity face;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcAdvancedFace.StepId, out face))\r\n            face = new IFCAdvancedFace(ifcAdvancedFace);\r\n         return (face as IFCAdvancedFace);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCAnnotation.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Import.Geometry;\nusing Revit.IFC.Import.Utility;\n\nnamespace Revit.IFC.Import.Data\n{\n   /// <summary>\n   /// An annotation is an information element within the geometric (and spatial) context of a project,\n   /// that adds a note or meaning to the objects which constitutes the project model\n   /// </summary>\n   public class IFCAnnotation : IFCProduct\n   {\n      /// <summary>\n      /// Default Constructor.\n      /// </summary>\n      protected IFCAnnotation()\n      {\n      }\n\n\n      /// <summary>\n      /// Constructs an IFCAnnotation Object.\n      /// </summary>\n      /// <param name=\"ifcAnnotation\">Handle to use for Annotation during construction.</param>\n      protected IFCAnnotation(IFCAnyHandle ifcAnnotation)\n      {\n         Process(ifcAnnotation);\n      }\n\n\n      /// <summary>\n      /// Process attributes of IFCAnnotation.\n      /// </summary>\n      /// <param name=\"ifcAnnotation\"></param>\n      protected override void Process (IFCAnyHandle ifcAnnotation)\n      {\n         base.Process(ifcAnnotation);\n      }\n\n\n      /// <summary>\n      /// Process IFCAnnotation object.\n      /// </summary>\n      /// <param name=\"ifcAnnotation\">Handle representing IFC Object.</param>\n      /// <returns></returns>\n      public static IFCAnnotation ProcessIFCAnnotation (IFCAnyHandle ifcAnnotation)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcAnnotation))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcAnnotation);\n            return null;\n         }\n\n         try\n         {\n            IFCEntity cachedAnnotation;\n            if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcAnnotation.StepId, out cachedAnnotation))\n               return (cachedAnnotation as IFCAnnotation);\n\n            return new IFCAnnotation(ifcAnnotation);\n         }\n         catch (Exception ex)\n         {\n            HandleError(ex.Message, ifcAnnotation, true);\n            return null;\n         }\n      }\n   }\n}\n\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCApplication.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class for storing IfcApplication\r\n   /// </summary>\r\n   public class IFCApplication : IFCEntity\r\n   {\r\n      string m_ApplicationDeveloper = null;\r\n      string m_Version = null;\r\n      string m_ApplicationFullName = null;\r\n      string m_ApplicationIdentifier = null;\r\n\r\n      public string ApplicationDeveloper\r\n      {\r\n         get { return m_ApplicationDeveloper; }\r\n         set { m_ApplicationDeveloper = value; }\r\n      }\r\n\r\n      public string Version\r\n      {\r\n         get { return m_Version; }\r\n         set { m_Version = value; }\r\n      }\r\n\r\n      public string ApplicationFullName\r\n      {\r\n         get { return m_ApplicationFullName; }\r\n         set { m_ApplicationFullName = value; }\r\n      }\r\n\r\n      public string ApplicationIdentifier\r\n      {\r\n         get { return m_ApplicationIdentifier; }\r\n         set { m_ApplicationIdentifier = value; }\r\n      }\r\n\r\n      protected IFCApplication()\r\n      {\r\n      }\r\n\r\n      protected IFCApplication(IFCAnyHandle ifcApplication)\r\n      {\r\n         Process(ifcApplication);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcApplication)\r\n      {\r\n         base.Process(ifcApplication);\r\n\r\n         ApplicationDeveloper = IFCAnyHandleUtil.GetStringAttribute(ifcApplication, \"ApplicationDeveloper\");\r\n         Version = IFCAnyHandleUtil.GetStringAttribute(ifcApplication, \"Version\");\r\n         ApplicationFullName = IFCAnyHandleUtil.GetStringAttribute(ifcApplication, \"ApplicationFullName\");\r\n         ApplicationIdentifier = IFCAnyHandleUtil.GetStringAttribute(ifcApplication, \"ApplicationIdentifier\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCApplication object from a handle of type IfcApplication.\r\n      /// </summary>\r\n      /// <param name=\"ifcApplication\">The IFC handle.</param>\r\n      /// <returns>The IFCApplication object.</returns>\r\n      public static IFCApplication ProcessIFCApplication(IFCAnyHandle ifcApplication)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcApplication))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcApplication);\r\n            return null;\r\n         }\r\n\r\n\r\n         IFCEntity application;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcApplication.StepId, out application))\r\n            application = new IFCApplication(ifcApplication);\r\n         return (application as IFCApplication);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCBSplineCurve.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCBSplineCurve entity\r\n   /// </summary>\r\n   public abstract class IFCBSplineCurve : IFCBoundedCurve\r\n   {\r\n      private int m_Degree;\r\n      private IList<XYZ> m_ControlPointsList;\r\n      private bool? m_ClosedCurve;\r\n\r\n      /// <summary>\r\n      /// Indication of whether the curve is closed; it is for information only.\r\n      /// </summary>\r\n      public bool? ClosedCurve\r\n      {\r\n         get { return m_ClosedCurve; }\r\n         protected set { m_ClosedCurve = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The algebraic degree of the basis functions.\r\n      /// </summary>\r\n      public int Degree\r\n      {\r\n         get { return m_Degree; }\r\n         protected set\r\n         {\r\n            if (value <= 0)\r\n            {\r\n               throw new InvalidOperationException(\"Invalid degree\");\r\n            }\r\n            else\r\n            {\r\n               m_Degree = value;\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The list of control points for the curve.\r\n      /// </summary>\r\n      public IList<XYZ> ControlPointsList\r\n      {\r\n         get { return m_ControlPointsList; }\r\n         protected set\r\n         {\r\n            if (value == null || value.Count() <= 1)\r\n            {\r\n               throw new InvalidOperationException(\"Invalid list of control points\");\r\n            }\r\n            else\r\n            {\r\n               m_ControlPointsList = value;\r\n            }\r\n         }\r\n      }\r\n\r\n      protected IFCBSplineCurve()\r\n      {\r\n      }\r\n\r\n      protected IFCBSplineCurve(IFCAnyHandle bSplineCurve)\r\n      {\r\n         Process(bSplineCurve);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcCurve)\r\n      {\r\n         base.Process(ifcCurve);\r\n\r\n         bool foundDegree = false;\r\n         Degree = IFCImportHandleUtil.GetRequiredIntegerAttribute(ifcCurve, \"Degree\", out foundDegree);\r\n         if (!foundDegree)\r\n         {\r\n            Importer.TheLog.LogError(ifcCurve.StepId, \"Cannot find the degree of this curve\", true);\r\n         }\r\n\r\n         IList<IFCAnyHandle> controlPoints = IFCAnyHandleUtil.GetValidAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcCurve, \"ControlPointsList\");\r\n\r\n         if (controlPoints == null || controlPoints.Count == 0)\r\n         {\r\n            Importer.TheLog.LogError(ifcCurve.StepId, \"This curve has invalid number of control points\", true);\r\n         }\r\n\r\n         IList<XYZ> controlPointLists = new List<XYZ>();\r\n         foreach (IFCAnyHandle point in controlPoints)\r\n         {\r\n            XYZ pointXYZ = IFCPoint.ProcessScaledLengthIFCCartesianPoint(point);\r\n            controlPointLists.Add(pointXYZ);\r\n         }\r\n         ControlPointsList = controlPointLists;\r\n\r\n         bool foundClosedCurve = false;\r\n         IFCLogical closedCurve = IFCImportHandleUtil.GetOptionalLogicalAttribute(ifcCurve, \"ClosedCurve\", out foundClosedCurve);\r\n         if (!foundClosedCurve)\r\n         {\r\n            Importer.TheLog.LogWarning(ifcCurve.StepId, \"Cannot find the ClosedCurve property of this curve, ignoring\", false);\r\n            ClosedCurve = null;\r\n         }\r\n         else\r\n         {\r\n            ClosedCurve = (closedCurve == IFCLogical.True);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCBSplineCurve object from the handle of type IfcBSplineCurve\r\n      /// </summary>\r\n      /// <param name=\"ifcBSplineCurve\">The IFC handle</param>\r\n      /// <returns>The IFCBSplineCurve object</returns>\r\n      public static IFCBSplineCurve ProcessIFCBSplineCurve(IFCAnyHandle ifcBSplineCurve)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcBSplineCurve))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcBSplineCurve);\r\n            return null;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcBSplineCurve, IFCEntityType.IfcBSplineCurveWithKnots))\r\n            return IFCBSplineCurveWithKnots.ProcessIFCBSplineCurveWithKnots(ifcBSplineCurve);\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcBSplineCurve, IFCEntityType.IfcBSplineCurve, true);\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCBSplineCurveWithKnots.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCBSplineCurveWithKnots entity\r\n   /// </summary>\r\n   public class IFCBSplineCurveWithKnots : IFCBSplineCurve\r\n   {\r\n\r\n      private IList<int> m_KnotMultiplicities;\r\n\r\n      /// <summary>\r\n      /// The multiplicities of the knots. This list defines the number of times each knot in the knots list is to be repeated in constructing the knot array\r\n      /// </summary>\r\n      public IList<int> KnotMultiplicities\r\n      {\r\n         get { return m_KnotMultiplicities; }\r\n         set { m_KnotMultiplicities = value; }\r\n      }\r\n\r\n      private IList<double> m_Knots;\r\n\r\n      /// <summary>\r\n      /// The list of distinct knots used to define the B-spline basis functions.\r\n      /// </summary>\r\n      public IList<double> Knots\r\n      {\r\n         get { return m_Knots; }\r\n         set { m_Knots = value; }\r\n      }\r\n\r\n      protected IFCBSplineCurveWithKnots()\r\n      {\r\n      }\r\n\r\n      protected IFCBSplineCurveWithKnots(IFCAnyHandle bSplineCurve)\r\n      {\r\n         Process(bSplineCurve);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcCurve)\r\n      {\r\n         base.Process(ifcCurve);\r\n         KnotMultiplicities = IFCAnyHandleUtil.GetAggregateIntAttribute<List<int>>(ifcCurve, \"KnotMultiplicities\");\r\n         Knots = IFCAnyHandleUtil.GetAggregateDoubleAttribute<List<double>>(ifcCurve, \"Knots\");\r\n\r\n         if (KnotMultiplicities == null || Knots == null)\r\n         {\r\n            Importer.TheLog.LogError(ifcCurve.StepId, \"Cannot find the KnotMultiplicities or Knots attribute of this IfcBSplineCurveWithKnots\", true);\r\n         }\r\n\r\n         if (KnotMultiplicities.Count != Knots.Count)\r\n         {\r\n            Importer.TheLog.LogError(ifcCurve.StepId, \"The number of knots and knot multiplicities are not the same\", true);\r\n         }\r\n\r\n         IList<double> revitKnots = IFCGeometryUtil.ConvertIFCKnotsToRevitKnots(KnotMultiplicities, Knots);\r\n\r\n         Curve nurbsSpline = null;\r\n         string msg = string.Empty;\r\n         try\r\n         {\r\n            nurbsSpline = NurbSpline.CreateCurve(Degree, revitKnots, ControlPointsList);\r\n            SetCurve(nurbsSpline);\r\n         }\r\n         catch (Autodesk.Revit.Exceptions.ArgumentException ex)\r\n         {\r\n            nurbsSpline = null;\r\n            msg = \": \" + ex.Message;\r\n         }\r\n\r\n         if (nurbsSpline == null)\r\n         {\r\n            Importer.TheLog.LogWarning(ifcCurve.StepId, \"Cannot get the curve representation of this IfcCurve\" + msg, false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCBSplineCurveWithKnots from a handle of type IfcBSplineCurveWithKnots\r\n      /// </summary>\r\n      /// <param name=\"ifcBSplineCurve\">The handle</param>\r\n      /// <returns>The IFCBSplineCurveWithKnots object</returns>\r\n      public static IFCBSplineCurveWithKnots ProcessIFCBSplineCurveWithKnots(IFCAnyHandle ifcBSplineCurve)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcBSplineCurve))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcBSplineCurveWithKnots);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity bSplineCurve = null;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcBSplineCurve.StepId, out bSplineCurve))\r\n            bSplineCurve = new IFCBSplineCurveWithKnots(ifcBSplineCurve);\r\n\r\n         return (bSplineCurve as IFCBSplineCurveWithKnots);\r\n      }\r\n\r\n      protected bool constraintsParamBSpline()\r\n      {\r\n         // TODO: implement this function to validate NURBS data\r\n         //       implementation can be found here http://www.buildingsmart-tech.org/ifc/IFC4/final/html/schema/ifcgeometryresource/lexical/ifcconstraintsparambspline.htm\r\n         //       move this function to the correct place\r\n         return true;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCBSplineSurface.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCBSplineSurface entity.\r\n   /// </summary>\r\n   public abstract class IFCBSplineSurface : IFCSurface\r\n   {\r\n      private int m_UDegree;\r\n\r\n      /// <summary>\r\n      /// The u-degree of this surface.\r\n      /// </summary>\r\n      public int UDegree\r\n      {\r\n         get { return m_UDegree; }\r\n         protected set\r\n         {\r\n            if (value <= 0)\r\n            {\r\n               Importer.TheLog.LogError(Id, \"This surface's u-degree is \" + value + \" which is invalid\", true);\r\n            }\r\n            m_UDegree = value;\r\n         }\r\n      }\r\n\r\n      private int m_VDegree;\r\n\r\n      /// <summary>\r\n      /// The v-degree of this surface.\r\n      /// </summary>\r\n      public int VDegree\r\n      {\r\n         get { return m_VDegree; }\r\n         protected set\r\n         {\r\n            if (value <= 0)\r\n            {\r\n               Importer.TheLog.LogError(Id, \"This surface's v-degree is \" + value + \" which is invalid\", true);\r\n            }\r\n            m_VDegree = value;\r\n         }\r\n      }\r\n\r\n      private IList<XYZ> m_ControlPointsList;\r\n\r\n      /// <summary>\r\n      /// The list of control points\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// Based on IFC 4 specification, the control points are represented by a list of lists, with each list being one \r\n      /// row of u-values. We convert it to one list of control points by appending all of these lists together\r\n      /// in order, i.e. the first list is followed by the second list and so on.\r\n      /// </remarks>\r\n      public IList<XYZ> ControlPointsList\r\n      {\r\n         get { return m_ControlPointsList; }\r\n         protected set\r\n         {\r\n            if (value == null || value.Count == 0)\r\n            {\r\n               Importer.TheLog.LogError(Id, \"This surface has no control points\", true);\r\n            }\r\n            m_ControlPointsList = value;\r\n         }\r\n      }\r\n\r\n      private IFCLogical m_UClosed;\r\n\r\n      /// <summary>\r\n      /// Indicates whether the surface is closed in the u direction.\r\n      /// </summary>\r\n      public IFCLogical UClosed\r\n      {\r\n         get { return m_UClosed; }\r\n         protected set { m_UClosed = value; }\r\n      }\r\n\r\n      private IFCLogical m_VClosed;\r\n\r\n      /// <summary>\r\n      /// Indicates whether the surface is closed in the v direction.\r\n      /// </summary>\r\n      public IFCLogical VClosed\r\n      {\r\n         get { return m_VClosed; }\r\n         protected set { m_VClosed = value; }\r\n      }\r\n\r\n      private IFCLogical m_SelfIntersect;\r\n\r\n      /// <summary>\r\n      /// Indicates whether the surface self intersects.\r\n      /// </summary>\r\n      public IFCLogical SelfIntersect\r\n      {\r\n         get { return m_SelfIntersect; }\r\n         protected set { m_SelfIntersect = value; }\r\n      }\r\n\r\n\r\n      protected IFCBSplineSurface()\r\n      {\r\n      }\r\n\r\n      protected IFCBSplineSurface(IFCAnyHandle bSplineSurface)\r\n      {\r\n         Process(bSplineSurface);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcSurface)\r\n      {\r\n         base.Process(ifcSurface);\r\n\r\n         bool foundUDegree = false;\r\n         UDegree = IFCImportHandleUtil.GetRequiredIntegerAttribute(ifcSurface, \"UDegree\", out foundUDegree);\r\n         if (!foundUDegree)\r\n         {\r\n            Importer.TheLog.LogError(ifcSurface.StepId, \"Cannot find the UDegree attribute of this surface\", true);\r\n         }\r\n\r\n         bool foundVDegree = false;\r\n         VDegree = IFCImportHandleUtil.GetRequiredIntegerAttribute(ifcSurface, \"VDegree\", out foundVDegree);\r\n         if (!foundVDegree)\r\n         {\r\n            Importer.TheLog.LogError(ifcSurface.StepId, \"Cannot find the VDegree attribute of this surface\", true);\r\n         }\r\n\r\n         IList<IList<IFCAnyHandle>> controlPoints = IFCImportHandleUtil.GetListOfListOfInstanceAttribute(ifcSurface, \"ControlPointsList\");\r\n\r\n         if (controlPoints == null || controlPoints.Count == 0)\r\n         {\r\n            Importer.TheLog.LogError(ifcSurface.StepId, \"This surface has invalid number of control points\", true);\r\n         }\r\n\r\n         List<IFCAnyHandle> controlPointsTmp = new List<IFCAnyHandle>();\r\n\r\n         foreach (List<IFCAnyHandle> list in controlPoints)\r\n         {\r\n            controlPointsTmp.AddRange(list);\r\n         }\r\n\r\n         ControlPointsList = IFCPoint.ProcessScaledLengthIFCCartesianPoints(controlPointsTmp);\r\n\r\n         bool foundUClosed = false;\r\n         UClosed = IFCImportHandleUtil.GetOptionalLogicalAttribute(ifcSurface, \"UClosed\", out foundUClosed);\r\n         if (!foundUClosed)\r\n         {\r\n            Importer.TheLog.LogWarning(ifcSurface.StepId, \"Cannot find the UClosed attribute of this surface, setting to Unknown\", true);\r\n            UClosed = IFCLogical.Unknown;\r\n         }\r\n\r\n         bool foundVClosed = false;\r\n         VClosed = IFCImportHandleUtil.GetOptionalLogicalAttribute(ifcSurface, \"VClosed\", out foundVClosed);\r\n         if (!foundVClosed)\r\n         {\r\n            Importer.TheLog.LogWarning(ifcSurface.StepId, \"Cannot find the VClosed attribute of this surface, setting to Unknown\", true);\r\n            VClosed = IFCLogical.Unknown;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCBSplineSurface object from the handle of type IFCBSplineSurface\r\n      /// </summary>\r\n      /// <param name=\"IFCBSplineSurface\">The IFC handle</param>\r\n      /// <returns>The IFCBSplineSurface object</returns>\r\n      public static IFCBSplineSurface ProcessIFCBSplineSurface(IFCAnyHandle ifcBSplineSurface)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcBSplineSurface))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcBSplineSurface);\r\n            return null;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcBSplineSurface, IFCEntityType.IfcBSplineSurface))\r\n            return IFCBSplineSurfaceWithKnots.ProcessIFCBSplineSurfaceWithKnots(ifcBSplineSurface);\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcBSplineSurface, IFCEntityType.IfcBSplineSurface, true);\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCBSplineSurfaceWithKnots.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCBSplineSurfaceWithKnots entity\r\n   /// </summary>\r\n   public class IFCBSplineSurfaceWithKnots : IFCBSplineSurface\r\n   {\r\n      private IList<int> m_UMultiplicities;\r\n\r\n      /// <summary>\r\n      /// The multiplicities of the knots in the u parameter direction.\r\n      /// </summary>\r\n      public IList<int> UMultiplicities\r\n      {\r\n         get { return m_UMultiplicities; }\r\n         protected set\r\n         {\r\n            if (value == null || value.Count == 0)\r\n            {\r\n               Importer.TheLog.LogError(Id, \"The list of knot multiplicites in the u-parameter direction is empty\", true);\r\n            }\r\n            m_UMultiplicities = value;\r\n\r\n         }\r\n      }\r\n\r\n      private IList<int> m_VMultiplicities;\r\n\r\n      /// <summary>\r\n      /// The multiplicities of the knots in the v parameter direction.\r\n      /// </summary>\r\n      public IList<int> VMultiplicities\r\n      {\r\n         get { return m_VMultiplicities; }\r\n         protected set\r\n         {\r\n            if (value == null || value.Count == 0)\r\n            {\r\n               Importer.TheLog.LogError(Id, \"The list of knot multiplicities in the v-parameter direction is empty\", true);\r\n            }\r\n            m_VMultiplicities = value;\r\n         }\r\n      }\r\n\r\n      private IList<double> m_UKnots;\r\n\r\n      /// <summary>\r\n      /// The list of distinct knots in the u parameter direction.\r\n      /// </summary>\r\n      public IList<double> UKnots\r\n      {\r\n         get { return m_UKnots; }\r\n         protected set\r\n         {\r\n            if (value == null || value.Count == 0)\r\n            {\r\n               Importer.TheLog.LogError(Id, \"The list of u-knots in this surface is empty\", true);\r\n            }\r\n            m_UKnots = value;\r\n         }\r\n      }\r\n\r\n      private IList<double> m_VKnots;\r\n\r\n      /// <summary>\r\n      /// The list of distinct knots in the v parameter direction.\r\n      /// </summary>\r\n      public IList<double> VKnots\r\n      {\r\n         get { return m_VKnots; }\r\n         protected set\r\n         {\r\n            if (value == null || value.Count == 0)\r\n            {\r\n               Importer.TheLog.LogError(Id, \"The list of v-knots in this surface is empty\", true);\r\n            }\r\n            m_VKnots = value;\r\n         }\r\n      }\r\n\r\n      protected IFCBSplineSurfaceWithKnots()\r\n      {\r\n      }\r\n\r\n      protected IFCBSplineSurfaceWithKnots(IFCAnyHandle bSplineSurface)\r\n      {\r\n         Process(bSplineSurface);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcSurface)\r\n      {\r\n         base.Process(ifcSurface);\r\n         UMultiplicities = IFCAnyHandleUtil.GetAggregateIntAttribute<List<int>>(ifcSurface, \"UMultiplicities\");\r\n         VMultiplicities = IFCAnyHandleUtil.GetAggregateIntAttribute<List<int>>(ifcSurface, \"VMultiplicities\");\r\n         UKnots = IFCAnyHandleUtil.GetAggregateDoubleAttribute<List<double>>(ifcSurface, \"UKnots\");\r\n         VKnots = IFCAnyHandleUtil.GetAggregateDoubleAttribute<List<double>>(ifcSurface, \"VKnots\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCBSplineSurfaceWithKnots object from the handle of type IfcBSplineSurfaceWithKnots\r\n      /// </summary>\r\n      /// <param name=\"ifcBSplineSurfaceWithKnots\">The IFC handle</param>\r\n      /// <returns>The IFCBSplineSurfaceWithKnots object</returns>\r\n      public static IFCBSplineSurfaceWithKnots ProcessIFCBSplineSurfaceWithKnots(IFCAnyHandle ifcBSplineSurfaceWithKnots)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcBSplineSurfaceWithKnots))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcBSplineSurfaceWithKnots);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity bSplineSurface = null;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcBSplineSurfaceWithKnots.StepId, out bSplineSurface))\r\n            return (bSplineSurface as IFCBSplineSurfaceWithKnots);\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcBSplineSurfaceWithKnots, IFCEntityType.IfcRationalBSplineSurfaceWithKnots))\r\n            return IFCRationalBSplineSurfaceWithKnots.ProcessIFCRationalBSplineSurfaceWithKnots(ifcBSplineSurfaceWithKnots);\r\n\r\n         return new IFCBSplineSurfaceWithKnots(ifcBSplineSurfaceWithKnots);\r\n      }\r\n\r\n      public override Surface GetSurface(Transform lcs)\r\n      {\r\n         // Since Revit doesn't have NURBS as a surface type and we also use a completely \r\n         // different approach to build a NURBS surface form the BrepBuilder so we don't need to \r\n         // return anything meaningful here\r\n         throw new InvalidOperationException(\"Revit doesn't have corresponding surface type for NURBS\");\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCBlock.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Import.Enums;\nusing Revit.IFC.Import.Utility;\n\nnamespace Revit.IFC.Import.Data\n{\n   public class IFCBlock : IFCCsgPrimitive3D\n   {\n      /// <summary>\n      /// The size of the block along the placement X axis.\n      /// </summary>\n      public double XLength { get; protected set; } = 0.0;\n\n      /// <summary>\n      /// The size of the block along the placement Y axis.\n      /// </summary>\n      public double YLength { get; protected set; } = 0.0;\n\n      /// <summary>\n      /// The size of the block along the placement Z axis.\n      /// </summary>\n      public double ZLength { get; protected set; } = 0.0;\n      \n      protected IFCBlock()\n      {\n      }\n\n      protected override IList<GeometryObject> CreateGeometryInternal(\n         IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid)\n      {\n         if (XLength < MathUtil.Eps() || YLength < MathUtil.Eps() || ZLength < MathUtil.Eps())\n            return null;\n\n         Transform scaledExtrusionPosition = (scaledLcs == null) ? Transform.Identity : scaledLcs;\n\n         XYZ llPoint = scaledExtrusionPosition.OfPoint(XYZ.Zero);\n         XYZ lrPoint = scaledExtrusionPosition.OfPoint(new XYZ(XLength, 0, 0));\n         XYZ urPoint = scaledExtrusionPosition.OfPoint(new XYZ(XLength, YLength, 0));\n         XYZ ulPoint = scaledExtrusionPosition.OfPoint(new XYZ(0, YLength, 0));\n\n         CurveLoop outerLoop = new CurveLoop();\n         outerLoop.Append(Line.CreateBound(llPoint, lrPoint));\n         outerLoop.Append(Line.CreateBound(lrPoint, urPoint));\n         outerLoop.Append(Line.CreateBound(urPoint, ulPoint));\n         outerLoop.Append(Line.CreateBound(ulPoint, llPoint));\n\n         IList<CurveLoop> loops = new List<CurveLoop>();\n         loops.Add(outerLoop);\n\n         XYZ scaledExtrusionDirection = scaledExtrusionPosition.OfVector(XYZ.BasisZ);\n         SolidOptions solidOptions = new SolidOptions(GetMaterialElementId(shapeEditScope), shapeEditScope.GraphicsStyleId);\n\n         GeometryObject block = null;\n         try\n         {\n            block = GeometryCreationUtilities.CreateExtrusionGeometry(loops, scaledExtrusionDirection, ZLength, solidOptions);\n         }\n         catch (Exception)\n         {\n            if (shapeEditScope.MustCreateSolid())\n               throw;\n\n            Importer.TheLog.LogError(Id, \"Block has an invalid definition for a solid; reverting to mesh.\", false);\n\n            MeshFromGeometryOperationResult meshResult = TessellatedShapeBuilder.CreateMeshByExtrusion(\n               loops, scaledExtrusionDirection, ZLength, GetMaterialElementId(shapeEditScope));\n\n            // will throw if mesh is not available\n            block = meshResult.GetMesh();\n         }\n\n         IList<GeometryObject> blocks = new List<GeometryObject>();\n         if (block != null)\n            blocks.Add(block);\n\n         return blocks;\n      }\n\n      /// <summary>\n      /// Create geometry for a particular representation item.\n      /// </summary>\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \n         Transform scaledLcs, string guid)\n      {\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\n\n         IList<GeometryObject> blockGeometries = CreateGeometryInternal(shapeEditScope, scaledLcs, guid);\n         if (blockGeometries != null)\n         {\n            foreach (GeometryObject blockGeometry in blockGeometries)\n            {\n               shapeEditScope.AddGeometry(IFCSolidInfo.Create(Id, blockGeometry));\n            }\n         }\n      }\n\n      override protected void Process(IFCAnyHandle ifcBlock)\n      {\n         base.Process(ifcBlock);\n\n         bool found = false;\n         XLength = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(ifcBlock, \"XLength\", out found);\n         if (!found)\n         {\n            Importer.TheLog.LogError(ifcBlock.StepId, \"Cannot find the X length of this block.\", false);\n            return;\n         }\n\n         YLength = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(ifcBlock, \"YLength\", out found);\n         if (!found)\n         {\n            Importer.TheLog.LogError(ifcBlock.StepId, \"Cannot find the Y length of this block.\", false);\n            return;\n         }\n\n         ZLength = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(ifcBlock, \"ZLength\", out found);\n         if (!found)\n         {\n            Importer.TheLog.LogError(ifcBlock.StepId, \"Cannot find the Z length of this block.\", false);\n            return;\n         }\n      }\n\n      protected IFCBlock(IFCAnyHandle ifcBlock)\n      {\n         Process(ifcBlock);\n      }\n\n      /// <summary>\n      /// Create an IFCBlock object from a handle of type ifcBlock.\n      /// </summary>\n      /// <param name=\"ifcBlock\">The IFC handle.</param>\n      /// <returns>The IFCBlock object.</returns>\n      public static IFCBlock ProcessIFCBlock(IFCAnyHandle ifcBlock)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcBlock))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcBlock);\n            return null;\n         }\n\n         IFCEntity block;\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcBlock.StepId, out block))\n            block = new IFCBlock(ifcBlock);\n\n         return (block as IFCBlock);\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCBooleanOperand.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   class IFCBooleanOperand\r\n   {\r\n      public static IIFCBooleanOperand ProcessIFCBooleanOperand(IFCAnyHandle ifcBooleanOperand)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcBooleanOperand))\r\n         {\r\n            //LOG: ERROR: IfcSolidModel is null or has no value\r\n            return null;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcBooleanOperand, IFCEntityType.IfcBooleanResult))\r\n            return IFCBooleanResult.ProcessIFCBooleanResult(ifcBooleanOperand);\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcBooleanOperand, IFCEntityType.IfcHalfSpaceSolid))\r\n            return IFCHalfSpaceSolid.ProcessIFCHalfSpaceSolid(ifcBooleanOperand);\r\n         else if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcBooleanOperand, IFCEntityType.IfcSolidModel))\r\n            return IFCSolidModel.ProcessIFCSolidModel(ifcBooleanOperand);\r\n         else if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcBooleanOperand, IFCEntityType.IfcCsgPrimitive3D))\r\n            return IFCCsgPrimitive3D.ProcessIFCCsgPrimitive3D(ifcBooleanOperand);\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcBooleanOperand, \"IfcBooleanOperand\", true);\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCBooleanResult.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCBooleanResult : IFCRepresentationItem, IIFCBooleanOperand\r\n   {\r\n      IFCBooleanOperator? m_BooleanOperator = null;\r\n\r\n      IIFCBooleanOperand m_FirstOperand;\r\n\r\n      IIFCBooleanOperand m_SecondOperand;\r\n\r\n      /// <summary>\r\n      /// The boolean operator.\r\n      /// </summary>\r\n      public IFCBooleanOperator? BooleanOperator\r\n      {\r\n         get { return m_BooleanOperator; }\r\n         protected set { m_BooleanOperator = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The first boolean operand.\r\n      /// </summary>\r\n      public IIFCBooleanOperand FirstOperand\r\n      {\r\n         get { return m_FirstOperand; }\r\n         protected set { m_FirstOperand = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The second boolean operand.\r\n      /// </summary>\r\n      public IIFCBooleanOperand SecondOperand\r\n      {\r\n         get { return m_SecondOperand; }\r\n         protected set { m_SecondOperand = value; }\r\n      }\r\n\r\n      protected IFCBooleanResult()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle item)\r\n      {\r\n         base.Process(item);\r\n\r\n         IFCBooleanOperator? booleanOperator = IFCEnums.GetSafeEnumerationAttribute<IFCBooleanOperator>(item, \"Operator\");\r\n         if (booleanOperator.HasValue)\r\n            BooleanOperator = booleanOperator.Value;\r\n\r\n         IFCAnyHandle firstOperand = IFCImportHandleUtil.GetRequiredInstanceAttribute(item, \"FirstOperand\", true);\r\n         FirstOperand = IFCBooleanOperand.ProcessIFCBooleanOperand(firstOperand);\r\n\r\n         IFCAnyHandle secondOperand = IFCImportHandleUtil.GetRequiredInstanceAttribute(item, \"SecondOperand\", true);\r\n\r\n\r\n         // We'll allow a solid to be created even if the second operand can't be properly handled.\r\n         try\r\n         {\r\n            SecondOperand = IFCBooleanOperand.ProcessIFCBooleanOperand(secondOperand);\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            SecondOperand = null;\r\n            Importer.TheLog.LogError(secondOperand.StepId, ex.Message, false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the styled item corresponding to the solid inside of an IFCRepresentationItem.\r\n      /// </summary>\r\n      /// <param name=\"repItem\">The representation item.</param>\r\n      /// <returns>The corresponding IFCStyledItem, or null if not found.</returns>\r\n      /// <remarks>This function is intended to work on an IFCBooleanResult with an arbitrary number of embedded\r\n      /// clipping operations.  We will take the first StyledItem that corresponds to either an IFCBooleanResult,\r\n      /// or the contained solid.  We explicitly do not want any material associated specifically with the void.</remarks>\r\n      private IFCStyledItem GetStyledItemFromOperand(IFCRepresentationItem repItem)\r\n      {\r\n         if (repItem == null)\r\n            return null;\r\n\r\n         if (repItem.StyledByItem != null)\r\n            return repItem.StyledByItem;\r\n\r\n         if (repItem is IFCBooleanResult)\r\n         {\r\n            IIFCBooleanOperand firstOperand = (repItem as IFCBooleanResult).FirstOperand;\r\n            if (firstOperand is IFCRepresentationItem)\r\n               return GetStyledItemFromOperand(firstOperand as IFCRepresentationItem);\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      /// <returns>The created geometry.</returns>\r\n      public IList<GeometryObject> CreateGeometry(\r\n            IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid)\r\n      {\r\n         IList<GeometryObject> firstSolids = FirstOperand.CreateGeometry(shapeEditScope, scaledLcs, guid);\r\n\r\n         if (firstSolids != null)\r\n         {\r\n            foreach (GeometryObject potentialSolid in firstSolids)\r\n            {\r\n               if (!(potentialSolid is Solid))\r\n               {\r\n                  Importer.TheLog.LogError((FirstOperand as IFCRepresentationItem).Id, \"Can't perform Boolean operation on a Mesh.\", false);\r\n                  return firstSolids;\r\n               }\r\n            }\r\n         }\r\n\r\n         IList<GeometryObject> secondSolids = null;\r\n         if ((firstSolids != null || BooleanOperator == IFCBooleanOperator.Union) && (SecondOperand != null))\r\n         {\r\n            try\r\n            {\r\n               using (IFCImportShapeEditScope.BuildPreferenceSetter setter =\r\n                   new IFCImportShapeEditScope.BuildPreferenceSetter(shapeEditScope, IFCImportShapeEditScope.BuildPreferenceType.ForceSolid))\r\n               {\r\n                  // Before we process the second operand, we are going to see if there is a uniform material set for the first operand \r\n                  // (corresponding to the solid in the Boolean operation).  We will try to suggest the same material for the voids to avoid arbitrary\r\n                  // setting of material information for the cut faces.\r\n                  IFCStyledItem firstOperandStyledItem = GetStyledItemFromOperand(FirstOperand as IFCRepresentationItem);\r\n                  using (IFCImportShapeEditScope.IFCMaterialStack stack =\r\n                      new IFCImportShapeEditScope.IFCMaterialStack(shapeEditScope, firstOperandStyledItem, null))\r\n                  {\r\n                     secondSolids = SecondOperand.CreateGeometry(shapeEditScope, scaledLcs, guid);\r\n                  }\r\n               }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n               // We will allow something to be imported, in the case where the second operand is invalid.\r\n               // If the first (base) operand is invalid, we will still fail the import of this solid.\r\n               if (SecondOperand is IFCRepresentationItem)\r\n                  Importer.TheLog.LogError((SecondOperand as IFCRepresentationItem).Id, ex.Message, false);\r\n               else\r\n                  throw;\r\n               secondSolids = null;\r\n            }\r\n         }\r\n\r\n         IList<GeometryObject> resultSolids = null;\r\n         if (firstSolids == null)\r\n         {\r\n            if (BooleanOperator == IFCBooleanOperator.Union)\r\n               resultSolids = secondSolids;\r\n         }\r\n         else if (secondSolids == null || BooleanOperator == null)\r\n         {\r\n            if (BooleanOperator == null)\r\n               Importer.TheLog.LogError(Id, \"Invalid BooleanOperationsType.\", false);\r\n            resultSolids = firstSolids;\r\n         }\r\n         else\r\n         {\r\n            BooleanOperationsType booleanOperationsType = BooleanOperationsType.Difference;\r\n            switch (BooleanOperator)\r\n            {\r\n               case IFCBooleanOperator.Difference:\r\n                  booleanOperationsType = BooleanOperationsType.Difference;\r\n                  break;\r\n               case IFCBooleanOperator.Intersection:\r\n                  booleanOperationsType = BooleanOperationsType.Intersect;\r\n                  break;\r\n               case IFCBooleanOperator.Union:\r\n                  booleanOperationsType = BooleanOperationsType.Union;\r\n                  break;\r\n               default:\r\n                  Importer.TheLog.LogError(Id, \"Invalid BooleanOperationsType.\", true);\r\n                  break;\r\n            }\r\n\r\n            resultSolids = new List<GeometryObject>();\r\n            foreach (GeometryObject firstSolid in firstSolids)\r\n            {\r\n               Solid resultSolid = (firstSolid as Solid);\r\n\r\n               int secondId = (SecondOperand == null) ? -1 : (SecondOperand as IFCRepresentationItem).Id;\r\n               XYZ suggestedShiftDirection = GetSuggestedShiftDirection(scaledLcs);\r\n               foreach (GeometryObject secondSolid in secondSolids)\r\n               {\r\n                  resultSolid = IFCGeometryUtil.ExecuteSafeBooleanOperation(Id, secondId, resultSolid, secondSolid as Solid, booleanOperationsType, suggestedShiftDirection);\r\n                  if (resultSolid == null)\r\n                     break;\r\n               }\r\n\r\n               if (resultSolid != null)\r\n                  resultSolids.Add(resultSolid);\r\n            }\r\n         }\r\n\r\n         return resultSolids;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item, and add to scope.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid)\r\n      {\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n\r\n         IList<GeometryObject> resultGeometries = CreateGeometry(shapeEditScope, scaledLcs, guid);\r\n         if (resultGeometries != null)\r\n         {\r\n            foreach (GeometryObject resultGeometry in resultGeometries)\r\n            {\r\n               shapeEditScope.AddGeometry(IFCSolidInfo.Create(Id, resultGeometry));\r\n            }\r\n         }\r\n      }\r\n\r\n      protected IFCBooleanResult(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCBooleanResult object from a handle of type IfcBooleanResult.\r\n      /// </summary>\r\n      /// <param name=\"ifcBooleanResult\">The IFC handle.</param>\r\n      /// <returns>The IFCBooleanResult object.</returns>\r\n      public static IFCBooleanResult ProcessIFCBooleanResult(IFCAnyHandle ifcBooleanResult)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcBooleanResult))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcBooleanResult);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity booleanResult;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcBooleanResult.StepId, out booleanResult))\r\n            booleanResult = new IFCBooleanResult(ifcBooleanResult);\r\n         return (booleanResult as IFCBooleanResult);\r\n      }\r\n\r\n      /// <summary>\r\n      /// In case of a Boolean operation failure, provide a recommended direction to shift the geometry in for a second attempt.\r\n      /// </summary>\r\n      /// <param name=\"lcs\">The local transform for this entity.</param>\r\n      /// <returns>An XYZ representing a unit direction vector, or null if no direction is suggested.</returns>\r\n      /// <remarks>If the 2nd attempt fails, a third attempt will be done with a shift in the opposite direction.</remarks>\r\n      public XYZ GetSuggestedShiftDirection(Transform lcs)\r\n      {\r\n         XYZ suggestedXYZ = (SecondOperand == null) ? null : SecondOperand.GetSuggestedShiftDirection(lcs);\r\n         if (suggestedXYZ == null)\r\n            suggestedXYZ = (FirstOperand == null) ? null : FirstOperand.GetSuggestedShiftDirection(lcs);\r\n         return suggestedXYZ;\r\n\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCBoundedCurve.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCBoundedCurve entity\r\n   /// </summary>\r\n   public abstract class IFCBoundedCurve : IFCCurve\r\n   {\r\n      protected IFCBoundedCurve()\r\n      {\r\n      }\r\n\r\n      protected IFCBoundedCurve(IFCAnyHandle bSplineCurve)\r\n      {\r\n         Process(bSplineCurve);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcCurve)\r\n      {\r\n         base.Process(ifcCurve);\r\n      }\r\n\r\n      public static IFCBoundedCurve ProcessIFCBoundedCurve(IFCAnyHandle ifcBoundedCurve)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcBoundedCurve))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcBoundedCurve);\r\n            return null;\r\n         }\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC2x2) && IFCAnyHandleUtil.IsValidSubTypeOf(ifcBoundedCurve, IFCEntityType.IfcBSplineCurve))\r\n            return IFCBSplineCurve.ProcessIFCBSplineCurve(ifcBoundedCurve);\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcBoundedCurve, IFCEntityType.IfcCompositeCurve))\r\n            return IFCCompositeCurve.ProcessIFCCompositeCurve(ifcBoundedCurve);\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcBoundedCurve, IFCEntityType.IfcPolyline))\r\n            return IFCPolyline.ProcessIFCPolyline(ifcBoundedCurve);\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcBoundedCurve, IFCEntityType.IfcTrimmedCurve))\r\n            return IFCTrimmedCurve.ProcessIFCTrimmedCurve(ifcBoundedCurve);\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete) && IFCAnyHandleUtil.IsValidSubTypeOf(ifcBoundedCurve, IFCEntityType.IfcIndexedPolyCurve))\r\n            return IFCIndexedPolyCurve.ProcessIFCIndexedPolyCurve(ifcBoundedCurve);\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcBoundedCurve, IFCEntityType.IfcBoundedCurve, true);\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCBuilding.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcBuilding.\r\n   /// </summary>\r\n   public class IFCBuilding : IFCSpatialStructureElement\r\n   {\r\n      /// <summary>\r\n      /// Constructs an IFCBuilding from the IfcBuilding handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcBuilding\">The IfcBuilding handle.</param>\r\n      protected IFCBuilding(IFCAnyHandle ifcBuilding)\r\n      {\r\n         Process(ifcBuilding);\r\n      }\r\n\r\n      /// <summary>\r\n      /// The base elevation of the building.\r\n      /// </summary>\r\n      public double ElevationOfRefHeight { get; protected set; } = 0.0;\r\n\r\n      /// <summary>\r\n      /// The elevation above the minimal terrain level.\r\n      /// </summary>\r\n      public double ElevationOfTerrain { get; protected set; } = 0.0;\r\n\r\n      /// <summary>\r\n      /// The optional address given to the building for postal purposes.\r\n      /// </summary>\r\n      public IFCPostalAddress BuildingAddress { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Processes IfcBuilding attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcBuilding\">The IfcBuilding handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcBuilding)\r\n      {\r\n         base.Process(ifcBuilding);\r\n\r\n         ElevationOfRefHeight = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(ifcBuilding, \"ElevationOfRefHeight\", 0.0);\r\n\r\n         ElevationOfTerrain = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(ifcBuilding, \"ElevationOfTerrain\", 0.0);\r\n\r\n         IFCAnyHandle ifcPostalAddress = IFCImportHandleUtil.GetOptionalInstanceAttribute(ifcBuilding, \"BuildingAddress\");\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPostalAddress))\r\n            BuildingAddress = IFCPostalAddress.ProcessIFCPostalAddress(ifcPostalAddress);\r\n      }\r\n\r\n      public override void PostProcess()\r\n      {\r\n         TryToFixFarawayOrigin();\r\n         base.PostProcess();\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Allow for override of IfcObjectDefinition shared parameter names.\r\n      /// </summary>\r\n      /// <param name=\"name\">The enum corresponding of the shared parameter.</param>\r\n      /// <param name=\"isType\">True if the shared parameter is a type parameter.</param>\r\n      /// <returns>The name appropriate for this IfcObjectDefinition.</returns>\r\n      public override string GetSharedParameterName(IFCSharedParameters name, bool isType)\r\n      {\r\n         if (!isType)\r\n         {\r\n            switch (name)\r\n            {\r\n               case IFCSharedParameters.IfcName:\r\n                  return \"BuildingName\";\r\n               case IFCSharedParameters.IfcDescription:\r\n                  return \"BuildingDescription\";\r\n            }\r\n         }\r\n\r\n         return base.GetSharedParameterName(name, isType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the element ids created for this entity, for summary logging.\r\n      /// </summary>\r\n      /// <param name=\"createdElementIds\">The creation list.</param>\r\n      /// <remarks>May contain InvalidElementId; the caller is expected to remove it.</remarks>\r\n      public override void GetCreatedElementIds(ISet<ElementId> createdElementIds)\r\n      {\r\n         // If we used ProjectInformation, don't report that.\r\n         if (CreatedElementId != ElementId.InvalidElementId && CreatedElementId != Importer.TheCache.ProjectInformationId)\r\n         {\r\n            createdElementIds.Add(CreatedElementId);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit elements based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      protected override void Create(Document doc)\r\n      {\r\n         base.Create(doc);\r\n\r\n         IFCLocation.WarnIfFaraway(this);\r\n\r\n         // IfcBuilding usually won't create an element, as it contains no geometry.\r\n         // If it doesn't, use the ProjectInfo element in the document to store its parameters.\r\n         if (CreatedElementId == ElementId.InvalidElementId)\r\n            CreatedElementId = Importer.TheCache.ProjectInformationId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit element params based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      protected override void CreateParametersInternal(Document doc, Element element)\r\n      {\r\n         base.CreateParametersInternal(doc, element);\r\n\r\n         CreatePostalParameters(doc, element, BuildingAddress);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcBuilding object.\r\n      /// </summary>\r\n      /// <param name=\"ifcBuilding\">The IfcBuilding handle.</param>\r\n      /// <returns>The IFCBuilding object.</returns>\r\n      public static IFCBuilding ProcessIFCBuilding(IFCAnyHandle ifcBuilding)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcBuilding))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcBuilding);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity building;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcBuilding.StepId, out building))\r\n            building = new IFCBuilding(ifcBuilding);\r\n         return (building as IFCBuilding);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCBuildingElement.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Revit.IFC.Common.Enums;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcBuildingElement.\r\n   /// </summary>\r\n   /// <remarks>This class is non-abstract until all derived classes are defined.</remarks>\r\n   public class IFCBuildingElement : IFCElement\r\n   {\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCBuildingElement()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCBuildingElement from the IfcBuildingElement handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcBuildingElement\">The IfcBuildingElement handle.</param>\r\n      protected IFCBuildingElement(IFCAnyHandle ifcBuildingElement)\r\n      {\r\n         Process(ifcBuildingElement);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcBuildingElement attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcBuildingElement\">The IfcBuildingElement handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcBuildingElement)\r\n      {\r\n         base.Process(ifcBuildingElement);\r\n      }\r\n\r\n      private static bool SchemaSupportsBuildingElementComponentAsSubType()\r\n      {\r\n         return (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC2x2) && \r\n            !IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFCBuildingElement object.\r\n      /// </summary>\r\n      /// <param name=\"ifcBuildingElement\">The IfcBuildingElement handle.</param>\r\n      /// <returns>The IFCBuildingElement object.</returns>\r\n      public static IFCBuildingElement ProcessIFCBuildingElement(IFCAnyHandle ifcBuildingElement)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcBuildingElement))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcBuildingElement);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity buildingElement;\r\n         IFCImportFile.TheFile.EntityMap.TryGetValue(ifcBuildingElement.StepId, out buildingElement);\r\n         if (buildingElement != null)\r\n            return (buildingElement as IFCBuildingElement);\r\n\r\n         try\r\n         {\r\n            IFCBuildingElement newIFCBuildingElement = null;\r\n            // other subclasses not handled yet.\r\n            if (SchemaSupportsBuildingElementComponentAsSubType() && IFCAnyHandleUtil.IsValidSubTypeOf(ifcBuildingElement, IFCEntityType.IfcBuildingElementComponent))\r\n               newIFCBuildingElement = IFCBuildingElementComponent.ProcessIFCBuildingElementComponent(ifcBuildingElement);\r\n            else if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcBuildingElement, IFCEntityType.IfcBuildingElementProxy))\r\n               newIFCBuildingElement = IFCBuildingElementProxy.ProcessIFCBuildingElementProxy(ifcBuildingElement);\r\n            else\r\n               newIFCBuildingElement = new IFCBuildingElement(ifcBuildingElement);\r\n            return newIFCBuildingElement;\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            HandleError(ex.Message, ifcBuildingElement, true);\r\n            return null;\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCBuildingElementComponent.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Revit.IFC.Common.Enums;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcBuildingElementComponent.\r\n   /// </summary>\r\n   /// <remarks>This class is non-abstract until all derived classes are defined.</remarks>\r\n   public class IFCBuildingElementComponent : IFCBuildingElement\r\n   {\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCBuildingElementComponent()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCBuildingElementComponent from the IfcBuildingElementComponent handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcBuildingElementComponent\">The IfcBuildingElementComponent handle.</param>\r\n      protected IFCBuildingElementComponent(IFCAnyHandle ifcBuildingElementComponent)\r\n      {\r\n         Process(ifcBuildingElementComponent);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcBuildingElementComponent attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcBuildingElementComponent\">The IfcBuildingElementComponent handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcBuildingElementComponent)\r\n      {\r\n         base.Process(ifcBuildingElementComponent);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFCBuildingElementComponent object.\r\n      /// </summary>\r\n      /// <param name=\"ifcBuildingElementComponent\">The IfcBuildingElementComponent handle.</param>\r\n      /// <returns>The IFCBuildingElementComponent object.</returns>\r\n      public static IFCBuildingElementComponent ProcessIFCBuildingElementComponent(IFCAnyHandle ifcBuildingElementComponent)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcBuildingElementComponent))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcBuildingElementComponent);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity buildingElementComponent;\r\n         IFCImportFile.TheFile.EntityMap.TryGetValue(ifcBuildingElementComponent.StepId, out buildingElementComponent);\r\n         if (buildingElementComponent != null)\r\n            return (buildingElementComponent as IFCBuildingElementComponent);\r\n\r\n         IFCBuildingElementComponent newIFCBuildingElementComponent = null;\r\n         // other subclasses not handled yet.\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcBuildingElementComponent, IFCEntityType.IfcBuildingElementPart))\r\n            newIFCBuildingElementComponent = IFCBuildingElementPart.ProcessIFCBuildingElementPart(ifcBuildingElementComponent);\r\n         else\r\n            newIFCBuildingElementComponent = new IFCBuildingElementComponent(ifcBuildingElementComponent);\r\n         return newIFCBuildingElementComponent;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCBuildingElementPart.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Revit.IFC.Common.Enums;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcBuildingElementPart.\r\n   /// </summary>\r\n   public class IFCBuildingElementPart : IFCBuildingElementComponent\r\n   {\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCBuildingElementPart()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCBuildingElementPart from the IfcBuildingElementPart handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcBuildingElementPart\">The IfcBuildingElementPart handle.</param>\r\n      protected IFCBuildingElementPart(IFCAnyHandle ifcBuildingElementPart)\r\n      {\r\n         Process(ifcBuildingElementPart);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcBuildingElementPart attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcBuildingElementPart\">The IfcBuildingElementPart handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcBuildingElementPart)\r\n      {\r\n         base.Process(ifcBuildingElementPart);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFCBuildingElementPart object.\r\n      /// </summary>\r\n      /// <param name=\"ifcBuildingElementPart\">The IfcBuildingElementPart handle.</param>\r\n      /// <returns>The IFCBuildingElementPart object.</returns>\r\n      public static IFCBuildingElementPart ProcessIFCBuildingElementPart(IFCAnyHandle ifcBuildingElementPart)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcBuildingElementPart))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcBuildingElementPart);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity buildingElementPart;\r\n         IFCImportFile.TheFile.EntityMap.TryGetValue(ifcBuildingElementPart.StepId, out buildingElementPart);\r\n         if (buildingElementPart != null)\r\n            return (buildingElementPart as IFCBuildingElementPart);\r\n\r\n         return new IFCBuildingElementPart(ifcBuildingElementPart);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCBuildingElementProxy.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System.Collections.Generic;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Import.Enums;\nusing Revit.IFC.Import.Utility;\n\nnamespace Revit.IFC.Import.Data\n{\n   /// <summary>\n   /// Represents an IfcBuildingElementProxy.\n   /// </summary>\n   public class IFCBuildingElementProxy : IFCBuildingElement\n   {\n      private HashSet<IFCObjectDefinition> m_IFCEmbeddedObjects = null;\n\n      /// <summary>\n      /// The objects embedded in the complex IFCBuildingElementProxy.\n      /// </summary>\n      public HashSet<IFCObjectDefinition> EmbeddedObjects\n      {\n         get\n         {\n            if (m_IFCEmbeddedObjects == null)\n               m_IFCEmbeddedObjects = new HashSet<IFCObjectDefinition>();\n            return m_IFCEmbeddedObjects;\n         }\n         protected set { m_IFCEmbeddedObjects = value; }\n      }\n\n      /// <summary>\n      /// Default constructor.\n      /// </summary>\n      protected IFCBuildingElementProxy()\n      {\n\n      }\n\n      /// <summary>\n      /// Constructs an IFCBuildingElementProxy from the IfcBuildingElementProxy handle.\n      /// </summary>\n      /// <param name=\"ifcBuildingElementProxy\">The IfcBuildingElementProxy handle.</param>\n      protected IFCBuildingElementProxy(IFCAnyHandle ifcBuildingElementProxy)\n      {\n         Process(ifcBuildingElementProxy);\n      }\n\n      /// <summary>\n      /// Processes IfcBuildingElementProxy attributes.\n      /// </summary>\n      /// <param name=\"ifcBuildingElementProxy\">The IfcBuildingElementProxy handle.</param>\n      protected override void Process(IFCAnyHandle ifcBuildingElementProxy)\n      {\n         base.Process(ifcBuildingElementProxy);\n      }\n\n      /// <summary>\n      /// Processes an IFCBuildingElementProxy object.\n      /// </summary>\n      /// <param name=\"ifcBuildingElementProxy\">The IfcBuildingElementProxy handle.</param>\n      /// <returns>The IFCBuildingElementProxy object.</returns>\n      public static IFCBuildingElementProxy ProcessIFCBuildingElementProxy(IFCAnyHandle ifcBuildingElementProxy)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcBuildingElementProxy))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcBuildingElementProxy);\n            return null;\n         }\n\n         IFCImportFile.TheFile.EntityMap.TryGetValue(ifcBuildingElementProxy.StepId, out IFCEntity buildingElementProxy);\n         if (buildingElementProxy != null)\n            return (buildingElementProxy as IFCBuildingElementProxy);\n\n         IFCBuildingElementProxy newIFCBuildingElementProxy = new IFCBuildingElementProxy(ifcBuildingElementProxy);\n\n         // Collecting embedded objects for the complex IfcBuildingElementProxy.\n         if (IFCEnums.GetSafeEnumerationAttribute<IFCElementComposition>(ifcBuildingElementProxy, \"CompositionType\") == IFCElementComposition.Complex)\n         {\n            HashSet<IFCAnyHandle> ifcRelDecomposes = IFCAnyHandleUtil.GetAggregateInstanceAttribute\n                   <HashSet<IFCAnyHandle>>(ifcBuildingElementProxy, \"IsDecomposedBy\");\n\n            if (ifcRelDecomposes != null)\n            {\n               foreach (IFCAnyHandle elem in ifcRelDecomposes)\n               {\n                  ICollection<IFCObjectDefinition> relatedObjects = ProcessIFCRelation.ProcessRelatedObjects(newIFCBuildingElementProxy, elem);\n                  if (relatedObjects != null)\n                     newIFCBuildingElementProxy.EmbeddedObjects.UnionWith(relatedObjects);\n               }\n            }\n         }\n\n         return newIFCBuildingElementProxy;\n      }\n\n      /// <summary>\n      /// Creates or populates Revit elements based on the information contained in this class.\n      /// </summary>\n      /// <param name=\"doc\">The document.</param>\n      protected override void Create(Document doc)\n      {\n         List<GeometryObject> geomObjs = new List<GeometryObject>();\n         foreach (IFCObjectDefinition objDef in EmbeddedObjects)\n         {\n            CreateElement(doc, objDef);\n            if (objDef.CreatedElementId == ElementId.InvalidElementId)\n               continue;\n\n            geomObjs.AddRange(objDef.CreatedGeometry);\n         }\n\n         // If embedded objects contain no geometry, element geometry will be created in IFCProduct.Create method.\n         if (geomObjs.Count > 0)\n         {\n            // Adding main element geometry to include it in direct shape. \n            IList<IFCSolidInfo> clonedGeometry = CloneElementGeometry(doc, this, this, false);\n            foreach (IFCSolidInfo solid in clonedGeometry)\n            {\n               if (CutSolidByVoids(solid, null))\n                  geomObjs.Add(solid.GeometryObject);\n            }\n\n            DirectShape buildingElementProxyShape = IFCElementUtil.CreateElement(doc, GetCategoryId(doc), GlobalId, geomObjs, Id, EntityType);\n            if (buildingElementProxyShape != null)\n            {\n               CreatedElementId = buildingElementProxyShape.Id;\n               CreatedGeometry = geomObjs;\n            }\n         }\n\n         base.Create(doc);\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCBuildingStorey.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.ApplicationServices;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcBuildingStorey.\r\n   /// </summary>\r\n   public class IFCBuildingStorey : IFCSpatialStructureElement\r\n   {\r\n      /// <summary>\r\n      /// Returns the associated Plan View for the level.\r\n      /// </summary>\r\n      public ElementId CreatedViewId { get; protected set; } = ElementId.InvalidElementId;\r\n\r\n      /// <summary>\r\n      /// If the ActiveView is level-based, we can't delete it.\r\n      /// If this is set and an IFCBuildingStorey exists in the IFC file, then re-use this Level rather when \"creating\" a new Level.\r\n      /// </summary>\r\n      public static ElementId ExistingUnConstrainedLevelToReuse { get; set; } = ElementId.InvalidElementId;\r\n\r\n      /// <summary>\r\n      /// If the ActiveView is level-based, we can't delete it.\r\n      /// If an IFCBuildingStorey exists in the IFC file, then create a new Level rather than reusing this Level.\r\n      /// </summary>\r\n      public static ElementId ExistingConstrainedLevel { get; set; } = ElementId.InvalidElementId;\r\n\r\n      /// <summary>\r\n      /// Get the default family type for creating ViewPlans.\r\n      /// </summary>\r\n      /// <param name=\"doc\"></param>\r\n      /// <returns>The default family type.</returns>\r\n      public static ElementId GetViewPlanTypeId(Document doc)\r\n      {\r\n         // There are theoretical cases where this could fail, but no such cases have been\r\n         // seen in practice.\r\n         if (Importer.TheCache.ViewPlanTypeIdInitialized == false)\r\n         {\r\n            // Basically, we only want to use the StructuralPlan if Structure is our only valid\r\n            // option.\r\n            ViewFamily viewFamilyToUse;\r\n            if (doc.Application.IsArchitectureEnabled || doc.Application.IsSystemsEnabled)\r\n               viewFamilyToUse = ViewFamily.FloorPlan;\r\n            else if (doc.Application.IsStructureEnabled)\r\n               viewFamilyToUse = ViewFamily.StructuralPlan;\r\n            else\r\n               viewFamilyToUse = ViewFamily.FloorPlan;\r\n\r\n            Importer.TheCache.ViewPlanTypeIdInitialized = true;\r\n            FilteredElementCollector collector = new FilteredElementCollector(doc);\r\n            ICollection<Element> viewFamilyTypes = collector.OfClass(typeof(ViewFamilyType)).ToElements();\r\n            foreach (Element element in viewFamilyTypes)\r\n            {\r\n               ViewFamilyType viewFamilyType = element as ViewFamilyType;\r\n               if (viewFamilyType.ViewFamily == viewFamilyToUse)\r\n               {\r\n                  Importer.TheCache.ViewPlanTypeId = viewFamilyType.Id;\r\n                  break;\r\n               }\r\n            }\r\n         }\r\n         return Importer.TheCache.ViewPlanTypeId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines if Level if constrained to a Scope Box or not.\r\n      /// </summary>\r\n      /// <param name=\"level\">Level to check.</param>\r\n      /// <returns>True if constrained, False otherwise.</returns>\r\n      public static bool IsConstrainedToScopeBox(Element level)\r\n      {\r\n         Parameter datumVolumeParameter = level?.get_Parameter(BuiltInParameter.DATUM_VOLUME_OF_INTEREST);\r\n         if (datumVolumeParameter == null)\r\n            return false;\r\n\r\n         return (datumVolumeParameter.AsElementId() != ElementId.InvalidElementId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCBuildingStorey from the IfcBuildingStorey handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcIFCBuildingStorey\">The IfcBuildingStorey handle.</param>\r\n      protected IFCBuildingStorey(IFCAnyHandle ifcIFCBuildingStorey)\r\n      {\r\n         Process(ifcIFCBuildingStorey);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit element params based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\"></param>\r\n      /// <param name=\"element\"></param>\r\n      protected override void CreateParametersInternal(Document doc, Element element)\r\n      {\r\n         base.CreateParametersInternal(doc, element);\r\n\r\n         if (element != null)\r\n         {\r\n            // Set \"IfcElevation\" parameter.\r\n            Category category = IFCPropertySet.GetCategoryForParameterIfValid(element, Id);\r\n            ParametersToSet.AddParameterDouble(doc, element, category, this, \"IfcElevation\", SpecTypeId.Length, UnitTypeId.Feet, Elevation, Id);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit elements based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      protected override void Create(Document doc)\r\n      {\r\n         if (Importer.TheHybridInfo?.HybridMap?.TryGetValue(Id.ToString(), out ElementId hybridElementId) ?? false)\r\n         {\r\n            CreatedElementId = hybridElementId;\r\n            TraverseSubElements(doc);\r\n            return;\r\n         }\r\n\r\n         IFCLocation.WarnIfFaraway(this);\r\n\r\n         // We may re-use the ActiveView Level and View, since we can't delete them.\r\n         // We will consider that we \"created\" this level and view for creation metrics.\r\n         Level level = Importer.TheCache.UseElementByGUID<Level>(doc, GlobalId);\r\n\r\n         bool reusedLevel = false;\r\n         bool foundLevel = false;\r\n\r\n         // If any Level is constrained, never reuse it and never move it.\r\n         if (level == null)\r\n         {\r\n            // Re-using existing unconstrained Level.\r\n            if (ExistingUnConstrainedLevelToReuse != ElementId.InvalidElementId)\r\n            {\r\n               level = doc.GetElement(ExistingUnConstrainedLevelToReuse) as Level;\r\n               Importer.TheCache.UseElement(level);\r\n               ExistingUnConstrainedLevelToReuse = ElementId.InvalidElementId;\r\n               reusedLevel = true;\r\n            }\r\n         }\r\n         else\r\n         {\r\n            foundLevel = true;\r\n         }\r\n\r\n         double referenceElevation = GetReferenceElevation();\r\n         double totalElevation = (ObjectLocation?.TotalTransformAfterOffset?.Origin.Z ?? 0.0) + referenceElevation;\r\n\r\n         if (level == null)\r\n         {\r\n            level = Level.Create(doc, totalElevation);\r\n         }\r\n         else\r\n         {\r\n            if (Importer.TheCache.ConstrainedLevels.Contains(level.Id))\r\n            {\r\n               if (level.Elevation == totalElevation)\r\n               {\r\n                  Importer.TheCache.UseElement(level);\r\n                  Importer.TheCache.ConstrainedLevels.Remove(level.Id);\r\n               }\r\n               else\r\n               {\r\n                  level = Level.Create(doc, totalElevation);\r\n               }\r\n            }\r\n            else\r\n            {\r\n               level.Elevation = totalElevation;\r\n            }\r\n         }\r\n\r\n         if (level != null)\r\n         {\r\n            CreatedElementId = level.Id;\r\n         }\r\n\r\n         if (CreatedElementId != ElementId.InvalidElementId)\r\n         {\r\n            if (!foundLevel)\r\n            {\r\n               if (!reusedLevel)\r\n               {\r\n                  ElementId viewPlanTypeId = IFCBuildingStorey.GetViewPlanTypeId(doc);\r\n                  if (viewPlanTypeId != ElementId.InvalidElementId)\r\n                  {\r\n                     ViewPlan viewPlan = ViewPlan.Create(doc, viewPlanTypeId, CreatedElementId);\r\n                     if (viewPlan != null)\r\n                        CreatedViewId = viewPlan.Id;\r\n                  }\r\n\r\n                  if (CreatedViewId == ElementId.InvalidElementId)\r\n                     Importer.TheLog.LogAssociatedCreationError(this, typeof(ViewPlan));\r\n               }\r\n               else\r\n               {\r\n                  if (doc.ActiveView != null)\r\n                     CreatedViewId = doc.ActiveView.Id;\r\n               }\r\n            }\r\n         }\r\n         else\r\n            Importer.TheLog.LogCreationError(this, null, false);\r\n\r\n         TraverseSubElements(doc);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the element ids created for this entity, for summary logging.\r\n      /// </summary>\r\n      /// <param name=\"createdElementIds\">The creation list.</param>\r\n      /// <remarks>May contain InvalidElementId; the caller is expected to remove it.</remarks>\r\n      public override void GetCreatedElementIds(ISet<ElementId> createdElementIds)\r\n      {\r\n         base.GetCreatedElementIds(createdElementIds);\r\n         if (CreatedViewId != ElementId.InvalidElementId)\r\n            createdElementIds.Add(CreatedViewId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcBuildingStorey attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcIFCBuildingStorey\">The IfcBuildingStorey handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcIFCBuildingStorey)\r\n      {\r\n         base.Process(ifcIFCBuildingStorey);\r\n\r\n         Elevation = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(ifcIFCBuildingStorey, \"Elevation\", 0.0);\r\n      }\r\n\r\n      public override void PostProcess()\r\n      {\r\n         TryToFixFarawayOrigin();\r\n         base.PostProcess();\r\n      }\r\n\r\n      /// <summary>\r\n      /// The elevation.\r\n      /// </summary>\r\n      public double Elevation { get; protected set; } = 0.0;\r\n\r\n      /// <summary>\r\n      /// Processes an IfcBuildingStorey object.\r\n      /// </summary>\r\n      /// <param name=\"ifcBuildingStorey\">The IfcBuildingStorey handle.</param>\r\n      /// <returns>The IFCBuildingStorey object.</returns>\r\n      public static IFCBuildingStorey ProcessIFCBuildingStorey(IFCAnyHandle ifcBuildingStorey)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcBuildingStorey))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcBuildingStorey);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity buildingStorey;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcBuildingStorey.StepId, out buildingStorey))\r\n            buildingStorey = new IFCBuildingStorey(ifcBuildingStorey);\r\n         return (buildingStorey as IFCBuildingStorey);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCCSGSolid.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCCSGSolid : IFCSolidModel\r\n   {\r\n      public IFCBooleanResult TreeRootExpression { get; protected set; } = null;\r\n      \r\n      protected IFCCSGSolid()\r\n      {\r\n      }\r\n\r\n      protected override IList<GeometryObject> CreateGeometryInternal(\r\n         IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid)\r\n      {\r\n         if (TreeRootExpression != null)\r\n            return TreeRootExpression.CreateGeometry(shapeEditScope, scaledLcs, guid);\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n\r\n         IList<GeometryObject> csgGeometries = CreateGeometryInternal(shapeEditScope, scaledLcs, guid);\r\n         if (csgGeometries != null)\r\n         {\r\n            foreach (GeometryObject csgGeometry in csgGeometries)\r\n            {\r\n               shapeEditScope.AddGeometry(IFCSolidInfo.Create(Id, csgGeometry));\r\n            }\r\n         }\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle solid)\r\n      {\r\n         base.Process(solid);\r\n\r\n         IFCAnyHandle treeRootExpression = IFCImportHandleUtil.GetRequiredInstanceAttribute(solid, \"TreeRootExpression\", false);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(treeRootExpression))\r\n         {\r\n            if (IFCAnyHandleUtil.IsValidSubTypeOf(treeRootExpression, IFCEntityType.IfcBooleanResult))\r\n               TreeRootExpression = IFCBooleanResult.ProcessIFCBooleanResult(treeRootExpression);\r\n            else\r\n               Importer.TheLog.LogUnhandledSubTypeError(treeRootExpression, \"IfcCsgSelect\", false);\r\n         }\r\n      }\r\n\r\n      protected IFCCSGSolid(IFCAnyHandle solid)\r\n      {\r\n         Process(solid);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCCSGSolid object from a handle of type IfcCSGSolid.\r\n      /// </summary>\r\n      /// <param name=\"ifcSweptAreaSolid\">The IFC handle.</param>\r\n      /// <returns>The IFCCSGSolid object.</returns>\r\n      public static IFCCSGSolid ProcessIFCCSGSolid(IFCAnyHandle ifcCSGSolid)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcCSGSolid))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcCsgSolid);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity csgSolid;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcCSGSolid.StepId, out csgSolid))\r\n            csgSolid = new IFCCSGSolid(ifcCSGSolid);\r\n\r\n         return (csgSolid as IFCCSGSolid);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCCartesianPointList3D.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents an IfcCartesianPointList.\r\n   /// </summary>\r\n   /// <remarks>This can be either a IfcCartesianPointList2D or a IfcCartesianPoint3D.\r\n   /// Both will be converted to XYZ values.</remarks>\r\n   public class IFCCartesianPointList : IFCRepresentationItem\r\n   {\r\n      IList<XYZ> m_CoordList = null;\r\n\r\n      protected IFCCartesianPointList()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// The list of vertices, where the vertices are represented as an IList of doubles.\r\n      /// </summary>\r\n      public IList<XYZ> CoordList\r\n      {\r\n         get { return m_CoordList; }\r\n         protected set { m_CoordList = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create IFCCartesianPointList instance\r\n      /// </summary>\r\n      /// <param name=\"item\">The handle</param>\r\n      protected IFCCartesianPointList(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Process the IfcCartesianPointList handle.\r\n      /// </summary>\r\n      /// <param name=\"item\">The handle</param>\r\n      protected override void Process(IFCAnyHandle item)\r\n      {\r\n         base.Process(item);\r\n\r\n         CoordList = new List<XYZ>();\r\n\r\n         IList<IList<double>> coordList = IFCImportHandleUtil.GetListOfListOfDoubleAttribute(item, \"CoordList\");\r\n         if (coordList != null)\r\n         {\r\n            foreach (IList<double> coord in coordList)\r\n            {\r\n               // TODO: we expect size to be 2 or 3.  Warn if not?\r\n               if (coord == null)\r\n                  continue;\r\n\r\n               int size = coord.Count;\r\n               CoordList.Add(new XYZ(\r\n                  (size > 0 ? IFCUnitUtil.ScaleLength(coord[0]) : 0.0),\r\n                  (size > 1 ? IFCUnitUtil.ScaleLength(coord[1]) : 0.0),\r\n                  (size > 2 ? IFCUnitUtil.ScaleLength(coord[2]) : 0.0)));\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Accept the handle for IFCCartesianPointList and return the instance (creating it if not yet created)\r\n      /// </summary>\r\n      /// <param name=\"ifcCartesianPointList\">The handle.</param>\r\n      /// <returns>The associated IFCCartesianPointList class.</returns>\r\n      public static IFCCartesianPointList ProcessIFCCartesianPointList(IFCAnyHandle ifcCartesianPointList)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcCartesianPointList))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcCartesianPointList);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity cartesianPointList;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcCartesianPointList.StepId, out cartesianPointList))\r\n            cartesianPointList = new IFCCartesianPointList(ifcCartesianPointList);\r\n         return (cartesianPointList as IFCCartesianPointList);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCCartesianTransformOperator.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCCartesianTransformOperator : IFCRepresentationItem\r\n   {\r\n      Transform m_BaseTransform = Transform.Identity;\r\n\r\n      double m_Scale = 1.0;\r\n\r\n      double? m_ScaleY = null;\r\n\r\n      double? m_ScaleZ = null;\r\n\r\n      /// <summary>\r\n      /// The transform associated with the IfcCartesianTransformOperator\r\n      /// </summary>\r\n      public Transform Transform\r\n      {\r\n         get { return m_BaseTransform; }\r\n         protected set { m_BaseTransform = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The base scale for all dimensions, if ScaleY and ScaleZ are not set; otherwise scale in X direction.\r\n      /// </summary>\r\n      public double Scale\r\n      {\r\n         get { return m_Scale; }\r\n         protected set { m_Scale = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The optional base scale for Y direction.\r\n      /// </summary>\r\n      public double? ScaleY\r\n      {\r\n         get { return m_ScaleY; }\r\n         protected set { m_ScaleY = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The optional base scale for Z direction.\r\n      /// </summary>\r\n      public double? ScaleZ\r\n      {\r\n         get { return m_ScaleZ; }\r\n         protected set { m_ScaleZ = value; }\r\n      }\r\n\r\n      protected IFCCartesianTransformOperator()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculate the X axis of a transform from the Z axis and an optional X direction, according to the IFC2x3 schema definition.\r\n      /// </summary>\r\n      /// <param name=\"zAxis\">The required, normalized Z axis.</param>\r\n      /// <param name=\"originalXAxis\">The optional X axis from the IFC file, used as a guide.</param>\r\n      /// <param name=\"id\">The id of the IfcCartesianTransformOperator entity, used for error reporting.</param>\r\n      /// <returns>A normalized vector orthogonal to the input zAxis.</returns>\r\n      private XYZ CalculateXAxisFromZAxis(XYZ zAxis, XYZ originalXAxis, int id)\r\n      {\r\n         // Assumes that zAxis exists and is normalized.\r\n         if (zAxis == null)\r\n            return null;\r\n\r\n         XYZ xAxis = null;\r\n         if (originalXAxis == null)\r\n         {\r\n            // The IFC calculation checks that zAxis is not (1,0,0).  We also check (-1,0,0).\r\n            if (!MathUtil.IsAlmostEqual(Math.Abs(zAxis.X), 1.0))\r\n            {\r\n               xAxis = XYZ.BasisX;\r\n            }\r\n            else\r\n            {\r\n               if (MathUtil.IsAlmostEqual(zAxis.X, -1.0))\r\n                  Importer.TheLog.LogWarning(id, \"The IFC schema definition would generate an incorrect X basis vector in this case.  Correcting.\", false);\r\n               xAxis = XYZ.BasisY;\r\n            }\r\n         }\r\n         else\r\n         {\r\n            if (MathUtil.VectorsAreParallel(originalXAxis, zAxis))\r\n            {\r\n               // This may be because X and Z are both set to the same vector, or Z was unset and set to +Z, which is the same as originalXAxis.  We'll correct for this in the caller.\r\n               return null;\r\n            }\r\n\r\n            xAxis = originalXAxis.Normalize();\r\n         }\r\n\r\n         xAxis = (xAxis - (xAxis.DotProduct(zAxis) * zAxis)).Normalize();\r\n         return xAxis;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculate a transform from zero or more axis vectors, according to the IFC2x3 schema definition.\r\n      /// </summary>\r\n      /// <param name=\"axis1\">The X axis, or null.</param>\r\n      /// <param name=\"axis2\">The Y axis, or null.</param>\r\n      /// <param name=\"axis3\">The Z axis, or null.</param>\r\n      /// <param name=\"orig\">The origin.</param>\r\n      /// <param name=\"dim\">The dimensionality of the arguments (either 2 or 3).  If dim is 2, then axis3 will be ignored, as will\r\n      /// the Z component of axis1 and axis2.</param>\r\n      /// <param name=\"id\">The id of the IfcCartesianTransformOperator entity, used for error reporting.</param>\r\n      /// <returns>The transform.</returns>\r\n      /// <remarks>This is an adaption of the IfcBaseAxis function in the IFC2x3_TC1.exp file that defines\r\n      /// how the basis vectors should be calculated for IfcCartesianTransformOperator.</remarks>\r\n      private Transform CreateTransformUsingIfcBaseAxisCalculation(XYZ axis1, XYZ axis2, XYZ axis3, XYZ orig, int dim, int id)\r\n      {\r\n         XYZ xAxis = null;\r\n         XYZ yAxis = null;\r\n         XYZ zAxis = null;\r\n\r\n         if (dim == 3)\r\n         {\r\n            // Only do the calculations below if any of the vectors are missing, or the 3 vectors aren't orthonormal.\r\n            // The input vectors should already be normalized.\r\n            if (axis1 == null || axis2 == null || axis3 == null ||\r\n               !MathUtil.VectorsAreOrthogonal(axis1, axis2) ||\r\n               !MathUtil.VectorsAreOrthogonal(axis1, axis3) ||\r\n               !MathUtil.VectorsAreOrthogonal(axis2, axis3))\r\n            {\r\n               // Note that the IFC schema definition does not take into account the case where the zAxis isn't defined, and the xAxis is +/-Z.\r\n               zAxis = (axis3 == null) ? XYZ.BasisZ : axis3.Normalize();\r\n               xAxis = CalculateXAxisFromZAxis(zAxis, axis1, id);\r\n               if (xAxis == null)\r\n               {\r\n                  // This may be because axis1 and axis3 are both set to the same vector, or axis3 was unset and axis1 was set to +/-Z.  Correct this below.\r\n                  Importer.TheLog.LogWarning(id, \"The IFC schema definition would generate an incorrect X basis vector in this case.  Correcting.\", false);\r\n                  if (axis3 == null)\r\n                  {\r\n                     if (axis1 == null)\r\n                        Importer.TheLog.LogError(id, \"Invalid basis vectors.  Can't correct, aborting.\", true);\r\n                     xAxis = axis1;\r\n                     zAxis = XYZ.BasisY;\r\n                  }\r\n                  else\r\n                     xAxis = XYZ.BasisX;\r\n               }\r\n\r\n               yAxis = zAxis.CrossProduct(xAxis);\r\n\r\n               // Note that according to the IFC schema, the axis2 argument is effectively ignored.  We'll check it for consistency.\r\n               if (axis2 != null)\r\n               {\r\n                  int vecsAreParallel = MathUtil.VectorsAreParallel2(yAxis, axis2);\r\n                  if (vecsAreParallel != 1)\r\n                  {\r\n                     // In the specific case where the vectors are anti-parallel, we'll create a mirrored transform.\r\n                     if (vecsAreParallel == -1)\r\n                        yAxis = axis2;\r\n                     else\r\n                        Importer.TheLog.LogWarning(id, \"Inconsistent basis vectors based on the IFC schema definition may cause a difference in orientation for related objects.\", false);\r\n                  }\r\n               }\r\n            }\r\n            else\r\n            {\r\n               xAxis = axis1;\r\n               yAxis = axis2;\r\n               zAxis = axis3;\r\n            }\r\n         }\r\n         else if (dim == 2)\r\n         {\r\n            if (axis1 != null && !MathUtil.IsAlmostZero(xAxis.Z))\r\n               Importer.TheLog.LogWarning(id, \"Invalid X basis vector, ignoring.\", true);\r\n\r\n            if (axis2 != null && !MathUtil.IsAlmostZero(yAxis.Z))\r\n               Importer.TheLog.LogWarning(id, \"Invalid Y basis vector, ignoring.\", true);\r\n\r\n            zAxis = XYZ.BasisZ;\r\n\r\n            if (axis1 != null)\r\n            {\r\n               xAxis = axis1.Normalize();\r\n               yAxis = new XYZ(-xAxis.Y, xAxis.X, 0.0);\r\n\r\n               if (axis2 != null)\r\n               {\r\n                  double dot = axis2.DotProduct(yAxis);\r\n                  if (dot < 0.0)\r\n                     yAxis = -yAxis;\r\n               }\r\n            }\r\n            else if (axis2 != null)\r\n            {\r\n               yAxis = axis2.Normalize();\r\n               xAxis = new XYZ(yAxis.Y, -yAxis.X, 0.0);\r\n            }\r\n            else\r\n            {\r\n               xAxis = XYZ.BasisX;\r\n               yAxis = XYZ.BasisY;\r\n            }\r\n         }\r\n         else\r\n            Importer.TheLog.LogError(id, \"Can't handle dimensionality of \" + dim + \" in calculating basis vector.\", true);\r\n\r\n         Transform transform = Transform.CreateTranslation(orig);\r\n         transform.BasisX = xAxis;\r\n         transform.BasisY = yAxis;\r\n         transform.BasisZ = zAxis;\r\n         return transform;\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle item)\r\n      {\r\n         base.Process(item);\r\n\r\n         IFCAnyHandle localOrigin = IFCImportHandleUtil.GetRequiredInstanceAttribute(item, \"LocalOrigin\", false);\r\n         XYZ origin = null;\r\n         if (localOrigin != null)\r\n            origin = IFCPoint.ProcessScaledLengthIFCCartesianPoint(localOrigin);\r\n         else\r\n            origin = XYZ.Zero;\r\n\r\n         IFCAnyHandle axis1 = IFCImportHandleUtil.GetOptionalInstanceAttribute(item, \"Axis1\");\r\n         XYZ xAxis = null;\r\n         if (axis1 != null)\r\n            xAxis = IFCPoint.ProcessNormalizedIFCDirection(axis1);\r\n\r\n         IFCAnyHandle axis2 = IFCImportHandleUtil.GetOptionalInstanceAttribute(item, \"Axis2\");\r\n         XYZ yAxis = null;\r\n         if (axis2 != null)\r\n            yAxis = IFCPoint.ProcessNormalizedIFCDirection(axis2);\r\n\r\n         Scale = IFCImportHandleUtil.GetOptionalRealAttribute(item, \"Scale\", 1.0);\r\n\r\n         XYZ zAxis = null;\r\n\r\n         // Assume that the dimensionality of the IfcCartesianTransformationOperator is 2, unless determined otherwise below.\r\n         int dim = 2;\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(item, IFCEntityType.IfcCartesianTransformationOperator2DnonUniform))\r\n            ScaleY = IFCImportHandleUtil.GetOptionalRealAttribute(item, \"Scale2\", Scale);\r\n         else if (IFCAnyHandleUtil.IsValidSubTypeOf(item, IFCEntityType.IfcCartesianTransformationOperator3D))\r\n         {\r\n            dim = 3;\r\n\r\n            IFCAnyHandle axis3 = IFCImportHandleUtil.GetOptionalInstanceAttribute(item, \"Axis3\");\r\n            if (axis3 != null)\r\n               zAxis = IFCPoint.ProcessNormalizedIFCDirection(axis3);\r\n            if (IFCAnyHandleUtil.IsSubTypeOf(item, IFCEntityType.IfcCartesianTransformationOperator3DnonUniform))\r\n            {\r\n               ScaleY = IFCImportHandleUtil.GetOptionalRealAttribute(item, \"Scale2\", Scale);\r\n               ScaleZ = IFCImportHandleUtil.GetOptionalRealAttribute(item, \"Scale3\", Scale);\r\n            }\r\n         }\r\n\r\n         // Set the axes based on what is specified.\r\n         Transform = CreateTransformUsingIfcBaseAxisCalculation(xAxis, yAxis, zAxis, origin, dim, Id);\r\n      }\r\n\r\n      protected IFCCartesianTransformOperator(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Allows creation of \"identity\" IFCCartesianTransformOperator if no value provided.\r\n      /// </summary>\r\n      /// <returns>The IFCCartesianTransformOperator.</returns>\r\n      public static IFCCartesianTransformOperator ProcessIFCCartesianTransformOperator()\r\n      {\r\n         return new IFCCartesianTransformOperator();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCCartesianTransformOperator corresponding to an IFC handle.\r\n      /// </summary>\r\n      /// <param name=\"item\">The handle.</param>\r\n      /// <returns>The IFCCartesianTransformOperator.</returns>\r\n      public static IFCCartesianTransformOperator ProcessIFCCartesianTransformOperator(IFCAnyHandle ifcTransformOperator)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcTransformOperator))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcCartesianTransformationOperator);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity transformOperator;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcTransformOperator.StepId, out transformOperator))\r\n            transformOperator = new IFCCartesianTransformOperator(ifcTransformOperator);\r\n         return (transformOperator as IFCCartesianTransformOperator);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCCircle.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCCircle entity\r\n   /// </summary>\r\n   public class IFCCircle : IFCConic\r\n   {\r\n      protected IFCCircle()\r\n      {\r\n      }\r\n\r\n      protected IFCCircle(IFCAnyHandle circle)\r\n      {\r\n         Process(circle);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcCurve)\r\n      {\r\n         base.Process(ifcCurve);\r\n\r\n         bool found = false;\r\n         double radius = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(ifcCurve, \"Radius\", out found);\r\n         if (!found)\r\n         {\r\n            Importer.TheLog.LogError(ifcCurve.StepId, \"Cannot find the radius of this circle\", false);\r\n            return;\r\n         }\r\n\r\n         if (!IFCGeometryUtil.IsValidRadius(radius))\r\n         {\r\n            Importer.TheLog.LogError(ifcCurve.StepId, \"Invalid radius for this circle: \" + radius, false);\r\n            return;\r\n         }\r\n\r\n         try\r\n         {\r\n            SetCurve(Arc.Create(Position.Origin, radius, 0, 2.0 * Math.PI, Position.BasisX, Position.BasisY));\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            if (ex.Message.Contains(\"too small\"))\r\n            {\r\n               string lengthAsString = IFCUnitUtil.FormatLengthAsString(radius);\r\n               Importer.TheLog.LogError(Id, \"Found a circle with radius of \" + lengthAsString + \", ignoring.\", false);\r\n            }\r\n            else\r\n            {\r\n               Importer.TheLog.LogError(Id, ex.Message, false);\r\n            }\r\n            SetCurve(null);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCCircle from a handle of type IfcCircle\r\n      /// </summary>\r\n      /// <param name=\"ifcCircle\">The IFC handle</param>\r\n      /// <returns>The IFCCircle object</returns>\r\n      public static IFCCircle ProcessIFCCircle(IFCAnyHandle ifcCircle)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcCircle))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcCircle);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity circle = null;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcCircle.StepId, out circle))\r\n            circle = new IFCCircle(ifcCircle);\r\n\r\n         return (circle as IFCCircle);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCClosedShell.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCClosedShell : IFCConnectedFaceSet\r\n   {\r\n      protected IFCClosedShell()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcClosedShell)\r\n      {\r\n         base.Process(ifcClosedShell);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n      }\r\n\r\n      protected IFCClosedShell(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCClosedShell object from a handle of type IfcClosedShell.\r\n      /// </summary>\r\n      /// <param name=\"ifcClosedShell\">The IFC handle.</param>\r\n      /// <returns>The IFClosedShell object.</returns>\r\n      public static IFCClosedShell ProcessIFCClosedShell(IFCAnyHandle ifcClosedShell)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcClosedShell))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcClosedShell);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity closedShell;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcClosedShell.StepId, out closedShell))\r\n            closedShell = new IFCClosedShell(ifcClosedShell);\r\n         return (closedShell as IFCClosedShell);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCColourRgb.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class representing an IfcColourRgb entity.\r\n   /// </summary>\r\n   public class IFCColourRgb : IFCColourSpecification\r\n   {\r\n      private double m_NormalisedRed = 0.5;\r\n\r\n      private double m_NormalisedGreen = 0.5;\r\n\r\n      private double m_NormalisedBlue = 0.5;\r\n\r\n      protected IFCColourRgb()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the \"raw\" normalised red value.\r\n      /// </summary>\r\n      public double NormalisedRed\r\n      {\r\n         get { return m_NormalisedRed; }\r\n         protected set { m_NormalisedRed = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the \"raw\" normalised blue value.\r\n      /// </summary>\r\n      public double NormalisedBlue\r\n      {\r\n         get { return m_NormalisedBlue; }\r\n         protected set { m_NormalisedBlue = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the \"raw\" normalised green value.\r\n      /// </summary>\r\n      public double NormalisedGreen\r\n      {\r\n         get { return m_NormalisedGreen; }\r\n         protected set { m_NormalisedGreen = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the RGB associated to the color.\r\n      /// </summary>\r\n      /// <returns>The Color value.</returns>\r\n      protected override Color CreateColor()\r\n      {\r\n         byte red = (byte)(NormalisedRed * 255 + 0.5);\r\n         byte green = (byte)(NormalisedGreen * 255 + 0.5);\r\n         byte blue = (byte)(NormalisedBlue * 255 + 0.5);\r\n         return new Color(red, green, blue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the RGB associated to the color, scaled by a normalised factor.\r\n      /// </summary>\r\n      /// <param name=\"factor\">The normalised factor from 0 to 1.</param>\r\n      /// <returns>The Color value.</returns>\r\n      public Color GetScaledColor(double factor)\r\n      {\r\n         if (factor < MathUtil.Eps())\r\n         {\r\n            Importer.TheLog.LogWarning(Id, \"Invalid negative scaling factor of \" + factor + \", defaulting to black.\", true);\r\n            return new Color(0, 0, 0);\r\n         }\r\n\r\n         Color origColor = GetColor();\r\n         if (origColor == null)\r\n         {\r\n            Importer.TheLog.LogError(Id, \"Couldn't create color, default to grey.\", false);\r\n            return new Color(127, 127, 127);\r\n         }\r\n\r\n         if (factor > 1.0 + MathUtil.Eps())\r\n         {\r\n            Importer.TheLog.LogWarning(Id, \"Invalid normalised scaling factor of \" + factor + \", defaulting to original color\", true);\r\n            return origColor;\r\n         }\r\n\r\n         byte red = (byte)(origColor.Red * 255 * factor + 0.5);\r\n         byte green = (byte)(origColor.Green * 255 * factor + 0.5);\r\n         byte blue = (byte)(origColor.Blue * 255 * factor + 0.5);\r\n         return new Color(red, green, blue);\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle item)\r\n      {\r\n         base.Process(item);\r\n\r\n         NormalisedRed = IFCImportHandleUtil.GetOptionalNormalisedRatioAttribute(item, \"Red\", 0.5);\r\n         NormalisedGreen = IFCImportHandleUtil.GetOptionalNormalisedRatioAttribute(item, \"Green\", 0.5);\r\n         NormalisedBlue = IFCImportHandleUtil.GetOptionalNormalisedRatioAttribute(item, \"Blue\", 0.5);\r\n      }\r\n\r\n      protected IFCColourRgb(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcColourRgb entity handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcColourRgb\">The IfcColourRgb handle.</param>\r\n      /// <returns>The IFCColourRgb object.</returns>\r\n      public static IFCColourRgb ProcessIFCColourRgb(IFCAnyHandle ifcColourRgb)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcColourRgb))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcColourRgb);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity colourRgb;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcColourRgb.StepId, out colourRgb))\r\n            colourRgb = new IFCColourRgb(ifcColourRgb);\r\n         return (colourRgb as IFCColourRgb);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCColourRgbList.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System.Collections.Generic;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Import.Utility;\nusing System;\n\nnamespace Revit.IFC.Import.Data\n{\n   public class IFCColourRgbList : IFCPresentationItem\n   {\n      /// <summary>\n      /// List of Colours.\n      /// Each Colour is a triple (Red, Green, Blue).  As per IFC4 spec, this information is stored as a list of lists.\n      /// There are no restrictions on the outer list, but the inner list must have three and only three entries.\n      /// </summary>\n      public IList<IList<double>> ColourList { get; protected set; } = null;\n\n      /// <summary>\n      /// Allows easy access to each Component of a given Colour in the ColourList.\n      /// </summary>\n      private enum ColorComponent\n      {\n         Red = 0,\n         Green = 1,\n         Blue = 2\n      }\n\n      protected IFCColourRgbList()\n      {\n      }\n\n      protected IFCColourRgbList (IFCAnyHandle item)\n      {\n         Process(item);\n      }\n\n      protected override void Process (IFCAnyHandle ifcColourRgbList)\n      {\n         base.Process(ifcColourRgbList);\n\n         IList<IList<double>> colourList = IFCImportHandleUtil.GetListOfListOfDoubleAttribute(ifcColourRgbList, \"ColourList\");\n         if ((colourList?.Count ?? 0) > 0)\n            ColourList = colourList;\n\n      }\n\n      /// <summary>\n      /// Retrieves the color at index specified by the input parameter in a usable format.\n      /// </summary>\n      /// <param name=\"colourIndex\">Index within the IfcColourRgbList.  This should be in the range [1,n] (n = number of items in IFCColourRgbList).</param>\n      /// <returns>Color representing the colour at the index.</returns>\n      public Color GetColor(int colourIndex)\n      {\n         Color color = null;\n         int count = ColourList?.Count ?? 0;\n         if (colourIndex > 0 && colourIndex <= count)\n         {\n            IList<double> colorAtIndex = ColourList[colourIndex-1];\n            byte red = (byte)(Math.Round(colorAtIndex[(int)ColorComponent.Red] * 255));\n            byte green = (byte)(Math.Round(colorAtIndex[(int)ColorComponent.Green] * 255));\n            byte blue = (byte)(Math.Round(colorAtIndex[(int)ColorComponent.Blue] * 255));\n            color = new Color(red, green, blue);\n         }\n\n         return color;\n      }\n\n      /// <summary>\n      /// Start processing the IFCColourRgbList\n      /// </summary>\n      /// <param name=\"ifcColourRgbList\">the handle</param>\n      /// <returns></returns>\n      public static IFCColourRgbList ProcessIFCColourRgbList (IFCAnyHandle ifcColourRgbList)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue (ifcColourRgbList))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcColourRgbList);\n            return null;\n         }\n\n         IFCEntity colourRgbList;\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcColourRgbList.StepId, out colourRgbList))\n            colourRgbList = new IFCColourRgbList(ifcColourRgbList);\n\n         return (colourRgbList as IFCColourRgbList);\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCColourSpecification.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class representing the abstract IfcColourSpecification entity.\r\n   /// </summary>\r\n   public abstract class IFCColourSpecification : IFCEntity\r\n   {\r\n      private string m_Name = null;\r\n\r\n      // cached color value.\r\n      private Color m_Color = null;\r\n\r\n      protected IFCColourSpecification()\r\n      {\r\n      }\r\n\r\n      protected abstract Color CreateColor();\r\n\r\n      /// <summary>\r\n      /// Get the optional name of the color.\r\n      /// </summary>\r\n      public string Name\r\n      {\r\n         get { return m_Name; }\r\n         protected set { m_Name = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the RGB associated to the color.\r\n      /// </summary>\r\n      /// <returns>The Color value.</returns>\r\n      public Color GetColor()\r\n      {\r\n         if (m_Color == null)\r\n            m_Color = CreateColor();\r\n\r\n         return m_Color;\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle item)\r\n      {\r\n         base.Process(item);\r\n\r\n         Name = IFCImportHandleUtil.GetOptionalStringAttribute(item, \"Name\", null);\r\n      }\r\n\r\n      protected IFCColourSpecification(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcColourSpecification entity handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcColourSpecification\">The IfcColourSpecification handle.</param>\r\n      /// <returns>The IFCColourSpecification object.</returns>\r\n      public static IFCColourSpecification ProcessIFCColourSpecification(IFCAnyHandle ifcColourSpecification)\r\n      {\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcColourSpecification, IFCEntityType.IfcColourRgb))\r\n            return IFCColourRgb.ProcessIFCColourRgb(ifcColourSpecification);\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcColourSpecification, IFCEntityType.IfcColourSpecification, true);\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCComplexProperty.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcComplexProperty.\r\n   /// </summary>-\r\n   public class IFCComplexProperty : IFCProperty\r\n   {\r\n      /// <summary>\r\n      /// The usage name.\r\n      /// </summary>\r\n      public string UsageName { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The IFC properties.\r\n      /// </summary>\r\n      public IDictionary<string, IFCProperty> IFCProperties { get; } = new Dictionary<string, IFCProperty>();\r\n      \r\n      /// <summary>\r\n      /// Returns the property value as a string, for Set().\r\n      /// </summary>\r\n      /// <returns>The property value as a string.</returns>\r\n      public override string PropertyValueAsString()\r\n      {\r\n         int numValues = IFCProperties.Count;\r\n         if (numValues == 0)\r\n            return \"\";\r\n\r\n         string propertyValue = \"\";\r\n         foreach (KeyValuePair<string, IFCProperty> property in IFCProperties)\r\n         {\r\n            if (propertyValue != \"\")\r\n               propertyValue += \"; \";\r\n            propertyValue += property.Key + \": \" + property.Value.PropertyValueAsString();\r\n         }\r\n\r\n         return propertyValue;\r\n      }\r\n\r\n      protected IFCComplexProperty()\r\n      {\r\n      }\r\n\r\n      protected IFCComplexProperty(IFCAnyHandle property)\r\n      {\r\n         Process(property);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle complexProperty)\r\n      {\r\n         base.Process(complexProperty);\r\n         Name = IFCAnyHandleUtil.GetStringAttribute(complexProperty, \"Name\");\r\n         UsageName = IFCAnyHandleUtil.GetStringAttribute(complexProperty, \"UsageName\");\r\n\r\n         HashSet<IFCAnyHandle> properties = IFCAnyHandleUtil.GetValidAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(complexProperty, \"HasProperties\");\r\n\r\n         foreach (IFCAnyHandle property in properties)\r\n         {\r\n            IFCProperty containedProperty = IFCProperty.ProcessIFCProperty(property);\r\n            if (containedProperty != null)\r\n               IFCProperties[containedProperty.Name] = containedProperty;\r\n         }\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC complex property.\r\n      /// </summary>\r\n      /// <param name=\"complexProperty\">The IfcComplexProperty object.</param>\r\n      /// <returns>The IFCComplexProperty object.</returns>\r\n      public static IFCComplexProperty ProcessIFCComplexProperty(IFCAnyHandle ifcComplexProperty)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcComplexProperty))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcComplexProperty);\r\n            return null;\r\n         }\r\n\r\n         if (!IFCAnyHandleUtil.IsValidSubTypeOf(ifcComplexProperty, IFCEntityType.IfcComplexProperty))\r\n         {\r\n            //LOG: ERROR: Not an IfcComplexProperty.\r\n            return null;\r\n         }\r\n\r\n         IFCEntity complexProperty;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcComplexProperty.StepId, out complexProperty))\r\n            complexProperty = new IFCComplexProperty(ifcComplexProperty);\r\n         return (complexProperty as IFCComplexProperty);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCCompositeCurve.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nusing TemporaryVerboseLogging = Revit.IFC.Import.Utility.IFCImportOptions.TemporaryVerboseLogging;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCCompositeCurve entity\r\n   /// </summary>\r\n   public class IFCCompositeCurve : IFCBoundedCurve\r\n   {\r\n      private IList<IFCCurve> m_Segments = null;\r\n\r\n      /// <summary>\r\n      /// The list of curve segments for this IfcCompositeCurve.\r\n      /// </summary>\r\n      public IList<IFCCurve> Segments\r\n      {\r\n         get\r\n         {\r\n            if (m_Segments == null)\r\n               m_Segments = new List<IFCCurve>();\r\n            return m_Segments;\r\n         }\r\n      }\r\n\r\n      protected IFCCompositeCurve()\r\n      {\r\n      }\r\n\r\n      protected IFCCompositeCurve(IFCAnyHandle compositeCurve)\r\n      {\r\n         Process(compositeCurve);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Class to manage replacing tiny consecutive curve segments with a single line segment.\r\n      /// </summary>\r\n      class ShortGapRepairer\r\n      {\r\n         /// <summary>\r\n         /// Constructor.\r\n         /// </summary>\r\n         /// <param name=\"shortCurveTolerance\">Minimum allowed length for a Revit Curve.</param>\r\n         public ShortGapRepairer(double shortCurveTolerance)\r\n         {\r\n            ShortCurveTolerance = shortCurveTolerance;\r\n         }\r\n\r\n         /// <summary>\r\n         /// Add another short curve segment to a new or existing gap, and create a line segment if possible.\r\n         /// </summary>\r\n         /// <param name=\"startPoint\">The start point of the new segment.</param>\r\n         /// <param name=\"endPoint\">The end point of the new segment.</param>\r\n         /// <returns>A Revit Line, if the new segment makes the existing gap large enough to repair, or null.</returns>\r\n         public Line AddToGap(int id, XYZ startPoint, XYZ endPoint)\r\n         {\r\n            if (startPoint == null || endPoint == null)\r\n            {\r\n               ClearGapInformation();\r\n               return null;\r\n            }\r\n\r\n            if (StartGapPoint == null)\r\n            {\r\n               FirstSegmentStepId = id;\r\n               StartGapPoint = startPoint;\r\n               EndGapPoint = endPoint;\r\n               return null;\r\n            }\r\n\r\n            double distGapEndPtToNextStartPt = EndGapPoint.DistanceTo(startPoint);\r\n            double distGapEndPtToNextEndPt = EndGapPoint.DistanceTo(endPoint);\r\n\r\n            double distGapStartPtToNextEndPt = StartGapPoint.DistanceTo(endPoint);\r\n            double distGapStartPtToNextStartPt = StartGapPoint.DistanceTo(startPoint);\r\n\r\n            double minStartGap = Math.Min(distGapStartPtToNextEndPt, distGapStartPtToNextStartPt);\r\n            double minEndGap = Math.Min(distGapEndPtToNextStartPt, distGapEndPtToNextEndPt);\r\n\r\n            double minGap = Math.Min(minStartGap, minEndGap);\r\n            if (minGap > MathUtil.SmallGap())\r\n            {\r\n               ClearGapInformation();\r\n               return null;\r\n            }\r\n\r\n            if (minEndGap < minStartGap)\r\n            {\r\n               if (distGapEndPtToNextStartPt < distGapEndPtToNextEndPt)\r\n                  EndGapPoint = endPoint;\r\n               else\r\n                  EndGapPoint = startPoint;\r\n            }\r\n            else\r\n            {\r\n               if (distGapStartPtToNextStartPt < distGapStartPtToNextEndPt)\r\n                  StartGapPoint = endPoint;\r\n               else\r\n                  StartGapPoint = startPoint;\r\n            }\r\n\r\n            if (StartGapPoint.DistanceTo(EndGapPoint) < ShortCurveTolerance + MathUtil.Eps())\r\n               return null;\r\n\r\n            Line gapLine = Line.CreateBound(StartGapPoint, EndGapPoint);\r\n            ClearGapInformation(true);\r\n            return gapLine;\r\n         }\r\n\r\n         /// <summary>\r\n         /// Clear any existing gap information.\r\n         /// </summary>\r\n         /// <param name=\"dontShowError\">If true, never show an error message.</param>\r\n         /// <returns>True if any information was removed, false otherwise.</returns>\r\n         public void ClearGapInformation(bool dontShowError = false)\r\n         {\r\n            StartGapPoint = null;\r\n            EndGapPoint = null;\r\n            if (!dontShowError && FirstSegmentStepId.HasValue)\r\n               Importer.TheLog.LogError(FirstSegmentStepId.Value, \"Curve segment is too short, ignoring.\", false);\r\n            FirstSegmentStepId = null;\r\n         }\r\n\r\n         private int? FirstSegmentStepId { get; set; } = null;\r\n\r\n         private double ShortCurveTolerance { get; set; } = 0.0;\r\n\r\n         private XYZ StartGapPoint { get; set; } = null;\r\n\r\n         private XYZ EndGapPoint { get; set; } = null;\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcCurve)\r\n      {\r\n         base.Process(ifcCurve);\r\n\r\n         // We are going to attempt minor repairs for small but reasonable gaps between Line/Line and Line/Arc pairs.  As such, we want to collect the\r\n         // curves before we create the curve loop.\r\n\r\n         IList<IFCAnyHandle> segments = IFCAnyHandleUtil.GetValidAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcCurve, \"Segments\");\r\n         if (segments == null)\r\n            Importer.TheLog.LogError(Id, \"Invalid IfcCompositeCurve with no segments.\", true);\r\n\r\n         double shortCurveTol = IFCImportFile.TheFile.ShortCurveTolerance;\r\n\r\n         // need List<> so that we can AddRange later.\r\n         List<Curve> curveSegments = new List<Curve>();\r\n         Segments.Clear();\r\n\r\n         ShortGapRepairer shortGapRepairer = new ShortGapRepairer(shortCurveTol);\r\n\r\n         foreach (IFCAnyHandle segment in segments)\r\n         {\r\n            IFCCurve currCurve = ProcessIFCCompositeCurveSegment(segment);\r\n\r\n            if (currCurve != null)\r\n            {\r\n               Segments.Add(currCurve);\r\n               IList<Curve> newCurves = currCurve.GetCurves();\r\n               if (newCurves != null && newCurves.Count != 0)\r\n               {\r\n                  curveSegments.AddRange(newCurves);\r\n                  // If we had a gap, we weren't able to correct it before getting new curves.\r\n                  shortGapRepairer.ClearGapInformation(true);\r\n               }\r\n               else\r\n               {\r\n                  Line gapRepairLine = shortGapRepairer.AddToGap(currCurve.Id,\r\n                     currCurve.BackupCurveStartLocation, currCurve.BackupCurveEndLocation);\r\n                  if (gapRepairLine != null)\r\n                     curveSegments.Add(gapRepairLine);\r\n               }\r\n            }\r\n         }\r\n\r\n         int numSegments = curveSegments.Count;\r\n         if (numSegments == 0)\r\n            Importer.TheLog.LogError(Id, \"Invalid IfcCompositeCurve with no segments.\", true);\r\n\r\n         try\r\n         {\r\n            // We are going to try to reverse or tweak segments as necessary to make the CurveLoop.\r\n            // For each curve, it is acceptable if it can be appended to the end of the existing loop, or prepended to its start, \r\n            // possibly after reversing the curve, and possibly with some tweaking.\r\n\r\n            // NOTE: we do not do any checks yet to repair the endpoints of the curveloop to make them closed.\r\n            // NOTE: this is not expected to be perfect with dirty data, but is expected to not change already valid data.\r\n\r\n            // curveLoopStartPoint and curveLoopEndPoint will change over time as we add new curves to the start or end of the CurveLoop.\r\n            XYZ curveLoopStartPoint = curveSegments[0].GetEndPoint(0);\r\n            XYZ curveLoopEndPoint = curveSegments[0].GetEndPoint(1);\r\n\r\n            // Internal code checks for gaps between curves at 1/10th of the vertex tolerance.\r\n            double vertexEps = IFCImportFile.TheFile.VertexTolerance / 10.0;\r\n\r\n            // This is intended to be \"relatively large\".  The idea here is that the user would rather have the information presented\r\n            // than thrown away because of a gap that is architecturally insignificant.\r\n            const double oneHundrethOfAFoot = 0.01;\r\n            double gapVertexEps = Math.Max(vertexEps, oneHundrethOfAFoot); // 1/100th of a foot, or 3.048 mm.\r\n\r\n            // canRepairFirst may change over time, as we may potentially add curves to the start of the CurveLoop.\r\n            bool canRepairFirst = (curveSegments[0] is Line);\r\n            for (int ii = 1; ii < numSegments; ii++)\r\n            {\r\n               XYZ nextStartPoint = curveSegments[ii].GetEndPoint(0);\r\n               XYZ nextEndPoint = curveSegments[ii].GetEndPoint(1);\r\n\r\n               // These will be set below.\r\n               bool attachNextSegmentToEnd = false;\r\n               bool reverseNextSegment = false;\r\n               double minGap = 0.0;\r\n\r\n               // Scoped to prevent distLoopEndPtToNextStartPt and others from being used later on.\r\n               {\r\n                  // Find the minimum gap between the current curve segment and the existing curve loop.  If it is too large, we will give up.\r\n                  double distLoopEndPtToNextStartPt = curveLoopEndPoint.DistanceTo(nextStartPoint);\r\n                  double distLoopEndPtToNextEndPt = curveLoopEndPoint.DistanceTo(nextEndPoint);\r\n\r\n                  double distLoopStartPtToNextEndPt = curveLoopStartPoint.DistanceTo(nextEndPoint);\r\n                  double distLoopStartPtToNextStartPt = curveLoopStartPoint.DistanceTo(nextStartPoint);\r\n\r\n                  // Determine the minimum gap between the two curves.  If it is too large, we'll give up before trying anything.\r\n                  double minStartGap = Math.Min(distLoopStartPtToNextEndPt, distLoopStartPtToNextStartPt);\r\n                  double minEndGap = Math.Min(distLoopEndPtToNextStartPt, distLoopEndPtToNextEndPt);\r\n\r\n                  minGap = Math.Min(minStartGap, minEndGap);\r\n\r\n                  // If the minimum distance between the two curves is greater than gapVertexEps (which is the larger of our two tolerances), \r\n                  // we can't fix the issue.\r\n                  if (minGap > gapVertexEps)\r\n                  {\r\n                     string lengthAsString = IFCUnitUtil.FormatLengthAsString(minGap);\r\n                     string maxGapAsString = IFCUnitUtil.FormatLengthAsString(gapVertexEps);\r\n                     throw new InvalidOperationException(\"IfcCompositeCurve contains a gap of \" + lengthAsString +\r\n                        \" that is greater than the maximum gap size of \" + maxGapAsString +\r\n                        \" and cannot be repaired.\");\r\n                  }\r\n\r\n                  // We have a possibility to add the segment.  What we do depends on the gap distance.\r\n\r\n                  // If the current curve loop's closest end to the next segment is its end (vs. start) point, set attachNextSegmentToEnd to true.\r\n                  attachNextSegmentToEnd = (MathUtil.IsAlmostEqual(distLoopEndPtToNextStartPt, minGap)) ||\r\n                     (MathUtil.IsAlmostEqual(distLoopEndPtToNextEndPt, minGap));\r\n\r\n                  // We need to reverse the next segment if:\r\n                  // 1. We are attaching the next segment to the end of the curve loop, and the next segment's closest end to the current curve loop is its end (vs. start) point.\r\n                  // 2. We are attaching the next segment to the start of the curve loop, and the next segment's closest end to the current curve loop is its start (vs. end) point.\r\n                  reverseNextSegment = (MathUtil.IsAlmostEqual(distLoopEndPtToNextEndPt, minGap)) ||\r\n                     (MathUtil.IsAlmostEqual(distLoopStartPtToNextStartPt, minGap));\r\n               }\r\n\r\n               if (reverseNextSegment)\r\n               {\r\n                  curveSegments[ii] = curveSegments[ii].CreateReversed();\r\n                  MathUtil.Swap<XYZ>(ref nextStartPoint, ref nextEndPoint);\r\n               }\r\n\r\n               // If minGap is less than vertexEps, we won't need to do any repairing - just fix the orientation if necessary.\r\n               if (minGap < vertexEps)\r\n               {\r\n                  if (attachNextSegmentToEnd)\r\n                  {\r\n                     // Update the curve loop end point to be the end point of the next segment after potentially being reversed.\r\n                     curveLoopEndPoint = nextEndPoint;\r\n                  }\r\n                  else\r\n                  {\r\n                     canRepairFirst = curveSegments[ii] is Line;\r\n                     curveLoopStartPoint = nextStartPoint;\r\n\r\n                     // Update the curve loop start point to be the start point of the next segment, now at the beginning of the loop,\r\n                     // after potentially being reversed.\r\n                     Curve tmpCurve = curveSegments[ii];\r\n                     curveSegments.RemoveAt(ii);\r\n                     curveSegments.Insert(0, tmpCurve);\r\n                  }\r\n\r\n                  continue;\r\n               }\r\n\r\n               // The gap is too big for CurveLoop, but smaller than our maximum tolerance - we will try to fix the gap by extending\r\n               // one of the line segments around the gap.  If the gap is between two Arcs, we will try to introduce a short\r\n               // segment between them, as long as the gap is larger than the short curve tolerance.\r\n\r\n               bool canRepairNext = curveSegments[ii] is Line;\r\n               bool createdRepairLine = false;\r\n\r\n               if (attachNextSegmentToEnd)\r\n               {\r\n                  // Update the curve loop end point to be the end point of the next segment after potentially being reversed.\r\n                  XYZ originalCurveLoopEndPoint = curveLoopEndPoint;\r\n                  curveLoopEndPoint = nextEndPoint;\r\n                  if (canRepairNext)\r\n                  {\r\n                     curveSegments[ii] = RepairLineAndReport(Id, originalCurveLoopEndPoint, curveLoopEndPoint, minGap);\r\n                  }\r\n                  else if (curveSegments[ii - 1] is Line)  // = canRepairCurrent, only used here.\r\n                  {\r\n                     curveSegments[ii - 1] = RepairLineAndReport(Id, curveSegments[ii - 1].GetEndPoint(0), curveSegments[ii].GetEndPoint(0), minGap);\r\n                  }\r\n                  else\r\n                  {\r\n                     XYZ repairStartPoint = originalCurveLoopEndPoint;\r\n                     XYZ repairEndPoint = null;\r\n                     double? nextCurveStartParameter = null;\r\n\r\n                     // We have two non-Lines meeting.  Try two more heuristics to clean the gap.\r\n                     if (minGap < shortCurveTol + MathUtil.Eps())\r\n                     {\r\n                        // If we are close, we can actually create a short segment that is\r\n                        // actually a bit longer than what we need, and the CurveLoop will\r\n                        // still consider itself continuous.\r\n                        double overshoot = (shortCurveTol * 1.01 - minGap) / 2.0;\r\n                        if (overshoot < vertexEps)\r\n                        {\r\n                           repairEndPoint = curveSegments[ii].GetEndPoint(0);\r\n                           XYZ repairLineOffset = overshoot * (repairEndPoint - repairStartPoint).Normalize();\r\n\r\n                           repairStartPoint -= repairLineOffset;\r\n                           repairEndPoint += repairLineOffset;\r\n                        }\r\n                        else\r\n                        {\r\n                           try\r\n                           {\r\n                              // Final attempt using tessellation.\r\n                              IList<XYZ> possiblePoints = curveSegments[ii].Tessellate();\r\n                              int numPoints = possiblePoints.Count;\r\n                              for (int jj = 1; jj < numPoints-1; jj++)\r\n                              {\r\n                                 double distanceTo = repairStartPoint.DistanceTo(possiblePoints[jj]);\r\n\r\n                                 if (distanceTo > shortCurveTol + MathUtil.Eps())\r\n                                 {\r\n                                    repairEndPoint = possiblePoints[jj];\r\n\r\n                                    IntersectionResult result = curveSegments[ii].Project(repairEndPoint);\r\n                                    nextCurveStartParameter = result?.Parameter;\r\n\r\n                                    break;\r\n                                 }\r\n                              }\r\n                           }\r\n                           catch\r\n                           {\r\n                           }\r\n                        }\r\n                     }\r\n                     else\r\n                     {\r\n                        repairEndPoint = curveSegments[ii].GetEndPoint(0);\r\n                     }\r\n\r\n                     if (nextCurveStartParameter != null)\r\n                     {\r\n                        try\r\n                        {\r\n                           curveSegments[ii].MakeBound(nextCurveStartParameter.Value, curveSegments[ii].GetEndParameter(1));\r\n                        }\r\n                        catch\r\n                        {\r\n                           repairStartPoint = null;\r\n                           repairEndPoint = null;\r\n                        }\r\n                     }\r\n\r\n                     if (repairStartPoint != null && repairEndPoint != null)\r\n                     {\r\n                        try\r\n                        {\r\n                           Line repairLine = Line.CreateBound(repairStartPoint, repairEndPoint);\r\n                           curveSegments.Insert(ii, repairLine);\r\n                           createdRepairLine = true;\r\n\r\n                           ii++; // Skip the repair line as we've already \"added\" it and the non-linear segment to our growing loop.\r\n                           numSegments++;\r\n                        }\r\n                        catch\r\n                        {\r\n                        }\r\n                     }\r\n\r\n                     if (!createdRepairLine)\r\n                        Importer.TheLog.LogError(Id, \"IfcCompositeCurve contains a gap between two non-linear segments that is too short to be repaired by a connecting segment.\", false);\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  XYZ originalCurveLoopStartPoint = curveLoopStartPoint;\r\n                  curveLoopStartPoint = nextStartPoint;\r\n\r\n                  if (canRepairNext)\r\n                  {\r\n                     curveSegments[ii] = RepairLineAndReport(Id, curveLoopStartPoint, originalCurveLoopStartPoint, minGap);\r\n                  }\r\n                  else if (canRepairFirst)\r\n                  {\r\n                     curveSegments[0] = RepairLineAndReport(Id, curveSegments[ii].GetEndPoint(1), curveSegments[0].GetEndPoint(1), minGap);\r\n                  }\r\n                  else\r\n                  {\r\n                     // TODO: Allow heuristics in attachNextSegmentToEnd branch to apply here.\r\n\r\n                     // Can't add a line to fix a gap that is smaller than the short curve tolerance.\r\n                     // In the future, we may fix this gap by intersecting the two curves and extending one of them.\r\n                     XYZ repairStartPoint = curveSegments[ii].GetEndPoint(1);\r\n                     XYZ repairEndPoint = null;\r\n                     if (minGap > shortCurveTol)\r\n                     {\r\n                        repairEndPoint = originalCurveLoopStartPoint;\r\n                     }\r\n                     else\r\n                     {\r\n                        // We will take from the \"next\" curve by tessellating it.\r\n                        IList<XYZ> tessellatedPoints = curveSegments[0].Tessellate();\r\n                        int count = tessellatedPoints.Count;\r\n                        for (int jj = 1; jj < count; jj++)\r\n                        {\r\n                           try\r\n                           {\r\n                              repairEndPoint = tessellatedPoints[jj];\r\n                              double currGap = repairStartPoint.DistanceTo(repairEndPoint);\r\n                              if (currGap <= shortCurveTol)\r\n                                 continue;\r\n\r\n                              if (jj < count - 1)\r\n                              {\r\n                                 IntersectionResult result = curveSegments[0].Project(repairEndPoint);\r\n                                 curveSegments[0].MakeBound(result.Parameter, curveSegments[0].GetEndParameter(1));\r\n                              }\r\n                              else\r\n                              {\r\n                                 ii--;\r\n                                 numSegments--;\r\n                                 curveSegments.RemoveAt(0);\r\n                              }\r\n                              break;\r\n                           }\r\n                           catch\r\n                           {\r\n                              repairEndPoint = null;\r\n                           }\r\n                        }\r\n                     }\r\n\r\n                     if (repairEndPoint != null)\r\n                     {\r\n                        Line repairLine = Line.CreateBound(repairStartPoint, repairEndPoint);\r\n                        curveSegments.Insert(0, repairLine);\r\n                        ii++; // Skip the repair line as we've already \"added\" it and the non-linear curve to our growing loop.\r\n                        numSegments++;\r\n                        createdRepairLine = true;\r\n                     }\r\n                  }\r\n\r\n                  // Either canRepairFirst was already true, or canRepairNext was true and we added it to the front of the loop, \r\n                  // or we added a short repair line to the front of the loop.  In any of these cases, the front curve segement of the\r\n                  // loop is now a line segment.\r\n                  if (!canRepairFirst && !canRepairNext && !createdRepairLine)\r\n                     Importer.TheLog.LogError(Id, \"IfcCompositeCurve contains a gap between two non-linear segments that can't be fixed.\", true);\r\n\r\n                  canRepairFirst = true;\r\n\r\n                  // Move the curve to the front of the loop.\r\n                  Curve tmpCurve = curveSegments[ii];\r\n                  curveSegments.RemoveAt(ii);\r\n                  curveSegments.Insert(0, tmpCurve);\r\n               }\r\n            }\r\n\r\n            SetCurveLoops(curveSegments);\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            Importer.TheLog.LogError(Id, ex.Message, true);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCCompositeCurve object from a handle of type IfcCompositeCurve\r\n      /// </summary>\r\n      /// <param name=\"ifcCompositeCurve\">The IFC handle</param>\r\n      /// <returns>The IFCCompositeCurve object</returns>\r\n      public static IFCCompositeCurve ProcessIFCCompositeCurve(IFCAnyHandle ifcCompositeCurve)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcCompositeCurve))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcCompositeCurve);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity compositeCurve = null;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcCompositeCurve.StepId, out compositeCurve))\r\n            compositeCurve = new IFCCompositeCurve(ifcCompositeCurve);\r\n\r\n         return (compositeCurve as IFCCompositeCurve);\r\n      }\r\n\r\n      private IFCCurve ProcessIFCCompositeCurveSegment(IFCAnyHandle ifcCurveSegment)\r\n      {\r\n         bool found = false;\r\n\r\n         bool sameSense = IFCImportHandleUtil.GetRequiredBooleanAttribute(ifcCurveSegment, \"SameSense\", out found);\r\n         if (!found)\r\n            sameSense = true;\r\n\r\n         IFCAnyHandle ifcParentCurve = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcCurveSegment, \"ParentCurve\", true);\r\n         IFCCurve parentCurve = null;\r\n\r\n         using (TemporaryVerboseLogging logger = new TemporaryVerboseLogging())\r\n         {\r\n            parentCurve = IFCCurve.ProcessIFCCurve(ifcParentCurve);\r\n         }\r\n\r\n         if (parentCurve == null)\r\n         {\r\n            Importer.TheLog.LogWarning(ifcCurveSegment.StepId, \"Error processing ParentCurve (#\" + ifcParentCurve.StepId + \") for IfcCompositeCurveSegment; this may be repairable.\", false);\r\n            return null;\r\n         }\r\n\r\n         if (parentCurve.IsEmpty())\r\n         {\r\n            Importer.TheLog.LogWarning(ifcCurveSegment.StepId, \"Error processing ParentCurve (#\" + ifcParentCurve.StepId + \") for IfcCompositeCurveSegment; this may be repairable.\", false);\r\n            return null;\r\n         }\r\n\r\n         return parentCurve;\r\n      }\r\n\r\n      private Line RepairLineAndReport(int id, XYZ startPoint, XYZ endPoint, double gap)\r\n      {\r\n         string gapAsString = IFCUnitUtil.FormatLengthAsString(gap);\r\n         Importer.TheLog.LogWarning(id, \"Repaired gap of size \" + gapAsString + \" in IfcCompositeCurve.\", false);\r\n         return Line.CreateBound(startPoint, endPoint);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCConic.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCConic entity\r\n   /// </summary>\r\n   public abstract class IFCConic : IFCCurve\r\n   {\r\n      private Transform m_Position;\r\n\r\n      public Transform Position\r\n      {\r\n         get { return m_Position; }\r\n         set { m_Position = value; }\r\n      }\r\n\r\n      protected IFCConic()\r\n      {\r\n      }\r\n\r\n      protected IFCConic(IFCAnyHandle conic)\r\n      {\r\n         Process(conic);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcCurve)\r\n      {\r\n         base.Process(ifcCurve);\r\n\r\n         IFCAnyHandle position = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcCurve, \"Position\", false);\r\n         if (position == null)\r\n            return;\r\n\r\n         Position = IFCLocation.ProcessIFCAxis2Placement(position);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCConic object from a handle of type IfcConic\r\n      /// </summary>\r\n      /// <param name=\"ifcConic\">The IFC handle</param>\r\n      /// <returns>The IFCConic object</returns>\r\n      public static IFCConic ProcessIFCConic(IFCAnyHandle ifcConic)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcConic))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcConic);\r\n            return null;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcConic, IFCEntityType.IfcCircle))\r\n            return IFCCircle.ProcessIFCCircle(ifcConic);\r\n         else if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcConic, IFCEntityType.IfcEllipse))\r\n            return IFCEllipse.ProcessIFCEllipse(ifcConic);\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcConic, IFCEntityType.IfcConic, true);\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCConnectedFaceSet.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCConnectedFaceSet : IFCTopologicalRepresentationItem\r\n   {\r\n      ISet<IFCFace> m_CfsFaces = null;\r\n\r\n      bool m_AllowInvalidFace = false;\r\n\r\n      /// <summary>\r\n      /// Determines whether or not the connected face set is allowed to have an invalid face.  This can be true if the owner\r\n      /// is a surface model, and false if it is a solid model.  Regardless, it should log an error.\r\n      /// </summary>\r\n      public bool AllowInvalidFace\r\n      {\r\n         get { return m_AllowInvalidFace; }\r\n         set { m_AllowInvalidFace = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The faces of the connected face set.\r\n      /// </summary>\r\n      public ISet<IFCFace> Faces\r\n      {\r\n         get\r\n         {\r\n            if (m_CfsFaces == null)\r\n               m_CfsFaces = new HashSet<IFCFace>();\r\n            return m_CfsFaces;\r\n         }\r\n\r\n      }\r\n\r\n      protected IFCConnectedFaceSet()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcConnectedFaceSet)\r\n      {\r\n         base.Process(ifcConnectedFaceSet);\r\n\r\n         HashSet<IFCAnyHandle> ifcCfsFaces =\r\n             IFCAnyHandleUtil.GetValidAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcConnectedFaceSet, \"CfsFaces\");\r\n         if ((ifcCfsFaces?.Count ?? 0) == 0)\r\n         {\r\n            Importer.TheLog.LogError(ifcConnectedFaceSet.StepId, \"No faces in connected face set, aborting.\", false);\r\n            return;\r\n         }\r\n\r\n         foreach (IFCAnyHandle ifcCfsFace in ifcCfsFaces)\r\n         {\r\n            try\r\n            {\r\n               IFCFace currentFace = IFCFace.ProcessIFCFace(ifcCfsFace);\r\n               if (!currentFace.IsEmpty())\r\n                  Faces.Add(currentFace);\r\n            }\r\n            catch\r\n            {\r\n               Importer.TheLog.LogWarning(ifcCfsFace.StepId, \"Invalid face, ignoring.\", false);\r\n            }\r\n         }\r\n\r\n         if (Faces.Count == 0)\r\n            Importer.TheLog.LogError(ifcConnectedFaceSet.StepId, \"No faces in connected face set, aborting.\", false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">The scaled local coordinate system for the geometry.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n\r\n         foreach (IFCFace face in Faces)\r\n         {\r\n            try\r\n            {\r\n               face.CreateShape(shapeEditScope, scaledLcs, guid);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n               if (!AllowInvalidFace)\r\n                  throw;\r\n               else\r\n               {\r\n                  shapeEditScope.BuilderScope.AbortCurrentFace();\r\n                  Importer.TheLog.LogError(face.Id, ex.Message, false);\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      protected IFCConnectedFaceSet(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFConnectedFaceSet object from a handle of type IfcConnectedFaceSet.\r\n      /// </summary>\r\n      /// <param name=\"ifcConnectedFaceSet\">The IFC handle.</param>\r\n      /// <returns>The IFCConnectedFaceSet object.</returns>\r\n      public static IFCConnectedFaceSet ProcessIFCConnectedFaceSet(IFCAnyHandle ifcConnectedFaceSet)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcConnectedFaceSet))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcConnectedFaceSet);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity connectedFaceSet;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcConnectedFaceSet.StepId, out connectedFaceSet))\r\n            connectedFaceSet = new IFCConnectedFaceSet(ifcConnectedFaceSet);\r\n         return (connectedFaceSet as IFCConnectedFaceSet);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCCsgPrimitive3D.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Import.Enums;\nusing Revit.IFC.Import.Geometry;\nusing Revit.IFC.Import.Utility;\n\nnamespace Revit.IFC.Import.Data\n{\n   public abstract class IFCCsgPrimitive3D : IFCRepresentationItem, IIFCBooleanOperand\n   {\n      protected IFCCsgPrimitive3D()\n      {\n      }\n\n      override protected void Process(IFCAnyHandle ifcCsgPrimitive3D)\n      {\n         base.Process(ifcCsgPrimitive3D);\n      }\n\n      protected abstract IList<GeometryObject> CreateGeometryInternal(\n         IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid);\n\n      /// <summary>\n      /// Return geometry for a particular representation item.\n      /// </summary>\n      /// <param name=\"shapeEditScope\">The shape edit scope.</param>\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\n      /// <returns>Zero or more created geometries.</returns>\n      public IList<GeometryObject> CreateGeometry(IFCImportShapeEditScope shapeEditScope, \n         Transform scaledLcs, string guid)\n      {\n         if (StyledByItem != null)\n            StyledByItem.Create(shapeEditScope);\n\n         using (IFCImportShapeEditScope.IFCMaterialStack stack = new IFCImportShapeEditScope.IFCMaterialStack(shapeEditScope, StyledByItem, null))\n         {\n            return CreateGeometryInternal(shapeEditScope, scaledLcs, guid);\n         }\n      }\n\n      /// <summary>\n      /// In case of a Boolean operation failure, provide a recommended direction to shift the geometry in for a second attempt.\n      /// </summary>\n      /// <param name=\"lcs\">The local transform for this entity.</param>\n      /// <returns>An XYZ representing a unit direction vector, or null if no direction is suggested.</returns>\n      /// <remarks>If the 2nd attempt fails, a third attempt will be done with a shift in the opposite direction.</remarks>\n      public virtual XYZ GetSuggestedShiftDirection(Transform lcs)\n      {\n         // Sub-classes may have a better guess.\n         return null;\n      }\n\n      protected IFCCsgPrimitive3D(IFCAnyHandle item)\n      {\n         Process(item);\n      }\n\n      /// <summary>\n      /// Create an IFCCsgPrimitive3D object from a handle of type IfcCsgPrimitive3D.\n      /// </summary>\n      /// <param name=\"ifcCsgPrimitive3D\">The IFC handle.</param>\n      /// <returns>The IFCCsgPrimitive3D object.</returns>\n      public static IFCCsgPrimitive3D ProcessIFCCsgPrimitive3D(IFCAnyHandle ifcCsgPrimitive3D)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcCsgPrimitive3D))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcCsgPrimitive3D);\n            return null;\n         }\n\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcCsgPrimitive3D, IFCEntityType.IfcBlock))\n            return IFCBlock.ProcessIFCBlock(ifcCsgPrimitive3D);\n         \n         Importer.TheLog.LogUnhandledSubTypeError(ifcCsgPrimitive3D, IFCEntityType.IfcCsgPrimitive3D, false);\n         return null;\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCCurve.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public abstract class IFCCurve : IFCRepresentationItem\r\n   {\r\n      // Some IfcCurves may use a non-unit length IfcVector to influence\r\n      // the parametrization of the underlying curve.\r\n      public double ParametericScaling { get; protected set; } = 1.0;\r\n\r\n      /// <summary>\r\n      /// If the curve can't get represented by Revit Curve(s) or CurveLoops(s), \r\n      /// the start point of the curve.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// This will only be set if we fail at creating Revit geometry for the curve.\r\n      /// This is intended as a backup where if we have multiple invalid curve \r\n      /// segments, we can potentially combine them into one valid curve segment.\r\n      /// In practice, this is intended to be set when calling routines try to \r\n      /// bound the curve.\r\n      /// </remarks>\r\n      public XYZ BackupCurveStartLocation { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// If the curve can't get represented by Revit Curve(s) or CurveLoops(s), \r\n      /// the end point of the curve.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// This will only be set if we fail at creating Revit geometry for the curve.\r\n      /// This is intended as a backup where if we have multiple invalid curve \r\n      /// segments, we can potentially combine them into one valid curve segment.\r\n      /// In practice, this is intended to be set when calling routines try to \r\n      /// bound the curve.\r\n      /// </remarks>\r\n      public XYZ BackupCurveEndLocation { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Get the representation of IFCCurve as a single Revit curve, if it can be \r\n      /// representated as such.  It could be null.\r\n      /// </summary>\r\n      public Curve Curve { get; private set; } = null;\r\n\r\n      /// <summary>\r\n      /// Get the representation of IFCCurve as a list of Revit CurveLoops, \r\n      /// if it can be representated as such.  It could be null.\r\n      /// </summary>\r\n      public IList<CurveLoop> CurveLoops { get; private set; } = null;\r\n      \r\n      /// <summary>\r\n      /// Get the representation of IFCCurve, as a list of 0 or more Revit curves.\r\n      /// </summary>\r\n      public IList<Curve> GetCurves()\r\n      {\r\n         IList<Curve> curves = new List<Curve>();\r\n\r\n         if (Curve != null)\r\n            curves.Add(Curve);\r\n         else if (CurveLoops != null)\r\n         {\r\n            foreach (CurveLoop curveLoop in CurveLoops)\r\n            {\r\n               foreach (Curve curve in curveLoop)\r\n                  curves.Add(curve);\r\n            }\r\n         }\r\n\r\n         return curves;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return true if this IFCCurve has no Revit geometric data associated with it.\r\n      /// </summary>\r\n      /// <returns></returns>\r\n      public bool IsEmpty()\r\n      {\r\n         if (BackupCurveStartLocation != null && BackupCurveEndLocation != null)\r\n            return false;\r\n\r\n         if (Curve != null)\r\n            return false;\r\n\r\n         if (CurveLoops == null || CurveLoops.Count == 0)\r\n            return true;\r\n\r\n         foreach (CurveLoop curveLoop in CurveLoops)\r\n         {\r\n            if (curveLoop.NumberOfCurves() != 0)\r\n               return false;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the one and only CurveLoop if it exists and is non-empty, otherwise null.\r\n      /// </summary>\r\n      /// <returns>The one and only CurveLoop if it exists and is non-empty.</returns>\r\n      public CurveLoop GetTheCurveLoop()\r\n      {\r\n         if ((CurveLoops?.Count ?? 0) != 1)\r\n            return null;\r\n\r\n         CurveLoop theCurveLoop = CurveLoops[0];\r\n         return ((theCurveLoop?.NumberOfCurves() ?? 0) > 0) ? theCurveLoop : null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set the representation of the curve based on one Curve.\r\n      /// </summary>\r\n      /// <param name=\"curve\">The one curve.</param>\r\n      /// <remarks>This will set CurveLoop to null.</remarks>\r\n      public void SetCurve(Curve curve)\r\n      {\r\n         Curve = curve;\r\n         CurveLoops = null;\r\n      }\r\n      \r\n      /// <summary>\r\n      /// Set the representation of the curve based on one CurveLoop.\r\n      /// </summary>\r\n      /// <param name=\"curveLoop\">The one CurveLoop.</param>\r\n      public void SetCurveLoop(CurveLoop curveLoop)\r\n      {\r\n         Curve = null;\r\n         CurveLoops = null;\r\n\r\n         if (curveLoop == null)\r\n            return;\r\n\r\n         if (curveLoop.NumberOfCurves() == 1)\r\n         {\r\n            Curve = curveLoop.GetCurveLoopIterator().Current;\r\n         }\r\n\r\n         CurveLoops = new List<CurveLoop>();\r\n         CurveLoops.Add(curveLoop);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set the representation of the curve based on one CurveLoop.\r\n      /// </summary>\r\n      /// <param name=\"curveLoop\">The one CurveLoop.</param>\r\n      /// <param name=\"pointXYZs\">The point list that created this CurveLoop.</param>\r\n      /// <remarks>The point list is used to potentially collapse a series of\r\n      /// line segments into one.</remarks>\r\n      public void SetCurveLoop(CurveLoop curveLoop, IList<XYZ> pointXYZs)\r\n      {\r\n         SetCurveLoop(curveLoop);\r\n         if (Curve == null)\r\n            Curve = IFCGeometryUtil.CreateCurveFromPolyCurveLoop(GetTheCurveLoop(), pointXYZs);\r\n      }\r\n      \r\n      /// <summary>\r\n      /// Set the representation of the curve based on a list of curves.\r\n      /// </summary>\r\n      /// <param name=\"curves\">The initial list of curves.</param>\r\n      public void SetCurveLoops(IList<Curve> curves)\r\n      {\r\n         Curve = null;\r\n         CurveLoops = null;\r\n\r\n         if (curves == null || curves.Count == 0)\r\n            return;\r\n\r\n         CurveLoops = new List<CurveLoop>();\r\n         CurveLoop currCurveLoop = new CurveLoop();\r\n         CurveLoops.Add(currCurveLoop);\r\n         foreach (Curve curve in curves)\r\n         {\r\n            if (curve == null)\r\n               continue;\r\n\r\n            try\r\n            {\r\n               currCurveLoop.Append(curve);\r\n               continue;\r\n            }\r\n            catch\r\n            {\r\n            }\r\n\r\n            currCurveLoop = new CurveLoop();\r\n            CurveLoops.Add(currCurveLoop);\r\n            currCurveLoop.Append(curve);\r\n         }\r\n\r\n         if (curves.Count == 1)\r\n            Curve = curves[0];\r\n         else\r\n            Curve = ConvertCurveLoopIntoSingleCurve();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a curve representation of this IFCCompositeCurve from a curveloop\r\n      /// </summary>\r\n      /// <returns>A Revit curve that is made by appending every curve in the given curveloop, if possible</returns>\r\n      public Curve ConvertCurveLoopIntoSingleCurve()\r\n      {\r\n         CurveLoop curveLoop = GetTheCurveLoop();\r\n         if (curveLoop == null)\r\n         {\r\n            return null;\r\n         }\r\n\r\n         CurveLoopIterator curveIterator = curveLoop.GetCurveLoopIterator();\r\n         Curve firstCurve = curveIterator.Current;\r\n         Curve returnCurve = null;\r\n\r\n         double vertexEps = IFCImportFile.TheFile.VertexTolerance;\r\n\r\n         // We only connect the curves if they are Line, Arc or Ellipse\r\n         if (!((firstCurve is Line) || (firstCurve is Arc) || (firstCurve is Ellipse)))\r\n         {\r\n            return null;\r\n         }\r\n\r\n         XYZ firstStartPoint = firstCurve.GetEndPoint(0);\r\n\r\n         Curve currentCurve = null;\r\n         if (firstCurve is Line)\r\n         {\r\n            Line firstLine = firstCurve as Line;\r\n            while (curveIterator.MoveNext())\r\n            {\r\n               currentCurve = curveIterator.Current;\r\n               if (!(currentCurve is Line))\r\n               {\r\n                  return null;\r\n               }\r\n               Line currentLine = currentCurve as Line;\r\n\r\n               if (!(firstLine.Direction.IsAlmostEqualTo(currentLine.Direction)))\r\n               {\r\n                  return null;\r\n               }\r\n            }\r\n            returnCurve = Line.CreateBound(firstStartPoint, currentCurve.GetEndPoint(1));\r\n         }\r\n         else if (firstCurve is Arc)\r\n         {\r\n            Arc firstArc = firstCurve as Arc;\r\n            XYZ firstCurveNormal = firstArc.Normal;\r\n\r\n            while (curveIterator.MoveNext())\r\n            {\r\n               currentCurve = curveIterator.Current;\r\n               if (!(currentCurve is Arc))\r\n               {\r\n                  return null;\r\n               }\r\n\r\n               XYZ currentStartPoint = currentCurve.GetEndPoint(0);\r\n               XYZ currentEndPoint = currentCurve.GetEndPoint(1);\r\n\r\n               Arc currentArc = currentCurve as Arc;\r\n               XYZ currentCenter = currentArc.Center;\r\n               double currentRadius = currentArc.Radius;\r\n               XYZ currentNormal = currentArc.Normal;\r\n\r\n               // We check if this circle is similar to the first circle by checking that they have the same center, same radius,\r\n               // and lie on the same plane\r\n               if (!(currentCenter.IsAlmostEqualTo(firstArc.Center, vertexEps) && MathUtil.IsAlmostEqual(currentRadius, firstArc.Radius)))\r\n               {\r\n                  return null;\r\n               }\r\n               if (!MathUtil.IsAlmostEqual(Math.Abs(currentNormal.DotProduct(firstCurveNormal)), 1))\r\n               {\r\n                  return null;\r\n               }\r\n            }\r\n            // If all of the curve segments are part of the same circle, then the returning curve will be a circle bounded\r\n            // by the start point of the first curve and the end point of the last curve.\r\n            XYZ lastPoint = currentCurve.GetEndPoint(1);\r\n            if (lastPoint.IsAlmostEqualTo(firstStartPoint, vertexEps))\r\n            {\r\n               firstCurve.MakeUnbound();\r\n            }\r\n            else\r\n            {\r\n               double startParameter = firstArc.GetEndParameter(0);\r\n               double endParameter = firstArc.Project(lastPoint).Parameter;\r\n\r\n               if (endParameter < startParameter)\r\n                  endParameter += Math.PI * 2;\r\n\r\n               firstCurve.MakeBound(startParameter, endParameter);\r\n            }\r\n            returnCurve = firstCurve;\r\n         }\r\n         else if (firstCurve is Ellipse)\r\n         {\r\n            Ellipse firstEllipse = firstCurve as Ellipse;\r\n            double radiusX = firstEllipse.RadiusX;\r\n            double radiusY = firstEllipse.RadiusY;\r\n            XYZ xDirection = firstEllipse.XDirection;\r\n            XYZ yDirection = firstEllipse.YDirection;\r\n            XYZ firstCurveNormal = firstEllipse.Normal;\r\n\r\n            while (curveIterator.MoveNext())\r\n            {\r\n               currentCurve = curveIterator.Current;\r\n               if (!(currentCurve is Ellipse))\r\n                  return null;\r\n\r\n               XYZ currentStartPoint = currentCurve.GetEndPoint(0);\r\n               XYZ currentEndPoint = currentCurve.GetEndPoint(1);\r\n\r\n               Ellipse currentEllipse = currentCurve as Ellipse;\r\n               XYZ currentCenter = currentEllipse.Center;\r\n\r\n               double currentRadiusX = currentEllipse.RadiusX;\r\n               double currentRadiusY = currentEllipse.RadiusY;\r\n               XYZ currentXDirection = currentEllipse.XDirection;\r\n               XYZ currentYDirection = currentEllipse.YDirection;\r\n\r\n               XYZ currentNormal = currentEllipse.Normal;\r\n\r\n               if (!MathUtil.IsAlmostEqual(Math.Abs(currentNormal.DotProduct(firstCurveNormal)), 1))\r\n               {\r\n                  return null;\r\n               }\r\n\r\n               // We determine whether this ellipse is the same as the initial ellipse by checking if their centers and corresponding\r\n               // radiuses as well as radius directions are the same or permutations of each other.\r\n               if (!currentCenter.IsAlmostEqualTo(firstEllipse.Center))\r\n               {\r\n                  return null;\r\n               }\r\n\r\n               // Checks if the corresponding radius and radius direction are the same\r\n               if (MathUtil.IsAlmostEqual(radiusX, currentRadiusX))\r\n               {\r\n                  if (!(MathUtil.IsAlmostEqual(radiusY, currentRadiusY) && currentXDirection.IsAlmostEqualTo(xDirection) && currentYDirection.IsAlmostEqualTo(yDirection)))\r\n                  {\r\n                     return null;\r\n                  }\r\n               }\r\n               // Checks if the corresponding radiuses and radius directions are permutations of each other\r\n               else if (MathUtil.IsAlmostEqual(radiusX, currentRadiusY))\r\n               {\r\n                  if (!(MathUtil.IsAlmostEqual(radiusY, currentRadiusX) && currentXDirection.IsAlmostEqualTo(yDirection) && currentYDirection.IsAlmostEqualTo(xDirection)))\r\n                  {\r\n                     return null;\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  return null;\r\n               }\r\n            }\r\n\r\n            // If all of the curve segments are part of the same ellipse then the returning curve will be the ellipse whose start point is the start \r\n            // point of the first curve and the end point is the end point of the last curve\r\n            XYZ lastPoint = currentCurve.GetEndPoint(1);\r\n            if (lastPoint.IsAlmostEqualTo(firstStartPoint))\r\n            {\r\n               firstCurve.MakeUnbound();\r\n            }\r\n            else\r\n            {\r\n               double startParameter = firstEllipse.GetEndParameter(0);\r\n               double endParameter = firstEllipse.Project(lastPoint).Parameter;\r\n\r\n               if (endParameter < startParameter)\r\n               {\r\n                  endParameter += Math.PI * 2;\r\n               }\r\n               firstCurve.MakeBound(startParameter, endParameter);\r\n            }\r\n            returnCurve = firstCurve;\r\n         }\r\n\r\n         return returnCurve;\r\n      }\r\n   \r\n   /// <summary>\r\n   /// Calculates the normal of the plane of the curve or curve loop.\r\n   /// </summary>\r\n   /// <returns>The normal, or null if there is no curve or curve loop.</returns>\r\n   public XYZ GetNormal()\r\n      {\r\n         if (Curve != null)\r\n         {\r\n            Transform transform = Curve.ComputeDerivatives(0, false);\r\n            if (transform != null)\r\n               return transform.BasisZ;\r\n         }\r\n\r\n         if (CurveLoops == null)\r\n            return null;\r\n\r\n         XYZ normal = null;\r\n         foreach (CurveLoop curveLoop in CurveLoops)\r\n         {\r\n            try\r\n            {\r\n               Plane plane = curveLoop.GetPlane();\r\n               if (plane != null)\r\n               {\r\n                  if (normal == null)\r\n                  {\r\n                     normal = plane.Normal;\r\n                  }\r\n                  else\r\n                  {\r\n                     if (!normal.IsAlmostEqualTo(plane.Normal))\r\n                        return null;\r\n                  }\r\n               }\r\n            }\r\n            catch\r\n            {\r\n               return null;\r\n            }\r\n         }\r\n         \r\n         return normal;\r\n      }\r\n\r\n      protected IFCCurve()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcCurve)\r\n      {\r\n         base.Process(ifcCurve);\r\n      }\r\n\r\n      protected IFCCurve(IFCAnyHandle profileDef)\r\n      {\r\n         Process(profileDef);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCCurve object from a handle of type IfcCurve.\r\n      /// </summary>\r\n      /// <param name=\"ifcCurve\">The IFC handle.</param>\r\n      /// <returns>The IFCCurve object.</returns>\r\n      public static IFCCurve ProcessIFCCurve(IFCAnyHandle ifcCurve)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcCurve))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcCurve);\r\n            return null;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcCurve, IFCEntityType.IfcBoundedCurve))\r\n            return IFCBoundedCurve.ProcessIFCBoundedCurve(ifcCurve);\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcCurve, IFCEntityType.IfcConic))\r\n            return IFCConic.ProcessIFCConic(ifcCurve);\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcCurve, IFCEntityType.IfcLine))\r\n            return IFCLine.ProcessIFCLine(ifcCurve);\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcCurve, IFCEntityType.IfcOffsetCurve2D))\r\n            return IFCOffsetCurve2D.ProcessIFCOffsetCurve2D(ifcCurve);\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcCurve, IFCEntityType.IfcOffsetCurve3D))\r\n            return IFCOffsetCurve3D.ProcessIFCOffsetCurve3D(ifcCurve);\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcCurve, IFCEntityType.IfcCurve, true);\r\n         return null;\r\n      }\r\n\r\n      private Curve CreateTransformedCurve(Curve baseCurve, IFCRepresentation parentRep, Transform lcs)\r\n      {\r\n         Curve transformedCurve = baseCurve?.CreateTransformed(lcs);\r\n         if (transformedCurve == null)\r\n         {\r\n            Importer.TheLog.LogWarning(Id, \"couldn't create curve for \" +\r\n                ((parentRep == null) ? \"\" : parentRep.Identifier.ToString()) +\r\n                \" representation.\", false);\r\n         }\r\n\r\n         return transformedCurve;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item, and add to scope.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n\r\n         IFCRepresentation parentRep = shapeEditScope.ContainingRepresentation;\r\n\r\n         IList<Curve> transformedCurves = new List<Curve>();\r\n         if (Curve != null)\r\n         {\r\n            Curve transformedCurve = CreateTransformedCurve(Curve, parentRep, scaledLcs);\r\n            if (transformedCurve != null)\r\n               transformedCurves.Add(transformedCurve);\r\n         }\r\n         else if (CurveLoops != null)\r\n         {\r\n            foreach (CurveLoop curveLoop in CurveLoops)\r\n            {\r\n               foreach (Curve curve in curveLoop)\r\n               {\r\n                  Curve transformedCurve = CreateTransformedCurve(curve, parentRep, scaledLcs);\r\n                  if (transformedCurve != null)\r\n                     transformedCurves.Add(transformedCurve);\r\n               }\r\n            }\r\n         }\r\n\r\n         // TODO: set graphics style for footprint curves.\r\n         IFCRepresentationIdentifier repId = (parentRep == null) ? IFCRepresentationIdentifier.Other : parentRep.Identifier;\r\n         bool createModelGeometry = (repId == IFCRepresentationIdentifier.Body) || \r\n            (repId == IFCRepresentationIdentifier.Axis) || \r\n            (repId == IFCRepresentationIdentifier.Other);\r\n         bool createFootprintGeometry = (repId == IFCRepresentationIdentifier.FootPrint);\r\n\r\n         ElementId gstyleId = ElementId.InvalidElementId;\r\n         if (createModelGeometry || createFootprintGeometry)\r\n         {\r\n            Category curveCategory = IFCCategoryUtil.GetSubCategoryForRepresentation(shapeEditScope.Document, Id, parentRep.Identifier);\r\n            if (curveCategory != null)\r\n            {\r\n               GraphicsStyle graphicsStyle = curveCategory.GetGraphicsStyle(GraphicsStyleType.Projection);\r\n               if (graphicsStyle != null)\r\n                  gstyleId = graphicsStyle.Id;\r\n            }\r\n         }\r\n\r\n         foreach (Curve curve in transformedCurves)\r\n         {\r\n            if (gstyleId != ElementId.InvalidElementId)\r\n               curve.SetGraphicsStyleId(gstyleId);\r\n  \r\n            // If it is not model geometry, assume it is a plan view curve.\r\n            if (createModelGeometry)\r\n               shapeEditScope.AddGeometry(IFCSolidInfo.Create(Id, curve));\r\n            else\r\n               shapeEditScope.AddFootprintCurve(curve);\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCCylindricalSurface.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCCylindricalSurface entity\r\n   /// </summary>\r\n   public class IFCCylindricalSurface : IFCElementarySurface\r\n   {\r\n      private CylindricalSurface m_CylindricalSurface = null;\r\n      private double m_Radius = 0;\r\n\r\n      /// <summary>\r\n      /// The radius of the cylindrical surface\r\n      /// </summary>\r\n      public double Radius\r\n      {\r\n         get { return m_Radius; }\r\n         set { m_Radius = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the corresponding Revit CylindricalSurface of this surface\r\n      /// </summary>\r\n      public CylindricalSurface CylindricalSurface\r\n      {\r\n         get { return m_CylindricalSurface; }\r\n         protected set { m_CylindricalSurface = value; }\r\n      }\r\n\r\n      protected IFCCylindricalSurface()\r\n      {\r\n      }\r\n\r\n      protected IFCCylindricalSurface(IFCAnyHandle ifcCylindricalSurface)\r\n      {\r\n         Process(ifcCylindricalSurface);\r\n\r\n         m_CylindricalSurface = CylindricalSurface.Create(new Frame(Position.Origin, Position.BasisX, Position.BasisY, Position.BasisZ), Radius);\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcCylindricalSurface)\r\n      {\r\n         base.Process(ifcCylindricalSurface);\r\n\r\n         bool found = false;\r\n         Radius = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(ifcCylindricalSurface, \"Radius\", out found);\r\n         if (!found)\r\n         {\r\n            Importer.TheLog.LogError(ifcCylindricalSurface.StepId, \"Cannot find the radius of this cylindrical surface\", true);\r\n            return;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCCylindricalSurface object from a handle of type IfcCylindricalSurface.\r\n      /// </summary>\r\n      /// <param name=\"ifcCylindricalSurface\">The IFC handle.</param>\r\n      /// <returns>The IFCCylindricalSurface object.</returns>\r\n      public static IFCCylindricalSurface ProcessIfcCylindricalSurface(IFCAnyHandle ifcCylindricalSurface)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcCylindricalSurface))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcCylindricalSurface);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity cylindricalSurface;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcCylindricalSurface.StepId, out cylindricalSurface))\r\n            cylindricalSurface = new IFCCylindricalSurface(ifcCylindricalSurface);\r\n\r\n         return cylindricalSurface as IFCCylindricalSurface;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the surface which defines the internal shape of the face\r\n      /// </summary>\r\n      /// <param name=\"lcs\">The local coordinate system for the surface.  Can be null.</param>\r\n      /// <returns>The surface which defines the internal shape of the face</returns>\r\n      public override Surface GetSurface(Transform lcs)\r\n      {\r\n         if (lcs == null)\r\n            return CylindricalSurface;\r\n\r\n         XYZ origin = CylindricalSurface.Origin;\r\n         XYZ xVec = CylindricalSurface.XDir;\r\n         XYZ yVec = CylindricalSurface.YDir;\r\n         XYZ zVec = CylindricalSurface.Axis;\r\n\r\n         return CylindricalSurface.Create(new Frame(lcs.OfPoint(origin), lcs.OfVector(xVec), lcs.OfVector(yVec), lcs.OfVector(zVec)), CylindricalSurface.Radius);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCDerivedProfileDef.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCDerivedProfileDef : IFCProfileDef\r\n   {\r\n      private IFCProfileDef m_ParentProfile;\r\n\r\n      private IFCCartesianTransformOperator m_Operator;\r\n\r\n      private string m_Label;\r\n\r\n      protected IFCDerivedProfileDef()\r\n      {\r\n      }\r\n\r\n      protected IFCDerivedProfileDef(IFCAnyHandle ifcDerivedProfileDef)\r\n      {\r\n         Process(ifcDerivedProfileDef);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the base profile definition.\r\n      /// </summary>\r\n      public IFCProfileDef ParentProfile\r\n      {\r\n         get { return m_ParentProfile; }\r\n         protected set { m_ParentProfile = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the transform of the base profile that defines this derived profile.\r\n      /// </summary>\r\n      public IFCCartesianTransformOperator Operator\r\n      {\r\n         get { return m_Operator; }\r\n         protected set { m_Operator = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the label associated with the profile.\r\n      /// </summary>\r\n      public string Label\r\n      {\r\n         get { return m_Label; }\r\n         protected set { m_Label = value; }\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcDerivedProfileDef)\r\n      {\r\n         base.Process(ifcDerivedProfileDef);\r\n\r\n         IFCAnyHandle ifcParentProfile = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcDerivedProfileDef, \"ParentProfile\", true);\r\n         ParentProfile = IFCProfileDef.ProcessIFCProfileDef(ifcParentProfile);\r\n\r\n         IFCAnyHandle ifcOperator = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcDerivedProfileDef, \"Operator\", true);\r\n         Operator = IFCCartesianTransformOperator.ProcessIFCCartesianTransformOperator(ifcOperator);\r\n\r\n         Label = IFCAnyHandleUtil.GetStringAttribute(ifcDerivedProfileDef, \"Label\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCDerivedProfileDef object from a handle of type IfcDerivedProfileDef.\r\n      /// </summary>\r\n      /// <param name=\"ifcDerivedProfileDef\">The IFC handle.</param>\r\n      /// <returns>The IFCDerivedProfileDef object.</returns>\r\n      public static IFCDerivedProfileDef ProcessIFCDerivedProfileDef(IFCAnyHandle ifcDerivedProfileDef)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcDerivedProfileDef))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcDerivedProfileDef);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity derivedProfileDef;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcDerivedProfileDef.StepId, out derivedProfileDef))\r\n            derivedProfileDef = new IFCDerivedProfileDef(ifcDerivedProfileDef);\r\n         return (derivedProfileDef as IFCDerivedProfileDef);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCDistributionPort.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcDistributionPort.\r\n   /// </summary>\r\n   public class IFCDistributionPort : IFCPort\r\n   {\r\n      /// <summary>\r\n      /// The flow direction of this port.\r\n      /// </summary>\r\n      public IFCFlowDirection FlowDirection { get; protected set; } = IFCFlowDirection.NotDefined;\r\n\r\n      /// <summary>\r\n      /// The system type of this port.\r\n      /// </summary>\r\n      public IFCDistributionSystemEnum SystemType { get; protected set; } = IFCDistributionSystemEnum.NotDefined;\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCDistributionPort()\r\n      {\r\n\r\n      }\r\n\r\n      protected IFCDistributionPort(IFCAnyHandle ifcDistributionPort)\r\n      {\r\n         Process(ifcDistributionPort);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcDistributionPort attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcDistributionPort\">The IfcDistributionPort handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcDistributionPort)\r\n      {\r\n         base.Process(ifcDistributionPort);\r\n\r\n         FlowDirection = IFCEnums.GetSafeEnumerationAttribute<IFCFlowDirection>(ifcDistributionPort, \"FlowDirection\", IFCFlowDirection.NotDefined);\r\n         SystemType = IFCEnums.GetSafeEnumerationAttribute<IFCDistributionSystemEnum>(ifcDistributionPort, \"SystemType\", IFCDistributionSystemEnum.NotDefined);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit element params based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      protected override void CreateParametersInternal(Document doc, Element element)\r\n      {\r\n         base.CreateParametersInternal(doc, element);\r\n\r\n         if (element != null)\r\n         {\r\n            Category category = IFCPropertySet.GetCategoryForParameterIfValid(element, Id);\r\n\r\n            ParametersToSet.AddStringParameter(doc, element, category, this, \"Flow Direction\", FlowDirection.ToString(), Id);\r\n            ParametersToSet.AddStringParameter(doc, element, category, this, \"System Type\", SystemType.ToString(), Id);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit elements based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      protected override void Create(Document doc)\r\n      {\r\n         // Try to get the location:\r\n         // 1. From the ObjectLocation, if it exists.  This should be exact.\r\n         // 2. From the ObjectLocation of the element that the port is associated to, if it exists.\r\n         // This should be approximate.\r\n         // 3. Default to the origin.\r\n         Transform lcs = ObjectLocation?.TotalTransform;\r\n         if (lcs == null)\r\n         {\r\n            if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4))\r\n               lcs = (NestsWhole as IFCProduct)?.ObjectLocation?.TotalTransform;\r\n            else\r\n               lcs = ContainedIn?.ObjectLocation?.TotalTransform;\r\n\r\n         }\r\n\r\n         if (lcs == null)\r\n         {\r\n            lcs = Transform.Identity;\r\n         }\r\n\r\n         // We could use ObjectLocation?.TotalTransformAfterOffset above, but that is \r\n         // slightly different behavior, since TotalTransformAfterOffset is never null.\r\n         lcs.Origin += (Importer.TheHybridInfo?.LargeCoordinateOriginOffset ?? XYZ.Zero);\r\n            \r\n         // 2016+ only.\r\n         XYZ origin = lcs.Origin;\r\n\r\n         ElementId graphicsStyleId = GetGraphicsStyleId(doc);\r\n         Point point = XYZ.IsWithinLengthLimits(origin) ? Point.Create(origin, graphicsStyleId) : null;\r\n\r\n         // 2015+: create cone(s) for the direction of flow.\r\n         CurveLoop rightTrangle = new CurveLoop();\r\n         const double radius = 0.04;\r\n         const double height = 0.12;\r\n\r\n         SolidOptions solidOptions = new SolidOptions(ElementId.InvalidElementId, graphicsStyleId);\r\n\r\n         Frame coordinateFrame = new Frame(lcs.Origin, lcs.BasisX, lcs.BasisY, lcs.BasisZ);\r\n\r\n         // The origin is at the base of the cone for everything but source - then it is at the top of the cone.\r\n         XYZ pt1 = FlowDirection == IFCFlowDirection.Source ? lcs.Origin - height * lcs.BasisZ : lcs.Origin;\r\n         XYZ pt2 = pt1 + radius * lcs.BasisX;\r\n         XYZ pt3 = pt1 + height * lcs.BasisZ;\r\n\r\n         rightTrangle.Append(Line.CreateBound(pt1, pt2));\r\n         rightTrangle.Append(Line.CreateBound(pt2, pt3));\r\n         rightTrangle.Append(Line.CreateBound(pt3, pt1));\r\n         IList<CurveLoop> curveLoops = new List<CurveLoop>();\r\n         curveLoops.Add(rightTrangle);\r\n\r\n         Solid portArrow = GeometryCreationUtilities.CreateRevolvedGeometry(coordinateFrame, curveLoops, 0.0, Math.PI * 2.0, solidOptions);\r\n\r\n         Solid oppositePortArrow = null;\r\n         if (FlowDirection == IFCFlowDirection.SourceAndSink)\r\n         {\r\n            Frame oppositeCoordinateFrame = new Frame(lcs.Origin, -lcs.BasisX, lcs.BasisY, -lcs.BasisZ);\r\n            CurveLoop oppositeRightTrangle = new CurveLoop();\r\n\r\n            XYZ oppPt2 = pt1 - radius * lcs.BasisX;\r\n            XYZ oppPt3 = pt1 - height * lcs.BasisZ;\r\n            oppositeRightTrangle.Append(Line.CreateBound(pt1, oppPt2));\r\n            oppositeRightTrangle.Append(Line.CreateBound(oppPt2, oppPt3));\r\n            oppositeRightTrangle.Append(Line.CreateBound(oppPt3, pt1));\r\n            IList<CurveLoop> oppositeCurveLoops = new List<CurveLoop>() { oppositeRightTrangle };\r\n\r\n            oppositePortArrow = GeometryCreationUtilities.CreateRevolvedGeometry(oppositeCoordinateFrame, oppositeCurveLoops, 0.0, Math.PI * 2.0, solidOptions);\r\n         }\r\n\r\n         if (portArrow != null)\r\n         {\r\n            IList<GeometryObject> geomObjs = new List<GeometryObject>();\r\n\r\n            if (point != null)\r\n               geomObjs.Add(point);\r\n            geomObjs.Add(portArrow);\r\n            if (oppositePortArrow != null)\r\n               geomObjs.Add(oppositePortArrow);\r\n\r\n            DirectShape directShape = IFCElementUtil.CreateElement(doc, GetCategoryId(doc), GlobalId, geomObjs, Id, EntityType);\r\n            if (directShape != null)\r\n            {\r\n               CreatedGeometry = geomObjs;\r\n               CreatedElementId = directShape.Id;\r\n            }\r\n            else\r\n               Importer.TheLog.LogCreationError(this, null, false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcDistributionPort object.\r\n      /// </summary>\r\n      /// <param name=\"ifcDistributionPort\">The IfcDistributionPort handle.</param>\r\n      /// <returns>The IFCDistributionPort object.</returns>\r\n      public static IFCDistributionPort ProcessIFCDistributionPort(IFCAnyHandle ifcDistributionPort)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcDistributionPort))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcDistributionPort);\r\n            return null;\r\n         }\r\n\r\n         try\r\n         {\r\n            IFCEntity cachedDistributionPort;\r\n            if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcDistributionPort.StepId, out cachedDistributionPort))\r\n               return (cachedDistributionPort as IFCDistributionPort);\r\n\r\n            return new IFCDistributionPort(ifcDistributionPort);\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            HandleError(ex.Message, ifcDistributionPort, true);\r\n            return null;\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCDistributionSystem.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Import.Enums;\nusing Revit.IFC.Import.Utility;\n\nnamespace Revit.IFC.Import.Data\n{\n   /// <summary>\n   /// Represents an IFCDistributionSystem for import.\n   /// </summary>\n   public class IFCDistributionSystem : IFCSystem\n   {\n\n      /// <summary>\n      /// Name of DistributionSystem.\n      /// </summary>\n      public string LongName { get; protected set; } = \"\";\n\n      /// <summary>\n      /// Predefined Type, stored not as a string, but as an enum.  This is useful for mapping later on.\n      /// </summary>\n      protected IFCDistributionSystemEnum SystemType { get; set; } = IFCDistributionSystemEnum.NotDefined;\n\n      /// <summary>\n      /// Determines BuiltInCategory, based on the Predefined Type.\n      /// </summary>\n      protected static IDictionary<IFCDistributionSystemEnum, BuiltInCategory> CategoryIdMap { get; set; } = new Dictionary<IFCDistributionSystemEnum, BuiltInCategory>();\n\n      /// <summary>\n      /// Determines the System Classification, based on the Predefined Type.\n      /// </summary>\n      protected static IDictionary<IFCDistributionSystemEnum, MEPSystemClassification> SystemClassificationMap { get; set; } = new Dictionary<IFCDistributionSystemEnum, MEPSystemClassification>();\n\n      /// <summary>\n      /// Retrieves Category (as ElementId) depending on the contents of the Predefined Type.\n      /// Because this is a many-to-one relationship, this is more maintainable if this is kept here.\n      /// </summary>\n      /// <returns>ElementId representing Category.</returns>\n      public override ElementId GetCategoryElementId()\n      {\n         ElementId retVal = ElementId.InvalidElementId;\n\n         BuiltInCategory catId;\n         if (CategoryIdMap.TryGetValue (SystemType, out catId))\n         {\n            retVal = new ElementId(catId);\n         }\n         return retVal;\n      }\n\n      /// <summary>\n      /// Retrieves a string representing the SystemClassification of the IfcDistributionSystem.\n      /// </summary>\n      /// <returns>string that represents SystemClassification.</returns>\n      public string GetSystemClassification()\n      {\n         string retVal = \"\";\n\n         MEPSystemClassification systemClassification = MEPSystemClassification.UndefinedSystemClassification;\n         if (SystemClassificationMap.TryGetValue (SystemType, out systemClassification))\n         {\n            retVal = systemClassification.ToString();\n\n         }\n\n         return retVal;\n      }\n\n      /// <summary>\n      /// Sets up the attributes within the IFCDistributionSystem entity.\n      /// </summary>\n      /// <param name=\"ifcDistributionSystem\">Handle for IFC Distribution System.</param>\n      protected override void Process(IFCAnyHandle ifcDistributionSystem)\n      {\n         base.Process(ifcDistributionSystem);\n\n         LongName = IFCAnyHandleUtil.GetStringAttribute(ifcDistributionSystem, \"LongName\");\n\n         SystemType = IFCEnums.GetSafeEnumerationAttribute<IFCDistributionSystemEnum>(ifcDistributionSystem, \"PredefinedType\", IFCDistributionSystemEnum.NotDefined);\n\n         InitializeMaps();\n      }\n\n      protected IFCDistributionSystem()\n      {\n      }\n\n      /// <summary>\n      /// Constructs an IFCDistributionSystem, based on the IFCDistributionSystem handle.\n      /// </summary>\n      /// <param name=\"ifcDistributionSystem\">Handle representing IFCDistributionSystem.</param>\n      protected IFCDistributionSystem(IFCAnyHandle ifcDistributionSystem)\n      {\n         Process(ifcDistributionSystem);\n      }\n\n      /// <summary>\n      /// Processes the IFCDistributionSystem, setting up the attributes as needed.\n      /// </summary>\n      /// <param name=\"ifcDistributionSystem\">Handle representing IFCDistributionSystem.</param>\n      /// <returns>IFCDistributionSystem entity.</returns>\n      public static IFCDistributionSystem ProcessIFCDistributionSystem(IFCAnyHandle ifcDistributionSystem)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcDistributionSystem))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcDistributionSystem);\n            return null;\n         }\n\n         IFCEntity cachedIFCSystem;\n         IFCImportFile.TheFile.EntityMap.TryGetValue(ifcDistributionSystem.StepId, out cachedIFCSystem);\n         if (cachedIFCSystem != null)\n            return cachedIFCSystem as IFCDistributionSystem;\n\n         return new IFCDistributionSystem(ifcDistributionSystem);\n      }\n\n\n      /// <summary>\n      /// Indicates that IfcDistributionSystem can act as a container.  This may create another DirectShape Element, depending on circumstances.\n      /// </summary>\n      /// <returns>True if an IfcDistributionSystem indicated that it can be a container.</returns>\n      public override bool CanContainRelatedEntities => true;\n\n      /// <summary>\n      /// Creates internal parameters for the IFCDistributionSystem. \n      /// </summary>\n      /// <param name=\"doc\">Document containing Element.</param>\n      /// <param name=\"element\">Element containing Parameters.</param>\n      protected override void CreateParametersInternal(Document doc, Element element)\n      {\n         base.CreateParametersInternal(doc, element);\n\n         if (element != null)\n         {\n            MEPSystemClassification systemClassification = MEPSystemClassification.UndefinedSystemClassification;\n            if (SystemClassificationMap.TryGetValue(SystemType, out systemClassification))\n            {\n               string systemClassificationString = systemClassification.ToString();\n\n               // Add IfcSystemClassification parameter.\n               Category category = IFCPropertySet.GetCategoryForParameterIfValid(element, Id);\n               ParametersToSet.AddStringParameter(doc, element, category, this, \"SystemClassification\", systemClassificationString, Id);\n               ParametersToSet.AddStringParameter(doc, element, category, this, \"SystemName\", LongName, Id);\n            }\n         }\n      }\n\n      /// <summary>\n      /// Initialize Category and SystemClassification Maps.\n      /// </summary>\n      private static void InitializeMaps()\n      {\n         if (CategoryIdMap.Count == 0)\n         {\n            // All the categories for the different IFCDistributionSystem pre-defined types.\n            //\n            CategoryIdMap[IFCDistributionSystemEnum.AirConditioning] = BuiltInCategory.OST_DuctCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Audiovisual] = BuiltInCategory.OST_ElectricalEquipment;\n            CategoryIdMap[IFCDistributionSystemEnum.Chemical] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.ChilledWater] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Communication] = BuiltInCategory.OST_ElectricalEquipment;\n            CategoryIdMap[IFCDistributionSystemEnum.Compressedair] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.CondenserWater] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Control] = BuiltInCategory.OST_ElectricalEquipment;\n            CategoryIdMap[IFCDistributionSystemEnum.Conveying] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Data] = BuiltInCategory.OST_ElectricalEquipment;\n            CategoryIdMap[IFCDistributionSystemEnum.Disposal] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.DomesticcoldWater] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.DomestichotWater] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Drainage] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Earthing] = BuiltInCategory.OST_ElectricalEquipment;\n            CategoryIdMap[IFCDistributionSystemEnum.Electrical] = BuiltInCategory.OST_ElectricalEquipment;\n            CategoryIdMap[IFCDistributionSystemEnum.Electroacoustic] = BuiltInCategory.OST_ElectricalEquipment;\n            CategoryIdMap[IFCDistributionSystemEnum.Exhaust] = BuiltInCategory.OST_DuctCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Fireprotection] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Fuel] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Gas] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Hazardous] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Heating] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Lighting] = BuiltInCategory.OST_ElectricalEquipment;\n            CategoryIdMap[IFCDistributionSystemEnum.LightningProtection] = BuiltInCategory.OST_ElectricalEquipment;\n            CategoryIdMap[IFCDistributionSystemEnum.MunicipalSolidWaste] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Oil] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Operational] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.PowerGeneration] = BuiltInCategory.OST_ElectricalEquipment;\n            CategoryIdMap[IFCDistributionSystemEnum.RainWater] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Refrigeration] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Security] = BuiltInCategory.OST_ElectricalEquipment;\n            CategoryIdMap[IFCDistributionSystemEnum.Sewage] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Signal] = BuiltInCategory.OST_ElectricalEquipment;\n            CategoryIdMap[IFCDistributionSystemEnum.Stormwater] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Telephone] = BuiltInCategory.OST_ElectricalEquipment;\n            CategoryIdMap[IFCDistributionSystemEnum.Tv] = BuiltInCategory.OST_ElectricalEquipment;\n            CategoryIdMap[IFCDistributionSystemEnum.Vacuum] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Vent] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.Ventilation] = BuiltInCategory.OST_DuctCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.WasteWater] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.WaterSupply] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.UserDefined] = BuiltInCategory.OST_PipeCurves;\n            CategoryIdMap[IFCDistributionSystemEnum.NotDefined] = BuiltInCategory.OST_PipeCurves;\n         }\n\n         // All the System Classifications for the IFCDistributionSystems Predefined Types.\n         //\n         if (SystemClassificationMap.Count == 0)\n         {\n            SystemClassificationMap[IFCDistributionSystemEnum.AirConditioning] = MEPSystemClassification.SupplyAir;\n            SystemClassificationMap[IFCDistributionSystemEnum.Audiovisual] = MEPSystemClassification.Communication;\n            SystemClassificationMap[IFCDistributionSystemEnum.Chemical] = MEPSystemClassification.OtherPipe;\n            SystemClassificationMap[IFCDistributionSystemEnum.ChilledWater] = MEPSystemClassification.SupplyHydronic;\n            SystemClassificationMap[IFCDistributionSystemEnum.Communication] = MEPSystemClassification.Communication;\n            SystemClassificationMap[IFCDistributionSystemEnum.Compressedair] = MEPSystemClassification.OtherPipe;\n            SystemClassificationMap[IFCDistributionSystemEnum.CondenserWater] = MEPSystemClassification.SupplyHydronic;\n            SystemClassificationMap[IFCDistributionSystemEnum.Control] = MEPSystemClassification.Controls;\n            SystemClassificationMap[IFCDistributionSystemEnum.Conveying] = MEPSystemClassification.OtherPipe;\n            SystemClassificationMap[IFCDistributionSystemEnum.Data] = MEPSystemClassification.DataCircuit;\n            SystemClassificationMap[IFCDistributionSystemEnum.Disposal] = MEPSystemClassification.OtherPipe;\n            SystemClassificationMap[IFCDistributionSystemEnum.DomesticcoldWater] = MEPSystemClassification.DomesticColdWater;\n            SystemClassificationMap[IFCDistributionSystemEnum.DomestichotWater] = MEPSystemClassification.DomesticHotWater;\n            SystemClassificationMap[IFCDistributionSystemEnum.Drainage] = MEPSystemClassification.Storm;\n            SystemClassificationMap[IFCDistributionSystemEnum.Earthing] = MEPSystemClassification.UndefinedSystemClassification;\n            SystemClassificationMap[IFCDistributionSystemEnum.Electrical] = MEPSystemClassification.PowerCircuit;\n            SystemClassificationMap[IFCDistributionSystemEnum.Electroacoustic] = MEPSystemClassification.Communication;\n            SystemClassificationMap[IFCDistributionSystemEnum.Exhaust] = MEPSystemClassification.ExhaustAir;\n            SystemClassificationMap[IFCDistributionSystemEnum.Fireprotection] = MEPSystemClassification.FireProtectOther;\n            SystemClassificationMap[IFCDistributionSystemEnum.Fuel] = MEPSystemClassification.OtherPipe;\n            SystemClassificationMap[IFCDistributionSystemEnum.Gas] = MEPSystemClassification.OtherPipe;\n            SystemClassificationMap[IFCDistributionSystemEnum.Hazardous] = MEPSystemClassification.OtherPipe;\n            SystemClassificationMap[IFCDistributionSystemEnum.Heating] = MEPSystemClassification.SupplyHydronic;\n            SystemClassificationMap[IFCDistributionSystemEnum.Lighting] = MEPSystemClassification.PowerUnBalanced;\n            SystemClassificationMap[IFCDistributionSystemEnum.LightningProtection] = MEPSystemClassification.PowerUnBalanced;\n            SystemClassificationMap[IFCDistributionSystemEnum.MunicipalSolidWaste] = MEPSystemClassification.Sanitary;\n            SystemClassificationMap[IFCDistributionSystemEnum.Oil] = MEPSystemClassification.OtherPipe;\n            SystemClassificationMap[IFCDistributionSystemEnum.Operational] = MEPSystemClassification.OtherPipe;\n            SystemClassificationMap[IFCDistributionSystemEnum.PowerGeneration] = MEPSystemClassification.PowerCircuit;\n            SystemClassificationMap[IFCDistributionSystemEnum.RainWater] = MEPSystemClassification.Storm;\n            SystemClassificationMap[IFCDistributionSystemEnum.Refrigeration] = MEPSystemClassification.OtherPipe;\n            SystemClassificationMap[IFCDistributionSystemEnum.Security] = MEPSystemClassification.Security;\n            SystemClassificationMap[IFCDistributionSystemEnum.Sewage] = MEPSystemClassification.Sanitary;\n            SystemClassificationMap[IFCDistributionSystemEnum.Signal] = MEPSystemClassification.DataCircuit;\n            SystemClassificationMap[IFCDistributionSystemEnum.Stormwater] = MEPSystemClassification.OtherPipe;\n            SystemClassificationMap[IFCDistributionSystemEnum.Telephone] = MEPSystemClassification.Telephone;\n            SystemClassificationMap[IFCDistributionSystemEnum.Tv] = MEPSystemClassification.Communication;\n            SystemClassificationMap[IFCDistributionSystemEnum.Vacuum] = MEPSystemClassification.OtherPipe;\n            SystemClassificationMap[IFCDistributionSystemEnum.Vent] = MEPSystemClassification.Vent;\n            SystemClassificationMap[IFCDistributionSystemEnum.Ventilation] = MEPSystemClassification.OtherAir;\n            SystemClassificationMap[IFCDistributionSystemEnum.WasteWater] = MEPSystemClassification.Sanitary;\n            SystemClassificationMap[IFCDistributionSystemEnum.WaterSupply] = MEPSystemClassification.Sanitary;\n            SystemClassificationMap[IFCDistributionSystemEnum.UserDefined] = MEPSystemClassification.OtherPipe;\n            SystemClassificationMap[IFCDistributionSystemEnum.NotDefined] = MEPSystemClassification.OtherPipe;\n         }\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCDoorLiningProperties.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcDoorLiningProperties\r\n   /// </summary>\r\n   public class IFCDoorLiningProperties : IFCDoorWindowPropertyBase\r\n   {\r\n      /// <summary>\r\n      /// The list of properties contained in IFCDoorLiningProperties.\r\n      /// </summary>\r\n      static IList<Tuple<string, ForgeTypeId, AllowedValues>> m_DoorLiningPropertyDescs = null;\r\n\r\n      /// <summary>\r\n      /// Processes IfcDoorLiningProperties attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcDoorLiningProperties\">The IfcDoorLiningProperties handle.</param>\r\n      protected IFCDoorLiningProperties(IFCAnyHandle ifcDoorLiningProperties)\r\n      {\r\n         Process(ifcDoorLiningProperties);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcDoorLiningProperties entity.\r\n      /// </summary>\r\n      /// <param name=\"ifcDoorLiningProperties\">The IfcDoorLiningProperties handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcDoorLiningProperties)\r\n      {\r\n         base.Process(ifcDoorLiningProperties);\r\n\r\n         if (m_DoorLiningPropertyDescs == null)\r\n         {\r\n            bool atLeastIfc4 = IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete);\r\n            m_DoorLiningPropertyDescs = new List<Tuple<string, ForgeTypeId, AllowedValues>>();\r\n            m_DoorLiningPropertyDescs.Add(Tuple.Create(\"LiningDepth\", SpecTypeId.Length, AllowedValues.Positive));\r\n            m_DoorLiningPropertyDescs.Add(Tuple.Create(\"LiningThickness\", SpecTypeId.Length, atLeastIfc4 ? AllowedValues.NonNegative: AllowedValues.Positive));\r\n            m_DoorLiningPropertyDescs.Add(Tuple.Create(\"ThresholdDepth\", SpecTypeId.Length, AllowedValues.Positive));\r\n            m_DoorLiningPropertyDescs.Add(Tuple.Create(\"ThresholdThickness\", SpecTypeId.Length, atLeastIfc4 ? AllowedValues.NonNegative : AllowedValues.Positive));\r\n            m_DoorLiningPropertyDescs.Add(Tuple.Create(\"TransomThickness\", SpecTypeId.Length, atLeastIfc4 ? AllowedValues.NonNegative : AllowedValues.Positive));\r\n            m_DoorLiningPropertyDescs.Add(Tuple.Create(\"TransomOffset\", SpecTypeId.Length, AllowedValues.All));\r\n            m_DoorLiningPropertyDescs.Add(Tuple.Create(\"LiningOffset\", SpecTypeId.Length, AllowedValues.All));\r\n            m_DoorLiningPropertyDescs.Add(Tuple.Create(\"ThresholdOffset\", SpecTypeId.Length, AllowedValues.All));\r\n            m_DoorLiningPropertyDescs.Add(Tuple.Create(\"CasingThickness\", SpecTypeId.Length, AllowedValues.Positive));\r\n            m_DoorLiningPropertyDescs.Add(Tuple.Create(\"CasingDepth\", SpecTypeId.Length, AllowedValues.Positive));\r\n            if (atLeastIfc4)\r\n            {\r\n               m_DoorLiningPropertyDescs.Add(Tuple.Create(\"LiningToPanelOffsetX\", SpecTypeId.Length, AllowedValues.All));\r\n               m_DoorLiningPropertyDescs.Add(Tuple.Create(\"LiningToPanelOffsetY\", SpecTypeId.Length, AllowedValues.All));\r\n            }\r\n         }\r\n\r\n         foreach (Tuple<string, ForgeTypeId, AllowedValues> propertyDesc in m_DoorLiningPropertyDescs)\r\n         {\r\n            // Default is nonsense value.\r\n            double currPropertyValue = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(ifcDoorLiningProperties, propertyDesc.Item1, -1e+30);\r\n            if (!MathUtil.IsAlmostEqual(currPropertyValue, -1e+30))\r\n               DoubleProperties[propertyDesc] = currPropertyValue;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcDoorLiningProperties set.\r\n      /// </summary>\r\n      /// <param name=\"ifcDoorLiningProperties\">The IfcDoorLiningProperties object.</param>\r\n      /// <returns>The IFCDoorLiningProperties object.</returns>\r\n      public static IFCDoorLiningProperties ProcessIFCDoorLiningProperties(IFCAnyHandle ifcDoorLiningProperties)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcDoorLiningProperties))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcDoorLiningProperties);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity doorLiningProperties;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcDoorLiningProperties.StepId, out doorLiningProperties))\r\n            return (doorLiningProperties as IFCDoorLiningProperties);\r\n\r\n         return new IFCDoorLiningProperties(ifcDoorLiningProperties);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCDoorPanelProperties.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcDoorPanelProperties\r\n   /// </summary>\r\n   public class IFCDoorPanelProperties : IFCDoorWindowPropertyBase\r\n   {\r\n      int PanelNumber { get; set; }\r\n\r\n      /// <summary>\r\n      /// Processes IfcDoorPanelProperties attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcDoorPanelProperties\">The IfcDoorPanelProperties handle.</param>\r\n      /// <param name=\"panelNumber\">The panel number.</param>\r\n      protected IFCDoorPanelProperties(IFCAnyHandle ifcDoorPanelProperties, int panelNumber)\r\n      {\r\n         PanelNumber = panelNumber;\r\n         Process(ifcDoorPanelProperties);\r\n      }\r\n\r\n      private string GeneratePropertyName(string originalPropertyName)\r\n      {\r\n         if (PanelNumber <= 1)\r\n            return originalPropertyName;\r\n         else\r\n            return originalPropertyName + \" \" + PanelNumber;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcDoorPanelProperties entity.\r\n      /// </summary>\r\n      /// <param name=\"ifcDoorPanelProperties\">The IfcDoorPanelProperties handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcDoorPanelProperties)\r\n      {\r\n         base.Process(ifcDoorPanelProperties);\r\n\r\n         double currPropertyValue = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(ifcDoorPanelProperties, \"PanelDepth\", -1e+30);\r\n         if (!MathUtil.IsAlmostEqual(currPropertyValue, -1e+30))\r\n            DoubleProperties[Tuple.Create(GeneratePropertyName(\"PanelDepth\"),\r\n                SpecTypeId.Length, AllowedValues.Positive)] = currPropertyValue;\r\n\r\n         currPropertyValue = IFCImportHandleUtil.GetOptionalRealAttribute(ifcDoorPanelProperties, \"PanelWidth\", -1e+30);\r\n         if (!MathUtil.IsAlmostEqual(currPropertyValue, -1e+30))\r\n            DoubleProperties[Tuple.Create(GeneratePropertyName(\"PanelWidth\"),\r\n                SpecTypeId.Number, AllowedValues.NonNegative)] = currPropertyValue;\r\n\r\n         string currPropertyValueString = IFCAnyHandleUtil.GetEnumerationAttribute(ifcDoorPanelProperties, \"PanelOperation\");\r\n         if (!string.IsNullOrEmpty(currPropertyValueString))\r\n            StringProperties[GeneratePropertyName(\"PanelOperation\")] = currPropertyValueString;\r\n\r\n         currPropertyValueString = IFCAnyHandleUtil.GetEnumerationAttribute(ifcDoorPanelProperties, \"PanelPosition\");\r\n         if (!string.IsNullOrEmpty(currPropertyValueString))\r\n            StringProperties[GeneratePropertyName(\"PanelPosition\")] = currPropertyValueString;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcDoorPanelProperties set.\r\n      /// </summary>\r\n      /// <param name=\"ifcDoorPanelProperties\">The IfcDoorPanelProperties object.</param>\r\n      /// <param name=\"panelNumber\">The panel number, based on the containing IfcObject.</param>\r\n      /// <returns>The IFCDoorPanelProperties object.</returns>\r\n      public static IFCDoorPanelProperties ProcessIFCDoorPanelProperties(IFCAnyHandle ifcDoorPanelProperties, int panelNumber)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcDoorPanelProperties))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcDoorPanelProperties);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity doorPanelProperties;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcDoorPanelProperties.StepId, out doorPanelProperties))\r\n            return (doorPanelProperties as IFCDoorPanelProperties);\r\n\r\n         return new IFCDoorPanelProperties(ifcDoorPanelProperties, panelNumber);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCDoorStyle.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IFC2x3 IfcDoorStyle.\r\n   /// </summary>\r\n   public class IFCDoorStyle : IFCTypeProduct\r\n   {\r\n      private IFCDoorStyleOperation m_OperationType;\r\n\r\n      private IFCDoorStyleConstruction m_ConstructionType;\r\n\r\n      /// <summary>\r\n      /// The operation type.\r\n      /// </summary>\r\n      public IFCDoorStyleOperation OperationType\r\n      {\r\n         get { return m_OperationType; }\r\n         protected set { m_OperationType = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The construction type.\r\n      /// </summary>\r\n      public IFCDoorStyleConstruction ConstructionType\r\n      {\r\n         get { return m_ConstructionType; }\r\n         protected set { m_ConstructionType = value; }\r\n      }\r\n\r\n      protected IFCDoorStyle()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCDoorStyle from the IfcDoorStyle handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcDoorStyle\">The IfcDoorStyle handle.</param>\r\n      protected IFCDoorStyle(IFCAnyHandle ifcDoorStyle)\r\n      {\r\n         Process(ifcDoorStyle);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcDoorStyle attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcDoorStyle\">The IfcDoorStyle handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcDoorStyle)\r\n      {\r\n         base.Process(ifcDoorStyle);\r\n\r\n         OperationType = IFCEnums.GetSafeEnumerationAttribute<IFCDoorStyleOperation>(ifcDoorStyle, \"OperationType\", IFCDoorStyleOperation.NotDefined);\r\n\r\n         ConstructionType = IFCEnums.GetSafeEnumerationAttribute<IFCDoorStyleConstruction>(ifcDoorStyle, \"ConstructionType\", IFCDoorStyleConstruction.NotDefined);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcDoorStyle.\r\n      /// </summary>\r\n      /// <param name=\"ifcDoorStyle\">The IfcDoorStyle handle.</param>\r\n      /// <returns>The IFCDoorStyle object.</returns>\r\n      public static IFCDoorStyle ProcessIFCDoorStyle(IFCAnyHandle ifcDoorStyle)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcDoorStyle))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcDoorStyle);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity doorStyle;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcDoorStyle.StepId, out doorStyle))\r\n            return (doorStyle as IFCDoorStyle);\r\n\r\n         return new IFCDoorStyle(ifcDoorStyle);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit element params based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      protected override void CreateParametersInternal(Document doc, Element element)\r\n      {\r\n         base.CreateParametersInternal(doc, element);\r\n\r\n         if (element != null)\r\n         {\r\n            Category category = IFCPropertySet.GetCategoryForParameterIfValid(element, Id);\r\n            if (category != null)\r\n            {\r\n               IFCDefaultProcessor processor = Importer.TheProcessor as IFCDefaultProcessor;\r\n               if (processor != null)\r\n               {\r\n                  processor.SetElementStringParameter(element, Id, BuiltInParameter.DOOR_OPERATION_TYPE, OperationType.ToString(), false, ParametersToSet);\r\n                  processor.SetElementStringParameter(element, Id, BuiltInParameter.DOOR_CONSTRUCTION_TYPE, ConstructionType.ToString(), false, ParametersToSet);\r\n               }\r\n               else\r\n               {\r\n                  Importer.TheProcessor.SetStringParameter(element, Id, BuiltInParameter.DOOR_OPERATION_TYPE, OperationType.ToString(), false);\r\n                  Importer.TheProcessor.SetStringParameter(element, Id, BuiltInParameter.DOOR_CONSTRUCTION_TYPE, ConstructionType.ToString(), false);\r\n               }\r\n\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcOperationType\", OperationType.ToString(), Id);\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcConstructionType\", ConstructionType.ToString(), Id);\r\n            }\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCDoorType.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Import.Enums;\n\nnamespace Revit.IFC.Import.Data\n{\n   /// <summary>\n   /// Represents an IFC4 IfcDoorType.\n   /// </summary>\n   public class IFCDoorType : IFCTypeProduct\n   {\n      private IFCDoorTypeOperation m_OperationType;\n\n      /// <summary>\n      /// The operation type.\n      /// </summary>\n      public IFCDoorTypeOperation OperationType\n      {\n         get { return m_OperationType; }\n         protected set { m_OperationType = value; }\n      }\n\n      protected IFCDoorType()\n      {\n      }\n\n      /// <summary>\n      /// Constructs an IFCDoorType from the IfcDoorType handle.\n      /// </summary>\n      /// <param name=\"ifcDoorType\">The IfcDoorType handle.</param>\n      protected IFCDoorType(IFCAnyHandle ifcDoorType)\n      {\n         Process(ifcDoorType);\n      }\n\n      /// <summary>\n      /// Processes IfcDoorType attributes.\n      /// </summary>\n      /// <param name=\"ifcDoorType\">The IfcDoorType handle.</param>\n      protected override void Process(IFCAnyHandle ifcDoorType)\n      {\n         base.Process(ifcDoorType);\n\n         OperationType = IFCEnums.GetSafeEnumerationAttribute<IFCDoorTypeOperation>(ifcDoorType, \"OperationType\", IFCDoorTypeOperation.NotDefined);\n      }\n\n      /// <summary>\n      /// Processes an IfcDoorType.\n      /// </summary>\n      /// <param name=\"ifcDoorType\">The IfcDoorType handle.</param>\n      /// <returns>The IFCDoorType object.</returns>\n      public static IFCDoorType ProcessIFCDoorType(IFCAnyHandle ifcDoorType)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcDoorType))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcDoorType);\n            return null;\n         }\n\n         IFCEntity doorType;\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcDoorType.StepId, out doorType))\n            return (doorType as IFCDoorType);\n\n         return new IFCDoorType(ifcDoorType);\n      }\n\n      /// <summary>\n      /// Creates or populates Revit element params based on the information contained in this class.\n      /// </summary>\n      /// <param name=\"doc\">The document.</param>\n      /// <param name=\"element\">The element.</param>\n      protected override void CreateParametersInternal(Document doc, Element element)\n      {\n         base.CreateParametersInternal(doc, element);\n\n         if (element == null)\n            return;\n\n         IFCDefaultProcessor processor = Importer.TheProcessor as IFCDefaultProcessor;\n         if (processor != null)\n         {\n            processor.SetElementStringParameter(element, Id, BuiltInParameter.DOOR_OPERATION_TYPE, OperationType.ToString(), false, ParametersToSet);\n         }\n         else\n         {\n            Importer.TheProcessor.SetStringParameter(element, Id, BuiltInParameter.DOOR_OPERATION_TYPE, OperationType.ToString(), false);\n         }\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCDoorWindowPropertyBase.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents a base class for IfcDoor/IfcWindow Lining and Panel Properties.\r\n   /// </summary>\r\n   public abstract class IFCDoorWindowPropertyBase : IFCPropertySetDefinition\r\n   {\r\n      /// <summary>\r\n      /// The contained set of double IFC properties, values already scaled.\r\n      /// </summary>\r\n      IDictionary<Tuple<string, ForgeTypeId, AllowedValues>, double> m_DoubleProperties = null;\r\n\r\n      /// <summary>\r\n      /// The contained set of string IFC properties.\r\n      /// </summary>\r\n      IDictionary<string, string> m_StringProperties = null;\r\n\r\n      /// <summary>\r\n      /// The double properties, values already scaled.\r\n      /// </summary>\r\n      public IDictionary<Tuple<string, ForgeTypeId, AllowedValues>, double> DoubleProperties\r\n      {\r\n         get\r\n         {\r\n            if (m_DoubleProperties == null)\r\n               m_DoubleProperties = new Dictionary<Tuple<string, ForgeTypeId, AllowedValues>, double>();\r\n            return m_DoubleProperties;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The string properties.\r\n      /// </summary>\r\n      public IDictionary<string, string> StringProperties\r\n      {\r\n         get\r\n         {\r\n            if (m_StringProperties == null)\r\n               m_StringProperties = new Dictionary<string, string>();\r\n            return m_StringProperties;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The default constructor.\r\n      /// </summary>\r\n      protected IFCDoorWindowPropertyBase()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFCDoorWindowPropertyBase entity.\r\n      /// </summary>\r\n      /// <param name=\"ifcDoorWindowPropertyBase\">The ifcDoorWindowPropertyBase handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcDoorWindowPropertyBase)\r\n      {\r\n         base.Process(ifcDoorWindowPropertyBase);\r\n\r\n         IFCAnyHandle shapeAspectStyle = IFCImportHandleUtil.GetOptionalInstanceAttribute(ifcDoorWindowPropertyBase, \"ShapeAspectStyle\");\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(shapeAspectStyle))\r\n            Importer.TheLog.LogError(Id, \"ShapeAspectStyle unsupported.\", false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a property set for a given element.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element being created.</param>\r\n      /// <param name=\"parameterGroupMap\">The parameters of the element.  Cached for performance.</param>\r\n      /// <returns>The name of the property set created, if it was created, and a Boolean value if it should be added to the property set list.</returns>\r\n      public override Tuple<string, bool> CreatePropertySet(Document doc, Element element, IFCObjectDefinition objDef, \r\n         IFCParameterSetByGroup parameterGroupMap, ParametersToSet parametersToSet)\r\n      {\r\n         IDictionary<string, IFCData> parametersToAdd = new Dictionary<string, IFCData>();\r\n         Category category = IFCPropertySet.GetCategoryForParameterIfValid(element, Id);\r\n\r\n         foreach (KeyValuePair<Tuple<string, ForgeTypeId, AllowedValues>, double> property in DoubleProperties)\r\n         {\r\n            string name = property.Key.Item1;\r\n            Parameter existingParameter = null;\r\n            if (!parameterGroupMap.TryFindParameter(name, out existingParameter))\r\n            {\r\n               ForgeTypeId valueType = property.Key.Item2;\r\n               // If we aren't scaling values, all length values have come from Attributes\r\n               // and so will always be in feet.\r\n               ForgeTypeId unitType = (!Importer.TheProcessor.ScaleValues && valueType == SpecTypeId.Length) ? \r\n                  UnitTypeId.Feet : null;\r\n               parametersToSet.AddParameterDouble(doc, element, category, objDef, name, valueType, unitType, property.Value, Id);\r\n               continue;\r\n            }\r\n\r\n            switch (existingParameter.StorageType)\r\n            {\r\n               case StorageType.String:\r\n                  parametersToSet.AddStringParameter(existingParameter, property.Value.ToString());\r\n                  break;\r\n               case StorageType.Double:\r\n                  parametersToSet.AddDoubleParameter(existingParameter, property.Value);\r\n                  break;\r\n               default:\r\n                  Importer.TheLog.LogError(Id, \"couldn't create parameter: \" + name + \" of storage type: \" + existingParameter.StorageType.ToString(), false);\r\n                  break;\r\n            }\r\n         }\r\n\r\n         foreach (KeyValuePair<string, string> property in StringProperties)\r\n         {\r\n            string name = property.Key;\r\n            Parameter existingParameter = null;\r\n            if (!parameterGroupMap.TryFindParameter(name, out existingParameter))\r\n            {\r\n               parametersToSet.AddStringParameter(doc, element, category, objDef, property.Key, property.Value, Id);\r\n               continue;\r\n            }\r\n\r\n            switch (existingParameter.StorageType)\r\n            {\r\n               case StorageType.String:\r\n                  parametersToSet.AddStringParameter(existingParameter, property.Value);\r\n                  break;\r\n               default:\r\n                  Importer.TheLog.LogError(Id, \"couldn't create parameter: \" + name + \" of storage type: \" + existingParameter.StorageType.ToString(), false);\r\n                  break;\r\n            }\r\n         }\r\n\r\n         return Tuple.Create(\"\\\"\" + EntityType.ToString() + \"\\\"\", false);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCEdge.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IfcEdge entity\r\n   /// </summary>\r\n   public class IFCEdge : IFCTopologicalRepresentationItem\r\n   {\r\n      /// <summary>\r\n      /// Start point of the edge\r\n      /// </summary>\r\n      public IFCVertex EdgeStart { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// End point of the edge\r\n      /// </summary>\r\n      public IFCVertex EdgeEnd { get; protected set; } = null;\r\n\r\n      protected IFCEdge()\r\n      {\r\n      }\r\n\r\n      protected IFCEdge(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcEdge)\r\n      {\r\n         base.Process(ifcEdge);\r\n\r\n         // The ODA toolkit doesn't support derived attributes.  As such, we will\r\n         // let IfcOrientedEdge compute them.\r\n         IFCAnyHandle edgeStart = IFCImportHandleUtil.GetOptionalInstanceAttribute(ifcEdge, \"EdgeStart\");\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(edgeStart))\r\n         {\r\n            if (!(this is IFCOrientedEdge))\r\n            {\r\n               Importer.TheLog.LogError(ifcEdge.StepId, \"Cannot find the starting vertex\", true);\r\n               return;\r\n            }\r\n         }\r\n         else\r\n         {\r\n            EdgeStart = IFCVertex.ProcessIFCVertex(edgeStart);\r\n         }\r\n\r\n         IFCAnyHandle edgeEnd = IFCImportHandleUtil.GetOptionalInstanceAttribute(ifcEdge, \"EdgeEnd\");\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(edgeEnd))\r\n         {\r\n            if (!(this is IFCOrientedEdge))\r\n            {\r\n               Importer.TheLog.LogError(ifcEdge.StepId, \"Cannot find the ending vertex\", true);\r\n               return;\r\n            }\r\n         }\r\n         else\r\n         {\r\n            EdgeEnd = IFCVertex.ProcessIFCVertex(edgeEnd);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the curve which defines the shape and spatial location of this edge.\r\n      /// </summary>\r\n      /// <returns>The curve which defines the shape and spatial location of this edge.</returns>\r\n      public virtual Curve GetGeometry()\r\n      {\r\n         if (EdgeStart == null || EdgeEnd == null)\r\n         {\r\n            Importer.TheLog.LogError(Id, \"Invalid edge\", true);\r\n            return null;\r\n         }\r\n         return Line.CreateBound(EdgeStart.GetCoordinate(), EdgeEnd.GetCoordinate());\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCEdge object from a handle of type IfcEdge\r\n      /// </summary>\r\n      /// <param name=\"ifcEdge\">The IFC handle</param>\r\n      /// <returns>The IfcEdge object</returns>\r\n      public static IFCEdge ProcessIFCEdge(IFCAnyHandle ifcEdge)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcEdge))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcEdge);\r\n            return null;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcEdge, IFCEntityType.IfcOrientedEdge))\r\n            return IFCOrientedEdge.ProcessIFCOrientedEdge(ifcEdge);\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcEdge, IFCEntityType.IfcEdgeCurve))\r\n            return IFCEdgeCurve.ProcessIFCEdgeCurve(ifcEdge);\r\n\r\n         IFCEntity edge;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcEdge.StepId, out edge))\r\n            edge = new IFCEdge(ifcEdge);\r\n         return (edge as IFCEdge);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCEdgeCurve.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IfcEdgeCurve entity\r\n   /// </summary>\r\n   public class IFCEdgeCurve : IFCEdge\r\n   {\r\n      private IFCCurve m_EdgeGeometry = null;\r\n\r\n      private bool m_SameSense;\r\n\r\n      /// <summary>\r\n      /// The flag that indicates whether the senses of the edge and the curve defining the edge geometry are the same.\r\n      /// </summary>\r\n      public bool SameSense\r\n      {\r\n         get { return m_SameSense; }\r\n         set { m_SameSense = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The curve which defines the shape and spatial location of the edge.\r\n      /// </summary>\r\n      public IFCCurve EdgeGeometry\r\n      {\r\n         get { return m_EdgeGeometry; }\r\n         set { m_EdgeGeometry = value; }\r\n\r\n      }\r\n      protected IFCEdgeCurve()\r\n      {\r\n      }\r\n\r\n      protected IFCEdgeCurve(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcEdgeCurve)\r\n      {\r\n         base.Process(ifcEdgeCurve);\r\n         IFCAnyHandle edgeGeometry = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcEdgeCurve, \"EdgeGeometry\", true);\r\n         EdgeGeometry = IFCCurve.ProcessIFCCurve(edgeGeometry);\r\n\r\n         bool found = false;\r\n         bool sameSense = IFCImportHandleUtil.GetRequiredBooleanAttribute(ifcEdgeCurve, \"SameSense\", out found);\r\n         if (found)\r\n            SameSense = sameSense;\r\n         else\r\n         {\r\n            Importer.TheLog.LogWarning(ifcEdgeCurve.StepId, \"Cannot find SameSense attribute, defaulting to true\", false);\r\n            SameSense = true;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCEdgeCurve object from a handle of type IfcEdgeCurve\r\n      /// </summary>\r\n      /// <param name=\"ifcEdgeCurve\">The IFC handle</param>\r\n      /// <returns>The IFCEdgeCurve object</returns>\r\n      public static IFCEdgeCurve ProcessIFCEdgeCurve(IFCAnyHandle ifcEdgeCurve)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcEdgeCurve))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcEdgeCurve);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity edge;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcEdgeCurve.StepId, out edge))\r\n            edge = new IFCEdgeCurve(ifcEdgeCurve);\r\n         return (edge as IFCEdgeCurve);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the curve which defines the shape and spatial location of this edge.\r\n      /// </summary>\r\n      /// <returns>The curve which defines the shape and spatial location of this edge.</returns>\r\n      public override Curve GetGeometry()\r\n      {\r\n         // IfcCurve has a method called GetCurves which returns a list of curve\r\n         if (EdgeGeometry == null)\r\n            return null;\r\n         else\r\n            return EdgeGeometry.Curve;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCEdgeLoop.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IfcEdgeLoop entity\r\n   /// </summary>\r\n   public class IFCEdgeLoop : IFCLoop\r\n   {\r\n      IList<IFCOrientedEdge> m_EdgeList = null;\r\n\r\n      /// <summary>\r\n      /// A list of oriented edge entities which are concatenated together to form this path.\r\n      /// </summary>\r\n      public IList<IFCOrientedEdge> EdgeList\r\n      {\r\n         get\r\n         {\r\n            if (m_EdgeList == null)\r\n            {\r\n               m_EdgeList = new List<IFCOrientedEdge>();\r\n            }\r\n            return m_EdgeList;\r\n         }\r\n         set { m_EdgeList = value; }\r\n      }\r\n\r\n      protected IFCEdgeLoop()\r\n      {\r\n      }\r\n\r\n      protected IFCEdgeLoop(IFCAnyHandle ifcEdgeLoop)\r\n      {\r\n         Process(ifcEdgeLoop);\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcEdgeLoop)\r\n      {\r\n         base.Process(ifcEdgeLoop);\r\n\r\n         // TODO in REVIT-61368: checks that edgeList is closed and continuous\r\n         IList<IFCAnyHandle> edgeList = IFCAnyHandleUtil.GetValidAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcEdgeLoop, \"EdgeList\");\r\n         if (edgeList == null)\r\n         {\r\n            Importer.TheLog.LogError(Id, \"Cannot find the EdgeList of this loop\", true);\r\n         }\r\n         IFCOrientedEdge orientedEdge = null;\r\n         foreach (IFCAnyHandle edge in edgeList)\r\n         {\r\n            orientedEdge = IFCOrientedEdge.ProcessIFCOrientedEdge(edge);\r\n            EdgeList.Add(orientedEdge);\r\n         }\r\n      }\r\n\r\n      protected override CurveLoop GenerateLoop()\r\n      {\r\n         CurveLoop curveLoop = new CurveLoop();\r\n         foreach (IFCOrientedEdge edge in EdgeList)\r\n         {\r\n            if (edge != null)\r\n               curveLoop.Append(edge.GetGeometry());\r\n         }\r\n         return curveLoop;\r\n      }\r\n\r\n      protected override IList<XYZ> GenerateLoopVertices()\r\n      {\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCEdgeLoop object from a handle of type IfcEdgeLoop.\r\n      /// </summary>\r\n      /// <param name=\"ifcEdgeLoop\">The IFC handle.</param>\r\n      /// <returns>The IFCEdgeLoop object.</returns>\r\n      public static IFCEdgeLoop ProcessIFCEdgeLoop(IFCAnyHandle ifcEdgeLoop)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcEdgeLoop))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcFace);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity edgeLoop;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcEdgeLoop.StepId, out edgeLoop))\r\n            edgeLoop = new IFCEdgeLoop(ifcEdgeLoop);\r\n         return (edgeLoop as IFCEdgeLoop);\r\n      }\r\n\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         if (shapeEditScope.BuilderScope == null)\r\n         {\r\n            throw new InvalidOperationException(\"BuilderScope hasn't been initialized yet\");\r\n         }\r\n\r\n         BrepBuilderScope brepBuilderScope = null;\r\n         TessellatedShapeBuilderScope tsbScope = null;\r\n\r\n         if (shapeEditScope.BuilderType == IFCShapeBuilderType.BrepBuilder)\r\n            brepBuilderScope = shapeEditScope.BuilderScope as BrepBuilderScope;\r\n         else if (shapeEditScope.BuilderType == IFCShapeBuilderType.TessellatedShapeBuilder)\r\n            tsbScope = shapeEditScope.BuilderScope as TessellatedShapeBuilderScope;\r\n\r\n         if (brepBuilderScope == null && tsbScope == null)\r\n            throw new InvalidOperationException(\"The wrong BuilderScope is created\");\r\n\r\n         List<XYZ> vertices = new List<XYZ>();\r\n\r\n         foreach (IFCOrientedEdge edge in EdgeList)\r\n         {\r\n            if (edge == null || edge.EdgeStart == null || edge.EdgeEnd == null)\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Invalid edge loop\", true);\r\n               return;\r\n            }\r\n\r\n            edge.CreateShape(shapeEditScope, scaledLcs, guid);\r\n\r\n            IFCEdge edgeElement = edge.EdgeElement;\r\n            Curve edgeGeometry = (edgeElement is IFCEdgeCurve) ? edgeElement.GetGeometry() : null;\r\n\r\n            if (edgeGeometry == null)\r\n               Importer.TheLog.LogError(edgeElement.Id, \"Cannot get the edge geometry of this edge\", true);\r\n\r\n            XYZ edgeStart = edgeElement.EdgeStart.GetCoordinate();\r\n            XYZ edgeEnd = edgeElement.EdgeEnd.GetCoordinate();\r\n\r\n            if (edgeStart == null || edgeEnd == null)\r\n               Importer.TheLog.LogError(Id, \"Invalid start or end vertices\", true);\r\n\r\n            bool orientation = scaledLcs.HasReflection ? !edge.Orientation : edge.Orientation;\r\n\r\n            XYZ transformedEdgeStart = scaledLcs.OfPoint(edgeStart);\r\n            XYZ transformedEdgeEnd = scaledLcs.OfPoint(edgeEnd);\r\n            Curve transformedEdgeGeometry = edgeGeometry.CreateTransformed(scaledLcs);\r\n\r\n            if (brepBuilderScope != null)\r\n            {\r\n               if (!brepBuilderScope.AddOrientedEdgeToTheBoundary(edgeElement.Id,\r\n                  transformedEdgeGeometry, transformedEdgeStart, transformedEdgeEnd,\r\n                  orientation))\r\n               {\r\n                  Importer.TheLog.LogWarning(edge.Id, \"Cannot add this edge to the edge loop with Id: \" + Id, false);\r\n                  IsValidForCreation = false;\r\n                  return;\r\n               }\r\n            }\r\n            else\r\n            {\r\n               bool firstEdge = (vertices.Count == 0);\r\n               if (edgeGeometry is Line)\r\n               {\r\n                  if (firstEdge)\r\n                     vertices.Add(orientation ? transformedEdgeStart : transformedEdgeEnd);\r\n                  vertices.Add(orientation ? transformedEdgeEnd : transformedEdgeStart);\r\n               }\r\n               else\r\n               {\r\n                  IList<XYZ> newPoints = transformedEdgeGeometry.Tessellate();\r\n                  vertices.AddRange(firstEdge ? newPoints : newPoints.Skip(1));\r\n               }\r\n            }\r\n         }\r\n \r\n         if (vertices.Count > 0)\r\n            tsbScope.AddLoopVertices(Id, vertices);\r\n        \r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCElement.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Revit.IFC.Common.Enums;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nusing TemporaryDisableLogging = Revit.IFC.Import.Utility.IFCImportOptions.TemporaryDisableLogging;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcElement.\r\n   /// </summary>\r\n   /// <remarks>This class is non-abstract until all derived classes are defined.</remarks>\r\n   public class IFCElement : IFCProduct\r\n   {\r\n      protected string m_Tag = null;\r\n\r\n      protected ICollection<IFCFeatureElementSubtraction> m_Openings = null;\r\n\r\n      protected ICollection<IFCPort> m_Ports = null;\r\n\r\n      protected IFCFeatureElementSubtraction m_FillsOpening = null;\r\n\r\n      /// <summary>\r\n      /// The \"Tag\" field associated with the IfcElement.\r\n      /// </summary>\r\n      public string Tag\r\n      {\r\n         get { return m_Tag; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The openings that void the IfcElement.\r\n      /// </summary>\r\n      public ICollection<IFCFeatureElementSubtraction> Openings\r\n      {\r\n         get\r\n         {\r\n            if (m_Openings == null)\r\n               m_Openings = new List<IFCFeatureElementSubtraction>();\r\n            return m_Openings;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The ports associated with the IfcElement, via IfcRelConnectsPortToElement.\r\n      /// </summary>\r\n      public ICollection<IFCPort> Ports\r\n      {\r\n         get\r\n         {\r\n            if (m_Ports == null)\r\n               m_Ports = new List<IFCPort>();\r\n            return m_Ports;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The opening that is filled by the IfcElement.\r\n      /// </summary>\r\n      public IFCFeatureElementSubtraction FillsOpening\r\n      {\r\n         get { return m_FillsOpening; }\r\n         set { m_FillsOpening = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCElement()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCElement from the IfcElement handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcElement\">The IfcElement handle.</param>\r\n      protected IFCElement(IFCAnyHandle ifcElement)\r\n      {\r\n         Process(ifcElement);\r\n      }\r\n\r\n      private void ProcessOpenings(IFCAnyHandle ifcElement)\r\n      {\r\n         ICollection<IFCAnyHandle> hasOpenings = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcElement, \"HasOpenings\");\r\n         if (hasOpenings != null)\r\n         {\r\n            foreach (IFCAnyHandle hasOpening in hasOpenings)\r\n            {\r\n               IFCAnyHandle relatedOpeningElement = IFCAnyHandleUtil.GetInstanceAttribute(hasOpening, \"RelatedOpeningElement\");\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(relatedOpeningElement))\r\n                  continue;\r\n\r\n               IFCFeatureElementSubtraction opening = IFCFeatureElementSubtraction.ProcessIFCFeatureElementSubtraction(relatedOpeningElement);\r\n               if (opening != null)\r\n               {\r\n                  opening.VoidsElement = this;\r\n                  Openings.Add(opening);\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcElement attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcElement\">The IfcElement handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcElement)\r\n      {\r\n         base.Process(ifcElement);\r\n\r\n         m_Tag = IFCAnyHandleUtil.GetStringAttribute(ifcElement, \"Tag\");\r\n\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC2x2) || IFCAnyHandleUtil.IsSubTypeOf(ifcElement, IFCEntityType.IfcBuildingElement))\r\n            ProcessOpenings(ifcElement);\r\n\r\n         // \"HasPorts\" is new to IFC2x2.\r\n         // For IFC4, \"HasPorts\" has moved to IfcDistributionElement.  We'll keep the check here, but we will only check it\r\n         // if we are exporting before IFC4 or if we have an IfcDistributionElement handle.\r\n         bool checkPorts = (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC2x3)) &&\r\n            (!IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete) || IFCAnyHandleUtil.IsSubTypeOf(ifcElement, IFCEntityType.IfcDistributionElement));\r\n\r\n         if (checkPorts)\r\n         {\r\n            // Since IFC4 the inverse attribute 'HasPorts' is deprecated.\r\n            // Relationship to ports, contained within the IfcDistributionElement is now realized by the inverse relationship NestedBy referencing IfcRelNests.\r\n            if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4))\r\n            {\r\n               ICollection<IFCAnyHandle> isNestedBy = IFCAnyHandleUtil.GetValidAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcElement, \"IsNestedBy\");\r\n               if (isNestedBy != null)\r\n               {\r\n                  foreach (IFCAnyHandle relNests in isNestedBy)\r\n                  {\r\n                     ICollection<IFCAnyHandle> relatedObjects = IFCAnyHandleUtil.GetValidAggregateInstanceAttribute<List<IFCAnyHandle>>(relNests, \"RelatedObjects\");\r\n                     if (relatedObjects == null)\r\n                        continue;\r\n\r\n                     foreach (IFCAnyHandle relatedObject in relatedObjects)\r\n                     {\r\n                        if (IFCAnyHandleUtil.IsNullOrHasNoValue(relatedObject) ||\r\n                            !IFCAnyHandleUtil.IsSubTypeOf(relatedObject, IFCEntityType.IfcDistributionPort))\r\n                           continue;\r\n\r\n                        IFCPort port = IFCPort.ProcessIFCPort(relatedObject);\r\n                        if (port != null)\r\n                           Ports.Add(port);\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n            else\r\n            {\r\n               ICollection<IFCAnyHandle> hasPorts = IFCAnyHandleUtil.GetValidAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcElement, \"HasPorts\");\r\n               if (hasPorts != null)\r\n               {\r\n                  foreach (IFCAnyHandle hasPort in hasPorts)\r\n                  {\r\n                     IFCAnyHandle relatingPort = IFCAnyHandleUtil.GetInstanceAttribute(hasPort, \"RelatingPort\");\r\n                     if (IFCAnyHandleUtil.IsNullOrHasNoValue(relatingPort))\r\n                        continue;\r\n\r\n                     IFCPort port = IFCPort.ProcessIFCPort(relatingPort);\r\n                     if (port != null)\r\n                        Ports.Add(port);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit element params based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      protected override void CreateParametersInternal(Document doc, Element element)\r\n      {\r\n         base.CreateParametersInternal(doc, element);\r\n\r\n         if (element != null)\r\n         {\r\n            Category category = IFCPropertySet.GetCategoryForParameterIfValid(element, Id);\r\n\r\n            // Set \"Tag\" parameter.\r\n            string ifcTag = Tag;\r\n            if (!string.IsNullOrWhiteSpace(ifcTag))\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcTag\", ifcTag, Id);\r\n\r\n            IFCFeatureElementSubtraction ifcFeatureElementSubtraction = FillsOpening;\r\n            if (ifcFeatureElementSubtraction != null)\r\n            {\r\n               IFCElement ifcElement = ifcFeatureElementSubtraction.VoidsElement;\r\n               if (ifcElement != null)\r\n               {\r\n                  ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcContainedInHost\", ifcElement.Name, Id);\r\n                  ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcContainedInHostGUID\", ifcElement.GlobalId, Id);\r\n               }\r\n            }\r\n\r\n            // Create two parameters for each port: one for name, and one for GUID.\r\n            // Note that Ports will never be null, as it is initialized the first time it is accessed.\r\n            int numPorts = 0;\r\n            foreach (IFCPort port in Ports)\r\n            {\r\n               string name = port.Name;\r\n               string guid = port.GlobalId;\r\n\r\n               if (!string.IsNullOrWhiteSpace(name))\r\n               {\r\n                  string parameterName = \"IfcElement HasPorts Name \" + ((numPorts == 0) ? \"\" : (numPorts + 1).ToString());\r\n                  ParametersToSet.AddStringParameter(doc, element, category, this, parameterName, name, Id);\r\n               }\r\n\r\n               if (!string.IsNullOrWhiteSpace(guid))\r\n               {\r\n                  string parameterName = \"IfcElement HasPorts IfcGUID \" + ((numPorts == 0) ? \"\" : (numPorts + 1).ToString());\r\n                  ParametersToSet.AddStringParameter(doc, element, category, this, parameterName, guid, Id);\r\n               }\r\n\r\n               numPorts++;\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a copying of the geometry of an entity with a different graphics style.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"original\">The IFCProduct we are partially copying.</param>\r\n      /// <param name=\"parentEntity\">The IFCObjectDefinition we are going to add the geometry to.</param>\r\n      /// <param name=\"cloneParentMaterial\">Determine whether to use the one material of the parent entity, if it exists and is unique.</param>\r\n      /// <returns>The list of geometries created with a new category and possibly material.</returns>\r\n      public static IList<IFCSolidInfo> CloneElementGeometry(Document doc, IFCProduct original, IFCObjectDefinition parentEntity, bool cloneParentMaterial)\r\n      {\r\n         using (TemporaryDisableLogging disableLogging = new TemporaryDisableLogging())\r\n         {\r\n            var clone = Activator.CreateInstance(original.GetType(), true) as IFCElement ?? new IFCElement();\r\n            // Note that the GlobalId is left to null here; this allows us to later decide not to create a DirectShape for the result.\r\n\r\n            // Get the ObjectLocation and ProductRepresentation from the original entity, which is all we need to create geometry.\r\n            clone.ObjectLocation = original.ObjectLocation;\r\n            clone.ProductRepresentation = original.ProductRepresentation;\r\n            clone.MaterialSelect = original.MaterialSelect;\r\n\r\n            // Get the EntityType and PredefinedType from the parent to ensure that it \"matches\" the category and graphics style of the parent.\r\n            clone.EntityType = parentEntity.EntityType;\r\n            clone.PredefinedType = parentEntity.PredefinedType;\r\n\r\n            if (cloneParentMaterial)\r\n            {\r\n               // This will only work if the parent entity has one material.\r\n               IFCMaterial parentMaterial = parentEntity.GetTheMaterial();\r\n               if (parentMaterial != null)\r\n                  clone.MaterialSelect = parentMaterial;\r\n            }\r\n\r\n            CreateElement(doc, clone);\r\n            return clone.Solids;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit elements based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      protected override void Create(Document doc)\r\n      {\r\n         // Openings handled in product implementation \r\n\r\n         foreach (IFCPort port in Ports)\r\n         {\r\n            try\r\n            {\r\n               CreateElement(doc, port);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n               Importer.TheLog.LogError(port.Id, ex.Message, false);\r\n            }\r\n         }\r\n\r\n         base.Create(doc);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcElement object.\r\n      /// </summary>\r\n      /// <param name=\"ifcElement\">The IfcElement handle.</param>\r\n      /// <returns>The IFCElement object.</returns>\r\n      public static IFCElement ProcessIFCElement(IFCAnyHandle ifcElement)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcElement))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcElement);\r\n            return null;\r\n         }\r\n\r\n         try\r\n         {\r\n            IFCEntity cachedIFCElement;\r\n            IFCImportFile.TheFile.EntityMap.TryGetValue(ifcElement.StepId, out cachedIFCElement);\r\n            if (cachedIFCElement != null)\r\n               return (cachedIFCElement as IFCElement);\r\n\r\n            // other subclasses not handled yet.\r\n            if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcElement, IFCEntityType.IfcBuildingElement))\r\n               return IFCBuildingElement.ProcessIFCBuildingElement(ifcElement);\r\n            if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcElement, IFCEntityType.IfcFeatureElement))\r\n               return IFCFeatureElement.ProcessIFCFeatureElement(ifcElement);\r\n            if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcElement, IFCEntityType.IfcElementAssembly))\r\n               return IFCElementAssembly.ProcessIFCElementAssembly(ifcElement);\r\n            if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcElement, IFCEntityType.IfcElementComponent))\r\n               return IFCElementComponent.ProcessIFCElementComponent(ifcElement);\r\n            if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcElement, IFCEntityType.IfcGeotechnicalElement))\r\n               return IFCGeotechnicalElement.ProcessIFCGeotechnicalElement(ifcElement);\r\n\r\n            return new IFCElement(ifcElement);\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            HandleError(ex.Message, ifcElement, true);\r\n            return null;\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCElementAssembly.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Revit.IFC.Common.Enums;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcElementAssembly.\r\n   /// </summary>\r\n   public class IFCElementAssembly : IFCElement\r\n   {\r\n      private IFCAssemblyPlace m_AssemblyPlace;\r\n\r\n      /// <summary>\r\n      /// A designation of where the assembly is intended to take place\r\n      /// </summary>\r\n      public IFCAssemblyPlace AssemblyPlace\r\n      {\r\n         get { return m_AssemblyPlace; }\r\n         set { m_AssemblyPlace = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCElementAssembly()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCElementAssembly from the IfcElementAssembly handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcElementAssembly\">The IfcElementAssembly handle.</param>\r\n      protected IFCElementAssembly(IFCAnyHandle ifcElementAssembly)\r\n      {\r\n         Process(ifcElementAssembly);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the predefined type from the IfcObject, depending on the file version and entity type.\r\n      /// </summary>\r\n      /// <param name=\"ifcElementAssembly\">The associated handle.</param>\r\n      /// <returns>The predefined type, if any.</returns>\r\n      protected override string GetPredefinedType(IFCAnyHandle ifcElementAssembly)\r\n      {\r\n         IFCElementAssemblyType predefinedType =\r\n             IFCEnums.GetSafeEnumerationAttribute<IFCElementAssemblyType>(ifcElementAssembly, \"PredefinedType\", IFCElementAssemblyType.NotDefined);\r\n\r\n         return predefinedType.ToString();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcElementAssembly attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcElementAssembly\">The IfcElementAssembly handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcElementAssembly)\r\n      {\r\n         base.Process(ifcElementAssembly);\r\n\r\n         AssemblyPlace = IFCEnums.GetSafeEnumerationAttribute<IFCAssemblyPlace>(ifcElementAssembly, \"AssemblyPlace\", IFCAssemblyPlace.NotDefined);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit element params based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      protected override void CreateParametersInternal(Document doc, Element element)\r\n      {\r\n         base.CreateParametersInternal(doc, element);\r\n\r\n         if (element != null)\r\n         {\r\n            Category category = IFCPropertySet.GetCategoryForParameterIfValid(element, Id);\r\n            ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcPredefinedType\", PredefinedType, Id);\r\n            ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcAssemblyPlace\", AssemblyPlace.ToString(), Id);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit elements based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      protected override void Create(Document doc)\r\n      {\r\n         base.Create(doc);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcElementAssembly object.\r\n      /// </summary>\r\n      /// <param name=\"ifcElementAssembly\">The IfcElementAssembly handle.</param>\r\n      /// <returns>The IFCElementAssembly object.</returns>\r\n      public static IFCElementAssembly ProcessIFCElementAssembly(IFCAnyHandle ifcElementAssembly)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcElementAssembly))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcElementAssembly);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity cachedElementAssembly;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcElementAssembly.StepId, out cachedElementAssembly))\r\n            return (cachedElementAssembly as IFCElementAssembly);\r\n\r\n         return new IFCElementAssembly(ifcElementAssembly);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCElementComponent.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Revit.IFC.Common.Enums;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcElementComponent.\r\n   /// </summary>\r\n   /// <remarks>This class is non-abstract until all derived classes are defined.</remarks>\r\n   public class IFCElementComponent : IFCElement\r\n   {\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCElementComponent()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCElementComponent from the IfcElementComponent handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcElementComponent\">The IfcElementComponent handle.</param>\r\n      protected IFCElementComponent(IFCAnyHandle ifcElementComponent)\r\n      {\r\n         Process(ifcElementComponent);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcElementComponent attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcElementComponent\">The IfcElementComponent handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcElementComponent)\r\n      {\r\n         base.Process(ifcElementComponent);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFCElementComponent object.\r\n      /// </summary>\r\n      /// <param name=\"ifcElementComponent\">The IfcElementComponent handle.</param>\r\n      /// <returns>The IFCElementComponent object.</returns>\r\n      /// <remarks>IFCBuildingElementPart has changed from a subtype of the abstract IFCBuildingElement to IFCElementComponent from IFC2x3 to IFC4.\r\n      /// Instead of having different parents, we will keep IFCBuildingElementPart as a child of IFCBuildingElement.  This means, though, that\r\n      /// this function can only return an IFCElement, the (normally) abstract parent of each.</remarks>\r\n      public static IFCElement ProcessIFCElementComponent(IFCAnyHandle ifcElementComponent)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcElementComponent))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcElementComponent);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity elementComponent;\r\n         IFCImportFile.TheFile.EntityMap.TryGetValue(ifcElementComponent.StepId, out elementComponent);\r\n         if (elementComponent != null)\r\n            return (elementComponent as IFCElement);\r\n\r\n         IFCElement newIFCElementComponent = null;\r\n         // other subclasses not handled yet.\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete) && IFCAnyHandleUtil.IsValidSubTypeOf(ifcElementComponent, IFCEntityType.IfcBuildingElementPart))\r\n            newIFCElementComponent = IFCBuildingElementPart.ProcessIFCBuildingElementPart(ifcElementComponent);\r\n         else\r\n            newIFCElementComponent = new IFCElementComponent(ifcElementComponent);\r\n         return newIFCElementComponent;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCElementQuantity.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcElementQuantity.\r\n   /// </summary>\r\n   public class IFCElementQuantity : IFCPropertySetDefinition\r\n   {\r\n      /// <summary>\r\n      /// The method of measurement for the quantities.\r\n      /// </summary>\r\n      string m_MethodOfMeasurement;\r\n\r\n      /// <summary>\r\n      /// The contained set of IFC quantities.\r\n      /// </summary>\r\n      IDictionary<string, IFCPhysicalQuantity> m_IFCQuantities;\r\n\r\n      /// <summary>\r\n      /// The method of measurement.\r\n      /// </summary>\r\n      public string MethodOfMeasurement\r\n      {\r\n         get { return m_MethodOfMeasurement; }\r\n         set { m_MethodOfMeasurement = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The quantities.\r\n      /// </summary>\r\n      public IDictionary<string, IFCPhysicalQuantity> IFCQuantities\r\n      {\r\n         get { return m_IFCQuantities; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcElementQuantity attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcElementQuantity\">The IfcElementQuantity handle.</param>\r\n      protected IFCElementQuantity(IFCAnyHandle ifcElementQuantity)\r\n      {\r\n         Process(ifcElementQuantity);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC element quantity.\r\n      /// </summary>\r\n      /// <param name=\"ifcElementQuantity\">The IfcElementQuantity object.</param>\r\n      protected override void Process(IFCAnyHandle ifcElementQuantity)\r\n      {\r\n         base.Process(ifcElementQuantity);\r\n\r\n         MethodOfMeasurement = IFCImportHandleUtil.GetOptionalStringAttribute(ifcElementQuantity, \"MethodOfMeasurement\", null);\r\n\r\n         HashSet<IFCAnyHandle> quantities =\r\n             IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcElementQuantity, \"Quantities\");\r\n\r\n         if (quantities != null)\r\n         {\r\n            m_IFCQuantities = new Dictionary<string, IFCPhysicalQuantity>();\r\n\r\n            foreach (IFCAnyHandle quantity in quantities)\r\n            {\r\n               IFCPhysicalQuantity ifcPhysicalQuantity = IFCPhysicalQuantity.ProcessIFCPhysicalQuantity(quantity);\r\n               if (ifcPhysicalQuantity != null)\r\n                  m_IFCQuantities[ifcPhysicalQuantity.Name] = ifcPhysicalQuantity;\r\n            }\r\n         }\r\n         else\r\n         {\r\n            Importer.TheLog.LogMissingRequiredAttributeError(ifcElementQuantity, \"Quantities\", false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC element quantity.\r\n      /// </summary>\r\n      /// <param name=\"propertySet\">The IfcElementQuantity object.</param>\r\n      /// <returns>The IFCElementQuantity object.</returns>\r\n      public static IFCElementQuantity ProcessIFCElementQuantity(IFCAnyHandle ifcElementQuantity)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcElementQuantity))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcElementQuantity);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity elementQuantity;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcElementQuantity.StepId, out elementQuantity))\r\n            return (elementQuantity as IFCElementQuantity);\r\n\r\n         return new IFCElementQuantity(ifcElementQuantity);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create quantities for a given element.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element being created.</param>\r\n      /// <param name=\"parameterGroupMap\">The parameters of the element.  Cached for performance.</param>\r\n      /// <returns>The name of the property set created, if it was created, and a Boolean value if it should be added to the property set list.</returns>\r\n      public override Tuple<string, bool> CreatePropertySet(Document doc, Element element, IFCObjectDefinition objDef, \r\n         IFCParameterSetByGroup parameterGroupMap, ParametersToSet parametersToSet)\r\n      {\r\n         Category category = IFCPropertySet.GetCategoryForParameterIfValid(element, Id);\r\n\r\n         string quotedName = \"\\\"\" + Name + \"\\\"\";\r\n\r\n         ISet<string> parametersCreated = new HashSet<string>();\r\n         foreach (IFCPhysicalQuantity quantity in IFCQuantities.Values)\r\n         {\r\n            string fullName = CreatePropertyName(quantity.Name);\r\n            quantity.Create(doc, element, category, objDef, parameterGroupMap, fullName, parametersCreated, parametersToSet);\r\n         }\r\n\r\n         return Tuple.Create(quotedName, true);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCElementType.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcElementType.\r\n   /// </summary>\r\n   /// <remarks>This class is currently non-abstract because we haven't yet created the derived classes.\r\n   /// When they are created, this will be made abstract.</remarks>\r\n   public class IFCElementType : IFCTypeProduct\r\n   {\r\n      private string m_ElementType;\r\n\r\n      /// <summary>\r\n      /// The element type.\r\n      /// </summary>\r\n      public string ElementType\r\n      {\r\n         get { return m_ElementType; }\r\n         protected set { m_ElementType = value; }\r\n      }\r\n\r\n      protected IFCElementType()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCElementType from the IfcElementType handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcElementType\">The IfcElementType handle.</param>\r\n      protected IFCElementType(IFCAnyHandle ifcElementType)\r\n      {\r\n         Process(ifcElementType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcElementType attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcElementType\">The IfcElementType handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcElementType)\r\n      {\r\n         base.Process(ifcElementType);\r\n\r\n         ElementType = IFCAnyHandleUtil.GetStringAttribute(ifcElementType, \"ElementType\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcElementType.\r\n      /// </summary>\r\n      /// <param name=\"ifcElementType\">The IfcElementType handle.</param>\r\n      /// <returns>The IFCElementType object.</returns>\r\n      public static IFCElementType ProcessIFCElementType(IFCAnyHandle ifcElementType)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcElementType))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcElementType);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity elementType;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcElementType.StepId, out elementType))\r\n            return (elementType as IFCElementType);\r\n\r\n         return new IFCElementType(ifcElementType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit element params based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      protected override void CreateParametersInternal(Document doc, Element element)\r\n      {\r\n         base.CreateParametersInternal(doc, element);\r\n\r\n         if (element != null)\r\n         {\r\n            if (!string.IsNullOrWhiteSpace(ElementType))\r\n            {\r\n               Category category = IFCPropertySet.GetCategoryForParameterIfValid(element, Id);\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcElementType\", ElementType, Id);\r\n            }\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCElementarySurface.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public abstract class IFCElementarySurface : IFCSurface\r\n   {\r\n      Transform m_Position = null;\r\n\r\n      public Transform Position\r\n      {\r\n         get { return m_Position; }\r\n         protected set { m_Position = value; }\r\n      }\r\n\r\n      protected IFCElementarySurface()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the local surface transform at a given point on the surface.\r\n      /// </summary>\r\n      /// <param name=\"pointOnSurface\">The point.</param>\r\n      /// <returns>The transform.</returns>\r\n      public override Transform GetTransformAtPoint(XYZ pointOnSurface)\r\n      {\r\n         Transform position = new Transform(Position);\r\n         position.Origin = pointOnSurface;\r\n         return position;\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcSurface)\r\n      {\r\n         base.Process(ifcSurface);\r\n\r\n         IFCAnyHandle position = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcSurface, \"Position\", true);\r\n         Position = IFCLocation.ProcessIFCAxis2Placement(position);\r\n      }\r\n\r\n      protected IFCElementarySurface(IFCAnyHandle profileDef)\r\n      {\r\n         Process(profileDef);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCElementarySurface object from a handle of type IfcElementarySurface.\r\n      /// </summary>\r\n      /// <param name=\"ifcElementarySurface\">The IFC handle.</param>\r\n      /// <returns>The IFCElementarySurface object.</returns>\r\n      public static IFCElementarySurface ProcessIFCElementarySurface(IFCAnyHandle ifcElementarySurface)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcElementarySurface))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcElementarySurface);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity elementarySurface;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcElementarySurface.StepId, out elementarySurface))\r\n            return elementarySurface as IFCElementarySurface;\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcElementarySurface, IFCEntityType.IfcPlane))\r\n            return IFCPlane.ProcessIFCPlane(ifcElementarySurface);\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcElementarySurface, IFCEntityType.IfcCylindricalSurface))\r\n            return IFCCylindricalSurface.ProcessIfcCylindricalSurface(ifcElementarySurface);\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcElementarySurface, IFCEntityType.IfcElementarySurface, true);\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCEllipse.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCEllipse entity\r\n   /// </summary>\r\n   public class IFCEllipse : IFCConic\r\n   {\r\n      protected IFCEllipse()\r\n      {\r\n      }\r\n\r\n      protected IFCEllipse(IFCAnyHandle conic)\r\n      {\r\n         Process(conic);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcCurve)\r\n      {\r\n         base.Process(ifcCurve);\r\n         bool found = false;\r\n         double radiusX = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(ifcCurve, \"SemiAxis1\", out found);\r\n         if (!found)\r\n            Importer.TheLog.LogError(ifcCurve.StepId, \"Cannot find the attribute SemiAxis1 of this curve\", true);\r\n\r\n         double radiusY = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(ifcCurve, \"SemiAxis2\", out found);\r\n         if (!found)\r\n            Importer.TheLog.LogError(ifcCurve.StepId, \"Cannot find the attribute SemiAxis2 of this curve\", true);\r\n\r\n         SetCurve(Ellipse.CreateCurve(Position.Origin, radiusX, radiusY, Position.BasisX, Position.BasisY, 0, 2.0 * Math.PI));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCEllipse object from a handle of type IfcEllipse\r\n      /// </summary>\r\n      /// <param name=\"ifcEllipse\">The IFC handle</param>\r\n      /// <returns>The IFCEllipse object</returns>\r\n      public static IFCEllipse ProcessIFCEllipse(IFCAnyHandle ifcEllipse)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcEllipse))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcEllipse);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity ellipse = null;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcEllipse.StepId, out ellipse))\r\n            ellipse = new IFCEllipse(ifcEllipse);\r\n\r\n         return (ellipse as IFCEllipse);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCEntity.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Base level class for all objects created from an IFC entity.\r\n   /// </summary>\r\n   public abstract class IFCEntity\r\n   {\r\n      private int m_StepId;\r\n\r\n      private IFCEntityType m_EntityType;\r\n\r\n      /// <summary>\r\n      /// The id of the entity, corresponding to the STEP id of the IFC entity.\r\n      /// </summary>\r\n      public int Id\r\n      {\r\n         get { return m_StepId; }\r\n         protected set { m_StepId = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The entity type of the corresponding IFC entity.\r\n      /// </summary>\r\n      public IFCEntityType EntityType\r\n      {\r\n         get { return m_EntityType; }\r\n         protected set { m_EntityType = value; }\r\n      }\r\n\r\n      bool m_IsValidForCreation = true;\r\n\r\n      /// <summary>\r\n      /// Returns if the entity can be successfully converted into a Revit element.\r\n      /// This prevents repeated attempts to create an element from an invalid entity.\r\n      /// </summary>\r\n      public bool IsValidForCreation\r\n      {\r\n         get { return m_IsValidForCreation; }\r\n         protected set { m_IsValidForCreation = value; }\r\n      }\r\n\r\n      protected IFCEntity()\r\n      {\r\n      }\r\n\r\n      virtual protected void Process(IFCAnyHandle item)\r\n      {\r\n         Id = item.StepId;\r\n         EntityType = IFCAnyHandleUtil.GetEntityType(item);\r\n         IFCImportFile.TheFile.EntityMap.Add(Id, this);\r\n      \r\n         // Note that we will log processing entities even if they are later deleted.\r\n         Importer.TheLog.AddProcessedEntity(EntityType);\r\n      }\r\n\r\n      static public void HandleError(string message, IFCAnyHandle item, bool warn)\r\n      {\r\n         if (message != \"Don't Import\")\r\n         {\r\n            if (warn)\r\n            {\r\n               Importer.TheLog.LogError(item.StepId, message, false);\r\n            }\r\n         }\r\n         else\r\n         {\r\n            IFCImportFile.TheFile.EntityMap[item.Id] = null;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Post-process IFCEntity attributes.\r\n      /// </summary>\r\n      virtual public void PostProcess()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check if two IFCEntity lists are equal.\r\n      /// </summary>\r\n      /// <param name=\"list1\">The first list.</param>\r\n      /// <param name=\"list2\">The second list.</param>\r\n      /// <returns>True if they are equal, false otherwise.</returns>\r\n      /// <remarks>The is not intended to be an exhaustive check.</remarks>\r\n      static public bool AreIFCEntityListsEquivalent<T>(IList<T> list1, IList<T> list2) where T : IFCEntity\r\n      {\r\n         int numItems = list1.Count;\r\n         if (numItems != list2.Count)\r\n            return false;\r\n\r\n         for (int ii = 0; ii < numItems; ii++)\r\n         {\r\n            if (!IFCRoot.Equals(list1[ii], list2[ii]))\r\n               return false;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Does a top-level check to see if this entity may be equivalent to otherEntity.\r\n      /// </summary>\r\n      /// <param name=\"otherEntity\">The other IFCEntity.</param>\r\n      /// <returns>True if they are equivalent, false if they aren't, null if not enough information.</returns>\r\n      /// <remarks>This isn't intended to be an exhaustive check, and isn't implemented for all types.  This is intended\r\n      /// to be used by derived classes.</remarks>\r\n      virtual public bool? MaybeEquivalentTo(IFCEntity otherEntity)\r\n      {\r\n         if (otherEntity == null)\r\n            return false;\r\n\r\n         // If the entities have the same Id, they are definitely the same object.  If they don't, they could\r\n         // still be considered equivalent, so we won't disqualify them.\r\n         if (Id == otherEntity.Id)\r\n            return true;\r\n\r\n         if (EntityType != otherEntity.EntityType)\r\n            return false;\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Does a top-level check to see if this entity is equivalent to otherEntity.\r\n      /// </summary>\r\n      /// <param name=\"otherEntity\">The other IFCEntity.</param>\r\n      /// <returns>True if they are equivalent, false if they aren't.</returns>\r\n      /// <remarks>This isn't intended to be an exhaustive check, and isn't implemented for all types.  This is intended\r\n      /// to make a final decision, and will err on the side of deciding that entities aren't equivalent.</remarks>\r\n      virtual public bool IsEquivalentTo(IFCEntity otherEntity)\r\n      {\r\n         bool? maybeEquivalentTo = MaybeEquivalentTo(otherEntity);\r\n         if (maybeEquivalentTo.HasValue)\r\n            return maybeEquivalentTo.Value;\r\n\r\n         // If we couldn't determine that they were the same, assume that they aren't.\r\n         return false;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCExtrudedAreaSolid.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.ApplicationServices;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCExtrudedAreaSolid : IFCSweptAreaSolid\r\n   {\r\n      /// <summary>\r\n      /// The direction of the extrusion in the local coordinate system.\r\n      /// </summary>\r\n      public XYZ Direction { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The depth of the extrusion, along the extrusion direction.\r\n      /// </summary>\r\n      public double Depth { get; protected set; } = 0.0;\r\n\r\n      protected IFCExtrudedAreaSolid()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle solid)\r\n      {\r\n         base.Process(solid);\r\n\r\n         // We will not fail if the direction is not given, but instead assume it to be normal to the swept area.\r\n         IFCAnyHandle direction = IFCImportHandleUtil.GetRequiredInstanceAttribute(solid, \"ExtrudedDirection\", false);\r\n         if (direction != null)\r\n            Direction = IFCPoint.ProcessNormalizedIFCDirection(direction);\r\n         else\r\n            Direction = XYZ.BasisZ;\r\n\r\n         bool found = false;\r\n         Depth = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(solid, \"Depth\", out found);\r\n         if (!found || MathUtil.IsAlmostZero(Depth))\r\n         {\r\n            string depthAsString = IFCUnitUtil.FormatLengthAsString(Depth);\r\n            Importer.TheLog.LogError(solid.StepId, \"extrusion depth of \" + depthAsString + \" is invalid, aborting.\", true);\r\n         }\r\n\r\n         if (Depth < 0.0)\r\n         {\r\n            // Reverse depth and orientation.\r\n            Depth = -Depth;\r\n            Direction = -Direction;\r\n            Importer.TheLog.LogWarning(solid.StepId, \"negative extrusion depth is invalid, reversing direction.\", false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the curve from the Axis representation of the given IfcProduct, transformed to the current local coordinate system.\r\n      /// </summary>\r\n      /// <param name=\"creator\">The IfcProduct that may or may not contain a valid axis curve.</param>\r\n      /// <param name=\"lcs\">The local coordinate system.</param>\r\n      /// <returns>The axis curve, if found, and valid.</returns>\r\n      /// <remarks>In this case, we only allow bounded curves to be valid axis curves.\r\n      /// The Curve may be contained as either a single Curve in the IFCCurve representation item,\r\n      /// or it could be an open CurveLoop that could be represented as a single curve.</remarks>\r\n      private Curve GetAxisCurve(IFCProduct creator, Transform lcs)\r\n      {\r\n         // We need an axis curve to clip the extrusion profiles; if we can't get one, fail\r\n         IFCProductRepresentation productRepresentation = creator.ProductRepresentation;\r\n         if (productRepresentation == null)\r\n            return null;\r\n\r\n         IList<IFCRepresentation> representations = productRepresentation.Representations;\r\n         if (representations == null)\r\n            return null;\r\n\r\n         foreach (IFCRepresentation representation in representations)\r\n         {\r\n            // Go through the list of representations for this product, to find the Axis representation.\r\n            if (representation == null || representation.Identifier != IFCRepresentationIdentifier.Axis)\r\n               continue;\r\n\r\n            IList<IFCRepresentationItem> items = representation.RepresentationItems;\r\n            if (items == null)\r\n               continue;\r\n\r\n            // Go through the list of representation items in the Axis representation, to look for the IfcCurve.\r\n            foreach (IFCRepresentationItem item in items)\r\n            {\r\n               if (item is IFCCurve)\r\n               {\r\n                  // We will accept a bounded curve, or an open CurveLoop that can be represented\r\n                  // as one curve.\r\n                  IFCCurve ifcCurve = item as IFCCurve;\r\n                  Curve axisCurve = ifcCurve.Curve;\r\n                  if (axisCurve == null)\r\n                     axisCurve = ifcCurve.ConvertCurveLoopIntoSingleCurve();\r\n\r\n                  if (axisCurve != null)\r\n                     return axisCurve.CreateTransformed(lcs);\r\n               }\r\n            }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      // Determines if two curves are oriented in generally opposite directions. Currently only handles lines and arcs.\r\n      // This is intended to determine if two curves have reverse parametrization, so isn't intended to be exhaustive.\r\n      private bool? CurvesHaveOppositeOrientation(Curve firstCurve, Curve secondCurve)\r\n      {\r\n         if (firstCurve == null || secondCurve == null)\r\n            return null;\r\n\r\n         if ((firstCurve is Line) && (secondCurve is Line))\r\n            return ((firstCurve as Line).Direction.DotProduct((secondCurve as Line).Direction) < 0.0);\r\n\r\n         if ((firstCurve is Arc) && (secondCurve is Arc))\r\n            return ((firstCurve as Arc).Normal.DotProduct((secondCurve as Arc).Normal) < 0.0);\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns a list of curves that represent the profile of an extrusion to be split into material layers, for simple cases.\r\n      /// </summary>\r\n      /// <param name=\"loops\">The original CurveLoops representing the extrusion profile.</param>\r\n      /// <param name=\"axisCurve\">The axis curve used by IfcMaterialLayerUsage to place the IfcMaterialLayers.</param>\r\n      /// <param name=\"offsetNorm\">The normal used for calculating curve offsets.</param>\r\n      /// <param name=\"offset\">The offset distance from the axis curve to the material layers, as defined in the IfcMaterialLayerSetUsage \"OffsetFromReferenceLine\" parameter.</param>\r\n      /// <param name=\"totalThickness\">The total thickness of all of the generated material layers.</param>\r\n      /// <returns>A list of curves oriented according to the axis curve.</returns>\r\n      /// <remarks>The list will contain 4 curves in this order:\r\n      /// 1. The curve (a bounded Line or an Arc) at the boundary of the first material layer, oriented in the same direction as the Axis curve.\r\n      /// 2. The line, possibly slanted, representing an end cap and connecting the 1st curve to the 3rd curve.\r\n      /// 3. The curve (of the same type as the first) at the boundary of the last material layer, oriented in the opposite direction as the Axis curve.\r\n      /// 4. The line, possibly slanted, representing an end cap and connecting the 3rd curve to the 1st curve.\r\n      /// Over time, we may increase the number of cases suported.</remarks>\r\n      private IList<Curve> GetOrientedCurveList(IList<CurveLoop> loops, Curve axisCurve, XYZ offsetNorm, double offset, double totalThickness)\r\n      {\r\n         // We are going to limit our attempts to a fairly simple but common case:\r\n         // 1. 2 bounded curves parallel to the axis curve, of the same type, and either Lines or Arcs.\r\n         // 2. 2 other edges connecting the two other curves, which are Lines.\r\n         // This covers most cases and gets rid of issues with highly irregular edges.\r\n         if (loops.Count() != 1 || loops[0].Count() != 4)\r\n            return null;\r\n\r\n         // The CreateOffset routine works opposite what IFC expects.  For a line, the Revit API offset direction\r\n         // is the (line tangent) X (the normal of the plane containing the line).  In IFC, the (local) line tangent is +X,\r\n         // the local normal of the plane is +Z, and the positive direction of the offset is +Y.  As such, we need to\r\n         // reverse the normal of the plane to offset in the right direction.\r\n         Curve offsetAxisCurve = axisCurve.CreateOffset(offset, -offsetNorm);\r\n\r\n         Curve unboundOffsetAxisCurve = offsetAxisCurve.Clone();\r\n         unboundOffsetAxisCurve.MakeUnbound();\r\n\r\n         IList<Curve> originalCurveList = new List<Curve>();\r\n         IList<Curve> unboundCurveList = new List<Curve>();\r\n         foreach (Curve loopCurve in loops[0])\r\n         {\r\n            originalCurveList.Add(loopCurve);\r\n            Curve unboundCurve = loopCurve.Clone();\r\n            unboundCurve.MakeUnbound();\r\n            unboundCurveList.Add(unboundCurve);\r\n         }\r\n\r\n         int startIndex = -1;\r\n         bool flipped = false;\r\n         for (int ii = 0; ii < 4; ii++)\r\n         {\r\n            // The offset axis curve should match one of the curves of the extrusion profile.  \r\n            // We check that here by seeing if a point on the offset axis curve is on the current unbounded curve.\r\n            if (   SetComparisonResult.Overlap != unboundCurveList[ii].Intersect(unboundOffsetAxisCurve, CurveIntersectResultOption.Simple)?.Result\r\n                && MathUtil.IsAlmostZero(unboundCurveList[ii].Distance(offsetAxisCurve.GetEndPoint(0))))\r\n            {\r\n               startIndex = ii;\r\n\r\n               Transform originalCurveLCS = originalCurveList[ii].ComputeDerivatives(0.0, true);\r\n               Transform axisCurveLCS = axisCurve.ComputeDerivatives(0.0, true);\r\n\r\n               // We want the first curve to have the same orientation as the axis curve. We will flip the resulting\r\n               // \"curve loop\" if not.\r\n               bool? maybeFlipped = CurvesHaveOppositeOrientation(originalCurveList[ii], axisCurve);\r\n               if (!maybeFlipped.HasValue)\r\n               {\r\n                  return null;\r\n               }\r\n\r\n               flipped = maybeFlipped.Value;\r\n\r\n               // Now check that startIndex and startIndex+2 are parallel, and totalThickness apart.\r\n               if (   SetComparisonResult.Overlap == unboundCurveList[ii].Intersect(unboundCurveList[(ii + 2) % 4], CurveIntersectResultOption.Simple)?.Result\r\n                   || !MathUtil.IsAlmostEqual(unboundCurveList[ii].Distance(originalCurveList[(ii + 2) % 4].GetEndPoint(0)), totalThickness))\r\n               {\r\n                  return null;\r\n               }\r\n\r\n               break;\r\n            }\r\n         }\r\n\r\n         // We may want to consider loosening the IsAlmostEqual check above if this fails a lot for seemingly good cases.\r\n         if (startIndex == -1)\r\n            return null;\r\n\r\n         IList<Curve> orientedCurveList = new List<Curve>();\r\n         for (int ii = 0, currentIndex = startIndex; ii < 4; ii++)\r\n         {\r\n            Curve currentCurve = originalCurveList[currentIndex];\r\n            if (flipped)\r\n               currentCurve = currentCurve.CreateReversed();\r\n            orientedCurveList.Add(currentCurve);\r\n            currentIndex = flipped ? (currentIndex + 3) % 4 : (currentIndex + 1) % 4;\r\n         }\r\n         return orientedCurveList;\r\n      }\r\n\r\n      // This routine may return null geometry for one of three reasons:\r\n      // 1. Invalid input.\r\n      // 2. No IfcMaterialLayerUsage.\r\n      // 3. The IfcMaterialLayerUsage isn't handled.\r\n      // If the reason is #1 or #3, we want to warn the user.  If it is #2, we don't.  Pass back shouldWarn to let the caller know.\r\n      private IList<GeometryObject> CreateGeometryFromMaterialLayerUsage(IFCImportShapeEditScope shapeEditScope, Transform extrusionPosition,\r\n          IList<CurveLoop> loops, XYZ extrusionDirection, double currDepth, out ElementId materialId, out bool shouldWarn)\r\n      {\r\n         IList<GeometryObject> extrusionSolids = null;\r\n         materialId = ElementId.InvalidElementId;\r\n\r\n         try\r\n         {\r\n            shouldWarn = true;  // Invalid input.\r\n\r\n            // Check for valid input.\r\n            if (shapeEditScope == null ||\r\n                extrusionPosition == null ||\r\n                loops == null ||\r\n                loops.Count() == 0 ||\r\n                extrusionDirection == null ||\r\n                !extrusionPosition.IsConformal ||\r\n                !Application.IsValidThickness(currDepth))\r\n               return null;\r\n\r\n            IFCProduct creator = shapeEditScope.Creator;\r\n            if (creator == null)\r\n               return null;\r\n\r\n            shouldWarn = false;  // Missing, empty, or optimized out IfcMaterialLayerSetUsage - valid reason to stop.\r\n\r\n            IIFCMaterialSelect materialSelect = creator.MaterialSelect;\r\n            if (materialSelect == null)\r\n               return null;\r\n\r\n            IFCMaterialLayerSetUsage materialLayerSetUsage = materialSelect as IFCMaterialLayerSetUsage;\r\n            if (materialLayerSetUsage == null)\r\n               return null;\r\n\r\n            IFCMaterialLayerSet materialLayerSet = materialLayerSetUsage.MaterialLayerSet;\r\n            if (materialLayerSet == null)\r\n               return null;\r\n\r\n            IList<IFCMaterialLayer> materialLayers = materialLayerSet.MaterialLayers;\r\n            if (materialLayers == null || materialLayers.Count == 0)\r\n               return null;\r\n\r\n            // Optimization: if there is only one layer, use the standard method, with possibly an overloaded material.\r\n            ElementId baseMaterialId = GetMaterialElementId(shapeEditScope);\r\n            if (materialLayers.Count == 1)\r\n            {\r\n               IFCMaterial oneMaterial = materialLayers[0].Material;\r\n               if (oneMaterial == null)\r\n                  return null;\r\n\r\n               materialId = oneMaterial.GetMaterialElementId();\r\n               if (materialId != ElementId.InvalidElementId)\r\n               {\r\n                  // We will not override the material of the element if the layer material has no color.\r\n                  if (Importer.TheCache.MaterialsWithNoColor.Contains(materialId))\r\n                     materialId = ElementId.InvalidElementId;\r\n               }\r\n\r\n               return null;\r\n            }\r\n\r\n            // Anything below here is something we should report to the user, with the exception of the total thickness\r\n            // not matching the extrusion thickness.  This would require more analysis to determine that it is actually\r\n            // an error condition.\r\n            shouldWarn = true;\r\n\r\n            IList<IFCMaterialLayer> realMaterialLayers = new List<IFCMaterialLayer>();\r\n            double totalThickness = 0.0;\r\n            foreach (IFCMaterialLayer materialLayer in materialLayers)\r\n            {\r\n               double depth = materialLayer.LayerThickness;\r\n               if (MathUtil.IsAlmostZero(depth))\r\n                  continue;\r\n\r\n               if (depth < 0.0)\r\n                  return null;\r\n\r\n               realMaterialLayers.Add(materialLayer);\r\n               totalThickness += depth;\r\n            }\r\n\r\n            // Axis3 means that the material layers are stacked in the Z direction.  This is common for floor slabs.\r\n            bool isAxis3 = (materialLayerSetUsage.Direction == IFCLayerSetDirection.Axis3);\r\n\r\n            // For elements extruded in the Z direction, if the extrusion layers don't have the same thickness as the extrusion,\r\n            // this could be one of two reasons:\r\n            // 1. There is a discrepancy between the extrusion depth and the material layer set usage calculated depth.\r\n            // 2. There are multiple extrusions in the body definition.\r\n            // In either case, we will use the extrusion geometry over the calculated material layer set usage geometry.\r\n            // In the future, we may decide to allow for case #1 by passing in a flag to allow for this.\r\n            if (isAxis3 && !MathUtil.IsAlmostEqual(totalThickness, currDepth))\r\n            {\r\n               shouldWarn = false;\r\n               return null;\r\n            }\r\n\r\n            int numLayers = realMaterialLayers.Count();\r\n            if (numLayers == 0)\r\n               return null;\r\n            // We'll use this initial value for the Axis2 case, so read it here.\r\n            double baseOffsetForLayer = materialLayerSetUsage.Offset;\r\n\r\n            // Needed for Axis2 case only.  The axisCurve is the curve defined in the product representation representing\r\n            // a base curve (an axis) for the footprint of the element.\r\n            Curve axisCurve = null;\r\n\r\n            // The oriented cuve list represents the 4 curves of supported Axis2 footprint in the following order:\r\n            // 1. curve along length of object closest to the first material layer with the orientation of the axis curve\r\n            // 2. connecting end curve\r\n            // 3. curve along length of object closest to the last material layer with the orientation opposite of the axis curve\r\n            // 4. connecting end curve.\r\n            IList<Curve> orientedCurveList = null;\r\n\r\n            if (!isAxis3)\r\n            {\r\n               // Axis2 means that the material layers are stacked inthe Y direction.  This is by definition for IfcWallStandardCase,\r\n               // which has a local coordinate system whose Y direction is orthogonal to the length of the wall.\r\n               if (materialLayerSetUsage.Direction == IFCLayerSetDirection.Axis2)\r\n               {\r\n                  axisCurve = GetAxisCurve(creator, extrusionPosition);\r\n                  if (axisCurve == null)\r\n                     return null;\r\n\r\n                  orientedCurveList = GetOrientedCurveList(loops, axisCurve, extrusionPosition.BasisZ, baseOffsetForLayer, totalThickness);\r\n                  if (orientedCurveList == null)\r\n                     return null;\r\n               }\r\n               else\r\n                  return null;    // Not handled.\r\n            }\r\n\r\n            extrusionSolids = new List<GeometryObject>();\r\n\r\n            bool positiveOrientation = (materialLayerSetUsage.DirectionSense == IFCDirectionSense.Positive);\r\n\r\n            // Always extrude in the positive direction for Axis2.\r\n            XYZ materialExtrusionDirection = (positiveOrientation || !isAxis3) ? extrusionDirection : -extrusionDirection;\r\n\r\n            // Axis2 repeated values.\r\n            // The IFC concept of offset direction is reversed from Revit's.\r\n            XYZ normalDirectionForAxis2 = positiveOrientation ? -extrusionPosition.BasisZ : extrusionPosition.BasisZ;\r\n            bool axisIsCyclic = (axisCurve == null) ? false : axisCurve.IsCyclic;\r\n            double axisCurvePeriod = axisIsCyclic ? axisCurve.Period : 0.0;\r\n\r\n            Transform curveLoopTransform = Transform.Identity;\r\n\r\n            IList<CurveLoop> currLoops = null;\r\n            double depthSoFar = 0.0;\r\n\r\n            for (int ii = 0; ii < numLayers; ii++)\r\n            {\r\n               IFCMaterialLayer materialLayer = materialLayers[ii];\r\n\r\n               // Ignore 0 thickness layers.  No need to warn.\r\n               double depth = materialLayer.LayerThickness;\r\n               if (MathUtil.IsAlmostZero(depth))\r\n                  continue;\r\n\r\n               // If the thickness is non-zero but invalid, fail.\r\n               if (!Application.IsValidThickness(depth))\r\n                  return null;\r\n\r\n               double extrusionDistance = 0.0;\r\n               if (isAxis3)\r\n               {\r\n                  // Offset the curve loops if necessary, using the base extrusionDirection, regardless of the direction sense\r\n                  // of the MaterialLayerSetUsage.\r\n                  double offsetForLayer = positiveOrientation ? baseOffsetForLayer + depthSoFar : baseOffsetForLayer - depthSoFar;\r\n                  if (!MathUtil.IsAlmostZero(offsetForLayer))\r\n                  {\r\n                     curveLoopTransform.Origin = offsetForLayer * extrusionDirection;\r\n\r\n                     currLoops = new List<CurveLoop>();\r\n                     foreach (CurveLoop loop in loops)\r\n                     {\r\n                        CurveLoop newLoop = CurveLoop.CreateViaTransform(loop, curveLoopTransform);\r\n                        if (newLoop == null)\r\n                           return null;\r\n\r\n                        currLoops.Add(newLoop);\r\n                     }\r\n                  }\r\n                  else\r\n                     currLoops = loops;\r\n\r\n                  extrusionDistance = depth;\r\n               }\r\n               else\r\n               {\r\n                  // startClipCurve, firstEndCapCurve, endClipCurve, secondEndCapCurve.\r\n                  Curve[] outline = new Curve[4];\r\n                  double[][] endParameters = new double[4][];\r\n\r\n                  double startClip = depthSoFar;\r\n                  double endClip = depthSoFar + depth;\r\n\r\n                  outline[0] = orientedCurveList[0].CreateOffset(startClip, normalDirectionForAxis2);\r\n                  outline[1] = orientedCurveList[1].Clone();\r\n                  outline[2] = orientedCurveList[2].CreateOffset(totalThickness - endClip, normalDirectionForAxis2);\r\n                  outline[3] = orientedCurveList[3].Clone();\r\n\r\n                  for (int jj = 0; jj < 4; jj++)\r\n                  {\r\n                     outline[jj].MakeUnbound();\r\n                     endParameters[jj] = new double[2];\r\n                     endParameters[jj][0] = 0.0;\r\n                     endParameters[jj][1] = 0.0;\r\n                  }\r\n\r\n                  // Trim/Extend the curves so that they make a closed loop.\r\n                  for (int jj = 0; jj < 4; jj++)\r\n                  {\r\n                     CurveIntersectResult result = outline[jj].Intersect(outline[(jj + 1) % 4], CurveIntersectResultOption.Detailed);\r\n                     int numResults = result?.GetOverlaps()?.Count ?? 0;\r\n                     if (  (numResults == 0)\r\n                        || (numResults > 1 && !axisIsCyclic) \r\n                        || (numResults > 2)\r\n                        || (CurveOverlapPointType.Intersection != result.GetOverlaps()[0]?.Type))\r\n                     {\r\n                        return null;\r\n                     }\r\n\r\n                     CurveOverlapPoint intersectionPoint = result.GetOverlaps()[0];\r\n                     endParameters[jj][1] = intersectionPoint.FirstParameter;\r\n                     endParameters[(jj + 1) % 4][0] = intersectionPoint.SecondParameter;\r\n\r\n                     if (numResults == 2)\r\n                     {\r\n                        // If the current result is closer to the end of the curve, keep it.\r\n                        CurveOverlapPoint newIntersectionPoint = result.GetOverlaps()[1];\r\n                        \r\n                        int endParamIndex = (jj % 2);\r\n                        double newParamToCheck = (0 == endParamIndex) ? newIntersectionPoint.FirstParameter : newIntersectionPoint.SecondParameter;\r\n                        double oldParamToCheck = (endParamIndex == 0) ? endParameters[jj][1] : endParameters[(jj + 1) % 4][0];\r\n                        double currentEndPoint = (endParamIndex == 0) ?\r\n                            orientedCurveList[jj].GetEndParameter(1) : orientedCurveList[(jj + 1) % 4].GetEndParameter(0);\r\n\r\n                        // Put in range of [-Period/2, Period/2].\r\n                        double newDist = (currentEndPoint - newParamToCheck) % axisCurvePeriod;\r\n                        if (newDist < -axisCurvePeriod / 2.0) newDist += axisCurvePeriod;\r\n                        if (newDist > axisCurvePeriod / 2.0) newDist -= axisCurvePeriod;\r\n\r\n                        double oldDist = (currentEndPoint - oldParamToCheck) % axisCurvePeriod;\r\n                        if (oldDist < -axisCurvePeriod / 2.0) oldDist += axisCurvePeriod;\r\n                        if (oldDist > axisCurvePeriod / 2.0) oldDist -= axisCurvePeriod;\r\n\r\n                        if (Math.Abs(newDist) < Math.Abs(oldDist))\r\n                        {\r\n                           endParameters[jj][1] = newIntersectionPoint.FirstParameter;\r\n                           endParameters[(jj + 1) % 4][0] = newIntersectionPoint.SecondParameter;\r\n                        }\r\n                     }\r\n                  }\r\n\r\n                  CurveLoop newCurveLoop = new CurveLoop();\r\n                  for (int jj = 0; jj < 4; jj++)\r\n                  {\r\n                     if (endParameters[jj][1] < endParameters[jj][0])\r\n                     {\r\n                        if (!outline[jj].IsCyclic)\r\n                           return null;\r\n                        endParameters[jj][1] += Math.Floor(endParameters[jj][0] / axisCurvePeriod + 1.0) * axisCurvePeriod;\r\n                     }\r\n\r\n                     outline[jj].MakeBound(endParameters[jj][0], endParameters[jj][1]);\r\n                     newCurveLoop.Append(outline[jj]);\r\n                  }\r\n\r\n                  currLoops = new List<CurveLoop>();\r\n                  currLoops.Add(newCurveLoop);\r\n\r\n                  extrusionDistance = currDepth;\r\n               }\r\n\r\n               // Determine the material id.\r\n               IFCMaterial material = materialLayer.Material;\r\n               ElementId layerMaterialId = (material == null) ? ElementId.InvalidElementId : material.GetMaterialElementId();\r\n\r\n               // The second option here is really for Referencing.  Without a UI (yet) to determine whether to show the base\r\n               // extusion or the layers for objects with material layer sets, we've chosen to display the base material if the layer material\r\n               // has no color information.  This means that the layer is assigned the \"wrong\" material, but looks better on screen.\r\n               // We will reexamine this decision (1) for the Open case, (2) if there is UI to toggle between layers and base extrusion, or\r\n               // (3) based on user feedback.\r\n               if (layerMaterialId == ElementId.InvalidElementId || Importer.TheCache.MaterialsWithNoColor.Contains(layerMaterialId))\r\n                  layerMaterialId = baseMaterialId;\r\n\r\n               SolidOptions solidOptions = new SolidOptions(layerMaterialId, shapeEditScope.GraphicsStyleId);\r\n\r\n               // Create the extrusion for the material layer.\r\n               GeometryObject extrusionSolid = GeometryCreationUtilities.CreateExtrusionGeometry(\r\n                      currLoops, materialExtrusionDirection, extrusionDistance, solidOptions);\r\n\r\n               if (extrusionSolid == null)\r\n                  return null;\r\n\r\n               extrusionSolids.Add(extrusionSolid);\r\n               depthSoFar += depth;\r\n            }\r\n         }\r\n         catch\r\n         {\r\n            // Ignore the specific exception, but let the user know there was a problem processing the IfcMaterialLayerSetUsage.\r\n            shouldWarn = true;\r\n            return null;\r\n         }\r\n\r\n         return extrusionSolids;\r\n      }\r\n\r\n      private GeometryObject CreateGeometryFromMaterialProfile(IFCImportShapeEditScope shapeEditScope,\r\n         IList<CurveLoop> loops, XYZ extrusionDirection, double currDepth, SolidOptions solidOptions, out bool shouldWarn)\r\n      {\r\n         GeometryObject extrusionSolid = null;\r\n\r\n         try\r\n         {\r\n            shouldWarn = true;   // invalid input\r\n\r\n            IIFCMaterialSelect materialSelect = shapeEditScope.Creator.MaterialSelect;\r\n            if (materialSelect == null)\r\n               return null;\r\n\r\n            IFCMaterialProfileSetUsage matProfSetUsage = materialSelect as IFCMaterialProfileSetUsage;\r\n            if (matProfSetUsage == null)\r\n               return null;\r\n\r\n            IFCMaterialProfileSet matProfSet = matProfSetUsage.ForProfileSet;\r\n            if (matProfSet == null)\r\n               return null;\r\n\r\n            IList<IFCMaterialProfile> matProfList = matProfSet.MaterialProfileSet;\r\n            if (matProfList.Count == 0)\r\n               return null;\r\n\r\n            Transform transformByOffset = Transform.Identity;\r\n            IList<CurveLoop> newloops = new List<CurveLoop>();\r\n\r\n            ElementId materialId = null;\r\n            foreach (IFCMaterialProfile matProf in matProfList)\r\n            {\r\n               if (this.SweptArea.Id == matProf.Profile.Id)\r\n               {\r\n                  // This is the same id (same profile), use the material name for creation of this geometry\r\n                  IFCMaterial theMaterial = matProf.Material;\r\n                  if (theMaterial != null)\r\n                  {\r\n                     materialId = theMaterial.GetMaterialElementId();\r\n                     solidOptions.MaterialId = materialId;    // Override the original option if the profile has a specific material id\r\n                  }\r\n\r\n                  // Here we will handle special case if the Material Profile has Offset\r\n                  if (matProf is IFCMaterialProfileWithOffsets)\r\n                  {\r\n                     IFCMaterialProfileWithOffsets matProfOffset = matProf as IFCMaterialProfileWithOffsets;\r\n                     double startOffset = matProfOffset.OffsetValues[0];\r\n                     double endOffset = 0;\r\n                     if (matProfOffset.OffsetValues.Count > 1)\r\n                        endOffset = matProfOffset.OffsetValues[1];\r\n\r\n                     // To handle offset, we need to move the start point (extrusion position) to the startOffset value along the axis (extrusion direction)\r\n                     // For the end offset, we will have to re-calculate the extrusion\r\n                     currDepth = currDepth - startOffset + endOffset;\r\n                     transformByOffset.Origin += startOffset * extrusionDirection;\r\n                     foreach (CurveLoop loop in loops)\r\n                     {\r\n                        CurveLoop newLoop = CurveLoop.CreateViaTransform(loop, transformByOffset);\r\n                        newloops.Add(newLoop);\r\n                     }\r\n                  }\r\n                  break;\r\n               }\r\n            }\r\n\r\n            if (newloops.Count == 0)\r\n               extrusionSolid = GeometryCreationUtilities.CreateExtrusionGeometry(loops, extrusionDirection, currDepth, solidOptions);\r\n            else\r\n               extrusionSolid = GeometryCreationUtilities.CreateExtrusionGeometry(newloops, extrusionDirection, currDepth, solidOptions);\r\n         }\r\n         catch\r\n         {\r\n            // Ignore the specific exception, but let the user know there was a problem processing the IfcMaterialLayerSetUsage.\r\n            shouldWarn = true;\r\n            return null;\r\n         }\r\n\r\n         return extrusionSolid;\r\n      }\r\n      \r\n      private GeometryObject GetMeshBackup(IFCImportShapeEditScope shapeEditScope, IList<CurveLoop> loops,\r\n         XYZ scaledExtrusionDirection, double currDepth, string guid)\r\n      {\r\n         if (shapeEditScope.MustCreateSolid())\r\n            return null;\r\n            \r\n         try\r\n         {\r\n            MeshFromGeometryOperationResult meshResult = TessellatedShapeBuilder.CreateMeshByExtrusion(\r\n               loops, scaledExtrusionDirection, currDepth, GetMaterialElementId(shapeEditScope));\r\n\r\n            // Will throw if mesh is not available\r\n            Mesh mesh = meshResult.GetMesh();\r\n            Importer.TheLog.LogError(Id, \"Extrusion has an invalid definition for a solid; reverting to mesh.\", false);\r\n\r\n            return mesh;\r\n         }\r\n         catch\r\n         {\r\n            Importer.TheLog.LogError(Id, \"Extrusion has an invalid definition for a solid or mesh, ignoring.\", false);\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The shape edit scope.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      /// <returns>One or more created geometries.</returns>\r\n      /// <remarks>The scaledLcs is only partially supported in this routine; it allows scaling the depth of the extrusion,\r\n      /// which is commonly found in ACA files.</remarks>\r\n      protected override IList<GeometryObject> CreateGeometryInternal(\r\n         IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid)\r\n      {\r\n         if (Direction == null)\r\n         {\r\n            Importer.TheLog.LogError(Id, \"Error processing IfcExtrudedAreaSolid, can't create geometry.\", false);\r\n            return null;\r\n         }\r\n\r\n         Transform origScaledLCS = (scaledLcs == null) ? Transform.Identity : scaledLcs;\r\n\r\n         Transform scaledExtrusionPosition = (Position == null) ? origScaledLCS : origScaledLCS.Multiply(Position);\r\n\r\n         XYZ scaledExtrusionDirection = scaledExtrusionPosition.OfVector(Direction);\r\n\r\n         ISet<IList<CurveLoop>> disjointLoops = GetTransformedCurveLoops(scaledExtrusionPosition);\r\n         if (disjointLoops == null || disjointLoops.Count() == 0)\r\n            return null;\r\n\r\n         IList<GeometryObject> extrusions = new List<GeometryObject>();\r\n         double shortCurveTol = IFCImportFile.TheFile.ShortCurveTolerance;\r\n\r\n         foreach (IList<CurveLoop> originalLoops in disjointLoops)\r\n         {\r\n            SolidOptions solidOptions = new SolidOptions(GetMaterialElementId(shapeEditScope), shapeEditScope.GraphicsStyleId);\r\n            XYZ scaledDirection = scaledExtrusionPosition.OfVector(Direction);\r\n            double currDepth = Depth * scaledDirection.GetLength();\r\n\r\n            IList<CurveLoop> loops = new List<CurveLoop>();\r\n            foreach (CurveLoop originalLoop in originalLoops)\r\n            {\r\n               if (!originalLoop.IsOpen())\r\n               {\r\n                  loops.Add(originalLoop);\r\n                  continue;\r\n               }\r\n\r\n               int numOriginalCurves = originalLoop.Count();\r\n               if (numOriginalCurves > 0)\r\n               {\r\n                  Curve firstSegment = originalLoop.First();\r\n                  Curve lastSegment = originalLoop.Last();\r\n                  Curve modifiedLastSegment = lastSegment;\r\n\r\n                  XYZ startPoint = firstSegment.GetEndPoint(0);\r\n                  XYZ endPoint = lastSegment.GetEndPoint(1);\r\n\r\n                  double gap = endPoint.DistanceTo(startPoint);\r\n                  if (gap < shortCurveTol)\r\n                  {\r\n                     // We will \"borrow\" some of the last segment to make space for the\r\n                     // repair.  This could be done in a slightly better way, but this should\r\n                     // be good enough for the cases we've seen.  If we need to improve\r\n                     // the heuristic, we can.\r\n                     IList<XYZ> lastPoints = lastSegment.Tessellate();\r\n                     int count = lastPoints.Count();\r\n                     for (int jj = count - 2; jj >= 0; jj--)\r\n                     {\r\n                        if (lastPoints[jj].DistanceTo(startPoint) < shortCurveTol)\r\n                           continue;\r\n\r\n                        try\r\n                        {\r\n                           if (jj > 0)\r\n                           {\r\n                              IntersectionResult result = lastSegment.Project(lastPoints[jj]);\r\n                              modifiedLastSegment = lastSegment.Clone();\r\n                              modifiedLastSegment.MakeBound(lastSegment.GetEndParameter(0), result.Parameter);\r\n                           }\r\n                           else\r\n                           {\r\n                              modifiedLastSegment = null;\r\n                           }\r\n                           endPoint = lastPoints[jj];\r\n                           break;\r\n                        }\r\n                        catch\r\n                        {\r\n                        }\r\n                     }\r\n                  }\r\n\r\n                  try\r\n                  {\r\n                     // We will attempt to close the loop to make it usable.\r\n                     CurveLoop healedCurveLoop = null;\r\n                     if (modifiedLastSegment == lastSegment)\r\n                     {\r\n                        healedCurveLoop = CurveLoop.CreateViaCopy(originalLoop);\r\n                     }\r\n                     else\r\n                     {\r\n                        int loopIndex = 0;\r\n                        healedCurveLoop = new CurveLoop();\r\n                        foreach (Curve originalCurve in originalLoop)\r\n                        {\r\n                           if (loopIndex < numOriginalCurves - 1)\r\n                           {\r\n                              healedCurveLoop.Append(originalCurve);\r\n                              loopIndex++;\r\n                              continue;\r\n                           }\r\n\r\n                           if (modifiedLastSegment == null)\r\n                              break;\r\n\r\n                           healedCurveLoop.Append(modifiedLastSegment);\r\n                        }\r\n                     }\r\n\r\n                     Line closingLine = Line.CreateBound(endPoint, startPoint);\r\n                     healedCurveLoop.Append(closingLine);\r\n                     loops.Add(healedCurveLoop);\r\n                     Importer.TheLog.LogWarning(Id, \"Extrusion has an open profile loop, fixing.\", false);\r\n                     continue;\r\n                  }\r\n                  catch\r\n                  {\r\n                  }\r\n               }\r\n\r\n               Importer.TheLog.LogError(Id, \"Extrusion has an open profile loop, ignoring.\", false);\r\n            }\r\n\r\n            if (loops.Count == 0)\r\n               continue;\r\n\r\n            GeometryObject extrusionObject = null;\r\n            try\r\n            {\r\n               // We may try to create separate extrusions, one per layer here.\r\n               bool shouldWarn = false;\r\n               ElementId overrideMaterialId = ElementId.InvalidElementId;\r\n\r\n               if (shapeEditScope.Creator.MaterialSelect != null)\r\n               {\r\n                  if (shapeEditScope.Creator.MaterialSelect is IFCMaterialLayerSetUsage)\r\n                  {\r\n                     IList<GeometryObject> extrusionLayers = CreateGeometryFromMaterialLayerUsage(shapeEditScope, scaledExtrusionPosition, loops,\r\n                        scaledExtrusionDirection, currDepth, out overrideMaterialId, out shouldWarn);\r\n                     if (extrusionLayers == null || extrusionLayers.Count == 0)\r\n                     {\r\n                        if (shouldWarn)\r\n                           Importer.TheLog.LogWarning(Id, \"Couldn't process associated IfcMaterialLayerSetUsage, using body geometry instead.\", false);\r\n                        if (overrideMaterialId != ElementId.InvalidElementId)\r\n                           solidOptions.MaterialId = overrideMaterialId;\r\n                        extrusionObject = GeometryCreationUtilities.CreateExtrusionGeometry(loops, scaledExtrusionDirection, currDepth, solidOptions);\r\n                     }\r\n                     else\r\n                     {\r\n                        foreach (GeometryObject extrusionLayer in extrusionLayers)\r\n                           extrusions.Add(extrusionLayer);\r\n                     }\r\n                  }\r\n                  else if (shapeEditScope.Creator.MaterialSelect is IFCMaterialProfileSetUsage)\r\n                  {\r\n                     extrusionObject = CreateGeometryFromMaterialProfile(shapeEditScope, loops, scaledExtrusionDirection, currDepth, solidOptions, out shouldWarn);\r\n                     if (extrusionObject == null)\r\n                        extrusionObject = GeometryCreationUtilities.CreateExtrusionGeometry(loops, scaledExtrusionDirection, currDepth, solidOptions);\r\n                  }\r\n                  else\r\n                  {\r\n                     extrusionObject = GeometryCreationUtilities.CreateExtrusionGeometry(loops, scaledExtrusionDirection, currDepth, solidOptions);\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  extrusionObject = GeometryCreationUtilities.CreateExtrusionGeometry(loops, scaledExtrusionDirection, currDepth, solidOptions);\r\n               }\r\n            }\r\n            catch (Exception)\r\n            {\r\n               extrusionObject = GetMeshBackup(shapeEditScope, loops, scaledExtrusionDirection,\r\n                  currDepth, guid);\r\n               if (extrusionObject == null)\r\n                  throw;\r\n            }\r\n\r\n            if (extrusionObject != null)\r\n            {\r\n               if (!(extrusionObject is Solid) || IFCGeometryUtil.ValidateGeometry(extrusionObject as Solid))\r\n               {\r\n                  extrusions.Add(extrusionObject);\r\n               }\r\n               else\r\n               {\r\n                  GeometryObject meshBackup = GetMeshBackup(shapeEditScope, loops, \r\n                     scaledExtrusionDirection, currDepth, guid);\r\n                  if (meshBackup != null)\r\n                     extrusions.Add(meshBackup);\r\n               }\r\n            }\r\n         }\r\n\r\n         return extrusions;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n\r\n         IList<GeometryObject> extrudedGeometries = CreateGeometryInternal(shapeEditScope, scaledLcs, guid);\r\n         if (extrudedGeometries != null)\r\n         {\r\n            foreach (GeometryObject extrudedGeometry in extrudedGeometries)\r\n            {\r\n               shapeEditScope.AddGeometry(IFCSolidInfo.Create(Id, extrudedGeometry));\r\n            }\r\n         }\r\n      }\r\n\r\n      protected IFCExtrudedAreaSolid(IFCAnyHandle solid)\r\n      {\r\n         Process(solid);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCExtrudedAreaSolid object from a handle of type IfcExtrudedAreaSolid.\r\n      /// </summary>\r\n      /// <param name=\"ifcSolid\">The IFC handle.</param>\r\n      /// <returns>The IFCExtrudedAreaSolid object.</returns>\r\n      public static IFCExtrudedAreaSolid ProcessIFCExtrudedAreaSolid(IFCAnyHandle ifcSolid)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSolid))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcExtrudedAreaSolid);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity solid;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSolid.StepId, out solid))\r\n            solid = new IFCExtrudedAreaSolid(ifcSolid);\r\n         return (solid as IFCExtrudedAreaSolid);\r\n      }\r\n\r\n      /// <summary>\r\n      /// In case of a Boolean operation failure, provide a recommended direction to shift the geometry in for a second attempt.\r\n      /// </summary>\r\n      /// <param name=\"lcs\">The local transform for this entity.</param>\r\n      /// <returns>An XYZ representing a unit direction vector, or null if no direction is suggested.</returns>\r\n      /// <remarks>If the 2nd attempt fails, a third attempt will be done with a shift in the opposite direction.</remarks>\r\n      public override XYZ GetSuggestedShiftDirection(Transform lcs)\r\n      {\r\n         if (Position == null)\r\n         {\r\n            return (lcs == null) ? Direction : lcs.OfVector(Direction);\r\n         }\r\n         \r\n         Transform extrusionLCS = (lcs == null) ? Position : lcs.Multiply(Position);\r\n         return extrusionLCS.OfVector(Direction);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCFace.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Utility;\r\nusing Revit.IFC.Import.Enums;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCFace : IFCTopologicalRepresentationItem\r\n   {\r\n      /// <summary>\r\n      /// Return the bounding loops of the face.\r\n      /// </summary>\r\n      public ISet<IFCFaceBound> Bounds { get; set; } = new HashSet<IFCFaceBound>();\r\n      \r\n      protected IFCFace()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcFace)\r\n      {\r\n         base.Process(ifcFace);\r\n\r\n         HashSet<IFCAnyHandle> ifcBounds =\r\n             IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcFace, \"Bounds\");\r\n         if (ifcBounds == null || ifcBounds.Count == 0)\r\n            throw new InvalidOperationException(\"#\" + ifcFace.StepId + \": no face boundaries, aborting.\");\r\n\r\n         foreach (IFCAnyHandle ifcBound in ifcBounds)\r\n         {\r\n            try\r\n            {\r\n               Bounds.Add(IFCFaceBound.ProcessIFCFaceBound(ifcBound));\r\n            }\r\n            catch\r\n            {\r\n               Importer.TheLog.LogWarning(ifcFace.StepId, \"Invalid face boundary, ignoring\", false);\r\n            }\r\n         }\r\n\r\n         if (Bounds.Count == 0)\r\n            throw new InvalidOperationException(\"#\" + ifcFace.StepId + \": no face boundaries, aborting.\");\r\n\r\n         // Give warning if too many outer bounds.  We won't care how they are designated, regardless.\r\n         bool hasOuter = false;\r\n         foreach (IFCFaceBound faceBound in Bounds)\r\n         {\r\n            if (faceBound.IsOuter)\r\n            {\r\n               if (hasOuter)\r\n               {\r\n                  Importer.TheLog.LogWarning(ifcFace.StepId, \"Too many outer boundary loops for IfcFace.\", false);\r\n                  break;\r\n               }\r\n               hasOuter = true;\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the Face definition represents a non-empty boundary.\r\n      /// </summary>\r\n      /// <returns>True if the face contains any information.</returns>\r\n      public bool IsEmpty()\r\n      {\r\n         if (Bounds == null)\r\n            return true;\r\n\r\n         foreach (IFCFaceBound bound in Bounds)\r\n         {\r\n            if (!bound.IsEmpty())\r\n               return false;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      private IList<List<XYZ>> CreateTriangulation(IList<XYZ> boundary)\r\n      {\r\n         if (boundary == null)\r\n            return null;\r\n\r\n         if (boundary.Count != 4)\r\n            return null;\r\n\r\n         IList<List<XYZ>> loops = new List<List<XYZ>>();\r\n\r\n         int firstPoint = 0;\r\n         Func<int, XYZ> boundaryPoint = index => boundary[(firstPoint + index) % 4];\r\n\r\n         // Future TODO: replace this very simple method with Delauney triangulation or the\r\n         // like.  Or better yet, improve the TessellatedShapeBuilder so that it isn't\r\n         // necessary.\r\n         // Want to ensure that either (1) the quadrilateral is convex or (2) we split at the\r\n         // concave point.\r\n         XYZ referenceCross = null;\r\n         Tuple<int, int> posNegIndex = Tuple.Create(0, -1);\r\n         int sum = 1;\r\n\r\n         for (int ii = 0; ii < 4; ii++)\r\n         {\r\n            XYZ vector1 = (boundaryPoint(ii+3) - boundaryPoint(ii)).Normalize();\r\n            XYZ vector2 = (boundaryPoint(ii+1) - boundaryPoint(ii)).Normalize();\r\n            XYZ cross = vector1.CrossProduct(vector2);\r\n            \r\n            if (cross.IsZeroLength())\r\n            {\r\n               // This is a degenerate quadrilateral; return the triangle.\r\n               loops.Add(new List<XYZ>() { boundaryPoint(ii+1), boundaryPoint(ii+2), boundaryPoint(ii+3) });\r\n               return loops;\r\n            }\r\n\r\n            if (referenceCross == null)\r\n            {\r\n               referenceCross = cross;\r\n               continue;\r\n            }\r\n\r\n            double dot = referenceCross.DotProduct(cross);\r\n            sum += ((dot > 0) ? 1 : -1);\r\n            posNegIndex = (dot > 0) ? Tuple.Create(ii, posNegIndex.Item2) : Tuple.Create(posNegIndex.Item1, ii);\r\n         }\r\n\r\n         firstPoint = (sum == -3) ? posNegIndex.Item1 : ((sum == 3) ? posNegIndex.Item2 : 0);\r\n         \r\n         loops.Add(new List<XYZ>() { boundaryPoint(0), boundaryPoint(1), boundaryPoint(2) });\r\n         loops.Add(new List<XYZ>() { boundaryPoint(2), boundaryPoint(3), boundaryPoint(0) });\r\n         return loops;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         if (shapeEditScope.BuilderType != IFCShapeBuilderType.TessellatedShapeBuilder)\r\n            throw new InvalidOperationException(\"Currently BrepBuilder is only used to support IFCAdvancedFace\");\r\n\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n\r\n         // we would only be in this code if we are not processing and IfcAdvancedBrep, since IfcAdvancedBrep must have IfcAdvancedFace\r\n         if (shapeEditScope.BuilderScope == null)\r\n         {\r\n            throw new InvalidOperationException(\"BuilderScope has not been initialized\");\r\n         }\r\n         TessellatedShapeBuilderScope tsBuilderScope = shapeEditScope.BuilderScope as TessellatedShapeBuilderScope;\r\n\r\n         bool addFace = true;\r\n         bool canTriangulate = (Bounds.Count == 1);\r\n         ElementId materialId = GetMaterialElementId(shapeEditScope);\r\n\r\n         // We can only really triangulate faces with one boundary with 4 vertices,\r\n         // but we don't really know how many vertices the boundary has until later.\r\n         // So this is just the first block.  Later, we can try to extend to generic\r\n         // polygons.\r\n         tsBuilderScope.StartCollectingFace(materialId, canTriangulate);\r\n         \r\n         foreach (IFCFaceBound faceBound in Bounds)\r\n         {\r\n            faceBound.CreateShape(shapeEditScope, scaledLcs, guid);\r\n\r\n            // If we can't create the outer face boundary, we will abort the creation of this face.  \r\n            // In that case, return, unless we can triangulate it.\r\n            if (!tsBuilderScope.HaveActiveFace())\r\n            {\r\n               addFace = false;\r\n               break;\r\n            }\r\n         }\r\n\r\n         tsBuilderScope.StopCollectingFace(addFace, false);\r\n\r\n         IList<List<XYZ>> delayedFaceBoundaries = CreateTriangulation(tsBuilderScope.DelayedFaceBoundary);\r\n         if (delayedFaceBoundaries != null)\r\n         {\r\n            bool extraFace = false;\r\n            foreach (List<XYZ> delayedBoundary in delayedFaceBoundaries)\r\n            {\r\n               bool addTriangulatedFace = true;\r\n               tsBuilderScope.StartCollectingFace(GetMaterialElementId(shapeEditScope), false);\r\n               if (!tsBuilderScope.AddLoopVertices(Id, delayedBoundary))\r\n               {\r\n                  Importer.TheLog.LogComment(Id, \"Bounded loop plane is slightly non-planar, couldn't triangulate.\", false);\r\n                  addTriangulatedFace = false;\r\n               }\r\n               tsBuilderScope.StopCollectingFace(addTriangulatedFace, extraFace);\r\n               extraFace = true;\r\n            }\r\n         }\r\n      }\r\n\r\n      protected IFCFace(IFCAnyHandle ifcFace)\r\n      {\r\n         Process(ifcFace);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCFace object from a handle of type IfcFace.\r\n      /// </summary>\r\n      /// <param name=\"ifcFace\">The IFC handle.</param>\r\n      /// <returns>The IFCFace object.</returns>\r\n      public static IFCFace ProcessIFCFace(IFCAnyHandle ifcFace)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcFace))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcFace);\r\n            return null;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcFace, IFCEntityType.IfcFaceSurface))\r\n            return IFCFaceSurface.ProcessIFCFaceSurface(ifcFace);\r\n\r\n         IFCEntity face;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcFace.StepId, out face))\r\n            face = new IFCFace(ifcFace);\r\n         return (face as IFCFace);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCFaceBasedSurfaceModel.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCFaceBasedSurfaceModel : IFCRepresentationItem\r\n   {\r\n      ISet<IFCConnectedFaceSet> m_Shells = null;\r\n\r\n      /// <summary>\r\n      /// The shells of the surface model.\r\n      /// </summary>\r\n      public ISet<IFCConnectedFaceSet> Shells\r\n      {\r\n         get\r\n         {\r\n            if (m_Shells == null)\r\n               m_Shells = new HashSet<IFCConnectedFaceSet>();\r\n            return m_Shells;\r\n         }\r\n      }\r\n\r\n      protected IFCFaceBasedSurfaceModel()\r\n      {\r\n      }\r\n\r\n      private IFCShapeBuilderType GetShapeBuilderType()\r\n      {\r\n         foreach (IFCConnectedFaceSet faceSet in Shells)\r\n         {\r\n            if (faceSet?.Faces?.Count == 0)\r\n               continue;\r\n\r\n            foreach (IFCFace face in faceSet.Faces)\r\n            {\r\n               if ((face is IFCAdvancedFace) &&\r\n                  (!((face as IFCAdvancedFace).FaceSurface is IFCPlane)))\r\n                  return IFCShapeBuilderType.BrepBuilder;\r\n            }\r\n         }\r\n\r\n         return IFCShapeBuilderType.TessellatedShapeBuilder;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The shape edit scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      /// <returns>The created geometry.</returns>\r\n      /// <remarks>As this doesn't inherit from IfcSolidModel, this is a non-virtual CreateGeometry function.</remarks>\r\n      protected IList<GeometryObject> CreateGeometry(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         if (Shells.Count == 0)\r\n            return null;\r\n\r\n         IFCShapeBuilderType initialBuilderType = GetShapeBuilderType();\r\n         int numPasses = (initialBuilderType == IFCShapeBuilderType.BrepBuilder) ? 2 : 1;\r\n\r\n         for (int ii = 0; ii < numPasses; ii++)\r\n         {\r\n            IFCShapeBuilderType builderType = (ii == 0) ? initialBuilderType :\r\n               IFCShapeBuilderType.TessellatedShapeBuilder;\r\n             \r\n            using (BuilderScope builderScope = shapeEditScope.InitializeBuilder(builderType))\r\n            {\r\n               builderScope.StartCollectingFaceSet(BRepType.OpenShell);\r\n\r\n               foreach (IFCConnectedFaceSet faceSet in Shells)\r\n               {\r\n                  faceSet.CreateShape(shapeEditScope, scaledLcs, guid);\r\n               }\r\n\r\n               IList<GeometryObject> geomObjs = builderScope.CreateGeometry(guid);\r\n               if (geomObjs?.Count > 0)\r\n                  return geomObjs;\r\n            }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcFaceBasedSurfaceModel)\r\n      {\r\n         base.Process(ifcFaceBasedSurfaceModel);\r\n\r\n         ISet<IFCAnyHandle> ifcShells = IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcFaceBasedSurfaceModel, \"FbsmFaces\");\r\n         foreach (IFCAnyHandle ifcShell in ifcShells)\r\n         {\r\n            IFCConnectedFaceSet shell = IFCConnectedFaceSet.ProcessIFCConnectedFaceSet(ifcShell);\r\n            if (shell != null)\r\n            {\r\n               shell.AllowInvalidFace = true;\r\n               Shells.Add(shell);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n\r\n         // Ignoring Inner shells for now.\r\n         if (Shells.Count != 0)\r\n         {\r\n            // This isn't an inherited function; see description for more details.\r\n            IList<GeometryObject> createdGeometries = CreateGeometry(shapeEditScope, scaledLcs, guid);\r\n            if (createdGeometries != null)\r\n            {\r\n               foreach (GeometryObject createdGeometry in createdGeometries)\r\n               {\r\n                  shapeEditScope.AddGeometry(IFCSolidInfo.Create(Id, createdGeometry));\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      protected IFCFaceBasedSurfaceModel(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCFaceBasedSurfaceModel object from a handle of type IfcFaceBasedSurfaceModel.\r\n      /// </summary>\r\n      /// <param name=\"ifcFaceBasedSurfaceModel\">The IFC handle.</param>\r\n      /// <returns>The IFCFaceBasedSurfaceModel object.</returns>\r\n      public static IFCFaceBasedSurfaceModel ProcessIFCFaceBasedSurfaceModel(IFCAnyHandle ifcFaceBasedSurfaceModel)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcFaceBasedSurfaceModel))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcFaceBasedSurfaceModel);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity faceBasedSurfaceModel;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcFaceBasedSurfaceModel.StepId, out faceBasedSurfaceModel))\r\n            faceBasedSurfaceModel = new IFCFaceBasedSurfaceModel(ifcFaceBasedSurfaceModel);\r\n         return (faceBasedSurfaceModel as IFCFaceBasedSurfaceModel);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCFaceBound.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.ApplicationServices;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCFaceBound : IFCRepresentationItem\r\n   {\r\n      /// <summary>\r\n      /// Return the defining loop of the face boundary.\r\n      /// </summary>\r\n      public IFCLoop Bound { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Return the orientation of the defining loop of the face boundary.\r\n      /// </summary>\r\n      public bool Orientation { get; protected set; } = true;\r\n\r\n      /// <summary>\r\n      /// Returns whether this is an outer boundary (TRUE) or an inner boundary (FALSE).\r\n      /// </summary>\r\n      public bool IsOuter { get; protected set; } = false;\r\n\r\n      /// <summary>\r\n      /// Checks if the FaceBound definition represents a non-empty boundary.\r\n      /// </summary>\r\n      /// <returns>True if the FaceBound contains any information.</returns>\r\n      public bool IsEmpty()\r\n      {\r\n         return Bound?.IsEmpty() ?? true;\r\n      }\r\n\r\n      protected IFCFaceBound()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcFaceBound)\r\n      {\r\n         base.Process(ifcFaceBound);\r\n\r\n         IFCAnyHandle ifcLoop = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcFaceBound, \"Bound\", true);\r\n\r\n         Bound = IFCLoop.ProcessIFCLoop(ifcLoop);\r\n\r\n         IsOuter = IFCAnyHandleUtil.IsValidSubTypeOf(ifcFaceBound, EntityType, IFCEntityType.IfcFaceOuterBound);\r\n      }\r\n\r\n      private void CreateTessellatedShapeInternal(IFCImportShapeEditScope shapeEditScope, Transform scaledLcs)\r\n      {\r\n         TessellatedShapeBuilderScope tsBuilderScope = shapeEditScope.BuilderScope as TessellatedShapeBuilderScope;\r\n\r\n         if (tsBuilderScope == null)\r\n         {\r\n            throw new InvalidOperationException(\"Expect a TessellatedShapeBuilderScope, but get a BrepBuilderScope instead\");\r\n         }\r\n\r\n         IList<XYZ> loopVertices = Bound.LoopVertices;\r\n         int count = 0;\r\n         if (loopVertices == null || ((count = loopVertices.Count) == 0))\r\n            throw new InvalidOperationException(\"#\" + Id + \": missing loop vertices, ignoring.\");\r\n\r\n         if (count < 3)\r\n            throw new InvalidOperationException(\"#\" + Id + \": too few loop vertices (\" + count + \"), ignoring.\");\r\n\r\n         if (!Orientation)\r\n            loopVertices.Reverse();\r\n\r\n         // Apply the transform\r\n         IList<XYZ> transformedVertices = new List<XYZ>();\r\n         foreach (XYZ vertex in loopVertices)\r\n         {\r\n            transformedVertices.Add(scaledLcs.OfPoint(vertex));\r\n         }\r\n\r\n         // Check that the loop vertices don't contain points that are very close to one another;\r\n         // if so, throw the point away and hope that the TessellatedShapeBuilder can repair the result.\r\n         // Warn in this case.  If the entire boundary is bad, report an error and don't add the loop vertices.\r\n         List<XYZ> validVertices = null;\r\n         for (int pass = 0; pass < 2; pass++)\r\n         {\r\n            if (pass == 1 && !tsBuilderScope.RevertToMeshIfPossible())\r\n               break;\r\n\r\n            IFCGeometryUtil.CheckAnyDistanceVerticesWithinTolerance(Id, shapeEditScope, transformedVertices, out validVertices);\r\n            count = validVertices.Count;\r\n            if (count >= 3 || !IsOuter)\r\n               break;\r\n         }\r\n\r\n         // We are going to catch any exceptions if the loop is invalid.  \r\n         // We are going to hope that we can heal the parent object in the TessellatedShapeBuilder.\r\n         bool bPotentiallyAbortFace = (count < 3);\r\n\r\n         if (bPotentiallyAbortFace)\r\n         {\r\n            Importer.TheLog.LogComment(Id, \"Too few distinct loop vertices (\" + count + \"), ignoring.\", false);\r\n         }\r\n         else\r\n         {\r\n            bool maybeTryToTriangulate = tsBuilderScope.CanProcessDelayedFaceBoundary && (count == 4);\r\n            bool tryToTriangulate = false;\r\n\r\n            // Last check: check to see if the vertices are actually planar.  \r\n            // We are not going to be particularly fancy about how we pick the plane.\t\r\n            if (count > 3)\r\n            {\r\n               XYZ planeNormal = null;\r\n\r\n               XYZ firstPoint = validVertices[0];\r\n               XYZ secondPoint = validVertices[1];\r\n               XYZ firstDir = secondPoint - firstPoint;\r\n               double bestLength = 0;\r\n\r\n               for (int index = 2; index <= count; index++)\r\n               {\r\n                  XYZ thirdPoint = validVertices[(index % count)];\r\n                  XYZ currentPlaneNormal = firstDir.CrossProduct(thirdPoint - firstPoint);\r\n                  double planeNormalLength = currentPlaneNormal.GetLength();\r\n                  if (planeNormalLength > 0.01)\r\n                  {\r\n                     planeNormal = currentPlaneNormal.Normalize();\r\n                     break;\r\n                  }\r\n                  else if (maybeTryToTriangulate && (planeNormalLength > bestLength))\r\n                  {\r\n                     planeNormal = currentPlaneNormal.Normalize();\r\n                     bestLength = planeNormalLength;\r\n                  }\r\n\r\n                  firstPoint = secondPoint;\r\n                  secondPoint = thirdPoint;\r\n                  firstDir = secondPoint - firstPoint;\r\n               }\r\n\r\n               if (planeNormal == null)\r\n               {\r\n                  // Even if we don't find a good normal, we will still see if the internal function can make sense of it.\r\n                  Importer.TheLog.LogComment(Id, \"Bounded loop plane is likely non-planar, may triangulate.\", false);\r\n               }\r\n               else\r\n               {\r\n                  double vertexEps = IFCImportFile.TheFile.VertexTolerance;\r\n\r\n                  for (int index = 0; index < count; index++)\r\n                  {\r\n                     XYZ pointOnPlane = validVertices[index] -\r\n                        (validVertices[index] - firstPoint).DotProduct(planeNormal) * planeNormal;\r\n                     double distance = pointOnPlane.DistanceTo(validVertices[index]);\r\n                     if (distance > vertexEps * 10.0)\r\n                     {\r\n                        Importer.TheLog.LogComment(Id, \"Bounded loop plane is non-planar, may triangulate.\", false);\r\n                        tryToTriangulate = maybeTryToTriangulate;\r\n                        bPotentiallyAbortFace = !tryToTriangulate;\r\n                        break;\r\n                     }\r\n                     else if (distance > vertexEps)\r\n                     {\r\n                        if (!maybeTryToTriangulate)\r\n                        {\r\n                           Importer.TheLog.LogComment(Id, \"Bounded loop plane is slightly non-planar, correcting.\", false);\r\n                           validVertices[index] = pointOnPlane;\r\n                        }\r\n                        else\r\n                        {\r\n                           Importer.TheLog.LogComment(Id, \"Bounded loop plane is slightly non-planar, will triangulate.\", false);\r\n                           tryToTriangulate = maybeTryToTriangulate;\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n\r\n            if (!bPotentiallyAbortFace)\r\n            {\r\n               if (tryToTriangulate)\r\n               {\r\n                  tsBuilderScope.DelayedFaceBoundary = validVertices;      \r\n               }\r\n               else\r\n               {\r\n                  bPotentiallyAbortFace = !tsBuilderScope.AddLoopVertices(Id, validVertices);\r\n               }\r\n            }\r\n         }\r\n\r\n         if (bPotentiallyAbortFace && IsOuter)\r\n            tsBuilderScope.AbortCurrentFace();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         if (shapeEditScope.BuilderScope == null)\r\n         {\r\n            throw new InvalidOperationException(\"BuilderScope has not been initialised\");\r\n         }\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n         Bound.CreateShape(shapeEditScope, scaledLcs, guid);\r\n         IsValidForCreation = Bound.IsValidForCreation;\r\n\r\n         if (shapeEditScope.BuilderType == IFCShapeBuilderType.TessellatedShapeBuilder)\r\n            CreateTessellatedShapeInternal(shapeEditScope, scaledLcs);\r\n      }\r\n\r\n      protected IFCFaceBound(IFCAnyHandle ifcFaceBound)\r\n      {\r\n         Process(ifcFaceBound);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCFaceBound object from a handle of type IfcFaceBound.\r\n      /// </summary>\r\n      /// <param name=\"ifcFaceBound\">The IFC handle.</param>\r\n      /// <returns>The IFCFaceBound object.</returns>\r\n      public static IFCFaceBound ProcessIFCFaceBound(IFCAnyHandle ifcFaceBound)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcFaceBound))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcFaceBound);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity faceBound;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcFaceBound.StepId, out faceBound))\r\n            faceBound = new IFCFaceBound(ifcFaceBound);\r\n         return (faceBound as IFCFaceBound);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCFaceSurface.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Utility;\r\nusing Revit.IFC.Import.Enums;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCFaceSurface entity\r\n   /// </summary>\r\n   public class IFCFaceSurface : IFCFace\r\n   {\r\n      IFCSurface m_FaceSurface = null;\r\n      bool m_SameSense = true;\r\n\r\n      /// <summary>\r\n      /// Indicates whether the sense of the surface normal agrees with the sense of the topological normal to the face.\r\n      /// </summary>\r\n      public bool SameSense\r\n      {\r\n         get { return m_SameSense; }\r\n         set { m_SameSense = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The surface which defines the internal shape of the face. \r\n      /// This surface may be unbounded. \r\n      /// </summary>\r\n      public IFCSurface FaceSurface\r\n      {\r\n         get { return m_FaceSurface; }\r\n         set { m_FaceSurface = value; }\r\n      }\r\n\r\n      protected IFCFaceSurface()\r\n      {\r\n      }\r\n\r\n      protected IFCFaceSurface(IFCAnyHandle ifcFaceSurface)\r\n      {\r\n         Process(ifcFaceSurface);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcFaceSurface)\r\n      {\r\n         base.Process(ifcFaceSurface);\r\n\r\n         // Only allow IfcFaceSurface for certain supported surfaces.\r\n         IFCAnyHandle faceSurface = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcFaceSurface, \"FaceSurface\", false);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(faceSurface))\r\n         {\r\n            FaceSurface = IFCSurface.ProcessIFCSurface(faceSurface);\r\n            bool validSurface = (FaceSurface is IFCPlane) || (FaceSurface is IFCCylindricalSurface) || (FaceSurface is IFCBSplineSurface) ||\r\n               (FaceSurface is IFCSurfaceOfLinearExtrusion) || (FaceSurface is IFCSurfaceOfRevolution);\r\n            if (!validSurface)\r\n               Importer.TheLog.LogError(ifcFaceSurface.StepId,\r\n                   \"cannot handle IfcFaceSurface with FaceSurface of type \" + IFCAnyHandleUtil.GetEntityType(faceSurface).ToString(), true);\r\n         }\r\n\r\n         bool found = false;\r\n         bool sameSense = IFCImportHandleUtil.GetRequiredBooleanAttribute(ifcFaceSurface, \"SameSense\", out found);\r\n         if (found)\r\n         {\r\n            SameSense = sameSense;\r\n         }\r\n         else\r\n         {\r\n            Importer.TheLog.LogWarning(ifcFaceSurface.StepId,\r\n                \"cannot find SameSense attribute, defaulting to true\", false);\r\n            SameSense = true;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCFaceSurface object from a handle of type IfcFaceSurface.\r\n      /// </summary>\r\n      /// <param name=\"ifcFaceSurface\">The IFC handle.</param>\r\n      /// <returns>The IFCFace object.</returns>\r\n      public static IFCFaceSurface ProcessIFCFaceSurface(IFCAnyHandle ifcFaceSurface)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcFaceSurface))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcFaceSurface);\r\n            return null;\r\n         }\r\n\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete) && IFCAnyHandleUtil.IsValidSubTypeOf(ifcFaceSurface, IFCEntityType.IfcAdvancedFace))\r\n         {\r\n            return IFCAdvancedFace.ProcessIFCAdvancedFace(ifcFaceSurface);\r\n         }\r\n         IFCEntity face;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcFaceSurface.StepId, out face))\r\n            face = new IFCFaceSurface(ifcFaceSurface);\r\n         return (face as IFCFaceSurface);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCFacetedBrep.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCFacetedBrep entity\r\n   /// </summary>\r\n   public class IFCFacetedBrep : IFCManifoldSolidBrep\r\n   {\r\n\r\n      ISet<IFCClosedShell> m_Inners = null;\r\n\r\n      /// <summary>\r\n      /// The list of optional voids of the solid.\r\n      /// </summary>\r\n      public ISet<IFCClosedShell> Inners\r\n      {\r\n         get\r\n         {\r\n            if (m_Inners == null)\r\n               m_Inners = new HashSet<IFCClosedShell>();\r\n            return m_Inners;\r\n         }\r\n\r\n      }\r\n      protected IFCFacetedBrep()\r\n      {\r\n      }\r\n\r\n      protected IFCFacetedBrep(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcFacetedBrep)\r\n      {\r\n         base.Process(ifcFacetedBrep);\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcFacetedBrep, IFCEntityType.IfcFacetedBrepWithVoids))\r\n         {\r\n            HashSet<IFCAnyHandle> ifcVoids =\r\n                IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcFacetedBrep, \"Voids\");\r\n            if (ifcVoids != null)\r\n            {\r\n               foreach (IFCAnyHandle ifcVoid in ifcVoids)\r\n               {\r\n                  try\r\n                  {\r\n                     Inners.Add(IFCClosedShell.ProcessIFCClosedShell(ifcVoid));\r\n                  }\r\n                  catch\r\n                  {\r\n                     Importer.TheLog.LogWarning(ifcVoid.StepId, \"Invalid inner shell, ignoring\", false);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCFacetedBrep object from a handle of type IfcFacetedBrep.\r\n      /// </summary>\r\n      /// <param name=\"ifcFacetedBrep\">The IFC handle.</param>\r\n      /// <returns>The IFCFacetedBrep object.</returns>\r\n      public static IFCFacetedBrep ProcessIFCFacetedBrep(IFCAnyHandle ifcFacetedBrep)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcFacetedBrep))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcFacetedBrep);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity facetedBrep;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcFacetedBrep.StepId, out facetedBrep))\r\n            facetedBrep = new IFCFacetedBrep(ifcFacetedBrep);\r\n         return (facetedBrep as IFCFacetedBrep);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCFeatureElement.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcFeatureElement.\r\n   /// </summary>\r\n   public class IFCFeatureElement : IFCElement\r\n   {\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCFeatureElement()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCFeatureElement from the IfcFeatureElement handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcFeatureElement\">The IfcFeatureElement handle.</param>\r\n      protected IFCFeatureElement(IFCAnyHandle ifcFeatureElement)\r\n      {\r\n         Process(ifcFeatureElement);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcFeatureElement attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcFeatureElement\">The IfcFeatureElement handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcFeatureElement)\r\n      {\r\n         base.Process(ifcFeatureElement);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcFeatureElement object.\r\n      /// </summary>\r\n      /// <param name=\"ifcFeatureElement\">The IfcFeatureElement handle.</param>\r\n      /// <returns>The IFCFeatureElement object.</returns>\r\n      public static IFCFeatureElement ProcessIFCFeatureElement(IFCAnyHandle ifcFeatureElement)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcFeatureElement))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcFeatureElement);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity cachedFeatureElement;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcFeatureElement.StepId, out cachedFeatureElement))\r\n            return (cachedFeatureElement as IFCFeatureElement);\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcFeatureElement, IFCEntityType.IfcFeatureElementSubtraction))\r\n            return IFCFeatureElementSubtraction.ProcessIFCFeatureElementSubtraction(ifcFeatureElement);\r\n\r\n         return new IFCFeatureElement(ifcFeatureElement);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCFeatureElementSubtraction.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Revit.IFC.Common.Enums;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcFeatureElementSubtraction.\r\n   /// </summary>\r\n   public class IFCFeatureElementSubtraction : IFCFeatureElement\r\n   {\r\n      protected IFCElement m_VoidsElement = null;\r\n\r\n      /// <summary>\r\n      /// The element this opening is voiding (e.g., a wall).\r\n      /// This is set initially by the host object.\r\n      /// </summary>\r\n      public IFCElement VoidsElement\r\n      {\r\n         get { return m_VoidsElement; }\r\n         set { m_VoidsElement = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCFeatureElementSubtraction()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCFeatureElementSubtraction from the IfcFeatureElementSubtraction handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcFeatureElementSubtraction\">The IfcFeatureElementSubtraction handle.</param>\r\n      protected IFCFeatureElementSubtraction(IFCAnyHandle ifcFeatureElementSubtraction)\r\n      {\r\n         Process(ifcFeatureElementSubtraction);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcFeatureElementSubtraction attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcFeatureElementSubtraction\">The IfcFeatureElementSubtraction handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcFeatureElementSubtraction)\r\n      {\r\n         base.Process(ifcFeatureElementSubtraction);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcFeatureElementSubtraction object.\r\n      /// </summary>\r\n      /// <param name=\"ifcFeatureElementSubtraction\">The IfcFeatureElementSubtraction handle.</param>\r\n      /// <returns>The iFCFeatureElementSubtraction object.</returns>\r\n      public static IFCFeatureElementSubtraction ProcessIFCFeatureElementSubtraction(IFCAnyHandle ifcFeatureElementSubtraction)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcFeatureElementSubtraction))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcFeatureElementSubtraction);\r\n            return null;\r\n         }\r\n\r\n         try\r\n         {\r\n            IFCEntity cachedFeatureElementSubtraction;\r\n            if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcFeatureElementSubtraction.StepId, out cachedFeatureElementSubtraction))\r\n               return (cachedFeatureElementSubtraction as IFCFeatureElementSubtraction);\r\n\r\n            if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcFeatureElementSubtraction, IFCEntityType.IfcOpeningElement))\r\n               return IFCOpeningElement.ProcessIFCOpeningElement(ifcFeatureElementSubtraction);\r\n\r\n            return new IFCFeatureElementSubtraction(ifcFeatureElementSubtraction);\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            HandleError(ex.Message, ifcFeatureElementSubtraction, true);\r\n            return null;\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCGeometricSet.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCGeometricSet : IFCRepresentationItem\r\n   {\r\n      IList<IFCCurve> m_Curves = null;\r\n\r\n      /// <summary>\r\n      /// Get the Curve representation of IFCCurve.  It could be null.\r\n      /// </summary>\r\n      public IList<IFCCurve> Curves\r\n      {\r\n         get\r\n         {\r\n            if (m_Curves == null)\r\n               m_Curves = new List<IFCCurve>();\r\n            return m_Curves;\r\n         }\r\n      }\r\n\r\n      protected IFCGeometricSet()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcGeometricSet)\r\n      {\r\n         base.Process(ifcGeometricSet);\r\n\r\n         IList<IFCAnyHandle> elements = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcGeometricSet, \"Elements\");\r\n         if (elements != null)\r\n         {\r\n            foreach (IFCAnyHandle element in elements)\r\n            {\r\n               if (IFCAnyHandleUtil.IsSubTypeOf(element, IFCEntityType.IfcCurve))\r\n               {\r\n                  IFCCurve curve = IFCCurve.ProcessIFCCurve(element);\r\n                  if (curve != null)\r\n                     Curves.Add(curve);\r\n               }\r\n               else\r\n                  Importer.TheLog.LogError(Id, \"Unhandled entity type in IfcGeometricSet: \" + IFCAnyHandleUtil.GetEntityType(element).ToString(), false);\r\n            }\r\n         }\r\n      }\r\n\r\n      protected IFCGeometricSet(IFCAnyHandle geometricSet)\r\n      {\r\n         Process(geometricSet);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCGeometricSet object from a handle of type IfcGeometricSet.\r\n      /// </summary>\r\n      /// <param name=\"ifcGeometricSet\">The IFC handle.</param>\r\n      /// <returns>The IFCGeometricSet object.</returns>\r\n      public static IFCGeometricSet ProcessIFCGeometricSet(IFCAnyHandle ifcGeometricSet)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcGeometricSet))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcGeometricSet);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity geometricSet;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcGeometricSet.StepId, out geometricSet))\r\n            geometricSet = new IFCGeometricSet(ifcGeometricSet);\r\n         return (geometricSet as IFCGeometricSet);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item, and add to scope.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      /// <remarks>This currently assumes that we are creating plan view curves.</remarks>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n\r\n         foreach (IFCCurve curve in Curves)\r\n         {\r\n            curve.CreateShape(shapeEditScope, scaledLcs, guid);\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCGeotechnicalElement.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Revit.IFC.Common.Enums;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Import.Enums;\nusing Revit.IFC.Import.Utility;\nnamespace Revit.IFC.Import.Data\n{\n   /// <summary>\n   /// This is an abstract supertype for Geotechnical Entities.\n   /// </summary>\n   public class IFCGeotechnicalElement :  IFCElement\n   {\n      /// <summary>\n      /// Default Constructor\n      /// </summary>\n      protected IFCGeotechnicalElement()\n      {\n      }\n\n      \n      /// <summary>\n      /// Construct an IFCGeotechnicalElement from the input handle.\n      /// </summary>\n      /// <param name=\"ifcGeotechnicalElement\">The handle representing an IfcGeotechnicalElement</param>\n      protected IFCGeotechnicalElement(IFCAnyHandle ifcGeotechnicalElement)\n      {\n         Process(ifcGeotechnicalElement);\n      }\n\n\n      /// <summary>\n      /// Processes the specific IfcGeotechnicalElement attributes, if any.\n      /// </summary>\n      /// <param name=\"ifcGeotechnicalElement\"></param>\n      protected override void Process(IFCAnyHandle ifcGeotechnicalElement)\n      {\n         base.Process(ifcGeotechnicalElement);\n      }\n\n\n      /// <summary>\n      /// \n      /// </summary>\n      /// <param name=\"ifcGeotechnicalElement\"></param>\n      /// <returns></returns>\n      public static IFCGeotechnicalElement ProcessIFCGeotechnicalElement(IFCAnyHandle ifcGeotechnicalElement)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcGeotechnicalElement))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcElement);\n            return null;\n         }\n\n         try\n         {\n            IFCEntity cachedGeotechnicalElement;\n            IFCImportFile.TheFile.EntityMap.TryGetValue(ifcGeotechnicalElement.StepId, out cachedGeotechnicalElement);\n            if (cachedGeotechnicalElement != null)\n               return (cachedGeotechnicalElement as IFCGeotechnicalElement);\n\n            // other subclasses not handled yet.\n            if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcGeotechnicalElement, IFCEntityType.IfcGeotechnicalStratum))\n               return IFCGeotechnicalStratum.ProcessIFCGeotechnicalStratum(ifcGeotechnicalElement);\n\n            return new IFCGeotechnicalElement(ifcGeotechnicalElement);\n         }\n         catch (Exception ex)\n         {\n            HandleError(ex.Message, ifcGeotechnicalElement, true);\n            return null;\n         }\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCGeotechnicalStratum.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Revit.IFC.Common.Enums;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Import.Enums;\nusing Revit.IFC.Import.Utility;\n\nnamespace Revit.IFC.Import.Data\n{\n   /// <summary>\n   /// From spec:\n   /// Representation of the concept of an identified discrete almost homogeneous geological feature with either an irregular solid or 'Yabuki' top surface\n   /// shape or a regular voxel cubic shape. A stratum is represented as a discrete entity, specialized (sub typed) from IfcElement. A stratum may be broken down\n   /// into smaller entities if properties vary across the stratum or alternatively properties may be described with bounded numeric ranges. A stratum may carry\n   /// information about the physical form and its interpretation as a Geological Item (GML). The shape representations used should correspond to the sub-type of\n   /// IfcGeotechnicalAssembly in which it occurs\n   /// </summary>\n   public class IFCGeotechnicalStratum : IFCGeotechnicalElement\n   {\n      /// <summary>\n      /// Default Constructor\n      /// </summary>\n      protected IFCGeotechnicalStratum()\n      {\n      }\n\n      /// <summary>\n      /// Constructs an ifcGeometricStratum from the supplied handle.\n      /// </summary>\n      /// <param name=\"ifcGeotechnicalStratum\">The handle to use for the Geotechnical Stratum.</param>\n      protected IFCGeotechnicalStratum(IFCAnyHandle ifcGeotechnicalStratum)\n      {\n         Process(ifcGeotechnicalStratum);\n      }\n\n      /// <summary>\n      /// Processes IfcGeotechnicalStratum attributes.\n      /// </summary>\n      /// <param name=\"ifcGeotechnicalStratum\">Handle to process.</param>\n      protected override void Process(IFCAnyHandle ifcGeotechnicalStratum)\n      {\n         base.Process(ifcGeotechnicalStratum);\n      }\n\n      /// <summary>\n      /// Processes IfcGeotechnicalStratum object.\n      /// </summary>\n      /// <param name=\"ifcGeotechnicalStratum\">Geotechnical Stratum handle to process.</param>\n      /// <returns></returns>\n      public static IFCGeotechnicalStratum ProcessIFCGeotechnicalStratum(IFCAnyHandle ifcGeotechnicalStratum)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcGeotechnicalStratum))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcElement);\n            return null;\n         }\n\n         try\n         {\n            IFCEntity cachedIFCGeotechnicalStratum;\n            IFCImportFile.TheFile.EntityMap.TryGetValue(ifcGeotechnicalStratum.StepId, out cachedIFCGeotechnicalStratum);\n            if (cachedIFCGeotechnicalStratum != null)\n               return (cachedIFCGeotechnicalStratum as IFCGeotechnicalStratum);\n\n            // other subclasses not handled yet.\n            if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcGeotechnicalStratum, IFCEntityType.IfcGeotechnicalElement))\n               return IFCSolidStratum.ProcessIFCSolidStratum(ifcGeotechnicalStratum);\n\n            return new IFCGeotechnicalStratum(ifcGeotechnicalStratum);\n         }\n         catch (Exception ex)\n         {\n            HandleError(ex.Message, ifcGeotechnicalStratum, true);\n            return null;\n         }\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCGrid.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcGrid, which corresponds to a group of Revit Grid elements.\r\n   /// The fields of the IFCGrid class correspond to the IfcGrid entity defined in the IFC schema.\r\n   /// </summary>\r\n   public class IFCGrid : IFCProduct\r\n   {\r\n      private IList<IFCGridAxis> m_UAxes = null;\r\n\r\n      private IList<IFCGridAxis> m_VAxes = null;\r\n\r\n      private IList<IFCGridAxis> m_WAxes = null;\r\n\r\n      private IDictionary<ElementId, IFCPresentationLayerAssignment> m_PresentationLayerAssignmentsForAxes = null;\r\n\r\n      private enum IFCAxesType\r\n      {\r\n         UAxes,\r\n         VAxes,\r\n         WAxes\r\n      }\r\n\r\n      private enum IFCAxesTagType\r\n      {\r\n         Digit,\r\n         UpperCase,\r\n         LowerCase\r\n      }\r\n\r\n      /// <summary>\r\n      /// The required list of U Axes.\r\n      /// </summary>\r\n      public IList<IFCGridAxis> UAxes\r\n      {\r\n         get\r\n         {\r\n            if (m_UAxes == null)\r\n               m_UAxes = new List<IFCGridAxis>();\r\n\r\n            return m_UAxes;\r\n         }\r\n         private set { m_UAxes = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The required list of V Axes.\r\n      /// </summary>\r\n      public IList<IFCGridAxis> VAxes\r\n      {\r\n         get\r\n         {\r\n            if (m_VAxes == null)\r\n               m_VAxes = new List<IFCGridAxis>();\r\n\r\n            return m_VAxes;\r\n         }\r\n         private set { m_VAxes = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The optional list of W Axes.\r\n      /// </summary>\r\n      public IList<IFCGridAxis> WAxes\r\n      {\r\n         get\r\n         {\r\n            if (m_WAxes == null)\r\n               m_WAxes = new List<IFCGridAxis>();\r\n\r\n            return m_WAxes;\r\n         }\r\n         private set { m_WAxes = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// A map of grid axes to their presentation layer assignments.  Overrides the IfcGrid PresentationLayerNames if present.\r\n      /// </summary>\r\n      protected IDictionary<ElementId, IFCPresentationLayerAssignment> PresentationLayerAssignmentsForAxes\r\n      {\r\n         get\r\n         {\r\n            if (m_PresentationLayerAssignmentsForAxes == null)\r\n               m_PresentationLayerAssignmentsForAxes = new Dictionary<ElementId, IFCPresentationLayerAssignment>();\r\n            return m_PresentationLayerAssignmentsForAxes;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCGrid()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCGrid from the IfcGrid handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcGrid\">The IfcGrid handle.</param>\r\n      protected IFCGrid(IFCAnyHandle ifcGrid)\r\n      {\r\n         Process(ifcGrid);\r\n      }\r\n\r\n      private IList<IFCGridAxis> ProcessOneAxis(IFCAnyHandle ifcGrid, IFCAxesType axisType)\r\n      {\r\n         IList<IFCGridAxis> gridAxes = new List<IFCGridAxis>();\r\n\r\n         List<IFCAnyHandle> ifcAxes = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcGrid, axisType.ToString());\r\n         if (ifcAxes != null)\r\n         {\r\n            foreach (IFCAnyHandle axis in ifcAxes)\r\n            {\r\n               IFCGridAxis gridAxis = IFCGridAxis.ProcessIFCGridAxis(axis);\r\n               if (gridAxis != null)\r\n               {\r\n                  gridAxis.ParentGrid = this;\r\n                  if (gridAxis.DuplicateAxisId == -1)\r\n                  {\r\n                     gridAxes.Add(gridAxis);\r\n                  }\r\n                  else\r\n                  {\r\n                     IFCEntity originalEntity;\r\n                     if (IFCImportFile.TheFile.EntityMap.TryGetValue(gridAxis.DuplicateAxisId, out originalEntity))\r\n                     {\r\n                        IFCGridAxis originalGridAxis = originalEntity as IFCGridAxis;\r\n                        if (originalGridAxis != null)\r\n                           gridAxes.Add(originalGridAxis);\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n            CreateAutoTags(gridAxes, axisType);\r\n         }\r\n\r\n         return gridAxes;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates unique tag for unnamed axes\r\n      /// </summary>\r\n      /// <param name=\"gridAxes\"> The axes without tag.</param>\r\n      /// <param name=\"axisType\"> The axes type.</param>\r\n      /// <returns>True if success.</returns>\r\n      private bool CreateAutoTags(IList<IFCGridAxis> gridAxes, IFCAxesType axisType)\r\n      {\r\n         if (gridAxes == null || gridAxes.Count < 1)\r\n            return false;\r\n\r\n         IList<IFCGridAxis> unnamedAxes = gridAxes.Where(x => x.AutoTag).ToList();\r\n\r\n         if (unnamedAxes?.Count > 0)\r\n         {\r\n            // Define tag style\r\n            IFCAxesTagType tagType = IFCAxesTagType.Digit;\r\n            if (unnamedAxes.Count == gridAxes.Count)\r\n            { \r\n               tagType = (axisType == IFCAxesType.UAxes) ? IFCAxesTagType.Digit :\r\n                        ((axisType == IFCAxesType.VAxes) ? IFCAxesTagType.UpperCase : IFCAxesTagType.LowerCase);\r\n            }\r\n            else\r\n            {\r\n               string anyTag = gridAxes.First(x => (!x.AutoTag && !string.IsNullOrEmpty(x.AxisTag))).AxisTag;\r\n               tagType = char.IsDigit(anyTag[0]) ? IFCAxesTagType.Digit :\r\n                        (char.IsUpper(anyTag[0]) ? IFCAxesTagType.UpperCase : IFCAxesTagType.LowerCase);\r\n            }\r\n\r\n            // Sort axes\r\n            SortUnnamedAxes(ref unnamedAxes, axisType);\r\n\r\n            // Create auto tags\r\n            IDictionary<string, IFCGridAxis> projectAxis = IFCImportFile.TheFile.IFCProject.GridAxes;\r\n            foreach (IFCGridAxis axis in unnamedAxes)\r\n            {\r\n               axis.AxisTag = CreateAxisTagUnique(tagType);\r\n               projectAxis.Add(new KeyValuePair<string, IFCGridAxis>(axis.AxisTag, axis));\r\n            }\r\n         }\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Sort the list of axis without tag\r\n      /// </summary>\r\n      /// <param name=\"unnamedAxes\"> The axes without tag.</param>\r\n      /// <param name=\"axesType\"> The axes type.</param>\r\n      /// <returns>True if success.</returns>\r\n      private bool SortUnnamedAxes(ref IList<IFCGridAxis> unnamedAxes, IFCAxesType axesType)\r\n      {\r\n         if (unnamedAxes == null || unnamedAxes.Count < 2)\r\n            return false;\r\n\r\n         IDictionary<IFCGridAxis, double> axesDict = new Dictionary<IFCGridAxis, double>();\r\n         \r\n         Curve firstCurve = unnamedAxes.First()?.GetAxisCurve();\r\n         if (firstCurve is Arc)\r\n         {\r\n            // Sorting cretaria is acr radius\r\n            foreach (IFCGridAxis gridAxis in unnamedAxes)\r\n            {\r\n               Arc arc = gridAxis.GetAxisCurve() as Arc;\r\n               if (arc == null)\r\n                  break;\r\n\r\n               axesDict.Add(gridAxis, arc.Radius);\r\n            }\r\n         }\r\n         else if (firstCurve is Line)\r\n         {\r\n            // Create sorting line\r\n            Line sortDir = null;\r\n            \r\n            Line firstLine = (firstCurve as Line);\r\n            XYZ axisDirection = firstLine.Direction;\r\n\r\n            if (MathUtil.VectorsAreParallel(axisDirection, XYZ.BasisX))\r\n            {\r\n               sortDir = Line.CreateUnbound(firstLine.Origin, XYZ.BasisY);\r\n            }\r\n            else if (MathUtil.VectorsAreParallel(axisDirection, XYZ.BasisY))\r\n            {\r\n               sortDir = Line.CreateUnbound(firstLine.Origin, XYZ.BasisX);\r\n            }\r\n            else\r\n            {\r\n               // UAxes: bottom -> top\r\n               // VAxes: left -> right\r\n               sortDir = Line.CreateUnbound(firstLine.Origin, axisDirection);\r\n               bool reversed = false;\r\n               if ((axisDirection.X < 0.0 && axesType == IFCAxesType.UAxes) || axisDirection.Y > 0.0)\r\n                  reversed = true;\r\n               double rotationAngle = Math.PI / 2.0 * (reversed ? -1.0 : 1.0);\r\n\r\n               sortDir = sortDir?.CreateTransformed(Transform.CreateRotation(XYZ.BasisZ, rotationAngle)) as Line;\r\n            }\r\n\r\n            // Sorting cretaria is parameter of projection to sorting line\r\n            if (sortDir != null)\r\n               foreach (IFCGridAxis gridAxis in unnamedAxes)\r\n               {\r\n                  Line line = gridAxis.GetAxisCurve() as Line;\r\n                  if (line == null)\r\n                     break;\r\n\r\n                  axesDict.Add(gridAxis, sortDir.Project(line.GetEndPoint(0)).Parameter);\r\n               }\r\n         }\r\n         \r\n         // Sort the axes\r\n         IList<IFCGridAxis> orderedAxes = axesDict.OrderBy(x => x.Value).Select(x => x.Key).ToList();\r\n         if (orderedAxes.Count == unnamedAxes.Count)\r\n         {\r\n            unnamedAxes = orderedAxes;\r\n            return true;\r\n         }\r\n         else\r\n         {\r\n            Importer.TheLog.LogWarning(Id, \"Couldn't sort unnamed Grid axis.\", false);\r\n            return false;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Revit doesn't allow grid lines to have the same name.\r\n      /// This routine makes a unique variant.\r\n      /// UAxes: digits\r\n      /// VAxes: upper case letters\r\n      /// WAxes: lower case letters\r\n      /// </summary>\r\n      /// <param name=\"axesTagType\"> The axes tag type.</param>\r\n      /// <returns>The unique axis name.</returns>\r\n      private string CreateAxisTagUnique(IFCAxesTagType axesType)\r\n      {\r\n         int lap = 1;\r\n         int index = axesType == IFCAxesTagType.Digit ? 0 : (axesType == IFCAxesTagType.UpperCase ? 'A' : 'a');\r\n\r\n         IDictionary<string, IFCGridAxis> gridAxes = IFCImportFile.TheFile.IFCProject.GridAxes;\r\n         do\r\n         {\r\n            string uniqueAxisTag = String.Empty;\r\n\r\n            if (axesType == IFCAxesTagType.Digit)\r\n            {\r\n               uniqueAxisTag = (index + 1).ToString();\r\n            }\r\n            else \r\n            {\r\n               if (axesType == IFCAxesTagType.UpperCase)\r\n               {\r\n                  if (index == 'Z')\r\n                  {\r\n                     index = 'A';\r\n                     lap++;\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  if (index == 'z')\r\n                  {\r\n                     index = 'a';\r\n                     lap++;\r\n                  }\r\n               }\r\n\r\n               for (int ii = 0; ii < lap; ++ii)\r\n                  uniqueAxisTag += (char)index;\r\n            }\r\n\r\n            if (!gridAxes.ContainsKey(uniqueAxisTag))\r\n               return uniqueAxisTag;\r\n\r\n            index++;\r\n         }\r\n         while (index < 1000);\r\n\r\n         Importer.TheLog.LogWarning(Id, \"Couldn't set name for Grid axis, reverting to default.\", false);\r\n         return \"def\";\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add to a set of created element ids, based on elements created from the contained grid axes.\r\n      /// </summary>\r\n      /// <param name=\"createdElementIds\">The set of created element ids.</param>\r\n      public override void GetCreatedElementIds(ISet<ElementId> createdElementIds)\r\n      {\r\n         foreach (IFCGridAxis uaxis in UAxes)\r\n         {\r\n            ElementId gridId = uaxis.CreatedElementId;\r\n            if (gridId != ElementId.InvalidElementId)\r\n               createdElementIds.Add(gridId);\r\n         }\r\n\r\n         foreach (IFCGridAxis vaxis in VAxes)\r\n         {\r\n            ElementId gridId = vaxis.CreatedElementId;\r\n            if (gridId != ElementId.InvalidElementId)\r\n               createdElementIds.Add(gridId);\r\n         }\r\n\r\n         foreach (IFCGridAxis waxis in WAxes)\r\n         {\r\n            ElementId gridId = waxis.CreatedElementId;\r\n            if (gridId != ElementId.InvalidElementId)\r\n               createdElementIds.Add(gridId);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcGrid attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcGrid\">The IfcGrid handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcGrid)\r\n      {\r\n         base.Process(ifcGrid);\r\n\r\n         ElementId hybridElementId = ElementId.InvalidElementId;\r\n         Importer.TheHybridInfo?.HybridMap?.TryGetValue(Id.ToString(), out hybridElementId);\r\n         if (hybridElementId != null && hybridElementId != ElementId.InvalidElementId)\r\n         {\r\n            return;\r\n         }\r\n            \r\n         // We will be lenient and allow for missing U and V axes.\r\n         UAxes = ProcessOneAxis(ifcGrid, IFCAxesType.UAxes);\r\n         VAxes = ProcessOneAxis(ifcGrid, IFCAxesType.VAxes);\r\n         WAxes = ProcessOneAxis(ifcGrid, IFCAxesType.WAxes);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create either the U, V, or W grid lines.\r\n      /// </summary>\r\n      /// <param name=\"axes\">The list of axes in a particular direction.</param>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"lcs\">The local transform.</param>\r\n      private void CreateOneDirection(IList<IFCGridAxis> axes, Document doc, Transform lcs)\r\n      {\r\n         foreach (IFCGridAxis axis in axes)\r\n         {\r\n            if (axis == null)\r\n               continue;\r\n\r\n            try\r\n            {\r\n               axis.Create(doc, lcs);\r\n               ElementId createdElementId = axis.CreatedElementId;\r\n               if (createdElementId != ElementId.InvalidElementId && axis.AxisCurve != null && axis.AxisCurve.LayerAssignment != null)\r\n                  PresentationLayerAssignmentsForAxes[createdElementId] = axis.AxisCurve.LayerAssignment;\r\n            }\r\n            catch\r\n            {\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// As IfcGrid should have at most one associated IFCPresentationLayerAssignment.  Return it if it exists.\r\n      /// </summary>\r\n      /// <returns>The associated IFCPresentationLayerAssignment, or null.</returns>\r\n      protected IFCPresentationLayerAssignment GetTheFirstPresentationLayerAssignment()\r\n      {\r\n         if (ProductRepresentation == null)\r\n            return null;\r\n\r\n         IList<IFCRepresentation> representations = ProductRepresentation.Representations;\r\n         if (representations == null)\r\n            return null;\r\n\r\n         foreach (IFCRepresentation representation in representations)\r\n         {\r\n            IList<IFCRepresentationItem> representationItems = representation.RepresentationItems;\r\n            if (representationItems == null)\r\n               continue;\r\n\r\n            foreach (IFCRepresentationItem representationItem in representationItems)\r\n            {\r\n               // We will favor the layer assignment of the items over the representation itself.\r\n               if (representationItem.LayerAssignment != null)\r\n                  return representationItem.LayerAssignment;\r\n            }\r\n\r\n            if (representation.LayerAssignment != null)\r\n               return representation.LayerAssignment;\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Override PresentationLayerNames for the current axis.\r\n      /// </summary>\r\n      /// <param name=\"defaultLayerAssignmentName\">The grid's layer assignment name</param>\r\n      /// <param name=\"hasDefaultLayerAssignmentName\">True if defaultLayerAssignmentName isn't empty.</param>\r\n      private void SetCurrentPresentationLayerNames(string defaultLayerAssignmentName, bool hasDefaultLayerAssignmentName)\r\n      {\r\n         if (Importer.TheOptions.UsingHybridPropertySets())\r\n         {\r\n            return;\r\n         }\r\n\r\n         PresentationLayerNames.Clear();\r\n\r\n         // We will get the presentation layer names from either the grid lines or the grid, with\r\n         // grid lines getting the higher priority.\r\n         IFCPresentationLayerAssignment currentLayerAssigment;\r\n         if (PresentationLayerAssignmentsForAxes.TryGetValue(CreatedElementId, out currentLayerAssigment) &&\r\n             currentLayerAssigment != null &&\r\n             !string.IsNullOrWhiteSpace(currentLayerAssigment.Name))\r\n            PresentationLayerNames.Add(currentLayerAssigment.Name);\r\n         else if (hasDefaultLayerAssignmentName)\r\n            PresentationLayerNames.Add(defaultLayerAssignmentName);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Allow for override of IfcObjectDefinition shared parameter names.\r\n      /// </summary>\r\n      /// <param name=\"name\">The enum corresponding of the shared parameter.</param>\r\n      /// <param name=\"isType\">True if the shared parameter is a type parameter.</param>\r\n      /// <returns>The name appropriate for this IfcObjectDefinition.</returns>\r\n      public override string GetSharedParameterName(IFCSharedParameters name, bool isType)\r\n      {\r\n         if (!isType)\r\n         {\r\n            switch (name)\r\n            {\r\n               case IFCSharedParameters.IfcName:\r\n                  return \"IfcGrid Name\";\r\n               case IFCSharedParameters.IfcDescription:\r\n                  return \"IfcGrid Description\";\r\n            }\r\n         }\r\n\r\n         return base.GetSharedParameterName(name, isType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit elements based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      protected override void Create(Document doc)\r\n      {\r\n         string idAsString = Id.ToString();\r\n\r\n         ISet<ElementId> createdElementIds = new HashSet<ElementId>();\r\n         if (Importer.TheHybridInfo?.HybridMap?.TryGetValue(idAsString, out ElementId hybridElementId) ?? false)\r\n         {\r\n            CreatedElementId = hybridElementId;\r\n            createdElementIds.Add(hybridElementId);\r\n            string prefix = idAsString + \"_\";\r\n            foreach (KeyValuePair<string, ElementId> entry in Importer.TheHybridInfo.HybridMap)\r\n            {\r\n               // This is a workaround to import Grids via ATF but still consume the IFCParameters through the legacy import.\r\n               // The hybrid map can have multiple elementIds for 1 STEPId. For every other ElementId there will be an unique SubSTEPId.\r\n               // For example: STEPId = 173, SubSTEPId = 173_1, SubSTEPId = 173_2, etc.\r\n               if (entry.Key.StartsWith(prefix))\r\n               {\r\n                  createdElementIds.Add(entry.Value);\r\n               }\r\n            }\r\n         }\r\n         else\r\n         {\r\n            Transform lcs = ObjectLocation?.TotalTransformAfterOffset ?? Transform.Identity;\r\n\r\n            CreateOneDirection(UAxes, doc, lcs);\r\n            CreateOneDirection(VAxes, doc, lcs);\r\n            CreateOneDirection(WAxes, doc, lcs);\r\n\r\n            GetCreatedElementIds(createdElementIds);\r\n         }\r\n\r\n         // We want to get the presentation layer from the Grid representation, if any.\r\n         IFCPresentationLayerAssignment defaultLayerAssignment = GetTheFirstPresentationLayerAssignment();\r\n         string defaultLayerAssignmentName = (defaultLayerAssignment != null) ? defaultLayerAssignment.Name : null;\r\n         bool hasDefaultLayerAssignmentName = !string.IsNullOrWhiteSpace(defaultLayerAssignmentName);\r\n\r\n         foreach (ElementId createdElementId in createdElementIds)\r\n         {\r\n            CreatedElementId = createdElementId;\r\n\r\n            SetCurrentPresentationLayerNames(defaultLayerAssignmentName, hasDefaultLayerAssignmentName);\r\n            CreateParameters(doc);\r\n         }\r\n\r\n         CreatedElementId = ElementId.InvalidElementId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcGrid object.\r\n      /// </summary>\r\n      /// <param name=\"ifcGrid\">The IfcGrid handle.</param>\r\n      /// <returns>The IFCGrid object.</returns>\r\n      public static IFCGrid ProcessIFCGrid(IFCAnyHandle ifcGrid)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcGrid))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcGrid);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity grid;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcGrid.StepId, out grid))\r\n            grid = new IFCGrid(ifcGrid);\r\n         return (grid as IFCGrid);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCGridAxis.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcGridAxis, which corresponds to a Revit Grid element.\r\n   /// </summary>\r\n   /// <remarks>This will translate into a Revit Grid element, that will use the default\r\n   /// Grid type from the template file associated with this import.  As such, we do\r\n   /// not guarantee that the grid lines will look the same as in the original application,\r\n   /// but they should be in the right place and orientation.</remarks>\r\n   public class IFCGridAxis : IFCEntity\r\n   {\r\n      /// <summary>\r\n      /// The optional tag for this grid line.\r\n      /// </summary>\r\n      public string AxisTag { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The underlying curve for the grid line.\r\n      /// </summary>\r\n      public IFCCurve AxisCurve { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Whether or not the grid line orientation is the same as the underlying curve, or reversed.\r\n      /// This will determine the default position of the grid head.\r\n      /// </summary>\r\n      public bool SameSense { get; protected set; } = true;\r\n\r\n      /// <summary>\r\n      /// If this value is set, then this axis is actually a duplicate of an already created \r\n      /// axis.  Use the original axis instead.\r\n      /// </summary>\r\n      public long DuplicateAxisId { get; protected set; } = -1;\r\n\r\n      /// <summary>\r\n      /// If true - the unique tag must be created\r\n      /// </summary>\r\n      public bool AutoTag { get; protected set; } = false;\r\n\r\n      /// <summary>\r\n      /// Returns the main element id associated with this object.  Only valid after the call to Create(Document).\r\n      /// </summary>\r\n      public ElementId CreatedElementId { get; protected set; } = ElementId.InvalidElementId;\r\n\r\n      public IFCGrid ParentGrid { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Cache the value of the curve used for IfcGridPlacement.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// In practice, this is likely the same as that determined in Create(), and we may\r\n      /// want to optimize that in the future.\r\n      /// </remarks>\r\n      public Curve CurveForGridPlacement { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCGridAxis()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCGridAxis from the IfcGridAxis handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcGridAxis\">The IfcGridAxis handle.</param>\r\n      protected IFCGridAxis(IFCAnyHandle ifcGridAxis)\r\n      {\r\n         Process(ifcGridAxis);\r\n      }\r\n\r\n      private bool AreLinesEqual(Line line1, Line line2)\r\n      {\r\n         if (!line1.IsBound || !line2.IsBound)\r\n         {\r\n            // Two unbound lines are equal if they are going in the same direction and the origin\r\n            // of one lies on the other one.\r\n            return line1.Direction.IsAlmostEqualTo(line2.Direction) &&\r\n               MathUtil.IsAlmostZero(line1.Project(line2.Origin).Distance);\r\n         }\r\n\r\n         for (int ii = 0; ii < 2; ii++)\r\n         {\r\n            if (line1.GetEndPoint(0).IsAlmostEqualTo(line2.GetEndPoint(ii)) &&\r\n                line1.GetEndPoint(1).IsAlmostEqualTo(line2.GetEndPoint(1 - ii)))\r\n               return true;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      private bool AreArcsEqual(Arc arc1, Arc arc2)\r\n      {\r\n         if (!arc1.Center.IsAlmostEqualTo(arc2.Center))\r\n            return false;\r\n\r\n         double dot = arc1.Normal.DotProduct(arc2.Normal);\r\n         if (!MathUtil.IsAlmostEqual(Math.Abs(dot), 1.0))\r\n            return false;\r\n\r\n         int otherIdx = (dot > 0.0) ? 0 : 1;\r\n         if (arc1.GetEndPoint(0).IsAlmostEqualTo(arc2.GetEndPoint(otherIdx)))\r\n            return true;\r\n\r\n         return false;\r\n      }\r\n\r\n      private long FindMatchingGrid(IList<Curve> otherCurves, long id, ref IList<Curve> curves, ref int curveCount)\r\n      {\r\n         if (curves == null)\r\n         {\r\n            curves = AxisCurve.GetCurves();\r\n            curveCount = curves.Count;\r\n         }\r\n\r\n         // Check that the base curves are the same type.\r\n         int otherCurveCount = otherCurves.Count;\r\n\r\n         if (curveCount != otherCurveCount)\r\n            return -1;\r\n\r\n         bool sameCurves = true;\r\n         for (int ii = 0; (ii < curveCount) && sameCurves; ii++)\r\n         {\r\n            if ((curves[ii] is Line) && (otherCurves[ii] is Line))\r\n               sameCurves = AreLinesEqual(curves[ii] as Line, otherCurves[ii] as Line);\r\n            else if ((curves[ii] is Arc) && (otherCurves[ii] is Arc))\r\n               sameCurves = AreArcsEqual(curves[ii] as Arc, otherCurves[ii] as Arc);\r\n            else\r\n            {\r\n               // No supported.\r\n               sameCurves = false;\r\n            }\r\n         }\r\n\r\n         return sameCurves ? id : -1;\r\n      }\r\n\r\n      private long FindMatchingGrid(IFCGridAxis gridAxis, ref IList<Curve> curves, ref int curveCount)\r\n      {\r\n         IList<Curve> otherCurves = gridAxis.AxisCurve.GetCurves();\r\n         long id = gridAxis.Id;\r\n         return FindMatchingGrid(otherCurves, id, ref curves, ref curveCount);\r\n      }\r\n\r\n      // Revit doesn't allow grid lines to have the same name.  This routine makes a unique variant.\r\n      private string MakeAxisTagUnique(string axisTag)\r\n      {\r\n         // Don't set the name.\r\n         if (string.IsNullOrWhiteSpace(axisTag))\r\n            return null;\r\n\r\n         int counter = 2;\r\n\r\n         IDictionary<string, IFCGridAxis> gridAxes = IFCImportFile.TheFile.IFCProject.GridAxes;\r\n         do\r\n         {\r\n            string uniqueAxisTag = axisTag + \"-\" + counter;\r\n            if (!gridAxes.ContainsKey(uniqueAxisTag))\r\n               return uniqueAxisTag;\r\n            counter++;\r\n         }\r\n         while (counter < 1000);\r\n\r\n         // Give up; use default name.\r\n         return null;\r\n      }\r\n\r\n      // This routine should be unnecessary if we called MakeAxisTagUnique correctly, but better to be safe.\r\n      private void SetAxisTagUnique(Grid grid, string axisTag)\r\n      {\r\n         if (grid != null && axisTag != null)\r\n         {\r\n            int counter = 1;\r\n            do\r\n            {\r\n               try\r\n               {\r\n                  grid.Name = (counter == 1) ? axisTag : axisTag + \"-\" + counter;\r\n                  break;\r\n               }\r\n               catch\r\n               {\r\n                  counter++;\r\n               }\r\n            }\r\n            while (counter < 1000);\r\n\r\n            if (counter >= 1000)\r\n               Importer.TheLog.LogWarning(Id, \"Couldn't set name: '\" + axisTag + \"' for Grid, reverting to default.\", false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcGridAxis attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcGridAxis\">The IfcGridAxis handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcGridAxis)\r\n      {\r\n         base.Process(ifcGridAxis);\r\n\r\n         if (Importer.TheHybridInfo?.HybridMap?.TryGetValue(Id.ToString(), out ElementId hybridElementId) ?? false)\r\n         {\r\n            CreatedElementId = hybridElementId;\r\n            return;\r\n         }\r\n            \r\n         IFCAnyHandle axisCurve = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcGridAxis, \"AxisCurve\", true);\r\n         AxisCurve = IFCCurve.ProcessIFCCurve(axisCurve);\r\n\r\n         bool found = false;\r\n         bool sameSense = IFCImportHandleUtil.GetRequiredBooleanAttribute(ifcGridAxis, \"SameSense\", out found);\r\n         SameSense = found ? sameSense : true;\r\n\r\n         AxisTag = IFCImportHandleUtil.GetOptionalStringAttribute(ifcGridAxis, \"AxisTag\", null);\r\n         if (String.IsNullOrEmpty(AxisTag))\r\n         {\r\n            AutoTag = true;\r\n            return;\r\n         }\r\n\r\n         // We are going to check if this grid axis is a vertical duplicate of any existing axis.\r\n         // If so, we will throw an exception so that we don't create duplicate grids.\r\n         // We will only initialize these values if we actually intend to use them below.\r\n         IList<Curve> curves = null;\r\n         int curveCount = 0;\r\n\r\n         ElementId gridId = ElementId.InvalidElementId;\r\n         if (Importer.TheCache.GridNameToElementMap.TryGetValue(AxisTag, out gridId))\r\n         {\r\n            Grid grid = IFCImportFile.TheFile.Document.GetElement(gridId) as Grid;\r\n            if (grid != null)\r\n            {\r\n               IList<Curve> otherCurves = new List<Curve>();\r\n               Curve gridCurve = grid.Curve;\r\n               if (gridCurve != null)\r\n               {\r\n                  otherCurves.Add(gridCurve);\r\n                  long matchingGridId = FindMatchingGrid(otherCurves, grid.Id.Value, ref curves, ref curveCount);\r\n\r\n                  if (matchingGridId != -1)\r\n                  {\r\n                     Importer.TheCache.UseGrid(grid);\r\n                     CreatedElementId = grid.Id;\r\n                     return;\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         IDictionary<string, IFCGridAxis> gridAxes = IFCImportFile.TheFile.IFCProject.GridAxes;\r\n         IFCGridAxis gridAxis = null;\r\n         if (gridAxes.TryGetValue(AxisTag, out gridAxis))\r\n         {\r\n            long matchingGridId = FindMatchingGrid(gridAxis, ref curves, ref curveCount);\r\n            if (matchingGridId != -1)\r\n            {\r\n               DuplicateAxisId = matchingGridId;\r\n               return;\r\n            }\r\n            else\r\n            {\r\n               // Revit doesn't allow grid lines to have the same name.  If it isn't a duplicate, rename it.\r\n               // Note that this will mean that we may miss some \"duplicate\" grid lines because of the renaming.\r\n               AxisTag = MakeAxisTagUnique(AxisTag);\r\n            }\r\n         }\r\n\r\n         gridAxes.Add(new KeyValuePair<string, IFCGridAxis>(AxisTag, this));\r\n      }\r\n\r\n      private Grid CreateGridFromCurve(Document doc, Arc curve)\r\n      {\r\n         return Grid.Create(doc, SameSense ? curve : curve.CreateReversed() as Arc);\r\n      }\r\n\r\n      private Grid CreateGridFromCurve(Document doc, Line curve)\r\n      {\r\n         return Grid.Create(doc, SameSense ? curve : curve.CreateReversed() as Line);\r\n      }\r\n\r\n      private Grid CreateArcGridAxis(Document doc, Arc curve)\r\n      {\r\n         if (doc == null || curve == null)\r\n            return null;\r\n\r\n         Arc curveToUse = null;\r\n         if (!curve.IsBound)\r\n         {\r\n            // Create almost-closed grid line.\r\n            curveToUse = curve.Clone() as Arc;\r\n            curveToUse.MakeBound(0, 2 * Math.PI * (359.0 / 360.0));\r\n         }\r\n         else\r\n         {\r\n            curveToUse = curve;\r\n         }\r\n\r\n         return CreateGridFromCurve(doc, curveToUse);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the curve in world coordinates use for grid placements.\r\n      /// </summary>\r\n      /// <returns>The transformed curve, or null if there isn't one.</returns>\r\n      /// <remarks>This expected IfcGridAxis to have only one associated curve, but\r\n      /// will warn and return the first curve if there is more than one.</remarks>\r\n      public Curve GetAxisCurveForGridPlacement()\r\n      {\r\n         if (CurveForGridPlacement != null)\r\n            return CurveForGridPlacement;\r\n\r\n         if (!IsValidForCreation)\r\n            return null;\r\n\r\n         Curve axisCurve = GetAxisCurve();\r\n         if (axisCurve == null)\r\n            return null;\r\n\r\n         if (ParentGrid != null && ParentGrid.ObjectLocation != null)\r\n         {\r\n            Transform lcs = ParentGrid.ObjectLocation.TotalTransformAfterOffset;\r\n            axisCurve = axisCurve.CreateTransformed(lcs);\r\n         }\r\n\r\n         CurveForGridPlacement = axisCurve;\r\n         return axisCurve;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the first curve associated to this IfcGridAxis.\r\n      /// </summary>\r\n      /// <returns>The first curve, or null if there isn't one.</returns>\r\n      /// <remarks>This expected IfcGridAxis to have only one associated curve, but\r\n      /// will warn and return the first curve if there is more than one.</remarks>\r\n      public Curve GetAxisCurve()\r\n      {\r\n         if (!IsValidForCreation)\r\n            return null;\r\n\r\n         IsValidForCreation = false;\r\n\r\n         if (AxisCurve == null)\r\n         {\r\n            Importer.TheLog.LogError(Id, \"Couldn't find axis curve for grid line, ignoring.\", false);\r\n            return null;\r\n         }\r\n\r\n         IList<Curve> curves = AxisCurve.GetCurves();\r\n         int numCurves = curves.Count;\r\n         if (numCurves == 0)\r\n         {\r\n            Importer.TheLog.LogError(AxisCurve.Id, \"Couldn't find axis curve for grid line, ignoring.\", false);\r\n            return null;\r\n         }\r\n\r\n         if (numCurves > 1)\r\n            Importer.TheLog.LogError(AxisCurve.Id, \"Found multiple curve segments for grid line, ignoring all but first.\", false);\r\n\r\n         IsValidForCreation = true;\r\n         return curves[0];\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit elements based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"lcs\">The local coordinate system transform.</param>\r\n      public void Create(Document doc, Transform lcs)\r\n      {\r\n         if (!IsValidForCreation)\r\n         {\r\n            return;\r\n         }\r\n\r\n         ElementId hybridElementId = ElementId.InvalidElementId;\r\n         Importer.TheHybridInfo?.HybridMap?.TryGetValue(Id.ToString(), out hybridElementId);\r\n         if (hybridElementId != null && hybridElementId != ElementId.InvalidElementId)\r\n         {\r\n            return;\r\n         }\r\n\r\n         // These are hardwired values to ensure that the Grid is visible in the\r\n         // current view, in feet.  Note that there is an assumption that building stories\r\n         // would not be placed too close to one another; if they are, and they use different\r\n         // grid structures, then the plan views may have overlapping grid lines.  This seems\r\n         // more likely in theory than practice.\r\n         const double bottomOffset = 1.0 / 12.0;    // 1\" =   2.54 cm\r\n         const double topOffset = 4.0;              // 4' = 121.92 cm\r\n\r\n         double originalZ = (lcs != null) ? lcs.Origin.Z : 0.0;\r\n\r\n         if (CreatedElementId != ElementId.InvalidElementId)\r\n         {\r\n            Grid existingGrid = doc.GetElement(CreatedElementId) as Grid;\r\n            if (existingGrid != null)\r\n            {\r\n               Outline outline = existingGrid.GetExtents();\r\n               existingGrid.SetVerticalExtents(Math.Min(originalZ - bottomOffset, outline.MinimumPoint.Z),\r\n                   Math.Max(originalZ + topOffset, outline.MaximumPoint.Z));\r\n            }\r\n            return;\r\n         }\r\n\r\n         Curve baseCurve = GetAxisCurve();\r\n         if (baseCurve == null)\r\n         {\r\n            return;\r\n         }\r\n\r\n         Grid grid = null;\r\n\r\n         Curve curve = baseCurve.CreateTransformed(lcs);\r\n         if (curve == null)\r\n         {\r\n            Importer.TheLog.LogError(AxisCurve.Id, \"Couldn't create transformed axis curve for grid line, ignoring.\", false);\r\n            IsValidForCreation = false;\r\n            return;\r\n         }\r\n\r\n         if (!curve.IsBound)\r\n         {\r\n            curve.MakeBound(-100, 100);\r\n            Importer.TheLog.LogWarning(AxisCurve.Id, \"Creating arbitrary bounds for unbounded grid line.\", false);\r\n         }\r\n\r\n         // Grid.create can throw, so catch the exception if it does.\r\n         try\r\n         {\r\n            if (curve is Arc)\r\n            {\r\n               // This will potentially make a small modification in the curve if it is unbounded,\r\n               // as Revit doesn't allow unbounded grid lines.\r\n               grid = CreateArcGridAxis(doc, curve as Arc);\r\n            }\r\n            else if (curve is Line)\r\n            {\r\n               grid = CreateGridFromCurve(doc, curve as Line);\r\n            }\r\n            else\r\n            {\r\n               Importer.TheLog.LogError(AxisCurve.Id, \"Couldn't create grid line from curve of type \" + curve.GetType().ToString() + \", expected line or arc.\", false);\r\n               IsValidForCreation = false;\r\n               return;\r\n            }\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            Importer.TheLog.LogError(AxisCurve.Id, ex.Message, false);\r\n            IsValidForCreation = false;\r\n            return;\r\n         }\r\n\r\n         if (grid != null)\r\n         {\r\n            SetAxisTagUnique(grid, AxisTag);\r\n\r\n            // We will try to \"grid match\" as much as possible to avoid duplicate grid lines.  As such,\r\n            // we want the remaining grid lines to extend to the current level.\r\n            // A limitation here is that if a grid axis in the IFC file were visible on Level 1 and Level 3\r\n            // but not Level 2, this will make it visibile on Level 2 also.  As above, this seems\r\n            // more likely in theory than practice.\r\n            grid.SetVerticalExtents(originalZ - bottomOffset, originalZ + topOffset);\r\n\r\n            CreatedElementId = grid.Id;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcGridAxis object.\r\n      /// </summary>\r\n      /// <param name=\"ifcGridAxis\">The IfcGridAxis handle.</param>\r\n      /// <returns>The IFCGridAxis object.</returns>\r\n      public static IFCGridAxis ProcessIFCGridAxis(IFCAnyHandle ifcGridAxis)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcGridAxis))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcGridAxis);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity gridAxis;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcGridAxis.StepId, out gridAxis))\r\n         {\r\n            try\r\n            {\r\n               gridAxis = new IFCGridAxis(ifcGridAxis);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n               Importer.TheLog.LogError(ifcGridAxis.StepId, ex.Message, false);\r\n               return null;\r\n            }\r\n         }\r\n\r\n         return (gridAxis as IFCGridAxis);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCGroup.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Utility;\r\nusing Revit.IFC.Import.Enums;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcGroup.\r\n   /// </summary>\r\n   public class IFCGroup : IFCObject\r\n   {\r\n      protected ICollection<IFCObjectDefinition> m_IFCRelatedObjects = null;\r\n\r\n      protected string m_RelatedObjectType = null;\r\n\r\n      /// <summary>\r\n      /// The related object type.\r\n      /// </summary>\r\n      public string RelatedObjectType\r\n      {\r\n         get { return m_RelatedObjectType; }\r\n         protected set { m_RelatedObjectType = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The objects in the group.\r\n      /// </summary>\r\n      public ICollection<IFCObjectDefinition> RelatedObjects\r\n      {\r\n         get\r\n         {\r\n            if (m_IFCRelatedObjects == null)\r\n               m_IFCRelatedObjects = new HashSet<IFCObjectDefinition>();\r\n            return m_IFCRelatedObjects;\r\n         }\r\n         protected set { m_IFCRelatedObjects = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcGroup attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcGroup\">The IfcGroup handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcGroup)\r\n      {\r\n         base.Process(ifcGroup);\r\n\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4))\r\n         {\r\n            ICollection<IFCAnyHandle> isGroupedByList =\r\n               IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcGroup, \"IsGroupedBy\");\r\n            foreach (IFCAnyHandle isGroupedBy in isGroupedByList)\r\n               ProcessIFCRelAssignsToGroup(isGroupedBy);\r\n         }\r\n         else\r\n         {\r\n            IFCAnyHandle isGroupedByHnd = IFCAnyHandleUtil.GetInstanceAttribute(ifcGroup, \"IsGroupedBy\");\r\n            ProcessIFCRelAssignsToGroup(isGroupedByHnd);\r\n         }\r\n      }\r\n\r\n      protected IFCGroup()\r\n      {\r\n      }\r\n\r\n      protected IFCGroup(IFCAnyHandle group)\r\n      {\r\n         Process(group);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcRelAssignsToGroup.\r\n      /// </summary>\r\n      /// <param name=\"isGroupedBy\">The IfcRelAssignsToGroup handle.</param>\r\n      void ProcessIFCRelAssignsToGroup(IFCAnyHandle isGroupedBy)\r\n      {\r\n         RelatedObjectType = ProcessIFCRelation.ProcessRelatedObjectType(isGroupedBy);\r\n         RelatedObjects = ProcessIFCRelation.ProcessRelatedObjects(this, isGroupedBy);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcGroup handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcGroup\">The IfcGroup handle.</param>\r\n      /// <returns>The IFCGroup object.</returns>\r\n      public static IFCGroup ProcessIFCGroup(IFCAnyHandle ifcGroup)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcGroup))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcGroup);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity cachedIFCGroup;\r\n         IFCImportFile.TheFile.EntityMap.TryGetValue(ifcGroup.StepId, out cachedIFCGroup);\r\n         if (cachedIFCGroup != null)\r\n            return cachedIFCGroup as IFCGroup;\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcGroup, IFCEntityType.IfcZone))\r\n         {\r\n            IFCZone ifcZone = IFCZone.ProcessIFCZone(ifcGroup);\r\n            if (ifcZone != null)\r\n               IFCImportFile.TheFile.OtherEntitiesToCreate.Add(ifcZone);\r\n            return ifcZone;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcGroup, IFCEntityType.IfcSystem))\r\n         {\r\n            IFCSystem ifcSystem = IFCSystem.ProcessIFCSystem(ifcGroup);\r\n            if (ifcSystem != null)\r\n               IFCImportFile.TheFile.OtherEntitiesToCreate.Add(ifcSystem);\r\n            return ifcSystem;\r\n         }\r\n\r\n         return new IFCGroup(ifcGroup);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Indicates whether created DirectShape container should also duplicate geometry (or contain references to geometry), or not.\r\n      /// In most cases, this should be true, but there is previous behavior where this is governed by an API option.\r\n      /// Default is true.\r\n      /// </summary>\r\n      /// <returns>True if DirectShape should create geometry, False otherwise.</returns>\r\n      public virtual bool ContainerDuplicatesGeometry() { return true; }\r\n\r\n      /// <summary>\r\n      /// Filters contained Elements that should be considered when constructing geometry for container DirectShape.\r\n      /// Defaults to just IFCProduct.\r\n      /// </summary>\r\n      /// <param name=\"entity\">IFCEntity for consideration as part of geometry for DIrectShape.</param>\r\n      /// <returns>True if IFCEntity should be part of geometry, False otherwise.</returns>\r\n      public virtual bool ContainerFilteredEntity(IFCEntity entity)\r\n      {\r\n         return entity is IFCProduct;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Indicates whether this IfcGroup can result in a container DirectShape.\r\n      /// </summary>\r\n      /// <returns>True if this IfcGroup can result in a DirectShape, False otherwise.</returns>\r\n      public virtual bool CanContainRelatedEntities => false;\r\n\r\n      /// <summary>\r\n      /// Create a DirectShape container for an IFC Group if the specific IFC Group requests it.\r\n      /// CanContainRelatedEntitiess() -- Whether or not the IfcGroup may have a DirectShape that contains Related entities\r\n      /// ContainerDuplicatesGeometry() -- Indicates that not only should a DirectShape be created, it should also have geometry.\r\n      ///    This should be true in most cases, but can be governed by a specific API option (e.g., with IFCZones).\r\n      /// ContainerFilteredEntity() -- This allows the IFCGroup to filter certain IFCEntities (e.g., only IFCZones consider IFCSpaces).\r\n      /// </summary>\r\n      /// <param name=\"doc\">Document containing new DirectShape.</param>\r\n      protected override void Create(Document doc)\r\n      {\r\n         // If there is an entry for this STEP ID in the Hybrid Map, then don't do any processing (it's already been processed).\r\n         if (Importer.TheHybridInfo?.HybridMap?.TryGetValue(Id.ToString(), out ElementId containerElementId) ?? false)\r\n         {\r\n            Importer.TheLog.LogComment(Id, $\"Found DirectShape Element in Hybrid Import for IfcGroup:  {containerElementId}\", false);\r\n            CreatedElementId = containerElementId;\r\n         }\r\n         else if (CanContainRelatedEntities)\r\n         {\r\n            // Otherwise, create a Container (Hybrid fallback) or Duplicate Geometry (not Hybrid but Legacy).\r\n            if (Importer.TheOptions.HybridImportOptions != null)\r\n            {\r\n               Importer.TheLog.LogComment(Id, $\"Did not find DirectShape for Hybrid Import.  Creating Container\", false);\r\n               CreatedElementId = Importer.TheHybridInfo?.CreateContainer(this) ?? ElementId.InvalidElementId;\r\n            }\r\n            else\r\n            {\r\n               IList<GeometryObject> geometryObjects = new List<GeometryObject>();\r\n\r\n               // As strange as it sounds, current behavior is for some IFCGroups to have no geometry.\r\n               // If this is the case, do not create geometry.\r\n               if (ContainerDuplicatesGeometry())\r\n               {\r\n                  foreach (IFCObjectDefinition relatedObject in RelatedObjects)\r\n                  {\r\n                     // In some cases, only certain IFC entities are considered candidates for geometry\r\n                     // cloning.\r\n                     //\r\n                     if (ContainerFilteredEntity(relatedObject))\r\n                     {\r\n                        IFCProduct relatedProduct = relatedObject as IFCProduct;\r\n                        if (relatedProduct != null)\r\n                        {\r\n                           // Clone the underlying Geometry\r\n                           //\r\n                           IList<IFCSolidInfo> solids = IFCElement.CloneElementGeometry(doc, relatedProduct, this, false);\r\n                           if (solids != null)\r\n                           {\r\n                              foreach (IFCSolidInfo solid in solids)\r\n                              {\r\n                                 geometryObjects.Add(solid.GeometryObject);\r\n                              }\r\n                           }\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n\r\n               DirectShape directShape = IFCElementUtil.CreateElement(doc, GetCategoryId(doc), GlobalId, geometryObjects, Id, EntityType);\r\n               if (directShape != null)\r\n               {\r\n                  CreatedElementId = directShape.Id;\r\n                  CreatedGeometry = geometryObjects;\r\n               }\r\n            }\r\n         }\r\n\r\n         base.Create(doc);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCHalfSpaceSolid.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCHalfSpaceSolid : IFCRepresentationItem, IIFCBooleanOperand\r\n   {\r\n      IFCSurface m_BaseSurface = null;\r\n\r\n      // for IfcPolygonalHalfSpaceSolid only.\r\n      IFCCurve m_BaseBoundingCurve = null;\r\n      Transform m_BaseBoundingCurveTransform = null;\r\n\r\n      bool m_AgreementFlag = true;\r\n\r\n      public IFCSurface BaseSurface\r\n      {\r\n         get { return m_BaseSurface; }\r\n         protected set { m_BaseSurface = value; }\r\n      }\r\n\r\n      public IFCCurve BaseBoundingCurve\r\n      {\r\n         get { return m_BaseBoundingCurve; }\r\n         protected set { m_BaseBoundingCurve = value; }\r\n      }\r\n\r\n      public Transform BaseBoundingCurveTransform\r\n      {\r\n         get { return m_BaseBoundingCurveTransform; }\r\n         protected set { m_BaseBoundingCurveTransform = value; }\r\n      }\r\n\r\n      public bool AgreementFlag\r\n      {\r\n         get { return m_AgreementFlag; }\r\n         protected set { m_AgreementFlag = value; }\r\n      }\r\n\r\n      protected IFCHalfSpaceSolid()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle solid)\r\n      {\r\n         base.Process(solid);\r\n\r\n         bool found = false;\r\n         bool agreementFlag = IFCImportHandleUtil.GetRequiredBooleanAttribute(solid, \"AgreementFlag\", out found);\r\n         if (found)\r\n            AgreementFlag = agreementFlag;\r\n\r\n         IFCAnyHandle baseSurface = IFCImportHandleUtil.GetRequiredInstanceAttribute(solid, \"BaseSurface\", true);\r\n         BaseSurface = IFCSurface.ProcessIFCSurface(baseSurface);\r\n         if (!(BaseSurface is IFCPlane))\r\n            Importer.TheLog.LogUnhandledSubTypeError(baseSurface, IFCEntityType.IfcSurface, true);\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(solid, IFCEntityType.IfcPolygonalBoundedHalfSpace))\r\n         {\r\n            IFCAnyHandle position = IFCImportHandleUtil.GetRequiredInstanceAttribute(solid, \"Position\", false);\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(position))\r\n               BaseBoundingCurveTransform = IFCLocation.ProcessIFCAxis2Placement(position);\r\n            else\r\n               BaseBoundingCurveTransform = Transform.Identity;\r\n\r\n            IFCAnyHandle boundaryCurveHandle = IFCImportHandleUtil.GetRequiredInstanceAttribute(solid, \"PolygonalBoundary\", true);\r\n            BaseBoundingCurve = IFCCurve.ProcessIFCCurve(boundaryCurveHandle);\r\n            if (BaseBoundingCurve == null || BaseBoundingCurve.GetTheCurveLoop() == null)\r\n               Importer.TheLog.LogError(Id, \"IfcPolygonalBoundedHalfSpace has an invalid boundary, ignoring.\", true);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for an IfcHalfSpaceSolid.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The shape edit scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      /// <returns>A list containing one geometry for the IfcHalfSpaceSolid.</returns>\r\n      protected virtual IList<GeometryObject> CreateGeometryInternal(\r\n            IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid)\r\n      {\r\n         IFCPlane ifcPlane = BaseSurface as IFCPlane;\r\n         Plane plane = ifcPlane.Plane;\r\n         XYZ origin = plane.Origin;\r\n         XYZ xVec = plane.XVec;\r\n         XYZ yVec = plane.YVec;\r\n\r\n         // Set some huge boundaries for now.\r\n         const double largeCoordinateValue = 100000;\r\n         XYZ[] corners = new XYZ[4] {\r\n            scaledLcs.OfPoint((xVec * -largeCoordinateValue) + (yVec * -largeCoordinateValue) + origin),\r\n            scaledLcs.OfPoint((xVec * largeCoordinateValue) + (yVec * -largeCoordinateValue) + origin),\r\n            scaledLcs.OfPoint((xVec * largeCoordinateValue) + (yVec * largeCoordinateValue) + origin),\r\n            scaledLcs.OfPoint((xVec * -largeCoordinateValue) + (yVec * largeCoordinateValue) + origin)\r\n            };\r\n\r\n         IList<CurveLoop> loops = new List<CurveLoop>();\r\n         CurveLoop loop = new CurveLoop();\r\n         for (int ii = 0; ii < 4; ii++)\r\n         {\r\n            if (AgreementFlag)\r\n               loop.Append(Line.CreateBound(corners[(5 - ii) % 4], corners[(4 - ii) % 4]));\r\n            else\r\n               loop.Append(Line.CreateBound(corners[ii], corners[(ii + 1) % 4]));\r\n         }\r\n         loops.Add(loop);\r\n\r\n         XYZ normal = scaledLcs.OfVector(AgreementFlag ? -plane.Normal : plane.Normal);\r\n         SolidOptions solidOptions = new SolidOptions(GetMaterialElementId(shapeEditScope), shapeEditScope.GraphicsStyleId);\r\n         Solid baseSolid = GeometryCreationUtilities.CreateExtrusionGeometry(loops, normal, largeCoordinateValue, solidOptions);\r\n\r\n         if (BaseBoundingCurve != null)\r\n         {\r\n            CurveLoop polygonalBoundary = BaseBoundingCurve.GetTheCurveLoop();\r\n\r\n            Transform scaledTotalTransform = scaledLcs.Multiply(BaseBoundingCurveTransform);\r\n\r\n            // Make sure this bounding polygon extends below base of half-space soild.\r\n            Transform moveBaseTransform = Transform.Identity;\r\n            moveBaseTransform.Origin = new XYZ(0, 0, -largeCoordinateValue);\r\n\r\n            scaledTotalTransform = scaledTotalTransform.Multiply(moveBaseTransform);\r\n\r\n            CurveLoop transformedPolygonalBoundary = IFCGeometryUtil.CreateTransformed(polygonalBoundary, Id, scaledTotalTransform);\r\n            IList<CurveLoop> boundingLoops = new List<CurveLoop>();\r\n            boundingLoops.Add(transformedPolygonalBoundary);\r\n\r\n            Solid boundingSolid = GeometryCreationUtilities.CreateExtrusionGeometry(boundingLoops, scaledTotalTransform.BasisZ, 2.0 * largeCoordinateValue,\r\n               solidOptions);\r\n            baseSolid = IFCGeometryUtil.ExecuteSafeBooleanOperation(Id, BaseBoundingCurve.Id, baseSolid, boundingSolid, BooleanOperationsType.Intersect, null);\r\n         }\r\n\r\n         IList<GeometryObject> returnList = new List<GeometryObject>();\r\n         returnList.Add(baseSolid);\r\n         return returnList;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The shape edit scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      /// <returns>The created geometries.</returns>\r\n      public IList<GeometryObject> CreateGeometry(\r\n            IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid)\r\n      {\r\n         return CreateGeometryInternal(shapeEditScope, scaledLcs, guid);\r\n      }\r\n\r\n      /// <summary>\r\n      /// In case of a Boolean operation failure, provide a recommended direction to shift the geometry in for a second attempt.\r\n      /// </summary>\r\n      /// <param name=\"lcs\">The local transform for this entity.</param>\r\n      /// <returns>An XYZ representing a unit direction vector, or null if no direction is suggested.</returns>\r\n      /// <remarks>If the 2nd attempt fails, a third attempt will be done with a shift in the opposite direction.</remarks>\r\n      public XYZ GetSuggestedShiftDirection(Transform lcs)\r\n      {\r\n         IFCPlane ifcPlane = BaseSurface as IFCPlane;\r\n         Plane plane = (ifcPlane != null) ? ifcPlane.Plane : null;\r\n         XYZ untransformedNorm = (plane != null) ? plane.Normal : null;\r\n         return (lcs == null) ? untransformedNorm : lcs.OfVector(untransformedNorm);\r\n      }\r\n\r\n      protected IFCHalfSpaceSolid(IFCAnyHandle solid)\r\n      {\r\n         Process(solid);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCHalfSpaceSolid object from a handle of type IfcHalfSpaceSolid.\r\n      /// </summary>\r\n      /// <param name=\"ifcHalfSpaceSolid\">The IFC handle.</param>\r\n      /// <returns>The IFCHalfSpaceSolid object.</returns>\r\n      public static IFCHalfSpaceSolid ProcessIFCHalfSpaceSolid(IFCAnyHandle ifcHalfSpaceSolid)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcHalfSpaceSolid))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcHalfSpaceSolid);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity halfSpaceSolid;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcHalfSpaceSolid.StepId, out halfSpaceSolid))\r\n            halfSpaceSolid = new IFCHalfSpaceSolid(ifcHalfSpaceSolid);\r\n\r\n         return (halfSpaceSolid as IFCHalfSpaceSolid);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCImportFile.cs",
    "content": "﻿\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.IO;\r\nusing Autodesk.Revit.ApplicationServices;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\nusing Revit.IFC.Import.Properties;\r\nusing ICSharpCode.SharpZipLib.Zip;\r\nusing ICSharpCode.SharpZipLib.Core;\r\nusing System.Xml;\r\nusing IFCImportOptions = Revit.IFC.Import.Utility.IFCImportOptions;\r\nusing System.Reflection;\r\nusing static Revit.IFC.Import.Utility.IFCImportOptions;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IFC file to be imported.\r\n   /// </summary>\r\n   public class IFCImportFile\r\n   {\r\n      /// <summary>\r\n      /// The transaction for the import.\r\n      /// </summary>\r\n      private Transaction ReferenceTransaction { get; set; } = null;\r\n\r\n      \r\n      /// <summary>\r\n      /// An element that keeps track of the created DirectShapeTypes, for geometry sharing.\r\n      /// </summary>\r\n      public DirectShapeLibrary ShapeLibrary { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The import options associated with the file, generally set via UI.\r\n      /// </summary>\r\n      public IFCImportOptions Options { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The document that will contain the elements created from the IFC import operation.\r\n      /// </summary>\r\n      public Document Document { get; protected set; } = null;\r\n\r\n      private IFCFile IFCFile { get; set; } = null;\r\n\r\n      private static void StoreIFCCreatorInfo(IFCFile ifcFile, ProjectInfo projectInfo)\r\n      {\r\n         if (ifcFile == null || projectInfo == null)\r\n            return;\r\n\r\n         IList<IFCAnyHandle> applications = ifcFile.GetInstances(IFCAnyHandleUtil.GetIFCEntityTypeName(IFCEntityType.IfcApplication), false);\r\n         IFCAnyHandle application = applications.FirstOrDefault();\r\n         if (application != null)\r\n         {\r\n            var appFullName = IFCAnyHandleUtil.GetStringAttribute(application, \"ApplicationFullName\");\r\n            if (!string.IsNullOrEmpty(appFullName))\r\n            {\r\n               var applicationNameId = new ElementId(BuiltInParameter.IFC_APPLICATION_NAME);\r\n               ExporterIFCUtils.AddValueString(projectInfo, applicationNameId, appFullName);\r\n            }\r\n\r\n            var appVersion = IFCAnyHandleUtil.GetStringAttribute(application, \"Version\");\r\n            if (!string.IsNullOrEmpty(appVersion))\r\n            {\r\n               var applicationVersionId = new ElementId(BuiltInParameter.IFC_APPLICATION_VERSION);\r\n               ExporterIFCUtils.AddValueString(projectInfo, applicationVersionId, appVersion);\r\n            }\r\n         }\r\n\r\n         IList<IFCAnyHandle> organisations = ifcFile.GetInstances(IFCAnyHandleUtil.GetIFCEntityTypeName(IFCEntityType.IfcOrganization), false);\r\n         IFCAnyHandle organisation = organisations.LastOrDefault();\r\n         if (organisation != null)\r\n         {\r\n            var orgName = IFCAnyHandleUtil.GetStringAttribute(organisation, \"Name\");\r\n            if (!string.IsNullOrEmpty(orgName))\r\n            {\r\n               var organizationId = new ElementId(BuiltInParameter.IFC_ORGANIZATION);\r\n               ExporterIFCUtils.AddValueString(projectInfo, organizationId, orgName);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Do a Parametric import operation.\r\n      /// </summary>\r\n      /// <param name=\"importer\">The internal ImporterIFC class that contains necessary information for the import.</param>\r\n      /// <remarks>This is a thin wrapper to the native code that still handles Open IFC.  This should be eventually obsoleted.</remarks>\r\n      public static void Import(ImporterIFC importer)\r\n      {\r\n         IFCFile ifcFile = null;\r\n\r\n         try\r\n         {\r\n            IFCSchemaVersion schemaVersion = IFCSchemaVersion.IFC2x3;\r\n            ifcFile = CreateIFCFile(importer.FullFileName, out schemaVersion);\r\n\r\n            IFCFileReadOptions readOptions = new IFCFileReadOptions();\r\n            readOptions.FileName = importer.FullFileName;\r\n\r\n            ifcFile.Read(readOptions);\r\n            importer.SetFile(ifcFile);\r\n\r\n            //If there is more than one project, we will be ignoring all but the first one.\r\n            IList<IFCAnyHandle> projects = ifcFile.GetInstances(IFCAnyHandleUtil.GetIFCEntityTypeName(IFCEntityType.IfcProject), false);\r\n            if (projects.Count == 0)\r\n               throw new InvalidOperationException(\"Failed to import IFC to Revit.\");\r\n\r\n            IFCAnyHandle project = projects[0];\r\n\r\n            importer.ProcessIFCProject(project);\r\n\r\n            if (schemaVersion >= IFCSchemaVersion.IFC4)\r\n            {\r\n               FailureMessage fm = new FailureMessage(BuiltInFailures.ImportFailures.IFCPartialSchemaSupport);\r\n               importer.Document.PostFailure(fm);\r\n            }\r\n\r\n            StoreIFCCreatorInfo(ifcFile, importer.Document.ProjectInformation);\r\n         }\r\n         finally\r\n         {\r\n            ifcFile?.Close();\r\n            ifcFile = null;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The file.\r\n      /// </summary>\r\n      public static IFCImportFile TheFile { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// Override the schema file name, incluing the path.\r\n      /// </summary>\r\n      public static string OverrideSchemaFileName { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// A map of all of the already created IFC entities.  This is necessary to prevent duplication and redundant work.\r\n      /// </summary>\r\n      public IDictionary<long, IFCEntity> EntityMap { get; } = new Dictionary<long, IFCEntity>();\r\n\r\n      /// <summary>\r\n      /// A map of all of the already created transforms for IFCLocation.  This is necessary to prevent duplication and redundant work.\r\n      /// </summary>\r\n      public IDictionary<int, Transform> TransformMap { get; } = new Dictionary<int, Transform>();\r\n\r\n      /// <summary>\r\n      /// A map of all of the already created points for IFCPoint sub-types.  This is necessary to prevent duplication and redundant work.\r\n      /// </summary>\r\n      public IDictionary<int, XYZ> XYZMap { get; } = new Dictionary<int, XYZ>();\r\n\r\n      /// <summary>\r\n      /// A map of all of the already created vectors for IFCPoint sub-types.  \r\n      /// This is necessary to prevent duplication and redundant work.\r\n      /// Any value in this map should be identical to XYZMap[key].Normalize().\r\n      /// </summary>\r\n      public IDictionary<int, XYZ> NormalizedXYZMap { get; } = new Dictionary<int, XYZ>();\r\n\r\n      /// <summary>\r\n      /// The project in the file.\r\n      /// </summary>\r\n      public IFCProject IFCProject { get; set; }\r\n\r\n      /// <summary>\r\n      /// The vertex tolerance for this import.  Convenience function.\r\n      /// </summary>\r\n      public double VertexTolerance { get; set; } = 0.0;\r\n\r\n      /// <summary>\r\n      /// The short curve tolerance for this import.  Convenience function.\r\n      /// </summary>\r\n      public double ShortCurveTolerance { get; set; } = 0.0;\r\n\r\n      /// <summary>\r\n      /// A list of entities not contained in IFCProject to create.  This could include, e.g., zones.\r\n      /// </summary>\r\n      public ICollection<IFCObjectDefinition> OtherEntitiesToCreate { get; } = new HashSet<IFCObjectDefinition>();\r\n\r\n      /// <summary>\r\n      /// The schema version of the IFC file.\r\n      /// </summary>\r\n      private IFCSchemaVersion SchemaVersion { get; set; } = IFCSchemaVersion.IFC2x3; // default\r\n\r\n      /// <summary>\r\n      /// Constructs IFCImportFile object using transaction that may already be started.\r\n      /// </summary>\r\n      /// <param name=\"transaction\">Transaction for IFCImportFile.</param>\r\n      protected IFCImportFile (Transaction transaction = null)\r\n      {\r\n         ReferenceTransaction = transaction;\r\n      }\r\n      \r\n      /// <summary>\r\n      /// Checks if the schema version of this file is at least the specified version.\r\n      /// </summary>\r\n      /// <param name=\"version\">The version to checif the schema version of this file is at least the specified version. against.</param>\r\n      /// <returns>True if the schema version of this file is at least the specified version, false otherwise.</returns>\r\n      /// <remarks>IFC4Obsolete is the \"base\" IFC4 version, and should be the version used\r\n      /// to generally check for IFC4 files, unless a feature is known to be in a newer version.</remarks>\r\n      public bool SchemaVersionAtLeast(IFCSchemaVersion version)\r\n      {\r\n         return SchemaVersion >= version;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Downgrade the current version of IFC4 to an obsolete version, if it is older.\r\n      /// </summary>\r\n      /// <param name=\"version\">The version to downgrade to.</param>\r\n      /// <remarks>This is intended to allow us to \"detect\" obsolete versions of\r\n      /// IFC4 the first time we try to get an attribute that doesn't exist.</remarks>\r\n      public void DowngradeIFC4SchemaTo(IFCSchemaVersion version)\r\n      {\r\n         if (version != IFCSchemaVersion.IFC4Obsolete && version != IFCSchemaVersion.IFC4Add1Obsolete)\r\n            throw new ArgumentException(\"Version can only be IFC4Obsolete or IFC4Add1Obsolete.\");\r\n\r\n         if (!SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete))\r\n            throw new InvalidOperationException(\"Can only downgrade IFC4 files.\");\r\n\r\n         if (version < SchemaVersion)\r\n            SchemaVersion = version;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if an exception is based on an undefined attribute.\r\n      /// </summary>\r\n      /// <param name=\"ex\">The exception.</param>\r\n      /// <returns>True if it is.</returns>\r\n      static public bool HasUndefinedAttribute(Exception ex)\r\n      {\r\n         return (ex != null && ex.Message == \"IFC: EDM Toolkit Error: Attribute undefined.\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Units in the IFC project.\r\n      /// </summary>\r\n      public IFCUnits IFCUnits { get; } = new IFCUnits();\r\n\r\n      public static string TheFileName { get; protected set; }\r\n      public static int TheBrepCounter { get; set; }\r\n\r\n      /// <summary>\r\n      /// Read in the IFC file specified by ifcFilePath, and report any errors.\r\n      /// </summary>\r\n      /// <param name=\"ifcFilePath\">The IFC file name.</param>\r\n      /// <returns>True if the file read was successful, false otherwise.</returns>\r\n      private void ProcessFile(string ifcFilePath)\r\n      {\r\n         IFCFileReadOptions readOptions = new IFCFileReadOptions();\r\n         readOptions.FileName = ifcFilePath;\r\n\r\n         int numErrors = 0;\r\n         int numWarnings = 0;\r\n\r\n         try\r\n         {\r\n            Importer.TheCache.StatusBar.Set(String.Format(Resources.IFCReadingFile, TheFileName));\r\n            IFCFile.Read(readOptions, out numErrors, out numWarnings);\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            Importer.TheLog.LogError(-1, \"There was an error reading the IFC file: \" + ex.Message + \".  Aborting import.\", false);\r\n            throw;\r\n         }\r\n\r\n         if (numErrors > 0 || numWarnings > 0)\r\n         {\r\n            if (numErrors > 0)\r\n            {\r\n               if (numWarnings > 0)\r\n                  Importer.TheLog.LogError(-1, \"There were \" + numErrors + \" errors and \" + numWarnings + \" reading the IFC file.  Please look at the log information at the end of this report for more information.\", false);\r\n               else\r\n                  Importer.TheLog.LogError(-1, \"There were \" + numErrors + \" errors reading the IFC file.  Please look at the log information at the end of this report for more information.\", false);\r\n            }\r\n            else\r\n            {\r\n               Importer.TheLog.LogWarning(-1, \"There were \" + numWarnings + \" warnings reading the IFC file.  Please look at the log information at the end of this report for more information.\", false);\r\n            }\r\n         }\r\n      }\r\n\r\n      private bool PostProcessReference()\r\n      {\r\n         // Go through our list of created items and post-process any handles not processed in the first pass.\r\n         int count = 0;\r\n         ISet<IFCEntity> alreadyProcessed = new HashSet<IFCEntity>();\r\n         // Processing an entity may result in a new entity being processed for the first time.  We'll have to post-process it also.\r\n         // Post-processing should be fast, and do nothing if called multiple times, so we won't bother \r\n\r\n         int oldTotal = 0;\r\n         int newTotal = 0;\r\n         do\r\n         {\r\n            oldTotal = IFCImportFile.TheFile.EntityMap.Count;\r\n            List<IFCEntity> currentValues = IFCImportFile.TheFile.EntityMap.Values.ToList();\r\n            foreach (IFCEntity entity in currentValues)\r\n            {\r\n               if (entity == null || alreadyProcessed.Contains(entity))\r\n                  continue;\r\n\r\n               entity.PostProcess();\r\n               count++;\r\n               Importer.TheLog.ReportPostProcessedEntity(count, oldTotal);\r\n               alreadyProcessed.Add(entity);\r\n            }\r\n\r\n            newTotal = IFCImportFile.TheFile.EntityMap.Values.Count;\r\n         } while (oldTotal != newTotal);\r\n\r\n         return true;\r\n      }\r\n\r\n      private void PreProcessStyledItems()\r\n      {\r\n         // As an optimization, we are going to avoid the \"StyledByItem\" INVERSE attribute, which is expensive.\r\n         // As such, we will find all IFCStyledItems in the file.\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC2x2))\r\n         {\r\n            IList<IFCAnyHandle> styledItems = IFCImportFile.TheFile.GetInstances(IFCEntityType.IfcStyledItem, true);\r\n            foreach (IFCAnyHandle styledItem in styledItems)\r\n            {\r\n               IFCAnyHandle itemHnd = IFCAnyHandleUtil.GetInstanceAttribute(styledItem, \"Item\");\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(itemHnd))\r\n                  continue;\r\n\r\n               ICollection<IFCAnyHandle> itemStyledItemHnds;\r\n               if (!Importer.TheCache.StyledByItems.TryGetValue(itemHnd, out itemStyledItemHnds))\r\n               {\r\n                  itemStyledItemHnds = new List<IFCAnyHandle>();\r\n                  Importer.TheCache.StyledByItems[itemHnd] = itemStyledItemHnds;\r\n               }\r\n               itemStyledItemHnds.Add(styledItem);\r\n            }\r\n         }\r\n      }\r\n\r\n      private void PreProcessPresentationLayers()\r\n      {\r\n         // As an optimization, we are going to avoid the \"LayerAssignment(s)\" INVERSE attribute, which is expensive.\r\n         // As such, we will find all IFCPresentationLayerAssignments in the file.\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC2x2))\r\n         {\r\n            IList<IFCAnyHandle> layerAssignments = IFCImportFile.TheFile.GetInstances(IFCEntityType.IfcPresentationLayerAssignment, true);\r\n            foreach (IFCAnyHandle layerAssignmentHnd in layerAssignments)\r\n            {\r\n               IList<IFCAnyHandle> assignedItems = \r\n                  IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(layerAssignmentHnd, \"AssignedItems\");\r\n               if (assignedItems == null)\r\n                  continue;\r\n\r\n               foreach (IFCAnyHandle assignedItem in assignedItems)\r\n               {\r\n                  if (IFCAnyHandleUtil.IsNullOrHasNoValue(assignedItem))\r\n                     continue;\r\n\r\n                  IFCAnyHandle existingLayerAssignmentHnd;\r\n                  if (Importer.TheCache.LayerAssignment.TryGetValue(assignedItem, out existingLayerAssignmentHnd))\r\n                  {\r\n                     if (existingLayerAssignmentHnd.Id != layerAssignmentHnd.Id)\r\n                        Importer.TheLog.LogWarning(assignedItem.Id, \"Multiple inconsistent layer assignment items found for this item; using first one.\", false);\r\n                     continue;\r\n                  }\r\n                  Importer.TheCache.LayerAssignment[assignedItem] = layerAssignmentHnd;\r\n               }\r\n            }\r\n         }\r\n      }\r\n      \r\n      private void PreProcessInverseCaches()\r\n      {\r\n         PreProcessStyledItems();\r\n         PreProcessPresentationLayers();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Top-level function that processes an IFC file for reference.\r\n      /// </summary>\r\n      /// <returns>True if the process is successful, false otherwise.</returns>\r\n      private bool ProcessReference()\r\n      {\r\n         if (TransactionStatus.Started != Importer.StartReferenceIFCTransaction(ReferenceTransaction))\r\n         {\r\n            Importer.TheLog.LogError(-1, \"Unable to start Transaction for ReferenceIFC Import\", true);\r\n            return false;\r\n         }\r\n\r\n         //If there is more than one project, we will be ignoring all but the first one.\r\n         IList<IFCAnyHandle> projects = IFCImportFile.TheFile.GetInstances(IFCEntityType.IfcProject, false);\r\n         if (projects.Count == 0)\r\n         {\r\n            Importer.TheLog.LogError(-1, \"There were no IfcProjects found in the file.  Aborting import.\", false);\r\n            return false;\r\n         }\r\n\r\n         PreProcessInverseCaches();\r\n\r\n         // This is where the main work happens.\r\n         IFCProject.ProcessIFCProject(projects[0]);\r\n\r\n         return PostProcessReference();\r\n      }\r\n\r\n      private void Process(string ifcFilePath, IFCImportOptions options, Document doc)\r\n      {\r\n         TheFileName = ifcFilePath;\r\n         TheBrepCounter = 0;\r\n\r\n         try\r\n         {\r\n            IFCSchemaVersion schemaVersion;\r\n            IFCFile = CreateIFCFile(ifcFilePath, out schemaVersion);\r\n            SchemaVersion = schemaVersion;\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            Importer.TheLog.LogError(-1, \"There was an error reading the IFC file: \" + ex.Message + \".  Aborting import.\", false);\r\n            throw;\r\n         }\r\n\r\n         Options = options;\r\n         \r\n         // The DirectShapeLibrary must be reset to potentially remove stale pointers from the last use.\r\n         Document = doc;\r\n         ShapeLibrary = DirectShapeLibrary.GetDirectShapeLibrary(doc);\r\n         ShapeLibrary.Reset();\r\n\r\n         ProcessFile(ifcFilePath);\r\n\r\n         if (ReferenceTransaction == null)\r\n         {\r\n            ReferenceTransaction = new Transaction(doc);\r\n         }\r\n\r\n         bool success = true;\r\n         switch (options.Intent)\r\n         {\r\n            case IFCImportIntent.Reference:\r\n               success = ProcessReference();\r\n               break;\r\n         }\r\n\r\n         if (success)\r\n            StoreIFCCreatorInfo(IFCFile, doc.ProjectInformation);\r\n         else\r\n         {\r\n            string errorMsg = \"Error whlie processing reference\";\r\n            Importer.TheLog.LogError(-1, \"There was an error reading the IFC file: \" + errorMsg + \".  Aborting import.\", false);\r\n            throw new InvalidOperationException(errorMsg);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCImportFile from a file on the disk.\r\n      /// </summary>\r\n      /// <param name=\"ifcFilePath\">The path of the file.</param>\r\n      /// <param name=\"options\">The IFC import options.</param>\r\n      /// <param name=\"doc\">The optional document argument.  If importing into Revit, not supplying a document may reduce functionality later.</param>\r\n      /// <param name=\"transaction\">Transaction, if one has already been started.</param>\r\n      /// <returns>The IFCImportFile.</returns>\r\n      public static IFCImportFile Create(string ifcFilePath, IFCImportOptions options, Document doc, Transaction transaction = null)\r\n      {\r\n         TheFile = new IFCImportFile(transaction);\r\n         try\r\n         { \r\n            TheFile.Process(ifcFilePath, options, doc);\r\n\r\n            // Store the original levels in the template file for Open IFC.  On export, we will delete these levels if we created any.\r\n            // Note that we always have to preserve one level, regardless of what the ActiveView is.\r\n            if (doc != null)\r\n            {\r\n               // At this point, we have a Document that may contain Levels already.\r\n               // The first unconstrained one should be used when \"creating\" the IFCBuildingStorey later.\r\n               // If there is none, create a new Level corresponding to the first constrained one.\r\n               IFCBuildingStorey.ExistingUnConstrainedLevelToReuse = ElementId.InvalidElementId;\r\n               IFCBuildingStorey.ExistingConstrainedLevel = ElementId.InvalidElementId;\r\n\r\n               // First check ActiveView Level.  If set, then use it either as constrained or unconstrained Level.\r\n               View activeView = doc.ActiveView;\r\n               if (activeView != null)\r\n               {\r\n                  Level genLevel = activeView.GenLevel;\r\n\r\n                  if (genLevel != null)\r\n                  {\r\n                     if (IFCBuildingStorey.IsConstrainedToScopeBox(genLevel))\r\n                     {\r\n                        Importer.TheCache.ConstrainedLevels.Add(genLevel.Id);\r\n                        IFCBuildingStorey.ExistingConstrainedLevel = genLevel.Id;\r\n                     }\r\n                     else\r\n                     {\r\n                        IFCBuildingStorey.ExistingUnConstrainedLevelToReuse = genLevel.Id;\r\n                     }\r\n                  }\r\n               }\r\n\r\n               // For Link IFC, we will delete any unused levels at the end.  Instead, we want to try to reuse them.\r\n               // The for loop does a little unnecessary work if deleteLevelsNow, but the performance implications are very small.\r\n               bool deleteLevelsNow = (Importer.TheOptions.Action != IFCImportAction.Link);\r\n\r\n               FilteredElementCollector levelCollector = new FilteredElementCollector(doc);\r\n               ICollection<Element> levels = levelCollector.OfClass(typeof(Level)).ToElements();\r\n               ICollection<ElementId> levelIdsToDelete = new HashSet<ElementId>();\r\n               foreach (Element element in levels)\r\n               {\r\n                  Level level = element as Level;\r\n                  if (level == null)\r\n                     continue;\r\n\r\n                  bool constrainedToScopeBox = IFCBuildingStorey.IsConstrainedToScopeBox(level);\r\n                  if (constrainedToScopeBox)\r\n                  {\r\n                     Importer.TheCache.ConstrainedLevels.Add(level.Id);\r\n                  }\r\n\r\n                  if (IFCBuildingStorey.ExistingUnConstrainedLevelToReuse == ElementId.InvalidElementId)\r\n                  {\r\n                     if (!constrainedToScopeBox)\r\n                     {\r\n                        IFCBuildingStorey.ExistingUnConstrainedLevelToReuse = level.Id;\r\n                        if (IFCBuildingStorey.ExistingConstrainedLevel != ElementId.InvalidElementId)\r\n                        {\r\n                           levelIdsToDelete.Add(IFCBuildingStorey.ExistingConstrainedLevel);\r\n                           IFCBuildingStorey.ExistingConstrainedLevel = ElementId.InvalidElementId;\r\n                        }\r\n                     }\r\n                     else if (IFCBuildingStorey.ExistingConstrainedLevel == ElementId.InvalidElementId)\r\n                     {\r\n                        IFCBuildingStorey.ExistingConstrainedLevel = level.Id;\r\n                     }\r\n                  }\r\n                  else if ((level.Id != IFCBuildingStorey.ExistingUnConstrainedLevelToReuse) && (level.Id != IFCBuildingStorey.ExistingConstrainedLevel))\r\n                  {\r\n                     levelIdsToDelete.Add(level.Id);\r\n                  }\r\n               }\r\n\r\n               if (deleteLevelsNow)\r\n                  doc.Delete(levelIdsToDelete);\r\n\r\n               // Collect material names, to avoid reusing.\r\n               FilteredElementCollector materialCollector = new FilteredElementCollector(doc);\r\n               ICollection<Element> materials = materialCollector.OfClass(typeof(Material)).ToElements();\r\n               foreach (Element materialAsElem in materials)\r\n               {\r\n                  Material material = materialAsElem as Material;\r\n                  IFCMaterialInfo info = IFCMaterialInfo.Create(material.Color, material.Transparency, material.Shininess,\r\n                      material.Smoothness, material.Id);\r\n                  Importer.TheCache.CreatedMaterials.Add(material.Name, info);\r\n               }\r\n            }\r\n         }\r\n         catch\r\n         {\r\n            // Close up the log file, set TheFile to null.\r\n            TheFile.Close();\r\n            throw;\r\n         }\r\n\r\n         return TheFile;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Close files at end of import.\r\n      /// </summary>\r\n      public void Close()\r\n      {\r\n         if (IFCFile != null)\r\n            IFCFile.Close();\r\n         TheFile = null;\r\n      }\r\n\r\n      private static void UpdateDocumentFileMetrics(Document doc, string ifcFileName)\r\n      {\r\n         FileInfo infoIFC = null;\r\n         try\r\n         {\r\n            infoIFC = new FileInfo(ifcFileName);\r\n         }\r\n         catch\r\n         {\r\n            return;\r\n         }\r\n\r\n         ProjectInfo projInfo = doc.ProjectInformation;\r\n         if (projInfo == null)\r\n            return;\r\n\r\n         long ifcFileLength = infoIFC.Length;\r\n         Int64 ticks = infoIFC.LastWriteTimeUtc.Ticks;\r\n\r\n         // If we find our parameters, but they are the wrong type, return.\r\n         Parameter originalFileName = projInfo.LookupParameter(\"Original IFC File Name\");\r\n         if (originalFileName != null && originalFileName.StorageType != StorageType.String)\r\n            return;\r\n\r\n         Parameter originalFileSizeParam = projInfo.LookupParameter(\"Original IFC File Size\");\r\n         if (originalFileSizeParam != null && originalFileSizeParam.StorageType != StorageType.String)\r\n            return;\r\n\r\n         Parameter originalTimeStampParam = projInfo.LookupParameter(\"Revit File Last Updated\");\r\n         if (originalTimeStampParam != null && originalTimeStampParam.StorageType != StorageType.String)\r\n            return;\r\n\r\n         Parameter originalImporterVersion = projInfo.LookupParameter(\"Revit Importer Version\");\r\n         if (originalImporterVersion != null && originalImporterVersion.StorageType != StorageType.String)\r\n            return;\r\n\r\n         Parameter originalImportMethod = projInfo.LookupParameter(IFCImportOptions.ImportMethodParameter);\r\n         if (originalImportMethod != null && originalImportMethod.StorageType != StorageType.String)\r\n            return;\r\n         \r\n         Category category = IFCPropertySet.GetCategoryForParameterIfValid(projInfo, -1);\r\n\r\n         using (ParameterSetter setter = new ParameterSetter())\r\n         {\r\n            ParametersToSet parametersToSet = setter.ParametersToSet;\r\n\r\n            if (originalFileName != null)\r\n               parametersToSet.AddStringParameter(originalFileName, ifcFileName);\r\n            else\r\n               parametersToSet.AddStringParameter(doc, projInfo, category, TheFile.IFCProject, \"Original IFC File Name\", ifcFileName, -1);\r\n\r\n            if (originalFileSizeParam != null)\r\n               parametersToSet.AddStringParameter(originalFileSizeParam, ifcFileLength.ToString());\r\n            else\r\n               parametersToSet.AddStringParameter(doc, projInfo, category, TheFile.IFCProject, \"Original IFC File Size\", ifcFileLength.ToString(), -1);\r\n\r\n            if (originalTimeStampParam != null)\r\n               parametersToSet.AddStringParameter(originalTimeStampParam, ticks.ToString());\r\n            else\r\n               parametersToSet.AddStringParameter(doc, projInfo, category, TheFile.IFCProject, \"Revit File Last Updated\", ticks.ToString(), -1);\r\n\r\n            if (originalImporterVersion != null)\r\n               parametersToSet.AddStringParameter(originalImporterVersion, IFCImportOptions.ImporterVersion);\r\n            else\r\n               parametersToSet.AddStringParameter(doc, projInfo, category, TheFile.IFCProject, \"Revit Importer Version\", IFCImportOptions.ImporterVersion, -1);\r\n\r\n            string legacyOrHybrid = IFCHybridImportOptions.ToString(Importer.TheOptions.HybridImportOptions);\r\n            if (originalImportMethod != null)\r\n               parametersToSet.AddStringParameter(originalImportMethod, legacyOrHybrid);\r\n            else\r\n               parametersToSet.AddStringParameter(doc, projInfo, category, TheFile.IFCProject, ImportMethodParameter, legacyOrHybrid, -1);\r\n         }\r\n      }\r\n\r\n      private bool DontDeleteSpecialElement(ElementId elementId)\r\n      {\r\n         // Look for special element ids that should not be deleted.\r\n\r\n         // Don't delete the last level in the document, even if it wasn't used.  This would happen when\r\n         // updating a document with 1 level with a new document with 0 levels.\r\n         if ((elementId == IFCBuildingStorey.ExistingUnConstrainedLevelToReuse) || Importer.TheCache.ConstrainedLevels.Contains(elementId))\r\n            return true;\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Perform end of import/link cleanup.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"fileName\">The full path of the original IFC file.</param>\r\n      public void EndImport(Document doc, string fileName)\r\n      {\r\n         // Remove an unupdated Elements as a result of a reload operation.\r\n         try\r\n         {\r\n            // We are working around a limitation in deleting unused DirectShapeTypes.\r\n            IList<ElementId> otherElementsToDelete = new List<ElementId>();\r\n            IList<ElementId> typesToDelete = new List<ElementId>();\r\n\r\n            foreach (ElementId elementId in Importer.TheCache.GUIDToElementMap.Values)\r\n            {\r\n               if (Importer.TheHybridInfo?.HybridElements.Contains(elementId) ?? false)\r\n                  continue;\r\n\r\n               if (DontDeleteSpecialElement(elementId))\r\n                  continue;\r\n\r\n               Element element = doc.GetElement(elementId);\r\n               if (element == null)\r\n                  continue;\r\n\r\n               if (element is DirectShapeType)\r\n                  typesToDelete.Add(elementId);\r\n               else\r\n                  otherElementsToDelete.Add(elementId);\r\n            }\r\n\r\n            foreach (ElementId elementId in Importer.TheCache.GridNameToElementMap.Values)\r\n            {\r\n               if (Importer.TheHybridInfo?.HybridElements.Contains(elementId) ?? false)\r\n                  continue;\r\n\r\n               Element element = doc.GetElement(elementId);\r\n               if (element == null)\r\n                  continue;\r\n\r\n               otherElementsToDelete.Add(elementId);\r\n            }\r\n\r\n            // Some Elements may have been identified as deletion candidates during Hybrid IFC Import.\r\n            if ((Importer.TheHybridInfo?.ElementsToDelete.Count ?? 0) > 0)\r\n            {\r\n               foreach (ElementId elementId in Importer.TheHybridInfo.ElementsToDelete)\r\n               {\r\n                  if (elementId != ElementId.InvalidElementId)\r\n                  {\r\n                     otherElementsToDelete.Add(elementId);\r\n                  }\r\n               }\r\n            }\r\n\r\n            // Don't expect this to fail.\r\n            try\r\n            {\r\n               if (otherElementsToDelete.Count > 0)\r\n                  doc.Delete(otherElementsToDelete);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n               Importer.TheLog.LogError(-1, ex.Message, false);\r\n            }\r\n\r\n            // Delete the temporary element we used for validation purposes.\r\n            IFCGeometryUtil.DeleteSolidValidator();\r\n\r\n            // This might fail.\r\n            if (typesToDelete.Count > 0)\r\n               doc.Delete(typesToDelete);\r\n\r\n            UpdateDocumentFileMetrics(doc, fileName);\r\n         }\r\n         catch // (Exception ex)\r\n         {\r\n            // Catch, but don't report, since this is an internal limitation in the API.\r\n            //TheLog.LogError(-1, ex.Message, false);\r\n         }\r\n\r\n         if (ReferenceTransaction != null)\r\n            ReferenceTransaction.Commit();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Generates the name of the intermediate Revit file to create for IFC links.\r\n      /// </summary>\r\n      /// <param name=\"baseFileName\">The full path of the base IFC file.</param>\r\n      /// <returns>The full path of the intermediate Revit file.</returns>\r\n      public static string GenerateRevitFileName(string baseFileName)\r\n      {\r\n         return baseFileName + \".RVT\";\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the name of the intermediate Revit file to create for IFC links.\r\n      /// </summary>\r\n      /// <param name=\"baseFileName\">The full path of the base IFC file.</param>\r\n      /// <returns>The full path of the intermediate Revit file.</returns>\r\n      public static string GetRevitFileName(string baseFileName)\r\n      {\r\n         if (Importer.TheOptions.RevitLinkFileName != null)\r\n            return Importer.TheOptions.RevitLinkFileName;\r\n         return GenerateRevitFileName(baseFileName);\r\n      }\r\n\r\n      /// <summary>\r\n      /// This rotates the Link such that North in the Link is North in the Revit Project.  May differ from True North.\r\n      /// </summary>\r\n      /// <param name=\"document\">The document into which Link is placed, and will define North.</param>\r\n      /// <param name=\"instance\">The Link instance to place in the Document.</param>\r\n      private static void RotateInstanceToProjectNorth(Document document, RevitLinkInstance instance)\r\n      {\r\n         if (document == null || instance == null)\r\n            return;\r\n\r\n         ProjectLocation projectLocation = document.ActiveProjectLocation;\r\n         if (projectLocation == null)\r\n            return;\r\n\r\n         Transform projectNorthRotation = projectLocation.GetTransform();\r\n         if (projectNorthRotation == null)\r\n            return;\r\n\r\n         XYZ rotatedNorth = projectNorthRotation.OfVector(XYZ.BasisY);\r\n         double angle = Math.Atan2(-rotatedNorth.X, rotatedNorth.Y);\r\n         if (MathUtil.IsAlmostZero(angle))\r\n            return;\r\n\r\n         Line zAxis = Line.CreateBound(XYZ.Zero, XYZ.BasisZ);\r\n         Location instanceLocation = instance.Location;\r\n         if (!instanceLocation.Rotate(zAxis, angle))\r\n         {\r\n            Importer.TheLog.LogError(-1, \"Couldn't rotate link to project north.  This may result in an incorrect orientation.\", false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// This rotates the Link such that North will be defined as it is in the Link, not as what is defined in the Host Document.\r\n      /// </summary>\r\n      /// <param name=\"linkInstance\">The Link that defines the coordinate system used to find True North.</param>\r\n      private static void RotateInstanceToLinkNorth(RevitLinkInstance linkInstance)\r\n      {\r\n         if (linkInstance == null)\r\n            return;\r\n\r\n         Document linkDocument = linkInstance.GetLinkDocument();\r\n         ProjectLocation linkLocation = linkDocument?.ActiveProjectLocation;\r\n         ProjectPosition linkPosition = linkLocation?.GetProjectPosition(XYZ.Zero);\r\n         if (linkPosition == null)\r\n            return;\r\n\r\n         double linkAngle = linkPosition.Angle;\r\n\r\n         if (MathUtil.IsAlmostZero(linkAngle))\r\n            return;\r\n\r\n         Line zAxis = Line.CreateBound(XYZ.Zero, XYZ.BasisZ);\r\n         Location instanceLocation = linkInstance.Location;\r\n         if (!instanceLocation.Rotate(zAxis, linkAngle))\r\n         {\r\n            Importer.TheLog.LogError(-1, \"Couldn't rotate link according to its north.  This may result in an incorrect orientation.\", false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Moves the Link to the corresponding place within the Host Document.\r\n      /// </summary>\r\n      /// <param name=\"originalDocument\">The Document into which Link instance is placed.</param>\r\n      /// <param name=\"linkInstance\">The Link Instance ussed to position the Link.</param>\r\n      /// <param name=\"position\">This defines where to place the Link.</param>\r\n      private static void MoveInstanceToAlignPoint(Document originalDocument, RevitLinkInstance linkInstance, IFCLinkPosition position)\r\n      {\r\n         if ((originalDocument == null) || (linkInstance == null))\r\n            return;\r\n\r\n         if ((position != IFCLinkPosition.ProjectBasePoint) && (position != IFCLinkPosition.SurveyPoint))\r\n            return;\r\n\r\n         Document linkedDocument = linkInstance.GetLinkDocument();\r\n         if (linkedDocument == null)\r\n            return;\r\n\r\n         XYZ originalPoint = (position == IFCLinkPosition.ProjectBasePoint) ? BasePoint.GetProjectBasePoint(originalDocument)?.Position : BasePoint.GetSurveyPoint(originalDocument)?.Position;\r\n         XYZ linkedPoint = BasePoint.GetProjectBasePoint(linkedDocument)?.Position;\r\n\r\n         if ((originalPoint == null) || (linkedPoint == null))\r\n            return;\r\n\r\n         XYZ translationVector = originalPoint - linkedPoint;\r\n         if (translationVector.IsZeroLength())\r\n            return;\r\n\r\n         Location instanceLocation = linkInstance.Location;\r\n         if (!instanceLocation.Move(translationVector))\r\n         {\r\n            Importer.TheLog.LogError(-1, $\"Couldn't move link to position defined by {position}.  This may result in an incorrect position.\", false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Link in the new created document to parent document.\r\n      /// </summary>\r\n      /// <param name=\"originalIFCFileName\">The full path to the original IFC file.  Same as baseLocalFileName if the IFC file is not on a server.</param>\r\n      /// <param name=\"baseLocalFileName\">The full path to the IFC file on disk.</param>\r\n      /// <param name=\"ifcDocument\">The newly imported IFC file document.</param>\r\n      /// <param name=\"originalDocument\">The document to contain the IFC link.</param>\r\n      /// <param name=\"useExistingType\">True if the RevitLinkType already exists.</param>\r\n      /// <param name=\"doSave\">Indicates whether the .IFC.RVT file (also used for IFC cache on reload) should be saved.</param>\r\n      /// <returns>The element id of the RevitLinkType for this link operation.</returns>\r\n      public static ElementId LinkInFile(string originalIFCFileName, string baseLocalFileName,\r\n                                         Document ifcDocument, Document originalDocument,\r\n                                         bool useExistingType, bool doSave)\r\n      {\r\n         bool saveSucceded = true;\r\n         string fileName = GenerateRevitFileName(baseLocalFileName);\r\n\r\n         #region SaveLinkedFile\r\n\r\n         if (doSave)\r\n         {\r\n            SaveAsOptions saveAsOptions = new SaveAsOptions();\r\n            saveAsOptions.OverwriteExistingFile = true;\r\n\r\n            try\r\n            {\r\n               ifcDocument.SaveAs(fileName, saveAsOptions);\r\n            }\r\n            catch\r\n            {\r\n               saveSucceded = false;\r\n            }\r\n\r\n            if (!saveSucceded)\r\n            {\r\n               try\r\n               {\r\n                  string tempPathDir = Path.GetTempPath();\r\n                  string fileNameOnly = Path.GetFileName(fileName);\r\n                  string intermediateFileName = tempPathDir + fileNameOnly;\r\n                  ifcDocument.SaveAs(tempPathDir + fileNameOnly, saveAsOptions);\r\n\r\n                  File.Copy(intermediateFileName, fileName);\r\n                  Application application = ifcDocument.Application;\r\n                  ifcDocument.Close(false);\r\n\r\n                  ifcDocument = application.OpenDocumentFile(fileName);\r\n                  File.Delete(intermediateFileName);\r\n                  saveSucceded = true;\r\n               }\r\n               catch (Exception ex)\r\n               {\r\n                  // We still want to close the document to prevent having a corrupt model in memory.\r\n                  saveSucceded = false;\r\n                  Importer.TheLog.LogError(-1, ex.Message, false);\r\n               }\r\n            }\r\n         }\r\n\r\n         #endregion\r\n\r\n         if (!ifcDocument.IsLinked)\r\n            ifcDocument.Close(false);\r\n\r\n         ElementId revitLinkTypeId = ElementId.InvalidElementId;\r\n\r\n         if (!saveSucceded)\r\n            return revitLinkTypeId;\r\n\r\n         bool doReloadFrom = useExistingType && !Importer.TheOptions.CreateLinkInstanceOnly;\r\n\r\n         if (Importer.TheOptions.RevitLinkFileName != null)\r\n         {\r\n            FilePath originalRevitFilePath = new FilePath(Importer.TheOptions.RevitLinkFileName);\r\n            revitLinkTypeId = RevitLinkType.GetTopLevelLink(originalDocument, originalRevitFilePath);\r\n         }\r\n\r\n         ModelPath path = ModelPathUtils.ConvertUserVisiblePathToModelPath(originalIFCFileName);\r\n\r\n         // Relative path type only works if the model isn't in the cloud.  As such, we'll try again if the\r\n         // routine returns an exception.\r\n         ExternalResourceReference ifcResource = null;\r\n         for (int ii = 0; ii < 2; ii++)\r\n         {\r\n            PathType pathType = (ii == 0) ? PathType.Relative : PathType.Absolute;\r\n            try\r\n            {\r\n               ifcResource = ExternalResourceReference.CreateLocalResource(originalDocument,\r\n                  ExternalResourceTypes.BuiltInExternalResourceTypes.IFCLink, path, pathType);\r\n               break;\r\n            }\r\n            catch\r\n            {\r\n               ifcResource = null;\r\n            }\r\n         }\r\n\r\n         if (ifcResource == null)\r\n            Importer.TheLog.LogError(-1, \"Couldn't create local IFC cached file.  Aborting import.\", true);\r\n\r\n         if (!doReloadFrom)\r\n         {\r\n\r\n            #region Link Without Reload\r\n\r\n            Transaction linkTransaction = new Transaction(originalDocument);\r\n            linkTransaction.Start(Resources.IFCLinkFile);\r\n\r\n            try\r\n            {\r\n               if (revitLinkTypeId == ElementId.InvalidElementId)\r\n               {\r\n                  RevitLinkOptions options = new RevitLinkOptions(true);\r\n                  LinkLoadResult loadResult = RevitLinkType.CreateFromIFC(originalDocument, ifcResource, fileName, false, options);\r\n                  if ((loadResult != null) && (loadResult.ElementId != ElementId.InvalidElementId))\r\n                     revitLinkTypeId = loadResult.ElementId;\r\n               }\r\n\r\n               if (revitLinkTypeId != ElementId.InvalidElementId)\r\n               {\r\n                  RevitLinkInstance linkInstance = RevitLinkInstance.Create(originalDocument, revitLinkTypeId);\r\n                  Document linkDocument = linkInstance?.GetLinkDocument();\r\n                  if (linkDocument == null)\r\n                  {\r\n                     Importer.TheLog.LogError(-1, \"Unable to create Link Instance for IFC File in Host Document -- Aborting Link.\", true);\r\n                  }\r\n\r\n                  XYZ hostSharedCoordinatesOrigin = BasePoint.GetSurveyPoint(originalDocument)?.Position;\r\n                  XYZ hostProjectBasePointShared = BasePoint.GetProjectBasePoint(originalDocument)?.SharedPosition;\r\n                  XYZ hostInternalOriginShared = (hostSharedCoordinatesOrigin == null) ? null : -hostSharedCoordinatesOrigin;\r\n                  if ((hostSharedCoordinatesOrigin == null) || (hostProjectBasePointShared == null) || (hostInternalOriginShared == null))\r\n                  {\r\n                     Importer.TheLog.LogError(-1, \"Unable to retrieve three primary shared origins Host Document -- Aborting Link.\", true);\r\n                  }\r\n\r\n                  // Log all coordinates for Verbose Logging.\r\n                  if (Importer.TheOptions.VerboseLogging)\r\n                  {\r\n                     XYZ hostProjectBasePoint = BasePoint.GetProjectBasePoint(originalDocument).Position;\r\n\r\n                     XYZ hostSurveyPointShared = BasePoint.GetSurveyPoint(originalDocument).SharedPosition;\r\n\r\n                     XYZ linkProjectBasePoint = BasePoint.GetProjectBasePoint(linkDocument).Position;\r\n                     XYZ linkProjectBasePointShared = BasePoint.GetProjectBasePoint(linkDocument).SharedPosition;\r\n                     XYZ linkSurveyPoint = BasePoint.GetSurveyPoint(linkDocument)?.Position;\r\n                     XYZ linkSurveyPointShared = BasePoint.GetSurveyPoint(linkDocument).SharedPosition;\r\n\r\n                     XYZ internalOrigin = XYZ.Zero;\r\n                     XYZ linkInternalOriginShared = -linkSurveyPoint;\r\n\r\n                     Importer.TheLog.LogComment(-1, $\"-------------------------------- BEGIN IFC LINK POSITION INFO -----------------\", false);\r\n                     Importer.TheLog.LogComment(-1, $\"> HOST DOCUMENT > Internal Origin:  Position: {internalOrigin}. Shared Position: {hostInternalOriginShared}\", false);\r\n                     Importer.TheLog.LogComment(-1, $\"> HOST DOCUMENT > Project Base Point:  Position: {hostProjectBasePoint}, Shared Position: {hostProjectBasePointShared}\", false);\r\n                     Importer.TheLog.LogComment(-1, $\"> HOST DOCUMENT > Survey Point:  Position: {hostSharedCoordinatesOrigin}, Shared Position: {hostSurveyPointShared}\", false);\r\n                     Importer.TheLog.LogComment(-1, $\"> LINK DOCUMENT > Internal Origin:  Position: {internalOrigin}. Shared Position: {linkInternalOriginShared}\", false);\r\n                     Importer.TheLog.LogComment(-1, $\"> LINK DOCUMENT > Project Base Point:  Position: {linkProjectBasePoint}, Shared Position: {linkProjectBasePointShared}\", false);\r\n                     Importer.TheLog.LogComment(-1, $\"> LINK DOCUMENT > Survey Point:  Position: {linkSurveyPoint}, Shared Position: {linkSurveyPointShared}\", false);\r\n                     Importer.TheLog.LogComment(-1, $\"> Large Coordinate Offset:  Original: {Importer.TheHybridInfo.OriginalLargeCoordinateOriginOffset}, Current: {Importer.TheHybridInfo.LargeCoordinateOriginOffset}\", false);\r\n                     Importer.TheLog.LogComment(-1, $\"> Destination Position: {Importer.TheOptions.LinkPosition.ToString()}, Destination Orientation: {Importer.TheOptions.LinkOrientation.ToString()}\", false);\r\n                     Importer.TheLog.LogComment(-1, $\"-------------------------------- END IFC LINK POSITION INFO -----------------\", false);\r\n                  }\r\n\r\n                  #region Large Coordinates post-processing\r\n\r\n                  // LargeCoordinateOriginOffset equals the distance that the Link Instance has been moved from its original position, to the Revit Internal Origin.\r\n                  // To move the Link Instance back to its original location, use the inverse of the OriginalLargeCoordinateOriginOffset.\r\n                  // Subtract the shared coordinates of the target point to ensure correct coordinates.\r\n                  XYZ originalLargeCoordinateOriginOffset = Importer.TheHybridInfo?.OriginalLargeCoordinateOriginOffset ?? XYZ.Zero;\r\n                  if (!originalLargeCoordinateOriginOffset.IsZeroLength())\r\n                  {\r\n                     XYZ targetPoint = Importer.TheOptions.LinkPosition switch\r\n                     {\r\n                        IFCLinkPosition.InternalOrigin => hostInternalOriginShared,\r\n                        IFCLinkPosition.ProjectBasePoint => hostProjectBasePointShared,\r\n                        IFCLinkPosition.SurveyPoint => hostSharedCoordinatesOrigin,\r\n                        _ => hostInternalOriginShared    // Always defaulting to Internal Origin.\r\n                     };\r\n\r\n                     XYZ adjustmentOffset = (-originalLargeCoordinateOriginOffset) - targetPoint;\r\n                     if (XYZ.IsWithinLengthLimits(adjustmentOffset))\r\n                     {\r\n                        Location rvtLinkLocation = linkInstance.Location;\r\n                        rvtLinkLocation.Move(adjustmentOffset);\r\n                     }\r\n                     else\r\n                     {\r\n                        Importer.TheLog.LogWarning(-1, $\"IFC Import:  IFC Origin is outside IFC Import Threshold.  IFC Origin has been moved to target point:  {Importer.TheOptions.LinkPosition}.\", false);\r\n                     }\r\n                  }\r\n\r\n                  #endregion\r\n\r\n                  #region Link Orientation\r\n\r\n                  // Default:  Rotate link to Revit Project North (not True North).\r\n                  RotateInstanceToProjectNorth(originalDocument, linkInstance);\r\n\r\n                  // Handle True North orientation.\r\n                  if (Importer.TheOptions.LinkOrientation == IFCLinkOrientation.TrueNorth)\r\n                  {\r\n                     RotateInstanceToLinkNorth(linkInstance);\r\n                  }\r\n\r\n                  #endregion\r\n\r\n                  #region Link Positioning\r\n\r\n                  // For targets of ProjectBasePoint and SurveyPoint only, move the LinkInstance to align with the target point.\r\n                  // If the IFC Origin was outside IFC Import Threshold, treat as if the target is \"Internal Origin\".\r\n                  if (Importer.TheOptions.LinkPosition != IFCLinkPosition.InternalOrigin)\r\n                  {\r\n                     MoveInstanceToAlignPoint(originalDocument, linkInstance, Importer.TheOptions.LinkPosition);\r\n                  }\r\n\r\n                  #endregion\r\n               }\r\n\r\n               Importer.PostDelayedLinkErrors(originalDocument);\r\n               linkTransaction.Commit();\r\n\r\n            }\r\n            catch (Exception)\r\n            {\r\n               linkTransaction.RollBack();\r\n               throw;\r\n            }\r\n\r\n            #endregion\r\n\r\n         }\r\n         else // reload from\r\n         {\r\n            // For the reload from case, we expect the transaction to have been created in the UI.\r\n            if (revitLinkTypeId != ElementId.InvalidElementId)\r\n            {\r\n               RevitLinkType existingRevitLinkType = originalDocument.GetElement(revitLinkTypeId) as RevitLinkType;\r\n               if (existingRevitLinkType != null)\r\n                  existingRevitLinkType.UpdateFromIFC(originalDocument, ifcResource, fileName, false);\r\n            }\r\n         }\r\n\r\n         return revitLinkTypeId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCFile object from an IFC file.\r\n      /// </summary>\r\n      /// <param name=\"path\">The IFC file path.</param>\r\n      /// <param name=\"schemaVersion\">The schema version.</param>\r\n      /// <returns>The IFCFile.</returns>\r\n      static IFCFile CreateIFCFile(string path, out IFCSchemaVersion schemaVersion)\r\n      {\r\n         schemaVersion = IFCSchemaVersion.IFC2x3;\r\n\r\n         if (!File.Exists(path))\r\n         {\r\n            throw new ArgumentException(\"File does not exist\");\r\n         }\r\n\r\n         IFCFile ifcFile = null;\r\n         string fileExt = Path.GetExtension(path);\r\n         if (string.Compare(fileExt, \".ifc\", true) == 0)\r\n            ifcFile = CreateIFCFileFromIFC(path, out schemaVersion);\r\n         else if (string.Compare(fileExt, \".ifcxml\", true) == 0)\r\n            ifcFile = CreateIFCFileFromIFCXML(path, out schemaVersion);\r\n         else if (string.Compare(fileExt, \".ifczip\", true) == 0)\r\n            ifcFile = CreateIFCFileFromIFCZIP(path, out schemaVersion);\r\n         else\r\n            throw new ArgumentException(\"Unknown file format\");\r\n\r\n         if (ifcFile == null)\r\n            throw new ArgumentException(\"Invalid IFC file\");\r\n\r\n         return ifcFile;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCFile object from a standard IFC file.\r\n      /// </summary>\r\n      /// <param name=\"path\">The file path.</param>\r\n      /// <param name=\"schemaVersion\">The schema version.</param>\r\n      /// <returns>The IFCFile.</returns>\r\n      static IFCFile CreateIFCFileFromIFC(string path, out IFCSchemaVersion schemaVersion)\r\n      {\r\n         string schemaString = string.Empty;\r\n         string schemaName = null;\r\n         using (StreamReader sr = new StreamReader(path))\r\n         {\r\n            string schemaKeyword = \"FILE_SCHEMA((\";\r\n            bool found = false;\r\n            while (sr.Peek() >= 0)\r\n            {\r\n               string lineString = schemaString + sr.ReadLine();\r\n               lineString = lineString.Replace(\" \", \"\").Replace(\"\\t\", \"\").Replace(\"\\r\", \"\").Replace(\"\\n\", \"\");\r\n\r\n               string[] schemaNames = lineString.Split(';');\r\n               for (int ii = 0; ii < schemaNames.Length; ii++)\r\n               {\r\n                  schemaString = schemaNames[ii];\r\n\r\n                  int idx = schemaString.IndexOf(schemaKeyword);\r\n                  int schemaIdxStart = -1;\r\n                  int schemaIdxEnd = -1;\r\n\r\n                  if (idx != -1)\r\n                  {\r\n                     idx += schemaKeyword.Length;\r\n                     if (idx < schemaString.Length && schemaString[idx] == '\\'')\r\n                     {\r\n                        schemaIdxStart = ++idx;\r\n                        for (; idx < schemaString.Length; idx++)\r\n                        {\r\n                           if (schemaString[idx] == '\\'')\r\n                           {\r\n                              schemaIdxEnd = idx;\r\n                              found = true;\r\n                              break;\r\n                           }\r\n                        }\r\n                     }\r\n                  }\r\n\r\n                  if (found)\r\n                  {\r\n                     schemaName = schemaString.Substring(schemaIdxStart, schemaIdxEnd - schemaIdxStart);\r\n                     break;\r\n                  }\r\n               }\r\n\r\n               if (found)\r\n                  break;\r\n            }\r\n         }\r\n\r\n         IFCFile file = null;\r\n\r\n         schemaVersion = IFCSchemaVersion.IFC2x3;\r\n         if (!string.IsNullOrEmpty(schemaName))\r\n         {\r\n            IFCFileModelOptions modelOptions = GetIFCFileModelOptions(schemaName, out schemaVersion);\r\n            file = IFCFile.Create(modelOptions);\r\n         }\r\n\r\n         return file;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCFile object from an IFC XML file.\r\n      /// </summary>\r\n      /// <param name=\"path\">The file path.</param>\r\n      /// <param name=\"schemaVersion\">The schema version.</param>\r\n      /// <returns>The IFCFile.</returns>\r\n      static IFCFile CreateIFCFileFromIFCXML(string path, out IFCSchemaVersion schemaVersion)\r\n      {\r\n         IFCFile file = null;\r\n         string schemaName = null;\r\n         schemaVersion = IFCSchemaVersion.IFC2x3;\r\n\r\n         // This is an optional location to find the schema name - it may not be supplied.\r\n         using (XmlReader reader = XmlReader.Create(new StreamReader(path)))\r\n         {\r\n            reader.ReadToFollowing(\"doc:express\");\r\n            reader.MoveToAttribute(\"schema_name\");\r\n            schemaName = reader.Value.Replace(\" \", \"\").Replace(\"\\t\", \"\").Replace(\"\\r\", \"\").Replace(\"\\n\", \"\");\r\n         }\r\n\r\n         // This is an alternate location compatible with some MAP ifcXML files.\r\n         if (string.IsNullOrEmpty(schemaName))\r\n         {\r\n            using (XmlReader reader = XmlReader.Create(new StreamReader(path)))\r\n            {\r\n               reader.ReadToFollowing(\"doc:iso_10303_28\");\r\n               reader.MoveToAttribute(\"xmlns:schemaLocation\");\r\n               int ifcLoc = reader.Value.IndexOf(\"IFC\");\r\n               if (ifcLoc >= 0)\r\n               {\r\n                  string tmpName = reader.Value.Substring(ifcLoc);\r\n                  int ifcEndLoc = tmpName.IndexOf('/');\r\n                  if (ifcEndLoc > 0)\r\n                     schemaName = tmpName.Substring(0, ifcEndLoc);\r\n               }\r\n            }\r\n         }\r\n\r\n         // This checks to see if we have an unsupported IFC2X3_RC1 file.\r\n         if (string.IsNullOrEmpty(schemaName))\r\n         {\r\n            using (XmlReader reader = XmlReader.Create(new StreamReader(path)))\r\n            {\r\n               reader.ReadToFollowing(\"ex:iso_10303_28\");\r\n               reader.MoveToAttribute(\"xmlns:ifc\");\r\n               int ifcLoc = reader.Value.IndexOf(\"IFC\");\r\n               if (ifcLoc >= 0)\r\n                  schemaName = reader.Value.Substring(ifcLoc);\r\n            }\r\n         }\r\n\r\n         if (!string.IsNullOrEmpty(schemaName))\r\n         {\r\n            IFCFileModelOptions modelOptions = GetIFCFileModelOptions(schemaName, out schemaVersion);\r\n            file = IFCFile.Create(modelOptions);\r\n         }\r\n\r\n         if (file == null)\r\n            throw new InvalidOperationException(\"Can't determine XML file schema.\");\r\n\r\n         return file;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an IFCFile object from an IFC Zip file.\r\n      /// </summary>\r\n      /// <param name=\"path\">The file path.</param>\r\n      /// <param name=\"schemaVersion\">The schema version.</param>\r\n      /// <returns>The IFCFile.</returns>\r\n      static IFCFile CreateIFCFileFromIFCZIP(string path, out IFCSchemaVersion schemaVersion)\r\n      {\r\n         string tempFolderName = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());\r\n         try\r\n         {\r\n            string extractedFileName = ExtractZipFile(path, null, tempFolderName);\r\n            return CreateIFCFile(extractedFileName, out schemaVersion);\r\n         }\r\n         finally\r\n         {\r\n            try\r\n            {\r\n               Directory.Delete(tempFolderName, true);\r\n            }\r\n            catch\r\n            {\r\n            } // best effort\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets IFCFileModelOptions from schema name.\r\n      /// </summary>\r\n      /// <param name=\"schemaName\">The schema name.</param>\r\n      /// <param name=\"schemaVersion\">The calculated schema version from the schema name.  Default is IFC2x3.</param>\r\n      /// <returns>The IFCFileModelOptions.</returns>\r\n      static IFCFileModelOptions GetIFCFileModelOptions(string schemaName, out IFCSchemaVersion schemaVersion)\r\n      {\r\n         IFCFileModelOptions modelOptions = new IFCFileModelOptions();\r\n         modelOptions.SchemaName = schemaName;\r\n         schemaVersion = IFCSchemaVersion.IFC2x3;     // Default, should be overridden.\r\n\r\n         if (OverrideSchemaFileName != null)\r\n         {\r\n            modelOptions.SchemaFile = OverrideSchemaFileName;\r\n         }\r\n         else if (schemaName.Equals(\"IFC2X3\", StringComparison.OrdinalIgnoreCase))\r\n         {\r\n            schemaVersion = IFCSchemaVersion.IFC2x3;\r\n         }\r\n         else if (schemaName.Equals(\"IFC2X_FINAL\", StringComparison.OrdinalIgnoreCase))\r\n         {\r\n            schemaVersion = IFCSchemaVersion.IFC2x;\r\n         }\r\n         else if (schemaName.Equals(\"IFC2X2_FINAL\", StringComparison.OrdinalIgnoreCase))\r\n         {\r\n            schemaVersion = IFCSchemaVersion.IFC2x2;\r\n         }\r\n         else if (schemaName.Equals(\"IFC4\", StringComparison.OrdinalIgnoreCase))\r\n         {\r\n            schemaVersion = IFCSchemaVersion.IFC4;\r\n         }\r\n         else if (schemaName.Equals(\"IFC4X1\", StringComparison.OrdinalIgnoreCase))\r\n         {\r\n            schemaVersion = IFCSchemaVersion.IFC4x1;\r\n         }\r\n         else if (schemaName.Equals(\"IFC4X2\", StringComparison.OrdinalIgnoreCase))\r\n         {\r\n            schemaVersion = IFCSchemaVersion.IFC4x2;\r\n         }\r\n         else if (schemaName.Equals(\"IFC4X3_RC1\", StringComparison.OrdinalIgnoreCase))\r\n         {\r\n            schemaVersion = IFCSchemaVersion.IFC4x3_RC1;\r\n         }\r\n         else if (schemaName.Equals(\"IFC4X3_RC4\", StringComparison.OrdinalIgnoreCase))\r\n         {\r\n            schemaVersion = IFCSchemaVersion.IFC4x3_RC4;\r\n         }\r\n         else if (schemaName.Equals(\"IFC4X3\", StringComparison.OrdinalIgnoreCase))\r\n         {\r\n            schemaVersion = IFCSchemaVersion.IFC4x3;\r\n         }\r\n         else if (schemaName.Equals(\"IFC4X3_ADD2\", StringComparison.OrdinalIgnoreCase))\r\n         {\r\n            schemaVersion = IFCSchemaVersion.IFC4x3_ADD2;\r\n         }\r\n         else\r\n            throw new ArgumentException(\"Invalid or unsupported schema: \" + schemaName);\r\n\r\n         if (schemaVersion >= IFCSchemaVersion.IFC4x1)\r\n         {\r\n            if (Importer.TheLog != null)\r\n            {\r\n               Importer.TheLog.LogWarning(-1, \"Schema \" + schemaName + \" is not fully supported. Some elements may be missed or imported incorrectly.\", false);\r\n            }\r\n         }\r\n\r\n         return modelOptions;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Extracts a zip file.\r\n      /// </summary>\r\n      /// <param name=\"archiveFilenameIn\">The zip file.</param>\r\n      /// <param name=\"password\">The password. null if no password.</param>\r\n      /// <param name=\"outFolder\">The output folder.</param>\r\n      /// <returns>The extracted file path.</returns>\r\n      static string ExtractZipFile(string archiveFilenameIn, string password, string outFolder)\r\n      {\r\n         ZipFile zf = null;\r\n         String fullZipToPath = null;\r\n         try\r\n         {\r\n            FileStream fs = File.OpenRead(archiveFilenameIn);\r\n            zf = new ZipFile(fs);\r\n            if (!String.IsNullOrEmpty(password))\r\n            {\r\n               zf.Password = password;\t\t// AES encrypted entries are handled automatically\r\n            }\r\n            foreach (ZipEntry zipEntry in zf)\r\n            {\r\n               if (!zipEntry.IsFile)\r\n               {\r\n                  continue;\t\t\t// Ignore directories\r\n               }\r\n               string entryFileName = zipEntry.Name;\r\n               // to remove the folder from the entry:- entryFileName = Path.GetFileName(entryFileName);\r\n               // Optionally match entrynames against a selection list here to skip as desired.\r\n               // The unpacked length is available in the zipEntry.Size property.\r\n\r\n               byte[] buffer = new byte[4096];\t\t// 4K is optimum\r\n               Stream zipStream = zf.GetInputStream(zipEntry);\r\n\r\n               // Manipulate the output filename here as desired.\r\n               fullZipToPath = Path.Combine(outFolder, entryFileName);\r\n               string directoryName = Path.GetDirectoryName(fullZipToPath);\r\n               if (directoryName.Length > 0)\r\n                  Directory.CreateDirectory(directoryName);\r\n\r\n               // Unzip file in buffered chunks. This is just as fast as unpacking to a buffer the full size\r\n               // of the file, but does not waste memory.\r\n               // The \"using\" will close the stream even if an exception occurs.\r\n               using (FileStream streamWriter = File.Create(fullZipToPath))\r\n               {\r\n                  StreamUtils.Copy(zipStream, streamWriter, buffer);\r\n               }\r\n\r\n               break; //we expect only one IFC file\r\n            }\r\n         }\r\n         finally\r\n         {\r\n            if (zf != null)\r\n            {\r\n               zf.IsStreamOwner = true; // Makes close also shut the underlying stream\r\n               zf.Close(); // Ensure we release resources\r\n            }\r\n         }\r\n\r\n         return fullZipToPath;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets instances of an entity type from an IFC file.\r\n      /// </summary>\r\n      /// <param name=\"type\">The type.</param>\r\n      /// <param name=\"includeSubTypes\">True to retrieve instances of sub types.</param>\r\n      /// <returns>The instance handles.</returns>\r\n      public IList<IFCAnyHandle> GetInstances(IFCEntityType type, bool includeSubTypes)\r\n      {\r\n         return IFCFile.GetInstances(IFCAnyHandleUtil.GetIFCEntityTypeName(type), includeSubTypes);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCIndexedColourMap.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System.Collections.Generic;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Import.Utility;\n\nnamespace Revit.IFC.Import.Data\n{\n   public class IFCIndexedColourMap : IFCPresentationItem\n   {\n      protected IFCIndexedColourMap()\n      {\n      }\n\n      /// <summary>\n      /// MappedTo is a reference to the IfcTessellatedFaceSet to which this applies colors.\n      /// </summary>\n      public IFCTessellatedFaceSet MappedTo { get; protected set; }\n\n      /// <summary>\n      /// Indication that the IfcIndexedColourMap overrides the surface colour information\n      /// that might be assigned as an IfcStyledItem to the IfcTessellatedFaceSet.\n      /// </summary>\n      public IFCSurfaceStyleShading Overrides { get; protected set; }\n\n      /// <summary>\n      /// Indexable list of RGB Colours\n      /// </summary>\n      public IFCColourRgbList Colours { get; protected set; }\n\n      /// <summary>\n      /// Indices into the IfcColourRgbList for each face of the IfcTriangulatedFaceSet. Colour is applied uniformly to the face.\n      /// </summary>\n      public IList<int> ColourIndex { get; protected set; }\n\n      protected IFCIndexedColourMap (IFCAnyHandle item)\n      {\n         Process(item);\n      }\n\n      /// <summary>\n      /// Process ifcIndexedColourMap instance.\n      /// </summary>\n      /// <param name=\"ifcIndexedColourMap\">The handle to process</param>\n      protected override void Process(IFCAnyHandle ifcIndexedColourMap)\n      {\n         base.Process(ifcIndexedColourMap);\n\n         // Handle IfcTesselatedFaceSet / IfcTriangulatedFaceSet\n         //\n         IFCAnyHandle mappedTo = IFCAnyHandleUtil.GetInstanceAttribute(ifcIndexedColourMap, \"MappedTo\");\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(mappedTo))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcTessellatedFaceSet);\n            return;\n         }\n         MappedTo = IFCTessellatedFaceSet.ProcessIFCTessellatedFaceSet(mappedTo);\n\n         // Handle (Optional) IfcSurfaceStyleShading\n         //\n         IFCAnyHandle overrides = IFCImportHandleUtil.GetOptionalInstanceAttribute(ifcIndexedColourMap, \"Overrides\");\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(overrides))\n         {\n            Overrides = IFCSurfaceStyleShading.ProcessIFCSurfaceStyleShading(overrides);\n         }\n\n         // Handle IfcColourMapList\n         //\n         IFCAnyHandle colours = IFCAnyHandleUtil.GetInstanceAttribute(ifcIndexedColourMap, \"Colours\");\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(colours))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcColourRgbList);\n            return;\n         }\n         Colours = IFCColourRgbList.ProcessIFCColourRgbList(colours);\n\n         // Handle Colour Index list\n         //\n         IList<int> colourIndex = IFCAnyHandleUtil.GetAggregateIntAttribute<List<int>>(ifcIndexedColourMap, \"ColourIndex\");\n         if (colourIndex?.Count > 0)\n         {\n            ColourIndex = colourIndex;\n         }\n         else\n         {\n            Importer.TheLog.LogError(Id, \"Invalid Colour Index Map for this IndexedColourMap\", false);\n            return;\n         }\n      }\n\n      /// <summary>\n      /// Start processing the IfcIndexedColourMap\n      /// </summary>\n      /// <param name=\"ifcIndexedColourMap\">the handle</param>\n      /// <returns></returns>\n      public static IFCIndexedColourMap ProcessIFCIndexedColourMap(IFCAnyHandle ifcIndexedColourMap)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcIndexedColourMap))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcIndexedColourMap);\n            return null;\n         }\n\n         IFCEntity indexedColourMap;\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcIndexedColourMap.StepId, out indexedColourMap))\n            indexedColourMap = new IFCIndexedColourMap(ifcIndexedColourMap);\n         return (indexedColourMap as IFCIndexedColourMap);\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCIndexedPolyCurve.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCIndexedPolyCurve entity\r\n   /// </summary>\r\n   public class IFCIndexedPolyCurve : IFCBoundedCurve\r\n   {\r\n      protected IFCIndexedPolyCurve()\r\n      {\r\n      }\r\n\r\n      protected IFCIndexedPolyCurve(IFCAnyHandle indexedPolyCurve)\r\n      {\r\n         Process(indexedPolyCurve);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check that an IFCData is properly formatted to potentially be an IfcSegmentIndexSelect.\r\n      /// </summary>\r\n      /// <param name=\"segment\"></param>\r\n      /// <returns>The type of IfcSegmentIndexSelect, or null if invalid.</returns>\r\n      /// <remarks>The calling function is responsible for logging errors.</remarks>\r\n      private string ValidateSegment(IFCData segment)\r\n      {\r\n         if (segment.PrimitiveType != IFCDataPrimitiveType.Aggregate)\r\n         {\r\n            return null;\r\n         }\r\n\r\n         if (!segment.HasSimpleType())\r\n         {\r\n            return null;\r\n         }\r\n\r\n         return segment.GetSimpleType();\r\n      }\r\n\r\n      private int? GetValidIndex(IFCData segmentInfoIndex, int maxValue)\r\n      {\r\n         // Index starts at 1.\r\n         int currentIndex = segmentInfoIndex.AsInteger() - 1;\r\n         if (currentIndex < 0 || currentIndex >= maxValue)\r\n         {\r\n            // TODO: warn.\r\n            return null;\r\n         }\r\n         return currentIndex;\r\n      }\r\n\r\n      private void CreateLineSegments(CurveLoop curveLoop, IList<XYZ> currentSegments)\r\n      {\r\n         if (currentSegments.Count > 0)\r\n         {\r\n            IFCGeometryUtil.AppendPolyCurveToCurveLoop(curveLoop, currentSegments, null, Id, false);\r\n            currentSegments.Clear();\r\n         }\r\n      }\r\n\r\n      private enum IFCIndexType\r\n      {\r\n         LineIndex,\r\n         ArcIndex\r\n      };\r\n\r\n      protected override void Process(IFCAnyHandle ifcCurve)\r\n      {\r\n         base.Process(ifcCurve);\r\n\r\n         IFCAnyHandle points = IFCAnyHandleUtil.GetInstanceAttribute(ifcCurve, \"Points\");\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(points))\r\n         {\r\n            Importer.TheLog.LogMissingRequiredAttributeError(ifcCurve, \"Points\", true);\r\n            return;\r\n         }\r\n\r\n         IList<IFCData> segments = null;\r\n         try\r\n         {\r\n            // The Segments attribute is new to IFC4 Add1, and we don't know that we may have a \r\n            // vanilla IFC4 file.  If we can't find the attribute, we will assume the points represent \r\n            // the vertices of a polyline.\r\n            segments = IFCAnyHandleUtil.GetAggregateAttribute<List<IFCData>>(ifcCurve, \"Segments\");\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            if (IFCImportFile.HasUndefinedAttribute(ex))\r\n               IFCImportFile.TheFile.DowngradeIFC4SchemaTo(IFCSchemaVersion.IFC4);\r\n            else\r\n               throw;\r\n         }\r\n\r\n         IFCCartesianPointList pointList = IFCCartesianPointList.ProcessIFCCartesianPointList(points);\r\n         IList<XYZ> pointListXYZs = pointList.CoordList;\r\n         int numPoints = pointListXYZs.Count;\r\n         \r\n         CurveLoop curveLoop = null;\r\n         IList<XYZ> pointXYZs = null;\r\n\r\n         IList<IFCIndexType> indexTypes = new List<IFCIndexType>();\r\n         if (segments != null)\r\n         {\r\n            foreach (IFCData segment in segments)\r\n            {\r\n               string indexType = ValidateSegment(segment);\r\n               if (indexType == null)\r\n               {\r\n                  break;\r\n               }\r\n\r\n               if (indexType.Equals(\"IfcLineIndex\", StringComparison.OrdinalIgnoreCase))\r\n               {\r\n                  indexTypes.Add(IFCIndexType.LineIndex);\r\n               }\r\n               else if (indexType.Equals(\"IfcArcIndex\", StringComparison.OrdinalIgnoreCase))\r\n               {\r\n                  indexTypes.Add(IFCIndexType.ArcIndex);\r\n               }\r\n               else\r\n               {\r\n                  break;\r\n               }\r\n            }\r\n\r\n            if (indexTypes.Count != segments.Count)\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Unknown segment type in IfcIndexedPolyCurve, ignoring.\", false);\r\n               segments = null;\r\n            }\r\n         }\r\n\r\n         if (segments == null)\r\n         {\r\n            // Simple case: no segment information, just treat the curve as a polyline.\r\n            pointXYZs = pointListXYZs;\r\n\r\n            // Special case:\r\n            // If there are only three points (A, B, C), and C actually equals A, then the Curve should actually be considered as going from A->B only.\r\n            // Since this method specifies closeCurve as false, CreatePolyLoop will reject (A, B, A) as invalid, but will not reject (A, B).\r\n            if (((pointXYZs?.Count ?? 0) == 3) && pointXYZs[0].IsAlmostEqualTo(pointXYZs[2]))\r\n            {\r\n               pointXYZs.RemoveAt(2);\r\n            }\r\n\r\n            curveLoop = IFCGeometryUtil.CreatePolyCurveLoop(pointXYZs, null, Id, closeCurve: false);\r\n         }\r\n         else\r\n         {\r\n            curveLoop = new CurveLoop();\r\n\r\n            // Assure that we don't add the same point twice for a polyline segment.  This could\r\n            // happen by error, or, e.g., there are two IfcLineIndex segments in a row (although\r\n            // this could also be considered an error condition.)\r\n            int lastIndex = -1;\r\n\r\n            // The list of all of the points, in the order that they are added.  This can be\r\n            // used as a backup representation.\r\n            pointXYZs = new List<XYZ>();\r\n\r\n            IList<XYZ> currentLineSegmentPoints = new List<XYZ>();\r\n            int count = segments.Count;\r\n            for (int ii = 0; ii < count; ii++)\r\n            {\r\n               IFCAggregate segmentInfo = segments[ii].AsAggregate();\r\n               switch (indexTypes[ii])\r\n               {\r\n                  case IFCIndexType.LineIndex:\r\n                     {\r\n                        foreach (IFCData segmentInfoIndex in segmentInfo)\r\n                        {\r\n                           int? currentIndex = GetValidIndex(segmentInfoIndex, numPoints);\r\n                           if (currentIndex == null)\r\n                              continue;\r\n\r\n                           // We want to aggregate line segments, but if we have no points\r\n                           // yet, we need to always add the start point.\r\n                           int validCurrentIndex = currentIndex.Value;\r\n                           if (lastIndex != validCurrentIndex || currentLineSegmentPoints.Count == 0)\r\n                           {\r\n                              XYZ currPt = pointListXYZs[validCurrentIndex];\r\n                              pointXYZs.Add(currPt);\r\n                              currentLineSegmentPoints.Add(currPt);\r\n                              lastIndex = validCurrentIndex;\r\n                           }\r\n                        }\r\n                        break;\r\n                     }\r\n                  case IFCIndexType.ArcIndex:\r\n                     {\r\n                        // Create any line segments that haven't been already created.\r\n                        CreateLineSegments(curveLoop, currentLineSegmentPoints);\r\n\r\n                        if (segmentInfo.Count != 3)\r\n                        {\r\n                           Importer.TheLog.LogError(Id, \"Invalid IfcArcIndex in IfcIndexedPolyCurve.\", false);\r\n                           continue;\r\n                        }\r\n\r\n                        int? startIndex = GetValidIndex(segmentInfo[0], numPoints);\r\n                        int? pointIndex = GetValidIndex(segmentInfo[1], numPoints);\r\n                        int? endIndex = GetValidIndex(segmentInfo[2], numPoints);\r\n\r\n                        if (startIndex == null || pointIndex == null || endIndex == null)\r\n                           continue;\r\n\r\n                        Arc arcSegment = null;\r\n                        XYZ startPoint = pointListXYZs[startIndex.Value];\r\n                        XYZ pointOnArc = pointListXYZs[pointIndex.Value];\r\n                        XYZ endPoint = pointListXYZs[endIndex.Value];\r\n                        try\r\n                        {\r\n                           arcSegment = Arc.Create(startPoint, endPoint, pointOnArc);\r\n                           if (arcSegment != null)\r\n                              curveLoop.Append(arcSegment);\r\n                        }\r\n                        catch\r\n                        {\r\n                           // We won't do anything here; it may be that the arc is very small, and can\r\n                           // be repaired as a gap in the curve loop.  If it can't, this will fail later.\r\n                           // We will monitor usage to see if anything more needs to be done here.\r\n                        }\r\n\r\n                        if (lastIndex != startIndex.Value)\r\n                           pointXYZs.Add(startPoint);\r\n                        pointXYZs.Add(pointOnArc);\r\n                        pointXYZs.Add(endPoint);\r\n                        lastIndex = endIndex.Value;\r\n                        break;\r\n                     }\r\n                  default:\r\n                     {\r\n                        Importer.TheLog.LogError(Id, \"Unknown segment type in IfcIndexedPolyCurve.\", false);\r\n                        continue;\r\n                     }\r\n               }\r\n            }\r\n\r\n            // Create any line segments that haven't been already created.\r\n            CreateLineSegments(curveLoop, currentLineSegmentPoints);\r\n         }\r\n\r\n         SetCurveLoop(curveLoop, pointXYZs);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCIndexedPolyCurve object from a handle of type IfcIndexedPolyCurve\r\n      /// </summary>\r\n      /// <param name=\"ifcIndexedPolyCurve\">The IFC handle</param>\r\n      /// <returns>The IFCIndexedPolyCurve object</returns>\r\n      public static IFCIndexedPolyCurve ProcessIFCIndexedPolyCurve(IFCAnyHandle ifcIndexedPolyCurve)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcIndexedPolyCurve))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcIndexedPolyCurve);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity indexedPolyCurve = null;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcIndexedPolyCurve.StepId, out indexedPolyCurve))\r\n            indexedPolyCurve = new IFCIndexedPolyCurve(ifcIndexedPolyCurve);\r\n\r\n         return (indexedPolyCurve as IFCIndexedPolyCurve);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCIndexedPolygonalFace.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCIndexedPolygonalFace : IFCRepresentationItem\r\n   {\r\n      IList<int> m_CoordIndex = null;\r\n      IList<IList<int>> m_InnerCoordIndices = null;\r\n\r\n      protected IFCIndexedPolygonalFace()\r\n      {\r\n      }\r\n\r\n      public IList<int> CoordIndex\r\n      {\r\n         get { return m_CoordIndex; }\r\n         protected set { m_CoordIndex = value; }\r\n      }\r\n\r\n      public IList<IList<int>> InnerCoordIndices\r\n      {\r\n         get { return m_InnerCoordIndices; }\r\n         protected set { m_InnerCoordIndices = value; }\r\n      }\r\n\r\n      protected IFCIndexedPolygonalFace(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcIndexPolygonalFace)\r\n      {\r\n         base.Process(ifcIndexPolygonalFace);\r\n\r\n         IList<int> coordIndex = IFCAnyHandleUtil.GetAggregateIntAttribute<List<int>>(ifcIndexPolygonalFace, \"CoordIndex\");\r\n         if (IsValidCoordList(coordIndex))\r\n            CoordIndex = coordIndex;\r\n\r\n         if (IFCAnyHandleUtil.IsTypeOf(ifcIndexPolygonalFace, IFCEntityType.IfcIndexedPolygonalFaceWithVoids))\r\n         {\r\n            IList<IList<int>> innerCoordIndices = IFCImportHandleUtil.GetListOfListOfIntegerAttribute(ifcIndexPolygonalFace, \"InnerCoordIndices\");\r\n            if ((innerCoordIndices?.Count ?? 0) >= 1)\r\n            {\r\n               IList<IList<int>> validInnerCoordindices = CreateValidInnerCoordList(innerCoordIndices);\r\n               if ((validInnerCoordindices?.Count ?? 0) >= 3)\r\n               {\r\n                  InnerCoordIndices = validInnerCoordindices;\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Validate a list of coordinates, which will comprise a Face.  There should be at least three.\r\n      /// The coordinates are indices into an IfcPolygonalFaceSet STEP.\r\n      /// </summary>\r\n      /// <param name=\"coordList\">List of coordinate indices.</param>\r\n      /// <returns>True if valid, False otherwise.</returns>\r\n      public static bool IsValidCoordList(IList<int> coordList) => ((coordList?.Count ?? 0) >= 3);\r\n\r\n      /// <summary>\r\n      /// Creates a list of list of coordinates.  There should be at least one list of coordinates, and each list should have no\r\n      /// less than three entries.\r\n      /// </summary>\r\n      /// <param name=\"innerCoordList\">List of list of coordinate indices.</param>\r\n      /// <returns>A list of a list of valid coordinate indices.</returns>\r\n      public static IList<IList<int>> CreateValidInnerCoordList(IList<IList<int>> innerCoordList)\r\n      {\r\n         IList<IList<int>> validInnerCoordList = new List<IList<int>>();\r\n         foreach (IList<int> coordList in innerCoordList)\r\n         {\r\n            if (IsValidCoordList(coordList))\r\n            {\r\n               validInnerCoordList.Add(coordList);\r\n            }\r\n         }\r\n\r\n         return validInnerCoordList;\r\n      }\r\n\r\n      public static IFCIndexedPolygonalFace ProcessIFCIndexedPolygonalFace(IFCAnyHandle ifcIndexedPolygonalFace)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcIndexedPolygonalFace))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcIndexedPolygonalFace);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity indexedPolygonalFace;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcIndexedPolygonalFace.StepId, out indexedPolygonalFace))\r\n            indexedPolygonalFace = new IFCIndexedPolygonalFace(ifcIndexedPolygonalFace);\r\n         return (indexedPolygonalFace as IFCIndexedPolygonalFace);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCLine.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCLine entity\r\n   /// </summary>\r\n   public class IFCLine : IFCCurve\r\n   {\r\n      protected IFCLine()\r\n      {\r\n      }\r\n\r\n      protected IFCLine(IFCAnyHandle line)\r\n      {\r\n         Process(line);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcCurve)\r\n      {\r\n         base.Process(ifcCurve);\r\n         IFCAnyHandle pnt = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcCurve, \"Pnt\", false);\r\n         if (pnt == null)\r\n            return;\r\n\r\n         IFCAnyHandle dir = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcCurve, \"Dir\", false);\r\n         if (dir == null)\r\n            return;\r\n\r\n         XYZ pntXYZ = IFCPoint.ProcessScaledLengthIFCCartesianPoint(pnt);\r\n         XYZ dirXYZ = IFCPoint.ProcessScaledLengthIFCVector(dir);\r\n         ParametericScaling = dirXYZ.GetLength();\r\n         if (MathUtil.IsAlmostZero(ParametericScaling))\r\n         {\r\n            Importer.TheLog.LogWarning(ifcCurve.StepId, \"Line has zero length, ignoring.\", false);\r\n            return;\r\n         }\r\n\r\n         SetCurve(Line.CreateUnbound(pntXYZ, dirXYZ / ParametericScaling));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCLine object from a handle of type IfcLine\r\n      /// </summary>\r\n      /// <param name=\"ifcLine\">The IFC handle</param>\r\n      /// <returns>The IFCLine object</returns>\r\n      public static IFCLine ProcessIFCLine(IFCAnyHandle ifcLine)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcLine))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcLine);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity line = null;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcLine.StepId, out line))\r\n            line = new IFCLine(ifcLine);\r\n\r\n         return (line as IFCLine);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCLocation.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents the object placement.\r\n   /// </summary>\r\n   public class IFCLocation : IFCEntity\r\n   {\r\n      /// <summary>\r\n      /// The IFCLocation that this IFCLocation is relative to. \r\n      /// </summary>\r\n      public IFCLocation RelativeTo { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The total transform.\r\n      /// </summary>\r\n      public Transform TotalTransform\r\n      {\r\n         get { return RelativeTo != null ? RelativeTo.TotalTransform.Multiply(RelativeTransform) : RelativeTransform; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The total transform, taking into account any large coordinate offset.\r\n      /// </summary>\r\n      public Transform TotalTransformAfterOffset\r\n      {\r\n         get \r\n         {\r\n            Transform totalTransform = TotalTransform ?? Transform.Identity;\r\n            totalTransform.Origin += (Importer.TheHybridInfo?.LargeCoordinateOriginOffset ?? XYZ.Zero);\r\n            return totalTransform;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The relative transform.\r\n      /// </summary>\r\n      public Transform RelativeTransform { get; set; } = Transform.Identity;\r\n\r\n      /// <summary>\r\n      /// Determines if this IfcLocation is relative to the IfcSite's location.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// This is not part of the IFC definition of an IfcLocation, but is necessary for Revit in case\r\n      /// 1. The IfcSite has a non-identity IfcLocation and \r\n      /// 2. An object has an IfcLocation that is incorrectly not associated to IfcSite.\r\n      /// We will warn about this but correct it.\r\n      /// </remarks>\r\n      public bool RelativeToSite { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCLocation()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a dummy IFCLocation that contains only a relative transform.\r\n      /// </summary>\r\n      /// <param name=\"relativeTransform\">The transform associated with the location.</param>\r\n      /// <returns>The new IFCLocation.</returns>\r\n      /// <remarks>\r\n      /// This is intended for use for IFCSites, whose location has either been modified\r\n      /// by the RefElevation parameter, or by being moved far from the origin.\r\n      /// </remarks>\r\n      static public IFCLocation CreateDummyLocation(Transform relativeTransform)\r\n      {\r\n         IFCLocation dummyLocation = new IFCLocation();\r\n         dummyLocation.RelativeTransform = relativeTransform;\r\n         return dummyLocation;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCLocation from the IfcObjectPlacement handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcObjectPlacement\">The IfcObjectPlacement handle.</param>\r\n      protected IFCLocation(IFCAnyHandle ifcObjectPlacement)\r\n      {\r\n         Process(ifcObjectPlacement);\r\n      }\r\n\r\n      static Transform ProcessPlacementBase(IFCAnyHandle placement)\r\n      {\r\n         IFCAnyHandle location = IFCAnyHandleUtil.GetInstanceAttribute(placement, \"Location\");\r\n         XYZ origin = IFCPoint.ProcessScaledLengthIFCCartesianPoint(location);\r\n         if (origin == null)\r\n         {\r\n            Importer.TheLog.LogError(placement.StepId, \"Missing or invalid location attribute.\", false);\r\n            origin = XYZ.Zero;\r\n         }\r\n         return Transform.CreateTranslation(origin);\r\n      }\r\n\r\n      static Transform ProcessAxis2Placement2D(IFCAnyHandle placement)\r\n      {\r\n         IFCAnyHandle refDirection = IFCAnyHandleUtil.GetInstanceAttribute(placement, \"RefDirection\");\r\n         XYZ refDirectionX =\r\n             IFCAnyHandleUtil.IsNullOrHasNoValue(refDirection) ? XYZ.BasisX : IFCPoint.ProcessNormalizedIFCDirection(refDirection);\r\n         XYZ refDirectionY = new XYZ(-refDirectionX.Y, refDirectionX.X, 0.0);\r\n\r\n         Transform lcs = ProcessPlacementBase(placement);\r\n         lcs.BasisX = refDirectionX;\r\n         lcs.BasisY = refDirectionY;\r\n         lcs.BasisZ = refDirectionX.CrossProduct(refDirectionY);\r\n\r\n         return lcs;\r\n      }\r\n\r\n      static Transform ProcessAxis2Placement3D(IFCAnyHandle placement)\r\n      {\r\n         IFCAnyHandle axis = IFCAnyHandleUtil.GetInstanceAttribute(placement, \"Axis\");\r\n         IFCAnyHandle refDirection = IFCAnyHandleUtil.GetInstanceAttribute(placement, \"RefDirection\");\r\n\r\n         XYZ axisXYZ = IFCAnyHandleUtil.IsNullOrHasNoValue(axis) ?\r\n             XYZ.BasisZ : IFCPoint.ProcessNormalizedIFCDirection(axis, false);\r\n         XYZ refDirectionXYZ = IFCAnyHandleUtil.IsNullOrHasNoValue(refDirection) ?\r\n             XYZ.BasisX : IFCPoint.ProcessNormalizedIFCDirection(refDirection, false);\r\n\r\n         if (axisXYZ.IsZeroLength())\r\n         {\r\n            Importer.TheLog.LogError(axis.StepId, \"Local transform contains 0 length axis vector, reverting to Z-axis.\", false);\r\n            axisXYZ = XYZ.BasisZ;\r\n         }\r\n         if (refDirectionXYZ.IsZeroLength())\r\n         {\r\n            Importer.TheLog.LogError(refDirection.StepId, \"Local transform contains 0 length reference vector, reverting to X-axis.\", false);\r\n            refDirectionXYZ = XYZ.BasisX;\r\n         }\r\n\r\n         Transform lcs = ProcessPlacementBase(placement);\r\n\r\n         XYZ lcsX = (refDirectionXYZ - refDirectionXYZ.DotProduct(axisXYZ) * axisXYZ).Normalize();\r\n         XYZ lcsY = axisXYZ.CrossProduct(lcsX).Normalize();\r\n\r\n         if (lcsX.IsZeroLength() || lcsY.IsZeroLength())\r\n         {\r\n            Importer.TheLog.LogError(placement.StepId, \"Local transform contains 0 length vectors.\", true);\r\n         }\r\n\r\n         lcs.BasisX = lcsX;\r\n         lcs.BasisY = lcsY;\r\n         lcs.BasisZ = axisXYZ;\r\n         return lcs;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Convert an IfcAxis1Placement into a transform.\r\n      /// </summary>\r\n      /// <param name=\"placement\">The placement handle.</param>\r\n      /// <returns>The transform.</returns>\r\n      public static Transform ProcessIFCAxis1Placement(IFCAnyHandle ifcPlacement)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPlacement))\r\n            return Transform.Identity;\r\n\r\n         Transform transform;\r\n         if (IFCImportFile.TheFile.TransformMap.TryGetValue(ifcPlacement.StepId, out transform))\r\n            return transform;\r\n\r\n         if (!IFCAnyHandleUtil.IsValidSubTypeOf(ifcPlacement, IFCEntityType.IfcAxis1Placement))\r\n         {\r\n            Importer.TheLog.LogUnhandledSubTypeError(ifcPlacement, \"IfcAxis1Placement\", false);\r\n            transform = Transform.Identity;\r\n         }\r\n\r\n         IFCAnyHandle ifcAxis = IFCAnyHandleUtil.GetInstanceAttribute(ifcPlacement, \"Axis\");\r\n         XYZ norm = IFCAnyHandleUtil.IsNullOrHasNoValue(ifcAxis) ? XYZ.BasisZ : IFCPoint.ProcessNormalizedIFCDirection(ifcAxis);\r\n\r\n         transform = ProcessPlacementBase(ifcPlacement);\r\n         Plane arbitraryPlane = Plane.CreateByNormalAndOrigin(norm, transform.Origin);\r\n\r\n         transform.BasisX = arbitraryPlane.XVec;\r\n         transform.BasisY = arbitraryPlane.YVec;\r\n         transform.BasisZ = norm;\r\n\r\n         IFCImportFile.TheFile.TransformMap[ifcPlacement.StepId] = transform;\r\n         return transform;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Convert an IfcAxis2Placement into a transform.\r\n      /// </summary>\r\n      /// <param name=\"placement\">The placement handle.</param>\r\n      /// <returns>The transform.</returns>\r\n      public static Transform ProcessIFCAxis2Placement(IFCAnyHandle ifcPlacement)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPlacement))\r\n            return Transform.Identity;\r\n\r\n         Transform transform;\r\n         if (IFCImportFile.TheFile.TransformMap.TryGetValue(ifcPlacement.StepId, out transform))\r\n            return transform;\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcPlacement, IFCEntityType.IfcAxis2Placement2D))\r\n            transform = ProcessAxis2Placement2D(ifcPlacement);\r\n         else if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcPlacement, IFCEntityType.IfcAxis2Placement3D))\r\n            transform = ProcessAxis2Placement3D(ifcPlacement);\r\n         else\r\n         {\r\n            Importer.TheLog.LogUnhandledSubTypeError(ifcPlacement, \"IfcAxis2Placement\", false);\r\n            transform = Transform.Identity;\r\n         }\r\n\r\n         IFCImportFile.TheFile.TransformMap[ifcPlacement.StepId] = transform;\r\n         return transform;\r\n      }\r\n\r\n      protected void ProcessLocalPlacement(IFCAnyHandle objectPlacement)\r\n      {\r\n         IFCAnyHandle placementRelTo = IFCAnyHandleUtil.GetInstanceAttribute(objectPlacement, \"PlacementRelTo\");\r\n         IFCAnyHandle relativePlacement = IFCAnyHandleUtil.GetInstanceAttribute(objectPlacement, \"RelativePlacement\");\r\n\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(placementRelTo))\r\n         {\r\n            RelativeTo = ProcessIFCObjectPlacement(placementRelTo);\r\n            // If the location that this is relative to is relative to the site location, then\r\n            // so is this.  This relies on RelativeToSite for the IfcSite local placement to be\r\n            // set to true before any other entities are processed.\r\n            RelativeToSite = RelativeTo.RelativeToSite;\r\n         }\r\n\r\n         RelativeTransform = ProcessIFCAxis2Placement(relativePlacement);\r\n      }\r\n\r\n      protected void ProcessGridPlacement(IFCAnyHandle gridPlacement)\r\n      {\r\n         Importer.TheCache.PreProcessGrids();\r\n\r\n         IFCAnyHandle placementLocation = IFCImportHandleUtil.GetRequiredInstanceAttribute(gridPlacement, \"PlacementLocation\", true);\r\n\r\n         IFCVirtualGridIntersection virtualGridIntersection = IFCVirtualGridIntersection.ProcessIFCVirtualGridIntersection(placementLocation);\r\n\r\n         IFCAnyHandle placementRefDirection = IFCAnyHandleUtil.GetInstanceAttribute(gridPlacement, \"PlacementRefDirection\");\r\n\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(placementRefDirection))\r\n         {\r\n            // TODO: Handle later, if we see examples of use.\r\n            Importer.TheLog.LogError(gridPlacement.Id, \"placementRefDirection attribute not handled.\", false);\r\n         }\r\n \r\n         RelativeTransform = virtualGridIntersection.LocalCoordinateSystem;\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle objectPlacement)\r\n      {\r\n         base.Process(objectPlacement);\r\n\r\n         // Various TODOs here.\r\n         // 1. We should create IFCLocalPlacement and IFCGridPlacement, and have them inherit\r\n         //    from IFCLocation.\r\n         // 2. IFCGridPlacement and IFCVirtualGridIntersection implementation is incomplete; \r\n         //    we will let the user know if they get to an unsupported case. \r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(objectPlacement, IFCEntityType.IfcLocalPlacement))\r\n            ProcessLocalPlacement(objectPlacement);\r\n         else if (IFCAnyHandleUtil.IsValidSubTypeOf(objectPlacement, IFCEntityType.IfcGridPlacement))\r\n            ProcessGridPlacement(objectPlacement);\r\n         else\r\n            Importer.TheLog.LogUnhandledSubTypeError(objectPlacement, \"IfcObjectPlacement\", false);         \r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcObjectPlacement object.\r\n      /// </summary>\r\n      /// <param name=\"objectPlacement\">The IfcObjectPlacement handle.</param>\r\n      /// <returns>The IFCLocation object.</returns>\r\n      public static IFCLocation ProcessIFCObjectPlacement(IFCAnyHandle ifcObjectPlacement)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcObjectPlacement))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcObjectPlacement);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity location;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcObjectPlacement.StepId, out location))\r\n            return (location as IFCLocation);\r\n\r\n         return new IFCLocation(ifcObjectPlacement);\r\n      }\r\n\r\n      public static void WarnIfFaraway(IFCProduct product)\r\n      {\r\n         XYZ origin = product?.ObjectLocation?.TotalTransformAfterOffset?.Origin;\r\n         if (origin != null && !XYZ.IsWithinLengthLimits(origin))\r\n         {\r\n            Importer.TheLog.LogWarning(product.Id, \"This entity has an origin that is outside of Revit's creation limits.  This could result in bad graphical display of geometry.\", false);\r\n         }\r\n      }\r\n}\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCLoop.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// The subtypes represent topological loops.\r\n   /// </summary>\r\n   public abstract class IFCLoop : IFCTopologicalRepresentationItem\r\n   {\r\n      // In the case of a tessellated shape, the IFCLoop is defined by vertices.\r\n      IList<XYZ> m_LoopVertices = null;\r\n\r\n      public IList<XYZ> LoopVertices\r\n      {\r\n         get\r\n         {\r\n            if (m_LoopVertices == null)\r\n               m_LoopVertices = GenerateLoopVertices();\r\n            return m_LoopVertices;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the Loop definition represents a non-empty boundary.\r\n      /// </summary>\r\n      /// <returns>True if the FaceBound contains any information.</returns>\r\n      virtual public bool IsEmpty()\r\n      {\r\n         return false;\r\n      }\r\n\r\n      protected IFCLoop()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcLoop)\r\n      {\r\n         base.Process(ifcLoop);\r\n      }\r\n\r\n      virtual protected CurveLoop GenerateLoop()\r\n      {\r\n         return null;\r\n      }\r\n\r\n      virtual protected IList<XYZ> GenerateLoopVertices()\r\n      {\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n      }\r\n\r\n      protected IFCLoop(IFCAnyHandle ifcLoop)\r\n      {\r\n         Process(ifcLoop);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCLoop object from a handle of type IfcLoop.\r\n      /// </summary>\r\n      /// <param name=\"ifcLoop\">The IFC handle.</param>\r\n      /// <returns>The IFCLoop object.</returns>\r\n      public static IFCLoop ProcessIFCLoop(IFCAnyHandle ifcLoop)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcLoop))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcLoop);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity loop;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcLoop.StepId, out loop))\r\n            return (loop as IFCLoop);\r\n\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC2x2) && IFCAnyHandleUtil.IsSubTypeOf(ifcLoop, IFCEntityType.IfcEdgeLoop))\r\n            return IFCEdgeLoop.ProcessIFCEdgeLoop(ifcLoop);\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcLoop, IFCEntityType.IfcPolyLoop))\r\n            return IFCPolyLoop.ProcessIFCPolyLoop(ifcLoop);\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcLoop, IFCEntityType.IfcLoop, false);\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCManifoldSolidBrep.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCManifoldSolidBrep : IFCSolidModel, IIFCBooleanOperand\r\n   {\r\n      IFCClosedShell m_Outer = null;\r\n\r\n      /// <summary>\r\n      /// The outer shell of the solid.\r\n      /// </summary>\r\n      public IFCClosedShell Outer\r\n      {\r\n         get { return m_Outer; }\r\n         protected set { m_Outer = value; }\r\n      }\r\n\r\n      protected IFCManifoldSolidBrep()\r\n      {\r\n      }\r\n\r\n      private Tuple<IList<GeometryObject>, bool> CollectFaces(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         using (BuilderScope bs = shapeEditScope.InitializeBuilder(IFCShapeBuilderType.TessellatedShapeBuilder))\r\n         {\r\n            TessellatedShapeBuilderScope tsBuilderScope = bs as TessellatedShapeBuilderScope;\r\n\r\n            tsBuilderScope.StartCollectingFaceSet();\r\n            Outer.CreateShape(shapeEditScope, scaledLcs, guid);\r\n\r\n            IList<GeometryObject> geomObjs = null;\r\n            bool canRevertToMesh = tsBuilderScope.CanRevertToMesh();\r\n\r\n            int numCreatedFaces = tsBuilderScope.CreatedFacesCount;\r\n            int numExpectedFaces = Outer.Faces.Count;\r\n\r\n            if (numCreatedFaces == numExpectedFaces || (!canRevertToMesh && numCreatedFaces > 0))\r\n            {\r\n               geomObjs = tsBuilderScope.CreateGeometry(guid);\r\n\r\n               if (numCreatedFaces < numExpectedFaces)\r\n               {\r\n                  Importer.TheLog.LogWarning(Outer.Id,\r\n                     \"Processing \" + numCreatedFaces + \" valid faces out of \" + numExpectedFaces + \" total.\", false);\r\n               }\r\n            }\r\n\r\n            return Tuple.Create(geomObjs, canRevertToMesh);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The shape edit scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      /// <returns>The created geometry.</returns>\r\n      protected override IList<GeometryObject> CreateGeometryInternal(\r\n         IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid)\r\n      {\r\n         if (Outer == null || Outer.Faces.Count == 0)\r\n            return null;\r\n\r\n         Tuple<IList<GeometryObject>, bool> faceInfo = CollectFaces(shapeEditScope, scaledLcs, guid);\r\n\r\n         IList<GeometryObject> geomObjs = faceInfo.Item1;\r\n         if (geomObjs == null || geomObjs.Count == 0)\r\n         {\r\n            if (faceInfo.Item2) // canRevertToMesh\r\n            {\r\n               using (IFCImportShapeEditScope.BuildPreferenceSetter setter =\r\n                   new IFCImportShapeEditScope.BuildPreferenceSetter(shapeEditScope, IFCImportShapeEditScope.BuildPreferenceType.AnyMesh))\r\n               {\r\n                  faceInfo = CollectFaces(shapeEditScope, scaledLcs, guid);\r\n                  geomObjs = faceInfo.Item1;\r\n               }\r\n            }\r\n         }\r\n\r\n         if (geomObjs == null || geomObjs.Count == 0)\r\n         {\r\n            // Couldn't use fallback, or fallback didn't work.\r\n            Importer.TheLog.LogWarning(Id, \"Couldn't create any geometry.\", false);\r\n            return null;\r\n         }\r\n\r\n         return geomObjs;\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcManifoldSolidBrep)\r\n      {\r\n         base.Process(ifcManifoldSolidBrep);\r\n\r\n         // We will not fail if the transform is not given, but instead assume it to be the identity.\r\n         IFCAnyHandle ifcOuter = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcManifoldSolidBrep, \"Outer\", true);\r\n         Outer = IFCClosedShell.ProcessIFCClosedShell(ifcOuter);\r\n\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n\r\n         // Ignoring Inner shells for now.\r\n         if (Outer != null)\r\n         {\r\n            try\r\n            {\r\n               IList<GeometryObject> solids = CreateGeometry(shapeEditScope, scaledLcs, guid);\r\n               if (solids != null)\r\n               {\r\n                  foreach (GeometryObject solid in solids)\r\n                  {\r\n                     shapeEditScope.AddGeometry(IFCSolidInfo.Create(Id, solid));\r\n                  }\r\n               }\r\n               else\r\n                  Importer.TheLog.LogError(Outer.Id, \"cannot create valid solid, ignoring.\", false);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n               Importer.TheLog.LogError(Outer.Id, ex.Message, false);\r\n            }\r\n         }\r\n      }\r\n\r\n      protected IFCManifoldSolidBrep(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCManifoldSolidBrep object from a handle of type IfcManifoldSolidBrep.\r\n      /// </summary>\r\n      /// <param name=\"ifcManifoldSolidBrep\">The IFC handle.</param>\r\n      /// <returns>The IFCManifoldSolidBrep object.</returns>\r\n      public static IFCManifoldSolidBrep ProcessIFCManifoldSolidBrep(IFCAnyHandle ifcManifoldSolidBrep)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcManifoldSolidBrep))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcManifoldSolidBrep);\r\n            return null;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcManifoldSolidBrep, IFCEntityType.IfcFacetedBrep))\r\n            return IFCFacetedBrep.ProcessIFCFacetedBrep(ifcManifoldSolidBrep);\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete) && IFCAnyHandleUtil.IsSubTypeOf(ifcManifoldSolidBrep, IFCEntityType.IfcAdvancedBrep))\r\n            return IFCAdvancedBrep.ProcessIFCAdvancedBrep(ifcManifoldSolidBrep);\r\n\r\n         IFCEntity manifoldSolidBrep;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcManifoldSolidBrep.StepId, out manifoldSolidBrep))\r\n            manifoldSolidBrep = new IFCManifoldSolidBrep(ifcManifoldSolidBrep);\r\n         return (manifoldSolidBrep as IFCManifoldSolidBrep);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCMappedItem.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCMappedItem : IFCRepresentationItem\r\n   {\r\n      IFCCartesianTransformOperator m_MappingTarget = null;\r\n\r\n      IFCRepresentationMap m_MappingSource = null;\r\n\r\n      /// <summary>\r\n      /// The transform, potentially including mirroring and non-uniform scaling.\r\n      /// </summary>\r\n      public IFCCartesianTransformOperator MappingTarget\r\n      {\r\n         get { return m_MappingTarget; }\r\n         protected set { m_MappingTarget = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The representation map containing the shared geometry.\r\n      /// </summary>\r\n      public IFCRepresentationMap MappingSource\r\n      {\r\n         get { return m_MappingSource; }\r\n         protected set { m_MappingSource = value; }\r\n      }\r\n\r\n      protected IFCMappedItem()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle item)\r\n      {\r\n         base.Process(item);\r\n\r\n         IFCAnyHandle mappingSource = IFCImportHandleUtil.GetRequiredInstanceAttribute(item, \"MappingSource\", false);\r\n         if (mappingSource == null)\r\n            return;\r\n\r\n         MappingSource = IFCRepresentationMap.ProcessIFCRepresentationMap(mappingSource);\r\n\r\n         // We will not fail if the transform is not given, but instead assume it to be the identity.\r\n         IFCAnyHandle mappingTarget = IFCImportHandleUtil.GetRequiredInstanceAttribute(item, \"MappingTarget\", false);\r\n         if (mappingTarget != null)\r\n            MappingTarget = IFCCartesianTransformOperator.ProcessIFCCartesianTransformOperator(mappingTarget);\r\n         else\r\n            MappingTarget = IFCCartesianTransformOperator.ProcessIFCCartesianTransformOperator();\r\n      }\r\n\r\n      private int FindAlternateGeometrySource(int originalId)\r\n      {\r\n         // NAVIS_TODO: Explain this.\r\n         if (!Importer.TheProcessor.FindAlternateGeometrySource)\r\n            return originalId;\r\n\r\n         // Copy some code from elsewhere to work out what the object was that got the\r\n         // geometry.\r\n         IFCTypeProduct typeProduct;\r\n         Importer.TheCache.RepMapToTypeProduct.TryGetValue(MappingSource.Id, out typeProduct);\r\n         return typeProduct?.Id ?? originalId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n\r\n         // Optimization for hybrid import.  MappingTarget will be null in this case.\r\n         if (MappingTarget == null)\r\n         {\r\n            return;\r\n         }\r\n\r\n         // Check scale; if it is uniform, create an instance.  If not, create a shape directly.\r\n         // TODO: Instead allow creation of instances based on similar scaling.\r\n         double scaleX = MappingTarget.Scale;\r\n         double scaleY = MappingTarget.ScaleY.HasValue ? MappingTarget.ScaleY.Value : scaleX;\r\n         double scaleZ = MappingTarget.ScaleZ.HasValue ? MappingTarget.ScaleZ.Value : scaleX;\r\n\r\n         bool currentIsUnitScale = MathUtil.IsAlmostEqual(scaleX, 1.0) &&\r\n            MathUtil.IsAlmostEqual(scaleY, 1.0) &&\r\n            MathUtil.IsAlmostEqual(scaleZ, 1.0);\r\n\r\n         Transform mappingTransform = MappingTarget.Transform;\r\n\r\n         Transform newScaledLcs =\r\n            (mappingTransform == null) ? scaledLcs : (scaledLcs?.Multiply(mappingTransform) ?? mappingTransform);\r\n\r\n         bool isFootPrint =\r\n            (shapeEditScope.ContainingRepresentation.Identifier == IFCRepresentationIdentifier.FootPrint);\r\n         \r\n         bool isUnitScale = currentIsUnitScale &&\r\n            ((newScaledLcs?.IsConformal ?? true) ?\r\n               MathUtil.IsAlmostEqual(newScaledLcs?.Scale ?? 1.0, 1.0) : false);\r\n\r\n         bool canCreateType = !shapeEditScope.PreventInstances && !isFootPrint && isUnitScale &&\r\n            (shapeEditScope.ContainingRepresentation != null);\r\n\r\n         if (canCreateType)\r\n         {\r\n            int mappingSourceId = MappingSource.Id;\r\n\r\n            int geometrySourceId = FindAlternateGeometrySource(mappingSourceId);\r\n            MappingSource.CreateShape(shapeEditScope, null, guid);\r\n\r\n            // IFCDefaultProcessor doesn't implement PostProcessMappedItem.  Skip this call to avoid\r\n            // GetCategoryId(), which can create an unnecessary subcategory (which also forces an\r\n            // unnecessary regeneration).\r\n            if ((shapeEditScope.Creator != null) && !(Importer.TheProcessor is IFCDefaultProcessor))\r\n            {\r\n               Importer.TheProcessor.PostProcessMappedItem(shapeEditScope.Creator.Id,\r\n                  shapeEditScope.Creator.GlobalId,\r\n                  shapeEditScope.Creator.EntityType.ToString(),\r\n                  shapeEditScope.Creator.GetCategoryId(shapeEditScope.Document),\r\n                  geometrySourceId,\r\n                  newScaledLcs);\r\n            }\r\n\r\n            // NAVIS_TODO: Figure out how not to do this.\r\n            IList<GeometryObject> instances = DirectShape.CreateGeometryInstance(\r\n               shapeEditScope.Document, mappingSourceId.ToString(), newScaledLcs);\r\n            foreach (GeometryObject instance in instances)\r\n               shapeEditScope.AddGeometry(IFCSolidInfo.Create(Id, instance));\r\n         }\r\n         else\r\n         {\r\n            if (!isUnitScale)\r\n            {\r\n               XYZ xScale = new XYZ(scaleX, 0.0, 0.0);\r\n               XYZ yScale = new XYZ(0.0, scaleY, 0.0);\r\n               XYZ zScale = new XYZ(0.0, 0.0, scaleZ);\r\n               Transform scaleTransform = Transform.Identity;\r\n               scaleTransform.set_Basis(0, xScale);\r\n               scaleTransform.set_Basis(1, yScale);\r\n               scaleTransform.set_Basis(2, zScale);\r\n               newScaledLcs = newScaledLcs.Multiply(scaleTransform);\r\n            }\r\n\r\n            MappingSource.CreateShape(shapeEditScope, newScaledLcs, guid);\r\n         }\r\n      }\r\n\r\n      protected IFCMappedItem(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCMappedItem object from a handle of type IfcMappedItem.\r\n      /// </summary>\r\n      /// <param name=\"ifcMappedItem\">The IFC handle.</param>\r\n      /// <returns>The IFCMappedItem object.</returns>\r\n      public static IFCMappedItem ProcessIFCMappedItem(IFCAnyHandle ifcMappedItem)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMappedItem))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcMappedItem);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity mappedItem;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcMappedItem.StepId, out mappedItem))\r\n            mappedItem = new IFCMappedItem(ifcMappedItem);\r\n         return (mappedItem as IFCMappedItem);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCMaterial.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\nusing Revit.IFC.Import.Properties;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class to represent materials in IFC files.\r\n   /// </summary>\r\n   public class IFCMaterial : IFCEntity, IIFCMaterialSelect\r\n   {\r\n      private string m_Name = null;\r\n\r\n      private IFCProductRepresentation m_MaterialDefinitionRepresentation = null;\r\n\r\n      private ElementId m_CreatedElementId = ElementId.InvalidElementId;\r\n\r\n      /// <summary>\r\n      /// The name of the material.\r\n      /// </summary>\r\n      public string Name\r\n      {\r\n         get { return m_Name; }\r\n         protected set { m_Name = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The associated representation of the material.\r\n      /// </summary>\r\n      public IFCProductRepresentation MaterialDefinitionRepresentation\r\n      {\r\n         get { return m_MaterialDefinitionRepresentation; }\r\n         protected set { m_MaterialDefinitionRepresentation = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the main element id associated with this material.\r\n      /// </summary>\r\n      public ElementId GetMaterialElementId()\r\n      {\r\n         if (m_CreatedElementId == ElementId.InvalidElementId && IsValidForCreation)\r\n            Create(IFCImportFile.TheFile.Document);\r\n         return m_CreatedElementId;\r\n      }\r\n\r\n      protected IFCMaterial()\r\n      {\r\n      }\r\n\r\n      protected IFCMaterial(IFCAnyHandle ifcMaterial)\r\n      {\r\n         Process(ifcMaterial);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcMaterial)\r\n      {\r\n         base.Process(ifcMaterial);\r\n\r\n         Name = IFCImportHandleUtil.GetRequiredStringAttribute(ifcMaterial, \"Name\", true);\r\n\r\n         if (Importer.TheOptions.HybridImportOptions == null)\r\n         {\r\n            List<IFCAnyHandle> hasRepresentation = null;\r\n            if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC2x3))\r\n               hasRepresentation = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcMaterial, \"HasRepresentation\");\r\n\r\n            if ((hasRepresentation?.Count ?? 0) == 1)\r\n            {\r\n               if (!IFCAnyHandleUtil.IsSubTypeOf(hasRepresentation[0], IFCEntityType.IfcMaterialDefinitionRepresentation))\r\n                  Importer.TheLog.LogUnexpectedTypeError(hasRepresentation[0], IFCEntityType.IfcMaterialDefinitionRepresentation, false);\r\n               else\r\n                  MaterialDefinitionRepresentation = IFCProductRepresentation.ProcessIFCProductRepresentation(hasRepresentation[0]);\r\n            }\r\n         }\r\n\r\n         Importer.TheLog.AddToElementCount();\r\n      }\r\n\r\n      private static string GetMaterialName(int id, string originalName)\r\n      {\r\n         // Disallow creating multiple materials with the same name.  This means that the\r\n         // same material, with different styles, will be created with different names.\r\n         string materialName = Importer.TheCache.CreatedMaterials.GetUniqueMaterialName(originalName, id);\r\n\r\n         string revitMaterialName = IFCNamingUtil.CleanIFCName(materialName);\r\n         if (revitMaterialName != null)\r\n            return revitMaterialName;\r\n\r\n         return string.Format(Resources.IFCDefaultMaterialName, id);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the material list for this IFCMaterialSelect.\r\n      /// </summary>\r\n      public IList<IFCMaterial> GetMaterials()\r\n      {\r\n         IList<IFCMaterial> materials = new List<IFCMaterial>() { this };\r\n         return materials;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a Revit Material.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"id\">The id of the IFCEntity, used to avoid creating duplicate material names.</param>\r\n      /// <param name=\"originalName\">The base name of the material.</param>\r\n      /// <param name=\"materialInfo\">The material information.</param>\r\n      /// <returns>The element id.</returns>\r\n      public static ElementId CreateMaterialElem(Document doc, int id, string originalName, IFCMaterialInfo materialInfo)\r\n      {\r\n         ElementId createdElementId = Importer.TheCache.CreatedMaterials.FindMatchingMaterial(originalName, id, materialInfo);\r\n         if (createdElementId != ElementId.InvalidElementId)\r\n            return createdElementId;\r\n\r\n         if (!materialInfo.IsValid())\r\n            return ElementId.InvalidElementId;\r\n\r\n         string revitMaterialName = GetMaterialName(id, originalName);\r\n\r\n         createdElementId = Material.Create(doc, revitMaterialName);\r\n         if (createdElementId == ElementId.InvalidElementId)\r\n            return createdElementId;\r\n\r\n         materialInfo.ElementId = createdElementId;\r\n         Importer.TheCache.CreatedMaterials.Add(originalName, materialInfo);\r\n\r\n         // Get info.\r\n         Material materialElem = doc.GetElement(createdElementId) as Material;\r\n         if (materialElem == null)\r\n            return ElementId.InvalidElementId;\r\n\r\n         bool materialHasValidColor = false;\r\n\r\n         // We don't want an invalid value set below to prevent creating an element; log the message and move on.\r\n         try\r\n         {\r\n            if (materialInfo.Color != null)\r\n            {\r\n               materialElem.Color = materialInfo.Color;\r\n               materialHasValidColor = true;\r\n            }\r\n            else\r\n            {\r\n               materialElem.Color = new Color(127, 127, 127);\r\n            }\r\n\r\n            if (materialInfo.Transparency.HasValue)\r\n               materialElem.Transparency = materialInfo.Transparency.Value;\r\n\r\n            if (materialInfo.Shininess.HasValue)\r\n               materialElem.Shininess = materialInfo.Shininess.Value;\r\n\r\n            if (materialInfo.Smoothness.HasValue)\r\n               materialElem.Smoothness = materialInfo.Smoothness.Value;\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            Importer.TheLog.LogError(id, \"Couldn't set some Material values: \" + ex.Message, false);\r\n         }\r\n\r\n         if (!materialHasValidColor)\r\n            Importer.TheCache.MaterialsWithNoColor.Add(createdElementId);\r\n\r\n         if (Importer.TheOptions.VerboseLogging)\r\n         {\r\n            string comment = \"Created Material: \" + revitMaterialName\r\n                + \" with color: (\" + materialElem.Color.Red + \", \" + materialElem.Color.Green + \", \" + materialElem.Color.Blue + \") \"\r\n                + \"transparency: \" + materialElem.Transparency + \" shininess: \" + materialElem.Shininess + \" smoothness: \" + materialElem.Smoothness;\r\n            Importer.TheLog.LogComment(id, comment, false);\r\n         }\r\n\r\n         Importer.TheLog.AddCreatedMaterial(doc, createdElementId);\r\n         return createdElementId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Traverse through the MaterialDefinitionRepresentation to get the style information relevant to the material.\r\n      /// </summary>\r\n      /// <returns>The one IFCSurfaceStyle.</returns>\r\n      private IFCSurfaceStyle GetSurfaceStyle()\r\n      {\r\n         if (MaterialDefinitionRepresentation != null)\r\n            return MaterialDefinitionRepresentation.GetSurfaceStyle();\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a Revit material based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      public void Create(Document doc)\r\n      {\r\n         // TODO: support cut pattern id and cut pattern color.\r\n         try\r\n         {\r\n            string name = Name;\r\n            if (string.IsNullOrEmpty(name))\r\n               name = String.Format(Resources.IFCDefaultMaterialName, Id);\r\n\r\n            if (m_CreatedElementId == ElementId.InvalidElementId && IsValidForCreation)\r\n            {\r\n               IFCSurfaceStyle surfaceStyle = GetSurfaceStyle();\r\n               if (surfaceStyle != null)\r\n                  m_CreatedElementId = surfaceStyle.Create(doc, name, null, Id);\r\n               else\r\n               {\r\n                  IFCMaterialInfo materialInfo = IFCMaterialInfo.Create(null, null, null, null, ElementId.InvalidElementId);\r\n                  m_CreatedElementId = CreateMaterialElem(doc, Id, Name, materialInfo);\r\n               }\r\n            }\r\n            else\r\n            {\r\n               IsValidForCreation = false;\r\n            }\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            IsValidForCreation = false;\r\n            Importer.TheLog.LogCreationError(this, ex.Message, false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcMaterial object.\r\n      /// </summary>\r\n      /// <param name=\"ifcMaterial\">The IfcMaterial handle.</param>\r\n      /// <returns>The IFCMaterial object.</returns>\r\n      public static IFCMaterial ProcessIFCMaterial(IFCAnyHandle ifcMaterial)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterial))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcMaterial);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity material;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcMaterial.StepId, out material))\r\n            material = new IFCMaterial(ifcMaterial);\r\n         return (material as IFCMaterial);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCMaterialConstituent.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class representing IFCMaterialConstituent\r\n   /// </summary>\r\n   public class IFCMaterialConstituent : IFCEntity, IIFCMaterialSelect\r\n   {\r\n      string m_Name = null;\r\n      string m_Description = null;\r\n      IFCMaterial m_Material = null;\r\n      double? m_Fraction = null;\r\n      string m_Category = null;\r\n\r\n      /// <summary>\r\n      /// Get the Name attribute\r\n      /// </summary>\r\n      public string Name\r\n      {\r\n         get { return m_Name; }\r\n         protected set { m_Name = value; }\r\n      }\r\n\r\n      // Get the Description attribute\r\n      public string Description\r\n      {\r\n         get { return m_Description; }\r\n         protected set { m_Description = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the associated IFCMaterial\r\n      /// </summary>\r\n      public IFCMaterial Material\r\n      {\r\n         get { return m_Material; }\r\n         protected set { m_Material = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the Priority attribute\r\n      /// </summary>\r\n      public double? Fraction\r\n      {\r\n         get { return m_Fraction; }\r\n         protected set { m_Fraction = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      ///  Get the Category attribute\r\n      /// </summary>\r\n      public string Category\r\n      {\r\n         get { return m_Category; }\r\n         set { m_Category = value; }\r\n      }\r\n\r\n      public void Create(Document doc)\r\n      {\r\n         if (Material != null)\r\n            Material.Create(doc);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the material (in list) for this IFCMaterialSelect\r\n      /// </summary>\r\n      /// <returns></returns>\r\n      public IList<IFCMaterial> GetMaterials()\r\n      {\r\n         IList<IFCMaterial> materials = new List<IFCMaterial>();\r\n         if (Material != null)\r\n            materials.Add(Material);\r\n         return materials;\r\n      }\r\n\r\n      protected IFCMaterialConstituent()\r\n      {\r\n      }\r\n\r\n      protected IFCMaterialConstituent(IFCAnyHandle ifcMaterialConstituent)\r\n      {\r\n         Process(ifcMaterialConstituent);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcMaterialConstituent)\r\n      {\r\n         base.Process(ifcMaterialConstituent);\r\n\r\n         IFCAnyHandle ifcMaterial = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcMaterialConstituent, \"Material\", true);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterial))\r\n            Material = IFCMaterial.ProcessIFCMaterial(ifcMaterial);\r\n\r\n         Name = IFCImportHandleUtil.GetOptionalStringAttribute(ifcMaterialConstituent, \"Name\", null);\r\n         Description = IFCImportHandleUtil.GetOptionalStringAttribute(ifcMaterialConstituent, \"Description\", null);\r\n         double fraction = IFCImportHandleUtil.GetOptionalRealAttribute(ifcMaterialConstituent, \"Fraction\", -1);\r\n         if (fraction >= 0)\r\n            Fraction = fraction;\r\n         Category = IFCImportHandleUtil.GetOptionalStringAttribute(ifcMaterialConstituent, \"Category\", null);\r\n         return;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Process an IFCMaterialConstituent entity\r\n      /// </summary>\r\n      /// <param name=\"ifcMaterialConstituent\">the material constituent</param>\r\n      /// <returns>returns IFCMaterialCOnstituent object</returns>\r\n      public static IFCMaterialConstituent ProcessIFCMaterialConstituent(IFCAnyHandle ifcMaterialConstituent)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterialConstituent))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcMaterialConstituent);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity materialConstituent;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcMaterialConstituent.StepId, out materialConstituent))\r\n            materialConstituent = new IFCMaterialConstituent(ifcMaterialConstituent);\r\n         return (materialConstituent as IFCMaterialConstituent);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCMaterialConstituentSet.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Linq;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\nusing Revit.IFC.Import.Properties;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class representing IFCMaterialConstituentSet\r\n   /// </summary>\r\n   public class IFCMaterialConstituentSet : IFCEntity, IIFCMaterialSelect\r\n   {\r\n      string m_Name = null;\r\n      string m_Description = null;\r\n      IList<IFCMaterialConstituent> m_MaterialConstituents = null;\r\n\r\n      /// <summary>\r\n      /// Get the Name attribute\r\n      /// </summary>\r\n      public string Name\r\n      {\r\n         get { return m_Name; }\r\n         protected set { m_Name = value; }\r\n      }\r\n\r\n      // Get the Description attribute\r\n      public string Description\r\n      {\r\n         get { return m_Description; }\r\n         protected set { m_Description = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the associated list of MaterialConstituents\r\n      /// </summary>\r\n      public IList<IFCMaterialConstituent> MaterialConstituents\r\n      {\r\n         get\r\n         {\r\n            if (m_MaterialConstituents == null)\r\n               m_MaterialConstituents = new List<IFCMaterialConstituent>();\r\n            return m_MaterialConstituents;\r\n         }\r\n      }\r\n\r\n      public void Create(Document doc)\r\n      {\r\n         foreach (IFCMaterialConstituent materialConstituent in MaterialConstituents)\r\n            materialConstituent.Create(doc);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the list of associated Materials\r\n      /// </summary>\r\n      /// <returns></returns>\r\n      public IList<IFCMaterial> GetMaterials()\r\n      {\r\n         HashSet<IFCMaterial> materials = new HashSet<IFCMaterial>();\r\n         foreach (IFCMaterialConstituent materialConstituent in MaterialConstituents)\r\n         {\r\n            IList<IFCMaterial> constituentMaterials = materialConstituent.GetMaterials();\r\n            foreach (IFCMaterial material in constituentMaterials)\r\n               materials.Add(material);\r\n         }\r\n         return materials.ToList();\r\n      }\r\n\r\n      protected IFCMaterialConstituentSet()\r\n      {\r\n      }\r\n\r\n      protected IFCMaterialConstituentSet(IFCAnyHandle ifcMaterialConstituentSet)\r\n      {\r\n         Process(ifcMaterialConstituentSet);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcMaterialConstituentSet)\r\n      {\r\n         base.Process(ifcMaterialConstituentSet);\r\n\r\n         IList<IFCAnyHandle> ifcMaterialConsitutuents =\r\n             IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcMaterialConstituentSet, \"MaterialConstituents\");\r\n         if (ifcMaterialConsitutuents == null)\r\n         {\r\n            Importer.TheLog.LogError(ifcMaterialConstituentSet.Id, \"Expected at least 1 MaterialConsituent, found none.\", false);\r\n            return;\r\n         }\r\n\r\n         foreach (IFCAnyHandle ifcMaterialConstituent in ifcMaterialConsitutuents)\r\n         {\r\n            IFCMaterialConstituent materialConstituent = IFCMaterialConstituent.ProcessIFCMaterialConstituent(ifcMaterialConstituent);\r\n            if (materialConstituent != null)\r\n               MaterialConstituents.Add(materialConstituent);\r\n         }\r\n\r\n         Name = IFCImportHandleUtil.GetOptionalStringAttribute(ifcMaterialConstituentSet, \"Name\", null);\r\n         Description = IFCImportHandleUtil.GetOptionalStringAttribute(ifcMaterialConstituentSet, \"Description\", null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFCMaterialConstituentSet entity.\r\n      /// </summary>\r\n      /// <param name=\"IFCMaterialConstituentSet\">The IFCMaterialConstituentSet handle.</param>\r\n      /// <returns>The IFCMaterialConstituentSet object.</returns>\r\n      public static IFCMaterialConstituentSet ProcessIFCMaterialConstituentSet(IFCAnyHandle ifcMaterialConstituentSet)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterialConstituentSet))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcMaterialConstituentSet);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity materialConstituentSet;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcMaterialConstituentSet.StepId, out materialConstituentSet))\r\n            materialConstituentSet = new IFCMaterialConstituentSet(ifcMaterialConstituentSet);\r\n         return (materialConstituentSet as IFCMaterialConstituentSet);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCMaterialLayer.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\nusing Revit.IFC.Import.Properties;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class to represent IfcMaterialLayer.\r\n   /// </summary>\r\n   public class IFCMaterialLayer : IFCEntity, IIFCMaterialSelect\r\n   {\r\n      IFCMaterial m_Material = null;\r\n\r\n      double m_LayerThickness = 0.0;\r\n\r\n      IFCLogical m_IsVentilated = IFCLogical.False;   // default value - layer is solid material.\r\n\r\n      /// <summary>\r\n      /// Get the associated IFCMaterial.\r\n      /// </summary>\r\n      public IFCMaterial Material\r\n      {\r\n         get { return m_Material; }\r\n         protected set { m_Material = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the associated layer thickness.\r\n      /// </summary>\r\n      public double LayerThickness\r\n      {\r\n         get { return m_LayerThickness; }\r\n         protected set { m_LayerThickness = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the associated IsVentilated value.\r\n      /// </summary>\r\n      public IFCLogical IsVentilated\r\n      {\r\n         get { return m_IsVentilated; }\r\n         protected set { m_IsVentilated = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns true if that material layer is an air gap.  This is the case if the material layer is either ventilated,\r\n      /// or the status is unknown (from the IFC2x3 definition).\r\n      /// </summary>\r\n      public bool IsAirGap()\r\n      {\r\n         return (IsVentilated != IFCLogical.False);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the material list for this IFCMaterialSelect.\r\n      /// </summary>\r\n      public IList<IFCMaterial> GetMaterials()\r\n      {\r\n         IList<IFCMaterial> materials = new List<IFCMaterial>();\r\n         if (Material != null)\r\n            materials.Add(Material);\r\n         return materials;\r\n      }\r\n\r\n      protected IFCMaterialLayer()\r\n      {\r\n      }\r\n\r\n      protected IFCMaterialLayer(IFCAnyHandle ifcMaterialLayer)\r\n      {\r\n         Process(ifcMaterialLayer);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcMaterialLayer)\r\n      {\r\n         base.Process(ifcMaterialLayer);\r\n\r\n         IFCAnyHandle ifcMaterial = IFCImportHandleUtil.GetOptionalInstanceAttribute(ifcMaterialLayer, \"Material\");\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterial))\r\n            Material = IFCMaterial.ProcessIFCMaterial(ifcMaterial);\r\n\r\n         bool found = false;\r\n         LayerThickness = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(ifcMaterialLayer, \"LayerThickness\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         // GetOptionalLogicalAttribute defaults to Unknown.  We want to default to false here.\r\n         IsVentilated = IFCImportHandleUtil.GetOptionalLogicalAttribute(ifcMaterialLayer, \"IsVentilated\", out found);\r\n         if (!found)\r\n            IsVentilated = IFCLogical.False;\r\n      }\r\n\r\n      public void Create(Document doc)\r\n      {\r\n         if (Material != null)\r\n            Material.Create(doc);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcMaterialLayer entity.\r\n      /// </summary>\r\n      /// <param name=\"ifcMaterialLayer\">The IfcMaterialLayer handle.</param>\r\n      /// <returns>The IFCMaterialLayer object.</returns>\r\n      public static IFCMaterialLayer ProcessIFCMaterialLayer(IFCAnyHandle ifcMaterialLayer)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterialLayer))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcMaterialLayer);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity materialLayer;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcMaterialLayer.StepId, out materialLayer))\r\n            materialLayer = new IFCMaterialLayer(ifcMaterialLayer);\r\n         return (materialLayer as IFCMaterialLayer);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCMaterialLayerSet.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Linq;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\nusing Revit.IFC.Import.Properties;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class to represent IfcMaterialLayerSet.\r\n   /// </summary>\r\n   public class IFCMaterialLayerSet : IFCEntity, IIFCMaterialSelect\r\n   {\r\n      IList<IFCMaterialLayer> m_MaterialLayers = null;\r\n\r\n      string m_LayerSetName = null;\r\n\r\n      /// <summary>\r\n      /// Get the associated list of IFCMaterialLayers.\r\n      /// </summary>\r\n      public IList<IFCMaterialLayer> MaterialLayers\r\n      {\r\n         get\r\n         {\r\n            if (m_MaterialLayers == null)\r\n               m_MaterialLayers = new List<IFCMaterialLayer>();\r\n            return m_MaterialLayers;\r\n         }\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the associated optional LayerSetName, if any.\r\n      /// </summary>\r\n      public string LayerSetName\r\n      {\r\n         get { return m_LayerSetName; }\r\n         protected set { m_LayerSetName = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the material list for this IFCMaterialSelect.\r\n      /// </summary>\r\n      public IList<IFCMaterial> GetMaterials()\r\n      {\r\n         HashSet<IFCMaterial> materials = new HashSet<IFCMaterial>();\r\n         foreach (IFCMaterialLayer materialLayer in MaterialLayers)\r\n         {\r\n            IList<IFCMaterial> layerMaterials = materialLayer.GetMaterials();\r\n            foreach (IFCMaterial material in layerMaterials)\r\n               materials.Add(material);\r\n         }\r\n         return materials.ToList();\r\n      }\r\n\r\n      protected IFCMaterialLayerSet()\r\n      {\r\n      }\r\n\r\n      protected IFCMaterialLayerSet(IFCAnyHandle ifcMaterialLayerSet)\r\n      {\r\n         Process(ifcMaterialLayerSet);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcMaterialLayerSet)\r\n      {\r\n         base.Process(ifcMaterialLayerSet);\r\n\r\n         IList<IFCAnyHandle> ifcMaterialLayers =\r\n             IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcMaterialLayerSet, \"MaterialLayers\");\r\n         if (ifcMaterialLayers == null)\r\n         {\r\n            Importer.TheLog.LogError(ifcMaterialLayerSet.Id, \"Expected at least 1 IfcMaterialLayer, found none.\", false);\r\n            return;\r\n         }\r\n\r\n         foreach (IFCAnyHandle ifcMaterialLayer in ifcMaterialLayers)\r\n         {\r\n            IFCMaterialLayer materialLayer = null;\r\n            if (materialLayer is IFCMaterialLayerWithOffsets)\r\n               materialLayer = IFCMaterialLayerWithOffsets.ProcessIFCMaterialLayerWithOffsets(ifcMaterialLayer);\r\n            else\r\n               materialLayer = IFCMaterialLayer.ProcessIFCMaterialLayer(ifcMaterialLayer);\r\n\r\n            if (materialLayer != null)\r\n               MaterialLayers.Add(materialLayer);\r\n         }\r\n\r\n         LayerSetName = IFCImportHandleUtil.GetOptionalStringAttribute(ifcMaterialLayerSet, \"LayerSetName\", null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create the contained materials within the IfcMaterialLayerSet.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      public void Create(Document doc)\r\n      {\r\n         foreach (IFCMaterialLayer materialLayer in MaterialLayers)\r\n            materialLayer.Create(doc);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcMaterialLayerSet entity.\r\n      /// </summary>\r\n      /// <param name=\"ifcMaterialLayerSet\">The IfcMaterialLayerSet handle.</param>\r\n      /// <returns>The IFCMaterialLayerSet object.</returns>\r\n      public static IFCMaterialLayerSet ProcessIFCMaterialLayerSet(IFCAnyHandle ifcMaterialLayerSet)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterialLayerSet))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcMaterialLayerSet);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity materialLayerSet;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcMaterialLayerSet.StepId, out materialLayerSet))\r\n            materialLayerSet = new IFCMaterialLayerSet(ifcMaterialLayerSet);\r\n         return (materialLayerSet as IFCMaterialLayerSet);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCMaterialLayerSetUsage.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\nusing Revit.IFC.Import.Properties;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that mimics IfcMaterialLayerSetUsage.\r\n   /// </summary>\r\n   /// <remarks>This class is fairly complex in its behavior; more information can be found at:\r\n   /// http://www.buildingsmart-tech.org/ifc/IFC4/final/html/index.htm, section 8.10.3.8.\r\n   /// </remarks>\r\n   public class IFCMaterialLayerSetUsage : IFCEntity, IIFCMaterialSelect\r\n   {\r\n      IFCMaterialLayerSet m_MaterialLayerSet = null;\r\n\r\n      IFCLayerSetDirection m_Direction = IFCLayerSetDirection.Axis3;\r\n\r\n      IFCDirectionSense m_DirectionSense = IFCDirectionSense.Positive;\r\n\r\n      double m_Offset = 0.0;\r\n\r\n      /// <summary>\r\n      /// Get the associated IFCMaterialLayerSet.\r\n      /// </summary>\r\n      public IFCMaterialLayerSet MaterialLayerSet\r\n      {\r\n         get { return m_MaterialLayerSet; }\r\n         protected set { m_MaterialLayerSet = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the associated IFCLayerSetDirection enum.\r\n      /// </summary>\r\n      public IFCLayerSetDirection Direction\r\n      {\r\n         get { return m_Direction; }\r\n         protected set { m_Direction = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the associated IFCDirectionSense enum.\r\n      /// </summary>\r\n      public IFCDirectionSense DirectionSense\r\n      {\r\n         get { return m_DirectionSense; }\r\n         protected set { m_DirectionSense = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the associated OffsetFromReferenceLine value.\r\n      /// </summary>\r\n      public double Offset\r\n      {\r\n         get { return m_Offset; }\r\n         protected set { m_Offset = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the material list for this IFCMaterialSelect.\r\n      /// </summary>\r\n      public IList<IFCMaterial> GetMaterials()\r\n      {\r\n         if (MaterialLayerSet == null)\r\n            return new List<IFCMaterial>();\r\n\r\n         return MaterialLayerSet.GetMaterials();\r\n      }\r\n\r\n      protected IFCMaterialLayerSetUsage()\r\n      {\r\n      }\r\n\r\n      protected IFCMaterialLayerSetUsage(IFCAnyHandle ifcMaterialLayerSetUsage)\r\n      {\r\n         Process(ifcMaterialLayerSetUsage);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcMaterialLayerSetUsage)\r\n      {\r\n         base.Process(ifcMaterialLayerSetUsage);\r\n\r\n         IFCAnyHandle ifcMaterialLayerSet =\r\n             IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcMaterialLayerSetUsage, \"ForLayerSet\", true);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterialLayerSet))\r\n            MaterialLayerSet = IFCMaterialLayerSet.ProcessIFCMaterialLayerSet(ifcMaterialLayerSet);\r\n\r\n         Direction = IFCEnums.GetSafeEnumerationAttribute(ifcMaterialLayerSetUsage, \"LayerSetDirection\", IFCLayerSetDirection.Axis3);\r\n\r\n         DirectionSense = IFCEnums.GetSafeEnumerationAttribute(ifcMaterialLayerSetUsage, \"DirectionSense\", IFCDirectionSense.Positive);\r\n\r\n         bool found = false;\r\n         Offset = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(ifcMaterialLayerSetUsage, \"OffsetFromReferenceLine\", out found);\r\n         if (!found)\r\n            Importer.TheLog.LogWarning(ifcMaterialLayerSetUsage.StepId, \"No Offset defined, defaulting to 0.\", false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create the contained materials within the IfcMaterialLayerSetUsage.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      public void Create(Document doc)\r\n      {\r\n         if (MaterialLayerSet != null)\r\n            MaterialLayerSet.Create(doc);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcMaterialLayerSetUsage entity.\r\n      /// </summary>\r\n      /// <param name=\"ifcMaterialLayerSetUsage\">The IfcMaterialLayerSetUsage handle.</param>\r\n      /// <returns>The IFCMaterialLayerSetUsage object.</returns>\r\n      public static IFCMaterialLayerSetUsage ProcessIFCMaterialLayerSetUsage(IFCAnyHandle ifcMaterialLayerSetUsage)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterialLayerSetUsage))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcMaterialLayerSetUsage);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity materialLayerSetUsage;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcMaterialLayerSetUsage.StepId, out materialLayerSetUsage))\r\n            materialLayerSetUsage = new IFCMaterialLayerSetUsage(ifcMaterialLayerSetUsage);\r\n         return (materialLayerSetUsage as IFCMaterialLayerSetUsage);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCMaterialLayerWithOffsets.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\nusing Revit.IFC.Import.Properties;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCMaterialLayerWithOffsets : IFCMaterialLayer, IIFCMaterialSelect\r\n   {\r\n      IFCLayerSetDirection m_OffsetDirection = IFCLayerSetDirection.Axis3;\r\n      IList<double> m_OffsetValues = null;\r\n\r\n      public IList<double> OffsetValues\r\n      {\r\n         get { return m_OffsetValues; }\r\n         protected set { m_OffsetValues = value; }\r\n      }\r\n\r\n      public IFCLayerSetDirection OffsetDirection\r\n      {\r\n         get { return m_OffsetDirection; }\r\n         protected set { m_OffsetDirection = value; }\r\n      }\r\n\r\n      protected IFCMaterialLayerWithOffsets()\r\n      {\r\n      }\r\n\r\n      protected IFCMaterialLayerWithOffsets(IFCAnyHandle ifcMaterialLayerWithOffsets)\r\n      {\r\n         Process(ifcMaterialLayerWithOffsets);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcMaterialLayerWithOffsets)\r\n      {\r\n         base.Process(ifcMaterialLayerWithOffsets);\r\n\r\n         OffsetValues = IFCAnyHandleUtil.GetAggregateDoubleAttribute<List<double>>(ifcMaterialLayerWithOffsets, \"OffsetValues\");\r\n         OffsetDirection = (IFCLayerSetDirection)Enum.Parse(typeof(IFCLayerSetDirection), IFCAnyHandleUtil.GetEnumerationAttribute(ifcMaterialLayerWithOffsets, \"OffsetDirection\"));\r\n      }\r\n\r\n      public static IFCMaterialLayerWithOffsets ProcessIFCMaterialLayerWithOffsets(IFCAnyHandle ifcMaterialLayerWithOffsets)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterialLayerWithOffsets))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcMaterialLayerWithOffsets);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity materialLayerWithOffsets;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcMaterialLayerWithOffsets.StepId, out materialLayerWithOffsets))\r\n            materialLayerWithOffsets = new IFCMaterialLayerWithOffsets(ifcMaterialLayerWithOffsets);\r\n         return (materialLayerWithOffsets as IFCMaterialLayerWithOffsets);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCMaterialList.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Linq;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\nusing Revit.IFC.Import.Properties;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class to represent IfcMaterialList.\r\n   /// </summary>\r\n   public class IFCMaterialList : IFCEntity, IIFCMaterialSelect\r\n   {\r\n      IList<IFCMaterial> m_Materials = null;\r\n\r\n      /// <summary>\r\n      /// Get the associated list of IFCMaterialLayers.\r\n      /// </summary>\r\n      public IList<IFCMaterial> Materials\r\n      {\r\n         get\r\n         {\r\n            if (m_Materials == null)\r\n               m_Materials = new List<IFCMaterial>();\r\n            return m_Materials;\r\n         }\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the material list for this IFCMaterialSelect.\r\n      /// </summary>\r\n      public IList<IFCMaterial> GetMaterials()\r\n      {\r\n         return Materials;\r\n      }\r\n\r\n      protected IFCMaterialList()\r\n      {\r\n      }\r\n\r\n      protected IFCMaterialList(IFCAnyHandle ifcMaterialList)\r\n      {\r\n         Process(ifcMaterialList);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcMaterialList)\r\n      {\r\n         base.Process(ifcMaterialList);\r\n\r\n         IList<IFCAnyHandle> ifcMaterials =\r\n             IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcMaterialList, \"Materials\");\r\n         if (ifcMaterials == null)\r\n         {\r\n            Importer.TheLog.LogError(ifcMaterialList.Id, \"Expected at least 1 IfcMaterial, found none.\", false);\r\n            return;\r\n         }\r\n\r\n         foreach (IFCAnyHandle ifcMaterial in ifcMaterials)\r\n         {\r\n            IFCMaterial material = IFCMaterial.ProcessIFCMaterial(ifcMaterial);\r\n            if (material != null)\r\n               Materials.Add(material);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create the contained materials within the IfcMaterialList.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      public void Create(Document doc)\r\n      {\r\n         foreach (IFCMaterial material in Materials)\r\n            material.Create(doc);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcMaterialList entity.\r\n      /// </summary>\r\n      /// <param name=\"ifcMaterialList\">The IfcMaterialList handle.</param>\r\n      /// <returns>The IFCMaterialList object.</returns>\r\n      public static IFCMaterialList ProcessIFCMaterialList(IFCAnyHandle ifcMaterialList)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterialList))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcMaterialList);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity materialList;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcMaterialList.StepId, out materialList))\r\n            materialList = new IFCMaterialList(ifcMaterialList);\r\n         return (materialList as IFCMaterialList);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCMaterialProfile.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\nusing Revit.IFC.Import.Properties;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class to represent IFCMaterialProfile\r\n   /// </summary>\r\n   public class IFCMaterialProfile : IFCEntity, IIFCMaterialSelect\r\n   {\r\n      string m_Name = null;\r\n      string m_Description = null;\r\n      IFCProfileDef m_Profile = null;\r\n      IFCMaterial m_Material = null;\r\n      double? m_Priority = null;\r\n      string m_Category = null;\r\n\r\n      /// <summary>\r\n      /// Get the Name attribute\r\n      /// </summary>\r\n      public string Name\r\n      {\r\n         get { return m_Name; }\r\n         protected set { m_Name = value; }\r\n      }\r\n\r\n      // Get the Description attribute\r\n      public string Description\r\n      {\r\n         get { return m_Description; }\r\n         protected set { m_Description = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the associated IFCProfileDef\r\n      /// </summary>\r\n      public IFCProfileDef Profile\r\n      {\r\n         get { return m_Profile; }\r\n         protected set { m_Profile = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the associated IFCMaterial\r\n      /// </summary>\r\n      public IFCMaterial Material\r\n      {\r\n         get { return m_Material; }\r\n         protected set { m_Material = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the Priority attribute\r\n      /// </summary>\r\n      public double? Priority\r\n      {\r\n         get { return m_Priority; }\r\n         protected set { m_Priority = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      ///  Get the Category attribute\r\n      /// </summary>\r\n      public string Category\r\n      {\r\n         get { return m_Category; }\r\n         set { m_Category = value; }\r\n      }\r\n\r\n      public void Create(Document doc)\r\n      {\r\n         if (Material != null)\r\n            Material.Create(doc);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the material (in list) for this IFCMaterialSelect\r\n      /// </summary>\r\n      /// <returns></returns>\r\n      public IList<IFCMaterial> GetMaterials()\r\n      {\r\n         IList<IFCMaterial> materials = new List<IFCMaterial>();\r\n         if (Material != null)\r\n            materials.Add(Material);\r\n         return materials;\r\n      }\r\n\r\n      protected IFCMaterialProfile()\r\n      {\r\n      }\r\n\r\n      protected IFCMaterialProfile(IFCAnyHandle ifcMaterialProfile)\r\n      {\r\n         Process(ifcMaterialProfile);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcMaterialProfile)\r\n      {\r\n         base.Process(ifcMaterialProfile);\r\n\r\n         IFCAnyHandle ifcMaterial = IFCImportHandleUtil.GetOptionalInstanceAttribute(ifcMaterialProfile, \"Material\");\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterial))\r\n            Material = IFCMaterial.ProcessIFCMaterial(ifcMaterial);\r\n\r\n         IFCAnyHandle profileHnd = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcMaterialProfile, \"Profile\", true);\r\n         if (profileHnd != null)\r\n            Profile = IFCProfileDef.ProcessIFCProfileDef(profileHnd);\r\n\r\n         Name = IFCImportHandleUtil.GetOptionalStringAttribute(ifcMaterialProfile, \"Name\", null);\r\n         Description = IFCImportHandleUtil.GetOptionalStringAttribute(ifcMaterialProfile, \"Description\", null);\r\n         double prio = IFCImportHandleUtil.GetOptionalRealAttribute(ifcMaterialProfile, \"Priority\", -1);\r\n         if (prio >= 0)\r\n            Priority = prio;\r\n         Category = IFCImportHandleUtil.GetOptionalStringAttribute(ifcMaterialProfile, \"Category\", null);\r\n\r\n         return;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Process an IFCMaterialProfile entity\r\n      /// </summary>\r\n      /// <param name=\"ifcMaterialProfile\">the matrial profile</param>\r\n      /// <returns>returns a IFCMaterialProfile object</returns>\r\n      public static IFCMaterialProfile ProcessIFCMaterialProfile(IFCAnyHandle ifcMaterialProfile)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterialProfile))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcMaterialProfile);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity materialProfile;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcMaterialProfile.StepId, out materialProfile))\r\n            materialProfile = new IFCMaterialProfile(ifcMaterialProfile);\r\n         return (materialProfile as IFCMaterialProfile);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCMaterialProfileSet.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Linq;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\nusing Revit.IFC.Import.Properties;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class to represent IfcMaterialProfileSet\r\n   /// </summary>\r\n   public class IFCMaterialProfileSet : IFCEntity, IIFCMaterialSelect\r\n   {\r\n      string m_Name = null;\r\n      string m_Description = null;\r\n      IList<IFCMaterialProfile> m_MaterialProfileSet = null;\r\n      IFCCompositeProfile m_CompositeProfile = null;\r\n\r\n      /// <summary>\r\n      /// Get the Name attribute\r\n      /// </summary>\r\n      public string Name\r\n      {\r\n         get { return m_Name; }\r\n         protected set { m_Name = value; }\r\n      }\r\n\r\n      // Get the Description attribute\r\n      public string Description\r\n      {\r\n         get { return m_Description; }\r\n         protected set { m_Description = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the associated list of MaterialProfiles\r\n      /// </summary>\r\n      public IList<IFCMaterialProfile> MaterialProfileSet\r\n      {\r\n         get\r\n         {\r\n            if (m_MaterialProfileSet == null)\r\n               m_MaterialProfileSet = new List<IFCMaterialProfile>();\r\n            return m_MaterialProfileSet;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the associated optional IfcCompositeCurve\r\n      /// </summary>\r\n      public IFCCompositeProfile CompositeProfile\r\n      {\r\n         get { return m_CompositeProfile; }\r\n         protected set { m_CompositeProfile = value; }\r\n      }\r\n\r\n      public void Create(Document doc)\r\n      {\r\n         foreach (IFCMaterialProfile materialprofile in MaterialProfileSet)\r\n            materialprofile.Create(doc);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the list of associated Materials\r\n      /// </summary>\r\n      /// <returns></returns>\r\n      public IList<IFCMaterial> GetMaterials()\r\n      {\r\n         HashSet<IFCMaterial> materials = new HashSet<IFCMaterial>();\r\n         foreach (IFCMaterialProfile materialProfile in MaterialProfileSet)\r\n         {\r\n            IList<IFCMaterial> profileMaterials = materialProfile.GetMaterials();\r\n            foreach (IFCMaterial material in profileMaterials)\r\n               materials.Add(material);\r\n         }\r\n         return materials.ToList();\r\n      }\r\n\r\n      protected IFCMaterialProfileSet()\r\n      {\r\n      }\r\n\r\n      protected IFCMaterialProfileSet(IFCAnyHandle ifcMaterialProfileSet)\r\n      {\r\n         Process(ifcMaterialProfileSet);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcMaterialProfileSet)\r\n      {\r\n         base.Process(ifcMaterialProfileSet);\r\n\r\n         IList<IFCAnyHandle> ifcMaterialProfiles =\r\n             IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcMaterialProfileSet, \"MaterialProfiles\");\r\n         if (ifcMaterialProfiles == null)\r\n         {\r\n            Importer.TheLog.LogError(ifcMaterialProfileSet.Id, \"Expected at least 1 MaterialProfile, found none.\", false);\r\n            return;\r\n         }\r\n\r\n         foreach (IFCAnyHandle ifcMaterialProfile in ifcMaterialProfiles)\r\n         {\r\n            IFCMaterialProfile materialProfile = null;\r\n            if (IFCAnyHandleUtil.IsTypeOf(ifcMaterialProfile, IFCEntityType.IfcMaterialProfileWithOffsets))\r\n               materialProfile = IFCMaterialProfileWithOffsets.ProcessIFCMaterialProfileWithOffsets(ifcMaterialProfile);\r\n            else\r\n               materialProfile = IFCMaterialProfile.ProcessIFCMaterialProfile(ifcMaterialProfile);\r\n\r\n            if (materialProfile != null)\r\n               MaterialProfileSet.Add(materialProfile);\r\n         }\r\n\r\n         Name = IFCImportHandleUtil.GetOptionalStringAttribute(ifcMaterialProfileSet, \"Name\", null);\r\n         Description = IFCImportHandleUtil.GetOptionalStringAttribute(ifcMaterialProfileSet, \"Description\", null);\r\n         IFCAnyHandle compositeProfileHnd = IFCImportHandleUtil.GetOptionalInstanceAttribute(ifcMaterialProfileSet, \"CompositeProfile\");\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(compositeProfileHnd))\r\n            CompositeProfile = IFCCompositeProfile.ProcessIFCCompositeProfile(compositeProfileHnd);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFCMaterialProfileSet entity.\r\n      /// </summary>\r\n      /// <param name=\"IFCMaterialProfileSet\">The IFCMaterialProfileSet handle.</param>\r\n      /// <returns>The IFCMaterialProfileSet object.</returns>\r\n      public static IFCMaterialProfileSet ProcessIFCMaterialProfileSet(IFCAnyHandle ifcMaterialProfileSet)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterialProfileSet))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcMaterialProfileSet);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity materialProfileSet;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcMaterialProfileSet.StepId, out materialProfileSet))\r\n            materialProfileSet = new IFCMaterialProfileSet(ifcMaterialProfileSet);\r\n         return (materialProfileSet as IFCMaterialProfileSet);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCMaterialProfileSetUsage.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\nusing Revit.IFC.Import.Properties;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that mimics IfcMaterialProfileSetUsage\r\n   /// </summary>\r\n   public class IFCMaterialProfileSetUsage : IFCEntity, IIFCMaterialSelect\r\n   {\r\n      IFCMaterialProfileSet m_ForProfileSet = null;\r\n      int? m_CardinalPoint = null;\r\n      double? m_ReferenceExtent = null;\r\n\r\n      /// <summary>\r\n      /// Get the associated IfcMaterialProfileSet\r\n      /// </summary>\r\n      public IFCMaterialProfileSet ForProfileSet\r\n      {\r\n         get { return m_ForProfileSet; }\r\n         protected set { m_ForProfileSet = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the optional attribute CardinalPoint\r\n      /// </summary>\r\n      public int? CardinalPoint\r\n      {\r\n         get { return m_CardinalPoint; }\r\n         protected set { m_CardinalPoint = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the optional attribute ReferenceExtent\r\n      /// </summary>\r\n      public double? ReferenceExtent\r\n      {\r\n         get { return m_ReferenceExtent; }\r\n         protected set { m_ReferenceExtent = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create the IFCProfileSet in the document\r\n      /// </summary>\r\n      /// <param name=\"doc\"></param>\r\n      public void Create(Document doc)\r\n      {\r\n         if (ForProfileSet != null)\r\n            ForProfileSet.Create(doc);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get list of materials\r\n      /// </summary>\r\n      /// <returns></returns>\r\n      public IList<IFCMaterial> GetMaterials()\r\n      {\r\n         if (ForProfileSet == null)\r\n            return new List<IFCMaterial>();\r\n\r\n         return ForProfileSet.GetMaterials();\r\n      }\r\n\r\n      protected IFCMaterialProfileSetUsage()\r\n      {\r\n      }\r\n\r\n      protected IFCMaterialProfileSetUsage(IFCAnyHandle ifcMaterialProfileSetUsage)\r\n      {\r\n         Process(ifcMaterialProfileSetUsage);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcMaterialProfileSetUsage)\r\n      {\r\n         base.Process(ifcMaterialProfileSetUsage);\r\n\r\n         IFCAnyHandle ifcMaterialProfileSet = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcMaterialProfileSetUsage, \"ForProfileSet\", true);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterialProfileSet))\r\n            ForProfileSet = IFCMaterialProfileSet.ProcessIFCMaterialProfileSet(ifcMaterialProfileSet);\r\n\r\n         bool found = false;\r\n         CardinalPoint = IFCImportHandleUtil.GetOptionalIntegerAttribute(ifcMaterialProfileSetUsage, \"CardinalPoint\", out found);\r\n         ReferenceExtent = IFCImportHandleUtil.GetOptionalDoubleAttribute(ifcMaterialProfileSetUsage, \"ReferenceExtent\", 0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Process an IFCMaterialProfileSetUsage\r\n      /// </summary>\r\n      /// <param name=\"ifcMaterialProfileSetUsage\">the IfcMaterialProfileSetUsage handle</param>\r\n      /// <returns>returns an IFCMaterialProfileSetUsage object</returns>\r\n      public static IFCMaterialProfileSetUsage ProcessIFCMaterialProfileSetUsage(IFCAnyHandle ifcMaterialProfileSetUsage)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterialProfileSetUsage))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcMaterialProfileSetUsage);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity materialProfileSetUsage;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcMaterialProfileSetUsage.StepId, out materialProfileSetUsage))\r\n            materialProfileSetUsage = new IFCMaterialProfileSetUsage(ifcMaterialProfileSetUsage);\r\n         return (materialProfileSetUsage as IFCMaterialProfileSetUsage);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCMaterialProfileSetUsageTapering.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCMaterialProfileSetUsageTapering : IFCMaterialProfileSetUsage, IIFCMaterialSelect\r\n   {\r\n      IFCMaterialProfileSet m_ForProfileEndSet = null;\r\n      int? m_CardinalEndPoint = null;\r\n\r\n      /// <summary>\r\n      /// Get the associated IfcMaterialProfileSet\r\n      /// </summary>\r\n      public IFCMaterialProfileSet ForProfileEndSet\r\n      {\r\n         get { return m_ForProfileEndSet; }\r\n         protected set { m_ForProfileEndSet = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the optional attribute CardinalPoint\r\n      /// </summary>\r\n      public int? CardinalEndPoint\r\n      {\r\n         get { return m_CardinalEndPoint; }\r\n         protected set { m_CardinalEndPoint = value; }\r\n      }\r\n\r\n      protected IFCMaterialProfileSetUsageTapering()\r\n      {\r\n      }\r\n\r\n      protected IFCMaterialProfileSetUsageTapering(IFCAnyHandle ifcMaterialProfileSetUsageTapering)\r\n      {\r\n         Process(ifcMaterialProfileSetUsageTapering);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcMaterialProfileSetUsageTapering)\r\n      {\r\n         base.Process(ifcMaterialProfileSetUsageTapering);\r\n\r\n         IFCAnyHandle ifcMaterialProfileSet = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcMaterialProfileSetUsageTapering, \"ForProfileEndSet\", true);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterialProfileSet))\r\n            ForProfileSet = IFCMaterialProfileSet.ProcessIFCMaterialProfileSet(ifcMaterialProfileSet);\r\n\r\n         bool found = false;\r\n         CardinalPoint = IFCImportHandleUtil.GetOptionalIntegerAttribute(ifcMaterialProfileSetUsageTapering, \"CardinalEndPoint\", out found);\r\n      }\r\n\r\n      public static IFCMaterialProfileSetUsage ProcessIFCMaterialProfileSetUsageTapering(IFCAnyHandle ifcMaterialProfileSetUsageTapering)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterialProfileSetUsageTapering))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcMaterialProfileSetUsageTapering);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity materialProfileSetUsageTapering;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcMaterialProfileSetUsageTapering.StepId, out materialProfileSetUsageTapering))\r\n            materialProfileSetUsageTapering = new IFCMaterialProfileSetUsageTapering(ifcMaterialProfileSetUsageTapering);\r\n         return (materialProfileSetUsageTapering as IFCMaterialProfileSetUsageTapering);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCObject.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcObject.\r\n   /// </summary>\r\n   public abstract class IFCObject : IFCObjectDefinition\r\n   {\r\n      /// <summary>\r\n      /// Store the entity types of elements that have no predefined type.\r\n      /// </summary>\r\n      private static HashSet<IFCEntityType> m_sNoPredefinedType = null;\r\n\r\n      private static HashSet<IFCEntityType> m_sPredefinedTypePreIFC4 = null;\r\n\r\n      private IDictionary<string, IFCPropertySetDefinition> m_IFCPropertySets = null;\r\n\r\n      private HashSet<IFCTypeObject> m_IFCTypeObjects = null;\r\n\r\n      private static bool HasPredefinedType(IFCEntityType type)\r\n      {\r\n         // These entities have no predefined type field.\r\n         if (m_sNoPredefinedType == null)\r\n         {\r\n            m_sNoPredefinedType = new HashSet<IFCEntityType>()\r\n            {\r\n               IFCEntityType.IfcProject,\r\n               IFCEntityType.IfcSite,\r\n               IFCEntityType.IfcBuilding,\r\n               IFCEntityType.IfcBuildingStorey,\r\n               IFCEntityType.IfcGroup,\r\n               IFCEntityType.IfcSystem\r\n            };\r\n         }\r\n\r\n         if (m_sNoPredefinedType.Contains(type))\r\n            return false;\r\n\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete))\r\n            return true;\r\n\r\n         // Before IFC4, these are the only objects that have a predefined type that we support.\r\n         // Note that this is just a list of entity types that are dealt with generically; other types may override the base function.\r\n         if (m_sPredefinedTypePreIFC4 == null)\r\n         {\r\n            m_sPredefinedTypePreIFC4 = new HashSet<IFCEntityType>()\r\n            {\r\n               IFCEntityType.IfcCovering,\r\n               IFCEntityType.IfcDistributionPort,\r\n               IFCEntityType.IfcFooting,\r\n               IFCEntityType.IfcPile,\r\n               IFCEntityType.IfcRailing,\r\n               IFCEntityType.IfcRamp,\r\n               IFCEntityType.IfcReinforcingBar,\r\n               IFCEntityType.IfcRoof,\r\n               IFCEntityType.IfcSlab,\r\n               IFCEntityType.IfcStair,\r\n               IFCEntityType.IfcTendon\r\n            };\r\n         }\r\n\r\n         return m_sPredefinedTypePreIFC4.Contains(type);\r\n      }\r\n\r\n      /// <summary>\r\n      /// The object type.\r\n      /// </summary>\r\n      public string ObjectType { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The property sets.\r\n      /// </summary>\r\n      public IDictionary<string, IFCPropertySetDefinition> PropertySets\r\n      {\r\n         get\r\n         {\r\n            if (m_IFCPropertySets == null)\r\n               m_IFCPropertySets = new Dictionary<string, IFCPropertySetDefinition>();\r\n            return m_IFCPropertySets;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The type objects.\r\n      /// </summary>\r\n      /// <remarks>IFC Where rule for IfcObject states that we expect at most 1 item in this set.</remarks>\r\n      public HashSet<IFCTypeObject> TypeObjects\r\n      {\r\n         get\r\n         {\r\n            if (m_IFCTypeObjects == null)\r\n               m_IFCTypeObjects = new HashSet<IFCTypeObject>();\r\n            return m_IFCTypeObjects;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit elements based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      protected override void Create(Document doc)\r\n      {\r\n         base.Create(doc);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the predefined type from the IfcObject, depending on the file version and entity type.\r\n      /// </summary>\r\n      /// <param name=\"ifcObjectDefinition\">The associated handle.</param>\r\n      /// <returns>The predefined type, if any.</returns>\r\n      /// <remarks>Some entities use other fields as predefined type, including IfcDistributionPort (\"FlowDirection\") and IfcSpace (pre-IFC4).</remarks>\r\n      protected override string GetPredefinedType(IFCAnyHandle ifcObjectDefinition)\r\n      {\r\n         // Not all entity types have any predefined type; check against a hard-coded list here.\r\n         if (!HasPredefinedType(EntityType))\r\n            return null;\r\n\r\n         // \"PredefinedType\" is the default name of the field.\r\n         // For IFC2x3, some entities have a \"ShapeType\" instead of a \"PredefinedType\", which we will check below.\r\n         string predefinedTypeName = \"PredefinedType\";\r\n         if (!IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete))\r\n         {\r\n            // The following have \"PredefinedType\", but are out of scope for now:\r\n            // IfcCostSchedule, IfcOccupant, IfcProjectOrder, IfcProjectOrderRecord, IfcServiceLifeFactor\r\n            // IfcStructuralAnalysisModel, IfcStructuralCurveMember, IfcStructuralLoadGroup, IfcStructuralSurfaceMember\r\n            if (EntityType == IFCEntityType.IfcDistributionPort)\r\n               predefinedTypeName = \"FlowDirection\";\r\n            else if (EntityType == IFCEntityType.IfcReinforcingBar)\r\n               predefinedTypeName = \"BarRole\";\r\n            else if ((EntityType == IFCEntityType.IfcRamp) ||\r\n                     (EntityType == IFCEntityType.IfcRoof) ||\r\n                     (EntityType == IFCEntityType.IfcStair))\r\n               predefinedTypeName = \"ShapeType\";\r\n         }\r\n\r\n         try\r\n         {\r\n            return IFCAnyHandleUtil.GetEnumerationAttribute(ifcObjectDefinition, predefinedTypeName);\r\n         }\r\n         catch\r\n         {\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcObject attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcObject\">The IfcObject handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcObject)\r\n      {\r\n         base.Process(ifcObject);\r\n\r\n         ObjectType = IFCAnyHandleUtil.GetStringAttribute(ifcObject, \"ObjectType\");\r\n\r\n         HashSet<IFCAnyHandle> isDefinedByHandles = IFCAnyHandleUtil.GetAggregateInstanceAttribute\r\n             <HashSet<IFCAnyHandle>>(ifcObject, \"IsDefinedBy\");\r\n\r\n         // IFC4 adds \"IsDeclaredBy\" and \"IsTypedBy\" inverse attributes. We'll read in \"IsTypedBy\" and\r\n         // group this wih \"IsDefinedBy\" together, although we may later decide to split them up for performance reasons.\r\n         // Note that IcProject in IFC4 inherits from IfcContext, not IfcObject (as it did in IFC2x3).  Currently, the\r\n         // only difference between the two is that IfcObject supports \"IsDeclaredBy\" and \"IsTypedBy\", and that IfcContext\r\n         // contains the attributes of IfcProject from IFC2x3.  We'll keep the attributes at the IfcProject level for now\r\n         // and protect against reading \"IsTypedBy\" here.\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete) && !IFCAnyHandleUtil.IsSubTypeOf(ifcObject, IFCEntityType.IfcProject))\r\n         {\r\n            HashSet<IFCAnyHandle> isTypedBy = IFCAnyHandleUtil.GetAggregateInstanceAttribute\r\n             <HashSet<IFCAnyHandle>>(ifcObject, \"IsTypedBy\");\r\n            if (isTypedBy != null)\r\n               isDefinedByHandles.UnionWith(isTypedBy);\r\n         }\r\n\r\n         if (isDefinedByHandles != null)\r\n         {\r\n            IFCPropertySetDefinition.ResetCounters();\r\n            foreach (IFCAnyHandle isDefinedByHandle in isDefinedByHandles)\r\n            {\r\n               if (IFCAnyHandleUtil.IsSubTypeOf(isDefinedByHandle, IFCEntityType.IfcRelDefinesByProperties))\r\n               {\r\n                  ProcessIFCRelation.ProcessIFCRelDefinesByProperties(isDefinedByHandle, PropertySets, ifcObject.StepId);\r\n               }\r\n               else if (IFCAnyHandleUtil.IsSubTypeOf(isDefinedByHandle, IFCEntityType.IfcRelDefinesByType))\r\n               {\r\n                  // For Hybrid IFC Import, preprocess IFCRelDefinesByType.\r\n                  // Need to do this because the TypeObject should have a STEP Id --> DirectShapeType before Revit calls ProcessIFCTypeObject.\r\n                  // This will add an entry to the HybridMap (IFCTypeObject STEP Id --> DirectShapeType ElementId) so Revit will know later that it doesn't need\r\n                  // to create a new DirectShapeType, and which DirectShapeType to use.\r\n                  ElementId ifcObjectElementId = IFCImportHybridInfo.GetHybridMapInformation(ifcObject);\r\n                  if (IFCImportHybridInfo.IsValidElementId(ifcObjectElementId))\r\n                  {\r\n                     IFCAnyHandle typeObject = IFCAnyHandleUtil.GetInstanceAttribute(isDefinedByHandle, \"RelatingType\");\r\n                     if (IFCAnyHandleUtil.IsNullOrHasNoValue(typeObject))\r\n                     {\r\n                        Importer.TheLog.LogNullError(IFCEntityType.IfcTypeObject);\r\n                        return;\r\n                     }\r\n\r\n                     if (!IFCAnyHandleUtil.IsSubTypeOf(typeObject, IFCEntityType.IfcTypeObject))\r\n                     {\r\n                        Importer.TheLog.LogUnhandledSubTypeError(typeObject, IFCEntityType.IfcTypeObject, false);\r\n                        return;\r\n                     }\r\n\r\n                     Importer.TheHybridInfo.AddTypeToHybridMap(ifcObjectElementId, typeObject);\r\n                  }\r\n                  ProcessIFCRelDefinesByType(isDefinedByHandle);\r\n               }\r\n               else\r\n                  Importer.TheLog.LogUnhandledSubTypeError(isDefinedByHandle, IFCEntityType.IfcRelDefines, false);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcRelDefinesByType.\r\n      /// </summary>\r\n      /// <param name=\"ifcRelDefinesByType\">The IfcRelDefinesByType handle.</param>\r\n      void ProcessIFCRelDefinesByType(IFCAnyHandle ifcRelDefinesByType)\r\n      {\r\n         IFCAnyHandle typeObject = IFCAnyHandleUtil.GetInstanceAttribute(ifcRelDefinesByType, \"RelatingType\");\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(typeObject))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcTypeObject);\r\n            return;\r\n         }\r\n\r\n         if (!IFCAnyHandleUtil.IsSubTypeOf(typeObject, IFCEntityType.IfcTypeObject))\r\n         {\r\n            Importer.TheLog.LogUnhandledSubTypeError(typeObject, IFCEntityType.IfcTypeObject, false);\r\n            return;\r\n         }\r\n\r\n         IFCTypeObject ifcTypeObject = IFCTypeObject.ProcessIFCTypeObject(typeObject);\r\n\r\n         if (ifcTypeObject != null)\r\n         {\r\n            TypeObjects.Add(ifcTypeObject);\r\n            ifcTypeObject.DefinedObjects.Add(this);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcObject handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcObject\">The IfcObject handle.</param>\r\n      /// <returns>The IfcObject object.</returns>\r\n      public static IFCObject ProcessIFCObject(IFCAnyHandle ifcObject)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcObject))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcObject);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity cachedObject;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcObject.StepId, out cachedObject))\r\n            return (cachedObject as IFCObject);\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcObject, IFCEntityType.IfcProduct))\r\n         {\r\n            return IFCProduct.ProcessIFCProduct(ifcObject);\r\n         }\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcObject, IFCEntityType.IfcProject))\r\n         {\r\n            return IFCProject.ProcessIFCProject(ifcObject);\r\n         }\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcObject, IFCEntityType.IfcGroup))\r\n         {\r\n            return IFCGroup.ProcessIFCGroup(ifcObject);\r\n         }\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcObject, IFCEntityType.IfcObject, true);\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit element params based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      protected override void CreateParametersInternal(Document doc, Element element)\r\n      {\r\n         base.CreateParametersInternal(doc, element);\r\n\r\n         if (element != null)\r\n         {\r\n            // Set \"ObjectTypeOverride\" parameter.\r\n            string objectTypeOverride = ObjectType;\r\n            if (!string.IsNullOrWhiteSpace(objectTypeOverride))\r\n            {\r\n               Category category = IFCPropertySet.GetCategoryForParameterIfValid(element, Id);\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, \"ObjectTypeOverride\", objectTypeOverride, Id);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create property sets for a given element.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element being created.</param>\r\n      /// <param name=\"propertySetsCreated\">A concatenated string of property sets created, used to filter schedules.</returns>\r\n      public override void CreatePropertySets(Document doc, Element element, string propertySetsCreated)\r\n      {\r\n         CreatePropertySetsBase(doc, element, propertySetsCreated, \"IfcPropertySetList\", PropertySets);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCObjectDefinition.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Configuration;\r\nusing System.Linq;\r\nusing System.Runtime.Remoting;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IFC object definition.\r\n   /// </summary>\r\n   public abstract class IFCObjectDefinition : IFCRoot\r\n   {\r\n      ICollection<IFCGroup> m_AssignmentGroups = null; //HasAssignments\r\n\r\n      private IFCMaterial m_TheMaterial = null;\r\n\r\n      private bool m_TheMaterialIsSet = false;\r\n\r\n      private IDictionary<string, object> m_AdditionalIntParameters = null;\r\n\r\n      private IFCAnyHandle m_NestsHandle = null;\r\n\r\n      private IFCObjectDefinition m_Nests = null;\r\n\r\n      protected ParametersToSet ParametersToSet { get; set; } = new ParametersToSet();\r\n\r\n      /// <summary>\r\n      /// The IFCObjectDefinition that is nested by this.\r\n      /// </summary>\r\n      public IFCObjectDefinition NestsWhole\r\n      {\r\n         get\r\n         {\r\n            if (m_Nests == null && m_NestsHandle != null)\r\n            {\r\n               m_Nests = ProcessIFCRelation.ProcessRelatingObject(m_NestsHandle);\r\n               m_NestsHandle = null;\r\n            }\r\n            return m_Nests;\r\n         }\r\n      }\r\n\r\n      protected ElementId CategoryIdCache { get; set; } = ElementId.InvalidElementId;\r\n\r\n      protected ElementId GraphicsStyleIdCache { get; set; } = ElementId.InvalidElementId;\r\n\r\n      private void CalculateCategoryAndGStyleIds(Document doc)\r\n      {\r\n         CategoryIdCache = IFCCategoryUtil.GetCategoryIdForEntity(doc, this, out ElementId gstyleId);\r\n         GraphicsStyleIdCache = gstyleId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The category id corresponding to the element created for this IFCObjectDefinition.\r\n      /// </summary>\r\n      public ElementId GetCategoryId(Document doc)\r\n      {\r\n         if (CategoryIdCache == ElementId.InvalidElementId)\r\n         {\r\n            CalculateCategoryAndGStyleIds(doc);\r\n         }\r\n\r\n         return CategoryIdCache;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The graphics style id corresponding to the element created for this IFCObjectDefinition.\r\n      /// </summary>\r\n      public ElementId GetGraphicsStyleId(Document doc)\r\n      {\r\n         if (GraphicsStyleIdCache == ElementId.InvalidElementId)\r\n         {\r\n            CalculateCategoryAndGStyleIds(doc);\r\n         }\r\n\r\n         return GraphicsStyleIdCache;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns true if sub-elements should be grouped; false otherwise.\r\n      /// </summary>\r\n      public virtual bool GroupSubElements()\r\n      {\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The IFCMaterialSelect associated with the element.\r\n      /// </summary>\r\n      public IIFCMaterialSelect MaterialSelect { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The object that this object via the \"IsDecomposedBy\" inverse attribute.\r\n      /// </summary>\r\n      public IFCObjectDefinition Decomposes { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Get the reference elevation of this object, located in the containing IFCBuilding.\r\n      /// </summary>\r\n      /// <returns>The value of the reference elevation.</returns>\r\n      /// <remarks>This is intended for use for IFCBuildingStoreys.</remarks>\r\n      protected double GetReferenceElevation()\r\n      {\r\n         if (Decomposes == null)\r\n            return 0.0;\r\n\r\n         IFCBuilding building = Decomposes as IFCBuilding;\r\n         if (building != null)\r\n            return building.ElevationOfRefHeight;\r\n\r\n         return Decomposes.GetReferenceElevation();\r\n      }\r\n\r\n      /// <summary>\r\n      /// The list of materials directly associated with the element.  There may be more at the type level.\r\n      /// </summary>\r\n      /// <returns>A list, possibly empty, of materials directly associated with the element.</returns>\r\n      public IList<IFCMaterial> GetMaterials()\r\n      {\r\n         IList<IFCMaterial> materials = null;\r\n         if (MaterialSelect != null)\r\n            materials = MaterialSelect.GetMaterials();\r\n\r\n         if (materials == null)\r\n            return new List<IFCMaterial>();\r\n\r\n         return materials;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the materials' names and thicknesses if the object is created with IFCMaterialLayerSetUsage information.\r\n      /// The thickness is returned as a string followed by its unit\r\n      /// If the object is not created with IFCMaterialLayerSetUsage information, then only the materials' names are returned\r\n      /// </summary>\r\n      /// <returns>A list in which each entry is the material's names followed by their thicknesses if the thicknesses are available</returns>\r\n      public IList<string> GetMaterialsNamesAndThicknesses()\r\n      {\r\n         IList<string> result = new List<string>();\r\n\r\n         string thickness = null;\r\n         string name = null;\r\n         // If this object is created with IFCMaterialLayerSetUsage information \r\n         // then the material layer thickness will be added after the name of each layer.\r\n         if (MaterialSelect is IFCMaterialLayerSetUsage)\r\n         {\r\n            IFCMaterialLayerSet materialLayerSet = (MaterialSelect as IFCMaterialLayerSetUsage).MaterialLayerSet;\r\n            IList<IFCMaterialLayer> materialLayers;\r\n            IFCMaterial material;\r\n\r\n            if (materialLayerSet != null)\r\n               materialLayers = materialLayerSet.MaterialLayers;\r\n            else\r\n               materialLayers = new List<IFCMaterialLayer>();\r\n\r\n            foreach (IFCMaterialLayer materialLayer in materialLayers)\r\n            {\r\n               if (materialLayer == null)\r\n                  continue;\r\n               material = materialLayer.Material;\r\n               if (material == null || string.IsNullOrWhiteSpace(material.Name))\r\n                  continue;\r\n               name = material.Name;\r\n               thickness = IFCUnitUtil.FormatLengthAsString(materialLayer.LayerThickness);\r\n               result.Add(name + \": \" + thickness);\r\n            }\r\n         }\r\n         else if (MaterialSelect is IFCMaterialProfileSetUsage)\r\n         {\r\n            IFCMaterialProfileSet materialProfileSet = (MaterialSelect as IFCMaterialProfileSetUsage).ForProfileSet;\r\n            IList<IFCMaterialProfile> materialProfiles;\r\n            IFCMaterial material;\r\n\r\n            if (materialProfileSet != null)\r\n               materialProfiles = materialProfileSet.MaterialProfileSet;\r\n            else\r\n               materialProfiles = new List<IFCMaterialProfile>();\r\n\r\n            foreach (IFCMaterialProfile materialProfile in materialProfiles)\r\n            {\r\n               if (materialProfile == null)\r\n                  continue;   // Skip if it is null\r\n               material = materialProfile.Material;\r\n               IFCProfileDef profile = materialProfile.Profile;\r\n               if (material == null)\r\n                  continue;\r\n               name = material.Name;\r\n               string profileName;\r\n               if (profile != null)\r\n                  profileName = profile.ProfileName;\r\n               else\r\n                  profileName = profile.ProfileType.ToString();\r\n               result.Add(name + \" (\" + profileName + \")\");\r\n            }\r\n         }\r\n         else\r\n         {\r\n            IList<IFCMaterial> materials = GetMaterials();\r\n            foreach (IFCMaterial material in materials)\r\n            {\r\n               name = material.Name;\r\n               if (string.IsNullOrWhiteSpace(name))\r\n                  continue;\r\n\r\n               result.Add(name);\r\n            }\r\n         }\r\n\r\n         return result;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the one material associated with this object.\r\n      /// </summary>\r\n      /// <returns>The material, if there is identically one; otherwise, null.</returns>\r\n      public IFCMaterial GetTheMaterial()\r\n      {\r\n         if (!m_TheMaterialIsSet)\r\n         {\r\n            IList<IFCMaterial> materials = GetMaterials();\r\n\r\n            m_TheMaterialIsSet = true;\r\n            IFCMaterial theMaterial = null;\r\n            if (materials.Count > 1)\r\n               return null;\r\n\r\n            if (materials.Count == 1)\r\n               theMaterial = materials[0];\r\n\r\n            if (this is IFCObject)\r\n            {\r\n               IFCObject asObject = this as IFCObject;\r\n               foreach (IFCTypeObject typeObject in asObject.TypeObjects)\r\n               {\r\n                  IList<IFCMaterial> typeMaterials = typeObject.GetMaterials();\r\n\r\n                  if (typeMaterials.Count > 1)\r\n                     return null;\r\n\r\n                  if (typeMaterials.Count == 1)\r\n                  {\r\n                     if (theMaterial != null && theMaterial.Id != typeMaterials[0].Id)\r\n                        return null;\r\n                     theMaterial = typeMaterials[0];\r\n                  }\r\n               }\r\n            }\r\n\r\n            m_TheMaterial = theMaterial;\r\n         }\r\n\r\n         return m_TheMaterial;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the name of the one material associated with this object.\r\n      /// </summary>\r\n      /// <returns>The name of the material, if there is identically one; otherwise, null.</returns>\r\n      public string GetTheMaterialName()\r\n      {\r\n         if (!m_TheMaterialIsSet)\r\n            GetTheMaterial();\r\n\r\n         if (m_TheMaterial == null)\r\n            return null;\r\n\r\n         return m_TheMaterial.Name;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the predefined type for the object, if applicable.  The name of the attribute\r\n      /// depends on the specific sub-type of IfcObjectDefinition, the entity type, and the IFC schema version.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// If this is null, the associated IfcTypeObject may contain the information.\r\n      /// Many sub-classes of IfcObjectDefinition have an Enum defining the type.\r\n      /// Store that information here.  This is not a field in IfcObjectDefinition as \r\n      /// defined by IFC, but it allows us to have fewer routines to deal with this field.\r\n      /// </remarks>\r\n      public string PredefinedType { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Returns the main element id associated with this object.\r\n      /// </summary>\r\n      public ElementId CreatedElementId { get; protected set; } = ElementId.InvalidElementId;\r\n\r\n      /// <summary>\r\n      /// Returns the list of geometries created in the Create() function, for DirectShape representations only.\r\n      /// </summary>\r\n      public IList<GeometryObject> CreatedGeometry { get; set; } = new List<GeometryObject>();\r\n\r\n      /// <summary>\r\n      /// The composed objects, from the \"IsDecomposedBy\" inverse attribute.\r\n      /// </summary>\r\n      public HashSet<IFCObjectDefinition> ComposedObjectDefinitions { get; } = new HashSet<IFCObjectDefinition>();\r\n\r\n      /// <summary>\r\n      /// The assignment objects (from HasAssignments inverse).\r\n      /// </summary>\r\n      public ICollection<IFCGroup> AssignmentGroups\r\n      {\r\n         get\r\n         {\r\n            if (m_AssignmentGroups == null)\r\n               m_AssignmentGroups = new HashSet<IFCGroup>();\r\n            return m_AssignmentGroups;\r\n         }\r\n         set { m_AssignmentGroups = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the Dictionary of additional internal parameters\r\n      /// </summary>\r\n      public IDictionary<string, object> AdditionalIntParameters\r\n      {\r\n         get\r\n         {\r\n            if (m_AdditionalIntParameters == null)\r\n               m_AdditionalIntParameters = new Dictionary<string, object>();\r\n            return m_AdditionalIntParameters;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the predefined type from the entity, depending on the file version and entity type.\r\n      /// </summary>\r\n      /// <param name=\"ifcObjectDefinition\">The associated handle.</param>\r\n      /// <returns>The predefined type string, if any.</returns>\r\n      protected abstract string GetPredefinedType(IFCAnyHandle ifcObjectDefinition);\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCObjectDefinition()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit elements based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      protected override void Create(Document doc)\r\n      {\r\n         // We will not process the MaterialSelect here, as if we actually need the material information, we will create\r\n         // it then.  This is an optimization for Hybrid mode but should work for Legacy also.\r\n\r\n         base.Create(doc);\r\n\r\n         TraverseSubElements(doc);\r\n      }\r\n\r\n      private IList<GeometryObject> GetOrCloneGeometry(Document doc, IFCObjectDefinition objectDefinition)\r\n      {\r\n         if (!(objectDefinition is IFCBuildingElementPart))\r\n            return objectDefinition.CreatedGeometry;\r\n\r\n         // In the case of IFCBuildingElementPart, we want the container to have a copy of the geometry in the category of the parent,\r\n         // as otherwise the geometry will be controlled by default by the Parts category instead of the parent category.\r\n         IList<IFCSolidInfo> clonedGeometry = IFCElement.CloneElementGeometry(doc, objectDefinition as IFCProduct, this, false);\r\n         if (clonedGeometry == null)\r\n            return null;\r\n\r\n         IList<GeometryObject> geomObjs = new List<GeometryObject>();\r\n\r\n         foreach (IFCSolidInfo solid in clonedGeometry)\r\n         {\r\n            if (CutSolidByVoids(solid, null))\r\n               geomObjs.Add(solid.GeometryObject);\r\n         }\r\n\r\n         return geomObjs;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Cut a IFCSolidInfo by the voids in this IFCProduct, if any.\r\n      /// </summary>\r\n      /// <param name=\"solidInfo\">The solid information.</param>\r\n      /// <param name=\"createdVoids\">Extra voids from AnyCAD-created openings.</param>\r\n      /// <returns>False if the return solid is empty; true otherwise.</returns>\r\n      /// <remarks>Overridden at the IFCProduct level.</remarks>\r\n      protected virtual bool CutSolidByVoids(IFCSolidInfo solidInfo, IList<Solid> createdVoids)\r\n      {\r\n         return true;\r\n      }\r\n\r\n      private void AddPlanViewCurves(Document doc, DirectShape containerDirectShape, IList<Curve> planViewCurves)\r\n      {\r\n         if (doc == null || containerDirectShape == null || ((planViewCurves?.Count ?? 0) == 0) || !(this is IFCProduct))\r\n            return;\r\n\r\n         using (IFCImportShapeEditScope planViewScope = IFCImportShapeEditScope.Create(doc, this as IFCProduct))\r\n         {\r\n            planViewScope.AddPlanViewCurves(planViewCurves, Id);\r\n            planViewScope.SetPlanViewRep(containerDirectShape);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit elements based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      protected virtual void TraverseSubElements(Document doc)\r\n      {\r\n         IList<ElementId> subElementIds = new List<ElementId>();\r\n\r\n         // These two should only be populated if GroupSubElements() is true and we are duplicating\r\n         // geometry for containers.\r\n         List<GeometryObject> groupedSubElementGeometries = new List<GeometryObject>();\r\n         List<Curve> groupedSubElementFootprintCurves = new List<Curve>();\r\n\r\n         foreach (IFCObjectDefinition objectDefinition in ComposedObjectDefinitions)\r\n         {\r\n            CreateElement(doc, objectDefinition);\r\n            if (objectDefinition.CreatedElementId == ElementId.InvalidElementId)\r\n               continue;\r\n\r\n            subElementIds.Add(objectDefinition.CreatedElementId);\r\n\r\n            // CreateDuplicateContainerGeometry is currently an API-only option (no UI), set to true by default.\r\n            //\r\n            // NAVIS_TODO - This is wrong if Importer.TheProcessor.ApplyTransforms is false\r\n            if (!GroupSubElements() || !Importer.TheOptions.CreateDuplicateContainerGeometry)\r\n               continue;\r\n\r\n            IList<GeometryObject> subGeometries = GetOrCloneGeometry(doc, objectDefinition);\r\n            if (subGeometries != null)\r\n               groupedSubElementGeometries.AddRange(subGeometries);\r\n\r\n            if (objectDefinition is IFCProduct)\r\n               groupedSubElementFootprintCurves.AddRange((objectDefinition as IFCProduct).FootprintCurves);\r\n         }\r\n\r\n         if (groupedSubElementGeometries.Count > 0)\r\n         {\r\n            // Add main element geometry to include it in direct shape \r\n            // and be able to assign parameters to the whole geometry and not just to subelements\r\n            IList<GeometryObject> elementGeometry = GetOrCloneGeometry(doc, this);\r\n            if ((elementGeometry?.Count ?? 0) > 0)\r\n            {\r\n               groupedSubElementGeometries.AddRange(elementGeometry);\r\n               Importer.TheLog.LogWarning(Id, \"Entity contains both geometry and sub-entities with geometry. This may result in duplicate geometry.\", false);\r\n            }\r\n         }\r\n\r\n         if (GroupSubElements() && subElementIds.Count > 0)\r\n         {\r\n            if (CreatedElementId != ElementId.InvalidElementId)\r\n            {\r\n               if (Importer.TheOptions.HybridImportOptions != null)\r\n               {\r\n                  DirectShape containerDirectShape = doc.GetElement(CreatedElementId) as DirectShape;\r\n                  if (containerDirectShape != null)\r\n                  {\r\n                     if (groupedSubElementGeometries != null)\r\n                     {\r\n                        containerDirectShape.AppendShape(groupedSubElementGeometries);\r\n                     }\r\n                     AddPlanViewCurves(doc, containerDirectShape, groupedSubElementFootprintCurves);\r\n                     return;\r\n                  }\r\n               }\r\n\r\n               // If CreateDuplicateContainerGeometry is false,  then\r\n               // groupedSubElementGeometries is empty and we then create a new\r\n               // DirectShape with no content in it.\r\n               //\r\n               // For files such as NW-55644 that has geometry on the slab element and\r\n               // children with geometry, this means that the slab geometry is thrown away\r\n               if (groupedSubElementGeometries.Count == 0 && Importer.TheOptions.HybridImportOptions == null)\r\n               {\r\n                  return;\r\n               }\r\n            }\r\n\r\n            if (CreatedElementId != ElementId.InvalidElementId)\r\n               subElementIds.Add(CreatedElementId);\r\n\r\n            // We aren't yet actually grouping the elements.  DirectShape doesn't support grouping, and\r\n            // the Group element doesn't support adding parameters.  For now, we will create a DirectShape that \"forgets\"\r\n            // the association, which is good enough for link.\r\n            DirectShape directShape = IFCElementUtil.CreateElement(doc, GetCategoryId(doc), GlobalId, groupedSubElementGeometries, Id, EntityType);\r\n            //Group group = doc.Create.NewGroup(subElementIds);\r\n\r\n            if (directShape != null)\r\n            {\r\n               CreatedElementId = directShape.Id;\r\n               CreatedGeometry = groupedSubElementGeometries;\r\n               AddPlanViewCurves(doc, directShape, groupedSubElementFootprintCurves);\r\n            }\r\n            else\r\n            {\r\n               Importer.TheLog.LogCreationError(this, null, false);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcObjectDefinition attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcObjectDefinition\">The IfcObjectDefinition handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcObjectDefinition)\r\n      {\r\n         base.Process(ifcObjectDefinition);\r\n\r\n         ElementId createdElementId = ElementId.InvalidElementId;\r\n         ElementId objectDefinitionElementId = IFCImportHybridInfo.GetHybridMapInformation(Id);\r\n         if (objectDefinitionElementId != null)\r\n         {\r\n            createdElementId = objectDefinitionElementId;\r\n         }\r\n\r\n         PredefinedType = GetPredefinedType(ifcObjectDefinition);\r\n\r\n         // If we aren't importing this category, skip processing.\r\n         if (!IFCCategoryUtil.CanImport(EntityType, PredefinedType))\r\n         {\r\n            if (createdElementId != ElementId.InvalidElementId)\r\n               Importer.TheHybridInfo.ElementsToDelete?.Add(createdElementId);\r\n            throw new InvalidOperationException(\"Don't Import\");\r\n         }\r\n\r\n         HashSet<IFCAnyHandle> nests = IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcObjectDefinition, \"Nests\");\r\n         if (nests != null && nests.Count != 0)\r\n            m_NestsHandle = nests.First();\r\n\r\n         // Before IFC2x3, IfcTypeObject did not have IsDecomposedBy.\r\n         HashSet<IFCAnyHandle> elemSet = null;\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC2x3) || !IFCAnyHandleUtil.IsSubTypeOf(ifcObjectDefinition, IFCEntityType.IfcTypeObject))\r\n         {\r\n            elemSet = IFCAnyHandleUtil.GetAggregateInstanceAttribute\r\n                <HashSet<IFCAnyHandle>>(ifcObjectDefinition, \"IsDecomposedBy\");\r\n         }\r\n\r\n         if (elemSet != null)\r\n         {\r\n            foreach (IFCAnyHandle elem in elemSet)\r\n            {\r\n               ProcessIFCRelDecomposes(elem);\r\n            }\r\n         }\r\n\r\n         HashSet<IFCAnyHandle> hasAssociations = IFCAnyHandleUtil.GetAggregateInstanceAttribute\r\n             <HashSet<IFCAnyHandle>>(ifcObjectDefinition, \"HasAssociations\");\r\n\r\n         if (hasAssociations != null)\r\n         {\r\n            foreach (IFCAnyHandle hasAssociation in hasAssociations)\r\n            {\r\n               if (IFCAnyHandleUtil.IsSubTypeOf(hasAssociation, IFCEntityType.IfcRelAssociatesMaterial))\r\n               {\r\n                  ProcessIFCRelAssociatesMaterial(hasAssociation);\r\n               }\r\n               else if (IFCAnyHandleUtil.IsSubTypeOf(hasAssociation, IFCEntityType.IfcRelAssociatesClassification))\r\n               {\r\n                  ProcessRelAssociatesClassification(hasAssociation);\r\n               }\r\n               else\r\n               {\r\n                  Importer.TheLog.LogUnhandledSubTypeError(hasAssociation, IFCEntityType.IfcRelAssociates, false);\r\n               }\r\n            }\r\n         }\r\n\r\n         ISet<IFCAnyHandle> hasAssignments = IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcObjectDefinition, \"HasAssignments\");\r\n\r\n         if (hasAssignments != null)\r\n         {\r\n            foreach (IFCAnyHandle hasAssignment in hasAssignments)\r\n            {\r\n               ProcessIFCRelAssigns(hasAssignment);\r\n            }\r\n         }\r\n\r\n         Importer.TheLog.AddToElementCount();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcRelAssociatesMaterial.\r\n      /// </summary>\r\n      /// <param name=\"ifcRelAssociatesMaterial\">The IfcRelAssociatesMaterial handle.</param>\r\n      void ProcessIFCRelAssociatesMaterial(IFCAnyHandle ifcRelAssociatesMaterial)\r\n      {\r\n         IFCAnyHandle ifcMaterialSelect = IFCAnyHandleUtil.GetInstanceAttribute(ifcRelAssociatesMaterial, \"RelatingMaterial\");\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterialSelect))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcRelAssociatesMaterial);\r\n            return;\r\n         }\r\n\r\n         // Deal with various types of IFCMaterialSelect.\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcMaterialSelect, IFCEntityType.IfcMaterial))\r\n            MaterialSelect = IFCMaterial.ProcessIFCMaterial(ifcMaterialSelect);\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcMaterialSelect, IFCEntityType.IfcMaterialLayer))\r\n            MaterialSelect = IFCMaterialLayer.ProcessIFCMaterialLayer(ifcMaterialSelect);\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcMaterialSelect, IFCEntityType.IfcMaterialLayerSet))\r\n            MaterialSelect = IFCMaterialLayerSet.ProcessIFCMaterialLayerSet(ifcMaterialSelect);\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcMaterialSelect, IFCEntityType.IfcMaterialLayerSetUsage))\r\n            MaterialSelect = IFCMaterialLayerSetUsage.ProcessIFCMaterialLayerSetUsage(ifcMaterialSelect);\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcMaterialSelect, IFCEntityType.IfcMaterialList))\r\n            MaterialSelect = IFCMaterialList.ProcessIFCMaterialList(ifcMaterialSelect);\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcMaterialSelect, IFCEntityType.IfcMaterialProfile))\r\n            MaterialSelect = IFCMaterialProfile.ProcessIFCMaterialProfile(ifcMaterialSelect);\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcMaterialSelect, IFCEntityType.IfcMaterialProfileSet))\r\n            MaterialSelect = IFCMaterialProfileSet.ProcessIFCMaterialProfileSet(ifcMaterialSelect);\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcMaterialSelect, IFCEntityType.IfcMaterialProfileSetUsage))\r\n         {\r\n            if (IFCAnyHandleUtil.IsTypeOf(ifcMaterialSelect, IFCEntityType.IfcMaterialProfileSetUsageTapering))\r\n               MaterialSelect = IFCMaterialProfileSetUsageTapering.ProcessIFCMaterialProfileSetUsageTapering(ifcMaterialSelect);\r\n            else\r\n               MaterialSelect = IFCMaterialProfileSetUsage.ProcessIFCMaterialProfileSetUsage(ifcMaterialSelect);\r\n         }\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcMaterialSelect, IFCEntityType.IfcMaterialConstituent))\r\n            MaterialSelect = IFCMaterialConstituent.ProcessIFCMaterialConstituent(ifcMaterialSelect);\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcMaterialSelect, IFCEntityType.IfcMaterialConstituentSet))\r\n            MaterialSelect = IFCMaterialConstituentSet.ProcessIFCMaterialConstituentSet(ifcMaterialSelect);\r\n         else\r\n            Importer.TheLog.LogUnhandledSubTypeError(ifcMaterialSelect, \"IfcMaterialSelect\", false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Keep Classification assignment information for creation of parameters later on\r\n      /// </summary>\r\n      /// <param name=\"ifcRelAssociatesClassification\"></param>\r\n      void ProcessRelAssociatesClassification(IFCAnyHandle ifcRelAssociatesClassification)\r\n      {\r\n         string classification = string.Empty;\r\n         string identification = string.Empty;\r\n         string classifItemName = string.Empty;\r\n         string paramValue = string.Empty;\r\n\r\n         IFCAnyHandle relClassification = IFCAnyHandleUtil.GetInstanceAttribute(ifcRelAssociatesClassification, \"RelatingClassification\");\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(relClassification, IFCEntityType.IfcClassificationReference))\r\n         {\r\n            IFCAnyHandle refSource = IFCAnyHandleUtil.GetInstanceAttribute(relClassification, \"ReferencedSource\");\r\n            if (!IFCAnyHandleUtil.IsNullOrHasNoValue(refSource))\r\n            {\r\n               classification = IFCAnyHandleUtil.GetStringAttribute(refSource, \"Name\");\r\n            }\r\n            classifItemName = IFCAnyHandleUtil.GetStringAttribute(relClassification, \"Name\");\r\n            string idParamName = \"ItemReference\";\r\n            if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete))\r\n               idParamName = \"Identification\";\r\n            identification = IFCAnyHandleUtil.GetStringAttribute(relClassification, idParamName);\r\n            if (string.IsNullOrEmpty(identification))\r\n               return;\r\n\r\n            if (!string.IsNullOrEmpty(classification))\r\n               paramValue = \"[\" + classification + \"]\";\r\n            paramValue += identification;\r\n            if (!string.IsNullOrEmpty(classifItemName))\r\n               paramValue += \":\" + classifItemName;\r\n\r\n            string paramName = string.Empty;\r\n            for (int i = 0; i < 10; ++i)\r\n            {\r\n               paramName = \"ClassificationCode\";\r\n               if (i > 0)\r\n                  paramName = \"ClassificationCode(\" + i.ToString() + \")\";\r\n               if (!AdditionalIntParameters.ContainsKey(paramName))\r\n                  break;\r\n            }\r\n            if (!string.IsNullOrEmpty(paramName))\r\n               AdditionalIntParameters.Add(paramName, paramValue);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds all related objects in IfcRelDecomposes.\r\n      /// </summary>\r\n      /// <param name=\"ifcRelDecomposes\">The IfcRelDecomposes handle.</param>\r\n      void ProcessIFCRelDecomposes(IFCAnyHandle ifcRelDecomposes)\r\n      {\r\n         ICollection<IFCObjectDefinition> relatedObjects = ProcessIFCRelation.ProcessRelatedObjects(this, ifcRelDecomposes);\r\n         if (relatedObjects != null)\r\n            ComposedObjectDefinitions.UnionWith(relatedObjects);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds all related objects in ifcRelAssigns.\r\n      /// </summary>\r\n      /// <param name=\"ifcRelAssigns\">The IfcRelAssigns handle.</param>\r\n      void ProcessIFCRelAssigns(IFCAnyHandle ifcRelAssigns)\r\n      {\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcRelAssigns, IFCEntityType.IfcRelAssignsToGroup))\r\n         {\r\n            IFCGroup group = ProcessIFCRelation.ProcessRelatingGroup(ifcRelAssigns);\r\n            if (group != null)\r\n            {\r\n               group.RelatedObjects.Add(this);\r\n               AssignmentGroups.Add(group);\r\n            }\r\n         }\r\n\r\n         // LOG: ERROR: #: Unknown assocation of type ifcRelAssigns.GetEntityType();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcObjectDefinition object.\r\n      /// </summary>\r\n      /// <param name=\"ifcObjectDefinition\">The IfcObjectDefinition handle.</param>\r\n      /// <returns>The IFCObjectDefinition object.</returns>\r\n      public static IFCObjectDefinition ProcessIFCObjectDefinition(IFCAnyHandle ifcObjectDefinition)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcObjectDefinition))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcObjectDefinition);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity cachedObjectDefinition;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcObjectDefinition.StepId, out cachedObjectDefinition))\r\n            return (cachedObjectDefinition as IFCObjectDefinition);\r\n\r\n         try\r\n         {\r\n            if (IFCAnyHandleUtil.IsSubTypeOf(ifcObjectDefinition, IFCEntityType.IfcObject))\r\n            {\r\n               return IFCObject.ProcessIFCObject(ifcObjectDefinition);\r\n            }\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            HandleError(ex.Message, ifcObjectDefinition, false);\r\n            return null;\r\n         }\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcObjectDefinition, IFCEntityType.IfcObjectDefinition, false);\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Generates the name for the element to be created.\r\n      /// </summary>\r\n      /// <param name=\"baseName\">If not null, generates a name if Name is invalid.</param>\r\n      /// <returns>The name.</returns>\r\n      protected string GetName(string baseName)\r\n      {\r\n         if (string.IsNullOrWhiteSpace(Name))\r\n         {\r\n            if (!string.IsNullOrWhiteSpace(baseName))\r\n               return baseName + \" \" + Id;\r\n            return null;\r\n         }\r\n\r\n         return IFCNamingUtil.CleanIFCName(Name);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Generates a valid name for a DirectShapeType associated with this IFCObjectDefinition.\r\n      /// </summary>\r\n      /// <returns></returns>\r\n      public string GetVisibleName()\r\n      {\r\n         return GetName(\"DirectShapeType\");\r\n      }\r\n\r\n      // In general, we want every created element to have the Element.Name propery set.\r\n      // The list below corresponds of element types where the name is not set by the IFCObjectDefinition directly, \r\n      // but instead by some other mechanism.\r\n      private bool CanSetRevitName(Element element)\r\n      {\r\n         // Grids have their name set by IFCGridAxis, which does not inherit from IfcObjectDefinition.\r\n         return !(element is Grid) && !(element is ProjectInfo);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Allow for override of IfcObjectDefinition shared parameter names.\r\n      /// </summary>\r\n      /// <param name=\"name\">The enum corresponding of the shared parameter.</param>\r\n      /// <param name=\"isType\">True if the shared parameter is a type parameter.</param>\r\n      /// <returns>The name appropriate for this IfcObjectDefinition.</returns>\r\n      public virtual string GetSharedParameterName(IFCSharedParameters name, bool isType)\r\n      {\r\n         return name.ToString() + (isType ? \" [Type]\" : \"\");\r\n      }\r\n\r\n      private bool SuccessfullySetName(Element element, string name)\r\n      {\r\n         try\r\n         {\r\n            element.Name = name;\r\n            return true;\r\n         }\r\n         catch\r\n         {\r\n            return false;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set the Element.Name property if possible, and add an \"IfcName\" parameter to an element containing the original name of the generating entity. \r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The created element.</param>\r\n      /// <param name=\"category\">The element's category.</param>\r\n      private void SetName(Document doc, Element element, Category category)\r\n      {\r\n         if (element == null)\r\n            return;\r\n\r\n         string revitName = GetName(null);\r\n         if (!string.IsNullOrWhiteSpace(revitName))\r\n         {\r\n            if (CanSetRevitName(element))\r\n            {\r\n               if (!SuccessfullySetName(element, revitName))\r\n               {\r\n                  if (!SuccessfullySetName(element, revitName + \" \" + Id))\r\n                     Importer.TheLog.LogWarning(Id, \"Couldn't set element name.\", false);\r\n               }\r\n            }\r\n         }\r\n\r\n         // 2015: Revit links don't show the name of a selected item inside the link.\r\n         // 2015: DirectShapes don't have a built-in \"Name\" parameter.\r\n         ParametersToSet.AddStringParameter(doc, element, category, this, IFCSharedParameters.IfcName, Name, Id);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add a parameter \"IfcDescription\" to an element containing the description of the generating entity. \r\n      /// If the element has the built-in parameter ALL_MODEL_DESCRIPTION, populate that also.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The created parameter.</param>\r\n      /// <param name=\"category\">The element's category.</param>\r\n      private void SetDescription(Document doc, Element element, Category category)\r\n      {\r\n         // If the element has the built-in ALL_MODEL_DESCRIPTION parameter, populate that also.\r\n         // We will create/populate the parameter even if the description is empty or null.\r\n         string description = string.IsNullOrWhiteSpace(Description) ? string.Empty : Description;\r\n\r\n         IFCDefaultProcessor processor = Importer.TheProcessor as IFCDefaultProcessor;\r\n         if (processor != null)\r\n         {\r\n            processor.SetElementStringParameter(element, Id, BuiltInParameter.ALL_MODEL_DESCRIPTION, description, true, ParametersToSet);\r\n         }\r\n         else\r\n         {\r\n            Importer.TheProcessor.SetStringParameter(element, Id, BuiltInParameter.ALL_MODEL_DESCRIPTION, description, true);\r\n         }\r\n\r\n         ParametersToSet.AddStringParameter(doc, element, category, this, IFCSharedParameters.IfcDescription, description, Id);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add a parameter \"IfcMaterial\" to an element containing the name(s) of the materials of the generating entity. \r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The created element.</param>\r\n      /// <param name=\"category\">The element's category.</param>\r\n      /// <remarks>Note that this field contains the names of the materials, and as such is not parametric in any way.</remarks>\r\n      private void SetMaterialParameter(Document doc, Element element, Category category)\r\n      {\r\n         if (category == null)\r\n            return;\r\n\r\n         string materialNames = null;\r\n\r\n         IList<string> materialsAndThickness = GetMaterialsNamesAndThicknesses();\r\n         foreach (string val in materialsAndThickness)\r\n         {\r\n\r\n            if (materialNames == null)\r\n               materialNames = val;\r\n            else\r\n               materialNames += \";\" + val;\r\n         }\r\n         if (materialNames != null)\r\n            ParametersToSet.AddStringParameter(doc, element, category, this, IFCSharedParameters.IfcMaterial, materialNames, Id);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add \"IfcSystem\" and \"IfcGroup\" parameter to an element containing the name(s) of the system(s) and of the group(s) of the generating entity. \r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The created element.</param>\r\n      /// <param name=\"category\">The element's category.</param>\r\n      /// <remarks>Note that this field contains the names of the systems, and as such is not parametric in any way.</remarks>\r\n      private void SetSystemAndGroupParameter(Document doc, Element element, Category category)\r\n      {\r\n         if (category == null)\r\n            return;\r\n\r\n         IList<IFCGroup> groups = new List<IFCGroup>();\r\n         IList<IFCGroup> systems = new List<IFCGroup>();\r\n\r\n         foreach (IFCGroup assignmentGroup in AssignmentGroups)\r\n         {\r\n            if (assignmentGroup is IFCSystem)\r\n               systems.Add(assignmentGroup);\r\n            else if (assignmentGroup.GetType() == typeof(IFCGroup))\r\n               groups.Add(assignmentGroup);\r\n         }\r\n\r\n         SetGroupsParameter(groups, \"IfcGroup\", doc, element, category);\r\n         SetGroupsParameter(systems, \"IfcSystem\", doc, element, category);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add the parameter that contains all the names from input group list\r\n      /// </summary>\r\n      /// <param name=\"groups\">The group list.</param>\r\n      /// <param name=\"parameterName\">The parameter name.</param>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The created element.</param>\r\n      /// <param name=\"category\">The element's category.</param>\r\n      private void SetGroupsParameter(IList<IFCGroup> groups, string parameterName, Document doc, Element element, Category category)\r\n      {\r\n         if (category == null)\r\n            return;\r\n\r\n         string groupNames = string.Empty;\r\n\r\n         foreach (IFCGroup group in groups)\r\n         {\r\n            string name = group.Name;\r\n            if (string.IsNullOrWhiteSpace(name))\r\n               continue;\r\n\r\n            if (!string.IsNullOrEmpty(groupNames))\r\n               groupNames += \";\";\r\n            \r\n            groupNames += name;\r\n         }\r\n\r\n         if (!string.IsNullOrEmpty(groupNames))\r\n            ParametersToSet.AddStringParameter(doc, element, category, this, parameterName, groupNames, Id);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create property sets for a given element.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element being created.</param>\r\n      /// <param name=\"propertySetsCreated\">A concatenated string of property sets created, used to filter schedules.</returns>\r\n      public virtual void CreatePropertySets(Document doc, Element element, string propertySetsCreated)\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// This is to allow IFCObjectDefinition's to dictate what their own Category should be.\r\n      /// Rather than listing all the combinations in one file, this encapsulates the behavior into the specific entity.\r\n      /// If unable to find a category, or if this is not implemented in a subclass, ElementId.invalidElementId is used to indicate no\r\n      /// Category is found.\r\n      /// </summary>\r\n      /// <returns>ElementId representing Category, or ElementId.InvalidElementId if not category found.</returns>\r\n      public virtual ElementId GetCategoryElementId()\r\n      {\r\n         return ElementId.InvalidElementId;\r\n      }\r\n\r\n      private BuiltInParameter GetGUIDParameter(Element element, bool elementIsType)\r\n      {\r\n         if (elementIsType)\r\n            return BuiltInParameter.IFC_TYPE_GUID;\r\n\r\n         if (this is IFCProject)\r\n            return BuiltInParameter.IFC_PROJECT_GUID;\r\n         if (this is IFCSite)\r\n            return BuiltInParameter.IFC_SITE_GUID;\r\n         if (this is IFCBuilding)\r\n            return BuiltInParameter.IFC_BUILDING_GUID;\r\n\r\n         return BuiltInParameter.IFC_GUID;\r\n      }\r\n\r\n      protected virtual void CreateParametersInternal(Document doc, Element element)\r\n      {\r\n         if (element != null)\r\n         {\r\n            Category category = IFCPropertySet.GetCategoryForParameterIfValid(element, Id);\r\n\r\n            if (!Importer.IsDefaultProcessor())\r\n            {\r\n               Importer.TheProcessor.CreateOrUpdateElement(Id, GlobalId, EntityType.ToString(), GetCategoryId(doc).Value, null);\r\n            }\r\n\r\n            // Set the element name.\r\n            SetName(doc, element, category);\r\n\r\n            // Set the element description.\r\n            SetDescription(doc, element, category);\r\n\r\n            // The list of materials.\r\n            SetMaterialParameter(doc, element, category);\r\n\r\n            // Set the \"IfcSystem\" and \"IfcGroup\" parameters.\r\n            SetSystemAndGroupParameter(doc, element, category);\r\n\r\n            IFCDefaultProcessor processor = Importer.TheProcessor as IFCDefaultProcessor;\r\n\r\n            bool elementIsType = (element is ElementType);\r\n            if (!string.IsNullOrWhiteSpace(GlobalId))\r\n            {\r\n               BuiltInParameter ifcGUIDId = GetGUIDParameter(element, elementIsType);\r\n               if (processor != null)\r\n               {\r\n                  processor.SetElementStringParameter(element, Id, ifcGUIDId, GlobalId, true, ParametersToSet);\r\n               }\r\n               else\r\n               {\r\n                  Importer.TheProcessor.SetStringParameter(element, Id, ifcGUIDId, GlobalId, true);\r\n               }\r\n            }\r\n\r\n            // Set the built-in parameters.\r\n            (string entityName, string predefinedType) = IFCCategoryUtil.GetEntityNameAndPredefinedType(this);\r\n            if (!string.IsNullOrWhiteSpace(entityName))\r\n            {\r\n               BuiltInParameter ifcExportElementAsParam = elementIsType ? BuiltInParameter.IFC_EXPORT_ELEMENT_TYPE_AS : BuiltInParameter.IFC_EXPORT_ELEMENT_AS;\r\n               if (processor != null)\r\n               {\r\n                  processor.SetElementStringParameter(element, Id, ifcExportElementAsParam, entityName, true, ParametersToSet);\r\n               }\r\n               else\r\n               {\r\n                  Importer.TheProcessor.SetStringParameter(element, Id, ifcExportElementAsParam, entityName, true);\r\n               }\r\n            }\r\n\r\n            if (!string.IsNullOrWhiteSpace(predefinedType))\r\n            {\r\n               BuiltInParameter ifcPredefinedTypeParam = elementIsType ? BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE_TYPE : BuiltInParameter.IFC_EXPORT_PREDEFINEDTYPE;\r\n               if (processor != null)\r\n               {\r\n                  processor.SetElementStringParameter(element, Id, ifcPredefinedTypeParam, predefinedType, true, ParametersToSet);\r\n               }\r\n               else\r\n               {\r\n                  Importer.TheProcessor.SetStringParameter(element, Id, ifcPredefinedTypeParam, predefinedType, true);\r\n               }\r\n            }\r\n            // Set the IFCElementAssembly Parameter\r\n            if (Decomposes != null)\r\n            {\r\n               string containerParamName = (Decomposes is IFCElementAssembly) ? \"IfcElementAssembly\" : \"IfcDecomposes\";\r\n               string containerParamGUIDName = (Decomposes is IFCElementAssembly) ? \"IfcElementAssemblyGUID\" : \"IfcDecomposesGUID\";\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, containerParamName, Decomposes.Name, Id);\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, containerParamGUIDName, Decomposes.GlobalId, Id);\r\n            }\r\n\r\n            // Set additional parameters (if any), e.g. for Classification assignments\r\n            if (AdditionalIntParameters.Count > 0)\r\n            {\r\n               foreach (KeyValuePair<string, object> parItem in AdditionalIntParameters)\r\n               {\r\n                  if (parItem.Value is string)\r\n                  {\r\n                     ParametersToSet.AddStringParameter(doc, element, category, this, parItem.Key, \r\n                        (string)parItem.Value, Id);\r\n                  }\r\n                  else if (parItem.Value is double)\r\n                  {\r\n                     ParametersToSet.AddParameterDouble(doc, element, category, this, parItem.Key, SpecTypeId.Custom, UnitTypeId.General, (double)parItem.Value, Id);\r\n                  }\r\n                  else if (parItem.Value is int)\r\n                  {\r\n                     ParametersToSet.AddParameterInt(doc, element, category, this, parItem.Key, (int)parItem.Value, Id);\r\n                  }\r\n                  else if (parItem.Value is bool)\r\n                  {\r\n                     ParametersToSet.AddParameterBoolean(doc, element, category, this, parItem.Key, (bool)parItem.Value, Id);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit element params based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      protected void CreateParameters(Document doc)\r\n      {\r\n         Element element = doc.GetElement(CreatedElementId);\r\n         if (element == null)\r\n            return;\r\n\r\n         // Create Revit parameters corresponding to IFC entity values, not in a property set.\r\n         using (ParameterSetter setter = new ParameterSetter())\r\n         {\r\n            ParametersToSet = setter.ParametersToSet;\r\n            CreateParametersInternal(doc, element);\r\n\r\n            // Now create parameters related to property sets.  Note we want to add the parameters above first,\r\n            // so we can use them for creating schedules in CreatePropertySets.\r\n            string propertySetsCreated = \"\";\r\n            CreatePropertySets(doc, element, propertySetsCreated);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the element ids created for this entity, for summary logging.\r\n      /// </summary>\r\n      /// <param name=\"createdElementIds\">The creation list.</param>\r\n      /// <remarks>May contain InvalidElementId; the caller is expected to remove it.</remarks>\r\n      public virtual void GetCreatedElementIds(ISet<ElementId> createdElementIds)\r\n      {\r\n         if (CreatedElementId != ElementId.InvalidElementId)\r\n            createdElementIds.Add(CreatedElementId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create one or more elements \r\n      /// </summary>\r\n      /// <param name=\"doc\">The document being populated.</param>\r\n      /// <returns>The primary element associated with the IFCObjectDefinition, or InvalidElementId if it failed.</returns>\r\n      public static ElementId CreateElement(Document doc, IFCObjectDefinition objDef)\r\n      {\r\n         // This would be a good place to check 'objDef.GlobalId'.\r\n\r\n         ElementId createdElementId = objDef.CreatedElementId;\r\n         try\r\n         {\r\n            if ((createdElementId == ElementId.InvalidElementId) && objDef.IsValidForCreation)\r\n            {\r\n               if (objDef is IFCObject)\r\n               {\r\n                  IFCObject asObject = objDef as IFCObject;\r\n                  foreach (IFCTypeObject typeObject in asObject.TypeObjects)\r\n                  {\r\n                     typeObject.CalculateCategoryAndGStyleIdsFromObject(doc, asObject);\r\n                     CreateElement(doc, typeObject);\r\n                  }\r\n               }\r\n\r\n               objDef.Create(doc);\r\n               objDef.CreateParameters(doc);\r\n               createdElementId = objDef.CreatedElementId;\r\n               Importer.TheLog.AddCreatedEntity(doc, objDef);\r\n            }\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            if (objDef != null)\r\n            {\r\n               objDef.IsValidForCreation = false;\r\n               Importer.TheLog.LogCreationError(objDef, ex.Message, false);\r\n            }\r\n         }\r\n         return createdElementId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create property sets for a given element.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element being created.</param>\r\n      /// <param name=\"propertySetsCreated\">A concatenated string of property sets created, used to filter schedules.</returns>\r\n      /// <param name=\"propertySetListName\">The name of the parameter that contains the property set list name.</param>\r\n      /// <param name=\"propertySets\">The list of properties.</param>\r\n      protected void CreatePropertySetsBase(Document doc, Element element, string propertySetsCreated, string propertySetListName,\r\n         IDictionary<string, IFCPropertySetDefinition> propertySets)\r\n      {\r\n         if (Importer.TheOptions.UsingHybridPropertySetsForHostObject(Id))\r\n         {\r\n            return;\r\n         }\r\n\r\n         if (propertySetsCreated == null)\r\n            propertySetsCreated = string.Empty;\r\n\r\n         if ((propertySets?.Count ?? 0) > 0)\r\n         {\r\n            IFCParameterSetByGroup parameterGroupMap = IFCParameterSetByGroup.Create(element);\r\n            foreach (IFCPropertySetDefinition propertySet in propertySets.Values)\r\n            {\r\n               Tuple<string, bool> newPropertySetCreated = propertySet.CreatePropertySet(doc, element, this,\r\n                  parameterGroupMap, ParametersToSet);\r\n               if (newPropertySetCreated == null || !newPropertySetCreated.Item2 || string.IsNullOrWhiteSpace(newPropertySetCreated.Item1))\r\n                  continue;\r\n               string propertySetName = newPropertySetCreated.Item1;\r\n\r\n               if (propertySetsCreated == string.Empty)\r\n                  propertySetsCreated = propertySetName;\r\n               else\r\n                  propertySetsCreated += \";\" + propertySetName;\r\n            }\r\n         }\r\n         // Add property set-based parameters.\r\n         // We are going to create this \"fake\" parameter so that we can filter elements in schedules based on their property sets.\r\n         Category category = IFCPropertySet.GetCategoryForParameterIfValid(element, Id);\r\n         ParametersToSet.AddStringParameter(doc, element, category, this, propertySetListName, propertySetsCreated, Id);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Post-process IFCObjectDefinition attributes.\r\n      /// </summary>\r\n      public override void PostProcess()\r\n      {\r\n         base.PostProcess();\r\n         IFCObjectDefinition nestsWhole = NestsWhole;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCOffsetCurve2D.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCOffsetCurve2D entity\r\n   /// </summary>\r\n   public class IFCOffsetCurve2D : IFCCurve\r\n   {\r\n      protected IFCOffsetCurve2D()\r\n      {\r\n      }\r\n\r\n      protected IFCOffsetCurve2D(IFCAnyHandle offsetCurve)\r\n      {\r\n         Process(offsetCurve);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcCurve)\r\n      {\r\n         base.Process(ifcCurve);\r\n\r\n         IFCAnyHandle basisCurve = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcCurve, \"BasisCurve\", false);\r\n         if (basisCurve == null)\r\n            return;\r\n\r\n         IFCAnyHandle dir = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcCurve, \"RefDirection\", false);\r\n\r\n         bool found = false;\r\n         double distance = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(ifcCurve, \"Distance\", out found);\r\n         if (!found)\r\n            distance = 0.0;\r\n\r\n         IFCCurve ifcBasisCurve = IFCCurve.ProcessIFCCurve(basisCurve);\r\n         XYZ dirXYZ = (dir == null) ? ifcBasisCurve.GetNormal() : IFCPoint.ProcessNormalizedIFCDirection(dir);\r\n\r\n         try\r\n         {\r\n            if (ifcBasisCurve.Curve != null)\r\n            {\r\n               SetCurve(ifcBasisCurve.Curve.CreateOffset(distance, XYZ.BasisZ));\r\n            }\r\n            else\r\n            {\r\n               CurveLoop baseCurveLoop = ifcBasisCurve.GetTheCurveLoop();\r\n               if (baseCurveLoop != null)\r\n               {\r\n                  SetCurveLoop(CurveLoop.CreateViaOffset(baseCurveLoop, distance, XYZ.BasisZ));\r\n               }\r\n            }\r\n         }\r\n         catch\r\n         {\r\n            Importer.TheLog.LogError(ifcCurve.StepId, \"Couldn't create offset curve.\", false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCOffsetCurve2D object from a handle of type IfcOffsetCurve2D\r\n      /// </summary>\r\n      /// <param name=\"ifcOffsetCurve2D\">The IFC handle</param>\r\n      /// <returns>The IFCOffsetCurve2D object</returns>\r\n      public static IFCOffsetCurve2D ProcessIFCOffsetCurve2D(IFCAnyHandle ifcOffsetCurve2D)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcOffsetCurve2D))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcOffsetCurve2D);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity offsetCurve2D = null;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcOffsetCurve2D.StepId, out offsetCurve2D))\r\n            offsetCurve2D = new IFCOffsetCurve2D(ifcOffsetCurve2D);\r\n\r\n         return (offsetCurve2D as IFCOffsetCurve2D);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCOffsetCurve3D.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCOffsetCurve3D entity\r\n   /// </summary>\r\n   public class IFCOffsetCurve3D : IFCCurve\r\n   {\r\n      protected IFCOffsetCurve3D()\r\n      {\r\n      }\r\n\r\n      protected IFCOffsetCurve3D(IFCAnyHandle offsetCurve)\r\n      {\r\n         Process(offsetCurve);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcCurve)\r\n      {\r\n         base.Process(ifcCurve);\r\n\r\n         IFCAnyHandle basisCurve = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcCurve, \"BasisCurve\", false);\r\n         if (basisCurve == null)\r\n            return;\r\n\r\n         bool found = false;\r\n         double distance = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(ifcCurve, \"Distance\", out found);\r\n         if (!found)\r\n            distance = 0.0;\r\n\r\n         try\r\n         {\r\n            IFCCurve ifcBasisCurve = IFCCurve.ProcessIFCCurve(basisCurve);\r\n            if (ifcBasisCurve.Curve != null)\r\n               SetCurve(ifcBasisCurve.Curve.CreateOffset(distance, XYZ.BasisZ));\r\n            else\r\n            {\r\n               CurveLoop baseCurveLoop = ifcBasisCurve.GetTheCurveLoop();\r\n               if (baseCurveLoop != null)\r\n                  SetCurveLoop(CurveLoop.CreateViaOffset(baseCurveLoop, distance, XYZ.BasisZ));\r\n            }\r\n         }\r\n         catch\r\n         {\r\n            Importer.TheLog.LogError(ifcCurve.StepId, \"Couldn't create offset curve.\", false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCOffsetCurve3D object from a handle of type IfcOffsetCurve3D\r\n      /// </summary>\r\n      /// <param name=\"ifcOffsetCurve3D\">The IFC handle</param>\r\n      /// <returns>The IFCOffsetCurve3D object</returns>\r\n      public static IFCOffsetCurve3D ProcessIFCOffsetCurve3D(IFCAnyHandle ifcOffsetCurve3D)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcOffsetCurve3D))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcOffsetCurve3D);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity offsetCurve3D = null;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcOffsetCurve3D.StepId, out offsetCurve3D))\r\n            offsetCurve3D = new IFCOffsetCurve3D(ifcOffsetCurve3D);\r\n\r\n         return (offsetCurve3D as IFCOffsetCurve3D);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCOpeningElement.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Revit.IFC.Common.Enums;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcOpeningElement.\r\n   /// </summary>\r\n   public class IFCOpeningElement : IFCFeatureElementSubtraction\r\n   {\r\n      protected IFCElement m_FilledByElement = null;\r\n\r\n      /// <summary>\r\n      /// The element this opening is filled by (e.g., a door).\r\n      /// </summary>\r\n      public IFCElement FilledByElement\r\n      {\r\n         get { return m_FilledByElement; }\r\n         set { m_FilledByElement = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCOpeningElement()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCOpeningElement from the IfcOpeningElement handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcOpeningElement\">The IfcOpeningElement handle.</param>\r\n      protected IFCOpeningElement(IFCAnyHandle ifcOpeningElement)\r\n      {\r\n         Process(ifcOpeningElement);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcOpeningElement attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcOpeningElement\">The IfcOpeningElement handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcOpeningElement)\r\n      {\r\n         base.Process(ifcOpeningElement);\r\n\r\n         ICollection<IFCAnyHandle> hasFillings = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcOpeningElement, \"HasFillings\");\r\n         if (hasFillings != null)\r\n         {\r\n            // Assume that there is only one filling for the opening, and take first found.\r\n            foreach (IFCAnyHandle hasFilling in hasFillings)\r\n            {\r\n               IFCAnyHandle relatedFillingElement = IFCAnyHandleUtil.GetInstanceAttribute(hasFilling, \"RelatedBuildingElement\");\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(relatedFillingElement))\r\n                  continue;\r\n\r\n               IFCEntity filledByElement;\r\n               IFCImportFile.TheFile.EntityMap.TryGetValue(relatedFillingElement.StepId, out filledByElement);\r\n               if (filledByElement == null)\r\n                  FilledByElement = IFCElement.ProcessIFCElement(relatedFillingElement);\r\n               else\r\n                  FilledByElement = filledByElement as IFCElement;\r\n               \r\n               if (FilledByElement != null)\r\n                  FilledByElement.FillsOpening = this;\r\n               break;\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcOpeningElement object.\r\n      /// </summary>\r\n      /// <param name=\"ifcOpeningElement\">The IfcOpeningElement handle.</param>\r\n      /// <returns>The IFCOpeningElement object.</returns>\r\n      public static IFCOpeningElement ProcessIFCOpeningElement(IFCAnyHandle ifcOpeningElement)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcOpeningElement))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcOpeningElement);\r\n            return null;\r\n         }\r\n\r\n         //sub classes not handled yet!\r\n         IFCEntity openingElement;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcOpeningElement.StepId, out openingElement))\r\n            openingElement = new IFCOpeningElement(ifcOpeningElement);\r\n         return (openingElement as IFCOpeningElement);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCOrientedEdge.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCOrientedEdge entity\r\n   /// </summary>\r\n   public class IFCOrientedEdge : IFCEdge\r\n   {\r\n      /// <summary>\r\n      /// Indicates if the topological orientation as used coincides with the orientation from start vertex to end vertex of the edge element.\r\n      /// </summary>\r\n      public bool Orientation { get; protected set; } = true;\r\n\r\n\r\n      /// <summary>\r\n      /// Edge entity used to construct this oriented edge.\r\n      /// </summary>\r\n      public IFCEdge EdgeElement { get; protected set; } = null;\r\n\r\n      protected IFCOrientedEdge()\r\n      {\r\n      }\r\n\r\n      protected IFCOrientedEdge(IFCAnyHandle ifcOrientedEdge)\r\n      {\r\n         Process(ifcOrientedEdge);\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcOrientedEdge)\r\n      {\r\n         base.Process(ifcOrientedEdge);\r\n\r\n         IFCAnyHandle edgeElement = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcOrientedEdge, \"EdgeElement\", true);\r\n         EdgeElement = IFCEdge.ProcessIFCEdge(edgeElement);\r\n\r\n         bool found = false;\r\n         bool orientation = IFCImportHandleUtil.GetRequiredBooleanAttribute(ifcOrientedEdge, \"Orientation\", out found);\r\n         if (found)\r\n         {\r\n            Orientation = orientation;\r\n         }\r\n         else\r\n         {\r\n            Importer.TheLog.LogWarning(ifcOrientedEdge.StepId, \"Cannot find Orientation attribute, defaulting to true\", false);\r\n            Orientation = true;\r\n         }\r\n\r\n         // ODA Toolkit doesn't support derived attributes.  Set EdgeStart and EdgeEnd\r\n         // if they haven't been set.\r\n         if (EdgeStart == null)\r\n         {\r\n            EdgeStart = Orientation ? EdgeElement.EdgeStart : EdgeElement.EdgeEnd;\r\n            if (EdgeStart == null)\r\n               Importer.TheLog.LogError(ifcOrientedEdge.StepId, \"Cannot find the starting vertex\", true);\r\n         }\r\n\r\n         if (EdgeEnd == null)\r\n         {\r\n            EdgeEnd = Orientation ? EdgeElement.EdgeEnd : EdgeElement.EdgeStart;\r\n            if (EdgeEnd == null)\r\n               Importer.TheLog.LogError(ifcOrientedEdge.StepId, \"Cannot find the ending vertex\", true);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCOrientedEdge object from a handle of type IfcOrientedEdge.\r\n      /// </summary>\r\n      /// <param name=\"ifcOrientedEdge\">The IFC handle.</param>\r\n      /// <returns>The IFCOrientedEdge object.</returns>\r\n      public static IFCOrientedEdge ProcessIFCOrientedEdge(IFCAnyHandle ifcOrientedEdge)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcOrientedEdge))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcOrientedEdge);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity orientedEdge;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcOrientedEdge.StepId, out orientedEdge))\r\n            orientedEdge = new IFCOrientedEdge(ifcOrientedEdge);\r\n         return (orientedEdge as IFCOrientedEdge);\r\n      }\r\n\r\n      public override Curve GetGeometry()\r\n      {\r\n         Curve curve = EdgeElement == null ? null : EdgeElement.GetGeometry();\r\n         if (curve != null)\r\n         {\r\n            // If curve is not null then EdgeElement is not null\r\n            // TODO in REVIT-61368: get the correct orientation of the curve\r\n            return curve;\r\n         }\r\n         else\r\n            return null;\r\n      }\r\n\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCOwnerHistory.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class for storing IfcOwnerHistory.\r\n   /// </summary>\r\n   public class IFCOwnerHistory : IFCEntity\r\n   {\r\n      // TODO: Rest of fields.\r\n      IFCApplication m_OwningApplication = null;\r\n      DateTime m_CreationDate;\r\n\r\n      protected IFCOwnerHistory()\r\n      {\r\n\r\n      }\r\n\r\n      protected IFCOwnerHistory(IFCAnyHandle ifcOwnerHistory)\r\n      {\r\n         Process(ifcOwnerHistory);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcOwnerHistory attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcOwnerHistory\">The IfcOwnerHistory handle.</param>\r\n      override protected void Process(IFCAnyHandle ifcOwnerHistory)\r\n      {\r\n         base.Process(ifcOwnerHistory);\r\n\r\n         int? creationDate = IFCAnyHandleUtil.GetIntAttribute(ifcOwnerHistory, \"CreationDate\");\r\n         if (creationDate.HasValue)\r\n         {\r\n            // convert IFC seconds from 1/1/1970 to DateTime ticks since 1/1/1601.\r\n            long ticks = ((long)creationDate.Value + 11644473600) * 10000000;\r\n            m_CreationDate = new DateTime(ticks, DateTimeKind.Utc).AddYears(1600);\r\n         }\r\n\r\n         IFCAnyHandle owningApplication = IFCAnyHandleUtil.GetInstanceAttribute(ifcOwnerHistory, \"OwningApplication\");\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(owningApplication))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcApplication);\r\n            return;\r\n         }\r\n\r\n         m_OwningApplication = IFCApplication.ProcessIFCApplication(owningApplication);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns an IFCOwnerHistory object for an IfcOwnerHistory handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcOwnerHistory\">The IfcOwnerHistory handle.</param>\r\n      /// <returns></returns>\r\n      public static IFCOwnerHistory ProcessIFCOwnerHistory(IFCAnyHandle ifcOwnerHistory)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcOwnerHistory))\r\n            throw new ArgumentNullException(\"ifcOwnerHistory\");\r\n\r\n         IFCEntity ownerHistory;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcOwnerHistory.StepId, out ownerHistory))\r\n            ownerHistory = new IFCOwnerHistory(ifcOwnerHistory);\r\n         return (ownerHistory as IFCOwnerHistory);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the Application ApplicationDeveloper string.\r\n      /// </summary>\r\n      /// <returns>The ApplicationDeveloper string, if set.</returns>\r\n      public string ApplicationDeveloper()\r\n      {\r\n         if (m_OwningApplication == null)\r\n            return null;\r\n         return m_OwningApplication.ApplicationDeveloper;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the Application Version string.\r\n      /// </summary>\r\n      /// <returns>The Version string, if set.</returns>\r\n      public string Version()\r\n      {\r\n         if (m_OwningApplication == null)\r\n            return null;\r\n         return m_OwningApplication.Version;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the Application ApplicationFullName string.\r\n      /// </summary>\r\n      /// <returns>The ApplicationFullName string, if set.</returns>\r\n      public string ApplicationFullName()\r\n      {\r\n         if (m_OwningApplication == null)\r\n            return null;\r\n         return m_OwningApplication.ApplicationFullName;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the Application ApplicationIdentifier string.\r\n      /// </summary>\r\n      /// <returns>The ApplicationIdentifier string, if set.</returns>\r\n      public string ApplicationIdentifier()\r\n      {\r\n         if (m_OwningApplication == null)\r\n            return null;\r\n         return m_OwningApplication.ApplicationIdentifier;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPhysicalComplexQuantity.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing Autodesk.Revit.DB.IFC;\nusing Autodesk.Revit.DB;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Import.Utility;\n\nnamespace Revit.IFC.Import.Data\n{\n   /// <summary>\n   /// Represents an IfcPhysicalComplexQuantity.\n   /// </summary>\n   public class IFCPhysicalComplexQuantity : IFCPhysicalQuantity\n   {\n      /// <summary>\n      /// Set of physical quantities that are grouped by this complex physical quantity.\n      /// </summary>\n      public ISet<IFCPhysicalQuantity> HasQuantities { get; protected set; } = new HashSet<IFCPhysicalQuantity>();\n\n      /// <summary>\n      /// Identification of the discrimination by which this physical complex property is distinguished.\n      /// </summary>\n      public string Discrimination { get; protected set; }\n\n      /// <summary>\n      /// The optional quality.\n      /// </summary>\n      public string Quality { get; protected set; }\n\n      /// <summary>\n      /// The optional usgage.\n      /// </summary>\n      public string Usage { get; protected set; }\n\n      protected IFCPhysicalComplexQuantity()\n      {\n      }\n\n      protected IFCPhysicalComplexQuantity(IFCAnyHandle IfcPhysicalComplexQuantity)\n      {\n         Process(IfcPhysicalComplexQuantity);\n      }\n\n      /// <summary>\n      /// Processes an IFC physical complex quantity.\n      /// </summary>\n      /// <param name=\"IfcPhysicalComplexQuantity\">The IfcPhysicalComplexQuantity object.</param>\n      /// <returns>The IfcPhysicalComplexQuantity object.</returns>\n      override protected void Process(IFCAnyHandle IfcPhysicalComplexQuantity)\n      {\n         base.Process(IfcPhysicalComplexQuantity);\n\n         HashSet<IFCAnyHandle> ifcPhysicalQuantities =\n             IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(IfcPhysicalComplexQuantity, \"HasQuantities\");\n         if (ifcPhysicalQuantities == null || ifcPhysicalQuantities.Count == 0)\n            throw new InvalidOperationException(\"#\" + IfcPhysicalComplexQuantity.StepId + \": no physical quantities, aborting.\");\n\n         foreach (IFCAnyHandle ifcPhysicalQuantity in ifcPhysicalQuantities)\n         {\n            if (ifcPhysicalQuantity == IfcPhysicalComplexQuantity)\n            {\n               Importer.TheLog.LogWarning(ifcPhysicalQuantity.StepId, \"The IfcPhysicalComplexQuantity should not reference itself within the list of HasQuantities, ignoring\", false);\n               continue;\n            }\n\n            try\n            {\n               HasQuantities.Add(IFCPhysicalQuantity.ProcessIFCPhysicalQuantity(ifcPhysicalQuantity));\n            }\n            catch\n            {\n               Importer.TheLog.LogWarning(IfcPhysicalComplexQuantity.StepId, \"Invalid physical quantity, ignoring\", false);\n            }\n         }\n\n         Discrimination = IFCImportHandleUtil.GetRequiredStringAttribute(IfcPhysicalComplexQuantity, \"Discrimination\", true);\n\n         Quality = IFCImportHandleUtil.GetOptionalStringAttribute(IfcPhysicalComplexQuantity, \"Quality\", null);\n\n         Usage = IFCImportHandleUtil.GetOptionalStringAttribute(IfcPhysicalComplexQuantity, \"Usage\", null);\n\n      }\n\n      /// <summary>\n      /// Processes an IFC physical complex quantity.\n      /// </summary>\n      /// <param name=\"IfcPhysicalComplexQuantity\">The physical quantity.</param>\n      /// <returns>The IfcPhysicalComplexQuantity object.</returns>\n      public static IFCPhysicalComplexQuantity ProcessIFCPhysicalComplexQuantity(IFCAnyHandle IfcPhysicalComplexQuantity)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(IfcPhysicalComplexQuantity))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPhysicalComplexQuantity);\n            return null;\n         }\n\n         try\n         {\n            IFCEntity physicalComplexQuantity;\n            if (IFCImportFile.TheFile.EntityMap.TryGetValue(IfcPhysicalComplexQuantity.StepId, out physicalComplexQuantity))\n               return (physicalComplexQuantity as IFCPhysicalComplexQuantity);\n\n            return new IFCPhysicalComplexQuantity(IfcPhysicalComplexQuantity);\n         }\n         catch (Exception ex)\n         {\n            Importer.TheLog.LogError(IfcPhysicalComplexQuantity.StepId, ex.Message, false);\n            return null;\n         }\n      }\n\n      /// <summary>\n      /// Create a quantity for a given element.\n      /// </summary>\n      /// <param name=\"doc\">The document.</param>\n      /// <param name=\"element\">The element being created.</param>\n      /// <param name=\"category\">The element's category.</param>\n      /// <param name=\"objDef\">The oject definition.</param>\n      /// <param name=\"parameterGroupMap\">The parameters.</param>\n      /// <param name=\"quantityFullName\">The name of the containing quantity set with quantity name.</param>\n      /// <param name=\"createdParameters\">The names of the created parameters.</param>\n      public override void Create(Document doc, Element element, Category category, IFCObjectDefinition objDef, \n         IFCParameterSetByGroup parameterGroupMap, string quantityFullName, ISet<string> createdParameters,\n         ParametersToSet parametersToSet)\n      {\n         foreach (IFCPhysicalQuantity quantity in HasQuantities)\n         {\n            string complexFullName = AppendComplexQuantityName(quantityFullName, quantity.Name);\n            quantity.Create(doc, element, category, objDef, parameterGroupMap, complexFullName, createdParameters,\n               parametersToSet);\n         }\n      }\n\n      /// <summary>\n      /// Add sub-quantity name to full quantity name\n      /// </summary>\n      /// <param name=\"quantityFullName\">The full quantity name.</param>\n      /// <param name=\"subQuantityName\">The sub-quantity name</param>\n      /// <returns>The full quantity name with sub-quantity name.</returns>\n      protected string AppendComplexQuantityName(string quantityFullName, string subQuantityName)\n      {\n         // Navisworks uses this engine and needs support for the old naming.\n         // We use the API-only UseStreamlinedOptions as a proxy for knowing this.\n         int insertIndx = (IFCImportFile.TheFile.Options.UseStreamlinedOptions) ?\n            quantityFullName.IndexOf('(') : quantityFullName.Length;\n         return quantityFullName.Insert((insertIndx < 0 ? quantityFullName.Length : insertIndx), \".\" + subQuantityName);\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPhysicalQuantity.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcPhysicalQuantity.\r\n   /// </summary>\r\n   public abstract class IFCPhysicalQuantity : IFCEntity\r\n   {\r\n      /// <summary>\r\n      /// The name.\r\n      /// </summary>\r\n      public string Name { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// The optional description.\r\n      /// </summary>\r\n      public string Description { get; protected set; }\r\n\r\n      protected IFCPhysicalQuantity()\r\n      {\r\n      }\r\n\r\n      protected IFCPhysicalQuantity(IFCAnyHandle ifcPhysicalQuantity)\r\n      {\r\n         Process(ifcPhysicalQuantity);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC physical quantity.\r\n      /// </summary>\r\n      /// <param name=\"ifcPhysicalQuantity\">The IfcPhysicalQuantity object.</param>\r\n      /// <returns>The IFCPhysicalQuantity object.</returns>\r\n      override protected void Process(IFCAnyHandle ifcPhysicalQuantity)\r\n      {\r\n         base.Process(ifcPhysicalQuantity);\r\n\r\n         Name = IFCImportHandleUtil.GetRequiredStringAttribute(ifcPhysicalQuantity, \"Name\", true);\r\n\r\n         Description = IFCImportHandleUtil.GetOptionalStringAttribute(ifcPhysicalQuantity, \"Description\", null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC physical quantity.\r\n      /// </summary>\r\n      /// <param name=\"ifcPhysicalQuantity\">The physical quantity.</param>\r\n      /// <returns>The IFCPhysicalQuantity object.</returns>\r\n      public static IFCPhysicalQuantity ProcessIFCPhysicalQuantity(IFCAnyHandle ifcPhysicalQuantity)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPhysicalQuantity))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPhysicalQuantity);\r\n            return null;\r\n         }\r\n\r\n         try\r\n         {\r\n            IFCEntity physicalQuantity;\r\n            if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcPhysicalQuantity.StepId, out physicalQuantity))\r\n               return (physicalQuantity as IFCPhysicalQuantity);\r\n\r\n            if (IFCAnyHandleUtil.IsSubTypeOf(ifcPhysicalQuantity, IFCEntityType.IfcPhysicalSimpleQuantity))\r\n               return IFCPhysicalSimpleQuantity.ProcessIFCPhysicalSimpleQuantity(ifcPhysicalQuantity);\r\n\r\n            if (IFCAnyHandleUtil.IsSubTypeOf(ifcPhysicalQuantity, IFCEntityType.IfcPhysicalComplexQuantity))\r\n               return IFCPhysicalComplexQuantity.ProcessIFCPhysicalComplexQuantity(ifcPhysicalQuantity);\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            Importer.TheLog.LogError(ifcPhysicalQuantity.StepId, ex.Message, false);\r\n            return null;\r\n         }\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcPhysicalQuantity, IFCEntityType.IfcPhysicalQuantity, false);\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a quantity for a given element.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element being created.</param>\r\n      /// <param name=\"category\">The element's category.</param>\r\n      /// <param name=\"parameterGroupMap\">The parameters of the element.  Cached for performance.</param>\r\n      /// <param name=\"quantityFullName\">The name of the containing quantity set with quantity name.</param>\r\n      /// <param name=\"createdParameters\">The names of the created parameters.</param>\r\n      public abstract void Create(Document doc, Element element, Category category, IFCObjectDefinition objDef, \r\n         IFCParameterSetByGroup parameterGroupMap, string quantityFullName, ISet<string> createdParameters,\r\n         ParametersToSet parametersToSet);\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPhysicalSimpleQuantity.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcPhysicalSimpleQuantity.\r\n   /// </summary>\r\n   public class IFCPhysicalSimpleQuantity : IFCPhysicalQuantity\r\n   {\r\n      /// <summary>\r\n      /// The base unit type, if not defined in the IFC file, based on the type of quantity.\r\n      /// </summary>\r\n      protected ForgeTypeId BaseUnitType { get; set; }\r\n\r\n      /// <summary>\r\n      /// The associated unit.\r\n      /// </summary>\r\n      protected IFCUnit IFCUnit { get; set; }\r\n\r\n      /// <summary>\r\n      /// The value, in IFCUnit unit.\r\n      /// </summary>\r\n      protected IFCData Value { get; set; }\r\n\r\n      protected IFCPhysicalSimpleQuantity()\r\n      {\r\n      }\r\n\r\n      protected IFCPhysicalSimpleQuantity(IFCAnyHandle ifcPhysicalSimpleQuantity)\r\n      {\r\n         Process(ifcPhysicalSimpleQuantity);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC physical simple quantity.\r\n      /// </summary>\r\n      /// <param name=\"ifcPhysicalSimpleQuantity\">The IfcPhysicalSimpleQuantity object.</param>\r\n      /// <returns>The IFCPhysicalSimpleQuantity object.</returns>\r\n      override protected void Process(IFCAnyHandle ifcPhysicalSimpleQuantity)\r\n      {\r\n         base.Process(ifcPhysicalSimpleQuantity);\r\n\r\n         IFCAnyHandle unit = IFCImportHandleUtil.GetOptionalInstanceAttribute(ifcPhysicalSimpleQuantity, \"Unit\");\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(unit))\r\n            IFCUnit = IFCUnit.ProcessIFCUnit(unit);\r\n\r\n         // Process subtypes of IfcPhysicalSimpleQuantity here.\r\n         string attributeName = ifcPhysicalSimpleQuantity.TypeName.Substring(11) + \"Value\";\r\n         Value = ifcPhysicalSimpleQuantity.GetAttribute(attributeName);\r\n         BaseUnitType = IFCDataUtil.GetUnitTypeFromData(Value, new ForgeTypeId());\r\n\r\n         if (BaseUnitType.Empty())\r\n         {\r\n            // Determine it from the attributeName.\r\n            if (string.Compare(attributeName, \"LengthValue\", true) == 0)\r\n               BaseUnitType = SpecTypeId.Length;\r\n            else if (string.Compare(attributeName, \"AreaValue\", true) == 0)\r\n               BaseUnitType = SpecTypeId.Area;\r\n            else if (string.Compare(attributeName, \"VolumeValue\", true) == 0)\r\n               BaseUnitType = SpecTypeId.Volume;\r\n            else if (string.Compare(attributeName, \"CountValue\", true) == 0)\r\n               BaseUnitType = SpecTypeId.Number;\r\n            else if (string.Compare(attributeName, \"WeightValue\", true) == 0)\r\n               BaseUnitType = SpecTypeId.Mass;\r\n            else if (string.Compare(attributeName, \"TimeValue\", true) == 0)\r\n               BaseUnitType = SpecTypeId.Number;  // No time unit type in Revit.\r\n            else\r\n            {\r\n               Importer.TheLog.LogWarning(Id, \"Can't determine unit type for IfcPhysicalSimpleQuantity of type: \" + attributeName, true);\r\n               BaseUnitType = SpecTypeId.Number;\r\n            }\r\n         }\r\n\r\n\r\n         if (IFCUnit == null)\r\n            IFCUnit = IFCImportFile.TheFile.IFCUnits.GetIFCProjectUnit(BaseUnitType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC physical simple quantity.\r\n      /// </summary>\r\n      /// <param name=\"ifcPhysicalSimpleQuantity\">The physical quantity.</param>\r\n      /// <returns>The IFCPhysicalSimpleQuantity object.</returns>\r\n      public static IFCPhysicalSimpleQuantity ProcessIFCPhysicalSimpleQuantity(IFCAnyHandle ifcPhysicalSimpleQuantity)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPhysicalSimpleQuantity))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPhysicalSimpleQuantity);\r\n            return null;\r\n         }\r\n\r\n         try\r\n         {\r\n            IFCEntity physicalSimpleQuantity;\r\n            if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcPhysicalSimpleQuantity.StepId, out physicalSimpleQuantity))\r\n               return (physicalSimpleQuantity as IFCPhysicalSimpleQuantity);\r\n\r\n            return new IFCPhysicalSimpleQuantity(ifcPhysicalSimpleQuantity);\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            Importer.TheLog.LogError(ifcPhysicalSimpleQuantity.StepId, ex.Message, false);\r\n            return null;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a quantity for a given element.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element being created.</param>\r\n      /// <param name=\"category\">The element's category.</param>\r\n      /// <param name=\"parameterGroupMap\">The parameters of the element.  Cached for performance.</param>\r\n      /// <param name=\"quantityFullName\">The name of the containing quantity set with quantity name.</param>\r\n      /// <param name=\"createdParameters\">The names of the created parameters.</param>\r\n      public override void Create(Document doc, Element element, Category category, IFCObjectDefinition objDef, \r\n         IFCParameterSetByGroup parameterGroupMap, string quantityFullName, ISet<string> createdParameters,\r\n         ParametersToSet parametersToSet)\r\n      {\r\n         double baseValue = 0.0;\r\n         IFCDataPrimitiveType type = Value.PrimitiveType;\r\n         switch (type)\r\n         {\r\n            case IFCDataPrimitiveType.Double:\r\n            case IFCDataPrimitiveType.Number:\r\n               baseValue = Value.AsDouble();\r\n               break;\r\n            case IFCDataPrimitiveType.Integer:\r\n               // This case isn't valid, but could happen when repairing a file\r\n               Importer.TheLog.LogWarning(Id, \"Unexpected integer parameter type, repairing.\", false);\r\n               baseValue = Value.AsInteger();\r\n               break;\r\n            default:\r\n               Importer.TheLog.LogError(Id, \"Invalid parameter type: \" + type.ToString() + \" for IfcPhysicalSimpleQuantity\", false);\r\n               return;\r\n         }\r\n\r\n         double doubleValueToUse = Importer.TheProcessor.ScaleValues ?\r\n            IFCUnit?.Convert(baseValue) ?? baseValue :\r\n            baseValue;\r\n\r\n         Parameter existingParameter = null;\r\n         string parameterName = quantityFullName;\r\n\r\n         if (!parameterGroupMap.TryFindParameter(parameterName, out existingParameter))\r\n         {\r\n            int parameterNameCount = 2;\r\n            while (createdParameters.Contains(parameterName))\r\n            {\r\n               parameterName = quantityFullName + \" \" + parameterNameCount;\r\n               parameterNameCount++;\r\n            }\r\n            if (parameterNameCount > 2)\r\n               Importer.TheLog.LogWarning(Id, \"Renamed parameter: \" + quantityFullName + \" to: \" + parameterName, false);\r\n\r\n            if (existingParameter == null)\r\n            {\r\n               ForgeTypeId specTypeId;\r\n               ForgeTypeId unitsTypeId = null;\r\n\r\n               if (IFCUnit != null)\r\n               {\r\n                  specTypeId = IFCUnit.Spec;\r\n                  unitsTypeId = IFCUnit.Unit;\r\n               }\r\n               else\r\n               {\r\n                  specTypeId = IFCDataUtil.GetUnitTypeFromData(Value, SpecTypeId.Number);\r\n               }\r\n\r\n               bool created = parametersToSet.AddParameterDouble(doc, element, category, objDef, parameterName, specTypeId, unitsTypeId, doubleValueToUse, Id);\r\n               if (created)\r\n                  createdParameters.Add(parameterName);\r\n\r\n               return;\r\n            }\r\n         }\r\n\r\n         bool setValue = true;\r\n         switch (existingParameter.StorageType)\r\n         {\r\n            case StorageType.String:\r\n               parametersToSet.AddStringParameter(existingParameter, doubleValueToUse.ToString());\r\n               break;\r\n            case StorageType.Double:\r\n               parametersToSet.AddDoubleParameter(existingParameter, doubleValueToUse);\r\n               break;\r\n            default:\r\n               setValue = false;\r\n               break;\r\n         }\r\n\r\n         if (!setValue)\r\n            Importer.TheLog.LogError(Id, \"Couldn't create parameter: \" + Name + \" of storage type: \" + existingParameter.StorageType.ToString(), false);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPlane.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCPlane entity\r\n   /// </summary>\r\n   public class IFCPlane : IFCElementarySurface\r\n   {\r\n      Plane m_Plane = null;\r\n\r\n      public Plane Plane\r\n      {\r\n         get { return m_Plane; }\r\n         protected set { m_Plane = value; }\r\n      }\r\n\r\n      protected IFCPlane()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcPlane)\r\n      {\r\n         base.Process(ifcPlane);\r\n      }\r\n\r\n      protected IFCPlane(IFCAnyHandle ifcPlane)\r\n      {\r\n         Process(ifcPlane);\r\n\r\n         m_Plane = Plane.Create(new Frame(Position.Origin, Position.BasisX, Position.BasisY, Position.BasisZ));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCPlane object from a handle of type ifcPlane.\r\n      /// </summary>\r\n      /// <param name=\"ifcPlane\">The IFC handle.</param>\r\n      /// <returns>The IFCPlane object.</returns>\r\n      public static IFCPlane ProcessIFCPlane(IFCAnyHandle ifcPlane)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPlane))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPlane);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity plane;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcPlane.StepId, out plane))\r\n            plane = new IFCPlane(ifcPlane);\r\n\r\n         return plane as IFCPlane;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the surface which defines the internal shape of the face\r\n      /// </summary>\r\n      /// <param name=\"lcs\">The local coordinate system for the surface.  Can be null.</param>\r\n      /// <returns>The surface which defines the internal shape of the face</returns>\r\n      public override Surface GetSurface(Transform lcs)\r\n      {\r\n         if (lcs == null || Plane == null)\r\n            return Plane;\r\n\r\n         // Make a new copy of the plane.\r\n         return Plane.CreateByNormalAndOrigin(lcs.OfVector(Plane.Normal), lcs.OfPoint(Plane.Origin));\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPolyLoop.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCPolyLoop : IFCLoop\r\n   {\r\n      IList<XYZ> m_Polygon = null;\r\n\r\n      /// <summary>\r\n      /// The XYZ list of scaled points for the polygon.\r\n      /// </summary>\r\n      public IList<XYZ> Polygon\r\n      {\r\n         get\r\n         {\r\n            if (m_Polygon == null)\r\n               m_Polygon = new List<XYZ>();\r\n            return m_Polygon;\r\n         }\r\n         protected set { m_Polygon = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the Loop definition represents a non-empty boundary.\r\n      /// </summary>\r\n      /// <returns>True if the FaceBound contains any information.</returns>\r\n      public override bool IsEmpty()\r\n      {\r\n         return (Polygon?.Count ?? 0) == 0;\r\n      }\r\n\r\n      protected IFCPolyLoop()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcPolyLoop)\r\n      {\r\n         base.Process(ifcPolyLoop);\r\n\r\n         List<IFCAnyHandle> ifcPolygon =\r\n             IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcPolyLoop, \"Polygon\");\r\n\r\n         if (ifcPolygon == null)\r\n            return; // TODO: WARN\r\n\r\n         Polygon = IFCPoint.ProcessScaledLengthIFCCartesianPoints(ifcPolygon);\r\n\r\n         // Check for duplicate points, including wrapping around, and remove them.\r\n         int numVertices = Polygon.Count;\r\n         for (int ii = numVertices - 1; (ii != -1) && numVertices >= 3; ii--)\r\n         {\r\n            if (MathUtil.IsAlmostEqualAbsolute(Polygon[ii], Polygon[(ii + 1) % numVertices]))\r\n            {\r\n               Importer.TheLog.LogError(ifcPolyLoop.StepId, \"The polygon vertex at index \" + ii + \" is a duplicate, removing.\", false);\r\n               Polygon.RemoveAt(ii);\r\n               numVertices--;\r\n            }\r\n         }\r\n         \r\n         if (numVertices < 3)\r\n         {\r\n            // This used to throw an error.  However, we found files that threw this error\r\n            // thousands of times, causing incredibly slow links.  Instead, null out the\r\n            // data and log an error.\r\n            Polygon = null;\r\n            Importer.TheLog.LogError(ifcPolyLoop.StepId, \"Polygon attribute has only \" + numVertices + \" vertices, 3 expected.\", false);\r\n         }\r\n      }\r\n\r\n      override protected CurveLoop GenerateLoop()\r\n      {\r\n         IList<XYZ> polygon = Polygon;\r\n         if (polygon == null)\r\n         {\r\n            // This used to throw an error.  However, we found files that threw this error\r\n            // thousands of times, causing incredibly slow links.  Instead, null out the\r\n            // data and log an error.\r\n            Importer.TheLog.LogError(Id, \"missing polygon, ignoring.\", false);\r\n         }\r\n\r\n         int numVertices = Polygon.Count;\r\n         if (numVertices < 3)\r\n            throw new InvalidOperationException(\"#\" + Id + \": Polygon attribute has only \" + numVertices + \" vertices, 3 expected.\");\r\n\r\n         return IFCGeometryUtil.CreatePolyCurveLoop(polygon, null, Id, true);\r\n      }\r\n\r\n      override protected IList<XYZ> GenerateLoopVertices()\r\n      {\r\n         return Polygon;\r\n      }\r\n\r\n      protected IFCPolyLoop(IFCAnyHandle ifcPolyLoop)\r\n      {\r\n         Process(ifcPolyLoop);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCPolyLoop object from a handle of type IfcPolyLoop.\r\n      /// </summary>\r\n      /// <param name=\"ifcPolyLoop\">The IFC handle.</param>\r\n      /// <returns>The IFCPolyLoop object.</returns>\r\n      public static IFCPolyLoop ProcessIFCPolyLoop(IFCAnyHandle ifcPolyLoop)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPolyLoop))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPolyLoop);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity polyLoop;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcPolyLoop.StepId, out polyLoop))\r\n            polyLoop = new IFCPolyLoop(ifcPolyLoop);\r\n\r\n         return (polyLoop as IFCPolyLoop);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPolyline.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCPolyline entity\r\n   /// </summary>\r\n   public class IFCPolyline : IFCBoundedCurve\r\n   {\r\n      protected IFCPolyline()\r\n      {\r\n      }\r\n\r\n      protected IFCPolyline(IFCAnyHandle polyline)\r\n      {\r\n         Process(polyline);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcCurve)\r\n      {\r\n         base.Process(ifcCurve);\r\n\r\n         IList<IFCAnyHandle> points = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcCurve, \"Points\");\r\n         int numPoints = points.Count;\r\n         if (numPoints < 2)\r\n         {\r\n            string msg = \"IfcPolyLine had \" + numPoints + \", expected at least 2, ignoring\";\r\n            Importer.TheLog.LogError(Id, msg, false);\r\n            return;\r\n         }\r\n\r\n         IList<XYZ> pointXYZs = new List<XYZ>();\r\n         foreach (IFCAnyHandle point in points)\r\n         {\r\n            XYZ pointXYZ = IFCPoint.ProcessScaledLengthIFCCartesianPoint(point);\r\n            pointXYZs.Add(pointXYZ);\r\n         }\r\n\r\n         if (pointXYZs.Count != numPoints)\r\n         {\r\n            Importer.TheLog.LogError(Id, \"Some of the IFC points cannot be converted to Revit points\", true);\r\n         }\r\n         SetCurveLoop(IFCGeometryUtil.CreatePolyCurveLoop(pointXYZs, points, Id, false), pointXYZs);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCPolyline object from a handle of type IfcPolyline\r\n      /// </summary>\r\n      /// <param name=\"ifcPolyline\">The IFC handle</param>\r\n      /// <returns>The IFCPolyline object</returns>\r\n      public static IFCPolyline ProcessIFCPolyline(IFCAnyHandle ifcPolyline)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPolyline))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPolyline);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity polyline = null;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcPolyline.StepId, out polyline))\r\n            polyline = new IFCPolyline(ifcPolyline);\r\n\r\n         return (polyline as IFCPolyline);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPort.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcPort.\r\n   /// </summary>\r\n   public abstract class IFCPort : IFCProduct\r\n   {\r\n      private IFCAnyHandle m_ContainedInHandle = null;\r\n\r\n      private IFCAnyHandle m_ConnectedFromHandle = null;\r\n\r\n      private IFCAnyHandle m_ConnectedToHandle = null;\r\n\r\n      private IFCElement m_ContainedIn = null;\r\n\r\n      private IFCPort m_ConnectedFrom = null;\r\n\r\n      private IFCPort m_ConnectedTo = null;\r\n\r\n      /// <summary>\r\n      /// The IFCElement that contains this port.\r\n      /// </summary>\r\n      public IFCElement ContainedIn\r\n      {\r\n         get\r\n         {\r\n            if (m_ContainedIn == null && m_ContainedInHandle != null)\r\n            {\r\n               m_ContainedIn = ProcessIFCRelation.ProcessRelatedElement(m_ContainedInHandle);\r\n               m_ContainedInHandle = null;\r\n            }\r\n            return m_ContainedIn;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The IFCPort connected to this port.  Ports are required to be connected in pairs.\r\n      /// Either ConnectedFrom or ConnectedTo will be null.\r\n      /// </summary>\r\n      public IFCPort ConnectedFrom\r\n      {\r\n         get\r\n         {\r\n            if (m_ConnectedFrom == null && m_ConnectedFromHandle != null)\r\n            {\r\n               m_ConnectedFrom = ProcessIFCRelation.ProcessRelatingPort(m_ConnectedFromHandle);\r\n               m_ConnectedFromHandle = null;\r\n            }\r\n            return m_ConnectedFrom;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The IFCPort connected to this port.  Ports are required to be connected in pairs.\r\n      /// Either ConnectedFrom or ConnectedTo will be null.\r\n      /// </summary>\r\n      public IFCPort ConnectedTo\r\n      {\r\n         get\r\n         {\r\n            if (m_ConnectedTo == null && m_ConnectedToHandle != null)\r\n            {\r\n               m_ConnectedTo = ProcessIFCRelation.ProcessRelatedPort(m_ConnectedToHandle);\r\n               m_ConnectedToHandle = null;\r\n            }\r\n            return m_ConnectedTo;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCPort()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcPort attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcPort\">The IfcPort handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcPort)\r\n      {\r\n         base.Process(ifcPort);\r\n\r\n         // We will delay processing the containment information to the PostProcess stp.  For complicated systems, creating all of these\r\n         // during the standard Process step may result in a stack overflow.\r\n\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4))\r\n         {\r\n            HashSet<IFCAnyHandle> containedIn = IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcPort, \"ContainedIn\");\r\n            if (containedIn != null && containedIn.Count != 0)\r\n            {\r\n               m_ContainedInHandle = containedIn.First();\r\n            }\r\n         }\r\n         else\r\n         {\r\n            m_ContainedInHandle = IFCAnyHandleUtil.GetInstanceAttribute(ifcPort, \"ContainedIn\");\r\n         }\r\n\r\n         HashSet<IFCAnyHandle> connectedFrom = IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcPort, \"ConnectedFrom\");\r\n         if (connectedFrom != null && connectedFrom.Count != 0)\r\n         {\r\n            m_ConnectedFromHandle = connectedFrom.First();\r\n         }\r\n\r\n         HashSet<IFCAnyHandle> connectedTo = IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcPort, \"ConnectedTo\");\r\n         if (connectedTo != null && connectedTo.Count != 0)\r\n         {\r\n            m_ConnectedToHandle = connectedTo.First();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Post-process IfcPort attributes.\r\n      /// </summary>\r\n      public override void PostProcess()\r\n      {\r\n         base.PostProcess();\r\n\r\n         // Force ContainedIn, ConnectedFrom and ConnectedTo to be created in the respective getters.\r\n\r\n         IFCElement containedIn = ContainedIn;\r\n\r\n         IFCPort connectedFrom = ConnectedFrom;\r\n\r\n         IFCPort connectedTo = ConnectedTo;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit element params based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      protected override void CreateParametersInternal(Document doc, Element element)\r\n      {\r\n         base.CreateParametersInternal(doc, element);\r\n\r\n         if (element != null)\r\n         {\r\n            IFCObjectDefinition portOwner = IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4) ? NestsWhole : ContainedIn;\r\n            Category category = (portOwner != null) || (ConnectedFrom != null) ?\r\n            IFCPropertySet.GetCategoryForParameterIfValid(element, Id) : null;\r\n            if (portOwner != null)\r\n            {\r\n               string guid = portOwner.GlobalId;\r\n               if (!string.IsNullOrWhiteSpace(guid))\r\n                  ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcElement ContainedIn IfcGUID\", guid, Id);\r\n\r\n               string name = portOwner.Name;\r\n               if (!string.IsNullOrWhiteSpace(name))\r\n                  ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcElement ContainedIn Name\", name, Id);\r\n            }\r\n\r\n            if (ConnectedFrom != null)\r\n            {\r\n               string guid = ConnectedFrom.GlobalId;\r\n               if (!string.IsNullOrWhiteSpace(guid))\r\n                  ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcPort ConnectedFrom IfcGUID\", guid, Id);\r\n\r\n               string name = ConnectedFrom.Name;\r\n               if (!string.IsNullOrWhiteSpace(name))\r\n                  ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcPort ConnectedFrom Name\", name, Id);\r\n            }\r\n\r\n            if (ConnectedTo != null)\r\n            {\r\n               string guid = ConnectedTo.GlobalId;\r\n               if (!string.IsNullOrWhiteSpace(guid))\r\n                  ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcPort ConnectedTo IfcGUID\", guid, Id);\r\n\r\n               string name = ConnectedTo.Name;\r\n               if (!string.IsNullOrWhiteSpace(name))\r\n                  ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcPort ConnectedTo Name\", name, Id);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcPort object.\r\n      /// </summary>\r\n      /// <param name=\"ifcPort\">The IfcPort handle.</param>\r\n      /// <returns>The IFCPort object.</returns>\r\n      public static IFCPort ProcessIFCPort(IFCAnyHandle ifcPort)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPort))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPort);\r\n            return null;\r\n         }\r\n\r\n         try\r\n         {\r\n            IFCEntity cachedPort;\r\n            if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcPort.StepId, out cachedPort))\r\n               return (cachedPort as IFCPort);\r\n\r\n            if (IFCAnyHandleUtil.IsSubTypeOf(ifcPort, IFCEntityType.IfcDistributionPort))\r\n               return IFCDistributionPort.ProcessIFCDistributionPort(ifcPort);\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            HandleError(ex.Message, ifcPort, true);\r\n            return null;\r\n         }\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcPort, IFCEntityType.IfcPort, false);\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPostalAddress.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Import.Utility;\n\nnamespace Revit.IFC.Import.Data\n{\n   /// <summary>\n   /// Class for storing IfcPostalAddress\n   /// </summary>\n   public class IFCPostalAddress : IFCAddress\n   {\n      /// <summary>\n      /// The optional address for internal mail delivery.\n      /// </summary>\n      public string InternalLocation { get; set; } = null;\n\n      /// <summary>\n      /// The postal address.\n      /// </summary>\n      public IList<string> AddressLines { get; set; } = null;\n\n      /// <summary>\n      /// The optional address that is implied by an identifiable mail drop.\n      /// </summary>\n      public string PostalBox { get; set; } = null;\n\n      /// <summary>\n      /// The optionalname of a town.\n      /// </summary>\n      public string Town { get; set; } = null;\n\n      /// <summary>\n      /// The optional name of a region.\n      /// </summary>\n      public string Region { get; set; } = null;\n\n      /// <summary>\n      /// The optional code that is used by the country's postal service.\n      /// </summary>\n      public string PostalCode { get; set; } = null;\n\n      /// <summary>\n      /// The optional name of a country.\n      /// </summary>\n      public string Country { get; set; } = null;\n\n\n      protected IFCPostalAddress()\n      {\n      }\n\n      protected IFCPostalAddress(IFCAnyHandle ifcPostalAddress)\n      {\n         Process(ifcPostalAddress);\n      }\n\n      protected override void Process(IFCAnyHandle ifcPostalAddress)\n      {\n         base.Process(ifcPostalAddress);\n\n         InternalLocation = IFCImportHandleUtil.GetOptionalStringAttribute(ifcPostalAddress, \"InternalLocation\", null);\n         PostalBox = IFCImportHandleUtil.GetOptionalStringAttribute(ifcPostalAddress, \"PostalBox\", null);\n         Town = IFCImportHandleUtil.GetOptionalStringAttribute(ifcPostalAddress, \"Town\", null);\n         Region = IFCImportHandleUtil.GetOptionalStringAttribute(ifcPostalAddress, \"Region\", null);\n         PostalCode = IFCImportHandleUtil.GetOptionalStringAttribute(ifcPostalAddress, \"PostalCode\", null);\n         Country = IFCImportHandleUtil.GetOptionalStringAttribute(ifcPostalAddress, \"Country\", null);\n         AddressLines = IFCAnyHandleUtil.GetAggregateStringAttribute<List<string>>(ifcPostalAddress, \"AddressLines\");\n\n         if (InternalLocation == null && PostalBox == null && Town == null && Region == null &&\n            PostalCode == null && Country == null && ((AddressLines?.Count ?? 0) == 0))\n               Importer.TheLog.LogWarning(Id, \"Missing IfcPostalAddress, ignoring.\", true);\n      }\n\n      /// <summary>\n      /// Create an IFCPostalAddress object from a handle of type IfcPostalAddress.\n      /// </summary>\n      /// <param name=\"ifcPostalAddress\">The IFC handle.</param>\n      /// <returns>The IFCPostalAddress object.</returns>\n      public static IFCPostalAddress ProcessIFCPostalAddress(IFCAnyHandle ifcPostalAddress)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPostalAddress))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPostalAddress);\n            return null;\n         }\n\n         IFCEntity postalAddress;\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcPostalAddress.StepId, out postalAddress))\n            postalAddress = new IFCPostalAddress(ifcPostalAddress);\n         return (postalAddress as IFCPostalAddress);\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPresentationItem.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Import.Enums;\nusing Revit.IFC.Import.Utility;\n\nnamespace Revit.IFC.Import.Data\n{\n   public abstract class IFCPresentationItem : IFCEntity\n   {\n      protected IFCPresentationItem ()\n      {\n      }\n\n      /// <summary>\n      /// Process Representation Item and return the resulting IFC Class.\n      /// </summary>\n      /// <param name=\"ifcPresentationItem\">Presentation Item to be processed.</param>\n      /// <returns>Processed IFCPresentationItem</returns>\n      public static IFCPresentationItem ProcessIFCRepresentationItem(IFCAnyHandle ifcPresentationItem)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPresentationItem))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcRepresentationItem);\n            return null;\n         }\n\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcPresentationItem, IFCEntityType.IfcIndexedColourMap))\n            return IFCIndexedColourMap.ProcessIFCIndexedColourMap(ifcPresentationItem);\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcPresentationItem, IFCEntityType.IfcColourRgbList))\n            return IFCColourRgbList.ProcessIFCColourRgbList(ifcPresentationItem);\n\n         Importer.TheLog.LogUnhandledSubTypeError(ifcPresentationItem, IFCEntityType.IfcPresentationItem, false);\n         return null;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPresentationLayerAssignment.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCPresentationLayerAssignment : IFCEntity\r\n   {\r\n      /// <summary>\r\n      /// Get the name of the IFCPresentationLayerAssignment.\r\n      /// </summary>\r\n      public string Name { get; protected set; } = null;\r\n      /// <summary>\r\n      /// Get the optional description of the IFCPresentationLayerAssignment.\r\n      /// </summary>\r\n\r\n      public string Description { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Get the optional identifier of the IFCPresentationLayerAssignment.\r\n      /// </summary>\r\n      public string Identifier { get; protected set; } = null;\r\n\r\n      protected IFCPresentationLayerAssignment()\r\n      {\r\n      }\r\n\r\n      protected IFCPresentationLayerAssignment(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the main element id of the material associated with this presentation layer assignment.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The shape edit scope.</param>\r\n      /// <returns>The element id, or ElementId.invalidElementId if not set.</returns>\r\n      public virtual ElementId GetMaterialElementId(IFCImportShapeEditScope shapeEditScope)\r\n      {\r\n         return ElementId.InvalidElementId;\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle item)\r\n      {\r\n         base.Process(item);\r\n\r\n         Name = IFCImportHandleUtil.GetOptionalStringAttribute(item, \"Name\", null);\r\n\r\n         Description = IFCImportHandleUtil.GetOptionalStringAttribute(item, \"Description\", null);\r\n\r\n         Identifier = IFCImportHandleUtil.GetOptionalStringAttribute(item, \"Identifier\", null);\r\n\r\n         // We do NOT process AssignedItems here.  That is pre-processed to avoid INVERSE attribute calls.\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcPresentationLayerAssignment entity handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcPresentationLayerAssignment\">The IfcPresentationLayerAssignment handle.</param>\r\n      /// <returns>The IFCPresentationLayerAssignment object.</returns>\r\n      public static IFCPresentationLayerAssignment ProcessIFCPresentationLayerAssignment(IFCAnyHandle ifcPresentationLayerAssignment)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPresentationLayerAssignment))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPresentationLayerAssignment);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity presentationLayerAssignment;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcPresentationLayerAssignment.StepId, out presentationLayerAssignment))\r\n            return (presentationLayerAssignment as IFCPresentationLayerAssignment);\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcPresentationLayerAssignment, IFCEntityType.IfcPresentationLayerWithStyle))\r\n            return IFCPresentationLayerWithStyle.ProcessIFCPresentationLayerWithStyle(ifcPresentationLayerAssignment);\r\n\r\n         return new IFCPresentationLayerAssignment(ifcPresentationLayerAssignment);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Does a top-level check to see if this entity may be equivalent to otherEntity.\r\n      /// </summary>\r\n      /// <param name=\"otherEntity\">The other IFCEntity.</param>\r\n      /// <returns>True if they are equivalent, false if they aren't, null if not enough information.</returns>\r\n      /// <remarks>This isn't intended to be an exhaustive check, and isn't implemented for all types.  This is intended\r\n      /// to be used by derived classes.</remarks>\r\n      public override bool? MaybeEquivalentTo(IFCEntity otherEntity)\r\n      {\r\n         bool? maybeEquivalentTo = base.MaybeEquivalentTo(otherEntity);\r\n         if (maybeEquivalentTo.HasValue)\r\n            return maybeEquivalentTo.Value;\r\n\r\n         if (!(otherEntity is IFCPresentationLayerAssignment))\r\n            return false;\r\n\r\n         IFCPresentationLayerAssignment other = otherEntity as IFCPresentationLayerAssignment;\r\n\r\n         if (!IFCNamingUtil.SafeStringsAreEqual(Name, other.Name))\r\n            return false;\r\n\r\n         if (!IFCNamingUtil.SafeStringsAreEqual(Description, other.Description))\r\n            return false;\r\n\r\n         if (!IFCNamingUtil.SafeStringsAreEqual(Identifier, other.Identifier))\r\n            return false;\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Does a top-level check to see if this entity is equivalent to otherEntity.\r\n      /// </summary>\r\n      /// <param name=\"otherEntity\">The other IFCEntity.</param>\r\n      /// <returns>True if they are equivalent, false if they aren't.</returns>\r\n      /// <remarks>This isn't intended to be an exhaustive check, and isn't implemented for all types.  This is intended\r\n      /// to make a final decision, and will err on the side of deciding that entities aren't equivalent.</remarks>\r\n      public override bool IsEquivalentTo(IFCEntity otherEntity)\r\n      {\r\n         bool? maybeEquivalentTo = MaybeEquivalentTo(otherEntity);\r\n         if (maybeEquivalentTo.HasValue)\r\n            return maybeEquivalentTo.Value;\r\n\r\n         // If it passes all of the Maybe tests and doesn't come back false, good enough.\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create the Revit elements associated with this IfcPresentationLayerAssignment.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The shape edit scope.</param>\r\n      virtual public void Create(IFCImportShapeEditScope shapeEditScope)\r\n      {\r\n         if (!string.IsNullOrWhiteSpace(Name))\r\n            shapeEditScope.PresentationLayerNames.Add(Name);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the one layer assignment associated to this handle, if it is defined.\r\n      /// </summary>\r\n      /// <param name=\"ifcLayeredItem\">The handle assumed to be an IfcRepresentation or IfcRepresentationItem.</param>\r\n      /// <returns>The associated IfcLayerAssignment.</returns>\r\n      static public IFCPresentationLayerAssignment GetTheLayerAssignment(IFCAnyHandle ifcLayeredItem)\r\n      {\r\n         IFCAnyHandle layerAssignmentHnd;\r\n         if (!Importer.TheCache.LayerAssignment.TryGetValue(ifcLayeredItem, out layerAssignmentHnd))\r\n            return null;\r\n\r\n         IFCPresentationLayerAssignment layerAssignment = \r\n            ProcessIFCPresentationLayerAssignment(layerAssignmentHnd);\r\n         return layerAssignment;\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPresentationLayerWithStyle.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCPresentationLayerWithStyle : IFCPresentationLayerAssignment\r\n   {\r\n      /// <summary>\r\n      /// Get the presentation styles for this IFCPresentationLayerWithStyle.\r\n      /// </summary>\r\n      public IList<IFCPresentationStyle> LayerStyles { get; protected set; } = new List<IFCPresentationStyle>();\r\n\r\n      protected ElementId CreatedMaterialElementId { get; set; } = ElementId.InvalidElementId;\r\n\r\n      protected IFCPresentationLayerWithStyle()\r\n      {\r\n      }\r\n\r\n      protected IFCPresentationLayerWithStyle(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the IFCSurfaceStyle associated with this IFCPresentationLayerWithStyle.\r\n      /// </summary>\r\n      /// <returns>The IFCSurfaceStyle, if any.</returns>\r\n      public IFCSurfaceStyle GetSurfaceStyle()\r\n      {\r\n         IList<IFCPresentationStyle> presentationStyles = LayerStyles;\r\n         foreach (IFCPresentationStyle presentationStyle in presentationStyles)\r\n         {\r\n            if (presentationStyle is IFCSurfaceStyle)\r\n               return (presentationStyle as IFCSurfaceStyle);\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the main element id of the material associated with this presentation layer assignment.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The shape edit scope.</param>\r\n      /// <returns>The element id, or ElementId.invalidElementId if not set.</returns>\r\n      public override ElementId GetMaterialElementId(IFCImportShapeEditScope shapeEditScope)\r\n      {\r\n         return CreatedMaterialElementId;\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle item)\r\n      {\r\n         base.Process(item);\r\n\r\n         IList<IFCAnyHandle> layerStyles = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(item, \"LayerStyles\");\r\n         foreach (IFCAnyHandle layerStyle in layerStyles)\r\n         {\r\n            if (layerStyle == null)\r\n            {\r\n               Importer.TheLog.LogNullError(IFCEntityType.IfcPresentationStyle);\r\n               continue;\r\n            }\r\n\r\n            IFCPresentationStyle presentationStyle = IFCPresentationStyle.ProcessIFCPresentationStyle(layerStyle);\r\n            if (presentationStyle != null)\r\n               LayerStyles.Add(presentationStyle);\r\n            else\r\n               Importer.TheLog.LogUnhandledSubTypeError(layerStyle, \"IfcPresentationStyle\", false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Does a top-level check to see if this entity is equivalent to otherEntity.\r\n      /// </summary>\r\n      /// <param name=\"otherEntity\">The other IFCEntity.</param>\r\n      /// <returns>True if they are equivalent, false if they aren't, null if not enough information.</returns>\r\n      /// <remarks>This isn't intended to be an exhaustive check, and isn't implemented for all types.  This is intended\r\n      /// to be used by derived classes.</remarks>\r\n      public override bool? MaybeEquivalentTo(IFCEntity otherEntity)\r\n      {\r\n         bool? maybeEquivalentTo = base.MaybeEquivalentTo(otherEntity);\r\n         if (maybeEquivalentTo.HasValue)\r\n            return maybeEquivalentTo.Value;\r\n\r\n         if (!(otherEntity is IFCPresentationLayerWithStyle))\r\n            return false;\r\n\r\n         IFCPresentationLayerWithStyle other = otherEntity as IFCPresentationLayerWithStyle;\r\n\r\n         if (!IFCEntity.AreIFCEntityListsEquivalent(LayerStyles, other.LayerStyles))\r\n            return false;\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcPresentationLayerWithStyle entity handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcPresentationLayerWithStyle\">The IfcPresentationLayerWithStyle handle.</param>\r\n      /// <returns>The IFCPresentationLayerWithStyle object.</returns>\r\n      public static IFCPresentationLayerWithStyle ProcessIFCPresentationLayerWithStyle(IFCAnyHandle ifcPresentationLayerWithStyle)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPresentationLayerWithStyle))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPresentationLayerWithStyle);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity presentationLayerWithStyle;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcPresentationLayerWithStyle.StepId, out presentationLayerWithStyle))\r\n            return (presentationLayerWithStyle as IFCPresentationLayerWithStyle);\r\n\r\n         return new IFCPresentationLayerWithStyle(ifcPresentationLayerWithStyle);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create the Revit elements associated with this IfcPresentationLayerWithStyle.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The shape edit scope.</param>\r\n      override public void Create(IFCImportShapeEditScope shapeEditScope)\r\n      {\r\n         // TODO: support cut pattern id and cut pattern color.\r\n         if (CreatedMaterialElementId != ElementId.InvalidElementId || !IsValidForCreation)\r\n            return;\r\n\r\n         base.Create(shapeEditScope);\r\n\r\n         try\r\n         {\r\n            // If the styled item or the surface style has a name, use it.\r\n            IFCSurfaceStyle surfaceStyle = GetSurfaceStyle();\r\n            if (surfaceStyle == null)\r\n            {\r\n               // We only handle surface styles at the moment; log file should already reflect any other unhandled styles.\r\n               IsValidForCreation = true;\r\n               return;\r\n            }\r\n\r\n            string forcedName = surfaceStyle.Name;\r\n            if (string.IsNullOrWhiteSpace(forcedName))\r\n               forcedName = Name;\r\n\r\n            CreatedMaterialElementId = surfaceStyle.Create(shapeEditScope.Document, forcedName, null, Id);\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            IsValidForCreation = false;\r\n            Importer.TheLog.LogCreationError(this, ex.Message, false);\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPresentationStyle.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public abstract class IFCPresentationStyle : IFCEntity\r\n   {\r\n      string m_Name = null;\r\n\r\n      public string Name\r\n      {\r\n         get { return m_Name; }\r\n         protected set { m_Name = value; }\r\n      }\r\n\r\n      protected IFCPresentationStyle()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle item)\r\n      {\r\n         base.Process(item);\r\n\r\n         Name = IFCImportHandleUtil.GetOptionalStringAttribute(item, \"Name\", null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcPresentationStyle entity handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcPresentationStyle\">The IfcPresentationStyle handle.</param>\r\n      /// <returns>The IFCPresentationStyle object.</returns>\r\n      public static IFCPresentationStyle ProcessIFCPresentationStyle(IFCAnyHandle ifcPresentationStyle)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPresentationStyle))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPresentationStyle);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity presentationStyle;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcPresentationStyle.StepId, out presentationStyle))\r\n            return (presentationStyle as IFCPresentationStyle);\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcPresentationStyle, IFCEntityType.IfcSurfaceStyle))\r\n            return IFCSurfaceStyle.ProcessIFCSurfaceStyle(ifcPresentationStyle);\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcPresentationStyle, \"IfcPresentationStyle\", false);\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPresentationStyleAssignment.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCPresentationStyleAssignment : IFCEntity\r\n   {\r\n      ISet<IFCPresentationStyle> m_Styles = null;\r\n\r\n      public ISet<IFCPresentationStyle> Styles\r\n      {\r\n         get\r\n         {\r\n            if (m_Styles == null)\r\n               m_Styles = new HashSet<IFCPresentationStyle>();\r\n            return m_Styles;\r\n         }\r\n      }\r\n\r\n      protected IFCPresentationStyleAssignment()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle item)\r\n      {\r\n         base.Process(item);\r\n\r\n         HashSet<IFCData> styles = IFCAnyHandleUtil.GetAggregateAttribute<HashSet<IFCData>>(item, \"Styles\");\r\n         if (styles != null)\r\n         {\r\n            foreach (IFCData styleData in styles)\r\n            {\r\n               if (styleData.PrimitiveType == IFCDataPrimitiveType.Instance)\r\n               {\r\n                  IFCAnyHandle style = styleData.AsInstance();\r\n                  try\r\n                  {\r\n                     IFCPresentationStyle presentationStyle = IFCPresentationStyle.ProcessIFCPresentationStyle(style);\r\n                     if (presentationStyle != null)\r\n                        Styles.Add(presentationStyle);\r\n                  }\r\n                  catch (Exception ex)\r\n                  {\r\n                     Importer.TheLog.LogError(item.StepId, ex.Message, false);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      protected IFCPresentationStyleAssignment(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcPresentationStyleAssignment entity handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcPresentationStyleAssignment\">The IfcPresentationStyleAssignment handle.</param>\r\n      /// <returns>The IFCPresentationStyleAssignment object.</returns>\r\n      public static IFCPresentationStyleAssignment ProcessIFCPresentationStyleAssignment(IFCAnyHandle ifcPresentationStyleAssignment)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPresentationStyleAssignment))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPresentationStyleAssignment);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity presentationStyleAssignment;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcPresentationStyleAssignment.StepId, out presentationStyleAssignment))\r\n            presentationStyleAssignment = new IFCPresentationStyleAssignment(ifcPresentationStyleAssignment);\r\n         return (presentationStyleAssignment as IFCPresentationStyleAssignment);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCProduct.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCVoidInfo : IFCSolidInfo\r\n   {\r\n      public Transform TotalTransform\r\n      {\r\n         get; set;\r\n      }\r\n\r\n      public IFCVoidInfo(IFCSolidInfo solid)\r\n         : base(solid.Id, solid.GeometryObject)\r\n      {\r\n         this.RepresentationIdentifier = solid.RepresentationIdentifier;\r\n      }\r\n   }\r\n\r\n\r\n   /// <summary>\r\n   /// Represents an IfcProduct.\r\n   /// </summary>\r\n   public abstract class IFCProduct : IFCObject\r\n   {\r\n      /// <summary>\r\n      /// The id of the corresponding IfcTypeProduct, if any.\r\n      /// </summary>\r\n      public int TypeId { get; protected set; } = 0;\r\n\r\n      /// <summary>\r\n      /// The list of solids created for the associated element.\r\n      /// </summary>\r\n      public IList<IFCSolidInfo> Solids { get; } = new List<IFCSolidInfo>();\r\n\r\n      /// <summary>\r\n      /// The list of voids created for the associated element.\r\n      /// </summary>\r\n      public IList<IFCVoidInfo> Voids { get; } = new List<IFCVoidInfo>();\r\n\r\n      /// <summary>\r\n      /// The list of curves created for the associated element, for use in plan views.\r\n      /// </summary>\r\n      public IList<Curve> FootprintCurves { get; } = new List<Curve>();\r\n\r\n      /// <summary>\r\n      /// The names of the presentation layers associated with the representations and representation items.\r\n      /// </summary>\r\n      public ISet<string> PresentationLayerNames { get; } = new SortedSet<string>();\r\n\r\n      /// <summary>\r\n      /// The one product representation of the product.\r\n      /// </summary>\r\n      public IFCProductRepresentation ProductRepresentation { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The IfcSpatialStructureElement that contains the IfcElement.\r\n      /// </summary>\r\n      public IFCSpatialStructureElement ContainingStructure { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// The local coordinate system of the IfcProduct.\r\n      /// </summary>\r\n      public IFCLocation ObjectLocation { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCProduct()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcProduct attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcProduct\">The IfcProduct handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcProduct)\r\n      {\r\n         // We are going to process the IfcObjectPlacement before we do the base Process call.  The reason for this is that we'd like to\r\n         // process the IfcSite object placement before any of its children, so that the RelativeToSite can be properly set.\r\n         // If this becomes an issue, we can instead move this to after the base.Process, and calculate RelativeToSite as a post-process step.\r\n         ProcessObjectPlacement(ifcProduct);\r\n\r\n         base.Process(ifcProduct);\r\n\r\n         // Don't even process IfcProductRepresentation if this IfcProduct was imported via Hybrid import.\r\n         if (IFCImportHybridInfo.IsValidElementId(IFCImportHybridInfo.GetHybridMapInformation(Id)))\r\n         {\r\n            return;\r\n         }\r\n\r\n         IFCAnyHandle ifcProductRepresentation = IFCImportHandleUtil.GetOptionalInstanceAttribute(ifcProduct, \"Representation\");\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(ifcProductRepresentation))\r\n         {\r\n            ProductRepresentation = IFCProductRepresentation.ProcessIFCProductRepresentation(ifcProductRepresentation);\r\n         }\r\n      }\r\n\r\n      static public BoundingBoxXYZ ProjectScope { get; set; } = null;\r\n\r\n      private void AddLocationToPlacementBoundingBox()\r\n      {\r\n         if (!Importer.TheProcessor.TryToFixFarawayOrigin)\r\n            return;\r\n\r\n         if (!(this is IFCSpatialStructureElement))\r\n         {\r\n            XYZ lcsOrigin = ObjectLocation?.TotalTransform?.Origin ?? XYZ.Zero;\r\n            if (ProjectScope == null)\r\n            {\r\n               ProjectScope = new BoundingBoxXYZ();\r\n               ProjectScope.Min = lcsOrigin;\r\n               ProjectScope.Max = lcsOrigin;\r\n            }\r\n            else\r\n            {\r\n               ProjectScope.Min = new XYZ(\r\n                  Math.Min(ProjectScope.Min.X, lcsOrigin.X),\r\n                  Math.Min(ProjectScope.Min.Y, lcsOrigin.Y),\r\n                  Math.Min(ProjectScope.Min.Z, lcsOrigin.Z)\r\n                  );\r\n               ProjectScope.Max = new XYZ(\r\n                  Math.Max(ProjectScope.Min.X, lcsOrigin.X),\r\n                  Math.Max(ProjectScope.Min.Y, lcsOrigin.Y),\r\n                  Math.Max(ProjectScope.Min.Z, lcsOrigin.Z)\r\n                  );\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit element params based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      protected override void CreateParametersInternal(Document doc, Element element)\r\n      {\r\n         base.CreateParametersInternal(doc, element);\r\n\r\n         if (element != null)\r\n         {\r\n            Category category = IFCPropertySet.GetCategoryForParameterIfValid(element, Id);\r\n\r\n            // Set \"IfcPresentationLayer\" parameter.\r\n            string ifcPresentationLayer = null;\r\n            foreach (string currLayer in PresentationLayerNames)\r\n            {\r\n               if (string.IsNullOrWhiteSpace(currLayer))\r\n                  continue;\r\n\r\n               if (ifcPresentationLayer == null)\r\n                  ifcPresentationLayer = currLayer;\r\n               else\r\n                  ifcPresentationLayer += \"; \" + currLayer;\r\n            }\r\n\r\n            if (ifcPresentationLayer != null)\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcPresentationLayer\", ifcPresentationLayer, Id);\r\n\r\n            // Set the container name of the element.\r\n            string containerName = ContainingStructure?.Name;\r\n            if (containerName != null)\r\n            {\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcSpatialContainer\", containerName, Id);\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcSpatialContainer GUID\", ContainingStructure.GlobalId, Id);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Private function to determine whether an IFCProduct directly contains valid geometry.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// For Hybrid IFC Import, ProductRepresentation may not exist, but Geometry is instead within a GeometryInstance.\r\n      /// </remarks>\r\n      /// <returns>True if the IFCProduct directly contains valid geometry.</returns>\r\n      private bool HasValidTopLevelGeometry()\r\n      {\r\n         // If this IfcProduct was imported via Hybrid import, ProductRepresentation may not exist.  Check for DirectShape instead.\r\n         ElementId directShapeId = IFCImportHybridInfo.GetHybridMapInformation(Id);\r\n         if (IFCImportHybridInfo.IsValidElementId(directShapeId))\r\n         {\r\n            // Or continue the check and require that the directShapeId point to\r\n            // a DirectShape (not DirectShapeType) -- unsure!\r\n            return Importer.TheHybridInfo.IsValidDirectShape(directShapeId);\r\n         }\r\n\r\n         return (ProductRepresentation != null && ProductRepresentation.IsValid());\r\n      }\r\n\r\n      /// <summary>\r\n      /// Private function to determine whether an IFCProduct contains geometry in a sub-element.\r\n      /// </summary>\r\n      /// <param name=\"visitedEntities\">A list of already visited entities, to avoid infinite recursion.</param>\r\n      /// <returns>True if the IFCProduct directly or indirectly contains geometry.</returns>\r\n      private bool HasValidSubElementGeometry(IList<IFCEntity> visitedEntities)\r\n      {\r\n         foreach (IFCObjectDefinition objDef in ComposedObjectDefinitions)\r\n         {\r\n            if (visitedEntities.Contains(objDef))\r\n               continue;\r\n\r\n            visitedEntities.Add(objDef);\r\n\r\n            if (!(objDef is IFCProduct))\r\n               continue;\r\n\r\n            if ((objDef as IFCProduct).HasValidTopLevelGeometry())\r\n               return true;\r\n\r\n            if ((objDef as IFCProduct).HasValidSubElementGeometry(visitedEntities))\r\n               return true;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Cut a IFCSolidInfo by the voids in this IFCProduct, if any.\r\n      /// </summary>\r\n      /// <param name=\"solidInfo\">The solid information.</param>\r\n      /// <param name=\"createdVoids\">Extra voids from AnyCAD-created openings.</param>\r\n      /// <returns>False if the return solid is empty; true otherwise.</returns>\r\n      protected override bool CutSolidByVoids(IFCSolidInfo solidInfo, IList<Solid> createdVoids)\r\n      {\r\n         // We only cut \"Body\" representation items.\r\n         if (solidInfo.RepresentationIdentifier != IFCRepresentationIdentifier.Body)\r\n            return true;\r\n\r\n         IList<IFCVoidInfo> voidsToUse = null;\r\n         List<IFCVoidInfo> partVoids = null;\r\n\r\n         IList <IFCVoidInfo> parentVoids = (Decomposes as IFCProduct)?.Voids;\r\n         if (parentVoids != null)\r\n         {\r\n            partVoids = new List<IFCVoidInfo>();\r\n            partVoids.AddRange(Voids);\r\n            partVoids.AddRange(parentVoids);\r\n            voidsToUse = partVoids;\r\n         }\r\n         else\r\n         {\r\n            voidsToUse = Voids;\r\n         }\r\n\r\n         int numVoids = voidsToUse.Count;\r\n         if (numVoids == 0)\r\n            return true;\r\n\r\n         if (!(solidInfo.GeometryObject is Solid))\r\n         {\r\n            string typeName = (solidInfo.GeometryObject is Mesh) ? \"mesh\" : \"instance\";\r\n            Importer.TheLog.LogError(Id, \"Can't cut \" + typeName + \" geometry, ignoring \" + numVoids + \" void(s).\", false);\r\n            return true;\r\n         }\r\n\r\n         List<Tuple<Solid, Transform, int>> allVoids = new List<Tuple<Solid, Transform, int>>();\r\n\r\n         if (createdVoids != null)\r\n         {\r\n            foreach (Solid createdVoid in createdVoids)\r\n            {\r\n               if (createdVoid != null)\r\n               {\r\n                  allVoids.Add(Tuple.Create<Solid, Transform, int>(createdVoid, null, -1));\r\n               }\r\n            }\r\n         }\r\n\r\n         foreach (IFCVoidInfo voidInfo in voidsToUse)\r\n         {\r\n            Solid voidObject = voidInfo.GeometryObject as Solid;\r\n            int voidId = voidInfo.Id;\r\n            if (voidObject == null)\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Can't cut Solid geometry with a Mesh (# \" + voidId + \"), ignoring.\", false);\r\n               continue;\r\n            }\r\n\r\n            Transform voidTransform = voidInfo.TotalTransform;\r\n            allVoids.Add(Tuple.Create(voidObject, voidTransform, voidId));\r\n         }\r\n\r\n         foreach (Tuple<Solid, Transform, int> currentVoid in allVoids)\r\n         {\r\n            Solid voidObject = currentVoid.Item1;\r\n            Transform voidTransform = currentVoid.Item2;\r\n            int voidId = currentVoid.Item3;\r\n\r\n            if (voidTransform != null)\r\n            {\r\n               // Transform the void into the space of the solid.\r\n               Transform voidToSolidTrf = ObjectLocation.TotalTransform.Inverse.Multiply(voidTransform);\r\n               if (voidToSolidTrf.IsIdentity == false)\r\n               {\r\n                  voidObject = SolidUtils.CreateTransformed(voidObject, voidToSolidTrf);\r\n               }\r\n            }\r\n\r\n            solidInfo.GeometryObject = IFCGeometryUtil.ExecuteSafeBooleanOperation(solidInfo.Id, voidId,\r\n               (solidInfo.GeometryObject as Solid), voidObject, BooleanOperationsType.Difference, null);\r\n\r\n            if (solidInfo.GeometryObject == null || (solidInfo.GeometryObject as Solid).Faces.IsEmpty)\r\n               return false;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      private Transform CalculateLocalCoordinateSystem()\r\n      {\r\n         Transform lcs = IFCImportFile.TheFile.IFCProject.WorldCoordinateSystem;\r\n         if (lcs == null)\r\n            return ObjectLocation?.TotalTransform ?? Transform.Identity;\r\n         \r\n         if (ObjectLocation != null)\r\n            return lcs.Multiply(ObjectLocation.TotalTransform);\r\n\r\n         return lcs;\r\n      }\r\n\r\n      private IList<Solid> GetCreatedGeometries(Document doc, IFCProduct opening, Options geometryOptions)\r\n      {\r\n         ElementId createdOpeningId = IFCImportHybridInfo.GetHybridMapInformation(opening.Id);\r\n         if (IFCImportHybridInfo.IsValidElementId(createdOpeningId))\r\n         {\r\n            DirectShape openingElement = doc.GetElement(createdOpeningId) as DirectShape;\r\n            if (openingElement != null)\r\n            {\r\n               GeometryElement geometryElement = openingElement.get_Geometry(geometryOptions);\r\n\r\n               SolidMeshGeometryInfo solidInfo = new SolidMeshGeometryInfo();\r\n               solidInfo.CollectSolidMeshGeometry(geometryElement, Importer.TheCache.AllocatedGeometryObjectCache);\r\n               return solidInfo.GetSolids();\r\n            }\r\n            else\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Object created in legacy mode missing opening information.\", false);\r\n            }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit elements based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      protected override void Create(Document doc)\r\n      {\r\n         bool preventInstances = false;\r\n         IFCElement element = this as IFCElement;\r\n         List<Solid> createdVoids = new List<Solid>();\r\n\r\n         if (element != null)\r\n         {\r\n            preventInstances = this is IFCOpeningElement;\r\n\r\n            Options geometryOptions = new Options();\r\n\r\n            foreach (IFCFeatureElement opening in element.Openings)\r\n            {\r\n               try\r\n               {\r\n                  IList<Solid> createdGeometries = GetCreatedGeometries(doc, opening, geometryOptions);\r\n                  if (createdGeometries != null)\r\n                  {\r\n                     createdVoids.AddRange(createdGeometries);\r\n                  }\r\n\r\n                  preventInstances = true;\r\n                  // Create the actual Revit element based on the IFCFeatureElement here.\r\n                  ElementId openingId = CreateElement(doc, opening);\r\n\r\n                  // This gets around the issue that the Boolean operation between the void(s) in the IFCFeatureElement and \r\n                  // the solid(s) in the IFCElement may use the Graphics Style of the voids in the resulting Solid(s), meaning \r\n                  // that some faces may disappear when we turn off the visibility of IfcOpeningElements.\r\n                  IList<IFCSolidInfo> voids = IFCElement.CloneElementGeometry(doc, opening, this, true);\r\n                  if (voids != null)\r\n                  {\r\n                     foreach (IFCSolidInfo voidGeom in voids)\r\n                     {\r\n                        IFCVoidInfo voidInfo = new IFCVoidInfo(voidGeom);\r\n                        if (!Importer.TheProcessor.ApplyTransforms)\r\n                        {\r\n                           // If we aren't applying transforms, then the Voids and Solids will be\r\n                           // in different coordinate spaces, so we need the transform of the \r\n                           // void, so we can transform it into the Solid coordinate space\r\n                           voidInfo.TotalTransform = opening?.ObjectLocation?.TotalTransform;\r\n                        }\r\n\r\n                        Voids.Add(voidInfo);\r\n                     }\r\n                  }\r\n               }\r\n               catch (Exception ex)\r\n               {\r\n                  Importer.TheLog.LogError(opening.Id, ex.Message, false);\r\n               }\r\n            }\r\n         }\r\n\r\n         // If this entity will be a container DirectShape, it may not have any valid top-level geometry at this time.\r\n         // Detect the situation and allow Element Creation to proceed for Hybrid Import only.\r\n         if (HasValidTopLevelGeometry())\r\n         {\r\n            // IFCImportShapeEditScope will not create Body geometry for Hybrid IFC Import, but it may need to create other geometry.\r\n            using (IFCImportShapeEditScope shapeEditScope = IFCImportShapeEditScope.Create(doc, this))\r\n            {\r\n               Transform lcs = CalculateLocalCoordinateSystem();\r\n\r\n               shapeEditScope.PreventInstances = preventInstances;\r\n\r\n               // If we are not applying transforms to the geometry, then pass in the identity matrix.\r\n               // Lower down this method we then pass lcs to the consumer element, so that it can apply\r\n               // the transform as required.\r\n               Transform transformToUse = Importer.TheProcessor.ApplyTransforms ? lcs : Transform.Identity;\r\n               bool applyHybridOffset = Importer.TheOptions.HybridImportOptions != null && Importer.TheHybridInfo != null && ObjectLocation?.RelativeTo == null;\r\n               if (applyHybridOffset)\r\n               {\r\n                  transformToUse.Origin += Importer.TheHybridInfo.LargeCoordinateOriginOffset;\r\n               }\r\n\r\n               // If Revit has already created a DirectShape from the IfcProduct, don't try and create a new representation.\r\n               ElementId hybridDirectShapeElementId = IFCImportHybridInfo.GetHybridMapInformation(Id);\r\n               if (IFCImportHybridInfo.IsValidElementId(hybridDirectShapeElementId))\r\n               {\r\n                  Importer.TheHybridInfo.HandleHybridProductCreation(this, hybridDirectShapeElementId);\r\n\r\n                  CreatedElementId = hybridDirectShapeElementId;\r\n                  CreatedGeometry = new List<GeometryObject>();\r\n               }\r\n               else\r\n               {\r\n                  ProductRepresentation.CreateProductRepresentation(shapeEditScope, transformToUse, GlobalId);\r\n\r\n                  int numSolids = Solids.Count;\r\n                  // Attempt to cut each solid with each void.\r\n                  for (int solidIdx = 0; solidIdx < numSolids; solidIdx++)\r\n                  {\r\n                     if (!CutSolidByVoids(Solids[solidIdx], createdVoids))\r\n                     {\r\n                        Solids.RemoveAt(solidIdx);\r\n                        solidIdx--;\r\n                        numSolids--;\r\n                     }\r\n                  }\r\n\r\n                  bool addedCurves = shapeEditScope.AddPlanViewCurves(FootprintCurves, Id);\r\n\r\n                  if ((numSolids > 0 || addedCurves))\r\n                  {\r\n                     if (GlobalId != null)\r\n                     {\r\n                        // If the GlobalId is null, this is a fake IfcProduct that we don't want to create into a DirectShape, or\r\n                        // add to the caches in any way.  We only wanted to gather its geometry.\r\n                        DirectShape shape = Importer.TheCache.UseElementByGUID<DirectShape>(doc, GlobalId);\r\n\r\n                        if (shape == null)\r\n                        {\r\n                           shape = IFCElementUtil.CreateElement(doc, GetCategoryId(doc), GlobalId, null, Id, EntityType);\r\n                        }\r\n\r\n                        List<GeometryObject> directShapeGeometries = new List<GeometryObject>();\r\n                        foreach (IFCSolidInfo geometryObject in Solids)\r\n                        {\r\n                           // We need to check if the solid created is good enough for DirectShape.  If not, warn and use a fallback Mesh.\r\n                           GeometryObject currObject = geometryObject.GeometryObject;\r\n\r\n                           if (currObject != null)\r\n                           {\r\n                              IList<GeometryObject> adjustedObjects = IFCGeometryUtil.AdjustGeometryObjectsIfNeeded(currObject, shape, Id);\r\n                              if (adjustedObjects != null)\r\n                              {\r\n                                 directShapeGeometries.AddRange(adjustedObjects);\r\n                              }\r\n                              else\r\n                              {\r\n                                 directShapeGeometries.Add(currObject);\r\n                              }\r\n                           }\r\n                        }\r\n\r\n                        // We will use the first IfcTypeObject id, if it exists.  In general, there should be 0 or 1.\r\n                        IFCTypeObject typeObjectToUse = null;\r\n                        foreach (IFCTypeObject typeObject in TypeObjects)\r\n                        {\r\n                           if (typeObject.IsValidForCreation && typeObject.CreatedElementId != ElementId.InvalidElementId)\r\n                           {\r\n                              typeObjectToUse = typeObject;\r\n                              break;\r\n                           }\r\n                        }\r\n\r\n                        if (!Importer.TheProcessor.PostProcessProduct(Id, typeObjectToUse?.Id, lcs,\r\n                           directShapeGeometries))\r\n                        {\r\n                           if (shape != null)\r\n                           {\r\n                              shape.SetShape(directShapeGeometries);\r\n                              shapeEditScope.SetPlanViewRep(shape);\r\n\r\n                              if (typeObjectToUse != null && typeObjectToUse.CreatedElementId != ElementId.InvalidElementId)\r\n                                 shape.SetTypeId(typeObjectToUse.CreatedElementId);\r\n                           }\r\n                        }\r\n\r\n                        PresentationLayerNames.UnionWith(shapeEditScope.PresentationLayerNames);\r\n\r\n                        CreatedElementId = shape.Id;\r\n                        CreatedGeometry = directShapeGeometries;\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         else\r\n         {\r\n            if (this is IFCElement || this is IFCGrid)\r\n            {\r\n               IList<IFCEntity> visitedEntities = new List<IFCEntity>();\r\n               visitedEntities.Add(this);\r\n               if (!HasValidSubElementGeometry(visitedEntities))\r\n               {\r\n                  // We will not warn if this is an IfcSpatialStructureElement; those aren't expected to have their own geometry.\r\n                  Importer.TheLog.LogWarning(Id, \"There is no valid geometry for this \" + EntityType.ToString() + \"; entity will not be built.\", false);\r\n               }\r\n            }\r\n         }\r\n\r\n         base.Create(doc);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes object placement of the product.\r\n      /// </summary>\r\n      /// <param name=\"ifcProduct\">The IfcProduct handle.</param>\r\n      protected void ProcessObjectPlacement(IFCAnyHandle ifcProduct)\r\n      {\r\n         IFCAnyHandle objectPlacement = IFCAnyHandleUtil.GetInstanceAttribute(ifcProduct, \"ObjectPlacement\");\r\n\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(objectPlacement))\r\n         {\r\n            ObjectLocation = IFCLocation.ProcessIFCObjectPlacement(objectPlacement);\r\n            AddLocationToPlacementBoundingBox();\r\n            IFCSite.CheckObjectPlacementIsRelativeToSite(this, ifcProduct.StepId, objectPlacement);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcProduct object.\r\n      /// </summary>\r\n      /// <param name=\"ifcProduct\">The IfcProduct handle.</param>\r\n      /// <returns>The IFCProduct object.</returns>\r\n      public static IFCProduct ProcessIFCProduct(IFCAnyHandle ifcProduct)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcProduct))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcProduct);\r\n            return null;\r\n         }\r\n\r\n         try\r\n         {\r\n            IFCEntity cachedProduct;\r\n            if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcProduct.StepId, out cachedProduct))\r\n               return (cachedProduct as IFCProduct);\r\n\r\n            if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcProduct, IFCEntityType.IfcElement))\r\n               return IFCElement.ProcessIFCElement(ifcProduct);\r\n\r\n            if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcProduct, IFCEntityType.IfcGrid))\r\n               return IFCGrid.ProcessIFCGrid(ifcProduct);\r\n\r\n            if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcProduct, IFCEntityType.IfcProxy))\r\n               return IFCProxy.ProcessIFCProxy(ifcProduct);\r\n\r\n            if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcProduct, IFCEntityType.IfcDistributionPort))\r\n               return IFCDistributionPort.ProcessIFCDistributionPort(ifcProduct);\r\n\r\n            if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcProduct, IFCEntityType.IfcAnnotation))\r\n               return IFCAnnotation.ProcessIFCAnnotation(ifcProduct);\r\n\r\n            if (IFCImportFile.TheFile.SchemaVersionAtLeast(Enums.IFCSchemaVersion.IFC4Obsolete))\r\n            {\r\n               if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcProduct, IFCEntityType.IfcSpatialElement))\r\n                  return IFCSpatialElement.ProcessIFCSpatialElement(ifcProduct);\r\n            }\r\n            else\r\n            {\r\n               if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcProduct, IFCEntityType.IfcSpatialStructureElement)) \r\n                  return IFCSpatialStructureElement.ProcessIFCSpatialStructureElement(ifcProduct);\r\n            }\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            HandleError(ex.Message, ifcProduct, true); \r\n            return null;\r\n         }\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcProduct, IFCEntityType.IfcProduct, false);\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCProductRepresentation.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents IfcProductRepresentation and IfcMaterialDefinitionRepresentation.\r\n   /// </summary>\r\n   public class IFCProductRepresentation : IFCEntity\r\n   {\r\n      private string m_Name = null;\r\n\r\n      private string m_Description = null;\r\n\r\n      private IList<IFCRepresentation> m_Representations = null;\r\n\r\n      // For IfcMaterialDefinitionRepresentation only.\r\n      private IFCMaterial m_RepresentedMaterial = null;\r\n\r\n      /// <summary>\r\n      /// The optional name of the IfcProductRepresentation.\r\n      /// </summary>\r\n      public string Name\r\n      {\r\n         get { return m_Name; }\r\n         protected set { m_Name = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The optional description of the IfcProductRepresentation.\r\n      /// </summary>\r\n      public string Description\r\n      {\r\n         get { return m_Description; }\r\n         protected set { m_Description = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The representations of the IfcProductRepresentation.\r\n      /// </summary>\r\n      public IList<IFCRepresentation> Representations\r\n      {\r\n         get\r\n         {\r\n            if (m_Representations == null)\r\n               m_Representations = new List<IFCRepresentation>();\r\n            return m_Representations;\r\n         }\r\n      }\r\n\r\n      public IFCMaterial RepresentedMaterial\r\n      {\r\n         get { return m_RepresentedMaterial; }\r\n         protected set { m_RepresentedMaterial = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCProductRepresentation()\r\n      {\r\n\r\n      }\r\n\r\n      protected IFCProductRepresentation(IFCAnyHandle ifcProductRepresentation)\r\n      {\r\n         Process(ifcProductRepresentation);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcProductRepresentation attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcProductRepresentation\">The IfcProductRepresentation handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcProductRepresentation)\r\n      {\r\n         base.Process(ifcProductRepresentation);\r\n\r\n         Name = IFCImportHandleUtil.GetOptionalStringAttribute(ifcProductRepresentation, \"Name\", null);\r\n\r\n         Description = IFCImportHandleUtil.GetOptionalStringAttribute(ifcProductRepresentation, \"Description\", null);\r\n\r\n         List<IFCAnyHandle> representations =\r\n             IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcProductRepresentation, \"Representations\");\r\n         if (representations != null)\r\n         {\r\n            foreach (IFCAnyHandle representationHnd in representations)\r\n            {\r\n               try\r\n               {\r\n                  IFCRepresentation representation = IFCRepresentation.ProcessIFCRepresentation(representationHnd);\r\n                  if (representation != null)\r\n                  {\r\n                     if (representation.RepresentationItems.Count > 0 || representation.BoundingBox != null)\r\n                        Representations.Add(representation);\r\n                  }\r\n               }\r\n               catch (Exception ex)\r\n               {\r\n                  string msg = ex.Message;\r\n                  // Ignore some specific errors.\r\n                  if (msg != null)\r\n                  {\r\n                     if (!msg.Contains(\"not imported\"))\r\n                        Importer.TheLog.LogError(Id, msg, false);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC2x3))\r\n         {\r\n            if (IFCAnyHandleUtil.IsSubTypeOf(ifcProductRepresentation, IFCEntityType.IfcMaterialDefinitionRepresentation))\r\n            {\r\n               IFCAnyHandle representedMaterial = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcProductRepresentation, \"RepresentedMaterial\", false);\r\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(representedMaterial))\r\n                  RepresentedMaterial = IFCMaterial.ProcessIFCMaterial(representedMaterial);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns true if ProductRepresentation is Valid.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// In the case of non-Hybrid IFC Import, validity is defined as the Product Representation having at least one RepresentationItem.\r\n      /// In the case of Hybrid IFC Import, validity is defined as always true.\r\n      /// </remarks>\r\n      /// <returns>Returns true if there is anything to create, false otherwise.</returns>\r\n      public bool IsValid()\r\n      {\r\n         // TODO: We are not creating a shape if there is no representation for the shape.  We may allow this for specific entity types,\r\n         // such as doors or windows.\r\n         return (Importer.TheOptions.HybridImportOptions != null || ((Representations?.Count ?? 0) > 0));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit elements based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      public void CreateProductRepresentation(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         // Partially sort the representations so that we create: Body, Box, then the rest of the representations in that order.\r\n         // This allows us to skip Box representations if any of the Body representations create 3D geometry.  Until we have UI in place, \r\n         // this will disable creating extra 3D (bounding box) geometry that clutters the display, is only marginally useful and is hard to turn off.\r\n         List<IFCRepresentation> sortedReps = new List<IFCRepresentation>(); // Double usage as body rep list.\r\n         IList<IFCRepresentation> fallbackReps = new List<IFCRepresentation>();\r\n         IList<IFCRepresentation> boxReps = new List<IFCRepresentation>();\r\n         IList<IFCRepresentation> otherReps = new List<IFCRepresentation>();\r\n\r\n         foreach (IFCRepresentation representation in Representations)\r\n         {\r\n            switch (representation.Identifier)\r\n            {\r\n               case IFCRepresentationIdentifier.Body:\r\n                  sortedReps.Add(representation);\r\n                  break;\r\n               case IFCRepresentationIdentifier.BodyFallback:\r\n                  fallbackReps.Add(representation);\r\n                  break;\r\n               case IFCRepresentationIdentifier.Box:\r\n                  boxReps.Add(representation);\r\n                  break;\r\n               default:\r\n                  otherReps.Add(representation);\r\n                  break;\r\n            }\r\n         }\r\n\r\n         // Add back the other representations.\r\n         sortedReps.AddRange(fallbackReps);\r\n         sortedReps.AddRange(boxReps);\r\n         sortedReps.AddRange(otherReps);\r\n\r\n         foreach (IFCRepresentation representation in sortedReps)\r\n         {\r\n            // Only process fallback geometry if we didn't process the Body geometry.\r\n            if ((representation.Identifier == IFCRepresentationIdentifier.BodyFallback) &&\r\n               shapeEditScope.Creator.Solids.Count > 0)\r\n               continue;\r\n\r\n            // Since we process all Body representations first, the misnamed \"Solids\" field will contain 3D geometry.\r\n            // If this isn't empty, then we'll skip the bounding box, unless we are always importing bounding box geometry.\r\n            // Note that we process Axis representations later since they create model geometry also,\r\n            // but we don't consider Axis or 2D geometry in our decision to import bounding boxes.  \r\n            // Note also that we will only read in the first bounding box, which is the maximum of Box representations allowed.\r\n            if ((representation.Identifier == IFCRepresentationIdentifier.Box) &&\r\n               IFCImportFile.TheFile.Options.ProcessBoundingBoxGeometry != IFCProcessBBoxOptions.Always &&\r\n               shapeEditScope.Creator.Solids.Count > 0)\r\n               continue;\r\n\r\n            representation.CreateShape(shapeEditScope, scaledLcs, guid);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the IFCSurfaceStyle, if available, for an associated material.\r\n      /// TODO: Make this generic, add warnings.\r\n      /// </summary>\r\n      /// <returns>The IFCSurfaceStyle.</returns>\r\n      public IFCSurfaceStyle GetSurfaceStyle()\r\n      {\r\n         IList<IFCRepresentation> representations = Representations;\r\n         if (representations != null && representations.Count > 0)\r\n         {\r\n            IFCRepresentation representation = representations[0];\r\n            IList<IFCRepresentationItem> representationItems = representation.RepresentationItems;\r\n            if (representationItems != null && representationItems.Count > 0 && (representationItems[0] is IFCStyledItem))\r\n            {\r\n               IFCStyledItem styledItem = representationItems[0] as IFCStyledItem;\r\n               return styledItem.GetSurfaceStyle();\r\n            }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcProductRepresentation object.\r\n      /// </summary>\r\n      /// <param name=\"ifcProductRepresentation\">The IfcProductRepresentation handle.</param>\r\n      /// <returns>The IFCProductRepresentation object.</returns>\r\n      public static IFCProductRepresentation ProcessIFCProductRepresentation(IFCAnyHandle ifcProductRepresentation)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcProductRepresentation))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcProductRepresentation);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity cachedProductRepresentation;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcProductRepresentation.StepId, out cachedProductRepresentation))\r\n            return (cachedProductRepresentation as IFCProductRepresentation);\r\n\r\n         return new IFCProductRepresentation(ifcProductRepresentation);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCProfileDef.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCProfileDef : IFCEntity\r\n   {\r\n      protected interface IIFCProfileSegment\r\n      {\r\n         Curve Create();\r\n      }\r\n\r\n      protected class IFCProfileLineSegment : IIFCProfileSegment\r\n      {\r\n         private XYZ StartPoint { get; set; } = null;\r\n\r\n         private XYZ EndPoint { get; set; } = null;\r\n\r\n         public IFCProfileLineSegment(XYZ startPoint, XYZ endPoint)\r\n         {\r\n            StartPoint = startPoint;\r\n            EndPoint = endPoint;\r\n         }\r\n\r\n         public Curve Create()\r\n         {\r\n            return Line.CreateBound(StartPoint, EndPoint);\r\n         }\r\n      }\r\n\r\n      protected IFCProfileDef()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the type of the profile.\r\n      /// </summary>\r\n      public IFCProfileType ProfileType { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// Get the name of the profile.\r\n      /// </summary>\r\n      public string ProfileName { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Attempt to add a group of curve segments to a curve loop.\r\n      /// </summary>\r\n      /// <param name=\"curveLoop\">The curve loop.</param>\r\n      /// <param name=\"segments\">The description of the curve segments.</param>\r\n      /// <returns>True if the operation succeeded, false otherwise.</returns>\r\n      /// <remarks>\r\n      /// It is up to the caller to decide what to do if this returns false.\r\n      /// Regardless of whether the function succeeds or fails, <paramref name=\"segments\"/>\r\n      /// will be cleared afterwards, to either allow for the next set of curves to be added,\r\n      /// or for an alternate representation to be found.\r\n      /// </remarks>\r\n      protected bool AppendSegmentsToCurveLoop(CurveLoop curveLoop, IList<IIFCProfileSegment> segments)\r\n      {\r\n         // We are explicitly trying to catch situations where the curves in the curve loop\r\n         // are too small to be created, or otherwise illegal.  We are not trying to catch\r\n         // the situation where the CurveLoop itself doesn't like the curves, since we are \r\n         // constructing the line segments ourselves, and expect the calculations to be correct.\r\n         IList<Curve> curvesToAppend = new List<Curve>();\r\n         try\r\n         {\r\n            foreach (IIFCProfileSegment segment in segments)\r\n            {\r\n               curvesToAppend.Add(segment.Create());\r\n            }\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            if (ex == null || ex.Message == null || !ex.Message.Contains(\"Curve length is too small\"))\r\n               throw;\r\n\r\n            // Returning false allows the calling code to try a backup for the curve loop,\r\n            // in cases where the issue arises from filleting, for example.\r\n            segments.Clear();\r\n            return false;\r\n         }\r\n\r\n         try\r\n         {\r\n            foreach (Curve curveToAppend in curvesToAppend)\r\n            {\r\n               curveLoop.Append(curveToAppend);\r\n            }\r\n         }\r\n         catch (Autodesk.Revit.Exceptions.ArgumentException ex)\r\n         {\r\n            if (ex == null || ex.Message == null || !ex.Message.Contains(\"discontinuous\"))\r\n               throw;\r\n\r\n            // Returning false allows the calling code to try a backup for the curve loop,\r\n            // in cases where the issue arises from filleting, for example.\r\n            segments.Clear();\r\n            return false;\r\n         }\r\n\r\n         segments.Clear();\r\n         return true;\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle profileDef)\r\n      {\r\n         base.Process(profileDef);\r\n\r\n         ProfileType = IFCEnums.GetSafeEnumerationAttribute<IFCProfileType>(profileDef, \"ProfileType\", IFCProfileType.Area);\r\n\r\n         ProfileName = IFCAnyHandleUtil.GetStringAttribute(profileDef, \"ProfileName\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCProfileDef object from a handle of type IfcProfileDef.\r\n      /// </summary>\r\n      /// <param name=\"ifcProfileDef\">The IFC handle.</param>\r\n      /// <returns>The IFCProfileDef object.</returns>\r\n      public static IFCProfileDef ProcessIFCProfileDef(IFCAnyHandle ifcProfileDef)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcProfileDef))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcProfileDef);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity profileDef;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcProfileDef.StepId, out profileDef))\r\n            return (profileDef as IFCProfileDef);\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcProfileDef, IFCEntityType.IfcCompositeProfileDef))\r\n            return IFCCompositeProfile.ProcessIFCCompositeProfile(ifcProfileDef);\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcProfileDef, IFCEntityType.IfcDerivedProfileDef))\r\n            return IFCDerivedProfileDef.ProcessIFCDerivedProfileDef(ifcProfileDef);\r\n\r\n         //if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcProfileDef, IFCEntityType.IfcArbitraryOpenProfileDef))\r\n         //if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcProfileDef, IFCEntityType.IfcArbitraryClosedProfileDef))\r\n         // IFC2x files don't have IfcParameterizedProfileDef, so we won't check the type. \r\n         // If profileDef is the wrong entity type, it will fail in ProcessIFCParameterizedProfileDef.\r\n         return IFCSimpleProfile.ProcessIFCSimpleProfile(ifcProfileDef);\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Provides methods to process IfcProfileDef and its subclasses.\r\n   /// </summary>\r\n   public class IFCCompositeProfile : IFCProfileDef\r\n   {\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCCompositeProfile()\r\n      {\r\n\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle profileDef)\r\n      {\r\n         base.Process(profileDef);\r\n\r\n         CompositeProfileDefLabel = IFCAnyHandleUtil.GetStringAttribute(profileDef, \"Label\");\r\n\r\n         IList<IFCAnyHandle> profileHnds = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(profileDef, \"Profiles\");\r\n         foreach (IFCAnyHandle profileHnd in profileHnds)\r\n         {\r\n            IFCProfileDef subProfile = IFCProfileDef.ProcessIFCProfileDef(profileHnd);\r\n            if (subProfile != null)\r\n               Profiles.Add(subProfile);\r\n         }\r\n      }\r\n\r\n      protected IFCCompositeProfile(IFCAnyHandle profileDef)\r\n      {\r\n         Process(profileDef);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCCompositeProfile object from a handle of type IfcCompositeProfileDef.\r\n      /// </summary>\r\n      /// <param name=\"ifcProfileDef\">The IFC handle.</param>\r\n      /// <returns>The IFCCompositeProfile object.</returns>\r\n      public static IFCCompositeProfile ProcessIFCCompositeProfile(IFCAnyHandle ifcProfileDef)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcProfileDef))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcCompositeProfileDef);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity profileDef;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcProfileDef.StepId, out profileDef))\r\n            return (profileDef as IFCCompositeProfile);\r\n\r\n         return new IFCCompositeProfile(ifcProfileDef);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the label for an IfcCompositeProfileDef\r\n      /// </summary>\r\n      public string CompositeProfileDefLabel { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Get the list of contained profiles.\r\n      /// </summary>\r\n      public IList<IFCProfileDef> Profiles { get; } = new List<IFCProfileDef>();\r\n   }\r\n\r\n   // We may create more subclasses if we want to preserve the original parametric data.\r\n   public class IFCParameterizedProfile : IFCSimpleProfile\r\n   {\r\n      protected class IFCProfileXYArcSegment : IIFCProfileSegment\r\n      {\r\n         protected XYZ Center { get; private set; } = null;\r\n\r\n         protected double Radius { get; private set; } = 0.0;\r\n\r\n         protected double StartAngle { get; private set; } = 0.0;\r\n\r\n         protected double EndAngle { get; private set; } = 0.0;\r\n\r\n         protected bool Reverse { get; private set; } = false;\r\n\r\n         public IFCProfileXYArcSegment(XYZ center, double radius, double startAngle, double endAngle, bool reverse)\r\n         {\r\n            Center = center;\r\n            Radius = radius;\r\n            StartAngle = startAngle;\r\n            EndAngle = endAngle;\r\n            Reverse = reverse;\r\n         }\r\n\r\n         public virtual Curve Create()\r\n         {\r\n            Arc arc = Arc.Create(Center, Radius, StartAngle, EndAngle, XYZ.BasisX, XYZ.BasisY);\r\n            if (!Reverse)\r\n               return arc;\r\n            return arc.CreateReversed() as Arc;\r\n         }\r\n      }\r\n\r\n      protected class IFCProfileXYEllipseSegment : IFCProfileXYArcSegment\r\n      {\r\n         private double RadiusY { get; set; } = 0.0;\r\n\r\n         public IFCProfileXYEllipseSegment(XYZ center, double radiusX, double radiusY, double startAngle, double endAngle) :\r\n            base(center, radiusX, startAngle, endAngle, false)\r\n         {\r\n            RadiusY = radiusY;\r\n         }\r\n\r\n         public override Curve Create()\r\n         {\r\n            return Ellipse.CreateCurve(Center, Radius, RadiusY, XYZ.BasisX, XYZ.BasisY, StartAngle, EndAngle);\r\n         }\r\n      }\r\n\r\n      private void AddValidLineSegment(IList<IIFCProfileSegment> segments, XYZ startPoint, XYZ endPoint)\r\n      {\r\n         if (endPoint.DistanceTo(startPoint) > IFCImportFile.TheFile.ShortCurveTolerance - MathUtil.Eps())\r\n            segments.Add(new IFCProfileLineSegment(startPoint, endPoint));\r\n      }\r\n   \r\n      private CurveLoop CreateProfilePolyCurveLoop(XYZ[] corners)\r\n      {\r\n         int sz = corners.Count();\r\n         if (sz == 0)\r\n            return null;\r\n\r\n         CurveLoop curveLoop = new CurveLoop();\r\n         IList<IIFCProfileSegment> segments = new List<IIFCProfileSegment>();\r\n         for (int ii = 0; ii < sz; ii++)\r\n         {\r\n            AddValidLineSegment(segments, corners[ii], corners[(ii + 1) % sz]);\r\n         }\r\n         if (!AppendSegmentsToCurveLoop(curveLoop, segments))\r\n            return null;\r\n\r\n         return curveLoop;\r\n      }\r\n\r\n      private CurveLoop CreateFilletedRectangleCurveLoop(XYZ[] corners, double filletRadius)\r\n      {\r\n         int sz = corners.Count();\r\n         if (sz != 4)\r\n            return null;\r\n\r\n         XYZ[] radii = new XYZ[4] {\r\n                new XYZ( corners[0].X + filletRadius, corners[0].Y + filletRadius, 0.0 ),\r\n                new XYZ( corners[1].X - filletRadius, corners[1].Y + filletRadius, 0.0 ),\r\n                new XYZ( corners[2].X - filletRadius, corners[2].Y - filletRadius, 0.0 ),\r\n                new XYZ( corners[3].X + filletRadius, corners[3].Y - filletRadius, 0.0 ),\r\n            };\r\n\r\n         XYZ[] fillets = new XYZ[8] {\r\n                new XYZ( corners[0].X, corners[0].Y + filletRadius, 0.0 ),\r\n                new XYZ( corners[0].X + filletRadius, corners[0].Y, 0.0 ),\r\n                new XYZ( corners[1].X - filletRadius, corners[1].Y, 0.0 ),\r\n                new XYZ( corners[1].X, corners[1].Y + filletRadius, 0.0 ),\r\n                new XYZ( corners[2].X, corners[2].Y - filletRadius, 0.0 ),\r\n                new XYZ( corners[2].X - filletRadius, corners[2].Y, 0.0 ),\r\n                new XYZ( corners[3].X + filletRadius, corners[3].Y, 0.0 ),\r\n                new XYZ( corners[3].X, corners[3].Y - filletRadius, 0.0 )\r\n            };\r\n\r\n         CurveLoop curveLoop = new CurveLoop();\r\n         IList<IIFCProfileSegment> segments = new List<IIFCProfileSegment>();\r\n         for (int ii = 0; ii < 4; ii++)\r\n         {\r\n            // It is legal for a rounded rectangular profile def to have no straight parts.\r\n            AddValidLineSegment(segments, fillets[ii * 2 + 1], fillets[(ii * 2 + 2) % 8]);\r\n            \r\n            double startAngle = Math.PI * ((ii + 3) % 4) / 2;\r\n            segments.Add(new IFCProfileXYArcSegment(radii[(ii + 1) % 4], filletRadius, startAngle, startAngle + Math.PI / 2, false));\r\n         }\r\n\r\n         return AppendSegmentsToCurveLoop(curveLoop, segments) ? curveLoop : null;\r\n      }\r\n\r\n      private void ProcessIFCRoundedRectangleProfileDef(IFCAnyHandle profileDef,\r\n          double xDimVal, double yDimVal, double roundedRadiusVal)\r\n      {\r\n         XYZ[] corners = new XYZ[4] {\r\n                new XYZ( -xDimVal/2.0, -yDimVal/2.0, 0.0 ),\r\n                new XYZ( xDimVal/2.0, -yDimVal/2.0, 0.0 ),\r\n                new XYZ( xDimVal/2.0, yDimVal/2.0, 0.0 ),\r\n                new XYZ( -xDimVal/2.0, yDimVal/2.0, 0.0 )\r\n            };\r\n\r\n         OuterCurve = CreateFilletedRectangleCurveLoop(corners, roundedRadiusVal);\r\n      }\r\n\r\n      private void ProcessIFCRectangleHollowProfileDef(IFCAnyHandle profileDef,\r\n          double xDimVal, double yDimVal)\r\n      {\r\n         XYZ[] corners = new XYZ[4] {\r\n                new XYZ( -xDimVal/2.0, -yDimVal/2.0, 0.0 ),\r\n                new XYZ( xDimVal/2.0, -yDimVal/2.0, 0.0 ),\r\n                new XYZ( xDimVal/2.0, yDimVal/2.0, 0.0 ),\r\n                new XYZ( -xDimVal/2.0, yDimVal/2.0, 0.0 )\r\n            };\r\n\r\n         double outerFilletRadius = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"OuterFilletRadius\", 0.0);\r\n         bool hasFillet = (outerFilletRadius > MathUtil.Eps()) && (outerFilletRadius < ((Math.Min(xDimVal, yDimVal) / 2.0) - MathUtil.Eps()));\r\n\r\n         if (hasFillet)\r\n         {\r\n            OuterCurve = CreateFilletedRectangleCurveLoop(corners, outerFilletRadius);\r\n            if (OuterCurve == null)\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Couldn't process fillets for outer loop for IfcRectangleHollowProfileDef, ignoring.\", false);\r\n               hasFillet = false;\r\n            }\r\n         }\r\n\r\n         if (!hasFillet)\r\n            OuterCurve = CreateProfilePolyCurveLoop(corners);\r\n\r\n         if (OuterCurve == null)\r\n            Importer.TheLog.LogError(Id, \"Couldn't create IfcRectangleHollowProfileDef, ignoring.\", true);\r\n\r\n         double wallThickness = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"WallThickness\", 0.0);\r\n         if ((wallThickness > MathUtil.Eps()) && (wallThickness < ((Math.Min(xDimVal, yDimVal) / 2.0) - MathUtil.Eps())))\r\n         {\r\n            double innerXDimVal = xDimVal - wallThickness * 2.0;\r\n            double innerYDimVal = yDimVal - wallThickness * 2.0;\r\n            XYZ[] innerCorners = new XYZ[4] {\r\n                    new XYZ( -innerXDimVal/2.0, -innerYDimVal/2.0, 0.0 ),\r\n                    new XYZ( innerXDimVal/2.0, -innerYDimVal/2.0, 0.0 ),\r\n                    new XYZ( innerXDimVal/2.0, innerYDimVal/2.0, 0.0 ),\r\n                    new XYZ( -innerXDimVal/2.0, innerYDimVal/2.0, 0.0 )\r\n                };\r\n\r\n            double innerFilletRadius = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"InnerFilletRadius\", 0.0);\r\n            if ((innerFilletRadius > MathUtil.Eps()) && (innerFilletRadius < ((Math.Min(innerXDimVal, innerYDimVal) / 2.0) - MathUtil.Eps())))\r\n            {\r\n               CurveLoop innerLoop = CreateFilletedRectangleCurveLoop(innerCorners, innerFilletRadius);\r\n               if (innerLoop != null)\r\n                  InnerCurves.Add(innerLoop);\r\n               else\r\n                  Importer.TheLog.LogError(Id, \"Couldn't process fillets for inner loop for IfcRectangleHollowProfileDef, ignoring.\", false);\r\n            }\r\n\r\n            if (InnerCurves.Count == 0)\r\n            {\r\n               CurveLoop innerLoop = CreateProfilePolyCurveLoop(innerCorners);\r\n               if (innerLoop != null)\r\n                  InnerCurves.Add(innerLoop);\r\n               else\r\n                  Importer.TheLog.LogError(Id, \"Couldn't process inner loop for IfcRectangleHollowProfileDef, ignoring.\", false);\r\n            }\r\n         }\r\n      }\r\n\r\n      private void ProcessIFCRectangleProfileDef(IFCAnyHandle profileDef)\r\n      {\r\n         bool found = false;\r\n         double xDim = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"XDim\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double yDim = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"YDim\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         if (xDim < MathUtil.Eps())\r\n            Importer.TheLog.LogError(Id, \"IfcRectangleProfileDef has invalid XDim: \" + xDim + \", ignoring.\", true);\r\n\r\n         if (yDim < MathUtil.Eps())\r\n            Importer.TheLog.LogError(Id, \"IfcRectangleProfileDef has invalid YDim: \" + yDim + \", ignoring.\", true);\r\n\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC2x2) && IFCAnyHandleUtil.IsSubTypeOf(profileDef, IFCEntityType.IfcRectangleHollowProfileDef))\r\n         {\r\n            ProcessIFCRectangleHollowProfileDef(profileDef, xDim, yDim);\r\n            return;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(profileDef, IFCEntityType.IfcRoundedRectangleProfileDef))\r\n         {\r\n            double roundedRadius = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"RoundingRadius\", 0.0);\r\n            if ((roundedRadius > MathUtil.Eps()) && (roundedRadius <= ((Math.Min(xDim, yDim) / 2.0) + MathUtil.Eps())))\r\n            {\r\n               ProcessIFCRoundedRectangleProfileDef(profileDef, xDim, yDim, roundedRadius);\r\n               return;\r\n            }\r\n         }\r\n\r\n         XYZ[] corners = new XYZ[4] {\r\n                new XYZ( -xDim/2.0, -yDim/2.0, 0.0 ),\r\n                new XYZ( xDim/2.0, -yDim/2.0, 0.0 ),\r\n                new XYZ( xDim/2.0, yDim/2.0, 0.0 ),\r\n                new XYZ( -xDim/2.0, yDim/2.0, 0.0 )\r\n            };\r\n\r\n         OuterCurve = CreateProfilePolyCurveLoop(corners);\r\n         if (OuterCurve == null)\r\n            Importer.TheLog.LogError(Id, \"Couldn't process IfcRectangleProfileDef, ignoring.\", true);\r\n      }\r\n\r\n      private void ProcessIFCCircleProfileDef(IFCAnyHandle profileDef)\r\n      {\r\n         bool found = false;\r\n         double radius = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"Radius\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         if (radius < MathUtil.Eps())\r\n            Importer.TheLog.LogError(Id, \"IfcCircleProfileDef has invalid radius: \" + radius + \", ignoring.\", true);\r\n\r\n         // Some internal routines want CurveLoops with bounded components.  Split to avoid problems.\r\n         OuterCurve = new CurveLoop();\r\n         IList<IIFCProfileSegment> segments = new List<IIFCProfileSegment>();\r\n         segments.Add(new IFCProfileXYArcSegment(XYZ.Zero, radius, 0, Math.PI, false));\r\n         segments.Add(new IFCProfileXYArcSegment(XYZ.Zero, radius, Math.PI, 2 * Math.PI, false));\r\n         if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n            Importer.TheLog.LogError(Id, \"Couldn't create IfcCircleHollowProfileDef, ignoring.\", true);\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(profileDef, IFCEntityType.IfcCircleHollowProfileDef))\r\n         {\r\n            double wallThickness = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"WallThickness\", 0.0);\r\n            if (wallThickness > MathUtil.Eps() && wallThickness < radius)\r\n            {\r\n               double innerRadius = radius - wallThickness;\r\n\r\n               CurveLoop innerCurve = new CurveLoop();\r\n\r\n               IList<IIFCProfileSegment> innerSegments = new List<IIFCProfileSegment>();\r\n               innerSegments.Add(new IFCProfileXYArcSegment(XYZ.Zero, innerRadius, 0, Math.PI, false));\r\n               innerSegments.Add(new IFCProfileXYArcSegment(XYZ.Zero, innerRadius, Math.PI, 2 * Math.PI, false));\r\n               if (AppendSegmentsToCurveLoop(innerCurve, innerSegments))\r\n                  InnerCurves.Add(innerCurve);\r\n               else\r\n                  Importer.TheLog.LogError(Id, \"Couldn't create inner loop for IfcCircleHollowProfileDef, ignoring.\", false);\r\n            }\r\n         }\r\n      }\r\n\r\n      private void ProcessIFCEllipseProfileDef(IFCAnyHandle profileDef)\r\n      {\r\n         bool found = false;\r\n         double radiusX = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"SemiAxis1\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double radiusY = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"SemiAxis2\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         // Some internal routines want CurveLoops with bounded components.  Split to avoid problems.\r\n         OuterCurve = new CurveLoop();\r\n         IList<IIFCProfileSegment> segments = new List<IIFCProfileSegment>();\r\n         segments.Add(new IFCProfileXYEllipseSegment(XYZ.Zero, radiusX, radiusY, 0, Math.PI));\r\n         segments.Add(new IFCProfileXYEllipseSegment(XYZ.Zero, radiusX, radiusY, Math.PI, 2 * Math.PI));\r\n         if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n            Importer.TheLog.LogError(Id, \"Couldn't create IfcEllipseProfileDef, ignoring.\", true);\r\n      }\r\n\r\n      private void ProcessIFCCShapeProfileDef(IFCAnyHandle profileDef)\r\n      {\r\n         bool found = false;\r\n         double depth = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"Depth\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double width = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"Width\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double wallThickness = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"WallThickness\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double girth = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"Girth\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         if (MathUtil.IsAlmostEqual(girth, wallThickness))\r\n         {\r\n            Importer.TheLog.LogWarning(Id, \"Girth and Wall Thickness are equal for IfcCShapeProfileDef.  May result in duplicate points.\", false);\r\n         }\r\n\r\n         // Optional parameters\r\n         double centerOptX = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"CentreOfGravityInX\", 0.0);\r\n         double innerRadius = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"InternalFilletRadius\", 0.0);\r\n\r\n         bool hasFillet = !MathUtil.IsAlmostZero(innerRadius);\r\n         double outerRadius = hasFillet ? innerRadius + wallThickness : 0.0;\r\n\r\n         XYZ[] cShapePoints = new XYZ[12] {\r\n                new XYZ(width/2.0 + centerOptX, -depth/2.0+girth, 0.0),\r\n                new XYZ(width/2.0 + centerOptX, -depth/2.0, 0.0),\r\n                new XYZ(-width/2.0 + centerOptX, -depth/2.0, 0.0),\r\n                new XYZ(-width/2.0 + centerOptX, depth/2.0, 0.0),\r\n                new XYZ(width/2.0 + centerOptX, depth/2.0, 0.0),\r\n                new XYZ(width/2.0 + centerOptX, -(-depth/2.0+girth), 0.0),\r\n                new XYZ(width/2.0 - wallThickness, -(-depth/2.0+girth), 0.0),\r\n                new XYZ(width/2.0 - wallThickness, depth/2.0 - wallThickness, 0.0),\r\n                new XYZ(-width/2.0 + wallThickness, depth/2.0 - wallThickness, 0.0),\r\n                new XYZ(-width/2.0 + wallThickness, -depth/2.0 + wallThickness, 0.0),\r\n                new XYZ(width/2.0 - wallThickness, -depth/2.0 + wallThickness, 0.0),\r\n                new XYZ(width/2.0 + centerOptX - wallThickness, -depth/2.0+girth, 0.0)\r\n            };\r\n\r\n         if (hasFillet)\r\n         {\r\n            XYZ[] cFilletPoints = new XYZ[16] {\r\n                    new XYZ(cShapePoints[1][0], cShapePoints[1][1] + outerRadius, 0.0),\r\n                    new XYZ(cShapePoints[1][0] - outerRadius, cShapePoints[1][1], 0.0),\r\n                    new XYZ(cShapePoints[2][0] + outerRadius, cShapePoints[2][1], 0.0),\r\n                    new XYZ(cShapePoints[2][0], cShapePoints[2][1] + outerRadius, 0.0),\r\n                    new XYZ(cShapePoints[3][0], cShapePoints[3][1] - outerRadius, 0.0),\r\n                    new XYZ(cShapePoints[3][0] + outerRadius, cShapePoints[3][1], 0.0),\r\n                    new XYZ(cShapePoints[4][0] - outerRadius, cShapePoints[4][1], 0.0),\r\n                    new XYZ(cShapePoints[4][0], cShapePoints[4][1] - outerRadius, 0.0),\r\n                    new XYZ(cShapePoints[7][0], cShapePoints[7][1] - innerRadius, 0.0),\r\n                    new XYZ(cShapePoints[7][0] - innerRadius, cShapePoints[7][1], 0.0),\r\n                    new XYZ(cShapePoints[8][0] + innerRadius, cShapePoints[8][1], 0.0),\r\n                    new XYZ(cShapePoints[8][0], cShapePoints[8][1] - innerRadius, 0.0),\r\n                    new XYZ(cShapePoints[9][0], cShapePoints[9][1] + innerRadius, 0.0),\r\n                    new XYZ(cShapePoints[9][0] + innerRadius, cShapePoints[9][1], 0.0),\r\n                    new XYZ(cShapePoints[10][0] - innerRadius, cShapePoints[10][1], 0.0),\r\n                    new XYZ(cShapePoints[10][0], cShapePoints[10][1] + innerRadius, 0.0)\r\n                };\r\n\r\n            // shared for inner and outer.\r\n            XYZ[] cFilletCenters = new XYZ[4] {\r\n                    new XYZ(cShapePoints[1][0] - outerRadius, cShapePoints[1][1] + outerRadius, 0.0),\r\n                    new XYZ(cShapePoints[2][0] + outerRadius, cShapePoints[2][1] + outerRadius, 0.0),\r\n                    new XYZ(cShapePoints[3][0] + outerRadius, cShapePoints[3][1] - outerRadius, 0.0),\r\n                    new XYZ(cShapePoints[4][0] - outerRadius, cShapePoints[4][1] - outerRadius, 0.0)\r\n                };\r\n\r\n            // flip outers not inners.\r\n            double[][] cRange = new double[4][] {\r\n                    new double[2] { 3*Math.PI/2.0, 2.0*Math.PI },\r\n                    new double[2] { Math.PI, 3*Math.PI/2.0 },\r\n                    new double[2] { Math.PI/2.0, Math.PI },\r\n                    new double[2] { 0.0, Math.PI/2.0 }\r\n                };\r\n\r\n            OuterCurve = new CurveLoop();\r\n            IList<IIFCProfileSegment> segments = new List<IIFCProfileSegment>();\r\n\r\n            segments.Add(new IFCProfileLineSegment(cShapePoints[0], cFilletPoints[0]));\r\n            for (int ii = 0; ii < 3; ii++)\r\n            {\r\n               segments.Add(new IFCProfileXYArcSegment(cFilletCenters[ii], outerRadius, cRange[ii][0], cRange[ii][1], true));\r\n               segments.Add(new IFCProfileLineSegment(cFilletPoints[2 * ii + 1], cFilletPoints[2 * ii + 2]));\r\n               segments.Add(new IFCProfileXYArcSegment(cFilletCenters[3], outerRadius, cRange[3][0], cRange[3][1], true));\r\n               segments.Add(new IFCProfileLineSegment(cFilletPoints[7], cShapePoints[5]));\r\n               segments.Add(new IFCProfileLineSegment(cShapePoints[5], cShapePoints[6]));\r\n               segments.Add(new IFCProfileLineSegment(cShapePoints[6], cFilletPoints[8]));\r\n               \r\n               for (int jj = 0; jj < 3; jj++)\r\n               {\r\n                  segments.Add(new IFCProfileXYArcSegment(cFilletCenters[3 - jj], innerRadius, cRange[3 - jj][0], cRange[3 - jj][1], false));\r\n                  segments.Add(new IFCProfileLineSegment(cFilletPoints[2 * jj + 9], cFilletPoints[2 * jj + 10]));\r\n               }\r\n\r\n               segments.Add(new IFCProfileXYArcSegment(cFilletCenters[0], innerRadius, cRange[0][0], cRange[0][1], false));\r\n               segments.Add(new IFCProfileLineSegment(cFilletPoints[15], cShapePoints[11]));\r\n               segments.Add(new IFCProfileLineSegment(cShapePoints[11], cShapePoints[0]));\r\n            }\r\n\r\n            if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Couldn't create filleted IfcCShapeProfileDef, removing fillets.\", false);\r\n               hasFillet = false;\r\n            }\r\n         }\r\n         \r\n         // If trying to create a filleted profile above failed, we will try this as \r\n         // a backup, even if hasFillet was originally set to true.\r\n         if (!hasFillet)\r\n         {\r\n            OuterCurve = CreateProfilePolyCurveLoop(cShapePoints);\r\n         }\r\n\r\n         if (OuterCurve == null)\r\n            Importer.TheLog.LogError(Id, \"Couldn't process IfcCShapeProfileDef, ignoring.\", true);\r\n      }\r\n\r\n      private void ProcessIFCLShapeProfileDef(IFCAnyHandle profileDef)\r\n      {\r\n         bool found = false;\r\n         double depth = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"Depth\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double thickness = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"Thickness\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double width = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"Width\", depth);\r\n\r\n         double filletRadius = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"FilletRadius\", 0.0);\r\n         bool filletedCorner = !MathUtil.IsAlmostZero(filletRadius);\r\n\r\n         double edgeRadius = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"EdgeRadius\", 0.0);\r\n         bool filletedEdge = !MathUtil.IsAlmostZero(edgeRadius);\r\n         if (filletedEdge && (thickness < edgeRadius - MathUtil.Eps()))\r\n         {\r\n            Importer.TheLog.LogWarning(profileDef.Id, \"Fillet edge radius is at least as large as the thicknes of the profile, ignoring the fillet.\", false);\r\n            filletedEdge = false;\r\n         }\r\n\r\n         bool fullFilletedEdge = (filletedEdge && MathUtil.IsAlmostEqual(thickness, edgeRadius));\r\n\r\n         double centerOptX = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"CentreOfGravityInX\", 0.0);\r\n\r\n         double centerOptY = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"CentreOfGravityInY\", centerOptX);\r\n\r\n         // TODO: use leg slope\r\n         double legSlope = IFCImportHandleUtil.GetOptionalScaledAngleAttribute(profileDef, \"LegSlope\", 0.0);\r\n\r\n         XYZ lOrig = new XYZ(-width / 2.0 + centerOptX, -depth / 2.0 + centerOptY, 0.0);\r\n         XYZ lLR = new XYZ(lOrig[0] + width, lOrig[1], 0.0);\r\n         XYZ lLRPlusThickness = new XYZ(lLR[0], lLR[1] + thickness, 0.0);\r\n         XYZ lCorner = new XYZ(lOrig[0] + thickness, lOrig[1] + thickness, 0.0);\r\n         XYZ lULPlusThickness = new XYZ(lOrig[0] + thickness, lOrig[1] + depth, 0.0);\r\n         XYZ lUL = new XYZ(lULPlusThickness[0] - thickness, lULPlusThickness[1], 0.0);\r\n\r\n         // fillet modifications.\r\n         double[] edgeRanges = new double[2];\r\n         XYZ lLREdgeCtr = null, lULEdgeCtr = null;\r\n         XYZ lLRStartFillet = null, lLREndFillet = null;\r\n         XYZ lULStartFillet = null, lULEndFillet = null;\r\n\r\n         if (filletedEdge)\r\n         {\r\n            lLREdgeCtr = new XYZ(lLRPlusThickness[0] - edgeRadius, lLRPlusThickness[1] - edgeRadius, 0.0);\r\n            lULEdgeCtr = new XYZ(lULPlusThickness[0] - edgeRadius, lULPlusThickness[1] - edgeRadius, 0.0);\r\n\r\n            lLRStartFillet = new XYZ(lLRPlusThickness[0], lLRPlusThickness[1] - edgeRadius, 0.0);\r\n            lLREndFillet = new XYZ(lLRPlusThickness[0] - edgeRadius, lLRPlusThickness[1], 0.0);\r\n\r\n            lULStartFillet = new XYZ(lULPlusThickness[0], lULPlusThickness[1] - edgeRadius, 0.0);\r\n            lULEndFillet = new XYZ(lULPlusThickness[0] - edgeRadius, lULPlusThickness[1], 0.0);\r\n\r\n            edgeRanges[0] = 0.0; edgeRanges[1] = Math.PI / 2.0;\r\n         }\r\n\r\n         XYZ lLRCorner = null, lULCorner = null, lFilletCtr = null;\r\n         double[] filletRange = new double[2];\r\n         if (filletedCorner)\r\n         {\r\n            lLRCorner = new XYZ(lCorner[0] + filletRadius, lCorner[1], lCorner[2]);\r\n            lULCorner = new XYZ(lCorner[0], lCorner[1] + filletRadius, lCorner[2]);\r\n            lFilletCtr = new XYZ(lCorner[0] + filletRadius, lCorner[1] + filletRadius, lCorner[2]);\r\n\r\n            filletRange[0] = Math.PI; filletRange[1] = 3.0 * Math.PI / 2;\r\n         }\r\n\r\n         OuterCurve = new CurveLoop();\r\n         IList<IIFCProfileSegment> segments = new List<IIFCProfileSegment>();\r\n\r\n         // We will process the L shape profile is subsections, to try to fall back\r\n         // on simpler representations as possible.\r\n         segments.Add(new IFCProfileLineSegment(lOrig, lLR));\r\n         if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n         {\r\n            Importer.TheLog.LogError(Id, \"Couldn't process IfcLShapeProfileDef, ignoring.\", true);\r\n         }\r\n\r\n         XYZ startCornerPoint = null, endCornerPoint = null;\r\n         if (filletedEdge)\r\n         {\r\n            startCornerPoint = lLREndFillet;\r\n            endCornerPoint = lULStartFillet;\r\n\r\n            if (!fullFilletedEdge)\r\n            {\r\n               segments.Add(new IFCProfileLineSegment(lLR, lLRStartFillet));\r\n            }\r\n\r\n            segments.Add(new IFCProfileXYArcSegment(lLREdgeCtr, edgeRadius, edgeRanges[0], edgeRanges[1], false));\r\n            if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Couldn't process edge fillet for IfcLShapeProfileDef, removing fillet.\", false);\r\n               filletedEdge = false;\r\n               fullFilletedEdge = false;\r\n            }\r\n         }\r\n\r\n         // filletedEdge may have become false if above operation failed.\r\n         if (!filletedEdge)\r\n         {\r\n            startCornerPoint = lLRPlusThickness;\r\n            endCornerPoint = lULPlusThickness;\r\n\r\n            segments.Add(new IFCProfileLineSegment(lLR, startCornerPoint));\r\n            if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Couldn't process IfcLShapeProfileDef, ignoring.\", true);\r\n            }\r\n         }\r\n\r\n         if (filletedCorner)\r\n         {\r\n            segments.Add(new IFCProfileLineSegment(startCornerPoint, lLRCorner));\r\n            segments.Add(new IFCProfileXYArcSegment(lFilletCtr, filletRadius, filletRange[0], filletRange[1], true));\r\n            segments.Add(new IFCProfileLineSegment(lULCorner, endCornerPoint));\r\n            if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Couldn't process corner fillet for IfcLShapeProfileDef, removing fillet.\", false);\r\n               filletedCorner = false;\r\n            }\r\n         }\r\n\r\n         // filletedCorner may have become false if above operation failed.\r\n         if (!filletedCorner)\r\n         {\r\n            segments.Add(new IFCProfileLineSegment(startCornerPoint, lCorner));\r\n            segments.Add(new IFCProfileLineSegment(lCorner, endCornerPoint));\r\n            if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Couldn't process IfcLShapeProfileDef, ignoring.\", true);\r\n            }\r\n         }\r\n\r\n         if (filletedEdge)\r\n         {\r\n            segments.Add(new IFCProfileXYArcSegment(lULEdgeCtr, edgeRadius, edgeRanges[0], edgeRanges[1], false));\r\n            if (!fullFilletedEdge)\r\n            {\r\n               segments.Add(new IFCProfileLineSegment(lULEndFillet, lUL));\r\n            }\r\n\r\n            if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Couldn't process edge fillet for IfcLShapeProfileDef, removing fillet.\", false);\r\n               filletedEdge = false;\r\n               // No need to set fullFilletedEdge to false, as it is not used after this point.\r\n            }\r\n         }\r\n\r\n         if (!filletedEdge)\r\n         {\r\n            segments.Add(new IFCProfileLineSegment(endCornerPoint, lUL));\r\n            // No need to AppendSegmentsToCurveLoop here; will be done below.\r\n         }\r\n\r\n         segments.Add(new IFCProfileLineSegment(lUL, lOrig));\r\n         if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n         {\r\n            Importer.TheLog.LogError(Id, \"Couldn't process IfcLShapeProfileDef, ignoring.\", true);\r\n         }\r\n      }\r\n\r\n      private void ProcessIFCIShapeProfileDef(IFCAnyHandle profileDef)\r\n      {\r\n         bool found = false;\r\n         double bottomWidth = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"OverallWidth\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double depth = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"OverallDepth\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double webThickness = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"WebThickness\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double bottomFlangeThickness = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"FlangeThickness\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double bottomFilletRadius = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"FilletRadius\", 0.0);\r\n\r\n         double? optTopWidth = null;\r\n         double? optTopFlangeThickness = null;\r\n         double? optTopFilletRadius = null;\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(profileDef, IFCEntityType.IfcAsymmetricIShapeProfileDef))\r\n         {\r\n            optTopWidth = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"TopFlangeWidth\");\r\n            optTopFlangeThickness = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"TopFlangeThickness\");\r\n            optTopFilletRadius = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"TopFlangeFilletRadius\");\r\n            // TODO: support CentreOfGravityInY.\r\n         }\r\n\r\n         double topWidth = optTopWidth.GetValueOrDefault(bottomWidth);\r\n         double topFlangeThickness = optTopFlangeThickness.GetValueOrDefault(bottomFlangeThickness);\r\n         double topFilletRadius = optTopFilletRadius.GetValueOrDefault(bottomFilletRadius);\r\n\r\n         bool hasTopFillet = !MathUtil.IsAlmostZero(topFilletRadius);\r\n         bool hasBottomFillet = !MathUtil.IsAlmostZero(bottomFilletRadius);\r\n         if (hasTopFillet ^ hasBottomFillet)\r\n         {\r\n            Importer.TheLog.LogWarning(Id, \r\n               \"If fillets are specified for IfcAsymmetricIShapeProfileDef, both fillet radii are required. Ignoring.\",\r\n               false);\r\n            hasTopFillet = hasBottomFillet = false;\r\n         }\r\n\r\n         // We start with the bottom left corner and proceed counter-clockwise.\r\n         XYZ[] iShapePoints = new XYZ[12] {\r\n            new XYZ(-bottomWidth/2.0,  -depth/2.0, 0.0),   // bottom left\r\n            new XYZ( bottomWidth/2.0,  -depth/2.0, 0.0),   // bottom right\r\n            new XYZ( bottomWidth/2.0,  -depth/2.0 + bottomFlangeThickness, 0.0), // bottom right top of flange\r\n            new XYZ( webThickness/2.0, -depth/2.0 + bottomFlangeThickness, 0.0), // bottom middle right top of flange\r\n      \r\n            new XYZ( webThickness/2.0,  depth/2.0 - topFlangeThickness, 0.0), // top middle right bottom of flange\r\n            new XYZ( topWidth/2.0,      depth/2.0 - topFlangeThickness, 0.0), // top right bottom of flange\r\n            new XYZ( topWidth/2.0,      depth/2.0, 0.0), // top right\r\n            new XYZ(-topWidth/2.0,      depth/2.0, 0.0), // top left\r\n      \r\n            new XYZ(-topWidth/2.0,      depth/2.0 - topFlangeThickness, 0.0), // top left bottom of flange\r\n            new XYZ(-webThickness/2.0,  depth/2.0 - topFlangeThickness, 0.0), // top middle left bottom of flange\r\n            new XYZ(-webThickness/2.0, -depth/2.0 + bottomFlangeThickness, 0.0), // bottom middle left top of flange\r\n            new XYZ(-bottomWidth/2.0,  -depth/2.0 + bottomFlangeThickness, 0.0) // bottom left top of flange\r\n         };\r\n\r\n         if (hasTopFillet && hasBottomFillet)\r\n         {\r\n            OuterCurve = new CurveLoop();\r\n            XYZ[] iFilletPoints = new XYZ[8] {\r\n               new XYZ( iShapePoints[3][0] + bottomFilletRadius, iShapePoints[3][1], 0.0 ), // bottom right  \r\n               new XYZ( iShapePoints[3][0], iShapePoints[3][1] + bottomFilletRadius, 0.0 ), // bottom right\r\n               new XYZ( iShapePoints[4][0], iShapePoints[4][1] - topFilletRadius, 0.0 ), // top right\r\n               new XYZ( iShapePoints[4][0] + topFilletRadius, iShapePoints[4][1], 0.0 ), // top right\r\n               new XYZ( iShapePoints[9][0] - topFilletRadius, iShapePoints[9][1], 0.0 ), // top left\r\n               new XYZ( iShapePoints[9][0], iShapePoints[9][1] - topFilletRadius, 0.0 ), // top left\r\n               new XYZ( iShapePoints[10][0], iShapePoints[10][1] + bottomFilletRadius, 0.0 ), // bottom left\r\n               new XYZ( iShapePoints[10][0] - bottomFilletRadius, iShapePoints[10][1], 0.0 ) // bottom left\r\n            };\r\n\r\n            XYZ[] iFilletCtr = new XYZ[4] {\r\n               new XYZ( iShapePoints[3][0] + bottomFilletRadius, iShapePoints[3][1] + bottomFilletRadius, 0.0 ),\r\n               new XYZ( iShapePoints[4][0] + topFilletRadius, iShapePoints[4][1] - topFilletRadius, 0.0 ),\r\n               new XYZ( iShapePoints[9][0] - topFilletRadius, iShapePoints[9][1] - topFilletRadius, 0.0 ),\r\n               new XYZ( iShapePoints[10][0] - bottomFilletRadius, iShapePoints[10][1] + bottomFilletRadius, 0.0 )\r\n            };\r\n\r\n            // need to flip all fillets.\r\n            double[][] filletRanges = new double[4][]\r\n            {\r\n               new double[2] { Math.PI, 3.0*Math.PI/2 },\r\n               new double[2] { Math.PI/2.0, Math.PI },\r\n               new double[2] { 0, Math.PI/2.0 },\r\n               new double[2] { 3.0*Math.PI/2, 2.0*Math.PI }\r\n            };\r\n\r\n            IList<IIFCProfileSegment> segments = new List<IIFCProfileSegment>()\r\n            {\r\n               new IFCProfileLineSegment(iShapePoints[0], iShapePoints[1]),\r\n               new IFCProfileLineSegment(iShapePoints[1], iShapePoints[2]),\r\n               new IFCProfileLineSegment(iShapePoints[2], iFilletPoints[0]),\r\n               new IFCProfileXYArcSegment(iFilletCtr[0], bottomFilletRadius, filletRanges[0][0], filletRanges[0][1], true),\r\n               new IFCProfileLineSegment(iFilletPoints[1], iFilletPoints[2]),\r\n               new IFCProfileXYArcSegment(iFilletCtr[1], topFilletRadius, filletRanges[1][0], filletRanges[1][1], true),\r\n               new IFCProfileLineSegment(iFilletPoints[3], iShapePoints[5]),\r\n               new IFCProfileLineSegment(iShapePoints[5], iShapePoints[6]),\r\n               new IFCProfileLineSegment(iShapePoints[6], iShapePoints[7]),\r\n               new IFCProfileLineSegment(iShapePoints[7], iShapePoints[8]),\r\n               new IFCProfileLineSegment(iShapePoints[8], iFilletPoints[4]),\r\n               new IFCProfileXYArcSegment(iFilletCtr[2], topFilletRadius, filletRanges[2][0], filletRanges[2][1], true),\r\n               new IFCProfileLineSegment(iFilletPoints[5], iFilletPoints[6]),\r\n               new IFCProfileXYArcSegment(iFilletCtr[3], bottomFilletRadius, filletRanges[3][0], filletRanges[3][1], true),\r\n               new IFCProfileLineSegment(iFilletPoints[7], iShapePoints[11]),\r\n               new IFCProfileLineSegment(iShapePoints[11], iShapePoints[0])\r\n            };\r\n\r\n            if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Couldn't process filleted IfcIShapeProfileDef, removing fillet.\", false);\r\n               hasTopFillet = hasBottomFillet = false;\r\n            }\r\n         }\r\n\r\n         if (!hasTopFillet || !hasBottomFillet)\r\n         {\r\n            OuterCurve = CreateProfilePolyCurveLoop(iShapePoints);\r\n         }\r\n\r\n         if (OuterCurve == null)\r\n            Importer.TheLog.LogError(Id, \"Couldn't process IfcIShapeProfileDef, ignoring.\", true);\r\n      }\r\n\r\n      private void ProcessIFCTShapeProfileDef(IFCAnyHandle profileDef)\r\n      {\r\n         bool found = false;\r\n         double flangeWidth = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"FlangeWidth\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double depth = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"Depth\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double webThickness = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"WebThickness\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double flangeThickness = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"FlangeThickness\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double centerOptY = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"CentreOfGravityInY\", 0.0);\r\n\r\n         double filletRadius = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"FilletRadius\", 0.0);\r\n         bool hasFillet = !MathUtil.IsAlmostZero(filletRadius);\r\n\r\n         double flangeEdgeRadius = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"FlangeEdgeRadius\", 0.0);\r\n         bool hasFlangeEdge = !MathUtil.IsAlmostZero(flangeEdgeRadius);\r\n\r\n         double webEdgeRadius = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"WebEdgeRadius\", 0.0);\r\n         bool hasWebEdge = !MathUtil.IsAlmostZero(webEdgeRadius);\r\n\r\n         double webSlope = IFCImportHandleUtil.GetOptionalScaledAngleAttribute(profileDef, \"WebSlope\", 0.0);\r\n         double webDeltaX = (depth / 2.0) * Math.Sin(webSlope);\r\n         XYZ webDir = new XYZ(-Math.Sin(webSlope), Math.Cos(webSlope), 0.0);\r\n\r\n         double flangeSlope = IFCImportHandleUtil.GetOptionalScaledAngleAttribute(profileDef, \"FlangeSlope\", 0.0);\r\n         double flangeDeltaY = (flangeWidth / 4.0) * Math.Sin(flangeSlope);\r\n         XYZ flangeDir = new XYZ(Math.Cos(flangeSlope), -Math.Sin(flangeSlope), 0.0);\r\n\r\n         XYZ[] tShapePoints = new XYZ[8] {\r\n                new XYZ(-flangeWidth/2.0, depth /2.0 + centerOptY, 0.0),\r\n                new XYZ(-flangeWidth/2.0, depth/2.0 + centerOptY - (flangeThickness-flangeDeltaY), 0.0),\r\n                new XYZ(0.0, 0.0, 0.0),   // calc below\r\n                new XYZ(-webThickness/2.0 + webDeltaX, -depth/2.0 + centerOptY, 0.0),\r\n                new XYZ(-(-webThickness/2.0 + webDeltaX), -depth/2.0 + centerOptY, 0.0),\r\n                new XYZ(0.0, 0.0, 0.0),   // calc below\r\n                new XYZ(flangeWidth/2.0, depth/2.0 + centerOptY - (flangeThickness-flangeDeltaY), 0.0),\r\n                new XYZ(flangeWidth/2.0, depth/2.0 + centerOptY, 0.0)\r\n            };\r\n\r\n         Line line1 = Line.CreateUnbound(tShapePoints[1], flangeDir);\r\n         Line line2 = Line.CreateUnbound(tShapePoints[3], webDir);\r\n\r\n         CurveIntersectResult intersectResult = line1.Intersect(line2, CurveIntersectResultOption.Detailed);\r\n         if ((null == intersectResult || intersectResult.Result != SetComparisonResult.Overlap) || (intersectResult.GetOverlaps()?.Count != 1))\r\n         {\r\n            Importer.TheLog.LogError(Id, \"Couldn't calculate profile point in IfcTShapeProfileDef.\", true);\r\n         }\r\n       \r\n         tShapePoints[2] = intersectResult.GetOverlaps()[0].Point;\r\n         tShapePoints[5] = new XYZ(-tShapePoints[2][0], tShapePoints[2][1], tShapePoints[2][2]);\r\n\r\n         // TODO: support fillets!\r\n         if (hasFillet)\r\n         {\r\n            Importer.TheLog.LogWarning(Id, \"Fillets not yet supported for IfcTShapeProfileDef, ignoring.\", false);\r\n         }\r\n         OuterCurve = CreateProfilePolyCurveLoop(tShapePoints);\r\n\r\n         if (OuterCurve == null)\r\n            Importer.TheLog.LogError(Id, \"Couldn't process IfcTShapeProfileDef, ignoring.\", true);\r\n      }\r\n\r\n      private void ProcessIFCUShapeProfileDef(IFCAnyHandle profileDef)\r\n      {\r\n         bool found = false;\r\n         double flangeWidth = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"FlangeWidth\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double depth = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"Depth\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double webThickness = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"WebThickness\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double flangeThickness = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"FlangeThickness\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double centerOptX = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"CentreOfGravityInX\", 0.0);\r\n\r\n         double filletRadius = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"FilletRadius\", 0.0);\r\n         bool hasFillet = !MathUtil.IsAlmostZero(filletRadius);\r\n\r\n         double edgeRadius = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"EdgeRadius\", 0.0);\r\n         bool hasEdgeRadius = !MathUtil.IsAlmostZero(edgeRadius);\r\n\r\n         double flangeSlope = IFCImportHandleUtil.GetOptionalScaledAngleAttribute(profileDef, \"FlangeSlope\", 0.0);\r\n         double flangeDirY = Math.Sin(flangeSlope);\r\n\r\n         // start lower left, CCW.\r\n         XYZ[] uShapePoints = new XYZ[8] {\r\n                new XYZ(-flangeWidth/2.0+centerOptX, -depth/2.0, 0.0),\r\n                new XYZ(flangeWidth/2.0+centerOptX, -depth/2.0, 0.0),\r\n                new XYZ(flangeWidth/2.0+centerOptX, -depth/2.0 + (flangeThickness-flangeDirY*(flangeWidth/2.0)), 0.0),\r\n                new XYZ(-flangeWidth/2.0+centerOptX+webThickness, -depth/2.0 + (flangeThickness+flangeDirY*(flangeWidth/2.0-webThickness)), 0.0),\r\n                new XYZ(-flangeWidth/2.0+centerOptX+webThickness, -(-depth/2.0 + (flangeThickness+flangeDirY*(flangeWidth/2.0-webThickness))), 0.0),\r\n                new XYZ(flangeWidth/2.0+centerOptX, -(-depth/2.0 + (flangeThickness-flangeDirY*(flangeWidth/2.0))), 0.0),\r\n                new XYZ(flangeWidth/2.0+centerOptX, depth/2.0, 0.0),\r\n                new XYZ(-flangeWidth/2.0+centerOptX, depth/2.0, 0.0),\r\n            };\r\n\r\n         // TODO: support fillets!\r\n         if (hasFillet)\r\n         {\r\n            Importer.TheLog.LogWarning(Id, \"Fillets not yet supported for IfcUShapeProfileDef, ignoring.\", false);\r\n         }\r\n         OuterCurve = CreateProfilePolyCurveLoop(uShapePoints);\r\n\r\n         if (OuterCurve == null)\r\n            Importer.TheLog.LogError(Id, \"Couldn't process IfcUShapeProfileDef, ignoring.\", true);\r\n      }\r\n\r\n      private void ProcessIFCZShapeProfileDef(IFCAnyHandle profileDef)\r\n      {\r\n         bool found = false;\r\n         double flangeWidth = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"FlangeWidth\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double depth = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"Depth\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double webThickness = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"WebThickness\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double flangeThickness = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(profileDef, \"FlangeThickness\", out found);\r\n         if (!found)\r\n            return;\r\n\r\n         double filletRadius = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"FilletRadius\", 0.0);\r\n         bool hasFillet = !MathUtil.IsAlmostZero(filletRadius);\r\n\r\n         double edgeRadius = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(profileDef, \"EdgeRadius\", 0.0);\r\n         bool hasEdgeRadius = !MathUtil.IsAlmostZero(edgeRadius);\r\n\r\n         XYZ[] zShapePoints = new XYZ[8] {\r\n                new XYZ(-webThickness/2.0, -depth/2.0, 0.0),\r\n                new XYZ(flangeWidth - webThickness/2.0, -depth/2.0, 0.0),\r\n                new XYZ(flangeWidth - webThickness/2.0, flangeThickness - depth/2.0, 0.0),\r\n                new XYZ(webThickness/2.0, flangeThickness - depth/2.0, 0.0),\r\n                new XYZ(webThickness/2.0, depth/2.0, 0.0),\r\n                new XYZ(webThickness/2.0 - flangeWidth, depth/2.0, 0.0),\r\n                new XYZ(webThickness/2.0 - flangeWidth, depth/2.0 - flangeThickness, 0.0),\r\n                new XYZ(-webThickness/2.0, depth/2.0 - flangeThickness, 0.0)\r\n            };\r\n\r\n         // need to flip fillet arcs.\r\n         XYZ[] zFilletPoints = new XYZ[4] {\r\n                new XYZ(zShapePoints[3][0] + filletRadius, zShapePoints[3][1], 0.0),\r\n                new XYZ(zShapePoints[3][0], zShapePoints[3][1] + filletRadius, 0.0),\r\n                new XYZ(zShapePoints[7][0] - filletRadius, zShapePoints[7][1], 0.0),\r\n                new XYZ(zShapePoints[7][0], zShapePoints[7][1] - filletRadius, 0.0)\r\n            };\r\n\r\n         XYZ[] zFilletCenters = new XYZ[2] {\r\n                new XYZ(zShapePoints[3][0] + filletRadius, zShapePoints[3][1] + filletRadius, 0.0),\r\n                new XYZ(zShapePoints[7][0] - filletRadius, zShapePoints[7][1] - filletRadius, 0.0),\r\n            };\r\n\r\n         double[][] filletRange = new double[2][] {\r\n                new double[2] { Math.PI, 3*Math.PI/2.0 },\r\n                new double[2] { 0.0, Math.PI/2.0 }\r\n            };\r\n\r\n         // do not flip edge arcs.\r\n         XYZ[] zEdgePoints = new XYZ[4] {\r\n                new XYZ(zShapePoints[2][0], zShapePoints[2][1] - edgeRadius, 0.0),\r\n                new XYZ(zShapePoints[2][0] - edgeRadius, zShapePoints[2][1], 0.0),\r\n                new XYZ(zShapePoints[6][0], zShapePoints[6][1] + edgeRadius, 0.0),\r\n                new XYZ(zShapePoints[6][0] + edgeRadius, zShapePoints[6][1], 0.0)\r\n            };\r\n\r\n         XYZ[] zEdgeCenters = new XYZ[2] {\r\n                new XYZ(zShapePoints[2][0] - edgeRadius, zShapePoints[2][1] - edgeRadius, 0.0),\r\n                new XYZ(zShapePoints[6][0] + edgeRadius, zShapePoints[6][1] + edgeRadius, 0.0)\r\n            };\r\n\r\n         double[][] edgeRange = new double[2][] {\r\n                new double[2] { 0.0, Math.PI/2.0 },\r\n                new double[2] { Math.PI, 3*Math.PI/2.0 }\r\n            };\r\n\r\n         OuterCurve = new CurveLoop();\r\n         IList<IIFCProfileSegment> segments = new List<IIFCProfileSegment>();\r\n         // We will process the Z shape profile is subsections, to try to fall back\r\n         // on simpler representations as possible.\r\n\r\n         segments.Add(new IFCProfileLineSegment(zShapePoints[0], zShapePoints[1]));\r\n\r\n         XYZ zNextStart = null;\r\n         if (hasEdgeRadius)\r\n         {\r\n            segments.Add(new IFCProfileLineSegment(zShapePoints[1], zEdgePoints[0]));\r\n            segments.Add(new IFCProfileXYArcSegment(zEdgeCenters[0], edgeRadius, edgeRange[0][0], edgeRange[0][1], false));\r\n            if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Couldn't process edge radius for IfcZShapeProfileDef, removing fillet.\", false);\r\n               hasEdgeRadius = false;\r\n            }\r\n            else\r\n            {\r\n               zNextStart = zEdgePoints[1];\r\n            }\r\n         }\r\n\r\n\r\n         if (!hasEdgeRadius)\r\n         {\r\n            segments.Add(new IFCProfileLineSegment(zShapePoints[1], zShapePoints[2]));\r\n            zNextStart = zShapePoints[2];\r\n            if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Couldn't process IfcZShapeProfileDef, ignoring.\", true);\r\n            }\r\n         }\r\n\r\n         if (hasFillet)\r\n         {\r\n            segments.Add(new IFCProfileLineSegment(zNextStart, zFilletPoints[0]));\r\n            segments.Add(new IFCProfileXYArcSegment(zFilletCenters[0], filletRadius, filletRange[0][0], filletRange[0][1], true));\r\n            if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Couldn't process fillet for IfcZShapeProfileDef, removing fillet.\", false);\r\n               hasFillet = false;\r\n            }\r\n            else\r\n            {\r\n               zNextStart = zFilletPoints[1];\r\n            }\r\n         }\r\n         \r\n         if (!hasFillet)\r\n         {\r\n            segments.Add(new IFCProfileLineSegment(zNextStart, zShapePoints[3]));\r\n            zNextStart = zShapePoints[3];\r\n            // No need to call AppendSegmentsToCurveLoop, will be handled below.\r\n         }\r\n\r\n         segments.Add(new IFCProfileLineSegment(zNextStart, zShapePoints[4]));\r\n         segments.Add(new IFCProfileLineSegment(zShapePoints[4], zShapePoints[5]));\r\n         if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n         {\r\n            Importer.TheLog.LogError(Id, \"Couldn't process IfcZShapeProfileDef, ignoring.\", true);\r\n         }\r\n\r\n         if (hasEdgeRadius)\r\n         {\r\n            segments.Add(new IFCProfileLineSegment(zShapePoints[5], zEdgePoints[2])); \r\n            segments.Add(new IFCProfileXYArcSegment(zEdgeCenters[1], edgeRadius, edgeRange[1][0], edgeRange[1][1], false));\r\n            if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Couldn't process edge radius for IfcZShapeProfileDef, removing fillet.\", false);\r\n               hasEdgeRadius = false;\r\n            }\r\n            else\r\n            {\r\n               zNextStart = zEdgePoints[3];\r\n            }\r\n         }\r\n\r\n         if (!hasEdgeRadius)\r\n         {\r\n            segments.Add(new IFCProfileLineSegment(zShapePoints[5], zShapePoints[6]));\r\n            zNextStart = zShapePoints[6];\r\n            if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Couldn't process IfcZShapeProfileDef, ignoring.\", true);\r\n            }\r\n         }\r\n\r\n         if (hasFillet)\r\n         {\r\n            segments.Add(new IFCProfileLineSegment(zNextStart, zFilletPoints[2]));\r\n            segments.Add(new IFCProfileXYArcSegment(zFilletCenters[1], filletRadius, filletRange[1][0], filletRange[1][1], true));\r\n            if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Couldn't process fillet for IfcZShapeProfileDef, removing fillet.\", false);\r\n               hasFillet = false;\r\n            }\r\n            else\r\n            {\r\n               zNextStart = zFilletPoints[3];\r\n            }\r\n         }\r\n         \r\n         if (!hasFillet)\r\n         {\r\n            segments.Add(new IFCProfileLineSegment(zNextStart, zShapePoints[7]));\r\n            zNextStart = zShapePoints[7];\r\n            // No need to call AppendSegmentsToCurveLoop, will be handled below.\r\n         }\r\n\r\n         segments.Add(new IFCProfileLineSegment(zNextStart, zShapePoints[0]));\r\n         if (!AppendSegmentsToCurveLoop(OuterCurve, segments))\r\n         {\r\n            Importer.TheLog.LogError(Id, \"Couldn't process IfcZShapeProfileDef, ignoring.\", true);\r\n         }\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle profileDef)\r\n      {\r\n         base.Process(profileDef);\r\n\r\n         IFCAnyHandle positionHnd = IFCImportHandleUtil.GetRequiredInstanceAttribute(profileDef, \"Position\", false);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(positionHnd))\r\n            Position = IFCLocation.ProcessIFCAxis2Placement(positionHnd);\r\n         else\r\n         {\r\n            Importer.TheLog.LogWarning(profileDef.StepId, \"\\\"Position\\\" attribute not specified in IfcParameterizedProfileDef, using origin.\", false);\r\n            Position = Transform.Identity;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(profileDef, IFCEntityType.IfcRectangleProfileDef))\r\n            ProcessIFCRectangleProfileDef(profileDef);\r\n         else if (IFCAnyHandleUtil.IsValidSubTypeOf(profileDef, IFCEntityType.IfcCircleProfileDef))\r\n            ProcessIFCCircleProfileDef(profileDef);\r\n         else if (IFCAnyHandleUtil.IsValidSubTypeOf(profileDef, IFCEntityType.IfcEllipseProfileDef))\r\n            ProcessIFCEllipseProfileDef(profileDef);\r\n         else if (IFCAnyHandleUtil.IsValidSubTypeOf(profileDef, IFCEntityType.IfcCShapeProfileDef))\r\n            ProcessIFCCShapeProfileDef(profileDef);\r\n         else if (IFCAnyHandleUtil.IsValidSubTypeOf(profileDef, IFCEntityType.IfcLShapeProfileDef))\r\n            ProcessIFCLShapeProfileDef(profileDef);\r\n         else if (IFCAnyHandleUtil.IsValidSubTypeOf(profileDef, IFCEntityType.IfcIShapeProfileDef))\r\n            ProcessIFCIShapeProfileDef(profileDef);\r\n         else if (IFCAnyHandleUtil.IsValidSubTypeOf(profileDef, IFCEntityType.IfcTShapeProfileDef))\r\n            ProcessIFCTShapeProfileDef(profileDef);\r\n         else if (IFCAnyHandleUtil.IsValidSubTypeOf(profileDef, IFCEntityType.IfcUShapeProfileDef))\r\n            ProcessIFCUShapeProfileDef(profileDef);\r\n         else if (IFCAnyHandleUtil.IsValidSubTypeOf(profileDef, IFCEntityType.IfcZShapeProfileDef))\r\n            ProcessIFCZShapeProfileDef(profileDef);\r\n         else\r\n         {\r\n            //LOG: ERROR: IfcParameterizedProfileDef of subtype {subtype} not supported.\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCParameterizedProfile()\r\n      {\r\n\r\n      }\r\n\r\n      protected IFCParameterizedProfile(IFCAnyHandle profileDef)\r\n      {\r\n         Process(profileDef);\r\n      }\r\n\r\n      public static IFCParameterizedProfile ProcessIFCParameterizedProfile(IFCAnyHandle ifcProfileDef)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcProfileDef))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcProfileDef);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity profileDef;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcProfileDef.StepId, out profileDef))\r\n            return (profileDef as IFCParameterizedProfile);\r\n\r\n         return new IFCParameterizedProfile(ifcProfileDef);\r\n      }\r\n\r\n   }\r\n\r\n   /// <summary>\r\n   /// Provides methods to process IfcProfileDef and its subclasses.\r\n   /// </summary>\r\n   public class IFCSimpleProfile : IFCProfileDef\r\n   {\r\n      /// <summary>\r\n      /// The location (origin and rotation) of the parametric profile.\r\n      /// </summary>\r\n      /// <remarks>This is only valid for IFCParameterizedProfile.  We place it here to be at the \r\n      /// same level as the CurveLoops, so that they can be transformed in a consisent matter.\r\n      /// </remarks>\r\n      public Transform Position { get; protected set; } = null;\r\n\r\n      private void ProcessIFCArbitraryOpenProfileDef(IFCAnyHandle profileDef)\r\n      {\r\n         IFCAnyHandle curveHnd = IFCAnyHandleUtil.GetInstanceAttribute(profileDef, \"Curve\");\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(curveHnd))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcArbitraryOpenProfileDef);\r\n            return;\r\n         }\r\n\r\n         IFCCurve profileIFCCurve = IFCCurve.ProcessIFCCurve(curveHnd);\r\n         CurveLoop profileCurveLoop = profileIFCCurve.GetTheCurveLoop();\r\n         if (profileCurveLoop == null)\r\n         {\r\n            Curve profileCurve = profileIFCCurve.Curve;\r\n            if (profileCurve != null)\r\n            {\r\n               profileCurveLoop = new CurveLoop();\r\n               profileCurveLoop.Append(profileCurve);\r\n            }\r\n         }\r\n\r\n\r\n         if ((profileCurveLoop != null) && IFCAnyHandleUtil.IsValidSubTypeOf(profileDef, IFCEntityType.IfcCenterLineProfileDef))\r\n         {\r\n            double? thickness = IFCAnyHandleUtil.GetDoubleAttribute(profileDef, \"Thickness\");\r\n            if (!thickness.HasValue)\r\n            {\r\n               //LOG: ERROR: IfcCenterLineProfileDef has no thickness defined.\r\n               return;\r\n            }\r\n\r\n            Plane plane = null;\r\n            try\r\n            {\r\n               plane = profileCurveLoop.GetPlane();\r\n            }\r\n            catch\r\n            {\r\n               //LOG: ERROR: Curve for IfcCenterLineProfileDef is non-planar.\r\n               return;\r\n            }\r\n\r\n            double thicknessVal = IFCUnitUtil.ScaleLength(thickness.Value);\r\n            profileCurveLoop = null;\r\n            try\r\n            {\r\n               profileCurveLoop = CurveLoop.CreateViaThicken(profileCurveLoop, thicknessVal, plane.Normal);\r\n            }\r\n            catch\r\n            {\r\n            }\r\n         }\r\n\r\n         if (profileCurveLoop != null)\r\n            OuterCurve = profileCurveLoop;\r\n         else\r\n         {\r\n            //LOG: ERROR: Invalid outer curve in IfcArbitraryOpenProfileDef.\r\n            return;\r\n         }\r\n      }\r\n\r\n      // In certain cases, Revit can't handle unbounded circles and ellipses.  Create a CurveLoop with the curve split into two segments.\r\n      private CurveLoop CreateCurveLoopFromUnboundedCyclicCurve(Curve innerCurve)\r\n      {\r\n         if (innerCurve == null)\r\n            return null;\r\n\r\n         if (!innerCurve.IsCyclic)\r\n            return null;\r\n\r\n         // Note that we don't disallow bound curves, as they could be bound but still closed.\r\n\r\n         // We don't know how to handle anything other than circles or ellipses with a period of 2PI.\r\n         double period = innerCurve.Period;\r\n         if (!MathUtil.IsAlmostEqual(period, Math.PI * 2.0))\r\n            return null;\r\n\r\n         double startParam = innerCurve.IsBound ? innerCurve.GetEndParameter(0) : 0.0;\r\n         double endParam = innerCurve.IsBound ? innerCurve.GetEndParameter(1) : period;\r\n\r\n         // Not a closed curve.\r\n         if (!MathUtil.IsAlmostEqual(endParam - startParam, period))\r\n            return null;\r\n\r\n         Curve firstCurve = innerCurve.Clone();\r\n         if (firstCurve == null)\r\n            return null;\r\n\r\n         Curve secondCurve = innerCurve.Clone();\r\n         if (secondCurve == null)\r\n            return null;\r\n\r\n         firstCurve.MakeBound(0, period / 2.0);\r\n         secondCurve.MakeBound(period / 2.0, period);\r\n\r\n         CurveLoop innerCurveLoop = new CurveLoop();\r\n         innerCurveLoop.Append(firstCurve);\r\n         innerCurveLoop.Append(secondCurve);\r\n         return innerCurveLoop;\r\n      }\r\n\r\n      private void ProcessIFCArbitraryClosedProfileDef(IFCAnyHandle profileDef)\r\n      {\r\n         IFCAnyHandle curveHnd = IFCImportHandleUtil.GetRequiredInstanceAttribute(profileDef, \"OuterCurve\", false);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(curveHnd))\r\n            return;\r\n\r\n         IFCCurve outerIFCCurve = IFCCurve.ProcessIFCCurve(curveHnd);\r\n         CurveLoop outerCurveLoop = outerIFCCurve.GetTheCurveLoop();\r\n\r\n         // We need to convert outerIFCCurve into a CurveLoop with bound curves.  This is handled below (with possible errors logged).\r\n         if (outerCurveLoop != null)\r\n            OuterCurve = outerCurveLoop;\r\n         else\r\n         {\r\n            Curve outerCurve = outerIFCCurve.Curve;\r\n            if (outerCurve == null)\r\n               Importer.TheLog.LogError(profileDef.StepId, \"Couldn't convert outer curve #\" + curveHnd.StepId + \" in IfcArbitraryClosedProfileDef.\", true);\r\n            else\r\n            {\r\n               OuterCurve = CreateCurveLoopFromUnboundedCyclicCurve(outerCurve);\r\n               if (OuterCurve == null)\r\n               {\r\n                  if (outerCurve.IsBound)\r\n                     Importer.TheLog.LogError(profileDef.StepId, \"Outer curve #\" + curveHnd.StepId + \" in IfcArbitraryClosedProfileDef isn't closed and can't be used.\", true);\r\n                  else\r\n                     Importer.TheLog.LogError(profileDef.StepId, \"Couldn't split unbound outer curve #\" + curveHnd.StepId + \" in IfcArbitraryClosedProfileDef.\", true);\r\n               }\r\n            }\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(profileDef, IFCEntityType.IfcArbitraryProfileDefWithVoids))\r\n         {\r\n            IList<IFCAnyHandle> innerCurveHnds = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(profileDef, \"InnerCurves\");\r\n            if (innerCurveHnds == null || innerCurveHnds.Count == 0)\r\n            {\r\n               Importer.TheLog.LogWarning(profileDef.StepId, \"IfcArbitraryProfileDefWithVoids has no voids.\", false);\r\n               return;\r\n            }\r\n\r\n            ISet<IFCAnyHandle> usedHandles = new HashSet<IFCAnyHandle>();\r\n            foreach (IFCAnyHandle innerCurveHnd in innerCurveHnds)\r\n            {\r\n               if (IFCAnyHandleUtil.IsNullOrHasNoValue(innerCurveHnd))\r\n               {\r\n                  Importer.TheLog.LogWarning(profileDef.StepId, \"Null or invalid inner curve handle in IfcArbitraryProfileDefWithVoids.\", false);\r\n                  continue;\r\n               }\r\n\r\n               if (usedHandles.Contains(innerCurveHnd))\r\n               {\r\n                  Importer.TheLog.LogWarning(profileDef.StepId, \"Duplicate void #\" + innerCurveHnd.StepId + \" in IfcArbitraryProfileDefWithVoids, ignoring.\", false);\r\n                  continue;\r\n               }\r\n\r\n               // If any inner is the same as the outer, throw an exception.\r\n               if (curveHnd.Equals(innerCurveHnd))\r\n               {\r\n                  Importer.TheLog.LogError(profileDef.StepId, \"Inner curve loop #\" + innerCurveHnd.StepId + \" same as outer curve loop in IfcArbitraryProfileDefWithVoids.\", true);\r\n                  continue;\r\n               }\r\n\r\n               usedHandles.Add(innerCurveHnd);\r\n\r\n               IFCCurve innerIFCCurve = IFCCurve.ProcessIFCCurve(innerCurveHnd);\r\n               CurveLoop innerCurveLoop = innerIFCCurve.GetTheCurveLoop();\r\n\r\n               // See if we have a closed curve instead.\r\n               if (innerCurveLoop == null)\r\n                  innerCurveLoop = CreateCurveLoopFromUnboundedCyclicCurve(innerIFCCurve.Curve);\r\n\r\n               if (innerCurveLoop == null)\r\n               {\r\n                  //LOG: WARNING: Null or invalid inner curve in IfcArbitraryProfileDefWithVoids.\r\n                  Importer.TheLog.LogWarning(profileDef.StepId, \"Invalid inner curve #\" + innerCurveHnd.StepId + \" in IfcArbitraryProfileDefWithVoids.\", false);\r\n                  continue;\r\n               }\r\n\r\n               InnerCurves.Add(innerCurveLoop);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCSimpleProfile()\r\n      {\r\n\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle profileDef)\r\n      {\r\n         base.Process(profileDef);\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(profileDef, IFCEntityType.IfcArbitraryOpenProfileDef))\r\n            ProcessIFCArbitraryOpenProfileDef(profileDef);\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(profileDef, IFCEntityType.IfcArbitraryClosedProfileDef))\r\n            ProcessIFCArbitraryClosedProfileDef(profileDef);\r\n      }\r\n\r\n      protected IFCSimpleProfile(IFCAnyHandle profileDef)\r\n      {\r\n         Process(profileDef);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Process an IFCAnyHandle corresponding to a simple profile.\r\n      /// </summary>\r\n      /// <param name=\"ifcProfileDef\"></param>\r\n      /// <returns>IFCSimpleProfile object.</returns>\r\n      public static IFCSimpleProfile ProcessIFCSimpleProfile(IFCAnyHandle ifcProfileDef)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcProfileDef))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcProfileDef);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity profileDef;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcProfileDef.StepId, out profileDef))\r\n            return (profileDef as IFCSimpleProfile);\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcProfileDef, IFCEntityType.IfcArbitraryOpenProfileDef) ||\r\n             (IFCAnyHandleUtil.IsValidSubTypeOf(ifcProfileDef, IFCEntityType.IfcArbitraryClosedProfileDef)))\r\n            return new IFCSimpleProfile(ifcProfileDef);\r\n\r\n         // IFC2x files don't have IfcParameterizedProfileDef, so we won't check the type.  If profileDef is the wrong entity type, it will fail in\r\n         // ProcessIFCParameterizedProfileDef.\r\n         return IFCParameterizedProfile.ProcessIFCParameterizedProfile(ifcProfileDef);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the one outer curve loop, iff there is only one.\r\n      /// </summary>\r\n      /// <returns>The one outer curve loop, or null if there is not exactly 1.</returns>\r\n      public CurveLoop GetTheOuterCurveLoop() {  return OuterCurve; }\r\n\r\n      /// <summary>\r\n      /// Get the outer curve loop.\r\n      /// </summary>\r\n      protected CurveLoop OuterCurve { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Get the list of inner curve loops.\r\n      /// </summary>\r\n      public IList<CurveLoop> InnerCurves { get; } = new List<CurveLoop>();\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCProject.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcProject.\r\n   /// </summary>\r\n   /// <remarks>In IFC4, IfcProject inherits from IfcContext, which in turn inherits from IfcObjectDefinition.\r\n   /// In IFC2x3, IfcProject inherits from IfcObject, which in turn inherits from IfcObjectDefintion.\r\n   /// In addition, in IFC4, all of the IfcProject specific attributes are at the IfcContext level.\r\n   /// For now, we will:\r\n   /// 1. Keep IfcProject inheriting from IfcObject, and make IfcObject aware that some attributes are not appropriate for IfcProject.\r\n   /// 2. Keep IfcContext attributes at the IfcProject level.\r\n   /// Note also that \"LongName\" and \"Phase\" are not yet supported, and that the content of \"RepresentationContexts\" is stored directly\r\n   /// in IfcProject.</remarks>\r\n   public class IFCProject : IFCObject\r\n   {\r\n      private UV m_TrueNorthDirection = null;\r\n\r\n      private Transform m_WorldCoordinateSystem = null;\r\n\r\n      private ISet<IFCUnit> m_UnitsInContext = null;\r\n\r\n      private IDictionary<string, IFCGridAxis> m_GridAxes = null;\r\n\r\n      /// <summary>\r\n      /// The true north direction of the project.\r\n      /// </summary>\r\n      public UV TrueNorthDirection\r\n      {\r\n         get { return m_TrueNorthDirection; }\r\n         protected set { m_TrueNorthDirection = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The true north direction of the project.\r\n      /// </summary>\r\n      /// <remarks>Strictly speaking, the WCS is associated with a GeometricRepresentationContext,\r\n      /// and each individual geometry may point to a different one.  In practice, however, we only have\r\n      /// one, a Model one, and it is generally the identity transform, with or without an offset.\r\n      /// The reason we only want to apply this once, at a top level, is that we can get into trouble\r\n      /// with mapped representations - if the representation containing the mapped item and the\r\n      /// representation map both apply the WCS, the object may be transformed twice.</remarks>\r\n      public Transform WorldCoordinateSystem\r\n      {\r\n         get { return m_WorldCoordinateSystem; }\r\n         protected set { m_WorldCoordinateSystem = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The units in the project.\r\n      /// </summary>\r\n      public ISet<IFCUnit> UnitsInContext\r\n      {\r\n         get { return m_UnitsInContext; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCProject from the IfcProject handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcProject\">The IfcProject handle.</param>\r\n      protected IFCProject(IFCAnyHandle ifcProject)\r\n      {\r\n         IFCImportFile.TheFile.IFCProject = this;\r\n         Process(ifcProject);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns true if sub-elements should be grouped; false otherwise.\r\n      /// </summary>\r\n      public override bool GroupSubElements()\r\n      {\r\n         return false;\r\n      }\r\n\r\n      private void UpdateProjectLocation(ProjectLocation projectLocation, XYZ geoRef, double trueNorth)\r\n      {\r\n         ProjectPosition originalPosition = projectLocation?.GetProjectPosition(XYZ.Zero);\r\n         if (originalPosition == null)\r\n         {\r\n            return;\r\n         }\r\n\r\n         // If we are using legacy import, we might be doing a re-link where the position changed.\r\n         // If not, then we always defer to the ATF portion.\r\n         XYZ originalRef = Importer.TheOptions.HybridImportOptions != null ?\r\n            new XYZ(originalPosition.EastWest, originalPosition.NorthSouth, originalPosition.Elevation) :\r\n            XYZ.Zero;\r\n         XYZ refToUse = originalRef.IsZeroLength() ? geoRef : originalRef;\r\n\r\n         ProjectPosition projectPosition = new ProjectPosition(refToUse.X, refToUse.Y, refToUse.Z, trueNorth);\r\n         projectLocation.SetProjectPosition(XYZ.Zero, projectPosition);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcProject attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcProjectHandle\">The IfcProject handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcProjectHandle)\r\n      {\r\n         IFCAnyHandle unitsInContext = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcProjectHandle, \"UnitsInContext\", false);\r\n\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(unitsInContext))\r\n         {\r\n            IList<IFCAnyHandle> units = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(unitsInContext, \"Units\");\r\n\r\n            if (units != null)\r\n            {\r\n               m_UnitsInContext = new HashSet<IFCUnit>();\r\n\r\n               foreach (IFCAnyHandle unit in units)\r\n               {\r\n                  IFCUnit ifcUnit = IFCImportFile.TheFile.IFCUnits.ProcessIFCProjectUnit(unit);\r\n                  if (!IFCUnit.IsNullOrInvalid(ifcUnit))\r\n                     m_UnitsInContext.Add(ifcUnit);\r\n               }\r\n            }\r\n            else\r\n            {\r\n               Importer.TheLog.LogMissingRequiredAttributeError(unitsInContext, \"Units\", false);\r\n            }\r\n         }\r\n\r\n         var application = IFCImportFile.TheFile.Document.Application;\r\n         var projectUnits = IFCImportFile.TheFile.IFCUnits.GetIFCProjectUnit(SpecTypeId.Length);\r\n\r\n         IFCImportFile.TheFile.VertexTolerance = application.VertexTolerance;\r\n         IFCImportFile.TheFile.ShortCurveTolerance = application.ShortCurveTolerance;\r\n         Importer.TheProcessor.PostProcessProject(projectUnits?.ScaleFactor, projectUnits?.Unit);\r\n\r\n         // We need to process the units before we process the rest of the file, since we will scale values as we go along.\r\n         base.Process(ifcProjectHandle);\r\n\r\n         // process true north - take the first valid representation context that has a true north value.\r\n         HashSet<IFCAnyHandle> repContexts = IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcProjectHandle, \"RepresentationContexts\");\r\n\r\n         bool hasMapConv = false;\r\n         XYZ geoRef = XYZ.Zero;\r\n         string geoRefName = null;\r\n         double trueNorth = 0.0;\r\n         if (repContexts != null)\r\n         {\r\n            IFCAnyHandle mapConv = null;\r\n\r\n            foreach (IFCAnyHandle geomRepContextHandle in repContexts)\r\n            {\r\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(geomRepContextHandle) &&\r\n                   IFCAnyHandleUtil.IsSubTypeOf(geomRepContextHandle, IFCEntityType.IfcGeometricRepresentationContext))\r\n               {\r\n                  IFCRepresentationContext context = IFCRepresentationContext.ProcessIFCRepresentationContext(geomRepContextHandle);\r\n                  if (TrueNorthDirection == null && context.TrueNorth != null)\r\n                  {\r\n                     // TODO: Verify that we don't have inconsistent true norths.  If we do, warn.\r\n                     TrueNorthDirection = new UV(context.TrueNorth.X, context.TrueNorth.Y);\r\n                  }\r\n\r\n                  if (WorldCoordinateSystem == null && context.WorldCoordinateSystem != null && !context.WorldCoordinateSystem.IsIdentity)\r\n                  {\r\n                     WorldCoordinateSystem = context.WorldCoordinateSystem;\r\n                  }\r\n\r\n                  // Process Map Conversion if any\r\n                  HashSet<IFCAnyHandle> coordOperation = IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(geomRepContextHandle, \"HasCoordinateOperation\");\r\n                  if (coordOperation != null)\r\n                  {\r\n                     if (coordOperation.Count > 0)\r\n                     {\r\n                        if (IFCAnyHandleUtil.IsSubTypeOf(coordOperation.FirstOrDefault(), IFCEntityType.IfcMapConversion))\r\n                        {\r\n                           hasMapConv = true;\r\n                           mapConv = coordOperation.FirstOrDefault();\r\n                           bool found = false;\r\n                           double eastings = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(mapConv, \"Eastings\", out found);\r\n                           if (!found)\r\n                              eastings = 0.0;\r\n                           double northings = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(mapConv, \"Northings\", out found);\r\n                           if (!found)\r\n                              northings = 0.0;\r\n                           double orthogonalHeight = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(mapConv, \"OrthogonalHeight\", out found);\r\n                           if (!found)\r\n                              orthogonalHeight = 0.0;\r\n                           double xAxisAbs = IFCImportHandleUtil.GetOptionalRealAttribute(mapConv, \"XAxisAbscissa\", 1.0);\r\n                           double xAxisOrd = IFCImportHandleUtil.GetOptionalRealAttribute(mapConv, \"XAxisOrdinate\", 0.0);\r\n                           trueNorth = Math.Atan2(xAxisOrd, xAxisAbs);\r\n                           //angleToNorth = -((xAxisAngle > -Math.PI / 2.0) ? xAxisAngle - Math.PI / 2.0 : xAxisAngle + Math.PI * 1.5);\r\n                           double scale = IFCImportHandleUtil.GetOptionalRealAttribute(mapConv, \"Scale\", 1.0);\r\n                           geoRef = new XYZ(scale * eastings, scale * northings, scale * orthogonalHeight);\r\n\r\n                           // Process the IfcProjectedCRS\r\n                           IFCAnyHandle projCRS = IFCAnyHandleUtil.GetInstanceAttribute(mapConv, \"TargetCRS\");\r\n                           if (projCRS != null && IFCAnyHandleUtil.IsSubTypeOf(projCRS, IFCEntityType.IfcProjectedCRS))\r\n                           {\r\n                              geoRefName = IFCImportHandleUtil.GetRequiredStringAttribute(projCRS, \"Name\", false);\r\n                              string desc = IFCImportHandleUtil.GetOptionalStringAttribute(projCRS, \"Description\", null);\r\n                              string geodeticDatum = IFCImportHandleUtil.GetOptionalStringAttribute(projCRS, \"GeodeticDatum\", null);\r\n                              string verticalDatum = IFCImportHandleUtil.GetOptionalStringAttribute(projCRS, \"VerticalDatum\", null);\r\n                              string mapProj = IFCImportHandleUtil.GetOptionalStringAttribute(projCRS, \"MapProjection\", null);\r\n                              string mapZone = IFCImportHandleUtil.GetOptionalStringAttribute(projCRS, \"MapZone\", null);\r\n                              IFCAnyHandle mapUnit = IFCImportHandleUtil.GetOptionalInstanceAttribute(projCRS, \"MapUnit\");\r\n\r\n                              Document doc = IFCImportFile.TheFile.Document;\r\n                              ProjectInfo projectInfo = doc.ProjectInformation;\r\n\r\n                              // We add this here because we want to make sure that external processors (e.g., Navisworks)\r\n                              // get a chance to add a container for the parameters that get added below.  In general,\r\n                              // we should probably augment Processor.AddParameter to ensure that CreateOrUpdateElement\r\n                              // is called before anything is attempted to be added.  This is a special case, though,\r\n                              // as in Revit we don't actually create an element for the IfcProject.\r\n                              if (!Importer.IsDefaultProcessor())\r\n                              {\r\n                                 Importer.TheProcessor.CreateOrUpdateElement(Id, GlobalId, EntityType.ToString(), GetCategoryId(doc).Value, null);\r\n                              }\r\n\r\n                              Category category = IFCPropertySet.GetCategoryForParameterIfValid(projectInfo, Id);\r\n\r\n                              using (ParameterSetter setter = new ParameterSetter())\r\n                              {\r\n                                 ParametersToSet parametersToSet = setter.ParametersToSet;\r\n                                 parametersToSet.AddStringParameter(doc, projectInfo, category, this, \"IfcProjectedCRS.Name\", geoRefName, Id);\r\n                                 if (!string.IsNullOrEmpty(desc))\r\n                                    parametersToSet.AddStringParameter(doc, projectInfo, category, this, \"IfcProjectedCRS.Description\", desc, Id);\r\n                                 if (!string.IsNullOrEmpty(geodeticDatum))\r\n                                    parametersToSet.AddStringParameter(doc, projectInfo, category, this, \"IfcProjectedCRS.GeodeticDatum\", geodeticDatum, Id);\r\n                                 if (!string.IsNullOrEmpty(verticalDatum))\r\n                                    parametersToSet.AddStringParameter(doc, projectInfo, category, this, \"IfcProjectedCRS.VerticalDatum\", verticalDatum, Id);\r\n                                 if (!string.IsNullOrEmpty(mapProj))\r\n                                    parametersToSet.AddStringParameter(doc, projectInfo, category, this, \"IfcProjectedCRS.MapProjection\", mapProj, Id);\r\n                                 if (!string.IsNullOrEmpty(mapZone))\r\n                                    parametersToSet.AddStringParameter(doc, projectInfo, category, this, \"IfcProjectedCRS.MapZone\", mapZone, Id);\r\n\r\n                                 if (!IFCAnyHandleUtil.IsNullOrHasNoValue(mapUnit))\r\n                                 {\r\n                                    IFCUnit mapUnitIfc = IFCUnit.ProcessIFCUnit(mapUnit);\r\n                                    string unitStr = UnitUtils.GetTypeCatalogStringForUnit(mapUnitIfc.Unit);\r\n                                    parametersToSet.AddStringParameter(doc, projectInfo, category, this, \"IfcProjectedCRS.MapUnit\", unitStr, Id);\r\n                                    double convFactor = UnitUtils.Convert(1.0, mapUnitIfc.Unit, IFCImportFile.TheFile.IFCUnits.GetIFCProjectUnit(SpecTypeId.Length).Unit);\r\n                                    eastings = convFactor * eastings;\r\n                                    northings = convFactor * northings;\r\n                                    orthogonalHeight = convFactor * orthogonalHeight;\r\n                                    geoRef = new XYZ(eastings, northings, orthogonalHeight);\r\n                                 }\r\n                              }\r\n                           }\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n\r\n            ProjectLocation projectLocation = IFCImportFile.TheFile.Document.ActiveProjectLocation;\r\n            if (projectLocation != null)\r\n            {\r\n               if (hasMapConv)\r\n               {\r\n                  UpdateProjectLocation(projectLocation, geoRef, trueNorth);\r\n\r\n                  if (!string.IsNullOrEmpty(geoRefName))\r\n                  {\r\n                     try\r\n                     {\r\n                        IFCImportFile.TheFile.Document.SiteLocation.SetGeoCoordinateSystem(geoRefName);\r\n                     }\r\n                     catch\r\n                     {\r\n                        Importer.TheLog.LogError(mapConv?.Id ?? -1, geoRefName + \" is not a recognized coordinate system.\", false);\r\n                     }\r\n                  }\r\n               }\r\n               else\r\n               {\r\n                  // Set initial project location based on the information above.\r\n                  // This may be further modified by the site.\r\n                  trueNorth = 0.0;\r\n                  if (TrueNorthDirection != null)\r\n                  {\r\n                     trueNorth = -Math.Atan2(-TrueNorthDirection.U, TrueNorthDirection.V);\r\n                  }\r\n\r\n                  // TODO: Extend this to work properly if the world coordinate system\r\n                  // isn't a simple translation.\r\n                  XYZ origin = XYZ.Zero;\r\n                  if (WorldCoordinateSystem != null)\r\n                  {\r\n                     geoRef = WorldCoordinateSystem.Origin;\r\n                     double angleRot = Math.Atan2(WorldCoordinateSystem.BasisX.Y, WorldCoordinateSystem.BasisX.X);\r\n\r\n                     // If it is translation only, or if the WCS rotation is equal to trueNorth, we assume they are the same\r\n                     if (WorldCoordinateSystem.IsTranslation\r\n                        || MathUtil.IsAlmostEqual(angleRot, trueNorth))\r\n                     {\r\n                        WorldCoordinateSystem = null;\r\n                     }\r\n                     else\r\n                     {\r\n                        // If the trueNorth is not set (=0), set the trueNorth by the rotation of the WCS, otherwise add the angle                       \r\n                        if (MathUtil.IsAlmostZero(trueNorth))\r\n                           trueNorth = angleRot;\r\n                        else\r\n                           trueNorth += angleRot;\r\n\r\n                        WorldCoordinateSystem = null;\r\n                     }\r\n                  }\r\n\r\n                  UpdateProjectLocation(projectLocation, geoRef, trueNorth);\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The list of grid axes in this IFCProject, sorted by Revit name.\r\n      /// </summary>\r\n      public IDictionary<string, IFCGridAxis> GridAxes\r\n      {\r\n         get\r\n         {\r\n            if (m_GridAxes == null)\r\n               m_GridAxes = new Dictionary<string, IFCGridAxis>();\r\n            return m_GridAxes;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Allow for override of IfcObjectDefinition shared parameter names.\r\n      /// </summary>\r\n      /// <param name=\"name\">The enum corresponding of the shared parameter.</param>\r\n      /// <param name=\"isType\">True if the shared parameter is a type parameter.</param>\r\n      /// <returns>The name appropriate for this IfcObjectDefinition.</returns>\r\n      public override string GetSharedParameterName(IFCSharedParameters name, bool isType)\r\n      {\r\n         if (!isType)\r\n         {\r\n            switch (name)\r\n            {\r\n               case IFCSharedParameters.IfcName:\r\n                  return \"IfcProject Name\";\r\n               case IFCSharedParameters.IfcDescription:\r\n                  return \"IfcProject Description\";\r\n            }\r\n         }\r\n\r\n         return base.GetSharedParameterName(name, isType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the element ids created for this entity, for summary logging.\r\n      /// </summary>\r\n      /// <param name=\"createdElementIds\">The creation list.</param>\r\n      /// <remarks>May contain InvalidElementId; the caller is expected to remove it.</remarks>\r\n      public override void GetCreatedElementIds(ISet<ElementId> createdElementIds)\r\n      {\r\n         // If we used ProjectInformation, don't report that.\r\n         if (CreatedElementId != ElementId.InvalidElementId && CreatedElementId != Importer.TheCache.ProjectInformationId)\r\n         {\r\n            createdElementIds.Add(CreatedElementId);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit elements based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      protected override void Create(Document doc)\r\n      {\r\n         if (UnitsInContext != null)\r\n         {\r\n            Units documentUnits = new Units(doc.DisplayUnitSystem == DisplayUnit.METRIC ?\r\n                UnitSystem.Metric : UnitSystem.Imperial);\r\n\r\n            foreach (IFCUnit unit in UnitsInContext)\r\n            {\r\n               if (!IFCUnit.IsNullOrInvalid(unit))\r\n               {\r\n                  try\r\n                  {\r\n                     FormatOptions formatOptions = new FormatOptions(unit.Unit);\r\n                     formatOptions.SetSymbolTypeId(unit.Symbol);\r\n                     documentUnits.SetFormatOptions(unit.Spec, formatOptions);\r\n                  }\r\n                  catch (Exception ex)\r\n                  {\r\n                     Importer.TheLog.LogError(unit.Id, ex.Message, false);\r\n                  }\r\n               }\r\n            }\r\n            doc.SetUnits(documentUnits);\r\n         }\r\n\r\n         // We will randomize unused grid names so that they don't conflict with new entries with the same name.\r\n         // This is only for relink.\r\n         foreach (ElementId gridId in Importer.TheCache.GridNameToElementMap.Values)\r\n         {\r\n            // Temporary workaround if Grid Element is already updated (relinked) by HybridElement.\r\n            if (Importer.TheHybridInfo?.HybridElements?.Contains(gridId) ?? false)\r\n            {\r\n               continue;\r\n            }\r\n\r\n            Grid grid = doc.GetElement(gridId) as Grid;\r\n            if (grid == null)\r\n               continue;\r\n\r\n            // Note that new Guid() is useless - it creates a GUID of all 0s.\r\n            grid.Name = Guid.NewGuid().ToString();\r\n         }\r\n\r\n         // Pre-process sites to orient them properly.\r\n         IList<IFCSite> sites = new List<IFCSite>();\r\n         foreach (IFCObjectDefinition objectDefinition in ComposedObjectDefinitions)\r\n         {\r\n            if (objectDefinition is IFCSite)\r\n            {\r\n               sites.Add(objectDefinition as IFCSite);\r\n            }\r\n         }\r\n         IFCSite.ProcessSiteLocations(doc, sites);\r\n         IFCSite.FindDefaultSite(sites);\r\n               \r\n         base.Create(doc);\r\n\r\n         // IfcProject usually won't create an element, as it contains no geometry.\r\n         // If it doesn't, use the ProjectInfo element in the document to store its parameters.\r\n         if (CreatedElementId == ElementId.InvalidElementId)\r\n            CreatedElementId = Importer.TheCache.ProjectInformationId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcProject object.\r\n      /// </summary>\r\n      /// <param name=\"ifcProject\">The IfcProject handle.</param>\r\n      /// <returns>The IFCProject object.</returns>\r\n      public static IFCProject ProcessIFCProject(IFCAnyHandle ifcProject)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcProject))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcProject);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity project;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcProject.StepId, out project))\r\n            return (project as IFCProject);\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcProject, IFCEntityType.IfcProject))\r\n         {\r\n            return new IFCProject(ifcProject);\r\n         }\r\n\r\n         //LOG: ERROR: Not processed project.\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCProperty.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Utility;\r\nusing Revit.IFC.Import.Core;\r\nusing System.Runtime.Remoting;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcProperty.\r\n   /// </summary>\r\n   public abstract class IFCProperty : IFCEntity\r\n   {\r\n      /// <summary>\r\n      /// The name.\r\n      /// </summary>\r\n      public string Name { get; protected set; }\r\n\r\n      protected IFCProperty()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the property value as a string, for Set().\r\n      /// </summary>\r\n      /// <returns>The property value as a string.</returns>\r\n      public abstract string PropertyValueAsString();\r\n\r\n      /// <summary>\r\n      /// Processes an IFC property.\r\n      /// </summary>\r\n      /// <param name=\"ifcProperty\">The property.</param>\r\n      /// <returns>The IFCProperty object.</returns>\r\n      public static IFCProperty ProcessIFCProperty(IFCAnyHandle ifcProperty)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcProperty))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcProperty);\r\n            return null;\r\n         }\r\n\r\n         try\r\n         {\r\n            IFCEntity property;\r\n            if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcProperty.StepId, out property))\r\n               return (property as IFCProperty);\r\n\r\n            if (IFCAnyHandleUtil.IsSubTypeOf(ifcProperty, IFCEntityType.IfcComplexProperty))\r\n               return IFCComplexProperty.ProcessIFCComplexProperty(ifcProperty);\r\n\r\n            if (IFCAnyHandleUtil.IsSubTypeOf(ifcProperty, IFCEntityType.IfcSimpleProperty))\r\n               return IFCSimpleProperty.ProcessIFCSimpleProperty(ifcProperty);\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            Importer.TheLog.LogError(ifcProperty.StepId, ex.Message, false);\r\n            return null;\r\n         }\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcProperty, IFCEntityType.IfcProperty, false);\r\n         return null;\r\n      }\r\n\r\n      private bool IsValidParameterType(Parameter parameter, IFCDataPrimitiveType dataType)\r\n      {\r\n         switch (parameter.StorageType)\r\n         {\r\n            case StorageType.String:\r\n               if (dataType == IFCDataPrimitiveType.String ||\r\n                   dataType == IFCDataPrimitiveType.Enumeration ||\r\n                   dataType == IFCDataPrimitiveType.Binary ||\r\n                   dataType == IFCDataPrimitiveType.Double ||\r\n                   dataType == IFCDataPrimitiveType.Integer ||\r\n                   dataType == IFCDataPrimitiveType.Boolean ||\r\n                   dataType == IFCDataPrimitiveType.Logical)\r\n                  return true;\r\n               break;\r\n            case StorageType.Integer:\r\n               if (dataType == IFCDataPrimitiveType.Integer ||\r\n                   dataType == IFCDataPrimitiveType.Boolean ||\r\n                   dataType == IFCDataPrimitiveType.Logical)\r\n                  return true;\r\n               break;\r\n            case StorageType.Double:\r\n               if (dataType == IFCDataPrimitiveType.Double ||\r\n                   dataType == IFCDataPrimitiveType.Integer ||\r\n                   dataType == IFCDataPrimitiveType.Boolean ||\r\n                   dataType == IFCDataPrimitiveType.Logical)\r\n                  return true;\r\n               break;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      private bool AddStringTypeParameter(bool multilineTableProperty, Document doc, Element element, Category category,\r\n         IFCObjectDefinition objDef, string parameterName, string stringValueToUse, ParametersToSet parametersToSet)\r\n      {\r\n         if (multilineTableProperty)\r\n         {\r\n            return parametersToSet.AddParameterMultilineString(doc, element, category, objDef, parameterName,\r\n               stringValueToUse, Id);\r\n         }\r\n\r\n         return parametersToSet.AddStringParameter(doc, element, category, objDef, parameterName, stringValueToUse, Id);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a property for a given element.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element being created.</param>\r\n      /// <param name=\"category\">The category of the element being created.</param>\r\n      /// <param name=\"parameterMap\">The parameters of the element.  Cached for performance.</param>\r\n      /// <param name=\"propertyFullName\">The name of the containing property set.</param>\r\n      /// <param name=\"createdParameters\">The names of the created parameters.</param>\r\n      public void Create(Document doc, Element element, Category category, IFCObjectDefinition objDef, \r\n         IFCParameterSetByGroup parameterGroupMap, string propertyFullName, ISet<string> createdParameters,\r\n         ParametersToSet parametersToSet)\r\n      {\r\n         // Try to get the single value from the property.  If we can't get a single value, get it as a string.\r\n         IFCPropertyValue propertyValueToUse = null;\r\n         bool multilineTableProperty = (this is IFCPropertyTableValue);\r\n\r\n         if ((this is IFCSimpleProperty) && !multilineTableProperty)\r\n         {\r\n            IFCSimpleProperty simpleProperty = this as IFCSimpleProperty;\r\n            IList<IFCPropertyValue> propertyValues = simpleProperty.IFCPropertyValues;\r\n            if (propertyValues != null && propertyValues.Count == 1)\r\n            {\r\n               // If the value isn't set, skip it.  We won't warn.\r\n               if (!propertyValues[0].HasValue())\r\n                  return;\r\n\r\n               propertyValueToUse = propertyValues[0];\r\n            }\r\n         }\r\n\r\n         IFCDataPrimitiveType dataType = IFCDataPrimitiveType.Unknown;\r\n         ForgeTypeId specTypeId = new ForgeTypeId();\r\n         ForgeTypeId unitsTypeId = null;\r\n\r\n         bool? boolValueToUse = null;\r\n         IFCLogical? logicalValueToUse = null;\r\n         int? intValueToUse = null;\r\n         double? doubleValueToUse = null;\r\n         ElementId elementIdValueToUse = null;\r\n         string stringValueToUse = null;\r\n\r\n         if (propertyValueToUse == null)\r\n         {\r\n            string propertyValueAsString = PropertyValueAsString();\r\n            if (propertyValueAsString == null)\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Couldn't create parameter: \" + Name, false);\r\n               return;\r\n            }\r\n\r\n            dataType = IFCDataPrimitiveType.String;\r\n            stringValueToUse = propertyValueAsString;\r\n         }\r\n         else\r\n         {\r\n            dataType = propertyValueToUse.Value.PrimitiveType;\r\n            if (dataType == IFCDataPrimitiveType.Instance)\r\n            {\r\n               IFCAnyHandle propertyValueHandle = propertyValueToUse.Value.AsInstance();\r\n               ElementId propertyValueAsId = IFCObjectReferenceSelect.ToElementId(propertyValueHandle);\r\n               if (propertyValueAsId != ElementId.InvalidElementId)\r\n               {\r\n                  elementIdValueToUse = propertyValueAsId;\r\n               }\r\n               else\r\n               {\r\n                  stringValueToUse = IFCObjectReferenceSelect.ToString(propertyValueHandle);\r\n                  dataType = IFCDataPrimitiveType.String;\r\n               }\r\n            }\r\n            else\r\n            {\r\n               switch (dataType)\r\n               {\r\n                  case IFCDataPrimitiveType.String:\r\n                  case IFCDataPrimitiveType.Enumeration:\r\n                  case IFCDataPrimitiveType.Binary:\r\n                     stringValueToUse = propertyValueToUse.AsString();\r\n                     break;\r\n                  case IFCDataPrimitiveType.Integer:\r\n                     intValueToUse = propertyValueToUse.AsInteger();\r\n                     break;\r\n                  case IFCDataPrimitiveType.Boolean:\r\n                     boolValueToUse = propertyValueToUse.AsBoolean();\r\n                     break;\r\n                  case IFCDataPrimitiveType.Logical:\r\n                     logicalValueToUse = propertyValueToUse.AsLogical();\r\n                     break;\r\n                  case IFCDataPrimitiveType.Number:\r\n                     doubleValueToUse = propertyValueToUse.AsNumber();\r\n                     specTypeId = IFCDataUtil.GetUnitTypeFromData(propertyValueToUse.Value, SpecTypeId.Number);\r\n                     break;\r\n                  case IFCDataPrimitiveType.Double:\r\n                     if (propertyValueToUse.IFCUnit != null)\r\n                     {\r\n                        specTypeId = propertyValueToUse.IFCUnit.Spec;\r\n                        unitsTypeId = propertyValueToUse.IFCUnit.Unit;\r\n                     }\r\n                     else\r\n                     {\r\n                        specTypeId = IFCDataUtil.GetUnitTypeFromData(propertyValueToUse.Value, SpecTypeId.Number);\r\n                     }\r\n\r\n                     doubleValueToUse = Importer.TheProcessor.ScaleValues ?\r\n                        propertyValueToUse.AsScaledDouble() :\r\n                        propertyValueToUse.AsUnscaledDouble();\r\n                     break;\r\n                  default:\r\n                     Importer.TheLog.LogError(Id, \"Unknown value type for parameter: \" + Name, false);\r\n                     return;\r\n               }\r\n            }\r\n         }\r\n\r\n         if (stringValueToUse != null && stringValueToUse.Length == 0)\r\n            return;\r\n\r\n         Parameter existingParameter = null;\r\n\r\n\r\n         string parameterName = propertyFullName;\r\n\r\n         if (parameterGroupMap.TryFindParameter(parameterName, out existingParameter))\r\n         {\r\n            if ((existingParameter != null) && !IsValidParameterType(existingParameter, dataType))\r\n               existingParameter = null;\r\n         }\r\n\r\n         if (existingParameter == null)\r\n         {\r\n            int parameterNameCount = 2;\r\n            while (createdParameters.Contains(parameterName))\r\n            {\r\n               parameterName = propertyFullName + \" \" + parameterNameCount;\r\n               parameterNameCount++;\r\n            }\r\n            if (parameterNameCount > 2)\r\n               Importer.TheLog.LogWarning(Id, \"Renamed parameter: \" + propertyFullName + \" to: \" + parameterName, false);\r\n\r\n            bool created = false;\r\n            switch (dataType)\r\n            {\r\n               case IFCDataPrimitiveType.String:\r\n               case IFCDataPrimitiveType.Enumeration:\r\n               case IFCDataPrimitiveType.Binary:\r\n                  created = AddStringTypeParameter(multilineTableProperty, doc, element, category,\r\n                     objDef, parameterName, stringValueToUse, parametersToSet);\r\n                  break;\r\n               case IFCDataPrimitiveType.Integer:\r\n                  created = parametersToSet.AddParameterInt(doc, element, category, objDef, parameterName, \r\n                     intValueToUse.Value, Id);\r\n                  break;\r\n               case IFCDataPrimitiveType.Boolean:\r\n                  created = parametersToSet.AddParameterBoolean(doc, element, category, objDef, parameterName, boolValueToUse.Value, Id);\r\n                  break;\r\n               case IFCDataPrimitiveType.Logical:\r\n                  if (logicalValueToUse != IFCLogical.Unknown)\r\n                     created = parametersToSet.AddParameterBoolean(doc, element, category, objDef, parameterName, (logicalValueToUse == IFCLogical.True), Id);\r\n                  break;\r\n               case IFCDataPrimitiveType.Number:\r\n               case IFCDataPrimitiveType.Double:\r\n                  created = parametersToSet.AddParameterDouble(doc, element, category, objDef, parameterName, specTypeId, unitsTypeId, doubleValueToUse.Value, Id);\r\n                  break;\r\n               case IFCDataPrimitiveType.Instance:\r\n                  created = parametersToSet.AddParameterElementId(doc, element, category, objDef, parameterName, elementIdValueToUse, Id);\r\n                  break;\r\n            }\r\n\r\n            if (created)\r\n               createdParameters.Add(propertyFullName);\r\n\r\n            return;\r\n         }\r\n\r\n         switch (existingParameter.StorageType)\r\n         {\r\n            case StorageType.String:\r\n               {\r\n                  switch (dataType)\r\n                  {\r\n                     case IFCDataPrimitiveType.String:\r\n                     case IFCDataPrimitiveType.Enumeration:\r\n                     case IFCDataPrimitiveType.Binary:\r\n                        parametersToSet.AddStringParameter(existingParameter, stringValueToUse);\r\n                        break;\r\n                     case IFCDataPrimitiveType.Integer:\r\n                        parametersToSet.AddStringParameter(existingParameter, intValueToUse.Value.ToString());\r\n                        break;\r\n                     case IFCDataPrimitiveType.Boolean:\r\n                        parametersToSet.AddStringParameter(existingParameter, boolValueToUse.Value ? \"True\" : \"False\");\r\n                        break;\r\n                     case IFCDataPrimitiveType.Logical:\r\n                        parametersToSet.AddStringParameter(existingParameter, logicalValueToUse.ToString());\r\n                        break;\r\n                     case IFCDataPrimitiveType.Number:\r\n                     case IFCDataPrimitiveType.Double:\r\n                        parametersToSet.AddStringParameter(existingParameter, doubleValueToUse.ToString());\r\n                        break;\r\n                     default:\r\n                        break;\r\n                  }\r\n               }\r\n               break;\r\n            case StorageType.Integer:\r\n               if (dataType == IFCDataPrimitiveType.Integer)\r\n                  parametersToSet.AddIntegerParameter(existingParameter, intValueToUse.Value);\r\n               else if (dataType == IFCDataPrimitiveType.Boolean)\r\n                  parametersToSet.AddIntegerParameter(existingParameter, boolValueToUse.Value ? 1 : 0);\r\n               else if (dataType == IFCDataPrimitiveType.Logical && logicalValueToUse != IFCLogical.Unknown)\r\n                  parametersToSet.AddIntegerParameter(existingParameter, (logicalValueToUse == IFCLogical.True) ? 1 : 0);\r\n               break;\r\n            case StorageType.Double:\r\n               if (dataType == IFCDataPrimitiveType.Double)\r\n                  parametersToSet.AddDoubleParameter(existingParameter, doubleValueToUse.Value);\r\n               else if (dataType == IFCDataPrimitiveType.Integer)\r\n                  parametersToSet.AddDoubleParameter(existingParameter, intValueToUse.Value);\r\n               else if (dataType == IFCDataPrimitiveType.Boolean)\r\n                  parametersToSet.AddDoubleParameter(existingParameter, boolValueToUse.Value ? 1 : 0);\r\n               else if ((dataType == IFCDataPrimitiveType.Logical) && (logicalValueToUse != IFCLogical.Unknown))\r\n                  parametersToSet.AddDoubleParameter(existingParameter, (logicalValueToUse == IFCLogical.True) ? 1 : 0);\r\n               break;\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPropertyBoundedValue.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcPropertyBoundedValue\r\n   /// </summary>\r\n   public class IFCPropertyBoundedValue : IFCSimpleProperty\r\n   {\r\n      private int m_LowerBoundPropertyIndex = -1;\r\n\r\n      private int m_UpperBoundPropertyIndex = -1;\r\n\r\n      private int m_SetPointValueIndex = -1;\r\n \r\n      /// <summary>\r\n      /// Returns the property value as a string, for Set().\r\n      /// </summary>\r\n      /// <returns>The property value as a string.</returns>\r\n      public override string PropertyValueAsString()\r\n      {\r\n         // Format as one of the following:\r\n         // None: empty string\r\n         // Lower only: >= LowValue\r\n         // Upper only: <= UpperValue\r\n         // Lower and Upper: [ LowValue - UpperValue ]\r\n         // SetPointValue: (SetPointValue)\r\n         // Lower, SetPointValue: >= LowValue (SetPointValue)\r\n         // Upper, SetPointValue: <= UpperValue (SetPointValue)\r\n         // Lower, Upper, SetPointValue: [ LowValue - UpperValue ] (SetPointValue)\r\n         string propertyValueAsString = string.Empty;\r\n\r\n         bool hasLowerBoundPropertyIndex = (m_LowerBoundPropertyIndex >= 0);\r\n         bool hasUpperBoundPropertyIndex = (m_UpperBoundPropertyIndex >= 0);\r\n\r\n         if (hasLowerBoundPropertyIndex)\r\n         {\r\n            if (!hasUpperBoundPropertyIndex)\r\n               propertyValueAsString += \">= \";\r\n            else\r\n               propertyValueAsString += \"[ \";\r\n\r\n            propertyValueAsString += FormatPropertyValue(IFCPropertyValues[m_LowerBoundPropertyIndex]);\r\n         }\r\n\r\n         if (hasUpperBoundPropertyIndex)\r\n         {\r\n            if (!hasLowerBoundPropertyIndex)\r\n               propertyValueAsString += \"<= \";\r\n            else\r\n               propertyValueAsString += \" - \";\r\n            propertyValueAsString += FormatPropertyValue(IFCPropertyValues[m_UpperBoundPropertyIndex]);\r\n            if (hasLowerBoundPropertyIndex)\r\n               propertyValueAsString += \" ]\";\r\n         }\r\n\r\n         if (m_SetPointValueIndex >= 0)\r\n         {\r\n            if (hasUpperBoundPropertyIndex || hasLowerBoundPropertyIndex)\r\n               propertyValueAsString += \" \";\r\n            propertyValueAsString += \"(\" + FormatPropertyValue(IFCPropertyValues[m_SetPointValueIndex]) + \")\";\r\n         }\r\n\r\n         return propertyValueAsString;\r\n      }\r\n\r\n      protected IFCPropertyBoundedValue()\r\n      {\r\n      }\r\n\r\n      protected IFCPropertyBoundedValue(IFCAnyHandle ifcPropertyBoundedValue)\r\n      {\r\n         Process(ifcPropertyBoundedValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC bounded value property.\r\n      /// </summary>\r\n      /// <param name=\"ifcPropertyBoundedValue\">The IfcPropertyBoundedValue object.</param>\r\n      /// <returns>The IFCPropertyBoundedValue object.</returns>\r\n      override protected void Process(IFCAnyHandle ifcPropertyBoundedValue)\r\n      {\r\n         base.Process(ifcPropertyBoundedValue);\r\n\r\n         IFCData lowerBoundValue = ifcPropertyBoundedValue.GetAttribute(\"LowerBoundValue\");\r\n         IFCData upperBoundValue = ifcPropertyBoundedValue.GetAttribute(\"UpperBoundValue\");\r\n         IFCData setPointValue = (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete)) ? ifcPropertyBoundedValue.GetAttribute(\"SetPointValue\") : null;\r\n\r\n         if (lowerBoundValue != null && lowerBoundValue.HasValue)\r\n         {\r\n            m_LowerBoundPropertyIndex = IFCPropertyValues.Count;\r\n            IFCPropertyValues.Add(new IFCPropertyValue(this, lowerBoundValue, false));\r\n         }\r\n\r\n         if (upperBoundValue != null && upperBoundValue.HasValue)\r\n         {\r\n            m_UpperBoundPropertyIndex = IFCPropertyValues.Count;\r\n            IFCPropertyValues.Add(new IFCPropertyValue(this, upperBoundValue, false));\r\n         }\r\n\r\n         if (setPointValue != null && setPointValue.HasValue)\r\n         {\r\n            m_SetPointValueIndex = IFCPropertyValues.Count;\r\n            IFCPropertyValues.Add(new IFCPropertyValue(this, setPointValue, false));\r\n         }\r\n\r\n         ProcessIFCSimplePropertyUnit(this, ifcPropertyBoundedValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC bounded value property.\r\n      /// </summary>\r\n      /// <param name=\"ifcPropertyBoundedValue\">The IfcPropertyBoundedValue handle.</param>\r\n      /// <returns>The IFCPropertyBoundedValue object.</returns>\r\n      public static IFCPropertyBoundedValue ProcessIFCPropertyBoundedValue(IFCAnyHandle ifcPropertyBoundedValue)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPropertyBoundedValue))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPropertyBoundedValue);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity propertyBoundedValue;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcPropertyBoundedValue.StepId, out propertyBoundedValue))\r\n            return (propertyBoundedValue as IFCPropertyBoundedValue);\r\n\r\n         return new IFCPropertyBoundedValue(ifcPropertyBoundedValue);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPropertyMapping.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Maps IFC property to Revit built in parameter.\r\n   /// </summary>\r\n   class IFCPropertyMapping\r\n   {\r\n      static Dictionary<Tuple<string, string>, BuiltInParameter> m_Parameters = new Dictionary<Tuple<string, string>, BuiltInParameter>();\r\n\r\n      static string m_SpacePropertySet = \"Pset_SpaceCommon\";\r\n      static string m_WallPropertySet = \"Pset_WallCommon\";\r\n      static string m_BeamPropertySet = \"Pset_BeamCommon\";\r\n      static string m_ColumnPropertySet = \"Pset_ColumnCommon\";\r\n      static string m_MemberPropertySet = \"Pset_MemberCommon\";\r\n      static string m_RoofPropertySet = \"Pset_RoofCommon\";\r\n      static string m_SlabPropertySet = \"Pset_SlabCommon\";\r\n      static string m_RampPropertySet = \"Pset_RampCommon\";\r\n      static string m_StairPropertySet = \"Pset_StairCommon\";\r\n\r\n      static IFCPropertyMapping()\r\n      {\r\n         m_Parameters.Add(Tuple.Create(m_SpacePropertySet, \"CeilingCovering\"), BuiltInParameter.ROOM_FINISH_CEILING);\r\n         m_Parameters.Add(Tuple.Create(m_SpacePropertySet, \"FloorCovering\"), BuiltInParameter.ROOM_FINISH_FLOOR);\r\n         m_Parameters.Add(Tuple.Create(m_SpacePropertySet, \"WallCovering\"), BuiltInParameter.ROOM_FINISH_WALL);\r\n\r\n         m_Parameters.Add(Tuple.Create(m_WallPropertySet, \"FireRating\"), BuiltInParameter.FIRE_RATING);\r\n\r\n         m_Parameters.Add(Tuple.Create(m_BeamPropertySet, \"FireRating\"), BuiltInParameter.FIRE_RATING);\r\n         m_Parameters.Add(Tuple.Create(m_BeamPropertySet, \"Roll\"), BuiltInParameter.STRUCTURAL_BEND_DIR_ANGLE);\r\n\r\n         m_Parameters.Add(Tuple.Create(m_ColumnPropertySet, \"Roll\"), BuiltInParameter.STRUCTURAL_BEND_DIR_ANGLE);\r\n\r\n         m_Parameters.Add(Tuple.Create(m_MemberPropertySet, \"Roll\"), BuiltInParameter.STRUCTURAL_BEND_DIR_ANGLE);\r\n\r\n         m_Parameters.Add(Tuple.Create(m_RoofPropertySet, \"FireRating\"), BuiltInParameter.FIRE_RATING);\r\n\r\n         m_Parameters.Add(Tuple.Create(m_SlabPropertySet, \"FireRating\"), BuiltInParameter.FIRE_RATING);\r\n\r\n         m_Parameters.Add(Tuple.Create(m_RampPropertySet, \"FireRating\"), BuiltInParameter.FIRE_RATING);\r\n\r\n         m_Parameters.Add(Tuple.Create(m_StairPropertySet, \"FireRating\"), BuiltInParameter.FIRE_RATING);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the built in parameter from property group and name.\r\n      /// </summary>\r\n      /// <param name=\"group\">The group.</param>\r\n      /// <param name=\"name\">The name.</param>\r\n      /// <returns>The built in parameter.</returns>\r\n      public static BuiltInParameter GetBuiltInParameter(string group, string name)\r\n      {\r\n         BuiltInParameter builtInParameter = BuiltInParameter.INVALID;\r\n\r\n         m_Parameters.TryGetValue(Tuple.Create(group, name), out builtInParameter);\r\n\r\n         return builtInParameter;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPropertySet.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Properties;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcPropertySet.\r\n   /// </summary>\r\n   public class IFCPropertySet : IFCPropertySetDefinition\r\n   {\r\n      /// <summary>\r\n      /// The properties.\r\n      /// </summary>\r\n      public IDictionary<string, IFCProperty> IFCProperties { get; protected set; } = new Dictionary<string, IFCProperty>();\r\n\r\n      /// <summary>\r\n      /// Processes IfcPropertySet attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcPropertySet\">The IfcPropertySet handle.</param>\r\n      protected IFCPropertySet(IFCAnyHandle ifcPropertySet)\r\n      {\r\n         Process(ifcPropertySet);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC property set.\r\n      /// </summary>\r\n      /// <param name=\"ifcPropertySet\">The IfcPropertySet object.</param>\r\n      protected override void Process(IFCAnyHandle ifcPropertySet)\r\n      {\r\n         base.Process(ifcPropertySet);\r\n\r\n         HashSet<IFCAnyHandle> properties = IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcPropertySet, \"HasProperties\");\r\n\r\n         if (properties != null)\r\n         {\r\n            foreach (IFCAnyHandle property in properties)\r\n            {\r\n               IFCProperty ifcProperty = IFCProperty.ProcessIFCProperty(property);\r\n               if (ifcProperty?.Name != null)\r\n                  IFCProperties[ifcProperty.Name] = ifcProperty;\r\n            }\r\n         }\r\n         else\r\n         {\r\n            Importer.TheLog.LogMissingRequiredAttributeError(ifcPropertySet, \"HasProperties\", false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC property set.\r\n      /// </summary>\r\n      /// <param name=\"propertySet\">The IfcPropertySet object.</param>\r\n      /// <returns>The IFCPropertySet object.</returns>\r\n      public static IFCPropertySet ProcessIFCPropertySet(IFCAnyHandle ifcPropertySet)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPropertySet))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPropertySet);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity propertySet;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcPropertySet.StepId, out propertySet))\r\n            return (propertySet as IFCPropertySet);\r\n\r\n         return new IFCPropertySet(ifcPropertySet);\r\n      }\r\n\r\n      private static bool IsDisallowedCategory(Category category)\r\n      {\r\n         if (category == null || category.Parent != null)\r\n            return true;\r\n         if ((category.BuiltInCategory == BuiltInCategory.OST_IOSModelGroups) ||\r\n             (category.BuiltInCategory == BuiltInCategory.OST_Curtain_Systems))\r\n            return true;\r\n         return false;\r\n      }\r\n\r\n      public static Category GetCategoryForParameterIfValid(Element element, int id)\r\n      {\r\n         Category category = element.Category;\r\n         if (category != null && category.Parent != null)\r\n            category = category.Parent;\r\n\r\n         if (category == null)\r\n         {\r\n            Importer.TheLog.LogWarning(id, \"Can't add parameters for element with no category.\", true);\r\n            return null;\r\n         }\r\n         else if (IsDisallowedCategory(category))\r\n         {\r\n            Importer.TheLog.LogWarning(id, \"Can't add parameters for category: \" + category.Name, true);\r\n            return null;\r\n         }\r\n\r\n         return category;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a property set for a given element.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element being created.</param>\r\n      /// <param name=\"parameterGroupMap\">The parameters of the element.  Cached for performance.</param>\r\n      /// <returns>The name of the property set created, if it was created, and a Boolean value if it should be added to the property set list.</returns>\r\n      public override Tuple<string, bool> CreatePropertySet(Document doc, Element element, IFCObjectDefinition objDef,\r\n         IFCParameterSetByGroup parameterGroupMap, ParametersToSet parametersToSet)\r\n      {\r\n         Category category = GetCategoryForParameterIfValid(element, Id);\r\n         if (category == null)\r\n            return null;\r\n\r\n         string quotedName = \"\\\"\" + Name + \"\\\"\";\r\n\r\n         ISet<string> parametersCreated = new HashSet<string>();\r\n         foreach (IFCProperty property in IFCProperties.Values)\r\n         {\r\n            bool elementIsType = (element is ElementType);\r\n            string typeString = elementIsType ? \" \" + Resources.IFCTypeSchedule : string.Empty;\r\n            string fullName = CreatePropertyName(property.Name, typeString);\r\n            property.Create(doc, element, category, objDef, parameterGroupMap, fullName, parametersCreated,\r\n               parametersToSet);\r\n         }\r\n\r\n         return Tuple.Create(quotedName, true);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPropertySetDefinition.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Properties;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcPropertySetDefinition.\r\n   /// </summary>\r\n   public abstract class IFCPropertySetDefinition : IFCRoot\r\n   {\r\n      static IDictionary<IFCEntityType, int> m_DoorWindowPanelCounters = new Dictionary<IFCEntityType, int>();\r\n\r\n      /// <summary>\r\n      /// Reset the counters that will keep track of the number of IfcDoorPanelProperties and IfcWindowPanelProperties this IfcObject has.\r\n      /// </summary>\r\n      public static void ResetCounters()\r\n      {\r\n         m_DoorWindowPanelCounters.Clear();\r\n      }\r\n\r\n      public static int GetNextCounter(IFCEntityType type)\r\n      {\r\n         int nextValue;\r\n         if (!m_DoorWindowPanelCounters.TryGetValue(type, out nextValue))\r\n            nextValue = 0;\r\n         m_DoorWindowPanelCounters[type] = ++nextValue;\r\n         return nextValue;\r\n      }\r\n\r\n      protected IFCPropertySetDefinition()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcPropertySetDefinition attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcRoot\">The IfcPropertySetDefinition handle.</param>\r\n      protected IFCPropertySetDefinition(IFCAnyHandle ifcPropertySet)\r\n      {\r\n         Process(ifcPropertySet);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFCPropertySetDefinition.\r\n      /// </summary>\r\n      /// <param name=\"ifcPropertySetDefinition\">The IfcPropertySetDefinition handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcPropertySetDefinition)\r\n      {\r\n         base.Process(ifcPropertySetDefinition);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines the default name of an IfcRoot, if any.\r\n      /// </summary>\r\n      /// <param name=\"name\">The original name.</param>\r\n      /// <returns>The default name of an IfcRoot, if any.</returns>\r\n      protected override string GetDefaultName(string name)\r\n      {\r\n         return Properties.Resources.IFCUnknownPropertySet;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcPropertySetDefinition.\r\n      /// </summary>\r\n      /// <param name=\"ifcPropertySetDefinition\">The IfcPropertySetDefinition handle.</param>\r\n      /// <param name=\"hostIfcObjectStepId\">The STEP Id of the host IFC object which invoked this method.</param>\r\n      /// <returns>The IFCPropertySetDefinition object.</returns>\r\n      public static IFCPropertySetDefinition ProcessIFCPropertySetDefinition(IFCAnyHandle ifcPropertySetDefinition, int hostIfcObjectStepId)\r\n      {\r\n         if (Importer.TheOptions.UsingHybridPropertySetsForHostObject(hostIfcObjectStepId))\r\n         {\r\n            return null;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPropertySetDefinition))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPropertySetDefinition);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity propertySet;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcPropertySetDefinition.StepId, out propertySet))\r\n            return (propertySet as IFCPropertySetDefinition);\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcPropertySetDefinition, IFCEntityType.IfcElementQuantity))\r\n            return IFCElementQuantity.ProcessIFCElementQuantity(ifcPropertySetDefinition);\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcPropertySetDefinition, IFCEntityType.IfcPropertySet))\r\n            return IFCPropertySet.ProcessIFCPropertySet(ifcPropertySetDefinition);\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcPropertySetDefinition, IFCEntityType.IfcDoorLiningProperties))\r\n            return IFCDoorLiningProperties.ProcessIFCDoorLiningProperties(ifcPropertySetDefinition);\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcPropertySetDefinition, IFCEntityType.IfcDoorPanelProperties))\r\n            return IFCDoorPanelProperties.ProcessIFCDoorPanelProperties(ifcPropertySetDefinition,\r\n                GetNextCounter(IFCEntityType.IfcDoorPanelProperties));\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcPropertySetDefinition, IFCEntityType.IfcWindowLiningProperties))\r\n            return IFCWindowLiningProperties.ProcessIFCWindowLiningProperties(ifcPropertySetDefinition);\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcPropertySetDefinition, IFCEntityType.IfcWindowPanelProperties))\r\n            return IFCWindowPanelProperties.ProcessIFCWindowPanelProperties(ifcPropertySetDefinition,\r\n                GetNextCounter(IFCEntityType.IfcWindowPanelProperties));\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcPropertySetDefinition, IFCEntityType.IfcPropertySetDefinition, false);\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a property set for a given element.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element being created.</param>\r\n      /// <param name=\"parameterGroupMap\">The parameters of the element.  Cached for performance.</param>\r\n      /// <returns>The name of the property set created, if it was created, and a Boolean value if it should be added to the property set list.</returns>\r\n      public virtual Tuple<string, bool> CreatePropertySet(Document doc, Element element, IFCObjectDefinition objDef, \r\n         IFCParameterSetByGroup parameterGroupMap, ParametersToSet parametersToSet)\r\n      {\r\n         return new Tuple<string, bool>(null, false);\r\n      }\r\n\r\n      protected string CreatePropertyName(string propertyName, string typeString = \"\")\r\n      {\r\n         // Navisworks uses this engine and needs support for the old naming.\r\n         // We use the API-only UseStreamlinedOptions as a proxy for knowing this.\r\n         return IFCImportFile.TheFile.Options.UseStreamlinedOptions ?\r\n            propertyName + \"(\" + Name + typeString +  \")\" :\r\n            Name + \".\" + propertyName + typeString;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPropertyTableValue.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Import.Enums;\nusing Revit.IFC.Import.Utility;\n\nnamespace Revit.IFC.Import.Data\n{\n   /// <summary>\n   /// Represents an IfcPropertyTableValue\n   /// </summary>\n   public class IFCPropertyTableValue : IFCSimpleProperty\n   {\n      /// <summary>\n      /// The property values.\n      /// </summary>\n      IList<IFCPropertyValue> m_IFCDefinedValues = new List<IFCPropertyValue>();\n\n      /// <summary>\n      /// The Defined values unit of Table property.\n      /// </summary>\n      public IFCUnit IFCDefinedUnit { get; private set; } = null;\n\n      /// <summary>\n      /// Returns the property value as a string, for Set().\n      /// </summary>\n      /// <returns>The property value as a string.</returns>\n      public override string PropertyValueAsString()\n      {\n         string propertyValue = string.Empty;\n         for (int ii = 0; ii < IFCPropertyValues.Count; ii++)\n         {\n            if (ii > 0)\n               propertyValue += \"\\r\\n\";\n\n            propertyValue += FormatPropertyValue(IFCPropertyValues[ii]) + \";\";\n            propertyValue += FormatPropertyValue(m_IFCDefinedValues[ii]);\n         }\n\n         return propertyValue;\n      }\n\n      protected IFCPropertyTableValue()\n      {\n      }\n\n      protected IFCPropertyTableValue(IFCAnyHandle ifcPropertyTableValue)\n      {\n         Process(ifcPropertyTableValue);\n      }\n\n      /// <summary>\n      /// Processes an IFC table value property.\n      /// </summary>\n      /// <param name=\"ifcPropertyTableValue\">The IfcPropertyTableValue object.</param>\n      /// <returns>The IFCPropertyTableValue object.</returns>\n      override protected void Process(IFCAnyHandle ifcPropertyTableValue)\n      {\n         base.Process(ifcPropertyTableValue);\n                \n         List<IFCData> definingValues = IFCAnyHandleUtil.GetAggregateAttribute<List<IFCData>>(ifcPropertyTableValue, \"DefiningValues\");\n         List<IFCData> definedValues = IFCAnyHandleUtil.GetAggregateAttribute<List<IFCData>>(ifcPropertyTableValue, \"DefinedValues\");\n\n         if (definingValues.Count != definedValues.Count)\n            Importer.TheLog.LogWarning(ifcPropertyTableValue.StepId, \"Invalid IfcPropertyTableValue: WR21\", true);\n\n         int pairsNumber = Math.Min(definingValues.Count, definedValues.Count);\n\n         for (int ii = 0; ii < pairsNumber; ii++)\n         {\n            IFCPropertyValues.Add(new IFCPropertyValue(this, definingValues[ii], false));\n            m_IFCDefinedValues.Add(new IFCPropertyValue(this, definedValues[ii], true));\n         }\n\n         ProcessIFCSimplePropertyTableUnit(this, ifcPropertyTableValue);\n      }\n\n      /// <summary>\n      /// Processes an IFC unit in the table property.\n      /// </summary>\n      /// <param name=\"ifcSimpleTableProperty\">The simple table property.</param>\n      /// <param name=\"simplePropertyHandle\">The simple property handle.</param>\n      static protected void ProcessIFCSimplePropertyTableUnit(IFCPropertyTableValue ifcSimpleTableProperty, IFCAnyHandle simplePropertyHandle)\n      {\n         IFCPropertyValue firstPropertyValue = (ifcSimpleTableProperty.IFCPropertyValues.Count > 0) ? ifcSimpleTableProperty.IFCPropertyValues[0] : null;\n         ifcSimpleTableProperty.IFCUnit = ProcessUnit(simplePropertyHandle, \"DefiningUnit\", firstPropertyValue);\n\n         firstPropertyValue = (ifcSimpleTableProperty.m_IFCDefinedValues.Count > 0) ? ifcSimpleTableProperty.m_IFCDefinedValues[0] : null;\n         ifcSimpleTableProperty.IFCDefinedUnit = ProcessUnit(simplePropertyHandle, \"DefinedUnit\", firstPropertyValue);\n      }\n\n      /// <summary>\n      /// Processes an IFC table value property.\n      /// </summary>\n      /// <param name=\"ifcPropertyTableValue\">The IfcPropertyTableValue handle.</param>\n      /// <returns>The IFCPropertyTableValue object.</returns>\n      public static IFCPropertyTableValue ProcessIFCPropertyTableValue(IFCAnyHandle ifcPropertyTableValue)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPropertyTableValue))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPropertyTableValue);\n            return null;\n         }\n\n         IFCEntity propertyTableValue;\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcPropertyTableValue.StepId, out propertyTableValue))\n            return (propertyTableValue as IFCPropertyTableValue);\n\n         return new IFCPropertyTableValue(ifcPropertyTableValue);\n      }\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCPropertyValue.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents a value in an IFC property.\r\n   /// </summary>\r\n   public class IFCPropertyValue\r\n   {\r\n      /// <summary>\r\n      /// The value.\r\n      /// </summary>\r\n      IFCData m_Value;\r\n\r\n      /// <summary>\r\n      /// The property that the value belongs to.\r\n      /// </summary>\r\n      IFCSimpleProperty m_IFCSimpleProperty;\r\n\r\n      /// <summary>\r\n      /// If the value belongs to Defined values of Table property\r\n      /// </summary>\r\n      bool m_isTableDefinedProperty;\r\n\r\n      /// <summary>\r\n      /// Constructs a IFCPropertyValue object.\r\n      /// </summary>\r\n      /// <param name=\"ifcSimpleProperty\">The property.</param>\r\n      /// <param name=\"value\">The value.</param>\r\n      /// <param name=\"isTableDefinedProperty\">If defined table value.</param>\r\n      public IFCPropertyValue(IFCSimpleProperty ifcSimpleProperty, IFCData value, bool isTableDefinedProperty)\r\n      {\r\n         m_IFCSimpleProperty = ifcSimpleProperty;\r\n         m_Value = value;\r\n         m_isTableDefinedProperty = isTableDefinedProperty;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The primitive type.\r\n      /// </summary>\r\n      public IFCDataPrimitiveType Type\r\n      {\r\n         get { return m_Value != null ? m_Value.PrimitiveType : IFCDataPrimitiveType.Unknown; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if the property value has been set.\r\n      /// </summary>\r\n      /// <returns>True if the value for this property is non-null, and has a valid value.</returns>\r\n      public bool HasValue()\r\n      {\r\n         return ((m_Value != null) && (m_Value.HasValue));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determine the storage type for this IFCPropertyValue.\r\n      /// </summary>\r\n      /// <returns>The StorageType.</returns>\r\n      public StorageType TypeToStorageType()\r\n      {\r\n         switch (Type)\r\n         {\r\n            case IFCDataPrimitiveType.Boolean:\r\n               return StorageType.Integer;\r\n            case IFCDataPrimitiveType.Double:\r\n               return StorageType.Double;\r\n            case IFCDataPrimitiveType.Integer:\r\n               return StorageType.Integer;\r\n            case IFCDataPrimitiveType.String:\r\n               return StorageType.String;\r\n         }\r\n\r\n         return StorageType.None;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts the internal value into a string value.  It will scale double values.\r\n      /// </summary>\r\n      /// <returns>The string corresponding to the internal value.</returns>\r\n      public string ValueAsString()\r\n      {\r\n         if (!HasValue())\r\n            return \"\";\r\n\r\n         switch (Type)\r\n         {\r\n            case IFCDataPrimitiveType.Boolean:\r\n               return AsBoolean().ToString();\r\n            case IFCDataPrimitiveType.Double:\r\n               return AsScaledDouble().ToString();\r\n            case IFCDataPrimitiveType.Number:\r\n               return AsNumber().ToString();\r\n            case IFCDataPrimitiveType.Integer:\r\n               return AsInteger().ToString();\r\n            case IFCDataPrimitiveType.String:\r\n               return AsString();\r\n         }\r\n\r\n         Importer.TheLog.LogError(m_IFCSimpleProperty.Id, \"Unable to set value of parameter of type: \" + Type.ToString(), false);\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The value.\r\n      /// </summary>\r\n      public IFCData Value\r\n      {\r\n         get { return m_Value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The property unit.\r\n      /// </summary>\r\n      public IFCUnit IFCUnit\r\n      {\r\n         get\r\n         {\r\n            if (m_IFCSimpleProperty != null)\r\n               return m_isTableDefinedProperty ? (m_IFCSimpleProperty as IFCPropertyTableValue)?.IFCDefinedUnit : m_IFCSimpleProperty.IFCUnit;\r\n            else\r\n               return null;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the value as an IFCLogical.\r\n      /// </summary>\r\n      /// <returns>The IFCLogical value.</returns>\r\n      public IFCLogical AsLogical()\r\n      {\r\n         if (Type == IFCDataPrimitiveType.Logical)\r\n            return Value.AsLogical();\r\n\r\n         throw new InvalidOperationException(\"Not a logical value.\");\r\n      }\r\n\r\n      public double AsNumber()\r\n      {\r\n         if (Type == IFCDataPrimitiveType.Number)\r\n         {\r\n            return Value.AsDouble();\r\n         }\r\n\r\n         throw new InvalidOperationException(\"Not a number value.\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the value as double, in the original units in the file.\r\n      /// </summary>\r\n      /// <returns>The double value.</returns>\r\n      public double AsUnscaledDouble()\r\n      {\r\n         if (Type == IFCDataPrimitiveType.Double)\r\n            return Value.AsDouble();\r\n\r\n         throw new InvalidOperationException(\"Not a double value.\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the value as double, scaled from the original units in the file to Revit internal units.\r\n      /// </summary>\r\n      /// <returns>The double value.</returns>\r\n      public double AsScaledDouble()\r\n      {\r\n         if (Type == IFCDataPrimitiveType.Double)\r\n         {\r\n            return IFCUnit != null ? IFCUnit.Convert(Value.AsDouble()) : Value.AsDouble();\r\n         }\r\n\r\n         throw new InvalidOperationException(\"Not a double value.\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the value as double.\r\n      /// </summary>\r\n      /// <returns>The double value.</returns>\r\n      public double AsDouble()\r\n      {\r\n         if (Type == IFCDataPrimitiveType.Double)\r\n         {\r\n            return IFCUnit != null ? IFCUnit.Convert(Value.AsDouble()) : Value.AsDouble();\r\n         }\r\n\r\n         throw new InvalidOperationException(\"Not a double value.\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the value as integer.\r\n      /// </summary>\r\n      /// <returns>The integer value.</returns>\r\n      public int AsInteger()\r\n      {\r\n         if (Type == IFCDataPrimitiveType.Integer)\r\n         {\r\n            return IFCUnit != null ? IFCUnit.Convert(Value.AsInteger()) : Value.AsInteger();\r\n         }\r\n\r\n         throw new InvalidOperationException(\"Not a int value.\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the value as string.\r\n      /// </summary>\r\n      /// <returns>The string value.</returns>\r\n      public string AsString()\r\n      {\r\n         if (Type == IFCDataPrimitiveType.String)\r\n         {\r\n            return Value.AsString();\r\n         }\r\n\r\n         throw new InvalidOperationException(\"Not a string value.\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the value as bool.\r\n      /// </summary>\r\n      /// <returns>The bool value.</returns>\r\n      public bool AsBoolean()\r\n      {\r\n         if (Type == IFCDataPrimitiveType.Boolean)\r\n         {\r\n            return Value.AsBoolean();\r\n         }\r\n\r\n         throw new InvalidOperationException(\"Not a boolean value.\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the value as IFCAnyHandle.\r\n      /// </summary>\r\n      /// <returns>The bool value.</returns>\r\n      public IFCAnyHandle AsInstance()\r\n      {\r\n         if (Type == IFCDataPrimitiveType.Instance)\r\n         {\r\n            return Value.AsInstance();\r\n         }\r\n\r\n         throw new InvalidOperationException(\"Not a instance value.\");\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCProxy.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Revit.IFC.Common.Enums;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nusing TemporaryDisableLogging = Revit.IFC.Import.Utility.IFCImportOptions.TemporaryDisableLogging;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcProxy.\r\n   /// </summary>\r\n   public class IFCProxy : IFCProduct\r\n   {\r\n      private string m_Tag = null;\r\n\r\n      private string m_ProxyType = null;\r\n\r\n      /// <summary>\r\n      /// The \"Tag\" field associated with the IfcProxy.\r\n      /// </summary>\r\n      public string Tag\r\n      {\r\n         get { return m_Tag; }\r\n         protected set { m_Tag = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The \"ProxyType\" field associated with the IfcProxy.\r\n      /// </summary>\r\n      public string ProxyType\r\n      {\r\n         get { return m_ProxyType; }\r\n         protected set { m_ProxyType = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCProxy()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCProxy from the IfcProxy handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcProxy\">The IfcProxy handle.</param>\r\n      protected IFCProxy(IFCAnyHandle ifcProxy)\r\n      {\r\n         Process(ifcProxy);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcProxy attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcProxy\">The IfcProxy handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcProxy)\r\n      {\r\n         base.Process(ifcProxy);\r\n\r\n         Tag = IFCAnyHandleUtil.GetStringAttribute(ifcProxy, \"Tag\");\r\n\r\n         ProxyType = IFCAnyHandleUtil.GetEnumerationAttribute(ifcProxy, \"ProxyType\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit element params based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      protected override void CreateParametersInternal(Document doc, Element element)\r\n      {\r\n         base.CreateParametersInternal(doc, element);\r\n\r\n         if (element != null)\r\n         {\r\n            Category category = IFCPropertySet.GetCategoryForParameterIfValid(element, Id);\r\n\r\n            // Set \"Tag\" parameter.\r\n            string ifcTag = Tag;\r\n            if (!string.IsNullOrWhiteSpace(ifcTag))\r\n            {\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcTag\", ifcTag, Id);\r\n            }\r\n\r\n            // Set \"ProxyType\" parameter.\r\n            string ifcProxyType = ProxyType;\r\n            if (!string.IsNullOrWhiteSpace(ifcProxyType))\r\n            {\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcProxyType\", ifcProxyType, Id);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcProxy object.\r\n      /// </summary>\r\n      /// <param name=\"ifcProxy\">The IfcProxy handle.</param>\r\n      /// <returns>The IFCProxy object.</returns>\r\n      public static IFCProxy ProcessIFCProxy(IFCAnyHandle ifcProxy)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcProxy))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcProxy);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity cachedIFCProxy;\r\n         IFCImportFile.TheFile.EntityMap.TryGetValue(ifcProxy.StepId, out cachedIFCProxy);\r\n         if (cachedIFCProxy != null)\r\n            return (cachedIFCProxy as IFCProxy);\r\n\r\n         return new IFCProxy(ifcProxy);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCRationalBSplineSurfaceWithKnots.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCRationalBSplineSurfaceWithKnots entity\r\n   /// </summary>\r\n   public class IFCRationalBSplineSurfaceWithKnots : IFCBSplineSurfaceWithKnots\r\n   {\r\n      /// <summary>\r\n      /// The list of weights.  We use a List instead of an IList to allow use of the AddRange function.\r\n      /// </summary>\r\n      private List<double> m_WeightsList;\r\n\r\n      /// <summary>\r\n      /// The list of weights\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// Based on IFC 4 specification, the weights are represented by a list of lists, with each list being one \r\n      /// row of u-values. We convert it to one list of control points by appending all of these lists together\r\n      /// in order, i.e. the first list is followed by the second list and so on.\r\n      /// </remarks>\r\n      public List<double> WeightsList\r\n      {\r\n         get\r\n         {\r\n            if (m_WeightsList == null)\r\n               m_WeightsList = new List<double>();\r\n            return m_WeightsList;\r\n         }\r\n         protected set { m_WeightsList = value; }\r\n      }\r\n\r\n      protected IFCRationalBSplineSurfaceWithKnots()\r\n      {\r\n      }\r\n\r\n      protected IFCRationalBSplineSurfaceWithKnots(IFCAnyHandle ifcRationalBSplineSurfaceWithKnots)\r\n      {\r\n         Process(ifcRationalBSplineSurfaceWithKnots);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcRationalBSplineSurfaceWithKnots)\r\n      {\r\n         base.Process(ifcRationalBSplineSurfaceWithKnots);\r\n\r\n         IList<IList<double>> weightsData = IFCImportHandleUtil.GetListOfListOfDoubleAttribute(ifcRationalBSplineSurfaceWithKnots, \"WeightsData\");\r\n         if (weightsData != null)\r\n         {\r\n            foreach (IList<double> weightsRow in weightsData)\r\n            {\r\n               WeightsList.AddRange(weightsRow);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCRationalBSplineSurfaceWithKnots object from the handle of type IfcRationalBSplineSurfaceWithKnots\r\n      /// </summary>\r\n      /// <param name=\"IFCRationalBSplineSurfaceWithKnots\">The IFC handle</param>\r\n      /// <returns>The IFCRationalBSplineSurfaceWithKnots object</returns>\r\n      public static IFCRationalBSplineSurfaceWithKnots ProcessIFCRationalBSplineSurfaceWithKnots(IFCAnyHandle ifcRationalBSplineSurfaceWithKnots)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcRationalBSplineSurfaceWithKnots))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcRationalBSplineSurfaceWithKnots);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity rationalBSplineSurfaceWithKnots = null;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcRationalBSplineSurfaceWithKnots.StepId, out rationalBSplineSurfaceWithKnots))\r\n            rationalBSplineSurfaceWithKnots = new IFCRationalBSplineSurfaceWithKnots(ifcRationalBSplineSurfaceWithKnots);\r\n\r\n         return (rationalBSplineSurfaceWithKnots as IFCRationalBSplineSurfaceWithKnots);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCRepresentation.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Windows.Annotations;\r\nusing System.Windows;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Microsoft.VisualBasic.Logging;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\nusing static System.Windows.Forms.VisualStyles.VisualStyleElement.Tab;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcRepresentation.\r\n   /// </summary>\r\n   public class IFCRepresentation : IFCEntity\r\n   {\r\n      /// <summary>\r\n      /// The related IfcRepresentationContext.\r\n      /// </summary>\r\n      public IFCRepresentationContext Context { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The optional representation identifier.\r\n      /// </summary>\r\n      public IFCRepresentationIdentifier Identifier { get; protected set; } = IFCRepresentationIdentifier.Other;\r\n\r\n      /// <summary>\r\n      /// The optional representation type.\r\n      /// </summary>\r\n      public string RepresentationType { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The representations of the product.\r\n      /// </summary>\r\n      public IList<IFCRepresentationItem> RepresentationItems { get; protected set; } = new List<IFCRepresentationItem>();\r\n\r\n      /// <summary>\r\n      /// The bounding box, only valid for \"Box\" representation type.\r\n      /// </summary>\r\n      public BoundingBoxXYZ BoundingBox { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The associated layer assignment of the representation item, if any.\r\n      /// </summary>\r\n      public IFCPresentationLayerAssignment LayerAssignment { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCRepresentation()\r\n      {\r\n\r\n      }\r\n\r\n      private IFCRepresentationIdentifier GetRepresentationIdentifier(string identifier, string type, IFCAnyHandle ifcRepresentation)\r\n      {\r\n         if (Enum.TryParse(identifier, true, out IFCRepresentationIdentifier ifcRepresentationIdentifier))\r\n         {\r\n            // Special case for Annotation.\r\n            switch (ifcRepresentationIdentifier)\r\n            {\r\n               case IFCRepresentationIdentifier.Annotation:\r\n                  if (string.Compare(type, \"Annotation2D\", true) == 0)\r\n                  {\r\n                     return IFCRepresentationIdentifier.FootPrint;\r\n                  }\r\n                  return IFCRepresentationIdentifier.Body;\r\n            }\r\n\r\n            return ifcRepresentationIdentifier;\r\n         }\r\n\r\n         // Special cases below.\r\n         // Sorted by order of expected occurences.\r\n         // NOTE: This list includes invalid or obsolete identifiers found in real IFC files. \r\n         if ((string.Compare(identifier, \"Facetation\", true) == 0) ||\r\n             string.IsNullOrWhiteSpace(identifier))\r\n         {\r\n            return IFCRepresentationIdentifier.Body;\r\n         }\r\n\r\n         if (string.Compare(identifier, \"BoundingBox\", true) == 0)\r\n         {\r\n            return IFCRepresentationIdentifier.Box;\r\n         }\r\n\r\n         if (string.Compare(identifier, \"Plan\", true) == 0)\r\n         {\r\n            return IFCRepresentationIdentifier.FootPrint;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcRepresentation, IFCEntityType.IfcStyledRepresentation))\r\n         {\r\n            return IFCRepresentationIdentifier.Style;\r\n         }\r\n\r\n         if (string.Compare(identifier, \"Body-Fallback\", true) == 0)\r\n         {\r\n            return IFCRepresentationIdentifier.BodyFallback;\r\n         }\r\n\r\n         Importer.TheLog.LogWarning(ifcRepresentation.StepId, \"Found unknown representation identifier: \" + identifier, false);\r\n         return IFCRepresentationIdentifier.Other;\r\n      }\r\n\r\n      private bool NotAllowedInRepresentation(IFCAnyHandle item)\r\n      {\r\n         switch (Identifier)\r\n         {\r\n            case IFCRepresentationIdentifier.Axis:\r\n               bool isNotAllowed = !(IFCAnyHandleUtil.IsSubTypeOf(item, IFCEntityType.IfcCurve) ||\r\n                   IFCAnyHandleUtil.IsSubTypeOf(item, IFCEntityType.IfcMappedItem));\r\n\r\n               if (IFCAnyHandleUtil.IsSubTypeOf(item, IFCEntityType.IfcGeometricSet))\r\n               {\r\n                  isNotAllowed = false;\r\n                  Importer.TheLog.LogWarning(item.StepId, \"Axis representation has a disallowed IfcGeometricSet, processing.\", true);\r\n               }\r\n               return isNotAllowed;\r\n            case IFCRepresentationIdentifier.Body:\r\n               return false;\r\n            case IFCRepresentationIdentifier.Box:\r\n               return !(IFCAnyHandleUtil.IsSubTypeOf(item, IFCEntityType.IfcBoundingBox));\r\n            case IFCRepresentationIdentifier.FootPrint:\r\n               return !(IFCAnyHandleUtil.IsSubTypeOf(item, IFCEntityType.IfcCurve) ||\r\n                   IFCAnyHandleUtil.IsSubTypeOf(item, IFCEntityType.IfcGeometricSet) ||\r\n                   IFCAnyHandleUtil.IsSubTypeOf(item, IFCEntityType.IfcMappedItem));\r\n            case IFCRepresentationIdentifier.Style:\r\n               return !(IFCAnyHandleUtil.IsSubTypeOf(item, IFCEntityType.IfcStyledItem));\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcRepresentation attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcRepresentation\">The IfcRepresentation handle.</param>\r\n      override protected void Process(IFCAnyHandle ifcRepresentation)\r\n      {\r\n         base.Process(ifcRepresentation);\r\n\r\n         string identifier = IFCImportHandleUtil.GetOptionalStringAttribute(ifcRepresentation, \"RepresentationIdentifier\", null);\r\n\r\n         string type = IFCImportHandleUtil.GetOptionalStringAttribute(ifcRepresentation, \"RepresentationType\", null);\r\n\r\n         Identifier = GetRepresentationIdentifier(identifier, type, ifcRepresentation);\r\n\r\n         LayerAssignment = IFCPresentationLayerAssignment.GetTheLayerAssignment(ifcRepresentation);\r\n\r\n         HashSet<IFCAnyHandle> items =\r\n            IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcRepresentation, \"Items\");\r\n\r\n         if (items == null)\r\n         {\r\n            Importer.TheLog.LogWarning(ifcRepresentation.StepId, \"Missing non-optional representation items.\", true);\r\n         }\r\n         else\r\n         {\r\n            foreach (IFCAnyHandle item in items)\r\n            {\r\n               IFCRepresentationItem repItem = null;\r\n               try\r\n               {\r\n                  if (NotAllowedInRepresentation(item))\r\n                  {\r\n                     IFCEntityType entityType = IFCAnyHandleUtil.GetEntityType(item);\r\n                     Importer.TheLog.LogWarning(item.StepId, \"Ignoring unhandled representation item of type \" + entityType.ToString() + \" in \" +\r\n                         Identifier.ToString() + \" representation.\", true);\r\n                     continue;\r\n                  }\r\n\r\n                  if (IFCAnyHandleUtil.IsSubTypeOf(item, IFCEntityType.IfcBoundingBox))\r\n                  {\r\n                     // If Hybrid/Non-legacy, don't process BoundingBox.\r\n                     if (Importer.TheOptions.HybridImportOptions != null)\r\n                        continue;\r\n\r\n                     // Don't read in Box representation unless options allow it.\r\n                     if (IFCImportFile.TheFile.Options.ProcessBoundingBoxGeometry == IFCProcessBBoxOptions.Never)\r\n                     {\r\n                        Importer.TheLog.LogWarning(item.StepId, \"BoundingBox not imported with ProcessBoundingBoxGeometry=Never\", false);\r\n                     }\r\n                     else\r\n                     {\r\n                        if (BoundingBox != null)\r\n                        {\r\n                           Importer.TheLog.LogWarning(item.StepId, \"Found second IfcBoundingBox representation item, ignoring.\", false);\r\n                           continue;\r\n                        }\r\n                        BoundingBox = ProcessBoundingBox(item);\r\n                     }\r\n                  }\r\n                  else\r\n                  {\r\n                     repItem = IFCRepresentationItem.ProcessIFCRepresentationItem(item);\r\n                  }\r\n               }\r\n               catch (Exception ex)\r\n               {\r\n                  Importer.TheLog.LogError(item.StepId, ex.Message, false);\r\n               }\r\n\r\n               if (repItem != null)\r\n                  RepresentationItems.Add(repItem);\r\n            }\r\n         }\r\n\r\n         IFCAnyHandle representationContext = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcRepresentation, \"ContextOfItems\", false);\r\n         if (representationContext != null)\r\n            Context = IFCRepresentationContext.ProcessIFCRepresentationContext(representationContext);\r\n\r\n         RepresentationType = IFCImportHandleUtil.GetOptionalStringAttribute(ifcRepresentation, \"RepresentationType\", null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCRepresentation(IFCAnyHandle representation)\r\n      {\r\n         Process(representation);\r\n      }\r\n\r\n      private void CreateBoxShape(IFCImportShapeEditScope shapeEditScope, Transform scaledLcs)\r\n      {\r\n         using (IFCImportShapeEditScope.IFCContainingRepresentationSetter repSetter = new IFCImportShapeEditScope.IFCContainingRepresentationSetter(shapeEditScope, this))\r\n         {\r\n            // Get the material and graphics style based in the \"Box\" sub-category of Generic Models.  \r\n            // We will create the sub-category if this is our first time trying to use it.\r\n            // Note that all bounding boxes are controlled by a sub-category of Generic Models.  We may revisit that decision later.\r\n            // Note that we hard-wire the identifier to \"Box\" because older files may have bounding box items in an obsolete representation.\r\n            SolidOptions solidOptions = null;\r\n            Category bboxCategory = IFCCategoryUtil.GetSubCategoryForRepresentation(shapeEditScope.Document, Id, IFCRepresentationIdentifier.Box);\r\n            if (bboxCategory != null)\r\n            {\r\n               ElementId materialId = (bboxCategory.Material == null) ? ElementId.InvalidElementId : bboxCategory.Material.Id;\r\n               GraphicsStyle graphicsStyle = bboxCategory.GetGraphicsStyle(GraphicsStyleType.Projection);\r\n               ElementId gstyleId = (graphicsStyle == null) ? ElementId.InvalidElementId : graphicsStyle.Id;\r\n               solidOptions = new SolidOptions(materialId, gstyleId);\r\n            }\r\n\r\n            Solid bboxSolid = IFCGeometryUtil.CreateSolidFromBoundingBox(scaledLcs, BoundingBox, solidOptions);\r\n            if (bboxSolid != null)\r\n            {\r\n               IFCSolidInfo bboxSolidInfo = IFCSolidInfo.Create(Id, bboxSolid);\r\n               shapeEditScope.AddGeometry(bboxSolidInfo);\r\n            }\r\n         }\r\n         return;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which representation is being created.</param>\r\n      public void CreateShape(IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid)\r\n      {\r\n         // Special handling for Box representation.  We may decide to create an IFCBoundingBox class and stop this special treatment.\r\n         if (BoundingBox != null)\r\n            CreateBoxShape(shapeEditScope, scaledLcs);\r\n\r\n         if (LayerAssignment != null)\r\n            LayerAssignment.Create(shapeEditScope);\r\n\r\n         // There is an assumption here that Process() weeded out any items that are invalid for this representation.\r\n         using (IFCImportShapeEditScope.IFCMaterialStack stack = new IFCImportShapeEditScope.IFCMaterialStack(shapeEditScope, null, LayerAssignment))\r\n         {\r\n            using (IFCImportShapeEditScope.IFCContainingRepresentationSetter repSetter = new IFCImportShapeEditScope.IFCContainingRepresentationSetter(shapeEditScope, this))\r\n            {\r\n               foreach (IFCRepresentationItem representationItem in RepresentationItems)\r\n               {\r\n                  representationItem.CreateShape(shapeEditScope, scaledLcs, guid);\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      // TODO: this function should be moved to IFCBoundingBox.cs now that they are fully supported.\r\n      static private BoundingBoxXYZ ProcessBoundingBox(IFCAnyHandle boundingBoxHnd)\r\n      {\r\n         IFCAnyHandle lowerLeftHnd = IFCAnyHandleUtil.GetInstanceAttribute(boundingBoxHnd, \"Corner\");\r\n         XYZ minXYZ = IFCPoint.ProcessScaledLengthIFCCartesianPoint(lowerLeftHnd);\r\n\r\n         bool found = false;\r\n         double xDim = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(boundingBoxHnd, \"XDim\", out found);\r\n         if (!found)\r\n            return null;\r\n\r\n         double yDim = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(boundingBoxHnd, \"YDim\", out found);\r\n         if (!found)\r\n            return null;\r\n\r\n         double zDim = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(boundingBoxHnd, \"ZDim\", out found);\r\n         if (!found)\r\n            return null;\r\n\r\n         XYZ maxXYZ = new XYZ(minXYZ.X + xDim, minXYZ.Y + yDim, minXYZ.Z + zDim);\r\n         BoundingBoxXYZ boundingBox = new BoundingBoxXYZ();\r\n         boundingBox.set_Bounds(0, minXYZ);\r\n         boundingBox.set_Bounds(1, maxXYZ);\r\n         return boundingBox;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcRepresentation object.\r\n      /// </summary>\r\n      /// <param name=\"ifcRepresentation\">The IfcRepresentation handle.</param>\r\n      /// <returns>The IFCRepresentation object.</returns>\r\n      public static IFCRepresentation ProcessIFCRepresentation(IFCAnyHandle ifcRepresentation)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcRepresentation))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcRepresentation);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity representation;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcRepresentation.StepId, out representation))\r\n            return (representation as IFCRepresentation);\r\n\r\n         return new IFCRepresentation(ifcRepresentation);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCRepresentationContext.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcRepresentationContext and all of its sub-classes.\r\n   /// </summary>\r\n   public class IFCRepresentationContext : IFCEntity\r\n   {\r\n      /// <summary>\r\n      /// The context identifier for the IfcRepresentationContext\r\n      /// </summary>\r\n      public string Identifier { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The context type for the IfcRepresentationContext\r\n      /// </summary>\r\n      public string Type { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The coordinate space dimension for the IfcRepresentationContext, usually 2 or 3.\r\n      /// </summary>\r\n      public int CoordinateSpaceDimension { get; protected set; } = 0;\r\n\r\n      /// <summary>\r\n      /// The optional geometric precision for the IfcRepresentationContext\r\n      /// </summary>\r\n      public double? Precision { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The world coordinate system for the IfcRepresentationContext\r\n      /// </summary>\r\n      public Transform WorldCoordinateSystem { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The TrueNorth for the IfcRepresentationContext\r\n      /// </summary>\r\n      public XYZ TrueNorth { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The optional parent IfcRepresentationContext, for sub-contexts.\r\n      /// </summary>\r\n      public IFCRepresentationContext ParentContext { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The optional target scale for a sub-context.\r\n      /// </summary>\r\n      public double? TargetScale { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The geometric projection (i.e., view type) for a sub-context.\r\n      /// </summary>\r\n      public IFCGeometricProjection TargetView { get; protected set; } = IFCGeometricProjection.NotDefined;\r\n\r\n      /// <summary>\r\n      /// The user defined target view name, if TargetView = IFCGeometricProjection.UserDefined.\r\n      /// </summary>\r\n      public string UserDefinedTargetView { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCRepresentationContext()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcRepresentationContext attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcRepresentationContext\">The IfcRepresentationContext handle.</param>\r\n      override protected void Process(IFCAnyHandle ifcRepresentationContext)\r\n      {\r\n         base.Process(ifcRepresentationContext);\r\n\r\n         Identifier = IFCImportHandleUtil.GetOptionalStringAttribute(ifcRepresentationContext, \"ContextIdentifier\", null);\r\n\r\n         Type = IFCImportHandleUtil.GetOptionalStringAttribute(ifcRepresentationContext, \"ContextType\", null);\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcRepresentationContext, IFCEntityType.IfcGeometricRepresentationContext))\r\n         {\r\n            bool isSubContext = IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC2x2) &&\r\n               IFCAnyHandleUtil.IsSubTypeOf(ifcRepresentationContext, IFCEntityType.IfcGeometricRepresentationSubContext);\r\n\r\n            if (isSubContext)\r\n            {\r\n               IFCAnyHandle parentContext = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcRepresentationContext, \"ParentContext\", true);\r\n               ParentContext = IFCRepresentationContext.ProcessIFCRepresentationContext(parentContext);\r\n               TrueNorth = ParentContext.TrueNorth;\r\n            }\r\n            else\r\n            {\r\n               // This used to fail for IfcGeometricRepresentationSubContext, because the TrueNorth attribute was derived from\r\n               // the IfcGeometricRepresentationContext, and the toolkit returned what seemed to be a valid handle that actually\r\n               // wasn't.  The code has now been rewritten to avoid this issue, but we will keep the try/catch block in case we \r\n               // were also catching other serious issues.\r\n               try\r\n               {\r\n                  // By default, True North points in the Y-Direction.\r\n                  IFCAnyHandle trueNorth = IFCImportHandleUtil.GetOptionalInstanceAttribute(ifcRepresentationContext, \"TrueNorth\");\r\n                  if (!IFCAnyHandleUtil.IsNullOrHasNoValue(trueNorth))\r\n                     TrueNorth = IFCPoint.ProcessNormalizedIFCDirection(trueNorth);\r\n                  else\r\n                     TrueNorth = XYZ.BasisY;\r\n               }\r\n               catch\r\n               {\r\n                  TrueNorth = XYZ.BasisY;\r\n               }\r\n            }\r\n\r\n            if (isSubContext)\r\n            {\r\n               TargetScale = IFCImportHandleUtil.GetOptionalPositiveRatioAttribute(ifcRepresentationContext, \"TargetScale\", 1.0);\r\n\r\n               TargetView = IFCEnums.GetSafeEnumerationAttribute<IFCGeometricProjection>(ifcRepresentationContext, \"TargetView\",\r\n                   IFCGeometricProjection.NotDefined);\r\n\r\n               UserDefinedTargetView = IFCImportHandleUtil.GetOptionalStringAttribute(ifcRepresentationContext, \"UserDefinedTargetView\", null);\r\n            }\r\n\r\n            // ODA toolkit doesn't yet support derived attributes, so we will explicitly deal with\r\n            // them here.\r\n            if (ParentContext != null)\r\n            {\r\n               CoordinateSpaceDimension = ParentContext.CoordinateSpaceDimension;\r\n               Precision = ParentContext.Precision;\r\n               WorldCoordinateSystem = ParentContext.WorldCoordinateSystem;\r\n            }\r\n            else\r\n            {\r\n               bool found = false;\r\n               CoordinateSpaceDimension = IFCImportHandleUtil.GetRequiredIntegerAttribute(ifcRepresentationContext, \"CoordinateSpaceDimension\", out found);\r\n               if (!found)\r\n                  CoordinateSpaceDimension = 3;   // Don't throw, just set to default 3D.\r\n\r\n               Precision = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(ifcRepresentationContext, \"Precision\", IFCImportFile.TheFile.VertexTolerance);\r\n\r\n               IFCAnyHandle worldCoordinateSystem = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcRepresentationContext, \"WorldCoordinateSystem\", false);\r\n               if (!IFCAnyHandleUtil.IsNullOrHasNoValue(worldCoordinateSystem))\r\n                  WorldCoordinateSystem = IFCLocation.ProcessIFCAxis2Placement(worldCoordinateSystem);\r\n               else\r\n                  WorldCoordinateSystem = Transform.Identity;\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCRepresentationContext(IFCAnyHandle representationContext)\r\n      {\r\n         Process(representationContext);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcRepresentationContext object.\r\n      /// </summary>\r\n      /// <param name=\"ifcRepresentation\">The IfcRepresentationContext handle.</param>\r\n      /// <returns>The IFCRepresentationContext object.</returns>\r\n      public static IFCRepresentationContext ProcessIFCRepresentationContext(IFCAnyHandle ifcRepresentationContext)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcRepresentationContext))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcRepresentationContext);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity representationContext;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcRepresentationContext.StepId, out representationContext))\r\n            return (representationContext as IFCRepresentationContext);\r\n\r\n         return new IFCRepresentationContext(ifcRepresentationContext);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCRepresentationItem.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public abstract class IFCRepresentationItem : IFCEntity\r\n   {\r\n      /// <summary>\r\n      /// The associated style of the representation item, if any.\r\n      /// </summary>\r\n      public IFCStyledItem StyledByItem { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The associated layer assignment of the representation item, if any.\r\n      /// </summary>\r\n      public IFCPresentationLayerAssignment LayerAssignment { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Returns the associated material id, if any.\r\n      /// </summary>\r\n      /// <param name=\"scope\">The containing creation scope.</param>\r\n      /// <returns>The element id of the material, if any.</returns>\r\n      public virtual ElementId GetMaterialElementId(IFCImportShapeEditScope scope)\r\n      {\r\n         ElementId materialId = scope.GetCurrentMaterialId();\r\n         if (materialId != ElementId.InvalidElementId)\r\n            return materialId;\r\n\r\n         if (scope.Creator != null)\r\n         {\r\n            IFCMaterial creatorMaterial = scope.Creator.GetTheMaterial();\r\n            if (creatorMaterial != null)\r\n               return creatorMaterial.GetMaterialElementId();\r\n         }\r\n\r\n         return ElementId.InvalidElementId;\r\n      }\r\n\r\n      protected IFCRepresentationItem()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle item)\r\n      {\r\n         base.Process(item);\r\n\r\n         LayerAssignment = IFCPresentationLayerAssignment.GetTheLayerAssignment(item);\r\n\r\n         // IFC2x has a different representation for styled items which we don't support.\r\n         ICollection<IFCAnyHandle> styledByItems = null;\r\n         if (Importer.TheCache.StyledByItems.TryGetValue(item, out styledByItems))\r\n         {\r\n            if (styledByItems != null && styledByItems.Count > 0)\r\n            {\r\n               // We can only handle one styled item, but we allow the possiblity that there are duplicates.  Do a top-level check.\r\n               foreach (IFCAnyHandle styledByItem in styledByItems)\r\n               {\r\n                  if (!IFCAnyHandleUtil.IsSubTypeOf(styledByItem, IFCEntityType.IfcStyledItem))\r\n                  {\r\n                     Importer.TheLog.LogUnexpectedTypeError(styledByItem, IFCEntityType.IfcStyledItem, false);\r\n                     StyledByItem = null;\r\n                     break;\r\n                  }\r\n                  else\r\n                  {\r\n                     if (StyledByItem == null)\r\n                        StyledByItem = IFCStyledItem.ProcessIFCStyledItem(styledByItem);\r\n                     else\r\n                     {\r\n                        IFCStyledItem compStyledByItem = IFCStyledItem.ProcessIFCStyledItem(styledByItem);\r\n                        if (!StyledByItem.IsEquivalentTo(compStyledByItem))\r\n                        {\r\n                           Importer.TheLog.LogWarning(Id, \"Multiple inconsistent styled items found for this item; using first one.\", false);\r\n                           break;\r\n                        }\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      public void CreateShape(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         if (StyledByItem != null)\r\n            StyledByItem.Create(shapeEditScope);\r\n\r\n         if (LayerAssignment != null)\r\n            LayerAssignment.Create(shapeEditScope);\r\n\r\n         using (IFCImportShapeEditScope.IFCMaterialStack stack = new IFCImportShapeEditScope.IFCMaterialStack(shapeEditScope, StyledByItem, LayerAssignment))\r\n         {\r\n            CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">The scaled local coordinate system for the geometry.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      virtual protected void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n      }\r\n\r\n      protected IFCRepresentationItem(IFCAnyHandle item)\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcRepresentationItem entity handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcRepresentationItem\">The IfcRepresentationItem handle.</param>\r\n      /// <returns>The IFCRepresentationItem object.</returns>\r\n      public static IFCRepresentationItem ProcessIFCRepresentationItem(IFCAnyHandle ifcRepresentationItem)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcRepresentationItem))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcRepresentationItem);\r\n            return null;\r\n         }\r\n\r\n         // Legacy.\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcRepresentationItem, IFCEntityType.IfcTopologicalRepresentationItem))\r\n            return IFCTopologicalRepresentationItem.ProcessIFCTopologicalRepresentationItem(ifcRepresentationItem);\r\n\r\n         // TODO: Move everything below to IFCGeometricRepresentationItem, once it is created.\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcRepresentationItem, IFCEntityType.IfcFaceBasedSurfaceModel))\r\n            return IFCFaceBasedSurfaceModel.ProcessIFCFaceBasedSurfaceModel(ifcRepresentationItem);\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcRepresentationItem, IFCEntityType.IfcShellBasedSurfaceModel))\r\n            return IFCShellBasedSurfaceModel.ProcessIFCShellBasedSurfaceModel(ifcRepresentationItem);\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcRepresentationItem, IFCEntityType.IfcSolidModel))\r\n            return IFCSolidModel.ProcessIFCSolidModel(ifcRepresentationItem);\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcRepresentationItem, IFCEntityType.IfcCsgPrimitive3D))\r\n            return IFCCsgPrimitive3D.ProcessIFCCsgPrimitive3D(ifcRepresentationItem);\r\n\r\n         // TODO: Move the items below to IFCGeometricRepresentationItem->IFCTessellatedItem->IfcTessellatedFaceSet.\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete) && IFCAnyHandleUtil.IsSubTypeOf(ifcRepresentationItem, IFCEntityType.IfcTriangulatedFaceSet))\r\n            return IFCTriangulatedFaceSet.ProcessIFCTriangulatedFaceSet(ifcRepresentationItem);\r\n         // There is no way to actually determine an IFC4Add2 file vs. a \"vanilla\" IFC4 file, which is\r\n         // obsolete.  The try/catch here allows us to read these obsolete files without crashing.\r\n         try\r\n         {\r\n            if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4) && IFCAnyHandleUtil.IsSubTypeOf(ifcRepresentationItem, IFCEntityType.IfcPolygonalFaceSet))\r\n               return IFCPolygonalFaceSet.ProcessIFCPolygonalFaceSet(ifcRepresentationItem);\r\n            if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4) && IFCAnyHandleUtil.IsSubTypeOf(ifcRepresentationItem, IFCEntityType.IfcIndexedPolygonalFace))\r\n               return IFCIndexedPolygonalFace.ProcessIFCIndexedPolygonalFace(ifcRepresentationItem);\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            // Once we fail once, downgrade the schema so we don't try again.\r\n            if (IFCImportFile.HasUndefinedAttribute(ex))\r\n               IFCImportFile.TheFile.DowngradeIFC4SchemaTo(IFCSchemaVersion.IFC4Add1Obsolete);\r\n            else\r\n               throw;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcRepresentationItem, IFCEntityType.IfcSurface))\r\n            return IFCSurface.ProcessIFCSurface(ifcRepresentationItem);\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcRepresentationItem, IFCEntityType.IfcBooleanResult))\r\n            return IFCBooleanResult.ProcessIFCBooleanResult(ifcRepresentationItem);\r\n\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC2x2) && IFCAnyHandleUtil.IsSubTypeOf(ifcRepresentationItem, IFCEntityType.IfcStyledItem))\r\n            return IFCStyledItem.ProcessIFCStyledItem(ifcRepresentationItem);\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcRepresentationItem, IFCEntityType.IfcMappedItem))\r\n            return IFCMappedItem.ProcessIFCMappedItem(ifcRepresentationItem);\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcRepresentationItem, IFCEntityType.IfcGeometricSet))\r\n            return IFCGeometricSet.ProcessIFCGeometricSet(ifcRepresentationItem);\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcRepresentationItem, IFCEntityType.IfcCurve))\r\n            return IFCCurve.ProcessIFCCurve(ifcRepresentationItem);\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcRepresentationItem, IFCEntityType.IfcPoint))\r\n            return IFCPoint.ProcessIFCPoint(ifcRepresentationItem);\r\n\r\n         // Everything else is an error.\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcRepresentationItem, IFCEntityType.IfcRepresentationItem, false);\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCRepresentationMap.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcRepresentationMap.\r\n   /// </summary>\r\n   public class IFCRepresentationMap : IFCEntity\r\n   {\r\n      Transform m_MappingOrigin = null;\r\n\r\n      IFCRepresentation m_MappedRepresentation = null;\r\n\r\n      /// <summary>\r\n      /// The transform associated with the mapping origin.\r\n      /// </summary>\r\n      public Transform MappingOrigin\r\n      {\r\n         get { return m_MappingOrigin; }\r\n         protected set { m_MappingOrigin = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The geometry (mapped representation).\r\n      /// </summary>\r\n      public IFCRepresentation MappedRepresentation\r\n      {\r\n         get { return m_MappedRepresentation; }\r\n         protected set { m_MappedRepresentation = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCRepresentationMap()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcRepresentationMap attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcRepresentationMap\">The IfcRepresentationMap handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcRepresentationMap)\r\n      {\r\n         base.Process(ifcRepresentationMap);\r\n\r\n         IFCAnyHandle mappingOrigin = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcRepresentationMap, \"MappingOrigin\", false);\r\n         if (mappingOrigin != null)\r\n            MappingOrigin = IFCLocation.ProcessIFCAxis2Placement(mappingOrigin);\r\n         else\r\n            MappingOrigin = Transform.Identity;\r\n\r\n         IFCAnyHandle mappedRepresentation = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcRepresentationMap, \"MappedRepresentation\", false);\r\n         if (mappedRepresentation != null)\r\n            MappedRepresentation = IFCRepresentation.ProcessIFCRepresentation(mappedRepresentation);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCRepresentationMap(IFCAnyHandle representationMap)\r\n      {\r\n         Process(representationMap);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation map.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <remarks>For this function, if lcs is null, we will create a library item for the geometry.</remarks>\r\n      public void CreateShape(IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid)\r\n      {\r\n         bool creatingLibraryDefinition = (scaledLcs == null);\r\n\r\n         if (MappedRepresentation != null)\r\n         {\r\n            // Look for cached shape; if found, return.\r\n            if (creatingLibraryDefinition)\r\n            {\r\n               if (IFCImportFile.TheFile.ShapeLibrary.FindDefinitionType(Id.ToString()) != ElementId.InvalidElementId)\r\n                  return;\r\n            }\r\n\r\n            Transform scaledMappingTransform = null;\r\n            if (scaledLcs == null)\r\n               scaledMappingTransform = MappingOrigin;\r\n            else\r\n            {\r\n               if (MappingOrigin == null)\r\n                  scaledMappingTransform = scaledLcs;\r\n               else\r\n                  scaledMappingTransform = scaledLcs.Multiply(MappingOrigin);\r\n            }\r\n\r\n            int numExistingSolids = shapeEditScope.Creator.Solids.Count;\r\n            int numExistingCurves = shapeEditScope.Creator.FootprintCurves.Count;\r\n\r\n            MappedRepresentation.CreateShape(shapeEditScope, scaledMappingTransform, guid);\r\n\r\n            if (creatingLibraryDefinition)\r\n            {\r\n               int numNewSolids = shapeEditScope.Creator.Solids.Count;\r\n               int numNewCurves = shapeEditScope.Creator.FootprintCurves.Count;\r\n\r\n               if ((numExistingSolids != numNewSolids) || (numExistingCurves != numNewCurves))\r\n               {\r\n                  List<GeometryObject> mappedSolids = new List<GeometryObject>();\r\n                  for (int ii = numExistingSolids; ii < numNewSolids; ii++)\r\n                  {\r\n                     GeometryObject originalObject = shapeEditScope.Creator.Solids[numExistingSolids].GeometryObject;\r\n                     if (originalObject != null)\r\n                     {\r\n                        // We only check curves, not solids, here, so we don't pass in a DirectShape.\r\n                        IList<GeometryObject> processedList = IFCGeometryUtil.AdjustGeometryObjectsIfNeeded(originalObject, null, Id);\r\n                        if (processedList != null)\r\n                        {\r\n                           mappedSolids.AddRange(processedList);\r\n                        }\r\n                        else\r\n                        {\r\n                           mappedSolids.Add(originalObject);\r\n                        }\r\n                     }\r\n                     shapeEditScope.Creator.Solids.RemoveAt(numExistingSolids);\r\n                  }\r\n\r\n                  IList<Curve> mappedCurves = new List<Curve>();\r\n                  for (int ii = numExistingCurves; ii < numNewCurves; ii++)\r\n                  {\r\n                     mappedCurves.Add(shapeEditScope.Creator.FootprintCurves[numExistingCurves]);\r\n                     shapeEditScope.Creator.FootprintCurves.RemoveAt(numExistingCurves);\r\n                  }\r\n                  shapeEditScope.AddPlanViewCurves(mappedCurves, Id);\r\n\r\n                  Document doc = IFCImportFile.TheFile.Document;\r\n                  DirectShapeType directShapeType = null;\r\n\r\n                  IFCTypeProduct typeProduct = null;\r\n                  int typeId = -1;\r\n                  if (Importer.TheCache.RepMapToTypeProduct.TryGetValue(Id, out typeProduct) && typeProduct != null)\r\n                  {\r\n                     ElementId directShapeTypeId = ElementId.InvalidElementId;\r\n                     if (Importer.TheCache.CreatedDirectShapeTypes.TryGetValue(typeProduct.Id, out directShapeTypeId))\r\n                     {\r\n                        directShapeType = doc.GetElement(directShapeTypeId) as DirectShapeType;\r\n                        typeId = typeProduct.Id;\r\n                     }\r\n                  }\r\n\r\n                  if (directShapeType == null)\r\n                  {\r\n                     string directShapeTypeName = Id.ToString();\r\n                     directShapeType = IFCElementUtil.CreateElementType(doc, directShapeTypeName, \r\n                        shapeEditScope.CategoryId, Id, null, EntityType);\r\n                     typeId = Id;\r\n                  }\r\n\r\n                  if (!Importer.TheProcessor.PostProcessRepresentationMap(typeId, mappedCurves, mappedSolids))\r\n                  {\r\n                     // Do the \"default\" here instead of the processor, since we don't want the processor\r\n                     // to know about Revit.IFC.Import stuff.\r\n                     directShapeType.AppendShape(mappedSolids);\r\n                     if (mappedCurves.Count != 0)\r\n                        shapeEditScope.SetPlanViewRep(directShapeType);\r\n                  }\r\n\r\n                  IFCImportFile.TheFile.ShapeLibrary.AddDefinitionType(Id.ToString(), directShapeType.Id);\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcRepresentationMap object.\r\n      /// </summary>\r\n      /// <param name=\"ifcRepresentation\">The IfcRepresentationMap handle.</param>\r\n      /// <returns>The IFCRepresentationMap object.</returns>\r\n      public static IFCRepresentationMap ProcessIFCRepresentationMap(IFCAnyHandle ifcRepresentationMap)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcRepresentationMap))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcRepresentationMap);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity representationMap;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcRepresentationMap.StepId, out representationMap))\r\n            return (representationMap as IFCRepresentationMap);\r\n\r\n         return new IFCRepresentationMap(ifcRepresentationMap);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCRevolvedAreaSolid.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCRevolvedAreaSolid : IFCSweptAreaSolid\r\n   {\r\n      Transform m_Axis = null;\r\n\r\n      double m_Angle = 0.0;\r\n\r\n      /// <summary>\r\n      /// The axis of rotation for the revolved area solid in the local coordinate system.\r\n      /// </summary>\r\n      public Transform Axis\r\n      {\r\n         get { return m_Axis; }\r\n         protected set { m_Axis = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The angle of the sweep.  The sweep will go from 0 to angle in the local coordinate system.\r\n      /// </summary>\r\n      public double Angle\r\n      {\r\n         get { return m_Angle; }\r\n         protected set { m_Angle = value; }\r\n      }\r\n\r\n      protected IFCRevolvedAreaSolid()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle solid)\r\n      {\r\n         base.Process(solid);\r\n\r\n         // We will not fail if the axis is not given, but instead assume it to be the identity in the LCS.\r\n         IFCAnyHandle axis = IFCImportHandleUtil.GetRequiredInstanceAttribute(solid, \"Axis\", false);\r\n         if (axis != null)\r\n            Axis = IFCLocation.ProcessIFCAxis1Placement(axis);\r\n         else\r\n            Axis = Transform.Identity;\r\n\r\n         bool found = false;\r\n         Angle = IFCImportHandleUtil.GetRequiredScaledAngleAttribute(solid, \"Angle\", out found);\r\n         // TODO: IFCImportFile.TheFile.Document.Application.IsValidAngle(Angle)\r\n         if (!found || Angle < MathUtil.Eps())\r\n            Importer.TheLog.LogError(solid.StepId, \"revolve angle is invalid, aborting.\", true);\r\n      }\r\n\r\n      private XYZ GetValidXVectorFromLoop(CurveLoop curveLoop, XYZ zVec, XYZ origin)\r\n      {\r\n         foreach (Curve curve in curveLoop)\r\n         {\r\n            IList<XYZ> pointsToCheck = new List<XYZ>();\r\n\r\n            // If unbound, must be cyclic.\r\n            if (!curve.IsBound)\r\n            {\r\n               pointsToCheck.Add(curve.Evaluate(0, false));\r\n               pointsToCheck.Add(curve.Evaluate(Math.PI / 2.0, false));\r\n               pointsToCheck.Add(curve.Evaluate(Math.PI, false));\r\n            }\r\n            else\r\n            {\r\n               pointsToCheck.Add(curve.Evaluate(0, true));\r\n               pointsToCheck.Add(curve.Evaluate(1.0, true));\r\n               if (curve.IsCyclic)\r\n                  pointsToCheck.Add(curve.Evaluate(0.5, true));\r\n            }\r\n\r\n            foreach (XYZ pointToCheck in pointsToCheck)\r\n            {\r\n               XYZ possibleVec = (pointToCheck - origin);\r\n               XYZ yVec = zVec.CrossProduct(possibleVec).Normalize();\r\n               if (yVec.IsZeroLength())\r\n                  continue;\r\n               return yVec.CrossProduct(zVec);\r\n            }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The shape edit scope.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      /// <returns>One or more created Solids.</returns>\r\n      protected override IList<GeometryObject> CreateGeometryInternal(\r\n         IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid)\r\n      {\r\n         Transform scaledOrigLCS = (scaledLcs == null) ? Transform.Identity : scaledLcs;\r\n         Transform scaledRevolvePosition = (Position == null) ? scaledOrigLCS : scaledOrigLCS.Multiply(Position);\r\n\r\n         ISet<IList<CurveLoop>> disjointLoops = GetTransformedCurveLoops(scaledRevolvePosition);\r\n         if (disjointLoops == null || disjointLoops.Count() == 0)\r\n            return null;\r\n\r\n         XYZ frameOrigin = scaledRevolvePosition.OfPoint(Axis.Origin);\r\n         XYZ frameZVec = scaledRevolvePosition.OfVector(Axis.BasisZ);\r\n         SolidOptions solidOptions = new SolidOptions(GetMaterialElementId(shapeEditScope), shapeEditScope.GraphicsStyleId);\r\n\r\n         IList<GeometryObject> myObjs = new List<GeometryObject>();\r\n\r\n         foreach (IList<CurveLoop> loops in disjointLoops)\r\n         {\r\n            XYZ frameXVec = GetValidXVectorFromLoop(loops[0], frameZVec, frameOrigin);\r\n            if (frameXVec == null)\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Couldn't generate valid frame for IfcRevolvedAreaSolid.\", false);\r\n               return null;\r\n            }\r\n\r\n            XYZ frameYVec = frameZVec.CrossProduct(frameXVec);\r\n            Frame coordinateFrame = new Frame(frameOrigin, frameXVec, frameYVec, frameZVec);\r\n\r\n            try\r\n            {\r\n               GeometryObject myObj = GeometryCreationUtilities.CreateRevolvedGeometry(coordinateFrame, loops, 0, Angle, solidOptions);\r\n               myObjs?.Add(myObj);\r\n            }\r\n            catch\r\n            {\r\n               Importer.TheLog.LogError(Id, \"Couldn't generate valid IfcRevolvedAreaSolid.\", false);\r\n            }\r\n         }\r\n\r\n         return myObjs;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n\r\n         IList<GeometryObject> revolvedGeometries = CreateGeometryInternal(shapeEditScope, scaledLcs, guid);\r\n         if (revolvedGeometries != null)\r\n         {\r\n            foreach (GeometryObject revolvedGeometry in revolvedGeometries)\r\n            {\r\n               shapeEditScope.AddGeometry(IFCSolidInfo.Create(Id, revolvedGeometry));\r\n            }\r\n         }\r\n      }\r\n\r\n      protected IFCRevolvedAreaSolid(IFCAnyHandle solid)\r\n      {\r\n         Process(solid);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCRevolvedAreaSolid object from a handle of type IfcRevolvedAreaSolid.\r\n      /// </summary>\r\n      /// <param name=\"ifcSolid\">The IFC handle.</param>\r\n      /// <returns>The IFCRevolvedAreaSolid object.</returns>\r\n      public static IFCRevolvedAreaSolid ProcessIFCRevolvedAreaSolid(IFCAnyHandle ifcSolid)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSolid))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcRevolvedAreaSolid);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity solid;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSolid.StepId, out solid))\r\n            solid = new IFCRevolvedAreaSolid(ifcSolid);\r\n         return (solid as IFCRevolvedAreaSolid);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCRoot.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcRoot object.\r\n   /// </summary>\r\n   public abstract class IFCRoot : IFCEntity\r\n   {\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCRoot()\r\n      {\r\n         Importer.TheLog.CurrentlyProcessedEntity = this;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcRoot attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcRoot\">The IfcRoot handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcRoot)\r\n      {\r\n         base.Process(ifcRoot);\r\n\r\n         GlobalId = IFCImportHandleUtil.GetRequiredStringAttribute(ifcRoot, \"GlobalId\", false);\r\n         if (Importer.TheCache.CreatedGUIDs.Contains(GlobalId))\r\n            Importer.TheLog.LogWarning(Id, \"Duplicate GUID: \" + GlobalId, false);\r\n         else\r\n            Importer.TheCache.CreatedGUIDs.Add(GlobalId);\r\n\r\n         Name = IFCAnyHandleUtil.GetStringAttribute(ifcRoot, \"Name\");\r\n         if (string.IsNullOrWhiteSpace(Name))\r\n            Name = GetDefaultName(Name);\r\n         Description = IFCAnyHandleUtil.GetStringAttribute(ifcRoot, \"Description\");\r\n\r\n         IFCAnyHandle ownerHistoryHandle = IFCAnyHandleUtil.GetInstanceAttribute(ifcRoot, \"OwnerHistory\");\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ownerHistoryHandle))\r\n         {\r\n            if (!IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete))\r\n               Importer.TheLog.LogWarning(Id, \"Missing IfcOwnerHistory, ignoring.\", true);\r\n         }\r\n         else\r\n         {\r\n            OwnerHistory = IFCOwnerHistory.ProcessIFCOwnerHistory(ownerHistoryHandle);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit elements based on the information contained in this class.\r\n      /// </summary>\r\n      protected virtual void Create(Document doc)\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// The global id.\r\n      /// </summary>\r\n      public string GlobalId { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The name.\r\n      /// </summary>\r\n      public string Name { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The description.\r\n      /// </summary>\r\n      public string Description { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The owner history.\r\n      /// </summary>\r\n      public IFCOwnerHistory OwnerHistory { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// True if two IFCRoots have the same id, or are both null.\r\n      /// </summary>\r\n      /// <param name=\"first\">The first IFCRoot.</param>\r\n      /// <param name=\"second\">The second IFCRoot.</param>\r\n      /// <returns>True if two IFCRoots have the same id, or are both null, or false otherwise.</returns>\r\n      public static bool Equals(IFCRoot first, IFCRoot second)\r\n      {\r\n         if (first == null)\r\n         {\r\n            if (second != null) return false;\r\n         }\r\n         else if (second == null)\r\n         {\r\n            return false;   // first != null, otherwise we are in first case above.\r\n         }\r\n         else\r\n         {\r\n            if (first.Id != second.Id) return false;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines the default name of an IfcRoot, if any.\r\n      /// </summary>\r\n      /// <param name=\"name\">The original name.</param>\r\n      /// <returns>The default name of an IfcRoot, if any.</returns>\r\n      protected virtual string GetDefaultName(string name)\r\n      {\r\n         return name;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSectionedSolid.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Import.Enums;\nusing Revit.IFC.Import.Geometry;\nusing Revit.IFC.Import.Utility;\n\nnamespace Revit.IFC.Import.Data\n{\n   /// <summary>\n   /// An IfcSectionedSolid is an abstract base type for solids constructed by sweeping potentially\n   /// variable cross sections along a directrix.\n   /// \n   /// This is very similar to the IFCSweptAreaSolid / IFCSurfaceCurveSweptAreaSolid combination.\n   /// </summary>\n   public abstract class IFCSectionedSolid : IFCSolidModel\n   {\n      /// <summary>\n      /// The curve used to define the sweeping operation.\n      /// </summary>\n      public IFCCurve Directrix { get; set; } = null;\n\n      /// <summary>\n      /// List of cross sections in sequential order along the Directrix.\n      /// Should have at least two.\n      /// </summary>\n      public IList<IFCProfileDef> CrossSections { get; set; } = null;\n\n\n      /// <summary>\n      /// Default Constructor.\n      /// </summary>\n      protected IFCSectionedSolid ()\n      {\n      }\n\n      \n      /// <summary>\n      /// Process Attributes for IFCSectionedSolid.\n      /// </summary>\n      /// <param name=\"solid\">Handle for the IFCSectionedSolid.</param>\n      override protected void Process(IFCAnyHandle solid)\n      {\n         base.Process(solid);\n\n         IFCAnyHandle directrix = IFCImportHandleUtil.GetRequiredInstanceAttribute(solid, \"Directrix\", true);\n         Directrix = IFCCurve.ProcessIFCCurve(directrix);\n\n         IList<IFCAnyHandle> crossSections = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(solid, \"CrossSections\");\n         if (crossSections?.Count > 2)\n         {\n            CrossSections = new List<IFCProfileDef>();\n            foreach (IFCAnyHandle crossSection in crossSections)\n            {\n               CrossSections.Add(IFCProfileDef.ProcessIFCProfileDef(crossSection));\n            }\n         }\n      }\n\n\n      /// <summary>\n      /// Constructor to process attributes for IFCSectionedSolid.\n      /// </summary>\n      /// <param name=\"solid\">Handle representing solid.</param>\n      protected IFCSectionedSolid(IFCAnyHandle solid)\n      {\n         Process(solid);\n      }\n\n\n      /// <summary>\n      /// GetTransformedCurveLoops to create Geometry.\n      /// Currently only support IFCSimpleProfile.\n      /// </summary>\n      /// <param name=\"unscaledLcs\">The unscaled transform, if the scaled transform isn't supported.</param>\n      /// <param name=\"scaledLcs\">The scaled (true) transform.</param>\n      /// <returns>List of list of CurveLoops representing profiles of exactly one outer and zero or more inner loops.</returns>\n      protected IList<IList<CurveLoop>> GetTransformedCurveLoops(Transform scaledLcs)\n      {\n         IList<IList<CurveLoop>> listOfListOfLoops = new List<IList<CurveLoop>>();\n         if (CrossSections != null)\n         {\n            foreach (IFCProfileDef crossSection in CrossSections)\n            {\n               IFCSimpleProfile simpleProfile = crossSection as IFCSimpleProfile;\n               if (simpleProfile == null)\n               {\n                  // TODO:  Support more complex ProfileDefs.\n                  //\n                  Importer.TheLog.LogError(Id, \"Cross Section Profile #\" + crossSection.Id + \"Not yet supported.\", false);\n                  continue;\n               }\n\n               IList<CurveLoop> listOfLoops = new List<CurveLoop>();\n\n               // It is legal for simpleSweptArea.Position to be null, for example for IfcArbitraryClosedProfileDef.\n               Transform scaledSweptAreaPosition = (simpleProfile.Position == null) ? scaledLcs : scaledLcs.Multiply(simpleProfile.Position);\n\n               CurveLoop currLoop = simpleProfile.GetTheOuterCurveLoop();\n               if (currLoop?.Count() == 0)\n               {\n                  Importer.TheLog.LogError(simpleProfile.Id, \"No outer curve loop for profile, ignoring.\", false);\n                  continue;\n               }\n\n               currLoop = IFCGeometryUtil.SplitUnboundCyclicCurves(currLoop);\n               listOfLoops.Add(IFCGeometryUtil.CreateTransformed(currLoop, Id, scaledSweptAreaPosition));\n\n               if (simpleProfile.InnerCurves != null)\n               {\n                  foreach (CurveLoop innerCurveLoop in simpleProfile.InnerCurves)\n                  {\n                     listOfLoops.Add(IFCGeometryUtil.CreateTransformed(IFCGeometryUtil.SplitUnboundCyclicCurves(innerCurveLoop), Id, scaledSweptAreaPosition));\n                  }\n               }\n\n               listOfListOfLoops.Add(listOfLoops);\n            }\n         }\n\n         return listOfListOfLoops;\n      }\n\n\n      /// <summary>\n      /// Creates an IFCSectionedSolid object from supplied handle.\n      /// </summary>\n      /// <param name=\"ifcSectionedSolid\">Handle that represents an IFCSectionedSolid.</param>\n      /// <returns>IFCSectionedSolid object.</returns>\n      public static IFCSectionedSolid ProcessIFCSectionedSolid(IFCAnyHandle ifcSectionedSolid)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSectionedSolid))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSectionedSolid);\n            return null;\n         }\n\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcSectionedSolid, IFCEntityType.IfcSectionedSolidHorizontal))\n            return IFCSectionedSolidHorizontal.ProcessIFCSectionedSolidHorizontal(ifcSectionedSolid);\n\n         Importer.TheLog.LogUnhandledSubTypeError(ifcSectionedSolid, IFCEntityType.IfcSectionedSolid, true);\n         return null;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSectionedSolidHorizontal.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Import.Enums;\nusing Revit.IFC.Import.Geometry;\nusing Revit.IFC.Import.Utility;\n\nnamespace Revit.IFC.Import.Data\n{\n   /// <summary>\n   /// A solid model constructed by sweeping potentially varying cross sections along a curve horizontally.\n   /// \n   /// TODO:  This currently only handles one IFCProfileDef for the entire length of the Directrix.\n   ///        This is because the positions requires IFCAxis2PlacementLinear, which is not currently supported.\n   ///        Once those are \n   /// </summary>\n   public class IFCSectionedSolidHorizontal : IFCSectionedSolid\n   {\n\n      /// <summary>\n      /// List of distance expressions in sequentially increasing order paired with CrossSections,\n      /// indicating the position of the corresponding section along the Directrix.\n      /// </summary>\n      public IList<Transform> CrossSectionPositions { get; set; } = null;\n\n      /// <summary>\n      /// Indicates whether Sections are oriented with the Y axis of each profile facing upwards in +Z direction (True),\n      /// or vertically perpendicular to the Directrix varying according to slope (False).\n      /// </summary>\n      public bool? FixedAxisVertical { get; set; } = null;\n\n\n      /// <summary>\n      /// Default Constructor.\n      /// </summary>\n      protected IFCSectionedSolidHorizontal()\n      {\n      }\n\n\n      /// <summary>\n      /// Processes attributes of IFCSectionedSolidHorizontal.\n      /// </summary>\n      /// <param name=\"ifcSectionedSolidHorizontal\">Handle representing IFCSectionedSolidHorizontal.</param>\n      protected override void Process(IFCAnyHandle ifcSectionedSolidHorizontal)\n      {\n         base.Process(ifcSectionedSolidHorizontal);\n\n         // Just get a very simple Transform to the start of the Directrix.\n         //\n         IList<Curve> directrixCurves = Directrix?.GetCurves();\n         if (directrixCurves?.Count == 0)\n         {\n            Importer.TheLog.LogError(ifcSectionedSolidHorizontal.StepId, \"Unable to retrieve Directrix.\", true);\n            return;\n         }\n\n         Curve curveToUse = directrixCurves[0];\n         Transform lcs = Transform.Identity;\n         if (curveToUse != null)\n         {\n            Transform derivatives = curveToUse.ComputeDerivatives(0, true);\n            XYZ axisXYZ = XYZ.BasisZ;\n            XYZ tangentDirection = derivatives.BasisX;\n            lcs.Origin = curveToUse.GetEndPoint(0);\n\n            XYZ lcsX = (tangentDirection - tangentDirection.DotProduct(axisXYZ) * axisXYZ).Normalize();\n            XYZ lcsY = axisXYZ.CrossProduct(lcsX).Normalize();\n\n            if (lcsX.IsZeroLength() || lcsY.IsZeroLength())\n            {\n               Importer.TheLog.LogError(ifcSectionedSolidHorizontal.StepId, \"Transformation to start point could not be computed.\", true);\n            }\n\n            lcs.BasisX = lcsX;\n            lcs.BasisY = lcsY;\n            lcs.BasisZ = axisXYZ;\n         }\n\n         // We only handle one Transform for simplicity.\n         //\n         CrossSectionPositions = new List<Transform>();\n         CrossSectionPositions.Add(lcs);\n      }\n\n\n      /// <summary>\n      /// Create the Geometry for the IFCSectionedSolidHorizontal\n      /// </summary>\n      /// <param name=\"shapeEditScope\">Geometry creation scope.</param>\n      /// <param name=\"unscaledLcs\">Local coordinate system for the geometry, without scale.</param>\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\n      /// <returns>List of GeometryObjects.</returns>\n      protected override IList<GeometryObject> CreateGeometryInternal(IFCImportShapeEditScope shapeEditScope, \n         Transform scaledLcs, string guid)\n      {\n         // Only use the first CrossSectionPosition for now.\n         //\n         if ((CrossSectionPositions?.Count ?? 0) == 0)\n            return null;\n\n         Transform crossSectionPosition = CrossSectionPositions[0];\n         if (crossSectionPosition == null)\n            return null;\n\n         Transform scaledObjectPosition = (scaledLcs == null) ? crossSectionPosition : scaledLcs.Multiply(crossSectionPosition);\n\n         CurveLoop directrixLoop = CurveLoop.Create(Directrix.GetCurves());\n         if (directrixLoop == null)\n            return null;\n\n         double startParam = 0.0; // If the directrix isn't bound, this arbitrary parameter will do.\n         Transform originTrf0 = null;\n         Curve firstCurve0 = directrixLoop.First();\n         if (firstCurve0.IsBound)\n            startParam = firstCurve0.GetEndParameter(0);\n         originTrf0 = firstCurve0.ComputeDerivatives(startParam, false);\n         if (originTrf0 == null)\n            return null;\n\n         CurveLoop directrixInLcs = IFCGeometryUtil.CreateTransformed(directrixLoop, Id, scaledObjectPosition);\n\n         // Create the sweep.\n         Transform originTrf = null;\n         Curve firstCurve = directrixInLcs.First();\n         originTrf = firstCurve.ComputeDerivatives(startParam, false);\n\n         Transform profileCurveLoopsTransform = Transform.CreateTranslation(originTrf.Origin);\n         profileCurveLoopsTransform.BasisX = XYZ.BasisZ;\n         profileCurveLoopsTransform.BasisZ = originTrf.BasisX.Normalize();\n         profileCurveLoopsTransform.BasisY = profileCurveLoopsTransform.BasisZ.CrossProduct(profileCurveLoopsTransform.BasisX);\n\n         IList<IList<CurveLoop>> profileCurveLoops = GetTransformedCurveLoops(profileCurveLoopsTransform);\n         if (profileCurveLoops == null || profileCurveLoops.Count == 0)\n            return null;\n\n         SolidOptions solidOptions = new SolidOptions(GetMaterialElementId(shapeEditScope), shapeEditScope.GraphicsStyleId);\n         IList<GeometryObject> geomObjs = new List<GeometryObject>();\n         foreach (IList<CurveLoop> loops in profileCurveLoops)\n         {\n            GeometryObject myObj = GeometryCreationUtilities.CreateSweptGeometry(directrixInLcs, 0, startParam, loops, solidOptions);\n            if (myObj != null)\n               geomObjs.Add(myObj);\n         }\n\n         return geomObjs;\n      }\n\n\n      /// <summary>\n      /// Create geometry for a particular representation item.\n      /// </summary>\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \n         Transform scaledLcs, string guid)\n      {\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\n\n         IList<GeometryObject> sweptAreaGeometries = CreateGeometryInternal(shapeEditScope, scaledLcs, guid);\n         if (sweptAreaGeometries != null)\n         {\n            foreach (GeometryObject sweptAreaGeometry in sweptAreaGeometries)\n            {\n               shapeEditScope.AddGeometry(IFCSolidInfo.Create(Id, sweptAreaGeometry));\n            }\n         }\n      }\n\n      /// <summary>\n      /// Constructor to create an IFCSectionedSolidHorizonal object.\n      /// </summary>\n      /// <param name=\"ifcSectionedSolidHorizontal\">Handle representing IFCSectionedSolidHorizontal.</param>\n      protected IFCSectionedSolidHorizontal(IFCAnyHandle ifcSectionedSolidHorizontal)\n      {\n         Process(ifcSectionedSolidHorizontal);\n      }\n\n\n      /// <summary>\n      /// Create IFCSectionedSolidHorizontal from Handle.\n      /// </summary>\n      /// <param name=\"ifcSectionedSolidHorizontal\">Handle representing IFCSectionedSolidHorizontal</param>\n      /// <returns>IFCSectionedSolidHoriontal Object</returns>\n      public static IFCSectionedSolidHorizontal ProcessIFCSectionedSolidHorizontal (IFCAnyHandle ifcSectionedSolidHorizontal)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSectionedSolidHorizontal))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSurfaceCurveSweptAreaSolid);\n            return null;\n         }\n\n         IFCEntity sectionedSolidHorizonal;\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSectionedSolidHorizontal.StepId, out sectionedSolidHorizonal))\n            return (sectionedSolidHorizonal as IFCSectionedSolidHorizontal);\n\n         return new IFCSectionedSolidHorizontal(ifcSectionedSolidHorizontal);\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSectionedSurface.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Import.Enums;\nusing Revit.IFC.Import.Geometry;\nusing Revit.IFC.Import.Utility;\n\nnamespace Revit.IFC.Import.Data\n{\n   /// <summary>\n   /// From IFC Documentation:\n   /// A kind of surface constructed by sweeping potentially varying open cross sections along a curve horizontally (or near horizontally).\n   /// The surface is generated by sweeping the CrossSections between CrossSectionPositions; \n   /// linear interpolation is assumed, unless transitions curves between cross section points are indicated by OpenCrossProfileDef.Tags. \n   /// The CrossSections are oriented with the Y axis of each profile facing upwards in +Z direction or vertically perpendicular to the Directrix,\n   /// depending on the Attribute FixedAxisVertical value\n   /// \n   /// The Geometry that this is supposed to represent is multiple potentially closed swept surfaces.  Not a swept\n   /// solid.  For simplicity, this will take the first curve from the first ProfileDef and create a RuledSurface from that.\n   /// This will at least display something for the IFCSectionedSurface.\n   /// </summary>\n   public class IFCSectionedSurface : IFCSurface\n   {\n      /// <summary>\n      /// Curve along which cross sections occur.\n      /// </summary>\n      public IFCCurve Directrix { get; set; } = null;\n\n      /// <summary>\n      /// Cross sections.  Because of current limitations, only using the first cross section.\n      /// </summary>\n      public IFCProfileDef CrossSection { get; set; } = null;\n\n      /// <summary>\n      /// Get the Transform for the Directrix.\n      /// Note:  This is taken largely from IFCSweptSurface, since that creates a Ruled Surface,\n      /// which is what our geometry supports.\n      /// </summary>\n      /// <param name=\"pointOnSurface\"></param>\n      /// <returns>Transform to the Ruled Surface that (very) loosely represents the IFCSectionedSurface.</returns>\n      public override Transform GetTransformAtPoint(XYZ pointOnSurface)\n      {\n         Transform retVal = Transform.Identity;\n         XYZ originPoint = Directrix?.Curve.GetEndPoint(0);\n         retVal.Origin = originPoint;\n         return retVal;\n      }\n\n\n      /// <summary>\n      /// Default Constructor\n      /// </summary>\n      protected IFCSectionedSurface()\n      {\n      }\n\n\n      /// <summary>\n      /// Process IFCSectionedSurface Attributes\n      /// </summary>\n      /// <param name=\"ifcSectionedSurface\"></param>\n      protected override void Process(IFCAnyHandle ifcSectionedSurface)\n      {\n         base.Process(ifcSectionedSurface);\n\n         IFCAnyHandle directrix = IFCAnyHandleUtil.GetInstanceAttribute(ifcSectionedSurface, \"Directrix\");\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(directrix))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcCurve);\n            return;\n         }\n         Directrix = IFCCurve.ProcessIFCCurve(directrix);\n\n         IList<IFCAnyHandle> crossSections = IFCAnyHandleUtil.GetAggregateInstanceAttribute <List<IFCAnyHandle>>(ifcSectionedSurface, \"CrossSections\");\n         if (crossSections?.Count > 0)\n         {\n            IFCAnyHandle firstCrossSection = crossSections[0];\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(firstCrossSection))\n            {\n               Importer.TheLog.LogNullError(IFCEntityType.IfcProfileDef);\n               return;\n            }\n\n            CrossSection = IFCProfileDef.ProcessIFCProfileDef(firstCrossSection);\n         }\n      }\n\n\n      /// <summary>\n      /// Create IFCSectionedSurface with handle.\n      /// </summary>\n      /// <param name=\"ifCSectionedSurface\">Handle for ifcSectionedSurface.</param>\n      protected IFCSectionedSurface(IFCAnyHandle ifCSectionedSurface)\n      {\n         Process(ifCSectionedSurface);\n      }\n\n\n      /// <summary>\n      /// Process the IFCSectionedSurface.\n      /// </summary>\n      /// <param name=\"ifcSectionedSurface\">Handle for the ifcSectionedSurface</param>\n      /// <returns>IFCSectionedSurface object</returns>\n      public static IFCSectionedSurface ProcessIFCSectionedSurface (IFCAnyHandle ifcSectionedSurface)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSectionedSurface))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSectionedSurface);\n            return null;\n         }\n\n         IFCEntity sectionedSurface;\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSectionedSurface.StepId, out sectionedSurface))\n            return sectionedSurface as IFCSectionedSurface;\n\n         return new IFCSectionedSurface(ifcSectionedSurface);\n      }\n\n\n      /// <summary>\n      /// This will just create a Ruled Surface, like IFCSurfaceOfLinearExtrusion\n      /// </summary>\n      /// <param name=\"lcs\">The local coordinate system for the surface.  Can be null.</param>\n      /// <returns>The surface that identifies the internal shape of the face.</returns>\n      public override Surface GetSurface(Transform lcs)\n      {\n         // Currently there is no easy way to get the curve from the IFCProfile, so for now we assume that\n         // the SweptCurve is an IFCSimpleProfile and its outer curve only contains one curve, which is the \n         // profile curve that we want\n         IFCSimpleProfile simpleSweptCurve = CrossSection as IFCSimpleProfile;\n         if (simpleSweptCurve == null)\n         {\n            Importer.TheLog.LogError(Id, \"Currently only support IFCSimpleProfile for Cross-section\", false);\n            return null;\n         }\n\n         CurveLoop outerCurve = simpleSweptCurve?.GetTheOuterCurveLoop();\n         CurveLoopIterator it = outerCurve?.GetCurveLoopIterator();\n         Curve sweptCurve = it.Current;\n         Curve profileCurve = Directrix?.Curve;\n\n         if ((sweptCurve == null) || (profileCurve == null))\n         {\n            Importer.TheLog.LogError(Id, \"At least one of the curves for the Ruled Surface is null\", false);\n            return null;\n         }\n         \n         return RuledSurface.Create(profileCurve, sweptCurve);\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCShellBasedSurfaceModel.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCShellBasedSurfaceModel : IFCRepresentationItem\r\n   {\r\n      // Only IfcOpenShell and IfcClosedShell will be permitted.\r\n      ISet<IFCConnectedFaceSet> m_Shells = null;\r\n\r\n      /// <summary>\r\n      /// The shells of the surface model.\r\n      /// </summary>\r\n      public ISet<IFCConnectedFaceSet> Shells\r\n      {\r\n         get\r\n         {\r\n            if (m_Shells == null)\r\n               m_Shells = new HashSet<IFCConnectedFaceSet>();\r\n            return m_Shells;\r\n         }\r\n      }\r\n\r\n      protected IFCShellBasedSurfaceModel()\r\n      {\r\n      }\r\n\r\n      private void WarnOnTooFewCreatedFaces(IList<GeometryObject> geomObjs, int numExpectedFaces)\r\n      {\r\n         if (geomObjs == null)\r\n            return;\r\n\r\n         int numCreatedFaces = 0;\r\n\r\n         foreach (GeometryObject geomObj in geomObjs)\r\n         {\r\n            if (geomObj is Solid)\r\n               numCreatedFaces += (geomObj as Solid).Faces.Size;\r\n            else if (geomObj is Mesh)\r\n               numCreatedFaces += (geomObj as Mesh).NumTriangles;\r\n            else\r\n               return;   // We don't know what this is, and can't count it.\r\n         }\r\n\r\n         // Note that if we created a Mesh, the number of created faces can be larger than the number of expected faces, which may have been polygons with more than 3 sides.\r\n         // As such, this warning can't guarantee it will always complain.\r\n         if (numCreatedFaces < numExpectedFaces)\r\n         {\r\n            Importer.TheLog.LogWarning\r\n                (Id, \"Created \" + numCreatedFaces + \" valid faces out of \" + numExpectedFaces + \" total.  This may be due to slivery triangles or other similar geometric issues.\", false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The shape edit scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      /// <returns>The created geometry.</returns>\r\n      /// <remarks>As this doesn't inherit from IfcSolidModel, this is a non-virtual CreateSolid function.</remarks>\r\n      protected IList<GeometryObject> CreateGeometry(\r\n         IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid)\r\n      {\r\n         if (Shells.Count == 0)\r\n            return null;\r\n\r\n         IList<GeometryObject> geomObjs = null;\r\n         int numExpectedFaces = 0;\r\n         foreach (IFCConnectedFaceSet faceSet in Shells)\r\n         {\r\n            numExpectedFaces += faceSet.Faces.Count;\r\n         }\r\n\r\n         // We are going to start by trying to create a Solid, even if we are passed a shell-based model, since we can frequently\r\n         // do so.  However, if we have even one missing face, we'll loosen the requirements and revert to mesh only.\r\n         for (int pass = 0; pass < 2; pass++)\r\n         {\r\n            IFCImportShapeEditScope.BuildPreferenceType target =\r\n               (pass == 0) ? IFCImportShapeEditScope.BuildPreferenceType.AnyGeometry : IFCImportShapeEditScope.BuildPreferenceType.AnyMesh;\r\n            using (IFCImportShapeEditScope.BuildPreferenceSetter setter =\r\n               new IFCImportShapeEditScope.BuildPreferenceSetter(shapeEditScope, target))\r\n            {\r\n               using (BuilderScope bs = shapeEditScope.InitializeBuilder(IFCShapeBuilderType.TessellatedShapeBuilder))\r\n               {\r\n                  TessellatedShapeBuilderScope tsBuilderScope = shapeEditScope.BuilderScope as TessellatedShapeBuilderScope;\r\n\r\n                  tsBuilderScope.StartCollectingFaceSet();\r\n\r\n                  foreach (IFCConnectedFaceSet faceSet in Shells)\r\n                  {\r\n                     faceSet.CreateShape(shapeEditScope, scaledLcs, guid);\r\n                  }\r\n\r\n                  // If we are on our first pass, try again.  If we are on our second pass, warn and create the best geometry we can.\r\n                  if (tsBuilderScope.CreatedFacesCount != numExpectedFaces)\r\n                  {\r\n                     if (pass == 0)\r\n                        continue;\r\n\r\n                     Importer.TheLog.LogWarning\r\n                         (Id, \"Processing \" + tsBuilderScope.CreatedFacesCount + \" valid faces out of \" + numExpectedFaces + \" total.\", false);\r\n                  }\r\n\r\n                  geomObjs = tsBuilderScope.CreateGeometry(guid);\r\n\r\n                  WarnOnTooFewCreatedFaces(geomObjs, numExpectedFaces);\r\n\r\n                  break;\r\n               }\r\n            }\r\n         }\r\n\r\n         if (geomObjs == null || geomObjs.Count == 0)\r\n         {\r\n            if (numExpectedFaces != 0)\r\n            {\r\n               Importer.TheLog.LogError\r\n                   (Id, \"No valid geometry found.  This may be due to slivery triangles or other similar geometric issues.\", false);\r\n               return null;\r\n            }\r\n         }\r\n\r\n         return geomObjs;\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcShellBasedSurfaceModel)\r\n      {\r\n         base.Process(ifcShellBasedSurfaceModel);\r\n\r\n         ISet<IFCAnyHandle> ifcShells = IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcShellBasedSurfaceModel, \"SbsmBoundary\");\r\n         foreach (IFCAnyHandle ifcShell in ifcShells)\r\n         {\r\n            IFCConnectedFaceSet shell = IFCConnectedFaceSet.ProcessIFCConnectedFaceSet(ifcShell);\r\n            if (shell != null)\r\n            {\r\n               shell.AllowInvalidFace = true;\r\n               Shells.Add(shell);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid)\r\n      {\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n\r\n         // Ignoring Inner shells for now.\r\n         if (Shells.Count != 0)\r\n         {\r\n            IList<GeometryObject> createdGeometries = CreateGeometry(shapeEditScope, scaledLcs, guid);\r\n            if (createdGeometries != null)\r\n            {\r\n               foreach (GeometryObject createdGeometry in createdGeometries)\r\n               {\r\n                  shapeEditScope.AddGeometry(IFCSolidInfo.Create(Id, createdGeometry));\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      protected IFCShellBasedSurfaceModel(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCShellBasedSurfaceModel object from a handle of type IfcShellBasedSurfaceModel.\r\n      /// </summary>\r\n      /// <param name=\"ifcShellBasedSurfaceModel\">The IFC handle.</param>\r\n      /// <returns>The IFCShellBasedSurfaceModel object.</returns>\r\n      public static IFCShellBasedSurfaceModel ProcessIFCShellBasedSurfaceModel(IFCAnyHandle ifcShellBasedSurfaceModel)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcShellBasedSurfaceModel))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcShellBasedSurfaceModel);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity shellBasedSurfaceModel;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcShellBasedSurfaceModel.StepId, out shellBasedSurfaceModel))\r\n            shellBasedSurfaceModel = new IFCShellBasedSurfaceModel(ifcShellBasedSurfaceModel);\r\n         return (shellBasedSurfaceModel as IFCShellBasedSurfaceModel);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSimpleProperty.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcSimpleProperty\r\n   /// </summary>\r\n   public class IFCSimpleProperty : IFCProperty\r\n   {\r\n      /// <summary>\r\n      /// The property values.\r\n      /// </summary>\r\n      public IList<IFCPropertyValue> IFCPropertyValues { get; private set; } = new List<IFCPropertyValue>();\r\n\r\n      /// <summary>\r\n      /// The unit.\r\n      /// </summary>\r\n      public IFCUnit IFCUnit { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Returns the property value as a string, for Set().\r\n      /// </summary>\r\n      /// <returns>The property value as a string.</returns>\r\n      public override string PropertyValueAsString()\r\n      {\r\n         int numValues = (IFCPropertyValues != null) ? IFCPropertyValues.Count : 0;\r\n         if (numValues == 0)\r\n            return string.Empty;\r\n\r\n         string propertyValue = IFCPropertyValues[0].ValueAsString();\r\n         for (int ii = 1; ii < numValues; ii++)\r\n         {\r\n            if (propertyValue != \"\")\r\n               propertyValue += \"; \";\r\n            propertyValue += IFCPropertyValues[ii].ValueAsString();\r\n         }\r\n\r\n         return propertyValue;\r\n      }\r\n\r\n      protected IFCSimpleProperty()\r\n      {\r\n      }\r\n\r\n      protected IFCSimpleProperty(IFCAnyHandle simpleProperty)\r\n      {\r\n         Process(simpleProperty);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC simple property.\r\n      /// </summary>\r\n      /// <param name=\"simpleProperty\">The IfcSimpleProperty object.</param>\r\n      /// <returns>The IFCSimpleProperty object.</returns>\r\n      override protected void Process(IFCAnyHandle simpleProperty)\r\n      {\r\n         base.Process(simpleProperty);\r\n\r\n         Name = IFCImportHandleUtil.GetRequiredStringAttribute(simpleProperty, \"Name\", false);\r\n         if (string.IsNullOrWhiteSpace(Name))\r\n         {\r\n            Name = Properties.Resources.IFCUnknownProperty + \" \" + Id;\r\n         }\r\n\r\n         // IfcPropertyBoundedValue and IfcPropertyTableValue has already been split off into their own classes.  Need to do the same with the rest here.\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(simpleProperty, IFCEntityType.IfcPropertySingleValue))\r\n            ProcessIFCPropertySingleValue(simpleProperty);\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(simpleProperty, IFCEntityType.IfcPropertyEnumeratedValue))\r\n            ProcessIFCPropertyEnumeratedValue(simpleProperty);\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(simpleProperty, IFCEntityType.IfcPropertyReferenceValue))\r\n            ProcessIFCPropertyReferenceValue(simpleProperty);\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(simpleProperty, IFCEntityType.IfcPropertyListValue))\r\n            ProcessIFCPropertyListValue(simpleProperty);\r\n         else if (!IFCAnyHandleUtil.IsSubTypeOf(simpleProperty, IFCEntityType.IfcPropertyBoundedValue) &&\r\n                  !IFCAnyHandleUtil.IsSubTypeOf(simpleProperty, IFCEntityType.IfcPropertyTableValue))\r\n            Importer.TheLog.LogUnhandledSubTypeError(simpleProperty, \"IfcSimpleProperty\", true);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC simple property.\r\n      /// </summary>\r\n      /// <param name=\"ifcSimpleProperty\">The IfcSimpleProperty handle.</param>\r\n      /// <returns>The IFCSimpleProperty object.</returns>\r\n      public static IFCSimpleProperty ProcessIFCSimpleProperty(IFCAnyHandle ifcSimpleProperty)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSimpleProperty))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSimpleProperty);\r\n            return null;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcSimpleProperty, IFCEntityType.IfcPropertyBoundedValue))\r\n            return IFCPropertyBoundedValue.ProcessIFCPropertyBoundedValue(ifcSimpleProperty);\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcSimpleProperty, IFCEntityType.IfcPropertyTableValue))\r\n            return IFCPropertyTableValue.ProcessIFCPropertyTableValue(ifcSimpleProperty);\r\n\r\n         // Other subclasses are handled below for now.\r\n         IFCEntity simpleProperty;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSimpleProperty.StepId, out simpleProperty))\r\n            return (simpleProperty as IFCSimpleProperty);\r\n\r\n         return new IFCSimpleProperty(ifcSimpleProperty);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC property single value.\r\n      /// </summary>\r\n      /// <param name=\"propertySingleValue\">The IfcPropertySingleValue object.</param>\r\n      void ProcessIFCPropertySingleValue(IFCAnyHandle propertySingleValue)\r\n      {\r\n         IFCPropertyValues.Add(new IFCPropertyValue(this, propertySingleValue.GetAttribute(\"NominalValue\"), false));\r\n         ProcessIFCSimplePropertyUnit(this, propertySingleValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC property list value.\r\n      /// </summary>\r\n      /// <param name=\"propertyListValue\">The IfcPropertyListValue object.</param>\r\n      void ProcessIFCPropertyListValue(IFCAnyHandle propertyListValue)\r\n      {\r\n         List<IFCData> listValues = IFCAnyHandleUtil.GetAggregateAttribute<List<IFCData>>(propertyListValue, \"ListValues\");\r\n         foreach (IFCData value in listValues)\r\n         {\r\n            IFCPropertyValues.Add(new IFCPropertyValue(this, value, false));\r\n         }\r\n         ProcessIFCSimplePropertyUnit(this, propertyListValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC property enumerated value.\r\n      /// </summary>\r\n      /// <param name=\"propertyEnumeratedValue\">The IfcPropertyEnumeratedValue object.</param>\r\n      void ProcessIFCPropertyEnumeratedValue(IFCAnyHandle propertyEnumeratedValue)\r\n      {\r\n         List<IFCData> enumValues = IFCAnyHandleUtil.GetAggregateAttribute<List<IFCData>>(propertyEnumeratedValue, \"EnumerationValues\");\r\n         if (enumValues != null)\r\n         {\r\n            foreach (IFCData value in enumValues)\r\n            {\r\n               IFCPropertyValues.Add(new IFCPropertyValue(this, value, false));\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC property reference value.\r\n      /// </summary>\r\n      /// <param name=\"propertyReferenceValue\">The IfcPropertyReferenceValue object.</param>\r\n      void ProcessIFCPropertyReferenceValue(IFCAnyHandle propertyReferenceValue)\r\n      {\r\n         IFCData referenceValue = propertyReferenceValue.GetAttribute(\"PropertyReference\");\r\n         IFCPropertyValues.Add(new IFCPropertyValue(this, referenceValue, false));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC unit in the property.\r\n      /// </summary>\r\n      /// <param name=\"ifcSimpleProperty\">The simple property.</param>\r\n      /// <param name=\"simplePropertyHandle\">The simple property handle.</param>\r\n      static protected void ProcessIFCSimplePropertyUnit(IFCSimpleProperty ifcSimpleProperty, IFCAnyHandle simplePropertyHandle)\r\n      {\r\n         IFCPropertyValue firstPropertyValue = (ifcSimpleProperty.IFCPropertyValues.Count > 0) ? ifcSimpleProperty.IFCPropertyValues[0] : null;\r\n         ifcSimpleProperty.IFCUnit = ProcessUnit(simplePropertyHandle, \"Unit\", firstPropertyValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IFC unit.\r\n      /// </summary>\r\n      /// <param name=\"simplePropertyHandle\">The simple property.</param>\r\n      /// <param name=\"unitAttributeName\">The name of unit attribute.</param>\r\n      /// <param name=\"propertyValue\">The property value.</param>\r\n      static protected IFCUnit ProcessUnit(IFCAnyHandle simplePropertyHandle, string unitAttributeName, IFCPropertyValue propertyValue)\r\n      {\r\n         IFCAnyHandle ifcUnitHandle = IFCImportHandleUtil.GetOptionalInstanceAttribute(simplePropertyHandle, unitAttributeName);\r\n         IFCUnit ifcUnit = (ifcUnitHandle != null) ? IFCUnit.ProcessIFCUnit(ifcUnitHandle) : null;\r\n         if (ifcUnit == null)\r\n         {\r\n            if (propertyValue != null)\r\n            {\r\n               if (propertyValue != null && propertyValue.HasValue() &&\r\n                   (propertyValue.Type == IFCDataPrimitiveType.Integer) || (propertyValue.Type == IFCDataPrimitiveType.Double))\r\n               {\r\n                  string unitTypeName;\r\n                  ForgeTypeId specTypeId = IFCDataUtil.GetUnitTypeFromData(propertyValue.Value, new ForgeTypeId(), out unitTypeName);\r\n                  if (!specTypeId.Empty())\r\n                     ifcUnit = IFCImportFile.TheFile.IFCUnits.GetIFCProjectUnit(specTypeId);\r\n                  else\r\n                     Importer.TheLog.LogWarning(simplePropertyHandle.StepId, \"Unhandled unit type: \" + unitTypeName, true);\r\n               }\r\n            }\r\n         }\r\n\r\n         return ifcUnit;\r\n      }\r\n\r\n      protected string FormatPropertyValue(IFCPropertyValue propertyValue)\r\n      {\r\n         if (propertyValue.IFCUnit != null)\r\n         {\r\n            FormatValueOptions formatValueOptions = new FormatValueOptions();\r\n            FormatOptions specFormatOptions = IFCImportFile.TheFile.Document.GetUnits().GetFormatOptions(propertyValue.IFCUnit.Spec);\r\n            specFormatOptions.Accuracy = 1e-8;\r\n            if (specFormatOptions.CanSuppressTrailingZeros())\r\n               specFormatOptions.SuppressTrailingZeros = true;\r\n            formatValueOptions.SetFormatOptions(specFormatOptions);\r\n\r\n            // If ScaleValues is false, value is in source file units, but 'UnitFormatUtils.Format' expects\r\n            // it in internal units and it then converts it to display units, which should be the same as\r\n            // the source file units.\r\n            double value = Importer.TheProcessor.ScaleValues ?\r\n               propertyValue.AsDouble() :\r\n               UnitUtils.ConvertToInternalUnits(propertyValue.AsDouble(), specFormatOptions.GetUnitTypeId());\r\n\r\n            return UnitFormatUtils.Format(IFCImportFile.TheFile.Document.GetUnits(), propertyValue.IFCUnit.Spec, value, false, formatValueOptions);\r\n         }\r\n         else\r\n            return propertyValue.ValueAsString();\r\n      }\r\n\r\n\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSite.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcSite.\r\n   /// </summary>\r\n   public class IFCSite : IFCSpatialStructureElement\r\n   {\r\n      /// <summary>\r\n      /// Check if an object placement is relative to the site's placement, and fix it if necessary.\r\n      /// </summary>\r\n      /// <param name=\"productEntity\">The entity being checked.</param>\r\n      /// <param name=\"productStepId\">The id of the entity being checked.</param>\r\n      /// <param name=\"objectPlacement\">The object placement handle.</param>\r\n      public static void CheckObjectPlacementIsRelativeToSite(IFCProduct productEntity, int productStepId,\r\n         IFCAnyHandle objectPlacement)\r\n      {\r\n         if (BaseSiteOffset == null)\r\n            return;\r\n\r\n         IFCLocation productEntityLocation = productEntity.ObjectLocation;\r\n         if (productEntityLocation != null && productEntityLocation.RelativeToSite == false)\r\n         {\r\n            if (!(productEntity is IFCSite))\r\n            {\r\n               if (!IFCAnyHandleUtil.IsSubTypeOf(objectPlacement, IFCEntityType.IfcGridPlacement))\r\n               {\r\n                  Importer.TheLog.LogWarning(productStepId, \"The local placement (#\" + objectPlacement.StepId + \") of this entity was not relative to the IfcSite's local placement, patching.\", false);\r\n               }\r\n\r\n               if (productEntityLocation.RelativeTransform == null)\r\n               {\r\n                  productEntityLocation.RelativeTransform = Transform.CreateTranslation(-BaseSiteOffset);\r\n               }\r\n               else\r\n               {\r\n                  productEntityLocation.RelativeTransform.Origin -= BaseSiteOffset;\r\n               }\r\n            }\r\n            productEntityLocation.RelativeToSite = true;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCSite from the IfcSite handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcIFCSite\">The IfcSite handle.</param>\r\n      protected IFCSite(IFCAnyHandle ifcIFCSite)\r\n      {\r\n         Process(ifcIFCSite);\r\n      }\r\n\r\n      private double GetLatLongScale(int index)\r\n      {\r\n         switch (index)\r\n         {\r\n            case 0:\r\n               return 1.0;\r\n            case 1:\r\n               return 60.0;\r\n            case 2:\r\n               return 3600.0;\r\n            case 3:\r\n               return 3600000000.0;\r\n         }\r\n\r\n         return 1.0;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcSite attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcIFCSite\">The IfcSite handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcIFCSite)\r\n      {\r\n         base.Process(ifcIFCSite);\r\n\r\n         RefElevation = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(ifcIFCSite, \"RefElevation\", 0.0);\r\n\r\n         IList<int> refLatitudeList = IFCAnyHandleUtil.GetAggregateIntAttribute<List<int>>(ifcIFCSite, \"RefLatitude\");\r\n         IList<int> refLongitudeList = IFCAnyHandleUtil.GetAggregateIntAttribute<List<int>>(ifcIFCSite, \"RefLongitude\");\r\n\r\n         if (refLatitudeList != null)\r\n         {\r\n            RefLatitude = 0.0;\r\n            int numLats = Math.Min(refLatitudeList.Count, 4);   // Only support up to degress, minutes, seconds, and millionths of seconds.\r\n            for (int ii = 0; ii < numLats; ii++)\r\n            {\r\n               RefLatitude += ((double)refLatitudeList[ii]) / GetLatLongScale(ii);\r\n            }\r\n         }\r\n\r\n         if (refLongitudeList != null)\r\n         {\r\n            RefLongitude = 0.0;\r\n            int numLongs = Math.Min(refLongitudeList.Count, 4);   // Only support up to degress, minutes, seconds, and millionths of seconds.\r\n            for (int ii = 0; ii < numLongs; ii++)\r\n            {\r\n               RefLongitude += ((double)refLongitudeList[ii]) / GetLatLongScale(ii);\r\n            }\r\n         }\r\n\r\n         LandTitleNumber = IFCAnyHandleUtil.GetStringAttribute(ifcIFCSite, \"LandTitleNumber\");\r\n\r\n         IFCAnyHandle ifcPostalAddress = IFCImportHandleUtil.GetOptionalInstanceAttribute(ifcIFCSite, \"SiteAddress\");\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPostalAddress))\r\n            SiteAddress = IFCPostalAddress.ProcessIFCPostalAddress(ifcPostalAddress);\r\n      }\r\n\r\n      /// <summary>\r\n      /// The site elevation, in Revit internal units.\r\n      /// </summary>\r\n      public double RefElevation { get; protected set; } = 0.0;\r\n\r\n      /// <summary>\r\n      /// The site latitude, in degrees.\r\n      /// </summary>\r\n      public double? RefLatitude { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The site longitude, in degrees.\r\n      /// </summary>\r\n      public double? RefLongitude { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The Land Title number.\r\n      /// </summary>\r\n      public string LandTitleNumber { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The optional address given to the site for postal purposes.\r\n      /// </summary>\r\n      public IFCPostalAddress SiteAddress { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Processes an IfcSite object.\r\n      /// </summary>\r\n      /// <param name=\"ifcSite\">The IfcSite handle.</param>\r\n      /// <returns>The IFCSite object.</returns>\r\n      public static IFCSite ProcessIFCSite(IFCAnyHandle ifcSite)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSite))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSite);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity site;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSite.StepId, out site))\r\n            return (site as IFCSite);\r\n\r\n         return new IFCSite(ifcSite);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Allow for override of IfcObjectDefinition shared parameter names.\r\n      /// </summary>\r\n      /// <param name=\"name\">The enum corresponding of the shared parameter.</param>\r\n      /// <param name=\"isType\">True if the shared parameter is a type parameter.</param>\r\n      /// <returns>The name appropriate for this IfcObjectDefinition.</returns>\r\n      public override string GetSharedParameterName(IFCSharedParameters name, bool isType)\r\n      {\r\n         if (!isType)\r\n         {\r\n            switch (name)\r\n            {\r\n               case IFCSharedParameters.IfcName:\r\n                  return \"SiteName\";\r\n               case IFCSharedParameters.IfcDescription:\r\n                  return \"SiteDescription\";\r\n            }\r\n         }\r\n\r\n         return base.GetSharedParameterName(name, isType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the element ids created for this entity, for summary logging.\r\n      /// </summary>\r\n      /// <param name=\"createdElementIds\">The creation list.</param>\r\n      /// <remarks>May contain InvalidElementId; the caller is expected to remove it.</remarks>\r\n      public override void GetCreatedElementIds(ISet<ElementId> createdElementIds)\r\n      {\r\n         // If we used ProjectInformation, don't report that.\r\n         if (CreatedElementId != ElementId.InvalidElementId && CreatedElementId != Importer.TheCache.ProjectInformationId)\r\n         {\r\n            createdElementIds.Add(CreatedElementId);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit elements based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      protected override void Create(Document doc)\r\n      {\r\n         base.Create(doc);\r\n\r\n         if ((Id == Importer.TheCache.DefaultSiteId) && (CreatedElementId == ElementId.InvalidElementId))\r\n            CreatedElementId = Importer.TheCache.ProjectInformationId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The base site offset for this file.\r\n      /// </summary>\r\n      /// <remarks>This corresponds to the ProjectPosition, and should be\r\n      /// used to offset objects placed not relative to a site.</remarks>\r\n      public static XYZ BaseSiteOffset { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Iterates through all of the IFCSites belonging to a an IFCProject, and finds the Default one.\r\n      /// The default IFCSite is one that is composed of an IFCBuilding (or the first IFCSite if no IFCBuildings are found).\r\n      /// </summary>\r\n      /// <param name=\"sites\">List of IFCSites in file.</param>\r\n      public static void FindDefaultSite(IList<IFCSite> sites)\r\n      {\r\n         // If no sites, then stop the processing.\r\n         //\r\n         if ((sites?.Count ?? 0) == 0)\r\n            return;\r\n\r\n         IFCSite firstSite = sites[0];\r\n         if (firstSite == null)\r\n            return;\r\n\r\n         Importer.TheCache.DefaultSiteId = firstSite.Id;\r\n\r\n         foreach (IFCSite site in sites)\r\n         {\r\n            foreach (IFCObjectDefinition objectDefinition in site.ComposedObjectDefinitions)\r\n            {\r\n               if (objectDefinition is IFCBuilding)\r\n               {\r\n                  Importer.TheCache.DefaultSiteId = site.Id;\r\n                  return;\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      public static void ProcessSiteLocations(Document doc, IList<IFCSite> sites)\r\n      {\r\n         BaseSiteOffset = null;\r\n\r\n         // Ideally, in most cases, this routine will do nothing.  In particular, that is \r\n         // true if the project has an arbitrary number of sites that are \"close\" to the\r\n         // origin.\r\n\r\n         if (sites == null || sites.Count == 0)\r\n            return;\r\n\r\n         ProjectLocation projectLocation = doc.ActiveProjectLocation;\r\n         if (projectLocation == null)\r\n            return;\r\n\r\n         // If there is one site, and it is far from the origin, then we will move the site\r\n         // close to the origin, give a warning, and set the shared coordinates in the file.\r\n\r\n         // If there is more than one site, and at least one site is far from the origin:\r\n         // 1. If all of the sites have an origin close to one another, then we will move the \r\n         // site close to the origin based on the first site encountered, give a warning, \r\n         // and set the shared coordinates in the file and the rest of the sites relative to\r\n         // the first site.\r\n         // 2. If the sites do not have origins close to one another, then we will do nothing\r\n         // and give an error that the site is far from the origin and may have poor\r\n         // performance and appearance.\r\n         int numSites = sites.Count;\r\n         bool hasSiteLocation = false;\r\n\r\n         // First pass: deal with latitude and longitude.\r\n         for (int ii = 0; ii < numSites; ii++)\r\n         {\r\n            IFCSite currSite = sites[ii];\r\n\r\n            // Set the project latitude and longitude if the information is available, and\r\n            // it hasn't already been set.\r\n            SiteLocation siteLocation = projectLocation.GetSiteLocation();\r\n            if (siteLocation != null)\r\n            {\r\n               // Some Tekla files may have invalid information here that would otherwise cause the\r\n               // link to fail.  Recover with a warning.\r\n               try\r\n               {\r\n                  bool foundSiteLocation = (currSite.RefLatitude.HasValue && currSite.RefLongitude.HasValue);\r\n                  if (foundSiteLocation)\r\n                  {\r\n                     if (hasSiteLocation)\r\n                     {\r\n                        Importer.TheLog.LogWarning(currSite.Id, \"Duplicate latitude or longitude value supplied for IFCSITE, ignoring.\", false);\r\n                     }\r\n                     else\r\n                     {\r\n                        hasSiteLocation = true;\r\n                        siteLocation.Latitude = currSite.RefLatitude.Value * Math.PI / 180.0;\r\n                        siteLocation.Longitude = currSite.RefLongitude.Value * Math.PI / 180.0;\r\n                     }\r\n                  }\r\n               }\r\n               catch (Exception ex)\r\n               {\r\n                  Importer.TheLog.LogWarning(currSite.Id, \"Invalid latitude or longitude value supplied for IFCSITE: \" + ex.Message, false);\r\n               }\r\n            }\r\n         }\r\n\r\n         int? distantOriginFirstSiteId = null;\r\n\r\n         for (int ii = 0; ii < numSites; ii++)\r\n         {\r\n            IFCSite currSite = sites[ii];\r\n\r\n            // This is effectively no offset.  This is good, as long as we don't have\r\n            // a distance origin.  In that case, we will warn and not do any special offsets.\r\n            if (currSite.ObjectLocation?.RelativeTransform == null)\r\n            {\r\n               if (distantOriginFirstSiteId.HasValue)\r\n               {\r\n                  BaseSiteOffset = null;\r\n                  break;\r\n               }\r\n               continue;\r\n            }\r\n\r\n            XYZ projectLoc = currSite.ObjectLocation.RelativeTransform.Origin;\r\n            XYZ offset = new XYZ(projectLoc.X, projectLoc.Y, projectLoc.Z);\r\n            if (XYZ.IsWithinLengthLimits(offset))\r\n            {\r\n               if (distantOriginFirstSiteId.HasValue)\r\n               {\r\n                  BaseSiteOffset = null;\r\n                  break;\r\n               }\r\n               continue;\r\n            }\r\n\r\n            if (BaseSiteOffset == null)\r\n            {\r\n               distantOriginFirstSiteId = currSite.Id;\r\n\r\n               // If the index is greater than 0, then we have found some sites close to the\r\n               // origin.  That means we have incompatible origins which is an issue.\r\n               if (ii == 0)\r\n                  BaseSiteOffset = offset;\r\n               else\r\n                  break;\r\n            }\r\n         }\r\n\r\n         if (BaseSiteOffset != null)\r\n         {\r\n            // Modify the RelativeTransforms for each of these sites.\r\n            // Note that the RelativeTransform must be defined to have gotten here.\r\n            for (int ii = 0; ii < numSites; ii++)\r\n            {\r\n               XYZ currentOffset =\r\n                  new XYZ(-BaseSiteOffset.X, -BaseSiteOffset.Y, -BaseSiteOffset.Z /*+ sites[ii].RefElevation*/);\r\n               Transform newSiteTransform = sites[ii].ObjectLocation.TotalTransform;\r\n               newSiteTransform.Origin += currentOffset;\r\n               sites[ii].ObjectLocation = IFCLocation.CreateDummyLocation(newSiteTransform);\r\n            }\r\n\r\n            // Register the offset by moving the Shared Coordinates away\r\n            if (Importer.TheOptions.HybridImportOptions != null)\r\n            {\r\n               // If we are in hybrid mode, we've already moved the project.  Just change the large offset.\r\n               Importer.TheHybridInfo.LargeCoordinateOriginOffset += BaseSiteOffset;\r\n            }\r\n            else\r\n            {\r\n               ProjectPosition pPos = projectLocation.GetProjectPosition(XYZ.Zero);\r\n               pPos.EastWest += BaseSiteOffset.X;\r\n               pPos.NorthSouth += BaseSiteOffset.Y;\r\n               pPos.Elevation += BaseSiteOffset.Z;\r\n               projectLocation.SetProjectPosition(XYZ.Zero, pPos);\r\n            }\r\n         }\r\n         else\r\n         {\r\n            // In this case, we just have to make sure that the RefElevation is included in\r\n            // the site transform.\r\n            for (int ii = 0; ii < numSites; ii++)\r\n            {\r\n               if (MathUtil.IsAlmostZero(sites[ii].RefElevation))\r\n                  continue;\r\n\r\n               if (sites[ii].ObjectLocation == null || sites[ii].ObjectLocation.RelativeTransform == null)\r\n               {\r\n                  XYZ currentOffset = XYZ.Zero;\r\n                  sites[ii].ObjectLocation = IFCLocation.CreateDummyLocation(Transform.CreateTranslation(currentOffset));\r\n               }\r\n               else\r\n               {\r\n                  double currRefElevation = sites[ii].RefElevation;\r\n                  double currZOffset = sites[ii].ObjectLocation.RelativeTransform.Origin.Z;\r\n                  if (!MathUtil.IsAlmostEqual(currZOffset, currRefElevation))\r\n                  {\r\n                     Transform newSiteTransform = sites[ii].ObjectLocation.TotalTransform;\r\n                     sites[ii].ObjectLocation = IFCLocation.CreateDummyLocation(newSiteTransform);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         if (BaseSiteOffset == null && distantOriginFirstSiteId.HasValue)\r\n         {\r\n            Importer.TheLog.LogError(distantOriginFirstSiteId.Value, \"There are multiple sites in the file that are located far away from each other.  This may result in poor visualization of the data.\", false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit element params based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      protected override void CreateParametersInternal(Document doc, Element element)\r\n      {\r\n         base.CreateParametersInternal(doc, element);\r\n\r\n         string parameterName = \"LandTitleNumber\";\r\n\r\n         // TODO: move this to new shared parameter names override function.\r\n         if (element is ProjectInfo)\r\n         {\r\n            parameterName = \"IfcSite \" + parameterName;\r\n         }\r\n\r\n         if (element != null)\r\n         {\r\n            string landTitleNumber = LandTitleNumber;\r\n            if (!string.IsNullOrWhiteSpace(landTitleNumber))\r\n            {\r\n               Category category = IFCPropertySet.GetCategoryForParameterIfValid(element, Id);\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, parameterName, landTitleNumber, Id);\r\n            }\r\n         }\r\n\r\n         CreatePostalParameters(doc, element, SiteAddress);\r\n\r\n         ForgeTypeId lengthUnits = null;\r\n         if (!Importer.TheProcessor.ScaleValues)\r\n         {\r\n            lengthUnits = IFCImportFile.TheFile.IFCUnits.GetIFCProjectUnit(SpecTypeId.Length)?.Unit;\r\n         }\r\n         \r\n         Importer.TheProcessor.PostProcessSite(Id, RefLatitude,\r\n            RefLongitude, RefElevation, LandTitleNumber, lengthUnits,\r\n            ObjectLocation?.TotalTransform);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSolidModel.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public abstract class IFCSolidModel : IFCRepresentationItem, IIFCBooleanOperand\r\n   {\r\n      protected IFCSolidModel()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcSolidModel)\r\n      {\r\n         base.Process(ifcSolidModel);\r\n      }\r\n\r\n      protected abstract IList<GeometryObject> CreateGeometryInternal(\r\n         IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid);\r\n\r\n      /// <summary>\r\n      /// Return geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The shape edit scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      /// <returns>Zero or more created geometries.</returns>\r\n      public IList<GeometryObject> CreateGeometry(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         if (StyledByItem != null)\r\n            StyledByItem.Create(shapeEditScope);\r\n\r\n         using (IFCImportShapeEditScope.IFCMaterialStack stack = new IFCImportShapeEditScope.IFCMaterialStack(shapeEditScope, StyledByItem, null))\r\n         {\r\n            return CreateGeometryInternal(shapeEditScope, scaledLcs, guid);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// In case of a Boolean operation failure, provide a recommended direction to shift the geometry in for a second attempt.\r\n      /// </summary>\r\n      /// <param name=\"lcs\">The local transform for this entity.</param>\r\n      /// <returns>An XYZ representing a unit direction vector, or null if no direction is suggested.</returns>\r\n      /// <remarks>If the 2nd attempt fails, a third attempt will be done with a shift in the opposite direction.</remarks>\r\n      public virtual XYZ GetSuggestedShiftDirection(Transform lcs)\r\n      {\r\n         // Sub-classes may have a better guess.\r\n         return null;\r\n      }\r\n\r\n      protected IFCSolidModel(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCSolidModel object from a handle of type IfcSolidModel.\r\n      /// </summary>\r\n      /// <param name=\"ifcSolidModel\">The IFC handle.</param>\r\n      /// <returns>The IFCSolidModel object.</returns>\r\n      public static IFCSolidModel ProcessIFCSolidModel(IFCAnyHandle ifcSolidModel)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSolidModel))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSolidModel);\r\n            return null;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcSolidModel, IFCEntityType.IfcCsgSolid))\r\n            return IFCCSGSolid.ProcessIFCCSGSolid(ifcSolidModel);\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcSolidModel, IFCEntityType.IfcManifoldSolidBrep))\r\n            return IFCManifoldSolidBrep.ProcessIFCManifoldSolidBrep(ifcSolidModel);\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcSolidModel, IFCEntityType.IfcSweptAreaSolid))\r\n            return IFCSweptAreaSolid.ProcessIFCSweptAreaSolid(ifcSolidModel);\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcSolidModel, IFCEntityType.IfcSweptDiskSolid))\r\n            return IFCSweptDiskSolid.ProcessIFCSweptDiskSolid(ifcSolidModel);\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcSolidModel, IFCEntityType.IfcSectionedSolid))\r\n            return IFCSectionedSolid.ProcessIFCSectionedSolid(ifcSolidModel);\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcSolidModel, IFCEntityType.IfcSolidModel, false);\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSolidStratum.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Revit.IFC.Common.Enums;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Import.Enums;\nusing Revit.IFC.Import.Utility;\n\nnamespace Revit.IFC.Import.Data\n{\n   /// <summary>\n   /// Representation of the concept of an identified discrete almost homogeneous solid geological or surface feature,\n   /// including discontinuities such as faults, fractures, boundaries and interfaces that are not explicitly modeled.\n   /// </summary>\n   public class IFCSolidStratum : IFCGeotechnicalStratum\n   {\n      /// <summary>\n      /// Default Constructor\n      /// </summary>\n      protected IFCSolidStratum ()\n      {\n      }\n\n      /// <summary>\n      /// Constructs IfcSolidStream from the input handle.\n      /// </summary>\n      /// <param name=\"ifcSolidStratum\">Handle representing an IfcSolidStratum.</param>\n      protected IFCSolidStratum (IFCAnyHandle ifcSolidStratum)\n      {\n         Process(ifcSolidStratum);\n      }\n\n      /// <summary>\n      /// Process attributes within an IfcSolidStratum\n      /// </summary>\n      /// <param name=\"ifcSolidStratum\">Handle representing IfcSolidStratum.</param>\n      protected override void Process(IFCAnyHandle ifcSolidStratum)\n      {\n         base.Process(ifcSolidStratum);\n      }\n\n      /// <summary>\n      /// Process the IfcSolidStratum object.\n      /// </summary>\n      /// <param name=\"ifcSolidStratum\">Handle that represents an IfcSolidStratum object.</param>\n      /// <returns></returns>\n      public static IFCSolidStratum ProcessIFCSolidStratum(IFCAnyHandle ifcSolidStratum)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSolidStratum))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcElement);\n            return null;\n         }\n\n         try\n         {\n            IFCEntity cachedIFCSolidStratum;\n            IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSolidStratum.StepId, out cachedIFCSolidStratum);\n            if (cachedIFCSolidStratum != null)\n               return (cachedIFCSolidStratum as IFCSolidStratum);\n\n            return new IFCSolidStratum(ifcSolidStratum);\n         }\n         catch (Exception ex)\n         {\n            HandleError(ex.Message, ifcSolidStratum, true);\n            return null;\n         }\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSpace.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcSpace.\r\n   /// </summary>\r\n   public class IFCSpace : IFCSpatialStructureElement\r\n   {\r\n      // IFC2x3 has \"InteriorOrExteriorSpace\"; IFC4 has \"PredefinedType\".  We will use the IFCObjectDefinition PredefinedType to store this field.\r\n\r\n      private double m_ElevationWithFlooring = 0.0;\r\n\r\n      public double ElevationWithFlooring\r\n      {\r\n         get { return m_ElevationWithFlooring; }\r\n         set { m_ElevationWithFlooring = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCSpace from the IfcSpace handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcSpace\">The IfcSpace handle.</param>\r\n      protected IFCSpace(IFCAnyHandle ifcSpace)\r\n      {\r\n         Process(ifcSpace);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCSpace()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit element params based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      protected override void CreateParametersInternal(Document doc, Element element)\r\n      {\r\n         base.CreateParametersInternal(doc, element);\r\n\r\n         if (element != null)\r\n         {\r\n            Category category = IFCPropertySet.GetCategoryForParameterIfValid(element, Id);\r\n\r\n            // Set \"ElevationWithFlooring\" parameter.\r\n            ParametersToSet.AddParameterDouble(doc, element, category, this, \"ElevationWithFlooring\", SpecTypeId.Length, UnitTypeId.Feet, ElevationWithFlooring, Id);\r\n\r\n            // Set \"PredefinedType\" parameter.\r\n            if (PredefinedType != null)\r\n            {\r\n               if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete))\r\n                  ParametersToSet.AddStringParameter(doc, element, category, this, \"PredefinedType\", PredefinedType, Id);\r\n               else\r\n                  ParametersToSet.AddStringParameter(doc, element, category, this, \"InteriorOrExteriorSpace\", PredefinedType, Id);\r\n            }\r\n\r\n            // Set \"IfcZone\" parameter.\r\n            string zoneNames = null;\r\n            foreach (IFCGroup zone in AssignmentGroups)\r\n            {\r\n               if (!(zone is IFCZone))\r\n                  continue;\r\n\r\n               string name = zone.Name;\r\n               if (string.IsNullOrWhiteSpace(name))\r\n                  continue;\r\n\r\n               if (zoneNames == null)\r\n                  zoneNames = name;\r\n               else\r\n                  zoneNames += \";\" + name;\r\n            }\r\n\r\n            if (zoneNames != null)\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, \"IfcZone\", zoneNames, Id);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the predefined type from the IfcSpace, depending on the file version and entity type.\r\n      /// </summary>\r\n      /// <param name=\"ifcSpace\">The associated handle.</param>\r\n      /// <returns>The predefined type, if any.</returns>\r\n      /// <remarks>Some entities use other fields as predefined type, including IfcDistributionPort (\"FlowDirection\") and IfcSpace (pre-IFC4).</remarks>\r\n      protected override string GetPredefinedType(IFCAnyHandle ifcSpace)\r\n      {\r\n         string predefinedType = null;\r\n         try\r\n         {\r\n            // We won't bother validating the return values, since we are storing them as a string.\r\n            if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete))\r\n               predefinedType = IFCAnyHandleUtil.GetEnumerationAttribute(ifcSpace, \"PredefinedType\");\r\n            else\r\n               predefinedType = IFCAnyHandleUtil.GetEnumerationAttribute(ifcSpace, \"InteriorOrExteriorSpace\");\r\n         }\r\n         catch\r\n         {\r\n            predefinedType = null;\r\n         }\r\n\r\n         return predefinedType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcSpace attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcSpace\">The IfcSpace handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcSpace)\r\n      {\r\n         base.Process(ifcSpace);\r\n\r\n         ElevationWithFlooring = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(ifcSpace, \"ElevationWithFlooring\", 0.0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcSpace handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcSpace\">The IfcSpace handle.</param>\r\n      /// <returns>The IFCSpace object.</returns>\r\n      public static IFCSpace ProcessIFCSpace(IFCAnyHandle ifcSpace)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSpace))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSpace);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity space;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSpace.StepId, out space))\r\n            return (space as IFCSpace);\r\n\r\n         return new IFCSpace(ifcSpace);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSpatialElement.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Import.Enums;\n\nnamespace Revit.IFC.Import.Data\n{\n   /// <summary>\n   /// Represents an IFCSpatialElement.\n   /// </summary>\n   public class IFCSpatialElement : IFCProduct\n   {\n      /// <summary>\n      /// Constructs an IFCSpatialElement from the IfcSpatialElement handle.\n      /// </summary>\n      /// <param name=\"IFCSpatialElement\">The IfcSpatialElement handle.</param>\n      protected IFCSpatialElement(IFCAnyHandle ifcSpatialElement)\n      {\n         Process(ifcSpatialElement);\n      }\n\n      /// <summary>\n      /// Default constructor.\n      /// </summary>\n      protected IFCSpatialElement()\n      {\n\n      }\n\n      /// <summary>\n      /// Processes IfcSpatialElement.\n      /// </summary>\n      /// <param name=\"ifcSpatialElement\">The IfcSpatialElement handle.</param>\n      protected override void Process(IFCAnyHandle ifcSpatialElement)\n      {\n         base.Process(ifcSpatialElement);\n      }\n\n      /// <summary>\n      /// Processes IfcSpatialElement handle.\n      /// </summary>\n      /// <param name=\"ifcSpatialElement\">The IfcSpatialElement handle.</param>\n      /// <returns>The IFCSpatialElement object.</returns>\n      public static IFCSpatialElement ProcessIFCSpatialElement(IFCAnyHandle ifcSpatialElement)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSpatialElement))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSpatialElement);\n            return null;\n         }\n\n         IFCEntity spatialElement;\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSpatialElement.StepId, out spatialElement))\n            return (spatialElement as IFCSpatialElement);\n\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcSpatialElement, IFCEntityType.IfcSpatialZone))\n            return IFCSpatialZone.ProcessIFCSpatialZone(ifcSpatialElement);\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcSpatialElement, IFCEntityType.IfcSpatialStructureElement))\n            return IFCSpatialStructureElement.ProcessIFCSpatialStructureElement(ifcSpatialElement);\n\n         Importer.TheLog.LogUnhandledSubTypeError(ifcSpatialElement, IFCEntityType.IfcProduct, false);\n         return null;\n      }\n   }\n}\n\n\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSpatialStructureElement.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcSpatialStructureElement.\r\n   /// </summary>\r\n   public class IFCSpatialStructureElement : IFCSpatialElement\r\n   {\r\n      HashSet<IFCProduct> m_IFCProducts = null;\r\n\r\n      HashSet<IFCSystem> m_IFCSystems = null;\r\n\r\n      string m_LongName = null;\r\n\r\n      /// <summary>\r\n      /// The elements contained in this spatial structure element.\r\n      /// </summary>\r\n      public HashSet<IFCProduct> ContainedElements\r\n      {\r\n         get { return m_IFCProducts; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Systems for the associated spatial structure.\r\n      /// </summary>\r\n      public ICollection<IFCSystem> Systems\r\n      {\r\n         get\r\n         {\r\n            if (m_IFCSystems == null)\r\n               m_IFCSystems = new HashSet<IFCSystem>();\r\n            return m_IFCSystems;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The long name of the entity.\r\n      /// </summary>\r\n      public string LongName\r\n      {\r\n         get { return m_LongName; }\r\n         protected set { m_LongName = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns true if sub-elements should be grouped; false otherwise.\r\n      /// </summary>\r\n      public override bool GroupSubElements()\r\n      {\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCSpatialStructureElement from the IfcSpatialStructureElement handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcSpatialElement\">The IfcSpatialStructureElement handle.</param>\r\n      protected IFCSpatialStructureElement(IFCAnyHandle ifcSpatialElement)\r\n      {\r\n         Process(ifcSpatialElement);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Default constructor.\r\n      /// </summary>\r\n      protected IFCSpatialStructureElement()\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit elements based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      protected override void TraverseSubElements(Document doc)\r\n      {\r\n         base.TraverseSubElements(doc);\r\n\r\n         if (ContainedElements != null)\r\n         {\r\n            foreach (IFCProduct containedElement in ContainedElements)\r\n               CreateElement(doc, containedElement);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit element params based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element.</param>\r\n      protected override void CreateParametersInternal(Document doc, Element element)\r\n      {\r\n         base.CreateParametersInternal(doc, element);\r\n\r\n         if (element == null)\r\n            return;\r\n\r\n         // Set \"ObjectTypeOverride\" parameter.\r\n         string longName = LongName;\r\n         if (!string.IsNullOrWhiteSpace(longName))\r\n         {\r\n            string parameterName = \"LongNameOverride\";\r\n            if (element is ProjectInfo)\r\n               parameterName = EntityType.ToString() + \" \" + parameterName;\r\n\r\n            Category category = IFCPropertySet.GetCategoryForParameterIfValid(element, Id);\r\n            ParametersToSet.AddStringParameter(doc, element, category, this, parameterName, longName, Id);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcSpatialStructureElement attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcSpatialStructureElement\">The IfcSpatialStructureElement handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcSpatialStructureElement)\r\n      {\r\n         base.Process(ifcSpatialStructureElement);\r\n\r\n         LongName = IFCImportHandleUtil.GetOptionalStringAttribute(ifcSpatialStructureElement, \"LongName\", null);\r\n\r\n         HashSet<IFCAnyHandle> elemSet =\r\n             IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcSpatialStructureElement, \"ContainsElements\");\r\n         if (elemSet != null)\r\n         {\r\n            if (m_IFCProducts == null)\r\n               m_IFCProducts = new HashSet<IFCProduct>();\r\n\r\n            foreach (IFCAnyHandle elem in elemSet)\r\n               ProcessIFCRelContainedInSpatialStructure(elem);\r\n         }\r\n\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC2x2) || IFCAnyHandleUtil.IsSubTypeOf(ifcSpatialStructureElement, IFCEntityType.IfcBuilding))\r\n         {\r\n            HashSet<IFCAnyHandle> systemSet =\r\n             IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcSpatialStructureElement, \"ServicedBySystems\");\r\n            if (systemSet != null)\r\n            {\r\n               foreach (IFCAnyHandle system in systemSet)\r\n                  ProcessIFCRelServicesBuildings(system);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds contained elements.\r\n      /// </summary>\r\n      /// <param name=\"ifcRelHandle\">The relation handle.</param>\r\n      void ProcessIFCRelContainedInSpatialStructure(IFCAnyHandle ifcRelHandle)\r\n      {\r\n         HashSet<IFCAnyHandle> elemSet = IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcRelHandle, \"RelatedElements\");\r\n\r\n         if (elemSet == null)\r\n         {\r\n            Importer.TheLog.LogMissingRequiredAttributeError(ifcRelHandle, \"RelatedElements\", false);\r\n            return;\r\n         }\r\n\r\n         foreach (IFCAnyHandle elem in elemSet)\r\n         {\r\n            try\r\n            {\r\n               IFCProduct product = IFCProduct.ProcessIFCProduct(elem);\r\n               if (product != null)\r\n               {\r\n                  product.ContainingStructure = this;\r\n                  m_IFCProducts.Add(product);\r\n               }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n               Importer.TheLog.LogError(elem.StepId, ex.Message, false);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds contained systems.\r\n      /// </summary>\r\n      /// <param name=\"ifcRelHandle\">The relation handle.</param>\r\n      void ProcessIFCRelServicesBuildings(IFCAnyHandle ifcRelHandle)\r\n      {\r\n         IFCAnyHandle relatingSystem = IFCAnyHandleUtil.GetInstanceAttribute(ifcRelHandle, \"RelatingSystem\");\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(relatingSystem))\r\n         {\r\n            Importer.TheLog.LogMissingRequiredAttributeError(ifcRelHandle, \"RelatingSystem\", false);\r\n            return;\r\n         }\r\n\r\n         IFCSystem system = IFCSystem.ProcessIFCSystem(relatingSystem);\r\n         if (system != null)\r\n            Systems.Add(system);\r\n      }\r\n\r\n      protected void TryToFixFarawayOrigin()\r\n      {\r\n         // If we are using ATF, it should fix coordinate issues for us.\r\n         if (Importer.TheOptions.HybridImportOptions != null)\r\n         {\r\n            return;\r\n         }\r\n\r\n         if (!(ProjectScope?.IsSet ?? false))\r\n            return;\r\n\r\n         // It is amazing that this works at all, but basically if we set the ProjectScope,\r\n         // and it has a reasonable bounding box size that is far from the origin, and\r\n         // the relative (non-shared) portion of this spatial element (building or\r\n         // building storey only) is also far from the origin and close to the bounding box,\r\n         // then we move it closer to the origin by subtracting the min corner of the\r\n         // bounding box.\r\n         // This fixes some cases where we have buildings or building stories that are really\r\n         // far from the origin but aren't all over the place.\r\n         // Real solution: don't create this data.\r\n         // There may be some better solution, but this is a compromise between not doing\r\n         // anything at all and not having a regression in old code that just moved stuff\r\n         // back to the origin.\r\n         XYZ relativeOrigin = ObjectLocation?.RelativeTransform?.Origin;\r\n         if (relativeOrigin != null && !XYZ.IsWithinLengthLimits(relativeOrigin))\r\n         {\r\n            if (XYZ.IsWithinLengthLimits(ProjectScope.Max - ProjectScope.Min) &&\r\n               XYZ.IsWithinLengthLimits(relativeOrigin - ProjectScope.Min))\r\n            {\r\n               ObjectLocation.RelativeTransform.Origin -= ProjectScope.Min;\r\n            }\r\n         }\r\n      }\r\n\r\n      protected void CreatePostalParameters(Document doc, Element element, IFCPostalAddress postalAddress)\r\n      {\r\n         if (element is ProjectInfo && postalAddress != null)\r\n         {\r\n            Category category = IFCPropertySet.GetCategoryForParameterIfValid(element, Id);\r\n            string typeName = EntityType.ToString() + \" \";\r\n\r\n            if (!string.IsNullOrWhiteSpace(postalAddress.Purpose))\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, typeName + \"Purpose\", postalAddress.Purpose, Id);\r\n\r\n            if (!string.IsNullOrWhiteSpace(postalAddress.Description))\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, typeName + \"Description\", postalAddress.Description, Id);\r\n\r\n            if (!string.IsNullOrWhiteSpace(postalAddress.UserDefinedPurpose))\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, typeName + \"UserDefinedPurpose\", postalAddress.UserDefinedPurpose, Id);\r\n\r\n            if (!string.IsNullOrWhiteSpace(postalAddress.InternalLocation))\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, typeName + \"InternalLocation\", postalAddress.InternalLocation, Id);\r\n\r\n            if (!string.IsNullOrWhiteSpace(postalAddress.PostalBox))\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, typeName + \"PostalBox\", postalAddress.PostalBox, Id);\r\n\r\n            if (!string.IsNullOrWhiteSpace(postalAddress.Town))\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, typeName + \"Town\", postalAddress.Town, Id);\r\n\r\n            if (!string.IsNullOrWhiteSpace(postalAddress.Region))\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, typeName + \"Region\", postalAddress.Region, Id);\r\n\r\n            if (!string.IsNullOrWhiteSpace(postalAddress.PostalCode))\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, typeName + \"PostalCode\", postalAddress.PostalCode, Id);\r\n\r\n            if (!string.IsNullOrWhiteSpace(postalAddress.Country))\r\n               ParametersToSet.AddStringParameter(doc, element, category, this, typeName + \"Country\", postalAddress.Country, Id);\r\n\r\n            if (postalAddress.AddressLines != null)\r\n            {\r\n               string jointAddress = string.Join(\", \", postalAddress.AddressLines);\r\n               if (!string.IsNullOrWhiteSpace(jointAddress))\r\n                  ParametersToSet.AddStringParameter(doc, element, category, this, typeName + \"AddressLines\", jointAddress, Id);\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcSpatialStructureElement handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcSpatialStructureElement\">The IfcSpatialStructureElement handle.</param>\r\n      /// <returns>The IFCSpatialStructureElement object.</returns>\r\n      public static IFCSpatialStructureElement ProcessIFCSpatialStructureElement(IFCAnyHandle ifcSpatialStructureElement)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSpatialStructureElement))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSpatialStructureElement);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity spatialStructureElement;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSpatialStructureElement.StepId, out spatialStructureElement))\r\n            return (spatialStructureElement as IFCSpatialStructureElement);\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcSpatialStructureElement, IFCEntityType.IfcSpace))\r\n         {\r\n            return IFCSpace.ProcessIFCSpace(ifcSpatialStructureElement);\r\n         }\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcSpatialStructureElement, IFCEntityType.IfcBuildingStorey))\r\n         {\r\n            return IFCBuildingStorey.ProcessIFCBuildingStorey(ifcSpatialStructureElement);\r\n         }\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcSpatialStructureElement, IFCEntityType.IfcSite))\r\n         {\r\n            return IFCSite.ProcessIFCSite(ifcSpatialStructureElement);\r\n         }\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcSpatialStructureElement, IFCEntityType.IfcBuilding))\r\n         {\r\n            return IFCBuilding.ProcessIFCBuilding(ifcSpatialStructureElement);\r\n         }\r\n\r\n         return new IFCSpatialStructureElement(ifcSpatialStructureElement);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSpatialZone.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Common.Utility;\n\nnamespace Revit.IFC.Import.Data\n{\n   /// <summary>\n   /// Represents an IFCSpatialZone.\n   /// </summary>\n   public class IFCSpatialZone : IFCSpatialElement\n   {\n      /// <summary>\n      /// Constructs an IFCSpatialZone from the IfcSpatialZone handle.\n      /// </summary>\n      /// <param name=\"IFCSpatialZone\">The IfcSpatialZone handle.</param>\n      protected IFCSpatialZone(IFCAnyHandle ifcSpatialZone)\n      {\n         Process(ifcSpatialZone);\n      }\n\n      /// <summary>\n      /// Default constructor.\n      /// </summary>\n      protected IFCSpatialZone()\n      {\n\n      }\n\n      /// <summary>\n      /// Processes IfcSpatialZone.\n      /// </summary>\n      /// <param name=\"ifcSpatialZone\">The IfcSpatialZone handle.</param>\n      protected override void Process(IFCAnyHandle ifcSpatialZone)\n      {\n         base.Process(ifcSpatialZone);\n      }\n\n      /// <summary>\n      /// Processes IfcSpatialZone handle.\n      /// </summary>\n      /// <param name=\"ifcSpatialZone\">The IfcSpatialZone handle.</param>\n      /// <returns>The IFCSpatialZone object.</returns>\n      public static IFCSpatialZone ProcessIFCSpatialZone(IFCAnyHandle ifcSpatialZone)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSpatialZone))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSpatialZone);\n            return null;\n         }\n\n         IFCEntity spatialZone;\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSpatialZone.StepId, out spatialZone))\n            return (spatialZone as IFCSpatialZone);\n\n         return new IFCSpatialZone(ifcSpatialZone);\n      }\n   }\n}\n\n\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCStyledItem.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCStyledItem : IFCRepresentationItem\r\n   {\r\n      // Currently the only created element would be a material.  May expand to a list of elements.\r\n      private ElementId m_CreatedElementId = ElementId.InvalidElementId;\r\n\r\n      /// <summary>\r\n      /// The optional associated representation item.\r\n      /// </summary>\r\n      public IFCRepresentationItem Item { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Get the styles associated with the IfcStyledItem.\r\n      /// Note that the IFC specification allows a set of these, but usage restricts \r\n      /// this to one item.\r\n      /// </summary>\r\n      public List<IFCPresentationStyle> Styles { get; } = new List<IFCPresentationStyle>();\r\n\r\n      /// <summary>\r\n      /// The optional name of the styled item.\r\n      /// </summary>\r\n      public string Name { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Returns the main element id associated with this material.\r\n      /// </summary>\r\n      /// <param name=\"scope\">The containing import scope.</param>\r\n      /// <remarks>The creator argument is ignored, as it is taken into account when creating the material.</remarks>\r\n      public override ElementId GetMaterialElementId(IFCImportShapeEditScope scope)\r\n      {\r\n         return m_CreatedElementId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Does a top-level check to see if this styled item may be equivalent to another styled item.\r\n      /// </summary>\r\n      /// <param name=\"otherEntity\">The other styled item.</param>\r\n      /// <returns>False if they don't have the same handles, null otherwise.</returns>\r\n      public override bool? MaybeEquivalentTo(IFCEntity otherEntity)\r\n      {\r\n         bool? maybeEquivalentTo = base.MaybeEquivalentTo(otherEntity);\r\n         if (maybeEquivalentTo.HasValue)\r\n            return maybeEquivalentTo.Value;\r\n\r\n         if (!(otherEntity is IFCStyledItem))\r\n            return false;\r\n\r\n         IFCStyledItem other = otherEntity as IFCStyledItem;\r\n\r\n         if (!Equals(Item, other.Item))\r\n            return false;\r\n\r\n         IList<IFCPresentationStyle> otherStyles = other.Styles;\r\n         if (Styles == null && otherStyles == null)\r\n            return null;\r\n\r\n         // If only one is null, they are not equal.\r\n         if (Styles == null || otherStyles == null)\r\n            return false;\r\n\r\n         int thisCount = Styles.Count;\r\n         int otherCount = otherStyles.Count;\r\n         if (thisCount != otherCount)\r\n            return false;\r\n\r\n         // This could miss the case where the styles are the same but in different\r\n         // orders.  At the moment, that would just lead to a spurious warning.\r\n         for (int ii = 0; ii < thisCount; ii++)\r\n         {\r\n            if (!Equals(Styles[ii], otherStyles[ii]))\r\n               return false;\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Does a top-level check to see if this entity is equivalent to otherEntity.\r\n      /// </summary>\r\n      /// <param name=\"otherEntity\">The other IFCEntity.</param>\r\n      /// <returns>True if they are equivalent, false if they aren't.</returns>\r\n      /// <remarks>This isn't intended to be an exhaustive check, and isn't implemented for all types.  This is intended\r\n      /// to make a final decision, and will err on the side of deciding that entities aren't equivalent.</remarks>\r\n      public override bool IsEquivalentTo(IFCEntity otherEntity)\r\n      {\r\n         bool? maybeEquivalentTo = MaybeEquivalentTo(otherEntity);\r\n         if (maybeEquivalentTo.HasValue)\r\n            return maybeEquivalentTo.Value;\r\n\r\n         // If it passes all of the Maybe tests and doesn't come back false, good enough.\r\n         return true;\r\n      }\r\n\r\n      protected IFCStyledItem()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle styledItem)\r\n      {\r\n         base.Process(styledItem);\r\n\r\n         IFCAnyHandle item = IFCImportHandleUtil.GetOptionalInstanceAttribute(styledItem, \"Item\");\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(item))\r\n            Item = IFCRepresentationItem.ProcessIFCRepresentationItem(item);\r\n\r\n         Name = IFCImportHandleUtil.GetOptionalStringAttribute(styledItem, \"Name\", null);\r\n\r\n         List<IFCAnyHandle> styles = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(styledItem, \"Styles\");\r\n         if (styles == null || styles.Count == 0)\r\n            Importer.TheLog.LogMissingRequiredAttributeError(styledItem, \"Styles\", true);\r\n         \r\n         foreach (IFCAnyHandle style in styles)\r\n         {\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(style))\r\n               continue;\r\n\r\n            if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete) && IFCAnyHandleUtil.IsValidSubTypeOf(style, IFCEntityType.IfcPresentationStyle))\r\n            {\r\n               Styles.Add(IFCPresentationStyle.ProcessIFCPresentationStyle(style));\r\n            }\r\n            else\r\n            {\r\n               if (Styles.Count != 0)\r\n               {\r\n                  Importer.TheLog.LogWarning(styledItem.StepId, \"Multiple presentation styles found for IfcStyledItem - using first.\", false);\r\n                  continue;\r\n               }\r\n\r\n               IFCPresentationStyleAssignment presentationStyleAssignment = \r\n                  IFCPresentationStyleAssignment.ProcessIFCPresentationStyleAssignment(style);\r\n               if (presentationStyleAssignment != null && presentationStyleAssignment.Styles != null)\r\n                  Styles.AddRange(presentationStyleAssignment.Styles);\r\n            }\r\n         }\r\n      }\r\n\r\n      protected IFCStyledItem(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the IFCSurfaceStyle associated with this IFCStyledItem.\r\n      /// </summary>\r\n      /// <returns>The IFCSurfaceStyle, if any.</returns>\r\n      public IFCSurfaceStyle GetSurfaceStyle()\r\n      {\r\n         IList<IFCPresentationStyle> presentationStyles = Styles;\r\n         foreach (IFCPresentationStyle presentationStyle in presentationStyles)\r\n         {\r\n            if (presentationStyle is IFCSurfaceStyle)\r\n               return (presentationStyle as IFCSurfaceStyle);\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a Revit material based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      public void Create(IFCImportShapeEditScope shapeEditScope)\r\n      {\r\n         // TODO: support cut pattern id and cut pattern color.\r\n         if (m_CreatedElementId != ElementId.InvalidElementId || !IsValidForCreation)\r\n            return;\r\n\r\n         try\r\n         {\r\n            // If the styled item or the surface style has a name, use it.\r\n            IFCSurfaceStyle surfaceStyle = GetSurfaceStyle();\r\n            if (surfaceStyle == null)\r\n            {\r\n               // We only handle surface styles at the moment; log file should already reflect any other unhandled styles.\r\n               IsValidForCreation = true;\r\n               return;\r\n            }\r\n\r\n            string forcedName = surfaceStyle.Name;\r\n            if (string.IsNullOrWhiteSpace(forcedName))\r\n               forcedName = Name;\r\n\r\n            string suggestedName = null;\r\n            if (Item != null)\r\n            {\r\n               IFCProduct creator = shapeEditScope.Creator;\r\n               suggestedName = creator.GetTheMaterialName();\r\n            }\r\n\r\n            m_CreatedElementId = surfaceStyle.Create(shapeEditScope.Document, forcedName, suggestedName, Id);\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            IsValidForCreation = false;\r\n            Importer.TheLog.LogCreationError(this, ex.Message, false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcStyledItem entity handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcStyledItem\">The IfcStyledItem handle.</param>\r\n      /// <returns>The IFCStyledItem object.</returns>\r\n      public static IFCStyledItem ProcessIFCStyledItem(IFCAnyHandle ifcStyledItem)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcStyledItem))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcStyledItem);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity styledItem;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcStyledItem.StepId, out styledItem))\r\n            styledItem = new IFCStyledItem(ifcStyledItem);\r\n         return (styledItem as IFCStyledItem);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSurface.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCSurface entity\r\n   /// </summary>\r\n   public abstract class IFCSurface : IFCRepresentationItem\r\n   {\r\n      protected IFCSurface()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcCurve)\r\n      {\r\n         base.Process(ifcCurve);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the local surface transform at a given point on the surface.\r\n      /// </summary>\r\n      /// <param name=\"pointOnSurface\">The point.</param>\r\n      /// <returns>The transform.</returns>\r\n      public virtual Transform GetTransformAtPoint(XYZ pointOnSurface)\r\n      {\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCSurface object from a handle of type IfcSurface.\r\n      /// </summary>\r\n      /// <param name=\"ifcSurface\">The IFC handle.</param>\r\n      /// <returns>The IFCSurface object.</returns>\r\n      public static IFCSurface ProcessIFCSurface(IFCAnyHandle ifcSurface)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSurface))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSurface);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity surface;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSurface.StepId, out surface))\r\n            return (surface as IFCSurface);\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcSurface, IFCEntityType.IfcElementarySurface))\r\n            return IFCElementarySurface.ProcessIFCElementarySurface(ifcSurface);\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcSurface, IFCEntityType.IfcSweptSurface))\r\n            return IFCSweptSurface.ProcessIFCSweptSurface(ifcSurface);\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcSurface, IFCEntityType.IfcBSplineSurface))\r\n            return IFCBSplineSurface.ProcessIFCBSplineSurface(ifcSurface);\r\n         else if (IFCAnyHandleUtil.IsSubTypeOf(ifcSurface, IFCEntityType.IfcSectionedSurface))\r\n            return IFCSectionedSurface.ProcessIFCSectionedSurface(ifcSurface);\r\n\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcSurface, IFCEntityType.IfcSurface, true);\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the surface which defines the internal shape of the face\r\n      /// </summary>\r\n      /// <param name=\"lcs\">The local coordinate system for the surface.  Can be null.</param>\r\n      /// <returns>The surface which defines the internal shape of the face</returns>\r\n      public virtual Surface GetSurface(Transform lcs)\r\n      {\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSurfaceCurveSweptAreaSolid.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCSurfaceCurveSweptAreaSolid : IFCSweptAreaSolid\r\n   {\r\n      IFCSurface m_ReferenceSurface = null;\r\n\r\n      IFCCurve m_Directrix = null;\r\n\r\n      double m_StartParam = 0.0;\r\n\r\n      // although end param is not optional, we will still allow it to be null, to default to \r\n      // no trimming of the directrix.\r\n      double? m_EndParam = null;\r\n\r\n      /// <summary>\r\n      /// The curve used for the sweep.\r\n      /// </summary>\r\n      public IFCCurve Directrix\r\n      {\r\n         get { return m_Directrix; }\r\n         protected set { m_Directrix = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The plane containing the swept area curves.\r\n      /// </summary>\r\n      public IFCSurface ReferenceSurface\r\n      {\r\n         get { return m_ReferenceSurface; }\r\n         protected set { m_ReferenceSurface = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The start parameter of the sweep, as measured along the length of the Directrix.\r\n      /// </summary>\r\n      /// <remarks>This is not optional in IFC, but we will default to 0.0 if not set.</remarks>\r\n      public double StartParameter\r\n      {\r\n         get { return m_StartParam; }\r\n         protected set { m_StartParam = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The optional end parameter of the sweep, as measured along the length of the Directrix.\r\n      /// </summary>\r\n      /// <remarks>This is not optional in IFC, but we will default to ParametricLength(curve) if not set.</remarks>\r\n      public double? EndParameter\r\n      {\r\n         get { return m_EndParam; }\r\n         protected set { m_EndParam = value; }\r\n      }\r\n\r\n      protected IFCSurfaceCurveSweptAreaSolid()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle solid)\r\n      {\r\n         base.Process(solid);\r\n\r\n         IFCAnyHandle directrix = IFCImportHandleUtil.GetRequiredInstanceAttribute(solid, \"Directrix\", true);\r\n         Directrix = IFCCurve.ProcessIFCCurve(directrix);\r\n\r\n         IFCAnyHandle referenceSurface = IFCImportHandleUtil.GetRequiredInstanceAttribute(solid, \"ReferenceSurface\", true);\r\n         ReferenceSurface = IFCSurface.ProcessIFCSurface(referenceSurface);\r\n\r\n         StartParameter = IFCImportHandleUtil.GetOptionalDoubleAttribute(solid, \"StartParam\", 0.0);\r\n         if (StartParameter < MathUtil.Eps())\r\n            StartParameter = 0.0;\r\n\r\n         double endParameter = IFCImportHandleUtil.GetOptionalDoubleAttribute(solid, \"EndParam\", -1.0);\r\n         if (!MathUtil.IsAlmostEqual(endParameter, -1.0))\r\n         {\r\n            if (endParameter < StartParameter + MathUtil.Eps())\r\n               Importer.TheLog.LogError(solid.StepId, \"IfcSurfaceCurveSweptAreaSolid swept curve end parameter less than or equal to start parameter, aborting.\", true);\r\n            EndParameter = endParameter;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"unscaledLcs\">The unscaled local coordinate system for the geometry, if the scaled version isn't supported downstream.</param>\r\n      /// <param name=\"scaledLcs\">The scaled (true) local coordinate system for the geometry.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      /// <returns>The created geometry.</returns>\r\n      protected override IList<GeometryObject> CreateGeometryInternal(\r\n         IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid)\r\n      {\r\n         Transform scaledObjectPosition = (scaledLcs == null) ? Position : scaledLcs.Multiply(Position);\r\n\r\n         IList<CurveLoop> trimmedDirectrices = IFCGeometryUtil.TrimCurveLoops(Id, Directrix, StartParameter, EndParameter);\r\n         if (trimmedDirectrices == null)\r\n            return null;\r\n\r\n         IList<GeometryObject> myObjs = null;\r\n         foreach (CurveLoop trimmedDirectrix in trimmedDirectrices)\r\n         {\r\n            double startParam = 0.0; // If the directrix isn't bound, this arbitrary parameter will do.\r\n            Transform originTrf0 = null;\r\n            Curve firstCurve0 = trimmedDirectrix.First();\r\n            if (firstCurve0.IsBound)\r\n               startParam = firstCurve0.GetEndParameter(0);\r\n            originTrf0 = firstCurve0.ComputeDerivatives(startParam, false);\r\n            if (originTrf0 == null)\r\n               return null;\r\n\r\n            // Note: the computation of the reference Surface Local Transform must be done before the directrix is transform to LCS (because the ref surface isn't)\r\n            //     and therefore the origin is at the start of the curve should be the start of the directrix that lies on the surface.\r\n            //     This is needed to transform the swept area that must be perpendicular to the start of the directrix curve\r\n\r\n            Transform referenceSurfaceLocalTransform = ReferenceSurface.GetTransformAtPoint(originTrf0.Origin);\r\n\r\n            CurveLoop trimmedDirectrixInLCS = IFCGeometryUtil.CreateTransformed(trimmedDirectrix, Id, scaledObjectPosition);\r\n\r\n            // Create the sweep.\r\n            Transform originTrf = null;\r\n            Curve firstCurve = trimmedDirectrixInLCS.First();\r\n            //if (firstCurve.IsBound)\r\n            //    startParam = firstCurve.GetEndParameter(0);\r\n            originTrf = firstCurve.ComputeDerivatives(startParam, false);\r\n\r\n            Transform scaledReferenceSurfaceTransform = scaledObjectPosition.Multiply(referenceSurfaceLocalTransform);\r\n\r\n            Transform profileCurveLoopsTransform = Transform.CreateTranslation(originTrf.Origin);\r\n            profileCurveLoopsTransform.BasisX = scaledReferenceSurfaceTransform.BasisZ;\r\n            profileCurveLoopsTransform.BasisZ = originTrf.BasisX.Normalize();\r\n            profileCurveLoopsTransform.BasisY = profileCurveLoopsTransform.BasisZ.CrossProduct(profileCurveLoopsTransform.BasisX);\r\n\r\n            ISet<IList<CurveLoop>> profileCurveLoops = GetTransformedCurveLoops(profileCurveLoopsTransform);\r\n            if (profileCurveLoops == null || profileCurveLoops.Count == 0)\r\n               return null;\r\n\r\n            SolidOptions solidOptions = new SolidOptions(GetMaterialElementId(shapeEditScope), shapeEditScope.GraphicsStyleId);\r\n            myObjs = new List<GeometryObject>();\r\n            foreach (IList<CurveLoop> loops in profileCurveLoops)\r\n            {\r\n               GeometryObject myObj = GeometryCreationUtilities.CreateSweptGeometry(trimmedDirectrixInLCS, 0, startParam, loops, solidOptions);\r\n               if (myObj != null)\r\n                  myObjs.Add(myObj);\r\n            }\r\n         }\r\n\r\n         return myObjs;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      // <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n\r\n         IList<GeometryObject> sweptAreaGeometries = CreateGeometryInternal(shapeEditScope, scaledLcs, guid);\r\n         if (sweptAreaGeometries != null)\r\n         {\r\n            foreach (GeometryObject sweptAreaGeometry in sweptAreaGeometries)\r\n            {\r\n               shapeEditScope.AddGeometry(IFCSolidInfo.Create(Id, sweptAreaGeometry));\r\n            }\r\n         }\r\n      }\r\n\r\n      protected IFCSurfaceCurveSweptAreaSolid(IFCAnyHandle solid)\r\n      {\r\n         Process(solid);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCSurfaceCurveSweptAreaSolid object from a handle of type IfcSurfaceCurveSweptAreaSolid.\r\n      /// </summary>\r\n      /// <param name=\"ifcSolid\">The IFC handle.</param>\r\n      /// <returns>The IFCSurfaceCurveSweptAreaSolid object.</returns>\r\n      public static IFCSurfaceCurveSweptAreaSolid ProcessIFCSurfaceCurveSweptAreaSolid(IFCAnyHandle ifcSolid)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSolid))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSurfaceCurveSweptAreaSolid);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity solid;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSolid.StepId, out solid))\r\n            solid = new IFCSurfaceCurveSweptAreaSolid(ifcSolid);\r\n         return (solid as IFCSurfaceCurveSweptAreaSolid);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSurfaceOfLinearExtrusion.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCSurfaceOfLinearExtrusion : IFCSweptSurface\r\n   {\r\n      XYZ m_ExtrudedDirection = null;\r\n\r\n      double m_Depth = 0.0;\r\n\r\n      public XYZ ExtrudedDirection\r\n      {\r\n         get { return m_ExtrudedDirection; }\r\n         protected set { m_ExtrudedDirection = value; }\r\n      }\r\n\r\n      public double Depth\r\n      {\r\n         get { return m_Depth; }\r\n         protected set { m_Depth = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the local surface transform at a given point on the surface.\r\n      /// </summary>\r\n      /// <param name=\"pointOnSurface\">The point.</param>\r\n      /// <returns>The transform.</returns>\r\n      /// <remarks>This does not include the translation component.</remarks>\r\n      public override Transform GetTransformAtPoint(XYZ pointOnSurface)\r\n      {\r\n         if (!(SweptCurve is IFCSimpleProfile))\r\n         {\r\n            // LOG: ERROR: warn that we only support simple profiles.\r\n            return null;\r\n         }\r\n\r\n         CurveLoop outerCurveLoop = (SweptCurve as IFCSimpleProfile).GetTheOuterCurveLoop();\r\n         if (outerCurveLoop?.Count() != 1)\r\n         {\r\n            // LOG: ERROR\r\n            return null;\r\n         }\r\n\r\n         Curve outerCurve = outerCurveLoop.First();\r\n         if (outerCurve == null)\r\n         {\r\n            // LOG: ERROR\r\n            return null;\r\n         }\r\n\r\n         IntersectionResult result = outerCurve.Project(pointOnSurface);\r\n         if (result == null)\r\n         {\r\n            // LOG: ERROR\r\n            return null;\r\n         }\r\n\r\n         double parameter = result.Parameter;\r\n\r\n         Transform atPoint = outerCurve.ComputeDerivatives(parameter, false);\r\n         atPoint.set_Basis(0, atPoint.BasisX.Normalize());\r\n         atPoint.set_Basis(1, atPoint.BasisY.Normalize());\r\n         atPoint.set_Basis(2, atPoint.BasisZ.Normalize());\r\n         atPoint.Origin = pointOnSurface;\r\n\r\n         return atPoint;\r\n      }\r\n\r\n      protected IFCSurfaceOfLinearExtrusion()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcSurface)\r\n      {\r\n         base.Process(ifcSurface);\r\n\r\n         IFCAnyHandle extrudedDirection = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcSurface, \"ExtrudedDirection\", true);\r\n         m_ExtrudedDirection = IFCPoint.ProcessNormalizedIFCDirection(extrudedDirection);\r\n         // The extruded direction is relative to the lcs of the IfcSweptSurface position\r\n         m_ExtrudedDirection = Position.OfVector(m_ExtrudedDirection);\r\n\r\n         bool found = false;\r\n         Depth = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(ifcSurface, \"Depth\", out found);\r\n         if (!found)\r\n            Importer.TheLog.LogError(Id, \"IfcSurfaceOfLinearExtrusion has no height, ignoring.\", true);\r\n      }\r\n\r\n      protected IFCSurfaceOfLinearExtrusion(IFCAnyHandle surfaceOfLinearExtrusion)\r\n      {\r\n         Process(surfaceOfLinearExtrusion);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCSurfaceOfLinearExtrusion object from a handle of type IfcSurfaceOfLinearExtrusion.\r\n      /// </summary>\r\n      /// <param name=\"ifcSurfaceOfLinearExtrusion\">The IFC handle.</param>\r\n      /// <returns>The IFCSurfaceOfLinearExtrusion object.</returns>\r\n      public static IFCSurfaceOfLinearExtrusion ProcessIFCSurfaceOfLinearExtrusion(IFCAnyHandle ifcSurfaceOfLinearExtrusion)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSurfaceOfLinearExtrusion))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSurfaceOfLinearExtrusion);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity surfaceOfLinearExtrusion;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSurfaceOfLinearExtrusion.StepId, out surfaceOfLinearExtrusion))\r\n            surfaceOfLinearExtrusion = new IFCSurfaceOfLinearExtrusion(ifcSurfaceOfLinearExtrusion);\r\n\r\n         return (surfaceOfLinearExtrusion as IFCSurfaceOfLinearExtrusion);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the surface which defines the internal shape of the face\r\n      /// </summary>\r\n      /// <param name=\"lcs\">The local coordinate system for the surface.  Can be null.</param>\r\n      /// <returns>The surface which defines the internal shape of the face</returns>\r\n      public override Surface GetSurface(Transform lcs)\r\n      {\r\n         Curve sweptCurve = null;\r\n         // Get the RuledSurface which is used to create the geometry from the brepbuilder\r\n         if (!(SweptCurve is IFCSimpleProfile))\r\n         {\r\n            return null;\r\n         }\r\n         else\r\n         {\r\n            // Currently there is no easy way to get the curve from the IFCProfile, so for now we assume that\r\n            // the SweptCurve is an IFCSimpleProfile and its outer curve only contains one curve, which is the \r\n            // profile curve that we want\r\n            IFCSimpleProfile simpleSweptCurve = SweptCurve as IFCSimpleProfile;\r\n            CurveLoop outerCurve = simpleSweptCurve.GetTheOuterCurveLoop();\r\n            if (outerCurve == null)\r\n            {\r\n               return null;\r\n            }\r\n            CurveLoopIterator it = outerCurve.GetCurveLoopIterator();\r\n            sweptCurve = it.Current;\r\n         }\r\n         // Position/transform the Curve first according to the lcs of the IfcSurfaceOfLinearExtrusion\r\n         sweptCurve = sweptCurve.CreateTransformed(Position);\r\n\r\n         // Create the second profile curve by translating the first one in the extrusion direction\r\n         Curve profileCurve2 = sweptCurve.CreateTransformed(Transform.CreateTranslation(ExtrudedDirection.Multiply(Depth)));\r\n\r\n         if (lcs == null)\r\n            return RuledSurface.Create(sweptCurve, profileCurve2);\r\n\r\n         Curve transformedProfileCurve1 = sweptCurve.CreateTransformed(lcs);\r\n         Curve transformedProfileCurve2 = profileCurve2.CreateTransformed(lcs);\r\n\r\n         return RuledSurface.Create(transformedProfileCurve1, transformedProfileCurve2);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSurfaceOfRevolution.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCSurfaceOfRevolution entity\r\n   /// </summary>\r\n   public class IFCSurfaceOfRevolution : IFCSweptSurface\r\n   {\r\n      private Transform m_AxisPosition;\r\n\r\n      /// <summary>\r\n      /// Get or set the local axis position transform.  This does not include the position transform information.\r\n      /// </summary>\r\n      public Transform AxisPosition\r\n      {\r\n         get { return m_AxisPosition; }\r\n         protected set { m_AxisPosition = value; }\r\n      }\r\n\r\n      protected IFCSurfaceOfRevolution()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcSurface)\r\n      {\r\n         base.Process(ifcSurface);\r\n\r\n         IFCAnyHandle ifcAxisPosition = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcSurface, \"AxisPosition\", true);\r\n         AxisPosition = IFCLocation.ProcessIFCAxis1Placement(ifcAxisPosition);\r\n\r\n         if (AxisPosition == null)\r\n         {\r\n            Importer.TheLog.LogError(ifcSurface.StepId, \"Cannot find the axis position of this surface of revolution\", true);\r\n         }\r\n      }\r\n\r\n      protected IFCSurfaceOfRevolution(IFCAnyHandle surfaceOfRevolution)\r\n      {\r\n         Process(surfaceOfRevolution);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCSurfaceOfRevolution object from a handle of type IfcSweptSurface.\r\n      /// </summary>\r\n      /// <param name=\"ifcSurfaceOfRevolution\">The IFC handle.</param>\r\n      /// <returns>The IFCSurfaceOfRevolution object.</returns>\r\n      public static IFCSurfaceOfRevolution ProcessIFCSurfaceOfRevolution(IFCAnyHandle ifcSurfaceOfRevolution)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSurfaceOfRevolution))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSurfaceOfRevolution);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity surfaceOfRevolution;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSurfaceOfRevolution.StepId, out surfaceOfRevolution))\r\n            surfaceOfRevolution = new IFCSurfaceOfRevolution(ifcSurfaceOfRevolution);\r\n\r\n         return (surfaceOfRevolution as IFCSurfaceOfRevolution);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the surface which defines the internal shape of the face\r\n      /// </summary>\r\n      /// <param name=\"lcs\">The local coordinate system for the surface.  Can be null.</param>\r\n      /// <returns>The surface which defines the internal shape of the face</returns>\r\n      public override Surface GetSurface(Transform lcs)\r\n      {\r\n         if (SweptCurve == null)\r\n            Importer.TheLog.LogError(Id, \"Cannot find the profile curve of this revolved face.\", true);\r\n\r\n         IFCSimpleProfile simpleProfile = SweptCurve as IFCSimpleProfile;\r\n         if (simpleProfile == null)\r\n            Importer.TheLog.LogError(Id, \"Can't handle profile curve of type \" + SweptCurve.GetType() + \".\", true);\r\n\r\n         CurveLoop outerCurve = simpleProfile.GetTheOuterCurveLoop();\r\n         Curve profileCurve = outerCurve?.First();\r\n\r\n         if (profileCurve == null)\r\n            Importer.TheLog.LogError(Id, \"Cannot create the profile curve of this revolved surface.\", true);\r\n\r\n         if (outerCurve.Count() > 1)\r\n            Importer.TheLog.LogError(Id, \"Revolved surface has multiple profile curves, ignoring all but first.\", false);\r\n\r\n         Curve revolvedSurfaceProfileCurve = profileCurve.CreateTransformed(Position);\r\n         if (!RevolvedSurface.IsValidProfileCurve(AxisPosition.Origin, AxisPosition.BasisZ, revolvedSurfaceProfileCurve))\r\n            Importer.TheLog.LogError(Id, \"Profile curve is invalid for this revolved surface.\", true);\r\n\r\n         if (lcs == null)\r\n            return RevolvedSurface.Create(AxisPosition.Origin, AxisPosition.BasisZ, revolvedSurfaceProfileCurve);\r\n\r\n         Curve transformedRevolvedSurfaceProfileCurve = revolvedSurfaceProfileCurve.CreateTransformed(lcs);\r\n         return RevolvedSurface.Create(lcs.OfPoint(AxisPosition.Origin), lcs.OfVector(AxisPosition.BasisZ), transformedRevolvedSurfaceProfileCurve);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSurfaceStyle.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCSurfaceStyle : IFCPresentationStyle\r\n   {\r\n      private IFCSurfaceSide m_SurfaceSide = IFCSurfaceSide.Both;\r\n\r\n      private IFCSurfaceStyleShading m_ShadingStyle = null;\r\n\r\n      private ElementId m_CreatedElementId = ElementId.InvalidElementId;\r\n\r\n      /// <summary>\r\n      /// Get the IFCSurfaceStyleShading, if it is set.\r\n      /// </summary>\r\n      public IFCSurfaceStyleShading ShadingStyle\r\n      {\r\n         get { return m_ShadingStyle; }\r\n         protected set { m_ShadingStyle = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the side for which the style is set: inside, outside, or both.\r\n      /// </summary>\r\n      public IFCSurfaceSide SurfaceSide\r\n      {\r\n         get { return m_SurfaceSide; }\r\n         protected set { m_SurfaceSide = value; }\r\n      }\r\n\r\n      protected IFCSurfaceStyle()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle item)\r\n      {\r\n         base.Process(item);\r\n\r\n         SurfaceSide = IFCEnums.GetSafeEnumerationAttribute<IFCSurfaceSide>(item, \"Side\", IFCSurfaceSide.Both);\r\n\r\n         HashSet<IFCAnyHandle> styles = IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(item, \"Styles\");\r\n         if (styles == null || styles.Count == 0)\r\n            Importer.TheLog.LogError(item.StepId, \"No style information found, ignoring.\", true);\r\n\r\n         foreach (IFCAnyHandle style in styles)\r\n         {\r\n            try\r\n            {\r\n               if (IFCAnyHandleUtil.IsSubTypeOf(style, IFCEntityType.IfcSurfaceStyleShading))\r\n               {\r\n                  if (ShadingStyle == null)\r\n                     ShadingStyle = IFCSurfaceStyleShading.ProcessIFCSurfaceStyleShading(style);\r\n                  else\r\n                     Importer.TheLog.LogWarning(item.StepId, \"Duplicate IfcSurfaceStyleShading, ignoring.\", false);\r\n               }\r\n               else\r\n                  Importer.TheLog.LogUnhandledSubTypeError(style, \"IfcSurfaceStyleElementSelect\", false);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n               Importer.TheLog.LogError(style.StepId, ex.Message, false);\r\n            }\r\n         }\r\n      }\r\n\r\n      protected IFCSurfaceStyle(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create the material associated to the element, and return the id.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"forcedName\">An optional name that sets the name of the material created, regardless of surface style name.</param>\r\n      /// <param name=\"suggestedName\">An optional name that suggests the name of the material created, if the surface style name is null.</param>\r\n      /// <param name=\"idOverride\">The id of the parent item, used if forcedName is used.</param>\r\n      /// <returns>The material id.</returns>\r\n      /// <remarks>If forcedName is not null, this will not store the created element id in this class.</remarks>\r\n      public ElementId Create(Document doc, string forcedName, string suggestedName, int idOverride)\r\n      {\r\n         try\r\n         {\r\n            bool overrideName = (forcedName != null) && (string.Compare(forcedName, Name) != 0);\r\n            if (!overrideName && m_CreatedElementId != ElementId.InvalidElementId)\r\n               return m_CreatedElementId;\r\n\r\n            string name = overrideName ? forcedName : Name;\r\n            if (string.IsNullOrEmpty(name))\r\n            {\r\n               if (!string.IsNullOrEmpty(suggestedName))\r\n                  name = suggestedName;\r\n               else\r\n                  name = \"IFC Surface Style\";\r\n            }\r\n            int id = overrideName ? idOverride : Id;\r\n\r\n            if (IsValidForCreation)\r\n            {\r\n               Color color = null;\r\n               int? transparency = null;\r\n               int? shininess = null;\r\n               int? smoothness = null;\r\n\r\n               IFCSurfaceStyleShading shading = ShadingStyle;\r\n               if (shading != null)\r\n               {\r\n                  color = shading.GetSurfaceColor();\r\n                  transparency = (int)(shading.Transparency * 100 + 0.5);\r\n                  shininess = shading.GetShininess();\r\n                  smoothness = shading.GetSmoothness();\r\n               }\r\n\r\n               IFCMaterialInfo materialInfo =\r\n                   IFCMaterialInfo.Create(color, transparency, shininess, smoothness, ElementId.InvalidElementId);\r\n               ElementId createdElementId = IFCMaterial.CreateMaterialElem(doc, id, name, materialInfo);\r\n               if (!overrideName)\r\n                  m_CreatedElementId = createdElementId;\r\n               return createdElementId;\r\n            }\r\n            else\r\n               IsValidForCreation = false;\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            IsValidForCreation = false;\r\n            Importer.TheLog.LogCreationError(this, ex.Message, false);\r\n         }\r\n\r\n         return ElementId.InvalidElementId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcSurfaceStyle entity handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcSurfaceStyle\">The IfcSurfaceStyle handle.</param>\r\n      /// <returns>The IFCSurfaceStyle object.</returns>\r\n      public static IFCSurfaceStyle ProcessIFCSurfaceStyle(IFCAnyHandle ifcSurfaceStyle)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSurfaceStyle))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSurfaceStyle);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity surfaceStyle;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSurfaceStyle.StepId, out surfaceStyle))\r\n            surfaceStyle = new IFCSurfaceStyle(ifcSurfaceStyle);\r\n         return (surfaceStyle as IFCSurfaceStyle);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSurfaceStyleShading.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class for IfcSurfaceStyleShading and subtype IfcSurfaceStyleRendering.\r\n   /// </summary>\r\n   public class IFCSurfaceStyleShading : IFCEntity\r\n   {\r\n      private IFCColourRgb m_SurfaceColour = null;\r\n\r\n      private double m_Transparency = 0.0;\r\n\r\n      private IFCColourRgb m_DiffuseColour = null;\r\n      private double? m_DiffuseColourFactor = null;\r\n\r\n      private IFCColourRgb m_TransmissionColour = null;\r\n      private double? m_TransmissionColourFactor = null;\r\n\r\n      private IFCColourRgb m_DiffuseTransmissionColour = null;\r\n      private double? m_DiffuseTransmissionColourFactor = null;\r\n\r\n      private IFCColourRgb m_ReflectionColour = null;\r\n      private double? m_ReflectionColourFactor = null;\r\n\r\n      private IFCColourRgb m_SpecularColour = null;\r\n      private double? m_SpecularColourFactor = null;\r\n\r\n      // Only one of these two will be set.\r\n      private double? m_SpecularExponent = null;\r\n      private double? m_SpecularRoughness = null;\r\n\r\n      // TODO: handle.\r\n\r\n      //ReflectanceMethod   :   IfcReflectanceMethodEnum;  \r\n\r\n      protected IFCSurfaceStyleShading()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the surface color of the shading style.\r\n      /// </summary>\r\n      public Color GetSurfaceColor()\r\n      {\r\n         if (m_SurfaceColour != null)\r\n            return m_SurfaceColour.GetColor();\r\n\r\n         // Default to gray.\r\n         return new Color(127, 127, 127);\r\n      }\r\n\r\n      private Color GetDefaultColor()\r\n      {\r\n         // Default to gray.\r\n         return new Color(127, 127, 127);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the surface color of the shading style, scaled by a normalised factor.\r\n      /// </summary>\r\n      public Color GetSurfaceColor(double factor)\r\n      {\r\n         if (m_SurfaceColour != null)\r\n            return m_SurfaceColour.GetScaledColor(factor);\r\n         return GetDefaultColor();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the diffuse color of the shading style.\r\n      /// </summary>\r\n      public Color GetDiffuseColor()\r\n      {\r\n         if (m_DiffuseColour != null)\r\n            return m_DiffuseColour.GetColor();\r\n         if (m_DiffuseColourFactor.HasValue)\r\n            return GetSurfaceColor(m_DiffuseColourFactor.Value);\r\n         return GetDefaultColor();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the transmission color of the shading style.\r\n      /// </summary>\r\n      public Color GetTransmissionColor()\r\n      {\r\n         if (m_TransmissionColour != null)\r\n            return m_TransmissionColour.GetColor();\r\n         if (m_TransmissionColourFactor.HasValue)\r\n            return GetSurfaceColor(m_TransmissionColourFactor.Value);\r\n         return GetDefaultColor();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the diffuse transmission color of the shading style.\r\n      /// </summary>\r\n      public Color GetDiffuseTransmissionColor()\r\n      {\r\n         if (m_DiffuseTransmissionColour != null)\r\n            return m_DiffuseTransmissionColour.GetColor();\r\n         if (m_DiffuseTransmissionColourFactor.HasValue)\r\n            return GetSurfaceColor(m_DiffuseTransmissionColourFactor.Value);\r\n         return GetDefaultColor();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the reflection color of the shading style.\r\n      /// </summary>\r\n      public Color GetReflectionColor()\r\n      {\r\n         if (m_ReflectionColour != null)\r\n            return m_ReflectionColour.GetColor();\r\n         if (m_ReflectionColourFactor.HasValue)\r\n            return GetSurfaceColor(m_ReflectionColourFactor.Value);\r\n         return GetDefaultColor();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return the specular color of the shading style.\r\n      /// </summary>\r\n      public Color GetSpecularColor()\r\n      {\r\n         if (m_SpecularColour != null)\r\n            return m_SpecularColour.GetColor();\r\n         if (m_SpecularColourFactor.HasValue)\r\n            return GetSurfaceColor(m_SpecularColourFactor.Value);\r\n         return GetDefaultColor();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the transparency of the shading style - 1.0 means completely transparent.\r\n      /// </summary>\r\n      public double Transparency\r\n      {\r\n         get { return m_Transparency; }\r\n         protected set { m_Transparency = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates Revit shininess for a material based on the specular colour, if specified.\r\n      /// </summary>\r\n      public int? GetSmoothness()\r\n      {\r\n         if (m_SpecularColourFactor != null)\r\n            return (int)(m_SpecularColourFactor * 100 + 0.5);\r\n         if (m_SpecularColour == null)\r\n            return null;\r\n\r\n         // heuristic: get average of three components.\r\n         double ave = (m_SpecularColour.NormalisedRed + m_SpecularColour.NormalisedBlue + m_SpecularColour.NormalisedGreen) / 3.0;\r\n         return (int)(ave * 100 + 0.5);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Calculates Revit shininess for a material based on the specular highlight, if specified.\r\n      /// </summary>\r\n      public int? GetShininess()\r\n      {\r\n         int shininess = 0;\r\n         string warning = null;\r\n\r\n         // Assumes that m_SpecularExponent or m_SpecularShininess is set.\r\n         // Validates that the value is in the range [0,128].\r\n         if (m_SpecularExponent == null)\r\n         {\r\n            if (m_SpecularRoughness == null)\r\n               return null;\r\n\r\n            // m_SpecularRoughness is a real from [0,1] and is the reverse of our shininess.\r\n            shininess = (int)((1.0 - m_SpecularRoughness.Value) * 128 + 0.5);\r\n\r\n            if ((shininess < 0) || (shininess > 128))\r\n               warning = \"Specular Roughness of \" + m_SpecularRoughness.Value + \" is of out range, should be between 0 and 1.\";\r\n         }\r\n         else\r\n         {\r\n            shininess = (int)(m_SpecularExponent.Value);\r\n\r\n            if ((shininess < 0) || (shininess > 128))\r\n               warning = \"Specular Exponent of \" + m_SpecularExponent.Value + \" is of out range, should be between 0 and 128.\";\r\n         }\r\n\r\n\r\n         if (shininess < 0)\r\n            shininess = 0;\r\n         else if (shininess > 128)\r\n            shininess = 128;\r\n\r\n         if (warning != null)\r\n            Importer.TheLog.LogWarning(Id, warning, true);\r\n\r\n         return shininess;\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle item)\r\n      {\r\n         base.Process(item);\r\n\r\n         IFCAnyHandle surfaceColour = IFCImportHandleUtil.GetRequiredInstanceAttribute(item, \"SurfaceColour\", false);\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(surfaceColour))\r\n            m_SurfaceColour = IFCColourRgb.ProcessIFCColourRgb(surfaceColour);\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(item, IFCEntityType.IfcSurfaceStyleRendering))\r\n         {\r\n            Transparency = IFCImportHandleUtil.GetOptionalNormalisedRatioAttribute(item, \"Transparency\", 0.0);\r\n\r\n            IFCData diffuseColour = item.GetAttribute(\"DiffuseColour\");\r\n            if (diffuseColour.PrimitiveType == IFCDataPrimitiveType.Instance)\r\n               m_DiffuseColour = IFCColourRgb.ProcessIFCColourRgb(diffuseColour.AsInstance());\r\n            else if (diffuseColour.PrimitiveType == IFCDataPrimitiveType.Double)\r\n               m_DiffuseColourFactor = diffuseColour.AsDouble();\r\n\r\n            IFCData transmissionColour = item.GetAttribute(\"TransmissionColour\");\r\n            if (transmissionColour.PrimitiveType == IFCDataPrimitiveType.Instance)\r\n               m_TransmissionColour = IFCColourRgb.ProcessIFCColourRgb(transmissionColour.AsInstance());\r\n            else if (transmissionColour.PrimitiveType == IFCDataPrimitiveType.Double)\r\n               m_TransmissionColourFactor = transmissionColour.AsDouble();\r\n\r\n            IFCData diffuseTransmissionColour = item.GetAttribute(\"DiffuseTransmissionColour\");\r\n            if (diffuseTransmissionColour.PrimitiveType == IFCDataPrimitiveType.Instance)\r\n               m_DiffuseTransmissionColour = IFCColourRgb.ProcessIFCColourRgb(diffuseTransmissionColour.AsInstance());\r\n            else if (diffuseTransmissionColour.PrimitiveType == IFCDataPrimitiveType.Double)\r\n               m_DiffuseTransmissionColourFactor = diffuseTransmissionColour.AsDouble();\r\n\r\n            IFCData reflectionColour = item.GetAttribute(\"ReflectionColour\");\r\n            if (reflectionColour.PrimitiveType == IFCDataPrimitiveType.Instance)\r\n               m_ReflectionColour = IFCColourRgb.ProcessIFCColourRgb(reflectionColour.AsInstance());\r\n            else if (reflectionColour.PrimitiveType == IFCDataPrimitiveType.Double)\r\n               m_ReflectionColourFactor = reflectionColour.AsDouble();\r\n\r\n            IFCData specularColour = item.GetAttribute(\"SpecularColour\");\r\n            if (specularColour.PrimitiveType == IFCDataPrimitiveType.Instance)\r\n               m_SpecularColour = IFCColourRgb.ProcessIFCColourRgb(specularColour.AsInstance());\r\n            else if (specularColour.PrimitiveType == IFCDataPrimitiveType.Double)\r\n               m_SpecularColourFactor = specularColour.AsDouble();\r\n\r\n            IFCData specularHighlight = item.GetAttribute(\"SpecularHighlight\");\r\n            if (specularHighlight.PrimitiveType == IFCDataPrimitiveType.Double)\r\n            {\r\n               try\r\n               {\r\n                  string simpleType = specularHighlight.GetSimpleType();\r\n                  if (string.Compare(simpleType, \"IfcSpecularExponent\", true) == 0)\r\n                     m_SpecularExponent = specularHighlight.AsDouble();\r\n                  else if (string.Compare(simpleType, \"IfcSpecularRoughness\", true) == 0)\r\n                     m_SpecularRoughness = specularHighlight.AsDouble();\r\n                  else\r\n                     Importer.TheLog.LogError(item.StepId, \"Unknown type of specular highlight, ignoring.\", false);\r\n               }\r\n               catch\r\n               {\r\n                  Importer.TheLog.LogError(item.StepId, \"Unspecified type of specular highlight, ignoring.\", false);\r\n               }\r\n            }\r\n            else if (specularHighlight.HasValue)\r\n            {\r\n               Importer.TheLog.LogError(item.StepId, \"Unknown type of specular highlight, ignoring.\", false);\r\n            }\r\n         }\r\n      }\r\n\r\n      protected IFCSurfaceStyleShading(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcSurfaceStyleShading entity handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcSurfaceStyleShading\">The IfcSurfaceStyleShading handle.</param>\r\n      /// <returns>The IFCSurfaceStyleShading object.</returns>\r\n      public static IFCSurfaceStyleShading ProcessIFCSurfaceStyleShading(IFCAnyHandle ifcSurfaceStyleShading)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSurfaceStyleShading))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSurfaceStyleShading);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity surfaceStyleShading;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSurfaceStyleShading.StepId, out surfaceStyleShading))\r\n            surfaceStyleShading = new IFCSurfaceStyleShading(ifcSurfaceStyleShading);\r\n         return (surfaceStyleShading as IFCSurfaceStyleShading);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSweptAreaSolid.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public abstract class IFCSweptAreaSolid : IFCSolidModel\r\n   {\r\n      IFCProfileDef m_SweptArea = null;\r\n\r\n      Transform m_Position = null;\r\n\r\n      /// <summary>\r\n      /// The swept area profile of the IfcSweptAreaSolid.\r\n      /// </summary>\r\n      public IFCProfileDef SweptArea\r\n      {\r\n         get { return m_SweptArea; }\r\n         protected set { m_SweptArea = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The local coordinate system of the IfcSweptAreaSolid.\r\n      /// </summary>\r\n      public Transform Position\r\n      {\r\n         get { return m_Position; }\r\n         protected set { m_Position = value; }\r\n      }\r\n\r\n      protected IFCSweptAreaSolid()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle solid)\r\n      {\r\n         base.Process(solid);\r\n\r\n         IFCAnyHandle sweptArea = IFCImportHandleUtil.GetRequiredInstanceAttribute(solid, \"SweptArea\", true);\r\n         SweptArea = IFCProfileDef.ProcessIFCProfileDef(sweptArea);\r\n\r\n         IFCAnyHandle location = IFCImportHandleUtil.GetRequiredInstanceAttribute(solid, \"Position\", false);\r\n         if (location != null)\r\n            Position = IFCLocation.ProcessIFCAxis2Placement(location);\r\n         else\r\n            Position = Transform.Identity;\r\n      }\r\n\r\n      protected IFCSweptAreaSolid(IFCAnyHandle solid)\r\n      {\r\n      }\r\n\r\n      private IList<CurveLoop> GetTransformedCurveLoopsFromSimpleProfile(IFCSimpleProfile simpleSweptArea, Transform scaledLcs)\r\n      {\r\n         IList<CurveLoop> loops = new List<CurveLoop>();\r\n\r\n         // It is legal for simpleSweptArea.Position to be null, for example for IfcArbitraryClosedProfileDef.\r\n         Transform scaledSweptAreaPosition =\r\n             (simpleSweptArea.Position == null) ? scaledLcs : scaledLcs.Multiply(simpleSweptArea.Position);\r\n\r\n         CurveLoop currLoop = simpleSweptArea.GetTheOuterCurveLoop();\r\n         if ((currLoop?.Count() ?? 0) == 0)\r\n         {\r\n            Importer.TheLog.LogError(simpleSweptArea.Id, \"No outer curve loop for profile, ignoring.\", false);\r\n            return null;\r\n         }\r\n\r\n         currLoop = IFCGeometryUtil.SplitUnboundCyclicCurves(currLoop);\r\n         loops.Add(IFCGeometryUtil.CreateTransformed(currLoop, Id, scaledSweptAreaPosition));\r\n\r\n         if (simpleSweptArea.InnerCurves != null)\r\n         {\r\n            foreach (CurveLoop innerCurveLoop in simpleSweptArea.InnerCurves)\r\n            {\r\n               loops.Add(IFCGeometryUtil.CreateTransformed(IFCGeometryUtil.SplitUnboundCyclicCurves(innerCurveLoop), Id, scaledSweptAreaPosition));\r\n            }\r\n         }\r\n\r\n         return loops;\r\n      }\r\n\r\n      private void GetTransformedCurveLoopsFromProfile(IFCProfileDef profile, Transform scaledLcs, ISet<IList<CurveLoop>> loops)\r\n      {\r\n         if (profile is IFCSimpleProfile)\r\n         {\r\n            IFCSimpleProfile simpleSweptArea = profile as IFCSimpleProfile;\r\n\r\n            IList<CurveLoop> currLoops = GetTransformedCurveLoopsFromSimpleProfile(simpleSweptArea, scaledLcs);\r\n            if (currLoops != null && currLoops.Count > 0)\r\n               loops.Add(currLoops);\r\n         }\r\n         else if (profile is IFCCompositeProfile)\r\n         {\r\n            IFCCompositeProfile compositeSweptArea = profile as IFCCompositeProfile;\r\n\r\n            foreach (IFCProfileDef subProfile in compositeSweptArea.Profiles)\r\n               GetTransformedCurveLoopsFromProfile(subProfile, scaledLcs, loops);\r\n         }\r\n         else if (profile is IFCDerivedProfileDef)\r\n         {\r\n            IFCDerivedProfileDef derivedProfileDef = profile as IFCDerivedProfileDef;\r\n\r\n            Transform localLCS = derivedProfileDef.Operator.Transform;\r\n            \r\n            Transform fullScaledLCS = scaledLcs;\r\n            if (fullScaledLCS == null)\r\n               fullScaledLCS = localLCS;\r\n            else if (localLCS != null)\r\n               fullScaledLCS = fullScaledLCS.Multiply(localLCS);\r\n\r\n            GetTransformedCurveLoopsFromProfile(derivedProfileDef.ParentProfile, fullScaledLCS, loops);\r\n         }\r\n         else\r\n         {\r\n            // TODO: Support.\r\n            Importer.TheLog.LogError(Id, \"SweptArea Profile #\" + profile.Id + \" not yet supported.\", false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gathers a set of transformed curve loops.  Each member of the set has exactly one outer and zero of more inner loops.\r\n      /// </summary>\r\n      /// <param name=\"scaledLcs\">The scaled (true) transform.</param>\r\n      /// <returns>The set of list of curveloops representing logically disjoint profiles of exactly one outer and zero of more inner loops.</returns>\r\n      /// <remarks>We state \"logically disjoint\" because the code does not check the validity of the loops at this time.</remarks>\r\n      protected ISet<IList<CurveLoop>> GetTransformedCurveLoops(Transform scaledLCS)\r\n      {\r\n         ISet<IList<CurveLoop>> loops = new HashSet<IList<CurveLoop>>();\r\n         GetTransformedCurveLoopsFromProfile(SweptArea, scaledLCS, loops);\r\n         return loops;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCSolidModel object from a handle of type IfcSweptAreaSolid.\r\n      /// </summary>\r\n      /// <param name=\"ifcSweptAreaSolid\">The IFC handle.</param>\r\n      /// <returns>The IFCSweptAreaSolid object.</returns>\r\n      public static IFCSweptAreaSolid ProcessIFCSweptAreaSolid(IFCAnyHandle ifcSweptAreaSolid)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSweptAreaSolid))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSweptAreaSolid);\r\n            return null;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcSweptAreaSolid, IFCEntityType.IfcExtrudedAreaSolid))\r\n            return IFCExtrudedAreaSolid.ProcessIFCExtrudedAreaSolid(ifcSweptAreaSolid);\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcSweptAreaSolid, IFCEntityType.IfcRevolvedAreaSolid))\r\n            return IFCRevolvedAreaSolid.ProcessIFCRevolvedAreaSolid(ifcSweptAreaSolid);\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcSweptAreaSolid, IFCEntityType.IfcSurfaceCurveSweptAreaSolid))\r\n            return IFCSurfaceCurveSweptAreaSolid.ProcessIFCSurfaceCurveSweptAreaSolid(ifcSweptAreaSolid);\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcSweptAreaSolid, IFCEntityType.IfcSweptAreaSolid, true);\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSweptDiskSolid.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.ApplicationServices;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCSweptDiskSolid : IFCSolidModel\r\n   {\r\n      /// <summary>\r\n      /// The curve used for the sweep.\r\n      /// </summary>\r\n      public IFCCurve Directrix { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The outer radius of the swept disk.\r\n      /// </summary>\r\n      public double Radius { get; protected set; } = 0.0;\r\n\r\n      /// <summary>\r\n      /// The optional inner radius of the swept disk.\r\n      /// </summary>\r\n      public double? InnerRadius { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The start parameter of the sweep, as measured along the length of the Directrix.\r\n      /// </summary>\r\n      /// <remarks>This is not optional in IFC, but we will default to 0.0 if not set.</remarks>\r\n      public double StartParameter { get; protected set; } = 0.0;\r\n\r\n      /// <summary>\r\n      /// The optional end parameter of the sweep, as measured along the length of the Directrix.\r\n      /// </summary>\r\n      /// <remarks>This is not optional in IFC, but we will default to ParametricLength(curve) if not set.</remarks>\r\n      public double? EndParameter { get; protected set; } = null;\r\n\r\n      protected IFCSweptDiskSolid()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle solid)\r\n      {\r\n         base.Process(solid);\r\n\r\n         IFCAnyHandle directrix = IFCImportHandleUtil.GetRequiredInstanceAttribute(solid, \"Directrix\", true);\r\n         Directrix = IFCCurve.ProcessIFCCurve(directrix);\r\n\r\n         bool found = false;\r\n         Radius = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(solid, \"Radius\", out found);\r\n         if (!found || !Application.IsValidThickness(Radius))\r\n            Importer.TheLog.LogError(solid.StepId, \"IfcSweptDiskSolid radius is invalid, aborting.\", true);\r\n\r\n         double innerRadius = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(solid, \"InnerRadius\", 0.0);\r\n         if (Application.IsValidThickness(innerRadius))\r\n         {\r\n            if (!Application.IsValidThickness(Radius - innerRadius))\r\n               Importer.TheLog.LogError(solid.StepId, \"IfcSweptDiskSolid inner radius is too large, aborting.\", true);\r\n            InnerRadius = innerRadius;\r\n         }\r\n\r\n         StartParameter = IFCImportHandleUtil.GetOptionalDoubleAttribute(solid, \"StartParam\", 0.0);\r\n         if (StartParameter < MathUtil.Eps())\r\n            StartParameter = 0.0;\r\n\r\n         double endParameter = IFCImportHandleUtil.GetOptionalDoubleAttribute(solid, \"EndParam\", -1.0);\r\n         if (!MathUtil.IsAlmostEqual(endParameter, -1.0))\r\n         {\r\n            if (endParameter < StartParameter + MathUtil.Eps())\r\n            {\r\n               Importer.TheLog.LogWarning(solid.StepId, \"IfcSweptDiskSolid swept curve end parameter less than or equal to start parameter, ignoring both.\", true);\r\n               StartParameter = 0.0;\r\n            }\r\n            else\r\n            {\r\n               EndParameter = endParameter;\r\n            }\r\n         }\r\n      }\r\n\r\n      private IList<CurveLoop> CreateProfileCurveLoopsForDirectrix(Curve directrix, out double startParam)\r\n      {\r\n         startParam = 0.0;\r\n\r\n         if (directrix == null)\r\n            return null;\r\n\r\n         if (directrix.IsBound)\r\n            startParam = directrix.GetEndParameter(0);\r\n\r\n         Transform originTrf = directrix.ComputeDerivatives(startParam, false);\r\n\r\n         if (originTrf == null)\r\n            return null;\r\n\r\n         // The X-dir of the transform of the start of the directrix will form the normal of the disk.\r\n         // We are not using the origin in Plane.CreateByNormalAndOrigin because that has\r\n         // limits of [-30K,30K].\r\n         Plane diskPlaneAxes = Plane.CreateByNormalAndOrigin(originTrf.BasisX, XYZ.Zero);\r\n\r\n         IList<CurveLoop> profileCurveLoops = new List<CurveLoop>();\r\n\r\n         CurveLoop diskOuterCurveLoop = new CurveLoop();\r\n         diskOuterCurveLoop.Append(Arc.Create(originTrf.Origin, Radius, 0, Math.PI, diskPlaneAxes.XVec, diskPlaneAxes.YVec));\r\n         diskOuterCurveLoop.Append(Arc.Create(originTrf.Origin, Radius, Math.PI, 2.0 * Math.PI, diskPlaneAxes.XVec, diskPlaneAxes.YVec));\r\n         profileCurveLoops.Add(diskOuterCurveLoop);\r\n\r\n         if (InnerRadius.HasValue)\r\n         {\r\n            CurveLoop diskInnerCurveLoop = new CurveLoop();\r\n            diskInnerCurveLoop.Append(Arc.Create(originTrf.Origin, InnerRadius.Value, 0, Math.PI, diskPlaneAxes.XVec, diskPlaneAxes.YVec));\r\n            diskInnerCurveLoop.Append(Arc.Create(originTrf.Origin, InnerRadius.Value, Math.PI, 2.0 * Math.PI, diskPlaneAxes.XVec, diskPlaneAxes.YVec));\r\n            profileCurveLoops.Add(diskInnerCurveLoop);\r\n         }\r\n\r\n         return profileCurveLoops;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create as much of the swept disk solid geometry as possible.\r\n      /// </summary>\r\n      /// <param name=\"trimmedDirectrixInWCS\">The directrix.</param>\r\n      /// <param name=\"profileCurveLoops\">The original profile curves.</param>\r\n      /// <param name=\"solidOptions\">The options for creating the solids.</param>\r\n      /// <returns>The created geometry, and true if it represents all of the original pieces.</returns>\r\n      private (IList<GeometryObject>, bool) SplitSweptDiskIntoValidPieces(CurveLoop trimmedDirectrixInWCS, IList<CurveLoop> profileCurveLoops, SolidOptions solidOptions)\r\n      {\r\n         // If we have 0 or 1 curves, there is nothing we can do here.\r\n         int numCurves = trimmedDirectrixInWCS.Count();\r\n         if (numCurves < 2)\r\n            return (null, false);\r\n\r\n         // We will attempt to represent the original description in as few pieces as possible.  \r\n         IList<Curve> directrixCurves = new List<Curve>();\r\n         foreach (Curve directrixCurve in trimmedDirectrixInWCS)\r\n         {\r\n            if (directrixCurve == null)\r\n            {\r\n               numCurves--;\r\n               if (numCurves < 2)\r\n                  return (null, false);\r\n               continue;\r\n            }\r\n            directrixCurves.Add(directrixCurve);\r\n         }\r\n\r\n         IList<GeometryObject> sweptDiskPieces = new List<GeometryObject>();\r\n\r\n         // We will march along the directrix one curve at a time, trying to build a bigger piece of the sweep.  At the point that we throw an exception,\r\n         // we will take the last biggest piece and start over.\r\n         CurveLoop currentCurveLoop = new CurveLoop();\r\n         Solid bestSolidSoFar = null;\r\n         double pathAttachmentParam = directrixCurves[0].GetEndParameter(0);\r\n         bool missedGeometry = false;\r\n\r\n         for (int ii = 0; ii < numCurves; ii++)\r\n         {\r\n            currentCurveLoop.Append(directrixCurves[ii]);\r\n            try\r\n            {\r\n               Solid currentSolid = GeometryCreationUtilities.CreateSweptGeometry(currentCurveLoop, 0, pathAttachmentParam, profileCurveLoops,\r\n                  solidOptions);\r\n               bestSolidSoFar = currentSolid;\r\n            }\r\n            catch\r\n            {\r\n               if (bestSolidSoFar != null)\r\n               {\r\n                  sweptDiskPieces.Add(bestSolidSoFar);\r\n                  bestSolidSoFar = null;\r\n               }\r\n            }\r\n\r\n            // This should only happen as a result of the catch loop above.  We want to\r\n            // protect against the case where one or more pieces of the sweep are completely\r\n            // invalid.\r\n            while (bestSolidSoFar == null && (ii < numCurves))\r\n            {\r\n               try\r\n               {\r\n                  currentCurveLoop = new CurveLoop();\r\n                  currentCurveLoop.Append(directrixCurves[ii]);\r\n                  profileCurveLoops = CreateProfileCurveLoopsForDirectrix(directrixCurves[ii], out pathAttachmentParam);\r\n\r\n                  Solid currentSolid = GeometryCreationUtilities.CreateSweptGeometry(currentCurveLoop, 0, pathAttachmentParam, profileCurveLoops,\r\n                     solidOptions);\r\n                  bestSolidSoFar = currentSolid;\r\n                  break;\r\n               }\r\n               catch\r\n               {\r\n                  ii++;\r\n                  missedGeometry = true;\r\n               }\r\n            }\r\n         }\r\n\r\n         if (bestSolidSoFar != null)\r\n            sweptDiskPieces.Add(bestSolidSoFar);\r\n\r\n         return (sweptDiskPieces, !missedGeometry);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      /// <returns>Zero or more created geometries.</returns>\r\n      protected override IList<GeometryObject> CreateGeometryInternal(\r\n            IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid)\r\n      {\r\n         List<GeometryObject> myObjs = null;\r\n         Transform scaledSweptDiskPosition = scaledLcs ?? Transform.Identity;\r\n\r\n         IList<CurveLoop> trimmedDirectrices = IFCGeometryUtil.TrimCurveLoops(Id, Directrix, StartParameter, EndParameter);\r\n         if (trimmedDirectrices == null)\r\n            return null;\r\n\r\n         foreach (CurveLoop trimmedDirectrix in trimmedDirectrices)\r\n         {\r\n            CurveLoop trimmedDirectrixInWCS = IFCGeometryUtil.CreateTransformed(trimmedDirectrix, Id, scaledSweptDiskPosition);\r\n\r\n            // Create the disk.\r\n            Curve firstCurve = null;\r\n            foreach (Curve curve in trimmedDirectrixInWCS)\r\n            {\r\n               firstCurve = curve;\r\n               break;\r\n            }\r\n\r\n            double startParam = 0.0;\r\n            IList<CurveLoop> profileCurveLoops = CreateProfileCurveLoopsForDirectrix(firstCurve, out startParam);\r\n            if (profileCurveLoops == null)\r\n               return null;\r\n\r\n            SolidOptions solidOptions = new SolidOptions(GetMaterialElementId(shapeEditScope), shapeEditScope.GraphicsStyleId);\r\n            myObjs = new List<GeometryObject>();\r\n\r\n            try\r\n            {\r\n               Solid sweptDiskSolid = GeometryCreationUtilities.CreateSweptGeometry(trimmedDirectrixInWCS, 0, startParam, profileCurveLoops,\r\n                  solidOptions);\r\n               if (sweptDiskSolid != null)\r\n                  myObjs.Add(sweptDiskSolid);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n               // If we can't create a solid, we will attempt to split the Solid into valid pieces (that will likely have some overlap).\r\n               if (ex.Message.Contains(\"self-intersections\") || ex.Message.Contains(\"Failed to create\"))\r\n               {\r\n                  (IList<GeometryObject>, bool) solidSegments = SplitSweptDiskIntoValidPieces(trimmedDirectrixInWCS, profileCurveLoops, solidOptions);\r\n                  if (solidSegments.Item1 != null)\r\n                     myObjs.AddRange(solidSegments.Item1);\r\n\r\n                  // If Item2 is true, that means that the backup SplitSweptDiskIntoValidPieces routine was\r\n                  // able to create (probably slightly self-intersecting) geometry for all of the pieces\r\n                  // of the directrix.  If it is false, then there was some part of the directrix that we\r\n                  // couldn't create geometry for.  Log a warning in the first case and an error in the\r\n                  // second.\r\n                  if (solidSegments.Item2)\r\n                     Importer.TheLog.LogWarning(Id, \"The IfcSweptDiskSolid definition does not define a valid solid, likely due to self-intersections or other such problems; the profile probably extends too far toward the inner curvature of the sweep path. Creating the minimum number of solids possible to represent the geometry.\", false);\r\n                  else\r\n                     Importer.TheLog.LogError(Id, \"The IfcSweptDiskSolid definition does not define a valid solid, likely due to self-intersections or other such problems; the profile probably extends too far toward the inner curvature of the sweep path. Creating as much of the geometry as possible.\", false);\r\n\r\n               }\r\n               else\r\n                  throw;\r\n            }\r\n         }\r\n\r\n         return myObjs;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n\r\n         IList<GeometryObject> sweptDiskGeometries = CreateGeometryInternal(shapeEditScope, scaledLcs, guid);\r\n         if (sweptDiskGeometries != null)\r\n         {\r\n            foreach (GeometryObject sweptDiskGeometry in sweptDiskGeometries)\r\n            {\r\n               shapeEditScope.AddGeometry(IFCSolidInfo.Create(Id, sweptDiskGeometry));\r\n            }\r\n         }\r\n      }\r\n\r\n      protected IFCSweptDiskSolid(IFCAnyHandle solid)\r\n      {\r\n         Process(solid);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCSweptDiskSolid object from a handle of type IfcSweptDiskSolid.\r\n      /// </summary>\r\n      /// <param name=\"ifcSolid\">The IFC handle.</param>\r\n      /// <returns>The IFCSweptDiskSolid object.</returns>\r\n      public static IFCSweptDiskSolid ProcessIFCSweptDiskSolid(IFCAnyHandle ifcSolid)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSolid))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSweptDiskSolid);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity solid;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSolid.StepId, out solid))\r\n            solid = new IFCSweptDiskSolid(ifcSolid);\r\n         return (solid as IFCSweptDiskSolid);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSweptSurface.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public abstract class IFCSweptSurface : IFCSurface\r\n   {\r\n      IFCProfileDef m_Profile = null;\r\n\r\n      Transform m_Position = null;\r\n\r\n      public IFCProfileDef SweptCurve\r\n      {\r\n         get { return m_Profile; }\r\n         protected set { m_Profile = value; }\r\n      }\r\n\r\n      public Transform Position\r\n      {\r\n         get { return m_Position; }\r\n         protected set { m_Position = value; }\r\n      }\r\n\r\n      protected IFCSweptSurface()\r\n      {\r\n      }\r\n\r\n      override protected void Process(IFCAnyHandle ifcSurface)\r\n      {\r\n         base.Process(ifcSurface);\r\n\r\n         IFCAnyHandle sweptCurve = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcSurface, \"SweptCurve\", true);\r\n         SweptCurve = IFCProfileDef.ProcessIFCProfileDef(sweptCurve);\r\n\r\n         IFCAnyHandle position = IFCImportHandleUtil.GetOptionalInstanceAttribute(ifcSurface, \"Position\");\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(position))\r\n            Position = Transform.Identity;\r\n         else\r\n            Position = IFCLocation.ProcessIFCAxis2Placement(position);\r\n      }\r\n\r\n      protected IFCSweptSurface(IFCAnyHandle sweptSurface)\r\n      {\r\n         Process(sweptSurface);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCSweptSurface object from a handle of type IfcSweptSurface.\r\n      /// </summary>\r\n      /// <param name=\"ifcSweptSurface\">The IFC handle.</param>\r\n      /// <returns>The IFCSweptSurface object.</returns>\r\n      public static IFCSweptSurface ProcessIFCSweptSurface(IFCAnyHandle ifcSweptSurface)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSweptSurface))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSweptSurface);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity sweptSurface;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSweptSurface.StepId, out sweptSurface))\r\n            return sweptSurface as IFCSweptSurface;\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcSweptSurface, IFCEntityType.IfcSurfaceOfLinearExtrusion))\r\n            return IFCSurfaceOfLinearExtrusion.ProcessIFCSurfaceOfLinearExtrusion(ifcSweptSurface);\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcSweptSurface, IFCEntityType.IfcSurfaceOfRevolution))\r\n            return IFCSurfaceOfRevolution.ProcessIFCSurfaceOfRevolution(ifcSweptSurface);\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcSweptSurface, IFCEntityType.IfcSweptSurface, true);\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCSystem.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcSystem.\r\n   /// </summary>\r\n   public class IFCSystem : IFCGroup\r\n   {\r\n      // <summary>\r\n      /// Processes IfcSystem attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcSystem\">The IfcSystem handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcSystem)\r\n      {\r\n         base.Process(ifcSystem);\r\n      }\r\n\r\n      protected IFCSystem()\r\n      {\r\n      }\r\n\r\n      protected IFCSystem(IFCAnyHandle group)\r\n      {\r\n         Process(group);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcSystem handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcSystem\">The IfcSystem handle.</param>\r\n      /// <returns>The IFCSystem object.</returns>\r\n      public static IFCSystem ProcessIFCSystem(IFCAnyHandle ifcSystem)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcSystem))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSystem);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity cachedIFCSystem;\r\n         IFCImportFile.TheFile.EntityMap.TryGetValue(ifcSystem.StepId, out cachedIFCSystem);\r\n         if (cachedIFCSystem != null)\r\n            return cachedIFCSystem as IFCSystem;\r\n\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(ifcSystem, IFCEntityType.IfcDistributionSystem))\r\n         {\r\n            return IFCDistributionSystem.ProcessIFCDistributionSystem(ifcSystem);\r\n         }\r\n         return new IFCSystem(ifcSystem);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCTopologicalRepresentationItem.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IfcTopologicalRepresentationItem entity\r\n   /// </summary>\r\n   public abstract class IFCTopologicalRepresentationItem : IFCRepresentationItem\r\n   {\r\n      protected IFCTopologicalRepresentationItem()\r\n      {\r\n      }\r\n\r\n      protected IFCTopologicalRepresentationItem(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle item)\r\n      {\r\n         base.Process(item);\r\n      }\r\n\r\n      public static IFCTopologicalRepresentationItem ProcessIFCTopologicalRepresentationItem(IFCAnyHandle ifcTopologicalRepresentationItem)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcTopologicalRepresentationItem))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcTopologicalRepresentationItem);\r\n            return null;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcTopologicalRepresentationItem, IFCEntityType.IfcConnectedFaceSet))\r\n            return IFCConnectedFaceSet.ProcessIFCConnectedFaceSet(ifcTopologicalRepresentationItem);\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcTopologicalRepresentationItem, IFCEntityType.IfcEdge))\r\n            return IFCEdge.ProcessIFCEdge(ifcTopologicalRepresentationItem);\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcTopologicalRepresentationItem, IFCEntityType.IfcFace))\r\n            return IFCFace.ProcessIFCFace(ifcTopologicalRepresentationItem);\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcTopologicalRepresentationItem, IFCEntityType.IfcLoop))\r\n            return IFCLoop.ProcessIFCLoop(ifcTopologicalRepresentationItem);\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcTopologicalRepresentationItem, IFCEntityType.IfcVertex))\r\n            return IFCVertex.ProcessIFCVertex(ifcTopologicalRepresentationItem);\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(ifcTopologicalRepresentationItem, IFCEntityType.IfcTopologicalRepresentationItem, true);\r\n         return null;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCTriangulatedFaceSet.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2020  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCTriangulatedFaceSet : IFCTessellatedFaceSet\r\n   {\r\n      protected IFCTriangulatedFaceSet()\r\n      {\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// List of Normals from the Normals attribute\r\n      /// </summary>\r\n      public IList<IList<double>> Normals { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// Closed attribute\r\n      /// </summary>\r\n      public bool? Closed { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// List of triangle indexes (index to vertices in the Coordinates attribute)\r\n      /// </summary>\r\n      public IList<IList<int>> CoordIndex { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// List of Point index to the coordinates list (new in IFC4-ADD2)\r\n      /// </summary>\r\n      public IList<int> PnIndex { get; protected set; }\r\n\r\n      protected IFCTriangulatedFaceSet(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      private bool ValidatePnIndex(IList<int> pnIndex)\r\n      {\r\n         int numCoords = Coordinates?.CoordList?.Count ?? 0;\r\n         if (numCoords == 0)\r\n            return false;\r\n\r\n         int pnIndexSize = pnIndex?.Count ?? 0;\r\n         if (pnIndexSize == 0)\r\n            return false;\r\n\r\n         // Sanity check.  We know of examples where this data is completely wrong in IFC\r\n         // files.  In this case, we will set it to null.\r\n         foreach (List<int> triIndex in CoordIndex)\r\n         {\r\n            for (int ii = 0; ii < 3; ++ii)\r\n            {\r\n               if (triIndex[ii] > pnIndexSize)\r\n               {\r\n                  Importer.TheLog.LogError(Id, \"Invalid PnIndex for this triangulation, ignoring.\", false);\r\n                  return false;\r\n               }\r\n            }\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Process IfcTriangulatedFaceSet instance\r\n      /// </summary>\r\n      /// <param name=\"ifcTriangulatedFaceSet\">the handle</param>\r\n      protected override void Process(IFCAnyHandle ifcTriangulatedFaceSet)\r\n      {\r\n         base.Process(ifcTriangulatedFaceSet);\r\n\r\n         IList<IList<double>> normals = IFCImportHandleUtil.GetListOfListOfDoubleAttribute(ifcTriangulatedFaceSet, \"Normals\");\r\n         if (normals != null)\r\n            if (normals.Count > 0)\r\n               Normals = normals;\r\n\r\n         bool? closed = IFCAnyHandleUtil.GetBooleanAttribute(ifcTriangulatedFaceSet, \"Closed\");\r\n         if (closed != null)\r\n            Closed = closed;\r\n\r\n         IList<IList<int>> coordIndex = IFCImportHandleUtil.GetListOfListOfIntegerAttribute(ifcTriangulatedFaceSet, \"CoordIndex\");\r\n         if (coordIndex != null)\r\n            if (coordIndex.Count > 0)\r\n               CoordIndex = coordIndex;\r\n\r\n         // Note that obsolete IFC4 files had a \"NormalIndex\".  \r\n         // We ignore this because we can't actually distinguish between these files.\r\n         // \"PnIndex\" is new to IFC4Add2, so we'll protect here in case we see an obsolete file.\r\n         try\r\n         {\r\n            if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4))\r\n            {\r\n               IList<int> pnIndex = IFCAnyHandleUtil.GetAggregateIntAttribute<List<int>>(ifcTriangulatedFaceSet, \"PnIndex\");\r\n               if (ValidatePnIndex(pnIndex))\r\n               {\r\n                  PnIndex = pnIndex;\r\n               }\r\n            }\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            if (IFCImportFile.HasUndefinedAttribute(ex))\r\n               IFCImportFile.TheFile.DowngradeIFC4SchemaTo(IFCSchemaVersion.IFC4Add1Obsolete);\r\n            else\r\n               throw;\r\n         }\r\n      }\r\n\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         if (CoordIndex == null)\r\n         {\r\n            Importer.TheLog.LogError(Id, \"Invalid coordinates for this triangulation, ignoring.\", false);\r\n            return;\r\n         }\r\n\r\n         using (BuilderScope bs = shapeEditScope.InitializeBuilder(IFCShapeBuilderType.TessellatedShapeBuilder))\r\n         {\r\n            base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n\r\n            TessellatedShapeBuilderScope tsBuilderScope = bs as TessellatedShapeBuilderScope;\r\n\r\n            tsBuilderScope.StartCollectingFaceSet();\r\n\r\n            ElementId materialElementId = GetMaterialElementId(shapeEditScope);\r\n\r\n            // Create triangle face set from CoordIndex. We do not support the Normals yet at this point\r\n            int numCoords = Coordinates.CoordList.Count;\r\n            foreach (List<int> triIndex in CoordIndex)\r\n            {\r\n               // This is a defensive check in an unlikely situation that the index is larger than the data\r\n               if (triIndex[0] > numCoords || triIndex[1] > numCoords || triIndex[2] > numCoords)\r\n               {\r\n                  continue;\r\n               }\r\n\r\n               // This is already triangulated, so no need to attempt triangulation here.\r\n               tsBuilderScope.StartCollectingFace(materialElementId, false);\r\n\r\n               IList<XYZ> loopVertices = new List<XYZ>();\r\n\r\n               for (int ii = 0; ii < 3; ++ii)\r\n               {\r\n                  int actualVIdx = (PnIndex?[triIndex[ii]-1] ?? triIndex[ii]) - 1;\r\n                  XYZ vv = Coordinates.CoordList[actualVIdx];\r\n                  loopVertices.Add(vv);\r\n               }\r\n\r\n               IList<XYZ> transformedVertices = new List<XYZ>();\r\n               foreach (XYZ vertex in loopVertices)\r\n               {\r\n                  transformedVertices.Add(scaledLcs.OfPoint(vertex));\r\n               }\r\n\r\n               // Check triangle that is too narrow (2 vertices are within the tolerance\r\n               IFCGeometryUtil.CheckAnyDistanceVerticesWithinTolerance(Id, shapeEditScope, transformedVertices, out List<XYZ> validVertices);\r\n\r\n               if (validVertices.Count != transformedVertices.Count && tsBuilderScope.CanRevertToMesh())\r\n               {\r\n                  tsBuilderScope.RevertToMeshIfPossible();\r\n                  IFCGeometryUtil.CheckAnyDistanceVerticesWithinTolerance(Id, shapeEditScope, transformedVertices, out validVertices);\r\n               }\r\n\r\n               // We are going to catch any exceptions if the loop is invalid.  \r\n               // We are going to hope that we can heal the parent object in the TessellatedShapeBuilder.\r\n               bool bPotentiallyAbortFace = false;\r\n\r\n               int count = validVertices.Count;\r\n               if (validVertices.Count < 3)\r\n               {\r\n                  Importer.TheLog.LogComment(Id, \"Too few distinct loop vertices (\" + count + \"), ignoring.\", false);\r\n                  bPotentiallyAbortFace = true;\r\n               }\r\n               else\r\n               {\r\n                  if (!tsBuilderScope.AddLoopVertices(Id, validVertices))\r\n                     bPotentiallyAbortFace = true;\r\n               }\r\n\r\n               tsBuilderScope.StopCollectingFace(!bPotentiallyAbortFace, false);\r\n            }\r\n\r\n            IList<GeometryObject> createdGeometries = tsBuilderScope.CreateGeometry(guid);\r\n            if (createdGeometries != null)\r\n            {\r\n               foreach (GeometryObject createdGeometry in createdGeometries)\r\n               {\r\n                  shapeEditScope.AddGeometry(IFCSolidInfo.Create(Id, createdGeometry));\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Start processing the IfcTriangulatedFaceSet\r\n      /// </summary>\r\n      /// <param name=\"ifcTriangulatedFaceSet\">the handle</param>\r\n      /// <returns></returns>\r\n      public static IFCTriangulatedFaceSet ProcessIFCTriangulatedFaceSet(IFCAnyHandle ifcTriangulatedFaceSet)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcTriangulatedFaceSet))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcTriangulatedFaceSet);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity triangulatedFaceSet;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcTriangulatedFaceSet.StepId, out triangulatedFaceSet))\r\n            triangulatedFaceSet = new IFCTriangulatedFaceSet(ifcTriangulatedFaceSet);\r\n         return (triangulatedFaceSet as IFCTriangulatedFaceSet);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCTrimmedCurve.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\nusing System.Collections.Generic;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents IFCTrimmedCurve entity\r\n   /// </summary>\r\n   public class IFCTrimmedCurve : IFCBoundedCurve\r\n   {\r\n      private double? m_Trim1Parameter = 0.0;\r\n\r\n      private double? m_Trim2Parameter = 0.0;\r\n\r\n      /// <summary>\r\n      /// The start trim parameter of the IFCTrimmedCurve.  This is the unprocessed double parameter value.\r\n      /// </summary>\r\n      public double? Trim1\r\n      {\r\n         get { return m_Trim1Parameter; }\r\n         protected set { m_Trim1Parameter = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The end trim parameter of the IFCTrimmedCurve.  This is the unprocessed double parameter value.\r\n      /// </summary>\r\n      public double? Trim2\r\n      {\r\n         get { return m_Trim2Parameter; }\r\n         protected set { m_Trim2Parameter = value; }\r\n      }\r\n\r\n      protected IFCTrimmedCurve()\r\n      {\r\n      }\r\n\r\n      protected IFCTrimmedCurve(IFCAnyHandle trimmedCurve)\r\n      {\r\n         Process(trimmedCurve);\r\n      }\r\n\r\n      private bool NeedToReverseBaseCurve(Curve baseCurve, \r\n         double param1, double param2, IFCTrimmingPreference trimPreference)\r\n      {\r\n         // In the very specific case where the trim preference is Cartesian,\r\n         // and the trim parameters are reversed, we can try again by reversing\r\n         // the base curve, if it is not cyclic.  \r\n         // This is an error on the input that we see in some files.\r\n         return (baseCurve != null &&\r\n            param1 > param2 + MathUtil.Eps() &&\r\n            trimPreference == IFCTrimmingPreference.Cartesian &&\r\n            !baseCurve.IsCyclic);\r\n      }\r\n\r\n      private Curve SafelyBoundCurve(Curve baseCurve, bool sameSense, double param1, double param2)\r\n      {\r\n         if (baseCurve == null)\r\n            return null;\r\n\r\n         double length = param2 - param1;\r\n         bool tooShort = length <= IFCImportFile.TheFile.ShortCurveTolerance;\r\n         try\r\n         {\r\n            if (!tooShort)\r\n            {\r\n               Curve curve = sameSense ? baseCurve.Clone() : baseCurve.CreateReversed();\r\n               curve.MakeBound(param1, param2);\r\n               return curve;\r\n            }\r\n         }\r\n         catch\r\n         {\r\n         }\r\n\r\n         if (tooShort)\r\n         {\r\n            string lengthAsString = IFCUnitUtil.FormatLengthAsString(length);\r\n            Importer.TheLog.LogError(Id, \"curve length of \" + lengthAsString + \" is invalid, ignoring.\", false);\r\n         }\r\n\r\n         BackupCurveStartLocation = baseCurve.Evaluate(param1, false);\r\n         BackupCurveEndLocation = baseCurve.Evaluate(param2, false);\r\n         return null;\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcCurve)\r\n      {\r\n         base.Process(ifcCurve);\r\n\r\n         bool sameSense = IFCImportHandleUtil.GetRequiredBooleanAttribute(ifcCurve, \"SenseAgreement\", out bool found);\r\n         if (!found)\r\n            sameSense = true;\r\n\r\n         IFCAnyHandle basisCurve = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcCurve, \"BasisCurve\", true);\r\n         IFCCurve ifcBasisCurve = IFCCurve.ProcessIFCCurve(basisCurve);\r\n         if (ifcBasisCurve == null || (ifcBasisCurve.IsEmpty()))\r\n         {\r\n            // LOG: ERROR: Error processing BasisCurve # for IfcTrimmedCurve #.\r\n            return;\r\n         }\r\n         if (ifcBasisCurve.Curve == null)\r\n         {\r\n            // LOG: ERROR: Expected a single curve, not a curve loop for BasisCurve # for IfcTrimmedCurve #.\r\n            return;\r\n         }\r\n\r\n         IFCData trim1 = ifcCurve.GetAttribute(\"Trim1\");\r\n         if (trim1.PrimitiveType != IFCDataPrimitiveType.Aggregate)\r\n         {\r\n            // LOG: ERROR: Invalid data type for Trim1 attribute for IfcTrimmedCurve #.\r\n            return;\r\n         }\r\n\r\n         IFCData trim2 = ifcCurve.GetAttribute(\"Trim2\");\r\n         if (trim2.PrimitiveType != IFCDataPrimitiveType.Aggregate)\r\n         {\r\n            // LOG: ERROR: Invalid data type for Trim1 attribute for IfcTrimmedCurve #.\r\n            return;\r\n         }\r\n\r\n         // Note that these are the \"unprocessed\" values.  These can be used for, e.g., adding up the IFC parameter length\r\n         // of the file, to account for export errors.  The \"processed\" values can be determined from the Revit curves.\r\n         Trim1 = GetRawTrimParameter(trim1);\r\n         Trim2 = GetRawTrimParameter(trim2);\r\n\r\n         IFCTrimmingPreference trimPreference = IFCEnums.GetSafeEnumerationAttribute<IFCTrimmingPreference>(ifcCurve, \"MasterRepresentation\", IFCTrimmingPreference.Parameter);\r\n\r\n         double param1 = 0.0, param2 = 0.0;\r\n         Curve baseCurve = ifcBasisCurve.Curve;\r\n         try\r\n         {\r\n            GetTrimParameters(ifcBasisCurve.Id, trim1, trim2, baseCurve, trimPreference, out param1, out param2);\r\n            if (NeedToReverseBaseCurve(baseCurve, param1, param2, trimPreference))\r\n            {\r\n               Importer.TheLog.LogWarning(Id, \"Invalid Param1 > Param2 for non-cyclic IfcTrimmedCurve using Cartesian trimming preference, reversing.\", false);\r\n               baseCurve = baseCurve.CreateReversed();\r\n               GetTrimParameters(ifcBasisCurve.Id, trim1, trim2, baseCurve, trimPreference, out param1, out param2);\r\n            }\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            Importer.TheLog.LogError(ifcCurve.StepId, ex.Message, false);\r\n            return;\r\n         }\r\n\r\n         if (MathUtil.IsAlmostEqual(param1, param2))\r\n         {\r\n            Importer.TheLog.LogError(Id, \"Param1 = Param2 for IfcTrimmedCurve #, ignoring.\", false);\r\n            return;\r\n         }\r\n\r\n         Curve curve = null;\r\n         if (baseCurve.IsCyclic)\r\n         {\r\n            double period = baseCurve.Period;\r\n            if (!sameSense)\r\n               MathUtil.Swap(ref param1, ref param2);\r\n            \r\n            // We want to make sure both values are within period of one another.\r\n            param1 = MathUtil.PutInRange(param1, 0, period);\r\n            param2 = MathUtil.PutInRange(param2, 0, period);\r\n            if (param2 < param1)\r\n               param2 = MathUtil.PutInRange(param2, param1 + period/2, period);\r\n\r\n            // This is effectively an unbound curve.\r\n            double numberOfPeriods = (param2 - param1) / period;\r\n            if (MathUtil.IsAlmostEqual(numberOfPeriods, Math.Round(numberOfPeriods)))\r\n            {\r\n               Importer.TheLog.LogWarning(Id, \"Start and end parameters indicate a zero-length closed curve, assuming unbound is intended.\", false);\r\n               curve = baseCurve;\r\n            }\r\n            else\r\n            {\r\n               curve = SafelyBoundCurve(baseCurve, true, param1, param2);\r\n               if (curve == null)\r\n                  return;\r\n            }\r\n         }\r\n         else\r\n         {\r\n            if (param1 > param2 - MathUtil.Eps())\r\n            {\r\n               Importer.TheLog.LogWarning(Id, \"Param1 > Param2 for IfcTrimmedCurve #, reversing.\", false);\r\n               MathUtil.Swap(ref param1, ref param2);\r\n               sameSense = !sameSense;\r\n            }\r\n\r\n            \r\n            curve = SafelyBoundCurve(baseCurve, sameSense, param1, param2);\r\n            if (curve == null)\r\n               return;\r\n         }\r\n\r\n         CurveLoop curveLoop = new CurveLoop();\r\n         curveLoop.Append(curve);\r\n         SetCurveLoop(curveLoop);\r\n      }\r\n\r\n      private void GetTrimParameters(int id, IFCData trim1, IFCData trim2, \r\n         Curve baseCurve, IFCTrimmingPreference trimPreference,\r\n         out double param1, out double param2)\r\n      {\r\n         double? condParam1 = GetTrimParameter(id, trim1, baseCurve, trimPreference, false);\r\n         if (!condParam1.HasValue)\r\n            throw new InvalidOperationException(\"#\" + id + \": Couldn't apply first trimming parameter of IfcTrimmedCurve.\");\r\n         param1 = condParam1.Value;\r\n\r\n         double? condParam2 = GetTrimParameter(id, trim2, baseCurve, trimPreference, false);\r\n         if (!condParam2.HasValue)\r\n            throw new InvalidOperationException(\"#\" + id + \": Couldn't apply second trimming parameter of IfcTrimmedCurve.\");\r\n         param2 = condParam2.Value;\r\n\r\n         if (MathUtil.IsAlmostEqual(param1, param2))\r\n         {\r\n            // If we had a cartesian parameter as the trim preference, check if the parameter values are better.\r\n            if (trimPreference == IFCTrimmingPreference.Cartesian)\r\n            {\r\n               condParam1 = GetTrimParameter(id, trim1, baseCurve, IFCTrimmingPreference.Parameter, true);\r\n               if (!condParam1.HasValue)\r\n                  throw new InvalidOperationException(\"#\" + id + \": Couldn't apply first trimming parameter of IfcTrimmedCurve.\");\r\n               param1 = condParam1.Value;\r\n\r\n               condParam2 = GetTrimParameter(id, trim2, baseCurve, IFCTrimmingPreference.Parameter, true);\r\n               if (!condParam2.HasValue)\r\n                  throw new InvalidOperationException(\"#\" + id + \": Couldn't apply second trimming parameter of IfcTrimmedCurve.\");\r\n               param2 = condParam2.Value;\r\n            }\r\n            else\r\n               throw new InvalidOperationException(\"#\" + id + \": Ignoring 0 length curve.\");\r\n         }\r\n      }\r\n\r\n      private double? GetRawTrimParameter(IFCData trim)\r\n      {\r\n         IFCAggregate trimAggregate = trim.AsAggregate();\r\n         foreach (IFCData trimParam in trimAggregate)\r\n         {\r\n            if (trimParam.PrimitiveType == IFCDataPrimitiveType.Double)\r\n            {\r\n               return trimParam.AsDouble();\r\n            }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      private double? GetTrimParameter(int id, IFCData trim, Curve baseCurve, \r\n         IFCTrimmingPreference trimPreference, bool secondAttempt)\r\n      {\r\n         bool preferParam = !(trimPreference == IFCTrimmingPreference.Cartesian);\r\n         if (secondAttempt)\r\n            preferParam = !preferParam;\r\n         double vertexEps = IFCImportFile.TheFile.VertexTolerance;\r\n\r\n         IFCAggregate trimAggregate = trim.AsAggregate();\r\n         foreach (IFCData trimParam in trimAggregate)\r\n         {\r\n            if (!preferParam && (trimParam.PrimitiveType == IFCDataPrimitiveType.Instance))\r\n            {\r\n               IFCAnyHandle trimParamInstance = trimParam.AsInstance();\r\n               XYZ trimParamPt = IFCPoint.ProcessScaledLengthIFCCartesianPoint(trimParamInstance);\r\n               if (trimParamPt == null)\r\n               {\r\n                  Importer.TheLog.LogWarning(id, \"Invalid trim point for basis curve.\", false);\r\n                  continue;\r\n               }\r\n\r\n               try\r\n               {\r\n                  IntersectionResult result = baseCurve.Project(trimParamPt);\r\n                  if (result.Distance < vertexEps)\r\n                     return result.Parameter;\r\n\r\n                  Importer.TheLog.LogWarning(id, \"Cartesian value for trim point not on the basis curve.\", false);\r\n               }\r\n               catch\r\n               {\r\n                  Importer.TheLog.LogWarning(id, \"Cartesian value for trim point not on the basis curve.\", false);\r\n               }\r\n            }\r\n            else if (preferParam && (trimParam.PrimitiveType == IFCDataPrimitiveType.Double))\r\n            {\r\n               double trimParamDouble = trimParam.AsDouble();\r\n               if (baseCurve.IsCyclic)\r\n                  trimParamDouble = IFCUnitUtil.ScaleAngle(trimParamDouble);\r\n               else\r\n                  trimParamDouble = IFCUnitUtil.ScaleLength(trimParamDouble);\r\n               return trimParamDouble;\r\n            }\r\n         }\r\n\r\n         // Try again with opposite preference.\r\n         if (!secondAttempt)\r\n            return GetTrimParameter(id, trim, baseCurve, trimPreference, true);\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCTrimmedCurve object from a handle of type IfcTrimmedCurve\r\n      /// </summary>\r\n      /// <param name=\"ifcTrimmedCurve\">The IFC handle</param>\r\n      /// <returns>The IFCTrimmedCurve object</returns>\r\n      public static IFCTrimmedCurve ProcessIFCTrimmedCurve(IFCAnyHandle ifcTrimmedCurve)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcTrimmedCurve))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcTrimmedCurve);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity trimmedCurve = null;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcTrimmedCurve.StepId, out trimmedCurve))\r\n            trimmedCurve = new IFCTrimmedCurve(ifcTrimmedCurve);\r\n\r\n         return (trimmedCurve as IFCTrimmedCurve);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCTypeObject.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcTypeObject.\r\n   /// </summary>\r\n   public class IFCTypeObject : IFCObjectDefinition\r\n   {\r\n      private static HashSet<IFCEntityType> m_sNoPredefinedTypePreIFC4 = null;\r\n\r\n      protected IDictionary<string, IFCPropertySetDefinition> m_IFCPropertySets;\r\n\r\n      // The list of IFCObjects that have this as their IFCTypeObject.\r\n      protected ICollection<IFCObject> m_DefinedObjects = null;\r\n\r\n      private static bool HasPredefinedType(IFCEntityType type)\r\n      {\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete))\r\n            return true;\r\n\r\n         // Note that this is just a list of entity types that are dealt with generically; \r\n         // other types may override the base function.\r\n         if (m_sNoPredefinedTypePreIFC4 == null)\r\n         {\r\n            m_sNoPredefinedTypePreIFC4 = new HashSet<IFCEntityType>()\r\n            {\r\n               IFCEntityType.IfcDiscreteAccessoryType,\r\n               IFCEntityType.IfcDistributionElementType,\r\n               IFCEntityType.IfcDoorStyle,\r\n               IFCEntityType.IfcFastenerType,\r\n               IFCEntityType.IfcFurnishingElementType,\r\n               IFCEntityType.IfcFurnitureType,\r\n               IFCEntityType.IfcWindowStyle\r\n            };\r\n         }\r\n         return !m_sNoPredefinedTypePreIFC4.Contains(type);\r\n      }\r\n\r\n      /// <summary>\r\n      /// The property sets.\r\n      /// </summary>\r\n      public IDictionary<string, IFCPropertySetDefinition> PropertySets\r\n      {\r\n         get { return m_IFCPropertySets; }\r\n      }\r\n\r\n      public ICollection<IFCObject> DefinedObjects\r\n      {\r\n         get\r\n         {\r\n            if (m_DefinedObjects == null)\r\n               m_DefinedObjects = new HashSet<IFCObject>();\r\n            return m_DefinedObjects;\r\n         }\r\n         protected set { m_DefinedObjects = value; }\r\n      }\r\n\r\n      protected IFCTypeObject()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCTypeObject from the IfcTypeObject handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcTypeObject\">The IfcTypeObject handle.</param>\r\n      protected IFCTypeObject(IFCAnyHandle ifcTypeObject)\r\n      {\r\n         Process(ifcTypeObject);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the predefined type of the IfcTypeOject, depending on the file version and entity type.\r\n      /// </summary>\r\n      /// <param name=\"ifcObjectDefinition\">The associated handle.</param>\r\n      /// <returns>The predefined type string, if any.</returns>\r\n      protected override string GetPredefinedType(IFCAnyHandle ifcObjectDefinition)\r\n      {\r\n         // List of entities we explictly declare have no PredefinedType, to avoid exception.\r\n         if (!HasPredefinedType(EntityType))\r\n            return null;\r\n\r\n         // Most IfcTypeObjects have a PredefinedType.  Use try/catch for those that don't and we didn't catch above.\r\n         try\r\n         {\r\n            return IFCAnyHandleUtil.GetEnumerationAttribute(ifcObjectDefinition, \"PredefinedType\");\r\n         }\r\n         catch\r\n         {\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the category id for an object from another object.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"objDef\">The other IFCObjectDefinition.</param>\r\n      /// <remarks>This is intended for IFCTypeObjects to have the same category id as their entities.</remarks>\r\n      public void CalculateCategoryAndGStyleIdsFromObject(Document doc, IFCObject obj)\r\n      {\r\n         CategoryIdCache = obj.GetCategoryId(doc);\r\n         GraphicsStyleIdCache = obj.GetGraphicsStyleId(doc);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcTypeObject attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcTypeObject\">The IfcTypeObject handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcTypeObject)\r\n      {\r\n         base.Process(ifcTypeObject);\r\n\r\n         HashSet<IFCAnyHandle> propertySets = IFCAnyHandleUtil.GetAggregateInstanceAttribute\r\n             <HashSet<IFCAnyHandle>>(ifcTypeObject, \"HasPropertySets\");\r\n\r\n         if (propertySets != null)\r\n         {\r\n            m_IFCPropertySets = new Dictionary<string, IFCPropertySetDefinition>();\r\n\r\n            foreach (IFCAnyHandle propertySet in propertySets)\r\n            {\r\n               IFCPropertySetDefinition ifcPropertySetDefinition = IFCPropertySetDefinition.ProcessIFCPropertySetDefinition(propertySet, ifcTypeObject.StepId);\r\n               if (ifcPropertySetDefinition != null)\r\n               {\r\n                  string name = ifcPropertySetDefinition.Name;\r\n                  if (string.IsNullOrWhiteSpace(name))\r\n                     name = IFCAnyHandleUtil.GetEntityType(propertySet).ToString() + \" \" + propertySet.StepId;\r\n                  m_IFCPropertySets[name] = ifcPropertySetDefinition;\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcTypeObject.\r\n      /// </summary>\r\n      /// <param name=\"ifcTypeObject\">The IfcTypeObject handle.</param>\r\n      /// <returns>The IFCTypeObject object.</returns>\r\n      public static IFCTypeObject ProcessIFCTypeObject(IFCAnyHandle ifcTypeObject)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcTypeObject))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcTypeObject);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity typeObject;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcTypeObject.StepId, out typeObject))\r\n            return (typeObject as IFCTypeObject);\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcTypeObject, IFCEntityType.IfcTypeProduct))\r\n         {\r\n            return IFCTypeProduct.ProcessIFCTypeProduct(ifcTypeObject);\r\n         }\r\n\r\n         return new IFCTypeObject(ifcTypeObject);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates or populates Revit elements based on the information contained in this class.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      protected override void Create(Document doc)\r\n      {\r\n         // If we're \"Creating\" an Element from an IFCTypeObject during Hybrid IFC Import, then that will already have been imported as a DirectShapeType\r\n         // So use that instead of creating a whole new DirectShapeType.\r\n         ElementId directShapeTypeId = IFCImportHybridInfo.GetHybridMapInformation(Id);\r\n         if (IFCImportHybridInfo.IsValidElementId(directShapeTypeId))\r\n         {\r\n            CreatedElementId = directShapeTypeId;\r\n         }\r\n         else\r\n         {\r\n            DirectShapeType shapeType = Importer.TheCache.UseElementByGUID<DirectShapeType>(doc, GlobalId);\r\n\r\n            if (shapeType == null)\r\n            {\r\n               shapeType = IFCElementUtil.CreateElementType(doc, GetVisibleName(), GetCategoryId(doc), Id, GlobalId, EntityType);\r\n            }\r\n            else\r\n            {\r\n               // If we used the element from the cache, we want to make sure that the IFCRepresentationMap can access it\r\n               // instead of creating a new element.\r\n               Importer.TheCache.CreatedDirectShapeTypes[Id] = shapeType.Id;\r\n               shapeType.SetShape(new List<GeometryObject>());\r\n            }\r\n\r\n            if (shapeType == null)\r\n               throw new InvalidOperationException(\"Couldn't create DirectShapeType for IfcTypeObject.\");\r\n\r\n            CreatedElementId = shapeType.Id;\r\n         }\r\n\r\n         base.Create(doc);\r\n\r\n         TraverseSubElements(doc);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create property sets for a given element.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"element\">The element being created.</param>\r\n      /// <param name=\"propertySetsCreated\">A concatenated string of property sets created, used to filter schedules.</returns>\r\n      public override void CreatePropertySets(Document doc, Element element, string propertySetsCreated)\r\n      {\r\n         CreatePropertySetsBase(doc, element, propertySetsCreated, \"Type IfcPropertySetList\", PropertySets);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCTypeProduct.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcTypeProduct.\r\n   /// </summary>\r\n   public class IFCTypeProduct : IFCTypeObject\r\n   {\r\n      private string m_Tag = null;\r\n\r\n      private IList<IFCRepresentationMap> m_RepresentationMaps = new List<IFCRepresentationMap>();\r\n\r\n      /// <summary>\r\n      /// The tag.\r\n      /// </summary>\r\n      public string Tag\r\n      {\r\n         get { return m_Tag; }\r\n         protected set { m_Tag = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The optional list of RepresentationMaps associated with this IfcTypeProduct.\r\n      /// If an IFCRepresentationMap is contained by only one IFCTypeProduct, we'll do special processing of the IfcRepresentationMap.\r\n      /// </summary>\r\n      public IList<IFCRepresentationMap> RepresentationMaps\r\n      {\r\n         get { return m_RepresentationMaps; }\r\n         protected set { m_RepresentationMaps = value; }\r\n      }\r\n\r\n      protected IFCTypeProduct()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs an IFCTypeProduct from the IfcTypeProduct handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcTypeProduct\">The IfcTypeProduct handle.</param>\r\n      protected IFCTypeProduct(IFCAnyHandle ifcTypeProduct)\r\n      {\r\n         Process(ifcTypeProduct);\r\n      }\r\n\r\n\r\n      private void RegisterRepresentationMapWithTypeProject(IFCRepresentationMap representationMap, IFCTypeProduct typeProduct)\r\n      {\r\n         if (representationMap == null || representationMap.MappedRepresentation == null || typeProduct == null)\r\n            return;\r\n\r\n         // Note that if the representation map is already in the RepMapToTypeProduct map, or we have already found\r\n         // a representation of the same type, then we null out the entry, but keep it.\r\n         // That prevents future attempts to register the representation map.\r\n         if (Importer.TheCache.RepMapToTypeProduct.ContainsKey(representationMap.Id))\r\n         {\r\n            Importer.TheCache.RepMapToTypeProduct[representationMap.Id] = null;\r\n            return;\r\n         }\r\n\r\n         string repType = representationMap.MappedRepresentation.RepresentationType;\r\n         if (repType == null)\r\n            repType = string.Empty;\r\n\r\n         ISet<string> typeProductLabels = null;\r\n         if (Importer.TheCache.TypeProductToRepLabel.TryGetValue(typeProduct.Id, out typeProductLabels) &&\r\n            typeProductLabels != null && typeProductLabels.Contains(repType))\r\n         {\r\n            // We expect a TypeProduct to only have one Representation of each type.  In the case\r\n            // that we find a 2nd representation of the same type, we will refuse to add it.\r\n            Importer.TheCache.RepMapToTypeProduct[representationMap.Id] = null;\r\n            return;\r\n         }\r\n\r\n         if (typeProductLabels == null)\r\n            Importer.TheCache.TypeProductToRepLabel[typeProduct.Id] = new HashSet<string>();\r\n\r\n         Importer.TheCache.RepMapToTypeProduct[representationMap.Id] = typeProduct;\r\n         Importer.TheCache.TypeProductToRepLabel[typeProduct.Id].Add(repType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcTypeObject attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcTypeProduct\">The IfcTypeProduct handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcTypeProduct)\r\n      {\r\n         base.Process(ifcTypeProduct);\r\n\r\n         Tag = IFCAnyHandleUtil.GetStringAttribute(ifcTypeProduct, \"Tag\");\r\n\r\n         if (IFCImportHybridInfo.IsValidElementId(IFCImportHybridInfo.GetHybridMapInformation(Id)))\r\n            return;\r\n\r\n         IList<IFCAnyHandle> representationMapsHandle = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcTypeProduct, \"RepresentationMaps\");\r\n         if (representationMapsHandle?.Count > 0)\r\n         {\r\n            foreach (IFCAnyHandle representationMapHandle in representationMapsHandle)\r\n            {\r\n               IFCRepresentationMap representationMap = IFCRepresentationMap.ProcessIFCRepresentationMap(representationMapHandle);\r\n               if (representationMap != null)\r\n               {\r\n                  RepresentationMaps.Add(representationMap);\r\n\r\n                  // Traditionally we would create a \"dummy\" DirectShapeType for each IfcRepresentationMap.  In the case where the IfcRepresentationMap is not used by another other IfcTypeProduct, \r\n                  // we would like to stop creating the \"dummy\" DirectShapeType and store the geometry in the DirectShapeType associated with the IfcTypeProduct.  However, IfcRepresentationMap \r\n                  // does not have an INVERSE relationship to its IfcTypeProduct(s), at least in IFC2x3.\r\n                  // As such, we keep track of the IfcRepresentationMaps that have the relationship described above for future correspondence.\r\n                  RegisterRepresentationMapWithTypeProject(representationMap, this);\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcTypeProduct.\r\n      /// </summary>\r\n      /// <param name=\"ifcTypeProduct\">The IfcTypeProduct handle.</param>\r\n      /// <returns>The IFCTypeProduct object.</returns>\r\n      public static IFCTypeProduct ProcessIFCTypeProduct(IFCAnyHandle ifcTypeProduct)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcTypeProduct))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcTypeProduct);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity typeProduct;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcTypeProduct.StepId, out typeProduct))\r\n            return (typeProduct as IFCTypeProduct);\r\n\r\n         if (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete) && \r\n            IFCAnyHandleUtil.IsValidSubTypeOf(ifcTypeProduct, IFCEntityType.IfcDoorType))\r\n               return IFCDoorType.ProcessIFCDoorType(ifcTypeProduct);\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcTypeProduct, IFCEntityType.IfcDoorStyle))\r\n            return IFCDoorStyle.ProcessIFCDoorStyle(ifcTypeProduct);\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcTypeProduct, IFCEntityType.IfcElementType))\r\n            return IFCElementType.ProcessIFCElementType(ifcTypeProduct);\r\n\r\n         return new IFCTypeProduct(ifcTypeProduct);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCUnit.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Utility;\r\nusing Revit.IFC.Import.Enums;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Presents an IFC unit.\r\n   /// </summary>\r\n   public class IFCUnit : IFCEntity\r\n   {\r\n      /// <summary>\r\n      double m_ScaleFactor = 1.0;\r\n\r\n      double m_OffsetFactor = 0.0;\r\n\r\n      ForgeTypeId m_SpecTypeId = new ForgeTypeId();\r\n\r\n      // only used if Spec = SpecTypeId.Custom.\r\n      string m_CustomSpec = null;\r\n\r\n      ForgeTypeId m_SymbolTypeId = new ForgeTypeId();\r\n\r\n      ForgeTypeId m_UnitTypeId = new ForgeTypeId();\r\n\r\n      UnitSystem m_UnitSystem = UnitSystem.Metric;\r\n\r\n      static IDictionary<string, double> m_sPrefixToScaleFactor = null;\r\n\r\n      static IDictionary<ForgeTypeId, IDictionary<string, Tuple<ForgeTypeId, ForgeTypeId>>> m_sSupportedMetricUnitTypes = null;\r\n\r\n      /// <summary>\r\n      /// The type of unit, such as Length.\r\n      /// </summary>\r\n      public ForgeTypeId Spec\r\n      {\r\n         get { return m_SpecTypeId; }\r\n         protected set { m_SpecTypeId = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The type of unit, if UnitType = UT_Custom.\r\n      /// </summary>\r\n      public string CustomSpec\r\n      {\r\n         get { return m_CustomSpec; }\r\n         protected set { m_CustomSpec = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The unit system, metric or imperial.\r\n      /// </summary>\r\n      public UnitSystem UnitSystem\r\n      {\r\n         get { return m_UnitSystem; }\r\n         protected set { m_UnitSystem = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The unit identifier, such as Meters.\r\n      /// </summary>\r\n      public ForgeTypeId Unit\r\n      {\r\n         get { return m_UnitTypeId; }\r\n         protected set { m_UnitTypeId = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The unit symbols, such as \"m\" for meters.\r\n      /// </summary>\r\n      public ForgeTypeId Symbol\r\n      {\r\n         get { return m_SymbolTypeId; }\r\n         protected set { m_SymbolTypeId = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The scale factor to Revit internal unit.\r\n      /// </summary>\r\n      public double ScaleFactor\r\n      {\r\n         get { return m_ScaleFactor; }\r\n         protected set { m_ScaleFactor = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The offset factor to Revit internal unit.\r\n      /// </summary>\r\n      public double OffsetFactor\r\n      {\r\n         get { return m_OffsetFactor; }\r\n         protected set { m_OffsetFactor = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs a Unit object.\r\n      /// </summary>\r\n      protected IFCUnit()\r\n      {\r\n      }\r\n\r\n      protected IFCUnit(IFCAnyHandle unit)\r\n      {\r\n         Process(unit);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks that the unit definition is valid for use.\r\n      /// </summary>\r\n      /// <param name=\"unit\">The IFCUnit to check.</param>\r\n      /// <returns>True if the IFCUnit is null, or has invalid parameters.</returns>\r\n      public static bool IsNullOrInvalid(IFCUnit unit)\r\n      {\r\n         if (unit == null)\r\n            return true;\r\n\r\n         return (unit.Spec.Empty() || unit.Unit.Empty());\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts the value to this unit type.\r\n      /// </summary>\r\n      /// <param name=\"inValue\">The value to convert.</param>\r\n      /// <returns>The converted value.</returns>\r\n      public double Convert(double inValue)\r\n      {\r\n         return inValue * ScaleFactor - OffsetFactor;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts the value to this unit type.\r\n      /// </summary>\r\n      /// <param name=\"inValue\">The value to convert.</param>\r\n      /// <returns>The converted value.</returns>\r\n      public int Convert(int inValue)\r\n      {\r\n         return (int)(inValue * ScaleFactor - OffsetFactor);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle item)\r\n      {\r\n         base.Process(item);\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(item))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcSIUnit);\r\n            return;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(item, IFCEntityType.IfcDerivedUnit))\r\n            ProcessIFCDerivedUnit(item);\r\n         else if (IFCAnyHandleUtil.IsValidSubTypeOf(item, IFCEntityType.IfcMeasureWithUnit))\r\n            ProcessIFCMeasureWithUnit(item);\r\n         else if (IFCAnyHandleUtil.IsValidSubTypeOf(item, IFCEntityType.IfcMonetaryUnit))\r\n            ProcessIFCMonetaryUnit(item);\r\n         else if (IFCAnyHandleUtil.IsValidSubTypeOf(item, IFCEntityType.IfcNamedUnit))\r\n            ProcessIFCNamedUnit(item);\r\n         else\r\n            Importer.TheLog.LogUnhandledSubTypeError(item, \"IfcUnit\", true);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes a named unit.\r\n      /// </summary>\r\n      /// <param name=\"unitHnd\">The unit handle.</param>\r\n      void ProcessIFCNamedUnit(IFCAnyHandle unitHnd)\r\n      {\r\n         // Only called from ProcessIFCUnit, which already does a null check.\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(unitHnd, IFCEntityType.IfcSIUnit))\r\n            ProcessIFCSIUnit(unitHnd);\r\n         else if (IFCAnyHandleUtil.IsValidSubTypeOf(unitHnd, IFCEntityType.IfcConversionBasedUnit))\r\n            ProcessIFCConversionBasedUnit(unitHnd);\r\n         else\r\n            Importer.TheLog.LogUnhandledSubTypeError(unitHnd, IFCEntityType.IfcNamedUnit, true);\r\n      }\r\n\r\n      private void InitPrefixToScaleFactor()\r\n      {\r\n         m_sPrefixToScaleFactor = new Dictionary<string, double>();\r\n         m_sPrefixToScaleFactor[\"EXA\"] = 1e+18;\r\n         m_sPrefixToScaleFactor[\"PETA\"] = 1e+15;\r\n         m_sPrefixToScaleFactor[\"TERA\"] = 1e+12;\r\n         m_sPrefixToScaleFactor[\"GIGA\"] = 1e+9;\r\n         m_sPrefixToScaleFactor[\"MEGA\"] = 1e+6;\r\n         m_sPrefixToScaleFactor[\"KILO\"] = 1e+3;\r\n         m_sPrefixToScaleFactor[\"HECTO\"] = 1e+2;\r\n         m_sPrefixToScaleFactor[\"DECA\"] = 1e+1;\r\n         m_sPrefixToScaleFactor[\"\"] = 1e+0;\r\n         m_sPrefixToScaleFactor[\"DECI\"] = 1e-1;\r\n         m_sPrefixToScaleFactor[\"CENTI\"] = 1e-2;\r\n         m_sPrefixToScaleFactor[\"MILLI\"] = 1e-3;\r\n         m_sPrefixToScaleFactor[\"MICRO\"] = 1e-6;\r\n         m_sPrefixToScaleFactor[\"NANO\"] = 1e-9;\r\n         m_sPrefixToScaleFactor[\"PICO\"] = 1e-12;\r\n         m_sPrefixToScaleFactor[\"FEMTO\"] = 1e-15;\r\n         m_sPrefixToScaleFactor[\"ATTO\"] = 1e-18;\r\n      }\r\n\r\n      private IDictionary<string, Tuple<ForgeTypeId, ForgeTypeId>> GetSupportedDisplayTypes(ForgeTypeId specTypeId)\r\n      {\r\n         if (m_sSupportedMetricUnitTypes == null)\r\n            m_sSupportedMetricUnitTypes = new Dictionary<ForgeTypeId, IDictionary<string, Tuple<ForgeTypeId, ForgeTypeId>>>();\r\n\r\n         IDictionary<string, Tuple<ForgeTypeId, ForgeTypeId>> supportedTypes = null;\r\n         if (!m_sSupportedMetricUnitTypes.TryGetValue(specTypeId, out supportedTypes))\r\n         {\r\n            supportedTypes = new Dictionary<string, Tuple<ForgeTypeId, ForgeTypeId>>();\r\n            if (specTypeId.Equals(SpecTypeId.Area))\r\n            {\r\n               supportedTypes[\"\"] = Tuple.Create(UnitTypeId.SquareMeters, SymbolTypeId.MSup2);\r\n               supportedTypes[\"CENTI\"] = Tuple.Create(UnitTypeId.SquareCentimeters, SymbolTypeId.CmSup2);\r\n               supportedTypes[\"MILLI\"] = Tuple.Create(UnitTypeId.SquareMillimeters, SymbolTypeId.MmSup2);\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.Current))\r\n            {\r\n               supportedTypes[\"\"] = Tuple.Create(UnitTypeId.Amperes, SymbolTypeId.Ampere);\r\n               supportedTypes[\"KILO\"] = Tuple.Create(UnitTypeId.Kiloamperes, SymbolTypeId.KA);\r\n               supportedTypes[\"MILLI\"] = Tuple.Create(UnitTypeId.Milliamperes, SymbolTypeId.MA);\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.ElectricalFrequency))\r\n            {\r\n               supportedTypes[\"\"] = Tuple.Create(UnitTypeId.Hertz, SymbolTypeId.Hz);\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.Illuminance))\r\n            {\r\n               supportedTypes[\"\"] = Tuple.Create(UnitTypeId.Lux, SymbolTypeId.Lx);\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.LuminousFlux))\r\n            {\r\n               supportedTypes[\"\"] = Tuple.Create(UnitTypeId.Lumens, SymbolTypeId.Lm);\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.LuminousIntensity))\r\n            {\r\n               supportedTypes[\"\"] = Tuple.Create(UnitTypeId.Candelas, SymbolTypeId.Cd);\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.ElectricalPotential))\r\n            {\r\n               supportedTypes[\"\"] = Tuple.Create(UnitTypeId.Volts, SymbolTypeId.Volt);\r\n               supportedTypes[\"KILO\"] = Tuple.Create(UnitTypeId.Kilovolts, SymbolTypeId.KV);\r\n               supportedTypes[\"MILLI\"] = Tuple.Create(UnitTypeId.Millivolts, SymbolTypeId.MV);\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.Force))\r\n            {\r\n               supportedTypes[\"\"] = Tuple.Create(UnitTypeId.Newtons, SymbolTypeId.Newton);    // Even if unit is grams, display kg.\r\n               supportedTypes[\"KILO\"] = Tuple.Create(UnitTypeId.Kilonewtons, SymbolTypeId.KN);\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.HvacPower))\r\n            {\r\n               supportedTypes[\"\"] = Tuple.Create(UnitTypeId.Watts, SymbolTypeId.Watt);\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.HvacPressure))\r\n            {\r\n               supportedTypes[\"\"] = Tuple.Create(UnitTypeId.Pascals, SymbolTypeId.Pa);\r\n               supportedTypes[\"KILO\"] = Tuple.Create(UnitTypeId.Kilopascals, SymbolTypeId.KPa);\r\n               supportedTypes[\"MEGA\"] = Tuple.Create(UnitTypeId.Megapascals, SymbolTypeId.MPa);\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.Length))\r\n            {\r\n               supportedTypes[\"\"] = Tuple.Create(UnitTypeId.Meters, SymbolTypeId.Meter);\r\n               supportedTypes[\"DECI\"] = Tuple.Create(UnitTypeId.Decimeters, SymbolTypeId.Dm);\r\n               supportedTypes[\"CENTI\"] = Tuple.Create(UnitTypeId.Centimeters, SymbolTypeId.Cm);\r\n               supportedTypes[\"MILLI\"] = Tuple.Create(UnitTypeId.Millimeters, SymbolTypeId.Mm);\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.Mass))\r\n            {\r\n               supportedTypes[\"\"] = Tuple.Create(UnitTypeId.Kilograms, SymbolTypeId.Kg);    // Even if unit is grams, display kg.\r\n               supportedTypes[\"KILO\"] = Tuple.Create(UnitTypeId.Kilograms, SymbolTypeId.Kg);\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.MassDensity))\r\n            {\r\n               supportedTypes[\"\"] = Tuple.Create(UnitTypeId.KilogramsPerCubicMeter, SymbolTypeId.KgPerMSup3);    // Even if unit is grams, display kg.\r\n               supportedTypes[\"KILO\"] = Tuple.Create(UnitTypeId.KilogramsPerCubicMeter, SymbolTypeId.KgPerMSup3);\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.PipingMassPerTime))\r\n            {\r\n               supportedTypes[\"\"] = Tuple.Create(UnitTypeId.KilogramsPerSecond, SymbolTypeId.KgPerS);    // Even if unit is grams, display kg.\r\n               supportedTypes[\"KILO\"] = Tuple.Create(UnitTypeId.KilogramsPerSecond, SymbolTypeId.KgPerS);\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.AngularSpeed))\r\n            {\r\n               supportedTypes[\"\"] = Tuple.Create(UnitTypeId.RevolutionsPerSecond, SymbolTypeId.Rps);\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.Volume))\r\n            {\r\n               supportedTypes[\"\"] = Tuple.Create(UnitTypeId.CubicMeters, SymbolTypeId.MSup3);\r\n               supportedTypes[\"DECI\"] = Tuple.Create(UnitTypeId.Liters, SymbolTypeId.Liter);\r\n               supportedTypes[\"CENTI\"] = Tuple.Create(UnitTypeId.CubicCentimeters, SymbolTypeId.CmSup3);\r\n               supportedTypes[\"MILLI\"] = Tuple.Create(UnitTypeId.CubicMillimeters, SymbolTypeId.MmSup3);\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.Wattage))\r\n            {\r\n               supportedTypes[\"\"] = Tuple.Create(UnitTypeId.Watts, SymbolTypeId.Watt);\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.Energy))\r\n            {\r\n               supportedTypes[\"\"] = Tuple.Create(UnitTypeId.Joules, SymbolTypeId.Joule);\r\n               supportedTypes[\"KILO\"] = Tuple.Create(UnitTypeId.Kilojoules, SymbolTypeId.KJ);\r\n            }\r\n            m_sSupportedMetricUnitTypes[specTypeId] = supportedTypes;\r\n         }\r\n\r\n         return supportedTypes;\r\n      }\r\n\r\n      private double GetScaleFactorForUnitType(string prefix, ForgeTypeId specTypeId)\r\n      {\r\n         double scaleFactor = m_sPrefixToScaleFactor[prefix];\r\n\r\n         const double lengthFactor = (1.0 / 0.3048);\r\n         const double areaFactor = lengthFactor * lengthFactor;\r\n         const double volumeFactor = areaFactor * lengthFactor;\r\n\r\n         // length ^ -2\r\n         if (specTypeId.Equals(SpecTypeId.Illuminance))\r\n         {\r\n            return (scaleFactor * scaleFactor) / areaFactor;\r\n         }\r\n         // length ^ -1\r\n         if (specTypeId.Equals(SpecTypeId.HvacPressure))\r\n         {\r\n            return scaleFactor / lengthFactor;\r\n         }\r\n         // length\r\n         if (specTypeId.Equals(SpecTypeId.Force) ||\r\n            specTypeId.Equals(SpecTypeId.Length))\r\n         {\r\n            return (scaleFactor * lengthFactor);\r\n         }\r\n         // length ^ 2\r\n         if (specTypeId.Equals(SpecTypeId.Area) ||\r\n            specTypeId.Equals(SpecTypeId.ElectricalPotential) ||\r\n            specTypeId.Equals(SpecTypeId.HvacPower) ||\r\n            specTypeId.Equals(SpecTypeId.Energy))\r\n         {\r\n            return (scaleFactor * scaleFactor) * areaFactor;\r\n         }\r\n         // length ^ 3\r\n         if (specTypeId.Equals(SpecTypeId.Volume))\r\n         {\r\n            return (scaleFactor * scaleFactor * scaleFactor) * volumeFactor;\r\n         }\r\n         if (specTypeId.Equals(SpecTypeId.Mass))\r\n         {\r\n            return (scaleFactor / 1000.0);   // Standard internal scale is kg.\r\n         }\r\n         return scaleFactor;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes the metric prefix of a dimension.\r\n      /// </summary>\r\n      /// <param name=\"prefix\">The prefix name.</param>\r\n      /// <param name=\"specTypeId\">The spec identifier.</param>\r\n      /// <returns>True if the prefix is supported, false if not.</returns>\r\n      private bool ProcessMetricPrefix(string prefix, ForgeTypeId specTypeId)\r\n      {\r\n         if (prefix == null)\r\n            prefix = \"\";\r\n\r\n         IDictionary<string, Tuple<ForgeTypeId, ForgeTypeId>> supportedDisplayTypes = GetSupportedDisplayTypes(specTypeId);\r\n         if (!supportedDisplayTypes.ContainsKey(prefix))\r\n            return false;\r\n\r\n         if (m_sPrefixToScaleFactor == null)\r\n            InitPrefixToScaleFactor();\r\n\r\n         if (!m_sPrefixToScaleFactor.ContainsKey(prefix))\r\n            return false;\r\n\r\n         Tuple<ForgeTypeId, ForgeTypeId> unitNameAndSymbol = supportedDisplayTypes[prefix];\r\n         Unit = unitNameAndSymbol.Item1;\r\n         Symbol = unitNameAndSymbol.Item2;\r\n         ScaleFactor *= GetScaleFactorForUnitType(prefix, specTypeId);\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// A private container for ProcessIFCDerivedUnit to store expected type definitions for derived types.\r\n      /// </summary>\r\n      class DerivedUnitExpectedTypes\r\n      {\r\n         /// <summary>\r\n         /// DerivedUnitExpectedTypes constructor.\r\n         /// </summary>\r\n         public DerivedUnitExpectedTypes(ForgeTypeId unitTypeId, ForgeTypeId symbolTypeId)\r\n         {\r\n            Unit = unitTypeId;\r\n            Symbol = symbolTypeId;\r\n         }\r\n\r\n         /// <summary>\r\n         /// The set of expected types.\r\n         /// </summary>\r\n         public ISet<Tuple<int, ForgeTypeId, string>> ExpectedTypes\r\n         {\r\n            get { return m_ExpectedTypes; }\r\n         }\r\n\r\n         /// <summary>\r\n         /// The unit name of this set of expected types.\r\n         /// </summary>\r\n         public ForgeTypeId Unit { get; protected set; }\r\n\r\n         /// <summary>\r\n         /// The unit symbol type of this set of expected types.\r\n         /// </summary>\r\n         public ForgeTypeId Symbol { get; protected set; }\r\n\r\n         private ISet<Tuple<int, ForgeTypeId, string>> ExpectedTypesCopy()\r\n         {\r\n            ISet<Tuple<int, ForgeTypeId, string>> expectedTypesCopy = new HashSet<Tuple<int, ForgeTypeId, string>>();\r\n            foreach (Tuple<int, ForgeTypeId, string> expectedType in ExpectedTypes)\r\n            {\r\n               expectedTypesCopy.Add(expectedType);\r\n            }\r\n            return expectedTypesCopy;\r\n         }\r\n\r\n         /// <summary>\r\n         /// Add a standard expected type.\r\n         /// </summary>\r\n         /// <param name=\"exponent\">The exponent of the type.</param>\r\n         /// <param name=\"specTypeId\">The spec identifier.</param>\r\n         public void AddExpectedType(int exponent, ForgeTypeId specTypeId)\r\n         {\r\n            ExpectedTypes.Add(new Tuple<int, ForgeTypeId, string>(exponent, specTypeId, null));\r\n         }\r\n\r\n         /// <summary>\r\n         /// Add a custom expected type.\r\n         /// </summary>\r\n         /// <param name=\"exponent\">The exponent of the type.</param>\r\n         /// <param name=\"unitName\">The name of the base unit.</param>\r\n         public void AddCustomExpectedType(int exponent, string unitName)\r\n         {\r\n            ExpectedTypes.Add(Tuple.Create(exponent, SpecTypeId.Custom, unitName));\r\n         }\r\n\r\n         public bool Matches(IDictionary<IFCUnit, int> derivedElementUnitHnds, out double scaleFactor)\r\n         {\r\n            scaleFactor = 1.0;\r\n\r\n            if (derivedElementUnitHnds.Count != ExpectedTypes.Count)\r\n               return false;\r\n\r\n            ISet<Tuple<int, ForgeTypeId, string>> expectedTypes = ExpectedTypesCopy();\r\n\r\n            foreach (KeyValuePair<IFCUnit, int> derivedElementUnitHnd in derivedElementUnitHnds)\r\n            {\r\n               int dimensionality = derivedElementUnitHnd.Value;\r\n               Tuple<int, ForgeTypeId, string> currKey = Tuple.Create(dimensionality, derivedElementUnitHnd.Key.Spec, derivedElementUnitHnd.Key.CustomSpec);\r\n               if (expectedTypes.Contains(currKey))\r\n               {\r\n                  expectedTypes.Remove(currKey);\r\n                  scaleFactor *= Math.Pow(derivedElementUnitHnd.Key.ScaleFactor, dimensionality);\r\n               }\r\n               else\r\n                  break;\r\n            }\r\n\r\n            // Found all supported units.\r\n            if (expectedTypes.Count != 0)\r\n               return false;\r\n\r\n            return true;\r\n         }\r\n\r\n         private ISet<Tuple<int, ForgeTypeId, string>> m_ExpectedTypes = new HashSet<Tuple<int, ForgeTypeId, string>>();\r\n      }\r\n\r\n      /// <summary>\r\n      /// The comparer for comparing IFCUnit.\r\n      /// </summary>\r\n      private class UnitCompare : IComparer<IFCUnit>\r\n      {\r\n         /// <summary>\r\n         /// A comparison for two IFCUnit by Spec and CustomSpec\r\n         /// </summary>\r\n         /// <param name=\"unit1\">The first unit.</param>\r\n         /// <param name=\"unit2\">The second unit.</param>\r\n         /// <returns>-1 if the first unit1 is smaller, 1 if larger, 0 if equal.</returns>\r\n         public int Compare(IFCUnit unit1, IFCUnit unit2)\r\n         {\r\n            ForgeTypeId spec1 = unit1?.Spec;\r\n            ForgeTypeId spec2 = unit2?.Spec;\r\n\r\n            if (spec1 != spec2)\r\n               return (spec1 < spec2) ? -1 : 1;\r\n            else\r\n               return string.Compare(unit1?.CustomSpec, unit2?.CustomSpec);\r\n         }\r\n      }\r\n\r\n\r\n\r\n      /// <summary>\r\n      /// Processes an IfcDerivedUnit.\r\n      /// </summary>\r\n      /// <param name=\"unitHnd\">The unit handle.</param>\r\n      void ProcessIFCDerivedUnit(IFCAnyHandle unitHnd)\r\n      {\r\n         List<IFCAnyHandle> elements =\r\n             IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(unitHnd, \"Elements\");\r\n\r\n         SortedDictionary<IFCUnit, int> derivedElementUnitHnds = new SortedDictionary<IFCUnit, int>(new UnitCompare());\r\n         foreach (IFCAnyHandle subElement in elements)\r\n         {\r\n            IFCAnyHandle derivedElementUnitHnd = IFCImportHandleUtil.GetRequiredInstanceAttribute(subElement, \"Unit\", false);\r\n            IFCUnit subUnit = IFCAnyHandleUtil.IsNullOrHasNoValue(derivedElementUnitHnd) ? null : IFCUnit.ProcessIFCUnit(derivedElementUnitHnd);\r\n            if (subUnit != null)\r\n            {\r\n               bool found;\r\n               int exponent = IFCImportHandleUtil.GetRequiredIntegerAttribute(subElement, \"Exponent\", out found);\r\n               if (found)\r\n               {\r\n                  if (!derivedElementUnitHnds.ContainsKey(subUnit))\r\n                  {\r\n                     derivedElementUnitHnds.Add(subUnit, exponent);\r\n                  }\r\n                  else\r\n                  {\r\n                     derivedElementUnitHnds[subUnit] += exponent;\r\n                     if (derivedElementUnitHnds[subUnit] == 0)\r\n                        derivedElementUnitHnds.Remove(subUnit);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         // the DerivedUnitExpectedTypes object is a description of one possible set of base units for a particular derived unit.\r\n         // The IList allows for possible different interpretations.  For example, Volumetric Flow Rate could be defined by m^3/s (length ^ 3 / time) or L/s (volume / time).\r\n         IList<DerivedUnitExpectedTypes> expectedTypesList = new List<DerivedUnitExpectedTypes>();\r\n\r\n         string unitType = IFCAnyHandleUtil.GetEnumerationAttribute(unitHnd, \"UnitType\");\r\n         if (string.Compare(unitType, \"LINEARVELOCITYUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.HvacVelocity;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only m / s.\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.MetersPerSecond, SymbolTypeId.MPerS);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.Length);\r\n            expectedTypes.AddCustomExpectedType(-1, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"THERMALTRANSMITTANCEUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.HeatTransferCoefficient;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support W / (K * m^2) or kg / (K * s^3)\r\n            DerivedUnitExpectedTypes expectedTypesWinvKinvM2 = new DerivedUnitExpectedTypes(UnitTypeId.WattsPerSquareMeterKelvin, SymbolTypeId.WPerMSup2K);\r\n            expectedTypesWinvKinvM2.AddExpectedType(1, SpecTypeId.HvacPower); // UT_Electrical_Wattage is similar, but UT_HVAC_Power is the one we map to.\r\n            expectedTypesWinvKinvM2.AddExpectedType(-1, SpecTypeId.HvacTemperature);\r\n            expectedTypesWinvKinvM2.AddExpectedType(-2, SpecTypeId.Length);\r\n            expectedTypesList.Add(expectedTypesWinvKinvM2);\r\n\r\n            DerivedUnitExpectedTypes expectedTypesWinvKinvArea = new DerivedUnitExpectedTypes(UnitTypeId.WattsPerSquareMeterKelvin, SymbolTypeId.WPerMSup2K);\r\n            expectedTypesWinvKinvArea.AddExpectedType(1, SpecTypeId.HvacPower); // UT_Electrical_Wattage is similar, but UT_HVAC_Power is the one we map to.\r\n            expectedTypesWinvKinvArea.AddExpectedType(-1, SpecTypeId.HvacTemperature);\r\n            expectedTypesWinvKinvArea.AddExpectedType(-1, SpecTypeId.Area);\r\n            expectedTypesList.Add(expectedTypesWinvKinvArea);\r\n\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.WattsPerSquareMeterKelvin, SymbolTypeId.WPerMSup2K);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n            expectedTypes.AddExpectedType(-1, SpecTypeId.HvacTemperature);\r\n            expectedTypes.AddCustomExpectedType(-3, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"VOLUMETRICFLOWRATEUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.AirFlow;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support L / s or m^3 / s in the IFC file.\r\n\r\n            // L / s\r\n            DerivedUnitExpectedTypes expectedTypesLPerS = new DerivedUnitExpectedTypes(UnitTypeId.LitersPerSecond, SymbolTypeId.LPerS);\r\n            expectedTypesLPerS.AddExpectedType(1, SpecTypeId.Volume);\r\n            expectedTypesLPerS.AddCustomExpectedType(-1, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypesLPerS);\r\n\r\n            // m^3 / s.\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.CubicMetersPerSecond, SymbolTypeId.MSup3PerS);\r\n            expectedTypes.AddExpectedType(3, SpecTypeId.Length);\r\n            expectedTypes.AddCustomExpectedType(-1, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"MASSDENSITYUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.MassDensity;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support kg / m^3 in the IFC file.\r\n\r\n            // kg / m^3.\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.KilogramsPerCubicMeter, SymbolTypeId.KgPerMSup3);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n            expectedTypes.AddExpectedType(-3, SpecTypeId.Length);\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"LINEARFORCEUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.LinearForce;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support N / m in the IFC file.\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.NewtonsPerMeter, SymbolTypeId.NPerM);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.LinearForce);\r\n            expectedTypesList.Add(expectedTypes);\r\n\r\n            // Support N / m in basic units\r\n            DerivedUnitExpectedTypes expectedTypes2 = new DerivedUnitExpectedTypes(UnitTypeId.NewtonsPerMeter, SymbolTypeId.NPerM);\r\n            expectedTypes2.AddExpectedType(1, SpecTypeId.Mass);\r\n            expectedTypes2.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypes2);\r\n         }\r\n         else if (string.Compare(unitType, \"PLANARFORCEUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.AreaForce;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support N / m^2 in the IFC file.\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.NewtonsPerSquareMeter, SymbolTypeId.NPerMSup2);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.AreaForce);\r\n            expectedTypesList.Add(expectedTypes);\r\n\r\n            // Support N / m^2 in basic units\r\n            DerivedUnitExpectedTypes expectedTypes2 = new DerivedUnitExpectedTypes(UnitTypeId.NewtonsPerSquareMeter, SymbolTypeId.NPerMSup2);\r\n            expectedTypes2.AddExpectedType(1, SpecTypeId.Mass);\r\n            expectedTypes2.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n            expectedTypes2.AddExpectedType(-1, SpecTypeId.Length);\r\n            expectedTypesList.Add(expectedTypes2);\r\n         }\r\n         else if (string.Compare(unitType, \"MASSFLOWRATEUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.PipingMassPerTime;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support kg / s in the IFC file.\r\n\r\n            // kg / s\r\n            DerivedUnitExpectedTypes expectedTypesKgPerS = new DerivedUnitExpectedTypes(UnitTypeId.KilogramsPerSecond, SymbolTypeId.KgPerS);\r\n            expectedTypesKgPerS.AddExpectedType(1, SpecTypeId.Mass);\r\n            expectedTypesKgPerS.AddCustomExpectedType(-1, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypesKgPerS);\r\n         }\r\n         else if (string.Compare(unitType, \"ROTATIONALFREQUENCYUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.AngularSpeed;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support revolutions / s in the IFC file.\r\n\r\n            // revolutions / s\r\n            DerivedUnitExpectedTypes expectedTypesCps = new DerivedUnitExpectedTypes(UnitTypeId.RevolutionsPerSecond, SymbolTypeId.Rps);\r\n            expectedTypesCps.AddCustomExpectedType(-1, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypesCps);\r\n         }\r\n         else if (string.Compare(unitType, \"SOUNDPOWERUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Wattage;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support kg * m^2 / c^3 in the IFC file.\r\n\r\n            // kg * m^2 / c^3\r\n            DerivedUnitExpectedTypes expectedTypesW = new DerivedUnitExpectedTypes(UnitTypeId.Watts, SymbolTypeId.Watt);\r\n            expectedTypesW.AddExpectedType(1, SpecTypeId.Mass);\r\n            expectedTypesW.AddExpectedType(2, SpecTypeId.Length);\r\n            expectedTypesW.AddCustomExpectedType(-3, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypesW);\r\n         }\r\n         else if (string.Compare(unitType, \"SOUNDPRESSUREUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.HvacPressure;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support kg / (m * c^2) in the IFC file.\r\n\r\n            // kg / (m * c^2)\r\n            DerivedUnitExpectedTypes expectedTypesPa = new DerivedUnitExpectedTypes(UnitTypeId.Pascals, SymbolTypeId.Pa);\r\n            expectedTypesPa.AddExpectedType(1, SpecTypeId.Mass);\r\n            expectedTypesPa.AddExpectedType(-1, SpecTypeId.Length);\r\n            expectedTypesPa.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypesPa);\r\n         }\r\n         else if (string.Compare(unitType, \"DYNAMICVISCOSITYUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.HvacViscosity;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only kg / (m * s).\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.KilogramsPerMeterSecond, SymbolTypeId.KgPerMS);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n            expectedTypes.AddExpectedType(-1, SpecTypeId.Length);\r\n            expectedTypes.AddCustomExpectedType(-1, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"SPECIFICHEATCAPACITYUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.SpecificHeat;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only J/(kg * K) = m^2/(s^2 * K).\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.JoulesPerKilogramDegreeCelsius, SymbolTypeId.JPerKgDegreeC);\r\n            expectedTypes.AddExpectedType(2, SpecTypeId.Length);\r\n            expectedTypes.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n            expectedTypes.AddExpectedType(-1, SpecTypeId.HvacTemperature);\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"HEATINGVALUEUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.SpecificHeatOfVaporization;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only J/kg = m^2/s^2.\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.JoulesPerGram, SymbolTypeId.JPerG);\r\n            expectedTypes.AddExpectedType(2, SpecTypeId.Length);\r\n            expectedTypes.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"HEATFLUXDENSITYUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.HvacPowerDensity;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only W/m^2 = kg/s^3.\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.WattsPerSquareMeter, SymbolTypeId.WPerMSup2);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n            expectedTypes.AddCustomExpectedType(-3, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"VAPORPERMEABILITYUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Permeability;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only kg/(Pa * s * m^2) = s/m.\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.NanogramsPerPascalSecondSquareMeter, SymbolTypeId.NgPerPaSMSup2);\r\n            expectedTypes.AddCustomExpectedType(1, \"TIMEUNIT\");\r\n            expectedTypes.AddExpectedType(-1, SpecTypeId.Length);\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"THERMALEXPANSIONCOEFFICIENTUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.ThermalExpansionCoefficient;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only 1/K.\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.InverseDegreesCelsius, SymbolTypeId.InvDegreeC);\r\n            expectedTypes.AddExpectedType(-1, SpecTypeId.HvacTemperature);\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"THERMALCONDUCTANCEUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.ThermalConductivity;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only  W/(m * K) = (kg * m)/(K * s^3).\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.WattsPerMeterKelvin, SymbolTypeId.WPerMK);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.Length);\r\n            expectedTypes.AddExpectedType(-1, SpecTypeId.HvacTemperature);\r\n            expectedTypes.AddCustomExpectedType(-3, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"MODULUSOFELASTICITYUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Stress;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only Pa.\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.Pascals, SymbolTypeId.Pa);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n            expectedTypes.AddExpectedType(-1, SpecTypeId.Length);\r\n            expectedTypes.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"ISOTHERMALMOISTURECAPACITYUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.IsothermalMoistureCapacity;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only m3 / kg.\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.CubicMetersPerKilogram, SymbolTypeId.MSup3PerKg);\r\n            expectedTypes.AddExpectedType(3, SpecTypeId.Length);\r\n            expectedTypes.AddExpectedType(-1, SpecTypeId.Mass);\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"MOISTUREDIFFUSIVITYUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Diffusivity;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only m2 / s.\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.SquareMetersPerSecond, SymbolTypeId.MSup2PerS);\r\n            expectedTypes.AddExpectedType(2, SpecTypeId.Length);\r\n            expectedTypes.AddCustomExpectedType(-1, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"IONCONCENTRATIONUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.MassDensity;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support kg / m^3 in the IFC file.\r\n\r\n            // kg / m^3.\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.KilogramsPerCubicMeter, SymbolTypeId.KgPerMSup3);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n            expectedTypes.AddExpectedType(-3, SpecTypeId.Length);\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"MOMENTOFINERTIAUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.MomentOfInertia;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support m^4 in the IFC file.\r\n\r\n            // m^4.\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.MetersToTheFourthPower, SymbolTypeId.MSup4);\r\n            expectedTypes.AddExpectedType(4, SpecTypeId.Length);\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"AREADENSITYUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.MassPerUnitArea;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only kg/m^2.\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.KilogramsPerSquareMeter, SymbolTypeId.KgPerMSup2);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n            expectedTypes.AddExpectedType(-2, SpecTypeId.Length);\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"MASSPERLENGTHUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.MassPerUnitLength;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only kg/m.\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.KilogramsPerMeter, SymbolTypeId.KgPerM);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n            expectedTypes.AddExpectedType(-1, SpecTypeId.Length);\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"THERMALRESISTANCEUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.ThermalResistance;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only (m^2 * K)/W = (s^3 * K) / kg \r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.SquareMeterKelvinsPerWatt, SymbolTypeId.MSup2KPerW);\r\n            expectedTypes.AddCustomExpectedType(3, \"TIMEUNIT\");\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.HvacTemperature);\r\n            expectedTypes.AddExpectedType(-1, SpecTypeId.Mass);\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"ACCELERATIONUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Acceleration;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only m/s^2 \r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.MetersPerSecondSquared, SymbolTypeId.MPerSSup2);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.Length);\r\n            expectedTypes.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"ANGULARVELOCITYUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Pulsation;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only rad/s\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.RadiansPerSecond, SymbolTypeId.RadPerS);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.Angle);\r\n            expectedTypes.AddCustomExpectedType(-1, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"LINEARSTIFFNESSUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.PointSpringCoefficient;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only N/m = kg/s^2 \r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.NewtonsPerMeter, SymbolTypeId.NPerM);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n            expectedTypes.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"WARPINGCONSTANTUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.WarpingConstant;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only m^6\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.MetersToTheSixthPower, SymbolTypeId.MSup6);\r\n            expectedTypes.AddExpectedType(6, SpecTypeId.Length);\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"LINEARMOMENTUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.LinearMoment;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only N-m/m = (kg * m)/s^2 \r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.NewtonMetersPerMeter, SymbolTypeId.NDashMPerM);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.Length);\r\n            expectedTypes.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"TORQUEUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Moment;\r\n            UnitSystem = UnitSystem.Metric;\r\n\r\n            // Support only N-m = (kg * m^2)/s^2\r\n            DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.NewtonMeters, SymbolTypeId.NDashM);\r\n            expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n            expectedTypes.AddExpectedType(2, SpecTypeId.Length);\r\n            expectedTypes.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n            expectedTypesList.Add(expectedTypes);\r\n         }\r\n         else if (string.Compare(unitType, \"USERDEFINED\", true) == 0)\r\n         {\r\n            // Look at the sub-types to see what we support.\r\n            string userDefinedType = IFCImportHandleUtil.GetOptionalStringAttribute(unitHnd, \"UserDefinedType\", null);\r\n            if (!string.IsNullOrWhiteSpace(userDefinedType))\r\n            {\r\n               if (string.Compare(userDefinedType, \"Color Temperature\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.ColorTemperature;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only K.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.Kelvin, SymbolTypeId.Kelvin);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.HvacTemperature);\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Cost Per Area\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.CostPerArea;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only $/m2.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.CurrencyPerSquareMeter, SymbolTypeId.DollarPerMSup2);\r\n                  expectedTypes.AddExpectedType(-2, SpecTypeId.Length);\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Apparent Power Density\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.ApparentPowerDensity;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only VA / m2 = kg * s−3.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.VoltAmperesPerSquareMeter, SymbolTypeId.VAPerMSup2);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddCustomExpectedType(-3, \"TIMEUNIT\");\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Cost Rate Energy\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.CostRateEnergy;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only $ / (W * h) = kg-1 * m-2 * s2 / 3600.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.CurrencyPerWattHour, SymbolTypeId.DollarPerWH);\r\n                  expectedTypes.AddExpectedType(-1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(-2, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(2, \"TIMEUNIT\");\r\n                  // TODO\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Cost Rate Power\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.CostRatePower;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only $ / W = kg-1 * m-2 * s3.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.CurrencyPerWatt, SymbolTypeId.DollarPerW);\r\n                  expectedTypes.AddExpectedType(-1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(-2, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(3, \"TIMEUNIT\");\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Luminous Efficacy\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.Efficacy;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only lm / W.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.LumensPerWatt, SymbolTypeId.LmPerW);\r\n                  expectedTypes.AddExpectedType(-1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(-2, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(3, \"TIMEUNIT\");\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.LuminousFlux);\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Luminance\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.Luminance;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only cd / m2.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.CandelasPerSquareMeter, SymbolTypeId.CdPerMSup2);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.LuminousIntensity); // TODO check\r\n                  expectedTypes.AddExpectedType(-2, SpecTypeId.Length);\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Electrical Power Density\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.ElectricalPowerDensity;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support W / m2 = kg * s-3 only\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.WattsPerSquareMeter, SymbolTypeId.WPerMSup2);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddCustomExpectedType(-3, \"TIMEUNIT\");\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Power Per Length\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.PowerPerLength;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only W / m = kg * m * s-3.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.WattsPerMeter, SymbolTypeId.WPerM);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(-3, \"TIMEUNIT\");\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Electrical Resistivity\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.ElectricalResistivity;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only Ohm * M = (kg * m^3)/(s^3 * A^2)\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.OhmMeters, SymbolTypeId.OhmM);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(3, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(-3, \"TIMEUNIT\");\r\n                  expectedTypes.AddExpectedType(-2, SpecTypeId.Current);\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Heat Capacity Per Area\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.HeatCapacityPerArea;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only J / (m2 * K)\t= kg * s-2 * K-1.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.JoulesPerSquareMeterKelvin, SymbolTypeId.JPerMSup2K);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n                  expectedTypes.AddExpectedType(-1, SpecTypeId.HvacTemperature);\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Thermal Gradient Coefficient For Moisture Capacity\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.ThermalGradientCoefficientForMoistureCapacity;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only kg / (kg * K) = K-1.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.KilogramsPerKilogramKelvin, SymbolTypeId.KgPerKgK);\r\n                  expectedTypes.AddExpectedType(-1, SpecTypeId.HvacTemperature);\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Thermal Mass\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.ThermalMass;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only J / K = kg * m2 * s-2 * K-1.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.JoulesPerKelvin, SymbolTypeId.JPerK);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(2, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n                  expectedTypes.AddExpectedType(-1, SpecTypeId.HvacTemperature);\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Air Flow Density\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.AirFlowDensity;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only m3 / (h * m2) = m * s-1 / 3600.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.CubicMetersPerHourSquareMeter, SymbolTypeId.MSup3PerHMSup2);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(-1, \"TIMEUNIT\");\r\n                  // TODO\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Air Flow Divided By Cooling Load\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.AirFlowDividedByCoolingLoad;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only L / (s * kW) = kg–1 * m * s2 * 10–6.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.LitersPerSecondKilowatt, SymbolTypeId.LPerSKw);\r\n                  expectedTypes.AddExpectedType(-1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(2, \"TIMEUNIT\");\r\n                  // TODO\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Air Flow Divided By Volume\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.AirFlowDividedByVolume;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only m3 / (h*m3) = s-1 / 3600.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.CubicMetersPerHourCubicMeter, SymbolTypeId.MSup3PerHMSup3);\r\n                  expectedTypes.AddCustomExpectedType(-1, \"TIMEUNIT\");\r\n                  // TODO\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Area Divided By Cooling Load\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.AreaDividedByCoolingLoad;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only m2 / kW = s3 * kg-1 * 10-3.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.SquareMetersPerKilowatt, SymbolTypeId.MSup2PerKw);\r\n                  expectedTypes.AddExpectedType(-1, SpecTypeId.Mass);\r\n                  expectedTypes.AddCustomExpectedType(3, \"TIMEUNIT\");\r\n                  // TODO\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Area Divided By Heating Load\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.AreaDividedByHeatingLoad;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only m2 / kW = s3 * kg-1 * 10-3.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.SquareMetersPerKilowatt, SymbolTypeId.MSup2PerKw);\r\n                  expectedTypes.AddExpectedType(-1, SpecTypeId.Mass);\r\n                  expectedTypes.AddCustomExpectedType(3, \"TIMEUNIT\");\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Cooling Load Divided By Area\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.CoolingLoadDividedByArea;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only W / m2\t= kg * s−3.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.WattsPerSquareMeter, SymbolTypeId.WPerMSup2);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddCustomExpectedType(-3, \"TIMEUNIT\");\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Cooling Load Divided By Volume\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.CoolingLoadDividedByVolume;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only W / m3 = kg * m-1 * s-3.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.WattsPerCubicMeter, SymbolTypeId.WPerMSup3);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(-1, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(-3, \"TIMEUNIT\");\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Flow Per Power\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.FlowPerPower;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only m3 / (W * s) = kg-1 * m * s2.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.CubicMetersPerWattSecond, SymbolTypeId.MSup3PerWS);\r\n                  expectedTypes.AddExpectedType(-1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(2, \"TIMEUNIT\");\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Friction Loss\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.HvacFriction;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only Pa / m = kg * m-2 * s-2.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.PascalsPerMeter, SymbolTypeId.PaPerM);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(-2, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Heating Load Divided By Area\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.HeatingLoadDividedByArea;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only W / m2 = kg * s−3.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.WattsPerSquareMeter, SymbolTypeId.WPerMSup2);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddCustomExpectedType(-3, \"TIMEUNIT\");\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Heating Load Divided By Volume\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.HeatingLoadDividedByVolume;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only W / m3 = kg * m-1 * s-3.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.WattsPerCubicMeter, SymbolTypeId.WPerMSup3);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(-1, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(-3, \"TIMEUNIT\");\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Power Per Flow\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.PowerPerFlow;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only (W * s) / m3 = kg * m-1 * s-2.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.WattsPerCubicMeterPerSecond, SymbolTypeId.WSPerMSup3);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(-1, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Piping Friction\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.PipingFriction;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only Pa / m = kg * m-2 * s-2.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.PascalsPerMeter, SymbolTypeId.PaPerM);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(-2, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Area Spring Coefficient\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.AreaSpringCoefficient;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only Pa / m = kg * m-2 * s-2.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.PascalsPerMeter, SymbolTypeId.PaPerM);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(-2, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Line Spring Coefficient\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.LineSpringCoefficient;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only Pa = kg * m-1 * s-2.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.Pascals, SymbolTypeId.Pa);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(-1, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Mass Per Unit Area\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.MassPerUnitArea;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only kg / m2 = kg * m-2.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.KilogramsPerSquareMeter, SymbolTypeId.KgPerMSup2);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(-2, SpecTypeId.Length);\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Reinforcement Area Per Unit Length\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.ReinforcementAreaPerUnitLength;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only m2 / m = m.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.SquareMetersPerMeter, SymbolTypeId.MSup2PerM);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Length);\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Rotational Line Spring Coefficient\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.RotationalLineSpringCoefficient;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only kn-m / (deg/m) = 10+3 kg * m3 * s-2 * rad-1.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.KilonewtonMetersPerDegreePerMeter, SymbolTypeId.KNDashMPerDegreePerM);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n                  expectedTypes.AddExpectedType(-1, SpecTypeId.Angle);\r\n                  // TODO\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Rotational Point Spring Coefficient\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.RotationalPointSpringCoefficient;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only kn-m / deg = 10+3 kg * m2 * s-2 * rad-1.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.KilonewtonMetersPerDegree, SymbolTypeId.KNDashMPerDegree);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(2, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n                  expectedTypes.AddExpectedType(-1, SpecTypeId.Angle);\r\n                  // TODO\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n               else if (string.Compare(userDefinedType, \"Unit Weight\", true) == 0)\r\n               {\r\n                  Spec = SpecTypeId.UnitWeight;\r\n                  UnitSystem = UnitSystem.Metric;\r\n\r\n                  // Support only kN / m3 = 10+3 kg * m-2 * s-2 * 10-3.\r\n                  DerivedUnitExpectedTypes expectedTypes = new DerivedUnitExpectedTypes(UnitTypeId.KilonewtonsPerCubicMeter, SymbolTypeId.KNPerMSup3);\r\n                  expectedTypes.AddExpectedType(1, SpecTypeId.Mass);\r\n                  expectedTypes.AddExpectedType(-2, SpecTypeId.Length);\r\n                  expectedTypes.AddCustomExpectedType(-2, \"TIMEUNIT\");\r\n                  // TODO\r\n                  expectedTypesList.Add(expectedTypes);\r\n               }\r\n            }\r\n         }\r\n\r\n         foreach (DerivedUnitExpectedTypes derivedUnitExpectedTypes in expectedTypesList)\r\n         {\r\n            double scaleFactor = 1.0;\r\n            if (derivedUnitExpectedTypes.Matches(derivedElementUnitHnds, out scaleFactor))\r\n            {\r\n               // Found a match.\r\n               Unit = derivedUnitExpectedTypes.Unit;\r\n               Symbol = derivedUnitExpectedTypes.Symbol;\r\n               ScaleFactor = scaleFactor;\r\n               return;\r\n            }\r\n         }\r\n\r\n         Importer.TheLog.LogUnhandledUnitTypeError(unitHnd, unitType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an SI unit.\r\n      /// </summary>\r\n      /// <param name=\"unitHnd\">The unit handle.</param>\r\n      void ProcessIFCSIUnit(IFCAnyHandle unitHnd)\r\n      {\r\n         UnitSystem = UnitSystem.Metric;\r\n\r\n         string unitType = IFCAnyHandleUtil.GetEnumerationAttribute(unitHnd, \"UnitType\");\r\n         string unitName = IFCAnyHandleUtil.GetEnumerationAttribute(unitHnd, \"Name\");\r\n         string prefix = IFCAnyHandleUtil.GetEnumerationAttribute(unitHnd, \"Prefix\");\r\n         bool unitNameSupported = true;\r\n\r\n         if (string.Compare(unitType, \"AREAUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Area;\r\n            unitNameSupported = (string.Compare(unitName, \"SQUARE_METRE\", true) == 0) && ProcessMetricPrefix(prefix, Spec);\r\n         }\r\n         else if (string.Compare(unitType, \"ELECTRICCURRENTUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Current;\r\n            unitNameSupported = ProcessMetricPrefix(prefix, Spec);\r\n         }\r\n         else if (string.Compare(unitType, \"ELECTRICVOLTAGEUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.ElectricalPotential;\r\n            unitNameSupported = ProcessMetricPrefix(prefix, Spec);\r\n         }\r\n         else if (string.Compare(unitType, \"ENERGYUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Energy;\r\n            unitNameSupported = ProcessMetricPrefix(prefix, Spec);\r\n         }\r\n         else if (string.Compare(unitType, \"FORCEUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Force;\r\n            unitNameSupported = ProcessMetricPrefix(prefix, Spec);\r\n         }\r\n         else if (string.Compare(unitType, \"FREQUENCYUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.ElectricalFrequency;\r\n            unitNameSupported = ProcessMetricPrefix(prefix, Spec);\r\n         }\r\n         else if (string.Compare(unitType, \"ILLUMINANCEUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Illuminance;\r\n            unitNameSupported = ProcessMetricPrefix(prefix, Spec);\r\n         }\r\n         else if (string.Compare(unitType, \"LENGTHUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Length;\r\n            unitNameSupported = (string.Compare(unitName, \"METRE\", true) == 0) && ProcessMetricPrefix(prefix, SpecTypeId.Length);\r\n         }\r\n         else if (string.Compare(unitType, \"LUMINOUSFLUXUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.LuminousFlux;\r\n            unitNameSupported = ProcessMetricPrefix(prefix, Spec);\r\n         }\r\n         else if (string.Compare(unitType, \"LUMINOUSINTENSITYUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.LuminousIntensity;\r\n            unitNameSupported = ProcessMetricPrefix(prefix, Spec);\r\n         }\r\n         else if (string.Compare(unitType, \"MASSUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Mass;\r\n            unitNameSupported = ProcessMetricPrefix(prefix, Spec);\r\n         }\r\n         else if (string.Compare(unitType, \"PLANEANGLEUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Angle;\r\n            Unit = UnitTypeId.Radians;\r\n            unitNameSupported = (string.Compare(unitName, \"RADIAN\", true) == 0) && (string.IsNullOrWhiteSpace(prefix));\r\n         }\r\n         else if (string.Compare(unitType, \"POWERUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.HvacPower;\r\n            unitNameSupported = ProcessMetricPrefix(prefix, Spec);\r\n         }\r\n         else if (string.Compare(unitType, \"PRESSUREUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.HvacPressure;\r\n            unitNameSupported = ProcessMetricPrefix(prefix, Spec);\r\n         }\r\n         else if (string.Compare(unitType, \"SOLIDANGLEUNIT\", true) == 0)\r\n         {\r\n            // Will warn if not steridians.\r\n            Spec = SpecTypeId.Custom;\r\n            CustomSpec = unitType;\r\n            unitNameSupported = (string.Compare(unitName, \"STERADIAN\", true) == 0) && (string.IsNullOrWhiteSpace(prefix));\r\n         }\r\n         else if (string.Compare(unitType, \"THERMODYNAMICTEMPERATUREUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.HvacTemperature;\r\n            if (string.Compare(unitName, \"DEGREE_CELSIUS\", true) == 0 ||\r\n                string.Compare(unitName, \"CELSIUS\", true) == 0)\r\n            {\r\n               Unit = UnitTypeId.Celsius;\r\n               Symbol = SymbolTypeId.DegreeC;\r\n               OffsetFactor = -273.15;\r\n            }\r\n            else if (string.Compare(unitName, \"KELVIN\", true) == 0 ||\r\n                string.Compare(unitName, \"DEGREE_KELVIN\", true) == 0)\r\n            {\r\n               Unit = UnitTypeId.Kelvin;\r\n               Symbol = SymbolTypeId.Kelvin;\r\n            }\r\n            else if (string.Compare(unitName, \"FAHRENHEIT\", true) == 0 ||\r\n                string.Compare(unitName, \"DEGREE_FAHRENHEIT\", true) == 0)\r\n            {\r\n               UnitSystem = UnitSystem.Imperial;\r\n               Unit = UnitTypeId.Fahrenheit;\r\n               Symbol = SymbolTypeId.DegreeF;\r\n               ScaleFactor = 5.0 / 9.0;\r\n               OffsetFactor = (5.0 / 9.0) * 32 - 273.15;\r\n            }\r\n            else\r\n               unitNameSupported = false;\r\n         }\r\n         else if (string.Compare(unitType, \"TIMEUNIT\", true) == 0)\r\n         {\r\n            // Will warn if not seconds.\r\n            Spec = SpecTypeId.Custom;\r\n            CustomSpec = unitType;\r\n            unitNameSupported = (string.Compare(unitName, \"SECOND\", true) == 0) && (string.IsNullOrWhiteSpace(prefix));\r\n         }\r\n         else if (string.Compare(unitType, \"VOLUMEUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Volume;\r\n            unitNameSupported = (string.Compare(unitName, \"CUBIC_METRE\", true) == 0) && ProcessMetricPrefix(prefix, SpecTypeId.Volume);\r\n         }\r\n         else\r\n         {\r\n            Importer.TheLog.LogUnhandledUnitTypeError(unitHnd, unitType);\r\n         }\r\n\r\n         if (unitName != null && !unitNameSupported)\r\n         {\r\n            if (prefix != null)\r\n               Importer.TheLog.LogError(unitHnd.StepId, \"Unhandled type of \" + unitType + \": \" + prefix + unitName, false);\r\n            else\r\n               Importer.TheLog.LogError(unitHnd.StepId, \"Unhandled type of \" + unitType + \": \" + unitName, false);\r\n         }\r\n      }\r\n\r\n      // Note: the ScaleFactor will be likely overwritten.\r\n      void CopyUnit(IFCUnit unit)\r\n      {\r\n         Spec = unit.Spec;\r\n         Unit = unit.Unit;\r\n         UnitSystem = unit.UnitSystem;\r\n         Symbol = unit.Symbol;\r\n         ScaleFactor = unit.ScaleFactor;\r\n         OffsetFactor = unit.OffsetFactor;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes measure with unit.\r\n      /// </summary>\r\n      /// <param name=\"measureUnitHnd\">The measure unit handle.</param>\r\n      void ProcessIFCMeasureWithUnit(IFCAnyHandle measureUnitHnd)\r\n      {\r\n         double baseScale = 0.0;\r\n\r\n         IFCData ifcData = measureUnitHnd.GetAttribute(\"ValueComponent\");\r\n         if (!ifcData.HasValue)\r\n            throw new InvalidOperationException(\"#\" + measureUnitHnd.StepId + \": Missing required attribute ValueComponent.\");\r\n\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.Double)\r\n            baseScale = ifcData.AsDouble();\r\n         else if (ifcData.PrimitiveType == IFCDataPrimitiveType.Integer)\r\n            baseScale = (double)ifcData.AsInteger();\r\n\r\n         if (MathUtil.IsAlmostZero(baseScale))\r\n            throw new InvalidOperationException(\"#\" + measureUnitHnd.StepId + \": ValueComponent should not be almost zero.\");\r\n\r\n         IFCAnyHandle unitHnd = IFCImportHandleUtil.GetRequiredInstanceAttribute(measureUnitHnd, \"UnitComponent\", true);\r\n\r\n         IFCUnit unit = ProcessIFCUnit(unitHnd);\r\n         CopyUnit(unit);\r\n         ScaleFactor = unit.ScaleFactor * baseScale;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes monetary unit.\r\n      /// </summary>\r\n      /// <param name=\"monetaryUnitHnd\">The monetary unit handle.</param>\r\n      void ProcessIFCMonetaryUnit(IFCAnyHandle monetaryUnitHnd)\r\n      {\r\n         string currencyType = (IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete)) ?\r\n            IFCImportHandleUtil.GetOptionalStringAttribute(monetaryUnitHnd, \"Currency\", string.Empty) :\r\n            IFCAnyHandleUtil.GetEnumerationAttribute(monetaryUnitHnd, \"Currency\");\r\n      \r\n         Spec = SpecTypeId.Currency;\r\n         Unit = UnitTypeId.Currency;\r\n\r\n         Symbol = new ForgeTypeId();\r\n         if ((string.Compare(currencyType, \"CAD\", true) == 0) ||\r\n             (string.Compare(currencyType, \"USD\", true) == 0) ||\r\n             (string.Compare(currencyType, \"$\", true) == 0))\r\n            Symbol = SymbolTypeId.UsDollar;\r\n         else if ((string.Compare(currencyType, \"EUR\", true) == 0) ||\r\n            (string.Compare(currencyType, \"€\", true) == 0))\r\n            Symbol = SymbolTypeId.EuroPrefix;\r\n         else if ((string.Compare(currencyType, \"GBP\", true) == 0) ||\r\n            (string.Compare(currencyType, \"£\", true) == 0))\r\n            Symbol = SymbolTypeId.UkPound;\r\n         else if (string.Compare(currencyType, \"HKD\", true) == 0)\r\n            Symbol = SymbolTypeId.ChineseHongKongDollar;\r\n         else if ((string.Compare(currencyType, \"ICK\", true) == 0) ||\r\n             (string.Compare(currencyType, \"NOK\", true) == 0) ||\r\n             (string.Compare(currencyType, \"SEK\", true) == 0))\r\n            Symbol = SymbolTypeId.Krone;\r\n         else if (string.Compare(currencyType, \"ILS\", true) == 0)\r\n            Symbol = SymbolTypeId.Shekel;\r\n         else if ((string.Compare(currencyType, \"JPY\", true) == 0) ||\r\n             (string.Compare(currencyType, \"¥\", true) == 0))\r\n            Symbol = SymbolTypeId.Yen;\r\n         else if (string.Compare(currencyType, \"KRW\", true) == 0)\r\n            Symbol = SymbolTypeId.Won;\r\n         else if ((string.Compare(currencyType, \"THB\", true) == 0) ||\r\n             (string.Compare(currencyType, \"฿\", true) == 0))\r\n            Symbol = SymbolTypeId.Baht;\r\n         else if (string.Compare(currencyType, \"VND\", true) == 0)\r\n            Symbol = SymbolTypeId.Dong;\r\n         else\r\n            Importer.TheLog.LogWarning(Id, \"Unhandled type of currency: \" + currencyType, true);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes a conversion based unit.\r\n      /// </summary>\r\n      /// <param name=\"convUnitHnd\">The unit handle.</param>\r\n      void ProcessIFCConversionBasedUnit(IFCAnyHandle convUnitHnd)\r\n      {\r\n         IFCAnyHandle measureWithUnitHnd = IFCAnyHandleUtil.GetInstanceAttribute(convUnitHnd, \"ConversionFactor\");\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(measureWithUnitHnd))\r\n            throw new InvalidOperationException(\"#\" + convUnitHnd.StepId + \": Missing required attribute ConversionFactor.\");\r\n\r\n         IFCUnit measureWithUnit = IFCUnit.ProcessIFCUnit(measureWithUnitHnd);\r\n         if (measureWithUnit == null)\r\n            throw new InvalidOperationException(\"#\" + convUnitHnd.StepId + \": Invalid base ConversionFactor, aborting.\");\r\n\r\n         CopyUnit(measureWithUnit);\r\n\r\n         // For some common cases, get the units correct.\r\n         string unitType = IFCAnyHandleUtil.GetEnumerationAttribute(convUnitHnd, \"UnitType\");\r\n         if (string.Compare(unitType, \"LENGTHUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Length;\r\n            string name = IFCAnyHandleUtil.GetStringAttribute(convUnitHnd, \"Name\");\r\n\r\n            if (string.Compare(name, \"FOOT\", true) == 0 ||\r\n               string.Compare(name, \"FEET\", true) == 0)\r\n            {\r\n               UnitSystem = UnitSystem.Imperial;\r\n               Unit = UnitTypeId.FeetFractionalInches;\r\n               Symbol = new ForgeTypeId();\r\n            }\r\n            else if (string.Compare(name, \"INCH\", true) == 0 ||\r\n               string.Compare(name, \"INCHES\", true) == 0)\r\n            {\r\n               UnitSystem = UnitSystem.Imperial;\r\n               Unit = UnitTypeId.FractionalInches;\r\n               Symbol = new ForgeTypeId();\r\n            }\r\n         }\r\n         else if (string.Compare(unitType, \"PLANEANGLEUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Angle;\r\n            string name = IFCAnyHandleUtil.GetStringAttribute(convUnitHnd, \"Name\");\r\n\r\n            if (string.Compare(name, \"GRAD\", true) == 0 ||\r\n               string.Compare(name, \"GRADIAN\", true) == 0 ||\r\n                string.Compare(name, \"GRADS\", true) == 0 ||\r\n               string.Compare(name, \"GRADIANS\", true) == 0)\r\n            {\r\n               UnitSystem = UnitSystem.Metric;\r\n               Unit = UnitTypeId.Gradians;\r\n               Symbol = SymbolTypeId.Grad;\r\n            }\r\n            else if (string.Compare(name, \"DEGREE\", true) == 0 ||\r\n               string.Compare(name, \"DEGREES\", true) == 0)\r\n            {\r\n               UnitSystem = UnitSystem.Imperial;\r\n               Unit = UnitTypeId.Degrees;\r\n               Symbol = SymbolTypeId.Degree;\r\n            }\r\n         }\r\n         else if (string.Compare(unitType, \"AREAUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Area;\r\n            string name = IFCAnyHandleUtil.GetStringAttribute(convUnitHnd, \"Name\");\r\n\r\n            if (string.Compare(name, \"SQUARE FOOT\", true) == 0 ||\r\n               string.Compare(name, \"SQUARE_FOOT\", true) == 0 ||\r\n               string.Compare(name, \"SQUARE FEET\", true) == 0 ||\r\n               string.Compare(name, \"SQUARE_FEET\", true) == 0)\r\n            {\r\n               UnitSystem = UnitSystem.Imperial;\r\n               Unit = UnitTypeId.SquareFeet;\r\n               Symbol = SymbolTypeId.FtSup2;\r\n            }\r\n         }\r\n         else if (string.Compare(unitType, \"VOLUMEUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.Volume;\r\n            string name = IFCAnyHandleUtil.GetStringAttribute(convUnitHnd, \"Name\");\r\n\r\n            if (string.Compare(name, \"CUBIC FOOT\", true) == 0 ||\r\n               string.Compare(name, \"CUBIC_FOOT\", true) == 0 ||\r\n               string.Compare(name, \"CUBIC FEET\", true) == 0 ||\r\n               string.Compare(name, \"CUBIC_FEET\", true) == 0)\r\n            {\r\n               UnitSystem = UnitSystem.Imperial;\r\n               Unit = UnitTypeId.CubicFeet;\r\n               Symbol = SymbolTypeId.FtSup3;\r\n            }\r\n         }\r\n         else if (string.Compare(unitType, \"THERMODYNAMICMEASUREUNIT\", true) == 0)\r\n         {\r\n            Spec = SpecTypeId.HvacTemperature;\r\n            string name = IFCAnyHandleUtil.GetStringAttribute(convUnitHnd, \"Name\");\r\n\r\n            if ((string.Compare(name, \"F\", true) == 0) ||\r\n               (string.Compare(name, \"FAHRENHEIT\", true) == 0))\r\n            {\r\n               UnitSystem = UnitSystem.Imperial;\r\n               Unit = UnitTypeId.Fahrenheit;\r\n               Symbol = SymbolTypeId.DegreeF;\r\n            }\r\n            else if ((string.Compare(name, \"R\", true) == 0) ||\r\n               (string.Compare(name, \"RANKINE\", true) == 0))\r\n            {\r\n               UnitSystem = UnitSystem.Imperial;\r\n               Unit = UnitTypeId.Rankine;\r\n               Symbol = SymbolTypeId.DegreeR;\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes a unit.\r\n      /// </summary>\r\n      /// <param name=\"unitHnd\">The unit handle.</param>\r\n      /// <returns>The Unit object.</returns>\r\n      public static IFCUnit ProcessIFCUnit(IFCAnyHandle unitHnd)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(unitHnd))\r\n         {\r\n            //LOG: ERROR: IfcUnit is null or has no value.\r\n            return null;\r\n         }\r\n\r\n         try\r\n         {\r\n            IFCEntity ifcUnit;\r\n            if (!IFCImportFile.TheFile.EntityMap.TryGetValue(unitHnd.StepId, out ifcUnit))\r\n               ifcUnit = new IFCUnit(unitHnd);\r\n            return (ifcUnit as IFCUnit);\r\n         }\r\n         catch (InvalidOperationException ex)\r\n         {\r\n            Importer.TheLog.LogError(unitHnd.StepId, ex.Message, false);\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Constructs a default IFCUnit of a specific type.\r\n      /// </summary>\r\n      /// <param name=\"unitType\">The unit type.</param>\r\n      /// <param name=\"unitSystem\">The unit system.</param>\r\n      /// <param name=\"unitName\">The unit name.</param>\r\n      /// <remarks>This is only intended to create a unit container for units that are necessary for the file,\r\n      /// but are not found in the file.  It should not be used for IfcUnit entities in the file.</remarks>\r\n      public static IFCUnit ProcessIFCDefaultUnit(ForgeTypeId specTypeId, UnitSystem unitSystem, ForgeTypeId unitTypeId, double? scaleFactor)\r\n      {\r\n         IFCUnit unit = new IFCUnit();\r\n\r\n         unit.Spec = specTypeId;\r\n         unit.Unit = unitTypeId;\r\n         unit.UnitSystem = unitSystem;\r\n         if (scaleFactor.HasValue)\r\n            unit.ScaleFactor = scaleFactor.Value;\r\n         unit.OffsetFactor = 0.0;\r\n\r\n         return unit;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCUnits.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Provides methods to process IFC units.\r\n   /// </summary>\r\n   public class IFCUnits\r\n   {\r\n      /// <summary>\r\n      /// The IFC project units.\r\n      /// </summary>\r\n      Dictionary<ForgeTypeId, IFCUnit> ProjectUnitsDictionary { get; set; }  = new Dictionary<ForgeTypeId, IFCUnit>();\r\n\r\n      /// <summary>\r\n      /// Gets the unit of a type.\r\n      /// </summary>\r\n      /// <param name=\"specTypeId\">Identifier of the spec.</param>\r\n      /// <returns>The Unit object.</returns>\r\n      public IFCUnit GetIFCProjectUnit(ForgeTypeId specTypeId)\r\n      {\r\n         IFCUnit projectUnit = null;\r\n         if (ProjectUnitsDictionary.TryGetValue(specTypeId, out projectUnit))\r\n         {\r\n            return projectUnit;\r\n         }\r\n         else\r\n         {\r\n            //default units\r\n            if (specTypeId.Equals(SpecTypeId.Length))\r\n            {\r\n               IFCUnit unit = IFCUnit.ProcessIFCDefaultUnit(specTypeId, UnitSystem.Metric, UnitTypeId.Meters, 1.0 / 0.3048);\r\n               ProjectUnitsDictionary[specTypeId] = unit;\r\n               return unit;\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.Area))\r\n            {\r\n               IFCUnit projectLengthUnit = GetIFCProjectUnit(SpecTypeId.Length);\r\n\r\n               UnitSystem unitSystem = projectLengthUnit.UnitSystem;\r\n               ForgeTypeId unitName = unitSystem == UnitSystem.Metric ?\r\n                   UnitTypeId.SquareMeters : UnitTypeId.SquareFeet;\r\n               double scaleFactor = unitSystem == UnitSystem.Metric ?\r\n                   (1.0 / 0.3048) * (1.0 / 0.3048) : 1.0;\r\n\r\n               IFCUnit unit = IFCUnit.ProcessIFCDefaultUnit(specTypeId, unitSystem, unitName, scaleFactor);\r\n               ProjectUnitsDictionary[specTypeId] = unit;\r\n               return unit;\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.Volume))\r\n            {\r\n               IFCUnit projectLengthUnit = GetIFCProjectUnit(SpecTypeId.Length);\r\n\r\n               UnitSystem unitSystem = projectLengthUnit.UnitSystem;\r\n               ForgeTypeId unitName = unitSystem == UnitSystem.Metric ?\r\n                   UnitTypeId.CubicMeters : UnitTypeId.CubicFeet;\r\n               double scaleFactor = unitSystem == UnitSystem.Metric ?\r\n                   (1.0 / 0.3048) * (1.0 / 0.3048) * (1.0 / 0.3048) : 1.0;\r\n\r\n               IFCUnit unit = IFCUnit.ProcessIFCDefaultUnit(specTypeId, unitSystem, unitName, scaleFactor);\r\n               ProjectUnitsDictionary[specTypeId] = unit;\r\n               return unit;\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.Angle))\r\n            {\r\n               IFCUnit unit = IFCUnit.ProcessIFCDefaultUnit(specTypeId, UnitSystem.Metric, UnitTypeId.Degrees, Math.PI / 180);\r\n               ProjectUnitsDictionary[specTypeId] = unit;\r\n               return unit;\r\n            }\r\n            else if (specTypeId.Equals(SpecTypeId.HvacTemperature))\r\n            {\r\n               IFCUnit unit = IFCUnit.ProcessIFCDefaultUnit(specTypeId, UnitSystem.Metric, UnitTypeId.Kelvin, 1.0);\r\n               ProjectUnitsDictionary[specTypeId] = unit;\r\n               return unit;\r\n            }\r\n         }\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes a project unit.\r\n      /// </summary>\r\n      /// <param name=\"unitHnd\">The unit handle.</param>\r\n      /// <returns>The Unit object.</returns>\r\n      public IFCUnit ProcessIFCProjectUnit(IFCAnyHandle unitHnd)\r\n      {\r\n         IFCUnit unit = IFCUnit.ProcessIFCUnit(unitHnd);\r\n         if (unit != null)\r\n            ProjectUnitsDictionary[unit.Spec] = unit;\r\n\r\n         return unit;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCVertex.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents an IFCVertex entity\r\n   /// </summary>\r\n   public class IFCVertex : IFCTopologicalRepresentationItem\r\n   {\r\n      protected IFCVertex()\r\n      {\r\n      }\r\n\r\n      protected IFCVertex(IFCAnyHandle ifcVertex)\r\n      {\r\n         Process(ifcVertex);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcVertex)\r\n      {\r\n         base.Process(ifcVertex);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the coordinate of this vertex\r\n      /// </summary>\r\n      public virtual XYZ GetCoordinate()\r\n      {\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCVertex object from a handle of type IfcVertex.\r\n      /// </summary>\r\n      /// <param name=\"ifcFace\">The IFC handle.</param>\r\n      /// <returns>The IFCVertex object.</returns>\r\n      public static IFCVertex ProcessIFCVertex(IFCAnyHandle ifcVertex)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcVertex))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcVertex);\r\n            return null;\r\n         }\r\n\r\n         if (IFCAnyHandleUtil.IsValidSubTypeOf(ifcVertex, IFCEntityType.IfcVertexPoint))\r\n            return IFCVertexPoint.ProcessIFCVertexPoint(ifcVertex);\r\n\r\n         IFCEntity vertex;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcVertex.StepId, out vertex))\r\n            vertex = new IFCVertex(ifcVertex);\r\n         return (vertex as IFCVertex);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCVertexPoint.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Class that represents an IFCVertex entity\r\n   /// </summary>\r\n   public class IFCVertexPoint : IFCVertex\r\n   {\r\n      /// <summary>\r\n      /// The geometric point, which defines the position in geometric space of the vertex\r\n      /// </summary>\r\n      public XYZ VertexGeometry { get; set; } = null;\r\n\r\n      protected IFCVertexPoint()\r\n      {\r\n      }\r\n\r\n      protected IFCVertexPoint(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcVertexPoint)\r\n      {\r\n         base.Process(ifcVertexPoint);\r\n\r\n         IFCAnyHandle vertexGeometry = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcVertexPoint, \"VertexGeometry\", true);\r\n         XYZ unScaledVertexGeometry = IFCPoint.IFCPointToXYZ(vertexGeometry);\r\n         VertexGeometry = IFCUnitUtil.ScaleLength(unScaledVertexGeometry);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCVertexPoint object from a handle of type IfcVertexPoint.\r\n      /// </summary>\r\n      /// <param name=\"ifcVertexPoint\">The IFC handle.</param>\r\n      /// <returns>The IFCVertexPoint object.</returns>\r\n      public static IFCVertex ProcessIFCVertexPoint(IFCAnyHandle ifcVertexPoint)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcVertexPoint))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcVertexPoint);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity vertexPoint;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcVertexPoint.StepId, out vertexPoint))\r\n            vertexPoint = new IFCVertexPoint(ifcVertexPoint);\r\n         return (vertexPoint as IFCVertexPoint);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the coordinate of this vertex\r\n      /// </summary>\r\n      public override XYZ GetCoordinate()\r\n      {\r\n         return VertexGeometry;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCWindowLiningProperties.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcWindowLiningProperties\r\n   /// </summary>\r\n   public class IFCWindowLiningProperties : IFCDoorWindowPropertyBase\r\n   {\r\n      /// <summary>\r\n      /// The list of properties contained in IFCWindowLiningProperties.\r\n      /// </summary>\r\n      static IList<Tuple<string, ForgeTypeId, AllowedValues>> m_WindowLiningPropertyDescs = null;\r\n\r\n      /// <summary>\r\n      /// Processes IfcWindowLiningProperties attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcWindowLiningProperties\">The IfcWindowLiningProperties handle.</param>\r\n      protected IFCWindowLiningProperties(IFCAnyHandle ifcWindowLiningProperties)\r\n      {\r\n         Process(ifcWindowLiningProperties);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcWindowLiningProperties entity.\r\n      /// </summary>\r\n      /// <param name=\"ifcWindowLiningProperties\">The IfcWindowLiningProperties handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcWindowLiningProperties)\r\n      {\r\n         base.Process(ifcWindowLiningProperties);\r\n\r\n         if (m_WindowLiningPropertyDescs == null)\r\n         {\r\n            bool atLeastIfc4 = IFCImportFile.TheFile.SchemaVersionAtLeast(IFCSchemaVersion.IFC4Obsolete);\r\n            m_WindowLiningPropertyDescs = new List<Tuple<string, ForgeTypeId, AllowedValues>>();\r\n            m_WindowLiningPropertyDescs.Add(Tuple.Create(\"LiningDepth\", SpecTypeId.Length, AllowedValues.Positive));\r\n            m_WindowLiningPropertyDescs.Add(Tuple.Create(\"LiningThickness\", SpecTypeId.Length, atLeastIfc4 ? AllowedValues.NonNegative : AllowedValues.Positive));\r\n            m_WindowLiningPropertyDescs.Add(Tuple.Create(\"TransomThickness\", SpecTypeId.Length, atLeastIfc4 ? AllowedValues.NonNegative : AllowedValues.Positive));\r\n            m_WindowLiningPropertyDescs.Add(Tuple.Create(\"MullionThickness\", SpecTypeId.Length, atLeastIfc4 ? AllowedValues.NonNegative : AllowedValues.Positive));\r\n            m_WindowLiningPropertyDescs.Add(Tuple.Create(\"FirstTransomOffset\", SpecTypeId.Number, AllowedValues.NonNegative));\r\n            m_WindowLiningPropertyDescs.Add(Tuple.Create(\"SecondTransomOffset\", SpecTypeId.Number, AllowedValues.NonNegative));\r\n            m_WindowLiningPropertyDescs.Add(Tuple.Create(\"FirstMullionOffset\", SpecTypeId.Number, AllowedValues.NonNegative));\r\n            m_WindowLiningPropertyDescs.Add(Tuple.Create(\"SecondMullionOffset\", SpecTypeId.Number, AllowedValues.NonNegative));\r\n            if (atLeastIfc4)\r\n            {\r\n               m_WindowLiningPropertyDescs.Add(Tuple.Create(\"LiningOffset\", SpecTypeId.Length, AllowedValues.All));\r\n               m_WindowLiningPropertyDescs.Add(Tuple.Create(\"LiningToPanelOffsetX\", SpecTypeId.Length, AllowedValues.All));\r\n               m_WindowLiningPropertyDescs.Add(Tuple.Create(\"LiningToPanelOffsetY\", SpecTypeId.Length, AllowedValues.All));\r\n            }\r\n         }\r\n\r\n         foreach (Tuple<string, ForgeTypeId, AllowedValues> propertyDesc in m_WindowLiningPropertyDescs)\r\n         {\r\n            // Default is nonsense value.\r\n            double currPropertyValue = (propertyDesc.Item2 == SpecTypeId.Number) ?\r\n                  IFCImportHandleUtil.GetOptionalDoubleAttribute(ifcWindowLiningProperties, propertyDesc.Item1, -1e+30) :\r\n                  IFCImportHandleUtil.GetOptionalScaledLengthAttribute(ifcWindowLiningProperties, propertyDesc.Item1, -1e+30);\r\n\r\n            if (!MathUtil.IsAlmostEqual(currPropertyValue, -1e+30))\r\n               DoubleProperties[propertyDesc] = currPropertyValue;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcWindowLiningProperties set.\r\n      /// </summary>\r\n      /// <param name=\"ifcWindowLiningProperties\">The IfcWindowLiningProperties object.</param>\r\n      /// <returns>The IFCWindowLiningProperties object.</returns>\r\n      public static IFCWindowLiningProperties ProcessIFCWindowLiningProperties(IFCAnyHandle ifcWindowLiningProperties)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcWindowLiningProperties))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcWindowLiningProperties);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity windowLiningProperties;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcWindowLiningProperties.StepId, out windowLiningProperties))\r\n            return (windowLiningProperties as IFCWindowLiningProperties);\r\n\r\n         return new IFCWindowLiningProperties(ifcWindowLiningProperties);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCWindowPanelProperties.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcWindowPanelProperties\r\n   /// </summary>\r\n   public class IFCWindowPanelProperties : IFCDoorWindowPropertyBase\r\n   {\r\n      int PanelNumber { get; set; }\r\n\r\n      /// <summary>\r\n      /// Processes IfcWindowPanelProperties attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcWindowPanelProperties\">The IfcWindowPanelProperties handle.</param>\r\n      /// <param name=\"panelNumber\">The panel number.</param>\r\n      protected IFCWindowPanelProperties(IFCAnyHandle ifcWindowPanelProperties, int panelNumber)\r\n      {\r\n         PanelNumber = panelNumber;\r\n         Process(ifcWindowPanelProperties);\r\n      }\r\n\r\n      private string GeneratePropertyName(string originalPropertyName)\r\n      {\r\n         if (PanelNumber <= 1)\r\n            return originalPropertyName;\r\n         else\r\n            return originalPropertyName + \" \" + PanelNumber;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcWindowPanelProperties entity.\r\n      /// </summary>\r\n      /// <param name=\"ifcWindowPanelProperties\">The IfcWindowPanelProperties handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcWindowPanelProperties)\r\n      {\r\n         base.Process(ifcWindowPanelProperties);\r\n\r\n         string currPropertyValueString = IFCAnyHandleUtil.GetEnumerationAttribute(ifcWindowPanelProperties, \"OperationType\");\r\n         if (!string.IsNullOrEmpty(currPropertyValueString))\r\n            StringProperties[GeneratePropertyName(\"OperationType\")] = currPropertyValueString;\r\n\r\n         currPropertyValueString = IFCAnyHandleUtil.GetEnumerationAttribute(ifcWindowPanelProperties, \"PanelPosition\");\r\n         if (!string.IsNullOrEmpty(currPropertyValueString))\r\n            StringProperties[GeneratePropertyName(\"PanelPosition\")] = currPropertyValueString;\r\n\r\n         double currPropertyValue = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(ifcWindowPanelProperties, \"FrameDepth\", -1e+30);\r\n         if (!MathUtil.IsAlmostEqual(currPropertyValue, -1e+30))\r\n            DoubleProperties[Tuple.Create(GeneratePropertyName(\"FrameDepth\"),\r\n                SpecTypeId.Length, AllowedValues.Positive)] = currPropertyValue;\r\n\r\n         currPropertyValue = IFCImportHandleUtil.GetOptionalScaledLengthAttribute(ifcWindowPanelProperties, \"FrameThickness\", -1e+30);\r\n         if (!MathUtil.IsAlmostEqual(currPropertyValue, -1e+30))\r\n            DoubleProperties[Tuple.Create(GeneratePropertyName(\"FrameThickness\"),\r\n                SpecTypeId.Length, AllowedValues.Positive)] = currPropertyValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes an IfcWindowPanelProperties set.\r\n      /// </summary>\r\n      /// <param name=\"ifcWindowPanelProperties\">The IfcWindowPanelProperties object.</param>\r\n      /// <param name=\"panelNumber\">The panel number, based on the containing IfcObject.</param>\r\n      /// <returns>The IFCWindowPanelProperties object.</returns>\r\n      public static IFCWindowPanelProperties ProcessIFCWindowPanelProperties(IFCAnyHandle ifcWindowPanelProperties, int panelNumber)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcWindowPanelProperties))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcWindowPanelProperties);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity windowPanelProperties;\r\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcWindowPanelProperties.StepId, out windowPanelProperties))\r\n            return (windowPanelProperties as IFCWindowPanelProperties);\r\n\r\n         return new IFCWindowPanelProperties(ifcWindowPanelProperties, panelNumber);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IFCZone.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Represents an IfcZone.\r\n   /// </summary>\r\n   public class IFCZone : IFCGroup\r\n   {\r\n      /// <summary>\r\n      /// Processes IfcZone attributes.\r\n      /// </summary>\r\n      /// <param name=\"ifcZone\">The IfcZone handle.</param>\r\n      protected override void Process(IFCAnyHandle ifcZone)\r\n      {\r\n         base.Process(ifcZone);\r\n      }\r\n\r\n      protected IFCZone()\r\n      {\r\n      }\r\n\r\n      protected IFCZone(IFCAnyHandle zone)\r\n      {\r\n         Process(zone);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcZone handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcZone\">The IfcZone handle.</param>\r\n      /// <returns>The IFCZone object.</returns>\r\n      public static IFCZone ProcessIFCZone(IFCAnyHandle ifcZone)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcZone))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcZone);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity cachedIFCZone;\r\n         IFCImportFile.TheFile.EntityMap.TryGetValue(ifcZone.StepId, out cachedIFCZone);\r\n         if (cachedIFCZone != null)\r\n            return cachedIFCZone as IFCZone;\r\n\r\n         return new IFCZone(ifcZone);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Indicates whether duplicate geometry should be created for IFCZone.\r\n      /// This is governed by an IFC Importer option:  CreateDuplicateZoneGeometry.\r\n      /// </summary>\r\n      /// <returns>True if creating duplicate geometry option set, False otherwise.</returns>\r\n      public override bool ContainerDuplicatesGeometry() { return Importer.TheOptions.CreateDuplicateZoneGeometry; }\r\n\r\n      /// <summary>\r\n      /// Indicates which IFC entities should be used when creating duplicate geometry.\r\n      /// </summary>\r\n      /// <param name=\"entity\">An IFC entity for filtering.</param>\r\n      /// <returns>True if the IFC entity geometry should be duplicated, False otherwise.</returns>\r\n      public override bool ContainerFilteredEntity(IFCEntity entity)\r\n      {\r\n         if (entity == null)\r\n            return false;\r\n\r\n         return (entity.EntityType == IFCEntityType.IfcSpace) || (entity.EntityType == IFCEntityType.IfcSpatialZone);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Indicates that IfcZone can act as a container.  This may create another DirectShape Element, depending on circumstances.\r\n      /// </summary>\r\n      /// <returns>True if an IfcZone indicated that it can be a container.</returns>\r\n      public override bool CanContainRelatedEntities => true;\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IIFCMaterialSelect.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   /// <summary>\r\n   /// Interface that contains shared functions for IfcMaterialSelect\r\n   /// </summary>\r\n   public interface IIFCMaterialSelect\r\n   {\r\n      /// <summary>\r\n      /// Return the material list for this IFCMaterialSelect.\r\n      /// </summary>\r\n      IList<IFCMaterial> GetMaterials();\r\n\r\n      /// <summary>\r\n      /// Create the elements associated with the IFCMaterialSelect.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      void Create(Document doc);\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IfcMaterialProfileWithOffsets.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Utility;\r\nusing Revit.IFC.Import.Properties;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCMaterialProfileWithOffsets : IFCMaterialProfile, IIFCMaterialSelect\r\n   {\r\n      IList<double> m_OffsetValues = null;\r\n\r\n      public IList<double> OffsetValues\r\n      {\r\n         get { return m_OffsetValues; }\r\n         protected set { m_OffsetValues = value; }\r\n      }\r\n\r\n      protected IFCMaterialProfileWithOffsets()\r\n      {\r\n      }\r\n\r\n      protected IFCMaterialProfileWithOffsets(IFCAnyHandle ifcMaterialProfileWithOffsets)\r\n      {\r\n         Process(ifcMaterialProfileWithOffsets);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcMaterialProfileWithOffsets)\r\n      {\r\n         base.Process(ifcMaterialProfileWithOffsets);\r\n\r\n         OffsetValues = IFCAnyHandleUtil.GetAggregateDoubleAttribute<List<double>>(ifcMaterialProfileWithOffsets, \"OffsetValues\");\r\n      }\r\n\r\n      public static IFCMaterialProfileWithOffsets ProcessIFCMaterialProfileWithOffsets(IFCAnyHandle ifcMaterialProfileWithOffsets)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcMaterialProfileWithOffsets))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcMaterialProfileWithOffsets);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity materialProfileWithOffsets;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcMaterialProfileWithOffsets.StepId, out materialProfileWithOffsets))\r\n            materialProfileWithOffsets = new IFCMaterialProfileWithOffsets(ifcMaterialProfileWithOffsets);\r\n         return (materialProfileWithOffsets as IFCMaterialProfileWithOffsets);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IfcPolygonalFaceSet.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCPolygonalFaceSet : IFCTessellatedFaceSet\r\n   {\r\n      bool? m_Closed = null;\r\n      IList<int> m_PnIndex = null;\r\n      IList<IFCIndexedPolygonalFace> m_Faces = null;\r\n\r\n      protected IFCPolygonalFaceSet()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Closed attribute\r\n      /// </summary>\r\n      public bool? Closed\r\n      {\r\n         get { return m_Closed; }\r\n         protected set { m_Closed = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// PnIndex attribute\r\n      /// </summary>\r\n      public IList<int> PnIndex\r\n      {\r\n         get { return m_PnIndex; }\r\n         protected set { m_PnIndex = value; }\r\n      }\r\n\r\n      public IList<IFCIndexedPolygonalFace> Faces\r\n      {\r\n         get { return m_Faces; }\r\n         protected set { m_Faces = value; }\r\n      }\r\n\r\n      protected IFCPolygonalFaceSet(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcPolygonalFaceSet)\r\n      {\r\n         base.Process(ifcPolygonalFaceSet);\r\n\r\n         bool? closed = IFCAnyHandleUtil.GetBooleanAttribute(ifcPolygonalFaceSet, \"Closed\");\r\n         if (closed != null)\r\n            Closed = closed;\r\n\r\n         IList<IFCAnyHandle> facesHnds = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcPolygonalFaceSet, \"Faces\");\r\n         if (facesHnds != null)\r\n         {\r\n            if (facesHnds.Count > 0)\r\n               Faces = new List<IFCIndexedPolygonalFace>();\r\n            foreach (IFCAnyHandle facesHnd in facesHnds)\r\n            {\r\n               Faces.Add(IFCIndexedPolygonalFace.ProcessIFCIndexedPolygonalFace(facesHnd));\r\n            }\r\n         }\r\n      }\r\n\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         using (BuilderScope bs = shapeEditScope.InitializeBuilder(IFCShapeBuilderType.TessellatedShapeBuilder))\r\n         {\r\n            base.CreateShapeInternal(shapeEditScope, scaledLcs, guid);\r\n\r\n            TessellatedShapeBuilderScope tsBuilderScope = bs as TessellatedShapeBuilderScope;\r\n\r\n            tsBuilderScope.StartCollectingFaceSet();\r\n\r\n            // Create the face set from IFCIndexedPolygonalFace\r\n            foreach (IFCIndexedPolygonalFace face in Faces)\r\n            {\r\n               // TODO: Consider adding ability to triangulate here.\r\n               tsBuilderScope.StartCollectingFace(GetMaterialElementId(shapeEditScope), false);\r\n\r\n               IList<XYZ> loopVertices = new List<XYZ>();\r\n               foreach (int vertInd in face.CoordIndex)\r\n               {\r\n                  int actualVIdx = vertInd - 1;       // IFC starts the list position at 1\r\n                  if (PnIndex != null)\r\n                     actualVIdx = PnIndex[actualVIdx] - 1;\r\n                  XYZ vertex = Coordinates.CoordList[actualVIdx];\r\n                  loopVertices.Add(scaledLcs.OfPoint(vertex));\r\n               }\r\n               List<XYZ> validVertices;\r\n               IFCGeometryUtil.CheckAnyDistanceVerticesWithinTolerance(Id, shapeEditScope, loopVertices, out validVertices);\r\n\r\n               bool bPotentiallyAbortFace = false;\r\n               if (!tsBuilderScope.AddLoopVertices(Id, validVertices))\r\n                  bPotentiallyAbortFace = true;\r\n\r\n               // Handle holes\r\n               if (face.InnerCoordIndices != null)\r\n               {\r\n                  foreach (IList<int> innerLoop in face.InnerCoordIndices)\r\n                  {\r\n                     IList<XYZ> innerLoopVertices = new List<XYZ>();\r\n                     foreach (int innerVerIdx in innerLoop)\r\n                     {\r\n                        int actualVIdx = innerVerIdx - 1;\r\n                        if (PnIndex != null)\r\n                           actualVIdx = PnIndex[actualVIdx] - 1;\r\n                        XYZ vertex = Coordinates.CoordList[actualVIdx];\r\n                        // add vertex to the loop\r\n                        innerLoopVertices.Add(scaledLcs.OfPoint(vertex));\r\n                     }\r\n                     List<XYZ> validInnerV;\r\n                     IFCGeometryUtil.CheckAnyDistanceVerticesWithinTolerance(Id, shapeEditScope, innerLoopVertices, out validInnerV);\r\n\r\n                     if (!tsBuilderScope.AddLoopVertices(Id, validInnerV))\r\n                        bPotentiallyAbortFace = true;\r\n                  }\r\n               }\r\n\r\n               tsBuilderScope.StopCollectingFace(!bPotentiallyAbortFace, false);\r\n            }\r\n\r\n            IList<GeometryObject> createdGeometries = tsBuilderScope.CreateGeometry(guid);\r\n            if (createdGeometries != null)\r\n            {\r\n               foreach (GeometryObject createdGeometry in createdGeometries)\r\n               {\r\n                  shapeEditScope.AddGeometry(IFCSolidInfo.Create(Id, createdGeometry));\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Start processing the IfcPolygonalSet\r\n      /// </summary>\r\n      /// <param name=\"ifcPolygonalFaceSet\">the handle</param>\r\n      /// <returns></returns>\r\n      public static IFCPolygonalFaceSet ProcessIFCPolygonalFaceSet(IFCAnyHandle ifcPolygonalFaceSet)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPolygonalFaceSet))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPolygonalFaceSet);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity polygonalFaceSet;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcPolygonalFaceSet.StepId, out polygonalFaceSet))\r\n            polygonalFaceSet = new IFCPolygonalFaceSet(ifcPolygonalFaceSet);\r\n         return (polygonalFaceSet as IFCPolygonalFaceSet);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Data/IfcTessellatedFaceSet.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\nusing Revit.IFC.Import.Properties;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Data\r\n{\r\n   public class IFCTessellatedFaceSet : IFCRepresentationItem\r\n   {\r\n      IFCCartesianPointList m_Coordinates = null;\r\n\r\n      /// <summary>\r\n      /// Coordinates attribute. This is an IFCCartesianPointList.\r\n      /// </summary>\r\n      public IFCCartesianPointList Coordinates\r\n      {\r\n         get { return m_Coordinates; }\r\n         protected set { m_Coordinates = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Indexed Colour Map for TesselatedFaceSet (one colour per face).\r\n      /// </summary>\r\n      public IFCIndexedColourMap HasColours { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Color to use in Material.  Created in Process() and used in CreateShapeInternal()\r\n      /// </summary>\r\n      protected Color MaterialColor { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Material Created during CreateShapeInternal for applying the MaterialColor to this Face Set if needed.\r\n      /// If the shapeEditScope already contains a MeterialId then that should be used.\r\n      /// </summary>\r\n      protected ElementId MaterialId { get; set; } = ElementId.InvalidElementId;\r\n\r\n      protected IFCTessellatedFaceSet()\r\n      {\r\n      }\r\n\r\n      protected IFCTessellatedFaceSet(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Process IfcTriangulatedFaceSet instance\r\n      /// </summary>\r\n      /// <param name=\"ifcTessellatedFaceSet\">the handle</param>\r\n      protected override void Process(IFCAnyHandle ifcTessellatedFaceSet)\r\n      {\r\n         base.Process(ifcTessellatedFaceSet);\r\n\r\n         // Process the IFCCartesianPointList\r\n         IFCAnyHandle coordinates = IFCImportHandleUtil.GetRequiredInstanceAttribute(ifcTessellatedFaceSet, \"Coordinates\", true);\r\n         if (IFCAnyHandleUtil.IsSubTypeOf(coordinates, IFCEntityType.IfcCartesianPointList))\r\n         {\r\n            IFCCartesianPointList coordList = IFCCartesianPointList.ProcessIFCCartesianPointList(coordinates);\r\n            if (coordList != null)\r\n               Coordinates = coordList;\r\n         }\r\n\r\n         // Process IfcIndexedColourMap.  There is a maximum of one IfcIndexedColourMap per IfcTesselatedFaceSet (even though it is stored as a SET).\r\n         //\r\n         HashSet<IFCAnyHandle> hasColoursSet = IFCAnyHandleUtil.GetAggregateInstanceAttribute<HashSet<IFCAnyHandle>>(ifcTessellatedFaceSet, \"HasColours\");\r\n         if (hasColoursSet?.Count == 1)\r\n         {\r\n            IFCAnyHandle ifcIndexedColourMap = hasColoursSet.First();\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcIndexedColourMap))\r\n            {\r\n               Importer.TheLog.LogNullError(IFCEntityType.IfcIndexedColourMap);\r\n               return;\r\n            }\r\n\r\n            HasColours = IFCIndexedColourMap.ProcessIFCIndexedColourMap(ifcIndexedColourMap);\r\n\r\n            if ((StyledByItem == null) && (LayerAssignment == null) && (HasColours != null))\r\n            {\r\n               // Currently we only support one color per Mesh, so just use the first color.\r\n               //\r\n               IFCColourRgbList ifcColourRgbList = HasColours.Colours;\r\n               IList<int> colourIndices = HasColours?.ColourIndex;\r\n               if ((ifcColourRgbList != null) && (colourIndices?.Count > 1))\r\n               {\r\n                  MaterialColor = ifcColourRgbList.GetColor(colourIndices[0]);\r\n\r\n                  // Check for more than one unique colour and warn if found.\r\n                  // Simple case:  there is only one colour in IFCColourRgbList\r\n                  //\r\n                  if (ifcColourRgbList.ColourList?.Count > 1)\r\n                  {\r\n                     List<int> uniqueColorValues = colourIndices.Distinct().ToList();\r\n                     if (uniqueColorValues.Count > 1)\r\n                     {\r\n                        Importer.TheLog.LogWarning(Id, \"Multiple Colour Indices unsupported in IFCTesselatedFaceSet at this time.\", false);\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns a Material ElementId for the primary Color in the IFCColourRgbList.\r\n      /// This retrieves the Material ElementId from the Material Cache first.\r\n      /// Matching is done primarily on the RGB Values in the Material Color using a Default Material name (\"IFCTesselatedFaceSet\").\r\n      /// If that doesn't work, we create a new Material.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">Edit Scope used in creating the IFCTesselatedFaceSet.</param>\r\n      /// <returns></returns>\r\n      public override ElementId GetMaterialElementId (IFCImportShapeEditScope shapeEditScope)\r\n      {\r\n         // If we've already called this and set the Material Id, then just use that.\r\n         //\r\n         if (MaterialId != ElementId.InvalidElementId)\r\n            return MaterialId;\r\n\r\n         // If base class already has a Material, use that.  Also set the MaterialId of this class to avoid unneeded processing.\r\n         //\r\n         ElementId materialId = base.GetMaterialElementId(shapeEditScope);\r\n         if (materialId != ElementId.InvalidElementId)\r\n         {\r\n            MaterialId = materialId;\r\n            return MaterialId;\r\n         }\r\n\r\n         // Otherwise, create a new Material representing the MaterialColor for this object (used cached one if it exists).\r\n         //\r\n         if (MaterialId == ElementId.InvalidElementId)\r\n         {\r\n            IFCMaterialInfo newMaterialInfo = IFCMaterialInfo.Create(MaterialColor, null, null, null, null);\r\n            MaterialId = IFCMaterial.CreateMaterialElem(shapeEditScope.Document, Id, String.Format(Resources.IFCDefaultMaterialName, Id), newMaterialInfo);\r\n         }\r\n         return MaterialId;\r\n      }\r\n\r\n      protected override void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Start processing the IfcTriangulatedFaceSet\r\n      /// </summary>\r\n      /// <param name=\"ifcTriangulatedFaceSet\">the handle</param>\r\n      /// <returns></returns>\r\n      public static IFCTessellatedFaceSet ProcessIFCTessellatedFaceSet(IFCAnyHandle ifcTessellatedFaceSet)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcTessellatedFaceSet))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcTessellatedFaceSet);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity tessellatedFaceSet;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcTessellatedFaceSet.StepId, out tessellatedFaceSet))\r\n            tessellatedFaceSet = new IFCTessellatedFaceSet(ifcTessellatedFaceSet);\r\n         return (tessellatedFaceSet as IFCTessellatedFaceSet);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Enums/IFCEnums.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Data;\r\n\r\n// NOTE: Most of this is a copy of Revit.IFC.Export.Enums.  The intention is to move this to Revit.IFC.Common.\r\nnamespace Revit.IFC.Import.Enums\r\n{\r\n   /// <summary>\r\n   /// Utility functions for parsing enums.  Used for import.\r\n   /// </summary>\r\n   public static class IFCEnums\r\n   {\r\n      private static TEnum? GetSafeEnumerationAttributeBase<TEnum>(IFCAnyHandle hnd, string fieldName, TEnum? defaultVal) where TEnum : struct\r\n      {\r\n         TEnum? enumVal = defaultVal;\r\n\r\n         if (!IFCAnyHandleUtil.IsNullOrHasNoValue(hnd) && !string.IsNullOrWhiteSpace(fieldName))\r\n         {\r\n            string hndAsString = IFCAnyHandleUtil.GetEnumerationAttribute(hnd, fieldName);\r\n            if (hndAsString != null)\r\n            {\r\n               try\r\n               {\r\n                  enumVal = (TEnum)Enum.Parse(typeof(TEnum), hndAsString, true);\r\n               }\r\n               catch\r\n               {\r\n                  string warningVal = \"Invalid enumeration value for \" + enumVal.GetType().ToString() + \": \" + hndAsString +\r\n                      \", defaulting to: \" + defaultVal.ToString();\r\n                  Importer.TheLog.LogWarning(hnd.Id, warningVal, false);\r\n                  enumVal = defaultVal;\r\n               }\r\n            }\r\n         }\r\n\r\n         return enumVal;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get an enumarated value from a field of an IFC handle, if it exists.\r\n      /// </summary>\r\n      /// <typeparam name=\"TEnum\">The Enumeration type.</typeparam>\r\n      /// <param name=\"hnd\">The IFC handle.</param>\r\n      /// <param name=\"fieldName\">The field name.</param>\r\n      /// <returns>The appropriate enumeration value, or null if it doesn't exist.</returns>\r\n      public static TEnum? GetSafeEnumerationAttribute<TEnum>(IFCAnyHandle hnd, string fieldName) where TEnum : struct\r\n      {\r\n         return GetSafeEnumerationAttributeBase<TEnum>(hnd, fieldName, null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get an enumarated value from a field of an IFC handle, if it exists, or a default value if it does not.\r\n      /// </summary>\r\n      /// <typeparam name=\"TEnum\">The Enumeration type.</typeparam>\r\n      /// <param name=\"hnd\">The IFC handle.</param>\r\n      /// <param name=\"fieldName\">The field name.</param>\r\n      /// <param name=\"defaultVal\">The default value for the enumeration.</param>\r\n      /// <returns>The appropriate enumeration value.</returns>\r\n      public static TEnum GetSafeEnumerationAttribute<TEnum>(IFCAnyHandle hnd, string fieldName, TEnum defaultVal) where TEnum : struct\r\n      {\r\n         return GetSafeEnumerationAttributeBase<TEnum>(hnd, fieldName, defaultVal).Value;\r\n      }\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic configuration of the window type in terms of the number of window panels and the subdivision of the total window.\r\n   /// </summary>\r\n   public enum IFCWindowStyleOperation\r\n   {\r\n      Single_Panel,\r\n      Double_Panel_Vertical,\r\n      Double_Panel_Horizontal,\r\n      Triple_Panel_Vertical,\r\n      Triple_Panel_Bottom,\r\n      Triple_Panel_Top,\r\n      Triple_Panel_Left,\r\n      Triple_Panel_Right,\r\n      Triple_Panel_Horizontal,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic types of construction of windows.\r\n   /// </summary>\r\n   public enum IFCWindowStyleConstruction\r\n   {\r\n      Aluminium,\r\n      High_Grade_Steel,\r\n      Steel,\r\n      Wood,\r\n      Aluminium_Wood,\r\n      Plastic,\r\n      Other_Construction,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic configuration of the window type in terms of the location of window panels.\r\n   /// </summary>\r\n   public enum IFCWindowPanelPosition\r\n   {\r\n      Left,\r\n      Middle,\r\n      Right,\r\n      Bottom,\r\n      Top,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic ways to describe how window panels operate. \r\n   /// </summary>\r\n   public enum IFCWindowPanelOperation\r\n   {\r\n      SideHungRightHand,\r\n      SideHungLeftHand,\r\n      TiltAndTurnRightHand,\r\n      TiltAndTurnLeftHand,\r\n      TopHung,\r\n      BottomHung,\r\n      PivotHorizontal,\r\n      PivotVertical,\r\n      SlidingHorizontal,\r\n      SlidingVertical,\r\n      RemovableCasement,\r\n      FixedCasement,\r\n      OtherOperation,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Determines the direction of the text characters in respect to each other.\r\n   /// </summary>\r\n   public enum IFCTextPath\r\n   {\r\n      Left,\r\n      Right,\r\n      Up,\r\n      Down\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines a list of commonly shared property set definitions of a slab and an optional set of product representations.\r\n   /// </summary>\r\n   public enum IFCSlabType\r\n   {\r\n      Floor,\r\n      Roof,\r\n      Landing,\r\n      BaseSlab,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different types of spaces or space boundaries in terms of either being inside the building or outside the building.\r\n   /// </summary>\r\n   public enum IFCInternalOrExternal\r\n   {\r\n      Internal,\r\n      External,\r\n      NotDefined\r\n   }\r\n\r\n   public enum IFCSpaceType\r\n   {\r\n      Space,\r\n      Parking,\r\n      Gfa,\r\n      Internal,\r\n      External,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines Predefined Type for IFCDistributionSystems.\r\n   /// </summary>\r\n   public enum IFCDistributionSystemEnum\r\n   {\r\n      AirConditioning,\r\n      Audiovisual,\r\n      Chemical,\r\n      ChilledWater,\r\n      Communication,\r\n      Compressedair,\r\n      CondenserWater,\r\n      Control,\r\n      Conveying,\r\n      Data,\r\n      Disposal,\r\n      DomesticcoldWater,\r\n      DomestichotWater,\r\n      Drainage,\r\n      Earthing,\r\n      Electrical,\r\n      Electroacoustic,\r\n      Exhaust,\r\n      Fireprotection,\r\n      Fuel,\r\n      Gas,\r\n      Hazardous,\r\n      Heating,\r\n      Lighting,\r\n      LightningProtection,\r\n      MunicipalSolidWaste,\r\n      Oil,\r\n      Operational,\r\n      PowerGeneration,\r\n      RainWater,\r\n      Refrigeration,\r\n      Security,\r\n      Sewage,\r\n      Signal,\r\n      Stormwater,\r\n      Telephone,\r\n      Tv,\r\n      Vacuum,\r\n      Vent,\r\n      Ventilation,\r\n      WasteWater,\r\n      WaterSupply,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different types of space boundaries in terms of its physical manifestation.\r\n   /// </summary>\r\n   public enum IFCPhysicalOrVirtual\r\n   {\r\n      Physical,\r\n      Virtual,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration denoting whether sense of direction is positive or negative along the given axis.\r\n   /// </summary>\r\n   public enum IFCDirectionSense\r\n   {\r\n      Positive,\r\n      Negative\r\n   }\r\n\r\n   /// <summary>\r\n   /// Identification of the axis of element geometry, denoting the layer set thickness direction, or direction of layer offsets.\r\n   /// </summary>\r\n   public enum IFCLayerSetDirection\r\n   {\r\n      Axis1,\r\n      Axis2,\r\n      Axis3\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the various representation types that can be semantically distinguished.\r\n   /// </summary>\r\n   public enum IFCGeometricProjection\r\n   {\r\n      Graph_View,\r\n      Sketch_View,\r\n      Model_View,\r\n      Plan_View,\r\n      Reflected_Plan_View,\r\n      Section_View,\r\n      Elevation_View,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the generic footing type.\r\n   /// </summary>\r\n   public enum IFCFootingType\r\n   {\r\n      Footing_Beam,\r\n      Pad_Footing,\r\n      Pile_Cap,\r\n      Strip_Footing,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic types of construction of doors.\r\n   /// </summary>\r\n   public enum IFCDoorStyleConstruction\r\n   {\r\n      Aluminium,\r\n      High_Grade_Steel,\r\n      Steel,\r\n      Wood,\r\n      Aluminium_Wood,\r\n      Aluminium_Plastic,\r\n      Plastic,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic ways to describe how doors operate. \r\n   /// </summary>\r\n   public enum IFCDoorStyleOperation\r\n   {\r\n      Single_Swing_Left,\r\n      Single_Swing_Right,\r\n      Double_Door_Single_Swing,\r\n      Double_Door_Single_Swing_Opposite_Left,\r\n      Double_Door_Single_Swing_Opposite_Right,\r\n      Double_Swing_Left,\r\n      Double_Swing_Right,\r\n      Double_Door_Double_Swing,\r\n      Sliding_To_Left,\r\n      Sliding_To_Right,\r\n      Double_Door_Sliding,\r\n      Folding_To_Left,\r\n      Folding_To_Right,\r\n      Double_Door_Folding,\r\n      Revolving,\r\n      RollingUp,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different predefined types of an IfcDoor or IfcDoorType object.\r\n   /// </summary>\r\n   public enum IFCDoorTypeEnum\r\n   {\r\n      Door,\r\n      Gate,\r\n      TrapDoor,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic ways to describe how doors operate. \r\n   /// </summary>\r\n   public enum IFCDoorTypeOperation\r\n   {\r\n      Single_Swing_Left,\r\n      Single_Swing_Right,\r\n      Double_Door_Single_Swing,\r\n      Double_Door_Single_Swing_Opposite_Left,\r\n      Double_Door_Single_Swing_Opposite_Right,\r\n      Double_Swing_Left,\r\n      Double_Swing_Right,\r\n      Double_Door_Double_Swing,\r\n      Sliding_To_Left,\r\n      Sliding_To_Right,\r\n      Double_Door_Sliding,\r\n      Folding_To_Left,\r\n      Folding_To_Right,\r\n      Double_Door_Folding,\r\n      Revolving,\r\n      RollingUp,\r\n      Swing_Fixed_Left,\r\n      Swing_Fixed_Right,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic ways to describe the location of a door panel within a door lining.\r\n   /// </summary>\r\n   public enum IFCDoorPanelPosition\r\n   {\r\n      Left,\r\n      Middle,\r\n      Right,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic ways how individual door panels operate. \r\n   /// </summary>\r\n   public enum IFCDoorPanelOperation\r\n   {\r\n      Swinging,\r\n      Double_Acting,\r\n      Sliding,\r\n      Folding,\r\n      Revolving,\r\n      RollingUp,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the flow direction at a connection point as either a Source, Sink, or both SourceAndSink.\r\n   /// </summary>\r\n   public enum IFCFlowDirection\r\n   {\r\n      Source,\r\n      Sink,\r\n      SourceAndSink,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining where the assembly is intended to take place, either in a factory or on the building site.\r\n   /// </summary>\r\n   public enum IFCAssemblyPlace\r\n   {\r\n      Site,\r\n      Factory,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines different types of standard assemblies.\r\n   /// </summary>\r\n   public enum IFCElementAssemblyType\r\n   {\r\n      Accessory_Assembly,\r\n      Arch,\r\n      Beam_Grid,\r\n      Braced_Frame,\r\n      Girder,\r\n      Reinforcement_Unit,\r\n      Rigid_Frame,\r\n      Slab_Field,\r\n      Truss,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of waste terminal that can be specified.\r\n   /// </summary>\r\n   public enum IFCWasteTerminalType\r\n   {\r\n      FloorTrap,\r\n      FloorWaste,\r\n      GullySump,\r\n      GullyTrap,\r\n      GreaseInterceptor,\r\n      OilInterceptor,\r\n      PetrolInterceptor,\r\n      RoofDrain,\r\n      WasteDisposalUnit,\r\n      WasteTrap,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of valve that can be specified.\r\n   /// </summary>\r\n   public enum IFCValveType\r\n   {\r\n      AirRelease,\r\n      AntiVacuum,\r\n      ChangeOver,\r\n      Check,\r\n      Commissioning,\r\n      Diverting,\r\n      DrawOffCock,\r\n      DoubleCheck,\r\n      DoubleRegulating,\r\n      Faucet,\r\n      Flushing,\r\n      GasCock,\r\n      GasTap,\r\n      Isolating,\r\n      Mixing,\r\n      PressureReducing,\r\n      PressureRelief,\r\n      Regulating,\r\n      SafetyCutoff,\r\n      SteamTrap,\r\n      StopCock,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the functional type of unitary equipment.\r\n   /// </summary>\r\n   public enum IFCUnitaryEquipmentType\r\n   {\r\n      AirHandler,\r\n      AirConditioningUnit,\r\n      SplitSystem,\r\n      RoofTopUnit,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of tube bundles.\r\n   /// </summary>\r\n   public enum IFCTubeBundleType\r\n   {\r\n      Finned,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Identifies primary transport element types.\r\n   /// </summary>\r\n   public enum IFCTransportElementType\r\n   {\r\n      Elevator,\r\n      Escalator,\r\n      MovingWalkWay,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// \r\n   /// </summary>\r\n   public enum IFCTransformerType\r\n   {\r\n      Current,\r\n      Frequency,\r\n      Voltage,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of transformer that can be specified.\r\n   /// </summary>\r\n   public enum IFCTankType\r\n   {\r\n      Preformed,\r\n      Sectional,\r\n      Expansion,\r\n      PressureVessel,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of switch that can be specified.\r\n   /// </summary>\r\n   public enum IFCSwitchingDeviceType\r\n   {\r\n      Contactor,\r\n      EmergencyStop,\r\n      Starter,\r\n      SwitchDisconnector,\r\n      ToggleSwitch,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of stack terminal that can be specified for use at the top of a vertical stack subsystem.\r\n   /// </summary>\r\n   public enum IFCStackTerminalType\r\n   {\r\n      BirdCage,\r\n      Cowl,\r\n      RainwaterHopper,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the functional type of space heater.\r\n   /// </summary>\r\n   public enum IFCSpaceHeaterType\r\n   {\r\n      SectionalRadiator,\r\n      PanelRadiator,\r\n      TubularRadiator,\r\n      Convector,\r\n      BaseBoardHeater,\r\n      FinnedTubeUnit,\r\n      UnitHeater,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of sensor that can be specified.\r\n   /// </summary>\r\n   public enum IFCSensorType\r\n   {\r\n      Co2Sensor,\r\n      FireSensor,\r\n      FlowSensor,\r\n      GasSensor,\r\n      HeatSensor,\r\n      HumiditySensor,\r\n      LightSensor,\r\n      MoistureSensor,\r\n      MovementSensor,\r\n      PressureSensor,\r\n      SmokeSensor,\r\n      SoundSensor,\r\n      TemperatureSensor,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of sanitary terminal that can be specified.\r\n   /// </summary>\r\n   public enum IFCSanitaryTerminalType\r\n   {\r\n      Bath,\r\n      Bidet,\r\n      Cistern,\r\n      Shower,\r\n      Sink,\r\n      SanitaryFountain,\r\n      ToiletPan,\r\n      Urinal,\r\n      WashhandBasin,\r\n      WCSeat,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines shape types for provisions for voids.\r\n   /// </summary>\r\n   public enum IFCProvisionForVoidShapeType\r\n   {\r\n      Round,\r\n      Rectangle,\r\n      Undefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines general types of pumps.\r\n   /// </summary>\r\n   public enum IFCPumpType\r\n   {\r\n      Circulator,\r\n      EndSuction,\r\n      SplitCase,\r\n      VerticalInline,\r\n      VerticalTurbine,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different breaker unit types that can be used in conjunction with protective device.\r\n   /// </summary>\r\n   public enum IFCProtectiveDeviceType\r\n   {\r\n      FuseDisconnector,\r\n      CircuitBreaker,\r\n      EarthFailureDevice,\r\n      ResidualCurrentCircuitBreaker,\r\n      ResidualCurrentSwitch,\r\n      Varistor,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Identifies the primary purpose of a pipe segment.\r\n   /// </summary>\r\n   public enum IFCPipeSegmentType\r\n   {\r\n      FlexibleSegment,\r\n      RigidSegment,\r\n      Gutter,\r\n      Spool,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Identifies the primary purpose of a pipe fitting.\r\n   /// </summary>\r\n   public enum IFCPipeFittingType\r\n   {\r\n      Bend,\r\n      Connector,\r\n      Entry,\r\n      Exit,\r\n      Junction,\r\n      Obstruction,\r\n      Transition,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different types of piles.\r\n   /// </summary>\r\n   public enum IFCPileType\r\n   {\r\n      Cohesion,\r\n      Friction,\r\n      Support,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different materials for pile construction.\r\n   /// </summary>\r\n   public enum IFCPileConstructionEnum\r\n   {\r\n      Cast_In_Place,\r\n      Composite,\r\n      Precast_Concrete,\r\n      Prefab_Steel,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different types of planar elements.\r\n   /// </summary>\r\n   public enum IFCPlateType\r\n   {\r\n      Curtain_Panel,\r\n      Sheet,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of outlet that can be specified.\r\n   /// </summary>\r\n   public enum IFCOutletType\r\n   {\r\n      AudiovisualOutlet,\r\n      CommunicationsOutlet,\r\n      PowerOutlet,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of motor connection that can be specified.\r\n   /// </summary>\r\n   public enum IFCMotorConnectionType\r\n   {\r\n      BeltDrive,\r\n      Coupling,\r\n      DirectDrive,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different types of linear elements an IfcMemberType object can fulfill.\r\n   /// </summary>\r\n   public enum IFCMemberType\r\n   {\r\n      Brace,\r\n      Chord,\r\n      Collar,\r\n      Member,\r\n      Mullion,\r\n      Plate,\r\n      Post,\r\n      Purlin,\r\n      Rafter,\r\n      Stringer,\r\n      Strut,\r\n      Stud,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of light fixture available.\r\n   /// </summary>\r\n   public enum IFCLightFixtureType\r\n   {\r\n      PointSource,\r\n      DirectionSource,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of lamp available.\r\n   /// </summary>\r\n   public enum IFCLampType\r\n   {\r\n      CompactFluorescent,\r\n      Fluorescent,\r\n      HighPressureMercury,\r\n      HighPressureSodium,\r\n      MetalHalide,\r\n      TungstenFilament,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of types of junction boxes available.\r\n   /// </summary>\r\n   public enum IFCJunctionBoxType\r\n   {\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of humidifiers.\r\n   /// </summary>\r\n   public enum IFCHumidifierType\r\n   {\r\n      SteamInjection,\r\n      AdiabaticAirWasher,\r\n      AdiabaticPan,\r\n      AdiabaticWettedElement,\r\n      AdiabaticAtomizing,\r\n      AdiabaticUltraSonic,\r\n      AdiabaticRigidMedia,\r\n      AdiabaticCompressedAirNozzle,\r\n      AssistedElectric,\r\n      AssistedNaturalGas,\r\n      AssistedPropane,\r\n      AssistedButane,\r\n      AssistedSteam,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of heat exchangers.\r\n   /// </summary>\r\n   public enum IFCHeatExchangerType\r\n   {\r\n      Plate,\r\n      ShellAndTube,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the functional type of gas terminal.\r\n   /// </summary>\r\n   public enum IFCGasTerminalType\r\n   {\r\n      GasAppliance,\r\n      GasBooster,\r\n      GasBurner,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines various types of flow meter.\r\n   /// </summary>\r\n   public enum IFCFlowMeterType\r\n   {\r\n      ElectricMeter,\r\n      EnergyMeter,\r\n      FlowMeter,\r\n      GasMeter,\r\n      OilMeter,\r\n      WaterMeter,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of flow instrument that can be specified.\r\n   /// </summary>\r\n   public enum IFCFlowInstrumentType\r\n   {\r\n      PressureGauge,\r\n      Thermometer,\r\n      Ammeter,\r\n      FrequencyMeter,\r\n      PowerFactorMeter,\r\n      PhaseAngleMeter,\r\n      VoltMeter_Peak,\r\n      VoltMeter_Rms,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of fire suppression terminal that can be specified.\r\n   /// </summary>\r\n   public enum IFCFireSuppressionTerminalType\r\n   {\r\n      BreechingInlet,\r\n      FireHydrant,\r\n      HoseReel,\r\n      Sprinkler,\r\n      SprinklerDeflector,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the various types of filter typically used within building services distribution systems.\r\n   /// </summary>\r\n   public enum IFCFilterType\r\n   {\r\n      AirParticleFilter,\r\n      OdorFilter,\r\n      OilFilter,\r\n      Strainer,\r\n      WaterFilter,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of fans.\r\n   /// </summary>\r\n   public enum IFCFanType\r\n   {\r\n      CentrifugalForwardCurved,\r\n      CentrifugalRadial,\r\n      CentrifugalBackwardInclinedCurved,\r\n      CentrifugalAirfoil,\r\n      TubeAxial,\r\n      VaneAxial,\r\n      PropellorAxial,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of evaporators.\r\n   /// </summary>\r\n   public enum IFCEvaporatorType\r\n   {\r\n      DirectExpansionShellAndTube,\r\n      DirectExpansionTubeInTube,\r\n      DirectExpansionBrazedPlate,\r\n      FloodedShellAndTube,\r\n      ShellAndCoil,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of evaporative coolers. \r\n   /// </summary>\r\n   public enum IFCEvaporativeCoolerType\r\n   {\r\n      DirectEvaporativeRandomMediaAirCooler,\r\n      DirectEvaporativeRigidMediaAirCooler,\r\n      DirectEvaporativeSlingersPackagedAirCooler,\r\n      DirectEvaporativePackagedRotaryAirCooler,\r\n      DirectEvaporativeAirWasher,\r\n      IndirectEvaporativePackageAirCooler,\r\n      IndirectEvaporativeWetCoil,\r\n      IndirectEvaporativeCoolingTowerOrCoilCooler,\r\n      IndirectDirectCombination,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of types of electrical time control available.\r\n   /// </summary>\r\n   public enum IFCElectricTimeControlType\r\n   {\r\n      TimeClock,\r\n      TimeDelay,\r\n      Relay,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of electric motor that can be specified.\r\n   /// </summary>\r\n   public enum IFCElectricMotorType\r\n   {\r\n      DC,\r\n      Induction,\r\n      Polyphase,\r\n      ReluctanceSynchronous,\r\n      Synchronous,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of types of electric heater available.\r\n   /// </summary>\r\n   public enum IFCElectricHeaterType\r\n   {\r\n      ElectricPointHeater,\r\n      ElectricCableHeater,\r\n      ElectricMatHeater,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of types of electric generators available.\r\n   /// </summary>\r\n   public enum IFCElectricGeneratorType\r\n   {\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of electrical flow storage device available.\r\n   /// </summary>\r\n   public enum IFCElectricFlowStorageDeviceType\r\n   {\r\n      Battery,\r\n      CapacitorBank,\r\n      HarmonicFilter,\r\n      InductorBank,\r\n      Ups,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of electrical appliance that can be specified.\r\n   /// </summary>\r\n   public enum IFCElectricApplianceType\r\n   {\r\n      Computer,\r\n      DirectWaterHeater,\r\n      DishWasher,\r\n      ElectricCooker,\r\n      ElectricHeater,\r\n      Facsimile,\r\n      FreeStandingFan,\r\n      Freezer,\r\n      Fridge_Freezer,\r\n      HandDryer,\r\n      IndirectWaterHeater,\r\n      Microwave,\r\n      PhotoCopier,\r\n      Printer,\r\n      Refrigerator,\r\n      RadianTheater,\r\n      Scanner,\r\n      Telephone,\r\n      TumbleDryer,\r\n      TV,\r\n      VendingMachine,\r\n      WashingMachine,\r\n      WaterHeater,\r\n      WaterCooler,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of duct silencers.\r\n   /// </summary>\r\n   public enum IFCDuctSilencerType\r\n   {\r\n      FlatOval,\r\n      Rectangular,\r\n      Round,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Identifies the primary purpose of a duct segment. \r\n   /// </summary>\r\n   public enum IFCDuctSegmentType\r\n   {\r\n      RigidSegment,\r\n      FlexibleSegment,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Identifies the primary purpose of a duct fitting.\r\n   /// </summary>\r\n   public enum IFCDuctFittingType\r\n   {\r\n      Bend,\r\n      Connector,\r\n      Entry,\r\n      Exit,\r\n      Junction,\r\n      Obstruction,\r\n      Transition,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Identifies different types of distribution chambers.\r\n   /// </summary>\r\n   public enum IFCDistributionChamberElementType\r\n   {\r\n      FormedDuct,\r\n      InspectionChamber,\r\n      InspectionPit,\r\n      Manhole,\r\n      MeterChamber,\r\n      Sump,\r\n      Trench,\r\n      ValveChamber,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the various types of damper.\r\n   /// </summary>\r\n   public enum IFCDamperType\r\n   {\r\n      ControlDamper,\r\n      FireDamper,\r\n      SmokeDamper,\r\n      FireSmokeDamper,\r\n      BackDraftDamper,\r\n      ReliefDamper,\r\n      BlastDamper,\r\n      GravityDamper,\r\n      GravityReliefDamper,\r\n      BalancingDamper,\r\n      FumeHoodExhaust,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of cooling towers.\r\n   /// </summary>\r\n   public enum IFCCoolingTowerType\r\n   {\r\n      NaturalDraft,\r\n      MechanicalInducedDraft,\r\n      MechanicalForcedDraft,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of cooled beams.\r\n   /// </summary>\r\n   public enum IFCCooledBeamType\r\n   {\r\n      Active,\r\n      Passive,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of controller that can be specified.\r\n   /// </summary>\r\n   public enum IFCControllerType\r\n   {\r\n      Floating,\r\n      Proportional,\r\n      ProportionalIntegral,\r\n      ProportionalIntegralDerivative,\r\n      TimedTwoPosition,\r\n      TwoPosition,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of condensers.\r\n   /// </summary>\r\n   public enum IFCCondenserType\r\n   {\r\n      WaterCooledShellTube,\r\n      WaterCooledShellCoil,\r\n      WaterCooledTubeInTube,\r\n      WaterCooledBrazedPlate,\r\n      AirCooled,\r\n      EvaporativeCooled,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Types of compressors.\r\n   /// </summary>\r\n   public enum IFCCompressorType\r\n   {\r\n      Dynamic,\r\n      Reciprocating,\r\n      Rotary,\r\n      Scroll,\r\n      Trochoidal,\r\n      SingleStage,\r\n      Booster,\r\n      OpenType,\r\n      Hermetic,\r\n      SemiHermetic,\r\n      WeldedShellHermetic,\r\n      RollingPiston,\r\n      RotaryVane,\r\n      SingleScrew,\r\n      TwinScrew,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of coils.\r\n   /// </summary>\r\n   public enum IFCCoilType\r\n   {\r\n      DXCoolingCoil,\r\n      WaterCoolingCoil,\r\n      SteamHeatingCoil,\r\n      WaterHeatingCoil,\r\n      ElectricHeatingCoil,\r\n      GasHeatingCoil,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of Chillers classified by their method of heat rejection.\r\n   /// </summary>\r\n   public enum IFCChillerType\r\n   {\r\n      AirCooled,\r\n      WaterCooled,\r\n      HeatRecovery,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of cable segment that can be specified.\r\n   /// </summary>\r\n   public enum IFCCableSegmentType\r\n   {\r\n      CableSegment,\r\n      ConductorSegment,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of cable carrier segment that can be specified.\r\n   /// </summary>\r\n   public enum IFCCableCarrierSegmentType\r\n   {\r\n      CableLadderSEGMENT,\r\n      CableTraySegment,\r\n      CableTrunkingSegment,\r\n      ConduitSegment,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of cable carrier fitting that can be specified.\r\n   /// </summary>\r\n   public enum IFCCableCarrierFittingType\r\n   {\r\n      Bend,\r\n      Cross,\r\n      Reducer,\r\n      Tee,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the typical types of boilers.\r\n   /// </summary>\r\n   public enum IFCBoilerType\r\n   {\r\n      Water,\r\n      Steam,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of alarm that can be specified.\r\n   /// </summary>\r\n   public enum IFCAlarmType\r\n   {\r\n      Bell,\r\n      BreakGlassButton,\r\n      Light,\r\n      ManualPullBox,\r\n      Siren,\r\n      Whistle,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines general types of pumps.\r\n   /// </summary>\r\n   public enum IFCAirToAirHeatRecoveryType\r\n   {\r\n      FixedPlateCounterFlowExchanger,\r\n      FixedPlateCrossFlowExchanger,\r\n      FixedPlateParallelFlowExchanger,\r\n      RotaryWheel,\r\n      RunaroundCoilloop,\r\n      HeatPipe,\r\n      TwinTowerEnthalpyRecoveryLoops,\r\n      ThermosiphonSealedTubeHeatExchangers,\r\n      ThermosiphonCoilTypeHeatExchangers,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration defining the functional types of air terminals.\r\n   /// </summary>\r\n   public enum IFCAirTerminalType\r\n   {\r\n      Grille,\r\n      Register,\r\n      Diffuser,\r\n      EyeBall,\r\n      Iris,\r\n      LinearGrille,\r\n      LinearDiffuser,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Identifies different types of air terminal boxes. \r\n   /// </summary>\r\n   public enum IFCAirTerminalBoxType\r\n   {\r\n      ConstantFlow,\r\n      VariableFlowPressureDependant,\r\n      VariableFlowPressureIndependant,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of actuator that can be specified.\r\n   /// </summary>\r\n   public enum IFCActuatorType\r\n   {\r\n      ElectricActuator,\r\n      HandOperatedActuator,\r\n      HydraulicActuator,\r\n      PneumaticActuator,\r\n      ThermostaticActuator,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different types of linear elements an IfcColumnType object can fulfill.\r\n   /// </summary>\r\n   public enum IFCColumnType\r\n   {\r\n      Column,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// The type of a derived unit.\r\n   /// </summary>\r\n   public enum IFCDerivedUnitEnum\r\n   {\r\n      AngularVelocityUnit,\r\n      CompoundPlaneAngleUnit,\r\n      DynamicViscosityUnit,\r\n      HeatFluxDensityUnit,\r\n      IntegerCountRateUnit,\r\n      IsothermalMoistureCapacityUnit,\r\n      KinematicViscosityUnit,\r\n      LinearVelocityUnit,\r\n      MassDensityUnit,\r\n      MassFlowRateUnit,\r\n      MoistureDiffusivityUnit,\r\n      MolecularWeightUnit,\r\n      SpecificHeatCapacityUnit,\r\n      ThermalAdmittanceUnit,\r\n      ThermalConductanceUnit,\r\n      ThermalResistanceUnit,\r\n      ThermalTransmittanceUnit,\r\n      VaporPermeabilityUnit,\r\n      VolumetricFlowRateUnit,\r\n      RotationalFrequencyUnit,\r\n      Torqueunit,\r\n      MomentOfInertiaUnit,\r\n      LinearMomentUnit,\r\n      LinearForceUnit,\r\n      PlanarForceUnit,\r\n      ModulusOfElasticityUnit,\r\n      ShearModulusUnit,\r\n      LinearStiffnessUnit,\r\n      RotationalStiffnessUnit,\r\n      ModulusOfSubGradeReactionUnit,\r\n      AccelerationUnit,\r\n      CurvatureUnit,\r\n      HeatingValueUnit,\r\n      IonConcentrationUnit,\r\n      LuminousIntensityDistributionUnit,\r\n      MassPerLengthUnit,\r\n      ModulusOfLinearSubGradeReactionUnit,\r\n      ModulusOfRotationalSubGradeReactionUnit,\r\n      PhUnit,\r\n      RotationalMassUnit,\r\n      SectionAreaIntegralUnit,\r\n      SectionModulusUnit,\r\n      SoundPowerUnit,\r\n      SoundPressureUnit,\r\n      TemperatureGradientUnit,\r\n      ThermalExpansionCoefficientUnit,\r\n      WarpingConstantUnit,\r\n      WarpingMomentUnit,\r\n      UserDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// The name of an SI unit.\r\n   /// </summary>\r\n   public enum IFCSIUnitName\r\n   {\r\n      Ampere,\r\n      Becquerel,\r\n      Candela,\r\n      Coulomb,\r\n      Cubic_Metre,\r\n      Degree_Celsius,\r\n      Farad,\r\n      Gram,\r\n      Gray,\r\n      Henry,\r\n      Hertz,\r\n      Joule,\r\n      Kelvin,\r\n      Lumen,\r\n      Lux,\r\n      Metre,\r\n      Mole,\r\n      Newton,\r\n      Ohm,\r\n      Pascal,\r\n      Radian,\r\n      Second,\r\n      Siemens,\r\n      Sievert,\r\n      Square_Metre,\r\n      Steradian,\r\n      Tesla,\r\n      Volt,\r\n      Watt,\r\n      Weber\r\n   }\r\n\r\n   /// <summary>\r\n   /// The name of a prefix that may be associated with an SI unit.\r\n   /// </summary>\r\n   public enum IFCSIPrefix\r\n   {\r\n      Exa,\r\n      Peta,\r\n      Tera,\r\n      Giga,\r\n      Mega,\r\n      Kilo,\r\n      Hecto,\r\n      Deca,\r\n      Deci,\r\n      Centi,\r\n      Milli,\r\n      Micro,\r\n      Nano,\r\n      Pico,\r\n      Femto,\r\n      Atto\r\n   }\r\n\r\n   /// <summary>\r\n   /// Allowed unit types of IfcNamedUnit. \r\n   /// </summary>\r\n   public enum IFCUnit\r\n   {\r\n      AbsorbedDoseUnit,\r\n      AmountOfSubstanceUnit,\r\n      AreaUnit,\r\n      DoseEquivalentUnit,\r\n      ElectricCapacitanceUnit,\r\n      ElectricChargeUnit,\r\n      ElectricConductanceUnit,\r\n      ElectricCurrentUnit,\r\n      ElectricResistanceUnit,\r\n      ElectricVoltageUnit,\r\n      EnergyUnit,\r\n      ForceUnit,\r\n      FrequencyUnit,\r\n      IlluminanceUnit,\r\n      InductanceUnit,\r\n      LengthUnit,\r\n      LuminousFluxUnit,\r\n      LuminousIntensityUnit,\r\n      MagneticFluxDensityUnit,\r\n      MagneticFluxUnit,\r\n      MassUnit,\r\n      PlaneAngleUnit,\r\n      PowerUnit,\r\n      PressureUnit,\r\n      RadioActivityUnit,\r\n      SolidAngleUnit,\r\n      ThermoDynamicTemperatureUnit,\r\n      TimeUnit,\r\n      VolumeUnit,\r\n      UserDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Identifies the logical location of the address.\r\n   /// </summary>\r\n   public enum IFCAddressType\r\n   {\r\n      Office,\r\n      Site,\r\n      Home,\r\n      DistributionPoint,\r\n      UserDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration identifying the type of change that might have occurred to the object during the last session.\r\n   /// </summary>\r\n   public enum IFCChangeAction\r\n   {\r\n      NoChange,\r\n      Modified,\r\n      Added,\r\n      Deleted,\r\n      ModifiedAdded,\r\n      ModifiedDeleted\r\n   }\r\n\r\n   /// <summary>\r\n   /// Enumeration identifying the state or accessibility of the object.\r\n   /// </summary>\r\n   public enum IFCState\r\n   {\r\n      ReadWrite,\r\n      ReadOnly,\r\n      Locked,\r\n      ReadWriteLocked,\r\n      ReadOnlyLocked\r\n   }\r\n\r\n   /// <summary>\r\n   /// Indicates the element composition type.\r\n   /// </summary>\r\n   public enum IFCElementComposition\r\n   {\r\n      Complex,\r\n      Element,\r\n      Partial\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the applicable object categories.\r\n   /// </summary>\r\n   public enum IFCObjectType\r\n   {\r\n      Product,\r\n      Process,\r\n      Control,\r\n      Resource,\r\n      Actor,\r\n      Group,\r\n      Project,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of covering that can further specify an IfcCovering or an IfcCoveringType. \r\n   /// </summary>\r\n   public enum IFCCoveringType\r\n   {\r\n      Ceiling,\r\n      Flooring,\r\n      Cladding,\r\n      Roofing,\r\n      Insulation,\r\n      Membrane,\r\n      Sleeving,\r\n      Wrapping,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different types of walls an IfcWallType object can fulfill.\r\n   /// </summary>\r\n   public enum IFCWallType\r\n   {\r\n      Standard,\r\n      Polygonal,\r\n      Shear,\r\n      ElementedWall,\r\n      PlumbingWall,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of covering that can further specify an IfcRailing\r\n   /// </summary>\r\n   public enum IFCRailingType\r\n   {\r\n      HandRail,\r\n      GuardRail,\r\n      Balustrade,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the types of IfcReinforcingBar roles\r\n   /// </summary>\r\n   public enum IFCReinforcingBarRole\r\n   {\r\n      Main,\r\n      Shear,\r\n      Ligature,\r\n      Stud,\r\n      Punching,\r\n      Edge,\r\n      Ring,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines reflectance methods for IfcSurfaceStyleRendering\r\n   /// </summary>\r\n   public enum IFCReflectanceMethod\r\n   {\r\n      Blinn,\r\n      Flat,\r\n      Glass,\r\n      Matt,\r\n      Metal,\r\n      Mirror,\r\n      Phong,\r\n      Plastic,\r\n      Strauss,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the types of IfcReinforcingBar surfaces\r\n   /// </summary>\r\n   public enum IFCReinforcingBarSurface\r\n   {\r\n      Plain,\r\n      Textured\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic configuration of the roof in terms of the different roof shapes. \r\n   /// </summary>\r\n   public enum IFCRoofType\r\n   {\r\n      Flat_Roof,\r\n      Shed_Roof,\r\n      Gable_Roof,\r\n      Hip_Roof,\r\n      Hipped_Gable_Roof,\r\n      Gambrel_Roof,\r\n      Mansard_Roof,\r\n      Barrel_Roof,\r\n      Rainbow_Roof,\r\n      Butterfly_Roof,\r\n      Pavilion_Roof,\r\n      Dome_Roof,\r\n      FreeForm,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic configuration of the ramps in terms of the different ramp shapes. \r\n   /// </summary>\r\n   public enum IFCRampType\r\n   {\r\n      Straight_Run_Ramp,\r\n      Two_Straight_Run_Ramp,\r\n      Quarter_Turn_Ramp,\r\n      Two_Quarter_Turn_Ramp,\r\n      Half_Turn_Ramp,\r\n      Spiral_Ramp,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the basic configuration of the stairs in terms of the different stair shapes. \r\n   /// </summary>\r\n   public enum IFCStairType\r\n   {\r\n      Straight_Run_Stair,\r\n      Two_Straight_Run_Stair,\r\n      Quarter_Winding_Stair,\r\n      Quarter_Turn_Stair,\r\n      Half_Winding_Stair,\r\n      Half_Turn_Stair,\r\n      Two_Quarter_Winding_Stair,\r\n      Two_Quarter_Turn_Stair,\r\n      Three_Quarter_Winding_Stair,\r\n      Three_Quarter_Turn_Stair,\r\n      Spiral_Stair,\r\n      Double_Return_Stair,\r\n      Curved_Run_Stair,\r\n      Two_Curved_Run_Stair,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines suface sides for IfcSurfaceStyle\r\n   /// </summary>\r\n   public enum IFCSurfaceSide\r\n   {\r\n      Positive,\r\n      Negative,\r\n      Both\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the different ways how path based elements can connect.\r\n   /// </summary>\r\n   public enum IFCConnectionType\r\n   {\r\n      AtPath,\r\n      AtStart,\r\n      AtEnd,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the types of occupant from which the type required can be selected.\r\n   /// </summary>\r\n   public enum IFCOccupantType\r\n   {\r\n      Assignee,\r\n      Assignor,\r\n      Lessee,\r\n      Lessor,\r\n      LettingAgent,\r\n      Owner,\r\n      Tenant,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Roles which may be played by an actor.\r\n   /// </summary>\r\n   public enum IFCRoleEnum\r\n   {\r\n      Supplier,\r\n      Manufacturer,\r\n      Contractor,\r\n      Subcontractor,\r\n      Architect,\r\n      StructuralEngineer,\r\n      CostEngineer,\r\n      Client,\r\n      BuildingOwner,\r\n      BuildingOperator,\r\n      MechanicalEngineer,\r\n      ElectricalEngineer,\r\n      ProjectManager,\r\n      FacilitiesManager,\r\n      CivilEngineer,\r\n      CommissioningEngineer,\r\n      Engineer,\r\n      Owner,\r\n      Consultant,\r\n      ConstructionManager,\r\n      FieldConstructionManager,\r\n      Reseller,\r\n      UserDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the range of different types of profiles.\r\n   /// </summary>\r\n   public enum IFCProfileType\r\n   {\r\n      Curve,\r\n      Area\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the boolean operators used in clipping.\r\n   /// </summary>\r\n   public enum IFCBooleanOperator\r\n   {\r\n      Union,\r\n      Intersection,\r\n      Difference\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the transition type used by compositive curve segments.\r\n   /// </summary>\r\n   public enum IFCTransitionCode\r\n   {\r\n      Discontinuous,\r\n      Continuous,\r\n      ContSameGradient,\r\n      ContSameGradientSameCurvature\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the trimming preference used by bounded curves.\r\n   /// </summary>\r\n   public enum IFCTrimmingPreference\r\n   {\r\n      Cartesian,\r\n      Parameter,\r\n      Unspecified\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the IfcAheadOrBehind enumeration.\r\n   /// </summary>\r\n   public enum IFCAheadOrBehind\r\n   {\r\n      Ahead,\r\n      Behind\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetElementShading::ShadingDeviceType possible values.\r\n   /// </summary>\r\n   public enum PSetElementShading_ShadingDeviceType\r\n   {\r\n      Fixed,\r\n      Movable,\r\n      Exterior,\r\n      Interior,\r\n      Overhang,\r\n      SideFin,\r\n      UserDefined,\r\n      NotDefined\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetLightFixtureTypeCommon::LightFixtureMountingType possible values.\r\n   /// </summary>\r\n   public enum PSetLightFixtureTypeCommon_LightFixtureMountingType\r\n   {\r\n      CableSpanned,\r\n      FreeStanding,\r\n      Pole_Side,\r\n      Pole_Top,\r\n      Recessed,\r\n      Surface,\r\n      Suspended,\r\n      TrackMounted,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetLightFixtureTypeCommon::LightFixturePlacingType possible values.\r\n   /// </summary>\r\n   public enum PSetLightFixtureTypeCommon_LightFixturePlacingType\r\n   {\r\n      Ceiling,\r\n      Floor,\r\n      Furniture,\r\n      Pole,\r\n      Wall,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetFlowTerminalAirTerminal::AirTerminalAirflowType possible values.\r\n   /// </summary>\r\n   public enum PSetFlowTerminalAirTerminal_AirTerminalAirflowType\r\n   {\r\n      SupplyAir,\r\n      ReturnAir,\r\n      ExhaustAir,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetFlowTerminalAirTerminal::AirTerminalLocation possible values.\r\n   /// </summary>\r\n   public enum PSetFlowTerminalAirTerminal_AirTerminalLocation\r\n   {\r\n      SideWallHigh,\r\n      SideWallLow,\r\n      CeilingPerimeter,\r\n      CeilingInterior,\r\n      Floor,\r\n      Sill,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalShape possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalShape\r\n   {\r\n      Round,\r\n      Rectangular,\r\n      Square,\r\n      Slot,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalFlowPattern possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalFlowPattern\r\n   {\r\n      LinearSingle,\r\n      LinearDouble,\r\n      LinearFourWay,\r\n      Radial,\r\n      Swirl,\r\n      Displacement, // Official Displacment in IFC2x3_TC1 help.\r\n      CompactJet,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalDischargeDirection possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalDischargeDirection\r\n   {\r\n      Parallel,\r\n      Perpendicular,\r\n      Adjustable,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalFinishType possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalFinishType\r\n   {\r\n      Annodized,\r\n      Painted,\r\n      None,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalMountingType possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalMountingType\r\n   {\r\n      Surface,\r\n      FlatFlush,\r\n      LayIn,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalCoreType possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalCoreType\r\n   {\r\n      ShutterBlade,\r\n      CurvedBlade,\r\n      Removable,\r\n      Reversible,\r\n      None,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n\r\n   /// <summary>\r\n   /// Defines the PSetAirTerminalTypeCommon::AirTerminalFlowControlType possible values.\r\n   /// </summary>\r\n   public enum PSetAirTerminalTypeCommon_AirTerminalFlowControlType\r\n   {\r\n      Damper,\r\n      Bellows,\r\n      None,\r\n      Other,\r\n      NotKnown,\r\n      Unset\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Enums/IFCSchemaVersion.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\n\r\nnamespace Revit.IFC.Import.Enums\r\n{\r\n   /// <summary>\r\n   /// IFC supported schema versions, ordered by date.\r\n   /// </summary>\r\n   public enum IFCSchemaVersion\r\n   {\r\n      IFC2x,\r\n      IFC2x2,\r\n      IFC2x3,\r\n      // We cannot distinguish between obsolete IFC4 pre-Add2 files and IFC4Add2 files.\r\n      // As such, all files are marked as IFC4 until we find some evidence that they \r\n      // are older formats, in which case we can \"downgrade\" the version.\r\n      IFC4Obsolete,\r\n      IFC4Add1Obsolete,\r\n      IFC4,\r\n      IFC4x1,\r\n      IFC4x2,\r\n      IFC4x3_RC1,\r\n      IFC4x3_RC4,\r\n      IFC4x3,\r\n      IFC4x3_ADD2\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Enums/IFCShapeBuilderType.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace Revit.IFC.Import.Enums\r\n{\r\n   /// <summary>\r\n   /// The types of builder that can be used for IFCImportShapeEditScope\r\n   /// </summary>\r\n   public enum IFCShapeBuilderType\r\n   {\r\n      BrepBuilder,\r\n      TessellatedShapeBuilder,\r\n      Unknown\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Enums/IFCSharedParameters.cs",
    "content": "﻿//\r\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Data;\r\n\r\nnamespace Revit.IFC.Import.Enums\r\n{\r\n   /// <summary>\r\n   /// The shared parameters written out as part of IFC import.\r\n   /// </summary>\r\n   public enum IFCSharedParameters\r\n   {\r\n      IfcDescription,\r\n      IfcExportAs,\r\n      IfcMaterial,\r\n      IfcName\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Geometry/IFCGeometryUtil.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Data;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Geometry\r\n{\r\n   /// <summary>\r\n   /// Provides methods to work on Revit geometric objects.\r\n   /// </summary>\r\n   public class IFCGeometryUtil\r\n   {\r\n      private static DirectShape m_SolidValidator = null;\r\n\r\n      /// <summary>\r\n      /// Create a DirectShape element that will act to validate solids.\r\n      /// </summary>\r\n      /// <remarks> \r\n      /// Because there is no API that allows validation of solids to be added to DirectShapeTypes, \r\n      /// we take advantage of the fact that there is not yet an actual check for the category of the DirectShape when doing \r\n      /// solid validation.  As such, we can set up a dummy Generic Models DirectShape, that we can globally use to \r\n      /// verify that our geometry is valid before attempting to add it to a DirectShape or a DirectShapeType.\r\n      /// </remarks>\r\n      private static DirectShape SolidValidator\r\n      {\r\n         get\r\n         {\r\n            if (m_SolidValidator == null)\r\n            {\r\n               m_SolidValidator = IFCElementUtil.CreateElement(IFCImportFile.TheFile.Document,\r\n                   new ElementId(BuiltInCategory.OST_GenericModel),\r\n                   \"(SolidValidator)\",\r\n                   null, -1, Common.Enums.IFCEntityType.UnKnown);\r\n            }\r\n            return m_SolidValidator;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a copy of a curve loop with a given transformation applied.\r\n      /// </summary>\r\n      /// <param name=\"origLoop\">The original curve loop.</param>\r\n      /// <param name=\"trf\">The transform.</param>\r\n      /// <returns>The transformed loop.</returns>\r\n      private static CurveLoop CreateTransformedFromConformalTransform(CurveLoop origLoop, Transform trf)\r\n      {\r\n         if (origLoop == null)\r\n            return null;\r\n\r\n         CurveLoop newLoop = new CurveLoop();\r\n         foreach (Curve curve in origLoop)\r\n         {\r\n            newLoop.Append(curve.CreateTransformed(trf));\r\n         }\r\n         return newLoop;\r\n      }\r\n\r\n      private static bool IsNonNegativeLength(double val)\r\n      {\r\n         return val > -MathUtil.Eps() && val < 30000 + MathUtil.Eps();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines if the radius value is acceptable for creating an arc.\r\n      /// </summary>\r\n      /// <param name=\"val\">The radius.</param>\r\n      /// <returns>True if it is within acceptable parameters, false otherwise.</returns>\r\n      public static bool IsValidRadius(double val)\r\n      {\r\n         return IsNonNegativeLength(val);\r\n      }\r\n\r\n      private static Curve CreateArcOrEllipse(XYZ center, double radiusX, double radiusY, XYZ xAxis, XYZ yAxis, double startParam, double endParam)\r\n      {\r\n         if (!IsValidRadius(radiusX) || !IsValidRadius(radiusY))\r\n         {\r\n            return null;\r\n         }\r\n\r\n         if (MathUtil.IsAlmostEqual(radiusX, radiusY))\r\n            return Arc.Create(center, radiusX, startParam, endParam, xAxis, yAxis);\r\n         else\r\n            return Ellipse.CreateCurve(center, radiusX, radiusY, xAxis, yAxis, startParam, endParam);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a copy of a curve loop with a given non-transformal transformation applied.\r\n      /// </summary>\r\n      /// <param name=\"origLoop\">The original curve loop.</param>\r\n      /// <param name=\"id\">The id of the originating entity, for error reporting.</param>\r\n      /// <param name=\"scaledTrf\">The scaled transform.</param>\r\n      /// <returns>The transformed loop.</returns>\r\n      /// <remarks>Revit API only allows for conformal transformations.  Here, we support\r\n      /// enough data types for non-conformal cases.  In cases where we can't process\r\n      /// a curve in the loop, we will use the conformal parameter and log an error.</remarks>\r\n      public static CurveLoop CreateTransformed(CurveLoop origLoop, int id, Transform scaledTrf)\r\n      {\r\n         if (origLoop == null)\r\n            return null;\r\n\r\n         if (scaledTrf.IsConformal)\r\n            return CreateTransformedFromConformalTransform(origLoop, scaledTrf);\r\n\r\n         CurveLoop newLoop = new CurveLoop();\r\n         foreach (Curve curve in origLoop)\r\n         {\r\n            Curve newCurve = null;\r\n\r\n            // Cover only Line, Arc, and Ellipse for now.  These are the most common cases.  Warn if it isn't one of these, or if the \r\n            try\r\n            {\r\n               if (curve is Line)\r\n               {\r\n                  Line line = curve as Line;\r\n                  XYZ newEndPoint0 = scaledTrf.OfPoint(line.GetEndPoint(0));\r\n                  XYZ newEndPoint1 = scaledTrf.OfPoint(line.GetEndPoint(1));\r\n                  newCurve = Line.CreateBound(newEndPoint0, newEndPoint1);\r\n               }\r\n               else if (curve is Arc || curve is Ellipse)\r\n               {\r\n                  double startParam = curve.GetEndParameter(0);\r\n                  double endParam = curve.GetEndParameter(1);\r\n\r\n                  XYZ center = null;\r\n                  XYZ xAxis = null;\r\n                  XYZ yAxis = null;\r\n                  double radiusX = 0.0;\r\n                  double radiusY = 0.0;\r\n\r\n                  if (curve is Arc)\r\n                  {\r\n                     Arc arc = curve as Arc;\r\n                     center = arc.Center;\r\n                     xAxis = arc.XDirection;\r\n                     yAxis = arc.YDirection;\r\n\r\n                     radiusX = radiusY = arc.Radius;\r\n                  }\r\n                  else if (curve is Ellipse)\r\n                  {\r\n                     Ellipse ellipse = curve as Ellipse;\r\n\r\n                     center = ellipse.Center;\r\n                     xAxis = ellipse.XDirection;\r\n                     yAxis = ellipse.YDirection;\r\n\r\n                     radiusX = ellipse.RadiusX;\r\n                     radiusY = ellipse.RadiusY;\r\n                  }\r\n\r\n                  XYZ radiusXDir = new XYZ(radiusX, 0, 0);\r\n                  XYZ radiusYDir = new XYZ(0, radiusY, 0);\r\n                  XYZ scaledRadiusXDir = scaledTrf.OfVector(radiusXDir);\r\n                  XYZ scaledRadiusYDir = scaledTrf.OfVector(radiusYDir);\r\n\r\n                  double scaledRadiusX = scaledRadiusXDir.GetLength();\r\n                  double scaledRadiusY = scaledRadiusYDir.GetLength();\r\n\r\n                  XYZ scaledCenter = scaledTrf.OfPoint(center);\r\n                  XYZ scaledXAxis = scaledTrf.OfVector(xAxis).Normalize();\r\n                  XYZ scaledYAxis = scaledTrf.OfVector(yAxis).Normalize();\r\n                  newCurve = CreateArcOrEllipse(scaledCenter, scaledRadiusX, scaledRadiusY, scaledXAxis, scaledYAxis, startParam, endParam);\r\n               }\r\n            }\r\n            catch\r\n            {\r\n               newCurve = null;\r\n            }\r\n\r\n            if (newCurve != null)\r\n            {\r\n               newLoop.Append(newCurve);\r\n            }\r\n            else\r\n            {\r\n               // Simple heuristic to create a valid polyline from an original curve.\r\n               \r\n               // Get the tessellation points.\r\n               IList<XYZ> points = curve.Tessellate();\r\n               int numPoints = points.Count;\r\n               if (numPoints < 2)\r\n                  continue;\r\n\r\n               // Apply the scale.\r\n               IList<XYZ> scaledPoints = new List<XYZ>();\r\n               foreach (XYZ point in points)\r\n               {\r\n                  scaledPoints.Add(scaledTrf.OfPoint(point));\r\n               }\r\n\r\n               // Try to create segments that are of valid length for a curve, since\r\n               // tessellation may create points that are too close together.\r\n               IList<XYZ> segmentEnds = new List<XYZ>() { scaledPoints[0] };\r\n               int numSegments = 0;\r\n               int lastPointIndex = 0;\r\n               for (int ii = 1; ii < numPoints; ii++)\r\n               {\r\n                  if (!LineSegmentIsTooShort(segmentEnds[numSegments], scaledPoints[ii]))\r\n                  {\r\n                     segmentEnds.Add(scaledPoints[ii]);\r\n                     numSegments++;\r\n                     lastPointIndex = ii;\r\n                  }\r\n               }\r\n\r\n               if (numSegments == 0)\r\n                  continue;\r\n\r\n               // If the last segment end is not the end tessellation point, and it is legal\r\n               // to extend the last segment, do so.  This could result in a too big gap if we\r\n               // can't patch this, but hopefully this is a very rare case.\r\n               if (lastPointIndex < numPoints - 1)\r\n               {\r\n                  if (!LineSegmentIsTooShort(segmentEnds[numSegments - 1], scaledPoints[numPoints - 1]))\r\n                  {\r\n                     segmentEnds[numSegments] = scaledPoints[numPoints - 1];\r\n                  }\r\n               }\r\n\r\n               // Add the segments.\r\n               for (int ii = 0; ii < numSegments; ii++)\r\n               {\r\n                  newLoop.Append(Line.CreateBound(segmentEnds[ii], segmentEnds[ii + 1]));\r\n               }\r\n            }\r\n         }\r\n\r\n         return newLoop;\r\n      }\r\n\r\n      private static double UnscaleSweptSolidCurveParam(Curve curve, double param)\r\n      {\r\n         if (curve.IsCyclic)\r\n            return param * (Math.PI / 180);\r\n         return param * (curve.GetEndParameter(1) - curve.GetEndParameter(0));\r\n      }\r\n\r\n      private static double ScaleCurveLengthForSweptSolid(Curve curve, double param)\r\n      {\r\n         if (curve.IsCyclic)\r\n            return param * (180 / Math.PI);\r\n         return 1.0;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns true if the line segment from pt1 to pt2 is less than the short curve tolerance.\r\n      /// </summary>\r\n      /// <param name=\"pt1\">The first point of the line segment.</param>\r\n      /// <param name=\"pt2\">The final point of the line segment.</param>\r\n      /// <returns>True if it is too short, false otherwise.</returns>\r\n      public static bool LineSegmentIsTooShort(XYZ pt1, XYZ pt2)\r\n      {\r\n         double dist = pt1.DistanceTo(pt2);\r\n         return (dist < IFCImportFile.TheFile.ShortCurveTolerance + MathUtil.Eps());\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines if (firstPt, midPt) and (midPt, finalPt) overlap at more than one point.\r\n      /// </summary>\r\n      /// <param name=\"p1\">The start point of the first line segment.</param>\r\n      /// <param name=\"p2\">The end point of the first line segment (and start point of the second).</param>\r\n      /// <param name=\"p3\">The end point of the second line segment.</param>\r\n      /// <returns>True if the line segments overlap at more than one point.</returns>\r\n      private static bool LineSegmentsOverlap(XYZ p1, XYZ p2, XYZ p3)\r\n      {\r\n         XYZ v12 = p2 - p1;\r\n         XYZ v23 = p3 - p2;\r\n         if (MathUtil.VectorsAreParallel2(v12, v23) != -1)\r\n            return false;\r\n\r\n         // If the vectors are anti-parallel, then make sure that the distance is less\r\n         // than vertex tolerance.\r\n         double v12Dist = v12.GetLength();\r\n         if (MathUtil.IsAlmostZero(v12Dist))\r\n            return true;\r\n\r\n         XYZ crossProduct = v12.CrossProduct(v23);\r\n         double height = crossProduct.GetLength() / v12Dist;\r\n         return height < IFCImportFile.TheFile.VertexTolerance;\r\n      }\r\n\r\n      private static IList<XYZ> GeneratePolyCurveLoopVertices(IList<XYZ> pointXYZs,\r\n         IList<IFCAnyHandle> points, int id, bool closeCurve, out int numSegments)\r\n      {\r\n         numSegments = 0;\r\n\r\n         int numPoints = pointXYZs.Count;\r\n         if (numPoints < 2)\r\n         {\r\n            // TODO: log warning\r\n            return null;\r\n         }\r\n\r\n         IList<int> badIds = new List<int>();\r\n\r\n         // The input polycurve loop may or may not repeat the start/end point.\r\n         // wasAlreadyClosed checks if the point was repeated.\r\n         bool wasAlreadyClosed = MathUtil.IsAlmostEqualAbsolute(pointXYZs[0], pointXYZs[numPoints - 1]);\r\n\r\n         bool wasClosed = closeCurve ? true : wasAlreadyClosed;\r\n\r\n         // We expect at least 3 points if the curve is closed, 2 otherwise.\r\n         int numMinPoints = wasAlreadyClosed ? 4 : (closeCurve ? 3 : 2);\r\n         if (numPoints < numMinPoints)\r\n         {\r\n            // TODO: log warning\r\n            return null;\r\n         }\r\n\r\n         // Check distance between points; remove too-close points, and warn if result is non-collinear.\r\n         // Always include first point.\r\n         IList<XYZ> finalPoints = new List<XYZ>();\r\n         finalPoints.Add(pointXYZs[0]);\r\n         int numNewPoints = 1;\r\n\r\n         int numPointsToCheck = closeCurve ? numPoints + 1 : numPoints;\r\n         for (int ii = 1; ii < numPointsToCheck; ii++)\r\n         {\r\n            int nextIndex = (ii % numPoints);\r\n            int nextNextIndex = (nextIndex == numPoints - 1 && wasAlreadyClosed) ? 1 : ((ii + 1) % numPoints);\r\n\r\n            // Only check if the last segment overlaps the first segment if we have a closed curve.\r\n            bool doSegmentOverlapCheck = (ii < numPointsToCheck - 1) || wasClosed;\r\n            if (LineSegmentIsTooShort(finalPoints[numNewPoints - 1], pointXYZs[nextIndex]) ||\r\n               (doSegmentOverlapCheck && LineSegmentsOverlap(finalPoints[numNewPoints - 1], pointXYZs[nextIndex], pointXYZs[nextNextIndex])))\r\n            {\r\n               if (points != null)\r\n                  badIds.Add(points[nextIndex].StepId);\r\n               else\r\n                  badIds.Add(nextIndex + 1);\r\n            }\r\n            else\r\n            {\r\n               finalPoints.Add(pointXYZs[nextIndex]);\r\n               numNewPoints++;\r\n            }\r\n         }\r\n\r\n         // Check final segment; if too short, delete 2nd to last point instead of the last.\r\n         if (wasClosed)\r\n         {\r\n            if (numNewPoints < 4)\r\n               return null;\r\n\r\n            bool isClosed = MathUtil.IsAlmostEqualAbsolute(finalPoints[numNewPoints - 1], finalPoints[0]);  // Do we have a closed loop now?\r\n            if (wasClosed && !isClosed)   // If we had a closed loop, and now we don't, fix it up.\r\n            {\r\n               // Presumably, the second-to-last point had to be very close to the last point, or we wouldn't have removed the last point.\r\n               // So instead of creating a too-short segment, we replace the last point of the new point list with the last point of the original point list.\r\n               finalPoints[numNewPoints - 1] = pointXYZs[numPoints - 1];\r\n\r\n               // Now we have to check that we didn't inadvertently make a \"too-short\" segment.\r\n               for (int ii = numNewPoints - 1; ii > 0; ii--)\r\n               {\r\n                  if (LineSegmentIsTooShort(finalPoints[ii], finalPoints[ii - 1]))\r\n                  {\r\n                     // TODO: log this removal.\r\n                     finalPoints.RemoveAt(ii - 1); // Remove the intermediate point, not the last point.\r\n                     numNewPoints--;\r\n                  }\r\n                  else\r\n                     break;   // We are in the clear, unless we removed too many points - we've already checked the rest of the loop.\r\n               }\r\n            }\r\n\r\n            if (numNewPoints < 4)\r\n               return null;\r\n         }\r\n\r\n         // This can be a very common warning, so we will restrict to verbose logging.\r\n         if (Importer.TheOptions.VerboseLogging)\r\n         {\r\n            if (badIds.Count > 0)\r\n            {\r\n               int count = badIds.Count;\r\n               string msg = null;\r\n               if (count == 1)\r\n               {\r\n                  msg = \"Polyline had 1 point that was too close to one of its neighbors, removing point: #\" + badIds[0] + \".\";\r\n               }\r\n               else\r\n               {\r\n                  msg = \"Polyline had \" + count + \" points that were too close to one of their neighbors, removing points:\";\r\n                  foreach (int badId in badIds)\r\n                     msg += \" #\" + badId;\r\n                  msg += \".\";\r\n               }\r\n               Importer.TheLog.LogWarning(id, msg, false);\r\n            }\r\n         }\r\n\r\n         if (numNewPoints < numMinPoints)\r\n         {\r\n            if (Importer.TheOptions.VerboseLogging)\r\n            {\r\n               string msg = \"PolyCurve had \" + numNewPoints + \" point(s) after removing points that were too close, expected at least \" + numMinPoints + \", ignoring.\";\r\n               Importer.TheLog.LogWarning(id, msg, false);\r\n            }\r\n            return null;\r\n         }\r\n\r\n         numSegments = numNewPoints - 1;\r\n         return finalPoints;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates an open or closed CurveLoop from a list of vertices.\r\n      /// </summary>\r\n      /// <param name=\"pointXYZs\">The list of vertices.</param>\r\n      /// <param name=\"points\">The optional list of IFCAnyHandles that generated the vertices, used solely for error reporting.</param>\r\n      /// <param name=\"id\">The id of the IFCAnyHandle associated with the CurveLoop.</param>\r\n      /// <param name=\"closeCurve\">True if the loop needs a segment between the last point and the first point.</param>\r\n      /// <returns>The new curve loop.</returns>\r\n      /// <remarks>If closeCurve is true, there will be pointsXyz.Count line segments.  Otherwise, there will be pointsXyz.Count-1.</remarks>\r\n      public static CurveLoop CreatePolyCurveLoop(IList<XYZ> pointXYZs, IList<IFCAnyHandle> points, int id, bool closeCurve)\r\n      {\r\n         CurveLoop curveLoop = new CurveLoop();\r\n\r\n         int numSegments = 0;\r\n         IList<XYZ> finalPoints = GeneratePolyCurveLoopVertices(pointXYZs, points, id, closeCurve, out numSegments);\r\n         for (int ii = 0; ii < numSegments; ii++)\r\n            curveLoop.Append(Line.CreateBound(finalPoints[ii], finalPoints[ii + 1]));\r\n\r\n         return curveLoop;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Append line segments to an existing CurveLoop from a list of vertices.\r\n      /// </summary>\r\n      /// <param name=\"curveLoop\">The curve loop.</param>\r\n      /// <param name=\"pointXYZs\">The list of vertices.</param>\r\n      /// <param name=\"points\">The optional list of IFCAnyHandles that generated the vertices, used solely for error reporting.</param>\r\n      /// <param name=\"id\">The id of the IFCAnyHandle associated with the CurveLoop.</param>\r\n      /// <param name=\"closeCurve\">True if the loop needs a segment between the last point and the first point.</param>\r\n      public static void AppendPolyCurveToCurveLoop(CurveLoop curveLoop, IList<XYZ> pointXYZs, IList<IFCAnyHandle> points, int id, bool closeCurve)\r\n      {\r\n         if (curveLoop == null)\r\n            return;\r\n\r\n         int numSegments = 0;\r\n         IList<XYZ> finalPoints = GeneratePolyCurveLoopVertices(pointXYZs, points, id, closeCurve, out numSegments);\r\n\r\n         for (int ii = 0; ii < numSegments; ii++)\r\n            curveLoop.Append(Line.CreateBound(finalPoints[ii], finalPoints[ii + 1]));\r\n      }\r\n\r\n      /// <summary>\r\n      /// Attempt to create a single curve from a curve loop composed of linear segments.\r\n      /// </summary>\r\n      /// <param name=\"curveLoop\">The curve loop.</param>\r\n      /// <param name=\"pointXYZs\">The original points from which the curve loop was created.</param>\r\n      /// <returns>The curve, if the curve loop is linear, or null.</returns>\r\n      /// <remarks>Note that the routine does not actually check that the curveLoop is composed\r\n      /// of line segments, or that the point array matches the curve loop in any way.</remarks>\r\n      public static Curve CreateCurveFromPolyCurveLoop(CurveLoop curveLoop, IList<XYZ> pointXYZs)\r\n      {\r\n         if (curveLoop == null)\r\n            return null;\r\n\r\n         int numCurves = curveLoop.NumberOfCurves();\r\n         if (numCurves == 0)\r\n            return null;\r\n\r\n         if (numCurves == 1)\r\n         {\r\n            Curve originalCurve = curveLoop.First();\r\n            if (originalCurve != null)\r\n               return originalCurve.Clone();\r\n            return null;\r\n         }\r\n\r\n         if (pointXYZs == null)\r\n            return null;\r\n         int numPoints = pointXYZs.Count;\r\n\r\n         // If we are here, we are sure that the number of points must be at least 3.\r\n         XYZ firstPoint = pointXYZs[0];\r\n         XYZ secondPoint = pointXYZs[1];\r\n         XYZ vectorToTest = (secondPoint - firstPoint).Normalize();\r\n\r\n         bool allAreCollinear = true;\r\n         for (int ii = 2; ii < numPoints; ii++)\r\n         {\r\n            XYZ vectorTmp = (pointXYZs[ii] - firstPoint).Normalize();\r\n            if (!vectorTmp.IsAlmostEqualTo(vectorToTest))\r\n            {\r\n               allAreCollinear = false;\r\n               break;\r\n            }\r\n         }\r\n\r\n         if (allAreCollinear)\r\n            return Line.CreateBound(firstPoint, pointXYZs[numPoints - 1]);\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Specifically check if the trim parameters are likely set incorrectly to the sum of the lengths of the curve segments,\r\n      /// if some of the curve segments are line segments.\r\n      /// </summary>\r\n      /// <param name=\"id\">The id of the IFC entity containing the directrix, for messaging purposes.</param>\r\n      /// <param name=\"ifcCurve\">The IFCCurve entity containing the CurveLoop to be trimmed.</param>\r\n      /// <param name=\"startVal\">The starting trim parameter.</param>\r\n      /// <param name=\"endVal\">The ending trim parameter.</param>\r\n      /// <param name=\"totalParamLength\">The total parametric length of the curve, as defined by IFC.</param>\r\n      /// <returns>False if the trim parameters are thought to be invalid or unnecessary, true otherwise.</returns>\r\n      private static bool CheckIfTrimParametersAreNeeded(int id, IFCCurve ifcCurve,\r\n         double startVal, double endVal, double totalParamLength)\r\n      {\r\n         // This check allows for some leniency in the setting of startVal and endVal; we assume that:\r\n         // 1. If the parameter range is equal, that an offset value is OK; don't trim.\r\n         // 2. If the start parameter is 0 and the curveParamLength is greater than the total length, don't trim.\r\n         double curveParamLength = endVal - startVal;\r\n         if (MathUtil.IsAlmostEqual(curveParamLength, totalParamLength))\r\n            return false;\r\n\r\n         if (MathUtil.IsAlmostZero(startVal) && totalParamLength < curveParamLength - MathUtil.Eps())\r\n            return false;\r\n\r\n         if (!(ifcCurve is IFCCompositeCurve))\r\n            return true;\r\n\r\n         double totalRawParametricLength = 0.0;\r\n         foreach (IFCCurve curveSegment in (ifcCurve as IFCCompositeCurve).Segments)\r\n         {\r\n            if (!(curveSegment is IFCTrimmedCurve))\r\n               return true;\r\n\r\n            IFCTrimmedCurve trimmedCurveSegment = curveSegment as IFCTrimmedCurve;\r\n            if (trimmedCurveSegment.Trim1 == null || trimmedCurveSegment.Trim2 == null)\r\n               return true;\r\n\r\n            totalRawParametricLength += (trimmedCurveSegment.Trim2.Value - trimmedCurveSegment.Trim1.Value);\r\n         }\r\n\r\n         // Error in some Tekla files - lines are parameterized by length, instead of 1.0 (as is correct).  \r\n         // Warn and ignore the parameter length.  This must come after the MathUtil.IsAlmostEqual(curveParamLength, totalParamLength)\r\n         // check above, since we don't want to warn if curveParamLength == totalParamLength.\r\n         if (MathUtil.IsAlmostEqual(curveParamLength, totalRawParametricLength))\r\n         {\r\n            Importer.TheLog.LogWarning(id, \"The total parameter length for this curve is equal to the sum of the parameter deltas, \" +\r\n               \"and not the parameter length as defined in IFC.  \" +\r\n               \"Most likely, this is an error in the sending application, and the trim extents are being ignored.  \" +\r\n               \"If this trim was intended, please contact Autodesk.\", true);\r\n            return false;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      private static void AdjustParamsIfNecessary(Curve curve, ref double param1, ref double param2)\r\n      {\r\n         if (curve == null || !curve.IsCyclic)\r\n            return;\r\n\r\n         double period = curve.Period;\r\n\r\n         // We want to make sure both values are within period of one another.\r\n         param1 = MathUtil.PutInRange(param1, 0, period);\r\n         param2 = MathUtil.PutInRange(param2, 0, period);\r\n         if (param2 < param1)\r\n            param2 = MathUtil.PutInRange(param2, param1 + period / 2, period);\r\n      }\r\n\r\n      private static bool NeedsTrimming(double startVal, double? origEndVal)\r\n      {\r\n         return (origEndVal.HasValue || !MathUtil.IsAlmostZero(startVal));\r\n      }\r\n\r\n      private static bool HasSuspiciousTrimParameters(int id, double startVal, double endVal, double totalParamLength)\r\n      {\r\n         if ((MathUtil.IsAlmostEqual(totalParamLength, 1.0)) || (!MathUtil.IsAlmostZero(startVal) || !MathUtil.IsAlmostEqual(endVal, 1.0)))\r\n            return false;\r\n\r\n         Importer.TheLog.LogWarning(id, \"The Start Parameter for the trimming of this curve was set to 0, and the End Parameter was set to 1.  \" +\r\n            \"Most likely, this is an error in the sending application, and the trim extents are being ignored.  \" +\r\n            \"If this trim was intended, please contact Autodesk.\", true);\r\n         return true;\r\n      }\r\n\r\n      private static bool HasSuspiciousNumberOfCurveSegments(int id, IFCCurve ifcCurve, double endVal)\r\n      {\r\n         if (!(ifcCurve is IFCCompositeCurve))\r\n            return false;\r\n\r\n         IList<IFCCurve> curveSegments = (ifcCurve as IFCCompositeCurve).Segments;\r\n\r\n         if (!MathUtil.IsAlmostEqual(curveSegments.Count(), endVal))\r\n            return false;\r\n\r\n         bool isAllTrimmedCurves = curveSegments.All(curveSegment => (curveSegment is IFCTrimmedCurve));\r\n         if (isAllTrimmedCurves)\r\n            return false;\r\n\r\n         Importer.TheLog.LogWarning(id, \"The End Parameter is equal to the number of segments. \" +\r\n            \"Most likely, this is an error in the sending application, and the trim extents are being ignored.  \" +\r\n            \"If this trim was intended, please contact Autodesk.\", true);\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check that a geometric object is valid for a DirectShape, and adjust if needed.\r\n      /// </summary>\r\n      /// <param name=\"originalObject\">The original GeometryObject.</param>\r\n      /// <param name=\"shape\">An optional DirectShape uesd to validate solids.</param>\r\n      /// <param name=\"id\">The id of the entity being processed.</param>\r\n      /// <returns>Null if the original object is valid, or a list of GeometryObjects if not.</returns>\r\n      public static IList<GeometryObject> AdjustGeometryObjectsIfNeeded(GeometryObject originalObject, DirectShape shape, int id)\r\n      {\r\n         if (shape != null && originalObject is Solid)\r\n         {\r\n            Solid solid = originalObject as Solid;\r\n            if (!shape.IsValidGeometry(solid))\r\n            {\r\n               Importer.TheLog.LogWarning(id, \"Couldn't create valid solid, reverting to mesh.\", false);\r\n               return CreateMeshesFromSolid(solid);\r\n            }\r\n         }\r\n\r\n         Curve curve = originalObject as Curve;\r\n         if (!(curve?.IsBound ?? true))\r\n         {\r\n            if (curve?.IsCyclic ?? false)\r\n            {\r\n               double period = curve.Period;\r\n               Curve newCurve = curve.Clone();\r\n\r\n               curve.MakeBound(0, period / 2);\r\n               newCurve.MakeBound(period / 2, period);\r\n\r\n               return new List<GeometryObject>() { curve, newCurve };\r\n            }\r\n            else\r\n            {\r\n               Importer.TheLog.LogWarning(id, \"Found unbounded acyclic curve, ignoring.\", false);\r\n               return new List<GeometryObject>();\r\n            }\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Given a list of curves, finds any unbound cyclic curves and splits them.\r\n      /// </summary>\r\n      /// <param name=\"curves\">The list of curves.</param>\r\n      /// <returns>True if anything was done, false otherwise.</returns>\r\n      /// <remarks>This will modify the input curves.  This will silently ignore\r\n      /// unbound, acyclic curves.\r\n      /// This does not respect the ordering of the curves.</remarks>\r\n      public static bool SplitUnboundCyclicCurves(IList<Curve> curves)\r\n      {\r\n         IList<Curve> newCurves = null;\r\n\r\n         foreach (Curve curve in curves)\r\n         {\r\n            if (curve.IsBound || !curve.IsCyclic)\r\n               continue;\r\n\r\n            double period = curve.Period;\r\n            Curve newCurve = curve.Clone();\r\n\r\n            curve.MakeBound(0, period / 2);\r\n            newCurve.MakeBound(period / 2, period);\r\n\r\n            if (newCurves == null)\r\n               newCurves = new List<Curve>();\r\n\r\n            newCurves.Add(newCurve);\r\n         }\r\n\r\n         if (newCurves == null)\r\n            return false;\r\n\r\n         foreach (Curve newCurve in newCurves)\r\n         {\r\n            curves.Add(newCurve);\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Given a curveloop, finds any unbound cyclic curves in it and splits them.\r\n      /// </summary>\r\n      /// <param name=\"curveLoop\">Curveloop to process.</param>\r\n      /// <returns>New curveloop, which has all the curves split, if any were split, otherwise\r\n      /// the original curveloop.</returns>\r\n      public static CurveLoop SplitUnboundCyclicCurves(CurveLoop curveLoop)\r\n      {\r\n         var curves = curveLoop.ToList();\r\n         if (!SplitUnboundCyclicCurves(curves))\r\n            return curveLoop;\r\n\r\n         CurveLoop splitCurveLoop = new CurveLoop();\r\n         curves.ForEach(x => splitCurveLoop.Append(x));\r\n         return splitCurveLoop;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Trims the CurveLoop contained in an IFCCurve by the start and optional end parameter values.\r\n      /// </summary>\r\n      /// <param name=\"id\">The id of the IFC entity containing the directrix, for messaging purposes.</param>\r\n      /// <param name=\"ifcCurve\">The IFCCurve entity containing the CurveLoop to be trimmed.</param>\r\n      /// <param name=\"startVal\">The starting trim parameter.</param>\r\n      /// <param name=\"origEndVal\">The optional end trim parameter.  If not supplied, assume no end trim.</param>\r\n      /// <returns>The original curve loop, if no trimming has been done, otherwise a trimmed copy.</returns>\r\n      private static CurveLoop TrimCurveLoop(int id, IFCCurve ifcCurve, double startVal, double? origEndVal)\r\n      {\r\n         CurveLoop origCurveLoop = ifcCurve.GetTheCurveLoop();\r\n         if (origCurveLoop == null || origCurveLoop.Count() == 0)\r\n            return null;\r\n\r\n         // Trivial case: unbound curve.\r\n         Curve possiblyUnboundCurve = origCurveLoop.First();\r\n         if (!possiblyUnboundCurve.IsBound)\r\n         {\r\n            if (!origEndVal.HasValue)\r\n            {\r\n               Importer.TheLog.LogError(id, \"Can't trim unbound curve with no given end parameter.\", true);\r\n            }\r\n\r\n            CurveLoop boundCurveLoop = new CurveLoop();\r\n            Curve boundCurve = possiblyUnboundCurve.Clone();\r\n            boundCurve.MakeBound(startVal, origEndVal.Value * ifcCurve.ParametericScaling);\r\n            boundCurveLoop.Append(boundCurve);\r\n            return boundCurveLoop;\r\n         }\r\n\r\n         IList<double> curveLengths = new List<double>();\r\n         IList<Curve> loopCurves = new List<Curve>();\r\n\r\n         double totalParamLength = 0.0;\r\n\r\n         foreach (Curve curve in origCurveLoop)\r\n         {\r\n            double curveLength = curve.GetEndParameter(1) - curve.GetEndParameter(0);\r\n            double currLength = ScaleCurveLengthForSweptSolid(curve, curveLength);\r\n            loopCurves.Add(curve);\r\n            curveLengths.Add(currLength);\r\n            totalParamLength += currLength;\r\n         }\r\n\r\n         double endVal = origEndVal.HasValue ? origEndVal.Value : totalParamLength;\r\n         double eps = MathUtil.Eps();\r\n\r\n         if (!CheckIfTrimParametersAreNeeded(id, ifcCurve, startVal, endVal, totalParamLength))\r\n            return origCurveLoop;\r\n\r\n         // Special cases: \r\n         // if startval = 0 and endval = 1, or endval is equal to the number of composite curve segments then this likely means that the importing application\r\n         // incorrectly set the extents to be the \"whole\" curve, when really this is just a portion of the curves\r\n         // (the parametrization is described above).\r\n         // As such, if the totalParamLength is not 1 but startVal = 0 and endVal = 1, we will warn but not trim.\r\n         // This is not a hypothetical case: it occurs in several AllPlan 2017 files at least.\r\n         if (HasSuspiciousNumberOfCurveSegments(id, ifcCurve, endVal) || HasSuspiciousTrimParameters(id, startVal, endVal, totalParamLength))\r\n            return origCurveLoop;\r\n\r\n         int numCurves = loopCurves.Count;\r\n         double currentPosition = 0.0;\r\n         int currCurve = 0;\r\n\r\n         IList<Curve> newLoopCurves = new List<Curve>();\r\n\r\n         if (startVal > MathUtil.Eps())\r\n         {\r\n            for (; currCurve < numCurves; currCurve++)\r\n            {\r\n               if (currentPosition + curveLengths[currCurve] < startVal + eps)\r\n               {\r\n                  currentPosition += curveLengths[currCurve];\r\n                  continue;\r\n               }\r\n\r\n               Curve newCurve = loopCurves[currCurve].Clone();\r\n               if (!MathUtil.IsAlmostEqual(currentPosition, startVal))\r\n               {\r\n                  double startParam = UnscaleSweptSolidCurveParam(loopCurves[currCurve], startVal - currentPosition);\r\n                  double endParam = newCurve.GetEndParameter(1);\r\n                  AdjustParamsIfNecessary(newCurve, ref startParam, ref endParam);\r\n                  newCurve.MakeBound(startParam, endParam);\r\n               }\r\n\r\n               newLoopCurves.Add(newCurve);\r\n               break;\r\n            }\r\n         }\r\n\r\n         if (endVal < totalParamLength - eps)\r\n         {\r\n            for (; currCurve < numCurves; currCurve++)\r\n            {\r\n               if (currentPosition + curveLengths[currCurve] < endVal - eps)\r\n               {\r\n                  currentPosition += curveLengths[currCurve];\r\n                  newLoopCurves.Add(loopCurves[currCurve]);\r\n                  continue;\r\n               }\r\n\r\n               Curve newCurve = loopCurves[currCurve].Clone();\r\n               if (!MathUtil.IsAlmostEqual(currentPosition + curveLengths[currCurve], endVal))\r\n               {\r\n                  double startParam = newCurve.GetEndParameter(0);\r\n                  double endParam = UnscaleSweptSolidCurveParam(loopCurves[currCurve], endVal - currentPosition);\r\n                  AdjustParamsIfNecessary(newCurve, ref startParam, ref endParam);\r\n                  newCurve.MakeBound(startParam, endParam);\r\n               }\r\n\r\n               newLoopCurves.Add(newCurve);\r\n               break;\r\n            }\r\n         }\r\n\r\n         CurveLoop trimmedCurveLoop = new CurveLoop();\r\n         foreach (Curve curve in newLoopCurves)\r\n            trimmedCurveLoop.Append(curve);\r\n         return trimmedCurveLoop;\r\n      }\r\n\r\n      public static IList<CurveLoop> TrimCurveLoops(int id, IFCCurve ifcCurve, double startVal, double? origEndVal)\r\n      {\r\n         if (ifcCurve.CurveLoops == null)\r\n            return null;\r\n\r\n         if (!NeedsTrimming(startVal, origEndVal))\r\n            return ifcCurve.CurveLoops;\r\n\r\n         if (ifcCurve.CurveLoops.Count != 1)\r\n         {\r\n            Importer.TheLog.LogError(id, \"Ignoring potential trimming for disjoint curve.\", false);\r\n            return ifcCurve.CurveLoops;\r\n         }\r\n\r\n         CurveLoop trimmedDirectrix = TrimCurveLoop(id, ifcCurve, startVal, origEndVal);\r\n         if (trimmedDirectrix == null)\r\n            return null;\r\n\r\n         IList<CurveLoop> trimmedDirectrices = new List<CurveLoop>();\r\n         trimmedDirectrices.Add(trimmedDirectrix);\r\n         return trimmedDirectrices;\r\n      }\r\n\r\n      private class ShiftDistance\r\n      {\r\n         public static double GetScaledShiftDistance(int pass, out double unscaledDistance)\r\n         {\r\n            unscaledDistance = GetShiftDistanceInMM(pass);\r\n            return unscaledDistance * GetShiftDirection(pass) * OneMilliter;\r\n         }\r\n\r\n         private static double GetShiftDistanceInMM(int pass)\r\n         {\r\n            if (pass < 1 || pass > NumberOfPasses)\r\n               return 0.0;\r\n            return Distances[((pass - 1) >> 3)];\r\n         }\r\n\r\n         private static int GetShiftDirection(int pass)\r\n         {\r\n            return (pass % 2 == 1) ? 1 : -1;\r\n         }\r\n\r\n         private static readonly double[] Distances = new double[5] { 0.1, 0.25, 0.5, 0.75, 1.0 };\r\n\r\n         private static readonly int NumberOfNudgeDistances = 5;\r\n\r\n         public static int NumberOfPasses { get => NumberOfNudgeDistances * 8 + 1; }\r\n\r\n         private static readonly double OneMilliter = 1.0 / 304.8;\r\n      };\r\n      \r\n      /// <summary>\r\n      /// Execute a Boolean operation, and catch the exception.\r\n      /// </summary>\r\n      /// <param name=\"id\">The id of the object demanding the Boolean operation.</param>\r\n      /// <param name=\"secondId\">The id of the object providing the second solid.</param>\r\n      /// <param name=\"firstSolid\">The first solid parameter to ExecuteBooleanOperation.</param>\r\n      /// <param name=\"secondSolid\">The second solid parameter to ExecuteBooleanOperation.</param>\r\n      /// <param name=\"opType\">The Boolean operation type.</param>\r\n      /// <param name=\"suggestedShiftDirection\">If the Boolean operation fails, a unit vector used to retry with a small shift.  Can be null.</param>\r\n      /// <returns>The result of the Boolean operation, or the first solid if the operation fails.</returns>\r\n      public static Solid ExecuteSafeBooleanOperation(int id, int secondId, Solid firstSolid, Solid secondSolid, BooleanOperationsType opType, XYZ suggestedShiftDirection)\r\n      {\r\n         // Perform default operations if one of the arguments is null.\r\n         if (firstSolid == null || secondSolid == null)\r\n         {\r\n            if (firstSolid == null && secondSolid == null)\r\n               return null;\r\n\r\n            switch (opType)\r\n            {\r\n               case BooleanOperationsType.Union:\r\n                  {\r\n                     if (firstSolid == null)\r\n                        return secondSolid;\r\n\r\n                     return firstSolid;\r\n                  }\r\n               case BooleanOperationsType.Difference:\r\n                  {\r\n                     if (firstSolid == null)\r\n                        return null;\r\n\r\n                     return firstSolid;\r\n                  }\r\n               default:\r\n                  // for .Intersect\r\n                  return null;\r\n            }\r\n         }\r\n\r\n         Solid resultSolid = null;\r\n         bool failedAllAttempts = true;\r\n\r\n         // We will attempt to do the Boolean operation here.\r\n         // In the first pass, we will try to do the Boolean operation as-is.\r\n         // For subsequent passes, we will shift the second operand by a small distance in \r\n         // a given direction, using the following formula:\r\n         // We start with a 0.1mm shift, and try each of (up to 5) shift directions given by\r\n         // the shiftDirections list below, in alternating positive and negative directions.\r\n         // In none of these succeed, we will increment the distance by 1mm and try again\r\n         // until we reach numPasses.\r\n         // Boolean operations are expensive, and as such we want to limit the number of\r\n         // attempts we make here to balance fidelity and performance.  Initial experimentation\r\n         // suggests that a maximum 1mm shift is a good first start for this balance.\r\n         IList<XYZ> shiftDirections = new List<XYZ>()\r\n         {\r\n            suggestedShiftDirection,\r\n            XYZ.BasisZ,\r\n            XYZ.BasisX,\r\n            XYZ.BasisY\r\n         };\r\n\r\n         // 1 base, 8 possible nudges up to 1mm.\r\n         int numPasses = ShiftDistance.NumberOfPasses;\r\n         double currentShiftFactor = 0.0;\r\n         \r\n         for (int ii = 0; ii < numPasses; ii++)\r\n         {\r\n            try\r\n            {\r\n               resultSolid = null;\r\n\r\n               Solid secondOperand = secondSolid;\r\n               if (ii > 0)\r\n               {\r\n                  int shiftDirectionIndex = (ii - 1) % 4;\r\n                  XYZ shiftDirectionToUse = shiftDirections[shiftDirectionIndex];\r\n                  if (shiftDirectionToUse == null)\r\n                     continue;\r\n\r\n                  // Increase the shift distance after every 8 attempts.\r\n                  double scale = ShiftDistance.GetScaledShiftDistance(ii, out currentShiftFactor);\r\n                  Transform secondSolidShift = Transform.CreateTranslation(scale * shiftDirectionToUse);\r\n                  secondOperand = SolidUtils.CreateTransformed(secondOperand, secondSolidShift);\r\n               }\r\n\r\n               resultSolid = BooleanOperationsUtils.ExecuteBooleanOperation(firstSolid, secondOperand, opType);\r\n               failedAllAttempts = false;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n               string msg = ex.Message;\r\n\r\n               // This is the only error that we are trying to catch and fix.\r\n               // For any other error, we will re-throw.\r\n               if (!msg.Contains(\"Failed to perform the Boolean operation for the two solids\"))\r\n                  throw;\r\n\r\n               if (ii < numPasses - 1)\r\n                  continue;\r\n\r\n               Importer.TheLog.LogError(id, msg, false);\r\n               resultSolid = firstSolid;\r\n            }\r\n\r\n            if (SolidValidator.IsValidGeometry(resultSolid))\r\n            {\r\n               // If we got here not on out first attempt, generate a warning, unless we got here because we gave up on our 3rd attempt.\r\n               if (ii > 0 && !failedAllAttempts)\r\n               {\r\n                  Importer.TheLog.LogWarning(id, \"The second argument in the Boolean \" +\r\n                     opType.ToString() +\r\n                     \" operation was shifted by \" + currentShiftFactor +\r\n                     \"mm to allow the operation to succeed.  This may result in a very small difference in appearance.\", false);\r\n               }\r\n               return resultSolid;\r\n            }\r\n         }\r\n\r\n         Importer.TheLog.LogError(id, opType.ToString() + \" operation failed with void from #\" + secondId.ToString(), false);\r\n         return firstSolid;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a list of meshes out a solid by triangulating the faces.\r\n      /// </summary>\r\n      /// <param name=\"solid\">The original solid.</param>\r\n      /// <returns>A list of meshes created from the triangulation of the solid's faces.</returns>\r\n      public static IList<GeometryObject> CreateMeshesFromSolid(Solid solid)\r\n      {\r\n         IList<GeometryObject> triangulations = new List<GeometryObject>();\r\n\r\n         foreach (Face face in solid.Faces)\r\n         {\r\n            Mesh faceMesh = face.Triangulate();\r\n            if (faceMesh != null && faceMesh.NumTriangles > 0)\r\n               triangulations.Add(faceMesh);\r\n         }\r\n\r\n         return triangulations;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Return a solid corresponding to the volume represented by boundingBoxXYZ. \r\n      /// </summary>\r\n      /// <param name=\"lcs\">The local coordinate system of the bounding box; if null, assume the Identity transform.</param>\r\n      /// <param name=\"boundingBoxXYZ\">The bounding box.</param>\r\n      /// <param name=\"solidOptions\">The options for creating the solid.  Allow null to mean default.</param>\r\n      /// <returns>A solid of the same size and orientation as boundingBoxXYZ, or null if boundingBoxXYZ is invalid or null.</returns>\r\n      /// <remarks>We don't do any checking on the input transform, which could have non-uniform scaling and/or mirroring.\r\n      /// This could potentially lead to unexpected results, which we can examine if and when such cases arise.</remarks>\r\n      public static Solid CreateSolidFromBoundingBox(Transform lcs, BoundingBoxXYZ boundingBoxXYZ, SolidOptions solidOptions)\r\n      {\r\n         // Check that the bounding box is valid.\r\n         if (boundingBoxXYZ == null || !boundingBoxXYZ.Enabled)\r\n            return null;\r\n\r\n         try\r\n         {\r\n            // Create a transform based on the incoming local coordinate system and the bounding box coordinate system.\r\n            Transform bboxTransform = (lcs == null) ? boundingBoxXYZ.Transform : lcs.Multiply(boundingBoxXYZ.Transform);\r\n\r\n            XYZ[] profilePts = new XYZ[4];\r\n            profilePts[0] = bboxTransform.OfPoint(boundingBoxXYZ.Min);\r\n            profilePts[1] = bboxTransform.OfPoint(new XYZ(boundingBoxXYZ.Max.X, boundingBoxXYZ.Min.Y, boundingBoxXYZ.Min.Z));\r\n            profilePts[2] = bboxTransform.OfPoint(new XYZ(boundingBoxXYZ.Max.X, boundingBoxXYZ.Max.Y, boundingBoxXYZ.Min.Z));\r\n            profilePts[3] = bboxTransform.OfPoint(new XYZ(boundingBoxXYZ.Min.X, boundingBoxXYZ.Max.Y, boundingBoxXYZ.Min.Z));\r\n\r\n            XYZ upperRightXYZ = bboxTransform.OfPoint(boundingBoxXYZ.Max);\r\n\r\n            // If we assumed that the transforms had no scaling, \r\n            // then we could simply take boundingBoxXYZ.Max.Z - boundingBoxXYZ.Min.Z.\r\n            // This code removes that assumption.\r\n            XYZ origExtrusionVector = new XYZ(boundingBoxXYZ.Min.X, boundingBoxXYZ.Min.Y, boundingBoxXYZ.Max.Z) - boundingBoxXYZ.Min;\r\n            XYZ extrusionVector = bboxTransform.OfVector(origExtrusionVector);\r\n\r\n            double extrusionDistance = extrusionVector.GetLength();\r\n            XYZ extrusionDirection = extrusionVector.Normalize();\r\n\r\n            CurveLoop baseLoop = new CurveLoop();\r\n\r\n            for (int ii = 0; ii < 4; ii++)\r\n            {\r\n               baseLoop.Append(Line.CreateBound(profilePts[ii], profilePts[(ii + 1) % 4]));\r\n            }\r\n\r\n            IList<CurveLoop> baseLoops = new List<CurveLoop>();\r\n            baseLoops.Add(baseLoop);\r\n\r\n            if (solidOptions == null)\r\n               return GeometryCreationUtilities.CreateExtrusionGeometry(baseLoops, extrusionDirection, extrusionDistance);\r\n            else\r\n               return GeometryCreationUtilities.CreateExtrusionGeometry(baseLoops, extrusionDirection, extrusionDistance, solidOptions);\r\n         }\r\n         catch\r\n         {\r\n            return null;\r\n         }\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Checks if a Solid is valid for use in a generic DirectShape or DirecShapeType.\r\n      /// </summary>\r\n      /// <param name=\"solid\"></param>\r\n      /// <returns></returns>\r\n      public static bool ValidateGeometry(Solid solid)\r\n      {\r\n         return SolidValidator.IsValidGeometry(solid);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Delete the element used for solid validation, if it exists.\r\n      /// </summary>\r\n      public static void DeleteSolidValidator()\r\n      {\r\n         if (m_SolidValidator != null)\r\n         {\r\n            IFCImportFile.TheFile.Document.Delete(SolidValidator.Id);\r\n            m_SolidValidator = null;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check for any occurence where distance of two vertices are too narrow (within the tolerance)\r\n      /// </summary>\r\n      /// <param name=\"entityId\">The integer number representing the current IFC entity Id</param>\r\n      /// <param name=\"shapeEditScope\">the shapeEditScope</param>\r\n      /// <param name=\"inputVerticesList\">Input list of the vertices</param>\r\n      /// <param name=\"outputVerticesList\">Output List of the valid vertices, i.e. not vertices that are too close to each other</param>\r\n      /// <returns></returns>\r\n      public static void CheckAnyDistanceVerticesWithinTolerance(int entityId,\r\n         IFCImportShapeEditScope shapeEditScope, IList<XYZ> inputVerticesList, out List<XYZ> outputVerticesList)\r\n      {\r\n         // Check triangle that is too narrow (2 vertices are within the tolerance)\r\n         double shortSegmentTolerance = shapeEditScope.GetShortSegmentTolerance();\r\n\r\n         int lastVertex = 0;\r\n         List<XYZ> vertList = new List<XYZ>();\r\n         for (int ii = 1; ii <= inputVerticesList.Count; ii++)\r\n         {\r\n            int currIdx = (ii % inputVerticesList.Count);\r\n\r\n            double dist = inputVerticesList[lastVertex].DistanceTo(inputVerticesList[currIdx]);\r\n            if (dist >= shortSegmentTolerance)\r\n            {\r\n               vertList.Add(inputVerticesList[lastVertex]);\r\n               lastVertex = currIdx;\r\n            }\r\n            else if (Importer.TheOptions.VerboseLogging)\r\n            {\r\n               // Because of the way garbage collection works with the API, calling FormatLengthAsString too often\r\n               // (i.e. millions of times) can cause IFC import to run out of memory.  As such, we limit the\r\n               // calls to VerboseLogging only, which is used for debugging.\r\n\r\n               string distAsString = IFCUnitUtil.FormatLengthAsString(dist);\r\n               string shortDistAsString = IFCUnitUtil.FormatLengthAsString(shortSegmentTolerance);\r\n               string warningString = \"Distance between vertices \" + lastVertex + \" and \" + currIdx +\r\n                                       \" is \" + distAsString + \", which is less than the minimum distance of \" +\r\n                                       shortDistAsString + \", removing second point.\";\r\n\r\n               Importer.TheLog.LogComment(entityId, warningString, false);\r\n            }\r\n         }\r\n\r\n         // The loop can contain useless overlapping segments (espessially after too close vertices removing)\r\n         List<XYZ> noOverlapList = new List<XYZ>();         \r\n         RemoveOverlappingSegments(vertList, out noOverlapList);\r\n         outputVerticesList = noOverlapList;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Remove vertices that create useless overlapping segments\r\n      /// </summary>\r\n      /// <param name=\"inputVerticesList\">Input list of the vertices</param>\r\n      /// <param name=\"outputVerticesList\">Output List of the valid vertices</param>\r\n      /// <returns></returns>\r\n      public static void RemoveOverlappingSegments(IList<XYZ> inputVerticesList, out List<XYZ> outputVerticesList)\r\n      {\r\n         List<XYZ> vertList = new List<XYZ>();\r\n         outputVerticesList = vertList;\r\n\r\n         if (inputVerticesList.Count > 2)\r\n            for (int ii = 0; ii < inputVerticesList.Count; ii++)\r\n            {\r\n               XYZ prevPt = inputVerticesList[(ii > 0) ? ii - 1 : inputVerticesList.Count - 1];\r\n               XYZ currPt = inputVerticesList[ii]; \r\n               XYZ nextPt = inputVerticesList[(ii + 1) % inputVerticesList.Count];\r\n\r\n               // Do not add current point if prev point lays on the next segment\r\n               // or next point is on the prev segment\r\n               if (prevPt.DistanceTo(currPt) + prevPt.DistanceTo(nextPt) > currPt.DistanceTo(nextPt) + MathUtil.Eps() &&\r\n                   nextPt.DistanceTo(currPt) + nextPt.DistanceTo(prevPt) > currPt.DistanceTo(prevPt) + MathUtil.Eps())\r\n                  vertList.Add(currPt);\r\n            }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates a list of knots from a list of distinct knots and a list of knot multiplicities\r\n      /// </summary>\r\n      /// <param name=\"knotMultiplicities\">The list of knots multiplicities</param>\r\n      /// <param name=\"knots\">The list of distinct knots</param>\r\n      /// <returns>The list of knots</returns>\r\n      public static IList<double> ConvertIFCKnotsToRevitKnots(IList<int> knotMultiplicities, IList<double> knots)\r\n      {\r\n         if (knotMultiplicities == null || knots == null)\r\n            return null;\r\n         if (knotMultiplicities.Count != knots.Count)\r\n            return null;\r\n\r\n         IList<double> revitKnots = new List<double>();\r\n         for (int ii = 0; ii < knots.Count; ii++)\r\n         {\r\n            int multiplicity = knotMultiplicities[ii];\r\n            double knotValue = knots[ii];\r\n\r\n            for (int count = 0; count < multiplicity; count++)\r\n            {\r\n               revitKnots.Add(knotValue);\r\n            }\r\n         }\r\n\r\n         return revitKnots;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Geometry/IFCPoint.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Data;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Geometry\r\n{\r\n   /// <summary>\r\n   /// Provides methods to process IfcPoints and IfcDirection.\r\n   /// IfcPoint can be of type IfcCartesianPoint, IfcPointOnCurve or IfcPointOnSurface.\r\n   /// Only IfcCartesianPoint and IfcDirection is supported currently.\r\n   /// </summary>\r\n   public class IFCPoint : IFCRepresentationItem\r\n   {\r\n      /// <summary>\r\n      /// The XYZ value of the point.\r\n      /// </summary>\r\n      public XYZ XYZPoint { get; protected set; } = null;\r\n\r\n      private enum IFCPointType\r\n      {\r\n         DontCare,\r\n         UVPoint,\r\n         XYZPoint\r\n      }\r\n\r\n      private static XYZ ListToXYZ(IList<double> coordinates)\r\n      {\r\n         int numCoordinates = coordinates.Count;\r\n\r\n         switch (numCoordinates)\r\n         {\r\n            case 0: return new XYZ(0, 0, 0);\r\n            case 1: return new XYZ(coordinates[0], 0, 0);\r\n            case 2: return new XYZ(coordinates[0], coordinates[1], 0);\r\n            default: return new XYZ(coordinates[0], coordinates[1], coordinates[2]);\r\n         }\r\n      }\r\n\r\n      private static void AddToCaches(int stepId, IFCEntityType entityType, XYZ xyz)\r\n      {\r\n         if (xyz != null)\r\n            IFCImportFile.TheFile.XYZMap[stepId] = xyz;\r\n         Importer.TheLog.AddProcessedEntity(entityType);\r\n      }\r\n\r\n      // This routine does no validity checking on the point, but does on attributes.\r\n      private static XYZ ProcessIFCCartesianPointInternal(IFCAnyHandle point, IFCPointType expectedCoordinates)\r\n      {\r\n         IList<double> coordinates = IFCAnyHandleUtil.GetCoordinates(point);\r\n         int numCoordinates = coordinates.Count;\r\n         if (numCoordinates < 2)\r\n         {\r\n            //LOG: Warning: Expected at least 2 coordinates for IfcCartesianPoint, found {numCoordinates}.\r\n         }\r\n         else if (numCoordinates > 3)\r\n         {\r\n            //LOG: Warning: Expected at most 3 coordinates for IfcCartesianPoint, found {numCoordinates}.\r\n         }\r\n\r\n         if (expectedCoordinates != IFCPointType.DontCare)\r\n         {\r\n            if ((expectedCoordinates == IFCPointType.UVPoint) && (numCoordinates != 2))\r\n            {\r\n               //LOG: Warning: Expected 2 coordinates for IfcCartesianPoint, found {numCoordinates}.\r\n               if (numCoordinates > 2)\r\n                  numCoordinates = 2;\r\n            }\r\n            else if ((expectedCoordinates == IFCPointType.XYZPoint) && (numCoordinates != 3))\r\n            {\r\n               //LOG: Warning: Expected 3 coordinates for IfcCartesianPoint, found {numCoordinates}.\r\n               if (numCoordinates > 3)\r\n                  numCoordinates = 3;\r\n            }\r\n         }\r\n\r\n         return ListToXYZ(coordinates);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts an IfcCartesianPoint into a UV or XYZ value.\r\n      /// </summary>\r\n      /// <param name=\"point\">The handle to the IfcPoint.</param>\r\n      /// <returns>An XYZ value corresponding to the value in the file.  There are no transformations done in this routine.\r\n      /// If the return is an XY point, the Z value will be set to 0.</returns>\r\n      public static XYZ ProcessIFCCartesianPoint(IFCAnyHandle point)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(point))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcCartesianPoint);\r\n            return null;\r\n         }\r\n\r\n         XYZ xyz;\r\n         int stepId = point.StepId;\r\n         if (IFCImportFile.TheFile.XYZMap.TryGetValue(stepId, out xyz))\r\n            return xyz;\r\n\r\n         if (IFCAnyHandleUtil.IsTypeOf(point, IFCEntityType.IfcCartesianPoint))\r\n            xyz = ProcessIFCCartesianPointInternal(point, IFCPointType.DontCare);\r\n         else\r\n         {\r\n            Importer.TheLog.LogUnhandledSubTypeError(point, IFCEntityType.IfcCartesianPoint, false);\r\n            return null;\r\n         }\r\n\r\n         AddToCaches(stepId, IFCEntityType.IfcCartesianPoint, xyz);\r\n         return xyz;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the XYZ corresponding to the IfcCartesianPoint, scaled by the length scale.\r\n      /// </summary>\r\n      /// <param name=\"point\">The IfcCartesianPoint entity handle.</param>\r\n      /// <returns>The scaled XYZ value.</returns>\r\n      public static XYZ ProcessScaledLengthIFCCartesianPoint(IFCAnyHandle point)\r\n      {\r\n         XYZ xyz = ProcessIFCCartesianPoint(point);\r\n         if (xyz != null)\r\n            xyz = IFCUnitUtil.ScaleLength(xyz);\r\n         return xyz;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the XYZ values corresponding to a list of IfcCartesianPoints, scaled by the length scale.\r\n      /// </summary>\r\n      /// <param name=\"points\">The IfcCartesianPoint entity handles.</param>\r\n      /// <returns>The scaled XYZ values.</returns>\r\n      public static IList<XYZ> ProcessScaledLengthIFCCartesianPoints(IList<IFCAnyHandle> points)\r\n      {\r\n         if (points == null)\r\n            return null;\r\n\r\n         IList<XYZ> xyzs = new List<XYZ>();\r\n         foreach (IFCAnyHandle point in points)\r\n         {\r\n            XYZ xyz = ProcessIFCCartesianPoint(point);\r\n            if (xyz == null)\r\n               continue;   // TODO: WARN\r\n            xyzs.Add(xyz);\r\n         }\r\n\r\n         IFCUnitUtil.ProjectScale(SpecTypeId.Length, xyzs);\r\n         return xyzs;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts an IfcCartesianPoint into an UV value.\r\n      /// </summary>\r\n      /// <param name=\"point\">The handle to the IfcPoint.</param>\r\n      /// <returns>A UV value corresponding to the value in the file.  There are no transformations done in this routine.</returns>\r\n      public static UV ProcessIFCCartesianPoint2D(IFCAnyHandle point)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(point))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcCartesianPoint);\r\n            return null;\r\n         }\r\n\r\n         XYZ xyz;\r\n         int stepId = point.StepId;\r\n         if (IFCImportFile.TheFile.XYZMap.TryGetValue(stepId, out xyz))\r\n            return new UV(xyz.X, xyz.Y);\r\n\r\n         if (IFCAnyHandleUtil.IsTypeOf(point, IFCEntityType.IfcCartesianPoint))\r\n         {\r\n            xyz = ProcessIFCCartesianPointInternal(point, IFCPointType.UVPoint);\r\n         }\r\n         else\r\n         {\r\n            Importer.TheLog.LogUnhandledSubTypeError(point, IFCEntityType.IfcCartesianPoint, false);\r\n            return null;\r\n         }\r\n\r\n         AddToCaches(stepId, IFCEntityType.IfcCartesianPoint, xyz);\r\n         return new UV(xyz.X, xyz.Y);\r\n      }\r\n\r\n      private static XYZ ProcessIFCPointInternal(IFCAnyHandle point, IFCPointType expectedCoordinates)\r\n      {\r\n         if (IFCAnyHandleUtil.IsTypeOf(point, IFCEntityType.IfcCartesianPoint))\r\n            return ProcessIFCCartesianPointInternal(point, IFCPointType.DontCare);\r\n\r\n         Importer.TheLog.LogUnhandledSubTypeError(point, IFCEntityType.IfcCartesianPoint, false);\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts an IfcPoint into an XYZ value.\r\n      /// </summary>\r\n      /// <param name=\"point\">The handle to the IfcPoint.</param>\r\n      /// <returns>An XYZ value corresponding to the value in the file.  If the IfcPoint is 2D,\r\n      /// the Z value will be 0.\r\n      /// There are no transformations done in this routine.</returns>\r\n      public static XYZ IFCPointToXYZ(IFCAnyHandle point)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(point))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcCartesianPoint);\r\n            return null;\r\n         }\r\n\r\n         XYZ xyz;\r\n         int stepId = point.StepId;\r\n         if (IFCImportFile.TheFile.XYZMap.TryGetValue(stepId, out xyz))\r\n            return xyz;\r\n\r\n         xyz = ProcessIFCPointInternal(point, IFCPointType.DontCare);\r\n         AddToCaches(stepId, IFCEntityType.IfcCartesianPoint, xyz);\r\n         return xyz;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCPoint object from a handle of type IfcPoint.\r\n      /// </summary>\r\n      /// <param name=\"ifcPoint\">The IFC handle.</param>\r\n      /// <returns>The IFCPoint object.</returns>\r\n      public static IFCPoint ProcessIFCPoint(IFCAnyHandle ifcPoint)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcPoint))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPoint);\r\n            return null;\r\n         }\r\n\r\n         IFCEntity point;\r\n         if (!IFCImportFile.TheFile.EntityMap.TryGetValue(ifcPoint.StepId, out point))\r\n            point = new IFCPoint(ifcPoint);\r\n         return (point as IFCPoint);\r\n      }\r\n\r\n      protected IFCPoint()\r\n      {\r\n      }\r\n\r\n      protected IFCPoint(IFCAnyHandle item)\r\n      {\r\n         Process(item);\r\n      }\r\n\r\n      protected override void Process(IFCAnyHandle ifcPoint)\r\n      {\r\n         base.Process(ifcPoint);\r\n\r\n         XYZ unScaledPoint = IFCPoint.IFCPointToXYZ(ifcPoint);\r\n         XYZPoint = IFCUnitUtil.ScaleLength(unScaledPoint);\r\n      }\r\n\r\n      private static XYZ ProcessIFCDirectionBase(IFCAnyHandle direction, bool normalize, bool reportAndThrowOnError)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(direction))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcDirection);\r\n            return null;\r\n         }\r\n\r\n         if (!IFCAnyHandleUtil.IsValidSubTypeOf(direction, IFCEntityType.IfcDirection))\r\n         {\r\n            Importer.TheLog.LogUnexpectedTypeError(direction, IFCEntityType.IfcDirection, false);\r\n            return null;\r\n         }\r\n\r\n         XYZ xyz = null;\r\n         int stepId = direction.StepId;\r\n         if (normalize)\r\n         {\r\n            if (IFCImportFile.TheFile.NormalizedXYZMap.TryGetValue(stepId, out xyz))\r\n               return xyz;\r\n         }\r\n         else\r\n         {\r\n            if (IFCImportFile.TheFile.XYZMap.TryGetValue(stepId, out xyz))\r\n               return xyz;\r\n         }\r\n\r\n         List<double> directionRatios = IFCAnyHandleUtil.GetAggregateDoubleAttribute<List<double>>(direction, \"DirectionRatios\");\r\n         xyz = ListToXYZ(directionRatios);\r\n         XYZ normalizedXYZ = null;\r\n         if (xyz != null)\r\n         {\r\n            if (normalize)\r\n            {\r\n               normalizedXYZ = xyz.Normalize();\r\n               if (normalizedXYZ.IsZeroLength())\r\n               {\r\n                  if (reportAndThrowOnError)\r\n                     Importer.TheLog.LogError(stepId, \"Local transform contains 0 length vectors.\", true);\r\n                  else\r\n                     return XYZ.Zero;\r\n               }\r\n               IFCImportFile.TheFile.NormalizedXYZMap[direction.StepId] = normalizedXYZ;\r\n            }\r\n            AddToCaches(stepId, IFCEntityType.IfcDirection, xyz);\r\n         }\r\n         return normalize ? normalizedXYZ : xyz;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts an IfcDirection into a UV or XYZ value.\r\n      /// </summary>\r\n      /// <param name=\"direction\">The handle to the IfcDirection.</param>\r\n      /// <returns>An XYZ value corresponding to the value in the file.  There are no transformations done in this routine.\r\n      /// If the return is an XY point, the Z value will be set to 0.</returns>\r\n      public static XYZ ProcessIFCDirection(IFCAnyHandle direction)\r\n      {\r\n         return ProcessIFCDirectionBase(direction, false, true);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts an IfcDirection into a normalized UV or XYZ value.\r\n      /// </summary>\r\n      /// <param name=\"direction\">The handle to the IfcDirection.</param>\r\n      /// <param name=\"reportAndThrowError\">If true, report and throw an error if the direction is invalid.  \r\n      /// If false, it is up to the calling function to deal with an invalid direction.</param>\r\n      /// <returns>An XYZ value corresponding to the value in the file.  There are no transformations done in this routine.\r\n      /// If the return is an XY point, the Z value will be set to 0.</returns>\r\n      public static XYZ ProcessNormalizedIFCDirection(IFCAnyHandle direction, bool reportAndThrowError = true)\r\n      {\r\n         return ProcessIFCDirectionBase(direction, true, reportAndThrowError);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts an IfcVector into a UV or XYZ value.\r\n      /// </summary>\r\n      /// <param name=\"vector\">The handle to the IfcVector.</param>\r\n      /// <returns>An XYZ value corresponding to the value in the file.  There are no transformations done in this routine.\r\n      /// If the return is an XY point, the Z value will be set to 0.</returns>\r\n      public static XYZ ProcessScaledLengthIFCVector(IFCAnyHandle vector)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(vector))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcVector);\r\n            return null;\r\n         }\r\n\r\n         if (!IFCAnyHandleUtil.IsValidSubTypeOf(vector, IFCEntityType.IfcVector))\r\n         {\r\n            Importer.TheLog.LogUnexpectedTypeError(vector, IFCEntityType.IfcVector, false);\r\n            return null;\r\n         }\r\n\r\n         XYZ xyz;\r\n         int stepId = vector.StepId;\r\n         if (IFCImportFile.TheFile.XYZMap.TryGetValue(stepId, out xyz))\r\n            return xyz;\r\n\r\n         IFCAnyHandle direction = IFCImportHandleUtil.GetRequiredInstanceAttribute(vector, \"Orientation\", false);\r\n         if (direction == null)\r\n            return null;\r\n\r\n         bool found = false;\r\n         double magnitude = IFCImportHandleUtil.GetRequiredScaledLengthAttribute(vector, \"Magnitude\", out found);\r\n         if (!found)\r\n            magnitude = 1.0;\r\n\r\n         XYZ directionXYZ = IFCPoint.ProcessIFCDirection(direction);\r\n         if (directionXYZ == null)\r\n            return null;\r\n\r\n         xyz = directionXYZ * magnitude;\r\n         AddToCaches(stepId, IFCEntityType.IfcVector, xyz);\r\n         return xyz;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      override protected void CreateShapeInternal(IFCImportShapeEditScope shapeEditScope, \r\n         Transform scaledLcs, string guid)\r\n      {\r\n         if (XYZPoint == null)\r\n            return;\r\n\r\n         XYZ transformedPoint = scaledLcs.OfPoint(XYZPoint);\r\n         if (transformedPoint == null)\r\n            return;\r\n         \r\n         ElementId gstyleId = shapeEditScope.GraphicsStyleId;\r\n         Category pointCategory = IFCCategoryUtil.GetSubCategoryForRepresentation(shapeEditScope.Document, Id, shapeEditScope.ContainingRepresentation.Identifier);\r\n         if (pointCategory != null)\r\n         {\r\n            GraphicsStyle graphicsStyle = pointCategory.GetGraphicsStyle(GraphicsStyleType.Projection);\r\n            if (graphicsStyle != null)\r\n               gstyleId = graphicsStyle.Id;\r\n         }\r\n         \r\n         Point point = Point.Create(transformedPoint, gstyleId);\r\n         if (point == null)\r\n            return;\r\n\r\n         shapeEditScope.AddGeometry(IFCSolidInfo.Create(Id, point));\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Geometry/IFCVirtualGridIntersection.cs",
    "content": "﻿//\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\n// Copyright (C) 2013-2020  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing Autodesk.Revit.DB;\nusing Autodesk.Revit.DB.IFC;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Import.Data;\n\nnamespace Revit.IFC.Import.Geometry\n{\n   /// <summary>\n   /// Represents an IfcVirtualGridIntersection entity, used in \n   /// IfcGridLocalPlacement to provide positioning.\n   /// </summary>\n   public class IFCVirtualGridIntersection : IFCEntity\n   {\n      /// <summary>\n      /// The calculated LCS determined by this entity.\n      /// </summary>\n      public Transform LocalCoordinateSystem { get; protected set; } = null;\n\n      /// <summary>\n      /// The 2 intersecting axes that help determine the location point of the \n      /// placement.\n      /// </summary>\n      public IList<IFCGridAxis> IntersectingAxes { get; protected set; } = null;\n\n      /// <summary>\n      /// The optional list of offset distances to the grid axes.  The list must\n      /// either be null, or contain either 2 or 3 items.\n      /// </summary>\n      public IList<double> OffsetDistances { get; protected set; } = null;\n\n      protected IFCVirtualGridIntersection()\n      {\n      }\n\n      protected IFCVirtualGridIntersection(IFCAnyHandle item)\n      {\n         Process(item);\n      }\n\n      private XYZ GetReferenceVector(Curve curve)\n      {\n         XYZ referenceDir = null;\n\n         // IfcVirtualGridIntersection is intended to be used for line or arc grid lines\n         Line firstLine = curve as Line;\n         if (firstLine != null)\n         {\n            XYZ firstDirection = firstLine.Direction;\n            XYZ initialRefDir = XYZ.BasisZ;\n            if (!MathUtil.VectorsAreParallel(firstDirection, initialRefDir))\n            {\n               XYZ secondDirection = initialRefDir.CrossProduct(firstDirection).Normalize();\n               referenceDir = firstDirection.CrossProduct(secondDirection);\n            }\n         }\n         else\n         {\n            Arc arc = curve as Arc;\n            if (arc != null)\n            {\n               referenceDir = arc.Normal;\n            }\n         }\n\n         if (referenceDir == null)\n         {\n            Importer.TheLog.LogError(Id, \"Can't determine normal of grid intersection lines, assuming Z direction.\", false);\n            referenceDir = XYZ.BasisZ;\n         }\n         \n         return referenceDir;\n      }\n\n      protected override void Process(IFCAnyHandle ifcVirtualGridIntersection)\n      {\n         base.Process(ifcVirtualGridIntersection);\n\n         IList<IFCAnyHandle> intersectingAxes = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(ifcVirtualGridIntersection, \"IntersectingAxes\");\n         if (intersectingAxes == null || \n            intersectingAxes.Count != 2 || \n            IFCAnyHandleUtil.IsNullOrHasNoValue(intersectingAxes[0]) ||\n            IFCAnyHandleUtil.IsNullOrHasNoValue(intersectingAxes[1]))\n         {\n            Importer.TheLog.LogError(ifcVirtualGridIntersection.StepId, \"Missing or invalid intersecting axes.\", false);\n            return;\n         }\n\n         IFCGridAxis firstAxis = IFCGridAxis.ProcessIFCGridAxis(intersectingAxes[0]);\n         if (firstAxis == null)\n            return;\n         \n         IFCGridAxis secondAxis = IFCGridAxis.ProcessIFCGridAxis(intersectingAxes[1]);\n         if (secondAxis == null)\n            return;\n       \n         OffsetDistances = IFCAnyHandleUtil.GetAggregateDoubleAttribute<List<double>>(ifcVirtualGridIntersection, \"OffsetDistances\");\n         double[] offsetDistances = new double[3];\n         int offsetDistanceCount = (OffsetDistances != null) ? OffsetDistances.Count : 0;\n         for (int ii = 0; ii < 3; ii++)\n         {\n            offsetDistances[ii] = (offsetDistanceCount > ii) ? OffsetDistances[ii] : 0;\n         }\n\n         Curve firstCurve = firstAxis.GetAxisCurveForGridPlacement();\n         if (firstCurve == null)\n            return;\n\n         Curve secondCurve = secondAxis.GetAxisCurveForGridPlacement();\n         if (secondCurve == null)\n            return;\n\n         // We need to figure out the reference vector to do the offset, but we can't get\n         // the reference vector without getting the tangent at the intersection point.\n         // We will use a heuristic in GetReferenceVector to guess based on the curve types.\n         XYZ referenceVector = GetReferenceVector(firstCurve);\n         Curve firstOffsetCurve = (!MathUtil.IsAlmostZero(offsetDistances[0])) ? \n            firstCurve.CreateOffset(offsetDistances[0], referenceVector) : firstCurve;\n         Curve secondOffsetCurve = (!MathUtil.IsAlmostZero(offsetDistances[1])) ?\n            secondCurve.CreateOffset(offsetDistances[1], referenceVector) : secondCurve;\n\n         CurveIntersectResult result = firstOffsetCurve.Intersect(secondOffsetCurve, CurveIntersectResultOption.Detailed);\n         if (   null == result \n             || result.Result != SetComparisonResult.Overlap \n             || result.GetOverlaps()?.Count != 1)\n         {\n            return;\n         }\n\n         CurveOverlapPoint intersectionPoint = result.GetOverlaps()[0];\n         XYZ origin = intersectionPoint.Point + offsetDistances[2] * referenceVector;\n         Transform derivatives = firstCurve.ComputeDerivatives(intersectionPoint.FirstParameter, false);\n         LocalCoordinateSystem = Transform.CreateTranslation(origin);\n         LocalCoordinateSystem.BasisX = derivatives.BasisX;\n         LocalCoordinateSystem.BasisY = referenceVector.CrossProduct(derivatives.BasisX);\n         LocalCoordinateSystem.BasisZ = referenceVector;\n      }\n\n      /// <summary>\n      /// Processes an IfcVirtualGridIntersection object.\n      /// </summary>\n      /// <param name=\"ifcVirtualGridIntersection\">The IfcVirtualGridIntersection handle.</param>\n      /// <returns>The IFCVirtualGridIntersection object.</returns>\n      public static IFCVirtualGridIntersection ProcessIFCVirtualGridIntersection(IFCAnyHandle ifcVirtualGridIntersection)\n      {\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcVirtualGridIntersection))\n         {\n            Importer.TheLog.LogNullError(IFCEntityType.IfcVirtualGridIntersection);\n            return null;\n         }\n\n         IFCEntity virtualGridIntersection;\n         if (IFCImportFile.TheFile.EntityMap.TryGetValue(ifcVirtualGridIntersection.StepId, out virtualGridIntersection))\n            return (virtualGridIntersection as IFCVirtualGridIntersection);\n\n         return new IFCVirtualGridIntersection(ifcVirtualGridIntersection);\n      }\n\n   }\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Geometry/IIFCBooleanOperand.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Import.Utility;\r\n\r\nnamespace Revit.IFC.Import.Geometry\r\n{\r\n   /// <summary>\r\n   /// Interface that contains shared functions for IfcBooleanOperand\r\n   /// </summary>\r\n   public interface IIFCBooleanOperand\r\n   {\r\n      /// <summary>\r\n      /// Return geometry for a particular representation item.\r\n      /// </summary>\r\n      /// <param name=\"shapeEditScope\">The geometry creation scope.</param>\r\n      /// <param name=\"scaledLcs\">Local coordinate system for the geometry, including scale, potentially non-uniform.</param>\r\n      /// <param name=\"guid\">The guid of an element for which represntation is being created.</param>\r\n      /// <returns>Zero or more created Solids.</returns>\r\n      IList<GeometryObject> CreateGeometry(\r\n            IFCImportShapeEditScope shapeEditScope, Transform scaledLcs, string guid);\r\n\r\n      /// <summary>\r\n      /// In case of a Boolean operation failure, provide a recommended direction to shift the geometry in for a second attempt.\r\n      /// </summary>\r\n      /// <param name=\"lcs\">The local transform for this entity.</param>\r\n      /// <returns>An XYZ representing a unit direction vector, or null if no direction is suggested.</returns>\r\n      /// <remarks>If the 2nd attempt fails, a third attempt will be done with a shift in the opposite direction.</remarks>\r\n      XYZ GetSuggestedShiftDirection(Transform lcs);\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Importer.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.ApplicationServices;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.ExternalService;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Import.Data;\r\nusing Revit.IFC.Import.Properties;\r\nusing Revit.IFC.Import.Utility;\r\nusing IFCImportOptions = Revit.IFC.Import.Utility.IFCImportOptions;\r\nusing Revit.IFC.Import.Core;\r\nusing static Revit.IFC.Import.Utility.IFCImportOptions;\r\n\r\nnamespace Revit.IFC.Import\r\n{\r\n   /// <summary>\r\n   /// This class implements the method of interface IExternalDBApplication to register the IFC import client to Autodesk Revit.\r\n   /// </summary>\r\n   class ImporterApplication : IExternalDBApplication\r\n   {\r\n      #region IExternalDBApplication Members\r\n\r\n      public static Autodesk.Revit.ApplicationServices.ControlledApplication RevitApplication { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// The method called when Autodesk Revit exits.\r\n      /// </summary>\r\n      /// <param name=\"application\">Controlled application to be shutdown.</param>\r\n      /// <returns>Return the status of the external application.</returns>\r\n      public ExternalDBApplicationResult OnShutdown(Autodesk.Revit.ApplicationServices.ControlledApplication application)\r\n      {\r\n         return ExternalDBApplicationResult.Succeeded;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The method called when Autodesk Revit starts.\r\n      /// </summary>\r\n      /// <param name=\"application\">Controlled application to be loaded to Autodesk Revit process.</param>\r\n      /// <returns>Return the status of the external application.</returns>\r\n      public ExternalDBApplicationResult OnStartup(Autodesk.Revit.ApplicationServices.ControlledApplication application)\r\n      {\r\n         // As an ExternalServer, the importer cannot be registered until full application initialization. Setup an event callback to do this\r\n         // at the appropriate time.\r\n         RevitApplication = application;\r\n         application.ApplicationInitialized += OnApplicationInitialized;\r\n         return ExternalDBApplicationResult.Succeeded;\r\n      }\r\n\r\n      #endregion\r\n\r\n      /// <summary>\r\n      /// The action taken on application initialization.\r\n      /// </summary>\r\n      /// <param name=\"sender\">The sender.</param>\r\n      /// <param name=\"eventArgs\">The event args.</param>\r\n      private void OnApplicationInitialized(object sender, EventArgs eventArgs)\r\n      {\r\n         SingleServerService service = ExternalServiceRegistry.GetService(ExternalServices.BuiltInExternalServices.IFCImporterService) as SingleServerService;\r\n         if (service != null)\r\n         {\r\n            Importer importer = new Importer();\r\n            service.AddServer(importer);\r\n            service.SetActiveServer(importer.GetServerId());\r\n         }\r\n         else\r\n            throw new InvalidOperationException(\"Failed to get IFC importer service.\");\r\n      } \r\n   }\r\n\r\n   /// <summary>\r\n   /// This class implements the method of interface IIFCImporterServer to perform an import from IFC. \r\n   /// </summary>\r\n   public class Importer : IIFCImporterServer\r\n   {\r\n      #region IIFCImporterServer Members\r\n\r\n      IFCImportOptions m_ImportOptions = null;\r\n\r\n      IFCImportCache m_ImportCache = null;\r\n\r\n      IFCImportLog m_ImportLog = null;\r\n\r\n      private static HashSet<FailureDefinitionId> m_ImportPostedErrors = null;\r\n\r\n      /// <summary>\r\n      /// Add an error or warning that will be posted to a document in a future link transaction.\r\n      /// </summary>\r\n      /// <param name=\"failureDefinitionEnum\">The error type.</param>\r\n      public static void AddDelayedLinkError(FailureDefinitionId failureDefinitionId)\r\n      {\r\n         if (m_ImportPostedErrors == null)\r\n            m_ImportPostedErrors = new HashSet<FailureDefinitionId>();\r\n\r\n         m_ImportPostedErrors.Add(failureDefinitionId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Post any delayed errors or warnings to the current document.\r\n      /// </summary>\r\n      /// <remarks>Needs to occur inside of a transaction.</remarks>\r\n      public static void PostDelayedLinkErrors(Document doc)\r\n      {\r\n         if (m_ImportPostedErrors == null)\r\n            return;\r\n\r\n         try\r\n         {\r\n            foreach (FailureDefinitionId failureDefId in m_ImportPostedErrors)\r\n            {\r\n               FailureMessage fm = new FailureMessage(failureDefId);\r\n               doc.PostFailure(fm);\r\n            }\r\n         }\r\n         catch\r\n         {\r\n         }\r\n         finally\r\n         {\r\n            m_ImportPostedErrors = null;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The one  Importer class for this import process.\r\n      /// </summary>\r\n      static public Importer TheImporter { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The Import cache used for this import process.\r\n      /// </summary>\r\n      static public IFCImportCache TheCache\r\n      {\r\n         get { return TheImporter.m_ImportCache; }\r\n         protected set { TheImporter.m_ImportCache = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines if we are using the default (i.e., Revit) processor.\r\n      /// </summary>\r\n      /// <returns>True if we are using the default processor.</returns>\r\n      /// <remarks>This function can be used to short-circuit function calls that do unnecessary\r\n      /// work (e.g., creating custom sub-categories.)</remarks>\r\n      static public bool IsDefaultProcessor() { return TheProcessor is IFCDefaultProcessor; }\r\n\r\n      static public IIFCFileProcessor TheProcessor { get => TheOptions?.Processor; }\r\n\r\n      static public IFCImportHybridInfo TheHybridInfo { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The log file used for this import process.\r\n      /// </summary>\r\n      static public IFCImportLog TheLog\r\n      {\r\n         get { return TheImporter.m_ImportLog; }\r\n         protected set { TheImporter.m_ImportLog = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The IFC import options used for this import process.\r\n      /// </summary>\r\n      public static IFCImportOptions TheOptions { get; protected set;  }\r\n\r\n      /// <summary>\r\n      /// Allow for the creation of an Importer class for external API use.\r\n      /// </summary>\r\n      /// <param name=\"originalDocument\">The document to import into.</param>\r\n      /// <param name=\"ifcFileName\">The name of the IFC file.</param>\r\n      /// <param name=\"importOptions\">The import options associated with this Importer.</param>\r\n      /// <returns>The Importer class.</returns>\r\n      public static Importer CreateImporter(Document originalDocument, string ifcFileName, IDictionary<string, string> importOptions)\r\n      {\r\n         if (originalDocument == null || ifcFileName == null || importOptions == null)\r\n            return null;\r\n\r\n         Importer importer = new Importer();\r\n         TheImporter = importer;\r\n         TheCache = IFCImportCache.Create(originalDocument, ifcFileName);\r\n         TheOptions = importer.m_ImportOptions = IFCImportOptions.Create(importOptions);\r\n         TheLog = IFCImportLog.CreateLog(ifcFileName, \"log.html\", !TheOptions.DisableLogging);\r\n         return importer;\r\n      }\r\n\r\n      private Document LoadLinkDocument(Document originalDocument, string linkedFileName)\r\n      {\r\n         if (!File.Exists(linkedFileName))\r\n            return null;\r\n\r\n         Application application = originalDocument.Application;\r\n\r\n         Document doc = application.OpenDocumentFile(linkedFileName);\r\n         if (doc == null)\r\n         {\r\n            return null;\r\n         }\r\n\r\n         ProjectInfo projInfo = doc.ProjectInformation;\r\n         if (projInfo == null)\r\n         {\r\n            doc.Close();\r\n            return null;\r\n         }\r\n\r\n         // Check to see if the projInfo ImportMethod parameter equals the current method of import.\r\n         // If it does not, then update current method to match original method.\r\n         IFCHybridImportOptions hybridImportOptions = null;\r\n         Parameter originalImportMethod = projInfo.LookupParameter(ImportMethodParameter);\r\n         if ((originalImportMethod?.StorageType ?? StorageType.None) == StorageType.String)\r\n         {\r\n            hybridImportOptions = IFCHybridImportOptions.Create(originalImportMethod.AsString());\r\n         }\r\n         TheOptions.HybridImportOptions = hybridImportOptions;\r\n\r\n         // We won't catch any exceptions here, yet.\r\n         // There could be a number of reasons why this fails, to be investigated.\r\n         return doc;\r\n      }\r\n\r\n      private Document CreateLinkDocument(Document originalDocument)\r\n      {\r\n         Document ifcDocument = null;\r\n\r\n         // We will attempt to create a new document up to two times:\r\n         // 1st attempt: using IFC project template file.\r\n         // 2nd attempt: using default project template file.\r\n         Application application = originalDocument.Application;\r\n\r\n         string defaultIFCTemplate = application.DefaultIFCProjectTemplate;\r\n         string defaultProjectTemplate = application.DefaultProjectTemplate;\r\n\r\n         // We can't use the IFC template if it doesn't exist on disk.\r\n         bool noIFCTemplate = (string.IsNullOrEmpty(defaultIFCTemplate) || !File.Exists(defaultIFCTemplate));\r\n         bool noProjectTemplate = (string.IsNullOrEmpty(defaultProjectTemplate) || !File.Exists(defaultProjectTemplate));\r\n         bool noTemplate = (noIFCTemplate && noProjectTemplate);\r\n         if (noTemplate)\r\n         {\r\n            Importer.TheLog.LogWarning(-1,\r\n                \"Both the IFC template file given in the IFC options and the default project template file listed below are either not given, or not found.  Creating the cache file with no template instead.<br>(1) IFC template: \" +\r\n                defaultIFCTemplate + \"<br>(2) Default project template: \" + defaultProjectTemplate, false);\r\n         }\r\n\r\n         string defaultTemplate = noIFCTemplate ? defaultProjectTemplate : defaultIFCTemplate;\r\n\r\n         // templatesDifferent returns false if there is no IFC template; it only returns true if there are 2 potential templates to use, and\r\n         // they are different.\r\n         bool templatesDifferent = noIFCTemplate ? false : (string.Compare(defaultTemplate, defaultProjectTemplate, true) != 0);\r\n         bool canUseDefault = templatesDifferent;\r\n\r\n         string projectFilesUsed = templatesDifferent ? defaultIFCTemplate + \", \" + defaultProjectTemplate : defaultTemplate;\r\n         if (string.Compare(defaultTemplate, defaultProjectTemplate, true) != 0)\r\n            projectFilesUsed += \", \" + defaultProjectTemplate;\r\n\r\n         while (ifcDocument == null)\r\n         {\r\n            try\r\n            {\r\n               if (noTemplate)\r\n               {\r\n                  DisplayUnit dus = originalDocument.DisplayUnitSystem;\r\n                  ifcDocument = application.NewProjectDocument(dus == DisplayUnit.IMPERIAL ? UnitSystem.Imperial : UnitSystem.Metric);\r\n               }\r\n               else\r\n                  ifcDocument = application.NewProjectDocument(defaultTemplate);\r\n\r\n               if (ifcDocument == null)\r\n               {\r\n                  throw new InvalidOperationException(\"Can't open template file(s) \" + projectFilesUsed + \" to create link document\");\r\n               }\r\n            }\r\n            catch\r\n            {\r\n               if (canUseDefault)\r\n               {\r\n                  defaultTemplate = defaultProjectTemplate;\r\n                  canUseDefault = false;\r\n                  continue;\r\n               }\r\n               else\r\n               {\r\n                  Importer.TheLog.LogError(-1, \"Can't open template file(s) \" + projectFilesUsed + \" to create link document, aborting import.\", false);\r\n                  throw;\r\n               }\r\n            }\r\n\r\n            break;\r\n         }\r\n\r\n         return ifcDocument;\r\n      }\r\n\r\n      private (Document ifcDocument, bool doUpdate) LoadOrCreateLinkDocument(Document originalDocument, string linkedFileName)\r\n      {\r\n         Document ifcDocument = null;\r\n         bool doUpdate = true;\r\n\r\n         try\r\n         {\r\n            // Check to see if the Revit file already exists; if so, we will re-use it.\r\n            ifcDocument = LoadLinkDocument(originalDocument, linkedFileName);\r\n\r\n            // If it doesn't exist, create a new document.\r\n            if (ifcDocument == null)\r\n            {\r\n               ifcDocument = CreateLinkDocument(originalDocument);\r\n               doUpdate = false;\r\n            }\r\n\r\n            if (ifcDocument == null)\r\n            {\r\n               throw new InvalidOperationException(\"Could not create document while importing: \" + linkedFileName);\r\n            }\r\n         }\r\n         finally\r\n         {\r\n            if(ifcDocument == null)\r\n               TheLog.LogError(-1, \"Could not create document for cached IFC Revit file while importing: \" + linkedFileName + \", aborting.\", false);\r\n         }\r\n\r\n         return (ifcDocument, doUpdate);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the GUID associated with the importer, for DirectShape creation.\r\n      /// </summary>\r\n      static public string ImportAppGUID()\r\n      {\r\n         return \"88743F28-A2E1-4935-949D-4DB7A724A150\";\r\n      }\r\n\r\n      /// <summary>\r\n      /// Quick reject based on IFC file info and existence of Revit file.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The parent document.</param>\r\n      /// <param name=\"originalIFCFileName\">The IFC file name.</param>\r\n      /// <returns>True if we need a reload; false if nothing has changed.</returns>\r\n      private bool NeedsReload(Document doc, string originalIFCFileName)\r\n      {\r\n         string ifcFileName = ImporterIFCUtils.GetLocalFileName(doc, originalIFCFileName);\r\n         if (ifcFileName == null)\r\n            return true;\r\n\r\n         string revitFileName = IFCImportFile.GetRevitFileName(ifcFileName);\r\n\r\n         // If the RVT file doesn't exist, we'll reload. Otherwise, look at saved file size and timestamp.\r\n         if (!File.Exists(revitFileName))\r\n            return true;\r\n\r\n         FileInfo infoIFC = null;\r\n         try\r\n         {\r\n            infoIFC = new FileInfo(ifcFileName);\r\n         }\r\n         catch\r\n         {\r\n            return true;\r\n         }\r\n\r\n         long ifcFileLength = infoIFC.Length;\r\n         if ((TheOptions.OriginalFileSize != 0) && (ifcFileLength != TheOptions.OriginalFileSize))\r\n            return true;\r\n\r\n         // If we got a local IFC file name that is different from the original file name, that may have resulted in a load\r\n         // operation that would update the timestamp.  In this case, ignore that check.\r\n         // Unfortunately, this means that it is possible that an updated IFC file with the same file size but different contents\r\n         // would register as unchanged when it was.  The alternative, though, is to reload the IFC file on every file open,\r\n         // which is unacceptable.\r\n         bool checkFileTimestamp = (ifcFileName == originalIFCFileName);\r\n         if (checkFileTimestamp)\r\n         {\r\n            // Ignore ticks - only needs to be accurate to the second, or 10,000,000 ticks.\r\n            long diffTicks = infoIFC.LastWriteTimeUtc.Ticks - TheOptions.OriginalTimeStamp.Ticks;\r\n            if (diffTicks < 0 || diffTicks >= 10000000)\r\n               return true;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Start a Transaction for the ReferenceIFC path.\r\n      /// Will enable ForcedModalHandling and ClearAfterRollback in FailureHandlingOptions.\r\n      /// </summary>\r\n      /// <param name=\"transaction\">Transaction to start.</param>\r\n      /// <returns>Transaction Status after Start().  This should be Started if all went well.</returns>\r\n      /// <exception cref=\"ArgumentNullException\">Transaction parameter should be non-null.</exception>\r\n      public static TransactionStatus StartReferenceIFCTransaction(Transaction transaction)\r\n      {\r\n         TransactionStatus transactionStatus = transaction.GetStatus();\r\n         if (transactionStatus == TransactionStatus.Started)\r\n         {\r\n            TheLog.LogComment(-1, \"Attempting to start ReferenceIFC Transaction when already started\", true);\r\n            return transactionStatus;\r\n         }\r\n\r\n         transactionStatus = transaction.Start(Resources.IFCOpenReferenceFile);\r\n         if (transactionStatus == TransactionStatus.Started)\r\n         {\r\n            FailureHandlingOptions options = transaction.GetFailureHandlingOptions();\r\n            options.SetForcedModalHandling(true);\r\n            options.SetClearAfterRollback(true);\r\n         }\r\n\r\n         return transactionStatus;\r\n      }\r\n\r\n      private bool DocumentUpToDate(Document doc, string ifcFileName)\r\n      {\r\n         FileInfo infoIFC = null;\r\n         try\r\n         {\r\n            infoIFC = new FileInfo(ifcFileName);\r\n         }\r\n         catch\r\n         {\r\n            return false;\r\n         }\r\n\r\n         ProjectInfo projInfo = doc.ProjectInformation;\r\n         if (projInfo == null)\r\n            return false;\r\n\r\n         Parameter originalFileName = projInfo.LookupParameter(\"Original IFC File Name\");\r\n         if (originalFileName == null || originalFileName.StorageType != StorageType.String)\r\n            return false;\r\n\r\n         Parameter originalFileSizeParam = projInfo.LookupParameter(\"Original IFC File Size\");\r\n         if (originalFileSizeParam == null || originalFileSizeParam.StorageType != StorageType.String)\r\n            return false;\r\n\r\n         Parameter revitImporterVersion = projInfo.LookupParameter(\"Revit Importer Version\");\r\n         if (revitImporterVersion == null || revitImporterVersion.StorageType != StorageType.String)\r\n            return false;\r\n\r\n         // Stored as string to contain Int64 value\r\n         Parameter originalTimeStampParam = projInfo.LookupParameter(\"Revit File Last Updated\");\r\n         if (originalTimeStampParam == null || originalTimeStampParam.StorageType != StorageType.String)\r\n            return false;\r\n\r\n         if (string.Compare(originalFileName.AsString(), ifcFileName, true) != 0)\r\n            return false;\r\n\r\n         Int64 originalTimeStampInTicks = 0;\r\n         try\r\n         {\r\n            originalTimeStampInTicks = Int64.Parse(originalTimeStampParam.AsString());\r\n         }\r\n         catch\r\n         {\r\n            return false;\r\n         }\r\n\r\n         long originalFileSize = 0;\r\n         try\r\n         {\r\n            originalFileSize = long.Parse(originalFileSizeParam.AsString());\r\n         }\r\n         catch\r\n         {\r\n            return false;\r\n         }\r\n\r\n         long ifcFileLength = infoIFC.Length;\r\n         if ((originalFileSize != 0) && (ifcFileLength != originalFileSize))\r\n            return false;\r\n\r\n         // Ignore ticks - only needs to be accurate to the second, or 10,000,000 ticks.\r\n         Int64 diffTicks = infoIFC.LastWriteTimeUtc.Ticks - originalTimeStampInTicks;\r\n         if (diffTicks < 0 || diffTicks >= 10000000)\r\n            return false;\r\n\r\n         // If the importer has been updated, update the cached file also.\r\n         if (string.Compare(revitImporterVersion.AsString(), IFCImportOptions.ImporterVersion, true) != 0)\r\n            return false;\r\n\r\n         return true;\r\n      }\r\n\r\n      private void LogEndImportDetailed(Document ifcDocument)\r\n      {\r\n         if (!TheOptions.VerboseLogging || TheHybridInfo == null)\r\n            return;\r\n\r\n         TheLog.LogWarning(-1, \"--- Hybrid IFC Import:  Start of Detailed Logging after Hybrid IFC Import. ---\", false);\r\n         TheLog.LogWarning(-1, \"Hybrid IFC Import:  If an IfcGuid does not appear in the following list, then it was processed entirely via legacy code.\", false);\r\n         TheLog.LogWarning(-1, \"Hybrid IFC Import:  If an IfcGuid is no longer in the Hybrid Map, but its ElementId is in the Elements to be deleted list, this is normal.\", false);\r\n         TheHybridInfo.LogHybridMapDetailed();\r\n         TheHybridInfo.LogElementsToDeleteDetailed();\r\n         TheLog.LogWarning(-1, \"--- Hybrid IFC Import:  End of Logging detailed Information after Hybrid IFC Import.---\", false);\r\n\r\n         FilteredElementCollector collector = new FilteredElementCollector(ifcDocument);\r\n\r\n         List<Type> supportedElementTypes = new List<Type>() { typeof(DirectShape) };\r\n         ElementMulticlassFilter multiclassFilter = new ElementMulticlassFilter(supportedElementTypes);\r\n         collector.WherePasses(multiclassFilter);\r\n\r\n         int numDirectShapes = collector.GetElementCount();\r\n         if (numDirectShapes == 0)\r\n         {\r\n            ifcDocument.Application.WriteJournalComment(\"Hybrid IFC Import: No IFCProducts Imported.\", false);\r\n         }\r\n         else if (numDirectShapes != (Importer.TheHybridInfo.HybridElements?.Count ?? 0))\r\n         {\r\n            ifcDocument.Application.WriteJournalComment(\"---- Hybrid IFC Import: Some DirectShapes processed within Revit. ---\", false);\r\n\r\n            IList<Element> directShapeElements = collector.ToElements();\r\n            // This is inefficient, but we need to reliably get the IFCGuids\r\n\r\n            if (Importer.TheHybridInfo?.HybridMap != null)\r\n            {\r\n               // HybridMap is for IFC STEP Id --> ElementId.  This is used for almost all of the Hybrid IFC Import processing.\r\n               // reverseLookup is for ElementId --> IFC STEP Id.  This is used to find the ElementId associated with a given IFC STEP Id (for logging purposes).\r\n               IDictionary<ElementId, string> reverseLookup = new Dictionary<ElementId, string>();\r\n               foreach (KeyValuePair<string, ElementId> pair in TheHybridInfo.HybridMap)\r\n               {\r\n                  try\r\n                  {\r\n                     ElementId elementId = pair.Value;\r\n                     string stepId = pair.Key;\r\n                     reverseLookup.Add(elementId, stepId);\r\n                  }\r\n                  catch (ArgumentException ex)\r\n                  {\r\n                     TheLog.LogWarning(-1, $\"Duplicate ElementId found when reversing Hybrid Map for logging {ex.Message}\", false);\r\n                  }\r\n               }\r\n\r\n               // Log (into journal) IFC STEP Ids & ElementIds that were imported by AnyCAD or via Revit alone.\r\n               ifcDocument.Application.WriteJournalComment($\"Hybrid IFC Import: Count of DirectShapes imported via AnyCAD:  {Importer.TheHybridInfo.HybridElements.Count}\", false);\r\n               foreach (Element element in directShapeElements)\r\n               {\r\n                  string stepId;\r\n                  if (reverseLookup.TryGetValue(element.Id, out stepId))\r\n                  {\r\n                     ifcDocument.Application.WriteJournalComment($\"Hybrid IFC Import: AnyCAD DirectShape (IFC STEP Id, ElementId): ({stepId}, {element.Id})\", false);\r\n                  }\r\n               }\r\n\r\n               ifcDocument.Application.WriteJournalComment($\"Hybrid IFC Import: Count of DirectShapes falling back to Revit:  {numDirectShapes - Importer.TheHybridInfo.HybridElements.Count}\", false);\r\n               foreach (Element element in directShapeElements)\r\n               {\r\n                  if (reverseLookup.ContainsKey(element.Id))\r\n                     continue;\r\n                  ifcDocument.Application.WriteJournalComment($\"Hybrid IFC Import: Fallback DirectShape ElementId: ({element.Id})\", false);\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Import an IFC file into a given document for Reference only.\r\n      /// </summary>\r\n      /// <param name=\"document\">The host document for the import.</param>\r\n      /// <param name=\"origFullFileName\">The full file name of the document.</param>\r\n      public void ReferenceIFC(Document document, string origFullFileName)\r\n      {\r\n         // We need to generate a local file name for all of the intermediate files (the log file, the cache file, and the shared parameters file).\r\n         string localFileName = ImporterIFCUtils.GetLocalFileName(document, origFullFileName);\r\n         if (localFileName == null)\r\n            throw new InvalidOperationException(\"Could not generate local file name for: \" + origFullFileName);\r\n\r\n         // An early check, based on the options set - if we are allowed to use an up-to-date existing file on disk, use it.\r\n         // It is possible that the log file may have been created in CreateImporter above, \r\n         // if it is used by an external developer.\r\n         if (TheLog == null)\r\n            m_ImportLog = IFCImportLog.CreateLog(localFileName, \"log.html\", !m_ImportOptions.DisableLogging);\r\n\r\n         Document originalDocument = document;\r\n         Document ifcDocument;\r\n         bool doUpdate = false;\r\n\r\n         if (TheOptions.Action == IFCImportAction.Link)\r\n         {\r\n            string linkedFileName = IFCImportFile.GetRevitFileName(localFileName);\r\n\r\n            // NOTE: This will update HybridImportOptions if we are reloading an existing document - we will use\r\n            // whatever method we originally used.  If a user wants to switch, they will have to delete the\r\n            // cache file.  Do not use HybridImportOptions before this call.\r\n            (ifcDocument, doUpdate) = LoadOrCreateLinkDocument(originalDocument, linkedFileName);\r\n         }\r\n         else\r\n         {\r\n            ifcDocument = originalDocument;\r\n         }\r\n\r\n         bool useCachedRevitFile = DocumentUpToDate(ifcDocument, localFileName);\r\n\r\n         // In the case where the document is already opened as a link, but it has been updated on disk,\r\n         // give the user a warning and use the cached value.\r\n         if (!useCachedRevitFile && ifcDocument.IsLinked)\r\n         {\r\n            useCachedRevitFile = true;\r\n            AddDelayedLinkError(BuiltInFailures.ImportFailures.IFCCantUpdateLinkedFile);\r\n         }\r\n\r\n         Transaction transaction = null;\r\n         if (!useCachedRevitFile)\r\n         {\r\n            m_ImportCache = IFCImportCache.Create(ifcDocument, localFileName);\r\n\r\n            // Limit creating the cache to Link, but may either remove limiting or make it more restrict (reload only) later.\r\n            if (TheOptions.Action == IFCImportAction.Link)\r\n               TheCache.CreateExistingElementMaps(ifcDocument);\r\n\r\n            // At this point:\r\n            // ifcDoument = document that will hold the info.\r\n            // localFileName = file path from where input will occur.\r\n            // Do Hybrid Import if needed.\r\n            //\r\n            if (TheOptions.HybridImportOptions != null)\r\n            {\r\n               BasePoint originalSurveyPoint = BasePoint.GetSurveyPoint(ifcDocument);\r\n               XYZ originalPosition = originalSurveyPoint.SharedPosition;\r\n               \r\n               // Hybrid IFC Import:  Create Transaction now, since Document.Import needs it.\r\n               // Non-Hybrid IFC Import:  IFCFile.Create() will create Transaction later.\r\n               transaction = new Transaction(ifcDocument);\r\n               if (TransactionStatus.Started != StartReferenceIFCTransaction(transaction))\r\n               {\r\n                  TheLog.LogError(-1, \"Unable to start Transaction for Hybrid IFC Import\", false);\r\n               }\r\n               else\r\n               {\r\n                  TheHybridInfo = new IFCImportHybridInfo(ifcDocument, localFileName, doUpdate);\r\n                  if (TheHybridInfo != null)\r\n                  {\r\n                     BasePoint newSurveyPoint = BasePoint.GetSurveyPoint(ifcDocument);\r\n                     XYZ newPosition = newSurveyPoint.SharedPosition;\r\n\r\n                     if (!newPosition.IsAlmostEqualTo(originalPosition))\r\n                     {\r\n                        TheHybridInfo.LargeCoordinateOriginOffset = originalPosition - newPosition;\r\n                        TheHybridInfo.OriginalLargeCoordinateOriginOffset = TheHybridInfo.LargeCoordinateOriginOffset;\r\n                     }\r\n                  }\r\n               }\r\n            }\r\n\r\n            m_ImportCache.ReadSharedParametersFile(ifcDocument, localFileName);\r\n\r\n            // TheFile will contain the same value as the return value for this function.\r\n            IFCImportFile.Create(localFileName, m_ImportOptions, ifcDocument, transaction);\r\n         }\r\n\r\n         if (useCachedRevitFile || IFCImportFile.TheFile != null)\r\n         {\r\n            IFCImportFile theFile = IFCImportFile.TheFile;\r\n            if (theFile != null)\r\n            {\r\n               if (theFile.IFCProject != null)\r\n                  IFCObjectDefinition.CreateElement(ifcDocument, theFile.IFCProject);\r\n\r\n               // Also process any other entities to create.\r\n               foreach (IFCObjectDefinition objDef in IFCImportFile.TheFile.OtherEntitiesToCreate)\r\n                  IFCObjectDefinition.CreateElement(ifcDocument, objDef);\r\n\r\n               theFile.EndImport(ifcDocument, localFileName);\r\n\r\n               // Make sure to log detailed information after EndImport.\r\n               LogEndImportDetailed(ifcDocument);      \r\n            }\r\n\r\n            if (TheOptions.Action == IFCImportAction.Link)\r\n            {\r\n               // If we have an original Revit link file name, don't create a new RevitLinkType - \r\n               // we will use the existing one.\r\n               bool useExistingType = (TheOptions.RevitLinkFileName != null);\r\n               ElementId revitLinkTypeId = IFCImportFile.LinkInFile(origFullFileName, localFileName, ifcDocument, originalDocument, useExistingType, !useCachedRevitFile);\r\n            }\r\n         }\r\n\r\n         m_ImportCache?.Reset(ifcDocument);\r\n      }\r\n\r\n      /// <summary>\r\n      /// The main entry point into the .NET IFC import code\r\n      /// </summary>\r\n      /// <param name=\"importer\">The internal ImporterIFC class that contains information necessary for the import process.</param>\r\n      public void ImportIFC(ImporterIFC importer)\r\n      {\r\n         TheImporter = this;\r\n\r\n         string fullIFCFileName = importer.FullFileName;\r\n         IDictionary<string, string> options = importer.GetOptions();\r\n         TheOptions = m_ImportOptions = Create(options);\r\n\r\n         // An early check, based on the options set - if we are allowed to use an up-to-date existing file on disk, use it.\r\n         try\r\n         {\r\n            if (!TheOptions.ForceImport && !NeedsReload(importer.Document, fullIFCFileName))\r\n               return;\r\n\r\n            // Clear the category mapping table, to force reload of options.\r\n            IFCCategoryUtil.Clear();\r\n\r\n            if (TheOptions.Intent != IFCImportIntent.Reference)\r\n            {\r\n               IFCImportFile.Import(importer);\r\n            }\r\n            else\r\n            {\r\n               ReferenceIFC(importer.Document, fullIFCFileName);\r\n            }\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            TheLog?.LogError(-1, ex.Message, false);\r\n            // The following message can sometimes occur when reloading some IFC files\r\n            // from external resources.  In this case, we should silently fail, and not\r\n            // throw.\r\n            if (!ex.Message.Contains(\"Starting a new transaction is not permitted\"))\r\n               throw;\r\n         }\r\n         finally\r\n         {\r\n            TheLog?.Close();\r\n            IFCImportFile.TheFile?.Close();\r\n            TheHybridInfo = null;\r\n            TheLog = null;\r\n         }\r\n      }\r\n\r\n      #endregion\r\n\r\n      #region IExternalServer Members\r\n\r\n      public string GetDescription()\r\n      {\r\n         return \"IFC open source importer\";\r\n      }\r\n\r\n      public string GetName()\r\n      {\r\n         return \"IFC importer\";\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the server id for the link service.\r\n      /// </summary>\r\n      /// <returns>The GUID representing the server id.</returns>\r\n      public Guid GetServerId()\r\n      {\r\n         return new Guid(ImportAppGUID());\r\n      }\r\n\r\n      public ExternalServiceId GetServiceId()\r\n      {\r\n         return ExternalServices.BuiltInExternalServices.IFCImporterService;\r\n      }\r\n\r\n      public string GetVendorId()\r\n      {\r\n         return \"IFCX\";\r\n      }\r\n\r\n      #endregion\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Processors/IFCDefaultProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nusing Autodesk.Revit.DB;\nusing Revit.IFC.Import.Core;\nusing Revit.IFC.Import.Utility;\n\nnamespace Revit.IFC.Import\n{\n   public class IFCDefaultProcessor : IIFCFileProcessor\n   {\n      public bool CreateOrUpdateElement(int ifcId, string ifcGuid, string ifcEntityType, long categoryId,\n         IList<GeometryObject> geomObjs)\n      {\n         return false;\n      }\n\n      public void CreateElementType(int ifcId, string ifcGuid, string ifcEntityType, long categoryId)\n      {\n      }\n\n      public void PostProcessMappedItem(int creatorId,\n         string globalId,\n         string entityTypeAsString,\n         ElementId categoryId,\n         int geometrySourceId,\n         Transform newLcs)\n      { \n      }\n\n      public bool PostProcessProduct(int ifcId,\n         int? typeObjectId,\n         Transform lcs,\n         IList<GeometryObject> directShapeGeometries)\n      {\n         return false;\n      }\n\n      public bool? ProcessParameter(int objDefId, ForgeTypeId specTypeId, ForgeTypeId unitsTypeId,\n         int parameterSetId, string parameterName, double parameterValue)\n      {\n         return null;\n      }\n\n      public bool? ProcessParameter(int objDefId, int parameterSetId, string parameterName, string parameterValue)\n      {\n         return null;\n      }\n\n      public bool? ProcessParameter(int objDefId, int parameterSetId, string parameterName, int parameterValue)\n      {\n         return null;\n      }\n\n      public bool? ProcessParameter(int objDefId, int parameterSetId, string parameterName, ElementId parameterValue)\n      {\n         return null;\n      }\n\n      public bool? ProcessParameter(int objDefId, int parameterSetId, string parameterName, bool parameterValue)\n      {\n         return null;\n      }\n\n      public void SetElementStringParameter(Element element, int objDefId, BuiltInParameter parameterId, string value, \n         bool allowUnfound, ParametersToSet parametersToSet)\n      {\n         Parameter parameter = element?.get_Parameter(parameterId);\n         if (parameter == null)\n         {\n            if (!allowUnfound)\n               Importer.TheLog.LogError(objDefId, \"Parameter \\\"\" + parameterId.ToString() + \"\\\" not found, ignoring.\", false);\n            return;\n         }\n\n         if (parameter.StorageType != StorageType.String)\n         {\n            Importer.TheLog.LogError(objDefId, \"Parameter \\\"\" + parameterId.ToString() + \"\\\" not String type, ignoring.\", false);\n            return;\n         }\n\n         if (parameter.IsReadOnly)\n         {\n            Importer.TheLog.LogError(objDefId, \"Parameter \\\"\" + parameterId.ToString() + \"\\\" is read-only, ignoring.\", false);\n            return;\n         }\n\n         parametersToSet.AddStringParameter(parameter, value);\n      }\n\n      public void SetStringParameter(Element element, int objDefId, BuiltInParameter parameterId, string value, bool allowUnfound)\n      {\n         // No longer used.\n         return;\n      }\n\n      public bool PostProcessRepresentationMap(int typeId, \n         IList<Curve> mappedCurves, IList<GeometryObject> mappedSolids)\n      {\n         return false;\n      }\n\n      public void PostProcessSite(int siteId, double? refLatitude, double? refLongitude,\n         double refElevation, string landTitleNumber, ForgeTypeId baseLengthUnits,\n         Transform lcs)\n      {\n      }\n\n      public void PostProcessProject(double? lengthScaleFactor, ForgeTypeId lengthUnit)\n      {\n      }\n\n      public bool FindAlternateGeometrySource { get => false; }\n\n      public bool ScaleValues { get => true; }\n\n      public bool ApplyTransforms { get => true; }\n\n      public bool TryToFixFarawayOrigin { get => true; }\n      \n      public double ScaleLength(double length) { return length; }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Properties/AssemblyInfo.cs",
    "content": "using System.Reflection;\r\n#if IFC_OPENSOURCE\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"IFC Import for Revit\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"Autodesk\")]\r\n[assembly: AssemblyProduct(\"IFC Import for Revit\")]\r\n[assembly: AssemblyCopyright(\"@2012-2026 Autodesk, Inc. All rights reserved.\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n[assembly: AssemblyVersion(\"27.0.1.0\")]\r\n[assembly: AssemblyFileVersion(\"27.0.1.0\")]\r\n#endif\r\n\r\n#region Using directives\r\n\r\n\r\n#endregion\r\n\r\n\r\n\r\n// Version information can now be found in Source\\Foundation\\RevitENU\\Version.cs\r\n//\r\n\r\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.42000\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace Revit.IFC.Import.Properties {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    internal class Resources {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Resources() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Revit.IFC.Import.Properties.Resources\", typeof(Resources).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC: Created {0} elements out of {1}, {2}% done..\r\n        /// </summary>\r\n        internal static string IFCCreatedElementsInProgress {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCCreatedElementsInProgress\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC Material #{0}.\r\n        /// </summary>\r\n        internal static string IFCDefaultMaterialName {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCDefaultMaterialName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Link IFC File.\r\n        /// </summary>\r\n        internal static string IFCLinkFile {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCLinkFile\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Open IFC Reference File.\r\n        /// </summary>\r\n        internal static string IFCOpenReferenceFile {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCOpenReferenceFile\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC: Post-processing {0} entities out of {1}, {2}% done..\r\n        /// </summary>\r\n        internal static string IFCPostProcessEntities {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCPostProcessEntities\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC: Processed {0} entities..\r\n        /// </summary>\r\n        internal static string IFCProcessedEntities {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCProcessedEntities\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to IFC: Reading {0}.\r\n        /// </summary>\r\n        internal static string IFCReadingFile {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCReadingFile\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Reload IFC File.\r\n        /// </summary>\r\n        internal static string IFCReloadFile {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCReloadFile\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Type.\r\n        /// </summary>\r\n        internal static string IFCTypeSchedule {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCTypeSchedule\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to UnknownProperty.\r\n        /// </summary>\r\n        internal static string IFCUnknownProperty {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCUnknownProperty\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to UnknownPropertySet.\r\n        /// </summary>\r\n        internal static string IFCUnknownPropertySet {\r\n            get {\r\n                return ResourceManager.GetString(\"IFCUnknownPropertySet\", resourceCulture);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"IFCCreatedElementsInProgress\" xml:space=\"preserve\">\r\n    <value>IFC: Created {0} elements out of {1}, {2}% done.</value>\r\n  </data>\r\n  <data name=\"IFCDefaultMaterialName\" xml:space=\"preserve\">\r\n    <value>IFC Material #{0}</value>\r\n  </data>\r\n  <data name=\"IFCLinkFile\" xml:space=\"preserve\">\r\n    <value>Link IFC File</value>\r\n  </data>\r\n  <data name=\"IFCOpenReferenceFile\" xml:space=\"preserve\">\r\n    <value>Open IFC Reference File</value>\r\n  </data>\r\n  <data name=\"IFCPostProcessEntities\" xml:space=\"preserve\">\r\n    <value>IFC: Post-processing {0} entities out of {1}, {2}% done.</value>\r\n  </data>\r\n  <data name=\"IFCProcessedEntities\" xml:space=\"preserve\">\r\n    <value>IFC: Processed {0} entities.</value>\r\n  </data>\r\n  <data name=\"IFCReadingFile\" xml:space=\"preserve\">\r\n    <value>IFC: Reading {0}</value>\r\n  </data>\r\n  <data name=\"IFCReloadFile\" xml:space=\"preserve\">\r\n    <value>Reload IFC File</value>\r\n  </data>\r\n  <data name=\"IFCTypeSchedule\" xml:space=\"preserve\">\r\n    <value>Type</value>\r\n  </data>\r\n  <data name=\"IFCUnknownProperty\" xml:space=\"preserve\">\r\n    <value>UnknownProperty</value>\r\n  </data>\r\n  <data name=\"IFCUnknownPropertySet\" xml:space=\"preserve\">\r\n    <value>UnknownPropertySet</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Source/Revit.IFC.Import/Revit.IFC.Import.csproj",
    "content": "<Project Sdk=\"\">\r\n  <PropertyGroup>\r\n    <RootNamespace>Revit.IFC.Import</RootNamespace>\r\n    <AssemblyName>Revit.IFC.Import</AssemblyName>\r\n    <UseWindowsForms>true</UseWindowsForms>\r\n    <BaseOutputPath></BaseOutputPath>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(SolutionDir)VSProps\\Revit.CSharp.Sdk.props\" />\r\n   <ItemGroup>\r\n      <FrameworkReference Include=\"Microsoft.WindowsDesktop.App\" />\r\n   </ItemGroup>\r\n   <ItemGroup>\r\n    <Compile Update=\"Properties\\Resources.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Resources.resx</DependentUpon>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\Revit.IFC.Common\\Revit.IFC.Common.csproj\">\r\n      <Private>False</Private>\r\n      <ExcludeAssets>All</ExcludeAssets>\r\n      <PrivateAssets>All</PrivateAssets>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Revit.IFC.Import.Core\\Revit.IFC.Import.Core.csproj\">\r\n      <Private>False</Private>\r\n      <ExcludeAssets>All</ExcludeAssets>\r\n      <PrivateAssets>All</PrivateAssets>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(SolutionDir)VSProps\\Revit.CSharp.Sdk.targets\" />\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\r\n      <Generator>ResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"SharpZipLib\" Version=\"1.4.2\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"RevitAPI\">\r\n      <HintPath>..\\..\\..\\API\\2027\\RevitAPI.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"RevitAPIIFC\">\r\n      <HintPath>..\\..\\..\\API\\2027\\RevitAPIIFC.dll</HintPath>\r\n    </Reference>\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/BrepBuilderScope.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Data;\r\nusing Revit.IFC.Import.Geometry;\r\nusing UnitSystem = Autodesk.Revit.DB.DisplayUnit;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides methods to manage creation of geometry using BrepBuilder\r\n   /// </summary>\r\n   public class BrepBuilderScope : BuilderScope\r\n   {\r\n      private BRepBuilderGeometryId CurrentBrepBuilderFace { get; set; } = null;\r\n\r\n      private BRepBuilderGeometryId CurrentBrepBuilderLoop { get; set; } = null;\r\n\r\n      private Dictionary<int, BRepBuilderGeometryId> EdgeIdToBrepId { get; set; } = new Dictionary<int, BRepBuilderGeometryId>();\r\n\r\n      /// <summary>\r\n      /// The BrepBuilder that is used to build the IfcAdvancedBrep geometry\r\n      /// </summary>\r\n      public BRepBuilder BrepBuilder { get; protected set; } = null;\r\n      public BrepBuilderScope(IFCImportShapeEditScope container)\r\n         : base(container)\r\n      {\r\n\r\n      }\r\n\r\n      /// <summary>\r\n      /// Indicates if there exists an active face\r\n      /// </summary>\r\n      /// <returns>True if there exists an active face, false otherwise</returns>\r\n      public bool HaveActiveFace()\r\n      {\r\n         return CurrentBrepBuilderFace != null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Start collecting faces to create a BRep solid.\r\n      /// </summary>\r\n      /// <param name=\"brepType\">The expected type of the geometry being built.</param>\r\n      public override void StartCollectingFaceSet(BRepType brepType)\r\n      {\r\n         BrepBuilder = new BRepBuilder(brepType);\r\n         BrepBuilder.SetAllowShortEdges();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add a new face to the BrepBuilder\r\n      /// </summary>\r\n      /// <param name=\"surface\">The surface that is used to construct the brepbuilder face</param>\r\n      /// <param name=\"orientation\">The flag that indicates (TRUE) if the surface's normal agree with the face's normal or not (FALSE)</param>\r\n      /// <param name=\"materialId\">The face's material ID</param>\r\n      /// <param name=\"localTransform\">The local transform</param>\r\n      public void StartCollectingFace(IFCSurface surface, Transform localTransform, bool orientation, ElementId materialId)\r\n      {\r\n         if (CurrentBrepBuilderFace != null)\r\n         {\r\n            throw new InvalidOperationException(\"StopCollectingFaceForBrepBuilder for previous face hasn't been called yet\");\r\n         }\r\n\r\n         bool bReversed = !orientation;\r\n         BRepBuilderSurfaceGeometry surfaceGeometry;\r\n\r\n         if (surface is IFCBSplineSurfaceWithKnots)\r\n         {\r\n            surfaceGeometry = StartCollectingNURBSFace(surface as IFCBSplineSurfaceWithKnots, localTransform);\r\n         }\r\n         else\r\n         {\r\n            Surface transformedSurface = surface.GetSurface(localTransform);\r\n            if (transformedSurface == null)\r\n               throw new InvalidOperationException(\"Couldn't create surface for the current face.\");\r\n            surfaceGeometry = BRepBuilderSurfaceGeometry.Create(transformedSurface, null);\r\n         }\r\n         CurrentBrepBuilderFace = BrepBuilder.AddFace(surfaceGeometry, bReversed);\r\n         FaceMaterialId = materialId;\r\n         BrepBuilder.SetFaceMaterialId(CurrentBrepBuilderFace, FaceMaterialId);\r\n      }\r\n\r\n      private BRepBuilderSurfaceGeometry StartCollectingNURBSFace(IFCBSplineSurfaceWithKnots bSplineSurfaceWithKnots, Transform localTransform)\r\n      {\r\n         if (bSplineSurfaceWithKnots == null)\r\n            return null;\r\n\r\n         IFCRationalBSplineSurfaceWithKnots rationalBSplineSurfaceWithKnots = (bSplineSurfaceWithKnots as IFCRationalBSplineSurfaceWithKnots);\r\n\r\n         IList<double> knotsU = IFCGeometryUtil.ConvertIFCKnotsToRevitKnots(bSplineSurfaceWithKnots.UMultiplicities, bSplineSurfaceWithKnots.UKnots);\r\n         if (knotsU == null || knotsU.Count == 0)\r\n         {\r\n            throw new InvalidOperationException(\"No knots in u-direction\");\r\n         }\r\n\r\n         IList<double> knotsV = IFCGeometryUtil.ConvertIFCKnotsToRevitKnots(bSplineSurfaceWithKnots.VMultiplicities, bSplineSurfaceWithKnots.VKnots);\r\n         if (knotsV == null || knotsV.Count == 0)\r\n         {\r\n            throw new InvalidOperationException(\"No knots in v-direction\");\r\n         }\r\n\r\n         IList<double> weights = (rationalBSplineSurfaceWithKnots != null) ? rationalBSplineSurfaceWithKnots.WeightsList : null;\r\n\r\n         IList<XYZ> controlPoints = new List<XYZ>();\r\n         foreach (XYZ point in bSplineSurfaceWithKnots.ControlPointsList)\r\n         {\r\n            controlPoints.Add(localTransform.OfPoint(point));\r\n         }\r\n\r\n         int uDegree = bSplineSurfaceWithKnots.UDegree;\r\n         int vDegree = bSplineSurfaceWithKnots.VDegree;\r\n\r\n         BRepBuilderSurfaceGeometry surfaceGeometry = null;\r\n         if (weights == null)\r\n            surfaceGeometry = BRepBuilderSurfaceGeometry.CreateNURBSSurface(uDegree, vDegree, knotsU, knotsV, controlPoints, false, null);\r\n         else\r\n            surfaceGeometry = BRepBuilderSurfaceGeometry.CreateNURBSSurface(uDegree, vDegree, knotsU, knotsV, controlPoints, weights, false, null);\r\n\r\n         return surfaceGeometry;\r\n      }\r\n\r\n      private void StopCollectingFaceInternal(bool isValid)\r\n      {\r\n         if (BrepBuilder == null)\r\n            throw new InvalidOperationException(\"StartCollectingFaceSet has not been called\");\r\n\r\n         if (isValid)\r\n         {\r\n            if (CurrentBrepBuilderFace == null)\r\n               throw new InvalidOperationException(\"StartCollectingFaceForBrepBuilder hasn't been called yet\");\r\n\r\n            BrepBuilder.FinishFace(CurrentBrepBuilderFace);\r\n         }\r\n\r\n         CurrentBrepBuilderFace = null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Nullify the current face after we finish processing it\r\n      /// </summary>\r\n      /// <param name=\"isValid\">We are finishing a valid face if true.</param>\r\n      public void StopCollectingFace(bool isValid)\r\n      {\r\n         StopCollectingFaceInternal(isValid);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Remove the current invalid face from the list of faces to create a BRep solid.\r\n      /// </summary>\r\n      override public void AbortCurrentFace()\r\n      {\r\n         StopCollectingFaceInternal(false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Initialize a new loop for the current face\r\n      /// </summary>\r\n      public void InitializeNewLoop()\r\n      {\r\n         if (BrepBuilder == null)\r\n         {\r\n            throw new InvalidOperationException(\"StartCollectingFaceSet has not been called\");\r\n         }\r\n         if (CurrentBrepBuilderFace == null)\r\n         {\r\n            throw new InvalidOperationException(\"StartCollectingFaceForBrepBuilder has not been called\");\r\n         }\r\n\r\n         if (CurrentBrepBuilderLoop != null)\r\n         {\r\n            // We could allow several active faces, with each face having a loop being actively constructed, but the current\r\n            // design, with a single CurrentBrepBuilderFace and a single CurrentBrepBuilderLoop, apparently imposes the\r\n            // stricter requirement that faces are constructed one at a time, and for each face, its loops are constructed\r\n            // one at a time.\r\n            throw new InvalidOperationException(\"InitializeNewLoop has already been called - only one loop may be active at a time.\");\r\n         }\r\n\r\n         CurrentBrepBuilderLoop = BrepBuilder.AddLoop(CurrentBrepBuilderFace);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finish constructing a loop for the current face.\r\n      /// </summary>\r\n      /// <param name=\"isValid\">We are finishing a valid loop if true.</param>\r\n      public void StopConstructingLoop(bool isValid)\r\n      {\r\n         if (BrepBuilder == null)\r\n         {\r\n            throw new InvalidOperationException(\"StartCollectingFaceSet has not been called\");\r\n         }\r\n         if (CurrentBrepBuilderFace == null)\r\n         {\r\n            throw new InvalidOperationException(\"StartCollectingFaceForBrepBuilder has not been called\");\r\n         }\r\n\r\n         if (CurrentBrepBuilderLoop == null)\r\n         {\r\n            throw new InvalidOperationException(\"InitializeNewLoop has not been called\");\r\n         }\r\n\r\n         if (isValid)\r\n            BrepBuilder.FinishLoop(CurrentBrepBuilderLoop);\r\n\r\n         CurrentBrepBuilderLoop = null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add the oriented edge to the current loop\r\n      /// </summary>\r\n      /// <param name=\"id\">the id of the edge, corresponding to the StepID of the IfcOrientedEdge</param>\r\n      /// <param name=\"curve\">the curve, which represents the geometry of the edge</param>\r\n      /// <param name=\"startPoint\">the start point of the curve</param>\r\n      /// <param name=\"endPoint\">the end point of the curve</param>\r\n      /// <param name=\"orientation\">the orientation of the edge</param>\r\n      /// <returns>true if the edge is successfully added to the boundary</returns>\r\n      public bool AddOrientedEdgeToTheBoundary(int id, Curve curve, XYZ startPoint, XYZ endPoint, bool orientation)\r\n      {\r\n         if (CurrentBrepBuilderLoop == null)\r\n            throw new InvalidOperationException(\"StartCollectingLoopForBrepBuilder hasn't been called\");\r\n\r\n         BRepBuilderGeometryId edgeId = null;\r\n         if (EdgeIdToBrepId.ContainsKey(id) && EdgeIdToBrepId[id] != null)\r\n         {\r\n            edgeId = EdgeIdToBrepId[id];\r\n         }\r\n         else\r\n         {\r\n            //TODO: create an utility function MakeBound(Curve, XYZ, XYZ) and factor out this code\r\n            BRepBuilderEdgeGeometry edge = null;\r\n            if (curve is Line)\r\n            {\r\n               edge = BRepBuilderEdgeGeometry.Create(startPoint, endPoint);\r\n            }\r\n            else if (curve is Arc)\r\n            {\r\n               Arc arc = curve as Arc;\r\n\r\n               // The curve we receive is an unbound arc, so we have to bound it by the startPoint and the endPoint\r\n               IntersectionResult start = arc.Project(startPoint);\r\n               IntersectionResult end = arc.Project(endPoint);\r\n\r\n               double startParameter = start.Parameter;\r\n               double endParameter = end.Parameter;\r\n\r\n               if (endParameter < startParameter)\r\n                  endParameter += Math.PI * 2;\r\n\r\n               arc.MakeBound(startParameter, endParameter);\r\n\r\n               edge = BRepBuilderEdgeGeometry.Create(arc);\r\n            }\r\n            else if (curve is Ellipse)\r\n            {\r\n               Ellipse ellipse = curve as Ellipse;\r\n\r\n               IntersectionResult start = ellipse.Project(startPoint);\r\n               IntersectionResult end = ellipse.Project(endPoint);\r\n\r\n               double startParameter = start.Parameter;\r\n               double endParameter = end.Parameter;\r\n\r\n               if (endParameter < startParameter)\r\n                  endParameter += Math.PI * 2;\r\n\r\n               ellipse.MakeBound(startParameter, endParameter);\r\n               edge = BRepBuilderEdgeGeometry.Create(ellipse);\r\n            }\r\n            else if (curve is NurbSpline)\r\n            {\r\n               NurbSpline nurbs = curve as NurbSpline;\r\n\r\n               // Bound the NurbSpline based on the start and end points.\r\n               // As mentioned above, there should be a function to bound\r\n               // a curve based on two 3D points and it should be used here\r\n               // instead of duplicating manual code.\r\n               IntersectionResult start = nurbs.Project(startPoint);\r\n               IntersectionResult end = nurbs.Project(endPoint);\r\n               double startParameter = start.Parameter;\r\n               double endParameter = end.Parameter;\r\n               if (endParameter < startParameter)\r\n               {\r\n                  Importer.TheLog.LogError(id, \"Inverted start/end parameters for NurbSpline.\", false/*throwError*/);\r\n                  return false;\r\n               }\r\n               else\r\n               {\r\n                  nurbs.MakeBound(startParameter, endParameter);\r\n               }\r\n\r\n               edge = BRepBuilderEdgeGeometry.Create(nurbs);\r\n            }\r\n            else\r\n            {\r\n               Importer.TheLog.LogError(id, \"Unsupported edge curve type: \" + curve.GetType().ToString(), false);\r\n               return false;\r\n            }\r\n\r\n            edgeId = BrepBuilder.AddEdge(edge);\r\n            EdgeIdToBrepId.Add(id, edgeId);\r\n         }\r\n\r\n         try\r\n         {\r\n            BrepBuilder.AddCoEdge(CurrentBrepBuilderLoop, edgeId, !orientation);\r\n            return true;\r\n         }\r\n         catch\r\n         {\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry with the BrepBuilder based on already existing settings.\r\n      /// </summary>\r\n      /// <param name=\"guid\">The Guid associated with the geometry.</param>\r\n      /// <returns>A list of GeometryObjects, possibly empty.</returns>\r\n      public override IList<GeometryObject> CreateGeometry(string guid = null)\r\n      {\r\n         BRepBuilderOutcome outcome = BRepBuilderOutcome.Failure;\r\n         try\r\n         {\r\n            outcome = BrepBuilder.Finish();\r\n         }\r\n         catch\r\n         {\r\n            outcome = BRepBuilderOutcome.Failure;\r\n         }\r\n\r\n         if (outcome != BRepBuilderOutcome.Success)\r\n            return null;\r\n\r\n         IList<GeometryObject> geomObjects = new List<GeometryObject>();\r\n         geomObjects.Add(BrepBuilder.GetResult());\r\n\r\n         return geomObjects;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/BuilderScope.cs",
    "content": "﻿using Autodesk.Revit.DB;\r\nusing Revit.IFC.Import.Enums;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   public abstract class BuilderScope : IDisposable\r\n   {\r\n      protected ElementId FaceMaterialId { get; set; }\r\n\r\n      /// <summary>\r\n      /// The id of the associated graphics style, if any.\r\n      /// </summary>\r\n      public ElementId GraphicsStyleId\r\n      {\r\n         get { return Container.GraphicsStyleId; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The IFCImportShapeEditScope that contains this builder scope\r\n      /// </summary>\r\n      public IFCImportShapeEditScope Container { get; private set; } = null;\r\n\r\n      public BuilderScope(IFCImportShapeEditScope container)\r\n      {\r\n         this.Container = container;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Safely get the top-level IFC entity associated with this shape, if it exists, or -1 otherwise.\r\n      /// </summary>\r\n      public int CreatorId()\r\n      {\r\n         if (Container != null)\r\n            return Container.CreatorId();\r\n         else\r\n            return -1;\r\n      }\r\n\r\n      public abstract void StartCollectingFaceSet(BRepType brepType);\r\n\r\n      public abstract IList<GeometryObject> CreateGeometry(string guid);\r\n\r\n      /// <summary>\r\n      /// Remove the current invalid face from the list of faces to create a BRep solid.\r\n      /// </summary>\r\n      public virtual void AbortCurrentFace()\r\n      {\r\n      }\r\n\r\n      public void Dispose()\r\n      {\r\n         Container.BuilderScope = null;\r\n         Container.BuilderType = IFCShapeBuilderType.Unknown;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/IFCCategoryUtil.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Import.Data;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   /// <summary>\r\n   /// Utilities for mapping IFCEntityType to categories\r\n   /// </summary>\r\n   public class IFCCategoryUtil\r\n   {\r\n      // Determines which entity types should be ignored on import.\r\n      static ISet<IFCEntityType> m_EntityDontImport = null;\r\n\r\n      // Determines which entity and predefined type combinations should be ignored on import.\r\n      static ISet<Tuple<IFCEntityType, string>> m_EntityDontImportPredefinedType = null;\r\n\r\n      // Used for entity types that have a simple mapping to a built-in catgory.\r\n      static IDictionary<IFCEntityType, BuiltInCategory> m_EntityTypeToCategory = null;\r\n\r\n      // Used for entity types and predefined type pairs that have a simple mapping to a built-in catgory.\r\n      static IDictionary<Tuple<IFCEntityType, string>, BuiltInCategory> m_EntityPredefinedTypeToCategory = null;\r\n\r\n      // Use for (EntityType, PredefinedType, ObjectType) that have mapping to a category.\r\n      // This is useful if:\r\n      // 1. There is not enough information in the Predefined Type to determine the correct category.\r\n      // 2. The Entity is an IFCObject.\r\n      //\r\n      static IDictionary<Tuple<IFCEntityType, string, string>, BuiltInCategory> m_EntityPredefinedObjectTypesToCategory = null;\r\n\r\n      // Maps entity types to the type contained in the dictionary above, to avoid duplicate instance/type mappings.\r\n      static IDictionary<IFCEntityType, IFCEntityType> m_EntityTypeKey = null;\r\n\r\n      /// <summary>\r\n      /// Clear the maps at the start of import, to force reload of options.\r\n      /// </summary>\r\n      public static void Clear()\r\n      {\r\n         m_EntityDontImport = null;\r\n         m_EntityDontImportPredefinedType = null;\r\n         m_EntityTypeToCategory = null;\r\n         m_EntityTypeKey = null;\r\n         m_EntityPredefinedTypeToCategory = null;\r\n         m_EntityPredefinedObjectTypesToCategory = null;\r\n      }\r\n\r\n      private static void InitializeCategoryMaps()\r\n      {\r\n         m_EntityDontImport = new HashSet<IFCEntityType>();\r\n         m_EntityDontImportPredefinedType = new HashSet<Tuple<IFCEntityType, string>>();\r\n         m_EntityTypeToCategory = new Dictionary<IFCEntityType, BuiltInCategory>();\r\n         m_EntityTypeKey = new Dictionary<IFCEntityType, IFCEntityType>();\r\n         m_EntityPredefinedTypeToCategory = new Dictionary<Tuple<IFCEntityType, string>, BuiltInCategory>();\r\n         m_EntityPredefinedObjectTypesToCategory = new Dictionary<Tuple<IFCEntityType, string, string>, BuiltInCategory>();\r\n\r\n         if (!InitFromFile())\r\n            InitEntityTypeToCategoryMaps();\r\n      }\r\n\r\n      private static ISet<IFCEntityType> EntityDontImport\r\n      {\r\n         get\r\n         {\r\n            if (m_EntityDontImport == null)\r\n               InitializeCategoryMaps();\r\n            return m_EntityDontImport;\r\n         }\r\n      }\r\n\r\n      private static ISet<Tuple<IFCEntityType, string>> EntityDontImportPredefinedType\r\n      {\r\n         get\r\n         {\r\n            if (m_EntityDontImportPredefinedType == null)\r\n               InitializeCategoryMaps();\r\n            return m_EntityDontImportPredefinedType;\r\n         }\r\n      }\r\n\r\n      private static IDictionary<IFCEntityType, BuiltInCategory> EntityTypeToCategory\r\n      {\r\n         get\r\n         {\r\n            if (m_EntityTypeToCategory == null)\r\n               InitializeCategoryMaps();\r\n            return m_EntityTypeToCategory;\r\n         }\r\n      }\r\n\r\n      private static IDictionary<IFCEntityType, IFCEntityType> EntityTypeKey\r\n      {\r\n         get\r\n         {\r\n            if (m_EntityTypeKey == null)\r\n               InitializeCategoryMaps();\r\n            return m_EntityTypeKey;\r\n         }\r\n      }\r\n\r\n      private static IDictionary<Tuple<IFCEntityType, string>, BuiltInCategory> EntityPredefinedTypeToCategory\r\n      {\r\n         get\r\n         {\r\n            if (m_EntityPredefinedTypeToCategory == null)\r\n               InitializeCategoryMaps();\r\n            return m_EntityPredefinedTypeToCategory;\r\n         }\r\n      }\r\n\r\n      private static IDictionary<Tuple<IFCEntityType, string, string>, BuiltInCategory> EntityPredefinedObjectTypesToCategory\r\n      {\r\n         get\r\n         {\r\n            if (m_EntityPredefinedObjectTypesToCategory == null)\r\n               InitializeCategoryMaps();\r\n            return m_EntityPredefinedObjectTypesToCategory;\r\n         }\r\n\r\n      }\r\n\r\n      private static string GetTypeNameFromCategoryName(string categoryName)\r\n      {\r\n         if (categoryName == null)\r\n            return null;\r\n\r\n         string[] entityAndType = categoryName.Split('.');\r\n         if (entityAndType == null)\r\n            return null;\r\n\r\n         return (entityAndType.Length > 1) ? entityAndType[1] : null;\r\n      }\r\n\r\n      private static Tuple<Color, int> GetPredefinedColorAndTransparencyForCategoryByName(string categoryName)\r\n      {\r\n         if (categoryName == null)\r\n            return null;\r\n\r\n         Func<string, string, bool> StringStartsWith = (origString, subsetString) =>\r\n            origString.StartsWith(subsetString, StringComparison.OrdinalIgnoreCase);\r\n\r\n         Func<string, string, bool> StringEquals = (origString, subsetString) =>\r\n            origString.Equals(subsetString, StringComparison.OrdinalIgnoreCase);\r\n         \r\n         if (StringStartsWith(categoryName, \"IfcDistributionPort\"))\r\n         {\r\n            string optionalTypeValue = GetTypeNameFromCategoryName(categoryName);\r\n            if (optionalTypeValue != null)\r\n            {\r\n               if (StringEquals(optionalTypeValue, \"SourceAndSink\"))\r\n                  return Tuple.Create(new Color(0, 255, 0), 50);\r\n               if (StringEquals(optionalTypeValue, \"Source\"))\r\n                  return Tuple.Create(new Color(0, 0, 255), 50);\r\n               if (StringEquals(optionalTypeValue, \"Sink\"))\r\n                  return Tuple.Create(new Color(255, 0, 0), 50);\r\n            }\r\n            return Tuple.Create(new Color(0, 0, 0), 50);\r\n         }\r\n\r\n         if (StringStartsWith(categoryName, \"IfcOpening\"))\r\n         {\r\n            return Tuple.Create(new Color(255, 165, 0), 75);\r\n         }\r\n         \r\n         // There are other entities that start with IfcSpace, such as IfcSpaceHeater.  But\r\n         // we won't be creating subcategories for those, and we want to get IfcSpace and\r\n         // IfcSpaceType with or without an optional predefined type.\r\n         if (StringStartsWith(categoryName, \"IfcSpace\"))\r\n         {\r\n            string optionalTypeValue = GetTypeNameFromCategoryName(categoryName);\r\n            if (optionalTypeValue != null && StringEquals(optionalTypeValue, \"External\"))\r\n            {\r\n               // A nice shade of green.\r\n               return Tuple.Create(new Color(141, 184, 78), 75);\r\n            }\r\n            // Default is internal.\r\n            // Similar to \"Light Sky Blue\"\r\n            return Tuple.Create(new Color(164, 232, 232), 75); \r\n         }\r\n\r\n         if (StringStartsWith(categoryName, \"IfcZone\"))\r\n         {\r\n            // (Teal Blue (Crayola)), according to Wikipedia.\r\n            return Tuple.Create(new Color(24, 167, 181), 75);\r\n         }\r\n\r\n         if (StringEquals(categoryName, \"Box\"))\r\n         {\r\n            // Lemon chiffon, a lovely color for a bounding box.                             \r\n            return Tuple.Create(new Color(255, 250, 205), 75);\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Checks if two strings are equal ignoring case, spaces, and apostrophes.\r\n      /// </summary>\r\n      /// <param name=\"string1\">The string to be compared.</param>\r\n      /// <param name=\"string2\">The other string to be compared.</param>\r\n      /// <returns>True if they are equal, false otherwise.</returns>\r\n      public static bool IsEqualIgnoringCaseSpacesApostrophe(string string1, string string2)\r\n      {\r\n         string nospace1 = string1.Replace(\" \", null).Replace(\"\\'\", null);\r\n         string nospace2 = string2.Replace(\" \", null).Replace(\"\\'\", null);\r\n         return (string.Compare(nospace1, nospace2, true) == 0);\r\n      }\r\n\r\n      private static bool IsColumnLoadBearing(IFCObjectDefinition originalEntity)\r\n      {\r\n         IFCObjectDefinition entity = originalEntity;\r\n\r\n         if (entity == null)\r\n            throw new InvalidOperationException(\"Function called for null entity.\");\r\n\r\n         // If the entity is an IFCTypeObject, get an associated IFCObject.  IFCColumnType doesn't\r\n         // know if it is load bearing or not.\r\n         // TODO: Check that all of the DefinedObjects have the same load bearing property, and warn otherwise.\r\n         if (!(entity is IFCObject))\r\n         {\r\n            if (entity is IFCTypeObject)\r\n            {\r\n               IFCTypeObject typeObject = entity as IFCTypeObject;\r\n               if (typeObject.DefinedObjects.Count == 0)\r\n                  return false;\r\n               entity = typeObject.DefinedObjects.First();\r\n            }\r\n            else\r\n               return false;\r\n         }\r\n\r\n         IFCObject columnEntity = entity as IFCObject;\r\n         IDictionary<string, IFCPropertySetDefinition> columnPropertySets = columnEntity.PropertySets;\r\n         IFCPropertySetDefinition psetColumnCommonDef = null;\r\n         if (columnPropertySets == null || (!columnPropertySets.TryGetValue(\"Pset_ColumnCommon\", out psetColumnCommonDef)))\r\n            return false;\r\n\r\n         if (!(psetColumnCommonDef is IFCPropertySet))\r\n            throw new InvalidOperationException(\"Invalid Pset_ColumnCommon class.\");\r\n\r\n         IFCPropertySet psetColumnCommon = psetColumnCommonDef as IFCPropertySet;\r\n         IDictionary<string, IFCProperty> columnCommonProperties = psetColumnCommon.IFCProperties;\r\n         IFCProperty loadBearingPropertyBase = null;\r\n         if (columnCommonProperties == null || (!columnCommonProperties.TryGetValue(\"LoadBearing\", out loadBearingPropertyBase)))\r\n            return false;\r\n\r\n         if (!(loadBearingPropertyBase is IFCSimpleProperty))\r\n            throw new InvalidOperationException(\"Invalid Pset_ColumnCommon::LoadBearing property.\");\r\n\r\n         IFCSimpleProperty loadBearingProperty = loadBearingPropertyBase as IFCSimpleProperty;\r\n         IList<IFCPropertyValue> propertyValues = loadBearingProperty.IFCPropertyValues;\r\n         if (propertyValues == null || propertyValues.Count == 0 || !propertyValues[0].HasValue())\r\n            return false;\r\n\r\n         return propertyValues[0].AsBoolean();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the entity type and predefined type for the IfcTypeObject of the entity.\r\n      /// </summary>\r\n      /// <param name=\"entity\">The entity.</param>\r\n      /// <param name=\"typeEntityType\">The IfcTypeObject entity type, if it exists.</param>\r\n      /// <param name=\"typePredefinedType\">The IfcTypeObject predefined type, if it exists.</param>\r\n      /// <remarks>This function is intended to give additional information for\r\n      /// categorization in Revit.  As such, it may ignore the type if it is generic.</remarks>\r\n      private static void GetAssociatedTypeEntityInfo(IFCObjectDefinition entity, out IFCEntityType? typeEntityType, out string typePredefinedType)\r\n      {\r\n         typeEntityType = null;\r\n         typePredefinedType = null;\r\n         if (entity is IFCObject)\r\n         {\r\n            IFCObject ifcObject = entity as IFCObject;\r\n            if (ifcObject.TypeObjects != null && ifcObject.TypeObjects.Count > 0)\r\n            {\r\n               IFCTypeObject typeObject = ifcObject.TypeObjects.First();\r\n               typeEntityType = typeObject.EntityType;\r\n\r\n               // \"IfcTypeObject\" and \"IfcTypeProduct\" are generic entity types\r\n               // that gives us no further information.  In this case, ignore these entity\r\n               // types and use the instance entity information.\r\n               if (typeEntityType == IFCEntityType.IfcTypeObject ||\r\n                  typeEntityType == IFCEntityType.IfcTypeProduct)\r\n               {\r\n                  typeEntityType = null;\r\n                  return;\r\n               }\r\n\r\n               typePredefinedType = typeObject.PredefinedType;\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the strings corresponding to the entity name and the predefined type.\r\n      /// </summary>\r\n      /// <param name=\"entity\">The entity.</param>\r\n      /// <returns>The entity name, predefined type, and object type as strings.</returns>\r\n      public static (string, string) GetEntityNameAndPredefinedType(IFCObjectDefinition entity)\r\n      {\r\n         IFCEntityType entityType = entity.EntityType;\r\n         string predefinedType = entity.PredefinedType;\r\n\r\n         GetAssociatedTypeEntityInfo(entity, out IFCEntityType? typeEntityType, out string typePredefinedType);\r\n\r\n         if (typeEntityType.HasValue)\r\n            entityType = typeEntityType.Value;\r\n         if (string.IsNullOrWhiteSpace(predefinedType) && !string.IsNullOrWhiteSpace(typePredefinedType))\r\n            predefinedType = typePredefinedType;\r\n\r\n         string categoryName = entityType.ToString();\r\n         return (categoryName, predefinedType);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a custom sub-category name for an entity.\r\n      /// </summary>\r\n      /// <param name=\"entity\">The entity.</param>\r\n      /// <returns>The category name.</returns>\r\n      public static string GetCustomCategoryName(IFCObjectDefinition entity)\r\n      {\r\n         (string categoryName, string predefinedType) = GetEntityNameAndPredefinedType(entity);\r\n\r\n         if (!string.IsNullOrEmpty(predefinedType))\r\n         {\r\n            // Object Type (if it exists) takes precedence if there is an entry in (Entity Type, Predefined Type, Object Type) table.\r\n            // Then Predefined Type, if it exists.\r\n            // Finally just the Entity Type.\r\n            string objectType = GetObjectType(entity as IFCObject);\r\n            if (!string.IsNullOrWhiteSpace(objectType) &&\r\n                EntityPredefinedObjectTypesToCategory.ContainsKey(Tuple.Create(entity.EntityType, predefinedType, objectType)))\r\n            {\r\n               categoryName += \".\" + objectType;\r\n            }\r\n            else\r\n            {\r\n               categoryName += \".\" + predefinedType;\r\n            }\r\n         }\r\n\r\n         return categoryName;\r\n      }\r\n\r\n      // TODO: this is duplicated in native code and .NET code.  Use this as \"Standard\" for .NET.\r\n      private static void InitEntityTypeToCategoryMaps()\r\n      {\r\n         // GENERAL NOTE:\r\n         // OST_PipeSegments is an available category that has no user controlled visibility.  As such, we use the more\r\n         // supported OST_PipeCurves instead.\r\n\r\n         // Map from entity type to built-in category id.\r\n         m_EntityTypeToCategory[IFCEntityType.IfcAirTerminal] = BuiltInCategory.OST_DuctTerminal;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcAirTerminalType] = BuiltInCategory.OST_DuctTerminal;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcAirToAirHeatRecovery] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcAirToAirHeatRecoveryType] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcAlarmType] = BuiltInCategory.OST_GenericModel;\r\n\r\n         // NOTE: We do have BuiltInCategory.OST_Alignments, and you can create a DirectShape of that type, but the\r\n         // Alignment update code isn't very happy about it.  So we will map to generic model for now.\r\n         m_EntityTypeToCategory[IFCEntityType.IfcAlignment] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcAlignmentHorizontal] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcAlignmentSegment] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcAlignmentVertical] = BuiltInCategory.OST_GenericModel;\r\n         \r\n         m_EntityTypeToCategory[IFCEntityType.IfcAnnotation] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcAudioVisualAppliance] = BuiltInCategory.OST_AudioVisualDevices;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcAudioVisualApplianceType] = BuiltInCategory.OST_AudioVisualDevices;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcBeam] = BuiltInCategory.OST_StructuralFraming;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcBeamStandardCase] = BuiltInCategory.OST_StructuralFraming;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcBeamType] = BuiltInCategory.OST_StructuralFraming;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcBoiler] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcBoilerType] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcBuilding] = BuiltInCategory.OST_ProjectInformation;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcBuildingElementPart] = BuiltInCategory.OST_Parts;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcBuildingElementPartType] = BuiltInCategory.OST_Parts;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcBuildingElementProxy] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcBuildingElementProxyType] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcBuildingStorey] = BuiltInCategory.OST_Levels;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcBuiltElement] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcCableCarrierFitting] = BuiltInCategory.OST_CableTrayFitting;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcCableCarrierFittingType] = BuiltInCategory.OST_CableTrayFitting;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcCableCarrierSegment] = BuiltInCategory.OST_CableTray;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcCableCarrierSegmentType] = BuiltInCategory.OST_CableTray;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcCableSegment] = BuiltInCategory.OST_Conduit;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcCableSegmentType] = BuiltInCategory.OST_Conduit;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcChimney] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcChimneyType] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcCoil] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcCommunicationsAppliance] = BuiltInCategory.OST_DataDevices;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcCommunicationsApplianceType] = BuiltInCategory.OST_DataDevices;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcColumn] = BuiltInCategory.OST_Columns;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcColumnStandardCase] = BuiltInCategory.OST_Columns;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcController] = BuiltInCategory.OST_SpecialityEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcControllerType] = BuiltInCategory.OST_SpecialityEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcCovering] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcCoveringType] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcCurtainWall] = BuiltInCategory.OST_Walls;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcCurtainWallType] = BuiltInCategory.OST_Walls;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDamper] = BuiltInCategory.OST_DuctAccessory;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDamperType] = BuiltInCategory.OST_DuctAccessory;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDiscreteAccessory] = BuiltInCategory.OST_SpecialityEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDiscreteAccessoryType] = BuiltInCategory.OST_SpecialityEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDistributionControlElement] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDistributionElement] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDistributionElementType] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDistributionFlowElement] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDistributionPort] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDoor] = BuiltInCategory.OST_Doors;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDoorStandardCase] = BuiltInCategory.OST_Doors;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDoorStyle] = BuiltInCategory.OST_Doors;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDoorType] = BuiltInCategory.OST_Doors;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDuctFitting] = BuiltInCategory.OST_DuctFitting;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDuctFittingType] = BuiltInCategory.OST_DuctFitting;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDuctSegment] = BuiltInCategory.OST_DuctCurves;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDuctSegmentType] = BuiltInCategory.OST_DuctCurves;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDuctSilencer] = BuiltInCategory.OST_DuctCurves;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcDuctSilencerType] = BuiltInCategory.OST_DuctCurves;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcElectricAppliance] = BuiltInCategory.OST_SpecialityEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcElectricApplianceType] = BuiltInCategory.OST_SpecialityEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcElectricDistributionBoard] = BuiltInCategory.OST_ElectricalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcElectricDistributionBoardType] = BuiltInCategory.OST_ElectricalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcElementAssembly] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcEnergyConversionDevice] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFacilityPart] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFan] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFanType] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFastener] = BuiltInCategory.OST_StructConnections;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFastenerType] = BuiltInCategory.OST_StructConnections;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFilter] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFilterType] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFireSuppressionTerminal] = BuiltInCategory.OST_Sprinklers;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFireSuppressionTerminalType] = BuiltInCategory.OST_Sprinklers;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFlowController] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFlowControllerType] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFlowFitting] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFlowMeter] = BuiltInCategory.OST_PipeAccessory;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFlowMeterType] = BuiltInCategory.OST_PipeAccessory;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFlowMovingDevice] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFlowSegment] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFlowStorageDevice] = BuiltInCategory.OST_SpecialityEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFlowTerminal] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFlowTreatmentDevice] = BuiltInCategory.OST_PlumbingEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFooting] = BuiltInCategory.OST_StructuralFoundation;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFootingType] = BuiltInCategory.OST_StructuralFoundation;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFurniture] = BuiltInCategory.OST_Furniture;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFurnitureType] = BuiltInCategory.OST_Furniture;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFurnishingElement] = BuiltInCategory.OST_Furniture;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcFurnishingElementType] = BuiltInCategory.OST_Furniture;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcGeographicElement] = BuiltInCategory.OST_Site;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcGeographicElementType] = BuiltInCategory.OST_Site;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcGrid] = BuiltInCategory.OST_Grids;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcHeatExchangerType] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcHumidifier] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcHumidifierType] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcInterceptor] = BuiltInCategory.OST_PlumbingEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcInterceptorType] = BuiltInCategory.OST_PlumbingEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcJunctionBox] = BuiltInCategory.OST_ElectricalFixtures;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcJunctionBoxType] = BuiltInCategory.OST_ElectricalFixtures;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcLamp] = BuiltInCategory.OST_LightingDevices;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcLampType] = BuiltInCategory.OST_LightingDevices;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcLightFixture] = BuiltInCategory.OST_LightingFixtures;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcLightFixtureType] = BuiltInCategory.OST_LightingFixtures;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcMechanicalFastener] = BuiltInCategory.OST_SpecialityEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcMechanicalFastenerType] = BuiltInCategory.OST_SpecialityEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcMember] = BuiltInCategory.OST_StructuralFraming;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcMemberStandardCase] = BuiltInCategory.OST_StructuralFraming;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcMemberType] = BuiltInCategory.OST_StructuralFraming;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcOpeningElement] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcOpeningStandardCase] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcOutletType] = BuiltInCategory.OST_ElectricalFixtures;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcPile] = BuiltInCategory.OST_StructuralFoundation;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcPileType] = BuiltInCategory.OST_StructuralFoundation;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcPipeFitting] = BuiltInCategory.OST_PipeFitting;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcPipeFittingType] = BuiltInCategory.OST_PipeFitting;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcPipeSegment] = BuiltInCategory.OST_PipeCurves;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcPipeSegmentType] = BuiltInCategory.OST_PipeCurves;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcPlate] = BuiltInCategory.OST_StructuralFraming;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcPlateStandardCase] = BuiltInCategory.OST_StructuralFraming;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcPlateType] = BuiltInCategory.OST_StructuralFraming;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcProjectionElement] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcProtectiveDeviceType] = BuiltInCategory.OST_ElectricalFixtures;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcProxy] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcPump] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcPumpType] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcRailing] = BuiltInCategory.OST_StairsRailing;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcRailingType] = BuiltInCategory.OST_StairsRailing;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcRamp] = BuiltInCategory.OST_Ramps;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcRampType] = BuiltInCategory.OST_Ramps;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcRampFlight] = BuiltInCategory.OST_Ramps;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcRampFlightType] = BuiltInCategory.OST_Ramps;\r\n\r\n         // NOTE: We do have BuiltInCategory.OST_Alignments, and you can create a DirectShape of that type, but the\r\n         // Alignment update code isn't very happy about it.  So we will map to generic model for now.\r\n         m_EntityTypeToCategory[IFCEntityType.IfcReferent] = BuiltInCategory.OST_GenericModel;\r\n\r\n         m_EntityTypeToCategory[IFCEntityType.IfcReinforcingBar] = BuiltInCategory.OST_Rebar;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcReinforcingBarType] = BuiltInCategory.OST_Rebar;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcReinforcingMesh] = BuiltInCategory.OST_FabricAreas;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcReinforcingMeshType] = BuiltInCategory.OST_FabricAreas;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcRoad] = BuiltInCategory.OST_Roads;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcRoof] = BuiltInCategory.OST_Roofs;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcRoofType] = BuiltInCategory.OST_Roofs;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcSanitaryTerminal] = BuiltInCategory.OST_PlumbingFixtures;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcSanitaryTerminalType] = BuiltInCategory.OST_PlumbingFixtures;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcSensor] = BuiltInCategory.OST_SpecialityEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcSensorType] = BuiltInCategory.OST_SpecialityEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcSite] = BuiltInCategory.OST_Site;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcSlab] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcSlabStandardCase] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcSlabType] = BuiltInCategory.OST_GenericModel;\r\n         // Importing space geometry for the Reference intent should create a generic model, as the Rooms category should\r\n         // be used for a real Revit room.\r\n         m_EntityTypeToCategory[IFCEntityType.IfcGeotechnicalStratum] = BuiltInCategory.OST_Topography;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcSpace] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcSpaceType] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcSpaceHeater] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcSpaceHeaterType] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcSpatialZone] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcSpatialZoneType] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcStair] = BuiltInCategory.OST_Stairs;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcStairType] = BuiltInCategory.OST_Stairs;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcStairFlight] = BuiltInCategory.OST_Stairs;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcStairFlightType] = BuiltInCategory.OST_Stairs;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcStructuralCurveAction] = BuiltInCategory.OST_AnalyticalMember;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcStructuralCurveMember] = BuiltInCategory.OST_AnalyticalMember;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcStructuralCurveReaction] = BuiltInCategory.OST_AnalyticalMember;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcStructuralPointConnection] = BuiltInCategory.OST_AnalyticalNodes;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcStructuralPointReaction] = BuiltInCategory.OST_AnalyticalNodes;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcSwitchingDevice] = BuiltInCategory.OST_ElectricalFixtures;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcSwitchingDeviceType] = BuiltInCategory.OST_ElectricalFixtures;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcSystemFurnitureElement] = BuiltInCategory.OST_Furniture;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcSystemFurnitureElementType] = BuiltInCategory.OST_Furniture;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcTank] = BuiltInCategory.OST_SpecialityEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcTankType] = BuiltInCategory.OST_SpecialityEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcTransformer] = BuiltInCategory.OST_ElectricalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcTransformerType] = BuiltInCategory.OST_ElectricalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcTransportElement] = BuiltInCategory.OST_SpecialityEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcTransportElementType] = BuiltInCategory.OST_SpecialityEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcUnitaryControlElement] = BuiltInCategory.OST_MechanicalControlDevices;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcUnitaryControlElementType] = BuiltInCategory.OST_MechanicalControlDevices;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcUnitaryEquipment] = BuiltInCategory.OST_MechanicalEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcValve] = BuiltInCategory.OST_PipeAccessory;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcValveType] = BuiltInCategory.OST_PipeAccessory;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcVirtualElement] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcVoidingFeature] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcWall] = BuiltInCategory.OST_Walls;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcWallStandardCase] = BuiltInCategory.OST_Walls;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcWallType] = BuiltInCategory.OST_Walls;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcWasteTerminal] = BuiltInCategory.OST_PlumbingEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcWasteTerminalType] = BuiltInCategory.OST_PlumbingEquipment;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcWindow] = BuiltInCategory.OST_Windows;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcWindowStandardCase] = BuiltInCategory.OST_Windows;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcWindowStyle] = BuiltInCategory.OST_Windows;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcWindowType] = BuiltInCategory.OST_Windows;\r\n         m_EntityTypeToCategory[IFCEntityType.IfcZone] = BuiltInCategory.OST_GenericModel;\r\n\r\n         // Entity type/predefined type pairs to categories.\r\n         m_EntityTypeKey[IFCEntityType.IfcColumnType] = IFCEntityType.IfcColumn;\r\n         m_EntityTypeKey[IFCEntityType.IfcCoveringType] = IFCEntityType.IfcCovering;\r\n         m_EntityTypeKey[IFCEntityType.IfcElectricApplianceType] = IFCEntityType.IfcElectricAppliance;\r\n         m_EntityTypeKey[IFCEntityType.IfcFireSuppressionTerminalType] = IFCEntityType.IfcFireSuppressionTerminal;\r\n         m_EntityTypeKey[IFCEntityType.IfcMemberType] = IFCEntityType.IfcMember;\r\n         m_EntityTypeKey[IFCEntityType.IfcPlateType] = IFCEntityType.IfcPlate;\r\n         m_EntityTypeKey[IFCEntityType.IfcSlabType] = IFCEntityType.IfcSlab;\r\n         m_EntityTypeKey[IFCEntityType.IfcValveType] = IFCEntityType.IfcValve;\r\n\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcAnnotation, \"USERDEFINED\")] = BuiltInCategory.OST_Topography;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcCableSegmentType, \"CABLESEGMENT\")] = BuiltInCategory.OST_ElectricalEquipment;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcCableSegmentType, \"CONDUCTORSEGMENT\")] = BuiltInCategory.OST_ElectricalEquipment;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcColumn, \"[LoadBearing]\")] = BuiltInCategory.OST_StructuralColumns;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcColumn, \"COLUMN\")] = BuiltInCategory.OST_Columns;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcColumn, \"USERDEFINED\")] = BuiltInCategory.OST_Columns;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcColumn, \"NOTDEFINED\")] = BuiltInCategory.OST_Columns;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcColumnStandardCase, \"[LoadBearing]\")] = BuiltInCategory.OST_StructuralColumns;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcColumnStandardCase, \"COLUMN\")] = BuiltInCategory.OST_Columns;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcColumnStandardCase, \"USERDEFINED\")] = BuiltInCategory.OST_Columns;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcColumnStandardCase, \"NOTDEFINED\")] = BuiltInCategory.OST_Columns; \r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcCovering, \"CEILING\")] = BuiltInCategory.OST_Ceilings;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcCovering, \"FLOORING\")] = BuiltInCategory.OST_Floors;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcCovering, \"ROOFING\")] = BuiltInCategory.OST_Roofs;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcDistributionSystem, \"UNDEFINED\")] = BuiltInCategory.OST_PipingSystem;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcDistributionSystem, \"USERDEFINED\")] = BuiltInCategory.OST_PipingSystem;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcElectricAppliance, \"DISHWASHER\")] = BuiltInCategory.OST_PlumbingFixtures;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcElectricAppliance, \"ELECTRICCOOKER\")] = BuiltInCategory.OST_ElectricalFixtures;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcElectricAppliance, \"FRIDGE_FREEZER\")] = BuiltInCategory.OST_SpecialityEquipment;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcElectricAppliance, \"TUMBLEDRYER\")] = BuiltInCategory.OST_ElectricalFixtures;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcElectricAppliance, \"WASHINGMACHINE\")] = BuiltInCategory.OST_ElectricalFixtures;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcElectricAppliance, \"USERDEFINED\")] = BuiltInCategory.OST_ElectricalFixtures;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcFacilityPart, \"ROADSEGMENT\")] = BuiltInCategory.OST_Roads;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcFireSuppressionTerminal, \"SPRINKLER\")] = BuiltInCategory.OST_Sprinklers;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcFlowController, \"CIRCUITBREAKER\")] = BuiltInCategory.OST_ElectricalEquipment;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcFlowSegment, \"CABLESEGMENT\")] = BuiltInCategory.OST_ElectricalEquipment;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcFlowSegment, \"CONDUCTORSEGMENT\")] = BuiltInCategory.OST_ElectricalEquipment;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcFlowTerminal, \"AUDIOVISUALOUTLET\")] = BuiltInCategory.OST_DataDevices;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcFlowTerminal, \"COMMUNICATIONSOUTLET\")] = BuiltInCategory.OST_DataDevices;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcFlowTerminal, \"NOTDEFINED\")] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcFlowTerminal, \"POWEROUTLET\")] = BuiltInCategory.OST_ElectricalFixtures;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcMember, \"MULLION\")] = BuiltInCategory.OST_CurtainWallMullions;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcMemberStandardCase, \"MULLION\")] = BuiltInCategory.OST_CurtainWallMullions;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcOutletType, \"AUDIOVISUALOUTLET\")] = BuiltInCategory.OST_DataDevices;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcOutletType, \"COMMUNICATIONSOUTLET\")] = BuiltInCategory.OST_DataDevices;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcOutletType, \"POWEROUTLET\")] = BuiltInCategory.OST_ElectricalFixtures;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcOutletType, \"NOTDEFINED\")] = BuiltInCategory.OST_GenericModel;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcPlate, \"CURTAIN_PANEL\")] = BuiltInCategory.OST_CurtainWallPanels;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcPlateStandardCase, \"CURTAIN_PANEL\")] = BuiltInCategory.OST_CurtainWallPanels;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcProtectiveDeviceType, \"CIRCUITBREAKER\")] = BuiltInCategory.OST_ElectricalEquipment;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcSlab, \"BASESLAB\")] = BuiltInCategory.OST_StructuralFoundation;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcSlab, \"FLOOR\")] = BuiltInCategory.OST_Floors;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcSlab, \"LANDING\")] = BuiltInCategory.OST_StairsLandings;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcSlab, \"ROOF\")] = BuiltInCategory.OST_Roofs;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcSlabStandardCase, \"BASESLAB\")] = BuiltInCategory.OST_StructuralFoundation;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcSlabStandardCase, \"FLOOR\")] = BuiltInCategory.OST_Floors;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcSlabStandardCase, \"LANDING\")] = BuiltInCategory.OST_StairsLandings;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcSlabStandardCase, \"ROOF\")] = BuiltInCategory.OST_Roofs; \r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcValve, \"DRAWOFFCOCK\")] = BuiltInCategory.OST_PlumbingFixtures;\r\n         m_EntityPredefinedTypeToCategory[Tuple.Create(IFCEntityType.IfcValve, \"FAUCET\")] = BuiltInCategory.OST_PlumbingFixtures;\r\n\r\n         // Using 3-Tuples for some Entities, PredefinedTypes, and ObjectTypes.\r\n         m_EntityPredefinedObjectTypesToCategory[Tuple.Create(IFCEntityType.IfcAnnotation, \"USERDEFINED\", \"CogoPoints\")] = BuiltInCategory.OST_Topography;\r\n         m_EntityPredefinedObjectTypesToCategory[Tuple.Create(IFCEntityType.IfcAnnotation, \"USERDEFINED\", \"StringLine\")] = BuiltInCategory.OST_Topography;\r\n         m_EntityPredefinedObjectTypesToCategory[Tuple.Create(IFCEntityType.IfcAnnotation, \"USERDEFINED\", \"BreakLine\")] = BuiltInCategory.OST_Topography;\r\n      }\r\n\r\n      private static bool InitFromFile()\r\n      {\r\n         string fileName = IFCImportFile.TheFile.Document.Application.ImportIFCCategoryTable;\r\n         StreamReader inFile = null;\r\n\r\n         if (!string.IsNullOrWhiteSpace(fileName))\r\n         {\r\n            try\r\n            {\r\n               inFile = new StreamReader(fileName);\r\n            }\r\n            catch\r\n            {\r\n               return false;\r\n            }\r\n         }\r\n\r\n         if (inFile == null)\r\n            return false;\r\n\r\n         IDictionary<string, Category> createdSubcategories = Importer.TheCache.CreatedSubcategories;\r\n\r\n         while (true)\r\n         {\r\n            string nextLine = inFile.ReadLine();\r\n            if (nextLine == null)\r\n               break;\r\n\r\n            // Skip empty line.\r\n            if (string.IsNullOrWhiteSpace(nextLine))\r\n               continue;\r\n\r\n            // Skip comment.\r\n            if (nextLine.First() == '#')\r\n               continue;\r\n\r\n            string[] fields = nextLine.Split('\\t');\r\n            int numFields = fields.Count();\r\n\r\n            // Too few fields, ignore.\r\n            if (numFields < 3)\r\n               continue;\r\n\r\n            string ifcClassName = fields[0];\r\n            if (string.IsNullOrWhiteSpace(ifcClassName))\r\n               continue;\r\n            IFCEntityType ifcClassType;\r\n            if (!Enum.TryParse(ifcClassName, true, out ifcClassType))\r\n            {\r\n               Importer.TheLog.LogWarning(-1, \"Unknown class name in IFC entity to category mapping file: \" + ifcClassName, true);\r\n               continue;\r\n            }\r\n\r\n            bool hasTypeName = (numFields == 4);\r\n            string ifcTypeName = null;\r\n            if (hasTypeName)\r\n               ifcTypeName = fields[1];\r\n\r\n            // Skip entries we have already seen\r\n            bool alreadyPresent = false;\r\n            if (string.IsNullOrWhiteSpace(ifcTypeName))\r\n               alreadyPresent = m_EntityTypeToCategory.ContainsKey(ifcClassType);\r\n            else\r\n               alreadyPresent = m_EntityPredefinedTypeToCategory.ContainsKey(Tuple.Create(ifcClassType, ifcTypeName));\r\n\r\n            if (alreadyPresent)\r\n               continue;\r\n\r\n            int categoryField = hasTypeName ? 2 : 1;\r\n            int subCategoryField = hasTypeName ? 3 : 2;\r\n\r\n            // If set to \"Don't Import\", or some variant, ignore this entity.\r\n            string categoryName = fields[categoryField];\r\n            if (IsEqualIgnoringCaseSpacesApostrophe(categoryName, \"DontImport\"))\r\n            {\r\n               if (string.IsNullOrWhiteSpace(ifcTypeName))\r\n                  m_EntityDontImport.Add(ifcClassType);\r\n               else\r\n                  m_EntityDontImportPredefinedType.Add(Tuple.Create(ifcClassType, ifcTypeName));\r\n               continue;\r\n            }\r\n\r\n            // TODO: Use enum name, not category name, in file.\r\n            ElementId categoryId = ElementId.InvalidElementId;\r\n            Category category = null;\r\n\r\n            try\r\n            {\r\n               category = Importer.TheCache.DocumentCategories.get_Item(categoryName);\r\n               categoryId = category.Id;\r\n            }\r\n            catch\r\n            {\r\n               Importer.TheLog.LogWarning(-1, \"Unknown top-level category in IFC entity to category mapping file: \" + categoryName, true);\r\n               continue;\r\n            }\r\n\r\n            string subCategoryName = null;\r\n            if (numFields > 2)\r\n            {\r\n               subCategoryName = fields[subCategoryField];\r\n               if (!string.IsNullOrWhiteSpace(subCategoryName))\r\n               {\r\n                  CategoryNameMap subCategories = category.SubCategories;\r\n\r\n                  try\r\n                  {\r\n                     Category subcategory = subCategories.get_Item(subCategoryName);\r\n                     categoryId = subcategory.Id;\r\n                  }\r\n                  catch\r\n                  {\r\n                     if (category.CanAddSubcategory)\r\n                     {\r\n                        Category subcategory = null;\r\n                        if (!createdSubcategories.TryGetValue(subCategoryName, out subcategory))\r\n                        {\r\n                           subcategory = Importer.TheCache.DocumentCategories.NewSubcategory(category, subCategoryName);\r\n                           createdSubcategories[subCategoryName] = subcategory;\r\n                        }\r\n                        categoryId = subcategory.Id;\r\n                     }\r\n                     else\r\n                        Importer.TheLog.LogWarning(-1, \"Can't add sub-category \" + subCategoryName + \" to top-level category \" + categoryName + \" in IFC entity to category mapping file.\", true);\r\n                  }\r\n               }\r\n            }\r\n\r\n            if (string.IsNullOrWhiteSpace(ifcTypeName))\r\n               m_EntityTypeToCategory[ifcClassType] = category.BuiltInCategory;\r\n            else\r\n               m_EntityPredefinedTypeToCategory[Tuple.Create(ifcClassType, ifcTypeName)] = category.BuiltInCategory;\r\n         }\r\n\r\n         return true;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the Object Type of the IFCObject.  This is needed since the caller may be using IFCObjectDescription.\r\n      /// </summary>\r\n      /// <param name=\"ifcObject\">Passed in IFCObject.</param>\r\n      /// <returns>Value of ObjectType.</returns>\r\n      private static string GetObjectType(IFCObject ifcObject)\r\n      {\r\n         return ifcObject?.ObjectType;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Retrieves Category for Entity Type from predefined mappings.  This will go from specific to general.\r\n      /// If an objectType is defined, this will look into the (entityType, predefinedType, obnjectType) mapping.\r\n      /// If that doesn't have any mapping defined, then this will look in (entityType, predefinedType) mapping.\r\n      /// Finally, if that doesn't work, the mapping for just that entityType will be used.\r\n      /// </summary>\r\n      /// <param name=\"entityType\">Enitity Type associated with IFCObjectDescription.</param>\r\n      /// <param name=\"predefinedType\">Predefined Type associated the IFCObjectDescription.</param>\r\n      /// <param name=\"objectType\">If the IFCObjectDescription is an IFCObject, this is the Object Type value.</param>\r\n      /// <returns>ElementId corresponding to Category.</returns>\r\n      private static ElementId GetCategoryElementId(IFCEntityType entityType, string predefinedType, string objectType = null)\r\n      {\r\n         BuiltInCategory catId;\r\n\r\n         if (!string.IsNullOrWhiteSpace(objectType))\r\n         {\r\n            // Check to see if category is contained in Object itself.\r\n            //\r\n\r\n            // Check to see if (entity type, predefined type, object type) have a known mapping.\r\n            //\r\n            if (EntityPredefinedObjectTypesToCategory.TryGetValue(Tuple.Create(entityType, predefinedType, objectType), out catId))\r\n               return new ElementId (catId);\r\n         }\r\n\r\n         // Check to see if the entity type and predefined type have a known mapping.\r\n         // Otherwise special cases follow that could be cached later.\r\n         if (EntityPredefinedTypeToCategory.TryGetValue(Tuple.Create(entityType, predefinedType), out catId))\r\n            return new ElementId(catId);\r\n\r\n         IFCEntityType key;\r\n         if (EntityTypeKey.TryGetValue(entityType, out key) &&\r\n             EntityPredefinedTypeToCategory.TryGetValue(Tuple.Create(key, predefinedType), out catId))\r\n            return new ElementId(catId);\r\n\r\n         // Check if there is a simple entity type to category mapping, and return if found.\r\n         if (EntityTypeToCategory.TryGetValue(entityType, out catId))\r\n            return new ElementId(catId);\r\n\r\n         return ElementId.InvalidElementId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines if a entity, with an optional predefined type, should be imported.\r\n      /// </summary>\r\n      /// <param name=\"type\">The entity type.</param>\r\n      /// <param name=\"predefinedType\">The predefined type.</param>\r\n      /// <returns>True if it is being imported, false otherwise.</returns>\r\n      public static bool CanImport(IFCEntityType type, string predefinedType)\r\n      {\r\n         if (EntityDontImport.Contains(type))\r\n            return false;\r\n\r\n         if (!string.IsNullOrWhiteSpace(predefinedType) && EntityDontImportPredefinedType.Contains(Tuple.Create(type, predefinedType)))\r\n            return false;\r\n\r\n         return true;\r\n      }\r\n\r\n      private static Category GetCategoryFromAcceptableNames(CategoryNameMap subcategories, string subCategoryName)\r\n      {\r\n         try\r\n         {\r\n            Category subCategory = subcategories.get_Item(subCategoryName);\r\n            if (subCategory != null)\r\n               return subCategory;\r\n         }\r\n         catch \r\n         { \r\n         }\r\n\r\n         if (Importer.TheOptions.HybridImportOptions == null)\r\n            return null;\r\n\r\n         // If we are doing hybrid import, try some other acceptable alternatives.\r\n         try\r\n         { \r\n            // First attempt: remove \"Type\".\r\n            int removeTypeLocation = subCategoryName.LastIndexOf(\"Type.\");\r\n            if (removeTypeLocation > 0)\r\n            {\r\n               string altSubCategoryName = subCategoryName.Replace(\"Type.\", \".\");\r\n               Category subCategory = subcategories.get_Item(altSubCategoryName);\r\n               if (subCategory != null)\r\n                  return subCategory;\r\n            }\r\n         }\r\n         catch\r\n         {\r\n         }\r\n\r\n         try\r\n         {\r\n            // Second attempt: uppercase predefined type.\r\n            int predefinedTypeLocation = subCategoryName.LastIndexOf(\".\");\r\n            if (predefinedTypeLocation > 0)\r\n            {\r\n               string[] nameAndPredefinedType = subCategoryName.Split('.');\r\n               if (nameAndPredefinedType.Count() == 2)\r\n               {\r\n                  nameAndPredefinedType[1] = nameAndPredefinedType[1].ToUpper();\r\n                  string altSubCategoryName = string.Join(\".\", nameAndPredefinedType);\r\n\r\n                  Category subCategory = subcategories.get_Item(altSubCategoryName);\r\n                  if (subCategory != null)\r\n                     return subCategory;\r\n               }\r\n            }\r\n         }\r\n         catch\r\n         {\r\n         }\r\n\r\n         return null;\r\n      }\r\n\r\n      private static Category GetOrCreateSubcategory(Document doc, int id, string subCategoryName, ElementId categoryId)\r\n      {\r\n         if (string.IsNullOrWhiteSpace(subCategoryName))\r\n            return null;\r\n\r\n         if (categoryId == ElementId.InvalidElementId)\r\n            categoryId = new ElementId(BuiltInCategory.OST_GenericModel);\r\n\r\n         Category subCategory = null;\r\n\r\n         IDictionary<string, Category> createdSubcategories = Importer.TheCache.CreatedSubcategories;\r\n         if (!createdSubcategories.TryGetValue(subCategoryName, out subCategory))\r\n         {\r\n            subCategory = GetCategoryFromAcceptableNames(Importer.TheCache.GenericModelsCategory?.SubCategories,\r\n               subCategoryName);\r\n\r\n            // Then Topography.\r\n            //\r\n            if (subCategory == null)\r\n            {\r\n               try\r\n               {\r\n                  CategoryNameMap subcategories = Importer.TheCache.TopographyCategory.SubCategories;\r\n                  subCategory = subcategories.get_Item(subCategoryName);\r\n               }\r\n               catch\r\n               {\r\n                  subCategory = null;\r\n               }\r\n            }\r\n\r\n            //If not found, then create a Subcategory of the Category.\r\n            if (subCategory == null)\r\n            {\r\n               Category parentCategory = Category.GetCategory(doc, categoryId);\r\n               subCategory = Importer.TheCache.DocumentCategories.NewSubcategory(parentCategory, subCategoryName);\r\n               CreateMaterialsForSpecialSubcategories(doc, id, subCategory, subCategoryName);\r\n\r\n               // Copy the line weights of the parent category.\r\n               foreach (GraphicsStyleType graphicsStyleType in Enum.GetValues(typeof(GraphicsStyleType)))\r\n               {\r\n                  try\r\n                  {\r\n                     int? lineWeight = parentCategory.GetLineWeight(graphicsStyleType);\r\n                     if (lineWeight.HasValue)\r\n                        subCategory.SetLineWeight(lineWeight.Value, graphicsStyleType);\r\n                  }\r\n                  catch\r\n                  { \r\n                  }\r\n               }\r\n            }\r\n\r\n            createdSubcategories[subCategoryName] = subCategory;\r\n         }\r\n\r\n         return subCategory;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set a transparent material (by default) for spaces and openings.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"category\">The category class.</param>\r\n      /// <param name=\"id\">The id of the generating entity.</param>\r\n      /// <param name=\"subCategoryName\">The name of the created (sub-)category.</param>\r\n      private static void CreateMaterialsForSpecialSubcategories(Document doc, int id, Category category, string subCategoryName)\r\n      {\r\n         // A pair of material color (key) and transparency (value).\r\n         Tuple<Color, int> colorAndTransparency =\r\n            GetPredefinedColorAndTransparencyForCategoryByName(subCategoryName);\r\n\r\n         if (colorAndTransparency == null)\r\n            return;\r\n\r\n         IFCMaterialInfo materialInfo = \r\n            IFCMaterialInfo.Create(colorAndTransparency.Item1, colorAndTransparency.Item2, null, null, ElementId.InvalidElementId);\r\n\r\n         if (materialInfo != null)\r\n         {\r\n            ElementId createdElementId = IFCMaterial.CreateMaterialElem(doc, id, subCategoryName, materialInfo);\r\n            if (createdElementId != ElementId.InvalidElementId)\r\n            {\r\n               Material material = doc.GetElement(createdElementId) as Material;\r\n               category.Material = material;\r\n            }\r\n         }\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Determines if the category qualifies for a subcategory.\r\n      /// Criteria:\r\n      /// 1. DirectShape hasn't already been created internally.\r\n      /// 2. Category is OST_GenericModel.\r\n      /// 3. Mapping exists in (EntityType, PredefinedType, ObjectType) table.\r\n      /// </summary>\r\n      /// <param name=\"categoryId\">Category to test.</param>\r\n      /// <param name=\"entityPredefinedObjectTypeKey\">Tuple to look into Category mapping table.</param>\r\n      /// <returns>Boolean to indicate whether we set the category or not.</returns>\r\n      private static bool ShouldSetSubcategory (ElementId categoryId, int id,\r\n                                                Tuple <IFCEntityType, string, string> entityPredefinedObjectTypeKey)\r\n      {\r\n         if (IFCImportHybridInfo.GetDirectShape(id)?.Category != null)\r\n            return false;\r\n\r\n         if (categoryId == new ElementId(BuiltInCategory.OST_GenericModel))\r\n            return true;\r\n\r\n         return (entityPredefinedObjectTypeKey != null) && (EntityPredefinedObjectTypesToCategory.ContainsKey(entityPredefinedObjectTypeKey));\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Get the top-level Built-in category id for an IFC entity.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The doument.</param>\r\n      /// <param name=\"entity\">The entity.</param>\r\n      /// <param name=\"gstyleId\">The graphics style, if the returned category is not top level.  This allows shapes to have their visibility controlled by the sub-category.</param>\r\n      /// <returns>The element id for the built-in category.</returns>\r\n      public static ElementId GetCategoryIdForEntity(Document doc, IFCObjectDefinition entity, out ElementId gstyleId)\r\n      {\r\n         gstyleId = ElementId.InvalidElementId;\r\n\r\n         IFCEntityType entityType = entity.EntityType;\r\n\r\n         IFCEntityType? typeEntityType = null;\r\n         string typePredefinedType = null;\r\n         GetAssociatedTypeEntityInfo(entity, out typeEntityType, out typePredefinedType);\r\n\r\n         // Use the IfcTypeObject predefined type if the IfcElement predefined type is either null, empty, white space, or not defined.\r\n         string predefinedType = entity.PredefinedType;\r\n         if ((string.IsNullOrWhiteSpace(predefinedType) || (string.Compare(predefinedType, \"NOTDEFINED\", true) == 0)) &&\r\n             !string.IsNullOrWhiteSpace(typePredefinedType))\r\n            predefinedType = typePredefinedType;\r\n\r\n         // Set \"special\" predefined types \r\n         if (IsSpecialColumnCase(entity))\r\n            predefinedType = \"[LoadBearing]\";\r\n\r\n         // Get Object Type for Entity.  This may be null if the entity is not an IFCObject.\r\n         //\r\n         string objectType = GetObjectType(entity as IFCObject);\r\n\r\n         // First try on category:  if needed inspect the entity for a given category.\r\n         //\r\n         ElementId catElemId = entity.GetCategoryElementId();\r\n         if (catElemId == ElementId.InvalidElementId)\r\n         {\r\n            catElemId = GetCategoryElementId(entityType, predefinedType, objectType);\r\n         }\r\n         ElementId genericModelId = new ElementId(BuiltInCategory.OST_GenericModel);\r\n\r\n         // If we didn't find a category, or if we found the generic model category, try again with the IfcTypeObject, if there is one.\r\n\r\n         if (catElemId == ElementId.InvalidElementId || catElemId == genericModelId)\r\n         {\r\n            // typeEntityType corresponds to an IFCTypeObject, so no objectType parameter.\r\n            //\r\n            if (typeEntityType.HasValue)\r\n               catElemId = GetCategoryElementId(typeEntityType.Value, predefinedType);\r\n         }\r\n\r\n         Tuple <IFCEntityType, string, string> entityPredefinedObjectTypesKey = Tuple.Create (entityType, entity.PredefinedType, objectType);\r\n         Category subCategory = null;\r\n         if (ShouldSetSubcategory(catElemId, entity.Id, entityPredefinedObjectTypesKey))\r\n         {\r\n            string subCategoryName = GetCustomCategoryName(entity);\r\n\r\n            subCategory = GetOrCreateSubcategory(doc, entity.Id, subCategoryName, catElemId);\r\n            if (subCategory != null)\r\n            {\r\n               GraphicsStyle graphicsStyle = subCategory.GetGraphicsStyle(GraphicsStyleType.Projection);\r\n               if (graphicsStyle != null)\r\n                  gstyleId = graphicsStyle.Id;\r\n            }\r\n         }\r\n         else if (catElemId == ElementId.InvalidElementId)\r\n         {\r\n            catElemId = genericModelId;\r\n\r\n            // Top level entities that are OK to be here.\r\n            if (entityType != IFCEntityType.IfcProject &&\r\n                entityType != IFCEntityType.IfcBuilding &&\r\n                entityType != IFCEntityType.IfcBuildingStorey &&\r\n                entityType != IFCEntityType.IfcElementAssembly &&\r\n                entityType != IFCEntityType.IfcSystem)\r\n            {\r\n               string msg = \"Setting IFC entity \";\r\n               if (string.IsNullOrWhiteSpace(predefinedType))\r\n                  msg = entityType.ToString();\r\n               else\r\n                  msg = entityType.ToString() + \".\" + predefinedType;\r\n\r\n               if (typeEntityType.HasValue)\r\n                  msg += \" (\" + typeEntityType.Value.ToString() + \")\";\r\n\r\n               msg += \" to Generic Models.\";\r\n               Importer.TheLog.LogWarning(entity.Id, msg, true);\r\n            }\r\n         }\r\n\r\n         Category categoryToCheck = null;\r\n\r\n         if (catElemId <= ElementId.InvalidElementId)\r\n            categoryToCheck = Importer.TheCache.DocumentCategories.get_Item((BuiltInCategory)catElemId.Value);\r\n         else\r\n            categoryToCheck = subCategory;\r\n\r\n         if (categoryToCheck != null)\r\n         {\r\n            // We'll assume that a negative value means a built-in category.  It may still be a sub-category, in which case we need to get the parent category and assign the gstyle.\r\n            // We could optimize this, but this is safer.\r\n            Category parentCategory = categoryToCheck.Parent;\r\n            if (parentCategory != null)\r\n               catElemId = parentCategory.Id;\r\n\r\n            // Not already set by subcategory.\r\n            if (gstyleId == ElementId.InvalidElementId)\r\n            {\r\n               GraphicsStyle graphicsStyle = categoryToCheck.GetGraphicsStyle(GraphicsStyleType.Projection);\r\n               if (graphicsStyle != null)\r\n                  gstyleId = graphicsStyle.Id;\r\n            }\r\n         }\r\n\r\n         return catElemId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get or create the sub-category for a representation other than the body representation for a particular category.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The doument.</param>\r\n      /// <param name=\"entityId\">The entity id.</param>\r\n      /// <param name=\"repId\">The representation identifier.</param>\r\n      /// <param name=\"category\">The top-level category id for the element.</param>\r\n      /// <returns>The sub-category.  This allows shapes to have their visibility controlled by the sub-category.</param></returns>\r\n      public static Category GetSubCategoryForRepresentation(Document doc, int entityId, IFCRepresentationIdentifier repId)\r\n      {\r\n         if (repId == IFCRepresentationIdentifier.Body || repId == IFCRepresentationIdentifier.Other)\r\n            return null;\r\n\r\n         Category category = Importer.TheCache.GenericModelsCategory;\r\n         if (category == null)\r\n            return null;\r\n\r\n         ElementId categoryId = new ElementId(BuiltInCategory.OST_GenericModel);\r\n         string subCategoryName = repId.ToString();\r\n         Category subCategory = GetOrCreateSubcategory(doc, entityId, subCategoryName, categoryId);\r\n         return subCategory;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines if the ObjectDefinition is one of the special Load-bearing cases, which requires a Category of Structural Column in Revit.\r\n      /// </summary>\r\n      /// <param name=\"objectDefinition\">Entity to check.</param>\r\n      /// <returns>True if the parameter is a special load-bearing column, False otherwise.</returns>\r\n      public static bool IsSpecialColumnCase(IFCObjectDefinition objectDefinition)\r\n      {\r\n         bool isSpecialCase = false;\r\n         try\r\n         {\r\n            switch (objectDefinition.EntityType)\r\n            {\r\n               case IFCEntityType.IfcColumn:\r\n               case IFCEntityType.IfcColumnStandardCase:\r\n               case IFCEntityType.IfcColumnType:\r\n                  if (IsColumnLoadBearing(objectDefinition))\r\n                  {\r\n                     isSpecialCase = true;\r\n                  }\r\n                  break;\r\n            }\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            Importer.TheLog.LogWarning(objectDefinition.Id, ex.Message, false);\r\n         }\r\n\r\n         return isSpecialCase;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/IFCDataUtil.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Data;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides utility methods for IFCData class.\r\n   /// </summary>\r\n   public class IFCDataUtil\r\n   {\r\n      static private IDictionary<string, ForgeTypeId> m_MeasureCache = null;\r\n\r\n      static private void InitializeMeasureCache()\r\n      {\r\n         m_MeasureCache = new SortedDictionary<string, ForgeTypeId>(StringComparer.InvariantCultureIgnoreCase);\r\n\r\n         m_MeasureCache[\"IfcAccelerationMeasure\"] = SpecTypeId.Acceleration;\r\n         m_MeasureCache[\"IfcAngularVelocityMeasure\"] = SpecTypeId.Pulsation;         \r\n         m_MeasureCache[\"IfcAreaDensityMeasure\"] = SpecTypeId.MassPerUnitArea;\r\n         m_MeasureCache[\"IfcAreaMeasure\"] = SpecTypeId.Area;\r\n         m_MeasureCache[\"IfcCountMeasure\"] = SpecTypeId.Number;\r\n         m_MeasureCache[\"IfcElectricCurrentMeasure\"] = SpecTypeId.Current;\r\n         m_MeasureCache[\"IfcElectricVoltageMeasure\"] = SpecTypeId.ElectricalPotential;\r\n         m_MeasureCache[\"IfcEnergyMeasure\"] = SpecTypeId.Energy;\r\n         m_MeasureCache[\"IfcDynamicViscosityMeasure\"] = SpecTypeId.HvacViscosity;\r\n         m_MeasureCache[\"IfcForceMeasure\"] = SpecTypeId.Force;\r\n         m_MeasureCache[\"IfcFrequencyMeasure\"] = SpecTypeId.ElectricalFrequency;\r\n         m_MeasureCache[\"IfcHeatFluxDensityMeasure\"] = SpecTypeId.HvacPowerDensity;\r\n         m_MeasureCache[\"IfcHeatingValueMeasure\"] = SpecTypeId.SpecificHeatOfVaporization;\r\n         m_MeasureCache[\"IfcIlluminanceMeasure\"] = SpecTypeId.Illuminance;\r\n         m_MeasureCache[\"IfcInteger\"] = SpecTypeId.Number;\r\n         m_MeasureCache[\"IfcIonConcentrationMeasure\"] = SpecTypeId.PipingDensity;\r\n         m_MeasureCache[\"IfcIsothermalMoistureCapacityMeasure\"] = SpecTypeId.IsothermalMoistureCapacity;\r\n         m_MeasureCache[\"IfcLengthMeasure\"] = SpecTypeId.Length;\r\n         m_MeasureCache[\"IfcLinearForceMeasure\"] = SpecTypeId.LinearForce;\r\n         m_MeasureCache[\"IfcLinearMomentMeasure\"] = SpecTypeId.LinearMoment;\r\n         m_MeasureCache[\"IfcLinearStiffnessMeasure\"] = SpecTypeId.PointSpringCoefficient;\r\n         m_MeasureCache[\"IfcLinearVelocityMeasure\"] = SpecTypeId.HvacVelocity;\r\n         m_MeasureCache[\"IfcLuminousFluxMeasure\"] = SpecTypeId.LuminousFlux;\r\n         m_MeasureCache[\"IfcLuminousIntensityMeasure\"] = SpecTypeId.LuminousIntensity;\r\n         m_MeasureCache[\"IfcMassFlowRateMeasure\"] = SpecTypeId.PipingMassPerTime;\r\n         m_MeasureCache[\"IfcMassMeasure\"] = SpecTypeId.Mass;\r\n         m_MeasureCache[\"IfcMassDensityMeasure\"] = SpecTypeId.MassDensity;\r\n         m_MeasureCache[\"IfcMassPerLengthMeasure\"] = SpecTypeId.MassPerUnitLength;\r\n         m_MeasureCache[\"IfcModulusOfElasticityMeasure\"] = SpecTypeId.Stress;\r\n         m_MeasureCache[\"IfcMoistureDiffusivityMeasure\"] = SpecTypeId.Diffusivity;\r\n         m_MeasureCache[\"IfcMomentofInertiaMeasure\"] = SpecTypeId.MomentOfInertia;\r\n         m_MeasureCache[\"IfcMonetaryMeasure\"] = SpecTypeId.Currency;\r\n         m_MeasureCache[\"IfcNormalisedRatioMeasure\"] = SpecTypeId.Number;\r\n         m_MeasureCache[\"IfcNumericMeasure\"] = SpecTypeId.Number;\r\n         m_MeasureCache[\"IfcPositiveRatioMeasure\"] = SpecTypeId.Number;\r\n         m_MeasureCache[\"IfcPositiveLengthMeasure\"] = SpecTypeId.Length;\r\n         m_MeasureCache[\"IfcPlanarForceMeasure\"] = SpecTypeId.AreaForce;\r\n         m_MeasureCache[\"IfcPlaneAngleMeasure\"] = SpecTypeId.Angle;\r\n         m_MeasureCache[\"IfcPositivePlaneAngleMeasure\"] = SpecTypeId.Angle;\r\n         m_MeasureCache[\"IfcPowerMeasure\"] = SpecTypeId.HvacPower;\r\n         m_MeasureCache[\"IfcPressureMeasure\"] = SpecTypeId.HvacPressure;\r\n         m_MeasureCache[\"IfcRatioMeasure\"] = SpecTypeId.Number;\r\n         m_MeasureCache[\"IfcReal\"] = SpecTypeId.Number;\r\n         m_MeasureCache[\"IfcRotationalFrequencyMeasure\"] = SpecTypeId.AngularSpeed;\r\n         m_MeasureCache[\"IfcSoundPowerMeasure\"] = SpecTypeId.Wattage;\r\n         m_MeasureCache[\"IfcSoundPressureMeasure\"] = SpecTypeId.HvacPressure;\r\n         m_MeasureCache[\"IfcSpecificHeatCapacityMeasure\"] = SpecTypeId.SpecificHeat;\r\n         m_MeasureCache[\"IfcTimeMeasure\"] = SpecTypeId.Time;\r\n         m_MeasureCache[\"IfcTimeStamp\"] = SpecTypeId.Number;  // No unit type for time in Revit.\r\n         m_MeasureCache[\"IfcThermalConductivityMeasure\"] = SpecTypeId.ThermalConductivity; \r\n         m_MeasureCache[\"IfcThermalExpansionCoefficientMeasure\"] = SpecTypeId.ThermalExpansionCoefficient;\r\n         m_MeasureCache[\"IfcThermalTransmittanceMeasure\"] = SpecTypeId.HeatTransferCoefficient;\r\n         m_MeasureCache[\"IfcThermalResistanceMeasure\"] = SpecTypeId.ThermalResistance;\r\n         m_MeasureCache[\"IfcThermodynamicTemperatureMeasure\"] = SpecTypeId.HvacTemperature;\r\n         m_MeasureCache[\"IfcTorqueMeasure\"] = SpecTypeId.Moment;\r\n         m_MeasureCache[\"IfcVaporPermeabilityMeasure\"] = SpecTypeId.Permeability;\r\n         m_MeasureCache[\"IfcVolumeMeasure\"] = SpecTypeId.Volume;\r\n         m_MeasureCache[\"IfcVolumetricFlowRateMeasure\"] = SpecTypeId.AirFlow;\r\n         m_MeasureCache[\"IfcWarpingConstantMeasure\"] = SpecTypeId.WarpingConstant;\r\n      }\r\n\r\n      static public IDictionary<string, ForgeTypeId> MeasureCache\r\n      {\r\n         get\r\n         {\r\n            if (m_MeasureCache == null)\r\n               InitializeMeasureCache();\r\n            return m_MeasureCache;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the unit type from an IFC data.\r\n      /// </summary>\r\n      /// <param name=\"data\">The IFC data.</param>\r\n      /// <param name=\"defaultSpec\">The default spec, if no spec is found.</param>\r\n      /// <param name=\"propertyType\">The string value of the simple type, returned for logging purposes.</param>\r\n      /// <returns>The unit type.</returns>\r\n      public static ForgeTypeId GetUnitTypeFromData(IFCData data, ForgeTypeId defaultSpec, out string propertyType)\r\n      {\r\n         ForgeTypeId specTypeId = new ForgeTypeId();\r\n\r\n         if (data.HasSimpleType())\r\n         {\r\n            propertyType = data.GetSimpleType();\r\n            if (!MeasureCache.TryGetValue(propertyType, out specTypeId))\r\n               specTypeId = defaultSpec;\r\n         }\r\n         else\r\n         {\r\n            propertyType = \"\";\r\n            specTypeId = defaultSpec;\r\n         }\r\n\r\n         return specTypeId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the unit type from an IFC data.\r\n      /// </summary>\r\n      /// <param name=\"data\">The IFC data.</param>\r\n      /// <param name=\"defaultSpec\">The default spec, if no spec is found.</param>\r\n      /// <returns>The unit type.</returns>\r\n      public static ForgeTypeId GetUnitTypeFromData(IFCData data, ForgeTypeId defaultSpec)\r\n      {\r\n         string propertyType;\r\n         return GetUnitTypeFromData(data, defaultSpec, out propertyType);\r\n      }\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/IFCElementUtil.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Import.Data;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   /// <summary>\r\n   /// Utilities for IFCElement\r\n   /// </summary>\r\n   public class IFCElementUtil\r\n   {\r\n      /// <summary>\r\n      /// Gets the host of a hosted element, if any.\r\n      /// </summary>\r\n      /// <param name=\"hostedElement\">The hosted element.</param>\r\n      /// <returns>The host, or null.</returns>\r\n      static public IFCElement GetHost(IFCElement hostedElement)\r\n      {\r\n         if (hostedElement == null)\r\n            return null;\r\n\r\n         IFCFeatureElementSubtraction fillsOpening = hostedElement.FillsOpening;\r\n         if (fillsOpening == null)\r\n            return null;\r\n\r\n         return fillsOpening.VoidsElement;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the elements hosted by this host element, if any.\r\n      /// </summary>\r\n      /// <param name=\"hostElement\">The host element.</param>\r\n      /// <returns>The hosted elements, or null.  An unfilled opening counts as a hosted element.</returns>\r\n      static public IList<IFCElement> GetHostedElements(IFCElement hostElement)\r\n      {\r\n         if (hostElement == null)\r\n            return null;\r\n\r\n         ICollection<IFCFeatureElementSubtraction> openings = hostElement.Openings;\r\n         if (openings == null || (openings.Count == 0))\r\n            return null;\r\n\r\n         IList<IFCElement> hostedElements = new List<IFCElement>();\r\n         foreach (IFCFeatureElementSubtraction opening in openings)\r\n         {\r\n            if (!(opening is IFCOpeningElement))\r\n               hostedElements.Add(opening);\r\n            else\r\n            {\r\n               IFCOpeningElement openingElement = opening as IFCOpeningElement;\r\n               if (openingElement.FilledByElement != null)\r\n                  hostedElements.Add(openingElement.FilledByElement);\r\n               else\r\n                  hostedElements.Add(openingElement);\r\n            }\r\n         }\r\n\r\n         return hostedElements;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns a category id valid for DirectShape or DirestShapeType creation.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"categoryId\">The original category id.</param>\r\n      /// <param name=\"id\">The id of the creator, for warning use.</param>\r\n      /// <returns>The original category id, or BuiltInCategory.OST_GenericModel, if it can't be used.</returns>\r\n      static public ElementId GetDSValidCategoryId(Document doc, ElementId categoryId, int id)\r\n      {\r\n         if (!DirectShape.IsValidCategoryId(categoryId, doc))\r\n         {\r\n            Importer.TheLog.LogWarning(id, \"Creating DirectShape or DirectShapeType with disallowed category id: \" + categoryId + \", reverting to Generic Models.\", true);\r\n            return new ElementId(BuiltInCategory.OST_GenericModel);\r\n         }\r\n\r\n         return categoryId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a DirectShape, and set its options accordingly.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"categoryId\">The category of the DirectShape.</param>\r\n      /// <param name=\"dataGUID\">The GUID of the data creating the DirectShape.</param>\r\n      /// <param name=\"geomObjs\">The list of geometries to add to the DirectShape.</param>\r\n      /// <param name=\"id\">The id of the IFCEntity object creating the DirectShape.</param>\r\n      /// <returns>The DirectShape.</returns>\r\n      static public DirectShape CreateElement(Document doc, ElementId categoryId, string dataGUID, IList<GeometryObject> geomObjs, int id, IFCEntityType entityType)\r\n      {\r\n         string appGUID = Importer.ImportAppGUID();\r\n         DirectShape directShape = DirectShape.CreateElement(doc, GetDSValidCategoryId(doc, categoryId, id));\r\n         directShape.ApplicationId = appGUID;\r\n         directShape.ApplicationDataId = dataGUID;\r\n\r\n         // Note: we use the standard options for the DirectShape that is created.  This includes but is not limited to:\r\n         // Referenceable: true.\r\n         // Room Bounding: if applicable, user settable.\r\n\r\n         if (IFCImportFile.TheFile.Options.UseStreamlinedOptions)\r\n         {\r\n            // Disable referencing for performance purposes.\r\n            DirectShapeOptions options = directShape.GetOptions();\r\n            options.ReferencingOption = DirectShapeReferencingOption.NotReferenceable;\r\n            directShape.SetOptions(options);\r\n         }\r\n\r\n         // This is used in some places to create something not related to an IFCEntity\r\n         if (!Importer.TheProcessor.CreateOrUpdateElement(id, dataGUID, entityType.ToString(), \r\n            categoryId.Value, geomObjs))\r\n         {\r\n            if (geomObjs != null)\r\n               directShape?.SetShape(geomObjs);\r\n         }\r\n\r\n         return directShape;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a DirectShapeType.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"name\">The name of the DirectShapeType.</param>\r\n      /// <param name=\"categoryId\">The category of the DirectShape.</param>\r\n      /// <param name=\"id\">The id of the IFCEntity object creating the DirectShape.</param>\r\n      /// <param name=\"guid\">The guid of the IFCEntity object creating the DirectShape.</param>\r\n      /// <returns>The DirectShape.</returns>\r\n      static public DirectShapeType CreateElementType(Document doc, string name, ElementId categoryId, int id, string guid, IFCEntityType entityType)\r\n      {\r\n         DirectShapeTypeOptions options = new DirectShapeTypeOptions();\r\n         options.AllowDuplicateNames = true;\r\n         ElementId validCategoryId = GetDSValidCategoryId(doc, categoryId, id);\r\n         DirectShapeType directShapeType = DirectShapeType.Create(doc, name, validCategoryId, options);\r\n         Importer.TheCache.CreatedDirectShapeTypes[id] = directShapeType.Id;\r\n\r\n         Importer.TheProcessor.CreateElementType(id, guid, entityType.ToString(), validCategoryId.Value);\r\n\r\n         return directShapeType;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/IFCGUIDUtil.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   /// <summary>\r\n   /// Utilities for GUID-related functions\r\n   /// </summary>\r\n   public class IFCGUIDUtil\r\n   {\r\n      /// <summary>\r\n      /// Returns the IFC GUID associated with an element.\r\n      /// </summary>\r\n      /// <param name=\"elem\">The element.</param>\r\n      /// <returns>The string containing the GUID, or null if it doesn't exist.</returns>\r\n      static public string GetGUID(Element elem)\r\n      {\r\n         BuiltInParameter paramId = (elem is ElementType) ? BuiltInParameter.IFC_TYPE_GUID : BuiltInParameter.IFC_GUID;\r\n         Parameter param = elem.get_Parameter(paramId);\r\n         if (param == null)\r\n            return null;   // This Element was generated by other means.\r\n\r\n         return param.AsString();\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/IFCImportCache.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Data;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   /// <summary>\r\n   /// Utilities for caching values during IFC Import.\r\n   /// </summary>\r\n   public class IFCImportCache\r\n   {\r\n      public AllocatedGeometryObjectCache AllocatedGeometryObjectCache { get; set; } = new AllocatedGeometryObjectCache();\r\n\r\n      /// <summary>\r\n      /// The ParameterBindings map associated with accessed documents.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// We only really expect one document here, but this is safer.\r\n      /// </remarks>\r\n      private IDictionary<Document, BindingMap> ParameterBindings { get; set; } = null;\r\n\r\n      public BindingMap GetParameterBinding(Document doc)\r\n      {\r\n         if (doc == null)\r\n            throw new ArgumentNullException(\"Missing document.\");\r\n\r\n         if (ParameterBindings == null)\r\n            ParameterBindings = new Dictionary<Document, BindingMap>();\r\n\r\n         BindingMap bindingMap;\r\n         if (ParameterBindings.TryGetValue(doc, out bindingMap))\r\n         {\r\n            return bindingMap;\r\n         }\r\n\r\n         bindingMap = doc.ParameterBindings;\r\n         ParameterBindings[doc] = bindingMap;\r\n         return bindingMap;\r\n      }\r\n\r\n      /// <summary>\r\n      /// The Categories class for the document associated with this import.\r\n      /// </summary>\r\n      public Categories DocumentCategories { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The id of the ProjectInformation class for the document associated with this import.\r\n      /// </summary>\r\n      public ElementId ProjectInformationId { get; protected set; } = ElementId.InvalidElementId;\r\n\r\n      /// <summary>\r\n      /// A mapping of representation items to IfcStyledItems.\r\n      /// </summary>\r\n      public IDictionary<IFCAnyHandle, ICollection<IFCAnyHandle>> StyledByItems { get; } = new Dictionary<IFCAnyHandle, ICollection<IFCAnyHandle>>();\r\n\r\n      public IDictionary<IFCAnyHandle, IFCAnyHandle> LayerAssignment { get; } = new Dictionary<IFCAnyHandle, IFCAnyHandle>();\r\n\r\n      /// <summary>\r\n      /// A mapping from an IFCRepresentationMap entity id to an IFCTypeProduct.\r\n      /// If a mapping entry exists here, it means that the IFCRepresentationMap is referenced by exactly 1 IFCTypeProduct.\r\n      /// </summary>\r\n      public IDictionary<int, IFCTypeProduct> RepMapToTypeProduct { get; protected set; } = new Dictionary<int, IFCTypeProduct>();\r\n\r\n      /// <summary>\r\n      /// A mapping from an IFCTypeProduct entity id to a IFCRepresentation label.\r\n      /// If a mapping entry exists here, it means that the IFCTypeProduct has exactly 1 IFCRepresentation \r\n      /// of a particular label, accessed via an IFCRepresentationMap.\r\n      /// </summary>\r\n      public IDictionary<int, ISet<string>> TypeProductToRepLabel { get; protected set; } = new Dictionary<int, ISet<string>>();\r\n\r\n      /// <summary>\r\n      /// A mapping from an IFCTypeProduct entity id to its corresponding DirectShapeType element id.\r\n      /// In conjunction with RepMapToTypeProduct, this allows us to access the parent DirectShapeType to set its geometry\r\n      /// when parsing the IFCRepresentationMap.\r\n      /// </summary>\r\n      public IDictionary<int, ElementId> CreatedDirectShapeTypes { get; protected set; } = new Dictionary<int, ElementId>();\r\n\r\n      /// <summary>\r\n      /// Category class associated with OST_Topography for the document associated with this import.\r\n      /// </summary>\r\n      public Category TopographyCategory { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Category class associated with OST_Topology for the document associated with this import.\r\n      /// </summary>\r\n      public Category GenericModelsCategory { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The Category class associated with OST_GenericModels for the document associated with this import.\r\n      /// </summary>\r\n      //public Category GenericModelsCategory { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The set of GUIDs imported.\r\n      /// </summary>\r\n      public ISet<string> CreatedGUIDs { get; } = new HashSet<string>();\r\n      \r\n      /// <summary>\r\n      /// A map of material name to created material.\r\n      /// Intended to disallow creation of multiple materials with the same name and attributes.\r\n      /// </summary>\r\n      public IFCMaterialCache CreatedMaterials { get; } = new IFCMaterialCache();\r\n\r\n      /// <summary>\r\n      /// The name of the shared parameters file, if any, set before this import operation.\r\n      /// </summary>\r\n      public string OriginalSharedParametersFile { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The instance shared parameters group definitions associated with this import.\r\n      /// </summary>\r\n      public Definitions InstanceGroupDefinitions { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The type shared parameters group definitions associated with this import.\r\n      /// </summary>\r\n      public Definitions TypeGroupDefinitions { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// A map of create schedules, sorted by category, element type, and property set name.\r\n      /// </summary>\r\n      public IDictionary<Tuple<ElementId, bool, string>, ElementId> ViewSchedules { get; } = new Dictionary<Tuple<ElementId, bool, string>, ElementId>();\r\n      \r\n      /// <summary>\r\n      /// The set of create schedule names, to prevent duplicates.\r\n      /// </summary>\r\n      public ISet<string> ViewScheduleNames { get; } = new HashSet<string>();\r\n\r\n      /// <summary>\r\n      /// The set of create schedule names, to prevent duplicates.\r\n      /// </summary>\r\n      public ISet<ElementId> MaterialsWithNoColor { get; } = new HashSet<ElementId>();\r\n\r\n      /// <summary>\r\n      /// The pointer to the status bar in the running Revit executable, if found.\r\n      /// </summary>\r\n      public RevitStatusBar StatusBar { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Get the map from custom subcategory name to Category class.\r\n      /// </summary>\r\n      public IDictionary<string, Category> CreatedSubcategories { get; } = new Dictionary<string, Category>();\r\n      \r\n      /// <summary>\r\n      /// The map of GUIDs to created elements, used when reloading a link.\r\n      /// </summary>\r\n      public IDictionary<string, ElementId> GUIDToElementMap { get; } = new Dictionary<string, ElementId>();\r\n      \r\n      /// <summary>\r\n      /// The map of grid names to created elements, used when reloading a link.\r\n      /// </summary>\r\n      public IDictionary<string, ElementId> GridNameToElementMap { get; } = new Dictionary<string, ElementId>();\r\n\r\n      /// <summary>\r\n      /// Set of Levels constrained to scope boxes.\r\n      /// </summary>\r\n      public ISet<ElementId> ConstrainedLevels { get; set; } = new HashSet<ElementId>();\r\n\r\n      /// <summary>\r\n      /// The view plane type if, if ViewPlanTypeIdInitialized is true and we found one.\r\n      /// </summary>\r\n      public ElementId ViewPlanTypeId { get; set; } = ElementId.InvalidElementId;\r\n\r\n      /// <summary>\r\n      /// Returns true if we have tried to set ViewPlanTypeId.  ViewPlanTypeId may or may not have a valid value.\r\n      /// </summary>\r\n      public bool ViewPlanTypeIdInitialized { get; set; } = false;\r\n\r\n\r\n      private bool HavePreProcessedGrids { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Which Site Id should be Default Side Id. \r\n      /// </summary>\r\n      public int? DefaultSiteId { get; set; } = null;\r\n\r\n      /// <summary>Indicates whether or not the shared parameters file should be deleted at the end of processing.</summary>\r\n      private string SharedParametersFileToDeleteAtReset { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Pre-process IfcGrids before processing IfcGridLocation.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// Before using IfcGridLocation, we need to make sure that grid axes have been processed.  \r\n      /// However:\r\n      /// 1. IfcGridLocation is rare, and shouldn't affect the performance of other files.\r\n      /// 2. We still need to process IfcGridLocation after IfcSite, otherwise may get\r\n      /// spurious errors about local placement not being relative to site.\r\n      /// As such, we only pre-process grids at most once, when we find an IfcGridLocation.\r\n      /// There is a potential case where we could generate spurious warning if IfcSite had an\r\n      /// IfcGridLocation, but this seems highly unlikely.\r\n      /// </remarks>\r\n      public void PreProcessGrids()\r\n      {\r\n         if (HavePreProcessedGrids)\r\n            return;\r\n\r\n         HavePreProcessedGrids = true;\r\n\r\n         IList<IFCAnyHandle> gridHandles = IFCImportFile.TheFile.GetInstances(IFCEntityType.IfcGrid, false);\r\n         if (gridHandles == null)\r\n            return;\r\n\r\n         foreach (IFCAnyHandle gridHandle in gridHandles)\r\n         {\r\n            IFCGrid.ProcessIFCGrid(gridHandle);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create the GUIDToElementMap and the GridNameToElementMap to reuse elements by GUID and Grid name.\r\n      /// </summary>\r\n      /// <param name=\"document\">The document.</param>\r\n      public void CreateExistingElementMaps(Document document)\r\n      {\r\n         FilteredElementCollector collector = new FilteredElementCollector(document);\r\n\r\n         // These are the only element types currently created in .NET code.  This list needs to be updated when a new\r\n         // type is created.\r\n         List<Type> supportedElementTypes = new List<Type>()\r\n         {\r\n            typeof(DirectShape),\r\n            typeof(DirectShapeType),\r\n            typeof(Level),\r\n            typeof(Grid)\r\n         };\r\n\r\n         ElementMulticlassFilter multiclassFilter = new ElementMulticlassFilter(supportedElementTypes);\r\n         collector.WherePasses(multiclassFilter);\r\n\r\n         foreach (Element elem in collector)\r\n         {\r\n            string guid = IFCGUIDUtil.GetGUID(elem);\r\n            if (string.IsNullOrWhiteSpace(guid))\r\n               continue;   // This Element was generated by other means.\r\n\r\n            if (elem is Grid)\r\n            {\r\n               string gridName = elem.Name;\r\n               if (GridNameToElementMap.ContainsKey(gridName))\r\n               {\r\n                  // If the Grid has a duplicate grid name, assign an arbitrary one to add to the map.  This will mean\r\n                  // that the Grid will be deleted at the end of reloading.\r\n                  // TODO: warn the user about this, and/or maybe allow for some duplication based on category.\r\n                  gridName = Guid.NewGuid().ToString();\r\n               }\r\n\r\n               GridNameToElementMap.Add(new KeyValuePair<string, ElementId>(gridName, elem.Id));\r\n            }\r\n            else\r\n            {\r\n               if (GUIDToElementMap.ContainsKey(guid))\r\n               {\r\n                  // If the Element contains a duplicate GUID, assign an arbitrary one to add to the map.  This will mean\r\n                  // that the Element will be deleted at the end of reloading.\r\n                  // TODO: warn the user about this, and/or maybe allow for some duplication based on category.\r\n                  guid = Guid.NewGuid().ToString();\r\n               }\r\n\r\n               GUIDToElementMap.Add(new KeyValuePair<string, ElementId>(guid, elem.Id));\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Remove an element from the GUID to element id map, if its GUID is found in the map.\r\n      /// </summary>\r\n      /// <param name=\"elem\">The element.</param>\r\n      public void UseElement(Element elem)\r\n      {\r\n         if (elem == null)\r\n            return;\r\n\r\n         string guid = IFCGUIDUtil.GetGUID(elem);\r\n         if (string.IsNullOrWhiteSpace(guid))\r\n            return;\r\n\r\n         GUIDToElementMap.Remove(guid);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Remove a Grid from the Grid Name to element id map, if its grid name is found in the map.\r\n      /// </summary>\r\n      /// <param name=\"grid\">The grid.</param>\r\n      public void UseGrid(Grid grid)\r\n      {\r\n         if (grid == null)\r\n            return;\r\n\r\n         string gridName = grid.Name;\r\n         if (string.IsNullOrWhiteSpace(gridName))\r\n            return;\r\n\r\n         GridNameToElementMap.Remove(gridName);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Reuse an element from the GUID to element map, in a reload operation, if it exists.\r\n      /// </summary>\r\n      /// <typeparam name=\"T\">The type of element.  We do type-checking for consistency.</typeparam>\r\n      /// <param name=\"document\">The document.</param>\r\n      /// <param name=\"guid\">The GUID.</param>\r\n      /// <returns>The element from the map.</returns>\r\n      public T UseElementByGUID<T>(Document document, string guid) where T : Element\r\n      {\r\n         T elementT = null;\r\n         ElementId elementId;\r\n         if (GUIDToElementMap.TryGetValue(guid, out elementId))\r\n         {\r\n            Element element = document.GetElement(elementId);\r\n            if (element is T)\r\n            {\r\n               elementT = element as T;\r\n               GUIDToElementMap.Remove(guid);\r\n            }\r\n         }\r\n\r\n         return elementT;\r\n      }\r\n\r\n      protected IFCImportCache(Document doc, string fileName)\r\n      {\r\n         // Get all categories of current document\r\n         Settings documentSettings = doc.Settings;\r\n\r\n         DocumentCategories = documentSettings.Categories;\r\n\r\n         // Populate categories cache for creating subcategories.\r\n         //\r\n         GenericModelsCategory = DocumentCategories.get_Item(BuiltInCategory.OST_GenericModel);\r\n         TopographyCategory = DocumentCategories.get_Item(BuiltInCategory.OST_Topography);\r\n\r\n         ProjectInfo projectInfo = doc.ProjectInformation;\r\n         ProjectInformationId = (projectInfo == null) ? ElementId.InvalidElementId : projectInfo.Id;\r\n\r\n         // Cache list of schedules.\r\n         FilteredElementCollector viewScheduleCollector = new FilteredElementCollector(doc);\r\n         ICollection<Element> viewSchedules = viewScheduleCollector.OfClass(typeof(ViewSchedule)).ToElements();\r\n         foreach (Element viewSchedule in viewSchedules)\r\n         {\r\n            ScheduleDefinition definition = (viewSchedule as ViewSchedule).Definition;\r\n            if (definition == null)\r\n               continue;\r\n\r\n            ElementId categoryId = definition.CategoryId;\r\n            if (categoryId == ElementId.InvalidElementId)\r\n               continue;\r\n\r\n            string viewScheduleName = viewSchedule.Name;\r\n            ElementId viewScheduleId = viewSchedule.Id;\r\n\r\n            ViewSchedules[Tuple.Create(categoryId, false, viewScheduleName)] = viewScheduleId;\r\n            ViewSchedules[Tuple.Create(categoryId, true, viewScheduleName)] = viewScheduleId;\r\n            ViewScheduleNames.Add(viewScheduleName);\r\n         }\r\n\r\n         // Find the status bar, so we can add messages.\r\n         StatusBar = RevitStatusBar.Create();\r\n      }\r\n\r\n      public void ReadSharedParametersFile(Document doc, string fileName)\r\n      {\r\n         // Cache the original shared parameters file, and create and read in a new one.\r\n         OriginalSharedParametersFile = doc.Application.SharedParametersFilename;\r\n         string targetSharedParametersFile = fileName + \".sharedparameters.txt\";\r\n         doc.Application.SharedParametersFilename = targetSharedParametersFile;\r\n         bool fileExisted = false;\r\n         try\r\n         {\r\n            DefinitionFile definitionFile = doc.Application.OpenSharedParameterFile();\r\n            if (definitionFile == null || definitionFile.Groups.IsEmpty)\r\n            {\r\n               StreamWriter definitionFileStream = new StreamWriter(doc.Application.SharedParametersFilename, false);\r\n               definitionFileStream.Close();\r\n               definitionFile = doc.Application.OpenSharedParameterFile();\r\n            }\r\n            else\r\n            {\r\n               fileExisted = true;\r\n            }\r\n\r\n            if (definitionFile == null)\r\n               throw new InvalidOperationException(\"Can't create definition file for shared parameters.\");\r\n\r\n            DefinitionGroup definitionInstanceGroup = definitionFile.Groups.get_Item(\"IFC Parameters\");\r\n            if (definitionInstanceGroup == null)\r\n               definitionInstanceGroup = definitionFile.Groups.Create(\"IFC Parameters\");\r\n            InstanceGroupDefinitions = definitionInstanceGroup.Definitions;\r\n\r\n            DefinitionGroup definitionTypeGroup = definitionFile.Groups.get_Item(\"IFC Type Parameters\");\r\n            if (definitionTypeGroup == null)\r\n               definitionTypeGroup = definitionFile.Groups.Create(\"IFC Type Parameters\");\r\n            TypeGroupDefinitions = definitionTypeGroup.Definitions;\r\n         }\r\n         catch (System.Exception)\r\n         {\r\n         }\r\n\r\n         // Only delete if we called this method and hybrid property sets was enabled and it wasn't what the user was using.\r\n         if (fileExisted && Importer.TheOptions.UsingHybridPropertySets() && (OriginalSharedParametersFile != targetSharedParametersFile))\r\n         {\r\n            SharedParametersFileToDeleteAtReset = targetSharedParametersFile;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a new IFCImportCache.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"fileName\">The name of the IFC file to be imported.</param>\r\n      /// <returns>The IFCImportCache.</returns>\r\n      public static IFCImportCache Create(Document doc, string fileName)\r\n      {\r\n         return new IFCImportCache(doc, fileName);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Restore the shared parameters file.\r\n      /// </summary>\r\n      public void Reset(Document doc)\r\n      {\r\n         doc.Application.SharedParametersFilename = OriginalSharedParametersFile;\r\n         if (!String.IsNullOrEmpty(SharedParametersFileToDeleteAtReset))\r\n         {\r\n            try\r\n            {\r\n               File.Delete(SharedParametersFileToDeleteAtReset);\r\n            }\r\n            catch (System.Exception)\r\n            {\r\n            }\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/IFCImportHandleUtil.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Import.Data;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   /// <summary>\r\n   /// Utilities for processing attributes from handles.\r\n   /// </summary>\r\n   public class IFCImportHandleUtil\r\n   {\r\n      /// <summary>\r\n      /// Finds the value of a required length attribute.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle.</param>\r\n      /// <param name=\"name\">The name of the atribute.</param>\r\n      /// <param name=\"found\">True if it was found, false if not.</param>\r\n      /// <returns>The length value, scaled.</returns>\r\n      static public double GetRequiredScaledLengthAttribute(IFCAnyHandle handle, string name, out bool found)\r\n      {\r\n         double? value = IFCAnyHandleUtil.GetDoubleAttribute(handle, name);\r\n         if (value.HasValue)\r\n         {\r\n            found = true;\r\n            return IFCUnitUtil.ScaleLength(value.Value);\r\n         }\r\n\r\n         Importer.TheLog.LogMissingRequiredAttributeError(handle, name, false);\r\n         found = false;\r\n         return 0.0;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds the value of a optional double attribute.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle.</param>\r\n      /// <param name=\"name\">The name of the atribute.</param>\r\n      /// <param name=\"defaultValue\">The default value, if not found.</param>\r\n      /// <returns>The double value.</returns>\r\n      static public double GetOptionalDoubleAttribute(IFCAnyHandle handle, string name, double defaultValue)\r\n      {\r\n         double? value = IFCAnyHandleUtil.GetDoubleAttribute(handle, name);\r\n         if (value.HasValue)\r\n            return value.Value;\r\n\r\n         return defaultValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds the value of a optional length attribute.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle.</param>\r\n      /// <param name=\"name\">The name of the atribute.</param>\r\n      /// <param name=\"defaultValue\">The default value, if not found.</param>\r\n      /// <returns>The length value, scaled.</returns>\r\n      /// <remarks>defaultValue should be scaled.</remarks>\r\n      static public double GetOptionalScaledLengthAttribute(IFCAnyHandle handle, string name, double defaultValue)\r\n      {\r\n         double? value = IFCAnyHandleUtil.GetDoubleAttribute(handle, name);\r\n         if (value.HasValue)\r\n            return IFCUnitUtil.ScaleLength(value.Value);\r\n\r\n         return defaultValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds the value of a optional length attribute.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle.</param>\r\n      /// <param name=\"name\">The name of the atribute.</param>\r\n      /// <returns>The length value if it exists, scaled.</returns>\r\n      static public double? GetOptionalScaledLengthAttribute(IFCAnyHandle handle, string name)\r\n      {\r\n         double? value = IFCAnyHandleUtil.GetDoubleAttribute(handle, name);\r\n         if (value.HasValue)\r\n            return IFCUnitUtil.ScaleLength(value.Value);\r\n\r\n         return value;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds the value of a optional normalised ratio attribute.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle.</param>\r\n      /// <param name=\"name\">The name of the atribute.</param>\r\n      /// <param name=\"defaultValue\">The default value, if not found.</param>\r\n      /// <returns>The normalised ratio value.</returns>\r\n      /// <remarks>If the normalised ratio given isn't [0,1], the default value will be used.</remarks>\r\n      static public double GetOptionalNormalisedRatioAttribute(IFCAnyHandle handle, string name, double defaultValue)\r\n      {\r\n         double? value = IFCAnyHandleUtil.GetDoubleAttribute(handle, name);\r\n         if (value.HasValue && (value.Value > -MathUtil.Eps()) && (value.Value < 1.0 + MathUtil.Eps()))\r\n            return value.Value;\r\n\r\n         return defaultValue;\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Finds the value of a optional positive ratio attribute.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle.</param>\r\n      /// <param name=\"name\">The name of the atribute.</param>\r\n      /// <param name=\"defaultValue\">The default value, if not found.</param>\r\n      /// <returns>The positive ratio value.</returns>\r\n      /// <remarks>If the positive ratio given isn't positive, the default value will be used.</remarks>\r\n      static public double GetOptionalPositiveRatioAttribute(IFCAnyHandle handle, string name, double defaultValue)\r\n      {\r\n         double? value = IFCAnyHandleUtil.GetDoubleAttribute(handle, name);\r\n         if (value.HasValue && (value.Value > MathUtil.Eps()))\r\n            return value.Value;\r\n\r\n         return defaultValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds the value of a optional (unitless) real (number) attribute.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle.</param>\r\n      /// <param name=\"name\">The name of the atribute.</param>\r\n      /// <param name=\"defaultValue\">The default value, if not found.</param>\r\n      /// <returns>The real number value.</returns>\r\n      static public double GetOptionalRealAttribute(IFCAnyHandle handle, string name, double defaultValue)\r\n      {\r\n         double? value = IFCAnyHandleUtil.GetDoubleAttribute(handle, name);\r\n         if (value.HasValue)\r\n            return value.Value;\r\n\r\n         return defaultValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds the value of a required angle attribute.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle.</param>\r\n      /// <param name=\"name\">The name of the atribute.</param>\r\n      /// <param name=\"found\">Returns true if the angle was found.</param>\r\n      /// <returns>The angle, scaled.</returns>\r\n      static public double GetRequiredScaledAngleAttribute(IFCAnyHandle handle, string name, out bool found)\r\n      {\r\n         double? value = IFCAnyHandleUtil.GetDoubleAttribute(handle, name);\r\n         if (value.HasValue)\r\n         {\r\n            found = true;\r\n            return IFCUnitUtil.ScaleAngle(value.Value);\r\n         }\r\n\r\n         found = false;\r\n         return 0.0;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds the value of a optional angle attribute.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle.</param>\r\n      /// <param name=\"name\">The name of the atribute.</param>\r\n      /// <param name=\"defaultValue\">The default value, if not found.</param>\r\n      /// <returns>The length value, scaled.</returns>\r\n      /// <remarks>defaultValue should be scaled.</remarks>\r\n      static public double GetOptionalScaledAngleAttribute(IFCAnyHandle handle, string name, double defaultValue)\r\n      {\r\n         double? value = IFCAnyHandleUtil.GetDoubleAttribute(handle, name);\r\n         if (value.HasValue)\r\n            return IFCUnitUtil.ScaleAngle(value.Value);\r\n\r\n         return defaultValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get a required instance attribute from an entity.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"throwError\">Throw if null or invalid.</param>\r\n      /// <returns>The attribute handle.</returns>\r\n      static public IFCAnyHandle GetRequiredInstanceAttribute(IFCAnyHandle handle, string name, bool throwError)\r\n      {\r\n         IFCAnyHandle attribute = IFCAnyHandleUtil.GetInstanceAttribute(handle, name);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(attribute))\r\n            Importer.TheLog.LogMissingRequiredAttributeError(handle, name, throwError);\r\n         return attribute;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get an optional instance attribute from an entity.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The attribute handle.</returns>\r\n      static public IFCAnyHandle GetOptionalInstanceAttribute(IFCAnyHandle handle, string name)\r\n      {\r\n         return IFCAnyHandleUtil.GetInstanceAttribute(handle, name);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get a required boolean attribute from an entity.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The attribute value.</returns>\r\n      static public bool GetRequiredBooleanAttribute(IFCAnyHandle handle, string name, out bool found)\r\n      {\r\n         bool? attribute = IFCAnyHandleUtil.GetBooleanAttribute(handle, name);\r\n         if (!attribute.HasValue)\r\n         {\r\n            Importer.TheLog.LogMissingRequiredAttributeError(handle, name, false);\r\n            found = false;\r\n            return false;\r\n         }\r\n         found = true;\r\n         return attribute.Value;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get a required integer attribute from an entity.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The attribute value.</returns>\r\n      static public int GetRequiredIntegerAttribute(IFCAnyHandle handle, string name, out bool found)\r\n      {\r\n         int? attribute = IFCAnyHandleUtil.GetIntAttribute(handle, name);\r\n         if (!attribute.HasValue)\r\n         {\r\n            Importer.TheLog.LogMissingRequiredAttributeError(handle, name, false);\r\n            found = false;\r\n            return 0;\r\n         }\r\n         found = true;\r\n         return attribute.Value;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get an optional integer attribute from an entity.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The attribute value.</returns>\r\n      static public int GetOptionalIntegerAttribute(IFCAnyHandle handle, string name, out bool found)\r\n      {\r\n         int? attribute = IFCAnyHandleUtil.GetIntAttribute(handle, name);\r\n         if (!attribute.HasValue)\r\n         {\r\n            found = false;\r\n            return 0;\r\n         }\r\n         found = true;\r\n         return attribute.Value;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get a required string attribute from an entity.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"throwError\">True if the routine should throw an exception.</param>\r\n      /// <returns>The attribute value, or null if not found.</returns>\r\n      static public string GetRequiredStringAttribute(IFCAnyHandle handle, string name, bool throwError)\r\n      {\r\n         string attribute = IFCAnyHandleUtil.GetStringAttribute(handle, name);\r\n         if (attribute == null)\r\n            Importer.TheLog.LogMissingRequiredAttributeError(handle, name, throwError);\r\n         return attribute;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get an optional string attribute from an entity.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <param name=\"defaultValue\">The default value.</param>\r\n      /// <returns>The attribute value, or defaultValue if not found.</returns>\r\n      static public string GetOptionalStringAttribute(IFCAnyHandle handle, string name, string defaultValue)\r\n      {\r\n         string attribute = IFCAnyHandleUtil.GetStringAttribute(handle, name);\r\n         if (attribute == null)\r\n            attribute = defaultValue;\r\n         return attribute;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get an optional logical attribute from an entity.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle.</param>\r\n      /// <param name=\"name\">The attribute name.</param>\r\n      /// <returns>The attribute value, or IFCLogical.Unknown if not found.</returns>\r\n      static public IFCLogical GetOptionalLogicalAttribute(IFCAnyHandle handle, string name, out bool found)\r\n      {\r\n         IFCLogical? attribute = IFCAnyHandleUtil.GetLogicalAttribute(handle, name);\r\n         if (!attribute.HasValue)\r\n         {\r\n            found = false;\r\n            return IFCLogical.Unknown;\r\n         }\r\n         found = true;\r\n         return attribute.Value;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get attribute type of List of List of Double\r\n      /// </summary>\r\n      /// <param name=\"handle\">the handle</param>\r\n      /// <param name=\"name\">the attribute name</param>\r\n      /// <returns>List of List of Double</returns>\r\n      public static IList<IList<double>> GetListOfListOfDoubleAttribute(IFCAnyHandle handle, string name)\r\n      {\r\n         if (handle == null)\r\n            throw new ArgumentNullException(\"handle\");\r\n\r\n         if (!handle.HasValue)\r\n            throw new ArgumentException(\"Invalid handle.\");\r\n\r\n         IList<IList<double>> outerList = null;\r\n\r\n         IFCData ifcData = handle.GetAttribute(name);\r\n\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.Aggregate)\r\n         {\r\n            IFCAggregate outer = ifcData.AsAggregate();\r\n            if (outer != null)\r\n            {\r\n               outerList = new List<IList<double>>();\r\n\r\n               foreach (IFCData outerVal in outer)\r\n               {\r\n                  IFCAggregate inner = outerVal.AsAggregate();\r\n\r\n                  if (inner != null)\r\n                  {\r\n                     IList<double> innerList = new List<double>();\r\n                     foreach (IFCData innerVal in inner)\r\n                     {\r\n                        innerList.Add(innerVal.AsDouble());\r\n                     }\r\n                     outerList.Add(innerList);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         return outerList;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get attribute of type List of List of Integer\r\n      /// </summary>\r\n      /// <param name=\"handle\">the handle</param>\r\n      /// <param name=\"name\">attribute name</param>\r\n      /// <returns>List of List of Integer</returns>\r\n      public static IList<IList<int>> GetListOfListOfIntegerAttribute(IFCAnyHandle handle, string name)\r\n      {\r\n         if (handle == null)\r\n            throw new ArgumentNullException(\"handle\");\r\n\r\n         if (!handle.HasValue)\r\n            throw new ArgumentException(\"Invalid handle.\");\r\n\r\n         IList<IList<int>> outerList = null;\r\n\r\n         IFCData ifcData = handle.GetAttribute(name);\r\n\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.Aggregate)\r\n         {\r\n            IFCAggregate outer = ifcData.AsAggregate();\r\n            if (outer != null)\r\n            {\r\n               outerList = new List<IList<int>>();\r\n\r\n               foreach (IFCData outerVal in outer)\r\n               {\r\n                  IFCAggregate inner = outerVal.AsAggregate();\r\n\r\n                  if (inner != null)\r\n                  {\r\n                     IList<int> innerList = new List<int>();\r\n                     foreach (IFCData innerVal in inner)\r\n                     {\r\n                        innerList.Add(innerVal.AsInteger());\r\n                     }\r\n                     outerList.Add(innerList);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         return outerList;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get attribute of type IList of IList of Entity \r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle</param>\r\n      /// <param name=\"name\">attribute name</param>\r\n      /// <returns>IList of IList of Entity</returns>\r\n      public static IList<IList<IFCAnyHandle>> GetListOfListOfInstanceAttribute(IFCAnyHandle handle, string name)\r\n      {\r\n         if (handle == null)\r\n            throw new ArgumentNullException(\"handle\");\r\n\r\n         if (!handle.HasValue)\r\n            throw new ArgumentException(\"Invalid handle.\");\r\n\r\n         IList<IList<IFCAnyHandle>> outerList = null;\r\n\r\n         IFCData ifcData = handle.GetAttribute(name);\r\n\r\n         if (ifcData.PrimitiveType == IFCDataPrimitiveType.Aggregate)\r\n         {\r\n            IFCAggregate outer = ifcData.AsAggregate();\r\n            if (outer != null)\r\n            {\r\n               outerList = new List<IList<IFCAnyHandle>>();\r\n\r\n               foreach (IFCData outerVal in outer)\r\n               {\r\n                  IFCAggregate inner = outerVal.AsAggregate();\r\n\r\n                  if (inner != null)\r\n                  {\r\n                     IList<IFCAnyHandle> innerList = new List<IFCAnyHandle>();\r\n                     foreach (IFCData innerVal in inner)\r\n                     {\r\n                        innerList.Add(innerVal.AsInstance());\r\n                     }\r\n                     outerList.Add(innerList);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         return outerList;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/IFCImportHybridInfo.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Data;\r\n\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n\r\n   /// <summary>\r\n   /// Provide methods to perform Hybrid IFC Import.\r\n   /// </summary>\r\n   public class IFCImportHybridInfo\r\n   {\r\n      /// <summary>\r\n      /// Keeps track of Elements imported (DirectShape/DirectShapeTypes) by AnyCAD\r\n      /// </summary>\r\n      public IList<ElementId> HybridElements { get; set; } = new List<ElementId>();\r\n\r\n      /// <summary>\r\n      /// Map from IFC STEP Id --> Revit ElementId so legacy IFC Processing can find Elements.\r\n      /// </summary>\r\n      public IDictionary<string, ElementId> HybridMap { get; set; } = new Dictionary<string, ElementId>();\r\n\r\n      /// <summary>\r\n      /// List of Elements that Import should delete during EndImport.\r\n      /// </summary>\r\n      public IList<ElementId> ElementsToDelete { get; set; } = new List<ElementId>();\r\n\r\n      /// <summary>\r\n      /// Document into which IFC Import occurs.\r\n      /// </summary>\r\n      public Document IfcDocument { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// IFC File being imported.\r\n      /// </summary>\r\n      public string IfcInputFile { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Origin offset applied to all Elements created via legacy processing within Revit.\r\n      /// Since non-legacy Elements are moved automatically to the Internal Origin automatically, legacy\r\n      /// Elements require an offset to align with non-legacy Elements.\r\n      /// This is equal to the \"IFC Origin\" --> \"Internal Origin\" translation.\r\n      /// </summary>\r\n      public XYZ LargeCoordinateOriginOffset { get; set; } = XYZ.Zero;\r\n\r\n      /// <summary>\r\n      /// If LargeCoordinateOriginOffset changes, this can be used for the original value.\r\n      /// This is needed for the Link Instance post-processing.\r\n      /// </summary>\r\n      public XYZ OriginalLargeCoordinateOriginOffset { get; set; } = XYZ.Zero;\r\n\r\n      /// <summary>\r\n      /// Internal reference to the class that is responsible for doing the actual import and Map creation.\r\n      /// </summary>\r\n      private IFCHybridImport HybridImporter { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Create a new IFCImportHybridInfo.\r\n      /// </summary>\r\n      /// <param name=\"ifcDocument\">The document that will contain elements created by AnyCAD.</param>\r\n      /// <param name=\"ifcInputFile\">The IFC file to import.</param>\r\n      /// <param name=\"doUpdate\">If true, update an existing document (don't recreate elements).</param>\r\n      public IFCImportHybridInfo(Document ifcDocument, string ifcInputFile, bool doUpdate)\r\n      {\r\n         HybridImporter = new IFCHybridImport();\r\n\r\n         if (ifcDocument == null)\r\n         {\r\n            throw new ArgumentNullException(\"ifcDocument\");\r\n         }\r\n\r\n         if (string.IsNullOrWhiteSpace(ifcInputFile))\r\n         {\r\n            throw new ArgumentException(\"Filename for IFC Input null or empty\", ifcInputFile);\r\n         }\r\n\r\n         IfcDocument = ifcDocument;\r\n         IfcInputFile = ifcInputFile;\r\n\r\n         // Import Elements\r\n         //\r\n         int? elementsImported = ImportElements(doUpdate);\r\n         if (!elementsImported.HasValue)\r\n         {\r\n            Importer.TheLog.LogError(-1, \"Hybrid IFC Import:  Unknown Error during Element Import -- aborting\", true);\r\n            return;\r\n         }\r\n\r\n         if (elementsImported.Value == 0)\r\n         {\r\n            Importer.TheLog.LogError(-1, \"Hybrid IFC Import:  elementsImportedList empty -- reverting to fallback for entire import.\", false);\r\n            return;\r\n         }\r\n\r\n         HybridMap = HybridImporter.GetIFCStepIdToElementIdMap();\r\n         if (HybridMap == null)\r\n         {\r\n            Importer.TheLog.LogError(-1, \"Hybrid IFC Import:  Unknown Error during IFC STEP Id/ElementId map creation.\", true);\r\n            return;\r\n         }\r\n\r\n         if (HybridMap.Count != elementsImported.Value)\r\n         {\r\n            // Not an error, but this may hinder the Import Later.\r\n            Importer.TheLog.LogComment(-1, \"Hybrid IFC Import:  Number of IFC STEP Id/ElementIds associations do not match number of imported Elements.  Not an error.\", true);\r\n         }\r\n\r\n\r\n         if (Importer.TheOptions.VerboseLogging)\r\n         {\r\n            Importer.TheLog.LogComment(-1, \"--- Hybrid IFC Import:  Start of Logging detailed Information about AnyCAD Import ---\", false);\r\n            Importer.TheLog.LogComment(-1, \"Hybrid IFC Import:  If an IFC STEP Id does not appear in the following list, then it will fallback to Revit processing ---\", false);\r\n            LogImportedElementsDetailed();\r\n            LogHybridMapDetailed();\r\n            Importer.TheLog.LogComment(-1, \"--- Hybrid IFC Import: End of Logging detailed Information about AnyCAD Import ---\", false);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Log information about the Hybrid IFC Import Elements Imported.\r\n      /// These ElementIds are imported via AnyCAD, and should be DirectShapes.\r\n      /// This will also log information about the DirectShapeTypes.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// Because of DirectShapeType logging, all DirectShapes need expansion, which may affect performance.\r\n      /// </remarks>\r\n      public void LogImportedElementsDetailed()\r\n      {\r\n         Importer.TheLog.LogComment(-1, \"--- Hybrid IFC Import: Start Imported Element Details. ---\", false);\r\n         Options options = new Options();\r\n         foreach (ElementId elementId in HybridElements)\r\n         {\r\n            DirectShape shape = IfcDocument?.GetElement(elementId) as DirectShape;\r\n            if (shape == null)\r\n            {\r\n               Importer.TheLog.LogComment(-1, $\"Hybrid IFC Import: ElementId Imported, but no Element exists:  {elementId}.\", false);\r\n               continue;\r\n            }\r\n\r\n            // GeometryInstance for DirectShape indicates the DirectShapeType for the DirectShape.  This DirectShapeType holds Geometry for DirectShape.\r\n            // This may differ from DirectShape.TypeId.\r\n            ElementId geometricDSTElementId = ElementId.InvalidElementId;\r\n            GeometryElement geometryElement = shape.get_Geometry(options);\r\n            if (geometryElement != null)\r\n            {\r\n               foreach (GeometryObject geometryObject in geometryElement)\r\n               {\r\n                  GeometryInstance geomInstance = geometryObject as GeometryInstance;\r\n                  if (geomInstance == null)\r\n                  {\r\n                     continue;\r\n                  }\r\n\r\n                  geometricDSTElementId = geomInstance.GetSymbolGeometryId().SymbolId;\r\n                  break;\r\n               }\r\n            }\r\n\r\n            // Log Comment for all three -- (DirectShape, GeomInstance DirectShapeType, TypeId)\r\n            Importer.TheLog.LogComment(-1, $\"Hybrid IFC Import: (DirectShape, Parametric DirectShapeType, Geometric DirectShapeType): ({elementId}, {shape.TypeId}, {geometricDSTElementId})\", false);\r\n         }\r\n         Importer.TheLog.LogComment(-1, \"--- Hybrid IFC Import: End Imported Element Details. ---\", false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Log information about the Hybrid IFC Import Association Map (IFC GlobalId --> Revit ElementId).\r\n      /// </summary>\r\n      public void LogHybridMapDetailed()\r\n      {\r\n         Importer.TheLog.LogComment(-1, \"--- Hybrid IFC Import: Start Hybrid Map Details. ---\", false);\r\n         if (HybridMap == null)\r\n         {\r\n            Importer.TheLog.LogComment(-1, \"HybridIFCImport:  Hybrid Map not created during import.\", false);\r\n         }\r\n         else\r\n         {\r\n            if (HybridMap.Count == 0)\r\n            {\r\n               Importer.TheLog.LogComment(-1, \"HybridIFCImport:  Hybrid Map created, but contains no entries.\", false);\r\n            }\r\n            else\r\n            {\r\n               foreach (var mapEntry in HybridMap)\r\n               {\r\n                  string stepId = mapEntry.Key;\r\n                  ElementId elementId = mapEntry.Value;\r\n                  if (elementId == ElementId.InvalidElementId)\r\n                  {\r\n                     Importer.TheLog.LogComment(-1, $\"Hybrid IFC Import:  Hybrid Map entry has no ElementId for {stepId}\", false);\r\n                  }\r\n                  else\r\n                  { \r\n                     Importer.TheLog.LogComment(-1, $\"Hybrid IFC Import:  Map Entry Created (IFC STEP Id, ElementId):  ({stepId}, {elementId})\", false);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         Importer.TheLog.LogComment(-1, \"--- Hybrid IFC Import: End Hybrid Map Details. ---\", false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Log ElementIds that will be deleted at the end of Import.  These is populated when Revit must create a new DirectShape for a category change.\r\n      /// </summary>\r\n      public void LogElementsToDeleteDetailed()\r\n      {\r\n         Importer.TheLog.LogComment(-1, \"--- Hybrid IFC Import: Start Elements to be deleted Details. ---\", false);\r\n         foreach (ElementId elementId in ElementsToDelete)\r\n         {\r\n            DirectShape shape = IfcDocument?.GetElement(elementId) as DirectShape;\r\n            if (shape == null)\r\n            {\r\n               Importer.TheLog.LogComment(-1, $\"Hybrid IFC Import: ElementId identified to be deleted, but no Element exists:  {elementId}.\", false);\r\n               continue;\r\n            }\r\n\r\n            ElementId directShapeType = shape.TypeId;\r\n            if ((directShapeType ?? ElementId.InvalidElementId) == ElementId.InvalidElementId)\r\n            {\r\n               Importer.TheLog.LogComment(-1, $\"Hybrid IFC Import: DirectShape identified to be deleted with no DirectShapeType: {elementId}.\", false);\r\n            }\r\n            else\r\n            {\r\n               Importer.TheLog.LogWarning(-1, $\"Hybrid IFC Import: (DirectShape, DirectShapeType) indentified to be deleted: ({elementId}, {directShapeType}).\", false);\r\n            }\r\n         }\r\n         Importer.TheLog.LogComment(-1, \"--- Hybrid IFC Import: End Elements to be deleted Details. ---\", false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Import Elements from IFC File using AnyCAD.  Imported Elements will be in the HybridElements data member.\r\n      /// </summary>\r\n      /// <returns>The number of elements created.</returns>\r\n      public int? ImportElements(bool update)\r\n      {\r\n         if (HybridImporter == null)\r\n         {\r\n            throw new ArgumentNullException(\"Attempting to import elements with null IFCHybridImporter\");\r\n         }\r\n\r\n         if (IfcDocument == null)\r\n         {\r\n            Importer.TheLog.LogError(-1, \"No document for Hybrid IFC Import\", true);\r\n            return null;\r\n         }\r\n\r\n         if (string.IsNullOrEmpty(IfcInputFile))\r\n         {\r\n            Importer.TheLog.LogError(-1, \"Filename for IFC Input null or empty\", true);\r\n            return null;\r\n         }\r\n\r\n         if (update)\r\n         {\r\n            HybridElements = HybridImporter.UpdateElements(IfcDocument, IfcInputFile, Importer.TheOptions.HybridImportOptions);\r\n         }\r\n         else\r\n         {\r\n            HybridElements = HybridImporter.ImportElements(IfcDocument, IfcInputFile, Importer.TheOptions.HybridImportOptions);\r\n         }\r\n\r\n         return HybridElements?.Count;\r\n      }\r\n\r\n      /// <summary>\r\n      /// This will create a container DirectShape to represent an IFCGroup, which normally has neither geometry\r\n      /// nor a Revit Element associated with it.\r\n      /// </summary>\r\n      /// <param name=\"ifcGroup\">Identifies the IFCGroup associated with the DirectShape.</param>\r\n      /// <returns>ElementId of new DirectShape.</returns>\r\n      /// <exception cref=\"InvalidOperationException\">Occurs if underlying HybridImporter object is null.</exception>\r\n      public ElementId CreateContainer(IFCGroup ifcGroup)\r\n      {\r\n         if (IfcDocument == null)\r\n         {\r\n            // Throws an exception if Document is null, but still require return statement for compiler.\r\n            Importer.TheLog.LogError(-1, \"No document for Hybrid IFC Import\", true);\r\n            return ElementId.InvalidElementId;\r\n         }\r\n\r\n         if (ifcGroup == null)\r\n         {\r\n            Importer.TheLog.LogError(ifcGroup.Id, \"Cannot Create DirectShape for IFCGroup entity\", false);\r\n            return ElementId.InvalidElementId;\r\n         }\r\n\r\n         ElementId categoryId = IFCElementUtil.GetDSValidCategoryId(IfcDocument, ifcGroup.GetCategoryId(IfcDocument), ifcGroup.Id);\r\n         DirectShape directShape = DirectShape.CreateElement(IfcDocument, categoryId);\r\n         if (directShape == null)\r\n         {\r\n            return ElementId.InvalidElementId;\r\n         }\r\n         ElementId directShapeId = directShape.Id;\r\n\r\n         // Get IFC Guids of related objects.\r\n         // If no geometry duplicated or filters don't allow any elements, then elements list will be empty,\r\n         IList<ElementId> elements = new List<ElementId>();\r\n         if (ifcGroup.ContainerDuplicatesGeometry())\r\n         {\r\n            foreach (IFCObjectDefinition objectDefinition in ifcGroup.RelatedObjects)\r\n            {\r\n               if (ifcGroup.ContainerFilteredEntity(objectDefinition))\r\n               {\r\n                  ElementId objDefId = IFCImportHybridInfo.GetHybridMapInformation(objectDefinition.Id);\r\n                  if (IFCImportHybridInfo.IsValidElementId(objDefId))\r\n                  {\r\n                     elements.Add(objDefId);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n\r\n         // Create geometry for new DirectShape.\r\n         if (elements.Count > 0)\r\n         {\r\n            IList<GeometryObject> geometryObjects = DuplicateDirectShapeGeometry(elements);\r\n            directShape.SetShape(geometryObjects);\r\n         }\r\n\r\n         return directShapeId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Handles special cases for DirectShape \"Creation\".\r\n      /// Only current special case is for Structural Columns.  This method may need to recategorize Columns as Structural Columns.\r\n      /// Only needed if AnyCAD does not process Property Sets.\r\n      /// </summary>\r\n      /// <param name=\"objectDefinition\">Entity that may exhibit special-case behavior.</param>\r\n      /// <param name=\"hybridElementId\">The element id of the existing DirectShape.</param>\r\n      /// <returns>ElementId of new DirectShape if new Element created, ElementId.InvalidElement otherwise.</returns>\r\n      private void UpdateElementForSpecialCases(IFCObjectDefinition objectDefinition, ElementId hybridElementId)\r\n      {\r\n         if (objectDefinition == null)\r\n         {\r\n            Importer.TheLog.LogNullError(objectDefinition.EntityType);\r\n            return;\r\n         }\r\n\r\n         // If AnyCAD processing Property Sets, then Structural Columns are already categorized successfully.\r\n         if (Importer.TheOptions.HybridImportOptions?.HybridPropertySets ?? false)\r\n         {\r\n            return;\r\n         }\r\n\r\n         if (objectDefinition is IFCProduct architecturalColumn)\r\n         {\r\n            UpdateStructuralColumnDirectShape(architecturalColumn, hybridElementId);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Update a DirectShape and its type to be a Structural Column.\r\n      /// </summary>\r\n      /// <param name=\"ifcColumn\">Column that needs a Category change from OST_Column to OST_StructuralColumn.</param>\r\n      private void UpdateStructuralColumnDirectShape(IFCProduct ifcColumn, ElementId hybridElementId)\r\n      {\r\n         if (ifcColumn == null)\r\n         {\r\n            Importer.TheLog.LogError(-1, \"IfcColumn invalid during DirectShape recategorization.\", false);\r\n            return;\r\n         }\r\n\r\n         int stepId = ifcColumn.Id;\r\n         ElementId ifcColumnCategory = ifcColumn.GetCategoryId(IfcDocument);\r\n         if (ifcColumnCategory != new ElementId(BuiltInCategory.OST_StructuralColumns))\r\n         {\r\n            Importer.TheLog.LogWarning(stepId, \"IfcColumn is not a Structural Column\", false);\r\n            return;\r\n         }\r\n\r\n         DirectShape directShape = IfcDocument.GetElement(hybridElementId) as DirectShape;\r\n         ElementId directShapeCategory = (directShape?.Category?.Id ?? ElementId.InvalidElementId);\r\n         if (directShapeCategory == ElementId.InvalidElementId)\r\n         {\r\n            Importer.TheLog.LogWarning(stepId, \"Unable to determine Category of DirectShape.\", false);\r\n            return;\r\n         }\r\n\r\n         if (directShapeCategory == ifcColumnCategory)\r\n         {\r\n            Importer.TheLog.LogComment(stepId, \"Category of Column and DirectShape agree. No recategorization needed.\", false);\r\n            return;\r\n         }\r\n\r\n         ImporterIFCUtils.UpdateDirectShapeCategory(directShape, new ElementId(BuiltInCategory.OST_StructuralColumns));\r\n\r\n         (IList<GeometryObject> newGeomObjects, ElementId directShapeTypeId) =\r\n            DuplicateGeometryForDirectShape(directShape, ifcColumn);\r\n         if ((newGeomObjects?.Count ?? 0) == 0)\r\n         {\r\n            Importer.TheLog.LogError(stepId, \"Unable to duplicate Geometry for DirectShape recategorization.\", false);\r\n            return;\r\n         }\r\n\r\n         GeometryInstance newDirectShapeGeometryInstance = newGeomObjects.First() as GeometryInstance;\r\n         if (newDirectShapeGeometryInstance == null)\r\n         {\r\n            Importer.TheLog.LogWarning(stepId, \"Duplicate Geometry is not a GeometryInstance.  Using old Geometry.\", false);\r\n            return;\r\n         }\r\n\r\n         ElementId directShapeGeomTypeId = newDirectShapeGeometryInstance.GetSymbolGeometryId().SymbolId;\r\n         if (directShapeGeomTypeId == ElementId.InvalidElementId)\r\n         {\r\n            Importer.TheLog.LogWarning(stepId, \"Even though new DirectShape Geometry created, unable to find DirectShapeType.\", false);\r\n            return;\r\n         }\r\n\r\n         directShape.SetShape(newGeomObjects);\r\n\r\n         if (directShapeTypeId == directShapeGeomTypeId)\r\n            directShape.SetTypeId(directShapeGeomTypeId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Duplicates Geometry within DirectShape for a new DirectShape creation.\r\n      /// This is to drive the process where the DirectShape -> GInstance -> DirectShapeType -> etc. will be preserved.\r\n      /// </summary>\r\n      /// <param name=\"oldDirectShapeElementId\">ElementId for the exiting DirectShape.</param>\r\n      /// <param name=\"ifcProduct\">IfcProduct corresponding to the DirectShape.</param>\r\n      /// <returns>List of Geometry Objects for the new DirectShape.</returns>\r\n      private GeometryInstance GetDirectShapeGeometryInstance(DirectShape directShape)\r\n      {\r\n         // DirectShape should have one and only one GeometryInstance, and no other GeometryObjects.\r\n         Options options = new Options();\r\n         GeometryElement geometryElement = directShape?.get_Geometry(options);\r\n         if ((geometryElement?.Count() ?? 0) == 0)\r\n         {\r\n            return null;\r\n         }\r\n\r\n         return geometryElement?.First() as GeometryInstance;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Duplicates Geometry within DirectShape for a new DirectShape creation.\r\n      /// This is to drive the process where the DirectShape -> GInstance -> DirectShapeType -> etc. will be preserved.\r\n      /// </summary>\r\n      /// <param name=\"oldDirectShapeElementId\">ElementId for the exiting DirectShape.</param>\r\n      /// <param name=\"ifcProduct\">IfcProduct corresponding to the DirectShape.</param>\r\n      /// <returns>List of Geometry Objects for the new DirectShape and the old DirectShapeType element id.</returns>\r\n      protected (IList<GeometryObject>, ElementId) DuplicateGeometryForDirectShape(DirectShape oldDirectShape, IFCProduct ifcProduct)\r\n      {\r\n         int stepId = ifcProduct?.Id ?? -1;\r\n         if (stepId <= 0)\r\n         {\r\n            return (null, ElementId.InvalidElementId);\r\n         }\r\n\r\n         // DirectShape should have one and only one GeometryInstance, and no other GeometryObjects.\r\n         GeometryInstance oldDirectShapeGeometryInstance = GetDirectShapeGeometryInstance(oldDirectShape);\r\n         GeometryElement oldDirectShapeTypeGeometryElement = oldDirectShapeGeometryInstance?.SymbolGeometry;\r\n         if (oldDirectShapeTypeGeometryElement == null)\r\n         {\r\n            return (null, ElementId.InvalidElementId);\r\n         }\r\n\r\n         ElementId oldDirectShapeTypeElementId = oldDirectShapeGeometryInstance?.GetSymbolGeometryId().SymbolId ?? ElementId.InvalidElementId;\r\n         if (oldDirectShapeTypeElementId == ElementId.InvalidElementId)\r\n         {\r\n            return (null, ElementId.InvalidElementId);\r\n         }\r\n\r\n         // Reminder:  the passed-in IfcProduct may be a Container for the DirectShape.  \r\n         // The container should have an associated IfcTypeObject, but it's not required as per spec.\r\n         IFCTypeObject ifcTypeObject = null;\r\n         HashSet<IFCTypeObject> typeObjects = ifcProduct.TypeObjects;\r\n         if ((typeObjects?.Count ?? 0) > 0)\r\n         {\r\n            ifcTypeObject = typeObjects.First();\r\n         }\r\n\r\n         // Most of the work happens here to Copy DirectShapeTypes.\r\n         ElementId newDirectShapeTypeId = DeepCopyDirectShapeType(oldDirectShapeTypeElementId,\r\n            oldDirectShapeTypeGeometryElement, ifcProduct.GetCategoryId(IfcDocument), ifcTypeObject);\r\n\r\n         string definitionId = GetDirectShapeTypeDefinitionId(newDirectShapeTypeId);\r\n         if (string.IsNullOrEmpty(definitionId))\r\n         {\r\n            return (null, ElementId.InvalidElementId);\r\n         }\r\n\r\n         // Create new GeoemtryInstance to add new DirectShapeType using the same Trf.\r\n         // String = ifcTypeObject.GlobalId + oldDirectShapeTypeElementId (as a string).\r\n         IList<GeometryObject> newGeomObjects = DirectShape.CreateGeometryInstance(IfcDocument, definitionId, oldDirectShapeGeometryInstance.Transform);\r\n         return (newGeomObjects, oldDirectShapeTypeElementId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Retrieves definition ID to look up DirectShapeType for GeometryInsance creation.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">ElementId of DirectShapeType.</param>\r\n      /// <returns>definitionId string, or string.Empty if unable to create definition ID.</returns>\r\n      protected static string GetDirectShapeTypeDefinitionId(ElementId elementId)\r\n      {\r\n         if (elementId == ElementId.InvalidElementId)\r\n         {\r\n            return string.Empty;\r\n         }\r\n\r\n         return $\"DeepCopyDirectShapeType.{elementId}\";\r\n      }\r\n\r\n      /// <summary>\r\n      /// This will perform a Deep Copy of a DirectShapeType.\r\n      /// This will iterate through all GeometryObjects contained within the passed-in GeometryElement, which has the Geometry for\r\n      /// oldDirectShapeTypeElementId.\r\n      /// Each GeometryObject is either a GeometryInstance or a Solid.\r\n      /// For a GeometryInstance, that will specify another DirectShapeType, so do a DeepCopyDirectShapeType() on that DirectShapeType \r\n      /// and create a new GeometryInstance pointing to the new DirectShapeType created during the copy.  Add the new GeometryInstance to the new Geometry List.\r\n      /// For a Solid, just add the Solid to the new Geometry List.\r\n      /// Once all GeometryObjects are collected, create a new DirectShapeType and store all GeometryObjects within the new DirectShapeType.\r\n      /// Add a definition to the new type within the DirectShapeLibrary so callers can reference this new DirectShapeType when they need to.\r\n      /// </summary>\r\n      /// <param name=\"oldDirectShapeTypeElementId\">ElementId for existing DirectShapeType.</param>\r\n      /// <param name=\"oldDirectShapeTypeGeometryElement\">GeometryElement for existing DirectShapeType.</param>\r\n      /// <param name=\"newCategoryId\">Category that DirectShapeTypes should be.</param>\r\n      /// <param name=\"ifcTypeObject\">IFCTypeObject step that drives this.  If null, values from old DirectShapeType will be used.</param>\r\n      /// <returns>ElementId of new DirectShapeType, or ElementId.Invalid if unable to create new DirectShapeType at any step.</returns>\r\n      protected ElementId DeepCopyDirectShapeType(ElementId oldDirectShapeTypeElementId, GeometryElement oldDirectShapeTypeGeometryElement,\r\n                                                  ElementId newCategoryId, IFCTypeObject ifcTypeObject = null)\r\n      {\r\n         if ((oldDirectShapeTypeElementId == ElementId.InvalidElementId) || (oldDirectShapeTypeGeometryElement == null))\r\n         {\r\n            return ElementId.InvalidElementId;\r\n         }\r\n\r\n         DirectShapeType oldDirectShapeType = IfcDocument.GetElement(oldDirectShapeTypeElementId) as DirectShapeType;\r\n\r\n         IList<GeometryObject> newGeomObjs = new List<GeometryObject>();\r\n         foreach (GeometryObject geomObj in oldDirectShapeTypeGeometryElement)\r\n         {\r\n            if (geomObj is GeometryInstance)\r\n            {\r\n               GeometryInstance geomInstance = geomObj as GeometryInstance;\r\n               GeometryElement otherOldDirectShapeTypeGeometryElement = geomInstance?.SymbolGeometry;\r\n               if (otherOldDirectShapeTypeGeometryElement == null)\r\n               {\r\n                  continue;\r\n               }\r\n\r\n               ElementId otherOldDirectShapeTypeElementId = geomInstance.GetSymbolGeometryId().SymbolId;\r\n               if (otherOldDirectShapeTypeElementId == ElementId.InvalidElementId)\r\n               {\r\n                  continue;\r\n               }\r\n\r\n               ElementId otherNewDirectShapeTypeElementId = DeepCopyDirectShapeType(otherOldDirectShapeTypeElementId, otherOldDirectShapeTypeGeometryElement,\r\n                                                                                    newCategoryId, ifcTypeObject);\r\n               if (otherNewDirectShapeTypeElementId == ElementId.InvalidElementId)\r\n               {\r\n                  continue;\r\n               }\r\n\r\n               // otherDefinitionId is the index into the DirectShapeLibrary for the other DirectShapeType.\r\n               string otherDefinitionId = GetDirectShapeTypeDefinitionId(otherNewDirectShapeTypeElementId);\r\n               if (string.IsNullOrEmpty(otherDefinitionId))\r\n               {\r\n                  continue;\r\n               }\r\n\r\n               // Create a new GeometryInstance to the new DirectShapeType Element.\r\n               IList<GeometryObject> newGeometryObjectsForGeometryInstance = DirectShape.CreateGeometryInstance(IfcDocument, otherDefinitionId, geomInstance.Transform);\r\n               foreach (GeometryObject newGeometryObjectForGeometryInstance in newGeometryObjectsForGeometryInstance)\r\n               {\r\n                  GeometryInstance geometryInstance = newGeometryObjectForGeometryInstance as GeometryInstance;\r\n                  if (geometryInstance == null)\r\n                  {\r\n                     continue;\r\n                  }\r\n                  newGeomObjs.Add(newGeometryObjectForGeometryInstance);\r\n               }\r\n            }\r\n            else if (geomObj != null)\r\n            {\r\n               newGeomObjs.Add(geomObj);\r\n            }\r\n         }\r\n\r\n         DirectShapeType newDirectShapeType = DuplicateDirectShapeType(oldDirectShapeType, newCategoryId, ifcTypeObject);\r\n         if (newDirectShapeType == null)\r\n         {\r\n            return ElementId.InvalidElementId;\r\n         }\r\n\r\n         // In ATF Pipeline, oldDirectShapeType has had its DirectShapeType family changed.\r\n         // If this is the case, do the same with the new DirectShapeType.\r\n         if (newDirectShapeType.CanChangeFamilyName())\r\n         {\r\n            newDirectShapeType.SetFamilyName(oldDirectShapeType.FamilyName);\r\n         }\r\n\r\n         // Need to store this so parents can create a new GeometryInstance\r\n         ElementId newDirectShapeTypeElementId = newDirectShapeType.Id;\r\n\r\n         // definitionId is the index into the DirectShapeLibrary for this DirectShapeType.\r\n         string definitionId = GetDirectShapeTypeDefinitionId(newDirectShapeTypeElementId);\r\n         if (string.IsNullOrEmpty(definitionId))\r\n         {\r\n            return ElementId.InvalidElementId;\r\n         }\r\n\r\n         // Only set the shape if definition ID was valid.\r\n         newDirectShapeType.SetShape(newGeomObjs);\r\n\r\n         DirectShapeLibrary dsl = DirectShapeLibrary.GetDirectShapeLibrary(IfcDocument);\r\n         if (dsl == null)\r\n         {\r\n            return ElementId.InvalidElementId;\r\n         }\r\n\r\n         dsl.AddDefinitionType(definitionId, newDirectShapeTypeElementId);\r\n         return newDirectShapeTypeElementId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Creates new DirectShapeType to hold duplicated GeometryObjects.\r\n      /// </summary>\r\n      /// <param name=\"oldDirectShapeType\">DirectShapeType to be duplicated.</param>\r\n      /// <param name=\"newCategoryId\">Category of new DirectShapeTyhpe.</param>\r\n      /// <param name=\"ifcTypeObject\">IfcTypeObject to use for DirectShapeTyhpe. (may be null).</param>\r\n      /// <returns>New DirectShapeTyhpe if successful, null otherwise.</returns>\r\n      protected DirectShapeType DuplicateDirectShapeType(DirectShapeType oldDirectShapeType, ElementId newCategoryId, IFCTypeObject ifcTypeObject = null)\r\n      {\r\n         if ((oldDirectShapeType == null) || ((newCategoryId ?? ElementId.InvalidElementId) == ElementId.InvalidElementId))\r\n         {\r\n            return null;\r\n         }\r\n\r\n         ElementId categoryToUse = (DirectShape.IsValidCategoryId(newCategoryId, IfcDocument)) ? newCategoryId : oldDirectShapeType.Category.Id;\r\n\r\n         DirectShapeTypeOptions options = new DirectShapeTypeOptions();\r\n         options.AllowDuplicateNames = true;\r\n\r\n         string nameToUse = ifcTypeObject?.GetVisibleName() ?? oldDirectShapeType.Name;\r\n         return DirectShapeType.Create(IfcDocument, nameToUse, categoryToUse, options);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Duplicates the geometry contained within all the passed-in DirectShape Elements.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// The returned List of GeometryObjects may not have a 1:1 relationship with the passed-in elements.\r\n      /// This works because we are using DirectShapes.  Without that underlying assumption, Element.get_Geometry() might not work as expected.\r\n      /// This might also require some re-work to avoid Element expansion.\r\n      /// </remarks>\r\n      /// <param name=\"otherElements\">Elements that will have geometry duplicated.</param>\r\n      /// <returns>List of duplicated GeometryObjects.</returns>\r\n      public IList<GeometryObject> DuplicateDirectShapeGeometry(IList<ElementId> directShapeElementIds)\r\n      {\r\n         IList<GeometryObject> geometryObjects = new List<GeometryObject>();\r\n         foreach (ElementId elementId in directShapeElementIds)\r\n         {\r\n            DirectShape otherDirectShape = (IfcDocument.GetElement(elementId)) as DirectShape;\r\n            if (otherDirectShape == null)\r\n            {\r\n               continue;\r\n            }\r\n\r\n            Options options = new Options();\r\n            GeometryElement geometryElement = otherDirectShape.get_Geometry(options);\r\n            if (geometryElement == null)\r\n            {\r\n               continue;\r\n            }\r\n\r\n            foreach (GeometryObject geometryObject in geometryElement)\r\n            {\r\n               // For Hybrid IFC Import, it is sufficient to check for GeometryInstances only.\r\n               // For other cases, Solids and Meshes should be considered.\r\n               if (geometryObject is GeometryInstance)\r\n               {\r\n                  geometryObjects.Add(geometryObject);\r\n               }\r\n               else if (Importer.TheOptions.HybridImportOptions == null)\r\n               {\r\n                  if ((geometryObject is Mesh) || (geometryObject is Solid))\r\n                  {\r\n                     geometryObjects.Add(geometryObject);\r\n                  }\r\n               }\r\n            }\r\n         }\r\n         return geometryObjects;\r\n      }\r\n\r\n      /// <summary>\r\n      /// IFCProduct creation for Hybrid IFC Import takes on a different meaning than \"creation\" for Legacy IFC Import.\r\n      /// Prior to creation, there should already be DirectShape/DirectShapeTypes created for the IFCProduct.  Geometry should already be created.\r\n      /// But there are some data within Representation Items that need to persist to the new DirectShapes, and the only way to get that is to process the ProductRepresentation within the IFCProduct.\r\n      /// So this populates that data.\r\n      /// </summary>\r\n      /// <param name=\"ifcProduct\">IFCProduct to edit.</param>\r\n      /// <param name=\"hybridElementId\">The associated element id.</param> \r\n      public void HandleHybridProductCreation(IFCProduct ifcProduct, ElementId hybridElementId)\r\n      {\r\n         if (Importer.TheOptions.HybridImportOptions == null || (ifcProduct == null) || (hybridElementId == ElementId.InvalidElementId))\r\n            return;\r\n\r\n         // Get DirectShape to \"Create\".  It's already created, so Revit is not really creating it here.\r\n         DirectShape directShape = IfcDocument.GetElement(hybridElementId) as DirectShape;\r\n         if (directShape == null)\r\n            return;\r\n\r\n         // Handle Special Cases:\r\n         // 1.  Possible Category Change for Structural Columns.  This requires a whole new DirectShape/DirectShapeType tree creation.\r\n         // 2.  Containers for IfcRelAggregates (e.g., IfcWall & IfcBuildingElementParts).\r\n         Importer.TheHybridInfo.UpdateElementForSpecialCases(ifcProduct, hybridElementId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Adds IFCTypeObject STEP Id and DirectShapeType ElementId to HybridMap.\r\n      /// </summary>\r\n      /// <remarks>\r\n      /// Parameter 1:  corresponds to DirectShape/IfcProduct.\r\n      /// Parameter 2:  corresponds to DirectShapeType/IfcTypeProduct.\r\n      /// </remarks>\r\n      /// <param name=\"directShapeEleemntId\">ElementId of DirectShape corresponding to IFCObject corresponding to this IFCTypeObject.\r\n      /// <param name=\"ifcTypeObject\">Handle for IFCTypeObject.</param>\r\n      public void AddTypeToHybridMap(ElementId directShapeElementId, IFCAnyHandle ifcTypeObject)\r\n      {\r\n         if (directShapeElementId == ElementId.InvalidElementId)\r\n            return;\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcTypeObject))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcTypeObject);\r\n            return;\r\n         }\r\n\r\n         ElementId hybridElementId = IFCImportHybridInfo.GetHybridMapInformation(ifcTypeObject.Id);\r\n         if ((hybridElementId == null) || (hybridElementId != ElementId.InvalidElementId))\r\n            return;\r\n\r\n         DirectShape directShape = IfcDocument.GetElement(directShapeElementId) as DirectShape;\r\n         if (directShape == null)\r\n            return;\r\n\r\n         ElementId directShapeTypeElementId = directShape.TypeId;\r\n         if (directShapeTypeElementId != ElementId.InvalidElementId)\r\n         {\r\n            HybridMap.Add(ifcTypeObject.StepId.ToString(), directShapeTypeElementId);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Indicates if indicated Element is a DirectShape, meaning it has usable Hybrid-imported Geometry.\r\n      /// </summary>\r\n      /// <param name=\"directShapeElementId\">ElementId representing DirectShape.</param>\r\n      /// <returns>True if a DirectShape, False otherwise.</returns>\r\n      public bool IsValidDirectShape(ElementId directShapeElementId)\r\n      {\r\n         return IfcDocument?.GetElement(directShapeElementId) is DirectShape;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Indicates if indicated Element is a DirectShape, meaning it has usable Hybrid-imported Geometry.\r\n      /// </summary>\r\n      /// <param name=\"directShapeElementId\">ElementId representing DirectShape.</param>\r\n      /// <returns>True if a DirectShape, False otherwise.</returns>\r\n      public static DirectShape GetDirectShape(int stepId)\r\n      {\r\n         ElementId directShapeId = GetHybridMapInformation(stepId);\r\n         if (directShapeId == null)\r\n         {\r\n            return null;\r\n         }\r\n         return IFCImportFile.TheFile.Document.GetElement(directShapeId) as DirectShape;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Determines whether or not the given STEP Id refers to an IFC entity which has already been processed.\r\n      /// </summary>\r\n      /// <param name=\"stepId\">STEP Id of the IFC entity.</param>\r\n      /// <returns>True if the IFC entity is recorded in the hybrid map as a valid ElementId.</returns>\r\n      public static bool HasHybridMapInformation(int stepId)\r\n      {\r\n         return IsValidElementId(GetHybridMapInformation(stepId));\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Retrieves the ElementId for an IFC entity, based on the STEP Id of the entity.\r\n      /// </summary>\r\n      /// <param name=\"stepId\">STEP Id of the IFC entity.</param>\r\n      /// <returns>ElementId of the IFC entity, or ElementId.InvalidElementId if not in the HybridMap, or null if Hybrid IFC Import not running, or stepId is invalid.</returns>\r\n      public static ElementId GetHybridMapInformation(int stepId)\r\n      {\r\n         if (Importer.TheOptions.HybridImportOptions == null || (Importer.TheHybridInfo?.HybridMap == null))\r\n         {\r\n            Importer.TheLog.LogWarning(-1, \"Trying to get Hybrid Map Information when Hybrid Import not running.\", true);\r\n            return null;\r\n         }\r\n\r\n         if (stepId <= 0)\r\n         {\r\n            Importer.TheLog.LogWarning(-1, \"Trying to get Hybrid Map Information for Invalid STEP Id.\", true);\r\n            return null;\r\n         }\r\n\r\n         string stepIdAsString = stepId.ToString();\r\n         if (Importer.TheHybridInfo.HybridMap.TryGetValue(stepIdAsString, out ElementId hybridElementId))\r\n         {\r\n            return hybridElementId;\r\n         }\r\n\r\n         return ElementId.InvalidElementId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Retrieves the ElementId for an IFC entity, based on the STEP Id of the entity.\r\n      /// </summary>\r\n      /// <param name=\"stepId\">Handle representing IFC entity./param>\r\n      /// <returns>ElementId of the IFC entity, or ElementId.InvalidElementId if not in the HybridMap, or null if Hybrid IFC Import not running.</returns>\r\n\r\n      public static ElementId GetHybridMapInformation(IFCAnyHandle ifcEntity)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcEntity))\r\n         {\r\n            Importer.TheLog.LogError(-1, \"Hybrid IFC Import:  attempting to retrieve invalid Entity from HybridMap\", true);\r\n            return null;\r\n         }\r\n\r\n         return GetHybridMapInformation(ifcEntity.StepId);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Simple helper function to check for Invalid ElementIds.\r\n      /// </summary>\r\n      /// <param name=\"elementId\">ElementId for comparison.</param>\r\n      /// <returns>True if elementId is non-null and not ElementId.InvalidElementId.</returns>\r\n      public static bool IsValidElementId(ElementId elementId) => ((elementId != null) && (elementId != ElementId.InvalidElementId));\r\n   }\r\n}\r\n"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/IFCImportLog.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Runtime.InteropServices;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Data;\r\nusing Revit.IFC.Import.Properties;\r\nusing UnitSystem = Autodesk.Revit.DB.DisplayUnit;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides methods to scale IFC units.\r\n   /// </summary>\r\n   public class IFCImportLog : Autodesk.Revit.DB.IFailuresPreprocessor\r\n   {\r\n      public class CreatedElementsKey : IComparable\r\n      {\r\n         public string CatName { get; protected set; }\r\n\r\n         public string ElemName { get; protected set; }\r\n\r\n         public CreatedElementsKey(string catName, string elemName)\r\n         {\r\n            CatName = catName;\r\n            ElemName = elemName;\r\n         }\r\n\r\n         public int CompareTo(Object obj)\r\n         {\r\n            if (obj == null || (!(obj is CreatedElementsKey)))\r\n               return -1;\r\n\r\n            CreatedElementsKey otherKey = obj as CreatedElementsKey;\r\n            int catComp = string.Compare(CatName, otherKey.CatName);\r\n            if (catComp != 0)\r\n               return catComp;\r\n            return string.Compare(ElemName, otherKey.ElemName);\r\n         }\r\n      }\r\n\r\n      private StreamWriter m_LogFile = null;\r\n\r\n      private string m_LogFileName = null;\r\n\r\n      private bool m_LoggingEnabled = true;\r\n\r\n      private IDictionary<IFCEntityType, int> m_ProcessedEntities = new SortedDictionary<IFCEntityType, int>();\r\n\r\n      private int m_TotalProcessedEntities = 0;\r\n\r\n      private int m_TotalCreatedElements = 0;\r\n\r\n      private int m_TotalElementCount = 0;\r\n\r\n      private IDictionary<CreatedElementsKey, int> m_CreatedElements = new SortedDictionary<CreatedElementsKey, int>();\r\n\r\n      private ISet<Tuple<int, string>> m_AlreadyLoggedErrors = new HashSet<Tuple<int, string>>();\r\n\r\n      private ISet<string> m_LogOnceWarnings = new HashSet<string>();\r\n\r\n      private ISet<string> m_LogOnceComments = new HashSet<string>();\r\n\r\n      private ISet<IFCEntityType> m_LogUnhandledSubtypeErrors = new HashSet<IFCEntityType>();\r\n\r\n      IFCRoot m_CurrentlyProcessedEntity = null;\r\n\r\n      /// <summary>\r\n      /// Allows setting the currently processed entity for identity data when processing failures.\r\n      /// </summary>\r\n      public IFCRoot CurrentlyProcessedEntity\r\n      {\r\n         protected get { return m_CurrentlyProcessedEntity; }\r\n         set { m_CurrentlyProcessedEntity = value; }\r\n      }\r\n\r\n      protected IFCImportLog()\r\n      {\r\n      }\r\n\r\n      protected void OpenLog(string logFileName)\r\n      {\r\n         try\r\n         {\r\n            m_LogFile = new StreamWriter(logFileName, false);\r\n         }\r\n         catch\r\n         {\r\n            m_LogFile = null;\r\n         }\r\n\r\n         if (m_LogFile == null)\r\n         {\r\n            LoggingEnabled = false;\r\n            LogFileName = null;\r\n            throw new InvalidOperationException(\"Unable to create log file: \" + logFileName + \", logging disabled.\");\r\n         }\r\n         else\r\n         {\r\n            LoggingEnabled = true;\r\n            LogFileName = logFileName;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The name of the log file.\r\n      /// </summary>\r\n      public string LogFileName\r\n      {\r\n         get { return m_LogFileName; }\r\n         set { m_LogFileName = value; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Whether logging to disk is enabled (TRUE) or not (FALSE).\r\n      /// </summary>\r\n      public bool LoggingEnabled\r\n      {\r\n         get { return m_LoggingEnabled; }\r\n         set { m_LoggingEnabled = value; }\r\n      }\r\n\r\n      private void Write(string msg)\r\n      {\r\n         if (LoggingEnabled && m_LogFile != null)\r\n            m_LogFile.Write(msg);\r\n      }\r\n\r\n      private void WriteLine(string msg)\r\n      {\r\n         if (LoggingEnabled && m_LogFile != null)\r\n            m_LogFile.WriteLine(msg + \"<br>\");\r\n      }\r\n\r\n      private void WriteLineNoBreak(string msg)\r\n      {\r\n         if (LoggingEnabled && m_LogFile != null)\r\n            m_LogFile.WriteLine(msg);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add an error message to the log file.\r\n      /// </summary>\r\n      /// <param name=\"id\">The line associated with the error. Use -1 for a generic error.</param>\r\n      /// <param name=\"msg\">The error message.</param>\r\n      /// <param name=\"throwError\">Optionally throw an InvalidOperationException.</param>\r\n      public void LogError(int id, string msg, bool throwError)\r\n      {\r\n         // We won't log an error that starts with a \"#\", as that has already been logged.\r\n         string errorMsg = null;\r\n         if (!string.IsNullOrWhiteSpace(msg) && msg[0] != '#')\r\n         {\r\n            if (id == -1)\r\n               errorMsg = \"General ERROR: \" + msg;\r\n            else\r\n               errorMsg = \"#\" + id + \": ERROR: \" + msg;\r\n\r\n            // Don't bother logging an error that doesn't throw, and has already been identically filed.\r\n            Tuple<int, string> newError = Tuple.Create(id, msg);\r\n            if (!m_AlreadyLoggedErrors.Contains(newError))\r\n            {\r\n               WriteLine(errorMsg);\r\n               m_AlreadyLoggedErrors.Add(newError);\r\n            }\r\n         }\r\n         else if (throwError)\r\n            errorMsg = msg;\r\n\r\n         if (throwError)\r\n            throw new InvalidOperationException(errorMsg);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add a comment to the log file, if verbose logging is enabled.\r\n      /// </summary>\r\n      /// <param name=\"id\">The line associated with the warning.</param>\r\n      /// <param name=\"msg\">The comment.</param>\r\n      /// <param name=\"logOnce\">Only log this message the first time it is encountered.</param>\r\n      public void LogComment(int id, string msg, bool logOnce)\r\n      {\r\n         if (Importer.TheOptions.VerboseLogging)\r\n         {\r\n            if (!string.IsNullOrWhiteSpace(msg))\r\n            {\r\n               if (!logOnce || !m_LogOnceComments.Contains(msg))\r\n               {\r\n\r\n                  if (id == -1)\r\n                     Write(\"General COMMENT: \" + msg);\r\n                  else\r\n                     Write(\"#\" + id + \": COMMENT: \" + msg);\r\n\r\n                  if (logOnce)\r\n                  {\r\n                     m_LogOnceComments.Add(msg);\r\n                     WriteLine(\" (This message will only appear once.)\");\r\n                  }\r\n                  else\r\n                     WriteLine(\"\");\r\n               }\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add a warning message to the log file.\r\n      /// </summary>\r\n      /// <param name=\"id\">The line associated with the warning.</param>\r\n      /// <param name=\"msg\">The warning message.</param>\r\n      /// <param name=\"logOnce\">Only log this message the first time it is encountered.</param>\r\n      public void LogWarning(int id, string msg, bool logOnce)\r\n      {\r\n         if (!string.IsNullOrWhiteSpace(msg))\r\n         {\r\n            if (!logOnce || !m_LogOnceWarnings.Contains(msg))\r\n            {\r\n               if (id == -1)\r\n                  Write(\"General WARNING: \" + msg);\r\n               else\r\n                  Write(\"#\" + id + \": WARNING: \" + msg);\r\n\r\n               if (logOnce)\r\n               {\r\n                  m_LogOnceWarnings.Add(msg);\r\n                  WriteLine(\" (This message will only appear once.)\");\r\n               }\r\n               else\r\n                  WriteLine(\"\");\r\n            }\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add an error message to the log file indicating a missing handle of an expected type.\r\n      /// </summary>\r\n      /// <param name=\"expectedType\">The expected type of the handle.</param>\r\n      public void LogNullError(IFCEntityType expectedType)\r\n      {\r\n         WriteLine(\"ERROR: \" + expectedType.ToString() + \" is null or has no value.\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add an error message to the log file indicating an incorrect type.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The unhandled entity handle.</param>\r\n      /// <param name=\"expectedType\">The expected base type of the handle.</param>\r\n      /// <param name=\"throwError\">throw an InvalidOperationException if true.</param>\r\n      public void LogUnexpectedTypeError(IFCAnyHandle handle, IFCEntityType expectedType, bool throwError)\r\n      {\r\n         LogError(handle.StepId, \"Expected handle of type \" + expectedType.ToString() + \", found: \" + IFCAnyHandleUtil.GetEntityType(handle).ToString(), throwError);\r\n      }\r\n\r\n      private void LogUnhandledSubTypeErrorBase(IFCAnyHandle handle, string mainTypeAsString, bool throwError)\r\n      {\r\n         IFCEntityType subType = IFCAnyHandleUtil.GetEntityType(handle);\r\n         if (!m_LogUnhandledSubtypeErrors.Contains(subType))\r\n         {\r\n            m_LogUnhandledSubtypeErrors.Add(subType);\r\n            LogError(handle.StepId, \"Unhandled subtype of \" + mainTypeAsString + \": \" + subType.ToString() + \" (This message will only appear once.)\", throwError);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add an error message to the log file indicating an unhandled subtype of a known type.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The unhandled entity handle.</param>\r\n      /// <param name=\"mainType\">The base type of the handle.</param>\r\n      /// <param name=\"throwError\">throw an InvalidOperationException if true.</param>\r\n      public void LogUnhandledSubTypeError(IFCAnyHandle handle, IFCEntityType mainType, bool throwError)\r\n      {\r\n         LogUnhandledSubTypeErrorBase(handle, mainType.ToString(), throwError);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add an error message to the log file indicating an unhandled subtype of a known type.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The unhandled entity handle.</param>\r\n      /// <param name=\"mainTypeAsString\">The base type of the handle.</param>\r\n      /// <param name=\"throwError\">throw an InvalidOperationException if true.</param>\r\n      public void LogUnhandledSubTypeError(IFCAnyHandle handle, string mainTypeAsString, bool throwError)\r\n      {\r\n         LogUnhandledSubTypeErrorBase(handle, mainTypeAsString, throwError);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add an error message to the log file indicating an unhandled unit type.\r\n      /// </summary>\r\n      /// <param name=\"unitHnd\">The unit handle.</param>\r\n      /// <param name=\"unitType\">The unit type as a string.</param>\r\n      public void LogUnhandledUnitTypeError(IFCAnyHandle unitHnd, string unitType)\r\n      {\r\n         LogError(unitHnd.StepId, \"Unhandled type of IfcSIUnit: \" + unitType, false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add an error message to the log file indicating a missing required attribute for a handle.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The unhandled entity handle.</param>\r\n      /// <param name=\"name\">The missing attribute name.</param>\r\n      /// <param name=\"throwError\">Throw an InvalidOperationException.</param>\r\n      public void LogMissingRequiredAttributeError(IFCAnyHandle handle, string name, bool throwError)\r\n      {\r\n         LogError(handle.StepId, \"required attribute \" + name + \" not found for \" + IFCAnyHandleUtil.GetEntityType(handle).ToString(), throwError);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add an error message to the log file indicating an inability to create a Revit element from an IFCRoot.\r\n      /// Used when the main Revit element could be created, but an associated element could not (example: a View for a Level).\r\n      /// </summary>\r\n      /// <param name=\"root\">The IFCRoot object.</param>\r\n      public void LogAssociatedCreationError(IFCRoot root, Type classType)\r\n      {\r\n         LogError(root.Id, \"couldn't create associated Revit element(s) of type \" + classType.ToString(), false);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add an error message to the log file indicating an inability to create a Revit element from an IFCRoot or IFCMaterial.\r\n      /// </summary>\r\n      /// <param name=\"entity\">The IFCEntity object.</param>\r\n      /// <param name=\"optionalMessage\">An optional message to replace the default.</param>\r\n      /// <param name=\"throwError\">True if we should also throw an error.</param>\r\n      public void LogCreationError(IFCEntity entity, string optionalMessage, bool throwError)\r\n      {\r\n         if (string.IsNullOrWhiteSpace(optionalMessage))\r\n            LogError(entity.Id, \"couldn't create associated Revit element(s)\", throwError);\r\n         else\r\n            LogError(entity.Id, optionalMessage, throwError);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Log the failures coming from shape creation.\r\n      /// </summary>\r\n      /// <param name=\"failuresAccessor\">The failure messages</param>\r\n      /// <returns>The result of processing the failures.</returns>\r\n      /// <remarks>This is in no way intended to be final code, as it doesn't actual handle failures,\r\n      /// just logs them.</remarks>\r\n      public FailureProcessingResult PreprocessFailures(FailuresAccessor failuresAccessor)\r\n      {\r\n         int currentlyProcessedEntityId = (CurrentlyProcessedEntity != null) ? CurrentlyProcessedEntity.Id : 0;\r\n         IList<FailureMessageAccessor> failList = failuresAccessor.GetFailureMessages();\r\n         foreach (FailureMessageAccessor failure in failList)\r\n         {\r\n            if (currentlyProcessedEntityId != 0)\r\n               Write(\"#\" + currentlyProcessedEntityId + \": \");\r\n            else\r\n               Write(\"GENERIC \");\r\n\r\n            switch (failure.GetSeverity())\r\n            {\r\n               case FailureSeverity.Warning:\r\n                  Write(\"WARNING: \");\r\n                  break;\r\n               default:\r\n                  Write(\"ERROR: \");\r\n                  break;\r\n            }\r\n\r\n            ICollection<ElementId> failureIds = failure.GetFailingElementIds();\r\n            int numFailureIds = (failureIds == null) ? 0 : failureIds.Count;\r\n            if (numFailureIds > 0)\r\n            {\r\n               Write(\"(Revit Element Id\");\r\n               if (numFailureIds > 1)\r\n                  Write(\"s\");\r\n               Write(\": \");\r\n               foreach (ElementId failureId in failureIds)\r\n                  Write(failureId + \" \");\r\n               Write(\"): \");\r\n            }\r\n\r\n            WriteLine(failure.GetDescriptionText());\r\n         }\r\n\r\n         // Only remove the warnings if logging is on.\r\n         failuresAccessor.DeleteAllWarnings();\r\n\r\n         return FailureProcessingResult.Continue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Keep track of entities that have been processed, for later summary count.\r\n      /// </summary>\r\n      /// <param name=\"type\">The entity type of the handle.</param>\r\n      public void AddProcessedEntity(IFCEntityType type)\r\n      {\r\n         if (m_ProcessedEntities.ContainsKey(type))\r\n            m_ProcessedEntities[type]++;\r\n         else\r\n            m_ProcessedEntities.Add(new KeyValuePair<IFCEntityType, int>(type, 1));\r\n\r\n         m_TotalProcessedEntities++;\r\n         if (m_TotalProcessedEntities % 500 == 0)\r\n            Importer.TheCache.StatusBar.Set(String.Format(Resources.IFCProcessedEntities, m_TotalProcessedEntities));\r\n      }\r\n\r\n      public void ReportPostProcessedEntity(int count, int total)\r\n      {\r\n         if (total > 0 && (count % 500 == 0))\r\n         {\r\n            int percentDone = (int)(((double)count / total) * 100 + 0.1);\r\n            Importer.TheCache.StatusBar.Set(String.Format(Resources.IFCPostProcessEntities, count, total, percentDone));\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Keeps track of the number of elements that will be created.\r\n      /// </summary>\r\n      public void AddToElementCount()\r\n      {\r\n         m_TotalElementCount++;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Keep track of elements that have been created, for later summary count.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"objDef\">The created entity.</param>\r\n      public void AddCreatedEntity(Document doc, IFCObjectDefinition objDef)\r\n      {\r\n         if (objDef == null)\r\n            return;\r\n\r\n         ISet<ElementId> createdElementIds = new HashSet<ElementId>();\r\n         objDef.GetCreatedElementIds(createdElementIds);\r\n\r\n         foreach (ElementId createdElementId in createdElementIds)\r\n         {\r\n            Element createdElement = doc.GetElement(createdElementId);\r\n            if (createdElement == null)\r\n               continue;\r\n\r\n            Category elementCategory = createdElement.Category;\r\n            string catName = (elementCategory == null) ? \"\" : elementCategory.Name;\r\n\r\n            string typeName = createdElement.GetType().Name;\r\n\r\n            CreatedElementsKey mapKey = new CreatedElementsKey(catName, typeName);\r\n            if (m_CreatedElements.ContainsKey(mapKey))\r\n               m_CreatedElements[mapKey]++;\r\n            else\r\n               m_CreatedElements.Add(new KeyValuePair<CreatedElementsKey, int>(mapKey, 1));\r\n\r\n            m_TotalCreatedElements++;\r\n            UpdateStatusBarAfterCreate();\r\n         }\r\n      }\r\n\r\n      private void UpdateStatusBarAfterCreate()\r\n      {\r\n         // Take into account that our estimate may have been off.\r\n         if (m_TotalCreatedElements > m_TotalElementCount)\r\n            m_TotalElementCount = m_TotalCreatedElements;\r\n         if ((m_TotalCreatedElements % 10 == 0) || (m_TotalCreatedElements == m_TotalElementCount))\r\n         {\r\n            int percentDone = (int)(((double)m_TotalCreatedElements / m_TotalElementCount) * 100 + 0.1);\r\n            Importer.TheCache.StatusBar.Set(String.Format(Resources.IFCCreatedElementsInProgress, m_TotalCreatedElements,\r\n                m_TotalElementCount, percentDone));\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Keep track of materials that have been created, for later summary count.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The document.</param>\r\n      /// <param name=\"createdMaterialId\">The created material id.</param>\r\n      public void AddCreatedMaterial(Document doc, ElementId createdMaterialId)\r\n      {\r\n         if (createdMaterialId == ElementId.InvalidElementId)\r\n            return;\r\n\r\n         Element createdElement = doc.GetElement(createdMaterialId);\r\n         if (createdElement == null)\r\n            return;\r\n\r\n         CreatedElementsKey mapKey = new CreatedElementsKey(null, \"Materials\");\r\n         if (m_CreatedElements.ContainsKey(mapKey))\r\n            m_CreatedElements[mapKey]++;\r\n         else\r\n            m_CreatedElements.Add(new KeyValuePair<CreatedElementsKey, int>(mapKey, 1));\r\n\r\n         m_TotalCreatedElements++;\r\n         UpdateStatusBarAfterCreate();\r\n      }\r\n\r\n      private void ProcessLogTableStart(string tableCaption, string column1Caption)\r\n      {\r\n         WriteLine(\"\");\r\n         WriteLineNoBreak(\"<A NAME=\\\"\" + tableCaption + \"\\\"></A>\");\r\n         WriteLineNoBreak(\"<table border=\\\"1\\\">\");\r\n         WriteLineNoBreak(\"<CAPTION>\" + tableCaption + \"</CAPTION>\");\r\n         WriteLineNoBreak(\"<COLGROUP align=\\\"left\\\"><COLGROUP align=\\\"right\\\">\");\r\n         WriteLineNoBreak(\"<tr><th>\" + column1Caption + \"<th>Count</tr>\");\r\n      }\r\n\r\n      private void ProcessLogTableEnd(int total)\r\n      {\r\n         WriteLineNoBreak(\"<tr><td><b>Total</b><td>\" + total);\r\n         WriteLine(\"</table>\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Close the log file, writing out final cached information.\r\n      /// </summary>\r\n      public void Close()\r\n      {\r\n         if (LoggingEnabled && m_LogFile != null)\r\n         {\r\n            int total = 0;\r\n            ProcessLogTableStart(\"Entities Processed\", \"Entity Type\");\r\n            foreach (KeyValuePair<IFCEntityType, int> entry in m_ProcessedEntities)\r\n            {\r\n               WriteLineNoBreak(\"<tr><td>\" + entry.Key.ToString() + \"<td>\" + entry.Value);\r\n               total += entry.Value;\r\n            }\r\n            ProcessLogTableEnd(total);\r\n\r\n            total = 0;\r\n            ProcessLogTableStart(\"Elements Created\", \"Element Type\");\r\n            foreach (KeyValuePair<CreatedElementsKey, int> entry in m_CreatedElements)\r\n            {\r\n               Write(\"<tr><td>\");\r\n               if (!string.IsNullOrWhiteSpace(entry.Key.CatName))\r\n                  Write(\"(\" + entry.Key.CatName + \") \");\r\n               WriteLineNoBreak(entry.Key.ElemName + \"<td>\" + entry.Value);\r\n               total += entry.Value;\r\n            }\r\n            ProcessLogTableEnd(total);\r\n\r\n            WriteLine(\"\");\r\n            WriteLine(\"Importer Version: \" + IFCImportOptions.ImporterVersion);\r\n\r\n            m_LogFile.Close();\r\n         }\r\n\r\n         m_LogFile = null;\r\n         LoggingEnabled = false;\r\n         LogFileName = null;\r\n      }\r\n\r\n      static private bool CreateLogInternal(IFCImportLog importLog, string logFileName)\r\n      {\r\n         try\r\n         {\r\n            importLog.OpenLog(logFileName);\r\n         }\r\n         catch\r\n         {\r\n            return false;\r\n         }\r\n\r\n         if (importLog.LoggingEnabled)\r\n         {\r\n            importLog.WriteLine(\"<A NAME=\\\"Warnings and Errors\\\"></A>Warnings and Errors\");\r\n            importLog.WriteLine(\"\");\r\n            return true;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a new log from a file name.\r\n      /// </summary>\r\n      /// <param name=\"logFileName\">The file name.</param>\r\n      static public IFCImportLog CreateLog(string logFileName, string extension, bool createLogFile)\r\n      {\r\n         IFCImportLog importLog = new IFCImportLog();\r\n\r\n         // If we are maximizing performance, don't create a log file.\r\n         if (!createLogFile)\r\n            return importLog;\r\n\r\n         if (!CreateLogInternal(importLog, logFileName + \".\" + extension))\r\n         {\r\n            // Try a unique file name in case the original file is locked for some reason.\r\n            CreateLogInternal(importLog, logFileName + \".\" + Guid.NewGuid().ToString() + \".\" + extension);\r\n         }\r\n\r\n         return importLog;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/IFCImportOptions.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Core;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   public enum IFCProcessBBoxOptions\r\n   {\r\n      Never,\r\n      NoOtherGeometry,\r\n      Always\r\n   }\r\n\r\n   /// <summary>\r\n   /// Utilities for keeping track of supported import options.\r\n   /// </summary>\r\n   public class IFCImportOptions\r\n   {\r\n      /// <summary>\r\n      /// A class to allow for temporarily setting VerboseLogging to true within a scope.  Intended for use with the \"using\" keyword.\r\n      /// </summary>\r\n      public class TemporaryVerboseLogging : IDisposable\r\n      {\r\n         private bool m_OriginalVerboseLogging = false;\r\n\r\n         public TemporaryVerboseLogging()\r\n         {\r\n            m_OriginalVerboseLogging = Importer.TheOptions.VerboseLogging;\r\n            Importer.TheOptions.VerboseLogging = true;\r\n         }\r\n\r\n         public void Dispose()\r\n         {\r\n            Importer.TheOptions.VerboseLogging = m_OriginalVerboseLogging;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// A class to allow for temporarily disabling logging within a scope.  Intended for use with the \"using\" keyword.\r\n      /// </summary>\r\n      public class TemporaryDisableLogging : IDisposable\r\n      {\r\n         private bool m_OriginalDisableLogging = false;\r\n\r\n         public TemporaryDisableLogging()\r\n         {\r\n            m_OriginalDisableLogging = Importer.TheLog.LoggingEnabled;\r\n            Importer.TheLog.LoggingEnabled = false;\r\n         }\r\n\r\n         public void Dispose()\r\n         {\r\n            Importer.TheLog.LoggingEnabled = m_OriginalDisableLogging;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Defines parameter storing Import Method in ProjectInfo.\r\n      /// </summary>\r\n      public static string ImportMethodParameter => \"Import Method\";\r\n\r\n      /// <summary>\r\n      /// If true, does an import optimized for performance that minimizes unnecessary functionality.\r\n      /// </summary>\r\n      public bool UseStreamlinedOptions { get; protected set; } = false;\r\n\r\n      /// <summary>\r\n      /// If we are linking, specify the file name of the intermediate Revit file.  This can be null, and\r\n      /// the .NET code will determine the file name.\r\n      /// </summary>\r\n      public string RevitLinkFileName { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// The version of the importer.\r\n      /// </summary>\r\n      public static string ImporterVersion\r\n      {\r\n         get\r\n         {\r\n            string assemblyFile = typeof(Revit.IFC.Import.Importer).Assembly.Location;\r\n            string importerVersion = \"Unknown Importer version\";\r\n            if (File.Exists(assemblyFile))\r\n            {\r\n               importerVersion = \"Importer \" + FileVersionInfo.GetVersionInfo(assemblyFile).FileVersion;\r\n            }\r\n            return importerVersion;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// If true, disables all logging.  Overrides VerboseLogging.\r\n      /// </summary>\r\n      public bool DisableLogging { get; protected set; } = false;\r\n\r\n\r\n      /// <summary>\r\n      /// If true, allow adding comments to the log file for extra examination of import process.\r\n      /// </summary>\r\n      public bool VerboseLogging { get; protected set; } = false;\r\n\r\n      /// <summary>\r\n      /// Indicates where in the Revit Project the IFC File's origin maps to.\r\n      /// </summary>\r\n      public IFCLinkPosition LinkPosition { get; protected set; } = IFCLinkPosition.InternalOrigin;\r\n\r\n      /// <summary>\r\n      /// Indicates the orientation of the Linked Document within the Host Document.\r\n      /// </summary>\r\n      public IFCLinkOrientation LinkOrientation { get; protected set; } = IFCLinkOrientation.ProjectNorth;\r\n\r\n      /// <summary>\r\n      /// If true, the link instance is shifted by difference between shared positions of project base points. \r\n      /// </summary>\r\n      public bool AdjustSharedPosition { get; protected set; } = false;\r\n      \r\n      /// <summary>\r\n      /// If true, process bounding box geometry found in the file.  If false, ignore.\r\n      /// </summary>\r\n      public IFCProcessBBoxOptions ProcessBoundingBoxGeometry { get; protected set; } = IFCProcessBBoxOptions.NoOtherGeometry;\r\n\r\n      /// <summary>\r\n      /// If true, the Zone DirectShape contains the geometry of all of its contained spaces.\r\n      /// If false, the Zone DirectShape contains no geometry.\r\n      /// </summary>\r\n      public bool CreateDuplicateZoneGeometry { get; protected set; } = true;\r\n\r\n      /// <summary>\r\n      /// If true, DirectShapes created from IFC entities that are containers contain the geometry of all of its contained entities.\r\n      /// If false, the DirectShape contains no geometry.\r\n      /// Note: IFC entities can either have their own geometry, or aggregate entities that have geometry.  The second class of objects\r\n      /// are called containers.\r\n      /// </summary>\r\n      public bool CreateDuplicateContainerGeometry { get; protected set; } = true;\r\n\r\n      /// <summary>\r\n      /// If this value is false, then, if we find an already created Revit file corresponding to the IFC file,\r\n      /// and it is up-to-date (that is, the saved timestamp and file size on the RVT file are the same as on the IFC file),\r\n      /// then we won't import and instead use the existing RVT file.  If this value is true (default), we will\r\n      /// perform the import regardless.  The intention is for ForceImport to be false during host file open while\r\n      /// reloading links, and true during all other link operations.\r\n      /// </summary>\r\n      public bool ForceImport { get; set; } = true;\r\n\r\n      /// <summary>\r\n      /// # Determines whether to create a linked symbol element or not.  \r\n      /// If this value is false (default), we will create a linked symbol and instance.\r\n      /// If this value is true, then we will re-use an existing linked symbol file and create an instance only.\r\n      /// The intention is for CreateLinkInstanceOnly to be true when we are trying to create a new link, when the link already exists in the host file.\r\n      /// </summary>\r\n      public bool CreateLinkInstanceOnly { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// If we are attempting to re-load a linked file, this contains the file size of the IFC file at the time\r\n      /// of the original link. This can be used to do a fast reject if ForceImport is false, if the file size\r\n      /// is the same as before, and other metrics are also the same.\r\n      /// </summary>\r\n      public Int64 OriginalFileSize { get; set; } = 0;\r\n\r\n      /// <summary>\r\n      /// If we are attempting to re-load a linked file, this contains the time stamp of the IFC file at the time\r\n      /// of the original link. This can be used to do a fast reject if ForceImport is false, if the time stamp\r\n      /// is the same as before, and other metrics are also the same.\r\n      /// </summary>\r\n      public DateTime OriginalTimeStamp { get; set; } = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);\r\n\r\n      /// <summary>\r\n      /// The intent of this import. Reference and editing are currently allowed.\r\n      /// </summary>\r\n      public IFCImportIntent Intent { get; protected set; } = IFCImportIntent.Reference;\r\n\r\n      /// <summary>\r\n      /// The action to be taken.  Open and link are currently allowed.\r\n      /// </summary>\r\n      public IFCImportAction Action { get; protected set; } = IFCImportAction.Open;\r\n\r\n      public IIFCFileProcessor Processor { get; protected set; }\r\n\r\n      /// <summary>\r\n      /// Indicates whether the current IFC Import is Hybrid or not.\r\n      /// True:  Hybrid (legacy + AnyCAD)\r\n      /// False:  legacy only\r\n      /// Note that this covers the processing of geometry only.  Other parameters cover other aspects.\r\n      /// </summary>\r\n      public IFCHybridImportOptions HybridImportOptions { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Query method to check whether property sets are being processed via AnyCAD.\r\n      /// </summary>\r\n      /// <returns>True if property sets were processed via AnyCAD.</returns>\r\n      public bool UsingHybridPropertySets() => (HybridImportOptions?.HybridPropertySets ?? false);\r\n\r\n      /// <summary>\r\n      /// Query method to check whether property sets are being processed via AnyCAD and the given host object was already processed.\r\n      /// </summary>\r\n      /// <param name=\"hostIfcObjectStepId\">The host entity to query.</param>\r\n      /// <returns>True if property sets were processed via AnyCAD.</returns>\r\n      public bool UsingHybridPropertySetsForHostObject(int hostIfcObjectStepId)\r\n      {\r\n         return UsingHybridPropertySets() && IFCImportHybridInfo.HasHybridMapInformation(hostIfcObjectStepId);\r\n      }\r\n\r\n      protected IFCImportOptions()\r\n      {\r\n      }\r\n\r\n      protected IFCImportOptions(IDictionary<string, string> options)\r\n      {\r\n         // \"Intent\": covers what the import operation is intended to create.\r\n         // The two options are:\r\n         // \"Reference\": create lightweight objects intended to be used for reference only.\r\n         // This is the option supported by Link IFC.\r\n         // \"Parametric\": attempt to create intelligent objects that can be maximally flexible.\r\n         // This option is still supported only by internal Open IFC code.\r\n         string intent = OptionsUtil.GetNamedStringOption(options, \"Intent\");\r\n         if (!string.IsNullOrWhiteSpace(intent))\r\n         {\r\n            IFCImportIntent intentTemp;\r\n            if (!Enum.TryParse(intent, out intentTemp))\r\n               intentTemp = IFCImportIntent.Reference;\r\n            Intent = intentTemp;\r\n         }\r\n\r\n         // \"Action\": covers how the data is intended to be stored.\r\n         // Options:\r\n         // \"Open\": Create a new file with the data in it.\r\n         // \"Link\": Create a new file with the data in it, and then link that into an existing document.\r\n         string action = OptionsUtil.GetNamedStringOption(options, \"Action\");\r\n         if (!string.IsNullOrWhiteSpace(action))\r\n         {\r\n            IFCImportAction actionTemp;\r\n            if (!Enum.TryParse(action, out actionTemp))\r\n               actionTemp = IFCImportAction.Open;\r\n            Action = actionTemp;\r\n         }\r\n\r\n         // We have two Boolean options that control how we process bounding box geometry.  They work together as follows:\r\n         // 1. AlwaysProcessBoundingBoxGeometry set to true: always import the bounding box geometry.\r\n         // 2. If AlwaysProcessBoundingBoxGeometry is not set, or set to false:\r\n         // 2a. If ProcessBoundingBoxGeometry is not set or set to true, import the bounding box geometry if there is no other representation available.\r\n         // 2b. If ProcessBoundingBoxGeometry is set to false, completely ignore the bounding box geometry.\r\n         bool? processBoundingBoxGeometry = OptionsUtil.GetNamedBooleanOption(options, \"ProcessBoundingBoxGeometry\");\r\n         bool? alwaysProcessBoundingBoxGeometry = OptionsUtil.GetNamedBooleanOption(options, \"AlwaysProcessBoundingBoxGeometry\");\r\n         if (alwaysProcessBoundingBoxGeometry.HasValue && alwaysProcessBoundingBoxGeometry.Value)\r\n            ProcessBoundingBoxGeometry = IFCProcessBBoxOptions.Always;\r\n         else if (processBoundingBoxGeometry.HasValue)\r\n            ProcessBoundingBoxGeometry = processBoundingBoxGeometry.Value ? IFCProcessBBoxOptions.NoOtherGeometry : IFCProcessBBoxOptions.Never;\r\n         else\r\n            ProcessBoundingBoxGeometry = IFCProcessBBoxOptions.NoOtherGeometry;\r\n\r\n         // The following 2 options control whether containers will get a copy of the geometry of its contained parts.  We have two options,\r\n         // one for Zones, and one for generic containers.  These are currently API-only options.\r\n         bool? createDuplicateZoneGeometry = OptionsUtil.GetNamedBooleanOption(options, \"CreateDuplicateZoneGeometry\");\r\n         if (createDuplicateZoneGeometry.HasValue)\r\n            CreateDuplicateZoneGeometry = createDuplicateZoneGeometry.Value;\r\n         bool? createDuplicateContainerGeometry = OptionsUtil.GetNamedBooleanOption(options, \"CreateDuplicateContainerGeometry\");\r\n         if (createDuplicateContainerGeometry.HasValue)\r\n            CreateDuplicateContainerGeometry = createDuplicateContainerGeometry.Value;\r\n\r\n         bool? useStreamlinedOptions = OptionsUtil.GetNamedBooleanOption(options, \"UseStreamlinedOptions\");\r\n         if (useStreamlinedOptions.HasValue)\r\n            UseStreamlinedOptions = useStreamlinedOptions.Value;\r\n\r\n         bool? disableLogging = OptionsUtil.GetNamedBooleanOption(options, \"DisableLogging\");\r\n         if (disableLogging.HasValue)\r\n            DisableLogging = disableLogging.Value;\r\n\r\n         bool? verboseLogging = OptionsUtil.GetNamedBooleanOption(options, \"VerboseLogging\");\r\n         if (verboseLogging.HasValue)\r\n            VerboseLogging = verboseLogging.Value;\r\n\r\n         string LinkOrientationOption = OptionsUtil.GetNamedStringOption(options, \"LinkOrientation\");\r\n         if (Enum.TryParse(LinkOrientationOption, out IFCLinkOrientation linkOrientationEnum))\r\n         {\r\n            LinkOrientation = linkOrientationEnum;\r\n         }\r\n\r\n         string linkPosition = OptionsUtil.GetNamedStringOption(options, \"LinkPosition\");\r\n         if (Enum.TryParse(linkPosition, out IFCLinkPosition linkPositionEnum))\r\n         {\r\n            LinkPosition = linkPositionEnum;\r\n         }\r\n\r\n         bool? forceImport = OptionsUtil.GetNamedBooleanOption(options, \"ForceImport\");\r\n         if (forceImport.HasValue)\r\n            ForceImport = forceImport.Value;\r\n\r\n         bool? createLinkInstanceOnly = OptionsUtil.GetNamedBooleanOption(options, \"CreateLinkInstanceOnly\");\r\n         if (createLinkInstanceOnly.HasValue)\r\n            CreateLinkInstanceOnly = createLinkInstanceOnly.Value;\r\n\r\n         string revitLinkFileName = OptionsUtil.GetNamedStringOption(options, \"RevitLinkFileName\");\r\n         if (!string.IsNullOrWhiteSpace(revitLinkFileName))\r\n            RevitLinkFileName = revitLinkFileName;\r\n\r\n         Int64? fileSize = OptionsUtil.GetNamedInt64Option(options, \"FileSize\", false);\r\n         if (fileSize.HasValue)\r\n            OriginalFileSize = fileSize.Value;\r\n\r\n         Int64? timestamp = OptionsUtil.GetNamedInt64Option(options, \"FileModifiedTime\", true);\r\n         if (timestamp.HasValue)\r\n            OriginalTimeStamp = OriginalTimeStamp.AddSeconds(timestamp.Value);\r\n\r\n         // NAVIS_TODO: Move the processor out of options.\r\n         string alternativeProcessor = OptionsUtil.GetNamedStringOption(options, \"AlternativeProcessor\");\r\n         if (!string.IsNullOrWhiteSpace(alternativeProcessor))\r\n         {\r\n            try\r\n            {\r\n               Type processorType = Type.GetType(alternativeProcessor);\r\n\r\n               object processor = Activator.CreateInstance(processorType);\r\n               if (typeof(IIFCFileProcessor).IsInstanceOfType(processor))\r\n               {\r\n                  Processor = processor as IIFCFileProcessor;\r\n               }\r\n            }\r\n            catch (Exception)\r\n            {\r\n            }\r\n         }\r\n\r\n         if (Processor == null)\r\n            Processor = new IFCDefaultProcessor();\r\n\r\n         ImportIFCOptions importIFCOptions = ImportIFCOptions.GetImportIFCOptions();\r\n         string linkProcessor = importIFCOptions.LinkProcessor;\r\n\r\n         // Use hybrid import if revit.ini does not have \"Legacy\" in it and we are using\r\n         // the default (Revit) processor.  For other processors (e.g., Navis), revert\r\n         // to Legacy.\r\n         HybridImportOptions = (Processor is IFCDefaultProcessor) ? IFCHybridImportOptions.Create(linkProcessor) : null;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Populate a new IFCImportOptions class with values based on the options passed in by the user.\r\n      /// </summary>\r\n      /// <param name=\"options\">The user-set options for this import.</param>\r\n      /// <returns>The new IFCImportOptions class.</returns>\r\n      static public IFCImportOptions Create(IDictionary<string, string> options)\r\n      {\r\n         return new IFCImportOptions(options);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/IFCImportShapeEditScope.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Data;\r\nusing Revit.IFC.Import.Enums;\r\nusing Revit.IFC.Import.Geometry;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides methods to manage creation of DirectShape elements.\r\n   /// </summary>\r\n   public class IFCImportShapeEditScope : IDisposable\r\n   {\r\n      // The names of the associated IfcPresentationLayerWithStyles\r\n      private ISet<string> m_PresentationLayerNames = null;\r\n\r\n      // A stack of material element id from IFCStyledItems and IFCPresentationLayerWithStyles.  The \"current\" material id should generally be used.\r\n      private IList<ElementId> m_MaterialIdList = null;\r\n\r\n      // store all curves for 2D plan representation.  \r\n      private ViewShapeBuilder ViewShapeBuilder { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Prevent Instances if shape will be voided\r\n      /// </summary>\r\n      public bool PreventInstances { get; set; } = false;\r\n\r\n      /// <summary>\r\n      /// Returns the builder scope which contains the ShapeBuilder that is used to create the geometry\r\n      /// </summary>\r\n      public BuilderScope BuilderScope { get; set; } = null;\r\n\r\n      private IList<ElementId> MaterialIdList\r\n      {\r\n         get\r\n         {\r\n            if (m_MaterialIdList == null)\r\n               m_MaterialIdList = new List<ElementId>();\r\n            return m_MaterialIdList;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the type of the shape builder that is used to create the geometry\r\n      /// </summary>\r\n      public IFCShapeBuilderType BuilderType { get; set; } = IFCShapeBuilderType.Unknown;\r\n\r\n      /// <summary>\r\n      /// The id of the associated graphics style, if any.\r\n      /// </summary>\r\n      public ElementId GraphicsStyleId\r\n      {\r\n         get { return Creator?.GetGraphicsStyleId(Document) ?? ElementId.InvalidElementId; }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The id of the associated category.\r\n      /// </summary>\r\n      public ElementId CategoryId\r\n      {\r\n         get { return Creator?.GetCategoryId(Document) ?? ElementId.InvalidElementId; }\r\n      }\r\n\r\n\r\n      private void PushMaterialId(ElementId materialId)\r\n      {\r\n         MaterialIdList.Add(materialId);\r\n      }\r\n\r\n      private void PopMaterialId()\r\n      {\r\n         int count = MaterialIdList.Count;\r\n         if (count > 0)\r\n            MaterialIdList.RemoveAt(count - 1);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the BuildPreferenceType of the IFCImportShapeEditScope\r\n      /// </summary>\r\n      public BuildPreferenceType BuildPreference { get; set; } = BuildPreferenceType.AnyGeometry;\r\n\r\n      /// <summary>\r\n      /// The material id associated with the representation item currently being processed.\r\n      /// </summary>\r\n      /// <returns></returns>\r\n      public ElementId GetCurrentMaterialId()\r\n      {\r\n         int count = MaterialIdList.Count;\r\n         if (count == 0)\r\n            return ElementId.InvalidElementId;\r\n         return MaterialIdList[count - 1];\r\n      }\r\n\r\n      /// <summary>\r\n      /// A class to responsibly set - and unset - ContainingRepresentation.  \r\n      /// Intended to be used with the \"using\" keyword.\r\n      /// </summary>\r\n      public class IFCContainingRepresentationSetter : IDisposable\r\n      {\r\n         private IFCImportShapeEditScope m_Scope = null;\r\n         private IFCRepresentation m_OldRepresentation = null;\r\n\r\n         /// <summary>\r\n         /// The constructor.\r\n         /// </summary>\r\n         /// <param name=\"scope\">The associated shape edit scope.</param>\r\n         /// <param name=\"item\">The current styled item.</param>\r\n         public IFCContainingRepresentationSetter(IFCImportShapeEditScope scope, IFCRepresentation containingRepresentation)\r\n         {\r\n            if (scope != null)\r\n            {\r\n               m_Scope = scope;\r\n               m_OldRepresentation = scope.ContainingRepresentation;\r\n               scope.ContainingRepresentation = containingRepresentation;\r\n            }\r\n         }\r\n\r\n         #region IDisposable Members\r\n\r\n         public void Dispose()\r\n         {\r\n            if (m_Scope != null)\r\n               m_Scope.ContainingRepresentation = m_OldRepresentation;\r\n         }\r\n\r\n         #endregion\r\n      }\r\n\r\n      /// <summary>\r\n      /// The class containing all of the IfcStyledItems currently active.\r\n      /// </summary>\r\n      public class IFCMaterialStack : IDisposable\r\n      {\r\n         private IFCImportShapeEditScope m_Scope = null;\r\n         private ElementId m_MaterialElementId = ElementId.InvalidElementId;\r\n\r\n         /// <summary>\r\n         /// The constructor.\r\n         /// </summary>\r\n         /// <param name=\"scope\">The associated shape edit scope.</param>\r\n         /// <param name=\"item\">The current styled item.</param>\r\n         public IFCMaterialStack(IFCImportShapeEditScope scope, IFCStyledItem styledItem, IFCPresentationLayerAssignment layerAssignment)\r\n         {\r\n            m_Scope = scope;\r\n            if (styledItem != null)\r\n               m_MaterialElementId = styledItem.GetMaterialElementId(scope);\r\n            else if (layerAssignment != null)\r\n               m_MaterialElementId = layerAssignment.GetMaterialElementId(scope);\r\n\r\n            if (m_MaterialElementId != ElementId.InvalidElementId)\r\n               m_Scope.PushMaterialId(m_MaterialElementId);\r\n         }\r\n\r\n         #region IDisposable Members\r\n\r\n         public void Dispose()\r\n         {\r\n            if (m_MaterialElementId != ElementId.InvalidElementId)\r\n               m_Scope.PopMaterialId();\r\n         }\r\n\r\n         #endregion\r\n      }\r\n\r\n      /// <summary>\r\n      /// The names of the presentation layers created in this scope.\r\n      /// </summary>\r\n      public ISet<string> PresentationLayerNames\r\n      {\r\n         get\r\n         {\r\n            if (m_PresentationLayerNames == null)\r\n               m_PresentationLayerNames = new SortedSet<string>();\r\n            return m_PresentationLayerNames;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The document associated with this element.\r\n      /// </summary>\r\n      public Document Document { get; protected set; } = null;\r\n\r\n      /// <summary>\r\n      /// Get the top-level IFC entity associated with this shape.\r\n      /// </summary>\r\n      public IFCProduct Creator { get; protected set; } = null;\r\n\r\n\r\n      /// <summary>\r\n      /// The IFCRepresentation that contains the currently processed IFC entity.\r\n      /// </summary>\r\n      public IFCRepresentation ContainingRepresentation { get; protected set; } = null;\r\n\r\n      protected IFCImportShapeEditScope()\r\n      {\r\n\r\n      }\r\n\r\n      protected IFCImportShapeEditScope(Document doc, IFCProduct creator)\r\n      {\r\n         Document = doc;\r\n         Creator = creator;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a new edit scope.  Intended to be used with the \"using\" keyword.\r\n      /// </summary>\r\n      /// <param name=\"doc\">The import document.</param>\r\n      /// <param name=\"action\">The name of the current action.</param>\r\n      /// <param name=\"creator\">The entity being processed.</param>\r\n      /// <returns>The new edit scope.</returns>\r\n      static public IFCImportShapeEditScope Create(Document doc, IFCProduct creator)\r\n      {\r\n         return new IFCImportShapeEditScope(doc, creator);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Safely get the top-level IFC entity associated with this shape, if it exists, or -1 otherwise.\r\n      /// </summary>\r\n      public int CreatorId()\r\n      {\r\n         if (Creator != null)\r\n            return Creator.Id;\r\n         return -1;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns the type of the IFCRepresentation that contains the currently processed IFC entity, if set.\r\n      /// </summary>\r\n      /// <returns>The representation identifier, or Unhandled if there is none.</returns>\r\n      public IFCRepresentationIdentifier GetContainingRepresentationIdentifier()\r\n      {\r\n         if (ContainingRepresentation == null)\r\n            return IFCRepresentationIdentifier.Other;\r\n         return ContainingRepresentation.Identifier;\r\n      }\r\n\r\n      // End temporary classes for holding BRep information.\r\n      \r\n      /// <summary>\r\n      /// Add a Solid to the current DirectShape element.\r\n      /// </summary>\r\n      /// <param name=\"solidInfo\">The IFCSolidInfo class describing the solid.</param>\r\n      public void AddGeometry(IFCSolidInfo solidInfo)\r\n      {\r\n         if (solidInfo == null || solidInfo.GeometryObject == null)\r\n            return;\r\n\r\n         solidInfo.RepresentationIdentifier = GetContainingRepresentationIdentifier();\r\n         Creator.Solids.Add(solidInfo);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add a curve to the Footprint reprensentation of the object in scope.\r\n      /// </summary>\r\n      /// <param name=\"curve\">The curve.</param>\r\n      public void AddFootprintCurve(Curve curve)\r\n      {\r\n         if (curve == null)\r\n            return;\r\n\r\n         Creator.FootprintCurves.Add(curve);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Indicates whether we are required to create a solid\r\n      /// </summary>\r\n      /// <returns>True if we are required to create a solid, false otherwise</returns>\r\n      public bool MustCreateSolid()\r\n      {\r\n         if (BuilderType == IFCShapeBuilderType.TessellatedShapeBuilder)\r\n         {\r\n            TessellatedShapeBuilderScope bs = BuilderScope as TessellatedShapeBuilderScope;\r\n            return (bs.TargetGeometry == TessellatedShapeBuilderTarget.Solid && bs.FallbackGeometry == TessellatedShapeBuilderFallback.Abort);\r\n         }\r\n         if (BuilderType == IFCShapeBuilderType.BrepBuilder)\r\n         {\r\n            // Currently for BrepBuilder, we hard code that BrepType is Solid, so this must return true\r\n            return true;\r\n         }\r\n\r\n         return false;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Get the tolerance to be used when determining if a polygon has too short an edge\r\n      /// for either solid or mesh output.</summary>\r\n      /// <returns>The tolerance value.</returns>\r\n      public double GetShortSegmentTolerance()\r\n      {\r\n         if (BuilderType != IFCShapeBuilderType.TessellatedShapeBuilder)\r\n            return IFCImportFile.TheFile.ShortCurveTolerance;\r\n\r\n         TessellatedShapeBuilderScope bs = BuilderScope as TessellatedShapeBuilderScope;\r\n         return (bs.TargetGeometry == TessellatedShapeBuilderTarget.Mesh) ?\r\n            MathUtil.Eps() : IFCImportFile.TheFile.ShortCurveTolerance;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add curves to represent the plan view of the created object.\r\n      /// </summary>\r\n      /// <param name=\"curves\">The list of curves, to be validated.</param>\r\n      /// <param name=\"id\">The id of the object being created, for error logging.</param>\r\n      /// <returns>True if any curves were added to the plan view representation.</returns>\r\n      public bool AddPlanViewCurves(IList<Curve> curves, int id)\r\n      {\r\n         ViewShapeBuilder = null;\r\n         int numCurves = curves.Count;\r\n         if (numCurves > 0)\r\n         {\r\n            ViewShapeBuilder = new ViewShapeBuilder(DirectShapeTargetViewType.Plan);\r\n\r\n            IFCGeometryUtil.SplitUnboundCyclicCurves(curves);\r\n\r\n            // Ideally we'd form these curves into a CurveLoop and get the Plane of the CurveLoop.  However, there is no requirement\r\n            // that the plan view curves form one contiguous loop.\r\n            foreach (Curve curve in curves)\r\n            {\r\n               if (ViewShapeBuilder.ValidateCurve(curve))\r\n                  ViewShapeBuilder.AddCurve(curve);\r\n               else\r\n               {\r\n                  // We will move the origin to Z=0 if necessary, since the VSB requires all curves to be in the Z=0 plane.\r\n                  // This only works if the curves are in a plane parallel to the Z=0 plane.\r\n                  // NOTE: We could instead project the curves to the Z=0 plane, which could have the effect of changing their geometry.\r\n                  // Until we see such cases, we will take the easier route here.\r\n                  try\r\n                  {\r\n                     // If the end points aren't equal in Z, then the curve isn't parallel to Z.\r\n                     bool isBound = curve.IsBound;\r\n                     XYZ startPoint = isBound ? curve.GetEndPoint(0) : curve.Evaluate(0, false);\r\n                     XYZ endPoint = isBound ? curve.GetEndPoint(1) : startPoint;\r\n                     if (!MathUtil.IsAlmostEqual(startPoint.Z, endPoint.Z))\r\n                        throw new InvalidOperationException(\"Non-planar curve in footprint representation.\");\r\n\r\n                     // Lines won't have a non-zero BasisZ value, so don't bother computing.\r\n                     if (!(curve is Line))\r\n                     {\r\n                        Transform coordinatePlane = curve.ComputeDerivatives(0, true);\r\n                        if (coordinatePlane != null && coordinatePlane.BasisZ != null && !coordinatePlane.BasisZ.IsZeroLength())\r\n                        {\r\n                           XYZ normalizedZ = coordinatePlane.BasisZ.Normalize();\r\n                           if (!MathUtil.IsAlmostEqual(Math.Abs(normalizedZ.Z), 1.0))\r\n                              throw new InvalidOperationException(\"Non-planar curve in footprint representation.\");\r\n                        }\r\n                     }\r\n\r\n                     // We expect startPoint.Z to be non-zero, otherwise ValidateCurve would have accepted the curve in the first place.\r\n                     Transform offsetTransform = Transform.CreateTranslation(-startPoint.Z * XYZ.BasisZ);\r\n                     Curve projectedCurve = curve.CreateTransformed(offsetTransform);\r\n\r\n                     // We may have missed a case above - for example, a curve whose end points have the same Z value, and whose normal at the\r\n                     // start point is in +/-Z, but is regardless non-planar.  ValidateCurve has a final chance to reject such curves here.\r\n                     if (projectedCurve == null || !ViewShapeBuilder.ValidateCurve(projectedCurve))\r\n                        throw new InvalidOperationException(\"Invalid curve in footprint representation.\");\r\n                     ViewShapeBuilder.AddCurve(projectedCurve);\r\n                     continue;\r\n                  }\r\n                  catch\r\n                  {\r\n                  }\r\n\r\n                  Importer.TheLog.LogError(id, \"Invalid curve in FootPrint representation, ignoring.\", false);\r\n                  numCurves--;\r\n               }\r\n            }\r\n\r\n            if (numCurves == 0)\r\n               ViewShapeBuilder = null;\r\n         }\r\n\r\n         return (ViewShapeBuilder != null);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set the plan view representation of the given DirectShape or DirectShapeType given the information created by AddPlanViewCurves.\r\n      /// </summary>\r\n      /// <param name=\"shape\">The DirectShape or DirectShapeType.</param>\r\n      public void SetPlanViewRep(Element shape)\r\n      {\r\n         if (ViewShapeBuilder != null)\r\n         {\r\n            if (shape is DirectShape)\r\n            {\r\n               DirectShape ds = shape as DirectShape;\r\n               ds.SetShape(ViewShapeBuilder);\r\n            }\r\n            else if (shape is DirectShapeType)\r\n            {\r\n               DirectShapeType dst = shape as DirectShapeType;\r\n               dst.SetShape(ViewShapeBuilder);\r\n            }\r\n            else\r\n               throw new ArgumentException(\"SetPlanViewRep only works on DirectShape and DirectShapeType.\");\r\n         }\r\n      }\r\n\r\n\r\n\r\n      #region IDisposable Members\r\n\r\n      public void Dispose()\r\n      {\r\n      }\r\n\r\n      #endregion\r\n\r\n      /// <summary>\r\n      /// Initialize the builder that will be used to create the geometry\r\n      /// </summary>\r\n      /// <param name=\"builderType\">The type of the builder</param>\r\n      public BuilderScope InitializeBuilder(IFCShapeBuilderType builderType)\r\n      {\r\n         if (BuilderScope != null)\r\n         {\r\n            throw new InvalidOperationException(\"BuilderScope has already been initialized\");\r\n         }\r\n\r\n         BuilderType = builderType;\r\n         \r\n         if (builderType == IFCShapeBuilderType.BrepBuilder)\r\n         {\r\n            BuilderScope = new BrepBuilderScope(this);\r\n         }\r\n         else if (builderType == IFCShapeBuilderType.TessellatedShapeBuilder)\r\n         {\r\n            BuilderScope = new TessellatedShapeBuilderScope(this);\r\n         }\r\n         \r\n         return BuilderScope;\r\n      }\r\n\r\n      /// <summary>\r\n      /// A class that allows temporarily changing the BuildPreferenceType of IFCImportShapeEditScope\r\n      /// </summary>\r\n      public class BuildPreferenceSetter : IDisposable\r\n      {\r\n         BuildPreferenceType m_PreferenceType;\r\n         IFCImportShapeEditScope m_Scope;\r\n\r\n         public BuildPreferenceSetter(IFCImportShapeEditScope scope, BuildPreferenceType buildPreferenceType)\r\n         {\r\n            m_Scope = scope;\r\n            m_PreferenceType = scope.BuildPreference;\r\n            scope.BuildPreference = buildPreferenceType;\r\n         }\r\n\r\n         public void Dispose()\r\n         {\r\n            m_Scope.BuildPreference = m_PreferenceType;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The type of geometry that can be built\r\n      /// </summary>\r\n      public enum BuildPreferenceType\r\n      {\r\n         ForceSolid,\r\n         AnyMesh,\r\n         AnyGeometry\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/IFCMaterialCache.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Data;\r\nusing UnitSystem = Autodesk.Revit.DB.DisplayUnit;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   /// <summary>\r\n   /// A class that contains a map from material names to the settable values of Material from IFC.\r\n   /// </summary>\r\n   public class IFCMaterialCache\r\n   {\r\n      IDictionary<string, IList<IFCMaterialInfo>> m_MaterialCache = null;\r\n\r\n      public IDictionary<string, IList<IFCMaterialInfo>> MaterialCache\r\n      {\r\n         get\r\n         {\r\n            if (m_MaterialCache == null)\r\n               m_MaterialCache = new SortedDictionary<string, IList<IFCMaterialInfo>>(StringComparer.InvariantCultureIgnoreCase);\r\n            return m_MaterialCache;\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// The default constructor.\r\n      /// </summary>\r\n      public IFCMaterialCache()\r\n      {\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add a material info entry to a new or existing material name.\r\n      /// </summary>\r\n      /// <param name=\"name\">The material name.</param>\r\n      /// <param name=\"info\">The material information.</param>\r\n      public void Add(string name, IFCMaterialInfo info)\r\n      {\r\n         IList<IFCMaterialInfo> createdMaterials;\r\n         if (!MaterialCache.TryGetValue(name, out createdMaterials))\r\n         {\r\n            createdMaterials = new List<IFCMaterialInfo>();\r\n            MaterialCache[name] = createdMaterials;\r\n         }\r\n         createdMaterials.Add(info);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds a material with the same name and information.\r\n      /// </summary>\r\n      /// <param name=\"name\">The material name.</param>\r\n      /// <param name=\"id\">The id of the material.  We will look for potential matches with the id included in the name.</param>\r\n      /// <param name=\"info\">The material information.</param>\r\n      /// <returns></returns>\r\n      public ElementId FindMatchingMaterial(string name, int id, IFCMaterialInfo info)\r\n      {\r\n         IList<IFCMaterialInfo> createdMaterials;\r\n         if (!MaterialCache.TryGetValue(name, out createdMaterials))\r\n            return ElementId.InvalidElementId;\r\n\r\n         int infoTransparency = info.Transparency.HasValue ? info.Transparency.Value : 0;\r\n         foreach (IFCMaterialInfo createdMaterial in createdMaterials)\r\n         {\r\n            if (info.Color != null)\r\n            {\r\n               if (createdMaterial.Color == null)\r\n                  continue;\r\n               if ((createdMaterial.Color.Red != info.Color.Red) ||\r\n                   (createdMaterial.Color.Green != info.Color.Green) ||\r\n                   (createdMaterial.Color.Blue != info.Color.Blue))\r\n                  continue;\r\n            }\r\n\r\n            int createdMaterialTransparency = createdMaterial.Transparency.HasValue ? createdMaterial.Transparency.Value : 0;\r\n            if (infoTransparency != createdMaterialTransparency)\r\n               continue;\r\n\r\n            if (info.Shininess.HasValue)\r\n            {\r\n               if (!createdMaterial.Shininess.HasValue)\r\n                  continue;\r\n               if (info.Shininess.Value != createdMaterial.Shininess.Value)\r\n                  continue;\r\n            }\r\n\r\n            if (info.Smoothness.HasValue)\r\n            {\r\n               if (!createdMaterial.Smoothness.HasValue)\r\n                  continue;\r\n               if (info.Smoothness.Value != createdMaterial.Smoothness.Value)\r\n                  continue;\r\n            }\r\n\r\n            return createdMaterial.ElementId;\r\n         }\r\n\r\n         // We found a name match, but it didn't have the right materials.  Try again with id appended to the name.\r\n         string newMaterialName = Importer.TheCache.CreatedMaterials.GetUniqueMaterialName(name, id);\r\n         return FindMatchingMaterial(newMaterialName, id, info);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Ensure that a material has a unique name.\r\n      /// </summary>\r\n      /// <param name=\"originalName\">The original name.</param>\r\n      /// <param name=\"id\">The id of the material.</param>\r\n      /// <returns>A unique name, either the original name or original name + id.</returns>\r\n      public string GetUniqueMaterialName(string originalName, int id)\r\n      {\r\n         string newName = originalName;\r\n         while (MaterialCache.ContainsKey(newName))\r\n            newName = newName + \" \" + id;\r\n         return newName;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/IFCMaterialInfo.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Import.Data;\r\nusing UnitSystem = Autodesk.Revit.DB.DisplayUnit;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   /// <summary>\r\n   /// A class that contains the settable values of Material from IFC.\r\n   /// Used to determine \"equivalence\".\r\n   /// </summary>\r\n   public class IFCMaterialInfo\r\n   {\r\n      /// <summary>\r\n      /// The color of the material.\r\n      /// </summary>\r\n      public Color Color { get; set; }\r\n\r\n      /// <summary>\r\n      /// The optional transparency of the material, from 0 to 100 (fully transparent).\r\n      /// </summary>\r\n      public int? Transparency { get; set; }\r\n\r\n      /// <summary>\r\n      /// The optional shininess of the material.\r\n      /// </summary>\r\n      public int? Shininess { get; set; }\r\n\r\n      /// <summary>\r\n      /// The optional smoothness of the material.\r\n      /// </summary>\r\n      public int? Smoothness { get; set; }\r\n\r\n      /// <summary>\r\n      /// The element id of the associated Revit material.\r\n      /// </summary>\r\n      public ElementId ElementId { get; set; }\r\n\r\n      protected IFCMaterialInfo()\r\n      {\r\n      }\r\n\r\n      protected IFCMaterialInfo(Color color, int? transparency, int? shininess, int? smoothness, ElementId id)\r\n      {\r\n         Color = color;\r\n         Transparency = transparency;\r\n         Shininess = shininess;\r\n         Smoothness = smoothness;\r\n         ElementId = id;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCMaterialInfo from the imported values of materials.\r\n      /// </summary>\r\n      /// <param name=\"color\">The color.</param>\r\n      /// <param name=\"transparency\">The optional transparency.</param>\r\n      /// <param name=\"shininess\">The optional shininess.</param>\r\n      /// <param name=\"smoothness\">The optional smoothness.</param>\r\n      /// <param name=\"id\">The element id of the material, if it exists, otherwise invalidElementId.</param>\r\n      /// <returns>The IFCMaterialInfo container.</returns>\r\n      public static IFCMaterialInfo Create(Color color, int? transparency, int? shininess, int? smoothness, ElementId id)\r\n      {\r\n         return new IFCMaterialInfo(color, transparency, shininess, smoothness, id);\r\n      }\r\n\r\n      public bool IsValid()\r\n      {\r\n         return (Color != null) || (Transparency != null) || (Shininess != null) || (Smoothness != null);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/IFCNamingUtil.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides methods to process IFC names.\r\n   /// </summary>\r\n   public class IFCNamingUtil\r\n   {\r\n      /// <summary>\r\n      /// Creates a valid Revit name from an IFC name.\r\n      /// </summary>\r\n      /// <param name=\"ifcName\">The IFC name.</param>\r\n      /// <returns>The Revit equivalent</returns>\r\n      /// <remarks>Use this at the element creation level, to preserve the IFC name for NameOverride.</remarks>\r\n      public static string CleanIFCName(string ifcName)\r\n      {\r\n         // TODO: potentially parse Revit roundtrip names better.\r\n         if (string.IsNullOrWhiteSpace(ifcName))\r\n            return null;\r\n         StringBuilder cleanName = new StringBuilder(ifcName);\r\n         cleanName.Replace(':', '-');\r\n         cleanName.Replace('{', '(');\r\n         cleanName.Replace('[', '(');\r\n         cleanName.Replace('<', '(');\r\n         cleanName.Replace('}', ')');\r\n         cleanName.Replace(']', ')');\r\n         cleanName.Replace('>', ')');\r\n         cleanName.Replace('|', '/');\r\n         cleanName.Replace(';', ',');\r\n         cleanName.Replace('?', '.');\r\n         cleanName.Replace('~', '-');\r\n         cleanName.Replace('`', '\\'');\r\n         cleanName.Replace('\\\\', '/');\r\n\r\n         return cleanName.ToString();\r\n      }\r\n\r\n      /// <summary>\r\n      /// Compares two strings for equality, including null strings.\r\n      /// </summary>\r\n      /// <param name=\"s1\">The first string.</param>\r\n      /// <param name=\"s2\">The second string.</param>\r\n      /// <returns>True if s1 == s2.</returns>\r\n      public static bool SafeStringsAreEqual(string s1, string s2)\r\n      {\r\n         if ((s1 == null) != (s2 == null))\r\n            return false;\r\n\r\n         if ((s1 != null) && (string.Compare(s1, s2) != 0))\r\n            return false;\r\n\r\n         return true;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/IFCObjectReferenceSelect.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Common.Enums;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Data;\r\nusing Revit.IFC.Import.Enums;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides methods to convert IfcObjectReferenceSelect values to parameter values.\r\n   /// </summary>\r\n   public class IFCObjectReferenceSelect\r\n   {\r\n      private static IList<string> m_TelecomPrefixes = null;\r\n\r\n      /// <summary>\r\n      /// Returns an ElementId value corresponding to an handle based on its entity type.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle that contains information to relate to the user in string format.</param>\r\n      /// <returns>The representation of the data as an ElementId, if valid.</returns>\r\n      static public ElementId ToElementId(IFCAnyHandle handle)\r\n      {\r\n         ElementId valueAsElementId = ElementId.InvalidElementId;\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(handle))\r\n            return valueAsElementId;\r\n\r\n         IFCEntityType handleType = IFCAnyHandleUtil.GetEntityType(handle);\r\n         switch (handleType)\r\n         {\r\n            case IFCEntityType.IfcMaterial:\r\n               IFCMaterial material = IFCMaterial.ProcessIFCMaterial(handle);\r\n               if (material != null)\r\n                  valueAsElementId = material.GetMaterialElementId();\r\n               break;\r\n         }\r\n\r\n         return valueAsElementId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns a string value corresponding to an handle based on its entity type.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The entity handle that contains information to relate to the user in string format.</param>\r\n      /// <returns>The approximate representation of the data as a string.</returns>\r\n      static public string ToString(IFCAnyHandle handle)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(handle))\r\n            return null;\r\n\r\n         string valueAsString = null;\r\n\r\n         IFCEntityType handleType = IFCAnyHandleUtil.GetEntityType(handle);\r\n         switch (handleType)\r\n         {\r\n            case IFCEntityType.IfcMaterial:\r\n               valueAsString = MaterialToString(handle);\r\n               break;\r\n            case IFCEntityType.IfcPerson:\r\n               valueAsString = PersonToString(handle);\r\n               break;\r\n            case IFCEntityType.IfcDateAndTime:\r\n               valueAsString = DateAndTimeToString(handle);\r\n               break;\r\n            case IFCEntityType.IfcMaterialList:\r\n               valueAsString = MaterialListToString(handle);\r\n               break;\r\n            case IFCEntityType.IfcOrganization:\r\n               valueAsString = OrganizationToString(handle);\r\n               break;\r\n            case IFCEntityType.IfcCalendarDate:\r\n               valueAsString = CalendarDateToString(handle);\r\n               break;\r\n            case IFCEntityType.IfcLocalTime:\r\n               valueAsString = LocalTimeToString(handle);\r\n               break;\r\n            case IFCEntityType.IfcPersonAndOrganization:\r\n               valueAsString = PersonAndOrganizationToString(handle);\r\n               break;\r\n            case IFCEntityType.IfcLibraryReference:\r\n            case IFCEntityType.IfcClassificationReference:\r\n            case IFCEntityType.IfcDocumentReference:\r\n               valueAsString = ExternalReferenceToString(handle);\r\n               break;\r\n            case IFCEntityType.IfcPostalAddress:\r\n               valueAsString = PostalAddressToString(handle);\r\n               break;\r\n            case IFCEntityType.IfcTelecomAddress:\r\n               valueAsString = TelecomAddressToString(handle);\r\n               break;\r\n            default:\r\n               // TODO: Support IfcMaterialLayer, IfcTimeSeries, IfcAppliedValue.\r\n               // IfcTimeSeries and IfcAppliedValue are abstract supertypes.\r\n               Importer.TheLog.LogWarning(handle.StepId, \"Unhandled sub-type of IFCObjectReferenceSelect: \" + handleType.ToString(), true);\r\n               break;\r\n         }\r\n\r\n         return valueAsString;\r\n      }\r\n\r\n      private static string ConcatenateString(string originalString, string delimiter, string appenedString)\r\n      {\r\n         if (string.IsNullOrWhiteSpace(appenedString))\r\n            return originalString;\r\n         if (string.IsNullOrWhiteSpace(originalString))\r\n            return appenedString;\r\n         return originalString + appenedString + delimiter;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Returns a list of strings as one string.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The handle.</param>\r\n      /// <param name=\"propertyName\">The property name.</param>\r\n      /// <param name=\"delimiter\">The delimiter for the list.</param>\r\n      /// <returns></returns>\r\n      private static string GetListAsString(IFCAnyHandle handle, string propertyName, string delimiter)\r\n      {\r\n         List<string> propertyList = IFCAnyHandleUtil.GetAggregateStringAttribute<List<string>>(handle, propertyName);\r\n         if (propertyList.Count == 0)\r\n            return null;\r\n\r\n         string valueAsString = null;\r\n         foreach (string propertyValue in propertyList)\r\n         {\r\n            if (string.IsNullOrWhiteSpace(propertyValue))\r\n               continue;\r\n            ConcatenateString(valueAsString, delimiter, propertyValue);\r\n         }\r\n\r\n         return valueAsString;\r\n      }\r\n\r\n      private static string ActorRoleToString(IFCAnyHandle handle)\r\n      {\r\n         string valueAsString = IFCAnyHandleUtil.GetEnumerationAttribute(handle, \"Role\");\r\n         if (string.Compare(valueAsString, \"UserDefined\", true) == 0)\r\n         {\r\n            string optionalRole = IFCImportHandleUtil.GetOptionalStringAttribute(handle, \"UserDefinedRole\", null);\r\n            if (!string.IsNullOrWhiteSpace(optionalRole))\r\n               valueAsString = optionalRole;\r\n         }\r\n\r\n         return valueAsString;\r\n      }\r\n\r\n      private static string CalendarDateToString(IFCAnyHandle handle)\r\n      {\r\n         bool found;\r\n         int day = IFCImportHandleUtil.GetRequiredIntegerAttribute(handle, \"DayComponent\", out found);\r\n         if (!found)\r\n            return null;\r\n\r\n         int month = IFCImportHandleUtil.GetRequiredIntegerAttribute(handle, \"MonthComponent\", out found);\r\n         if (!found)\r\n            return null;\r\n\r\n         int year = IFCImportHandleUtil.GetRequiredIntegerAttribute(handle, \"YearComponent\", out found);\r\n         if (!found)\r\n            return null;\r\n\r\n         return year.ToString(\"D4\") + \"-\" + month.ToString(\"D2\") + \"-\" + day.ToString(\"D2\");\r\n      }\r\n\r\n      private static string CoordinatedUniversalTimeOffsetToString(IFCAnyHandle handle, int daylightSavingHour)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(handle))\r\n            return null;\r\n\r\n         bool found;\r\n         int hour = IFCImportHandleUtil.GetRequiredIntegerAttribute(handle, \"HourOffset\", out found);\r\n         if (!found)\r\n            return null;\r\n\r\n         IFCAheadOrBehind? sense = IFCEnums.GetSafeEnumerationAttribute<IFCAheadOrBehind>(handle, \"Sense\");\r\n         if (sense.HasValue && sense.Value == IFCAheadOrBehind.Behind)\r\n            hour = -hour;\r\n\r\n         hour += daylightSavingHour;\r\n\r\n         string valueAsString = \"UTC\" + hour.ToString();\r\n         int minute = IFCImportHandleUtil.GetRequiredIntegerAttribute(handle, \"MinuteOffset\", out found);\r\n         if (found)\r\n            valueAsString += \":\" + minute.ToString(\"D2\");\r\n\r\n         return valueAsString;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Convert date and time to string in the format YYYY-MM-DD HH::MM::SS (timezone)\r\n      /// </summary>\r\n      /// <param name=\"handle\">The IfcDateTime handle.</param>\r\n      /// <returns>The date and time string.</returns>\r\n      private static string DateAndTimeToString(IFCAnyHandle handle)\r\n      {\r\n         string dateComponent = CalendarDateToString(handle);\r\n         string timeComponent = LocalTimeToString(handle);\r\n         return ConcatenateString(dateComponent, \" \", timeComponent);\r\n      }\r\n\r\n      private static string ExternalReferenceToString(IFCAnyHandle handle)\r\n      {\r\n         string valueAsString = IFCImportHandleUtil.GetOptionalStringAttribute(handle, \"Location\", null);\r\n\r\n         string itemReference = IFCImportHandleUtil.GetOptionalStringAttribute(handle, \"ItemReference\", null);\r\n         ConcatenateString(valueAsString, \" : \", itemReference);\r\n\r\n         string name = IFCImportHandleUtil.GetOptionalStringAttribute(handle, \"Name\", null);\r\n         ConcatenateString(valueAsString, \" : \", name);\r\n\r\n         // TODO: Process the optional ReferencedSource of type IfcClassification for IfcClassificationReference.\r\n         return valueAsString;\r\n      }\r\n\r\n      private static string LocalTimeToString(IFCAnyHandle handle)\r\n      {\r\n         bool found;\r\n         int hour = IFCImportHandleUtil.GetRequiredIntegerAttribute(handle, \"HourComponent\", out found);\r\n         if (!found)\r\n            return null;\r\n\r\n         string valueAsString = hour.ToString(\"D2\");\r\n         int minute = IFCImportHandleUtil.GetOptionalIntegerAttribute(handle, \"MinuteComponent\", out found);\r\n         if (found)\r\n         {\r\n            valueAsString += \":\" + minute.ToString(\"D2\");\r\n            int second = IFCImportHandleUtil.GetOptionalIntegerAttribute(handle, \"SecondComponent\", out found);\r\n            if (found)\r\n               valueAsString += \":\" + second.ToString(\"D2\");\r\n         }\r\n\r\n         // Relies on default return of 0 if not found.\r\n         int daylightSavingHour = IFCImportHandleUtil.GetOptionalIntegerAttribute(handle, \"DaylightSavingOffset\", out found);\r\n\r\n         IFCAnyHandle coordinatedUniversalTimeOffset = IFCImportHandleUtil.GetOptionalInstanceAttribute(handle, \"CoordinatedUniversalTimeOffset\");\r\n         string timezone = CoordinatedUniversalTimeOffsetToString(coordinatedUniversalTimeOffset, daylightSavingHour);\r\n         if (!string.IsNullOrWhiteSpace(timezone))\r\n            valueAsString += \" (\" + timezone + \")\";\r\n\r\n         return valueAsString;\r\n      }\r\n\r\n      private static string MaterialToString(IFCAnyHandle handle)\r\n      {\r\n         IFCMaterial material = IFCMaterial.ProcessIFCMaterial(handle);\r\n         if (material != null)\r\n            return material.Name;\r\n         return null;\r\n      }\r\n\r\n      private static string MaterialListToString(IFCAnyHandle handle)\r\n      {\r\n         string valueAsString = null;\r\n\r\n         List<IFCAnyHandle> materials = IFCAnyHandleUtil.GetAggregateInstanceAttribute<List<IFCAnyHandle>>(handle, \"Materials\");\r\n         foreach (IFCAnyHandle material in materials)\r\n         {\r\n            string currentMaterialAsString = IFCImportHandleUtil.GetRequiredStringAttribute(handle, \"Name\", false);\r\n            ConcatenateString(valueAsString, \";\", currentMaterialAsString);\r\n         }\r\n\r\n         return valueAsString;\r\n      }\r\n\r\n      private static string OrganizationToString(IFCAnyHandle handle)\r\n      {\r\n         // Ignoring Id, Description, Roles, and Addresses.\r\n         return IFCImportHandleUtil.GetRequiredStringAttribute(handle, \"Name\", false);\r\n      }\r\n\r\n      private static string PersonToString(IFCAnyHandle handle)\r\n      {\r\n         // There is no \"person\" parameter defintion in Revit.  As such, we try, in order:\r\n         // 1. PrefixTitles GivenName MiddleNames FamilyName SuffixTitles\r\n         // 2. Id\r\n         // 3. Roles\r\n         // We are ignoring the address field, and will alert the user to that if it is set.\r\n\r\n         // #1\r\n         string valueAsString = GetListAsString(handle, \"PrefixTitles\", \" \");\r\n\r\n         string namePart = IFCImportHandleUtil.GetOptionalStringAttribute(handle, \"GivenName\", null);\r\n         ConcatenateString(valueAsString, \" \", namePart);\r\n\r\n         namePart = GetListAsString(handle, \"MiddleNames\", \" \");\r\n         ConcatenateString(valueAsString, \" \", namePart);\r\n\r\n         namePart = IFCImportHandleUtil.GetOptionalStringAttribute(handle, \"FamilyName\", null);\r\n         ConcatenateString(valueAsString, \" \", namePart);\r\n\r\n         namePart = IFCImportHandleUtil.GetOptionalStringAttribute(handle, \"FamilyName\", null);\r\n         ConcatenateString(valueAsString, \" \", namePart);\r\n\r\n         namePart = GetListAsString(handle, \"SuffixTitles\", \",\");\r\n         ConcatenateString(valueAsString, \" \", namePart);\r\n\r\n         if (!string.IsNullOrWhiteSpace(valueAsString))\r\n            return valueAsString;\r\n\r\n         // #2\r\n         valueAsString = IFCImportHandleUtil.GetOptionalStringAttribute(handle, \"Id\", null);\r\n         if (!string.IsNullOrWhiteSpace(valueAsString))\r\n            return valueAsString;\r\n\r\n         // #3\r\n         valueAsString = ActorRoleToString(handle);\r\n         return valueAsString;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a string of the form of Person, Organization.\r\n      /// </summary>\r\n      /// <param name=\"handle\">The IfcPersonAndOrganization handle.</param>\r\n      /// <returns>The string of the form \"Person, Organization\".</returns>\r\n      private static string PersonAndOrganizationToString(IFCAnyHandle handle)\r\n      {\r\n         IFCAnyHandle person = IFCImportHandleUtil.GetRequiredInstanceAttribute(handle, \"ThePerson\", false);\r\n         IFCAnyHandle organization = IFCImportHandleUtil.GetRequiredInstanceAttribute(handle, \"TheOrganization\", false);\r\n\r\n         return ConcatenateString(PersonToString(person), \", \", OrganizationToString(organization));\r\n      }\r\n\r\n      private static string PostalAddressToString(IFCAnyHandle handle)\r\n      {\r\n         string valueAsString = IFCImportHandleUtil.GetOptionalStringAttribute(handle, \"InternalLocation\", null);\r\n\r\n         string extraLinesAsString = GetListAsString(handle, \"AddressLines\", \", \");\r\n         ConcatenateString(valueAsString, \", \", extraLinesAsString);\r\n\r\n         extraLinesAsString = IFCImportHandleUtil.GetOptionalStringAttribute(handle, \"PostalBox\", null);\r\n         ConcatenateString(valueAsString, \", \", extraLinesAsString);\r\n\r\n         extraLinesAsString = IFCImportHandleUtil.GetOptionalStringAttribute(handle, \"Town\", null);\r\n         ConcatenateString(valueAsString, \", \", extraLinesAsString);\r\n\r\n         extraLinesAsString = IFCImportHandleUtil.GetOptionalStringAttribute(handle, \"Region\", null);\r\n         ConcatenateString(valueAsString, \", \", extraLinesAsString);\r\n\r\n         extraLinesAsString = IFCImportHandleUtil.GetOptionalStringAttribute(handle, \"PostalCode\", null);\r\n         ConcatenateString(valueAsString, \", \", extraLinesAsString);\r\n\r\n         extraLinesAsString = IFCImportHandleUtil.GetOptionalStringAttribute(handle, \"Country\", null);\r\n         ConcatenateString(valueAsString, \", \", extraLinesAsString);\r\n\r\n         return valueAsString;\r\n      }\r\n\r\n      private static string TelecomAddressToString(IFCAnyHandle handle)\r\n      {\r\n         IList<string> addresses = new List<string>();\r\n         addresses.Add(GetListAsString(handle, \"TelephoneNumbers\", \", \"));\r\n         addresses.Add(GetListAsString(handle, \"FacsimileNumbers\", \", \"));\r\n         addresses.Add(IFCImportHandleUtil.GetOptionalStringAttribute(handle, \"Pager\", null));\r\n         addresses.Add(GetListAsString(handle, \"ElectronicMailAddresses\", \", \"));\r\n         addresses.Add(IFCImportHandleUtil.GetOptionalStringAttribute(handle, \"WWWHomePageURL\", null));\r\n\r\n         int numValidEntries = 0;\r\n         IList<bool> addressesValid = new List<bool>();\r\n         foreach (string address in addresses)\r\n         {\r\n            bool addressValid = !string.IsNullOrWhiteSpace(address);\r\n            if (addressValid) numValidEntries++;\r\n            addressesValid.Add(addressValid);\r\n         }\r\n\r\n         if (numValidEntries == 0)\r\n            return null;\r\n\r\n         if (numValidEntries > 1)\r\n         {\r\n            if (m_TelecomPrefixes == null)\r\n            {\r\n               m_TelecomPrefixes = new List<string>();\r\n               m_TelecomPrefixes.Add(\"TEL: \");\r\n               m_TelecomPrefixes.Add(\"FAX: \");\r\n               m_TelecomPrefixes.Add(\"PAGER: \");\r\n               m_TelecomPrefixes.Add(\"EMAIL: \");\r\n               m_TelecomPrefixes.Add(\"WWW: \");\r\n            }\r\n         }\r\n\r\n         string valueAsString = null;\r\n         for (int ii = 0; ii < 5; ii++)\r\n         {\r\n            if (addressesValid[ii])\r\n            {\r\n               if (numValidEntries > 1)\r\n               {\r\n                  valueAsString = ConcatenateString(valueAsString, \", \", m_TelecomPrefixes + addresses[ii]);\r\n               }\r\n               else\r\n               {\r\n                  valueAsString = addresses[ii];\r\n                  break;\r\n               }\r\n            }\r\n         }\r\n\r\n         return valueAsString;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/IFCParameterSetByGroup.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   /// <summary>\r\n   /// A class to sort element parameters by name.\r\n   /// </summary>\r\n   /// <remarks>The name is obsolete, as it was previously also sorted by parameter group.</remarks>\r\n   public class IFCParameterSetByGroup\r\n   {\r\n      IDictionary<string, (Parameter, bool)> ParameterCache { get; set; } = null;\r\n\r\n      private static bool IsAllowedParameterToSet(BuiltInParameter parameterId)\r\n      {\r\n         // DATUM_TEXT is the Level name.  We don't want to overwrite that with a property,\r\n         // at least not by default.\r\n         return parameterId != BuiltInParameter.DATUM_TEXT &&\r\n            parameterId != BuiltInParameter.FUNCTION_PARAM;\r\n      }\r\n      \r\n      protected IFCParameterSetByGroup(Element element)\r\n      {\r\n         ParameterCache = new SortedDictionary<string, (Parameter, bool)>();\r\n\r\n         ParameterSet parameterSet = element.Parameters;\r\n         foreach (Parameter parameter in parameterSet)\r\n         {\r\n            Definition parameterDefinition = parameter.Definition;\r\n            if (parameterDefinition == null)\r\n               continue;\r\n\r\n            string parameterName = parameterDefinition.Name;\r\n\r\n            BuiltInParameter parameterId = ((InternalDefinition)parameter.Definition).BuiltInParameter;\r\n            bool allowedToSet = IsAllowedParameterToSet(parameterId);\r\n            ParameterCache[parameterName] = (parameter, allowedToSet);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a new IFCParameterSetByGroup, populated by the parameters of an element.\r\n      /// </summary>\r\n      /// <param name=\"parameterSet\">The </param>\r\n      /// <returns>The populated IFCParameterSetByGroup.</returns>\r\n      public static IFCParameterSetByGroup Create(Element element)\r\n      {\r\n         return new IFCParameterSetByGroup(element);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Tries to find a parameter corresponding to an IFC property in a property set, given a parameter group value.\r\n      /// If the found parameter can't be modified, the out value will be null, but the return value will be true.\r\n      /// </summary>\r\n      /// <param name=\"propertyName\">The name of the IFC property.</param>\r\n      /// <param name=\"parameter\">The Revit parameter, if found and allowed to be set.</param>\r\n      /// <returns>True if found, false otherwise.</returns>\r\n      /// <remarks>There are a list of parameters that are not allowed to be set by properties.  \r\n      /// This will weed out those parameters.</remarks>\r\n      public bool TryFindParameter(string parameterName, out Parameter parameter)\r\n      {\r\n         bool found = ParameterCache.TryGetValue(parameterName, out (Parameter, bool) parameterInfo);\r\n         if (found && parameterInfo.Item2 && !parameterInfo.Item1.IsReadOnly)\r\n            parameter = parameterInfo.Item1;\r\n         else\r\n            parameter = null;\r\n         return found;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/IFCSolidInfo.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   /// <summary>\r\n   /// A class that contains the GeometryObject, Id, and material information for created Revit geometry.\r\n   /// </summary>\r\n   /// <remarks>TODO: Rename to IFCGeometryObjectInfo, as it can contain Solids, Meshes, \r\n   /// Curves and Points.</remarks>\r\n   public class IFCSolidInfo\r\n   {\r\n      /// <summary>\r\n      /// The id of the geometry.\r\n      /// </summary>\r\n      public int Id { get; set; }\r\n\r\n      /// <summary>\r\n      /// The representation that created the geometry.\r\n      /// </summary>\r\n      public IFCRepresentationIdentifier RepresentationIdentifier { get; set; }\r\n\r\n      /// <summary>\r\n      /// The created geometry.\r\n      /// </summary>\r\n      public GeometryObject GeometryObject { get; set; }\r\n\r\n      protected IFCSolidInfo()\r\n      {\r\n         Id = -1;\r\n         RepresentationIdentifier = IFCRepresentationIdentifier.Other;\r\n         GeometryObject = null;\r\n      }\r\n\r\n      protected IFCSolidInfo(int id, GeometryObject geometryObject)\r\n      {\r\n         Id = id;\r\n         GeometryObject = geometryObject;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create an IFCSolidInfo from the created geometry.\r\n      /// </summary>\r\n      /// <param name=\"id\">The id associated with the geometry in the IFC file.</param>\r\n      /// <param name=\"geometryObject\">The created geometry.</param>\r\n      /// <returns>The IFCSolidInfo class.</returns>\r\n      /// <remarks>The RepresentationIdentifier is intended to be added in the AddGeometry function call.</remarks>\r\n      public static IFCSolidInfo Create(int id, GeometryObject geometryObject)\r\n      {\r\n         return new IFCSolidInfo(id, geometryObject);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/IFCUnitUtil.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Data;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides methods to scale IFC units.\r\n   /// </summary>\r\n   public class IFCUnitUtil\r\n   {\r\n      /// <summary>\r\n      /// Converts an angle value from the units from an IFC file to the corresponding Revit internal units.\r\n      /// </summary>\r\n      /// <param name=\"inValue\">The value to convert.</param>\r\n      /// <returns>The result value in Revit internal units.</returns>\r\n      static public double ScaleAngle(double inValue)\r\n      {\r\n         return ProjectScale(SpecTypeId.Angle, inValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts a length value from the units from an IFC file to the corresponding Revit internal units.\r\n      /// </summary>\r\n      /// <param name=\"inValue\">The value to convert.</param>\r\n      /// <returns>The result value in Revit internal units.</returns>\r\n      static public double ScaleLength(double inValue)\r\n      {\r\n         return ProjectScale(SpecTypeId.Length, inValue);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts a vector from the units from an IFC file to the corresponding Revit internal units.\r\n      /// </summary>\r\n      /// <param name=\"inValue\">The value to convert.</param>\r\n      /// <returns>The result value in Revit internal units.</returns>\r\n      /// <remarks>Note that the OffsetFactor is ignored.</remarks>\r\n      static public XYZ ScaleLength(XYZ inValue)\r\n      {\r\n         IFCUnit projectUnit = IFCImportFile.TheFile.IFCUnits.GetIFCProjectUnit(SpecTypeId.Length);\r\n         if (projectUnit != null)\r\n            return inValue * projectUnit.ScaleFactor;\r\n\r\n         return inValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts a value from the units from an IFC file to the corresponding Revit internal units.\r\n      /// </summary>\r\n      /// <param name=\"specTypeId\">Identifier of the spec for this value.</param>\r\n      /// <param name=\"inValue\">The value to convert.</param>\r\n      /// Some units we really always want in the standard document units.\r\n      /// For example, angles in Radians.\r\n      /// </param>\r\n      /// <returns>The result value in Revit internal units.</returns>\r\n      static private double ProjectScale(ForgeTypeId specTypeId, double inValue)\r\n      {\r\n         IFCUnit projectUnit = IFCImportFile.TheFile.IFCUnits.GetIFCProjectUnit(specTypeId);\r\n         if (projectUnit != null)\r\n            return inValue * projectUnit.ScaleFactor - projectUnit.OffsetFactor;\r\n\r\n         return inValue;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Converts a list of vectors from the units from an IFC file to the corresponding Revit internal units.\r\n      /// </summary>\r\n      /// <param name=\"specTypeId\">Identifier of the spec for this value.</param>\r\n      /// <param name=\"inValue\">The value to convert.</param>\r\n      /// <returns>The result value in Revit internal units.</returns>\r\n      /// <remarks>Note that the OffsetFactor is ignored.</remarks>\r\n      static public void ProjectScale(ForgeTypeId specTypeId, IList<XYZ> inValues)\r\n      {\r\n         if (inValues == null)\r\n            return;\r\n\r\n         IFCUnit projectUnit = IFCImportFile.TheFile.IFCUnits.GetIFCProjectUnit(specTypeId);\r\n         if (projectUnit == null)\r\n            return;\r\n\r\n         double factor = projectUnit.ScaleFactor;\r\n         if (MathUtil.IsAlmostEqual(factor, 1.0))\r\n            return;\r\n\r\n         int count = inValues.Count;\r\n         for (int ii = 0; ii < count; ii++)\r\n            inValues[ii] *= factor;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Convert a value into a formatted length string as displayed in Revit.\r\n      /// </summary>\r\n      /// <param name=\"value\">The value, in Revit internal units.</param>\r\n      /// <returns>The formatted string representation.</returns>\r\n      static public string FormatLengthAsString(double value)\r\n      {\r\n         FormatValueOptions formatValueOptions = new FormatValueOptions();\r\n         formatValueOptions.AppendUnitSymbol = true;\r\n         FormatOptions lengthFormatOptions = IFCImportFile.TheFile.Document.GetUnits().GetFormatOptions(SpecTypeId.Length);\r\n         lengthFormatOptions.Accuracy = 1e-8;\r\n         if (lengthFormatOptions.CanSuppressTrailingZeros())\r\n            lengthFormatOptions.SuppressTrailingZeros = true;\r\n         formatValueOptions.SetFormatOptions(lengthFormatOptions);\r\n         return UnitFormatUtils.Format(IFCImportFile.TheFile.Document.GetUnits(), SpecTypeId.Length, value, false, formatValueOptions);\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/ParametersToSet.cs",
    "content": "﻿using Autodesk.Revit.DB;\nusing Revit.IFC.Import.Data;\nusing Revit.IFC.Import.Enums;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Revit.IFC.Import.Utility\n{\n   public class ParameterSetter : IDisposable\n   {\n      public ParameterSetter()\n      {\n         ParametersToSet = new ParametersToSet();\n      }\n\n      public void Dispose()\n      {\n         if (ParametersToSet != null)\n         {\n            Parameter.SetMultiple(ParametersToSet.ParameterList);\n         }\n      }\n\n      public ParametersToSet ParametersToSet { get; private set; } = null;\n   }\n\n   /// <summary>\n   /// A list of parameters and values, intended to be set at once for performance reasons.\n   /// </summary>\n   public class ParametersToSet\n   {\n      /// <summary>\n      /// The default constructor.\n      /// </summary>\n      public ParametersToSet() { }\n\n      /// <summary>\n      /// Clears the list.\n      /// </summary>\n      public void Clear()\n      {\n         ParameterList.Clear();\n      }\n\n      /// <summary>\n      /// Adds an integer parameter.\n      /// </summary>\n      /// <param name=\"parameter\">The parameter.</param>\n      /// <param name=\"value\">The integer value.</param>\n      public void AddIntegerParameter(Parameter parameter, int value)\n      {\n         if (parameter == null)\n            return;\n\n         ParameterValue intValue = new IntegerParameterValue(value);\n         ParameterList.Add(Tuple.Create(parameter, intValue));\n      }\n\n      /// <summary>\n      /// Adds a double parameter.\n      /// </summary>\n      /// <param name=\"parameter\">The parameter.</param>\n      /// <param name=\"value\">The double value.</param>\n      public void AddDoubleParameter(Parameter parameter, double value)\n      {\n         if (parameter == null)\n            return;\n\n         ParameterValue stringValue = new DoubleParameterValue(value);\n         ParameterList.Add(Tuple.Create(parameter, stringValue));\n      }\n\n      private Parameter AddParameterBase(Document doc, Element element, Category category, string parameterName, int parameterSetId, ForgeTypeId specId)\n      {\n         bool isElementType = (element is ElementType);\n         Definitions definitions = isElementType ? Importer.TheCache.TypeGroupDefinitions : Importer.TheCache.InstanceGroupDefinitions;\n\n         bool newlyCreated = false;\n         Definition definition = definitions.get_Item(parameterName);\n         if (definition == null)\n         {\n            ExternalDefinitionCreationOptions option = new ExternalDefinitionCreationOptions(parameterName, specId);\n            definition = definitions.Create(option);\n            if (definition == null)\n            {\n               Importer.TheLog.LogError(parameterSetId, \"Couldn't create parameter: \" + parameterName, false);\n               return null;\n            }\n            newlyCreated = true;\n         }\n\n         Guid guid = (definition as ExternalDefinition).GUID;\n\n         Parameter parameter = null;\n         ElementBinding binding = null;\n         bool reinsert = false;\n\n         if (!newlyCreated)\n         {\n            BindingMap bindingMap = Importer.TheCache.GetParameterBinding(doc);\n            binding = bindingMap.get_Item(definition) as ElementBinding;\n            reinsert = (binding != null);\n         }\n\n         if (binding == null)\n         {\n            if (isElementType)\n               binding = new TypeBinding();\n            else\n               binding = new InstanceBinding();\n         }\n\n         // The binding can fail if we haven't identified a \"bad\" category above.  Use try/catch as a safety net.\n         try\n         {\n            if (!reinsert || !binding.Categories.Contains(category))\n            {\n               binding.Categories.Insert(category);\n\n               BindingMap bindingMap = Importer.TheCache.GetParameterBinding(doc);\n               if (reinsert)\n                  bindingMap.ReInsert(definition, binding, GroupTypeId.Ifc);\n               else\n                  bindingMap.Insert(definition, binding, GroupTypeId.Ifc);\n            }\n\n            parameter = element.get_Parameter(guid);\n         }\n         catch\n         {\n         }\n\n         if (parameter == null)\n            Importer.TheLog.LogError(parameterSetId, \"Couldn't create parameter: \" + parameterName, false);\n\n         return parameter;\n      }\n\n      /// <summary>\n      /// Add a string parameter to an element.\n      /// </summary>\n      /// <param name=\"doc\">The document.</param>\n      /// <param name=\"element\">The element.</param>\n      /// <param name=\"category\">The category of the element.</param>\n      /// <param name=\"objDef\">The IFCObjectDefinition that created the element.</param>\n      /// <param name=\"name\">The enum corresponding to the parameter name.</param>\n      /// <param name=\"parameterValue\">The parameter value.</param>\n      /// <param name=\"parameterSetId\">The id of the containing parameter set, for reporting errors.</param>\n      /// <returns>True if the parameter was successfully added, false otherwise.</returns>\n      public bool AddStringParameter(Document doc, Element element, Category category, IFCObjectDefinition objDef,\n         IFCSharedParameters name, string parameterValue, int parameterSetId)\n      {\n         if (doc == null || element == null || category == null || objDef == null || parameterValue == null)\n            return false;\n\n         string parameterName = objDef.GetSharedParameterName(name, element is ElementType);\n\n         bool? processedParameter = Importer.TheProcessor.ProcessParameter(objDef.Id, parameterSetId, parameterName, parameterValue);\n         if (processedParameter.HasValue)\n            return processedParameter.Value;\n\n         Parameter parameter = AddParameterBase(doc, element, category, parameterName, parameterSetId, SpecTypeId.String.Text);\n         if (parameter == null)\n            return false;\n\n         AddStringParameter(parameter, parameterValue);\n         return true;\n      }\n\n      /// <summary>\n      /// Add a string parameter to an element.\n      /// </summary>\n      /// <param name=\"doc\">The document.</param>\n      /// <param name=\"element\">The element.</param>\n      /// <param name=\"category\">The category of the element.</param>\n      /// <param name=\"parameterName\">The parameter name.</param>\n      /// <param name=\"parameterValue\">The parameter value.</param>\n      /// <param name=\"parameterSetId\">The id of the containing parameter set, for reporting errors.</param>\n      /// <returns>True if the parameter was successfully added, false otherwise.</returns>\n      public bool AddStringParameter(Document doc, Element element, Category category, IFCObjectDefinition objDef,\n         string parameterName, string parameterValue, int parameterSetId)\n      {\n         if (doc == null || element == null || category == null)\n            return false;\n\n         bool? processedParameter = Importer.TheProcessor.ProcessParameter(objDef.Id, parameterSetId, parameterName, parameterValue);\n         if (processedParameter.HasValue)\n            return processedParameter.Value;\n\n         Parameter parameter = AddParameterBase(doc, element, category, parameterName, parameterSetId, SpecTypeId.String.Text);\n         if (parameter == null)\n            return false;\n\n         AddStringParameter(parameter, parameterValue);\n         return true;\n      }\n\n      /// <summary>\n      /// Adds a string parameter.\n      /// </summary>\n      /// <param name=\"parameter\">The parameter.</param>\n      /// <param name=\"value\">The string value.</param>\n      public void AddStringParameter(Parameter parameter, string value)\n      {\n         if (parameter == null)\n            return;\n\n         ParameterValue stringValue = new StringParameterValue(value == null ? string.Empty : value);\n         ParameterList.Add(Tuple.Create(parameter, stringValue));\n      }\n\n      /// <summary>\n      /// Adds a parameter with the name of an element represented by an ElementId to an element.\n      /// </summary>\n      /// <param name=\"doc\">The document.</param>\n      /// <param name=\"element\">The element.</param>\n      /// <param name=\"category\">The category of the element.</param>\n      /// <param name=\"parameterName\">The parameter name.</param>\n      /// <param name=\"parameterValue\">The parameter value.</param>\n      /// <param name=\"parameterSetId\">The id of the containing parameter set, for reporting errors.</param>\n      /// <returns>True if the parameter was successfully added, false otherwise.</returns>\n      public bool AddParameterElementId(Document doc, Element element, Category category, IFCObjectDefinition objDef,\n         string parameterName, ElementId parameterValue, int parameterSetId)\n      {\n         if (doc == null || element == null || category == null)\n            return false;\n\n         Element parameterElement = doc.GetElement(parameterValue);\n         if (parameterElement == null)\n            return false;\n\n         string name = parameterElement.Name;\n         if (string.IsNullOrEmpty(name))\n            return false;\n\n         bool? processedParameter = Importer.TheProcessor.ProcessParameter(objDef.Id, parameterSetId, parameterName, parameterValue);\n         if (processedParameter.HasValue)\n            return processedParameter.Value;\n\n         Parameter parameter = AddParameterBase(doc, element, category, parameterName, parameterSetId, SpecTypeId.String.Text);\n         if (parameter == null)\n            return false;\n\n         AddStringParameter(parameter, name);\n         return true;\n      }\n\n      /// <summary>\n      /// Add a Boolean parameter to an element.\n      /// </summary>\n      /// <param name=\"doc\">The document.</param>\n      /// <param name=\"element\">The element.</param>\n      /// <param name=\"category\">The category of the element.</param>\n      /// <param name=\"parameterName\">The parameter name.</param>\n      /// <param name=\"parameterValue\">The parameter value.</param>\n      /// <param name=\"parameterSetId\">The id of the containing parameter set, for reporting errors.</param>\n      /// <returns>True if the parameter was successfully added, false otherwise.</returns>\n      public bool AddParameterBoolean(Document doc, Element element, Category category,\n         IFCObjectDefinition objDef, string parameterName, bool parameterValue, int parameterSetId)\n      {\n         if (doc == null || element == null || category == null)\n            return false;\n\n         bool? processedParameter = Importer.TheProcessor.ProcessParameter(objDef.Id, parameterSetId, parameterName, parameterValue);\n         if (processedParameter.HasValue)\n            return processedParameter.Value;\n\n         Parameter parameter = AddParameterBase(doc, element, category, parameterName, parameterSetId, SpecTypeId.Boolean.YesNo);\n         if (parameter == null)\n            return false;\n\n         AddIntegerParameter(parameter, parameterValue ? 1 : 0);\n         return true;\n      }\n\n      /// <summary>\n      /// Add an int parameter to an element.\n      /// </summary>\n      /// <param name=\"doc\">The document.</param>\n      /// <param name=\"element\">The element.</param>\n      /// <param name=\"category\">The category of the element.</param>\n      /// <param name=\"parameterName\">The parameter name.</param>\n      /// <param name=\"parameterValue\">The parameter value.</param>\n      /// <param name=\"parameterSetId\">The id of the containing parameter set, for reporting errors.</param>\n      /// <returns>True if the parameter was successfully added, false otherwise.</returns>\n      public bool AddParameterInt(Document doc, Element element, Category category, IFCObjectDefinition objDef,\n         string parameterName, int parameterValue, int parameterSetId)\n      {\n         if (doc == null || element == null || category == null)\n            return false;\n\n         bool? processedParameter = Importer.TheProcessor.ProcessParameter(objDef.Id, parameterSetId, parameterName, parameterValue);\n         if (processedParameter.HasValue)\n            return processedParameter.Value;\n\n         Parameter parameter = AddParameterBase(doc, element, category, parameterName, parameterSetId, SpecTypeId.Int.Integer);\n         if (parameter == null)\n            return false;\n\n         AddIntegerParameter(parameter, parameterValue);\n         return true;\n      }\n\n      private static ForgeTypeId CalculateUnitsTypeId(ForgeTypeId unitsTypeId,\n         ForgeTypeId specTypeId)\n      {\n         if (unitsTypeId != null || Importer.TheProcessor.ScaleValues)\n            return unitsTypeId;\n\n         // We can look up the units when the values are not scaled.\n         var units = IFCImportFile.TheFile.IFCUnits.GetIFCProjectUnit(specTypeId);\n         return (units != null) ? units.Unit : UnitTypeId.General;\n      }\n\n\n      /// <summary>\n      /// Add a double parameter to an element.\n      /// </summary>\n      /// <param name=\"doc\">The document.</param>\n      /// <param name=\"element\">The element.</param>\n      /// <param name=\"category\">The category of the element.</param>\n      /// <param name=\"parameterName\">The parameter name.</param>\n      /// <param name=\"specTypeId\">Identifier of the parameter spec (e.g. length)</param>\n      /// <param name=\"unitsTypeId\">Identifier of the unscaled parameter units (e.g. mm)</param>\n      /// <param name=\"parameterValue\">The parameter value, scaled into document units.</param>\n      /// <param name=\"parameterSetId\">The id of the containing parameter set, for reporting errors.</param>\n      /// <returns>True if the parameter was successfully added, false otherwise.</returns>\n      public bool AddParameterDouble(Document doc, Element element, Category category,\n         IFCObjectDefinition objDef, string parameterName, ForgeTypeId specTypeId,\n         ForgeTypeId unitsTypeId, double parameterValue, int parameterSetId)\n      {\n         if (doc == null || element == null || category == null)\n            return false;\n\n         unitsTypeId = CalculateUnitsTypeId(unitsTypeId, specTypeId);\n         bool? processedParameter = Importer.TheProcessor.ProcessParameter(objDef.Id,\n            specTypeId, unitsTypeId, parameterSetId, parameterName, parameterValue);\n         if (processedParameter.HasValue)\n            return processedParameter.Value;\n\n         Parameter parameter = AddParameterBase(doc, element, category, parameterName, parameterSetId, specTypeId);\n         if (parameter == null)\n            return false;\n\n         AddDoubleParameter(parameter, parameterValue);\n         return true;\n      }\n\n      /// <summary>\n      /// Add a multistring parameter to an element.\n      /// </summary>\n      /// <param name=\"doc\">The document.</param>\n      /// <param name=\"element\">The element.</param>\n      /// <param name=\"category\">The category of the element.</param>\n      /// <param name=\"parameterName\">The parameter name.</param>\n      /// <param name=\"parameterValue\">The parameter value.</param>\n      /// <param name=\"parameterSetId\">The id of the containing parameter set, for reporting errors.</param>\n      /// <returns>True if the parameter was successfully added, false otherwise.</returns>\n      public bool AddParameterMultilineString(Document doc, Element element, Category category,\n         IFCObjectDefinition objDef, string parameterName, string parameterValue, int parameterSetId)\n      {\n         if (doc == null || element == null || category == null)\n            return false;\n\n         bool? processedParameter = Importer.TheProcessor.ProcessParameter(objDef.Id, parameterSetId, parameterName, parameterValue);\n         if (processedParameter.HasValue)\n            return processedParameter.Value;\n\n         Parameter parameter = AddParameterBase(doc, element, category, parameterName, parameterSetId, SpecTypeId.String.MultilineText);\n         if (parameter == null)\n            return false;\n\n         AddStringParameter(parameter, parameterValue);\n         return true;\n      }\n\n      public IList<Tuple<Parameter, ParameterValue>> ParameterList { get; private set; } =\n         new List<Tuple<Parameter, ParameterValue>>();\n   };\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/ProcessIFCRelation.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB.IFC;\r\nusing Revit.IFC.Import.Data;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Common.Enums;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   /// <summary>\r\n   /// Processes IfcRelation entity and its sub-entities, to be stored in another class.\r\n   /// </summary>\r\n   class ProcessIFCRelation\r\n   {\r\n      static private void ValidateIFCRelAssigns(IFCAnyHandle ifcRelAssigns)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcRelAssigns))\r\n            throw new ArgumentNullException(\"ifcRelAssigns\");\r\n\r\n         if (!IFCAnyHandleUtil.IsValidSubTypeOf(ifcRelAssigns, IFCEntityType.IfcRelAssigns))\r\n            throw new ArgumentException(\"ifcRelAssigns\");\r\n      }\r\n\r\n      static private void ValidateIFCRelAssignsOrAggregates(IFCAnyHandle ifcRelAssignsOrAggregates)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcRelAssignsOrAggregates))\r\n            throw new ArgumentNullException(\"ifcRelAssignsOrAggregates\");\r\n\r\n         if (!IFCAnyHandleUtil.IsValidSubTypeOf(ifcRelAssignsOrAggregates, IFCEntityType.IfcRelAssigns) &&\r\n             (!IFCAnyHandleUtil.IsValidSubTypeOf(ifcRelAssignsOrAggregates, IFCEntityType.IfcRelAggregates)))\r\n            throw new ArgumentException(\"ifcRelAssignsOrAggregates\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds all related objects in IfcRelAssigns.\r\n      /// </summary>\r\n      /// <param name=\"relatedTo\">The entity receiving the collection of objects and the IFCObjectDefinition will record the inverse relationship</param>\r\n      /// <param name=\"ifcRelAssignsOrAggregates\">The IfcRelAssigns handle.</param>\r\n      /// <returns>The related objects, or null if not found.</returns>\r\n      static public ICollection<IFCObjectDefinition> ProcessRelatedObjects(IFCObjectDefinition relatedTo, IFCAnyHandle ifcRelAssignsOrAggregates)\r\n      {\r\n         try\r\n         {\r\n            ValidateIFCRelAssignsOrAggregates(ifcRelAssignsOrAggregates);\r\n         }\r\n         catch\r\n         {\r\n            //LOG: ERROR: Couldn't find valid IfcRelAssignsToGroup for IfcGroup.\r\n            return null;\r\n         }\r\n\r\n         HashSet<IFCAnyHandle> relatedObjects = IFCAnyHandleUtil.GetAggregateInstanceAttribute\r\n             <HashSet<IFCAnyHandle>>(ifcRelAssignsOrAggregates, \"RelatedObjects\");\r\n\r\n         // Receiving apps need to decide whether to post an error or not.\r\n         if (relatedObjects == null)\r\n            return null;\r\n\r\n         ICollection<IFCObjectDefinition> relatedObjectSet = new HashSet<IFCObjectDefinition>();\r\n\r\n         // If relatedTo is an IFCGroup then it will be added to the list of group that the relatedObject is assigned to.\r\n         // else it will become the relatedObject's composing object\r\n         bool relatedIsGroup = relatedTo is IFCGroup;\r\n\r\n         foreach (IFCAnyHandle relatedObject in relatedObjects)\r\n         {\r\n            if (IFCAnyHandleUtil.IsNullOrHasNoValue(relatedObject))\r\n            {\r\n               Importer.TheLog.LogError(ifcRelAssignsOrAggregates.Id, \"Invalid relation found, ignoring.\", false);\r\n               continue;\r\n            }\r\n\r\n            if (relatedObject.Id == relatedTo.Id)\r\n            {\r\n               Importer.TheLog.LogError(ifcRelAssignsOrAggregates.Id, \"An objected is related to itself, ignoring.\", false);\r\n               continue;\r\n            }\r\n\r\n            IFCObjectDefinition objectDefinition = IFCObjectDefinition.ProcessIFCObjectDefinition(relatedObject);\r\n            if (objectDefinition != null)\r\n            {\r\n               if (relatedIsGroup)\r\n                  objectDefinition.AssignmentGroups.Add(relatedTo as IFCGroup);\r\n               else\r\n                  objectDefinition.Decomposes = relatedTo;\r\n               relatedObjectSet.Add(objectDefinition);\r\n            }\r\n         }\r\n\r\n         return relatedObjectSet;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Finds the relating group in IfcRelAssignsToGroup.\r\n      /// </summary>\r\n      /// <param name=\"ifcRelAssignsToGroup\">The IfcRelAssignsToGroup handle.</param>\r\n      /// <returns>The related group, or null if not found.</returns>\r\n      static public IFCGroup ProcessRelatingGroup(IFCAnyHandle ifcRelAssignsToGroup)\r\n      {\r\n         if (!IFCAnyHandleUtil.IsSubTypeOf(ifcRelAssignsToGroup, IFCEntityType.IfcRelAssignsToGroup))\r\n         {\r\n            //LOG: ERROR: Couldn't find valid IfcRelAssignsToGroup.\r\n            return null;\r\n         }\r\n\r\n         IFCAnyHandle relatingGroup = IFCAnyHandleUtil.GetValidInstanceAttribute(ifcRelAssignsToGroup, \"RelatingGroup\");\r\n\r\n         return IFCGroup.ProcessIFCGroup(relatingGroup);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the related object type in IfcRelAssigns.\r\n      /// </summary>\r\n      /// <param name=\"ifcRelAssigns\">The IfcRelAssigns handle.</param>\r\n      /// <returns>The related object type, or null if not defined.</returns>\r\n      static public string ProcessRelatedObjectType(IFCAnyHandle ifcRelAssigns)\r\n      {\r\n         try\r\n         {\r\n            ValidateIFCRelAssigns(ifcRelAssigns);\r\n         }\r\n         catch\r\n         {\r\n            //LOG: ERROR: Couldn't find valid IfcRelAssignsToGroup for IfcGroup.\r\n            return null;\r\n         }\r\n\r\n         return IFCAnyHandleUtil.GetStringAttribute(ifcRelAssigns, \"RelatedObjectsType\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the relating IFCObjectDefinition associated via an IfcRelNests handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcRelNests\">The IfcRelNests handle.</param>\r\n      /// <returns>The IFCObjectDefinition class corresponding to the IFCObjectDefinition handle, if any.</returns>\r\n      static public IFCObjectDefinition ProcessRelatingObject(IFCAnyHandle ifcRelNests)\r\n      {\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcRelNests))\r\n            return null;\r\n\r\n         IFCAnyHandle ifcRelatedElement = IFCAnyHandleUtil.GetInstanceAttribute(ifcRelNests, \"RelatingObject\");\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcRelatedElement))\r\n            return null;\r\n\r\n         IFCObjectDefinition relatedElement = IFCObjectDefinition.ProcessIFCObjectDefinition(ifcRelatedElement);\r\n         return relatedElement;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the IFCElement associated via an IfcRelConnectsPortToElement handle to an IFCPort.\r\n      /// </summary>\r\n      /// <param name=\"ifcRelConnectsPortToElement\">The IfcRelConnectsPortToElement handle.</param>\r\n      /// <returns>The IFCElement class corresponding to the IfcElement handle, if any.</returns>\r\n      static public IFCElement ProcessRelatedElement(IFCAnyHandle ifcRelConnectsPortToElement)\r\n      {\r\n         // Receiving apps need to decide whether to post an error or not.\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcRelConnectsPortToElement))\r\n            return null;\r\n\r\n         IFCAnyHandle ifcRelatedElement = IFCAnyHandleUtil.GetInstanceAttribute(ifcRelConnectsPortToElement, \"RelatedElement\");\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcRelatedElement))\r\n            return null;\r\n\r\n         IFCElement relatedElement = IFCElement.ProcessIFCElement(ifcRelatedElement);\r\n         return relatedElement;\r\n      }\r\n\r\n      static private IFCPort ProcessOtherPort(IFCAnyHandle ifcRelConnectsPorts, string fieldName)\r\n      {\r\n         // Receiving apps need to decide whether to post an error or not.\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcRelConnectsPorts))\r\n            return null;\r\n\r\n         IFCAnyHandle ifcOtherPort = IFCAnyHandleUtil.GetInstanceAttribute(ifcRelConnectsPorts, fieldName);\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcOtherPort))\r\n            return null;\r\n\r\n         IFCPort otherPort = IFCPort.ProcessIFCPort(ifcOtherPort);\r\n         return otherPort;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the related IFCPort associated with a relating IFCPort via an IfcRelConnectsPorts relationship handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcRelConnectsPorts\">The IfcRelConnectsPorts handle, generally processed from the RelatingPort.</param>\r\n      /// <returns>The IFCPort class corresponding to the IfcPort handle associated with the RelatedPort, if any.</returns>\r\n      static public IFCPort ProcessRelatedPort(IFCAnyHandle ifcRelConnectsPorts)\r\n      {\r\n         return ProcessOtherPort(ifcRelConnectsPorts, \"RelatedPort\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Gets the relating IFCPort associated with a related IFCPort via an IfcRelConnectsPorts relationship handle.\r\n      /// </summary>\r\n      /// <param name=\"ifcRelConnectsPorts\">The IfcRelConnectsPorts handle, generally processed from the RelatedPort.</param>\r\n      /// <returns>The IFCPort class corresponding to the IfcPort handle associated with the RelatingPort, if any.</returns>\r\n      static public IFCPort ProcessRelatingPort(IFCAnyHandle ifcRelConnectsPorts)\r\n      {\r\n         // Receiving apps need to decide whether to post an error or not.\r\n         return ProcessOtherPort(ifcRelConnectsPorts, \"RelatingPort\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Processes IfcRelDefinesByProperties.\r\n      /// </summary>\r\n      /// <param name=\"ifcRelDefinesByProperties\">The IfcRelDefinesByProperties handle.</param>\r\n      /// <param name=\"propertySets\">The map of property sets that will be modified by this function based on the IfcRelDefinesByProperties handle.</param>\r\n      /// <param name=\"hostIfcObjectId\">The STEP Id of the IFC entity which invoked this method.</param>\r\n      static public void ProcessIFCRelDefinesByProperties(IFCAnyHandle ifcRelDefinesByProperties, IDictionary<string, IFCPropertySetDefinition> propertySets, int hostIfcObjectId)\r\n      {\r\n         IFCAnyHandle propertySetDefinition = IFCAnyHandleUtil.GetInstanceAttribute(ifcRelDefinesByProperties, \"RelatingPropertyDefinition\");\r\n\r\n         if (IFCAnyHandleUtil.IsNullOrHasNoValue(propertySetDefinition))\r\n         {\r\n            Importer.TheLog.LogNullError(IFCEntityType.IfcPropertySetDefinition);\r\n            return;\r\n         }\r\n\r\n         IFCPropertySetDefinition ifcPropertySet = IFCPropertySetDefinition.ProcessIFCPropertySetDefinition(propertySetDefinition, hostIfcObjectId);\r\n\r\n         if (ifcPropertySet != null)\r\n         {\r\n            int propertySetNumber = 1;\r\n            string propertySetName = ifcPropertySet.Name;\r\n\r\n            while (true)\r\n            {\r\n               string name = (propertySetNumber == 1) ? propertySetName : propertySetName + \" \" + propertySetNumber.ToString();\r\n               if (propertySets.ContainsKey(name))\r\n                  propertySetNumber++;\r\n               else\r\n               {\r\n                  propertySets[name] = ifcPropertySet;\r\n                  break;\r\n               }\r\n            }\r\n         }\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import/Utility/TessellatedShapeBuilderScope.cs",
    "content": "﻿//\r\n// Revit IFC Import library: this library works with Autodesk(R) Revit(R) to import IFC files.\r\n// Copyright (C) 2013  Autodesk, Inc.\r\n// \r\n// This library is free software; you can redistribute it and/or\r\n// modify it under the terms of the GNU Lesser General Public\r\n// License as published by the Free Software Foundation; either\r\n// version 2.1 of the License, or (at your option) any later version.\r\n//\r\n// This library is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n// Lesser General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Lesser General Public\r\n// License along with this library; if not, write to the Free Software\r\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r\n//\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Revit.IFC.Common.Utility;\r\nusing Revit.IFC.Import.Data;\r\n\r\nnamespace Revit.IFC.Import.Utility\r\n{\r\n   /// <summary>\r\n   /// Provides methods to manage creation of DirectShape elements using TessellatedShapeBuilder\r\n   /// </summary>\r\n   public class TessellatedShapeBuilderScope : BuilderScope\r\n   {\r\n      /// <summary>\r\n      /// A class that contains a grouping of arbitary XYZ values that are all \"distinct\",\r\n      /// based on a tolerance.\r\n      /// </summary>\r\n      /// <remarks>Note: We cannot assume that we won't have duplicate entries.\r\n      /// For example, assume tolerance=1.0, and we have values (10.2,10.2,10.2) and \r\n      /// (11.5,11.5,11.5) in the set.\r\n      /// If we look for (11.0, 11.0, 11.0) then either of the 2 values above would match, \r\n      /// even though they are distinct values from one another.  This means that as the set\r\n      /// grows, a second duplicate (11.0, 11.0, 11.0) entry could take a different path\r\n      /// and not find the original match.  Aside from performance issues, this is harmless\r\n      /// for current usage, but should be taken into account if the use is expanded.</remarks>\r\n      private class IFCFuzzyXYZSet\r\n      {\r\n         /// <summary>\r\n         /// The constructor. \r\n         /// </summary>\r\n         /// <param name=\"tol\">The tolerance at which 2 XYZ values are considered equal.</param>\r\n         public IFCFuzzyXYZSet(double tol)\r\n         {\r\n            Tolerance = tol;\r\n            VertexSet = new SortedSet<XYZ>(new IFCXYZFuzzyComparer(tol));\r\n         }\r\n\r\n         /// <summary>\r\n         /// Clear the existing set. \r\n         /// </summary>\r\n         public void Clear()\r\n         {\r\n            if (VertexSet != null)\r\n               VertexSet.Clear();\r\n         }\r\n\r\n         /// <summary>\r\n         /// Looks for a possibly adjusted vertex value in the current set.\r\n         /// </summary>\r\n         /// <param name=\"vertex\">The original vertex value.</param>\r\n         /// <returns>The possibly adjusted vertex value.</returns>\r\n         public XYZ FindOrAdd(XYZ vertex)\r\n         {\r\n            XYZ adjustedVertex = null;\r\n            if (!VertexSet.TryGetValue(vertex, out adjustedVertex))\r\n            {\r\n               adjustedVertex = vertex;\r\n               VertexSet.Add(adjustedVertex);\r\n            }\r\n            return adjustedVertex;\r\n         }\r\n\r\n         /// <summary>\r\n         /// Lowers the tolerance used for vertex matching.\r\n         /// </summary>\r\n         /// <param name=\"tol\">The new tolerance, that must be lower than the old one.</param>\r\n         public void ResetTolerance(double tol)\r\n         {\r\n            if (tol > Tolerance)\r\n               throw new ArgumentException(\"The tolerance can only be reset to be stricter.\");\r\n            \r\n            Tolerance = tol;\r\n            var newVertexSet = new SortedSet<XYZ>(VertexSet, new IFCXYZFuzzyComparer(tol));\r\n            VertexSet = newVertexSet;\r\n         }\r\n\r\n         private double Tolerance { get; set; } = 0.0;\r\n\r\n         private SortedSet<XYZ> VertexSet { get; set; } = null;\r\n      }\r\n\r\n      // stores all faces from the face set which will be built\r\n      private TessellatedShapeBuilder TessellatedShapeBuilder { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// A set of \"disjoint\" XYZ.  This allows us to \"look up\" an XYZ value and get \r\n      /// the fuzzy equivalent.\r\n      /// </summary>\r\n      private IFCFuzzyXYZSet TessellatedFaceVertices { get; set; } = null;\r\n\r\n      // Stores the current face being input. After the face will be\r\n      // completely set, it will be inserted into the resident shape builder.\r\n      private IList<IList<XYZ>> TessellatedFaceBoundary { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// Stores the one outer boundary for a facet that has issues that may be\r\n      /// healed by splitting into triangles.  This is currently limited to one\r\n      /// quadrilateral.\r\n      /// </summary>\r\n      public IList<XYZ> DelayedFaceBoundary { get; set; } = null;\r\n\r\n      /// <summary>\r\n      /// If this is true, then it is possible to triangulate bad boundary data later. \r\n      /// </summary>\r\n      public bool CanProcessDelayedFaceBoundary { get; set; } = false;\r\n\r\n\r\n      /// <summary>\r\n      /// The number of successfully created faces so far, not including extra faces from\r\n      /// potential triangulation.\r\n      /// </summary>\r\n      public int CreatedFacesCount { get; protected set; } = 0;\r\n\r\n      /// <summary>\r\n      /// The number of extra faces created, generally as a result of triangulation.\r\n      /// </summary>\r\n      public int ExtraCreatedFacesCount { get; protected set; } = 0;\r\n      \r\n      // The target geometry being created.  This may affect tolerances used to include or exclude vertices that are very \r\n      // close to one another, or potentially degenerate faces.\r\n      public TessellatedShapeBuilderTarget TargetGeometry { get; private set; } = TessellatedShapeBuilderTarget.AnyGeometry;\r\n\r\n\r\n      // The fallback geometry that will be created if we can't make the target geometry.\r\n      public TessellatedShapeBuilderFallback FallbackGeometry { get; private set; } = TessellatedShapeBuilderFallback.Mesh;\r\n \r\n      public TessellatedShapeBuilderScope(IFCImportShapeEditScope container)\r\n          : base(container)\r\n      {\r\n         IFCImportShapeEditScope.BuildPreferenceType BuildPreference = container.BuildPreference;\r\n         if (BuildPreference == IFCImportShapeEditScope.BuildPreferenceType.ForceSolid)\r\n         {\r\n            SetTargetAndFallbackGeometry(TessellatedShapeBuilderTarget.Solid, TessellatedShapeBuilderFallback.Abort);\r\n         }\r\n         else if (BuildPreference == IFCImportShapeEditScope.BuildPreferenceType.AnyMesh)\r\n         {\r\n            SetTargetAndFallbackGeometry(TessellatedShapeBuilderTarget.Mesh, TessellatedShapeBuilderFallback.Salvage);\r\n         }\r\n         else if (BuildPreference == IFCImportShapeEditScope.BuildPreferenceType.AnyGeometry)\r\n         {\r\n            SetTargetAndFallbackGeometry(TessellatedShapeBuilderTarget.AnyGeometry, TessellatedShapeBuilderFallback.Mesh);\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Reset the number of created faces to 0.\r\n      /// </summary>\r\n      public void ResetCreatedFacesCount()\r\n      {\r\n         CreatedFacesCount = 0;\r\n         ExtraCreatedFacesCount = 0;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Set the target and fallback geometry for this scope.\r\n      /// </summary>\r\n      /// <param name=\"targetGeometry\">The target geometry.</param>\r\n      /// <param name=\"fallbackGeometry\">The fallback geometry.</param>\r\n      /// <remarks>This should not be directly called, but instead set with the IFCTargetSetter and the \"using\" scope.</remarks>\r\n      public void SetTargetAndFallbackGeometry(TessellatedShapeBuilderTarget targetGeometry, TessellatedShapeBuilderFallback fallbackGeometry)\r\n      {\r\n         TargetGeometry = targetGeometry;\r\n         FallbackGeometry = fallbackGeometry;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Start collecting faces to create a BRep solid.\r\n      /// </summary>\r\n      public override void StartCollectingFaceSet(BRepType brepType = BRepType.OpenShell)\r\n      {\r\n         if (TessellatedShapeBuilder == null)\r\n            TessellatedShapeBuilder = new TessellatedShapeBuilder();\r\n\r\n         TessellatedShapeBuilder.OpenConnectedFaceSet(false);\r\n         ResetCreatedFacesCount();\r\n\r\n         if (TessellatedFaceVertices != null)\r\n            TessellatedFaceVertices.Clear();\r\n\r\n         if (TessellatedFaceBoundary != null)\r\n            TessellatedFaceBoundary.Clear();\r\n\r\n         FaceMaterialId = ElementId.InvalidElementId;\r\n      }\r\n\r\n      private double GetVertexTolerance()\r\n      {\r\n         // Note that this tolerance is slightly larger than required, as it is a cube instead of a\r\n         // sphere of equivalence.  In the case of AnyGeometry, we resort to the Solid tolerance as we are\r\n         // generally trying to create Solids over Meshes.\r\n         return (TargetGeometry == TessellatedShapeBuilderTarget.Mesh) ?\r\n            MathUtil.Eps() : IFCImportFile.TheFile.ShortCurveTolerance;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Stop collecting faces to create a BRep solid.\r\n      /// </summary>\r\n      public void StopCollectingFaceSet()\r\n      {\r\n         if (TessellatedShapeBuilder == null)\r\n            throw new InvalidOperationException(\"StartCollectingFaceSet has not been called.\");\r\n\r\n         TessellatedShapeBuilder.CloseConnectedFaceSet();\r\n\r\n         if (TessellatedFaceBoundary != null)\r\n            TessellatedFaceBoundary.Clear();\r\n\r\n         if (TessellatedFaceVertices != null)\r\n            TessellatedFaceVertices.Clear();\r\n\r\n         FaceMaterialId = ElementId.InvalidElementId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Start collecting edges for a face to create a BRep solid.\r\n      /// </summary>\r\n      /// <param name=\"materialId\">The material id of the face.</param>\r\n      /// <param name=\"canTriangulate\">Whether we can delay processing bad boundary data.</param>\r\n      public void StartCollectingFace(ElementId materialId, bool canTriangulate)\r\n      {\r\n         if (TessellatedShapeBuilder == null)\r\n            throw new InvalidOperationException(\"StartCollectingFaceSet has not been called.\");\r\n\r\n         if (TessellatedFaceBoundary == null)\r\n            TessellatedFaceBoundary = new List<IList<XYZ>>();\r\n         else\r\n            TessellatedFaceBoundary.Clear();\r\n\r\n         if (TessellatedFaceVertices == null)\r\n         {\r\n            TessellatedFaceVertices = new IFCFuzzyXYZSet(GetVertexTolerance());\r\n         }\r\n\r\n         DelayedFaceBoundary = null;\r\n         CanProcessDelayedFaceBoundary = canTriangulate;\r\n         FaceMaterialId = materialId;\r\n      }\r\n\r\n      private void AddFaceToTessellatedShapeBuilder(TessellatedFace theFace, bool extraFace)\r\n      {\r\n         TessellatedShapeBuilder.AddFace(theFace);\r\n         TessellatedFaceBoundary.Clear();\r\n         FaceMaterialId = ElementId.InvalidElementId;\r\n         if (extraFace)\r\n            ExtraCreatedFacesCount++;\r\n         else\r\n            CreatedFacesCount++;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Stop collecting edges for a face to create a BRep solid.\r\n      /// </summary>\r\n      /// <param name=\"addFace\">If true, adds the face, otherwise aborts.</param>\r\n      public void StopCollectingFace(bool addFace, bool isExtraFace)\r\n      {\r\n         if (TessellatedShapeBuilder == null || TessellatedFaceBoundary == null)\r\n            throw new InvalidOperationException(\"StartCollectingFace has not been called.\");\r\n\r\n         if (addFace)\r\n         {\r\n            TessellatedFace theFace = new TessellatedFace(TessellatedFaceBoundary, FaceMaterialId);\r\n            AddFaceToTessellatedShapeBuilder(theFace, isExtraFace);\r\n         }\r\n         else\r\n         {\r\n            AbortCurrentFace();\r\n         }\r\n      }\r\n\r\n      /// <summary>\r\n      /// Check if we have started building a face.\r\n      /// </summary>\r\n      /// <returns>True if we have collected at least one face boundary, false otherwise.\r\n      public bool HaveActiveFace()\r\n      {\r\n         return (TessellatedFaceBoundary != null && TessellatedFaceBoundary.Count > 0);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Remove the current invalid face from the list of faces to create a BRep solid.\r\n      /// </summary>\r\n      override public void AbortCurrentFace()\r\n      {\r\n         if (TessellatedFaceBoundary != null)\r\n            TessellatedFaceBoundary.Clear();\r\n\r\n         FaceMaterialId = ElementId.InvalidElementId;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Add one loop of vertices that will define a boundary loop of the current face.\r\n      /// </summary>\r\n      /// <param name=\"id\">The id of the IFCEntity, for error reporting.</param>\r\n      /// <param name=\"loopVertices\">The list of vertices.</param>\r\n      /// <returns>True if the operation succeeded, false oherwise.</returns>\r\n      public bool AddLoopVertices(int id, List<XYZ> loopVertices)\r\n      {\r\n         int vertexCount = (loopVertices == null) ? 0 : loopVertices.Count;\r\n         if (vertexCount < 3)\r\n         {\r\n            Importer.TheLog.LogComment(id, \"Too few distinct loop vertices, ignoring.\", false);\r\n            return false;\r\n         }\r\n\r\n         List<XYZ> adjustedLoopVertices = null;\r\n         IList<Tuple<int,int>> interiorLoops = null;\r\n\r\n         int numOuterCreated = 0;\r\n\r\n         bool succeeded = false;\r\n         for (int pass = 0; pass < 2 && !succeeded; pass++)\r\n         {\r\n            // If we have AnyGeometry as a target, we are using Solid tolerances on a first pass.\r\n            // If that would fail, try again using Mesh tolerances.\r\n            if (pass == 1 && !RevertToMeshIfPossible())\r\n               break;\r\n         \r\n            succeeded = true;\r\n\r\n            // numOuterCreated is the size of the main \"outer\" loop after removing duplicates\r\n            // and self-intersecting loops.  In all valid cases, numOuterCreated = numTotalCreated.\r\n            numOuterCreated = 0;\r\n\r\n            // The total number of non-duplicate loops.  This can differ if we are trying to create\r\n            // a solid vs. a mesh.\r\n            int numTotalCreated = 0;\r\n\r\n            // The vertices of the main (presumably outer) loop.\r\n            adjustedLoopVertices = new List<XYZ>();\r\n\r\n            // The list of vertices of the self-intersecting loops.\r\n            // Note that we will check that the self-interecting loops do not themselves self-intersect.\r\n            interiorLoops = new List<Tuple<int, int>>();\r\n            int lastInteriorLoopIndex = -1;\r\n\r\n            IDictionary<XYZ, int> createdVertices = \r\n               new SortedDictionary<XYZ, int>(new IFCXYZFuzzyComparer(GetVertexTolerance()));\r\n\r\n            for (int ii = 0; ii < vertexCount; ii++)\r\n            {\r\n               XYZ loopVertex = loopVertices[ii];\r\n\r\n               int createdVertexIndex = -1;\r\n               if (createdVertices.TryGetValue(loopVertex, out createdVertexIndex))\r\n               {\r\n                  // We will allow the first and last point to be equivalent, or the current and last point.  Otherwise we will throw.\r\n                  if (((createdVertexIndex == 0) && (ii == vertexCount - 1)) || (createdVertexIndex == numTotalCreated - 1))\r\n                     continue;\r\n\r\n                  // If we have a real self-intersection, mark the loop created by the intersection\r\n                  // for removal later.\r\n                  if (loopVertex.DistanceTo(loopVertices[createdVertexIndex]) < MathUtil.SmallGap())\r\n                  {\r\n                     if (lastInteriorLoopIndex > createdVertexIndex)\r\n                     {\r\n                        // The interior loops overlap; this is probably too much to try to fix.\r\n                        succeeded = false;\r\n                        break;\r\n                     }\r\n                     // Sorted in reverse order so we can more easily create the interior loops later.\r\n                     int numToRemove = ii - createdVertexIndex;\r\n                     interiorLoops.Insert(0, Tuple.Create(createdVertexIndex, numToRemove));\r\n                     lastInteriorLoopIndex = ii;\r\n                     numOuterCreated -= numToRemove;\r\n                     continue;\r\n                  }\r\n\r\n                  // Note that if pass == 1, CanRevertToMesh will be false.\r\n                  if (!CanRevertToMesh())\r\n                     Importer.TheLog.LogWarning(id, \"Loop is self-intersecting, truncating.\", false);\r\n                  succeeded = false;\r\n                  break;\r\n               }\r\n\r\n               XYZ adjustedXYZ = TessellatedFaceVertices.FindOrAdd(loopVertex);\r\n                  \r\n               adjustedLoopVertices.Add(adjustedXYZ);\r\n               createdVertices[adjustedXYZ] = numTotalCreated;\r\n               numTotalCreated++;\r\n               numOuterCreated++;\r\n            }\r\n\r\n            if (numOuterCreated < 3)\r\n               succeeded = false;\r\n         }\r\n\r\n         // Checking start and end points should be covered above.\r\n         if (numOuterCreated < 3)\r\n         {\r\n            Importer.TheLog.LogComment(id, \"Loop has less than 3 distinct vertices, ignoring.\", false);\r\n            return false;\r\n         }\r\n\r\n         // Remove the interior loops from the loop boundary, in reverse order, and add them\r\n         // to the tessellated face boundary.\r\n         foreach (Tuple<int, int> interiorLoop in interiorLoops)\r\n         {\r\n            int startIndex = interiorLoop.Item1;\r\n            int count = interiorLoop.Item2;\r\n            if (count >= 3)\r\n               TessellatedFaceBoundary.Add(loopVertices.GetRange(startIndex, count));\r\n            if (startIndex + count > adjustedLoopVertices.Count)\r\n            {\r\n               count = adjustedLoopVertices.Count - startIndex;\r\n            }\r\n            adjustedLoopVertices.RemoveRange(startIndex, count);\r\n         }\r\n\r\n         if (interiorLoops.Count > 0)\r\n            Importer.TheLog.LogWarning(id, \"Loop is self-intersecting, fixing.\", false);\r\n         \r\n         TessellatedFaceBoundary.Add(adjustedLoopVertices);\r\n         return true;\r\n      }\r\n\r\n      private void ClearTessellatedShapeBuilder()\r\n      {\r\n         TessellatedShapeBuilder.Clear();\r\n         CreatedFacesCount = 0;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create a geometry object(s) described by stored face sets, if possible.\r\n      /// Usually a single-element IList conatining either Solid or Mesh is returned.\r\n      /// A two-elemant IList containing a Solid as the 1st element and a Mesh as\r\n      /// the 2nd is returned if while building multiple face sets, a fallback\r\n      /// was used for some but not all sets.\r\n      /// </summary>\r\n      /// <returns>The IList created, or null. The IList can contain a Solid and/or a Mesh.\r\n      /// If Solid is present, it always the 1st element.</returns>\r\n      private IList<GeometryObject> CreateGeometryObjects(string guid,\r\n         out bool hasInvalidData, out TessellatedShapeBuilderOutcome outcome)\r\n      {\r\n         try\r\n         {\r\n            TessellatedShapeBuilder.CloseConnectedFaceSet();\r\n\r\n            // The OwnerInfo is currently unused; the value doesn't really matter.\r\n            TessellatedShapeBuilder.LogString = IFCImportFile.TheFileName;\r\n            TessellatedShapeBuilder.LogInteger = IFCImportFile.TheBrepCounter;\r\n            TessellatedShapeBuilder.OwnerInfo = guid != null ? guid : \"Temporary Element\";\r\n\r\n            TessellatedShapeBuilder.Target = TargetGeometry;\r\n            TessellatedShapeBuilder.Fallback = FallbackGeometry;\r\n            TessellatedShapeBuilder.GraphicsStyleId = GraphicsStyleId;\r\n\r\n            TessellatedShapeBuilder.Build();\r\n\r\n            TessellatedShapeBuilderResult result = TessellatedShapeBuilder.GetBuildResult();\r\n\r\n            // It is important that we clear the TSB after we build above, otherwise we will \"collect\" geometries\r\n            // in the DirectShape and create huge files with redundant data.\r\n            ClearTessellatedShapeBuilder();\r\n            hasInvalidData = result.HasInvalidData;\r\n            outcome = result.Outcome;\r\n            return result.GetGeometricalObjects();\r\n         }\r\n         catch (Exception ex)\r\n         {\r\n            Importer.TheLog.LogError(CreatorId(), ex.Message, false);\r\n\r\n            ClearTessellatedShapeBuilder();\r\n            hasInvalidData = true;\r\n            outcome = TessellatedShapeBuilderOutcome.Nothing;\r\n            return null;\r\n         }\r\n      }\r\n\r\n\r\n      /// <summary>\r\n      /// Create a closed Solid if possible. If the face sets have unusable faces\r\n      /// or describe an open Solid, then nothing is created.\r\n      /// </summary>\r\n      /// <returns>The Solid created, or null.</returns>\r\n      private IList<GeometryObject> CreateClosedSolid(string guid)\r\n      {\r\n         if (TargetGeometry != TessellatedShapeBuilderTarget.Solid || FallbackGeometry != TessellatedShapeBuilderFallback.Abort)\r\n            throw new ArgumentException(\"CreateClosedSolid expects TessellatedShapeBuilderTarget.Solid and TessellatedShapeBuilderFallback.Abort.\");\r\n\r\n         bool invalidData;\r\n         TessellatedShapeBuilderOutcome outcome;\r\n         IList<GeometryObject> geomObjs = CreateGeometryObjects(guid, out invalidData, out outcome);\r\n\r\n         bool createdClosedSolid = (outcome == TessellatedShapeBuilderOutcome.Solid);\r\n         if (!createdClosedSolid)\r\n            Importer.TheLog.LogWarning(CreatorId(), \"Couldn't create closed solid.\", false);\r\n\r\n         if (!createdClosedSolid || geomObjs == null || geomObjs.Count != 1 || geomObjs[0] == null)\r\n            return new List<GeometryObject>();\r\n\r\n         if (geomObjs[0] is Solid)\r\n            return geomObjs;\r\n\r\n         // TessellatedShapeBuilder is only allowed to return a Solid, or nothing in this case.  If it returns something else, throw.\r\n         throw new InvalidOperationException(\"Unexpected object was created\");\r\n      }\r\n\r\n      /// <summary>\r\n      /// Indicates whether we are required to create a Solid.\r\n      /// </summary>\r\n      /// <returns>True if we are required to create a Solid, false otherwise.</returns>\r\n      public bool MustCreateSolid()\r\n      {\r\n         return (TargetGeometry == TessellatedShapeBuilderTarget.Solid &&\r\n             FallbackGeometry == TessellatedShapeBuilderFallback.Abort);\r\n      }\r\n\r\n      /// <summary>\r\n      /// Indicates whether we are attempting to create a Solid as our primary target.\r\n      /// </summary>\r\n      /// <returns>True if we are first trying to create a Solid, false otherwise.</returns>\r\n      public bool TryToCreateSolid()\r\n      {\r\n         return (TargetGeometry == TessellatedShapeBuilderTarget.AnyGeometry ||\r\n             TargetGeometry == TessellatedShapeBuilderTarget.Solid);\r\n      }\r\n\r\n      /// <summary>\r\n      /// If possible, create a Mesh representing all faces in all face sets.</summary>\r\n      /// <returns>null or an IList containing 1 or more GeometryObjects of type Mesh.</returns>\r\n      /// <remarks>Usually a single-element IList is returned, but multiple GeometryObjects may be created.</remarks>\r\n      private IList<GeometryObject> CreateMesh(string guid)\r\n      {\r\n         if (TargetGeometry != TessellatedShapeBuilderTarget.Mesh || FallbackGeometry != TessellatedShapeBuilderFallback.Salvage)\r\n            throw new ArgumentException(\"CreateMesh expects TessellatedShapeBuilderTarget.Mesh and TessellatedShapeBuilderFallback.Salvage.\");\r\n\r\n         bool invalidData;\r\n         TessellatedShapeBuilderOutcome outcome;\r\n         IList<GeometryObject> geomObjects = CreateGeometryObjects(guid, out invalidData, out outcome);\r\n\r\n         if(invalidData)\r\n            Importer.TheLog.LogWarning(CreatorId(), \"Couldn't create mesh.\", false);\r\n\r\n         return geomObjects;\r\n      }\r\n\r\n      /// <summary>\r\n      /// If possible, create a Solid representing all faces in all face sets. If a Solid can't be created,\r\n      /// then a Mesh is created instead.</summary>\r\n      /// <returns>null or an IList containing 1 or more GeometryObjects of type Solid or Mesh.</returns>\r\n      /// <remarks>Usually a single-element IList is returned, but multiple GeometryObjects may be created.</remarks>\r\n      private IList<GeometryObject> CreateSolidOrMesh(string guid)\r\n      {\r\n         if (TargetGeometry != TessellatedShapeBuilderTarget.AnyGeometry || FallbackGeometry != TessellatedShapeBuilderFallback.Mesh)\r\n            throw new ArgumentException(\"CreateSolidOrMesh expects TessellatedShapeBuilderTarget.AnyGeometry and TessellatedShapeBuilderFallback.Mesh.\");\r\n\r\n         bool invalidData;\r\n         TessellatedShapeBuilderOutcome outcome;\r\n         IList<GeometryObject> geomObjects = CreateGeometryObjects(guid, out invalidData, out outcome);\r\n\r\n         if (invalidData)\r\n            Importer.TheLog.LogWarning(CreatorId(), \"Couldn't create solid or mesh.\", false);\r\n\r\n         return geomObjects;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Create geometry with the TessellatedShapeBuilder based on already existing settings.\r\n      /// </summary>\r\n      /// <param name=\"guid\">The Guid associated with the geometry.</param>\r\n      /// <returns>A list of GeometryObjects, possibly empty.</returns>\r\n      public override IList<GeometryObject> CreateGeometry(string guid)\r\n      {\r\n         if (TargetGeometry == TessellatedShapeBuilderTarget.AnyGeometry && FallbackGeometry == TessellatedShapeBuilderFallback.Mesh)\r\n            return CreateSolidOrMesh(guid);\r\n\r\n         if (TargetGeometry == TessellatedShapeBuilderTarget.Solid && FallbackGeometry == TessellatedShapeBuilderFallback.Abort)\r\n            return CreateClosedSolid(guid);\r\n\r\n         if (TargetGeometry == TessellatedShapeBuilderTarget.Mesh && FallbackGeometry == TessellatedShapeBuilderFallback.Salvage)\r\n            return CreateMesh(guid);\r\n\r\n         throw new ArgumentException(\"Unhandled TessellatedShapeBuilderTarget and TessellatedShapeBuilderFallback for CreateGeometry.\");\r\n      }\r\n\r\n      // End temporary classes for holding BRep information.\r\n      \r\n      /// <summary>\r\n      /// Indicates if the geometry can be created as a mesh as a fallback.\r\n      /// </summary>\r\n      /// <returns>True if it can be.</returns>\r\n      public bool CanRevertToMesh()\r\n      {\r\n         return FallbackGeometry == TessellatedShapeBuilderFallback.Mesh;\r\n      }\r\n\r\n      /// <summary>\r\n      /// Revert to using a mesh representation if that's allowed.\r\n      /// </summary>\r\n      /// <returns>True if the change is made.</returns>\r\n      public bool RevertToMeshIfPossible()\r\n      {\r\n         // Note that CanRevertToMesh() is redundant, but a trivial enough check.\r\n         if (!CanRevertToMesh())\r\n            return false;\r\n\r\n         SetTargetAndFallbackGeometry(TessellatedShapeBuilderTarget.Mesh, TessellatedShapeBuilderFallback.Salvage);\r\n\r\n         // We also need to reset the Comparer for TessellatedFaceVertices to a new tolerance.\r\n         // Note that since we are always lowering the tolerance, there should be no concern that \r\n         // previous entries would disappear.  That isn't always true; see the remarks of\r\n         // IFCFuzzyXYZSet.\r\n         TessellatedFaceVertices.ResetTolerance(GetVertexTolerance());\r\n         return true;\r\n      }\r\n   }\r\n}"
  },
  {
    "path": "Source/Revit.IFC.Import.Core/Processors/IFCNavisProcessor.cs",
    "content": "﻿using System.Collections.Generic;\n\nusing Autodesk.Revit.DB;\n\nnamespace Revit.IFC.Import.Core\n{\n\n   public interface IElement\n   {\n      /// <summary>\n      /// Provide the IElement object that describes the IFC type element for this object.\n      /// </summary>\n      void SetType(IElement eleType);\n\n      /// <summary>\n      /// Provide the geometry to be used to represent this object.\n      /// </summary>\n      void SetGeometry(IList<GeometryObject> geoms);\n\n      /// <summary>\n      /// Provide another element whose geometry should be used to also represent this object.\n      /// This is instanced geometry.\n      /// The transform maps the shared geometry into the coordinate space of this object.\n      /// </summary>\n      void SetGeometry(IElement geomInstEle, Transform transform);\n\n      /// <summary>\n      /// Set the local to project space, transform for this object.\n      /// \n      /// For geometry to be correctly displayed it should be transformed first through \n      /// the instance geometry transform, if set in the above method, and then this transform.\n      /// </summary>\n      void SetTransform(Transform transform);\n\n      /// <summary>\n      /// These are the set of methods for providing the parameter value for this element.\n      /// (I'm not sure if the ElementId one would ever be used, but its there in IFCPropertySet.AddParameterXXX)\n      /// </summary>\n\n      void AddParameter(BuiltInParameter parameterId, string parameterValue);\n      void AddParameter(int parameterSetId, string parameterName, ElementId parameterValue);\n      void AddParameter(int parameterSetId, string parameterName, bool parameterValue);\n      void AddParameter(int parameterSetId, string parameterName, int parameterValue);\n      void AddParameter(int parameterSetId, string parameterName, string parameterValue);\n      void AddParameter(int parameterSetId, string parameterName, double parameterValue, ForgeTypeId specTypeId, ForgeTypeId unitsTypeId);\n   }\n   \n   public class IFCNavisProcessor : IIFCFileProcessor\n   {\n      public virtual IElement GetElementFromStepId(int ifcId)\n      {\n         // NAVIS_TODO: This is inside Navis code.\n         return null;\n      }\n\n      public virtual IElement CreateElement(int ifcId, string ifcGuid, string ifcEntityType, long categoryId)\n      {\n         // NAVIS_TODO: This is inside Navis code.\n         return null;\n      }\n\n      public virtual void CreateTypeElement(int ifcId, string ifcGuid, string ifcEntityType, long categoryId)\n      {\n         // NAVIS_TODO: This is inside Navis code.\n         return;\n      }\n\n      /// <summary>\n      /// Report the units that length values with be in for geometry and transforms.\n      /// </summary>\n      /// <param name=\"units\">The length unit.</param>\n      public virtual void ReportLengthUnits(ForgeTypeId units)\n      {\n         // NAVIS_TODO: This is inside Navis code.\n         return;\n      }\n\n      public bool CreateOrUpdateElement(int ifcId, string ifcGuid, string ifcEntityType, long categoryId,\n         IList<GeometryObject> geomObjs)\n      {\n         if (ifcId <= 0)\n            return true;\n\n         // NAVIS_TODO: This is a bit of a hack to minimize Navis code in the \"main\" Revit code.\n         if (geomObjs == null)\n         {\n            // This is a work around for the fact that some entity types have a valid CreatedElementId,\n            // (otherwise we wouldn't even get to here) but we haven't yet created an IElement.\n            //\n            // The real solution would probably be to find all of those cases and fix them.\n            // ... and that is what would need to happen if the test in CreateParameters was updated\n            // to test if an IElement existed instead of testing whether CreatedElementId was set.\n\n            IElement altElement = GetElementFromStepId(ifcId);\n            if (altElement != null)\n               return true;\n         }\n\n         IElement ele = CreateElement(ifcId, ifcGuid, ifcEntityType, categoryId);\n         if (ele != null)\n            ele.SetGeometry(geomObjs);\n\n         return true;\n      }\n\n      public void CreateElementType(int ifcId, string ifcGuid, string ifcEntityType, long categoryId)\n      {\n         // This is used in some places to create something not related to an IFCEntity\n         if (ifcId > 0)\n         {\n            CreateTypeElement(ifcId, ifcGuid, ifcEntityType, categoryId);\n         }\n      }\n\n      public void PostProcessMappedItem(int creatorId,\n         string globalId,\n         string entityTypeAsString,\n         ElementId categoryId,\n         int geometrySourceId,\n         Transform newLcs)\n      {\n         // Copy some code from elsewhere to work out what the object was that got the geometry.\n         // Now get that type object\n         var typeEle = GetElementFromStepId(geometrySourceId);\n\n         // The type element might not have been created, if its geometry processing failed.\n         if (typeEle != null)\n         {\n            // We now need to set the type object geometry onto the entity.\n            // The main reason for needing to do it here is because we have newLcs calculated, but we haven't yet got \n            // and IElement for the entity, so first create one.\n\n            var instEle = CreateElement(creatorId, globalId, entityTypeAsString, categoryId.Value);\n            instEle.SetGeometry(typeEle, newLcs);\n         }\n      }\n\n      public bool PostProcessProduct(int ifcId, \n         int? typeObjectId,\n         Transform lcs,\n         IList<GeometryObject> directShapeGeometries)\n      {\n         var ele = GetElementFromStepId(ifcId);\n\n         if (!ApplyTransforms)\n         {\n            // Now provide the transform for the consumer to use with the untransformed geometry.\n            // If a transform was already set by calling IElement.SetGeometry(IElement geomInstEle, Transform transform)\n            // then lcs should be PreMultiplied into that existing transform in the IElement implementation.\n            ele.SetTransform(lcs);\n         }\n\n         // If we are instanced, then really we shouldn't have any directShapeGeometries, but currently\n         // if we don't then CreateParameters doesn't run, so we have some directShapeGeometries to fix it.\n         // So the implementation of SetGeometry here doesn't overwrite the existing set instanced geometry\n         // with this.\n         ele.SetGeometry(directShapeGeometries);\n\n         if (typeObjectId.HasValue)\n         {\n            var typeEle = GetElementFromStepId(typeObjectId.Value);\n\n            ele.SetType(typeEle);\n         }\n\n         return true;\n      }\n\n      public void PostProcessProject(double? lengthScaleFactor, ForgeTypeId lengthUnit)\n      {\n         if (lengthUnit != null && lengthScaleFactor.HasValue && !ScaleValues)\n         {\n            LengthScale = 1.0 / lengthScaleFactor.Value;\n            ReportLengthUnits(lengthUnit);\n         }\n         else\n         {\n            LengthScale = 1.0;\n            ReportLengthUnits(UnitTypeId.Feet);\n         }\n      }\n\n      public bool? ProcessParameter(int objDefId, ForgeTypeId specTypeId, \n         ForgeTypeId unitsTypeId,\n         int parameterSetId, string parameterName, double parameterValue)\n      {\n         GetElementFromStepId(objDefId).AddParameter(parameterSetId, parameterName, parameterValue, specTypeId, unitsTypeId);\n         return true;\n      }\n\n      public bool? ProcessParameter(int objDefId, int parameterSetId, string parameterName, string parameterValue)\n      {\n         GetElementFromStepId(objDefId).AddParameter(parameterSetId, parameterName, parameterValue);\n         return true;\n      }\n\n      public bool? ProcessParameter(int objDefId, int parameterSetId, string parameterName, int parameterValue)\n      {\n         GetElementFromStepId(objDefId).AddParameter(parameterSetId, parameterName, parameterValue);\n         return true;\n      }\n\n      public bool? ProcessParameter(int objDefId, int parameterSetId, string parameterName, ElementId parameterValue)\n      {\n         GetElementFromStepId(objDefId).AddParameter(parameterSetId, parameterName, parameterValue);\n         return true;\n      }\n\n      public bool? ProcessParameter(int objDefId, int parameterSetId, string parameterName, bool parameterValue)\n      {\n         GetElementFromStepId(objDefId).AddParameter(parameterSetId, parameterName, parameterValue);\n         return true;\n      }\n\n      public void SetStringParameter(Element element, int objDefId, BuiltInParameter parameterId, string value, bool allowUnfound)\n      {\n         GetElementFromStepId(objDefId).AddParameter(parameterId, value);\n      }\n\n      public bool PostProcessRepresentationMap(int typeId,\n         IList<Curve> mappedCurves, IList<GeometryObject> mappedSolids)\n      {\n         GetElementFromStepId(typeId).SetGeometry(mappedSolids);\n         return true;\n      }\n\n      public void PostProcessSite(int siteId, double? refLatitude, double? refLongitude, \n         double refElevation, string landTitleNumber, ForgeTypeId baseLengthUnits, \n         Transform lcs)\n      {\n         var ele = GetElementFromStepId(siteId);\n         if (refLatitude.HasValue)\n         {\n            ele.AddParameter(-1, \"Latitude\", refLatitude.Value, SpecTypeId.Angle, UnitTypeId.Degrees);\n         }\n         if (refLongitude.HasValue)\n         {\n            ele.AddParameter(-1, \"Longitude\", refLongitude.Value, SpecTypeId.Angle, UnitTypeId.Degrees);\n         }\n\n         // refElevation comes from an attribute so will be in feet\n         ele.AddParameter(-1, \"Elevation\", refElevation, SpecTypeId.Length, UnitTypeId.Feet);\n         ele.AddParameter(-1, \"LandTitleNumber\", landTitleNumber);\n\n         if (lcs != null)\n         {\n            // If we are reporting Latitude and Longitude, then we need a transform, to know \n            // where this survey point is, in our world space.\n            ele.SetTransform(lcs);\n         }\n      }\n\n      public bool FindAlternateGeometrySource { get => true; }\n\n      // For this initial implementation of a Navis processor, \n      // we have no applied transforms and property values are unscaled.\n      // However, geometry always need to be in feet and for simplicity\n      // this means that no values going through IFCUnitUtil are scaled.\n      // This means that transforms and attribute length values are also\n      // in feet\n      public bool ScaleValues { get => false; }\n\n      public bool ApplyTransforms { get => false; }\n\n      public bool TryToFixFarawayOrigin { get => false; }\n\n      private double LengthScale { get; set; } = 1.0;\n\n      public double ScaleLength(double length)\n      {\n         return length * LengthScale;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Import.Core/Processors/IIFCFileProcessor.cs",
    "content": "﻿using System.Collections.Generic;\n\nusing Autodesk.Revit.DB;\n\nnamespace Revit.IFC.Import.Core\n{\n   /// <summary>\n   /// The consumer object.\n   /// \n   /// All communications from the Revit-IFC code go through here.\n   /// \n   /// The implementation of the consumer, then creates IElement objects to work as required and \n   /// the Revit-IFC code provides the data to them through the interface below.\n   /// </summary>\n   public interface IIFCFileProcessor\n   {\n      /// <summary>\n      /// Create or update an element (instance) object.\n      /// </summary>\n      /// <param name=\"ifcId\">The STEP Id of the IFC entity</param>\n      /// <param name=\"ifcGuid\">The GUID of the IFC entity</param>\n      /// <param name=\"ifcEntityType\">The entity type name of the IFC entity</param>\n      /// <param name=\"categoryId\">The Revit category Id - not sure if this will be used in the end</param>\n      bool CreateOrUpdateElement(int ifcId, string ifcGuid, string ifcEntityType, long categoryId,\n         IList<GeometryObject> geomObjs);\n\n      /// <summary>\n      /// Create or update an element object for an IFC type object.\n      /// </summary>\n      /// <param name=\"ifcId\">The STEP Id of the IFC type element</param>\n      /// <param name=\"ifcGuid\">The GUID of the IFC type element</param>\n      /// <param name=\"ifcEntityType\">The entity type name of the IFC type element</param>\n      /// <param name=\"categoryId\">The Revit category Id - not sure if this will be used in the end</param>\n      void CreateElementType(int ifcId, string ifcGuid, string ifcEntityType, long categoryId);\n\n      /// <summary>\n      /// Allow a processor to add a parameter with a double value.\n      /// </summary>\n      /// <param name=\"objDefId\">The STEP id of the object definition.</param>\n      /// <param name=\"specTypeId\">The Forge id for the parameter specification.</param>\n      /// <param name=\"unitsTypeId\">The Forge id for the parameter units.</param>\n      /// <param name=\"parameterSetId\">The STEP id of the parameter set.</param>\n      /// <param name=\"parameterName\">The parameter name.</param>\n      /// <param name=\"parameterValue\">The parameter value.</param>\n      /// <returns>True if processed correctly, false if not, and null if not implemented.</returns>\n      bool? ProcessParameter(int objDefId, ForgeTypeId specTypeId, ForgeTypeId unitsTypeId,\n         int parameterSetId, string parameterName, double parameterValue);\n\n      bool? ProcessParameter(int objDefId, int parameterSetId, string parameterName, string parameterValue);\n\n      bool? ProcessParameter(int objDefId, int parameterSetId, string parameterName, int parameterValue);\n\n      bool? ProcessParameter(int objDefId, int parameterSetId, string parameterName, bool parameterValue);\n\n      bool? ProcessParameter(int objDefId, int parameterSetId, string parameterName, ElementId parameterValue);\n\n      /// <summary>\n      /// Create or update an element object containing shared geometry.\n      /// </summary>\n      /// <param name=\"shapeEditScope\">The shape edit scope of the object.</param>\n      /// <param name=\"mappedItem\">The mapped item container.</param>\n      /// <param name=\"newLcs\">The local transform for the mapped item.</param>\n      void PostProcessMappedItem(int creatorId,\n         string globalId,\n         string entityTypeAsString,\n         ElementId categoryId,\n         int geometrySourceId,\n         Transform newLcs);\n\n      /// <summary>\n      /// NAVIS_TODO\n      /// </summary>\n      /// <param name=\"ifcId\">The STEP Id of the IFC entity</param>\n      /// <param name=\"typeObjectId\">The id of the IfcTypeObject related to the entity, if any</param>\n      /// <param name=\"shapeEditScope\">The shape edit scope</param>\n      /// <param name=\"shape\">The DirectShape containing the IFC entity data</param>\n      /// <param name=\"lcs\">The transform of the associated geometry</param>\n      /// <param name=\"directShapeGeometries\">The associated geometry</param>\n      bool PostProcessProduct(int ifcId,\n         int? typeObjectId,\n         Transform lcs,\n         IList<GeometryObject> directShapeGeometries);\n\n      /// <summary>\n      /// NAVIS_TODO\n      /// </summary>\n      void PostProcessProject(double? lengthScaleFactor, ForgeTypeId lengthUnit);\n\n      bool PostProcessRepresentationMap(int typeId, \n         IList<Curve> mappedCurves, IList<GeometryObject> mappedSolids);\n\n      void PostProcessSite(int siteId, double? refLatitude, double? refLongitude,\n         double refElevation, string landTitleNumber, ForgeTypeId baseLengthUnits,\n         Transform lcs);\n\n      /// <summary>\n      /// Set a built-in string parameter value for an object.\n      /// </summary>\n      /// <param name=\"element\">The element.</param>\n      /// <param name=\"objDefId\">The object id.</param>\n      /// <param name=\"parameterId\">The built-in parameter id.</param>\n      /// <param name=\"value\">The string value.</param>\n      /// <param name=\"allowUnfound\">Don't warn for unfound parameters.</param>\n      void SetStringParameter(Element element, int objDefId, BuiltInParameter parameterId, string value, bool allowUnfound);\n\n      /// <summary>\n      /// Determine if we should apply transforms to geometries.\n      /// </summary>\n      bool ApplyTransforms { get; }\n\n      /// <summary>\n      /// Determine if we should try to fix building and building story locations \n      /// far from the origin.\n      /// </summary>\n      bool TryToFixFarawayOrigin { get; }\n      \n      /// <summary>\n      /// If true, then scale all values into internal units, otherwise leave them as is.\n      /// </summary>\n      /// <remarks>\n      /// This applies to all values, whether parameters, geometry or locations.\n      /// The only exception is that angles are always converted, so that we always deal \n      /// with them in Radians.\n      /// </remarks>\n      bool ScaleValues { get; }\n\n      bool FindAlternateGeometrySource { get; }\n      \n      /// <summary>\n      /// Performs a processor-specific extra length scaling if necessary.\n      /// </summary>\n      /// <param name=\"length\">The original length.</param>\n      /// <returns>The scaled length.</returns>\n      double ScaleLength(double length);\n   }\n}\n"
  },
  {
    "path": "Source/Revit.IFC.Import.Core/Properties/AssemblyInfo.cs",
    "content": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"b1e159b7-4b12-45a9-b83f-159e37798d44\")]\n[assembly: AssemblyTitle(\"Revit.IFC.Import.Core\")]\n[assembly: AssemblyDescription(\"Revit.IFC.Import.Core\")]\n[assembly: AssemblyCompany(\"Autodesk\")]\n[assembly: AssemblyCopyright(\"@2012-2026 Autodesk, Inc. All rights reserved.\")]\n[assembly: AssemblyVersion(\"27.0.1.0\")]\n[assembly: AssemblyFileVersion(\"27.0.1.0\")]\n\n// Version information can now be found in Source\\Foundation\\RevitENU\\Version.cs\n//\n"
  },
  {
    "path": "Source/Revit.IFC.Import.Core/Revit.IFC.Import.Core.csproj",
    "content": "<Project Sdk=\"\">\n  <PropertyGroup>\n    <RootNamespace>Revit.IFC.Import.Core</RootNamespace>\n    <AssemblyName>Revit.IFC.Import.Core</AssemblyName>\n  </PropertyGroup>\n  <Import Project=\"$(SolutionDir)VSProps\\Revit.CSharp.Sdk.props\" />\n   <ItemGroup>\n      <FrameworkReference Include=\"Microsoft.WindowsDesktop.App\" />\n   </ItemGroup>\n   <ItemGroup>\n     <Reference Include=\"RevitAPI\">\n       <HintPath>..\\..\\..\\API\\2027\\RevitAPI.dll</HintPath>\n     </Reference>\n   </ItemGroup>\n  <Import Project=\"$(SolutionDir)VSProps\\Revit.CSharp.Sdk.targets\" />\n</Project>\n"
  },
  {
    "path": "Source/RevitIFCTools/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.8\"/>\n    </startup>\n</configuration>\n"
  },
  {
    "path": "Source/RevitIFCTools/App.xaml",
    "content": "﻿<Application x:Class=\"RevitIFCTools.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"clr-namespace:RevitIFCTools\"\n             StartupUri=\"MainWindow.xaml\">\n    <Application.Resources>\n         \n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "Source/RevitIFCTools/App.xaml.cs",
    "content": "﻿using System.Windows;\n\nnamespace RevitIFCTools\n{\n   /// <summary>\n   /// Interaction logic for App.xaml\n   /// </summary>\n   public partial class App : Application\n   {\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/GeneratePsetDefWin.xaml",
    "content": "﻿<Window x:Class=\"RevitIFCTools.GeneratePsetDefWin\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:local=\"clr-namespace:RevitIFCTools\"\n        mc:Ignorable=\"d\"\n        Title=\"GeneratePsetDefinitions\" Height=\"461.182\" Width=\"644.998\">\n   <Grid>\n      <Grid.RowDefinitions>\n         <RowDefinition Height=\"105*\"/>\n         <RowDefinition Height=\"13*\"/>\n      </Grid.RowDefinitions>\n      <TextBox x:Name=\"textBox_PSDSourceDir\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"18,29,0,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Width=\"511\"/>\n      <TextBox x:Name=\"textBox_OutputFile\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"18,82,0,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Width=\"511\"/>\n      <Label x:Name=\"label\" Content=\"Select top level folder to search all psd directories:\" HorizontalAlignment=\"Left\" Margin=\"18,3,0,0\" VerticalAlignment=\"Top\" Height=\"26\" Width=\"276\"/>\n      <Label x:Name=\"label_Copy\" Content=\"Specify output file:\" HorizontalAlignment=\"Left\" Margin=\"18,56,0,0\" VerticalAlignment=\"Top\" Height=\"26\" Width=\"377\"/>\n      <Button x:Name=\"button_PSDSourceDir\" Content=\"Browse ...\" HorizontalAlignment=\"Left\" Margin=\"545,29,0,0\" VerticalAlignment=\"Top\" Width=\"75\" Height=\"23\" Click=\"button_PSDSourceDir_Click\"/>\n      <Button x:Name=\"button_OutputDir\" Content=\"Browse ...\" HorizontalAlignment=\"Left\" Margin=\"545,82,0,0\" VerticalAlignment=\"Top\" Width=\"75\" Height=\"23\" Click=\"button_OutputFile_Click\"/>\n      <TextBox x:Name=\"textBox_OutputMsg\" HorizontalAlignment=\"Left\" Height=\"128\" Margin=\"18,233,0,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Width=\"511\" ScrollViewer.CanContentScroll=\"True\" VerticalScrollBarVisibility=\"Auto\"/>\n      <Button x:Name=\"button_Cancel\" Content=\"Cancel\" HorizontalAlignment=\"Left\" Margin=\"545,10,0,0\" Grid.Row=\"1\" Width=\"75\" Click=\"button_Cancel_Click\" Height=\"20\" VerticalAlignment=\"Top\"/>\n      <Button x:Name=\"button_Go\" Content=\"Go\" HorizontalAlignment=\"Left\" Margin=\"465,10,0,0\" Grid.Row=\"1\" Width=\"75\" Click=\"button_Go_Click\" Height=\"20\" VerticalAlignment=\"Top\"/>\n      <Grid Grid.RowSpan=\"2\">\n         <Grid.RowDefinitions>\n            <RowDefinition Height=\"105*\"/>\n            <RowDefinition Height=\"13*\"/>\n         </Grid.RowDefinitions>\n         <TextBox x:Name=\"textBox_SharedParFile\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"18,138,0,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Width=\"510\"/>\n         <Label x:Name=\"label_SharedParFile\" Content=\"Specify Revit Shared Parameter file:\" HorizontalAlignment=\"Left\" Margin=\"18,112,0,0\" VerticalAlignment=\"Top\" Height=\"26\" Width=\"377\"/>\n         <CheckBox x:Name=\"checkBox_Dump\" Content=\"Dump&#xA;Results\" HorizontalAlignment=\"Left\" Margin=\"545,240,0,0\" VerticalAlignment=\"Top\" Height=\"30\" Width=\"75\"/>\n         <TextBox x:Name=\"textBox_ShParFileType\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"18,194,0,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Width=\"510\"/>\n         <Label x:Name=\"label_SharedParFile_Copy\" Content=\"Specify Revit Shared Parameter file for [Type]:\" HorizontalAlignment=\"Left\" Margin=\"18,168,0,0\" VerticalAlignment=\"Top\" Height=\"26\" Width=\"377\"/>\n\n      </Grid>\n      <Button x:Name=\"button_BrowseSharedParFile\" Content=\"Browse ...\" HorizontalAlignment=\"Left\" Margin=\"545,137,0,0\" VerticalAlignment=\"Top\" Width=\"75\" Height=\"23\" Click=\"Button_BrowseSharedParFile_Click\"/>\n      <Button x:Name=\"button_BrowseSharedParFileType\" Content=\"Browse ...\" HorizontalAlignment=\"Left\" Margin=\"545,193,0,0\" VerticalAlignment=\"Top\" Width=\"75\" Height=\"23\" Click=\"Button_BrowseSharedParFileType_Click\"/>\n   </Grid>\n</Window>\n"
  },
  {
    "path": "Source/RevitIFCTools/GeneratePsetDefWin.xaml.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Forms;\nusing System.IO;\nusing RevitIFCTools.PropertySet;\n\nnamespace RevitIFCTools\n{\n   /// <summary>\n   /// Interaction logic for GeneratePsetDefitions.xaml\n   /// </summary>\n   public partial class GeneratePsetDefWin : Window\n   {\n      string outputFilename = \"\";\n      string sourceFolder = \"\";\n      StreamWriter logF;\n\n      public GeneratePsetDefWin()\n      {\n         InitializeComponent();\n         textBox_PSDSourceDir.Text = sourceFolder;\n         textBox_OutputFile.Text = outputFilename;\n         button_Go.IsEnabled = false;\n      }\n\n      private void button_PSDSourceDir_Click(object sender, RoutedEventArgs e)\n      {\n         var dialog = new FolderBrowserDialog();\n         dialog.RootFolder = Environment.SpecialFolder.MyComputer;\n         dialog.ShowDialog();\n         textBox_PSDSourceDir.Text = dialog.SelectedPath;\n         if (string.IsNullOrEmpty(textBox_PSDSourceDir.Text))\n            return;\n\n         if (!string.IsNullOrEmpty(textBox_PSDSourceDir.Text) && !string.IsNullOrEmpty(textBox_OutputFile.Text) && !string.IsNullOrEmpty(textBox_SharedParFile.Text))\n            button_Go.IsEnabled = true;\n      }\n\n      private void button_OutputFile_Click(object sender, RoutedEventArgs e)\n      {\n         var dialog = new OpenFileDialog();\n         dialog.DefaultExt = \"cs\";\n         dialog.Filter = \"Select *.cs output file|*.cs\";\n         dialog.AddExtension = true;\n         dialog.CheckFileExists = false;\n         dialog.ShowDialog();\n         textBox_OutputFile.Text = dialog.FileName;\n         outputFilename = textBox_OutputFile.Text;\n\n         if (!string.IsNullOrEmpty(textBox_PSDSourceDir.Text) && !string.IsNullOrEmpty(textBox_OutputFile.Text) && !string.IsNullOrEmpty(textBox_SharedParFile.Text))\n            button_Go.IsEnabled = true;\n         logF = new StreamWriter(outputFilename + \".log\");\n      }\n\n      private void button_Go_Click(object sender, RoutedEventArgs e)\n      {\n         string tempFolder = System.IO.Path.GetTempPath();\n         logF = new StreamWriter(Path.Combine(tempFolder, \"GeneratePsetDefWin.log\"));\n         textBox_OutputMsg.Clear();\n\n         outputFilename = textBox_OutputFile.Text;\n         SharedParFileName = textBox_SharedParFile.Text;\n         SharedParFileNameType = textBox_ShParFileType.Text;\n\n         string parFileNameOut = Path.Combine(Path.GetDirectoryName(SharedParFileName), Path.GetFileNameWithoutExtension(SharedParFileName) + \"_out.txt\");\n         stSharedPar = File.CreateText(parFileNameOut);\n         IDictionary<string, SharedParameterDef> existingParDict = ProcessPsetDefinition.processExistingParFile(SharedParFileName);\n\n         IDictionary<string, SharedParameterDef> existingTypeParDict = new Dictionary<string, SharedParameterDef>();\n         if (File.Exists(SharedParFileNameType))\n         {\n            string typeParFileNameOut = Path.Combine(Path.GetDirectoryName(SharedParFileNameType), Path.GetFileNameWithoutExtension(SharedParFileNameType) + \"_out.txt\");\n            stSharedParType = File.CreateText(typeParFileNameOut);\n            existingTypeParDict = ProcessPsetDefinition.processExistingParFile(SharedParFileNameType);\n         }\n         else\n         {\n            stSharedParType = File.CreateText(SharedParFileNameType);\n         }\n\n         ProcessPsetDefinition procPsetDef = new ProcessPsetDefinition(logF);\n\n         if (string.IsNullOrEmpty(textBox_PSDSourceDir.Text) || string.IsNullOrEmpty(textBox_OutputFile.Text))\n            return;\n\n         try\n         {\n            var psdFolders = GetPsdOrLexicalFolders(textBox_PSDSourceDir.Text);\n            \n            var qtoFolders = new DirectoryInfo(textBox_PSDSourceDir.Text).GetDirectories(\"qto\", SearchOption.AllDirectories);\n            var combinedFolders = psdFolders.Concat(qtoFolders);\n\n            string dirName = Path.GetDirectoryName(textBox_OutputFile.Text);\n            string outFileName = Path.GetFileNameWithoutExtension(textBox_OutputFile.Text);\n            string penumFileName = Path.Combine(dirName, outFileName);\n\n            // Collect all Pset definition for psd folders\n            Dictionary<ItemsInPsetQtoDefs, string> keywordsToProcess = PsetOrQto.PsetOrQtoDefItems[PsetOrQtoSetEnum.PROPERTYSET];\n            HashSet<string> IfcSchemaProcessed = new HashSet<string>();\n            foreach (DirectoryInfo psd in combinedFolders)\n            {\n               string schemaFolder = psd.FullName.Remove(0, textBox_PSDSourceDir.Text.Length + 1).Split('\\\\')[0];\n\n               logF.WriteLine(\"\\r\\n*** Processing \" + schemaFolder);\n               foreach (DirectoryInfo subDir in psd.GetDirectories())\n               {\n                  procPsetDef.ProcessSchemaPsetDef(schemaFolder, subDir, keywordsToProcess);\n               }\n               procPsetDef.ProcessSchemaPsetDef(schemaFolder, psd, keywordsToProcess);\n               IfcSchemaProcessed.Add(schemaFolder);\n            }\n\n            // Collect all QtoSet definition for qto folders\n            keywordsToProcess = PsetOrQto.PsetOrQtoDefItems[PsetOrQtoSetEnum.QTOSET];\n            foreach (DirectoryInfo qto in combinedFolders)\n            {\n               string schemaFolder = qto.FullName.Remove(0, textBox_PSDSourceDir.Text.Length + 1).Split('\\\\')[0];\n\n               logF.WriteLine(\"\\r\\n*** Processing \" + schemaFolder);\n               foreach (DirectoryInfo subDir in qto.GetDirectories())\n               {\n                  procPsetDef.ProcessSchemaPsetDef(schemaFolder, subDir, keywordsToProcess);\n               }\n               procPsetDef.ProcessSchemaPsetDef(schemaFolder, qto, keywordsToProcess);\n            }\n\n            // Process IFC2x2/IFC2x3 QTO properties\n            foreach (string schemaName in IfcSchemaProcessed)\n            {\n               procPsetDef.ProcessPreIfc4QtoSets(schemaName);\n            }\n\n            // Process predefined properties\n            foreach (string schemaName in IfcSchemaProcessed)\n            {\n               logF.WriteLine(\"\\r\\n*** Processing \" + schemaName);\n               procPsetDef.ProcessPredefinedPsets(schemaName);\n            }\n\n            // For testing purpose: Dump all the propertyset definition in a text file\n            if (checkBox_Dump.IsChecked.HasValue && checkBox_Dump.IsChecked.Value)\n            {\n               string pSetDump = \"\";\n               foreach (KeyValuePair<string, IList<VersionSpecificPropertyDef>> psetDefEntry in procPsetDef.allPDefDict)\n               {\n                  pSetDump += \"**** Property Set Name: \" + psetDefEntry.Key;\n                  foreach (VersionSpecificPropertyDef vPdef in psetDefEntry.Value)\n                  {\n                     pSetDump += \"\\r\\n  ===> IfcVersion: \" + vPdef.IfcVersion;\n                     pSetDump += \"\\r\\n\" + vPdef.PropertySetDef.ToString() + \"\\r\\n\";\n                  }\n                  pSetDump += \"\\r\\n\\n\";\n               }\n               string dumpDir = Path.GetDirectoryName(textBox_OutputFile.Text);\n               string dumpFile = Path.GetFileNameWithoutExtension(textBox_OutputFile.Text) + \".txt\";\n               string dumpFilePath = Path.Combine(dumpDir, dumpFile);\n\n               if (File.Exists(dumpFilePath))\n                  File.Delete(dumpFilePath);\n\n               StreamWriter tx = new StreamWriter(dumpFilePath);\n               tx.Write(pSetDump);\n               tx.Close();\n            }\n\n            IDictionary<string, int> groupParamDict = new Dictionary<string, int>();\n            string[] outFNameParts = outFileName.Split('_');\n\n            // Do it for the predefined propserty sets\n            string fNameToProcess = Path.Combine(dirName, outFNameParts[0] + \"_PredefPset.cs\");\n            if (File.Exists(fNameToProcess))\n               File.Delete(fNameToProcess);\n            StreamWriter outF = new StreamWriter(fNameToProcess);\n            // Group ID 1 and 2 are reserved\n            int offset = 3;\n            offset = WriteGeneratedCode(outF, procPsetDef, penumFileName, \"Ifc\", groupParamDict, offset);\n\n            // Do it for the predefined propserty sets\n            fNameToProcess = Path.Combine(dirName, outFNameParts[0] + \"_PsetDef.cs\");\n            if (File.Exists(fNameToProcess))\n               File.Delete(fNameToProcess);\n            outF = new StreamWriter(fNameToProcess);\n            offset = WriteGeneratedCode(outF, procPsetDef, penumFileName, \"Pset\", groupParamDict, offset);\n\n            // Do it for the predefined propserty sets\n            fNameToProcess = Path.Combine(dirName, outFNameParts[0] + \"_QsetDef.cs\");\n            if (File.Exists(fNameToProcess))\n               File.Delete(fNameToProcess);\n            outF = new StreamWriter(fNameToProcess);\n            offset = WriteGeneratedCode(outF, procPsetDef, penumFileName, \"Qto\", groupParamDict, offset);\n\n            // Close the Enum files\n            procPsetDef.endWriteEnumFile();\n            WriteRevitSharedParam(stSharedPar, existingParDict, groupParamDict, false, out IList<string> deferredParList);\n            AppendDeferredParamList(stSharedPar, deferredParList);\n            stSharedPar.Close();\n\n            WriteRevitSharedParam(stSharedParType, existingTypeParDict, groupParamDict, true, out IList<string> deferredParTypeList);\n            AppendDeferredParamList(stSharedParType, deferredParTypeList);\n\n            textBox_OutputMsg.Text = \"Processing completed successfully.\";\n         }\n         catch (Exception ex)\n         {\n            string errorMessage = $\"Error during processing: {ex.Message}\";\n            logF?.WriteLine($\"\\r\\n*** ERROR: {errorMessage}\");\n            logF?.WriteLine($\"Stack trace: {ex.StackTrace}\");\n            \n            textBox_OutputMsg.Text = errorMessage;\n            System.Windows.MessageBox.Show(errorMessage, \"Processing Error\", MessageBoxButton.OK, MessageBoxImage.Error);\n         }\n         finally\n         {\n            // Ensure all resources are properly closed\n            try { stSharedPar?.Close(); } catch { }\n            try { stSharedParType?.Close(); } catch { }\n            try { logF?.Close(); } catch { }\n         }\n      }\n\n      void WriteRevitSharedParam(StreamWriter stSharedPar, IDictionary<string, SharedParameterDef> existingParDict, \n         IDictionary<string, int> groupParamDict, bool isType, out IList<string> deferredParList)\n      {\n         // Now write shared parameter definitions from the Dict to destination file\n         stSharedPar.WriteLine(\"# This is a Revit shared parameter file.\");\n         stSharedPar.WriteLine(\"# Do not edit manually.\");\n         stSharedPar.WriteLine(\"*META\tVERSION\tMINVERSION\");\n         stSharedPar.WriteLine(\"META\t2\t1\");\n         stSharedPar.WriteLine(\"*GROUP\tID\tNAME\");\n         int groupID = groupParamDict[\"Revit IFCExporter Parameters\"];\n\n         // Keep the list of Parameters that do not belong to any Pset to be written all together in one group at the end\n         deferredParList = new List<string>();\n         deferredParList.Add(string.Format(\"#\"));\n         deferredParList.Add(string.Format(\"GROUP\t{0}\tRevit IFCExporter Parameters\", groupID));\n         deferredParList.Add(string.Format(\"*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\"));\n         deferredParList.Add(string.Format(\"#\"));\n\n         string prevPsetName = \"Revit IFCExporter Parameters\";\n         int defaultGroupID = groupParamDict[prevPsetName];\n         SortedDictionary<string, SharedParameterDef> SharedParDict = null;\n         if (!isType)\n            SharedParDict = ProcessPsetDefinition.SharedParamFileDict;\n         else\n            SharedParDict = ProcessPsetDefinition.SharedParamFileTypeDict;\n\n         foreach (KeyValuePair<string, SharedParameterDef> parDef in ProcessPsetDefinition.SharedParamFileDict)\n         {\n            SharedParameterDef newPar = parDef.Value;\n            bool toBeDeferred = false;\n            if (!prevPsetName.Equals(newPar.OwningPset, StringComparison.InvariantCultureIgnoreCase))\n            {\n               if (!string.IsNullOrEmpty(newPar.OwningPset))\n               {\n                  prevPsetName = newPar.OwningPset;\n                  groupID = groupParamDict[newPar.OwningPset];\n                  stSharedPar.WriteLine(\"#\");\n                  stSharedPar.WriteLine(\"GROUP\t{0}\t{1}\", groupID, newPar.OwningPset);\n                  stSharedPar.WriteLine(\"*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\");\n                  stSharedPar.WriteLine(\"#\");\n               }\n               else\n                  toBeDeferred = true;\n            }\n\n            string parName = newPar.Name;\n            if (isType)\n            {\n               if (newPar.Name.EndsWith(\"[Type]\"))\n                  parName = newPar.Name;\n               else\n                  parName = newPar.Name + \"[Type]\";\n            }\n\n            string vis = newPar.Visibility ? \"1\" : \"0\";\n            string usrMod = newPar.UserModifiable ? \"1\" : \"0\";\n\n            // Retain the same GUID if the existing file contains the same parameter name already. This is to keep consistent GUID, even for non-IfdGUID\n            if (existingParDict.ContainsKey(parName))\n            {\n               var existingPar = existingParDict[parName];\n               newPar.ParamGuid = existingPar.ParamGuid;\n            }\n            else if (isType)\n               newPar.ParamGuid = Guid.NewGuid();  // assign new GUID for [Type] parameter if not existing\n\n            if (toBeDeferred)\n            {\n               string parEntry = newPar.Param + \"\\t\" + newPar.ParamGuid.ToString() + \"\\t\" + parName + \"\\t\" + newPar.ParamType + \"\\t\" + newPar.DataCategory + \"\\t\" + defaultGroupID.ToString()\n                  + \"\\t\" + vis + \"\\t\" + newPar.Description + \"\\t\" + usrMod;\n               deferredParList.Add(parEntry);\n            }\n            else\n            {\n               string parEntry = newPar.Param + \"\\t\" + newPar.ParamGuid.ToString() + \"\\t\" + parName + \"\\t\" + newPar.ParamType + \"\\t\" + newPar.DataCategory + \"\\t\" + groupID.ToString()\n                  + \"\\t\" + vis + \"\\t\" + newPar.Description + \"\\t\" + usrMod;\n               stSharedPar.WriteLine(parEntry);\n            }\n         }\n\n         // Add items in the existing parameter dict that are not found in SharedParamFileDict, into the deferred list\n         var disjunctPars = existingParDict.Where(x => !SharedParDict.ContainsKey(x.Key));\n         foreach (KeyValuePair<string, SharedParameterDef> parDef in disjunctPars)\n         {\n            SharedParameterDef newPar = parDef.Value;\n            string parName = newPar.Name;\n            if (isType)\n            {\n               if (newPar.Name.EndsWith(\"[Type]\"))\n                  parName = newPar.Name;\n               else\n                  parName = newPar.Name + \"[Type]\";\n            }\n            string vis = newPar.Visibility ? \"1\" : \"0\";\n            string usrMod = newPar.UserModifiable ? \"1\" : \"0\";\n            string parEntry = newPar.Param + \"\\t\" + newPar.ParamGuid.ToString() + \"\\t\" + parName + \"\\t\" + newPar.ParamType + \"\\t\" + newPar.DataCategory + \"\\t\" + defaultGroupID.ToString()\n               + \"\\t\" + vis + \"\\t\" + newPar.Description + \"\\t\" + usrMod;\n            deferredParList.Add(parEntry);\n         }\n      }\n\n      void AppendDeferredParamList(StreamWriter stSharedPar, IList<string> deferredParList)\n      {\n         foreach (string parToWrite in deferredParList)\n         {\n            stSharedPar.WriteLine(parToWrite);\n         }\n      }\n\n      int WriteGeneratedCode(StreamWriter outF, ProcessPsetDefinition procPsetDef, string penumFileName, string whichCat, \n         IDictionary<string, int> paramGroupDict, int offset)\n      {\n         // Header section of the generated code\n         outF.WriteLine(\"/********************************************************************************************************************************\");\n         outF.WriteLine(\"** NOTE: This code is generated from IFC psd files automatically by RevitIFCTools.                                            **\");\n         outF.WriteLine(\"**       DO NOT change it manually as it will be overwritten the next time this file is re-generated!!                        **\");\n         outF.WriteLine(\"********************************************************************************************************************************/\");\n         outF.WriteLine();\n         outF.WriteLine(\"using System;\");\n         outF.WriteLine(\"using System.Collections.Generic;\");\n         outF.WriteLine(\"using System.Linq;\");\n         outF.WriteLine(\"using System.Text;\");\n         outF.WriteLine(\"using System.Threading.Tasks;\");\n         outF.WriteLine(\"using Autodesk.Revit;\");\n         outF.WriteLine(\"using Autodesk.Revit.DB;\");\n         outF.WriteLine(\"using Autodesk.Revit.DB.IFC;\");\n         outF.WriteLine(\"using Autodesk.Revit.ApplicationServices;\");\n         outF.WriteLine(\"using Revit.IFC.Export.Exporter.PropertySet;\");\n         outF.WriteLine(\"using Revit.IFC.Export.Exporter.PropertySet.Calculators;\");\n         outF.WriteLine(\"using Revit.IFC.Export.Utility;\");\n         outF.WriteLine(\"using Revit.IFC.Export.Toolkit;\");\n         outF.WriteLine(\"using Revit.IFC.Common.Enums;\");\n         outF.WriteLine(\"\");\n         outF.WriteLine(\"namespace Revit.IFC.Export.Exporter\");\n         outF.WriteLine(\"{\");\n         outF.WriteLine(\"   partial class ExporterInitializer\");\n         outF.WriteLine(\"   {\");\n\n         // Initialization section\n\n         string allPsetOrQtoSetsName = \"allPsetOrQtoSets\";\n         string theSetName = \"theSets\";\n         string initPsetOrQsets = null;\n         string setDescription = null;\n         switch (whichCat)\n         {\n            case \"Pset\":\n               initPsetOrQsets = \"InitCommonPropertySets\";\n               setDescription = \"PropertySetDescription\";\n               break;\n            case \"Ifc\":\n               initPsetOrQsets = \"InitPreDefinedPropertySets\";\n               setDescription = \"PreDefinedPropertySetDescription\";\n               break;\n            case \"Qto\":\n               initPsetOrQsets = \"InitQtoSets\";\n               setDescription = \"QuantityDescription\";\n               break;\n            default:\n               logF.WriteLine(\"Category not supported {0}! Use only \\\"Pset\\\", \\\"Qto\\\", or \\\"Ifc\\\"\", whichCat);\n               break;\n         }\n\n         outF.WriteLine(\"      public static void {0}(IList<IList<{1}>> {2})\", initPsetOrQsets, setDescription, allPsetOrQtoSetsName);\n         outF.WriteLine(\"      {\");\n         outF.WriteLine(\"         IList<{0}> {1} = new List<{0}>();\", setDescription, theSetName);\n\n         int groupId = offset;\n         int defaultGroupId = 2;\n         if (!paramGroupDict.ContainsKey(\"Revit IFCExporter Parameters\"))\n            paramGroupDict.Add(\"Revit IFCExporter Parameters\", defaultGroupId);\n\n         foreach (KeyValuePair<string, IList<VersionSpecificPropertyDef>> psetDefEntry in procPsetDef.allPDefDict)\n         {\n            // Skip key (name) that does not start with the requested type\n            if (!psetDefEntry.Key.StartsWith(whichCat.ToString(), StringComparison.InvariantCultureIgnoreCase))\n               continue;\n\n            outF.WriteLine(\"         Init\" + psetDefEntry.Key + \"({0});\", theSetName);\n            if (!paramGroupDict.ContainsKey(psetDefEntry.Key))\n               paramGroupDict.Add(psetDefEntry.Key, groupId++);\n         }\n         outF.WriteLine(\"\\r\\n         allPsetOrQtoSets.Add({0});\", theSetName);\n         outF.WriteLine(\"      }\");\n         outF.WriteLine(\"\");\n\n         // For Pset or QtoSet definitions\n         foreach (KeyValuePair<string, IList<VersionSpecificPropertyDef>> psetDefEntry in procPsetDef.allPDefDict)\n         {\n            // Skip key (name) that does not start with the requested type\n            if (!psetDefEntry.Key.StartsWith(whichCat.ToString(), StringComparison.InvariantCultureIgnoreCase))\n               continue;\n\n            string varName = null;\n            string setsName = null;\n            string psetName = psetDefEntry.Key;\n            string certificationCheckName = null;\n            switch (whichCat)\n            {\n               case \"Pset\":\n                  setsName = \"commonPropertySets\";\n                  certificationCheckName = \"AllowPsetToBeCreated\";\n                  outF.WriteLine(\"      private static void Init\" + psetName + \"(IList<{0}> {1})\", setDescription, setsName);\n                  varName = psetDefEntry.Key.Replace(\"Pset_\", \"propertySet\");\n                  outF.WriteLine(\"      {\");\n                  outF.WriteLine(\"         {0} {1} = new {0}();\", setDescription, varName);\n                  outF.WriteLine(\"         {0}.Name = \\\"{1}\\\";\", varName, psetName);\n                  outF.WriteLine(\"         PropertySetEntry ifcPSE = null;\");\n                  break;\n               case \"Ifc\":\n                  setsName = \"commonPropertySets\";\n                  certificationCheckName = \"AllowPredefPsetToBeCreated\";\n                  outF.WriteLine(\"      private static void Init\" + psetName + \"(IList<{0}> {1})\", setDescription, setsName);\n                  varName = psetDefEntry.Key.Replace(\"Pset_\", \"propertySet\");\n                  outF.WriteLine(\"      {\");\n                  outF.WriteLine(\"         {0} {1} = new {0}();\", setDescription, varName);\n                  outF.WriteLine(\"         {0}.Name = \\\"{1}\\\";\", varName, psetName);\n                  outF.WriteLine(\"         PreDefinedPropertySetEntry ifcPSE = null;\");\n                  break;\n               case \"Qto\":\n                  setsName = \"quantitySets\";\n                  certificationCheckName = \"AllowPsetToBeCreated\";\n                  outF.WriteLine(\"      private static void Init\" + psetName + \"(IList<{0}> {1})\", setDescription, setsName);\n                  varName = psetDefEntry.Key.Replace(\"Qto_\", \"qtoSet\");\n                  outF.WriteLine(\"      {\");\n                  outF.WriteLine(\"         {0} {1} = new {0}();\", setDescription, varName);\n                  outF.WriteLine(\"         {0}.Name = \\\"{1}\\\";\", varName, psetName);\n                  outF.WriteLine(\"         QuantityEntry ifcPSE = null;\");\n                  break;\n               default:\n                  logF.WriteLine(\"Category not supported {0}! Use only \\\"Pset\\\", \\\"Qto\\\", or \\\"Ifc\\\"\", whichCat);\n                  break;\n            }\n\n            outF.WriteLine(\"         Type calcType = null;\");\n\n            bool okToWrite = true;\n            foreach (VersionSpecificPropertyDef vspecPDef in psetDefEntry.Value)\n            {\n               PsetDefinition pDef = vspecPDef.PropertySetDef;\n\n               if (vspecPDef.IfcVersion.StartsWith(\"IFC2X2\", StringComparison.CurrentCultureIgnoreCase))\n               {\n                  outF.WriteLine(\"         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x2 && certifiedEntityAndPsetList.\" + certificationCheckName + \"(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \\\"\" + psetName + \"\\\"))\");\n                  outF.WriteLine(\"         {\");\n                  //foreach (string applEnt in vspecPDef.PropertySetDef.ApplicableClasses)\n                  //{\n                  //   string applEnt2 = applEnt;\n                  //   if (string.IsNullOrEmpty(applEnt))\n                  //      applEnt2 = \"IfcBuildingElementProxy\";     // Default if somehow the data is empty\n                  //   outF.WriteLine(\"            {0}.EntityTypes.Add(IFCEntityType.{1});\", varName, applEnt2);\n                  //}\n                  //if (!string.IsNullOrEmpty(vspecPDef.PropertySetDef.ApplicableType))\n                  //   outF.WriteLine(\"            {0}.ObjectType = \\\"{1}\\\";\", varName, vspecPDef.PropertySetDef.ApplicableType);\n                  //if (!string.IsNullOrEmpty(vspecPDef.PropertySetDef.PredefinedType))\n                  //   outF.WriteLine(\"            {0}.PredefinedType = \\\"{1}\\\";\", varName, vspecPDef.PropertySetDef.PredefinedType);\n               }\n               else if (vspecPDef.IfcVersion.StartsWith(\"IFC2X3\", StringComparison.CurrentCultureIgnoreCase)\n                  || vspecPDef.IfcVersion.Equals(\"IFC2X3_TC1\", StringComparison.CurrentCultureIgnoreCase))\n               {\n                  outF.WriteLine(\"         if (ExporterCacheManager.ExportOptionsCache.ExportAs2x3 && certifiedEntityAndPsetList.\" + certificationCheckName + \"(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \\\"\" + psetName + \"\\\"))\");\n                  outF.WriteLine(\"         {\");\n                  if (varName.StartsWith(\"Qto\", StringComparison.InvariantCultureIgnoreCase))\n                  {\n                     // In IFC2x3, Qto set names are only BaseQuantities\n                     outF.WriteLine(\"            {0}.Name = \\\"{1}\\\";\", varName, \"BaseQuantities\");\n                     outF.WriteLine();\n                  }\n                  //foreach (string applEnt in vspecPDef.PropertySetDef.ApplicableClasses)\n                  //{\n                  //   string applEnt2 = applEnt;\n                  //   if (string.IsNullOrEmpty(applEnt))\n                  //      applEnt2 = \"IfcBuildingElementProxy\";     // Default if somehow the data is empty\n                  //   outF.WriteLine(\"            {0}.EntityTypes.Add(IFCEntityType.{1});\", varName, applEnt2);\n                  //}\n                  //if (!string.IsNullOrEmpty(vspecPDef.PropertySetDef.ApplicableType))\n                  //   outF.WriteLine(\"            {0}.ObjectType = \\\"{1}\\\";\", varName, vspecPDef.PropertySetDef.ApplicableType);\n                  //if (!string.IsNullOrEmpty(vspecPDef.PropertySetDef.PredefinedType))\n                  //   outF.WriteLine(\"            {0}.PredefinedType = \\\"{1}\\\";\", varName, vspecPDef.PropertySetDef.PredefinedType);\n               }\n               else if (vspecPDef.SchemaFileVersion.Equals(\"IFC4_ADD1\", StringComparison.CurrentCultureIgnoreCase))\n               {\n                  outF.WriteLine(\"         if (ExporterCacheManager.ExportOptionsCache.ExportAs4_ADD1 && certifiedEntityAndPsetList.\" + certificationCheckName + \"(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \\\"\" + psetName + \"\\\"))\");\n                  outF.WriteLine(\"         {\");\n                  //foreach (string applEnt in vspecPDef.PropertySetDef.ApplicableClasses)\n                  //{\n                  //   string applEnt2 = applEnt;\n                  //   if (string.IsNullOrEmpty(applEnt))\n                  //      applEnt2 = \"IfcBuildingElementProxy\";     // Default if somehow the data is empty\n                  //   outF.WriteLine(\"            {0}.EntityTypes.Add(IFCEntityType.{1});\", varName, applEnt2);\n                  //}\n                  //if (!string.IsNullOrEmpty(vspecPDef.PropertySetDef.ApplicableType))\n                  //   outF.WriteLine(\"            {0}.ObjectType = \\\"{1}\\\";\", varName, vspecPDef.PropertySetDef.ApplicableType);\n                  //if (!string.IsNullOrEmpty(vspecPDef.PropertySetDef.PredefinedType))\n                  //   outF.WriteLine(\"            {0}.PredefinedType = \\\"{1}\\\";\", varName, vspecPDef.PropertySetDef.PredefinedType);\n               }\n               else if (vspecPDef.SchemaFileVersion.Equals(\"IFC4_ADD2\", StringComparison.CurrentCultureIgnoreCase))\n               {\n                  outF.WriteLine(\"         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.\" + certificationCheckName + \"(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \\\"\" + psetName + \"\\\"))\");\n                  outF.WriteLine(\"         {\");\n                  //foreach (string applEnt in vspecPDef.PropertySetDef.ApplicableClasses)\n                  //{\n                  //   string applEnt2 = applEnt;\n                  //   if (string.IsNullOrEmpty(applEnt))\n                  //      applEnt2 = \"IfcBuildingElementProxy\";     // Default if somehow the data is empty\n                  //   outF.WriteLine(\"            {0}.EntityTypes.Add(IFCEntityType.{1});\", varName, applEnt2);\n                  //}\n                  //if (!string.IsNullOrEmpty(vspecPDef.PropertySetDef.ApplicableType))\n                  //   outF.WriteLine(\"            {0}.ObjectType = \\\"{1}\\\";\", varName, vspecPDef.PropertySetDef.ApplicableType);\n                  //if (!string.IsNullOrEmpty(vspecPDef.PropertySetDef.PredefinedType))\n                  //   outF.WriteLine(\"            {0}.PredefinedType = \\\"{1}\\\";\", varName, vspecPDef.PropertySetDef.PredefinedType);\n               }\n               else if (vspecPDef.SchemaFileVersion.Equals(\"IFC4\", StringComparison.CurrentCultureIgnoreCase))\n               {\n                  outF.WriteLine(\"         if (ExporterCacheManager.ExportOptionsCache.ExportAs4 && certifiedEntityAndPsetList.\" + certificationCheckName + \"(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \\\"\" + psetName + \"\\\"))\");\n                  outF.WriteLine(\"         {\");\n                  //foreach (string applEnt in vspecPDef.PropertySetDef.ApplicableClasses)\n                  //{\n                  //   string applEnt2 = applEnt;\n                  //   if (string.IsNullOrEmpty(applEnt))\n                  //      applEnt2 = \"IfcBuildingElementProxy\";     // Default if somehow the data is empty\n                  //   outF.WriteLine(\"            {0}.EntityTypes.Add(IFCEntityType.{1});\", varName, applEnt2);\n                  //}\n                  //if (!string.IsNullOrEmpty(vspecPDef.PropertySetDef.ApplicableType))\n                  //   outF.WriteLine(\"            {0}.ObjectType = \\\"{1}\\\";\", varName, vspecPDef.PropertySetDef.ApplicableType);\n                  //if (!string.IsNullOrEmpty(vspecPDef.PropertySetDef.PredefinedType))\n                  //   outF.WriteLine(\"            {0}.PredefinedType = \\\"{1}\\\";\", varName, vspecPDef.PropertySetDef.PredefinedType);\n               }\n               else if (vspecPDef.SchemaFileVersion.Equals(\"IFC4x3\", StringComparison.CurrentCultureIgnoreCase)\n                  || vspecPDef.SchemaFileVersion.Equals(\"IFC4x3_ADD2\", StringComparison.CurrentCultureIgnoreCase)\n\n)\n               {\n                  outF.WriteLine(\"         if (ExporterCacheManager.ExportOptionsCache.ExportAs4x3 && certifiedEntityAndPsetList.\" + certificationCheckName + \"(ExporterCacheManager.ExportOptionsCache.FileVersion.ToString().ToUpper(), \\\"\" + psetName + \"\\\"))\");\n                  outF.WriteLine(\"         {\");\n               }\n               else\n               {\n                  logF.WriteLine(\"%Error - Unrecognized schema version : \" + vspecPDef.SchemaFileVersion);\n                  okToWrite = false;\n               }\n\n               if (okToWrite)\n               {\n                  foreach (string applEnt in vspecPDef.PropertySetDef.ApplicableClasses)\n                  {\n                     string applEnt2 = applEnt;\n                     if (string.IsNullOrEmpty(applEnt))\n                        applEnt2 = \"IfcBuildingElementProxy\";     // Default if somehow the data is empty\n                     outF.WriteLine(\"            {0}.EntityTypes.Add(IFCEntityType.{1});\", varName, applEnt2);\n                  }\n                  if (!string.IsNullOrEmpty(vspecPDef.PropertySetDef.ApplicableType))\n                     outF.WriteLine(\"            {0}.ObjectType = \\\"{1}\\\";\", varName, vspecPDef.PropertySetDef.ApplicableType);\n                  if (!string.IsNullOrEmpty(vspecPDef.PropertySetDef.PredefinedType))\n                     outF.WriteLine(\"            {0}.PredefinedType = \\\"{1}\\\";\", varName, vspecPDef.PropertySetDef.PredefinedType);\n               }\n\n               // Process each property\n               foreach (PsetProperty prop in pDef.properties)\n               {\n                  // Handle only one level deep of complex property !!!!\n                  if (prop.PropertyType is ComplexProperty)\n                  {\n                     ComplexProperty complexProp = prop.PropertyType as ComplexProperty;\n                     // For complex property the properties will be flattened by using <Pset>.<Property>.<SubProperty>\n                     foreach (PsetProperty propCx in complexProp.Properties)\n                     {\n                        string prefixName = prop.Name;\n                        procPsetDef.processSimpleProperty(outF, psetName, propCx, prefixName, pDef.IfcVersion, vspecPDef.SchemaFileVersion, varName, vspecPDef, penumFileName);\n                     }\n                  }\n                  else\n                  {\n                     procPsetDef.processSimpleProperty(outF, psetName, prop, null, pDef.IfcVersion, vspecPDef.SchemaFileVersion, varName, vspecPDef, penumFileName);\n                  }\n               }\n               outF.WriteLine(\"         }\");\n            }\n\n            outF.WriteLine(\"         if (ifcPSE != null)\");\n            outF.WriteLine(\"         {\");\n            outF.WriteLine(\"            {0}.Add({1});\", setsName, varName);\n            outF.WriteLine(\"         }\");\n            outF.WriteLine(\"      }\");\n            outF.WriteLine(\"\");\n            outF.WriteLine(\"\");\n         }\n\n         outF.WriteLine(\"   }\");\n         outF.WriteLine(\"}\");\n         outF.Close();\n         return groupId;\n      }\n      \n\n      private void button_Cancel_Click(object sender, RoutedEventArgs e)\n      {\n         Close();\n      }\n\n      string SharedParFileName;\n      string SharedParFileNameType;\n      StreamWriter stSharedPar;\n      StreamWriter stSharedParType;\n\n      private void Button_BrowseSharedParFile_Click(object sender, RoutedEventArgs e)\n      {\n         var dialog = new OpenFileDialog();\n         dialog.DefaultExt = \"txt\";\n         dialog.Filter = \"Select *.txt shared parameter file|*.txt\";\n         dialog.AddExtension = true;\n         dialog.CheckFileExists = true;\n         dialog.ShowDialog();\n         textBox_SharedParFile.Text = dialog.FileName;\n\n         SharedParFileName = textBox_SharedParFile.Text;\n\n         if (!string.IsNullOrEmpty(textBox_PSDSourceDir.Text) && !string.IsNullOrEmpty(textBox_OutputFile.Text) && !string.IsNullOrEmpty(textBox_SharedParFile.Text))\n            button_Go.IsEnabled = true;\n      }\n\n      private void Button_BrowseSharedParFileType_Click(object sender, RoutedEventArgs e)\n      {\n         var dialog = new OpenFileDialog();\n         dialog.DefaultExt = \"txt\";\n         dialog.Filter = \"Select *.txt shared parameter file|*.txt\";\n         dialog.AddExtension = true;\n         dialog.CheckFileExists = false;\n         dialog.ShowDialog();\n         textBox_ShParFileType.Text = dialog.FileName;\n\n         SharedParFileNameType = textBox_ShParFileType.Text;\n\n         if (!string.IsNullOrEmpty(textBox_PSDSourceDir.Text) && !string.IsNullOrEmpty(textBox_OutputFile.Text)\n            && !string.IsNullOrEmpty(textBox_SharedParFile.Text) && !string.IsNullOrEmpty(textBox_ShParFileType.Text))\n            button_Go.IsEnabled = true;\n      }\n\n      /// <summary>\n      /// Searches for PSD or Lexical folders in the specified source directory.\n      /// First looks for 'psd' folders in each first-level subfolder, \n      /// then falls back to 'lexical' folders if 'psd' is not found.\n      /// </summary>\n      /// <param name=\"sourceDirectoryPath\">The root directory path to search in</param>\n      /// <returns>List of DirectoryInfo objects for found psd or lexical folders</returns>\n      private List<DirectoryInfo> GetPsdOrLexicalFolders(string sourceDirectoryPath)\n      {\n         var psdFolders = new List<DirectoryInfo>();\n         var sourceDir = new DirectoryInfo(sourceDirectoryPath);\n\n         foreach (DirectoryInfo firstLevelSubfolder in sourceDir.GetDirectories())\n         {\n            DirectoryInfo psdDir = firstLevelSubfolder.GetDirectories(\"psd\").FirstOrDefault();\n            if (psdDir != null)\n            {\n               psdFolders.Add(psdDir);\n            }\n            else\n            {\n               DirectoryInfo lexicalDir = firstLevelSubfolder.GetDirectories(\"lexical\", SearchOption.AllDirectories).FirstOrDefault();\n               if (lexicalDir != null)\n               {\n                  psdFolders.Add(lexicalDir);\n               }\n            }\n         }\n\n         return psdFolders;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/HtmlPsetDefinitionParser.cs",
    "content": "//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text.RegularExpressions;\nusing RevitIFCTools.PropertySet;\n\nnamespace RevitIFCTools\n{\n   /// <summary>\n   /// Parser for HTML Property Set Definition files from 'lexical' folders\n   /// Extracts the same data as XML parser but from HTML format\n   /// </summary>\n   public class HtmlPsetDefinitionParser\n   {\n      private StreamWriter logF;\n      \n      // Static cache to avoid double reading of enumeration files\n      private static Dictionary<string, List<PropertyEnumItem>> enumCache = new Dictionary<string, List<PropertyEnumItem>>();\n\n      public HtmlPsetDefinitionParser(StreamWriter logger)\n      {\n         logF = logger;\n      }\n\n      /// <summary>\n      /// Process HTML file and extract PropertySet definition\n      /// </summary>\n      /// <param name=\"schemaVersion\">IFC schema version</param>\n      /// <param name=\"htmlFile\">HTML file to process</param>\n      /// <param name=\"psetOrQtoSet\">Property set type definitions</param>\n      /// <returns>Parsed PsetDefinition</returns>\n      public PsetDefinition ProcessHtmlFile(string schemaVersion, FileInfo htmlFile, Dictionary<ItemsInPsetQtoDefs, string> psetOrQtoSet)\n      {\n         try\n         {\n            string htmlContent = File.ReadAllText(htmlFile.FullName);\n            \n            PsetDefinition pset = new PsetDefinition();\n            \n            // Extract core data\n            pset.Name = ExtractSetName(htmlContent);\n            pset.IfcVersion = NormalizeIfcVersion(ExtractIfcVersionFromHeader(htmlContent));\n            \n            // Extract applicable classes and predefined types\n            var applicableData = ExtractApplicableClassesAndTypes(htmlContent);\n            pset.ApplicableClasses = applicableData.Classes;\n            pset.ApplicableType = applicableData.ApplicableType;\n            pset.PredefinedType = applicableData.PredefinedType;\n            \n            // Extract properties\n            pset.properties = ExtractProperties(htmlContent, htmlFile.DirectoryName, psetOrQtoSet);\n\n            return pset;\n         }\n         catch (Exception ex)\n         {\n            throw new Exception($\"Failed to parse HTML file {htmlFile.FullName}: {ex.Message}\", ex);\n         }\n      }\n\n      /// <summary>\n      /// Extract Set name from HTML h1 tag (Pset_ or Qto_)\n      /// </summary>\n      private string ExtractSetName(string htmlContent)\n      {\n         // Pattern: <h1>7.2.5.1 Qto_ActuatorBaseQuantities</h1> or <h1>6.1.4.23 Pset_WallCommon</h1>\n         var match = Regex.Match(htmlContent, @\"<h1[^>]*>.*?(Pset_\\w+|Qto_\\w+)</h1>\", RegexOptions.Singleline);\n         if (!match.Success)\n         {\n            throw new Exception(\"Property Set or QTO Set name not found in HTML h1 tag\");\n         }\n         return match.Groups[1].Value;\n      }\n\n      /// <summary>\n      /// Extract IFC Version from header section\n      /// </summary>\n      private string ExtractIfcVersionFromHeader(string htmlContent)\n      {\n         // Pattern: <header><p>IFC 4.3.2.0 (IFC4X3_ADD2)</p>\n         var headerMatch = Regex.Match(htmlContent, @\"<header>.*?<p>(.*?)\\s*\\(([^)]+)\\)\", RegexOptions.Singleline);\n         if (headerMatch.Success)\n         {\n            return headerMatch.Groups[2].Value; // IFC4X3_ADD2\n         }\n         \n         throw new Exception(\"IFC Version not found in HTML header section\");\n      }\n\n      /// <summary>\n      /// Normalize IFC version to match XML parser format\n      /// </summary>\n      private string NormalizeIfcVersion(string ifcVersion)\n      {\n         if (ifcVersion.StartsWith(\"2\"))\n         {\n            if (ifcVersion.Equals(\"2X\", StringComparison.CurrentCultureIgnoreCase)\n               || ifcVersion.Equals(\"2X2\", StringComparison.CurrentCultureIgnoreCase)\n               || ifcVersion.Equals(\"2.X\", StringComparison.CurrentCultureIgnoreCase))\n               return \"IFC2X2\";\n            else if (ifcVersion.StartsWith(\"IFC2X3\", StringComparison.CurrentCultureIgnoreCase))\n               return \"IFC2X3\";\n            else\n               return \"IFC\" + ifcVersion.ToUpper();\n         }\n         else if (ifcVersion.StartsWith(\"IFC4X3\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            return \"IFC4X3\";\n         }\n         else if (ifcVersion.StartsWith(\"IFC4\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            return ifcVersion.ToUpper();\n         }\n         else\n         {\n            throw new Exception($\"Unrecognized IFC version: {ifcVersion}\");\n         }\n      }\n\n      /// <summary>\n      /// Extract applicable classes and predefined types\n      /// </summary>\n      private (List<string> Classes, string ApplicableType, string PredefinedType) ExtractApplicableClassesAndTypes(string htmlContent)\n      {\n         var classes = new List<string>();\n         string applicableType = null;\n         string predefinedType = null;\n         \n         // Find applicable entities section\n         var section = ExtractSection(htmlContent, \"Applicable entities\");\n         if (string.IsNullOrEmpty(section))\n         {\n            throw new Exception(\"Applicable entities section not found\");\n         }\n         \n         // Pattern: <li><a href=\"IfcWall.htm\">IfcWall</a></li> or <li><a href=\"IfcCableSegment.htm\">IfcCableSegment</a>/CORESEGMENT</li>\n         var matches = Regex.Matches(section, @\"<li><a href=\"\"(\\w+)\\.htm\"\">(\\w+)</a>(?:/(\\w+))?</li>\", RegexOptions.Singleline);\n         \n         var allClassNames = new List<string>();\n         var predefinedTypes = new List<string>();\n         \n         foreach (Match match in matches)\n         {\n            string className = match.Groups[2].Value; // IfcWall, IfcCableSegment\n            allClassNames.Add(className);\n            \n            if (match.Groups[3].Success)\n            {\n               predefinedTypes.Add(match.Groups[3].Value); // CORESEGMENT\n            }\n         }\n         \n         classes = allClassNames;\n         \n         // Set ApplicableType and PredefinedType (following XML parser logic)\n         if (allClassNames.Count > 0)\n         {\n            applicableType = allClassNames[0]; // Use only the first class name, ignore others\n         }\n         \n         if (predefinedTypes.Count > 0)\n         {\n            predefinedType = predefinedTypes.LastOrDefault();\n         }\n         \n         return (classes, applicableType, predefinedType);\n      }\n\n      /// <summary>\n      /// Extract properties from HTML table\n      /// </summary>\n      private HashSet<PsetProperty> ExtractProperties(string htmlContent, string folderPath, Dictionary<ItemsInPsetQtoDefs, string> psetOrQtoSet)\n      {\n         var properties = new HashSet<PsetProperty>(new PropertyComparer());\n         \n         // Find properties table\n         var tableSection = ExtractPropertiesTable(htmlContent);\n         if (string.IsNullOrEmpty(tableSection))\n         {\n            throw new Exception(\"Properties table not found in HTML\");\n         }\n         \n         // Extract table rows\n         var rows = ExtractTableRows(tableSection);\n         \n         foreach (var row in rows)\n         {\n            var prop = ParsePropertyRow(row, folderPath, psetOrQtoSet);\n            if (prop != null)\n            {\n               properties.Add(prop);\n            }\n         }\n         \n         return properties;\n      }\n\n      /// <summary>\n      /// Extract properties table from HTML\n      /// </summary>\n      private string ExtractPropertiesTable(string htmlContent)\n      {\n         // Find the properties section\n         var propertiesSection = ExtractSection(htmlContent, \"Properties\");\n         if (string.IsNullOrEmpty(propertiesSection))\n         {\n            return null;\n         }\n         \n         // Pattern: <table>...</table>\n         var tableMatch = Regex.Match(propertiesSection, @\"<table[^>]*>(.*?)</table>\", RegexOptions.Singleline);\n         return tableMatch.Success ? tableMatch.Groups[1].Value : null;\n      }\n\n      /// <summary>\n      /// Extract table rows from table HTML\n      /// </summary>\n      private List<string> ExtractTableRows(string tableHtml)\n      {\n         var rows = new List<string>();\n         \n         // Pattern: <tbody>...</tbody>\n         var tbodyMatch = Regex.Match(tableHtml, @\"<tbody[^>]*>(.*?)</tbody>\", RegexOptions.Singleline);\n         if (!tbodyMatch.Success)\n         {\n            return rows;\n         }\n         \n         // Pattern: <tr>...</tr>\n         var rowMatches = Regex.Matches(tbodyMatch.Groups[1].Value, @\"<tr[^>]*>(.*?)</tr>\", RegexOptions.Singleline);\n         foreach (Match match in rowMatches)\n         {\n            rows.Add(match.Groups[1].Value);\n         }\n         \n         return rows;\n      }\n\n      /// <summary>\n      /// Parse individual property row\n      /// </summary>\n      private PsetProperty ParsePropertyRow(string rowHtml, string folderPath, Dictionary<ItemsInPsetQtoDefs, string> psetOrQtoSet)\n      {\n         var cells = ExtractTableCells(rowHtml);\n         bool isQtoSet = psetOrQtoSet[ItemsInPsetQtoDefs.PropertySetOrQtoSetDef].Equals(\"QtoSetDef\");\n         \n         // QTO format: Name | Data Type | Description (3 cells)\n         // Pset format: Name | Property Type | Data Type | Description (4 cells)\n         int expectedCells = isQtoSet ? 3 : 4;\n         \n         if (cells.Count < expectedCells)\n         {\n            throw new Exception($\"Property row has insufficient cells (expected {expectedCells}, found {cells.Count})\");\n         }\n         \n         try\n         {\n            var prop = new PsetProperty();\n            \n            // Extract basic property data\n            prop.Name = StripHtmlTags(cells[0]).Trim();\n            \n            if (isQtoSet)\n            {\n               // QTO format: Name | Data Type | Description\n               string quantityType = ExtractDataTypeLink(cells[1]); // IfcQuantityLength, etc.\n               prop.PropertyType = MapQuantityType(quantityType);\n            }\n            else\n            {\n               // Pset format: Name | Property Type | Data Type | Description\n               string propertyType = ExtractPropertyTypeLink(cells[1]);\n               string dataType = ExtractDataTypeLink(cells[2]);\n               prop.PropertyType = MapPropertyType(propertyType, dataType, folderPath, psetOrQtoSet);\n            }\n            \n            return prop;\n         }\n         catch (Exception ex)\n         {\n            throw new Exception($\"Failed to parse property row: {ex.Message}\", ex);\n         }\n      }\n\n      /// <summary>\n      /// Extract table cells from row HTML\n      /// </summary>\n      private List<string> ExtractTableCells(string rowHtml)\n      {\n         var cells = new List<string>();\n         // Pattern: <td>...</td>\n         var cellMatches = Regex.Matches(rowHtml, @\"<td[^>]*>(.*?)</td>\", RegexOptions.Singleline);\n         \n         foreach (Match match in cellMatches)\n         {\n            cells.Add(match.Groups[1].Value);\n         }\n         \n         return cells;\n      }\n\n      /// <summary>\n      /// Extract property type from link\n      /// </summary>\n      private string ExtractPropertyTypeLink(string cellHtml)\n      {\n         // Pattern: <a href=\"IfcPropertySingleValue.htm\">IfcPropertySingleValue</a>\n         var match = Regex.Match(cellHtml, @\"<a href=\"\"(\\w+)\\.htm\"\">(\\w+)</a>\");\n         return match.Success ? match.Groups[2].Value : null;\n      }\n\n      /// <summary>\n      /// Extract data type from link, handling compound types\n      /// </summary>\n      private string ExtractDataTypeLink(string cellHtml)\n      {\n         // Pattern: <a href=\"IfcPowerMeasure.htm\">IfcPowerMeasure</a> or <a href=\"Type1.htm\">Type1</a>/<a href=\"Type2.htm\">Type2</a>\n         var matches = Regex.Matches(cellHtml, @\"<a href=\"\"(\\w+)\\.htm\"\">(\\w+)</a>\");\n         \n         if (matches.Count == 1)\n         {\n            return matches[0].Groups[2].Value;\n         }\n         else if (matches.Count > 1)\n         {\n            // Compound type - join with \"/\"\n            var types = matches.Cast<Match>().Select(m => m.Groups[2].Value).ToArray();\n            return string.Join(\"/\", types);\n         }\n         \n         throw new Exception(\"Data type not found in HTML table cell\");\n      }\n\n      /// <summary>\n      /// Map HTML quantity type to internal PropertyDataType (for QTO files)\n      /// </summary>\n      private PropertyDataType MapQuantityType(string htmlQuantityType)\n      {\n         if (string.IsNullOrEmpty(htmlQuantityType))\n         {\n            throw new Exception(\"Quantity type not found in HTML table cell\");\n         }\n\n         switch (htmlQuantityType.ToLower())\n         {\n            case \"ifcquantitylength\":\n               return new PropertySingleValue { DataType = \"IfcLengthMeasure\" };\n               \n            case \"ifcquantityarea\":\n               return new PropertySingleValue { DataType = \"IfcAreaMeasure\" };\n               \n            case \"ifcquantityvolume\":\n               return new PropertySingleValue { DataType = \"IfcVolumeMeasure\" };\n               \n            case \"ifcquantityweight\":\n               return new PropertySingleValue { DataType = \"IfcMassMeasure\" };\n               \n            case \"ifcquantitycount\":\n               return new PropertySingleValue { DataType = \"IfcCountMeasure\" };\n               \n            case \"ifcquantitytime\":\n               return new PropertySingleValue { DataType = \"IfcTimeMeasure\" };\n               \n            default:\n               // Default fallback\n               return new PropertySingleValue { DataType = \"IfcLabel\" };\n         }\n      }\n\n      /// <summary>\n      /// Map HTML property type to internal PropertyDataType\n      /// </summary>\n      private PropertyDataType MapPropertyType(string htmlPropertyType, string dataType, string folderPath, Dictionary<ItemsInPsetQtoDefs, string> psetOrQtoSet)\n      {\n         if (string.IsNullOrEmpty(htmlPropertyType))\n         {\n            throw new Exception(\"Property type not found in HTML table cell\");\n         }\n         \n         switch (htmlPropertyType.ToLower())\n         {\n            case \"ifcpropertysinglevalue\":\n               return new PropertySingleValue { DataType = dataType };\n               \n            case \"ifcpropertyenumeratedvalue\":\n               return ParseEnumeratedValue(dataType, folderPath);\n               \n            case \"ifcpropertytablevalue\":\n               return ParseTableValue(dataType);\n               \n            case \"ifcpropertyboundedvalue\":\n               return new PropertyBoundedValue { DataType = dataType };\n               \n            case \"ifcpropertylistvalue\":\n               return new PropertyListValue { DataType = dataType };\n               \n            case \"ifcpropertyreferencevalue\":\n               return new PropertyReferenceValue { RefEntity = dataType };\n               \n            default:\n               throw new Exception($\"Unknown property type: {htmlPropertyType}\");\n         }\n      }\n\n      /// <summary>\n      /// Parse enumerated value with caching\n      /// </summary>\n      private PropertyEnumeratedValue ParseEnumeratedValue(string enumName, string folderPath)\n      {\n         var pev = new PropertyEnumeratedValue();\n         pev.Name = enumName; // e.g., \"PEnum_CoreColoursEnum\"\n         \n         // Check cache first\n         if (enumCache.ContainsKey(enumName))\n         {\n            pev.EnumDef = enumCache[enumName];\n            return pev;\n         }\n         \n         // Load from HTML file\n         string enumFilePath = Path.Combine(folderPath, enumName + \".htm\");\n         if (File.Exists(enumFilePath))\n         {\n            var enumItems = ParseEnumFile(enumFilePath);\n            enumCache[enumName] = enumItems; // Cache for next use\n            pev.EnumDef = enumItems;\n         }\n         else\n         {\n            throw new Exception($\"Enumeration file not found: {enumFilePath}\");\n         }\n         \n         return pev;\n      }\n\n      /// <summary>\n      /// Parse enumeration file\n      /// </summary>\n      private List<PropertyEnumItem> ParseEnumFile(string enumFilePath)\n      {\n         try\n         {\n            string htmlContent = File.ReadAllText(enumFilePath);\n            var enumItems = new List<PropertyEnumItem>();\n            \n            // Pattern: <td><code>BLACK</code></td>\n            var matches = Regex.Matches(htmlContent, @\"<td[^>]*><code>([^<]+)</code>\");\n            \n            foreach (Match match in matches)\n            {\n               var enumItem = new PropertyEnumItem();\n               enumItem.EnumItem = match.Groups[1].Value; // BLACK, BLUE, etc.\n               enumItem.Aliases = new List<NameAlias>();\n               enumItems.Add(enumItem);\n            }\n            \n            if (enumItems.Count == 0)\n            {\n               throw new Exception(\"No enumeration values found in file\");\n            }\n            \n            return enumItems;\n         }\n         catch (Exception ex)\n         {\n            throw new Exception($\"Failed to parse enumeration file {enumFilePath}: {ex.Message}\", ex);\n         }\n      }\n\n      /// <summary>\n      /// Parse table value with compound data types\n      /// </summary>\n      private PropertyTableValue ParseTableValue(string compoundDataType)\n      {\n         var tableValue = new PropertyTableValue();\n         \n         // Parse compound types like \"IfcPowerMeasure/IfcThermodynamicTemperatureMeasure\"\n         if (compoundDataType.Contains(\"/\"))\n         {\n            var types = compoundDataType.Split('/');\n            tableValue.DefinedValueType = types[0];    // IfcPowerMeasure\n            tableValue.DefiningValueType = types[1];   // IfcThermodynamicTemperatureMeasure\n         }\n         else\n         {\n            tableValue.DefinedValueType = compoundDataType;\n            tableValue.DefiningValueType = compoundDataType;\n         }\n         \n         return tableValue;\n      }\n\n      /// <summary>\n      /// Extract section content by title\n      /// </summary>\n      private string ExtractSection(string htmlContent, string sectionTitle)\n      {\n         // Pattern: <h2><a class=\"anchor\" id=\"7.2.5.1.3-Properties\"></a> 7.2.5.1.3 Properties <a class=\"link\">...</a></h2>\n         var pattern = $@\"<h2><a class=\"\"anchor\"\"[^>]*></a>\\s*[\\d\\.]+\\s+{Regex.Escape(sectionTitle)}\\s*<a class=\"\"link\"\"[^>]*>.*?</h2>(.*?)(?=<h2|</div>|$)\";\n         var match = Regex.Match(htmlContent, pattern, RegexOptions.Singleline | RegexOptions.IgnoreCase);\n         \n         return match.Success ? match.Groups[1].Value : \"\";\n      }\n\n      /// <summary>\n      /// Strip HTML tags from content\n      /// </summary>\n      private string StripHtmlTags(string html)\n      {\n         // Pattern: <tag> or <tag attribute=\"value\">\n         return Regex.Replace(html, @\"<[^>]+>\", \"\").Trim();\n      }\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/IFC Shared Parameters-RevitIFCBuiltIn-Type_ALL.txt",
    "content": "# This is a Revit shared parameter file.\n# Do not edit manually.\n*META\tVERSION\tMINVERSION\nMETA\t2\t1\n*GROUP\tID\tNAME\n#\nGROUP\t3\tIfcDoorLiningProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t92f9b046-b15e-42bd-baea-369a015b9156\tIfcDoorLiningProperties.CasingDepth[Type]\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb135fe15-c89f-47e6-a590-16701b7f1d45\tIfcDoorLiningProperties.CasingThickness[Type]\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5b3062b1-0ad1-44ee-ae39-bebc572a9cf4\tIfcDoorLiningProperties.LiningDepth[Type]\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0ad13bdd-a89a-4f20-8609-8fc17c3477e4\tIfcDoorLiningProperties.LiningOffset[Type]\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\t8aa4ffe3-5e5c-495a-817d-7979fdd4d5e7\tIfcDoorLiningProperties.LiningThickness[Type]\tLENGTH\t\t3\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tf1565685-f68c-4b36-9803-041b31c7ae80\tIfcDoorLiningProperties.LiningToPanelOffsetX[Type]\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\t3156d749-4efe-434b-84d6-748788f161b5\tIfcDoorLiningProperties.LiningToPanelOffsetY[Type]\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\td25dfef4-d7d2-4790-87e3-acdccc364c3e\tIfcDoorLiningProperties.ThresholdDepth[Type]\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t517d7a2f-2552-4512-b54e-97c58f6d61dc\tIfcDoorLiningProperties.ThresholdOffset[Type]\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\tebc31023-08de-4dcf-ba62-a89f16983cff\tIfcDoorLiningProperties.ThresholdThickness[Type]\tLENGTH\t\t3\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t47ac05fc-2ff6-420e-b3bb-cdcd4e0a5f26\tIfcDoorLiningProperties.TransomOffset[Type]\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\t9d4e7783-2e14-4b54-9674-5b1f51e4e557\tIfcDoorLiningProperties.TransomThickness[Type]\tLENGTH\t\t3\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t4\tIfcDoorPanelProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t25f566ef-a0d2-4784-88dc-69821dcbb591\tIfcDoorPanelProperties.PanelDepth[Type]\tLENGTH\t\t4\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8dec2ef0-b531-4a8e-a003-2402019d7c72\tIfcDoorPanelProperties.PanelOperation[Type]\tTEXT\t\t4\t1\tIfcLabel\t1\nPARAM\tc8444bb5-6eec-4b71-97e3-b65271233de0\tIfcDoorPanelProperties.PanelPosition[Type]\tTEXT\t\t4\t1\tIfcLabel\t1\nPARAM\t6a48a5e8-2e46-4f8e-b4af-a48c49e48964\tIfcDoorPanelProperties.PanelWidth[Type]\tNUMBER\t\t4\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t5\tIfcFuelProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t37031346-c7ab-4032-aa3f-bd95d01757c7\tIfcFuelProperties.CarbonContent[Type]\tNUMBER\t\t5\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tef703772-4618-43a3-8639-58048fe9f3af\tIfcFuelProperties.CombustionTemperature[Type]\tNUMBER\t\t5\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t66bbb418-6906-4083-ba31-f256beb35439\tIfcFuelProperties.HigherHeatingValue[Type]\tNUMBER\t\t5\t1\tIfcHeatingValueMeasure\t1\nPARAM\t0f2986d3-a8dd-4aed-a7db-f169b958ebc6\tIfcFuelProperties.LowerHeatingValue[Type]\tNUMBER\t\t5\t1\tIfcHeatingValueMeasure\t1\n#\nGROUP\t6\tIfcGeneralMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t08485ab0-3052-472a-a66d-125d732478ec\tIfcGeneralMaterialProperties.MassDensity[Type]\tMASS_DENSITY\t\t6\t1\tIfcMassDensityMeasure\t1\nPARAM\tf78bbd9e-9023-460e-be67-b74ffebe7c55\tIfcGeneralMaterialProperties.MolecularWeight[Type]\tNUMBER\t\t6\t1\tIfcMolecularWeightMeasure\t1\nPARAM\t3b48dd4b-c349-41ef-bc94-c6b834d06af5\tIfcGeneralMaterialProperties.Porosity[Type]\tNUMBER\t\t6\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t7\tIfcHygroscopicMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tce2d6709-22b1-4f7d-a3fa-9f9e9cc45972\tIfcHygroscopicMaterialProperties.IsothermalMoistureCapacity[Type]\tNUMBER\t\t7\t1\tIfcIsothermalMoistureCapacityMeasure\t1\nPARAM\t5f6a7c0c-af71-4afc-9f16-bee7b2b2c296\tIfcHygroscopicMaterialProperties.LowerVaporResistanceFactor[Type]\tNUMBER\t\t7\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t59004aba-cc6a-4cb8-b46e-ad4ab6785cba\tIfcHygroscopicMaterialProperties.MoistureDiffusivity[Type]\tNUMBER\t\t7\t1\tIfcMoistureDiffusivityMeasure\t1\nPARAM\t8e17b1e2-ddb9-4367-aea7-85e9f2660a87\tIfcHygroscopicMaterialProperties.UpperVaporResistanceFactor[Type]\tNUMBER\t\t7\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td31e7f81-8a5f-4956-9d05-0889d047325c\tIfcHygroscopicMaterialProperties.VaporPermeability[Type]\tNUMBER\t\t7\t1\tIfcVaporPermeabilityMeasure\t1\n#\nGROUP\t8\tIfcMechanicalConcreteMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4253ac21-27ae-4e09-b395-5a6aeedf9f3f\tIfcMechanicalConcreteMaterialProperties.AdmixturesDescription[Type]\tTEXT\t\t8\t1\tIfcText\t1\nPARAM\t64f1b7bf-8c63-40dd-95ac-44a214ddee4a\tIfcMechanicalConcreteMaterialProperties.CompressiveStrength[Type]\tNUMBER\t\t8\t1\tIfcPressureMeasure\t1\nPARAM\t38087230-ac60-455d-840f-40215d445e53\tIfcMechanicalConcreteMaterialProperties.MaxAggregateSize[Type]\tLENGTH\t\t8\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t00cb9dde-78b3-4678-b473-f532f2eebbb0\tIfcMechanicalConcreteMaterialProperties.ProtectivePoreRatio[Type]\tNUMBER\t\t8\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\ta1888bfd-8dab-4311-b129-dc2552d932dd\tIfcMechanicalConcreteMaterialProperties.WaterImpermeability[Type]\tTEXT\t\t8\t1\tIfcText\t1\nPARAM\t6f4dd356-fa8b-4af7-8898-3394325bf48a\tIfcMechanicalConcreteMaterialProperties.Workability[Type]\tTEXT\t\t8\t1\tIfcText\t1\n#\nGROUP\t9\tIfcMechanicalMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta38fcbae-9c8c-45c0-9390-43fa2a9a9349\tIfcMechanicalMaterialProperties.DynamicViscosity[Type]\tNUMBER\t\t9\t1\tIfcDynamicViscosityMeasure\t1\nPARAM\t24f1eedc-7357-4bcb-bd0d-4d6172ea0ab6\tIfcMechanicalMaterialProperties.PoissonRatio[Type]\tNUMBER\t\t9\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t159af2ad-daa9-4570-83eb-ba54e53f951a\tIfcMechanicalMaterialProperties.ShearModulus[Type]\tNUMBER\t\t9\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tddb278c4-28bf-42e8-892e-d122898da67f\tIfcMechanicalMaterialProperties.ThermalExpansionCoefficient[Type]\tNUMBER\t\t9\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\t42b125e7-513e-4877-a18a-f4a4c7b022c6\tIfcMechanicalMaterialProperties.YoungModulus[Type]\tNUMBER\t\t9\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t10\tIfcMechanicalSteelMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t85a15c1a-ed8e-4c25-ac6f-1b89401d26da\tIfcMechanicalSteelMaterialProperties.HardeningModule[Type]\tNUMBER\t\t10\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tef0475eb-7478-4534-9a6e-5d302e31f688\tIfcMechanicalSteelMaterialProperties.PlasticStrain[Type]\tNUMBER\t\t10\t1\tIfcPositiveRatioMeasure\t1\nPARAM\te95ce7b4-7eee-4993-9b98-e44a43621e8b\tIfcMechanicalSteelMaterialProperties.ProportionalStress[Type]\tNUMBER\t\t10\t1\tIfcPressureMeasure\t1\nPARAM\t55301e07-c365-4143-8376-04a9d9d535cf\tIfcMechanicalSteelMaterialProperties.Relaxations[Type]\tNUMBER\t\t10\t1\tIfcRelaxation\t1\nPARAM\t5b79b2e5-8035-4361-8d73-334d905dfcf0\tIfcMechanicalSteelMaterialProperties.UltimateStrain[Type]\tNUMBER\t\t10\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t171a9421-eb50-4711-91d2-63c4ed74bca3\tIfcMechanicalSteelMaterialProperties.UltimateStress[Type]\tNUMBER\t\t10\t1\tIfcPressureMeasure\t1\nPARAM\t0f7fd825-6b69-41bf-a1f5-18430f35c300\tIfcMechanicalSteelMaterialProperties.YieldStress[Type]\tNUMBER\t\t10\t1\tIfcPressureMeasure\t1\n#\nGROUP\t11\tIfcOpticalMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2ea9790f-dae5-4767-b393-33181660131a\tIfcOpticalMaterialProperties.SolarReflectanceBack[Type]\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t84d2baa5-87da-4a22-ba2e-f476ebdf65fd\tIfcOpticalMaterialProperties.SolarReflectanceFront[Type]\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tb15ebfd3-06ce-489e-b489-4e6136104278\tIfcOpticalMaterialProperties.SolarTransmittance[Type]\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7dc7cae9-2b08-4fd6-aa1c-0831f02c4241\tIfcOpticalMaterialProperties.ThermalIrEmissivityBack[Type]\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t2f69cfd2-4447-42a9-bdca-af00afd91d30\tIfcOpticalMaterialProperties.ThermalIrEmissivityFront[Type]\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t61cf4c99-8e9c-4a2a-a053-54646f6a69ab\tIfcOpticalMaterialProperties.ThermalIrTransmittance[Type]\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tdb18b563-49ef-4ea0-ae6e-0d94d0ae0450\tIfcOpticalMaterialProperties.VisibleReflectanceBack[Type]\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t20817d84-ed31-4dde-b6b0-e4066f070273\tIfcOpticalMaterialProperties.VisibleReflectanceFront[Type]\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t2ab16d65-ae92-488f-9fa3-790b80708349\tIfcOpticalMaterialProperties.VisibleTransmittance[Type]\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t12\tIfcPermeableCoveringProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48a13c2f-be12-4b7d-8e0e-31590b982136\tIfcPermeableCoveringProperties.FrameDepth[Type]\tLENGTH\t\t12\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t220fe02d-3d97-49ed-a286-9c28d4e7d18d\tIfcPermeableCoveringProperties.FrameThickness[Type]\tLENGTH\t\t12\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t21330fea-14da-443d-9087-a2e1a1604186\tIfcPermeableCoveringProperties.OperationType[Type]\tTEXT\t\t12\t1\tIfcLabel\t1\nPARAM\t92c93d7d-9ac2-4e72-b141-fa1c6b8c9a64\tIfcPermeableCoveringProperties.PanelPosition[Type]\tTEXT\t\t12\t1\tIfcLabel\t1\n#\nGROUP\t13\tIfcProductsOfCombustionProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4840f7b4-9e75-4f10-8d43-30757473bc51\tIfcProductsOfCombustionProperties.CO2Content[Type]\tNUMBER\t\t13\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7965f901-8fe5-4c9c-9d73-a3f3d9df89b9\tIfcProductsOfCombustionProperties.COContent[Type]\tNUMBER\t\t13\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tb2185af1-2685-4c6c-8e45-22d6cb4bb1db\tIfcProductsOfCombustionProperties.N20Content[Type]\tNUMBER\t\t13\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7b021f1d-0315-42c6-b685-df43df0a9c30\tIfcProductsOfCombustionProperties.SpecificHeatCapacity[Type]\tNUMBER\t\t13\t1\tIfcSpecificHeatCapacityMeasure\t1\n#\nGROUP\t14\tIfcReinforcementDefinitionProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb0a49d0f-ca11-4294-99a6-9cf87fbf66d5\tIfcReinforcementDefinitionProperties.DefinitionType[Type]\tTEXT\t\t14\t1\tIfcLabel\t1\nPARAM\ta654d1c7-f3fa-44e2-884d-1f25bd47986c\tIfcReinforcementDefinitionProperties.ReinforcementSectionDefinitions[Type]\tTEXT\t\t14\t1\tIfcLabel\t1\n#\nGROUP\t15\tIfcThermalMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t68ff35e6-dd40-4a79-a435-4030d2af984b\tIfcThermalMaterialProperties.BoilingPoint[Type]\tNUMBER\t\t15\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t8174d672-67b7-4622-b43a-fba25dbc0d7e\tIfcThermalMaterialProperties.FreezingPoint[Type]\tNUMBER\t\t15\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tbfa331db-620f-4b08-834c-1e360306ff1b\tIfcThermalMaterialProperties.SpecificHeatCapacity[Type]\tNUMBER\t\t15\t1\tIfcSpecificHeatCapacityMeasure\t1\nPARAM\tb7677629-48cd-4d31-8616-f0a10901b290\tIfcThermalMaterialProperties.ThermalConductivity[Type]\tNUMBER\t\t15\t1\tIfcThermalConductivityMeasure\t1\n#\nGROUP\t16\tIfcWaterProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a9fce38-b04c-40c8-9b44-71b6fe99eb5d\tIfcWaterProperties.AcidityConcentration[Type]\tNUMBER\t\t16\t1\tIfcIonConcentrationMeasure\t1\nPARAM\t1b0e7743-ef87-4b25-a6ba-3fbc4e82622a\tIfcWaterProperties.AlkalinityConcentration[Type]\tNUMBER\t\t16\t1\tIfcIonConcentrationMeasure\t1\nPARAM\tfc99d3dc-b85d-4ed2-9482-0db1c6be987c\tIfcWaterProperties.DissolvedSolidsContent[Type]\tNUMBER\t\t16\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tc6665072-8deb-4204-b074-2dfa0dcb03cc\tIfcWaterProperties.Hardness[Type]\tNUMBER\t\t16\t1\tIfcIonConcentrationMeasure\t1\nPARAM\t957b39e4-0d66-448b-9a57-0126124e823d\tIfcWaterProperties.ImpuritiesContent[Type]\tNUMBER\t\t16\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tfef2853c-2c83-4f47-812f-537bee376e19\tIfcWaterProperties.IsPotable[Type]\tNUMBER\t\t16\t1\tBoolean\t1\nPARAM\tb2b02569-a1a4-4d1e-85d3-7077cfebb6a7\tIfcWaterProperties.PHLevel[Type]\tNUMBER\t\t16\t1\tIfcPHMeasure\t1\n#\nGROUP\t17\tIfcWindowLiningProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td7498563-1114-4445-b602-e7a1e86c020c\tIfcWindowLiningProperties.FirstMullionOffset[Type]\tNUMBER\t\t17\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t491217ac-605b-44c0-9222-8db84fde541d\tIfcWindowLiningProperties.FirstTransomOffset[Type]\tNUMBER\t\t17\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tfac29451-1e72-4361-9174-bc4532410632\tIfcWindowLiningProperties.LiningDepth[Type]\tLENGTH\t\t17\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t106eaf02-86f3-46ec-82bd-fc3f355e74ce\tIfcWindowLiningProperties.LiningOffset[Type]\tLENGTH\t\t17\t1\tIfcLengthMeasure\t1\nPARAM\t833c86f9-c51b-4368-a24d-caef640cbc1a\tIfcWindowLiningProperties.LiningThickness[Type]\tLENGTH\t\t17\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tf1a36a64-1d9c-4900-a49e-b9e04d3503c8\tIfcWindowLiningProperties.LiningToPanelOffsetX[Type]\tLENGTH\t\t17\t1\tIfcLengthMeasure\t1\nPARAM\tf31c5a1f-ed7e-480a-b3b7-b6005035115d\tIfcWindowLiningProperties.LiningToPanelOffsetY[Type]\tLENGTH\t\t17\t1\tIfcLengthMeasure\t1\nPARAM\tcc559ca1-ae0d-4f96-93e5-079113802312\tIfcWindowLiningProperties.MullionThickness[Type]\tLENGTH\t\t17\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t5e4a6e16-f61a-4da2-8fa0-0bb32f9ca2d8\tIfcWindowLiningProperties.SecondMullionOffset[Type]\tNUMBER\t\t17\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\taaa4666e-80a6-4fc5-9b24-297e390b2794\tIfcWindowLiningProperties.SecondTransomOffset[Type]\tNUMBER\t\t17\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t15ad8885-bd95-4663-b119-54ce0c3212fb\tIfcWindowLiningProperties.TransomThickness[Type]\tLENGTH\t\t17\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t18\tIfcWindowPanelProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfe3f45d7-304a-4483-9023-3e3b224c71cb\tIfcWindowPanelProperties.FrameDepth[Type]\tLENGTH\t\t18\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td3af107d-7f9e-4e6f-a726-f9aae706b11a\tIfcWindowPanelProperties.FrameThickness[Type]\tLENGTH\t\t18\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc7984296-5ee2-42d3-94ab-312df9b4e9d6\tIfcWindowPanelProperties.OperationType[Type]\tTEXT\t\t18\t1\tIfcLabel\t1\nPARAM\tb7e38a0c-098e-4d8b-873a-82eb643051c6\tIfcWindowPanelProperties.PanelPosition[Type]\tTEXT\t\t18\t1\tIfcLabel\t1\n#\nGROUP\t19\tPset_ActionRequest\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf9570f6f-4c83-4914-83af-7ca58d36bb2a\tPset_ActionRequest.RequestComments[Type]\tTEXT\t\t19\t1\tIfcText\t1\nPARAM\t1816931d-d252-40b0-9711-52369b261e21\tPset_ActionRequest.RequestDescription[Type]\tTEXT\t\t19\t1\tIfcText\t1\nPARAM\t5748e5d9-f3c8-484f-9803-2bb4ce6ea1b2\tPset_ActionRequest.RequestSourceLabel[Type]\tTEXT\t\t19\t1\tIfcLabel\t1\nPARAM\t443cc994-617c-46b9-80b7-e64d5df929dd\tPset_ActionRequest.RequestSourceName[Type]\tMULTILINETEXT\t\t19\t1\tIfcPerson\t1\nPARAM\t15d2334d-8baf-4087-af9a-da19b81bfc66\tPset_ActionRequest.RequestSourceType[Type]\tTEXT\t\t19\t1\tPEnum_RequestSourceType\t1\nPARAM\t9a2da861-95a2-4699-88b7-9ab5308f0cf0\tPset_ActionRequest.Status[Type]\tTEXT\t\t19\t1\tPEnum_RequestStatus\t1\n#\nGROUP\t20\tPset_ActorCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8b629d57-4f17-4ebe-9f46-d6d0c790139e\tPset_ActorCommon.ActorCategory[Type]\tTEXT\t\t20\t1\tIfcLabel\t1\nPARAM\t9fdfc0fb-762f-4977-b246-723f3676f1e9\tPset_ActorCommon.Category[Type]\tTEXT\t\t20\t1\tIfcLabel\t1\nPARAM\td561cc0d-b78e-46dd-bbfe-d431d5d116e7\tPset_ActorCommon.NumberOfActors[Type]\tINTEGER\t\t20\t1\tIfcCountMeasure\t1\nPARAM\t864f4214-8a81-4a36-b233-23a0bfdbb7b2\tPset_ActorCommon.SkillLevel[Type]\tTEXT\t\t20\t1\tIfcLabel\t1\n#\nGROUP\t21\tPset_ActuatorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tefa57a20-38b6-4279-b274-e31e78ea3679\tPset_ActuatorPHistory.Position[Type]\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\nPARAM\t661d9b70-f1e4-4c50-aa1e-eb8601153a70\tPset_ActuatorPHistory.PositionHistory[Type]\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\nPARAM\t90734c34-34e0-4d19-8606-e1fb49a90b9a\tPset_ActuatorPHistory.Quality[Type]\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\nPARAM\tadcaa6a2-3249-4786-9741-d827528243fa\tPset_ActuatorPHistory.QualityHistory[Type]\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\nPARAM\tb70fbfc6-036c-4679-a612-a39322ef3117\tPset_ActuatorPHistory.Status[Type]\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\nPARAM\t6552af10-cb4d-4ed7-9732-d15c27dfc11a\tPset_ActuatorPHistory.StatusHistory[Type]\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\n#\nGROUP\t22\tPset_ActuatorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t567d886a-48da-4dbd-81fe-30db01d1aef8\tPset_ActuatorTypeCommon.ActuatorApplication[Type]\tTEXT\t\t22\t1\tPEnum_ActuatorApplication\t1\nPARAM\tde4488bd-cfc7-4c88-a903-fd07d6fd59fe\tPset_ActuatorTypeCommon.ActuatorStatus[Type]\tTEXT\t\t22\t1\tPEnum_ElementStatus\t1\nPARAM\t5df7283f-6fe5-4a95-85d9-bd285bf64ed0\tPset_ActuatorTypeCommon.Application[Type]\tTEXT\t\t22\t1\tPEnum_ActuatorApplication\t1\nPARAM\tc0290bdb-4fa5-442d-b90b-9898b1a3c4e9\tPset_ActuatorTypeCommon.FailPosition[Type]\tTEXT\t\t22\t1\tPEnum_FailPosition\t1\nPARAM\t4b124d18-e511-4c3e-932f-9be83ef2877b\tPset_ActuatorTypeCommon.ManualOverride[Type]\tYESNO\t\t22\t1\tIfcBoolean\t1\nPARAM\tc62a2632-ec58-4984-9199-bdda161e0e5e\tPset_ActuatorTypeCommon.Reference[Type]\tTEXT\t\t22\t1\tIfcIdentifier\t1\nPARAM\ta9f89daa-42ad-43ae-8e1f-2994c625b8bf\tPset_ActuatorTypeCommon.Status[Type]\tTEXT\t\t22\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t23\tPset_ActuatorTypeElectricActuator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t79ed14c6-8417-4a61-b549-e361511c4c16\tPset_ActuatorTypeElectricActuator.ActuatorInputPower[Type]\tNUMBER\t\t23\t1\tIfcPowerMeasure\t1\nPARAM\t0fa5f3a4-5e43-4db6-b246-4a237d145d3e\tPset_ActuatorTypeElectricActuator.ControlPulseCurrent[Type]\tNUMBER\t\t23\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tbaa21f83-fd78-4412-8da7-c53380d2253a\tPset_ActuatorTypeElectricActuator.ElectricActuatorType[Type]\tTEXT\t\t23\t1\tPEnum_ElectricActuatorType\t1\n#\nGROUP\t24\tPset_ActuatorTypeHydraulicActuator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td813b66d-e6f0-46fd-bf72-605cacc1215e\tPset_ActuatorTypeHydraulicActuator.InputFlowrate[Type]\tNUMBER\t\t24\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t1e2d09a9-42a9-43fe-8100-55c068a4bbbb\tPset_ActuatorTypeHydraulicActuator.InputPressure[Type]\tNUMBER\t\t24\t1\tIfcPressureMeasure\t1\n#\nGROUP\t25\tPset_ActuatorTypeLinearActuation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1168baf7-1580-43e4-9b6c-8b7fe2d465fd\tPset_ActuatorTypeLinearActuation.Force[Type]\tNUMBER\t\t25\t1\tIfcForceMeasure\t1\nPARAM\t5410c333-280e-4e47-a593-a2c910920ab3\tPset_ActuatorTypeLinearActuation.Stroke[Type]\tLENGTH\t\t25\t1\tIfcLengthMeasure\t1\n#\nGROUP\t26\tPset_ActuatorTypePneumaticActuator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc7c58c17-759b-426a-a87f-4c450addc7bc\tPset_ActuatorTypePneumaticActuator.InputFlowrate[Type]\tNUMBER\t\t26\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tab07c83e-40e1-42a0-9f15-1dcb5d8a1ea1\tPset_ActuatorTypePneumaticActuator.InputPressure[Type]\tNUMBER\t\t26\t1\tIfcPressureMeasure\t1\n#\nGROUP\t27\tPset_ActuatorTypeRotationalActuation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcf2d78d6-6651-4c54-9f5b-1c9b088a886a\tPset_ActuatorTypeRotationalActuation.RangeAngle[Type]\tNUMBER\t\t27\t1\tIfcPlaneAngleMeasure\t1\nPARAM\te2eedbea-adf2-44be-b95c-0c23ddea716a\tPset_ActuatorTypeRotationalActuation.Torque[Type]\tNUMBER\t\t27\t1\tIfcTorqueMeasure\t1\n#\nGROUP\t28\tPset_Address\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8cba13ec-dbd4-4e0c-afe9-3fbc9407a857\tPset_Address.AddressLines[Type]\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\nPARAM\t40408af5-dba6-4edf-9d04-5537c87add65\tPset_Address.Country[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\tdb20ae73-236f-4000-8b48-3f244ae9c997\tPset_Address.Description[Type]\tTEXT\t\t28\t1\tIfcText\t1\nPARAM\t6face93f-d2e1-4bbb-ab83-4a7a712d5f0f\tPset_Address.ElectronicMailAddresses[Type]\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\nPARAM\ta85f3688-3b46-437d-aa3e-69deebcd240b\tPset_Address.FacsimileNumbers[Type]\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\nPARAM\t80cf2ac7-5bc8-458e-848d-99d7be0c4373\tPset_Address.InternalLocation[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\tff33441c-4db5-48e8-b38b-7e38a60a60bf\tPset_Address.MessagingIDs[Type]\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\nPARAM\t7921f5f8-d33d-4f4b-8405-e0416b3ef971\tPset_Address.PagerNumber[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\tbe3b7676-e58b-4e46-b802-47654999277f\tPset_Address.PostalBox[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t5b5e7a3e-43f7-4e7d-8909-72d39170edad\tPset_Address.PostalCode[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\tff230598-b451-420a-ad27-277adbb2f834\tPset_Address.Purpose[Type]\tTEXT\t\t28\t1\tPEnum_AddressType\t1\nPARAM\t9034cde4-d98b-4978-8269-7f707eb60c11\tPset_Address.Region[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t128f12c9-b6bc-453c-812c-4ed6813d3eed\tPset_Address.TelephoneNumbers[Type]\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\nPARAM\t5c11d229-0a35-470c-9238-2eec6bc1ed68\tPset_Address.Town[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\teea1dc09-4ed0-4a5a-ad2c-173ce4abd1db\tPset_Address.UserDefinedPurpose[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t62052ea0-cb10-45e6-a3fb-d7bc46811420\tPset_Address.WWWHomePageURL[Type]\tURL\t\t28\t1\tIfcURIReference\t1\n#\nGROUP\t29\tPset_AirSideSystemInformation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t44f8c41e-6d56-4881-b069-4bf03adc27e3\tPset_AirSideSystemInformation.AirflowSensible[Type]\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t3b8993d5-1e26-4812-a30c-36f0163d0495\tPset_AirSideSystemInformation.AirFlowSensible[Type]\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\te4817490-12be-4937-8530-62bdd645b2e9\tPset_AirSideSystemInformation.AirSideSystemDistributionType[Type]\tTEXT\t\t29\t1\tPEnum_AirSideSystemDistributionType\t1\nPARAM\tee014a2c-046d-405d-9ddd-a49c50ca7562\tPset_AirSideSystemInformation.AirSideSystemType[Type]\tTEXT\t\t29\t1\tPEnum_AirSideSystemType\t1\nPARAM\t2edbc3b1-23eb-41ef-b0e7-55ed60c39328\tPset_AirSideSystemInformation.ApplianceDiversity[Type]\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7b6aabde-fac3-4d9f-902b-255005aada36\tPset_AirSideSystemInformation.CoolingTemperatureDelta[Type]\tNUMBER\t\t29\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t6c0a12aa-34fd-419f-aa9c-a423917fe4aa\tPset_AirSideSystemInformation.Description[Type]\tTEXT\t\t29\t1\tIfcText\t1\nPARAM\tda071818-c124-4256-a0eb-e3255c0cf23d\tPset_AirSideSystemInformation.EnergyGainSensible[Type]\tNUMBER\t\t29\t1\tIfcPowerMeasure\t1\nPARAM\t436f82a6-cfd2-4b18-9dee-444dfa21a9ca\tPset_AirSideSystemInformation.EnergyGainTotal[Type]\tNUMBER\t\t29\t1\tIfcPowerMeasure\t1\nPARAM\tf86e1881-4195-4d07-bf30-f0634284fa6a\tPset_AirSideSystemInformation.EnergyLoss[Type]\tNUMBER\t\t29\t1\tIfcPowerMeasure\t1\nPARAM\te1a07ee9-9377-455c-baf2-77d8929c7a2d\tPset_AirSideSystemInformation.FanPower[Type]\tNUMBER\t\t29\t1\tIfcPowerMeasure\t1\nPARAM\t7fbad3f5-e05b-4b9e-a922-c296c30f3c10\tPset_AirSideSystemInformation.HeatingTemperatureDelta[Type]\tNUMBER\t\t29\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t17f2f2bf-2113-4630-8ee6-a741129ae5e0\tPset_AirSideSystemInformation.InfiltrationDiversitySummer[Type]\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf08eaa70-78fb-4ebe-8c86-21567ef76ae8\tPset_AirSideSystemInformation.InfiltrationDiversityWinter[Type]\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\nPARAM\te3a740df-64b2-45eb-af71-ba7ff1c425c9\tPset_AirSideSystemInformation.LightingDiversity[Type]\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t9209f69b-9915-4f75-8b90-7da0dd35b18c\tPset_AirSideSystemInformation.LoadSafetyFactor[Type]\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tad787104-63c4-4cf0-81a7-022a2b13d49d\tPset_AirSideSystemInformation.Name[Type]\tTEXT\t\t29\t1\tIfcLabel\t1\nPARAM\t96c821c9-e636-4a7a-8d95-57ba36924af4\tPset_AirSideSystemInformation.TotalAirflow[Type]\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tb1de67f4-86f6-4071-8d9b-cb3364ec1380\tPset_AirSideSystemInformation.TotalAirFlow[Type]\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t8bbf3471-fcac-42f3-8543-9ef3f22ce0df\tPset_AirSideSystemInformation.Ventilation[Type]\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t30\tPset_AirTerminalBoxPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf8f9f9f7-61c1-4901-bfaa-e3d73205b77b\tPset_AirTerminalBoxPHistory.AirflowCurve[Type]\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\nPARAM\t12df41fa-3929-4ad2-8c70-ab2f73763c7a\tPset_AirTerminalBoxPHistory.AirFlowCurve[Type]\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\nPARAM\t624e5cf6-9e3b-4dbc-b313-f1aa432dab38\tPset_AirTerminalBoxPHistory.AtmosphericPressure[Type]\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\nPARAM\t5eae72de-e913-4243-9eb8-5d1523b1dc73\tPset_AirTerminalBoxPHistory.DamperPosition[Type]\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\nPARAM\ta3bbd32f-b874-4694-8c7d-63c06a81afcb\tPset_AirTerminalBoxPHistory.Sound[Type]\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\n#\nGROUP\t31\tPset_AirTerminalBoxTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc83dafa4-d37b-40da-aadd-abcb9c662f37\tPset_AirTerminalBoxTypeCommon.AirflowRateRange[Type]\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\nPARAM\tce04d8dc-5025-4c69-b220-fe3d07bf9d24\tPset_AirTerminalBoxTypeCommon.AirFlowRateRange[Type]\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\nPARAM\t252a8c5b-08c4-461e-a63f-39b57f79931c\tPset_AirTerminalBoxTypeCommon.AirPressureRange[Type]\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\nPARAM\td7501967-5ed6-4da7-b3d7-97ddc66725e7\tPset_AirTerminalBoxTypeCommon.ArrangementType[Type]\tTEXT\t\t31\t1\tPEnum_AirTerminalBoxArrangementType\t1\nPARAM\te46e37b2-2fab-4f66-9262-9e19eba7fdd6\tPset_AirTerminalBoxTypeCommon.HasFan[Type]\tYESNO\t\t31\t1\tIfcBoolean\t1\nPARAM\t8e484efc-7f40-4abf-81d4-efcc84e3d122\tPset_AirTerminalBoxTypeCommon.HasReturnAir[Type]\tYESNO\t\t31\t1\tIfcBoolean\t1\nPARAM\tf6a7800e-23a7-4430-8e99-e17e3ce2d138\tPset_AirTerminalBoxTypeCommon.HasSoundAttenuator[Type]\tYESNO\t\t31\t1\tIfcBoolean\t1\nPARAM\t3f070853-6d8e-4c3b-a848-d0dcf24c9101\tPset_AirTerminalBoxTypeCommon.HousingThickness[Type]\tLENGTH\t\t31\t1\tIfcLengthMeasure\t1\nPARAM\t41905e8d-1ecd-447c-9689-fe3ccce0a4c6\tPset_AirTerminalBoxTypeCommon.Material[Type]\tMULTILINETEXT\t\t31\t1\tIfcMaterial\t1\nPARAM\t5c8d8af7-4b51-4e7a-9c96-a93cf6fb3bc1\tPset_AirTerminalBoxTypeCommon.NominalAirFlowRate[Type]\tNUMBER\t\t31\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tf10e739b-aa9b-4dc4-a4dd-532acf51d38a\tPset_AirTerminalBoxTypeCommon.NominalDamperDiameter[Type]\tLENGTH\t\t31\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t18950155-5c13-48cb-966e-3c53a1145c07\tPset_AirTerminalBoxTypeCommon.NominalInletAirPressure[Type]\tNUMBER\t\t31\t1\tIfcPressureMeasure\t1\nPARAM\tf9179136-8554-4b20-8451-c3e1ae374f47\tPset_AirTerminalBoxTypeCommon.OperationTemperatureRange[Type]\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\nPARAM\t6820a22f-8f93-44d8-a37a-000019c61efd\tPset_AirTerminalBoxTypeCommon.Reference[Type]\tTEXT\t\t31\t1\tIfcIdentifier\t1\nPARAM\t92dc896f-c203-4d2f-b54f-b4734a404870\tPset_AirTerminalBoxTypeCommon.ReheatType[Type]\tTEXT\t\t31\t1\tPEnum_AirTerminalBoxReheatType\t1\nPARAM\te6a2da12-9c60-4248-a286-8a698c36bb5c\tPset_AirTerminalBoxTypeCommon.ReturnAirFractionRange[Type]\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\nPARAM\tacafa01f-d523-453d-97b8-9901ad2fb0f8\tPset_AirTerminalBoxTypeCommon.Status[Type]\tTEXT\t\t31\t1\tPEnum_ElementStatus\t1\nPARAM\td3bc555c-0c79-46b0-8dbc-41a27f61affd\tPset_AirTerminalBoxTypeCommon.Weight[Type]\tNUMBER\t\t31\t1\tIfcMassMeasure\t1\n#\nGROUP\t32\tPset_AirTerminalOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td6f9816d-caf4-469d-a08b-054c0c0b24dd\tPset_AirTerminalOccurrence.AirFlowRate[Type]\tNUMBER\t\t32\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t8d58635c-7e8c-4976-97cd-ad88f3ac4788\tPset_AirTerminalOccurrence.AirflowType[Type]\tTEXT\t\t32\t1\tPEnum_AirTerminalAirflowType\t1\nPARAM\t218d4a1e-eb78-4cbc-8026-cd9cfa41aacd\tPset_AirTerminalOccurrence.AirFlowType[Type]\tTEXT\t\t32\t1\tPEnum_AirTerminalAirFlowType\t1\nPARAM\t2158d5a4-84ab-447c-900d-431684567d1c\tPset_AirTerminalOccurrence.AirTerminalLocation[Type]\tTEXT\t\t32\t1\tPEnum_AirTerminalLocation\t1\nPARAM\t8a86a30a-ee3d-4d13-a7ef-eb9aa8871119\tPset_AirTerminalOccurrence.Location[Type]\tTEXT\t\t32\t1\tPEnum_AirTerminalLocation\t1\n#\nGROUP\t33\tPset_AirTerminalPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t96873d0a-e8a0-4091-b031-bdc9c590a580\tPset_AirTerminalPHistory.AirFlowRate[Type]\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\nPARAM\t95f55789-b833-4147-bcf6-f610c8474ed4\tPset_AirTerminalPHistory.AirFlowRateHistory[Type]\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\nPARAM\ta040aa73-8a36-4011-84bb-b1bbda93d4af\tPset_AirTerminalPHistory.CenterlineAirVelocity[Type]\tMULTILINETEXT\t\t33\t1\tPropertyTableValue\t1\nPARAM\t7407bb35-acb6-4e3e-b99a-c476ff213573\tPset_AirTerminalPHistory.InductionRatio[Type]\tMULTILINETEXT\t\t33\t1\tPropertyTableValue\t1\nPARAM\t796af4b7-6cb4-4d3d-95e8-b8350e6b289d\tPset_AirTerminalPHistory.NeckAirVelocity[Type]\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\nPARAM\t82a0aa1c-e38e-492a-81c9-53500d5d5f08\tPset_AirTerminalPHistory.PressureDrop[Type]\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\nPARAM\tc3661b7b-3d74-4db1-b5b1-ed54891d7227\tPset_AirTerminalPHistory.SupplyAirTemperatureCooling[Type]\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\nPARAM\taa30a366-f53d-4b34-9e19-eb2f450c8e97\tPset_AirTerminalPHistory.SupplyAirTemperatureHeating[Type]\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\n#\nGROUP\t34\tPset_AirTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3c7aba14-24ef-4ad9-8e7b-7a354ddff00a\tPset_AirTerminalTypeCommon.AirDiffusionPerformanceIndex[Type]\tNUMBER\t\t34\t1\tIfcReal\t1\nPARAM\tc6152384-8858-48f3-a2b2-e839b4439547\tPset_AirTerminalTypeCommon.AirFlowrateRange[Type]\tMULTILINETEXT\t\t34\t1\tPropertyBoundedValue\t1\nPARAM\t78ae5ae4-29a7-4fc9-acd8-b2ff258ed0a5\tPset_AirTerminalTypeCommon.AirFlowRateRange[Type]\tMULTILINETEXT\t\t34\t1\tPropertyBoundedValue\t1\nPARAM\t4ace4150-53c0-4168-bc74-a8df13410677\tPset_AirTerminalTypeCommon.AirFlowrateVersusFlowControlElement[Type]\tMULTILINETEXT\t\t34\t1\tPropertyTableValue\t1\nPARAM\t357e81c2-88b7-422d-85da-b7abbcad1863\tPset_AirTerminalTypeCommon.AirTerminalMountingType[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalMountingType\t1\nPARAM\ta534ab45-04ca-4fcd-a3ec-9837d4276626\tPset_AirTerminalTypeCommon.AirTerminalShape[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalShape\t1\nPARAM\t27ff26fb-4a86-4184-a6d9-8f8f23d08d10\tPset_AirTerminalTypeCommon.CoreSetHorizontal[Type]\tNUMBER\t\t34\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tae33193d-8a2a-4518-9820-ada0f2a2124f\tPset_AirTerminalTypeCommon.CoreSetVertical[Type]\tNUMBER\t\t34\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tadb942fa-20e4-4db3-8aac-922f19c2524e\tPset_AirTerminalTypeCommon.CoreType[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalCoreType\t1\nPARAM\tfe39a623-278d-4657-8b56-6679a48d82b1\tPset_AirTerminalTypeCommon.DischargeDirection[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalDischargeDirection\t1\nPARAM\t93cd3c65-71ce-4f31-9de6-d67fe6720924\tPset_AirTerminalTypeCommon.EffectiveArea[Type]\tAREA\t\t34\t1\tIfcAreaMeasure\t1\nPARAM\td5cf28bd-263b-49fd-b13a-e9ac8bb0029d\tPset_AirTerminalTypeCommon.FaceType[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalFaceType\t1\nPARAM\tbddbd6d3-2e34-4736-b43c-f13794bc8894\tPset_AirTerminalTypeCommon.FinishColor[Type]\tTEXT\t\t34\t1\tIfcLabel\t1\nPARAM\t720dd8e1-ce10-40b1-b08d-31b0257bd10d\tPset_AirTerminalTypeCommon.FinishColour[Type]\tTEXT\t\t34\t1\tIfcLabel\t1\nPARAM\t3bbdd398-e370-470f-a8cd-f6fb4ddac935\tPset_AirTerminalTypeCommon.FinishType[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalFinishType\t1\nPARAM\tf938b371-37e1-4fb1-a2af-1b29e0cf9683\tPset_AirTerminalTypeCommon.FlowControlType[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalFlowControlType\t1\nPARAM\te7697610-cc43-4737-a202-35753fbef94f\tPset_AirTerminalTypeCommon.FlowPattern[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalFlowPattern\t1\nPARAM\td3cbccca-95c2-4a72-9ba9-ffd3f57c6abb\tPset_AirTerminalTypeCommon.HasIntegralControl[Type]\tYESNO\t\t34\t1\tIfcBoolean\t1\nPARAM\t1f078267-97f0-46ba-b4fb-a5fede25df05\tPset_AirTerminalTypeCommon.HasSoundAttenuator[Type]\tYESNO\t\t34\t1\tIfcBoolean\t1\nPARAM\t19361705-422b-4a50-ae0b-69c9ff5d744e\tPset_AirTerminalTypeCommon.HasThermalInsulation[Type]\tYESNO\t\t34\t1\tIfcBoolean\t1\nPARAM\t6764fccb-37c8-4168-b8f4-a99a510bbabd\tPset_AirTerminalTypeCommon.Material[Type]\tMULTILINETEXT\t\t34\t1\tIfcMaterial\t1\nPARAM\taf7beac6-2d79-4640-98da-aea9cfbc89fb\tPset_AirTerminalTypeCommon.MountingType[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalMountingType\t1\nPARAM\tcb66e834-e26f-42ce-8be9-f89394084ce5\tPset_AirTerminalTypeCommon.NeckArea[Type]\tAREA\t\t34\t1\tIfcAreaMeasure\t1\nPARAM\ta5a123a8-fb18-49a0-a02c-3389e1fa36d4\tPset_AirTerminalTypeCommon.NumberOfSlots[Type]\tINTEGER\t\t34\t1\tIfcCountMeasure\t1\nPARAM\tde2c40a1-542e-4071-a17b-db141e31624c\tPset_AirTerminalTypeCommon.Reference[Type]\tTEXT\t\t34\t1\tIfcIdentifier\t1\nPARAM\tacc86224-5ccc-45ce-930e-3a7a2d8544a1\tPset_AirTerminalTypeCommon.Shape[Type]\tTEXT\t\t34\t1\tPEnum_AirTerminalShape\t1\nPARAM\t87f5f290-4de3-4ab6-95ed-b98b36733c0e\tPset_AirTerminalTypeCommon.SlotLength[Type]\tLENGTH\t\t34\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t42139f78-48c5-419f-be71-d48051c78220\tPset_AirTerminalTypeCommon.SlotWidth[Type]\tLENGTH\t\t34\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf2010b8f-1638-44fc-8493-3a355691d6ba\tPset_AirTerminalTypeCommon.Status[Type]\tTEXT\t\t34\t1\tPEnum_ElementStatus\t1\nPARAM\tae507bca-9855-4fa1-aa8d-1d9fb7d962cf\tPset_AirTerminalTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t34\t1\tPropertyBoundedValue\t1\nPARAM\t955e3887-f5b2-47c4-ac39-4ef54fa619c4\tPset_AirTerminalTypeCommon.ThrowLength[Type]\tLENGTH\t\t34\t1\tIfcLengthMeasure\t1\nPARAM\tf479cac6-e91a-4e6b-80b8-d55038bb97ac\tPset_AirTerminalTypeCommon.Weight[Type]\tNUMBER\t\t34\t1\tIfcMassMeasure\t1\n#\nGROUP\t35\tPset_AirTerminalTypeRectangular\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1d8773e4-a33a-4361-a5ad-2b79a94cb46c\tPset_AirTerminalTypeRectangular.FaceType[Type]\tTEXT\t\t35\t1\tPEnum_AirTerminalFaceType\t1\n#\nGROUP\t36\tPset_AirTerminalTypeRound\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t66ffdc05-eccb-497a-89ae-c4d263ffa291\tPset_AirTerminalTypeRound.FaceType[Type]\tTEXT\t\t36\t1\tPEnum_AirTerminalFaceType\t1\n#\nGROUP\t37\tPset_AirTerminalTypeSlot\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48174d95-bfd1-4491-b3a0-ff13581297e9\tPset_AirTerminalTypeSlot.NumberOfSlots[Type]\tINTEGER\t\t37\t1\tIfcInteger\t1\nPARAM\ta618647e-08e7-4675-ba6c-fb23fce5b364\tPset_AirTerminalTypeSlot.SlotLength[Type]\tLENGTH\t\t37\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t260bfd8b-29a5-4814-9adf-63b06a688b74\tPset_AirTerminalTypeSlot.SlotWidth[Type]\tLENGTH\t\t37\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t38\tPset_AirTerminalTypeSquare\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teea4aeb3-24d7-4cea-ae4e-d296a0c62024\tPset_AirTerminalTypeSquare.FaceType[Type]\tTEXT\t\t38\t1\tPEnum_AirTerminalFaceType\t1\n#\nGROUP\t39\tPset_AirToAirHeatRecoveryPHist\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8cba2199-8c92-4dd2-93c3-57d97197eb07\tPset_AirToAirHeatRecoveryPHist.AirPressureDropCurves[Type]\tNUMBER\t\t39\t1\tIfcReal\t1\nPARAM\t600d125d-50a1-472d-8626-919f15b89cd7\tPset_AirToAirHeatRecoveryPHist.DefrostTemperatureEffectiveness[Type]\tNUMBER\t\t39\t1\tIfcReal\t1\nPARAM\t2f35f662-7550-4d11-952c-9becd4ae574e\tPset_AirToAirHeatRecoveryPHist.HumidityEffectiveness[Type]\tTEXT\t\t39\t1\tIfcLabel\t1\nPARAM\t8f55995f-df74-4c2e-81f9-c96b7794eac7\tPset_AirToAirHeatRecoveryPHist.LatentHeatTransferRate[Type]\tNUMBER\t\t39\t1\tIfcReal\t1\nPARAM\t4353bfa7-35b3-442c-8f48-8f445e6c242a\tPset_AirToAirHeatRecoveryPHist.SensibleEffectiveness[Type]\tTEXT\t\t39\t1\tIfcLabel\t1\nPARAM\t88335db1-a70a-4678-9b2e-0cbcd4d71542\tPset_AirToAirHeatRecoveryPHist.SensibleEffectivenessTable[Type]\tTEXT\t\t39\t1\tIfcLabel\t1\nPARAM\t86fd60fb-0d8a-40c8-8e29-ef7b17e62431\tPset_AirToAirHeatRecoveryPHist.SensibleHeatTransferRate[Type]\tNUMBER\t\t39\t1\tIfcReal\t1\nPARAM\t061b4776-5c5c-42d4-b9ca-ca909f4bf2a4\tPset_AirToAirHeatRecoveryPHist.TemperatureEffectiveness[Type]\tNUMBER\t\t39\t1\tIfcReal\t1\nPARAM\tffdce9d8-6e77-4c31-917b-d6db73f8fdaa\tPset_AirToAirHeatRecoveryPHist.TotalEffectiveness[Type]\tTEXT\t\t39\t1\tIfcLabel\t1\nPARAM\t8e95525a-9b61-4f88-8f5f-dafa5d9c7910\tPset_AirToAirHeatRecoveryPHist.TotalEffectivenessTable[Type]\tTEXT\t\t39\t1\tIfcLabel\t1\nPARAM\t32bccf57-0080-4bfe-ac09-b5661facaa61\tPset_AirToAirHeatRecoveryPHist.TotalHeatTransferRate[Type]\tNUMBER\t\t39\t1\tIfcReal\t1\n#\nGROUP\t40\tPset_AirToAirHeatRecoveryPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td2ac0291-b82d-4ab9-a8c2-7106b915b98d\tPset_AirToAirHeatRecoveryPHistory.AirPressureDropCurves[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t5c5efbae-9037-4f3e-a230-0262a05da488\tPset_AirToAirHeatRecoveryPHistory.DefrostTemperatureEffectiveness[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t25184252-932b-4e63-9c93-f0a78b06dffd\tPset_AirToAirHeatRecoveryPHistory.HumidityEffectiveness[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t04422297-c70a-436a-9364-d963dd04b243\tPset_AirToAirHeatRecoveryPHistory.LatentHeatTransferRate[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t3c6c3923-b5b7-494d-9b85-cb76fe0bb56d\tPset_AirToAirHeatRecoveryPHistory.SensibleEffectiveness[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t82799c04-44c9-42fc-8bc8-4bf9221f9cb8\tPset_AirToAirHeatRecoveryPHistory.SensibleEffectivenessTable[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t3b0f4ae1-b15d-4960-98d2-d9610702bfab\tPset_AirToAirHeatRecoveryPHistory.SensibleHeatTransferRate[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t70f834ad-1855-402b-bfb2-531b1459c631\tPset_AirToAirHeatRecoveryPHistory.TemperatureEffectiveness[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t288a85ff-427d-4e09-baad-b65dbd46e896\tPset_AirToAirHeatRecoveryPHistory.TotalEffectiveness[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\tfa28b5b3-6948-4036-bafe-2fae4fbf9725\tPset_AirToAirHeatRecoveryPHistory.TotalEffectivenessTable[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\tacf548a5-dd9b-4612-a9a3-bcaa90d3efa9\tPset_AirToAirHeatRecoveryPHistory.TotalHeatTransferRate[Type]\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\n#\nGROUP\t41\tPset_AirToAirHeatRecoveryTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tde3220cc-2922-4656-b8f8-87c32607d53c\tPset_AirToAirHeatRecoveryTypeCommon.HasDefrost[Type]\tYESNO\t\t41\t1\tIfcBoolean\t1\nPARAM\tb7c78c55-7e45-4210-a22d-ca0b1aebfbed\tPset_AirToAirHeatRecoveryTypeCommon.HeatTransferType[Type]\tTEXT\t\t41\t1\tPEnum_HeatTransferType\t1\nPARAM\tb5b319d0-80f4-48ba-91fc-881934dd4416\tPset_AirToAirHeatRecoveryTypeCommon.HeatTransferTypeEnum[Type]\tTEXT\t\t41\t1\tPEnum_AirToAirHeatTransferHeatTransferType\t1\nPARAM\tb14878e5-eb17-48f0-94c4-8e0b96d56643\tPset_AirToAirHeatRecoveryTypeCommon.MediaMaterial[Type]\tMULTILINETEXT\t\t41\t1\tIfcMaterial\t1\nPARAM\t721f0cd2-18de-4be7-893d-4f6fdd936d6a\tPset_AirToAirHeatRecoveryTypeCommon.OperationalTemperatureRange[Type]\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\tc01e0944-44e3-49a2-8b2a-cfe923958d43\tPset_AirToAirHeatRecoveryTypeCommon.PrimaryAirflowRateRange[Type]\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\tf2986d96-9467-48d3-baa4-ac46e4c5cb43\tPset_AirToAirHeatRecoveryTypeCommon.PrimaryAirFlowRateRange[Type]\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\t920acd0c-ba24-46fd-b593-096e76f6406b\tPset_AirToAirHeatRecoveryTypeCommon.Reference[Type]\tTEXT\t\t41\t1\tIfcIdentifier\t1\nPARAM\td58ef931-1a5d-4414-9b85-68a424b961b1\tPset_AirToAirHeatRecoveryTypeCommon.SecondaryAirflowRateRange[Type]\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\t1f933ecb-1471-4bdb-8f0a-11e020025e33\tPset_AirToAirHeatRecoveryTypeCommon.SecondaryAirFlowRateRange[Type]\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\tf075d02b-86c0-43bb-918e-1e372a75633f\tPset_AirToAirHeatRecoveryTypeCommon.Status[Type]\tTEXT\t\t41\t1\tPEnum_ElementStatus\t1\nPARAM\tba439d64-63ee-4f8d-8146-61dc8f2f9763\tPset_AirToAirHeatRecoveryTypeCommon.Weight[Type]\tNUMBER\t\t41\t1\tIfcMassMeasure\t1\n#\nGROUP\t42\tPset_AlarmPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t789b27cf-2fa8-4947-965b-b5771913fc93\tPset_AlarmPHistory.Acknowledge[Type]\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\nPARAM\te1bb3cb5-2531-44d4-96d5-3aac407d9185\tPset_AlarmPHistory.Condition[Type]\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\nPARAM\td020b3b1-9f13-451e-a91b-f8ed68cf8f2d\tPset_AlarmPHistory.ConditionHistory[Type]\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\nPARAM\t97b563c4-73f2-40ae-9825-c270e87eff76\tPset_AlarmPHistory.Enabled[Type]\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\nPARAM\t6cd150b9-dacd-49e0-9dcd-6937df6a18c8\tPset_AlarmPHistory.Severity[Type]\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\nPARAM\tf0d66cb0-c887-4f6c-9a57-2292764338ea\tPset_AlarmPHistory.User[Type]\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\nPARAM\t9eaa11ac-57d2-4432-9959-2e38e35451f6\tPset_AlarmPHistory.UserHistory[Type]\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\n#\nGROUP\t43\tPset_AlarmTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td009220e-8f35-4d2a-90da-23c3d0639e68\tPset_AlarmTypeCommon.AlarmCondition[Type]\tMULTILINETEXT\t\t43\t1\tPropertyTableValue\t1\nPARAM\tb6408bb5-527f-4887-adf5-d874a6907716\tPset_AlarmTypeCommon.Condition[Type]\tMULTILINETEXT\t\t43\t1\tPropertyTableValue\t1\nPARAM\tc2f8a834-e8df-46c6-b487-4a9e9db61b75\tPset_AlarmTypeCommon.Reference[Type]\tTEXT\t\t43\t1\tIfcIdentifier\t1\nPARAM\t889efce2-7ad6-430c-993c-2c28084215ba\tPset_AlarmTypeCommon.Status[Type]\tTEXT\t\t43\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t44\tPset_AlignmentCantSegmentCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6ae61cf6-a68a-4a3a-9aec-80b119af8d48\tPset_AlignmentCantSegmentCommon.CantDeficiency[Type]\tLENGTH\t\t44\t1\tIfcLengthMeasure\t1\nPARAM\t8831cf50-7d1f-4a2d-bc51-b1603396ec7e\tPset_AlignmentCantSegmentCommon.CantEquilibrium[Type]\tLENGTH\t\t44\t1\tIfcLengthMeasure\t1\nPARAM\tc0ea5c24-f90c-4ad1-925f-4df880aae38c\tPset_AlignmentCantSegmentCommon.EndSmoothingLength[Type]\tLENGTH\t\t44\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4f4bc7b1-b867-4aee-ac46-6b364b3e2578\tPset_AlignmentCantSegmentCommon.StartSmoothingLength[Type]\tLENGTH\t\t44\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t45\tPset_AlignmentVerticalSegmentCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8f5b3fb1-42a2-4f1b-9a6b-1cef5fe52e16\tPset_AlignmentVerticalSegmentCommon.EndElevation[Type]\tLENGTH\t\t45\t1\tIfcLengthMeasure\t1\nPARAM\td9d2308e-9d99-44cf-a3da-2593213e829c\tPset_AlignmentVerticalSegmentCommon.StartElevation[Type]\tLENGTH\t\t45\t1\tIfcLengthMeasure\t1\n#\nGROUP\t46\tPset_AnalogInput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3e04ef6a-b79b-45ec-943f-cb3f4b1b0666\tPset_AnalogInput.Deadband[Type]\tNUMBER\t\t46\t1\tIfcReal\t1\nPARAM\tba478363-cd40-43cf-a278-7ef5bb7d5540\tPset_AnalogInput.EventEnable[Type]\tTEXT\t\t46\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\td25b0046-fc6f-4f3b-9e9b-7e2774ac74c5\tPset_AnalogInput.HighLimit[Type]\tNUMBER\t\t46\t1\tIfcReal\t1\nPARAM\t59d7538a-00e1-448f-8f7f-8fc56333b63f\tPset_AnalogInput.HighLimitEnable[Type]\tYESNO\t\t46\t1\tIfcBoolean\t1\nPARAM\t1673563b-4d4f-4560-a59a-7d843cd90578\tPset_AnalogInput.LowLimit[Type]\tNUMBER\t\t46\t1\tIfcReal\t1\nPARAM\t1777499f-4f75-45e9-bce0-7fe5b5c320bf\tPset_AnalogInput.LowLimitEnable[Type]\tYESNO\t\t46\t1\tIfcBoolean\t1\nPARAM\t006574aa-5e08-458d-b828-2dbd4eb97228\tPset_AnalogInput.NotifyType[Type]\tTEXT\t\t46\t1\tPEnum_BACnetNotifyType\t1\n#\nGROUP\t47\tPset_AnalogOutput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9c8d4a93-d1d1-4415-be73-1ef8d873025e\tPset_AnalogOutput.Deadband[Type]\tNUMBER\t\t47\t1\tIfcReal\t1\nPARAM\t0536c797-e67d-4d8f-9327-9bab586f3b9e\tPset_AnalogOutput.EventEnable[Type]\tTEXT\t\t47\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\tdb78b964-e67e-4d2b-920c-319bf8fbb21f\tPset_AnalogOutput.HighLimit[Type]\tNUMBER\t\t47\t1\tIfcReal\t1\nPARAM\t881779b8-6c09-42ec-8086-992e7a839719\tPset_AnalogOutput.HighLimitEnable[Type]\tYESNO\t\t47\t1\tIfcBoolean\t1\nPARAM\t794577c4-ace4-44dc-b5ec-21bab28e9c67\tPset_AnalogOutput.LowLimit[Type]\tNUMBER\t\t47\t1\tIfcReal\t1\nPARAM\t98a381b9-ea0a-4920-a3e4-778ef8fbd345\tPset_AnalogOutput.LowLimitEnable[Type]\tYESNO\t\t47\t1\tIfcBoolean\t1\nPARAM\tfd953dab-a76e-4984-b704-632ed2a3cfba\tPset_AnalogOutput.NotifyType[Type]\tTEXT\t\t47\t1\tPEnum_BACnetNotifyType\t1\n#\nGROUP\t48\tPset_AnnotationContourLine\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t21281718-05f9-4bf8-8ffe-fdb63d34e960\tPset_AnnotationContourLine.ContourValue[Type]\tLENGTH\t\t48\t1\tIfcLengthMeasure\t1\n#\nGROUP\t49\tPset_AnnotationLineOfSight\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te9f3da97-b3a2-491e-8f99-61016d82d273\tPset_AnnotationLineOfSight.RoadVisibleDistanceLeft[Type]\tLENGTH\t\t49\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t43418ec5-bfc0-4e10-936d-6aac75c875c8\tPset_AnnotationLineOfSight.RoadVisibleDistanceRight[Type]\tLENGTH\t\t49\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3796ca2e-23ba-49be-af9f-a42cbd1ec5af\tPset_AnnotationLineOfSight.SetbackDistance[Type]\tLENGTH\t\t49\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tacd9a825-e4f9-4ea1-8452-a5c25706cb66\tPset_AnnotationLineOfSight.VisibleAngleLeft[Type]\tANGLE\t\t49\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t58d646f6-286e-476a-96d6-1cfeba9a0612\tPset_AnnotationLineOfSight.VisibleAngleRight[Type]\tANGLE\t\t49\t1\tIfcPositivePlaneAngleMeasure\t1\n#\nGROUP\t50\tPset_AnnotationSurveyArea\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t861e3692-3b61-4c12-81e1-cdf63af42cad\tPset_AnnotationSurveyArea.AccuracyQualityExpected[Type]\tNUMBER\t\t50\t1\tIfcRatioMeasure\t1\nPARAM\t12596c82-b583-412a-af64-caac717788fc\tPset_AnnotationSurveyArea.AccuracyQualityObtained[Type]\tNUMBER\t\t50\t1\tIfcRatioMeasure\t1\nPARAM\t955996e8-8175-4482-9443-6f4fc7f55cd2\tPset_AnnotationSurveyArea.AcquisitionMethod[Type]\tTEXT\t\t50\t1\tPEnum_AcquisitionMethod\t1\n#\nGROUP\t51\tPset_Asset\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t66f9348e-ee32-4764-9444-e1d1747d476a\tPset_Asset.AssetAccountingType[Type]\tTEXT\t\t51\t1\tPEnum_AssetAccountingType\t1\nPARAM\tf45b8f2e-7417-4c53-8a6a-19723397231b\tPset_Asset.AssetInsuranceType[Type]\tTEXT\t\t51\t1\tPEnum_AssetInsuranceType\t1\nPARAM\t66548469-f5b6-45e4-890e-6864ea47984a\tPset_Asset.AssetStatus[Type]\tTEXT\t\t51\t1\tIfcLabel\t1\nPARAM\tb24b1ae6-1d61-4c46-bcdd-878a3ee624db\tPset_Asset.AssetTaxType[Type]\tTEXT\t\t51\t1\tPEnum_AssetTaxType\t1\nPARAM\t63a4b23f-8223-4c99-b427-a78d007ff526\tPset_Asset.AssetUse[Type]\tTEXT\t\t51\t1\tIfcLabel\t1\n#\nGROUP\t52\tPset_AudioVisualAppliancePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t24682d22-8293-4d93-8e3b-cb3b6c73237a\tPset_AudioVisualAppliancePHistory.AudioVolume[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t834a7688-a0d9-4191-a35a-223ebf9b4a29\tPset_AudioVisualAppliancePHistory.AudioVolumeHistory[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t9ec71786-0b16-4122-b8a5-7acdc930c5ef\tPset_AudioVisualAppliancePHistory.MediaContent[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t0b836957-7e1b-487e-b2df-501accbe7274\tPset_AudioVisualAppliancePHistory.MediaSource[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t4aeef646-4a5d-4b1a-84b0-e80b8c8590bb\tPset_AudioVisualAppliancePHistory.MediaSourceHistory[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\tb077dddb-0c77-403c-b0b1-994958f60e03\tPset_AudioVisualAppliancePHistory.PowerState[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\n#\nGROUP\t53\tPset_AudioVisualApplianceTypeAmplifier\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td9505b8b-d7a3-446d-8376-73e37eebfbc5\tPset_AudioVisualApplianceTypeAmplifier.AmplifierType[Type]\tTEXT\t\t53\t1\tPEnum_AudioVisualAmplifierType\t1\nPARAM\t72c94b43-2ea6-494e-969e-c38ee28dac45\tPset_AudioVisualApplianceTypeAmplifier.AudioAmplification[Type]\tMULTILINETEXT\t\t53\t1\tPropertyTableValue\t1\nPARAM\td102d2c2-dcec-45bf-a494-5be0315a6b8d\tPset_AudioVisualApplianceTypeAmplifier.AudioMode[Type]\tMULTILINETEXT\t\t53\t1\tPropertyTableValue\t1\n#\nGROUP\t54\tPset_AudioVisualApplianceTypeCamera\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t206e41e0-1901-49d4-b250-460487744b4b\tPset_AudioVisualApplianceTypeCamera.CameraType[Type]\tTEXT\t\t54\t1\tPEnum_AudioVisualCameraType\t1\nPARAM\t913e19c8-008e-4625-a5f5-6df2f212dc34\tPset_AudioVisualApplianceTypeCamera.IsOutdoors[Type]\tYESNO\t\t54\t1\tIfcBoolean\t1\nPARAM\t1c9464f8-775e-4023-b53e-9c114a8790dc\tPset_AudioVisualApplianceTypeCamera.PanHorizontal[Type]\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\nPARAM\t897edb15-d3de-4067-b10c-170ef59b14e1\tPset_AudioVisualApplianceTypeCamera.PanTiltZoomPreset[Type]\tMULTILINETEXT\t\t54\t1\tPropertyTableValue\t1\nPARAM\tc1326dfa-1f0d-408d-8c90-ef9bdd34a386\tPset_AudioVisualApplianceTypeCamera.PanVertical[Type]\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\nPARAM\t298aae41-cd5b-499a-bae1-9caf05f22ff1\tPset_AudioVisualApplianceTypeCamera.TiltHorizontal[Type]\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\nPARAM\tc781dc2b-a4e7-49fb-8022-4c46943f4bd9\tPset_AudioVisualApplianceTypeCamera.TiltVertical[Type]\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\nPARAM\t03bf1b96-9f5c-4753-bebc-108ce8681486\tPset_AudioVisualApplianceTypeCamera.VideoCaptureInterval[Type]\tMULTILINETEXT\t\t54\t1\tPropertyTableValue\t1\nPARAM\t982fec31-f43e-4a38-b0c0-58b2d0403a12\tPset_AudioVisualApplianceTypeCamera.VideoResolutionHeight[Type]\tINTEGER\t\t54\t1\tIfcInteger\t1\nPARAM\t0e3a6bfb-468c-4998-9061-508407122b1f\tPset_AudioVisualApplianceTypeCamera.VideoResolutionMode[Type]\tMULTILINETEXT\t\t54\t1\tPropertyTableValue\t1\nPARAM\t5dc4c02a-e657-41af-884b-b5fa76bc3106\tPset_AudioVisualApplianceTypeCamera.VideoResolutionWidth[Type]\tINTEGER\t\t54\t1\tIfcInteger\t1\nPARAM\te902a7a2-aaa0-41ac-afe5-4131f8583344\tPset_AudioVisualApplianceTypeCamera.Zoom[Type]\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\n#\nGROUP\t55\tPset_AudioVisualApplianceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t24d212eb-ea9b-4756-8add-c350bf8f5cb2\tPset_AudioVisualApplianceTypeCommon.AudioVolume[Type]\tMULTILINETEXT\t\t55\t1\tPropertyTableValue\t1\nPARAM\t73a1e745-a550-4067-9db4-c49da2970925\tPset_AudioVisualApplianceTypeCommon.MediaSource[Type]\tMULTILINETEXT\t\t55\t1\tPropertyTableValue\t1\nPARAM\t58a9fa26-cb9d-4c01-9df7-3093975974d9\tPset_AudioVisualApplianceTypeCommon.Reference[Type]\tTEXT\t\t55\t1\tIfcIdentifier\t1\nPARAM\t8cec422a-b6b0-4286-852a-8ed7d37d1b82\tPset_AudioVisualApplianceTypeCommon.Status[Type]\tTEXT\t\t55\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t56\tPset_AudioVisualApplianceTypeDisplay\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td7c85f80-c3fa-4bc6-beac-89c3af0ccde3\tPset_AudioVisualApplianceTypeDisplay.AudioMode[Type]\tMULTILINETEXT\t\t56\t1\tPropertyTableValue\t1\nPARAM\tc28712ca-ba18-4286-bc1d-70694e204e52\tPset_AudioVisualApplianceTypeDisplay.Brightness[Type]\tNUMBER\t\t56\t1\tIfcIlluminanceMeasure\t1\nPARAM\t126943c1-67d6-47a0-ae8c-2776cf8b0792\tPset_AudioVisualApplianceTypeDisplay.ContrastRatio[Type]\tNUMBER\t\t56\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t65726703-3a31-4862-bd05-c01669fd5883\tPset_AudioVisualApplianceTypeDisplay.DisplayHeight[Type]\tLENGTH\t\t56\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta2563dbe-f528-47b0-a306-d191682bd87a\tPset_AudioVisualApplianceTypeDisplay.DisplayType[Type]\tTEXT\t\t56\t1\tPEnum_AudioVisualDisplayType\t1\nPARAM\tc14f2677-cdea-4cfb-97a4-e6a1a8e00e87\tPset_AudioVisualApplianceTypeDisplay.DisplayWidth[Type]\tLENGTH\t\t56\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t659bcdca-edd8-4e44-9167-6a96fe8c10b0\tPset_AudioVisualApplianceTypeDisplay.NominalSize[Type]\tLENGTH\t\t56\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2c9d65c2-0518-42d5-86aa-dfc8174b1d13\tPset_AudioVisualApplianceTypeDisplay.RefreshRate[Type]\tNUMBER\t\t56\t1\tIfcFrequencyMeasure\t1\nPARAM\t987e1f91-9b66-4f33-81d4-e0e017c5b5bb\tPset_AudioVisualApplianceTypeDisplay.TouchScreen[Type]\tTEXT\t\t56\t1\tPEnum_AudioVisualDisplayTouchScreen\t1\nPARAM\t28a79c4f-5a40-4a24-8a6a-da24e854ae32\tPset_AudioVisualApplianceTypeDisplay.VideoCaptionMode[Type]\tMULTILINETEXT\t\t56\t1\tPropertyTableValue\t1\nPARAM\t034ade4d-eb42-4e8c-a302-c44b4f6172c7\tPset_AudioVisualApplianceTypeDisplay.VideoResolutionHeight[Type]\tINTEGER\t\t56\t1\tIfcInteger\t1\nPARAM\tad208ae0-2673-4850-857c-d9863e8b6783\tPset_AudioVisualApplianceTypeDisplay.VideoResolutionMode[Type]\tMULTILINETEXT\t\t56\t1\tPropertyTableValue\t1\nPARAM\t4594952e-72af-4903-b8f3-c9befc7b30f8\tPset_AudioVisualApplianceTypeDisplay.VideoResolutionWidth[Type]\tINTEGER\t\t56\t1\tIfcInteger\t1\nPARAM\t8f8932ed-a7b6-49d2-9294-aa1f205fdac9\tPset_AudioVisualApplianceTypeDisplay.VideoScaleMode[Type]\tMULTILINETEXT\t\t56\t1\tPropertyTableValue\t1\n#\nGROUP\t57\tPset_AudioVisualApplianceTypePlayer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6f7cc8a8-a845-4ca5-9064-de3e57061e3b\tPset_AudioVisualApplianceTypePlayer.PlayerMediaEject[Type]\tYESNO\t\t57\t1\tIfcBoolean\t1\nPARAM\t529417b7-4f4e-4bf6-b067-0a3efe5226ca\tPset_AudioVisualApplianceTypePlayer.PlayerMediaFormat[Type]\tMULTILINETEXT\t\t57\t1\tPropertyTableValue\t1\nPARAM\tf3fa1a7f-9c11-4f9d-840e-cf4ab77bfcbb\tPset_AudioVisualApplianceTypePlayer.PlayerType[Type]\tTEXT\t\t57\t1\tPEnum_AudioVisualPlayerType\t1\n#\nGROUP\t58\tPset_AudioVisualApplianceTypeProjector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tad44fb75-0097-411d-8a30-08a80b7da698\tPset_AudioVisualApplianceTypeProjector.ProjectorType[Type]\tTEXT\t\t58\t1\tPEnum_AudioVisualProjectorType\t1\nPARAM\t5f611f00-c006-4191-9342-d9e85f46fe83\tPset_AudioVisualApplianceTypeProjector.VideoCaptionMode[Type]\tMULTILINETEXT\t\t58\t1\tPropertyTableValue\t1\nPARAM\t616e57bf-ca27-46dd-a8f3-6cb203094d25\tPset_AudioVisualApplianceTypeProjector.VideoResolutionHeight[Type]\tINTEGER\t\t58\t1\tIfcInteger\t1\nPARAM\t541a5d83-9aed-4ffb-bc0b-b8b175a39736\tPset_AudioVisualApplianceTypeProjector.VideoResolutionMode[Type]\tMULTILINETEXT\t\t58\t1\tPropertyTableValue\t1\nPARAM\t6aa36305-e7ba-4313-9376-ebd1f04655e2\tPset_AudioVisualApplianceTypeProjector.VideoResolutionWidth[Type]\tINTEGER\t\t58\t1\tIfcInteger\t1\nPARAM\t7e963f85-40a8-4174-bef9-89efd8871666\tPset_AudioVisualApplianceTypeProjector.VideoScaleMode[Type]\tMULTILINETEXT\t\t58\t1\tPropertyTableValue\t1\n#\nGROUP\t59\tPset_AudioVisualApplianceTypeRailwayCommunicationTerminal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8f9a2f24-f37a-4ec7-be6f-8876c7c08958\tPset_AudioVisualApplianceTypeRailwayCommunicationTerminal.RailwayCommunicationTerminalType[Type]\tTEXT\t\t59\t1\tPEnum_RailwayCommunicationTerminalType\t1\n#\nGROUP\t60\tPset_AudioVisualApplianceTypeReceiver\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcd36ed47-12ad-4e39-84ab-f64717efc4cc\tPset_AudioVisualApplianceTypeReceiver.AudioAmplification[Type]\tMULTILINETEXT\t\t60\t1\tPropertyTableValue\t1\nPARAM\td1e98c89-7fd8-4c81-8622-4a467296c8f7\tPset_AudioVisualApplianceTypeReceiver.AudioMode[Type]\tMULTILINETEXT\t\t60\t1\tPropertyTableValue\t1\nPARAM\t2f0a87b5-281f-425f-8f6b-0d4cd0059188\tPset_AudioVisualApplianceTypeReceiver.ReceiverType[Type]\tTEXT\t\t60\t1\tPEnum_AudioVisualReceiverType\t1\n#\nGROUP\t61\tPset_AudioVisualApplianceTypeRecordingEquipment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdf518b4b-fc22-495d-9edf-ded007190026\tPset_AudioVisualApplianceTypeRecordingEquipment.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t61\t1\tPropertyTableValue\t1\nPARAM\t803d78ca-d8dc-4288-808e-53ddf9feb4a4\tPset_AudioVisualApplianceTypeRecordingEquipment.StorageCapacity[Type]\tINTEGER\t\t61\t1\tIfcInteger\t1\n#\nGROUP\t62\tPset_AudioVisualApplianceTypeSpeaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3ff899a6-50cc-4b2a-866a-f64f76195633\tPset_AudioVisualApplianceTypeSpeaker.FrequencyResponse[Type]\tMULTILINETEXT\t\t62\t1\tPropertyTableValue\t1\nPARAM\ta7d0fa4c-b251-46a2-9900-3f59cbf71e3d\tPset_AudioVisualApplianceTypeSpeaker.Impedence[Type]\tNUMBER\t\t62\t1\tIfcFrequencyMeasure\t1\nPARAM\t89dc8226-e45e-4593-9884-aa8b5594e81c\tPset_AudioVisualApplianceTypeSpeaker.SpeakerDriverSize[Type]\tMULTILINETEXT\t\t62\t1\tPropertyTableValue\t1\nPARAM\tdd023905-5ce1-4b42-8c9b-2d690136ec1b\tPset_AudioVisualApplianceTypeSpeaker.SpeakerMounting[Type]\tTEXT\t\t62\t1\tPEnum_AudioVisualSpeakerMounting\t1\nPARAM\t3451f201-add2-418f-9fbd-18fcf9856c9e\tPset_AudioVisualApplianceTypeSpeaker.SpeakerType[Type]\tTEXT\t\t62\t1\tPEnum_AudioVisualSpeakerType\t1\n#\nGROUP\t63\tPset_AudioVisualApplianceTypeTuner\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t08c93275-e034-4f9b-aabc-129abf11b8be\tPset_AudioVisualApplianceTypeTuner.TunerChannel[Type]\tMULTILINETEXT\t\t63\t1\tPropertyTableValue\t1\nPARAM\tb33adf42-bd0f-4aa8-a2d9-903d575667b7\tPset_AudioVisualApplianceTypeTuner.TunerFrequency[Type]\tMULTILINETEXT\t\t63\t1\tPropertyBoundedValue\t1\nPARAM\tddf8a6f3-05ad-4f27-92b0-0f2f5a09b641\tPset_AudioVisualApplianceTypeTuner.TunerMode[Type]\tMULTILINETEXT\t\t63\t1\tPropertyTableValue\t1\nPARAM\t93ba48bf-8272-4f3b-9adc-4c0b70da58b6\tPset_AudioVisualApplianceTypeTuner.TunerType[Type]\tTEXT\t\t63\t1\tPEnum_AudioVisualTunerType\t1\n#\nGROUP\t64\tPset_AxleCountingEquipment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tff633d88-cc82-4584-af51-638fe4b0b70e\tPset_AxleCountingEquipment.AxleCounterResponseTime[Type]\tNUMBER\t\t64\t1\tIfcTimeMeasure\t1\nPARAM\tfe06abfd-f5d6-484f-aefc-df0d89d5ba71\tPset_AxleCountingEquipment.AxleCountingEquipmentType[Type]\tTEXT\t\t64\t1\tPEnum_AxleCountingEquipmentType\t1\nPARAM\t27e630fa-5a0e-425a-a73d-fc2482dc552e\tPset_AxleCountingEquipment.DetectionRange[Type]\tLENGTH\t\t64\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6a228019-d821-4a92-a96c-11b754ff870e\tPset_AxleCountingEquipment.FailureInformation[Type]\tTEXT\t\t64\t1\tIfcText\t1\nPARAM\t33de0c09-a6dc-4eec-b8b8-28b840e4c70c\tPset_AxleCountingEquipment.ImpactParameter[Type]\tNUMBER\t\t64\t1\tIfcAccelerationMeasure\t1\nPARAM\t6405cd04-4be8-4450-a2d6-f63e83ff11a0\tPset_AxleCountingEquipment.InsulationResistance[Type]\tNUMBER\t\t64\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t22139853-beea-44ce-acda-77e3d5a866f7\tPset_AxleCountingEquipment.MaximumVibration[Type]\tNUMBER\t\t64\t1\tIfcFrequencyMeasure\t1\nPARAM\t9ccd42ee-2e79-4d7e-9f77-cd1ca066fe41\tPset_AxleCountingEquipment.NominalWeight[Type]\tNUMBER\t\t64\t1\tIfcMassMeasure\t1\nPARAM\t0d1098af-4ab2-4da9-a1c6-daf68cd443e3\tPset_AxleCountingEquipment.OperationalTemperatureRange[Type]\tMULTILINETEXT\t\t64\t1\tPropertyBoundedValue\t1\nPARAM\t1825c81f-35de-4034-a35d-a64243d11b9e\tPset_AxleCountingEquipment.RatedVoltage[Type]\tMULTILINETEXT\t\t64\t1\tPropertyBoundedValue\t1\n#\nGROUP\t65\tPset_BalanceWeightTensionerDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t22584f2a-5427-49cf-b16f-9ebb93883ef3\tPset_BalanceWeightTensionerDesignCriteria.ReferenceDistanceRopeToPulley[Type]\tMULTILINETEXT\t\t65\t1\tPropertyTableValue\t1\nPARAM\t396e8830-4deb-4916-ae1d-76ee71888dc7\tPset_BalanceWeightTensionerDesignCriteria.ReferenceDistanceTensionerToGround[Type]\tMULTILINETEXT\t\t65\t1\tPropertyTableValue\t1\n#\nGROUP\t66\tPset_BeamCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1b42160f-533f-49cc-b5d0-b6d78cc3acf6\tPset_BeamCommon.FireRating[Type]\tTEXT\t\t66\t1\tIfcLabel\t1\nPARAM\tf0ffce37-da13-4760-8b22-50c4f563d8c5\tPset_BeamCommon.IsExternal[Type]\tYESNO\t\t66\t1\tIfcBoolean\t1\nPARAM\t4005b556-c0ce-47a2-b039-581663e74e83\tPset_BeamCommon.LoadBearing[Type]\tYESNO\t\t66\t1\tIfcBoolean\t1\nPARAM\t5fb543c4-766a-41a8-8004-ad58a52ce0d9\tPset_BeamCommon.Reference[Type]\tTEXT\t\t66\t1\tIfcIdentifier\t1\nPARAM\t830f615a-b959-4990-9fa8-eb684e692a80\tPset_BeamCommon.Roll[Type]\tNUMBER\t\t66\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t6f2fde58-270e-483e-81e1-d55f886cb934\tPset_BeamCommon.Slope[Type]\tNUMBER\t\t66\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tae025be8-bd74-4ac4-8cb5-b736f8b25d78\tPset_BeamCommon.Span[Type]\tLENGTH\t\t66\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc9e4d67d-c2be-439b-8d41-33618302a894\tPset_BeamCommon.Status[Type]\tTEXT\t\t66\t1\tPEnum_ElementStatus\t1\nPARAM\tc27fd2dc-24ef-4500-9f2f-3e9222a27460\tPset_BeamCommon.ThermalTransmittance[Type]\tNUMBER\t\t66\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t67\tPset_BearingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t97ee46cf-ddbb-4ec2-ac52-684aa8de4f1e\tPset_BearingCommon.DisplacementAccommodated[Type]\tMULTILINETEXT\t\t67\t1\tPropertyListValue\t1\nPARAM\t75ae84a8-37ba-4969-8bb6-5b928620f881\tPset_BearingCommon.RotationAccommodated[Type]\tMULTILINETEXT\t\t67\t1\tPropertyListValue\t1\n#\nGROUP\t68\tPset_BerthCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t95b8a5fc-b643-4067-ab09-4fd61e2ba20a\tPset_BerthCommon.AbnormalBerthingFactor[Type]\tNUMBER\t\t68\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t898f6fc3-dd3c-49f2-947b-d41c25f03ba7\tPset_BerthCommon.BerthApproach[Type]\tTEXT\t\t68\t1\tPEnum_BerthApproach\t1\nPARAM\t770872bd-a391-4672-b557-f982935fa0ec\tPset_BerthCommon.BerthingAngle[Type]\tNUMBER\t\t68\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tf3e33ebd-148f-47ba-a96a-0442b8696919\tPset_BerthCommon.BerthingVelocity[Type]\tNUMBER\t\t68\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t884de9ec-f443-4378-807b-b46f03770c4e\tPset_BerthCommon.BerthMode[Type]\tTEXT\t\t68\t1\tPEnum_BerthMode\t1\n#\nGROUP\t69\tPset_BinaryInput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t196165c0-6178-418c-88bf-8f73cd732ae8\tPset_BinaryInput.AckedTransitions[Type]\tTEXT\t\t69\t1\tPEnum_BACnetAckedTransitionsType\t1\nPARAM\tbff42dfe-34ad-4183-bc45-e9423b805768\tPset_BinaryInput.ActiveText[Type]\tTEXT\t\t69\t1\tIfcText\t1\nPARAM\t128fd4e8-ecc7-4fa8-86fe-e1b7456b1ddc\tPset_BinaryInput.EventEnable[Type]\tTEXT\t\t69\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\t982deb6c-439c-41aa-871c-f42b5187f6d0\tPset_BinaryInput.FeedbackValue[Type]\tTEXT\t\t69\t1\tPEnum_BACnetFeedbackValueType\t1\nPARAM\tbf32fb49-e742-4bea-8814-cbc5bbaf2f99\tPset_BinaryInput.InactiveText[Type]\tTEXT\t\t69\t1\tIfcText\t1\nPARAM\tf502e97f-9f51-4133-aa09-1d5f64c967ac\tPset_BinaryInput.MinimumOffTime[Type]\tMULTILINETEXT\t\t69\t1\tIfcLocalTime\t1\nPARAM\t2c29d5c6-6a4f-470e-93ce-277dc60b71b8\tPset_BinaryInput.MinimumOnTime[Type]\tMULTILINETEXT\t\t69\t1\tIfcLocalTime\t1\nPARAM\tca09d749-7262-480f-9213-372ebb97a44d\tPset_BinaryInput.Polarity[Type]\tTEXT\t\t69\t1\tPEnum_PolarityEnum\t1\n#\nGROUP\t70\tPset_BinaryOutput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0ec86560-1870-49d1-92c2-c5445ca5f879\tPset_BinaryOutput.AckedTransitions[Type]\tTEXT\t\t70\t1\tPEnum_BACnetAckedTransitionsType\t1\nPARAM\t7c67aae3-a325-45a9-904f-d6ec732d7fb4\tPset_BinaryOutput.ActiveText[Type]\tTEXT\t\t70\t1\tIfcText\t1\nPARAM\t335416f0-b2e3-4d32-bebc-661c154e5934\tPset_BinaryOutput.AlarmValue[Type]\tTEXT\t\t70\t1\tPEnum_BACnetAlarmValueType\t1\nPARAM\ta56c491d-2220-4999-819b-5a42a3d5dea8\tPset_BinaryOutput.EventEnable[Type]\tTEXT\t\t70\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\td10e485c-efbe-46ec-9259-f9e1ae922811\tPset_BinaryOutput.InactiveText[Type]\tTEXT\t\t70\t1\tIfcText\t1\nPARAM\t7b0f613a-0055-4577-a4ec-47a6256228aa\tPset_BinaryOutput.Polarity[Type]\tTEXT\t\t70\t1\tPEnum_PolarityEnum\t1\n#\nGROUP\t71\tPset_BoilerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc731b9db-a554-4eca-97e4-e5a90b094c00\tPset_BoilerPHistory.AuxiliaryEnergyConsumption[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\t16feae6b-5179-47a2-91a9-0ae29294551a\tPset_BoilerPHistory.CombustionChamberTemperature[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\tac2737fa-d539-4603-be81-f049b7f958c2\tPset_BoilerPHistory.CombustionEfficiency[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\tcaab0eb4-44db-48cd-8269-16ef977ec804\tPset_BoilerPHistory.CombustionTemperature[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\t44000485-feeb-4e83-82a1-c9b577251a9a\tPset_BoilerPHistory.EnergySourceConsumption[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\td1b302dd-69c3-46e5-a047-19e9d93ff821\tPset_BoilerPHistory.Load[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\td1793c3f-5aed-4ff4-9e8a-20d29f5d5ddc\tPset_BoilerPHistory.OperationalEfficiency[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\t56c8eab8-d321-4b44-ae83-8e07d742ad34\tPset_BoilerPHistory.PartLoadRatio[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\t40bbc244-7e7d-4dc5-a4d5-3827d16b54b7\tPset_BoilerPHistory.PrimaryEnergyConsumption[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\tf9c5e53d-d24e-4c48-9a20-a6099df794e5\tPset_BoilerPHistory.WorkingPressure[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\tff9d6017-187b-4dcd-9fa9-7ab21cf4eb29\tPset_BoilerPHistory.WorkingPressureHistory[Type]\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\n#\nGROUP\t72\tPset_BoilerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4e7ee0fe-49e7-49ae-a285-7551f427cf55\tPset_BoilerTypeCommon.EnergySource[Type]\tTEXT\t\t72\t1\tPEnum_EnergySource\t1\nPARAM\t17e7b290-2fc3-4cf2-bd3c-28b44c6dc22b\tPset_BoilerTypeCommon.HeatOutput[Type]\tMULTILINETEXT\t\t72\t1\tPropertyListValue\t1\nPARAM\t07a0e22d-5029-4417-bcd9-efd313bacf83\tPset_BoilerTypeCommon.HeatTransferSurfaceArea[Type]\tAREA\t\t72\t1\tIfcAreaMeasure\t1\nPARAM\t00223468-6803-476d-bdee-8771a33a1a35\tPset_BoilerTypeCommon.IsWaterStorageHeater[Type]\tYESNO\t\t72\t1\tIfcBoolean\t1\nPARAM\t68293f88-7942-4662-a76c-83f977391594\tPset_BoilerTypeCommon.Material[Type]\tMULTILINETEXT\t\t72\t1\tIfcMaterial\t1\nPARAM\t05f9fa43-cc17-47d5-87b8-8e9568b6fa6f\tPset_BoilerTypeCommon.NominalEfficiency[Type]\tMULTILINETEXT\t\t72\t1\tPropertyListValue\t1\nPARAM\t10b17e6b-c08e-468e-a1da-09ff51db7e7f\tPset_BoilerTypeCommon.NominalEnergyConsumption[Type]\tNUMBER\t\t72\t1\tIfcPowerMeasure\t1\nPARAM\t8420b0ec-f2cc-4813-b8b6-c59bc05bce72\tPset_BoilerTypeCommon.NominalPartLoadRatio[Type]\tMULTILINETEXT\t\t72\t1\tPropertyBoundedValue\t1\nPARAM\t0cafc4ce-9783-4693-a095-e901f89865fd\tPset_BoilerTypeCommon.OperatingMode[Type]\tTEXT\t\t72\t1\tPEnum_BoilerOperatingMode\t1\nPARAM\ta6d69999-2690-451b-bc2d-e5b7b8b44954\tPset_BoilerTypeCommon.OutletTemperatureRange[Type]\tMULTILINETEXT\t\t72\t1\tPropertyBoundedValue\t1\nPARAM\t14b49da2-fa4a-4ffc-aed1-076daa46066f\tPset_BoilerTypeCommon.PartialLoadEfficiencyCurves[Type]\tMULTILINETEXT\t\t72\t1\tPropertyTableValue\t1\nPARAM\te107239b-357c-446c-b830-a485f94e382d\tPset_BoilerTypeCommon.PressureRating[Type]\tNUMBER\t\t72\t1\tIfcPressureMeasure\t1\nPARAM\t0615fe40-a9a3-40dc-87f4-d960cd2ed599\tPset_BoilerTypeCommon.Reference[Type]\tTEXT\t\t72\t1\tIfcIdentifier\t1\nPARAM\t0cd8fc41-59c9-449e-9efb-5f3a55db4b6f\tPset_BoilerTypeCommon.Status[Type]\tTEXT\t\t72\t1\tPEnum_ElementStatus\t1\nPARAM\t792eae9e-f1af-4d93-8528-bb0cb629b7d1\tPset_BoilerTypeCommon.WaterInletTemperatureRange[Type]\tMULTILINETEXT\t\t72\t1\tPropertyBoundedValue\t1\nPARAM\ta02adb6e-bc1e-4d4b-8604-6f728715390f\tPset_BoilerTypeCommon.WaterStorageCapacity[Type]\tVOLUME\t\t72\t1\tIfcVolumeMeasure\t1\nPARAM\t2dafc90a-bd35-447f-86fd-0612e3e6da95\tPset_BoilerTypeCommon.Weight[Type]\tNUMBER\t\t72\t1\tIfcMassMeasure\t1\n#\nGROUP\t73\tPset_BoilerTypeSteam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7cc309bc-1d97-4d70-a604-b6034a9eea70\tPset_BoilerTypeSteam.HeatOutput[Type]\tMULTILINETEXT\t\t73\t1\tPropertyTableValue\t1\nPARAM\t09616851-5a6b-4740-9b03-e2c555051106\tPset_BoilerTypeSteam.MaximumOutletPressure[Type]\tTEXT\t\t73\t1\tIfcLabel\t1\nPARAM\t8678fec1-d7d6-442c-a32a-653c341cd70e\tPset_BoilerTypeSteam.NominalEfficiency[Type]\tMULTILINETEXT\t\t73\t1\tPropertyTableValue\t1\nPARAM\t784b19a8-bafb-4347-b78d-b4f2d47ad70a\tPset_BoilerTypeSteam.NominalEfficiencyTable[Type]\tMULTILINETEXT\t\t73\t1\tPropertyTableValue\t1\n#\nGROUP\t74\tPset_BoilerTypeWater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t060fc468-8dd7-45de-9f72-99c37b7de46d\tPset_BoilerTypeWater.HeatOutput[Type]\tMULTILINETEXT\t\t74\t1\tPropertyTableValue\t1\nPARAM\tcc538db3-a102-4f74-a8b3-863792d5fd04\tPset_BoilerTypeWater.NominalEfficiency[Type]\tMULTILINETEXT\t\t74\t1\tPropertyTableValue\t1\n#\nGROUP\t75\tPset_BoreholeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1fac041c-6408-4057-8d18-3b865f802d89\tPset_BoreholeCommon.BoreholeState[Type]\tTEXT\t\t75\t1\tPEnum_BoreholeState\t1\nPARAM\ta140c315-f1d3-4f54-8d1a-3ce39945fcf8\tPset_BoreholeCommon.CapDepth[Type]\tLENGTH\t\t75\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0bc0c3cc-4017-4495-8aa8-b41b2bb1fe07\tPset_BoreholeCommon.CapMaterial[Type]\tTEXT\t\t75\t1\tIfcLabel\t1\nPARAM\t29f52f68-82fc-4647-bffb-e4f43c6f58b8\tPset_BoreholeCommon.FillingDepth[Type]\tLENGTH\t\t75\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6c6148cc-a326-4c38-b9a5-888214d5524b\tPset_BoreholeCommon.FillingMaterial[Type]\tTEXT\t\t75\t1\tIfcLabel\t1\nPARAM\t9b9425b9-08e7-4639-a649-c5ef2a33a7cd\tPset_BoreholeCommon.GroundwaterDepth[Type]\tLENGTH\t\t75\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta5bea209-b9a8-4607-942a-c177f7adc5aa\tPset_BoreholeCommon.LiningMaterial[Type]\tTEXT\t\t75\t1\tIfcLabel\t1\nPARAM\t182f693f-f7d1-483c-bfea-6c186219fe62\tPset_BoreholeCommon.LiningThickness[Type]\tLENGTH\t\t75\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t76\tPset_BoundedCourseCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te94b84de-4cd6-4f11-a2b3-b12566bf52db\tPset_BoundedCourseCommon.SpreadingRate[Type]\tNUMBER\t\t76\t1\tIfcNumericMeasure\t1\n#\nGROUP\t77\tPset_BreakwaterCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t663859f4-cb36-4345-b5a3-4772cdff547c\tPset_BreakwaterCommon.Elevation[Type]\tLENGTH\t\t77\t1\tIfcLengthMeasure\t1\nPARAM\tfa417172-5597-4954-9fa5-e708f94cc378\tPset_BreakwaterCommon.StructuralStyle[Type]\tTEXT\t\t77\t1\tIfcLabel\t1\n#\nGROUP\t78\tPset_BridgeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc0290c9f-ebe0-458e-bd4d-ec1b5f0457bc\tPset_BridgeCommon.StructureIndicator[Type]\tTEXT\t\t78\t1\tPEnum_StructureIndicator\t1\n#\nGROUP\t79\tPset_BuildingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te55584f1-325c-41bd-ae12-4e01200bc15e\tPset_BuildingCommon.AncillaryFireUse[Type]\tTEXT\t\t79\t1\tIfcLabel\t1\nPARAM\t50cd0a23-eecc-4544-916f-5099d3d7f9be\tPset_BuildingCommon.BuildingID[Type]\tTEXT\t\t79\t1\tIfcIdentifier\t1\nPARAM\t4e5bb594-6e76-4d37-8743-57536a79fc44\tPset_BuildingCommon.ConstructionMethod[Type]\tTEXT\t\t79\t1\tIfcLabel\t1\nPARAM\t2f767d5b-f2fa-4828-bdf3-a745c1053ba9\tPset_BuildingCommon.FireProtectionClass[Type]\tTEXT\t\t79\t1\tIfcLabel\t1\nPARAM\ta3657df0-3def-4fa6-8fde-7f20f655e1ea\tPset_BuildingCommon.GrossAreaPlanned[Type]\tAREA\t\t79\t1\tIfcAreaMeasure\t1\nPARAM\t17177d15-bafb-4eb8-84b5-76369599ce93\tPset_BuildingCommon.GrossPlannedArea[Type]\tAREA\t\t79\t1\tIfcAreaMeasure\t1\nPARAM\t227c295b-b984-4e85-9e61-41634a935a40\tPset_BuildingCommon.IsLandmarked[Type]\tYESNO\t\t79\t1\tIfcLogical\t1\nPARAM\tf8d69b6d-0bb6-470c-9f34-9097b130cff2\tPset_BuildingCommon.IsPermanentID[Type]\tYESNO\t\t79\t1\tIfcBoolean\t1\nPARAM\t6fbe288c-6522-4e1b-ae8c-652c828e8f4d\tPset_BuildingCommon.MainFireUse[Type]\tTEXT\t\t79\t1\tIfcLabel\t1\nPARAM\te774616b-80ef-45ef-9ca9-641f4d8c96da\tPset_BuildingCommon.NetPlannedArea[Type]\tAREA\t\t79\t1\tIfcAreaMeasure\t1\nPARAM\t80ca501b-c7a6-4648-89d1-b08f92659b5e\tPset_BuildingCommon.NumberOfStoreys[Type]\tINTEGER\t\t79\t1\tIfcCountMeasure\t1\nPARAM\t4609f5af-7106-47b5-936b-264cb2249e69\tPset_BuildingCommon.OccupancyType[Type]\tTEXT\t\t79\t1\tIfcLabel\t1\nPARAM\t980db421-47bb-479b-9371-6620856568e7\tPset_BuildingCommon.Reference[Type]\tTEXT\t\t79\t1\tIfcIdentifier\t1\nPARAM\t0e9d4b20-ea69-4d22-8381-4b154d8fcd32\tPset_BuildingCommon.SprinklerProtection[Type]\tYESNO\t\t79\t1\tIfcBoolean\t1\nPARAM\t87508413-7241-4a69-8f84-65b5ac41b367\tPset_BuildingCommon.SprinklerProtectionAutomatic[Type]\tYESNO\t\t79\t1\tIfcBoolean\t1\nPARAM\tfafb885e-125e-4d33-86c2-7d134d948148\tPset_BuildingCommon.YearOfConstruction[Type]\tTEXT\t\t79\t1\tIfcLabel\t1\nPARAM\t4f6cf9ae-bb41-482d-a507-f74c16a0c381\tPset_BuildingCommon.YearOfLastRefurbishment[Type]\tTEXT\t\t79\t1\tIfcLabel\t1\n#\nGROUP\t80\tPset_BuildingElementProxyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t139a5d38-2534-4558-982b-afacf18bee06\tPset_BuildingElementProxyCommon.FireRating[Type]\tTEXT\t\t80\t1\tIfcLabel\t1\nPARAM\ta4995f86-0382-4c07-a5b2-44f8718b9342\tPset_BuildingElementProxyCommon.IsExternal[Type]\tYESNO\t\t80\t1\tIfcBoolean\t1\nPARAM\t7884b9d5-9f0d-4836-93c1-01e493a4b2d5\tPset_BuildingElementProxyCommon.LoadBearing[Type]\tYESNO\t\t80\t1\tIfcBoolean\t1\nPARAM\tb51681ee-5817-4e01-9068-69d0103bf375\tPset_BuildingElementProxyCommon.Reference[Type]\tTEXT\t\t80\t1\tIfcIdentifier\t1\nPARAM\tbc59e591-a230-463d-af46-5dd8c97eb9b0\tPset_BuildingElementProxyCommon.Status[Type]\tTEXT\t\t80\t1\tPEnum_ElementStatus\t1\nPARAM\t24f7fefb-a1e2-41ca-b013-6321fb4ef785\tPset_BuildingElementProxyCommon.ThermalTransmittance[Type]\tNUMBER\t\t80\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t81\tPset_BuildingElementProxyProvisionForVoid\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48a80664-169a-4449-b086-119016c5d090\tPset_BuildingElementProxyProvisionForVoid.Depth[Type]\tLENGTH\t\t81\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t59202f8f-4301-457f-ba75-aa9529930f5d\tPset_BuildingElementProxyProvisionForVoid.Diameter[Type]\tLENGTH\t\t81\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0417c50e-b70e-4092-9163-a18a5526e6a6\tPset_BuildingElementProxyProvisionForVoid.Height[Type]\tLENGTH\t\t81\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc28bc8f1-56af-4a8c-b424-e67fdb7488e6\tPset_BuildingElementProxyProvisionForVoid.Shape[Type]\tTEXT\t\t81\t1\tIfcLabel\t1\nPARAM\t89557a4a-4656-490f-b529-b113dbde7372\tPset_BuildingElementProxyProvisionForVoid.System[Type]\tTEXT\t\t81\t1\tIfcLabel\t1\nPARAM\td4fba4e8-a7ab-4869-bc6c-5f1524a2d6b6\tPset_BuildingElementProxyProvisionForVoid.Width[Type]\tLENGTH\t\t81\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t82\tPset_BuildingStoreyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teb2ce09f-1184-431c-9713-bc459189ea02\tPset_BuildingStoreyCommon.AboveGround[Type]\tYESNO\t\t82\t1\tIfcLogical\t1\nPARAM\t67076e25-d3d9-4f2b-83b2-7fe3f3920365\tPset_BuildingStoreyCommon.ElevationOfFFLRelative[Type]\tLENGTH\t\t82\t1\tIfcLengthMeasure\t1\nPARAM\t0cb4c6f6-7bbd-4f72-8b85-f773b5da507c\tPset_BuildingStoreyCommon.ElevationOfSSLRelative[Type]\tLENGTH\t\t82\t1\tIfcLengthMeasure\t1\nPARAM\t3a602985-9b93-4123-97e8-92a4359494a3\tPset_BuildingStoreyCommon.EntranceLevel[Type]\tYESNO\t\t82\t1\tIfcBoolean\t1\nPARAM\t5ae7fa2b-d22e-42cf-8540-1a7a8644b992\tPset_BuildingStoreyCommon.GrossAreaPlanned[Type]\tAREA\t\t82\t1\tIfcAreaMeasure\t1\nPARAM\tc0a0347d-85f9-4437-a727-a0a7da77341a\tPset_BuildingStoreyCommon.GrossPlannedArea[Type]\tAREA\t\t82\t1\tIfcAreaMeasure\t1\nPARAM\t27dcd7da-24a2-4d57-adf5-7ab870994b90\tPset_BuildingStoreyCommon.LoadBearingCapacity[Type]\tNUMBER\t\t82\t1\tIfcPlanarForceMeasure\t1\nPARAM\tba72d71e-df74-4745-a011-d5c441074b84\tPset_BuildingStoreyCommon.NetAreaPlanned[Type]\tAREA\t\t82\t1\tIfcAreaMeasure\t1\nPARAM\t1ef9f7d5-e3ad-4425-8ea2-ff1e005a3c27\tPset_BuildingStoreyCommon.NetPlannedArea[Type]\tAREA\t\t82\t1\tIfcAreaMeasure\t1\nPARAM\t3221479f-0be8-4b3b-bed2-a5869a167f3b\tPset_BuildingStoreyCommon.Reference[Type]\tTEXT\t\t82\t1\tIfcIdentifier\t1\nPARAM\t6ffaf186-f421-4912-a567-22e4c47ba285\tPset_BuildingStoreyCommon.SprinklerProtection[Type]\tYESNO\t\t82\t1\tIfcBoolean\t1\nPARAM\t9ee0a8df-1db5-407c-875c-ad90c13c8078\tPset_BuildingStoreyCommon.SprinklerProtectionAutomatic[Type]\tYESNO\t\t82\t1\tIfcBoolean\t1\n#\nGROUP\t83\tPset_BuildingSystemCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a256f3b-1395-4d3c-91eb-88945489b812\tPset_BuildingSystemCommon.Reference[Type]\tTEXT\t\t83\t1\tIfcIdentifier\t1\n#\nGROUP\t84\tPset_BuildingUse\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td3d112aa-cf9f-4d5f-96e5-8a5d0bcbf4a5\tPset_BuildingUse.MarketCategory[Type]\tTEXT\t\t84\t1\tIfcLabel\t1\nPARAM\t5ac6b455-31b3-4f15-8bca-5e4116776aa7\tPset_BuildingUse.MarketSubCategoriesAvailableFuture[Type]\tMULTILINETEXT\t\t84\t1\tPropertyListValue\t1\nPARAM\tbf34cb99-5dfc-4c19-acf7-012dfbc43e39\tPset_BuildingUse.MarketSubCategoriesAvailableNow[Type]\tMULTILINETEXT\t\t84\t1\tPropertyListValue\t1\nPARAM\t3e0e50fd-cdf4-4e34-90c1-fa5617e7d6ea\tPset_BuildingUse.MarketSubCategory[Type]\tTEXT\t\t84\t1\tIfcLabel\t1\nPARAM\t23e6f432-c9f2-49d1-b6be-10a96347b72e\tPset_BuildingUse.NarrativeText[Type]\tTEXT\t\t84\t1\tIfcText\t1\nPARAM\t1fb6b646-48d6-498c-afed-0861b075d51b\tPset_BuildingUse.PlanningControlStatus[Type]\tTEXT\t\t84\t1\tIfcLabel\t1\nPARAM\tee02336d-1f6c-42d5-af73-7960a6dd1dbb\tPset_BuildingUse.RentalRatesInCategoryFuture[Type]\tMULTILINETEXT\t\t84\t1\tPropertyBoundedValue\t1\nPARAM\t1f7bedbc-da2d-4eb2-936d-12103dfeada0\tPset_BuildingUse.RentalRatesInCategoryNow[Type]\tMULTILINETEXT\t\t84\t1\tPropertyBoundedValue\t1\nPARAM\tbcacf575-50e0-4445-a73b-b9bc4889d0d3\tPset_BuildingUse.TenureModesAvailableFuture[Type]\tMULTILINETEXT\t\t84\t1\tPropertyListValue\t1\nPARAM\t26bb563e-f368-486b-979f-08f508a12815\tPset_BuildingUse.TenureModesAvailableNow[Type]\tMULTILINETEXT\t\t84\t1\tPropertyListValue\t1\nPARAM\t8a0fc85d-1810-408f-8cf8-be1500118de5\tPset_BuildingUse.VacancyRateInCategoryFuture[Type]\tNUMBER\t\t84\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta3baf2d8-d221-4bd3-bd26-51dda3028ed9\tPset_BuildingUse.VacancyRateInCategoryNow[Type]\tNUMBER\t\t84\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t85\tPset_BuildingUseAdjacent\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t768892e1-b40a-4848-9b99-d13bc56b36ac\tPset_BuildingUseAdjacent.MarketCategory[Type]\tTEXT\t\t85\t1\tIfcLabel\t1\nPARAM\t09db3dab-7163-4cca-97a1-584db4e913da\tPset_BuildingUseAdjacent.MarketSubCategory[Type]\tTEXT\t\t85\t1\tIfcLabel\t1\nPARAM\t194665c1-d805-4fab-9075-fabd9ef524d8\tPset_BuildingUseAdjacent.NarrativeText[Type]\tTEXT\t\t85\t1\tIfcText\t1\nPARAM\tc7eea947-ae1a-4c18-9678-efa4a9107bd7\tPset_BuildingUseAdjacent.PlanningControlStatus[Type]\tTEXT\t\t85\t1\tIfcLabel\t1\n#\nGROUP\t86\tPset_BuildingWaterStorage\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t864133f9-ce3f-4613-b9c4-760ddc6093ad\tPset_BuildingWaterStorage.OneDayCoolingTowerMakeupWater[Type]\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\nPARAM\t4f550641-5478-4555-96f2-b54c3d0f0b4e\tPset_BuildingWaterStorage.OneDayEssentialWater[Type]\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\nPARAM\t192e28e9-1ead-4208-a167-d823e07aa268\tPset_BuildingWaterStorage.OneDayPotableWater[Type]\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\nPARAM\tefa8d948-485d-49b2-a5a1-8ef50e307ab6\tPset_BuildingWaterStorage.OneDayProcessOrProductionWater[Type]\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\nPARAM\t55099d26-167a-4f86-9851-5c4eba5dae3d\tPset_BuildingWaterStorage.WaterStorageRatePerPerson[Type]\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t87\tPset_BuiltSystemRailwayLine\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tef74fece-3e9f-44cd-bb3d-7259917dad3c\tPset_BuiltSystemRailwayLine.IsElectrified[Type]\tYESNO\t\t87\t1\tIfcBoolean\t1\nPARAM\t798df79d-f4ca-4a3b-a7c1-199708030e1e\tPset_BuiltSystemRailwayLine.LineCharacteristic[Type]\tTEXT\t\t87\t1\tPEnum_LineCharacteristic\t1\nPARAM\t7eaada14-e4fd-42ea-9150-9437ba361468\tPset_BuiltSystemRailwayLine.LineID[Type]\tTEXT\t\t87\t1\tIfcIdentifier\t1\n#\nGROUP\t88\tPset_BuiltSystemRailwayTrack\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6d1b324d-89ad-4f41-a4fb-445fe31d323c\tPset_BuiltSystemRailwayTrack.TrackCharacteristic[Type]\tTEXT\t\t88\t1\tPEnum_TrackCharacteristic\t1\nPARAM\tc7b43b6a-b63c-4f34-8258-b71f575c4681\tPset_BuiltSystemRailwayTrack.TrackID[Type]\tTEXT\t\t88\t1\tIfcIdentifier\t1\nPARAM\ta59d1c50-eada-4be2-b75a-ed47c39e5a92\tPset_BuiltSystemRailwayTrack.TrackNumber[Type]\tTEXT\t\t88\t1\tIfcIdentifier\t1\nPARAM\t0de6d30b-24a7-456c-a8c0-323dd806bfa1\tPset_BuiltSystemRailwayTrack.TrackUsage[Type]\tTEXT\t\t88\t1\tPEnum_TrackUsage\t1\n#\nGROUP\t89\tPset_BurnerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbcaa019f-e18d-46d3-8f5a-0cc199182f91\tPset_BurnerTypeCommon.EnergySource[Type]\tTEXT\t\t89\t1\tPEnum_EnergySource\t1\nPARAM\tb21fa232-644f-4400-b448-3e9d34338262\tPset_BurnerTypeCommon.Reference[Type]\tTEXT\t\t89\t1\tIfcIdentifier\t1\nPARAM\t0fddd35b-059c-4315-b887-df1b5fc434b7\tPset_BurnerTypeCommon.Status[Type]\tTEXT\t\t89\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t90\tPset_CableCarrierFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9cbe5a9b-4a6f-4d80-866d-308f4180e235\tPset_CableCarrierFittingTypeCommon.Reference[Type]\tTEXT\t\t90\t1\tIfcIdentifier\t1\nPARAM\t160b02e5-5b41-4d52-9af5-87d05c817c38\tPset_CableCarrierFittingTypeCommon.Status[Type]\tTEXT\t\t90\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t91\tPset_CableCarrierSegmentTypeCableLadderSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taac8c03f-95a3-4f6f-8dec-71f3b33c2ee6\tPset_CableCarrierSegmentTypeCableLadderSegment.LadderConfiguration[Type]\tTEXT\t\t91\t1\tIfcText\t1\nPARAM\t22dc51b7-9e86-4587-beb2-d652ea9d0f00\tPset_CableCarrierSegmentTypeCableLadderSegment.NominalHeight[Type]\tLENGTH\t\t91\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t742ffca9-bc98-4c16-befa-a817b2206342\tPset_CableCarrierSegmentTypeCableLadderSegment.NominalLength[Type]\tLENGTH\t\t91\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taca286fc-7f43-4ea4-85ce-af884283550d\tPset_CableCarrierSegmentTypeCableLadderSegment.NominalWidth[Type]\tLENGTH\t\t91\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t92\tPset_CableCarrierSegmentTypeCableTraySegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6d4766cb-2d83-44b2-96fe-4e0f8395d65e\tPset_CableCarrierSegmentTypeCableTraySegment.HasCover[Type]\tYESNO\t\t92\t1\tIfcBoolean\t1\nPARAM\t96cbbdd3-85ad-4395-979f-16ca0e56d5a6\tPset_CableCarrierSegmentTypeCableTraySegment.NominalHeight[Type]\tLENGTH\t\t92\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t65f5a20e-e828-4b1f-bf5f-2b0ac829ab40\tPset_CableCarrierSegmentTypeCableTraySegment.NominalLength[Type]\tLENGTH\t\t92\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2d7f1464-e09b-45a8-8129-b48bd34635b9\tPset_CableCarrierSegmentTypeCableTraySegment.NominalWidth[Type]\tLENGTH\t\t92\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t93\tPset_CableCarrierSegmentTypeCableTrunkingSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4f7ff295-5a95-4193-9699-da06c586fac0\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NominalHeight[Type]\tLENGTH\t\t93\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb797e6a5-f3db-4d02-aa5d-408eaa14a73e\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NominalLength[Type]\tLENGTH\t\t93\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te2d79fce-4e8e-44a4-8202-770c5df61898\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NominalWidth[Type]\tLENGTH\t\t93\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfbff76cd-9e20-48e5-a664-191f9d9c3240\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NumberOfCompartments[Type]\tINTEGER\t\t93\t1\tIfcCountMeasure\t1\n#\nGROUP\t94\tPset_CableCarrierSegmentTypeCatenaryWire\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfd6fb4b9-f6c7-45fb-ae37-3e9169f181f9\tPset_CableCarrierSegmentTypeCatenaryWire.ACResistance[Type]\tNUMBER\t\t94\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t8454e853-caa3-40a9-9fcd-99a7dbb8b1a9\tPset_CableCarrierSegmentTypeCatenaryWire.CatenaryWireType[Type]\tTEXT\t\t94\t1\tIfcLabel\t1\nPARAM\td11c4201-1d12-467d-89b7-ecfabfbb9bc9\tPset_CableCarrierSegmentTypeCatenaryWire.CurrentCarryingCapacity[Type]\tNUMBER\t\t94\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t943da812-0db4-4393-b161-9e0ac16d6921\tPset_CableCarrierSegmentTypeCatenaryWire.DCResistance[Type]\tNUMBER\t\t94\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t41916026-2a7b-434f-b436-b30c684158ab\tPset_CableCarrierSegmentTypeCatenaryWire.LayRatio[Type]\tNUMBER\t\t94\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t50abb522-6f46-4a2e-bb4c-0018d4ec29c7\tPset_CableCarrierSegmentTypeCatenaryWire.MassPerLength[Type]\tNUMBER\t\t94\t1\tIfcMassPerLengthMeasure\t1\nPARAM\te33fb8a3-91bc-48e4-a4d1-8452547beebb\tPset_CableCarrierSegmentTypeCatenaryWire.MechanicalTension[Type]\tNUMBER\t\t94\t1\tIfcForceMeasure\t1\nPARAM\te26fe79d-6570-43cf-b9f7-2d53ee3afa25\tPset_CableCarrierSegmentTypeCatenaryWire.PhysicalDescriptionReference[Type]\tMULTILINETEXT\t\t94\t1\tIfcExternalReference\t1\nPARAM\t2bb1dfd5-c2c6-4890-b962-b5a8d7415a0a\tPset_CableCarrierSegmentTypeCatenaryWire.StrandingMethod[Type]\tTEXT\t\t94\t1\tIfcLabel\t1\nPARAM\t6bd2fa9c-6dfd-430b-949e-3e00e7e92775\tPset_CableCarrierSegmentTypeCatenaryWire.TensileStrength[Type]\tNUMBER\t\t94\t1\tIfcPressureMeasure\t1\nPARAM\t699389ab-91f9-4204-bc54-d9bc2a599e5a\tPset_CableCarrierSegmentTypeCatenaryWire.ThermalExpansionCoefficient[Type]\tNUMBER\t\t94\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\t0c1e500a-5e6b-41e3-9953-df7d0e886323\tPset_CableCarrierSegmentTypeCatenaryWire.UltimateTensileStrength[Type]\tNUMBER\t\t94\t1\tIfcForceMeasure\t1\nPARAM\t2200d3c6-68d7-4755-818b-bf3a414b83a7\tPset_CableCarrierSegmentTypeCatenaryWire.YoungModulus[Type]\tNUMBER\t\t94\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t95\tPset_CableCarrierSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcabca114-2329-46e7-935a-0f54a4d0f15c\tPset_CableCarrierSegmentTypeCommon.Reference[Type]\tTEXT\t\t95\t1\tIfcIdentifier\t1\nPARAM\t41f256d1-ce87-4c5c-bec4-e8d46bd1620a\tPset_CableCarrierSegmentTypeCommon.Status[Type]\tTEXT\t\t95\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t96\tPset_CableCarrierSegmentTypeConduitSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83194735-e827-41ad-b539-3cb016bffcf0\tPset_CableCarrierSegmentTypeConduitSegment.ConduitShapeType[Type]\tTEXT\t\t96\t1\tPEnum_ConduitShapeType\t1\nPARAM\t90d84926-0b03-4cb5-b996-b4101e72ae0b\tPset_CableCarrierSegmentTypeConduitSegment.IsRigid[Type]\tYESNO\t\t96\t1\tIfcBoolean\t1\nPARAM\t089110c0-63b6-48a8-9603-60362c2126b1\tPset_CableCarrierSegmentTypeConduitSegment.NominalDiameter[Type]\tLENGTH\t\t96\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te295efce-8914-41fa-8ca8-8f1583ced6ad\tPset_CableCarrierSegmentTypeConduitSegment.NominalHeight[Type]\tLENGTH\t\t96\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta239a368-1cd4-4a2c-87e3-451ddfbd72a5\tPset_CableCarrierSegmentTypeConduitSegment.NominalLength[Type]\tLENGTH\t\t96\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3fd4c79b-bd83-4db7-81f2-06e79a8c557f\tPset_CableCarrierSegmentTypeConduitSegment.NominalWidth[Type]\tLENGTH\t\t96\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t97\tPset_CableCarrierSegmentTypeDropper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb39dc3cd-6b0b-4eb7-ba4f-fea199f8ed3e\tPset_CableCarrierSegmentTypeDropper.AssemblyInstruction[Type]\tMULTILINETEXT\t\t97\t1\tIfcExternalReference\t1\nPARAM\t4e80e506-4db3-4ef6-bfe9-abcff001c289\tPset_CableCarrierSegmentTypeDropper.CurrentCarryingCapacity[Type]\tNUMBER\t\t97\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t7170b8a4-7b1b-4974-81b9-e8aa377dd667\tPset_CableCarrierSegmentTypeDropper.IsAdjustable[Type]\tYESNO\t\t97\t1\tIfcBoolean\t1\nPARAM\te3041aec-3aa9-43ac-b5ad-9080f763b7e0\tPset_CableCarrierSegmentTypeDropper.IsCurrentCarrying[Type]\tYESNO\t\t97\t1\tIfcBoolean\t1\nPARAM\ta0fae53f-f439-4ce1-94d5-31673f461afc\tPset_CableCarrierSegmentTypeDropper.IsRigid[Type]\tYESNO\t\t97\t1\tIfcBoolean\t1\nPARAM\t89487ccf-dc66-421f-bf99-93a1a0669bba\tPset_CableCarrierSegmentTypeDropper.NominalLoad[Type]\tNUMBER\t\t97\t1\tIfcForceMeasure\t1\nPARAM\tc3a8aee2-265c-445e-b10d-e0fda1b565c3\tPset_CableCarrierSegmentTypeDropper.TensileStrength[Type]\tNUMBER\t\t97\t1\tIfcPressureMeasure\t1\nPARAM\te52c3584-f1d4-4b6f-bd8f-68d1ff1c3ff7\tPset_CableCarrierSegmentTypeDropper.UltimateTensileStrength[Type]\tNUMBER\t\t97\t1\tIfcForceMeasure\t1\n#\nGROUP\t98\tPset_CableFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td3167094-d0a5-44ab-96c8-f66a4979aca2\tPset_CableFittingTypeCommon.Reference[Type]\tTEXT\t\t98\t1\tIfcIdentifier\t1\nPARAM\t38d1b35f-eb54-43dd-b74a-e1ff89fe0c72\tPset_CableFittingTypeCommon.Status[Type]\tTEXT\t\t98\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t99\tPset_CableFittingTypeExit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t39077cd9-30ed-4acc-92ea-d16dba26c73d\tPset_CableFittingTypeExit.GroundResistance[Type]\tNUMBER\t\t99\t1\tIfcElectricResistanceMeasure\t1\n#\nGROUP\t100\tPset_CableFittingTypeFanout\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta7e326a7-a70a-4410-8d5c-d16901c8bb1b\tPset_CableFittingTypeFanout.NumberOfTubes[Type]\tINTEGER\t\t100\t1\tIfcCountMeasure\t1\nPARAM\tdc7a6e08-3e89-487b-a3de-32420a94f0fa\tPset_CableFittingTypeFanout.TubeDiameter[Type]\tLENGTH\t\t100\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t101\tPset_CableSegmentConnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t80d2a851-a406-4d9d-a98c-7372f066edd1\tPset_CableSegmentConnector.ConnectorAColour[Type]\tTEXT\t\t101\t1\tIfcLabel\t1\nPARAM\t87f27319-834a-4ac0-8f2e-b7b6cb6ed2eb\tPset_CableSegmentConnector.ConnectorAGender[Type]\tTEXT\t\t101\t1\tPEnum_DistributionPortGender\t1\nPARAM\t54df81ee-1696-4e99-b2f0-65cfee946ff9\tPset_CableSegmentConnector.ConnectorAType[Type]\tTEXT\t\t101\t1\tIfcLabel\t1\nPARAM\t3720361f-4bab-49d0-b910-2636ad568ea5\tPset_CableSegmentConnector.ConnectorBColour[Type]\tTEXT\t\t101\t1\tIfcLabel\t1\nPARAM\t51648216-a4e1-4cd8-b3b3-ec5024eeb65d\tPset_CableSegmentConnector.ConnectorBGender[Type]\tTEXT\t\t101\t1\tPEnum_DistributionPortGender\t1\nPARAM\t5991a38b-1565-42ae-90ea-1d3e43eb2603\tPset_CableSegmentConnector.ConnectorBType[Type]\tTEXT\t\t101\t1\tIfcLabel\t1\n#\nGROUP\t102\tPset_CableSegmentOccurenceFiberSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t10b52c8d-c57f-4415-8581-0d4213831fc7\tPset_CableSegmentOccurenceFiberSegment.InUse[Type]\tYESNO\t\t102\t1\tIfcBoolean\t1\n#\nGROUP\t103\tPset_CableSegmentOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4b914814-5278-4c94-b075-3013ba2a4383\tPset_CableSegmentOccurrence.CarrierStackNumber[Type]\tINTEGER\t\t103\t1\tIfcInteger\t1\nPARAM\tc9a2fcef-415e-41c4-bf41-85057682f5af\tPset_CableSegmentOccurrence.CurrentCarryingCapacity[Type]\tNUMBER\t\t103\t1\tIfcElectricCurrentMeasure\t1\nPARAM\ta64b3442-09a0-4257-a67a-1d5140ac3040\tPset_CableSegmentOccurrence.CurrentCarryingCapasity[Type]\tNUMBER\t\t103\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t4a31f754-8340-4ef9-b0ea-a7752d2cceb3\tPset_CableSegmentOccurrence.DesignAmbientTemperature[Type]\tMULTILINETEXT\t\t103\t1\tPropertyBoundedValue\t1\nPARAM\t906442d9-dbbe-440f-84de-0021c0a30914\tPset_CableSegmentOccurrence.DistanceBetweenParallelCircuits[Type]\tLENGTH\t\t103\t1\tIfcLengthMeasure\t1\nPARAM\t525487e2-c58a-4fa1-b84e-b55e6e41d807\tPset_CableSegmentOccurrence.InstallationMethod[Type]\tTEXT\t\t103\t1\tIfcLabel\t1\nPARAM\t17a7ab30-e903-43c3-8152-c51bae235dcd\tPset_CableSegmentOccurrence.InstallationMethodFlagEnum[Type]\tTEXT\t\t103\t1\tPEnum_InstallationMethodFlagEnum\t1\nPARAM\t63b47c0c-d1f0-493f-a355-1e6393a7d35f\tPset_CableSegmentOccurrence.IsHorizontalCable[Type]\tYESNO\t\t103\t1\tIfcBoolean\t1\nPARAM\t2055318a-b501-41e0-8fc7-36000b267392\tPset_CableSegmentOccurrence.IsMountedFlatCable[Type]\tYESNO\t\t103\t1\tIfcBoolean\t1\nPARAM\t25a21846-013d-4296-ba24-9686ed7bc2a6\tPset_CableSegmentOccurrence.MaximumCableLength[Type]\tLENGTH\t\t103\t1\tIfcLengthMeasure\t1\nPARAM\t4907b222-01df-48c6-b0b6-511375dd2239\tPset_CableSegmentOccurrence.MountingMethod[Type]\tTEXT\t\t103\t1\tPEnum_MountingMethodEnum\t1\nPARAM\t44944d32-241a-46f9-85cb-8754ae9363eb\tPset_CableSegmentOccurrence.NumberOfParallelCircuits[Type]\tINTEGER\t\t103\t1\tIfcCountMeasure\t1\nPARAM\t3614d66c-4df0-4a6a-8667-2a3c486b915c\tPset_CableSegmentOccurrence.PowerLoss[Type]\tNUMBER\t\t103\t1\tIfcPowerMeasure\t1\nPARAM\t2ff8a748-b7a7-468e-b2e0-f8091fb67264\tPset_CableSegmentOccurrence.SequentialCode[Type]\tTEXT\t\t103\t1\tIfcLabel\t1\nPARAM\t3b0ace50-bc7e-4759-9bdb-39ab9a1e9cb8\tPset_CableSegmentOccurrence.SoilConductivity[Type]\tNUMBER\t\t103\t1\tIfcThermalConductivityMeasure\t1\nPARAM\te033ae23-c152-4d62-a215-3b0645e52f4d\tPset_CableSegmentOccurrence.UserCorrectionFactor[Type]\tNUMBER\t\t103\t1\tIfcReal\t1\n#\nGROUP\t104\tPset_CableSegmentTypeBusBarSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t26bd2714-d599-4b28-bc97-41632c312e89\tPset_CableSegmentTypeBusBarSegment.ACResistance[Type]\tNUMBER\t\t104\t1\tIfcElectricResistanceMeasure\t1\nPARAM\tf0a88d7d-1d66-4c13-a7c5-04898adf4ddf\tPset_CableSegmentTypeBusBarSegment.CrossSectionalArea[Type]\tAREA\t\t104\t1\tIfcAreaMeasure\t1\nPARAM\t5bbb33ec-9b04-4803-ba3e-5652d78c02d5\tPset_CableSegmentTypeBusBarSegment.CurrentCarryingCapacity[Type]\tNUMBER\t\t104\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t9e95ef42-c29b-414d-953e-7b47660a02d5\tPset_CableSegmentTypeBusBarSegment.DCResistance[Type]\tNUMBER\t\t104\t1\tIfcElectricResistanceMeasure\t1\nPARAM\tb7c95f44-1b8b-42db-adde-78e975b27ac2\tPset_CableSegmentTypeBusBarSegment.InsulationMethod[Type]\tTEXT\t\t104\t1\tPEnum_InsulatorType\t1\nPARAM\tf93a68c1-93be-4b93-9f29-e5187ae18187\tPset_CableSegmentTypeBusBarSegment.IsHorizontalBusbar[Type]\tYESNO\t\t104\t1\tIfcBoolean\t1\nPARAM\tdb581764-85f9-401c-bbaa-97f27d6dc3b0\tPset_CableSegmentTypeBusBarSegment.MassPerLength[Type]\tNUMBER\t\t104\t1\tIfcMassPerLengthMeasure\t1\nPARAM\t32141a9a-b8f0-410c-a8f7-aa5c91157c40\tPset_CableSegmentTypeBusBarSegment.NominalCurrent[Type]\tNUMBER\t\t104\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tcabd9ec6-904f-4650-8408-68e9024568cc\tPset_CableSegmentTypeBusBarSegment.OperationalTemperatureRange[Type]\tMULTILINETEXT\t\t104\t1\tPropertyBoundedValue\t1\nPARAM\t1421accb-83b9-4f1c-a09a-e3041cbadb35\tPset_CableSegmentTypeBusBarSegment.OverallDiameter[Type]\tLENGTH\t\t104\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8e30ce11-f3b8-48dc-9d29-24360cdfa0ea\tPset_CableSegmentTypeBusBarSegment.RatedVoltage[Type]\tMULTILINETEXT\t\t104\t1\tPropertyBoundedValue\t1\nPARAM\t1caf68b4-865e-44eb-9707-3807f7d0d29e\tPset_CableSegmentTypeBusBarSegment.TensileStrength[Type]\tNUMBER\t\t104\t1\tIfcPressureMeasure\t1\nPARAM\tf700bb6d-7ba2-482e-bd3a-9b0ed4e32778\tPset_CableSegmentTypeBusBarSegment.ThermalExpansionCoefficient[Type]\tNUMBER\t\t104\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\t0a51b926-afbb-4d31-9e8d-7d5754819ec0\tPset_CableSegmentTypeBusBarSegment.UltimateTensileStrength[Type]\tNUMBER\t\t104\t1\tIfcForceMeasure\t1\nPARAM\t2a41ec51-afd3-4e3b-b383-e3030f6b1180\tPset_CableSegmentTypeBusBarSegment.YoungModulus[Type]\tNUMBER\t\t104\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t105\tPset_CableSegmentTypeCableSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf93ed16e-5fc0-4e74-a579-e17758d80b98\tPset_CableSegmentTypeCableSegment.ACResistance[Type]\tNUMBER\t\t105\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t206e381d-716d-4b78-a4c8-8808688ad740\tPset_CableSegmentTypeCableSegment.CableInsulationMaterial[Type]\tMULTILINETEXT\t\t105\t1\tIfcMaterial\t1\nPARAM\t4262915b-f846-42f9-bb75-ca4a8bc3916f\tPset_CableSegmentTypeCableSegment.CrossSectionalArea[Type]\tAREA\t\t105\t1\tIfcAreaMeasure\t1\nPARAM\t6a4ef4c3-3bd0-412c-9928-45275ec09c41\tPset_CableSegmentTypeCableSegment.CurrentCarryingCapacity[Type]\tNUMBER\t\t105\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t1b2d1133-2f16-4e98-a312-ef31fb22f4a9\tPset_CableSegmentTypeCableSegment.DCResistance[Type]\tNUMBER\t\t105\t1\tIfcElectricResistanceMeasure\t1\nPARAM\te98a3bc5-4ad7-4aa6-9bcb-c55e0430fa66\tPset_CableSegmentTypeCableSegment.FunctionReliable[Type]\tYESNO\t\t105\t1\tIfcBoolean\t1\nPARAM\t4d102ed2-1f49-4df1-8f67-0566f5e8e7d0\tPset_CableSegmentTypeCableSegment.HalogenProof[Type]\tYESNO\t\t105\t1\tIfcBoolean\t1\nPARAM\t083bda98-9282-4029-b3b5-769d4bd4e5e2\tPset_CableSegmentTypeCableSegment.HasProtectiveEarth[Type]\tYESNO\t\t105\t1\tIfcBoolean\t1\nPARAM\t460ae770-1d68-4bcf-b435-d3ffa3a77e17\tPset_CableSegmentTypeCableSegment.InsulationVoltage[Type]\tNUMBER\t\t105\t1\tIfcElectricVoltageMeasure\t1\nPARAM\tb0b93e29-24ee-489c-8a74-a6aadcfc4d2d\tPset_CableSegmentTypeCableSegment.MassPerLength[Type]\tNUMBER\t\t105\t1\tIfcMassPerLengthMeasure\t1\nPARAM\t3ffb2c5a-b934-4781-8356-5cb4b5f73c0c\tPset_CableSegmentTypeCableSegment.MaximumBendingRadius[Type]\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1e56cf62-1037-473c-9267-3f60afa4d3b4\tPset_CableSegmentTypeCableSegment.MaximumCurrent[Type]\tNUMBER\t\t105\t1\tIfcElectricCurrentMeasure\t1\nPARAM\te10321eb-1494-4479-9e61-76a3f6081c9e\tPset_CableSegmentTypeCableSegment.MaximumOperatingTemperature[Type]\tNUMBER\t\t105\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t79772734-9732-4e62-a3aa-a4746ea70096\tPset_CableSegmentTypeCableSegment.MaximumShortCircuitTemperature[Type]\tNUMBER\t\t105\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t1e506cf1-3119-4ce4-bc35-7ec34c99ea1f\tPset_CableSegmentTypeCableSegment.MaxOperatingTemperature[Type]\tNUMBER\t\t105\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\ta83fcaf2-2d12-4791-9304-e7922f12c1f9\tPset_CableSegmentTypeCableSegment.NominalHeight[Type]\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4788440c-3b7c-45a2-98cf-8a33205aac13\tPset_CableSegmentTypeCableSegment.NominalLength[Type]\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbababf34-b0db-408e-8413-7728de2b193d\tPset_CableSegmentTypeCableSegment.NominalWidthOrDiameter[Type]\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf6d9e29d-45ed-4bf9-a676-7d21a38043dc\tPset_CableSegmentTypeCableSegment.NormalOperatingTemperature[Type]\tNUMBER\t\t105\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\ta02e4471-60e2-43ff-85c1-342aea6930c6\tPset_CableSegmentTypeCableSegment.NumberOfCores[Type]\tINTEGER\t\t105\t1\tIfcCountMeasure\t1\nPARAM\te285fb9d-9e5d-46f6-89ef-1c80962c2d1a\tPset_CableSegmentTypeCableSegment.NumberOfWires[Type]\tINTEGER\t\t105\t1\tIfcCountMeasure\t1\nPARAM\tcf63377e-b067-4268-ae68-db862a7eee8b\tPset_CableSegmentTypeCableSegment.OverallDiameter[Type]\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf81d010b-f9fa-4595-a141-82f336cb7974\tPset_CableSegmentTypeCableSegment.RatedTemperature[Type]\tMULTILINETEXT\t\t105\t1\tPropertyBoundedValue\t1\nPARAM\tb2204776-d1ac-4543-9ed3-8fe6a1bd3a77\tPset_CableSegmentTypeCableSegment.RatedVoltage[Type]\tMULTILINETEXT\t\t105\t1\tPropertyBoundedValue\t1\nPARAM\t56abb2a1-c1fb-43ad-b466-27877eead373\tPset_CableSegmentTypeCableSegment.ScreenDiameter[Type]\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9ff3af05-690a-48a9-8978-8c7ce9e86c58\tPset_CableSegmentTypeCableSegment.SelfExtinguishing60332_1[Type]\tYESNO\t\t105\t1\tIfcBoolean\t1\nPARAM\t2e2beb43-e354-4d7b-810c-c64948bb3a5a\tPset_CableSegmentTypeCableSegment.SelfExtinguishing60332_3[Type]\tYESNO\t\t105\t1\tIfcBoolean\t1\nPARAM\t67264753-5964-4e9e-88c4-05819b46c884\tPset_CableSegmentTypeCableSegment.SheathColor[Type]\tTEXT\t\t105\t1\tIfcLabel\t1\nPARAM\t40546bf4-4e3d-4f35-b0c9-087f7e7b6157\tPset_CableSegmentTypeCableSegment.SpecialConstruction[Type]\tTEXT\t\t105\t1\tIfcLabel\t1\nPARAM\tca75f457-c596-4090-a541-a65a20b3e0c9\tPset_CableSegmentTypeCableSegment.Standard[Type]\tTEXT\t\t105\t1\tIfcLabel\t1\nPARAM\t6067a219-72dc-4734-beab-e2c8ee43a285\tPset_CableSegmentTypeCableSegment.Weight[Type]\tNUMBER\t\t105\t1\tIfcMassMeasure\t1\n#\nGROUP\t106\tPset_CableSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t533b9572-29e1-47c7-aabf-5b68acb8d662\tPset_CableSegmentTypeCommon.Reference[Type]\tTEXT\t\t106\t1\tIfcIdentifier\t1\nPARAM\t36eac336-2177-4d9c-9ad5-7680d591f574\tPset_CableSegmentTypeCommon.Status[Type]\tTEXT\t\t106\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t107\tPset_CableSegmentTypeConductorSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc81c2092-ef5b-4b1c-b722-9cb393c6e967\tPset_CableSegmentTypeConductorSegment.ACResistance[Type]\tNUMBER\t\t107\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t40c0e6b7-e962-40a5-8a0b-ca6bf4b6da12\tPset_CableSegmentTypeConductorSegment.ConductorMaterial[Type]\tTEXT\t\t107\t1\tPEnum_MaterialEnum\t1\nPARAM\tbac32df1-39aa-4b5d-b1e6-714e5f5b4c59\tPset_CableSegmentTypeConductorSegment.ConductorShape[Type]\tTEXT\t\t107\t1\tPEnum_ShapeEnum\t1\nPARAM\t82c37888-84e1-4ff6-8ca1-0d7a044cbc32\tPset_CableSegmentTypeConductorSegment.ConductorSheathMaterial[Type]\tMULTILINETEXT\t\t107\t1\tIfcMaterial\t1\nPARAM\t7e6dad12-ceab-4975-baaf-0e7f9fb7c397\tPset_CableSegmentTypeConductorSegment.Construction[Type]\tTEXT\t\t107\t1\tPEnum_ConstructionEnum\t1\nPARAM\t92bf6aea-c0be-4ec2-bd5a-2472e0fe00ab\tPset_CableSegmentTypeConductorSegment.CrossSectionalArea[Type]\tAREA\t\t107\t1\tIfcAreaMeasure\t1\nPARAM\t3f0e198a-95e0-489a-a503-a377e3a95074\tPset_CableSegmentTypeConductorSegment.CurrentCarryingCapacity[Type]\tNUMBER\t\t107\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t2c5308ba-9502-4906-a006-3450445e541e\tPset_CableSegmentTypeConductorSegment.DCResistance[Type]\tNUMBER\t\t107\t1\tIfcElectricResistanceMeasure\t1\nPARAM\ta0fe938e-59e8-4a54-8a6e-89773f96888e\tPset_CableSegmentTypeConductorSegment.ElectricalConductorFunction[Type]\tTEXT\t\t107\t1\tPEnum_ConductorFunction\t1\nPARAM\te5992a2a-93f0-42d7-a3a6-3c09b71f5a98\tPset_CableSegmentTypeConductorSegment.Function[Type]\tTEXT\t\t107\t1\tPEnum_FunctionEnum\t1\nPARAM\tb3c4b884-0e33-48e3-bc2f-4650e2eac040\tPset_CableSegmentTypeConductorSegment.IsFireResistant[Type]\tYESNO\t\t107\t1\tIfcBoolean\t1\nPARAM\t3bcfc5e2-3b64-41ca-b3b1-639d9436d902\tPset_CableSegmentTypeConductorSegment.MassPerLength[Type]\tNUMBER\t\t107\t1\tIfcMassPerLengthMeasure\t1\nPARAM\tfb414e09-4e67-48b3-9745-dfa60be36146\tPset_CableSegmentTypeConductorSegment.Material[Type]\tTEXT\t\t107\t1\tPEnum_MaterialEnum\t1\nPARAM\tde31ae19-dc2d-4d55-918d-e73ed5599b1f\tPset_CableSegmentTypeConductorSegment.MaximumOperatingTemperature[Type]\tNUMBER\t\t107\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tccdacd63-4eef-40a2-811d-d3ce785212b5\tPset_CableSegmentTypeConductorSegment.NominalCurrent[Type]\tNUMBER\t\t107\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t0bea2118-ed55-4142-80bb-be95a33ec0a1\tPset_CableSegmentTypeConductorSegment.NominalLength[Type]\tLENGTH\t\t107\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t44a92854-b874-4515-a514-8886a038d1ea\tPset_CableSegmentTypeConductorSegment.NumberOfCores[Type]\tINTEGER\t\t107\t1\tIfcCountMeasure\t1\nPARAM\tfbcef155-092e-4707-b17a-72f1c99559de\tPset_CableSegmentTypeConductorSegment.OverallDiameter[Type]\tLENGTH\t\t107\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t787f7ffb-8b7b-4dab-8bdc-9a79adf5bf91\tPset_CableSegmentTypeConductorSegment.PhaseReference[Type]\tTEXT\t\t107\t1\tIfcIdentifier\t1\nPARAM\t55389c36-1aea-4bf6-ad17-26a3cba2d812\tPset_CableSegmentTypeConductorSegment.RatedVoltage[Type]\tMULTILINETEXT\t\t107\t1\tPropertyBoundedValue\t1\nPARAM\t097a40b9-f0cb-4464-a6a0-52d1dfc131d0\tPset_CableSegmentTypeConductorSegment.Shape[Type]\tTEXT\t\t107\t1\tPEnum_ShapeEnum\t1\nPARAM\tfffe0a67-54c1-425b-930c-7dba160e8db9\tPset_CableSegmentTypeConductorSegment.SheathColor[Type]\tTEXT\t\t107\t1\tIfcLabel\t1\nPARAM\t582fe614-7f76-4255-8ead-1a25f1ea9190\tPset_CableSegmentTypeConductorSegment.TensileStrength[Type]\tNUMBER\t\t107\t1\tIfcPressureMeasure\t1\nPARAM\t51d2b87b-cc5a-4a6a-8fc7-6c46254125e5\tPset_CableSegmentTypeConductorSegment.ThermalExpansionCoefficient[Type]\tNUMBER\t\t107\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\te10eb007-45a2-457f-9cd0-5392fa023c0b\tPset_CableSegmentTypeConductorSegment.UltimateTensileStrength[Type]\tNUMBER\t\t107\t1\tIfcForceMeasure\t1\nPARAM\t25c08b85-a54b-4cb2-ad83-f7eff11832b9\tPset_CableSegmentTypeConductorSegment.YoungModulus[Type]\tNUMBER\t\t107\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t108\tPset_CableSegmentTypeContactWire\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t50a8a19f-4b3d-4ab3-a5fe-5f6621d13159\tPset_CableSegmentTypeContactWire.ACResistance[Type]\tNUMBER\t\t108\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t95e9057a-0fe4-4c9f-9296-343be99b4eb6\tPset_CableSegmentTypeContactWire.CrossSectionalArea[Type]\tAREA\t\t108\t1\tIfcAreaMeasure\t1\nPARAM\t360449bc-7132-403b-8caf-6cbe5d5ab07c\tPset_CableSegmentTypeContactWire.CurrentCarryingCapacity[Type]\tNUMBER\t\t108\t1\tIfcElectricCurrentMeasure\t1\nPARAM\te6025e48-8288-47cd-91d3-0501dbc60f32\tPset_CableSegmentTypeContactWire.DCResistance[Type]\tNUMBER\t\t108\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t72cf4297-9739-49ec-8a3d-300c830fa813\tPset_CableSegmentTypeContactWire.MassPerLength[Type]\tNUMBER\t\t108\t1\tIfcMassPerLengthMeasure\t1\nPARAM\tb0c75d38-afa1-4534-9bb0-476a8bad156e\tPset_CableSegmentTypeContactWire.TensileStrength[Type]\tNUMBER\t\t108\t1\tIfcPressureMeasure\t1\nPARAM\tcc2e3082-098a-489e-83be-cecd8d2338d5\tPset_CableSegmentTypeContactWire.ThermalExpansionCoefficient[Type]\tNUMBER\t\t108\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\tde83da6f-db80-438f-b46d-392e3fc3b3b9\tPset_CableSegmentTypeContactWire.TorsionalStrength[Type]\tNUMBER\t\t108\t1\tIfcPressureMeasure\t1\nPARAM\t47f7d3d0-3806-4cd5-bf57-859a5de7523f\tPset_CableSegmentTypeContactWire.YoungModulus[Type]\tNUMBER\t\t108\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t109\tPset_CableSegmentTypeCoreSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t346d6abb-aef4-415f-a40d-453b14541389\tPset_CableSegmentTypeCoreSegment.ACResistance[Type]\tNUMBER\t\t109\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t5fc162d1-ebe5-4888-ac77-7e6548a90da4\tPset_CableSegmentTypeCoreSegment.CoreIdentifier[Type]\tTEXT\t\t109\t1\tIfcIdentifier\t1\nPARAM\ta8643fc9-56cd-4ec9-aa72-6435ad5e3867\tPset_CableSegmentTypeCoreSegment.CurrentCarryingCapacity[Type]\tNUMBER\t\t109\t1\tIfcElectricCurrentMeasure\t1\nPARAM\td44988b3-0504-4812-9c34-cb2fe3dd55c7\tPset_CableSegmentTypeCoreSegment.DCResistance[Type]\tNUMBER\t\t109\t1\tIfcElectricResistanceMeasure\t1\nPARAM\ta26fa956-e672-4b73-bd9a-f6e7bbe2739c\tPset_CableSegmentTypeCoreSegment.FunctionReliable[Type]\tYESNO\t\t109\t1\tIfcBoolean\t1\nPARAM\t1a7f1c7f-52dd-45e2-bb87-ef3282cee66e\tPset_CableSegmentTypeCoreSegment.HalogenProof[Type]\tYESNO\t\t109\t1\tIfcBoolean\t1\nPARAM\tade3d66f-41c4-4808-a7ff-ff30e00d44d9\tPset_CableSegmentTypeCoreSegment.LayRatio[Type]\tNUMBER\t\t109\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tcac096ea-e707-4ff3-999d-080830a7990f\tPset_CableSegmentTypeCoreSegment.MassPerLength[Type]\tNUMBER\t\t109\t1\tIfcMassPerLengthMeasure\t1\nPARAM\tc03ea4ad-b53a-4083-8880-ab1c94b468e8\tPset_CableSegmentTypeCoreSegment.OverallDiameter[Type]\tLENGTH\t\t109\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3669b6ce-dae9-4c1a-ba9b-5107717d976b\tPset_CableSegmentTypeCoreSegment.RatedTemperature[Type]\tMULTILINETEXT\t\t109\t1\tPropertyBoundedValue\t1\nPARAM\tcefb75ad-dfd3-4c58-89cc-4f7c2263f552\tPset_CableSegmentTypeCoreSegment.RatedVoltage[Type]\tMULTILINETEXT\t\t109\t1\tPropertyBoundedValue\t1\nPARAM\t5aa54bf2-63bf-4988-abad-af205b95a32c\tPset_CableSegmentTypeCoreSegment.ScreenDiameter[Type]\tLENGTH\t\t109\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t84c472c0-e340-4f68-adeb-98ed942a9fd3\tPset_CableSegmentTypeCoreSegment.SelfExtinguishing60332_1[Type]\tYESNO\t\t109\t1\tIfcBoolean\t1\nPARAM\t09ef60f8-5fba-4075-a085-2d1f86d7ee6d\tPset_CableSegmentTypeCoreSegment.SelfExtinguishing60332_3[Type]\tYESNO\t\t109\t1\tIfcBoolean\t1\nPARAM\t079e84ae-d1d9-4090-b7cd-c4c1832c3dac\tPset_CableSegmentTypeCoreSegment.SheathColors[Type]\tTEXT\t\t109\t1\tPEnum_CoreColorsEnum\t1\nPARAM\taf4ce3c2-efa2-4ad7-b8a7-d8245912b3b5\tPset_CableSegmentTypeCoreSegment.SheathColours[Type]\tTEXT\t\t109\t1\tPEnum_CoreColoursEnum\t1\nPARAM\tba407d22-ee32-4fde-a2ef-50a149b3f206\tPset_CableSegmentTypeCoreSegment.Standard[Type]\tTEXT\t\t109\t1\tIfcLabel\t1\nPARAM\t514f7dd4-0322-4e27-9ba2-afa7a22833ae\tPset_CableSegmentTypeCoreSegment.StrandingMethod[Type]\tTEXT\t\t109\t1\tIfcLabel\t1\nPARAM\t1d30766c-78db-4e12-a3f6-9a8743e7d782\tPset_CableSegmentTypeCoreSegment.TensileStrength[Type]\tNUMBER\t\t109\t1\tIfcPressureMeasure\t1\nPARAM\tda83cffe-7b0e-430e-a82d-9b0d38877bc6\tPset_CableSegmentTypeCoreSegment.ThermalExpansionCoefficient[Type]\tNUMBER\t\t109\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\t91dd4905-ed28-4599-9204-511604c1b8c2\tPset_CableSegmentTypeCoreSegment.UltimateTensileStrength[Type]\tNUMBER\t\t109\t1\tIfcForceMeasure\t1\nPARAM\t5af16f07-ae9d-4ef9-8a03-0d95cdf31e75\tPset_CableSegmentTypeCoreSegment.Weight[Type]\tNUMBER\t\t109\t1\tIfcMassMeasure\t1\nPARAM\t617f5953-1034-49a8-a5a7-bf1454a87163\tPset_CableSegmentTypeCoreSegment.YoungModulus[Type]\tNUMBER\t\t109\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t110\tPset_CableSegmentTypeEarthingConductor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2caced9e-6bc5-4cba-a468-beb157df0877\tPset_CableSegmentTypeEarthingConductor.ResistanceToGround[Type]\tNUMBER\t\t110\t1\tIfcElectricResistanceMeasure\t1\n#\nGROUP\t111\tPset_CableSegmentTypeFiberSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t28ebeea1-86cb-4bdc-adca-8ca82c242eb8\tPset_CableSegmentTypeFiberSegment.FiberColour[Type]\tTEXT\t\t111\t1\tPEnum_FiberColour\t1\nPARAM\tc82cf807-4be6-4b5c-8c08-e51705ee365c\tPset_CableSegmentTypeFiberSegment.FiberType[Type]\tTEXT\t\t111\t1\tPEnum_FiberType\t1\nPARAM\tae2582da-0391-47a1-afe2-0b7944b39c14\tPset_CableSegmentTypeFiberSegment.HasTightJacket[Type]\tYESNO\t\t111\t1\tIfcBoolean\t1\n#\nGROUP\t112\tPset_CableSegmentTypeFiberTubeSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t543b4230-4bca-44b3-8d5d-18c3a79f3954\tPset_CableSegmentTypeFiberTubeSegment.FiberTubeColour[Type]\tTEXT\t\t112\t1\tPEnum_FiberColour\t1\nPARAM\t28d8c8e3-9668-4aa1-88cc-518a60c46c94\tPset_CableSegmentTypeFiberTubeSegment.NumberOfFibers[Type]\tINTEGER\t\t112\t1\tIfcCountMeasure\t1\n#\nGROUP\t113\tPset_CableSegmentTypeOpticalCableSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t01484f1f-a136-4060-9911-f0aee4a8c71a\tPset_CableSegmentTypeOpticalCableSegment.FiberMode[Type]\tTEXT\t\t113\t1\tPEnum_FiberMode\t1\nPARAM\t2f4ad4c4-0de1-4ca2-811e-336164e79f32\tPset_CableSegmentTypeOpticalCableSegment.NumberOfFibers[Type]\tINTEGER\t\t113\t1\tIfcCountMeasure\t1\nPARAM\teba615f8-8988-44c3-af23-69190be2edcf\tPset_CableSegmentTypeOpticalCableSegment.NumberOfMultiModeFibers[Type]\tINTEGER\t\t113\t1\tIfcCountMeasure\t1\nPARAM\teab7dcaf-1922-432f-9c3a-bb2b3b3911ce\tPset_CableSegmentTypeOpticalCableSegment.NumberOfSingleModeFibers[Type]\tINTEGER\t\t113\t1\tIfcCountMeasure\t1\nPARAM\td76635ff-dce5-4ad9-9774-aad09afa8a09\tPset_CableSegmentTypeOpticalCableSegment.NumberOfTubes[Type]\tINTEGER\t\t113\t1\tIfcCountMeasure\t1\nPARAM\te8e7cb34-04e2-4fbe-8e05-a10108358458\tPset_CableSegmentTypeOpticalCableSegment.OpticalCableStructure[Type]\tTEXT\t\t113\t1\tPEnum_OpticalCableStructureType\t1\n#\nGROUP\t114\tPset_CableSegmentTypeStitchWire\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t491afd84-7830-41d7-9b6f-09aee55ac665\tPset_CableSegmentTypeStitchWire.AssemblyInstruction[Type]\tMULTILINETEXT\t\t114\t1\tIfcExternalReference\t1\nPARAM\td1b40ef8-7a84-4ad5-bd35-600b5ca3cfe5\tPset_CableSegmentTypeStitchWire.MechanicalTension[Type]\tNUMBER\t\t114\t1\tIfcForceMeasure\t1\nPARAM\tcb84bffb-6835-43bb-9aa7-b1f5ca16398f\tPset_CableSegmentTypeStitchWire.NominalLength[Type]\tLENGTH\t\t114\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\td68391f6-fb96-41b7-ad88-b45420b0dfed\tPset_CableSegmentTypeStitchWire.TensileStrength[Type]\tNUMBER\t\t114\t1\tIfcPressureMeasure\t1\nPARAM\t508277d4-22e1-49b5-8fda-12a20e14647f\tPset_CableSegmentTypeStitchWire.UltimateTensileStrength[Type]\tNUMBER\t\t114\t1\tIfcForceMeasure\t1\n#\nGROUP\t115\tPset_CableSegmentTypeWirePairSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t18279a6f-b741-4144-8209-33550ea32465\tPset_CableSegmentTypeWirePairSegment.CharacteristicImpedance[Type]\tNUMBER\t\t115\t1\tIfcElectricResistanceMeasure\t1\nPARAM\tc93b9b5d-8760-44ff-912c-c6b15c4a29a2\tPset_CableSegmentTypeWirePairSegment.ConductorDiameter[Type]\tLENGTH\t\t115\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8f427f5f-1435-4690-9190-09d04d76aa4a\tPset_CableSegmentTypeWirePairSegment.CoreConductorDiameter[Type]\tLENGTH\t\t115\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0e79f29a-b0b1-4ffd-a0d8-d778bbbe9d9c\tPset_CableSegmentTypeWirePairSegment.JacketColour[Type]\tTEXT\t\t115\t1\tIfcLabel\t1\nPARAM\t308aac0e-bcda-478d-a0eb-0e62d1082fd1\tPset_CableSegmentTypeWirePairSegment.ShieldConductorDiameter[Type]\tLENGTH\t\t115\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0efb8ddc-0b59-42c2-95af-2c1a0c9f3887\tPset_CableSegmentTypeWirePairSegment.WirePairType[Type]\tTEXT\t\t115\t1\tPEnum_WirePairType\t1\n#\nGROUP\t116\tPset_CargoCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbb161050-48df-46d6-af02-55dbe1aef284\tPset_CargoCommon.AdditionalProcessing[Type]\tTEXT\t\t116\t1\tPEnum_AdditionalProcessing\t1\nPARAM\t1ada08b6-9c7e-4331-aa7a-7ba50d59ee3f\tPset_CargoCommon.ProcessDirection[Type]\tTEXT\t\t116\t1\tPEnum_ProcessDirection\t1\nPARAM\td8b5be01-79e0-4682-884d-75aa02231922\tPset_CargoCommon.ProcessItem[Type]\tTEXT\t\t116\t1\tPEnum_ProcessItem\t1\n#\nGROUP\t117\tPset_CessBetweenRails\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf337e8a4-e3b8-4a06-846e-24a2ba848af8\tPset_CessBetweenRails.CheckRailType[Type]\tTEXT\t\t117\t1\tPEnum_CheckRailType\t1\nPARAM\tb385fdad-8c47-4025-9b7c-bbe73c623793\tPset_CessBetweenRails.JointRelativePosition[Type]\tTEXT\t\t117\t1\tPEnum_RelativePosition\t1\nPARAM\t5f80dcda-a454-4294-9529-e438d7f5f62e\tPset_CessBetweenRails.LoadCapacity[Type]\tNUMBER\t\t117\t1\tIfcForceMeasure\t1\nPARAM\teb09dac5-96b4-40d7-a7b4-c977a4c47a47\tPset_CessBetweenRails.UsagePurpose[Type]\tTEXT\t\t117\t1\tPEnum_UsagePurpose\t1\n#\nGROUP\t118\tPset_ChillerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t19af0aac-55f2-49c9-99ea-768a9f5ac1ab\tPset_ChillerPHistory.Capacity[Type]\tMULTILINETEXT\t\t118\t1\tIfcTimeSeries\t1\nPARAM\t32ecc4fb-73f0-4558-b37d-9958f9315e7c\tPset_ChillerPHistory.CapacityCurve[Type]\tNUMBER\t\t118\t1\tIfcReal\t1\nPARAM\t0c940597-155c-4ce9-8891-8033cb8c5147\tPset_ChillerPHistory.CoefficientOfPerformance[Type]\tMULTILINETEXT\t\t118\t1\tIfcTimeSeries\t1\nPARAM\t0e0130d9-945c-4199-99cd-6fd761f69bc3\tPset_ChillerPHistory.CoefficientOfPerformanceCurve[Type]\tNUMBER\t\t118\t1\tIfcReal\t1\nPARAM\t81e5f6c3-495a-494d-a0ae-9c765b94e89e\tPset_ChillerPHistory.EnergyEfficiencyRatio[Type]\tMULTILINETEXT\t\t118\t1\tIfcTimeSeries\t1\nPARAM\t07cdaed3-5a01-4f6a-9c74-f9451bc5a573\tPset_ChillerPHistory.FullLoadRatioCurve[Type]\tNUMBER\t\t118\t1\tIfcReal\t1\n#\nGROUP\t119\tPset_ChillerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2ea03e0c-48c2-46a8-b69e-7844a23066ad\tPset_ChillerTypeCommon.CapacityCurve[Type]\tMULTILINETEXT\t\t119\t1\tPropertyTableValue\t1\nPARAM\t69054931-9804-4d4c-ba96-e4ea7370c6e5\tPset_ChillerTypeCommon.ChillerCapacity[Type]\tNUMBER\t\t119\t1\tIfcPowerMeasure\t1\nPARAM\t585d32fc-f619-4c31-8888-f012596a79d7\tPset_ChillerTypeCommon.CoefficientOfPerformanceCurve[Type]\tMULTILINETEXT\t\t119\t1\tPropertyTableValue\t1\nPARAM\tb3913624-6f02-4822-959c-51c53bbd90e5\tPset_ChillerTypeCommon.FullLoadRatioCurve[Type]\tMULTILINETEXT\t\t119\t1\tPropertyTableValue\t1\nPARAM\t83387dc5-0cda-47cc-8539-176f18fda11f\tPset_ChillerTypeCommon.NominalCapacity[Type]\tNUMBER\t\t119\t1\tIfcPowerMeasure\t1\nPARAM\t95d871c6-2951-4133-a6ba-f4faf517c27a\tPset_ChillerTypeCommon.NominalCondensingTemperature[Type]\tNUMBER\t\t119\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tac817bcf-cfdd-4b71-bd80-26c365392bfd\tPset_ChillerTypeCommon.NominalEfficiency[Type]\tNUMBER\t\t119\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tfbb2dc23-9428-4243-b22e-71ee24f96bd8\tPset_ChillerTypeCommon.NominalEvaporatingTemperature[Type]\tNUMBER\t\t119\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t66046c2a-d606-483b-8e71-bbecbd6bf902\tPset_ChillerTypeCommon.NominalHeatRejectionRate[Type]\tNUMBER\t\t119\t1\tIfcPowerMeasure\t1\nPARAM\t5562b1dc-65b0-40d8-9f6a-59ec392aed87\tPset_ChillerTypeCommon.NominalPowerConsumption[Type]\tNUMBER\t\t119\t1\tIfcPowerMeasure\t1\nPARAM\t326d4989-6538-4eae-86c7-b18d560ce621\tPset_ChillerTypeCommon.Reference[Type]\tTEXT\t\t119\t1\tIfcIdentifier\t1\nPARAM\t840bbc00-82fb-41ec-afc0-ab8cc11591fa\tPset_ChillerTypeCommon.Status[Type]\tTEXT\t\t119\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t120\tPset_ChimneyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83ecf212-f6b3-4146-99be-3631e5d31c59\tPset_ChimneyCommon.FireRating[Type]\tTEXT\t\t120\t1\tIfcLabel\t1\nPARAM\t52bf429b-f8df-42a1-89c9-d4cdfd9a0be6\tPset_ChimneyCommon.IsExternal[Type]\tYESNO\t\t120\t1\tIfcBoolean\t1\nPARAM\te87b483c-fc25-491c-8b57-7abaa9885a24\tPset_ChimneyCommon.LoadBearing[Type]\tYESNO\t\t120\t1\tIfcBoolean\t1\nPARAM\ta6505bf2-e9ab-48ee-b03a-989e71421333\tPset_ChimneyCommon.NumberOfDrafts[Type]\tINTEGER\t\t120\t1\tIfcCountMeasure\t1\nPARAM\t01b94145-1a97-41ec-b5f3-e68552e7a484\tPset_ChimneyCommon.Reference[Type]\tTEXT\t\t120\t1\tIfcIdentifier\t1\nPARAM\te5fc2abf-1b76-4131-8736-983960c56acd\tPset_ChimneyCommon.Status[Type]\tTEXT\t\t120\t1\tPEnum_ElementStatus\t1\nPARAM\t258b033a-d9bc-47f5-af75-35962dd7f1a6\tPset_ChimneyCommon.ThermalTransmittance[Type]\tNUMBER\t\t120\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t121\tPset_CivilElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t707ec0cc-70ef-4071-a209-2d288048375b\tPset_CivilElementCommon.Reference[Type]\tTEXT\t\t121\t1\tIfcIdentifier\t1\nPARAM\tf3f03b57-93b4-4071-8340-5211a6636d03\tPset_CivilElementCommon.Status[Type]\tTEXT\t\t121\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t122\tPset_CoaxialCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t191afc01-0473-484c-9155-4d53e1072aac\tPset_CoaxialCable.CharacteristicImpedance[Type]\tNUMBER\t\t122\t1\tIfcElectricResistanceMeasure\t1\nPARAM\tf8db506f-8d12-4b80-b862-0350c7fbc58a\tPset_CoaxialCable.CouplingLoss[Type]\tNUMBER\t\t122\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t40f0dbee-b9f2-433f-895e-699394568c57\tPset_CoaxialCable.MaximumTransmissionAttenuation[Type]\tNUMBER\t\t122\t1\tIfcSoundPowerLevelMeasure\t1\nPARAM\t4698a393-4206-4a6c-b7b7-22e586ab3b0e\tPset_CoaxialCable.NumberOfCoaxialPairs[Type]\tINTEGER\t\t122\t1\tIfcCountMeasure\t1\nPARAM\td063b355-2b07-4b2a-93c1-61c31d29441c\tPset_CoaxialCable.PropagationSpeedCoefficient[Type]\tNUMBER\t\t122\t1\tIfcRatioMeasure\t1\nPARAM\tb61f9dad-1e43-44bd-a5a7-ac171bb230ed\tPset_CoaxialCable.RadiantFrequency[Type]\tNUMBER\t\t122\t1\tIfcFrequencyMeasure\t1\nPARAM\t10aa2ebd-b9a1-4d30-906e-de64a07afe53\tPset_CoaxialCable.TransmissionLoss[Type]\tNUMBER\t\t122\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t123\tPset_CoilOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t485e1be9-3b7d-416b-a875-bde1a61942ea\tPset_CoilOccurrence.HasSoundAttenuation[Type]\tYESNO\t\t123\t1\tIfcBoolean\t1\n#\nGROUP\t124\tPset_CoilPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t55bb76a6-1520-4260-9187-1f784448a95b\tPset_CoilPHistory.AirPressureDropCurve[Type]\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\nPARAM\t9ae19df8-4baf-4468-8e32-88e4b5f3625f\tPset_CoilPHistory.AirPressureDropCurveHistory[Type]\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\nPARAM\t691aef37-0ef6-42f7-a6ef-6e025d9a14c6\tPset_CoilPHistory.AtmosphericPressure[Type]\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\nPARAM\t27b9099c-60c8-4836-97b5-8f6cd2b0d68a\tPset_CoilPHistory.FaceVelocity[Type]\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\nPARAM\tdbfca991-4555-400e-97dc-0744b3cf30d4\tPset_CoilPHistory.SoundCurve[Type]\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\nPARAM\t0f22d58d-13aa-48f2-9c00-01b421b14840\tPset_CoilPHistory.SoundCurveHistory[Type]\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\n#\nGROUP\t125\tPset_CoilTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2ec10189-e24a-42c5-ab0d-7c626ea47bc5\tPset_CoilTypeCommon.AirflowRateRange[Type]\tMULTILINETEXT\t\t125\t1\tPropertyBoundedValue\t1\nPARAM\t7fbb36e8-04c7-429a-a2f1-1a81686fb6c1\tPset_CoilTypeCommon.AirFlowRateRange[Type]\tMULTILINETEXT\t\t125\t1\tPropertyBoundedValue\t1\nPARAM\t2fcc799d-9046-47ab-aee3-bd4099374712\tPset_CoilTypeCommon.CoilPlacement[Type]\tTEXT\t\t125\t1\tPEnum_CoilPlacementType\t1\nPARAM\t8611061e-6a7e-47ba-84a0-579f4c982b75\tPset_CoilTypeCommon.NominalLatentCapacity[Type]\tNUMBER\t\t125\t1\tIfcPowerMeasure\t1\nPARAM\tc25848f9-2011-48ab-9518-58d573a5c510\tPset_CoilTypeCommon.NominalSensibleCapacity[Type]\tNUMBER\t\t125\t1\tIfcPowerMeasure\t1\nPARAM\t9532a90f-bbf3-4017-a23d-908c78364cae\tPset_CoilTypeCommon.NominalUA[Type]\tNUMBER\t\t125\t1\tIfcReal\t1\nPARAM\t2456a8c7-8dcd-44e8-bdba-ef5b9b79fb89\tPset_CoilTypeCommon.OperationalTemperatureRange[Type]\tMULTILINETEXT\t\t125\t1\tPropertyBoundedValue\t1\nPARAM\t6d3b1212-bbd3-48e1-9ac9-51852365829d\tPset_CoilTypeCommon.PlacementType[Type]\tTEXT\t\t125\t1\tPEnum_CoilPlacementType\t1\nPARAM\tf70977ba-856c-4dc1-a42b-245d8ef89619\tPset_CoilTypeCommon.Reference[Type]\tTEXT\t\t125\t1\tIfcIdentifier\t1\nPARAM\tc859324b-e9c1-4956-8e5b-5d92015e6c7b\tPset_CoilTypeCommon.Status[Type]\tTEXT\t\t125\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t126\tPset_CoilTypeHydronic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t253627e2-3c64-4c7b-a3bb-8e8c652bec04\tPset_CoilTypeHydronic.BypassFactor[Type]\tNUMBER\t\t126\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t07b74403-460f-4850-bb08-9b03637249bf\tPset_CoilTypeHydronic.CoilConnectionDirection[Type]\tTEXT\t\t126\t1\tPEnum_CoilConnectionDirection\t1\nPARAM\tcd327ebc-3cf6-4e36-be81-303b9efa1b57\tPset_CoilTypeHydronic.CoilCoolant[Type]\tTEXT\t\t126\t1\tPEnum_CoilCoolant\t1\nPARAM\t4612ab8e-a4e7-4f95-b4ac-e28128dc3f5c\tPset_CoilTypeHydronic.CoilFaceArea[Type]\tAREA\t\t126\t1\tIfcAreaMeasure\t1\nPARAM\t0e73b0cb-de18-4361-9bef-1a68095cfc3b\tPset_CoilTypeHydronic.CoilFluidArrangement[Type]\tTEXT\t\t126\t1\tPEnum_CoilFluidArrangement\t1\nPARAM\tce75b6e8-a87a-4e84-9c66-30c564c0582c\tPset_CoilTypeHydronic.Fluid[Type]\tMULTILINETEXT\t\t126\t1\tIfcMaterial\t1\nPARAM\tebb3fa2d-6c7a-4d6c-afca-2b0ae1e821ee\tPset_CoilTypeHydronic.FluidPressureRange[Type]\tMULTILINETEXT\t\t126\t1\tPropertyBoundedValue\t1\nPARAM\tfadfaae8-2b13-4eb1-8a30-f496eff565b4\tPset_CoilTypeHydronic.HeatExchangeSurfaceArea[Type]\tAREA\t\t126\t1\tIfcAreaMeasure\t1\nPARAM\tc2dd5c14-be51-4699-924b-a45d29732c4c\tPset_CoilTypeHydronic.PrimarySurfaceArea[Type]\tAREA\t\t126\t1\tIfcAreaMeasure\t1\nPARAM\t06bfab75-ad53-4999-8da5-f9941fa2780c\tPset_CoilTypeHydronic.SecondarySurfaceArea[Type]\tAREA\t\t126\t1\tIfcAreaMeasure\t1\nPARAM\tf0dc62fa-a7bd-4148-adc1-f20bab40a14f\tPset_CoilTypeHydronic.SensibleHeatRatio[Type]\tNUMBER\t\t126\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tcf95cbec-b3d3-40b1-8b7e-426c93ba402d\tPset_CoilTypeHydronic.TotalUACurves[Type]\tMULTILINETEXT\t\t126\t1\tPropertyTableValue\t1\nPARAM\tdb457664-306a-491e-bd6e-88f47027332f\tPset_CoilTypeHydronic.WaterPressureDropCurve[Type]\tMULTILINETEXT\t\t126\t1\tPropertyTableValue\t1\nPARAM\t97b1726b-cdc8-4f83-8e8d-a77a72508818\tPset_CoilTypeHydronic.WetCoilFraction[Type]\tNUMBER\t\t126\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t127\tPset_ColumnCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb3fd9772-d8cb-4634-8482-16f007eb827a\tPset_ColumnCommon.FireRating[Type]\tTEXT\t\t127\t1\tIfcLabel\t1\nPARAM\t7adefff2-a8c1-45dc-9f29-bbc9579a4c42\tPset_ColumnCommon.IsExternal[Type]\tYESNO\t\t127\t1\tIfcBoolean\t1\nPARAM\tb2552d99-40a8-46cd-b6c7-d4b7f88baa8a\tPset_ColumnCommon.LoadBearing[Type]\tYESNO\t\t127\t1\tIfcBoolean\t1\nPARAM\tadab403c-4011-4501-bae9-4a0034671c5d\tPset_ColumnCommon.Reference[Type]\tTEXT\t\t127\t1\tIfcIdentifier\t1\nPARAM\tc2ad7792-dc1c-4fe0-bcc9-738a583ad40a\tPset_ColumnCommon.Roll[Type]\tNUMBER\t\t127\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t831ea20e-cc16-4258-a5ea-39e28029c637\tPset_ColumnCommon.Slope[Type]\tNUMBER\t\t127\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t1ec80792-d7b5-4e3a-b4ed-aa29a5186221\tPset_ColumnCommon.Status[Type]\tTEXT\t\t127\t1\tPEnum_ElementStatus\t1\nPARAM\tdb4bbcb6-99f2-464e-b370-3afdbe484b7b\tPset_ColumnCommon.ThermalTransmittance[Type]\tNUMBER\t\t127\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t128\tPset_CommunicationsAppliancePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8864325a-a0f7-4c79-be55-b84bc4f88785\tPset_CommunicationsAppliancePHistory.PowerState[Type]\tMULTILINETEXT\t\t128\t1\tIfcTimeSeries\t1\n#\nGROUP\t129\tPset_CommunicationsApplianceTypeAntenna\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6f6fabbb-23b7-4e1e-8d14-cc9feb5b603f\tPset_CommunicationsApplianceTypeAntenna.AntennaGain[Type]\tNUMBER\t\t129\t1\tIfcRatioMeasure\t1\nPARAM\t8ec02605-eb6d-44c3-9182-de427c32ec83\tPset_CommunicationsApplianceTypeAntenna.AntennaType[Type]\tTEXT\t\t129\t1\tPEnum_AntennaType\t1\nPARAM\tf5abf505-bc74-4066-90c7-405aa363c658\tPset_CommunicationsApplianceTypeAntenna.PolarizationMode[Type]\tTEXT\t\t129\t1\tPEnum_PolarizationMode\t1\nPARAM\t03b225c0-eeca-48ff-b64e-56e047363cf6\tPset_CommunicationsApplianceTypeAntenna.RadiationPattern[Type]\tTEXT\t\t129\t1\tPEnum_RadiationPattern\t1\n#\nGROUP\t130\tPset_CommunicationsApplianceTypeAutomaton\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t63eff004-b048-46c5-a888-5b8d69dff834\tPset_CommunicationsApplianceTypeAutomaton.InputSignalType[Type]\tTEXT\t\t130\t1\tPEnum_InputOutputSignalType\t1\nPARAM\tce6c57a2-6b50-4f90-b2a6-acd16cdbb474\tPset_CommunicationsApplianceTypeAutomaton.OutputSignalType[Type]\tTEXT\t\t130\t1\tPEnum_InputOutputSignalType\t1\n#\nGROUP\t131\tPset_CommunicationsApplianceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t128efd8f-939b-45b4-9751-e5fea674a54b\tPset_CommunicationsApplianceTypeCommon.Reference[Type]\tTEXT\t\t131\t1\tIfcIdentifier\t1\nPARAM\t2382dbf9-2cd2-4c72-aabe-49f12d8e46c8\tPset_CommunicationsApplianceTypeCommon.Status[Type]\tTEXT\t\t131\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t132\tPset_CommunicationsApplianceTypeComputer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7dcbc023-3f6c-4047-93e5-a59373c16de6\tPset_CommunicationsApplianceTypeComputer.StorageCapacity[Type]\tINTEGER\t\t132\t1\tIfcInteger\t1\nPARAM\ta4442ad0-f20c-4a47-8882-e70c26ba256b\tPset_CommunicationsApplianceTypeComputer.UserInterfaceType[Type]\tTEXT\t\t132\t1\tPEnum_ComputerUIType\t1\n#\nGROUP\t133\tPset_CommunicationsApplianceTypeGateway\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2f20be0a-78fb-48ac-a27a-469df03a5925\tPset_CommunicationsApplianceTypeGateway.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t133\t1\tPropertyTableValue\t1\n#\nGROUP\t134\tPset_CommunicationsApplianceTypeIntelligentPeripheral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8de1e5f3-fbb9-4ba3-8b35-6f15cbef779a\tPset_CommunicationsApplianceTypeIntelligentPeripheral.UserCapacity[Type]\tINTEGER\t\t134\t1\tIfcInteger\t1\n#\nGROUP\t135\tPset_CommunicationsApplianceTypeIpNetworkEquipment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3d6fc826-5ecb-4011-9548-75b1ff71efd8\tPset_CommunicationsApplianceTypeIpNetworkEquipment.EquipmentCapacity[Type]\tINTEGER\t\t135\t1\tIfcIntegerCountRateMeasure\t1\nPARAM\tf64d2d68-b433-487e-8fb3-2232b70c3f18\tPset_CommunicationsApplianceTypeIpNetworkEquipment.ManagingSoftware[Type]\tTEXT\t\t135\t1\tIfcLabel\t1\nPARAM\t446bff8f-57da-4fd5-9c37-c6cd5ae14426\tPset_CommunicationsApplianceTypeIpNetworkEquipment.NumberOfCoolingFans[Type]\tINTEGER\t\t135\t1\tIfcCountMeasure\t1\nPARAM\tdd32f7d7-ab82-4a3f-8889-19e0066c6abe\tPset_CommunicationsApplianceTypeIpNetworkEquipment.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t135\t1\tPropertyTableValue\t1\nPARAM\t073456c4-f3e9-4365-b477-ce3f1dcb183e\tPset_CommunicationsApplianceTypeIpNetworkEquipment.NumberOfSlots[Type]\tINTEGER\t\t135\t1\tIfcCountMeasure\t1\nPARAM\t23e47660-13ad-4384-b2f8-f7c0ced6b199\tPset_CommunicationsApplianceTypeIpNetworkEquipment.SupportedProtocol[Type]\tTEXT\t\t135\t1\tIfcLabel\t1\n#\nGROUP\t136\tPset_CommunicationsApplianceTypeModem\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tabc2683f-71af-4564-8c22-2feaac8d26d9\tPset_CommunicationsApplianceTypeModem.CommonInterfaceType[Type]\tTEXT\t\t136\t1\tPEnum_CommonInterfaceType\t1\nPARAM\tddf3cd5f-5d98-42e9-baf9-3a48436bd34d\tPset_CommunicationsApplianceTypeModem.NumberOfCommonInterfaces[Type]\tMULTILINETEXT\t\t136\t1\tPropertyTableValue\t1\nPARAM\t1b7875a8-adfe-48b0-be89-09be80d6d0ae\tPset_CommunicationsApplianceTypeModem.NumberOfTrafficInterfaces[Type]\tMULTILINETEXT\t\t136\t1\tPropertyTableValue\t1\nPARAM\ta0467c65-a212-42b6-bda2-17d1e490596f\tPset_CommunicationsApplianceTypeModem.TrafficInterfaceType[Type]\tTEXT\t\t136\t1\tPEnum_ModemTrafficInterfaceType\t1\n#\nGROUP\t137\tPset_CommunicationsApplianceTypeOpticalLineTerminal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td78057b5-108f-4f69-89cb-0974af687ded\tPset_CommunicationsApplianceTypeOpticalLineTerminal.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t137\t1\tPropertyTableValue\t1\nPARAM\t9c7f5173-4b6d-4414-902f-54c726d17aa5\tPset_CommunicationsApplianceTypeOpticalLineTerminal.NumberOfSlots[Type]\tINTEGER\t\t137\t1\tIfcCountMeasure\t1\n#\nGROUP\t138\tPset_CommunicationsApplianceTypeOpticalNetworkUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t95f25a95-aea2-4d7b-b7d5-3e4ec1854a4e\tPset_CommunicationsApplianceTypeOpticalNetworkUnit.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t138\t1\tPropertyTableValue\t1\nPARAM\t185dc899-d1cf-49c5-939d-f9b0b7f8cfc3\tPset_CommunicationsApplianceTypeOpticalNetworkUnit.OpticalNetworkUnitType[Type]\tTEXT\t\t138\t1\tPEnum_OpticalNetworkUnitType\t1\n#\nGROUP\t139\tPset_CommunicationsApplianceTypeTelecommand\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t866171f1-e481-49e0-9db4-5f867928e74c\tPset_CommunicationsApplianceTypeTelecommand.NumberOfCPUs[Type]\tINTEGER\t\t139\t1\tIfcCountMeasure\t1\nPARAM\t2a01584c-8823-49b4-8838-9cdf90dee3c0\tPset_CommunicationsApplianceTypeTelecommand.NumberOfWorkstations[Type]\tMULTILINETEXT\t\t139\t1\tPropertyTableValue\t1\n#\nGROUP\t140\tPset_CommunicationsApplianceTypeTelephonyExchange\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2a420ea2-bae8-4b2a-a863-bdfe455bedde\tPset_CommunicationsApplianceTypeTelephonyExchange.UserCapacity[Type]\tINTEGER\t\t140\t1\tIfcInteger\t1\n#\nGROUP\t141\tPset_CommunicationsApplianceTypeTransportEquipment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t705fae9c-9225-45a4-870a-6b01a73ce7d4\tPset_CommunicationsApplianceTypeTransportEquipment.ElectricalCrossCapacity[Type]\tTEXT\t\t141\t1\tIfcLabel\t1\nPARAM\tc831208c-d10e-45de-a594-5db85e25f42c\tPset_CommunicationsApplianceTypeTransportEquipment.IsUpgradable[Type]\tYESNO\t\t141\t1\tIfcBoolean\t1\nPARAM\t8c12c428-87df-41c5-9f24-9e4a6638e09e\tPset_CommunicationsApplianceTypeTransportEquipment.NumberOfSlots[Type]\tINTEGER\t\t141\t1\tIfcCountMeasure\t1\nPARAM\tcfcb9ce2-d6d2-47bd-9e1b-ada998c44b3d\tPset_CommunicationsApplianceTypeTransportEquipment.TransportEquipmentAssemblyType[Type]\tTEXT\t\t141\t1\tPEnum_TransportEquipmentAssemblyType\t1\nPARAM\tdeb44c1d-259a-4593-aae4-bf3bb25b6a40\tPset_CommunicationsApplianceTypeTransportEquipment.TransportEquipmentType[Type]\tTEXT\t\t141\t1\tPEnum_TransportEquipmentType\t1\n#\nGROUP\t142\tPset_CompressorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td708edb6-c5d5-46f7-bfe5-797b4d461d94\tPset_CompressorPHistory.CoefficientOfPerformance[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\tb0fd50dd-b619-4404-82ba-f8c5c59a1f41\tPset_CompressorPHistory.CompressionEfficiency[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\t0993af81-9af2-4f87-a1ef-8c046d3bcbf1\tPset_CompressorPHistory.CompressorCapacity[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\t8f43ef1d-b361-437c-9264-ad86a41b676c\tPset_CompressorPHistory.CompressorTotalEfficiency[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\t0e366728-4898-4591-80b0-8a2639252d1b\tPset_CompressorPHistory.CompressorTotalHeatGain[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\t20c4a0d2-4282-49b5-972c-d9236e971670\tPset_CompressorPHistory.EnergyEfficiencyRatio[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\tfd7204fc-708f-4c79-88b5-9fbf56862fb5\tPset_CompressorPHistory.FrictionHeatGain[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\tc5a9053e-361e-4381-a8ad-83e30a90d76a\tPset_CompressorPHistory.FullLoadRatio[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\te0047163-f1c9-4317-9a81-b40d06d440fe\tPset_CompressorPHistory.FullLoadRatioCurve[Type]\tMULTILINETEXT\t\t142\t1\tPropertyListValue\t1\nPARAM\t3ae03352-d4a1-44dd-b14b-ea03fa29449c\tPset_CompressorPHistory.InputPower[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\t1f9f1189-cbab-4230-a636-69b356848f3e\tPset_CompressorPHistory.IsentropicEfficiency[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\t8d19e3bb-1db1-403b-aae1-b2752cb72c04\tPset_CompressorPHistory.LubricantPumpHeatGain[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\t70625587-256a-47dc-ad05-1d1d24d50a4c\tPset_CompressorPHistory.MechanicalEfficiency[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\tfe51ca33-8629-466c-a78d-d224ed2e4187\tPset_CompressorPHistory.ShaftPower[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\tfb4e7b5c-029b-4a3c-b341-5567c3968508\tPset_CompressorPHistory.VolumetricEfficiency[Type]\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\n#\nGROUP\t143\tPset_CompressorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf9089c79-40ac-4cb0-b591-003a55a7df29\tPset_CompressorTypeCommon.CompressorSpeed[Type]\tNUMBER\t\t143\t1\tIfcRotationalFrequencyMeasure\t1\nPARAM\t7375421f-ee58-4141-9f08-179a2064721d\tPset_CompressorTypeCommon.HasHotGasBypass[Type]\tYESNO\t\t143\t1\tIfcBoolean\t1\nPARAM\t9514dca5-df4b-4833-bbb6-2c8d8e379d16\tPset_CompressorTypeCommon.IdealCapacity[Type]\tNUMBER\t\t143\t1\tIfcPowerMeasure\t1\nPARAM\t5c865b26-7fc4-4f04-868d-17b26c263529\tPset_CompressorTypeCommon.IdealShaftPower[Type]\tNUMBER\t\t143\t1\tIfcPowerMeasure\t1\nPARAM\t477563bf-3422-4726-80d4-6b738e60bca7\tPset_CompressorTypeCommon.ImpellerDiameter[Type]\tLENGTH\t\t143\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2b537ba4-a010-4feb-93d7-836469fa0c2c\tPset_CompressorTypeCommon.MaximumPartLoadRatio[Type]\tNUMBER\t\t143\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t19fbdf94-d334-409c-b2ee-5ddb0e147b29\tPset_CompressorTypeCommon.MinimumPartLoadRatio[Type]\tNUMBER\t\t143\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4b5b9f0f-ee40-4605-ad2b-a995b3ad9422\tPset_CompressorTypeCommon.NominalCapacity[Type]\tNUMBER\t\t143\t1\tIfcPowerMeasure\t1\nPARAM\t5cd29ad4-03a9-446c-9b12-9d53d507ac32\tPset_CompressorTypeCommon.PowerSource[Type]\tTEXT\t\t143\t1\tPEnum_CompressorTypePowerSource\t1\nPARAM\td9590fb6-9e97-4c09-890d-be8cf35f500a\tPset_CompressorTypeCommon.Reference[Type]\tTEXT\t\t143\t1\tIfcIdentifier\t1\nPARAM\t96597411-e00e-4af2-ae28-10e9afb86e0e\tPset_CompressorTypeCommon.RefrigerantClass[Type]\tTEXT\t\t143\t1\tPEnum_RefrigerantClass\t1\nPARAM\t4260c56c-4990-4d09-948b-80b55623bfed\tPset_CompressorTypeCommon.RefrigerantType[Type]\tMULTILINETEXT\t\t143\t1\tIfcMaterial\t1\nPARAM\td4adeba0-bbdd-4bbc-8728-ac837a5bca26\tPset_CompressorTypeCommon.Status[Type]\tTEXT\t\t143\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t144\tPset_ConcreteElementGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0b835309-a80b-4bd2-b926-5dba3e8911b9\tPset_ConcreteElementGeneral.AssemblyPlace[Type]\tTEXT\t\t144\t1\tPEnum_AssemblyPlace\t1\nPARAM\t5ec998ab-c415-4005-85bb-79282d4e3a4c\tPset_ConcreteElementGeneral.CastingMethod[Type]\tTEXT\t\t144\t1\tPEnum_ConcreteCastingMethod\t1\nPARAM\tfdc0c592-8117-4fea-8710-16a7dbaeaf43\tPset_ConcreteElementGeneral.ConcreteCover[Type]\tLENGTH\t\t144\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t09048132-e559-4ade-ba1f-1319b0c087ee\tPset_ConcreteElementGeneral.ConcreteCoverAtLinks[Type]\tLENGTH\t\t144\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7a7c529f-cad2-4a9c-9c9a-462cc945d184\tPset_ConcreteElementGeneral.ConcreteCoverAtMainBars[Type]\tLENGTH\t\t144\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t25b94066-5aff-448e-8b14-44d62748688c\tPset_ConcreteElementGeneral.ConstructionMethod[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\t9b41d444-d01e-4348-897a-5d399a90f6d9\tPset_ConcreteElementGeneral.ConstructionToleranceClass[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\t3482a8d9-30b4-4a69-9c19-a2a94737577a\tPset_ConcreteElementGeneral.ConstructionType[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\t9bdc4bf3-571f-4634-8cd8-2b05bb215dbe\tPset_ConcreteElementGeneral.DimensionalAccuracyClass[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\tced4016f-8195-4d45-a558-f109a87372f7\tPset_ConcreteElementGeneral.EnvironmentalClass[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\t0845730a-55f9-43e6-886d-e25a53aa8b5e\tPset_ConcreteElementGeneral.ExposureClass[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\t26b5a51e-960d-4ec6-9e65-003fb3c4816c\tPset_ConcreteElementGeneral.FireRating[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\tb0fdc655-bf18-4fdf-b6a9-1d4bf78fdaae\tPset_ConcreteElementGeneral.LifeCycleEnvironmentalLoad[Type]\tTEXT\t\t144\t1\tIfcText\t1\nPARAM\t2e3c8e1a-67b5-4ee0-966d-224d79c6449e\tPset_ConcreteElementGeneral.ReinforcementAreaRatio[Type]\tNUMBER\t\t144\t1\tIfcAreaDensityMeasure\t1\nPARAM\t013d7467-0788-426a-942b-f0b2942a3f0d\tPset_ConcreteElementGeneral.ReinforcementStrengthClass[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\tcbb12e13-7a0d-4d00-9dd2-2db62806d106\tPset_ConcreteElementGeneral.ReinforcementVolumeRatio[Type]\tMASS_DENSITY\t\t144\t1\tIfcMassDensityMeasure\t1\nPARAM\tf415fc7a-1d99-4a28-94f9-c694105df498\tPset_ConcreteElementGeneral.ServiceLife[Type]\tNUMBER\t\t144\t1\tIfcTimeMeasure\t1\nPARAM\tdf767ec3-4038-4c9e-bfcc-df0765ff4b27\tPset_ConcreteElementGeneral.StrengthClass[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\taab7b612-60d7-4ae9-8e91-a4bed643222e\tPset_ConcreteElementGeneral.StructuralClass[Type]\tTEXT\t\t144\t1\tIfcLabel\t1\n#\nGROUP\t145\tPset_ConcreteElementQuantityGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc0550cab-f105-4fb3-a432-1fd54028f791\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryDescription[Type]\tTEXT\t\t145\t1\tIfcLabel\t1\nPARAM\td23b5193-a9ca-4e6d-a27d-769cd6d48aac\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryGroupCode[Type]\tTEXT\t\t145\t1\tIfcLabel\t1\nPARAM\td930c73c-9d55-4312-81b5-22fb3e2ee739\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryMaterial[Type]\tTEXT\t\t145\t1\tIfcLabel\t1\nPARAM\t2e2cca24-e418-49c4-8828-9e31d6d3c59e\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryMaterialSpecificationReference[Type]\tMULTILINETEXT\t\t145\t1\tIfcExternalReference\t1\nPARAM\ta0e4f567-fd3d-49f7-85ee-3d4aa78abc3f\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryQuantityByNumberOfItems[Type]\tINTEGER\t\t145\t1\tIfcCountMeasure\t1\nPARAM\tb86f8a68-50aa-4a16-8fda-7a0851589c9a\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryQuantityByWeight[Type]\tNUMBER\t\t145\t1\tIfcMassMeasure\t1\nPARAM\tcc9b2e24-2456-42ae-bf9b-248bb211728d\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessorySize[Type]\tTEXT\t\t145\t1\tIfcLabel\t1\nPARAM\tc6c94c41-1230-4fdf-9f44-6f454094e0b4\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryType[Type]\tTEXT\t\t145\t1\tIfcLabel\t1\nPARAM\t0c9b39f1-cb05-40f3-8724-1ab1ab33760f\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryTypeSpecificationReference[Type]\tMULTILINETEXT\t\t145\t1\tIfcExternalReference\t1\nPARAM\tab2fcd46-5e83-4763-ac69-33e42b1d3033\tPset_ConcreteElementQuantityGeneral.TotalConcreteQuantity[Type]\tVOLUME\t\t145\t1\tIfcVolumeMeasure\t1\nPARAM\t1bb3abe2-f082-41e3-be4d-2ce47e859f4a\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarDiameter[Type]\tLENGTH\t\t145\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7f16854c-248c-4be4-9455-438b7f50f457\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarQuantity[Type]\tNUMBER\t\t145\t1\tIfcMassMeasure\t1\nPARAM\t379f840b-a1ee-4cc5-b8a1-b219a4774dcc\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarSteelGrade[Type]\tTEXT\t\t145\t1\tIfcLabel\t1\nPARAM\tc1ec8668-1742-4c8c-bb9c-392cda5d6414\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarSteelGradeSpecificationReference[Type]\tMULTILINETEXT\t\t145\t1\tIfcExternalReference\t1\n#\nGROUP\t146\tPset_ConcreteElementSurfaceFinishQuantityGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb0bfe41a-f8f6-4c5b-a4a7-d381e5f5febc\tPset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceArea[Type]\tAREA\t\t146\t1\tIfcAreaMeasure\t1\nPARAM\tbd8f0cf2-be3e-4e52-894e-67a00d7b6ef2\tPset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceClass[Type]\tTEXT\t\t146\t1\tIfcLabel\t1\nPARAM\t28e8a6ba-cb00-496d-a8d9-264c7d49b189\tPset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceType[Type]\tTEXT\t\t146\t1\tIfcLabel\t1\nPARAM\t70642b13-2541-4b08-83d4-48cdde9ce902\tPset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceArea[Type]\tAREA\t\t146\t1\tIfcAreaMeasure\t1\nPARAM\t67627a1c-ba52-4452-8df8-b2d67b4cecb2\tPset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceClass[Type]\tTEXT\t\t146\t1\tIfcLabel\t1\nPARAM\t39cddf51-d2c8-4544-90a3-3e974257a52c\tPset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceTextureDescription[Type]\tTEXT\t\t146\t1\tIfcText\t1\nPARAM\tfe2143f4-8355-4962-9c9d-d8a21927dd52\tPset_ConcreteElementSurfaceFinishQuantityGeneral.SurfaceDescriptionDocReference[Type]\tMULTILINETEXT\t\t146\t1\tIfcExternalReference\t1\n#\nGROUP\t147\tPset_CondenserPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t06d1585f-bd41-493b-a062-c7e2f650abca\tPset_CondenserPHistory.CompressorCondenserHeatGain[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\ta672a52a-015e-4d22-9f31-b8b4814f5ca6\tPset_CondenserPHistory.CompressorCondenserPressureDrop[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\tf078075c-5741-40fc-90f2-a63fa39de744\tPset_CondenserPHistory.CondenserMeanVoidFraction[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\t8aeec34b-67a7-4e32-a364-18c01ae4a3ae\tPset_CondenserPHistory.CondensingTemperature[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\te1cace10-c9a4-4afa-bb02-61b77b96e561\tPset_CondenserPHistory.ExteriorHeatTransferCoefficient[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\t2212335d-1e37-4199-aea1-85b3817065bf\tPset_CondenserPHistory.HeatRejectionRate[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\t1825f3ae-1f14-4b8a-85b5-ec68bbe89c61\tPset_CondenserPHistory.InteriorHeatTransferCoefficient[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\t58ccf0d8-ad4d-4dc1-abe3-78acf4049814\tPset_CondenserPHistory.LogarithmicMeanTemperatureDifference[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\tad7512e0-968e-4861-9fa2-b18ea927fd42\tPset_CondenserPHistory.RefrigerantFoulingResistance[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\tffc706b2-cd01-4ab7-b04c-c92edf3765ff\tPset_CondenserPHistory.UAcurves[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\tf923daf7-21ee-4f19-b802-128160444ec3\tPset_CondenserPHistory.WaterFoulingResistance[Type]\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\n#\nGROUP\t148\tPset_CondenserTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t59add430-52ed-45e3-bcef-49a324be4c39\tPset_CondenserTypeCommon.ExternalSurfaceArea[Type]\tAREA\t\t148\t1\tIfcAreaMeasure\t1\nPARAM\tdc5768a4-f478-487c-9002-9254279dbf10\tPset_CondenserTypeCommon.InternalRefrigerantVolume[Type]\tVOLUME\t\t148\t1\tIfcVolumeMeasure\t1\nPARAM\t08d774d4-0dc4-4088-9505-5ac4e917de0f\tPset_CondenserTypeCommon.InternalSurfaceArea[Type]\tAREA\t\t148\t1\tIfcAreaMeasure\t1\nPARAM\t063d9000-bba4-452c-9c1b-fbfa625adf81\tPset_CondenserTypeCommon.InternalWaterVolume[Type]\tVOLUME\t\t148\t1\tIfcVolumeMeasure\t1\nPARAM\t9566a6fa-3730-4cdf-a2f5-9ff42c12916f\tPset_CondenserTypeCommon.NominalHeatTransferArea[Type]\tAREA\t\t148\t1\tIfcAreaMeasure\t1\nPARAM\t2c2202ab-e853-46b0-854c-ac469f88b616\tPset_CondenserTypeCommon.NominalHeatTransferCoefficient[Type]\tNUMBER\t\t148\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\ta9691c3e-ae1d-4fb4-842a-1a95d5d7ed56\tPset_CondenserTypeCommon.Reference[Type]\tTEXT\t\t148\t1\tIfcIdentifier\t1\nPARAM\t8a0e0212-9167-4e5c-ad6a-0a7263b3ab21\tPset_CondenserTypeCommon.RefrigerantClass[Type]\tTEXT\t\t148\t1\tPEnum_RefrigerantClass\t1\nPARAM\t76a44ffd-00a6-448f-8b20-7e41523e40d3\tPset_CondenserTypeCommon.RefrigerantType[Type]\tMULTILINETEXT\t\t148\t1\tIfcMaterial\t1\nPARAM\ta3df8019-23d1-433a-a795-51812fb92b6b\tPset_CondenserTypeCommon.Status[Type]\tTEXT\t\t148\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t149\tPset_Condition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5ce0e535-10bb-4044-be13-85318ad417ce\tPset_Condition.AssessmentCondition[Type]\tTEXT\t\t149\t1\tIfcLabel\t1\nPARAM\tac769934-43d2-4811-ac3f-5f62eac81a96\tPset_Condition.AssessmentDate[Type]\tTEXT\t\t149\t1\tIfcDate\t1\nPARAM\t741dd2f6-f1d5-4f73-9459-c14ad4cfe95d\tPset_Condition.AssessmentDescription[Type]\tTEXT\t\t149\t1\tIfcText\t1\nPARAM\t2050d3a6-3b5d-4ad9-b9e4-49bc4ead1d8e\tPset_Condition.AssessmentFrequency[Type]\tNUMBER\t\t149\t1\tIfcTimeMeasure\t1\nPARAM\t7f11a73d-57ce-49ed-a3b8-b29b0a7603aa\tPset_Condition.AssessmentMethod[Type]\tMULTILINETEXT\t\t149\t1\tIfcDocumentReference\t1\nPARAM\t77d89a7e-b4a0-455d-8a44-d7d0f2b86cc7\tPset_Condition.AssessmentType[Type]\tTEXT\t\t149\t1\tIfcLabel\t1\nPARAM\tb4ff4054-1d89-4520-a977-76f0943d4829\tPset_Condition.LastAssessmentReport[Type]\tTEXT\t\t149\t1\tIfcLabel\t1\nPARAM\te11b0457-3bb6-4cd4-bf18-3f38927114b0\tPset_Condition.NextAssessmentDate[Type]\tTEXT\t\t149\t1\tIfcDate\t1\n#\nGROUP\t150\tPset_ConstructionAdministration\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7333d9b7-56bf-4d2b-b995-d80a660feaf4\tPset_ConstructionAdministration.ProcurementMethod[Type]\tTEXT\t\t150\t1\tIfcLabel\t1\nPARAM\t457d6b73-c35f-4a98-8d89-415b73684ebd\tPset_ConstructionAdministration.SpecificationSectionNumber[Type]\tTEXT\t\t150\t1\tIfcLabel\t1\nPARAM\t9e3c0dfa-597a-4d84-8619-a54dcac3f8de\tPset_ConstructionAdministration.SubmittalIdentifer[Type]\tTEXT\t\t150\t1\tIfcLabel\t1\n#\nGROUP\t151\tPset_ConstructionOccurence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8fab0258-a573-4ae7-bc6a-184dc4cc4fa6\tPset_ConstructionOccurence.AssetIdentifier[Type]\tTEXT\t\t151\t1\tIfcLabel\t1\nPARAM\t7ea55c98-72a9-41a2-9f93-8bcb7ed8b186\tPset_ConstructionOccurence.InstallationDate[Type]\tTEXT\t\t151\t1\tIfcDate\t1\nPARAM\tff935ad6-00c7-438f-9945-287c4e26e215\tPset_ConstructionOccurence.ModelNumber[Type]\tTEXT\t\t151\t1\tIfcLabel\t1\nPARAM\ta532099a-562a-4a6a-acc9-8a37396c843b\tPset_ConstructionOccurence.TagNumber[Type]\tTEXT\t\t151\t1\tIfcLabel\t1\n#\nGROUP\t152\tPset_ConstructionResource\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t775acf9a-22e3-47c4-9ef4-c43611740340\tPset_ConstructionResource.ActualCompletion[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\tc1142b8d-5ab4-46bb-a93d-1794fd773140\tPset_ConstructionResource.ActualCost[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\tdf47696f-d7b0-4b85-aa94-dd2753f39503\tPset_ConstructionResource.ActualWork[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\td15a5882-4bf7-4c85-bfda-7100a8c20a1a\tPset_ConstructionResource.ActualWorkTime[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\t12a66427-1567-4781-8627-90d1df0c2622\tPset_ConstructionResource.RemainingCost[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\tae62c7c1-015b-4529-ae1e-ec996d7bfd23\tPset_ConstructionResource.RemainingWork[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\tae3783a7-bdab-4182-bdeb-422e7abcb701\tPset_ConstructionResource.RemainingWorkProgression[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\t8d60610c-0682-4bc2-99b8-ced1c79cff86\tPset_ConstructionResource.ScheduleCompletion[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\t6eec7cd7-e9bd-421e-9324-cadeac449d8b\tPset_ConstructionResource.ScheduleCost[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\taa6f5a38-9c94-41d8-974e-139cd9ceae1c\tPset_ConstructionResource.ScheduleWork[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\t7103efd1-3477-445e-b400-6308a2e6ded7\tPset_ConstructionResource.ScheduleWorkProgression[Type]\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\n#\nGROUP\t153\tPset_ControllerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t793313b3-0e5a-4d43-973f-007619a00e3f\tPset_ControllerPHistory.Quality[Type]\tMULTILINETEXT\t\t153\t1\tIfcTimeSeries\t1\nPARAM\t1c43ca2b-5016-4c11-8c4f-78016833efc5\tPset_ControllerPHistory.Status[Type]\tMULTILINETEXT\t\t153\t1\tIfcTimeSeries\t1\nPARAM\tde11a58b-eb3d-46f6-bf2f-55477c1b8769\tPset_ControllerPHistory.Value[Type]\tMULTILINETEXT\t\t153\t1\tIfcTimeSeries\t1\nPARAM\t759c3c33-35ee-44c0-962f-e518468d8960\tPset_ControllerPHistory.ValueHistory[Type]\tMULTILINETEXT\t\t153\t1\tIfcTimeSeries\t1\n#\nGROUP\t154\tPset_ControllerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf21f44e9-2053-4152-9e89-c438cc96ce67\tPset_ControllerTypeCommon.ControlType[Type]\tTEXT\t\t154\t1\tPEnum_ControlType\t1\nPARAM\td16f87d4-8c1c-4d4a-80b7-c69a33535c3c\tPset_ControllerTypeCommon.Reference[Type]\tTEXT\t\t154\t1\tIfcIdentifier\t1\nPARAM\t6c525004-4860-4d9f-aa14-26cc21cff732\tPset_ControllerTypeCommon.SignalFactor[Type]\tNUMBER\t\t154\t1\tIfcReal\t1\nPARAM\teca28b18-efbc-4648-ae51-441480868ceb\tPset_ControllerTypeCommon.SignalOffset[Type]\tNUMBER\t\t154\t1\tIfcReal\t1\nPARAM\t3d231c3d-8989-48a8-8ad6-40f5ce28e442\tPset_ControllerTypeCommon.SignalTime[Type]\tNUMBER\t\t154\t1\tIfcTimeMeasure\t1\nPARAM\tb62593f8-9389-4090-b699-91dcf760603e\tPset_ControllerTypeCommon.Status[Type]\tTEXT\t\t154\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t155\tPset_ControllerTypeFloating\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tea02948a-d450-47ac-940f-de4636355173\tPset_ControllerTypeFloating.ControlType[Type]\tTEXT\t\t155\t1\tPEnum_ControllerTypeFloating\t1\nPARAM\t3adae4b7-42aa-48f4-aa7b-d746a6625645\tPset_ControllerTypeFloating.Labels[Type]\tMULTILINETEXT\t\t155\t1\tPropertyTableValue\t1\nPARAM\t9ef1cd32-ef01-432e-8b31-c3f12ff8849e\tPset_ControllerTypeFloating.Range[Type]\tMULTILINETEXT\t\t155\t1\tPropertyBoundedValue\t1\nPARAM\td1de92ff-ac25-4af9-9bc2-c5b6e47f3abb\tPset_ControllerTypeFloating.SignalFactor[Type]\tNUMBER\t\t155\t1\tIfcReal\t1\nPARAM\t1f21274c-ac92-4cf2-b182-1c4240b72fdf\tPset_ControllerTypeFloating.SignalOffset[Type]\tNUMBER\t\t155\t1\tIfcReal\t1\nPARAM\tf0044d4d-c491-4788-8760-9fbce60107ba\tPset_ControllerTypeFloating.SignalTime[Type]\tNUMBER\t\t155\t1\tIfcTimeMeasure\t1\nPARAM\t8548eb94-0a50-40d3-ab5d-98a792e46ed0\tPset_ControllerTypeFloating.Value[Type]\tMULTILINETEXT\t\t155\t1\tPropertyBoundedValue\t1\n#\nGROUP\t156\tPset_ControllerTypeMultiPosition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf941a45e-e6b5-442f-9c39-ba25b8accd52\tPset_ControllerTypeMultiPosition.ControlType[Type]\tTEXT\t\t156\t1\tPEnum_ControllerMultiPositionType\t1\nPARAM\ta3eb3fc7-093a-4307-9527-b68455cc1b40\tPset_ControllerTypeMultiPosition.IntegerRange[Type]\tMULTILINETEXT\t\t156\t1\tPropertyBoundedValue\t1\nPARAM\t405ee6ba-8e20-483e-adce-2bb3ad967c72\tPset_ControllerTypeMultiPosition.Labels[Type]\tMULTILINETEXT\t\t156\t1\tPropertyTableValue\t1\nPARAM\tccaa5da4-45c7-4f36-8d12-09a6bd362ab7\tPset_ControllerTypeMultiPosition.Range[Type]\tMULTILINETEXT\t\t156\t1\tPropertyBoundedValue\t1\nPARAM\td57c39cb-fb8b-4d61-817f-131127bfc0d2\tPset_ControllerTypeMultiPosition.Value[Type]\tMULTILINETEXT\t\t156\t1\tPropertyBoundedValue\t1\n#\nGROUP\t157\tPset_ControllerTypeProgrammable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6910ef7a-1893-4887-a62e-40e789cae1ca\tPset_ControllerTypeProgrammable.Application[Type]\tTEXT\t\t157\t1\tPEnum_ControllerApplication\t1\nPARAM\t0c1e8e85-25fc-49a4-bd51-2daf8f7ac70d\tPset_ControllerTypeProgrammable.ControlType[Type]\tTEXT\t\t157\t1\tPEnum_ControllerTypeProgrammable\t1\nPARAM\tad2e7140-98c5-4e21-bc6b-d39659a4f8ad\tPset_ControllerTypeProgrammable.FirmwareVersion[Type]\tTEXT\t\t157\t1\tIfcLabel\t1\nPARAM\t5a8acf8b-578f-4502-b268-2e790a62d75b\tPset_ControllerTypeProgrammable.SoftwareVersion[Type]\tTEXT\t\t157\t1\tIfcLabel\t1\n#\nGROUP\t158\tPset_ControllerTypeProportional\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4d931a44-6be4-4903-a441-a52cd9c985c4\tPset_ControllerTypeProportional.ControlType[Type]\tTEXT\t\t158\t1\tPEnum_ControllerProportionalType\t1\nPARAM\tc1e67567-f0b6-414e-a844-6d31a13034d4\tPset_ControllerTypeProportional.DerivativeConstant[Type]\tNUMBER\t\t158\t1\tIfcReal\t1\nPARAM\t0b0eddbf-4a25-4546-a4b1-9431811da0df\tPset_ControllerTypeProportional.IntegralConstant[Type]\tNUMBER\t\t158\t1\tIfcReal\t1\nPARAM\tef00002d-f57a-4599-ac21-e28feea3bcc6\tPset_ControllerTypeProportional.Labels[Type]\tMULTILINETEXT\t\t158\t1\tPropertyTableValue\t1\nPARAM\tb8066893-bdb1-4c0a-a9e0-794cbcfbb92c\tPset_ControllerTypeProportional.ProportionalConstant[Type]\tNUMBER\t\t158\t1\tIfcReal\t1\nPARAM\t78c0de2b-3c36-4991-8670-6d7221fe9d4a\tPset_ControllerTypeProportional.Range[Type]\tMULTILINETEXT\t\t158\t1\tPropertyBoundedValue\t1\nPARAM\td70bdce0-0cef-4389-935c-50122116b8f2\tPset_ControllerTypeProportional.SignalFactor1[Type]\tNUMBER\t\t158\t1\tIfcReal\t1\nPARAM\t494b85f3-fd0d-435a-82bf-e9cf88fc6663\tPset_ControllerTypeProportional.SignalFactor2[Type]\tNUMBER\t\t158\t1\tIfcReal\t1\nPARAM\ta08b68f0-69aa-4b0d-be34-e82d938bbc1a\tPset_ControllerTypeProportional.SignalTime1[Type]\tNUMBER\t\t158\t1\tIfcTimeMeasure\t1\nPARAM\t396fe37e-e2bb-4548-82b6-9cf2148169da\tPset_ControllerTypeProportional.SignalTime2[Type]\tNUMBER\t\t158\t1\tIfcTimeMeasure\t1\nPARAM\t4bd7b409-5f1d-460b-8d94-53174824c9aa\tPset_ControllerTypeProportional.SignalTimeDecrease[Type]\tNUMBER\t\t158\t1\tIfcTimeMeasure\t1\nPARAM\tdcb5a8c8-8825-42ae-9772-bc1882404640\tPset_ControllerTypeProportional.SignalTimeIncrease[Type]\tNUMBER\t\t158\t1\tIfcTimeMeasure\t1\nPARAM\te75d6b69-7605-47ac-b840-bcf1ff4100b2\tPset_ControllerTypeProportional.Value[Type]\tMULTILINETEXT\t\t158\t1\tPropertyBoundedValue\t1\n#\nGROUP\t159\tPset_ControllerTypeTwoPosition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8a0096a6-4cfb-47b5-96bb-9a41121f278c\tPset_ControllerTypeTwoPosition.BandWidth[Type]\tNUMBER\t\t159\t1\tIfcReal\t1\nPARAM\t15685b7d-a1d9-44a4-8ed7-8c0ddd19468e\tPset_ControllerTypeTwoPosition.ControlType[Type]\tTEXT\t\t159\t1\tPEnum_ControllerTwoPositionType\t1\nPARAM\t10460b58-bd72-4b42-b313-27dc5c1b4135\tPset_ControllerTypeTwoPosition.Labels[Type]\tMULTILINETEXT\t\t159\t1\tPropertyTableValue\t1\nPARAM\t35198438-134e-4976-9944-54f2e652a81f\tPset_ControllerTypeTwoPosition.Polarity[Type]\tYESNO\t\t159\t1\tIfcBoolean\t1\nPARAM\t931bc595-754e-47dd-a9b2-354bbb799a58\tPset_ControllerTypeTwoPosition.Value[Type]\tYESNO\t\t159\t1\tIfcBoolean\t1\n#\nGROUP\t160\tPset_CooledBeamPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7ff6572b-330c-4fa7-9d75-f6e41bcc3a4c\tPset_CooledBeamPHistory.BeamCoolingCapacity[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t09e21a1f-4cd8-49c5-aeef-395ea8cdae33\tPset_CooledBeamPHistory.BeamHeatingCapacity[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\tdff88f8d-8a76-4d0b-bee8-95594f4e25c8\tPset_CooledBeamPHistory.CoolingWaterFlowRate[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\td57d8241-d056-4a78-867b-11cb47c94a18\tPset_CooledBeamPHistory.CorrectionFactorForCooling[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t0fc9ecf1-328b-403c-8faa-1bd407704600\tPset_CooledBeamPHistory.CorrectionFactorForHeating[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\taff2e65a-2c88-426b-9b96-30020f40a495\tPset_CooledBeamPHistory.HeatingWaterFlowRate[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t7b81b37f-2495-4430-8abf-777227a810ca\tPset_CooledBeamPHistory.ReturnWaterTemperatureCooling[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\td0d667da-d4f8-4b02-99b3-65b521c2cd0b\tPset_CooledBeamPHistory.ReturnWaterTemperatureHeating[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t3ee98a29-9431-4bbb-bc82-e069d6502697\tPset_CooledBeamPHistory.SupplyWaterTemperatureCooling[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t5bf39402-2ff6-47ec-803f-df81e068def3\tPset_CooledBeamPHistory.SupplyWaterTemperatureHeating[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t6136d047-ea8f-44c4-871c-a5d342d7db2a\tPset_CooledBeamPHistory.TotalCoolingCapacity[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t0b28ddbe-0965-44b2-91f8-60add852a983\tPset_CooledBeamPHistory.TotalHeatingCapacity[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t9f104ed3-9ac2-4dad-a42e-0315e6519456\tPset_CooledBeamPHistory.WaterPressureDropCurves[Type]\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\n#\nGROUP\t161\tPset_CooledBeamPHistoryActive\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3fbdb793-dbca-4616-92c0-9209c026f9d2\tPset_CooledBeamPHistoryActive.AirFlowRate[Type]\tMULTILINETEXT\t\t161\t1\tIfcTimeSeries\t1\nPARAM\t48fdd621-dd04-4c53-9472-a856f21279ba\tPset_CooledBeamPHistoryActive.AirPressureDropCurves[Type]\tMULTILINETEXT\t\t161\t1\tIfcTimeSeries\t1\nPARAM\te7f876c1-b8cf-4bd9-a217-a3b60c4b4490\tPset_CooledBeamPHistoryActive.Throw[Type]\tMULTILINETEXT\t\t161\t1\tIfcTimeSeries\t1\n#\nGROUP\t162\tPset_CooledBeamTypeActive\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t47f1f631-ebb3-4c0c-bd69-b08a7009f1da\tPset_CooledBeamTypeActive.AirFlowConfiguration[Type]\tTEXT\t\t162\t1\tPEnum_CooledBeamActiveAirFlowConfigurationType\t1\nPARAM\t6c5035b8-5adb-4195-80d7-5770a20e19c9\tPset_CooledBeamTypeActive.AirflowRateRange[Type]\tMULTILINETEXT\t\t162\t1\tPropertyBoundedValue\t1\nPARAM\t3c776144-a070-4877-9836-3988fb9965ba\tPset_CooledBeamTypeActive.AirFlowRateRange[Type]\tMULTILINETEXT\t\t162\t1\tPropertyBoundedValue\t1\nPARAM\t73c4a53a-2fda-44ce-99f1-624d82217bf0\tPset_CooledBeamTypeActive.ConnectionSize[Type]\tLENGTH\t\t162\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td47be093-00c4-41d9-a90c-e646dc80f466\tPset_CooledBeamTypeActive.SupplyAirConnectionType[Type]\tTEXT\t\t162\t1\tPEnum_CooledBeamSupplyAirConnectionType\t1\n#\nGROUP\t163\tPset_CooledBeamTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2c67bd08-ce72-4837-956c-5445bb0b43e9\tPset_CooledBeamTypeCommon.CoilLength[Type]\tLENGTH\t\t163\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tca54be34-536c-4378-916e-734338894093\tPset_CooledBeamTypeCommon.CoilWidth[Type]\tLENGTH\t\t163\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1345aaf6-1fd7-45f0-8ddd-301ba2270756\tPset_CooledBeamTypeCommon.ConnectionSize[Type]\tLENGTH\t\t163\t1\tIfcLengthMeasure\t1\nPARAM\t1bcd2022-39b7-49a2-883e-e53f32a6e660\tPset_CooledBeamTypeCommon.FinishColor[Type]\tTEXT\t\t163\t1\tIfcLabel\t1\nPARAM\t7e834c84-cb8d-4343-8b35-26c01a63ef78\tPset_CooledBeamTypeCommon.FinishColour[Type]\tTEXT\t\t163\t1\tIfcLabel\t1\nPARAM\t55bfed40-0f45-460a-a5ce-3572421b36e9\tPset_CooledBeamTypeCommon.IntegratedLightingType[Type]\tTEXT\t\t163\t1\tPEnum_CooledBeamIntegratedLightingType\t1\nPARAM\t25459baa-f391-457b-b394-9604578215a9\tPset_CooledBeamTypeCommon.IsFreeHanging[Type]\tYESNO\t\t163\t1\tIfcBoolean\t1\nPARAM\te4beadda-9b98-4781-9cc0-bc11cff03480\tPset_CooledBeamTypeCommon.Material[Type]\tMULTILINETEXT\t\t163\t1\tIfcMaterial\t1\nPARAM\tf7e0030f-face-41c5-bf0a-dcb2ce28dc43\tPset_CooledBeamTypeCommon.NominalCoolingCapacity[Type]\tNUMBER\t\t163\t1\tIfcPowerMeasure\t1\nPARAM\te8e6ea35-fada-48e3-9e62-04b24370b001\tPset_CooledBeamTypeCommon.NominalHeatingCapacity[Type]\tNUMBER\t\t163\t1\tIfcPowerMeasure\t1\nPARAM\td85f3c57-955d-4fd6-ba30-03b0487a63bd\tPset_CooledBeamTypeCommon.NominalReturnWaterTemperatureCooling[Type]\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t0170bc05-c02d-4ed4-a752-4a11659da82d\tPset_CooledBeamTypeCommon.NominalReturnWaterTemperatureHeating[Type]\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t50bdac1e-c2f8-4e4f-b7f9-d7208d47e45d\tPset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureCooling[Type]\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\ted383c56-6dc2-4db4-86cd-f86923704b83\tPset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureHeating[Type]\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t4fbaaaaf-4c83-456f-9f85-a4a1f817cc95\tPset_CooledBeamTypeCommon.NominalSurroundingHumidityCooling[Type]\tNUMBER\t\t163\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t3cfcbe66-62f1-4130-aeb4-db314686bcf5\tPset_CooledBeamTypeCommon.NominalSurroundingTemperatureCooling[Type]\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t5349059c-a136-4d25-b6a5-eeeacd94bc4d\tPset_CooledBeamTypeCommon.NominalSurroundingTemperatureHeating[Type]\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\te49b6bdc-cdae-4745-83c0-1c04d9a917be\tPset_CooledBeamTypeCommon.NominalWaterFlowCooling[Type]\tNUMBER\t\t163\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tf37878ba-f55e-4a7a-b9e0-c00b861cfc73\tPset_CooledBeamTypeCommon.NominalWaterFlowHeating[Type]\tNUMBER\t\t163\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t45458ab1-1251-4445-adc0-b3352ac4103d\tPset_CooledBeamTypeCommon.PipeConnection[Type]\tTEXT\t\t163\t1\tPEnum_CooledBeamPipeConnection\t1\nPARAM\ta39a088d-62af-4ccd-874c-eac44c076d43\tPset_CooledBeamTypeCommon.PipeConnectionEnum[Type]\tTEXT\t\t163\t1\tPEnum_CooledBeamPipeConnection\t1\nPARAM\taf3488c0-1523-4722-87aa-4e0acb7109ea\tPset_CooledBeamTypeCommon.Reference[Type]\tTEXT\t\t163\t1\tIfcIdentifier\t1\nPARAM\tda946551-9044-4d81-9d06-e7d6afb50c3b\tPset_CooledBeamTypeCommon.Status[Type]\tTEXT\t\t163\t1\tPEnum_ElementStatus\t1\nPARAM\tde72db4a-55b7-4805-bdf4-11212a721ea6\tPset_CooledBeamTypeCommon.WaterFlowControlSystemType[Type]\tTEXT\t\t163\t1\tPEnum_CooledBeamWaterFlowControlSystemType\t1\nPARAM\t3f5b9b14-574b-409e-980b-a892321fc3c7\tPset_CooledBeamTypeCommon.WaterPressureRange[Type]\tMULTILINETEXT\t\t163\t1\tPropertyBoundedValue\t1\nPARAM\t917d349a-8868-4d89-9238-9ddbd9c586df\tPset_CooledBeamTypeCommon.Weight[Type]\tNUMBER\t\t163\t1\tIfcMassMeasure\t1\n#\nGROUP\t164\tPset_CoolingTowerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t38933f42-aefe-4b3b-8d69-a52501ce1225\tPset_CoolingTowerPHistory.Capacity[Type]\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\nPARAM\t873c6998-abcb-4ad4-b455-a9f030aa4958\tPset_CoolingTowerPHistory.HeatTransferCoefficient[Type]\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\nPARAM\t9b33f29d-2eea-4903-b17a-37809cd21f25\tPset_CoolingTowerPHistory.Performance[Type]\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\nPARAM\t7b09ea9b-64f0-46cb-aa35-e4ab8a875928\tPset_CoolingTowerPHistory.SumpHeaterPower[Type]\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\nPARAM\t0130e918-aeda-4ac6-ab8e-11bc5e144407\tPset_CoolingTowerPHistory.UACurve[Type]\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\n#\nGROUP\t165\tPset_CoolingTowerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t838d4a70-117f-4b4b-8747-87fbb93f4196\tPset_CoolingTowerTypeCommon.AmbientDesignDryBulbTemperature[Type]\tNUMBER\t\t165\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t1884bc86-96ca-4b57-a705-130c0f8eda10\tPset_CoolingTowerTypeCommon.AmbientDesignWetBulbTemperature[Type]\tNUMBER\t\t165\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t8b62dc66-b0e1-4e8d-8715-1cfc2dd17257\tPset_CoolingTowerTypeCommon.BasinReserveVolume[Type]\tVOLUME\t\t165\t1\tIfcVolumeMeasure\t1\nPARAM\t70c93324-14fb-49de-87e1-843556a61937\tPset_CoolingTowerTypeCommon.CapacityControl[Type]\tTEXT\t\t165\t1\tPEnum_CoolingTowerCapacityControl\t1\nPARAM\tbf2a689e-28f3-4ca7-9426-13330e0ed94b\tPset_CoolingTowerTypeCommon.CasingMaterial[Type]\tMULTILINETEXT\t\t165\t1\tIfcMaterial\t1\nPARAM\t5d1e5c96-233d-46d6-a71b-64d462ea7e1b\tPset_CoolingTowerTypeCommon.CircuitType[Type]\tTEXT\t\t165\t1\tPEnum_CoolingTowerCircuitType\t1\nPARAM\t947fdeae-7fa4-441e-bd7d-3e8aacf25f49\tPset_CoolingTowerTypeCommon.ControlStrategy[Type]\tTEXT\t\t165\t1\tPEnum_CoolingTowerControlStrategy\t1\nPARAM\tc920b70c-5ea8-466c-ab72-f74f2aaf3e86\tPset_CoolingTowerTypeCommon.FillMaterial[Type]\tMULTILINETEXT\t\t165\t1\tIfcMaterial\t1\nPARAM\t75167223-2017-4588-9ca6-428f127fec70\tPset_CoolingTowerTypeCommon.FlowArrangement[Type]\tTEXT\t\t165\t1\tPEnum_CoolingTowerFlowArrangement\t1\nPARAM\td4e42c6e-a911-4f88-a337-2cd52b73f019\tPset_CoolingTowerTypeCommon.LiftElevationDifference[Type]\tLENGTH\t\t165\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t87d3e3e0-2ad1-41a7-9dbb-9cd60bd4b826\tPset_CoolingTowerTypeCommon.NominalCapacity[Type]\tNUMBER\t\t165\t1\tIfcPowerMeasure\t1\nPARAM\tff72317b-d186-4660-b6eb-d9e3cc9727c3\tPset_CoolingTowerTypeCommon.NumberOfCells[Type]\tINTEGER\t\t165\t1\tIfcCountMeasure\t1\nPARAM\tc220a41f-886b-4de1-8944-8015fb4d23c8\tPset_CoolingTowerTypeCommon.OperationTemperatureRange[Type]\tNUMBER\t\t165\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\td679a2c0-16af-4d07-9337-456f85c7cfdd\tPset_CoolingTowerTypeCommon.Reference[Type]\tTEXT\t\t165\t1\tIfcIdentifier\t1\nPARAM\t1530e590-7861-4787-8ce5-e4f25ac1fb99\tPset_CoolingTowerTypeCommon.SprayType[Type]\tTEXT\t\t165\t1\tPEnum_CoolingTowerSprayType\t1\nPARAM\t9f8e684c-5ee2-4fc4-966b-9a4e8501d54e\tPset_CoolingTowerTypeCommon.Status[Type]\tTEXT\t\t165\t1\tPEnum_ElementStatus\t1\nPARAM\t9d722b05-4ee7-436f-81f1-1b0dd6393406\tPset_CoolingTowerTypeCommon.WaterRequirement[Type]\tNUMBER\t\t165\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t3ecdee4e-bb4e-4e8b-952d-86c530cb2fcb\tPset_CoolingTowerTypeCommon.Weight[Type]\tNUMBER\t\t165\t1\tIfcMassMeasure\t1\n#\nGROUP\t166\tPset_CourseApplicationConditions\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta7b4c818-49d8-45d8-bd7e-9f9b6bc79a6d\tPset_CourseApplicationConditions.ApplicationTemperature[Type]\tNUMBER\t\t166\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t80cb5cdf-ce28-4220-b11c-bebadf4a8885\tPset_CourseApplicationConditions.WeatherConditions[Type]\tTEXT\t\t166\t1\tIfcText\t1\n#\nGROUP\t167\tPset_CourseCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t74bb9be7-8c29-4d50-b341-9e72c27cc4d7\tPset_CourseCommon.NominalLength[Type]\tLENGTH\t\t167\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\td0c39e7b-bc1d-44e9-97f0-dc82745ff690\tPset_CourseCommon.NominalThickness[Type]\tLENGTH\t\t167\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\ta851f2af-a964-44b4-a754-967aee54ce4d\tPset_CourseCommon.NominalWidth[Type]\tLENGTH\t\t167\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t168\tPset_CoveringCeiling\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t74318a74-7855-4010-8150-3fcedea8c566\tPset_CoveringCeiling.FragilityRating[Type]\tTEXT\t\t168\t1\tIfcLabel\t1\nPARAM\t21b0af2e-1099-4890-9bdd-1ce30027c75a\tPset_CoveringCeiling.Permeability[Type]\tNUMBER\t\t168\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t51a54828-6a34-4a52-8e42-a416256ec9a4\tPset_CoveringCeiling.TileLength[Type]\tLENGTH\t\t168\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t53b89ada-46fe-41bd-a7db-8484cba0d557\tPset_CoveringCeiling.TileWidth[Type]\tLENGTH\t\t168\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t169\tPset_CoveringCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tba10dcf9-ceaf-483b-bebf-06ddaa6417b6\tPset_CoveringCommon.AcousticRating[Type]\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\tb0dfc39d-f66f-4d1a-81d0-ca3ec3c59d89\tPset_CoveringCommon.Combustible[Type]\tYESNO\t\t169\t1\tIfcBoolean\t1\nPARAM\tf41e96ec-8600-430a-8e64-c010a8e31590\tPset_CoveringCommon.Finish[Type]\tTEXT\t\t169\t1\tIfcText\t1\nPARAM\t8a43a414-683c-439d-8888-60d6662df839\tPset_CoveringCommon.FireRating[Type]\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\t1ac6a7f4-ba48-4401-9a48-e6322467f344\tPset_CoveringCommon.FlammabilityRating[Type]\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\t89f4542d-6c73-470f-b215-8f7d44e77edb\tPset_CoveringCommon.Fragility[Type]\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\t02896e79-d4a4-4c76-8381-00c6504581d9\tPset_CoveringCommon.FragilityRating[Type]\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\t0895ff4d-fe80-47bf-ae21-9b282d814b91\tPset_CoveringCommon.IsExternal[Type]\tYESNO\t\t169\t1\tIfcBoolean\t1\nPARAM\tc020aece-614a-4a59-a056-b24fdfacf6ae\tPset_CoveringCommon.Material[Type]\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\t319e75b6-bc45-4947-a926-5df68da83409\tPset_CoveringCommon.Reference[Type]\tTEXT\t\t169\t1\tIfcIdentifier\t1\nPARAM\t76c286ab-0d5b-4a3f-991e-731a42120310\tPset_CoveringCommon.Status[Type]\tTEXT\t\t169\t1\tPEnum_ElementStatus\t1\nPARAM\ta07e6599-1360-4266-8602-2e806980150c\tPset_CoveringCommon.SurfaceSpreadOfFlame[Type]\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\tdb96843b-d055-42bb-9dfb-abbf5ec656c5\tPset_CoveringCommon.ThermalTransmittance[Type]\tNUMBER\t\t169\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t90a4b463-418f-4483-ade8-567e6e7bc2dc\tPset_CoveringCommon.Thickness[Type]\tLENGTH\t\t169\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0f0b9392-1942-4a87-aca3-b63dbcdd4ebb\tPset_CoveringCommon.TotalThickness[Type]\tLENGTH\t\t169\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t170\tPset_CoveringFlooring\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tff5ee02f-9a7d-4654-93c4-9316f5636359\tPset_CoveringFlooring.HasAntiStaticSurface[Type]\tYESNO\t\t170\t1\tIfcBoolean\t1\nPARAM\tdd5d4147-4cda-4b47-829b-65075973264e\tPset_CoveringFlooring.HasNonSkidSurface[Type]\tYESNO\t\t170\t1\tIfcBoolean\t1\n#\nGROUP\t171\tPset_CoveringTypeMembrane\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tea859473-dd6a-414c-8598-0c08153d4421\tPset_CoveringTypeMembrane.NominalInstallationDepth[Type]\tLENGTH\t\t171\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t91290c97-4d9e-4501-abaa-b01130781417\tPset_CoveringTypeMembrane.NominalTransverseInclination[Type]\tNUMBER\t\t171\t1\tIfcPlaneAngleMeasure\t1\n#\nGROUP\t172\tPset_CurrentInstrumentTransformer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5b6b829a-d220-41d9-a56a-90746b1055b4\tPset_CurrentInstrumentTransformer.AccuracyClass[Type]\tNUMBER\t\t172\t1\tIfcRatioMeasure\t1\nPARAM\t52772677-2b26-44d1-8fb6-040c87cc17fe\tPset_CurrentInstrumentTransformer.AccuracyGrade[Type]\tTEXT\t\t172\t1\tIfcLabel\t1\nPARAM\t35b72b20-38b4-4475-8ead-0377c41b2177\tPset_CurrentInstrumentTransformer.NominalCurrent[Type]\tNUMBER\t\t172\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t9a2aa844-4a2a-4d86-991c-6ece66cf46bb\tPset_CurrentInstrumentTransformer.NominalPower[Type]\tNUMBER\t\t172\t1\tIfcPowerMeasure\t1\nPARAM\t0631541e-98ba-4c29-b1eb-f40dc8270f0e\tPset_CurrentInstrumentTransformer.NumberOfPhases[Type]\tINTEGER\t\t172\t1\tIfcCountMeasure\t1\nPARAM\t98d07115-4e85-4055-aa3f-15f5246a765c\tPset_CurrentInstrumentTransformer.PrimaryCurrent[Type]\tNUMBER\t\t172\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tfa94e2e2-094f-4073-8d27-4449d1cc908e\tPset_CurrentInstrumentTransformer.PrimaryFrequency[Type]\tNUMBER\t\t172\t1\tIfcFrequencyMeasure\t1\nPARAM\tfe587fc6-76a8-47c3-bd1d-fe2c40ff75cd\tPset_CurrentInstrumentTransformer.RatedVoltage[Type]\tMULTILINETEXT\t\t172\t1\tPropertyBoundedValue\t1\nPARAM\tb162c71b-7046-47db-8e86-27dfe6718de2\tPset_CurrentInstrumentTransformer.SecondaryCurrent[Type]\tNUMBER\t\t172\t1\tIfcElectricCurrentMeasure\t1\nPARAM\te9ffb49e-9b33-4cd8-8ffa-4ec99bdad299\tPset_CurrentInstrumentTransformer.SecondaryFrequency[Type]\tNUMBER\t\t172\t1\tIfcFrequencyMeasure\t1\n#\nGROUP\t173\tPset_CurtainWallCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tee6bf7dc-2c1b-4618-813d-5131911f4aa9\tPset_CurtainWallCommon.AcousticRating[Type]\tTEXT\t\t173\t1\tIfcLabel\t1\nPARAM\t7dc4281c-2b3a-48d0-83b8-c588f0d5f46f\tPset_CurtainWallCommon.Combustible[Type]\tYESNO\t\t173\t1\tIfcBoolean\t1\nPARAM\td41f26e1-01c8-40a6-af71-1f8c7103c284\tPset_CurtainWallCommon.FireRating[Type]\tTEXT\t\t173\t1\tIfcLabel\t1\nPARAM\t84f7731d-95af-44a3-8123-9457050f99ca\tPset_CurtainWallCommon.IsExternal[Type]\tYESNO\t\t173\t1\tIfcBoolean\t1\nPARAM\tb66a1670-3c8d-4191-9d71-f2d8953f1e25\tPset_CurtainWallCommon.Reference[Type]\tTEXT\t\t173\t1\tIfcIdentifier\t1\nPARAM\tb598eb0c-4476-4b57-a45a-7382d0272874\tPset_CurtainWallCommon.Status[Type]\tTEXT\t\t173\t1\tPEnum_ElementStatus\t1\nPARAM\t39702f34-8d0f-44e0-bfa7-8f3479ee0ce3\tPset_CurtainWallCommon.SurfaceSpreadOfFlame[Type]\tTEXT\t\t173\t1\tIfcLabel\t1\nPARAM\t8f08ee4e-b34d-458c-b203-513386375d90\tPset_CurtainWallCommon.ThermalTransmittance[Type]\tNUMBER\t\t173\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t174\tPset_DamperOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c7bd0b1-59e6-4002-8ac4-dbb8477f8b16\tPset_DamperOccurrence.SizingMethod[Type]\tTEXT\t\t174\t1\tPEnum_DamperSizingMethod\t1\n#\nGROUP\t175\tPset_DamperPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6079387f-ec91-4adf-a5b5-05e167bdb872\tPset_DamperPHistory.AirFlowRate[Type]\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\nPARAM\te760b2fa-8bd4-4e01-90f3-c857f6987743\tPset_DamperPHistory.BladePositionAngle[Type]\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\nPARAM\t6c191236-b569-4b9d-b357-9ef27c7f94b3\tPset_DamperPHistory.DamperPosition[Type]\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\nPARAM\tab4bca77-8cd7-4394-b638-272133d413be\tPset_DamperPHistory.Leakage[Type]\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\nPARAM\tc6e1ebab-28c8-4400-9e33-d9f9acc3bf3b\tPset_DamperPHistory.PressureDrop[Type]\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\nPARAM\t37582803-e4ff-453d-a186-1453f50d8f06\tPset_DamperPHistory.PressureLossCoefficient[Type]\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\n#\nGROUP\t176\tPset_DamperTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7de2b45-5c6b-4a4c-9293-5350e3c86a16\tPset_DamperTypeCommon.BladeAction[Type]\tTEXT\t\t176\t1\tPEnum_DamperBladeAction\t1\nPARAM\tc8ca0da7-87f7-46b5-b962-99014d43b11f\tPset_DamperTypeCommon.BladeEdge[Type]\tTEXT\t\t176\t1\tPEnum_DamperBladeEdge\t1\nPARAM\t8b39a53d-08fb-4a11-932f-e2539c471678\tPset_DamperTypeCommon.BladeMaterial[Type]\tMULTILINETEXT\t\t176\t1\tIfcMaterial\t1\nPARAM\tcce5480b-7246-4fbe-a0a9-bc7a69fd84d2\tPset_DamperTypeCommon.BladeShape[Type]\tTEXT\t\t176\t1\tPEnum_DamperBladeShape\t1\nPARAM\t576fafde-8c47-4695-b7b2-eddc537928e2\tPset_DamperTypeCommon.BladeThickness[Type]\tLENGTH\t\t176\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te182daa4-7e65-451e-aa4d-6f50cc0ce3be\tPset_DamperTypeCommon.CloseOffRating[Type]\tNUMBER\t\t176\t1\tIfcPressureMeasure\t1\nPARAM\t670ff535-6a9f-465a-9f58-e4ea641aba19\tPset_DamperTypeCommon.FaceArea[Type]\tAREA\t\t176\t1\tIfcAreaMeasure\t1\nPARAM\t968d9d7a-1778-4124-8d64-8ee6bf96dcdd\tPset_DamperTypeCommon.FrameDepth[Type]\tLENGTH\t\t176\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t642b8a87-3319-4a68-89b6-f85df7fcce59\tPset_DamperTypeCommon.FrameMaterial[Type]\tMULTILINETEXT\t\t176\t1\tIfcMaterial\t1\nPARAM\t34014747-c646-4291-bb26-ebbda11117dc\tPset_DamperTypeCommon.FrameThickness[Type]\tLENGTH\t\t176\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf1441756-2756-4e4d-b2b9-fd192e0e119c\tPset_DamperTypeCommon.FrameType[Type]\tTEXT\t\t176\t1\tIfcLabel\t1\nPARAM\t35b4de8d-0c63-47be-8724-4ce255f0cacd\tPset_DamperTypeCommon.LeakageCurve[Type]\tMULTILINETEXT\t\t176\t1\tPropertyTableValue\t1\nPARAM\tdda11036-dec8-49d1-b8db-cdb616ae2e39\tPset_DamperTypeCommon.LeakageFullyClosed[Type]\tNUMBER\t\t176\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t6526e048-1d26-45c6-98f9-9abd6173cfb9\tPset_DamperTypeCommon.LossCoefficentCurve[Type]\tMULTILINETEXT\t\t176\t1\tPropertyTableValue\t1\nPARAM\t8a16d3e9-bc6a-41ca-9c91-f40ce345ba85\tPset_DamperTypeCommon.MaximumAirFlowRate[Type]\tNUMBER\t\t176\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\te1a06733-76de-4cce-b3cf-cb09d132340a\tPset_DamperTypeCommon.MaximumWorkingPressure[Type]\tNUMBER\t\t176\t1\tIfcPressureMeasure\t1\nPARAM\tf8035248-77d6-4a89-984f-1c2c9e0713e9\tPset_DamperTypeCommon.NominalAirFlowRate[Type]\tNUMBER\t\t176\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t070cfae0-1be3-4bba-8819-2fb2aab9566a\tPset_DamperTypeCommon.NumberofBlades[Type]\tINTEGER\t\t176\t1\tIfcInteger\t1\nPARAM\t6685bbec-6ea4-4d8c-aceb-cf3be9b087a8\tPset_DamperTypeCommon.OpenPressureDrop[Type]\tNUMBER\t\t176\t1\tIfcPressureMeasure\t1\nPARAM\tefc881c0-8e2c-484e-8a75-3ea5c6dc7269\tPset_DamperTypeCommon.Operation[Type]\tTEXT\t\t176\t1\tPEnum_DamperOperation\t1\nPARAM\tfb8667db-40e9-485f-ae1c-578c694f4e93\tPset_DamperTypeCommon.Orientation[Type]\tTEXT\t\t176\t1\tPEnum_DamperOrientation\t1\nPARAM\t9f5d1bdf-2793-4eb8-a187-1a3f1169674f\tPset_DamperTypeCommon.Reference[Type]\tTEXT\t\t176\t1\tIfcIdentifier\t1\nPARAM\t12df9dee-551d-4a4c-9d47-6dd4c4d70340\tPset_DamperTypeCommon.RegeneratedSoundCurve[Type]\tMULTILINETEXT\t\t176\t1\tPropertyTableValue\t1\nPARAM\te7742cb8-3da6-4506-b256-de367e59d3b5\tPset_DamperTypeCommon.SealMaterial[Type]\tMULTILINETEXT\t\t176\t1\tIfcMaterial\t1\nPARAM\tc3447631-1f0e-4ac7-ae34-0c151f1d05a8\tPset_DamperTypeCommon.Status[Type]\tTEXT\t\t176\t1\tPEnum_ElementStatus\t1\nPARAM\tb34c1224-623c-425f-b419-cf85e2db862f\tPset_DamperTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t176\t1\tPropertyBoundedValue\t1\nPARAM\t6b3fb26b-a894-4abd-af3c-b1bc812ab674\tPset_DamperTypeCommon.TemperatureRating[Type]\tNUMBER\t\t176\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t2fc7104b-ed10-4afd-9f00-72c4a920635f\tPset_DamperTypeCommon.TorqueRange[Type]\tMULTILINETEXT\t\t176\t1\tPropertyBoundedValue\t1\n#\nGROUP\t177\tPset_DamperTypeControlDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tddeada2e-80bd-447f-bce7-080931556374\tPset_DamperTypeControlDamper.ControlDamperOperation[Type]\tTEXT\t\t177\t1\tPEnum_ControlDamperOperation\t1\nPARAM\t45228df6-a854-4df7-9130-9f4acf400ccd\tPset_DamperTypeControlDamper.TorqueRange[Type]\tMULTILINETEXT\t\t177\t1\tPropertyBoundedValue\t1\n#\nGROUP\t178\tPset_DamperTypeFireDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta9ea1bc6-4918-4601-bdca-b509453c7e59\tPset_DamperTypeFireDamper.ActuationType[Type]\tTEXT\t\t178\t1\tPEnum_FireDamperActuationType\t1\nPARAM\t25600cfb-cb04-400b-9b69-034ca2d85845\tPset_DamperTypeFireDamper.ClosureRatingEnum[Type]\tTEXT\t\t178\t1\tPEnum_FireDamperClosureRating\t1\nPARAM\tcfb4892c-3de8-4bc1-bb7a-4ad0442bab4b\tPset_DamperTypeFireDamper.FireResistanceRating[Type]\tTEXT\t\t178\t1\tIfcLabel\t1\nPARAM\tb1443815-8a9e-4981-a58b-2dc739fce5c9\tPset_DamperTypeFireDamper.FusibleLinkTemperature[Type]\tNUMBER\t\t178\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t179\tPset_DamperTypeFireSmokeDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5289d633-4599-4980-81c2-d0ec999a08d4\tPset_DamperTypeFireSmokeDamper.ActuationType[Type]\tTEXT\t\t179\t1\tPEnum_FireDamperActuationType\t1\nPARAM\t85f89d16-5d9b-4495-aa40-cbcd6c48a35c\tPset_DamperTypeFireSmokeDamper.ClosureRatingEnum[Type]\tTEXT\t\t179\t1\tPEnum_FireDamperClosureRating\t1\nPARAM\te82038f5-132c-41e8-81d0-b174765b3b55\tPset_DamperTypeFireSmokeDamper.ControlType[Type]\tTEXT\t\t179\t1\tIfcLabel\t1\nPARAM\ta545d44b-0eaa-4301-8f13-eafbd656cef4\tPset_DamperTypeFireSmokeDamper.DamperControlType[Type]\tTEXT\t\t179\t1\tIfcLabel\t1\nPARAM\t7ed263c5-1b63-4b08-8dd1-a8e8f8720e7f\tPset_DamperTypeFireSmokeDamper.FireResistanceRating[Type]\tTEXT\t\t179\t1\tIfcLabel\t1\nPARAM\t273d5f58-147f-4a63-84b9-79ff8d6a5c34\tPset_DamperTypeFireSmokeDamper.FusibleLinkTemperature[Type]\tNUMBER\t\t179\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t180\tPset_DamperTypeSmokeDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7737712d-0d7b-4b2c-8bf1-ea13366f4d93\tPset_DamperTypeSmokeDamper.ControlType[Type]\tTEXT\t\t180\t1\tIfcLabel\t1\n#\nGROUP\t181\tPset_DataTransmissionUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t15fde150-6320-44c8-9e6b-e39dd936a328\tPset_DataTransmissionUnit.DataTransmissionUnitUsage[Type]\tTEXT\t\t181\t1\tPEnum_DataTransmissionUnitUsage\t1\nPARAM\t9d758a18-c1d9-4c2b-ab45-5af482dee8b5\tPset_DataTransmissionUnit.SerialInterfaceType[Type]\tTEXT\t\t181\t1\tPEnum_SerialInterfaceType\t1\nPARAM\tbafb18df-62fc-46f3-bbee-a981f448e909\tPset_DataTransmissionUnit.WorkingState[Type]\tTEXT\t\t181\t1\tIfcLabel\t1\n#\nGROUP\t182\tPset_DesignPoint\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t077898df-2c96-42c7-beef-432c66e81055\tPset_DesignPoint.IsDesignPoint[Type]\tYESNO\t\t182\t1\tIfcBoolean\t1\n#\nGROUP\t183\tPset_DiscreteAccessoryAnchorBolt\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc7002279-2123-4604-9086-fecebbf54357\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltDiameter[Type]\tLENGTH\t\t183\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5c34f38b-aa31-4d67-b87f-9ca9b15351ef\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltLength[Type]\tLENGTH\t\t183\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t85f61c4c-2be5-4fa0-a029-a832bf01d8be\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltProtrusionLength[Type]\tLENGTH\t\t183\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb448305d-577d-40b0-bf34-c104850e4e4d\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltThreadLength[Type]\tLENGTH\t\t183\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t184\tPset_DiscreteAccessoryColumnShoe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0aebbdab-77bf-4dbb-bd7f-ca10096b2f2b\tPset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateDepth[Type]\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t92eee213-953b-49a6-848c-7255bcdab023\tPset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateThickness[Type]\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3975044e-9e4e-4b51-8321-35c0f2171b74\tPset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateWidth[Type]\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t91a97ec7-0dd2-4af5-ad90-80716b46ffb1\tPset_DiscreteAccessoryColumnShoe.ColumnShoeCasingDepth[Type]\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td266b84c-0da3-479f-b2e2-8f66ba457aec\tPset_DiscreteAccessoryColumnShoe.ColumnShoeCasingHeight[Type]\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcd959c31-9111-4636-9aac-004c1c3aec21\tPset_DiscreteAccessoryColumnShoe.ColumnShoeCasingWidth[Type]\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t185\tPset_DiscreteAccessoryCornerFixingPlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1258fcb9-fc48-46ad-83f6-c55b3ce52cba\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneX[Type]\tLENGTH\t\t185\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te540f6f9-aa54-4903-8830-b6fa77bdc79e\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneZ[Type]\tLENGTH\t\t185\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t549bfe9c-32c1-422e-b475-11b43e66eda9\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateLength[Type]\tLENGTH\t\t185\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb6ce0c8b-1d6d-44bc-94f1-39056d7dbfae\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateThickness[Type]\tLENGTH\t\t185\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t186\tPset_DiscreteAccessoryDiagonalTrussConnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3fb7472c-489c-4142-b832-8fd1b6d4dbcb\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussBaseBarDiameter[Type]\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc19bb52c-37d3-49ba-8f64-767d5d05501c\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarDiameter[Type]\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5d56d3b5-093f-41ea-a395-f35e5b79a872\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarSpacing[Type]\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2879f131-7556-444d-910b-ff886e53616d\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussHeight[Type]\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t409b40be-a35f-4eca-a75a-8319bbcd18ae\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussLength[Type]\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t07f35153-add9-4c36-8a49-42e08a563269\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussSecondaryBarDiameter[Type]\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t187\tPset_DiscreteAccessoryEdgeFixingPlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td14c0077-2937-4411-8f9a-bcf48988a6c0\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneX[Type]\tLENGTH\t\t187\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6b8080c2-0175-4cef-9cb9-9a87310c342e\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneZ[Type]\tLENGTH\t\t187\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4b5a2427-c3ae-4c8c-a35a-49cbea5e40d7\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateLength[Type]\tLENGTH\t\t187\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7f65d3b2-5bc2-400d-8186-234d70ec9499\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateThickness[Type]\tLENGTH\t\t187\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t188\tPset_DiscreteAccessoryFixingSocket\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tde7d547a-a227-4ec0-a06d-742592ae6a63\tPset_DiscreteAccessoryFixingSocket.FixingSocketHeight[Type]\tLENGTH\t\t188\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t54afac7d-ab95-4089-9697-014ec1b13406\tPset_DiscreteAccessoryFixingSocket.FixingSocketThreadDiameter[Type]\tLENGTH\t\t188\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t14fdb4b3-7bdd-4ed3-9fce-ab9e25904334\tPset_DiscreteAccessoryFixingSocket.FixingSocketThreadLength[Type]\tLENGTH\t\t188\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8dc25762-370f-4462-8f84-653a2fcdc88c\tPset_DiscreteAccessoryFixingSocket.FixingSocketTypeReference[Type]\tMULTILINETEXT\t\t188\t1\tIfcExternalReference\t1\n#\nGROUP\t189\tPset_DiscreteAccessoryLadderTrussConnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td37fc4d3-fa62-4407-b790-b4ed74779e22\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussBaseBarDiameter[Type]\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7457085f-043a-4844-8491-fcd6498300db\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarDiameter[Type]\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tce6fd7f7-4a7b-4fd8-988b-9865fc54e98e\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarSpacing[Type]\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbaa09d83-0ccb-436c-9345-f0af2b3343d7\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussHeight[Type]\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc6fa26e5-1a5d-4f05-9491-c97c1645bf26\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussLength[Type]\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tda7e0ceb-b2cb-48a2-90ca-c867bb9a73e2\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussSecondaryBarDiameter[Type]\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t190\tPset_DiscreteAccessoryStandardFixingPlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4e359bf4-813d-4711-a69f-c7f44105629c\tPset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateDepth[Type]\tLENGTH\t\t190\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta5944b7d-390e-4f4e-99ae-2c180e746cd7\tPset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateThickness[Type]\tLENGTH\t\t190\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t742353a6-0eca-40c7-890e-b76aa4593d6d\tPset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateWidth[Type]\tLENGTH\t\t190\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t191\tPset_DiscreteAccessoryTypeBracket\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t27d2c3b0-9c69-434e-a05d-6c42b212cf74\tPset_DiscreteAccessoryTypeBracket.IsInsulated[Type]\tYESNO\t\t191\t1\tIfcBoolean\t1\n#\nGROUP\t192\tPset_DiscreteAccessoryTypeCableArranger\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2581c8b9-c0b9-4e6c-953d-a6a26da7e093\tPset_DiscreteAccessoryTypeCableArranger.CableArrangerPosition[Type]\tTEXT\t\t192\t1\tPEnum_ArrangerPositionEnum\t1\n#\nGROUP\t193\tPset_DiscreteAccessoryTypeInsulator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta14628a2-e0a7-4846-80a9-4fc7d5d04fe7\tPset_DiscreteAccessoryTypeInsulator.BendingStrength[Type]\tNUMBER\t\t193\t1\tIfcPressureMeasure\t1\nPARAM\t8c5a3fde-1b69-484e-af19-ae4ca6c080da\tPset_DiscreteAccessoryTypeInsulator.BreakdownVoltageTolerance[Type]\tNUMBER\t\t193\t1\tIfcElectricVoltageMeasure\t1\nPARAM\tfcca0987-1ab7-4bb9-ab3f-5a46d2571aff\tPset_DiscreteAccessoryTypeInsulator.CreepageDistance[Type]\tLENGTH\t\t193\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tefe306e1-1996-470e-a8c7-d1c1a85a7a7c\tPset_DiscreteAccessoryTypeInsulator.InstallationMethod[Type]\tTEXT\t\t193\t1\tIfcLabel\t1\nPARAM\tbb31987b-9bd7-4c75-ae64-b01222773063\tPset_DiscreteAccessoryTypeInsulator.InsulationMethod[Type]\tTEXT\t\t193\t1\tPEnum_InsulatorType\t1\nPARAM\t14abf1bc-2d52-4e49-99ea-994fdacc69a3\tPset_DiscreteAccessoryTypeInsulator.InsulationVoltage[Type]\tNUMBER\t\t193\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t8c2dacbd-aaaf-4776-85c2-af6565b39403\tPset_DiscreteAccessoryTypeInsulator.LightningPeakVoltage[Type]\tNUMBER\t\t193\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t97cbd5c1-b036-40b6-8955-454194dbd655\tPset_DiscreteAccessoryTypeInsulator.OperationalTemperatureRange[Type]\tMULTILINETEXT\t\t193\t1\tPropertyBoundedValue\t1\nPARAM\t88838672-11c4-42f0-8d93-19aa03e28c77\tPset_DiscreteAccessoryTypeInsulator.RatedCurrent[Type]\tMULTILINETEXT\t\t193\t1\tPropertyBoundedValue\t1\nPARAM\t232a90f3-e067-400f-b46d-4f84292fe573\tPset_DiscreteAccessoryTypeInsulator.RatedVoltage[Type]\tMULTILINETEXT\t\t193\t1\tPropertyBoundedValue\t1\nPARAM\tf065df44-bb21-4000-ab24-042693db8eff\tPset_DiscreteAccessoryTypeInsulator.RMSWithstandVoltage[Type]\tNUMBER\t\t193\t1\tIfcElectricVoltageMeasure\t1\nPARAM\tafe371bb-6be5-4fb7-a9bd-5bebef0cd962\tPset_DiscreteAccessoryTypeInsulator.Voltage[Type]\tMULTILINETEXT\t\t193\t1\tPropertyBoundedValue\t1\n#\nGROUP\t194\tPset_DiscreteAccessoryTypeLock\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5220d679-69ac-4d3d-aeae-ac19bb9c5fdf\tPset_DiscreteAccessoryTypeLock.InstallationPlan[Type]\tMULTILINETEXT\t\t194\t1\tIfcExternalReference\t1\nPARAM\t730e874c-0afb-43fc-a9cd-4f4a2280a887\tPset_DiscreteAccessoryTypeLock.RequiredClosureSpacing[Type]\tLENGTH\t\t194\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t195\tPset_DiscreteAccessoryTypeRailBrace\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7263c6ce-78d0-49e2-9741-c79bc8a120af\tPset_DiscreteAccessoryTypeRailBrace.IsTemporary[Type]\tYESNO\t\t195\t1\tIfcBoolean\t1\n#\nGROUP\t196\tPset_DiscreteAccessoryTypeRailLubrication\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t81c5c93f-09ac-46d2-9221-eb3cd8abbc8c\tPset_DiscreteAccessoryTypeRailLubrication.LubricationPowerSupplyType[Type]\tTEXT\t\t196\t1\tPEnum_LubricationPowerSupply\t1\nPARAM\tfef45088-6015-49ad-8428-76364a1db47f\tPset_DiscreteAccessoryTypeRailLubrication.LubricationSystemType[Type]\tTEXT\t\t196\t1\tPEnum_LubricationSystemType\t1\nPARAM\tfac70805-330f-4f91-a072-c0569f519992\tPset_DiscreteAccessoryTypeRailLubrication.MaximumNoiseEmissions[Type]\tNUMBER\t\t196\t1\tIfcSoundPowerLevelMeasure\t1\nPARAM\t234dca2b-80e7-4baf-8840-6bafe1a0e872\tPset_DiscreteAccessoryTypeRailLubrication.PositionInTrack[Type]\tTEXT\t\t196\t1\tPEnum_RelativePosition\t1\n#\nGROUP\t197\tPset_DiscreteAccessoryTypeRailPad\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3b07e6a5-1b08-4d76-9e07-b6b4605be52a\tPset_DiscreteAccessoryTypeRailPad.RailPadStiffness[Type]\tTEXT\t\t197\t1\tPEnum_RailPadStiffness\t1\n#\nGROUP\t198\tPset_DiscreteAccessoryTypeSlidingChair\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t72196550-3e26-4d0c-bd2d-824e2e9bb55b\tPset_DiscreteAccessoryTypeSlidingChair.IsSelfLubricated[Type]\tYESNO\t\t198\t1\tIfcBoolean\t1\n#\nGROUP\t199\tPset_DiscreteAccessoryTypeSoundAbsorption\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta270c420-6f82-4a32-9d02-2e1bd04bd26e\tPset_DiscreteAccessoryTypeSoundAbsorption.SoundAbsorptionLimit[Type]\tNUMBER\t\t199\t1\tIfcSoundPowerLevelMeasure\t1\n#\nGROUP\t200\tPset_DiscreteAccessoryTypeTensioningEquipment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1f9654ba-782a-424c-9039-3489e60f4262\tPset_DiscreteAccessoryTypeTensioningEquipment.AssemblyInstruction[Type]\tMULTILINETEXT\t\t200\t1\tIfcExternalReference\t1\nPARAM\tcde216d2-af50-419d-9a1a-9afe0fbc5ab6\tPset_DiscreteAccessoryTypeTensioningEquipment.HasBreakLineLock[Type]\tYESNO\t\t200\t1\tIfcBoolean\t1\nPARAM\t2542f05e-72ca-4710-9a3e-aebcb412df1b\tPset_DiscreteAccessoryTypeTensioningEquipment.RatioOfWireTension[Type]\tNUMBER\t\t200\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td034f492-4843-497d-ad32-22dc02f290e7\tPset_DiscreteAccessoryTypeTensioningEquipment.ReferenceEnvironmentTemperature[Type]\tMULTILINETEXT\t\t200\t1\tPropertyBoundedValue\t1\nPARAM\tc04a1715-4e43-4f20-b05c-2d946550412b\tPset_DiscreteAccessoryTypeTensioningEquipment.TensileStrength[Type]\tNUMBER\t\t200\t1\tIfcPressureMeasure\t1\nPARAM\tfee52eaf-6fce-4900-a688-872e664606ec\tPset_DiscreteAccessoryTypeTensioningEquipment.TransmissionEfficiency[Type]\tNUMBER\t\t200\t1\tIfcRatioMeasure\t1\n#\nGROUP\t201\tPset_DiscreteAccessoryWireLoop\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t29e76998-1630-41e7-ba8f-103fdda8cef6\tPset_DiscreteAccessoryWireLoop.WireDiameter[Type]\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t885c6bab-d4ca-4367-ad58-dff9b7f9ad4c\tPset_DiscreteAccessoryWireLoop.WireEmbeddingLength[Type]\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf1f4e36b-f70f-43b0-bfc2-2a4ba541d8dd\tPset_DiscreteAccessoryWireLoop.WireLoopBasePlateLength[Type]\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfdc96e98-9ddf-4b76-b81a-65e7dfa036d8\tPset_DiscreteAccessoryWireLoop.WireLoopBasePlateThickness[Type]\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5c6d63c1-5293-492d-b404-e4458bec2724\tPset_DiscreteAccessoryWireLoop.WireLoopBasePlateWidth[Type]\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tccd009f2-142c-4909-b63e-8d382ed9dd07\tPset_DiscreteAccessoryWireLoop.WireLoopLength[Type]\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t202\tPset_DistributionBoardOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t69daeacb-ea31-4bae-a2ac-7696893d1043\tPset_DistributionBoardOccurrence.IsMain[Type]\tYESNO\t\t202\t1\tIfcBoolean\t1\nPARAM\t6729af6a-2cf8-4777-b1b8-d057b88040fa\tPset_DistributionBoardOccurrence.IsSkilledOperator[Type]\tYESNO\t\t202\t1\tIfcBoolean\t1\n#\nGROUP\t203\tPset_DistributionBoardTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t080336e3-a0ee-4713-86a3-1d76edf9371a\tPset_DistributionBoardTypeCommon.Reference[Type]\tTEXT\t\t203\t1\tIfcIdentifier\t1\nPARAM\tafbb6801-d2dc-4374-b92f-65bfbab14aa7\tPset_DistributionBoardTypeCommon.Status[Type]\tTEXT\t\t203\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t204\tPset_DistributionBoardTypeDispatchingBoard\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t96622c5c-389b-49e2-8863-b2e1b0d1e368\tPset_DistributionBoardTypeDispatchingBoard.DispatchingBoardType[Type]\tTEXT\t\t204\t1\tPEnum_DispatchingBoardType\t1\nPARAM\t56948e51-8caa-49c1-ab71-0c623a92e556\tPset_DistributionBoardTypeDispatchingBoard.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t204\t1\tPropertyTableValue\t1\n#\nGROUP\t205\tPset_DistributionBoardTypeDistributionFrame\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t30c3f3ec-8391-488a-9b34-9dccdb711610\tPset_DistributionBoardTypeDistributionFrame.PortCapacity[Type]\tINTEGER\t\t205\t1\tIfcInteger\t1\n#\nGROUP\t206\tPset_DistributionChamberElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9148c3d0-f1e1-4d72-8ed2-01b02a87c4cd\tPset_DistributionChamberElementCommon.Reference[Type]\tTEXT\t\t206\t1\tIfcIdentifier\t1\nPARAM\tcc0fb29c-1b83-4852-84fe-8763981d39d5\tPset_DistributionChamberElementCommon.Status[Type]\tTEXT\t\t206\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t207\tPset_DistributionChamberElementTypeFormedDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb0d98606-7dd1-429a-b39f-16104329a3aa\tPset_DistributionChamberElementTypeFormedDuct.AccessCoverLoadRating[Type]\tTEXT\t\t207\t1\tIfcText\t1\nPARAM\t99bcc75a-2d80-47d6-ab30-5928eef89405\tPset_DistributionChamberElementTypeFormedDuct.AccessCoverMaterial[Type]\tMULTILINETEXT\t\t207\t1\tIfcMaterial\t1\nPARAM\t83549367-b305-4d9d-bcb1-ac69b7a33c26\tPset_DistributionChamberElementTypeFormedDuct.BaseMaterial[Type]\tMULTILINETEXT\t\t207\t1\tIfcMaterial\t1\nPARAM\tb01853c3-449c-472b-878d-d3f648b5dbdd\tPset_DistributionChamberElementTypeFormedDuct.BaseThickness[Type]\tLENGTH\t\t207\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5e80f154-a6b1-4d8d-97af-6deea42b120d\tPset_DistributionChamberElementTypeFormedDuct.CableDuctOccupancyRatio[Type]\tNUMBER\t\t207\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tb77fb473-2963-4490-9928-7d975775efd2\tPset_DistributionChamberElementTypeFormedDuct.ClearDepth[Type]\tLENGTH\t\t207\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t48c8da5a-6d42-4332-b428-5c0eb82f8f36\tPset_DistributionChamberElementTypeFormedDuct.ClearWidth[Type]\tLENGTH\t\t207\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9406dbf1-4bc7-4096-b819-8e294acb2c89\tPset_DistributionChamberElementTypeFormedDuct.FillMaterial[Type]\tMULTILINETEXT\t\t207\t1\tIfcMaterial\t1\nPARAM\tfde71a93-a6ba-41ec-85ba-aedcd692adfe\tPset_DistributionChamberElementTypeFormedDuct.WallMaterial[Type]\tMULTILINETEXT\t\t207\t1\tIfcMaterial\t1\nPARAM\t7ec24108-734d-4557-9f6c-9e573ea3cbdb\tPset_DistributionChamberElementTypeFormedDuct.WallThickness[Type]\tLENGTH\t\t207\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t208\tPset_DistributionChamberElementTypeInspectionChamber\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb533b8b2-a3e1-47d5-91a1-827e11d1727e\tPset_DistributionChamberElementTypeInspectionChamber.AccessCoverLoadRating[Type]\tTEXT\t\t208\t1\tIfcText\t1\nPARAM\te7af183a-fa13-4c63-84ea-0f596061b2c1\tPset_DistributionChamberElementTypeInspectionChamber.AccessCoverMaterial[Type]\tMULTILINETEXT\t\t208\t1\tIfcMaterialDefinition\t1\nPARAM\ta24b7fa1-e447-404c-85de-78ada7e9ad49\tPset_DistributionChamberElementTypeInspectionChamber.AccessLengthOrRadius[Type]\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3ec70e2b-fe83-4d32-8e48-8cf3828cb813\tPset_DistributionChamberElementTypeInspectionChamber.AccessWidth[Type]\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta419a033-3265-42ae-98db-d2a740594bba\tPset_DistributionChamberElementTypeInspectionChamber.BaseMaterial[Type]\tMULTILINETEXT\t\t208\t1\tIfcMaterialDefinition\t1\nPARAM\t55e26eaf-4fd4-4d88-ab64-49c832affef5\tPset_DistributionChamberElementTypeInspectionChamber.BaseThickness[Type]\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8a9baf98-711d-4e4d-ab4e-ca5027e067f9\tPset_DistributionChamberElementTypeInspectionChamber.ChamberLengthOrRadius[Type]\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb56952e6-b030-4ab1-acb2-e0ea871454e7\tPset_DistributionChamberElementTypeInspectionChamber.ChamberWidth[Type]\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfd45b1bb-eeb5-4a08-ac03-1c62e43dc8ce\tPset_DistributionChamberElementTypeInspectionChamber.InspectionChamberInvertLevel[Type]\tLENGTH\t\t208\t1\tIfcLengthMeasure\t1\nPARAM\t84f9c748-b131-4852-a71d-18c7ee7533c2\tPset_DistributionChamberElementTypeInspectionChamber.InvertLevel[Type]\tLENGTH\t\t208\t1\tIfcLengthMeasure\t1\nPARAM\te9b7ee54-bd19-4099-a0e6-e2351707f810\tPset_DistributionChamberElementTypeInspectionChamber.SoffitLevel[Type]\tLENGTH\t\t208\t1\tIfcLengthMeasure\t1\nPARAM\t5ff6395d-86ff-4f82-9b11-b3813684bb57\tPset_DistributionChamberElementTypeInspectionChamber.WallMaterial[Type]\tMULTILINETEXT\t\t208\t1\tIfcMaterialDefinition\t1\nPARAM\td24d6e2c-7904-41df-adf9-60b692a54453\tPset_DistributionChamberElementTypeInspectionChamber.WallThickness[Type]\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9551e8dd-5dc4-49c0-88e7-43be39bca685\tPset_DistributionChamberElementTypeInspectionChamber.WithBackdrop[Type]\tYESNO\t\t208\t1\tIfcBoolean\t1\n#\nGROUP\t209\tPset_DistributionChamberElementTypeInspectionPit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t62354e78-f090-424a-b8c4-7a4b1cc92228\tPset_DistributionChamberElementTypeInspectionPit.Depth[Type]\tLENGTH\t\t209\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1cec024d-f759-4c73-aecb-5f3a9e4e28b7\tPset_DistributionChamberElementTypeInspectionPit.Length[Type]\tLENGTH\t\t209\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdbaccebf-a9dc-41af-9109-d42fa4d9700c\tPset_DistributionChamberElementTypeInspectionPit.Width[Type]\tLENGTH\t\t209\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t210\tPset_DistributionChamberElementTypeManhole\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t10d284f7-5e61-415b-9845-53d02edca75e\tPset_DistributionChamberElementTypeManhole.AccessCoverLoadRating[Type]\tTEXT\t\t210\t1\tIfcText\t1\nPARAM\t4d93d457-73b4-4c9e-b1ba-db22f1fcfde6\tPset_DistributionChamberElementTypeManhole.AccessCoverMaterial[Type]\tMULTILINETEXT\t\t210\t1\tIfcMaterialDefinition\t1\nPARAM\t170d8776-3855-4631-ad75-1dc123404d1c\tPset_DistributionChamberElementTypeManhole.AccessLengthOrRadius[Type]\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0db792af-1d04-4b10-89ef-afdbbe12bfec\tPset_DistributionChamberElementTypeManhole.AccessWidth[Type]\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t24d4319e-70f7-4bd9-a7df-06aa6b053fa2\tPset_DistributionChamberElementTypeManhole.BaseMaterial[Type]\tMULTILINETEXT\t\t210\t1\tIfcMaterialDefinition\t1\nPARAM\t7068d4c1-0d0a-4932-9008-bd7a501cda90\tPset_DistributionChamberElementTypeManhole.BaseThickness[Type]\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8f54d3b6-0fb9-4c8f-8eac-38a04cd2666c\tPset_DistributionChamberElementTypeManhole.HasSteps[Type]\tYESNO\t\t210\t1\tIfcBoolean\t1\nPARAM\t242c650d-ebb2-41bc-829d-fccf259847ea\tPset_DistributionChamberElementTypeManhole.InvertLevel[Type]\tLENGTH\t\t210\t1\tIfcLengthMeasure\t1\nPARAM\t5c9669c5-f65d-4551-87e2-13a37950bca1\tPset_DistributionChamberElementTypeManhole.IsAccessibleOnFoot[Type]\tYESNO\t\t210\t1\tIfcBoolean\t1\nPARAM\t0c80f83f-b24b-4f6b-b379-c2c8b6446525\tPset_DistributionChamberElementTypeManhole.IsLocked[Type]\tYESNO\t\t210\t1\tIfcBoolean\t1\nPARAM\tf566044f-2b6a-492a-b119-1956a0628e60\tPset_DistributionChamberElementTypeManhole.IsShallow[Type]\tYESNO\t\t210\t1\tIfcBoolean\t1\nPARAM\t3fe351cc-eedd-44d1-b846-6c9e0b030571\tPset_DistributionChamberElementTypeManhole.NumberOfCableEntries[Type]\tINTEGER\t\t210\t1\tIfcCountMeasure\t1\nPARAM\tad6ee361-df0d-4be6-a610-a493303cd68f\tPset_DistributionChamberElementTypeManhole.NumberOfManholeCovers[Type]\tINTEGER\t\t210\t1\tIfcCountMeasure\t1\nPARAM\t02edc0ed-6457-4803-b2ad-d8cdd37a416b\tPset_DistributionChamberElementTypeManhole.SoffitLevel[Type]\tLENGTH\t\t210\t1\tIfcLengthMeasure\t1\nPARAM\t74d7f6c2-11a7-49f4-8649-fbcd057e0528\tPset_DistributionChamberElementTypeManhole.TypeOfShaft[Type]\tTEXT\t\t210\t1\tPEnum_TypeOfShaft\t1\nPARAM\t651f0061-5e43-43fe-8f91-d328d6f20587\tPset_DistributionChamberElementTypeManhole.WallMaterial[Type]\tMULTILINETEXT\t\t210\t1\tIfcMaterialDefinition\t1\nPARAM\t3e25578c-4b86-459c-8997-6e21f8058bd3\tPset_DistributionChamberElementTypeManhole.WallThickness[Type]\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9e7ee5d4-31f4-4e85-befe-822d25179d93\tPset_DistributionChamberElementTypeManhole.WithBackdrop[Type]\tYESNO\t\t210\t1\tIfcBoolean\t1\n#\nGROUP\t211\tPset_DistributionChamberElementTypeMeterChamber\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6ae860db-c1a0-4ad4-b798-3a3eb65a0816\tPset_DistributionChamberElementTypeMeterChamber.AccessCoverMaterial[Type]\tMULTILINETEXT\t\t211\t1\tIfcMaterialDefinition\t1\nPARAM\t9b0b1cb8-283f-4fa5-b76e-3f89965f99af\tPset_DistributionChamberElementTypeMeterChamber.BaseMaterial[Type]\tMULTILINETEXT\t\t211\t1\tIfcMaterialDefinition\t1\nPARAM\tb69c06ee-24c6-4bd3-a458-c342e205da0d\tPset_DistributionChamberElementTypeMeterChamber.BaseThickness[Type]\tLENGTH\t\t211\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta949a17d-701e-4d68-bf0c-da2fa721017d\tPset_DistributionChamberElementTypeMeterChamber.ChamberLengthOrRadius[Type]\tLENGTH\t\t211\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6249991a-d3fe-40c7-b818-c0097dede054\tPset_DistributionChamberElementTypeMeterChamber.ChamberWidth[Type]\tLENGTH\t\t211\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tab71c12b-c98b-445c-8174-24067b76d731\tPset_DistributionChamberElementTypeMeterChamber.WallMaterial[Type]\tMULTILINETEXT\t\t211\t1\tIfcMaterialDefinition\t1\nPARAM\tf11022f8-5c78-471e-991b-f9bda4109d75\tPset_DistributionChamberElementTypeMeterChamber.WallThickness[Type]\tLENGTH\t\t211\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t212\tPset_DistributionChamberElementTypeSump\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a2a9e70-2c99-44a7-bf86-0821e418d778\tPset_DistributionChamberElementTypeSump.InvertLevel[Type]\tLENGTH\t\t212\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t424cc8ad-301a-4b25-939f-e087baff3301\tPset_DistributionChamberElementTypeSump.Length[Type]\tLENGTH\t\t212\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc8c50465-8c0e-410a-8b6c-849d725a5f74\tPset_DistributionChamberElementTypeSump.SumpInvertLevel[Type]\tLENGTH\t\t212\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3447bdb0-2f59-41da-aa0b-a9dfad6a9008\tPset_DistributionChamberElementTypeSump.Width[Type]\tLENGTH\t\t212\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t213\tPset_DistributionChamberElementTypeTrench\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t857d0e00-bda7-4d55-89ef-7d9006f54158\tPset_DistributionChamberElementTypeTrench.Depth[Type]\tLENGTH\t\t213\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t866b954b-d05f-4ef7-b0af-2d3075dfe1e5\tPset_DistributionChamberElementTypeTrench.InvertLevel[Type]\tLENGTH\t\t213\t1\tIfcLengthMeasure\t1\nPARAM\tb5b3fe4e-f29a-4d10-bec3-33f20997756c\tPset_DistributionChamberElementTypeTrench.Width[Type]\tLENGTH\t\t213\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t214\tPset_DistributionChamberElementTypeValveChamber\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc3539453-466b-4572-b703-214e2b8a7e56\tPset_DistributionChamberElementTypeValveChamber.AccessCoverMaterial[Type]\tMULTILINETEXT\t\t214\t1\tIfcMaterialDefinition\t1\nPARAM\tc91fa953-d072-47f8-9a52-b9821632f1fc\tPset_DistributionChamberElementTypeValveChamber.BaseMaterial[Type]\tMULTILINETEXT\t\t214\t1\tIfcMaterialDefinition\t1\nPARAM\t5da08cfe-3e7b-4387-9cbc-56c9cc3f6ca7\tPset_DistributionChamberElementTypeValveChamber.BaseThickness[Type]\tLENGTH\t\t214\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9207e0b0-45ec-479f-a73c-214fdd482e3d\tPset_DistributionChamberElementTypeValveChamber.ChamberLengthOrRadius[Type]\tLENGTH\t\t214\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc88cbade-d3ff-4efb-b0c4-e3474542d7a6\tPset_DistributionChamberElementTypeValveChamber.ChamberWidth[Type]\tLENGTH\t\t214\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8ecc6bba-2abe-4d2e-9d45-c40af0b2df2b\tPset_DistributionChamberElementTypeValveChamber.WallMaterial[Type]\tMULTILINETEXT\t\t214\t1\tIfcMaterialDefinition\t1\nPARAM\t7dc6e615-b3df-48e1-966d-250ac43542eb\tPset_DistributionChamberElementTypeValveChamber.WallThickness[Type]\tLENGTH\t\t214\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t215\tPset_DistributionFlowElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t57013d45-6177-4726-a03d-bc1d5f0f4dde\tPset_DistributionFlowElementCommon.Reference[Type]\tTEXT\t\t215\t1\tIfcIdentifier\t1\n#\nGROUP\t216\tPset_DistributionPortCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0fb5d1b3-8009-4300-ab87-aeca3a2a380c\tPset_DistributionPortCommon.ColorCode[Type]\tTEXT\t\t216\t1\tIfcLabel\t1\nPARAM\tba44f29a-9c4f-4ec4-8870-7ab4ca683d17\tPset_DistributionPortCommon.ColourCode[Type]\tTEXT\t\t216\t1\tIfcLabel\t1\nPARAM\t08c219ca-a8ee-46d1-82b1-a6567f666121\tPset_DistributionPortCommon.PortNumber[Type]\tINTEGER\t\t216\t1\tIfcInteger\t1\n#\nGROUP\t217\tPset_DistributionPortDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td3a37456-81b8-4d22-ac49-4fbbd99bf7d1\tPset_DistributionPortDuct.ConnectionType[Type]\tTEXT\t\t217\t1\tPEnum_DuctConnectionType\t1\nPARAM\t6039502e-a7ae-46d3-b294-21e85e295cc4\tPset_DistributionPortDuct.PortNumber[Type]\tINTEGER\t\t217\t1\tIfcInteger\t1\n#\nGROUP\t218\tPset_DistributionPortPHistoryCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf0bac08a-24fa-418a-922f-89b2fea4ae87\tPset_DistributionPortPHistoryCable.ApparentPower[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\tcfac59db-0df3-4fc7-a2fb-e2ae36047243\tPset_DistributionPortPHistoryCable.Current[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\te3ab23b7-4fe1-4763-a065-a78e5bb38c95\tPset_DistributionPortPHistoryCable.CurrentHistory[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\t3a3842e5-edfb-4143-91df-102f7add699a\tPset_DistributionPortPHistoryCable.DataReceived[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\t44b0938f-534a-476b-a406-88dd128deb92\tPset_DistributionPortPHistoryCable.DataTransmitted[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\tb0ebbcac-1952-492f-84c2-226367cb9aa5\tPset_DistributionPortPHistoryCable.PowerFactor[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\tebaa7492-1142-469f-9ff6-108c77741ce9\tPset_DistributionPortPHistoryCable.PowerFactorHistory[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\t55631007-91a8-4edd-941d-dd9e36ef893e\tPset_DistributionPortPHistoryCable.ReactivePower[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\te928309d-546a-455a-9e02-0453706ccac5\tPset_DistributionPortPHistoryCable.RealPower[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\t4833d673-8c3f-4433-afd3-a54c01c4bd9c\tPset_DistributionPortPHistoryCable.Voltage[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\td4b46a16-3c3d-49e1-8b1a-0f7bc9432c91\tPset_DistributionPortPHistoryCable.VoltageHistory[Type]\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\n#\nGROUP\t219\tPset_DistributionPortPHistoryDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbe90bd2d-108e-466e-92a0-a7cc962b9340\tPset_DistributionPortPHistoryDuct.FlowCondition[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\tb286ae94-e43a-4044-a2b5-fc7d0c2e782f\tPset_DistributionPortPHistoryDuct.FlowConditionHistory[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\tcee8b8d0-9e2f-4ab4-bc4e-609bc3717a96\tPset_DistributionPortPHistoryDuct.MassFlowRate[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\tefe6db87-ab73-4d3d-9dcb-c4230851678e\tPset_DistributionPortPHistoryDuct.MassFlowRateHistory[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t28b65c01-d098-4403-8a1c-97cd63fd0f71\tPset_DistributionPortPHistoryDuct.Pressure[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t73859108-3e72-4a41-ab86-54c968b84a89\tPset_DistributionPortPHistoryDuct.PressureHisotry[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t65a574d8-a5bb-484e-89e6-ed3d573269d0\tPset_DistributionPortPHistoryDuct.Temperature[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t77728140-029b-418b-8947-97b462bbd7d1\tPset_DistributionPortPHistoryDuct.TemperatureHistory[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t93b06102-3541-4b65-8da6-335c500778a3\tPset_DistributionPortPHistoryDuct.Velocity[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\tcbae79f7-8c96-4ed1-8a24-4c3058ad77fd\tPset_DistributionPortPHistoryDuct.VelocityHistory[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\te1f37d89-2b0e-4ec0-ad99-2be710d02b14\tPset_DistributionPortPHistoryDuct.VolumetricFlowRate[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\td17ff301-809a-4dfe-8bda-cedf902ec6ce\tPset_DistributionPortPHistoryDuct.VolumetricFlowRateHistory[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\te47963a0-9f72-49af-96e6-74baae23372a\tPset_DistributionPortPHistoryDuct.WetBulbTemperature[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t18086b37-c7ab-4b70-9dc9-02901ca59d65\tPset_DistributionPortPHistoryDuct.WetBulbTemperatureHistory[Type]\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\n#\nGROUP\t220\tPset_DistributionPortPHistoryPipe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5cefa330-874c-41e1-a598-f2850f3e0b6f\tPset_DistributionPortPHistoryPipe.Flowrate[Type]\tMULTILINETEXT\t\t220\t1\tIfcTimeSeries\t1\nPARAM\tee9479eb-c314-4aea-8b7c-73f57e80e385\tPset_DistributionPortPHistoryPipe.Pressure[Type]\tMULTILINETEXT\t\t220\t1\tIfcTimeSeries\t1\nPARAM\t89f0e25c-364d-45b8-b8b0-ae24ffe80ad3\tPset_DistributionPortPHistoryPipe.Temperature[Type]\tMULTILINETEXT\t\t220\t1\tIfcTimeSeries\t1\n#\nGROUP\t221\tPset_DistributionPortPipe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te78fecda-1389-4584-86b5-154d7ba951dc\tPset_DistributionPortPipe.ConnectionType[Type]\tTEXT\t\t221\t1\tPEnum_PipeEndStyleTreatment\t1\nPARAM\tfaf60ebb-0172-4ace-a754-bf94be5de6c8\tPset_DistributionPortPipe.EndStyleTreatment[Type]\tTEXT\t\t221\t1\tPEnum_PipeEndStyleTreatment\t1\nPARAM\td9c6fc08-e5a1-41e7-8c0e-47f126e03127\tPset_DistributionPortPipe.PortNumber[Type]\tINTEGER\t\t221\t1\tIfcInteger\t1\n#\nGROUP\t222\tPset_DistributionPortTypeCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7f5a8ec4-00c8-4399-a082-b17a7d0bff12\tPset_DistributionPortTypeCable.ConductorFunction[Type]\tTEXT\t\t222\t1\tPEnum_ConductorFunctionEnum\t1\nPARAM\t39fd67c1-bc73-4097-a622-93697c4bbaa9\tPset_DistributionPortTypeCable.ConnectionGender[Type]\tTEXT\t\t222\t1\tPEnum_DistributionPortGender\t1\nPARAM\t396f13a9-9cfb-475d-915d-f931e5d7ad77\tPset_DistributionPortTypeCable.ConnectionSubtype[Type]\tTEXT\t\t222\t1\tIfcLabel\t1\nPARAM\t33479869-1283-4131-bc49-d562c5ce2ef9\tPset_DistributionPortTypeCable.ConnectionType[Type]\tTEXT\t\t222\t1\tPEnum_DistributionPortElectricalType\t1\nPARAM\te3fe803c-a371-4e2e-838a-3202240acbba\tPset_DistributionPortTypeCable.Current[Type]\tMULTILINETEXT\t\t222\t1\tPropertyBoundedValue\t1\nPARAM\tea33278d-f60b-43e3-9154-132493740b7a\tPset_DistributionPortTypeCable.CurrentContent3rdHarmonic[Type]\tNUMBER\t\t222\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tddbe5449-2b74-4a9d-b666-cdadc1c5195b\tPset_DistributionPortTypeCable.ElectricalConnectionType[Type]\tTEXT\t\t222\t1\tPEnum_DistributionPortElectricalType\t1\nPARAM\t06198aa8-43cf-4b69-ae29-5da622d848e4\tPset_DistributionPortTypeCable.HasConnector[Type]\tYESNO\t\t222\t1\tIfcBoolean\t1\nPARAM\t25604e76-a512-4b1a-9118-f175c20e84a5\tPset_DistributionPortTypeCable.IsWelded[Type]\tYESNO\t\t222\t1\tIfcBoolean\t1\nPARAM\t2c81ce5a-8442-4156-873a-80fb3a9151c7\tPset_DistributionPortTypeCable.Power[Type]\tMULTILINETEXT\t\t222\t1\tPropertyBoundedValue\t1\nPARAM\td63099bd-6c30-48d9-a8c0-5ff03c725f9b\tPset_DistributionPortTypeCable.Protocols[Type]\tMULTILINETEXT\t\t222\t1\tPropertyListValue\t1\nPARAM\t1861522f-30b5-468d-8a69-02e3f4e9342c\tPset_DistributionPortTypeCable.Voltage[Type]\tMULTILINETEXT\t\t222\t1\tPropertyBoundedValue\t1\n#\nGROUP\t223\tPset_DistributionPortTypeDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t75636ef6-a665-43ea-8ed4-016116b8ba34\tPset_DistributionPortTypeDuct.ConnectionSubtype[Type]\tTEXT\t\t223\t1\tIfcLabel\t1\nPARAM\t9c0ef7ac-4ade-4baa-a08c-fe08b2556309\tPset_DistributionPortTypeDuct.ConnectionSubType[Type]\tTEXT\t\t223\t1\tIfcLabel\t1\nPARAM\t20f8b2d2-a41f-49b1-a023-9a725c45403c\tPset_DistributionPortTypeDuct.ConnectionType[Type]\tTEXT\t\t223\t1\tPEnum_DuctConnectionType\t1\nPARAM\t53fd2786-cf81-46cb-9be3-2126e2310fe6\tPset_DistributionPortTypeDuct.DryBulbTemperature[Type]\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\nPARAM\t3adbc835-1671-4bb5-bdce-33a40045f934\tPset_DistributionPortTypeDuct.NominalHeight[Type]\tLENGTH\t\t223\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2f08b9bc-af5c-4138-b80a-f3ca52fa9658\tPset_DistributionPortTypeDuct.NominalThickness[Type]\tLENGTH\t\t223\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t545ee1a8-6f4a-474c-a493-ebaa14ece977\tPset_DistributionPortTypeDuct.NominalWidth[Type]\tLENGTH\t\t223\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t5e803a97-37d5-4c51-b46a-47c8389fc5d1\tPset_DistributionPortTypeDuct.Pressure[Type]\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\nPARAM\t369c06fb-6a3b-41d4-8cff-3c694a2c403f\tPset_DistributionPortTypeDuct.Velocity[Type]\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\nPARAM\t56b2e6fc-bdaf-411a-a65b-22d0e2dac283\tPset_DistributionPortTypeDuct.VolumetricFlowRate[Type]\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\nPARAM\t931b348a-45fb-4e3a-8fb9-588bfc7d8e52\tPset_DistributionPortTypeDuct.WetBulbTemperature[Type]\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\n#\nGROUP\t224\tPset_DistributionPortTypePipe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t25680a15-02b7-4e5e-bbab-0b96f33bcb7d\tPset_DistributionPortTypePipe.ConnectionSubtype[Type]\tTEXT\t\t224\t1\tIfcLabel\t1\nPARAM\tef756caf-c299-49ee-9117-a1efc7e0c222\tPset_DistributionPortTypePipe.ConnectionSubType[Type]\tTEXT\t\t224\t1\tIfcLabel\t1\nPARAM\t6b056e4f-8189-46e4-bad5-afe778777e7f\tPset_DistributionPortTypePipe.ConnectionType[Type]\tTEXT\t\t224\t1\tPEnum_PipeEndStyleTreatment\t1\nPARAM\t075ef00f-cdfb-4f52-a888-6b7426f9c50c\tPset_DistributionPortTypePipe.FlowCondition[Type]\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\nPARAM\tf28386d6-5913-45f5-af79-623ed16030c2\tPset_DistributionPortTypePipe.InnerDiameter[Type]\tLENGTH\t\t224\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t25682114-5290-4d5a-a2dc-4bcdfcaa9841\tPset_DistributionPortTypePipe.MassFlowRate[Type]\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\nPARAM\td1aa4ae2-bd9c-4293-b6cb-e9073fb8e269\tPset_DistributionPortTypePipe.NominalDiameter[Type]\tLENGTH\t\t224\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta8e221f8-8965-4cb2-95b1-38f0e52cb805\tPset_DistributionPortTypePipe.OuterDiameter[Type]\tLENGTH\t\t224\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t70fcb981-199a-4971-99d1-9b41edd7f364\tPset_DistributionPortTypePipe.Pressure[Type]\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\nPARAM\t36694a66-8529-404a-b7c2-62143d3c082c\tPset_DistributionPortTypePipe.Temperature[Type]\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\nPARAM\t23086cd6-61d3-45a6-a1fb-63ad97a9e91b\tPset_DistributionPortTypePipe.Velocity[Type]\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\nPARAM\te767f60f-5758-46b5-8c00-5cb9d3feec7c\tPset_DistributionPortTypePipe.VolumetricFlowRate[Type]\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\n#\nGROUP\t225\tPset_DistributionSystemCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta5df59f2-6b5c-4250-894a-76428ca64b68\tPset_DistributionSystemCommon.Reference[Type]\tTEXT\t\t225\t1\tIfcIdentifier\t1\n#\nGROUP\t226\tPset_DistributionSystemTypeElectrical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t066c1e77-8ec0-4d00-94a9-2f00ab621689\tPset_DistributionSystemTypeElectrical.Diversity[Type]\tNUMBER\t\t226\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6eeaa5b8-42e4-4dbe-b965-29b6cbf35be6\tPset_DistributionSystemTypeElectrical.ElectricalSystemCategory[Type]\tTEXT\t\t226\t1\tPEnum_DistributionSystemElectricalCategory\t1\nPARAM\ta3946934-fdca-4644-917a-28250bd1a3c3\tPset_DistributionSystemTypeElectrical.ElectricalSystemType[Type]\tTEXT\t\t226\t1\tPEnum_DistributionSystemElectricalType\t1\nPARAM\t52fc5d10-4466-4c6b-8b75-7c470a55438c\tPset_DistributionSystemTypeElectrical.MaximumAllowedVoltageDrop[Type]\tNUMBER\t\t226\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t61012002-c898-46ca-847d-1fed8b277e1e\tPset_DistributionSystemTypeElectrical.NetImpedance[Type]\tNUMBER\t\t226\t1\tIfcElectricResistanceMeasure\t1\nPARAM\tc64ca073-5787-4608-896f-f1cb866a711b\tPset_DistributionSystemTypeElectrical.NumberOfLiveConductors[Type]\tINTEGER\t\t226\t1\tIfcCountMeasure\t1\nPARAM\t0e9faea9-b338-48c5-ab36-aa4812d4c19a\tPset_DistributionSystemTypeElectrical.RatedVoltageRange[Type]\tMULTILINETEXT\t\t226\t1\tPropertyBoundedValue\t1\n#\nGROUP\t227\tPset_DistributionSystemTypeOverheadContactlineSystem\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3c8d4a59-7562-4017-9b2f-387184de5b9e\tPset_DistributionSystemTypeOverheadContactlineSystem.ContactWireNominalDrop[Type]\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t30b945c5-4e49-426c-bfeb-ea897e1eee81\tPset_DistributionSystemTypeOverheadContactlineSystem.ContactWireNominalHeight[Type]\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4b8b0ec6-4cc9-4c40-99d2-087f5d9b8a75\tPset_DistributionSystemTypeOverheadContactlineSystem.ContactWireStagger[Type]\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfff4a909-6a07-49ba-a380-4910fb2d361c\tPset_DistributionSystemTypeOverheadContactlineSystem.ContactWireUplift[Type]\tLENGTH\t\t227\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t5f9fa328-5f0c-497d-b0e3-f9c1ed73f7bf\tPset_DistributionSystemTypeOverheadContactlineSystem.ElectricalClearance[Type]\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t350524c4-e4b7-4113-9103-6e2521630e16\tPset_DistributionSystemTypeOverheadContactlineSystem.NumberOfOverlappingSpans[Type]\tINTEGER\t\t227\t1\tIfcCountMeasure\t1\nPARAM\tcf027a50-ac48-4e36-b8a2-78cd785aa003\tPset_DistributionSystemTypeOverheadContactlineSystem.OCSType[Type]\tTEXT\t\t227\t1\tPEnum_OverheadContactLineType\t1\nPARAM\t78d9ea3b-6389-48d6-913c-d0f2a474ca35\tPset_DistributionSystemTypeOverheadContactlineSystem.PantographType[Type]\tTEXT\t\t227\t1\tIfcLabel\t1\nPARAM\tb87f0ccd-df6f-490b-8bf2-596eea12bf4e\tPset_DistributionSystemTypeOverheadContactlineSystem.PressureRange[Type]\tMULTILINETEXT\t\t227\t1\tPropertyBoundedValue\t1\nPARAM\t447a7d60-b05c-4b6e-90ef-f05d811c1006\tPset_DistributionSystemTypeOverheadContactlineSystem.SpanNominalLength[Type]\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc1968c43-5304-4224-aeed-6b7cb185f84a\tPset_DistributionSystemTypeOverheadContactlineSystem.TensionLength[Type]\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t228\tPset_DistributionSystemTypeVentilation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2e96fd82-0587-4325-a6cc-d1a11e0015ee\tPset_DistributionSystemTypeVentilation.AspectRatio[Type]\tNUMBER\t\t228\t1\tIfcReal\t1\nPARAM\t331cea9f-8f1a-4837-be14-f5b2daf93974\tPset_DistributionSystemTypeVentilation.DesignName[Type]\tTEXT\t\t228\t1\tIfcLabel\t1\nPARAM\t79b5fb0c-5581-41a2-87d2-c16588f6cc76\tPset_DistributionSystemTypeVentilation.DuctSealant[Type]\tMULTILINETEXT\t\t228\t1\tIfcMaterialDefinition\t1\nPARAM\t0a8f9307-4c9a-4a74-bf9d-8a0b69f4fdc3\tPset_DistributionSystemTypeVentilation.DuctSizingMethod[Type]\tTEXT\t\t228\t1\tPEnum_DuctSizingMethod\t1\nPARAM\tbe55af03-a24f-442a-98e8-a48fcbd23b7d\tPset_DistributionSystemTypeVentilation.FrictionLoss[Type]\tNUMBER\t\t228\t1\tIfcReal\t1\nPARAM\t91b45e1d-0158-4c40-98ac-237d2523ac03\tPset_DistributionSystemTypeVentilation.LeakageClass[Type]\tNUMBER\t\t228\t1\tIfcPressureMeasure\t1\nPARAM\t95d5a2bb-673c-42d7-8061-36a0f0ef1462\tPset_DistributionSystemTypeVentilation.MaximumVelocity[Type]\tNUMBER\t\t228\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t62c5a9a3-07c0-4597-bbc2-990121a93faf\tPset_DistributionSystemTypeVentilation.MinimumHeight[Type]\tLENGTH\t\t228\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t20fecf23-5139-4960-966d-8d815dc89385\tPset_DistributionSystemTypeVentilation.MinimumWidth[Type]\tLENGTH\t\t228\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4d0be929-35fa-4805-9138-d6aed3a03e83\tPset_DistributionSystemTypeVentilation.PressureClass[Type]\tNUMBER\t\t228\t1\tIfcPressureMeasure\t1\nPARAM\t37084618-6b98-45b3-85a4-8e999d8b4c30\tPset_DistributionSystemTypeVentilation.ScrapFactor[Type]\tNUMBER\t\t228\t1\tIfcReal\t1\n#\nGROUP\t229\tPset_DoorCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9c6ec881-67d5-450c-aeed-a0a631cdec7d\tPset_DoorCommon.AcousticRating[Type]\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\t72102582-da77-44fb-8fef-20402bbf100f\tPset_DoorCommon.DurabilityRating[Type]\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\tbf2ef3f8-780c-4e67-b4d2-4cee7c8f9d40\tPset_DoorCommon.FireExit[Type]\tYESNO\t\t229\t1\tIfcBoolean\t1\nPARAM\t77233658-6c3c-4a87-b870-08adb8c0c2d9\tPset_DoorCommon.FireRating[Type]\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\t6b26c5ab-f480-4a41-a7d3-3bee223f2119\tPset_DoorCommon.GlazingAreaFraction[Type]\tNUMBER\t\t229\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0f164b4b-3709-4c2c-83c4-1afeccd88a74\tPset_DoorCommon.HandicapAccessible[Type]\tYESNO\t\t229\t1\tIfcBoolean\t1\nPARAM\t9a83003b-653d-49b2-babf-003fbfc65fad\tPset_DoorCommon.HasDrive[Type]\tYESNO\t\t229\t1\tIfcBoolean\t1\nPARAM\t0cde6445-82e5-463e-82f5-64f784aa55b8\tPset_DoorCommon.HygrothermalRating[Type]\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\t2274c6a0-71bb-41a3-96d6-228d9dfeb9bc\tPset_DoorCommon.Infiltration[Type]\tNUMBER\t\t229\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\ta12ea2b0-e569-493c-a392-36f16ac0eee3\tPset_DoorCommon.IsExternal[Type]\tYESNO\t\t229\t1\tIfcBoolean\t1\nPARAM\t892200c0-d7a0-405f-9578-9d71d244d28d\tPset_DoorCommon.MechanicalLoadRating[Type]\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\tb9ee9b4a-5dd5-4e8c-ae58-50106167fcd1\tPset_DoorCommon.Reference[Type]\tTEXT\t\t229\t1\tIfcIdentifier\t1\nPARAM\taabb272a-ad9a-4d0b-bec9-d3864d964751\tPset_DoorCommon.SecurityRating[Type]\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\t73681fca-871d-4d6f-a41f-407c06ee84e2\tPset_DoorCommon.SelfClosing[Type]\tYESNO\t\t229\t1\tIfcBoolean\t1\nPARAM\t235db9e0-ffb9-4a8a-9fa6-7fd644900a12\tPset_DoorCommon.SmokeStop[Type]\tYESNO\t\t229\t1\tIfcBoolean\t1\nPARAM\tb3fa161c-5076-4b98-a6ee-c9cd271cf9c5\tPset_DoorCommon.Status[Type]\tTEXT\t\t229\t1\tPEnum_ElementStatus\t1\nPARAM\te029776f-c69c-486e-a946-f1eb1851e6b2\tPset_DoorCommon.ThermalTransmittance[Type]\tNUMBER\t\t229\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\tb38e2262-4207-4dba-89ab-f47a2bcb3d44\tPset_DoorCommon.WaterTightnessRating[Type]\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\t4ce07d1c-93f1-4415-a530-0d137a521b83\tPset_DoorCommon.WindLoadRating[Type]\tTEXT\t\t229\t1\tIfcLabel\t1\n#\nGROUP\t230\tPset_DoorTypeTurnstile\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5c281b21-01e6-4c23-b2e7-2da9c5f82d1d\tPset_DoorTypeTurnstile.IsBidirectional[Type]\tYESNO\t\t230\t1\tIfcBoolean\t1\nPARAM\t08a6eccc-8d7e-40b1-962b-abfcece8d2fe\tPset_DoorTypeTurnstile.NarrowChannelWidth[Type]\tLENGTH\t\t230\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfa229dec-273b-46fb-90cb-c86044866007\tPset_DoorTypeTurnstile.TurnstileType[Type]\tTEXT\t\t230\t1\tPEnum_TurnstileType\t1\nPARAM\t3276e4ab-119b-49e5-9f3a-f94a355519e2\tPset_DoorTypeTurnstile.WideChannelWidth[Type]\tLENGTH\t\t230\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t231\tPset_DoorWindowGlazingType\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcac9e658-704b-443d-a360-4c9cb07c85b9\tPset_DoorWindowGlazingType.BeamRadiationTransmittance[Type]\tNUMBER\t\t231\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t1a15c3d5-2c15-4819-a7cd-5c90c2256303\tPset_DoorWindowGlazingType.FillGas[Type]\tTEXT\t\t231\t1\tIfcLabel\t1\nPARAM\t7b3c4bf5-f414-4bd1-968f-a6c99aea7d9c\tPset_DoorWindowGlazingType.GlassColor[Type]\tTEXT\t\t231\t1\tIfcLabel\t1\nPARAM\tebdd8feb-5d99-4e69-89c1-d3e4911bbfd1\tPset_DoorWindowGlazingType.GlassColour[Type]\tTEXT\t\t231\t1\tIfcLabel\t1\nPARAM\tb7a01d6f-92c4-4763-9abe-e87d687c7041\tPset_DoorWindowGlazingType.GlassLayers[Type]\tINTEGER\t\t231\t1\tIfcCountMeasure\t1\nPARAM\t06c760b4-4828-4bfb-a4c7-8268089421d5\tPset_DoorWindowGlazingType.GlassThickness1[Type]\tLENGTH\t\t231\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3b844e97-0f6f-4d32-a46d-e8c42ee2498a\tPset_DoorWindowGlazingType.GlassThickness2[Type]\tLENGTH\t\t231\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9aecbdc7-9990-4b34-ba23-778981b830d0\tPset_DoorWindowGlazingType.GlassThickness3[Type]\tLENGTH\t\t231\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t65e7e39d-7147-4cbc-ab8c-f1b3a7145454\tPset_DoorWindowGlazingType.IsCoated[Type]\tYESNO\t\t231\t1\tIfcBoolean\t1\nPARAM\t329bddb9-cf88-40b2-9166-1a908c42e15e\tPset_DoorWindowGlazingType.IsLaminated[Type]\tYESNO\t\t231\t1\tIfcBoolean\t1\nPARAM\t06282f88-fc40-415c-9c7a-67db0ad71ee0\tPset_DoorWindowGlazingType.IsTempered[Type]\tYESNO\t\t231\t1\tIfcBoolean\t1\nPARAM\t08fdad02-298d-4267-bee4-96457cf45a75\tPset_DoorWindowGlazingType.IsWired[Type]\tYESNO\t\t231\t1\tIfcBoolean\t1\nPARAM\t46193292-8594-4bef-8f70-f4035add576e\tPset_DoorWindowGlazingType.Reflectivity[Type]\tNUMBER\t\t231\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t5ad9a3da-fa60-4c7d-b4bf-09d8cf9605fb\tPset_DoorWindowGlazingType.ShadingCoefficient[Type]\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t054fde42-346f-4ffc-a021-0685830ff228\tPset_DoorWindowGlazingType.SolarAbsorption[Type]\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tde74293e-e947-4d55-8faf-d68adfa959cc\tPset_DoorWindowGlazingType.SolarHeatGainTransmittance[Type]\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t4f8f7888-53e0-438e-8460-63b061068541\tPset_DoorWindowGlazingType.SolarReflectance[Type]\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t224f3e17-9789-46be-b0cf-680d9eed75a8\tPset_DoorWindowGlazingType.SolarTransmittance[Type]\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tb6ce38b7-e7fc-4d42-a5ed-0500cbc12a32\tPset_DoorWindowGlazingType.ThermalTransmittanceSummer[Type]\tNUMBER\t\t231\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t78170c44-2b3e-48ce-95c5-3a02ff3bfc1a\tPset_DoorWindowGlazingType.ThermalTransmittanceWinter[Type]\tNUMBER\t\t231\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t0398825b-7eca-4f4e-8c72-37996c2e18a9\tPset_DoorWindowGlazingType.Translucency[Type]\tNUMBER\t\t231\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t48c3a2b3-0187-4678-8757-09e4b5f46222\tPset_DoorWindowGlazingType.VisibleLightReflectance[Type]\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\ta456b04e-7bbf-4b7e-a830-9530c4a4c020\tPset_DoorWindowGlazingType.VisibleLightTransmittance[Type]\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t232\tPset_DoorWindowShadingType\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td666a15d-01c4-490c-9720-06c511968ade\tPset_DoorWindowShadingType.ExternalShadingCoefficient[Type]\tNUMBER\t\t232\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t209015ae-e6a2-486f-8a52-3a2f3258c6cd\tPset_DoorWindowShadingType.InsetShadingCoefficient[Type]\tNUMBER\t\t232\t1\tIfcPositiveRatioMeasure \t1\nPARAM\ta71471cd-8db7-4a34-9091-6a4f71d4529d\tPset_DoorWindowShadingType.InternalShadingCoefficient[Type]\tNUMBER\t\t232\t1\tIfcPositiveRatioMeasure \t1\n#\nGROUP\t233\tPset_DrainageCatchment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ted208dbc-df96-41e5-b844-1381cf41559c\tPset_DrainageCatchment.AreaDrained[Type]\tAREA\t\t233\t1\tIfcAreaMeasure\t1\n#\nGROUP\t234\tPset_DrainageCulvert\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te84f03f9-4d90-454f-b98f-63e155248fcc\tPset_DrainageCulvert.ClearDepth[Type]\tLENGTH\t\t234\t1\tIfcLengthMeasure\t1\nPARAM\tb5d9b6e2-b182-4279-a289-860167d3c8c3\tPset_DrainageCulvert.InternalWidth[Type]\tLENGTH\t\t234\t1\tIfcLengthMeasure\t1\n#\nGROUP\t235\tPset_DrainageOutfall\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48d0cf1c-896b-4968-a003-9e5b00fb6b9d\tPset_DrainageOutfall.InvertLevel[Type]\tLENGTH\t\t235\t1\tIfcLengthMeasure\t1\n#\nGROUP\t236\tPset_DrainageReserve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9b006f31-84e1-4112-bcd2-dd5d71ab98f9\tPset_DrainageReserve.Width[Type]\tLENGTH\t\t236\t1\tIfcLengthMeasure\t1\n#\nGROUP\t237\tPset_Draughting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tde13aae4-0fe5-42b5-bc4a-fb7e86f70e18\tPset_Draughting.Colour.Blue[Type]\tINTEGER\t\t237\t1\tIfcInteger\t1\nPARAM\tac554318-e9ea-4694-b740-5b1c4cdbfd0f\tPset_Draughting.Colour.Green[Type]\tINTEGER\t\t237\t1\tIfcInteger\t1\nPARAM\t614e039e-e0e6-417a-bdf0-d42821f6ccf1\tPset_Draughting.Colour.Red[Type]\tINTEGER\t\t237\t1\tIfcInteger\t1\nPARAM\t0a6675d3-5c90-4987-8704-bb082acfc17a\tPset_Draughting.LayerName[Type]\tTEXT\t\t237\t1\tIfcIdentifier\t1\n#\nGROUP\t238\tPset_DuctConnection\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4177439d-4563-477a-899f-85470befb52e\tPset_DuctConnection.ConnectionType[Type]\tMULTILINETEXT\t\t238\t1\tPropertyListValue\t1\n#\nGROUP\t239\tPset_DuctDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t97f994ce-9a6d-4d48-ae7c-c7677a98d701\tPset_DuctDesignCriteria.AspectRatio[Type]\tNUMBER\t\t239\t1\tIfcReal \t1\nPARAM\t59281beb-945f-4cf3-98ff-b9fa031ed4e4\tPset_DuctDesignCriteria.DesignName[Type]\tTEXT\t\t239\t1\tIfcText\t1\nPARAM\t66b2b938-347c-43b5-bb61-b8bc10a5aa85\tPset_DuctDesignCriteria.DuctSealant[Type]\tMULTILINETEXT\t\t239\t1\tIfcMaterial\t1\nPARAM\t9c847acb-6aef-4953-83e9-1ff489298746\tPset_DuctDesignCriteria.DuctSizingMethod[Type]\tTEXT\t\t239\t1\tPEnum_DuctSizingMethod\t1\nPARAM\t78bc71d2-20bb-4c67-8708-bc3c6e50d59b\tPset_DuctDesignCriteria.FrictionLoss[Type]\tNUMBER\t\t239\t1\tIfcReal\t1\nPARAM\tdcb32230-42e2-4b18-9e6d-89621e594cb1\tPset_DuctDesignCriteria.LeakageClass[Type]\tNUMBER\t\t239\t1\tIfcPressureMeasure\t1\nPARAM\t63b04d74-d840-4bf8-a7fe-c0818bc91c89\tPset_DuctDesignCriteria.MaximumVelocity[Type]\tNUMBER\t\t239\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t043ae98f-7e33-4e96-8e48-8d646fc8da4e\tPset_DuctDesignCriteria.MinimumHeight[Type]\tNUMBER\t\t239\t1\tIfcPositiveLengthMeasure \t1\nPARAM\t16407c22-d572-4537-98fd-2f807b59384c\tPset_DuctDesignCriteria.MinimumWidth[Type]\tNUMBER\t\t239\t1\tIfcPositiveLengthMeasure \t1\nPARAM\t1a24842f-d2c0-42ae-bec9-eec1b142428c\tPset_DuctDesignCriteria.PressureClass[Type]\tNUMBER\t\t239\t1\tIfcPressureMeasure\t1\nPARAM\t43218fba-b064-4aee-b8b6-a6a7984a7031\tPset_DuctDesignCriteria.ScrapFactor[Type]\tNUMBER\t\t239\t1\tIfcReal \t1\n#\nGROUP\t240\tPset_DuctFittingOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t51ade7ee-0c3a-4a58-b3eb-b43034ae5b00\tPset_DuctFittingOccurrence.Color[Type]\tTEXT\t\t240\t1\tIfcLabel\t1\nPARAM\t9a1f7f7d-3cf3-4063-a717-ab717cc00d65\tPset_DuctFittingOccurrence.Colour[Type]\tTEXT\t\t240\t1\tIfcLabel\t1\nPARAM\t4b74fe48-7d8f-45f5-9f11-ba6785a75250\tPset_DuctFittingOccurrence.HasLiner[Type]\tYESNO\t\t240\t1\tIfcBoolean\t1\nPARAM\tf9d22678-246e-4407-a435-4de320baf5a8\tPset_DuctFittingOccurrence.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t240\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t241\tPset_DuctFittingPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1de7c5fe-35a5-470c-a52b-13b0339e3282\tPset_DuctFittingPHistory.AirFlowLeakage[Type]\tMULTILINETEXT\t\t241\t1\tIfcTimeSeries\t1\nPARAM\t3281689e-acc6-4448-bf6a-06ad0f72ffae\tPset_DuctFittingPHistory.AtmosphericPressure[Type]\tMULTILINETEXT\t\t241\t1\tIfcTimeSeries\t1\nPARAM\t3bf66679-bb6b-4579-aa70-010f30fa0ac7\tPset_DuctFittingPHistory.LossCoefficient[Type]\tMULTILINETEXT\t\t241\t1\tIfcTimeSeries\t1\n#\nGROUP\t242\tPset_DuctFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0a55b928-19cd-4ffc-805d-cd6f8baa9e11\tPset_DuctFittingTypeCommon.EndStyleTreatment[Type]\tMULTILINETEXT\t\t242\t1\tPropertyListValue\t1\nPARAM\t623a1f68-63e2-4303-a8b4-079aa7f08e30\tPset_DuctFittingTypeCommon.Material[Type]\tMULTILINETEXT\t\t242\t1\tIfcMaterial\t1\nPARAM\tad85c676-22b7-49dc-b143-9fb11c6c7aff\tPset_DuctFittingTypeCommon.MaterialThickness[Type]\tLENGTH\t\t242\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t675dbcaa-e276-458c-93b8-12ab1b02d242\tPset_DuctFittingTypeCommon.NominalDiameterOrWidth[Type]\tMULTILINETEXT\t\t242\t1\tPropertyListValue\t1\nPARAM\t2f4c7ba4-e057-40d2-8d68-58851c6c5ab1\tPset_DuctFittingTypeCommon.NominalHeight[Type]\tMULTILINETEXT\t\t242\t1\tPropertyListValue\t1\nPARAM\t090b1cb2-8e72-4e02-8e9a-8609658aa210\tPset_DuctFittingTypeCommon.PressureClass[Type]\tNUMBER\t\t242\t1\tIfcPressureMeasure\t1\nPARAM\t2ef1ec00-0038-408f-947a-f84aa8321d6f\tPset_DuctFittingTypeCommon.PressureRange[Type]\tMULTILINETEXT\t\t242\t1\tPropertyBoundedValue\t1\nPARAM\tcef58ffd-b676-4402-b505-c81cce3891ea\tPset_DuctFittingTypeCommon.Reference[Type]\tTEXT\t\t242\t1\tIfcIdentifier\t1\nPARAM\t0bec96c1-cca7-49e1-94af-fabc2aa08b97\tPset_DuctFittingTypeCommon.Status[Type]\tTEXT\t\t242\t1\tPEnum_ElementStatus\t1\nPARAM\t826e14c0-1d15-4415-9061-fafcb9a4b59b\tPset_DuctFittingTypeCommon.SubType[Type]\tTEXT\t\t242\t1\tIfcText\t1\nPARAM\t29faf7c0-6de7-48ca-95b2-f723fd2e59dd\tPset_DuctFittingTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t242\t1\tPropertyBoundedValue\t1\nPARAM\t48a0fa3f-c90c-4bf9-9040-d5dcf2d7006d\tPset_DuctFittingTypeCommon.UnitWeight[Type]\tNUMBER\t\t242\t1\tIfcMassPerLengthMeasure\t1\n#\nGROUP\t243\tPset_DuctSegmentOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcb8e6bd8-3d62-49fa-874d-b771878cba5e\tPset_DuctSegmentOccurrence.Color[Type]\tTEXT\t\t243\t1\tIfcLabel\t1\nPARAM\t406c63a2-da41-4af0-84f6-59be714ce6cb\tPset_DuctSegmentOccurrence.Colour[Type]\tTEXT\t\t243\t1\tIfcLabel\t1\nPARAM\t0054d948-13dc-4d0f-8306-d9dffa4d17e0\tPset_DuctSegmentOccurrence.HasLiner[Type]\tYESNO\t\t243\t1\tIfcBoolean\t1\nPARAM\t302017e4-f14c-48bc-b569-f1a17635d0bf\tPset_DuctSegmentOccurrence.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t243\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t244\tPset_DuctSegmentPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbf99cb6d-294d-49f3-a9f5-c74f975025e9\tPset_DuctSegmentPHistory.AtmosphericPressure[Type]\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\nPARAM\t3e2b6c43-b8e9-470b-8f80-fe822b1acd17\tPset_DuctSegmentPHistory.FluidFlowLeakage[Type]\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\nPARAM\ta92aed7f-93fc-4518-be2f-8a0fe6554b9c\tPset_DuctSegmentPHistory.LeakageCurve[Type]\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\nPARAM\t294cc4bb-a17c-4912-8c4b-e45c7e32ba1c\tPset_DuctSegmentPHistory.LeakageCurveHistory[Type]\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\nPARAM\teaf9d949-73da-4bea-b964-f0eb89104ce8\tPset_DuctSegmentPHistory.LossCoefficient[Type]\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\n#\nGROUP\t245\tPset_DuctSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t772961f5-0111-4b5b-bcb1-ee1962db939a\tPset_DuctSegmentTypeCommon.CrossSectionShape[Type]\tTEXT\t\t245\t1\tPEnum_DuctSegmentShape\t1\nPARAM\tbca6ed33-5dbf-4411-a004-8a1ea148caf3\tPset_DuctSegmentTypeCommon.EndStyleTreatment[Type]\tMULTILINETEXT\t\t245\t1\tPropertyListValue\t1\nPARAM\ta73ce048-9628-4394-a914-a524625c941b\tPset_DuctSegmentTypeCommon.Length[Type]\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta51f094f-354c-41ca-8d77-474fa5ca6994\tPset_DuctSegmentTypeCommon.LongitudinalSeam[Type]\tTEXT\t\t245\t1\tIfcText\t1\nPARAM\tf4307065-eade-4f10-813a-f50efbc1e91b\tPset_DuctSegmentTypeCommon.Material[Type]\tMULTILINETEXT\t\t245\t1\tIfcMaterial\t1\nPARAM\t2c843d3f-2927-4e36-aa5c-1226aa831b8e\tPset_DuctSegmentTypeCommon.MaterialThickness[Type]\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t92281afb-8cb6-4a01-a1e0-4e4521a4d878\tPset_DuctSegmentTypeCommon.NominalDiameterOrWidth[Type]\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0974a646-91a7-4344-bfda-46a06bd866f6\tPset_DuctSegmentTypeCommon.NominalHeight[Type]\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8e8b4a77-1e6a-4d2e-a8cd-d88d44e09ca8\tPset_DuctSegmentTypeCommon.PressureRange[Type]\tMULTILINETEXT\t\t245\t1\tPropertyBoundedValue\t1\nPARAM\td5f4a4dc-487f-4270-9ac0-88e6b3ee694f\tPset_DuctSegmentTypeCommon.Reference[Type]\tTEXT\t\t245\t1\tIfcIdentifier\t1\nPARAM\t10d02871-06b0-434e-b1f7-e3401eee59a7\tPset_DuctSegmentTypeCommon.Reinforcement[Type]\tTEXT\t\t245\t1\tIfcLabel\t1\nPARAM\ta6a948aa-9d94-4957-bd58-2e90a448c1d3\tPset_DuctSegmentTypeCommon.ReinforcementSpacing[Type]\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf962c860-77cd-4191-9f30-aebc7de4b0ae\tPset_DuctSegmentTypeCommon.Shape[Type]\tTEXT\t\t245\t1\tPEnum_DuctSegmentShape\t1\nPARAM\taf14ad5f-4060-442b-bc7d-b343128bcd7d\tPset_DuctSegmentTypeCommon.Status[Type]\tTEXT\t\t245\t1\tPEnum_ElementStatus\t1\nPARAM\t5aadb4da-6232-4b4c-8e92-3d1aaaba982a\tPset_DuctSegmentTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t245\t1\tPropertyBoundedValue\t1\nPARAM\tb485b6ff-097c-4c87-a966-3a5818f55041\tPset_DuctSegmentTypeCommon.UnitWeight[Type]\tNUMBER\t\t245\t1\tIfcMassMeasure\t1\nPARAM\t38ff81be-8a77-4035-9fdf-144985a021b7\tPset_DuctSegmentTypeCommon.WorkingPressure[Type]\tNUMBER\t\t245\t1\tIfcPressureMeasure\t1\n#\nGROUP\t246\tPset_DuctSilencerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8e67ed69-5ce2-412d-a288-a21f493299f5\tPset_DuctSilencerPHistory.AirFlowRate[Type]\tMULTILINETEXT\t\t246\t1\tIfcTimeSeries\t1\nPARAM\t3f85f47c-4af6-422c-bb9d-ab1663c146f1\tPset_DuctSilencerPHistory.AirPressureDropCurve[Type]\tMULTILINETEXT\t\t246\t1\tIfcTimeSeries\t1\n#\nGROUP\t247\tPset_DuctSilencerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t13662dd5-e6a6-4338-bb7d-af7fef6dde63\tPset_DuctSilencerTypeCommon.AirFlowrateRange[Type]\tMULTILINETEXT\t\t247\t1\tPropertyBoundedValue\t1\nPARAM\ta9e88480-d8d6-4434-afc1-ee3b336a7938\tPset_DuctSilencerTypeCommon.AirFlowRateRange[Type]\tMULTILINETEXT\t\t247\t1\tPropertyBoundedValue\t1\nPARAM\t9f7aec43-b66f-4838-a251-ce2d958555e9\tPset_DuctSilencerTypeCommon.HasExteriorInsulation[Type]\tYESNO\t\t247\t1\tIfcBoolean\t1\nPARAM\t7a73ba7f-45b5-49fb-a6fa-8c28a0edd4d1\tPset_DuctSilencerTypeCommon.HydraulicDiameter[Type]\tLENGTH\t\t247\t1\tIfcLengthMeasure\t1\nPARAM\t8bc57567-11bb-443e-abc7-5f7bed1dd39b\tPset_DuctSilencerTypeCommon.Length[Type]\tLENGTH\t\t247\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t56f215d1-0501-4031-8048-26cf07dd2e84\tPset_DuctSilencerTypeCommon.Reference[Type]\tTEXT\t\t247\t1\tIfcIdentifier\t1\nPARAM\t58444257-450f-43a2-b7e9-9ace26941724\tPset_DuctSilencerTypeCommon.Shape[Type]\tTEXT\t\t247\t1\tPEnum_DuctSilencerShape\t1\nPARAM\ta0beeb23-6c9c-4327-bc7e-acff60e50626\tPset_DuctSilencerTypeCommon.Status[Type]\tTEXT\t\t247\t1\tPEnum_ElementStatus\t1\nPARAM\t24a4866e-461e-43ad-9d0b-4896c75aba00\tPset_DuctSilencerTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t247\t1\tPropertyBoundedValue\t1\nPARAM\t120aeb07-17bd-4e4f-a029-f463283d152d\tPset_DuctSilencerTypeCommon.Weight[Type]\tNUMBER\t\t247\t1\tIfcMassMeasure\t1\nPARAM\t4ff244eb-5b06-4f38-b1d5-41a10742876e\tPset_DuctSilencerTypeCommon.WorkingPressureRange[Type]\tMULTILINETEXT\t\t247\t1\tPropertyBoundedValue\t1\n#\nGROUP\t248\tPset_ElectricalCircuit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb9b5bd0c-72f4-470f-a649-64ee34946486\tPset_ElectricalCircuit.Diversity[Type]\tNUMBER\t\t248\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7736fc93-e2ce-46f0-9d1d-f840b65a87a2\tPset_ElectricalCircuit.MaximumAllowedVoltageDrop[Type]\tNUMBER\t\t248\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t89e21b4a-6898-4a83-ada6-ad49ea75ca24\tPset_ElectricalCircuit.NetImpedance[Type]\tNUMBER\t\t248\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t349089b4-cba7-410d-944f-d9648a29a1b0\tPset_ElectricalCircuit.NumberOfPhases[Type]\tINTEGER\t\t248\t1\tIfcInteger\t1\n#\nGROUP\t249\tPset_ElectricalDeviceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te44cf191-98f4-416c-b0db-2de33810c150\tPset_ElectricalDeviceCommon.ConductorFunction[Type]\tTEXT\t\t249\t1\tPEnum_ConductorFunctionEnum\t1\nPARAM\t1e8844ea-58c5-49c7-8163-fb2ebe0ee34a\tPset_ElectricalDeviceCommon.EarthingStyle[Type]\tTEXT\t\t249\t1\tIfcLabel\t1\nPARAM\t2e2c9740-944e-46c2-8883-565e4ab9ea58\tPset_ElectricalDeviceCommon.ElectricalDeviceNominalPower[Type]\tNUMBER\t\t249\t1\tIfcPowerMeasure\t1\nPARAM\tbc91d4c2-50a5-4209-a040-a4f13818654b\tPset_ElectricalDeviceCommon.HasProtectiveEarth[Type]\tYESNO\t\t249\t1\tIfcBoolean\t1\nPARAM\t6d70319f-9720-4c68-bc87-c417ad232fa4\tPset_ElectricalDeviceCommon.HeatDissipation[Type]\tNUMBER\t\t249\t1\tIfcPowerMeasure\t1\nPARAM\t98dd37c6-3724-42d3-98b2-0313fd26d151\tPset_ElectricalDeviceCommon.IK_Code[Type]\tTEXT\t\t249\t1\tIfcLabel\t1\nPARAM\t1bab2ec2-e9a3-4480-a4c2-b03c507c39fa\tPset_ElectricalDeviceCommon.InsulationStandardClass[Type]\tTEXT\t\t249\t1\tPEnum_InsulationStandardClass\t1\nPARAM\t73c07f4c-af83-4062-8738-32dfa5a95260\tPset_ElectricalDeviceCommon.IP_Code[Type]\tTEXT\t\t249\t1\tIfcLabel\t1\nPARAM\tf427c18d-3556-4535-80b0-662dd05a317c\tPset_ElectricalDeviceCommon.NominalCurrent[Type]\tNUMBER\t\t249\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tb27127bf-944c-4f8a-abdc-8471489b6a71\tPset_ElectricalDeviceCommon.NominalFrequencyRange[Type]\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\nPARAM\tf88093d4-80d1-4065-b128-e43bdc833535\tPset_ElectricalDeviceCommon.NominalPowerConsumption[Type]\tNUMBER\t\t249\t1\tIfcPowerMeasure\t1\nPARAM\t2e4f72e8-860d-4ab1-8094-46409296bb55\tPset_ElectricalDeviceCommon.NominalVoltage[Type]\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\nPARAM\t0eec9b71-cb7a-4009-8c8b-aa8c592fd624\tPset_ElectricalDeviceCommon.NumberOfPoles[Type]\tINTEGER\t\t249\t1\tIfcCountMeasure\t1\nPARAM\t720970d6-3198-4098-b6ec-5592ec14999b\tPset_ElectricalDeviceCommon.NumberOfPowerSupplyPorts[Type]\tMULTILINETEXT\t\t249\t1\tPropertyTableValue\t1\nPARAM\t44b6a914-475c-4014-b57c-2ce23e96a005\tPset_ElectricalDeviceCommon.PhaseAngle[Type]\tANGLE\t\t249\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\tdff2fe23-9642-4f64-ae0f-74cb3aa0220f\tPset_ElectricalDeviceCommon.PhaseReference[Type]\tTEXT\t\t249\t1\tIfcIdentifier\t1\nPARAM\t0163dccb-2f07-42ed-989a-ecf794099bbd\tPset_ElectricalDeviceCommon.Power[Type]\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\nPARAM\tbd4cfc39-9814-4e82-ba33-7760f25139e0\tPset_ElectricalDeviceCommon.PowerFactor[Type]\tNUMBER\t\t249\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\te9bbaedd-38ff-4dea-aa3f-747f3885a053\tPset_ElectricalDeviceCommon.RatedCurrent[Type]\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\nPARAM\t7d337ad8-ee76-4353-af61-b2c598881b8b\tPset_ElectricalDeviceCommon.RatedVoltage[Type]\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\nPARAM\tbad4baad-3be2-4269-a5db-11a016ce7493\tPset_ElectricalDeviceCommon.UsageCurrent[Type]\tNUMBER\t\t249\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t250\tPset_ElectricalDeviceCompliance\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t55c784af-5f76-410d-bd09-ee9a5a7766b3\tPset_ElectricalDeviceCompliance.ElectroMagneticStandardsCompliance[Type]\tMULTILINETEXT\t\t250\t1\tPropertyTableValue\t1\nPARAM\teec2ff89-f993-434a-8f8c-e29f599e40b4\tPset_ElectricalDeviceCompliance.ExplosiveAtmosphereStandardsCompliance[Type]\tMULTILINETEXT\t\t250\t1\tPropertyTableValue\t1\nPARAM\t725eaac3-d342-48ea-8a6a-f8d31598d320\tPset_ElectricalDeviceCompliance.FireProofingStandardsCompliance[Type]\tMULTILINETEXT\t\t250\t1\tPropertyTableValue\t1\nPARAM\t30203fb7-3960-4ad3-b2ab-568235b54286\tPset_ElectricalDeviceCompliance.LightningProtectionStandardsCompliance[Type]\tMULTILINETEXT\t\t250\t1\tPropertyTableValue\t1\n#\nGROUP\t251\tPset_ElectricalFeederLine\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcbfe3a98-6afe-4d74-8395-1f7ceccdc800\tPset_ElectricalFeederLine.CurrentCarryingCapacity[Type]\tNUMBER\t\t251\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t53dbabd7-0fb5-4f47-b157-f9e3f4aae9e7\tPset_ElectricalFeederLine.DesignAmbientTemperature[Type]\tMULTILINETEXT\t\t251\t1\tPropertyBoundedValue\t1\nPARAM\tebf19807-4a9f-40ed-a0bb-2979de39def9\tPset_ElectricalFeederLine.ElectricalClearanceDistance[Type]\tLENGTH\t\t251\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdff7b2af-bd20-44a0-bf55-558e68949dc6\tPset_ElectricalFeederLine.ElectricalFeederType[Type]\tTEXT\t\t251\t1\tPEnum_ElectricalFeederType\t1\n#\nGROUP\t252\tPset_ElectricAppliancePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9682862a-3105-492f-8a6a-1f66d53413ae\tPset_ElectricAppliancePHistory.PowerState[Type]\tMULTILINETEXT\t\t252\t1\tIfcTimeSeries\t1\n#\nGROUP\t253\tPset_ElectricApplianceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7b07423f-c1a4-4d56-8ccd-10a816471db9\tPset_ElectricApplianceTypeCommon.Reference[Type]\tTEXT\t\t253\t1\tIfcIdentifier\t1\nPARAM\tf62664b9-c44a-4521-ae51-8c57e6505e75\tPset_ElectricApplianceTypeCommon.Status[Type]\tTEXT\t\t253\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t254\tPset_ElectricApplianceTypeDishwasher\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tce6d3bf8-4679-48f0-8ab0-2465fa0fe989\tPset_ElectricApplianceTypeDishwasher.DishwasherType[Type]\tTEXT\t\t254\t1\tPEnum_ElectricApplianceDishwasherType\t1\n#\nGROUP\t255\tPset_ElectricApplianceTypeElectricCooker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td0f77eb3-7b10-4601-ab28-b9dc4b3485fb\tPset_ElectricApplianceTypeElectricCooker.ElectricCookerType[Type]\tTEXT\t\t255\t1\tPEnum_ElectricApplianceElectricCookerType\t1\n#\nGROUP\t256\tPset_ElectricDistributionBoardOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9a124d78-5d9c-4ec3-b468-06a70861d6f4\tPset_ElectricDistributionBoardOccurrence.IsMain[Type]\tYESNO\t\t256\t1\tIfcBoolean\t1\nPARAM\tb8621298-f362-45df-b3ae-443960a5bdd6\tPset_ElectricDistributionBoardOccurrence.IsSkilledOperator[Type]\tYESNO\t\t256\t1\tIfcBoolean\t1\n#\nGROUP\t257\tPset_ElectricDistributionBoardTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcdd9960e-ead4-4dc3-95eb-2116f77e64f2\tPset_ElectricDistributionBoardTypeCommon.Reference[Type]\tTEXT\t\t257\t1\tIfcIdentifier\t1\nPARAM\ta4d6fd9a-5ef2-47e1-8529-e48358eab8d7\tPset_ElectricDistributionBoardTypeCommon.Status[Type]\tTEXT\t\t257\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t258\tPset_ElectricDistributionPointCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t40cf0a71-b990-44c2-93df-8cd99b652352\tPset_ElectricDistributionPointCommon.CaseMaterial[Type]\tMULTILINETEXT\t\t258\t1\tIfcMaterial\t1\nPARAM\t7d4f3d7f-f37c-4431-8900-cbd26692b8a9\tPset_ElectricDistributionPointCommon.CaseWeight[Type]\tNUMBER\t\t258\t1\tIfcMassMeasure\t1\nPARAM\t7603f11f-4b5f-492a-bb08-c805831f6a10\tPset_ElectricDistributionPointCommon.IsMain[Type]\tYESNO\t\t258\t1\tIfcBoolean\t1\nPARAM\t3fc095cd-385a-47bb-8a2a-c9c8ba17df00\tPset_ElectricDistributionPointCommon.NumberOfDoors[Type]\tINTEGER\t\t258\t1\tIfcInteger\t1\nPARAM\tfb77d61e-0ac1-45b2-9b79-202d24bdc188\tPset_ElectricDistributionPointCommon.NumberOfOpenings[Type]\tINTEGER\t\t258\t1\tIfcInteger\t1\n#\nGROUP\t259\tPset_ElectricFlowStorageDevicePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3462db45-9e45-4add-93c5-46c644d64c63\tPset_ElectricFlowStorageDevicePHistory.Level[Type]\tNUMBER\t\t259\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t260\tPset_ElectricFlowStorageDeviceTypeBattery\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6ac04dc2-490a-47c1-8034-2426dad0915c\tPset_ElectricFlowStorageDeviceTypeBattery.AssemblyInstruction[Type]\tMULTILINETEXT\t\t260\t1\tIfcExternalReference\t1\nPARAM\t1eaa6613-4127-418e-98b3-01251465f131\tPset_ElectricFlowStorageDeviceTypeBattery.BatteryChargingType[Type]\tTEXT\t\t260\t1\tPEnum_BatteryChargingType\t1\nPARAM\t3f5a5045-25c6-4efb-9104-32c717a6da65\tPset_ElectricFlowStorageDeviceTypeBattery.CurrentRegulationRate[Type]\tNUMBER\t\t260\t1\tIfcRatioMeasure\t1\nPARAM\tcbc55b93-4d6d-4aa9-a427-1acb02a36053\tPset_ElectricFlowStorageDeviceTypeBattery.EncapsulationTechnologyCode[Type]\tTEXT\t\t260\t1\tIfcIdentifier\t1\nPARAM\t7844c5e7-f948-4876-a724-87ef573b3981\tPset_ElectricFlowStorageDeviceTypeBattery.NominalSupplyCurrent[Type]\tNUMBER\t\t260\t1\tIfcElectricCurrentMeasure\t1\nPARAM\te8a5255a-c0c0-4605-b7d4-d3cb3c8723be\tPset_ElectricFlowStorageDeviceTypeBattery.OpenCircuitVoltage[Type]\tNUMBER\t\t260\t1\tIfcElectricVoltageMeasure\t1\nPARAM\tdba88581-3610-4b09-a5e6-fd0b73f3d6b6\tPset_ElectricFlowStorageDeviceTypeBattery.VoltageRegulationRate[Type]\tNUMBER\t\t260\t1\tIfcRatioMeasure\t1\n#\nGROUP\t261\tPset_ElectricFlowStorageDeviceTypeCapacitor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb92e6320-fc5d-47a7-84ad-75252c3022a4\tPset_ElectricFlowStorageDeviceTypeCapacitor.NumberOfPhases[Type]\tINTEGER\t\t261\t1\tIfcCountMeasure\t1\n#\nGROUP\t262\tPset_ElectricFlowStorageDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t04d555a0-ab2c-4431-95fe-ad902b74dbd9\tPset_ElectricFlowStorageDeviceTypeCommon.ConnectedConductorFunction[Type]\tTEXT\t\t262\t1\tPEnum_ConductorFunctionEnum\t1\nPARAM\t31c7da45-fea5-48aa-b7da-4d6a9a052dfc\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PoleMaximumState[Type]\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t052e943d-41cd-4a80-808f-8ecb635540a9\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PoleMinimumState[Type]\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t295be0a0-9b95-4dc9-9b29-3865aff67ddc\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PolePowerFactorMaximumState[Type]\tNUMBER\t\t262\t1\tIfcReal\t1\nPARAM\ta0b861cd-2f2d-4eb1-8ae6-f222ca0aba47\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PolePowerFactorMinimumState[Type]\tNUMBER\t\t262\t1\tIfcReal\t1\nPARAM\t4a486daf-0fea-4fc2-bfcc-9494168e8a49\tPset_ElectricFlowStorageDeviceTypeCommon.MaximumInsulatedVoltage[Type]\tNUMBER\t\t262\t1\tIfcElectricVoltageMeasure\t1\nPARAM\tfc972fe9-4363-4974-a8ea-f11134ae3075\tPset_ElectricFlowStorageDeviceTypeCommon.ModuleCapacity[Type]\tNUMBER\t\t262\t1\tIfcElectricCapacitanceMeasure\t1\nPARAM\tfc691c01-4e09-4be8-aa2a-9c7296b7ec9f\tPset_ElectricFlowStorageDeviceTypeCommon.ModulesInParallel[Type]\tINTEGER\t\t262\t1\tIfcInteger\t1\nPARAM\t9bbc0b63-cccf-456c-bad4-8c448f34faeb\tPset_ElectricFlowStorageDeviceTypeCommon.ModulesInSeries[Type]\tINTEGER\t\t262\t1\tIfcInteger\t1\nPARAM\t5b81e277-1c89-4206-80e0-406f375de800\tPset_ElectricFlowStorageDeviceTypeCommon.NominalFrequency[Type]\tNUMBER\t\t262\t1\tIfcFrequencyMeasure\t1\nPARAM\t9e721675-3e74-4302-b28f-0e4d3de07c82\tPset_ElectricFlowStorageDeviceTypeCommon.NominalSupplyVoltage[Type]\tNUMBER\t\t262\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t1e836369-bb30-4b34-9e74-b9b9277fe08b\tPset_ElectricFlowStorageDeviceTypeCommon.NominalSupplyVoltageOffset[Type]\tMULTILINETEXT\t\t262\t1\tPropertyBoundedValue\t1\nPARAM\t6526155a-70a5-4a1e-8c5a-d6cc7d3f9f49\tPset_ElectricFlowStorageDeviceTypeCommon.PowerCapacity[Type]\tNUMBER\t\t262\t1\tIfcElectricChargeMeasure\t1\nPARAM\td384c59f-0609-441b-aa92-8c18e671d11e\tPset_ElectricFlowStorageDeviceTypeCommon.RadiativeFraction[Type]\tNUMBER\t\t262\t1\tIfcRatioMeasure\t1\nPARAM\t30ba38e0-792e-47dc-9d6b-b649a51bbaa9\tPset_ElectricFlowStorageDeviceTypeCommon.RatedCapacitance[Type]\tNUMBER\t\t262\t1\tIfcElectricCapacitanceMeasure\t1\nPARAM\tbdb08450-89cb-46c0-a8d5-f28f5e775612\tPset_ElectricFlowStorageDeviceTypeCommon.Reference[Type]\tTEXT\t\t262\t1\tIfcIdentifier\t1\nPARAM\tfe141333-82b0-4b01-a6df-84d1245316d7\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PoleMaximumState[Type]\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tbc558d22-5595-4522-bd27-97f51cb4be61\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PoleMinimumState[Type]\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t6cc288da-79b2-41a2-8a50-7095617bf8b9\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PolePowerFactorMaximumState[Type]\tNUMBER\t\t262\t1\tIfcReal\t1\nPARAM\t9bce1ed3-6156-47db-8335-8b5bc899feba\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PolePowerFactorMinimumState[Type]\tNUMBER\t\t262\t1\tIfcReal\t1\nPARAM\tc460d017-42ba-42f8-a6e0-9188747de49e\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit2PoleMinimumState[Type]\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t6c475af8-16dd-4a04-9ef6-1061834039c7\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit2PolePowerFactorMinimumState[Type]\tNUMBER\t\t262\t1\tIfcReal\t1\nPARAM\t8cfd7de0-f4a7-48a6-b412-d4a56f139fc1\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit3PoleMaximumState[Type]\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t0ad2067d-0c2e-41e3-931d-d9db0e4db0cc\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit3PolePowerFactorMaximumState[Type]\tNUMBER\t\t262\t1\tIfcReal\t1\nPARAM\t391dfdf3-e795-4d3b-bb47-1e25fa6a99da\tPset_ElectricFlowStorageDeviceTypeCommon.Status[Type]\tTEXT\t\t262\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t263\tPset_ElectricFlowStorageDeviceTypeInductor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t088f16ac-6eab-4b94-bd17-a90d5868915a\tPset_ElectricFlowStorageDeviceTypeInductor.Inductance[Type]\tNUMBER\t\t263\t1\tIfcInductanceMeasure\t1\nPARAM\te140b196-e606-4065-8dd2-f5537b0323ef\tPset_ElectricFlowStorageDeviceTypeInductor.NumberOfPhases[Type]\tINTEGER\t\t263\t1\tIfcCountMeasure\t1\n#\nGROUP\t264\tPset_ElectricFlowStorageDeviceTypeRecharger\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t002de6c5-8610-4c40-8a4a-848106bfea1d\tPset_ElectricFlowStorageDeviceTypeRecharger.NominalSupplyCurrent[Type]\tNUMBER\t\t264\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t265\tPset_ElectricFlowStorageDeviceTypeUPS\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tccff1891-a28e-4551-9055-43dcebfee51c\tPset_ElectricFlowStorageDeviceTypeUPS.AssemblyInstruction[Type]\tMULTILINETEXT\t\t265\t1\tIfcExternalReference\t1\nPARAM\tb98de123-0ea2-4048-aa81-d1bf17ebf882\tPset_ElectricFlowStorageDeviceTypeUPS.CurrentRegulationRate[Type]\tNUMBER\t\t265\t1\tIfcRatioMeasure\t1\nPARAM\t8cf4ff10-ff7c-4548-849d-dc7c4777e873\tPset_ElectricFlowStorageDeviceTypeUPS.NominalSupplyCurrent[Type]\tNUMBER\t\t265\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tf0d270e3-d311-40b0-9449-01934d4d39d3\tPset_ElectricFlowStorageDeviceTypeUPS.VoltageRegulationRate[Type]\tNUMBER\t\t265\t1\tIfcRatioMeasure\t1\n#\nGROUP\t266\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8bfa2c2c-96e5-43d5-85e8-7472eca8fe2b\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.ElectronicFilterType[Type]\tTEXT\t\t266\t1\tPEnum_ElectronicFilterType\t1\nPARAM\t8de08521-6fc7-42e5-a882-97185d26e7cd\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.NominalCurrent[Type]\tNUMBER\t\t266\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t723331f9-b489-48d2-9683-1c5b478c73a1\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.NominalPower[Type]\tNUMBER\t\t266\t1\tIfcPowerMeasure\t1\nPARAM\tc531a07c-0e7c-4ba2-99fc-413ecbb77f97\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.PrimaryFrequency[Type]\tNUMBER\t\t266\t1\tIfcFrequencyMeasure\t1\nPARAM\t0d4150f0-9943-4c50-bc7c-28e3d52f08af\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.RatedVoltage[Type]\tMULTILINETEXT\t\t266\t1\tPropertyBoundedValue\t1\nPARAM\t48ceabab-5f8c-47b0-9ea1-35ade0d6f0eb\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.SecondaryFrequency[Type]\tNUMBER\t\t266\t1\tIfcFrequencyMeasure\t1\n#\nGROUP\t267\tPset_ElectricGeneratorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tea6f1cc9-a98c-4d5a-94fb-bacf52a47cab\tPset_ElectricGeneratorTypeCommon.ElectricGeneratorEfficiency[Type]\tNUMBER\t\t267\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tfbddac21-2c2b-416f-b406-63d7845082d0\tPset_ElectricGeneratorTypeCommon.MaximumPowerOutput[Type]\tNUMBER\t\t267\t1\tIfcPowerMeasure\t1\nPARAM\t64d3987d-dc36-4d98-a086-04eff53dc764\tPset_ElectricGeneratorTypeCommon.Reference[Type]\tTEXT\t\t267\t1\tIfcIdentifier\t1\nPARAM\t25c344db-7c3a-4abf-8531-b1f2d3976e15\tPset_ElectricGeneratorTypeCommon.StartCurrentFactor[Type]\tNUMBER\t\t267\t1\tIfcReal\t1\nPARAM\t2f5676b4-0f91-49e3-bfa7-5e0466de4919\tPset_ElectricGeneratorTypeCommon.Status[Type]\tTEXT\t\t267\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t268\tPset_ElectricHeaterTypeElectricalCableHeater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t007eff40-d688-4158-8435-646cf2079ff0\tPset_ElectricHeaterTypeElectricalCableHeater.HeatOutputPerUnitLength[Type]\tNUMBER\t\t268\t1\t IfcPowerMeasure\t1\n#\nGROUP\t269\tPset_ElectricHeaterTypeElectricalMatHeater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td4831623-7ee6-4cf3-9df8-6ce75bebd423\tPset_ElectricHeaterTypeElectricalMatHeater.HeatOutputPerUnitArea[Type]\tNUMBER\t\t269\t1\t IfcPowerMeasure\t1\n#\nGROUP\t270\tPset_ElectricHeaterTypeElectricalPointHeater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t08858449-67a8-4f40-b2a5-486cd84fee04\tPset_ElectricHeaterTypeElectricalPointHeater.HeatOutput[Type]\tNUMBER\t\t270\t1\t IfcPowerMeasure\t1\n#\nGROUP\t271\tPset_ElectricMotorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbcfc9b86-8817-4f51-984c-00f099033daf\tPset_ElectricMotorTypeCommon.ElectricMotorEfficiency[Type]\tNUMBER\t\t271\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t145ddac3-f4df-4710-bdae-0a6d4261f52a\tPset_ElectricMotorTypeCommon.FrameSize[Type]\tTEXT\t\t271\t1\tIfcLabel\t1\nPARAM\t75c66f27-fd5d-43ca-8a4b-be6d9ea7bfb1\tPset_ElectricMotorTypeCommon.HasPartWinding[Type]\tYESNO\t\t271\t1\tIfcBoolean\t1\nPARAM\t546f2f1c-aa61-4fd5-9491-7e2c08547e45\tPset_ElectricMotorTypeCommon.IsGuarded[Type]\tYESNO\t\t271\t1\tIfcBoolean\t1\nPARAM\teb4b0328-d93f-43b3-9354-b04803d55caf\tPset_ElectricMotorTypeCommon.LockedRotorCurrent[Type]\tNUMBER\t\t271\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t126c8a63-627e-407f-83b0-92da11229964\tPset_ElectricMotorTypeCommon.MaximumPowerOutput[Type]\tNUMBER\t\t271\t1\tIfcPowerMeasure\t1\nPARAM\t6ebf61aa-bf6f-4150-baae-b4f631fface3\tPset_ElectricMotorTypeCommon.MotorEnclosureType[Type]\tTEXT\t\t271\t1\tPEnum_MotorEnclosureType\t1\nPARAM\t0c593b8a-c51a-42e7-ab1e-87ae1dc52b3e\tPset_ElectricMotorTypeCommon.Reference[Type]\tTEXT\t\t271\t1\tIfcIdentifier\t1\nPARAM\t2b61ddf2-05b2-42f2-9ff5-f45229296847\tPset_ElectricMotorTypeCommon.StartCurrentFactor[Type]\tNUMBER\t\t271\t1\tIfcReal\t1\nPARAM\t3b4bd756-7b09-43ff-b3d9-c8d768a35426\tPset_ElectricMotorTypeCommon.StartingTime[Type]\tNUMBER\t\t271\t1\tIfcTimeMeasure\t1\nPARAM\t1bf73ae1-f3ff-4437-b5a7-92859677aa34\tPset_ElectricMotorTypeCommon.Status[Type]\tTEXT\t\t271\t1\tPEnum_ElementStatus\t1\nPARAM\t3280b040-7ee3-430d-93b0-5be0049dfdcf\tPset_ElectricMotorTypeCommon.TeTime[Type]\tNUMBER\t\t271\t1\tIfcTimeMeasure\t1\n#\nGROUP\t272\tPset_ElectricTimeControlTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfe5c9822-f9f6-4e87-bcab-728b34373a1c\tPset_ElectricTimeControlTypeCommon.Reference[Type]\tTEXT\t\t272\t1\tIfcIdentifier\t1\nPARAM\t7895e832-dab4-4767-8eff-3cab37bf0396\tPset_ElectricTimeControlTypeCommon.Status[Type]\tTEXT\t\t272\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t273\tPset_ElementAssemblyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf0e00097-e118-42eb-820c-f73ae030885b\tPset_ElementAssemblyCommon.Reference[Type]\tTEXT\t\t273\t1\tIfcIdentifier\t1\nPARAM\t672d584f-cd8d-4e78-820e-dbf7cfa3d99a\tPset_ElementAssemblyCommon.Status[Type]\tTEXT\t\t273\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t274\tPset_ElementAssemblyTypeCantilever\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t165da3bb-7c99-40d9-a0fb-e70259ff13d2\tPset_ElementAssemblyTypeCantilever.AssemblyInstruction[Type]\tMULTILINETEXT\t\t274\t1\tIfcExternalReference\t1\nPARAM\tdb5a70e7-f0db-4890-85bf-410d837f697d\tPset_ElementAssemblyTypeCantilever.CantileverType[Type]\tTEXT\t\t274\t1\tPEnum_CantileverAssemblyType\t1\nPARAM\tde5bc2b4-ce93-40f7-9737-10c4f60673d5\tPset_ElementAssemblyTypeCantilever.ContactWireStagger[Type]\tLENGTH\t\t274\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t43de49f7-c3eb-4e72-a779-225fe4b5b276\tPset_ElementAssemblyTypeCantilever.SystemHeight[Type]\tLENGTH\t\t274\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t275\tPset_ElementAssemblyTypeDilatationPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8f1304bb-432b-43ab-9667-b3d2fead44bf\tPset_ElementAssemblyTypeDilatationPanel.BladesOrientation[Type]\tTEXT\t\t275\t1\tPEnum_BladesOrientation\t1\nPARAM\t90f313df-4fd6-4815-8eef-967790bd0bad\tPset_ElementAssemblyTypeDilatationPanel.DilatationLength[Type]\tLENGTH\t\t275\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t597873be-9f65-496a-a61e-fcec165892da\tPset_ElementAssemblyTypeDilatationPanel.ExpansionDirection[Type]\tTEXT\t\t275\t1\tPEnum_ExpansionDirection\t1\nPARAM\tec128c2c-be9e-4dde-99b5-46011863189e\tPset_ElementAssemblyTypeDilatationPanel.InstallationPlan[Type]\tMULTILINETEXT\t\t275\t1\tIfcDocumentReference\t1\nPARAM\tcc87b99e-00c5-4f60-b528-ef16755bb3ec\tPset_ElementAssemblyTypeDilatationPanel.TechnicalStandard[Type]\tMULTILINETEXT\t\t275\t1\tIfcExternalReference\t1\n#\nGROUP\t276\tPset_ElementAssemblyTypeHeadSpan\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t96dd1768-9e87-4856-a381-10c9286abbb5\tPset_ElementAssemblyTypeHeadSpan.AssemblyInstruction[Type]\tMULTILINETEXT\t\t276\t1\tIfcExternalReference\t1\nPARAM\t0b225bef-aeb3-4a81-baae-d3513419d09e\tPset_ElementAssemblyTypeHeadSpan.NumberOfTracksCrossed[Type]\tINTEGER\t\t276\t1\tIfcCountMeasure\t1\nPARAM\tacb44835-6255-4fc0-b873-6898f92c4ede\tPset_ElementAssemblyTypeHeadSpan.Span[Type]\tLENGTH\t\t276\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t277\tPset_ElementAssemblyTypeMast\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5f8eeb9b-24d9-4a30-8992-e2ab7bfde4c7\tPset_ElementAssemblyTypeMast.WithLightningRod[Type]\tYESNO\t\t277\t1\tIfcBoolean\t1\n#\nGROUP\t278\tPset_ElementAssemblyTypeOCSSuspension\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83175b84-63eb-445b-a93d-8029639d8f42\tPset_ElementAssemblyTypeOCSSuspension.ContactWireHeight[Type]\tLENGTH\t\t278\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t342ef3b1-c0c5-4a71-883e-b95a87b835fd\tPset_ElementAssemblyTypeOCSSuspension.ContactWireStagger[Type]\tLENGTH\t\t278\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t279\tPset_ElementAssemblyTypeRigidFrame\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t751b1ffe-c659-40cf-88bd-bd1cfc12e02c\tPset_ElementAssemblyTypeRigidFrame.AssemblyInstruction[Type]\tMULTILINETEXT\t\t279\t1\tIfcExternalReference\t1\nPARAM\t623e0401-7a83-45b6-b058-4164a4e94996\tPset_ElementAssemblyTypeRigidFrame.LoadCapacity[Type]\tNUMBER\t\t279\t1\tIfcForceMeasure\t1\nPARAM\t4bb5463d-c1fd-49d9-9621-8bcccff20a85\tPset_ElementAssemblyTypeRigidFrame.NumberOfTracksCrossed[Type]\tINTEGER\t\t279\t1\tIfcCountMeasure\t1\nPARAM\t68a8e6a8-94ec-4630-9b54-ae6df4d05f16\tPset_ElementAssemblyTypeRigidFrame.Span[Type]\tLENGTH\t\t279\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t280\tPset_ElementAssemblyTypeSteadyDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf268183b-596c-4cfd-bfd4-9ad57ac8decd\tPset_ElementAssemblyTypeSteadyDevice.AssemblyInstruction[Type]\tMULTILINETEXT\t\t280\t1\tIfcExternalReference\t1\nPARAM\t54ec0518-8e5d-4c5d-9d9c-44c6ce7d670a\tPset_ElementAssemblyTypeSteadyDevice.ContactWireStagger[Type]\tLENGTH\t\t280\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2dd7d373-8bf2-4d3c-b284-265c67fbf781\tPset_ElementAssemblyTypeSteadyDevice.IsSetOnWorkingWire[Type]\tYESNO\t\t280\t1\tIfcBoolean\t1\nPARAM\t059ce154-69bf-4fe0-a159-d3f290d53348\tPset_ElementAssemblyTypeSteadyDevice.SteadyDeviceType[Type]\tTEXT\t\t280\t1\tPEnum_SteadyDeviceType\t1\n#\nGROUP\t281\tPset_ElementAssemblyTypeSupportingAssembly\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc852a00e-3869-4c41-a9bb-585fb9414c6b\tPset_ElementAssemblyTypeSupportingAssembly.NumberOfCantilevers[Type]\tINTEGER\t\t281\t1\tIfcCountMeasure\t1\nPARAM\t99e77d01-c3d0-4dc8-ac25-5d9e50822b09\tPset_ElementAssemblyTypeSupportingAssembly.TypeOfSupportingSystem[Type]\tTEXT\t\t281\t1\tPEnum_SupportingSystemType\t1\n#\nGROUP\t282\tPset_ElementAssemblyTypeTrackPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf5251da5-901a-4598-9955-6b69715684bb\tPset_ElementAssemblyTypeTrackPanel.InstallationPlan[Type]\tMULTILINETEXT\t\t282\t1\tIfcDocumentReference\t1\nPARAM\t5d1cc289-128c-4f50-8b3f-110d96bea7a8\tPset_ElementAssemblyTypeTrackPanel.IsAccessibleByVehicle[Type]\tYESNO\t\t282\t1\tIfcBoolean\t1\nPARAM\t5ba9bfc7-b357-4c90-969d-608331c72d51\tPset_ElementAssemblyTypeTrackPanel.TrackExpansion[Type]\tMULTILINETEXT\t\t282\t1\tPropertyBoundedValue\t1\n#\nGROUP\t283\tPset_ElementAssemblyTypeTractionSwitchingAssembly\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teda01348-ef7c-4195-8ab2-c25ac910b4fc\tPset_ElementAssemblyTypeTractionSwitchingAssembly.DesignAmbientTemperature[Type]\tMULTILINETEXT\t\t283\t1\tPropertyBoundedValue\t1\nPARAM\t2eb115d4-11fe-479a-aec3-7611e1d43297\tPset_ElementAssemblyTypeTractionSwitchingAssembly.NominalCurrent[Type]\tNUMBER\t\t283\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t774bbabc-8d91-4a6e-90c0-3c6605e99e2a\tPset_ElementAssemblyTypeTractionSwitchingAssembly.NominalPower[Type]\tNUMBER\t\t283\t1\tIfcPowerMeasure\t1\nPARAM\t0f8a5a87-c684-443b-8a76-7673ccae8d56\tPset_ElementAssemblyTypeTractionSwitchingAssembly.RatedVoltage[Type]\tMULTILINETEXT\t\t283\t1\tPropertyBoundedValue\t1\n#\nGROUP\t284\tPset_ElementAssemblyTypeTurnoutPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8e147b6b-6550-4599-808e-70a6b5136dc2\tPset_ElementAssemblyTypeTurnoutPanel.BranchLineDirection[Type]\tTEXT\t\t284\t1\tPEnum_BranchLineDirection\t1\nPARAM\taea149fd-bb95-4e7e-addb-ef60e0822046\tPset_ElementAssemblyTypeTurnoutPanel.InstallationPlan[Type]\tMULTILINETEXT\t\t284\t1\tIfcDocumentReference\t1\nPARAM\t217ab683-83f1-42a1-977a-6a9582611b6b\tPset_ElementAssemblyTypeTurnoutPanel.IsAccessibleByVehicle[Type]\tYESNO\t\t284\t1\tIfcBoolean\t1\nPARAM\ta41cc2dd-00e9-46e8-ad38-f32c6f6ddf37\tPset_ElementAssemblyTypeTurnoutPanel.IsSharedTurnout[Type]\tYESNO\t\t284\t1\tIfcBoolean\t1\nPARAM\t5187419b-4bc4-4c73-980d-b3ba285557aa\tPset_ElementAssemblyTypeTurnoutPanel.MaximumSpeedLimitOfDivergingLine[Type]\tNUMBER\t\t284\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t767fec84-9abc-4d4e-ad60-1ff5a1c9771a\tPset_ElementAssemblyTypeTurnoutPanel.PercentShared[Type]\tNUMBER\t\t284\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t83d8cb33-20ab-4c40-b704-7ded00205ab4\tPset_ElementAssemblyTypeTurnoutPanel.TrackElementOrientation[Type]\tTEXT\t\t284\t1\tPEnum_TurnoutPanelOrientation\t1\nPARAM\td265ea2e-a58e-4346-9b05-17816190acff\tPset_ElementAssemblyTypeTurnoutPanel.TrackExpansion[Type]\tMULTILINETEXT\t\t284\t1\tPropertyBoundedValue\t1\nPARAM\t74e59432-1c88-4135-8336-904fbd219e2d\tPset_ElementAssemblyTypeTurnoutPanel.TrackGaugeLength[Type]\tLENGTH\t\t284\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta3a03cc9-6159-41ae-a7fa-d559efa7296f\tPset_ElementAssemblyTypeTurnoutPanel.TurnoutCurvedRadius[Type]\tLENGTH\t\t284\t1\tIfcLengthMeasure\t1\nPARAM\t9aae88cf-2ef7-4217-8539-2895f8aeffce\tPset_ElementAssemblyTypeTurnoutPanel.TurnoutHeaterType[Type]\tTEXT\t\t284\t1\tPEnum_TurnoutHeaterType\t1\nPARAM\t929af38b-a16b-42fd-bb68-6f73d9b5a8c8\tPset_ElementAssemblyTypeTurnoutPanel.TurnoutPointMachineCount[Type]\tINTEGER\t\t284\t1\tIfcCountMeasure\t1\nPARAM\t8193ca31-c0a6-4c04-94a2-0f4aa8a51ada\tPset_ElementAssemblyTypeTurnoutPanel.TypeOfCurvedTurnout[Type]\tTEXT\t\t284\t1\tPEnum_TypeOfCurvedTurnout\t1\nPARAM\t28330ea6-19b8-4552-b637-1b05cee7a7b4\tPset_ElementAssemblyTypeTurnoutPanel.TypeOfDrivingDevice[Type]\tTEXT\t\t284\t1\tPEnum_TypeOfDrivingDevice\t1\nPARAM\t9ff406b1-dfed-4614-b7c1-ec118d03cfff\tPset_ElementAssemblyTypeTurnoutPanel.TypeOfJunction[Type]\tTEXT\t\t284\t1\tPEnum_TypeOfJunction\t1\nPARAM\t3e5a3103-f2be-4a78-91dd-61aaf6ba57ea\tPset_ElementAssemblyTypeTurnoutPanel.TypeOfTurnout[Type]\tTEXT\t\t284\t1\tPEnum_TypeOfTurnout\t1\n#\nGROUP\t285\tPset_ElementComponentCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb51b6251-b0d2-4334-8802-60cd7303f3c4\tPset_ElementComponentCommon.CorrosionTreatment[Type]\tTEXT\t\t285\t1\tPEnum_ElementComponentCorrosionTreatment\t1\nPARAM\tb23cde0a-0f9e-4164-b2ca-4102c57dea7c\tPset_ElementComponentCommon.DeliveryType[Type]\tTEXT\t\t285\t1\tPEnum_ElementComponentDeliveryType\t1\nPARAM\t2687f13e-1866-4d7e-ad87-4e59e84818ab\tPset_ElementComponentCommon.Reference[Type]\tTEXT\t\t285\t1\tIfcIdentifier\t1\nPARAM\t5bd0c41f-24d5-4b60-a9bd-f15f91d4be41\tPset_ElementComponentCommon.Status[Type]\tTEXT\t\t285\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t286\tPset_ElementKinematics\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tab211fe4-28fd-4223-ba68-88773c12eef0\tPset_ElementKinematics.CyclicPath[Type]\tMULTILINETEXT\t\t286\t1\tPropertyTableValue\t1\nPARAM\t80fb336b-9ba6-49d9-8fd4-2a65a76e42f0\tPset_ElementKinematics.CyclicRange[Type]\tNUMBER\t\t286\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tc77c94c0-eb91-4ff3-b553-d5263a1dd82f\tPset_ElementKinematics.LinearPath[Type]\tMULTILINETEXT\t\t286\t1\tPropertyTableValue\t1\nPARAM\tbc1e38e3-09ff-452a-8b82-fd83a1d10181\tPset_ElementKinematics.LinearRange[Type]\tLENGTH\t\t286\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5052ca7e-8ee6-4841-bf50-d9a7913348fa\tPset_ElementKinematics.MaximumAngularVelocity[Type]\tNUMBER\t\t286\t1\tIfcAngularVelocityMeasure\t1\nPARAM\tbee9957e-13dc-413d-8d66-948809a8a2db\tPset_ElementKinematics.MaximumConstantSpeed[Type]\tNUMBER\t\t286\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t3893a360-31c2-4929-a293-42ad1746ce5e\tPset_ElementKinematics.MinimumTime[Type]\tNUMBER\t\t286\t1\tIfcTimeMeasure\t1\n#\nGROUP\t287\tPset_ElementShading\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t193e801f-c05a-4431-9b03-72750d167dbc\tPset_ElementShading.AverageSolarTransmittance[Type]\tNUMBER\t\t287\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1a592a34-b301-49c7-a14a-b0fbfe963d28\tPset_ElementShading.AverageVisibleTransmittance[Type]\tNUMBER\t\t287\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t99074339-15d8-4783-94ce-455160b626b3\tPset_ElementShading.Azimuth[Type]\tNUMBER\t\t287\t1\tIfcPositivePlaneAngleMeasure \t1\nPARAM\tcb037310-270e-468c-8430-5068780cd030\tPset_ElementShading.Color[Type]\tTEXT\t\t287\t1\tIfcLabel\t1\nPARAM\t08518dcd-d1bd-47ed-a8d2-37a536175a35\tPset_ElementShading.Inclination[Type]\tNUMBER\t\t287\t1\tIfcPositivePlaneAngleMeasure \t1\nPARAM\tbab0c12b-b225-4b38-ba32-1de59399a873\tPset_ElementShading.Reflectance[Type]\tNUMBER\t\t287\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t72deb207-587a-43c9-8a0a-f4546b8dac32\tPset_ElementShading.Roughness[Type]\tLENGTH\t\t287\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32482893-341d-4b19-ae70-0e116a0058cf\tPset_ElementShading.ShadingDeviceType[Type]\tTEXT\t\t287\t1\tPEnum_ElementShading\t1\nPARAM\tf54648cb-7213-4416-8bed-2ba2a84f2df0\tPset_ElementShading.TiltRange[Type]\tMULTILINETEXT\t\t287\t1\tPropertyBoundedValue\t1\n#\nGROUP\t288\tPset_ElementSize\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbd06a180-7c75-4e83-9763-e8f02afb8040\tPset_ElementSize.NominalHeight[Type]\tLENGTH\t\t288\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta735aab4-e242-458f-bfde-5faedb93b01e\tPset_ElementSize.NominalLength[Type]\tLENGTH\t\t288\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t59aacc7d-e194-404b-8927-f4add26a1e5f\tPset_ElementSize.NominalWidth[Type]\tLENGTH\t\t288\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t289\tPset_EmbeddedTrack\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6f014eab-cf6f-42c4-a824-eb9f2e158633\tPset_EmbeddedTrack.HasDrainage[Type]\tYESNO\t\t289\t1\tIfcBoolean\t1\nPARAM\tca6d5d61-fafa-421a-9dfe-ee895b693c25\tPset_EmbeddedTrack.IsAccessibleByVehicle[Type]\tYESNO\t\t289\t1\tIfcBoolean\t1\nPARAM\te408e566-78a2-4c0e-a4a7-87e67c9d3b87\tPset_EmbeddedTrack.PermissibleRoadLoad[Type]\tNUMBER\t\t289\t1\tIfcMassMeasure\t1\n#\nGROUP\t290\tPset_EnergyConsumptionPHistoryElectricity\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3d28c9b5-72a7-422d-8a47-c9e4d2664377\tPset_EnergyConsumptionPHistoryElectricity.ApparentPower[Type]\tNUMBER\t\t290\t1\tIfcReal\t1\nPARAM\t9042ed2f-4a44-428b-a0a5-a3f8ae0b7773\tPset_EnergyConsumptionPHistoryElectricity.Current[Type]\tTEXT\t\t290\t1\tIfcLabel\t1\nPARAM\t27c90246-3c96-4b65-95a8-e9d68e54bbe0\tPset_EnergyConsumptionPHistoryElectricity.PowerFactor[Type]\tNUMBER\t\t290\t1\tIfcReal\t1\nPARAM\tfc2ccf60-c5d1-4c09-b42e-dc9e1c0cab74\tPset_EnergyConsumptionPHistoryElectricity.ReactivePower[Type]\tNUMBER\t\t290\t1\tIfcReal\t1\nPARAM\tfa64c1f1-d4aa-4d01-bfc3-2d0daa9d9817\tPset_EnergyConsumptionPHistoryElectricity.RealPower[Type]\tNUMBER\t\t290\t1\tIfcReal\t1\nPARAM\taf592070-7632-4727-8974-d372b3b161d3\tPset_EnergyConsumptionPHistoryElectricity.Voltage[Type]\tTEXT\t\t290\t1\tIfcLabel\t1\n#\nGROUP\t291\tPset_EnergyConsumptionPHistoryFuel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t74694aaf-4128-4d7c-86fb-5a8b11f8a6e3\tPset_EnergyConsumptionPHistoryFuel.Flowrate[Type]\tNUMBER\t\t291\t1\tIfcReal\t1\nPARAM\t8bfac637-27c8-41ad-b84e-2ee80e856c83\tPset_EnergyConsumptionPHistoryFuel.Pressure[Type]\tNUMBER\t\t291\t1\tIfcReal\t1\nPARAM\t11cb0e19-3ad9-4b57-99a3-b9e62d95ab88\tPset_EnergyConsumptionPHistoryFuel.Temperature[Type]\tNUMBER\t\t291\t1\tIfcReal\t1\n#\nGROUP\t292\tPset_EnergyConsumptionPHistorySteam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb354304c-8e0d-4f91-8cb4-1ba5e90fc349\tPset_EnergyConsumptionPHistorySteam.Flowrate[Type]\tNUMBER\t\t292\t1\tIfcReal\t1\nPARAM\tcf8606fe-d648-4cc9-b63a-7c862b9569a6\tPset_EnergyConsumptionPHistorySteam.Pressure[Type]\tNUMBER\t\t292\t1\tIfcReal\t1\nPARAM\t9ad97d3a-48c4-41a0-b10e-bf5b49484100\tPset_EnergyConsumptionPHistorySteam.Quality[Type]\tTEXT\t\t292\t1\tIfcLabel\t1\nPARAM\t7f4b70bc-b59a-4631-bf97-29c7348a7b6d\tPset_EnergyConsumptionPHistorySteam.Temperature[Type]\tNUMBER\t\t292\t1\tIfcReal\t1\n#\nGROUP\t293\tPset_EnergyConversionDeviceCoil\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td04bf527-a9f8-426c-8b76-897e2e4f6d2c\tPset_EnergyConversionDeviceCoil.HasSoundAttentuation[Type]\tYESNO\t\t293\t1\tIfcBoolean\t1\n#\nGROUP\t294\tPset_EnergyConversionDeviceSpaceHeaterPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t512705a1-4e28-4091-8f5f-a2caabc33d27\tPset_EnergyConversionDeviceSpaceHeaterPanel.NumberOfPanels[Type]\tINTEGER\t\t294\t1\tIfcInteger\t1\n#\nGROUP\t295\tPset_EnergyConversionDeviceSpaceHeaterSectional\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb1a8cde5-64e7-4a63-af9a-6242daf977f1\tPset_EnergyConversionDeviceSpaceHeaterSectional.NumberOfSections[Type]\tINTEGER\t\t295\t1\tIfcInteger\t1\n#\nGROUP\t296\tPset_EnergyRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8f63981b-a230-4065-97cf-28c5519bb7e3\tPset_EnergyRequirements.EnergyConsumption[Type]\tNUMBER\t\t296\t1\tIfcEnergyMeasure\t1\nPARAM\t55f80cff-4133-4fe2-8470-8e1af8af2318\tPset_EnergyRequirements.EnergyConversionEfficiency[Type]\tNUMBER\t\t296\t1\tIfcRatioMeasure\t1\nPARAM\t533a07c3-463e-47ac-9f1f-82b7a7ab6267\tPset_EnergyRequirements.EnergySourceLabel[Type]\tTEXT\t\t296\t1\tIfcLabel\t1\nPARAM\t6d5aeaa9-f0a7-479f-b49d-240b923faf99\tPset_EnergyRequirements.PowerDemand[Type]\tNUMBER\t\t296\t1\tIfcPowerMeasure\t1\n#\nGROUP\t297\tPset_EngineTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta072d78d-8f5f-4d58-9f20-dc8b59b42c72\tPset_EngineTypeCommon.EnergySource[Type]\tTEXT\t\t297\t1\tPEnum_EngineEnergySource\t1\nPARAM\t19b2514c-4e93-4089-b0fb-6c85f9a4677a\tPset_EngineTypeCommon.Reference[Type]\tTEXT\t\t297\t1\tIfcIdentifier\t1\nPARAM\t5e48ba36-8abf-409f-a35c-110c9f691c62\tPset_EngineTypeCommon.Status[Type]\tTEXT\t\t297\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t298\tPset_EnvironmentalCondition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7bc2b377-2663-41b6-bc4c-7769e784c65b\tPset_EnvironmentalCondition.MaximumAtmosphericPressure[Type]\tNUMBER\t\t298\t1\tIfcPressureMeasure\t1\nPARAM\t7458f0b8-b558-4ed7-b924-c9c666f0a009\tPset_EnvironmentalCondition.MaximumRainIntensity[Type]\tNUMBER\t\t298\t1\tIfcReal\t1\nPARAM\tc4b74a7e-b91d-40c5-a918-daee0a6fd2cd\tPset_EnvironmentalCondition.MaximumSolarRadiation[Type]\tNUMBER\t\t298\t1\tIfcReal\t1\nPARAM\tc4e87289-6328-46bb-b912-4d94b01566c9\tPset_EnvironmentalCondition.MaximumWindSpeed[Type]\tNUMBER\t\t298\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t34cd4029-42c3-4301-9ed3-0bdc307d7c99\tPset_EnvironmentalCondition.OperationalTemperatureRange[Type]\tMULTILINETEXT\t\t298\t1\tPropertyBoundedValue\t1\nPARAM\tc471cfbe-b63a-44c1-bbe6-204f7e8a14c8\tPset_EnvironmentalCondition.ReferenceAirRelativeHumidity[Type]\tMULTILINETEXT\t\t298\t1\tPropertyBoundedValue\t1\nPARAM\t4fd5ff4d-e144-4d8c-b026-91d848fea6e5\tPset_EnvironmentalCondition.ReferenceEnvironmentTemperature[Type]\tMULTILINETEXT\t\t298\t1\tPropertyBoundedValue\t1\nPARAM\t1a997e53-7d9e-4788-ac66-42e1c85e61b7\tPset_EnvironmentalCondition.SaltMistLevel[Type]\tTEXT\t\t298\t1\tIfcLabel\t1\nPARAM\t8d8214f0-6afc-46a3-8599-d501cbf04c03\tPset_EnvironmentalCondition.SeismicResistance[Type]\tNUMBER\t\t298\t1\tIfcReal\t1\nPARAM\ta610796e-6cd6-4fbc-900c-2a717052f11b\tPset_EnvironmentalCondition.SmokeLevel[Type]\tTEXT\t\t298\t1\tIfcLabel\t1\nPARAM\tb06b1a80-35c6-4d8a-abd1-056d53ba8fcd\tPset_EnvironmentalCondition.StorageTemperatureRange[Type]\tMULTILINETEXT\t\t298\t1\tPropertyBoundedValue\t1\n#\nGROUP\t299\tPset_EnvironmentalEmissions\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tced102a0-dc7b-4d43-a373-69c5598c92eb\tPset_EnvironmentalEmissions.CarbonDioxideEmissions[Type]\tNUMBER\t\t299\t1\tIfcMassFlowRateMeasure\t1\nPARAM\ta336d232-5a89-4232-8d72-c1707f8276d2\tPset_EnvironmentalEmissions.NitrogenOxidesEmissions[Type]\tNUMBER\t\t299\t1\tIfcMassFlowRateMeasure\t1\nPARAM\t243f51f8-ac22-482f-8256-578bc68ec73f\tPset_EnvironmentalEmissions.NoiseEmissions[Type]\tNUMBER\t\t299\t1\tIfcSoundPowerLevelMeasure\t1\nPARAM\tdf99ebbd-b296-40df-b1b1-870a9ed007ad\tPset_EnvironmentalEmissions.ParticulateMatterEmissions[Type]\tNUMBER\t\t299\t1\tIfcMassFlowRateMeasure\t1\nPARAM\tb441cafd-45dc-4ece-ab1d-2bbfc4d046f9\tPset_EnvironmentalEmissions.SulphurDioxideEmissions[Type]\tNUMBER\t\t299\t1\tIfcMassFlowRateMeasure\t1\n#\nGROUP\t300\tPset_EnvironmentalImpactIndicators\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t193d0481-188c-4ed7-9323-fa8dd72128e1\tPset_EnvironmentalImpactIndicators.AtmosphericAcidificationPerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\t154ca6d1-6a3b-4ab3-9aed-cae6e7480363\tPset_EnvironmentalImpactIndicators.ClimateChangePerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\t86b1aa33-cb2e-4fdb-a381-437b029a9d96\tPset_EnvironmentalImpactIndicators.EutrophicationPerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\t817f69b1-81a8-497f-94da-e1c36c59aabb\tPset_EnvironmentalImpactIndicators.ExpectedServiceLife[Type]\tNUMBER\t\t300\t1\tIfcTimeMeasure\t1\nPARAM\td037f0fe-9b1e-4d13-baec-9db86edc3df7\tPset_EnvironmentalImpactIndicators.FunctionalUnitReference[Type]\tTEXT\t\t300\t1\tIfcLabel\t1\nPARAM\tf0caa374-a266-4ece-aa47-7feff2f7f48a\tPset_EnvironmentalImpactIndicators.HazardousWastePerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\tc4b5350a-036a-45b2-96d9-d99e56386601\tPset_EnvironmentalImpactIndicators.IndicatorsUnit[Type]\tTEXT\t\t300\t1\tIfcText\t1\nPARAM\tdeee4245-0861-46e7-8d73-a81c24066957\tPset_EnvironmentalImpactIndicators.InertWastePerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\tdaa94867-2cc9-477f-b1e9-ebb4e71d6f37\tPset_EnvironmentalImpactIndicators.LifeCyclePhase[Type]\tTEXT\t\t300\t1\tPEnum_LifeCyclePhase\t1\nPARAM\t2ece8d5a-4d15-48a1-b510-77e665fa0749\tPset_EnvironmentalImpactIndicators.NonHazardousWastePerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\t31fa257c-1370-47b8-9c62-653300ed931c\tPset_EnvironmentalImpactIndicators.NonRenewableEnergyConsumptionPerUnit[Type]\tNUMBER\t\t300\t1\tIfcEnergyMeasure\t1\nPARAM\t7bc2480c-da7e-4d40-8860-d882c271f976\tPset_EnvironmentalImpactIndicators.PhotochemicalOzoneFormationPerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\taeaa7f5d-922f-408b-9b47-28fb37b6a4e8\tPset_EnvironmentalImpactIndicators.RadioactiveWastePerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\tdea8caf5-57ee-49de-8ad0-d3a4d584dfa7\tPset_EnvironmentalImpactIndicators.Reference[Type]\tTEXT\t\t300\t1\tIfcIdentifier\t1\nPARAM\tb9abcd98-3b29-4a80-9bdb-56ca4492ba38\tPset_EnvironmentalImpactIndicators.RenewableEnergyConsumptionPerUnit[Type]\tNUMBER\t\t300\t1\tIfcEnergyMeasure\t1\nPARAM\tf45c77d0-f58f-497b-af58-1fda207bc557\tPset_EnvironmentalImpactIndicators.ResourceDepletionPerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\tc85fb7e4-403a-41e2-b2a1-72caf299a056\tPset_EnvironmentalImpactIndicators.StratosphericOzoneLayerDestructionPerUnit[Type]\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\tc9c82999-b2ff-493a-8afb-ff91a2086013\tPset_EnvironmentalImpactIndicators.TotalPrimaryEnergyConsumptionPerUnit[Type]\tNUMBER\t\t300\t1\tIfcEnergyMeasure\t1\nPARAM\t1a5dd29a-ad7c-41e7-a134-64e5915305f6\tPset_EnvironmentalImpactIndicators.Unit[Type]\tTEXT\t\t300\t1\tIfcText\t1\nPARAM\tcb3113b4-b5e9-4162-a159-fd784c268ab2\tPset_EnvironmentalImpactIndicators.WaterConsumptionPerUnit[Type]\tVOLUME\t\t300\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t301\tPset_EnvironmentalImpactValues\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfacaa2b8-860d-4cf5-bed4-dc0f78e4e670\tPset_EnvironmentalImpactValues.AtmosphericAcidification[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t8ae93962-3332-45f8-9d44-d478b646a0fa\tPset_EnvironmentalImpactValues.ClimateChange[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t8aae7f49-14a0-4f3d-8616-4685f9bd9400\tPset_EnvironmentalImpactValues.Duration[Type]\tTEXT\t\t301\t1\tIfcDuration\t1\nPARAM\tefd5f2fb-78bd-49a1-a175-1b60d16daca6\tPset_EnvironmentalImpactValues.Eutrophication[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t6a3675c7-8295-4edc-86c2-7684d0297089\tPset_EnvironmentalImpactValues.HazardousWaste[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t82255ec4-9b19-4215-9d6a-835deedd61f3\tPset_EnvironmentalImpactValues.InertWaste[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\te4549a76-c69d-4eb1-b9a6-a02cfbf9ff53\tPset_EnvironmentalImpactValues.LeadInTime[Type]\tTEXT\t\t301\t1\tIfcDuration\t1\nPARAM\t768696be-5d13-495f-a7e5-2f664fb2dfd5\tPset_EnvironmentalImpactValues.LeadOutTime[Type]\tTEXT\t\t301\t1\tIfcDuration\t1\nPARAM\t7c894a43-a1f4-47b6-b0b3-c699c81e9f29\tPset_EnvironmentalImpactValues.NonHazardousWaste[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t1e57f1e9-53af-4ed6-a984-75d8638e1cf2\tPset_EnvironmentalImpactValues.NonRenewableEnergyConsumption[Type]\tNUMBER\t\t301\t1\tIfcEnergyMeasure\t1\nPARAM\tf9ab6bdb-7110-4f76-98f3-911e94e474e6\tPset_EnvironmentalImpactValues.PhotochemicalOzoneFormation[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t6865a0ee-8c20-4a3f-bf92-c507d52ec6a7\tPset_EnvironmentalImpactValues.RadioactiveWaste[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\taee6a30c-8fee-4f14-9fb1-3bd962c91b97\tPset_EnvironmentalImpactValues.RenewableEnergyConsumption[Type]\tNUMBER\t\t301\t1\tIfcEnergyMeasure\t1\nPARAM\t7760c3b7-6602-4099-9c15-739a0bcc3c80\tPset_EnvironmentalImpactValues.ResourceDepletion[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t76937367-c37e-4811-80ec-e0f4bb5aae9c\tPset_EnvironmentalImpactValues.StratosphericOzoneLayerDestruction[Type]\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\tbe11b9d0-0bcb-4893-aa9b-3fc738c00de1\tPset_EnvironmentalImpactValues.TotalPrimaryEnergyConsumption[Type]\tNUMBER\t\t301\t1\tIfcEnergyMeasure\t1\nPARAM\t4314f3b1-306b-4e89-ab27-d52c0b1b0741\tPset_EnvironmentalImpactValues.WaterConsumption[Type]\tVOLUME\t\t301\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t302\tPset_EvaporativeCoolerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb6971c07-50d2-4539-8485-84b979c9f748\tPset_EvaporativeCoolerPHistory.AirPressureDropCurve[Type]\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\nPARAM\te1ae9e6e-7c36-46d5-89a9-208fe7fd32ee\tPset_EvaporativeCoolerPHistory.Effectiveness[Type]\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\nPARAM\t69f3f737-1b05-4085-aec4-011a2f40d185\tPset_EvaporativeCoolerPHistory.EffectivenessTable[Type]\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\nPARAM\t5fd3f9c2-ffbe-4a5b-838a-53aed287054e\tPset_EvaporativeCoolerPHistory.LatentHeatTransferRate[Type]\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\nPARAM\t1897793a-37c7-412f-869c-936bb487a9c0\tPset_EvaporativeCoolerPHistory.SensibleHeatTransferRate[Type]\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\nPARAM\t7f6d3dae-4a6e-4e55-b87f-749db54b6d66\tPset_EvaporativeCoolerPHistory.TotalHeatTransferRate[Type]\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\nPARAM\t83fcdcdc-a984-49ad-9513-e70447df5a63\tPset_EvaporativeCoolerPHistory.WaterPressDropCurve[Type]\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\nPARAM\tde3b7ce1-6188-4b9a-add8-dbb77822117a\tPset_EvaporativeCoolerPHistory.WaterSumpTemperature[Type]\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\n#\nGROUP\t303\tPset_EvaporativeCoolerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7dac8738-a984-440d-9960-5a8cfaaa07d4\tPset_EvaporativeCoolerTypeCommon.AirPressureDropCurve[Type]\tMULTILINETEXT\t\t303\t1\tPropertyTableValue\t1\nPARAM\t304478c7-f437-4cea-99ca-c512078c452a\tPset_EvaporativeCoolerTypeCommon.EffectivenessTable[Type]\tMULTILINETEXT\t\t303\t1\tPropertyTableValue\t1\nPARAM\tdda00dc0-8d68-4742-b110-bf86b1038ed5\tPset_EvaporativeCoolerTypeCommon.FlowArrangement[Type]\tTEXT\t\t303\t1\tPEnum_EvaporativeCoolerFlowArrangement\t1\nPARAM\td3097cf7-f04e-4d3b-8730-7af7047595f2\tPset_EvaporativeCoolerTypeCommon.HeatExchangeArea[Type]\tAREA\t\t303\t1\tIfcAreaMeasure\t1\nPARAM\t96fa0ddd-5f71-4389-a4a3-086201abb07d\tPset_EvaporativeCoolerTypeCommon.HeatExchangerMediaMaterials[Type]\tMULTILINETEXT\t\t303\t1\tIfcMaterial\t1\nPARAM\t221b314b-7d49-4412-8593-d1bfa6c4d2f3\tPset_EvaporativeCoolerTypeCommon.OperationTemperatureRange[Type]\tMULTILINETEXT\t\t303\t1\tPropertyBoundedValue\t1\nPARAM\te74c8458-eb2b-4261-b92a-644709ab549d\tPset_EvaporativeCoolerTypeCommon.Reference[Type]\tTEXT\t\t303\t1\tIfcIdentifier\t1\nPARAM\tb519cf7e-4a4f-488e-92d2-177324247de3\tPset_EvaporativeCoolerTypeCommon.Status[Type]\tTEXT\t\t303\t1\tPEnum_ElementStatus\t1\nPARAM\t7728d7b4-8380-49e5-aa4c-7a0140cce8f4\tPset_EvaporativeCoolerTypeCommon.WaterPressDropCurve[Type]\tMULTILINETEXT\t\t303\t1\tPropertyTableValue\t1\nPARAM\te6f45d0a-4643-4702-9ed2-a97f8e68730f\tPset_EvaporativeCoolerTypeCommon.WaterRequirement[Type]\tNUMBER\t\t303\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t2359bf75-2493-4338-8312-3818655d3194\tPset_EvaporativeCoolerTypeCommon.Weight[Type]\tNUMBER\t\t303\t1\tIfcMassMeasure\t1\n#\nGROUP\t304\tPset_EvaporatorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t543b972c-6226-4ecd-b656-d61a08cb3e15\tPset_EvaporatorPHistory.CompressorEvaporatorHeatGain[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\t255c4db4-c934-4ecb-93b6-2fe39036546a\tPset_EvaporatorPHistory.CompressorEvaporatorPressureDrop[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\t7dff761e-7186-4c45-9873-676e8cfdbca3\tPset_EvaporatorPHistory.EvaporatingTemperature[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\t82df70a6-ba35-46c8-aa9c-9e64ab154391\tPset_EvaporatorPHistory.EvaporatorMeanVoidFraction[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\t6e50589e-a3fa-46e5-a5af-66f79b13f030\tPset_EvaporatorPHistory.ExteriorHeatTransferCoefficient[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\t1df5c552-4518-43fe-a83b-ff23fd9c394a\tPset_EvaporatorPHistory.HeatRejectionRate[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\taa6ee048-0b94-4508-abbb-46dd28a89a27\tPset_EvaporatorPHistory.InteriorHeatTransferCoefficient[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\t6c6a856d-5059-442c-bb9a-a611b44b42d6\tPset_EvaporatorPHistory.LogarithmicMeanTemperatureDifference[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\t48444ca9-479d-446d-a5e3-74790d390d49\tPset_EvaporatorPHistory.RefrigerantFoulingResistance[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\ta102893f-b722-432c-abf8-2cecb604b7ce\tPset_EvaporatorPHistory.RefrigrerantFoulingResistance[Type]\tNUMBER\t\t304\t1\tIfcReal\t1\nPARAM\t8c18f955-b228-4fdc-b3c6-dd6f508cde70\tPset_EvaporatorPHistory.UAcurves[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\te9601450-bb16-4e5b-9b55-c908b1fdfb7e\tPset_EvaporatorPHistory.WaterFoulingResistance[Type]\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\n#\nGROUP\t305\tPset_EvaporatorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t252f7b79-b22f-41b2-a6d9-0afbd757e196\tPset_EvaporatorTypeCommon.EvaporatorCoolant[Type]\tTEXT\t\t305\t1\tPEnum_EvaporatorCoolant\t1\nPARAM\t50a63a97-458d-404e-b0bb-d666331bab7a\tPset_EvaporatorTypeCommon.EvaporatorMediumType[Type]\tTEXT\t\t305\t1\tPEnum_EvaporatorMediumType\t1\nPARAM\t4cbf26bb-7b19-4d77-af28-9fa2ea73dc50\tPset_EvaporatorTypeCommon.ExternalSurfaceArea[Type]\tAREA\t\t305\t1\tIfcAreaMeasure\t1\nPARAM\ta60c360e-eb26-4187-8402-91bc94183baf\tPset_EvaporatorTypeCommon.InternalRefrigerantVolume[Type]\tVOLUME\t\t305\t1\tIfcVolumeMeasure\t1\nPARAM\tfae07707-46dd-4238-a319-7cb7d5b550cf\tPset_EvaporatorTypeCommon.InternalSurfaceArea[Type]\tAREA\t\t305\t1\tIfcAreaMeasure\t1\nPARAM\t5c480298-e221-42be-9b9f-efb5b6b22358\tPset_EvaporatorTypeCommon.InternalWaterVolume[Type]\tVOLUME\t\t305\t1\tIfcVolumeMeasure\t1\nPARAM\tfe416e1c-52ba-4a5f-a846-88d6f064e7ed\tPset_EvaporatorTypeCommon.NominalHeatTransferArea[Type]\tAREA\t\t305\t1\tIfcAreaMeasure\t1\nPARAM\t3c290506-1c2e-4600-9786-5f7e459bc832\tPset_EvaporatorTypeCommon.NominalHeatTransferCoefficient[Type]\tNUMBER\t\t305\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t9ac7cb3f-0b84-4196-adfd-ce5efab6d09e\tPset_EvaporatorTypeCommon.Reference[Type]\tTEXT\t\t305\t1\tIfcIdentifier\t1\nPARAM\t50de116a-7888-4eeb-bac7-693faea52036\tPset_EvaporatorTypeCommon.RefrigerantClass[Type]\tTEXT\t\t305\t1\tPEnum_RefrigerantClass\t1\nPARAM\t68332a8a-9ba3-4bee-bb09-209909b44de7\tPset_EvaporatorTypeCommon.RefrigerantType[Type]\tMULTILINETEXT\t\t305\t1\tIfcMaterial\t1\nPARAM\t37b93835-5ce4-4aba-8924-c9439562c06b\tPset_EvaporatorTypeCommon.Status[Type]\tTEXT\t\t305\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t306\tPset_FanCentrifugal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t90f9396f-78e0-4736-8c8c-b623d6e72e8c\tPset_FanCentrifugal.Arrangement[Type]\tTEXT\t\t306\t1\tPEnum_CentrifugalFanArrangement\t1\nPARAM\t5aa2f8d1-8844-4efe-a2e7-bac835ca7843\tPset_FanCentrifugal.DirectionOfRotation[Type]\tTEXT\t\t306\t1\tPEnum_CentrifugalFanRotation\t1\nPARAM\t5ba0dfd5-7c8a-4863-88e3-41101b3b45b8\tPset_FanCentrifugal.DischargePosition[Type]\tTEXT\t\t306\t1\tPEnum_CentrifugalFanDischargePosition\t1\nPARAM\t8d4ccf98-875f-4952-b3f1-ee50e4394eca\tPset_FanCentrifugal.FanArrangement[Type]\tTEXT\t\t306\t1\tPEnum_CentrifugalFanArrangement\t1\n#\nGROUP\t307\tPset_FanOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t78c95df0-f2d5-4b53-a897-86a6b8d08c2b\tPset_FanOccurrence.ApplicationOfFan[Type]\tTEXT\t\t307\t1\tPEnum_FanApplicationType\t1\nPARAM\t3c3d323d-20b2-4080-983a-fba3cad59b97\tPset_FanOccurrence.CoilPosition[Type]\tTEXT\t\t307\t1\tPEnum_FanCoilPosition\t1\nPARAM\tefd72789-15ed-46c9-b4e6-1e9604862e15\tPset_FanOccurrence.DischargeType[Type]\tTEXT\t\t307\t1\tPEnum_FanDischargeType\t1\nPARAM\tfdc964df-8a35-4e0e-8787-653416bdd1c8\tPset_FanOccurrence.FanMountingType[Type]\tTEXT\t\t307\t1\tPEnum_FanMountingType\t1\nPARAM\tec836df0-89f0-4171-ae51-0182f68244ce\tPset_FanOccurrence.FractionOfMotorHeatToAirStream[Type]\tNUMBER\t\t307\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\te0813554-6a2e-4aa3-99b1-e5c61e40e278\tPset_FanOccurrence.ImpellerDiameter[Type]\tLENGTH\t\t307\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9251940c-8840-4f88-a125-f60fc8ba1fc0\tPset_FanOccurrence.MotorPosition[Type]\tTEXT\t\t307\t1\tPEnum_FanMotorPosition\t1\n#\nGROUP\t308\tPset_FanPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6aa3fce9-fae3-4186-8d09-0411897af2db\tPset_FanPHistory.DischargePressureLoss[Type]\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\tb6c6e214-7589-434b-8b9e-7e70d53fa3c3\tPset_FanPHistory.DischargeVelocity[Type]\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\taccafe6b-14a3-4267-93e9-6fddc2847f80\tPset_FanPHistory.DrivePowerLoss[Type]\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\tb4a94c4f-5cda-46c8-a536-86ab783b0dc5\tPset_FanPHistory.EfficiencyCurve[Type]\tMULTILINETEXT\t\t308\t1\tPropertyTableValue\t1\nPARAM\tf7bb7d6c-3aff-4e9b-a022-7756f5be6f12\tPset_FanPHistory.FanEfficiency[Type]\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\tab8ce112-0772-4900-b94f-78d9d09448d1\tPset_FanPHistory.FanPowerRate[Type]\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\ta01a4573-9eea-47f3-b263-533d790ce992\tPset_FanPHistory.FanRotationSpeed[Type]\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\tb133b690-7c6c-4a21-9df0-adae97179009\tPset_FanPHistory.OverallEfficiency[Type]\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\tf4bec7e0-51f6-492d-ad44-67f62662661c\tPset_FanPHistory.PressureCurve[Type]\tMULTILINETEXT\t\t308\t1\tPropertyTableValue\t1\nPARAM\t2012f034-f651-412d-ac3c-0b4fd2f72033\tPset_FanPHistory.ShaftPowerRate[Type]\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\t77684b85-0fa9-4f8e-9aa6-396da5957ae1\tPset_FanPHistory.WheelTipSpeed[Type]\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\n#\nGROUP\t309\tPset_FanTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t898192cb-9c5e-4148-8ed8-a7b917d05aca\tPset_FanTypeCommon.CapacityControlType[Type]\tTEXT\t\t309\t1\tPEnum_FanCapacityControlType\t1\nPARAM\te70cb649-1903-4d32-ad7f-4b2edb739ad9\tPset_FanTypeCommon.EfficiencyCurve[Type]\tMULTILINETEXT\t\t309\t1\tPropertyTableValue\t1\nPARAM\te513b780-22d1-44fb-9e39-e36a531ed9bf\tPset_FanTypeCommon.HousingMaterial[Type]\tMULTILINETEXT\t\t309\t1\tIfcMaterial\t1\nPARAM\t4a498388-eedf-4543-b93d-901f07182743\tPset_FanTypeCommon.MotorDriveType[Type]\tTEXT\t\t309\t1\tPEnum_FanMotorConnectionType\t1\nPARAM\t0afec59b-cafe-4d88-8761-6aa4826733e2\tPset_FanTypeCommon.NominalAirFlowRate[Type]\tNUMBER\t\t309\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tb17202de-4ebf-44ee-bc03-41fc1763f9d0\tPset_FanTypeCommon.NominalPowerRate[Type]\tNUMBER\t\t309\t1\tIfcPowerMeasure\t1\nPARAM\ta8c6c86e-73bf-4372-b4ae-c0aa9d55e540\tPset_FanTypeCommon.NominalRotationSpeed[Type]\tNUMBER\t\t309\t1\tIfcRotationalFrequencyMeasure\t1\nPARAM\tdaadde6b-ca10-4546-bef5-9be68203cb7a\tPset_FanTypeCommon.NominalStaticPressure[Type]\tNUMBER\t\t309\t1\tIfcPressureMeasure\t1\nPARAM\t81737135-efef-4844-9aff-4d78d069725c\tPset_FanTypeCommon.NominalTotalPressure[Type]\tNUMBER\t\t309\t1\tIfcPressureMeasure\t1\nPARAM\t6918da5a-7cfb-4038-b912-59b6194cd72a\tPset_FanTypeCommon.OperationalCriteria[Type]\tNUMBER\t\t309\t1\tIfcTimeMeasure\t1\nPARAM\t8ae70db8-a3e5-4d12-8e33-6b72948c7af5\tPset_FanTypeCommon.OperationTemperatureRange[Type]\tMULTILINETEXT\t\t309\t1\tPropertyBoundedValue\t1\nPARAM\t9625c23d-2848-43f6-800e-33610ce68495\tPset_FanTypeCommon.PressureCurve[Type]\tMULTILINETEXT\t\t309\t1\tPropertyTableValue\t1\nPARAM\t27fec5cf-a11d-4ec2-b8ce-f075ffd4bb66\tPset_FanTypeCommon.Reference[Type]\tTEXT\t\t309\t1\tIfcIdentifier\t1\nPARAM\t7406e870-1603-4468-9075-a1fb8006eba3\tPset_FanTypeCommon.Status[Type]\tTEXT\t\t309\t1\tPEnum_ElementStatus\t1\nPARAM\tc8fdf253-a95e-412a-8f7f-cb140d3f2bf1\tPset_FanTypeCommon.Weight[Type]\tNUMBER\t\t309\t1\tIfcMassMeasure\t1\nPARAM\t45aebad3-b118-48ec-bbd1-9f5a5ff3cd33\tPset_FanTypeCommon.WheelMaterial[Type]\tMULTILINETEXT\t\t309\t1\tIfcMaterial\t1\n#\nGROUP\t310\tPset_FanTypeSmokeControl\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdd6bcef2-caf2-48c1-9f7a-366465df8176\tPset_FanTypeSmokeControl.MaximumDesignTemperature[Type]\tNUMBER\t\t310\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t0b4f51ce-8e2a-46d2-8709-d7f0b39f967f\tPset_FanTypeSmokeControl.OperationalCriteria[Type]\tNUMBER\t\t310\t1\tIfcTimeMeasure\t1\nPARAM\td7ee2dc5-b342-4a22-801f-d20acce722b6\tPset_FanTypeSmokeControl.SmokeControlFlowrate[Type]\tNUMBER\t\t310\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t311\tPset_FastenerRailWeld\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1693d6b3-ddd8-4bab-b599-592dd112de7b\tPset_FastenerRailWeld.AssemblyPlace[Type]\tTEXT\t\t311\t1\tPEnum_AssemblyPlace\t1\nPARAM\tc4665d91-1788-43b2-9311-998df4d901b0\tPset_FastenerRailWeld.IsLiftingBracket[Type]\tYESNO\t\t311\t1\tIfcBoolean\t1\nPARAM\t0bc66d39-030f-480b-8ff2-efb73855cb8c\tPset_FastenerRailWeld.JointRelativePosition[Type]\tTEXT\t\t311\t1\tPEnum_RelativePosition\t1\nPARAM\td7098bcb-5faf-40c6-98d2-0f0d192e1913\tPset_FastenerRailWeld.TemperatureDuringInstallation[Type]\tNUMBER\t\t311\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t312\tPset_FastenerWeld\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb41aa474-6bb7-4964-9dda-c153eaa946b3\tPset_FastenerWeld.a[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf01f0922-2428-4ec5-ba5c-d9473807e182\tPset_FastenerWeld.c[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t866b9f65-e30e-482a-9006-2ab9b73ea111\tPset_FastenerWeld.d[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9e961fa0-cdb0-4e33-9627-78eb7a6b2433\tPset_FastenerWeld.DeepPenetrationThroatThickness[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2eed70b9-d512-491a-930e-bcdff312a7c4\tPset_FastenerWeld.e[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4b137546-bca2-4212-a8a7-e6af3a2afcd7\tPset_FastenerWeld.Intermittent[Type]\tYESNO\t\t312\t1\tIfcBoolean\t1\nPARAM\teaaf51d4-5289-4471-b0e1-9602e4330aed\tPset_FastenerWeld.l[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t65f1a2b6-4cad-4057-bd2b-e66571648390\tPset_FastenerWeld.n[Type]\tINTEGER\t\t312\t1\tIfcCountMeasure\t1\nPARAM\tc614c797-5ba5-4e33-b124-4fac880dbdc1\tPset_FastenerWeld.NominalThroatThickness[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t73c970be-293c-4748-96f1-af61ae81a3e6\tPset_FastenerWeld.NumberOfWeldElements[Type]\tINTEGER\t\t312\t1\tIfcCountMeasure\t1\nPARAM\t310caa61-2b3f-4edf-bb4c-684243890437\tPset_FastenerWeld.Process[Type]\tINTEGER\t\t312\t1\tIfcInteger\t1\nPARAM\t8aaac216-4078-4865-aa0d-1919fc81c7c2\tPset_FastenerWeld.ProcessName[Type]\tTEXT\t\t312\t1\tIfcLabel\t1\nPARAM\t0731d4e4-fa58-4076-a92a-fbae9ab7f848\tPset_FastenerWeld.s[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t510b3c43-753c-4d19-96f3-40ccde8fe538\tPset_FastenerWeld.Staggered[Type]\tYESNO\t\t312\t1\tIfcBoolean\t1\nPARAM\ta5055df2-e085-4f9c-9704-c2f03bf019f5\tPset_FastenerWeld.Surface1[Type]\tTEXT\t\t312\t1\tIfcLabel\t1\nPARAM\t2fc7d7b3-336c-4fec-a9c8-1ad9efb063ce\tPset_FastenerWeld.Surface2[Type]\tTEXT\t\t312\t1\tIfcLabel\t1\nPARAM\tb2c8ca5f-df63-442b-9659-93fb2c6f6801\tPset_FastenerWeld.Type1[Type]\tTEXT\t\t312\t1\tIfcLabel\t1\nPARAM\t78489e20-3138-4886-876b-1104af47fdf4\tPset_FastenerWeld.Type2[Type]\tTEXT\t\t312\t1\tIfcLabel\t1\nPARAM\t1fe1622d-8151-4fef-8e3e-1d56e85c31b2\tPset_FastenerWeld.WeldDiameter[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t68dcea85-e8e5-4e47-b08c-688dd5a581e1\tPset_FastenerWeld.WeldElementLength[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t63e86cdb-4cbe-41ec-aabe-10957e9203e0\tPset_FastenerWeld.WeldElementSpacing[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6d7a6c67-d9fc-4223-9566-9c1b72c02041\tPset_FastenerWeld.WeldLegLength[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6c9feefc-a1ba-4814-b773-28724cba968d\tPset_FastenerWeld.WeldWidth[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0709adc8-3d27-4ed4-b7af-9cef4cebddde\tPset_FastenerWeld.z[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t313\tPset_FenderCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tccfd1a8a-1231-4a16-80aa-cd65c3c5824f\tPset_FenderCommon.CoefficientOfFriction[Type]\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t10c12eb1-f99e-4202-ab37-1629aa0e7092\tPset_FenderCommon.EnergyAbsorption[Type]\tNUMBER\t\t313\t1\tIfcEnergyMeasure\t1\nPARAM\t3d86ea78-5dd8-4290-9f13-b8a692e2b29c\tPset_FenderCommon.EnergyAbsorptionTolerance[Type]\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7992bae3-ba24-4f66-967f-28ee780917a6\tPset_FenderCommon.FenderType[Type]\tTEXT\t\t313\t1\tPEnum_FenderType\t1\nPARAM\ta28f23b7-019e-4e8b-b711-80dbc345f2d4\tPset_FenderCommon.MaximumTemperatureFactor[Type]\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0e8ae3ec-67f7-4f39-abc2-a29cb5b27770\tPset_FenderCommon.MaxReaction[Type]\tNUMBER\t\t313\t1\tIfcForceMeasure\t1\nPARAM\t24f0b8ea-5dd2-418c-8d94-83fa84d91d88\tPset_FenderCommon.MaxReactionTolerance[Type]\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4b9e0e09-6ee7-442e-88b1-63834d7a48b7\tPset_FenderCommon.MinimumTemperatureFactor[Type]\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4642bef7-57f9-4f95-a7d0-8cbd19231fd6\tPset_FenderCommon.VelocityFactorEnergy[Type]\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta90a29bc-a437-4acb-936f-4f7d44588d17\tPset_FenderCommon.VelocityFactorReaction[Type]\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t314\tPset_FenderDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4e81e08a-2a23-4b67-a7fd-030e120a6031\tPset_FenderDesignCriteria.AddedMassCoefficientMethod[Type]\tTEXT\t\t314\t1\tPEnum_AddedMassCoefficientMethod\t1\nPARAM\t326fb3ff-2039-4a40-b6a9-ad98a7a0cc0f\tPset_FenderDesignCriteria.CoefficientOfFriction[Type]\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t727a5d92-8419-47b7-8fc5-4825f8de3b3c\tPset_FenderDesignCriteria.EnergyAbsorption[Type]\tNUMBER\t\t314\t1\tIfcEnergyMeasure\t1\nPARAM\tfd54088d-832d-4164-9d21-f1810a83ca7e\tPset_FenderDesignCriteria.EnergyAbsorptionTolerance[Type]\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td92e4c3b-8512-46f3-a2f0-406f9d83efca\tPset_FenderDesignCriteria.MaximumTemperatureFactor[Type]\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc80f2457-08eb-4c89-b234-26463f7ea67f\tPset_FenderDesignCriteria.MaxReaction[Type]\tNUMBER\t\t314\t1\tIfcForceMeasure\t1\nPARAM\t4b1e3a13-ce5c-43bd-8fc5-81343c55cba4\tPset_FenderDesignCriteria.MaxReactionTolerance[Type]\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf8607a49-9fa9-4bbe-8a9d-fc6634add7b8\tPset_FenderDesignCriteria.MinCompressedFenderHeight[Type]\tLENGTH\t\t314\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td82d34e7-135c-47c4-abb5-e74493256c6e\tPset_FenderDesignCriteria.MinimumTemperatureFactor[Type]\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4ab23e75-9547-4e7c-8208-e075e52cf49c\tPset_FenderDesignCriteria.VelocityFactorEnergy[Type]\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t26efe113-6ef9-486e-9d5d-02c9b24d5c46\tPset_FenderDesignCriteria.VelocityFactorReaction[Type]\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t315\tPset_FilterPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t028b583c-0227-4e49-bf3b-3db51dc708aa\tPset_FilterPHistory.CountedEfficiency[Type]\tMULTILINETEXT\t\t315\t1\tIfcTimeSeries\t1\nPARAM\t4b229224-4762-42cc-864b-750e07af4455\tPset_FilterPHistory.ParticleMassHolding[Type]\tMULTILINETEXT\t\t315\t1\tIfcTimeSeries\t1\nPARAM\t9c238c11-f206-4994-ba98-c7b48768425d\tPset_FilterPHistory.WeightedEfficiency[Type]\tMULTILINETEXT\t\t315\t1\tIfcTimeSeries\t1\n#\nGROUP\t316\tPset_FilterTypeAirParticleFilter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta121e93d-c2a8-49be-92d8-d6e40438d057\tPset_FilterTypeAirParticleFilter.AirParticleFilterType[Type]\tTEXT\t\t316\t1\tPEnum_FilterAirParticleFilterType\t1\nPARAM\tb5d0e27f-2450-4141-b8fd-673617aa7e62\tPset_FilterTypeAirParticleFilter.CountedEfficiencyCurve[Type]\tMULTILINETEXT\t\t316\t1\tPropertyTableValue\t1\nPARAM\t713fa641-34c5-4a37-ac6f-16b6460b675e\tPset_FilterTypeAirParticleFilter.DustHoldingCapacity[Type]\tNUMBER\t\t316\t1\tIfcMassMeasure\t1\nPARAM\t5cb0dcda-e21f-4a4c-8fd6-bf6784cdde33\tPset_FilterTypeAirParticleFilter.FaceSurfaceArea[Type]\tAREA\t\t316\t1\tIfcAreaMeasure\t1\nPARAM\tf41877ab-4e93-439b-970c-913d9271f072\tPset_FilterTypeAirParticleFilter.FrameMaterial[Type]\tMULTILINETEXT\t\t316\t1\tIfcMaterialDefinition\t1\nPARAM\t1f8582ea-f0c0-4b22-b7e5-50e4a1818730\tPset_FilterTypeAirParticleFilter.MediaExtendedArea[Type]\tAREA\t\t316\t1\tIfcAreaMeasure\t1\nPARAM\tc4bcfc71-7428-4385-a0de-b388349e6ae3\tPset_FilterTypeAirParticleFilter.MediaMaterial[Type]\tMULTILINETEXT\t\t316\t1\tIfcMaterial\t1\nPARAM\te845d8e9-f681-498c-86e9-f6265eeefaad\tPset_FilterTypeAirParticleFilter.NominalCountedEfficiency[Type]\tNUMBER\t\t316\t1\tIfcReal\t1\nPARAM\t1d801f9e-c688-46ed-bd41-840b57fed416\tPset_FilterTypeAirParticleFilter.NominalWeightedEfficiency[Type]\tNUMBER\t\t316\t1\tIfcReal\t1\nPARAM\te58593e2-aef1-4acf-aa01-ebe84fefe9e3\tPset_FilterTypeAirParticleFilter.PressureDropCurve[Type]\tMULTILINETEXT\t\t316\t1\tPropertyTableValue\t1\nPARAM\tec4cb485-76bc-4901-b2e6-848dd40b464a\tPset_FilterTypeAirParticleFilter.SeparationType[Type]\tTEXT\t\t316\t1\tPEnum_FilterAirParticleFilterSeparationType\t1\nPARAM\t6248357d-939d-4993-926e-1000651d2830\tPset_FilterTypeAirParticleFilter.WeightedEfficiencyCurve[Type]\tMULTILINETEXT\t\t316\t1\tPropertyTableValue\t1\n#\nGROUP\t317\tPset_FilterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t27ea7232-cdc3-4ebd-bb95-5e8ffe8ae802\tPset_FilterTypeCommon.FinalResistance[Type]\tNUMBER\t\t317\t1\tIfcPressureMeasure\t1\nPARAM\t16108c78-346c-41ec-af08-c69766acd7c5\tPset_FilterTypeCommon.FlowRateRange[Type]\tMULTILINETEXT\t\t317\t1\tPropertyBoundedValue\t1\nPARAM\t2df85bca-a274-401e-919f-1cbcdf5c2b08\tPset_FilterTypeCommon.InitialResistance[Type]\tNUMBER\t\t317\t1\tIfcPressureMeasure\t1\nPARAM\tcfbdeab1-1239-4e35-b67d-d1665dc53414\tPset_FilterTypeCommon.MediaMaterial[Type]\tMULTILINETEXT\t\t317\t1\tIfcMaterial\t1\nPARAM\t28d9acfa-acdb-4f8c-bc55-299b60d6becf\tPset_FilterTypeCommon.NominalFilterFaceVelocity[Type]\tNUMBER\t\t317\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t010bd9a9-99ca-44a2-84ae-165c756ea885\tPset_FilterTypeCommon.NominalFlowrate[Type]\tNUMBER\t\t317\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t1f9d172e-0cc6-44d9-8f29-8da41139e99a\tPset_FilterTypeCommon.NominalMediaSurfaceVelocity[Type]\tNUMBER\t\t317\t1\tIfcLinearVelocityMeasure\t1\nPARAM\ta09ddf90-65ea-4b6b-b254-1edadb23eff8\tPset_FilterTypeCommon.NominalParticleGeometricMeanDiameter[Type]\tLENGTH\t\t317\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7bc8b394-6b07-465f-92bd-5cf3d1d6133f\tPset_FilterTypeCommon.NominalParticleGeometricStandardDeviation[Type]\tNUMBER\t\t317\t1\tIfcReal\t1\nPARAM\tff1be252-6ecd-4e1b-861b-030c9fcad7ea\tPset_FilterTypeCommon.NominalPressureDrop[Type]\tNUMBER\t\t317\t1\tIfcPressureMeasure\t1\nPARAM\t047d467c-089d-4781-9d99-cb463fc685e5\tPset_FilterTypeCommon.OperationTemperatureRange[Type]\tMULTILINETEXT\t\t317\t1\tPropertyBoundedValue\t1\nPARAM\t3dd76bc5-69e1-4e83-87ac-e2539c80f285\tPset_FilterTypeCommon.Reference[Type]\tTEXT\t\t317\t1\tIfcIdentifier\t1\nPARAM\t858abe79-a5f4-4f4d-bf77-0e5b8b371af7\tPset_FilterTypeCommon.Status[Type]\tTEXT\t\t317\t1\tPEnum_ElementStatus\t1\nPARAM\t843d4057-d8bd-4ea5-93d3-3488cd40dfa8\tPset_FilterTypeCommon.Weight[Type]\tNUMBER\t\t317\t1\tIfcMassMeasure\t1\n#\nGROUP\t318\tPset_FilterTypeCompressedAirFilter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a16f104-3d2a-4522-9e2a-ec3fc00436aa\tPset_FilterTypeCompressedAirFilter.AutomaticCondensateDischarge[Type]\tYESNO\t\t318\t1\tIfcBoolean\t1\nPARAM\tcf240f17-7daa-4f14-ae85-dee7fc8e8faf\tPset_FilterTypeCompressedAirFilter.CloggingIndicator[Type]\tYESNO\t\t318\t1\tIfcBoolean\t1\nPARAM\t052ddd96-7478-457f-9315-9c07215b5efc\tPset_FilterTypeCompressedAirFilter.CompressedAirFilterType[Type]\tTEXT\t\t318\t1\tPEnum_CompressedAirFilterType\t1\nPARAM\t4f542a5d-7403-4db1-b703-08b3d9fdfdde\tPset_FilterTypeCompressedAirFilter.OperationPressureMax[Type]\tNUMBER\t\t318\t1\tIfcPressureMeasure\t1\nPARAM\t29fef582-6a27-46e7-88c0-cbe8ba473414\tPset_FilterTypeCompressedAirFilter.ParticleAbsorptionCurve[Type]\tMULTILINETEXT\t\t318\t1\tPropertyTableValue\t1\n#\nGROUP\t319\tPset_FilterTypeWaterFilter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t232753e8-26e6-429a-8e00-7591d518dc9e\tPset_FilterTypeWaterFilter.WaterFilterType[Type]\tTEXT\t\t319\t1\tPEnum_FilterWaterFilterType\t1\n#\nGROUP\t320\tPset_FireRatingProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t107b35cc-c3ee-46ee-b3bd-5a6212c6ec33\tPset_FireRatingProperties.FireResistanceRating[Type]\tTEXT\t\t320\t1\tIfcLabel\t1\nPARAM\t00d8d8a1-f432-4d5b-9f25-32233096ba87\tPset_FireRatingProperties.IsCombustible[Type]\tYESNO\t\t320\t1\tIfcBoolean\t1\nPARAM\t4cd8886a-bb49-4fda-a493-946155d39c1f\tPset_FireRatingProperties.SurfaceSpreadOfFlame[Type]\tTEXT\t\t320\t1\tIfcLabel\t1\n#\nGROUP\t321\tPset_FireSuppressionTerminalTypeBreechingInlet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a0ccf59-58ab-4bbc-ae02-68bf9903eb5c\tPset_FireSuppressionTerminalTypeBreechingInlet.BreechingInletType[Type]\tTEXT\t\t321\t1\tPEnum_BreechingInletType\t1\nPARAM\tf4d7719a-2307-4d9e-821f-5d5bfb013227\tPset_FireSuppressionTerminalTypeBreechingInlet.CouplingType[Type]\tTEXT\t\t321\t1\tPEnum_BreechingInletCouplingType\t1\nPARAM\t0aeb71b0-cfe3-4017-ac43-6073b40f16c4\tPset_FireSuppressionTerminalTypeBreechingInlet.HasCaps[Type]\tYESNO\t\t321\t1\tIfcBoolean\t1\nPARAM\t8bffa8ca-8c0b-4052-a089-ffc85323ef40\tPset_FireSuppressionTerminalTypeBreechingInlet.InletDiameter[Type]\tLENGTH\t\t321\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5cd92a52-6bde-40a1-93d3-439e1babe954\tPset_FireSuppressionTerminalTypeBreechingInlet.Material[Type]\tMULTILINETEXT\t\t321\t1\tIfcMaterial\t1\nPARAM\t2f333449-fdb8-4563-b719-b6640c466286\tPset_FireSuppressionTerminalTypeBreechingInlet.OutletDiameter[Type]\tLENGTH\t\t321\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t322\tPset_FireSuppressionTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7786ed73-50f2-456e-8409-cf0d252c486f\tPset_FireSuppressionTerminalTypeCommon.Reference[Type]\tTEXT\t\t322\t1\tIfcIdentifier\t1\nPARAM\t1a515565-8a06-4b07-bc07-0afc3389b5cd\tPset_FireSuppressionTerminalTypeCommon.Status[Type]\tTEXT\t\t322\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t323\tPset_FireSuppressionTerminalTypeFireHydrant\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8db8d979-5673-40e5-939f-a10ce0bb29e4\tPset_FireSuppressionTerminalTypeFireHydrant.BodyColor[Type]\tTEXT\t\t323\t1\tIfcText\t1\nPARAM\t38477045-427f-49bf-b5d0-f4f3c421a80e\tPset_FireSuppressionTerminalTypeFireHydrant.BodyColour[Type]\tTEXT\t\t323\t1\tIfcText\t1\nPARAM\t91b786b5-710e-46d6-8875-699dc0de51d2\tPset_FireSuppressionTerminalTypeFireHydrant.CapColor[Type]\tTEXT\t\t323\t1\tIfcText\t1\nPARAM\tc2456b6e-a9a7-42e9-8cd2-837c1e14e0cc\tPset_FireSuppressionTerminalTypeFireHydrant.CapColour[Type]\tTEXT\t\t323\t1\tIfcText\t1\nPARAM\t0bbbc746-6b85-4cfc-a2d7-b3282fcee527\tPset_FireSuppressionTerminalTypeFireHydrant.DischargeFlowRate[Type]\tNUMBER\t\t323\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t2e846988-0c84-4c76-b44c-ee027561ce70\tPset_FireSuppressionTerminalTypeFireHydrant.FireHydrantType[Type]\tTEXT\t\t323\t1\tPEnum_FireHydrantType\t1\nPARAM\t1aa15724-5d83-4e2e-8338-e7a3fd13597f\tPset_FireSuppressionTerminalTypeFireHydrant.FlowClass[Type]\tTEXT\t\t323\t1\tIfcLabel\t1\nPARAM\tff3500c7-f551-42f9-909e-c5da70cc00c7\tPset_FireSuppressionTerminalTypeFireHydrant.HoseConnectionSize[Type]\tLENGTH\t\t323\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t589a47d3-8498-4a6a-8ce3-be217ab9514b\tPset_FireSuppressionTerminalTypeFireHydrant.NumberOfHoseConnections[Type]\tINTEGER\t\t323\t1\tIfcCountMeasure\t1\nPARAM\tc499f2fe-4d9d-4450-a01c-3645b72dbf8e\tPset_FireSuppressionTerminalTypeFireHydrant.PressureRating[Type]\tNUMBER\t\t323\t1\tIfcPressureMeasure\t1\nPARAM\t03e4a769-12f7-44b1-94da-875cd9a86307\tPset_FireSuppressionTerminalTypeFireHydrant.PumperConnectionSize[Type]\tLENGTH\t\t323\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tba9a3c4d-1c1f-445e-b2c4-a6fc2be10a1a\tPset_FireSuppressionTerminalTypeFireHydrant.WaterIsPotable[Type]\tYESNO\t\t323\t1\tIfcBoolean\t1\n#\nGROUP\t324\tPset_FireSuppressionTerminalTypeHoseReel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc61631af-0dd8-4cd0-8046-6972fbb3870b\tPset_FireSuppressionTerminalTypeHoseReel.ClassificationAuthority[Type]\tTEXT\t\t324\t1\tIfcLabel\t1\nPARAM\te7fff2bb-7295-44bc-8d93-e8a016f3808b\tPset_FireSuppressionTerminalTypeHoseReel.ClassOfService[Type]\tTEXT\t\t324\t1\tIfcLabel\t1\nPARAM\td327b5cc-e325-4924-a3b6-71d822e34f14\tPset_FireSuppressionTerminalTypeHoseReel.HoseDiameter[Type]\tLENGTH\t\t324\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td6e7c7f2-2581-4da7-bd0c-226d133ee210\tPset_FireSuppressionTerminalTypeHoseReel.HoseLength[Type]\tLENGTH\t\t324\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taac645e3-72a5-45fa-8af6-d31f341b9fb1\tPset_FireSuppressionTerminalTypeHoseReel.HoseNozzleType[Type]\tTEXT\t\t324\t1\tPEnum_HoseNozzleType\t1\nPARAM\tb6eed0bf-32e1-4915-8122-acf1b2ef2961\tPset_FireSuppressionTerminalTypeHoseReel.HoseReelMountingType[Type]\tTEXT\t\t324\t1\tPEnum_HoseReelMountingType\t1\nPARAM\tf51ccfff-31e8-4499-b930-0a1be4432a22\tPset_FireSuppressionTerminalTypeHoseReel.HoseReelType[Type]\tTEXT\t\t324\t1\tPEnum_HoseReelType\t1\nPARAM\t2188bf3d-f376-491a-806b-a89fe45bb3dd\tPset_FireSuppressionTerminalTypeHoseReel.InletConnectionSize[Type]\tLENGTH\t\t324\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t325\tPset_FireSuppressionTerminalTypeSprinkler\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb2920afb-cc34-4058-80dc-3dff758cb220\tPset_FireSuppressionTerminalTypeSprinkler.Activation[Type]\tTEXT\t\t325\t1\tPEnum_SprinklerActivation\t1\nPARAM\t78501c38-29a0-4a1d-aa11-31fcec8f0746\tPset_FireSuppressionTerminalTypeSprinkler.ActivationTemperature[Type]\tNUMBER\t\t325\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tc747036d-3b3d-4638-8bda-1e472cfe6363\tPset_FireSuppressionTerminalTypeSprinkler.BulbLiquidColor[Type]\tTEXT\t\t325\t1\tPEnum_SprinklerBulbLiquidColor\t1\nPARAM\t6de8a689-f906-4f2a-b65c-0af85c946c22\tPset_FireSuppressionTerminalTypeSprinkler.BulbLiquidColour[Type]\tTEXT\t\t325\t1\tPEnum_SprinklerBulbLiquidColour\t1\nPARAM\t682c3307-f2cc-4a2d-b357-650f0d95194c\tPset_FireSuppressionTerminalTypeSprinkler.ConnectionSize[Type]\tLENGTH\t\t325\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8b3285cf-d876-4821-8d88-b26e5cbd1fa2\tPset_FireSuppressionTerminalTypeSprinkler.CoverageArea[Type]\tAREA\t\t325\t1\tIfcAreaMeasure\t1\nPARAM\ta912fc57-7893-4e77-ab3f-a08f9ac8cb83\tPset_FireSuppressionTerminalTypeSprinkler.DeflectorMaterial[Type]\tMULTILINETEXT\t\t325\t1\tIfcMaterial\t1\nPARAM\t7fb3fffd-c391-4fe9-82e1-ed67ea195359\tPset_FireSuppressionTerminalTypeSprinkler.DischargeCoefficient[Type]\tNUMBER\t\t325\t1\tIfcReal\t1\nPARAM\t4eb20c3d-15e0-4c6c-9cb2-9e849f74e328\tPset_FireSuppressionTerminalTypeSprinkler.DischargeFlowRate[Type]\tNUMBER\t\t325\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t7fb76701-e0ef-4b3f-8d84-52a6ae6d533b\tPset_FireSuppressionTerminalTypeSprinkler.FrameMaterial[Type]\tMULTILINETEXT\t\t325\t1\tIfcMaterial\t1\nPARAM\t8e86bc7b-8d99-44d2-90a5-a25630e326c6\tPset_FireSuppressionTerminalTypeSprinkler.HasDeflector[Type]\tYESNO\t\t325\t1\tIfcBoolean\t1\nPARAM\t825e0f64-b577-43af-892b-edda11334add\tPset_FireSuppressionTerminalTypeSprinkler.MaximumWorkingPressure[Type]\tNUMBER\t\t325\t1\tIfcPressureMeasure\t1\nPARAM\t8675077d-a06a-4def-86ce-e2bd2cb0137b\tPset_FireSuppressionTerminalTypeSprinkler.ResidualFlowingPressure[Type]\tNUMBER\t\t325\t1\tIfcPressureMeasure\t1\nPARAM\taa52ad83-0371-4627-92f4-a520ebcbeafd\tPset_FireSuppressionTerminalTypeSprinkler.Response[Type]\tTEXT\t\t325\t1\tPEnum_SprinklerResponse\t1\nPARAM\t504ac778-b3b3-4a23-8de7-755216f2416b\tPset_FireSuppressionTerminalTypeSprinkler.SprinklerType[Type]\tTEXT\t\t325\t1\tPEnum_SprinklerType\t1\n#\nGROUP\t326\tPset_FittingBend\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te5ca89b4-2344-4d3b-bcc5-57e8df0a4d8c\tPset_FittingBend.BendAngle[Type]\tANGLE\t\t326\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t0e5e7cb9-b9c2-4d5e-9b3a-b2dc9f004920\tPset_FittingBend.BendRadius[Type]\tLENGTH\t\t326\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t327\tPset_FittingJunction\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t60275bbf-7ff1-476b-8fcf-74f86fe4945a\tPset_FittingJunction.JunctionLeftAngle[Type]\tANGLE\t\t327\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t3ccd4018-bf83-4c8f-a640-a09fe6338ff1\tPset_FittingJunction.JunctionLeftRadius[Type]\tLENGTH\t\t327\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t799ddac4-cd99-4260-a488-fb6537741599\tPset_FittingJunction.JunctionRightAngle[Type]\tANGLE\t\t327\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t7a1b8eca-2edb-45a2-876b-25a1d21050f4\tPset_FittingJunction.JunctionRightRadius[Type]\tLENGTH\t\t327\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf36da3e2-b33c-4d09-8697-e1b0e073608f\tPset_FittingJunction.JunctionType[Type]\tTEXT\t\t327\t1\tPEnum_FittingJunctionType\t1\n#\nGROUP\t328\tPset_FittingTransition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb000435b-e929-4cf4-a952-9e51689c6325\tPset_FittingTransition.EccentricityInY[Type]\tLENGTH\t\t328\t1\tIfcLengthMeasure\t1\nPARAM\td2acb3b0-4ad1-4719-8606-b679c055e118\tPset_FittingTransition.EccentricityInZ[Type]\tLENGTH\t\t328\t1\tIfcLengthMeasure\t1\nPARAM\t67ec3428-3394-4878-8e8e-53fc6bfc2143\tPset_FittingTransition.NominalLength[Type]\tLENGTH\t\t328\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t329\tPset_FlowControllerDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7f8d841d-7c43-4ed0-be71-66841f573a94\tPset_FlowControllerDamper.SizingMethod[Type]\tTEXT\t\t329\t1\tPEnum_DamperSizingMethod\t1\n#\nGROUP\t330\tPset_FlowControllerFlowMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t164b3cc9-b106-4298-b903-cad1927abd71\tPset_FlowControllerFlowMeter.Purpose[Type]\tTEXT\t\t330\t1\tPEnum_FlowMeterPurpose\t1\n#\nGROUP\t331\tPset_FlowFittingDuctFitting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a700eab-5d52-45ce-9793-2a1f49c187b9\tPset_FlowFittingDuctFitting.AbsoluteRoughnessFactor[Type]\tLENGTH\t\t331\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td2b10159-383f-4262-b6b2-939f503bbd70\tPset_FlowFittingDuctFitting.Color[Type]\tTEXT\t\t331\t1\tIfcLabel\t1\nPARAM\t19fb6a64-eb5e-419b-aec3-54e11b2b2156\tPset_FlowFittingDuctFitting.HasLiner[Type]\tYESNO\t\t331\t1\tIfcBoolean\t1\n#\nGROUP\t332\tPset_FlowFittingPipeFitting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0fdbd1a3-6eab-4ccc-8950-27a264834542\tPset_FlowFittingPipeFitting.Color[Type]\tTEXT\t\t332\t1\tIfcLabel\t1\nPARAM\tfc443084-667b-4c49-b51e-e4421c7ce7e8\tPset_FlowFittingPipeFitting.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t332\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t333\tPset_FlowInstrumentPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4914c96e-abd4-4097-8fa3-100b49064b76\tPset_FlowInstrumentPHistory.Quality[Type]\tMULTILINETEXT\t\t333\t1\tIfcTimeSeries\t1\nPARAM\tbdc554db-485c-4b2a-a82a-a126d32a9440\tPset_FlowInstrumentPHistory.Status[Type]\tMULTILINETEXT\t\t333\t1\tIfcTimeSeries\t1\nPARAM\t72940401-c17e-4da1-88d3-402e91dfc75c\tPset_FlowInstrumentPHistory.Value[Type]\tMULTILINETEXT\t\t333\t1\tIfcTimeSeries\t1\n#\nGROUP\t334\tPset_FlowInstrumentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t124894b1-294f-4221-b1d7-135fffbeebc4\tPset_FlowInstrumentTypeCommon.Reference[Type]\tTEXT\t\t334\t1\tIfcIdentifier\t1\nPARAM\te3a150c8-b346-4244-af31-297e096fbbf7\tPset_FlowInstrumentTypeCommon.Status[Type]\tTEXT\t\t334\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t335\tPset_FlowInstrumentTypePressureGauge\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t61652f59-22d7-47bf-87dc-97776219cf9a\tPset_FlowInstrumentTypePressureGauge.DisplaySize[Type]\tLENGTH\t\t335\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t256ecd21-fce6-4ecb-b1c8-03da42c085ee\tPset_FlowInstrumentTypePressureGauge.PressureGaugeType[Type]\tTEXT\t\t335\t1\tPEnum_PressureGaugeType\t1\n#\nGROUP\t336\tPset_FlowInstrumentTypeThermometer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7f0b2315-92dc-4b46-a103-203fcea670fa\tPset_FlowInstrumentTypeThermometer.DisplaySize[Type]\tLENGTH\t\t336\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5f290c7e-6c80-43e5-95f1-a600a8e7fe50\tPset_FlowInstrumentTypeThermometer.ThermometerType[Type]\tTEXT\t\t336\t1\tPEnum_ThermometerType\t1\n#\nGROUP\t337\tPset_FlowMeterOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8dccdfb0-4dc0-497a-86d0-647332337478\tPset_FlowMeterOccurrence.FlowMeterOurpose[Type]\tTEXT\t\t337\t1\tPEnum_FlowMeterPurpose\t1\nPARAM\t34b265b5-7e6e-4eba-ad1e-61e9a6ce7c6a\tPset_FlowMeterOccurrence.Purpose[Type]\tTEXT\t\t337\t1\tPEnum_FlowMeterPurpose\t1\n#\nGROUP\t338\tPset_FlowMeterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t939d02c4-4bb3-4942-a043-a02be267c1ae\tPset_FlowMeterTypeCommon.IsMain[Type]\tYESNO\t\t338\t1\tIfcBoolean\t1\nPARAM\t3a08029a-b2a5-4519-bc82-13e1b4cb8555\tPset_FlowMeterTypeCommon.ReadOutType[Type]\tTEXT\t\t338\t1\tPEnum_MeterReadOutType\t1\nPARAM\te072de8c-2423-48ac-a45d-67bbb5219cf1\tPset_FlowMeterTypeCommon.Reference[Type]\tTEXT\t\t338\t1\tIfcIdentifier\t1\nPARAM\t4b450c17-4792-4c06-9965-7d0c15cdb546\tPset_FlowMeterTypeCommon.RemoteReading[Type]\tYESNO\t\t338\t1\tIfcBoolean\t1\nPARAM\t905f677c-bc3c-481d-8cef-5ce1f897667a\tPset_FlowMeterTypeCommon.Status[Type]\tTEXT\t\t338\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t339\tPset_FlowMeterTypeEnergyMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t52b1134f-4641-43ab-9556-d41d4fe581e1\tPset_FlowMeterTypeEnergyMeter.ConnectionSize[Type]\tLENGTH\t\t339\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6f903b74-4bbc-40e3-b04d-a3ee43bbda73\tPset_FlowMeterTypeEnergyMeter.MaximumCurrent[Type]\tNUMBER\t\t339\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t93c2ff23-f4f1-403a-9dd5-8eb4fd858c65\tPset_FlowMeterTypeEnergyMeter.MultipleTarriff[Type]\tYESNO\t\t339\t1\tIfcBoolean\t1\nPARAM\t362e61e0-1817-4bed-8820-38057012ed2c\tPset_FlowMeterTypeEnergyMeter.NominalCurrent[Type]\tNUMBER\t\t339\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t340\tPset_FlowMeterTypeGasMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta74457d6-0754-4faf-8b1f-00f106929842\tPset_FlowMeterTypeGasMeter.ConnectionSize[Type]\tLENGTH\t\t340\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td2fc9a97-86f6-4cc3-9151-c5e9969d9ced\tPset_FlowMeterTypeGasMeter.GasType[Type]\tTEXT\t\t340\t1\tPEnum_GasType\t1\nPARAM\teadada3d-5839-4f6f-ba05-386a6c91591e\tPset_FlowMeterTypeGasMeter.MaximumFlowRate[Type]\tNUMBER\t\t340\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tb913bb4a-67a5-46cd-b8f1-972ca3ee3aa7\tPset_FlowMeterTypeGasMeter.MaximumPressureLoss[Type]\tNUMBER\t\t340\t1\tIfcPressureMeasure\t1\n#\nGROUP\t341\tPset_FlowMeterTypeOilMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf742e102-a7e6-4cb8-8e51-3fd77773b9c3\tPset_FlowMeterTypeOilMeter.ConnectionSize[Type]\tLENGTH\t\t341\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t29e4ee8e-7c0f-4423-9c9f-da8b655dd094\tPset_FlowMeterTypeOilMeter.MaximumFlowRate[Type]\tNUMBER\t\t341\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t342\tPset_FlowMeterTypeWaterMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4e455dbe-b753-496c-9618-a2d2417da2a7\tPset_FlowMeterTypeWaterMeter.BackflowPreventerType[Type]\tTEXT\t\t342\t1\tPEnum_BackflowPreventerType\t1\nPARAM\t19884e6a-7624-4f8d-b306-1df85f0bf773\tPset_FlowMeterTypeWaterMeter.ConnectionSize[Type]\tLENGTH\t\t342\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5649bfb4-18a1-4656-b8c9-bdfcc4ace8f6\tPset_FlowMeterTypeWaterMeter.MaximumFlowRate[Type]\tNUMBER\t\t342\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t4b8c9994-6da3-4d13-9225-2deddabad01d\tPset_FlowMeterTypeWaterMeter.MaximumPressureLoss[Type]\tNUMBER\t\t342\t1\tIfcPressureMeasure\t1\nPARAM\tb67c7e47-8268-4ca9-a023-34b1654a90d4\tPset_FlowMeterTypeWaterMeter.Type[Type]\tTEXT\t\t342\t1\tPEnum_WaterMeterType\t1\n#\nGROUP\t343\tPset_FlowMovingDeviceCompressor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2a95632f-df69-48c1-afb0-f3927c81610b\tPset_FlowMovingDeviceCompressor.ImpellerDiameter[Type]\tLENGTH\t\t343\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t344\tPset_FlowMovingDeviceFan\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9571ffe5-4201-480f-8820-4b098caa5b01\tPset_FlowMovingDeviceFan.ApplicationOfFan[Type]\tTEXT\t\t344\t1\tPEnum_FanApplicationType\t1\nPARAM\tcf88aa05-419e-4ad2-8828-41610f819a00\tPset_FlowMovingDeviceFan.CoilPosition[Type]\tTEXT\t\t344\t1\tPEnum_FanCoilPosition\t1\nPARAM\tc84bdae8-59c6-4780-9ff5-604ffc7db879\tPset_FlowMovingDeviceFan.DischargeType[Type]\tTEXT\t\t344\t1\tPEnum_FanDischargeType\t1\nPARAM\t647af7e7-e9fd-4623-a851-9ff9a40c849b\tPset_FlowMovingDeviceFan.FanMountingType[Type]\tTEXT\t\t344\t1\tPEnum_FanMountingType\t1\nPARAM\tf77aa74e-7161-4004-8eed-3bf74a1f497c\tPset_FlowMovingDeviceFan.FractionOfMotorHeatToAirStream[Type]\tNUMBER\t\t344\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tebeaaf70-ceb3-4371-80fa-22960e545bec\tPset_FlowMovingDeviceFan.ImpellerDiameter[Type]\tLENGTH\t\t344\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb96170a0-f17c-45ef-af89-0724f5dcb55f\tPset_FlowMovingDeviceFan.MotorPosition[Type]\tTEXT\t\t344\t1\tPEnum_FanMotorPosition\t1\n#\nGROUP\t345\tPset_FlowMovingDeviceFanCentrifugal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc29f59f5-b6d8-40a0-bd48-294e16b958c2\tPset_FlowMovingDeviceFanCentrifugal.Arrangement[Type]\tTEXT\t\t345\t1\tPEnum_CentrifugalFanArrangement\t1\nPARAM\t0937484f-8545-44c0-8a24-252dcc222334\tPset_FlowMovingDeviceFanCentrifugal.DirectionOfRotation[Type]\tTEXT\t\t345\t1\tPEnum_CentrifugalFanRotation\t1\nPARAM\te825563d-2a91-46b8-a471-48785e5b3c42\tPset_FlowMovingDeviceFanCentrifugal.DischargePosition[Type]\tTEXT\t\t345\t1\tPEnum_CentrifugalFanDischargePosition\t1\n#\nGROUP\t346\tPset_FlowMovingDevicePump\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf27e1ee4-64b0-4193-8658-b0bb50a9f438\tPset_FlowMovingDevicePump.BaseType[Type]\tTEXT\t\t346\t1\tPEnum_PumpBaseType\t1\nPARAM\t7c90d525-01f3-4b16-bf65-ab0a5f583bdb\tPset_FlowMovingDevicePump.DriveConnectionType[Type]\tTEXT\t\t346\t1\tPEnum_PumpDriveConnectionType\t1\nPARAM\t736125f3-43be-49fc-9995-eb0ff84a243a\tPset_FlowMovingDevicePump.ImpellerDiameter[Type]\tLENGTH\t\t346\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t347\tPset_FlowSegmentDuctSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdf6e2cb9-fb33-4cd5-95ef-abc6e2cb84f8\tPset_FlowSegmentDuctSegment.Color[Type]\tTEXT\t\t347\t1\tIfcLabel\t1\nPARAM\t7c36f5c0-591f-4cfd-a384-fc1cac2db551\tPset_FlowSegmentDuctSegment.HasLiner[Type]\tYESNO\t\t347\t1\tIfcBoolean\t1\nPARAM\t6daa57e0-7fb3-46a0-9e08-4a30409cd524\tPset_FlowSegmentDuctSegment.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t347\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf7bc6364-5edc-416b-9c2f-5b48d29b541a\tPset_FlowSegmentDuctSegment.Length[Type]\tLENGTH\t\t347\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1cf8558a-8d9f-4b82-a799-7bb2faa49e5c\tPset_FlowSegmentDuctSegment.MaterialThickness[Type]\tLENGTH\t\t347\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t348\tPset_FlowSegmentPipeSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb063f9d4-7d28-491e-b48c-7c9af9696705\tPset_FlowSegmentPipeSegment.Color[Type]\tTEXT\t\t348\t1\tIfcLabel\t1\nPARAM\t30c3fa75-d43e-46a9-88fa-d6cc4868bc9f\tPset_FlowSegmentPipeSegment.Gradient[Type]\tNUMBER\t\t348\t1\tIfcPositiveRatioMeasure\t1\nPARAM\te44beeec-4d2b-47aa-9495-874b08cf5124\tPset_FlowSegmentPipeSegment.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t348\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc92ef8d9-d90e-4725-a388-496d163a7c37\tPset_FlowSegmentPipeSegment.InvertElevation[Type]\tLENGTH\t\t348\t1\tIfcLengthMeasure\t1\nPARAM\t90d89e12-4be5-42d0-96bd-61a1bbb24fa6\tPset_FlowSegmentPipeSegment.Length[Type]\tLENGTH\t\t348\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t349\tPset_FlowStorageDeviceTank\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2ddcbbeb-fb9a-4009-b571-bd41a8a105fe\tPset_FlowStorageDeviceTank.HasLadder[Type]\tYESNO\t\t349\t1\tIfcBoolean\t1\nPARAM\t3716d25c-865c-4201-8432-6f9a70aa5589\tPset_FlowStorageDeviceTank.HasVisualIndicator[Type]\tYESNO\t\t349\t1\tIfcBoolean\t1\nPARAM\t508370d4-92e3-4f76-a9d3-5cc9840f5390\tPset_FlowStorageDeviceTank.TankComposition[Type]\tTEXT\t\t349\t1\tPEnum_TankComposition\t1\n#\nGROUP\t350\tPset_FlowTerminalAirTerminal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t987db834-ce2f-4fef-a69c-e6353f00cdd8\tPset_FlowTerminalAirTerminal.AirflowType[Type]\tTEXT\t\t350\t1\tPEnum_AirTerminalAirflowType\t1\nPARAM\t54cbcfc9-cfee-4b10-9fca-a0ab29735300\tPset_FlowTerminalAirTerminal.Location[Type]\tTEXT\t\t350\t1\tPEnum_AirTerminalLocation\t1\n#\nGROUP\t351\tPset_FootingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1fd566f4-f67c-4c10-ac53-4227a39672cd\tPset_FootingCommon.LoadBearing[Type]\tYESNO\t\t351\t1\tIfcBoolean\t1\nPARAM\teafbfcfd-8eb8-46b6-9ea2-f396a5bb6690\tPset_FootingCommon.Reference[Type]\tTEXT\t\t351\t1\tIfcIdentifier\t1\nPARAM\t48a0f7ef-e10b-4964-aeaa-3495b82ec393\tPset_FootingCommon.Status[Type]\tTEXT\t\t351\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t352\tPset_FootingTypePadFooting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t55a6879b-ed80-4362-9b8f-f95f38dffc1c\tPset_FootingTypePadFooting.IsReinforced[Type]\tYESNO\t\t352\t1\tIfcBoolean\t1\nPARAM\t3c7d73de-4238-42b8-95e3-e46d4fe125c8\tPset_FootingTypePadFooting.LoadBearingCapacity[Type]\tNUMBER\t\t352\t1\tIfcPlanarForceMeasure\t1\n#\nGROUP\t353\tPset_FurnitureTypeChair\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6efbe270-22e0-4583-ab00-793faf637609\tPset_FurnitureTypeChair.HighestSeatingHeight[Type]\tLENGTH\t\t353\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc40d6ba8-6125-48fc-90d9-484a46d2624f\tPset_FurnitureTypeChair.LowestSeatingHeight[Type]\tLENGTH\t\t353\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6fd0ed93-cb82-4c66-8f5d-be197caf0470\tPset_FurnitureTypeChair.SeatingHeight[Type]\tLENGTH\t\t353\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t354\tPset_FurnitureTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0f4c8588-b535-43d8-865c-9fdaccb2fb10\tPset_FurnitureTypeCommon.Description[Type]\tTEXT\t\t354\t1\tIfcText\t1\nPARAM\t86a91177-2035-48b9-9b6c-10e1a8b05007\tPset_FurnitureTypeCommon.IsBuiltIn[Type]\tYESNO\t\t354\t1\tIfcBoolean\t1\nPARAM\t538eecab-638c-4c77-8166-6a66a2dd29dc\tPset_FurnitureTypeCommon.MainColor[Type]\tTEXT\t\t354\t1\tIfcLabel\t1\nPARAM\td211a4b8-5c52-4a88-b353-21ba2a8b186f\tPset_FurnitureTypeCommon.MainColour[Type]\tTEXT\t\t354\t1\tIfcLabel\t1\nPARAM\tdfb711a6-e61f-487e-9651-c729c1b5cd07\tPset_FurnitureTypeCommon.NominalDepth[Type]\tLENGTH\t\t354\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\ta161037b-5d26-4b31-a92c-70fa2464a393\tPset_FurnitureTypeCommon.NominalHeight[Type]\tLENGTH\t\t354\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1ae346ee-1b99-4681-a40a-c3d5164e44fe\tPset_FurnitureTypeCommon.NominalLength[Type]\tLENGTH\t\t354\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t23c081ab-30c8-4d3a-bd88-91e5f51e6767\tPset_FurnitureTypeCommon.Reference[Type]\tTEXT\t\t354\t1\tIfcIdentifier\t1\nPARAM\t77e811dc-d111-42c0-8b0d-ad67581c6546\tPset_FurnitureTypeCommon.Status[Type]\tTEXT\t\t354\t1\tPEnum_ElementStatus\t1\nPARAM\t3b029b07-d01e-4884-8e82-6dbaaddd1034\tPset_FurnitureTypeCommon.Style[Type]\tTEXT\t\t354\t1\tIfcLabel\t1\n#\nGROUP\t355\tPset_FurnitureTypeDesk\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7b027e8a-0181-4e2a-8959-6dfc38b47571\tPset_FurnitureTypeDesk.WorksurfaceArea[Type]\tAREA\t\t355\t1\tIfcAreaMeasure\t1\n#\nGROUP\t356\tPset_FurnitureTypeFileCabinet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t179bd4c4-7687-497c-ae1e-477fb38ccea2\tPset_FurnitureTypeFileCabinet.WithLock[Type]\tYESNO\t\t356\t1\tIfcBoolean\t1\n#\nGROUP\t357\tPset_FurnitureTypeTable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc17a9285-2e76-43ce-89c0-f75556d8e9e2\tPset_FurnitureTypeTable.NumberOfChairs[Type]\tINTEGER\t\t357\t1\tIfcCountMeasure\t1\nPARAM\tf875507c-5200-42e9-b73c-5b9f830052d1\tPset_FurnitureTypeTable.WorksurfaceArea[Type]\tAREA\t\t357\t1\tIfcAreaMeasure\t1\n#\nGROUP\t358\tPset_GasTerminalPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6e7333d1-6f47-468d-985e-337f990826d9\tPset_GasTerminalPHistory.GasFlowRate[Type]\tNUMBER\t\t358\t1\tIfcReal\t1\n#\nGROUP\t359\tPset_GasTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t501190fb-1b45-463b-84d4-3bd52c2a7d84\tPset_GasTerminalTypeCommon.GasFlowRateRange[Type]\tMULTILINETEXT\t\t359\t1\tPropertyBoundedValue\t1\n#\nGROUP\t360\tPset_GasTerminalTypeGasAppliance\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td31c39ff-ea7a-4eeb-9cda-6a9dbbe9eb77\tPset_GasTerminalTypeGasAppliance.FlueType[Type]\tTEXT\t\t360\t1\tPEnum_FlueType\t1\nPARAM\tde4f7ec6-b0af-4ff5-a226-4972da54062b\tPset_GasTerminalTypeGasAppliance.GasApplianceType[Type]\tTEXT\t\t360\t1\tPEnum_GasApplianceType\t1\n#\nGROUP\t361\tPset_GasTerminalTypeGasBurner\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t86d9b048-e4bf-4f1c-a337-be11aeff1765\tPset_GasTerminalTypeGasBurner.GasBurnerType[Type]\tTEXT\t\t361\t1\tPEnum_GasBurnerType\t1\n#\nGROUP\t362\tPset_GateHeadCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5c6070dc-ce87-45dd-add0-7ad30155eeed\tPset_GateHeadCommon.StructuralType[Type]\tTEXT\t\t362\t1\tIfcLabel\t1\n#\nGROUP\t363\tPset_GeotechnicalAssemblyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t179606f8-db01-48a3-8dee-b72501a091b0\tPset_GeotechnicalAssemblyCommon.BoreHolePurpose[Type]\tTEXT\t\t363\t1\tPEnum_StrataAssemblyPurpose\t1\nPARAM\tfa27ad30-54c5-4c94-abab-7956f3a4d053\tPset_GeotechnicalAssemblyCommon.Limitations[Type]\tTEXT\t\t363\t1\tIfcText\t1\nPARAM\tec2e693c-bac9-4b04-a598-9eb299645efc\tPset_GeotechnicalAssemblyCommon.Methodology[Type]\tTEXT\t\t363\t1\tIfcText\t1\nPARAM\tda8b6fd7-881a-45a5-bd43-6da21b5f84d4\tPset_GeotechnicalAssemblyCommon.Status[Type]\tTEXT\t\t363\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t364\tPset_GeotechnicalStratumCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1811d3a4-3dc1-428c-af2d-1309c34c30ca\tPset_GeotechnicalStratumCommon.IsTopographic[Type]\tYESNO\t\t364\t1\tIfcLogical\t1\nPARAM\tec1761b0-e9d7-47c1-af3d-40aff0a4e120\tPset_GeotechnicalStratumCommon.PiezometricHead[Type]\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf6315596-82c0-42ef-aaa9-25aaa7ff9838\tPset_GeotechnicalStratumCommon.PiezometricPressure[Type]\tNUMBER\t\t364\t1\tIfcPressureMeasure\t1\nPARAM\t852a1b64-e5ed-41e0-8655-5223bc844e93\tPset_GeotechnicalStratumCommon.Status[Type]\tTEXT\t\t364\t1\tPEnum_ElementStatus\t1\nPARAM\tf0130b45-1849-4fa7-9119-3dcd0235f62a\tPset_GeotechnicalStratumCommon.StratumColour[Type]\tTEXT\t\t364\t1\tIfcLabel\t1\nPARAM\tb881abe4-ce69-48e5-a453-d151e17dd6da\tPset_GeotechnicalStratumCommon.Texture[Type]\tTEXT\t\t364\t1\tIfcLabel\t1\n#\nGROUP\t365\tPset_HeatExchangerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48a04a70-dd35-4a3b-bed1-4825604836ae\tPset_HeatExchangerTypeCommon.Arrangement[Type]\tTEXT\t\t365\t1\tPEnum_HeatExchangerArrangement\t1\nPARAM\t0c10d586-013d-47ba-b566-f2be01d1e591\tPset_HeatExchangerTypeCommon.FlowArrangement[Type]\tTEXT\t\t365\t1\tPEnum_HeatExchangerArrangement\t1\nPARAM\ta793e93e-79f4-468c-b069-effbb2b81ded\tPset_HeatExchangerTypeCommon.Reference[Type]\tTEXT\t\t365\t1\tIfcIdentifier\t1\nPARAM\tb2023efb-fa11-4d49-b3fb-78e87df052af\tPset_HeatExchangerTypeCommon.ShellMaterial[Type]\tMULTILINETEXT\t\t365\t1\tIfcMaterial\t1\nPARAM\t49eabcc8-6528-4cfd-8c45-4a4ebf0d9185\tPset_HeatExchangerTypeCommon.Status[Type]\tTEXT\t\t365\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t366\tPset_HeatExchangerTypePlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t29d59c78-58e5-4ed7-8b6c-225c0bddbc1a\tPset_HeatExchangerTypePlate.NumberOfPlates[Type]\tINTEGER\t\t366\t1\tIfcCountMeasure\t1\n#\nGROUP\t367\tPset_HumidifierPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4e0154dd-0687-440d-b907-c7f41cc1e099\tPset_HumidifierPHistory.AirPressureDropCurve[Type]\tMULTILINETEXT\t\t367\t1\tPropertyTableValue\t1\nPARAM\t06f794b1-774a-4d0b-8b6f-e5dcec1d0351\tPset_HumidifierPHistory.AtmosphericPressure[Type]\tMULTILINETEXT\t\t367\t1\tIfcTimeSeries\t1\nPARAM\t8b3b0df8-febb-46b1-a798-ee75b6bfe017\tPset_HumidifierPHistory.SaturationEfficiency[Type]\tMULTILINETEXT\t\t367\t1\tIfcTimeSeries\t1\nPARAM\tf989ecfc-092d-4e71-ad87-4c17eb0ff8cb\tPset_HumidifierPHistory.SaturationEfficiencyCurve[Type]\tMULTILINETEXT\t\t367\t1\tPropertyTableValue\t1\n#\nGROUP\t368\tPset_HumidifierTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdf1ce4f1-6b29-4661-89a4-5cd01b1a5bf9\tPset_HumidifierTypeCommon.AirPressureDropCurve[Type]\tMULTILINETEXT\t\t368\t1\tPropertyTableValue\t1\nPARAM\t91471a76-5206-4cc7-9ade-4535115ecc0b\tPset_HumidifierTypeCommon.Application[Type]\tTEXT\t\t368\t1\tPEnum_HumidifierApplication\t1\nPARAM\ta7ccc9b8-c154-4939-86fc-f9bd90f032cf\tPset_HumidifierTypeCommon.HumidifierApplication[Type]\tTEXT\t\t368\t1\tPEnum_HumidifierApplication\t1\nPARAM\t575d517e-c06d-4af4-a50c-dab9b6210fb7\tPset_HumidifierTypeCommon.InternalControl[Type]\tTEXT\t\t368\t1\tPEnum_HumidifierInternalControl\t1\nPARAM\t60c6531a-7dc8-4a66-96c0-b8b80cc58a2e\tPset_HumidifierTypeCommon.NominalAirFlowRate[Type]\tNUMBER\t\t368\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t6378c37e-d0df-4762-a132-90e46a0d1dcf\tPset_HumidifierTypeCommon.NominalMoistureGain[Type]\tNUMBER\t\t368\t1\tIfcMassFlowRateMeasure\t1\nPARAM\t86e39193-d1ec-4e63-980c-c66129c7712c\tPset_HumidifierTypeCommon.Reference[Type]\tTEXT\t\t368\t1\tIfcIdentifier\t1\nPARAM\tab5e96ea-7288-4eac-b056-40ace579bd5b\tPset_HumidifierTypeCommon.SaturationEfficiencyCurve[Type]\tMULTILINETEXT\t\t368\t1\tPropertyTableValue\t1\nPARAM\t3874fcf8-e392-492f-8302-a110e751151a\tPset_HumidifierTypeCommon.Status[Type]\tTEXT\t\t368\t1\tPEnum_ElementStatus\t1\nPARAM\t853f4af6-de87-4c44-9bd3-e5c09e631f3b\tPset_HumidifierTypeCommon.WaterRequirement[Type]\tNUMBER\t\t368\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t18939668-a143-4a44-8f07-d6d93595f291\tPset_HumidifierTypeCommon.Weight[Type]\tNUMBER\t\t368\t1\tIfcMassMeasure\t1\n#\nGROUP\t369\tPset_ImpactProtectionDeviceOccurrenceBumper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a24061e-7866-4971-9a03-5d6971616e69\tPset_ImpactProtectionDeviceOccurrenceBumper.BrakingLength[Type]\tLENGTH\t\t369\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0669a479-a973-4832-9182-6a44049bbc9c\tPset_ImpactProtectionDeviceOccurrenceBumper.BumperOrientation[Type]\tTEXT\t\t369\t1\tPEnum_BumperOrientation\t1\nPARAM\t38f1bd40-2e5f-417e-a738-7f31aa1f21bd\tPset_ImpactProtectionDeviceOccurrenceBumper.IsRemovableBumper[Type]\tYESNO\t\t369\t1\tIfcBoolean\t1\n#\nGROUP\t370\tPset_ImpactProtectionDeviceTypeBumper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4bbf2853-27d5-403a-8558-697b4a281617\tPset_ImpactProtectionDeviceTypeBumper.EnergyAbsorption[Type]\tNUMBER\t\t370\t1\tIfcEnergyMeasure\t1\nPARAM\t74c4274d-1eb1-47f2-b8d9-caa50966937d\tPset_ImpactProtectionDeviceTypeBumper.IsAbsorbingEnergy[Type]\tYESNO\t\t370\t1\tIfcBoolean\t1\nPARAM\t3db4277c-525b-4c93-8e35-dda12ab43224\tPset_ImpactProtectionDeviceTypeBumper.MaximumLoadRetention[Type]\tNUMBER\t\t370\t1\tIfcForceMeasure\t1\n#\nGROUP\t371\tPset_InstallationOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t67970d68-b6b6-485c-b957-941407d345e9\tPset_InstallationOccurrence.AcceptanceDate[Type]\tTEXT\t\t371\t1\tIfcDate\t1\nPARAM\t70fc232e-c930-4bb6-b904-f4b746152bee\tPset_InstallationOccurrence.InstallationDate[Type]\tTEXT\t\t371\t1\tIfcDate\t1\nPARAM\t7541939e-c4d9-4706-9226-aa0189076ac4\tPset_InstallationOccurrence.PutIntoOperationDate[Type]\tTEXT\t\t371\t1\tIfcDate\t1\n#\nGROUP\t372\tPset_InterceptorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te4c0adc8-ea20-4a34-ae14-453a48986244\tPset_InterceptorTypeCommon.CoverLength[Type]\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc867a383-6e1e-49a5-bc4a-61ecd4d74946\tPset_InterceptorTypeCommon.CoverWidth[Type]\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te3fcb671-9e68-4a1b-9634-0580555c1161\tPset_InterceptorTypeCommon.InletConnectionSize[Type]\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdd1c5e80-af0b-4fe5-82b8-83fc54307afa\tPset_InterceptorTypeCommon.NominalBodyDepth[Type]\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0b5aec3a-9ff9-4544-a599-a5115cd71ea1\tPset_InterceptorTypeCommon.NominalBodyLength[Type]\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t78a3d2d3-e1d3-41cc-ad43-67535e1d90c5\tPset_InterceptorTypeCommon.NominalBodyWidth[Type]\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf55e6862-18ad-44bf-be6c-a012e578d986\tPset_InterceptorTypeCommon.OutletConnectionSize[Type]\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1c1edf98-270d-493b-9c1e-234adc50756f\tPset_InterceptorTypeCommon.Reference[Type]\tTEXT\t\t372\t1\tIfcIdentifier\t1\nPARAM\t69e9e0f2-bdcb-41ab-a66e-8e2b6def9f11\tPset_InterceptorTypeCommon.Status[Type]\tTEXT\t\t372\t1\tPEnum_ElementStatus\t1\nPARAM\t28f79d45-9bbb-4963-bcbb-c1d02f852517\tPset_InterceptorTypeCommon.VentilatingPipeSize[Type]\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t373\tPset_IpNetworkEquipmentPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta787f774-f0f0-4cfc-b7f5-19d223b5eb0d\tPset_IpNetworkEquipmentPHistory.NumberOfPackets[Type]\tMULTILINETEXT\t\t373\t1\tIfcTimeSeries\t1\n#\nGROUP\t374\tPset_JettyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t75ae45bb-25b8-474f-8fb1-d5444f87bf8e\tPset_JettyCommon.BentSpacing[Type]\tLENGTH\t\t374\t1\tIfcLengthMeasure\t1\nPARAM\t54166bbc-72e7-460d-8308-231d7e68ba91\tPset_JettyCommon.Elevation[Type]\tLENGTH\t\t374\t1\tIfcLengthMeasure\t1\nPARAM\tca3b0b0e-9a80-450b-b081-1403522ae2f5\tPset_JettyCommon.PierSectionType[Type]\tTEXT\t\t374\t1\tPEnum_SectionType\t1\nPARAM\t44cefb85-e671-4a62-b05d-c3f9d424645a\tPset_JettyCommon.StructuralType[Type]\tTEXT\t\t374\t1\tIfcLabel\t1\n#\nGROUP\t375\tPset_JettyDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc4ac4ff1-0bde-4e2f-9caf-4e1a28875817\tPset_JettyDesignCriteria.EquipmentLoading[Type]\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\nPARAM\tfe8896fb-625e-4938-b4e6-2c57ef1b933d\tPset_JettyDesignCriteria.ExtremeHighWaterLevel[Type]\tLENGTH\t\t375\t1\tIfcLengthMeasure\t1\nPARAM\t96a9b096-6823-4f28-9b1c-7d1229b3d5b6\tPset_JettyDesignCriteria.ExtremeLowWaterLevel[Type]\tLENGTH\t\t375\t1\tIfcLengthMeasure\t1\nPARAM\td89b36c9-8a18-4e46-8a3c-050fe082587a\tPset_JettyDesignCriteria.FlowLoading[Type]\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\nPARAM\t3e7914f9-0324-469f-b678-1df99367f481\tPset_JettyDesignCriteria.HighWaterLevel[Type]\tLENGTH\t\t375\t1\tIfcLengthMeasure\t1\nPARAM\t4c0941e6-32b2-40b0-a666-5db0a1f386e4\tPset_JettyDesignCriteria.LowWaterLevel[Type]\tLENGTH\t\t375\t1\tIfcLengthMeasure\t1\nPARAM\t845901c1-b016-4745-820a-c9ce1399eeed\tPset_JettyDesignCriteria.ShipLoading[Type]\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\nPARAM\ta207dc8d-bc04-4489-8a6c-9b93227554bc\tPset_JettyDesignCriteria.UniformlyDistributedLoad[Type]\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\nPARAM\tc34c5b5b-c4c1-41cc-8c2c-2ec6ce1cc692\tPset_JettyDesignCriteria.WaveLoading[Type]\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\n#\nGROUP\t376\tPset_JunctionBoxTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t67a4a19f-30ff-43c5-af5c-61aa1c121d49\tPset_JunctionBoxTypeCommon.ClearDepth[Type]\tLENGTH\t\t376\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5b86d645-cffb-43b4-8f38-53d11391a296\tPset_JunctionBoxTypeCommon.IP_Code[Type]\tTEXT\t\t376\t1\tIfcLabel\t1\nPARAM\te75a50e7-c0e6-46d4-ae62-40ea43c87b42\tPset_JunctionBoxTypeCommon.IsExternal[Type]\tYESNO\t\t376\t1\tIfcBoolean\t1\nPARAM\t58b45123-0503-4399-8d58-4716bf13f38f\tPset_JunctionBoxTypeCommon.JunctionBoxMountingType[Type]\tTEXT\t\t376\t1\tPEnum_JunctionBoxMountingType\t1\nPARAM\t1dea838a-45a9-4339-8226-3fbe93acfd70\tPset_JunctionBoxTypeCommon.MountingType[Type]\tTEXT\t\t376\t1\tPEnum_JunctionBoxMountingType\t1\nPARAM\ta253d682-c023-4b2e-8cfa-f8f31601d770\tPset_JunctionBoxTypeCommon.NominalHeight[Type]\tLENGTH\t\t376\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t78086c2f-6078-43a4-b8db-b5e2e627cf41\tPset_JunctionBoxTypeCommon.NominalLength[Type]\tLENGTH\t\t376\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tbcdf0d55-2d13-4eab-b0d1-eccfd3ce42d8\tPset_JunctionBoxTypeCommon.NominalWidth[Type]\tLENGTH\t\t376\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tddd3b353-a441-499b-975e-d114a1839913\tPset_JunctionBoxTypeCommon.NumberOfGangs[Type]\tINTEGER\t\t376\t1\tIfcCountMeasure\t1\nPARAM\t5bf09794-25c9-464d-862f-74c011993960\tPset_JunctionBoxTypeCommon.PlacingType[Type]\tTEXT\t\t376\t1\tPEnum_JunctionBoxPlacingType\t1\nPARAM\t69fe3f04-a9b8-4e2b-9a94-64ab62c54a3a\tPset_JunctionBoxTypeCommon.Reference[Type]\tTEXT\t\t376\t1\tIfcIdentifier\t1\nPARAM\tcc8edb82-5331-4a9f-abe1-e59fc0afd61b\tPset_JunctionBoxTypeCommon.ShapeType[Type]\tTEXT\t\t376\t1\tPEnum_JunctionBoxShapeType\t1\nPARAM\t145597e6-c193-43d7-a328-b713ffce30e2\tPset_JunctionBoxTypeCommon.Status[Type]\tTEXT\t\t376\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t377\tPset_JunctionBoxTypeData\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8680a657-cf84-4966-856e-3942df02e69c\tPset_JunctionBoxTypeData.DataConnectionType[Type]\tTEXT\t\t377\t1\tPEnum_DataConnectionType\t1\n#\nGROUP\t378\tPset_KerbCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0f4bd597-3924-4e21-a01e-39d35d13ca8d\tPset_KerbCommon.CombinedKerbGutter[Type]\tYESNO\t\t378\t1\tIfcBoolean\t1\nPARAM\t001b5893-b1e2-45f8-aa90-f43ea7959ab9\tPset_KerbCommon.Mountable[Type]\tYESNO\t\t378\t1\tIfcBoolean\t1\nPARAM\t6a6ec6f4-c66d-4e51-8142-c8c27d098bac\tPset_KerbCommon.Upstand[Type]\tLENGTH\t\t378\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t379\tPset_KerbStone\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td97dfd53-ebac-4b6d-9489-bf113f161d9f\tPset_KerbStone.NominalHeight[Type]\tLENGTH\t\t379\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\td3a7ce16-d6ae-407b-8e5b-ceb2c4803c8d\tPset_KerbStone.NominalLength[Type]\tLENGTH\t\t379\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t382557b9-5e55-4f03-866b-cf664f555fe2\tPset_KerbStone.NominalWidth[Type]\tLENGTH\t\t379\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t51d543e8-ed8d-4d5a-a85e-7016bfde07e6\tPset_KerbStone.StoneFinishes[Type]\tTEXT\t\t379\t1\tIfcLabel\t1\nPARAM\t248bfa37-b699-426a-9545-029acab5f727\tPset_KerbStone.TypeDesignation[Type]\tTEXT\t\t379\t1\tIfcLabel\t1\n#\nGROUP\t380\tPset_LampEmitterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t63119d10-d74f-4d66-9d7c-b9e79167a396\tPset_LampEmitterTypeCommon.ColorAppearance[Type]\tTEXT\t\t380\t1\tIfcLabel\t1\nPARAM\t6646d8ae-6ae5-465e-afd6-c70c1ce51253\tPset_LampEmitterTypeCommon.ColorRenderingIndex[Type]\tINTEGER\t\t380\t1\tIfcInteger\t1\nPARAM\t8806c24a-b1a6-43ed-b91f-c72554863c0a\tPset_LampEmitterTypeCommon.ColorTemperature[Type]\tNUMBER\t\t380\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t046d61b3-2637-4728-9f21-3b7b4d6f1098\tPset_LampEmitterTypeCommon.ContributedLuminousFlux[Type]\tNUMBER\t\t380\t1\tIfcLuminousFluxMeasure\t1\nPARAM\t35730d70-f2b7-49a5-83a0-5386dfd076e7\tPset_LampEmitterTypeCommon.LampBallastType[Type]\tTEXT\t\t380\t1\tPEnum_LampBallastType\t1\nPARAM\tacf5a6d7-49b3-4817-9f9a-048ca691120e\tPset_LampEmitterTypeCommon.LampCompensationType[Type]\tTEXT\t\t380\t1\tPEnum_LampCompensationType\t1\nPARAM\ta707417d-80b7-46fb-9af6-c3fff114a321\tPset_LampEmitterTypeCommon.LampMaintenanceFactor[Type]\tNUMBER\t\t380\t1\tIfcReal\t1\nPARAM\t4f43282d-0b48-4dab-9c7e-c4bff389cf76\tPset_LampEmitterTypeCommon.LightEmitterNominalPower[Type]\tNUMBER\t\t380\t1\tIfcPowerMeasure\t1\nPARAM\t3e20b973-683f-46ac-81fc-efef9fe9de29\tPset_LampEmitterTypeCommon.Spectrum[Type]\tMULTILINETEXT\t\t380\t1\tPropertyTableValue\t1\n#\nGROUP\t381\tPset_LampTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t258285ae-6edc-43a5-aa26-f4068b3df4c3\tPset_LampTypeCommon.ColorAppearance[Type]\tTEXT\t\t381\t1\tIfcLabel\t1\nPARAM\ta1d279cf-f213-4aef-8aa1-4b5b7f2dbb9b\tPset_LampTypeCommon.ColorRenderingIndex[Type]\tINTEGER\t\t381\t1\tIfcInteger\t1\nPARAM\tb384954f-6bfa-456f-a66b-e099049012e2\tPset_LampTypeCommon.ColorTemperature[Type]\tNUMBER\t\t381\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t021587dc-eb38-4984-b28e-631a49ed7bdd\tPset_LampTypeCommon.ColourAppearance[Type]\tTEXT\t\t381\t1\tIfcLabel\t1\nPARAM\t196a751c-ae1a-4863-b3d2-73f23af566b3\tPset_LampTypeCommon.ColourRenderingIndex[Type]\tINTEGER\t\t381\t1\tIfcInteger\t1\nPARAM\taa29078d-de80-4045-9391-1e399e76c32b\tPset_LampTypeCommon.ColourTemperature[Type]\tNUMBER\t\t381\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t1f82d1bb-bb12-4bf6-858e-facdf336c234\tPset_LampTypeCommon.ContributedLuminousFlux[Type]\tNUMBER\t\t381\t1\tIfcLuminousFluxMeasure\t1\nPARAM\t37601f22-0fb8-499e-84ff-6685a2176783\tPset_LampTypeCommon.LampBallastType[Type]\tTEXT\t\t381\t1\tPEnum_LampBallastType\t1\nPARAM\t93ae1423-7eed-4efc-bed4-985991518ed8\tPset_LampTypeCommon.LampCompensationType[Type]\tTEXT\t\t381\t1\tPEnum_LampCompensationType\t1\nPARAM\t62d266a4-a2bd-419c-b3b5-110508115f52\tPset_LampTypeCommon.LampMaintenanceFactor[Type]\tNUMBER\t\t381\t1\tIfcReal\t1\nPARAM\tc85e3970-3ef8-4c68-a28b-ff90051a8ae5\tPset_LampTypeCommon.LightEmitterNominalPower[Type]\tNUMBER\t\t381\t1\tIfcPowerMeasure\t1\nPARAM\t4dda0e4a-24ac-4246-b0b4-89dd3fb4e75a\tPset_LampTypeCommon.Reference[Type]\tTEXT\t\t381\t1\tIfcIdentifier\t1\nPARAM\t494ab4a1-2681-4165-a9b9-065c93a68233\tPset_LampTypeCommon.Spectrum[Type]\tMULTILINETEXT\t\t381\t1\tPropertyTableValue\t1\nPARAM\t36a4d1b4-18ed-4df0-9d87-9eabc2bd9aa9\tPset_LampTypeCommon.Status[Type]\tTEXT\t\t381\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t382\tPset_LandRegistration\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcec9207c-5c74-4ef3-bc8c-05f16f67c4f5\tPset_LandRegistration.IsPermanentID[Type]\tYESNO\t\t382\t1\tIfcBoolean\t1\nPARAM\t703e2ab4-8d56-40ef-a932-224b389a9056\tPset_LandRegistration.LandID[Type]\tTEXT\t\t382\t1\tIfcIdentifier\t1\nPARAM\t7613df95-d855-4192-b2ed-4e7d95ec1fb4\tPset_LandRegistration.LandTitleID[Type]\tTEXT\t\t382\t1\tIfcIdentifier\t1\n#\nGROUP\t383\tPset_LightFixtureTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c218134-0643-438d-b184-a20a0f5dfb38\tPset_LightFixtureTypeCommon.ArticleNumber[Type]\tMULTILINETEXT\t\t383\t1\tIfcClassificationReference\t1\nPARAM\td030b86b-98d6-4523-9284-3b4ad3ecfad1\tPset_LightFixtureTypeCommon.LightFixtureMountingType[Type]\tTEXT\t\t383\t1\tPEnum_LightFixtureMountingType\t1\nPARAM\te3ff0856-5f95-465e-bdb4-ef28b4d20e45\tPset_LightFixtureTypeCommon.LightFixturePlacingType[Type]\tTEXT\t\t383\t1\tPEnum_LightFixturePlacingType\t1\nPARAM\t8d78fb24-4e61-4c7a-9682-1483a2b8ffd9\tPset_LightFixtureTypeCommon.MaintenanceFactor[Type]\tNUMBER\t\t383\t1\tIfcReal\t1\nPARAM\t49df8f25-fdfd-4c66-99ba-b3529d2702ce\tPset_LightFixtureTypeCommon.ManufacturersSpecificInformation[Type]\tTEXT\t\t383\t1\tIfcText\t1\nPARAM\tf2bcb1da-7efe-4d58-bad9-25dc228e795e\tPset_LightFixtureTypeCommon.MaximumPlenumSensibleLoad[Type]\tNUMBER\t\t383\t1\tIfcPowerMeasure\t1\nPARAM\t66d08e36-529a-452e-a4c6-40d2d7fa9638\tPset_LightFixtureTypeCommon.MaximumSpaceSensibleLoad[Type]\tNUMBER\t\t383\t1\tIfcPowerMeasure\t1\nPARAM\t24d8c329-6083-49b2-8bd1-3f5b0bd25613\tPset_LightFixtureTypeCommon.NumberOfSources[Type]\tINTEGER\t\t383\t1\tIfcCountMeasure\t1\nPARAM\tae042654-1927-410c-b2c7-42cee4dbc69f\tPset_LightFixtureTypeCommon.Reference[Type]\tTEXT\t\t383\t1\tIfcIdentifier\t1\nPARAM\t0422169f-d87b-4717-8748-0ecf05e21a95\tPset_LightFixtureTypeCommon.SensibleLoadToRadiant[Type]\tNUMBER\t\t383\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t49ff750d-81a8-4525-a724-e8f1033a6080\tPset_LightFixtureTypeCommon.Status[Type]\tTEXT\t\t383\t1\tPEnum_ElementStatus\t1\nPARAM\t5433ad35-daf2-4248-9870-1584278aef4c\tPset_LightFixtureTypeCommon.TotalWattage[Type]\tNUMBER\t\t383\t1\tIfcPowerMeasure\t1\n#\nGROUP\t384\tPset_LightFixtureTypeExitSign\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t75d1450e-2121-4836-acc0-2a1e9f8dc548\tPset_LightFixtureTypeExitSign.Addressablility[Type]\tTEXT\t\t384\t1\tPEnum_AddressabilityType\t1\nPARAM\t93cb3351-391c-46e5-af48-eb236b4cb226\tPset_LightFixtureTypeExitSign.BackupSupplySystem[Type]\tTEXT\t\t384\t1\tPEnum_BackupSupplySystemType\t1\nPARAM\t719e75f4-f13f-4bfa-9c33-e09e8e7d9234\tPset_LightFixtureTypeExitSign.MinimumTextHeight[Type]\tNUMBER\t\t384\t1\tIfcPositiveLengthMeasure \t1\nPARAM\tb0d6cfec-48c1-442e-890c-5777df7c27ed\tPset_LightFixtureTypeExitSign.PictogramEscapeDirection[Type]\tTEXT\t\t384\t1\tPEnum_PictogramEscapeDirectionType\t1\nPARAM\ta951009a-4b02-4638-a404-2f7fa6721e24\tPset_LightFixtureTypeExitSign.SelfTestFunction[Type]\tTEXT\t\t384\t1\tPEnum_SelfTestType\t1\n#\nGROUP\t385\tPset_LightFixtureTypeSecurityLighting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf5bd29ae-b647-4ff2-a112-3cd30ed5bf55\tPset_LightFixtureTypeSecurityLighting.Addressablility[Type]\tTEXT\t\t385\t1\tPEnum_AddressabilityType\t1\nPARAM\t1ba3c348-8b43-4ff0-b755-e8b3119ec4ec\tPset_LightFixtureTypeSecurityLighting.BackupSupplySystem[Type]\tTEXT\t\t385\t1\tPEnum_BackupSupplySystemType\t1\nPARAM\t5261223d-8d24-4545-ae8c-aec67e27ffe5\tPset_LightFixtureTypeSecurityLighting.FixtureHeight[Type]\tLENGTH\t\t385\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t104f3543-b75e-4327-a925-db04c4d2dbc4\tPset_LightFixtureTypeSecurityLighting.PictogramEscapeDirection[Type]\tTEXT\t\t385\t1\tPEnum_PictogramEscapeDirectionType\t1\nPARAM\t6018c4a8-f284-4ccb-af47-8ac112ee34e0\tPset_LightFixtureTypeSecurityLighting.SecurityLightingType[Type]\tTEXT\t\t385\t1\tPEnum_LightFixtureSecurityLightingType\t1\nPARAM\t4da49e5d-92ee-4bc1-b34b-0ee51459c41b\tPset_LightFixtureTypeSecurityLighting.SelfTestFunction[Type]\tTEXT\t\t385\t1\tPEnum_SelfTestType\t1\n#\nGROUP\t386\tPset_LightFixtureTypeThermal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a6d964a-90ec-4bd0-ad78-71a3e61dda17\tPset_LightFixtureTypeThermal.MaximumPlenumSensibleLoad[Type]\tNUMBER\t\t386\t1\tIfcPowerMeasure\t1\nPARAM\t14ea42f7-c6ab-4af9-b7c3-51c7138e88a3\tPset_LightFixtureTypeThermal.MaximumSpaceSensibleLoad[Type]\tNUMBER\t\t386\t1\tIfcPowerMeasure\t1\nPARAM\tc460fe28-62e4-4df1-ba09-cbd970b5da9a\tPset_LightFixtureTypeThermal.SensibleLoadToRadiant[Type]\tNUMBER\t\t386\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t387\tPset_LinearReferencingMethod\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taed59b2c-694e-44ff-82fc-9b84c05b0de2\tPset_LinearReferencingMethod.LRMConstraint[Type]\tTEXT\t\t387\t1\tIfcLabel\t1\nPARAM\tdeb08b30-8a3d-42c8-ba12-ae6197f910a0\tPset_LinearReferencingMethod.LRMName[Type]\tTEXT\t\t387\t1\tIfcLabel\t1\nPARAM\tf3bf2bde-32df-47d4-b5e3-8684c1f88a66\tPset_LinearReferencingMethod.LRMType[Type]\tTEXT\t\t387\t1\tPEnum_LRMType\t1\nPARAM\t0f4d7c69-96f3-452e-a1fe-bcfa157d6d29\tPset_LinearReferencingMethod.LRMUnit[Type]\tTEXT\t\t387\t1\tIfcLabel\t1\nPARAM\t206e250f-1c10-4336-8a10-18ac574bed17\tPset_LinearReferencingMethod.UserDefinedLRMType[Type]\tTEXT\t\t387\t1\tIfcLabel\t1\n#\nGROUP\t388\tPset_MaintenanceStrategy\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t90ab1bad-a0ff-4a77-8b8d-0c2a2bdd9943\tPset_MaintenanceStrategy.AccidentResponse[Type]\tTEXT\t\t388\t1\tPEnum_AccidentResponse\t1\nPARAM\t71bf72d1-a085-4b43-9875-753f8b506c09\tPset_MaintenanceStrategy.AssetCriticality[Type]\tTEXT\t\t388\t1\tPEnum_AssetRating\t1\nPARAM\tf353b152-1eaf-4d12-9712-6f6ac6aa9f7a\tPset_MaintenanceStrategy.AssetFrailty[Type]\tTEXT\t\t388\t1\tPEnum_AssetRating\t1\nPARAM\td6ef0c9b-96b5-431b-8d37-d85418dc398c\tPset_MaintenanceStrategy.AssetPriority[Type]\tTEXT\t\t388\t1\tPEnum_AssetRating\t1\nPARAM\tc5fcb504-bb54-43f6-8d84-39d8993a72cc\tPset_MaintenanceStrategy.MonitoringType[Type]\tTEXT\t\t388\t1\tPEnum_MonitoringType\t1\n#\nGROUP\t389\tPset_MaintenanceTriggerCondition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td6936d5c-50fb-4ac6-9900-d62b367e7c9d\tPset_MaintenanceTriggerCondition.ConditionDisposalLevel[Type]\tTEXT\t\t389\t1\tPEnum_AssetRating\t1\nPARAM\t7a96479b-f526-4387-9afd-db029a7d87e8\tPset_MaintenanceTriggerCondition.ConditionMaintenanceLevel[Type]\tTEXT\t\t389\t1\tPEnum_AssetRating\t1\nPARAM\t739d0b8b-c898-47e2-a1c1-34d1443068ad\tPset_MaintenanceTriggerCondition.ConditionReplacementLevel[Type]\tTEXT\t\t389\t1\tPEnum_AssetRating\t1\nPARAM\ta84265d0-d781-4e19-8f41-1b36d856e8cd\tPset_MaintenanceTriggerCondition.ConditionTargetPerformance[Type]\tTEXT\t\t389\t1\tPEnum_AssetRating\t1\n#\nGROUP\t390\tPset_MaintenanceTriggerDuration\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t849b43dd-05e0-4108-8777-cfbdf1d965aa\tPset_MaintenanceTriggerDuration.DurationDisposalLevel[Type]\tTEXT\t\t390\t1\tIfcDuration\t1\nPARAM\t2508a44c-27fc-402f-8ffe-3d57bbd958cb\tPset_MaintenanceTriggerDuration.DurationMaintenanceLevel[Type]\tTEXT\t\t390\t1\tIfcDuration\t1\nPARAM\tb07445e1-ae9b-48b5-8261-b027f699b67b\tPset_MaintenanceTriggerDuration.DurationReplacementLevel[Type]\tTEXT\t\t390\t1\tIfcDuration\t1\nPARAM\td596bd7f-2b6f-4bd5-a0ca-dceeffbbdffa\tPset_MaintenanceTriggerDuration.DurationTargetPerformance[Type]\tTEXT\t\t390\t1\tIfcDuration\t1\n#\nGROUP\t391\tPset_MaintenanceTriggerPerformance\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te32d3103-f171-45d0-b506-0b2a8a532b2a\tPset_MaintenanceTriggerPerformance.DisposalLevel[Type]\tNUMBER\t\t391\t1\tIfcReal\t1\nPARAM\t3d511955-ca59-4d17-ac67-2fcb0dca078f\tPset_MaintenanceTriggerPerformance.PerformanceMaintenanceLevel[Type]\tNUMBER\t\t391\t1\tIfcReal\t1\nPARAM\t37f808bb-059f-4d22-87a7-ac22df7ba4eb\tPset_MaintenanceTriggerPerformance.ReplacementLevel[Type]\tNUMBER\t\t391\t1\tIfcReal\t1\nPARAM\t49df5b19-55dd-45bd-9d6c-aacb77ae5fef\tPset_MaintenanceTriggerPerformance.TargetPerformance[Type]\tNUMBER\t\t391\t1\tIfcReal\t1\n#\nGROUP\t392\tPset_ManufacturerOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf1946a98-9882-48de-98a9-3bc4dfde46cc\tPset_ManufacturerOccurrence.AcquisitionDate[Type]\tTEXT\t\t392\t1\tIfcDate\t1\nPARAM\t4f359f8c-ae4f-4957-b173-0572b28d1e08\tPset_ManufacturerOccurrence.AssemblyPlace[Type]\tTEXT\t\t392\t1\tPEnum_AssemblyPlace\t1\nPARAM\tc3149216-9dfd-467d-962c-1d9f9d028d38\tPset_ManufacturerOccurrence.BarCode[Type]\tTEXT\t\t392\t1\tIfcIdentifier\t1\nPARAM\tc2766010-a53d-494f-9bcf-774aebf6ea4c\tPset_ManufacturerOccurrence.BatchReference[Type]\tTEXT\t\t392\t1\tIfcIdentifier\t1\nPARAM\t8bf7824f-b757-4f45-8436-03cfffba59a5\tPset_ManufacturerOccurrence.ManufacturingDate[Type]\tTEXT\t\t392\t1\tIfcDate\t1\nPARAM\t7f214cbe-e394-485b-b219-4d266ad1399e\tPset_ManufacturerOccurrence.SerialNumber[Type]\tTEXT\t\t392\t1\tIfcIdentifier\t1\n#\nGROUP\t393\tPset_ManufacturerTypeInformation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7bb84d84-89d6-458b-8bad-d0d51e6a06dc\tPset_ManufacturerTypeInformation.ArticleNumber[Type]\tTEXT\t\t393\t1\tIfcIdentifier\t1\nPARAM\t6f83fe8c-095f-4d39-8f9f-3b2bf34b3011\tPset_ManufacturerTypeInformation.AssemblyPlace[Type]\tTEXT\t\t393\t1\tPEnum_AssemblyPlace\t1\nPARAM\t4d9b315a-e2ce-45ac-8ec7-27d7cf6a19da\tPset_ManufacturerTypeInformation.GlobalTradeItemNumber[Type]\tTEXT\t\t393\t1\tIfcIdentifier\t1\nPARAM\t34e1e334-928e-4d51-a220-f8dd9f201371\tPset_ManufacturerTypeInformation.Manufacturer[Type]\tTEXT\t\t393\t1\tIfcLabel\t1\nPARAM\t68ff4657-2b27-4fae-9c3b-fcdcda758411\tPset_ManufacturerTypeInformation.ModelLabel[Type]\tTEXT\t\t393\t1\tIfcLabel\t1\nPARAM\td4b5e85a-05b9-4ffb-bd6b-c6f491ade688\tPset_ManufacturerTypeInformation.ModelReference[Type]\tTEXT\t\t393\t1\tIfcLabel\t1\nPARAM\td8880685-5e31-4cce-b7fb-bcb2683aa14b\tPset_ManufacturerTypeInformation.OperatingWeight[Type]\tNUMBER\t\t393\t1\tIfcMassMeasure\t1\nPARAM\t3b88afb3-befa-48a6-9cd5-367e8c16160f\tPset_ManufacturerTypeInformation.OperationalDocument[Type]\tMULTILINETEXT\t\t393\t1\tIfcExternalReference\t1\nPARAM\t5194c64c-1706-46dc-afc6-42c0b23185f5\tPset_ManufacturerTypeInformation.PerformanceCertificate[Type]\tMULTILINETEXT\t\t393\t1\tIfcDocumentReference\t1\nPARAM\ta31f0b0e-a854-4835-8b6c-a417c89ddf55\tPset_ManufacturerTypeInformation.ProductionYear[Type]\tTEXT\t\t393\t1\tIfcLabel\t1\nPARAM\t51dd4942-3f3f-44c4-80f0-8b96b2877f60\tPset_ManufacturerTypeInformation.SafetyDocument[Type]\tMULTILINETEXT\t\t393\t1\tIfcDocumentReference\t1\nPARAM\t26a876bc-5430-4aad-9f5d-1714403e11b7\tPset_ManufacturerTypeInformation.ShippingWeight[Type]\tNUMBER\t\t393\t1\tIfcMassMeasure\t1\n#\nGROUP\t394\tPset_MarineFacilityTransportation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83bb993a-6c7f-4037-baf2-b20a73b70b30\tPset_MarineFacilityTransportation.BerthCargoWeight[Type]\tNUMBER\t\t394\t1\tIfcMassMeasure\t1\nPARAM\t099426fd-fad1-4f68-80ed-42eca6f9dc2c\tPset_MarineFacilityTransportation.BerthGrade[Type]\tTEXT\t\t394\t1\tIfcLabel\t1\nPARAM\t2775cf9b-560e-4687-980c-ccc6276c1d1f\tPset_MarineFacilityTransportation.Berths[Type]\tINTEGER\t\t394\t1\tIfcCountMeasure\t1\n#\nGROUP\t395\tPset_MarinePartChamberCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2147f812-ff2d-40e9-9337-42a6b8da7631\tPset_MarinePartChamberCommon.EffectiveChamberSize[Type]\tVOLUME\t\t395\t1\tIfcVolumeMeasure\t1\nPARAM\td697760c-a8b3-47bf-97be-3e9bf6684f07\tPset_MarinePartChamberCommon.StructuralType[Type]\tTEXT\t\t395\t1\tIfcLabel\t1\n#\nGROUP\t396\tPset_MarineVehicleCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t376d89eb-01bf-4d72-92b5-a65da68452b7\tPset_MarineVehicleCommon.AboveDeckProjectedWindEnd[Type]\tAREA\t\t396\t1\tIfcAreaMeasure\t1\nPARAM\t3921afdf-2b91-407c-9ead-4b25249c54c3\tPset_MarineVehicleCommon.AboveDeckProjectedWindSide[Type]\tAREA\t\t396\t1\tIfcAreaMeasure\t1\nPARAM\t7c8526ba-faa5-4485-ac3e-5c08ddbe79ab\tPset_MarineVehicleCommon.CargoDeadWeight[Type]\tNUMBER\t\t396\t1\tIfcMassMeasure\t1\nPARAM\t80f4859b-ea9d-4c12-8dd7-de18317de3c0\tPset_MarineVehicleCommon.Displacement[Type]\tNUMBER\t\t396\t1\tIfcMassMeasure\t1\nPARAM\t2f2fb42e-84e0-41f0-b6da-b9f42d25991a\tPset_MarineVehicleCommon.LaneMeters[Type]\tLENGTH\t\t396\t1\tIfcLengthMeasure\t1\nPARAM\t327ddbe1-5707-4775-a1fc-34ba76d2c964\tPset_MarineVehicleCommon.LengthBetweenPerpendiculars[Type]\tLENGTH\t\t396\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5494009d-054a-4021-af6c-fb3f476d1dd1\tPset_MarineVehicleCommon.VesselDepth[Type]\tLENGTH\t\t396\t1\tIfcLengthMeasure\t1\nPARAM\t745179e8-db44-45a1-9044-5f7b5facc799\tPset_MarineVehicleCommon.VesselDraft[Type]\tLENGTH\t\t396\t1\tIfcLengthMeasure\t1\n#\nGROUP\t397\tPset_MarineVehicleDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t03df59dc-ce8b-49ea-8a36-6dca53853826\tPset_MarineVehicleDesignCriteria.AllowableHullPressure[Type]\tNUMBER\t\t397\t1\tIfcPressureMeasure\t1\nPARAM\t2635f45a-4ccf-4ded-b792-7b31133ff746\tPset_MarineVehicleDesignCriteria.SoftnessCoefficient[Type]\tNUMBER\t\t397\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t398\tPset_MarkerGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t377b929a-6888-4407-9e10-a9164ecc4393\tPset_MarkerGeneral.ApproachSpeed[Type]\tNUMBER\t\t398\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tb0fb2bd6-774f-42eb-afb0-f5f8963c1b12\tPset_MarkerGeneral.MarkerType[Type]\tTEXT\t\t398\t1\tPEnum_MarkerType\t1\nPARAM\ta60aa844-645a-4921-8562-6689bd8a7530\tPset_MarkerGeneral.NominalHeight[Type]\tLENGTH\t\t398\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taea7bbb2-24d6-4c14-a64a-2e8f191d20cc\tPset_MarkerGeneral.NominalWidth[Type]\tLENGTH\t\t398\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t07ad7368-5472-43a9-9790-9457354bc86f\tPset_MarkerGeneral.Symbol[Type]\tMULTILINETEXT\t\t398\t1\tIfcExternalReference\t1\n#\nGROUP\t399\tPset_MarkingLinesCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t91cfeb00-7ace-4725-8979-065a832ebc55\tPset_MarkingLinesCommon.DashedLine[Type]\tYESNO\t\t399\t1\tIfcBoolean\t1\nPARAM\t74f90055-2425-40cd-99fd-d61f541facd5\tPset_MarkingLinesCommon.DashedLinePattern[Type]\tTEXT\t\t399\t1\tIfcLabel\t1\nPARAM\t999569e6-5f39-451d-82e6-7dd8ada555e6\tPset_MarkingLinesCommon.NominalWidth[Type]\tLENGTH\t\t399\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t400\tPset_MaterialCombustion\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9efeeaf7-43eb-425d-906f-cd8875a1ef42\tPset_MaterialCombustion.CO2Content[Type]\tNUMBER\t\t400\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t558beed3-1e66-43db-bbe9-fd68fe070c36\tPset_MaterialCombustion.COContent[Type]\tNUMBER\t\t400\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf7700e32-9650-4b0f-8db0-ac71d00a5031\tPset_MaterialCombustion.N20Content[Type]\tNUMBER\t\t400\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t540cb006-28c7-4e2b-baa6-5f3c5941728c\tPset_MaterialCombustion.SpecificHeatCapacity[Type]\tNUMBER\t\t400\t1\tIfcSpecificHeatCapacityMeasure\t1\n#\nGROUP\t401\tPset_MaterialCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4d5fbf59-c51e-4726-9f3f-d13d56b74833\tPset_MaterialCommon.MassDensity[Type]\tMASS_DENSITY\t\t401\t1\tIfcMassDensityMeasure\t1\nPARAM\t2289f91e-f4b3-460b-941d-0ca73909dfdc\tPset_MaterialCommon.MolecularWeight[Type]\tNUMBER\t\t401\t1\tIfcMolecularWeightMeasure\t1\nPARAM\tcf25826d-7bd8-4ef9-b513-7473a99a6da6\tPset_MaterialCommon.Porosity[Type]\tNUMBER\t\t401\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t402\tPset_MaterialConcrete\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0fcad757-ead1-4442-97db-c219e80c1963\tPset_MaterialConcrete.AdmixturesDescription[Type]\tTEXT\t\t402\t1\tIfcText\t1\nPARAM\t7852b617-ca37-47f0-aa40-34a916d2209b\tPset_MaterialConcrete.CompressiveStrength[Type]\tNUMBER\t\t402\t1\tIfcPressureMeasure\t1\nPARAM\t444c6c4c-4f64-472f-9b9f-a7e2d5c90171\tPset_MaterialConcrete.MaxAggregateSize[Type]\tLENGTH\t\t402\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tadb42f7f-d8a8-49e2-8542-586bd129d00d\tPset_MaterialConcrete.ProtectivePoreRatio[Type]\tNUMBER\t\t402\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t92a59e1d-772e-443f-af36-3c2a92983a07\tPset_MaterialConcrete.WaterImpermeability[Type]\tTEXT\t\t402\t1\tIfcText\t1\nPARAM\t7f9a9a0a-07e1-40b5-80d5-c4363fc2fa21\tPset_MaterialConcrete.Workability[Type]\tTEXT\t\t402\t1\tIfcText\t1\n#\nGROUP\t403\tPset_MaterialEnergy\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te3d853b3-3a93-4395-9b1c-e7c7a855a227\tPset_MaterialEnergy.GasPressure[Type]\tNUMBER\t\t403\t1\tIfcPressureMeasure\t1\nPARAM\t27d12b7f-1d36-4bd1-81cd-bca9bbed6662\tPset_MaterialEnergy.MoistureCapacityThermalGradient[Type]\tNUMBER\t\t403\t1\tIfcReal\t1\nPARAM\tacb591bf-cdf8-494f-a3c0-0ac47bb4b0f3\tPset_MaterialEnergy.SolarRefractionIndex[Type]\tNUMBER\t\t403\t1\tIfcReal\t1\nPARAM\t5b645d95-a1fc-4853-80b6-8c8de221b6f9\tPset_MaterialEnergy.SpecificHeatTemperatureDerivative[Type]\tNUMBER\t\t403\t1\tIfcReal\t1\nPARAM\t21f8c12c-f2a2-4e89-b0fa-fa5b14dc257a\tPset_MaterialEnergy.ThermalConductivityTemperatureDerivative[Type]\tNUMBER\t\t403\t1\tIfcReal\t1\nPARAM\t255b5bfb-7cbf-4788-92c8-6c9c198f2c38\tPset_MaterialEnergy.ViscosityTemperatureDerivative[Type]\tNUMBER\t\t403\t1\tIfcReal\t1\nPARAM\t82d6c0b8-63fc-4d9c-9098-2f0f15a8f655\tPset_MaterialEnergy.VisibleRefractionIndex[Type]\tNUMBER\t\t403\t1\tIfcReal\t1\n#\nGROUP\t404\tPset_MaterialFuel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9bff9010-2f32-4954-9597-fb9cbf593c9b\tPset_MaterialFuel.CarbonContent[Type]\tNUMBER\t\t404\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5e48598b-feef-4c4b-a40b-4be023eac6eb\tPset_MaterialFuel.CombustionTemperature[Type]\tNUMBER\t\t404\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tfada699a-f6a6-47c8-beed-915e15e87ab7\tPset_MaterialFuel.HigherHeatingValue[Type]\tNUMBER\t\t404\t1\tIfcHeatingValueMeasure\t1\nPARAM\tfdcb0f7d-698d-4407-88c0-3786fd1d94b1\tPset_MaterialFuel.LowerHeatingValue[Type]\tNUMBER\t\t404\t1\tIfcHeatingValueMeasure\t1\n#\nGROUP\t405\tPset_MaterialHygroscopic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcd6f1f03-0af8-4cf3-bf65-554d9f225998\tPset_MaterialHygroscopic.IsothermalMoistureCapacity[Type]\tNUMBER\t\t405\t1\tIfcIsothermalMoistureCapacityMeasure\t1\nPARAM\t1c6feb7d-1afc-45e2-b364-1205af4e3acc\tPset_MaterialHygroscopic.LowerVaporResistanceFactor[Type]\tNUMBER\t\t405\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5d280d98-5494-478d-b943-846c6d029640\tPset_MaterialHygroscopic.MoistureDiffusivity[Type]\tNUMBER\t\t405\t1\tIfcMoistureDiffusivityMeasure\t1\nPARAM\t3546c74d-197d-42d7-8c4b-721a2ff7efec\tPset_MaterialHygroscopic.UpperVaporResistanceFactor[Type]\tNUMBER\t\t405\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta559578a-b1fa-45d0-ba20-e287ab25f995\tPset_MaterialHygroscopic.VaporPermeability[Type]\tNUMBER\t\t405\t1\tIfcVaporPermeabilityMeasure\t1\n#\nGROUP\t406\tPset_MaterialMechanical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7791d773-8812-4f7d-a7b1-5d780c2f9638\tPset_MaterialMechanical.DynamicViscosity[Type]\tNUMBER\t\t406\t1\tIfcDynamicViscosityMeasure\t1\nPARAM\t5b00e03e-5fc5-4a10-a3f6-7f23abd631f1\tPset_MaterialMechanical.PoissonRatio[Type]\tNUMBER\t\t406\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t8b0db995-87a4-4c4a-9678-91661fbd99fc\tPset_MaterialMechanical.ShearModulus[Type]\tNUMBER\t\t406\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t49b4a38a-3382-4e75-ac26-2a3c4b5c51d0\tPset_MaterialMechanical.ThermalExpansionCoefficient[Type]\tNUMBER\t\t406\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\t1812487c-10b6-4f94-9252-a8877c09f7d1\tPset_MaterialMechanical.YoungModulus[Type]\tNUMBER\t\t406\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t407\tPset_MaterialOptical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5e466a16-4803-44ad-a66d-725e952da28c\tPset_MaterialOptical.SolarReflectanceBack[Type]\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t2ac2b159-f30a-49a2-abe6-f5523648f074\tPset_MaterialOptical.SolarReflectanceFront[Type]\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t19ea6ca3-8203-4b79-b475-9aa4894ec515\tPset_MaterialOptical.SolarTransmittance[Type]\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t251d8111-d0cf-4688-9cb0-db3c1999d030\tPset_MaterialOptical.ThermalIrEmissivityBack[Type]\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tf76573a8-b4d6-47cc-b44b-c4692a69d3f1\tPset_MaterialOptical.ThermalIrEmissivityFront[Type]\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\ta74d45d7-ffe5-4f1d-9c68-290bccc45ef8\tPset_MaterialOptical.ThermalIrTransmittance[Type]\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t5307ba04-10b6-4c6d-990e-8e302cd60df0\tPset_MaterialOptical.VisibleReflectanceBack[Type]\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t1b4d43b9-a994-4ee6-bab2-f64b3dee5886\tPset_MaterialOptical.VisibleReflectanceFront[Type]\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tbee7b8ac-f455-47d1-a607-79da97c82ec5\tPset_MaterialOptical.VisibleTransmittance[Type]\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t408\tPset_MaterialSteel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2d4f892d-73a2-452a-accd-2488ea68f366\tPset_MaterialSteel.HardeningModule[Type]\tNUMBER\t\t408\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t31bbe128-0354-412f-87de-859028c89d23\tPset_MaterialSteel.PlasticStrain[Type]\tNUMBER\t\t408\t1\tIfcPositiveRatioMeasure\t1\nPARAM\taa29266c-c300-4903-a937-342b1844304c\tPset_MaterialSteel.ProportionalStress[Type]\tNUMBER\t\t408\t1\tIfcPressureMeasure\t1\nPARAM\t3f574a07-79d0-41d8-af8e-ab6d46d7504f\tPset_MaterialSteel.Relaxations[Type]\tMULTILINETEXT\t\t408\t1\tPropertyTableValue\t1\nPARAM\t2a574884-3f40-48c9-b11a-d8cd5710228d\tPset_MaterialSteel.StructuralGrade[Type]\tTEXT\t\t408\t1\tIfcLabel\t1\nPARAM\t60513947-33da-455c-a35e-79359b48b091\tPset_MaterialSteel.UltimateStrain[Type]\tNUMBER\t\t408\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t652f7211-a956-4971-8eb1-2f5797307067\tPset_MaterialSteel.UltimateStress[Type]\tNUMBER\t\t408\t1\tIfcPressureMeasure\t1\nPARAM\td7b0c602-bc9d-4e37-863c-79daaecc262e\tPset_MaterialSteel.YieldStress[Type]\tNUMBER\t\t408\t1\tIfcPressureMeasure\t1\n#\nGROUP\t409\tPset_MaterialThermal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t85f85c54-9c11-4853-88a1-19bb1418cb6d\tPset_MaterialThermal.BoilingPoint[Type]\tNUMBER\t\t409\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t89398ab5-ccef-49be-b36b-bdb826e80baf\tPset_MaterialThermal.FreezingPoint[Type]\tNUMBER\t\t409\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t06635cc8-ee15-4649-8c28-4429f8918ecd\tPset_MaterialThermal.SpecificHeatCapacity[Type]\tNUMBER\t\t409\t1\tIfcSpecificHeatCapacityMeasure\t1\nPARAM\t3549c691-5d1e-45a5-845b-2edcaa8df3af\tPset_MaterialThermal.ThermalConductivity[Type]\tNUMBER\t\t409\t1\tIfcThermalConductivityMeasure\t1\n#\nGROUP\t410\tPset_MaterialWater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tccef5a23-f033-40f6-af79-9d9aff01b750\tPset_MaterialWater.AcidityConcentration[Type]\tNUMBER\t\t410\t1\tIfcIonConcentrationMeasure\t1\nPARAM\tfef1ee8c-452f-4516-8e89-28767eddf11b\tPset_MaterialWater.AlkalinityConcentration[Type]\tNUMBER\t\t410\t1\tIfcIonConcentrationMeasure\t1\nPARAM\tf46226d0-b9a7-4fbb-9da2-aea87289fcf8\tPset_MaterialWater.DissolvedSolidsContent[Type]\tNUMBER\t\t410\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\ta2dc2e7f-e426-4286-a94a-483314a7bbd9\tPset_MaterialWater.Hardness[Type]\tNUMBER\t\t410\t1\tIfcIonConcentrationMeasure\t1\nPARAM\tbaba80ac-56ad-4e6d-829d-39d6cf6ec93f\tPset_MaterialWater.ImpuritiesContent[Type]\tNUMBER\t\t410\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t918b9a2b-452d-4139-8920-6edade5d479f\tPset_MaterialWater.IsPotable[Type]\tYESNO\t\t410\t1\tIfcBoolean\t1\nPARAM\t52003081-54a2-41e1-8d4b-eb3cc57aa678\tPset_MaterialWater.PHLevel[Type]\tNUMBER\t\t410\t1\tIfcPHMeasure\t1\n#\nGROUP\t411\tPset_MaterialWood\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a5fd622-c5e3-4109-a71a-a92e6494c3cc\tPset_MaterialWood.AppearanceGrade[Type]\tTEXT\t\t411\t1\tIfcLabel\t1\nPARAM\td782a99b-7e42-4efe-8396-e89f7c060634\tPset_MaterialWood.DimensionalChangeCoefficient[Type]\tNUMBER\t\t411\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t87d83def-38c5-413f-ae6e-969a43179fb5\tPset_MaterialWood.Layers[Type]\tINTEGER\t\t411\t1\tIfcInteger\t1\nPARAM\tdd28f7f2-bbb3-4cd2-9935-02883b7c3f59\tPset_MaterialWood.Layup[Type]\tTEXT\t\t411\t1\tIfcLabel\t1\nPARAM\tccbac143-65a7-418d-ae68-386ae7bee87c\tPset_MaterialWood.MoistureContent[Type]\tNUMBER\t\t411\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t8048507b-86eb-43a6-8863-d7a2568895d1\tPset_MaterialWood.Plies[Type]\tINTEGER\t\t411\t1\tIfcInteger\t1\nPARAM\t806b20b4-0bc7-4b7c-8391-a451930c8a88\tPset_MaterialWood.Species[Type]\tTEXT\t\t411\t1\tIfcLabel\t1\nPARAM\t9a2af8c3-bcbc-44fc-b922-6c0c66528ddd\tPset_MaterialWood.StrengthGrade[Type]\tTEXT\t\t411\t1\tIfcLabel\t1\nPARAM\t7a3000f9-f385-4c88-9c37-50fd8e59a5ba\tPset_MaterialWood.ThicknessSwelling[Type]\tNUMBER\t\t411\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t412\tPset_MaterialWoodBasedBeam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc29c94a0-ff8c-456e-bed1-ca4d32926691\tPset_MaterialWoodBasedBeam.ApplicableStructuralDesignMethod[Type]\tTEXT\t\t412\t1\tIfcLabel\t1\nPARAM\t93a7b2b5-d21e-4d1f-ae78-fb67ebb0b0d8\tPset_MaterialWoodBasedBeam.InPlane.BendingStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tdd10a75f-ef45-4292-815e-c3d6a4728fea\tPset_MaterialWoodBasedBeam.InPlane.CompStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t1bda51fd-7cb5-4cd0-bbf7-cebfcea6a747\tPset_MaterialWoodBasedBeam.InPlane.CompStrengthPerp[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t0e80b9d3-825b-45df-b6ff-76a9791e81b0\tPset_MaterialWoodBasedBeam.InPlane.InstabilityFactors[Type]\tMULTILINETEXT\t\t412\t1\tPropertyTableValue\t1\nPARAM\tadd30aaa-dfe8-4444-8508-a55e18c713a8\tPset_MaterialWoodBasedBeam.InPlane.RaisedCompStrengthPerp[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tf74f1795-025f-4836-ae2d-b2eeda558a12\tPset_MaterialWoodBasedBeam.InPlane.ReferenceDepth[Type]\tLENGTH\t\t412\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4f6c58a2-27d1-42b9-baa6-af9dc612e407\tPset_MaterialWoodBasedBeam.InPlane.ShearModulus[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t5d835aff-90c0-4756-9acc-c8ac97ec2147\tPset_MaterialWoodBasedBeam.InPlane.ShearModulusMin[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t998d9129-8f9b-4839-98af-3a728f790ca3\tPset_MaterialWoodBasedBeam.InPlane.ShearStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t2741ea9b-9164-494f-9e6b-49f28926d7f1\tPset_MaterialWoodBasedBeam.InPlane.TensileStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t3c7d772a-adfb-4646-8446-0f24f8d1f5ce\tPset_MaterialWoodBasedBeam.InPlane.TensileStrengthPerp[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t7b96755c-f54c-40b1-8c95-07e945a016e3\tPset_MaterialWoodBasedBeam.InPlane.TorsionalStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tf76826c6-7584-4fb4-aeb0-3b1156647995\tPset_MaterialWoodBasedBeam.InPlane.YoungModulus[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tc6de757a-4da3-470f-9cfe-ff1422f27a0c\tPset_MaterialWoodBasedBeam.InPlane.YoungModulusMin[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tce858e02-9c99-44ec-967f-fe598877038d\tPset_MaterialWoodBasedBeam.InPlane.YoungModulusPerp[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t256ba3a3-64a8-42a1-a007-3e340befa989\tPset_MaterialWoodBasedBeam.InPlane.YoungModulusPerpMin[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t443e3154-37f3-43b0-9941-54d6d8835d5f\tPset_MaterialWoodBasedBeam.InPlaneNegative.BendingStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t981030bf-0674-492d-aef0-c92a7ae095c1\tPset_MaterialWoodBasedBeam.InPlaneNegative.CompStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tf8574867-c001-4ad3-a5c8-d61a9d67a027\tPset_MaterialWoodBasedBeam.InPlaneNegative.CompStrengthPerp[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tf04b7657-82d6-405a-b78a-5f3ff7bf16e8\tPset_MaterialWoodBasedBeam.InPlaneNegative.InstabilityFactors[Type]\tMULTILINETEXT\t\t412\t1\tPropertyTableValue\t1\nPARAM\ta01a037e-22b3-4e0f-9c28-866774cdf5a7\tPset_MaterialWoodBasedBeam.InPlaneNegative.RaisedCompStrengthPerp[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tdaf5a53c-c7b1-405f-b7b7-b39b0480fbe3\tPset_MaterialWoodBasedBeam.InPlaneNegative.ReferenceDepth[Type]\tLENGTH\t\t412\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tac062876-e48f-4bd9-bab2-7394629a3bd9\tPset_MaterialWoodBasedBeam.InPlaneNegative.ShearModulus[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tfc01a841-fd15-4856-97d9-6a13ab81d290\tPset_MaterialWoodBasedBeam.InPlaneNegative.ShearModulusMin[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t9a1e2586-9e6c-432b-9920-38a89c4accbb\tPset_MaterialWoodBasedBeam.InPlaneNegative.ShearStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tedf131af-2ae9-4f76-9cba-023ec9a93c58\tPset_MaterialWoodBasedBeam.InPlaneNegative.TensileStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tc3a67b7f-d5b9-45ad-88c1-1d267f6aff99\tPset_MaterialWoodBasedBeam.InPlaneNegative.TensileStrengthPerp[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t991bf6e3-4d04-4c62-bdfa-3221c162df02\tPset_MaterialWoodBasedBeam.InPlaneNegative.TorsionalStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tdcad751e-803e-40ac-8859-5c6758112a5e\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulus[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tedd5dfd9-fdfc-4176-8466-1a3b98f39cb9\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusMin[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\te1eb4ecc-fb4d-4b6e-987c-2bc3a45a220d\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusPerp[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t6c8e1d76-1dde-4efc-96b0-88fd9c434bef\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusPerpMin[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t7dfa6fe9-0659-4368-8b85-0d4bc04efca5\tPset_MaterialWoodBasedBeam.OutOfPlane.BendingStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t027ab243-df9a-49bf-89dd-3e1e9434a65a\tPset_MaterialWoodBasedBeam.OutOfPlane.CompStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t05bd93fc-2a9c-46b0-859d-f4c10ce00893\tPset_MaterialWoodBasedBeam.OutOfPlane.CompStrengthPerp[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t09446b10-633b-4422-9773-ebefe86c0436\tPset_MaterialWoodBasedBeam.OutOfPlane.InstabilityFactors[Type]\tMULTILINETEXT\t\t412\t1\tPropertyTableValue\t1\nPARAM\t29768c6b-1175-47e4-846e-d82c3ca5c1af\tPset_MaterialWoodBasedBeam.OutOfPlane.RaisedCompStrengthPerp[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tb8dd4401-b57a-4257-802d-6f15dbd98500\tPset_MaterialWoodBasedBeam.OutOfPlane.ReferenceDepth[Type]\tLENGTH\t\t412\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6882698f-9934-4d51-b3f5-4c0db0380935\tPset_MaterialWoodBasedBeam.OutOfPlane.ShearModulus[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t6fc84682-6ee4-4b08-9f51-0a2b338e5f2e\tPset_MaterialWoodBasedBeam.OutOfPlane.ShearModulusMin[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\td2ec3d2e-91e1-4d2e-a717-d515523b783a\tPset_MaterialWoodBasedBeam.OutOfPlane.ShearStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t77a1d82a-a779-4dd2-a4b5-7daad4d836a3\tPset_MaterialWoodBasedBeam.OutOfPlane.TensileStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\ta6577f61-2949-4209-9b93-db6bbb17f4c4\tPset_MaterialWoodBasedBeam.OutOfPlane.TensileStrengthPerp[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tdee9b476-b6fa-4a54-ba3f-cee9e3545317\tPset_MaterialWoodBasedBeam.OutOfPlane.TorsionalStrength[Type]\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\td7c59ff8-5f57-4645-8148-3cfe38bc8729\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulus[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t8d7ca738-8ab1-4881-abdd-17b3d23362f5\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusMin[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\te6898dc6-7bfa-404e-b95a-9e0894f158c8\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusPerp[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t0b82d1db-dd65-4b15-a7e9-cfe2546886a0\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusPerpMin[Type]\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t413\tPset_MaterialWoodBasedPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t767ee4ea-28b3-4a7f-b876-e24016d562dd\tPset_MaterialWoodBasedPanel.ApplicableStructuralDesignMethod[Type]\tTEXT\t\t413\t1\tIfcLabel\t1\nPARAM\t8c3c24c0-d627-46a1-95ce-7a859c597c3d\tPset_MaterialWoodBasedPanel.InPlane.BearingStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t1f416343-dc29-4a9c-935e-5ca7dd499f37\tPset_MaterialWoodBasedPanel.InPlane.BendingStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t21f0ecc5-0c00-48f6-bd4f-e589e5a24da9\tPset_MaterialWoodBasedPanel.InPlane.CompressiveStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\td5b8d803-6349-4e80-ae6c-271623b6585e\tPset_MaterialWoodBasedPanel.InPlane.RaisedCompressiveStrength[Type]\tNUMBER\t\t413\t1\tIfcPressureMeasure\t1\nPARAM\tee25e03f-01e4-47ea-916c-0d9b6958e8e8\tPset_MaterialWoodBasedPanel.InPlane.ReferenceDepth[Type]\tLENGTH\t\t413\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb2083da4-1df4-423c-bae3-0fa5ef722c4e\tPset_MaterialWoodBasedPanel.InPlane.ShearModulus[Type]\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t9a6be353-80b8-487f-a325-020bb7f12d7b\tPset_MaterialWoodBasedPanel.InPlane.ShearStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t05ae09df-40c6-4d11-8a21-8d6153f8e87e\tPset_MaterialWoodBasedPanel.InPlane.TensileStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t9def94e7-71a0-4d71-8d41-578cac7fdb48\tPset_MaterialWoodBasedPanel.InPlane.YoungModulusBending[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t52ad522c-1ef9-47a7-b942-b3fd3a6a11b2\tPset_MaterialWoodBasedPanel.InPlane.YoungModulusCompression[Type]\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t9b686f75-66eb-448b-a819-50b147c7a067\tPset_MaterialWoodBasedPanel.InPlane.YoungModulusTension[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t855479dc-d45d-410a-ae76-592c5d652e37\tPset_MaterialWoodBasedPanel.OutOfPlane.BearingStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t9204a56e-1fb8-4332-a91a-87f1eb753c15\tPset_MaterialWoodBasedPanel.OutOfPlane.BendingStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\teb0d1665-51ca-469d-8be1-ff06b2c7b055\tPset_MaterialWoodBasedPanel.OutOfPlane.CompressiveStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t42c0bd5b-efdb-4876-921e-3e41e99b0ac9\tPset_MaterialWoodBasedPanel.OutOfPlane.RaisedCompressiveStrength[Type]\tNUMBER\t\t413\t1\tIfcPressureMeasure\t1\nPARAM\tdb22064e-ed65-4635-9f5d-78cfbd98a514\tPset_MaterialWoodBasedPanel.OutOfPlane.ReferenceDepth[Type]\tLENGTH\t\t413\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8665ad99-1806-4b68-8734-26f08ca7f105\tPset_MaterialWoodBasedPanel.OutOfPlane.ShearModulus[Type]\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tb1459b78-29e5-45fa-8fcf-9c50b0330bfe\tPset_MaterialWoodBasedPanel.OutOfPlane.ShearStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t2028cc9a-6b2a-4241-adf0-8f4d250137b8\tPset_MaterialWoodBasedPanel.OutOfPlane.TensileStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\tfe2f2bec-54bc-46d0-b589-4c77390bd8f0\tPset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusBending[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t85d69a5a-4425-400b-b40b-dc1e9ec2b510\tPset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusCompression[Type]\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t6f9c1ab1-0dc0-4591-a275-34f2de1e0f53\tPset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusTension[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\td38acbdb-510f-42c6-bd6c-8ab27db2e933\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.BearingStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\teb261607-29c0-4de2-b733-5117178c7cb9\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.BendingStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t129600d1-d2bb-4014-b96e-f6d87e141509\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.CompressiveStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\tff562d4b-1cde-464c-85e0-c4b7538509ac\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.RaisedCompressiveStrength[Type]\tNUMBER\t\t413\t1\tIfcPressureMeasure\t1\nPARAM\tcddb619b-c765-4f67-9540-5cf17ce448c9\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.ReferenceDepth[Type]\tLENGTH\t\t413\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t25bf1b5c-c262-410b-ac61-ab1481ecd392\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.ShearModulus[Type]\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t29200476-d4c3-42e4-a321-27de9b91342b\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.ShearStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t7fe1a0f5-667b-40b6-ad44-3a550daf6942\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.TensileStrength[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t7514a3cb-8e9a-46f7-a2a6-db44aaccbedb\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusBending[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t2bdf070c-8d41-4dbb-a122-69eb3daf5172\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusCompression[Type]\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tc89e0881-4453-4b25-85ba-c2ef8eaeeb8e\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusTension[Type]\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\n#\nGROUP\t414\tPset_MaterialWoodBasedStructure\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf83ec55e-fbc6-4929-9139-a851817e997e\tPset_MaterialWoodBasedStructure.ApplicableStructuralDesignMethod[Type]\tTEXT\t\t414\t1\tIfcLabel\t1\n#\nGROUP\t415\tPset_MechanicalBeamInPlane\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tffee7146-8722-4fdd-8a1c-8bc9e55c2006\tPset_MechanicalBeamInPlane.BendingStrength[Type]\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\t3841c5ba-8fbe-4c00-801e-db919d0b42bf\tPset_MechanicalBeamInPlane.CompStrength[Type]\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\tf3005a9d-5480-4e5b-9c36-d0f357148dde\tPset_MechanicalBeamInPlane.CompStrengthPerp[Type]\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\t2e5be44b-7264-410d-b7f6-577c6f360194\tPset_MechanicalBeamInPlane.InstabilityFactors[Type]\tMULTILINETEXT\t\t415\t1\tPropertyTableValue\t1\nPARAM\t41efb0d5-af29-4df5-a22e-c5bc963f4ba6\tPset_MechanicalBeamInPlane.RaisedCompStrengthPerp[Type]\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\t62e79f9b-9d78-4068-9fc8-b2253e8f3958\tPset_MechanicalBeamInPlane.ReferenceDepth[Type]\tLENGTH\t\t415\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8eee30d5-f356-4f26-a136-d285487634f9\tPset_MechanicalBeamInPlane.ShearModulus[Type]\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tee173bc2-1b09-4931-984d-4cf3aec96303\tPset_MechanicalBeamInPlane.ShearModulusMin[Type]\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t5fa098c5-4498-44de-9d42-0339351dca99\tPset_MechanicalBeamInPlane.ShearStrength[Type]\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\t1f19feeb-6753-4f1a-8cfb-229bd121b98a\tPset_MechanicalBeamInPlane.TensileStrength[Type]\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\t72527e69-69c9-4579-9786-333b820d8b41\tPset_MechanicalBeamInPlane.TensileStrengthPerp[Type]\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\t6b445801-1682-4a58-b15c-e7f76ffa27c5\tPset_MechanicalBeamInPlane.TorsionalStrength[Type]\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\tf8128b96-5005-4380-b399-4c1ce7775878\tPset_MechanicalBeamInPlane.YoungModulus[Type]\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t12b56d3e-393d-4f17-a244-d954823f50c4\tPset_MechanicalBeamInPlane.YoungModulusMin[Type]\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tf649060b-6b1d-4c55-b1b5-55c09793c527\tPset_MechanicalBeamInPlane.YoungModulusPerp[Type]\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t514b5720-1fc2-4458-956d-fd7afd7589cb\tPset_MechanicalBeamInPlane.YoungModulusPerpMin[Type]\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t416\tPset_MechanicalBeamInPlaneNegative\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfe0474d2-0b44-467e-ae52-2437fecf2c52\tPset_MechanicalBeamInPlaneNegative.BendingStrength[Type]\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\t3c832e9d-bfc2-497a-966a-b42131558ae2\tPset_MechanicalBeamInPlaneNegative.CompStrength[Type]\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\t2b1d8514-5145-42da-ba9c-8912e1f4ae9f\tPset_MechanicalBeamInPlaneNegative.CompStrengthPerp[Type]\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\t66ded31c-fd23-47cd-81b6-6270d6315fac\tPset_MechanicalBeamInPlaneNegative.InstabilityFactors[Type]\tMULTILINETEXT\t\t416\t1\tPropertyTableValue\t1\nPARAM\td51ab83f-dff8-4b2c-9fd1-591289552215\tPset_MechanicalBeamInPlaneNegative.RaisedCompStrengthPerp[Type]\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\tcd0672eb-bfb8-4aa1-9f83-1abfe633268a\tPset_MechanicalBeamInPlaneNegative.ReferenceDepth[Type]\tLENGTH\t\t416\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t674e42b0-a51d-48a1-8b5d-4a28fd28559f\tPset_MechanicalBeamInPlaneNegative.ShearModulus[Type]\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tf700837f-c84c-475b-bbfa-ba2b252bb22c\tPset_MechanicalBeamInPlaneNegative.ShearModulusMin[Type]\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t3358251c-1ad8-4990-8902-360c53b6fecf\tPset_MechanicalBeamInPlaneNegative.ShearStrength[Type]\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\tc5f1ace7-0dd0-4f6a-b365-5d06c2fa54e2\tPset_MechanicalBeamInPlaneNegative.TensileStrength[Type]\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\t26e3e18c-63a1-4e57-8e11-caef7c5d7b94\tPset_MechanicalBeamInPlaneNegative.TensileStrengthPerp[Type]\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\t045d4e73-fb9c-40c7-b5d7-86b79019903a\tPset_MechanicalBeamInPlaneNegative.TorsionalStrength[Type]\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\t354b60b5-86a9-4e7f-b141-589e6776b586\tPset_MechanicalBeamInPlaneNegative.YoungModulus[Type]\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t0e4d4f27-4270-442a-83bc-557807943042\tPset_MechanicalBeamInPlaneNegative.YoungModulusMin[Type]\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t6093096f-1129-44ad-be99-df55c0057e44\tPset_MechanicalBeamInPlaneNegative.YoungModulusPerp[Type]\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t8cafbde1-34a6-4308-9aee-64423d3f2342\tPset_MechanicalBeamInPlaneNegative.YoungModulusPerpMin[Type]\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t417\tPset_MechanicalBeamOutOfPlane\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t92621f2e-4f05-4b2d-a0f1-87741b4d778f\tPset_MechanicalBeamOutOfPlane.BendingStrength[Type]\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\tdbadeaae-b567-40ab-830f-dfef4e1b7add\tPset_MechanicalBeamOutOfPlane.CompStrength[Type]\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\tda128f05-f813-4e4e-b8a0-af93aa39eb23\tPset_MechanicalBeamOutOfPlane.CompStrengthPerp[Type]\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\t1987203e-e86f-40a2-aa65-16ba7461e150\tPset_MechanicalBeamOutOfPlane.InstabilityFactors[Type]\tMULTILINETEXT\t\t417\t1\tPropertyTableValue\t1\nPARAM\t1f8309ec-f2d5-4ab2-b0d9-86d315066805\tPset_MechanicalBeamOutOfPlane.RaisedCompStrengthPerp[Type]\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\t14f0ca57-dd56-4a6c-8c3d-22d27478e942\tPset_MechanicalBeamOutOfPlane.ReferenceDepth[Type]\tLENGTH\t\t417\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf25d418e-5c21-44f7-8e91-7d84dd6a7b80\tPset_MechanicalBeamOutOfPlane.ShearModulus[Type]\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tf1cfb8b5-89ab-4aab-838c-5067e7476fbb\tPset_MechanicalBeamOutOfPlane.ShearModulusMin[Type]\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t0d8267d8-514c-43e6-89bd-77c12c517a21\tPset_MechanicalBeamOutOfPlane.ShearStrength[Type]\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\ta858588f-1f25-42c6-80b6-3ac486398c4f\tPset_MechanicalBeamOutOfPlane.TensileStrength[Type]\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\t7210e9a5-328a-4bd5-b5e4-e64ebdd34934\tPset_MechanicalBeamOutOfPlane.TensileStrengthPerp[Type]\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\tb7555208-9df6-4a02-b0c2-283eb3005cc4\tPset_MechanicalBeamOutOfPlane.TorsionalStrength[Type]\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\t85dd3612-dbb7-4b8a-902a-c89f80d0ecdc\tPset_MechanicalBeamOutOfPlane.YoungModulus[Type]\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t4ca40685-2850-4e53-a8c7-44b2a05d431d\tPset_MechanicalBeamOutOfPlane.YoungModulusMin[Type]\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t9e287192-be63-4751-90f9-2246dd6531fa\tPset_MechanicalBeamOutOfPlane.YoungModulusPerp[Type]\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t62a0e959-e322-4e15-b333-92520bb19599\tPset_MechanicalBeamOutOfPlane.YoungModulusPerpMin[Type]\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t418\tPset_MechanicalFastenerAnchorBolt\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2a923279-bb1b-43b8-9d11-88748abb36c9\tPset_MechanicalFastenerAnchorBolt.AnchorBoltDiameter[Type]\tLENGTH\t\t418\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta2ba0c4e-138b-450f-92c6-079f0f2b89f1\tPset_MechanicalFastenerAnchorBolt.AnchorBoltLength[Type]\tLENGTH\t\t418\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc04f71f5-b250-41e0-8530-406b44293d92\tPset_MechanicalFastenerAnchorBolt.AnchorBoltProtrusionLength[Type]\tLENGTH\t\t418\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tce03a176-0d7f-48c9-a1b8-239b6f007404\tPset_MechanicalFastenerAnchorBolt.AnchorBoltThreadLength[Type]\tLENGTH\t\t418\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t419\tPset_MechanicalFastenerBolt\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdc52519a-370c-4020-8d49-5c0741c7f051\tPset_MechanicalFastenerBolt.HeadShape[Type]\tTEXT\t\t419\t1\tIfcLabel\t1\nPARAM\t40c9aeba-c32f-4a4f-843f-42eb32644af5\tPset_MechanicalFastenerBolt.KeyShape[Type]\tTEXT\t\t419\t1\tIfcLabel\t1\nPARAM\t5c786117-c1fc-45ff-a094-7d8eb5ad90b5\tPset_MechanicalFastenerBolt.NutsCount[Type]\tINTEGER\t\t419\t1\tIfcCountMeasure\t1\nPARAM\tb058edb0-4ea9-4166-beea-f9ebe7c0d030\tPset_MechanicalFastenerBolt.NutShape[Type]\tTEXT\t\t419\t1\tIfcLabel\t1\nPARAM\t4708e692-811f-4642-85ab-5ab42e56092f\tPset_MechanicalFastenerBolt.ThreadDiameter[Type]\tLENGTH\t\t419\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td779ba84-5cf4-46dd-a1a6-9d00548d082e\tPset_MechanicalFastenerBolt.ThreadLength[Type]\tLENGTH\t\t419\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t80ca8304-ca85-4891-a364-817fdc8cf136\tPset_MechanicalFastenerBolt.WashersCount[Type]\tINTEGER\t\t419\t1\tIfcCountMeasure\t1\nPARAM\t11fd86b2-39a0-4a42-b112-09b476c503da\tPset_MechanicalFastenerBolt.WasherShape[Type]\tTEXT\t\t419\t1\tIfcLabel\t1\n#\nGROUP\t420\tPset_MechanicalFastenerCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t487c16d8-966d-498f-95fc-8e087ea30eb1\tPset_MechanicalFastenerCommon.NominalDiameter[Type]\tLENGTH\t\t420\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcc95b328-338e-4d40-aeb6-4db5044ea647\tPset_MechanicalFastenerCommon.NominalLength[Type]\tLENGTH\t\t420\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t421\tPset_MechanicalFastenerOCSFitting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te16ca719-11dd-4975-a2ee-021f17bc032a\tPset_MechanicalFastenerOCSFitting.ManufacturingTechnology[Type]\tTEXT\t\t421\t1\tIfcLabel\t1\nPARAM\t3dfb7fdb-d37b-4cd0-bd77-9b460bf30926\tPset_MechanicalFastenerOCSFitting.OCSFasteningType[Type]\tTEXT\t\t421\t1\tPEnum_OCSFasteningType\t1\n#\nGROUP\t422\tPset_MechanicalFastenerTypeRailFastening\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb6edeb74-bf5a-48a7-b52f-dd39dc2654f5\tPset_MechanicalFastenerTypeRailFastening.IsReducedResistanceFastening[Type]\tYESNO\t\t422\t1\tIfcBoolean\t1\nPARAM\t020301f1-3fff-451c-a80e-6d351e02074f\tPset_MechanicalFastenerTypeRailFastening.TechnicalStandard[Type]\tMULTILINETEXT\t\t422\t1\tIfcExternalReference\t1\nPARAM\t17ba4cbe-21f1-4112-b0ea-6dce5641f24e\tPset_MechanicalFastenerTypeRailFastening.TrackFasteningElasticityType[Type]\tTEXT\t\t422\t1\tPEnum_TrackFasteningElasticityType\t1\n#\nGROUP\t423\tPset_MechanicalFastenerTypeRailJoint\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t506c80ff-594c-4abb-bdc2-e835bb826e1e\tPset_MechanicalFastenerTypeRailJoint.AssemblyPlace[Type]\tTEXT\t\t423\t1\tPEnum_AssemblyPlace\t1\nPARAM\t281d083a-2dd8-4eaa-80f8-b9d00703f4a5\tPset_MechanicalFastenerTypeRailJoint.IsCWRJoint[Type]\tYESNO\t\t423\t1\tIfcBoolean\t1\nPARAM\t85ad84fc-9963-4571-a68b-db0e1c8d3538\tPset_MechanicalFastenerTypeRailJoint.IsJointControlEquipment[Type]\tYESNO\t\t423\t1\tIfcBoolean\t1\nPARAM\t1462172b-e708-4dab-b551-854f39a35f4d\tPset_MechanicalFastenerTypeRailJoint.IsJointInsulated[Type]\tYESNO\t\t423\t1\tIfcBoolean\t1\nPARAM\t2bb0c523-62a0-4cd8-84d2-c91e2de49cb5\tPset_MechanicalFastenerTypeRailJoint.IsLiftingBracketConnection[Type]\tYESNO\t\t423\t1\tIfcBoolean\t1\nPARAM\tdb0b049b-da75-4ba9-9331-a8c8b39816b0\tPset_MechanicalFastenerTypeRailJoint.NumberOfScrews[Type]\tINTEGER\t\t423\t1\tIfcCountMeasure\t1\nPARAM\tf203fb31-913a-431b-9fb8-e1d2fa88584f\tPset_MechanicalFastenerTypeRailJoint.RailGap[Type]\tLENGTH\t\t423\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td62f249a-0156-4f95-b2cd-cb2b4353223a\tPset_MechanicalFastenerTypeRailJoint.SleeperArrangement[Type]\tTEXT\t\t423\t1\tPEnum_SleeperArrangement\t1\n#\nGROUP\t424\tPset_MechanicalPanelInPlane\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc34fd351-0e04-411c-90c8-9e24f1f523bc\tPset_MechanicalPanelInPlane.BearingStrength[Type]\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\nPARAM\ta4e59c6a-3396-464e-819e-2dec3d9377c9\tPset_MechanicalPanelInPlane.BendingStrength[Type]\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\nPARAM\t9ec4dacd-0752-4534-a8aa-0670e79865d4\tPset_MechanicalPanelInPlane.CompressiveStrength[Type]\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\nPARAM\t36c6eea4-5074-4093-a973-bb87ccd652fa\tPset_MechanicalPanelInPlane.RaisedCompressiveStrength[Type]\tNUMBER\t\t424\t1\tIfcPressureMeasure\t1\nPARAM\tb321c4ca-85a4-42ce-8534-817f16c3e78e\tPset_MechanicalPanelInPlane.ReferenceDepth[Type]\tLENGTH\t\t424\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td29747cb-f0f8-4cd7-af70-efe497d5d197\tPset_MechanicalPanelInPlane.ShearModulus[Type]\tNUMBER\t\t424\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t686925c0-8f10-4b1c-8d30-9e4d3a0d3926\tPset_MechanicalPanelInPlane.ShearStrength[Type]\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\nPARAM\t7bb9fbf2-cf8b-4ba2-9078-8be9adb964b6\tPset_MechanicalPanelInPlane.TensileStrength[Type]\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\nPARAM\t1623cc25-4f24-4ee6-b41b-7f95061d224d\tPset_MechanicalPanelInPlane.YoungModulusBending[Type]\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\nPARAM\tfd130499-9717-4b1c-aa78-02cfc4255d4d\tPset_MechanicalPanelInPlane.YoungModulusCompression[Type]\tNUMBER\t\t424\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t9a67155b-4806-4a67-bc0d-44b4becb16b6\tPset_MechanicalPanelInPlane.YoungModulusTension[Type]\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\n#\nGROUP\t425\tPset_MechanicalPanelOutOfPlane\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfc5ecb1f-9614-40c9-b5dc-442a400ff036\tPset_MechanicalPanelOutOfPlane.BearingStrength[Type]\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\nPARAM\t2312b890-ede6-4adf-8dac-d9d1b8f2bc88\tPset_MechanicalPanelOutOfPlane.BendingStrength[Type]\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\nPARAM\t41fc91bb-41da-4f3c-b46f-17b202d9315f\tPset_MechanicalPanelOutOfPlane.CompressiveStrength[Type]\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\nPARAM\tb6ca2f89-3879-410c-b7e4-eb9dbef4f1a3\tPset_MechanicalPanelOutOfPlane.RaisedCompressiveStrength[Type]\tNUMBER\t\t425\t1\tIfcPressureMeasure\t1\nPARAM\t55a17a75-9819-4159-8fa0-e8fc699c618a\tPset_MechanicalPanelOutOfPlane.ReferenceDepth[Type]\tLENGTH\t\t425\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8ab94ad9-bb3f-4fdb-8430-4ed7a5c54eb8\tPset_MechanicalPanelOutOfPlane.ShearModulus[Type]\tNUMBER\t\t425\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t4d274060-eb09-49a1-b1b7-54f47a9ff9e1\tPset_MechanicalPanelOutOfPlane.ShearStrength[Type]\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\nPARAM\t738befef-6338-40b1-831c-5df42ea64692\tPset_MechanicalPanelOutOfPlane.TensileStrength[Type]\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\nPARAM\t5afe0ab3-7d9d-41a5-8e81-71432d667616\tPset_MechanicalPanelOutOfPlane.YoungModulusBending[Type]\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\nPARAM\t571d843e-a23d-435b-93c3-1ce92e5dfc57\tPset_MechanicalPanelOutOfPlane.YoungModulusCompression[Type]\tNUMBER\t\t425\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t9e2e41d9-c49b-43a2-91dd-49f8856acc49\tPset_MechanicalPanelOutOfPlane.YoungModulusTension[Type]\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\n#\nGROUP\t426\tPset_MechanicalPanelOutOfPlaneNegative\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td706a8eb-4419-4fbb-9a50-1b410682869f\tPset_MechanicalPanelOutOfPlaneNegative.BearingStrength[Type]\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\nPARAM\t065947c9-7320-4c6d-8a33-0c8c4575a7b4\tPset_MechanicalPanelOutOfPlaneNegative.BendingStrength[Type]\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\nPARAM\t77916265-2ec1-4d22-953d-ff760e314334\tPset_MechanicalPanelOutOfPlaneNegative.CompressiveStrength[Type]\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\nPARAM\t26633243-2d68-437d-b3ee-c99938363dc9\tPset_MechanicalPanelOutOfPlaneNegative.RaisedCompressiveStrength[Type]\tNUMBER\t\t426\t1\tIfcPressureMeasure\t1\nPARAM\t88300d1a-5ca5-4f9c-be0e-9a0f03d83ac7\tPset_MechanicalPanelOutOfPlaneNegative.ReferenceDepth[Type]\tLENGTH\t\t426\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t61924c4b-e97e-4595-8cae-abf10ab71c13\tPset_MechanicalPanelOutOfPlaneNegative.ShearModulus[Type]\tNUMBER\t\t426\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tc707810a-d102-4a90-9e68-422846ed3ebc\tPset_MechanicalPanelOutOfPlaneNegative.ShearStrength[Type]\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\nPARAM\t9f9b27af-e316-4d74-b16a-2d356f1c9169\tPset_MechanicalPanelOutOfPlaneNegative.TensileStrength[Type]\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\nPARAM\tc8c2e380-4157-482c-bdd8-d23ca3dace74\tPset_MechanicalPanelOutOfPlaneNegative.YoungModulusBending[Type]\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\nPARAM\t76eadfa4-57f7-4d4a-a500-a8f85a8b8511\tPset_MechanicalPanelOutOfPlaneNegative.YoungModulusCompression[Type]\tNUMBER\t\t426\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t782e8e48-c6f0-4055-8597-bfe14a7037bb\tPset_MechanicalPanelOutOfPlaneNegative.YoungModulusTension[Type]\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\n#\nGROUP\t427\tPset_MedicalDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2e0babf7-864c-4c36-b6d8-1bf691628186\tPset_MedicalDeviceTypeCommon.Reference[Type]\tTEXT\t\t427\t1\tIfcIdentifier\t1\nPARAM\t5df70c6f-567b-4eb6-b22f-2ea848480085\tPset_MedicalDeviceTypeCommon.Status[Type]\tTEXT\t\t427\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t428\tPset_MemberCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6b870c11-085a-4166-83bb-7daad61f8555\tPset_MemberCommon.FireRating[Type]\tTEXT\t\t428\t1\tIfcLabel\t1\nPARAM\ta4b624ea-871b-4cbc-abdc-e76206bc6e34\tPset_MemberCommon.IsExternal[Type]\tYESNO\t\t428\t1\tIfcBoolean\t1\nPARAM\tbec6ebf9-ab87-4cb3-bec3-9775cf06fadd\tPset_MemberCommon.LoadBearing[Type]\tYESNO\t\t428\t1\tIfcBoolean\t1\nPARAM\t9c2089d0-692e-4dbf-976d-40b9ed7abc31\tPset_MemberCommon.Reference[Type]\tTEXT\t\t428\t1\tIfcIdentifier\t1\nPARAM\t48b9660a-922b-4c5e-9b38-05974861236d\tPset_MemberCommon.Roll[Type]\tNUMBER\t\t428\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tea64bbac-75bf-428b-bacc-9d8886afa3d6\tPset_MemberCommon.Slope[Type]\tNUMBER\t\t428\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t9576111d-1751-4241-977a-7edcfab52403\tPset_MemberCommon.Span[Type]\tLENGTH\t\t428\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfc9f29c7-f117-4deb-a967-7eeec169fa7e\tPset_MemberCommon.Status[Type]\tTEXT\t\t428\t1\tPEnum_ElementStatus\t1\nPARAM\t908a250c-ebe3-40b9-bfe4-f8f26a581bd8\tPset_MemberCommon.ThermalTransmittance[Type]\tNUMBER\t\t428\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t429\tPset_MemberTypeAnchoringBar\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t38277198-bbd9-4417-95f2-f862b31050b1\tPset_MemberTypeAnchoringBar.HasLightningRod[Type]\tYESNO\t\t429\t1\tIfcBoolean\t1\nPARAM\t4597fada-a89d-4af6-946a-32c5ca8006d2\tPset_MemberTypeAnchoringBar.MechanicalStressType[Type]\tTEXT\t\t429\t1\tPEnum_MechanicalStressType\t1\n#\nGROUP\t430\tPset_MemberTypeCatenaryStay\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t188a7183-32c8-49b2-9834-3add52b6a6b2\tPset_MemberTypeCatenaryStay.AssemblyInstruction[Type]\tMULTILINETEXT\t\t430\t1\tIfcExternalReference\t1\nPARAM\t6d511c6a-fb08-4412-ad44-9c2f07ae7ac6\tPset_MemberTypeCatenaryStay.CatenaryStayType[Type]\tTEXT\t\t430\t1\tPEnum_CatenaryStayType\t1\nPARAM\t11251d77-6310-4295-a023-1d21259b7918\tPset_MemberTypeCatenaryStay.NominalHeight[Type]\tLENGTH\t\t430\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tbf9007a8-6321-4e18-a49e-6703a3169072\tPset_MemberTypeCatenaryStay.NominalLength[Type]\tLENGTH\t\t430\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t431\tPset_MemberTypeOCSRigidSupport\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0375c7f1-868f-4d8e-ab43-37ff82b114b7\tPset_MemberTypeOCSRigidSupport.AssemblyInstruction[Type]\tMULTILINETEXT\t\t431\t1\tIfcExternalReference\t1\nPARAM\t9ed23adf-b352-4d6c-8265-95cec91714f6\tPset_MemberTypeOCSRigidSupport.ContactWireStagger[Type]\tLENGTH\t\t431\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t432\tPset_MemberTypePost\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0e599315-d8ca-4784-8f7e-fd7efe5c1a19\tPset_MemberTypePost.BendingStrength[Type]\tNUMBER\t\t432\t1\tIfcPressureMeasure\t1\nPARAM\t7ae4daab-6c81-4f2d-abf6-9b1df8ef6673\tPset_MemberTypePost.ConicityRatio[Type]\tNUMBER\t\t432\t1\tIfcRatioMeasure\t1\nPARAM\t21c6130a-3206-4e68-92c7-58d58359efee\tPset_MemberTypePost.LoadBearingCapacity[Type]\tNUMBER\t\t432\t1\tIfcPlanarForceMeasure\t1\nPARAM\td5bfd80d-c761-4b82-af37-eeb30742b624\tPset_MemberTypePost.NominalHeight[Type]\tLENGTH\t\t432\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tac54784b-e3c4-41cc-be50-327c43076122\tPset_MemberTypePost.TorsionalStrength[Type]\tNUMBER\t\t432\t1\tIfcPressureMeasure\t1\nPARAM\tdd50ac30-f449-4a73-aa73-4ce4c9addf29\tPset_MemberTypePost.WindLoadRating[Type]\tTEXT\t\t432\t1\tIfcLabel\t1\n#\nGROUP\t433\tPset_MemberTypeTieBar\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t91c53efc-cdd3-4f43-93ae-fda349163c4d\tPset_MemberTypeTieBar.IsTemporaryInstallation[Type]\tYESNO\t\t433\t1\tIfcBoolean\t1\n#\nGROUP\t434\tPset_MobileTelecommunicationsApplianceTypeAccessPoint\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8363d0a1-aa02-4f32-a264-41a20ea10472\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.BandWidth[Type]\tNUMBER\t\t434\t1\tIfcFrequencyMeasure\t1\nPARAM\tfd7d11e6-66ff-4aca-a332-d96c92b11a0b\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.DataEncryptionType[Type]\tTEXT\t\t434\t1\tIfcLabel\t1\nPARAM\tda0af65f-59d7-49f1-aea0-e796a404c065\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.DataExchangeRate[Type]\tINTEGER\t\t434\t1\tIfcIntegerCountRateMeasure\t1\nPARAM\t84267f8a-428c-4b17-b43b-63ca5c4693ef\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.NumberOfAntennas[Type]\tINTEGER\t\t434\t1\tIfcCountMeasure\t1\nPARAM\tbc7de6af-f2b8-4b73-8e45-cf1b1b20c5dd\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t434\t1\tPropertyTableValue\t1\nPARAM\t9964324a-e6f7-4de9-b45e-30e9b774337d\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.UserCapacity[Type]\tINTEGER\t\t434\t1\tIfcInteger\t1\n#\nGROUP\t435\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbfe45564-ac3a-49f6-8309-144a89535ede\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit.MaximumNumberOfRRUs[Type]\tINTEGER\t\t435\t1\tIfcInteger\t1\nPARAM\t7b0793c1-d5a7-468c-84e6-c8a54674f0f7\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit.NumberOfCarriers[Type]\tINTEGER\t\t435\t1\tIfcCountMeasure\t1\nPARAM\t3935b05d-52f7-4096-b3ff-213485f86bc3\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit.NumberOfEmergencyTransceivers[Type]\tINTEGER\t\t435\t1\tIfcCountMeasure\t1\nPARAM\t8ec51ed0-007d-4bb4-92ee-ecd530c5e88c\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t435\t1\tPropertyTableValue\t1\n#\nGROUP\t436\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taf930fb2-a08e-4ecb-8e15-91b7fd04109d\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.DownlinkRadioBand[Type]\tMULTILINETEXT\t\t436\t1\tPropertyBoundedValue\t1\nPARAM\t8add2ef7-246e-4f51-8cc7-c1484d92ce2b\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.ExchangeCapacity[Type]\tINTEGER\t\t436\t1\tIfcInteger\t1\nPARAM\tad5de0b0-7c6a-413e-8e32-ddc8e8289411\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfAntennas[Type]\tINTEGER\t\t436\t1\tIfcCountMeasure\t1\nPARAM\tbcaea370-0e02-4bc1-b3d5-642498452d0a\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfCarriers[Type]\tINTEGER\t\t436\t1\tIfcCountMeasure\t1\nPARAM\tb23bce57-67b7-435b-9a14-0075b9bd94ca\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfEmergencyTransceivers[Type]\tINTEGER\t\t436\t1\tIfcCountMeasure\t1\nPARAM\t50703cdf-debf-4664-b60d-5a192c0990db\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t436\t1\tPropertyTableValue\t1\nPARAM\t50e1281f-6975-47f3-ae44-870a6b1299a8\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfTransceiversPerAntenna[Type]\tMULTILINETEXT\t\t436\t1\tPropertyTableValue\t1\nPARAM\t9f051538-5d5f-4006-9ce2-183791e4d297\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.RadiatedOutputPowerPerAntenna[Type]\tMULTILINETEXT\t\t436\t1\tPropertyTableValue\t1\nPARAM\t497f9aa6-dcd0-41d0-87a6-02953b21ef82\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.UplinkRadioBand[Type]\tMULTILINETEXT\t\t436\t1\tPropertyBoundedValue\t1\n#\nGROUP\t437\tPset_MobileTelecommunicationsApplianceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9be548ae-ecdd-40d7-b438-8bc06cb6d8cf\tPset_MobileTelecommunicationsApplianceTypeCommon.Reference[Type]\tTEXT\t\t437\t1\tIfcIdentifier\t1\nPARAM\tad3342e1-4063-4c2c-9077-8afb72c8bcc3\tPset_MobileTelecommunicationsApplianceTypeCommon.Status[Type]\tTEXT\t\t437\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t438\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t509ca9a5-4080-4444-be88-603ad6e65641\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.DownlinkRadioBand[Type]\tMULTILINETEXT\t\t438\t1\tPropertyBoundedValue\t1\nPARAM\t8fe734ad-d7aa-4ce9-bfc9-46985b4a3de0\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.NumberOfAntennas[Type]\tINTEGER\t\t438\t1\tIfcCountMeasure\t1\nPARAM\t5c8ed386-0cbb-4409-9299-f9062d963875\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.NumberOfCarriers[Type]\tINTEGER\t\t438\t1\tIfcCountMeasure\t1\nPARAM\tee1c4d60-c60d-4a0a-a52c-43ddb48022cc\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t438\t1\tPropertyTableValue\t1\nPARAM\ta79e75d2-614f-43fc-878e-7b1c626cebb9\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.RadiatedOutputPowerPerAntenna[Type]\tMULTILINETEXT\t\t438\t1\tPropertyTableValue\t1\nPARAM\t91c6e42f-4340-46ec-a4b0-0714d532ce08\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.UplinkRadioBand[Type]\tMULTILINETEXT\t\t438\t1\tPropertyBoundedValue\t1\n#\nGROUP\t439\tPset_MobileTelecommunicationsApplianceTypeMasterUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7188d968-02a9-4f1c-8a3a-0eaf5d84dc3c\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.MasterUnitType[Type]\tTEXT\t\t439\t1\tPEnum_MasterUnitType\t1\nPARAM\t3f059f7b-e488-450c-baed-04a44fbc9b65\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.MaximumNumberOfConnectedRUs[Type]\tINTEGER\t\t439\t1\tIfcInteger\t1\nPARAM\te4e6cb75-1da4-4131-a43a-d3b3abf0cd19\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t439\t1\tPropertyTableValue\t1\nPARAM\t542aeeea-65af-463d-ac85-ab7fe6f81eb6\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmissionType[Type]\tTEXT\t\t439\t1\tPEnum_TransmissionType\t1\nPARAM\t0c262b1f-f5a1-4f13-a875-d729e78915b0\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmittedBandwidth[Type]\tNUMBER\t\t439\t1\tIfcFrequencyMeasure\t1\nPARAM\tc326cdfa-ec77-4c1e-91a7-aeb9bddeca66\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmittedFrequency[Type]\tNUMBER\t\t439\t1\tIfcFrequencyMeasure\t1\nPARAM\ta3efc140-cf8d-47c4-be30-bc852d395696\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmittedSignal[Type]\tTEXT\t\t439\t1\tPEnum_TransmittedSignal\t1\n#\nGROUP\t440\tPset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t90780450-496c-46ef-9a5c-b45f6852ce5b\tPset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter.MaximumNumberOfManagedBSCs[Type]\tINTEGER\t\t440\t1\tIfcInteger\t1\nPARAM\t2de57c2f-03b3-43ef-b326-ec99268b9eb6\tPset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t440\t1\tPropertyTableValue\t1\nPARAM\t3710dffe-df6f-4527-901d-48445a4ff516\tPset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter.UserCapacity[Type]\tINTEGER\t\t440\t1\tIfcInteger\t1\n#\nGROUP\t441\tPset_MobileTelecommunicationsApplianceTypeMSCServer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4530d634-1531-4457-8508-217dca749d53\tPset_MobileTelecommunicationsApplianceTypeMSCServer.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t441\t1\tPropertyTableValue\t1\nPARAM\ta6220cf2-3baf-4b27-95c1-bb5ea3e7734c\tPset_MobileTelecommunicationsApplianceTypeMSCServer.UserCapacity[Type]\tINTEGER\t\t441\t1\tIfcInteger\t1\n#\nGROUP\t442\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t44edf49f-bc5c-4eb9-8987-6786afa8bedf\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.AntennaType[Type]\tTEXT\t\t442\t1\tIfcLabel\t1\nPARAM\tb8b075ed-5e5a-40ab-a933-d178ba63cc07\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.DownlinkRadioBand[Type]\tMULTILINETEXT\t\t442\t1\tPropertyBoundedValue\t1\nPARAM\t66b2eb71-da18-4fcc-9a54-b3fcd79d2e41\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.NumberOfCarriers[Type]\tINTEGER\t\t442\t1\tIfcCountMeasure\t1\nPARAM\t1f0696b7-e450-4b44-84b5-4baca4f7f7a8\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t442\t1\tPropertyTableValue\t1\nPARAM\tf948e3aa-63a8-4fdc-a40c-cf57efe553c0\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.NumberOfTransceiversPerAntenna[Type]\tMULTILINETEXT\t\t442\t1\tPropertyTableValue\t1\nPARAM\t12c5ef90-f0a9-4796-8f08-af98866d87d6\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.RadiatedOutputPowerPerAntenna[Type]\tMULTILINETEXT\t\t442\t1\tPropertyTableValue\t1\nPARAM\t659ba1f0-e310-45d1-8cd5-1bb3fa1cc431\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.RRUConnectionType[Type]\tTEXT\t\t442\t1\tPEnum_UnitConnectionType\t1\nPARAM\t92a33b9e-d639-4817-ae90-0f728008072c\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.UplinkRadioBand[Type]\tMULTILINETEXT\t\t442\t1\tPropertyBoundedValue\t1\n#\nGROUP\t443\tPset_MobileTelecommunicationsApplianceTypeRemoteUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te5a24257-df50-4ecc-9e9c-ad8c9811b7f6\tPset_MobileTelecommunicationsApplianceTypeRemoteUnit.NumberOfAntennas[Type]\tINTEGER\t\t443\t1\tIfcCountMeasure\t1\nPARAM\tc146c85f-f399-4ef1-bea1-d378ca5d19b9\tPset_MobileTelecommunicationsApplianceTypeRemoteUnit.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t443\t1\tPropertyTableValue\t1\nPARAM\ta4f7142a-5bd3-41b8-b69a-63aac3d94866\tPset_MobileTelecommunicationsApplianceTypeRemoteUnit.RUConnectionType[Type]\tTEXT\t\t443\t1\tPEnum_UnitConnectionType\t1\n#\nGROUP\t444\tPset_MooringDeviceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t421b8caf-5cfc-4a84-9900-077c80255e65\tPset_MooringDeviceCommon.AnchorageType[Type]\tTEXT\t\t444\t1\tPEnum_AnchorageType\t1\nPARAM\t94f0b556-6544-441a-901b-c67d2ea67435\tPset_MooringDeviceCommon.DeviceCapacity[Type]\tNUMBER\t\t444\t1\tIfcForceMeasure\t1\nPARAM\t7f317e27-9c75-442a-8f24-7603c650a571\tPset_MooringDeviceCommon.DeviceType[Type]\tTEXT\t\t444\t1\tPEnum_MooringDeviceType\t1\nPARAM\t4bb26074-6643-4538-beaf-f62b6d1ff7f1\tPset_MooringDeviceCommon.MaximumLineCount[Type]\tINTEGER\t\t444\t1\tIfcCountMeasure\t1\nPARAM\t902de825-aee3-4dda-9d6b-09da0710ef2d\tPset_MooringDeviceCommon.MaximumLineSlope[Type]\tNUMBER\t\t444\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tab7a4556-7b06-4f75-ac87-0de8f6b37d96\tPset_MooringDeviceCommon.MinumumLineSlope[Type]\tNUMBER\t\t444\t1\tIfcPlaneAngleMeasure\t1\n#\nGROUP\t445\tPset_MotorConnectionTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2ae16318-9fdb-4df8-99cc-42af74a5b71e\tPset_MotorConnectionTypeCommon.Reference[Type]\tTEXT\t\t445\t1\tIfcIdentifier\t1\nPARAM\t6ab6f34d-2edf-4d24-a014-24627343c342\tPset_MotorConnectionTypeCommon.Status[Type]\tTEXT\t\t445\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t446\tPset_MultiStateInput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf321b947-310e-4e18-8685-52532a631e40\tPset_MultiStateInput.AlarmValues[Type]\tMULTILINETEXT\t\t446\t1\tPropertyListValue\t1\nPARAM\t9cdf6e22-2b9e-4033-935e-3d194655cdd9\tPset_MultiStateInput.EventEnable[Type]\tTEXT\t\t446\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\t95782e0c-da34-4ef6-8014-6943cf603358\tPset_MultiStateInput.NotifyType[Type]\tTEXT\t\t446\t1\tPEnum_BACnetNotifyType\t1\nPARAM\t6a8979e8-a760-456e-9ae4-e5787a14fb7c\tPset_MultiStateInput.NumberOfStates[Type]\tINTEGER\t\t446\t1\tIfcInteger\t1\nPARAM\t44e9929b-d60d-4bb9-9fcc-46861885e721\tPset_MultiStateInput.StateText[Type]\tMULTILINETEXT\t\t446\t1\tPropertyListValue\t1\n#\nGROUP\t447\tPset_MultiStateOutput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8201ec8f-229d-42be-a524-a5b212b87c04\tPset_MultiStateOutput.AlarmValues[Type]\tMULTILINETEXT\t\t447\t1\tPropertyListValue\t1\nPARAM\tbf9ec0b5-e95b-4b3d-b4f3-577dba95a5de\tPset_MultiStateOutput.EventEnable[Type]\tTEXT\t\t447\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\tc18c7c9d-d88c-4942-80e6-7cb56c07b1cb\tPset_MultiStateOutput.NotifyType[Type]\tTEXT\t\t447\t1\tPEnum_BACnetNotifyType\t1\nPARAM\t31afd126-2894-4b44-818f-f2feae471bc8\tPset_MultiStateOutput.NumberOfStates[Type]\tINTEGER\t\t447\t1\tIfcInteger\t1\nPARAM\t7a286f52-1040-4deb-b84c-2efa8756a8d3\tPset_MultiStateOutput.StateText[Type]\tMULTILINETEXT\t\t447\t1\tPropertyListValue\t1\n#\nGROUP\t448\tPset_OnSiteCastKerb\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5973d116-3817-4064-9e67-6000e4e462e0\tPset_OnSiteCastKerb.NominalHeight[Type]\tLENGTH\t\t448\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t12554059-777f-46eb-b13d-30fba5fdc784\tPset_OnSiteCastKerb.NominalWidth[Type]\tLENGTH\t\t448\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t449\tPset_OnSiteTelecomControlUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9b1ed0f0-9bb7-46ed-87d0-f736253ba66b\tPset_OnSiteTelecomControlUnit.ControllerInterfaceType[Type]\tTEXT\t\t449\t1\tPEnum_ControllerInterfaceType\t1\nPARAM\t5af31647-3dc2-4510-897c-37b7c46b5413\tPset_OnSiteTelecomControlUnit.HasEarthquakeAlarm[Type]\tYESNO\t\t449\t1\tIfcBoolean\t1\nPARAM\t09e4ea0c-8e6c-42b5-8d2e-8a5305d5431b\tPset_OnSiteTelecomControlUnit.HasEarthquakeCollection[Type]\tYESNO\t\t449\t1\tIfcBoolean\t1\nPARAM\tac322b0e-f846-45da-9d9d-956867c6705e\tPset_OnSiteTelecomControlUnit.HasForeignObjectCollection[Type]\tYESNO\t\t449\t1\tIfcBoolean\t1\nPARAM\t4eee26a0-8b02-4009-a2de-7e9c0bfe1f04\tPset_OnSiteTelecomControlUnit.HasOutputFunction[Type]\tYESNO\t\t449\t1\tIfcBoolean\t1\nPARAM\t0a8ee353-759e-4eb6-83cf-9cc955c477e1\tPset_OnSiteTelecomControlUnit.HasRainCollection[Type]\tYESNO\t\t449\t1\tIfcBoolean\t1\nPARAM\t123c5070-1f79-445a-bfce-7cc9af4dc2f2\tPset_OnSiteTelecomControlUnit.HasSnowCollection[Type]\tYESNO\t\t449\t1\tIfcBoolean\t1\nPARAM\tbd2feeba-7894-48a1-87dd-77f20a00f38a\tPset_OnSiteTelecomControlUnit.HasWindCollection[Type]\tYESNO\t\t449\t1\tIfcBoolean\t1\n#\nGROUP\t450\tPset_OpeningElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t90c1407e-c3bb-4cc0-aee3-4c690c96099c\tPset_OpeningElementCommon.AcousticRating[Type]\tTEXT\t\t450\t1\tIfcLabel\t1\nPARAM\t8ee14156-35e6-46da-ae64-d2712dbe164b\tPset_OpeningElementCommon.FireExit[Type]\tYESNO\t\t450\t1\tIfcBoolean\t1\nPARAM\t4a77d63b-d476-45ef-ae29-755468c1068f\tPset_OpeningElementCommon.FireRating[Type]\tTEXT\t\t450\t1\tIfcLabel\t1\nPARAM\t6aa48b90-f7f6-48f7-b803-d526590b06e3\tPset_OpeningElementCommon.ParallelJambs[Type]\tNUMBER\t\t450\t1\tIfcBoolean \t1\nPARAM\t6c298ff5-edfe-409f-b293-38c614293fcc\tPset_OpeningElementCommon.ProtectedOpening[Type]\tYESNO\t\t450\t1\tIfcBoolean\t1\nPARAM\t9d2c3539-71dc-434f-b52d-7600b4bd7bfb\tPset_OpeningElementCommon.Purpose[Type]\tTEXT\t\t450\t1\tIfcLabel\t1\nPARAM\t0d29ae77-9f19-4701-a7a1-cce762e3da80\tPset_OpeningElementCommon.Reference[Type]\tTEXT\t\t450\t1\tIfcIdentifier\t1\nPARAM\t0c4f6d9e-9fe3-4096-9e14-450ea05cc34a\tPset_OpeningElementCommon.Status[Type]\tTEXT\t\t450\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t451\tPset_OpticalAdapter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c90666e-4ecd-4689-9f64-4c27417d98ca\tPset_OpticalAdapter.FiberType[Type]\tTEXT\t\t451\t1\tPEnum_FiberType\t1\n#\nGROUP\t452\tPset_OpticalPigtail\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t582dfb5a-354b-4783-b684-128db9e0c578\tPset_OpticalPigtail.ConnectorType[Type]\tTEXT\t\t452\t1\tIfcLabel\t1\nPARAM\t07aa59ba-e150-4468-a28f-80dd504d2500\tPset_OpticalPigtail.FiberType[Type]\tTEXT\t\t452\t1\tPEnum_FiberType\t1\nPARAM\tba88d718-0666-44b8-9b7d-9e1869bb06a8\tPset_OpticalPigtail.JacketColour[Type]\tTEXT\t\t452\t1\tIfcLabel\t1\n#\nGROUP\t453\tPset_OpticalSplitter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta24f96ca-8dc5-4434-b96f-9ae27859d160\tPset_OpticalSplitter.NumberOfBranches[Type]\tINTEGER\t\t453\t1\tIfcCountMeasure\t1\nPARAM\t8ae961f5-16af-48e8-afd3-5f1b243f52f2\tPset_OpticalSplitter.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t453\t1\tPropertyTableValue\t1\nPARAM\t4c41890d-8307-432f-b6a5-49f9da954eaf\tPset_OpticalSplitter.OpticalSplitterType[Type]\tTEXT\t\t453\t1\tPEnum_OpticalSplitterType\t1\n#\nGROUP\t454\tPset_OutletTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1ecd7cc5-27c8-45fa-962c-31badeadfd2e\tPset_OutletTypeCommon.IsPluggableOutlet[Type]\tYESNO\t\t454\t1\tIfcLogical\t1\nPARAM\t4ef4bf5e-24c6-49af-b31b-63ac06035055\tPset_OutletTypeCommon.NumberOfSockets[Type]\tINTEGER\t\t454\t1\tIfcCountMeasure\t1\nPARAM\t23f48668-2c01-4fe9-9959-c4b6fba46f3e\tPset_OutletTypeCommon.Reference[Type]\tTEXT\t\t454\t1\tIfcIdentifier\t1\nPARAM\t8a026609-c3b2-4f9a-a1ae-991e3425de33\tPset_OutletTypeCommon.Status[Type]\tTEXT\t\t454\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t455\tPset_OutsideDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3d78105f-47a3-4a85-83b4-688dd5389536\tPset_OutsideDesignCriteria.BuildingThermalExposure[Type]\tTEXT\t\t455\t1\tPEnum_BuildingThermalExposure\t1\nPARAM\t37a8e8f5-8447-4381-9399-f01002574b7c\tPset_OutsideDesignCriteria.CoolingDesignDay[Type]\tTEXT\t\t455\t1\tIfcDateTime\t1\nPARAM\t279396b1-a504-4bfc-a77c-cca54ff5255b\tPset_OutsideDesignCriteria.CoolingDryBulb[Type]\tNUMBER\t\t455\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tb6c81bad-efb6-4da7-8b97-f8cf64fccc24\tPset_OutsideDesignCriteria.CoolingWetBulb[Type]\tNUMBER\t\t455\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t71aececa-b3b1-47fa-88b8-04a78d3175a9\tPset_OutsideDesignCriteria.HeatingDesignDay[Type]\tTEXT\t\t455\t1\tIfcDateTime\t1\nPARAM\tf3cf636b-30c8-4574-b053-f1ddc3930788\tPset_OutsideDesignCriteria.HeatingDryBulb[Type]\tNUMBER\t\t455\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t2b688990-9a40-4c1c-8eb6-e13da60435b8\tPset_OutsideDesignCriteria.HeatingWetBulb[Type]\tNUMBER\t\t455\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t6e53c72a-8dd8-46fa-926d-8d6285376ac7\tPset_OutsideDesignCriteria.PrevailingWindDirection[Type]\tNUMBER\t\t455\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t81947f73-6438-41d7-a30d-af83c47e86b3\tPset_OutsideDesignCriteria.PrevailingWindVelocity[Type]\tNUMBER\t\t455\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tbfb87014-3eba-4563-91c5-d741dab2a8f0\tPset_OutsideDesignCriteria.WeatherDataDate[Type]\tTEXT\t\t455\t1\tIfcDateTime\t1\nPARAM\ta98482ab-b889-4f34-8621-e7c42785b8c9\tPset_OutsideDesignCriteria.WeatherDataStation[Type]\tTEXT\t\t455\t1\tIfcText\t1\n#\nGROUP\t456\tPset_PackingInstructions\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t88b0774e-e25c-4771-b26d-719897981d66\tPset_PackingInstructions.ContainerMaterial[Type]\tMULTILINETEXT\t\t456\t1\tIfcMaterialDefinition\t1\nPARAM\t2ce81dee-da7d-4f53-8ca4-b772343e9d88\tPset_PackingInstructions.PackingCareType[Type]\tTEXT\t\t456\t1\tPEnum_PackingCareType\t1\nPARAM\t1ae09b26-53a1-4360-90b3-194e32310760\tPset_PackingInstructions.SpecialInstructions[Type]\tTEXT\t\t456\t1\tIfcText\t1\nPARAM\tee5ddac9-f9bc-483a-9e0e-14ff8fed2596\tPset_PackingInstructions.WrappingMaterial[Type]\tMULTILINETEXT\t\t456\t1\tIfcMaterialDefinition\t1\n#\nGROUP\t457\tPset_PatchCordCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t35bcdfd4-42e8-45d3-8afc-50e0716d7fed\tPset_PatchCordCable.JacketColour[Type]\tTEXT\t\t457\t1\tIfcLabel\t1\n#\nGROUP\t458\tPset_PavementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2cfc55f7-c846-40c7-b4ab-f66322de2475\tPset_PavementCommon.NominalLength[Type]\tLENGTH\t\t458\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tabda6484-8f60-4254-888e-d1d2de5c74c8\tPset_PavementCommon.NominalThickness[Type]\tLENGTH\t\t458\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\ta285e369-22e5-49d2-bcce-68a7c022d346\tPset_PavementCommon.NominalThicknessEnd[Type]\tLENGTH\t\t458\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t07cb6384-4a37-4a21-b07f-55da64cbd49d\tPset_PavementCommon.NominalWidth[Type]\tLENGTH\t\t458\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t1e589d54-ac7d-413f-9dce-d0df709ee20e\tPset_PavementCommon.Reference[Type]\tTEXT\t\t458\t1\tIfcIdentifier\t1\nPARAM\t3e0ea20b-2dfd-4dab-a9ea-22c19713a063\tPset_PavementCommon.Status[Type]\tTEXT\t\t458\t1\tPEnum_ElementStatus\t1\nPARAM\tdefae61a-5509-4c55-a53a-c87919ce0475\tPset_PavementCommon.StructuralSlope[Type]\tNUMBER\t\t458\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta3f64132-4cba-4227-b6df-f71fe58bf220\tPset_PavementCommon.StructuralSlopeType[Type]\tTEXT\t\t458\t1\tIfcLabel\t1\n#\nGROUP\t459\tPset_PavementMillingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta759e462-a2e6-4a20-a596-1bc8b252d361\tPset_PavementMillingCommon.NominalDepth[Type]\tLENGTH\t\t459\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tb5772d4f-012d-4c19-99cf-3dd869ed256f\tPset_PavementMillingCommon.NominalWidth[Type]\tLENGTH\t\t459\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t460\tPset_PavementSurfaceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc3e3d66b-5699-485c-85dd-3f52a533ccc6\tPset_PavementSurfaceCommon.PavementRoughness[Type]\tNUMBER\t\t460\t1\tIfcNumericMeasure\t1\nPARAM\teb50e4ad-581b-46cd-8f88-0fd5fea44065\tPset_PavementSurfaceCommon.PavementTexture[Type]\tLENGTH\t\t460\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t461\tPset_Permit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4d15b7cd-09d3-42c4-b810-21fd00fcccee\tPset_Permit.EndDate[Type]\tTEXT\t\t461\t1\tIfcDateTime\t1\nPARAM\t71b7e1e2-7eb5-4f6e-a630-f0b4c56d7f03\tPset_Permit.EndTime[Type]\tMULTILINETEXT\t\t461\t1\tIfcLocalTime\t1\nPARAM\t1644b014-dc47-4ab4-864f-18d88feee2c5\tPset_Permit.EscortRequirement[Type]\tYESNO\t\t461\t1\tIfcBoolean\t1\nPARAM\t6e2e1f3d-8ba3-4bbd-aa09-8045644a9568\tPset_Permit.PermitDuration[Type]\tMULTILINETEXT\t\t461\t1\tIfcDateAndTime\t1\nPARAM\tcfac8ced-046a-45d4-935b-de5feddea1c5\tPset_Permit.PermitType[Type]\tTEXT\t\t461\t1\tPEnum_PermitType\t1\nPARAM\t1cc5a816-8e97-47da-9d09-fc7ae154a092\tPset_Permit.SpecialRequirements[Type]\tTEXT\t\t461\t1\tIfcText\t1\nPARAM\ta1bb66e3-55a0-4016-8bbf-9a9fd2ceadd4\tPset_Permit.StartDate[Type]\tTEXT\t\t461\t1\tIfcDateTime\t1\nPARAM\tb1acdc22-3015-48c3-a9c2-b897c9b8e98f\tPset_Permit.StartTime[Type]\tMULTILINETEXT\t\t461\t1\tIfcLocalTime\t1\n#\nGROUP\t462\tPset_PileCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te69623fb-d758-42df-afc3-743a73fae10f\tPset_PileCommon.LoadBearing[Type]\tYESNO\t\t462\t1\tIfcBoolean\t1\nPARAM\td17d9f5e-2335-4bb2-baad-adbf5a68923e\tPset_PileCommon.Reference[Type]\tTEXT\t\t462\t1\tIfcIdentifier\t1\nPARAM\t281a5b5a-c420-4a68-88e7-4111103a75da\tPset_PileCommon.Status[Type]\tTEXT\t\t462\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t463\tPset_PipeConnection\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1e24bf4e-4838-4a94-8cad-8b282c50438f\tPset_PipeConnection.ConnectionType[Type]\tMULTILINETEXT\t\t463\t1\tPropertyListValue\t1\n#\nGROUP\t464\tPset_PipeConnectionFlanged\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6d6b4705-7474-4299-9a29-beba6519b59e\tPset_PipeConnectionFlanged.BoltholePitch[Type]\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t80bfea5e-e5c7-4c11-beb6-edfe7375cf43\tPset_PipeConnectionFlanged.BoltSize[Type]\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t74174d13-f4a0-4c3c-91aa-ee61536f939b\tPset_PipeConnectionFlanged.BoreSize[Type]\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9ff73b59-03d8-4f1f-9a89-ffc4eb655281\tPset_PipeConnectionFlanged.FlangeDiameter[Type]\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t58c25a52-ba53-4b61-a7cd-aa8f65f6683b\tPset_PipeConnectionFlanged.FlangeStandard[Type]\tTEXT\t\t464\t1\tIfcLabel\t1\nPARAM\t1fd3cd9a-3186-47e2-be4d-856acb476c53\tPset_PipeConnectionFlanged.FlangeTable[Type]\tTEXT\t\t464\t1\tIfcLabel\t1\nPARAM\t84c4791b-7034-4f77-afbc-31bc923c30a5\tPset_PipeConnectionFlanged.FlangeThickness[Type]\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td3242747-d3ee-4162-a527-a93e10cf7f7e\tPset_PipeConnectionFlanged.Material[Type]\tMULTILINETEXT\t\t464\t1\tIfcMaterial\t1\nPARAM\tabab0947-96ab-4854-8258-da38a440a6b6\tPset_PipeConnectionFlanged.NumberOfBoltholes[Type]\tINTEGER\t\t464\t1\tIfcCountMeasure\t1\n#\nGROUP\t465\tPset_PipeFittingOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te0e84f31-8800-46bc-a2f3-d5d11d7e1218\tPset_PipeFittingOccurrence.Color[Type]\tTEXT\t\t465\t1\tIfcLabel\t1\nPARAM\t5f4ebcfd-d244-4e05-8844-8c114166fd5c\tPset_PipeFittingOccurrence.Colour[Type]\tTEXT\t\t465\t1\tIfcLabel\t1\nPARAM\tf324a046-9419-4a0b-99fe-f6cb7799edea\tPset_PipeFittingOccurrence.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t465\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t466\tPset_PipeFittingPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5cad7977-82b1-471f-b327-2006b5b9c059\tPset_PipeFittingPHistory.FlowrateLeakage[Type]\tMULTILINETEXT\t\t466\t1\tIfcTimeSeries\t1\nPARAM\ta935ea5b-b0a7-434b-a407-3d939a2af798\tPset_PipeFittingPHistory.LossCoefficient[Type]\tMULTILINETEXT\t\t466\t1\tIfcTimeSeries\t1\n#\nGROUP\t467\tPset_PipeFittingTypeBend\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0f92cc6e-0ba9-422c-918e-cf042e592da6\tPset_PipeFittingTypeBend.BendAngle[Type]\tANGLE\t\t467\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t149d8e7c-1a3f-488e-9718-68955bcf9fba\tPset_PipeFittingTypeBend.BendRadius[Type]\tLENGTH\t\t467\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t468\tPset_PipeFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2bc892ea-6c33-40fd-a8a7-fa52c9cb4dda\tPset_PipeFittingTypeCommon.EndStyleTreatment[Type]\tMULTILINETEXT\t\t468\t1\tPropertyListValue\t1\nPARAM\t44f5c3d0-c715-4200-a29e-e02b084ada26\tPset_PipeFittingTypeCommon.FittingLossFactor[Type]\tNUMBER\t\t468\t1\tIfcReal\t1\nPARAM\tb04f9db1-7d61-4a99-96a1-750848905621\tPset_PipeFittingTypeCommon.InnerDiameter[Type]\tMULTILINETEXT\t\t468\t1\tPropertyListValue\t1\nPARAM\t7abed324-20bb-462f-a36f-3341f58d7ce7\tPset_PipeFittingTypeCommon.Material[Type]\tMULTILINETEXT\t\t468\t1\tIfcMaterial\t1\nPARAM\t10b7993b-faca-4d1f-aec6-a08efd7b2ed2\tPset_PipeFittingTypeCommon.NominalDiameter[Type]\tMULTILINETEXT\t\t468\t1\tPropertyListValue\t1\nPARAM\tb882c9dd-7d32-44c3-a781-f36385f4b7f3\tPset_PipeFittingTypeCommon.OuterDiameter[Type]\tMULTILINETEXT\t\t468\t1\tPropertyListValue\t1\nPARAM\t03f8db3f-b7b4-4878-9891-7f0f5f816cca\tPset_PipeFittingTypeCommon.PressureClass[Type]\tNUMBER\t\t468\t1\tIfcPressureMeasure\t1\nPARAM\t10d90dd8-03e4-42a8-bf68-f8ab0598e34e\tPset_PipeFittingTypeCommon.PressureRange[Type]\tMULTILINETEXT\t\t468\t1\tPropertyBoundedValue\t1\nPARAM\t9b359a61-aade-4653-bd3f-2e1ce4b1389d\tPset_PipeFittingTypeCommon.Reference[Type]\tTEXT\t\t468\t1\tIfcIdentifier\t1\nPARAM\tb5cdb44a-3d0d-44a2-9ddd-8fbf8ca43f2e\tPset_PipeFittingTypeCommon.Status[Type]\tTEXT\t\t468\t1\tPEnum_ElementStatus\t1\nPARAM\tfd8e2f61-0b6f-4650-b34d-564d6cb13468\tPset_PipeFittingTypeCommon.SubType[Type]\tTEXT\t\t468\t1\tIfcLabel\t1\nPARAM\t5247001e-5480-4764-97fd-041fde4cc424\tPset_PipeFittingTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t468\t1\tPropertyBoundedValue\t1\nPARAM\t5870c2d0-ef41-4538-921b-6a3cb77b847d\tPset_PipeFittingTypeCommon.UnitWeight[Type]\tNUMBER\t\t468\t1\tIfcMassMeasure\t1\n#\nGROUP\t469\tPset_PipeFittingTypeJunction\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7282870e-6ad7-486c-b3c2-e540f719960e\tPset_PipeFittingTypeJunction.JunctionLeftAngle[Type]\tANGLE\t\t469\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t08f81114-f464-4f17-b31a-68ae2a36bd2e\tPset_PipeFittingTypeJunction.JunctionLeftRadius[Type]\tLENGTH\t\t469\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2f996d55-8704-473b-9566-18f1a103c76e\tPset_PipeFittingTypeJunction.JunctionRightAngle[Type]\tANGLE\t\t469\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t56f67587-5dc9-4612-aac6-95961a93a1af\tPset_PipeFittingTypeJunction.JunctionRightRadius[Type]\tLENGTH\t\t469\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tffb1b883-8e0b-40f4-acfb-a564a441c8ac\tPset_PipeFittingTypeJunction.JunctionType[Type]\tTEXT\t\t469\t1\tPEnum_PipeFittingJunctionType\t1\n#\nGROUP\t470\tPset_PipeSegmentOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdc003b82-4fcd-464d-8d93-3bbb4203f13d\tPset_PipeSegmentOccurrence.Color[Type]\tTEXT\t\t470\t1\tIfcLabel\t1\nPARAM\tf1f57490-50c8-499b-adc4-63d781481080\tPset_PipeSegmentOccurrence.Colour[Type]\tTEXT\t\t470\t1\tIfcLabel\t1\nPARAM\t573acf68-38c7-4deb-bd06-20375423f590\tPset_PipeSegmentOccurrence.Gradient[Type]\tNUMBER\t\t470\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t155af95a-4776-4850-a97b-a390bcac7d02\tPset_PipeSegmentOccurrence.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t470\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t80c33b9a-e768-4e91-83bb-5a27c942468b\tPset_PipeSegmentOccurrence.InvertElevation[Type]\tLENGTH\t\t470\t1\tIfcLengthMeasure\t1\n#\nGROUP\t471\tPset_PipeSegmentPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta4e5c6ba-85bf-4646-8ff6-61f9229db467\tPset_PipeSegmentPHistory.FluidFlowLeakage[Type]\tMULTILINETEXT\t\t471\t1\tIfcTimeSeries\t1\nPARAM\t8edabf12-d434-4d64-aa17-6f6868587d48\tPset_PipeSegmentPHistory.LeakageCurve[Type]\tMULTILINETEXT\t\t471\t1\tIfcTimeSeries\t1\n#\nGROUP\t472\tPset_PipeSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc5e44e46-6f3a-4cb5-8e8b-69b47c1f5d55\tPset_PipeSegmentTypeCommon.EndStyleTreatment[Type]\tMULTILINETEXT\t\t472\t1\tPropertyListValue\t1\nPARAM\tad42a7bc-37ce-4519-8f0c-c70799a853a8\tPset_PipeSegmentTypeCommon.InnerDiameter[Type]\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t17652bba-b266-42b0-8879-a9c04da5ba17\tPset_PipeSegmentTypeCommon.Length[Type]\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t34beeffc-d80f-41bd-acc5-15bc68719d91\tPset_PipeSegmentTypeCommon.Material[Type]\tMULTILINETEXT\t\t472\t1\tIfcMaterial\t1\nPARAM\t0f4b54bf-5f61-4d40-8b66-57d766c8bfea\tPset_PipeSegmentTypeCommon.NominalDiameter[Type]\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t485d392f-db58-4184-b5a3-d898a9f3f70b\tPset_PipeSegmentTypeCommon.OuterDiameter[Type]\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta78bb18f-9142-4854-a0f3-484b7d5f8e7d\tPset_PipeSegmentTypeCommon.PressureRange[Type]\tMULTILINETEXT\t\t472\t1\tPropertyBoundedValue\t1\nPARAM\t93ccafdc-4f6f-4e7d-bb78-3fcb5f43e3be\tPset_PipeSegmentTypeCommon.Reference[Type]\tTEXT\t\t472\t1\tIfcIdentifier\t1\nPARAM\t4ada149b-e9e2-4e47-bc2f-b4e33ff6cd42\tPset_PipeSegmentTypeCommon.Status[Type]\tTEXT\t\t472\t1\tPEnum_ElementStatus\t1\nPARAM\t63e78675-c9d1-4cb8-8822-0d4d659a83c1\tPset_PipeSegmentTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t472\t1\tPropertyBoundedValue\t1\nPARAM\t5c019f88-eca6-4b93-bfd2-a04ff3dabb66\tPset_PipeSegmentTypeCommon.UnitWeight[Type]\tNUMBER\t\t472\t1\tIfcMassMeasure\t1\nPARAM\t83c36101-57b5-47f8-a374-c99838f60292\tPset_PipeSegmentTypeCommon.WorkingPressure[Type]\tNUMBER\t\t472\t1\tIfcPressureMeasure\t1\n#\nGROUP\t473\tPset_PipeSegmentTypeCulvert\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9049b102-a322-4027-af99-591d334283a9\tPset_PipeSegmentTypeCulvert.ClearDepth[Type]\tLENGTH\t\t473\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tca0c3bbe-dc26-4370-a5fd-8a1f17bcce5a\tPset_PipeSegmentTypeCulvert.InternalWidth[Type]\tLENGTH\t\t473\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t474\tPset_PipeSegmentTypeGutter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t072ad8c9-8b6b-4214-bb94-0fda122e3fb2\tPset_PipeSegmentTypeGutter.Complementaryfunction[Type]\tTEXT\t\t474\t1\tPEnum_ComplementaryWorks\t1\nPARAM\t6dc2f523-d503-47f5-b9e1-52b210b9394c\tPset_PipeSegmentTypeGutter.FlowRating[Type]\tNUMBER\t\t474\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\ta3ddee16-c4f9-43af-a553-ef7ec7f37754\tPset_PipeSegmentTypeGutter.IsCovered[Type]\tYESNO\t\t474\t1\tIfcBoolean\t1\nPARAM\t7d44cc9c-9198-4f45-8d9b-41d78d12a8bf\tPset_PipeSegmentTypeGutter.IsMonitored[Type]\tYESNO\t\t474\t1\tIfcBoolean\t1\nPARAM\t22a9480b-bab9-49ea-9c44-423394f5a269\tPset_PipeSegmentTypeGutter.OrthometricHeight[Type]\tLENGTH\t\t474\t1\tIfcLengthMeasure\t1\nPARAM\t3da0b78b-5362-4c7a-bab0-4e273bf4c277\tPset_PipeSegmentTypeGutter.Slope[Type]\tNUMBER\t\t474\t1\tIfcPlaneAngleMeasure\t1\n#\nGROUP\t475\tPset_PlateCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5c5d67a3-4f53-46bc-97de-fc6949191c1a\tPset_PlateCommon.AcousticRating[Type]\tTEXT\t\t475\t1\tIfcLabel\t1\nPARAM\t73cea862-84f5-4766-b228-c3fc7fa483f0\tPset_PlateCommon.FireRating[Type]\tTEXT\t\t475\t1\tIfcLabel\t1\nPARAM\t88fa1d15-de30-4d50-a43b-31cba65a193f\tPset_PlateCommon.IsExternal[Type]\tYESNO\t\t475\t1\tIfcBoolean\t1\nPARAM\t4603cc9e-a795-4269-96cc-79535d1ffe40\tPset_PlateCommon.LoadBearing[Type]\tYESNO\t\t475\t1\tIfcBoolean\t1\nPARAM\t858b53b2-ce4f-47c8-8fd4-bbc923308a9c\tPset_PlateCommon.Reference[Type]\tTEXT\t\t475\t1\tIfcIdentifier\t1\nPARAM\td4fd8b9c-f9f9-4ebc-b5f1-a669df1c690c\tPset_PlateCommon.Status[Type]\tTEXT\t\t475\t1\tPEnum_ElementStatus\t1\nPARAM\tbc35b3e3-149c-4874-b9c0-77888ed69965\tPset_PlateCommon.ThermalTransmittance[Type]\tNUMBER\t\t475\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t476\tPset_PointMachine\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8c41a1d0-9d58-4297-816b-4dce3c46019c\tPset_PointMachine.ActionBarMovementLength[Type]\tLENGTH\t\t476\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7a3e7af7-7cfd-4bbc-a6f6-a9e2faf4eaa9\tPset_PointMachine.ConversionTime[Type]\tNUMBER\t\t476\t1\tIfcTimeMeasure\t1\nPARAM\t7078811b-2022-40f5-aff1-ef1555eb84c1\tPset_PointMachine.Current[Type]\tMULTILINETEXT\t\t476\t1\tPropertyBoundedValue\t1\nPARAM\tbcac9346-4b00-4e15-97c1-3c45d12dbc4f\tPset_PointMachine.HasLockInside[Type]\tYESNO\t\t476\t1\tIfcBoolean\t1\nPARAM\t0cb2b888-6f7a-44d3-a43b-8527346a8178\tPset_PointMachine.LockingForce[Type]\tNUMBER\t\t476\t1\tIfcForceMeasure\t1\nPARAM\t93a0c9fa-bb88-4c6c-9483-bca3a3886b4b\tPset_PointMachine.MarkingRodMovementLength[Type]\tLENGTH\t\t476\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t506dd2e0-bd42-4832-ad5c-d3ba12c53cdb\tPset_PointMachine.MaximumOperatingTime[Type]\tNUMBER\t\t476\t1\tIfcTimeMeasure\t1\nPARAM\t7594507f-6b12-40f2-a03b-5e5154575c5b\tPset_PointMachine.MinimumOperatingSpeed[Type]\tNUMBER\t\t476\t1\tIfcAngularVelocityMeasure\t1\nPARAM\t9b071513-9063-4865-a046-28607bf96eb8\tPset_PointMachine.TractionForce[Type]\tNUMBER\t\t476\t1\tIfcForceMeasure\t1\n#\nGROUP\t477\tPset_PowerControlSystem\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4d2ae516-3b54-4af1-95cd-672ef470775e\tPset_PowerControlSystem.AssemblyInstruction[Type]\tMULTILINETEXT\t\t477\t1\tIfcExternalReference\t1\n#\nGROUP\t478\tPset_PrecastConcreteElementFabrication\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdb65332b-d17e-4e21-a20a-0f58d7ed427d\tPset_PrecastConcreteElementFabrication.ActualErectionDate[Type]\tTEXT\t\t478\t1\tIfcDateTime\t1\nPARAM\tf874b6fa-a009-442f-bc30-9944b45566ee\tPset_PrecastConcreteElementFabrication.ActualProductionDate[Type]\tTEXT\t\t478\t1\tIfcDateTime\t1\nPARAM\tb65de00c-7844-4ee7-9cb0-57425970c191\tPset_PrecastConcreteElementFabrication.AsBuiltLocationNumber[Type]\tTEXT\t\t478\t1\tIfcLabel\t1\nPARAM\tb2df4aae-da22-422b-a2c6-de97686a8138\tPset_PrecastConcreteElementFabrication.PieceMark[Type]\tTEXT\t\t478\t1\tIfcLabel\t1\nPARAM\t9276c6e6-8e57-41b8-9b18-8eb245414510\tPset_PrecastConcreteElementFabrication.ProductionLotId[Type]\tTEXT\t\t478\t1\tIfcIdentifier\t1\nPARAM\tff7a3ab2-604b-47de-930d-cdddd3c86f3c\tPset_PrecastConcreteElementFabrication.SerialNumber[Type]\tTEXT\t\t478\t1\tIfcIdentifier\t1\nPARAM\t4212ab6c-8bea-4784-ad58-03308bba8d2b\tPset_PrecastConcreteElementFabrication.TypeDesignation[Type]\tTEXT\t\t478\t1\tIfcLabel\t1\nPARAM\t03b685ae-1eea-4a91-af53-e84736741c70\tPset_PrecastConcreteElementFabrication.TypeDesignator[Type]\tTEXT\t\t478\t1\tIfcLabel\t1\n#\nGROUP\t479\tPset_PrecastConcreteElementGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t45c05fc8-61bd-4160-80d9-fef068806a8b\tPset_PrecastConcreteElementGeneral.BatterAtEnd[Type]\tNUMBER\t\t479\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tc930fed2-393f-44ac-b667-1f2410b8963f\tPset_PrecastConcreteElementGeneral.BatterAtStart[Type]\tNUMBER\t\t479\t1\tIfcPlaneAngleMeasure\t1\nPARAM\ta4001419-88e5-4f0a-b5b5-3789e40a45d1\tPset_PrecastConcreteElementGeneral.CamberAtMidspan[Type]\tNUMBER\t\t479\t1\tIfcRatioMeasure\t1\nPARAM\t931b14d2-0ca6-4db9-bb2e-e74dbf7eef5a\tPset_PrecastConcreteElementGeneral.CornerChamfer[Type]\tLENGTH\t\t479\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t34fb1c44-897f-4406-8ebf-7d2549fbf7b2\tPset_PrecastConcreteElementGeneral.DesignLocationNumber[Type]\tTEXT\t\t479\t1\tIfcLabel\t1\nPARAM\t77160467-bf55-4f9b-bd12-866a3d51dabe\tPset_PrecastConcreteElementGeneral.ElementGrossVolume[Type]\tVOLUME\t\t479\t1\tIfcVolumeMeasure\t1\nPARAM\tf6146a88-3cff-438b-8632-c6dcc1f5c11c\tPset_PrecastConcreteElementGeneral.ElementNetVolume[Type]\tVOLUME\t\t479\t1\tIfcVolumeMeasure\t1\nPARAM\t43840174-1e3c-42ec-9c9b-5e5631f16ed7\tPset_PrecastConcreteElementGeneral.ElementWeight[Type]\tNUMBER\t\t479\t1\tIfcMassMeasure\t1\nPARAM\t7d0e6f27-cb9b-4eca-b83d-f82d4c3ae89b\tPset_PrecastConcreteElementGeneral.FormStrippingStrength[Type]\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\nPARAM\t8d63b85c-6a6c-4d49-833e-168c0db4e485\tPset_PrecastConcreteElementGeneral.HollowCorePlugging[Type]\tTEXT\t\t479\t1\tIfcLabel\t1\nPARAM\t707844be-5455-44c8-86c3-3f4a9d8ce9b6\tPset_PrecastConcreteElementGeneral.InitialTension[Type]\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\nPARAM\t74561c84-1f34-47d0-b8b3-84097ecc9735\tPset_PrecastConcreteElementGeneral.LiftingStrength[Type]\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\nPARAM\t32c52035-9ae8-4259-920d-0d899f985e9c\tPset_PrecastConcreteElementGeneral.ManufacturingToleranceClass[Type]\tTEXT\t\t479\t1\tIfcLabel\t1\nPARAM\tcae0ec9b-d5fd-4f65-8e26-30eeef8a8c5b\tPset_PrecastConcreteElementGeneral.MinimumAllowableSupportLength[Type]\tLENGTH\t\t479\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t215967ef-45bc-4e51-b54d-1f66934b44e9\tPset_PrecastConcreteElementGeneral.PieceMark[Type]\tTEXT\t\t479\t1\tIfcLabel\t1\nPARAM\tb3729bb6-f8c9-47be-b043-ab15484ef9f9\tPset_PrecastConcreteElementGeneral.ProductionLotId[Type]\tTEXT\t\t479\t1\tIfcIdentifier\t1\nPARAM\tdf9708e2-fa6a-4a3c-92eb-462bdc7b8582\tPset_PrecastConcreteElementGeneral.ReleaseStrength[Type]\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\nPARAM\tb986711f-8a08-46d5-9e3d-b562a100b200\tPset_PrecastConcreteElementGeneral.SerialNumber[Type]\tTEXT\t\t479\t1\tIfcIdentifier\t1\nPARAM\tf1c3c3dc-c16e-4179-9b26-a127c236e5a6\tPset_PrecastConcreteElementGeneral.Shortening[Type]\tNUMBER\t\t479\t1\tIfcRatioMeasure\t1\nPARAM\td91b8d96-8a0b-4d22-a377-56fcd535f6bf\tPset_PrecastConcreteElementGeneral.SupportDuringTransportDescription[Type]\tTEXT\t\t479\t1\tIfcText\t1\nPARAM\t4a0387be-fde1-40d3-b2a5-e2374ff135b9\tPset_PrecastConcreteElementGeneral.SupportDuringTransportDocReference[Type]\tMULTILINETEXT\t\t479\t1\tIfcExternalReference\t1\nPARAM\tb0cabe29-2cf3-40e0-ac55-a49263519526\tPset_PrecastConcreteElementGeneral.TendonRelaxation[Type]\tNUMBER\t\t479\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0c6c92cd-26f4-412a-a4a0-f5ed2d99de0f\tPset_PrecastConcreteElementGeneral.TransportationStrength[Type]\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\nPARAM\tcc8a822a-f298-415a-9719-9894a6559580\tPset_PrecastConcreteElementGeneral.Twisting[Type]\tNUMBER\t\t479\t1\tIfcPlaneAngleMeasure\t1\nPARAM\te60bb638-86a8-4f4e-bb15-0867b83f4a8d\tPset_PrecastConcreteElementGeneral.TypeDesignation[Type]\tTEXT\t\t479\t1\tIfcLabel\t1\nPARAM\t7719294a-dd18-48a3-82aa-58e1ab101aec\tPset_PrecastConcreteElementGeneral.TypeDesignator[Type]\tTEXT\t\t479\t1\tIfcLabel\t1\n#\nGROUP\t480\tPset_PrecastKerbStone\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c8291eb-119a-459f-abf9-b842fef27c49\tPset_PrecastKerbStone.NominalHeight[Type]\tLENGTH\t\t480\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tbc40c1c7-5037-4520-80fc-4073e7ba1965\tPset_PrecastKerbStone.NominalLength[Type]\tLENGTH\t\t480\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t6ce9a3eb-b245-4388-b955-5af7589b19c8\tPset_PrecastKerbStone.NominalWidth[Type]\tLENGTH\t\t480\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t5258a7e8-2749-4c1a-97d1-00990b7cfa13\tPset_PrecastKerbStone.TypeDesignation[Type]\tTEXT\t\t480\t1\tIfcLabel\t1\n#\nGROUP\t481\tPset_PrecastSlab\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4f1de80b-ec15-4ec7-b4b6-ad758e64115e\tPset_PrecastSlab.AngleBetweenComponentAxes[Type]\tNUMBER\t\t481\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t297dc718-b99b-417b-8381-cf5b982560f1\tPset_PrecastSlab.AngleToFirstAxis[Type]\tNUMBER\t\t481\t1\tIfcPlaneAngleMeasure\t1\nPARAM\ted565e48-3c0c-4edf-837c-c7dc1d54a87b\tPset_PrecastSlab.DistanceBetweenComponentAxes[Type]\tLENGTH\t\t481\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0e12fe38-a793-46b9-ae77-04457f8e7445\tPset_PrecastSlab.EdgeDistanceToFirstAxis[Type]\tLENGTH\t\t481\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6d29d618-88a3-4a27-8182-e5814cb5fbc9\tPset_PrecastSlab.NominalThickness[Type]\tLENGTH\t\t481\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t5024cfcf-6c8e-42ac-83fe-add3e388c93b\tPset_PrecastSlab.NominalToppingThickness[Type]\tLENGTH\t\t481\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tad0093d2-0965-41cd-aecd-44b30bae044e\tPset_PrecastSlab.ToppingType[Type]\tTEXT\t\t481\t1\tIfcLabel\t1\nPARAM\t21ab247e-03f2-4a93-b2eb-0be4dfd339ce\tPset_PrecastSlab.TypeDesignation[Type]\tTEXT\t\t481\t1\tIfcLabel\t1\nPARAM\t6c59d728-d5ba-46c5-b65e-dda31873960e\tPset_PrecastSlab.TypeDesignator[Type]\tTEXT\t\t481\t1\tIfcLabel\t1\n#\nGROUP\t482\tPset_ProcessCapacity\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8f7e10ae-6bb9-4272-8c2b-972453a89fbb\tPset_ProcessCapacity.DownstreamConnections[Type]\tMULTILINETEXT\t\t482\t1\tPropertyListValue\t1\nPARAM\te9a6cb57-00e3-4771-b6b8-abd1e56740e1\tPset_ProcessCapacity.ProcessCapacity[Type]\tINTEGER\t\t482\t1\tIfcCountMeasure\t1\nPARAM\t2d21116d-12e5-4ce2-828d-026ae28e6cf4\tPset_ProcessCapacity.ProcessItem[Type]\tTEXT\t\t482\t1\tPEnum_ProcessItem\t1\nPARAM\t29fcc580-8a8b-427f-b274-61cb70879748\tPset_ProcessCapacity.ProcessPerformance[Type]\tTEXT\t\t482\t1\tIfcDuration\t1\nPARAM\t324d14a9-af1e-47b6-907e-7a21dda41c78\tPset_ProcessCapacity.UpstreamConnections[Type]\tMULTILINETEXT\t\t482\t1\tPropertyListValue\t1\n#\nGROUP\t483\tPset_ProductRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5eb1b768-2768-4a9b-85cb-1acb6971097f\tPset_ProductRequirements.Category[Type]\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t102429d7-b76e-4370-b968-2538045f9137\tPset_ProductRequirements.Classification[Type]\tMULTILINETEXT\t\t483\t1\tIfcClassificationReference\t1\nPARAM\t575fe423-8ed9-48c0-8095-8a06b0b58326\tPset_ProductRequirements.DemandImportanceValue[Type]\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t6721edea-60bf-41d1-9bfc-49e35486f1f9\tPset_ProductRequirements.DemandThresholdValue[Type]\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t60d5810a-eda9-48ca-b2a4-d0156822f265\tPset_ProductRequirements.DemandValue[Type]\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\tb016fbda-20f7-41eb-b667-2d8866593ade\tPset_ProductRequirements.GapValue[Type]\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t16008a58-aa40-438f-8f31-a5100ff12d3a\tPset_ProductRequirements.GapValueWeighted[Type]\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t30c55297-d29d-4629-9e0a-d19aa6bafa26\tPset_ProductRequirements.GroupName[Type]\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t88b806f2-3420-4fa8-ba17-2b417e1bba57\tPset_ProductRequirements.Name[Type]\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t87a6840a-48f6-46df-acb3-69d71f28f555\tPset_ProductRequirements.SupplyEvaluationValue[Type]\tTEXT\t\t483\t1\tIfcLabel\t1\n#\nGROUP\t484\tPset_ProfileArbitraryDoubleT\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfea1d0e9-be79-4deb-a2a5-1a7353a5e555\tPset_ProfileArbitraryDoubleT.FlangeBaseFillet[Type]\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t91dc09ad-7269-40f3-8c88-4f6da1ea72d0\tPset_ProfileArbitraryDoubleT.FlangeChamfer[Type]\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tc44022ed-1a9a-43f6-aef7-8d8cb6f0142e\tPset_ProfileArbitraryDoubleT.FlangeDepth[Type]\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8fca2b0f-3d1b-4699-a66c-548abde641cf\tPset_ProfileArbitraryDoubleT.FlangeDraft[Type]\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tf9688506-d1d0-4d79-a88b-a57f774e4e2c\tPset_ProfileArbitraryDoubleT.FlangeTopFillet[Type]\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t9469c692-13f3-4c11-abbd-3c4e94e6eefc\tPset_ProfileArbitraryDoubleT.LeftFlangeWidth[Type]\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td7fc065f-7806-4156-9713-1669ae0d0a71\tPset_ProfileArbitraryDoubleT.OverallDepth[Type]\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tae95bd13-4bd6-4f23-89eb-5a805ea3f150\tPset_ProfileArbitraryDoubleT.OverallWidth[Type]\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te36b7019-f796-4dba-a4e0-dd778bd5136c\tPset_ProfileArbitraryDoubleT.RightFlangeWidth[Type]\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t875c7de9-bfb2-44dc-813c-3d8a15c2e28e\tPset_ProfileArbitraryDoubleT.StemBaseChamfer[Type]\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\ta82a32c3-90b7-48dd-9c9c-212f1d3b5c58\tPset_ProfileArbitraryDoubleT.StemBaseFillet[Type]\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t99543a29-ec26-4368-b5ad-2f471303420b\tPset_ProfileArbitraryDoubleT.StemBaseWidth[Type]\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t01f96f03-cc48-4c4d-876b-f2a639e1a339\tPset_ProfileArbitraryDoubleT.StemTopChamfer[Type]\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tff9a6fe8-dd9c-4a45-b818-a5a855aae1ee\tPset_ProfileArbitraryDoubleT.StemTopFillet[Type]\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t1f1682ca-8180-46cb-a67b-dd983b3a4e61\tPset_ProfileArbitraryDoubleT.StemTopWidth[Type]\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t485\tPset_ProfileArbitraryHollowCore\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td1904530-86b4-486f-9b7d-e3aabf545591\tPset_ProfileArbitraryHollowCore.BaseChamfer[Type]\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tb7163ade-97e1-4e7c-acf5-e21ae6753850\tPset_ProfileArbitraryHollowCore.BottomCover[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t22446560-afb6-4381-b40c-8e8c3344b6e9\tPset_ProfileArbitraryHollowCore.CenterCoreBaseHeight[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9c8d5de3-878c-4a45-b068-a9b97fce1dce\tPset_ProfileArbitraryHollowCore.CenterCoreBaseWidth[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7c258951-c567-49df-a814-a6d8e6c753ae\tPset_ProfileArbitraryHollowCore.CenterCoreMiddleHeight[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t67039050-2739-4386-93fd-638479bfc3af\tPset_ProfileArbitraryHollowCore.CenterCoreSpacing[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t882f03c9-6827-4355-a494-35037143730c\tPset_ProfileArbitraryHollowCore.CenterCoreTopHeight[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcd784796-3acf-4740-8091-38a421bac8d7\tPset_ProfileArbitraryHollowCore.CenterCoreTopWidth[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2e68ff14-ba06-4806-b0ac-a7e7abdc9407\tPset_ProfileArbitraryHollowCore.CoreBaseHeight[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3195dc3d-a183-4998-9ead-3c65bec1f131\tPset_ProfileArbitraryHollowCore.CoreBaseWidth[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t84e2adfd-0b26-4cd1-8b30-4a96c83b8fd5\tPset_ProfileArbitraryHollowCore.CoreMiddleHeight[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t489630f1-37f0-4f94-aae4-d5c12314d0dd\tPset_ProfileArbitraryHollowCore.CoreSpacing[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t72e1f419-4768-4906-ab89-a6137435832c\tPset_ProfileArbitraryHollowCore.CoreTopHeight[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32f35683-d0c1-4b34-8a05-8f025def61b7\tPset_ProfileArbitraryHollowCore.CoreTopWidth[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc528efee-3aad-4537-9d21-81e3dd3bc587\tPset_ProfileArbitraryHollowCore.DraftBaseOffset[Type]\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t1f0094d5-81c0-47ab-b0fb-58ec95744047\tPset_ProfileArbitraryHollowCore.DraftSideOffset[Type]\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\ta12c8df4-3bb6-46b5-9d9a-bdc6ef7380e0\tPset_ProfileArbitraryHollowCore.EdgeDraft[Type]\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\te75bbbb6-a9f7-4225-be5e-69396884be5e\tPset_ProfileArbitraryHollowCore.KeyDepth[Type]\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\te1cb198a-0d76-4ba8-a045-2122f755e074\tPset_ProfileArbitraryHollowCore.KeyHeight[Type]\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t34d72c2c-9a2b-4973-bbc1-3b4f629f4834\tPset_ProfileArbitraryHollowCore.KeyOffset[Type]\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t6cb29cea-0ec2-4431-8bf7-7a5a0609b36e\tPset_ProfileArbitraryHollowCore.NumberOfCores[Type]\tINTEGER\t\t485\t1\tIfcCountMeasure\t1\nPARAM\tf0d8b077-5092-4cda-ba9f-7c0980c1b2dc\tPset_ProfileArbitraryHollowCore.OverallDepth[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t05e0881d-5b06-4a8b-8f31-e2a911b21c4d\tPset_ProfileArbitraryHollowCore.OverallWidth[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t486\tPset_ProfileMechanical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8329f0ff-42bb-48ee-9e3c-4548af2f0855\tPset_ProfileMechanical.CentreOfGravityInX[Type]\tLENGTH\t\t486\t1\tIfcLengthMeasure\t1\nPARAM\t72393ab1-4603-47ca-b5b9-4a64b66cad2a\tPset_ProfileMechanical.CentreOfGravityInY[Type]\tLENGTH\t\t486\t1\tIfcLengthMeasure\t1\nPARAM\t1ab73a26-6a40-4e95-94a5-288c9dea670a\tPset_ProfileMechanical.CrossSectionArea[Type]\tAREA\t\t486\t1\tIfcAreaMeasure\t1\nPARAM\ta0f63ee7-a45e-41f2-902b-c617cfca1310\tPset_ProfileMechanical.MassPerLength[Type]\tNUMBER\t\t486\t1\tIfcMassPerLengthMeasure\t1\nPARAM\tfd4e27ff-793b-45ce-9bfd-ec0dc954eac1\tPset_ProfileMechanical.MaximumPlateThickness[Type]\tLENGTH\t\t486\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta22bbccb-afeb-495e-a87d-89f03990f401\tPset_ProfileMechanical.MaximumSectionModulusY[Type]\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\nPARAM\t6eec5e42-208a-44a9-a6ef-33f401947d55\tPset_ProfileMechanical.MaximumSectionModulusZ[Type]\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\nPARAM\t44b1a600-40e0-4b75-9d4c-941cdafc37fe\tPset_ProfileMechanical.MinimumPlateThickness[Type]\tLENGTH\t\t486\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbebd29fd-6153-4b9b-a207-e5aa2a0d35b8\tPset_ProfileMechanical.MinimumSectionModulusY[Type]\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\nPARAM\tadd80393-e0fe-4441-b299-5b9038f1b7d6\tPset_ProfileMechanical.MinimumSectionModulusZ[Type]\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\nPARAM\t69b66aba-7af7-4966-a041-3ce91bc4831e\tPset_ProfileMechanical.MomentOfInertiaY[Type]\tNUMBER\t\t486\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\t96b4b8ac-64ca-4da6-9b92-d84164d06309\tPset_ProfileMechanical.MomentOfInertiaYZ[Type]\tNUMBER\t\t486\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\ta5923575-34c5-48ba-a622-ee4ff97f838b\tPset_ProfileMechanical.MomentOfInertiaZ[Type]\tNUMBER\t\t486\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\tda228a36-65bb-409e-afa5-9a21473751c4\tPset_ProfileMechanical.Perimeter[Type]\tLENGTH\t\t486\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0d58f863-bbd8-4e4e-9500-8feff81e4bf5\tPset_ProfileMechanical.PlasticShapeFactorY[Type]\tNUMBER\t\t486\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7b50672a-07af-48fc-93b3-08b964a8263b\tPset_ProfileMechanical.PlasticShapeFactorZ[Type]\tNUMBER\t\t486\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td6b04ead-54d0-4330-b4c4-d8f4ada31226\tPset_ProfileMechanical.ShearAreaY[Type]\tAREA\t\t486\t1\tIfcAreaMeasure\t1\nPARAM\tff6ffd7a-d1d9-4c17-b9fe-ddbe9dfda26e\tPset_ProfileMechanical.ShearAreaZ[Type]\tAREA\t\t486\t1\tIfcAreaMeasure\t1\nPARAM\t36ace196-3d10-4614-adbc-99c7fa8d2100\tPset_ProfileMechanical.ShearCentreY[Type]\tLENGTH\t\t486\t1\tIfcLengthMeasure\t1\nPARAM\t7ff736d7-13c4-4736-b404-2c33b30335fc\tPset_ProfileMechanical.ShearCentreZ[Type]\tLENGTH\t\t486\t1\tIfcLengthMeasure\t1\nPARAM\t01c471da-a085-4b1b-91da-177f7b2ff54c\tPset_ProfileMechanical.ShearDeformationAreaY[Type]\tAREA\t\t486\t1\tIfcAreaMeasure\t1\nPARAM\te96c1583-0d29-4fee-bb0e-9fd02dc9a840\tPset_ProfileMechanical.ShearDeformationAreaZ[Type]\tAREA\t\t486\t1\tIfcAreaMeasure\t1\nPARAM\t1e725204-a0d2-4293-a484-6ceb9d8c4ffd\tPset_ProfileMechanical.TorsionalConstantX[Type]\tNUMBER\t\t486\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\t2b8ea148-4ee0-469e-a923-c44808bb4c28\tPset_ProfileMechanical.TorsionalSectionModulus[Type]\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\nPARAM\ta331c45b-4a2c-4c46-b42a-323bbc2f6773\tPset_ProfileMechanical.WarpingConstant[Type]\tNUMBER\t\t486\t1\tIfcWarpingConstantMeasure\t1\n#\nGROUP\t487\tPset_ProjectCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta80a7f06-4ca4-4240-bc0e-8cb09563f22f\tPset_ProjectCommon.BuildingPermitId[Type]\tTEXT\t\t487\t1\tIfcIdentifier\t1\nPARAM\tdea1e0db-1818-45c0-81ba-d414d99502cc\tPset_ProjectCommon.ConstructionMode[Type]\tTEXT\t\t487\t1\tIfcLabel\t1\nPARAM\te2bddb2d-7b2a-4156-b260-070956cdd8d6\tPset_ProjectCommon.FundingSource[Type]\tTEXT\t\t487\t1\tIfcLabel\t1\nPARAM\t46bcfae4-d026-459d-8301-26c68b7122ad\tPset_ProjectCommon.GrossAreaPlanned[Type]\tAREA\t\t487\t1\tIfcAreaMeasure\t1\nPARAM\t1c29b133-89b4-498e-9e69-5970ea31a431\tPset_ProjectCommon.NetEarnedValue[Type]\tMULTILINETEXT\t\t487\t1\tIfcCostValue\t1\nPARAM\t588b13bb-9153-45c2-9451-e90c80bc6a72\tPset_ProjectCommon.PaybackPeriod[Type]\tTEXT\t\t487\t1\tIfcDuration\t1\nPARAM\t71573674-508a-4cc6-9784-61ca417aeb3b\tPset_ProjectCommon.ProjectInvestmentEstimate[Type]\tMULTILINETEXT\t\t487\t1\tIfcCostValue\t1\nPARAM\t74dd82aa-8827-4646-9b6a-ae412915f612\tPset_ProjectCommon.ProjectType[Type]\tTEXT\t\t487\t1\tPEnum_ProjectType\t1\nPARAM\t9014f31c-499d-41be-aeee-722662a45a25\tPset_ProjectCommon.ROI[Type]\tNUMBER\t\t487\t1\tIfcRatioMeasure\t1\n#\nGROUP\t488\tPset_ProjectionElementShadingDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td9135c33-5f54-4498-8b41-be7e3fa9b099\tPset_ProjectionElementShadingDevice.Color[Type]\tTEXT\t\t488\t1\tIfcLabel\t1\n#\nGROUP\t489\tPset_ProjectionElementShadingDevicePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7964c072-28b0-4884-91f0-320f78464862\tPset_ProjectionElementShadingDevicePHistory.Azimuth[Type]\tTEXT\t\t489\t1\tIfcLabel\t1\nPARAM\t31ce4fef-e744-4abd-9132-cb40b1180f99\tPset_ProjectionElementShadingDevicePHistory.TiltAngle[Type]\tNUMBER\t\t489\t1\tIfcReal\t1\n#\nGROUP\t490\tPset_ProjectionElementTypeShadingDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf16e4c0c-b979-4de1-bd48-677c909c55c3\tPset_ProjectionElementTypeShadingDevice.AverageSolarTransmittance[Type]\tNUMBER\t\t490\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t21dd4cdd-e53e-4592-8ab7-2bf382084b6a\tPset_ProjectionElementTypeShadingDevice.AverageVisibleTransmittance[Type]\tNUMBER\t\t490\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t937a6b0b-1018-4148-9e96-58a8bfd4312f\tPset_ProjectionElementTypeShadingDevice.Color[Type]\tTEXT\t\t490\t1\tIfcLabel\t1\nPARAM\tce9ee94a-c167-48a4-9bdc-a0d197bb845e\tPset_ProjectionElementTypeShadingDevice.Material[Type]\tMULTILINETEXT\t\t490\t1\tIfcMaterial\t1\nPARAM\t0f3a4b0f-565e-4530-ab12-2f9ebef66e86\tPset_ProjectionElementTypeShadingDevice.Reflectance[Type]\tNUMBER\t\t490\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6631a6c8-6d9c-4b1b-af25-8ac23403de44\tPset_ProjectionElementTypeShadingDevice.Roughness[Type]\tLENGTH\t\t490\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td0cca151-cbe9-49dc-9d18-4e82d23cd285\tPset_ProjectionElementTypeShadingDevice.ShadingDeviceType[Type]\tTEXT\t\t490\t1\tPEnum_ProjectionElementShadingDeviceType\t1\nPARAM\te6f16b05-7d5b-43f0-8c80-1a482543c59a\tPset_ProjectionElementTypeShadingDevice.TiltRange[Type]\tMULTILINETEXT\t\t490\t1\tPropertyBoundedValue\t1\n#\nGROUP\t491\tPset_ProjectOrderChangeOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83800315-0718-4884-9d3f-6f04ed4cfa8b\tPset_ProjectOrderChangeOrder.BudgetSource[Type]\tTEXT\t\t491\t1\tIfcText\t1\nPARAM\t4f2d17e3-2902-4630-a9bf-7a524a4239fc\tPset_ProjectOrderChangeOrder.ChangeDescription[Type]\tTEXT\t\t491\t1\tIfcText\t1\nPARAM\t91de525e-f146-4854-879b-b8ecf1cfa2bc\tPset_ProjectOrderChangeOrder.ReasonForChange[Type]\tTEXT\t\t491\t1\tIfcText\t1\n#\nGROUP\t492\tPset_ProjectOrderMaintenanceWorkOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t32c7dd51-b7b7-4dfc-9dd3-fe2d9f789ce0\tPset_ProjectOrderMaintenanceWorkOrder.ContractualType[Type]\tTEXT\t\t492\t1\tIfcText\t1\nPARAM\tb40c1ee5-ba97-4a77-8da0-588c58e8b928\tPset_ProjectOrderMaintenanceWorkOrder.FaultPriorityType[Type]\tTEXT\t\t492\t1\tPEnum_PriorityType\t1\nPARAM\tcb8c1df6-5e4d-449a-8ecc-ca4c36746663\tPset_ProjectOrderMaintenanceWorkOrder.IfNotAccomplished[Type]\tTEXT\t\t492\t1\tIfcText\t1\nPARAM\ta7acb64c-ba46-4365-a569-fabd9dcb2b50\tPset_ProjectOrderMaintenanceWorkOrder.LocationPriorityType[Type]\tTEXT\t\t492\t1\tPEnum_PriorityType\t1\nPARAM\t0e81bfe7-c28d-4b77-8e5d-2780fad4f07c\tPset_ProjectOrderMaintenanceWorkOrder.LongJobDescription[Type]\tTEXT\t\t492\t1\tIfcText\t1\nPARAM\tc9f8a96d-eb27-4b82-baba-fcfe6de3ace3\tPset_ProjectOrderMaintenanceWorkOrder.MaintenaceType[Type]\tTEXT\t\t492\t1\tPEnum_MaintenanceType\t1\nPARAM\t6de967ab-1cb7-4736-a190-7c9f04f7dbc7\tPset_ProjectOrderMaintenanceWorkOrder.MaintenanceType[Type]\tTEXT\t\t492\t1\tPEnum_MaintenanceType\t1\nPARAM\t220368ae-7cea-4143-8f42-0b7e2a241b8a\tPset_ProjectOrderMaintenanceWorkOrder.ProductDescription[Type]\tTEXT\t\t492\t1\tIfcText\t1\nPARAM\t3545dedd-489e-4e2a-b48e-2753348c9eec\tPset_ProjectOrderMaintenanceWorkOrder.ScheduledFrequency[Type]\tNUMBER\t\t492\t1\tIfcTimeMeasure\t1\nPARAM\t31fd0295-5cd4-45e0-a5d1-3207f20937d6\tPset_ProjectOrderMaintenanceWorkOrder.ShortJobDescription[Type]\tTEXT\t\t492\t1\tIfcText\t1\nPARAM\t400dc48c-9b60-4349-9ac5-137ddad7d698\tPset_ProjectOrderMaintenanceWorkOrder.WorkTypeRequested[Type]\tTEXT\t\t492\t1\tIfcText\t1\n#\nGROUP\t493\tPset_ProjectOrderMoveOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf030033f-1f44-46b0-8cfe-aadb34ae94f3\tPset_ProjectOrderMoveOrder.MoveDescription[Type]\tTEXT\t\t493\t1\tIfcText\t1\nPARAM\t3297afb0-8519-4627-8925-581576e54c70\tPset_ProjectOrderMoveOrder.SpecialInstructions[Type]\tTEXT\t\t493\t1\tIfcText\t1\n#\nGROUP\t494\tPset_ProjectOrderPurchaseOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t109d93a0-7be3-47ee-9dfe-cc93381c1d1f\tPset_ProjectOrderPurchaseOrder.IsFOB[Type]\tYESNO\t\t494\t1\tIfcBoolean\t1\nPARAM\tcc82b2b2-f74f-4c98-b862-a76f596a4e6f\tPset_ProjectOrderPurchaseOrder.ShipMethod[Type]\tTEXT\t\t494\t1\tIfcText\t1\n#\nGROUP\t495\tPset_ProjectOrderWorkOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t00e1ebda-9627-4bf4-8f83-cab9f88bf32e\tPset_ProjectOrderWorkOrder.ContractualType[Type]\tTEXT\t\t495\t1\tIfcText\t1\nPARAM\t84a6b374-b5c4-40d4-9d8c-142f0989e884\tPset_ProjectOrderWorkOrder.IfNotAccomplished[Type]\tTEXT\t\t495\t1\tIfcText\t1\nPARAM\tb134c868-8a47-4bd8-bdf2-5ced91ff2111\tPset_ProjectOrderWorkOrder.LongJobDescription[Type]\tTEXT\t\t495\t1\tIfcText\t1\nPARAM\t85a18f99-af80-4e97-9b25-8626172a3c73\tPset_ProjectOrderWorkOrder.ProductDescription[Type]\tTEXT\t\t495\t1\tIfcText\t1\nPARAM\t0e7cc50a-ec76-4a0b-b0ee-06d230c2ab16\tPset_ProjectOrderWorkOrder.ShortJobDescription[Type]\tTEXT\t\t495\t1\tIfcText\t1\nPARAM\t6502f844-2ee6-4ef6-a400-e23c387158a0\tPset_ProjectOrderWorkOrder.WorkTypeRequested[Type]\tTEXT\t\t495\t1\tIfcText\t1\n#\nGROUP\t496\tPset_PropertyAgreement\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3d12a1be-e923-40d6-baa6-0e3bafec2776\tPset_PropertyAgreement.AgreementDate[Type]\tTEXT\t\t496\t1\tIfcDate\t1\nPARAM\t92365283-7ea8-40cf-a4c7-f885ba647fe5\tPset_PropertyAgreement.AgreementType[Type]\tTEXT\t\t496\t1\tPEnum_PropertyAgreementType\t1\nPARAM\ta716f3f7-4d7e-461b-a8fd-0d8f617d33ef\tPset_PropertyAgreement.AgreementVersion[Type]\tTEXT\t\t496\t1\tIfcLabel\t1\nPARAM\t088f6499-3c55-49b7-af8f-185fe4791a79\tPset_PropertyAgreement.CommencementDate[Type]\tTEXT\t\t496\t1\tIfcDate\t1\nPARAM\tbe8f7f7c-c2cd-4583-9b52-2954ac057c3b\tPset_PropertyAgreement.ConditionCommencement[Type]\tTEXT\t\t496\t1\tIfcText\t1\nPARAM\t1b1f4221-5aa3-4a59-a571-3c3cd810b7fc\tPset_PropertyAgreement.ConditionTermination[Type]\tTEXT\t\t496\t1\tIfcText\t1\nPARAM\tec1e05cc-9ca8-4d1a-b3f8-acf5f9b6a2e8\tPset_PropertyAgreement.Duration[Type]\tTEXT\t\t496\t1\tIfcDuration\t1\nPARAM\tda8cb153-a820-4666-a0ff-bf9078be7dc3\tPset_PropertyAgreement.Identifier[Type]\tTEXT\t\t496\t1\tIfcIdentifier\t1\nPARAM\ta8562687-2632-485e-8553-039cf301b96d\tPset_PropertyAgreement.Options[Type]\tTEXT\t\t496\t1\tIfcText\t1\nPARAM\tbe6d1875-28de-4c71-81b1-ba60ead6007a\tPset_PropertyAgreement.PropertyName[Type]\tTEXT\t\t496\t1\tIfcLabel\t1\nPARAM\t51f1baaa-b423-40ab-bf3e-61ef8ad02cce\tPset_PropertyAgreement.Restrictions[Type]\tTEXT\t\t496\t1\tIfcText\t1\nPARAM\tced0ca40-5499-4450-857f-73151b8670e1\tPset_PropertyAgreement.TerminationDate[Type]\tTEXT\t\t496\t1\tIfcDate\t1\nPARAM\t320bb1f4-e7f6-4765-87a0-9dbf5da40b95\tPset_PropertyAgreement.TrackingIdentifier[Type]\tTEXT\t\t496\t1\tIfcIdentifier\t1\nPARAM\te08d5c9b-03e6-49cf-b90d-52ae9753c397\tPset_PropertyAgreement.Version[Type]\tTEXT\t\t496\t1\tIfcLabel\t1\nPARAM\t0445f196-36ef-43e8-b09b-a15c5fbc57d9\tPset_PropertyAgreement.VersionDate[Type]\tTEXT\t\t496\t1\tIfcDate\t1\n#\nGROUP\t497\tPset_ProtectiveDeviceBreakerUnitI2TCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcc3fda79-7f60-4a36-9823-a7a371e8245b\tPset_ProtectiveDeviceBreakerUnitI2TCurve.BreakerUnitCurve[Type]\tMULTILINETEXT\t\t497\t1\tPropertyTableValue\t1\nPARAM\tbe516c14-1204-46d8-be2e-42100c8c15cd\tPset_ProtectiveDeviceBreakerUnitI2TCurve.NominalCurrent[Type]\tNUMBER\t\t497\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t8cd50df0-3941-428e-921d-1da5f3e39f3f\tPset_ProtectiveDeviceBreakerUnitI2TCurve.VoltageLevel[Type]\tTEXT\t\t497\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t498\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbaff57f0-bba6-4e05-bad5-06355b150f28\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve.BreakerUnitFuseBreakingingCurve[Type]\tMULTILINETEXT\t\t498\t1\tPropertyTableValue\t1\nPARAM\ta7bae61b-3659-4de1-8624-139be1529f9f\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve.BreakerUnitFuseMeltingCurve[Type]\tMULTILINETEXT\t\t498\t1\tPropertyTableValue\t1\nPARAM\tdd2672b4-0704-47fa-ba0d-219a3d5b59d7\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve.VoltageLevel[Type]\tTEXT\t\t498\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t499\tPset_ProtectiveDeviceBreakerUnitIPICurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta8dfc754-ae97-4230-a450-16cff8824cbf\tPset_ProtectiveDeviceBreakerUnitIPICurve.BreakerUnitIPICurve[Type]\tMULTILINETEXT\t\t499\t1\tPropertyTableValue\t1\nPARAM\tfa555b05-8134-4389-84cb-682a6adfc686\tPset_ProtectiveDeviceBreakerUnitIPICurve.NominalCurrent[Type]\tNUMBER\t\t499\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t3bdbce25-5ca9-4741-8a5c-e00a392dd35a\tPset_ProtectiveDeviceBreakerUnitIPICurve.VoltageLevel[Type]\tTEXT\t\t499\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t500\tPset_ProtectiveDeviceBreakerUnitTypeMCB\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb08bfc35-e17a-4f98-b02f-513ae258ce7d\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICN60898[Type]\tNUMBER\t\t500\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tc6780110-b964-4808-8136-7af9224ae8f0\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICS60898[Type]\tNUMBER\t\t500\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t4b49d4b7-2c6f-41b9-84e0-25916fb956c3\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICS60947[Type]\tNUMBER\t\t500\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t4b489e35-b716-4ca3-a68e-b60dbfbc062f\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICU60947[Type]\tNUMBER\t\t500\t1\tIfcElectricCurrentMeasure\t1\nPARAM\te2de3ac0-60b0-443a-b10b-dc85305cdcd2\tPset_ProtectiveDeviceBreakerUnitTypeMCB.NominalCurrents[Type]\tMULTILINETEXT\t\t500\t1\tPropertyListValue\t1\nPARAM\tfc663b26-ff76-4f45-b3f4-1564c43f18cc\tPset_ProtectiveDeviceBreakerUnitTypeMCB.PowerLoss[Type]\tNUMBER\t\t500\t1\tIfcPowerMeasure\t1\nPARAM\tbae83c85-2c22-438c-9046-a4ce7d803ab8\tPset_ProtectiveDeviceBreakerUnitTypeMCB.VoltageLevel[Type]\tTEXT\t\t500\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t501\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6d31b0a5-d249-444d-929b-e7d64e3a7457\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICM60947[Type]\tNUMBER\t\t501\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t4ca67347-9f9d-4f0c-b8cf-e03a52397d48\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICS60947[Type]\tNUMBER\t\t501\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t3915f249-d71a-445f-add5-8314d4b09c1a\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICU60947[Type]\tNUMBER\t\t501\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t346bfee1-4060-442f-b246-dfb646f21271\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICW60947[Type]\tNUMBER\t\t501\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t5a8f0b7f-41a1-47db-92f6-52754a33c76e\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.PerformanceClasses[Type]\tMULTILINETEXT\t\t501\t1\tPropertyListValue\t1\nPARAM\t501eb86c-6689-4268-9d66-5e977bb96e90\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.VoltageLevel[Type]\tTEXT\t\t501\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t502\tPset_ProtectiveDeviceOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td694edb8-26ff-4743-99f2-0b58a34d5c4d\tPset_ProtectiveDeviceOccurrence.GroundFaultCurrentSetValue[Type]\tNUMBER\t\t502\t1\tIfcElectricCurrentMeasure\t1\nPARAM\teba1f8ae-07c9-4dc3-a65c-49ecfe8c6160\tPset_ProtectiveDeviceOccurrence.GroundFaultFunction[Type]\tYESNO\t\t502\t1\tIfcBoolean\t1\nPARAM\tdc1e0d1d-93d5-4091-95ee-db72d7c0e531\tPset_ProtectiveDeviceOccurrence.GroundFaulti2tFunction[Type]\tYESNO\t\t502\t1\tIfcBoolean\t1\nPARAM\tbb044ef6-02b4-4ac8-a30e-f150b91bc601\tPset_ProtectiveDeviceOccurrence.GroundFaultTrippingTime[Type]\tNUMBER\t\t502\t1\tIfcTimeMeasure\t1\nPARAM\t37b54793-d332-4bdf-8388-c5e8c8b8eff1\tPset_ProtectiveDeviceOccurrence.InstantaneousCurrentSetValue[Type]\tNUMBER\t\t502\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t2c5fc052-5173-455a-b8b9-47816884a2c6\tPset_ProtectiveDeviceOccurrence.InstantaneousTrippingTime[Type]\tNUMBER\t\t502\t1\tIfcTimeMeasure\t1\nPARAM\t33ffe19f-5bc4-45f1-8c1a-7f7f6953616a\tPset_ProtectiveDeviceOccurrence.LongTimeCurrentSetValue[Type]\tNUMBER\t\t502\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tf46888d0-62ff-4108-b756-333cbdef3cfe\tPset_ProtectiveDeviceOccurrence.LongTimeDelay[Type]\tNUMBER\t\t502\t1\tIfcTimeMeasure\t1\nPARAM\t5f47882d-1f09-4d2c-9158-fb62f57b474a\tPset_ProtectiveDeviceOccurrence.LongTimeFunction[Type]\tYESNO\t\t502\t1\tIfcBoolean\t1\nPARAM\t3ab2c022-ddda-44b4-9c3c-f2748be6ceaf\tPset_ProtectiveDeviceOccurrence.PoleUsage[Type]\tTEXT\t\t502\t1\tPEnum_PoleUsage\t1\nPARAM\td057085c-148e-49c0-8c62-95d2076caa76\tPset_ProtectiveDeviceOccurrence.ShortTimeCurrentSetValue[Type]\tNUMBER\t\t502\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t9d01a2ec-1ab9-4536-ad74-515716e47f53\tPset_ProtectiveDeviceOccurrence.ShortTimeFunction[Type]\tYESNO\t\t502\t1\tIfcBoolean\t1\nPARAM\tbe3e0e7d-842d-418e-84d0-88c65f3b70d4\tPset_ProtectiveDeviceOccurrence.ShortTimei2tFunction[Type]\tYESNO\t\t502\t1\tIfcBoolean\t1\nPARAM\t530d8df8-5c13-4fcd-86f9-0bf7cc3836c5\tPset_ProtectiveDeviceOccurrence.ShortTimeTrippingTime[Type]\tNUMBER\t\t502\t1\tIfcTimeMeasure\t1\n#\nGROUP\t503\tPset_ProtectiveDeviceTrippingCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tee7b331b-ae04-4847-8e01-08a5ecea3617\tPset_ProtectiveDeviceTrippingCurve.TrippingCurve[Type]\tMULTILINETEXT\t\t503\t1\tPropertyTableValue\t1\nPARAM\t40e71571-2459-4301-a3da-206cd2c34a69\tPset_ProtectiveDeviceTrippingCurve.TrippingCurveType[Type]\tTEXT\t\t503\t1\tPEnum_TrippingCurveType\t1\n#\nGROUP\t504\tPset_ProtectiveDeviceTrippingFunctionGCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1d1c4dda-bb03-4cbf-bd38-c0c68033b582\tPset_ProtectiveDeviceTrippingFunctionGCurve.CurrentTolerance1[Type]\tNUMBER\t\t504\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6189ddb1-ad58-43a0-9b42-979eb6fec1b8\tPset_ProtectiveDeviceTrippingFunctionGCurve.CurrentTolerance2[Type]\tNUMBER\t\t504\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t30861b67-1e0e-4d19-a22c-f502cc421bab\tPset_ProtectiveDeviceTrippingFunctionGCurve.CurrentToleranceLimit1[Type]\tNUMBER\t\t504\t1\tIfcTimeMeasure\t1\nPARAM\tc51cd6bb-52cb-480e-9a0e-f270133be362\tPset_ProtectiveDeviceTrippingFunctionGCurve.ExternalAdjusted[Type]\tYESNO\t\t504\t1\tIfcBoolean\t1\nPARAM\ted167458-aa8f-477e-97eb-00e8b4ece855\tPset_ProtectiveDeviceTrippingFunctionGCurve.IsCurrentTolerancePositiveOnly[Type]\tYESNO\t\t504\t1\tIfcBoolean\t1\nPARAM\taff32d30-2998-4e46-8cdb-8635ea93e2db\tPset_ProtectiveDeviceTrippingFunctionGCurve.IsSelectable[Type]\tYESNO\t\t504\t1\tIfcBoolean\t1\nPARAM\td758922b-5a56-4818-9129-71304845ea1d\tPset_ProtectiveDeviceTrippingFunctionGCurve.IsTimeTolerancePositiveOnly[Type]\tYESNO\t\t504\t1\tIfcBoolean\t1\nPARAM\t869e6158-0ab3-4628-99df-38ef6794618a\tPset_ProtectiveDeviceTrippingFunctionGCurve.NominalCurrentAdjusted[Type]\tYESNO\t\t504\t1\tIfcBoolean\t1\nPARAM\tadd5b49e-141c-46d7-973c-2ca989fc0b21\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrent[Type]\tNUMBER\t\t504\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tc6241f4a-8351-4f4d-87c4-bad9bcbb4218\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrentI2tEnd[Type]\tNUMBER\t\t504\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t1ceffb3a-ed86-45d0-88a1-fc0f549235ea\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrentI2tStart[Type]\tNUMBER\t\t504\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t37803fd2-3c84-4b51-9ed2-34999919342f\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTime[Type]\tNUMBER\t\t504\t1\tIfcTimeMeasure\t1\nPARAM\t4f3b5a86-c67a-4ae0-bb54-530c4e72a141\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTimeI2tEnd[Type]\tNUMBER\t\t504\t1\tIfcTimeMeasure\t1\nPARAM\td4abdbd2-9138-4809-bc56-fe37131ffdfe\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTimeI2tStart[Type]\tNUMBER\t\t504\t1\tIfcTimeMeasure\t1\nPARAM\t91680e15-9538-45d9-b87e-5590408b343d\tPset_ProtectiveDeviceTrippingFunctionGCurve.TimeTolerance1[Type]\tNUMBER\t\t504\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t406fba7b-d146-4d55-9478-241e7dd6ed2a\tPset_ProtectiveDeviceTrippingFunctionGCurve.TimeTolerance2[Type]\tNUMBER\t\t504\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t28e4187e-d2ae-43ba-9365-59ec9a53e72f\tPset_ProtectiveDeviceTrippingFunctionGCurve.TimeToleranceLimit1[Type]\tNUMBER\t\t504\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t505\tPset_ProtectiveDeviceTrippingFunctionICurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7be44cf-97cb-4c6b-b645-16955ab68ed1\tPset_ProtectiveDeviceTrippingFunctionICurve.CurrentTolerance1[Type]\tNUMBER\t\t505\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta500690d-4d6a-49b3-9e11-9d67f106984e\tPset_ProtectiveDeviceTrippingFunctionICurve.CurrentTolerance2[Type]\tNUMBER\t\t505\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t17691938-43e3-48ca-985e-c88199293e7e\tPset_ProtectiveDeviceTrippingFunctionICurve.CurrentToleranceLimit1[Type]\tNUMBER\t\t505\t1\tIfcTimeMeasure\t1\nPARAM\ta9d27ca8-d3a3-4835-851e-a69479d2916b\tPset_ProtectiveDeviceTrippingFunctionICurve.IsCurrentTolerancePositiveOnly[Type]\tYESNO\t\t505\t1\tIfcBoolean\t1\nPARAM\t56765725-6a4e-415b-8dbd-d05976bd84d7\tPset_ProtectiveDeviceTrippingFunctionICurve.IsOffWhenSFunctionOn[Type]\tYESNO\t\t505\t1\tIfcBoolean\t1\nPARAM\te80618d6-680a-4d3d-bb5f-b82d612db561\tPset_ProtectiveDeviceTrippingFunctionICurve.IsSelectable[Type]\tYESNO\t\t505\t1\tIfcBoolean\t1\nPARAM\tc796d049-319f-4193-822c-6345bcaf5a47\tPset_ProtectiveDeviceTrippingFunctionICurve.IsTimeTolerancePositiveOnly[Type]\tYESNO\t\t505\t1\tIfcBoolean\t1\nPARAM\ted7b106c-a138-4862-9647-65aaf2c3f10a\tPset_ProtectiveDeviceTrippingFunctionICurve.MaxAdjustmentX_ICS[Type]\tNUMBER\t\t505\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tdca1eb8d-7732-4a66-9d51-d489b0482520\tPset_ProtectiveDeviceTrippingFunctionICurve.NominalCurrentAdjusted[Type]\tYESNO\t\t505\t1\tIfcBoolean\t1\nPARAM\t736bf538-6613-4bd8-bcfe-25405f69147d\tPset_ProtectiveDeviceTrippingFunctionICurve.ReleaseCurrent[Type]\tNUMBER\t\t505\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t98dbc67f-aea7-4672-8c2b-8d00e1648f2b\tPset_ProtectiveDeviceTrippingFunctionICurve.ReleaseTime[Type]\tNUMBER\t\t505\t1\tIfcTimeMeasure\t1\nPARAM\tb7bcb326-62c1-4f12-af7b-ec5c696811ef\tPset_ProtectiveDeviceTrippingFunctionICurve.TimeTolerance1[Type]\tNUMBER\t\t505\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0c1efd0c-b7db-4f26-a9c9-3be2b71d987e\tPset_ProtectiveDeviceTrippingFunctionICurve.TimeTolerance2[Type]\tNUMBER\t\t505\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tdb60b3c1-4f90-4882-8df6-1d033053c860\tPset_ProtectiveDeviceTrippingFunctionICurve.TimeToleranceLimit1[Type]\tNUMBER\t\t505\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t506\tPset_ProtectiveDeviceTrippingFunctionLCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbcdf14ba-c844-45e0-a037-a56159039c65\tPset_ProtectiveDeviceTrippingFunctionLCurve.IsSelectable[Type]\tYESNO\t\t506\t1\tIfcBoolean\t1\nPARAM\t1ecec1db-9f33-4e22-b759-03d69d72a468\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerCurrent1[Type]\tNUMBER\t\t506\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t91481d75-3598-422b-abdf-35b3b1697cb9\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerCurrent2[Type]\tNUMBER\t\t506\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tc8a6a421-7c03-46a0-99ef-9a4cb148216b\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerTime1[Type]\tNUMBER\t\t506\t1\tIfcTimeMeasure\t1\nPARAM\t5e623474-23b1-4b66-af93-1c625620c900\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerTime2[Type]\tNUMBER\t\t506\t1\tIfcTimeMeasure\t1\nPARAM\tf988671a-66d1-4f7f-907e-3ead15e4ff3a\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperCurrent1[Type]\tNUMBER\t\t506\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t2e70e29c-e233-40dd-84ce-1aef4993d3ca\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperCurrent2[Type]\tNUMBER\t\t506\t1\tIfcElectricCurrentMeasure\t1\nPARAM\taee08d2f-9c1f-44a4-9f81-dc7d05d241be\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperTime1[Type]\tNUMBER\t\t506\t1\tIfcTimeMeasure\t1\nPARAM\t0637a03e-bb23-4b2f-a492-0829569f1500\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperTime2[Type]\tNUMBER\t\t506\t1\tIfcTimeMeasure\t1\n#\nGROUP\t507\tPset_ProtectiveDeviceTrippingFunctionSCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7bcbad53-9ddf-4538-b9e3-c82df982d936\tPset_ProtectiveDeviceTrippingFunctionSCurve.CurrentTolerance1[Type]\tNUMBER\t\t507\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4543e1ac-9d78-4e7b-868c-3f62b45d366d\tPset_ProtectiveDeviceTrippingFunctionSCurve.CurrentTolerance2[Type]\tNUMBER\t\t507\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc547a99f-990f-418e-8b31-80de9f55180b\tPset_ProtectiveDeviceTrippingFunctionSCurve.CurrentToleranceLimit1[Type]\tNUMBER\t\t507\t1\tIfcTimeMeasure\t1\nPARAM\tcd440920-29d5-409f-84db-23361888d665\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsCurrentTolerancePositiveOnly[Type]\tYESNO\t\t507\t1\tIfcBoolean\t1\nPARAM\t7729f4a7-7341-42f9-b559-e75bac95bbe7\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsOffWhenLfunctionOn[Type]\tYESNO\t\t507\t1\tIfcBoolean\t1\nPARAM\tfcc72729-4637-44b0-ab7a-5480c75b30fc\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsSelectable[Type]\tYESNO\t\t507\t1\tIfcBoolean\t1\nPARAM\t6503b228-11a7-4548-b4fb-28deafb2dde4\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsTimeTolerancePositiveOnly[Type]\tYESNO\t\t507\t1\tIfcBoolean\t1\nPARAM\t97f950c9-0cbe-49cd-9194-61d67eeebfd8\tPset_ProtectiveDeviceTrippingFunctionSCurve.NominalCurrentAdjusted[Type]\tYESNO\t\t507\t1\tIfcBoolean\t1\nPARAM\t4475fd16-4853-4313-9dc8-5e02176915a6\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrent[Type]\tNUMBER\t\t507\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t8695c64a-c211-4612-9455-448bfc20da35\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrentI2tEnd[Type]\tNUMBER\t\t507\t1\tIfcElectricCurrentMeasure\t1\nPARAM\te0732242-6c9a-4dfd-bf39-046e87070144\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrentI2tStart[Type]\tNUMBER\t\t507\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t2599b263-1946-4ae0-9f02-2f8cab0c9bcb\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTime[Type]\tNUMBER\t\t507\t1\tIfcTimeMeasure\t1\nPARAM\t0454af6d-7211-4ec3-8a1d-0643f0ff7b7d\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTimeI2tEnd[Type]\tNUMBER\t\t507\t1\tIfcTimeMeasure\t1\nPARAM\t98c97b32-de98-4271-811b-80520d03a4c7\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTimeI2tStart[Type]\tNUMBER\t\t507\t1\tIfcTimeMeasure\t1\nPARAM\t21487547-699e-4e3d-9df9-636c1151dc7f\tPset_ProtectiveDeviceTrippingFunctionSCurve.TimeTolerance1[Type]\tNUMBER\t\t507\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t9a531081-2071-43d2-84ee-07e75496981f\tPset_ProtectiveDeviceTrippingFunctionSCurve.TimeTolerance2[Type]\tNUMBER\t\t507\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tb7f27037-c363-4181-9358-fc176264561a\tPset_ProtectiveDeviceTrippingFunctionSCurve.TimeToleranceLimit1[Type]\tNUMBER\t\t507\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t508\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbd4cd8ed-d5bc-41ac-8380-ee33a5fc54e2\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentDesignation[Type]\tTEXT\t\t508\t1\tIfcLabel\t1\nPARAM\tbbad222e-b755-4568-83a2-f4b2d9ecb23a\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentRange[Type]\tMULTILINETEXT\t\t508\t1\tPropertyBoundedValue\t1\nPARAM\tc773f53a-446b-48f2-8807-a164a04b1605\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentRangeStepValue[Type]\tNUMBER\t\t508\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t8e473db4-21ba-4f12-9a05-11ef038f756c\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentValues[Type]\tMULTILINETEXT\t\t508\t1\tPropertyListValue\t1\nPARAM\tcb909e7b-2d0e-4d95-8a87-46ee218f0b20\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentValueType[Type]\tTEXT\t\t508\t1\tPEnum_AdjustmentValueType\t1\nPARAM\tc7c317ea-17ee-4905-b8ba-2fe6e0083186\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.CurrentAdjustmentRange[Type]\tMULTILINETEXT\t\t508\t1\tPropertyBoundedValue\t1\nPARAM\teacd43b1-210d-4a26-8631-58ae71e14012\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.CurrentAdjustmentRangeStepValue[Type]\tNUMBER\t\t508\t1\tIfcElectricCurrentMeasure\t1\nPARAM\ta38175ec-9f36-49e9-9315-443b9adfb64a\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.CurrentAdjustmentValues[Type]\tMULTILINETEXT\t\t508\t1\tPropertyListValue\t1\n#\nGROUP\t509\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t271027ab-d511-4d39-9a7e-81754cb69e45\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentDesignation[Type]\tTEXT\t\t509\t1\tIfcLabel\t1\nPARAM\te983684c-5d8f-4237-ab18-e7537fdf4c6a\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentRange[Type]\tMULTILINETEXT\t\t509\t1\tPropertyBoundedValue\t1\nPARAM\t657cdcc4-e84c-42c8-ab33-38451159031a\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentRangeStepValue[Type]\tNUMBER\t\t509\t1\tIfcTimeMeasure\t1\nPARAM\t088c1eef-73b6-4f01-8c45-183580605b0c\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentValues[Type]\tMULTILINETEXT\t\t509\t1\tPropertyListValue\t1\nPARAM\tc29ca0b2-0d13-4c95-92a5-2f4571ee2757\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentValueType[Type]\tTEXT\t\t509\t1\tPEnum_AdjustmentValueType\t1\nPARAM\tce20014b-7682-4887-8155-5d21b9220690\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.CurrentForTimeDelay[Type]\tNUMBER\t\t509\t1\tIfcTimeMeasure\t1\nPARAM\t4ccd136e-4cf7-4057-acb1-0b013ba79edf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.I2TApplicability[Type]\tTEXT\t\t509\t1\tPEnum_AdjustmentValueType\t1\nPARAM\t3e80c374-b18d-46fc-aa80-49332ead4325\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.TimeAdjustmentRange[Type]\tMULTILINETEXT\t\t509\t1\tPropertyBoundedValue\t1\nPARAM\tf0a25bac-5817-4b2d-820d-ce5314a44e58\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.TimeAdjustmentRangeStepValue[Type]\tNUMBER\t\t509\t1\tIfcTimeMeasure\t1\nPARAM\ta13d50c1-4b72-4aa8-a829-9439a7359d6b\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.TimeAdjustmentValues[Type]\tMULTILINETEXT\t\t509\t1\tPropertyListValue\t1\n#\nGROUP\t510\tPset_ProtectiveDeviceTrippingUnitTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc4bbe3ab-977f-4bf4-b613-a444dd895f1a\tPset_ProtectiveDeviceTrippingUnitTypeCommon.AtexVerified[Type]\tYESNO\t\t510\t1\tIfcBoolean\t1\nPARAM\t53420746-1f27-403e-8c98-32f71d256627\tPset_ProtectiveDeviceTrippingUnitTypeCommon.LimitingTerminalSize[Type]\tAREA\t\t510\t1\tIfcAreaMeasure\t1\nPARAM\ta18fa980-86c2-4f90-86a0-c9d5666ea1e2\tPset_ProtectiveDeviceTrippingUnitTypeCommon.OldDevice[Type]\tYESNO\t\t510\t1\tIfcBoolean\t1\nPARAM\teb30a072-fcab-4ae1-a03c-52493befee34\tPset_ProtectiveDeviceTrippingUnitTypeCommon.Reference[Type]\tTEXT\t\t510\t1\tIfcIdentifier\t1\nPARAM\t9c6ad63c-3c9f-4d17-ab35-81829e7aa3d0\tPset_ProtectiveDeviceTrippingUnitTypeCommon.Standard[Type]\tTEXT\t\t510\t1\tIfcLabel\t1\nPARAM\t19395281-709b-4be4-b5c8-3fe692937606\tPset_ProtectiveDeviceTrippingUnitTypeCommon.Status[Type]\tTEXT\t\t510\t1\tPEnum_ElementStatus\t1\nPARAM\t897dd7f0-3047-430c-8554-b1d52b01828e\tPset_ProtectiveDeviceTrippingUnitTypeCommon.UseInDiscrimination[Type]\tYESNO\t\t510\t1\tIfcBoolean\t1\n#\nGROUP\t511\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb6fa515d-0208-41bb-8510-dba7f492f25c\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.CurveDesignation[Type]\tTEXT\t\t511\t1\tIfcLabel\t1\nPARAM\tc77defb3-3c20-46ff-9459-bd485366a42e\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.DefinedTemperature[Type]\tNUMBER\t\t511\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t7505fd8b-7cc4-4660-aa68-c8cdb0f1c19c\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.ElectroMagneticTrippingUnitType[Type]\tTEXT\t\t511\t1\tPEnum_ElectroMagneticTrippingUnitType\t1\nPARAM\t504a6faf-d7fb-4379-9b44-88c6d5ee6101\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I1[Type]\tNUMBER\t\t511\t1\tIfcReal\t1\nPARAM\t1455f9be-b855-4174-8da7-79c28d5586ac\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I2[Type]\tNUMBER\t\t511\t1\tIfcReal\t1\nPARAM\te5a2b7f1-f5cd-4ffb-8730-7b6be3b91282\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I4[Type]\tNUMBER\t\t511\t1\tIfcReal\t1\nPARAM\t39516e94-4c05-4906-9642-05ac498c86e5\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I5[Type]\tNUMBER\t\t511\t1\tIfcReal\t1\nPARAM\t8be8077e-5fd6-41dd-9ca4-a6e157cafafd\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.T2[Type]\tNUMBER\t\t511\t1\tIfcTimeMeasure\t1\nPARAM\t5993d76c-d8d3-43df-93a3-c563bf415d45\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.T5[Type]\tNUMBER\t\t511\t1\tIfcTimeMeasure\t1\nPARAM\t1b39fd28-372b-4384-9c9c-80aa6ebeaccd\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.TemperatureFactor[Type]\tNUMBER\t\t511\t1\tIfcRatioMeasure\t1\n#\nGROUP\t512\tPset_ProtectiveDeviceTrippingUnitTypeElectronic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t30e24326-0e9c-484d-8e13-8f2a26988919\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.ElectronicTrippingUnitType[Type]\tTEXT\t\t512\t1\tPEnum_ElectronicTrippingUnitType\t1\nPARAM\tb9a097c4-25f6-49a1-8282-ea541fee0a09\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection[Type]\tYESNO\t\t512\t1\tIfcBoolean\t1\nPARAM\tecb440bd-9d95-45fa-b9c4-4fb63a056bb2\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_100[Type]\tYESNO\t\t512\t1\tIfcBoolean\t1\nPARAM\tbd70efcf-0491-4f37-8716-b53f7a05520d\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_50[Type]\tYESNO\t\t512\t1\tIfcBoolean\t1\nPARAM\ta4d8b27f-0d88-4e03-9eec-8c4ebce3d750\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_Select[Type]\tYESNO\t\t512\t1\tIfcBoolean\t1\nPARAM\t80bd9f3c-20c8-460c-80f2-bfac54dc1d50\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.NominalCurrents[Type]\tMULTILINETEXT\t\t512\t1\tPropertyListValue\t1\n#\nGROUP\t513\tPset_ProtectiveDeviceTrippingUnitTypeResidualCurrent\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tebf0745e-ecb7-4034-a091-9b3ec9048b32\tPset_ProtectiveDeviceTrippingUnitTypeResidualCurrent.TrippingUnitReleaseCurrent[Type]\tTEXT\t\t513\t1\tPEnum_TrippingUnitReleaseCurrent\t1\n#\nGROUP\t514\tPset_ProtectiveDeviceTrippingUnitTypeThermal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td8b04e63-08f2-4ff9-8213-f22634921d49\tPset_ProtectiveDeviceTrippingUnitTypeThermal.CurveDesignation[Type]\tTEXT\t\t514\t1\tIfcLabel\t1\nPARAM\t646e6e2f-82fc-4c79-838a-f65330e76129\tPset_ProtectiveDeviceTrippingUnitTypeThermal.DefinedTemperature[Type]\tNUMBER\t\t514\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\te96f3b75-432a-4f38-9144-221b08ebccd5\tPset_ProtectiveDeviceTrippingUnitTypeThermal.I1[Type]\tNUMBER\t\t514\t1\tIfcReal\t1\nPARAM\t423d14db-932b-463e-8799-8b74366ac837\tPset_ProtectiveDeviceTrippingUnitTypeThermal.I2[Type]\tNUMBER\t\t514\t1\tIfcReal\t1\nPARAM\t473e8b7e-ae96-4a4a-a20e-3e46ea9cb8cf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.T2[Type]\tNUMBER\t\t514\t1\tIfcTimeMeasure\t1\nPARAM\t35809035-050b-4fbe-a621-7a56446f8298\tPset_ProtectiveDeviceTrippingUnitTypeThermal.TemperatureFactor[Type]\tNUMBER\t\t514\t1\tIfcRatioMeasure\t1\nPARAM\t9c2ace7f-7033-4afe-88ca-6cac7d9c1e0d\tPset_ProtectiveDeviceTrippingUnitTypeThermal.ThermalTrippingUnitType[Type]\tTEXT\t\t514\t1\tPEnum_ThermalTrippingUnitType\t1\n#\nGROUP\t515\tPset_ProtectiveDeviceTypeAntiArcingDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf1f2bbc3-5931-419e-bc85-d659364125a5\tPset_ProtectiveDeviceTypeAntiArcingDevice.GroundingType[Type]\tTEXT\t\t515\t1\tIfcLabel\t1\nPARAM\t6a937a7d-2cdb-4273-a6cf-b5d300204e16\tPset_ProtectiveDeviceTypeAntiArcingDevice.RatedVoltage[Type]\tMULTILINETEXT\t\t515\t1\tPropertyBoundedValue\t1\n#\nGROUP\t516\tPset_ProtectiveDeviceTypeCircuitBreaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te45a2d14-34f4-4f21-a845-2e9232fe5686\tPset_ProtectiveDeviceTypeCircuitBreaker.CircuitBreakerType[Type]\tTEXT\t\t516\t1\tPEnum_CircuitBreakerType\t1\nPARAM\t38d349a6-f89b-4b52-a49c-3b9ab9ddf19a\tPset_ProtectiveDeviceTypeCircuitBreaker.ICM60947[Type]\tNUMBER\t\t516\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t1fb7138e-4216-428a-804f-f5b3af04648a\tPset_ProtectiveDeviceTypeCircuitBreaker.ICS60947[Type]\tNUMBER\t\t516\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t9e50213f-eaa7-42ca-8aad-57f903829293\tPset_ProtectiveDeviceTypeCircuitBreaker.ICU60947[Type]\tNUMBER\t\t516\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t83dc2306-b671-4a97-b81d-c686c3cdee3c\tPset_ProtectiveDeviceTypeCircuitBreaker.ICW60947[Type]\tNUMBER\t\t516\t1\tIfcElectricCurrentMeasure\t1\nPARAM\td2121096-66e8-4252-8581-60a9d94b999b\tPset_ProtectiveDeviceTypeCircuitBreaker.PerformanceClasses[Type]\tMULTILINETEXT\t\t516\t1\tPropertyListValue\t1\nPARAM\tc6eadec8-e9a8-433a-9666-320b7f9c1586\tPset_ProtectiveDeviceTypeCircuitBreaker.VoltageLevel[Type]\tTEXT\t\t516\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t517\tPset_ProtectiveDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t643c740f-5619-4a9b-982d-6a9bca5e2090\tPset_ProtectiveDeviceTypeCommon.CharacteristicTripCurve[Type]\tMULTILINETEXT\t\t517\t1\tPropertyTableValue\t1\nPARAM\t820a0319-2644-4c7b-93bd-b09e0c0f2e24\tPset_ProtectiveDeviceTypeCommon.CutOffCurrent[Type]\tNUMBER\t\t517\t1\t IfcElectricCurrentMeasure\t1\nPARAM\t86279e6c-ce3a-488a-9475-b9aec6f39395\tPset_ProtectiveDeviceTypeCommon.LimitingTerminalSize[Type]\tAREA\t\t517\t1\tIfcAreaMeasure\t1\nPARAM\tb62d0e35-2397-4c52-8897-0fdbc3a7d931\tPset_ProtectiveDeviceTypeCommon.MaximumRatedVoltage[Type]\tNUMBER\t\t517\t1\t IfcElectricVoltageMeasure\t1\nPARAM\t2634b74d-6605-46b6-80ac-512b1ce8d1b2\tPset_ProtectiveDeviceTypeCommon.ProtectiveTagType[Type]\tTEXT\t\t517\t1\tIfcLabel\t1\nPARAM\t068f5a2a-497e-4e35-a773-a339d4bbccd8\tPset_ProtectiveDeviceTypeCommon.RatedShortCircuitCurrent[Type]\tNUMBER\t\t517\t1\t IfcElectricCurrentMeasure\t1\nPARAM\t93a8f2df-b5ac-4776-ac2d-d1a1a4da2f20\tPset_ProtectiveDeviceTypeCommon.Reference[Type]\tTEXT\t\t517\t1\tIfcIdentifier\t1\nPARAM\tc731ff6b-5f7d-439b-b91e-99dd777c49aa\tPset_ProtectiveDeviceTypeCommon.StandardUsed[Type]\tTEXT\t\t517\t1\tIfcLabel\t1\nPARAM\t0c6398d0-57d5-4ef7-b9f7-ce08f20634a7\tPset_ProtectiveDeviceTypeCommon.Status[Type]\tTEXT\t\t517\t1\tPEnum_ElementStatus\t1\nPARAM\t9b9b0979-f8b3-4369-a6f8-84b601106821\tPset_ProtectiveDeviceTypeCommon.SwitchingDuty[Type]\tINTEGER\t\t517\t1\tIfcInteger\t1\n#\nGROUP\t518\tPset_ProtectiveDeviceTypeEarthFailureDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcb39fef5-0e66-4610-87e5-18bd86efdd7d\tPset_ProtectiveDeviceTypeEarthFailureDevice.EarthFailureDeviceType[Type]\tTEXT\t\t518\t1\tPEnum_EarthFailureDeviceType\t1\nPARAM\t5f308d20-4a39-4f21-add4-dddf68727d7a\tPset_ProtectiveDeviceTypeEarthFailureDevice.Sensitivity[Type]\tNUMBER\t\t518\t1\t IfcElectricCurrentMeasure\t1\n#\nGROUP\t519\tPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9442e339-9aec-4884-b1ca-38eca88b993c\tPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker.EarthFailureDeviceType[Type]\tTEXT\t\t519\t1\tPEnum_EarthFailureDeviceType\t1\nPARAM\t02f4d5aa-125e-47b0-b436-84f4a25d7c4b\tPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker.Sensitivity[Type]\tNUMBER\t\t519\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t520\tPset_ProtectiveDeviceTypeFuseDisconnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t117d6fbd-339e-46e4-8df0-361d770e28bc\tPset_ProtectiveDeviceTypeFuseDisconnector.ArcExtinctionType[Type]\tTEXT\t\t520\t1\tIfcLabel\t1\nPARAM\t024e500f-422c-4eb9-97e3-48d8c47e9089\tPset_ProtectiveDeviceTypeFuseDisconnector.BreakingCapacity[Type]\tNUMBER\t\t520\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t925578c1-1e07-46a5-b6b7-7de4e9445d5f\tPset_ProtectiveDeviceTypeFuseDisconnector.FuseDisconnectorType[Type]\tTEXT\t\t520\t1\tPEnum_FuseDisconnectorType\t1\nPARAM\tb155c0c6-b618-47b3-a619-5d7e8a6cd771\tPset_ProtectiveDeviceTypeFuseDisconnector.IC60269[Type]\tNUMBER\t\t520\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tb7c2343d-f185-47b1-b64a-742827c91a09\tPset_ProtectiveDeviceTypeFuseDisconnector.NominalCurrent[Type]\tNUMBER\t\t520\t1\tIfcElectricCurrentMeasure\t1\nPARAM\td5a1b335-1f82-4666-9bc4-c8de731afc44\tPset_ProtectiveDeviceTypeFuseDisconnector.NominalFrequency[Type]\tNUMBER\t\t520\t1\tIfcFrequencyMeasure\t1\nPARAM\t46a9094d-1ed5-4b63-ac7f-d6d989087be1\tPset_ProtectiveDeviceTypeFuseDisconnector.NumberOfPhases[Type]\tINTEGER\t\t520\t1\tIfcCountMeasure\t1\nPARAM\t35e26815-efb7-44be-ae6e-61831641e187\tPset_ProtectiveDeviceTypeFuseDisconnector.NumberOfPoles[Type]\tINTEGER\t\t520\t1\tIfcCountMeasure\t1\nPARAM\t51a2851b-5f60-4412-a73f-d8e8ae9fcc88\tPset_ProtectiveDeviceTypeFuseDisconnector.PowerLoss[Type]\tNUMBER\t\t520\t1\tIfcPowerMeasure\t1\nPARAM\t1465d0f8-7bb5-49e5-ac0a-f9bb0c26e36c\tPset_ProtectiveDeviceTypeFuseDisconnector.RatedVoltage[Type]\tMULTILINETEXT\t\t520\t1\tPropertyBoundedValue\t1\nPARAM\t5c54a69a-d53a-44e3-89a9-a91dadb78300\tPset_ProtectiveDeviceTypeFuseDisconnector.ReferenceEnvironmentTemperature[Type]\tMULTILINETEXT\t\t520\t1\tPropertyBoundedValue\t1\nPARAM\t8b20176b-2752-42eb-98ca-003f9e15cd19\tPset_ProtectiveDeviceTypeFuseDisconnector.TransformationRatio[Type]\tNUMBER\t\t520\t1\tIfcRatioMeasure\t1\nPARAM\t82414caa-7eeb-4fdf-a086-ff0fe7ce3c1c\tPset_ProtectiveDeviceTypeFuseDisconnector.VoltageLevel[Type]\tTEXT\t\t520\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t521\tPset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5858dad0-03b8-4313-9f25-f7ede73ee9c2\tPset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker.Sensitivity[Type]\tNUMBER\t\t521\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t522\tPset_ProtectiveDeviceTypeResidualCurrentSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t020b4c03-a33b-45aa-85b9-fd470ca89cc5\tPset_ProtectiveDeviceTypeResidualCurrentSwitch.Sensitivity[Type]\tNUMBER\t\t522\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t523\tPset_ProtectiveDeviceTypeSparkGap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7c3ab348-ad93-44b2-bb84-590ea6491196\tPset_ProtectiveDeviceTypeSparkGap.BreakdownVoltageTolerance[Type]\tNUMBER\t\t523\t1\tIfcElectricVoltageMeasure\t1\nPARAM\ta844f042-5f00-4495-a98c-85129b07533c\tPset_ProtectiveDeviceTypeSparkGap.Capacitance[Type]\tNUMBER\t\t523\t1\tIfcElectricCapacitanceMeasure\t1\nPARAM\t311a5c82-66c1-44cc-a81a-4f66ac48eb58\tPset_ProtectiveDeviceTypeSparkGap.CurrentRMS[Type]\tNUMBER\t\t523\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t0af14dff-4c0b-4c1a-b8e3-b4e80ddb1a1b\tPset_ProtectiveDeviceTypeSparkGap.PowerDissipation[Type]\tNUMBER\t\t523\t1\tIfcPowerMeasure\t1\nPARAM\t4a48dd25-242b-404d-9521-3c03c9b1dec9\tPset_ProtectiveDeviceTypeSparkGap.Resistivity[Type]\tNUMBER\t\t523\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t1fc6622e-c6ae-483a-b766-559675849506\tPset_ProtectiveDeviceTypeSparkGap.SparkGapType[Type]\tTEXT\t\t523\t1\tPEnum_SparkGapType\t1\n#\nGROUP\t524\tPset_ProtectiveDeviceTypeVaristor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te92bfce3-cbce-42d5-86f1-489b24c44681\tPset_ProtectiveDeviceTypeVaristor.CharacteristicFunction[Type]\tTEXT\t\t524\t1\tIfcText\t1\nPARAM\td67c8584-8263-4e75-b4ea-00b9dcb82837\tPset_ProtectiveDeviceTypeVaristor.VaristorType[Type]\tTEXT\t\t524\t1\tPEnum_VaristorType\t1\n#\nGROUP\t525\tPset_ProvisionForVoid\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0428b352-4c97-4144-9809-ea94223d48c6\tPset_ProvisionForVoid.Depth[Type]\tLENGTH\t\t525\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb5569075-4b01-4c82-a197-22c2f13025ec\tPset_ProvisionForVoid.Diameter[Type]\tLENGTH\t\t525\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t704af398-64f4-4b22-8087-74860bde42fd\tPset_ProvisionForVoid.Height[Type]\tLENGTH\t\t525\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4ec26f44-67f5-47a1-8662-caa70f379d13\tPset_ProvisionForVoid.System[Type]\tTEXT\t\t525\t1\tIfcLabel\t1\nPARAM\t0491005a-3819-42e3-b4ea-15a8cd24540c\tPset_ProvisionForVoid.VoidShape[Type]\tTEXT\t\t525\t1\tIfcLabel\t1\nPARAM\t35418721-bae7-4e6d-86a5-5be9c7c46f01\tPset_ProvisionForVoid.Width[Type]\tLENGTH\t\t525\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t526\tPset_PumpOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7d5002c8-fd3b-4c82-9aab-e5b1ae002fcb\tPset_PumpOccurrence.BaseType[Type]\tTEXT\t\t526\t1\tPEnum_PumpBaseType\t1\nPARAM\t613c1381-b8da-4d72-9b4c-195b1926cef6\tPset_PumpOccurrence.DriveConnectionType[Type]\tTEXT\t\t526\t1\tPEnum_PumpDriveConnectionType\t1\nPARAM\t1bdf5d2b-862d-4d41-9c96-1ee87c2ecc4f\tPset_PumpOccurrence.ImpellerDiameter[Type]\tLENGTH\t\t526\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t527\tPset_PumpPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t185cdc3a-e4c1-4bbb-8221-bf21ce06a8bd\tPset_PumpPHistory.Flowrate[Type]\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\nPARAM\td7e06609-8236-4ac8-8e89-ff631f7ca512\tPset_PumpPHistory.MechanicalEfficiency[Type]\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\nPARAM\tf30cf953-28b5-4ffe-bc34-971138d21472\tPset_PumpPHistory.OverallEfficiency[Type]\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\nPARAM\t56f35c39-a983-4cc7-ab2c-1fbb621fae87\tPset_PumpPHistory.Power[Type]\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\nPARAM\tbc7d8312-7c0b-463f-b65e-52f88b446773\tPset_PumpPHistory.PowerHistory[Type]\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\nPARAM\td48f50af-30e3-4c02-bccc-7850fbafd3e2\tPset_PumpPHistory.PressureRise[Type]\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\nPARAM\tbb3acab9-15b8-4141-b174-e649bd73fe69\tPset_PumpPHistory.RotationSpeed[Type]\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\n#\nGROUP\t528\tPset_PumpTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5da03394-96f8-44b7-95ae-2154c30d5939\tPset_PumpTypeCommon.CasingMaterial[Type]\tMULTILINETEXT\t\t528\t1\tIfcMaterial\t1\nPARAM\t235f295a-3910-46f0-ae14-cc3c435f6643\tPset_PumpTypeCommon.ConnectionSize[Type]\tLENGTH\t\t528\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t39ce70e6-04c0-4407-af87-fd0bdff32b81\tPset_PumpTypeCommon.FlowRateRange[Type]\tMULTILINETEXT\t\t528\t1\tPropertyBoundedValue\t1\nPARAM\t55c0ebae-4164-43bf-b8c3-942914ccfa6b\tPset_PumpTypeCommon.FlowResistanceRange[Type]\tMULTILINETEXT\t\t528\t1\tPropertyBoundedValue\t1\nPARAM\t07c9b273-67c3-4692-b470-ad3b04582123\tPset_PumpTypeCommon.ImpellerMaterial[Type]\tMULTILINETEXT\t\t528\t1\tIfcMaterial\t1\nPARAM\tf9a78937-f369-497a-90a0-7004702a6856\tPset_PumpTypeCommon.ImpellerSealMaterial[Type]\tMULTILINETEXT\t\t528\t1\tIfcMaterial\t1\nPARAM\t5dad4a1d-afe7-4f68-883d-071aa71d3030\tPset_PumpTypeCommon.NetPositiveSuctionHead[Type]\tNUMBER\t\t528\t1\tIfcPressureMeasure\t1\nPARAM\ta635dd8e-5614-44c9-a6d3-07dede539383\tPset_PumpTypeCommon.NominalRotationSpeed[Type]\tNUMBER\t\t528\t1\tIfcRotationalFrequencyMeasure\t1\nPARAM\t739e5787-eb43-4095-a0dc-a3ff3ca906e1\tPset_PumpTypeCommon.Reference[Type]\tTEXT\t\t528\t1\tIfcIdentifier\t1\nPARAM\t6bc66f6d-59b3-416f-9a4b-2792c5572966\tPset_PumpTypeCommon.Status[Type]\tTEXT\t\t528\t1\tPEnum_ElementStatus\t1\nPARAM\t04d2cf49-17bc-4edc-acfc-520041eecd28\tPset_PumpTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t528\t1\tPropertyBoundedValue\t1\n#\nGROUP\t529\tPset_QuantityTakeOff\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7237e897-0f36-4ae7-9f56-807f5fff8f9d\tPset_QuantityTakeOff.LayerQuantity.LocalContext[Type]\tTEXT\t\t529\t1\tIfcText\t1\nPARAM\t5042ef0a-cae5-412c-acff-54bde41436eb\tPset_QuantityTakeOff.LayerQuantity.MaterialLayer[Type]\tTEXT\t\t529\t1\tIfcIdentifier\t1\nPARAM\t430e05bd-149a-4974-9fe9-5ec2718d173f\tPset_QuantityTakeOff.LocalContext[Type]\tTEXT\t\t529\t1\tIfcText\t1\nPARAM\t801424db-56c7-4050-8602-b76d3f2c31a8\tPset_QuantityTakeOff.Reference[Type]\tTEXT\t\t529\t1\tIfcIdentifier\t1\n#\nGROUP\t530\tPset_QuayCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t86b14b2e-84fa-4f34-bae1-3cb9ba7706ab\tPset_QuayCommon.BentSpacing[Type]\tLENGTH\t\t530\t1\tIfcLengthMeasure\t1\nPARAM\tae904cff-a493-4eb5-b02d-49e05814f7ef\tPset_QuayCommon.Elevation[Type]\tLENGTH\t\t530\t1\tIfcLengthMeasure\t1\nPARAM\tc4757114-7111-4bf0-a519-427d627787cd\tPset_QuayCommon.QuaySectionType[Type]\tTEXT\t\t530\t1\tPEnum_SectionType\t1\nPARAM\t10a35be7-1d09-4ea0-998d-dd0fd95c2062\tPset_QuayCommon.StructuralType[Type]\tTEXT\t\t530\t1\tIfcLabel\t1\n#\nGROUP\t531\tPset_QuayDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdae054db-19e9-4264-9eaa-273e12042223\tPset_QuayDesignCriteria.EquipmentLoading[Type]\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\nPARAM\t8f31aebf-641c-43db-90b2-d2c546fddbe3\tPset_QuayDesignCriteria.ExtremeHighWaterLevel[Type]\tLENGTH\t\t531\t1\tIfcLengthMeasure\t1\nPARAM\t7ba9f1ec-bfc3-457c-81bc-85c1afdb9efb\tPset_QuayDesignCriteria.ExtremeLowWaterLevel[Type]\tLENGTH\t\t531\t1\tIfcLengthMeasure\t1\nPARAM\t5c9f7e25-9a72-47cb-8c3d-3ba21bd20354\tPset_QuayDesignCriteria.FlowLoading[Type]\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\nPARAM\t064bc8a2-6ee0-4c2d-a2e3-3ff3a7b79e54\tPset_QuayDesignCriteria.HighWaterLevel[Type]\tLENGTH\t\t531\t1\tIfcLengthMeasure\t1\nPARAM\t1611bc9e-2f23-4c16-bb35-f44214c5671b\tPset_QuayDesignCriteria.LowWaterLevel[Type]\tLENGTH\t\t531\t1\tIfcLengthMeasure\t1\nPARAM\tbb1afb6e-8ec0-493b-b3c7-e92b54b759cd\tPset_QuayDesignCriteria.ShipLoading[Type]\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\nPARAM\t4d24d2b7-61b7-4a23-8b00-61ab2a850095\tPset_QuayDesignCriteria.UniformlyDistributedLoad[Type]\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\nPARAM\t85cc7e0a-348b-460d-b58b-e9d6354486dc\tPset_QuayDesignCriteria.WaveLoading[Type]\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\n#\nGROUP\t532\tPset_RadiiKerbStone\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9e0312ec-5a3a-4072-814a-906a02bfe6a6\tPset_RadiiKerbStone.CurveShape[Type]\tTEXT\t\t532\t1\tPEnum_CurveShapeEnum\t1\nPARAM\tf7190747-3665-463f-92ec-f52a87423669\tPset_RadiiKerbStone.Radius[Type]\tLENGTH\t\t532\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t533\tPset_RailingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t92a4fdf0-1d88-4786-8c42-5fe075dd3414\tPset_RailingCommon.Diameter[Type]\tLENGTH\t\t533\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t28e3aa6a-7869-4ba4-8fb5-89b3dbdd8912\tPset_RailingCommon.Height[Type]\tLENGTH\t\t533\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0f1544f8-aabc-41c3-ab69-1ef7e50a214b\tPset_RailingCommon.IsExternal[Type]\tYESNO\t\t533\t1\tIfcBoolean\t1\nPARAM\t9bc2b804-b5f0-4d76-8cf5-d38e6e471a15\tPset_RailingCommon.Reference[Type]\tTEXT\t\t533\t1\tIfcIdentifier\t1\nPARAM\tb1a3a5bc-2603-4220-94a8-a64e43ffbb9d\tPset_RailingCommon.Status[Type]\tTEXT\t\t533\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t534\tPset_RailTypeBlade\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t78e4c0da-3856-467e-b869-7f8f60785286\tPset_RailTypeBlade.BladeRadius[Type]\tLENGTH\t\t534\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0f0e5247-670c-490b-8ac8-40e840ac9f8b\tPset_RailTypeBlade.IsArticulatedBlade[Type]\tYESNO\t\t534\t1\tIfcBoolean\t1\nPARAM\t547a278e-38bd-448c-98ad-9619581fd183\tPset_RailTypeBlade.IsFallbackBlade[Type]\tYESNO\t\t534\t1\tIfcBoolean\t1\nPARAM\t5cc17fe3-605c-4688-b007-41029c69c6c7\tPset_RailTypeBlade.NominalLength[Type]\tLENGTH\t\t534\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t535\tPset_RailTypeCheckRail\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t401280e4-bbd2-4dd1-a533-c2343a2d288f\tPset_RailTypeCheckRail.CheckRailType[Type]\tTEXT\t\t535\t1\tPEnum_CheckRailType\t1\nPARAM\t6eca6a00-d468-4d8a-82a8-51f5d5d467dc\tPset_RailTypeCheckRail.InstallationPlan[Type]\tMULTILINETEXT\t\t535\t1\tIfcExternalReference\t1\n#\nGROUP\t536\tPset_RailTypeGuardRail\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tafcc7dbc-d426-42b0-b9ab-ebacc9f1da9b\tPset_RailTypeGuardRail.GuardRailConnection[Type]\tTEXT\t\t536\t1\tPEnum_GuardRailConnection\t1\nPARAM\te36e48f1-5474-48cb-b354-972950df3eed\tPset_RailTypeGuardRail.GuardRailType[Type]\tTEXT\t\t536\t1\tPEnum_GuardRailType\t1\nPARAM\t01dac0db-1752-4883-ab0f-8a6c3acd9dee\tPset_RailTypeGuardRail.PositionInTrack[Type]\tTEXT\t\t536\t1\tPEnum_RelativePosition\t1\n#\nGROUP\t537\tPset_RailTypeRail\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2119a7ae-5e92-4438-9a76-254772fe351e\tPset_RailTypeRail.DrillOnRail[Type]\tTEXT\t\t537\t1\tPEnum_DrillOnRail\t1\nPARAM\tc87f3ae1-bcc7-4778-9b57-37c6e66cd548\tPset_RailTypeRail.InstallationPlan[Type]\tMULTILINETEXT\t\t537\t1\tIfcExternalReference\t1\nPARAM\td471cffc-1ca4-416e-955c-fcf80e8d790c\tPset_RailTypeRail.IsStainless[Type]\tYESNO\t\t537\t1\tIfcBoolean\t1\nPARAM\tfce0615d-6d85-4693-9c1b-666fb49746d7\tPset_RailTypeRail.MinimumTensileStrength[Type]\tNUMBER\t\t537\t1\tIfcForceMeasure\t1\nPARAM\tf03a0056-4c9a-4a1d-83fb-22bb64bbd7a7\tPset_RailTypeRail.PositionInTrack[Type]\tTEXT\t\t537\t1\tPEnum_RelativePosition\t1\nPARAM\tfccbc865-1a22-446c-af5e-1090c002d383\tPset_RailTypeRail.RailCondition[Type]\tTEXT\t\t537\t1\tPEnum_RailCondition\t1\nPARAM\t7530810f-a231-422e-8c46-be06b0d14ded\tPset_RailTypeRail.RailDeliveryState[Type]\tTEXT\t\t537\t1\tPEnum_RailDeliveryState\t1\nPARAM\t07f25517-31a2-4f4d-b518-0a1e1f2b9b90\tPset_RailTypeRail.RailElementaryLength[Type]\tTEXT\t\t537\t1\tPEnum_RailElementaryLength\t1\nPARAM\t5191f5c8-01e5-4fa7-861d-175fed57369e\tPset_RailTypeRail.TechnicalStandard[Type]\tMULTILINETEXT\t\t537\t1\tIfcExternalReference\t1\n#\nGROUP\t538\tPset_RailTypeStockRail\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tce90db4c-dbce-407d-baa6-dac3180974f5\tPset_RailTypeStockRail.InstallationPlan[Type]\tMULTILINETEXT\t\t538\t1\tIfcExternalReference\t1\nPARAM\tf0572df5-a1f8-493c-806e-bc7690d2b220\tPset_RailTypeStockRail.NominalLength[Type]\tLENGTH\t\t538\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t16e179cd-b481-49ec-8171-6a1cc3046178\tPset_RailTypeStockRail.StockRailRadius[Type]\tLENGTH\t\t538\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t539\tPset_RailwayBalise\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t43efd76e-3035-4d6e-9a67-048900a057ac\tPset_RailwayBalise.DetectionRange[Type]\tLENGTH\t\t539\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t59695ea3-a2d2-4733-b476-4932dd1ebbbb\tPset_RailwayBalise.FailureInformation[Type]\tTEXT\t\t539\t1\tIfcText\t1\nPARAM\t5355dbcf-4628-4a59-be84-7b62099862ba\tPset_RailwayBalise.InformationLength[Type]\tINTEGER\t\t539\t1\tIfcInteger\t1\nPARAM\t0b7dace6-97ef-424c-88ef-68929dcd24a7\tPset_RailwayBalise.IP_Code[Type]\tTEXT\t\t539\t1\tIfcLabel\t1\nPARAM\t50e01a78-6d6d-40bf-864f-e1502d614928\tPset_RailwayBalise.NominalHeight[Type]\tLENGTH\t\t539\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t1cf479e9-ca59-4bfd-a620-434c865691f5\tPset_RailwayBalise.NominalLength[Type]\tLENGTH\t\t539\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t8ebe5858-3ce1-4fc5-8f6e-2133dc83fc3c\tPset_RailwayBalise.NominalWeight[Type]\tNUMBER\t\t539\t1\tIfcMassMeasure\t1\nPARAM\te6f7b85b-e4bc-4557-823f-6af1127a9f21\tPset_RailwayBalise.NominalWidth[Type]\tLENGTH\t\t539\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t7af1c21b-8e35-4aea-9884-bdfbd2fbf650\tPset_RailwayBalise.OperationalTemperatureRange[Type]\tMULTILINETEXT\t\t539\t1\tPropertyBoundedValue\t1\nPARAM\tc1308439-fbf8-4d00-9110-497292104e8f\tPset_RailwayBalise.RailwayBaliseType[Type]\tTEXT\t\t539\t1\tPEnum_RailwayBaliseType\t1\nPARAM\tf587ff82-4059-446e-aa55-28b9d88ff00c\tPset_RailwayBalise.TransmissionRate[Type]\tINTEGER\t\t539\t1\tIfcIntegerCountRateMeasure\t1\n#\nGROUP\t540\tPset_RailwayCableCarrier\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a3f035f-9dd0-414c-ae44-2e2cbffdbc86\tPset_RailwayCableCarrier.NumberOfCrossedTracks[Type]\tINTEGER\t\t540\t1\tIfcCountMeasure\t1\n#\nGROUP\t541\tPset_RailwayLevelCrossing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t53d7a608-0abe-468e-8874-8a7a3c5f94fe\tPset_RailwayLevelCrossing.HasRailDrainage[Type]\tYESNO\t\t541\t1\tIfcBoolean\t1\nPARAM\ta344a27b-484f-4da2-b975-694ec8c8a4ab\tPset_RailwayLevelCrossing.IsAccessibleByVehicle[Type]\tYESNO\t\t541\t1\tIfcBoolean\t1\nPARAM\t32c84520-a56a-4d33-8263-2e613f03c862\tPset_RailwayLevelCrossing.IsExceptionalTransportRoute[Type]\tYESNO\t\t541\t1\tIfcBoolean\t1\nPARAM\t7c85cdef-832f-440b-9089-5bd9454d8737\tPset_RailwayLevelCrossing.IsPrivateOwner[Type]\tYESNO\t\t541\t1\tIfcBoolean\t1\nPARAM\tbd86d9b5-75ba-4455-b573-3c2dd34a90a7\tPset_RailwayLevelCrossing.IsSecuredBySignalingSystem[Type]\tYESNO\t\t541\t1\tIfcBoolean\t1\nPARAM\t5f7497ae-57fb-4dd1-9213-429b035b8c0e\tPset_RailwayLevelCrossing.PermissiblePavementLoad[Type]\tNUMBER\t\t541\t1\tIfcMassMeasure\t1\n#\nGROUP\t542\tPset_RailwaySignalAspect\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdb6dc020-63ee-48e5-b1b4-85f3bf5dd528\tPset_RailwaySignalAspect.AppliesToTrainCategory[Type]\tTEXT\t\t542\t1\tPEnum_TrainCategory\t1\nPARAM\tab0c59a8-89f5-4220-83f1-674ec291d529\tPset_RailwaySignalAspect.SignalAspectSymbol[Type]\tMULTILINETEXT\t\t542\t1\tIfcExternalReference\t1\nPARAM\t70872c2f-eea0-40ad-8c2a-0cabaa485317\tPset_RailwaySignalAspect.SignalAspectType[Type]\tTEXT\t\t542\t1\tIfcLabel\t1\nPARAM\t8364d1b9-8c68-4317-92cd-e53b7d339002\tPset_RailwaySignalAspect.SignLegend[Type]\tTEXT\t\t542\t1\tIfcText\t1\n#\nGROUP\t543\tPset_RailwaySignalOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7ab08f4c-2086-4e6c-9def-c44a42ac2ff5\tPset_RailwaySignalOccurrence.ApproachSpeed[Type]\tNUMBER\t\t543\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t07248e8e-2bda-4b9f-a2bd-bb847917e7d5\tPset_RailwaySignalOccurrence.DistanceToStopMark[Type]\tLENGTH\t\t543\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4f999c23-ec17-4dbf-a41d-009d34daf248\tPset_RailwaySignalOccurrence.HandSignallingProhibited[Type]\tYESNO\t\t543\t1\tIfcBoolean\t1\nPARAM\t34c2bc15-344b-40b1-89f9-3393bffc2a47\tPset_RailwaySignalOccurrence.HinderingObstaclesDescription[Type]\tTEXT\t\t543\t1\tIfcText\t1\nPARAM\t1f991a6a-d221-42e5-9c09-6acb478a3a4c\tPset_RailwaySignalOccurrence.LimitedClearances[Type]\tTEXT\t\t543\t1\tIfcText\t1\nPARAM\tf1dbfdea-9480-44c3-8582-4a124f553672\tPset_RailwaySignalOccurrence.NumberOfLampsNotUsed[Type]\tINTEGER\t\t543\t1\tIfcCountMeasure\t1\nPARAM\t8e2aca8d-745f-4459-9e1e-b1061c380a83\tPset_RailwaySignalOccurrence.RequiresBannerSignal[Type]\tYESNO\t\t543\t1\tIfcBoolean\t1\nPARAM\t02f3e732-0e92-4dca-b420-3e1abfa7afe1\tPset_RailwaySignalOccurrence.RequiresOLEMesh[Type]\tYESNO\t\t543\t1\tIfcBoolean\t1\nPARAM\t77e53cf4-88ca-45cf-9509-cc1b08737a72\tPset_RailwaySignalOccurrence.RequiresSafetyHandrail[Type]\tYESNO\t\t543\t1\tIfcBoolean\t1\nPARAM\tb6fae2a9-8c55-4b6b-826a-051a1d3e9a43\tPset_RailwaySignalOccurrence.SignalPostTelephoneID[Type]\tTEXT\t\t543\t1\tIfcIdentifier\t1\nPARAM\tba871ee2-386c-4e1e-b2d0-7d530907c6d2\tPset_RailwaySignalOccurrence.SignalPostTelephoneType[Type]\tTEXT\t\t543\t1\tIfcLabel\t1\nPARAM\tb3c58d0b-4e67-4e9f-88eb-0317e51d3b1a\tPset_RailwaySignalOccurrence.SignalWalkwayLength[Type]\tLENGTH\t\t543\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td5ed45a4-a9af-4389-9f27-458537d1237a\tPset_RailwaySignalOccurrence.SpecialPositionArrangement[Type]\tTEXT\t\t543\t1\tIfcLabel\t1\n#\nGROUP\t544\tPset_RailwaySignalSighting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tacfb0abf-4cc3-4160-90c5-25ef75286672\tPset_RailwaySignalSighting.SignalSightingAchievableDistance[Type]\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t34e3d895-685a-4f00-bbad-26f6d518e4fb\tPset_RailwaySignalSighting.SignalSightingAvailableDistance[Type]\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t06326307-e95f-42b3-8c74-51a2a1503094\tPset_RailwaySignalSighting.SignalSightingCombinedWithRepeater[Type]\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t054434ec-6074-478d-aeb0-dd9fe0a604be\tPset_RailwaySignalSighting.SignalSightingMinimum[Type]\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t21cc33fb-e9e6-4830-90a6-81e4d01b1248\tPset_RailwaySignalSighting.SignalSightingPreferred[Type]\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taa6ad079-5de9-4ed8-bfd6-db5b1c6b450f\tPset_RailwaySignalSighting.SignalSightingRouteIndicator[Type]\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4bd1ed9f-11ea-46fb-a006-2a615f5a992a\tPset_RailwaySignalSighting.SignalViewingMinimumInFront[Type]\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t545\tPset_RailwaySignalType\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4e5602ca-4159-4c20-9d0e-ce1b248a8826\tPset_RailwaySignalType.HasConductorRailGuardBoard[Type]\tYESNO\t\t545\t1\tIfcBoolean\t1\nPARAM\t0caffe0a-e09e-405f-81e2-52509e8c5bd1\tPset_RailwaySignalType.HotStripOrientation[Type]\tTEXT\t\t545\t1\tIfcLabel\t1\nPARAM\t64e93a07-5eb1-4be0-b264-c4992b61434b\tPset_RailwaySignalType.IsHighType[Type]\tYESNO\t\t545\t1\tIfcBoolean\t1\nPARAM\ta284c07d-8f77-4ad8-8612-812f22205840\tPset_RailwaySignalType.LensDiffuserOrientation[Type]\tTEXT\t\t545\t1\tIfcLabel\t1\nPARAM\t682b15e7-c043-4699-bb68-bde5a28b8851\tPset_RailwaySignalType.LensDiffuserType[Type]\tTEXT\t\t545\t1\tIfcLabel\t1\nPARAM\t2aa3a163-002c-4fd9-8593-a5d133186bb9\tPset_RailwaySignalType.MaximumDisplayDistance[Type]\tLENGTH\t\t545\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbdfb2ded-561e-4761-8298-c806e7ee5661\tPset_RailwaySignalType.NumberOfLamps[Type]\tINTEGER\t\t545\t1\tIfcCountMeasure\t1\nPARAM\td5200ab8-40e5-4fb9-b58e-e2b188172da5\tPset_RailwaySignalType.RailwaySignalType[Type]\tTEXT\t\t545\t1\tPEnum_RailwaySignalType\t1\nPARAM\t4f4f05a7-1899-4130-827c-3f3de1fc6edd\tPset_RailwaySignalType.RequiredDisplayDistance[Type]\tLENGTH\t\t545\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t074461bf-c3a3-4ccb-ba1e-d4948392facf\tPset_RailwaySignalType.SignalHoodLength[Type]\tLENGTH\t\t545\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tac8aec2e-28a3-407c-a69a-c7e233608266\tPset_RailwaySignalType.SignalIndicatorType[Type]\tTEXT\t\t545\t1\tPEnum_SignalIndicatorType\t1\nPARAM\tc88e8c56-8209-4e72-93e3-bd14db9f71e0\tPset_RailwaySignalType.SignalMessage[Type]\tTEXT\t\t545\t1\tIfcText\t1\n#\nGROUP\t546\tPset_RailwayTrackStructurePart\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4dbd6c88-6ca0-44f4-9ab7-c64ba5a2f0c9\tPset_RailwayTrackStructurePart.HasBallastTrack[Type]\tYESNO\t\t546\t1\tIfcBoolean\t1\nPARAM\t49001e85-376d-41fe-8a29-820d981c86eb\tPset_RailwayTrackStructurePart.HasCWR[Type]\tYESNO\t\t546\t1\tIfcBoolean\t1\nPARAM\tf505f3d6-17c6-43ca-a373-75009b7403a6\tPset_RailwayTrackStructurePart.IsSunExposed[Type]\tYESNO\t\t546\t1\tIfcBoolean\t1\nPARAM\tff2cd93d-2b28-4a8a-b3b6-8f3e1b731614\tPset_RailwayTrackStructurePart.TrackSupportingStructure[Type]\tTEXT\t\t546\t1\tPEnum_TrackSupportingStructure\t1\n#\nGROUP\t547\tPset_RampCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1573f01a-f417-4fa0-8876-335e78d9fa53\tPset_RampCommon.FireExit[Type]\tYESNO\t\t547\t1\tIfcBoolean\t1\nPARAM\te612371b-729f-4536-a8bd-23c463ae205c\tPset_RampCommon.FireRating[Type]\tTEXT\t\t547\t1\tIfcLabel\t1\nPARAM\ta8b5dfe0-e134-4c5b-9256-767c3939566f\tPset_RampCommon.HandicapAccessible[Type]\tYESNO\t\t547\t1\tIfcBoolean\t1\nPARAM\tf763eee1-6f56-483b-b4fb-06a8a86c4786\tPset_RampCommon.HasNonSkidSurface[Type]\tYESNO\t\t547\t1\tIfcBoolean\t1\nPARAM\tc1c3c6a2-c1bd-40a4-863e-23f371a41d03\tPset_RampCommon.IsExternal[Type]\tYESNO\t\t547\t1\tIfcBoolean\t1\nPARAM\t032f5cc1-ecbf-456f-a348-6db261c2f5a1\tPset_RampCommon.LoadBearing[Type]\tYESNO\t\t547\t1\tIfcBoolean\t1\nPARAM\tbff2ef78-2dec-4825-a3f5-96319be5a460\tPset_RampCommon.Reference[Type]\tTEXT\t\t547\t1\tIfcIdentifier\t1\nPARAM\t92e61fdd-b7e6-4590-9db5-5b0375703e28\tPset_RampCommon.RequiredHeadroom[Type]\tLENGTH\t\t547\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t60a24627-09f5-4331-991e-49b7c07693ed\tPset_RampCommon.RequiredSlope[Type]\tNUMBER\t\t547\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tc8bdeee2-7b47-439b-b338-32647800fd77\tPset_RampCommon.Status[Type]\tTEXT\t\t547\t1\tPEnum_ElementStatus\t1\nPARAM\t74274abb-8e98-4fcb-b2fb-b87ce0d07fe6\tPset_RampCommon.ThermalTransmittance[Type]\tNUMBER\t\t547\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t548\tPset_RampFlightCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t79fa12ba-ef1f-4452-a8ee-f09058423cff\tPset_RampFlightCommon.ClearWidth[Type]\tLENGTH\t\t548\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfc75e3fa-d06b-4d0e-8da3-548953aa30cd\tPset_RampFlightCommon.CounterSlope[Type]\tNUMBER\t\t548\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t4db44c2a-257e-479a-bb37-0d62f453e4be\tPset_RampFlightCommon.Headroom[Type]\tLENGTH\t\t548\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb24cd08f-aa07-431e-8751-4d3a08a7a049\tPset_RampFlightCommon.Reference[Type]\tTEXT\t\t548\t1\tIfcIdentifier\t1\nPARAM\t6bae44cc-99e1-46a7-8f49-4dac72e073b3\tPset_RampFlightCommon.Slope[Type]\tNUMBER\t\t548\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t92344fc0-7827-4a8e-bd39-980d5da882fd\tPset_RampFlightCommon.Status[Type]\tTEXT\t\t548\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t549\tPset_ReferentCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td32e543e-4558-4ec5-9f7f-dba49e8beacd\tPset_ReferentCommon.NameFormat[Type]\tTEXT\t\t549\t1\tIfcLabel\t1\n#\nGROUP\t550\tPset_ReinforcementBarCountOfIndependentFooting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3261ec7a-83fa-4ce5-8bca-f1c8a951bd69\tPset_ReinforcementBarCountOfIndependentFooting.Description[Type]\tTEXT\t\t550\t1\tIfcText\t1\nPARAM\tab1c4950-a897-407d-ba2a-b86cb4f124c1\tPset_ReinforcementBarCountOfIndependentFooting.Reference[Type]\tTEXT\t\t550\t1\tIfcLabel\t1\nPARAM\taf79291f-d981-4c0c-afb0-a198a9d45aad\tPset_ReinforcementBarCountOfIndependentFooting.XDirectionLowerBarCount[Type]\tINTEGER\t\t550\t1\tIfcCountMeasure\t1\nPARAM\t934604e0-edfa-4712-928e-34c57743788c\tPset_ReinforcementBarCountOfIndependentFooting.XDirectionUpperBarCount[Type]\tINTEGER\t\t550\t1\tIfcCountMeasure\t1\nPARAM\tfd0cac58-bd63-48c6-ba09-8cd1def16740\tPset_ReinforcementBarCountOfIndependentFooting.YDirectionLowerBarCount[Type]\tINTEGER\t\t550\t1\tIfcCountMeasure\t1\nPARAM\t00bf0857-8ae7-4be9-9178-0a9736609884\tPset_ReinforcementBarCountOfIndependentFooting.YDirectionUpperBarCount[Type]\tINTEGER\t\t550\t1\tIfcCountMeasure\t1\n#\nGROUP\t551\tPset_ReinforcementBarPitchOfBeam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t38aa417d-b4e2-42b6-bca3-89962f7ad096\tPset_ReinforcementBarPitchOfBeam.Description[Type]\tTEXT\t\t551\t1\tIfcText\t1\nPARAM\t469b6e02-150a-4530-b564-b0139aed36d2\tPset_ReinforcementBarPitchOfBeam.Reference[Type]\tTEXT\t\t551\t1\tIfcLabel\t1\nPARAM\t71ddb0b6-3b9f-4345-8539-bc640ead1ea7\tPset_ReinforcementBarPitchOfBeam.SpacingBarPitch[Type]\tLENGTH\t\t551\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8c79b5fd-cd92-4942-b66a-48f27fa61201\tPset_ReinforcementBarPitchOfBeam.StirrupBarPitch[Type]\tLENGTH\t\t551\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t552\tPset_ReinforcementBarPitchOfColumn\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb52057fc-c156-494d-b703-8f7e6372c205\tPset_ReinforcementBarPitchOfColumn.Description[Type]\tTEXT\t\t552\t1\tIfcText\t1\nPARAM\t05037c74-bbba-4e74-a7d0-14e83b88655e\tPset_ReinforcementBarPitchOfColumn.HoopBarPitch[Type]\tLENGTH\t\t552\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t913782cf-2eb7-459b-9577-f4e5f837618c\tPset_ReinforcementBarPitchOfColumn.Reference[Type]\tTEXT\t\t552\t1\tIfcLabel\t1\nPARAM\tb881c478-74b0-45b8-bc51-8764827a165e\tPset_ReinforcementBarPitchOfColumn.ReinforcementBarType[Type]\tTEXT\t\t552\t1\tPEnum_ReinforcementBarType\t1\nPARAM\t208ef4a2-1a32-4286-9a18-f0bbe2bc9c35\tPset_ReinforcementBarPitchOfColumn.XDirectionTieHoopBarPitch[Type]\tLENGTH\t\t552\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td5e08881-beda-4094-8748-c0a5d9dff8c8\tPset_ReinforcementBarPitchOfColumn.XDirectionTieHoopCount[Type]\tINTEGER\t\t552\t1\tIfcCountMeasure\t1\nPARAM\tb9b084ca-29d8-4314-8695-f3c9e6c28ce8\tPset_ReinforcementBarPitchOfColumn.YDirectionTieHoopBarPitch[Type]\tLENGTH\t\t552\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfb4db327-839e-446a-9a9e-e2d58995e0f2\tPset_ReinforcementBarPitchOfColumn.YDirectionTieHoopCount[Type]\tINTEGER\t\t552\t1\tIfcCountMeasure\t1\n#\nGROUP\t553\tPset_ReinforcementBarPitchOfContinuousFooting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7c2b59ca-2c9d-45f1-a26e-dcd10f12bcf0\tPset_ReinforcementBarPitchOfContinuousFooting.CrossingLowerBarPitch[Type]\tLENGTH\t\t553\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbd921b71-a8d4-4271-b786-47480ee28457\tPset_ReinforcementBarPitchOfContinuousFooting.CrossingUpperBarPitch[Type]\tLENGTH\t\t553\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7cebfea2-cb7c-47e0-8efa-c4852e13e98d\tPset_ReinforcementBarPitchOfContinuousFooting.Description[Type]\tTEXT\t\t553\t1\tIfcText\t1\nPARAM\t466b709a-9a1d-4998-b8f6-adec1d18abb0\tPset_ReinforcementBarPitchOfContinuousFooting.Reference[Type]\tTEXT\t\t553\t1\tIfcLabel\t1\n#\nGROUP\t554\tPset_ReinforcementBarPitchOfSlab\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t829137fc-c4af-41d4-9a05-70b2512c5428\tPset_ReinforcementBarPitchOfSlab.Description[Type]\tTEXT\t\t554\t1\tIfcText\t1\nPARAM\t845075ed-0dd3-40eb-af76-e0919f2a96c6\tPset_ReinforcementBarPitchOfSlab.LongInsideCenterLowerBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1e50dab9-2d2b-41a6-b87c-0f9ee53b2158\tPset_ReinforcementBarPitchOfSlab.LongInsideCenterTopBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t54fbb039-12bf-4fab-9787-cd5203a2244f\tPset_ReinforcementBarPitchOfSlab.LongInsideEndLowerBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te27e20a9-df3d-4b22-bc16-fe53be3e5fa9\tPset_ReinforcementBarPitchOfSlab.LongInsideEndTopBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1d7b59e8-efb4-44c1-9a60-3ff53f624d6a\tPset_ReinforcementBarPitchOfSlab.LongOutsideLowerBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tebc49a4e-3c24-461e-8cda-f1d7da828cfe\tPset_ReinforcementBarPitchOfSlab.LongOutsideTopBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t69a1a9ec-6554-47c4-8781-f27c8a2394b6\tPset_ReinforcementBarPitchOfSlab.Reference[Type]\tTEXT\t\t554\t1\tIfcLabel\t1\nPARAM\te35fc565-0aca-418d-a05d-309a1340cd4a\tPset_ReinforcementBarPitchOfSlab.ShortInsideCenterLowerBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8617c18f-a50c-4419-8fdd-b0df60b50e05\tPset_ReinforcementBarPitchOfSlab.ShortInsideCenterTopBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tff71c967-2abc-4f3f-b342-9a0ebced48d9\tPset_ReinforcementBarPitchOfSlab.ShortInsideEndLowerBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te8787f07-8a1f-4c48-9402-b6dd1652f290\tPset_ReinforcementBarPitchOfSlab.ShortInsideEndTopBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te5a7a1e1-fefd-4e58-9534-4df61e56f8bd\tPset_ReinforcementBarPitchOfSlab.ShortOutsideLowerBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8beea3fb-8f43-4870-99c7-0625dbf44081\tPset_ReinforcementBarPitchOfSlab.ShortOutsideTopBarPitch[Type]\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t555\tPset_ReinforcementBarPitchOfWall\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8e98caa4-e1df-4ae7-81f3-1d370bf4158f\tPset_ReinforcementBarPitchOfWall.BarAllocationType[Type]\tTEXT\t\t555\t1\tPEnum_ReinforcementBarAllocationType\t1\nPARAM\tc296c40e-41ea-4d9c-ae9b-bb34c9817143\tPset_ReinforcementBarPitchOfWall.Description[Type]\tTEXT\t\t555\t1\tIfcText\t1\nPARAM\t9c207418-44cc-4ca0-bdbc-8c93e904f86a\tPset_ReinforcementBarPitchOfWall.HorizontalBarPitch[Type]\tLENGTH\t\t555\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t46e1dcdc-93ac-4da7-b468-e64875f04b9b\tPset_ReinforcementBarPitchOfWall.Reference[Type]\tTEXT\t\t555\t1\tIfcLabel\t1\nPARAM\t1003e8f4-db19-4a48-a9dc-557c2473d14a\tPset_ReinforcementBarPitchOfWall.SpacingBarPitch[Type]\tLENGTH\t\t555\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8c85fdea-c2f6-4725-a61e-b90c566a3914\tPset_ReinforcementBarPitchOfWall.VerticalBarPitch[Type]\tLENGTH\t\t555\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t556\tPset_ReinforcingBarBendingsBECCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tde816abc-80e6-4a65-9932-26c952aea739\tPset_ReinforcingBarBendingsBECCommon.BECBarShapeCode[Type]\tTEXT\t\t556\t1\tIfcLabel\t1\nPARAM\t86aee767-6fa3-431d-b52c-c6902461114f\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_u[Type]\tNUMBER\t\t556\t1\tIfcPlaneAngleMeasure\t1\nPARAM\teb2a101f-78d3-4813-9b1f-f4f0d606ad12\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_u1[Type]\tNUMBER\t\t556\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t541ff94b-e410-451a-8e53-2feeb730611d\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_v[Type]\tNUMBER\t\t556\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t1735fdad-f3a0-4223-a8cb-2744ab59fff2\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_v1[Type]\tNUMBER\t\t556\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t0148aa14-a6ad-44c7-b8f0-2764cce27357\tPset_ReinforcingBarBendingsBECCommon.BECCuttingLength[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t099d570d-fef2-4c85-b0be-eff83d9f5329\tPset_ReinforcingBarBendingsBECCommon.BECRollerDiameter[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbfafc65b-a470-428c-a3cc-9a9f5ecdaf9b\tPset_ReinforcingBarBendingsBECCommon.BECShapeAid_x[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t378c3137-85d5-412b-b00c-617eb5de2eb5\tPset_ReinforcingBarBendingsBECCommon.BECShapeAid_y[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t67bf3131-6cb9-46ce-a401-ac7a7a06bde8\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_a[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td21da65f-c595-4cbf-8249-9e98ae33ef59\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_b[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te7e8ffb7-8b31-4b72-9c5f-f91d37d3172b\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_c[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf5150966-f3e9-4adb-9e10-9175f09c1260\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_d[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t40babf12-b770-4361-9fce-132d045064e5\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_e[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te4fdc474-4d00-4fef-a6c8-8e7b27e282df\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_f[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2ed0c347-228f-44e4-aa86-5c0611689fd6\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_g[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taae9e9e9-f055-4c4b-9433-979540171116\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_h[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb7b0f2b7-ce37-48ce-99c8-867ec6ea07cf\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_i[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5272c983-c88d-49a5-9b79-b59193436a99\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_j[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\teffb5fda-90b5-42c4-a7c8-7f79a46de871\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_k[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4a43eaaa-fbe4-42e7-99c6-bc0e9b1bcc8b\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_l[Type]\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t557\tPset_ReinforcingBarBendingsBS8666Common\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9baa084c-b612-453c-99a6-9a090df0274b\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeCode[Type]\tTEXT\t\t557\t1\tIfcLabel\t1\nPARAM\t20013a60-1cbd-43d2-9b7d-3a1cf3f573c3\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_A[Type]\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tad1c9a8e-6c19-429b-954d-d31e711a351d\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_B[Type]\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2d160f4e-7715-4476-85cd-a5185c1d60ec\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_C[Type]\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t44cf6be8-047c-4147-a705-c8a8cc9e3a8e\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_D[Type]\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tae17b04a-5c8d-4d2e-a1da-8da840125c73\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_E[Type]\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4e24fffd-809c-42ce-a7cc-ac297528c218\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_r[Type]\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t558\tPset_ReinforcingBarBendingsDIN135610Common\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb5411a39-69ac-46f1-ac98-898dd2abc08a\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeCode[Type]\tTEXT\t\t558\t1\tIfcLabel\t1\nPARAM\t411e58b7-0e47-4dcb-8c83-404545bdce10\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_a[Type]\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4c8b5a2f-1263-4390-a4f2-ed654632d242\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_b[Type]\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t96181f29-fca1-41ec-9bcc-6626d9050b92\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_c[Type]\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1ef86d43-81e6-41d0-8ad0-2de2d8016285\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_d[Type]\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5fc5f705-27c0-40e0-9fc4-6e5d7dd3b63e\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_e[Type]\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tefc2b327-9329-40cb-a499-6a1fe6392854\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_z[Type]\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t559\tPset_ReinforcingBarBendingsISOCD3766Common\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4fb5bdc5-bd07-4bf2-8e64-dc2a367eb735\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766BendingEndHook[Type]\tNUMBER\t\t559\t1\tIfcPlaneAngleMeasure\t1\nPARAM\te6df0a2d-8b6c-40ec-b789-bf1445e2359e\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766BendingStartHook[Type]\tNUMBER\t\t559\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t03566146-bf19-41d5-9ea3-d44796be04f4\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeCode[Type]\tTEXT\t\t559\t1\tIfcLabel\t1\nPARAM\t92cddafd-d2a7-415a-8b50-93512c92ec39\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_a[Type]\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc3e6ae42-eb65-427e-ac3d-8af68b03e1ef\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_b[Type]\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te4f82417-68ab-4e47-a41d-4123db03dbb8\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_c[Type]\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbf21e93e-5f91-49ba-97a0-777fef09bf8f\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_d[Type]\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0fd01c2a-2779-4592-89dd-1b0fa503f404\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_e[Type]\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tac8535f2-c15c-46b4-9bc6-46a0dbcbcfd7\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_R[Type]\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t560\tPset_ReinforcingBarCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb081745c-17dc-4ec0-864f-fdf78d3f862a\tPset_ReinforcingBarCommon.BarLength[Type]\tLENGTH\t\t560\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t76aa8484-02de-44cf-b522-58348696a50e\tPset_ReinforcingBarCommon.BarSpacing[Type]\tLENGTH\t\t560\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t51d7a024-1667-4404-82b0-71823dae15ce\tPset_ReinforcingBarCommon.BarSurface[Type]\tTEXT\t\t560\t1\tPEnum_ReinforcementBarSurface\t1\nPARAM\tc3e39248-f02b-4098-b442-c65b93813cea\tPset_ReinforcingBarCommon.BendingParameters[Type]\tMULTILINETEXT\t\t560\t1\tPropertyListValue\t1\nPARAM\t8aab05ee-f5c4-4a6a-9c6e-94bc02f92842\tPset_ReinforcingBarCommon.BendingShapeCode[Type]\tTEXT\t\t560\t1\tIfcIdentifier\t1\nPARAM\t3dbacc0c-1458-40b8-846b-aaf35a85cc52\tPset_ReinforcingBarCommon.NominalDiameter[Type]\tLENGTH\t\t560\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6ea49cdf-8ed2-4967-87f0-cbfd79e6d8bf\tPset_ReinforcingBarCommon.Reference[Type]\tTEXT\t\t560\t1\tIfcIdentifier\t1\nPARAM\t2a6f57f5-3322-446b-9ba4-a66f2974bfcf\tPset_ReinforcingBarCommon.Status[Type]\tTEXT\t\t560\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t561\tPset_ReinforcingMeshCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbab8fe39-de95-4c68-804c-2ff8f576c6d9\tPset_ReinforcingMeshCommon.LongitudinalBarBendingParameters[Type]\tMULTILINETEXT\t\t561\t1\tPropertyListValue\t1\nPARAM\t0f950d38-9168-4f0c-9cc7-80a57a0a35cf\tPset_ReinforcingMeshCommon.LongitudinalBarBendingShapeCode[Type]\tTEXT\t\t561\t1\tIfcIdentifier\t1\nPARAM\t41b5021c-9fa7-4ce9-b746-2a6bbbb2b00e\tPset_ReinforcingMeshCommon.LongitudinalBarNominalDiameter[Type]\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0d636a12-2b3d-4ea9-b1d7-9ed230e6d9c2\tPset_ReinforcingMeshCommon.LongitudinalBarSpacing[Type]\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb289fed4-cb81-43a6-b9fd-99462d15a1e0\tPset_ReinforcingMeshCommon.LongitudinalBarSurface[Type]\tTEXT\t\t561\t1\tPEnum_ReinforcementBarSurface\t1\nPARAM\tbdd699b5-9de8-49c5-b54b-7bad4be2c853\tPset_ReinforcingMeshCommon.MeshLength[Type]\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tec8b4033-d07e-4c3b-baf2-a086ac276f1d\tPset_ReinforcingMeshCommon.MeshWidth[Type]\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8cd67926-8e8f-437d-92c8-85171618806a\tPset_ReinforcingMeshCommon.Reference[Type]\tTEXT\t\t561\t1\tIfcIdentifier\t1\nPARAM\ta6e5aa51-84e9-429f-b5cd-dd895e3c41cb\tPset_ReinforcingMeshCommon.Status[Type]\tTEXT\t\t561\t1\tPEnum_ElementStatus\t1\nPARAM\t4aab5d32-759d-4019-a1d8-a617d4a1e8da\tPset_ReinforcingMeshCommon.TransverseBarBendingParameters[Type]\tMULTILINETEXT\t\t561\t1\tPropertyListValue\t1\nPARAM\t8f0e49f7-ab5c-42e1-a96a-88c3871c91a2\tPset_ReinforcingMeshCommon.TransverseBarBendingShapeCode[Type]\tTEXT\t\t561\t1\tIfcIdentifier\t1\nPARAM\t75e8a387-c32e-4eb0-8f35-d94b6afc1c81\tPset_ReinforcingMeshCommon.TransverseBarNominalDiameter[Type]\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t47fcbf63-1f08-4bc8-abc5-1bc825f7d2f3\tPset_ReinforcingMeshCommon.TransverseBarSpacing[Type]\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0a9177f1-880d-4e39-8616-265eaaa13d77\tPset_ReinforcingMeshCommon.TransverseBarSurface[Type]\tTEXT\t\t561\t1\tPEnum_ReinforcementBarSurface\t1\n#\nGROUP\t562\tPset_Reliability\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e97ae6f-ea04-4e77-8e1e-81d4431df6b3\tPset_Reliability.MeanTimeBetweenFailure[Type]\tNUMBER\t\t562\t1\tIfcTimeMeasure\t1\n#\nGROUP\t563\tPset_RepairOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3b779ace-9581-48c4-930d-deb51dc74e2d\tPset_RepairOccurrence.MeanTimeToRepair[Type]\tNUMBER\t\t563\t1\tIfcTimeMeasure\t1\nPARAM\tef693a0f-f37b-48ae-828b-a630f2a44a72\tPset_RepairOccurrence.RepairContent[Type]\tTEXT\t\t563\t1\tIfcText\t1\nPARAM\t116bbbeb-eda7-48b0-b902-7e573e9bff5c\tPset_RepairOccurrence.RepairDate[Type]\tTEXT\t\t563\t1\tIfcDate\t1\n#\nGROUP\t564\tPset_RevetmentCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t60a6c0b3-1e98-4ca7-b83e-06bb3cb5301a\tPset_RevetmentCommon.Elevation[Type]\tLENGTH\t\t564\t1\tIfcLengthMeasure\t1\nPARAM\t99a1884f-23f1-4be1-84db-dab334cabdee\tPset_RevetmentCommon.StructuralType[Type]\tTEXT\t\t564\t1\tIfcLabel\t1\n#\nGROUP\t565\tPset_Risk\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbac2767b-e09e-48a9-99b3-96fe49fe454c\tPset_Risk.AffectsSurroundings[Type]\tYESNO\t\t565\t1\tIfcBoolean\t1\nPARAM\t93139b78-491d-4bc0-9714-1f12b0dbeb37\tPset_Risk.AssessmentOfRisk[Type]\tTEXT\t\t565\t1\tPEnum_RiskAssessment\t1\nPARAM\tef37837e-354a-4c11-b7ff-b0b317c7bfb1\tPset_Risk.AssociatedActivity[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t1ef2b8a8-c350-47a9-8f0f-15edf5ed6ac1\tPset_Risk.AssociatedLocation[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t974847da-d71b-4a3f-ab53-f273f6d6b847\tPset_Risk.AssociatedProduct[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t678b7f59-2ade-448b-9d14-516b36dec909\tPset_Risk.MitigatedRiskConsequence[Type]\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\nPARAM\tf2d4f51b-525a-4c94-8eb6-028a68686414\tPset_Risk.MitigatedRiskLikelihood[Type]\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\nPARAM\t39f4f69e-156f-45f7-88a9-88ba976ec338\tPset_Risk.MitigatedRiskSignificance[Type]\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\nPARAM\t9fec7803-6fdc-47e8-a8bc-ab4443169bbe\tPset_Risk.MitigationPlanned[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t2636defa-dd09-4768-a77c-76a26ec66047\tPset_Risk.MitigationProposed[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t3779624c-d183-4b7f-995c-8687d72854ac\tPset_Risk.NatureOfRisk[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t7a20541e-c7d1-4785-928a-59fb74d236a5\tPset_Risk.PreventiveMeassures[Type]\tMULTILINETEXT\t\t565\t1\tPropertyListValue\t1\nPARAM\t18336058-00d5-46aa-a3d8-04f0ae89fa68\tPset_Risk.RiskAssessmentMethodology[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t068a9057-914e-4b7f-9738-47bbd17a88fc\tPset_Risk.RiskCause[Type]\tTEXT\t\t565\t1\tIfcText\t1\nPARAM\t1466c45e-369d-4e23-999d-e447ada7e440\tPset_Risk.RiskConsequence[Type]\tTEXT\t\t565\t1\tPEnum_RiskConsequence\t1\nPARAM\t7e9703e5-91f5-47c1-a2d4-4cf88ed16340\tPset_Risk.RiskName[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t1d4c3366-2d8c-4035-9b55-d918080f3bb4\tPset_Risk.RiskOwner[Type]\tTEXT\t\t565\t1\tPEnum_RiskOwner\t1\nPARAM\t4a7ff14f-5b2e-4fc5-95d6-0decf3d36172\tPset_Risk.RiskRating[Type]\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\nPARAM\t17e6bbe2-735a-4f74-abdf-ac8ac50edcfe\tPset_Risk.RiskType[Type]\tTEXT\t\t565\t1\tPEnum_RiskType\t1\nPARAM\tc7e038f9-1bfe-496f-a80e-b7f28511b562\tPset_Risk.SubNatureOfRisk1[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t7216818c-d76e-4931-a327-97d7109d37d0\tPset_Risk.SubNatureOfRisk2[Type]\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t356710fa-34eb-4e7b-8a3f-9e758dd65e90\tPset_Risk.UnmitigatedRiskConsequence[Type]\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\nPARAM\tb28cfa9c-e019-4079-9b09-670a7bd2ac65\tPset_Risk.UnmitigatedRiskLikelihood[Type]\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\nPARAM\tce4f9fef-0450-47ef-8ebf-442e7dec19ba\tPset_Risk.UnmitigatedRiskSignificance[Type]\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\n#\nGROUP\t566\tPset_RoadDesignCriteriaCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t75b97898-9b33-4213-abd5-fc7841252795\tPset_RoadDesignCriteriaCommon.Crossfall[Type]\tNUMBER\t\t566\t1\tIfcRatioMeasure\t1\nPARAM\tfdfac39b-0c06-4836-a296-5906b37361de\tPset_RoadDesignCriteriaCommon.DesignSpeed[Type]\tNUMBER\t\t566\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tbf853ff4-c22a-4920-a1d3-019fc29cd824\tPset_RoadDesignCriteriaCommon.DesignTrafficVolume[Type]\tINTEGER\t\t566\t1\tIfcCountMeasure\t1\nPARAM\t75ade5ac-389e-4801-8ac6-73481151ad72\tPset_RoadDesignCriteriaCommon.DesignVehicleClass[Type]\tTEXT\t\t566\t1\tIfcLabel\t1\nPARAM\t6cc84c8a-28d1-43bb-b386-4eb24786fdc3\tPset_RoadDesignCriteriaCommon.LaneWidth[Type]\tLENGTH\t\t566\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t23e3c365-ed81-41a7-9613-0d9a0c7e9022\tPset_RoadDesignCriteriaCommon.NumberOfThroughLanes[Type]\tINTEGER\t\t566\t1\tIfcCountMeasure\t1\nPARAM\t2e9fddc5-d345-4bb9-b8da-dbcb9f0b5a0d\tPset_RoadDesignCriteriaCommon.RoadDesignClass[Type]\tTEXT\t\t566\t1\tIfcLabel\t1\n#\nGROUP\t567\tPset_RoadGuardElement\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6beb1130-fb18-44cf-9ccc-f3cb0ceffc3d\tPset_RoadGuardElement.IsMoveable[Type]\tYESNO\t\t567\t1\tIfcBoolean\t1\nPARAM\t609ce0d6-7d39-49b0-85cc-a236d6ffc93c\tPset_RoadGuardElement.IsTerminal[Type]\tYESNO\t\t567\t1\tIfcBoolean\t1\nPARAM\t9d004cd5-9024-4572-a0a5-4c575d2dcd83\tPset_RoadGuardElement.IsTransition[Type]\tYESNO\t\t567\t1\tIfcBoolean\t1\nPARAM\ta3c67aec-f0cc-4f98-b322-9c799bc7a274\tPset_RoadGuardElement.TerminalType[Type]\tTEXT\t\t567\t1\tIfcLabel\t1\n#\nGROUP\t568\tPset_RoadMarkingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3fbaec55-77e0-4f86-988f-e156f510349b\tPset_RoadMarkingCommon.ApplicationMethod[Type]\tTEXT\t\t568\t1\tIfcText\t1\nPARAM\tbb5b5e71-9075-42fd-b0f0-faf494816442\tPset_RoadMarkingCommon.DiagramNumber[Type]\tTEXT\t\t568\t1\tIfcLabel\t1\nPARAM\t972098b3-9f5a-429f-a2c8-7b3ee086787d\tPset_RoadMarkingCommon.MaterialColour[Type]\tTEXT\t\t568\t1\tIfcLabel\t1\nPARAM\t327820a1-28b2-4096-b1c3-e0308284fc94\tPset_RoadMarkingCommon.MaterialThickness[Type]\tLENGTH\t\t568\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td109a0fa-1aa3-40d0-89d1-8fcd54cfb757\tPset_RoadMarkingCommon.MaterialType[Type]\tTEXT\t\t568\t1\tIfcLabel\t1\nPARAM\t2fc43eba-d8d0-41d8-98c7-76a0b7067302\tPset_RoadMarkingCommon.Structure[Type]\tTEXT\t\t568\t1\tIfcLabel\t1\n#\nGROUP\t569\tPset_RoadSymbolsCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e18f9a4-61d2-425e-a9c5-cf99a28a3cb7\tPset_RoadSymbolsCommon.Text[Type]\tTEXT\t\t569\t1\tIfcText\t1\nPARAM\t1c81276d-a319-4e69-bf52-a6b1f967e11d\tPset_RoadSymbolsCommon.TypeDesignation[Type]\tTEXT\t\t569\t1\tIfcLabel\t1\n#\nGROUP\t570\tPset_RoofCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a595b49-e06f-4c08-b53c-375b05212e42\tPset_RoofCommon.AcousticRating[Type]\tTEXT\t\t570\t1\tIfcLabel\t1\nPARAM\td7911daf-6747-4b19-82fa-0e5413e82331\tPset_RoofCommon.FireRating[Type]\tTEXT\t\t570\t1\tIfcLabel\t1\nPARAM\t8703b896-eb7c-4c61-a6d1-e0033ebfe295\tPset_RoofCommon.IsExternal[Type]\tYESNO\t\t570\t1\tIfcBoolean\t1\nPARAM\ta6e5d3b0-7b52-4877-8622-5d5a0af907d6\tPset_RoofCommon.LoadBearing[Type]\tYESNO\t\t570\t1\tIfcBoolean\t1\nPARAM\t16b7c8c2-c00b-4550-9cad-ef50a7e34fbb\tPset_RoofCommon.ProjectedArea[Type]\tAREA\t\t570\t1\tIfcAreaMeasure\t1\nPARAM\t80861848-8a93-4627-8838-0b90df8e25a0\tPset_RoofCommon.Reference[Type]\tTEXT\t\t570\t1\tIfcIdentifier\t1\nPARAM\t543f3674-dc50-47fe-9821-ec15172ae7a0\tPset_RoofCommon.Status[Type]\tTEXT\t\t570\t1\tPEnum_ElementStatus\t1\nPARAM\tb236629c-ec67-475c-8f2d-85694b6b07ce\tPset_RoofCommon.ThermalTransmittance[Type]\tNUMBER\t\t570\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t27b0591d-db00-47d2-b9c3-8cf980406f14\tPset_RoofCommon.TotalArea[Type]\tAREA\t\t570\t1\tIfcAreaMeasure\t1\n#\nGROUP\t571\tPset_SanitaryTerminalTypeBath\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8092642d-0179-4a44-94ac-1a4651383324\tPset_SanitaryTerminalTypeBath.BathType[Type]\tTEXT\t\t571\t1\tPEnum_BathType\t1\nPARAM\tb3ff369e-3d26-4719-931a-aa85d6cd36de\tPset_SanitaryTerminalTypeBath.Color[Type]\tTEXT\t\t571\t1\tIfcText\t1\nPARAM\t09f621bf-a438-4f29-9e6c-be76c1579b99\tPset_SanitaryTerminalTypeBath.DrainSize[Type]\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfc821dbe-6d83-4a22-bf83-216c265a5148\tPset_SanitaryTerminalTypeBath.HasGrabHandles[Type]\tYESNO\t\t571\t1\tIfcBoolean\t1\nPARAM\tee57aad3-94e8-4ff5-b7c2-1f29003b600b\tPset_SanitaryTerminalTypeBath.Material[Type]\tMULTILINETEXT\t\t571\t1\tIfcMaterial\t1\nPARAM\t0f34f2d5-9f85-45c3-8ff3-62018c5c1a30\tPset_SanitaryTerminalTypeBath.MaterialThickness[Type]\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t15913d19-c023-48ca-ae82-c14fabc94378\tPset_SanitaryTerminalTypeBath.NominalDepth[Type]\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t72781b66-45c3-488f-8708-dd13c82eed4d\tPset_SanitaryTerminalTypeBath.NominalLength[Type]\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tce55be63-4bd6-4864-ae0d-05a4d9309e76\tPset_SanitaryTerminalTypeBath.NominalWidth[Type]\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t572\tPset_SanitaryTerminalTypeBidet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta6c0f234-e41d-420a-843f-17ba70105dff\tPset_SanitaryTerminalTypeBidet.BidetMounting[Type]\tTEXT\t\t572\t1\tPEnum_SanitaryMounting\t1\nPARAM\t3627950e-e072-49b2-a015-07de2c1b0c04\tPset_SanitaryTerminalTypeBidet.Color[Type]\tTEXT\t\t572\t1\tIfcText\t1\nPARAM\tcbe4dfad-ef9e-476d-bc41-58eceec42299\tPset_SanitaryTerminalTypeBidet.DrainSize[Type]\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\nPARAM\teb95d1e3-bd0e-4215-8a8c-5ba23f769215\tPset_SanitaryTerminalTypeBidet.Material[Type]\tMULTILINETEXT\t\t572\t1\tIfcMaterial\t1\nPARAM\tdb55e7c0-82de-4345-ac3f-3c1e76d809d4\tPset_SanitaryTerminalTypeBidet.Mounting[Type]\tTEXT\t\t572\t1\tPEnum_SanitaryMounting\t1\nPARAM\t600ea7d1-2ecd-47e2-a13c-13160eb480e7\tPset_SanitaryTerminalTypeBidet.NominalDepth[Type]\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\nPARAM\teb0518f0-dc0c-42f6-8683-961fa012f9ba\tPset_SanitaryTerminalTypeBidet.NominalLength[Type]\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5c19df1a-bc4b-4c73-ab17-4488423d5f74\tPset_SanitaryTerminalTypeBidet.NominalWidth[Type]\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t51dd42a4-1de3-4ea7-a7d8-cb9db72bed21\tPset_SanitaryTerminalTypeBidet.SpilloverLevel[Type]\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t573\tPset_SanitaryTerminalTypeCistern\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t75baa59b-dde4-408c-bf6a-28705e60912c\tPset_SanitaryTerminalTypeCistern.CisternCapacity[Type]\tVOLUME\t\t573\t1\tIfcVolumeMeasure\t1\nPARAM\t1a615ca9-9de5-4d75-9e4b-0f1b9a45525c\tPset_SanitaryTerminalTypeCistern.CisternColor[Type]\tTEXT\t\t573\t1\tIfcText\t1\nPARAM\tcbeadc71-ed25-48ac-85aa-f633dafc5812\tPset_SanitaryTerminalTypeCistern.CisternHeight[Type]\tTEXT\t\t573\t1\tPEnum_CisternHeight\t1\nPARAM\t94269651-f5bd-4318-971d-66cc0e73bc00\tPset_SanitaryTerminalTypeCistern.CisternMaterial[Type]\tMULTILINETEXT\t\t573\t1\tIfcMaterial\t1\nPARAM\t51207e56-da38-48ec-8369-03c20df5eb32\tPset_SanitaryTerminalTypeCistern.FlushRate[Type]\tMULTILINETEXT\t\t573\t1\tPropertyBoundedValue\t1\nPARAM\t38ec9e7a-f2b4-4d75-b626-959ce609f0d0\tPset_SanitaryTerminalTypeCistern.FlushType[Type]\tTEXT\t\t573\t1\tPEnum_FlushType\t1\nPARAM\tb577092f-b466-4932-be03-95eb4a3b4b24\tPset_SanitaryTerminalTypeCistern.IsAutomaticFlush[Type]\tYESNO\t\t573\t1\tIfcBoolean\t1\nPARAM\t355e20c8-d8c1-4af3-80d9-ce4a2912bbdd\tPset_SanitaryTerminalTypeCistern.IsSingleFlush[Type]\tYESNO\t\t573\t1\tIfcBoolean\t1\n#\nGROUP\t574\tPset_SanitaryTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t19a4740e-edef-4449-93ae-03044b8d43d2\tPset_SanitaryTerminalTypeCommon.Color[Type]\tTEXT\t\t574\t1\tIfcLabel\t1\nPARAM\t71f8f19a-da09-4070-95cb-edd30642c823\tPset_SanitaryTerminalTypeCommon.Colour[Type]\tTEXT\t\t574\t1\tIfcLabel\t1\nPARAM\t08a460f7-fc3e-4070-b57b-de3474f334bb\tPset_SanitaryTerminalTypeCommon.NominalDepth[Type]\tLENGTH\t\t574\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t7b163335-1ea9-46d3-8686-aa5550499019\tPset_SanitaryTerminalTypeCommon.NominalLength[Type]\tLENGTH\t\t574\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tedce9346-a803-4e2a-b331-9d79f37c56ab\tPset_SanitaryTerminalTypeCommon.NominalWidth[Type]\tLENGTH\t\t574\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t763828c6-ac5c-4ed2-b8e3-010b06a7f3d0\tPset_SanitaryTerminalTypeCommon.Reference[Type]\tTEXT\t\t574\t1\tIfcIdentifier\t1\nPARAM\t453d52db-b522-429c-b3a5-e96bc5244c4d\tPset_SanitaryTerminalTypeCommon.Status[Type]\tTEXT\t\t574\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t575\tPset_SanitaryTerminalTypeSanitaryFountain\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t73873c18-1158-43ee-8440-a20e0a70dddf\tPset_SanitaryTerminalTypeSanitaryFountain.Color[Type]\tTEXT\t\t575\t1\tIfcText\t1\nPARAM\t208d6005-7f3b-4f0c-a56e-b7e60d087a89\tPset_SanitaryTerminalTypeSanitaryFountain.DrainSize[Type]\tLENGTH\t\t575\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te50baf80-e541-4368-9540-2d35b4052546\tPset_SanitaryTerminalTypeSanitaryFountain.FountainType[Type]\tTEXT\t\t575\t1\tPEnum_FountainType\t1\nPARAM\tbed52ad1-4c0e-40a1-ba8b-05733247e9a5\tPset_SanitaryTerminalTypeSanitaryFountain.Material[Type]\tMULTILINETEXT\t\t575\t1\tIfcMaterial\t1\nPARAM\t42340b59-dff6-44b0-a0d8-daf5b5392d9a\tPset_SanitaryTerminalTypeSanitaryFountain.Mounting[Type]\tTEXT\t\t575\t1\tPEnum_SanitaryMounting\t1\nPARAM\t02529a8e-8fb1-40fb-abea-a08a618d1838\tPset_SanitaryTerminalTypeSanitaryFountain.NominalDepth[Type]\tLENGTH\t\t575\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t374f76bd-c798-4f53-9b39-5dac49197d33\tPset_SanitaryTerminalTypeSanitaryFountain.NominalLength[Type]\tLENGTH\t\t575\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t70567b4f-a862-4a53-bfb6-6491054af5e7\tPset_SanitaryTerminalTypeSanitaryFountain.NominalWidth[Type]\tLENGTH\t\t575\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t576\tPset_SanitaryTerminalTypeShower\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6ce5d3e9-f924-4c72-b000-7c517bb54452\tPset_SanitaryTerminalTypeShower.Color[Type]\tTEXT\t\t576\t1\tIfcText\t1\nPARAM\t38e489d8-a32d-4170-811a-d75b8a385c38\tPset_SanitaryTerminalTypeShower.DrainSize[Type]\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0338d007-3b68-4868-a4ec-c5ff5ca6bcb3\tPset_SanitaryTerminalTypeShower.HasTray[Type]\tYESNO\t\t576\t1\tIfcBoolean\t1\nPARAM\tf46ee86c-7a0f-479b-a0ed-3497c0249161\tPset_SanitaryTerminalTypeShower.Material[Type]\tMULTILINETEXT\t\t576\t1\tIfcMaterial\t1\nPARAM\t154aa5cd-d7cf-47c4-aa2a-b46fbb17812b\tPset_SanitaryTerminalTypeShower.MaterialThickness[Type]\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t30fac85f-b159-4b61-91c0-ae69171114cd\tPset_SanitaryTerminalTypeShower.NominalDepth[Type]\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5c08b270-0549-4020-b861-e5125d0459d1\tPset_SanitaryTerminalTypeShower.NominalLength[Type]\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf0bcfaaf-3a1b-40ab-9102-0ebcfe77516e\tPset_SanitaryTerminalTypeShower.NominalWidth[Type]\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0c79eaee-737e-4487-828c-fb4e7f6cac3a\tPset_SanitaryTerminalTypeShower.ShowerHeadDescription[Type]\tTEXT\t\t576\t1\tIfcText\t1\nPARAM\tdb1b13eb-afdd-448c-bbc4-8db87f1396e5\tPset_SanitaryTerminalTypeShower.ShowerType[Type]\tTEXT\t\t576\t1\tPEnum_ShowerType\t1\n#\nGROUP\t577\tPset_SanitaryTerminalTypeSink\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t49398c2b-c9a6-4db9-b8e8-ddd643919788\tPset_SanitaryTerminalTypeSink.Color[Type]\tTEXT\t\t577\t1\tIfcLabel\t1\nPARAM\t6147486b-bc05-4047-a88a-b3a71309864c\tPset_SanitaryTerminalTypeSink.Colour[Type]\tTEXT\t\t577\t1\tIfcLabel\t1\nPARAM\t50d8eb51-65f5-4fa2-844b-7c4d6dc32f08\tPset_SanitaryTerminalTypeSink.DrainSize[Type]\tLENGTH\t\t577\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t13430bcc-9060-41c0-9b15-dedbd3e80958\tPset_SanitaryTerminalTypeSink.Material[Type]\tMULTILINETEXT\t\t577\t1\tIfcMaterial\t1\nPARAM\tcbffe66a-d76b-4794-903e-ec83bcc7c0a1\tPset_SanitaryTerminalTypeSink.Mounting[Type]\tTEXT\t\t577\t1\tPEnum_SanitaryMounting\t1\nPARAM\t703de863-bcf6-4367-bcd0-7b8d96141e8a\tPset_SanitaryTerminalTypeSink.MountingOffset[Type]\tLENGTH\t\t577\t1\tIfcLengthMeasure\t1\nPARAM\t06a13306-5391-4d00-aa4f-a6a8607b9416\tPset_SanitaryTerminalTypeSink.NominalDepth[Type]\tLENGTH\t\t577\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te29033cb-e043-4593-851f-a2e1c2400cf5\tPset_SanitaryTerminalTypeSink.NominalLength[Type]\tLENGTH\t\t577\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2beee2c5-37da-44b6-9574-6b590eb93146\tPset_SanitaryTerminalTypeSink.NominalWidth[Type]\tLENGTH\t\t577\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3b5d0135-e0ff-4b3c-8dda-8e4fe50b60dc\tPset_SanitaryTerminalTypeSink.SinkMounting[Type]\tTEXT\t\t577\t1\tPEnum_SanitaryMounting\t1\nPARAM\t5dbb5f3a-930a-41c3-b526-7df970563223\tPset_SanitaryTerminalTypeSink.SinkType[Type]\tTEXT\t\t577\t1\tPEnum_SinkType\t1\n#\nGROUP\t578\tPset_SanitaryTerminalTypeToiletPan\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t636bdcc1-4bde-4852-9ed7-8e9f1d5a70a9\tPset_SanitaryTerminalTypeToiletPan.NominalDepth[Type]\tLENGTH\t\t578\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2203d8e6-373f-4c36-b5b1-a77b7dda8986\tPset_SanitaryTerminalTypeToiletPan.NominalLength[Type]\tLENGTH\t\t578\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb56e6ee8-3802-4edb-b24e-1942246a6d2a\tPset_SanitaryTerminalTypeToiletPan.NominalWidth[Type]\tLENGTH\t\t578\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32cddce0-3ea6-4456-b571-6b6dcae4fcf3\tPset_SanitaryTerminalTypeToiletPan.PanColor[Type]\tTEXT\t\t578\t1\tIfcText\t1\nPARAM\t0d75ae7d-e2d1-40c7-b130-162584a944ee\tPset_SanitaryTerminalTypeToiletPan.PanMaterial[Type]\tMULTILINETEXT\t\t578\t1\tIfcMaterial\t1\nPARAM\t3a6fe297-1169-4236-96d7-a323ac5406fc\tPset_SanitaryTerminalTypeToiletPan.PanMounting[Type]\tTEXT\t\t578\t1\tPEnum_SanitaryMounting\t1\nPARAM\t3fdb0cd2-93ee-4c74-a6b2-f564cb76c935\tPset_SanitaryTerminalTypeToiletPan.SpilloverLevel[Type]\tLENGTH\t\t578\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t47dc59d7-984d-4706-8a73-02e21cda48e9\tPset_SanitaryTerminalTypeToiletPan.ToiletPanType[Type]\tTEXT\t\t578\t1\tPEnum_ToiletPanType\t1\nPARAM\t07cd9ef2-4df4-46be-be02-249ac5d29a06\tPset_SanitaryTerminalTypeToiletPan.ToiletType[Type]\tTEXT\t\t578\t1\tPEnum_ToiletType\t1\n#\nGROUP\t579\tPset_SanitaryTerminalTypeUrinal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9bd974e5-1269-4b7e-9977-80493cbe3357\tPset_SanitaryTerminalTypeUrinal.Mounting[Type]\tTEXT\t\t579\t1\tPEnum_SanitaryMounting\t1\nPARAM\t182559e1-a30f-4eeb-8f1a-7ed1839c73b8\tPset_SanitaryTerminalTypeUrinal.NominalDepth[Type]\tLENGTH\t\t579\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t314afbac-ebb8-44fb-8600-8ab42a62e401\tPset_SanitaryTerminalTypeUrinal.NominalLength[Type]\tLENGTH\t\t579\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1afae4c6-6fa1-49a3-a5bd-a8e39e74bb4c\tPset_SanitaryTerminalTypeUrinal.NominalWidth[Type]\tLENGTH\t\t579\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0da973c3-1b96-4503-9aac-433a45f77d49\tPset_SanitaryTerminalTypeUrinal.SpilloverLevel[Type]\tLENGTH\t\t579\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t42528377-43d6-40b0-89d8-ab67f319c686\tPset_SanitaryTerminalTypeUrinal.UrinalColor[Type]\tTEXT\t\t579\t1\tIfcText\t1\nPARAM\t1a0dca9e-bc97-428c-a9fa-4051c15c4ac2\tPset_SanitaryTerminalTypeUrinal.UrinalMaterial[Type]\tMULTILINETEXT\t\t579\t1\tIfcMaterial\t1\nPARAM\t7ee0f224-eaf5-4c81-b7dd-60ba2068e698\tPset_SanitaryTerminalTypeUrinal.UrinalType[Type]\tTEXT\t\t579\t1\tPEnum_UrinalType\t1\n#\nGROUP\t580\tPset_SanitaryTerminalTypeWashHandBasin\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7b1bb37c-260f-4880-9212-2114d813e9cf\tPset_SanitaryTerminalTypeWashHandBasin.Color[Type]\tTEXT\t\t580\t1\tIfcText\t1\nPARAM\t0a3d4d0a-897b-4e81-b334-302fbcbfe423\tPset_SanitaryTerminalTypeWashHandBasin.DrainSize[Type]\tLENGTH\t\t580\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0264b39e-d41b-4786-b35f-5f40c9d5e13a\tPset_SanitaryTerminalTypeWashHandBasin.Material[Type]\tMULTILINETEXT\t\t580\t1\tIfcMaterial\t1\nPARAM\t37f7b289-8f2b-45a7-85f3-eae10d61d1c6\tPset_SanitaryTerminalTypeWashHandBasin.Mounting[Type]\tTEXT\t\t580\t1\tPEnum_SanitaryMounting\t1\nPARAM\tabea7f34-9973-4c25-b501-848a717bcbba\tPset_SanitaryTerminalTypeWashHandBasin.MountingOffset[Type]\tLENGTH\t\t580\t1\tIfcLengthMeasure\t1\nPARAM\tf85c7f42-1af5-439a-bc46-38fb0ef36c38\tPset_SanitaryTerminalTypeWashHandBasin.NominalDepth[Type]\tLENGTH\t\t580\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t22f7f6cf-0758-4441-b0e3-48ca2302a4f0\tPset_SanitaryTerminalTypeWashHandBasin.NominalLength[Type]\tLENGTH\t\t580\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te09c5903-9bff-4eb9-9a05-948570d182e8\tPset_SanitaryTerminalTypeWashHandBasin.NominalWidth[Type]\tLENGTH\t\t580\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t90899d5b-95c5-438c-afa2-2ec5762abd50\tPset_SanitaryTerminalTypeWashHandBasin.WashHandBasinMounting[Type]\tTEXT\t\t580\t1\tPEnum_SanitaryMounting\t1\nPARAM\t5b8e54b9-f8f0-4190-a857-ea9ee9684869\tPset_SanitaryTerminalTypeWashHandBasin.WashHandBasinType[Type]\tTEXT\t\t580\t1\tPEnum_WashHandBasinType\t1\n#\nGROUP\t581\tPset_SanitaryTerminalTypeWCSeat\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6ee07317-94db-4aba-a0ef-d5f925d0f154\tPset_SanitaryTerminalTypeWCSeat.SeatColor[Type]\tTEXT\t\t581\t1\tIfcText\t1\nPARAM\tda4fe9c5-da1c-456d-9638-8d070e4cc1b2\tPset_SanitaryTerminalTypeWCSeat.SeatHasCover[Type]\tYESNO\t\t581\t1\tIfcBoolean\t1\nPARAM\t5a2f4552-e702-47d9-ab91-e10798648fab\tPset_SanitaryTerminalTypeWCSeat.SeatMaterial[Type]\tMULTILINETEXT\t\t581\t1\tIfcMaterial\t1\nPARAM\te99279cc-5f4a-4fd5-9af4-2fec585ca91d\tPset_SanitaryTerminalTypeWCSeat.SeatType[Type]\tTEXT\t\t581\t1\tPEnum_ToiletSeatType\t1\n#\nGROUP\t582\tPset_SectioningDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t058d98a0-deac-46d6-a53d-b4ff5122dcbf\tPset_SectioningDevice.SectioningDeviceType[Type]\tTEXT\t\t582\t1\tPEnum_SectioningDeviceType\t1\n#\nGROUP\t583\tPset_SectionInsulator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8e71ba93-4e08-4871-b39f-7fe6ebb87d0b\tPset_SectionInsulator.ACResistance[Type]\tNUMBER\t\t583\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t4bf4b51b-6f74-4c05-9727-845c3eab440a\tPset_SectionInsulator.IsArcSuppressing[Type]\tYESNO\t\t583\t1\tIfcBoolean\t1\nPARAM\ta00b0378-411c-41c3-8853-3a4f3adaca38\tPset_SectionInsulator.NumberOfWires[Type]\tINTEGER\t\t583\t1\tIfcCountMeasure\t1\nPARAM\tc94a036b-cc9e-4e1a-ba1f-e9a237e18a6d\tPset_SectionInsulator.TensileStrength[Type]\tNUMBER\t\t583\t1\tIfcForceMeasure\t1\n#\nGROUP\t584\tPset_SensorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t04b1e5b3-f7ee-405f-b60f-44d1372897a7\tPset_SensorPHistory.Direction[Type]\tMULTILINETEXT\t\t584\t1\tIfcTimeSeries\t1\nPARAM\tadb1125e-1fae-470c-9c87-9cc3a2f7d808\tPset_SensorPHistory.Quality[Type]\tMULTILINETEXT\t\t584\t1\tIfcTimeSeries\t1\nPARAM\tebba3eb1-ad7c-46a1-9801-80d40302a34d\tPset_SensorPHistory.Status[Type]\tMULTILINETEXT\t\t584\t1\tIfcTimeSeries\t1\nPARAM\t8053eca5-985a-4e07-bf59-e99a79f8b575\tPset_SensorPHistory.Value[Type]\tMULTILINETEXT\t\t584\t1\tIfcTimeSeries\t1\n#\nGROUP\t585\tPset_SensorTypeCO2Sensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t33bab8b3-f883-4626-9e6e-dc2420d243e0\tPset_SensorTypeCO2Sensor.AccuracyOfCO2Sensor[Type]\tNUMBER\t\t585\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7a674a0d-6ca8-4d1c-916b-1f84120739bd\tPset_SensorTypeCO2Sensor.CO2SensorRange[Type]\tMULTILINETEXT\t\t585\t1\tPropertyBoundedValue\t1\nPARAM\t8641c900-d15d-40ec-8165-8af66b7f19b0\tPset_SensorTypeCO2Sensor.CoverageArea[Type]\tAREA\t\t585\t1\tIfcAreaMeasure\t1\nPARAM\t65506636-83ce-484d-838e-61aa4278d9d4\tPset_SensorTypeCO2Sensor.SetPointCO2Concentration[Type]\tMULTILINETEXT\t\t585\t1\tPropertyBoundedValue\t1\nPARAM\t9901abaf-ece7-4789-ab57-eb6fd48f87ba\tPset_SensorTypeCO2Sensor.SetPointConcentration[Type]\tMULTILINETEXT\t\t585\t1\tPropertyBoundedValue\t1\nPARAM\ta6b09d99-9aac-4146-b7e9-caed5c8e23e9\tPset_SensorTypeCO2Sensor.TimeConstant[Type]\tNUMBER\t\t585\t1\tIfcTimeMeasure\t1\nPARAM\t6b7d3799-8eef-4aaa-80d8-8ecc819f70e2\tPset_SensorTypeCO2Sensor.WashHandBasinSetPoint[Type]\tNUMBER\t\t585\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t586\tPset_SensorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t01b0db38-13a8-4662-8404-7600958210e8\tPset_SensorTypeCommon.Reference[Type]\tTEXT\t\t586\t1\tIfcIdentifier\t1\nPARAM\tfa472293-4a66-404c-9ffe-b9f869312781\tPset_SensorTypeCommon.Status[Type]\tTEXT\t\t586\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t587\tPset_SensorTypeConductanceSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td289e6ce-8709-42f4-b1bb-d3c5c72d6bd1\tPset_SensorTypeConductanceSensor.SetPointConductance[Type]\tMULTILINETEXT\t\t587\t1\tPropertyBoundedValue\t1\n#\nGROUP\t588\tPset_SensorTypeContactSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td4257416-a070-453b-b72e-418238092e7d\tPset_SensorTypeContactSensor.SetPointContact[Type]\tMULTILINETEXT\t\t588\t1\tPropertyBoundedValue\t1\n#\nGROUP\t589\tPset_SensorTypeEarthquakeSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taa7bd00f-3b00-4198-82f6-b526608df43b\tPset_SensorTypeEarthquakeSensor.DataCollectionType[Type]\tTEXT\t\t589\t1\tPEnum_DataCollectionType\t1\nPARAM\tee552bce-84d4-484a-8a02-56660ec4e133\tPset_SensorTypeEarthquakeSensor.DegreeOfLinearity[Type]\tNUMBER\t\t589\t1\tIfcRatioMeasure\t1\nPARAM\t1d513ec6-4264-4d2e-9a43-669f6087c1b6\tPset_SensorTypeEarthquakeSensor.DynamicRange[Type]\tMULTILINETEXT\t\t589\t1\tPropertyBoundedValue\t1\nPARAM\t87ceadd3-121e-4619-abe6-13cabbad7345\tPset_SensorTypeEarthquakeSensor.EarthquakeSensorRange[Type]\tMULTILINETEXT\t\t589\t1\tPropertyBoundedValue\t1\nPARAM\t5c8ce70c-cfa7-401f-aae0-8a3f76ab9b5b\tPset_SensorTypeEarthquakeSensor.EarthquakeSensorType[Type]\tTEXT\t\t589\t1\tPEnum_EarthquakeSensorType\t1\nPARAM\t6bdfbde5-5a92-4d84-93af-69fd10ea97a4\tPset_SensorTypeEarthquakeSensor.FullScaleOutput[Type]\tNUMBER\t\t589\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tda41bb4b-d132-4f00-b5ae-eb06be7d6a82\tPset_SensorTypeEarthquakeSensor.LinearVelocityResolution[Type]\tNUMBER\t\t589\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t9999e277-278b-4f46-9598-454af29263e2\tPset_SensorTypeEarthquakeSensor.MarginOfError[Type]\tNUMBER\t\t589\t1\tIfcRatioMeasure\t1\nPARAM\tcd57cacd-03f4-4857-bf69-8f2d2f0bcb93\tPset_SensorTypeEarthquakeSensor.SamplingFrequency[Type]\tNUMBER\t\t589\t1\tIfcFrequencyMeasure\t1\nPARAM\te9f89c68-a370-4afb-b220-64327919833a\tPset_SensorTypeEarthquakeSensor.SerialInterfaceType[Type]\tTEXT\t\t589\t1\tPEnum_SerialInterfaceType\t1\nPARAM\ta894abd5-bdfa-4623-8a16-24ee4b47160d\tPset_SensorTypeEarthquakeSensor.TransverseSensitivityRatio[Type]\tNUMBER\t\t589\t1\tIfcRatioMeasure\t1\nPARAM\t92729322-22e4-48a1-899b-1a3f41a9b9bb\tPset_SensorTypeEarthquakeSensor.WorkingState[Type]\tTEXT\t\t589\t1\tIfcLabel\t1\n#\nGROUP\t590\tPset_SensorTypeFireSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9f858ee9-322b-40a5-b26c-81207045bdab\tPset_SensorTypeFireSensor.AccuracyOfFireSensor[Type]\tNUMBER\t\t590\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\teece77b6-9889-43d8-a409-da815c410793\tPset_SensorTypeFireSensor.FireSensorSetPoint[Type]\tNUMBER\t\t590\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tb72076cb-d18e-40e5-bf0a-14f244e55e27\tPset_SensorTypeFireSensor.TimeConstant[Type]\tNUMBER\t\t590\t1\tIfcTimeMeasure\t1\n#\nGROUP\t591\tPset_SensorTypeFlowSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8ac28d31-48a2-4e53-8cd1-85cecd079995\tPset_SensorTypeFlowSensor.SetPointFlow[Type]\tMULTILINETEXT\t\t591\t1\tPropertyBoundedValue\t1\n#\nGROUP\t592\tPset_SensorTypeForeignObjectDetectionSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t592c014d-2449-447d-9475-30b7ca572077\tPset_SensorTypeForeignObjectDetectionSensor.ForeignObjectDetectionSensorType[Type]\tTEXT\t\t592\t1\tPEnum_ForeignObjectDetectionSensorType\t1\nPARAM\td1ca2443-3d30-4e42-865f-4951d32171f4\tPset_SensorTypeForeignObjectDetectionSensor.SerialInterfaceType[Type]\tTEXT\t\t592\t1\tPEnum_SerialInterfaceType\t1\nPARAM\tb8aca3d0-c938-4b57-98c0-d408d28fe08f\tPset_SensorTypeForeignObjectDetectionSensor.WorkingState[Type]\tTEXT\t\t592\t1\tIfcLabel\t1\n#\nGROUP\t593\tPset_SensorTypeFrostSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbcd038d4-1d20-4e11-bf73-80d4f38df39b\tPset_SensorTypeFrostSensor.SetPointFrost[Type]\tMULTILINETEXT\t\t593\t1\tPropertyBoundedValue\t1\n#\nGROUP\t594\tPset_SensorTypeGasSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7312d2a6-f6d6-4fa0-b5a9-e3b9115078d0\tPset_SensorTypeGasSensor.AccuracyOfGasSensor[Type]\tNUMBER\t\t594\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t04cf3499-0a2c-4d26-9b47-e2a6013f30c2\tPset_SensorTypeGasSensor.CoverageArea[Type]\tAREA\t\t594\t1\tIfcAreaMeasure\t1\nPARAM\tffe8a319-bc32-4004-931a-fdefd2944e15\tPset_SensorTypeGasSensor.GasDetected[Type]\tTEXT\t\t594\t1\tIfcLabel\t1\nPARAM\tdbdb1a5a-93b3-4bf3-bf5d-5ac2721fbfc5\tPset_SensorTypeGasSensor.GasSensorRange[Type]\tMULTILINETEXT\t\t594\t1\tPropertyBoundedValue\t1\nPARAM\tea1494d3-0d6a-4bc4-9aa9-f73a825afca7\tPset_SensorTypeGasSensor.GasSensorSetPoint[Type]\tNUMBER\t\t594\t1\tIfcPositiveRatioMeasure\t1\nPARAM\taddfb9a1-652f-47f1-9ce2-1eca3079b7a8\tPset_SensorTypeGasSensor.SetPointConcentration[Type]\tMULTILINETEXT\t\t594\t1\tPropertyBoundedValue\t1\nPARAM\t0456a09e-0fe8-41ff-89c4-3b509e652509\tPset_SensorTypeGasSensor.TimeConstant[Type]\tNUMBER\t\t594\t1\tIfcTimeMeasure\t1\n#\nGROUP\t595\tPset_SensorTypeHeatSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c4d9e26-f596-4100-8bbd-e3f7d0da6ecc\tPset_SensorTypeHeatSensor.CoverageArea[Type]\tAREA\t\t595\t1\tIfcAreaMeasure\t1\nPARAM\t5294edb7-a383-4502-bc6a-5e49b3105127\tPset_SensorTypeHeatSensor.HeatSensorAccuracy[Type]\tNUMBER\t\t595\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t76a48401-1c7d-4c65-96b0-651e50f9fd0d\tPset_SensorTypeHeatSensor.HeatSensorRange[Type]\tMULTILINETEXT\t\t595\t1\tPropertyBoundedValue\t1\nPARAM\t8037bee0-2480-46d1-b6c9-9a26c264bf21\tPset_SensorTypeHeatSensor.HeatSensorSetPoint[Type]\tNUMBER\t\t595\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t709e284b-df7f-45d9-bac7-2de0e39df41d\tPset_SensorTypeHeatSensor.RateOfTemperatureRise[Type]\tNUMBER\t\t595\t1\tIfcTemperatureRateOfChangeMeasure\t1\nPARAM\tb6b1ea32-07eb-4185-926b-b63b314d4844\tPset_SensorTypeHeatSensor.SetPointTemperature[Type]\tMULTILINETEXT\t\t595\t1\tPropertyBoundedValue\t1\nPARAM\t46094ee4-26d9-49ea-b194-6235d372b152\tPset_SensorTypeHeatSensor.TimeConstant[Type]\tNUMBER\t\t595\t1\tIfcTimeMeasure\t1\n#\nGROUP\t596\tPset_SensorTypeHumiditySensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t54b3467b-a3db-4446-9266-e9e218433ea5\tPset_SensorTypeHumiditySensor.AccuracyOfHumiditySensor[Type]\tNUMBER\t\t596\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6ae5143d-a374-47f8-b789-aacf26fbc901\tPset_SensorTypeHumiditySensor.HumiditySensorRange[Type]\tMULTILINETEXT\t\t596\t1\tPropertyBoundedValue\t1\nPARAM\te8695670-b4bd-4e30-8b02-396820b4ae0d\tPset_SensorTypeHumiditySensor.HumiditySetPoint[Type]\tNUMBER\t\t596\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1893e8bd-dc8a-4d73-903f-df5ddb615daa\tPset_SensorTypeHumiditySensor.SetPointHumidity[Type]\tMULTILINETEXT\t\t596\t1\tPropertyBoundedValue\t1\nPARAM\t400958ab-8a1e-4974-b261-42839138a0be\tPset_SensorTypeHumiditySensor.TimeConstant[Type]\tNUMBER\t\t596\t1\tIfcTimeMeasure\t1\n#\nGROUP\t597\tPset_SensorTypeIdentifierSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t85f02d48-ac51-4a99-a6df-8ec0ab8fac91\tPset_SensorTypeIdentifierSensor.SetPointIdentifier[Type]\tMULTILINETEXT\t\t597\t1\tPropertyBoundedValue\t1\n#\nGROUP\t598\tPset_SensorTypeIonConcentrationSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6e04816c-bbbb-4fd4-89a5-a9e6d71b21b4\tPset_SensorTypeIonConcentrationSensor.SetPointConcentration[Type]\tMULTILINETEXT\t\t598\t1\tPropertyBoundedValue\t1\nPARAM\t60490e6f-daf5-4242-bbae-33e50817ffb3\tPset_SensorTypeIonConcentrationSensor.SetPointIonConcentration[Type]\tMULTILINETEXT\t\t598\t1\tPropertyBoundedValue\t1\nPARAM\t98a91485-3b21-4d3e-95f9-5573d15afe7e\tPset_SensorTypeIonConcentrationSensor.SubstanceDetected[Type]\tTEXT\t\t598\t1\tIfcLabel\t1\n#\nGROUP\t599\tPset_SensorTypeLevelSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t78f97c3c-9ffd-49cc-8ea0-7122c2c15f2d\tPset_SensorTypeLevelSensor.SetPointLevel[Type]\tMULTILINETEXT\t\t599\t1\tPropertyBoundedValue\t1\n#\nGROUP\t600\tPset_SensorTypeLightSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7032616-3c87-46ff-8b8e-2366fe7c17be\tPset_SensorTypeLightSensor.LightSensorAccuracy[Type]\tNUMBER\t\t600\t1\tIfcIlluminanceMeasure\t1\nPARAM\t3e1c2a49-7a03-48be-b2b1-04e25070c06e\tPset_SensorTypeLightSensor.LightSensorRange[Type]\tMULTILINETEXT\t\t600\t1\tPropertyBoundedValue\t1\nPARAM\t63724caa-7ce5-41db-a4aa-45be72aeb02c\tPset_SensorTypeLightSensor.LightSensorSetPoint[Type]\tNUMBER\t\t600\t1\tIfcIlluminanceMeasure\t1\nPARAM\tacc64954-fa44-42aa-a72b-1a048490a998\tPset_SensorTypeLightSensor.SetPointIlluminance[Type]\tMULTILINETEXT\t\t600\t1\tPropertyBoundedValue\t1\nPARAM\t04831732-9e6a-46c5-ad41-01e66091ab60\tPset_SensorTypeLightSensor.TimeConstant[Type]\tNUMBER\t\t600\t1\tIfcTimeMeasure\t1\n#\nGROUP\t601\tPset_SensorTypeMoistureSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc84478e-5a4c-489f-8bfb-c7809681da7b\tPset_SensorTypeMoistureSensor.SetPointMoisture[Type]\tMULTILINETEXT\t\t601\t1\tPropertyBoundedValue\t1\n#\nGROUP\t602\tPset_SensorTypeMovementSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6930781b-cd14-4ab5-a618-2bda4d2121db\tPset_SensorTypeMovementSensor.MovementSensingType[Type]\tTEXT\t\t602\t1\tPEnum_MovementSensingType\t1\nPARAM\t7c3a0f10-41ba-4a28-a99a-456fd1c31682\tPset_SensorTypeMovementSensor.SetPointMovement[Type]\tMULTILINETEXT\t\t602\t1\tPropertyBoundedValue\t1\nPARAM\t1a62d7b5-ffb4-40e7-9576-26b1128da6eb\tPset_SensorTypeMovementSensor.TimeConstant[Type]\tNUMBER\t\t602\t1\tIfcTimeMeasure\t1\n#\nGROUP\t603\tPset_SensorTypePHSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tafb184f6-b079-407c-adca-f9879d01c711\tPset_SensorTypePHSensor.SetPointPH[Type]\tMULTILINETEXT\t\t603\t1\tPropertyBoundedValue\t1\n#\nGROUP\t604\tPset_SensorTypePressureSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t67958abe-ff22-4f93-a70d-4842fc6c3255\tPset_SensorTypePressureSensor.AccuracyOfPressureSensor[Type]\tNUMBER\t\t604\t1\tIfcPressureMeasure\t1\nPARAM\tdbb71775-1b38-493b-bc2f-2b7560b964f2\tPset_SensorTypePressureSensor.IsSwitch[Type]\tYESNO\t\t604\t1\tIfcBoolean\t1\nPARAM\t4659cb8b-9df5-4308-a2d8-e92f73d8a342\tPset_SensorTypePressureSensor.PressureSensorRange[Type]\tMULTILINETEXT\t\t604\t1\tPropertyBoundedValue\t1\nPARAM\t8a59e816-8836-4a35-b21c-061bf11483c6\tPset_SensorTypePressureSensor.PressureSensorSetPoint[Type]\tNUMBER\t\t604\t1\tIfcPressureMeasure\t1\nPARAM\t8f7ec94f-5a5c-4a92-813e-eebfeff58a71\tPset_SensorTypePressureSensor.SetPointPressure[Type]\tMULTILINETEXT\t\t604\t1\tPropertyBoundedValue\t1\nPARAM\t53589901-35ad-4e17-9e8d-6087a7b684e6\tPset_SensorTypePressureSensor.TimeConstant[Type]\tNUMBER\t\t604\t1\tIfcTimeMeasure\t1\n#\nGROUP\t605\tPset_SensorTypeRadiationSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf5a9ed4d-9c1b-4cd3-8457-b2eea6492a21\tPset_SensorTypeRadiationSensor.SetPointRadiation[Type]\tMULTILINETEXT\t\t605\t1\tPropertyBoundedValue\t1\n#\nGROUP\t606\tPset_SensorTypeRadioactivitySensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3c9d740a-38bc-41ed-a7c4-f7a32e7ef628\tPset_SensorTypeRadioactivitySensor.SetPointRadioactivity[Type]\tMULTILINETEXT\t\t606\t1\tPropertyBoundedValue\t1\n#\nGROUP\t607\tPset_SensorTypeRainSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td81c0bb5-7c2e-4cd4-b0c0-bd5e96ed4a85\tPset_SensorTypeRainSensor.DataCollectionType[Type]\tTEXT\t\t607\t1\tPEnum_DataCollectionType\t1\nPARAM\t3507fa5a-3345-4172-8b38-e42086432f5b\tPset_SensorTypeRainSensor.LengthMeasureResolution[Type]\tLENGTH\t\t607\t1\tIfcLengthMeasure\t1\nPARAM\t250b85ba-45e3-449e-9595-d155d0e882f2\tPset_SensorTypeRainSensor.MarginOfError[Type]\tNUMBER\t\t607\t1\tIfcRatioMeasure\t1\nPARAM\td149334b-5913-47ef-a6cf-659be306c2d9\tPset_SensorTypeRainSensor.RainMeasureRange[Type]\tMULTILINETEXT\t\t607\t1\tPropertyBoundedValue\t1\nPARAM\t7b88f636-0d60-4b74-be45-f4771b5953c3\tPset_SensorTypeRainSensor.RainSensorType[Type]\tTEXT\t\t607\t1\tPEnum_RainSensorType\t1\nPARAM\te9d10187-a1cc-492d-9429-ea6798e87021\tPset_SensorTypeRainSensor.SamplingFrequency[Type]\tNUMBER\t\t607\t1\tIfcFrequencyMeasure\t1\nPARAM\tdde25609-29c2-46c5-b31b-0ed99d5092a2\tPset_SensorTypeRainSensor.SerialInterfaceType[Type]\tTEXT\t\t607\t1\tPEnum_SerialInterfaceType\t1\nPARAM\t8d803f4b-f960-4c64-a98f-b7fd29e1a0e1\tPset_SensorTypeRainSensor.WorkingState[Type]\tTEXT\t\t607\t1\tIfcLabel\t1\n#\nGROUP\t608\tPset_SensorTypeSmokeSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8565329c-ef35-46b7-ae95-4ad0090439f3\tPset_SensorTypeSmokeSensor.AccuracyOfSmokeSensor[Type]\tNUMBER\t\t608\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t39a1e9ae-56b3-4654-8ab2-7e8ebcadc5d8\tPset_SensorTypeSmokeSensor.CoverageArea[Type]\tAREA\t\t608\t1\tIfcAreaMeasure\t1\nPARAM\t4f095642-5555-4829-931c-5ec26f5bea09\tPset_SensorTypeSmokeSensor.HasBuiltInAlarm[Type]\tYESNO\t\t608\t1\tIfcBoolean\t1\nPARAM\t2dfcede9-243e-41c7-992d-8ce901702538\tPset_SensorTypeSmokeSensor.PressureSensorSetPoint[Type]\tNUMBER\t\t608\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0c4e9d2b-4582-4ef7-84dd-dfc934c6b5e6\tPset_SensorTypeSmokeSensor.SetPointConcentration[Type]\tMULTILINETEXT\t\t608\t1\tPropertyBoundedValue\t1\nPARAM\td3e21277-f9de-4170-abf6-76945a98dda8\tPset_SensorTypeSmokeSensor.SmokeSensorRange[Type]\tMULTILINETEXT\t\t608\t1\tPropertyBoundedValue\t1\nPARAM\tbbc581bb-002c-4e14-97be-c733580fd1fe\tPset_SensorTypeSmokeSensor.TimeConstant[Type]\tNUMBER\t\t608\t1\tIfcTimeMeasure\t1\n#\nGROUP\t609\tPset_SensorTypeSnowSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t657a586f-d2cf-4246-92bf-772ba3edb565\tPset_SensorTypeSnowSensor.DataCollectionType[Type]\tTEXT\t\t609\t1\tPEnum_DataCollectionType\t1\nPARAM\tf53b7e63-fa78-4995-8361-107083ada10a\tPset_SensorTypeSnowSensor.ImageResolution[Type]\tTEXT\t\t609\t1\tIfcLabel\t1\nPARAM\t625bb973-8cdb-4844-a68d-97147d692bd1\tPset_SensorTypeSnowSensor.ImageShootingMode[Type]\tTEXT\t\t609\t1\tPEnum_ImageShootingMode\t1\nPARAM\t8ac77ef4-d8db-44ae-92bc-97f5d75f10da\tPset_SensorTypeSnowSensor.LengthMeasureResolution[Type]\tLENGTH\t\t609\t1\tIfcLengthMeasure\t1\nPARAM\tce64c7d0-909e-4eda-9581-17ea1ee0ad3d\tPset_SensorTypeSnowSensor.MarginOfError[Type]\tNUMBER\t\t609\t1\tIfcRatioMeasure\t1\nPARAM\t0f214696-e170-4db3-973f-49cf5b0badb8\tPset_SensorTypeSnowSensor.SamplingFrequency[Type]\tNUMBER\t\t609\t1\tIfcFrequencyMeasure\t1\nPARAM\t461e11fd-ab8e-41a3-90a2-a7579fc255da\tPset_SensorTypeSnowSensor.SerialInterfaceType[Type]\tTEXT\t\t609\t1\tPEnum_SerialInterfaceType\t1\nPARAM\t437cb7bd-130b-47fc-ab3c-ad1253f4cc6d\tPset_SensorTypeSnowSensor.SnowSensorMeasureRange[Type]\tMULTILINETEXT\t\t609\t1\tPropertyBoundedValue\t1\nPARAM\tc9478229-3940-4ddd-a60e-f2b5474d3b5d\tPset_SensorTypeSnowSensor.SnowSensorType[Type]\tTEXT\t\t609\t1\tPEnum_SnowSensorType\t1\n#\nGROUP\t610\tPset_SensorTypeSoundSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1583353c-41c2-4a63-a60b-9ed740c0ff1e\tPset_SensorTypeSoundSensor.SetPointSound[Type]\tMULTILINETEXT\t\t610\t1\tPropertyBoundedValue\t1\nPARAM\t220fcee9-0379-490c-bf7d-e5a5719b1910\tPset_SensorTypeSoundSensor.SoundSensorAccuracy[Type]\tNUMBER\t\t610\t1\tIfcSoundPressureMeasure\t1\nPARAM\tdb8a3e98-8943-4f2c-add0-66d692f24e27\tPset_SensorTypeSoundSensor.SoundSensorRange[Type]\tMULTILINETEXT\t\t610\t1\tPropertyBoundedValue\t1\nPARAM\tf9a4594f-3119-4c63-b7ad-cc37d33d5825\tPset_SensorTypeSoundSensor.SoundSensorSetPoint[Type]\tNUMBER\t\t610\t1\tIfcSoundPressureMeasure\t1\nPARAM\t8b2bdb85-c832-44a5-9965-2b3ed0e00d79\tPset_SensorTypeSoundSensor.TimeConstant[Type]\tNUMBER\t\t610\t1\tIfcTimeMeasure\t1\n#\nGROUP\t611\tPset_SensorTypeTemperatureSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbcb725df-1402-430f-a1cb-ae69ce207b01\tPset_SensorTypeTemperatureSensor.AccuracyOfTemperatureSensor[Type]\tNUMBER\t\t611\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tfabb4ddb-d039-4c7c-a7c3-a73167197018\tPset_SensorTypeTemperatureSensor.SetPointTemperature[Type]\tMULTILINETEXT\t\t611\t1\tPropertyBoundedValue\t1\nPARAM\ta723d50f-193e-4ed1-b34f-92236af64095\tPset_SensorTypeTemperatureSensor.TemperatureSensorRange[Type]\tMULTILINETEXT\t\t611\t1\tPropertyBoundedValue\t1\nPARAM\t90dcd5a9-8eca-4f3d-b440-1e8b7f55bb7b\tPset_SensorTypeTemperatureSensor.TemperatureSensorSetPoint[Type]\tNUMBER\t\t611\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t980b275e-4d58-44a1-a4a7-354aa0795ad4\tPset_SensorTypeTemperatureSensor.TemperatureSensorType[Type]\tTEXT\t\t611\t1\tPEnum_TemperatureSensorType\t1\nPARAM\tbd22bc88-f009-45f0-99cf-3f5f7a6e0a03\tPset_SensorTypeTemperatureSensor.TimeConstant[Type]\tNUMBER\t\t611\t1\tIfcTimeMeasure\t1\n#\nGROUP\t612\tPset_SensorTypeTurnoutClosureSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t98588dcd-2d61-4684-9661-b8554ed37d5a\tPset_SensorTypeTurnoutClosureSensor.DetectionRange[Type]\tLENGTH\t\t612\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t30552672-029a-47c7-a865-d881a1225429\tPset_SensorTypeTurnoutClosureSensor.IndicationRodMovementRange[Type]\tMULTILINETEXT\t\t612\t1\tPropertyBoundedValue\t1\n#\nGROUP\t613\tPset_SensorTypeWindSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbd5b9251-11e6-420c-aa34-d0cd4ac83a2e\tPset_SensorTypeWindSensor.DampingRatio[Type]\tNUMBER\t\t613\t1\tIfcRatioMeasure\t1\nPARAM\t52db3347-97b9-445b-aa78-2e42d554108e\tPset_SensorTypeWindSensor.DataCollectionType[Type]\tTEXT\t\t613\t1\tPEnum_DataCollectionType\t1\nPARAM\tdb89f47a-4298-4efd-9e7e-8edf48ad789f\tPset_SensorTypeWindSensor.LinearVelocityResolution[Type]\tNUMBER\t\t613\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t1bdd405d-aebb-484e-b478-c639829b9e4d\tPset_SensorTypeWindSensor.MarginOfError[Type]\tNUMBER\t\t613\t1\tIfcRatioMeasure\t1\nPARAM\tf8775679-d6f0-475e-b484-c296e1274683\tPset_SensorTypeWindSensor.SamplingFrequency[Type]\tNUMBER\t\t613\t1\tIfcFrequencyMeasure\t1\nPARAM\ta5e621a9-8221-44ad-860a-b07af2c7ec71\tPset_SensorTypeWindSensor.SerialInterfaceType[Type]\tTEXT\t\t613\t1\tPEnum_SerialInterfaceType\t1\nPARAM\tb2751060-6692-407e-a273-9c38e014463e\tPset_SensorTypeWindSensor.SetPointSpeed[Type]\tNUMBER\t\t613\t1\tIfcLinearVelocityMeasure\t1\nPARAM\te19e96ee-cb2e-43f0-954d-f8b0902e5fd3\tPset_SensorTypeWindSensor.StartingWindSpeed[Type]\tNUMBER\t\t613\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t1a7273c4-816c-40c9-846b-16d4326cdbd2\tPset_SensorTypeWindSensor.TimeConstant[Type]\tNUMBER\t\t613\t1\tIfcTimeMeasure\t1\nPARAM\t1810ada2-4df7-409d-9b9a-946c755e61f2\tPset_SensorTypeWindSensor.WindAngleRange[Type]\tMULTILINETEXT\t\t613\t1\tPropertyBoundedValue\t1\nPARAM\t9f657251-8b4f-46f8-8fb3-1139177e8b77\tPset_SensorTypeWindSensor.WindSensorType[Type]\tTEXT\t\t613\t1\tPEnum_WindSensorType\t1\nPARAM\tcbea2460-f58e-407a-badf-3988555b40e3\tPset_SensorTypeWindSensor.WindSpeedRange[Type]\tMULTILINETEXT\t\t613\t1\tPropertyBoundedValue\t1\nPARAM\t13f46408-bc23-4a06-b2f7-8141894cf226\tPset_SensorTypeWindSensor.WorkingState[Type]\tTEXT\t\t613\t1\tIfcLabel\t1\n#\nGROUP\t614\tPset_ServiceLife\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t99041e3e-6dcb-4a73-8426-8cd1a0be7714\tPset_ServiceLife.MeanTimeBetweenFailure[Type]\tTEXT\t\t614\t1\tIfcDuration\t1\nPARAM\tba4f92b0-b561-4efb-8270-08cd29d40f95\tPset_ServiceLife.ServiceLifeDuration[Type]\tMULTILINETEXT\t\t614\t1\tPropertyBoundedValue\t1\n#\nGROUP\t615\tPset_ServiceLifeFactors\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td027a521-8e5d-4b8e-8a41-6a66d085ae46\tPset_ServiceLifeFactors.DesignLevel[Type]\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\nPARAM\tfef76b26-3e57-47dc-a245-427769e6e789\tPset_ServiceLifeFactors.IndoorEnvironment[Type]\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\nPARAM\tb418781a-20c7-4216-b46b-caed51e376fd\tPset_ServiceLifeFactors.InUseConditions[Type]\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\nPARAM\t6cf7b69b-9e21-4134-8191-568fdadfdec3\tPset_ServiceLifeFactors.MaintenanceLevel[Type]\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\nPARAM\taebf4086-a9a6-44b5-bd66-0ad5f1bde6e8\tPset_ServiceLifeFactors.OutdoorEnvironment[Type]\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\nPARAM\t2474ade2-5159-4d91-b5d8-b55a45d04eb0\tPset_ServiceLifeFactors.QualityOfComponents[Type]\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\nPARAM\t443652af-da40-40f9-a555-ae7176b7c37b\tPset_ServiceLifeFactors.WorkExecutionLevel[Type]\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\n#\nGROUP\t616\tPset_ShadingDeviceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t545ddf8d-2fb8-41a7-aafc-901611eb35d8\tPset_ShadingDeviceCommon.IsExternal[Type]\tYESNO\t\t616\t1\tIfcBoolean\t1\nPARAM\t5eca956d-8e23-46c5-9d7d-7ff198cc2150\tPset_ShadingDeviceCommon.MechanicalOperated[Type]\tYESNO\t\t616\t1\tIfcBoolean\t1\nPARAM\t81dc2ba4-9d63-4133-9d79-c2a0a602fdb1\tPset_ShadingDeviceCommon.Reference[Type]\tTEXT\t\t616\t1\tIfcIdentifier\t1\nPARAM\t1f92a3e0-92fb-4cd4-ab78-222b53adff7f\tPset_ShadingDeviceCommon.Roughness[Type]\tTEXT\t\t616\t1\tIfcLabel\t1\nPARAM\td3c982fa-85bd-41be-953c-05b07d03d797\tPset_ShadingDeviceCommon.ShadingDeviceType[Type]\tTEXT\t\t616\t1\tPEnum_ElementShading\t1\nPARAM\t0cddeddb-1d82-4aa1-b7f9-9c5110d12898\tPset_ShadingDeviceCommon.SolarReflectance[Type]\tNUMBER\t\t616\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t94a4230e-d204-40ec-be73-7e437ccdea00\tPset_ShadingDeviceCommon.SolarTransmittance[Type]\tNUMBER\t\t616\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\te124e6e5-ac8e-48a1-b13a-30c21fd93bbb\tPset_ShadingDeviceCommon.Status[Type]\tTEXT\t\t616\t1\tPEnum_ElementStatus\t1\nPARAM\tc7e8e23c-9e43-4685-b94d-77b6f989a79a\tPset_ShadingDeviceCommon.SurfaceColor[Type]\tTEXT\t\t616\t1\tIfcLabel\t1\nPARAM\t4ee44756-63ec-45f1-b144-b83c8bdc96e9\tPset_ShadingDeviceCommon.SurfaceColour[Type]\tTEXT\t\t616\t1\tIfcLabel\t1\nPARAM\tefebd056-98ac-4db4-af32-823a77678e74\tPset_ShadingDeviceCommon.ThermalTransmittance[Type]\tNUMBER\t\t616\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\td7bbd7c0-911c-46dd-8067-f6e9202f8eca\tPset_ShadingDeviceCommon.VisibleLightReflectance[Type]\tNUMBER\t\t616\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t94772c6e-e759-44da-95e1-1d0bfaacd49c\tPset_ShadingDeviceCommon.VisibleLightTransmittance[Type]\tNUMBER\t\t616\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t617\tPset_ShadingDevicePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tafe63cea-c77d-4fa5-90ac-004bb1789092\tPset_ShadingDevicePHistory.Azimuth[Type]\tMULTILINETEXT\t\t617\t1\tIfcTimeSeries\t1\nPARAM\t6c4d264d-c2b5-465e-ba38-fe2d6763d39d\tPset_ShadingDevicePHistory.TiltAngle[Type]\tMULTILINETEXT\t\t617\t1\tIfcTimeSeries\t1\n#\nGROUP\t618\tPset_ShipLockCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf17aca83-a4ab-4b87-b40f-747c5e1ff032\tPset_ShipLockCommon.CillLevelLowerHead[Type]\tLENGTH\t\t618\t1\tIfcLengthMeasure\t1\nPARAM\t203f13ca-dd15-4f76-bd31-be9a6ae2c841\tPset_ShipLockCommon.CillLevelUpperHead[Type]\tLENGTH\t\t618\t1\tIfcLengthMeasure\t1\nPARAM\t6967b678-910d-4ea5-9b0e-452e39a774ae\tPset_ShipLockCommon.WaterDeliverySystemType[Type]\tTEXT\t\t618\t1\tIfcLabel\t1\nPARAM\t53341f44-8138-48af-a1c7-726abe5c81b2\tPset_ShipLockCommon.WaterDeliveryValveType[Type]\tTEXT\t\t618\t1\tIfcLabel\t1\n#\nGROUP\t619\tPset_ShiplockComplex\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfa5e34b6-5f2a-4160-a1f6-641c6a9d4847\tPset_ShiplockComplex.LockChamberLevels[Type]\tINTEGER\t\t619\t1\tIfcCountMeasure\t1\nPARAM\tb577d862-8f2d-43a0-b595-2fddcc15594b\tPset_ShiplockComplex.LockGrade[Type]\tTEXT\t\t619\t1\tIfcLabel\t1\nPARAM\t5afb29df-7f0f-4ab4-8503-6c3faf7714aa\tPset_ShiplockComplex.LockLines[Type]\tINTEGER\t\t619\t1\tIfcCountMeasure\t1\nPARAM\t51fa8bad-86f9-406b-8b43-9d78819eeef4\tPset_ShiplockComplex.LockMode[Type]\tTEXT\t\t619\t1\tIfcLabel\t1\n#\nGROUP\t620\tPset_ShiplockDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t159c9dd3-e157-4d4b-823e-987127b3ec7a\tPset_ShiplockDesignCriteria.DownstreamFloodWaterLevel[Type]\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\t93bdbd03-d5f3-417c-81c0-cfd6ce4c8b0e\tPset_ShiplockDesignCriteria.DownstreamMaintenanceWaterLevel[Type]\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\t45541fd2-77f2-47b4-bc70-9b3e20b84fba\tPset_ShiplockDesignCriteria.MaximumDownstreamNavigableWaterLevel[Type]\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\tecdddff6-553e-4bde-a3b3-00d85dc06c6b\tPset_ShiplockDesignCriteria.MaximumUpstreamNavigableWaterLevel[Type]\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\t7825b4b3-c96a-48a3-97fe-2e37fb165b3c\tPset_ShiplockDesignCriteria.MinimumDownstreamNavigableWaterLevel[Type]\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\tb35940d3-fb82-4f7d-ae02-43d840f69ee8\tPset_ShiplockDesignCriteria.MinimumUpstreamNavigableWaterLevel[Type]\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\t629da9e9-80a6-4a6e-bdbf-19b443082671\tPset_ShiplockDesignCriteria.UpstreamFloodWaterLevel[Type]\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\tf1d53b68-0233-4e8b-ab51-2165a76d62d5\tPset_ShiplockDesignCriteria.UpstreamMaintenanceWaterLevel[Type]\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\n#\nGROUP\t621\tPset_ShipyardCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t65c5326e-cc9c-46f8-ab57-ac7f50afe375\tPset_ShipyardCommon.PrimaryProductionType[Type]\tTEXT\t\t621\t1\tIfcLabel\t1\n#\nGROUP\t622\tPset_SignalFrame\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te01f569f-3c84-409d-968d-36d5a10f5d30\tPset_SignalFrame.BackboardType[Type]\tTEXT\t\t622\t1\tIfcLabel\t1\nPARAM\t1d683ec4-f547-4f13-a64f-02337361fa30\tPset_SignalFrame.NominalWidth[Type]\tLENGTH\t\t622\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t288a90f4-da44-449c-957b-a2f3009ea853\tPset_SignalFrame.SignalFrameBackboardDiameter[Type]\tLENGTH\t\t622\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td98ebfd9-5a94-48e0-84e4-4a95d2d03d50\tPset_SignalFrame.SignalFrameBackboardHeight[Type]\tLENGTH\t\t622\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb696de9f-ce67-4f98-9cf3-9e580bcc54a1\tPset_SignalFrame.SignalFrameType[Type]\tTEXT\t\t622\t1\tIfcLabel\t1\nPARAM\t04a15cc5-d7e6-4b4a-a926-d30acd3081e1\tPset_SignalFrame.SignalIndicatorType[Type]\tTEXT\t\t622\t1\tPEnum_SignalIndicatorType\t1\n#\nGROUP\t623\tPset_SignCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t34af4abc-5cdd-4a80-92db-258efc46bfd3\tPset_SignCommon.Category[Type]\tTEXT\t\t623\t1\tIfcLabel\t1\nPARAM\t3b4571a5-06a2-4d06-aa8a-573f40d9dd95\tPset_SignCommon.IsExternal[Type]\tYESNO\t\t623\t1\tIfcBoolean\t1\nPARAM\tf59c7cbf-3136-4101-877e-e5d160c2be39\tPset_SignCommon.Reference[Type]\tTEXT\t\t623\t1\tIfcIdentifier\t1\nPARAM\t45e897fa-84b7-420e-9db0-0ad60e3f1e39\tPset_SignCommon.TactileMarking[Type]\tYESNO\t\t623\t1\tIfcBoolean\t1\n#\nGROUP\t624\tPset_SiteCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc192434-a47b-4892-99e4-4d17de4af98f\tPset_SiteCommon.BuildableArea[Type]\tAREA\t\t624\t1\tIfcAreaMeasure\t1\nPARAM\t4fbd7143-d67d-452a-b5fe-3e9fe769faee\tPset_SiteCommon.BuildingHeightLimit[Type]\tLENGTH\t\t624\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t75587a0b-e714-4c19-a026-2488e126418e\tPset_SiteCommon.FloorAreaRatio[Type]\tNUMBER\t\t624\t1\tIfcPositiveRatioMeasure\t1\nPARAM\te3bdb31b-360f-41ab-bd25-cc902376926f\tPset_SiteCommon.GrossAreaPlanned[Type]\tAREA\t\t624\t1\tIfcAreaMeasure\t1\nPARAM\t8b0e0f7c-cac3-4094-8a9a-78bca52534e2\tPset_SiteCommon.Reference[Type]\tTEXT\t\t624\t1\tIfcIdentifier\t1\nPARAM\t5da368b1-9384-431c-8816-e98e59efc079\tPset_SiteCommon.SiteCoverageRatio[Type]\tNUMBER\t\t624\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tae3e17ee-5703-407a-8d88-87c9d23af519\tPset_SiteCommon.TotalArea[Type]\tAREA\t\t624\t1\tIfcAreaMeasure\t1\n#\nGROUP\t625\tPset_SiteWeather\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2a966ad7-2431-4a34-9c88-033def9131a8\tPset_SiteWeather.MaxAmbientTemp[Type]\tNUMBER\t\t625\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tacb42333-84b8-4579-af61-c8fbc280ad9f\tPset_SiteWeather.MinAmbientTemp[Type]\tNUMBER\t\t625\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t626\tPset_SlabCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbf309f13-1d61-4c34-a2ac-fc9d1b96cc25\tPset_SlabCommon.AcousticRating[Type]\tTEXT\t\t626\t1\tIfcLabel\t1\nPARAM\t78221376-d9ac-4165-894c-6566e0f4b8e5\tPset_SlabCommon.Combustible[Type]\tYESNO\t\t626\t1\tIfcBoolean\t1\nPARAM\t373e24fa-549f-4c47-92ed-33371c43835f\tPset_SlabCommon.Compartmentation[Type]\tYESNO\t\t626\t1\tIfcBoolean\t1\nPARAM\t034ac52c-699d-4d5f-8d6c-5492bb9dd875\tPset_SlabCommon.FireRating[Type]\tTEXT\t\t626\t1\tIfcLabel\t1\nPARAM\tbc2c8668-f247-4ef9-8244-ad0910072bb1\tPset_SlabCommon.IsExternal[Type]\tYESNO\t\t626\t1\tIfcBoolean\t1\nPARAM\t20de9962-30d0-4e89-a7ae-72ae9c8ba10d\tPset_SlabCommon.LoadBearing[Type]\tYESNO\t\t626\t1\tIfcBoolean\t1\nPARAM\td287b84b-a68c-4463-bac1-f7e18f500fd4\tPset_SlabCommon.PitchAngle[Type]\tNUMBER\t\t626\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t933a46a8-9a83-4f2d-998b-6f7259bb672c\tPset_SlabCommon.Reference[Type]\tTEXT\t\t626\t1\tIfcIdentifier\t1\nPARAM\t7b96a722-6761-460f-a615-8baf88d050a3\tPset_SlabCommon.Status[Type]\tTEXT\t\t626\t1\tPEnum_ElementStatus\t1\nPARAM\tc94be42f-abd0-4b86-9fd6-c2fb04cd9405\tPset_SlabCommon.SurfaceSpreadOfFlame[Type]\tTEXT\t\t626\t1\tIfcLabel\t1\nPARAM\tad332f5d-4f1a-4d99-9e12-d7da39aa1813\tPset_SlabCommon.ThermalTransmittance[Type]\tNUMBER\t\t626\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t627\tPset_SlabTypeTrackSlab\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t31aac763-45ba-4c12-a0c7-e961bb22fd7f\tPset_SlabTypeTrackSlab.TechnicalStandard[Type]\tMULTILINETEXT\t\t627\t1\tIfcExternalReference\t1\n#\nGROUP\t628\tPset_SolarDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7fa0f5f2-b7ea-4581-9e05-ebf4c2ad6414\tPset_SolarDeviceTypeCommon.ActiveCellSurfaceAreaFraction[Type]\tNUMBER\t\t628\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\td2b583e5-cade-4992-9e37-edcf5520ce5c\tPset_SolarDeviceTypeCommon.CellEfficiency[Type]\tNUMBER\t\t628\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tb047b98a-c2b1-4ec5-a6bf-0106a7cc99d8\tPset_SolarDeviceTypeCommon.Reference[Type]\tTEXT\t\t628\t1\tIfcIdentifier\t1\nPARAM\tf79d8de9-2f85-4254-92ba-0c19e931d615\tPset_SolarDeviceTypeCommon.Status[Type]\tTEXT\t\t628\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t629\tPset_SolidStratumCapacity\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tba420cf5-5553-48a7-b3ae-fef28342f5b0\tPset_SolidStratumCapacity.CohesionBehaviour[Type]\tNUMBER\t\t629\t1\tIfcPressureMeasure\t1\nPARAM\t3bfd9438-918f-440d-b69b-a5e7b79d8acd\tPset_SolidStratumCapacity.FrictionAngle[Type]\tNUMBER\t\t629\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tfcafda92-a79b-4528-aff1-f0147c071a0c\tPset_SolidStratumCapacity.FrictionBehaviour[Type]\tNUMBER\t\t629\t1\tIfcPressureMeasure\t1\nPARAM\t12a7d88c-6fdf-46ad-a6ae-2b715f21b797\tPset_SolidStratumCapacity.GrainSize[Type]\tLENGTH\t\t629\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfa70b98d-2d2a-4b64-8329-e0ba17f77a09\tPset_SolidStratumCapacity.HydraulicConductivity[Type]\tNUMBER\t\t629\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t6b4818d2-3522-4e6d-b5b6-75abefc279f3\tPset_SolidStratumCapacity.LoadBearingCapacity[Type]\tNUMBER\t\t629\t1\tIfcPlanarForceMeasure\t1\nPARAM\tf72da8d6-54a3-4632-81b3-4a2e1e92ca51\tPset_SolidStratumCapacity.NValue[Type]\tINTEGER\t\t629\t1\tIfcCountMeasure\t1\nPARAM\t9f1895b1-45b0-4b2e-8082-7b17c0538836\tPset_SolidStratumCapacity.PermeabilityBehaviour[Type]\tNUMBER\t\t629\t1\tIfcRatioMeasure\t1\nPARAM\t964088e0-485a-411f-bcac-edf0d8752abe\tPset_SolidStratumCapacity.PoisonsRatio[Type]\tNUMBER\t\t629\t1\tIfcRatioMeasure\t1\nPARAM\t03051120-87b6-4ab9-b186-c8cf942a987c\tPset_SolidStratumCapacity.PwaveVelocity[Type]\tNUMBER\t\t629\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tdc7c97d9-edda-4f14-8eee-c1f6f60acd72\tPset_SolidStratumCapacity.Resistivity[Type]\tNUMBER\t\t629\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t3aa9623f-308e-4ebd-86b3-afc34dbe1633\tPset_SolidStratumCapacity.SettlementBehaviour[Type]\tNUMBER\t\t629\t1\tIfcPressureMeasure\t1\nPARAM\t818f72cd-d80b-49f0-b0bb-c9251ea3b10d\tPset_SolidStratumCapacity.SwaveVelocity[Type]\tNUMBER\t\t629\t1\tIfcLinearVelocityMeasure\t1\n#\nGROUP\t630\tPset_SolidStratumComposition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t36a57b2a-fd04-49ed-95c9-f08247d6a25f\tPset_SolidStratumComposition.AirVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t1878e853-e616-4fce-ba9c-ed03696e20c8\tPset_SolidStratumComposition.BouldersVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t0069c3bf-3e0b-4fc0-9196-9ab8c304dcb3\tPset_SolidStratumComposition.ClayVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t2b9d197c-ce39-4d5b-a5ba-4f3bf26bc20c\tPset_SolidStratumComposition.CobblesVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t399120a1-b886-4a3c-9c79-b4de1309fab4\tPset_SolidStratumComposition.CompositeFractions[Type]\tTEXT\t\t630\t1\tPEnum_SoilCompositeFractions\t1\nPARAM\t9aa51a49-7c9c-449e-a4a2-49f2fa31c20d\tPset_SolidStratumComposition.ContaminantVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t27efbccf-cee9-438c-94a7-1991cd7f813f\tPset_SolidStratumComposition.FillVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\tb9a2f316-c9b9-47ee-b99c-9bf78b60e79c\tPset_SolidStratumComposition.GravelVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t344fadff-0270-4d31-a8e7-82751969e6b9\tPset_SolidStratumComposition.OrganicVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t741cccb9-5b1c-45f7-bb5a-395d0cbc5d0e\tPset_SolidStratumComposition.RockVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t282ffffd-2978-4b46-a09e-7348ccdc6f26\tPset_SolidStratumComposition.SandVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t1cab46d4-2179-4e97-82af-667dad41f2ac\tPset_SolidStratumComposition.SiltVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t9f2b013c-82b2-4ad4-8d41-e52216f354dc\tPset_SolidStratumComposition.WaterVolume[Type]\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t631\tPset_SoundAttenuation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3e1472e5-c921-4a43-a408-cc56bd5238ad\tPset_SoundAttenuation.SoundFrequency[Type]\tMULTILINETEXT\t\t631\t1\tPropertyListValue\t1\nPARAM\t4db22946-f2ce-4563-adc5-c004662e1ebf\tPset_SoundAttenuation.SoundPressure[Type]\tMULTILINETEXT\t\t631\t1\tIfcTimeSeries\t1\nPARAM\t6406b059-8daf-439d-978e-5378a4e101df\tPset_SoundAttenuation.SoundScale[Type]\tTEXT\t\t631\t1\tPEnum_SoundScale\t1\n#\nGROUP\t632\tPset_SoundGeneration\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5e7c163d-fe18-4508-9f64-587c41931e59\tPset_SoundGeneration.SoundCurve[Type]\tMULTILINETEXT\t\t632\t1\tPropertyTableValue\t1\n#\nGROUP\t633\tPset_SpaceAirHandlingDimensioning\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t04a79bba-c4c9-460e-ac39-11efd8a4f63b\tPset_SpaceAirHandlingDimensioning.BoundaryAreaHeatLoss[Type]\tNUMBER\t\t633\t1\tIfcHeatFluxDensityMeasure\t1\nPARAM\td9702bd1-722d-40ec-b41a-4ec648c4a50a\tPset_SpaceAirHandlingDimensioning.CeilingRAPlenum[Type]\tYESNO\t\t633\t1\tIfcBoolean\t1\nPARAM\taf1d8714-a925-4e8b-b47f-cae1ec64ca4e\tPset_SpaceAirHandlingDimensioning.CoolingDesignAirFlow[Type]\tNUMBER\t\t633\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t26021d32-fb1a-4a43-b9de-1f9d32a0b721\tPset_SpaceAirHandlingDimensioning.CoolingDryBulb[Type]\tNUMBER\t\t633\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t40f05b5c-4413-4e41-ad35-e949a7768fbb\tPset_SpaceAirHandlingDimensioning.CoolingRelativeHumidity[Type]\tNUMBER\t\t633\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1b28d809-30d7-4d7c-8bfc-8bc163ad7f0f\tPset_SpaceAirHandlingDimensioning.DesignAirFlow[Type]\tNUMBER\t\t633\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t587e6981-b204-4c0c-8b3a-67802eb8efb1\tPset_SpaceAirHandlingDimensioning.HeatingDesignAirFlow[Type]\tNUMBER\t\t633\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t70a7a677-6a6a-4f0b-88ce-8e49dd310087\tPset_SpaceAirHandlingDimensioning.HeatingDryBulb[Type]\tNUMBER\t\t633\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t1dd3dc93-b68e-44b8-b41e-8e9f121808ef\tPset_SpaceAirHandlingDimensioning.HeatingRelativeHumidity[Type]\tNUMBER\t\t633\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7ff03702-5e3f-4f60-a56d-68a904e6a22e\tPset_SpaceAirHandlingDimensioning.SensibleHeatGain[Type]\tNUMBER\t\t633\t1\tIfcPowerMeasure\t1\nPARAM\t79d0af90-3833-48ce-adb9-16626c7e2688\tPset_SpaceAirHandlingDimensioning.TotalHeatGain[Type]\tNUMBER\t\t633\t1\tIfcPowerMeasure\t1\nPARAM\t03ea092e-cafc-4b50-a3d8-7975cb886f2f\tPset_SpaceAirHandlingDimensioning.TotalHeatLoss[Type]\tNUMBER\t\t633\t1\tIfcPowerMeasure\t1\nPARAM\t803b193e-df1b-42ea-a7f8-a1504172ac08\tPset_SpaceAirHandlingDimensioning.VentilationDesignAirFlow[Type]\tNUMBER\t\t633\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t634\tPset_SpaceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta0f71104-3c1c-48e8-b727-f75d34d91545\tPset_SpaceCommon.Category[Type]\tTEXT\t\t634\t1\tIfcLabel\t1\nPARAM\t74c770fb-bdd5-482a-ac2c-0e307f87bd7e\tPset_SpaceCommon.CeilingCovering[Type]\tTEXT\t\t634\t1\tIfcLabel\t1\nPARAM\t27c4ebd0-6152-4af8-8cfe-7753e0614d79\tPset_SpaceCommon.Concealed[Type]\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\t24d74396-7a5a-44d5-92a9-ea5e397547de\tPset_SpaceCommon.ConcealedCeiling[Type]\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\t8ad96da3-560b-4779-b299-63c12e36d34d\tPset_SpaceCommon.ConcealedFlooring[Type]\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\tf7e8ac45-2a3d-470d-a77d-c132dc4973e3\tPset_SpaceCommon.FloorCovering[Type]\tTEXT\t\t634\t1\tIfcLabel\t1\nPARAM\t4add0b52-f383-4391-8bb9-d4e480714b3c\tPset_SpaceCommon.GrossAreaPlanned[Type]\tAREA\t\t634\t1\tIfcAreaMeasure\t1\nPARAM\tb1ec1c48-b0db-485a-b90b-0e697b26c662\tPset_SpaceCommon.GrossPlannedArea[Type]\tAREA\t\t634\t1\tIfcAreaMeasure\t1\nPARAM\t5464d758-bdab-4fd3-9d30-7e1069aec35e\tPset_SpaceCommon.HandicapAccessible[Type]\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\t040b3079-f7c7-4548-980c-6fbf693c64e6\tPset_SpaceCommon.IsExternal[Type]\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\td2a57aa4-c177-4b73-b9c8-e80431ca733e\tPset_SpaceCommon.MechanicalVentilationRate[Type]\tINTEGER\t\t634\t1\tIfcCountMeasure\t1\nPARAM\td04afbd6-8900-4002-bb52-c7d166c8078f\tPset_SpaceCommon.NaturalVentilation[Type]\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\t5304461a-5e75-4c16-a66f-2ddfbc494621\tPset_SpaceCommon.NaturalVentilationRate[Type]\tINTEGER\t\t634\t1\tIfcCountMeasure\t1\nPARAM\t773d8674-94d8-44e7-9a0f-565f997ec6df\tPset_SpaceCommon.NetPlannedArea[Type]\tAREA\t\t634\t1\tIfcAreaMeasure\t1\nPARAM\tb9633db9-36db-412e-b5de-2b79e95aba15\tPset_SpaceCommon.OccupancyNumber[Type]\tINTEGER\t\t634\t1\tIfcCountMeasure\t1\nPARAM\tf7e838b8-a9f3-45c1-8d2d-17645e3c570f\tPset_SpaceCommon.OccupancyType[Type]\tTEXT\t\t634\t1\tIfcLabel\t1\nPARAM\t3c03b7e3-56f6-4f06-a7a0-72b285f2e2b7\tPset_SpaceCommon.PubliclyAccessible[Type]\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\t0ac022e5-f79e-4721-895a-479b73f510ff\tPset_SpaceCommon.Reference[Type]\tTEXT\t\t634\t1\tIfcIdentifier\t1\nPARAM\t3a6232d2-edea-4bc1-8b1b-732470913c53\tPset_SpaceCommon.SkirtingBoard[Type]\tTEXT\t\t634\t1\tIfcLabel\t1\nPARAM\t78aa25e8-47ed-4636-9012-31e301054f1f\tPset_SpaceCommon.WallCovering[Type]\tTEXT\t\t634\t1\tIfcLabel\t1\n#\nGROUP\t635\tPset_SpaceCoveringRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tea4d6e52-ef0f-4cd9-9c42-f425ec0d5581\tPset_SpaceCoveringRequirements.CeilingCovering[Type]\tTEXT\t\t635\t1\tIfcLabel\t1\nPARAM\t061687bd-5ed0-469d-af90-33651834618f\tPset_SpaceCoveringRequirements.CeilingCoveringThickness[Type]\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t10294023-ad4e-4990-8a7b-3b9fa35e0cf0\tPset_SpaceCoveringRequirements.ConcealedCeiling[Type]\tYESNO\t\t635\t1\tIfcBoolean\t1\nPARAM\tcf311e52-3331-438f-945f-423ce3b9c6e7\tPset_SpaceCoveringRequirements.ConcealedCeilingOffset[Type]\tLENGTH\t\t635\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tabc81409-eba1-484f-ba65-973ee316b5c4\tPset_SpaceCoveringRequirements.ConcealedFlooring[Type]\tYESNO\t\t635\t1\tIfcBoolean\t1\nPARAM\t6e963bf7-e060-47ab-96cd-10698f134482\tPset_SpaceCoveringRequirements.ConcealedFlooringOffset[Type]\tLENGTH\t\t635\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t4e3b74d1-3d69-4f39-a2ff-03eb4aec0776\tPset_SpaceCoveringRequirements.FloorCovering[Type]\tTEXT\t\t635\t1\tIfcLabel\t1\nPARAM\t763944bd-4f5d-4d21-89f6-d7ac47d7b525\tPset_SpaceCoveringRequirements.FloorCoveringThickness[Type]\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3f02ee6f-281c-4da9-8e8f-a87235bdf9bd\tPset_SpaceCoveringRequirements.Molding[Type]\tTEXT\t\t635\t1\tIfcLabel\t1\nPARAM\t9a63310a-2969-4c70-9495-405fd98abf09\tPset_SpaceCoveringRequirements.MoldingHeight[Type]\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t42f1cd2d-8b8b-41f2-a7b8-d97ce90975da\tPset_SpaceCoveringRequirements.SkirtingBoard[Type]\tTEXT\t\t635\t1\tIfcLabel\t1\nPARAM\ta1cf15ea-76d0-48d1-8029-8051db5dc464\tPset_SpaceCoveringRequirements.SkirtingBoardHeight[Type]\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6381df44-bcff-4bd8-82ae-625fb49818f2\tPset_SpaceCoveringRequirements.WallCovering[Type]\tTEXT\t\t635\t1\tIfcLabel\t1\nPARAM\tbd8857d9-0856-4434-9d16-e6d919a0fd25\tPset_SpaceCoveringRequirements.WallCoveringThickness[Type]\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t636\tPset_SpaceFireSafetyRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdd21485e-ff48-4fa0-87f5-10f0323fe12a\tPset_SpaceFireSafetyRequirements.AirPressurization[Type]\tYESNO\t\t636\t1\tIfcBoolean\t1\nPARAM\tb56b4925-a0bc-44e8-a837-94da6b5e5e18\tPset_SpaceFireSafetyRequirements.AncillaryFireUse[Type]\tTEXT\t\t636\t1\tIfcLabel\t1\nPARAM\t0b33d173-27f5-40e8-9729-8f6741f68109\tPset_SpaceFireSafetyRequirements.FireExit[Type]\tYESNO\t\t636\t1\tIfcBoolean\t1\nPARAM\t9a863ae4-e14a-43e6-9b38-43ac34fdec5a\tPset_SpaceFireSafetyRequirements.FireHazardFactor[Type]\tTEXT\t\t636\t1\tIfcLabel\t1\nPARAM\t02d10f52-b539-4f90-abe0-871ae79d21c0\tPset_SpaceFireSafetyRequirements.FireRiskFactor[Type]\tTEXT\t\t636\t1\tIfcLabel\t1\nPARAM\teaaaba53-a1f8-4bef-9535-5694bc5fb3a3\tPset_SpaceFireSafetyRequirements.FlammableStorage[Type]\tYESNO\t\t636\t1\tIfcBoolean\t1\nPARAM\t03126e95-d825-4dc1-9e84-3d4ec72af277\tPset_SpaceFireSafetyRequirements.MainFireUse[Type]\tTEXT\t\t636\t1\tIfcLabel\t1\nPARAM\t4e1bbeda-8612-4bdf-9926-4a0a3ede6735\tPset_SpaceFireSafetyRequirements.SprinklerProtection[Type]\tYESNO\t\t636\t1\tIfcBoolean\t1\nPARAM\t976d7aca-99d5-4c80-aaac-f22a2d806039\tPset_SpaceFireSafetyRequirements.SprinklerProtectionAutomatic[Type]\tYESNO\t\t636\t1\tIfcBoolean\t1\n#\nGROUP\t637\tPset_SpaceHeaterPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9e496e01-f20e-489c-a59e-3ba8fa14e0d8\tPset_SpaceHeaterPHistory.AirResistanceCurve[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\t64b470a0-f115-4205-ab0c-db5904a06048\tPset_SpaceHeaterPHistory.AuxiliaryEnergySourceConsumption[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\tf32813f6-cc3a-4a86-8433-ab86ef16af99\tPset_SpaceHeaterPHistory.CharacteristicExponent[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\t5388e940-5872-40de-ab25-19ebb376f283\tPset_SpaceHeaterPHistory.Effectiveness[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\t60a315f2-36f6-4fcc-b32d-94e880a24326\tPset_SpaceHeaterPHistory.Exponent[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\t7921574d-b449-40dc-9c94-0e64593daeb4\tPset_SpaceHeaterPHistory.FractionConvectiveHeatTransfer[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\tfaca8e23-a251-4ca9-87f7-5014b46427f1\tPset_SpaceHeaterPHistory.FractionRadiantHeatTransfer[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\t57a52b2a-83c3-46b1-b93b-a04f71d26b28\tPset_SpaceHeaterPHistory.HeatOutputRate[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\t0023f9a0-4d93-4712-a566-f41ad666e7cc\tPset_SpaceHeaterPHistory.OutputCapacityCurve[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\tb7ab482d-02f7-4e8a-84b1-c2ea55ba3ef7\tPset_SpaceHeaterPHistory.SpaceAirTemperature[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\tacfe65ba-0fab-4e91-93e5-3a055f1d6d71\tPset_SpaceHeaterPHistory.SpaceMeanRadiantTemperature[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\t925c17be-092c-4428-9909-02f67a6f1fea\tPset_SpaceHeaterPHistory.SurfaceTemperature[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\t74869d0d-8583-484b-bc42-0a412c1a44cd\tPset_SpaceHeaterPHistory.UACurve[Type]\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\n#\nGROUP\t638\tPset_SpaceHeaterPHistoryCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t86d02fb1-9554-46a9-98f2-cc6a0985aa23\tPset_SpaceHeaterPHistoryCommon.AirResistanceCurve[Type]\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\tfefa5cb6-f773-47c6-8eb7-a4253288de2b\tPset_SpaceHeaterPHistoryCommon.AuxiliaryEnergySourceConsumption[Type]\tTEXT\t\t638\t1\tIfcLabel\t1\nPARAM\t18d475aa-ff66-4c96-8cdd-a11a7eff449e\tPset_SpaceHeaterPHistoryCommon.Effectiveness[Type]\tTEXT\t\t638\t1\tIfcLabel\t1\nPARAM\tf853e1cd-fc90-464f-8dd2-3d25555d6c78\tPset_SpaceHeaterPHistoryCommon.Exponent[Type]\tTEXT\t\t638\t1\tIfcLabel\t1\nPARAM\t08d9f3bf-8967-4207-80f3-df02acf6f016\tPset_SpaceHeaterPHistoryCommon.FractionConvectiveHeatTransfer[Type]\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\t98506a96-028d-4771-8c94-8d8149510e70\tPset_SpaceHeaterPHistoryCommon.FractionRadiantHeatTransfer[Type]\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\tba346824-f53d-4841-b570-4066e9285ae5\tPset_SpaceHeaterPHistoryCommon.HeatOutputRate[Type]\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\t1e194e65-174f-4705-838a-c9fb7f67a223\tPset_SpaceHeaterPHistoryCommon.OutputCapacityCurve[Type]\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\t69eab4c4-864e-4a1f-8894-5e629124ea5c\tPset_SpaceHeaterPHistoryCommon.SpaceAirTemperature[Type]\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\tf331e455-03b4-4e41-b288-004e897f5944\tPset_SpaceHeaterPHistoryCommon.SpaceMeanRadiantTemperature[Type]\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\tc0f46c72-a03e-4377-ada3-72f12bbb2ed0\tPset_SpaceHeaterPHistoryCommon.SurfaceTemperature[Type]\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\t1d1da055-9419-4180-bdb9-916a5314a76a\tPset_SpaceHeaterPHistoryCommon.UACurve[Type]\tTEXT\t\t638\t1\tIfcLabel\t1\n#\nGROUP\t639\tPset_SpaceHeaterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3bc5fd2a-a819-4390-99f2-041bd232deb9\tPset_SpaceHeaterTypeCommon.BodyMass[Type]\tNUMBER\t\t639\t1\tIfcMassMeasure\t1\nPARAM\t79238827-eb6d-4b6b-9c4f-56873ea5855e\tPset_SpaceHeaterTypeCommon.EnergySource[Type]\tTEXT\t\t639\t1\tPEnum_EnergySource\t1\nPARAM\tb353a955-38e0-4c38-bac3-68c5e4b1ecc4\tPset_SpaceHeaterTypeCommon.HeatingSource[Type]\tTEXT\t\t639\t1\tPEnum_HeatingSource\t1\nPARAM\tb84f3b62-cedc-4511-a410-8032f821cb73\tPset_SpaceHeaterTypeCommon.HeatTransferDimension[Type]\tTEXT\t\t639\t1\tPEnum_SpaceHeaterHeatTransferDimension\t1\nPARAM\t14396d18-61de-4f36-b4bc-da0f6140aaf3\tPset_SpaceHeaterTypeCommon.HeatTransferMedium[Type]\tTEXT\t\t639\t1\tPEnum_HeatTransferMedium\t1\nPARAM\tec982f9f-feb9-41e5-b47e-f89bd6d9e673\tPset_SpaceHeaterTypeCommon.Material[Type]\tMULTILINETEXT\t\t639\t1\tIfcMaterial\t1\nPARAM\t3fb54b5f-dd93-4956-945d-7d86db2fc98e\tPset_SpaceHeaterTypeCommon.NumberOfPanels[Type]\tINTEGER\t\t639\t1\tIfcCountMeasure\t1\nPARAM\te5d4e817-6d65-448f-9605-838696410c45\tPset_SpaceHeaterTypeCommon.NumberOfSections[Type]\tINTEGER\t\t639\t1\tIfcCountMeasure\t1\nPARAM\tb546db0a-a09c-4b30-b312-1c580e9c6aa7\tPset_SpaceHeaterTypeCommon.OutputCapacity[Type]\tNUMBER\t\t639\t1\tIfcPowerMeasure\t1\nPARAM\t0cd378d2-5528-4164-950b-6e964269ee26\tPset_SpaceHeaterTypeCommon.PlacementType[Type]\tTEXT\t\t639\t1\tPEnum_SpaceHeaterPlacementType\t1\nPARAM\t573912a7-b341-4e2e-bfc7-f72c9bcf8fa9\tPset_SpaceHeaterTypeCommon.Reference[Type]\tTEXT\t\t639\t1\tIfcIdentifier\t1\nPARAM\t720b1cbd-e6f9-4436-80a4-1ef2f289699c\tPset_SpaceHeaterTypeCommon.SpaceHeaterPlacement[Type]\tTEXT\t\t639\t1\tPEnum_SpaceHeaterPlacementType\t1\nPARAM\t4a03befb-8aca-4e04-b09b-22709eae119c\tPset_SpaceHeaterTypeCommon.Status[Type]\tTEXT\t\t639\t1\tPEnum_ElementStatus\t1\nPARAM\t146ba315-9d0f-4517-bca1-6f1a4c2b488b\tPset_SpaceHeaterTypeCommon.TemperatureClassification[Type]\tTEXT\t\t639\t1\tPEnum_SpaceHeaterTemperatureClassification\t1\nPARAM\t26238d33-8e20-401f-9a9a-5bff7b37cf07\tPset_SpaceHeaterTypeCommon.ThermalEfficiency[Type]\tNUMBER\t\t639\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t9b04e3d9-29ca-4ced-8f97-61deb35898ee\tPset_SpaceHeaterTypeCommon.ThermalMassHeatCapacity[Type]\tNUMBER\t\t639\t1\tIfcReal\t1\n#\nGROUP\t640\tPset_SpaceHeaterTypeConvector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7d81184a-f720-4611-ab59-cb9648df8b5a\tPset_SpaceHeaterTypeConvector.ConvectorType[Type]\tTEXT\t\t640\t1\tPEnum_SpaceHeaterConvectorType\t1\n#\nGROUP\t641\tPset_SpaceHeaterTypeHydronic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9d552a63-97cf-4883-beee-b66c9bb723aa\tPset_SpaceHeaterTypeHydronic.TubingLength[Type]\tLENGTH\t\t641\t1\tIfcLengthMeasure\t1\nPARAM\t724cd2f7-ec44-421e-b948-d476e3e5c972\tPset_SpaceHeaterTypeHydronic.WaterContent[Type]\tNUMBER\t\t641\t1\tIfcMassMeasure\t1\n#\nGROUP\t642\tPset_SpaceHeaterTypeRadiator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5cb7ca5b-a57d-45bc-a732-7d2feb448d45\tPset_SpaceHeaterTypeRadiator.RadiatorType[Type]\tTEXT\t\t642\t1\tPEnum_SpaceHeaterRadiatorType\t1\nPARAM\t06b863c9-9b4f-47c4-a637-3d957cc76126\tPset_SpaceHeaterTypeRadiator.TubingLength[Type]\tLENGTH\t\t642\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t59b8dd3b-c066-4f58-a877-90105b131dd8\tPset_SpaceHeaterTypeRadiator.WaterContent[Type]\tNUMBER\t\t642\t1\tIfcMassMeasure\t1\n#\nGROUP\t643\tPset_SpaceHVACDesign\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbbe144f5-59dd-4bac-8a81-0c8ed4e537bf\tPset_SpaceHVACDesign.AirConditioning[Type]\tYESNO\t\t643\t1\tIfcBoolean\t1\nPARAM\t8474d698-95f5-4f37-97fe-c1762e551664\tPset_SpaceHVACDesign.AirConditioningCentral[Type]\tYESNO\t\t643\t1\tIfcBoolean\t1\nPARAM\tc2c35b12-a811-4383-b71d-30458358d376\tPset_SpaceHVACDesign.AirHandlingName[Type]\tTEXT\t\t643\t1\tIfcLabel\t1\nPARAM\t64229238-0ae0-41c2-b141-80bbb6e969cd\tPset_SpaceHVACDesign.DiscontinuedHeating[Type]\tYESNO\t\t643\t1\tIfcBoolean\t1\nPARAM\tc4c24a90-2c1c-4bb2-9a70-5e7e9a95fbb0\tPset_SpaceHVACDesign.HumidityMax[Type]\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t74260e7b-8925-451e-af4d-ee58ac4df6ce\tPset_SpaceHVACDesign.HumidityMin[Type]\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t92786469-eca8-4b2d-b431-3a82a28a90f1\tPset_SpaceHVACDesign.HumiditySetPoint[Type]\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t04f9605b-46bd-4dda-9109-3ae99194e257\tPset_SpaceHVACDesign.HumiditySummer[Type]\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tae25dd7c-8487-4a4c-82cc-de413283f47b\tPset_SpaceHVACDesign.HumidityWinter[Type]\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf0593bee-2425-41e6-a909-1739c5e2da82\tPset_SpaceHVACDesign.MechanicalVentilation[Type]\tYESNO\t\t643\t1\tIfcBoolean\t1\nPARAM\t3631efe7-87ad-4c21-b987-0d0449e67ded\tPset_SpaceHVACDesign.MechanicalVentilationRate[Type]\tINTEGER\t\t643\t1\tIfcCountMeasure\t1\nPARAM\teee89f62-5477-4986-869e-46c57cda6a3c\tPset_SpaceHVACDesign.NaturalVentilation[Type]\tYESNO\t\t643\t1\tIfcBoolean\t1\nPARAM\tf4c2722e-20dd-4f21-8f62-7aa5d0e59efb\tPset_SpaceHVACDesign.NaturalVentilationRate[Type]\tINTEGER\t\t643\t1\tIfcCountMeasure\t1\nPARAM\te9198cff-a28d-4e20-a1cf-537a276b5ad6\tPset_SpaceHVACDesign.TemperatureMax[Type]\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t75ce4e30-4834-48d0-a474-c8fc650329f6\tPset_SpaceHVACDesign.TemperatureMin[Type]\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t8349f020-2baa-4320-accd-26d125ccc47d\tPset_SpaceHVACDesign.TemperatureSetPoint[Type]\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t115349e2-025c-4379-ab95-783855a2994b\tPset_SpaceHVACDesign.TemperatureSummerMax[Type]\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t4c6dfbd2-c5c8-45a6-a101-621c37a3611d\tPset_SpaceHVACDesign.TemperatureSummerMin[Type]\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\te859dc3c-86f0-49ef-b6de-e8cc438709d2\tPset_SpaceHVACDesign.TemperatureWinterMax[Type]\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t9385e148-97e2-46c5-9c4d-d37c0109d0b5\tPset_SpaceHVACDesign.TemperatureWinterMin[Type]\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t644\tPset_SpaceLightingDesign\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tace3ba3f-53fe-48b1-9064-2f77f6cd8a57\tPset_SpaceLightingDesign.ArtificialLighting[Type]\tYESNO\t\t644\t1\tIfcBoolean\t1\nPARAM\t72139572-d87b-44cc-94b1-53fb7bb36feb\tPset_SpaceLightingDesign.Illuminance[Type]\tNUMBER\t\t644\t1\tIfcIlluminanceMeasure\t1\n#\nGROUP\t645\tPset_SpaceLightingRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t82b0d5a8-2242-42b4-bdaf-35dee06250f2\tPset_SpaceLightingRequirements.ArtificialLighting[Type]\tYESNO\t\t645\t1\tIfcBoolean\t1\nPARAM\t4e87711c-ffb1-4ff1-afca-21a44355e653\tPset_SpaceLightingRequirements.Illuminance[Type]\tNUMBER\t\t645\t1\tIfcIlluminanceMeasure\t1\n#\nGROUP\t646\tPset_SpaceOccupancyRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48b35208-f94e-42ef-95c7-e67f957d45b2\tPset_SpaceOccupancyRequirements.AreaPerOccupant[Type]\tAREA\t\t646\t1\tIfcAreaMeasure\t1\nPARAM\td3e5e06b-7ed7-4447-8f99-8424ac0a6119\tPset_SpaceOccupancyRequirements.IsOutlookDesirable[Type]\tYESNO\t\t646\t1\tIfcBoolean\t1\nPARAM\t98f2b721-bc49-4325-afcf-10566b122ec4\tPset_SpaceOccupancyRequirements.MinimumHeadroom[Type]\tLENGTH\t\t646\t1\tIfcLengthMeasure\t1\nPARAM\t45fa09d3-88b4-4bb3-865c-73f851e6339b\tPset_SpaceOccupancyRequirements.OccupancyNumber[Type]\tINTEGER\t\t646\t1\tIfcCountMeasure\t1\nPARAM\ta116eaf1-09c1-4787-8128-979a43e90945\tPset_SpaceOccupancyRequirements.OccupancyNumberPeak[Type]\tINTEGER\t\t646\t1\tIfcCountMeasure\t1\nPARAM\t50299194-3739-480d-b3c1-35f1c13c2ded\tPset_SpaceOccupancyRequirements.OccupancyTimePerDay[Type]\tNUMBER\t\t646\t1\tIfcTimeMeasure\t1\nPARAM\t58ec46a9-e9a9-4fdc-87b9-d7387ecc0fac\tPset_SpaceOccupancyRequirements.OccupancyType[Type]\tTEXT\t\t646\t1\tIfcLabel\t1\n#\nGROUP\t647\tPset_SpaceParking\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcfd75e62-9052-4ea9-beb5-aeea8b212693\tPset_SpaceParking.HandicapAccessible[Type]\tYESNO\t\t647\t1\tIfcBoolean\t1\nPARAM\t8c11ae75-e526-4fab-9028-c1dd8a8fbe58\tPset_SpaceParking.IsAisle[Type]\tYESNO\t\t647\t1\tIfcBoolean\t1\nPARAM\tb3cd74fa-1a57-4dd9-876e-3a7bc7d3c92c\tPset_SpaceParking.IsOneWay[Type]\tYESNO\t\t647\t1\tIfcBoolean\t1\nPARAM\t700ba8c5-af0f-46a2-b4e5-332cc26596b0\tPset_SpaceParking.ParkingUnits[Type]\tINTEGER\t\t647\t1\tIfcCountMeasure\t1\nPARAM\teb071cb3-ce31-4bec-a9da-60a2c4914538\tPset_SpaceParking.ParkingUse[Type]\tTEXT\t\t647\t1\tIfcLabel\t1\n#\nGROUP\t648\tPset_SpaceParkingAisle\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0dd42299-22fe-4dbe-ae7b-450f52d2cbe2\tPset_SpaceParkingAisle.IsOneWay[Type]\tYESNO\t\t648\t1\tIfcBoolean\t1\n#\nGROUP\t649\tPset_SpaceProgramCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7976c93c-752a-425c-bee5-bcf10a0f8c41\tPset_SpaceProgramCommon.EmployeeType[Type]\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\t00731736-a5f8-4e32-ace3-56a9a046f565\tPset_SpaceProgramCommon.FFETypeRequirement[Type]\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\te06aa8bf-b377-427e-99f8-d2a71da90568\tPset_SpaceProgramCommon.FunctionRequirement[Type]\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\t03d8952c-6173-4be1-8efa-67e804ce6cf1\tPset_SpaceProgramCommon.LightingRequirement[Type]\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\tf320a5a1-0183-4bc3-9cba-58af75587b22\tPset_SpaceProgramCommon.Location[Type]\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\t32546f9c-0bc4-4d61-be9f-5c378fecab53\tPset_SpaceProgramCommon.OccupancyNumber[Type]\tINTEGER\t\t649\t1\tIfcCountMeasure\t1\nPARAM\t827df1c1-ef2e-4f0f-bf28-098fb77fe4ad\tPset_SpaceProgramCommon.OccupancyType[Type]\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\te04de6fe-ecd5-4773-b8f1-1ae8e719f306\tPset_SpaceProgramCommon.PrivacyRequirement[Type]\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\tfbac867d-5f24-4f87-a666-7ddc523b8e79\tPset_SpaceProgramCommon.SecurityRequirement[Type]\tTEXT\t\t649\t1\tIfcLabel\t1\n#\nGROUP\t650\tPset_SpaceThermalDesign\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc17dcdaa-7961-4707-ab3a-338fad16646d\tPset_SpaceThermalDesign.BoundaryAreaHeatLoss[Type]\tNUMBER\t\t650\t1\tIfcHeatFluxDensityMeasure\t1\nPARAM\t06741ea3-ec30-4a16-b161-6620c8052733\tPset_SpaceThermalDesign.CeilingRAPlenum[Type]\tYESNO\t\t650\t1\tIfcBoolean\t1\nPARAM\t3002822b-88a8-4ba4-b734-d3dbd1c657cf\tPset_SpaceThermalDesign.CoolingDesignAirflow[Type]\tNUMBER\t\t650\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t40fde375-4305-4e29-90d0-15412df18224\tPset_SpaceThermalDesign.CoolingDryBulb[Type]\tNUMBER\t\t650\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\te5ccc0a1-6cfb-4efd-a807-fd000c1afd74\tPset_SpaceThermalDesign.CoolingRelativeHumidity[Type]\tNUMBER\t\t650\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t9731e9f6-afe7-4f78-9576-f28702426fe5\tPset_SpaceThermalDesign.ExhaustAirFlowrate[Type]\tNUMBER\t\t650\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t928fb183-99f0-4ee4-9f38-55639ce5c33e\tPset_SpaceThermalDesign.HeatingDesignAirflow[Type]\tNUMBER\t\t650\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t83a517d2-d0e6-4826-a60b-1a469aed263c\tPset_SpaceThermalDesign.HeatingDryBulb[Type]\tNUMBER\t\t650\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tccd68d5b-6325-48fd-bb32-53ab8ae732a5\tPset_SpaceThermalDesign.HeatingRelativeHumidity[Type]\tNUMBER\t\t650\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tdc8888d3-5d8a-4d68-86e7-8120e5f61bb5\tPset_SpaceThermalDesign.TotalHeatGain[Type]\tNUMBER\t\t650\t1\tIfcPowerMeasure\t1\nPARAM\tf2d8f0ee-2283-4d44-871a-0e6d1a066fe2\tPset_SpaceThermalDesign.TotalHeatLoss[Type]\tNUMBER\t\t650\t1\tIfcPowerMeasure\t1\nPARAM\t623be5d5-24c2-4bd9-94e9-5aed70f2bbd0\tPset_SpaceThermalDesign.TotalSensibleHeatGain[Type]\tNUMBER\t\t650\t1\tIfcPowerMeasure\t1\nPARAM\t5f8a2f49-6d7d-44fe-9b5b-ce23f68daded\tPset_SpaceThermalDesign.VentilationAirFlowrate[Type]\tNUMBER\t\t650\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t651\tPset_SpaceThermalLoad\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5ad030c1-1a52-4fe4-893c-8a2e25da734d\tPset_SpaceThermalLoad.AirExchangeRate[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t8f0dd9c3-f3e4-49d3-87a2-e6f00f79eceb\tPset_SpaceThermalLoad.DryBulbTemperature[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t91c1361a-10fd-4ad8-8be1-c93a610eb64c\tPset_SpaceThermalLoad.EquipmentSensible[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t7e941220-217d-41ec-b1e4-6f1b7b802baf\tPset_SpaceThermalLoad.ExhaustAir[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t1ea1dc22-db1c-4908-a216-47253bc73716\tPset_SpaceThermalLoad.InfiltrationSensible[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\tc3ba2dc3-c61d-47aa-b1e1-c4bde2dc8fb2\tPset_SpaceThermalLoad.Lighting[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t7765850b-1766-416f-b412-8c5cc4c1c531\tPset_SpaceThermalLoad.People[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t0968b970-188f-4cda-88d2-9c82fa3cc714\tPset_SpaceThermalLoad.RecirculatedAir[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t892d9644-2a7b-430b-b35a-4e2661dacf12\tPset_SpaceThermalLoad.RelativeHumidity[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t68ddeee6-6bb0-4645-99cc-51822501ecb9\tPset_SpaceThermalLoad.TotalLatentLoad[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t317c6fde-7b37-48e0-841b-9e956a1acb89\tPset_SpaceThermalLoad.TotalRadiantLoad[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t2f5b2d35-82c6-4027-bcb4-e99c32cde8a5\tPset_SpaceThermalLoad.TotalSensibleLoad[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t303ccf7f-df57-418b-82c7-715a0de03c0b\tPset_SpaceThermalLoad.VentilationIndoorAir[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t595fd174-cfe2-441d-a4ca-5e4c1f393fcd\tPset_SpaceThermalLoad.VentilationOutdoorAir[Type]\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\n#\nGROUP\t652\tPset_SpaceThermalLoadPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta73dab42-0454-4fe2-8d56-d213f9b41881\tPset_SpaceThermalLoadPHistory.AirExchangeRate[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t5a81ad47-ddfb-4d39-8635-31aff63e2b7a\tPset_SpaceThermalLoadPHistory.AirExchangeRateTimeHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tff616862-79ec-4f75-adc2-d52a8b757332\tPset_SpaceThermalLoadPHistory.DryBulbTemperature[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t24cb8a39-190f-4e50-ba9c-da9cc553f731\tPset_SpaceThermalLoadPHistory.DryBulbTemperatureHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tabdb4c63-a4d2-4504-8aa0-9d2f9dd0a763\tPset_SpaceThermalLoadPHistory.EquipmentSensible[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t1fa0a91b-5478-4c6e-9aea-cb943bde33e2\tPset_SpaceThermalLoadPHistory.EquipmentSensibleHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tc0276209-d72b-46f9-a567-bc44512646ea\tPset_SpaceThermalLoadPHistory.ExhaustAir[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tf9cfbfd5-45e1-43ba-a8c9-3cedd86e86c9\tPset_SpaceThermalLoadPHistory.ExhaustAirHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t8ae0e9d3-6558-4855-a9ff-b93d69a4c2ec\tPset_SpaceThermalLoadPHistory.InfiltrationSensible[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t100bbd05-2bb6-4cd6-8937-da95821f9491\tPset_SpaceThermalLoadPHistory.InfiltrationSensibleHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tc56488a4-d235-45e7-8302-86fe39de1a5f\tPset_SpaceThermalLoadPHistory.Lighting[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t37129103-ee54-4364-8ee1-19fdc881bbf6\tPset_SpaceThermalLoadPHistory.LightingHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tf9a5aab5-cb5f-47c9-ac6b-bbdbf8af7d59\tPset_SpaceThermalLoadPHistory.People[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t565350b5-d2ec-41f4-bf62-d449120376ce\tPset_SpaceThermalLoadPHistory.PeopleHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tc0e41fcb-b3bf-4d40-b2a5-c5fc1e2ebdb1\tPset_SpaceThermalLoadPHistory.RecirculatedAir[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\ta527e490-6f84-4763-b514-a440358cf29e\tPset_SpaceThermalLoadPHistory.RecirculatedAirHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t9028a415-9c80-4afa-93b8-b6d13d63d269\tPset_SpaceThermalLoadPHistory.RelativeHumidity[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\te549a23e-0a51-4053-b714-0398243056d7\tPset_SpaceThermalLoadPHistory.RelativeHumidityHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tdc106e6e-0eac-42da-85d5-15f437318954\tPset_SpaceThermalLoadPHistory.TotalLatentLoad[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t8090b559-a5c9-4cd6-bb2c-fa3bba480f46\tPset_SpaceThermalLoadPHistory.TotalLatentLoadHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tfffa5bd8-bb8c-46b5-a858-904b372a69b1\tPset_SpaceThermalLoadPHistory.TotalRadiantLoad[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t6af9a51b-d0fb-4da1-bea0-5522a3a6599b\tPset_SpaceThermalLoadPHistory.TotalRadiantLoadHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\te43c8513-9898-4826-9083-276d69068e52\tPset_SpaceThermalLoadPHistory.TotalSensibleLoad[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t41d7d5d2-450a-40f3-ac8a-b6de848ae65d\tPset_SpaceThermalLoadPHistory.TotalSensibleLoadHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t18c38f96-b636-45f2-8487-214847c572f3\tPset_SpaceThermalLoadPHistory.VentilationIndoorAir[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t88aa6e3c-0b75-4ed8-a3e0-a65d9492dfc1\tPset_SpaceThermalLoadPHistory.VentilationIndoorAirHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t44f47e33-c2ba-44b7-b7d6-b7c531c6dc3d\tPset_SpaceThermalLoadPHistory.VentilationOutdoorAir[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t439cac49-17e9-4b30-8db8-bd84b07a983b\tPset_SpaceThermalLoadPHistory.VentilationOutdoorAirHistory[Type]\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\n#\nGROUP\t653\tPset_SpaceThermalPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2518d5df-d452-4a42-99d6-284ad7d6c91f\tPset_SpaceThermalPHistory.CoolingAirFlowRate[Type]\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\tccbde6f4-2524-466b-a568-d196d1001da1\tPset_SpaceThermalPHistory.ExhaustAirFlowRate[Type]\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\tc7f2660c-6304-4a43-badc-2379566df8fd\tPset_SpaceThermalPHistory.HeatingAirFlowRate[Type]\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\tc22309f0-7670-4e01-adeb-be9d84b62e79\tPset_SpaceThermalPHistory.SpaceRelativeHumidity[Type]\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\t9b7e9642-ccd1-4939-90c7-29c56fb96a65\tPset_SpaceThermalPHistory.SpaceTemperature[Type]\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\tbc4bc2ad-673c-445c-abe4-1a01ee902871\tPset_SpaceThermalPHistory.SpaceTemperatureHistory[Type]\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\ted9a335a-7d41-4563-9ebb-3fb7dec37cfb\tPset_SpaceThermalPHistory.VentilationAirFlowRate[Type]\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\tc3e830b8-3df1-4a4a-9aad-29d5e62d0c03\tPset_SpaceThermalPHistory.VentilationAirFlowRateHistory[Type]\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\n#\nGROUP\t654\tPset_SpaceThermalRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t44e094a1-9108-45b4-ae26-325df180ad3d\tPset_SpaceThermalRequirements.AirConditioning[Type]\tYESNO\t\t654\t1\tIfcBoolean\t1\nPARAM\t49d83d0e-8991-4bc2-8df7-21bd194cba81\tPset_SpaceThermalRequirements.AirConditioningCentral[Type]\tYESNO\t\t654\t1\tIfcBoolean\t1\nPARAM\tfa63d375-770b-44cf-9c6a-e7a57afb54fa\tPset_SpaceThermalRequirements.DiscontinuedHeating[Type]\tYESNO\t\t654\t1\tIfcBoolean\t1\nPARAM\t714456c4-1ae0-481f-bbe0-9b8e5fb6922a\tPset_SpaceThermalRequirements.MechanicalVentilationRate[Type]\tINTEGER\t\t654\t1\tIfcCountMeasure\t1\nPARAM\t9079726c-3ab7-49c9-aae5-f9a8868642c6\tPset_SpaceThermalRequirements.NaturalVentilation[Type]\tYESNO\t\t654\t1\tIfcBoolean\t1\nPARAM\tb3f47e15-8869-4d78-9be5-8d824815b1b4\tPset_SpaceThermalRequirements.NaturalVentilationRate[Type]\tINTEGER\t\t654\t1\tIfcCountMeasure\t1\nPARAM\t4b84ea46-4e27-458b-8898-2b40ebb56fe9\tPset_SpaceThermalRequirements.SpaceHumidity[Type]\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\nPARAM\tbc38cd60-0402-4b96-ac5a-6039b38c0cb9\tPset_SpaceThermalRequirements.SpaceHumidityMax[Type]\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\nPARAM\te781edc7-5417-47a1-b1e1-dd2fc9c10f28\tPset_SpaceThermalRequirements.SpaceHumidityMin[Type]\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\nPARAM\t0d0cab49-8a6d-4a58-b219-ef7e4c272762\tPset_SpaceThermalRequirements.SpaceHumiditySummer[Type]\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\nPARAM\t7012c067-da42-4858-b99a-ac1fa86487ae\tPset_SpaceThermalRequirements.SpaceHumidityWinter[Type]\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\nPARAM\t28583049-af11-44f0-be48-5e55f55ece47\tPset_SpaceThermalRequirements.SpaceTemperature[Type]\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t7b3bb5d6-3969-4916-b4ad-3db23202524a\tPset_SpaceThermalRequirements.SpaceTemperatureMax[Type]\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tfc44f32a-bdb3-48c6-a807-746b3660d82e\tPset_SpaceThermalRequirements.SpaceTemperatureMin[Type]\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\ted135707-8139-45fe-b46f-4d91355a8cfa\tPset_SpaceThermalRequirements.SpaceTemperatureSummer[Type]\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure \t1\nPARAM\tdbb2acd6-5a0b-409d-8136-13e0c0b1358e\tPset_SpaceThermalRequirements.SpaceTemperatureSummerMax[Type]\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tefa306ba-e01d-49fb-beb5-940aa07c6dd8\tPset_SpaceThermalRequirements.SpaceTemperatureSummerMin[Type]\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t5556c58b-70e9-489f-89f0-b68d7974a67d\tPset_SpaceThermalRequirements.SpaceTemperatureWinter[Type]\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure \t1\nPARAM\td2f4d157-427f-42c2-aaae-c9f2a3e56f7f\tPset_SpaceThermalRequirements.SpaceTemperatureWinterMax[Type]\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t4a9c8ae9-975a-497a-8fb5-0a858bd36b71\tPset_SpaceThermalRequirements.SpaceTemperatureWinterMin[Type]\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t655\tPset_SpatialZoneCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t124379f3-f260-4490-90df-804e37c12c70\tPset_SpatialZoneCommon.IsExternal[Type]\tYESNO\t\t655\t1\tIfcBoolean\t1\nPARAM\t6eac8a4a-0934-4578-8afa-e3d6ba3fa832\tPset_SpatialZoneCommon.Reference[Type]\tTEXT\t\t655\t1\tIfcIdentifier\t1\n#\nGROUP\t656\tPset_SpringTensioner\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2027df98-305b-4b40-a189-9d597c2b2daa\tPset_SpringTensioner.NominalWeight[Type]\tNUMBER\t\t656\t1\tIfcMassMeasure\t1\nPARAM\ta95da718-9b10-4037-b9ce-f8df954cd473\tPset_SpringTensioner.TensileStrength[Type]\tNUMBER\t\t656\t1\tIfcPressureMeasure\t1\nPARAM\tc975944c-bb2f-4335-907e-c288afd4f6d8\tPset_SpringTensioner.TensioningWorkingRange[Type]\tMULTILINETEXT\t\t656\t1\tPropertyBoundedValue\t1\n#\nGROUP\t657\tPset_StackTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6aa79504-a6b1-453b-8cca-c63048aec68f\tPset_StackTerminalTypeCommon.Reference[Type]\tTEXT\t\t657\t1\tIfcIdentifier\t1\nPARAM\t97b7c3ea-67c5-4a7d-954a-5b6de9afc6e4\tPset_StackTerminalTypeCommon.Status[Type]\tTEXT\t\t657\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t658\tPset_StairCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb6b7a43f-825d-4030-805d-7f94491d2423\tPset_StairCommon.FireExit[Type]\tYESNO\t\t658\t1\tIfcBoolean\t1\nPARAM\t829a38d9-a6f4-4542-9e11-f45ccf2da03b\tPset_StairCommon.FireRating[Type]\tTEXT\t\t658\t1\tIfcLabel\t1\nPARAM\teae45c04-7481-4c31-bc21-ce68d5703453\tPset_StairCommon.HandicapAccessible[Type]\tYESNO\t\t658\t1\tIfcBoolean\t1\nPARAM\t280cb6bf-8740-410e-97c8-d04b7af96f4a\tPset_StairCommon.HasNonSkidSurface[Type]\tYESNO\t\t658\t1\tIfcBoolean\t1\nPARAM\t17d94499-6b30-48b8-a266-48d0886ec76e\tPset_StairCommon.IsExternal[Type]\tYESNO\t\t658\t1\tIfcBoolean\t1\nPARAM\t07ebad95-47df-446a-855e-64b460ea4c1b\tPset_StairCommon.LoadBearing[Type]\tYESNO\t\t658\t1\tIfcBoolean\t1\nPARAM\t1f245f11-7b79-40a6-bf47-2432397114cd\tPset_StairCommon.NosingLength[Type]\tLENGTH\t\t658\t1\tIfcLengthMeasure\t1\nPARAM\t1b54453e-2fb5-4eb9-9602-abde6819fd8d\tPset_StairCommon.NumberOfRiser[Type]\tINTEGER\t\t658\t1\tIfcCountMeasure\t1\nPARAM\t8afe2d05-80fb-4347-bfe5-cb11bb109176\tPset_StairCommon.NumberOfTreads[Type]\tINTEGER\t\t658\t1\tIfcCountMeasure\t1\nPARAM\t2d8d71a8-ec99-4f2e-a649-ae661fdc0691\tPset_StairCommon.Reference[Type]\tTEXT\t\t658\t1\tIfcIdentifier\t1\nPARAM\t6554f1d5-15e4-495c-8a5b-8d6aa0345696\tPset_StairCommon.RequiredHeadroom[Type]\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tacac4071-b95b-4605-8eb7-e7731541d7f0\tPset_StairCommon.RiserHeight[Type]\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5da9808c-6589-4951-b1c5-745de934ecea\tPset_StairCommon.Status[Type]\tTEXT\t\t658\t1\tPEnum_ElementStatus\t1\nPARAM\t761ec032-f557-4777-82b0-e7cbe9f906de\tPset_StairCommon.ThermalTransmittance[Type]\tNUMBER\t\t658\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\tb088885e-e8f1-469a-b6f9-a3ea980a9a48\tPset_StairCommon.TreadLength[Type]\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2bdbe850-12d6-4d17-bf4c-8f0772d031a2\tPset_StairCommon.TreadLengthAtInnerSide[Type]\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t17e07c31-28d6-4fb6-98bd-667a261bc800\tPset_StairCommon.TreadLengthAtOffset[Type]\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t17d57e0f-a86a-4810-99cf-cd64c64822dd\tPset_StairCommon.WaistThickness[Type]\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcd2a00de-a246-44ec-86ad-18c987d6f1d1\tPset_StairCommon.WalkingLineOffset[Type]\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t659\tPset_StairFlightCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8132eeb7-7d23-469e-9dfc-5dc1303e3c3c\tPset_StairFlightCommon.Headroom[Type]\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32c34737-fc89-4e91-abbf-5309c32552ef\tPset_StairFlightCommon.NosingLength[Type]\tLENGTH\t\t659\t1\tIfcLengthMeasure\t1\nPARAM\t5c833601-faca-40e3-80d9-610a71785872\tPset_StairFlightCommon.NumberOfRiser[Type]\tINTEGER\t\t659\t1\tIfcCountMeasure\t1\nPARAM\t2de5b2b9-52d2-4653-8493-89d79429181c\tPset_StairFlightCommon.NumberOfTreads[Type]\tINTEGER\t\t659\t1\tIfcCountMeasure\t1\nPARAM\t521f5c0c-ef5d-4c6d-979f-bcee2b748505\tPset_StairFlightCommon.Reference[Type]\tTEXT\t\t659\t1\tIfcIdentifier\t1\nPARAM\tb252ccb4-ef44-416f-90ad-a722aa6e58d7\tPset_StairFlightCommon.RiserHeight[Type]\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t88e4b4e8-bff8-4484-89ad-a29461a6e75b\tPset_StairFlightCommon.Status[Type]\tTEXT\t\t659\t1\tPEnum_ElementStatus\t1\nPARAM\t1f21117e-eae7-4244-b9e5-b86cfb14c41e\tPset_StairFlightCommon.TreadLength[Type]\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t09edd121-856b-4440-b4f9-f810176f1b16\tPset_StairFlightCommon.TreadLengthAtInnerSide[Type]\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td9af64ec-7493-4836-a3dd-5692c7742c43\tPset_StairFlightCommon.TreadLengthAtOffset[Type]\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t19754129-e93e-4eb5-974e-00b52d290c1e\tPset_StairFlightCommon.WaistThickness[Type]\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7b9b9fc1-25ae-4edb-8ba5-ed7a5d94e7ce\tPset_StairFlightCommon.WalkingLineOffset[Type]\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t660\tPset_Stationing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t50907204-dbdc-4f71-9f20-88d2f3834541\tPset_Stationing.IncomingStation[Type]\tLENGTH\t\t660\t1\tIfcLengthMeasure\t1\nPARAM\t785900fe-0edf-4336-97e7-dfdc415d54f3\tPset_Stationing.Station[Type]\tLENGTH\t\t660\t1\tIfcLengthMeasure\t1\n#\nGROUP\t661\tPset_StructuralSurfaceMemberVaryingThickness\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t69ffa62e-065b-4af8-a6d5-cdee81c40c2f\tPset_StructuralSurfaceMemberVaryingThickness.Location1Global[Type]\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\nPARAM\tbba72b17-644f-4b76-ab33-05efb95c6baa\tPset_StructuralSurfaceMemberVaryingThickness.Location1Local[Type]\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\nPARAM\t0e76e3b2-92b4-464c-af36-ed92f05c4fcc\tPset_StructuralSurfaceMemberVaryingThickness.Location2Global[Type]\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\nPARAM\ta9b7685c-457c-4d0c-bd6a-32f93bca6ea4\tPset_StructuralSurfaceMemberVaryingThickness.Location2Local[Type]\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\nPARAM\t3364ad0c-8208-4eee-8c14-070f1d04c2de\tPset_StructuralSurfaceMemberVaryingThickness.Location3Global[Type]\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\nPARAM\t329ef554-82b7-4758-b774-ea6d9bdc012e\tPset_StructuralSurfaceMemberVaryingThickness.Location3Local[Type]\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\nPARAM\td689e4b7-a9e4-44da-ac94-307c53cc5f69\tPset_StructuralSurfaceMemberVaryingThickness.Thickness1[Type]\tLENGTH\t\t661\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td75b1b7d-3bd0-4664-9f1a-0b41ccec7711\tPset_StructuralSurfaceMemberVaryingThickness.Thickness2[Type]\tLENGTH\t\t661\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t90fd9251-850a-403d-897c-f754743c2a08\tPset_StructuralSurfaceMemberVaryingThickness.Thickness3[Type]\tLENGTH\t\t661\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t662\tPset_SumpBusterCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb17219df-7698-4845-b45e-df7802f710d1\tPset_SumpBusterCommon.TypeDesignation[Type]\tTEXT\t\t662\t1\tIfcLabel\t1\n#\nGROUP\t663\tPset_Superelevation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9ac35ced-6318-428d-a252-5bd74f100233\tPset_Superelevation.Side[Type]\tTEXT\t\t663\t1\tPEnum_SideType\t1\nPARAM\taa90d05f-c5b5-41de-82ec-31c58be94f9b\tPset_Superelevation.Superelevation[Type]\tNUMBER\t\t663\t1\tIfcRatioMeasure\t1\nPARAM\t07b36dfe-c886-41e5-baf0-863230be8c97\tPset_Superelevation.TransitionSuperelevation[Type]\tTEXT\t\t663\t1\tPEnum_TransitionSuperelevationType\t1\n#\nGROUP\t664\tPset_SwitchingDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t74c963b5-e7f8-4bfc-89f6-7515394bd796\tPset_SwitchingDeviceTypeCommon.HasLock[Type]\tYESNO\t\t664\t1\tIfcBoolean\t1\nPARAM\ta624fd14-38d9-417d-82f9-18cbc305b20f\tPset_SwitchingDeviceTypeCommon.IsIlluminated[Type]\tYESNO\t\t664\t1\tIfcBoolean\t1\nPARAM\t85ad268a-b01e-4130-8f02-79a1c352f41d\tPset_SwitchingDeviceTypeCommon.Legend[Type]\tTEXT\t\t664\t1\tIfcLabel\t1\nPARAM\t57b28001-c68d-4bf0-a90c-54a377cbbff1\tPset_SwitchingDeviceTypeCommon.NumberOfGangs[Type]\tINTEGER\t\t664\t1\tIfcCountMeasure\t1\nPARAM\t450b1bd6-dba9-4a13-8c6c-928139111c2c\tPset_SwitchingDeviceTypeCommon.Reference[Type]\tTEXT\t\t664\t1\tIfcIdentifier\t1\nPARAM\t48507187-3966-458e-b300-3292d84ff4dc\tPset_SwitchingDeviceTypeCommon.SetPoint[Type]\tMULTILINETEXT\t\t664\t1\tPropertyTableValue\t1\nPARAM\tb5687645-8e30-4bfe-9cae-80ac756bceea\tPset_SwitchingDeviceTypeCommon.Status[Type]\tTEXT\t\t664\t1\tPEnum_ElementStatus\t1\nPARAM\t6a55beee-e723-48c9-8ac3-851b35493e06\tPset_SwitchingDeviceTypeCommon.SwitchFunction[Type]\tTEXT\t\t664\t1\tPEnum_SwitchFunctionType\t1\n#\nGROUP\t665\tPset_SwitchingDeviceTypeContactor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te703be1e-e53e-4b16-a977-5abfd8845bcc\tPset_SwitchingDeviceTypeContactor.ContactorType[Type]\tTEXT\t\t665\t1\tPEnum_ContactorType\t1\n#\nGROUP\t666\tPset_SwitchingDeviceTypeDimmerSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tce89d0e4-203f-4969-b539-b565e631b6ff\tPset_SwitchingDeviceTypeDimmerSwitch.DimmerType[Type]\tTEXT\t\t666\t1\tPEnum_SwitchingDeviceDimmerSwitchType\t1\n#\nGROUP\t667\tPset_SwitchingDeviceTypeEmergencyStop\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcd179eac-27f5-46f3-b7de-d210851db18d\tPset_SwitchingDeviceTypeEmergencyStop.BreakingCapacity[Type]\tNUMBER\t\t667\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t44be858b-8742-4f1e-99b3-79d9cc585788\tPset_SwitchingDeviceTypeEmergencyStop.NominalCurrent[Type]\tNUMBER\t\t667\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t5281e404-d62d-4471-b039-cf8facb683c7\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfAffectedPoles[Type]\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\nPARAM\t05fb92df-5d67-4c9b-9a49-7f72b820a67e\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfEarthFaultRelays[Type]\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\nPARAM\t323618bd-f283-4185-ae25-c379e4101f5c\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfEmergencyButtons[Type]\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\nPARAM\td9ff992f-d61c-453e-b375-e5f1c95d5726\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfOverCurrentRelays[Type]\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\nPARAM\t69fa90fe-a6b4-42f0-a216-76790d40d6b3\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfPhases[Type]\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\nPARAM\t9d3ad0d7-b084-4379-b369-075b1070b6f7\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfRelays[Type]\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\nPARAM\t11bb1921-97d5-41f9-8f6e-5b604358d66f\tPset_SwitchingDeviceTypeEmergencyStop.RatedFrequency[Type]\tNUMBER\t\t667\t1\tIfcFrequencyMeasure\t1\nPARAM\t3b5d213e-28a2-4863-8b31-f2ffe47f0fec\tPset_SwitchingDeviceTypeEmergencyStop.RatedVoltage[Type]\tMULTILINETEXT\t\t667\t1\tPropertyBoundedValue\t1\nPARAM\td661046f-1167-44c2-966c-3a42fdb1572b\tPset_SwitchingDeviceTypeEmergencyStop.ReferenceEnvironmentTemperature[Type]\tMULTILINETEXT\t\t667\t1\tPropertyBoundedValue\t1\nPARAM\tdf44083b-1e6c-44e2-aa6c-6d6a62a321f4\tPset_SwitchingDeviceTypeEmergencyStop.SwitchOperation[Type]\tTEXT\t\t667\t1\tPEnum_SwitchingDeviceEmergencyStopType\t1\nPARAM\t572a2b1c-1b50-4f49-a3a3-14138db6fc8e\tPset_SwitchingDeviceTypeEmergencyStop.TransformationRatio[Type]\tNUMBER\t\t667\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t668\tPset_SwitchingDeviceTypeKeypad\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6e27e536-7e30-4371-9a26-5f3a3a47f67e\tPset_SwitchingDeviceTypeKeypad.KeypadType[Type]\tTEXT\t\t668\t1\tPEnum_SwitchingDeviceKeypadType\t1\n#\nGROUP\t669\tPset_SwitchingDeviceTypeMomentarySwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t456e9a5d-64d8-4354-b120-8a16c7de4fdb\tPset_SwitchingDeviceTypeMomentarySwitch.MomentaryType[Type]\tTEXT\t\t669\t1\tPEnum_SwitchingDeviceMomentarySwitchType\t1\n#\nGROUP\t670\tPset_SwitchingDeviceTypePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf47d6309-985f-4d12-83fc-4f2fc14f222d\tPset_SwitchingDeviceTypePHistory.SetPoint[Type]\tMULTILINETEXT\t\t670\t1\tIfcTimeSeries\t1\nPARAM\t523f2fa9-fc2d-4a27-becb-7964862f13c0\tPset_SwitchingDeviceTypePHistory.SetPointHistory[Type]\tMULTILINETEXT\t\t670\t1\tIfcTimeSeries\t1\n#\nGROUP\t671\tPset_SwitchingDeviceTypeRelay\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta99b007c-6b7c-4100-99df-084afc1faadd\tPset_SwitchingDeviceTypeRelay.ContactResistance[Type]\tNUMBER\t\t671\t1\tIfcElectricResistanceMeasure\t1\nPARAM\tfb7098bb-177b-4a70-9b14-f220b9bdc460\tPset_SwitchingDeviceTypeRelay.Current[Type]\tMULTILINETEXT\t\t671\t1\tPropertyBoundedValue\t1\nPARAM\t22a3aaf6-712f-47c6-a49a-b2805e854522\tPset_SwitchingDeviceTypeRelay.InsulationResistance[Type]\tNUMBER\t\t671\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t6dbccceb-4780-4e50-ad5b-684eb574652d\tPset_SwitchingDeviceTypeRelay.NominalHeight[Type]\tLENGTH\t\t671\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tf7eb54c1-8661-4bcc-b6a9-e14743a117df\tPset_SwitchingDeviceTypeRelay.NominalLength[Type]\tLENGTH\t\t671\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t7811737d-2c9d-425b-9b4c-f75f6d898860\tPset_SwitchingDeviceTypeRelay.NominalWidth[Type]\tLENGTH\t\t671\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tec746f28-3074-4fac-80cc-d2d09ef65cbc\tPset_SwitchingDeviceTypeRelay.PullInVoltage[Type]\tNUMBER\t\t671\t1\tIfcElectricVoltageMeasure\t1\nPARAM\td9d5cf40-2edb-49c1-90dd-340072ae438c\tPset_SwitchingDeviceTypeRelay.ReleaseVoltage[Type]\tNUMBER\t\t671\t1\tIfcElectricVoltageMeasure\t1\nPARAM\ta7993b11-5b6f-49a9-8a4e-38e486126e4b\tPset_SwitchingDeviceTypeRelay.Voltage[Type]\tMULTILINETEXT\t\t671\t1\tPropertyBoundedValue\t1\n#\nGROUP\t672\tPset_SwitchingDeviceTypeSelectorSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9341a1b9-cc7c-432e-aa22-96f035b7b7cc\tPset_SwitchingDeviceTypeSelectorSwitch.NominalCurrent[Type]\tNUMBER\t\t672\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tf9e68894-e2f0-4415-bfdd-b4cb213bef9b\tPset_SwitchingDeviceTypeSelectorSwitch.NominalPower[Type]\tNUMBER\t\t672\t1\tIfcPowerMeasure\t1\nPARAM\te38269f5-aba3-452e-a086-3ecdddf4d8c5\tPset_SwitchingDeviceTypeSelectorSwitch.NumberOfPhases[Type]\tINTEGER\t\t672\t1\tIfcCountMeasure\t1\nPARAM\te8b257cc-e118-4c77-adc9-426752b0746c\tPset_SwitchingDeviceTypeSelectorSwitch.RatedFrequency[Type]\tNUMBER\t\t672\t1\tIfcFrequencyMeasure\t1\nPARAM\t0e818cbb-f4df-4b71-8bea-871d7dd9d131\tPset_SwitchingDeviceTypeSelectorSwitch.ReferenceEnvironmentTemperature[Type]\tMULTILINETEXT\t\t672\t1\tPropertyBoundedValue\t1\nPARAM\tbf9e9bb6-40dd-4d85-86fd-c6d63b0b8523\tPset_SwitchingDeviceTypeSelectorSwitch.SelectorType[Type]\tTEXT\t\t672\t1\tPEnum_SwitchingDeviceDimmerSwitchType\t1\nPARAM\td6221b8a-be31-4935-8cb6-4824bb7b1f76\tPset_SwitchingDeviceTypeSelectorSwitch.SwitchActivation[Type]\tTEXT\t\t672\t1\tPEnum_SwitchActivation\t1\nPARAM\t30f82820-0d35-40f8-af74-bcdf3f62b228\tPset_SwitchingDeviceTypeSelectorSwitch.SwitchUsage[Type]\tTEXT\t\t672\t1\tPEnum_SwitchUsage\t1\n#\nGROUP\t673\tPset_SwitchingDeviceTypeStarter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdab0c4f7-d628-418e-b87e-61f617377264\tPset_SwitchingDeviceTypeStarter.StarterType[Type]\tTEXT\t\t673\t1\tPEnum_StarterType\t1\n#\nGROUP\t674\tPset_SwitchingDeviceTypeSwitchDisconnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t64d3f1a0-e471-42b9-b132-435a2b810b6b\tPset_SwitchingDeviceTypeSwitchDisconnector.HasVisualIndication[Type]\tYESNO\t\t674\t1\tIfcBoolean\t1\nPARAM\tbb0e2217-af1c-47d4-aac2-941b3e893f46\tPset_SwitchingDeviceTypeSwitchDisconnector.LoadDisconnectionType[Type]\tTEXT\t\t674\t1\tPEnum_LoadDisconnectionType\t1\nPARAM\td9bb31f1-8bc3-496c-b00b-f2c9535ce4f4\tPset_SwitchingDeviceTypeSwitchDisconnector.SwitchDisconnectorType[Type]\tTEXT\t\t674\t1\tPEnum_SwitchDisconnectorType\t1\n#\nGROUP\t675\tPset_SwitchingDeviceTypeToggleSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb023cf62-02d3-4fea-bd0f-016a6bbe9f8b\tPset_SwitchingDeviceTypeToggleSwitch.IsIlluminated[Type]\tYESNO\t\t675\t1\tIfcBoolean\t1\nPARAM\t53ca1d9b-f16d-406f-93b3-5511992624b7\tPset_SwitchingDeviceTypeToggleSwitch.Legend[Type]\tTEXT\t\t675\t1\tIfcLabel\t1\nPARAM\t7df6b8f8-afc3-44c5-821e-abda1260e034\tPset_SwitchingDeviceTypeToggleSwitch.SwitchActivation[Type]\tTEXT\t\t675\t1\tPEnum_SwitchActivation\t1\nPARAM\tc43c2697-8c64-48b8-bb26-4e4ee4557585\tPset_SwitchingDeviceTypeToggleSwitch.SwitchUsage[Type]\tTEXT\t\t675\t1\tPEnum_SwitchUsage\t1\nPARAM\t44a1fa86-f3da-4e6c-ae93-6646ea9a70d2\tPset_SwitchingDeviceTypeToggleSwitch.ToggleSwitchType[Type]\tTEXT\t\t675\t1\tPEnum_SwitchingDeviceToggleSwitchType\t1\n#\nGROUP\t676\tPset_SymmetricPairCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf1f0afdf-89b5-4555-a156-cc1dfea8d43f\tPset_SymmetricPairCable.NumberOfTwistedPairs[Type]\tINTEGER\t\t676\t1\tIfcCountMeasure\t1\nPARAM\t7df0bf91-ab44-4328-9afc-5d22e91cbe9b\tPset_SymmetricPairCable.NumberOfUntwistedPairs[Type]\tINTEGER\t\t676\t1\tIfcCountMeasure\t1\n#\nGROUP\t677\tPset_SystemFurnitureElementTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tce5c065b-074b-4925-9cb0-e258b0486e9c\tPset_SystemFurnitureElementTypeCommon.Finishing[Type]\tTEXT\t\t677\t1\tIfcLabel\t1\nPARAM\t76c688bd-ea59-4207-a953-4a3f1f23517a\tPset_SystemFurnitureElementTypeCommon.GroupCode[Type]\tTEXT\t\t677\t1\tIfcIdentifier\t1\nPARAM\t013e6d56-cf82-44ef-8ed8-0bf74aeb69e5\tPset_SystemFurnitureElementTypeCommon.IsUsed[Type]\tYESNO\t\t677\t1\tIfcBoolean\t1\nPARAM\tbf0a2c3a-012b-4e4e-81e1-d105691a19b9\tPset_SystemFurnitureElementTypeCommon.NominalHeight[Type]\tLENGTH\t\t677\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tee38e7fc-4f1b-4f76-a809-3b42d0ce63b8\tPset_SystemFurnitureElementTypeCommon.NominalWidth[Type]\tLENGTH\t\t677\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t678\tPset_SystemFurnitureElementTypePanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb985be9a-4ca4-4cfc-ba00-8bf447eb6701\tPset_SystemFurnitureElementTypePanel.FurniturePanelType[Type]\tTEXT\t\t678\t1\tPEnum_FurniturePanelType\t1\nPARAM\t6d5500ac-7e73-49f4-bfa2-bef75ad62a26\tPset_SystemFurnitureElementTypePanel.HasOpening[Type]\tYESNO\t\t678\t1\tIfcBoolean\t1\nPARAM\t0df05869-9c36-4071-bba8-92358fc6aa20\tPset_SystemFurnitureElementTypePanel.NominalThickness[Type]\tLENGTH\t\t678\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t679\tPset_SystemFurnitureElementTypeSubrack\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t85540a51-40ff-4225-97da-f074c90756f2\tPset_SystemFurnitureElementTypeSubrack.NumberOfOccupiedUnits[Type]\tINTEGER\t\t679\t1\tIfcCountMeasure\t1\nPARAM\t1c3d50a4-31db-4908-84c0-cf7385cd2bba\tPset_SystemFurnitureElementTypeSubrack.NumberOfSlots[Type]\tINTEGER\t\t679\t1\tIfcCountMeasure\t1\nPARAM\t7430eea5-ea67-4279-83b1-6123328fa8ae\tPset_SystemFurnitureElementTypeSubrack.NumberOfUnits[Type]\tINTEGER\t\t679\t1\tIfcCountMeasure\t1\n#\nGROUP\t680\tPset_SystemFurnitureElementTypeWorkSurface\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tddd22059-4f67-4e41-82d4-498f40c206bb\tPset_SystemFurnitureElementTypeWorkSurface.HangingHeight[Type]\tLENGTH\t\t680\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc9648a2b-30d0-4265-b1c6-89b744f72fb3\tPset_SystemFurnitureElementTypeWorkSurface.NominalThickness[Type]\tLENGTH\t\t680\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t43f71aae-0966-4faf-a49e-31a204a33ebd\tPset_SystemFurnitureElementTypeWorkSurface.ShapeDescription[Type]\tTEXT\t\t680\t1\tIfcLabel\t1\nPARAM\tf65086c3-1217-4923-be21-549ab5995f92\tPset_SystemFurnitureElementTypeWorkSurface.SupportType[Type]\tTEXT\t\t680\t1\tPEnum_FurniturePanelType\t1\nPARAM\tfa63df89-fae1-4b4f-b7c0-79dacea981ef\tPset_SystemFurnitureElementTypeWorkSurface.UsePurpose[Type]\tTEXT\t\t680\t1\tIfcLabel\t1\n#\nGROUP\t681\tPset_TankOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8cd512f2-4b55-4e5d-9b6e-4de15854db8b\tPset_TankOccurrence.HasLadder[Type]\tYESNO\t\t681\t1\tIfcBoolean\t1\nPARAM\t798e4eee-bc4c-48e6-b586-eead4e044faf\tPset_TankOccurrence.HasVisualIndicator[Type]\tYESNO\t\t681\t1\tIfcBoolean\t1\nPARAM\t6c510b56-1ed5-408d-bfe0-d3827db3bed8\tPset_TankOccurrence.TankComposition[Type]\tTEXT\t\t681\t1\tPEnum_TankComposition\t1\n#\nGROUP\t682\tPset_TankPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t378163f1-8836-4fbd-9f31-f7ca704a5683\tPset_TankPHistory.Level[Type]\tMULTILINETEXT\t\t682\t1\tIfcTimeSeries\t1\nPARAM\t4ea75dc3-96c6-49da-9548-bcc043033b2a\tPset_TankPHistory.Pressure[Type]\tNUMBER\t\t682\t1\tIfcPressureMeasure\t1\nPARAM\t4ad6a732-d71b-489d-ab1c-e19b12b8dd23\tPset_TankPHistory.Temperature[Type]\tNUMBER\t\t682\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t683\tPset_TankTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t50574e88-76b8-4c49-bb26-9160f8ec7a68\tPset_TankTypeCommon.AccessType[Type]\tTEXT\t\t683\t1\tPEnum_TankAccessType\t1\nPARAM\t4dfc739c-f2f1-4b70-81d3-cc76437cc47f\tPset_TankTypeCommon.EffectiveCapacity[Type]\tVOLUME\t\t683\t1\tIfcVolumeMeasure\t1\nPARAM\t3a35ff3c-c28e-4063-9310-b96e6f5ca12c\tPset_TankTypeCommon.EndShapeType[Type]\tTEXT\t\t683\t1\tPEnum_EndShapeType\t1\nPARAM\tf2cfaa2f-c04b-4e31-9f0e-3d23b965262a\tPset_TankTypeCommon.FirstCurvatureRadius[Type]\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6fe458df-cd82-4d69-9433-4a99d9e02612\tPset_TankTypeCommon.Material[Type]\tMULTILINETEXT\t\t683\t1\tIfcMaterial\t1\nPARAM\td0734e88-06ad-44db-886c-078994df3f88\tPset_TankTypeCommon.MaterialThickness[Type]\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t45c24c0d-d642-4e8e-a779-9422a58b9ff2\tPset_TankTypeCommon.NominalCapacity[Type]\tVOLUME\t\t683\t1\tIfcVolumeMeasure\t1\nPARAM\t25f72821-9111-4717-bd25-802f5487c7f8\tPset_TankTypeCommon.NominalDepth[Type]\tLENGTH\t\t683\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t81b9963b-d1ab-4069-a632-2c8b29397818\tPset_TankTypeCommon.NominalLengthOrDiameter[Type]\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta4cf9dbd-a3a0-47c2-8c11-d2aad3e76fd4\tPset_TankTypeCommon.NominalWidthOrDiameter[Type]\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t389d9d23-bc4e-4058-b1e0-c7d02b24a9b4\tPset_TankTypeCommon.NumberOfSections[Type]\tINTEGER\t\t683\t1\tIfcCountMeasure\t1\nPARAM\t1ba7a7fd-7079-456d-980d-abf6edd98ef6\tPset_TankTypeCommon.OperatingWeight[Type]\tNUMBER\t\t683\t1\tIfcMassMeasure\t1\nPARAM\t31e0ea98-5f08-4726-bceb-1ea310ddb8bb\tPset_TankTypeCommon.PatternType[Type]\tTEXT\t\t683\t1\tPEnum_TankPatternType\t1\nPARAM\tc6be49c1-248d-4f5f-a9bc-1b38cc6dd31d\tPset_TankTypeCommon.Reference[Type]\tTEXT\t\t683\t1\tIfcIdentifier\t1\nPARAM\t69d072fc-4811-40d1-999d-38a3fa8b8e8b\tPset_TankTypeCommon.SecondCurvatureRadius[Type]\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb80e303f-3f02-4754-9038-2e8f9e086739\tPset_TankTypeCommon.Status[Type]\tTEXT\t\t683\t1\tPEnum_ElementStatus\t1\nPARAM\t8300e409-142a-4e56-a8ab-98f2966de8e6\tPset_TankTypeCommon.StorageType[Type]\tTEXT\t\t683\t1\tPEnum_TankStorageType\t1\nPARAM\te3e2f1c8-d216-492e-9d28-9558c46fecd1\tPset_TankTypeCommon.TankNominalCapacity[Type]\tVOLUME\t\t683\t1\tIfcVolumeMeasure\t1\nPARAM\t8dbc07fa-a637-42d2-ade3-610b8442e5fa\tPset_TankTypeCommon.Type[Type]\tTEXT\t\t683\t1\tPEnum_TankType\t1\n#\nGROUP\t684\tPset_TankTypeExpansion\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tece7f7cf-d205-499b-9d1a-e0652654385a\tPset_TankTypeExpansion.ChargePressure[Type]\tNUMBER\t\t684\t1\tIfcPressureMeasure\t1\nPARAM\t4134564b-abc5-455d-8495-56743b28bae9\tPset_TankTypeExpansion.PressureRegulatorSetting[Type]\tNUMBER\t\t684\t1\tIfcPressureMeasure\t1\nPARAM\t7488352d-f7fc-4d11-b0c1-1d1b3bd97cae\tPset_TankTypeExpansion.ReliefValveSetting[Type]\tNUMBER\t\t684\t1\tIfcPressureMeasure\t1\n#\nGROUP\t685\tPset_TankTypePreformed\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta7777559-b2f6-4104-a756-9acd8f6ec51e\tPset_TankTypePreformed.EndShapeType[Type]\tTEXT\t\t685\t1\tPEnum_EndShapeType\t1\nPARAM\t065952a9-7794-405f-b04b-9575b114db9e\tPset_TankTypePreformed.FirstCurvatureRadius[Type]\tLENGTH\t\t685\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdb06852e-b7d8-42e1-9757-5d67caa9bbfa\tPset_TankTypePreformed.PatternType[Type]\tTEXT\t\t685\t1\tPEnum_TankPatternType\t1\nPARAM\tba3ca46c-cdb7-4114-b7b4-c598a729459d\tPset_TankTypePreformed.SecondCurvatureRadius[Type]\tLENGTH\t\t685\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t686\tPset_TankTypePressureVessel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0da30f05-5893-4fae-a394-cd99f11e5303\tPset_TankTypePressureVessel.ChargePressure[Type]\tNUMBER\t\t686\t1\tIfcPressureMeasure\t1\nPARAM\td87e1fa3-0543-42c9-9d39-d2ce5f8b2bb1\tPset_TankTypePressureVessel.PressureRegulatorSetting[Type]\tNUMBER\t\t686\t1\tIfcPressureMeasure\t1\nPARAM\te91437f0-8df5-450e-a601-2ada7e855202\tPset_TankTypePressureVessel.ReliefValveSetting[Type]\tNUMBER\t\t686\t1\tIfcPressureMeasure\t1\n#\nGROUP\t687\tPset_TankTypeSectional\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4cdda3cf-5033-41a3-b74f-57a30fc1f10f\tPset_TankTypeSectional.NumberOfSections[Type]\tINTEGER\t\t687\t1\tIfcCountMeasure\t1\nPARAM\td7cf153d-fcf6-4f41-bab7-bede03c77a84\tPset_TankTypeSectional.SectionLength[Type]\tLENGTH\t\t687\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taa39e89d-88f2-471a-a49f-96279396327f\tPset_TankTypeSectional.SectionWidth[Type]\tLENGTH\t\t687\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t688\tPset_TelecomCableGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t55f48db9-8fdf-4040-88eb-8eaaeae7d5b2\tPset_TelecomCableGeneral.Attenuation[Type]\tNUMBER\t\t688\t1\tIfcReal\t1\nPARAM\t52d28b46-c3a8-40f3-ab9e-a5b2fdf41c94\tPset_TelecomCableGeneral.CableArmourType[Type]\tTEXT\t\t688\t1\tPEnum_CableArmourType\t1\nPARAM\ta105b90c-411b-4318-991e-39a5819e6b8f\tPset_TelecomCableGeneral.CableFunctionType[Type]\tTEXT\t\t688\t1\tPEnum_CableFunctionType\t1\nPARAM\td9ca0692-7096-46f2-ab1e-49ab8b5c01de\tPset_TelecomCableGeneral.FireRating[Type]\tTEXT\t\t688\t1\tIfcLabel\t1\nPARAM\tf3a49ed8-6c03-4514-a878-6970e7f12d63\tPset_TelecomCableGeneral.IsFireResistant[Type]\tYESNO\t\t688\t1\tIfcBoolean\t1\nPARAM\t76e07ffe-2a39-45e3-886e-2d873babd483\tPset_TelecomCableGeneral.JacketColour[Type]\tTEXT\t\t688\t1\tIfcLabel\t1\nPARAM\teb0071ea-103c-4e60-b74e-37010ebe1e4c\tPset_TelecomCableGeneral.NominalDiameter[Type]\tLENGTH\t\t688\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t689\tPset_TendonAnchorCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta661c755-9eb3-4f32-bb14-a28442b6c5e1\tPset_TendonAnchorCommon.Reference[Type]\tTEXT\t\t689\t1\tIfcIdentifier\t1\nPARAM\t32b6754e-909f-4127-b95a-6d989ad3919c\tPset_TendonAnchorCommon.Status[Type]\tTEXT\t\t689\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t690\tPset_TendonCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta0dca432-aea5-42ea-8195-8b8e3cea7764\tPset_TendonCommon.AnchorageSlip[Type]\tLENGTH\t\t690\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t466f4d16-cdfc-4183-82f6-e8815057878b\tPset_TendonCommon.FrictionCoefficient[Type]\tNUMBER\t\t690\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t9394e05f-2634-4706-9126-406fe8f16c24\tPset_TendonCommon.MinCurvatureRadius[Type]\tLENGTH\t\t690\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te4c6e3dc-7846-4eba-98e3-5c11752006a3\tPset_TendonCommon.NominalDiameter[Type]\tLENGTH\t\t690\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tef76a45b-ad19-4cdc-a4a1-6203d61ff373\tPset_TendonCommon.PreStress[Type]\tNUMBER\t\t690\t1\tIfcPressureMeasure\t1\nPARAM\tde2f52ef-4836-4840-bde1-1988f697e2dd\tPset_TendonCommon.Reference[Type]\tTEXT\t\t690\t1\tIfcIdentifier\t1\nPARAM\t0f69819a-0c6b-4cab-9407-7d331f268f89\tPset_TendonCommon.SheathDiameter[Type]\tLENGTH\t\t690\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t53536c2f-707b-44ef-b97e-4171aefb3c6f\tPset_TendonCommon.Status[Type]\tTEXT\t\t690\t1\tPEnum_ElementStatus\t1\nPARAM\t7763ab09-055a-46f8-9ffc-49f0cbdb042e\tPset_TendonCommon.TensionForce[Type]\tNUMBER\t\t690\t1\tIfcForceMeasure\t1\n#\nGROUP\t691\tPset_ThermalLoad\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tca20c383-10df-420d-a408-9ee758a27bcf\tPset_ThermalLoad.ApplianceDiversity[Type]\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc92bf4f4-0aca-40fc-8fae-2fe1b3d72e29\tPset_ThermalLoad.AppliancePercentLoadToRadiant[Type]\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tbfb6e7e0-d34f-4942-8425-05bb98cf97de\tPset_ThermalLoad.InfiltrationDiversitySummer[Type]\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5ba18026-7589-4364-b512-4df985724466\tPset_ThermalLoad.InfiltrationDiversityWinter[Type]\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t49a8f8d3-81ae-45b3-8c9f-3efbacb900fb\tPset_ThermalLoad.LightingDiversity[Type]\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5d279ca5-c880-4257-ac10-6f04b7c7ee5e\tPset_ThermalLoad.LightingLoadIntensity[Type]\tNUMBER\t\t691\t1\tIfcHeatFluxDensityMeasure\t1\nPARAM\t287ba948-c9be-4382-b282-bea676af830f\tPset_ThermalLoad.LightingPercentLoadToReturnAir[Type]\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tbb046741-bea9-4069-b559-2ebc4b5c1144\tPset_ThermalLoad.LoadSafetyFactor[Type]\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t67ca5c98-8cc9-4001-9aff-efe9b003628a\tPset_ThermalLoad.OccupancyDiversity[Type]\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc4d2f584-09b7-4504-a8b3-84005b89297d\tPset_ThermalLoad.OutsideAirPerPerson[Type]\tNUMBER\t\t691\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t01066e97-32cd-46ff-8da8-17bcd461978e\tPset_ThermalLoad.ReceptacleLoadIntensity[Type]\tNUMBER\t\t691\t1\tIfcHeatFluxDensityMeasure\t1\nPARAM\tbb98ce04-d29e-4a46-8f2b-e5504e218255\tPset_ThermalLoad.TotalCoolingLoad[Type]\tNUMBER\t\t691\t1\tIfcPowerMeasure\t1\nPARAM\t8e97ac63-e37d-43c5-a864-826559b810e4\tPset_ThermalLoad.TotalHeatingLoad[Type]\tNUMBER\t\t691\t1\tIfcPowerMeasure\t1\n#\nGROUP\t692\tPset_ThermalLoadAggregate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t53ecbe2f-995f-42b3-822b-4f2656e4d671\tPset_ThermalLoadAggregate.ApplianceDiversity[Type]\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t707a8182-3741-4b55-aa19-a37abd76410a\tPset_ThermalLoadAggregate.InfiltrationDiversitySummer[Type]\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7b62457c-a419-43ab-873e-7d8f905dec43\tPset_ThermalLoadAggregate.InfiltrationDiversityWinter[Type]\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t11175ebf-f7ef-44f9-83d6-94b27139ff07\tPset_ThermalLoadAggregate.LightingDiversity[Type]\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5a8a6a55-7a4f-4c0a-8e71-2d0847b00e16\tPset_ThermalLoadAggregate.LoadSafetyFactor[Type]\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4f2ee6ca-91f3-48dd-86be-c8e918f3b533\tPset_ThermalLoadAggregate.TotalCoolingLoad[Type]\tNUMBER\t\t692\t1\tIfcPowerMeasure\t1\nPARAM\t6b71c33b-5f63-42af-9367-3e5909182134\tPset_ThermalLoadAggregate.TotalHeatingLoad[Type]\tNUMBER\t\t692\t1\tIfcPowerMeasure\t1\n#\nGROUP\t693\tPset_ThermalLoadDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a301cf5-9dc0-476a-bc8f-83677e5ad636\tPset_ThermalLoadDesignCriteria.AppliancePercentLoadToRadiant[Type]\tNUMBER\t\t693\t1\tIfcPositiveRatioMeasure\t1\nPARAM\taab8801d-03d9-4d88-bf07-b26067c8a24f\tPset_ThermalLoadDesignCriteria.LightingLoadIntensity[Type]\tNUMBER\t\t693\t1\tIfcReal\t1\nPARAM\t3ace47a0-46e1-4f29-a341-d243806c6921\tPset_ThermalLoadDesignCriteria.LightingPercentLoadToReturnAir[Type]\tNUMBER\t\t693\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td293c61d-a288-4b45-87dd-4997bfcdb1e1\tPset_ThermalLoadDesignCriteria.OccupancyDiversity[Type]\tNUMBER\t\t693\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tbdafefd9-68a7-4c83-a8f9-9ed02a946f58\tPset_ThermalLoadDesignCriteria.OutsideAirPerPerson[Type]\tNUMBER\t\t693\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t6d5f9ffc-b6cc-4655-a3d0-bfcfe59c58ec\tPset_ThermalLoadDesignCriteria.ReceptacleLoadIntensity[Type]\tNUMBER\t\t693\t1\tIfcReal\t1\n#\nGROUP\t694\tPset_TicketProcessing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8f5036f4-1390-48e5-a79b-15e105168054\tPset_TicketProcessing.TicketProcessingTime[Type]\tNUMBER\t\t694\t1\tIfcTimeMeasure\t1\nPARAM\tc539c93e-2c7f-4a3d-bc47-84fd4b0f16b9\tPset_TicketProcessing.TicketStuckRatio[Type]\tNUMBER\t\t694\t1\tIfcRatioMeasure\t1\n#\nGROUP\t695\tPset_TicketVendingMachine\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta3c15f06-9f4c-4b6c-ac75-8fcf2fc99c30\tPset_TicketVendingMachine.MoneyStuckRatio[Type]\tNUMBER\t\t695\t1\tIfcRatioMeasure\t1\nPARAM\t4dcf74cb-2ba1-400a-944b-450152f520cd\tPset_TicketVendingMachine.PaymentMethod[Type]\tTEXT\t\t695\t1\tPEnum_PaymentMethod\t1\nPARAM\te1507f34-a593-4938-8c43-dadededf59a0\tPset_TicketVendingMachine.TicketProductionSpeed[Type]\tINTEGER\t\t695\t1\tIfcIntegerCountRateMeasure\t1\nPARAM\t01ae46f3-6ba9-454e-80dc-bb8468cb8a2d\tPset_TicketVendingMachine.TicketStuckRatio[Type]\tNUMBER\t\t695\t1\tIfcRatioMeasure\t1\nPARAM\t9f4e1fc6-04f9-43a3-a312-375673db25c8\tPset_TicketVendingMachine.TicketVendingMachineType[Type]\tTEXT\t\t695\t1\tPEnum_TicketVendingMachineType\t1\nPARAM\t17afbf00-0930-4314-a92d-6d3773fcb991\tPset_TicketVendingMachine.VendingMachineUserInterface[Type]\tTEXT\t\t695\t1\tPEnum_VendingMachineUserInterface\t1\n#\nGROUP\t696\tPset_Tiling\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4ca6ec36-27fa-49ff-ac56-2aa614a8a459\tPset_Tiling.Permeability[Type]\tNUMBER\t\t696\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t8b22c1ed-09d6-4a2c-b60c-6521347f7ddd\tPset_Tiling.TileLength[Type]\tLENGTH\t\t696\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t002dbe80-16da-42cd-aace-9f93a52f96ea\tPset_Tiling.TileWidth[Type]\tLENGTH\t\t696\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t697\tPset_Tolerance\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1ba23441-1ce3-4ebc-9360-13c57c238c53\tPset_Tolerance.ElevationalFlatness[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t812cd8f0-2e73-41a7-9e6a-b228ac29fc49\tPset_Tolerance.HorizontalFlatness[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc9486fe4-b2cd-4034-a070-3bed92705c1b\tPset_Tolerance.HorizontalOrthogonality[Type]\tNUMBER\t\t697\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t03b14383-82f9-489b-8e9d-a38ad8a4c24e\tPset_Tolerance.HorizontalStraightness[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tddfb34e0-b8fc-4d61-8cb0-5599373edfb8\tPset_Tolerance.HorizontalTolerance[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tec77da3a-9f8e-45ec-9684-a11fe16daf8c\tPset_Tolerance.OrthogonalOrthogonality[Type]\tNUMBER\t\t697\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t94947102-020f-4245-bcfe-09d24871601a\tPset_Tolerance.OrthogonalStraightness[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8440f5b1-b716-4822-b1e4-fb0e14d36b32\tPset_Tolerance.OrthogonalTolerance[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdfe3b452-9651-4a44-92a8-7c0a7bdf078d\tPset_Tolerance.OverallOrthogonality[Type]\tNUMBER\t\t697\t1\tIfcPlaneAngleMeasure\t1\nPARAM\td28e5cc7-f0b8-4e1c-8fd3-d30278fd3d8e\tPset_Tolerance.OverallStraightness[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf9203d76-2599-418c-9b00-7ee94b6e7f0e\tPset_Tolerance.OverallTolerance[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td1e9c6bc-ad74-44ec-8981-ffc48045fa93\tPset_Tolerance.PlanarFlatness[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td491cb3b-66c6-4131-aa93-99f495a6b71c\tPset_Tolerance.SideFlatness[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9d1497e6-2f40-4c85-acbe-fb02d8e81292\tPset_Tolerance.ToleranceBasis[Type]\tTEXT\t\t697\t1\tPEnum_ToleranceBasis\t1\nPARAM\t2753e231-217f-46cf-9c16-55a780609aa4\tPset_Tolerance.ToleranceDescription[Type]\tTEXT\t\t697\t1\tIfcText\t1\nPARAM\t16c9c5b3-0299-45b7-a642-0773a9fb3c8a\tPset_Tolerance.VerticalOrthogonality[Type]\tNUMBER\t\t697\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t5c66545e-2717-4f87-93cb-098f3be8ee26\tPset_Tolerance.VerticalStraightness[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3739d3c0-4687-40f5-9a07-2259266b98a3\tPset_Tolerance.VerticalTolerance[Type]\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t698\tPset_TrackBase\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf3a68ec3-7628-4de3-82fa-8d523b37c9e1\tPset_TrackBase.IsSurfaceGalling[Type]\tYESNO\t\t698\t1\tIfcBoolean\t1\nPARAM\tb96215d9-e3e5-483a-840f-e4269d753e8c\tPset_TrackBase.SurfaceGallingArea[Type]\tAREA\t\t698\t1\tIfcAreaMeasure\t1\n#\nGROUP\t699\tPset_TrackElementOccurrenceSleeper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3717c881-b306-434f-9565-49b6b1f27f46\tPset_TrackElementOccurrenceSleeper.HasSpecialEquipment[Type]\tYESNO\t\t699\t1\tIfcBoolean\t1\nPARAM\teff1ac77-26c5-41d7-993c-b4c70554bbf7\tPset_TrackElementOccurrenceSleeper.IsContaminatedSleeper[Type]\tYESNO\t\t699\t1\tIfcBoolean\t1\nPARAM\te66e3117-4294-4153-8d04-90bc059bf2c7\tPset_TrackElementOccurrenceSleeper.SequenceInTrackPanel[Type]\tINTEGER\t\t699\t1\tIfcInteger\t1\nPARAM\td3da3444-1f72-4822-8a7b-0fc7b87304e0\tPset_TrackElementOccurrenceSleeper.UnderSleeperPadStiffness[Type]\tTEXT\t\t699\t1\tPEnum_UnderSleeperPadStiffness\t1\n#\nGROUP\t700\tPset_TrackElementPHistoryDerailer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t111f50ea-8b2f-454a-8648-a7e579c665da\tPset_TrackElementPHistoryDerailer.IsDerailing[Type]\tMULTILINETEXT\t\t700\t1\tIfcTimeSeries\t1\n#\nGROUP\t701\tPset_TrackElementTypeDerailer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7facc0c6-eca9-458e-a819-048e6d6a698c\tPset_TrackElementTypeDerailer.AppliedLineLoad[Type]\tNUMBER\t\t701\t1\tIfcMassPerLengthMeasure\t1\nPARAM\t005b1ab8-9908-4702-af15-f73d4a28000a\tPset_TrackElementTypeDerailer.DerailmentHeight[Type]\tLENGTH\t\t701\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2a7e332d-49a9-41d1-a1d8-fd6ccb63e700\tPset_TrackElementTypeDerailer.DerailmentMaximumSpeedLimit[Type]\tNUMBER\t\t701\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t7cefd667-f8ba-47ee-808e-2defaf2b8eea\tPset_TrackElementTypeDerailer.DerailmentWheelDiameter[Type]\tLENGTH\t\t701\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t702\tPset_TrackElementTypeSleeper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdd82ff15-8940-4aaa-b557-42bfde5a8837\tPset_TrackElementTypeSleeper.FasteningType[Type]\tTEXT\t\t702\t1\tIfcLabel\t1\nPARAM\t947b9865-2ef0-43d6-83bf-3716833ce850\tPset_TrackElementTypeSleeper.HollowSleeperUsage[Type]\tTEXT\t\t702\t1\tIfcLabel\t1\nPARAM\t6b9ba9fb-3ff1-41e9-a5ab-530449878faa\tPset_TrackElementTypeSleeper.InstalledCondition[Type]\tTEXT\t\t702\t1\tPEnum_InstalledCondition\t1\nPARAM\tfd566990-a168-46e3-9d80-2945fb214c4e\tPset_TrackElementTypeSleeper.IsElectricallyInsulated[Type]\tYESNO\t\t702\t1\tIfcBoolean\t1\nPARAM\te17c18fe-7d7a-41a7-83c6-0e5fdccdcda2\tPset_TrackElementTypeSleeper.IsHollowSleeper[Type]\tYESNO\t\t702\t1\tIfcBoolean\t1\nPARAM\tc454d54f-6bb3-402c-ab19-d74f12b76a7d\tPset_TrackElementTypeSleeper.NumberOfTrackCenters[Type]\tINTEGER\t\t702\t1\tIfcCountMeasure\t1\nPARAM\t48a3da65-d827-4ce6-97a1-0f45591dd630\tPset_TrackElementTypeSleeper.SleeperType[Type]\tTEXT\t\t702\t1\tPEnum_SleeperType\t1\nPARAM\t54b518bc-a7f7-43cb-a857-4a4918098a40\tPset_TrackElementTypeSleeper.TechnicalStandard[Type]\tMULTILINETEXT\t\t702\t1\tIfcExternalReference\t1\n#\nGROUP\t703\tPset_TractionPowerSystem\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta8021703-868e-48a4-85fa-8977e4348a01\tPset_TractionPowerSystem.ElectrificationType[Type]\tTEXT\t\t703\t1\tPEnum_ElectrificationType\t1\nPARAM\tba6e69cd-0904-43d0-b41d-08f0ffec5ef0\tPset_TractionPowerSystem.NominalVoltage[Type]\tNUMBER\t\t703\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t8207980a-9427-4a95-bd74-d7a4c2a5277b\tPset_TractionPowerSystem.PowerSupplyMode[Type]\tTEXT\t\t703\t1\tPEnum_PowerSupplyMode\t1\nPARAM\t8fc511b5-968b-4cbf-a34b-5660f5a44f86\tPset_TractionPowerSystem.RatedFrequency[Type]\tNUMBER\t\t703\t1\tIfcFrequencyMeasure\t1\n#\nGROUP\t704\tPset_TrafficCalmingDeviceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8c69d42f-981e-462f-8ea6-889b0f37d54d\tPset_TrafficCalmingDeviceCommon.TypeDesignation[Type]\tTEXT\t\t704\t1\tIfcLabel\t1\n#\nGROUP\t705\tPset_TransformerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7579e475-6187-465d-91a4-dc117258aa4a\tPset_TransformerTypeCommon.EfficiencyCurve[Type]\tMULTILINETEXT\t\t705\t1\tPropertyTableValue\t1\nPARAM\te92119d7-8983-4943-be01-76e8692b5f56\tPset_TransformerTypeCommon.ImaginaryImpedanceRatio[Type]\tNUMBER\t\t705\t1\tIfcRatioMeasure\t1\nPARAM\ta968bda1-bb45-4569-ba77-3e6b9be77bae\tPset_TransformerTypeCommon.IsNeutralPrimaryTerminalAvailable[Type]\tYESNO\t\t705\t1\tIfcBoolean\t1\nPARAM\t0be00804-31d2-4c05-9c35-03f15fbb8ded\tPset_TransformerTypeCommon.IsNeutralSecondaryTerminalAvailable[Type]\tYESNO\t\t705\t1\tIfcBoolean\t1\nPARAM\tdee251ba-4aa4-4596-b3d8-7bf1e143def2\tPset_TransformerTypeCommon.MaximumApparentPower[Type]\tNUMBER\t\t705\t1\tIfcPowerMeasure\t1\nPARAM\t6d97b484-1ef5-45e9-aea2-c48292d47127\tPset_TransformerTypeCommon.PrimaryApparentPower[Type]\tNUMBER\t\t705\t1\tIfcPowerMeasure\t1\nPARAM\t6502bf69-d306-49c3-b835-67ed44916b01\tPset_TransformerTypeCommon.PrimaryCurrent[Type]\tNUMBER\t\t705\t1\tIfcElectricCurrentMeasure\t1\nPARAM\ta4892b15-c688-471b-bc64-f65db26929ad\tPset_TransformerTypeCommon.PrimaryFrequency[Type]\tNUMBER\t\t705\t1\tIfcFrequencyMeasure\t1\nPARAM\tf3158018-b20d-4b88-884d-54aef2746b21\tPset_TransformerTypeCommon.PrimaryVoltage[Type]\tNUMBER\t\t705\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t7a1f01ee-e40e-4d96-b0d2-b510d1df993a\tPset_TransformerTypeCommon.RadiativeFraction[Type]\tNUMBER\t\t705\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t2a9253f8-1ac5-4cbc-b8e3-fc80b51e50d6\tPset_TransformerTypeCommon.RealImpedanceRatio[Type]\tNUMBER\t\t705\t1\tIfcRatioMeasure\t1\nPARAM\te91bfd74-f8f4-475c-85f6-4638b7c9d768\tPset_TransformerTypeCommon.Reference[Type]\tTEXT\t\t705\t1\tIfcIdentifier\t1\nPARAM\t405d0030-1d68-45a5-a305-c27a27cc50d6\tPset_TransformerTypeCommon.SecondaryApparentPower[Type]\tNUMBER\t\t705\t1\tIfcPowerMeasure\t1\nPARAM\tecb337bf-6b31-4797-bea7-f0ff14372a07\tPset_TransformerTypeCommon.SecondaryCurrent[Type]\tNUMBER\t\t705\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tf1378dcb-9e4d-45d0-af7e-2bd27ac92137\tPset_TransformerTypeCommon.SecondaryCurrentType[Type]\tTEXT\t\t705\t1\tPEnum_SecondaryCurrentType\t1\nPARAM\t8b412e32-67ef-4c30-bbbb-55d6a14581bb\tPset_TransformerTypeCommon.SecondaryFrequency[Type]\tNUMBER\t\t705\t1\tIfcFrequencyMeasure\t1\nPARAM\t56d5b2ef-1385-4315-b839-8b71eaef5f35\tPset_TransformerTypeCommon.SecondaryVoltage[Type]\tNUMBER\t\t705\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t52104f0d-16c4-4c57-85bf-ce431a24a05e\tPset_TransformerTypeCommon.ShortCircuitVoltage[Type]\tMULTILINETEXT\t\t705\t1\tIfcComplexNumber\t1\nPARAM\tbf7acad1-9cf7-4c69-a72a-cec5a8abee6d\tPset_TransformerTypeCommon.Status[Type]\tTEXT\t\t705\t1\tPEnum_ElementStatus\t1\nPARAM\t3efcd830-403d-4785-9f14-e2ca08cea10a\tPset_TransformerTypeCommon.TransformerVectorGroup[Type]\tTEXT\t\t705\t1\tPEnum_TransformerVectorGroup\t1\n#\nGROUP\t706\tPset_TransitionSectionCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t882b2885-77ad-425d-bee0-cd798f2b0053\tPset_TransitionSectionCommon.NominalLength[Type]\tLENGTH\t\t706\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t707\tPset_TransportElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcf7cac39-8714-4027-9d9e-18b53910d2a6\tPset_TransportElementCommon.CapacityPeople[Type]\tINTEGER\t\t707\t1\tIfcCountMeasure\t1\nPARAM\t41621dac-8d51-4bbe-9876-6618dda18907\tPset_TransportElementCommon.CapacityWeight[Type]\tNUMBER\t\t707\t1\tIfcMassMeasure\t1\nPARAM\t66416a21-d85a-460d-a0d6-de213474da91\tPset_TransportElementCommon.FireExit[Type]\tYESNO\t\t707\t1\tIfcBoolean\t1\nPARAM\t383c73ea-357f-4123-920a-24b680bacd0f\tPset_TransportElementCommon.Reference[Type]\tTEXT\t\t707\t1\tIfcIdentifier\t1\nPARAM\t8f02356c-f51e-4149-a4cd-b779ff0923a9\tPset_TransportElementCommon.Status[Type]\tTEXT\t\t707\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t708\tPset_TransportElementElevator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc75cf7d2-267e-4e84-b5a1-67431a126de8\tPset_TransportElementElevator.ClearDepth[Type]\tLENGTH\t\t708\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t49b09e3a-239a-42a1-87b6-db12ede946b2\tPset_TransportElementElevator.ClearHeight[Type]\tLENGTH\t\t708\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4fea65e0-2683-423a-9b80-ccdbfa3d3433\tPset_TransportElementElevator.ClearWidth[Type]\tLENGTH\t\t708\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta9037eda-7492-4674-b78e-14cbdb911cd1\tPset_TransportElementElevator.FireFightingLift[Type]\tYESNO\t\t708\t1\tIfcBoolean\t1\n#\nGROUP\t709\tPset_TransportEquipmentOTN\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7629003c-2135-4e95-9e9d-ff6433906b67\tPset_TransportEquipmentOTN.ChromaticDispersionTolerance[Type]\tNUMBER\t\t709\t1\tIfcReal\t1\nPARAM\tfeca47c8-4b46-4840-9ac2-1b6ede4d8252\tPset_TransportEquipmentOTN.EquipmentCapacity[Type]\tINTEGER\t\t709\t1\tIfcIntegerCountRateMeasure\t1\nPARAM\te8f41cff-0376-47a7-a365-2210a10f9031\tPset_TransportEquipmentOTN.MinimumOpticalSignalToNoiseRatio[Type]\tNUMBER\t\t709\t1\tIfcRatioMeasure\t1\nPARAM\tf2c3d3e3-a0c0-4aaa-b65d-8ce20cd256c3\tPset_TransportEquipmentOTN.PolarizationModeDispersionTolerance[Type]\tNUMBER\t\t709\t1\tIfcTimeMeasure\t1\nPARAM\t15be4602-49ae-4dae-8e29-2e4e00939f52\tPset_TransportEquipmentOTN.SingleChannelAveragePower[Type]\tNUMBER\t\t709\t1\tIfcPowerMeasure\t1\nPARAM\tec734471-b866-4aa6-b49f-34acd9a32a00\tPset_TransportEquipmentOTN.SingleChannelPower[Type]\tMULTILINETEXT\t\t709\t1\tPropertyBoundedValue\t1\nPARAM\t4789dec4-7f19-4a4f-ad72-baa974ed1345\tPset_TransportEquipmentOTN.SingleWaveTransmissionRate[Type]\tNUMBER\t\t709\t1\tIfcFrequencyMeasure\t1\n#\nGROUP\t710\tPset_TrenchExcavationCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8b20b947-46be-4c17-97a1-b7e25442be3a\tPset_TrenchExcavationCommon.NominalDepth[Type]\tLENGTH\t\t710\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t2cffef41-555a-4156-9c4c-68040fc90e3b\tPset_TrenchExcavationCommon.NominalWidth[Type]\tLENGTH\t\t710\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t711\tPset_TubeBundleTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td50cefe5-d693-4bb9-9100-c5c01a389723\tPset_TubeBundleTypeCommon.FoulingFactor[Type]\tNUMBER\t\t711\t1\tIfcThermalResistanceMeasure\t1\nPARAM\tddb119f7-839b-45a9-9a9a-b9d0887fbee0\tPset_TubeBundleTypeCommon.HasTurbulator[Type]\tYESNO\t\t711\t1\tIfcBoolean\t1\nPARAM\t2f5d00b1-01e9-45c7-8a3b-ee315b312159\tPset_TubeBundleTypeCommon.HorizontalSpacing[Type]\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5b661149-08f0-40a6-bc96-452924db5b63\tPset_TubeBundleTypeCommon.InLineRowSpacing[Type]\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te8b6bb24-3ddf-4ac6-bbaf-7019d337eb6b\tPset_TubeBundleTypeCommon.InsideDiameter[Type]\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t47821133-266b-4272-992f-bf8ed6353d5e\tPset_TubeBundleTypeCommon.Length[Type]\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3addc9a9-9ade-45ed-91e0-d80c6376806b\tPset_TubeBundleTypeCommon.Material[Type]\tMULTILINETEXT\t\t711\t1\tIfcMaterial\t1\nPARAM\t5ccd6074-6a18-4f47-b2e8-a72cd791c409\tPset_TubeBundleTypeCommon.NominalDiameter[Type]\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tba4e8f8b-6944-489d-ad79-60980f0fe275\tPset_TubeBundleTypeCommon.NumberOfCircuits[Type]\tINTEGER\t\t711\t1\tIfcCountMeasure\t1\nPARAM\td87f5a9a-e91a-452f-9c81-c1fb18a29c9c\tPset_TubeBundleTypeCommon.NumberOfRows[Type]\tINTEGER\t\t711\t1\tIfcCountMeasure\t1\nPARAM\tb6010939-3f57-4330-9ac4-c02c2024fe5e\tPset_TubeBundleTypeCommon.OutsideDiameter[Type]\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc21ab28a-15e1-425b-86d2-494f851ab5c0\tPset_TubeBundleTypeCommon.Reference[Type]\tTEXT\t\t711\t1\tIfcIdentifier\t1\nPARAM\taecf484e-95a3-4d86-a316-a7d6f5a0565d\tPset_TubeBundleTypeCommon.StaggeredRowSpacing[Type]\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te4fe280e-cbb6-4322-8398-c4aff96260fc\tPset_TubeBundleTypeCommon.Status[Type]\tTEXT\t\t711\t1\tPEnum_ElementStatus\t1\nPARAM\t4f4c864b-7404-4d00-aaca-7af150903591\tPset_TubeBundleTypeCommon.ThermalConductivity[Type]\tNUMBER\t\t711\t1\tIfcThermalConductivityMeasure\t1\nPARAM\td1c9c4ad-35fc-4376-9048-e82d1396deaa\tPset_TubeBundleTypeCommon.VerticalSpacing[Type]\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb51b2aec-3d61-428e-9c61-9aa45f63d0b7\tPset_TubeBundleTypeCommon.Volume[Type]\tVOLUME\t\t711\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t712\tPset_TubeBundleTypeFinned\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te587be47-8e02-4d24-be10-5bd09c160d42\tPset_TubeBundleTypeFinned.Diameter[Type]\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td8ce4155-0b9b-4d8e-848b-c056ce4da026\tPset_TubeBundleTypeFinned.FinCorrugatedType[Type]\tTEXT\t\t712\t1\tIfcLabel\t1\nPARAM\ta719874a-c073-4de7-996e-81927a76f0a4\tPset_TubeBundleTypeFinned.HasCoating[Type]\tYESNO\t\t712\t1\tIfcBoolean\t1\nPARAM\tcd65f524-c47a-4bcb-8e10-f21f719a17af\tPset_TubeBundleTypeFinned.Height[Type]\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbe6c0454-4f76-46fc-9b94-4460557f7ecc\tPset_TubeBundleTypeFinned.Length[Type]\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te8716347-649b-4483-bc10-a94b58e7c4c0\tPset_TubeBundleTypeFinned.Material[Type]\tMULTILINETEXT\t\t712\t1\tIfcMaterial\t1\nPARAM\tf5677b8a-5605-4c1a-9b7b-4ff457223557\tPset_TubeBundleTypeFinned.Spacing[Type]\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t78ffe776-6066-4930-a486-5deadf33a5f3\tPset_TubeBundleTypeFinned.ThermalConductivity[Type]\tNUMBER\t\t712\t1\tIfcThermalConductivityMeasure\t1\nPARAM\ta7ef5596-81d1-45bc-aa42-46ee7847ed89\tPset_TubeBundleTypeFinned.Thickness[Type]\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t713\tPset_Uncertainty\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t364f3141-c20c-412e-b04a-cafde0e5a8f2\tPset_Uncertainty.HorizontalUncertainty[Type]\tLENGTH\t\t713\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1e0d99a0-d4a8-43d2-b470-c7dbbe0fcc02\tPset_Uncertainty.LinearUncertainty[Type]\tLENGTH\t\t713\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32877faf-d5bf-49e7-837a-e38166aa5b29\tPset_Uncertainty.OrthogonalUncertainty[Type]\tLENGTH\t\t713\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t10771f04-2366-4a4d-90f4-7bb7ab01e103\tPset_Uncertainty.UncertaintyBasis[Type]\tTEXT\t\t713\t1\tPEnum_UncertaintyBasis\t1\nPARAM\tebdc2c3f-d9e6-415d-b385-70de3585aa07\tPset_Uncertainty.UncertaintyDescription[Type]\tTEXT\t\t713\t1\tIfcText\t1\nPARAM\tfeb19861-42bb-4f6b-ba07-f09cb20f23be\tPset_Uncertainty.VerticalUncertainty[Type]\tLENGTH\t\t713\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t714\tPset_UnitaryControlElementBaseStationController\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3dac3023-e3cb-4d76-87d3-f9b95dc038fd\tPset_UnitaryControlElementBaseStationController.NumberOfInterfaces[Type]\tMULTILINETEXT\t\t714\t1\tPropertyTableValue\t1\nPARAM\t20ba2c64-3fd7-4fd3-99b1-5d00813e591c\tPset_UnitaryControlElementBaseStationController.NumberOfManagedBTSs[Type]\tINTEGER\t\t714\t1\tIfcCountMeasure\t1\nPARAM\t7b56b4d5-d29b-465e-9e89-46ff25809711\tPset_UnitaryControlElementBaseStationController.NumberOfManagedCarriers[Type]\tINTEGER\t\t714\t1\tIfcCountMeasure\t1\n#\nGROUP\t715\tPset_UnitaryControlElementPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8fb10db9-639b-47ea-b545-28049657a683\tPset_UnitaryControlElementPHistory.Fan[Type]\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\nPARAM\t0c295158-b762-4c6d-b14d-7360f5d59aa3\tPset_UnitaryControlElementPHistory.Mode[Type]\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\nPARAM\t00d57d3a-8c98-40a7-ad50-6392742e62d4\tPset_UnitaryControlElementPHistory.OperationModeHistory[Type]\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\nPARAM\t7eb75f66-a2b4-4245-a151-cbce750bd7cf\tPset_UnitaryControlElementPHistory.SetPoint[Type]\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\nPARAM\teeea7c3b-5f20-4481-81a3-b835d7aa615e\tPset_UnitaryControlElementPHistory.Temperature[Type]\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\n#\nGROUP\t716\tPset_UnitaryControlElementTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf8c131f3-0776-4e3f-9c74-05ba161f8264\tPset_UnitaryControlElementTypeCommon.Mode[Type]\tMULTILINETEXT\t\t716\t1\tPropertyTableValue\t1\nPARAM\tfad827b8-c51a-41fe-a6e9-a52784499452\tPset_UnitaryControlElementTypeCommon.OperationMode[Type]\tMULTILINETEXT\t\t716\t1\tPropertyTableValue\t1\nPARAM\tfe0d9dd4-536c-445a-b3d0-82e2a1c672f7\tPset_UnitaryControlElementTypeCommon.Reference[Type]\tTEXT\t\t716\t1\tIfcIdentifier\t1\nPARAM\te5b546fc-37e9-4f97-814f-f6a50f40a6e4\tPset_UnitaryControlElementTypeCommon.Status[Type]\tTEXT\t\t716\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t717\tPset_UnitaryControlElementTypeControlPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tad674e0b-36fa-4dc9-b00d-a9438241c09d\tPset_UnitaryControlElementTypeControlPanel.NominalCurrent[Type]\tNUMBER\t\t717\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t4bec673a-669f-425c-b79f-14706c89b476\tPset_UnitaryControlElementTypeControlPanel.NominalPower[Type]\tNUMBER\t\t717\t1\tIfcPowerMeasure\t1\nPARAM\t040e62ee-d52a-4df6-ab88-8b3b5b988e9d\tPset_UnitaryControlElementTypeControlPanel.RatedVoltage[Type]\tMULTILINETEXT\t\t717\t1\tPropertyBoundedValue\t1\nPARAM\t01e1170e-d85c-43db-b1b5-103d47a6896d\tPset_UnitaryControlElementTypeControlPanel.ReferenceAirRelativeHumidity[Type]\tMULTILINETEXT\t\t717\t1\tPropertyBoundedValue\t1\nPARAM\t038d845f-9bea-4e3f-878c-d0224bbcfb9c\tPset_UnitaryControlElementTypeControlPanel.ReferenceEnvironmentTemperature[Type]\tMULTILINETEXT\t\t717\t1\tPropertyBoundedValue\t1\n#\nGROUP\t718\tPset_UnitaryControlElementTypeIndicatorPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5bf2d26b-a5bc-4cfc-b329-6c8d003a3911\tPset_UnitaryControlElementTypeIndicatorPanel.Application[Type]\tTEXT\t\t718\t1\tPEnum_UnitaryControlElementApplication\t1\nPARAM\t202238b1-09de-4149-acc4-c6ff9676ee0c\tPset_UnitaryControlElementTypeIndicatorPanel.UnitaryApplication[Type]\tTEXT\t\t718\t1\tPEnum_UnitaryControlElementApplication\t1\n#\nGROUP\t719\tPset_UnitaryControlElementTypeThermostat\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbff823c4-a3ca-4b5a-aeec-f868ce376d26\tPset_UnitaryControlElementTypeThermostat.TemperatureSetPoint[Type]\tMULTILINETEXT\t\t719\t1\tPropertyBoundedValue\t1\n#\nGROUP\t720\tPset_UnitaryEquipmentTypeAirConditioningUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td2d9d13d-efed-4405-a0d7-deb19b240294\tPset_UnitaryEquipmentTypeAirConditioningUnit.CondenserEnteringTemperature[Type]\tNUMBER\t\t720\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t5f78236e-9f14-4793-9945-db0dab71efde\tPset_UnitaryEquipmentTypeAirConditioningUnit.CondenserFlowrate[Type]\tNUMBER\t\t720\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tb194aba2-e483-4bf7-84cf-6423577f8a31\tPset_UnitaryEquipmentTypeAirConditioningUnit.CondenserLeavingTemperature[Type]\tNUMBER\t\t720\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t610d6eb6-d7d4-45bf-89a1-301b5d97dcfc\tPset_UnitaryEquipmentTypeAirConditioningUnit.CoolingEfficiency[Type]\tNUMBER\t\t720\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc0edd89e-a7cf-4211-8c9e-8c2889a9215a\tPset_UnitaryEquipmentTypeAirConditioningUnit.HeatingCapacity[Type]\tNUMBER\t\t720\t1\tIfcPowerMeasure\t1\nPARAM\t47330131-9d7e-4c19-8801-9f804c3d7b5b\tPset_UnitaryEquipmentTypeAirConditioningUnit.HeatingEfficiency[Type]\tNUMBER\t\t720\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf4cf9631-b88d-43d5-934b-7bed8c943336\tPset_UnitaryEquipmentTypeAirConditioningUnit.LatentCoolingCapacity[Type]\tNUMBER\t\t720\t1\tIfcPowerMeasure\t1\nPARAM\t511cb99f-a7c5-4c2c-a6c4-13a863c28f5d\tPset_UnitaryEquipmentTypeAirConditioningUnit.OutsideAirFlowrate[Type]\tNUMBER\t\t720\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t5dc8dd45-7758-4059-95b9-784f9d14b6a8\tPset_UnitaryEquipmentTypeAirConditioningUnit.SensibleCoolingCapacity[Type]\tNUMBER\t\t720\t1\tIfcPowerMeasure\t1\n#\nGROUP\t721\tPset_UnitaryEquipmentTypeAirHandler\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t73a5ba0a-c2eb-4471-908d-77619c05cc33\tPset_UnitaryEquipmentTypeAirHandler.AirHandlerConstruction[Type]\tTEXT\t\t721\t1\tPEnum_AirHandlerConstruction\t1\nPARAM\t36c02567-b6a2-403a-b43e-60241ff45992\tPset_UnitaryEquipmentTypeAirHandler.AirHandlerFanCoilArrangement[Type]\tTEXT\t\t721\t1\tPEnum_AirHandlerFanCoilArrangement\t1\nPARAM\tea216872-106f-4bf0-abe9-711d1a3064ba\tPset_UnitaryEquipmentTypeAirHandler.DualDeck[Type]\tYESNO\t\t721\t1\tIfcBoolean\t1\n#\nGROUP\t722\tPset_UnitaryEquipmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0a8cfd6b-bbe7-4d01-9db4-868cd9d820df\tPset_UnitaryEquipmentTypeCommon.Reference[Type]\tTEXT\t\t722\t1\tIfcIdentifier\t1\nPARAM\t11f7a12c-03a2-4aed-adf0-29ceef7a89f5\tPset_UnitaryEquipmentTypeCommon.Status[Type]\tTEXT\t\t722\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t723\tPset_UtilityConsumption\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0dd14c78-afe2-4327-b7bd-023f67688896\tPset_UtilityConsumption.Electricity[Type]\tTEXT\t\t723\t1\tIfcLabel\t1\nPARAM\td967f88e-d1a9-4790-890a-506ad312dee2\tPset_UtilityConsumption.Fuel[Type]\tTEXT\t\t723\t1\tIfcLabel\t1\nPARAM\t67a0fa38-c7a6-44d3-8d22-471433b77f06\tPset_UtilityConsumption.Heat[Type]\tTEXT\t\t723\t1\tIfcLabel\t1\nPARAM\t2b34af6f-2d29-479f-9704-3b8e94ac6cc8\tPset_UtilityConsumption.Steam[Type]\tTEXT\t\t723\t1\tIfcLabel\t1\nPARAM\t595e82a4-1f0e-4b3d-9804-88c15259f261\tPset_UtilityConsumption.Water[Type]\tTEXT\t\t723\t1\tIfcLabel\t1\n#\nGROUP\t724\tPset_UtilityConsumptionPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0dc1a818-9f6e-48fb-9998-fa8fdd72d7ff\tPset_UtilityConsumptionPHistory.Electricity[Type]\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\nPARAM\tbcb6226e-9c1a-4e57-b4a0-751a266ec6c7\tPset_UtilityConsumptionPHistory.Fuel[Type]\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\nPARAM\t7b9bcc75-c897-47b8-945c-b8ab49894fa8\tPset_UtilityConsumptionPHistory.Heat[Type]\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\nPARAM\t41d9ff16-6b3b-437d-969b-8d8f36947932\tPset_UtilityConsumptionPHistory.Steam[Type]\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\nPARAM\tc5d89d3e-0fb6-4a0d-a55b-8a02de736e0b\tPset_UtilityConsumptionPHistory.Water[Type]\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\n#\nGROUP\t725\tPset_ValvePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta46ee934-d6fd-4794-b8cc-e4de4da879e5\tPset_ValvePHistory.MeasuredFlowRate[Type]\tMULTILINETEXT\t\t725\t1\tIfcTimeSeries\t1\nPARAM\tbb36dacf-390c-4073-a25b-71b633adc57a\tPset_ValvePHistory.MeasuredPressureDrop[Type]\tMULTILINETEXT\t\t725\t1\tIfcTimeSeries\t1\nPARAM\tde6b1ed3-cd2e-4481-b1dd-90790c741243\tPset_ValvePHistory.PercentageOpen[Type]\tMULTILINETEXT\t\t725\t1\tIfcTimeSeries\t1\n#\nGROUP\t726\tPset_ValveTypeAirRelease\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1446b091-14ba-41d1-b683-cae34b1e22f2\tPset_ValveTypeAirRelease.IsAutomatic[Type]\tYESNO\t\t726\t1\tIfcBoolean\t1\n#\nGROUP\t727\tPset_ValveTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc0d2a818-2fbc-4002-a2d0-e43e804a31c4\tPset_ValveTypeCommon.BodyMaterial[Type]\tMULTILINETEXT\t\t727\t1\tIfcMaterial\t1\nPARAM\t46832b68-62d7-4921-904c-7340cba1424d\tPset_ValveTypeCommon.CloseOffRating[Type]\tNUMBER\t\t727\t1\tIfcPressureMeasure\t1\nPARAM\t5217feec-a686-456f-aae1-0e3c23cd5792\tPset_ValveTypeCommon.FlowCoefficient[Type]\tNUMBER\t\t727\t1\tIfcReal\t1\nPARAM\t03668c17-9d47-4296-9163-aca8dbfccfd8\tPset_ValveTypeCommon.OperatingMechanismMaterial[Type]\tMULTILINETEXT\t\t727\t1\tIfcMaterial\t1\nPARAM\t39139dd0-04b7-47ae-81d9-88695e6cf7c1\tPset_ValveTypeCommon.Reference[Type]\tTEXT\t\t727\t1\tIfcIdentifier\t1\nPARAM\ta398f930-bdc4-4f0a-9031-dd073f0754f0\tPset_ValveTypeCommon.Size[Type]\tLENGTH\t\t727\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta95b1e84-d6b4-47d2-b8f1-f50253070211\tPset_ValveTypeCommon.Status[Type]\tTEXT\t\t727\t1\tPEnum_ElementStatus\t1\nPARAM\t535324d0-9873-4292-8c9f-7a1e2e4c59d2\tPset_ValveTypeCommon.TestPressure[Type]\tNUMBER\t\t727\t1\tIfcPressureMeasure\t1\nPARAM\td63f4428-6658-49c5-bc11-6df330cbfb30\tPset_ValveTypeCommon.ValveMechanism[Type]\tTEXT\t\t727\t1\tPEnum_ValveMechanism\t1\nPARAM\t77661348-add5-496f-aa54-2d9c48535b10\tPset_ValveTypeCommon.ValveOperation[Type]\tTEXT\t\t727\t1\tPEnum_ValveOperation\t1\nPARAM\t28749f08-22ad-45fd-938c-2dbf2d2465d1\tPset_ValveTypeCommon.ValvePattern[Type]\tTEXT\t\t727\t1\tPEnum_ValvePattern\t1\nPARAM\t0c83a303-579d-4a44-bab8-e0b34cbaf778\tPset_ValveTypeCommon.WorkingPressure[Type]\tNUMBER\t\t727\t1\tIfcPressureMeasure\t1\n#\nGROUP\t728\tPset_ValveTypeDrawOffCock\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8b2788f8-09e7-4d4f-86ef-672762569543\tPset_ValveTypeDrawOffCock.HasHoseUnion[Type]\tYESNO\t\t728\t1\tIfcBoolean\t1\n#\nGROUP\t729\tPset_ValveTypeFaucet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te7ba2bf4-7c2d-4b2e-8c05-d0c67d24cd18\tPset_ValveTypeFaucet.FaucetFunction[Type]\tTEXT\t\t729\t1\tPEnum_FaucetFunction\t1\nPARAM\tdf261e97-2a4d-4566-8844-34322ce026d5\tPset_ValveTypeFaucet.FaucetOperation[Type]\tTEXT\t\t729\t1\tPEnum_FaucetOperation\t1\nPARAM\t18d77a63-2760-4529-9eef-d767e515db77\tPset_ValveTypeFaucet.FaucetTopDescription[Type]\tTEXT\t\t729\t1\tIfcText\t1\nPARAM\t6456435f-53ff-4ec9-bddd-b4172dbbec91\tPset_ValveTypeFaucet.FaucetType[Type]\tTEXT\t\t729\t1\tPEnum_FaucetType\t1\nPARAM\ta50a6923-f589-4e36-902b-5f8048198458\tPset_ValveTypeFaucet.Finish[Type]\tTEXT\t\t729\t1\tIfcText\t1\n#\nGROUP\t730\tPset_ValveTypeFlushing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t69bf465e-c63a-41be-93f6-a9c9b39b7a15\tPset_ValveTypeFlushing.FlushingRate[Type]\tNUMBER\t\t730\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tea7fd99d-dadf-4072-898a-8f50651d1567\tPset_ValveTypeFlushing.HasIntegralShutOffDevice[Type]\tYESNO\t\t730\t1\tIfcBoolean\t1\nPARAM\t86d7f5f8-e906-4ce6-a9bb-036afc666a20\tPset_ValveTypeFlushing.IsHighPressure[Type]\tYESNO\t\t730\t1\tIfcBoolean\t1\n#\nGROUP\t731\tPset_ValveTypeGasTap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb3a20ee8-2f3f-47d1-8a3f-f43e5f814900\tPset_ValveTypeGasTap.HasHoseUnion[Type]\tYESNO\t\t731\t1\tIfcBoolean\t1\n#\nGROUP\t732\tPset_ValveTypeIsolating\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t62577c71-ff37-4b21-be19-205c313b8662\tPset_ValveTypeIsolating.IsNormallyOpen[Type]\tYESNO\t\t732\t1\tIfcBoolean\t1\nPARAM\tc514aee8-38c3-472c-bb19-602b7df232f2\tPset_ValveTypeIsolating.IsolatingPurpose[Type]\tTEXT\t\t732\t1\tPEnum_IsolatingPurpose\t1\n#\nGROUP\t733\tPset_ValveTypeMixing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfa27377a-e1fd-4e12-9b80-c39bfb8b0690\tPset_ValveTypeMixing.MixerControl[Type]\tTEXT\t\t733\t1\tPEnum_MixingValveControl\t1\nPARAM\te0946bc5-2430-4d79-b1e7-2b3cc2d1ceac\tPset_ValveTypeMixing.OutletConnectionSize[Type]\tLENGTH\t\t733\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t734\tPset_ValveTypePressureReducing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t62d0563d-7e0c-4a4a-9dfe-c40c707445ce\tPset_ValveTypePressureReducing.DownstreamPressure[Type]\tNUMBER\t\t734\t1\tIfcPressureMeasure\t1\nPARAM\t715942a8-4e07-4ba1-824c-6ddbd76369af\tPset_ValveTypePressureReducing.UpstreamPressure[Type]\tNUMBER\t\t734\t1\tIfcPressureMeasure\t1\n#\nGROUP\t735\tPset_ValveTypePressureRelief\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t11d70827-02e3-44eb-a148-ad396fdf3e8e\tPset_ValveTypePressureRelief.ReliefPressure[Type]\tNUMBER\t\t735\t1\tIfcPressureMeasure\t1\n#\nGROUP\t736\tPset_VegetationCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc3c1230b-e1d8-4f9d-8502-dc4d390b1d09\tPset_VegetationCommon.BotanicalName[Type]\tTEXT\t\t736\t1\tIfcLabel\t1\nPARAM\t757e920f-6e93-4682-a72f-acf650f705d6\tPset_VegetationCommon.LocalName[Type]\tTEXT\t\t736\t1\tIfcLabel\t1\n#\nGROUP\t737\tPset_VehicleAvailability\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teab3c3d0-9ead-4e1f-8017-b92339cfccb3\tPset_VehicleAvailability.MaintenanceDowntime[Type]\tNUMBER\t\t737\t1\tIfcRatioMeasure\t1\nPARAM\tc5cee50a-52ce-4452-85a1-b9a18e82eb6e\tPset_VehicleAvailability.VehicleAvailability[Type]\tNUMBER\t\t737\t1\tIfcRatioMeasure\t1\nPARAM\t7bd387e3-d2f6-4b87-ba4c-c2528b5d87a1\tPset_VehicleAvailability.WeatherDowntime[Type]\tNUMBER\t\t737\t1\tIfcRatioMeasure\t1\n#\nGROUP\t738\tPset_VesselLineCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8aa78375-7dd8-4a95-a6e9-4b0220236225\tPset_VesselLineCommon.CentreLineToFairlead[Type]\tLENGTH\t\t738\t1\tIfcLengthMeasure\t1\nPARAM\t8b475031-2418-41b5-acab-671dc3982a4b\tPset_VesselLineCommon.FairleadToTermination[Type]\tLENGTH\t\t738\t1\tIfcLengthMeasure\t1\nPARAM\t0f61629d-6a6e-4498-a1f6-a833e90c12a8\tPset_VesselLineCommon.HeightAboveMainDeck[Type]\tLENGTH\t\t738\t1\tIfcLengthMeasure\t1\nPARAM\taf739a60-3750-4a98-a2e4-a4d2e7fe1538\tPset_VesselLineCommon.LineIdentifier[Type]\tTEXT\t\t738\t1\tIfcIdentifier\t1\nPARAM\t5990c5c9-5ecc-45cd-9a33-a93be7bb4da8\tPset_VesselLineCommon.LineStrength[Type]\tNUMBER\t\t738\t1\tIfcForceMeasure\t1\nPARAM\t598d80a8-2baa-4802-b275-dfbc98e524a0\tPset_VesselLineCommon.LineType[Type]\tTEXT\t\t738\t1\tIfcLabel\t1\nPARAM\t265f770d-e0ed-4b4b-97ff-59b7bd5a3548\tPset_VesselLineCommon.MidshipToFairLead[Type]\tLENGTH\t\t738\t1\tIfcLengthMeasure\t1\nPARAM\tacbace3c-cd93-4efb-84ea-f26b2bec0102\tPset_VesselLineCommon.PreTensionAim[Type]\tNUMBER\t\t738\t1\tIfcForceMeasure\t1\nPARAM\t712d0c1c-6bcc-4663-bd02-0bad66b4bdd9\tPset_VesselLineCommon.TailDiameter[Type]\tLENGTH\t\t738\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td2580dca-b20a-4f5c-adfb-b22d9c240929\tPset_VesselLineCommon.TailLength[Type]\tLENGTH\t\t738\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t51096cd7-f60e-4e0d-a3b0-f86e9081fe69\tPset_VesselLineCommon.TailStrength[Type]\tNUMBER\t\t738\t1\tIfcForceMeasure\t1\nPARAM\t860be241-7395-4dca-812a-1c632b7d69b7\tPset_VesselLineCommon.TailType[Type]\tTEXT\t\t738\t1\tIfcLabel\t1\nPARAM\t34c455ff-daa8-4ecd-8c1c-0b2d08677f17\tPset_VesselLineCommon.WinchBreakLimit[Type]\tNUMBER\t\t738\t1\tIfcForceMeasure\t1\n#\nGROUP\t739\tPset_VibrationIsolatorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf9c1d866-9483-4935-ad01-871a25c35881\tPset_VibrationIsolatorTypeCommon.Height[Type]\tLENGTH\t\t739\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9099ae5b-0fb8-4252-b477-8e8e9deec516\tPset_VibrationIsolatorTypeCommon.IsolatorCompressibility[Type]\tNUMBER\t\t739\t1\tIfcRatioMeasure\t1\nPARAM\t92407b43-4ff4-4edb-b642-d840bf25ca42\tPset_VibrationIsolatorTypeCommon.IsolatorStaticDeflection[Type]\tLENGTH\t\t739\t1\tIfcLengthMeasure\t1\nPARAM\t7277bb6d-f565-421b-ba41-d463cdfd94d9\tPset_VibrationIsolatorTypeCommon.Material[Type]\tMULTILINETEXT\t\t739\t1\tIfcMaterial\t1\nPARAM\td90da190-ea39-48d2-9019-b5e3ace9830a\tPset_VibrationIsolatorTypeCommon.MaximumSupportedWeight[Type]\tNUMBER\t\t739\t1\tIfcMassMeasure\t1\nPARAM\t69b5d12a-28c7-46ab-ba85-578c888de1b7\tPset_VibrationIsolatorTypeCommon.NominalHeight[Type]\tLENGTH\t\t739\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3d14a325-c5e7-4973-a6ba-3b24860693ed\tPset_VibrationIsolatorTypeCommon.Reference[Type]\tTEXT\t\t739\t1\tIfcIdentifier\t1\nPARAM\t57450441-a5e0-4235-8168-5b85a7c24e75\tPset_VibrationIsolatorTypeCommon.Status[Type]\tTEXT\t\t739\t1\tPEnum_ElementStatus\t1\nPARAM\t97a6f5b9-13c4-4119-829f-65f804bfce8c\tPset_VibrationIsolatorTypeCommon.VibrationTransmissibility[Type]\tNUMBER\t\t739\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t740\tPset_VoltageInstrumentTransformer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t70559b8c-0f84-4d87-bff0-e37ca18027a7\tPset_VoltageInstrumentTransformer.AccuracyClass[Type]\tNUMBER\t\t740\t1\tIfcRatioMeasure\t1\nPARAM\t3f0b18e8-ce27-4422-9b4f-5472fee9fffc\tPset_VoltageInstrumentTransformer.AccuracyGrade[Type]\tTEXT\t\t740\t1\tIfcLabel\t1\nPARAM\t71d3ac4b-6800-426a-bf50-ba6ceb1daaac\tPset_VoltageInstrumentTransformer.NominalCurrent[Type]\tNUMBER\t\t740\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tfec07f85-7082-458e-be52-aa88e1ab85ed\tPset_VoltageInstrumentTransformer.NominalPower[Type]\tNUMBER\t\t740\t1\tIfcPowerMeasure\t1\nPARAM\t9690f35b-8612-4227-b8b3-6fea924b50e0\tPset_VoltageInstrumentTransformer.NumberOfPhases[Type]\tINTEGER\t\t740\t1\tIfcCountMeasure\t1\nPARAM\t57086fb2-d0cc-4453-b61a-9dfb4f3907dc\tPset_VoltageInstrumentTransformer.PrimaryFrequency[Type]\tNUMBER\t\t740\t1\tIfcFrequencyMeasure\t1\nPARAM\tdb96a8ef-a7fe-4848-a271-17f0578c0014\tPset_VoltageInstrumentTransformer.PrimaryVoltage[Type]\tNUMBER\t\t740\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t1af8b356-b373-47f1-9876-fdb41598a49d\tPset_VoltageInstrumentTransformer.RatedVoltage[Type]\tMULTILINETEXT\t\t740\t1\tPropertyBoundedValue\t1\nPARAM\t49a8fbc7-8577-4d2d-8441-5ab5bdcaf512\tPset_VoltageInstrumentTransformer.SecondaryFrequency[Type]\tNUMBER\t\t740\t1\tIfcFrequencyMeasure\t1\nPARAM\t48a055a0-9c34-4b0f-b035-191dede8ac7b\tPset_VoltageInstrumentTransformer.SecondaryVoltage[Type]\tNUMBER\t\t740\t1\tIfcElectricVoltageMeasure\t1\n#\nGROUP\t741\tPset_WallCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6032db49-091d-49ee-b032-22da60bec2b3\tPset_WallCommon.AcousticRating[Type]\tTEXT\t\t741\t1\tIfcLabel\t1\nPARAM\tc9a5b4cc-df42-4481-8ab6-2989fe26b252\tPset_WallCommon.Combustible[Type]\tYESNO\t\t741\t1\tIfcBoolean\t1\nPARAM\t14517782-2a4e-4598-a733-fef21b9fd503\tPset_WallCommon.Compartmentation[Type]\tYESNO\t\t741\t1\tIfcBoolean\t1\nPARAM\tfc00d7ee-19b1-45b9-b573-556e7fff4bf5\tPset_WallCommon.ExtendToStructure[Type]\tYESNO\t\t741\t1\tIfcBoolean\t1\nPARAM\tf16e10c1-b9c0-4bd5-997c-c28aa3d135f9\tPset_WallCommon.FireRating[Type]\tTEXT\t\t741\t1\tIfcLabel\t1\nPARAM\t57dab8a3-4fcd-44b7-a5a1-e7d1e63daed5\tPset_WallCommon.IsExternal[Type]\tYESNO\t\t741\t1\tIfcBoolean\t1\nPARAM\t7887ce09-6aed-4ed2-92bc-a09c23d75778\tPset_WallCommon.LoadBearing[Type]\tYESNO\t\t741\t1\tIfcBoolean\t1\nPARAM\t0bc15fbf-7e7a-4aa3-ad8b-13b517f5e0c9\tPset_WallCommon.Reference[Type]\tTEXT\t\t741\t1\tIfcIdentifier\t1\nPARAM\t4f74eb9c-bb88-434a-98fd-4f40795fe1c5\tPset_WallCommon.Status[Type]\tTEXT\t\t741\t1\tPEnum_ElementStatus\t1\nPARAM\tc3879554-d4ce-4cc8-b660-1203e2d0e130\tPset_WallCommon.SurfaceSpreadOfFlame[Type]\tTEXT\t\t741\t1\tIfcLabel\t1\nPARAM\t4947e8d3-8e60-45d2-9120-7a7eb1eb358a\tPset_WallCommon.ThermalTransmittance[Type]\tNUMBER\t\t741\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t742\tPset_Warranty\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t98d6eef0-90cf-46ce-bea2-eb82560f79fd\tPset_Warranty.Exclusions[Type]\tTEXT\t\t742\t1\tIfcText\t1\nPARAM\te7b76427-1d8e-4447-bc1f-293ae4fbd6cd\tPset_Warranty.IsExtendedWarranty[Type]\tYESNO\t\t742\t1\tIfcBoolean\t1\nPARAM\te6d99dd2-5c4b-4ccd-b9c0-29db19922c07\tPset_Warranty.PointOfContact[Type]\tTEXT\t\t742\t1\tIfcLabel\t1\nPARAM\t9e8fbba6-4a01-4399-858c-3b31d75cf944\tPset_Warranty.WarrantyContent[Type]\tTEXT\t\t742\t1\tIfcText\t1\nPARAM\t4a6759c8-0120-4bad-9d5f-63be77f4ffd0\tPset_Warranty.WarrantyEndDate[Type]\tTEXT\t\t742\t1\tIfcDate\t1\nPARAM\tc5d31748-91e5-4df1-8af7-535ed7160181\tPset_Warranty.WarrantyIdentifier[Type]\tTEXT\t\t742\t1\tIfcIdentifier\t1\nPARAM\tc11c9cd6-a788-4061-9e1c-889741a3083d\tPset_Warranty.WarrantyPeriod[Type]\tTEXT\t\t742\t1\tIfcDuration\t1\nPARAM\t4beb7383-f94f-426d-be8c-8209a7f0472c\tPset_Warranty.WarrantyStartDate[Type]\tTEXT\t\t742\t1\tIfcDate\t1\n#\nGROUP\t743\tPset_WasteTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta07886fc-f62b-48d4-bf8c-427b899fa65f\tPset_WasteTerminalTypeCommon.Reference[Type]\tTEXT\t\t743\t1\tIfcIdentifier\t1\nPARAM\ta47f3fe9-535e-4d37-bb72-1952f126fda1\tPset_WasteTerminalTypeCommon.Status[Type]\tTEXT\t\t743\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t744\tPset_WasteTerminalTypeFloorTrap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t97f964be-2baf-4de5-8b09-f454b69d0e0d\tPset_WasteTerminalTypeFloorTrap.BodyMaterial[Type]\tMULTILINETEXT\t\t744\t1\tIfcMaterial\t1\nPARAM\t884134fb-edc2-4daa-900e-98ef9818437d\tPset_WasteTerminalTypeFloorTrap.CoverLength[Type]\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td5bb51d9-3968-4b8d-b4cd-d33e9b5daf80\tPset_WasteTerminalTypeFloorTrap.CoverMaterial[Type]\tMULTILINETEXT\t\t744\t1\tIfcMaterialDefinition\t1\nPARAM\t54bf4635-9c0e-4f7e-934d-7f65d7c72452\tPset_WasteTerminalTypeFloorTrap.CoverWidth[Type]\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb7ed7fca-9076-41c8-b817-9afd6fa6c7b6\tPset_WasteTerminalTypeFloorTrap.HasStrainer[Type]\tYESNO\t\t744\t1\tIfcBoolean\t1\nPARAM\t279e6093-fd23-472e-870b-0c2c2f34bd47\tPset_WasteTerminalTypeFloorTrap.InletConnectionSize[Type]\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5e345885-74bb-44a7-813e-e2aab00c495f\tPset_WasteTerminalTypeFloorTrap.InletPatternType[Type]\tTEXT\t\t744\t1\tPEnum_InletPatternType\t1\nPARAM\t86474b86-1bde-4523-b346-b5b1d659f072\tPset_WasteTerminalTypeFloorTrap.IsForSullageWater[Type]\tYESNO\t\t744\t1\tIfcBoolean\t1\nPARAM\t2c830bc4-3898-45b4-af4c-48d61d6fd831\tPset_WasteTerminalTypeFloorTrap.NominalBodyDepth[Type]\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t403108d4-b79a-4e58-88d1-9c707196bc3b\tPset_WasteTerminalTypeFloorTrap.NominalBodyLength[Type]\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6c48e5a3-5167-4b8c-87e5-f27cc7ef1907\tPset_WasteTerminalTypeFloorTrap.NominalBodyWidth[Type]\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf9a92629-de19-4ab0-a4b2-a0c884481bd2\tPset_WasteTerminalTypeFloorTrap.OutletConnectionSize[Type]\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3675c4ad-d082-429d-90cd-c3a91755c28f\tPset_WasteTerminalTypeFloorTrap.SpilloverLevel[Type]\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t427bd507-e04b-46b7-8f53-6bfc424b3ac4\tPset_WasteTerminalTypeFloorTrap.TrapType[Type]\tTEXT\t\t744\t1\tPEnum_TrapType\t1\n#\nGROUP\t745\tPset_WasteTerminalTypeFloorWaste\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t78e3cdb5-0945-4081-ae84-b27c9072634a\tPset_WasteTerminalTypeFloorWaste.BodyMaterial[Type]\tMULTILINETEXT\t\t745\t1\tIfcMaterial\t1\nPARAM\t2e5f97b5-76d1-45ce-b495-f2a677206222\tPset_WasteTerminalTypeFloorWaste.CoverLength[Type]\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t64b0ed68-7713-43ea-a775-3767c8c65147\tPset_WasteTerminalTypeFloorWaste.CoverMaterial[Type]\tMULTILINETEXT\t\t745\t1\tIfcMaterial\t1\nPARAM\t027c61f4-8466-4978-8538-5d3efd23c27a\tPset_WasteTerminalTypeFloorWaste.CoverWidth[Type]\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t10169173-2aa2-40b9-a317-9411ff4bf6aa\tPset_WasteTerminalTypeFloorWaste.NominalBodyDepth[Type]\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf148866f-3763-41c4-b26a-3992758be98c\tPset_WasteTerminalTypeFloorWaste.NominalBodyLength[Type]\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf2649f03-75f8-4036-a7aa-ad750fb56bb0\tPset_WasteTerminalTypeFloorWaste.NominalBodyWidth[Type]\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t79e7e1ae-9ef0-4c9f-9a55-eba936311966\tPset_WasteTerminalTypeFloorWaste.OutletConnectionSize[Type]\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t746\tPset_WasteTerminalTypeGreaseInterceptor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t93266eec-39f9-47f3-82da-e74c79604071\tPset_WasteTerminalTypeGreaseInterceptor.BodyDepth[Type]\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdfb98912-818b-4263-b207-6e0a0692fbce\tPset_WasteTerminalTypeGreaseInterceptor.CoverLength[Type]\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t60b0527c-ba28-4d7d-86e5-b97bb249f999\tPset_WasteTerminalTypeGreaseInterceptor.CoverMaterial[Type]\tMULTILINETEXT\t\t746\t1\tIfcMaterial\t1\nPARAM\t968308c1-a2f9-4c70-a929-14775bd6feef\tPset_WasteTerminalTypeGreaseInterceptor.CoverWidth[Type]\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb4c01133-7c07-4ebb-82ad-4d9c2a3f9d58\tPset_WasteTerminalTypeGreaseInterceptor.InletConnectionSize[Type]\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t686e227e-b7ff-4938-8f6c-39950965162a\tPset_WasteTerminalTypeGreaseInterceptor.NominalBodyLength[Type]\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t07b49116-404d-431e-954e-1cd4129a7983\tPset_WasteTerminalTypeGreaseInterceptor.NominalBodyMaterial[Type]\tMULTILINETEXT\t\t746\t1\tIfcMaterial\t1\nPARAM\t07b8fb22-8150-4807-b5dc-c1609b38759f\tPset_WasteTerminalTypeGreaseInterceptor.NominalBodyWidth[Type]\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta4dc285d-ff2f-47d0-aca2-5219a31076ad\tPset_WasteTerminalTypeGreaseInterceptor.OutletConnectionSize[Type]\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t30d11311-6bf2-40ef-95bf-88fcf75c29c6\tPset_WasteTerminalTypeGreaseInterceptor.StrainerDepth[Type]\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0a62dda9-d51e-418f-8593-b791a301660a\tPset_WasteTerminalTypeGreaseInterceptor.StrainerDiameter[Type]\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfcd807e2-1ae6-425c-8097-7b6af21d4ed8\tPset_WasteTerminalTypeGreaseInterceptor.StrainerMaterial[Type]\tMULTILINETEXT\t\t746\t1\tIfcMaterial\t1\n#\nGROUP\t747\tPset_WasteTerminalTypeGullySump\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0e5613cc-2954-4196-a7d2-0fb4294c2419\tPset_WasteTerminalTypeGullySump.BackInletPatternType[Type]\tTEXT\t\t747\t1\tPEnum_BackInletPatternType\t1\nPARAM\t5a115109-d568-45d3-8561-e562335c3f52\tPset_WasteTerminalTypeGullySump.CoverLength[Type]\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc9474fbe-ff11-44fb-b9d9-9c9f278ab1a7\tPset_WasteTerminalTypeGullySump.CoverMaterial[Type]\tMULTILINETEXT\t\t747\t1\tIfcMaterial\t1\nPARAM\t21c07854-da0a-4933-a5d4-50d08489cbd7\tPset_WasteTerminalTypeGullySump.CoverWidth[Type]\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6d45abed-66d6-4946-967f-024317f87d96\tPset_WasteTerminalTypeGullySump.GullyType[Type]\tTEXT\t\t747\t1\tPEnum_GullyType\t1\nPARAM\tf7eec290-c14c-4012-8490-9cc43d3a3de9\tPset_WasteTerminalTypeGullySump.InletConnectionSize[Type]\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t58366d4e-8da8-485d-be0d-775111923ceb\tPset_WasteTerminalTypeGullySump.NominalSumpDepth[Type]\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t05d5a71a-d7e5-42bb-8c0c-e4bf7ace2fc8\tPset_WasteTerminalTypeGullySump.NominalSumpLength[Type]\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t380d0ce0-2ecc-4f4f-ad49-b15d5d32b688\tPset_WasteTerminalTypeGullySump.NominalSumpWidth[Type]\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5d0174b0-f4ae-4301-b5bc-e26abb14b158\tPset_WasteTerminalTypeGullySump.OutletConnectionSize[Type]\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3365ff3b-57d0-483c-93f6-74d7d4216769\tPset_WasteTerminalTypeGullySump.SumpMaterial[Type]\tMULTILINETEXT\t\t747\t1\tIfcMaterial\t1\nPARAM\te633e28d-70f1-4b50-92d1-09d6d74e434b\tPset_WasteTerminalTypeGullySump.TrapType[Type]\tTEXT\t\t747\t1\tPEnum_TrapType\t1\n#\nGROUP\t748\tPset_WasteTerminalTypeGullyTrap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3ad975c0-5f53-41be-b78b-dc6acd97e388\tPset_WasteTerminalTypeGullyTrap.BackInletPatternType[Type]\tTEXT\t\t748\t1\tPEnum_BackInletPatternType\t1\nPARAM\t422d817f-4c17-4ea8-bd36-4f2716c9eb11\tPset_WasteTerminalTypeGullyTrap.BodyMaterial[Type]\tMULTILINETEXT\t\t748\t1\tIfcMaterial\t1\nPARAM\td3f881e2-3502-4d48-bd3b-faf465c77753\tPset_WasteTerminalTypeGullyTrap.CoverLength[Type]\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2a2d3f89-46f6-4513-bf62-2cb262462226\tPset_WasteTerminalTypeGullyTrap.CoverMaterial[Type]\tMULTILINETEXT\t\t748\t1\tIfcMaterial\t1\nPARAM\t3960fae8-b013-49cf-8f6b-e0ccafe24e10\tPset_WasteTerminalTypeGullyTrap.CoverWidth[Type]\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t65dfe1bc-23e2-4c93-ac71-3c43dd5e3397\tPset_WasteTerminalTypeGullyTrap.GullyType[Type]\tTEXT\t\t748\t1\tPEnum_GullyType\t1\nPARAM\tf9f7595c-bf94-46a5-8a1b-6323ad1fbfb6\tPset_WasteTerminalTypeGullyTrap.HasStrainer[Type]\tYESNO\t\t748\t1\tIfcBoolean\t1\nPARAM\t35352cd9-dd28-4203-9396-e1ffc9cca2d9\tPset_WasteTerminalTypeGullyTrap.InletConnectionSize[Type]\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t340de26a-1bee-4495-9837-f444a623ee5c\tPset_WasteTerminalTypeGullyTrap.NominalBodyDepth[Type]\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te3d8b1e3-de86-4886-9e96-3f4b19133099\tPset_WasteTerminalTypeGullyTrap.NominalBodyLength[Type]\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdf2aa535-9435-4f3e-8ac9-54d918553c96\tPset_WasteTerminalTypeGullyTrap.NominalBodyWidth[Type]\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3d74b553-97a5-4c9e-92d9-ef88c98684df\tPset_WasteTerminalTypeGullyTrap.OutletConnectionSize[Type]\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td7aa0396-215f-4ba3-b93d-a85994dd01ea\tPset_WasteTerminalTypeGullyTrap.TrapType[Type]\tTEXT\t\t748\t1\tPEnum_TrapType\t1\n#\nGROUP\t749\tPset_WasteTerminalTypeOilInterceptor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t355c6874-5820-4acf-8c87-4ee410693faf\tPset_WasteTerminalTypeOilInterceptor.BodyMaterial[Type]\tMULTILINETEXT\t\t749\t1\tIfcMaterial\t1\nPARAM\t1cf197d4-5b45-42e2-8939-c7e11d96280c\tPset_WasteTerminalTypeOilInterceptor.CoverLength[Type]\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ted4cb1d8-4a70-4ee0-ac0a-ae4cee6e99e6\tPset_WasteTerminalTypeOilInterceptor.CoverMaterial[Type]\tMULTILINETEXT\t\t749\t1\tIfcMaterial\t1\nPARAM\tcfec22bf-a657-4265-b2fe-16ea4709c77d\tPset_WasteTerminalTypeOilInterceptor.CoverWidth[Type]\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tef9dc51f-06df-49ed-af4e-143515f9b18d\tPset_WasteTerminalTypeOilInterceptor.InletConnectionSize[Type]\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf334104b-7d54-4d4d-a125-8ee1f5341555\tPset_WasteTerminalTypeOilInterceptor.NominalBodyDepth[Type]\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3dbf09e4-0eec-43b1-aaac-312705af3c0f\tPset_WasteTerminalTypeOilInterceptor.NominalBodyLength[Type]\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4c0f2561-ba18-4fd9-ad6a-867adb3daac2\tPset_WasteTerminalTypeOilInterceptor.NominalBodyWidth[Type]\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t451c7564-97df-40b4-b2d2-bd42aa3f2d03\tPset_WasteTerminalTypeOilInterceptor.OutletConnectionSize[Type]\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t750\tPset_WasteTerminalTypePetrolInterceptor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td03186c9-d3b4-4016-82be-efe177e01074\tPset_WasteTerminalTypePetrolInterceptor.BodyMaterial[Type]\tMULTILINETEXT\t\t750\t1\tIfcMaterial\t1\nPARAM\t13d94af1-a70a-49d3-98e3-8d01f7e7443d\tPset_WasteTerminalTypePetrolInterceptor.CoverLength[Type]\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t64e79ad5-c278-4513-81c4-84822995decd\tPset_WasteTerminalTypePetrolInterceptor.CoverMaterial[Type]\tMULTILINETEXT\t\t750\t1\tIfcMaterial\t1\nPARAM\t07d1a7c6-d3e1-4254-830c-3068c2fb93b1\tPset_WasteTerminalTypePetrolInterceptor.CoverWidth[Type]\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1fd56e01-eecc-4da3-a42a-957cabbb3ec9\tPset_WasteTerminalTypePetrolInterceptor.InletConnectionSize[Type]\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t944be783-a198-4c07-8d3b-7713b33e4cc7\tPset_WasteTerminalTypePetrolInterceptor.NominalBodyDepth[Type]\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4f522f24-7e9c-42b2-bcac-bc25062300a7\tPset_WasteTerminalTypePetrolInterceptor.NominalBodyLength[Type]\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfcb1e1be-c5a4-45be-b1cb-2c5b6bb3fdbb\tPset_WasteTerminalTypePetrolInterceptor.NominalBodyWidth[Type]\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te6612a2f-df56-4e24-8acb-b51700b806ba\tPset_WasteTerminalTypePetrolInterceptor.OutletConnectionSize[Type]\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t93f4ff37-4be9-43a9-b02a-12ada57d5ad8\tPset_WasteTerminalTypePetrolInterceptor.VentilatingPipeSize[Type]\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t751\tPset_WasteTerminalTypeRoofDrain\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t740964ba-b405-44b6-baf4-9a327e3bfe3b\tPset_WasteTerminalTypeRoofDrain.BodyMaterial[Type]\tMULTILINETEXT\t\t751\t1\tIfcMaterial\t1\nPARAM\tb2bd2a45-2e66-46dc-abb2-e12a89843d2c\tPset_WasteTerminalTypeRoofDrain.CoverLength[Type]\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5157e5a1-6847-44c9-87b7-c39b72007361\tPset_WasteTerminalTypeRoofDrain.CoverMaterial[Type]\tMULTILINETEXT\t\t751\t1\tIfcMaterial\t1\nPARAM\tf62c5513-8c23-4488-97b0-b8db8fddde4a\tPset_WasteTerminalTypeRoofDrain.CoverWidth[Type]\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te627563b-1dee-483e-951d-1c229a04ea27\tPset_WasteTerminalTypeRoofDrain.NominalBodyDepth[Type]\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5303690d-5e95-4059-8ad7-597f22f77f78\tPset_WasteTerminalTypeRoofDrain.NominalBodyLength[Type]\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td0fc4d66-ba4d-419f-b509-7b5c11964619\tPset_WasteTerminalTypeRoofDrain.NominalBodyWidth[Type]\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td7e713a5-0e1a-4ceb-a4fe-c15ae1bd71b6\tPset_WasteTerminalTypeRoofDrain.OutletConnectionSize[Type]\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t752\tPset_WasteTerminalTypeWasteDisposalUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teb56bc06-161e-49c6-be29-68c3024fcc9f\tPset_WasteTerminalTypeWasteDisposalUnit.DrainConnectionSize[Type]\tLENGTH\t\t752\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t39345eb9-2715-451a-9277-02397f6af23f\tPset_WasteTerminalTypeWasteDisposalUnit.NominalDepth[Type]\tLENGTH\t\t752\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t902d0984-c9e1-46af-bbf0-d1d3c8d5bf61\tPset_WasteTerminalTypeWasteDisposalUnit.OutletConnectionSize[Type]\tLENGTH\t\t752\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t753\tPset_WasteTerminalTypeWasteTrap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t414433fb-3fca-4e98-89c0-f9e3fb429546\tPset_WasteTerminalTypeWasteTrap.InletConnectionSize[Type]\tLENGTH\t\t753\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te96991a2-c412-4f75-b2a4-dacdf3bf4dff\tPset_WasteTerminalTypeWasteTrap.OutletConnectionSize[Type]\tLENGTH\t\t753\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te13d7130-0a2d-456f-8aea-1a785bef1951\tPset_WasteTerminalTypeWasteTrap.WasteTrapType[Type]\tTEXT\t\t753\t1\tPEnum_TrapType\t1\n#\nGROUP\t754\tPset_WaterStratumCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2d99396e-ea1f-4d19-ba37-32573e1ecbb0\tPset_WaterStratumCommon.AnnualRange[Type]\tLENGTH\t\t754\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9b134777-fb63-4180-a7bd-14d7117779f3\tPset_WaterStratumCommon.AnnualTrend[Type]\tLENGTH\t\t754\t1\tIfcLengthMeasure\t1\nPARAM\t343fb927-bcea-438f-a604-bef78c2faee4\tPset_WaterStratumCommon.IsFreshwater[Type]\tYESNO\t\t754\t1\tIfcLogical\t1\nPARAM\t528a1afa-3d9d-4d60-bfa6-3f9e279b5700\tPset_WaterStratumCommon.SeicheRange[Type]\tLENGTH\t\t754\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te839576e-e7a8-4624-afc8-261c76aef715\tPset_WaterStratumCommon.TidalRange[Type]\tLENGTH\t\t754\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t60f68f0e-14c2-4b62-9733-34cb63378332\tPset_WaterStratumCommon.WaveRange[Type]\tLENGTH\t\t754\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t755\tPset_Width\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc237012b-91c5-415d-82a1-73bfab4ffdf9\tPset_Width.NominalWidth[Type]\tLENGTH\t\t755\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tfdf71c2c-705c-4f1f-bbec-35be75654297\tPset_Width.Side[Type]\tTEXT\t\t755\t1\tPEnum_SideType\t1\nPARAM\td8aafe81-9a35-4df2-ab22-473ea229e15a\tPset_Width.TransitionWidth[Type]\tTEXT\t\t755\t1\tPEnum_TransitionWidthType\t1\n#\nGROUP\t756\tPset_WindowCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf93d5c55-738f-49e0-8756-1a67cef18a90\tPset_WindowCommon.AcousticRating[Type]\tTEXT\t\t756\t1\tIfcLabel\t1\nPARAM\t92799cab-3d18-4856-8c7a-d3f1965cfa9d\tPset_WindowCommon.FireExit[Type]\tYESNO\t\t756\t1\tIfcBoolean\t1\nPARAM\t0f5cb688-4056-4359-8c1b-ec194deede70\tPset_WindowCommon.FireRating[Type]\tTEXT\t\t756\t1\tIfcLabel\t1\nPARAM\t8d7b502d-2952-4664-ba10-fa00514fc7d6\tPset_WindowCommon.GlazingAreaFraction[Type]\tNUMBER\t\t756\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t66593f9f-0336-45c1-be14-0c11e50b3780\tPset_WindowCommon.HasDrive[Type]\tYESNO\t\t756\t1\tIfcBoolean\t1\nPARAM\t0cb5b6f0-0ebf-4a23-b6aa-06d43483156e\tPset_WindowCommon.HasSillExternal[Type]\tYESNO\t\t756\t1\tIfcBoolean\t1\nPARAM\t14ea41d3-fec2-4f5b-83c3-dc05751eb3c4\tPset_WindowCommon.HasSillInternal[Type]\tYESNO\t\t756\t1\tIfcBoolean\t1\nPARAM\t13883ee2-0b55-4fc2-b987-a4c605029f86\tPset_WindowCommon.Infiltration[Type]\tNUMBER\t\t756\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t9b2a70f8-6edf-4111-8136-89ddb4500a38\tPset_WindowCommon.IsExternal[Type]\tYESNO\t\t756\t1\tIfcBoolean\t1\nPARAM\tc4d1355c-6049-45cd-9d4f-1afe347eaf96\tPset_WindowCommon.MechanicalLoadRating[Type]\tTEXT\t\t756\t1\tIfcLabel\t1\nPARAM\t41381f47-4001-4629-9c83-2cfe3bebdd77\tPset_WindowCommon.Reference[Type]\tTEXT\t\t756\t1\tIfcIdentifier\t1\nPARAM\taf01d4a7-90f6-458d-aa52-7cafd2e884c1\tPset_WindowCommon.SecurityRating[Type]\tTEXT\t\t756\t1\tIfcLabel\t1\nPARAM\tdea6f81d-08f9-42f8-ac0a-2070b85aac58\tPset_WindowCommon.SmokeStop[Type]\tYESNO\t\t756\t1\tIfcBoolean\t1\nPARAM\ta1e6e9bc-04a9-46a7-9f7c-02bcd9f4d246\tPset_WindowCommon.Status[Type]\tTEXT\t\t756\t1\tPEnum_ElementStatus\t1\nPARAM\tcc2d0623-8481-4028-b624-15e20ed966a8\tPset_WindowCommon.ThermalTransmittance[Type]\tNUMBER\t\t756\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t9a3ee47c-5356-4e05-b5cd-b0265f6479e2\tPset_WindowCommon.WaterTightnessRating[Type]\tTEXT\t\t756\t1\tIfcLabel\t1\nPARAM\t7bf3108b-d4b2-4960-b212-7520632dbaeb\tPset_WindowCommon.WindLoadRating[Type]\tTEXT\t\t756\t1\tIfcLabel\t1\n#\nGROUP\t757\tPset_WiredCommunicationPortCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4230ced4-4315-4654-95fa-3e8d555d0b31\tPset_WiredCommunicationPortCommon.CommunicationStandard[Type]\tTEXT\t\t757\t1\tPEnum_CommunicationStandard\t1\nPARAM\tf8d0130d-439e-477c-bc71-9fdcf889f486\tPset_WiredCommunicationPortCommon.MaximumTransferRate[Type]\tINTEGER\t\t757\t1\tIfcIntegerCountRateMeasure\t1\n#\nGROUP\t758\tPset_WorkControlCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t99b1fec3-7447-4bdc-9f56-37c8fe12b72b\tPset_WorkControlCommon.WorkDayDuration[Type]\tTEXT\t\t758\t1\tIfcDuration\t1\nPARAM\t7339e042-d2d0-4739-a12c-c84de83b236d\tPset_WorkControlCommon.WorkFinishTime[Type]\tTEXT\t\t758\t1\tIfcTime\t1\nPARAM\t847678b2-0bfd-4b56-9c2b-9ce7b130ad71\tPset_WorkControlCommon.WorkMonthDuration[Type]\tTEXT\t\t758\t1\tIfcDuration\t1\nPARAM\tf51f1696-fb9c-401b-92f8-766cc694d7b2\tPset_WorkControlCommon.WorkStartTime[Type]\tTEXT\t\t758\t1\tIfcTime\t1\nPARAM\t26cc20b3-f6c1-463a-821a-2cf9cb452ad1\tPset_WorkControlCommon.WorkWeekDuration[Type]\tTEXT\t\t758\t1\tIfcDuration\t1\n#\nGROUP\t759\tPset_ZoneCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td6bdee2b-2402-4dbb-8f3d-34136cc3ae28\tPset_ZoneCommon.Category[Type]\tTEXT\t\t759\t1\tIfcLabel\t1\nPARAM\t5d6f0dd4-4e04-45dc-8225-01897cfe475f\tPset_ZoneCommon.GrossAreaPlanned[Type]\tAREA\t\t759\t1\tIfcAreaMeasure\t1\nPARAM\t817bd6d5-fe9d-482a-a893-47a652267a3b\tPset_ZoneCommon.GrossPlannedArea[Type]\tAREA\t\t759\t1\tIfcAreaMeasure\t1\nPARAM\tec5f8776-af0f-42ad-962d-f6acb5cbd365\tPset_ZoneCommon.HandicapAccessible[Type]\tYESNO\t\t759\t1\tIfcBoolean\t1\nPARAM\t4ec7651c-7667-49d1-aae0-c17cf5e50ca0\tPset_ZoneCommon.IsExternal[Type]\tYESNO\t\t759\t1\tIfcBoolean\t1\nPARAM\t3491f68d-50b2-4be0-929e-28153efa024c\tPset_ZoneCommon.MechanicalVentilationRate[Type]\tINTEGER\t\t759\t1\tIfcCountMeasure\t1\nPARAM\tf2b6f085-0601-4790-95b8-b7a114e9a41f\tPset_ZoneCommon.NaturalVentilation[Type]\tYESNO\t\t759\t1\tIfcBoolean\t1\nPARAM\tf710f54e-9023-4c5c-aa3a-ed4dd7981ce0\tPset_ZoneCommon.NaturalVentilationRate[Type]\tINTEGER\t\t759\t1\tIfcCountMeasure\t1\nPARAM\t0ee43842-e825-4765-9488-66f9c0f25cdb\tPset_ZoneCommon.NetAreaPlanned[Type]\tAREA\t\t759\t1\tIfcAreaMeasure\t1\nPARAM\te572a7ef-eeeb-4a20-b1c3-460109f12e0c\tPset_ZoneCommon.NetPlannedArea[Type]\tAREA\t\t759\t1\tIfcAreaMeasure\t1\nPARAM\tc564cba0-d1aa-496e-a1c5-d489b84ab6a2\tPset_ZoneCommon.OccupancyNumber[Type]\tINTEGER\t\t759\t1\tIfcCountMeasure\t1\nPARAM\t91fad258-2b39-4241-bffe-f958533071d2\tPset_ZoneCommon.OccupancyType[Type]\tTEXT\t\t759\t1\tIfcLabel\t1\nPARAM\td63bb657-afa6-4e29-a0e7-e39bbe9591d7\tPset_ZoneCommon.PubliclyAccessible[Type]\tYESNO\t\t759\t1\tIfcBoolean\t1\nPARAM\t9955e9a6-8c85-44fd-bcfc-8cb6ed3999e5\tPset_ZoneCommon.Reference[Type]\tTEXT\t\t759\t1\tIfcIdentifier\t1\n#\nGROUP\t760\tQto_ActuatorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te0f5fb0f-a53d-46ec-b6ca-c752c8cc37de\tQto_ActuatorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t760\t1\tIfcMassMeasure\t1\n#\nGROUP\t761\tQto_AirTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1541f683-ab0e-4a19-9cd6-9b01db577d60\tQto_AirTerminalBaseQuantities.GrossWeight[Type]\tNUMBER\t\t761\t1\tIfcMassMeasure\t1\nPARAM\t37f31b12-c37d-470a-bc14-316b47935da4\tQto_AirTerminalBaseQuantities.Perimeter[Type]\tLENGTH\t\t761\t1\tIfcLengthMeasure\t1\nPARAM\t3de42cf9-b532-4c65-a9d6-3ce13c39dc4a\tQto_AirTerminalBaseQuantities.TotalSurfaceArea[Type]\tAREA\t\t761\t1\tIfcAreaMeasure\t1\n#\nGROUP\t762\tQto_AirTerminalBoxTypeBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t85e9c061-87b2-48bf-8eb5-9198a97ce3fb\tQto_AirTerminalBoxTypeBaseQuantities.GrossWeight[Type]\tNUMBER\t\t762\t1\tIfcMassMeasure\t1\n#\nGROUP\t763\tQto_AirToAirHeatRecoveryBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t36966766-e755-45fa-b896-8874611c7f25\tQto_AirToAirHeatRecoveryBaseQuantities.GrossWeight[Type]\tNUMBER\t\t763\t1\tIfcMassMeasure\t1\n#\nGROUP\t764\tQto_AlarmBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t052a9a3a-de19-41a4-a1e7-351f019d1416\tQto_AlarmBaseQuantities.GrossWeight[Type]\tNUMBER\t\t764\t1\tIfcMassMeasure\t1\n#\nGROUP\t765\tQto_ArealStratumBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t73ec78ae-d9ad-4c8f-8abe-262f2c937c89\tQto_ArealStratumBaseQuantities.Area[Type]\tAREA\t\t765\t1\tIfcAreaMeasure\t1\nPARAM\tc7275230-0a4c-4681-9741-dc902e2a804d\tQto_ArealStratumBaseQuantities.Length[Type]\tLENGTH\t\t765\t1\tIfcLengthMeasure\t1\nPARAM\t73b3cdd1-9206-43d3-9921-b6b4c91ce1d7\tQto_ArealStratumBaseQuantities.PlanLength[Type]\tLENGTH\t\t765\t1\tIfcLengthMeasure\t1\n#\nGROUP\t766\tQto_AudioVisualApplianceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc9b11c46-82ef-4eb2-a440-c03993991391\tQto_AudioVisualApplianceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t766\t1\tIfcMassMeasure\t1\n#\nGROUP\t767\tQto_BeamBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t595de70b-d6cb-479a-b916-f6ab3d7edd16\tQto_BeamBaseQuantities.CrossSectionArea[Type]\tAREA\t\t767\t1\tIfcAreaMeasure\t1\nPARAM\tb2d5a84e-22f1-41e5-ad4d-14fe73a3bf4a\tQto_BeamBaseQuantities.GrossSurfaceArea[Type]\tAREA\t\t767\t1\tIfcAreaMeasure\t1\nPARAM\t13fcc76c-ab8a-46ef-8291-626e5c37241d\tQto_BeamBaseQuantities.GrossVolume[Type]\tVOLUME\t\t767\t1\tIfcVolumeMeasure\t1\nPARAM\t5885021d-3bf1-4fa5-9e8f-33b9a309345a\tQto_BeamBaseQuantities.GrossWeight[Type]\tNUMBER\t\t767\t1\tIfcMassMeasure\t1\nPARAM\t21257d35-46b2-4379-a21e-d445025e5ef2\tQto_BeamBaseQuantities.Height[Type]\tLENGTH\t\t767\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t67d2da57-3536-4ef2-ba5a-d33179c4dc84\tQto_BeamBaseQuantities.Length[Type]\tLENGTH\t\t767\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3f025fa2-84c1-458b-8614-8dd17b3217a1\tQto_BeamBaseQuantities.NetSurfaceArea[Type]\tAREA\t\t767\t1\tIfcAreaMeasure\t1\nPARAM\taaab2082-1bff-42ae-94ec-f228e2a02127\tQto_BeamBaseQuantities.NetVolume[Type]\tVOLUME\t\t767\t1\tIfcVolumeMeasure\t1\nPARAM\t8d81f946-801d-4a1c-a6a9-7b0982ff60c1\tQto_BeamBaseQuantities.NetWeight[Type]\tNUMBER\t\t767\t1\tIfcMassMeasure\t1\nPARAM\t379b714d-8d7d-4547-8c2d-bb5506812e67\tQto_BeamBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t767\t1\tIfcAreaMeasure\t1\nPARAM\t847fa65b-1a6c-4f59-bc12-580ee1caf9ae\tQto_BeamBaseQuantities.Width[Type]\tLENGTH\t\t767\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t768\tQto_BodyGeometryValidation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t17ac9f30-e27d-4c3e-a28e-10e87f4e7854\tQto_BodyGeometryValidation.GrossSurfaceArea[Type]\tAREA\t\t768\t1\tIfcAreaMeasure\t1\nPARAM\t6dcb7601-8da2-41e5-81eb-006eaa9d2e67\tQto_BodyGeometryValidation.GrossVolume[Type]\tVOLUME\t\t768\t1\tIfcVolumeMeasure\t1\nPARAM\t04ff16fa-5bf7-4723-b0e3-1decb2dc47dc\tQto_BodyGeometryValidation.NetSurfaceArea[Type]\tAREA\t\t768\t1\tIfcAreaMeasure\t1\nPARAM\t779da3c1-bfb5-4234-9478-e1a77b6595b0\tQto_BodyGeometryValidation.NetVolume[Type]\tVOLUME\t\t768\t1\tIfcVolumeMeasure\t1\nPARAM\tacffeeba-af09-4d44-b837-2a82a0f5b269\tQto_BodyGeometryValidation.SurfaceGenusAfterFeatures[Type]\tINTEGER\t\t768\t1\tIfcCountMeasure\t1\nPARAM\t1b5afb08-1260-4804-a826-f674b98e37a9\tQto_BodyGeometryValidation.SurfaceGenusBeforeFeatures[Type]\tINTEGER\t\t768\t1\tIfcCountMeasure\t1\n#\nGROUP\t769\tQto_BoilerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6a255c17-bf2d-40e8-89e2-e807b1d0a762\tQto_BoilerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t769\t1\tIfcMassMeasure\t1\nPARAM\t0d136a80-1aa8-49e6-9d49-58b11e620fa2\tQto_BoilerBaseQuantities.NetWeight[Type]\tNUMBER\t\t769\t1\tIfcMassMeasure\t1\nPARAM\t70fc1c16-328b-44fe-a3c9-3ddea7116d57\tQto_BoilerBaseQuantities.TotalSurfaceArea[Type]\tAREA\t\t769\t1\tIfcAreaMeasure\t1\n#\nGROUP\t770\tQto_BuildingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t26040140-b537-45c2-b441-233178c639f7\tQto_BuildingBaseQuantities.EavesHeight[Type]\tLENGTH\t\t770\t1\tIfcLengthMeasure\t1\nPARAM\tc6aeecfc-f33b-4681-9733-4b0d5f257f38\tQto_BuildingBaseQuantities.FootprintArea[Type]\tAREA\t\t770\t1\tIfcAreaMeasure\t1\nPARAM\tfcb4262c-9424-46ca-baa6-d92f08a7e5fb\tQto_BuildingBaseQuantities.FootPrintArea[Type]\tAREA\t\t770\t1\tIfcAreaMeasure\t1\nPARAM\t2de00587-0057-4bf6-9057-16054741ce2d\tQto_BuildingBaseQuantities.GrossFloorArea[Type]\tAREA\t\t770\t1\tIfcAreaMeasure\t1\nPARAM\t487c6c75-6298-4cca-99bb-8019e3302ec7\tQto_BuildingBaseQuantities.GrossVolume[Type]\tVOLUME\t\t770\t1\tIfcVolumeMeasure\t1\nPARAM\t2e56bc8b-56f8-4293-a0e4-aa5778ea4421\tQto_BuildingBaseQuantities.Height[Type]\tLENGTH\t\t770\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb754333f-1cc7-4499-b150-52f474f0da92\tQto_BuildingBaseQuantities.NetFloorArea[Type]\tAREA\t\t770\t1\tIfcAreaMeasure\t1\nPARAM\t6322d776-637e-47a8-9e90-8920d8687b69\tQto_BuildingBaseQuantities.NetVolume[Type]\tVOLUME\t\t770\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t771\tQto_BuildingElementProxyQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7ef9b8da-44fd-462a-8fb2-e1c7edab441c\tQto_BuildingElementProxyQuantities.NetSurfaceArea[Type]\tAREA\t\t771\t1\tIfcAreaMeasure\t1\nPARAM\t42e3720b-ed21-4b81-8dab-da55ea64f1f6\tQto_BuildingElementProxyQuantities.NetVolume[Type]\tVOLUME\t\t771\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t772\tQto_BuildingStoreyBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t30c2ab71-cd0b-41de-b651-83b212b579a6\tQto_BuildingStoreyBaseQuantities.GrossFloorArea[Type]\tAREA\t\t772\t1\tIfcAreaMeasure\t1\nPARAM\t8374032c-c9c5-4a02-8d53-887b25dff82a\tQto_BuildingStoreyBaseQuantities.GrossHeight[Type]\tLENGTH\t\t772\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8f8681bc-a75a-4af5-a784-fe77657b094e\tQto_BuildingStoreyBaseQuantities.GrossPerimeter[Type]\tLENGTH\t\t772\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t29c5440b-0576-401c-96fb-e7065664e39f\tQto_BuildingStoreyBaseQuantities.GrossVolume[Type]\tVOLUME\t\t772\t1\tIfcVolumeMeasure\t1\nPARAM\t4e474f53-db7e-49bd-bd61-e77bdd87fad5\tQto_BuildingStoreyBaseQuantities.NetFloorArea[Type]\tAREA\t\t772\t1\tIfcAreaMeasure\t1\nPARAM\t7ff9fd57-9210-420b-a288-3acd118650d8\tQto_BuildingStoreyBaseQuantities.NetHeight[Type]\tLENGTH\t\t772\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t18b145f1-d057-47c9-acc5-8ea91868be1b\tQto_BuildingStoreyBaseQuantities.NetHeigtht[Type]\tLENGTH\t\t772\t1\tIfcLengthMeasure\t1\nPARAM\t3d8c25d1-b1ef-4a70-a5fb-02c77882afae\tQto_BuildingStoreyBaseQuantities.NetVolume[Type]\tVOLUME\t\t772\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t773\tQto_BurnerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e19e202-74f3-4929-921e-6546603741a3\tQto_BurnerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t773\t1\tIfcMassMeasure\t1\n#\nGROUP\t774\tQto_CableCarrierFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta4a657cd-5e38-46d6-9e66-03ea72688beb\tQto_CableCarrierFittingBaseQuantities.GrossWeight[Type]\tNUMBER\t\t774\t1\tIfcMassMeasure\t1\n#\nGROUP\t775\tQto_CableCarrierSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t351bc5ed-5c98-4029-81a5-9230f1e22263\tQto_CableCarrierSegmentBaseQuantities.CrossSectionArea[Type]\tAREA\t\t775\t1\tIfcAreaMeasure\t1\nPARAM\t0898c6ca-d2ea-46d2-94e9-9d951f3fbecf\tQto_CableCarrierSegmentBaseQuantities.GrossWeight[Type]\tNUMBER\t\t775\t1\tIfcMassMeasure\t1\nPARAM\t8d255d6e-27e0-4ea4-872e-be6937324e67\tQto_CableCarrierSegmentBaseQuantities.Length[Type]\tLENGTH\t\t775\t1\tIfcLengthMeasure\t1\nPARAM\t46d5805d-9120-433c-8acf-f53c6e2d1f99\tQto_CableCarrierSegmentBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t775\t1\tIfcAreaMeasure\t1\n#\nGROUP\t776\tQto_CableFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t32ae27f9-d705-4007-b678-505a2877a81e\tQto_CableFittingBaseQuantities.GrossWeight[Type]\tNUMBER\t\t776\t1\tIfcMassMeasure\t1\n#\nGROUP\t777\tQto_CableSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7ac79e0c-715c-4177-9d8b-61dda40a44f8\tQto_CableSegmentBaseQuantities.CrossSectionArea[Type]\tAREA\t\t777\t1\tIfcAreaMeasure\t1\nPARAM\ta7e45a96-8b00-4a8c-b6bc-f5055773894c\tQto_CableSegmentBaseQuantities.GrossWeight[Type]\tNUMBER\t\t777\t1\tIfcMassMeasure\t1\nPARAM\t0346c05f-980e-4ea5-8979-ef15fb8779a9\tQto_CableSegmentBaseQuantities.Length[Type]\tLENGTH\t\t777\t1\tIfcLengthMeasure\t1\nPARAM\t49aaae5d-330d-4154-ba61-df5374ef8fc5\tQto_CableSegmentBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t777\t1\tIfcAreaMeasure\t1\n#\nGROUP\t778\tQto_ChillerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbbf2de88-f490-432d-84c6-b65ab801c60d\tQto_ChillerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t778\t1\tIfcMassMeasure\t1\n#\nGROUP\t779\tQto_ChimneyBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4b18ddd1-d072-4b49-843a-4fa9d747a519\tQto_ChimneyBaseQuantities.Length[Type]\tLENGTH\t\t779\t1\tIfcLengthMeasure\t1\n#\nGROUP\t780\tQto_CoilBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0c41e537-fec1-4471-879f-dc5429bd920e\tQto_CoilBaseQuantities.GrossWeight[Type]\tNUMBER\t\t780\t1\tIfcMassMeasure\t1\n#\nGROUP\t781\tQto_ColumnBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t77f2fb92-cd25-484a-a843-0a815ec5d41b\tQto_ColumnBaseQuantities.CrossSectionArea[Type]\tAREA\t\t781\t1\tIfcAreaMeasure\t1\nPARAM\t28ad6865-8835-4458-bb29-55bfd67768f5\tQto_ColumnBaseQuantities.GrossSurfaceArea[Type]\tAREA\t\t781\t1\tIfcAreaMeasure\t1\nPARAM\t2000d329-960f-4c65-9b9a-9cb412b73c27\tQto_ColumnBaseQuantities.GrossVolume[Type]\tVOLUME\t\t781\t1\tIfcVolumeMeasure\t1\nPARAM\t9171d0f1-f3ce-45ee-82ab-f19be545f1ed\tQto_ColumnBaseQuantities.GrossWeight[Type]\tNUMBER\t\t781\t1\tIfcMassMeasure\t1\nPARAM\t1146fad2-0da5-4c24-a123-693924328e74\tQto_ColumnBaseQuantities.Height[Type]\tLENGTH\t\t781\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3387907c-77ad-4c8d-aea4-1174baa2c251\tQto_ColumnBaseQuantities.Length[Type]\tLENGTH\t\t781\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t527f0f1b-a218-4fd3-8cb3-fc3b795c599a\tQto_ColumnBaseQuantities.NetSurfaceArea[Type]\tAREA\t\t781\t1\tIfcAreaMeasure\t1\nPARAM\t9be931b8-812c-4c68-84d1-b1ec3081b8ab\tQto_ColumnBaseQuantities.NetVolume[Type]\tVOLUME\t\t781\t1\tIfcVolumeMeasure\t1\nPARAM\t7140bd5f-9661-4c1d-872d-6e3a64d95291\tQto_ColumnBaseQuantities.NetWeight[Type]\tNUMBER\t\t781\t1\tIfcMassMeasure\t1\nPARAM\tb08a23e1-dc0f-447b-9986-871dda670202\tQto_ColumnBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t781\t1\tIfcAreaMeasure\t1\nPARAM\t76ab9b70-0a0f-4f63-aee0-7bc04d8ff6a5\tQto_ColumnBaseQuantities.Width[Type]\tLENGTH\t\t781\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t782\tQto_CommunicationsApplianceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t10658301-38fc-4927-a18e-65d39dcc9216\tQto_CommunicationsApplianceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t782\t1\tIfcMassMeasure\t1\n#\nGROUP\t783\tQto_CompressorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td422b065-2221-4ed0-8620-2f47b480a30f\tQto_CompressorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t783\t1\tIfcMassMeasure\t1\n#\nGROUP\t784\tQto_CondenserBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t63390dd5-6817-4b5f-b029-708e897b78c1\tQto_CondenserBaseQuantities.GrossWeight[Type]\tNUMBER\t\t784\t1\tIfcMassMeasure\t1\n#\nGROUP\t785\tQto_ConduitSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb807037e-a03a-4109-911b-0f406beb29a1\tQto_ConduitSegmentBaseQuantities.InnerDiameter[Type]\tLENGTH\t\t785\t1\tIfcLengthMeasure\t1\nPARAM\t06549c02-a33a-49a2-a2d6-329f956ffd30\tQto_ConduitSegmentBaseQuantities.OuterDiameter[Type]\tLENGTH\t\t785\t1\tIfcLengthMeasure\t1\n#\nGROUP\t786\tQto_ConstructionEquipmentResourceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfd8b8adc-b072-4f22-9923-09147ff5039d\tQto_ConstructionEquipmentResourceBaseQuantities.OperatingTime[Type]\tNUMBER\t\t786\t1\tIfcTimeMeasure\t1\nPARAM\te7529dbf-30ed-48a7-a88c-07f08e60d039\tQto_ConstructionEquipmentResourceBaseQuantities.UsageTime[Type]\tNUMBER\t\t786\t1\tIfcTimeMeasure\t1\n#\nGROUP\t787\tQto_ConstructionMaterialResourceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0e296676-c3c5-4cf3-9c9a-7cdeaaf45dc3\tQto_ConstructionMaterialResourceBaseQuantities.GrossVolume[Type]\tVOLUME\t\t787\t1\tIfcVolumeMeasure\t1\nPARAM\ta2e35cf1-8756-49bd-bd8e-1a3f862bf369\tQto_ConstructionMaterialResourceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t787\t1\tIfcMassMeasure\t1\nPARAM\tc5c4795a-1e1d-4705-af25-310b8d695c6c\tQto_ConstructionMaterialResourceBaseQuantities.NetVolume[Type]\tVOLUME\t\t787\t1\tIfcVolumeMeasure\t1\nPARAM\t8293e450-8adf-4f4a-a968-fcfe4105773b\tQto_ConstructionMaterialResourceBaseQuantities.NetWeight[Type]\tNUMBER\t\t787\t1\tIfcMassMeasure\t1\n#\nGROUP\t788\tQto_ControllerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t866e4cb4-bf14-4c3e-9d1c-a163fe1d4a0c\tQto_ControllerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t788\t1\tIfcMassMeasure\t1\n#\nGROUP\t789\tQto_CooledBeamBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t176eb97d-ccf6-46b1-9675-8df511d0e3fc\tQto_CooledBeamBaseQuantities.GrossWeight[Type]\tNUMBER\t\t789\t1\tIfcMassMeasure\t1\n#\nGROUP\t790\tQto_CoolingTowerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0600155b-99bf-4a91-ba35-18eef52fdee2\tQto_CoolingTowerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t790\t1\tIfcMassMeasure\t1\n#\nGROUP\t791\tQto_CourseBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te395f3c0-bb4b-41c4-9905-ce2ffb7a9321\tQto_CourseBaseQuantities.GrossVolume[Type]\tVOLUME\t\t791\t1\tIfcVolumeMeasure\t1\nPARAM\t0469d98e-bb1d-4855-83ce-6e197dfccc2a\tQto_CourseBaseQuantities.Length[Type]\tLENGTH\t\t791\t1\tIfcLengthMeasure\t1\nPARAM\t356b4983-3070-4a8c-b370-73690ef75f85\tQto_CourseBaseQuantities.Thickness[Type]\tLENGTH\t\t791\t1\tIfcLengthMeasure\t1\nPARAM\tb724b383-7c2e-4652-b25b-a9697300299d\tQto_CourseBaseQuantities.Volume[Type]\tVOLUME\t\t791\t1\tIfcVolumeMeasure\t1\nPARAM\tf4ab649d-a22e-461a-a054-f74db9c6650c\tQto_CourseBaseQuantities.Weight[Type]\tNUMBER\t\t791\t1\tIfcMassMeasure\t1\nPARAM\t7c0fbc7c-3a08-4f42-bfdf-31a5279d1564\tQto_CourseBaseQuantities.Width[Type]\tLENGTH\t\t791\t1\tIfcLengthMeasure\t1\n#\nGROUP\t792\tQto_CoveringBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t740d7401-e075-46f4-b67b-d2a35462eef3\tQto_CoveringBaseQuantities.GrossArea[Type]\tAREA\t\t792\t1\tIfcAreaMeasure\t1\nPARAM\tc0b9fec1-4851-45b1-a5d8-1d01feb4be51\tQto_CoveringBaseQuantities.GrossCeilingArea[Type]\tAREA\t\t792\t1\tIfcAreaMeasure\t1\nPARAM\t6fcad777-f8d8-4393-a132-a2cbd1cdd52b\tQto_CoveringBaseQuantities.NetArea[Type]\tAREA\t\t792\t1\tIfcAreaMeasure\t1\nPARAM\t41b41198-9e99-44b4-9c5c-458173348869\tQto_CoveringBaseQuantities.Width[Type]\tLENGTH\t\t792\t1\tIfcLengthMeasure\t1\n#\nGROUP\t793\tQto_CurtainWallQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t956c0770-acc9-43bf-9826-148d99ac537b\tQto_CurtainWallQuantities.GrossSideArea[Type]\tAREA\t\t793\t1\tIfcAreaMeasure\t1\nPARAM\t7ee57f54-8f4d-49b3-ab6a-d3c4ae411092\tQto_CurtainWallQuantities.Height[Type]\tLENGTH\t\t793\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t35b39d7a-7cdd-494a-a1cf-94cc93f709cc\tQto_CurtainWallQuantities.Length[Type]\tLENGTH\t\t793\t1\tIfcLengthMeasure\t1\nPARAM\ta1579472-ea90-4cf5-a9a1-dea0c1c9cfbc\tQto_CurtainWallQuantities.NetSideArea[Type]\tAREA\t\t793\t1\tIfcAreaMeasure\t1\nPARAM\t4e34ba08-cdf9-41dd-be60-63ac4411d4a7\tQto_CurtainWallQuantities.Width[Type]\tLENGTH\t\t793\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t794\tQto_DamperBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0df0734b-e996-4685-9b66-7b0f67c5b81a\tQto_DamperBaseQuantities.GrossWeight[Type]\tNUMBER\t\t794\t1\tIfcMassMeasure\t1\n#\nGROUP\t795\tQto_DistributionBoardBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc8ad3994-a21c-4dee-9753-187c9b25403b\tQto_DistributionBoardBaseQuantities.GrossWeight[Type]\tNUMBER\t\t795\t1\tIfcMassMeasure\t1\nPARAM\t13224b14-7369-4b3c-9b39-758276bdd992\tQto_DistributionBoardBaseQuantities.NumberOfCircuits[Type]\tINTEGER\t\t795\t1\tIfcCountMeasure\t1\n#\nGROUP\t796\tQto_DistributionChamberElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc50c6c90-e90f-4bd7-b69e-d9f405017faf\tQto_DistributionChamberElementBaseQuantities.Depth[Type]\tLENGTH\t\t796\t1\tIfcLengthMeasure\t1\nPARAM\t3c00c51d-fe3b-42c7-82a5-c814e3af1fb7\tQto_DistributionChamberElementBaseQuantities.GrossSurfaceArea[Type]\tAREA\t\t796\t1\tIfcAreaMeasure\t1\nPARAM\tf94f0a6a-f94b-45d3-9726-184947618328\tQto_DistributionChamberElementBaseQuantities.GrossVolume[Type]\tVOLUME\t\t796\t1\tIfcVolumeMeasure\t1\nPARAM\t5441339e-4fce-480c-bb05-a8aca21f3ba5\tQto_DistributionChamberElementBaseQuantities.NetSurfaceArea[Type]\tAREA\t\t796\t1\tIfcAreaMeasure\t1\nPARAM\t2bcf6fae-a7b7-45a9-9180-db1390ec8b94\tQto_DistributionChamberElementBaseQuantities.NetVolume[Type]\tVOLUME\t\t796\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t797\tQto_DoorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taf0e927d-11ab-41d6-a85a-98a013fe9a01\tQto_DoorBaseQuantities.Area[Type]\tAREA\t\t797\t1\tIfcAreaMeasure\t1\nPARAM\t9e5bf6ea-1aeb-4900-a8b5-229c03b5db95\tQto_DoorBaseQuantities.Height[Type]\tLENGTH\t\t797\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t422f0c46-7f39-48f3-a764-90778f07498d\tQto_DoorBaseQuantities.Perimeter[Type]\tLENGTH\t\t797\t1\tIfcLengthMeasure\t1\nPARAM\t87286b0d-258d-4b82-9b5a-8f98fea4e24b\tQto_DoorBaseQuantities.Width[Type]\tLENGTH\t\t797\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t798\tQto_DuctFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t00ee2dc7-3902-49cc-81d5-e169f48c30b5\tQto_DuctFittingBaseQuantities.GrossCrossSectionArea[Type]\tAREA\t\t798\t1\tIfcAreaMeasure\t1\nPARAM\ta0aee241-300b-4514-bf02-634cff3ef12f\tQto_DuctFittingBaseQuantities.GrossWeight[Type]\tNUMBER\t\t798\t1\tIfcMassMeasure\t1\nPARAM\tc7ebd4f0-ce82-41cf-a811-e25835141910\tQto_DuctFittingBaseQuantities.Length[Type]\tLENGTH\t\t798\t1\tIfcLengthMeasure\t1\nPARAM\tdd84260f-ace5-49b0-a8da-6c0aedb93c35\tQto_DuctFittingBaseQuantities.NetCrossSectionArea[Type]\tAREA\t\t798\t1\tIfcAreaMeasure\t1\nPARAM\t6f0ce78f-7679-4fbb-966c-31e144e67f0a\tQto_DuctFittingBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t798\t1\tIfcAreaMeasure\t1\n#\nGROUP\t799\tQto_DuctSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t87e6a1ec-8638-4d6e-8057-0dc7e79463d4\tQto_DuctSegmentBaseQuantities.GrossCrossSectionArea[Type]\tAREA\t\t799\t1\tIfcAreaMeasure\t1\nPARAM\te8d0d8cc-686d-492b-aff6-a0df0935549e\tQto_DuctSegmentBaseQuantities.GrossWeight[Type]\tNUMBER\t\t799\t1\tIfcMassMeasure\t1\nPARAM\t942783bf-f9bb-4f0c-8d4e-97f441965c8c\tQto_DuctSegmentBaseQuantities.Length[Type]\tLENGTH\t\t799\t1\tIfcLengthMeasure\t1\nPARAM\te3566aa6-05f2-4022-8c84-5dfffbb01607\tQto_DuctSegmentBaseQuantities.NetCrossSectionArea[Type]\tAREA\t\t799\t1\tIfcAreaMeasure\t1\nPARAM\t3c2a1a10-fdfc-430b-8488-b5b2a8bb4a51\tQto_DuctSegmentBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t799\t1\tIfcAreaMeasure\t1\n#\nGROUP\t800\tQto_DuctSilencerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td538a695-8f19-4327-986b-d95dcec2d8ce\tQto_DuctSilencerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t800\t1\tIfcMassMeasure\t1\n#\nGROUP\t801\tQto_EarthworksCutBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7dbd8db-baf9-46fa-a306-3ee851e87ddc\tQto_EarthworksCutBaseQuantities.Depth[Type]\tLENGTH\t\t801\t1\tIfcLengthMeasure\t1\nPARAM\t9338cf00-d152-4afc-bdee-5dd59d798b8e\tQto_EarthworksCutBaseQuantities.Length[Type]\tLENGTH\t\t801\t1\tIfcLengthMeasure\t1\nPARAM\ta396ffbd-47aa-445b-b48f-372ac5379ea3\tQto_EarthworksCutBaseQuantities.LooseVolume[Type]\tVOLUME\t\t801\t1\tIfcVolumeMeasure\t1\nPARAM\tcd57c2da-ff49-4eb8-88db-97d73d014945\tQto_EarthworksCutBaseQuantities.UndisturbedVolume[Type]\tVOLUME\t\t801\t1\tIfcVolumeMeasure\t1\nPARAM\ta71ea186-f257-4fec-b926-f3da66aa3280\tQto_EarthworksCutBaseQuantities.Weight[Type]\tNUMBER\t\t801\t1\tIfcMassMeasure\t1\nPARAM\t7f59411e-4463-4f5d-8551-f70d89bd1613\tQto_EarthworksCutBaseQuantities.Width[Type]\tLENGTH\t\t801\t1\tIfcLengthMeasure\t1\n#\nGROUP\t802\tQto_EarthworksFillBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t161f4d0a-abc9-4ab2-99a2-34a56f1fc9e7\tQto_EarthworksFillBaseQuantities.CompactedVolume[Type]\tVOLUME\t\t802\t1\tIfcVolumeMeasure\t1\nPARAM\t9211daa0-3884-489d-a680-8efa893cb552\tQto_EarthworksFillBaseQuantities.Depth[Type]\tLENGTH\t\t802\t1\tIfcLengthMeasure\t1\nPARAM\td9b26562-0c91-4506-a393-b14dca38ec20\tQto_EarthworksFillBaseQuantities.Length[Type]\tLENGTH\t\t802\t1\tIfcLengthMeasure\t1\nPARAM\taad71111-db72-48c1-8800-1835e71679bc\tQto_EarthworksFillBaseQuantities.LooseVolume[Type]\tVOLUME\t\t802\t1\tIfcVolumeMeasure\t1\nPARAM\t8ce19645-a8a0-46c6-9072-9255dc21b418\tQto_EarthworksFillBaseQuantities.Width[Type]\tLENGTH\t\t802\t1\tIfcLengthMeasure\t1\n#\nGROUP\t803\tQto_ElectricApplianceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t78d16b6e-d314-4ab3-b164-c8aa5c1a73dd\tQto_ElectricApplianceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t803\t1\tIfcMassMeasure\t1\n#\nGROUP\t804\tQto_ElectricDistributionBoardBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbba73cb3-4b8d-47cf-9df3-8bf505319405\tQto_ElectricDistributionBoardBaseQuantities.GrossWeight[Type]\tNUMBER\t\t804\t1\tIfcMassMeasure\t1\nPARAM\ta93f5f96-c6e8-4b44-adcc-8e0025a1a14b\tQto_ElectricDistributionBoardBaseQuantities.NumberOfCircuits[Type]\tINTEGER\t\t804\t1\tIfcCountMeasure\t1\n#\nGROUP\t805\tQto_ElectricFlowStorageDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0f576f2b-91de-4ab9-9c53-a153f7781715\tQto_ElectricFlowStorageDeviceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t805\t1\tIfcMassMeasure\t1\n#\nGROUP\t806\tQto_ElectricGeneratorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t183d5a65-e77e-4803-9ff4-a9f73d201852\tQto_ElectricGeneratorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t806\t1\tIfcMassMeasure\t1\n#\nGROUP\t807\tQto_ElectricMotorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t139a7827-2551-4b75-a13c-3471855faa95\tQto_ElectricMotorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t807\t1\tIfcMassMeasure\t1\n#\nGROUP\t808\tQto_ElectricTimeControlBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t049df424-9d19-4bc5-8ef0-fca18cf04e61\tQto_ElectricTimeControlBaseQuantities.GrossWeight[Type]\tNUMBER\t\t808\t1\tIfcMassMeasure\t1\n#\nGROUP\t809\tQto_EvaporativeCoolerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t078724f1-74dc-474a-82db-1988c623c27e\tQto_EvaporativeCoolerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t809\t1\tIfcMassMeasure\t1\n#\nGROUP\t810\tQto_EvaporatorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf9927ccd-f3b3-4686-8bd9-b5b2df08ef35\tQto_EvaporatorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t810\t1\tIfcMassMeasure\t1\n#\nGROUP\t811\tQto_FacilityPartBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t829068a0-8a98-4de1-94da-a5ec483db208\tQto_FacilityPartBaseQuantities.Area[Type]\tAREA\t\t811\t1\tIfcAreaMeasure\t1\nPARAM\tebbae741-04a7-4609-b89a-a93af5d42578\tQto_FacilityPartBaseQuantities.Height[Type]\tLENGTH\t\t811\t1\tIfcLengthMeasure\t1\nPARAM\tc04ed02f-b72b-4e70-922f-c8a6780f83a1\tQto_FacilityPartBaseQuantities.Length[Type]\tLENGTH\t\t811\t1\tIfcLengthMeasure\t1\nPARAM\t18e6f59f-7cbc-4a59-990a-e8138107d966\tQto_FacilityPartBaseQuantities.Volume[Type]\tVOLUME\t\t811\t1\tIfcVolumeMeasure\t1\nPARAM\t74841f6c-5d1d-4d91-9fed-5cedb4b8a701\tQto_FacilityPartBaseQuantities.Width[Type]\tLENGTH\t\t811\t1\tIfcLengthMeasure\t1\n#\nGROUP\t812\tQto_FanBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t42eeae10-d49d-4f03-a90c-5454db1d1a58\tQto_FanBaseQuantities.GrossWeight[Type]\tNUMBER\t\t812\t1\tIfcMassMeasure\t1\n#\nGROUP\t813\tQto_FilterBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdb56be5a-3105-4de1-b25c-9cca326abc43\tQto_FilterBaseQuantities.GrossWeight[Type]\tNUMBER\t\t813\t1\tIfcMassMeasure\t1\n#\nGROUP\t814\tQto_FireSuppressionTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf74d7f05-98ca-4aff-a038-f251a52dfae0\tQto_FireSuppressionTerminalBaseQuantities.GrossWeight[Type]\tNUMBER\t\t814\t1\tIfcMassMeasure\t1\n#\nGROUP\t815\tQto_FlowInstrumentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t575c9ad4-5ecc-4922-82f7-e5758fc77b34\tQto_FlowInstrumentBaseQuantities.GrossWeight[Type]\tNUMBER\t\t815\t1\tIfcMassMeasure\t1\n#\nGROUP\t816\tQto_FlowMeterBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te7e9ba9f-413e-4f9a-92f3-c086ac1da669\tQto_FlowMeterBaseQuantities.GrossWeight[Type]\tNUMBER\t\t816\t1\tIfcMassMeasure\t1\n#\nGROUP\t817\tQto_FootingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf186262f-8079-42c3-990e-54efeacfdc50\tQto_FootingBaseQuantities.CrossSectionArea[Type]\tAREA\t\t817\t1\tIfcAreaMeasure\t1\nPARAM\t08963d33-4815-4f54-80c3-47ee71203fae\tQto_FootingBaseQuantities.GrossSurfaceArea[Type]\tAREA\t\t817\t1\tIfcAreaMeasure\t1\nPARAM\tae77ed55-5acb-488c-be7a-9af780dfa868\tQto_FootingBaseQuantities.GrossVolume[Type]\tVOLUME\t\t817\t1\tIfcVolumeMeasure\t1\nPARAM\t8df451e6-de31-401f-bf4b-32801d6378db\tQto_FootingBaseQuantities.GrossWeight[Type]\tNUMBER\t\t817\t1\tIfcMassMeasure\t1\nPARAM\t49009742-9a07-41a5-bd31-a8b128cf050b\tQto_FootingBaseQuantities.Height[Type]\tLENGTH\t\t817\t1\tIfcLengthMeasure\t1\nPARAM\t73a68fbc-a85d-42b8-913e-69be37ad65f3\tQto_FootingBaseQuantities.Length[Type]\tLENGTH\t\t817\t1\tIfcLengthMeasure\t1\nPARAM\t4f736201-578a-4a71-ae6b-2882189b4699\tQto_FootingBaseQuantities.NetVolume[Type]\tVOLUME\t\t817\t1\tIfcVolumeMeasure\t1\nPARAM\t5b12ce44-19df-4432-a873-213299b805e7\tQto_FootingBaseQuantities.NetWeight[Type]\tNUMBER\t\t817\t1\tIfcMassMeasure\t1\nPARAM\t5cc8bcfd-e2c4-4111-8ea8-c521537f5866\tQto_FootingBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t817\t1\tIfcAreaMeasure\t1\nPARAM\t4da4b490-0532-459f-b386-5398384d098e\tQto_FootingBaseQuantities.Width[Type]\tLENGTH\t\t817\t1\tIfcLengthMeasure\t1\n#\nGROUP\t818\tQto_HeatExchangerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te5099f45-d827-4246-bba7-28dc5585fa5c\tQto_HeatExchangerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t818\t1\tIfcMassMeasure\t1\n#\nGROUP\t819\tQto_HumidifierBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc45b6178-d7c0-4216-8353-614a8fe5a979\tQto_HumidifierBaseQuantities.GrossWeight[Type]\tNUMBER\t\t819\t1\tIfcMassMeasure\t1\n#\nGROUP\t820\tQto_ImpactProtectionDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8d0b21fb-e6a8-48a5-9cbf-9a974f9aca02\tQto_ImpactProtectionDeviceBaseQuantities.Weight[Type]\tNUMBER\t\t820\t1\tIfcMassMeasure\t1\n#\nGROUP\t821\tQto_InterceptorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te3d6f352-e424-4e08-9408-dd8cebff47a5\tQto_InterceptorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t821\t1\tIfcMassMeasure\t1\n#\nGROUP\t822\tQto_JunctionBoxBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1315898a-2504-437f-9a60-fe142d155124\tQto_JunctionBoxBaseQuantities.GrossWeight[Type]\tNUMBER\t\t822\t1\tIfcMassMeasure\t1\nPARAM\t47dc72b9-67e9-4032-9885-8623a3b95965\tQto_JunctionBoxBaseQuantities.Height[Type]\tLENGTH\t\t822\t1\tIfcLengthMeasure\t1\nPARAM\t786f9c9f-25fc-4c1a-a164-fff7e5253a7b\tQto_JunctionBoxBaseQuantities.Length[Type]\tLENGTH\t\t822\t1\tIfcLengthMeasure\t1\nPARAM\t539afffb-28a5-4666-bf61-3a0039279818\tQto_JunctionBoxBaseQuantities.NumberOfGangs[Type]\tINTEGER\t\t822\t1\tIfcCountMeasure\t1\nPARAM\t51c43719-3fbc-42d6-ada2-8aaf2eec81a3\tQto_JunctionBoxBaseQuantities.Width[Type]\tLENGTH\t\t822\t1\tIfcLengthMeasure\t1\n#\nGROUP\t823\tQto_KerbBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbb20c640-6d37-4c26-b764-f787f7e3fd5f\tQto_KerbBaseQuantities.Depth[Type]\tLENGTH\t\t823\t1\tIfcLengthMeasure\t1\nPARAM\t0c9e134f-aa63-41f5-b731-0a3391532066\tQto_KerbBaseQuantities.Height[Type]\tLENGTH\t\t823\t1\tIfcLengthMeasure\t1\nPARAM\t29ffb04c-09ec-41ac-a184-f1a8d28b6106\tQto_KerbBaseQuantities.Length[Type]\tLENGTH\t\t823\t1\tIfcLengthMeasure\t1\nPARAM\t697dd341-7495-4b1d-83da-88a523091c64\tQto_KerbBaseQuantities.Volume[Type]\tVOLUME\t\t823\t1\tIfcVolumeMeasure\t1\nPARAM\t4d2cf0f5-c186-4827-990d-e311caa732aa\tQto_KerbBaseQuantities.Weight[Type]\tNUMBER\t\t823\t1\tIfcMassMeasure\t1\nPARAM\tba4fadc3-b1da-49b9-bf75-72caaf1747c6\tQto_KerbBaseQuantities.Width[Type]\tLENGTH\t\t823\t1\tIfcLengthMeasure\t1\n#\nGROUP\t824\tQto_LaborResourceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t932ca374-875b-4d32-a920-7734542b6697\tQto_LaborResourceBaseQuantities.OvertimeWork[Type]\tNUMBER\t\t824\t1\tIfcTimeMeasure\t1\nPARAM\t7a51213b-07de-4f7e-ac7f-f1d63601da3d\tQto_LaborResourceBaseQuantities.StandardWork[Type]\tNUMBER\t\t824\t1\tIfcTimeMeasure\t1\n#\nGROUP\t825\tQto_LampBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tecbb2d1d-6b76-4136-825f-f4b8778c67dd\tQto_LampBaseQuantities.GrossWeight[Type]\tNUMBER\t\t825\t1\tIfcMassMeasure\t1\n#\nGROUP\t826\tQto_LightFixtureBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t577eba30-efc5-4c25-9e78-eecc52aac0d8\tQto_LightFixtureBaseQuantities.GrossWeight[Type]\tNUMBER\t\t826\t1\tIfcMassMeasure\t1\n#\nGROUP\t827\tQto_LinearStratumBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9a407f8a-b0fb-45ce-83ff-4e0bc51de516\tQto_LinearStratumBaseQuantities.Diameter[Type]\tLENGTH\t\t827\t1\tIfcLengthMeasure\t1\nPARAM\t98601b63-aea4-406b-8262-8355a4e14b79\tQto_LinearStratumBaseQuantities.Length[Type]\tLENGTH\t\t827\t1\tIfcLengthMeasure\t1\n#\nGROUP\t828\tQto_MarineFacilityBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3bbdee6a-c3d7-4c32-b3ac-88625ce6ea35\tQto_MarineFacilityBaseQuantities.Area[Type]\tAREA\t\t828\t1\tIfcAreaMeasure\t1\nPARAM\t083f6f0d-a2fe-4b0a-b825-d8f4e4e3989a\tQto_MarineFacilityBaseQuantities.Height[Type]\tLENGTH\t\t828\t1\tIfcLengthMeasure\t1\nPARAM\t9c5ce8c0-5999-4a63-a5f5-c84b5f225d19\tQto_MarineFacilityBaseQuantities.Length[Type]\tLENGTH\t\t828\t1\tIfcLengthMeasure\t1\nPARAM\t461ec05a-7c84-41a1-8394-a52988fb0119\tQto_MarineFacilityBaseQuantities.Volume[Type]\tVOLUME\t\t828\t1\tIfcVolumeMeasure\t1\nPARAM\t9e1a9a9e-b56d-4724-b710-860bdf5c8972\tQto_MarineFacilityBaseQuantities.Width[Type]\tLENGTH\t\t828\t1\tIfcLengthMeasure\t1\n#\nGROUP\t829\tQto_MemberBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t146130f6-7242-44c7-b4cf-0764efce9798\tQto_MemberBaseQuantities.CrossSectionArea[Type]\tAREA\t\t829\t1\tIfcAreaMeasure\t1\nPARAM\t404bb87c-19a8-4500-966a-9caa41947c0d\tQto_MemberBaseQuantities.GrossSurfaceArea[Type]\tAREA\t\t829\t1\tIfcAreaMeasure\t1\nPARAM\ta0877c9d-8f29-4227-a163-0312601b0772\tQto_MemberBaseQuantities.GrossVolume[Type]\tVOLUME\t\t829\t1\tIfcVolumeMeasure\t1\nPARAM\t27d410f5-7577-4560-8d14-ae0931707f00\tQto_MemberBaseQuantities.GrossWeight[Type]\tNUMBER\t\t829\t1\tIfcMassMeasure\t1\nPARAM\t9a276285-b460-415b-abca-fb90092cffb3\tQto_MemberBaseQuantities.Length[Type]\tLENGTH\t\t829\t1\tIfcLengthMeasure\t1\nPARAM\t81702afe-958c-4b3a-9031-c4da55843799\tQto_MemberBaseQuantities.NetSurfaceArea[Type]\tAREA\t\t829\t1\tIfcAreaMeasure\t1\nPARAM\t8fa91833-c5ef-4508-8cf8-9824d8a7a707\tQto_MemberBaseQuantities.NetVolume[Type]\tVOLUME\t\t829\t1\tIfcVolumeMeasure\t1\nPARAM\tfd8f7b57-6081-4bc0-98c9-78d3653ff5b5\tQto_MemberBaseQuantities.NetWeight[Type]\tNUMBER\t\t829\t1\tIfcMassMeasure\t1\nPARAM\tef4a88bd-bb39-453d-8b59-d7dd1e5572a5\tQto_MemberBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t829\t1\tIfcAreaMeasure\t1\n#\nGROUP\t830\tQto_MotorConnectionBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3eb46014-359c-4ffb-a78e-b6080e9a5a41\tQto_MotorConnectionBaseQuantities.GrossWeight[Type]\tNUMBER\t\t830\t1\tIfcMassMeasure\t1\n#\nGROUP\t831\tQto_OpeningElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6f486035-6dac-49d1-b6a0-faa2594ac6ac\tQto_OpeningElementBaseQuantities.Area[Type]\tAREA\t\t831\t1\tIfcAreaMeasure\t1\nPARAM\t61bd9e42-e2af-407e-9116-9648264c658d\tQto_OpeningElementBaseQuantities.Depth[Type]\tLENGTH\t\t831\t1\tIfcLengthMeasure\t1\nPARAM\t66be98da-6281-4585-be3c-a1160460d52b\tQto_OpeningElementBaseQuantities.Height[Type]\tLENGTH\t\t831\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb8a34c00-e619-4569-bb79-9acaafec611f\tQto_OpeningElementBaseQuantities.Volume[Type]\tVOLUME\t\t831\t1\tIfcVolumeMeasure\t1\nPARAM\t19843f5b-89f4-4bbc-ba63-2a5667e7634e\tQto_OpeningElementBaseQuantities.Width[Type]\tLENGTH\t\t831\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t832\tQto_OutletBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfc18da68-da91-42f6-b31c-68ad7d35357e\tQto_OutletBaseQuantities.GrossWeight[Type]\tNUMBER\t\t832\t1\tIfcMassMeasure\t1\n#\nGROUP\t833\tQto_PavementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t69abf7e4-4fc0-49d2-8fcd-af08f6f36b7c\tQto_PavementBaseQuantities.Depth[Type]\tLENGTH\t\t833\t1\tIfcLengthMeasure\t1\nPARAM\t33054668-a1a7-4b2e-9a16-9663c4e8f891\tQto_PavementBaseQuantities.GrossArea[Type]\tAREA\t\t833\t1\tIfcAreaMeasure\t1\nPARAM\tb68d44ee-7d7f-4f42-9005-4a627a6144ec\tQto_PavementBaseQuantities.GrossVolume[Type]\tVOLUME\t\t833\t1\tIfcVolumeMeasure\t1\nPARAM\t702ca609-013c-4d0a-bffd-fbf24a8666b4\tQto_PavementBaseQuantities.Length[Type]\tLENGTH\t\t833\t1\tIfcLengthMeasure\t1\nPARAM\t4cde6da4-7135-45ef-946c-9a9892902615\tQto_PavementBaseQuantities.NetArea[Type]\tAREA\t\t833\t1\tIfcAreaMeasure\t1\nPARAM\t3405a60b-b552-43f3-90c4-c38721db0faa\tQto_PavementBaseQuantities.NetVolume[Type]\tVOLUME\t\t833\t1\tIfcVolumeMeasure\t1\nPARAM\t0bc5df17-7d3a-434a-9319-60a0887d5b96\tQto_PavementBaseQuantities.Width[Type]\tLENGTH\t\t833\t1\tIfcLengthMeasure\t1\n#\nGROUP\t834\tQto_PictorialSignQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfcf7839f-a4ce-4700-a50c-82152649169d\tQto_PictorialSignQuantities.Area[Type]\tAREA\t\t834\t1\tIfcAreaMeasure\t1\nPARAM\t7cdcc0c8-151a-4cb5-91ad-7e09c6ba96bf\tQto_PictorialSignQuantities.SignArea[Type]\tAREA\t\t834\t1\tIfcAreaMeasure\t1\n#\nGROUP\t835\tQto_PileBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdb283971-97c1-4fc2-965a-c829cef95003\tQto_PileBaseQuantities.CrossSectionArea[Type]\tAREA\t\t835\t1\tIfcAreaMeasure\t1\nPARAM\t35539ffa-c254-4b46-911a-b7eef4820d9b\tQto_PileBaseQuantities.GrossSurfaceArea[Type]\tAREA\t\t835\t1\tIfcAreaMeasure\t1\nPARAM\t9b7f1caf-0a14-4946-9d87-f4b3b1299eff\tQto_PileBaseQuantities.GrossVolume[Type]\tVOLUME\t\t835\t1\tIfcVolumeMeasure\t1\nPARAM\tba801601-f444-4471-88d7-f880b861d103\tQto_PileBaseQuantities.GrossWeight[Type]\tNUMBER\t\t835\t1\tIfcMassMeasure\t1\nPARAM\t98bb2687-6b02-4d2a-94d4-d520a3e92ed1\tQto_PileBaseQuantities.Length[Type]\tLENGTH\t\t835\t1\tIfcLengthMeasure\t1\nPARAM\t1e12a14a-24b9-4b8c-bf4f-3a63bc750f9b\tQto_PileBaseQuantities.NetVolume[Type]\tVOLUME\t\t835\t1\tIfcVolumeMeasure\t1\nPARAM\tbd27872d-37ba-424b-a3e3-81af64d69211\tQto_PileBaseQuantities.NetWeight[Type]\tNUMBER\t\t835\t1\tIfcMassMeasure\t1\nPARAM\t9256495e-a299-4307-80e9-081836b2295c\tQto_PileBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t835\t1\tIfcAreaMeasure\t1\n#\nGROUP\t836\tQto_PipeFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfb32f7ee-63e3-4a9a-b82c-520ac4085d87\tQto_PipeFittingBaseQuantities.GrossCrossSectionArea[Type]\tAREA\t\t836\t1\tIfcAreaMeasure\t1\nPARAM\t55c5c9de-f0f4-43e9-bf7c-c80b5e9d4825\tQto_PipeFittingBaseQuantities.GrossWeight[Type]\tNUMBER\t\t836\t1\tIfcMassMeasure\t1\nPARAM\t6a8bb9d1-4362-42db-8e2f-1b2a978d26e1\tQto_PipeFittingBaseQuantities.Length[Type]\tLENGTH\t\t836\t1\tIfcLengthMeasure\t1\nPARAM\tac3dab3f-74e9-4ab5-92b6-cdc49f483d18\tQto_PipeFittingBaseQuantities.NetCrossSectionArea[Type]\tAREA\t\t836\t1\tIfcAreaMeasure\t1\nPARAM\t3f54531f-e0b8-4688-9d11-65b186eee9bd\tQto_PipeFittingBaseQuantities.NetWeight[Type]\tNUMBER\t\t836\t1\tIfcMassMeasure\t1\nPARAM\t0e4f9045-9072-4cfc-bd88-34c9dceb4f9f\tQto_PipeFittingBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t836\t1\tIfcAreaMeasure\t1\n#\nGROUP\t837\tQto_PipeSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t42567307-ac4e-4ba1-9202-8bbfbc976b4f\tQto_PipeSegmentBaseQuantities.FootPrintArea[Type]\tAREA\t\t837\t1\tIfcAreaMeasure\t1\nPARAM\tec0505a3-85d2-4d7f-9e57-2f7e0c2c0250\tQto_PipeSegmentBaseQuantities.GrossCrossSectionArea[Type]\tAREA\t\t837\t1\tIfcAreaMeasure\t1\nPARAM\ta6b4fcae-c425-47f9-bf58-89d097a7e454\tQto_PipeSegmentBaseQuantities.GrossWeight[Type]\tNUMBER\t\t837\t1\tIfcMassMeasure\t1\nPARAM\teba44d42-f8b7-4c5f-bf23-57004304d700\tQto_PipeSegmentBaseQuantities.Length[Type]\tLENGTH\t\t837\t1\tIfcLengthMeasure\t1\nPARAM\t217ab057-031a-4ed6-9ce2-81772f47c14e\tQto_PipeSegmentBaseQuantities.NetCrossSectionArea[Type]\tAREA\t\t837\t1\tIfcAreaMeasure\t1\nPARAM\te1c25ca4-4480-430c-81f9-a342682130e5\tQto_PipeSegmentBaseQuantities.NetWeight[Type]\tNUMBER\t\t837\t1\tIfcMassMeasure\t1\nPARAM\ta8163293-a663-4c32-8fcf-ad40959e5e66\tQto_PipeSegmentBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t837\t1\tIfcAreaMeasure\t1\n#\nGROUP\t838\tQto_PlateBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4fcff3c1-7b14-4f7a-9959-80fdba3e643a\tQto_PlateBaseQuantities.GrossArea[Type]\tAREA\t\t838\t1\tIfcAreaMeasure\t1\nPARAM\t44a07c22-8a0e-4cfa-b87f-6b0fc1a3d904\tQto_PlateBaseQuantities.GrossVolume[Type]\tVOLUME\t\t838\t1\tIfcVolumeMeasure\t1\nPARAM\t5cfceafa-bbc4-48f7-988b-98a5280f0bbb\tQto_PlateBaseQuantities.GrossWeight[Type]\tNUMBER\t\t838\t1\tIfcMassMeasure\t1\nPARAM\t08d02163-6da9-4071-8550-f11752a7f738\tQto_PlateBaseQuantities.NetArea[Type]\tAREA\t\t838\t1\tIfcAreaMeasure\t1\nPARAM\tc30cb1d4-08af-4952-9eac-5e360593528b\tQto_PlateBaseQuantities.NetVolume[Type]\tVOLUME\t\t838\t1\tIfcVolumeMeasure\t1\nPARAM\tfd750145-d790-4dca-a9d4-9f86fc13b5ba\tQto_PlateBaseQuantities.NetWeight[Type]\tNUMBER\t\t838\t1\tIfcMassMeasure\t1\nPARAM\t1a6d4b08-8434-4c58-986e-796f6e6132d6\tQto_PlateBaseQuantities.Perimeter[Type]\tLENGTH\t\t838\t1\tIfcLengthMeasure\t1\nPARAM\t283fdb30-acd6-409c-b242-e342ad81bd26\tQto_PlateBaseQuantities.Width[Type]\tLENGTH\t\t838\t1\tIfcLengthMeasure\t1\n#\nGROUP\t839\tQto_ProjectionElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc991d39d-7bc0-4df1-b253-0ce1a3052bcb\tQto_ProjectionElementBaseQuantities.Area[Type]\tAREA\t\t839\t1\tIfcAreaMeasure\t1\nPARAM\t975316df-b6dc-4240-9a81-b9c5ca7d9592\tQto_ProjectionElementBaseQuantities.Volume[Type]\tVOLUME\t\t839\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t840\tQto_ProtectiveDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tff11509c-1731-4bae-8c6e-2ee8183d2fe1\tQto_ProtectiveDeviceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t840\t1\tIfcMassMeasure\t1\n#\nGROUP\t841\tQto_ProtectiveDeviceTrippingUnitBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td62dca82-44fd-42e4-8956-655d4d926e74\tQto_ProtectiveDeviceTrippingUnitBaseQuantities.GrossWeight[Type]\tNUMBER\t\t841\t1\tIfcMassMeasure\t1\n#\nGROUP\t842\tQto_PumpBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcb5e499b-725d-4ef0-a213-3c2bc7e88afd\tQto_PumpBaseQuantities.GrossWeight[Type]\tNUMBER\t\t842\t1\tIfcMassMeasure\t1\n#\nGROUP\t843\tQto_RailBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb6069b3a-df91-407e-8553-7dd78ba83c40\tQto_RailBaseQuantities.Length[Type]\tLENGTH\t\t843\t1\tIfcLengthMeasure\t1\nPARAM\t93e60015-7402-4672-8865-1993abfb4c42\tQto_RailBaseQuantities.Volume[Type]\tVOLUME\t\t843\t1\tIfcVolumeMeasure\t1\nPARAM\t401ecac4-8516-4052-bcca-c2ab5c05aee1\tQto_RailBaseQuantities.Weight[Type]\tNUMBER\t\t843\t1\tIfcMassMeasure\t1\n#\nGROUP\t844\tQto_RailingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t430493fb-3350-4627-8186-208bcccdcf5c\tQto_RailingBaseQuantities.Length[Type]\tLENGTH\t\t844\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t845\tQto_RampFlightBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t921a9d97-5414-4621-9ebf-82d8b4d1e6d2\tQto_RampFlightBaseQuantities.GrossArea[Type]\tAREA\t\t845\t1\tIfcAreaMeasure\t1\nPARAM\tfe7e8e60-cbc0-470a-9265-15df9e515fe4\tQto_RampFlightBaseQuantities.GrossVolume[Type]\tVOLUME\t\t845\t1\tIfcVolumeMeasure\t1\nPARAM\t4d91c6f2-2d2e-4ea9-a234-37c76a462b56\tQto_RampFlightBaseQuantities.Length[Type]\tLENGTH\t\t845\t1\tIfcLengthMeasure\t1\nPARAM\t3c453549-24fc-44fb-a186-5d3d8e060662\tQto_RampFlightBaseQuantities.NetArea[Type]\tAREA\t\t845\t1\tIfcAreaMeasure\t1\nPARAM\t949aeced-5b00-47f6-892b-8b1f922f2929\tQto_RampFlightBaseQuantities.NetVolume[Type]\tVOLUME\t\t845\t1\tIfcVolumeMeasure\t1\nPARAM\t327adbec-11ab-40ee-965c-72077e7344bb\tQto_RampFlightBaseQuantities.Width[Type]\tLENGTH\t\t845\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t846\tQto_ReinforcedSoilBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb2c050aa-ad47-4ea7-93ba-5e372dcf6075\tQto_ReinforcedSoilBaseQuantities.Area[Type]\tAREA\t\t846\t1\tIfcAreaMeasure\t1\nPARAM\t1a5ddcf7-9752-41a9-960d-35f8b68468c6\tQto_ReinforcedSoilBaseQuantities.Depth[Type]\tLENGTH\t\t846\t1\tIfcLengthMeasure\t1\nPARAM\td2e20a79-4ad2-45cd-9929-12ba926b3bf6\tQto_ReinforcedSoilBaseQuantities.Length[Type]\tLENGTH\t\t846\t1\tIfcLengthMeasure\t1\nPARAM\t23b6159c-4a32-436b-8964-03aea30fba94\tQto_ReinforcedSoilBaseQuantities.Volume[Type]\tVOLUME\t\t846\t1\tIfcVolumeMeasure\t1\nPARAM\t680956c5-fa64-4f5a-82f8-c2521529f39b\tQto_ReinforcedSoilBaseQuantities.Width[Type]\tLENGTH\t\t846\t1\tIfcLengthMeasure\t1\n#\nGROUP\t847\tQto_ReinforcingElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t82845659-27bf-4151-b0d9-77f909e48fc3\tQto_ReinforcingElementBaseQuantities.Count[Type]\tINTEGER\t\t847\t1\tIfcCountMeasure\t1\nPARAM\t5500b993-7cd5-4d4b-a1f3-c43aef840144\tQto_ReinforcingElementBaseQuantities.Length[Type]\tLENGTH\t\t847\t1\tIfcLengthMeasure\t1\nPARAM\t23ee2291-2395-4cdc-89a2-057f44d66006\tQto_ReinforcingElementBaseQuantities.Weight[Type]\tNUMBER\t\t847\t1\tIfcMassMeasure\t1\n#\nGROUP\t848\tQto_RoofBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9bf084a3-a2c8-472a-a8c4-60b3a4bcf7b7\tQto_RoofBaseQuantities.GrossArea[Type]\tAREA\t\t848\t1\tIfcAreaMeasure\t1\nPARAM\t423ac981-88ba-4f8f-8138-439330e5fc4f\tQto_RoofBaseQuantities.NetArea[Type]\tAREA\t\t848\t1\tIfcAreaMeasure\t1\nPARAM\t366b8fb3-e5ee-4bba-ab0d-8be493fec04d\tQto_RoofBaseQuantities.ProjectedArea[Type]\tAREA\t\t848\t1\tIfcAreaMeasure\t1\n#\nGROUP\t849\tQto_SanitaryTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf98e9445-76db-4cea-a428-af754e0b859d\tQto_SanitaryTerminalBaseQuantities.GrossWeight[Type]\tNUMBER\t\t849\t1\tIfcMassMeasure\t1\n#\nGROUP\t850\tQto_SensorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t28cf8ea2-6237-46d2-906e-62c3e06abfbc\tQto_SensorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t850\t1\tIfcMassMeasure\t1\n#\nGROUP\t851\tQto_SignalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbd289733-1d57-4c88-99fb-ccffb310b1e6\tQto_SignalBaseQuantities.Weight[Type]\tNUMBER\t\t851\t1\tIfcMassMeasure\t1\n#\nGROUP\t852\tQto_SignBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6172c053-e3f1-4118-b314-dba9307f9781\tQto_SignBaseQuantities.Height[Type]\tLENGTH\t\t852\t1\tIfcLengthMeasure\t1\nPARAM\td89cf479-a22d-44f8-b27c-c53500cff42b\tQto_SignBaseQuantities.Thickness[Type]\tLENGTH\t\t852\t1\tIfcLengthMeasure\t1\nPARAM\t34e3864a-9c9d-4df3-8281-ba7725f8b83b\tQto_SignBaseQuantities.Weight[Type]\tNUMBER\t\t852\t1\tIfcMassMeasure\t1\nPARAM\tf0ebef07-8c19-48a7-9be3-1e768d443fd9\tQto_SignBaseQuantities.Width[Type]\tLENGTH\t\t852\t1\tIfcLengthMeasure\t1\n#\nGROUP\t853\tQto_SiteBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0f4b62b8-79e0-4f82-8057-5876f046d633\tQto_SiteBaseQuantities.GrossArea[Type]\tAREA\t\t853\t1\tIfcAreaMeasure\t1\nPARAM\t4b9d4443-1afb-40a5-a19a-1ec45b7cf079\tQto_SiteBaseQuantities.GrossPerimeter[Type]\tLENGTH\t\t853\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t854\tQto_SlabBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t03212d12-35e1-4f12-9018-0a753b4c41a7\tQto_SlabBaseQuantities.Depth[Type]\tLENGTH\t\t854\t1\tIfcLengthMeasure\t1\nPARAM\te63c9543-0d4f-4547-8910-a3f24dd7502e\tQto_SlabBaseQuantities.GrossArea[Type]\tAREA\t\t854\t1\tIfcAreaMeasure\t1\nPARAM\t561fcdad-0c7f-41da-b024-9c2eee5bf216\tQto_SlabBaseQuantities.GrossVolume[Type]\tVOLUME\t\t854\t1\tIfcVolumeMeasure\t1\nPARAM\tf1eb1b5f-1e50-4cba-93c3-2cba73641d9c\tQto_SlabBaseQuantities.GrossWeight[Type]\tNUMBER\t\t854\t1\tIfcMassMeasure\t1\nPARAM\tf7fb4781-7233-41ab-b1cb-1e912b740b3e\tQto_SlabBaseQuantities.Length[Type]\tLENGTH\t\t854\t1\tIfcLengthMeasure\t1\nPARAM\tfaa4746c-5d95-43ad-a816-799cc55d5a21\tQto_SlabBaseQuantities.NetArea[Type]\tAREA\t\t854\t1\tIfcAreaMeasure\t1\nPARAM\t86309906-b11f-4dcf-b033-f8e7411a27c7\tQto_SlabBaseQuantities.NetVolume[Type]\tVOLUME\t\t854\t1\tIfcVolumeMeasure\t1\nPARAM\t3e37c743-7dd3-48f8-82a6-e9c533ca9da3\tQto_SlabBaseQuantities.NetWeight[Type]\tNUMBER\t\t854\t1\tIfcMassMeasure\t1\nPARAM\t2d8c0ca9-2fae-4517-8f40-8c41ceb5cf7d\tQto_SlabBaseQuantities.Perimeter[Type]\tLENGTH\t\t854\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t660e8036-5b23-468f-9802-84741994a69e\tQto_SlabBaseQuantities.Width[Type]\tLENGTH\t\t854\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t855\tQto_SleeperBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t093734dc-290b-43df-9c8f-f761cb9e00b5\tQto_SleeperBaseQuantities.Height[Type]\tLENGTH\t\t855\t1\tIfcLengthMeasure\t1\nPARAM\t2fe3b491-723c-4a44-91f6-33f129013569\tQto_SleeperBaseQuantities.Length[Type]\tLENGTH\t\t855\t1\tIfcLengthMeasure\t1\nPARAM\t194d6288-d140-468c-910b-90999e35739a\tQto_SleeperBaseQuantities.Width[Type]\tLENGTH\t\t855\t1\tIfcLengthMeasure\t1\n#\nGROUP\t856\tQto_SolarDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc3b1090-07b8-4d33-a99b-a33df7b2f7a6\tQto_SolarDeviceBaseQuantities.GrossArea[Type]\tAREA\t\t856\t1\tIfcAreaMeasure\t1\nPARAM\t86f0ae02-1565-43c1-bca9-53233a9af5fe\tQto_SolarDeviceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t856\t1\tIfcMassMeasure\t1\n#\nGROUP\t857\tQto_SpaceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t849125ce-732a-459e-87b1-12183071819e\tQto_SpaceBaseQuantities.FinishCeilingHeight[Type]\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6942af6c-b212-4f61-b16b-890251d8eb33\tQto_SpaceBaseQuantities.FinishFloorHeight[Type]\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8754ed28-4a21-44bd-9bae-14a6d6a9ce72\tQto_SpaceBaseQuantities.GrossCeilingArea[Type]\tAREA\t\t857\t1\tIfcAreaMeasure\t1\nPARAM\ta11444af-f02f-49c6-8d41-bfd86986cd05\tQto_SpaceBaseQuantities.GrossFloorArea[Type]\tAREA\t\t857\t1\tIfcAreaMeasure\t1\nPARAM\te1abdd9d-2211-4e7e-b8cc-b604fcc7e519\tQto_SpaceBaseQuantities.GrossPerimeter[Type]\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t589b9ddb-b705-4909-991b-29c12d86739e\tQto_SpaceBaseQuantities.GrossVolume[Type]\tVOLUME\t\t857\t1\tIfcVolumeMeasure\t1\nPARAM\t7692dcfa-6b82-48c4-9c77-3006b3e5c8b2\tQto_SpaceBaseQuantities.GrossWallArea[Type]\tAREA\t\t857\t1\tIfcAreaMeasure\t1\nPARAM\te6b69ade-c13a-4c8b-ac7c-f46d8cfde8af\tQto_SpaceBaseQuantities.Height[Type]\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf7428dc7-2125-402d-93c1-76e168198e36\tQto_SpaceBaseQuantities.NetCeilingArea[Type]\tAREA\t\t857\t1\tIfcAreaMeasure\t1\nPARAM\t220a6103-1f6d-49da-a219-f14337fc68f3\tQto_SpaceBaseQuantities.NetFloorArea[Type]\tAREA\t\t857\t1\tIfcAreaMeasure\t1\nPARAM\ta5913eab-4f3a-4534-89ab-3b5c217a1b51\tQto_SpaceBaseQuantities.NetPerimeter[Type]\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t07b18587-87b4-4de7-b523-1ef21b5a2cda\tQto_SpaceBaseQuantities.NetVolume[Type]\tVOLUME\t\t857\t1\tIfcVolumeMeasure\t1\nPARAM\tf330f885-77a2-4b49-b55e-731dc4945af3\tQto_SpaceBaseQuantities.NetWallArea[Type]\tAREA\t\t857\t1\tIfcAreaMeasure\t1\n#\nGROUP\t858\tQto_SpaceHeaterBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3c576c32-46a3-435c-a8ec-531a7a4a79c7\tQto_SpaceHeaterBaseQuantities.GrossWeight[Type]\tNUMBER\t\t858\t1\tIfcMassMeasure\t1\nPARAM\t2da0cf68-a9f3-42c2-b623-85c58faf9921\tQto_SpaceHeaterBaseQuantities.Length[Type]\tLENGTH\t\t858\t1\tIfcLengthMeasure\t1\nPARAM\tca4d1675-d459-43e8-b9c2-abec08be9b7f\tQto_SpaceHeaterBaseQuantities.NetWeight[Type]\tNUMBER\t\t858\t1\tIfcMassMeasure\t1\n#\nGROUP\t859\tQto_SpatialZoneBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t22c8f349-38a9-470f-abff-b7853553651c\tQto_SpatialZoneBaseQuantities.Height[Type]\tLENGTH\t\t859\t1\tIfcLengthMeasure\t1\nPARAM\tb8541799-fa19-4921-8eb6-50c55d2491eb\tQto_SpatialZoneBaseQuantities.Length[Type]\tLENGTH\t\t859\t1\tIfcLengthMeasure\t1\nPARAM\te8666009-aa40-4682-87a1-4a77d6e88362\tQto_SpatialZoneBaseQuantities.Width[Type]\tLENGTH\t\t859\t1\tIfcLengthMeasure\t1\n#\nGROUP\t860\tQto_StackTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6610183a-0c3e-4323-a486-eb10404c0a9b\tQto_StackTerminalBaseQuantities.GrossWeight[Type]\tNUMBER\t\t860\t1\tIfcMassMeasure\t1\n#\nGROUP\t861\tQto_StairFlightBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta6e29012-8f7c-4acc-809d-500dc623d034\tQto_StairFlightBaseQuantities.GrossVolume[Type]\tVOLUME\t\t861\t1\tIfcVolumeMeasure\t1\nPARAM\t8d7dfbab-a2e2-4d56-85b8-2252732d7e68\tQto_StairFlightBaseQuantities.Length[Type]\tLENGTH\t\t861\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1153a109-5eaa-4337-b720-bf59b55e31bf\tQto_StairFlightBaseQuantities.NetVolume[Type]\tVOLUME\t\t861\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t862\tQto_SurfaceFeatureBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8b95559f-e0b8-49c9-8182-9fe4d3a4a1b3\tQto_SurfaceFeatureBaseQuantities.Area[Type]\tAREA\t\t862\t1\tIfcAreaMeasure\t1\nPARAM\tf6d38f1b-1387-4eb0-9fbe-ffddff056d06\tQto_SurfaceFeatureBaseQuantities.Length[Type]\tLENGTH\t\t862\t1\tIfcLengthMeasure\t1\n#\nGROUP\t863\tQto_SwitchingDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9549393b-b926-4adf-bce9-3bf1eec3abce\tQto_SwitchingDeviceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t863\t1\tIfcMassMeasure\t1\n#\nGROUP\t864\tQto_TankBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tae840b9a-ae28-494f-8cb7-f05c52b28377\tQto_TankBaseQuantities.GrossWeight[Type]\tNUMBER\t\t864\t1\tIfcMassMeasure\t1\nPARAM\tfcdb6ffc-ace8-4bcd-83db-68a59205f44e\tQto_TankBaseQuantities.NetWeight[Type]\tNUMBER\t\t864\t1\tIfcMassMeasure\t1\nPARAM\t776a5129-c649-41ee-953f-300a443764cd\tQto_TankBaseQuantities.TotalSurfaceArea[Type]\tAREA\t\t864\t1\tIfcAreaMeasure\t1\n#\nGROUP\t865\tQto_TransformerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t69441c55-6488-407e-b990-38f0826d266e\tQto_TransformerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t865\t1\tIfcMassMeasure\t1\n#\nGROUP\t866\tQto_TubeBundleBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t30cfac62-85ff-4cb6-9cd8-6f81dda9f2bc\tQto_TubeBundleBaseQuantities.GrossWeight[Type]\tNUMBER\t\t866\t1\tIfcMassMeasure\t1\nPARAM\t4a3e04b0-d9bf-411e-bd4b-f86286fc7a40\tQto_TubeBundleBaseQuantities.NetWeight[Type]\tNUMBER\t\t866\t1\tIfcMassMeasure\t1\n#\nGROUP\t867\tQto_UnitaryControlElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5ad416d8-7e54-4814-b982-838108f40cc4\tQto_UnitaryControlElementBaseQuantities.GrossWeight[Type]\tNUMBER\t\t867\t1\tIfcMassMeasure\t1\n#\nGROUP\t868\tQto_UnitaryEquipmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0fe75746-4f1b-4d70-aad7-780590a25362\tQto_UnitaryEquipmentBaseQuantities.GrossWeight[Type]\tNUMBER\t\t868\t1\tIfcMassMeasure\t1\n#\nGROUP\t869\tQto_ValveBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t013590a7-7424-410a-b03d-cb10c588722d\tQto_ValveBaseQuantities.GrossWeight[Type]\tNUMBER\t\t869\t1\tIfcMassMeasure\t1\n#\nGROUP\t870\tQto_VehicleBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8e6df5a9-022d-4f17-a8e7-3d7ae24df086\tQto_VehicleBaseQuantities.Height[Type]\tLENGTH\t\t870\t1\tIfcLengthMeasure\t1\nPARAM\tf2fa0a92-8974-41ea-a1e8-45f7f886f6a1\tQto_VehicleBaseQuantities.Length[Type]\tLENGTH\t\t870\t1\tIfcLengthMeasure\t1\nPARAM\ta1a79947-7d0c-44ce-9bc7-b60f8926a43d\tQto_VehicleBaseQuantities.Width[Type]\tLENGTH\t\t870\t1\tIfcLengthMeasure\t1\n#\nGROUP\t871\tQto_VibrationIsolatorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e282b42-fcd5-4a02-916e-479026cfab79\tQto_VibrationIsolatorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t871\t1\tIfcMassMeasure\t1\n#\nGROUP\t872\tQto_VolumetricStratumBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb1f1c5c2-1c72-459e-be9e-880dbe592616\tQto_VolumetricStratumBaseQuantities.Area[Type]\tAREA\t\t872\t1\tIfcAreaMeasure\t1\nPARAM\t2bd36d04-4e86-4dd1-af53-dc58cebe00be\tQto_VolumetricStratumBaseQuantities.Mass[Type]\tNUMBER\t\t872\t1\tIfcMassMeasure\t1\nPARAM\t040e3581-e161-407e-a461-ff28b15c49c4\tQto_VolumetricStratumBaseQuantities.PlanArea[Type]\tAREA\t\t872\t1\tIfcAreaMeasure\t1\nPARAM\t7ba30d60-7d6a-4a61-a743-e8436101226d\tQto_VolumetricStratumBaseQuantities.Volume[Type]\tVOLUME\t\t872\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t873\tQto_WallBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t52c93921-54b0-4df2-8542-57dea01243b3\tQto_WallBaseQuantities.GrossFootprintArea[Type]\tAREA\t\t873\t1\tIfcAreaMeasure\t1\nPARAM\tce61ea05-937a-471a-8474-a23f3ea8b593\tQto_WallBaseQuantities.GrossFootPrintArea[Type]\tAREA\t\t873\t1\tIfcAreaMeasure\t1\nPARAM\t37cd6b10-6a92-466e-9725-c9c719f4383a\tQto_WallBaseQuantities.GrossSideArea[Type]\tAREA\t\t873\t1\tIfcAreaMeasure\t1\nPARAM\t77dd166e-f7cd-4a8a-8c78-a1c7a5ade1d4\tQto_WallBaseQuantities.GrossVolume[Type]\tVOLUME\t\t873\t1\tIfcVolumeMeasure\t1\nPARAM\tad30a54a-79ba-4d12-b60d-b568175e8988\tQto_WallBaseQuantities.GrossWeight[Type]\tNUMBER\t\t873\t1\tIfcMassMeasure\t1\nPARAM\td245d37f-f262-47e6-9fe6-7612c3d3c358\tQto_WallBaseQuantities.Height[Type]\tLENGTH\t\t873\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0df173c0-7cf0-4e75-a80e-ce5401714303\tQto_WallBaseQuantities.Length[Type]\tLENGTH\t\t873\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td2f3193a-6694-40d9-a066-bfd6c5684195\tQto_WallBaseQuantities.NetFootprintArea[Type]\tAREA\t\t873\t1\tIfcAreaMeasure\t1\nPARAM\t1da368ce-d7c4-4105-8b89-1199d2586604\tQto_WallBaseQuantities.NetFootPrintArea[Type]\tAREA\t\t873\t1\tIfcAreaMeasure\t1\nPARAM\t451ac791-1244-4d2a-86cb-ceff495e68ae\tQto_WallBaseQuantities.NetSideArea[Type]\tAREA\t\t873\t1\tIfcAreaMeasure\t1\nPARAM\t837281e6-577c-4775-93c9-a3e03ccad4c7\tQto_WallBaseQuantities.NetVolume[Type]\tVOLUME\t\t873\t1\tIfcVolumeMeasure\t1\nPARAM\t069ea2eb-fcff-40dd-b3d4-a67de6d6c9ef\tQto_WallBaseQuantities.NetWeight[Type]\tNUMBER\t\t873\t1\tIfcMassMeasure\t1\nPARAM\tac94a44a-c922-4f8a-82d1-556781d76e58\tQto_WallBaseQuantities.Width[Type]\tLENGTH\t\t873\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t874\tQto_WasteTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3beb93a0-6c05-4925-ad27-0e86b579a0ba\tQto_WasteTerminalBaseQuantities.GrossWeight[Type]\tNUMBER\t\t874\t1\tIfcMassMeasure\t1\n#\nGROUP\t875\tQto_WindowBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0665b33d-fbd6-49e1-80a2-723c4f5be8b3\tQto_WindowBaseQuantities.Area[Type]\tAREA\t\t875\t1\tIfcAreaMeasure\t1\nPARAM\t6b257136-5d18-48f7-9365-1232398a63ed\tQto_WindowBaseQuantities.Height[Type]\tLENGTH\t\t875\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc0e7558e-0a8e-486c-bb57-9928a7027667\tQto_WindowBaseQuantities.Perimeter[Type]\tLENGTH\t\t875\t1\tIfcLengthMeasure\t1\nPARAM\tb788dffc-fac0-4e50-aa97-dad78625b446\tQto_WindowBaseQuantities.Width[Type]\tLENGTH\t\t875\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t2\tRevit IFCExporter Parameters\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t979a9ef7-a1e5-42aa-b12b-87f4b316b920\tClassificationCode[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\td1de9789-0ee4-4212-8083-a35b7d78c4ee\tClassificationCode(2)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\ta2b43c43-148c-43ac-acc4-804f09623b9f\tClassificationCode(3)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\tcb55abe4-ea3a-452e-8e8d-fc0b72ba8e42\tClassificationCode(4)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t219647f3-80ec-4959-be6e-38875b0cf419\tClassificationCode(5)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\tc7ea8d37-af44-43d5-982d-3193cbd36701\tClassificationCode(6)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\tfbd5a530-c151-4986-a711-2a6c5cd83d3e\tClassificationCode(7)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t7b1b4c28-2b51-49ac-bb80-99832b6d5a77\tClassificationCode(8)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\taf667115-4871-4a74-ad48-cd9156ab52f7\tClassificationCode(9)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\tf4c50e92-76bd-4815-a41c-2a96c13ce3fa\tClassificationCode(10)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t2db82be1-0d19-4007-9e02-4d1701e979f8\tIfcQtyDepth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t75508649-f36d-499a-8116-67a6ae63a437\tIfcQtyLength[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tcc9723c8-7bf3-4af9-bec4-175c512ae618\tIfcQtyWidth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tfeae8108-41cf-496e-9175-3eff2fddd4af\tIfcQtyDiameter[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t7a5130be-436f-4829-b75b-72c574219b8c\tIfcQtyPerimeter[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t192dcfa0-1bdf-4da3-97f1-a40ebdb72539\tIfcQtyNetPerimeter[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tad610f5c-4e19-46b0-838f-4732a4ab3b1c\tIfcQtyGrossPerimeter[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t145dd5a5-bc9e-48b5-9a9e-77e096bd0bfe\tIfcQtyNetHeight[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t134b9456-7fb3-4089-bed2-440ea7ec5e0e\tIfcQtyFinishCeilingHeight[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t9c0c6850-b2e0-4cf4-a3dc-c588a37aa12e\tIfcQtyGrossHeight[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t6b103c6c-74b9-486f-9906-e5dd6f9f03c7\tIfcQtyFinishFloorHeight[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tdcb095d6-dfba-48d2-97a2-c20e899dc53f\tIfcQtyGrossWallArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t3245f4b2-0cea-431e-bcb7-27a9edae0310\tIfcQtyArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t68698438-8829-4054-8513-8a0b6ce12244\tIfcQtyGrossArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t3d73ad7e-6b1f-48d8-958b-c5559b3544d5\tIfcQtyGrossSurfaceArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t00f5808a-306f-49ee-a5ca-78c22c62ce99\tIfcQtyNetCeilingArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\ta1b7fcd2-7e34-4e65-89b8-f56de11a314b\tIfcQtyNetSurfaceArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t6969d33f-e5f0-4c42-8ec4-5783073ed751\tIfcQtyCrossSectionArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\ta9a58585-2eb5-4db8-9c7c-cf12d1720ebe\tIfcQtyOuterSurfaceArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t596d602a-dae6-47ef-83c4-8db04a4209f6\tIfcQtyGrossCeilingArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t2acd7edb-4e08-4053-8379-d5bddd689985\tIfcQtyNetWallArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t329ad038-3907-433e-95b7-1fc5663d21b4\tIfcQtyGrossVolume[Type]\tVOLUME\t\t2\t1\t\t1\nPARAM\t6aff01bb-fc73-4ec5-a59b-8fd19520c2c9\tIfcQtyNetVolume[Type]\tVOLUME\t\t2\t1\t\t1\nPARAM\t0291a3a9-a188-43e3-9e6d-059bd6c7f81b\tIfcQtyVolume[Type]\tVOLUME\t\t2\t1\t\t1\nPARAM\t90933854-33fd-4c06-a6a7-6f849919ae92\tIfcQtyGrossWeight[Type]\tNUMBER\t\t2\t1\t\t1\nPARAM\ta9c5d910-1a26-497b-a034-b28915eddd56\tIfcQtyNetWeight[Type]\tNUMBER\t\t2\t1\t\t1\nPARAM\t9080bc21-a032-4bec-ad15-80307600bbe3\tIfcName[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\tfee87b11-3cdd-4f48-a4c9-1e17c03fed3f\tIfcDescription[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t58ba886e-ac48-4bf1-b77f-760dca5f2712\tIfcLongName[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t0a85b5b6-2af4-480d-85bf-235cee912e09\tIfcTag[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t115763c9-c385-4aad-aac6-6ac789b0cb41\tIfcProfileName[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t3fa9eb1c-a4a0-4fa8-b836-e9b2f417b8d8\tIfcElementType[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t0c449988-1efe-4690-b873-fc98d4fc60e2\tIfcApplicableOccurrence[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t54f49c86-bf8c-4689-830a-54bc73fa0ab2\tIfcObjectType[Type]\tTEXT\t\t2\t1\tSpecial Parameter to set the Instance ObjectType attribute from the Type\t1\nPARAM\t141f4773-6408-460c-9136-ed34a072e8da\tPanelDepth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t6f115f50-3148-4aa0-be19-ce8d91aea627\tPanelWidth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tabec6a05-f532-46f0-b3de-f9e8a9c01335\tLiningDepth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t55e3e35c-c4ba-42df-ba56-048a3995bba5\tLiningThickness[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t3be72e29-7818-4302-89a7-337d1f328e12\tLiningOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\ta1982167-ba1d-463f-b67d-28a9679bc10c\tThresholdDepth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t524d8a84-6533-40f3-b306-880f79263b71\tThresholdThickness[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tb088323c-4dfb-4e78-a124-580119915e40\tThresholdOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t0345acfb-1ffc-4d44-bdb2-9d4dd6c4ca01\tTransomOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t95466b46-291e-427f-8d55-96445794c575\tTransomThickness[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tec98702d-a600-45a7-b710-2a8e943aab7e\tCasingDepth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tdb88ef23-14ab-4a23-963d-72d84bdd303e\tCasingThickness[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t68d470bd-a841-4665-9a55-75ea82f4fa72\tWINDOW_PARTITIONING_TYPE[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t556ad2ea-5ba3-49cc-accf-be26c96b33ff\tWINDOW_PREDEFINED_TYPE[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t0ffb75e9-4b55-4742-8b18-1bf5f83acc04\tConstruction[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t78af38cc-458e-4e63-9a7e-873a0d73b923\tFirstTransomOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t346df730-8ab6-41ce-8acf-0d4798300553\tSecondTransomOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t1778bc42-afde-4b76-9222-af1a38b05b7c\tMullionThickness[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t93ade552-8d24-473c-a7f0-48b2ddaf1588\tFirstMullionOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t1ea5ba6d-0447-43a5-8f5c-8a905c42ffb0\tSecondMullionOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t4a37833e-59c1-4532-8fe0-2a0f5214c2ad\tFrameDepth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tb552f0e3-1bc1-496b-a001-08b1f4a9a251\tFrameThickness[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\td130bd1c-b24f-4d51-af57-a87514c2b47d\tIfcWindowStyle.ConstructionType[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t57ce242a-2907-4224-a400-e2e03c6a647d\tIfcDoorStyle.ConstructionType[Type]\tTEXT\t\t2\t1\t\t1\n"
  },
  {
    "path": "Source/RevitIFCTools/IFC Shared Parameters-RevitIFCBuiltIn-Type_ALL_grouped.txt",
    "content": "# This is a Revit shared parameter file.\n# Do not edit manually.\n*META\tVERSION\tMINVERSION\nMETA\t2\t1\n*GROUP\tID\tNAME\n#\nGROUP\t3\tIfcDoorLiningProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t92f9b046-b15e-42bd-baea-369a015b9156\tIfcDoorLiningProperties.CasingDepth[Type]\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb135fe15-c89f-47e6-a590-16701b7f1d45\tIfcDoorLiningProperties.CasingThickness[Type]\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5b3062b1-0ad1-44ee-ae39-bebc572a9cf4\tIfcDoorLiningProperties.LiningDepth[Type]\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0ad13bdd-a89a-4f20-8609-8fc17c3477e4\tIfcDoorLiningProperties.LiningOffset[Type]\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\t8aa4ffe3-5e5c-495a-817d-7979fdd4d5e7\tIfcDoorLiningProperties.LiningThickness[Type]\tLENGTH\t\t3\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tf1565685-f68c-4b36-9803-041b31c7ae80\tIfcDoorLiningProperties.LiningToPanelOffsetX[Type]\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\t3156d749-4efe-434b-84d6-748788f161b5\tIfcDoorLiningProperties.LiningToPanelOffsetY[Type]\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\td25dfef4-d7d2-4790-87e3-acdccc364c3e\tIfcDoorLiningProperties.ThresholdDepth[Type]\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t517d7a2f-2552-4512-b54e-97c58f6d61dc\tIfcDoorLiningProperties.ThresholdOffset[Type]\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\tebc31023-08de-4dcf-ba62-a89f16983cff\tIfcDoorLiningProperties.ThresholdThickness[Type]\tLENGTH\t\t3\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t47ac05fc-2ff6-420e-b3bb-cdcd4e0a5f26\tIfcDoorLiningProperties.TransomOffset[Type]\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\t9d4e7783-2e14-4b54-9674-5b1f51e4e557\tIfcDoorLiningProperties.TransomThickness[Type]\tLENGTH\t\t3\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t4\tIfcDoorPanelProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t25f566ef-a0d2-4784-88dc-69821dcbb591\tIfcDoorPanelProperties.PanelDepth[Type]\tLENGTH\t\t4\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8dec2ef0-b531-4a8e-a003-2402019d7c72\tIfcDoorPanelProperties.PanelOperation[Type]\tTEXT\t\t4\t1\tIfcLabel\t1\nPARAM\tc8444bb5-6eec-4b71-97e3-b65271233de0\tIfcDoorPanelProperties.PanelPosition[Type]\tTEXT\t\t4\t1\tIfcLabel\t1\nPARAM\t6a48a5e8-2e46-4f8e-b4af-a48c49e48964\tIfcDoorPanelProperties.PanelWidth[Type]\tNUMBER\t\t4\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t5\tIfcPermeableCoveringProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48a13c2f-be12-4b7d-8e0e-31590b982136\tIfcPermeableCoveringProperties.FrameDepth[Type]\tLENGTH\t\t5\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t220fe02d-3d97-49ed-a286-9c28d4e7d18d\tIfcPermeableCoveringProperties.FrameThickness[Type]\tLENGTH\t\t5\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t21330fea-14da-443d-9087-a2e1a1604186\tIfcPermeableCoveringProperties.OperationType[Type]\tTEXT\t\t5\t1\tIfcLabel\t1\nPARAM\t92c93d7d-9ac2-4e72-b141-fa1c6b8c9a64\tIfcPermeableCoveringProperties.PanelPosition[Type]\tTEXT\t\t5\t1\tIfcLabel\t1\n#\nGROUP\t6\tIfcReinforcementDefinitionProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb0a49d0f-ca11-4294-99a6-9cf87fbf66d5\tIfcReinforcementDefinitionProperties.DefinitionType[Type]\tTEXT\t\t6\t1\tIfcLabel\t1\nPARAM\ta654d1c7-f3fa-44e2-884d-1f25bd47986c\tIfcReinforcementDefinitionProperties.ReinforcementSectionDefinitions[Type]\tTEXT\t\t6\t1\tIfcLabel\t1\n#\nGROUP\t7\tIfcWindowLiningProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td7498563-1114-4445-b602-e7a1e86c020c\tIfcWindowLiningProperties.FirstMullionOffset[Type]\tNUMBER\t\t7\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t491217ac-605b-44c0-9222-8db84fde541d\tIfcWindowLiningProperties.FirstTransomOffset[Type]\tNUMBER\t\t7\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tfac29451-1e72-4361-9174-bc4532410632\tIfcWindowLiningProperties.LiningDepth[Type]\tLENGTH\t\t7\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t106eaf02-86f3-46ec-82bd-fc3f355e74ce\tIfcWindowLiningProperties.LiningOffset[Type]\tLENGTH\t\t7\t1\tIfcLengthMeasure\t1\nPARAM\t833c86f9-c51b-4368-a24d-caef640cbc1a\tIfcWindowLiningProperties.LiningThickness[Type]\tLENGTH\t\t7\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tf1a36a64-1d9c-4900-a49e-b9e04d3503c8\tIfcWindowLiningProperties.LiningToPanelOffsetX[Type]\tLENGTH\t\t7\t1\tIfcLengthMeasure\t1\nPARAM\tf31c5a1f-ed7e-480a-b3b7-b6005035115d\tIfcWindowLiningProperties.LiningToPanelOffsetY[Type]\tLENGTH\t\t7\t1\tIfcLengthMeasure\t1\nPARAM\tcc559ca1-ae0d-4f96-93e5-079113802312\tIfcWindowLiningProperties.MullionThickness[Type]\tLENGTH\t\t7\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t5e4a6e16-f61a-4da2-8fa0-0bb32f9ca2d8\tIfcWindowLiningProperties.SecondMullionOffset[Type]\tNUMBER\t\t7\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\taaa4666e-80a6-4fc5-9b24-297e390b2794\tIfcWindowLiningProperties.SecondTransomOffset[Type]\tNUMBER\t\t7\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t15ad8885-bd95-4663-b119-54ce0c3212fb\tIfcWindowLiningProperties.TransomThickness[Type]\tLENGTH\t\t7\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t8\tIfcWindowPanelProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfe3f45d7-304a-4483-9023-3e3b224c71cb\tIfcWindowPanelProperties.FrameDepth[Type]\tLENGTH\t\t8\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td3af107d-7f9e-4e6f-a726-f9aae706b11a\tIfcWindowPanelProperties.FrameThickness[Type]\tLENGTH\t\t8\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc7984296-5ee2-42d3-94ab-312df9b4e9d6\tIfcWindowPanelProperties.OperationType[Type]\tTEXT\t\t8\t1\tIfcLabel\t1\nPARAM\tb7e38a0c-098e-4d8b-873a-82eb643051c6\tIfcWindowPanelProperties.PanelPosition[Type]\tTEXT\t\t8\t1\tIfcLabel\t1\n#\nGROUP\t9\tPset_ActionRequest\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf9570f6f-4c83-4914-83af-7ca58d36bb2a\tPset_ActionRequest.RequestComments[Type]\tTEXT\t\t9\t1\tIfcText\t1\nPARAM\t1816931d-d252-40b0-9711-52369b261e21\tPset_ActionRequest.RequestDescription[Type]\tTEXT\t\t9\t1\tIfcText\t1\nPARAM\t5748e5d9-f3c8-484f-9803-2bb4ce6ea1b2\tPset_ActionRequest.RequestSourceLabel[Type]\tTEXT\t\t9\t1\tIfcLabel\t1\nPARAM\t443cc994-617c-46b9-80b7-e64d5df929dd\tPset_ActionRequest.RequestSourceName[Type]\tMULTILINETEXT\t\t9\t1\tIfcPerson\t1\nPARAM\t15d2334d-8baf-4087-af9a-da19b81bfc66\tPset_ActionRequest.RequestSourceType[Type]\tTEXT\t\t9\t1\tPEnum_RequestSourceType\t1\nPARAM\t9a2da861-95a2-4699-88b7-9ab5308f0cf0\tPset_ActionRequest.Status[Type]\tTEXT\t\t9\t1\tPEnum_RequestStatus\t1\n#\nGROUP\t10\tPset_ActorCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9fdfc0fb-762f-4977-b246-723f3676f1e9\tPset_ActorCommon.Category[Type]\tTEXT\t\t10\t1\tIfcLabel\t1\nPARAM\td561cc0d-b78e-46dd-bbfe-d431d5d116e7\tPset_ActorCommon.NumberOfActors[Type]\tINTEGER\t\t10\t1\tIfcCountMeasure\t1\nPARAM\t864f4214-8a81-4a36-b233-23a0bfdbb7b2\tPset_ActorCommon.SkillLevel[Type]\tTEXT\t\t10\t1\tIfcLabel\t1\n#\nGROUP\t11\tPset_ActuatorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tefa57a20-38b6-4279-b274-e31e78ea3679\tPset_ActuatorPHistory.Position[Type]\tMULTILINETEXT\t\t11\t1\tIfcTimeSeries\t1\nPARAM\t90734c34-34e0-4d19-8606-e1fb49a90b9a\tPset_ActuatorPHistory.Quality[Type]\tMULTILINETEXT\t\t11\t1\tIfcTimeSeries\t1\nPARAM\tb70fbfc6-036c-4679-a612-a39322ef3117\tPset_ActuatorPHistory.Status[Type]\tMULTILINETEXT\t\t11\t1\tIfcTimeSeries\t1\n#\nGROUP\t12\tPset_ActuatorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5df7283f-6fe5-4a95-85d9-bd285bf64ed0\tPset_ActuatorTypeCommon.Application[Type]\tTEXT\t\t12\t1\tPEnum_ActuatorApplication\t1\nPARAM\tc0290bdb-4fa5-442d-b90b-9898b1a3c4e9\tPset_ActuatorTypeCommon.FailPosition[Type]\tTEXT\t\t12\t1\tPEnum_FailPosition\t1\nPARAM\t4b124d18-e511-4c3e-932f-9be83ef2877b\tPset_ActuatorTypeCommon.ManualOverride[Type]\tYESNO\t\t12\t1\tIfcBoolean\t1\nPARAM\tc62a2632-ec58-4984-9199-bdda161e0e5e\tPset_ActuatorTypeCommon.Reference[Type]\tTEXT\t\t12\t1\tIfcIdentifier\t1\nPARAM\ta9f89daa-42ad-43ae-8e1f-2994c625b8bf\tPset_ActuatorTypeCommon.Status[Type]\tTEXT\t\t12\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t13\tPset_ActuatorTypeElectricActuator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t79ed14c6-8417-4a61-b549-e361511c4c16\tPset_ActuatorTypeElectricActuator.ActuatorInputPower[Type]\tNUMBER\t\t13\t1\tIfcPowerMeasure\t1\nPARAM\tbaa21f83-fd78-4412-8da7-c53380d2253a\tPset_ActuatorTypeElectricActuator.ElectricActuatorType[Type]\tTEXT\t\t13\t1\tPEnum_ElectricActuatorType\t1\n#\nGROUP\t14\tPset_ActuatorTypeHydraulicActuator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td813b66d-e6f0-46fd-bf72-605cacc1215e\tPset_ActuatorTypeHydraulicActuator.InputFlowrate[Type]\tNUMBER\t\t14\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t1e2d09a9-42a9-43fe-8100-55c068a4bbbb\tPset_ActuatorTypeHydraulicActuator.InputPressure[Type]\tNUMBER\t\t14\t1\tIfcPressureMeasure\t1\n#\nGROUP\t15\tPset_ActuatorTypeLinearActuation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1168baf7-1580-43e4-9b6c-8b7fe2d465fd\tPset_ActuatorTypeLinearActuation.Force[Type]\tNUMBER\t\t15\t1\tIfcForceMeasure\t1\nPARAM\t5410c333-280e-4e47-a593-a2c910920ab3\tPset_ActuatorTypeLinearActuation.Stroke[Type]\tLENGTH\t\t15\t1\tIfcLengthMeasure\t1\n#\nGROUP\t16\tPset_ActuatorTypePneumaticActuator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc7c58c17-759b-426a-a87f-4c450addc7bc\tPset_ActuatorTypePneumaticActuator.InputFlowrate[Type]\tNUMBER\t\t16\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tab07c83e-40e1-42a0-9f15-1dcb5d8a1ea1\tPset_ActuatorTypePneumaticActuator.InputPressure[Type]\tNUMBER\t\t16\t1\tIfcPressureMeasure\t1\n#\nGROUP\t17\tPset_ActuatorTypeRotationalActuation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcf2d78d6-6651-4c54-9f5b-1c9b088a886a\tPset_ActuatorTypeRotationalActuation.RangeAngle[Type]\tNUMBER\t\t17\t1\tIfcPlaneAngleMeasure\t1\nPARAM\te2eedbea-adf2-44be-b95c-0c23ddea716a\tPset_ActuatorTypeRotationalActuation.Torque[Type]\tNUMBER\t\t17\t1\tIfcTorqueMeasure\t1\n#\nGROUP\t18\tPset_AirSideSystemInformation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t44f8c41e-6d56-4881-b069-4bf03adc27e3\tPset_AirSideSystemInformation.AirflowSensible[Type]\tNUMBER\t\t18\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\te4817490-12be-4937-8530-62bdd645b2e9\tPset_AirSideSystemInformation.AirSideSystemDistributionType[Type]\tTEXT\t\t18\t1\tPEnum_AirSideSystemDistributionType\t1\nPARAM\tee014a2c-046d-405d-9ddd-a49c50ca7562\tPset_AirSideSystemInformation.AirSideSystemType[Type]\tTEXT\t\t18\t1\tPEnum_AirSideSystemType\t1\nPARAM\t2edbc3b1-23eb-41ef-b0e7-55ed60c39328\tPset_AirSideSystemInformation.ApplianceDiversity[Type]\tNUMBER\t\t18\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7b6aabde-fac3-4d9f-902b-255005aada36\tPset_AirSideSystemInformation.CoolingTemperatureDelta[Type]\tNUMBER\t\t18\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t6c0a12aa-34fd-419f-aa9c-a423917fe4aa\tPset_AirSideSystemInformation.Description[Type]\tTEXT\t\t18\t1\tIfcLabel\t1\nPARAM\tda071818-c124-4256-a0eb-e3255c0cf23d\tPset_AirSideSystemInformation.EnergyGainSensible[Type]\tNUMBER\t\t18\t1\tIfcPowerMeasure\t1\nPARAM\t436f82a6-cfd2-4b18-9dee-444dfa21a9ca\tPset_AirSideSystemInformation.EnergyGainTotal[Type]\tNUMBER\t\t18\t1\tIfcPowerMeasure\t1\nPARAM\tf86e1881-4195-4d07-bf30-f0634284fa6a\tPset_AirSideSystemInformation.EnergyLoss[Type]\tNUMBER\t\t18\t1\tIfcPowerMeasure\t1\nPARAM\te1a07ee9-9377-455c-baf2-77d8929c7a2d\tPset_AirSideSystemInformation.FanPower[Type]\tNUMBER\t\t18\t1\tIfcPowerMeasure\t1\nPARAM\t7fbad3f5-e05b-4b9e-a922-c296c30f3c10\tPset_AirSideSystemInformation.HeatingTemperatureDelta[Type]\tNUMBER\t\t18\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t17f2f2bf-2113-4630-8ee6-a741129ae5e0\tPset_AirSideSystemInformation.InfiltrationDiversitySummer[Type]\tNUMBER\t\t18\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf08eaa70-78fb-4ebe-8c86-21567ef76ae8\tPset_AirSideSystemInformation.InfiltrationDiversityWinter[Type]\tNUMBER\t\t18\t1\tIfcPositiveRatioMeasure\t1\nPARAM\te3a740df-64b2-45eb-af71-ba7ff1c425c9\tPset_AirSideSystemInformation.LightingDiversity[Type]\tNUMBER\t\t18\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t9209f69b-9915-4f75-8b90-7da0dd35b18c\tPset_AirSideSystemInformation.LoadSafetyFactor[Type]\tNUMBER\t\t18\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tad787104-63c4-4cf0-81a7-022a2b13d49d\tPset_AirSideSystemInformation.Name[Type]\tTEXT\t\t18\t1\tIfcLabel\t1\nPARAM\t96c821c9-e636-4a7a-8d95-57ba36924af4\tPset_AirSideSystemInformation.TotalAirflow[Type]\tNUMBER\t\t18\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t8bbf3471-fcac-42f3-8543-9ef3f22ce0df\tPset_AirSideSystemInformation.Ventilation[Type]\tNUMBER\t\t18\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t19\tPset_AirTerminalBoxPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf8f9f9f7-61c1-4901-bfaa-e3d73205b77b\tPset_AirTerminalBoxPHistory.AirflowCurve[Type]\tMULTILINETEXT\t\t19\t1\tIfcTimeSeries\t1\nPARAM\t624e5cf6-9e3b-4dbc-b313-f1aa432dab38\tPset_AirTerminalBoxPHistory.AtmosphericPressure[Type]\tMULTILINETEXT\t\t19\t1\tIfcTimeSeries\t1\nPARAM\t5eae72de-e913-4243-9eb8-5d1523b1dc73\tPset_AirTerminalBoxPHistory.DamperPosition[Type]\tMULTILINETEXT\t\t19\t1\tIfcTimeSeries\t1\nPARAM\ta3bbd32f-b874-4694-8c7d-63c06a81afcb\tPset_AirTerminalBoxPHistory.Sound[Type]\tMULTILINETEXT\t\t19\t1\tIfcTimeSeries\t1\n#\nGROUP\t20\tPset_AirTerminalBoxTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc83dafa4-d37b-40da-aadd-abcb9c662f37\tPset_AirTerminalBoxTypeCommon.AirflowRateRange[Type]\tMULTILINETEXT\t\t20\t1\tPropertyBoundedValue\t1\nPARAM\t252a8c5b-08c4-461e-a63f-39b57f79931c\tPset_AirTerminalBoxTypeCommon.AirPressureRange[Type]\tMULTILINETEXT\t\t20\t1\tPropertyBoundedValue\t1\nPARAM\td7501967-5ed6-4da7-b3d7-97ddc66725e7\tPset_AirTerminalBoxTypeCommon.ArrangementType[Type]\tTEXT\t\t20\t1\tPEnum_AirTerminalBoxArrangementType\t1\nPARAM\te46e37b2-2fab-4f66-9262-9e19eba7fdd6\tPset_AirTerminalBoxTypeCommon.HasFan[Type]\tYESNO\t\t20\t1\tIfcBoolean\t1\nPARAM\t8e484efc-7f40-4abf-81d4-efcc84e3d122\tPset_AirTerminalBoxTypeCommon.HasReturnAir[Type]\tYESNO\t\t20\t1\tIfcBoolean\t1\nPARAM\tf6a7800e-23a7-4430-8e99-e17e3ce2d138\tPset_AirTerminalBoxTypeCommon.HasSoundAttenuator[Type]\tYESNO\t\t20\t1\tIfcBoolean\t1\nPARAM\t3f070853-6d8e-4c3b-a848-d0dcf24c9101\tPset_AirTerminalBoxTypeCommon.HousingThickness[Type]\tLENGTH\t\t20\t1\tIfcLengthMeasure\t1\nPARAM\t41905e8d-1ecd-447c-9689-fe3ccce0a4c6\tPset_AirTerminalBoxTypeCommon.Material[Type]\tMULTILINETEXT\t\t20\t1\tIfcMaterial\t1\nPARAM\t5c8d8af7-4b51-4e7a-9c96-a93cf6fb3bc1\tPset_AirTerminalBoxTypeCommon.NominalAirFlowRate[Type]\tNUMBER\t\t20\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tf10e739b-aa9b-4dc4-a4dd-532acf51d38a\tPset_AirTerminalBoxTypeCommon.NominalDamperDiameter[Type]\tLENGTH\t\t20\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t18950155-5c13-48cb-966e-3c53a1145c07\tPset_AirTerminalBoxTypeCommon.NominalInletAirPressure[Type]\tNUMBER\t\t20\t1\tIfcPressureMeasure\t1\nPARAM\tf9179136-8554-4b20-8451-c3e1ae374f47\tPset_AirTerminalBoxTypeCommon.OperationTemperatureRange[Type]\tMULTILINETEXT\t\t20\t1\tPropertyBoundedValue\t1\nPARAM\t6820a22f-8f93-44d8-a37a-000019c61efd\tPset_AirTerminalBoxTypeCommon.Reference[Type]\tTEXT\t\t20\t1\tIfcIdentifier\t1\nPARAM\t92dc896f-c203-4d2f-b54f-b4734a404870\tPset_AirTerminalBoxTypeCommon.ReheatType[Type]\tTEXT\t\t20\t1\tPEnum_AirTerminalBoxReheatType\t1\nPARAM\te6a2da12-9c60-4248-a286-8a698c36bb5c\tPset_AirTerminalBoxTypeCommon.ReturnAirFractionRange[Type]\tMULTILINETEXT\t\t20\t1\tPropertyBoundedValue\t1\nPARAM\tacafa01f-d523-453d-97b8-9901ad2fb0f8\tPset_AirTerminalBoxTypeCommon.Status[Type]\tTEXT\t\t20\t1\tPEnum_ElementStatus\t1\nPARAM\td3bc555c-0c79-46b0-8dbc-41a27f61affd\tPset_AirTerminalBoxTypeCommon.Weight[Type]\tNUMBER\t\t20\t1\tIfcMassMeasure\t1\n#\nGROUP\t21\tPset_AirTerminalOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td6f9816d-caf4-469d-a08b-054c0c0b24dd\tPset_AirTerminalOccurrence.AirFlowRate[Type]\tNUMBER\t\t21\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t8d58635c-7e8c-4976-97cd-ad88f3ac4788\tPset_AirTerminalOccurrence.AirflowType[Type]\tTEXT\t\t21\t1\tPEnum_AirTerminalAirflowType\t1\nPARAM\t8a86a30a-ee3d-4d13-a7ef-eb9aa8871119\tPset_AirTerminalOccurrence.Location[Type]\tTEXT\t\t21\t1\tPEnum_AirTerminalLocation\t1\n#\nGROUP\t22\tPset_AirTerminalPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t96873d0a-e8a0-4091-b031-bdc9c590a580\tPset_AirTerminalPHistory.AirFlowRate[Type]\tMULTILINETEXT\t\t22\t1\tIfcTimeSeries\t1\nPARAM\ta040aa73-8a36-4011-84bb-b1bbda93d4af\tPset_AirTerminalPHistory.CenterlineAirVelocity[Type]\tMULTILINETEXT\t\t22\t1\tPropertyTableValue\t1\nPARAM\t7407bb35-acb6-4e3e-b99a-c476ff213573\tPset_AirTerminalPHistory.InductionRatio[Type]\tMULTILINETEXT\t\t22\t1\tPropertyTableValue\t1\nPARAM\t796af4b7-6cb4-4d3d-95e8-b8350e6b289d\tPset_AirTerminalPHistory.NeckAirVelocity[Type]\tMULTILINETEXT\t\t22\t1\tIfcTimeSeries\t1\nPARAM\t82a0aa1c-e38e-492a-81c9-53500d5d5f08\tPset_AirTerminalPHistory.PressureDrop[Type]\tMULTILINETEXT\t\t22\t1\tIfcTimeSeries\t1\nPARAM\tc3661b7b-3d74-4db1-b5b1-ed54891d7227\tPset_AirTerminalPHistory.SupplyAirTemperatureCooling[Type]\tMULTILINETEXT\t\t22\t1\tIfcTimeSeries\t1\nPARAM\taa30a366-f53d-4b34-9e19-eb2f450c8e97\tPset_AirTerminalPHistory.SupplyAirTemperatureHeating[Type]\tMULTILINETEXT\t\t22\t1\tIfcTimeSeries\t1\n#\nGROUP\t23\tPset_AirTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3c7aba14-24ef-4ad9-8e7b-7a354ddff00a\tPset_AirTerminalTypeCommon.AirDiffusionPerformanceIndex[Type]\tNUMBER\t\t23\t1\tIfcReal\t1\nPARAM\tc6152384-8858-48f3-a2b2-e839b4439547\tPset_AirTerminalTypeCommon.AirFlowrateRange[Type]\tMULTILINETEXT\t\t23\t1\tPropertyBoundedValue\t1\nPARAM\t4ace4150-53c0-4168-bc74-a8df13410677\tPset_AirTerminalTypeCommon.AirFlowrateVersusFlowControlElement[Type]\tMULTILINETEXT\t\t23\t1\tPropertyTableValue\t1\nPARAM\t27ff26fb-4a86-4184-a6d9-8f8f23d08d10\tPset_AirTerminalTypeCommon.CoreSetHorizontal[Type]\tNUMBER\t\t23\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tae33193d-8a2a-4518-9820-ada0f2a2124f\tPset_AirTerminalTypeCommon.CoreSetVertical[Type]\tNUMBER\t\t23\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tadb942fa-20e4-4db3-8aac-922f19c2524e\tPset_AirTerminalTypeCommon.CoreType[Type]\tTEXT\t\t23\t1\tPEnum_AirTerminalCoreType\t1\nPARAM\tfe39a623-278d-4657-8b56-6679a48d82b1\tPset_AirTerminalTypeCommon.DischargeDirection[Type]\tTEXT\t\t23\t1\tPEnum_AirTerminalDischargeDirection\t1\nPARAM\t93cd3c65-71ce-4f31-9de6-d67fe6720924\tPset_AirTerminalTypeCommon.EffectiveArea[Type]\tAREA\t\t23\t1\tIfcAreaMeasure\t1\nPARAM\td5cf28bd-263b-49fd-b13a-e9ac8bb0029d\tPset_AirTerminalTypeCommon.FaceType[Type]\tTEXT\t\t23\t1\tPEnum_AirTerminalFaceType\t1\nPARAM\tbddbd6d3-2e34-4736-b43c-f13794bc8894\tPset_AirTerminalTypeCommon.FinishColor[Type]\tTEXT\t\t23\t1\tIfcLabel\t1\nPARAM\t3bbdd398-e370-470f-a8cd-f6fb4ddac935\tPset_AirTerminalTypeCommon.FinishType[Type]\tTEXT\t\t23\t1\tPEnum_AirTerminalFinishType\t1\nPARAM\tf938b371-37e1-4fb1-a2af-1b29e0cf9683\tPset_AirTerminalTypeCommon.FlowControlType[Type]\tTEXT\t\t23\t1\tPEnum_AirTerminalFlowControlType\t1\nPARAM\te7697610-cc43-4737-a202-35753fbef94f\tPset_AirTerminalTypeCommon.FlowPattern[Type]\tTEXT\t\t23\t1\tPEnum_AirTerminalFlowPattern\t1\nPARAM\td3cbccca-95c2-4a72-9ba9-ffd3f57c6abb\tPset_AirTerminalTypeCommon.HasIntegralControl[Type]\tYESNO\t\t23\t1\tIfcBoolean\t1\nPARAM\t1f078267-97f0-46ba-b4fb-a5fede25df05\tPset_AirTerminalTypeCommon.HasSoundAttenuator[Type]\tYESNO\t\t23\t1\tIfcBoolean\t1\nPARAM\t19361705-422b-4a50-ae0b-69c9ff5d744e\tPset_AirTerminalTypeCommon.HasThermalInsulation[Type]\tYESNO\t\t23\t1\tIfcBoolean\t1\nPARAM\t6764fccb-37c8-4168-b8f4-a99a510bbabd\tPset_AirTerminalTypeCommon.Material[Type]\tMULTILINETEXT\t\t23\t1\tIfcMaterial\t1\nPARAM\taf7beac6-2d79-4640-98da-aea9cfbc89fb\tPset_AirTerminalTypeCommon.MountingType[Type]\tTEXT\t\t23\t1\tPEnum_AirTerminalMountingType\t1\nPARAM\tcb66e834-e26f-42ce-8be9-f89394084ce5\tPset_AirTerminalTypeCommon.NeckArea[Type]\tAREA\t\t23\t1\tIfcAreaMeasure\t1\nPARAM\ta5a123a8-fb18-49a0-a02c-3389e1fa36d4\tPset_AirTerminalTypeCommon.NumberOfSlots[Type]\tINTEGER\t\t23\t1\tIfcInteger\t1\nPARAM\tde2c40a1-542e-4071-a17b-db141e31624c\tPset_AirTerminalTypeCommon.Reference[Type]\tTEXT\t\t23\t1\tIfcIdentifier\t1\nPARAM\tacc86224-5ccc-45ce-930e-3a7a2d8544a1\tPset_AirTerminalTypeCommon.Shape[Type]\tTEXT\t\t23\t1\tPEnum_AirTerminalShape\t1\nPARAM\t87f5f290-4de3-4ab6-95ed-b98b36733c0e\tPset_AirTerminalTypeCommon.SlotLength[Type]\tLENGTH\t\t23\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t42139f78-48c5-419f-be71-d48051c78220\tPset_AirTerminalTypeCommon.SlotWidth[Type]\tLENGTH\t\t23\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf2010b8f-1638-44fc-8493-3a355691d6ba\tPset_AirTerminalTypeCommon.Status[Type]\tTEXT\t\t23\t1\tPEnum_ElementStatus\t1\nPARAM\tae507bca-9855-4fa1-aa8d-1d9fb7d962cf\tPset_AirTerminalTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t23\t1\tPropertyBoundedValue\t1\nPARAM\t955e3887-f5b2-47c4-ac39-4ef54fa619c4\tPset_AirTerminalTypeCommon.ThrowLength[Type]\tLENGTH\t\t23\t1\tIfcLengthMeasure\t1\nPARAM\tf479cac6-e91a-4e6b-80b8-d55038bb97ac\tPset_AirTerminalTypeCommon.Weight[Type]\tNUMBER\t\t23\t1\tIfcMassMeasure\t1\n#\nGROUP\t24\tPset_AirTerminalTypeRectangular\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1d8773e4-a33a-4361-a5ad-2b79a94cb46c\tPset_AirTerminalTypeRectangular.FaceType[Type]\tTEXT\t\t24\t1\tPEnum_AirTerminalFaceType\t1\n#\nGROUP\t25\tPset_AirTerminalTypeRound\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t66ffdc05-eccb-497a-89ae-c4d263ffa291\tPset_AirTerminalTypeRound.FaceType[Type]\tTEXT\t\t25\t1\tPEnum_AirTerminalFaceType\t1\n#\nGROUP\t26\tPset_AirTerminalTypeSlot\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48174d95-bfd1-4491-b3a0-ff13581297e9\tPset_AirTerminalTypeSlot.NumberOfSlots[Type]\tINTEGER\t\t26\t1\tIfcInteger\t1\nPARAM\ta618647e-08e7-4675-ba6c-fb23fce5b364\tPset_AirTerminalTypeSlot.SlotLength[Type]\tLENGTH\t\t26\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t260bfd8b-29a5-4814-9adf-63b06a688b74\tPset_AirTerminalTypeSlot.SlotWidth[Type]\tLENGTH\t\t26\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t27\tPset_AirTerminalTypeSquare\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teea4aeb3-24d7-4cea-ae4e-d296a0c62024\tPset_AirTerminalTypeSquare.FaceType[Type]\tTEXT\t\t27\t1\tPEnum_AirTerminalFaceType\t1\n#\nGROUP\t28\tPset_AirToAirHeatRecoveryPHist\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8cba2199-8c92-4dd2-93c3-57d97197eb07\tPset_AirToAirHeatRecoveryPHist.AirPressureDropCurves[Type]\tNUMBER\t\t28\t1\tIfcReal\t1\nPARAM\t600d125d-50a1-472d-8626-919f15b89cd7\tPset_AirToAirHeatRecoveryPHist.DefrostTemperatureEffectiveness[Type]\tNUMBER\t\t28\t1\tIfcReal\t1\nPARAM\t2f35f662-7550-4d11-952c-9becd4ae574e\tPset_AirToAirHeatRecoveryPHist.HumidityEffectiveness[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t8f55995f-df74-4c2e-81f9-c96b7794eac7\tPset_AirToAirHeatRecoveryPHist.LatentHeatTransferRate[Type]\tNUMBER\t\t28\t1\tIfcReal\t1\nPARAM\t4353bfa7-35b3-442c-8f48-8f445e6c242a\tPset_AirToAirHeatRecoveryPHist.SensibleEffectiveness[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t88335db1-a70a-4678-9b2e-0cbcd4d71542\tPset_AirToAirHeatRecoveryPHist.SensibleEffectivenessTable[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t86fd60fb-0d8a-40c8-8e29-ef7b17e62431\tPset_AirToAirHeatRecoveryPHist.SensibleHeatTransferRate[Type]\tNUMBER\t\t28\t1\tIfcReal\t1\nPARAM\t061b4776-5c5c-42d4-b9ca-ca909f4bf2a4\tPset_AirToAirHeatRecoveryPHist.TemperatureEffectiveness[Type]\tNUMBER\t\t28\t1\tIfcReal\t1\nPARAM\tffdce9d8-6e77-4c31-917b-d6db73f8fdaa\tPset_AirToAirHeatRecoveryPHist.TotalEffectiveness[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t8e95525a-9b61-4f88-8f5f-dafa5d9c7910\tPset_AirToAirHeatRecoveryPHist.TotalEffectivenessTable[Type]\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t32bccf57-0080-4bfe-ac09-b5661facaa61\tPset_AirToAirHeatRecoveryPHist.TotalHeatTransferRate[Type]\tNUMBER\t\t28\t1\tIfcReal\t1\n#\nGROUP\t29\tPset_AirToAirHeatRecoveryPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td2ac0291-b82d-4ab9-a8c2-7106b915b98d\tPset_AirToAirHeatRecoveryPHistory.AirPressureDropCurves[Type]\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\t5c5efbae-9037-4f3e-a230-0262a05da488\tPset_AirToAirHeatRecoveryPHistory.DefrostTemperatureEffectiveness[Type]\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\t25184252-932b-4e63-9c93-f0a78b06dffd\tPset_AirToAirHeatRecoveryPHistory.HumidityEffectiveness[Type]\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\t04422297-c70a-436a-9364-d963dd04b243\tPset_AirToAirHeatRecoveryPHistory.LatentHeatTransferRate[Type]\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\t3c6c3923-b5b7-494d-9b85-cb76fe0bb56d\tPset_AirToAirHeatRecoveryPHistory.SensibleEffectiveness[Type]\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\t82799c04-44c9-42fc-8bc8-4bf9221f9cb8\tPset_AirToAirHeatRecoveryPHistory.SensibleEffectivenessTable[Type]\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\t3b0f4ae1-b15d-4960-98d2-d9610702bfab\tPset_AirToAirHeatRecoveryPHistory.SensibleHeatTransferRate[Type]\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\t70f834ad-1855-402b-bfb2-531b1459c631\tPset_AirToAirHeatRecoveryPHistory.TemperatureEffectiveness[Type]\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\t288a85ff-427d-4e09-baad-b65dbd46e896\tPset_AirToAirHeatRecoveryPHistory.TotalEffectiveness[Type]\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\tfa28b5b3-6948-4036-bafe-2fae4fbf9725\tPset_AirToAirHeatRecoveryPHistory.TotalEffectivenessTable[Type]\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\tacf548a5-dd9b-4612-a9a3-bcaa90d3efa9\tPset_AirToAirHeatRecoveryPHistory.TotalHeatTransferRate[Type]\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\n#\nGROUP\t30\tPset_AirToAirHeatRecoveryTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tde3220cc-2922-4656-b8f8-87c32607d53c\tPset_AirToAirHeatRecoveryTypeCommon.HasDefrost[Type]\tYESNO\t\t30\t1\tIfcBoolean\t1\nPARAM\tb7c78c55-7e45-4210-a22d-ca0b1aebfbed\tPset_AirToAirHeatRecoveryTypeCommon.HeatTransferType[Type]\tTEXT\t\t30\t1\tPEnum_HeatTransferType\t1\nPARAM\tb5b319d0-80f4-48ba-91fc-881934dd4416\tPset_AirToAirHeatRecoveryTypeCommon.HeatTransferTypeEnum[Type]\tTEXT\t\t30\t1\tPEnum_AirToAirHeatTransferHeatTransferType\t1\nPARAM\tb14878e5-eb17-48f0-94c4-8e0b96d56643\tPset_AirToAirHeatRecoveryTypeCommon.MediaMaterial[Type]\tMULTILINETEXT\t\t30\t1\tIfcMaterial\t1\nPARAM\t721f0cd2-18de-4be7-893d-4f6fdd936d6a\tPset_AirToAirHeatRecoveryTypeCommon.OperationalTemperatureRange[Type]\tMULTILINETEXT\t\t30\t1\tPropertyBoundedValue\t1\nPARAM\tc01e0944-44e3-49a2-8b2a-cfe923958d43\tPset_AirToAirHeatRecoveryTypeCommon.PrimaryAirflowRateRange[Type]\tMULTILINETEXT\t\t30\t1\tPropertyBoundedValue\t1\nPARAM\t920acd0c-ba24-46fd-b593-096e76f6406b\tPset_AirToAirHeatRecoveryTypeCommon.Reference[Type]\tTEXT\t\t30\t1\tIfcIdentifier\t1\nPARAM\td58ef931-1a5d-4414-9b85-68a424b961b1\tPset_AirToAirHeatRecoveryTypeCommon.SecondaryAirflowRateRange[Type]\tMULTILINETEXT\t\t30\t1\tPropertyBoundedValue\t1\nPARAM\tf075d02b-86c0-43bb-918e-1e372a75633f\tPset_AirToAirHeatRecoveryTypeCommon.Status[Type]\tTEXT\t\t30\t1\tPEnum_ElementStatus\t1\nPARAM\tba439d64-63ee-4f8d-8146-61dc8f2f9763\tPset_AirToAirHeatRecoveryTypeCommon.Weight[Type]\tNUMBER\t\t30\t1\tIfcMassMeasure\t1\n#\nGROUP\t31\tPset_AlarmPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t789b27cf-2fa8-4947-965b-b5771913fc93\tPset_AlarmPHistory.Acknowledge[Type]\tMULTILINETEXT\t\t31\t1\tIfcTimeSeries\t1\nPARAM\te1bb3cb5-2531-44d4-96d5-3aac407d9185\tPset_AlarmPHistory.Condition[Type]\tMULTILINETEXT\t\t31\t1\tIfcTimeSeries\t1\nPARAM\t97b563c4-73f2-40ae-9825-c270e87eff76\tPset_AlarmPHistory.Enabled[Type]\tMULTILINETEXT\t\t31\t1\tIfcTimeSeries\t1\nPARAM\t6cd150b9-dacd-49e0-9dcd-6937df6a18c8\tPset_AlarmPHistory.Severity[Type]\tMULTILINETEXT\t\t31\t1\tIfcTimeSeries\t1\nPARAM\tf0d66cb0-c887-4f6c-9a57-2292764338ea\tPset_AlarmPHistory.User[Type]\tMULTILINETEXT\t\t31\t1\tIfcTimeSeries\t1\n#\nGROUP\t32\tPset_AlarmTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb6408bb5-527f-4887-adf5-d874a6907716\tPset_AlarmTypeCommon.Condition[Type]\tMULTILINETEXT\t\t32\t1\tPropertyTableValue\t1\nPARAM\tc2f8a834-e8df-46c6-b487-4a9e9db61b75\tPset_AlarmTypeCommon.Reference[Type]\tTEXT\t\t32\t1\tIfcIdentifier\t1\nPARAM\t889efce2-7ad6-430c-993c-2c28084215ba\tPset_AlarmTypeCommon.Status[Type]\tTEXT\t\t32\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t33\tPset_AnalogInput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3e04ef6a-b79b-45ec-943f-cb3f4b1b0666\tPset_AnalogInput.Deadband[Type]\tNUMBER\t\t33\t1\tIfcReal\t1\nPARAM\tba478363-cd40-43cf-a278-7ef5bb7d5540\tPset_AnalogInput.EventEnable[Type]\tTEXT\t\t33\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\td25b0046-fc6f-4f3b-9e9b-7e2774ac74c5\tPset_AnalogInput.HighLimit[Type]\tNUMBER\t\t33\t1\tIfcReal\t1\nPARAM\t59d7538a-00e1-448f-8f7f-8fc56333b63f\tPset_AnalogInput.HighLimitEnable[Type]\tYESNO\t\t33\t1\tIfcBoolean\t1\nPARAM\t1673563b-4d4f-4560-a59a-7d843cd90578\tPset_AnalogInput.LowLimit[Type]\tNUMBER\t\t33\t1\tIfcReal\t1\nPARAM\t1777499f-4f75-45e9-bce0-7fe5b5c320bf\tPset_AnalogInput.LowLimitEnable[Type]\tYESNO\t\t33\t1\tIfcBoolean\t1\nPARAM\t006574aa-5e08-458d-b828-2dbd4eb97228\tPset_AnalogInput.NotifyType[Type]\tTEXT\t\t33\t1\tPEnum_BACnetNotifyType\t1\n#\nGROUP\t34\tPset_AnalogOutput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9c8d4a93-d1d1-4415-be73-1ef8d873025e\tPset_AnalogOutput.Deadband[Type]\tNUMBER\t\t34\t1\tIfcReal\t1\nPARAM\t0536c797-e67d-4d8f-9327-9bab586f3b9e\tPset_AnalogOutput.EventEnable[Type]\tTEXT\t\t34\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\tdb78b964-e67e-4d2b-920c-319bf8fbb21f\tPset_AnalogOutput.HighLimit[Type]\tNUMBER\t\t34\t1\tIfcReal\t1\nPARAM\t881779b8-6c09-42ec-8086-992e7a839719\tPset_AnalogOutput.HighLimitEnable[Type]\tYESNO\t\t34\t1\tIfcBoolean\t1\nPARAM\t794577c4-ace4-44dc-b5ec-21bab28e9c67\tPset_AnalogOutput.LowLimit[Type]\tNUMBER\t\t34\t1\tIfcReal\t1\nPARAM\t98a381b9-ea0a-4920-a3e4-778ef8fbd345\tPset_AnalogOutput.LowLimitEnable[Type]\tYESNO\t\t34\t1\tIfcBoolean\t1\nPARAM\tfd953dab-a76e-4984-b704-632ed2a3cfba\tPset_AnalogOutput.NotifyType[Type]\tTEXT\t\t34\t1\tPEnum_BACnetNotifyType\t1\n#\nGROUP\t35\tPset_AnnotationContourLine\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t21281718-05f9-4bf8-8ffe-fdb63d34e960\tPset_AnnotationContourLine.ContourValue[Type]\tLENGTH\t\t35\t1\tIfcLengthMeasure\t1\n#\nGROUP\t36\tPset_AnnotationLineOfSight\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te9f3da97-b3a2-491e-8f99-61016d82d273\tPset_AnnotationLineOfSight.RoadVisibleDistanceLeft[Type]\tLENGTH\t\t36\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t43418ec5-bfc0-4e10-936d-6aac75c875c8\tPset_AnnotationLineOfSight.RoadVisibleDistanceRight[Type]\tLENGTH\t\t36\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3796ca2e-23ba-49be-af9f-a42cbd1ec5af\tPset_AnnotationLineOfSight.SetbackDistance[Type]\tLENGTH\t\t36\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tacd9a825-e4f9-4ea1-8452-a5c25706cb66\tPset_AnnotationLineOfSight.VisibleAngleLeft[Type]\tANGLE\t\t36\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t58d646f6-286e-476a-96d6-1cfeba9a0612\tPset_AnnotationLineOfSight.VisibleAngleRight[Type]\tANGLE\t\t36\t1\tIfcPositivePlaneAngleMeasure\t1\n#\nGROUP\t37\tPset_AnnotationSurveyArea\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t861e3692-3b61-4c12-81e1-cdf63af42cad\tPset_AnnotationSurveyArea.AccuracyQualityExpected[Type]\tNUMBER\t\t37\t1\tIfcRatioMeasure\t1\nPARAM\t12596c82-b583-412a-af64-caac717788fc\tPset_AnnotationSurveyArea.AccuracyQualityObtained[Type]\tNUMBER\t\t37\t1\tIfcRatioMeasure\t1\nPARAM\t955996e8-8175-4482-9443-6f4fc7f55cd2\tPset_AnnotationSurveyArea.AcquisitionMethod[Type]\tTEXT\t\t37\t1\tPEnum_AcquisitionMethod\t1\n#\nGROUP\t38\tPset_Asset\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t66f9348e-ee32-4764-9444-e1d1747d476a\tPset_Asset.AssetAccountingType[Type]\tTEXT\t\t38\t1\tPEnum_AssetAccountingType\t1\nPARAM\tf45b8f2e-7417-4c53-8a6a-19723397231b\tPset_Asset.AssetInsuranceType[Type]\tTEXT\t\t38\t1\tPEnum_AssetInsuranceType\t1\nPARAM\tb24b1ae6-1d61-4c46-bcdd-878a3ee624db\tPset_Asset.AssetTaxType[Type]\tTEXT\t\t38\t1\tPEnum_AssetTaxType\t1\n#\nGROUP\t39\tPset_AudioVisualAppliancePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t24682d22-8293-4d93-8e3b-cb3b6c73237a\tPset_AudioVisualAppliancePHistory.AudioVolume[Type]\tMULTILINETEXT\t\t39\t1\tIfcTimeSeries\t1\nPARAM\t9ec71786-0b16-4122-b8a5-7acdc930c5ef\tPset_AudioVisualAppliancePHistory.MediaContent[Type]\tMULTILINETEXT\t\t39\t1\tIfcTimeSeries\t1\nPARAM\t0b836957-7e1b-487e-b2df-501accbe7274\tPset_AudioVisualAppliancePHistory.MediaSource[Type]\tMULTILINETEXT\t\t39\t1\tIfcTimeSeries\t1\nPARAM\tb077dddb-0c77-403c-b0b1-994958f60e03\tPset_AudioVisualAppliancePHistory.PowerState[Type]\tMULTILINETEXT\t\t39\t1\tIfcTimeSeries\t1\n#\nGROUP\t40\tPset_AudioVisualApplianceTypeAmplifier\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td9505b8b-d7a3-446d-8376-73e37eebfbc5\tPset_AudioVisualApplianceTypeAmplifier.AmplifierType[Type]\tTEXT\t\t40\t1\tPEnum_AudioVisualAmplifierType\t1\nPARAM\t72c94b43-2ea6-494e-969e-c38ee28dac45\tPset_AudioVisualApplianceTypeAmplifier.AudioAmplification[Type]\tMULTILINETEXT\t\t40\t1\tPropertyTableValue\t1\nPARAM\td102d2c2-dcec-45bf-a494-5be0315a6b8d\tPset_AudioVisualApplianceTypeAmplifier.AudioMode[Type]\tMULTILINETEXT\t\t40\t1\tPropertyTableValue\t1\n#\nGROUP\t41\tPset_AudioVisualApplianceTypeCamera\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t206e41e0-1901-49d4-b250-460487744b4b\tPset_AudioVisualApplianceTypeCamera.CameraType[Type]\tTEXT\t\t41\t1\tPEnum_AudioVisualCameraType\t1\nPARAM\t913e19c8-008e-4625-a5f5-6df2f212dc34\tPset_AudioVisualApplianceTypeCamera.IsOutdoors[Type]\tYESNO\t\t41\t1\tIfcBoolean\t1\nPARAM\t1c9464f8-775e-4023-b53e-9c114a8790dc\tPset_AudioVisualApplianceTypeCamera.PanHorizontal[Type]\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\t897edb15-d3de-4067-b10c-170ef59b14e1\tPset_AudioVisualApplianceTypeCamera.PanTiltZoomPreset[Type]\tMULTILINETEXT\t\t41\t1\tPropertyTableValue\t1\nPARAM\tc1326dfa-1f0d-408d-8c90-ef9bdd34a386\tPset_AudioVisualApplianceTypeCamera.PanVertical[Type]\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\t298aae41-cd5b-499a-bae1-9caf05f22ff1\tPset_AudioVisualApplianceTypeCamera.TiltHorizontal[Type]\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\tc781dc2b-a4e7-49fb-8022-4c46943f4bd9\tPset_AudioVisualApplianceTypeCamera.TiltVertical[Type]\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\t03bf1b96-9f5c-4753-bebc-108ce8681486\tPset_AudioVisualApplianceTypeCamera.VideoCaptureInterval[Type]\tMULTILINETEXT\t\t41\t1\tPropertyTableValue\t1\nPARAM\t982fec31-f43e-4a38-b0c0-58b2d0403a12\tPset_AudioVisualApplianceTypeCamera.VideoResolutionHeight[Type]\tINTEGER\t\t41\t1\tIfcInteger\t1\nPARAM\t0e3a6bfb-468c-4998-9061-508407122b1f\tPset_AudioVisualApplianceTypeCamera.VideoResolutionMode[Type]\tMULTILINETEXT\t\t41\t1\tPropertyTableValue\t1\nPARAM\t5dc4c02a-e657-41af-884b-b5fa76bc3106\tPset_AudioVisualApplianceTypeCamera.VideoResolutionWidth[Type]\tINTEGER\t\t41\t1\tIfcInteger\t1\nPARAM\te902a7a2-aaa0-41ac-afe5-4131f8583344\tPset_AudioVisualApplianceTypeCamera.Zoom[Type]\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\n#\nGROUP\t42\tPset_AudioVisualApplianceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t24d212eb-ea9b-4756-8add-c350bf8f5cb2\tPset_AudioVisualApplianceTypeCommon.AudioVolume[Type]\tMULTILINETEXT\t\t42\t1\tPropertyTableValue\t1\nPARAM\t73a1e745-a550-4067-9db4-c49da2970925\tPset_AudioVisualApplianceTypeCommon.MediaSource[Type]\tMULTILINETEXT\t\t42\t1\tPropertyTableValue\t1\nPARAM\t58a9fa26-cb9d-4c01-9df7-3093975974d9\tPset_AudioVisualApplianceTypeCommon.Reference[Type]\tTEXT\t\t42\t1\tIfcIdentifier\t1\nPARAM\t8cec422a-b6b0-4286-852a-8ed7d37d1b82\tPset_AudioVisualApplianceTypeCommon.Status[Type]\tTEXT\t\t42\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t43\tPset_AudioVisualApplianceTypeDisplay\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td7c85f80-c3fa-4bc6-beac-89c3af0ccde3\tPset_AudioVisualApplianceTypeDisplay.AudioMode[Type]\tMULTILINETEXT\t\t43\t1\tPropertyTableValue\t1\nPARAM\tc28712ca-ba18-4286-bc1d-70694e204e52\tPset_AudioVisualApplianceTypeDisplay.Brightness[Type]\tNUMBER\t\t43\t1\tIfcIlluminanceMeasure\t1\nPARAM\t126943c1-67d6-47a0-ae8c-2776cf8b0792\tPset_AudioVisualApplianceTypeDisplay.ContrastRatio[Type]\tNUMBER\t\t43\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t65726703-3a31-4862-bd05-c01669fd5883\tPset_AudioVisualApplianceTypeDisplay.DisplayHeight[Type]\tLENGTH\t\t43\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta2563dbe-f528-47b0-a306-d191682bd87a\tPset_AudioVisualApplianceTypeDisplay.DisplayType[Type]\tTEXT\t\t43\t1\tPEnum_AudioVisualDisplayType\t1\nPARAM\tc14f2677-cdea-4cfb-97a4-e6a1a8e00e87\tPset_AudioVisualApplianceTypeDisplay.DisplayWidth[Type]\tLENGTH\t\t43\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t659bcdca-edd8-4e44-9167-6a96fe8c10b0\tPset_AudioVisualApplianceTypeDisplay.NominalSize[Type]\tLENGTH\t\t43\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2c9d65c2-0518-42d5-86aa-dfc8174b1d13\tPset_AudioVisualApplianceTypeDisplay.RefreshRate[Type]\tNUMBER\t\t43\t1\tIfcFrequencyMeasure\t1\nPARAM\t987e1f91-9b66-4f33-81d4-e0e017c5b5bb\tPset_AudioVisualApplianceTypeDisplay.TouchScreen[Type]\tTEXT\t\t43\t1\tPEnum_AudioVisualDisplayTouchScreen\t1\nPARAM\t28a79c4f-5a40-4a24-8a6a-da24e854ae32\tPset_AudioVisualApplianceTypeDisplay.VideoCaptionMode[Type]\tMULTILINETEXT\t\t43\t1\tPropertyTableValue\t1\nPARAM\t034ade4d-eb42-4e8c-a302-c44b4f6172c7\tPset_AudioVisualApplianceTypeDisplay.VideoResolutionHeight[Type]\tINTEGER\t\t43\t1\tIfcInteger\t1\nPARAM\tad208ae0-2673-4850-857c-d9863e8b6783\tPset_AudioVisualApplianceTypeDisplay.VideoResolutionMode[Type]\tMULTILINETEXT\t\t43\t1\tPropertyTableValue\t1\nPARAM\t4594952e-72af-4903-b8f3-c9befc7b30f8\tPset_AudioVisualApplianceTypeDisplay.VideoResolutionWidth[Type]\tINTEGER\t\t43\t1\tIfcInteger\t1\nPARAM\t8f8932ed-a7b6-49d2-9294-aa1f205fdac9\tPset_AudioVisualApplianceTypeDisplay.VideoScaleMode[Type]\tMULTILINETEXT\t\t43\t1\tPropertyTableValue\t1\n#\nGROUP\t44\tPset_AudioVisualApplianceTypePlayer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6f7cc8a8-a845-4ca5-9064-de3e57061e3b\tPset_AudioVisualApplianceTypePlayer.PlayerMediaEject[Type]\tYESNO\t\t44\t1\tIfcBoolean\t1\nPARAM\t529417b7-4f4e-4bf6-b067-0a3efe5226ca\tPset_AudioVisualApplianceTypePlayer.PlayerMediaFormat[Type]\tMULTILINETEXT\t\t44\t1\tPropertyTableValue\t1\nPARAM\tf3fa1a7f-9c11-4f9d-840e-cf4ab77bfcbb\tPset_AudioVisualApplianceTypePlayer.PlayerType[Type]\tTEXT\t\t44\t1\tPEnum_AudioVisualPlayerType\t1\n#\nGROUP\t45\tPset_AudioVisualApplianceTypeProjector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tad44fb75-0097-411d-8a30-08a80b7da698\tPset_AudioVisualApplianceTypeProjector.ProjectorType[Type]\tTEXT\t\t45\t1\tPEnum_AudioVisualProjectorType\t1\nPARAM\t5f611f00-c006-4191-9342-d9e85f46fe83\tPset_AudioVisualApplianceTypeProjector.VideoCaptionMode[Type]\tMULTILINETEXT\t\t45\t1\tPropertyTableValue\t1\nPARAM\t616e57bf-ca27-46dd-a8f3-6cb203094d25\tPset_AudioVisualApplianceTypeProjector.VideoResolutionHeight[Type]\tINTEGER\t\t45\t1\tIfcInteger\t1\nPARAM\t541a5d83-9aed-4ffb-bc0b-b8b175a39736\tPset_AudioVisualApplianceTypeProjector.VideoResolutionMode[Type]\tMULTILINETEXT\t\t45\t1\tPropertyTableValue\t1\nPARAM\t6aa36305-e7ba-4313-9376-ebd1f04655e2\tPset_AudioVisualApplianceTypeProjector.VideoResolutionWidth[Type]\tINTEGER\t\t45\t1\tIfcInteger\t1\nPARAM\t7e963f85-40a8-4174-bef9-89efd8871666\tPset_AudioVisualApplianceTypeProjector.VideoScaleMode[Type]\tMULTILINETEXT\t\t45\t1\tPropertyTableValue\t1\n#\nGROUP\t46\tPset_AudioVisualApplianceTypeReceiver\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcd36ed47-12ad-4e39-84ab-f64717efc4cc\tPset_AudioVisualApplianceTypeReceiver.AudioAmplification[Type]\tMULTILINETEXT\t\t46\t1\tPropertyTableValue\t1\nPARAM\td1e98c89-7fd8-4c81-8622-4a467296c8f7\tPset_AudioVisualApplianceTypeReceiver.AudioMode[Type]\tMULTILINETEXT\t\t46\t1\tPropertyTableValue\t1\nPARAM\t2f0a87b5-281f-425f-8f6b-0d4cd0059188\tPset_AudioVisualApplianceTypeReceiver.ReceiverType[Type]\tTEXT\t\t46\t1\tPEnum_AudioVisualReceiverType\t1\n#\nGROUP\t47\tPset_AudioVisualApplianceTypeSpeaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3ff899a6-50cc-4b2a-866a-f64f76195633\tPset_AudioVisualApplianceTypeSpeaker.FrequencyResponse[Type]\tMULTILINETEXT\t\t47\t1\tPropertyTableValue\t1\nPARAM\ta7d0fa4c-b251-46a2-9900-3f59cbf71e3d\tPset_AudioVisualApplianceTypeSpeaker.Impedence[Type]\tNUMBER\t\t47\t1\tIfcFrequencyMeasure\t1\nPARAM\t89dc8226-e45e-4593-9884-aa8b5594e81c\tPset_AudioVisualApplianceTypeSpeaker.SpeakerDriverSize[Type]\tMULTILINETEXT\t\t47\t1\tPropertyTableValue\t1\nPARAM\tdd023905-5ce1-4b42-8c9b-2d690136ec1b\tPset_AudioVisualApplianceTypeSpeaker.SpeakerMounting[Type]\tTEXT\t\t47\t1\tPEnum_AudioVisualSpeakerMounting\t1\nPARAM\t3451f201-add2-418f-9fbd-18fcf9856c9e\tPset_AudioVisualApplianceTypeSpeaker.SpeakerType[Type]\tTEXT\t\t47\t1\tPEnum_AudioVisualSpeakerType\t1\n#\nGROUP\t48\tPset_AudioVisualApplianceTypeTuner\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t08c93275-e034-4f9b-aabc-129abf11b8be\tPset_AudioVisualApplianceTypeTuner.TunerChannel[Type]\tMULTILINETEXT\t\t48\t1\tPropertyTableValue\t1\nPARAM\tb33adf42-bd0f-4aa8-a2d9-903d575667b7\tPset_AudioVisualApplianceTypeTuner.TunerFrequency[Type]\tMULTILINETEXT\t\t48\t1\tPropertyBoundedValue\t1\nPARAM\tddf8a6f3-05ad-4f27-92b0-0f2f5a09b641\tPset_AudioVisualApplianceTypeTuner.TunerMode[Type]\tMULTILINETEXT\t\t48\t1\tPropertyTableValue\t1\nPARAM\t93ba48bf-8272-4f3b-9adc-4c0b70da58b6\tPset_AudioVisualApplianceTypeTuner.TunerType[Type]\tTEXT\t\t48\t1\tPEnum_AudioVisualTunerType\t1\n#\nGROUP\t49\tPset_BeamCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1b42160f-533f-49cc-b5d0-b6d78cc3acf6\tPset_BeamCommon.FireRating[Type]\tTEXT\t\t49\t1\tIfcLabel\t1\nPARAM\tf0ffce37-da13-4760-8b22-50c4f563d8c5\tPset_BeamCommon.IsExternal[Type]\tYESNO\t\t49\t1\tIfcBoolean\t1\nPARAM\t4005b556-c0ce-47a2-b039-581663e74e83\tPset_BeamCommon.LoadBearing[Type]\tYESNO\t\t49\t1\tIfcBoolean\t1\nPARAM\t5fb543c4-766a-41a8-8004-ad58a52ce0d9\tPset_BeamCommon.Reference[Type]\tTEXT\t\t49\t1\tIfcIdentifier\t1\nPARAM\t830f615a-b959-4990-9fa8-eb684e692a80\tPset_BeamCommon.Roll[Type]\tNUMBER\t\t49\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t6f2fde58-270e-483e-81e1-d55f886cb934\tPset_BeamCommon.Slope[Type]\tNUMBER\t\t49\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tae025be8-bd74-4ac4-8cb5-b736f8b25d78\tPset_BeamCommon.Span[Type]\tLENGTH\t\t49\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc9e4d67d-c2be-439b-8d41-33618302a894\tPset_BeamCommon.Status[Type]\tTEXT\t\t49\t1\tPEnum_ElementStatus\t1\nPARAM\tc27fd2dc-24ef-4500-9f2f-3e9222a27460\tPset_BeamCommon.ThermalTransmittance[Type]\tNUMBER\t\t49\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t50\tPset_BinaryInput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t196165c0-6178-418c-88bf-8f73cd732ae8\tPset_BinaryInput.AckedTransitions[Type]\tTEXT\t\t50\t1\tPEnum_BACnetAckedTransitionsType\t1\nPARAM\tbff42dfe-34ad-4183-bc45-e9423b805768\tPset_BinaryInput.ActiveText[Type]\tTEXT\t\t50\t1\tIfcText\t1\nPARAM\t128fd4e8-ecc7-4fa8-86fe-e1b7456b1ddc\tPset_BinaryInput.EventEnable[Type]\tTEXT\t\t50\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\t982deb6c-439c-41aa-871c-f42b5187f6d0\tPset_BinaryInput.FeedbackValue[Type]\tTEXT\t\t50\t1\tPEnum_BACnetFeedbackValueType\t1\nPARAM\tbf32fb49-e742-4bea-8814-cbc5bbaf2f99\tPset_BinaryInput.InactiveText[Type]\tTEXT\t\t50\t1\tIfcText\t1\nPARAM\tf502e97f-9f51-4133-aa09-1d5f64c967ac\tPset_BinaryInput.MinimumOffTime[Type]\tMULTILINETEXT\t\t50\t1\tIfcLocalTime\t1\nPARAM\t2c29d5c6-6a4f-470e-93ce-277dc60b71b8\tPset_BinaryInput.MinimumOnTime[Type]\tMULTILINETEXT\t\t50\t1\tIfcLocalTime\t1\nPARAM\tca09d749-7262-480f-9213-372ebb97a44d\tPset_BinaryInput.Polarity[Type]\tTEXT\t\t50\t1\tPEnum_PolarityEnum\t1\n#\nGROUP\t51\tPset_BinaryOutput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0ec86560-1870-49d1-92c2-c5445ca5f879\tPset_BinaryOutput.AckedTransitions[Type]\tTEXT\t\t51\t1\tPEnum_BACnetAckedTransitionsType\t1\nPARAM\t7c67aae3-a325-45a9-904f-d6ec732d7fb4\tPset_BinaryOutput.ActiveText[Type]\tTEXT\t\t51\t1\tIfcText\t1\nPARAM\t335416f0-b2e3-4d32-bebc-661c154e5934\tPset_BinaryOutput.AlarmValue[Type]\tTEXT\t\t51\t1\tPEnum_BACnetAlarmValueType\t1\nPARAM\ta56c491d-2220-4999-819b-5a42a3d5dea8\tPset_BinaryOutput.EventEnable[Type]\tTEXT\t\t51\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\td10e485c-efbe-46ec-9259-f9e1ae922811\tPset_BinaryOutput.InactiveText[Type]\tTEXT\t\t51\t1\tIfcText\t1\nPARAM\t7b0f613a-0055-4577-a4ec-47a6256228aa\tPset_BinaryOutput.Polarity[Type]\tTEXT\t\t51\t1\tPEnum_PolarityEnum\t1\n#\nGROUP\t52\tPset_BoilerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc731b9db-a554-4eca-97e4-e5a90b094c00\tPset_BoilerPHistory.AuxiliaryEnergyConsumption[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\tac2737fa-d539-4603-be81-f049b7f958c2\tPset_BoilerPHistory.CombustionEfficiency[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\tcaab0eb4-44db-48cd-8269-16ef977ec804\tPset_BoilerPHistory.CombustionTemperature[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t44000485-feeb-4e83-82a1-c9b577251a9a\tPset_BoilerPHistory.EnergySourceConsumption[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\td1b302dd-69c3-46e5-a047-19e9d93ff821\tPset_BoilerPHistory.Load[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\td1793c3f-5aed-4ff4-9e8a-20d29f5d5ddc\tPset_BoilerPHistory.OperationalEfficiency[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t56c8eab8-d321-4b44-ae83-8e07d742ad34\tPset_BoilerPHistory.PartLoadRatio[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t40bbc244-7e7d-4dc5-a4d5-3827d16b54b7\tPset_BoilerPHistory.PrimaryEnergyConsumption[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\tf9c5e53d-d24e-4c48-9a20-a6099df794e5\tPset_BoilerPHistory.WorkingPressure[Type]\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\n#\nGROUP\t53\tPset_BoilerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4e7ee0fe-49e7-49ae-a285-7551f427cf55\tPset_BoilerTypeCommon.EnergySource[Type]\tTEXT\t\t53\t1\tPEnum_EnergySource\t1\nPARAM\t17e7b290-2fc3-4cf2-bd3c-28b44c6dc22b\tPset_BoilerTypeCommon.HeatOutput[Type]\tMULTILINETEXT\t\t53\t1\tPropertyListValue\t1\nPARAM\t07a0e22d-5029-4417-bcd9-efd313bacf83\tPset_BoilerTypeCommon.HeatTransferSurfaceArea[Type]\tAREA\t\t53\t1\tIfcAreaMeasure\t1\nPARAM\t00223468-6803-476d-bdee-8771a33a1a35\tPset_BoilerTypeCommon.IsWaterStorageHeater[Type]\tYESNO\t\t53\t1\tIfcBoolean\t1\nPARAM\t68293f88-7942-4662-a76c-83f977391594\tPset_BoilerTypeCommon.Material[Type]\tMULTILINETEXT\t\t53\t1\tIfcMaterial\t1\nPARAM\t05f9fa43-cc17-47d5-87b8-8e9568b6fa6f\tPset_BoilerTypeCommon.NominalEfficiency[Type]\tMULTILINETEXT\t\t53\t1\tPropertyListValue\t1\nPARAM\t10b17e6b-c08e-468e-a1da-09ff51db7e7f\tPset_BoilerTypeCommon.NominalEnergyConsumption[Type]\tNUMBER\t\t53\t1\tIfcPowerMeasure\t1\nPARAM\t8420b0ec-f2cc-4813-b8b6-c59bc05bce72\tPset_BoilerTypeCommon.NominalPartLoadRatio[Type]\tMULTILINETEXT\t\t53\t1\tPropertyBoundedValue\t1\nPARAM\t0cafc4ce-9783-4693-a095-e901f89865fd\tPset_BoilerTypeCommon.OperatingMode[Type]\tTEXT\t\t53\t1\tPEnum_BoilerOperatingMode\t1\nPARAM\ta6d69999-2690-451b-bc2d-e5b7b8b44954\tPset_BoilerTypeCommon.OutletTemperatureRange[Type]\tMULTILINETEXT\t\t53\t1\tPropertyBoundedValue\t1\nPARAM\t14b49da2-fa4a-4ffc-aed1-076daa46066f\tPset_BoilerTypeCommon.PartialLoadEfficiencyCurves[Type]\tMULTILINETEXT\t\t53\t1\tPropertyTableValue\t1\nPARAM\te107239b-357c-446c-b830-a485f94e382d\tPset_BoilerTypeCommon.PressureRating[Type]\tNUMBER\t\t53\t1\tIfcPressureMeasure\t1\nPARAM\t0615fe40-a9a3-40dc-87f4-d960cd2ed599\tPset_BoilerTypeCommon.Reference[Type]\tTEXT\t\t53\t1\tIfcIdentifier\t1\nPARAM\t0cd8fc41-59c9-449e-9efb-5f3a55db4b6f\tPset_BoilerTypeCommon.Status[Type]\tTEXT\t\t53\t1\tPEnum_ElementStatus\t1\nPARAM\t792eae9e-f1af-4d93-8528-bb0cb629b7d1\tPset_BoilerTypeCommon.WaterInletTemperatureRange[Type]\tMULTILINETEXT\t\t53\t1\tPropertyBoundedValue\t1\nPARAM\ta02adb6e-bc1e-4d4b-8604-6f728715390f\tPset_BoilerTypeCommon.WaterStorageCapacity[Type]\tVOLUME\t\t53\t1\tIfcVolumeMeasure\t1\nPARAM\t2dafc90a-bd35-447f-86fd-0612e3e6da95\tPset_BoilerTypeCommon.Weight[Type]\tNUMBER\t\t53\t1\tIfcMassMeasure\t1\n#\nGROUP\t54\tPset_BoilerTypeSteam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7cc309bc-1d97-4d70-a604-b6034a9eea70\tPset_BoilerTypeSteam.HeatOutput[Type]\tMULTILINETEXT\t\t54\t1\tPropertyTableValue\t1\nPARAM\t09616851-5a6b-4740-9b03-e2c555051106\tPset_BoilerTypeSteam.MaximumOutletPressure[Type]\tTEXT\t\t54\t1\tIfcLabel\t1\nPARAM\t8678fec1-d7d6-442c-a32a-653c341cd70e\tPset_BoilerTypeSteam.NominalEfficiency[Type]\tMULTILINETEXT\t\t54\t1\tPropertyTableValue\t1\n#\nGROUP\t55\tPset_BoilerTypeWater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t060fc468-8dd7-45de-9f72-99c37b7de46d\tPset_BoilerTypeWater.HeatOutput[Type]\tMULTILINETEXT\t\t55\t1\tPropertyTableValue\t1\nPARAM\tcc538db3-a102-4f74-a8b3-863792d5fd04\tPset_BoilerTypeWater.NominalEfficiency[Type]\tMULTILINETEXT\t\t55\t1\tPropertyTableValue\t1\n#\nGROUP\t56\tPset_BuildingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te55584f1-325c-41bd-ae12-4e01200bc15e\tPset_BuildingCommon.AncillaryFireUse[Type]\tTEXT\t\t56\t1\tIfcLabel\t1\nPARAM\t50cd0a23-eecc-4544-916f-5099d3d7f9be\tPset_BuildingCommon.BuildingID[Type]\tTEXT\t\t56\t1\tIfcIdentifier\t1\nPARAM\t4e5bb594-6e76-4d37-8743-57536a79fc44\tPset_BuildingCommon.ConstructionMethod[Type]\tTEXT\t\t56\t1\tIfcLabel\t1\nPARAM\t2f767d5b-f2fa-4828-bdf3-a745c1053ba9\tPset_BuildingCommon.FireProtectionClass[Type]\tTEXT\t\t56\t1\tIfcLabel\t1\nPARAM\ta3657df0-3def-4fa6-8fde-7f20f655e1ea\tPset_BuildingCommon.GrossAreaPlanned[Type]\tAREA\t\t56\t1\tIfcAreaMeasure\t1\nPARAM\t17177d15-bafb-4eb8-84b5-76369599ce93\tPset_BuildingCommon.GrossPlannedArea[Type]\tAREA\t\t56\t1\tIfcAreaMeasure\t1\nPARAM\t227c295b-b984-4e85-9e61-41634a935a40\tPset_BuildingCommon.IsLandmarked[Type]\tYESNO\t\t56\t1\tIfcLogical\t1\nPARAM\tf8d69b6d-0bb6-470c-9f34-9097b130cff2\tPset_BuildingCommon.IsPermanentID[Type]\tYESNO\t\t56\t1\tIfcBoolean\t1\nPARAM\t6fbe288c-6522-4e1b-ae8c-652c828e8f4d\tPset_BuildingCommon.MainFireUse[Type]\tTEXT\t\t56\t1\tIfcLabel\t1\nPARAM\te774616b-80ef-45ef-9ca9-641f4d8c96da\tPset_BuildingCommon.NetPlannedArea[Type]\tAREA\t\t56\t1\tIfcAreaMeasure\t1\nPARAM\t80ca501b-c7a6-4648-89d1-b08f92659b5e\tPset_BuildingCommon.NumberOfStoreys[Type]\tINTEGER\t\t56\t1\tIfcInteger\t1\nPARAM\t4609f5af-7106-47b5-936b-264cb2249e69\tPset_BuildingCommon.OccupancyType[Type]\tTEXT\t\t56\t1\tIfcLabel\t1\nPARAM\t980db421-47bb-479b-9371-6620856568e7\tPset_BuildingCommon.Reference[Type]\tTEXT\t\t56\t1\tIfcIdentifier\t1\nPARAM\t0e9d4b20-ea69-4d22-8381-4b154d8fcd32\tPset_BuildingCommon.SprinklerProtection[Type]\tYESNO\t\t56\t1\tIfcBoolean\t1\nPARAM\t87508413-7241-4a69-8f84-65b5ac41b367\tPset_BuildingCommon.SprinklerProtectionAutomatic[Type]\tYESNO\t\t56\t1\tIfcBoolean\t1\nPARAM\tfafb885e-125e-4d33-86c2-7d134d948148\tPset_BuildingCommon.YearOfConstruction[Type]\tTEXT\t\t56\t1\tIfcLabel\t1\nPARAM\t4f6cf9ae-bb41-482d-a507-f74c16a0c381\tPset_BuildingCommon.YearOfLastRefurbishment[Type]\tTEXT\t\t56\t1\tIfcLabel\t1\n#\nGROUP\t57\tPset_BuildingElementProxyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t139a5d38-2534-4558-982b-afacf18bee06\tPset_BuildingElementProxyCommon.FireRating[Type]\tTEXT\t\t57\t1\tIfcLabel\t1\nPARAM\ta4995f86-0382-4c07-a5b2-44f8718b9342\tPset_BuildingElementProxyCommon.IsExternal[Type]\tYESNO\t\t57\t1\tIfcBoolean\t1\nPARAM\t7884b9d5-9f0d-4836-93c1-01e493a4b2d5\tPset_BuildingElementProxyCommon.LoadBearing[Type]\tYESNO\t\t57\t1\tIfcBoolean\t1\nPARAM\tb51681ee-5817-4e01-9068-69d0103bf375\tPset_BuildingElementProxyCommon.Reference[Type]\tTEXT\t\t57\t1\tIfcIdentifier\t1\nPARAM\tbc59e591-a230-463d-af46-5dd8c97eb9b0\tPset_BuildingElementProxyCommon.Status[Type]\tTEXT\t\t57\t1\tPEnum_ElementStatus\t1\nPARAM\t24f7fefb-a1e2-41ca-b013-6321fb4ef785\tPset_BuildingElementProxyCommon.ThermalTransmittance[Type]\tNUMBER\t\t57\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t58\tPset_BuildingElementProxyProvisionForVoid\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48a80664-169a-4449-b086-119016c5d090\tPset_BuildingElementProxyProvisionForVoid.Depth[Type]\tLENGTH\t\t58\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t59202f8f-4301-457f-ba75-aa9529930f5d\tPset_BuildingElementProxyProvisionForVoid.Diameter[Type]\tLENGTH\t\t58\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0417c50e-b70e-4092-9163-a18a5526e6a6\tPset_BuildingElementProxyProvisionForVoid.Height[Type]\tLENGTH\t\t58\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc28bc8f1-56af-4a8c-b424-e67fdb7488e6\tPset_BuildingElementProxyProvisionForVoid.Shape[Type]\tTEXT\t\t58\t1\tIfcLabel\t1\nPARAM\t89557a4a-4656-490f-b529-b113dbde7372\tPset_BuildingElementProxyProvisionForVoid.System[Type]\tTEXT\t\t58\t1\tIfcLabel\t1\nPARAM\td4fba4e8-a7ab-4869-bc6c-5f1524a2d6b6\tPset_BuildingElementProxyProvisionForVoid.Width[Type]\tLENGTH\t\t58\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t59\tPset_BuildingStoreyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teb2ce09f-1184-431c-9713-bc459189ea02\tPset_BuildingStoreyCommon.AboveGround[Type]\tYESNO\t\t59\t1\tIfcLogical\t1\nPARAM\t3a602985-9b93-4123-97e8-92a4359494a3\tPset_BuildingStoreyCommon.EntranceLevel[Type]\tYESNO\t\t59\t1\tIfcBoolean\t1\nPARAM\t5ae7fa2b-d22e-42cf-8540-1a7a8644b992\tPset_BuildingStoreyCommon.GrossAreaPlanned[Type]\tAREA\t\t59\t1\tIfcAreaMeasure\t1\nPARAM\tc0a0347d-85f9-4437-a727-a0a7da77341a\tPset_BuildingStoreyCommon.GrossPlannedArea[Type]\tAREA\t\t59\t1\tIfcAreaMeasure\t1\nPARAM\t27dcd7da-24a2-4d57-adf5-7ab870994b90\tPset_BuildingStoreyCommon.LoadBearingCapacity[Type]\tNUMBER\t\t59\t1\tIfcPlanarForceMeasure\t1\nPARAM\tba72d71e-df74-4745-a011-d5c441074b84\tPset_BuildingStoreyCommon.NetAreaPlanned[Type]\tAREA\t\t59\t1\tIfcAreaMeasure\t1\nPARAM\t1ef9f7d5-e3ad-4425-8ea2-ff1e005a3c27\tPset_BuildingStoreyCommon.NetPlannedArea[Type]\tAREA\t\t59\t1\tIfcAreaMeasure\t1\nPARAM\t3221479f-0be8-4b3b-bed2-a5869a167f3b\tPset_BuildingStoreyCommon.Reference[Type]\tTEXT\t\t59\t1\tIfcIdentifier\t1\nPARAM\t6ffaf186-f421-4912-a567-22e4c47ba285\tPset_BuildingStoreyCommon.SprinklerProtection[Type]\tYESNO\t\t59\t1\tIfcBoolean\t1\nPARAM\t9ee0a8df-1db5-407c-875c-ad90c13c8078\tPset_BuildingStoreyCommon.SprinklerProtectionAutomatic[Type]\tYESNO\t\t59\t1\tIfcBoolean\t1\n#\nGROUP\t60\tPset_BuildingSystemCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a256f3b-1395-4d3c-91eb-88945489b812\tPset_BuildingSystemCommon.Reference[Type]\tTEXT\t\t60\t1\tIfcIdentifier\t1\n#\nGROUP\t61\tPset_BuildingUse\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td3d112aa-cf9f-4d5f-96e5-8a5d0bcbf4a5\tPset_BuildingUse.MarketCategory[Type]\tTEXT\t\t61\t1\tIfcLabel\t1\nPARAM\t5ac6b455-31b3-4f15-8bca-5e4116776aa7\tPset_BuildingUse.MarketSubCategoriesAvailableFuture[Type]\tMULTILINETEXT\t\t61\t1\tPropertyListValue\t1\nPARAM\tbf34cb99-5dfc-4c19-acf7-012dfbc43e39\tPset_BuildingUse.MarketSubCategoriesAvailableNow[Type]\tMULTILINETEXT\t\t61\t1\tPropertyListValue\t1\nPARAM\t3e0e50fd-cdf4-4e34-90c1-fa5617e7d6ea\tPset_BuildingUse.MarketSubCategory[Type]\tTEXT\t\t61\t1\tIfcLabel\t1\nPARAM\t23e6f432-c9f2-49d1-b6be-10a96347b72e\tPset_BuildingUse.NarrativeText[Type]\tTEXT\t\t61\t1\tIfcText\t1\nPARAM\t1fb6b646-48d6-498c-afed-0861b075d51b\tPset_BuildingUse.PlanningControlStatus[Type]\tTEXT\t\t61\t1\tIfcLabel\t1\nPARAM\tee02336d-1f6c-42d5-af73-7960a6dd1dbb\tPset_BuildingUse.RentalRatesInCategoryFuture[Type]\tMULTILINETEXT\t\t61\t1\tPropertyBoundedValue\t1\nPARAM\t1f7bedbc-da2d-4eb2-936d-12103dfeada0\tPset_BuildingUse.RentalRatesInCategoryNow[Type]\tMULTILINETEXT\t\t61\t1\tPropertyBoundedValue\t1\nPARAM\tbcacf575-50e0-4445-a73b-b9bc4889d0d3\tPset_BuildingUse.TenureModesAvailableFuture[Type]\tMULTILINETEXT\t\t61\t1\tPropertyListValue\t1\nPARAM\t26bb563e-f368-486b-979f-08f508a12815\tPset_BuildingUse.TenureModesAvailableNow[Type]\tMULTILINETEXT\t\t61\t1\tPropertyListValue\t1\nPARAM\t8a0fc85d-1810-408f-8cf8-be1500118de5\tPset_BuildingUse.VacancyRateInCategoryFuture[Type]\tNUMBER\t\t61\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta3baf2d8-d221-4bd3-bd26-51dda3028ed9\tPset_BuildingUse.VacancyRateInCategoryNow[Type]\tNUMBER\t\t61\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t62\tPset_BuildingUseAdjacent\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t768892e1-b40a-4848-9b99-d13bc56b36ac\tPset_BuildingUseAdjacent.MarketCategory[Type]\tTEXT\t\t62\t1\tIfcLabel\t1\nPARAM\t09db3dab-7163-4cca-97a1-584db4e913da\tPset_BuildingUseAdjacent.MarketSubCategory[Type]\tTEXT\t\t62\t1\tIfcLabel\t1\nPARAM\t194665c1-d805-4fab-9075-fabd9ef524d8\tPset_BuildingUseAdjacent.NarrativeText[Type]\tTEXT\t\t62\t1\tIfcText\t1\nPARAM\tc7eea947-ae1a-4c18-9678-efa4a9107bd7\tPset_BuildingUseAdjacent.PlanningControlStatus[Type]\tTEXT\t\t62\t1\tIfcLabel\t1\n#\nGROUP\t63\tPset_BuildingWaterStorage\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t864133f9-ce3f-4613-b9c4-760ddc6093ad\tPset_BuildingWaterStorage.OneDayCoolingTowerMakeupWater[Type]\tVOLUME\t\t63\t1\tIfcVolumeMeasure\t1\nPARAM\t4f550641-5478-4555-96f2-b54c3d0f0b4e\tPset_BuildingWaterStorage.OneDayEssentialWater[Type]\tVOLUME\t\t63\t1\tIfcVolumeMeasure\t1\nPARAM\t192e28e9-1ead-4208-a167-d823e07aa268\tPset_BuildingWaterStorage.OneDayPotableWater[Type]\tVOLUME\t\t63\t1\tIfcVolumeMeasure\t1\nPARAM\tefa8d948-485d-49b2-a5a1-8ef50e307ab6\tPset_BuildingWaterStorage.OneDayProcessOrProductionWater[Type]\tVOLUME\t\t63\t1\tIfcVolumeMeasure\t1\nPARAM\t55099d26-167a-4f86-9851-5c4eba5dae3d\tPset_BuildingWaterStorage.WaterStorageRatePerPerson[Type]\tVOLUME\t\t63\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t64\tPset_BurnerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbcaa019f-e18d-46d3-8f5a-0cc199182f91\tPset_BurnerTypeCommon.EnergySource[Type]\tTEXT\t\t64\t1\tPEnum_EnergySource\t1\nPARAM\tb21fa232-644f-4400-b448-3e9d34338262\tPset_BurnerTypeCommon.Reference[Type]\tTEXT\t\t64\t1\tIfcIdentifier\t1\nPARAM\t0fddd35b-059c-4315-b887-df1b5fc434b7\tPset_BurnerTypeCommon.Status[Type]\tTEXT\t\t64\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t65\tPset_CableCarrierFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9cbe5a9b-4a6f-4d80-866d-308f4180e235\tPset_CableCarrierFittingTypeCommon.Reference[Type]\tTEXT\t\t65\t1\tIfcIdentifier\t1\nPARAM\t160b02e5-5b41-4d52-9af5-87d05c817c38\tPset_CableCarrierFittingTypeCommon.Status[Type]\tTEXT\t\t65\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t66\tPset_CableCarrierSegmentTypeCableLadderSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taac8c03f-95a3-4f6f-8dec-71f3b33c2ee6\tPset_CableCarrierSegmentTypeCableLadderSegment.LadderConfiguration[Type]\tTEXT\t\t66\t1\tIfcText\t1\nPARAM\t22dc51b7-9e86-4587-beb2-d652ea9d0f00\tPset_CableCarrierSegmentTypeCableLadderSegment.NominalHeight[Type]\tLENGTH\t\t66\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t742ffca9-bc98-4c16-befa-a817b2206342\tPset_CableCarrierSegmentTypeCableLadderSegment.NominalLength[Type]\tLENGTH\t\t66\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taca286fc-7f43-4ea4-85ce-af884283550d\tPset_CableCarrierSegmentTypeCableLadderSegment.NominalWidth[Type]\tLENGTH\t\t66\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t67\tPset_CableCarrierSegmentTypeCableTraySegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6d4766cb-2d83-44b2-96fe-4e0f8395d65e\tPset_CableCarrierSegmentTypeCableTraySegment.HasCover[Type]\tYESNO\t\t67\t1\tIfcBoolean\t1\nPARAM\t96cbbdd3-85ad-4395-979f-16ca0e56d5a6\tPset_CableCarrierSegmentTypeCableTraySegment.NominalHeight[Type]\tLENGTH\t\t67\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t65f5a20e-e828-4b1f-bf5f-2b0ac829ab40\tPset_CableCarrierSegmentTypeCableTraySegment.NominalLength[Type]\tLENGTH\t\t67\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2d7f1464-e09b-45a8-8129-b48bd34635b9\tPset_CableCarrierSegmentTypeCableTraySegment.NominalWidth[Type]\tLENGTH\t\t67\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t68\tPset_CableCarrierSegmentTypeCableTrunkingSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4f7ff295-5a95-4193-9699-da06c586fac0\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NominalHeight[Type]\tLENGTH\t\t68\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb797e6a5-f3db-4d02-aa5d-408eaa14a73e\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NominalLength[Type]\tLENGTH\t\t68\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te2d79fce-4e8e-44a4-8202-770c5df61898\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NominalWidth[Type]\tLENGTH\t\t68\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfbff76cd-9e20-48e5-a664-191f9d9c3240\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NumberOfCompartments[Type]\tINTEGER\t\t68\t1\tIfcInteger\t1\n#\nGROUP\t69\tPset_CableCarrierSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcabca114-2329-46e7-935a-0f54a4d0f15c\tPset_CableCarrierSegmentTypeCommon.Reference[Type]\tTEXT\t\t69\t1\tIfcIdentifier\t1\nPARAM\t41f256d1-ce87-4c5c-bec4-e8d46bd1620a\tPset_CableCarrierSegmentTypeCommon.Status[Type]\tTEXT\t\t69\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t70\tPset_CableCarrierSegmentTypeConduitSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83194735-e827-41ad-b539-3cb016bffcf0\tPset_CableCarrierSegmentTypeConduitSegment.ConduitShapeType[Type]\tTEXT\t\t70\t1\tPEnum_ConduitShapeType\t1\nPARAM\t90d84926-0b03-4cb5-b996-b4101e72ae0b\tPset_CableCarrierSegmentTypeConduitSegment.IsRigid[Type]\tYESNO\t\t70\t1\tIfcBoolean\t1\nPARAM\te295efce-8914-41fa-8ca8-8f1583ced6ad\tPset_CableCarrierSegmentTypeConduitSegment.NominalHeight[Type]\tLENGTH\t\t70\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta239a368-1cd4-4a2c-87e3-451ddfbd72a5\tPset_CableCarrierSegmentTypeConduitSegment.NominalLength[Type]\tLENGTH\t\t70\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3fd4c79b-bd83-4db7-81f2-06e79a8c557f\tPset_CableCarrierSegmentTypeConduitSegment.NominalWidth[Type]\tLENGTH\t\t70\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t71\tPset_CableFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td3167094-d0a5-44ab-96c8-f66a4979aca2\tPset_CableFittingTypeCommon.Reference[Type]\tTEXT\t\t71\t1\tIfcIdentifier\t1\nPARAM\t38d1b35f-eb54-43dd-b74a-e1ff89fe0c72\tPset_CableFittingTypeCommon.Status[Type]\tTEXT\t\t71\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t72\tPset_CableSegmentOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4b914814-5278-4c94-b075-3013ba2a4383\tPset_CableSegmentOccurrence.CarrierStackNumber[Type]\tINTEGER\t\t72\t1\tIfcInteger\t1\nPARAM\ta64b3442-09a0-4257-a67a-1d5140ac3040\tPset_CableSegmentOccurrence.CurrentCarryingCapasity[Type]\tNUMBER\t\t72\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t4a31f754-8340-4ef9-b0ea-a7752d2cceb3\tPset_CableSegmentOccurrence.DesignAmbientTemperature[Type]\tMULTILINETEXT\t\t72\t1\tPropertyBoundedValue\t1\nPARAM\t906442d9-dbbe-440f-84de-0021c0a30914\tPset_CableSegmentOccurrence.DistanceBetweenParallelCircuits[Type]\tLENGTH\t\t72\t1\tIfcLengthMeasure\t1\nPARAM\t525487e2-c58a-4fa1-b84e-b55e6e41d807\tPset_CableSegmentOccurrence.InstallationMethod[Type]\tTEXT\t\t72\t1\tIfcLabel\t1\nPARAM\t17a7ab30-e903-43c3-8152-c51bae235dcd\tPset_CableSegmentOccurrence.InstallationMethodFlagEnum[Type]\tTEXT\t\t72\t1\tPEnum_InstallationMethodFlagEnum\t1\nPARAM\t63b47c0c-d1f0-493f-a355-1e6393a7d35f\tPset_CableSegmentOccurrence.IsHorizontalCable[Type]\tYESNO\t\t72\t1\tIfcBoolean\t1\nPARAM\t2055318a-b501-41e0-8fc7-36000b267392\tPset_CableSegmentOccurrence.IsMountedFlatCable[Type]\tYESNO\t\t72\t1\tIfcBoolean\t1\nPARAM\t25a21846-013d-4296-ba24-9686ed7bc2a6\tPset_CableSegmentOccurrence.MaximumCableLength[Type]\tLENGTH\t\t72\t1\tIfcLengthMeasure\t1\nPARAM\t4907b222-01df-48c6-b0b6-511375dd2239\tPset_CableSegmentOccurrence.MountingMethod[Type]\tTEXT\t\t72\t1\tPEnum_MountingMethodEnum\t1\nPARAM\t44944d32-241a-46f9-85cb-8754ae9363eb\tPset_CableSegmentOccurrence.NumberOfParallelCircuits[Type]\tINTEGER\t\t72\t1\tIfcInteger\t1\nPARAM\t3614d66c-4df0-4a6a-8667-2a3c486b915c\tPset_CableSegmentOccurrence.PowerLoss[Type]\tNUMBER\t\t72\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t3b0ace50-bc7e-4759-9bdb-39ab9a1e9cb8\tPset_CableSegmentOccurrence.SoilConductivity[Type]\tNUMBER\t\t72\t1\tIfcThermalConductivityMeasure\t1\nPARAM\te033ae23-c152-4d62-a215-3b0645e52f4d\tPset_CableSegmentOccurrence.UserCorrectionFactor[Type]\tNUMBER\t\t72\t1\tIfcReal\t1\n#\nGROUP\t73\tPset_CableSegmentTypeBusBarSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf93a68c1-93be-4b93-9f29-e5187ae18187\tPset_CableSegmentTypeBusBarSegment.IsHorizontalBusbar[Type]\tYESNO\t\t73\t1\tIfcBoolean\t1\n#\nGROUP\t74\tPset_CableSegmentTypeCableSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t206e381d-716d-4b78-a4c8-8808688ad740\tPset_CableSegmentTypeCableSegment.CableInsulationMaterial[Type]\tMULTILINETEXT\t\t74\t1\tIfcMaterial\t1\nPARAM\t4262915b-f846-42f9-bb75-ca4a8bc3916f\tPset_CableSegmentTypeCableSegment.CrossSectionalArea[Type]\tAREA\t\t74\t1\tIfcAreaMeasure\t1\nPARAM\te98a3bc5-4ad7-4aa6-9bcb-c55e0430fa66\tPset_CableSegmentTypeCableSegment.FunctionReliable[Type]\tYESNO\t\t74\t1\tIfcBoolean\t1\nPARAM\t4d102ed2-1f49-4df1-8f67-0566f5e8e7d0\tPset_CableSegmentTypeCableSegment.HalogenProof[Type]\tYESNO\t\t74\t1\tIfcBoolean\t1\nPARAM\t083bda98-9282-4029-b3b5-769d4bd4e5e2\tPset_CableSegmentTypeCableSegment.HasProtectiveEarth[Type]\tYESNO\t\t74\t1\tIfcBoolean\t1\nPARAM\te10321eb-1494-4479-9e61-76a3f6081c9e\tPset_CableSegmentTypeCableSegment.MaximumOperatingTemperature[Type]\tNUMBER\t\t74\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t79772734-9732-4e62-a3aa-a4746ea70096\tPset_CableSegmentTypeCableSegment.MaximumShortCircuitTemperature[Type]\tNUMBER\t\t74\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t1e506cf1-3119-4ce4-bc35-7ec34c99ea1f\tPset_CableSegmentTypeCableSegment.MaxOperatingTemperature[Type]\tNUMBER\t\t74\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\ta83fcaf2-2d12-4791-9304-e7922f12c1f9\tPset_CableSegmentTypeCableSegment.NominalHeight[Type]\tLENGTH\t\t74\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4788440c-3b7c-45a2-98cf-8a33205aac13\tPset_CableSegmentTypeCableSegment.NominalLength[Type]\tLENGTH\t\t74\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbababf34-b0db-408e-8413-7728de2b193d\tPset_CableSegmentTypeCableSegment.NominalWidthOrDiameter[Type]\tLENGTH\t\t74\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf6d9e29d-45ed-4bf9-a676-7d21a38043dc\tPset_CableSegmentTypeCableSegment.NormalOperatingTemperature[Type]\tNUMBER\t\t74\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\ta02e4471-60e2-43ff-85c1-342aea6930c6\tPset_CableSegmentTypeCableSegment.NumberOfCores[Type]\tINTEGER\t\t74\t1\tIfcInteger\t1\nPARAM\tcf63377e-b067-4268-ae68-db862a7eee8b\tPset_CableSegmentTypeCableSegment.OverallDiameter[Type]\tLENGTH\t\t74\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf81d010b-f9fa-4595-a141-82f336cb7974\tPset_CableSegmentTypeCableSegment.RatedTemperature[Type]\tMULTILINETEXT\t\t74\t1\tPropertyBoundedValue\t1\nPARAM\tb2204776-d1ac-4543-9ed3-8fe6a1bd3a77\tPset_CableSegmentTypeCableSegment.RatedVoltage[Type]\tMULTILINETEXT\t\t74\t1\tPropertyBoundedValue\t1\nPARAM\t56abb2a1-c1fb-43ad-b466-27877eead373\tPset_CableSegmentTypeCableSegment.ScreenDiameter[Type]\tLENGTH\t\t74\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9ff3af05-690a-48a9-8978-8c7ce9e86c58\tPset_CableSegmentTypeCableSegment.SelfExtinguishing60332_1[Type]\tYESNO\t\t74\t1\tIfcBoolean\t1\nPARAM\t2e2beb43-e354-4d7b-810c-c64948bb3a5a\tPset_CableSegmentTypeCableSegment.SelfExtinguishing60332_3[Type]\tYESNO\t\t74\t1\tIfcBoolean\t1\nPARAM\t67264753-5964-4e9e-88c4-05819b46c884\tPset_CableSegmentTypeCableSegment.SheathColor[Type]\tTEXT\t\t74\t1\tIfcLabel\t1\nPARAM\t40546bf4-4e3d-4f35-b0c9-087f7e7b6157\tPset_CableSegmentTypeCableSegment.SpecialConstruction[Type]\tTEXT\t\t74\t1\tIfcLabel\t1\nPARAM\tca75f457-c596-4090-a541-a65a20b3e0c9\tPset_CableSegmentTypeCableSegment.Standard[Type]\tTEXT\t\t74\t1\tIfcLabel\t1\nPARAM\t6067a219-72dc-4734-beab-e2c8ee43a285\tPset_CableSegmentTypeCableSegment.Weight[Type]\tNUMBER\t\t74\t1\tIfcMassMeasure\t1\n#\nGROUP\t75\tPset_CableSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t533b9572-29e1-47c7-aabf-5b68acb8d662\tPset_CableSegmentTypeCommon.Reference[Type]\tTEXT\t\t75\t1\tIfcIdentifier\t1\nPARAM\t36eac336-2177-4d9c-9ad5-7680d591f574\tPset_CableSegmentTypeCommon.Status[Type]\tTEXT\t\t75\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t76\tPset_CableSegmentTypeConductorSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t40c0e6b7-e962-40a5-8a0b-ca6bf4b6da12\tPset_CableSegmentTypeConductorSegment.ConductorMaterial[Type]\tMULTILINETEXT\t\t76\t1\tIfcMaterial\t1\nPARAM\t82c37888-84e1-4ff6-8ca1-0d7a044cbc32\tPset_CableSegmentTypeConductorSegment.ConductorSheathMaterial[Type]\tMULTILINETEXT\t\t76\t1\tIfcMaterial\t1\nPARAM\t7e6dad12-ceab-4975-baaf-0e7f9fb7c397\tPset_CableSegmentTypeConductorSegment.Construction[Type]\tTEXT\t\t76\t1\tPEnum_ConstructionEnum\t1\nPARAM\t92bf6aea-c0be-4ec2-bd5a-2472e0fe00ab\tPset_CableSegmentTypeConductorSegment.CrossSectionalArea[Type]\tAREA\t\t76\t1\tIfcAreaMeasure\t1\nPARAM\ta0fe938e-59e8-4a54-8a6e-89773f96888e\tPset_CableSegmentTypeConductorSegment.ElectricalConductorFunction[Type]\tTEXT\t\t76\t1\tPEnum_ConductorFunction\t1\nPARAM\te5992a2a-93f0-42d7-a3a6-3c09b71f5a98\tPset_CableSegmentTypeConductorSegment.Function[Type]\tTEXT\t\t76\t1\tPEnum_FunctionEnum\t1\nPARAM\tb3c4b884-0e33-48e3-bc2f-4650e2eac040\tPset_CableSegmentTypeConductorSegment.IsFireResistant[Type]\tYESNO\t\t76\t1\tIfcBoolean\t1\nPARAM\tfb414e09-4e67-48b3-9745-dfa60be36146\tPset_CableSegmentTypeConductorSegment.Material[Type]\tTEXT\t\t76\t1\tPEnum_MaterialEnum\t1\nPARAM\tde31ae19-dc2d-4d55-918d-e73ed5599b1f\tPset_CableSegmentTypeConductorSegment.MaximumOperatingTemperature[Type]\tNUMBER\t\t76\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t0bea2118-ed55-4142-80bb-be95a33ec0a1\tPset_CableSegmentTypeConductorSegment.NominalLength[Type]\tLENGTH\t\t76\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t787f7ffb-8b7b-4dab-8bdc-9a79adf5bf91\tPset_CableSegmentTypeConductorSegment.PhaseReference[Type]\tTEXT\t\t76\t1\tIfcIdentifier\t1\nPARAM\t097a40b9-f0cb-4464-a6a0-52d1dfc131d0\tPset_CableSegmentTypeConductorSegment.Shape[Type]\tTEXT\t\t76\t1\tPEnum_ShapeEnum\t1\nPARAM\tfffe0a67-54c1-425b-930c-7dba160e8db9\tPset_CableSegmentTypeConductorSegment.SheathColor[Type]\tTEXT\t\t76\t1\tIfcLabel\t1\n#\nGROUP\t77\tPset_CableSegmentTypeCoreSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5fc162d1-ebe5-4888-ac77-7e6548a90da4\tPset_CableSegmentTypeCoreSegment.CoreIdentifier[Type]\tTEXT\t\t77\t1\tIfcIdentifier\t1\nPARAM\ta26fa956-e672-4b73-bd9a-f6e7bbe2739c\tPset_CableSegmentTypeCoreSegment.FunctionReliable[Type]\tYESNO\t\t77\t1\tIfcBoolean\t1\nPARAM\t1a7f1c7f-52dd-45e2-bb87-ef3282cee66e\tPset_CableSegmentTypeCoreSegment.HalogenProof[Type]\tYESNO\t\t77\t1\tIfcBoolean\t1\nPARAM\tc03ea4ad-b53a-4083-8880-ab1c94b468e8\tPset_CableSegmentTypeCoreSegment.OverallDiameter[Type]\tLENGTH\t\t77\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3669b6ce-dae9-4c1a-ba9b-5107717d976b\tPset_CableSegmentTypeCoreSegment.RatedTemperature[Type]\tMULTILINETEXT\t\t77\t1\tPropertyBoundedValue\t1\nPARAM\tcefb75ad-dfd3-4c58-89cc-4f7c2263f552\tPset_CableSegmentTypeCoreSegment.RatedVoltage[Type]\tMULTILINETEXT\t\t77\t1\tPropertyBoundedValue\t1\nPARAM\t5aa54bf2-63bf-4988-abad-af205b95a32c\tPset_CableSegmentTypeCoreSegment.ScreenDiameter[Type]\tLENGTH\t\t77\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t84c472c0-e340-4f68-adeb-98ed942a9fd3\tPset_CableSegmentTypeCoreSegment.SelfExtinguishing60332_1[Type]\tYESNO\t\t77\t1\tIfcBoolean\t1\nPARAM\t09ef60f8-5fba-4075-a085-2d1f86d7ee6d\tPset_CableSegmentTypeCoreSegment.SelfExtinguishing60332_3[Type]\tYESNO\t\t77\t1\tIfcBoolean\t1\nPARAM\t079e84ae-d1d9-4090-b7cd-c4c1832c3dac\tPset_CableSegmentTypeCoreSegment.SheathColors[Type]\tTEXT\t\t77\t1\tPEnum_CoreColorsEnum\t1\nPARAM\tba407d22-ee32-4fde-a2ef-50a149b3f206\tPset_CableSegmentTypeCoreSegment.Standard[Type]\tTEXT\t\t77\t1\tIfcLabel\t1\nPARAM\t5af16f07-ae9d-4ef9-8a03-0d95cdf31e75\tPset_CableSegmentTypeCoreSegment.Weight[Type]\tNUMBER\t\t77\t1\tIfcMassMeasure\t1\n#\nGROUP\t78\tPset_ChillerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t19af0aac-55f2-49c9-99ea-768a9f5ac1ab\tPset_ChillerPHistory.Capacity[Type]\tMULTILINETEXT\t\t78\t1\tIfcTimeSeries\t1\nPARAM\t32ecc4fb-73f0-4558-b37d-9958f9315e7c\tPset_ChillerPHistory.CapacityCurve[Type]\tNUMBER\t\t78\t1\tIfcReal\t1\nPARAM\t0c940597-155c-4ce9-8891-8033cb8c5147\tPset_ChillerPHistory.CoefficientOfPerformance[Type]\tMULTILINETEXT\t\t78\t1\tIfcTimeSeries\t1\nPARAM\t0e0130d9-945c-4199-99cd-6fd761f69bc3\tPset_ChillerPHistory.CoefficientOfPerformanceCurve[Type]\tNUMBER\t\t78\t1\tIfcReal\t1\nPARAM\t81e5f6c3-495a-494d-a0ae-9c765b94e89e\tPset_ChillerPHistory.EnergyEfficiencyRatio[Type]\tMULTILINETEXT\t\t78\t1\tIfcTimeSeries\t1\nPARAM\t07cdaed3-5a01-4f6a-9c74-f9451bc5a573\tPset_ChillerPHistory.FullLoadRatioCurve[Type]\tNUMBER\t\t78\t1\tIfcReal\t1\n#\nGROUP\t79\tPset_ChillerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2ea03e0c-48c2-46a8-b69e-7844a23066ad\tPset_ChillerTypeCommon.CapacityCurve[Type]\tMULTILINETEXT\t\t79\t1\tPropertyTableValue\t1\nPARAM\t585d32fc-f619-4c31-8888-f012596a79d7\tPset_ChillerTypeCommon.CoefficientOfPerformanceCurve[Type]\tMULTILINETEXT\t\t79\t1\tPropertyTableValue\t1\nPARAM\tb3913624-6f02-4822-959c-51c53bbd90e5\tPset_ChillerTypeCommon.FullLoadRatioCurve[Type]\tMULTILINETEXT\t\t79\t1\tPropertyTableValue\t1\nPARAM\t83387dc5-0cda-47cc-8539-176f18fda11f\tPset_ChillerTypeCommon.NominalCapacity[Type]\tNUMBER\t\t79\t1\tIfcPowerMeasure\t1\nPARAM\t95d871c6-2951-4133-a6ba-f4faf517c27a\tPset_ChillerTypeCommon.NominalCondensingTemperature[Type]\tNUMBER\t\t79\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tac817bcf-cfdd-4b71-bd80-26c365392bfd\tPset_ChillerTypeCommon.NominalEfficiency[Type]\tNUMBER\t\t79\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tfbb2dc23-9428-4243-b22e-71ee24f96bd8\tPset_ChillerTypeCommon.NominalEvaporatingTemperature[Type]\tNUMBER\t\t79\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t66046c2a-d606-483b-8e71-bbecbd6bf902\tPset_ChillerTypeCommon.NominalHeatRejectionRate[Type]\tNUMBER\t\t79\t1\tIfcPowerMeasure\t1\nPARAM\t5562b1dc-65b0-40d8-9f6a-59ec392aed87\tPset_ChillerTypeCommon.NominalPowerConsumption[Type]\tNUMBER\t\t79\t1\tIfcPowerMeasure\t1\nPARAM\t326d4989-6538-4eae-86c7-b18d560ce621\tPset_ChillerTypeCommon.Reference[Type]\tTEXT\t\t79\t1\tIfcIdentifier\t1\nPARAM\t840bbc00-82fb-41ec-afc0-ab8cc11591fa\tPset_ChillerTypeCommon.Status[Type]\tTEXT\t\t79\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t80\tPset_ChimneyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83ecf212-f6b3-4146-99be-3631e5d31c59\tPset_ChimneyCommon.FireRating[Type]\tTEXT\t\t80\t1\tIfcLabel\t1\nPARAM\t52bf429b-f8df-42a1-89c9-d4cdfd9a0be6\tPset_ChimneyCommon.IsExternal[Type]\tYESNO\t\t80\t1\tIfcBoolean\t1\nPARAM\te87b483c-fc25-491c-8b57-7abaa9885a24\tPset_ChimneyCommon.LoadBearing[Type]\tYESNO\t\t80\t1\tIfcBoolean\t1\nPARAM\ta6505bf2-e9ab-48ee-b03a-989e71421333\tPset_ChimneyCommon.NumberOfDrafts[Type]\tINTEGER\t\t80\t1\tIfcCountMeasure\t1\nPARAM\t01b94145-1a97-41ec-b5f3-e68552e7a484\tPset_ChimneyCommon.Reference[Type]\tTEXT\t\t80\t1\tIfcIdentifier\t1\nPARAM\te5fc2abf-1b76-4131-8736-983960c56acd\tPset_ChimneyCommon.Status[Type]\tTEXT\t\t80\t1\tPEnum_ElementStatus\t1\nPARAM\t258b033a-d9bc-47f5-af75-35962dd7f1a6\tPset_ChimneyCommon.ThermalTransmittance[Type]\tNUMBER\t\t80\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t81\tPset_CivilElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t707ec0cc-70ef-4071-a209-2d288048375b\tPset_CivilElementCommon.Reference[Type]\tTEXT\t\t81\t1\tIfcIdentifier\t1\nPARAM\tf3f03b57-93b4-4071-8340-5211a6636d03\tPset_CivilElementCommon.Status[Type]\tTEXT\t\t81\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t82\tPset_CoilOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t485e1be9-3b7d-416b-a875-bde1a61942ea\tPset_CoilOccurrence.HasSoundAttenuation[Type]\tYESNO\t\t82\t1\tIfcBoolean\t1\n#\nGROUP\t83\tPset_CoilPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t55bb76a6-1520-4260-9187-1f784448a95b\tPset_CoilPHistory.AirPressureDropCurve[Type]\tMULTILINETEXT\t\t83\t1\tIfcTimeSeries\t1\nPARAM\t691aef37-0ef6-42f7-a6ef-6e025d9a14c6\tPset_CoilPHistory.AtmosphericPressure[Type]\tMULTILINETEXT\t\t83\t1\tIfcTimeSeries\t1\nPARAM\t27b9099c-60c8-4836-97b5-8f6cd2b0d68a\tPset_CoilPHistory.FaceVelocity[Type]\tMULTILINETEXT\t\t83\t1\tIfcTimeSeries\t1\nPARAM\tdbfca991-4555-400e-97dc-0744b3cf30d4\tPset_CoilPHistory.SoundCurve[Type]\tMULTILINETEXT\t\t83\t1\tIfcTimeSeries\t1\n#\nGROUP\t84\tPset_CoilTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2ec10189-e24a-42c5-ab0d-7c626ea47bc5\tPset_CoilTypeCommon.AirflowRateRange[Type]\tMULTILINETEXT\t\t84\t1\tPropertyBoundedValue\t1\nPARAM\t8611061e-6a7e-47ba-84a0-579f4c982b75\tPset_CoilTypeCommon.NominalLatentCapacity[Type]\tNUMBER\t\t84\t1\tIfcPowerMeasure\t1\nPARAM\tc25848f9-2011-48ab-9518-58d573a5c510\tPset_CoilTypeCommon.NominalSensibleCapacity[Type]\tNUMBER\t\t84\t1\tIfcPowerMeasure\t1\nPARAM\t9532a90f-bbf3-4017-a23d-908c78364cae\tPset_CoilTypeCommon.NominalUA[Type]\tNUMBER\t\t84\t1\tIfcReal\t1\nPARAM\t2456a8c7-8dcd-44e8-bdba-ef5b9b79fb89\tPset_CoilTypeCommon.OperationalTemperatureRange[Type]\tMULTILINETEXT\t\t84\t1\tPropertyBoundedValue\t1\nPARAM\t6d3b1212-bbd3-48e1-9ac9-51852365829d\tPset_CoilTypeCommon.PlacementType[Type]\tTEXT\t\t84\t1\tPEnum_CoilPlacementType\t1\nPARAM\tf70977ba-856c-4dc1-a42b-245d8ef89619\tPset_CoilTypeCommon.Reference[Type]\tTEXT\t\t84\t1\tIfcIdentifier\t1\nPARAM\tc859324b-e9c1-4956-8e5b-5d92015e6c7b\tPset_CoilTypeCommon.Status[Type]\tTEXT\t\t84\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t85\tPset_CoilTypeHydronic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t253627e2-3c64-4c7b-a3bb-8e8c652bec04\tPset_CoilTypeHydronic.BypassFactor[Type]\tNUMBER\t\t85\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t07b74403-460f-4850-bb08-9b03637249bf\tPset_CoilTypeHydronic.CoilConnectionDirection[Type]\tTEXT\t\t85\t1\tPEnum_CoilConnectionDirection\t1\nPARAM\tcd327ebc-3cf6-4e36-be81-303b9efa1b57\tPset_CoilTypeHydronic.CoilCoolant[Type]\tTEXT\t\t85\t1\tPEnum_CoilCoolant\t1\nPARAM\t4612ab8e-a4e7-4f95-b4ac-e28128dc3f5c\tPset_CoilTypeHydronic.CoilFaceArea[Type]\tAREA\t\t85\t1\tIfcAreaMeasure\t1\nPARAM\t0e73b0cb-de18-4361-9bef-1a68095cfc3b\tPset_CoilTypeHydronic.CoilFluidArrangement[Type]\tTEXT\t\t85\t1\tPEnum_CoilFluidArrangement\t1\nPARAM\tce75b6e8-a87a-4e84-9c66-30c564c0582c\tPset_CoilTypeHydronic.Fluid[Type]\tMULTILINETEXT\t\t85\t1\tIfcMaterial\t1\nPARAM\tebb3fa2d-6c7a-4d6c-afca-2b0ae1e821ee\tPset_CoilTypeHydronic.FluidPressureRange[Type]\tMULTILINETEXT\t\t85\t1\tPropertyBoundedValue\t1\nPARAM\tfadfaae8-2b13-4eb1-8a30-f496eff565b4\tPset_CoilTypeHydronic.HeatExchangeSurfaceArea[Type]\tAREA\t\t85\t1\tIfcAreaMeasure\t1\nPARAM\tc2dd5c14-be51-4699-924b-a45d29732c4c\tPset_CoilTypeHydronic.PrimarySurfaceArea[Type]\tAREA\t\t85\t1\tIfcAreaMeasure\t1\nPARAM\t06bfab75-ad53-4999-8da5-f9941fa2780c\tPset_CoilTypeHydronic.SecondarySurfaceArea[Type]\tAREA\t\t85\t1\tIfcAreaMeasure\t1\nPARAM\tf0dc62fa-a7bd-4148-adc1-f20bab40a14f\tPset_CoilTypeHydronic.SensibleHeatRatio[Type]\tNUMBER\t\t85\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tcf95cbec-b3d3-40b1-8b7e-426c93ba402d\tPset_CoilTypeHydronic.TotalUACurves[Type]\tMULTILINETEXT\t\t85\t1\tPropertyTableValue\t1\nPARAM\tdb457664-306a-491e-bd6e-88f47027332f\tPset_CoilTypeHydronic.WaterPressureDropCurve[Type]\tMULTILINETEXT\t\t85\t1\tPropertyTableValue\t1\nPARAM\t97b1726b-cdc8-4f83-8e8d-a77a72508818\tPset_CoilTypeHydronic.WetCoilFraction[Type]\tNUMBER\t\t85\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t86\tPset_ColumnCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb3fd9772-d8cb-4634-8482-16f007eb827a\tPset_ColumnCommon.FireRating[Type]\tTEXT\t\t86\t1\tIfcLabel\t1\nPARAM\t7adefff2-a8c1-45dc-9f29-bbc9579a4c42\tPset_ColumnCommon.IsExternal[Type]\tYESNO\t\t86\t1\tIfcBoolean\t1\nPARAM\tb2552d99-40a8-46cd-b6c7-d4b7f88baa8a\tPset_ColumnCommon.LoadBearing[Type]\tYESNO\t\t86\t1\tIfcBoolean\t1\nPARAM\tadab403c-4011-4501-bae9-4a0034671c5d\tPset_ColumnCommon.Reference[Type]\tTEXT\t\t86\t1\tIfcIdentifier\t1\nPARAM\tc2ad7792-dc1c-4fe0-bcc9-738a583ad40a\tPset_ColumnCommon.Roll[Type]\tNUMBER\t\t86\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t831ea20e-cc16-4258-a5ea-39e28029c637\tPset_ColumnCommon.Slope[Type]\tNUMBER\t\t86\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t1ec80792-d7b5-4e3a-b4ed-aa29a5186221\tPset_ColumnCommon.Status[Type]\tTEXT\t\t86\t1\tPEnum_ElementStatus\t1\nPARAM\tdb4bbcb6-99f2-464e-b370-3afdbe484b7b\tPset_ColumnCommon.ThermalTransmittance[Type]\tNUMBER\t\t86\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t87\tPset_CommunicationsAppliancePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8864325a-a0f7-4c79-be55-b84bc4f88785\tPset_CommunicationsAppliancePHistory.PowerState[Type]\tMULTILINETEXT\t\t87\t1\tIfcTimeSeries\t1\n#\nGROUP\t88\tPset_CommunicationsApplianceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t128efd8f-939b-45b4-9751-e5fea674a54b\tPset_CommunicationsApplianceTypeCommon.Reference[Type]\tTEXT\t\t88\t1\tIfcIdentifier\t1\nPARAM\t2382dbf9-2cd2-4c72-aabe-49f12d8e46c8\tPset_CommunicationsApplianceTypeCommon.Status[Type]\tTEXT\t\t88\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t89\tPset_CompressorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td708edb6-c5d5-46f7-bfe5-797b4d461d94\tPset_CompressorPHistory.CoefficientOfPerformance[Type]\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\tb0fd50dd-b619-4404-82ba-f8c5c59a1f41\tPset_CompressorPHistory.CompressionEfficiency[Type]\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\t0993af81-9af2-4f87-a1ef-8c046d3bcbf1\tPset_CompressorPHistory.CompressorCapacity[Type]\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\t8f43ef1d-b361-437c-9264-ad86a41b676c\tPset_CompressorPHistory.CompressorTotalEfficiency[Type]\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\t0e366728-4898-4591-80b0-8a2639252d1b\tPset_CompressorPHistory.CompressorTotalHeatGain[Type]\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\t20c4a0d2-4282-49b5-972c-d9236e971670\tPset_CompressorPHistory.EnergyEfficiencyRatio[Type]\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\tfd7204fc-708f-4c79-88b5-9fbf56862fb5\tPset_CompressorPHistory.FrictionHeatGain[Type]\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\tc5a9053e-361e-4381-a8ad-83e30a90d76a\tPset_CompressorPHistory.FullLoadRatio[Type]\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\te0047163-f1c9-4317-9a81-b40d06d440fe\tPset_CompressorPHistory.FullLoadRatioCurve[Type]\tMULTILINETEXT\t\t89\t1\tPropertyListValue\t1\nPARAM\t3ae03352-d4a1-44dd-b14b-ea03fa29449c\tPset_CompressorPHistory.InputPower[Type]\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\t1f9f1189-cbab-4230-a636-69b356848f3e\tPset_CompressorPHistory.IsentropicEfficiency[Type]\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\t8d19e3bb-1db1-403b-aae1-b2752cb72c04\tPset_CompressorPHistory.LubricantPumpHeatGain[Type]\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\t70625587-256a-47dc-ad05-1d1d24d50a4c\tPset_CompressorPHistory.MechanicalEfficiency[Type]\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\tfe51ca33-8629-466c-a78d-d224ed2e4187\tPset_CompressorPHistory.ShaftPower[Type]\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\tfb4e7b5c-029b-4a3c-b341-5567c3968508\tPset_CompressorPHistory.VolumetricEfficiency[Type]\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\n#\nGROUP\t90\tPset_CompressorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf9089c79-40ac-4cb0-b591-003a55a7df29\tPset_CompressorTypeCommon.CompressorSpeed[Type]\tNUMBER\t\t90\t1\tIfcRotationalFrequencyMeasure\t1\nPARAM\t7375421f-ee58-4141-9f08-179a2064721d\tPset_CompressorTypeCommon.HasHotGasBypass[Type]\tYESNO\t\t90\t1\tIfcBoolean\t1\nPARAM\t9514dca5-df4b-4833-bbb6-2c8d8e379d16\tPset_CompressorTypeCommon.IdealCapacity[Type]\tNUMBER\t\t90\t1\tIfcPowerMeasure\t1\nPARAM\t5c865b26-7fc4-4f04-868d-17b26c263529\tPset_CompressorTypeCommon.IdealShaftPower[Type]\tNUMBER\t\t90\t1\tIfcPowerMeasure\t1\nPARAM\t477563bf-3422-4726-80d4-6b738e60bca7\tPset_CompressorTypeCommon.ImpellerDiameter[Type]\tLENGTH\t\t90\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2b537ba4-a010-4feb-93d7-836469fa0c2c\tPset_CompressorTypeCommon.MaximumPartLoadRatio[Type]\tNUMBER\t\t90\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t19fbdf94-d334-409c-b2ee-5ddb0e147b29\tPset_CompressorTypeCommon.MinimumPartLoadRatio[Type]\tNUMBER\t\t90\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4b5b9f0f-ee40-4605-ad2b-a995b3ad9422\tPset_CompressorTypeCommon.NominalCapacity[Type]\tNUMBER\t\t90\t1\tIfcPowerMeasure\t1\nPARAM\t5cd29ad4-03a9-446c-9b12-9d53d507ac32\tPset_CompressorTypeCommon.PowerSource[Type]\tTEXT\t\t90\t1\tPEnum_CompressorTypePowerSource\t1\nPARAM\td9590fb6-9e97-4c09-890d-be8cf35f500a\tPset_CompressorTypeCommon.Reference[Type]\tTEXT\t\t90\t1\tIfcIdentifier\t1\nPARAM\t96597411-e00e-4af2-ae28-10e9afb86e0e\tPset_CompressorTypeCommon.RefrigerantClass[Type]\tTEXT\t\t90\t1\tPEnum_RefrigerantClass\t1\nPARAM\t4260c56c-4990-4d09-948b-80b55623bfed\tPset_CompressorTypeCommon.RefrigerantType[Type]\tMULTILINETEXT\t\t90\t1\tIfcMaterial\t1\nPARAM\td4adeba0-bbdd-4bbc-8728-ac837a5bca26\tPset_CompressorTypeCommon.Status[Type]\tTEXT\t\t90\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t91\tPset_ConcreteElementGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfdc0c592-8117-4fea-8710-16a7dbaeaf43\tPset_ConcreteElementGeneral.ConcreteCover[Type]\tLENGTH\t\t91\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t09048132-e559-4ade-ba1f-1319b0c087ee\tPset_ConcreteElementGeneral.ConcreteCoverAtLinks[Type]\tLENGTH\t\t91\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7a7c529f-cad2-4a9c-9c9a-462cc945d184\tPset_ConcreteElementGeneral.ConcreteCoverAtMainBars[Type]\tLENGTH\t\t91\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t25b94066-5aff-448e-8b14-44d62748688c\tPset_ConcreteElementGeneral.ConstructionMethod[Type]\tTEXT\t\t91\t1\tIfcLabel\t1\nPARAM\t9b41d444-d01e-4348-897a-5d399a90f6d9\tPset_ConcreteElementGeneral.ConstructionToleranceClass[Type]\tTEXT\t\t91\t1\tIfcLabel\t1\nPARAM\t3482a8d9-30b4-4a69-9c19-a2a94737577a\tPset_ConcreteElementGeneral.ConstructionType[Type]\tTEXT\t\t91\t1\tIfcLabel\t1\nPARAM\t9bdc4bf3-571f-4634-8cd8-2b05bb215dbe\tPset_ConcreteElementGeneral.DimensionalAccuracyClass[Type]\tTEXT\t\t91\t1\tIfcLabel\t1\nPARAM\tced4016f-8195-4d45-a558-f109a87372f7\tPset_ConcreteElementGeneral.EnvironmentalClass[Type]\tTEXT\t\t91\t1\tIfcLabel\t1\nPARAM\t0845730a-55f9-43e6-886d-e25a53aa8b5e\tPset_ConcreteElementGeneral.ExposureClass[Type]\tTEXT\t\t91\t1\tIfcLabel\t1\nPARAM\t26b5a51e-960d-4ec6-9e65-003fb3c4816c\tPset_ConcreteElementGeneral.FireRating[Type]\tTEXT\t\t91\t1\tIfcLabel\t1\nPARAM\tb0fdc655-bf18-4fdf-b6a9-1d4bf78fdaae\tPset_ConcreteElementGeneral.LifeCycleEnvironmentalLoad[Type]\tTEXT\t\t91\t1\tIfcText\t1\nPARAM\t2e3c8e1a-67b5-4ee0-966d-224d79c6449e\tPset_ConcreteElementGeneral.ReinforcementAreaRatio[Type]\tNUMBER\t\t91\t1\tIfcAreaDensityMeasure\t1\nPARAM\t013d7467-0788-426a-942b-f0b2942a3f0d\tPset_ConcreteElementGeneral.ReinforcementStrengthClass[Type]\tTEXT\t\t91\t1\tIfcLabel\t1\nPARAM\tcbb12e13-7a0d-4d00-9dd2-2db62806d106\tPset_ConcreteElementGeneral.ReinforcementVolumeRatio[Type]\tMASS_DENSITY\t\t91\t1\tIfcMassDensityMeasure\t1\nPARAM\tf415fc7a-1d99-4a28-94f9-c694105df498\tPset_ConcreteElementGeneral.ServiceLife[Type]\tNUMBER\t\t91\t1\tIfcTimeMeasure\t1\nPARAM\tdf767ec3-4038-4c9e-bfcc-df0765ff4b27\tPset_ConcreteElementGeneral.StrengthClass[Type]\tTEXT\t\t91\t1\tIfcLabel\t1\nPARAM\taab7b612-60d7-4ae9-8e91-a4bed643222e\tPset_ConcreteElementGeneral.StructuralClass[Type]\tTEXT\t\t91\t1\tIfcLabel\t1\n#\nGROUP\t92\tPset_ConcreteElementQuantityGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc0550cab-f105-4fb3-a432-1fd54028f791\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryDescription[Type]\tTEXT\t\t92\t1\tIfcLabel\t1\nPARAM\td23b5193-a9ca-4e6d-a27d-769cd6d48aac\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryGroupCode[Type]\tTEXT\t\t92\t1\tIfcLabel\t1\nPARAM\td930c73c-9d55-4312-81b5-22fb3e2ee739\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryMaterial[Type]\tTEXT\t\t92\t1\tIfcLabel\t1\nPARAM\t2e2cca24-e418-49c4-8828-9e31d6d3c59e\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryMaterialSpecificationReference[Type]\tMULTILINETEXT\t\t92\t1\tIfcExternalReference\t1\nPARAM\ta0e4f567-fd3d-49f7-85ee-3d4aa78abc3f\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryQuantityByNumberOfItems[Type]\tINTEGER\t\t92\t1\tIfcCountMeasure\t1\nPARAM\tb86f8a68-50aa-4a16-8fda-7a0851589c9a\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryQuantityByWeight[Type]\tNUMBER\t\t92\t1\tIfcMassMeasure\t1\nPARAM\tcc9b2e24-2456-42ae-bf9b-248bb211728d\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessorySize[Type]\tTEXT\t\t92\t1\tIfcLabel\t1\nPARAM\tc6c94c41-1230-4fdf-9f44-6f454094e0b4\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryType[Type]\tTEXT\t\t92\t1\tIfcLabel\t1\nPARAM\t0c9b39f1-cb05-40f3-8724-1ab1ab33760f\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryTypeSpecificationReference[Type]\tMULTILINETEXT\t\t92\t1\tIfcExternalReference\t1\nPARAM\tab2fcd46-5e83-4763-ac69-33e42b1d3033\tPset_ConcreteElementQuantityGeneral.TotalConcreteQuantity[Type]\tVOLUME\t\t92\t1\tIfcVolumeMeasure\t1\nPARAM\t1bb3abe2-f082-41e3-be4d-2ce47e859f4a\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarDiameter[Type]\tLENGTH\t\t92\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7f16854c-248c-4be4-9455-438b7f50f457\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarQuantity[Type]\tNUMBER\t\t92\t1\tIfcMassMeasure\t1\nPARAM\t379f840b-a1ee-4cc5-b8a1-b219a4774dcc\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarSteelGrade[Type]\tTEXT\t\t92\t1\tIfcLabel\t1\nPARAM\tc1ec8668-1742-4c8c-bb9c-392cda5d6414\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarSteelGradeSpecificationReference[Type]\tMULTILINETEXT\t\t92\t1\tIfcExternalReference\t1\n#\nGROUP\t93\tPset_ConcreteElementSurfaceFinishQuantityGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb0bfe41a-f8f6-4c5b-a4a7-d381e5f5febc\tPset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceArea[Type]\tAREA\t\t93\t1\tIfcAreaMeasure\t1\nPARAM\tbd8f0cf2-be3e-4e52-894e-67a00d7b6ef2\tPset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceClass[Type]\tTEXT\t\t93\t1\tIfcLabel\t1\nPARAM\t28e8a6ba-cb00-496d-a8d9-264c7d49b189\tPset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceType[Type]\tTEXT\t\t93\t1\tIfcLabel\t1\nPARAM\t70642b13-2541-4b08-83d4-48cdde9ce902\tPset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceArea[Type]\tAREA\t\t93\t1\tIfcAreaMeasure\t1\nPARAM\t67627a1c-ba52-4452-8df8-b2d67b4cecb2\tPset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceClass[Type]\tTEXT\t\t93\t1\tIfcLabel\t1\nPARAM\t39cddf51-d2c8-4544-90a3-3e974257a52c\tPset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceTextureDescription[Type]\tTEXT\t\t93\t1\tIfcText\t1\nPARAM\tfe2143f4-8355-4962-9c9d-d8a21927dd52\tPset_ConcreteElementSurfaceFinishQuantityGeneral.SurfaceDescriptionDocReference[Type]\tMULTILINETEXT\t\t93\t1\tIfcExternalReference\t1\n#\nGROUP\t94\tPset_CondenserPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t06d1585f-bd41-493b-a062-c7e2f650abca\tPset_CondenserPHistory.CompressorCondenserHeatGain[Type]\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\ta672a52a-015e-4d22-9f31-b8b4814f5ca6\tPset_CondenserPHistory.CompressorCondenserPressureDrop[Type]\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\tf078075c-5741-40fc-90f2-a63fa39de744\tPset_CondenserPHistory.CondenserMeanVoidFraction[Type]\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\t8aeec34b-67a7-4e32-a364-18c01ae4a3ae\tPset_CondenserPHistory.CondensingTemperature[Type]\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\te1cace10-c9a4-4afa-bb02-61b77b96e561\tPset_CondenserPHistory.ExteriorHeatTransferCoefficient[Type]\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\t2212335d-1e37-4199-aea1-85b3817065bf\tPset_CondenserPHistory.HeatRejectionRate[Type]\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\t1825f3ae-1f14-4b8a-85b5-ec68bbe89c61\tPset_CondenserPHistory.InteriorHeatTransferCoefficient[Type]\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\t58ccf0d8-ad4d-4dc1-abe3-78acf4049814\tPset_CondenserPHistory.LogarithmicMeanTemperatureDifference[Type]\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\tad7512e0-968e-4861-9fa2-b18ea927fd42\tPset_CondenserPHistory.RefrigerantFoulingResistance[Type]\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\tffc706b2-cd01-4ab7-b04c-c92edf3765ff\tPset_CondenserPHistory.UAcurves[Type]\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\tf923daf7-21ee-4f19-b802-128160444ec3\tPset_CondenserPHistory.WaterFoulingResistance[Type]\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\n#\nGROUP\t95\tPset_CondenserTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t59add430-52ed-45e3-bcef-49a324be4c39\tPset_CondenserTypeCommon.ExternalSurfaceArea[Type]\tAREA\t\t95\t1\tIfcAreaMeasure\t1\nPARAM\tdc5768a4-f478-487c-9002-9254279dbf10\tPset_CondenserTypeCommon.InternalRefrigerantVolume[Type]\tVOLUME\t\t95\t1\tIfcVolumeMeasure\t1\nPARAM\t08d774d4-0dc4-4088-9505-5ac4e917de0f\tPset_CondenserTypeCommon.InternalSurfaceArea[Type]\tAREA\t\t95\t1\tIfcAreaMeasure\t1\nPARAM\t063d9000-bba4-452c-9c1b-fbfa625adf81\tPset_CondenserTypeCommon.InternalWaterVolume[Type]\tVOLUME\t\t95\t1\tIfcVolumeMeasure\t1\nPARAM\t9566a6fa-3730-4cdf-a2f5-9ff42c12916f\tPset_CondenserTypeCommon.NominalHeatTransferArea[Type]\tAREA\t\t95\t1\tIfcAreaMeasure\t1\nPARAM\t2c2202ab-e853-46b0-854c-ac469f88b616\tPset_CondenserTypeCommon.NominalHeatTransferCoefficient[Type]\tNUMBER\t\t95\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\ta9691c3e-ae1d-4fb4-842a-1a95d5d7ed56\tPset_CondenserTypeCommon.Reference[Type]\tTEXT\t\t95\t1\tIfcIdentifier\t1\nPARAM\t8a0e0212-9167-4e5c-ad6a-0a7263b3ab21\tPset_CondenserTypeCommon.RefrigerantClass[Type]\tTEXT\t\t95\t1\tPEnum_RefrigerantClass\t1\nPARAM\t76a44ffd-00a6-448f-8b20-7e41523e40d3\tPset_CondenserTypeCommon.RefrigerantType[Type]\tMULTILINETEXT\t\t95\t1\tIfcMaterial\t1\nPARAM\ta3df8019-23d1-433a-a795-51812fb92b6b\tPset_CondenserTypeCommon.Status[Type]\tTEXT\t\t95\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t96\tPset_Condition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5ce0e535-10bb-4044-be13-85318ad417ce\tPset_Condition.AssessmentCondition[Type]\tTEXT\t\t96\t1\tIfcLabel\t1\nPARAM\tac769934-43d2-4811-ac3f-5f62eac81a96\tPset_Condition.AssessmentDate[Type]\tTEXT\t\t96\t1\tIfcDate\t1\nPARAM\t741dd2f6-f1d5-4f73-9459-c14ad4cfe95d\tPset_Condition.AssessmentDescription[Type]\tTEXT\t\t96\t1\tIfcText\t1\n#\nGROUP\t97\tPset_ConstructionResource\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t775acf9a-22e3-47c4-9ef4-c43611740340\tPset_ConstructionResource.ActualCompletion[Type]\tMULTILINETEXT\t\t97\t1\tIfcTimeSeries\t1\nPARAM\tc1142b8d-5ab4-46bb-a93d-1794fd773140\tPset_ConstructionResource.ActualCost[Type]\tMULTILINETEXT\t\t97\t1\tIfcTimeSeries\t1\nPARAM\tdf47696f-d7b0-4b85-aa94-dd2753f39503\tPset_ConstructionResource.ActualWork[Type]\tMULTILINETEXT\t\t97\t1\tIfcTimeSeries\t1\nPARAM\t12a66427-1567-4781-8627-90d1df0c2622\tPset_ConstructionResource.RemainingCost[Type]\tMULTILINETEXT\t\t97\t1\tIfcTimeSeries\t1\nPARAM\tae62c7c1-015b-4529-ae1e-ec996d7bfd23\tPset_ConstructionResource.RemainingWork[Type]\tMULTILINETEXT\t\t97\t1\tIfcTimeSeries\t1\nPARAM\t8d60610c-0682-4bc2-99b8-ced1c79cff86\tPset_ConstructionResource.ScheduleCompletion[Type]\tMULTILINETEXT\t\t97\t1\tIfcTimeSeries\t1\nPARAM\t6eec7cd7-e9bd-421e-9324-cadeac449d8b\tPset_ConstructionResource.ScheduleCost[Type]\tMULTILINETEXT\t\t97\t1\tIfcTimeSeries\t1\nPARAM\taa6f5a38-9c94-41d8-974e-139cd9ceae1c\tPset_ConstructionResource.ScheduleWork[Type]\tMULTILINETEXT\t\t97\t1\tIfcTimeSeries\t1\n#\nGROUP\t98\tPset_ControllerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t793313b3-0e5a-4d43-973f-007619a00e3f\tPset_ControllerPHistory.Quality[Type]\tMULTILINETEXT\t\t98\t1\tIfcTimeSeries\t1\nPARAM\t1c43ca2b-5016-4c11-8c4f-78016833efc5\tPset_ControllerPHistory.Status[Type]\tMULTILINETEXT\t\t98\t1\tIfcTimeSeries\t1\nPARAM\tde11a58b-eb3d-46f6-bf2f-55477c1b8769\tPset_ControllerPHistory.Value[Type]\tMULTILINETEXT\t\t98\t1\tIfcTimeSeries\t1\n#\nGROUP\t99\tPset_ControllerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf21f44e9-2053-4152-9e89-c438cc96ce67\tPset_ControllerTypeCommon.ControlType[Type]\tTEXT\t\t99\t1\tPEnum_ControlType\t1\nPARAM\td16f87d4-8c1c-4d4a-80b7-c69a33535c3c\tPset_ControllerTypeCommon.Reference[Type]\tTEXT\t\t99\t1\tIfcIdentifier\t1\nPARAM\t6c525004-4860-4d9f-aa14-26cc21cff732\tPset_ControllerTypeCommon.SignalFactor[Type]\tNUMBER\t\t99\t1\tIfcReal\t1\nPARAM\teca28b18-efbc-4648-ae51-441480868ceb\tPset_ControllerTypeCommon.SignalOffset[Type]\tNUMBER\t\t99\t1\tIfcReal\t1\nPARAM\t3d231c3d-8989-48a8-8ad6-40f5ce28e442\tPset_ControllerTypeCommon.SignalTime[Type]\tNUMBER\t\t99\t1\tIfcTimeMeasure\t1\nPARAM\tb62593f8-9389-4090-b699-91dcf760603e\tPset_ControllerTypeCommon.Status[Type]\tTEXT\t\t99\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t100\tPset_ControllerTypeFloating\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tea02948a-d450-47ac-940f-de4636355173\tPset_ControllerTypeFloating.ControlType[Type]\tTEXT\t\t100\t1\tPEnum_ControllerTypeFloating\t1\nPARAM\t3adae4b7-42aa-48f4-aa7b-d746a6625645\tPset_ControllerTypeFloating.Labels[Type]\tMULTILINETEXT\t\t100\t1\tPropertyTableValue\t1\nPARAM\t9ef1cd32-ef01-432e-8b31-c3f12ff8849e\tPset_ControllerTypeFloating.Range[Type]\tMULTILINETEXT\t\t100\t1\tPropertyBoundedValue\t1\nPARAM\td1de92ff-ac25-4af9-9bc2-c5b6e47f3abb\tPset_ControllerTypeFloating.SignalFactor[Type]\tNUMBER\t\t100\t1\tIfcReal\t1\nPARAM\t1f21274c-ac92-4cf2-b182-1c4240b72fdf\tPset_ControllerTypeFloating.SignalOffset[Type]\tNUMBER\t\t100\t1\tIfcReal\t1\nPARAM\tf0044d4d-c491-4788-8760-9fbce60107ba\tPset_ControllerTypeFloating.SignalTime[Type]\tNUMBER\t\t100\t1\tIfcTimeMeasure\t1\nPARAM\t8548eb94-0a50-40d3-ab5d-98a792e46ed0\tPset_ControllerTypeFloating.Value[Type]\tMULTILINETEXT\t\t100\t1\tPropertyBoundedValue\t1\n#\nGROUP\t101\tPset_ControllerTypeMultiPosition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf941a45e-e6b5-442f-9c39-ba25b8accd52\tPset_ControllerTypeMultiPosition.ControlType[Type]\tTEXT\t\t101\t1\tPEnum_ControllerMultiPositionType\t1\nPARAM\t405ee6ba-8e20-483e-adce-2bb3ad967c72\tPset_ControllerTypeMultiPosition.Labels[Type]\tMULTILINETEXT\t\t101\t1\tPropertyTableValue\t1\nPARAM\tccaa5da4-45c7-4f36-8d12-09a6bd362ab7\tPset_ControllerTypeMultiPosition.Range[Type]\tMULTILINETEXT\t\t101\t1\tPropertyBoundedValue\t1\nPARAM\td57c39cb-fb8b-4d61-817f-131127bfc0d2\tPset_ControllerTypeMultiPosition.Value[Type]\tMULTILINETEXT\t\t101\t1\tPropertyBoundedValue\t1\n#\nGROUP\t102\tPset_ControllerTypeProgrammable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6910ef7a-1893-4887-a62e-40e789cae1ca\tPset_ControllerTypeProgrammable.Application[Type]\tTEXT\t\t102\t1\tPEnum_ControllerApplication\t1\nPARAM\t0c1e8e85-25fc-49a4-bd51-2daf8f7ac70d\tPset_ControllerTypeProgrammable.ControlType[Type]\tTEXT\t\t102\t1\tPEnum_ControllerTypeProgrammable\t1\nPARAM\tad2e7140-98c5-4e21-bc6b-d39659a4f8ad\tPset_ControllerTypeProgrammable.FirmwareVersion[Type]\tTEXT\t\t102\t1\tIfcLabel\t1\nPARAM\t5a8acf8b-578f-4502-b268-2e790a62d75b\tPset_ControllerTypeProgrammable.SoftwareVersion[Type]\tTEXT\t\t102\t1\tIfcLabel\t1\n#\nGROUP\t103\tPset_ControllerTypeProportional\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4d931a44-6be4-4903-a441-a52cd9c985c4\tPset_ControllerTypeProportional.ControlType[Type]\tTEXT\t\t103\t1\tPEnum_ControllerProportionalType\t1\nPARAM\tc1e67567-f0b6-414e-a844-6d31a13034d4\tPset_ControllerTypeProportional.DerivativeConstant[Type]\tNUMBER\t\t103\t1\tIfcReal\t1\nPARAM\t0b0eddbf-4a25-4546-a4b1-9431811da0df\tPset_ControllerTypeProportional.IntegralConstant[Type]\tNUMBER\t\t103\t1\tIfcReal\t1\nPARAM\tef00002d-f57a-4599-ac21-e28feea3bcc6\tPset_ControllerTypeProportional.Labels[Type]\tMULTILINETEXT\t\t103\t1\tPropertyTableValue\t1\nPARAM\tb8066893-bdb1-4c0a-a9e0-794cbcfbb92c\tPset_ControllerTypeProportional.ProportionalConstant[Type]\tNUMBER\t\t103\t1\tIfcReal\t1\nPARAM\t78c0de2b-3c36-4991-8670-6d7221fe9d4a\tPset_ControllerTypeProportional.Range[Type]\tMULTILINETEXT\t\t103\t1\tPropertyBoundedValue\t1\nPARAM\td70bdce0-0cef-4389-935c-50122116b8f2\tPset_ControllerTypeProportional.SignalFactor1[Type]\tNUMBER\t\t103\t1\tIfcReal\t1\nPARAM\t494b85f3-fd0d-435a-82bf-e9cf88fc6663\tPset_ControllerTypeProportional.SignalFactor2[Type]\tNUMBER\t\t103\t1\tIfcReal\t1\nPARAM\ta08b68f0-69aa-4b0d-be34-e82d938bbc1a\tPset_ControllerTypeProportional.SignalTime1[Type]\tNUMBER\t\t103\t1\tIfcTimeMeasure\t1\nPARAM\t396fe37e-e2bb-4548-82b6-9cf2148169da\tPset_ControllerTypeProportional.SignalTime2[Type]\tNUMBER\t\t103\t1\tIfcTimeMeasure\t1\nPARAM\t4bd7b409-5f1d-460b-8d94-53174824c9aa\tPset_ControllerTypeProportional.SignalTimeDecrease[Type]\tNUMBER\t\t103\t1\tIfcTimeMeasure\t1\nPARAM\tdcb5a8c8-8825-42ae-9772-bc1882404640\tPset_ControllerTypeProportional.SignalTimeIncrease[Type]\tNUMBER\t\t103\t1\tIfcTimeMeasure\t1\nPARAM\te75d6b69-7605-47ac-b840-bcf1ff4100b2\tPset_ControllerTypeProportional.Value[Type]\tMULTILINETEXT\t\t103\t1\tPropertyBoundedValue\t1\n#\nGROUP\t104\tPset_ControllerTypeTwoPosition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8a0096a6-4cfb-47b5-96bb-9a41121f278c\tPset_ControllerTypeTwoPosition.BandWidth[Type]\tNUMBER\t\t104\t1\tIfcReal\t1\nPARAM\t15685b7d-a1d9-44a4-8ed7-8c0ddd19468e\tPset_ControllerTypeTwoPosition.ControlType[Type]\tTEXT\t\t104\t1\tPEnum_ControllerTwoPositionType\t1\nPARAM\t10460b58-bd72-4b42-b313-27dc5c1b4135\tPset_ControllerTypeTwoPosition.Labels[Type]\tMULTILINETEXT\t\t104\t1\tPropertyTableValue\t1\nPARAM\t35198438-134e-4976-9944-54f2e652a81f\tPset_ControllerTypeTwoPosition.Polarity[Type]\tYESNO\t\t104\t1\tIfcBoolean\t1\nPARAM\t931bc595-754e-47dd-a9b2-354bbb799a58\tPset_ControllerTypeTwoPosition.Value[Type]\tYESNO\t\t104\t1\tIfcBoolean\t1\n#\nGROUP\t105\tPset_CooledBeamPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7ff6572b-330c-4fa7-9d75-f6e41bcc3a4c\tPset_CooledBeamPHistory.BeamCoolingCapacity[Type]\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t09e21a1f-4cd8-49c5-aeef-395ea8cdae33\tPset_CooledBeamPHistory.BeamHeatingCapacity[Type]\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\tdff88f8d-8a76-4d0b-bee8-95594f4e25c8\tPset_CooledBeamPHistory.CoolingWaterFlowRate[Type]\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\td57d8241-d056-4a78-867b-11cb47c94a18\tPset_CooledBeamPHistory.CorrectionFactorForCooling[Type]\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t0fc9ecf1-328b-403c-8faa-1bd407704600\tPset_CooledBeamPHistory.CorrectionFactorForHeating[Type]\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\taff2e65a-2c88-426b-9b96-30020f40a495\tPset_CooledBeamPHistory.HeatingWaterFlowRate[Type]\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t7b81b37f-2495-4430-8abf-777227a810ca\tPset_CooledBeamPHistory.ReturnWaterTemperatureCooling[Type]\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\td0d667da-d4f8-4b02-99b3-65b521c2cd0b\tPset_CooledBeamPHistory.ReturnWaterTemperatureHeating[Type]\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t3ee98a29-9431-4bbb-bc82-e069d6502697\tPset_CooledBeamPHistory.SupplyWaterTemperatureCooling[Type]\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t5bf39402-2ff6-47ec-803f-df81e068def3\tPset_CooledBeamPHistory.SupplyWaterTemperatureHeating[Type]\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t6136d047-ea8f-44c4-871c-a5d342d7db2a\tPset_CooledBeamPHistory.TotalCoolingCapacity[Type]\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t0b28ddbe-0965-44b2-91f8-60add852a983\tPset_CooledBeamPHistory.TotalHeatingCapacity[Type]\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t9f104ed3-9ac2-4dad-a42e-0315e6519456\tPset_CooledBeamPHistory.WaterPressureDropCurves[Type]\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\n#\nGROUP\t106\tPset_CooledBeamPHistoryActive\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3fbdb793-dbca-4616-92c0-9209c026f9d2\tPset_CooledBeamPHistoryActive.AirFlowRate[Type]\tMULTILINETEXT\t\t106\t1\tIfcTimeSeries\t1\nPARAM\t48fdd621-dd04-4c53-9472-a856f21279ba\tPset_CooledBeamPHistoryActive.AirPressureDropCurves[Type]\tMULTILINETEXT\t\t106\t1\tIfcTimeSeries\t1\nPARAM\te7f876c1-b8cf-4bd9-a217-a3b60c4b4490\tPset_CooledBeamPHistoryActive.Throw[Type]\tMULTILINETEXT\t\t106\t1\tIfcTimeSeries\t1\n#\nGROUP\t107\tPset_CooledBeamTypeActive\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t47f1f631-ebb3-4c0c-bd69-b08a7009f1da\tPset_CooledBeamTypeActive.AirFlowConfiguration[Type]\tTEXT\t\t107\t1\tPEnum_CooledBeamActiveAirFlowConfigurationType\t1\nPARAM\t6c5035b8-5adb-4195-80d7-5770a20e19c9\tPset_CooledBeamTypeActive.AirflowRateRange[Type]\tMULTILINETEXT\t\t107\t1\tPropertyBoundedValue\t1\nPARAM\t73c4a53a-2fda-44ce-99f1-624d82217bf0\tPset_CooledBeamTypeActive.ConnectionSize[Type]\tLENGTH\t\t107\t1\tIfcLengthMeasure\t1\nPARAM\td47be093-00c4-41d9-a90c-e646dc80f466\tPset_CooledBeamTypeActive.SupplyAirConnectionType[Type]\tTEXT\t\t107\t1\tPEnum_CooledBeamSupplyAirConnectionType\t1\n#\nGROUP\t108\tPset_CooledBeamTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2c67bd08-ce72-4837-956c-5445bb0b43e9\tPset_CooledBeamTypeCommon.CoilLength[Type]\tLENGTH\t\t108\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tca54be34-536c-4378-916e-734338894093\tPset_CooledBeamTypeCommon.CoilWidth[Type]\tLENGTH\t\t108\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1345aaf6-1fd7-45f0-8ddd-301ba2270756\tPset_CooledBeamTypeCommon.ConnectionSize[Type]\tLENGTH\t\t108\t1\tIfcLengthMeasure\t1\nPARAM\t1bcd2022-39b7-49a2-883e-e53f32a6e660\tPset_CooledBeamTypeCommon.FinishColor[Type]\tTEXT\t\t108\t1\tIfcLabel\t1\nPARAM\t55bfed40-0f45-460a-a5ce-3572421b36e9\tPset_CooledBeamTypeCommon.IntegratedLightingType[Type]\tTEXT\t\t108\t1\tPEnum_CooledBeamIntegratedLightingType\t1\nPARAM\t25459baa-f391-457b-b394-9604578215a9\tPset_CooledBeamTypeCommon.IsFreeHanging[Type]\tYESNO\t\t108\t1\tIfcBoolean\t1\nPARAM\te4beadda-9b98-4781-9cc0-bc11cff03480\tPset_CooledBeamTypeCommon.Material[Type]\tMULTILINETEXT\t\t108\t1\tIfcMaterial\t1\nPARAM\tf7e0030f-face-41c5-bf0a-dcb2ce28dc43\tPset_CooledBeamTypeCommon.NominalCoolingCapacity[Type]\tNUMBER\t\t108\t1\tIfcPowerMeasure\t1\nPARAM\te8e6ea35-fada-48e3-9e62-04b24370b001\tPset_CooledBeamTypeCommon.NominalHeatingCapacity[Type]\tNUMBER\t\t108\t1\tIfcPowerMeasure\t1\nPARAM\td85f3c57-955d-4fd6-ba30-03b0487a63bd\tPset_CooledBeamTypeCommon.NominalReturnWaterTemperatureCooling[Type]\tNUMBER\t\t108\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t0170bc05-c02d-4ed4-a752-4a11659da82d\tPset_CooledBeamTypeCommon.NominalReturnWaterTemperatureHeating[Type]\tNUMBER\t\t108\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t50bdac1e-c2f8-4e4f-b7f9-d7208d47e45d\tPset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureCooling[Type]\tNUMBER\t\t108\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\ted383c56-6dc2-4db4-86cd-f86923704b83\tPset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureHeating[Type]\tNUMBER\t\t108\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t4fbaaaaf-4c83-456f-9f85-a4a1f817cc95\tPset_CooledBeamTypeCommon.NominalSurroundingHumidityCooling[Type]\tNUMBER\t\t108\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t3cfcbe66-62f1-4130-aeb4-db314686bcf5\tPset_CooledBeamTypeCommon.NominalSurroundingTemperatureCooling[Type]\tNUMBER\t\t108\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t5349059c-a136-4d25-b6a5-eeeacd94bc4d\tPset_CooledBeamTypeCommon.NominalSurroundingTemperatureHeating[Type]\tNUMBER\t\t108\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\te49b6bdc-cdae-4745-83c0-1c04d9a917be\tPset_CooledBeamTypeCommon.NominalWaterFlowCooling[Type]\tNUMBER\t\t108\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tf37878ba-f55e-4a7a-b9e0-c00b861cfc73\tPset_CooledBeamTypeCommon.NominalWaterFlowHeating[Type]\tNUMBER\t\t108\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t45458ab1-1251-4445-adc0-b3352ac4103d\tPset_CooledBeamTypeCommon.PipeConnection[Type]\tTEXT\t\t108\t1\tPEnum_CooledBeamPipeConnection\t1\nPARAM\ta39a088d-62af-4ccd-874c-eac44c076d43\tPset_CooledBeamTypeCommon.PipeConnectionEnum[Type]\tTEXT\t\t108\t1\tPEnum_CooledBeamPipeConnection\t1\nPARAM\taf3488c0-1523-4722-87aa-4e0acb7109ea\tPset_CooledBeamTypeCommon.Reference[Type]\tTEXT\t\t108\t1\tIfcIdentifier\t1\nPARAM\tda946551-9044-4d81-9d06-e7d6afb50c3b\tPset_CooledBeamTypeCommon.Status[Type]\tTEXT\t\t108\t1\tPEnum_ElementStatus\t1\nPARAM\tde72db4a-55b7-4805-bdf4-11212a721ea6\tPset_CooledBeamTypeCommon.WaterFlowControlSystemType[Type]\tTEXT\t\t108\t1\tPEnum_CooledBeamWaterFlowControlSystemType\t1\nPARAM\t3f5b9b14-574b-409e-980b-a892321fc3c7\tPset_CooledBeamTypeCommon.WaterPressureRange[Type]\tMULTILINETEXT\t\t108\t1\tPropertyBoundedValue\t1\nPARAM\t917d349a-8868-4d89-9238-9ddbd9c586df\tPset_CooledBeamTypeCommon.Weight[Type]\tNUMBER\t\t108\t1\tIfcMassMeasure\t1\n#\nGROUP\t109\tPset_CoolingTowerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t38933f42-aefe-4b3b-8d69-a52501ce1225\tPset_CoolingTowerPHistory.Capacity[Type]\tMULTILINETEXT\t\t109\t1\tIfcTimeSeries\t1\nPARAM\t873c6998-abcb-4ad4-b455-a9f030aa4958\tPset_CoolingTowerPHistory.HeatTransferCoefficient[Type]\tMULTILINETEXT\t\t109\t1\tIfcTimeSeries\t1\nPARAM\t9b33f29d-2eea-4903-b17a-37809cd21f25\tPset_CoolingTowerPHistory.Performance[Type]\tMULTILINETEXT\t\t109\t1\tIfcTimeSeries\t1\nPARAM\t7b09ea9b-64f0-46cb-aa35-e4ab8a875928\tPset_CoolingTowerPHistory.SumpHeaterPower[Type]\tMULTILINETEXT\t\t109\t1\tIfcTimeSeries\t1\nPARAM\t0130e918-aeda-4ac6-ab8e-11bc5e144407\tPset_CoolingTowerPHistory.UACurve[Type]\tMULTILINETEXT\t\t109\t1\tIfcTimeSeries\t1\n#\nGROUP\t110\tPset_CoolingTowerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t838d4a70-117f-4b4b-8747-87fbb93f4196\tPset_CoolingTowerTypeCommon.AmbientDesignDryBulbTemperature[Type]\tNUMBER\t\t110\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t1884bc86-96ca-4b57-a705-130c0f8eda10\tPset_CoolingTowerTypeCommon.AmbientDesignWetBulbTemperature[Type]\tNUMBER\t\t110\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t8b62dc66-b0e1-4e8d-8715-1cfc2dd17257\tPset_CoolingTowerTypeCommon.BasinReserveVolume[Type]\tVOLUME\t\t110\t1\tIfcVolumeMeasure\t1\nPARAM\t70c93324-14fb-49de-87e1-843556a61937\tPset_CoolingTowerTypeCommon.CapacityControl[Type]\tTEXT\t\t110\t1\tPEnum_CoolingTowerCapacityControl\t1\nPARAM\tbf2a689e-28f3-4ca7-9426-13330e0ed94b\tPset_CoolingTowerTypeCommon.CasingMaterial[Type]\tMULTILINETEXT\t\t110\t1\tIfcMaterial\t1\nPARAM\t5d1e5c96-233d-46d6-a71b-64d462ea7e1b\tPset_CoolingTowerTypeCommon.CircuitType[Type]\tTEXT\t\t110\t1\tPEnum_CoolingTowerCircuitType\t1\nPARAM\t947fdeae-7fa4-441e-bd7d-3e8aacf25f49\tPset_CoolingTowerTypeCommon.ControlStrategy[Type]\tTEXT\t\t110\t1\tPEnum_CoolingTowerControlStrategy\t1\nPARAM\tc920b70c-5ea8-466c-ab72-f74f2aaf3e86\tPset_CoolingTowerTypeCommon.FillMaterial[Type]\tMULTILINETEXT\t\t110\t1\tIfcMaterial\t1\nPARAM\t75167223-2017-4588-9ca6-428f127fec70\tPset_CoolingTowerTypeCommon.FlowArrangement[Type]\tTEXT\t\t110\t1\tPEnum_CoolingTowerFlowArrangement\t1\nPARAM\td4e42c6e-a911-4f88-a337-2cd52b73f019\tPset_CoolingTowerTypeCommon.LiftElevationDifference[Type]\tLENGTH\t\t110\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t87d3e3e0-2ad1-41a7-9dbb-9cd60bd4b826\tPset_CoolingTowerTypeCommon.NominalCapacity[Type]\tNUMBER\t\t110\t1\tIfcPowerMeasure\t1\nPARAM\tff72317b-d186-4660-b6eb-d9e3cc9727c3\tPset_CoolingTowerTypeCommon.NumberOfCells[Type]\tINTEGER\t\t110\t1\tIfcInteger\t1\nPARAM\tc220a41f-886b-4de1-8944-8015fb4d23c8\tPset_CoolingTowerTypeCommon.OperationTemperatureRange[Type]\tNUMBER\t\t110\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\td679a2c0-16af-4d07-9337-456f85c7cfdd\tPset_CoolingTowerTypeCommon.Reference[Type]\tTEXT\t\t110\t1\tIfcIdentifier\t1\nPARAM\t1530e590-7861-4787-8ce5-e4f25ac1fb99\tPset_CoolingTowerTypeCommon.SprayType[Type]\tTEXT\t\t110\t1\tPEnum_CoolingTowerSprayType\t1\nPARAM\t9f8e684c-5ee2-4fc4-966b-9a4e8501d54e\tPset_CoolingTowerTypeCommon.Status[Type]\tTEXT\t\t110\t1\tPEnum_ElementStatus\t1\nPARAM\t9d722b05-4ee7-436f-81f1-1b0dd6393406\tPset_CoolingTowerTypeCommon.WaterRequirement[Type]\tNUMBER\t\t110\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t3ecdee4e-bb4e-4e8b-952d-86c530cb2fcb\tPset_CoolingTowerTypeCommon.Weight[Type]\tNUMBER\t\t110\t1\tIfcMassMeasure\t1\n#\nGROUP\t111\tPset_CoveringCeiling\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t74318a74-7855-4010-8150-3fcedea8c566\tPset_CoveringCeiling.FragilityRating[Type]\tTEXT\t\t111\t1\tIfcLabel\t1\nPARAM\t21b0af2e-1099-4890-9bdd-1ce30027c75a\tPset_CoveringCeiling.Permeability[Type]\tNUMBER\t\t111\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t51a54828-6a34-4a52-8e42-a416256ec9a4\tPset_CoveringCeiling.TileLength[Type]\tLENGTH\t\t111\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t53b89ada-46fe-41bd-a7db-8484cba0d557\tPset_CoveringCeiling.TileWidth[Type]\tLENGTH\t\t111\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t112\tPset_CoveringCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tba10dcf9-ceaf-483b-bebf-06ddaa6417b6\tPset_CoveringCommon.AcousticRating[Type]\tTEXT\t\t112\t1\tIfcLabel\t1\nPARAM\tb0dfc39d-f66f-4d1a-81d0-ca3ec3c59d89\tPset_CoveringCommon.Combustible[Type]\tYESNO\t\t112\t1\tIfcBoolean\t1\nPARAM\tf41e96ec-8600-430a-8e64-c010a8e31590\tPset_CoveringCommon.Finish[Type]\tTEXT\t\t112\t1\tIfcText\t1\nPARAM\t8a43a414-683c-439d-8888-60d6662df839\tPset_CoveringCommon.FireRating[Type]\tTEXT\t\t112\t1\tIfcLabel\t1\nPARAM\t1ac6a7f4-ba48-4401-9a48-e6322467f344\tPset_CoveringCommon.FlammabilityRating[Type]\tTEXT\t\t112\t1\tIfcLabel\t1\nPARAM\t89f4542d-6c73-470f-b215-8f7d44e77edb\tPset_CoveringCommon.Fragility[Type]\tTEXT\t\t112\t1\tIfcLabel\t1\nPARAM\t02896e79-d4a4-4c76-8381-00c6504581d9\tPset_CoveringCommon.FragilityRating[Type]\tTEXT\t\t112\t1\tIfcLabel\t1\nPARAM\t0895ff4d-fe80-47bf-ae21-9b282d814b91\tPset_CoveringCommon.IsExternal[Type]\tYESNO\t\t112\t1\tIfcBoolean\t1\nPARAM\tc020aece-614a-4a59-a056-b24fdfacf6ae\tPset_CoveringCommon.Material[Type]\tTEXT\t\t112\t1\tIfcLabel\t1\nPARAM\t319e75b6-bc45-4947-a926-5df68da83409\tPset_CoveringCommon.Reference[Type]\tTEXT\t\t112\t1\tIfcIdentifier\t1\nPARAM\t76c286ab-0d5b-4a3f-991e-731a42120310\tPset_CoveringCommon.Status[Type]\tTEXT\t\t112\t1\tPEnum_ElementStatus\t1\nPARAM\ta07e6599-1360-4266-8602-2e806980150c\tPset_CoveringCommon.SurfaceSpreadOfFlame[Type]\tTEXT\t\t112\t1\tIfcLabel\t1\nPARAM\tdb96843b-d055-42bb-9dfb-abbf5ec656c5\tPset_CoveringCommon.ThermalTransmittance[Type]\tNUMBER\t\t112\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t90a4b463-418f-4483-ade8-567e6e7bc2dc\tPset_CoveringCommon.Thickness[Type]\tLENGTH\t\t112\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0f0b9392-1942-4a87-aca3-b63dbcdd4ebb\tPset_CoveringCommon.TotalThickness[Type]\tLENGTH\t\t112\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t113\tPset_CoveringFlooring\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tff5ee02f-9a7d-4654-93c4-9316f5636359\tPset_CoveringFlooring.HasAntiStaticSurface[Type]\tYESNO\t\t113\t1\tIfcBoolean\t1\nPARAM\tdd5d4147-4cda-4b47-829b-65075973264e\tPset_CoveringFlooring.HasNonSkidSurface[Type]\tYESNO\t\t113\t1\tIfcBoolean\t1\n#\nGROUP\t114\tPset_CurtainWallCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tee6bf7dc-2c1b-4618-813d-5131911f4aa9\tPset_CurtainWallCommon.AcousticRating[Type]\tTEXT\t\t114\t1\tIfcLabel\t1\nPARAM\t7dc4281c-2b3a-48d0-83b8-c588f0d5f46f\tPset_CurtainWallCommon.Combustible[Type]\tYESNO\t\t114\t1\tIfcBoolean\t1\nPARAM\td41f26e1-01c8-40a6-af71-1f8c7103c284\tPset_CurtainWallCommon.FireRating[Type]\tTEXT\t\t114\t1\tIfcLabel\t1\nPARAM\t84f7731d-95af-44a3-8123-9457050f99ca\tPset_CurtainWallCommon.IsExternal[Type]\tYESNO\t\t114\t1\tIfcBoolean\t1\nPARAM\tb66a1670-3c8d-4191-9d71-f2d8953f1e25\tPset_CurtainWallCommon.Reference[Type]\tTEXT\t\t114\t1\tIfcIdentifier\t1\nPARAM\tb598eb0c-4476-4b57-a45a-7382d0272874\tPset_CurtainWallCommon.Status[Type]\tTEXT\t\t114\t1\tPEnum_ElementStatus\t1\nPARAM\t39702f34-8d0f-44e0-bfa7-8f3479ee0ce3\tPset_CurtainWallCommon.SurfaceSpreadOfFlame[Type]\tTEXT\t\t114\t1\tIfcLabel\t1\nPARAM\t8f08ee4e-b34d-458c-b203-513386375d90\tPset_CurtainWallCommon.ThermalTransmittance[Type]\tNUMBER\t\t114\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t115\tPset_DamperOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c7bd0b1-59e6-4002-8ac4-dbb8477f8b16\tPset_DamperOccurrence.SizingMethod[Type]\tTEXT\t\t115\t1\tPEnum_DamperSizingMethod\t1\n#\nGROUP\t116\tPset_DamperPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6079387f-ec91-4adf-a5b5-05e167bdb872\tPset_DamperPHistory.AirFlowRate[Type]\tMULTILINETEXT\t\t116\t1\tIfcTimeSeries\t1\nPARAM\te760b2fa-8bd4-4e01-90f3-c857f6987743\tPset_DamperPHistory.BladePositionAngle[Type]\tMULTILINETEXT\t\t116\t1\tIfcTimeSeries\t1\nPARAM\t6c191236-b569-4b9d-b357-9ef27c7f94b3\tPset_DamperPHistory.DamperPosition[Type]\tMULTILINETEXT\t\t116\t1\tIfcTimeSeries\t1\nPARAM\tab4bca77-8cd7-4394-b638-272133d413be\tPset_DamperPHistory.Leakage[Type]\tMULTILINETEXT\t\t116\t1\tIfcTimeSeries\t1\nPARAM\tc6e1ebab-28c8-4400-9e33-d9f9acc3bf3b\tPset_DamperPHistory.PressureDrop[Type]\tMULTILINETEXT\t\t116\t1\tIfcTimeSeries\t1\nPARAM\t37582803-e4ff-453d-a186-1453f50d8f06\tPset_DamperPHistory.PressureLossCoefficient[Type]\tMULTILINETEXT\t\t116\t1\tIfcTimeSeries\t1\n#\nGROUP\t117\tPset_DamperTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7de2b45-5c6b-4a4c-9293-5350e3c86a16\tPset_DamperTypeCommon.BladeAction[Type]\tTEXT\t\t117\t1\tPEnum_DamperBladeAction\t1\nPARAM\tc8ca0da7-87f7-46b5-b962-99014d43b11f\tPset_DamperTypeCommon.BladeEdge[Type]\tTEXT\t\t117\t1\tPEnum_DamperBladeEdge\t1\nPARAM\t8b39a53d-08fb-4a11-932f-e2539c471678\tPset_DamperTypeCommon.BladeMaterial[Type]\tMULTILINETEXT\t\t117\t1\tIfcMaterial\t1\nPARAM\tcce5480b-7246-4fbe-a0a9-bc7a69fd84d2\tPset_DamperTypeCommon.BladeShape[Type]\tTEXT\t\t117\t1\tPEnum_DamperBladeShape\t1\nPARAM\t576fafde-8c47-4695-b7b2-eddc537928e2\tPset_DamperTypeCommon.BladeThickness[Type]\tLENGTH\t\t117\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te182daa4-7e65-451e-aa4d-6f50cc0ce3be\tPset_DamperTypeCommon.CloseOffRating[Type]\tNUMBER\t\t117\t1\tIfcPressureMeasure\t1\nPARAM\t670ff535-6a9f-465a-9f58-e4ea641aba19\tPset_DamperTypeCommon.FaceArea[Type]\tAREA\t\t117\t1\tIfcAreaMeasure\t1\nPARAM\t968d9d7a-1778-4124-8d64-8ee6bf96dcdd\tPset_DamperTypeCommon.FrameDepth[Type]\tLENGTH\t\t117\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t642b8a87-3319-4a68-89b6-f85df7fcce59\tPset_DamperTypeCommon.FrameMaterial[Type]\tMULTILINETEXT\t\t117\t1\tIfcMaterial\t1\nPARAM\t34014747-c646-4291-bb26-ebbda11117dc\tPset_DamperTypeCommon.FrameThickness[Type]\tLENGTH\t\t117\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf1441756-2756-4e4d-b2b9-fd192e0e119c\tPset_DamperTypeCommon.FrameType[Type]\tTEXT\t\t117\t1\tIfcLabel\t1\nPARAM\t35b4de8d-0c63-47be-8724-4ce255f0cacd\tPset_DamperTypeCommon.LeakageCurve[Type]\tMULTILINETEXT\t\t117\t1\tPropertyTableValue\t1\nPARAM\tdda11036-dec8-49d1-b8db-cdb616ae2e39\tPset_DamperTypeCommon.LeakageFullyClosed[Type]\tNUMBER\t\t117\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t6526e048-1d26-45c6-98f9-9abd6173cfb9\tPset_DamperTypeCommon.LossCoefficentCurve[Type]\tMULTILINETEXT\t\t117\t1\tPropertyTableValue\t1\nPARAM\t8a16d3e9-bc6a-41ca-9c91-f40ce345ba85\tPset_DamperTypeCommon.MaximumAirFlowRate[Type]\tNUMBER\t\t117\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\te1a06733-76de-4cce-b3cf-cb09d132340a\tPset_DamperTypeCommon.MaximumWorkingPressure[Type]\tNUMBER\t\t117\t1\tIfcPressureMeasure\t1\nPARAM\tf8035248-77d6-4a89-984f-1c2c9e0713e9\tPset_DamperTypeCommon.NominalAirFlowRate[Type]\tNUMBER\t\t117\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t070cfae0-1be3-4bba-8819-2fb2aab9566a\tPset_DamperTypeCommon.NumberofBlades[Type]\tINTEGER\t\t117\t1\tIfcInteger\t1\nPARAM\t6685bbec-6ea4-4d8c-aceb-cf3be9b087a8\tPset_DamperTypeCommon.OpenPressureDrop[Type]\tNUMBER\t\t117\t1\tIfcPressureMeasure\t1\nPARAM\tefc881c0-8e2c-484e-8a75-3ea5c6dc7269\tPset_DamperTypeCommon.Operation[Type]\tTEXT\t\t117\t1\tPEnum_DamperOperation\t1\nPARAM\tfb8667db-40e9-485f-ae1c-578c694f4e93\tPset_DamperTypeCommon.Orientation[Type]\tTEXT\t\t117\t1\tPEnum_DamperOrientation\t1\nPARAM\t9f5d1bdf-2793-4eb8-a187-1a3f1169674f\tPset_DamperTypeCommon.Reference[Type]\tTEXT\t\t117\t1\tIfcIdentifier\t1\nPARAM\t12df9dee-551d-4a4c-9d47-6dd4c4d70340\tPset_DamperTypeCommon.RegeneratedSoundCurve[Type]\tMULTILINETEXT\t\t117\t1\tPropertyTableValue\t1\nPARAM\te7742cb8-3da6-4506-b256-de367e59d3b5\tPset_DamperTypeCommon.SealMaterial[Type]\tMULTILINETEXT\t\t117\t1\tIfcMaterial\t1\nPARAM\tc3447631-1f0e-4ac7-ae34-0c151f1d05a8\tPset_DamperTypeCommon.Status[Type]\tTEXT\t\t117\t1\tPEnum_ElementStatus\t1\nPARAM\tb34c1224-623c-425f-b419-cf85e2db862f\tPset_DamperTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t117\t1\tPropertyBoundedValue\t1\nPARAM\t6b3fb26b-a894-4abd-af3c-b1bc812ab674\tPset_DamperTypeCommon.TemperatureRating[Type]\tNUMBER\t\t117\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t2fc7104b-ed10-4afd-9f00-72c4a920635f\tPset_DamperTypeCommon.TorqueRange[Type]\tMULTILINETEXT\t\t117\t1\tPropertyBoundedValue\t1\n#\nGROUP\t118\tPset_DamperTypeControlDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tddeada2e-80bd-447f-bce7-080931556374\tPset_DamperTypeControlDamper.ControlDamperOperation[Type]\tTEXT\t\t118\t1\tPEnum_ControlDamperOperation\t1\nPARAM\t45228df6-a854-4df7-9130-9f4acf400ccd\tPset_DamperTypeControlDamper.TorqueRange[Type]\tMULTILINETEXT\t\t118\t1\tPropertyBoundedValue\t1\n#\nGROUP\t119\tPset_DamperTypeFireDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta9ea1bc6-4918-4601-bdca-b509453c7e59\tPset_DamperTypeFireDamper.ActuationType[Type]\tTEXT\t\t119\t1\tPEnum_FireDamperActuationType\t1\nPARAM\t25600cfb-cb04-400b-9b69-034ca2d85845\tPset_DamperTypeFireDamper.ClosureRatingEnum[Type]\tTEXT\t\t119\t1\tPEnum_FireDamperClosureRating\t1\nPARAM\tcfb4892c-3de8-4bc1-bb7a-4ad0442bab4b\tPset_DamperTypeFireDamper.FireResistanceRating[Type]\tTEXT\t\t119\t1\tIfcLabel\t1\nPARAM\tb1443815-8a9e-4981-a58b-2dc739fce5c9\tPset_DamperTypeFireDamper.FusibleLinkTemperature[Type]\tNUMBER\t\t119\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t120\tPset_DamperTypeFireSmokeDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5289d633-4599-4980-81c2-d0ec999a08d4\tPset_DamperTypeFireSmokeDamper.ActuationType[Type]\tTEXT\t\t120\t1\tPEnum_FireDamperActuationType\t1\nPARAM\t85f89d16-5d9b-4495-aa40-cbcd6c48a35c\tPset_DamperTypeFireSmokeDamper.ClosureRatingEnum[Type]\tTEXT\t\t120\t1\tPEnum_FireDamperClosureRating\t1\nPARAM\te82038f5-132c-41e8-81d0-b174765b3b55\tPset_DamperTypeFireSmokeDamper.ControlType[Type]\tTEXT\t\t120\t1\tIfcLabel\t1\nPARAM\t7ed263c5-1b63-4b08-8dd1-a8e8f8720e7f\tPset_DamperTypeFireSmokeDamper.FireResistanceRating[Type]\tTEXT\t\t120\t1\tIfcLabel\t1\nPARAM\t273d5f58-147f-4a63-84b9-79ff8d6a5c34\tPset_DamperTypeFireSmokeDamper.FusibleLinkTemperature[Type]\tNUMBER\t\t120\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t121\tPset_DamperTypeSmokeDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7737712d-0d7b-4b2c-8bf1-ea13366f4d93\tPset_DamperTypeSmokeDamper.ControlType[Type]\tTEXT\t\t121\t1\tIfcLabel\t1\n#\nGROUP\t122\tPset_DesignPoint\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t077898df-2c96-42c7-beef-432c66e81055\tPset_DesignPoint.IsDesignPoint[Type]\tYESNO\t\t122\t1\tIfcBoolean\t1\n#\nGROUP\t123\tPset_DiscreteAccessoryAnchorBolt\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc7002279-2123-4604-9086-fecebbf54357\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltDiameter[Type]\tLENGTH\t\t123\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5c34f38b-aa31-4d67-b87f-9ca9b15351ef\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltLength[Type]\tLENGTH\t\t123\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t85f61c4c-2be5-4fa0-a029-a832bf01d8be\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltProtrusionLength[Type]\tLENGTH\t\t123\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb448305d-577d-40b0-bf34-c104850e4e4d\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltThreadLength[Type]\tLENGTH\t\t123\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t124\tPset_DiscreteAccessoryColumnShoe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0aebbdab-77bf-4dbb-bd7f-ca10096b2f2b\tPset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateDepth[Type]\tLENGTH\t\t124\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t92eee213-953b-49a6-848c-7255bcdab023\tPset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateThickness[Type]\tLENGTH\t\t124\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3975044e-9e4e-4b51-8321-35c0f2171b74\tPset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateWidth[Type]\tLENGTH\t\t124\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t91a97ec7-0dd2-4af5-ad90-80716b46ffb1\tPset_DiscreteAccessoryColumnShoe.ColumnShoeCasingDepth[Type]\tLENGTH\t\t124\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td266b84c-0da3-479f-b2e2-8f66ba457aec\tPset_DiscreteAccessoryColumnShoe.ColumnShoeCasingHeight[Type]\tLENGTH\t\t124\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcd959c31-9111-4636-9aac-004c1c3aec21\tPset_DiscreteAccessoryColumnShoe.ColumnShoeCasingWidth[Type]\tLENGTH\t\t124\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t125\tPset_DiscreteAccessoryCornerFixingPlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1258fcb9-fc48-46ad-83f6-c55b3ce52cba\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneX[Type]\tLENGTH\t\t125\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te540f6f9-aa54-4903-8830-b6fa77bdc79e\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneZ[Type]\tLENGTH\t\t125\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t549bfe9c-32c1-422e-b475-11b43e66eda9\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateLength[Type]\tLENGTH\t\t125\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb6ce0c8b-1d6d-44bc-94f1-39056d7dbfae\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateThickness[Type]\tLENGTH\t\t125\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t126\tPset_DiscreteAccessoryDiagonalTrussConnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3fb7472c-489c-4142-b832-8fd1b6d4dbcb\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussBaseBarDiameter[Type]\tLENGTH\t\t126\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc19bb52c-37d3-49ba-8f64-767d5d05501c\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarDiameter[Type]\tLENGTH\t\t126\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5d56d3b5-093f-41ea-a395-f35e5b79a872\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarSpacing[Type]\tLENGTH\t\t126\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2879f131-7556-444d-910b-ff886e53616d\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussHeight[Type]\tLENGTH\t\t126\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t409b40be-a35f-4eca-a75a-8319bbcd18ae\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussLength[Type]\tLENGTH\t\t126\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t07f35153-add9-4c36-8a49-42e08a563269\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussSecondaryBarDiameter[Type]\tLENGTH\t\t126\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t127\tPset_DiscreteAccessoryEdgeFixingPlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td14c0077-2937-4411-8f9a-bcf48988a6c0\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneX[Type]\tLENGTH\t\t127\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6b8080c2-0175-4cef-9cb9-9a87310c342e\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneZ[Type]\tLENGTH\t\t127\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4b5a2427-c3ae-4c8c-a35a-49cbea5e40d7\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateLength[Type]\tLENGTH\t\t127\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7f65d3b2-5bc2-400d-8186-234d70ec9499\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateThickness[Type]\tLENGTH\t\t127\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t128\tPset_DiscreteAccessoryFixingSocket\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tde7d547a-a227-4ec0-a06d-742592ae6a63\tPset_DiscreteAccessoryFixingSocket.FixingSocketHeight[Type]\tLENGTH\t\t128\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t54afac7d-ab95-4089-9697-014ec1b13406\tPset_DiscreteAccessoryFixingSocket.FixingSocketThreadDiameter[Type]\tLENGTH\t\t128\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t14fdb4b3-7bdd-4ed3-9fce-ab9e25904334\tPset_DiscreteAccessoryFixingSocket.FixingSocketThreadLength[Type]\tLENGTH\t\t128\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8dc25762-370f-4462-8f84-653a2fcdc88c\tPset_DiscreteAccessoryFixingSocket.FixingSocketTypeReference[Type]\tMULTILINETEXT\t\t128\t1\tIfcExternalReference\t1\n#\nGROUP\t129\tPset_DiscreteAccessoryLadderTrussConnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td37fc4d3-fa62-4407-b790-b4ed74779e22\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussBaseBarDiameter[Type]\tLENGTH\t\t129\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7457085f-043a-4844-8491-fcd6498300db\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarDiameter[Type]\tLENGTH\t\t129\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tce6fd7f7-4a7b-4fd8-988b-9865fc54e98e\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarSpacing[Type]\tLENGTH\t\t129\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbaa09d83-0ccb-436c-9345-f0af2b3343d7\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussHeight[Type]\tLENGTH\t\t129\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc6fa26e5-1a5d-4f05-9491-c97c1645bf26\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussLength[Type]\tLENGTH\t\t129\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tda7e0ceb-b2cb-48a2-90ca-c867bb9a73e2\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussSecondaryBarDiameter[Type]\tLENGTH\t\t129\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t130\tPset_DiscreteAccessoryStandardFixingPlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4e359bf4-813d-4711-a69f-c7f44105629c\tPset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateDepth[Type]\tLENGTH\t\t130\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta5944b7d-390e-4f4e-99ae-2c180e746cd7\tPset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateThickness[Type]\tLENGTH\t\t130\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t742353a6-0eca-40c7-890e-b76aa4593d6d\tPset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateWidth[Type]\tLENGTH\t\t130\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t131\tPset_DiscreteAccessoryWireLoop\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t29e76998-1630-41e7-ba8f-103fdda8cef6\tPset_DiscreteAccessoryWireLoop.WireDiameter[Type]\tLENGTH\t\t131\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t885c6bab-d4ca-4367-ad58-dff9b7f9ad4c\tPset_DiscreteAccessoryWireLoop.WireEmbeddingLength[Type]\tLENGTH\t\t131\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf1f4e36b-f70f-43b0-bfc2-2a4ba541d8dd\tPset_DiscreteAccessoryWireLoop.WireLoopBasePlateLength[Type]\tLENGTH\t\t131\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfdc96e98-9ddf-4b76-b81a-65e7dfa036d8\tPset_DiscreteAccessoryWireLoop.WireLoopBasePlateThickness[Type]\tLENGTH\t\t131\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5c6d63c1-5293-492d-b404-e4458bec2724\tPset_DiscreteAccessoryWireLoop.WireLoopBasePlateWidth[Type]\tLENGTH\t\t131\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tccd009f2-142c-4909-b63e-8d382ed9dd07\tPset_DiscreteAccessoryWireLoop.WireLoopLength[Type]\tLENGTH\t\t131\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t132\tPset_DistributionChamberElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9148c3d0-f1e1-4d72-8ed2-01b02a87c4cd\tPset_DistributionChamberElementCommon.Reference[Type]\tTEXT\t\t132\t1\tIfcIdentifier\t1\nPARAM\tcc0fb29c-1b83-4852-84fe-8763981d39d5\tPset_DistributionChamberElementCommon.Status[Type]\tTEXT\t\t132\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t133\tPset_DistributionChamberElementTypeFormedDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb0d98606-7dd1-429a-b39f-16104329a3aa\tPset_DistributionChamberElementTypeFormedDuct.AccessCoverLoadRating[Type]\tTEXT\t\t133\t1\tIfcText\t1\nPARAM\t99bcc75a-2d80-47d6-ab30-5928eef89405\tPset_DistributionChamberElementTypeFormedDuct.AccessCoverMaterial[Type]\tMULTILINETEXT\t\t133\t1\tIfcMaterial\t1\nPARAM\t83549367-b305-4d9d-bcb1-ac69b7a33c26\tPset_DistributionChamberElementTypeFormedDuct.BaseMaterial[Type]\tMULTILINETEXT\t\t133\t1\tIfcMaterial\t1\nPARAM\tb01853c3-449c-472b-878d-d3f648b5dbdd\tPset_DistributionChamberElementTypeFormedDuct.BaseThickness[Type]\tLENGTH\t\t133\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb77fb473-2963-4490-9928-7d975775efd2\tPset_DistributionChamberElementTypeFormedDuct.ClearDepth[Type]\tLENGTH\t\t133\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t48c8da5a-6d42-4332-b428-5c0eb82f8f36\tPset_DistributionChamberElementTypeFormedDuct.ClearWidth[Type]\tLENGTH\t\t133\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9406dbf1-4bc7-4096-b819-8e294acb2c89\tPset_DistributionChamberElementTypeFormedDuct.FillMaterial[Type]\tMULTILINETEXT\t\t133\t1\tIfcMaterial\t1\nPARAM\tfde71a93-a6ba-41ec-85ba-aedcd692adfe\tPset_DistributionChamberElementTypeFormedDuct.WallMaterial[Type]\tMULTILINETEXT\t\t133\t1\tIfcMaterial\t1\nPARAM\t7ec24108-734d-4557-9f6c-9e573ea3cbdb\tPset_DistributionChamberElementTypeFormedDuct.WallThickness[Type]\tLENGTH\t\t133\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t134\tPset_DistributionChamberElementTypeInspectionChamber\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb533b8b2-a3e1-47d5-91a1-827e11d1727e\tPset_DistributionChamberElementTypeInspectionChamber.AccessCoverLoadRating[Type]\tTEXT\t\t134\t1\tIfcText\t1\nPARAM\te7af183a-fa13-4c63-84ea-0f596061b2c1\tPset_DistributionChamberElementTypeInspectionChamber.AccessCoverMaterial[Type]\tMULTILINETEXT\t\t134\t1\tIfcMaterialDefinition\t1\nPARAM\ta24b7fa1-e447-404c-85de-78ada7e9ad49\tPset_DistributionChamberElementTypeInspectionChamber.AccessLengthOrRadius[Type]\tLENGTH\t\t134\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3ec70e2b-fe83-4d32-8e48-8cf3828cb813\tPset_DistributionChamberElementTypeInspectionChamber.AccessWidth[Type]\tLENGTH\t\t134\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta419a033-3265-42ae-98db-d2a740594bba\tPset_DistributionChamberElementTypeInspectionChamber.BaseMaterial[Type]\tMULTILINETEXT\t\t134\t1\tIfcMaterialDefinition\t1\nPARAM\t55e26eaf-4fd4-4d88-ab64-49c832affef5\tPset_DistributionChamberElementTypeInspectionChamber.BaseThickness[Type]\tLENGTH\t\t134\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8a9baf98-711d-4e4d-ab4e-ca5027e067f9\tPset_DistributionChamberElementTypeInspectionChamber.ChamberLengthOrRadius[Type]\tLENGTH\t\t134\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb56952e6-b030-4ab1-acb2-e0ea871454e7\tPset_DistributionChamberElementTypeInspectionChamber.ChamberWidth[Type]\tLENGTH\t\t134\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t84f9c748-b131-4852-a71d-18c7ee7533c2\tPset_DistributionChamberElementTypeInspectionChamber.InvertLevel[Type]\tLENGTH\t\t134\t1\tIfcLengthMeasure\t1\nPARAM\te9b7ee54-bd19-4099-a0e6-e2351707f810\tPset_DistributionChamberElementTypeInspectionChamber.SoffitLevel[Type]\tLENGTH\t\t134\t1\tIfcLengthMeasure\t1\nPARAM\t5ff6395d-86ff-4f82-9b11-b3813684bb57\tPset_DistributionChamberElementTypeInspectionChamber.WallMaterial[Type]\tMULTILINETEXT\t\t134\t1\tIfcMaterialDefinition\t1\nPARAM\td24d6e2c-7904-41df-adf9-60b692a54453\tPset_DistributionChamberElementTypeInspectionChamber.WallThickness[Type]\tLENGTH\t\t134\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9551e8dd-5dc4-49c0-88e7-43be39bca685\tPset_DistributionChamberElementTypeInspectionChamber.WithBackdrop[Type]\tYESNO\t\t134\t1\tIfcBoolean\t1\n#\nGROUP\t135\tPset_DistributionChamberElementTypeInspectionPit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t62354e78-f090-424a-b8c4-7a4b1cc92228\tPset_DistributionChamberElementTypeInspectionPit.Depth[Type]\tLENGTH\t\t135\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1cec024d-f759-4c73-aecb-5f3a9e4e28b7\tPset_DistributionChamberElementTypeInspectionPit.Length[Type]\tLENGTH\t\t135\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdbaccebf-a9dc-41af-9109-d42fa4d9700c\tPset_DistributionChamberElementTypeInspectionPit.Width[Type]\tLENGTH\t\t135\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t136\tPset_DistributionChamberElementTypeManhole\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t10d284f7-5e61-415b-9845-53d02edca75e\tPset_DistributionChamberElementTypeManhole.AccessCoverLoadRating[Type]\tTEXT\t\t136\t1\tIfcText\t1\nPARAM\t4d93d457-73b4-4c9e-b1ba-db22f1fcfde6\tPset_DistributionChamberElementTypeManhole.AccessCoverMaterial[Type]\tMULTILINETEXT\t\t136\t1\tIfcMaterialDefinition\t1\nPARAM\t170d8776-3855-4631-ad75-1dc123404d1c\tPset_DistributionChamberElementTypeManhole.AccessLengthOrRadius[Type]\tLENGTH\t\t136\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0db792af-1d04-4b10-89ef-afdbbe12bfec\tPset_DistributionChamberElementTypeManhole.AccessWidth[Type]\tLENGTH\t\t136\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t24d4319e-70f7-4bd9-a7df-06aa6b053fa2\tPset_DistributionChamberElementTypeManhole.BaseMaterial[Type]\tMULTILINETEXT\t\t136\t1\tIfcMaterialDefinition\t1\nPARAM\t7068d4c1-0d0a-4932-9008-bd7a501cda90\tPset_DistributionChamberElementTypeManhole.BaseThickness[Type]\tLENGTH\t\t136\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8f54d3b6-0fb9-4c8f-8eac-38a04cd2666c\tPset_DistributionChamberElementTypeManhole.HasSteps[Type]\tYESNO\t\t136\t1\tIfcBoolean\t1\nPARAM\t242c650d-ebb2-41bc-829d-fccf259847ea\tPset_DistributionChamberElementTypeManhole.InvertLevel[Type]\tLENGTH\t\t136\t1\tIfcLengthMeasure\t1\nPARAM\tf566044f-2b6a-492a-b119-1956a0628e60\tPset_DistributionChamberElementTypeManhole.IsShallow[Type]\tYESNO\t\t136\t1\tIfcBoolean\t1\nPARAM\t02edc0ed-6457-4803-b2ad-d8cdd37a416b\tPset_DistributionChamberElementTypeManhole.SoffitLevel[Type]\tLENGTH\t\t136\t1\tIfcLengthMeasure\t1\nPARAM\t651f0061-5e43-43fe-8f91-d328d6f20587\tPset_DistributionChamberElementTypeManhole.WallMaterial[Type]\tMULTILINETEXT\t\t136\t1\tIfcMaterialDefinition\t1\nPARAM\t3e25578c-4b86-459c-8997-6e21f8058bd3\tPset_DistributionChamberElementTypeManhole.WallThickness[Type]\tLENGTH\t\t136\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9e7ee5d4-31f4-4e85-befe-822d25179d93\tPset_DistributionChamberElementTypeManhole.WithBackdrop[Type]\tYESNO\t\t136\t1\tIfcBoolean\t1\n#\nGROUP\t137\tPset_DistributionChamberElementTypeMeterChamber\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6ae860db-c1a0-4ad4-b798-3a3eb65a0816\tPset_DistributionChamberElementTypeMeterChamber.AccessCoverMaterial[Type]\tMULTILINETEXT\t\t137\t1\tIfcMaterialDefinition\t1\nPARAM\t9b0b1cb8-283f-4fa5-b76e-3f89965f99af\tPset_DistributionChamberElementTypeMeterChamber.BaseMaterial[Type]\tMULTILINETEXT\t\t137\t1\tIfcMaterialDefinition\t1\nPARAM\tb69c06ee-24c6-4bd3-a458-c342e205da0d\tPset_DistributionChamberElementTypeMeterChamber.BaseThickness[Type]\tLENGTH\t\t137\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta949a17d-701e-4d68-bf0c-da2fa721017d\tPset_DistributionChamberElementTypeMeterChamber.ChamberLengthOrRadius[Type]\tLENGTH\t\t137\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6249991a-d3fe-40c7-b818-c0097dede054\tPset_DistributionChamberElementTypeMeterChamber.ChamberWidth[Type]\tLENGTH\t\t137\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tab71c12b-c98b-445c-8174-24067b76d731\tPset_DistributionChamberElementTypeMeterChamber.WallMaterial[Type]\tMULTILINETEXT\t\t137\t1\tIfcMaterialDefinition\t1\nPARAM\tf11022f8-5c78-471e-991b-f9bda4109d75\tPset_DistributionChamberElementTypeMeterChamber.WallThickness[Type]\tLENGTH\t\t137\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t138\tPset_DistributionChamberElementTypeSump\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a2a9e70-2c99-44a7-bf86-0821e418d778\tPset_DistributionChamberElementTypeSump.InvertLevel[Type]\tLENGTH\t\t138\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t424cc8ad-301a-4b25-939f-e087baff3301\tPset_DistributionChamberElementTypeSump.Length[Type]\tLENGTH\t\t138\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3447bdb0-2f59-41da-aa0b-a9dfad6a9008\tPset_DistributionChamberElementTypeSump.Width[Type]\tLENGTH\t\t138\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t139\tPset_DistributionChamberElementTypeTrench\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t857d0e00-bda7-4d55-89ef-7d9006f54158\tPset_DistributionChamberElementTypeTrench.Depth[Type]\tLENGTH\t\t139\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t866b954b-d05f-4ef7-b0af-2d3075dfe1e5\tPset_DistributionChamberElementTypeTrench.InvertLevel[Type]\tLENGTH\t\t139\t1\tIfcLengthMeasure\t1\nPARAM\tb5b3fe4e-f29a-4d10-bec3-33f20997756c\tPset_DistributionChamberElementTypeTrench.Width[Type]\tLENGTH\t\t139\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t140\tPset_DistributionChamberElementTypeValveChamber\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc3539453-466b-4572-b703-214e2b8a7e56\tPset_DistributionChamberElementTypeValveChamber.AccessCoverMaterial[Type]\tMULTILINETEXT\t\t140\t1\tIfcMaterialDefinition\t1\nPARAM\tc91fa953-d072-47f8-9a52-b9821632f1fc\tPset_DistributionChamberElementTypeValveChamber.BaseMaterial[Type]\tMULTILINETEXT\t\t140\t1\tIfcMaterialDefinition\t1\nPARAM\t5da08cfe-3e7b-4387-9cbc-56c9cc3f6ca7\tPset_DistributionChamberElementTypeValveChamber.BaseThickness[Type]\tLENGTH\t\t140\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9207e0b0-45ec-479f-a73c-214fdd482e3d\tPset_DistributionChamberElementTypeValveChamber.ChamberLengthOrRadius[Type]\tLENGTH\t\t140\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc88cbade-d3ff-4efb-b0c4-e3474542d7a6\tPset_DistributionChamberElementTypeValveChamber.ChamberWidth[Type]\tLENGTH\t\t140\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8ecc6bba-2abe-4d2e-9d45-c40af0b2df2b\tPset_DistributionChamberElementTypeValveChamber.WallMaterial[Type]\tMULTILINETEXT\t\t140\t1\tIfcMaterialDefinition\t1\nPARAM\t7dc6e615-b3df-48e1-966d-250ac43542eb\tPset_DistributionChamberElementTypeValveChamber.WallThickness[Type]\tLENGTH\t\t140\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t141\tPset_DistributionFlowElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t57013d45-6177-4726-a03d-bc1d5f0f4dde\tPset_DistributionFlowElementCommon.Reference[Type]\tTEXT\t\t141\t1\tIfcIdentifier\t1\n#\nGROUP\t142\tPset_DistributionPortCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0fb5d1b3-8009-4300-ab87-aeca3a2a380c\tPset_DistributionPortCommon.ColorCode[Type]\tTEXT\t\t142\t1\tIfcLabel\t1\nPARAM\t08c219ca-a8ee-46d1-82b1-a6567f666121\tPset_DistributionPortCommon.PortNumber[Type]\tINTEGER\t\t142\t1\tIfcInteger\t1\n#\nGROUP\t143\tPset_DistributionPortDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td3a37456-81b8-4d22-ac49-4fbbd99bf7d1\tPset_DistributionPortDuct.ConnectionType[Type]\tTEXT\t\t143\t1\tPEnum_DuctConnectionType\t1\nPARAM\t6039502e-a7ae-46d3-b294-21e85e295cc4\tPset_DistributionPortDuct.PortNumber[Type]\tINTEGER\t\t143\t1\tIfcInteger\t1\n#\nGROUP\t144\tPset_DistributionPortPHistoryCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf0bac08a-24fa-418a-922f-89b2fea4ae87\tPset_DistributionPortPHistoryCable.ApparentPower[Type]\tMULTILINETEXT\t\t144\t1\tIfcTimeSeries\t1\nPARAM\tcfac59db-0df3-4fc7-a2fb-e2ae36047243\tPset_DistributionPortPHistoryCable.Current[Type]\tMULTILINETEXT\t\t144\t1\tIfcTimeSeries\t1\nPARAM\t3a3842e5-edfb-4143-91df-102f7add699a\tPset_DistributionPortPHistoryCable.DataReceived[Type]\tMULTILINETEXT\t\t144\t1\tIfcTimeSeries\t1\nPARAM\t44b0938f-534a-476b-a406-88dd128deb92\tPset_DistributionPortPHistoryCable.DataTransmitted[Type]\tMULTILINETEXT\t\t144\t1\tIfcTimeSeries\t1\nPARAM\tb0ebbcac-1952-492f-84c2-226367cb9aa5\tPset_DistributionPortPHistoryCable.PowerFactor[Type]\tMULTILINETEXT\t\t144\t1\tIfcTimeSeries\t1\nPARAM\t55631007-91a8-4edd-941d-dd9e36ef893e\tPset_DistributionPortPHistoryCable.ReactivePower[Type]\tMULTILINETEXT\t\t144\t1\tIfcTimeSeries\t1\nPARAM\te928309d-546a-455a-9e02-0453706ccac5\tPset_DistributionPortPHistoryCable.RealPower[Type]\tMULTILINETEXT\t\t144\t1\tIfcTimeSeries\t1\nPARAM\t4833d673-8c3f-4433-afd3-a54c01c4bd9c\tPset_DistributionPortPHistoryCable.Voltage[Type]\tMULTILINETEXT\t\t144\t1\tIfcTimeSeries\t1\n#\nGROUP\t145\tPset_DistributionPortPHistoryDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbe90bd2d-108e-466e-92a0-a7cc962b9340\tPset_DistributionPortPHistoryDuct.FlowCondition[Type]\tMULTILINETEXT\t\t145\t1\tIfcTimeSeries\t1\nPARAM\tcee8b8d0-9e2f-4ab4-bc4e-609bc3717a96\tPset_DistributionPortPHistoryDuct.MassFlowRate[Type]\tMULTILINETEXT\t\t145\t1\tIfcTimeSeries\t1\nPARAM\t28b65c01-d098-4403-8a1c-97cd63fd0f71\tPset_DistributionPortPHistoryDuct.Pressure[Type]\tMULTILINETEXT\t\t145\t1\tIfcTimeSeries\t1\nPARAM\t65a574d8-a5bb-484e-89e6-ed3d573269d0\tPset_DistributionPortPHistoryDuct.Temperature[Type]\tMULTILINETEXT\t\t145\t1\tIfcTimeSeries\t1\nPARAM\t93b06102-3541-4b65-8da6-335c500778a3\tPset_DistributionPortPHistoryDuct.Velocity[Type]\tMULTILINETEXT\t\t145\t1\tIfcTimeSeries\t1\nPARAM\te1f37d89-2b0e-4ec0-ad99-2be710d02b14\tPset_DistributionPortPHistoryDuct.VolumetricFlowRate[Type]\tMULTILINETEXT\t\t145\t1\tIfcTimeSeries\t1\nPARAM\te47963a0-9f72-49af-96e6-74baae23372a\tPset_DistributionPortPHistoryDuct.WetBulbTemperature[Type]\tMULTILINETEXT\t\t145\t1\tIfcTimeSeries\t1\n#\nGROUP\t146\tPset_DistributionPortPHistoryPipe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5cefa330-874c-41e1-a598-f2850f3e0b6f\tPset_DistributionPortPHistoryPipe.Flowrate[Type]\tMULTILINETEXT\t\t146\t1\tIfcTimeSeries\t1\nPARAM\tee9479eb-c314-4aea-8b7c-73f57e80e385\tPset_DistributionPortPHistoryPipe.Pressure[Type]\tMULTILINETEXT\t\t146\t1\tIfcTimeSeries\t1\nPARAM\t89f0e25c-364d-45b8-b8b0-ae24ffe80ad3\tPset_DistributionPortPHistoryPipe.Temperature[Type]\tMULTILINETEXT\t\t146\t1\tIfcTimeSeries\t1\n#\nGROUP\t147\tPset_DistributionPortPipe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te78fecda-1389-4584-86b5-154d7ba951dc\tPset_DistributionPortPipe.ConnectionType[Type]\tTEXT\t\t147\t1\tPEnum_PipeEndStyleTreatment\t1\nPARAM\tfaf60ebb-0172-4ace-a754-bf94be5de6c8\tPset_DistributionPortPipe.EndStyleTreatment[Type]\tTEXT\t\t147\t1\tPEnum_PipeEndStyleTreatment\t1\nPARAM\td9c6fc08-e5a1-41e7-8c0e-47f126e03127\tPset_DistributionPortPipe.PortNumber[Type]\tINTEGER\t\t147\t1\tIfcInteger\t1\n#\nGROUP\t148\tPset_DistributionPortTypeCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7f5a8ec4-00c8-4399-a082-b17a7d0bff12\tPset_DistributionPortTypeCable.ConductorFunction[Type]\tTEXT\t\t148\t1\tPEnum_ConductorFunction\t1\nPARAM\t39fd67c1-bc73-4097-a622-93697c4bbaa9\tPset_DistributionPortTypeCable.ConnectionGender[Type]\tTEXT\t\t148\t1\tPEnum_ConnectionGender\t1\nPARAM\t396f13a9-9cfb-475d-915d-f931e5d7ad77\tPset_DistributionPortTypeCable.ConnectionSubtype[Type]\tTEXT\t\t148\t1\tIfcLabel\t1\nPARAM\t33479869-1283-4131-bc49-d562c5ce2ef9\tPset_DistributionPortTypeCable.ConnectionType[Type]\tTEXT\t\t148\t1\tPEnum_DistributionPortElectricalType\t1\nPARAM\te3fe803c-a371-4e2e-838a-3202240acbba\tPset_DistributionPortTypeCable.Current[Type]\tMULTILINETEXT\t\t148\t1\tPropertyBoundedValue\t1\nPARAM\tea33278d-f60b-43e3-9154-132493740b7a\tPset_DistributionPortTypeCable.CurrentContent3rdHarmonic[Type]\tNUMBER\t\t148\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t2c81ce5a-8442-4156-873a-80fb3a9151c7\tPset_DistributionPortTypeCable.Power[Type]\tMULTILINETEXT\t\t148\t1\tPropertyBoundedValue\t1\nPARAM\td63099bd-6c30-48d9-a8c0-5ff03c725f9b\tPset_DistributionPortTypeCable.Protocols[Type]\tMULTILINETEXT\t\t148\t1\tPropertyListValue\t1\nPARAM\t1861522f-30b5-468d-8a69-02e3f4e9342c\tPset_DistributionPortTypeCable.Voltage[Type]\tMULTILINETEXT\t\t148\t1\tPropertyBoundedValue\t1\n#\nGROUP\t149\tPset_DistributionPortTypeDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9c0ef7ac-4ade-4baa-a08c-fe08b2556309\tPset_DistributionPortTypeDuct.ConnectionSubType[Type]\tTEXT\t\t149\t1\tIfcLabel\t1\nPARAM\t20f8b2d2-a41f-49b1-a023-9a725c45403c\tPset_DistributionPortTypeDuct.ConnectionType[Type]\tTEXT\t\t149\t1\tPEnum_DuctConnectionType\t1\nPARAM\t53fd2786-cf81-46cb-9be3-2126e2310fe6\tPset_DistributionPortTypeDuct.DryBulbTemperature[Type]\tMULTILINETEXT\t\t149\t1\tPropertyBoundedValue\t1\nPARAM\t3adbc835-1671-4bb5-bdce-33a40045f934\tPset_DistributionPortTypeDuct.NominalHeight[Type]\tLENGTH\t\t149\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2f08b9bc-af5c-4138-b80a-f3ca52fa9658\tPset_DistributionPortTypeDuct.NominalThickness[Type]\tLENGTH\t\t149\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t545ee1a8-6f4a-474c-a493-ebaa14ece977\tPset_DistributionPortTypeDuct.NominalWidth[Type]\tLENGTH\t\t149\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5e803a97-37d5-4c51-b46a-47c8389fc5d1\tPset_DistributionPortTypeDuct.Pressure[Type]\tMULTILINETEXT\t\t149\t1\tPropertyBoundedValue\t1\nPARAM\t369c06fb-6a3b-41d4-8cff-3c694a2c403f\tPset_DistributionPortTypeDuct.Velocity[Type]\tMULTILINETEXT\t\t149\t1\tPropertyBoundedValue\t1\nPARAM\t56b2e6fc-bdaf-411a-a65b-22d0e2dac283\tPset_DistributionPortTypeDuct.VolumetricFlowRate[Type]\tMULTILINETEXT\t\t149\t1\tPropertyBoundedValue\t1\nPARAM\t931b348a-45fb-4e3a-8fb9-588bfc7d8e52\tPset_DistributionPortTypeDuct.WetBulbTemperature[Type]\tMULTILINETEXT\t\t149\t1\tPropertyBoundedValue\t1\n#\nGROUP\t150\tPset_DistributionPortTypePipe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tef756caf-c299-49ee-9117-a1efc7e0c222\tPset_DistributionPortTypePipe.ConnectionSubType[Type]\tTEXT\t\t150\t1\tIfcLabel\t1\nPARAM\t6b056e4f-8189-46e4-bad5-afe778777e7f\tPset_DistributionPortTypePipe.ConnectionType[Type]\tTEXT\t\t150\t1\tPEnum_PipeEndStyleTreatment\t1\nPARAM\t075ef00f-cdfb-4f52-a888-6b7426f9c50c\tPset_DistributionPortTypePipe.FlowCondition[Type]\tMULTILINETEXT\t\t150\t1\tPropertyBoundedValue\t1\nPARAM\tf28386d6-5913-45f5-af79-623ed16030c2\tPset_DistributionPortTypePipe.InnerDiameter[Type]\tLENGTH\t\t150\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t25682114-5290-4d5a-a2dc-4bcdfcaa9841\tPset_DistributionPortTypePipe.MassFlowRate[Type]\tMULTILINETEXT\t\t150\t1\tPropertyBoundedValue\t1\nPARAM\td1aa4ae2-bd9c-4293-b6cb-e9073fb8e269\tPset_DistributionPortTypePipe.NominalDiameter[Type]\tLENGTH\t\t150\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta8e221f8-8965-4cb2-95b1-38f0e52cb805\tPset_DistributionPortTypePipe.OuterDiameter[Type]\tLENGTH\t\t150\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t70fcb981-199a-4971-99d1-9b41edd7f364\tPset_DistributionPortTypePipe.Pressure[Type]\tMULTILINETEXT\t\t150\t1\tPropertyBoundedValue\t1\nPARAM\t36694a66-8529-404a-b7c2-62143d3c082c\tPset_DistributionPortTypePipe.Temperature[Type]\tMULTILINETEXT\t\t150\t1\tPropertyBoundedValue\t1\nPARAM\t23086cd6-61d3-45a6-a1fb-63ad97a9e91b\tPset_DistributionPortTypePipe.Velocity[Type]\tMULTILINETEXT\t\t150\t1\tPropertyBoundedValue\t1\nPARAM\te767f60f-5758-46b5-8c00-5cb9d3feec7c\tPset_DistributionPortTypePipe.VolumetricFlowRate[Type]\tMULTILINETEXT\t\t150\t1\tPropertyBoundedValue\t1\n#\nGROUP\t151\tPset_DistributionSystemCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta5df59f2-6b5c-4250-894a-76428ca64b68\tPset_DistributionSystemCommon.Reference[Type]\tTEXT\t\t151\t1\tIfcIdentifier\t1\n#\nGROUP\t152\tPset_DistributionSystemTypeElectrical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t066c1e77-8ec0-4d00-94a9-2f00ab621689\tPset_DistributionSystemTypeElectrical.Diversity[Type]\tNUMBER\t\t152\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6eeaa5b8-42e4-4dbe-b965-29b6cbf35be6\tPset_DistributionSystemTypeElectrical.ElectricalSystemCategory[Type]\tTEXT\t\t152\t1\tPEnum_DistributionSystemElectricalCategory\t1\nPARAM\ta3946934-fdca-4644-917a-28250bd1a3c3\tPset_DistributionSystemTypeElectrical.ElectricalSystemType[Type]\tTEXT\t\t152\t1\tPEnum_DistributionSystemElectricalType\t1\nPARAM\t52fc5d10-4466-4c6b-8b75-7c470a55438c\tPset_DistributionSystemTypeElectrical.MaximumAllowedVoltageDrop[Type]\tNUMBER\t\t152\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t61012002-c898-46ca-847d-1fed8b277e1e\tPset_DistributionSystemTypeElectrical.NetImpedance[Type]\tNUMBER\t\t152\t1\tIfcElectricResistanceMeasure\t1\nPARAM\tc64ca073-5787-4608-896f-f1cb866a711b\tPset_DistributionSystemTypeElectrical.NumberOfLiveConductors[Type]\tINTEGER\t\t152\t1\tIfcInteger\t1\n#\nGROUP\t153\tPset_DistributionSystemTypeVentilation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2e96fd82-0587-4325-a6cc-d1a11e0015ee\tPset_DistributionSystemTypeVentilation.AspectRatio[Type]\tNUMBER\t\t153\t1\tIfcReal\t1\nPARAM\t331cea9f-8f1a-4837-be14-f5b2daf93974\tPset_DistributionSystemTypeVentilation.DesignName[Type]\tTEXT\t\t153\t1\tIfcLabel\t1\nPARAM\t79b5fb0c-5581-41a2-87d2-c16588f6cc76\tPset_DistributionSystemTypeVentilation.DuctSealant[Type]\tMULTILINETEXT\t\t153\t1\tIfcMaterialDefinition\t1\nPARAM\t0a8f9307-4c9a-4a74-bf9d-8a0b69f4fdc3\tPset_DistributionSystemTypeVentilation.DuctSizingMethod[Type]\tTEXT\t\t153\t1\tPEnum_DuctSizingMethod\t1\nPARAM\tbe55af03-a24f-442a-98e8-a48fcbd23b7d\tPset_DistributionSystemTypeVentilation.FrictionLoss[Type]\tNUMBER\t\t153\t1\tIfcReal\t1\nPARAM\t91b45e1d-0158-4c40-98ac-237d2523ac03\tPset_DistributionSystemTypeVentilation.LeakageClass[Type]\tNUMBER\t\t153\t1\tIfcPressureMeasure\t1\nPARAM\t95d5a2bb-673c-42d7-8061-36a0f0ef1462\tPset_DistributionSystemTypeVentilation.MaximumVelocity[Type]\tNUMBER\t\t153\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t62c5a9a3-07c0-4597-bbc2-990121a93faf\tPset_DistributionSystemTypeVentilation.MinimumHeight[Type]\tLENGTH\t\t153\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t20fecf23-5139-4960-966d-8d815dc89385\tPset_DistributionSystemTypeVentilation.MinimumWidth[Type]\tLENGTH\t\t153\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4d0be929-35fa-4805-9138-d6aed3a03e83\tPset_DistributionSystemTypeVentilation.PressureClass[Type]\tNUMBER\t\t153\t1\tIfcPressureMeasure\t1\nPARAM\t37084618-6b98-45b3-85a4-8e999d8b4c30\tPset_DistributionSystemTypeVentilation.ScrapFactor[Type]\tNUMBER\t\t153\t1\tIfcReal\t1\n#\nGROUP\t154\tPset_DoorCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9c6ec881-67d5-450c-aeed-a0a631cdec7d\tPset_DoorCommon.AcousticRating[Type]\tTEXT\t\t154\t1\tIfcLabel\t1\nPARAM\t72102582-da77-44fb-8fef-20402bbf100f\tPset_DoorCommon.DurabilityRating[Type]\tTEXT\t\t154\t1\tIfcLabel\t1\nPARAM\tbf2ef3f8-780c-4e67-b4d2-4cee7c8f9d40\tPset_DoorCommon.FireExit[Type]\tYESNO\t\t154\t1\tIfcBoolean\t1\nPARAM\t77233658-6c3c-4a87-b870-08adb8c0c2d9\tPset_DoorCommon.FireRating[Type]\tTEXT\t\t154\t1\tIfcLabel\t1\nPARAM\t6b26c5ab-f480-4a41-a7d3-3bee223f2119\tPset_DoorCommon.GlazingAreaFraction[Type]\tNUMBER\t\t154\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0f164b4b-3709-4c2c-83c4-1afeccd88a74\tPset_DoorCommon.HandicapAccessible[Type]\tYESNO\t\t154\t1\tIfcBoolean\t1\nPARAM\t9a83003b-653d-49b2-babf-003fbfc65fad\tPset_DoorCommon.HasDrive[Type]\tYESNO\t\t154\t1\tIfcBoolean\t1\nPARAM\t0cde6445-82e5-463e-82f5-64f784aa55b8\tPset_DoorCommon.HygrothermalRating[Type]\tTEXT\t\t154\t1\tIfcLabel\t1\nPARAM\t2274c6a0-71bb-41a3-96d6-228d9dfeb9bc\tPset_DoorCommon.Infiltration[Type]\tNUMBER\t\t154\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\ta12ea2b0-e569-493c-a392-36f16ac0eee3\tPset_DoorCommon.IsExternal[Type]\tYESNO\t\t154\t1\tIfcBoolean\t1\nPARAM\t892200c0-d7a0-405f-9578-9d71d244d28d\tPset_DoorCommon.MechanicalLoadRating[Type]\tTEXT\t\t154\t1\tIfcLabel\t1\nPARAM\tb9ee9b4a-5dd5-4e8c-ae58-50106167fcd1\tPset_DoorCommon.Reference[Type]\tTEXT\t\t154\t1\tIfcIdentifier\t1\nPARAM\taabb272a-ad9a-4d0b-bec9-d3864d964751\tPset_DoorCommon.SecurityRating[Type]\tTEXT\t\t154\t1\tIfcLabel\t1\nPARAM\t73681fca-871d-4d6f-a41f-407c06ee84e2\tPset_DoorCommon.SelfClosing[Type]\tYESNO\t\t154\t1\tIfcBoolean\t1\nPARAM\t235db9e0-ffb9-4a8a-9fa6-7fd644900a12\tPset_DoorCommon.SmokeStop[Type]\tYESNO\t\t154\t1\tIfcBoolean\t1\nPARAM\tb3fa161c-5076-4b98-a6ee-c9cd271cf9c5\tPset_DoorCommon.Status[Type]\tTEXT\t\t154\t1\tPEnum_ElementStatus\t1\nPARAM\te029776f-c69c-486e-a946-f1eb1851e6b2\tPset_DoorCommon.ThermalTransmittance[Type]\tNUMBER\t\t154\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\tb38e2262-4207-4dba-89ab-f47a2bcb3d44\tPset_DoorCommon.WaterTightnessRating[Type]\tTEXT\t\t154\t1\tIfcLabel\t1\nPARAM\t4ce07d1c-93f1-4415-a530-0d137a521b83\tPset_DoorCommon.WindLoadRating[Type]\tTEXT\t\t154\t1\tIfcLabel\t1\n#\nGROUP\t155\tPset_DoorWindowGlazingType\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcac9e658-704b-443d-a360-4c9cb07c85b9\tPset_DoorWindowGlazingType.BeamRadiationTransmittance[Type]\tNUMBER\t\t155\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t1a15c3d5-2c15-4819-a7cd-5c90c2256303\tPset_DoorWindowGlazingType.FillGas[Type]\tTEXT\t\t155\t1\tIfcLabel\t1\nPARAM\t7b3c4bf5-f414-4bd1-968f-a6c99aea7d9c\tPset_DoorWindowGlazingType.GlassColor[Type]\tTEXT\t\t155\t1\tIfcLabel\t1\nPARAM\tb7a01d6f-92c4-4763-9abe-e87d687c7041\tPset_DoorWindowGlazingType.GlassLayers[Type]\tINTEGER\t\t155\t1\tIfcCountMeasure\t1\nPARAM\t06c760b4-4828-4bfb-a4c7-8268089421d5\tPset_DoorWindowGlazingType.GlassThickness1[Type]\tLENGTH\t\t155\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3b844e97-0f6f-4d32-a46d-e8c42ee2498a\tPset_DoorWindowGlazingType.GlassThickness2[Type]\tLENGTH\t\t155\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9aecbdc7-9990-4b34-ba23-778981b830d0\tPset_DoorWindowGlazingType.GlassThickness3[Type]\tLENGTH\t\t155\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t65e7e39d-7147-4cbc-ab8c-f1b3a7145454\tPset_DoorWindowGlazingType.IsCoated[Type]\tYESNO\t\t155\t1\tIfcBoolean\t1\nPARAM\t329bddb9-cf88-40b2-9166-1a908c42e15e\tPset_DoorWindowGlazingType.IsLaminated[Type]\tYESNO\t\t155\t1\tIfcBoolean\t1\nPARAM\t06282f88-fc40-415c-9c7a-67db0ad71ee0\tPset_DoorWindowGlazingType.IsTempered[Type]\tYESNO\t\t155\t1\tIfcBoolean\t1\nPARAM\t08fdad02-298d-4267-bee4-96457cf45a75\tPset_DoorWindowGlazingType.IsWired[Type]\tYESNO\t\t155\t1\tIfcBoolean\t1\nPARAM\t46193292-8594-4bef-8f70-f4035add576e\tPset_DoorWindowGlazingType.Reflectivity[Type]\tNUMBER\t\t155\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t5ad9a3da-fa60-4c7d-b4bf-09d8cf9605fb\tPset_DoorWindowGlazingType.ShadingCoefficient[Type]\tNUMBER\t\t155\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t054fde42-346f-4ffc-a021-0685830ff228\tPset_DoorWindowGlazingType.SolarAbsorption[Type]\tNUMBER\t\t155\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tde74293e-e947-4d55-8faf-d68adfa959cc\tPset_DoorWindowGlazingType.SolarHeatGainTransmittance[Type]\tNUMBER\t\t155\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t4f8f7888-53e0-438e-8460-63b061068541\tPset_DoorWindowGlazingType.SolarReflectance[Type]\tNUMBER\t\t155\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t224f3e17-9789-46be-b0cf-680d9eed75a8\tPset_DoorWindowGlazingType.SolarTransmittance[Type]\tNUMBER\t\t155\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tb6ce38b7-e7fc-4d42-a5ed-0500cbc12a32\tPset_DoorWindowGlazingType.ThermalTransmittanceSummer[Type]\tNUMBER\t\t155\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t78170c44-2b3e-48ce-95c5-3a02ff3bfc1a\tPset_DoorWindowGlazingType.ThermalTransmittanceWinter[Type]\tNUMBER\t\t155\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t0398825b-7eca-4f4e-8c72-37996c2e18a9\tPset_DoorWindowGlazingType.Translucency[Type]\tNUMBER\t\t155\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t48c3a2b3-0187-4678-8757-09e4b5f46222\tPset_DoorWindowGlazingType.VisibleLightReflectance[Type]\tNUMBER\t\t155\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\ta456b04e-7bbf-4b7e-a830-9530c4a4c020\tPset_DoorWindowGlazingType.VisibleLightTransmittance[Type]\tNUMBER\t\t155\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t156\tPset_DoorWindowShadingType\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td666a15d-01c4-490c-9720-06c511968ade\tPset_DoorWindowShadingType.ExternalShadingCoefficient[Type]\tNUMBER\t\t156\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t209015ae-e6a2-486f-8a52-3a2f3258c6cd\tPset_DoorWindowShadingType.InsetShadingCoefficient[Type]\tNUMBER\t\t156\t1\tIfcPositiveRatioMeasure \t1\nPARAM\ta71471cd-8db7-4a34-9091-6a4f71d4529d\tPset_DoorWindowShadingType.InternalShadingCoefficient[Type]\tNUMBER\t\t156\t1\tIfcPositiveRatioMeasure \t1\n#\nGROUP\t157\tPset_DrainageCatchment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ted208dbc-df96-41e5-b844-1381cf41559c\tPset_DrainageCatchment.AreaDrained[Type]\tAREA\t\t157\t1\tIfcAreaMeasure\t1\n#\nGROUP\t158\tPset_DrainageCulvert\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te84f03f9-4d90-454f-b98f-63e155248fcc\tPset_DrainageCulvert.ClearDepth[Type]\tLENGTH\t\t158\t1\tIfcLengthMeasure\t1\nPARAM\tb5d9b6e2-b182-4279-a289-860167d3c8c3\tPset_DrainageCulvert.InternalWidth[Type]\tLENGTH\t\t158\t1\tIfcLengthMeasure\t1\n#\nGROUP\t159\tPset_DrainageOutfall\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48d0cf1c-896b-4968-a003-9e5b00fb6b9d\tPset_DrainageOutfall.InvertLevel[Type]\tLENGTH\t\t159\t1\tIfcLengthMeasure\t1\n#\nGROUP\t160\tPset_DrainageReserve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9b006f31-84e1-4112-bcd2-dd5d71ab98f9\tPset_DrainageReserve.Width[Type]\tLENGTH\t\t160\t1\tIfcLengthMeasure\t1\n#\nGROUP\t161\tPset_Draughting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tde13aae4-0fe5-42b5-bc4a-fb7e86f70e18\tPset_Draughting.Colour.Blue[Type]\tINTEGER\t\t161\t1\tIfcInteger\t1\nPARAM\tac554318-e9ea-4694-b740-5b1c4cdbfd0f\tPset_Draughting.Colour.Green[Type]\tINTEGER\t\t161\t1\tIfcInteger\t1\nPARAM\t614e039e-e0e6-417a-bdf0-d42821f6ccf1\tPset_Draughting.Colour.Red[Type]\tINTEGER\t\t161\t1\tIfcInteger\t1\nPARAM\t0a6675d3-5c90-4987-8704-bb082acfc17a\tPset_Draughting.LayerName[Type]\tTEXT\t\t161\t1\tIfcIdentifier\t1\n#\nGROUP\t162\tPset_DuctConnection\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4177439d-4563-477a-899f-85470befb52e\tPset_DuctConnection.ConnectionType[Type]\tMULTILINETEXT\t\t162\t1\tPropertyListValue\t1\n#\nGROUP\t163\tPset_DuctDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t97f994ce-9a6d-4d48-ae7c-c7677a98d701\tPset_DuctDesignCriteria.AspectRatio[Type]\tNUMBER\t\t163\t1\tIfcReal \t1\nPARAM\t59281beb-945f-4cf3-98ff-b9fa031ed4e4\tPset_DuctDesignCriteria.DesignName[Type]\tTEXT\t\t163\t1\tIfcText\t1\nPARAM\t66b2b938-347c-43b5-bb61-b8bc10a5aa85\tPset_DuctDesignCriteria.DuctSealant[Type]\tMULTILINETEXT\t\t163\t1\tIfcMaterial\t1\nPARAM\t9c847acb-6aef-4953-83e9-1ff489298746\tPset_DuctDesignCriteria.DuctSizingMethod[Type]\tTEXT\t\t163\t1\tPEnum_DuctSizingMethod\t1\nPARAM\t78bc71d2-20bb-4c67-8708-bc3c6e50d59b\tPset_DuctDesignCriteria.FrictionLoss[Type]\tNUMBER\t\t163\t1\tIfcReal\t1\nPARAM\tdcb32230-42e2-4b18-9e6d-89621e594cb1\tPset_DuctDesignCriteria.LeakageClass[Type]\tNUMBER\t\t163\t1\tIfcPressureMeasure\t1\nPARAM\t63b04d74-d840-4bf8-a7fe-c0818bc91c89\tPset_DuctDesignCriteria.MaximumVelocity[Type]\tNUMBER\t\t163\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t043ae98f-7e33-4e96-8e48-8d646fc8da4e\tPset_DuctDesignCriteria.MinimumHeight[Type]\tNUMBER\t\t163\t1\tIfcPositiveLengthMeasure \t1\nPARAM\t16407c22-d572-4537-98fd-2f807b59384c\tPset_DuctDesignCriteria.MinimumWidth[Type]\tNUMBER\t\t163\t1\tIfcPositiveLengthMeasure \t1\nPARAM\t1a24842f-d2c0-42ae-bec9-eec1b142428c\tPset_DuctDesignCriteria.PressureClass[Type]\tNUMBER\t\t163\t1\tIfcPressureMeasure\t1\nPARAM\t43218fba-b064-4aee-b8b6-a6a7984a7031\tPset_DuctDesignCriteria.ScrapFactor[Type]\tNUMBER\t\t163\t1\tIfcReal \t1\n#\nGROUP\t164\tPset_DuctFittingOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t51ade7ee-0c3a-4a58-b3eb-b43034ae5b00\tPset_DuctFittingOccurrence.Color[Type]\tTEXT\t\t164\t1\tIfcLabel\t1\nPARAM\t4b74fe48-7d8f-45f5-9f11-ba6785a75250\tPset_DuctFittingOccurrence.HasLiner[Type]\tYESNO\t\t164\t1\tIfcBoolean\t1\nPARAM\tf9d22678-246e-4407-a435-4de320baf5a8\tPset_DuctFittingOccurrence.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t164\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t165\tPset_DuctFittingPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1de7c5fe-35a5-470c-a52b-13b0339e3282\tPset_DuctFittingPHistory.AirFlowLeakage[Type]\tMULTILINETEXT\t\t165\t1\tIfcTimeSeries\t1\nPARAM\t3281689e-acc6-4448-bf6a-06ad0f72ffae\tPset_DuctFittingPHistory.AtmosphericPressure[Type]\tMULTILINETEXT\t\t165\t1\tIfcTimeSeries\t1\nPARAM\t3bf66679-bb6b-4579-aa70-010f30fa0ac7\tPset_DuctFittingPHistory.LossCoefficient[Type]\tMULTILINETEXT\t\t165\t1\tIfcTimeSeries\t1\n#\nGROUP\t166\tPset_DuctFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0a55b928-19cd-4ffc-805d-cd6f8baa9e11\tPset_DuctFittingTypeCommon.EndStyleTreatment[Type]\tMULTILINETEXT\t\t166\t1\tPropertyListValue\t1\nPARAM\t623a1f68-63e2-4303-a8b4-079aa7f08e30\tPset_DuctFittingTypeCommon.Material[Type]\tMULTILINETEXT\t\t166\t1\tIfcMaterial\t1\nPARAM\tad85c676-22b7-49dc-b143-9fb11c6c7aff\tPset_DuctFittingTypeCommon.MaterialThickness[Type]\tLENGTH\t\t166\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t675dbcaa-e276-458c-93b8-12ab1b02d242\tPset_DuctFittingTypeCommon.NominalDiameterOrWidth[Type]\tMULTILINETEXT\t\t166\t1\tPropertyListValue\t1\nPARAM\t2f4c7ba4-e057-40d2-8d68-58851c6c5ab1\tPset_DuctFittingTypeCommon.NominalHeight[Type]\tMULTILINETEXT\t\t166\t1\tPropertyListValue\t1\nPARAM\t090b1cb2-8e72-4e02-8e9a-8609658aa210\tPset_DuctFittingTypeCommon.PressureClass[Type]\tNUMBER\t\t166\t1\tIfcPressureMeasure\t1\nPARAM\t2ef1ec00-0038-408f-947a-f84aa8321d6f\tPset_DuctFittingTypeCommon.PressureRange[Type]\tMULTILINETEXT\t\t166\t1\tPropertyBoundedValue\t1\nPARAM\tcef58ffd-b676-4402-b505-c81cce3891ea\tPset_DuctFittingTypeCommon.Reference[Type]\tTEXT\t\t166\t1\tIfcIdentifier\t1\nPARAM\t0bec96c1-cca7-49e1-94af-fabc2aa08b97\tPset_DuctFittingTypeCommon.Status[Type]\tTEXT\t\t166\t1\tPEnum_ElementStatus\t1\nPARAM\t826e14c0-1d15-4415-9061-fafcb9a4b59b\tPset_DuctFittingTypeCommon.SubType[Type]\tTEXT\t\t166\t1\tIfcText\t1\nPARAM\t29faf7c0-6de7-48ca-95b2-f723fd2e59dd\tPset_DuctFittingTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t166\t1\tPropertyBoundedValue\t1\nPARAM\t48a0fa3f-c90c-4bf9-9040-d5dcf2d7006d\tPset_DuctFittingTypeCommon.UnitWeight[Type]\tNUMBER\t\t166\t1\tIfcMassPerLengthMeasure\t1\n#\nGROUP\t167\tPset_DuctSegmentOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcb8e6bd8-3d62-49fa-874d-b771878cba5e\tPset_DuctSegmentOccurrence.Color[Type]\tTEXT\t\t167\t1\tIfcLabel\t1\nPARAM\t0054d948-13dc-4d0f-8306-d9dffa4d17e0\tPset_DuctSegmentOccurrence.HasLiner[Type]\tYESNO\t\t167\t1\tIfcBoolean\t1\nPARAM\t302017e4-f14c-48bc-b569-f1a17635d0bf\tPset_DuctSegmentOccurrence.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t167\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t168\tPset_DuctSegmentPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbf99cb6d-294d-49f3-a9f5-c74f975025e9\tPset_DuctSegmentPHistory.AtmosphericPressure[Type]\tMULTILINETEXT\t\t168\t1\tIfcTimeSeries\t1\nPARAM\t3e2b6c43-b8e9-470b-8f80-fe822b1acd17\tPset_DuctSegmentPHistory.FluidFlowLeakage[Type]\tMULTILINETEXT\t\t168\t1\tIfcTimeSeries\t1\nPARAM\ta92aed7f-93fc-4518-be2f-8a0fe6554b9c\tPset_DuctSegmentPHistory.LeakageCurve[Type]\tMULTILINETEXT\t\t168\t1\tIfcTimeSeries\t1\nPARAM\teaf9d949-73da-4bea-b964-f0eb89104ce8\tPset_DuctSegmentPHistory.LossCoefficient[Type]\tMULTILINETEXT\t\t168\t1\tIfcTimeSeries\t1\n#\nGROUP\t169\tPset_DuctSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbca6ed33-5dbf-4411-a004-8a1ea148caf3\tPset_DuctSegmentTypeCommon.EndStyleTreatment[Type]\tMULTILINETEXT\t\t169\t1\tPropertyListValue\t1\nPARAM\ta73ce048-9628-4394-a914-a524625c941b\tPset_DuctSegmentTypeCommon.Length[Type]\tLENGTH\t\t169\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta51f094f-354c-41ca-8d77-474fa5ca6994\tPset_DuctSegmentTypeCommon.LongitudinalSeam[Type]\tTEXT\t\t169\t1\tIfcText\t1\nPARAM\tf4307065-eade-4f10-813a-f50efbc1e91b\tPset_DuctSegmentTypeCommon.Material[Type]\tMULTILINETEXT\t\t169\t1\tIfcMaterial\t1\nPARAM\t2c843d3f-2927-4e36-aa5c-1226aa831b8e\tPset_DuctSegmentTypeCommon.MaterialThickness[Type]\tLENGTH\t\t169\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t92281afb-8cb6-4a01-a1e0-4e4521a4d878\tPset_DuctSegmentTypeCommon.NominalDiameterOrWidth[Type]\tLENGTH\t\t169\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0974a646-91a7-4344-bfda-46a06bd866f6\tPset_DuctSegmentTypeCommon.NominalHeight[Type]\tLENGTH\t\t169\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8e8b4a77-1e6a-4d2e-a8cd-d88d44e09ca8\tPset_DuctSegmentTypeCommon.PressureRange[Type]\tMULTILINETEXT\t\t169\t1\tPropertyBoundedValue\t1\nPARAM\td5f4a4dc-487f-4270-9ac0-88e6b3ee694f\tPset_DuctSegmentTypeCommon.Reference[Type]\tTEXT\t\t169\t1\tIfcIdentifier\t1\nPARAM\t10d02871-06b0-434e-b1f7-e3401eee59a7\tPset_DuctSegmentTypeCommon.Reinforcement[Type]\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\ta6a948aa-9d94-4957-bd58-2e90a448c1d3\tPset_DuctSegmentTypeCommon.ReinforcementSpacing[Type]\tLENGTH\t\t169\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf962c860-77cd-4191-9f30-aebc7de4b0ae\tPset_DuctSegmentTypeCommon.Shape[Type]\tTEXT\t\t169\t1\tPEnum_DuctSegmentShape\t1\nPARAM\taf14ad5f-4060-442b-bc7d-b343128bcd7d\tPset_DuctSegmentTypeCommon.Status[Type]\tTEXT\t\t169\t1\tPEnum_ElementStatus\t1\nPARAM\t5aadb4da-6232-4b4c-8e92-3d1aaaba982a\tPset_DuctSegmentTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t169\t1\tPropertyBoundedValue\t1\nPARAM\tb485b6ff-097c-4c87-a966-3a5818f55041\tPset_DuctSegmentTypeCommon.UnitWeight[Type]\tNUMBER\t\t169\t1\tIfcMassMeasure\t1\nPARAM\t38ff81be-8a77-4035-9fdf-144985a021b7\tPset_DuctSegmentTypeCommon.WorkingPressure[Type]\tNUMBER\t\t169\t1\tIfcPressureMeasure\t1\n#\nGROUP\t170\tPset_DuctSilencerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8e67ed69-5ce2-412d-a288-a21f493299f5\tPset_DuctSilencerPHistory.AirFlowRate[Type]\tMULTILINETEXT\t\t170\t1\tIfcTimeSeries\t1\nPARAM\t3f85f47c-4af6-422c-bb9d-ab1663c146f1\tPset_DuctSilencerPHistory.AirPressureDropCurve[Type]\tMULTILINETEXT\t\t170\t1\tIfcTimeSeries\t1\n#\nGROUP\t171\tPset_DuctSilencerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t13662dd5-e6a6-4338-bb7d-af7fef6dde63\tPset_DuctSilencerTypeCommon.AirFlowrateRange[Type]\tMULTILINETEXT\t\t171\t1\tPropertyBoundedValue\t1\nPARAM\t9f7aec43-b66f-4838-a251-ce2d958555e9\tPset_DuctSilencerTypeCommon.HasExteriorInsulation[Type]\tYESNO\t\t171\t1\tIfcBoolean\t1\nPARAM\t7a73ba7f-45b5-49fb-a6fa-8c28a0edd4d1\tPset_DuctSilencerTypeCommon.HydraulicDiameter[Type]\tLENGTH\t\t171\t1\tIfcLengthMeasure\t1\nPARAM\t8bc57567-11bb-443e-abc7-5f7bed1dd39b\tPset_DuctSilencerTypeCommon.Length[Type]\tLENGTH\t\t171\t1\tIfcLengthMeasure\t1\nPARAM\t56f215d1-0501-4031-8048-26cf07dd2e84\tPset_DuctSilencerTypeCommon.Reference[Type]\tTEXT\t\t171\t1\tIfcIdentifier\t1\nPARAM\t58444257-450f-43a2-b7e9-9ace26941724\tPset_DuctSilencerTypeCommon.Shape[Type]\tTEXT\t\t171\t1\tPEnum_DuctSilencerShape\t1\nPARAM\ta0beeb23-6c9c-4327-bc7e-acff60e50626\tPset_DuctSilencerTypeCommon.Status[Type]\tTEXT\t\t171\t1\tPEnum_ElementStatus\t1\nPARAM\t24a4866e-461e-43ad-9d0b-4896c75aba00\tPset_DuctSilencerTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t171\t1\tPropertyBoundedValue\t1\nPARAM\t120aeb07-17bd-4e4f-a029-f463283d152d\tPset_DuctSilencerTypeCommon.Weight[Type]\tNUMBER\t\t171\t1\tIfcMassMeasure\t1\nPARAM\t4ff244eb-5b06-4f38-b1d5-41a10742876e\tPset_DuctSilencerTypeCommon.WorkingPressureRange[Type]\tMULTILINETEXT\t\t171\t1\tPropertyBoundedValue\t1\n#\nGROUP\t172\tPset_ElectricalCircuit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb9b5bd0c-72f4-470f-a649-64ee34946486\tPset_ElectricalCircuit.Diversity[Type]\tNUMBER\t\t172\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7736fc93-e2ce-46f0-9d1d-f840b65a87a2\tPset_ElectricalCircuit.MaximumAllowedVoltageDrop[Type]\tNUMBER\t\t172\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t89e21b4a-6898-4a83-ada6-ad49ea75ca24\tPset_ElectricalCircuit.NetImpedance[Type]\tNUMBER\t\t172\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t349089b4-cba7-410d-944f-d9648a29a1b0\tPset_ElectricalCircuit.NumberOfPhases[Type]\tINTEGER\t\t172\t1\tIfcInteger\t1\n#\nGROUP\t173\tPset_ElectricalDeviceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te44cf191-98f4-416c-b0db-2de33810c150\tPset_ElectricalDeviceCommon.ConductorFunction[Type]\tTEXT\t\t173\t1\tPEnum_ConductorFunctionEnum\t1\nPARAM\t2e2c9740-944e-46c2-8883-565e4ab9ea58\tPset_ElectricalDeviceCommon.ElectricalDeviceNominalPower[Type]\tNUMBER\t\t173\t1\tIfcPowerMeasure\t1\nPARAM\tbc91d4c2-50a5-4209-a040-a4f13818654b\tPset_ElectricalDeviceCommon.HasProtectiveEarth[Type]\tYESNO\t\t173\t1\tIfcBoolean\t1\nPARAM\t98dd37c6-3724-42d3-98b2-0313fd26d151\tPset_ElectricalDeviceCommon.IK_Code[Type]\tTEXT\t\t173\t1\tIfcLabel\t1\nPARAM\t1bab2ec2-e9a3-4480-a4c2-b03c507c39fa\tPset_ElectricalDeviceCommon.InsulationStandardClass[Type]\tTEXT\t\t173\t1\tPEnum_InsulationStandardClass\t1\nPARAM\t73c07f4c-af83-4062-8738-32dfa5a95260\tPset_ElectricalDeviceCommon.IP_Code[Type]\tTEXT\t\t173\t1\tIfcLabel\t1\nPARAM\tf427c18d-3556-4535-80b0-662dd05a317c\tPset_ElectricalDeviceCommon.NominalCurrent[Type]\tNUMBER\t\t173\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tb27127bf-944c-4f8a-abdc-8471489b6a71\tPset_ElectricalDeviceCommon.NominalFrequencyRange[Type]\tMULTILINETEXT\t\t173\t1\tPropertyBoundedValue\t1\nPARAM\t2e4f72e8-860d-4ab1-8094-46409296bb55\tPset_ElectricalDeviceCommon.NominalVoltage[Type]\tMULTILINETEXT\t\t173\t1\tPropertyBoundedValue\t1\nPARAM\t0eec9b71-cb7a-4009-8c8b-aa8c592fd624\tPset_ElectricalDeviceCommon.NumberOfPoles[Type]\tINTEGER\t\t173\t1\tIfcInteger\t1\nPARAM\t44b6a914-475c-4014-b57c-2ce23e96a005\tPset_ElectricalDeviceCommon.PhaseAngle[Type]\tANGLE\t\t173\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\tdff2fe23-9642-4f64-ae0f-74cb3aa0220f\tPset_ElectricalDeviceCommon.PhaseReference[Type]\tTEXT\t\t173\t1\tIfcIdentifier\t1\nPARAM\tbd4cfc39-9814-4e82-ba33-7760f25139e0\tPset_ElectricalDeviceCommon.PowerFactor[Type]\tNUMBER\t\t173\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\te9bbaedd-38ff-4dea-aa3f-747f3885a053\tPset_ElectricalDeviceCommon.RatedCurrent[Type]\tMULTILINETEXT\t\t173\t1\tPropertyBoundedValue\t1\nPARAM\t7d337ad8-ee76-4353-af61-b2c598881b8b\tPset_ElectricalDeviceCommon.RatedVoltage[Type]\tMULTILINETEXT\t\t173\t1\tPropertyBoundedValue\t1\nPARAM\tbad4baad-3be2-4269-a5db-11a016ce7493\tPset_ElectricalDeviceCommon.UsageCurrent[Type]\tNUMBER\t\t173\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t174\tPset_ElectricAppliancePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9682862a-3105-492f-8a6a-1f66d53413ae\tPset_ElectricAppliancePHistory.PowerState[Type]\tMULTILINETEXT\t\t174\t1\tIfcTimeSeries\t1\n#\nGROUP\t175\tPset_ElectricApplianceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7b07423f-c1a4-4d56-8ccd-10a816471db9\tPset_ElectricApplianceTypeCommon.Reference[Type]\tTEXT\t\t175\t1\tIfcIdentifier\t1\nPARAM\tf62664b9-c44a-4521-ae51-8c57e6505e75\tPset_ElectricApplianceTypeCommon.Status[Type]\tTEXT\t\t175\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t176\tPset_ElectricApplianceTypeDishwasher\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tce6d3bf8-4679-48f0-8ab0-2465fa0fe989\tPset_ElectricApplianceTypeDishwasher.DishwasherType[Type]\tTEXT\t\t176\t1\tPEnum_ElectricApplianceDishwasherType\t1\n#\nGROUP\t177\tPset_ElectricApplianceTypeElectricCooker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td0f77eb3-7b10-4601-ab28-b9dc4b3485fb\tPset_ElectricApplianceTypeElectricCooker.ElectricCookerType[Type]\tTEXT\t\t177\t1\tPEnum_ElectricApplianceElectricCookerType\t1\n#\nGROUP\t178\tPset_ElectricDistributionBoardOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9a124d78-5d9c-4ec3-b468-06a70861d6f4\tPset_ElectricDistributionBoardOccurrence.IsMain[Type]\tYESNO\t\t178\t1\tIfcBoolean\t1\nPARAM\tb8621298-f362-45df-b3ae-443960a5bdd6\tPset_ElectricDistributionBoardOccurrence.IsSkilledOperator[Type]\tYESNO\t\t178\t1\tIfcBoolean\t1\n#\nGROUP\t179\tPset_ElectricDistributionBoardTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcdd9960e-ead4-4dc3-95eb-2116f77e64f2\tPset_ElectricDistributionBoardTypeCommon.Reference[Type]\tTEXT\t\t179\t1\tIfcIdentifier\t1\nPARAM\ta4d6fd9a-5ef2-47e1-8529-e48358eab8d7\tPset_ElectricDistributionBoardTypeCommon.Status[Type]\tTEXT\t\t179\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t180\tPset_ElectricDistributionPointCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t40cf0a71-b990-44c2-93df-8cd99b652352\tPset_ElectricDistributionPointCommon.CaseMaterial[Type]\tMULTILINETEXT\t\t180\t1\tIfcMaterial\t1\nPARAM\t7d4f3d7f-f37c-4431-8900-cbd26692b8a9\tPset_ElectricDistributionPointCommon.CaseWeight[Type]\tNUMBER\t\t180\t1\tIfcMassMeasure\t1\nPARAM\t7603f11f-4b5f-492a-bb08-c805831f6a10\tPset_ElectricDistributionPointCommon.IsMain[Type]\tYESNO\t\t180\t1\tIfcBoolean\t1\nPARAM\t3fc095cd-385a-47bb-8a2a-c9c8ba17df00\tPset_ElectricDistributionPointCommon.NumberOfDoors[Type]\tINTEGER\t\t180\t1\tIfcInteger\t1\nPARAM\tfb77d61e-0ac1-45b2-9b79-202d24bdc188\tPset_ElectricDistributionPointCommon.NumberOfOpenings[Type]\tINTEGER\t\t180\t1\tIfcInteger\t1\n#\nGROUP\t181\tPset_ElectricFlowStorageDevicePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3462db45-9e45-4add-93c5-46c644d64c63\tPset_ElectricFlowStorageDevicePHistory.Level[Type]\tNUMBER\t\t181\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t182\tPset_ElectricFlowStorageDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t04d555a0-ab2c-4431-95fe-ad902b74dbd9\tPset_ElectricFlowStorageDeviceTypeCommon.ConnectedConductorFunction[Type]\tTEXT\t\t182\t1\tPEnum_ConductorFunctionEnum\t1\nPARAM\t31c7da45-fea5-48aa-b7da-4d6a9a052dfc\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PoleMaximumState[Type]\tNUMBER\t\t182\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t052e943d-41cd-4a80-808f-8ecb635540a9\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PoleMinimumState[Type]\tNUMBER\t\t182\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t295be0a0-9b95-4dc9-9b29-3865aff67ddc\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PolePowerFactorMaximumState[Type]\tNUMBER\t\t182\t1\tIfcReal\t1\nPARAM\ta0b861cd-2f2d-4eb1-8ae6-f222ca0aba47\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PolePowerFactorMinimumState[Type]\tNUMBER\t\t182\t1\tIfcReal\t1\nPARAM\tfc972fe9-4363-4974-a8ea-f11134ae3075\tPset_ElectricFlowStorageDeviceTypeCommon.ModuleCapacity[Type]\tNUMBER\t\t182\t1\tIfcElectricCapacitanceMeasure\t1\nPARAM\tfc691c01-4e09-4be8-aa2a-9c7296b7ec9f\tPset_ElectricFlowStorageDeviceTypeCommon.ModulesInParallel[Type]\tINTEGER\t\t182\t1\tIfcInteger\t1\nPARAM\t9bbc0b63-cccf-456c-bad4-8c448f34faeb\tPset_ElectricFlowStorageDeviceTypeCommon.ModulesInSeries[Type]\tINTEGER\t\t182\t1\tIfcInteger\t1\nPARAM\t5b81e277-1c89-4206-80e0-406f375de800\tPset_ElectricFlowStorageDeviceTypeCommon.NominalFrequency[Type]\tNUMBER\t\t182\t1\tIfcFrequencyMeasure\t1\nPARAM\t9e721675-3e74-4302-b28f-0e4d3de07c82\tPset_ElectricFlowStorageDeviceTypeCommon.NominalSupplyVoltage[Type]\tNUMBER\t\t182\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t1e836369-bb30-4b34-9e74-b9b9277fe08b\tPset_ElectricFlowStorageDeviceTypeCommon.NominalSupplyVoltageOffset[Type]\tMULTILINETEXT\t\t182\t1\tPropertyBoundedValue\t1\nPARAM\td384c59f-0609-441b-aa92-8c18e671d11e\tPset_ElectricFlowStorageDeviceTypeCommon.RadiativeFraction[Type]\tNUMBER\t\t182\t1\tIfcRatioMeasure\t1\nPARAM\tbdb08450-89cb-46c0-a8d5-f28f5e775612\tPset_ElectricFlowStorageDeviceTypeCommon.Reference[Type]\tTEXT\t\t182\t1\tIfcIdentifier\t1\nPARAM\tfe141333-82b0-4b01-a6df-84d1245316d7\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PoleMaximumState[Type]\tNUMBER\t\t182\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tbc558d22-5595-4522-bd27-97f51cb4be61\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PoleMinimumState[Type]\tNUMBER\t\t182\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t6cc288da-79b2-41a2-8a50-7095617bf8b9\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PolePowerFactorMaximumState[Type]\tNUMBER\t\t182\t1\tIfcReal\t1\nPARAM\t9bce1ed3-6156-47db-8335-8b5bc899feba\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PolePowerFactorMinimumState[Type]\tNUMBER\t\t182\t1\tIfcReal\t1\nPARAM\tc460d017-42ba-42f8-a6e0-9188747de49e\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit2PoleMinimumState[Type]\tNUMBER\t\t182\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t6c475af8-16dd-4a04-9ef6-1061834039c7\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit2PolePowerFactorMinimumState[Type]\tNUMBER\t\t182\t1\tIfcReal\t1\nPARAM\t8cfd7de0-f4a7-48a6-b412-d4a56f139fc1\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit3PoleMaximumState[Type]\tNUMBER\t\t182\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t0ad2067d-0c2e-41e3-931d-d9db0e4db0cc\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit3PolePowerFactorMaximumState[Type]\tNUMBER\t\t182\t1\tIfcReal\t1\nPARAM\t391dfdf3-e795-4d3b-bb47-1e25fa6a99da\tPset_ElectricFlowStorageDeviceTypeCommon.Status[Type]\tTEXT\t\t182\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t183\tPset_ElectricGeneratorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tea6f1cc9-a98c-4d5a-94fb-bacf52a47cab\tPset_ElectricGeneratorTypeCommon.ElectricGeneratorEfficiency[Type]\tNUMBER\t\t183\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tfbddac21-2c2b-416f-b406-63d7845082d0\tPset_ElectricGeneratorTypeCommon.MaximumPowerOutput[Type]\tNUMBER\t\t183\t1\tIfcPowerMeasure\t1\nPARAM\t64d3987d-dc36-4d98-a086-04eff53dc764\tPset_ElectricGeneratorTypeCommon.Reference[Type]\tTEXT\t\t183\t1\tIfcIdentifier\t1\nPARAM\t25c344db-7c3a-4abf-8531-b1f2d3976e15\tPset_ElectricGeneratorTypeCommon.StartCurrentFactor[Type]\tNUMBER\t\t183\t1\tIfcReal\t1\nPARAM\t2f5676b4-0f91-49e3-bfa7-5e0466de4919\tPset_ElectricGeneratorTypeCommon.Status[Type]\tTEXT\t\t183\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t184\tPset_ElectricHeaterTypeElectricalCableHeater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t007eff40-d688-4158-8435-646cf2079ff0\tPset_ElectricHeaterTypeElectricalCableHeater.HeatOutputPerUnitLength[Type]\tNUMBER\t\t184\t1\t IfcPowerMeasure\t1\n#\nGROUP\t185\tPset_ElectricHeaterTypeElectricalMatHeater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td4831623-7ee6-4cf3-9df8-6ce75bebd423\tPset_ElectricHeaterTypeElectricalMatHeater.HeatOutputPerUnitArea[Type]\tNUMBER\t\t185\t1\t IfcPowerMeasure\t1\n#\nGROUP\t186\tPset_ElectricHeaterTypeElectricalPointHeater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t08858449-67a8-4f40-b2a5-486cd84fee04\tPset_ElectricHeaterTypeElectricalPointHeater.HeatOutput[Type]\tNUMBER\t\t186\t1\t IfcPowerMeasure\t1\n#\nGROUP\t187\tPset_ElectricMotorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbcfc9b86-8817-4f51-984c-00f099033daf\tPset_ElectricMotorTypeCommon.ElectricMotorEfficiency[Type]\tNUMBER\t\t187\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t145ddac3-f4df-4710-bdae-0a6d4261f52a\tPset_ElectricMotorTypeCommon.FrameSize[Type]\tTEXT\t\t187\t1\tIfcLabel\t1\nPARAM\t75c66f27-fd5d-43ca-8a4b-be6d9ea7bfb1\tPset_ElectricMotorTypeCommon.HasPartWinding[Type]\tYESNO\t\t187\t1\tIfcBoolean\t1\nPARAM\t546f2f1c-aa61-4fd5-9491-7e2c08547e45\tPset_ElectricMotorTypeCommon.IsGuarded[Type]\tYESNO\t\t187\t1\tIfcBoolean\t1\nPARAM\teb4b0328-d93f-43b3-9354-b04803d55caf\tPset_ElectricMotorTypeCommon.LockedRotorCurrent[Type]\tNUMBER\t\t187\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t126c8a63-627e-407f-83b0-92da11229964\tPset_ElectricMotorTypeCommon.MaximumPowerOutput[Type]\tNUMBER\t\t187\t1\tIfcPowerMeasure\t1\nPARAM\t6ebf61aa-bf6f-4150-baae-b4f631fface3\tPset_ElectricMotorTypeCommon.MotorEnclosureType[Type]\tTEXT\t\t187\t1\tPEnum_MotorEnclosureType\t1\nPARAM\t0c593b8a-c51a-42e7-ab1e-87ae1dc52b3e\tPset_ElectricMotorTypeCommon.Reference[Type]\tTEXT\t\t187\t1\tIfcIdentifier\t1\nPARAM\t2b61ddf2-05b2-42f2-9ff5-f45229296847\tPset_ElectricMotorTypeCommon.StartCurrentFactor[Type]\tNUMBER\t\t187\t1\tIfcReal\t1\nPARAM\t3b4bd756-7b09-43ff-b3d9-c8d768a35426\tPset_ElectricMotorTypeCommon.StartingTime[Type]\tNUMBER\t\t187\t1\tIfcTimeMeasure\t1\nPARAM\t1bf73ae1-f3ff-4437-b5a7-92859677aa34\tPset_ElectricMotorTypeCommon.Status[Type]\tTEXT\t\t187\t1\tPEnum_ElementStatus\t1\nPARAM\t3280b040-7ee3-430d-93b0-5be0049dfdcf\tPset_ElectricMotorTypeCommon.TeTime[Type]\tNUMBER\t\t187\t1\tIfcTimeMeasure\t1\n#\nGROUP\t188\tPset_ElectricTimeControlTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfe5c9822-f9f6-4e87-bcab-728b34373a1c\tPset_ElectricTimeControlTypeCommon.Reference[Type]\tTEXT\t\t188\t1\tIfcIdentifier\t1\nPARAM\t7895e832-dab4-4767-8eff-3cab37bf0396\tPset_ElectricTimeControlTypeCommon.Status[Type]\tTEXT\t\t188\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t189\tPset_ElementAssemblyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf0e00097-e118-42eb-820c-f73ae030885b\tPset_ElementAssemblyCommon.Reference[Type]\tTEXT\t\t189\t1\tIfcIdentifier\t1\nPARAM\t672d584f-cd8d-4e78-820e-dbf7cfa3d99a\tPset_ElementAssemblyCommon.Status[Type]\tTEXT\t\t189\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t190\tPset_ElementComponentCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb51b6251-b0d2-4334-8802-60cd7303f3c4\tPset_ElementComponentCommon.CorrosionTreatment[Type]\tTEXT\t\t190\t1\tPEnum_CorrosionTreatment\t1\nPARAM\tb23cde0a-0f9e-4164-b2ca-4102c57dea7c\tPset_ElementComponentCommon.DeliveryType[Type]\tTEXT\t\t190\t1\tPEnum_DeliveryType\t1\nPARAM\t2687f13e-1866-4d7e-ad87-4e59e84818ab\tPset_ElementComponentCommon.Reference[Type]\tTEXT\t\t190\t1\tIfcIdentifier\t1\nPARAM\t5bd0c41f-24d5-4b60-a9bd-f15f91d4be41\tPset_ElementComponentCommon.Status[Type]\tTEXT\t\t190\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t191\tPset_ElementShading\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t193e801f-c05a-4431-9b03-72750d167dbc\tPset_ElementShading.AverageSolarTransmittance[Type]\tNUMBER\t\t191\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1a592a34-b301-49c7-a14a-b0fbfe963d28\tPset_ElementShading.AverageVisibleTransmittance[Type]\tNUMBER\t\t191\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t99074339-15d8-4783-94ce-455160b626b3\tPset_ElementShading.Azimuth[Type]\tNUMBER\t\t191\t1\tIfcPositivePlaneAngleMeasure \t1\nPARAM\tcb037310-270e-468c-8430-5068780cd030\tPset_ElementShading.Color[Type]\tTEXT\t\t191\t1\tIfcLabel\t1\nPARAM\t08518dcd-d1bd-47ed-a8d2-37a536175a35\tPset_ElementShading.Inclination[Type]\tNUMBER\t\t191\t1\tIfcPositivePlaneAngleMeasure \t1\nPARAM\tbab0c12b-b225-4b38-ba32-1de59399a873\tPset_ElementShading.Reflectance[Type]\tNUMBER\t\t191\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t72deb207-587a-43c9-8a0a-f4546b8dac32\tPset_ElementShading.Roughness[Type]\tLENGTH\t\t191\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32482893-341d-4b19-ae70-0e116a0058cf\tPset_ElementShading.ShadingDeviceType[Type]\tTEXT\t\t191\t1\tPEnum_ElementShading\t1\nPARAM\tf54648cb-7213-4416-8bed-2ba2a84f2df0\tPset_ElementShading.TiltRange[Type]\tMULTILINETEXT\t\t191\t1\tPropertyBoundedValue\t1\n#\nGROUP\t192\tPset_EnergyConsumptionPHistoryElectricity\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3d28c9b5-72a7-422d-8a47-c9e4d2664377\tPset_EnergyConsumptionPHistoryElectricity.ApparentPower[Type]\tNUMBER\t\t192\t1\tIfcReal\t1\nPARAM\t9042ed2f-4a44-428b-a0a5-a3f8ae0b7773\tPset_EnergyConsumptionPHistoryElectricity.Current[Type]\tTEXT\t\t192\t1\tIfcLabel\t1\nPARAM\t27c90246-3c96-4b65-95a8-e9d68e54bbe0\tPset_EnergyConsumptionPHistoryElectricity.PowerFactor[Type]\tNUMBER\t\t192\t1\tIfcReal\t1\nPARAM\tfc2ccf60-c5d1-4c09-b42e-dc9e1c0cab74\tPset_EnergyConsumptionPHistoryElectricity.ReactivePower[Type]\tNUMBER\t\t192\t1\tIfcReal\t1\nPARAM\tfa64c1f1-d4aa-4d01-bfc3-2d0daa9d9817\tPset_EnergyConsumptionPHistoryElectricity.RealPower[Type]\tNUMBER\t\t192\t1\tIfcReal\t1\nPARAM\taf592070-7632-4727-8974-d372b3b161d3\tPset_EnergyConsumptionPHistoryElectricity.Voltage[Type]\tTEXT\t\t192\t1\tIfcLabel\t1\n#\nGROUP\t193\tPset_EnergyConsumptionPHistoryFuel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t74694aaf-4128-4d7c-86fb-5a8b11f8a6e3\tPset_EnergyConsumptionPHistoryFuel.Flowrate[Type]\tNUMBER\t\t193\t1\tIfcReal\t1\nPARAM\t8bfac637-27c8-41ad-b84e-2ee80e856c83\tPset_EnergyConsumptionPHistoryFuel.Pressure[Type]\tNUMBER\t\t193\t1\tIfcReal\t1\nPARAM\t11cb0e19-3ad9-4b57-99a3-b9e62d95ab88\tPset_EnergyConsumptionPHistoryFuel.Temperature[Type]\tNUMBER\t\t193\t1\tIfcReal\t1\n#\nGROUP\t194\tPset_EnergyConsumptionPHistorySteam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb354304c-8e0d-4f91-8cb4-1ba5e90fc349\tPset_EnergyConsumptionPHistorySteam.Flowrate[Type]\tNUMBER\t\t194\t1\tIfcReal\t1\nPARAM\tcf8606fe-d648-4cc9-b63a-7c862b9569a6\tPset_EnergyConsumptionPHistorySteam.Pressure[Type]\tNUMBER\t\t194\t1\tIfcReal\t1\nPARAM\t9ad97d3a-48c4-41a0-b10e-bf5b49484100\tPset_EnergyConsumptionPHistorySteam.Quality[Type]\tTEXT\t\t194\t1\tIfcLabel\t1\nPARAM\t7f4b70bc-b59a-4631-bf97-29c7348a7b6d\tPset_EnergyConsumptionPHistorySteam.Temperature[Type]\tNUMBER\t\t194\t1\tIfcReal\t1\n#\nGROUP\t195\tPset_EnergyConversionDeviceCoil\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td04bf527-a9f8-426c-8b76-897e2e4f6d2c\tPset_EnergyConversionDeviceCoil.HasSoundAttentuation[Type]\tYESNO\t\t195\t1\tIfcBoolean\t1\n#\nGROUP\t196\tPset_EnergyConversionDeviceSpaceHeaterPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t512705a1-4e28-4091-8f5f-a2caabc33d27\tPset_EnergyConversionDeviceSpaceHeaterPanel.NumberOfPanels[Type]\tINTEGER\t\t196\t1\tIfcInteger\t1\n#\nGROUP\t197\tPset_EnergyConversionDeviceSpaceHeaterSectional\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb1a8cde5-64e7-4a63-af9a-6242daf977f1\tPset_EnergyConversionDeviceSpaceHeaterSectional.NumberOfSections[Type]\tINTEGER\t\t197\t1\tIfcInteger\t1\n#\nGROUP\t198\tPset_EngineTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta072d78d-8f5f-4d58-9f20-dc8b59b42c72\tPset_EngineTypeCommon.EnergySource[Type]\tTEXT\t\t198\t1\tPEnum_EngineEnergySource\t1\nPARAM\t19b2514c-4e93-4089-b0fb-6c85f9a4677a\tPset_EngineTypeCommon.Reference[Type]\tTEXT\t\t198\t1\tIfcIdentifier\t1\nPARAM\t5e48ba36-8abf-409f-a35c-110c9f691c62\tPset_EngineTypeCommon.Status[Type]\tTEXT\t\t198\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t199\tPset_EnvironmentalImpactIndicators\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t193d0481-188c-4ed7-9323-fa8dd72128e1\tPset_EnvironmentalImpactIndicators.AtmosphericAcidificationPerUnit[Type]\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\t154ca6d1-6a3b-4ab3-9aed-cae6e7480363\tPset_EnvironmentalImpactIndicators.ClimateChangePerUnit[Type]\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\t86b1aa33-cb2e-4fdb-a381-437b029a9d96\tPset_EnvironmentalImpactIndicators.EutrophicationPerUnit[Type]\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\t817f69b1-81a8-497f-94da-e1c36c59aabb\tPset_EnvironmentalImpactIndicators.ExpectedServiceLife[Type]\tNUMBER\t\t199\t1\tIfcTimeMeasure\t1\nPARAM\td037f0fe-9b1e-4d13-baec-9db86edc3df7\tPset_EnvironmentalImpactIndicators.FunctionalUnitReference[Type]\tTEXT\t\t199\t1\tIfcLabel\t1\nPARAM\tf0caa374-a266-4ece-aa47-7feff2f7f48a\tPset_EnvironmentalImpactIndicators.HazardousWastePerUnit[Type]\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\tdeee4245-0861-46e7-8d73-a81c24066957\tPset_EnvironmentalImpactIndicators.InertWastePerUnit[Type]\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\tdaa94867-2cc9-477f-b1e9-ebb4e71d6f37\tPset_EnvironmentalImpactIndicators.LifeCyclePhase[Type]\tTEXT\t\t199\t1\tPEnum_LifeCyclePhase\t1\nPARAM\t2ece8d5a-4d15-48a1-b510-77e665fa0749\tPset_EnvironmentalImpactIndicators.NonHazardousWastePerUnit[Type]\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\t31fa257c-1370-47b8-9c62-653300ed931c\tPset_EnvironmentalImpactIndicators.NonRenewableEnergyConsumptionPerUnit[Type]\tNUMBER\t\t199\t1\tIfcEnergyMeasure\t1\nPARAM\t7bc2480c-da7e-4d40-8860-d882c271f976\tPset_EnvironmentalImpactIndicators.PhotochemicalOzoneFormationPerUnit[Type]\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\taeaa7f5d-922f-408b-9b47-28fb37b6a4e8\tPset_EnvironmentalImpactIndicators.RadioactiveWastePerUnit[Type]\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\tdea8caf5-57ee-49de-8ad0-d3a4d584dfa7\tPset_EnvironmentalImpactIndicators.Reference[Type]\tTEXT\t\t199\t1\tIfcIdentifier\t1\nPARAM\tb9abcd98-3b29-4a80-9bdb-56ca4492ba38\tPset_EnvironmentalImpactIndicators.RenewableEnergyConsumptionPerUnit[Type]\tNUMBER\t\t199\t1\tIfcEnergyMeasure\t1\nPARAM\tf45c77d0-f58f-497b-af58-1fda207bc557\tPset_EnvironmentalImpactIndicators.ResourceDepletionPerUnit[Type]\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\tc85fb7e4-403a-41e2-b2a1-72caf299a056\tPset_EnvironmentalImpactIndicators.StratosphericOzoneLayerDestructionPerUnit[Type]\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\tc9c82999-b2ff-493a-8afb-ff91a2086013\tPset_EnvironmentalImpactIndicators.TotalPrimaryEnergyConsumptionPerUnit[Type]\tNUMBER\t\t199\t1\tIfcEnergyMeasure\t1\nPARAM\t1a5dd29a-ad7c-41e7-a134-64e5915305f6\tPset_EnvironmentalImpactIndicators.Unit[Type]\tTEXT\t\t199\t1\tIfcText\t1\nPARAM\tcb3113b4-b5e9-4162-a159-fd784c268ab2\tPset_EnvironmentalImpactIndicators.WaterConsumptionPerUnit[Type]\tVOLUME\t\t199\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t200\tPset_EnvironmentalImpactValues\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfacaa2b8-860d-4cf5-bed4-dc0f78e4e670\tPset_EnvironmentalImpactValues.AtmosphericAcidification[Type]\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\t8ae93962-3332-45f8-9d44-d478b646a0fa\tPset_EnvironmentalImpactValues.ClimateChange[Type]\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\t8aae7f49-14a0-4f3d-8616-4685f9bd9400\tPset_EnvironmentalImpactValues.Duration[Type]\tTEXT\t\t200\t1\tIfcDuration\t1\nPARAM\tefd5f2fb-78bd-49a1-a175-1b60d16daca6\tPset_EnvironmentalImpactValues.Eutrophication[Type]\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\t6a3675c7-8295-4edc-86c2-7684d0297089\tPset_EnvironmentalImpactValues.HazardousWaste[Type]\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\t82255ec4-9b19-4215-9d6a-835deedd61f3\tPset_EnvironmentalImpactValues.InertWaste[Type]\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\te4549a76-c69d-4eb1-b9a6-a02cfbf9ff53\tPset_EnvironmentalImpactValues.LeadInTime[Type]\tTEXT\t\t200\t1\tIfcDuration\t1\nPARAM\t768696be-5d13-495f-a7e5-2f664fb2dfd5\tPset_EnvironmentalImpactValues.LeadOutTime[Type]\tTEXT\t\t200\t1\tIfcDuration\t1\nPARAM\t7c894a43-a1f4-47b6-b0b3-c699c81e9f29\tPset_EnvironmentalImpactValues.NonHazardousWaste[Type]\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\t1e57f1e9-53af-4ed6-a984-75d8638e1cf2\tPset_EnvironmentalImpactValues.NonRenewableEnergyConsumption[Type]\tNUMBER\t\t200\t1\tIfcEnergyMeasure\t1\nPARAM\tf9ab6bdb-7110-4f76-98f3-911e94e474e6\tPset_EnvironmentalImpactValues.PhotochemicalOzoneFormation[Type]\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\t6865a0ee-8c20-4a3f-bf92-c507d52ec6a7\tPset_EnvironmentalImpactValues.RadioactiveWaste[Type]\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\taee6a30c-8fee-4f14-9fb1-3bd962c91b97\tPset_EnvironmentalImpactValues.RenewableEnergyConsumption[Type]\tNUMBER\t\t200\t1\tIfcEnergyMeasure\t1\nPARAM\t7760c3b7-6602-4099-9c15-739a0bcc3c80\tPset_EnvironmentalImpactValues.ResourceDepletion[Type]\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\t76937367-c37e-4811-80ec-e0f4bb5aae9c\tPset_EnvironmentalImpactValues.StratosphericOzoneLayerDestruction[Type]\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\tbe11b9d0-0bcb-4893-aa9b-3fc738c00de1\tPset_EnvironmentalImpactValues.TotalPrimaryEnergyConsumption[Type]\tNUMBER\t\t200\t1\tIfcEnergyMeasure\t1\nPARAM\t4314f3b1-306b-4e89-ab27-d52c0b1b0741\tPset_EnvironmentalImpactValues.WaterConsumption[Type]\tVOLUME\t\t200\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t201\tPset_EvaporativeCoolerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb6971c07-50d2-4539-8485-84b979c9f748\tPset_EvaporativeCoolerPHistory.AirPressureDropCurve[Type]\tMULTILINETEXT\t\t201\t1\tPropertyListValue\t1\nPARAM\te1ae9e6e-7c36-46d5-89a9-208fe7fd32ee\tPset_EvaporativeCoolerPHistory.Effectiveness[Type]\tMULTILINETEXT\t\t201\t1\tIfcTimeSeries\t1\nPARAM\t69f3f737-1b05-4085-aec4-011a2f40d185\tPset_EvaporativeCoolerPHistory.EffectivenessTable[Type]\tMULTILINETEXT\t\t201\t1\tPropertyListValue\t1\nPARAM\t5fd3f9c2-ffbe-4a5b-838a-53aed287054e\tPset_EvaporativeCoolerPHistory.LatentHeatTransferRate[Type]\tMULTILINETEXT\t\t201\t1\tIfcTimeSeries\t1\nPARAM\t1897793a-37c7-412f-869c-936bb487a9c0\tPset_EvaporativeCoolerPHistory.SensibleHeatTransferRate[Type]\tMULTILINETEXT\t\t201\t1\tIfcTimeSeries\t1\nPARAM\t7f6d3dae-4a6e-4e55-b87f-749db54b6d66\tPset_EvaporativeCoolerPHistory.TotalHeatTransferRate[Type]\tMULTILINETEXT\t\t201\t1\tIfcTimeSeries\t1\nPARAM\t83fcdcdc-a984-49ad-9513-e70447df5a63\tPset_EvaporativeCoolerPHistory.WaterPressDropCurve[Type]\tMULTILINETEXT\t\t201\t1\tPropertyListValue\t1\nPARAM\tde3b7ce1-6188-4b9a-add8-dbb77822117a\tPset_EvaporativeCoolerPHistory.WaterSumpTemperature[Type]\tMULTILINETEXT\t\t201\t1\tIfcTimeSeries\t1\n#\nGROUP\t202\tPset_EvaporativeCoolerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7dac8738-a984-440d-9960-5a8cfaaa07d4\tPset_EvaporativeCoolerTypeCommon.AirPressureDropCurve[Type]\tMULTILINETEXT\t\t202\t1\tPropertyTableValue\t1\nPARAM\t304478c7-f437-4cea-99ca-c512078c452a\tPset_EvaporativeCoolerTypeCommon.EffectivenessTable[Type]\tMULTILINETEXT\t\t202\t1\tPropertyTableValue\t1\nPARAM\tdda00dc0-8d68-4742-b110-bf86b1038ed5\tPset_EvaporativeCoolerTypeCommon.FlowArrangement[Type]\tTEXT\t\t202\t1\tPEnum_EvaporativeCoolerFlowArrangement\t1\nPARAM\td3097cf7-f04e-4d3b-8730-7af7047595f2\tPset_EvaporativeCoolerTypeCommon.HeatExchangeArea[Type]\tAREA\t\t202\t1\tIfcAreaMeasure\t1\nPARAM\t96fa0ddd-5f71-4389-a4a3-086201abb07d\tPset_EvaporativeCoolerTypeCommon.HeatExchangerMediaMaterials[Type]\tMULTILINETEXT\t\t202\t1\tIfcMaterial\t1\nPARAM\t221b314b-7d49-4412-8593-d1bfa6c4d2f3\tPset_EvaporativeCoolerTypeCommon.OperationTemperatureRange[Type]\tMULTILINETEXT\t\t202\t1\tPropertyBoundedValue\t1\nPARAM\te74c8458-eb2b-4261-b92a-644709ab549d\tPset_EvaporativeCoolerTypeCommon.Reference[Type]\tTEXT\t\t202\t1\tIfcIdentifier\t1\nPARAM\tb519cf7e-4a4f-488e-92d2-177324247de3\tPset_EvaporativeCoolerTypeCommon.Status[Type]\tTEXT\t\t202\t1\tPEnum_ElementStatus\t1\nPARAM\t7728d7b4-8380-49e5-aa4c-7a0140cce8f4\tPset_EvaporativeCoolerTypeCommon.WaterPressDropCurve[Type]\tMULTILINETEXT\t\t202\t1\tPropertyTableValue\t1\nPARAM\te6f45d0a-4643-4702-9ed2-a97f8e68730f\tPset_EvaporativeCoolerTypeCommon.WaterRequirement[Type]\tNUMBER\t\t202\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t2359bf75-2493-4338-8312-3818655d3194\tPset_EvaporativeCoolerTypeCommon.Weight[Type]\tNUMBER\t\t202\t1\tIfcMassMeasure\t1\n#\nGROUP\t203\tPset_EvaporatorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t543b972c-6226-4ecd-b656-d61a08cb3e15\tPset_EvaporatorPHistory.CompressorEvaporatorHeatGain[Type]\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\t255c4db4-c934-4ecb-93b6-2fe39036546a\tPset_EvaporatorPHistory.CompressorEvaporatorPressureDrop[Type]\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\t7dff761e-7186-4c45-9873-676e8cfdbca3\tPset_EvaporatorPHistory.EvaporatingTemperature[Type]\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\t82df70a6-ba35-46c8-aa9c-9e64ab154391\tPset_EvaporatorPHistory.EvaporatorMeanVoidFraction[Type]\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\t6e50589e-a3fa-46e5-a5af-66f79b13f030\tPset_EvaporatorPHistory.ExteriorHeatTransferCoefficient[Type]\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\t1df5c552-4518-43fe-a83b-ff23fd9c394a\tPset_EvaporatorPHistory.HeatRejectionRate[Type]\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\taa6ee048-0b94-4508-abbb-46dd28a89a27\tPset_EvaporatorPHistory.InteriorHeatTransferCoefficient[Type]\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\t6c6a856d-5059-442c-bb9a-a611b44b42d6\tPset_EvaporatorPHistory.LogarithmicMeanTemperatureDifference[Type]\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\t48444ca9-479d-446d-a5e3-74790d390d49\tPset_EvaporatorPHistory.RefrigerantFoulingResistance[Type]\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\ta102893f-b722-432c-abf8-2cecb604b7ce\tPset_EvaporatorPHistory.RefrigrerantFoulingResistance[Type]\tNUMBER\t\t203\t1\tIfcReal\t1\nPARAM\t8c18f955-b228-4fdc-b3c6-dd6f508cde70\tPset_EvaporatorPHistory.UAcurves[Type]\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\te9601450-bb16-4e5b-9b55-c908b1fdfb7e\tPset_EvaporatorPHistory.WaterFoulingResistance[Type]\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\n#\nGROUP\t204\tPset_EvaporatorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t252f7b79-b22f-41b2-a6d9-0afbd757e196\tPset_EvaporatorTypeCommon.EvaporatorCoolant[Type]\tTEXT\t\t204\t1\tPEnum_EvaporatorCoolant\t1\nPARAM\t50a63a97-458d-404e-b0bb-d666331bab7a\tPset_EvaporatorTypeCommon.EvaporatorMediumType[Type]\tTEXT\t\t204\t1\tPEnum_EvaporatorMediumType\t1\nPARAM\t4cbf26bb-7b19-4d77-af28-9fa2ea73dc50\tPset_EvaporatorTypeCommon.ExternalSurfaceArea[Type]\tAREA\t\t204\t1\tIfcAreaMeasure\t1\nPARAM\ta60c360e-eb26-4187-8402-91bc94183baf\tPset_EvaporatorTypeCommon.InternalRefrigerantVolume[Type]\tVOLUME\t\t204\t1\tIfcVolumeMeasure\t1\nPARAM\tfae07707-46dd-4238-a319-7cb7d5b550cf\tPset_EvaporatorTypeCommon.InternalSurfaceArea[Type]\tAREA\t\t204\t1\tIfcAreaMeasure\t1\nPARAM\t5c480298-e221-42be-9b9f-efb5b6b22358\tPset_EvaporatorTypeCommon.InternalWaterVolume[Type]\tVOLUME\t\t204\t1\tIfcVolumeMeasure\t1\nPARAM\tfe416e1c-52ba-4a5f-a846-88d6f064e7ed\tPset_EvaporatorTypeCommon.NominalHeatTransferArea[Type]\tAREA\t\t204\t1\tIfcAreaMeasure\t1\nPARAM\t3c290506-1c2e-4600-9786-5f7e459bc832\tPset_EvaporatorTypeCommon.NominalHeatTransferCoefficient[Type]\tNUMBER\t\t204\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t9ac7cb3f-0b84-4196-adfd-ce5efab6d09e\tPset_EvaporatorTypeCommon.Reference[Type]\tTEXT\t\t204\t1\tIfcIdentifier\t1\nPARAM\t50de116a-7888-4eeb-bac7-693faea52036\tPset_EvaporatorTypeCommon.RefrigerantClass[Type]\tTEXT\t\t204\t1\tPEnum_RefrigerantClass\t1\nPARAM\t68332a8a-9ba3-4bee-bb09-209909b44de7\tPset_EvaporatorTypeCommon.RefrigerantType[Type]\tMULTILINETEXT\t\t204\t1\tIfcMaterial\t1\nPARAM\t37b93835-5ce4-4aba-8924-c9439562c06b\tPset_EvaporatorTypeCommon.Status[Type]\tTEXT\t\t204\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t205\tPset_FanCentrifugal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t90f9396f-78e0-4736-8c8c-b623d6e72e8c\tPset_FanCentrifugal.Arrangement[Type]\tTEXT\t\t205\t1\tPEnum_CentrifugalFanArrangement\t1\nPARAM\t5aa2f8d1-8844-4efe-a2e7-bac835ca7843\tPset_FanCentrifugal.DirectionOfRotation[Type]\tTEXT\t\t205\t1\tPEnum_CentrifugalFanRotation\t1\nPARAM\t5ba0dfd5-7c8a-4863-88e3-41101b3b45b8\tPset_FanCentrifugal.DischargePosition[Type]\tTEXT\t\t205\t1\tPEnum_CentrifugalFanDischargePosition\t1\n#\nGROUP\t206\tPset_FanOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t78c95df0-f2d5-4b53-a897-86a6b8d08c2b\tPset_FanOccurrence.ApplicationOfFan[Type]\tTEXT\t\t206\t1\tPEnum_FanApplicationType\t1\nPARAM\t3c3d323d-20b2-4080-983a-fba3cad59b97\tPset_FanOccurrence.CoilPosition[Type]\tTEXT\t\t206\t1\tPEnum_FanCoilPosition\t1\nPARAM\tefd72789-15ed-46c9-b4e6-1e9604862e15\tPset_FanOccurrence.DischargeType[Type]\tTEXT\t\t206\t1\tPEnum_FanDischargeType\t1\nPARAM\tfdc964df-8a35-4e0e-8787-653416bdd1c8\tPset_FanOccurrence.FanMountingType[Type]\tTEXT\t\t206\t1\tPEnum_FanMountingType\t1\nPARAM\tec836df0-89f0-4171-ae51-0182f68244ce\tPset_FanOccurrence.FractionOfMotorHeatToAirStream[Type]\tNUMBER\t\t206\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\te0813554-6a2e-4aa3-99b1-e5c61e40e278\tPset_FanOccurrence.ImpellerDiameter[Type]\tLENGTH\t\t206\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9251940c-8840-4f88-a125-f60fc8ba1fc0\tPset_FanOccurrence.MotorPosition[Type]\tTEXT\t\t206\t1\tPEnum_FanMotorPosition\t1\n#\nGROUP\t207\tPset_FanPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6aa3fce9-fae3-4186-8d09-0411897af2db\tPset_FanPHistory.DischargePressureLoss[Type]\tMULTILINETEXT\t\t207\t1\tIfcTimeSeries\t1\nPARAM\tb6c6e214-7589-434b-8b9e-7e70d53fa3c3\tPset_FanPHistory.DischargeVelocity[Type]\tMULTILINETEXT\t\t207\t1\tIfcTimeSeries\t1\nPARAM\taccafe6b-14a3-4267-93e9-6fddc2847f80\tPset_FanPHistory.DrivePowerLoss[Type]\tMULTILINETEXT\t\t207\t1\tIfcTimeSeries\t1\nPARAM\tb4a94c4f-5cda-46c8-a536-86ab783b0dc5\tPset_FanPHistory.EfficiencyCurve[Type]\tMULTILINETEXT\t\t207\t1\tPropertyTableValue\t1\nPARAM\tf7bb7d6c-3aff-4e9b-a022-7756f5be6f12\tPset_FanPHistory.FanEfficiency[Type]\tMULTILINETEXT\t\t207\t1\tIfcTimeSeries\t1\nPARAM\tab8ce112-0772-4900-b94f-78d9d09448d1\tPset_FanPHistory.FanPowerRate[Type]\tMULTILINETEXT\t\t207\t1\tIfcTimeSeries\t1\nPARAM\ta01a4573-9eea-47f3-b263-533d790ce992\tPset_FanPHistory.FanRotationSpeed[Type]\tMULTILINETEXT\t\t207\t1\tIfcTimeSeries\t1\nPARAM\tb133b690-7c6c-4a21-9df0-adae97179009\tPset_FanPHistory.OverallEfficiency[Type]\tMULTILINETEXT\t\t207\t1\tIfcTimeSeries\t1\nPARAM\tf4bec7e0-51f6-492d-ad44-67f62662661c\tPset_FanPHistory.PressureCurve[Type]\tMULTILINETEXT\t\t207\t1\tPropertyTableValue\t1\nPARAM\t2012f034-f651-412d-ac3c-0b4fd2f72033\tPset_FanPHistory.ShaftPowerRate[Type]\tMULTILINETEXT\t\t207\t1\tIfcTimeSeries\t1\nPARAM\t77684b85-0fa9-4f8e-9aa6-396da5957ae1\tPset_FanPHistory.WheelTipSpeed[Type]\tMULTILINETEXT\t\t207\t1\tIfcTimeSeries\t1\n#\nGROUP\t208\tPset_FanTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t898192cb-9c5e-4148-8ed8-a7b917d05aca\tPset_FanTypeCommon.CapacityControlType[Type]\tTEXT\t\t208\t1\tPEnum_FanCapacityControlType\t1\nPARAM\te70cb649-1903-4d32-ad7f-4b2edb739ad9\tPset_FanTypeCommon.EfficiencyCurve[Type]\tMULTILINETEXT\t\t208\t1\tPropertyTableValue\t1\nPARAM\te513b780-22d1-44fb-9e39-e36a531ed9bf\tPset_FanTypeCommon.HousingMaterial[Type]\tMULTILINETEXT\t\t208\t1\tIfcMaterial\t1\nPARAM\t4a498388-eedf-4543-b93d-901f07182743\tPset_FanTypeCommon.MotorDriveType[Type]\tTEXT\t\t208\t1\tPEnum_FanMotorConnectionType\t1\nPARAM\t0afec59b-cafe-4d88-8761-6aa4826733e2\tPset_FanTypeCommon.NominalAirFlowRate[Type]\tNUMBER\t\t208\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tb17202de-4ebf-44ee-bc03-41fc1763f9d0\tPset_FanTypeCommon.NominalPowerRate[Type]\tNUMBER\t\t208\t1\tIfcPowerMeasure\t1\nPARAM\ta8c6c86e-73bf-4372-b4ae-c0aa9d55e540\tPset_FanTypeCommon.NominalRotationSpeed[Type]\tNUMBER\t\t208\t1\tIfcRotationalFrequencyMeasure\t1\nPARAM\tdaadde6b-ca10-4546-bef5-9be68203cb7a\tPset_FanTypeCommon.NominalStaticPressure[Type]\tNUMBER\t\t208\t1\tIfcPressureMeasure\t1\nPARAM\t81737135-efef-4844-9aff-4d78d069725c\tPset_FanTypeCommon.NominalTotalPressure[Type]\tNUMBER\t\t208\t1\tIfcPressureMeasure\t1\nPARAM\t6918da5a-7cfb-4038-b912-59b6194cd72a\tPset_FanTypeCommon.OperationalCriteria[Type]\tNUMBER\t\t208\t1\tIfcTimeMeasure\t1\nPARAM\t8ae70db8-a3e5-4d12-8e33-6b72948c7af5\tPset_FanTypeCommon.OperationTemperatureRange[Type]\tMULTILINETEXT\t\t208\t1\tPropertyBoundedValue\t1\nPARAM\t9625c23d-2848-43f6-800e-33610ce68495\tPset_FanTypeCommon.PressureCurve[Type]\tMULTILINETEXT\t\t208\t1\tPropertyTableValue\t1\nPARAM\t27fec5cf-a11d-4ec2-b8ce-f075ffd4bb66\tPset_FanTypeCommon.Reference[Type]\tTEXT\t\t208\t1\tIfcIdentifier\t1\nPARAM\t7406e870-1603-4468-9075-a1fb8006eba3\tPset_FanTypeCommon.Status[Type]\tTEXT\t\t208\t1\tPEnum_ElementStatus\t1\nPARAM\tc8fdf253-a95e-412a-8f7f-cb140d3f2bf1\tPset_FanTypeCommon.Weight[Type]\tNUMBER\t\t208\t1\tIfcMassMeasure\t1\nPARAM\t45aebad3-b118-48ec-bbd1-9f5a5ff3cd33\tPset_FanTypeCommon.WheelMaterial[Type]\tMULTILINETEXT\t\t208\t1\tIfcMaterial\t1\n#\nGROUP\t209\tPset_FanTypeSmokeControl\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdd6bcef2-caf2-48c1-9f7a-366465df8176\tPset_FanTypeSmokeControl.MaximumDesignTemperature[Type]\tNUMBER\t\t209\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t0b4f51ce-8e2a-46d2-8709-d7f0b39f967f\tPset_FanTypeSmokeControl.OperationalCriteria[Type]\tNUMBER\t\t209\t1\tIfcTimeMeasure\t1\nPARAM\td7ee2dc5-b342-4a22-801f-d20acce722b6\tPset_FanTypeSmokeControl.SmokeControlFlowrate[Type]\tNUMBER\t\t209\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t210\tPset_FastenerWeld\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb41aa474-6bb7-4964-9dda-c153eaa946b3\tPset_FastenerWeld.a[Type]\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf01f0922-2428-4ec5-ba5c-d9473807e182\tPset_FastenerWeld.c[Type]\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t866b9f65-e30e-482a-9006-2ab9b73ea111\tPset_FastenerWeld.d[Type]\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2eed70b9-d512-491a-930e-bcdff312a7c4\tPset_FastenerWeld.e[Type]\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4b137546-bca2-4212-a8a7-e6af3a2afcd7\tPset_FastenerWeld.Intermittent[Type]\tYESNO\t\t210\t1\tIfcBoolean\t1\nPARAM\teaaf51d4-5289-4471-b0e1-9602e4330aed\tPset_FastenerWeld.l[Type]\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t65f1a2b6-4cad-4057-bd2b-e66571648390\tPset_FastenerWeld.n[Type]\tINTEGER\t\t210\t1\tIfcCountMeasure\t1\nPARAM\t310caa61-2b3f-4edf-bb4c-684243890437\tPset_FastenerWeld.Process[Type]\tINTEGER\t\t210\t1\tIfcInteger\t1\nPARAM\t8aaac216-4078-4865-aa0d-1919fc81c7c2\tPset_FastenerWeld.ProcessName[Type]\tTEXT\t\t210\t1\tIfcLabel\t1\nPARAM\t0731d4e4-fa58-4076-a92a-fbae9ab7f848\tPset_FastenerWeld.s[Type]\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t510b3c43-753c-4d19-96f3-40ccde8fe538\tPset_FastenerWeld.Staggered[Type]\tYESNO\t\t210\t1\tIfcBoolean\t1\nPARAM\ta5055df2-e085-4f9c-9704-c2f03bf019f5\tPset_FastenerWeld.Surface1[Type]\tTEXT\t\t210\t1\tIfcLabel\t1\nPARAM\t2fc7d7b3-336c-4fec-a9c8-1ad9efb063ce\tPset_FastenerWeld.Surface2[Type]\tTEXT\t\t210\t1\tIfcLabel\t1\nPARAM\tb2c8ca5f-df63-442b-9659-93fb2c6f6801\tPset_FastenerWeld.Type1[Type]\tTEXT\t\t210\t1\tIfcLabel\t1\nPARAM\t78489e20-3138-4886-876b-1104af47fdf4\tPset_FastenerWeld.Type2[Type]\tTEXT\t\t210\t1\tIfcLabel\t1\nPARAM\t0709adc8-3d27-4ed4-b7af-9cef4cebddde\tPset_FastenerWeld.z[Type]\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t211\tPset_FilterPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t028b583c-0227-4e49-bf3b-3db51dc708aa\tPset_FilterPHistory.CountedEfficiency[Type]\tMULTILINETEXT\t\t211\t1\tIfcTimeSeries\t1\nPARAM\t4b229224-4762-42cc-864b-750e07af4455\tPset_FilterPHistory.ParticleMassHolding[Type]\tMULTILINETEXT\t\t211\t1\tIfcTimeSeries\t1\nPARAM\t9c238c11-f206-4994-ba98-c7b48768425d\tPset_FilterPHistory.WeightedEfficiency[Type]\tMULTILINETEXT\t\t211\t1\tIfcTimeSeries\t1\n#\nGROUP\t212\tPset_FilterTypeAirParticleFilter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta121e93d-c2a8-49be-92d8-d6e40438d057\tPset_FilterTypeAirParticleFilter.AirParticleFilterType[Type]\tTEXT\t\t212\t1\tPEnum_FilterAirParticleFilterType\t1\nPARAM\tb5d0e27f-2450-4141-b8fd-673617aa7e62\tPset_FilterTypeAirParticleFilter.CountedEfficiencyCurve[Type]\tMULTILINETEXT\t\t212\t1\tPropertyTableValue\t1\nPARAM\t713fa641-34c5-4a37-ac6f-16b6460b675e\tPset_FilterTypeAirParticleFilter.DustHoldingCapacity[Type]\tNUMBER\t\t212\t1\tIfcMassMeasure\t1\nPARAM\t5cb0dcda-e21f-4a4c-8fd6-bf6784cdde33\tPset_FilterTypeAirParticleFilter.FaceSurfaceArea[Type]\tAREA\t\t212\t1\tIfcAreaMeasure\t1\nPARAM\tf41877ab-4e93-439b-970c-913d9271f072\tPset_FilterTypeAirParticleFilter.FrameMaterial[Type]\tMULTILINETEXT\t\t212\t1\tIfcMaterialDefinition\t1\nPARAM\t1f8582ea-f0c0-4b22-b7e5-50e4a1818730\tPset_FilterTypeAirParticleFilter.MediaExtendedArea[Type]\tAREA\t\t212\t1\tIfcAreaMeasure\t1\nPARAM\tc4bcfc71-7428-4385-a0de-b388349e6ae3\tPset_FilterTypeAirParticleFilter.MediaMaterial[Type]\tMULTILINETEXT\t\t212\t1\tIfcMaterial\t1\nPARAM\te845d8e9-f681-498c-86e9-f6265eeefaad\tPset_FilterTypeAirParticleFilter.NominalCountedEfficiency[Type]\tNUMBER\t\t212\t1\tIfcReal\t1\nPARAM\t1d801f9e-c688-46ed-bd41-840b57fed416\tPset_FilterTypeAirParticleFilter.NominalWeightedEfficiency[Type]\tNUMBER\t\t212\t1\tIfcReal\t1\nPARAM\te58593e2-aef1-4acf-aa01-ebe84fefe9e3\tPset_FilterTypeAirParticleFilter.PressureDropCurve[Type]\tMULTILINETEXT\t\t212\t1\tPropertyTableValue\t1\nPARAM\tec4cb485-76bc-4901-b2e6-848dd40b464a\tPset_FilterTypeAirParticleFilter.SeparationType[Type]\tTEXT\t\t212\t1\tPEnum_FilterAirParticleFilterSeparationType\t1\nPARAM\t6248357d-939d-4993-926e-1000651d2830\tPset_FilterTypeAirParticleFilter.WeightedEfficiencyCurve[Type]\tMULTILINETEXT\t\t212\t1\tPropertyTableValue\t1\n#\nGROUP\t213\tPset_FilterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t27ea7232-cdc3-4ebd-bb95-5e8ffe8ae802\tPset_FilterTypeCommon.FinalResistance[Type]\tNUMBER\t\t213\t1\tIfcPressureMeasure\t1\nPARAM\t16108c78-346c-41ec-af08-c69766acd7c5\tPset_FilterTypeCommon.FlowRateRange[Type]\tMULTILINETEXT\t\t213\t1\tPropertyBoundedValue\t1\nPARAM\t2df85bca-a274-401e-919f-1cbcdf5c2b08\tPset_FilterTypeCommon.InitialResistance[Type]\tNUMBER\t\t213\t1\tIfcPressureMeasure\t1\nPARAM\tcfbdeab1-1239-4e35-b67d-d1665dc53414\tPset_FilterTypeCommon.MediaMaterial[Type]\tMULTILINETEXT\t\t213\t1\tIfcMaterial\t1\nPARAM\t28d9acfa-acdb-4f8c-bc55-299b60d6becf\tPset_FilterTypeCommon.NominalFilterFaceVelocity[Type]\tNUMBER\t\t213\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t010bd9a9-99ca-44a2-84ae-165c756ea885\tPset_FilterTypeCommon.NominalFlowrate[Type]\tNUMBER\t\t213\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t1f9d172e-0cc6-44d9-8f29-8da41139e99a\tPset_FilterTypeCommon.NominalMediaSurfaceVelocity[Type]\tNUMBER\t\t213\t1\tIfcLinearVelocityMeasure\t1\nPARAM\ta09ddf90-65ea-4b6b-b254-1edadb23eff8\tPset_FilterTypeCommon.NominalParticleGeometricMeanDiameter[Type]\tLENGTH\t\t213\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7bc8b394-6b07-465f-92bd-5cf3d1d6133f\tPset_FilterTypeCommon.NominalParticleGeometricStandardDeviation[Type]\tNUMBER\t\t213\t1\tIfcReal\t1\nPARAM\tff1be252-6ecd-4e1b-861b-030c9fcad7ea\tPset_FilterTypeCommon.NominalPressureDrop[Type]\tNUMBER\t\t213\t1\tIfcPressureMeasure\t1\nPARAM\t047d467c-089d-4781-9d99-cb463fc685e5\tPset_FilterTypeCommon.OperationTemperatureRange[Type]\tMULTILINETEXT\t\t213\t1\tPropertyBoundedValue\t1\nPARAM\t3dd76bc5-69e1-4e83-87ac-e2539c80f285\tPset_FilterTypeCommon.Reference[Type]\tTEXT\t\t213\t1\tIfcIdentifier\t1\nPARAM\t858abe79-a5f4-4f4d-bf77-0e5b8b371af7\tPset_FilterTypeCommon.Status[Type]\tTEXT\t\t213\t1\tPEnum_ElementStatus\t1\nPARAM\t843d4057-d8bd-4ea5-93d3-3488cd40dfa8\tPset_FilterTypeCommon.Weight[Type]\tNUMBER\t\t213\t1\tIfcMassMeasure\t1\n#\nGROUP\t214\tPset_FilterTypeCompressedAirFilter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a16f104-3d2a-4522-9e2a-ec3fc00436aa\tPset_FilterTypeCompressedAirFilter.AutomaticCondensateDischarge[Type]\tYESNO\t\t214\t1\tIfcBoolean\t1\nPARAM\tcf240f17-7daa-4f14-ae85-dee7fc8e8faf\tPset_FilterTypeCompressedAirFilter.CloggingIndicator[Type]\tYESNO\t\t214\t1\tIfcBoolean\t1\nPARAM\t052ddd96-7478-457f-9315-9c07215b5efc\tPset_FilterTypeCompressedAirFilter.CompressedAirFilterType[Type]\tTEXT\t\t214\t1\tPEnum_CompressedAirFilterType\t1\nPARAM\t4f542a5d-7403-4db1-b703-08b3d9fdfdde\tPset_FilterTypeCompressedAirFilter.OperationPressureMax[Type]\tNUMBER\t\t214\t1\tIfcPressureMeasure\t1\nPARAM\t29fef582-6a27-46e7-88c0-cbe8ba473414\tPset_FilterTypeCompressedAirFilter.ParticleAbsorptionCurve[Type]\tMULTILINETEXT\t\t214\t1\tPropertyTableValue\t1\n#\nGROUP\t215\tPset_FilterTypeWaterFilter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t232753e8-26e6-429a-8e00-7591d518dc9e\tPset_FilterTypeWaterFilter.WaterFilterType[Type]\tTEXT\t\t215\t1\tPEnum_FilterWaterFilterType\t1\n#\nGROUP\t216\tPset_FireRatingProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t107b35cc-c3ee-46ee-b3bd-5a6212c6ec33\tPset_FireRatingProperties.FireResistanceRating[Type]\tTEXT\t\t216\t1\tIfcLabel\t1\nPARAM\t00d8d8a1-f432-4d5b-9f25-32233096ba87\tPset_FireRatingProperties.IsCombustible[Type]\tYESNO\t\t216\t1\tIfcBoolean\t1\nPARAM\t4cd8886a-bb49-4fda-a493-946155d39c1f\tPset_FireRatingProperties.SurfaceSpreadOfFlame[Type]\tTEXT\t\t216\t1\tIfcLabel\t1\n#\nGROUP\t217\tPset_FireSuppressionTerminalTypeBreechingInlet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a0ccf59-58ab-4bbc-ae02-68bf9903eb5c\tPset_FireSuppressionTerminalTypeBreechingInlet.BreechingInletType[Type]\tTEXT\t\t217\t1\tPEnum_BreechingInletType\t1\nPARAM\tf4d7719a-2307-4d9e-821f-5d5bfb013227\tPset_FireSuppressionTerminalTypeBreechingInlet.CouplingType[Type]\tTEXT\t\t217\t1\tPEnum_BreechingInletCouplingType\t1\nPARAM\t0aeb71b0-cfe3-4017-ac43-6073b40f16c4\tPset_FireSuppressionTerminalTypeBreechingInlet.HasCaps[Type]\tYESNO\t\t217\t1\tIfcBoolean\t1\nPARAM\t8bffa8ca-8c0b-4052-a089-ffc85323ef40\tPset_FireSuppressionTerminalTypeBreechingInlet.InletDiameter[Type]\tLENGTH\t\t217\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5cd92a52-6bde-40a1-93d3-439e1babe954\tPset_FireSuppressionTerminalTypeBreechingInlet.Material[Type]\tMULTILINETEXT\t\t217\t1\tIfcMaterial\t1\nPARAM\t2f333449-fdb8-4563-b719-b6640c466286\tPset_FireSuppressionTerminalTypeBreechingInlet.OutletDiameter[Type]\tLENGTH\t\t217\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t218\tPset_FireSuppressionTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7786ed73-50f2-456e-8409-cf0d252c486f\tPset_FireSuppressionTerminalTypeCommon.Reference[Type]\tTEXT\t\t218\t1\tIfcIdentifier\t1\nPARAM\t1a515565-8a06-4b07-bc07-0afc3389b5cd\tPset_FireSuppressionTerminalTypeCommon.Status[Type]\tTEXT\t\t218\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t219\tPset_FireSuppressionTerminalTypeFireHydrant\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8db8d979-5673-40e5-939f-a10ce0bb29e4\tPset_FireSuppressionTerminalTypeFireHydrant.BodyColor[Type]\tTEXT\t\t219\t1\tIfcText\t1\nPARAM\t91b786b5-710e-46d6-8875-699dc0de51d2\tPset_FireSuppressionTerminalTypeFireHydrant.CapColor[Type]\tTEXT\t\t219\t1\tIfcText\t1\nPARAM\t0bbbc746-6b85-4cfc-a2d7-b3282fcee527\tPset_FireSuppressionTerminalTypeFireHydrant.DischargeFlowRate[Type]\tNUMBER\t\t219\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t2e846988-0c84-4c76-b44c-ee027561ce70\tPset_FireSuppressionTerminalTypeFireHydrant.FireHydrantType[Type]\tTEXT\t\t219\t1\tPEnum_FireHydrantType\t1\nPARAM\t1aa15724-5d83-4e2e-8338-e7a3fd13597f\tPset_FireSuppressionTerminalTypeFireHydrant.FlowClass[Type]\tTEXT\t\t219\t1\tIfcLabel\t1\nPARAM\tff3500c7-f551-42f9-909e-c5da70cc00c7\tPset_FireSuppressionTerminalTypeFireHydrant.HoseConnectionSize[Type]\tLENGTH\t\t219\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t589a47d3-8498-4a6a-8ce3-be217ab9514b\tPset_FireSuppressionTerminalTypeFireHydrant.NumberOfHoseConnections[Type]\tINTEGER\t\t219\t1\tIfcInteger\t1\nPARAM\tc499f2fe-4d9d-4450-a01c-3645b72dbf8e\tPset_FireSuppressionTerminalTypeFireHydrant.PressureRating[Type]\tNUMBER\t\t219\t1\tIfcPressureMeasure\t1\nPARAM\t03e4a769-12f7-44b1-94da-875cd9a86307\tPset_FireSuppressionTerminalTypeFireHydrant.PumperConnectionSize[Type]\tLENGTH\t\t219\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tba9a3c4d-1c1f-445e-b2c4-a6fc2be10a1a\tPset_FireSuppressionTerminalTypeFireHydrant.WaterIsPotable[Type]\tYESNO\t\t219\t1\tIfcBoolean\t1\n#\nGROUP\t220\tPset_FireSuppressionTerminalTypeHoseReel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc61631af-0dd8-4cd0-8046-6972fbb3870b\tPset_FireSuppressionTerminalTypeHoseReel.ClassificationAuthority[Type]\tTEXT\t\t220\t1\tIfcLabel\t1\nPARAM\te7fff2bb-7295-44bc-8d93-e8a016f3808b\tPset_FireSuppressionTerminalTypeHoseReel.ClassOfService[Type]\tTEXT\t\t220\t1\tIfcLabel\t1\nPARAM\td327b5cc-e325-4924-a3b6-71d822e34f14\tPset_FireSuppressionTerminalTypeHoseReel.HoseDiameter[Type]\tLENGTH\t\t220\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td6e7c7f2-2581-4da7-bd0c-226d133ee210\tPset_FireSuppressionTerminalTypeHoseReel.HoseLength[Type]\tLENGTH\t\t220\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taac645e3-72a5-45fa-8af6-d31f341b9fb1\tPset_FireSuppressionTerminalTypeHoseReel.HoseNozzleType[Type]\tTEXT\t\t220\t1\tPEnum_HoseNozzleType\t1\nPARAM\tb6eed0bf-32e1-4915-8122-acf1b2ef2961\tPset_FireSuppressionTerminalTypeHoseReel.HoseReelMountingType[Type]\tTEXT\t\t220\t1\tPEnum_HoseReelMountingType\t1\nPARAM\tf51ccfff-31e8-4499-b930-0a1be4432a22\tPset_FireSuppressionTerminalTypeHoseReel.HoseReelType[Type]\tTEXT\t\t220\t1\tPEnum_HoseReelType\t1\nPARAM\t2188bf3d-f376-491a-806b-a89fe45bb3dd\tPset_FireSuppressionTerminalTypeHoseReel.InletConnectionSize[Type]\tLENGTH\t\t220\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t221\tPset_FireSuppressionTerminalTypeSprinkler\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb2920afb-cc34-4058-80dc-3dff758cb220\tPset_FireSuppressionTerminalTypeSprinkler.Activation[Type]\tTEXT\t\t221\t1\tPEnum_SprinklerActivation\t1\nPARAM\t78501c38-29a0-4a1d-aa11-31fcec8f0746\tPset_FireSuppressionTerminalTypeSprinkler.ActivationTemperature[Type]\tNUMBER\t\t221\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tc747036d-3b3d-4638-8bda-1e472cfe6363\tPset_FireSuppressionTerminalTypeSprinkler.BulbLiquidColor[Type]\tTEXT\t\t221\t1\tPEnum_SprinklerBulbLiquidColor\t1\nPARAM\t682c3307-f2cc-4a2d-b357-650f0d95194c\tPset_FireSuppressionTerminalTypeSprinkler.ConnectionSize[Type]\tLENGTH\t\t221\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8b3285cf-d876-4821-8d88-b26e5cbd1fa2\tPset_FireSuppressionTerminalTypeSprinkler.CoverageArea[Type]\tAREA\t\t221\t1\tIfcAreaMeasure\t1\nPARAM\ta912fc57-7893-4e77-ab3f-a08f9ac8cb83\tPset_FireSuppressionTerminalTypeSprinkler.DeflectorMaterial[Type]\tMULTILINETEXT\t\t221\t1\tIfcMaterial\t1\nPARAM\t7fb3fffd-c391-4fe9-82e1-ed67ea195359\tPset_FireSuppressionTerminalTypeSprinkler.DischargeCoefficient[Type]\tNUMBER\t\t221\t1\tIfcReal\t1\nPARAM\t4eb20c3d-15e0-4c6c-9cb2-9e849f74e328\tPset_FireSuppressionTerminalTypeSprinkler.DischargeFlowRate[Type]\tNUMBER\t\t221\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t7fb76701-e0ef-4b3f-8d84-52a6ae6d533b\tPset_FireSuppressionTerminalTypeSprinkler.FrameMaterial[Type]\tMULTILINETEXT\t\t221\t1\tIfcMaterial\t1\nPARAM\t8e86bc7b-8d99-44d2-90a5-a25630e326c6\tPset_FireSuppressionTerminalTypeSprinkler.HasDeflector[Type]\tYESNO\t\t221\t1\tIfcBoolean\t1\nPARAM\t825e0f64-b577-43af-892b-edda11334add\tPset_FireSuppressionTerminalTypeSprinkler.MaximumWorkingPressure[Type]\tNUMBER\t\t221\t1\tIfcPressureMeasure\t1\nPARAM\t8675077d-a06a-4def-86ce-e2bd2cb0137b\tPset_FireSuppressionTerminalTypeSprinkler.ResidualFlowingPressure[Type]\tNUMBER\t\t221\t1\tIfcPressureMeasure\t1\nPARAM\taa52ad83-0371-4627-92f4-a520ebcbeafd\tPset_FireSuppressionTerminalTypeSprinkler.Response[Type]\tTEXT\t\t221\t1\tPEnum_SprinklerResponse\t1\nPARAM\t504ac778-b3b3-4a23-8de7-755216f2416b\tPset_FireSuppressionTerminalTypeSprinkler.SprinklerType[Type]\tTEXT\t\t221\t1\tPEnum_SprinklerType\t1\n#\nGROUP\t222\tPset_FlowControllerDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7f8d841d-7c43-4ed0-be71-66841f573a94\tPset_FlowControllerDamper.SizingMethod[Type]\tTEXT\t\t222\t1\tPEnum_DamperSizingMethod\t1\n#\nGROUP\t223\tPset_FlowControllerFlowMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t164b3cc9-b106-4298-b903-cad1927abd71\tPset_FlowControllerFlowMeter.Purpose[Type]\tTEXT\t\t223\t1\tPEnum_FlowMeterPurpose\t1\n#\nGROUP\t224\tPset_FlowFittingDuctFitting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a700eab-5d52-45ce-9793-2a1f49c187b9\tPset_FlowFittingDuctFitting.AbsoluteRoughnessFactor[Type]\tLENGTH\t\t224\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td2b10159-383f-4262-b6b2-939f503bbd70\tPset_FlowFittingDuctFitting.Color[Type]\tTEXT\t\t224\t1\tIfcLabel\t1\nPARAM\t19fb6a64-eb5e-419b-aec3-54e11b2b2156\tPset_FlowFittingDuctFitting.HasLiner[Type]\tYESNO\t\t224\t1\tIfcBoolean\t1\n#\nGROUP\t225\tPset_FlowFittingPipeFitting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0fdbd1a3-6eab-4ccc-8950-27a264834542\tPset_FlowFittingPipeFitting.Color[Type]\tTEXT\t\t225\t1\tIfcLabel\t1\nPARAM\tfc443084-667b-4c49-b51e-e4421c7ce7e8\tPset_FlowFittingPipeFitting.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t225\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t226\tPset_FlowInstrumentPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4914c96e-abd4-4097-8fa3-100b49064b76\tPset_FlowInstrumentPHistory.Quality[Type]\tMULTILINETEXT\t\t226\t1\tIfcTimeSeries\t1\nPARAM\tbdc554db-485c-4b2a-a82a-a126d32a9440\tPset_FlowInstrumentPHistory.Status[Type]\tMULTILINETEXT\t\t226\t1\tIfcTimeSeries\t1\nPARAM\t72940401-c17e-4da1-88d3-402e91dfc75c\tPset_FlowInstrumentPHistory.Value[Type]\tMULTILINETEXT\t\t226\t1\tIfcTimeSeries\t1\n#\nGROUP\t227\tPset_FlowInstrumentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t124894b1-294f-4221-b1d7-135fffbeebc4\tPset_FlowInstrumentTypeCommon.Reference[Type]\tTEXT\t\t227\t1\tIfcIdentifier\t1\nPARAM\te3a150c8-b346-4244-af31-297e096fbbf7\tPset_FlowInstrumentTypeCommon.Status[Type]\tTEXT\t\t227\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t228\tPset_FlowInstrumentTypePressureGauge\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t61652f59-22d7-47bf-87dc-97776219cf9a\tPset_FlowInstrumentTypePressureGauge.DisplaySize[Type]\tLENGTH\t\t228\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t256ecd21-fce6-4ecb-b1c8-03da42c085ee\tPset_FlowInstrumentTypePressureGauge.PressureGaugeType[Type]\tTEXT\t\t228\t1\tPEnum_PressureGaugeType\t1\n#\nGROUP\t229\tPset_FlowInstrumentTypeThermometer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7f0b2315-92dc-4b46-a103-203fcea670fa\tPset_FlowInstrumentTypeThermometer.DisplaySize[Type]\tLENGTH\t\t229\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5f290c7e-6c80-43e5-95f1-a600a8e7fe50\tPset_FlowInstrumentTypeThermometer.ThermometerType[Type]\tTEXT\t\t229\t1\tPEnum_ThermometerType\t1\n#\nGROUP\t230\tPset_FlowMeterOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t34b265b5-7e6e-4eba-ad1e-61e9a6ce7c6a\tPset_FlowMeterOccurrence.Purpose[Type]\tTEXT\t\t230\t1\tPEnum_FlowMeterPurpose\t1\n#\nGROUP\t231\tPset_FlowMeterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t939d02c4-4bb3-4942-a043-a02be267c1ae\tPset_FlowMeterTypeCommon.IsMain[Type]\tYESNO\t\t231\t1\tIfcBoolean\t1\nPARAM\t3a08029a-b2a5-4519-bc82-13e1b4cb8555\tPset_FlowMeterTypeCommon.ReadOutType[Type]\tTEXT\t\t231\t1\tPEnum_MeterReadOutType\t1\nPARAM\te072de8c-2423-48ac-a45d-67bbb5219cf1\tPset_FlowMeterTypeCommon.Reference[Type]\tTEXT\t\t231\t1\tIfcIdentifier\t1\nPARAM\t4b450c17-4792-4c06-9965-7d0c15cdb546\tPset_FlowMeterTypeCommon.RemoteReading[Type]\tYESNO\t\t231\t1\tIfcBoolean\t1\nPARAM\t905f677c-bc3c-481d-8cef-5ce1f897667a\tPset_FlowMeterTypeCommon.Status[Type]\tTEXT\t\t231\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t232\tPset_FlowMeterTypeEnergyMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t52b1134f-4641-43ab-9556-d41d4fe581e1\tPset_FlowMeterTypeEnergyMeter.ConnectionSize[Type]\tLENGTH\t\t232\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6f903b74-4bbc-40e3-b04d-a3ee43bbda73\tPset_FlowMeterTypeEnergyMeter.MaximumCurrent[Type]\tNUMBER\t\t232\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t93c2ff23-f4f1-403a-9dd5-8eb4fd858c65\tPset_FlowMeterTypeEnergyMeter.MultipleTarriff[Type]\tYESNO\t\t232\t1\tIfcBoolean\t1\nPARAM\t362e61e0-1817-4bed-8820-38057012ed2c\tPset_FlowMeterTypeEnergyMeter.NominalCurrent[Type]\tNUMBER\t\t232\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t233\tPset_FlowMeterTypeGasMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta74457d6-0754-4faf-8b1f-00f106929842\tPset_FlowMeterTypeGasMeter.ConnectionSize[Type]\tLENGTH\t\t233\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td2fc9a97-86f6-4cc3-9151-c5e9969d9ced\tPset_FlowMeterTypeGasMeter.GasType[Type]\tTEXT\t\t233\t1\tPEnum_GasType\t1\nPARAM\teadada3d-5839-4f6f-ba05-386a6c91591e\tPset_FlowMeterTypeGasMeter.MaximumFlowRate[Type]\tNUMBER\t\t233\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tb913bb4a-67a5-46cd-b8f1-972ca3ee3aa7\tPset_FlowMeterTypeGasMeter.MaximumPressureLoss[Type]\tNUMBER\t\t233\t1\tIfcPressureMeasure\t1\n#\nGROUP\t234\tPset_FlowMeterTypeOilMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf742e102-a7e6-4cb8-8e51-3fd77773b9c3\tPset_FlowMeterTypeOilMeter.ConnectionSize[Type]\tLENGTH\t\t234\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t29e4ee8e-7c0f-4423-9c9f-da8b655dd094\tPset_FlowMeterTypeOilMeter.MaximumFlowRate[Type]\tNUMBER\t\t234\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t235\tPset_FlowMeterTypeWaterMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4e455dbe-b753-496c-9618-a2d2417da2a7\tPset_FlowMeterTypeWaterMeter.BackflowPreventerType[Type]\tTEXT\t\t235\t1\tPEnum_BackflowPreventerType\t1\nPARAM\t19884e6a-7624-4f8d-b306-1df85f0bf773\tPset_FlowMeterTypeWaterMeter.ConnectionSize[Type]\tLENGTH\t\t235\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5649bfb4-18a1-4656-b8c9-bdfcc4ace8f6\tPset_FlowMeterTypeWaterMeter.MaximumFlowRate[Type]\tNUMBER\t\t235\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t4b8c9994-6da3-4d13-9225-2deddabad01d\tPset_FlowMeterTypeWaterMeter.MaximumPressureLoss[Type]\tNUMBER\t\t235\t1\tIfcPressureMeasure\t1\nPARAM\tb67c7e47-8268-4ca9-a023-34b1654a90d4\tPset_FlowMeterTypeWaterMeter.Type[Type]\tTEXT\t\t235\t1\tPEnum_WaterMeterType\t1\n#\nGROUP\t236\tPset_FlowMovingDeviceCompressor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2a95632f-df69-48c1-afb0-f3927c81610b\tPset_FlowMovingDeviceCompressor.ImpellerDiameter[Type]\tLENGTH\t\t236\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t237\tPset_FlowMovingDeviceFan\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9571ffe5-4201-480f-8820-4b098caa5b01\tPset_FlowMovingDeviceFan.ApplicationOfFan[Type]\tTEXT\t\t237\t1\tPEnum_FanApplicationType\t1\nPARAM\tcf88aa05-419e-4ad2-8828-41610f819a00\tPset_FlowMovingDeviceFan.CoilPosition[Type]\tTEXT\t\t237\t1\tPEnum_FanCoilPosition\t1\nPARAM\tc84bdae8-59c6-4780-9ff5-604ffc7db879\tPset_FlowMovingDeviceFan.DischargeType[Type]\tTEXT\t\t237\t1\tPEnum_FanDischargeType\t1\nPARAM\t647af7e7-e9fd-4623-a851-9ff9a40c849b\tPset_FlowMovingDeviceFan.FanMountingType[Type]\tTEXT\t\t237\t1\tPEnum_FanMountingType\t1\nPARAM\tf77aa74e-7161-4004-8eed-3bf74a1f497c\tPset_FlowMovingDeviceFan.FractionOfMotorHeatToAirStream[Type]\tNUMBER\t\t237\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tebeaaf70-ceb3-4371-80fa-22960e545bec\tPset_FlowMovingDeviceFan.ImpellerDiameter[Type]\tLENGTH\t\t237\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb96170a0-f17c-45ef-af89-0724f5dcb55f\tPset_FlowMovingDeviceFan.MotorPosition[Type]\tTEXT\t\t237\t1\tPEnum_FanMotorPosition\t1\n#\nGROUP\t238\tPset_FlowMovingDeviceFanCentrifugal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc29f59f5-b6d8-40a0-bd48-294e16b958c2\tPset_FlowMovingDeviceFanCentrifugal.Arrangement[Type]\tTEXT\t\t238\t1\tPEnum_CentrifugalFanArrangement\t1\nPARAM\t0937484f-8545-44c0-8a24-252dcc222334\tPset_FlowMovingDeviceFanCentrifugal.DirectionOfRotation[Type]\tTEXT\t\t238\t1\tPEnum_CentrifugalFanRotation\t1\nPARAM\te825563d-2a91-46b8-a471-48785e5b3c42\tPset_FlowMovingDeviceFanCentrifugal.DischargePosition[Type]\tTEXT\t\t238\t1\tPEnum_CentrifugalFanDischargePosition\t1\n#\nGROUP\t239\tPset_FlowMovingDevicePump\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf27e1ee4-64b0-4193-8658-b0bb50a9f438\tPset_FlowMovingDevicePump.BaseType[Type]\tTEXT\t\t239\t1\tPEnum_PumpBaseType\t1\nPARAM\t7c90d525-01f3-4b16-bf65-ab0a5f583bdb\tPset_FlowMovingDevicePump.DriveConnectionType[Type]\tTEXT\t\t239\t1\tPEnum_PumpDriveConnectionType\t1\nPARAM\t736125f3-43be-49fc-9995-eb0ff84a243a\tPset_FlowMovingDevicePump.ImpellerDiameter[Type]\tLENGTH\t\t239\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t240\tPset_FlowSegmentDuctSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdf6e2cb9-fb33-4cd5-95ef-abc6e2cb84f8\tPset_FlowSegmentDuctSegment.Color[Type]\tTEXT\t\t240\t1\tIfcLabel\t1\nPARAM\t7c36f5c0-591f-4cfd-a384-fc1cac2db551\tPset_FlowSegmentDuctSegment.HasLiner[Type]\tYESNO\t\t240\t1\tIfcBoolean\t1\nPARAM\t6daa57e0-7fb3-46a0-9e08-4a30409cd524\tPset_FlowSegmentDuctSegment.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t240\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf7bc6364-5edc-416b-9c2f-5b48d29b541a\tPset_FlowSegmentDuctSegment.Length[Type]\tLENGTH\t\t240\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1cf8558a-8d9f-4b82-a799-7bb2faa49e5c\tPset_FlowSegmentDuctSegment.MaterialThickness[Type]\tLENGTH\t\t240\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t241\tPset_FlowSegmentPipeSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb063f9d4-7d28-491e-b48c-7c9af9696705\tPset_FlowSegmentPipeSegment.Color[Type]\tTEXT\t\t241\t1\tIfcLabel\t1\nPARAM\t30c3fa75-d43e-46a9-88fa-d6cc4868bc9f\tPset_FlowSegmentPipeSegment.Gradient[Type]\tNUMBER\t\t241\t1\tIfcPositiveRatioMeasure\t1\nPARAM\te44beeec-4d2b-47aa-9495-874b08cf5124\tPset_FlowSegmentPipeSegment.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t241\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc92ef8d9-d90e-4725-a388-496d163a7c37\tPset_FlowSegmentPipeSegment.InvertElevation[Type]\tLENGTH\t\t241\t1\tIfcLengthMeasure\t1\nPARAM\t90d89e12-4be5-42d0-96bd-61a1bbb24fa6\tPset_FlowSegmentPipeSegment.Length[Type]\tLENGTH\t\t241\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t242\tPset_FlowStorageDeviceTank\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2ddcbbeb-fb9a-4009-b571-bd41a8a105fe\tPset_FlowStorageDeviceTank.HasLadder[Type]\tYESNO\t\t242\t1\tIfcBoolean\t1\nPARAM\t3716d25c-865c-4201-8432-6f9a70aa5589\tPset_FlowStorageDeviceTank.HasVisualIndicator[Type]\tYESNO\t\t242\t1\tIfcBoolean\t1\nPARAM\t508370d4-92e3-4f76-a9d3-5cc9840f5390\tPset_FlowStorageDeviceTank.TankComposition[Type]\tTEXT\t\t242\t1\tPEnum_TankComposition\t1\n#\nGROUP\t243\tPset_FlowTerminalAirTerminal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t987db834-ce2f-4fef-a69c-e6353f00cdd8\tPset_FlowTerminalAirTerminal.AirflowType[Type]\tTEXT\t\t243\t1\tPEnum_AirTerminalAirflowType\t1\nPARAM\t54cbcfc9-cfee-4b10-9fca-a0ab29735300\tPset_FlowTerminalAirTerminal.Location[Type]\tTEXT\t\t243\t1\tPEnum_AirTerminalLocation\t1\n#\nGROUP\t244\tPset_FootingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1fd566f4-f67c-4c10-ac53-4227a39672cd\tPset_FootingCommon.LoadBearing[Type]\tYESNO\t\t244\t1\tIfcBoolean\t1\nPARAM\teafbfcfd-8eb8-46b6-9ea2-f396a5bb6690\tPset_FootingCommon.Reference[Type]\tTEXT\t\t244\t1\tIfcIdentifier\t1\nPARAM\t48a0f7ef-e10b-4964-aeaa-3495b82ec393\tPset_FootingCommon.Status[Type]\tTEXT\t\t244\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t245\tPset_FurnitureTypeChair\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6efbe270-22e0-4583-ab00-793faf637609\tPset_FurnitureTypeChair.HighestSeatingHeight[Type]\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc40d6ba8-6125-48fc-90d9-484a46d2624f\tPset_FurnitureTypeChair.LowestSeatingHeight[Type]\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6fd0ed93-cb82-4c66-8f5d-be197caf0470\tPset_FurnitureTypeChair.SeatingHeight[Type]\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t246\tPset_FurnitureTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0f4c8588-b535-43d8-865c-9fdaccb2fb10\tPset_FurnitureTypeCommon.Description[Type]\tTEXT\t\t246\t1\tIfcText\t1\nPARAM\t86a91177-2035-48b9-9b6c-10e1a8b05007\tPset_FurnitureTypeCommon.IsBuiltIn[Type]\tYESNO\t\t246\t1\tIfcBoolean\t1\nPARAM\t538eecab-638c-4c77-8166-6a66a2dd29dc\tPset_FurnitureTypeCommon.MainColor[Type]\tTEXT\t\t246\t1\tIfcLabel\t1\nPARAM\tdfb711a6-e61f-487e-9651-c729c1b5cd07\tPset_FurnitureTypeCommon.NominalDepth[Type]\tLENGTH\t\t246\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta161037b-5d26-4b31-a92c-70fa2464a393\tPset_FurnitureTypeCommon.NominalHeight[Type]\tLENGTH\t\t246\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1ae346ee-1b99-4681-a40a-c3d5164e44fe\tPset_FurnitureTypeCommon.NominalLength[Type]\tLENGTH\t\t246\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t23c081ab-30c8-4d3a-bd88-91e5f51e6767\tPset_FurnitureTypeCommon.Reference[Type]\tTEXT\t\t246\t1\tIfcIdentifier\t1\nPARAM\t77e811dc-d111-42c0-8b0d-ad67581c6546\tPset_FurnitureTypeCommon.Status[Type]\tTEXT\t\t246\t1\tPEnum_ElementStatus\t1\nPARAM\t3b029b07-d01e-4884-8e82-6dbaaddd1034\tPset_FurnitureTypeCommon.Style[Type]\tTEXT\t\t246\t1\tIfcLabel\t1\n#\nGROUP\t247\tPset_FurnitureTypeDesk\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7b027e8a-0181-4e2a-8959-6dfc38b47571\tPset_FurnitureTypeDesk.WorksurfaceArea[Type]\tAREA\t\t247\t1\tIfcAreaMeasure\t1\n#\nGROUP\t248\tPset_FurnitureTypeFileCabinet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t179bd4c4-7687-497c-ae1e-477fb38ccea2\tPset_FurnitureTypeFileCabinet.WithLock[Type]\tYESNO\t\t248\t1\tIfcBoolean\t1\n#\nGROUP\t249\tPset_FurnitureTypeTable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc17a9285-2e76-43ce-89c0-f75556d8e9e2\tPset_FurnitureTypeTable.NumberOfChairs[Type]\tINTEGER\t\t249\t1\tIfcInteger\t1\nPARAM\tf875507c-5200-42e9-b73c-5b9f830052d1\tPset_FurnitureTypeTable.WorksurfaceArea[Type]\tAREA\t\t249\t1\tIfcAreaMeasure\t1\n#\nGROUP\t250\tPset_GasTerminalPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6e7333d1-6f47-468d-985e-337f990826d9\tPset_GasTerminalPHistory.GasFlowRate[Type]\tNUMBER\t\t250\t1\tIfcReal\t1\n#\nGROUP\t251\tPset_GasTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t501190fb-1b45-463b-84d4-3bd52c2a7d84\tPset_GasTerminalTypeCommon.GasFlowRateRange[Type]\tMULTILINETEXT\t\t251\t1\tPropertyBoundedValue\t1\n#\nGROUP\t252\tPset_GasTerminalTypeGasAppliance\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td31c39ff-ea7a-4eeb-9cda-6a9dbbe9eb77\tPset_GasTerminalTypeGasAppliance.FlueType[Type]\tTEXT\t\t252\t1\tPEnum_FlueType\t1\nPARAM\tde4f7ec6-b0af-4ff5-a226-4972da54062b\tPset_GasTerminalTypeGasAppliance.GasApplianceType[Type]\tTEXT\t\t252\t1\tPEnum_GasApplianceType\t1\n#\nGROUP\t253\tPset_GasTerminalTypeGasBurner\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t86d9b048-e4bf-4f1c-a337-be11aeff1765\tPset_GasTerminalTypeGasBurner.GasBurnerType[Type]\tTEXT\t\t253\t1\tPEnum_GasBurnerType\t1\n#\nGROUP\t254\tPset_HeatExchangerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48a04a70-dd35-4a3b-bed1-4825604836ae\tPset_HeatExchangerTypeCommon.Arrangement[Type]\tTEXT\t\t254\t1\tPEnum_HeatExchangerArrangement\t1\nPARAM\ta793e93e-79f4-468c-b069-effbb2b81ded\tPset_HeatExchangerTypeCommon.Reference[Type]\tTEXT\t\t254\t1\tIfcIdentifier\t1\nPARAM\tb2023efb-fa11-4d49-b3fb-78e87df052af\tPset_HeatExchangerTypeCommon.ShellMaterial[Type]\tMULTILINETEXT\t\t254\t1\tIfcMaterial\t1\nPARAM\t49eabcc8-6528-4cfd-8c45-4a4ebf0d9185\tPset_HeatExchangerTypeCommon.Status[Type]\tTEXT\t\t254\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t255\tPset_HeatExchangerTypePlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t29d59c78-58e5-4ed7-8b6c-225c0bddbc1a\tPset_HeatExchangerTypePlate.NumberOfPlates[Type]\tINTEGER\t\t255\t1\tIfcInteger\t1\n#\nGROUP\t256\tPset_HumidifierPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4e0154dd-0687-440d-b907-c7f41cc1e099\tPset_HumidifierPHistory.AirPressureDropCurve[Type]\tMULTILINETEXT\t\t256\t1\tPropertyTableValue\t1\nPARAM\t06f794b1-774a-4d0b-8b6f-e5dcec1d0351\tPset_HumidifierPHistory.AtmosphericPressure[Type]\tMULTILINETEXT\t\t256\t1\tIfcTimeSeries\t1\nPARAM\t8b3b0df8-febb-46b1-a798-ee75b6bfe017\tPset_HumidifierPHistory.SaturationEfficiency[Type]\tMULTILINETEXT\t\t256\t1\tIfcTimeSeries\t1\nPARAM\tf989ecfc-092d-4e71-ad87-4c17eb0ff8cb\tPset_HumidifierPHistory.SaturationEfficiencyCurve[Type]\tMULTILINETEXT\t\t256\t1\tPropertyTableValue\t1\n#\nGROUP\t257\tPset_HumidifierTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdf1ce4f1-6b29-4661-89a4-5cd01b1a5bf9\tPset_HumidifierTypeCommon.AirPressureDropCurve[Type]\tMULTILINETEXT\t\t257\t1\tPropertyTableValue\t1\nPARAM\t91471a76-5206-4cc7-9ade-4535115ecc0b\tPset_HumidifierTypeCommon.Application[Type]\tTEXT\t\t257\t1\tPEnum_HumidifierApplication\t1\nPARAM\t575d517e-c06d-4af4-a50c-dab9b6210fb7\tPset_HumidifierTypeCommon.InternalControl[Type]\tTEXT\t\t257\t1\tPEnum_HumidifierInternalControl\t1\nPARAM\t60c6531a-7dc8-4a66-96c0-b8b80cc58a2e\tPset_HumidifierTypeCommon.NominalAirFlowRate[Type]\tNUMBER\t\t257\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t6378c37e-d0df-4762-a132-90e46a0d1dcf\tPset_HumidifierTypeCommon.NominalMoistureGain[Type]\tNUMBER\t\t257\t1\tIfcMassFlowRateMeasure\t1\nPARAM\t86e39193-d1ec-4e63-980c-c66129c7712c\tPset_HumidifierTypeCommon.Reference[Type]\tTEXT\t\t257\t1\tIfcIdentifier\t1\nPARAM\tab5e96ea-7288-4eac-b056-40ace579bd5b\tPset_HumidifierTypeCommon.SaturationEfficiencyCurve[Type]\tMULTILINETEXT\t\t257\t1\tPropertyTableValue\t1\nPARAM\t3874fcf8-e392-492f-8302-a110e751151a\tPset_HumidifierTypeCommon.Status[Type]\tTEXT\t\t257\t1\tPEnum_ElementStatus\t1\nPARAM\t853f4af6-de87-4c44-9bd3-e5c09e631f3b\tPset_HumidifierTypeCommon.WaterRequirement[Type]\tNUMBER\t\t257\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t18939668-a143-4a44-8f07-d6d93595f291\tPset_HumidifierTypeCommon.Weight[Type]\tNUMBER\t\t257\t1\tIfcMassMeasure\t1\n#\nGROUP\t258\tPset_InterceptorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te4c0adc8-ea20-4a34-ae14-453a48986244\tPset_InterceptorTypeCommon.CoverLength[Type]\tLENGTH\t\t258\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc867a383-6e1e-49a5-bc4a-61ecd4d74946\tPset_InterceptorTypeCommon.CoverWidth[Type]\tLENGTH\t\t258\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te3fcb671-9e68-4a1b-9634-0580555c1161\tPset_InterceptorTypeCommon.InletConnectionSize[Type]\tLENGTH\t\t258\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdd1c5e80-af0b-4fe5-82b8-83fc54307afa\tPset_InterceptorTypeCommon.NominalBodyDepth[Type]\tLENGTH\t\t258\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0b5aec3a-9ff9-4544-a599-a5115cd71ea1\tPset_InterceptorTypeCommon.NominalBodyLength[Type]\tLENGTH\t\t258\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t78a3d2d3-e1d3-41cc-ad43-67535e1d90c5\tPset_InterceptorTypeCommon.NominalBodyWidth[Type]\tLENGTH\t\t258\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf55e6862-18ad-44bf-be6c-a012e578d986\tPset_InterceptorTypeCommon.OutletConnectionSize[Type]\tLENGTH\t\t258\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1c1edf98-270d-493b-9c1e-234adc50756f\tPset_InterceptorTypeCommon.Reference[Type]\tTEXT\t\t258\t1\tIfcIdentifier\t1\nPARAM\t69e9e0f2-bdcb-41ab-a66e-8e2b6def9f11\tPset_InterceptorTypeCommon.Status[Type]\tTEXT\t\t258\t1\tPEnum_ElementStatus\t1\nPARAM\t28f79d45-9bbb-4963-bcbb-c1d02f852517\tPset_InterceptorTypeCommon.VentilatingPipeSize[Type]\tLENGTH\t\t258\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t259\tPset_JunctionBoxTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t67a4a19f-30ff-43c5-af5c-61aa1c121d49\tPset_JunctionBoxTypeCommon.ClearDepth[Type]\tLENGTH\t\t259\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5b86d645-cffb-43b4-8f38-53d11391a296\tPset_JunctionBoxTypeCommon.IP_Code[Type]\tTEXT\t\t259\t1\tIfcLabel\t1\nPARAM\te75a50e7-c0e6-46d4-ae62-40ea43c87b42\tPset_JunctionBoxTypeCommon.IsExternal[Type]\tYESNO\t\t259\t1\tIfcBoolean\t1\nPARAM\t1dea838a-45a9-4339-8226-3fbe93acfd70\tPset_JunctionBoxTypeCommon.MountingType[Type]\tTEXT\t\t259\t1\tPEnum_JunctionBoxMountingType\t1\nPARAM\tddd3b353-a441-499b-975e-d114a1839913\tPset_JunctionBoxTypeCommon.NumberOfGangs[Type]\tINTEGER\t\t259\t1\tIfcInteger\t1\nPARAM\t5bf09794-25c9-464d-862f-74c011993960\tPset_JunctionBoxTypeCommon.PlacingType[Type]\tTEXT\t\t259\t1\tPEnum_JunctionBoxPlacingType\t1\nPARAM\t69fe3f04-a9b8-4e2b-9a94-64ab62c54a3a\tPset_JunctionBoxTypeCommon.Reference[Type]\tTEXT\t\t259\t1\tIfcIdentifier\t1\nPARAM\tcc8edb82-5331-4a9f-abe1-e59fc0afd61b\tPset_JunctionBoxTypeCommon.ShapeType[Type]\tTEXT\t\t259\t1\tPEnum_JunctionBoxShapeType\t1\nPARAM\t145597e6-c193-43d7-a328-b713ffce30e2\tPset_JunctionBoxTypeCommon.Status[Type]\tTEXT\t\t259\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t260\tPset_LampEmitterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t63119d10-d74f-4d66-9d7c-b9e79167a396\tPset_LampEmitterTypeCommon.ColorAppearance[Type]\tTEXT\t\t260\t1\tIfcLabel\t1\nPARAM\t6646d8ae-6ae5-465e-afd6-c70c1ce51253\tPset_LampEmitterTypeCommon.ColorRenderingIndex[Type]\tINTEGER\t\t260\t1\tIfcInteger\t1\nPARAM\t8806c24a-b1a6-43ed-b91f-c72554863c0a\tPset_LampEmitterTypeCommon.ColorTemperature[Type]\tNUMBER\t\t260\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t046d61b3-2637-4728-9f21-3b7b4d6f1098\tPset_LampEmitterTypeCommon.ContributedLuminousFlux[Type]\tNUMBER\t\t260\t1\tIfcLuminousFluxMeasure\t1\nPARAM\t35730d70-f2b7-49a5-83a0-5386dfd076e7\tPset_LampEmitterTypeCommon.LampBallastType[Type]\tTEXT\t\t260\t1\tPEnum_LampBallastType\t1\nPARAM\tacf5a6d7-49b3-4817-9f9a-048ca691120e\tPset_LampEmitterTypeCommon.LampCompensationType[Type]\tTEXT\t\t260\t1\tPEnum_LampCompensationType\t1\nPARAM\ta707417d-80b7-46fb-9af6-c3fff114a321\tPset_LampEmitterTypeCommon.LampMaintenanceFactor[Type]\tNUMBER\t\t260\t1\tIfcReal\t1\nPARAM\t4f43282d-0b48-4dab-9c7e-c4bff389cf76\tPset_LampEmitterTypeCommon.LightEmitterNominalPower[Type]\tNUMBER\t\t260\t1\tIfcPowerMeasure\t1\nPARAM\t3e20b973-683f-46ac-81fc-efef9fe9de29\tPset_LampEmitterTypeCommon.Spectrum[Type]\tMULTILINETEXT\t\t260\t1\tPropertyTableValue\t1\n#\nGROUP\t261\tPset_LampTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t258285ae-6edc-43a5-aa26-f4068b3df4c3\tPset_LampTypeCommon.ColorAppearance[Type]\tTEXT\t\t261\t1\tIfcLabel\t1\nPARAM\ta1d279cf-f213-4aef-8aa1-4b5b7f2dbb9b\tPset_LampTypeCommon.ColorRenderingIndex[Type]\tINTEGER\t\t261\t1\tIfcInteger\t1\nPARAM\tb384954f-6bfa-456f-a66b-e099049012e2\tPset_LampTypeCommon.ColorTemperature[Type]\tNUMBER\t\t261\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t1f82d1bb-bb12-4bf6-858e-facdf336c234\tPset_LampTypeCommon.ContributedLuminousFlux[Type]\tNUMBER\t\t261\t1\tIfcLuminousFluxMeasure\t1\nPARAM\t37601f22-0fb8-499e-84ff-6685a2176783\tPset_LampTypeCommon.LampBallastType[Type]\tTEXT\t\t261\t1\tPEnum_LampBallastType\t1\nPARAM\t93ae1423-7eed-4efc-bed4-985991518ed8\tPset_LampTypeCommon.LampCompensationType[Type]\tTEXT\t\t261\t1\tPEnum_LampCompensationType\t1\nPARAM\t62d266a4-a2bd-419c-b3b5-110508115f52\tPset_LampTypeCommon.LampMaintenanceFactor[Type]\tNUMBER\t\t261\t1\tIfcReal\t1\nPARAM\tc85e3970-3ef8-4c68-a28b-ff90051a8ae5\tPset_LampTypeCommon.LightEmitterNominalPower[Type]\tNUMBER\t\t261\t1\tIfcPowerMeasure\t1\nPARAM\t4dda0e4a-24ac-4246-b0b4-89dd3fb4e75a\tPset_LampTypeCommon.Reference[Type]\tTEXT\t\t261\t1\tIfcIdentifier\t1\nPARAM\t494ab4a1-2681-4165-a9b9-065c93a68233\tPset_LampTypeCommon.Spectrum[Type]\tMULTILINETEXT\t\t261\t1\tPropertyTableValue\t1\nPARAM\t36a4d1b4-18ed-4df0-9d87-9eabc2bd9aa9\tPset_LampTypeCommon.Status[Type]\tTEXT\t\t261\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t262\tPset_LandRegistration\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcec9207c-5c74-4ef3-bc8c-05f16f67c4f5\tPset_LandRegistration.IsPermanentID[Type]\tYESNO\t\t262\t1\tIfcBoolean\t1\nPARAM\t703e2ab4-8d56-40ef-a932-224b389a9056\tPset_LandRegistration.LandID[Type]\tTEXT\t\t262\t1\tIfcIdentifier\t1\nPARAM\t7613df95-d855-4192-b2ed-4e7d95ec1fb4\tPset_LandRegistration.LandTitleID[Type]\tTEXT\t\t262\t1\tIfcIdentifier\t1\n#\nGROUP\t263\tPset_LightFixtureTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c218134-0643-438d-b184-a20a0f5dfb38\tPset_LightFixtureTypeCommon.ArticleNumber[Type]\tMULTILINETEXT\t\t263\t1\tIfcClassificationReference\t1\nPARAM\td030b86b-98d6-4523-9284-3b4ad3ecfad1\tPset_LightFixtureTypeCommon.LightFixtureMountingType[Type]\tTEXT\t\t263\t1\tPEnum_LightFixtureMountingType\t1\nPARAM\te3ff0856-5f95-465e-bdb4-ef28b4d20e45\tPset_LightFixtureTypeCommon.LightFixturePlacingType[Type]\tTEXT\t\t263\t1\tPEnum_LightFixturePlacingType\t1\nPARAM\t8d78fb24-4e61-4c7a-9682-1483a2b8ffd9\tPset_LightFixtureTypeCommon.MaintenanceFactor[Type]\tNUMBER\t\t263\t1\tIfcReal\t1\nPARAM\t49df8f25-fdfd-4c66-99ba-b3529d2702ce\tPset_LightFixtureTypeCommon.ManufacturersSpecificInformation[Type]\tTEXT\t\t263\t1\tIfcText\t1\nPARAM\tf2bcb1da-7efe-4d58-bad9-25dc228e795e\tPset_LightFixtureTypeCommon.MaximumPlenumSensibleLoad[Type]\tNUMBER\t\t263\t1\tIfcPowerMeasure\t1\nPARAM\t66d08e36-529a-452e-a4c6-40d2d7fa9638\tPset_LightFixtureTypeCommon.MaximumSpaceSensibleLoad[Type]\tNUMBER\t\t263\t1\tIfcPowerMeasure\t1\nPARAM\t24d8c329-6083-49b2-8bd1-3f5b0bd25613\tPset_LightFixtureTypeCommon.NumberOfSources[Type]\tINTEGER\t\t263\t1\tIfcInteger\t1\nPARAM\tae042654-1927-410c-b2c7-42cee4dbc69f\tPset_LightFixtureTypeCommon.Reference[Type]\tTEXT\t\t263\t1\tIfcIdentifier\t1\nPARAM\t0422169f-d87b-4717-8748-0ecf05e21a95\tPset_LightFixtureTypeCommon.SensibleLoadToRadiant[Type]\tNUMBER\t\t263\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t49ff750d-81a8-4525-a724-e8f1033a6080\tPset_LightFixtureTypeCommon.Status[Type]\tTEXT\t\t263\t1\tPEnum_ElementStatus\t1\nPARAM\t5433ad35-daf2-4248-9870-1584278aef4c\tPset_LightFixtureTypeCommon.TotalWattage[Type]\tNUMBER\t\t263\t1\tIfcPowerMeasure\t1\n#\nGROUP\t264\tPset_LightFixtureTypeExitSign\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t75d1450e-2121-4836-acc0-2a1e9f8dc548\tPset_LightFixtureTypeExitSign.Addressablility[Type]\tTEXT\t\t264\t1\tPEnum_AddressabilityType\t1\nPARAM\t93cb3351-391c-46e5-af48-eb236b4cb226\tPset_LightFixtureTypeExitSign.BackupSupplySystem[Type]\tTEXT\t\t264\t1\tPEnum_BackupSupplySystemType\t1\nPARAM\t719e75f4-f13f-4bfa-9c33-e09e8e7d9234\tPset_LightFixtureTypeExitSign.MinimumTextHeight[Type]\tNUMBER\t\t264\t1\tIfcPositiveLengthMeasure \t1\nPARAM\tb0d6cfec-48c1-442e-890c-5777df7c27ed\tPset_LightFixtureTypeExitSign.PictogramEscapeDirection[Type]\tTEXT\t\t264\t1\tPEnum_PictogramEscapeDirectionType\t1\nPARAM\ta951009a-4b02-4638-a404-2f7fa6721e24\tPset_LightFixtureTypeExitSign.SelfTestFunction[Type]\tTEXT\t\t264\t1\tPEnum_SelfTestType\t1\n#\nGROUP\t265\tPset_LightFixtureTypeSecurityLighting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf5bd29ae-b647-4ff2-a112-3cd30ed5bf55\tPset_LightFixtureTypeSecurityLighting.Addressablility[Type]\tTEXT\t\t265\t1\tPEnum_AddressabilityType\t1\nPARAM\t1ba3c348-8b43-4ff0-b755-e8b3119ec4ec\tPset_LightFixtureTypeSecurityLighting.BackupSupplySystem[Type]\tTEXT\t\t265\t1\tPEnum_BackupSupplySystemType\t1\nPARAM\t5261223d-8d24-4545-ae8c-aec67e27ffe5\tPset_LightFixtureTypeSecurityLighting.FixtureHeight[Type]\tLENGTH\t\t265\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t104f3543-b75e-4327-a925-db04c4d2dbc4\tPset_LightFixtureTypeSecurityLighting.PictogramEscapeDirection[Type]\tTEXT\t\t265\t1\tPEnum_PictogramEscapeDirectionType\t1\nPARAM\t6018c4a8-f284-4ccb-af47-8ac112ee34e0\tPset_LightFixtureTypeSecurityLighting.SecurityLightingType[Type]\tTEXT\t\t265\t1\tPEnum_LightFixtureSecurityLightingType\t1\nPARAM\t4da49e5d-92ee-4bc1-b34b-0ee51459c41b\tPset_LightFixtureTypeSecurityLighting.SelfTestFunction[Type]\tTEXT\t\t265\t1\tPEnum_SelfTestType\t1\n#\nGROUP\t266\tPset_LightFixtureTypeThermal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a6d964a-90ec-4bd0-ad78-71a3e61dda17\tPset_LightFixtureTypeThermal.MaximumPlenumSensibleLoad[Type]\tNUMBER\t\t266\t1\tIfcPowerMeasure\t1\nPARAM\t14ea42f7-c6ab-4af9-b7c3-51c7138e88a3\tPset_LightFixtureTypeThermal.MaximumSpaceSensibleLoad[Type]\tNUMBER\t\t266\t1\tIfcPowerMeasure\t1\nPARAM\tc460fe28-62e4-4df1-ba09-cbd970b5da9a\tPset_LightFixtureTypeThermal.SensibleLoadToRadiant[Type]\tNUMBER\t\t266\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t267\tPset_ManufacturerOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf1946a98-9882-48de-98a9-3bc4dfde46cc\tPset_ManufacturerOccurrence.AcquisitionDate[Type]\tTEXT\t\t267\t1\tIfcDate\t1\nPARAM\t4f359f8c-ae4f-4957-b173-0572b28d1e08\tPset_ManufacturerOccurrence.AssemblyPlace[Type]\tTEXT\t\t267\t1\tPEnum_AssemblyPlace\t1\nPARAM\tc3149216-9dfd-467d-962c-1d9f9d028d38\tPset_ManufacturerOccurrence.BarCode[Type]\tTEXT\t\t267\t1\tIfcIdentifier\t1\nPARAM\tc2766010-a53d-494f-9bcf-774aebf6ea4c\tPset_ManufacturerOccurrence.BatchReference[Type]\tTEXT\t\t267\t1\tIfcIdentifier\t1\nPARAM\t7f214cbe-e394-485b-b219-4d266ad1399e\tPset_ManufacturerOccurrence.SerialNumber[Type]\tTEXT\t\t267\t1\tIfcIdentifier\t1\n#\nGROUP\t268\tPset_ManufacturerTypeInformation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7bb84d84-89d6-458b-8bad-d0d51e6a06dc\tPset_ManufacturerTypeInformation.ArticleNumber[Type]\tTEXT\t\t268\t1\tIfcIdentifier\t1\nPARAM\t6f83fe8c-095f-4d39-8f9f-3b2bf34b3011\tPset_ManufacturerTypeInformation.AssemblyPlace[Type]\tTEXT\t\t268\t1\tPEnum_AssemblyPlace\t1\nPARAM\t4d9b315a-e2ce-45ac-8ec7-27d7cf6a19da\tPset_ManufacturerTypeInformation.GlobalTradeItemNumber[Type]\tTEXT\t\t268\t1\tIfcIdentifier\t1\nPARAM\t34e1e334-928e-4d51-a220-f8dd9f201371\tPset_ManufacturerTypeInformation.Manufacturer[Type]\tTEXT\t\t268\t1\tIfcLabel\t1\nPARAM\t68ff4657-2b27-4fae-9c3b-fcdcda758411\tPset_ManufacturerTypeInformation.ModelLabel[Type]\tTEXT\t\t268\t1\tIfcLabel\t1\nPARAM\td4b5e85a-05b9-4ffb-bd6b-c6f491ade688\tPset_ManufacturerTypeInformation.ModelReference[Type]\tTEXT\t\t268\t1\tIfcLabel\t1\nPARAM\td8880685-5e31-4cce-b7fb-bcb2683aa14b\tPset_ManufacturerTypeInformation.OperatingWeight[Type]\tNUMBER\t\t268\t1\tIfcMassMeasure\t1\nPARAM\ta31f0b0e-a854-4835-8b6c-a417c89ddf55\tPset_ManufacturerTypeInformation.ProductionYear[Type]\tTEXT\t\t268\t1\tIfcLabel\t1\nPARAM\t26a876bc-5430-4aad-9f5d-1714403e11b7\tPset_ManufacturerTypeInformation.ShippingWeight[Type]\tNUMBER\t\t268\t1\tIfcMassMeasure\t1\n#\nGROUP\t269\tPset_MaterialCombustion\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9efeeaf7-43eb-425d-906f-cd8875a1ef42\tPset_MaterialCombustion.CO2Content[Type]\tNUMBER\t\t269\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t558beed3-1e66-43db-bbe9-fd68fe070c36\tPset_MaterialCombustion.COContent[Type]\tNUMBER\t\t269\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf7700e32-9650-4b0f-8db0-ac71d00a5031\tPset_MaterialCombustion.N20Content[Type]\tNUMBER\t\t269\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t540cb006-28c7-4e2b-baa6-5f3c5941728c\tPset_MaterialCombustion.SpecificHeatCapacity[Type]\tNUMBER\t\t269\t1\tIfcSpecificHeatCapacityMeasure\t1\n#\nGROUP\t270\tPset_MaterialCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4d5fbf59-c51e-4726-9f3f-d13d56b74833\tPset_MaterialCommon.MassDensity[Type]\tMASS_DENSITY\t\t270\t1\tIfcMassDensityMeasure\t1\nPARAM\t2289f91e-f4b3-460b-941d-0ca73909dfdc\tPset_MaterialCommon.MolecularWeight[Type]\tNUMBER\t\t270\t1\tIfcMolecularWeightMeasure\t1\nPARAM\tcf25826d-7bd8-4ef9-b513-7473a99a6da6\tPset_MaterialCommon.Porosity[Type]\tNUMBER\t\t270\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t271\tPset_MaterialConcrete\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0fcad757-ead1-4442-97db-c219e80c1963\tPset_MaterialConcrete.AdmixturesDescription[Type]\tTEXT\t\t271\t1\tIfcText\t1\nPARAM\t7852b617-ca37-47f0-aa40-34a916d2209b\tPset_MaterialConcrete.CompressiveStrength[Type]\tNUMBER\t\t271\t1\tIfcPressureMeasure\t1\nPARAM\t444c6c4c-4f64-472f-9b9f-a7e2d5c90171\tPset_MaterialConcrete.MaxAggregateSize[Type]\tLENGTH\t\t271\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tadb42f7f-d8a8-49e2-8542-586bd129d00d\tPset_MaterialConcrete.ProtectivePoreRatio[Type]\tNUMBER\t\t271\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t92a59e1d-772e-443f-af36-3c2a92983a07\tPset_MaterialConcrete.WaterImpermeability[Type]\tTEXT\t\t271\t1\tIfcText\t1\nPARAM\t7f9a9a0a-07e1-40b5-80d5-c4363fc2fa21\tPset_MaterialConcrete.Workability[Type]\tTEXT\t\t271\t1\tIfcText\t1\n#\nGROUP\t272\tPset_MaterialEnergy\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te3d853b3-3a93-4395-9b1c-e7c7a855a227\tPset_MaterialEnergy.GasPressure[Type]\tNUMBER\t\t272\t1\tIfcPressureMeasure\t1\nPARAM\t27d12b7f-1d36-4bd1-81cd-bca9bbed6662\tPset_MaterialEnergy.MoistureCapacityThermalGradient[Type]\tNUMBER\t\t272\t1\tIfcReal\t1\nPARAM\tacb591bf-cdf8-494f-a3c0-0ac47bb4b0f3\tPset_MaterialEnergy.SolarRefractionIndex[Type]\tNUMBER\t\t272\t1\tIfcReal\t1\nPARAM\t5b645d95-a1fc-4853-80b6-8c8de221b6f9\tPset_MaterialEnergy.SpecificHeatTemperatureDerivative[Type]\tNUMBER\t\t272\t1\tIfcReal\t1\nPARAM\t21f8c12c-f2a2-4e89-b0fa-fa5b14dc257a\tPset_MaterialEnergy.ThermalConductivityTemperatureDerivative[Type]\tNUMBER\t\t272\t1\tIfcReal\t1\nPARAM\t255b5bfb-7cbf-4788-92c8-6c9c198f2c38\tPset_MaterialEnergy.ViscosityTemperatureDerivative[Type]\tNUMBER\t\t272\t1\tIfcReal\t1\nPARAM\t82d6c0b8-63fc-4d9c-9098-2f0f15a8f655\tPset_MaterialEnergy.VisibleRefractionIndex[Type]\tNUMBER\t\t272\t1\tIfcReal\t1\n#\nGROUP\t273\tPset_MaterialFuel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9bff9010-2f32-4954-9597-fb9cbf593c9b\tPset_MaterialFuel.CarbonContent[Type]\tNUMBER\t\t273\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5e48598b-feef-4c4b-a40b-4be023eac6eb\tPset_MaterialFuel.CombustionTemperature[Type]\tNUMBER\t\t273\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tfada699a-f6a6-47c8-beed-915e15e87ab7\tPset_MaterialFuel.HigherHeatingValue[Type]\tNUMBER\t\t273\t1\tIfcHeatingValueMeasure\t1\nPARAM\tfdcb0f7d-698d-4407-88c0-3786fd1d94b1\tPset_MaterialFuel.LowerHeatingValue[Type]\tNUMBER\t\t273\t1\tIfcHeatingValueMeasure\t1\n#\nGROUP\t274\tPset_MaterialHygroscopic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcd6f1f03-0af8-4cf3-bf65-554d9f225998\tPset_MaterialHygroscopic.IsothermalMoistureCapacity[Type]\tNUMBER\t\t274\t1\tIfcIsothermalMoistureCapacityMeasure\t1\nPARAM\t1c6feb7d-1afc-45e2-b364-1205af4e3acc\tPset_MaterialHygroscopic.LowerVaporResistanceFactor[Type]\tNUMBER\t\t274\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5d280d98-5494-478d-b943-846c6d029640\tPset_MaterialHygroscopic.MoistureDiffusivity[Type]\tNUMBER\t\t274\t1\tIfcMoistureDiffusivityMeasure\t1\nPARAM\t3546c74d-197d-42d7-8c4b-721a2ff7efec\tPset_MaterialHygroscopic.UpperVaporResistanceFactor[Type]\tNUMBER\t\t274\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta559578a-b1fa-45d0-ba20-e287ab25f995\tPset_MaterialHygroscopic.VaporPermeability[Type]\tNUMBER\t\t274\t1\tIfcVaporPermeabilityMeasure\t1\n#\nGROUP\t275\tPset_MaterialMechanical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7791d773-8812-4f7d-a7b1-5d780c2f9638\tPset_MaterialMechanical.DynamicViscosity[Type]\tNUMBER\t\t275\t1\tIfcDynamicViscosityMeasure\t1\nPARAM\t5b00e03e-5fc5-4a10-a3f6-7f23abd631f1\tPset_MaterialMechanical.PoissonRatio[Type]\tNUMBER\t\t275\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t8b0db995-87a4-4c4a-9678-91661fbd99fc\tPset_MaterialMechanical.ShearModulus[Type]\tNUMBER\t\t275\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t49b4a38a-3382-4e75-ac26-2a3c4b5c51d0\tPset_MaterialMechanical.ThermalExpansionCoefficient[Type]\tNUMBER\t\t275\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\t1812487c-10b6-4f94-9252-a8877c09f7d1\tPset_MaterialMechanical.YoungModulus[Type]\tNUMBER\t\t275\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t276\tPset_MaterialOptical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5e466a16-4803-44ad-a66d-725e952da28c\tPset_MaterialOptical.SolarReflectanceBack[Type]\tNUMBER\t\t276\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t2ac2b159-f30a-49a2-abe6-f5523648f074\tPset_MaterialOptical.SolarReflectanceFront[Type]\tNUMBER\t\t276\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t19ea6ca3-8203-4b79-b475-9aa4894ec515\tPset_MaterialOptical.SolarTransmittance[Type]\tNUMBER\t\t276\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t251d8111-d0cf-4688-9cb0-db3c1999d030\tPset_MaterialOptical.ThermalIrEmissivityBack[Type]\tNUMBER\t\t276\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf76573a8-b4d6-47cc-b44b-c4692a69d3f1\tPset_MaterialOptical.ThermalIrEmissivityFront[Type]\tNUMBER\t\t276\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta74d45d7-ffe5-4f1d-9c68-290bccc45ef8\tPset_MaterialOptical.ThermalIrTransmittance[Type]\tNUMBER\t\t276\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5307ba04-10b6-4c6d-990e-8e302cd60df0\tPset_MaterialOptical.VisibleReflectanceBack[Type]\tNUMBER\t\t276\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1b4d43b9-a994-4ee6-bab2-f64b3dee5886\tPset_MaterialOptical.VisibleReflectanceFront[Type]\tNUMBER\t\t276\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tbee7b8ac-f455-47d1-a607-79da97c82ec5\tPset_MaterialOptical.VisibleTransmittance[Type]\tNUMBER\t\t276\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t277\tPset_MaterialSteel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2d4f892d-73a2-452a-accd-2488ea68f366\tPset_MaterialSteel.HardeningModule[Type]\tNUMBER\t\t277\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t31bbe128-0354-412f-87de-859028c89d23\tPset_MaterialSteel.PlasticStrain[Type]\tNUMBER\t\t277\t1\tIfcPositiveRatioMeasure\t1\nPARAM\taa29266c-c300-4903-a937-342b1844304c\tPset_MaterialSteel.ProportionalStress[Type]\tNUMBER\t\t277\t1\tIfcPressureMeasure\t1\nPARAM\t3f574a07-79d0-41d8-af8e-ab6d46d7504f\tPset_MaterialSteel.Relaxations[Type]\tMULTILINETEXT\t\t277\t1\tPropertyTableValue\t1\nPARAM\t60513947-33da-455c-a35e-79359b48b091\tPset_MaterialSteel.UltimateStrain[Type]\tNUMBER\t\t277\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t652f7211-a956-4971-8eb1-2f5797307067\tPset_MaterialSteel.UltimateStress[Type]\tNUMBER\t\t277\t1\tIfcPressureMeasure\t1\nPARAM\td7b0c602-bc9d-4e37-863c-79daaecc262e\tPset_MaterialSteel.YieldStress[Type]\tNUMBER\t\t277\t1\tIfcPressureMeasure\t1\n#\nGROUP\t278\tPset_MaterialThermal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t85f85c54-9c11-4853-88a1-19bb1418cb6d\tPset_MaterialThermal.BoilingPoint[Type]\tNUMBER\t\t278\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t89398ab5-ccef-49be-b36b-bdb826e80baf\tPset_MaterialThermal.FreezingPoint[Type]\tNUMBER\t\t278\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t06635cc8-ee15-4649-8c28-4429f8918ecd\tPset_MaterialThermal.SpecificHeatCapacity[Type]\tNUMBER\t\t278\t1\tIfcSpecificHeatCapacityMeasure\t1\nPARAM\t3549c691-5d1e-45a5-845b-2edcaa8df3af\tPset_MaterialThermal.ThermalConductivity[Type]\tNUMBER\t\t278\t1\tIfcThermalConductivityMeasure\t1\n#\nGROUP\t279\tPset_MaterialWater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tccef5a23-f033-40f6-af79-9d9aff01b750\tPset_MaterialWater.AcidityConcentration[Type]\tNUMBER\t\t279\t1\tIfcIonConcentrationMeasure\t1\nPARAM\tfef1ee8c-452f-4516-8e89-28767eddf11b\tPset_MaterialWater.AlkalinityConcentration[Type]\tNUMBER\t\t279\t1\tIfcIonConcentrationMeasure\t1\nPARAM\tf46226d0-b9a7-4fbb-9da2-aea87289fcf8\tPset_MaterialWater.DissolvedSolidsContent[Type]\tNUMBER\t\t279\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\ta2dc2e7f-e426-4286-a94a-483314a7bbd9\tPset_MaterialWater.Hardness[Type]\tNUMBER\t\t279\t1\tIfcIonConcentrationMeasure\t1\nPARAM\tbaba80ac-56ad-4e6d-829d-39d6cf6ec93f\tPset_MaterialWater.ImpuritiesContent[Type]\tNUMBER\t\t279\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t918b9a2b-452d-4139-8920-6edade5d479f\tPset_MaterialWater.IsPotable[Type]\tYESNO\t\t279\t1\tIfcBoolean\t1\nPARAM\t52003081-54a2-41e1-8d4b-eb3cc57aa678\tPset_MaterialWater.PHLevel[Type]\tNUMBER\t\t279\t1\tIfcPHMeasure\t1\n#\nGROUP\t280\tPset_MaterialWood\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a5fd622-c5e3-4109-a71a-a92e6494c3cc\tPset_MaterialWood.AppearanceGrade[Type]\tTEXT\t\t280\t1\tIfcLabel\t1\nPARAM\td782a99b-7e42-4efe-8396-e89f7c060634\tPset_MaterialWood.DimensionalChangeCoefficient[Type]\tNUMBER\t\t280\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t87d83def-38c5-413f-ae6e-969a43179fb5\tPset_MaterialWood.Layers[Type]\tINTEGER\t\t280\t1\tIfcInteger\t1\nPARAM\tdd28f7f2-bbb3-4cd2-9935-02883b7c3f59\tPset_MaterialWood.Layup[Type]\tTEXT\t\t280\t1\tIfcLabel\t1\nPARAM\tccbac143-65a7-418d-ae68-386ae7bee87c\tPset_MaterialWood.MoistureContent[Type]\tNUMBER\t\t280\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t8048507b-86eb-43a6-8863-d7a2568895d1\tPset_MaterialWood.Plies[Type]\tINTEGER\t\t280\t1\tIfcInteger\t1\nPARAM\t806b20b4-0bc7-4b7c-8391-a451930c8a88\tPset_MaterialWood.Species[Type]\tTEXT\t\t280\t1\tIfcLabel\t1\nPARAM\t9a2af8c3-bcbc-44fc-b922-6c0c66528ddd\tPset_MaterialWood.StrengthGrade[Type]\tTEXT\t\t280\t1\tIfcLabel\t1\nPARAM\t7a3000f9-f385-4c88-9c37-50fd8e59a5ba\tPset_MaterialWood.ThicknessSwelling[Type]\tNUMBER\t\t280\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t281\tPset_MaterialWoodBasedBeam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc29c94a0-ff8c-456e-bed1-ca4d32926691\tPset_MaterialWoodBasedBeam.ApplicableStructuralDesignMethod[Type]\tTEXT\t\t281\t1\tIfcLabel\t1\nPARAM\t93a7b2b5-d21e-4d1f-ae78-fb67ebb0b0d8\tPset_MaterialWoodBasedBeam.InPlane.BendingStrength[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\tdd10a75f-ef45-4292-815e-c3d6a4728fea\tPset_MaterialWoodBasedBeam.InPlane.CompStrength[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t1bda51fd-7cb5-4cd0-bbf7-cebfcea6a747\tPset_MaterialWoodBasedBeam.InPlane.CompStrengthPerp[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t0e80b9d3-825b-45df-b6ff-76a9791e81b0\tPset_MaterialWoodBasedBeam.InPlane.InstabilityFactors[Type]\tMULTILINETEXT\t\t281\t1\tPropertyTableValue\t1\nPARAM\tadd30aaa-dfe8-4444-8508-a55e18c713a8\tPset_MaterialWoodBasedBeam.InPlane.RaisedCompStrengthPerp[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\tf74f1795-025f-4836-ae2d-b2eeda558a12\tPset_MaterialWoodBasedBeam.InPlane.ReferenceDepth[Type]\tLENGTH\t\t281\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4f6c58a2-27d1-42b9-baa6-af9dc612e407\tPset_MaterialWoodBasedBeam.InPlane.ShearModulus[Type]\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t5d835aff-90c0-4756-9acc-c8ac97ec2147\tPset_MaterialWoodBasedBeam.InPlane.ShearModulusMin[Type]\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t998d9129-8f9b-4839-98af-3a728f790ca3\tPset_MaterialWoodBasedBeam.InPlane.ShearStrength[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t2741ea9b-9164-494f-9e6b-49f28926d7f1\tPset_MaterialWoodBasedBeam.InPlane.TensileStrength[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t3c7d772a-adfb-4646-8446-0f24f8d1f5ce\tPset_MaterialWoodBasedBeam.InPlane.TensileStrengthPerp[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t7b96755c-f54c-40b1-8c95-07e945a016e3\tPset_MaterialWoodBasedBeam.InPlane.TorsionalStrength[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\tf76826c6-7584-4fb4-aeb0-3b1156647995\tPset_MaterialWoodBasedBeam.InPlane.YoungModulus[Type]\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tc6de757a-4da3-470f-9cfe-ff1422f27a0c\tPset_MaterialWoodBasedBeam.InPlane.YoungModulusMin[Type]\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tce858e02-9c99-44ec-967f-fe598877038d\tPset_MaterialWoodBasedBeam.InPlane.YoungModulusPerp[Type]\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t256ba3a3-64a8-42a1-a007-3e340befa989\tPset_MaterialWoodBasedBeam.InPlane.YoungModulusPerpMin[Type]\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t443e3154-37f3-43b0-9941-54d6d8835d5f\tPset_MaterialWoodBasedBeam.InPlaneNegative.BendingStrength[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t981030bf-0674-492d-aef0-c92a7ae095c1\tPset_MaterialWoodBasedBeam.InPlaneNegative.CompStrength[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\tf8574867-c001-4ad3-a5c8-d61a9d67a027\tPset_MaterialWoodBasedBeam.InPlaneNegative.CompStrengthPerp[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\tf04b7657-82d6-405a-b78a-5f3ff7bf16e8\tPset_MaterialWoodBasedBeam.InPlaneNegative.InstabilityFactors[Type]\tMULTILINETEXT\t\t281\t1\tPropertyTableValue\t1\nPARAM\ta01a037e-22b3-4e0f-9c28-866774cdf5a7\tPset_MaterialWoodBasedBeam.InPlaneNegative.RaisedCompStrengthPerp[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\tdaf5a53c-c7b1-405f-b7b7-b39b0480fbe3\tPset_MaterialWoodBasedBeam.InPlaneNegative.ReferenceDepth[Type]\tLENGTH\t\t281\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tac062876-e48f-4bd9-bab2-7394629a3bd9\tPset_MaterialWoodBasedBeam.InPlaneNegative.ShearModulus[Type]\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tfc01a841-fd15-4856-97d9-6a13ab81d290\tPset_MaterialWoodBasedBeam.InPlaneNegative.ShearModulusMin[Type]\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t9a1e2586-9e6c-432b-9920-38a89c4accbb\tPset_MaterialWoodBasedBeam.InPlaneNegative.ShearStrength[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\tedf131af-2ae9-4f76-9cba-023ec9a93c58\tPset_MaterialWoodBasedBeam.InPlaneNegative.TensileStrength[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\tc3a67b7f-d5b9-45ad-88c1-1d267f6aff99\tPset_MaterialWoodBasedBeam.InPlaneNegative.TensileStrengthPerp[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t991bf6e3-4d04-4c62-bdfa-3221c162df02\tPset_MaterialWoodBasedBeam.InPlaneNegative.TorsionalStrength[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\tdcad751e-803e-40ac-8859-5c6758112a5e\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulus[Type]\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tedd5dfd9-fdfc-4176-8466-1a3b98f39cb9\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusMin[Type]\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\te1eb4ecc-fb4d-4b6e-987c-2bc3a45a220d\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusPerp[Type]\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t6c8e1d76-1dde-4efc-96b0-88fd9c434bef\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusPerpMin[Type]\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t7dfa6fe9-0659-4368-8b85-0d4bc04efca5\tPset_MaterialWoodBasedBeam.OutOfPlane.BendingStrength[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t027ab243-df9a-49bf-89dd-3e1e9434a65a\tPset_MaterialWoodBasedBeam.OutOfPlane.CompStrength[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t05bd93fc-2a9c-46b0-859d-f4c10ce00893\tPset_MaterialWoodBasedBeam.OutOfPlane.CompStrengthPerp[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t09446b10-633b-4422-9773-ebefe86c0436\tPset_MaterialWoodBasedBeam.OutOfPlane.InstabilityFactors[Type]\tMULTILINETEXT\t\t281\t1\tPropertyTableValue\t1\nPARAM\t29768c6b-1175-47e4-846e-d82c3ca5c1af\tPset_MaterialWoodBasedBeam.OutOfPlane.RaisedCompStrengthPerp[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\tb8dd4401-b57a-4257-802d-6f15dbd98500\tPset_MaterialWoodBasedBeam.OutOfPlane.ReferenceDepth[Type]\tLENGTH\t\t281\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6882698f-9934-4d51-b3f5-4c0db0380935\tPset_MaterialWoodBasedBeam.OutOfPlane.ShearModulus[Type]\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t6fc84682-6ee4-4b08-9f51-0a2b338e5f2e\tPset_MaterialWoodBasedBeam.OutOfPlane.ShearModulusMin[Type]\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\td2ec3d2e-91e1-4d2e-a717-d515523b783a\tPset_MaterialWoodBasedBeam.OutOfPlane.ShearStrength[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t77a1d82a-a779-4dd2-a4b5-7daad4d836a3\tPset_MaterialWoodBasedBeam.OutOfPlane.TensileStrength[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\ta6577f61-2949-4209-9b93-db6bbb17f4c4\tPset_MaterialWoodBasedBeam.OutOfPlane.TensileStrengthPerp[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\tdee9b476-b6fa-4a54-ba3f-cee9e3545317\tPset_MaterialWoodBasedBeam.OutOfPlane.TorsionalStrength[Type]\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\td7c59ff8-5f57-4645-8148-3cfe38bc8729\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulus[Type]\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t8d7ca738-8ab1-4881-abdd-17b3d23362f5\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusMin[Type]\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\te6898dc6-7bfa-404e-b95a-9e0894f158c8\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusPerp[Type]\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t0b82d1db-dd65-4b15-a7e9-cfe2546886a0\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusPerpMin[Type]\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t282\tPset_MaterialWoodBasedPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t767ee4ea-28b3-4a7f-b876-e24016d562dd\tPset_MaterialWoodBasedPanel.ApplicableStructuralDesignMethod[Type]\tTEXT\t\t282\t1\tIfcLabel\t1\nPARAM\t8c3c24c0-d627-46a1-95ce-7a859c597c3d\tPset_MaterialWoodBasedPanel.InPlane.BearingStrength[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t1f416343-dc29-4a9c-935e-5ca7dd499f37\tPset_MaterialWoodBasedPanel.InPlane.BendingStrength[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t21f0ecc5-0c00-48f6-bd4f-e589e5a24da9\tPset_MaterialWoodBasedPanel.InPlane.CompressiveStrength[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\td5b8d803-6349-4e80-ae6c-271623b6585e\tPset_MaterialWoodBasedPanel.InPlane.RaisedCompressiveStrength[Type]\tNUMBER\t\t282\t1\tIfcPressureMeasure\t1\nPARAM\tee25e03f-01e4-47ea-916c-0d9b6958e8e8\tPset_MaterialWoodBasedPanel.InPlane.ReferenceDepth[Type]\tLENGTH\t\t282\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb2083da4-1df4-423c-bae3-0fa5ef722c4e\tPset_MaterialWoodBasedPanel.InPlane.ShearModulus[Type]\tNUMBER\t\t282\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t9a6be353-80b8-487f-a325-020bb7f12d7b\tPset_MaterialWoodBasedPanel.InPlane.ShearStrength[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t05ae09df-40c6-4d11-8a21-8d6153f8e87e\tPset_MaterialWoodBasedPanel.InPlane.TensileStrength[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t9def94e7-71a0-4d71-8d41-578cac7fdb48\tPset_MaterialWoodBasedPanel.InPlane.YoungModulusBending[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t52ad522c-1ef9-47a7-b942-b3fd3a6a11b2\tPset_MaterialWoodBasedPanel.InPlane.YoungModulusCompression[Type]\tNUMBER\t\t282\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t9b686f75-66eb-448b-a819-50b147c7a067\tPset_MaterialWoodBasedPanel.InPlane.YoungModulusTension[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t855479dc-d45d-410a-ae76-592c5d652e37\tPset_MaterialWoodBasedPanel.OutOfPlane.BearingStrength[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t9204a56e-1fb8-4332-a91a-87f1eb753c15\tPset_MaterialWoodBasedPanel.OutOfPlane.BendingStrength[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\teb0d1665-51ca-469d-8be1-ff06b2c7b055\tPset_MaterialWoodBasedPanel.OutOfPlane.CompressiveStrength[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t42c0bd5b-efdb-4876-921e-3e41e99b0ac9\tPset_MaterialWoodBasedPanel.OutOfPlane.RaisedCompressiveStrength[Type]\tNUMBER\t\t282\t1\tIfcPressureMeasure\t1\nPARAM\tdb22064e-ed65-4635-9f5d-78cfbd98a514\tPset_MaterialWoodBasedPanel.OutOfPlane.ReferenceDepth[Type]\tLENGTH\t\t282\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8665ad99-1806-4b68-8734-26f08ca7f105\tPset_MaterialWoodBasedPanel.OutOfPlane.ShearModulus[Type]\tNUMBER\t\t282\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tb1459b78-29e5-45fa-8fcf-9c50b0330bfe\tPset_MaterialWoodBasedPanel.OutOfPlane.ShearStrength[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t2028cc9a-6b2a-4241-adf0-8f4d250137b8\tPset_MaterialWoodBasedPanel.OutOfPlane.TensileStrength[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\tfe2f2bec-54bc-46d0-b589-4c77390bd8f0\tPset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusBending[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t85d69a5a-4425-400b-b40b-dc1e9ec2b510\tPset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusCompression[Type]\tNUMBER\t\t282\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t6f9c1ab1-0dc0-4591-a275-34f2de1e0f53\tPset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusTension[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\td38acbdb-510f-42c6-bd6c-8ab27db2e933\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.BearingStrength[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\teb261607-29c0-4de2-b733-5117178c7cb9\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.BendingStrength[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t129600d1-d2bb-4014-b96e-f6d87e141509\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.CompressiveStrength[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\tff562d4b-1cde-464c-85e0-c4b7538509ac\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.RaisedCompressiveStrength[Type]\tNUMBER\t\t282\t1\tIfcPressureMeasure\t1\nPARAM\tcddb619b-c765-4f67-9540-5cf17ce448c9\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.ReferenceDepth[Type]\tLENGTH\t\t282\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t25bf1b5c-c262-410b-ac61-ab1481ecd392\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.ShearModulus[Type]\tNUMBER\t\t282\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t29200476-d4c3-42e4-a321-27de9b91342b\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.ShearStrength[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t7fe1a0f5-667b-40b6-ad44-3a550daf6942\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.TensileStrength[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t7514a3cb-8e9a-46f7-a2a6-db44aaccbedb\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusBending[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t2bdf070c-8d41-4dbb-a122-69eb3daf5172\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusCompression[Type]\tNUMBER\t\t282\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tc89e0881-4453-4b25-85ba-c2ef8eaeeb8e\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusTension[Type]\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\n#\nGROUP\t283\tPset_MechanicalFastenerAnchorBolt\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2a923279-bb1b-43b8-9d11-88748abb36c9\tPset_MechanicalFastenerAnchorBolt.AnchorBoltDiameter[Type]\tLENGTH\t\t283\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta2ba0c4e-138b-450f-92c6-079f0f2b89f1\tPset_MechanicalFastenerAnchorBolt.AnchorBoltLength[Type]\tLENGTH\t\t283\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc04f71f5-b250-41e0-8530-406b44293d92\tPset_MechanicalFastenerAnchorBolt.AnchorBoltProtrusionLength[Type]\tLENGTH\t\t283\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tce03a176-0d7f-48c9-a1b8-239b6f007404\tPset_MechanicalFastenerAnchorBolt.AnchorBoltThreadLength[Type]\tLENGTH\t\t283\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t284\tPset_MechanicalFastenerBolt\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdc52519a-370c-4020-8d49-5c0741c7f051\tPset_MechanicalFastenerBolt.HeadShape[Type]\tTEXT\t\t284\t1\tIfcLabel\t1\nPARAM\t40c9aeba-c32f-4a4f-843f-42eb32644af5\tPset_MechanicalFastenerBolt.KeyShape[Type]\tTEXT\t\t284\t1\tIfcLabel\t1\nPARAM\t5c786117-c1fc-45ff-a094-7d8eb5ad90b5\tPset_MechanicalFastenerBolt.NutsCount[Type]\tINTEGER\t\t284\t1\tIfcCountMeasure\t1\nPARAM\tb058edb0-4ea9-4166-beea-f9ebe7c0d030\tPset_MechanicalFastenerBolt.NutShape[Type]\tTEXT\t\t284\t1\tIfcLabel\t1\nPARAM\t4708e692-811f-4642-85ab-5ab42e56092f\tPset_MechanicalFastenerBolt.ThreadDiameter[Type]\tLENGTH\t\t284\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td779ba84-5cf4-46dd-a1a6-9d00548d082e\tPset_MechanicalFastenerBolt.ThreadLength[Type]\tLENGTH\t\t284\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t80ca8304-ca85-4891-a364-817fdc8cf136\tPset_MechanicalFastenerBolt.WashersCount[Type]\tINTEGER\t\t284\t1\tIfcCountMeasure\t1\nPARAM\t11fd86b2-39a0-4a42-b112-09b476c503da\tPset_MechanicalFastenerBolt.WasherShape[Type]\tTEXT\t\t284\t1\tIfcLabel\t1\n#\nGROUP\t285\tPset_MechanicalFastenerCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t487c16d8-966d-498f-95fc-8e087ea30eb1\tPset_MechanicalFastenerCommon.NominalDiameter[Type]\tLENGTH\t\t285\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcc95b328-338e-4d40-aeb6-4db5044ea647\tPset_MechanicalFastenerCommon.NominalLength[Type]\tLENGTH\t\t285\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t286\tPset_MedicalDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2e0babf7-864c-4c36-b6d8-1bf691628186\tPset_MedicalDeviceTypeCommon.Reference[Type]\tTEXT\t\t286\t1\tIfcIdentifier\t1\nPARAM\t5df70c6f-567b-4eb6-b22f-2ea848480085\tPset_MedicalDeviceTypeCommon.Status[Type]\tTEXT\t\t286\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t287\tPset_MemberCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6b870c11-085a-4166-83bb-7daad61f8555\tPset_MemberCommon.FireRating[Type]\tTEXT\t\t287\t1\tIfcLabel\t1\nPARAM\ta4b624ea-871b-4cbc-abdc-e76206bc6e34\tPset_MemberCommon.IsExternal[Type]\tYESNO\t\t287\t1\tIfcBoolean\t1\nPARAM\tbec6ebf9-ab87-4cb3-bec3-9775cf06fadd\tPset_MemberCommon.LoadBearing[Type]\tYESNO\t\t287\t1\tIfcBoolean\t1\nPARAM\t9c2089d0-692e-4dbf-976d-40b9ed7abc31\tPset_MemberCommon.Reference[Type]\tTEXT\t\t287\t1\tIfcIdentifier\t1\nPARAM\t48b9660a-922b-4c5e-9b38-05974861236d\tPset_MemberCommon.Roll[Type]\tNUMBER\t\t287\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tea64bbac-75bf-428b-bacc-9d8886afa3d6\tPset_MemberCommon.Slope[Type]\tNUMBER\t\t287\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t9576111d-1751-4241-977a-7edcfab52403\tPset_MemberCommon.Span[Type]\tLENGTH\t\t287\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfc9f29c7-f117-4deb-a967-7eeec169fa7e\tPset_MemberCommon.Status[Type]\tTEXT\t\t287\t1\tPEnum_ElementStatus\t1\nPARAM\t908a250c-ebe3-40b9-bfe4-f8f26a581bd8\tPset_MemberCommon.ThermalTransmittance[Type]\tNUMBER\t\t287\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t288\tPset_MotorConnectionTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2ae16318-9fdb-4df8-99cc-42af74a5b71e\tPset_MotorConnectionTypeCommon.Reference[Type]\tTEXT\t\t288\t1\tIfcIdentifier\t1\nPARAM\t6ab6f34d-2edf-4d24-a014-24627343c342\tPset_MotorConnectionTypeCommon.Status[Type]\tTEXT\t\t288\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t289\tPset_MultiStateInput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf321b947-310e-4e18-8685-52532a631e40\tPset_MultiStateInput.AlarmValues[Type]\tMULTILINETEXT\t\t289\t1\tPropertyListValue\t1\nPARAM\t9cdf6e22-2b9e-4033-935e-3d194655cdd9\tPset_MultiStateInput.EventEnable[Type]\tTEXT\t\t289\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\t95782e0c-da34-4ef6-8014-6943cf603358\tPset_MultiStateInput.NotifyType[Type]\tTEXT\t\t289\t1\tPEnum_BACnetNotifyType\t1\nPARAM\t6a8979e8-a760-456e-9ae4-e5787a14fb7c\tPset_MultiStateInput.NumberOfStates[Type]\tINTEGER\t\t289\t1\tIfcInteger\t1\nPARAM\t44e9929b-d60d-4bb9-9fcc-46861885e721\tPset_MultiStateInput.StateText[Type]\tMULTILINETEXT\t\t289\t1\tPropertyListValue\t1\n#\nGROUP\t290\tPset_MultiStateOutput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8201ec8f-229d-42be-a524-a5b212b87c04\tPset_MultiStateOutput.AlarmValues[Type]\tMULTILINETEXT\t\t290\t1\tPropertyListValue\t1\nPARAM\tbf9ec0b5-e95b-4b3d-b4f3-577dba95a5de\tPset_MultiStateOutput.EventEnable[Type]\tTEXT\t\t290\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\tc18c7c9d-d88c-4942-80e6-7cb56c07b1cb\tPset_MultiStateOutput.NotifyType[Type]\tTEXT\t\t290\t1\tPEnum_BACnetNotifyType\t1\nPARAM\t31afd126-2894-4b44-818f-f2feae471bc8\tPset_MultiStateOutput.NumberOfStates[Type]\tINTEGER\t\t290\t1\tIfcInteger\t1\nPARAM\t7a286f52-1040-4deb-b84c-2efa8756a8d3\tPset_MultiStateOutput.StateText[Type]\tMULTILINETEXT\t\t290\t1\tPropertyListValue\t1\n#\nGROUP\t291\tPset_OpeningElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8ee14156-35e6-46da-ae64-d2712dbe164b\tPset_OpeningElementCommon.FireExit[Type]\tYESNO\t\t291\t1\tIfcBoolean\t1\nPARAM\t6aa48b90-f7f6-48f7-b803-d526590b06e3\tPset_OpeningElementCommon.ParallelJambs[Type]\tNUMBER\t\t291\t1\tIfcBoolean \t1\nPARAM\t6c298ff5-edfe-409f-b293-38c614293fcc\tPset_OpeningElementCommon.ProtectedOpening[Type]\tYESNO\t\t291\t1\tIfcBoolean\t1\nPARAM\t9d2c3539-71dc-434f-b52d-7600b4bd7bfb\tPset_OpeningElementCommon.Purpose[Type]\tTEXT\t\t291\t1\tIfcLabel\t1\nPARAM\t0d29ae77-9f19-4701-a7a1-cce762e3da80\tPset_OpeningElementCommon.Reference[Type]\tTEXT\t\t291\t1\tIfcIdentifier\t1\nPARAM\t0c4f6d9e-9fe3-4096-9e14-450ea05cc34a\tPset_OpeningElementCommon.Status[Type]\tTEXT\t\t291\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t292\tPset_OutletTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1ecd7cc5-27c8-45fa-962c-31badeadfd2e\tPset_OutletTypeCommon.IsPluggableOutlet[Type]\tYESNO\t\t292\t1\tIfcLogical\t1\nPARAM\t4ef4bf5e-24c6-49af-b31b-63ac06035055\tPset_OutletTypeCommon.NumberOfSockets[Type]\tINTEGER\t\t292\t1\tIfcInteger\t1\nPARAM\t23f48668-2c01-4fe9-9959-c4b6fba46f3e\tPset_OutletTypeCommon.Reference[Type]\tTEXT\t\t292\t1\tIfcIdentifier\t1\nPARAM\t8a026609-c3b2-4f9a-a1ae-991e3425de33\tPset_OutletTypeCommon.Status[Type]\tTEXT\t\t292\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t293\tPset_OutsideDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3d78105f-47a3-4a85-83b4-688dd5389536\tPset_OutsideDesignCriteria.BuildingThermalExposure[Type]\tTEXT\t\t293\t1\tPEnum_BuildingThermalExposure\t1\nPARAM\t37a8e8f5-8447-4381-9399-f01002574b7c\tPset_OutsideDesignCriteria.CoolingDesignDay[Type]\tTEXT\t\t293\t1\tIfcDateTime\t1\nPARAM\t279396b1-a504-4bfc-a77c-cca54ff5255b\tPset_OutsideDesignCriteria.CoolingDryBulb[Type]\tNUMBER\t\t293\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tb6c81bad-efb6-4da7-8b97-f8cf64fccc24\tPset_OutsideDesignCriteria.CoolingWetBulb[Type]\tNUMBER\t\t293\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t71aececa-b3b1-47fa-88b8-04a78d3175a9\tPset_OutsideDesignCriteria.HeatingDesignDay[Type]\tTEXT\t\t293\t1\tIfcDateTime\t1\nPARAM\tf3cf636b-30c8-4574-b053-f1ddc3930788\tPset_OutsideDesignCriteria.HeatingDryBulb[Type]\tNUMBER\t\t293\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t2b688990-9a40-4c1c-8eb6-e13da60435b8\tPset_OutsideDesignCriteria.HeatingWetBulb[Type]\tNUMBER\t\t293\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t6e53c72a-8dd8-46fa-926d-8d6285376ac7\tPset_OutsideDesignCriteria.PrevailingWindDirection[Type]\tNUMBER\t\t293\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t81947f73-6438-41d7-a30d-af83c47e86b3\tPset_OutsideDesignCriteria.PrevailingWindVelocity[Type]\tNUMBER\t\t293\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tbfb87014-3eba-4563-91c5-d741dab2a8f0\tPset_OutsideDesignCriteria.WeatherDataDate[Type]\tTEXT\t\t293\t1\tIfcDateTime\t1\nPARAM\ta98482ab-b889-4f34-8621-e7c42785b8c9\tPset_OutsideDesignCriteria.WeatherDataStation[Type]\tTEXT\t\t293\t1\tIfcText\t1\n#\nGROUP\t294\tPset_PackingInstructions\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t88b0774e-e25c-4771-b26d-719897981d66\tPset_PackingInstructions.ContainerMaterial[Type]\tMULTILINETEXT\t\t294\t1\tIfcMaterialDefinition\t1\nPARAM\t2ce81dee-da7d-4f53-8ca4-b772343e9d88\tPset_PackingInstructions.PackingCareType[Type]\tTEXT\t\t294\t1\tPEnum_PackingCareType\t1\nPARAM\t1ae09b26-53a1-4360-90b3-194e32310760\tPset_PackingInstructions.SpecialInstructions[Type]\tTEXT\t\t294\t1\tIfcText\t1\nPARAM\tee5ddac9-f9bc-483a-9e0e-14ff8fed2596\tPset_PackingInstructions.WrappingMaterial[Type]\tMULTILINETEXT\t\t294\t1\tIfcMaterialDefinition\t1\n#\nGROUP\t295\tPset_Permit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4d15b7cd-09d3-42c4-b810-21fd00fcccee\tPset_Permit.EndDate[Type]\tTEXT\t\t295\t1\tIfcDateTime\t1\nPARAM\t71b7e1e2-7eb5-4f6e-a630-f0b4c56d7f03\tPset_Permit.EndTime[Type]\tMULTILINETEXT\t\t295\t1\tIfcLocalTime\t1\nPARAM\t1644b014-dc47-4ab4-864f-18d88feee2c5\tPset_Permit.EscortRequirement[Type]\tYESNO\t\t295\t1\tIfcBoolean\t1\nPARAM\t6e2e1f3d-8ba3-4bbd-aa09-8045644a9568\tPset_Permit.PermitDuration[Type]\tMULTILINETEXT\t\t295\t1\tIfcDateAndTime\t1\nPARAM\tcfac8ced-046a-45d4-935b-de5feddea1c5\tPset_Permit.PermitType[Type]\tTEXT\t\t295\t1\tPEnum_PermitType\t1\nPARAM\t1cc5a816-8e97-47da-9d09-fc7ae154a092\tPset_Permit.SpecialRequirements[Type]\tTEXT\t\t295\t1\tIfcText\t1\nPARAM\ta1bb66e3-55a0-4016-8bbf-9a9fd2ceadd4\tPset_Permit.StartDate[Type]\tTEXT\t\t295\t1\tIfcDateTime\t1\nPARAM\tb1acdc22-3015-48c3-a9c2-b897c9b8e98f\tPset_Permit.StartTime[Type]\tMULTILINETEXT\t\t295\t1\tIfcLocalTime\t1\n#\nGROUP\t296\tPset_PileCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te69623fb-d758-42df-afc3-743a73fae10f\tPset_PileCommon.LoadBearing[Type]\tYESNO\t\t296\t1\tIfcBoolean\t1\nPARAM\td17d9f5e-2335-4bb2-baad-adbf5a68923e\tPset_PileCommon.Reference[Type]\tTEXT\t\t296\t1\tIfcIdentifier\t1\nPARAM\t281a5b5a-c420-4a68-88e7-4111103a75da\tPset_PileCommon.Status[Type]\tTEXT\t\t296\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t297\tPset_PipeConnection\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1e24bf4e-4838-4a94-8cad-8b282c50438f\tPset_PipeConnection.ConnectionType[Type]\tMULTILINETEXT\t\t297\t1\tPropertyListValue\t1\n#\nGROUP\t298\tPset_PipeConnectionFlanged\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6d6b4705-7474-4299-9a29-beba6519b59e\tPset_PipeConnectionFlanged.BoltholePitch[Type]\tLENGTH\t\t298\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t80bfea5e-e5c7-4c11-beb6-edfe7375cf43\tPset_PipeConnectionFlanged.BoltSize[Type]\tLENGTH\t\t298\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t74174d13-f4a0-4c3c-91aa-ee61536f939b\tPset_PipeConnectionFlanged.BoreSize[Type]\tLENGTH\t\t298\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9ff73b59-03d8-4f1f-9a89-ffc4eb655281\tPset_PipeConnectionFlanged.FlangeDiameter[Type]\tLENGTH\t\t298\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t58c25a52-ba53-4b61-a7cd-aa8f65f6683b\tPset_PipeConnectionFlanged.FlangeStandard[Type]\tTEXT\t\t298\t1\tIfcLabel\t1\nPARAM\t1fd3cd9a-3186-47e2-be4d-856acb476c53\tPset_PipeConnectionFlanged.FlangeTable[Type]\tTEXT\t\t298\t1\tIfcLabel\t1\nPARAM\t84c4791b-7034-4f77-afbc-31bc923c30a5\tPset_PipeConnectionFlanged.FlangeThickness[Type]\tLENGTH\t\t298\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td3242747-d3ee-4162-a527-a93e10cf7f7e\tPset_PipeConnectionFlanged.Material[Type]\tMULTILINETEXT\t\t298\t1\tIfcMaterial\t1\nPARAM\tabab0947-96ab-4854-8258-da38a440a6b6\tPset_PipeConnectionFlanged.NumberOfBoltholes[Type]\tINTEGER\t\t298\t1\tIfcInteger\t1\n#\nGROUP\t299\tPset_PipeFittingOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te0e84f31-8800-46bc-a2f3-d5d11d7e1218\tPset_PipeFittingOccurrence.Color[Type]\tTEXT\t\t299\t1\tIfcLabel\t1\nPARAM\tf324a046-9419-4a0b-99fe-f6cb7799edea\tPset_PipeFittingOccurrence.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t299\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t300\tPset_PipeFittingPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5cad7977-82b1-471f-b327-2006b5b9c059\tPset_PipeFittingPHistory.FlowrateLeakage[Type]\tMULTILINETEXT\t\t300\t1\tIfcTimeSeries\t1\nPARAM\ta935ea5b-b0a7-434b-a407-3d939a2af798\tPset_PipeFittingPHistory.LossCoefficient[Type]\tMULTILINETEXT\t\t300\t1\tIfcTimeSeries\t1\n#\nGROUP\t301\tPset_PipeFittingTypeBend\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0f92cc6e-0ba9-422c-918e-cf042e592da6\tPset_PipeFittingTypeBend.BendAngle[Type]\tANGLE\t\t301\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t149d8e7c-1a3f-488e-9718-68955bcf9fba\tPset_PipeFittingTypeBend.BendRadius[Type]\tLENGTH\t\t301\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t302\tPset_PipeFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2bc892ea-6c33-40fd-a8a7-fa52c9cb4dda\tPset_PipeFittingTypeCommon.EndStyleTreatment[Type]\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\nPARAM\t44f5c3d0-c715-4200-a29e-e02b084ada26\tPset_PipeFittingTypeCommon.FittingLossFactor[Type]\tNUMBER\t\t302\t1\tIfcReal\t1\nPARAM\tb04f9db1-7d61-4a99-96a1-750848905621\tPset_PipeFittingTypeCommon.InnerDiameter[Type]\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\nPARAM\t7abed324-20bb-462f-a36f-3341f58d7ce7\tPset_PipeFittingTypeCommon.Material[Type]\tMULTILINETEXT\t\t302\t1\tIfcMaterial\t1\nPARAM\t10b7993b-faca-4d1f-aec6-a08efd7b2ed2\tPset_PipeFittingTypeCommon.NominalDiameter[Type]\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\nPARAM\tb882c9dd-7d32-44c3-a781-f36385f4b7f3\tPset_PipeFittingTypeCommon.OuterDiameter[Type]\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\nPARAM\t03f8db3f-b7b4-4878-9891-7f0f5f816cca\tPset_PipeFittingTypeCommon.PressureClass[Type]\tNUMBER\t\t302\t1\tIfcPressureMeasure\t1\nPARAM\t10d90dd8-03e4-42a8-bf68-f8ab0598e34e\tPset_PipeFittingTypeCommon.PressureRange[Type]\tMULTILINETEXT\t\t302\t1\tPropertyBoundedValue\t1\nPARAM\t9b359a61-aade-4653-bd3f-2e1ce4b1389d\tPset_PipeFittingTypeCommon.Reference[Type]\tTEXT\t\t302\t1\tIfcIdentifier\t1\nPARAM\tb5cdb44a-3d0d-44a2-9ddd-8fbf8ca43f2e\tPset_PipeFittingTypeCommon.Status[Type]\tTEXT\t\t302\t1\tPEnum_ElementStatus\t1\nPARAM\tfd8e2f61-0b6f-4650-b34d-564d6cb13468\tPset_PipeFittingTypeCommon.SubType[Type]\tTEXT\t\t302\t1\tIfcLabel\t1\nPARAM\t5247001e-5480-4764-97fd-041fde4cc424\tPset_PipeFittingTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t302\t1\tPropertyBoundedValue\t1\nPARAM\t5870c2d0-ef41-4538-921b-6a3cb77b847d\tPset_PipeFittingTypeCommon.UnitWeight[Type]\tNUMBER\t\t302\t1\tIfcMassMeasure\t1\n#\nGROUP\t303\tPset_PipeFittingTypeJunction\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7282870e-6ad7-486c-b3c2-e540f719960e\tPset_PipeFittingTypeJunction.JunctionLeftAngle[Type]\tANGLE\t\t303\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t08f81114-f464-4f17-b31a-68ae2a36bd2e\tPset_PipeFittingTypeJunction.JunctionLeftRadius[Type]\tLENGTH\t\t303\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2f996d55-8704-473b-9566-18f1a103c76e\tPset_PipeFittingTypeJunction.JunctionRightAngle[Type]\tANGLE\t\t303\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t56f67587-5dc9-4612-aac6-95961a93a1af\tPset_PipeFittingTypeJunction.JunctionRightRadius[Type]\tLENGTH\t\t303\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tffb1b883-8e0b-40f4-acfb-a564a441c8ac\tPset_PipeFittingTypeJunction.JunctionType[Type]\tTEXT\t\t303\t1\tPEnum_PipeFittingJunctionType\t1\n#\nGROUP\t304\tPset_PipeSegmentOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdc003b82-4fcd-464d-8d93-3bbb4203f13d\tPset_PipeSegmentOccurrence.Color[Type]\tTEXT\t\t304\t1\tIfcLabel\t1\nPARAM\t573acf68-38c7-4deb-bd06-20375423f590\tPset_PipeSegmentOccurrence.Gradient[Type]\tNUMBER\t\t304\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t155af95a-4776-4850-a97b-a390bcac7d02\tPset_PipeSegmentOccurrence.InteriorRoughnessCoefficient[Type]\tLENGTH\t\t304\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t80c33b9a-e768-4e91-83bb-5a27c942468b\tPset_PipeSegmentOccurrence.InvertElevation[Type]\tLENGTH\t\t304\t1\tIfcLengthMeasure\t1\n#\nGROUP\t305\tPset_PipeSegmentPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta4e5c6ba-85bf-4646-8ff6-61f9229db467\tPset_PipeSegmentPHistory.FluidFlowLeakage[Type]\tMULTILINETEXT\t\t305\t1\tIfcTimeSeries\t1\nPARAM\t8edabf12-d434-4d64-aa17-6f6868587d48\tPset_PipeSegmentPHistory.LeakageCurve[Type]\tMULTILINETEXT\t\t305\t1\tIfcTimeSeries\t1\n#\nGROUP\t306\tPset_PipeSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc5e44e46-6f3a-4cb5-8e8b-69b47c1f5d55\tPset_PipeSegmentTypeCommon.EndStyleTreatment[Type]\tMULTILINETEXT\t\t306\t1\tPropertyListValue\t1\nPARAM\tad42a7bc-37ce-4519-8f0c-c70799a853a8\tPset_PipeSegmentTypeCommon.InnerDiameter[Type]\tLENGTH\t\t306\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t34beeffc-d80f-41bd-acc5-15bc68719d91\tPset_PipeSegmentTypeCommon.Material[Type]\tMULTILINETEXT\t\t306\t1\tIfcMaterial\t1\nPARAM\t0f4b54bf-5f61-4d40-8b66-57d766c8bfea\tPset_PipeSegmentTypeCommon.NominalDiameter[Type]\tLENGTH\t\t306\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t485d392f-db58-4184-b5a3-d898a9f3f70b\tPset_PipeSegmentTypeCommon.OuterDiameter[Type]\tLENGTH\t\t306\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta78bb18f-9142-4854-a0f3-484b7d5f8e7d\tPset_PipeSegmentTypeCommon.PressureRange[Type]\tMULTILINETEXT\t\t306\t1\tPropertyBoundedValue\t1\nPARAM\t93ccafdc-4f6f-4e7d-bb78-3fcb5f43e3be\tPset_PipeSegmentTypeCommon.Reference[Type]\tTEXT\t\t306\t1\tIfcIdentifier\t1\nPARAM\t4ada149b-e9e2-4e47-bc2f-b4e33ff6cd42\tPset_PipeSegmentTypeCommon.Status[Type]\tTEXT\t\t306\t1\tPEnum_ElementStatus\t1\nPARAM\t63e78675-c9d1-4cb8-8822-0d4d659a83c1\tPset_PipeSegmentTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t306\t1\tPropertyBoundedValue\t1\nPARAM\t5c019f88-eca6-4b93-bfd2-a04ff3dabb66\tPset_PipeSegmentTypeCommon.UnitWeight[Type]\tNUMBER\t\t306\t1\tIfcMassMeasure\t1\nPARAM\t83c36101-57b5-47f8-a374-c99838f60292\tPset_PipeSegmentTypeCommon.WorkingPressure[Type]\tNUMBER\t\t306\t1\tIfcPressureMeasure\t1\n#\nGROUP\t307\tPset_PipeSegmentTypeCulvert\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9049b102-a322-4027-af99-591d334283a9\tPset_PipeSegmentTypeCulvert.ClearDepth[Type]\tLENGTH\t\t307\t1\tIfcLengthMeasure\t1\nPARAM\tca0c3bbe-dc26-4370-a5fd-8a1f17bcce5a\tPset_PipeSegmentTypeCulvert.InternalWidth[Type]\tLENGTH\t\t307\t1\tIfcLengthMeasure\t1\n#\nGROUP\t308\tPset_PipeSegmentTypeGutter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6dc2f523-d503-47f5-b9e1-52b210b9394c\tPset_PipeSegmentTypeGutter.FlowRating[Type]\tNUMBER\t\t308\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t3da0b78b-5362-4c7a-bab0-4e273bf4c277\tPset_PipeSegmentTypeGutter.Slope[Type]\tNUMBER\t\t308\t1\tIfcPlaneAngleMeasure\t1\n#\nGROUP\t309\tPset_PlateCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5c5d67a3-4f53-46bc-97de-fc6949191c1a\tPset_PlateCommon.AcousticRating[Type]\tTEXT\t\t309\t1\tIfcLabel\t1\nPARAM\t73cea862-84f5-4766-b228-c3fc7fa483f0\tPset_PlateCommon.FireRating[Type]\tTEXT\t\t309\t1\tIfcLabel\t1\nPARAM\t88fa1d15-de30-4d50-a43b-31cba65a193f\tPset_PlateCommon.IsExternal[Type]\tYESNO\t\t309\t1\tIfcBoolean\t1\nPARAM\t4603cc9e-a795-4269-96cc-79535d1ffe40\tPset_PlateCommon.LoadBearing[Type]\tYESNO\t\t309\t1\tIfcBoolean\t1\nPARAM\t858b53b2-ce4f-47c8-8fd4-bbc923308a9c\tPset_PlateCommon.Reference[Type]\tTEXT\t\t309\t1\tIfcIdentifier\t1\nPARAM\td4fd8b9c-f9f9-4ebc-b5f1-a669df1c690c\tPset_PlateCommon.Status[Type]\tTEXT\t\t309\t1\tPEnum_ElementStatus\t1\nPARAM\tbc35b3e3-149c-4874-b9c0-77888ed69965\tPset_PlateCommon.ThermalTransmittance[Type]\tNUMBER\t\t309\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t310\tPset_PrecastConcreteElementFabrication\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdb65332b-d17e-4e21-a20a-0f58d7ed427d\tPset_PrecastConcreteElementFabrication.ActualErectionDate[Type]\tTEXT\t\t310\t1\tIfcDateTime\t1\nPARAM\tf874b6fa-a009-442f-bc30-9944b45566ee\tPset_PrecastConcreteElementFabrication.ActualProductionDate[Type]\tTEXT\t\t310\t1\tIfcDateTime\t1\nPARAM\tb65de00c-7844-4ee7-9cb0-57425970c191\tPset_PrecastConcreteElementFabrication.AsBuiltLocationNumber[Type]\tTEXT\t\t310\t1\tIfcLabel\t1\nPARAM\tb2df4aae-da22-422b-a2c6-de97686a8138\tPset_PrecastConcreteElementFabrication.PieceMark[Type]\tTEXT\t\t310\t1\tIfcLabel\t1\nPARAM\t9276c6e6-8e57-41b8-9b18-8eb245414510\tPset_PrecastConcreteElementFabrication.ProductionLotId[Type]\tTEXT\t\t310\t1\tIfcIdentifier\t1\nPARAM\tff7a3ab2-604b-47de-930d-cdddd3c86f3c\tPset_PrecastConcreteElementFabrication.SerialNumber[Type]\tTEXT\t\t310\t1\tIfcIdentifier\t1\nPARAM\t03b685ae-1eea-4a91-af53-e84736741c70\tPset_PrecastConcreteElementFabrication.TypeDesignator[Type]\tTEXT\t\t310\t1\tIfcLabel\t1\n#\nGROUP\t311\tPset_PrecastConcreteElementGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t45c05fc8-61bd-4160-80d9-fef068806a8b\tPset_PrecastConcreteElementGeneral.BatterAtEnd[Type]\tNUMBER\t\t311\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tc930fed2-393f-44ac-b667-1f2410b8963f\tPset_PrecastConcreteElementGeneral.BatterAtStart[Type]\tNUMBER\t\t311\t1\tIfcPlaneAngleMeasure\t1\nPARAM\ta4001419-88e5-4f0a-b5b5-3789e40a45d1\tPset_PrecastConcreteElementGeneral.CamberAtMidspan[Type]\tNUMBER\t\t311\t1\tIfcRatioMeasure\t1\nPARAM\t931b14d2-0ca6-4db9-bb2e-e74dbf7eef5a\tPset_PrecastConcreteElementGeneral.CornerChamfer[Type]\tLENGTH\t\t311\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t34fb1c44-897f-4406-8ebf-7d2549fbf7b2\tPset_PrecastConcreteElementGeneral.DesignLocationNumber[Type]\tTEXT\t\t311\t1\tIfcLabel\t1\nPARAM\t77160467-bf55-4f9b-bd12-866a3d51dabe\tPset_PrecastConcreteElementGeneral.ElementGrossVolume[Type]\tVOLUME\t\t311\t1\tIfcVolumeMeasure\t1\nPARAM\tf6146a88-3cff-438b-8632-c6dcc1f5c11c\tPset_PrecastConcreteElementGeneral.ElementNetVolume[Type]\tVOLUME\t\t311\t1\tIfcVolumeMeasure\t1\nPARAM\t43840174-1e3c-42ec-9c9b-5e5631f16ed7\tPset_PrecastConcreteElementGeneral.ElementWeight[Type]\tNUMBER\t\t311\t1\tIfcMassMeasure\t1\nPARAM\t7d0e6f27-cb9b-4eca-b83d-f82d4c3ae89b\tPset_PrecastConcreteElementGeneral.FormStrippingStrength[Type]\tNUMBER\t\t311\t1\tIfcPressureMeasure\t1\nPARAM\t8d63b85c-6a6c-4d49-833e-168c0db4e485\tPset_PrecastConcreteElementGeneral.HollowCorePlugging[Type]\tTEXT\t\t311\t1\tIfcLabel\t1\nPARAM\t707844be-5455-44c8-86c3-3f4a9d8ce9b6\tPset_PrecastConcreteElementGeneral.InitialTension[Type]\tNUMBER\t\t311\t1\tIfcPressureMeasure\t1\nPARAM\t74561c84-1f34-47d0-b8b3-84097ecc9735\tPset_PrecastConcreteElementGeneral.LiftingStrength[Type]\tNUMBER\t\t311\t1\tIfcPressureMeasure\t1\nPARAM\t32c52035-9ae8-4259-920d-0d899f985e9c\tPset_PrecastConcreteElementGeneral.ManufacturingToleranceClass[Type]\tTEXT\t\t311\t1\tIfcLabel\t1\nPARAM\tcae0ec9b-d5fd-4f65-8e26-30eeef8a8c5b\tPset_PrecastConcreteElementGeneral.MinimumAllowableSupportLength[Type]\tLENGTH\t\t311\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t215967ef-45bc-4e51-b54d-1f66934b44e9\tPset_PrecastConcreteElementGeneral.PieceMark[Type]\tTEXT\t\t311\t1\tIfcLabel\t1\nPARAM\tb3729bb6-f8c9-47be-b043-ab15484ef9f9\tPset_PrecastConcreteElementGeneral.ProductionLotId[Type]\tTEXT\t\t311\t1\tIfcIdentifier\t1\nPARAM\tdf9708e2-fa6a-4a3c-92eb-462bdc7b8582\tPset_PrecastConcreteElementGeneral.ReleaseStrength[Type]\tNUMBER\t\t311\t1\tIfcPressureMeasure\t1\nPARAM\tb986711f-8a08-46d5-9e3d-b562a100b200\tPset_PrecastConcreteElementGeneral.SerialNumber[Type]\tTEXT\t\t311\t1\tIfcIdentifier\t1\nPARAM\tf1c3c3dc-c16e-4179-9b26-a127c236e5a6\tPset_PrecastConcreteElementGeneral.Shortening[Type]\tNUMBER\t\t311\t1\tIfcRatioMeasure\t1\nPARAM\td91b8d96-8a0b-4d22-a377-56fcd535f6bf\tPset_PrecastConcreteElementGeneral.SupportDuringTransportDescription[Type]\tTEXT\t\t311\t1\tIfcText\t1\nPARAM\t4a0387be-fde1-40d3-b2a5-e2374ff135b9\tPset_PrecastConcreteElementGeneral.SupportDuringTransportDocReference[Type]\tMULTILINETEXT\t\t311\t1\tIfcExternalReference\t1\nPARAM\tb0cabe29-2cf3-40e0-ac55-a49263519526\tPset_PrecastConcreteElementGeneral.TendonRelaxation[Type]\tNUMBER\t\t311\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0c6c92cd-26f4-412a-a4a0-f5ed2d99de0f\tPset_PrecastConcreteElementGeneral.TransportationStrength[Type]\tNUMBER\t\t311\t1\tIfcPressureMeasure\t1\nPARAM\tcc8a822a-f298-415a-9719-9894a6559580\tPset_PrecastConcreteElementGeneral.Twisting[Type]\tNUMBER\t\t311\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t7719294a-dd18-48a3-82aa-58e1ab101aec\tPset_PrecastConcreteElementGeneral.TypeDesignator[Type]\tTEXT\t\t311\t1\tIfcLabel\t1\n#\nGROUP\t312\tPset_PrecastSlab\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4f1de80b-ec15-4ec7-b4b6-ad758e64115e\tPset_PrecastSlab.AngleBetweenComponentAxes[Type]\tNUMBER\t\t312\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t297dc718-b99b-417b-8381-cf5b982560f1\tPset_PrecastSlab.AngleToFirstAxis[Type]\tNUMBER\t\t312\t1\tIfcPlaneAngleMeasure\t1\nPARAM\ted565e48-3c0c-4edf-837c-c7dc1d54a87b\tPset_PrecastSlab.DistanceBetweenComponentAxes[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0e12fe38-a793-46b9-ae77-04457f8e7445\tPset_PrecastSlab.EdgeDistanceToFirstAxis[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6d29d618-88a3-4a27-8182-e5814cb5fbc9\tPset_PrecastSlab.NominalThickness[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5024cfcf-6c8e-42ac-83fe-add3e388c93b\tPset_PrecastSlab.NominalToppingThickness[Type]\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tad0093d2-0965-41cd-aecd-44b30bae044e\tPset_PrecastSlab.ToppingType[Type]\tTEXT\t\t312\t1\tIfcLabel\t1\nPARAM\t6c59d728-d5ba-46c5-b65e-dda31873960e\tPset_PrecastSlab.TypeDesignator[Type]\tTEXT\t\t312\t1\tIfcLabel\t1\n#\nGROUP\t313\tPset_ProductRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5eb1b768-2768-4a9b-85cb-1acb6971097f\tPset_ProductRequirements.Category[Type]\tTEXT\t\t313\t1\tIfcLabel\t1\nPARAM\t102429d7-b76e-4370-b968-2538045f9137\tPset_ProductRequirements.Classification[Type]\tMULTILINETEXT\t\t313\t1\tIfcClassificationReference\t1\nPARAM\t575fe423-8ed9-48c0-8095-8a06b0b58326\tPset_ProductRequirements.DemandImportanceValue[Type]\tTEXT\t\t313\t1\tIfcLabel\t1\nPARAM\t6721edea-60bf-41d1-9bfc-49e35486f1f9\tPset_ProductRequirements.DemandThresholdValue[Type]\tTEXT\t\t313\t1\tIfcLabel\t1\nPARAM\t60d5810a-eda9-48ca-b2a4-d0156822f265\tPset_ProductRequirements.DemandValue[Type]\tTEXT\t\t313\t1\tIfcLabel\t1\nPARAM\tb016fbda-20f7-41eb-b667-2d8866593ade\tPset_ProductRequirements.GapValue[Type]\tTEXT\t\t313\t1\tIfcLabel\t1\nPARAM\t16008a58-aa40-438f-8f31-a5100ff12d3a\tPset_ProductRequirements.GapValueWeighted[Type]\tTEXT\t\t313\t1\tIfcLabel\t1\nPARAM\t30c55297-d29d-4629-9e0a-d19aa6bafa26\tPset_ProductRequirements.GroupName[Type]\tTEXT\t\t313\t1\tIfcLabel\t1\nPARAM\t88b806f2-3420-4fa8-ba17-2b417e1bba57\tPset_ProductRequirements.Name[Type]\tTEXT\t\t313\t1\tIfcLabel\t1\nPARAM\t87a6840a-48f6-46df-acb3-69d71f28f555\tPset_ProductRequirements.SupplyEvaluationValue[Type]\tTEXT\t\t313\t1\tIfcLabel\t1\n#\nGROUP\t314\tPset_ProfileArbitraryDoubleT\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfea1d0e9-be79-4deb-a2a5-1a7353a5e555\tPset_ProfileArbitraryDoubleT.FlangeBaseFillet[Type]\tLENGTH\t\t314\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t91dc09ad-7269-40f3-8c88-4f6da1ea72d0\tPset_ProfileArbitraryDoubleT.FlangeChamfer[Type]\tLENGTH\t\t314\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tc44022ed-1a9a-43f6-aef7-8d8cb6f0142e\tPset_ProfileArbitraryDoubleT.FlangeDepth[Type]\tLENGTH\t\t314\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8fca2b0f-3d1b-4699-a66c-548abde641cf\tPset_ProfileArbitraryDoubleT.FlangeDraft[Type]\tLENGTH\t\t314\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tf9688506-d1d0-4d79-a88b-a57f774e4e2c\tPset_ProfileArbitraryDoubleT.FlangeTopFillet[Type]\tLENGTH\t\t314\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t9469c692-13f3-4c11-abbd-3c4e94e6eefc\tPset_ProfileArbitraryDoubleT.LeftFlangeWidth[Type]\tLENGTH\t\t314\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td7fc065f-7806-4156-9713-1669ae0d0a71\tPset_ProfileArbitraryDoubleT.OverallDepth[Type]\tLENGTH\t\t314\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tae95bd13-4bd6-4f23-89eb-5a805ea3f150\tPset_ProfileArbitraryDoubleT.OverallWidth[Type]\tLENGTH\t\t314\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te36b7019-f796-4dba-a4e0-dd778bd5136c\tPset_ProfileArbitraryDoubleT.RightFlangeWidth[Type]\tLENGTH\t\t314\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t875c7de9-bfb2-44dc-813c-3d8a15c2e28e\tPset_ProfileArbitraryDoubleT.StemBaseChamfer[Type]\tLENGTH\t\t314\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\ta82a32c3-90b7-48dd-9c9c-212f1d3b5c58\tPset_ProfileArbitraryDoubleT.StemBaseFillet[Type]\tLENGTH\t\t314\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t99543a29-ec26-4368-b5ad-2f471303420b\tPset_ProfileArbitraryDoubleT.StemBaseWidth[Type]\tLENGTH\t\t314\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t01f96f03-cc48-4c4d-876b-f2a639e1a339\tPset_ProfileArbitraryDoubleT.StemTopChamfer[Type]\tLENGTH\t\t314\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tff9a6fe8-dd9c-4a45-b818-a5a855aae1ee\tPset_ProfileArbitraryDoubleT.StemTopFillet[Type]\tLENGTH\t\t314\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t1f1682ca-8180-46cb-a67b-dd983b3a4e61\tPset_ProfileArbitraryDoubleT.StemTopWidth[Type]\tLENGTH\t\t314\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t315\tPset_ProfileArbitraryHollowCore\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td1904530-86b4-486f-9b7d-e3aabf545591\tPset_ProfileArbitraryHollowCore.BaseChamfer[Type]\tLENGTH\t\t315\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tb7163ade-97e1-4e7c-acf5-e21ae6753850\tPset_ProfileArbitraryHollowCore.BottomCover[Type]\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t22446560-afb6-4381-b40c-8e8c3344b6e9\tPset_ProfileArbitraryHollowCore.CenterCoreBaseHeight[Type]\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9c8d5de3-878c-4a45-b068-a9b97fce1dce\tPset_ProfileArbitraryHollowCore.CenterCoreBaseWidth[Type]\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7c258951-c567-49df-a814-a6d8e6c753ae\tPset_ProfileArbitraryHollowCore.CenterCoreMiddleHeight[Type]\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t67039050-2739-4386-93fd-638479bfc3af\tPset_ProfileArbitraryHollowCore.CenterCoreSpacing[Type]\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t882f03c9-6827-4355-a494-35037143730c\tPset_ProfileArbitraryHollowCore.CenterCoreTopHeight[Type]\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcd784796-3acf-4740-8091-38a421bac8d7\tPset_ProfileArbitraryHollowCore.CenterCoreTopWidth[Type]\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2e68ff14-ba06-4806-b0ac-a7e7abdc9407\tPset_ProfileArbitraryHollowCore.CoreBaseHeight[Type]\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3195dc3d-a183-4998-9ead-3c65bec1f131\tPset_ProfileArbitraryHollowCore.CoreBaseWidth[Type]\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t84e2adfd-0b26-4cd1-8b30-4a96c83b8fd5\tPset_ProfileArbitraryHollowCore.CoreMiddleHeight[Type]\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t489630f1-37f0-4f94-aae4-d5c12314d0dd\tPset_ProfileArbitraryHollowCore.CoreSpacing[Type]\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t72e1f419-4768-4906-ab89-a6137435832c\tPset_ProfileArbitraryHollowCore.CoreTopHeight[Type]\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32f35683-d0c1-4b34-8a05-8f025def61b7\tPset_ProfileArbitraryHollowCore.CoreTopWidth[Type]\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc528efee-3aad-4537-9d21-81e3dd3bc587\tPset_ProfileArbitraryHollowCore.DraftBaseOffset[Type]\tLENGTH\t\t315\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t1f0094d5-81c0-47ab-b0fb-58ec95744047\tPset_ProfileArbitraryHollowCore.DraftSideOffset[Type]\tLENGTH\t\t315\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\ta12c8df4-3bb6-46b5-9d9a-bdc6ef7380e0\tPset_ProfileArbitraryHollowCore.EdgeDraft[Type]\tLENGTH\t\t315\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\te75bbbb6-a9f7-4225-be5e-69396884be5e\tPset_ProfileArbitraryHollowCore.KeyDepth[Type]\tLENGTH\t\t315\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\te1cb198a-0d76-4ba8-a045-2122f755e074\tPset_ProfileArbitraryHollowCore.KeyHeight[Type]\tLENGTH\t\t315\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t34d72c2c-9a2b-4973-bbc1-3b4f629f4834\tPset_ProfileArbitraryHollowCore.KeyOffset[Type]\tLENGTH\t\t315\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t6cb29cea-0ec2-4431-8bf7-7a5a0609b36e\tPset_ProfileArbitraryHollowCore.NumberOfCores[Type]\tINTEGER\t\t315\t1\tIfcCountMeasure\t1\nPARAM\tf0d8b077-5092-4cda-ba9f-7c0980c1b2dc\tPset_ProfileArbitraryHollowCore.OverallDepth[Type]\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t05e0881d-5b06-4a8b-8f31-e2a911b21c4d\tPset_ProfileArbitraryHollowCore.OverallWidth[Type]\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t316\tPset_ProfileMechanical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8329f0ff-42bb-48ee-9e3c-4548af2f0855\tPset_ProfileMechanical.CentreOfGravityInX[Type]\tLENGTH\t\t316\t1\tIfcLengthMeasure\t1\nPARAM\t72393ab1-4603-47ca-b5b9-4a64b66cad2a\tPset_ProfileMechanical.CentreOfGravityInY[Type]\tLENGTH\t\t316\t1\tIfcLengthMeasure\t1\nPARAM\t1ab73a26-6a40-4e95-94a5-288c9dea670a\tPset_ProfileMechanical.CrossSectionArea[Type]\tAREA\t\t316\t1\tIfcAreaMeasure\t1\nPARAM\ta0f63ee7-a45e-41f2-902b-c617cfca1310\tPset_ProfileMechanical.MassPerLength[Type]\tNUMBER\t\t316\t1\tIfcMassPerLengthMeasure\t1\nPARAM\tfd4e27ff-793b-45ce-9bfd-ec0dc954eac1\tPset_ProfileMechanical.MaximumPlateThickness[Type]\tLENGTH\t\t316\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta22bbccb-afeb-495e-a87d-89f03990f401\tPset_ProfileMechanical.MaximumSectionModulusY[Type]\tNUMBER\t\t316\t1\tIfcSectionModulusMeasure\t1\nPARAM\t6eec5e42-208a-44a9-a6ef-33f401947d55\tPset_ProfileMechanical.MaximumSectionModulusZ[Type]\tNUMBER\t\t316\t1\tIfcSectionModulusMeasure\t1\nPARAM\t44b1a600-40e0-4b75-9d4c-941cdafc37fe\tPset_ProfileMechanical.MinimumPlateThickness[Type]\tLENGTH\t\t316\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbebd29fd-6153-4b9b-a207-e5aa2a0d35b8\tPset_ProfileMechanical.MinimumSectionModulusY[Type]\tNUMBER\t\t316\t1\tIfcSectionModulusMeasure\t1\nPARAM\tadd80393-e0fe-4441-b299-5b9038f1b7d6\tPset_ProfileMechanical.MinimumSectionModulusZ[Type]\tNUMBER\t\t316\t1\tIfcSectionModulusMeasure\t1\nPARAM\t69b66aba-7af7-4966-a041-3ce91bc4831e\tPset_ProfileMechanical.MomentOfInertiaY[Type]\tNUMBER\t\t316\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\t96b4b8ac-64ca-4da6-9b92-d84164d06309\tPset_ProfileMechanical.MomentOfInertiaYZ[Type]\tNUMBER\t\t316\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\ta5923575-34c5-48ba-a622-ee4ff97f838b\tPset_ProfileMechanical.MomentOfInertiaZ[Type]\tNUMBER\t\t316\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\tda228a36-65bb-409e-afa5-9a21473751c4\tPset_ProfileMechanical.Perimeter[Type]\tLENGTH\t\t316\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0d58f863-bbd8-4e4e-9500-8feff81e4bf5\tPset_ProfileMechanical.PlasticShapeFactorY[Type]\tNUMBER\t\t316\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7b50672a-07af-48fc-93b3-08b964a8263b\tPset_ProfileMechanical.PlasticShapeFactorZ[Type]\tNUMBER\t\t316\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td6b04ead-54d0-4330-b4c4-d8f4ada31226\tPset_ProfileMechanical.ShearAreaY[Type]\tAREA\t\t316\t1\tIfcAreaMeasure\t1\nPARAM\tff6ffd7a-d1d9-4c17-b9fe-ddbe9dfda26e\tPset_ProfileMechanical.ShearAreaZ[Type]\tAREA\t\t316\t1\tIfcAreaMeasure\t1\nPARAM\t36ace196-3d10-4614-adbc-99c7fa8d2100\tPset_ProfileMechanical.ShearCentreY[Type]\tLENGTH\t\t316\t1\tIfcLengthMeasure\t1\nPARAM\t7ff736d7-13c4-4736-b404-2c33b30335fc\tPset_ProfileMechanical.ShearCentreZ[Type]\tLENGTH\t\t316\t1\tIfcLengthMeasure\t1\nPARAM\t01c471da-a085-4b1b-91da-177f7b2ff54c\tPset_ProfileMechanical.ShearDeformationAreaY[Type]\tAREA\t\t316\t1\tIfcAreaMeasure\t1\nPARAM\te96c1583-0d29-4fee-bb0e-9fd02dc9a840\tPset_ProfileMechanical.ShearDeformationAreaZ[Type]\tAREA\t\t316\t1\tIfcAreaMeasure\t1\nPARAM\t1e725204-a0d2-4293-a484-6ceb9d8c4ffd\tPset_ProfileMechanical.TorsionalConstantX[Type]\tNUMBER\t\t316\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\t2b8ea148-4ee0-469e-a923-c44808bb4c28\tPset_ProfileMechanical.TorsionalSectionModulus[Type]\tNUMBER\t\t316\t1\tIfcSectionModulusMeasure\t1\nPARAM\ta331c45b-4a2c-4c46-b42a-323bbc2f6773\tPset_ProfileMechanical.WarpingConstant[Type]\tNUMBER\t\t316\t1\tIfcWarpingConstantMeasure\t1\n#\nGROUP\t317\tPset_ProjectCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta80a7f06-4ca4-4240-bc0e-8cb09563f22f\tPset_ProjectCommon.BuildingPermitId[Type]\tTEXT\t\t317\t1\tIfcIdentifier\t1\nPARAM\tdea1e0db-1818-45c0-81ba-d414d99502cc\tPset_ProjectCommon.ConstructionMode[Type]\tTEXT\t\t317\t1\tIfcLabel\t1\nPARAM\t46bcfae4-d026-459d-8301-26c68b7122ad\tPset_ProjectCommon.GrossAreaPlanned[Type]\tAREA\t\t317\t1\tIfcAreaMeasure\t1\n#\nGROUP\t318\tPset_ProjectionElementShadingDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td9135c33-5f54-4498-8b41-be7e3fa9b099\tPset_ProjectionElementShadingDevice.Color[Type]\tTEXT\t\t318\t1\tIfcLabel\t1\n#\nGROUP\t319\tPset_ProjectionElementShadingDevicePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7964c072-28b0-4884-91f0-320f78464862\tPset_ProjectionElementShadingDevicePHistory.Azimuth[Type]\tTEXT\t\t319\t1\tIfcLabel\t1\nPARAM\t31ce4fef-e744-4abd-9132-cb40b1180f99\tPset_ProjectionElementShadingDevicePHistory.TiltAngle[Type]\tNUMBER\t\t319\t1\tIfcReal\t1\n#\nGROUP\t320\tPset_ProjectionElementTypeShadingDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf16e4c0c-b979-4de1-bd48-677c909c55c3\tPset_ProjectionElementTypeShadingDevice.AverageSolarTransmittance[Type]\tNUMBER\t\t320\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t21dd4cdd-e53e-4592-8ab7-2bf382084b6a\tPset_ProjectionElementTypeShadingDevice.AverageVisibleTransmittance[Type]\tNUMBER\t\t320\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t937a6b0b-1018-4148-9e96-58a8bfd4312f\tPset_ProjectionElementTypeShadingDevice.Color[Type]\tTEXT\t\t320\t1\tIfcLabel\t1\nPARAM\tce9ee94a-c167-48a4-9bdc-a0d197bb845e\tPset_ProjectionElementTypeShadingDevice.Material[Type]\tMULTILINETEXT\t\t320\t1\tIfcMaterial\t1\nPARAM\t0f3a4b0f-565e-4530-ab12-2f9ebef66e86\tPset_ProjectionElementTypeShadingDevice.Reflectance[Type]\tNUMBER\t\t320\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6631a6c8-6d9c-4b1b-af25-8ac23403de44\tPset_ProjectionElementTypeShadingDevice.Roughness[Type]\tLENGTH\t\t320\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td0cca151-cbe9-49dc-9d18-4e82d23cd285\tPset_ProjectionElementTypeShadingDevice.ShadingDeviceType[Type]\tTEXT\t\t320\t1\tPEnum_ProjectionElementShadingDeviceType\t1\nPARAM\te6f16b05-7d5b-43f0-8c80-1a482543c59a\tPset_ProjectionElementTypeShadingDevice.TiltRange[Type]\tMULTILINETEXT\t\t320\t1\tPropertyBoundedValue\t1\n#\nGROUP\t321\tPset_ProjectOrderChangeOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83800315-0718-4884-9d3f-6f04ed4cfa8b\tPset_ProjectOrderChangeOrder.BudgetSource[Type]\tTEXT\t\t321\t1\tIfcText\t1\nPARAM\t4f2d17e3-2902-4630-a9bf-7a524a4239fc\tPset_ProjectOrderChangeOrder.ChangeDescription[Type]\tTEXT\t\t321\t1\tIfcText\t1\nPARAM\t91de525e-f146-4854-879b-b8ecf1cfa2bc\tPset_ProjectOrderChangeOrder.ReasonForChange[Type]\tTEXT\t\t321\t1\tIfcText\t1\n#\nGROUP\t322\tPset_ProjectOrderMaintenanceWorkOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t32c7dd51-b7b7-4dfc-9dd3-fe2d9f789ce0\tPset_ProjectOrderMaintenanceWorkOrder.ContractualType[Type]\tTEXT\t\t322\t1\tIfcText\t1\nPARAM\tb40c1ee5-ba97-4a77-8da0-588c58e8b928\tPset_ProjectOrderMaintenanceWorkOrder.FaultPriorityType[Type]\tTEXT\t\t322\t1\tPEnum_PriorityType\t1\nPARAM\tcb8c1df6-5e4d-449a-8ecc-ca4c36746663\tPset_ProjectOrderMaintenanceWorkOrder.IfNotAccomplished[Type]\tTEXT\t\t322\t1\tIfcText\t1\nPARAM\ta7acb64c-ba46-4365-a569-fabd9dcb2b50\tPset_ProjectOrderMaintenanceWorkOrder.LocationPriorityType[Type]\tTEXT\t\t322\t1\tPEnum_PriorityType\t1\nPARAM\t0e81bfe7-c28d-4b77-8e5d-2780fad4f07c\tPset_ProjectOrderMaintenanceWorkOrder.LongJobDescription[Type]\tTEXT\t\t322\t1\tIfcText\t1\nPARAM\t381365c7-b0e2-4e0c-bfc4-93c1c87b6e74\tPset_ProjectOrderMaintenanceWorkOrder.MaintenaceType[Type]\tTEXT\t\t322\t1\tPEnum_MaintenanceType\t1\nPARAM\t220368ae-7cea-4143-8f42-0b7e2a241b8a\tPset_ProjectOrderMaintenanceWorkOrder.ProductDescription[Type]\tTEXT\t\t322\t1\tIfcText\t1\nPARAM\t3545dedd-489e-4e2a-b48e-2753348c9eec\tPset_ProjectOrderMaintenanceWorkOrder.ScheduledFrequency[Type]\tNUMBER\t\t322\t1\tIfcTimeMeasure\t1\nPARAM\t31fd0295-5cd4-45e0-a5d1-3207f20937d6\tPset_ProjectOrderMaintenanceWorkOrder.ShortJobDescription[Type]\tTEXT\t\t322\t1\tIfcText\t1\nPARAM\t400dc48c-9b60-4349-9ac5-137ddad7d698\tPset_ProjectOrderMaintenanceWorkOrder.WorkTypeRequested[Type]\tTEXT\t\t322\t1\tIfcText\t1\n#\nGROUP\t323\tPset_ProjectOrderMoveOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf030033f-1f44-46b0-8cfe-aadb34ae94f3\tPset_ProjectOrderMoveOrder.MoveDescription[Type]\tTEXT\t\t323\t1\tIfcText\t1\nPARAM\t3297afb0-8519-4627-8925-581576e54c70\tPset_ProjectOrderMoveOrder.SpecialInstructions[Type]\tTEXT\t\t323\t1\tIfcText\t1\n#\nGROUP\t324\tPset_ProjectOrderPurchaseOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t109d93a0-7be3-47ee-9dfe-cc93381c1d1f\tPset_ProjectOrderPurchaseOrder.IsFOB[Type]\tYESNO\t\t324\t1\tIfcBoolean\t1\nPARAM\tcc82b2b2-f74f-4c98-b862-a76f596a4e6f\tPset_ProjectOrderPurchaseOrder.ShipMethod[Type]\tTEXT\t\t324\t1\tIfcText\t1\n#\nGROUP\t325\tPset_ProjectOrderWorkOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t00e1ebda-9627-4bf4-8f83-cab9f88bf32e\tPset_ProjectOrderWorkOrder.ContractualType[Type]\tTEXT\t\t325\t1\tIfcText\t1\nPARAM\t84a6b374-b5c4-40d4-9d8c-142f0989e884\tPset_ProjectOrderWorkOrder.IfNotAccomplished[Type]\tTEXT\t\t325\t1\tIfcText\t1\nPARAM\tb134c868-8a47-4bd8-bdf2-5ced91ff2111\tPset_ProjectOrderWorkOrder.LongJobDescription[Type]\tTEXT\t\t325\t1\tIfcText\t1\nPARAM\t85a18f99-af80-4e97-9b25-8626172a3c73\tPset_ProjectOrderWorkOrder.ProductDescription[Type]\tTEXT\t\t325\t1\tIfcText\t1\nPARAM\t0e7cc50a-ec76-4a0b-b0ee-06d230c2ab16\tPset_ProjectOrderWorkOrder.ShortJobDescription[Type]\tTEXT\t\t325\t1\tIfcText\t1\nPARAM\t6502f844-2ee6-4ef6-a400-e23c387158a0\tPset_ProjectOrderWorkOrder.WorkTypeRequested[Type]\tTEXT\t\t325\t1\tIfcText\t1\n#\nGROUP\t326\tPset_PropertyAgreement\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t92365283-7ea8-40cf-a4c7-f885ba647fe5\tPset_PropertyAgreement.AgreementType[Type]\tTEXT\t\t326\t1\tPEnum_PropertyAgreementType\t1\nPARAM\t088f6499-3c55-49b7-af8f-185fe4791a79\tPset_PropertyAgreement.CommencementDate[Type]\tTEXT\t\t326\t1\tIfcDate\t1\nPARAM\tbe8f7f7c-c2cd-4583-9b52-2954ac057c3b\tPset_PropertyAgreement.ConditionCommencement[Type]\tTEXT\t\t326\t1\tIfcText\t1\nPARAM\t1b1f4221-5aa3-4a59-a571-3c3cd810b7fc\tPset_PropertyAgreement.ConditionTermination[Type]\tTEXT\t\t326\t1\tIfcText\t1\nPARAM\tec1e05cc-9ca8-4d1a-b3f8-acf5f9b6a2e8\tPset_PropertyAgreement.Duration[Type]\tTEXT\t\t326\t1\tIfcDuration\t1\nPARAM\tda8cb153-a820-4666-a0ff-bf9078be7dc3\tPset_PropertyAgreement.Identifier[Type]\tTEXT\t\t326\t1\tIfcIdentifier\t1\nPARAM\ta8562687-2632-485e-8553-039cf301b96d\tPset_PropertyAgreement.Options[Type]\tTEXT\t\t326\t1\tIfcText\t1\nPARAM\tbe6d1875-28de-4c71-81b1-ba60ead6007a\tPset_PropertyAgreement.PropertyName[Type]\tTEXT\t\t326\t1\tIfcLabel\t1\nPARAM\t51f1baaa-b423-40ab-bf3e-61ef8ad02cce\tPset_PropertyAgreement.Restrictions[Type]\tTEXT\t\t326\t1\tIfcText\t1\nPARAM\tced0ca40-5499-4450-857f-73151b8670e1\tPset_PropertyAgreement.TerminationDate[Type]\tTEXT\t\t326\t1\tIfcDate\t1\nPARAM\te08d5c9b-03e6-49cf-b90d-52ae9753c397\tPset_PropertyAgreement.Version[Type]\tTEXT\t\t326\t1\tIfcLabel\t1\nPARAM\t0445f196-36ef-43e8-b09b-a15c5fbc57d9\tPset_PropertyAgreement.VersionDate[Type]\tTEXT\t\t326\t1\tIfcDate\t1\n#\nGROUP\t327\tPset_ProtectiveDeviceBreakerUnitI2TCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcc3fda79-7f60-4a36-9823-a7a371e8245b\tPset_ProtectiveDeviceBreakerUnitI2TCurve.BreakerUnitCurve[Type]\tMULTILINETEXT\t\t327\t1\tPropertyTableValue\t1\nPARAM\tbe516c14-1204-46d8-be2e-42100c8c15cd\tPset_ProtectiveDeviceBreakerUnitI2TCurve.NominalCurrent[Type]\tNUMBER\t\t327\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t8cd50df0-3941-428e-921d-1da5f3e39f3f\tPset_ProtectiveDeviceBreakerUnitI2TCurve.VoltageLevel[Type]\tTEXT\t\t327\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t328\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbaff57f0-bba6-4e05-bad5-06355b150f28\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve.BreakerUnitFuseBreakingingCurve[Type]\tMULTILINETEXT\t\t328\t1\tPropertyTableValue\t1\nPARAM\ta7bae61b-3659-4de1-8624-139be1529f9f\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve.BreakerUnitFuseMeltingCurve[Type]\tMULTILINETEXT\t\t328\t1\tPropertyTableValue\t1\nPARAM\tdd2672b4-0704-47fa-ba0d-219a3d5b59d7\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve.VoltageLevel[Type]\tTEXT\t\t328\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t329\tPset_ProtectiveDeviceBreakerUnitIPICurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta8dfc754-ae97-4230-a450-16cff8824cbf\tPset_ProtectiveDeviceBreakerUnitIPICurve.BreakerUnitIPICurve[Type]\tMULTILINETEXT\t\t329\t1\tPropertyTableValue\t1\nPARAM\tfa555b05-8134-4389-84cb-682a6adfc686\tPset_ProtectiveDeviceBreakerUnitIPICurve.NominalCurrent[Type]\tNUMBER\t\t329\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t3bdbce25-5ca9-4741-8a5c-e00a392dd35a\tPset_ProtectiveDeviceBreakerUnitIPICurve.VoltageLevel[Type]\tTEXT\t\t329\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t330\tPset_ProtectiveDeviceBreakerUnitTypeMCB\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb08bfc35-e17a-4f98-b02f-513ae258ce7d\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICN60898[Type]\tNUMBER\t\t330\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tc6780110-b964-4808-8136-7af9224ae8f0\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICS60898[Type]\tNUMBER\t\t330\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t4b49d4b7-2c6f-41b9-84e0-25916fb956c3\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICS60947[Type]\tNUMBER\t\t330\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t4b489e35-b716-4ca3-a68e-b60dbfbc062f\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICU60947[Type]\tNUMBER\t\t330\t1\tIfcElectricCurrentMeasure\t1\nPARAM\te2de3ac0-60b0-443a-b10b-dc85305cdcd2\tPset_ProtectiveDeviceBreakerUnitTypeMCB.NominalCurrents[Type]\tMULTILINETEXT\t\t330\t1\tPropertyListValue\t1\nPARAM\tfc663b26-ff76-4f45-b3f4-1564c43f18cc\tPset_ProtectiveDeviceBreakerUnitTypeMCB.PowerLoss[Type]\tNUMBER\t\t330\t1\tIfcPowerMeasure\t1\nPARAM\tbae83c85-2c22-438c-9046-a4ce7d803ab8\tPset_ProtectiveDeviceBreakerUnitTypeMCB.VoltageLevel[Type]\tTEXT\t\t330\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t331\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6d31b0a5-d249-444d-929b-e7d64e3a7457\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICM60947[Type]\tNUMBER\t\t331\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t4ca67347-9f9d-4f0c-b8cf-e03a52397d48\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICS60947[Type]\tNUMBER\t\t331\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t3915f249-d71a-445f-add5-8314d4b09c1a\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICU60947[Type]\tNUMBER\t\t331\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t346bfee1-4060-442f-b246-dfb646f21271\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICW60947[Type]\tNUMBER\t\t331\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t5a8f0b7f-41a1-47db-92f6-52754a33c76e\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.PerformanceClasses[Type]\tMULTILINETEXT\t\t331\t1\tPropertyListValue\t1\nPARAM\t501eb86c-6689-4268-9d66-5e977bb96e90\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.VoltageLevel[Type]\tTEXT\t\t331\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t332\tPset_ProtectiveDeviceOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td694edb8-26ff-4743-99f2-0b58a34d5c4d\tPset_ProtectiveDeviceOccurrence.GroundFaultCurrentSetValue[Type]\tNUMBER\t\t332\t1\tIfcElectricCurrentMeasure\t1\nPARAM\teba1f8ae-07c9-4dc3-a65c-49ecfe8c6160\tPset_ProtectiveDeviceOccurrence.GroundFaultFunction[Type]\tYESNO\t\t332\t1\tIfcBoolean\t1\nPARAM\tdc1e0d1d-93d5-4091-95ee-db72d7c0e531\tPset_ProtectiveDeviceOccurrence.GroundFaulti2tFunction[Type]\tYESNO\t\t332\t1\tIfcBoolean\t1\nPARAM\tbb044ef6-02b4-4ac8-a30e-f150b91bc601\tPset_ProtectiveDeviceOccurrence.GroundFaultTrippingTime[Type]\tNUMBER\t\t332\t1\tIfcTimeMeasure\t1\nPARAM\t37b54793-d332-4bdf-8388-c5e8c8b8eff1\tPset_ProtectiveDeviceOccurrence.InstantaneousCurrentSetValue[Type]\tNUMBER\t\t332\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t2c5fc052-5173-455a-b8b9-47816884a2c6\tPset_ProtectiveDeviceOccurrence.InstantaneousTrippingTime[Type]\tNUMBER\t\t332\t1\tIfcTimeMeasure\t1\nPARAM\t33ffe19f-5bc4-45f1-8c1a-7f7f6953616a\tPset_ProtectiveDeviceOccurrence.LongTimeCurrentSetValue[Type]\tNUMBER\t\t332\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tf46888d0-62ff-4108-b756-333cbdef3cfe\tPset_ProtectiveDeviceOccurrence.LongTimeDelay[Type]\tNUMBER\t\t332\t1\tIfcTimeMeasure\t1\nPARAM\t5f47882d-1f09-4d2c-9158-fb62f57b474a\tPset_ProtectiveDeviceOccurrence.LongTimeFunction[Type]\tYESNO\t\t332\t1\tIfcBoolean\t1\nPARAM\t3ab2c022-ddda-44b4-9c3c-f2748be6ceaf\tPset_ProtectiveDeviceOccurrence.PoleUsage[Type]\tTEXT\t\t332\t1\tPEnum_PoleUsage\t1\nPARAM\td057085c-148e-49c0-8c62-95d2076caa76\tPset_ProtectiveDeviceOccurrence.ShortTimeCurrentSetValue[Type]\tNUMBER\t\t332\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t9d01a2ec-1ab9-4536-ad74-515716e47f53\tPset_ProtectiveDeviceOccurrence.ShortTimeFunction[Type]\tYESNO\t\t332\t1\tIfcBoolean\t1\nPARAM\tbe3e0e7d-842d-418e-84d0-88c65f3b70d4\tPset_ProtectiveDeviceOccurrence.ShortTimei2tFunction[Type]\tYESNO\t\t332\t1\tIfcBoolean\t1\nPARAM\t530d8df8-5c13-4fcd-86f9-0bf7cc3836c5\tPset_ProtectiveDeviceOccurrence.ShortTimeTrippingTime[Type]\tNUMBER\t\t332\t1\tIfcTimeMeasure\t1\n#\nGROUP\t333\tPset_ProtectiveDeviceTrippingCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tee7b331b-ae04-4847-8e01-08a5ecea3617\tPset_ProtectiveDeviceTrippingCurve.TrippingCurve[Type]\tMULTILINETEXT\t\t333\t1\tPropertyTableValue\t1\nPARAM\t40e71571-2459-4301-a3da-206cd2c34a69\tPset_ProtectiveDeviceTrippingCurve.TrippingCurveType[Type]\tTEXT\t\t333\t1\tPEnum_TrippingCurveType\t1\n#\nGROUP\t334\tPset_ProtectiveDeviceTrippingFunctionGCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1d1c4dda-bb03-4cbf-bd38-c0c68033b582\tPset_ProtectiveDeviceTrippingFunctionGCurve.CurrentTolerance1[Type]\tNUMBER\t\t334\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6189ddb1-ad58-43a0-9b42-979eb6fec1b8\tPset_ProtectiveDeviceTrippingFunctionGCurve.CurrentTolerance2[Type]\tNUMBER\t\t334\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t30861b67-1e0e-4d19-a22c-f502cc421bab\tPset_ProtectiveDeviceTrippingFunctionGCurve.CurrentToleranceLimit1[Type]\tNUMBER\t\t334\t1\tIfcTimeMeasure\t1\nPARAM\tc51cd6bb-52cb-480e-9a0e-f270133be362\tPset_ProtectiveDeviceTrippingFunctionGCurve.ExternalAdjusted[Type]\tYESNO\t\t334\t1\tIfcBoolean\t1\nPARAM\ted167458-aa8f-477e-97eb-00e8b4ece855\tPset_ProtectiveDeviceTrippingFunctionGCurve.IsCurrentTolerancePositiveOnly[Type]\tYESNO\t\t334\t1\tIfcBoolean\t1\nPARAM\taff32d30-2998-4e46-8cdb-8635ea93e2db\tPset_ProtectiveDeviceTrippingFunctionGCurve.IsSelectable[Type]\tYESNO\t\t334\t1\tIfcBoolean\t1\nPARAM\td758922b-5a56-4818-9129-71304845ea1d\tPset_ProtectiveDeviceTrippingFunctionGCurve.IsTimeTolerancePositiveOnly[Type]\tYESNO\t\t334\t1\tIfcBoolean\t1\nPARAM\t869e6158-0ab3-4628-99df-38ef6794618a\tPset_ProtectiveDeviceTrippingFunctionGCurve.NominalCurrentAdjusted[Type]\tYESNO\t\t334\t1\tIfcBoolean\t1\nPARAM\tadd5b49e-141c-46d7-973c-2ca989fc0b21\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrent[Type]\tNUMBER\t\t334\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tc6241f4a-8351-4f4d-87c4-bad9bcbb4218\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrentI2tEnd[Type]\tNUMBER\t\t334\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t1ceffb3a-ed86-45d0-88a1-fc0f549235ea\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrentI2tStart[Type]\tNUMBER\t\t334\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t37803fd2-3c84-4b51-9ed2-34999919342f\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTime[Type]\tNUMBER\t\t334\t1\tIfcTimeMeasure\t1\nPARAM\t4f3b5a86-c67a-4ae0-bb54-530c4e72a141\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTimeI2tEnd[Type]\tNUMBER\t\t334\t1\tIfcTimeMeasure\t1\nPARAM\td4abdbd2-9138-4809-bc56-fe37131ffdfe\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTimeI2tStart[Type]\tNUMBER\t\t334\t1\tIfcTimeMeasure\t1\nPARAM\t91680e15-9538-45d9-b87e-5590408b343d\tPset_ProtectiveDeviceTrippingFunctionGCurve.TimeTolerance1[Type]\tNUMBER\t\t334\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t406fba7b-d146-4d55-9478-241e7dd6ed2a\tPset_ProtectiveDeviceTrippingFunctionGCurve.TimeTolerance2[Type]\tNUMBER\t\t334\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t28e4187e-d2ae-43ba-9365-59ec9a53e72f\tPset_ProtectiveDeviceTrippingFunctionGCurve.TimeToleranceLimit1[Type]\tNUMBER\t\t334\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t335\tPset_ProtectiveDeviceTrippingFunctionICurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7be44cf-97cb-4c6b-b645-16955ab68ed1\tPset_ProtectiveDeviceTrippingFunctionICurve.CurrentTolerance1[Type]\tNUMBER\t\t335\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta500690d-4d6a-49b3-9e11-9d67f106984e\tPset_ProtectiveDeviceTrippingFunctionICurve.CurrentTolerance2[Type]\tNUMBER\t\t335\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t17691938-43e3-48ca-985e-c88199293e7e\tPset_ProtectiveDeviceTrippingFunctionICurve.CurrentToleranceLimit1[Type]\tNUMBER\t\t335\t1\tIfcTimeMeasure\t1\nPARAM\ta9d27ca8-d3a3-4835-851e-a69479d2916b\tPset_ProtectiveDeviceTrippingFunctionICurve.IsCurrentTolerancePositiveOnly[Type]\tYESNO\t\t335\t1\tIfcBoolean\t1\nPARAM\t56765725-6a4e-415b-8dbd-d05976bd84d7\tPset_ProtectiveDeviceTrippingFunctionICurve.IsOffWhenSFunctionOn[Type]\tYESNO\t\t335\t1\tIfcBoolean\t1\nPARAM\te80618d6-680a-4d3d-bb5f-b82d612db561\tPset_ProtectiveDeviceTrippingFunctionICurve.IsSelectable[Type]\tYESNO\t\t335\t1\tIfcBoolean\t1\nPARAM\tc796d049-319f-4193-822c-6345bcaf5a47\tPset_ProtectiveDeviceTrippingFunctionICurve.IsTimeTolerancePositiveOnly[Type]\tYESNO\t\t335\t1\tIfcBoolean\t1\nPARAM\ted7b106c-a138-4862-9647-65aaf2c3f10a\tPset_ProtectiveDeviceTrippingFunctionICurve.MaxAdjustmentX_ICS[Type]\tNUMBER\t\t335\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tdca1eb8d-7732-4a66-9d51-d489b0482520\tPset_ProtectiveDeviceTrippingFunctionICurve.NominalCurrentAdjusted[Type]\tYESNO\t\t335\t1\tIfcBoolean\t1\nPARAM\t736bf538-6613-4bd8-bcfe-25405f69147d\tPset_ProtectiveDeviceTrippingFunctionICurve.ReleaseCurrent[Type]\tNUMBER\t\t335\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t98dbc67f-aea7-4672-8c2b-8d00e1648f2b\tPset_ProtectiveDeviceTrippingFunctionICurve.ReleaseTime[Type]\tNUMBER\t\t335\t1\tIfcTimeMeasure\t1\nPARAM\tb7bcb326-62c1-4f12-af7b-ec5c696811ef\tPset_ProtectiveDeviceTrippingFunctionICurve.TimeTolerance1[Type]\tNUMBER\t\t335\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0c1efd0c-b7db-4f26-a9c9-3be2b71d987e\tPset_ProtectiveDeviceTrippingFunctionICurve.TimeTolerance2[Type]\tNUMBER\t\t335\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tdb60b3c1-4f90-4882-8df6-1d033053c860\tPset_ProtectiveDeviceTrippingFunctionICurve.TimeToleranceLimit1[Type]\tNUMBER\t\t335\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t336\tPset_ProtectiveDeviceTrippingFunctionLCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbcdf14ba-c844-45e0-a037-a56159039c65\tPset_ProtectiveDeviceTrippingFunctionLCurve.IsSelectable[Type]\tYESNO\t\t336\t1\tIfcBoolean\t1\nPARAM\t1ecec1db-9f33-4e22-b759-03d69d72a468\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerCurrent1[Type]\tNUMBER\t\t336\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t91481d75-3598-422b-abdf-35b3b1697cb9\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerCurrent2[Type]\tNUMBER\t\t336\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tc8a6a421-7c03-46a0-99ef-9a4cb148216b\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerTime1[Type]\tNUMBER\t\t336\t1\tIfcTimeMeasure\t1\nPARAM\t5e623474-23b1-4b66-af93-1c625620c900\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerTime2[Type]\tNUMBER\t\t336\t1\tIfcTimeMeasure\t1\nPARAM\tf988671a-66d1-4f7f-907e-3ead15e4ff3a\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperCurrent1[Type]\tNUMBER\t\t336\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t2e70e29c-e233-40dd-84ce-1aef4993d3ca\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperCurrent2[Type]\tNUMBER\t\t336\t1\tIfcElectricCurrentMeasure\t1\nPARAM\taee08d2f-9c1f-44a4-9f81-dc7d05d241be\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperTime1[Type]\tNUMBER\t\t336\t1\tIfcTimeMeasure\t1\nPARAM\t0637a03e-bb23-4b2f-a492-0829569f1500\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperTime2[Type]\tNUMBER\t\t336\t1\tIfcTimeMeasure\t1\n#\nGROUP\t337\tPset_ProtectiveDeviceTrippingFunctionSCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7bcbad53-9ddf-4538-b9e3-c82df982d936\tPset_ProtectiveDeviceTrippingFunctionSCurve.CurrentTolerance1[Type]\tNUMBER\t\t337\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4543e1ac-9d78-4e7b-868c-3f62b45d366d\tPset_ProtectiveDeviceTrippingFunctionSCurve.CurrentTolerance2[Type]\tNUMBER\t\t337\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc547a99f-990f-418e-8b31-80de9f55180b\tPset_ProtectiveDeviceTrippingFunctionSCurve.CurrentToleranceLimit1[Type]\tNUMBER\t\t337\t1\tIfcTimeMeasure\t1\nPARAM\tcd440920-29d5-409f-84db-23361888d665\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsCurrentTolerancePositiveOnly[Type]\tYESNO\t\t337\t1\tIfcBoolean\t1\nPARAM\t7729f4a7-7341-42f9-b559-e75bac95bbe7\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsOffWhenLfunctionOn[Type]\tYESNO\t\t337\t1\tIfcBoolean\t1\nPARAM\tfcc72729-4637-44b0-ab7a-5480c75b30fc\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsSelectable[Type]\tYESNO\t\t337\t1\tIfcBoolean\t1\nPARAM\t6503b228-11a7-4548-b4fb-28deafb2dde4\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsTimeTolerancePositiveOnly[Type]\tYESNO\t\t337\t1\tIfcBoolean\t1\nPARAM\t97f950c9-0cbe-49cd-9194-61d67eeebfd8\tPset_ProtectiveDeviceTrippingFunctionSCurve.NominalCurrentAdjusted[Type]\tYESNO\t\t337\t1\tIfcBoolean\t1\nPARAM\t4475fd16-4853-4313-9dc8-5e02176915a6\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrent[Type]\tNUMBER\t\t337\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t8695c64a-c211-4612-9455-448bfc20da35\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrentI2tEnd[Type]\tNUMBER\t\t337\t1\tIfcElectricCurrentMeasure\t1\nPARAM\te0732242-6c9a-4dfd-bf39-046e87070144\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrentI2tStart[Type]\tNUMBER\t\t337\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t2599b263-1946-4ae0-9f02-2f8cab0c9bcb\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTime[Type]\tNUMBER\t\t337\t1\tIfcTimeMeasure\t1\nPARAM\t0454af6d-7211-4ec3-8a1d-0643f0ff7b7d\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTimeI2tEnd[Type]\tNUMBER\t\t337\t1\tIfcTimeMeasure\t1\nPARAM\t98c97b32-de98-4271-811b-80520d03a4c7\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTimeI2tStart[Type]\tNUMBER\t\t337\t1\tIfcTimeMeasure\t1\nPARAM\t21487547-699e-4e3d-9df9-636c1151dc7f\tPset_ProtectiveDeviceTrippingFunctionSCurve.TimeTolerance1[Type]\tNUMBER\t\t337\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t9a531081-2071-43d2-84ee-07e75496981f\tPset_ProtectiveDeviceTrippingFunctionSCurve.TimeTolerance2[Type]\tNUMBER\t\t337\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tb7f27037-c363-4181-9358-fc176264561a\tPset_ProtectiveDeviceTrippingFunctionSCurve.TimeToleranceLimit1[Type]\tNUMBER\t\t337\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t338\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbd4cd8ed-d5bc-41ac-8380-ee33a5fc54e2\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentDesignation[Type]\tTEXT\t\t338\t1\tIfcLabel\t1\nPARAM\tbbad222e-b755-4568-83a2-f4b2d9ecb23a\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentRange[Type]\tMULTILINETEXT\t\t338\t1\tPropertyBoundedValue\t1\nPARAM\tc773f53a-446b-48f2-8807-a164a04b1605\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentRangeStepValue[Type]\tNUMBER\t\t338\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t8e473db4-21ba-4f12-9a05-11ef038f756c\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentValues[Type]\tMULTILINETEXT\t\t338\t1\tPropertyListValue\t1\nPARAM\tcb909e7b-2d0e-4d95-8a87-46ee218f0b20\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentValueType[Type]\tTEXT\t\t338\t1\tPEnum_AdjustmentValueType\t1\n#\nGROUP\t339\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t271027ab-d511-4d39-9a7e-81754cb69e45\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentDesignation[Type]\tTEXT\t\t339\t1\tIfcLabel\t1\nPARAM\te983684c-5d8f-4237-ab18-e7537fdf4c6a\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentRange[Type]\tMULTILINETEXT\t\t339\t1\tPropertyBoundedValue\t1\nPARAM\t657cdcc4-e84c-42c8-ab33-38451159031a\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentRangeStepValue[Type]\tNUMBER\t\t339\t1\tIfcTimeMeasure\t1\nPARAM\t088c1eef-73b6-4f01-8c45-183580605b0c\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentValues[Type]\tMULTILINETEXT\t\t339\t1\tPropertyListValue\t1\nPARAM\tc29ca0b2-0d13-4c95-92a5-2f4571ee2757\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentValueType[Type]\tTEXT\t\t339\t1\tPEnum_AdjustmentValueType\t1\nPARAM\tce20014b-7682-4887-8155-5d21b9220690\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.CurrentForTimeDelay[Type]\tNUMBER\t\t339\t1\tIfcTimeMeasure\t1\nPARAM\t4ccd136e-4cf7-4057-acb1-0b013ba79edf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.I2TApplicability[Type]\tTEXT\t\t339\t1\tPEnum_AdjustmentValueType\t1\n#\nGROUP\t340\tPset_ProtectiveDeviceTrippingUnitTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc4bbe3ab-977f-4bf4-b613-a444dd895f1a\tPset_ProtectiveDeviceTrippingUnitTypeCommon.AtexVerified[Type]\tYESNO\t\t340\t1\tIfcBoolean\t1\nPARAM\t53420746-1f27-403e-8c98-32f71d256627\tPset_ProtectiveDeviceTrippingUnitTypeCommon.LimitingTerminalSize[Type]\tAREA\t\t340\t1\tIfcAreaMeasure\t1\nPARAM\ta18fa980-86c2-4f90-86a0-c9d5666ea1e2\tPset_ProtectiveDeviceTrippingUnitTypeCommon.OldDevice[Type]\tYESNO\t\t340\t1\tIfcBoolean\t1\nPARAM\teb30a072-fcab-4ae1-a03c-52493befee34\tPset_ProtectiveDeviceTrippingUnitTypeCommon.Reference[Type]\tTEXT\t\t340\t1\tIfcIdentifier\t1\nPARAM\t9c6ad63c-3c9f-4d17-ab35-81829e7aa3d0\tPset_ProtectiveDeviceTrippingUnitTypeCommon.Standard[Type]\tTEXT\t\t340\t1\tIfcLabel\t1\nPARAM\t19395281-709b-4be4-b5c8-3fe692937606\tPset_ProtectiveDeviceTrippingUnitTypeCommon.Status[Type]\tTEXT\t\t340\t1\tPEnum_ElementStatus\t1\nPARAM\t897dd7f0-3047-430c-8554-b1d52b01828e\tPset_ProtectiveDeviceTrippingUnitTypeCommon.UseInDiscrimination[Type]\tYESNO\t\t340\t1\tIfcBoolean\t1\n#\nGROUP\t341\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb6fa515d-0208-41bb-8510-dba7f492f25c\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.CurveDesignation[Type]\tTEXT\t\t341\t1\tIfcLabel\t1\nPARAM\tc77defb3-3c20-46ff-9459-bd485366a42e\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.DefinedTemperature[Type]\tNUMBER\t\t341\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t7505fd8b-7cc4-4660-aa68-c8cdb0f1c19c\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.ElectroMagneticTrippingUnitType[Type]\tTEXT\t\t341\t1\tPEnum_ElectroMagneticTrippingUnitType\t1\nPARAM\t504a6faf-d7fb-4379-9b44-88c6d5ee6101\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I1[Type]\tNUMBER\t\t341\t1\tIfcReal\t1\nPARAM\t1455f9be-b855-4174-8da7-79c28d5586ac\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I2[Type]\tNUMBER\t\t341\t1\tIfcReal\t1\nPARAM\te5a2b7f1-f5cd-4ffb-8730-7b6be3b91282\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I4[Type]\tNUMBER\t\t341\t1\tIfcReal\t1\nPARAM\t39516e94-4c05-4906-9642-05ac498c86e5\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I5[Type]\tNUMBER\t\t341\t1\tIfcReal\t1\nPARAM\t8be8077e-5fd6-41dd-9ca4-a6e157cafafd\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.T2[Type]\tNUMBER\t\t341\t1\tIfcTimeMeasure\t1\nPARAM\t5993d76c-d8d3-43df-93a3-c563bf415d45\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.T5[Type]\tNUMBER\t\t341\t1\tIfcTimeMeasure\t1\nPARAM\t1b39fd28-372b-4384-9c9c-80aa6ebeaccd\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.TemperatureFactor[Type]\tNUMBER\t\t341\t1\tIfcRatioMeasure\t1\n#\nGROUP\t342\tPset_ProtectiveDeviceTrippingUnitTypeElectronic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t30e24326-0e9c-484d-8e13-8f2a26988919\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.ElectronicTrippingUnitType[Type]\tTEXT\t\t342\t1\tPEnum_ElectronicTrippingUnitType\t1\nPARAM\tb9a097c4-25f6-49a1-8282-ea541fee0a09\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection[Type]\tYESNO\t\t342\t1\tIfcBoolean\t1\nPARAM\tecb440bd-9d95-45fa-b9c4-4fb63a056bb2\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_100[Type]\tYESNO\t\t342\t1\tIfcBoolean\t1\nPARAM\tbd70efcf-0491-4f37-8716-b53f7a05520d\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_50[Type]\tYESNO\t\t342\t1\tIfcBoolean\t1\nPARAM\ta4d8b27f-0d88-4e03-9eec-8c4ebce3d750\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_Select[Type]\tYESNO\t\t342\t1\tIfcBoolean\t1\nPARAM\t80bd9f3c-20c8-460c-80f2-bfac54dc1d50\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.NominalCurrents[Type]\tMULTILINETEXT\t\t342\t1\tPropertyListValue\t1\n#\nGROUP\t343\tPset_ProtectiveDeviceTrippingUnitTypeResidualCurrent\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tebf0745e-ecb7-4034-a091-9b3ec9048b32\tPset_ProtectiveDeviceTrippingUnitTypeResidualCurrent.TrippingUnitReleaseCurrent[Type]\tTEXT\t\t343\t1\tPEnum_TrippingUnitReleaseCurrent\t1\n#\nGROUP\t344\tPset_ProtectiveDeviceTrippingUnitTypeThermal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td8b04e63-08f2-4ff9-8213-f22634921d49\tPset_ProtectiveDeviceTrippingUnitTypeThermal.CurveDesignation[Type]\tTEXT\t\t344\t1\tIfcLabel\t1\nPARAM\t646e6e2f-82fc-4c79-838a-f65330e76129\tPset_ProtectiveDeviceTrippingUnitTypeThermal.DefinedTemperature[Type]\tNUMBER\t\t344\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\te96f3b75-432a-4f38-9144-221b08ebccd5\tPset_ProtectiveDeviceTrippingUnitTypeThermal.I1[Type]\tNUMBER\t\t344\t1\tIfcReal\t1\nPARAM\t423d14db-932b-463e-8799-8b74366ac837\tPset_ProtectiveDeviceTrippingUnitTypeThermal.I2[Type]\tNUMBER\t\t344\t1\tIfcReal\t1\nPARAM\t473e8b7e-ae96-4a4a-a20e-3e46ea9cb8cf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.T2[Type]\tNUMBER\t\t344\t1\tIfcTimeMeasure\t1\nPARAM\t35809035-050b-4fbe-a621-7a56446f8298\tPset_ProtectiveDeviceTrippingUnitTypeThermal.TemperatureFactor[Type]\tNUMBER\t\t344\t1\tIfcRatioMeasure\t1\nPARAM\t9c2ace7f-7033-4afe-88ca-6cac7d9c1e0d\tPset_ProtectiveDeviceTrippingUnitTypeThermal.ThermalTrippingUnitType[Type]\tTEXT\t\t344\t1\tPEnum_ThermalTrippingUnitType\t1\n#\nGROUP\t345\tPset_ProtectiveDeviceTypeCircuitBreaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te45a2d14-34f4-4f21-a845-2e9232fe5686\tPset_ProtectiveDeviceTypeCircuitBreaker.CircuitBreakerType[Type]\tTEXT\t\t345\t1\tPEnum_CircuitBreakerType\t1\nPARAM\t38d349a6-f89b-4b52-a49c-3b9ab9ddf19a\tPset_ProtectiveDeviceTypeCircuitBreaker.ICM60947[Type]\tNUMBER\t\t345\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t1fb7138e-4216-428a-804f-f5b3af04648a\tPset_ProtectiveDeviceTypeCircuitBreaker.ICS60947[Type]\tNUMBER\t\t345\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t9e50213f-eaa7-42ca-8aad-57f903829293\tPset_ProtectiveDeviceTypeCircuitBreaker.ICU60947[Type]\tNUMBER\t\t345\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t83dc2306-b671-4a97-b81d-c686c3cdee3c\tPset_ProtectiveDeviceTypeCircuitBreaker.ICW60947[Type]\tNUMBER\t\t345\t1\tIfcElectricCurrentMeasure\t1\nPARAM\td2121096-66e8-4252-8581-60a9d94b999b\tPset_ProtectiveDeviceTypeCircuitBreaker.PerformanceClasses[Type]\tMULTILINETEXT\t\t345\t1\tPropertyListValue\t1\nPARAM\tc6eadec8-e9a8-433a-9666-320b7f9c1586\tPset_ProtectiveDeviceTypeCircuitBreaker.VoltageLevel[Type]\tTEXT\t\t345\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t346\tPset_ProtectiveDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t643c740f-5619-4a9b-982d-6a9bca5e2090\tPset_ProtectiveDeviceTypeCommon.CharacteristicTripCurve[Type]\tMULTILINETEXT\t\t346\t1\tPropertyTableValue\t1\nPARAM\t820a0319-2644-4c7b-93bd-b09e0c0f2e24\tPset_ProtectiveDeviceTypeCommon.CutOffCurrent[Type]\tNUMBER\t\t346\t1\t IfcElectricCurrentMeasure\t1\nPARAM\t86279e6c-ce3a-488a-9475-b9aec6f39395\tPset_ProtectiveDeviceTypeCommon.LimitingTerminalSize[Type]\tAREA\t\t346\t1\tIfcAreaMeasure\t1\nPARAM\tb62d0e35-2397-4c52-8897-0fdbc3a7d931\tPset_ProtectiveDeviceTypeCommon.MaximumRatedVoltage[Type]\tNUMBER\t\t346\t1\t IfcElectricVoltageMeasure\t1\nPARAM\t2634b74d-6605-46b6-80ac-512b1ce8d1b2\tPset_ProtectiveDeviceTypeCommon.ProtectiveTagType[Type]\tTEXT\t\t346\t1\tIfcLabel\t1\nPARAM\t068f5a2a-497e-4e35-a773-a339d4bbccd8\tPset_ProtectiveDeviceTypeCommon.RatedShortCircuitCurrent[Type]\tNUMBER\t\t346\t1\t IfcElectricCurrentMeasure\t1\nPARAM\t93a8f2df-b5ac-4776-ac2d-d1a1a4da2f20\tPset_ProtectiveDeviceTypeCommon.Reference[Type]\tTEXT\t\t346\t1\tIfcIdentifier\t1\nPARAM\tc731ff6b-5f7d-439b-b91e-99dd777c49aa\tPset_ProtectiveDeviceTypeCommon.StandardUsed[Type]\tTEXT\t\t346\t1\tIfcLabel\t1\nPARAM\t0c6398d0-57d5-4ef7-b9f7-ce08f20634a7\tPset_ProtectiveDeviceTypeCommon.Status[Type]\tTEXT\t\t346\t1\tPEnum_ElementStatus\t1\nPARAM\t9b9b0979-f8b3-4369-a6f8-84b601106821\tPset_ProtectiveDeviceTypeCommon.SwitchingDuty[Type]\tINTEGER\t\t346\t1\tIfcInteger\t1\n#\nGROUP\t347\tPset_ProtectiveDeviceTypeEarthFailureDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcb39fef5-0e66-4610-87e5-18bd86efdd7d\tPset_ProtectiveDeviceTypeEarthFailureDevice.EarthFailureDeviceType[Type]\tTEXT\t\t347\t1\tPEnum_EarthFailureDeviceType\t1\nPARAM\t5f308d20-4a39-4f21-add4-dddf68727d7a\tPset_ProtectiveDeviceTypeEarthFailureDevice.Sensitivity[Type]\tNUMBER\t\t347\t1\t IfcElectricCurrentMeasure\t1\n#\nGROUP\t348\tPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9442e339-9aec-4884-b1ca-38eca88b993c\tPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker.EarthFailureDeviceType[Type]\tTEXT\t\t348\t1\tPEnum_EarthFailureDeviceType\t1\nPARAM\t02f4d5aa-125e-47b0-b436-84f4a25d7c4b\tPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker.Sensitivity[Type]\tNUMBER\t\t348\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t349\tPset_ProtectiveDeviceTypeFuseDisconnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t925578c1-1e07-46a5-b6b7-7de4e9445d5f\tPset_ProtectiveDeviceTypeFuseDisconnector.FuseDisconnectorType[Type]\tTEXT\t\t349\t1\tPEnum_FuseDisconnectorType\t1\nPARAM\tb155c0c6-b618-47b3-a619-5d7e8a6cd771\tPset_ProtectiveDeviceTypeFuseDisconnector.IC60269[Type]\tNUMBER\t\t349\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t51a2851b-5f60-4412-a73f-d8e8ae9fcc88\tPset_ProtectiveDeviceTypeFuseDisconnector.PowerLoss[Type]\tNUMBER\t\t349\t1\tIfcPowerMeasure\t1\nPARAM\t82414caa-7eeb-4fdf-a086-ff0fe7ce3c1c\tPset_ProtectiveDeviceTypeFuseDisconnector.VoltageLevel[Type]\tTEXT\t\t349\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t350\tPset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5858dad0-03b8-4313-9f25-f7ede73ee9c2\tPset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker.Sensitivity[Type]\tNUMBER\t\t350\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t351\tPset_ProtectiveDeviceTypeResidualCurrentSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t020b4c03-a33b-45aa-85b9-fd470ca89cc5\tPset_ProtectiveDeviceTypeResidualCurrentSwitch.Sensitivity[Type]\tNUMBER\t\t351\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t352\tPset_ProtectiveDeviceTypeVaristor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td67c8584-8263-4e75-b4ea-00b9dcb82837\tPset_ProtectiveDeviceTypeVaristor.VaristorType[Type]\tTEXT\t\t352\t1\tPEnum_VaristorType\t1\n#\nGROUP\t353\tPset_PumpOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7d5002c8-fd3b-4c82-9aab-e5b1ae002fcb\tPset_PumpOccurrence.BaseType[Type]\tTEXT\t\t353\t1\tPEnum_PumpBaseType\t1\nPARAM\t613c1381-b8da-4d72-9b4c-195b1926cef6\tPset_PumpOccurrence.DriveConnectionType[Type]\tTEXT\t\t353\t1\tPEnum_PumpDriveConnectionType\t1\nPARAM\t1bdf5d2b-862d-4d41-9c96-1ee87c2ecc4f\tPset_PumpOccurrence.ImpellerDiameter[Type]\tLENGTH\t\t353\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t354\tPset_PumpPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t185cdc3a-e4c1-4bbb-8221-bf21ce06a8bd\tPset_PumpPHistory.Flowrate[Type]\tMULTILINETEXT\t\t354\t1\tIfcTimeSeries\t1\nPARAM\td7e06609-8236-4ac8-8e89-ff631f7ca512\tPset_PumpPHistory.MechanicalEfficiency[Type]\tMULTILINETEXT\t\t354\t1\tIfcTimeSeries\t1\nPARAM\tf30cf953-28b5-4ffe-bc34-971138d21472\tPset_PumpPHistory.OverallEfficiency[Type]\tMULTILINETEXT\t\t354\t1\tIfcTimeSeries\t1\nPARAM\t56f35c39-a983-4cc7-ab2c-1fbb621fae87\tPset_PumpPHistory.Power[Type]\tMULTILINETEXT\t\t354\t1\tIfcTimeSeries\t1\nPARAM\td48f50af-30e3-4c02-bccc-7850fbafd3e2\tPset_PumpPHistory.PressureRise[Type]\tMULTILINETEXT\t\t354\t1\tIfcTimeSeries\t1\nPARAM\tbb3acab9-15b8-4141-b174-e649bd73fe69\tPset_PumpPHistory.RotationSpeed[Type]\tMULTILINETEXT\t\t354\t1\tIfcTimeSeries\t1\n#\nGROUP\t355\tPset_PumpTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5da03394-96f8-44b7-95ae-2154c30d5939\tPset_PumpTypeCommon.CasingMaterial[Type]\tMULTILINETEXT\t\t355\t1\tIfcMaterial\t1\nPARAM\t235f295a-3910-46f0-ae14-cc3c435f6643\tPset_PumpTypeCommon.ConnectionSize[Type]\tLENGTH\t\t355\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t39ce70e6-04c0-4407-af87-fd0bdff32b81\tPset_PumpTypeCommon.FlowRateRange[Type]\tMULTILINETEXT\t\t355\t1\tPropertyBoundedValue\t1\nPARAM\t55c0ebae-4164-43bf-b8c3-942914ccfa6b\tPset_PumpTypeCommon.FlowResistanceRange[Type]\tMULTILINETEXT\t\t355\t1\tPropertyBoundedValue\t1\nPARAM\t07c9b273-67c3-4692-b470-ad3b04582123\tPset_PumpTypeCommon.ImpellerMaterial[Type]\tMULTILINETEXT\t\t355\t1\tIfcMaterial\t1\nPARAM\tf9a78937-f369-497a-90a0-7004702a6856\tPset_PumpTypeCommon.ImpellerSealMaterial[Type]\tMULTILINETEXT\t\t355\t1\tIfcMaterial\t1\nPARAM\t5dad4a1d-afe7-4f68-883d-071aa71d3030\tPset_PumpTypeCommon.NetPositiveSuctionHead[Type]\tNUMBER\t\t355\t1\tIfcPressureMeasure\t1\nPARAM\ta635dd8e-5614-44c9-a6d3-07dede539383\tPset_PumpTypeCommon.NominalRotationSpeed[Type]\tNUMBER\t\t355\t1\tIfcRotationalFrequencyMeasure\t1\nPARAM\t739e5787-eb43-4095-a0dc-a3ff3ca906e1\tPset_PumpTypeCommon.Reference[Type]\tTEXT\t\t355\t1\tIfcIdentifier\t1\nPARAM\t6bc66f6d-59b3-416f-9a4b-2792c5572966\tPset_PumpTypeCommon.Status[Type]\tTEXT\t\t355\t1\tPEnum_ElementStatus\t1\nPARAM\t04d2cf49-17bc-4edc-acfc-520041eecd28\tPset_PumpTypeCommon.TemperatureRange[Type]\tMULTILINETEXT\t\t355\t1\tPropertyBoundedValue\t1\n#\nGROUP\t356\tPset_QuantityTakeOff\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7237e897-0f36-4ae7-9f56-807f5fff8f9d\tPset_QuantityTakeOff.LayerQuantity.LocalContext[Type]\tTEXT\t\t356\t1\tIfcText\t1\nPARAM\t5042ef0a-cae5-412c-acff-54bde41436eb\tPset_QuantityTakeOff.LayerQuantity.MaterialLayer[Type]\tTEXT\t\t356\t1\tIfcIdentifier\t1\nPARAM\t430e05bd-149a-4974-9fe9-5ec2718d173f\tPset_QuantityTakeOff.LocalContext[Type]\tTEXT\t\t356\t1\tIfcText\t1\nPARAM\t801424db-56c7-4050-8602-b76d3f2c31a8\tPset_QuantityTakeOff.Reference[Type]\tTEXT\t\t356\t1\tIfcIdentifier\t1\n#\nGROUP\t357\tPset_RailingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t92a4fdf0-1d88-4786-8c42-5fe075dd3414\tPset_RailingCommon.Diameter[Type]\tLENGTH\t\t357\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t28e3aa6a-7869-4ba4-8fb5-89b3dbdd8912\tPset_RailingCommon.Height[Type]\tLENGTH\t\t357\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0f1544f8-aabc-41c3-ab69-1ef7e50a214b\tPset_RailingCommon.IsExternal[Type]\tYESNO\t\t357\t1\tIfcBoolean\t1\nPARAM\t9bc2b804-b5f0-4d76-8cf5-d38e6e471a15\tPset_RailingCommon.Reference[Type]\tTEXT\t\t357\t1\tIfcIdentifier\t1\nPARAM\tb1a3a5bc-2603-4220-94a8-a64e43ffbb9d\tPset_RailingCommon.Status[Type]\tTEXT\t\t357\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t358\tPset_RampCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1573f01a-f417-4fa0-8876-335e78d9fa53\tPset_RampCommon.FireExit[Type]\tYESNO\t\t358\t1\tIfcBoolean\t1\nPARAM\te612371b-729f-4536-a8bd-23c463ae205c\tPset_RampCommon.FireRating[Type]\tTEXT\t\t358\t1\tIfcLabel\t1\nPARAM\ta8b5dfe0-e134-4c5b-9256-767c3939566f\tPset_RampCommon.HandicapAccessible[Type]\tYESNO\t\t358\t1\tIfcBoolean\t1\nPARAM\tf763eee1-6f56-483b-b4fb-06a8a86c4786\tPset_RampCommon.HasNonSkidSurface[Type]\tYESNO\t\t358\t1\tIfcBoolean\t1\nPARAM\tc1c3c6a2-c1bd-40a4-863e-23f371a41d03\tPset_RampCommon.IsExternal[Type]\tYESNO\t\t358\t1\tIfcBoolean\t1\nPARAM\t032f5cc1-ecbf-456f-a348-6db261c2f5a1\tPset_RampCommon.LoadBearing[Type]\tYESNO\t\t358\t1\tIfcBoolean\t1\nPARAM\tbff2ef78-2dec-4825-a3f5-96319be5a460\tPset_RampCommon.Reference[Type]\tTEXT\t\t358\t1\tIfcIdentifier\t1\nPARAM\t92e61fdd-b7e6-4590-9db5-5b0375703e28\tPset_RampCommon.RequiredHeadroom[Type]\tLENGTH\t\t358\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t60a24627-09f5-4331-991e-49b7c07693ed\tPset_RampCommon.RequiredSlope[Type]\tNUMBER\t\t358\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tc8bdeee2-7b47-439b-b338-32647800fd77\tPset_RampCommon.Status[Type]\tTEXT\t\t358\t1\tPEnum_ElementStatus\t1\nPARAM\t74274abb-8e98-4fcb-b2fb-b87ce0d07fe6\tPset_RampCommon.ThermalTransmittance[Type]\tNUMBER\t\t358\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t359\tPset_RampFlightCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t79fa12ba-ef1f-4452-a8ee-f09058423cff\tPset_RampFlightCommon.ClearWidth[Type]\tLENGTH\t\t359\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfc75e3fa-d06b-4d0e-8da3-548953aa30cd\tPset_RampFlightCommon.CounterSlope[Type]\tNUMBER\t\t359\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t4db44c2a-257e-479a-bb37-0d62f453e4be\tPset_RampFlightCommon.Headroom[Type]\tLENGTH\t\t359\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb24cd08f-aa07-431e-8751-4d3a08a7a049\tPset_RampFlightCommon.Reference[Type]\tTEXT\t\t359\t1\tIfcIdentifier\t1\nPARAM\t6bae44cc-99e1-46a7-8f49-4dac72e073b3\tPset_RampFlightCommon.Slope[Type]\tNUMBER\t\t359\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t92344fc0-7827-4a8e-bd39-980d5da882fd\tPset_RampFlightCommon.Status[Type]\tTEXT\t\t359\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t360\tPset_ReinforcementBarCountOfIndependentFooting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3261ec7a-83fa-4ce5-8bca-f1c8a951bd69\tPset_ReinforcementBarCountOfIndependentFooting.Description[Type]\tTEXT\t\t360\t1\tIfcText\t1\nPARAM\tab1c4950-a897-407d-ba2a-b86cb4f124c1\tPset_ReinforcementBarCountOfIndependentFooting.Reference[Type]\tTEXT\t\t360\t1\tIfcLabel\t1\nPARAM\taf79291f-d981-4c0c-afb0-a198a9d45aad\tPset_ReinforcementBarCountOfIndependentFooting.XDirectionLowerBarCount[Type]\tINTEGER\t\t360\t1\tIfcInteger\t1\nPARAM\t934604e0-edfa-4712-928e-34c57743788c\tPset_ReinforcementBarCountOfIndependentFooting.XDirectionUpperBarCount[Type]\tINTEGER\t\t360\t1\tIfcInteger\t1\nPARAM\tfd0cac58-bd63-48c6-ba09-8cd1def16740\tPset_ReinforcementBarCountOfIndependentFooting.YDirectionLowerBarCount[Type]\tINTEGER\t\t360\t1\tIfcInteger\t1\nPARAM\t00bf0857-8ae7-4be9-9178-0a9736609884\tPset_ReinforcementBarCountOfIndependentFooting.YDirectionUpperBarCount[Type]\tINTEGER\t\t360\t1\tIfcInteger\t1\n#\nGROUP\t361\tPset_ReinforcementBarPitchOfBeam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t38aa417d-b4e2-42b6-bca3-89962f7ad096\tPset_ReinforcementBarPitchOfBeam.Description[Type]\tTEXT\t\t361\t1\tIfcText\t1\nPARAM\t469b6e02-150a-4530-b564-b0139aed36d2\tPset_ReinforcementBarPitchOfBeam.Reference[Type]\tTEXT\t\t361\t1\tIfcLabel\t1\nPARAM\t71ddb0b6-3b9f-4345-8539-bc640ead1ea7\tPset_ReinforcementBarPitchOfBeam.SpacingBarPitch[Type]\tLENGTH\t\t361\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8c79b5fd-cd92-4942-b66a-48f27fa61201\tPset_ReinforcementBarPitchOfBeam.StirrupBarPitch[Type]\tLENGTH\t\t361\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t362\tPset_ReinforcementBarPitchOfColumn\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb52057fc-c156-494d-b703-8f7e6372c205\tPset_ReinforcementBarPitchOfColumn.Description[Type]\tTEXT\t\t362\t1\tIfcText\t1\nPARAM\t05037c74-bbba-4e74-a7d0-14e83b88655e\tPset_ReinforcementBarPitchOfColumn.HoopBarPitch[Type]\tLENGTH\t\t362\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t913782cf-2eb7-459b-9577-f4e5f837618c\tPset_ReinforcementBarPitchOfColumn.Reference[Type]\tTEXT\t\t362\t1\tIfcLabel\t1\nPARAM\tb881c478-74b0-45b8-bc51-8764827a165e\tPset_ReinforcementBarPitchOfColumn.ReinforcementBarType[Type]\tTEXT\t\t362\t1\tPEnum_ReinforcementBarType\t1\nPARAM\t208ef4a2-1a32-4286-9a18-f0bbe2bc9c35\tPset_ReinforcementBarPitchOfColumn.XDirectionTieHoopBarPitch[Type]\tLENGTH\t\t362\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td5e08881-beda-4094-8748-c0a5d9dff8c8\tPset_ReinforcementBarPitchOfColumn.XDirectionTieHoopCount[Type]\tINTEGER\t\t362\t1\tIfcInteger\t1\nPARAM\tb9b084ca-29d8-4314-8695-f3c9e6c28ce8\tPset_ReinforcementBarPitchOfColumn.YDirectionTieHoopBarPitch[Type]\tLENGTH\t\t362\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfb4db327-839e-446a-9a9e-e2d58995e0f2\tPset_ReinforcementBarPitchOfColumn.YDirectionTieHoopCount[Type]\tINTEGER\t\t362\t1\tIfcInteger\t1\n#\nGROUP\t363\tPset_ReinforcementBarPitchOfContinuousFooting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7c2b59ca-2c9d-45f1-a26e-dcd10f12bcf0\tPset_ReinforcementBarPitchOfContinuousFooting.CrossingLowerBarPitch[Type]\tLENGTH\t\t363\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbd921b71-a8d4-4271-b786-47480ee28457\tPset_ReinforcementBarPitchOfContinuousFooting.CrossingUpperBarPitch[Type]\tLENGTH\t\t363\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7cebfea2-cb7c-47e0-8efa-c4852e13e98d\tPset_ReinforcementBarPitchOfContinuousFooting.Description[Type]\tTEXT\t\t363\t1\tIfcText\t1\nPARAM\t466b709a-9a1d-4998-b8f6-adec1d18abb0\tPset_ReinforcementBarPitchOfContinuousFooting.Reference[Type]\tTEXT\t\t363\t1\tIfcLabel\t1\n#\nGROUP\t364\tPset_ReinforcementBarPitchOfSlab\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t829137fc-c4af-41d4-9a05-70b2512c5428\tPset_ReinforcementBarPitchOfSlab.Description[Type]\tTEXT\t\t364\t1\tIfcText\t1\nPARAM\t845075ed-0dd3-40eb-af76-e0919f2a96c6\tPset_ReinforcementBarPitchOfSlab.LongInsideCenterLowerBarPitch[Type]\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1e50dab9-2d2b-41a6-b87c-0f9ee53b2158\tPset_ReinforcementBarPitchOfSlab.LongInsideCenterTopBarPitch[Type]\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t54fbb039-12bf-4fab-9787-cd5203a2244f\tPset_ReinforcementBarPitchOfSlab.LongInsideEndLowerBarPitch[Type]\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te27e20a9-df3d-4b22-bc16-fe53be3e5fa9\tPset_ReinforcementBarPitchOfSlab.LongInsideEndTopBarPitch[Type]\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1d7b59e8-efb4-44c1-9a60-3ff53f624d6a\tPset_ReinforcementBarPitchOfSlab.LongOutsideLowerBarPitch[Type]\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tebc49a4e-3c24-461e-8cda-f1d7da828cfe\tPset_ReinforcementBarPitchOfSlab.LongOutsideTopBarPitch[Type]\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t69a1a9ec-6554-47c4-8781-f27c8a2394b6\tPset_ReinforcementBarPitchOfSlab.Reference[Type]\tTEXT\t\t364\t1\tIfcLabel\t1\nPARAM\te35fc565-0aca-418d-a05d-309a1340cd4a\tPset_ReinforcementBarPitchOfSlab.ShortInsideCenterLowerBarPitch[Type]\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8617c18f-a50c-4419-8fdd-b0df60b50e05\tPset_ReinforcementBarPitchOfSlab.ShortInsideCenterTopBarPitch[Type]\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tff71c967-2abc-4f3f-b342-9a0ebced48d9\tPset_ReinforcementBarPitchOfSlab.ShortInsideEndLowerBarPitch[Type]\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te8787f07-8a1f-4c48-9402-b6dd1652f290\tPset_ReinforcementBarPitchOfSlab.ShortInsideEndTopBarPitch[Type]\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te5a7a1e1-fefd-4e58-9534-4df61e56f8bd\tPset_ReinforcementBarPitchOfSlab.ShortOutsideLowerBarPitch[Type]\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8beea3fb-8f43-4870-99c7-0625dbf44081\tPset_ReinforcementBarPitchOfSlab.ShortOutsideTopBarPitch[Type]\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t365\tPset_ReinforcementBarPitchOfWall\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8e98caa4-e1df-4ae7-81f3-1d370bf4158f\tPset_ReinforcementBarPitchOfWall.BarAllocationType[Type]\tTEXT\t\t365\t1\tPEnum_ReinforcementBarAllocationType\t1\nPARAM\tc296c40e-41ea-4d9c-ae9b-bb34c9817143\tPset_ReinforcementBarPitchOfWall.Description[Type]\tTEXT\t\t365\t1\tIfcText\t1\nPARAM\t9c207418-44cc-4ca0-bdbc-8c93e904f86a\tPset_ReinforcementBarPitchOfWall.HorizontalBarPitch[Type]\tLENGTH\t\t365\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t46e1dcdc-93ac-4da7-b468-e64875f04b9b\tPset_ReinforcementBarPitchOfWall.Reference[Type]\tTEXT\t\t365\t1\tIfcLabel\t1\nPARAM\t1003e8f4-db19-4a48-a9dc-557c2473d14a\tPset_ReinforcementBarPitchOfWall.SpacingBarPitch[Type]\tLENGTH\t\t365\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8c85fdea-c2f6-4725-a61e-b90c566a3914\tPset_ReinforcementBarPitchOfWall.VerticalBarPitch[Type]\tLENGTH\t\t365\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t366\tPset_ReinforcingBarBendingsBECCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tde816abc-80e6-4a65-9932-26c952aea739\tPset_ReinforcingBarBendingsBECCommon.BECBarShapeCode[Type]\tTEXT\t\t366\t1\tIfcLabel\t1\nPARAM\t86aee767-6fa3-431d-b52c-c6902461114f\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_u[Type]\tNUMBER\t\t366\t1\tIfcPlaneAngleMeasure\t1\nPARAM\teb2a101f-78d3-4813-9b1f-f4f0d606ad12\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_u1[Type]\tNUMBER\t\t366\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t541ff94b-e410-451a-8e53-2feeb730611d\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_v[Type]\tNUMBER\t\t366\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t1735fdad-f3a0-4223-a8cb-2744ab59fff2\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_v1[Type]\tNUMBER\t\t366\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t0148aa14-a6ad-44c7-b8f0-2764cce27357\tPset_ReinforcingBarBendingsBECCommon.BECCuttingLength[Type]\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t099d570d-fef2-4c85-b0be-eff83d9f5329\tPset_ReinforcingBarBendingsBECCommon.BECRollerDiameter[Type]\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbfafc65b-a470-428c-a3cc-9a9f5ecdaf9b\tPset_ReinforcingBarBendingsBECCommon.BECShapeAid_x[Type]\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t378c3137-85d5-412b-b00c-617eb5de2eb5\tPset_ReinforcingBarBendingsBECCommon.BECShapeAid_y[Type]\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t67bf3131-6cb9-46ce-a401-ac7a7a06bde8\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_a[Type]\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td21da65f-c595-4cbf-8249-9e98ae33ef59\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_b[Type]\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te7e8ffb7-8b31-4b72-9c5f-f91d37d3172b\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_c[Type]\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf5150966-f3e9-4adb-9e10-9175f09c1260\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_d[Type]\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t40babf12-b770-4361-9fce-132d045064e5\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_e[Type]\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te4fdc474-4d00-4fef-a6c8-8e7b27e282df\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_f[Type]\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2ed0c347-228f-44e4-aa86-5c0611689fd6\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_g[Type]\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taae9e9e9-f055-4c4b-9433-979540171116\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_h[Type]\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb7b0f2b7-ce37-48ce-99c8-867ec6ea07cf\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_i[Type]\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5272c983-c88d-49a5-9b79-b59193436a99\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_j[Type]\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\teffb5fda-90b5-42c4-a7c8-7f79a46de871\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_k[Type]\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4a43eaaa-fbe4-42e7-99c6-bc0e9b1bcc8b\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_l[Type]\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t367\tPset_ReinforcingBarBendingsBS8666Common\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9baa084c-b612-453c-99a6-9a090df0274b\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeCode[Type]\tTEXT\t\t367\t1\tIfcLabel\t1\nPARAM\t20013a60-1cbd-43d2-9b7d-3a1cf3f573c3\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_A[Type]\tLENGTH\t\t367\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tad1c9a8e-6c19-429b-954d-d31e711a351d\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_B[Type]\tLENGTH\t\t367\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2d160f4e-7715-4476-85cd-a5185c1d60ec\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_C[Type]\tLENGTH\t\t367\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t44cf6be8-047c-4147-a705-c8a8cc9e3a8e\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_D[Type]\tLENGTH\t\t367\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tae17b04a-5c8d-4d2e-a1da-8da840125c73\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_E[Type]\tLENGTH\t\t367\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4e24fffd-809c-42ce-a7cc-ac297528c218\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_r[Type]\tLENGTH\t\t367\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t368\tPset_ReinforcingBarBendingsDIN135610Common\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb5411a39-69ac-46f1-ac98-898dd2abc08a\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeCode[Type]\tTEXT\t\t368\t1\tIfcLabel\t1\nPARAM\t411e58b7-0e47-4dcb-8c83-404545bdce10\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_a[Type]\tLENGTH\t\t368\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4c8b5a2f-1263-4390-a4f2-ed654632d242\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_b[Type]\tLENGTH\t\t368\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t96181f29-fca1-41ec-9bcc-6626d9050b92\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_c[Type]\tLENGTH\t\t368\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1ef86d43-81e6-41d0-8ad0-2de2d8016285\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_d[Type]\tLENGTH\t\t368\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5fc5f705-27c0-40e0-9fc4-6e5d7dd3b63e\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_e[Type]\tLENGTH\t\t368\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tefc2b327-9329-40cb-a499-6a1fe6392854\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_z[Type]\tLENGTH\t\t368\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t369\tPset_ReinforcingBarBendingsISOCD3766Common\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4fb5bdc5-bd07-4bf2-8e64-dc2a367eb735\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766BendingEndHook[Type]\tNUMBER\t\t369\t1\tIfcPlaneAngleMeasure\t1\nPARAM\te6df0a2d-8b6c-40ec-b789-bf1445e2359e\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766BendingStartHook[Type]\tNUMBER\t\t369\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t03566146-bf19-41d5-9ea3-d44796be04f4\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeCode[Type]\tTEXT\t\t369\t1\tIfcLabel\t1\nPARAM\t92cddafd-d2a7-415a-8b50-93512c92ec39\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_a[Type]\tLENGTH\t\t369\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc3e6ae42-eb65-427e-ac3d-8af68b03e1ef\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_b[Type]\tLENGTH\t\t369\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te4f82417-68ab-4e47-a41d-4123db03dbb8\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_c[Type]\tLENGTH\t\t369\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbf21e93e-5f91-49ba-97a0-777fef09bf8f\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_d[Type]\tLENGTH\t\t369\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0fd01c2a-2779-4592-89dd-1b0fa503f404\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_e[Type]\tLENGTH\t\t369\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tac8535f2-c15c-46b4-9bc6-46a0dbcbcfd7\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_R[Type]\tLENGTH\t\t369\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t370\tPset_ReinforcingBarCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb081745c-17dc-4ec0-864f-fdf78d3f862a\tPset_ReinforcingBarCommon.BarLength[Type]\tLENGTH\t\t370\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t76aa8484-02de-44cf-b522-58348696a50e\tPset_ReinforcingBarCommon.BarSpacing[Type]\tLENGTH\t\t370\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t51d7a024-1667-4404-82b0-71823dae15ce\tPset_ReinforcingBarCommon.BarSurface[Type]\tTEXT\t\t370\t1\tPEnum_ReinforcementBarSurface\t1\nPARAM\tc3e39248-f02b-4098-b442-c65b93813cea\tPset_ReinforcingBarCommon.BendingParameters[Type]\tMULTILINETEXT\t\t370\t1\tPropertyListValue\t1\nPARAM\t8aab05ee-f5c4-4a6a-9c6e-94bc02f92842\tPset_ReinforcingBarCommon.BendingShapeCode[Type]\tTEXT\t\t370\t1\tIfcIdentifier\t1\nPARAM\t3dbacc0c-1458-40b8-846b-aaf35a85cc52\tPset_ReinforcingBarCommon.NominalDiameter[Type]\tLENGTH\t\t370\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6ea49cdf-8ed2-4967-87f0-cbfd79e6d8bf\tPset_ReinforcingBarCommon.Reference[Type]\tTEXT\t\t370\t1\tIfcIdentifier\t1\nPARAM\t2a6f57f5-3322-446b-9ba4-a66f2974bfcf\tPset_ReinforcingBarCommon.Status[Type]\tTEXT\t\t370\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t371\tPset_ReinforcingMeshCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbab8fe39-de95-4c68-804c-2ff8f576c6d9\tPset_ReinforcingMeshCommon.LongitudinalBarBendingParameters[Type]\tMULTILINETEXT\t\t371\t1\tPropertyListValue\t1\nPARAM\t0f950d38-9168-4f0c-9cc7-80a57a0a35cf\tPset_ReinforcingMeshCommon.LongitudinalBarBendingShapeCode[Type]\tTEXT\t\t371\t1\tIfcIdentifier\t1\nPARAM\t41b5021c-9fa7-4ce9-b746-2a6bbbb2b00e\tPset_ReinforcingMeshCommon.LongitudinalBarNominalDiameter[Type]\tLENGTH\t\t371\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0d636a12-2b3d-4ea9-b1d7-9ed230e6d9c2\tPset_ReinforcingMeshCommon.LongitudinalBarSpacing[Type]\tLENGTH\t\t371\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb289fed4-cb81-43a6-b9fd-99462d15a1e0\tPset_ReinforcingMeshCommon.LongitudinalBarSurface[Type]\tTEXT\t\t371\t1\tPEnum_ReinforcementBarSurface\t1\nPARAM\tbdd699b5-9de8-49c5-b54b-7bad4be2c853\tPset_ReinforcingMeshCommon.MeshLength[Type]\tLENGTH\t\t371\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tec8b4033-d07e-4c3b-baf2-a086ac276f1d\tPset_ReinforcingMeshCommon.MeshWidth[Type]\tLENGTH\t\t371\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8cd67926-8e8f-437d-92c8-85171618806a\tPset_ReinforcingMeshCommon.Reference[Type]\tTEXT\t\t371\t1\tIfcIdentifier\t1\nPARAM\ta6e5aa51-84e9-429f-b5cd-dd895e3c41cb\tPset_ReinforcingMeshCommon.Status[Type]\tTEXT\t\t371\t1\tPEnum_ElementStatus\t1\nPARAM\t4aab5d32-759d-4019-a1d8-a617d4a1e8da\tPset_ReinforcingMeshCommon.TransverseBarBendingParameters[Type]\tMULTILINETEXT\t\t371\t1\tPropertyListValue\t1\nPARAM\t8f0e49f7-ab5c-42e1-a96a-88c3871c91a2\tPset_ReinforcingMeshCommon.TransverseBarBendingShapeCode[Type]\tTEXT\t\t371\t1\tIfcIdentifier\t1\nPARAM\t75e8a387-c32e-4eb0-8f35-d94b6afc1c81\tPset_ReinforcingMeshCommon.TransverseBarNominalDiameter[Type]\tLENGTH\t\t371\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t47fcbf63-1f08-4bc8-abc5-1bc825f7d2f3\tPset_ReinforcingMeshCommon.TransverseBarSpacing[Type]\tLENGTH\t\t371\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0a9177f1-880d-4e39-8616-265eaaa13d77\tPset_ReinforcingMeshCommon.TransverseBarSurface[Type]\tTEXT\t\t371\t1\tPEnum_ReinforcementBarSurface\t1\n#\nGROUP\t372\tPset_Reliability\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e97ae6f-ea04-4e77-8e1e-81d4431df6b3\tPset_Reliability.MeanTimeBetweenFailure[Type]\tNUMBER\t\t372\t1\tIfcTimeMeasure\t1\n#\nGROUP\t373\tPset_Risk\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbac2767b-e09e-48a9-99b3-96fe49fe454c\tPset_Risk.AffectsSurroundings[Type]\tYESNO\t\t373\t1\tIfcBoolean\t1\nPARAM\t93139b78-491d-4bc0-9714-1f12b0dbeb37\tPset_Risk.AssessmentOfRisk[Type]\tTEXT\t\t373\t1\tPEnum_RiskAssessment\t1\nPARAM\t3779624c-d183-4b7f-995c-8687d72854ac\tPset_Risk.NatureOfRisk[Type]\tTEXT\t\t373\t1\tIfcLabel\t1\nPARAM\t7a20541e-c7d1-4785-928a-59fb74d236a5\tPset_Risk.PreventiveMeassures[Type]\tMULTILINETEXT\t\t373\t1\tPropertyListValue\t1\nPARAM\t068a9057-914e-4b7f-9738-47bbd17a88fc\tPset_Risk.RiskCause[Type]\tTEXT\t\t373\t1\tIfcText\t1\nPARAM\t1466c45e-369d-4e23-999d-e447ada7e440\tPset_Risk.RiskConsequence[Type]\tTEXT\t\t373\t1\tPEnum_RiskConsequence\t1\nPARAM\t1d4c3366-2d8c-4035-9b55-d918080f3bb4\tPset_Risk.RiskOwner[Type]\tTEXT\t\t373\t1\tPEnum_RiskOwner\t1\nPARAM\t4a7ff14f-5b2e-4fc5-95d6-0decf3d36172\tPset_Risk.RiskRating[Type]\tTEXT\t\t373\t1\tPEnum_RiskRating\t1\nPARAM\t17e6bbe2-735a-4f74-abdf-ac8ac50edcfe\tPset_Risk.RiskType[Type]\tTEXT\t\t373\t1\tPEnum_RiskType\t1\nPARAM\tc7e038f9-1bfe-496f-a80e-b7f28511b562\tPset_Risk.SubNatureOfRisk1[Type]\tTEXT\t\t373\t1\tIfcLabel\t1\nPARAM\t7216818c-d76e-4931-a327-97d7109d37d0\tPset_Risk.SubNatureOfRisk2[Type]\tTEXT\t\t373\t1\tIfcLabel\t1\n#\nGROUP\t374\tPset_RoofCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a595b49-e06f-4c08-b53c-375b05212e42\tPset_RoofCommon.AcousticRating[Type]\tTEXT\t\t374\t1\tIfcLabel\t1\nPARAM\td7911daf-6747-4b19-82fa-0e5413e82331\tPset_RoofCommon.FireRating[Type]\tTEXT\t\t374\t1\tIfcLabel\t1\nPARAM\t8703b896-eb7c-4c61-a6d1-e0033ebfe295\tPset_RoofCommon.IsExternal[Type]\tYESNO\t\t374\t1\tIfcBoolean\t1\nPARAM\ta6e5d3b0-7b52-4877-8622-5d5a0af907d6\tPset_RoofCommon.LoadBearing[Type]\tYESNO\t\t374\t1\tIfcBoolean\t1\nPARAM\t16b7c8c2-c00b-4550-9cad-ef50a7e34fbb\tPset_RoofCommon.ProjectedArea[Type]\tAREA\t\t374\t1\tIfcAreaMeasure\t1\nPARAM\t80861848-8a93-4627-8838-0b90df8e25a0\tPset_RoofCommon.Reference[Type]\tTEXT\t\t374\t1\tIfcIdentifier\t1\nPARAM\t543f3674-dc50-47fe-9821-ec15172ae7a0\tPset_RoofCommon.Status[Type]\tTEXT\t\t374\t1\tPEnum_ElementStatus\t1\nPARAM\tb236629c-ec67-475c-8f2d-85694b6b07ce\tPset_RoofCommon.ThermalTransmittance[Type]\tNUMBER\t\t374\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t27b0591d-db00-47d2-b9c3-8cf980406f14\tPset_RoofCommon.TotalArea[Type]\tAREA\t\t374\t1\tIfcAreaMeasure\t1\n#\nGROUP\t375\tPset_SanitaryTerminalTypeBath\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8092642d-0179-4a44-94ac-1a4651383324\tPset_SanitaryTerminalTypeBath.BathType[Type]\tTEXT\t\t375\t1\tPEnum_BathType\t1\nPARAM\tb3ff369e-3d26-4719-931a-aa85d6cd36de\tPset_SanitaryTerminalTypeBath.Color[Type]\tTEXT\t\t375\t1\tIfcText\t1\nPARAM\t09f621bf-a438-4f29-9e6c-be76c1579b99\tPset_SanitaryTerminalTypeBath.DrainSize[Type]\tLENGTH\t\t375\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfc821dbe-6d83-4a22-bf83-216c265a5148\tPset_SanitaryTerminalTypeBath.HasGrabHandles[Type]\tYESNO\t\t375\t1\tIfcBoolean\t1\nPARAM\tee57aad3-94e8-4ff5-b7c2-1f29003b600b\tPset_SanitaryTerminalTypeBath.Material[Type]\tMULTILINETEXT\t\t375\t1\tIfcMaterial\t1\nPARAM\t0f34f2d5-9f85-45c3-8ff3-62018c5c1a30\tPset_SanitaryTerminalTypeBath.MaterialThickness[Type]\tLENGTH\t\t375\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t15913d19-c023-48ca-ae82-c14fabc94378\tPset_SanitaryTerminalTypeBath.NominalDepth[Type]\tLENGTH\t\t375\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t72781b66-45c3-488f-8708-dd13c82eed4d\tPset_SanitaryTerminalTypeBath.NominalLength[Type]\tLENGTH\t\t375\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tce55be63-4bd6-4864-ae0d-05a4d9309e76\tPset_SanitaryTerminalTypeBath.NominalWidth[Type]\tLENGTH\t\t375\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t376\tPset_SanitaryTerminalTypeBidet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta6c0f234-e41d-420a-843f-17ba70105dff\tPset_SanitaryTerminalTypeBidet.BidetMounting[Type]\tTEXT\t\t376\t1\tPEnum_SanitaryMounting\t1\nPARAM\t3627950e-e072-49b2-a015-07de2c1b0c04\tPset_SanitaryTerminalTypeBidet.Color[Type]\tTEXT\t\t376\t1\tIfcText\t1\nPARAM\tcbe4dfad-ef9e-476d-bc41-58eceec42299\tPset_SanitaryTerminalTypeBidet.DrainSize[Type]\tLENGTH\t\t376\t1\tIfcPositiveLengthMeasure\t1\nPARAM\teb95d1e3-bd0e-4215-8a8c-5ba23f769215\tPset_SanitaryTerminalTypeBidet.Material[Type]\tMULTILINETEXT\t\t376\t1\tIfcMaterial\t1\nPARAM\tdb55e7c0-82de-4345-ac3f-3c1e76d809d4\tPset_SanitaryTerminalTypeBidet.Mounting[Type]\tTEXT\t\t376\t1\tPEnum_SanitaryMounting\t1\nPARAM\t600ea7d1-2ecd-47e2-a13c-13160eb480e7\tPset_SanitaryTerminalTypeBidet.NominalDepth[Type]\tLENGTH\t\t376\t1\tIfcPositiveLengthMeasure\t1\nPARAM\teb0518f0-dc0c-42f6-8683-961fa012f9ba\tPset_SanitaryTerminalTypeBidet.NominalLength[Type]\tLENGTH\t\t376\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5c19df1a-bc4b-4c73-ab17-4488423d5f74\tPset_SanitaryTerminalTypeBidet.NominalWidth[Type]\tLENGTH\t\t376\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t51dd42a4-1de3-4ea7-a7d8-cb9db72bed21\tPset_SanitaryTerminalTypeBidet.SpilloverLevel[Type]\tLENGTH\t\t376\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t377\tPset_SanitaryTerminalTypeCistern\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t75baa59b-dde4-408c-bf6a-28705e60912c\tPset_SanitaryTerminalTypeCistern.CisternCapacity[Type]\tVOLUME\t\t377\t1\tIfcVolumeMeasure\t1\nPARAM\t1a615ca9-9de5-4d75-9e4b-0f1b9a45525c\tPset_SanitaryTerminalTypeCistern.CisternColor[Type]\tTEXT\t\t377\t1\tIfcText\t1\nPARAM\tcbeadc71-ed25-48ac-85aa-f633dafc5812\tPset_SanitaryTerminalTypeCistern.CisternHeight[Type]\tTEXT\t\t377\t1\tPEnum_CisternHeight\t1\nPARAM\t94269651-f5bd-4318-971d-66cc0e73bc00\tPset_SanitaryTerminalTypeCistern.CisternMaterial[Type]\tMULTILINETEXT\t\t377\t1\tIfcMaterial\t1\nPARAM\t51207e56-da38-48ec-8369-03c20df5eb32\tPset_SanitaryTerminalTypeCistern.FlushRate[Type]\tMULTILINETEXT\t\t377\t1\tPropertyBoundedValue\t1\nPARAM\t38ec9e7a-f2b4-4d75-b626-959ce609f0d0\tPset_SanitaryTerminalTypeCistern.FlushType[Type]\tTEXT\t\t377\t1\tPEnum_FlushType\t1\nPARAM\tb577092f-b466-4932-be03-95eb4a3b4b24\tPset_SanitaryTerminalTypeCistern.IsAutomaticFlush[Type]\tYESNO\t\t377\t1\tIfcBoolean\t1\nPARAM\t355e20c8-d8c1-4af3-80d9-ce4a2912bbdd\tPset_SanitaryTerminalTypeCistern.IsSingleFlush[Type]\tYESNO\t\t377\t1\tIfcBoolean\t1\n#\nGROUP\t378\tPset_SanitaryTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t19a4740e-edef-4449-93ae-03044b8d43d2\tPset_SanitaryTerminalTypeCommon.Color[Type]\tTEXT\t\t378\t1\tIfcLabel\t1\nPARAM\t08a460f7-fc3e-4070-b57b-de3474f334bb\tPset_SanitaryTerminalTypeCommon.NominalDepth[Type]\tLENGTH\t\t378\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7b163335-1ea9-46d3-8686-aa5550499019\tPset_SanitaryTerminalTypeCommon.NominalLength[Type]\tLENGTH\t\t378\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tedce9346-a803-4e2a-b331-9d79f37c56ab\tPset_SanitaryTerminalTypeCommon.NominalWidth[Type]\tLENGTH\t\t378\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t763828c6-ac5c-4ed2-b8e3-010b06a7f3d0\tPset_SanitaryTerminalTypeCommon.Reference[Type]\tTEXT\t\t378\t1\tIfcIdentifier\t1\nPARAM\t453d52db-b522-429c-b3a5-e96bc5244c4d\tPset_SanitaryTerminalTypeCommon.Status[Type]\tTEXT\t\t378\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t379\tPset_SanitaryTerminalTypeSanitaryFountain\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t73873c18-1158-43ee-8440-a20e0a70dddf\tPset_SanitaryTerminalTypeSanitaryFountain.Color[Type]\tTEXT\t\t379\t1\tIfcText\t1\nPARAM\t208d6005-7f3b-4f0c-a56e-b7e60d087a89\tPset_SanitaryTerminalTypeSanitaryFountain.DrainSize[Type]\tLENGTH\t\t379\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te50baf80-e541-4368-9540-2d35b4052546\tPset_SanitaryTerminalTypeSanitaryFountain.FountainType[Type]\tTEXT\t\t379\t1\tPEnum_FountainType\t1\nPARAM\tbed52ad1-4c0e-40a1-ba8b-05733247e9a5\tPset_SanitaryTerminalTypeSanitaryFountain.Material[Type]\tMULTILINETEXT\t\t379\t1\tIfcMaterial\t1\nPARAM\t42340b59-dff6-44b0-a0d8-daf5b5392d9a\tPset_SanitaryTerminalTypeSanitaryFountain.Mounting[Type]\tTEXT\t\t379\t1\tPEnum_SanitaryMounting\t1\nPARAM\t02529a8e-8fb1-40fb-abea-a08a618d1838\tPset_SanitaryTerminalTypeSanitaryFountain.NominalDepth[Type]\tLENGTH\t\t379\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t374f76bd-c798-4f53-9b39-5dac49197d33\tPset_SanitaryTerminalTypeSanitaryFountain.NominalLength[Type]\tLENGTH\t\t379\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t70567b4f-a862-4a53-bfb6-6491054af5e7\tPset_SanitaryTerminalTypeSanitaryFountain.NominalWidth[Type]\tLENGTH\t\t379\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t380\tPset_SanitaryTerminalTypeShower\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6ce5d3e9-f924-4c72-b000-7c517bb54452\tPset_SanitaryTerminalTypeShower.Color[Type]\tTEXT\t\t380\t1\tIfcText\t1\nPARAM\t38e489d8-a32d-4170-811a-d75b8a385c38\tPset_SanitaryTerminalTypeShower.DrainSize[Type]\tLENGTH\t\t380\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0338d007-3b68-4868-a4ec-c5ff5ca6bcb3\tPset_SanitaryTerminalTypeShower.HasTray[Type]\tYESNO\t\t380\t1\tIfcBoolean\t1\nPARAM\tf46ee86c-7a0f-479b-a0ed-3497c0249161\tPset_SanitaryTerminalTypeShower.Material[Type]\tMULTILINETEXT\t\t380\t1\tIfcMaterial\t1\nPARAM\t154aa5cd-d7cf-47c4-aa2a-b46fbb17812b\tPset_SanitaryTerminalTypeShower.MaterialThickness[Type]\tLENGTH\t\t380\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t30fac85f-b159-4b61-91c0-ae69171114cd\tPset_SanitaryTerminalTypeShower.NominalDepth[Type]\tLENGTH\t\t380\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5c08b270-0549-4020-b861-e5125d0459d1\tPset_SanitaryTerminalTypeShower.NominalLength[Type]\tLENGTH\t\t380\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf0bcfaaf-3a1b-40ab-9102-0ebcfe77516e\tPset_SanitaryTerminalTypeShower.NominalWidth[Type]\tLENGTH\t\t380\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0c79eaee-737e-4487-828c-fb4e7f6cac3a\tPset_SanitaryTerminalTypeShower.ShowerHeadDescription[Type]\tTEXT\t\t380\t1\tIfcText\t1\nPARAM\tdb1b13eb-afdd-448c-bbc4-8db87f1396e5\tPset_SanitaryTerminalTypeShower.ShowerType[Type]\tTEXT\t\t380\t1\tPEnum_ShowerType\t1\n#\nGROUP\t381\tPset_SanitaryTerminalTypeSink\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t49398c2b-c9a6-4db9-b8e8-ddd643919788\tPset_SanitaryTerminalTypeSink.Color[Type]\tTEXT\t\t381\t1\tIfcLabel\t1\nPARAM\t50d8eb51-65f5-4fa2-844b-7c4d6dc32f08\tPset_SanitaryTerminalTypeSink.DrainSize[Type]\tLENGTH\t\t381\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t13430bcc-9060-41c0-9b15-dedbd3e80958\tPset_SanitaryTerminalTypeSink.Material[Type]\tMULTILINETEXT\t\t381\t1\tIfcMaterial\t1\nPARAM\tcbffe66a-d76b-4794-903e-ec83bcc7c0a1\tPset_SanitaryTerminalTypeSink.Mounting[Type]\tTEXT\t\t381\t1\tPEnum_SanitaryMounting\t1\nPARAM\t703de863-bcf6-4367-bcd0-7b8d96141e8a\tPset_SanitaryTerminalTypeSink.MountingOffset[Type]\tLENGTH\t\t381\t1\tIfcLengthMeasure\t1\nPARAM\t06a13306-5391-4d00-aa4f-a6a8607b9416\tPset_SanitaryTerminalTypeSink.NominalDepth[Type]\tLENGTH\t\t381\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te29033cb-e043-4593-851f-a2e1c2400cf5\tPset_SanitaryTerminalTypeSink.NominalLength[Type]\tLENGTH\t\t381\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2beee2c5-37da-44b6-9574-6b590eb93146\tPset_SanitaryTerminalTypeSink.NominalWidth[Type]\tLENGTH\t\t381\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3b5d0135-e0ff-4b3c-8dda-8e4fe50b60dc\tPset_SanitaryTerminalTypeSink.SinkMounting[Type]\tTEXT\t\t381\t1\tPEnum_SanitaryMounting\t1\nPARAM\t5dbb5f3a-930a-41c3-b526-7df970563223\tPset_SanitaryTerminalTypeSink.SinkType[Type]\tTEXT\t\t381\t1\tPEnum_SinkType\t1\n#\nGROUP\t382\tPset_SanitaryTerminalTypeToiletPan\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t636bdcc1-4bde-4852-9ed7-8e9f1d5a70a9\tPset_SanitaryTerminalTypeToiletPan.NominalDepth[Type]\tLENGTH\t\t382\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2203d8e6-373f-4c36-b5b1-a77b7dda8986\tPset_SanitaryTerminalTypeToiletPan.NominalLength[Type]\tLENGTH\t\t382\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb56e6ee8-3802-4edb-b24e-1942246a6d2a\tPset_SanitaryTerminalTypeToiletPan.NominalWidth[Type]\tLENGTH\t\t382\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32cddce0-3ea6-4456-b571-6b6dcae4fcf3\tPset_SanitaryTerminalTypeToiletPan.PanColor[Type]\tTEXT\t\t382\t1\tIfcText\t1\nPARAM\t0d75ae7d-e2d1-40c7-b130-162584a944ee\tPset_SanitaryTerminalTypeToiletPan.PanMaterial[Type]\tMULTILINETEXT\t\t382\t1\tIfcMaterial\t1\nPARAM\t3a6fe297-1169-4236-96d7-a323ac5406fc\tPset_SanitaryTerminalTypeToiletPan.PanMounting[Type]\tTEXT\t\t382\t1\tPEnum_SanitaryMounting\t1\nPARAM\t3fdb0cd2-93ee-4c74-a6b2-f564cb76c935\tPset_SanitaryTerminalTypeToiletPan.SpilloverLevel[Type]\tLENGTH\t\t382\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t47dc59d7-984d-4706-8a73-02e21cda48e9\tPset_SanitaryTerminalTypeToiletPan.ToiletPanType[Type]\tTEXT\t\t382\t1\tPEnum_ToiletPanType\t1\nPARAM\t07cd9ef2-4df4-46be-be02-249ac5d29a06\tPset_SanitaryTerminalTypeToiletPan.ToiletType[Type]\tTEXT\t\t382\t1\tPEnum_ToiletType\t1\n#\nGROUP\t383\tPset_SanitaryTerminalTypeUrinal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9bd974e5-1269-4b7e-9977-80493cbe3357\tPset_SanitaryTerminalTypeUrinal.Mounting[Type]\tTEXT\t\t383\t1\tPEnum_SanitaryMounting\t1\nPARAM\t182559e1-a30f-4eeb-8f1a-7ed1839c73b8\tPset_SanitaryTerminalTypeUrinal.NominalDepth[Type]\tLENGTH\t\t383\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t314afbac-ebb8-44fb-8600-8ab42a62e401\tPset_SanitaryTerminalTypeUrinal.NominalLength[Type]\tLENGTH\t\t383\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1afae4c6-6fa1-49a3-a5bd-a8e39e74bb4c\tPset_SanitaryTerminalTypeUrinal.NominalWidth[Type]\tLENGTH\t\t383\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0da973c3-1b96-4503-9aac-433a45f77d49\tPset_SanitaryTerminalTypeUrinal.SpilloverLevel[Type]\tLENGTH\t\t383\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t42528377-43d6-40b0-89d8-ab67f319c686\tPset_SanitaryTerminalTypeUrinal.UrinalColor[Type]\tTEXT\t\t383\t1\tIfcText\t1\nPARAM\t1a0dca9e-bc97-428c-a9fa-4051c15c4ac2\tPset_SanitaryTerminalTypeUrinal.UrinalMaterial[Type]\tMULTILINETEXT\t\t383\t1\tIfcMaterial\t1\nPARAM\t7ee0f224-eaf5-4c81-b7dd-60ba2068e698\tPset_SanitaryTerminalTypeUrinal.UrinalType[Type]\tTEXT\t\t383\t1\tPEnum_UrinalType\t1\n#\nGROUP\t384\tPset_SanitaryTerminalTypeWashHandBasin\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7b1bb37c-260f-4880-9212-2114d813e9cf\tPset_SanitaryTerminalTypeWashHandBasin.Color[Type]\tTEXT\t\t384\t1\tIfcText\t1\nPARAM\t0a3d4d0a-897b-4e81-b334-302fbcbfe423\tPset_SanitaryTerminalTypeWashHandBasin.DrainSize[Type]\tLENGTH\t\t384\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0264b39e-d41b-4786-b35f-5f40c9d5e13a\tPset_SanitaryTerminalTypeWashHandBasin.Material[Type]\tMULTILINETEXT\t\t384\t1\tIfcMaterial\t1\nPARAM\t37f7b289-8f2b-45a7-85f3-eae10d61d1c6\tPset_SanitaryTerminalTypeWashHandBasin.Mounting[Type]\tTEXT\t\t384\t1\tPEnum_SanitaryMounting\t1\nPARAM\tabea7f34-9973-4c25-b501-848a717bcbba\tPset_SanitaryTerminalTypeWashHandBasin.MountingOffset[Type]\tLENGTH\t\t384\t1\tIfcLengthMeasure\t1\nPARAM\tf85c7f42-1af5-439a-bc46-38fb0ef36c38\tPset_SanitaryTerminalTypeWashHandBasin.NominalDepth[Type]\tLENGTH\t\t384\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t22f7f6cf-0758-4441-b0e3-48ca2302a4f0\tPset_SanitaryTerminalTypeWashHandBasin.NominalLength[Type]\tLENGTH\t\t384\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te09c5903-9bff-4eb9-9a05-948570d182e8\tPset_SanitaryTerminalTypeWashHandBasin.NominalWidth[Type]\tLENGTH\t\t384\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t90899d5b-95c5-438c-afa2-2ec5762abd50\tPset_SanitaryTerminalTypeWashHandBasin.WashHandBasinMounting[Type]\tTEXT\t\t384\t1\tPEnum_SanitaryMounting\t1\nPARAM\t5b8e54b9-f8f0-4190-a857-ea9ee9684869\tPset_SanitaryTerminalTypeWashHandBasin.WashHandBasinType[Type]\tTEXT\t\t384\t1\tPEnum_WashHandBasinType\t1\n#\nGROUP\t385\tPset_SanitaryTerminalTypeWCSeat\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6ee07317-94db-4aba-a0ef-d5f925d0f154\tPset_SanitaryTerminalTypeWCSeat.SeatColor[Type]\tTEXT\t\t385\t1\tIfcText\t1\nPARAM\tda4fe9c5-da1c-456d-9638-8d070e4cc1b2\tPset_SanitaryTerminalTypeWCSeat.SeatHasCover[Type]\tYESNO\t\t385\t1\tIfcBoolean\t1\nPARAM\t5a2f4552-e702-47d9-ab91-e10798648fab\tPset_SanitaryTerminalTypeWCSeat.SeatMaterial[Type]\tMULTILINETEXT\t\t385\t1\tIfcMaterial\t1\nPARAM\te99279cc-5f4a-4fd5-9af4-2fec585ca91d\tPset_SanitaryTerminalTypeWCSeat.SeatType[Type]\tTEXT\t\t385\t1\tPEnum_ToiletSeatType\t1\n#\nGROUP\t386\tPset_SensorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t04b1e5b3-f7ee-405f-b60f-44d1372897a7\tPset_SensorPHistory.Direction[Type]\tMULTILINETEXT\t\t386\t1\tIfcTimeSeries\t1\nPARAM\tadb1125e-1fae-470c-9c87-9cc3a2f7d808\tPset_SensorPHistory.Quality[Type]\tMULTILINETEXT\t\t386\t1\tIfcTimeSeries\t1\nPARAM\tebba3eb1-ad7c-46a1-9801-80d40302a34d\tPset_SensorPHistory.Status[Type]\tMULTILINETEXT\t\t386\t1\tIfcTimeSeries\t1\nPARAM\t8053eca5-985a-4e07-bf59-e99a79f8b575\tPset_SensorPHistory.Value[Type]\tMULTILINETEXT\t\t386\t1\tIfcTimeSeries\t1\n#\nGROUP\t387\tPset_SensorTypeCO2Sensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t33bab8b3-f883-4626-9e6e-dc2420d243e0\tPset_SensorTypeCO2Sensor.AccuracyOfCO2Sensor[Type]\tNUMBER\t\t387\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7a674a0d-6ca8-4d1c-916b-1f84120739bd\tPset_SensorTypeCO2Sensor.CO2SensorRange[Type]\tMULTILINETEXT\t\t387\t1\tPropertyBoundedValue\t1\nPARAM\t8641c900-d15d-40ec-8165-8af66b7f19b0\tPset_SensorTypeCO2Sensor.CoverageArea[Type]\tAREA\t\t387\t1\tIfcAreaMeasure\t1\nPARAM\t9901abaf-ece7-4789-ab57-eb6fd48f87ba\tPset_SensorTypeCO2Sensor.SetPointConcentration[Type]\tMULTILINETEXT\t\t387\t1\tPropertyBoundedValue\t1\nPARAM\ta6b09d99-9aac-4146-b7e9-caed5c8e23e9\tPset_SensorTypeCO2Sensor.TimeConstant[Type]\tNUMBER\t\t387\t1\tIfcTimeMeasure\t1\nPARAM\t6b7d3799-8eef-4aaa-80d8-8ecc819f70e2\tPset_SensorTypeCO2Sensor.WashHandBasinSetPoint[Type]\tNUMBER\t\t387\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t388\tPset_SensorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t01b0db38-13a8-4662-8404-7600958210e8\tPset_SensorTypeCommon.Reference[Type]\tTEXT\t\t388\t1\tIfcIdentifier\t1\nPARAM\tfa472293-4a66-404c-9ffe-b9f869312781\tPset_SensorTypeCommon.Status[Type]\tTEXT\t\t388\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t389\tPset_SensorTypeConductanceSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td289e6ce-8709-42f4-b1bb-d3c5c72d6bd1\tPset_SensorTypeConductanceSensor.SetPointConductance[Type]\tMULTILINETEXT\t\t389\t1\tPropertyBoundedValue\t1\n#\nGROUP\t390\tPset_SensorTypeContactSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td4257416-a070-453b-b72e-418238092e7d\tPset_SensorTypeContactSensor.SetPointContact[Type]\tMULTILINETEXT\t\t390\t1\tPropertyBoundedValue\t1\n#\nGROUP\t391\tPset_SensorTypeFireSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9f858ee9-322b-40a5-b26c-81207045bdab\tPset_SensorTypeFireSensor.AccuracyOfFireSensor[Type]\tNUMBER\t\t391\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\teece77b6-9889-43d8-a409-da815c410793\tPset_SensorTypeFireSensor.FireSensorSetPoint[Type]\tNUMBER\t\t391\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tb72076cb-d18e-40e5-bf0a-14f244e55e27\tPset_SensorTypeFireSensor.TimeConstant[Type]\tNUMBER\t\t391\t1\tIfcTimeMeasure\t1\n#\nGROUP\t392\tPset_SensorTypeFlowSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8ac28d31-48a2-4e53-8cd1-85cecd079995\tPset_SensorTypeFlowSensor.SetPointFlow[Type]\tMULTILINETEXT\t\t392\t1\tPropertyBoundedValue\t1\n#\nGROUP\t393\tPset_SensorTypeFrostSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbcd038d4-1d20-4e11-bf73-80d4f38df39b\tPset_SensorTypeFrostSensor.SetPointFrost[Type]\tMULTILINETEXT\t\t393\t1\tPropertyBoundedValue\t1\n#\nGROUP\t394\tPset_SensorTypeGasSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7312d2a6-f6d6-4fa0-b5a9-e3b9115078d0\tPset_SensorTypeGasSensor.AccuracyOfGasSensor[Type]\tNUMBER\t\t394\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t04cf3499-0a2c-4d26-9b47-e2a6013f30c2\tPset_SensorTypeGasSensor.CoverageArea[Type]\tAREA\t\t394\t1\tIfcAreaMeasure\t1\nPARAM\tffe8a319-bc32-4004-931a-fdefd2944e15\tPset_SensorTypeGasSensor.GasDetected[Type]\tTEXT\t\t394\t1\tIfcLabel\t1\nPARAM\tdbdb1a5a-93b3-4bf3-bf5d-5ac2721fbfc5\tPset_SensorTypeGasSensor.GasSensorRange[Type]\tMULTILINETEXT\t\t394\t1\tPropertyBoundedValue\t1\nPARAM\tea1494d3-0d6a-4bc4-9aa9-f73a825afca7\tPset_SensorTypeGasSensor.GasSensorSetPoint[Type]\tNUMBER\t\t394\t1\tIfcPositiveRatioMeasure\t1\nPARAM\taddfb9a1-652f-47f1-9ce2-1eca3079b7a8\tPset_SensorTypeGasSensor.SetPointConcentration[Type]\tMULTILINETEXT\t\t394\t1\tPropertyBoundedValue\t1\nPARAM\t0456a09e-0fe8-41ff-89c4-3b509e652509\tPset_SensorTypeGasSensor.TimeConstant[Type]\tNUMBER\t\t394\t1\tIfcTimeMeasure\t1\n#\nGROUP\t395\tPset_SensorTypeHeatSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c4d9e26-f596-4100-8bbd-e3f7d0da6ecc\tPset_SensorTypeHeatSensor.CoverageArea[Type]\tAREA\t\t395\t1\tIfcAreaMeasure\t1\nPARAM\t5294edb7-a383-4502-bc6a-5e49b3105127\tPset_SensorTypeHeatSensor.HeatSensorAccuracy[Type]\tNUMBER\t\t395\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t76a48401-1c7d-4c65-96b0-651e50f9fd0d\tPset_SensorTypeHeatSensor.HeatSensorRange[Type]\tMULTILINETEXT\t\t395\t1\tPropertyBoundedValue\t1\nPARAM\t8037bee0-2480-46d1-b6c9-9a26c264bf21\tPset_SensorTypeHeatSensor.HeatSensorSetPoint[Type]\tNUMBER\t\t395\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t709e284b-df7f-45d9-bac7-2de0e39df41d\tPset_SensorTypeHeatSensor.RateOfTemperatureRise[Type]\tNUMBER\t\t395\t1\tIfcTemperatureRateOfChangeMeasure\t1\nPARAM\tb6b1ea32-07eb-4185-926b-b63b314d4844\tPset_SensorTypeHeatSensor.SetPointTemperature[Type]\tMULTILINETEXT\t\t395\t1\tPropertyBoundedValue\t1\nPARAM\t46094ee4-26d9-49ea-b194-6235d372b152\tPset_SensorTypeHeatSensor.TimeConstant[Type]\tNUMBER\t\t395\t1\tIfcTimeMeasure\t1\n#\nGROUP\t396\tPset_SensorTypeHumiditySensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t54b3467b-a3db-4446-9266-e9e218433ea5\tPset_SensorTypeHumiditySensor.AccuracyOfHumiditySensor[Type]\tNUMBER\t\t396\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6ae5143d-a374-47f8-b789-aacf26fbc901\tPset_SensorTypeHumiditySensor.HumiditySensorRange[Type]\tMULTILINETEXT\t\t396\t1\tPropertyBoundedValue\t1\nPARAM\te8695670-b4bd-4e30-8b02-396820b4ae0d\tPset_SensorTypeHumiditySensor.HumiditySetPoint[Type]\tNUMBER\t\t396\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1893e8bd-dc8a-4d73-903f-df5ddb615daa\tPset_SensorTypeHumiditySensor.SetPointHumidity[Type]\tMULTILINETEXT\t\t396\t1\tPropertyBoundedValue\t1\nPARAM\t400958ab-8a1e-4974-b261-42839138a0be\tPset_SensorTypeHumiditySensor.TimeConstant[Type]\tNUMBER\t\t396\t1\tIfcTimeMeasure\t1\n#\nGROUP\t397\tPset_SensorTypeIdentifierSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t85f02d48-ac51-4a99-a6df-8ec0ab8fac91\tPset_SensorTypeIdentifierSensor.SetPointIdentifier[Type]\tMULTILINETEXT\t\t397\t1\tPropertyBoundedValue\t1\n#\nGROUP\t398\tPset_SensorTypeIonConcentrationSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6e04816c-bbbb-4fd4-89a5-a9e6d71b21b4\tPset_SensorTypeIonConcentrationSensor.SetPointConcentration[Type]\tMULTILINETEXT\t\t398\t1\tPropertyBoundedValue\t1\nPARAM\t98a91485-3b21-4d3e-95f9-5573d15afe7e\tPset_SensorTypeIonConcentrationSensor.SubstanceDetected[Type]\tTEXT\t\t398\t1\tIfcLabel\t1\n#\nGROUP\t399\tPset_SensorTypeLevelSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t78f97c3c-9ffd-49cc-8ea0-7122c2c15f2d\tPset_SensorTypeLevelSensor.SetPointLevel[Type]\tMULTILINETEXT\t\t399\t1\tPropertyBoundedValue\t1\n#\nGROUP\t400\tPset_SensorTypeLightSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7032616-3c87-46ff-8b8e-2366fe7c17be\tPset_SensorTypeLightSensor.LightSensorAccuracy[Type]\tNUMBER\t\t400\t1\tIfcIlluminanceMeasure\t1\nPARAM\t3e1c2a49-7a03-48be-b2b1-04e25070c06e\tPset_SensorTypeLightSensor.LightSensorRange[Type]\tMULTILINETEXT\t\t400\t1\tPropertyBoundedValue\t1\nPARAM\t63724caa-7ce5-41db-a4aa-45be72aeb02c\tPset_SensorTypeLightSensor.LightSensorSetPoint[Type]\tNUMBER\t\t400\t1\tIfcIlluminanceMeasure\t1\nPARAM\tacc64954-fa44-42aa-a72b-1a048490a998\tPset_SensorTypeLightSensor.SetPointIlluminance[Type]\tMULTILINETEXT\t\t400\t1\tPropertyBoundedValue\t1\nPARAM\t04831732-9e6a-46c5-ad41-01e66091ab60\tPset_SensorTypeLightSensor.TimeConstant[Type]\tNUMBER\t\t400\t1\tIfcTimeMeasure\t1\n#\nGROUP\t401\tPset_SensorTypeMoistureSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc84478e-5a4c-489f-8bfb-c7809681da7b\tPset_SensorTypeMoistureSensor.SetPointMoisture[Type]\tMULTILINETEXT\t\t401\t1\tPropertyBoundedValue\t1\n#\nGROUP\t402\tPset_SensorTypeMovementSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6930781b-cd14-4ab5-a618-2bda4d2121db\tPset_SensorTypeMovementSensor.MovementSensingType[Type]\tTEXT\t\t402\t1\tPEnum_MovementSensingType\t1\nPARAM\t7c3a0f10-41ba-4a28-a99a-456fd1c31682\tPset_SensorTypeMovementSensor.SetPointMovement[Type]\tMULTILINETEXT\t\t402\t1\tPropertyBoundedValue\t1\nPARAM\t1a62d7b5-ffb4-40e7-9576-26b1128da6eb\tPset_SensorTypeMovementSensor.TimeConstant[Type]\tNUMBER\t\t402\t1\tIfcTimeMeasure\t1\n#\nGROUP\t403\tPset_SensorTypePHSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tafb184f6-b079-407c-adca-f9879d01c711\tPset_SensorTypePHSensor.SetPointPH[Type]\tMULTILINETEXT\t\t403\t1\tPropertyBoundedValue\t1\n#\nGROUP\t404\tPset_SensorTypePressureSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t67958abe-ff22-4f93-a70d-4842fc6c3255\tPset_SensorTypePressureSensor.AccuracyOfPressureSensor[Type]\tNUMBER\t\t404\t1\tIfcPressureMeasure\t1\nPARAM\tdbb71775-1b38-493b-bc2f-2b7560b964f2\tPset_SensorTypePressureSensor.IsSwitch[Type]\tYESNO\t\t404\t1\tIfcBoolean\t1\nPARAM\t4659cb8b-9df5-4308-a2d8-e92f73d8a342\tPset_SensorTypePressureSensor.PressureSensorRange[Type]\tMULTILINETEXT\t\t404\t1\tPropertyBoundedValue\t1\nPARAM\t8a59e816-8836-4a35-b21c-061bf11483c6\tPset_SensorTypePressureSensor.PressureSensorSetPoint[Type]\tNUMBER\t\t404\t1\tIfcPressureMeasure\t1\nPARAM\t8f7ec94f-5a5c-4a92-813e-eebfeff58a71\tPset_SensorTypePressureSensor.SetPointPressure[Type]\tMULTILINETEXT\t\t404\t1\tPropertyBoundedValue\t1\nPARAM\t53589901-35ad-4e17-9e8d-6087a7b684e6\tPset_SensorTypePressureSensor.TimeConstant[Type]\tNUMBER\t\t404\t1\tIfcTimeMeasure\t1\n#\nGROUP\t405\tPset_SensorTypeRadiationSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf5a9ed4d-9c1b-4cd3-8457-b2eea6492a21\tPset_SensorTypeRadiationSensor.SetPointRadiation[Type]\tMULTILINETEXT\t\t405\t1\tPropertyBoundedValue\t1\n#\nGROUP\t406\tPset_SensorTypeRadioactivitySensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3c9d740a-38bc-41ed-a7c4-f7a32e7ef628\tPset_SensorTypeRadioactivitySensor.SetPointRadioactivity[Type]\tMULTILINETEXT\t\t406\t1\tPropertyBoundedValue\t1\n#\nGROUP\t407\tPset_SensorTypeSmokeSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8565329c-ef35-46b7-ae95-4ad0090439f3\tPset_SensorTypeSmokeSensor.AccuracyOfSmokeSensor[Type]\tNUMBER\t\t407\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t39a1e9ae-56b3-4654-8ab2-7e8ebcadc5d8\tPset_SensorTypeSmokeSensor.CoverageArea[Type]\tAREA\t\t407\t1\tIfcAreaMeasure\t1\nPARAM\t4f095642-5555-4829-931c-5ec26f5bea09\tPset_SensorTypeSmokeSensor.HasBuiltInAlarm[Type]\tYESNO\t\t407\t1\tIfcBoolean\t1\nPARAM\t2dfcede9-243e-41c7-992d-8ce901702538\tPset_SensorTypeSmokeSensor.PressureSensorSetPoint[Type]\tNUMBER\t\t407\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0c4e9d2b-4582-4ef7-84dd-dfc934c6b5e6\tPset_SensorTypeSmokeSensor.SetPointConcentration[Type]\tMULTILINETEXT\t\t407\t1\tPropertyBoundedValue\t1\nPARAM\td3e21277-f9de-4170-abf6-76945a98dda8\tPset_SensorTypeSmokeSensor.SmokeSensorRange[Type]\tMULTILINETEXT\t\t407\t1\tPropertyBoundedValue\t1\nPARAM\tbbc581bb-002c-4e14-97be-c733580fd1fe\tPset_SensorTypeSmokeSensor.TimeConstant[Type]\tNUMBER\t\t407\t1\tIfcTimeMeasure\t1\n#\nGROUP\t408\tPset_SensorTypeSoundSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1583353c-41c2-4a63-a60b-9ed740c0ff1e\tPset_SensorTypeSoundSensor.SetPointSound[Type]\tMULTILINETEXT\t\t408\t1\tPropertyBoundedValue\t1\nPARAM\t220fcee9-0379-490c-bf7d-e5a5719b1910\tPset_SensorTypeSoundSensor.SoundSensorAccuracy[Type]\tNUMBER\t\t408\t1\tIfcSoundPressureMeasure\t1\nPARAM\tdb8a3e98-8943-4f2c-add0-66d692f24e27\tPset_SensorTypeSoundSensor.SoundSensorRange[Type]\tMULTILINETEXT\t\t408\t1\tPropertyBoundedValue\t1\nPARAM\tf9a4594f-3119-4c63-b7ad-cc37d33d5825\tPset_SensorTypeSoundSensor.SoundSensorSetPoint[Type]\tNUMBER\t\t408\t1\tIfcSoundPressureMeasure\t1\nPARAM\t8b2bdb85-c832-44a5-9965-2b3ed0e00d79\tPset_SensorTypeSoundSensor.TimeConstant[Type]\tNUMBER\t\t408\t1\tIfcTimeMeasure\t1\n#\nGROUP\t409\tPset_SensorTypeTemperatureSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbcb725df-1402-430f-a1cb-ae69ce207b01\tPset_SensorTypeTemperatureSensor.AccuracyOfTemperatureSensor[Type]\tNUMBER\t\t409\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tfabb4ddb-d039-4c7c-a7c3-a73167197018\tPset_SensorTypeTemperatureSensor.SetPointTemperature[Type]\tMULTILINETEXT\t\t409\t1\tPropertyBoundedValue\t1\nPARAM\ta723d50f-193e-4ed1-b34f-92236af64095\tPset_SensorTypeTemperatureSensor.TemperatureSensorRange[Type]\tMULTILINETEXT\t\t409\t1\tPropertyBoundedValue\t1\nPARAM\t90dcd5a9-8eca-4f3d-b440-1e8b7f55bb7b\tPset_SensorTypeTemperatureSensor.TemperatureSensorSetPoint[Type]\tNUMBER\t\t409\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t980b275e-4d58-44a1-a4a7-354aa0795ad4\tPset_SensorTypeTemperatureSensor.TemperatureSensorType[Type]\tTEXT\t\t409\t1\tPEnum_TemperatureSensorType\t1\nPARAM\tbd22bc88-f009-45f0-99cf-3f5f7a6e0a03\tPset_SensorTypeTemperatureSensor.TimeConstant[Type]\tNUMBER\t\t409\t1\tIfcTimeMeasure\t1\n#\nGROUP\t410\tPset_SensorTypeWindSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb2751060-6692-407e-a273-9c38e014463e\tPset_SensorTypeWindSensor.SetPointSpeed[Type]\tNUMBER\t\t410\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t9f657251-8b4f-46f8-8fb3-1139177e8b77\tPset_SensorTypeWindSensor.WindSensorType[Type]\tTEXT\t\t410\t1\tPEnum_WindSensorType\t1\n#\nGROUP\t411\tPset_ServiceLife\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t99041e3e-6dcb-4a73-8426-8cd1a0be7714\tPset_ServiceLife.MeanTimeBetweenFailure[Type]\tTEXT\t\t411\t1\tIfcDuration\t1\nPARAM\tba4f92b0-b561-4efb-8270-08cd29d40f95\tPset_ServiceLife.ServiceLifeDuration[Type]\tMULTILINETEXT\t\t411\t1\tPropertyBoundedValue\t1\n#\nGROUP\t412\tPset_ServiceLifeFactors\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td027a521-8e5d-4b8e-8a41-6a66d085ae46\tPset_ServiceLifeFactors.DesignLevel[Type]\tMULTILINETEXT\t\t412\t1\tPropertyBoundedValue\t1\nPARAM\tfef76b26-3e57-47dc-a245-427769e6e789\tPset_ServiceLifeFactors.IndoorEnvironment[Type]\tMULTILINETEXT\t\t412\t1\tPropertyBoundedValue\t1\nPARAM\tb418781a-20c7-4216-b46b-caed51e376fd\tPset_ServiceLifeFactors.InUseConditions[Type]\tMULTILINETEXT\t\t412\t1\tPropertyBoundedValue\t1\nPARAM\t6cf7b69b-9e21-4134-8191-568fdadfdec3\tPset_ServiceLifeFactors.MaintenanceLevel[Type]\tMULTILINETEXT\t\t412\t1\tPropertyBoundedValue\t1\nPARAM\taebf4086-a9a6-44b5-bd66-0ad5f1bde6e8\tPset_ServiceLifeFactors.OutdoorEnvironment[Type]\tMULTILINETEXT\t\t412\t1\tPropertyBoundedValue\t1\nPARAM\t2474ade2-5159-4d91-b5d8-b55a45d04eb0\tPset_ServiceLifeFactors.QualityOfComponents[Type]\tMULTILINETEXT\t\t412\t1\tPropertyBoundedValue\t1\nPARAM\t443652af-da40-40f9-a555-ae7176b7c37b\tPset_ServiceLifeFactors.WorkExecutionLevel[Type]\tMULTILINETEXT\t\t412\t1\tPropertyBoundedValue\t1\n#\nGROUP\t413\tPset_ShadingDeviceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t545ddf8d-2fb8-41a7-aafc-901611eb35d8\tPset_ShadingDeviceCommon.IsExternal[Type]\tYESNO\t\t413\t1\tIfcBoolean\t1\nPARAM\t5eca956d-8e23-46c5-9d7d-7ff198cc2150\tPset_ShadingDeviceCommon.MechanicalOperated[Type]\tYESNO\t\t413\t1\tIfcBoolean\t1\nPARAM\t81dc2ba4-9d63-4133-9d79-c2a0a602fdb1\tPset_ShadingDeviceCommon.Reference[Type]\tTEXT\t\t413\t1\tIfcIdentifier\t1\nPARAM\t1f92a3e0-92fb-4cd4-ab78-222b53adff7f\tPset_ShadingDeviceCommon.Roughness[Type]\tTEXT\t\t413\t1\tIfcLabel\t1\nPARAM\td3c982fa-85bd-41be-953c-05b07d03d797\tPset_ShadingDeviceCommon.ShadingDeviceType[Type]\tTEXT\t\t413\t1\tPEnum_ElementShading\t1\nPARAM\t0cddeddb-1d82-4aa1-b7f9-9c5110d12898\tPset_ShadingDeviceCommon.SolarReflectance[Type]\tNUMBER\t\t413\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t94a4230e-d204-40ec-be73-7e437ccdea00\tPset_ShadingDeviceCommon.SolarTransmittance[Type]\tNUMBER\t\t413\t1\tIfcPositiveRatioMeasure\t1\nPARAM\te124e6e5-ac8e-48a1-b13a-30c21fd93bbb\tPset_ShadingDeviceCommon.Status[Type]\tTEXT\t\t413\t1\tPEnum_ElementStatus\t1\nPARAM\tc7e8e23c-9e43-4685-b94d-77b6f989a79a\tPset_ShadingDeviceCommon.SurfaceColor[Type]\tTEXT\t\t413\t1\tIfcLabel\t1\nPARAM\tefebd056-98ac-4db4-af32-823a77678e74\tPset_ShadingDeviceCommon.ThermalTransmittance[Type]\tNUMBER\t\t413\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\td7bbd7c0-911c-46dd-8067-f6e9202f8eca\tPset_ShadingDeviceCommon.VisibleLightReflectance[Type]\tNUMBER\t\t413\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t94772c6e-e759-44da-95e1-1d0bfaacd49c\tPset_ShadingDeviceCommon.VisibleLightTransmittance[Type]\tNUMBER\t\t413\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t414\tPset_ShadingDevicePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tafe63cea-c77d-4fa5-90ac-004bb1789092\tPset_ShadingDevicePHistory.Azimuth[Type]\tMULTILINETEXT\t\t414\t1\tIfcTimeSeries\t1\nPARAM\t6c4d264d-c2b5-465e-ba38-fe2d6763d39d\tPset_ShadingDevicePHistory.TiltAngle[Type]\tMULTILINETEXT\t\t414\t1\tIfcTimeSeries\t1\n#\nGROUP\t415\tPset_SiteCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc192434-a47b-4892-99e4-4d17de4af98f\tPset_SiteCommon.BuildableArea[Type]\tAREA\t\t415\t1\tIfcAreaMeasure\t1\nPARAM\t4fbd7143-d67d-452a-b5fe-3e9fe769faee\tPset_SiteCommon.BuildingHeightLimit[Type]\tLENGTH\t\t415\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t75587a0b-e714-4c19-a026-2488e126418e\tPset_SiteCommon.FloorAreaRatio[Type]\tNUMBER\t\t415\t1\tIfcPositiveRatioMeasure\t1\nPARAM\te3bdb31b-360f-41ab-bd25-cc902376926f\tPset_SiteCommon.GrossAreaPlanned[Type]\tAREA\t\t415\t1\tIfcAreaMeasure\t1\nPARAM\t8b0e0f7c-cac3-4094-8a9a-78bca52534e2\tPset_SiteCommon.Reference[Type]\tTEXT\t\t415\t1\tIfcIdentifier\t1\nPARAM\t5da368b1-9384-431c-8816-e98e59efc079\tPset_SiteCommon.SiteCoverageRatio[Type]\tNUMBER\t\t415\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tae3e17ee-5703-407a-8d88-87c9d23af519\tPset_SiteCommon.TotalArea[Type]\tAREA\t\t415\t1\tIfcAreaMeasure\t1\n#\nGROUP\t416\tPset_SlabCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbf309f13-1d61-4c34-a2ac-fc9d1b96cc25\tPset_SlabCommon.AcousticRating[Type]\tTEXT\t\t416\t1\tIfcLabel\t1\nPARAM\t78221376-d9ac-4165-894c-6566e0f4b8e5\tPset_SlabCommon.Combustible[Type]\tYESNO\t\t416\t1\tIfcBoolean\t1\nPARAM\t373e24fa-549f-4c47-92ed-33371c43835f\tPset_SlabCommon.Compartmentation[Type]\tYESNO\t\t416\t1\tIfcBoolean\t1\nPARAM\t034ac52c-699d-4d5f-8d6c-5492bb9dd875\tPset_SlabCommon.FireRating[Type]\tTEXT\t\t416\t1\tIfcLabel\t1\nPARAM\tbc2c8668-f247-4ef9-8244-ad0910072bb1\tPset_SlabCommon.IsExternal[Type]\tYESNO\t\t416\t1\tIfcBoolean\t1\nPARAM\t20de9962-30d0-4e89-a7ae-72ae9c8ba10d\tPset_SlabCommon.LoadBearing[Type]\tYESNO\t\t416\t1\tIfcBoolean\t1\nPARAM\td287b84b-a68c-4463-bac1-f7e18f500fd4\tPset_SlabCommon.PitchAngle[Type]\tNUMBER\t\t416\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t933a46a8-9a83-4f2d-998b-6f7259bb672c\tPset_SlabCommon.Reference[Type]\tTEXT\t\t416\t1\tIfcIdentifier\t1\nPARAM\t7b96a722-6761-460f-a615-8baf88d050a3\tPset_SlabCommon.Status[Type]\tTEXT\t\t416\t1\tPEnum_ElementStatus\t1\nPARAM\tc94be42f-abd0-4b86-9fd6-c2fb04cd9405\tPset_SlabCommon.SurfaceSpreadOfFlame[Type]\tTEXT\t\t416\t1\tIfcLabel\t1\nPARAM\tad332f5d-4f1a-4d99-9e12-d7da39aa1813\tPset_SlabCommon.ThermalTransmittance[Type]\tNUMBER\t\t416\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t417\tPset_SolarDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7fa0f5f2-b7ea-4581-9e05-ebf4c2ad6414\tPset_SolarDeviceTypeCommon.ActiveCellSurfaceAreaFraction[Type]\tNUMBER\t\t417\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\td2b583e5-cade-4992-9e37-edcf5520ce5c\tPset_SolarDeviceTypeCommon.CellEfficiency[Type]\tNUMBER\t\t417\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tb047b98a-c2b1-4ec5-a6bf-0106a7cc99d8\tPset_SolarDeviceTypeCommon.Reference[Type]\tTEXT\t\t417\t1\tIfcIdentifier\t1\nPARAM\tf79d8de9-2f85-4254-92ba-0c19e931d615\tPset_SolarDeviceTypeCommon.Status[Type]\tTEXT\t\t417\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t418\tPset_SoundAttenuation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3e1472e5-c921-4a43-a408-cc56bd5238ad\tPset_SoundAttenuation.SoundFrequency[Type]\tMULTILINETEXT\t\t418\t1\tPropertyListValue\t1\nPARAM\t4db22946-f2ce-4563-adc5-c004662e1ebf\tPset_SoundAttenuation.SoundPressure[Type]\tMULTILINETEXT\t\t418\t1\tIfcTimeSeries\t1\nPARAM\t6406b059-8daf-439d-978e-5378a4e101df\tPset_SoundAttenuation.SoundScale[Type]\tTEXT\t\t418\t1\tPEnum_SoundScale\t1\n#\nGROUP\t419\tPset_SoundGeneration\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5e7c163d-fe18-4508-9f64-587c41931e59\tPset_SoundGeneration.SoundCurve[Type]\tMULTILINETEXT\t\t419\t1\tPropertyTableValue\t1\n#\nGROUP\t420\tPset_SpaceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta0f71104-3c1c-48e8-b727-f75d34d91545\tPset_SpaceCommon.Category[Type]\tTEXT\t\t420\t1\tIfcLabel\t1\nPARAM\t74c770fb-bdd5-482a-ac2c-0e307f87bd7e\tPset_SpaceCommon.CeilingCovering[Type]\tTEXT\t\t420\t1\tIfcLabel\t1\nPARAM\t27c4ebd0-6152-4af8-8cfe-7753e0614d79\tPset_SpaceCommon.Concealed[Type]\tYESNO\t\t420\t1\tIfcBoolean\t1\nPARAM\t24d74396-7a5a-44d5-92a9-ea5e397547de\tPset_SpaceCommon.ConcealedCeiling[Type]\tYESNO\t\t420\t1\tIfcBoolean\t1\nPARAM\t8ad96da3-560b-4779-b299-63c12e36d34d\tPset_SpaceCommon.ConcealedFlooring[Type]\tYESNO\t\t420\t1\tIfcBoolean\t1\nPARAM\tf7e8ac45-2a3d-470d-a77d-c132dc4973e3\tPset_SpaceCommon.FloorCovering[Type]\tTEXT\t\t420\t1\tIfcLabel\t1\nPARAM\t4add0b52-f383-4391-8bb9-d4e480714b3c\tPset_SpaceCommon.GrossAreaPlanned[Type]\tAREA\t\t420\t1\tIfcAreaMeasure\t1\nPARAM\tb1ec1c48-b0db-485a-b90b-0e697b26c662\tPset_SpaceCommon.GrossPlannedArea[Type]\tAREA\t\t420\t1\tIfcAreaMeasure\t1\nPARAM\t5464d758-bdab-4fd3-9d30-7e1069aec35e\tPset_SpaceCommon.HandicapAccessible[Type]\tYESNO\t\t420\t1\tIfcBoolean\t1\nPARAM\t040b3079-f7c7-4548-980c-6fbf693c64e6\tPset_SpaceCommon.IsExternal[Type]\tYESNO\t\t420\t1\tIfcBoolean\t1\nPARAM\td2a57aa4-c177-4b73-b9c8-e80431ca733e\tPset_SpaceCommon.MechanicalVentilationRate[Type]\tINTEGER\t\t420\t1\tIfcCountMeasure\t1\nPARAM\td04afbd6-8900-4002-bb52-c7d166c8078f\tPset_SpaceCommon.NaturalVentilation[Type]\tYESNO\t\t420\t1\tIfcBoolean\t1\nPARAM\t5304461a-5e75-4c16-a66f-2ddfbc494621\tPset_SpaceCommon.NaturalVentilationRate[Type]\tINTEGER\t\t420\t1\tIfcCountMeasure\t1\nPARAM\t773d8674-94d8-44e7-9a0f-565f997ec6df\tPset_SpaceCommon.NetPlannedArea[Type]\tAREA\t\t420\t1\tIfcAreaMeasure\t1\nPARAM\tb9633db9-36db-412e-b5de-2b79e95aba15\tPset_SpaceCommon.OccupancyNumber[Type]\tINTEGER\t\t420\t1\tIfcCountMeasure\t1\nPARAM\tf7e838b8-a9f3-45c1-8d2d-17645e3c570f\tPset_SpaceCommon.OccupancyType[Type]\tTEXT\t\t420\t1\tIfcLabel\t1\nPARAM\t3c03b7e3-56f6-4f06-a7a0-72b285f2e2b7\tPset_SpaceCommon.PubliclyAccessible[Type]\tYESNO\t\t420\t1\tIfcBoolean\t1\nPARAM\t0ac022e5-f79e-4721-895a-479b73f510ff\tPset_SpaceCommon.Reference[Type]\tTEXT\t\t420\t1\tIfcIdentifier\t1\nPARAM\t3a6232d2-edea-4bc1-8b1b-732470913c53\tPset_SpaceCommon.SkirtingBoard[Type]\tTEXT\t\t420\t1\tIfcLabel\t1\nPARAM\t78aa25e8-47ed-4636-9012-31e301054f1f\tPset_SpaceCommon.WallCovering[Type]\tTEXT\t\t420\t1\tIfcLabel\t1\n#\nGROUP\t421\tPset_SpaceCoveringRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tea4d6e52-ef0f-4cd9-9c42-f425ec0d5581\tPset_SpaceCoveringRequirements.CeilingCovering[Type]\tTEXT\t\t421\t1\tIfcLabel\t1\nPARAM\t061687bd-5ed0-469d-af90-33651834618f\tPset_SpaceCoveringRequirements.CeilingCoveringThickness[Type]\tLENGTH\t\t421\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t10294023-ad4e-4990-8a7b-3b9fa35e0cf0\tPset_SpaceCoveringRequirements.ConcealedCeiling[Type]\tYESNO\t\t421\t1\tIfcBoolean\t1\nPARAM\tcf311e52-3331-438f-945f-423ce3b9c6e7\tPset_SpaceCoveringRequirements.ConcealedCeilingOffset[Type]\tLENGTH\t\t421\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tabc81409-eba1-484f-ba65-973ee316b5c4\tPset_SpaceCoveringRequirements.ConcealedFlooring[Type]\tYESNO\t\t421\t1\tIfcBoolean\t1\nPARAM\t6e963bf7-e060-47ab-96cd-10698f134482\tPset_SpaceCoveringRequirements.ConcealedFlooringOffset[Type]\tLENGTH\t\t421\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t4e3b74d1-3d69-4f39-a2ff-03eb4aec0776\tPset_SpaceCoveringRequirements.FloorCovering[Type]\tTEXT\t\t421\t1\tIfcLabel\t1\nPARAM\t763944bd-4f5d-4d21-89f6-d7ac47d7b525\tPset_SpaceCoveringRequirements.FloorCoveringThickness[Type]\tLENGTH\t\t421\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3f02ee6f-281c-4da9-8e8f-a87235bdf9bd\tPset_SpaceCoveringRequirements.Molding[Type]\tTEXT\t\t421\t1\tIfcLabel\t1\nPARAM\t9a63310a-2969-4c70-9495-405fd98abf09\tPset_SpaceCoveringRequirements.MoldingHeight[Type]\tLENGTH\t\t421\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t42f1cd2d-8b8b-41f2-a7b8-d97ce90975da\tPset_SpaceCoveringRequirements.SkirtingBoard[Type]\tTEXT\t\t421\t1\tIfcLabel\t1\nPARAM\ta1cf15ea-76d0-48d1-8029-8051db5dc464\tPset_SpaceCoveringRequirements.SkirtingBoardHeight[Type]\tLENGTH\t\t421\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6381df44-bcff-4bd8-82ae-625fb49818f2\tPset_SpaceCoveringRequirements.WallCovering[Type]\tTEXT\t\t421\t1\tIfcLabel\t1\nPARAM\tbd8857d9-0856-4434-9d16-e6d919a0fd25\tPset_SpaceCoveringRequirements.WallCoveringThickness[Type]\tLENGTH\t\t421\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t422\tPset_SpaceFireSafetyRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdd21485e-ff48-4fa0-87f5-10f0323fe12a\tPset_SpaceFireSafetyRequirements.AirPressurization[Type]\tYESNO\t\t422\t1\tIfcBoolean\t1\nPARAM\tb56b4925-a0bc-44e8-a837-94da6b5e5e18\tPset_SpaceFireSafetyRequirements.AncillaryFireUse[Type]\tTEXT\t\t422\t1\tIfcLabel\t1\nPARAM\t0b33d173-27f5-40e8-9729-8f6741f68109\tPset_SpaceFireSafetyRequirements.FireExit[Type]\tYESNO\t\t422\t1\tIfcBoolean\t1\nPARAM\t9a863ae4-e14a-43e6-9b38-43ac34fdec5a\tPset_SpaceFireSafetyRequirements.FireHazardFactor[Type]\tTEXT\t\t422\t1\tIfcLabel\t1\nPARAM\t02d10f52-b539-4f90-abe0-871ae79d21c0\tPset_SpaceFireSafetyRequirements.FireRiskFactor[Type]\tTEXT\t\t422\t1\tIfcLabel\t1\nPARAM\teaaaba53-a1f8-4bef-9535-5694bc5fb3a3\tPset_SpaceFireSafetyRequirements.FlammableStorage[Type]\tYESNO\t\t422\t1\tIfcBoolean\t1\nPARAM\t03126e95-d825-4dc1-9e84-3d4ec72af277\tPset_SpaceFireSafetyRequirements.MainFireUse[Type]\tTEXT\t\t422\t1\tIfcLabel\t1\nPARAM\t4e1bbeda-8612-4bdf-9926-4a0a3ede6735\tPset_SpaceFireSafetyRequirements.SprinklerProtection[Type]\tYESNO\t\t422\t1\tIfcBoolean\t1\nPARAM\t976d7aca-99d5-4c80-aaac-f22a2d806039\tPset_SpaceFireSafetyRequirements.SprinklerProtectionAutomatic[Type]\tYESNO\t\t422\t1\tIfcBoolean\t1\n#\nGROUP\t423\tPset_SpaceHeaterPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9e496e01-f20e-489c-a59e-3ba8fa14e0d8\tPset_SpaceHeaterPHistory.AirResistanceCurve[Type]\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\t64b470a0-f115-4205-ab0c-db5904a06048\tPset_SpaceHeaterPHistory.AuxiliaryEnergySourceConsumption[Type]\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\t5388e940-5872-40de-ab25-19ebb376f283\tPset_SpaceHeaterPHistory.Effectiveness[Type]\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\t60a315f2-36f6-4fcc-b32d-94e880a24326\tPset_SpaceHeaterPHistory.Exponent[Type]\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\t7921574d-b449-40dc-9c94-0e64593daeb4\tPset_SpaceHeaterPHistory.FractionConvectiveHeatTransfer[Type]\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\tfaca8e23-a251-4ca9-87f7-5014b46427f1\tPset_SpaceHeaterPHistory.FractionRadiantHeatTransfer[Type]\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\t57a52b2a-83c3-46b1-b93b-a04f71d26b28\tPset_SpaceHeaterPHistory.HeatOutputRate[Type]\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\t0023f9a0-4d93-4712-a566-f41ad666e7cc\tPset_SpaceHeaterPHistory.OutputCapacityCurve[Type]\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\tb7ab482d-02f7-4e8a-84b1-c2ea55ba3ef7\tPset_SpaceHeaterPHistory.SpaceAirTemperature[Type]\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\tacfe65ba-0fab-4e91-93e5-3a055f1d6d71\tPset_SpaceHeaterPHistory.SpaceMeanRadiantTemperature[Type]\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\t925c17be-092c-4428-9909-02f67a6f1fea\tPset_SpaceHeaterPHistory.SurfaceTemperature[Type]\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\t74869d0d-8583-484b-bc42-0a412c1a44cd\tPset_SpaceHeaterPHistory.UACurve[Type]\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\n#\nGROUP\t424\tPset_SpaceHeaterPHistoryCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t86d02fb1-9554-46a9-98f2-cc6a0985aa23\tPset_SpaceHeaterPHistoryCommon.AirResistanceCurve[Type]\tNUMBER\t\t424\t1\tIfcReal\t1\nPARAM\tfefa5cb6-f773-47c6-8eb7-a4253288de2b\tPset_SpaceHeaterPHistoryCommon.AuxiliaryEnergySourceConsumption[Type]\tTEXT\t\t424\t1\tIfcLabel\t1\nPARAM\t18d475aa-ff66-4c96-8cdd-a11a7eff449e\tPset_SpaceHeaterPHistoryCommon.Effectiveness[Type]\tTEXT\t\t424\t1\tIfcLabel\t1\nPARAM\tf853e1cd-fc90-464f-8dd2-3d25555d6c78\tPset_SpaceHeaterPHistoryCommon.Exponent[Type]\tTEXT\t\t424\t1\tIfcLabel\t1\nPARAM\t08d9f3bf-8967-4207-80f3-df02acf6f016\tPset_SpaceHeaterPHistoryCommon.FractionConvectiveHeatTransfer[Type]\tNUMBER\t\t424\t1\tIfcReal\t1\nPARAM\t98506a96-028d-4771-8c94-8d8149510e70\tPset_SpaceHeaterPHistoryCommon.FractionRadiantHeatTransfer[Type]\tNUMBER\t\t424\t1\tIfcReal\t1\nPARAM\tba346824-f53d-4841-b570-4066e9285ae5\tPset_SpaceHeaterPHistoryCommon.HeatOutputRate[Type]\tNUMBER\t\t424\t1\tIfcReal\t1\nPARAM\t1e194e65-174f-4705-838a-c9fb7f67a223\tPset_SpaceHeaterPHistoryCommon.OutputCapacityCurve[Type]\tNUMBER\t\t424\t1\tIfcReal\t1\nPARAM\t69eab4c4-864e-4a1f-8894-5e629124ea5c\tPset_SpaceHeaterPHistoryCommon.SpaceAirTemperature[Type]\tNUMBER\t\t424\t1\tIfcReal\t1\nPARAM\tf331e455-03b4-4e41-b288-004e897f5944\tPset_SpaceHeaterPHistoryCommon.SpaceMeanRadiantTemperature[Type]\tNUMBER\t\t424\t1\tIfcReal\t1\nPARAM\tc0f46c72-a03e-4377-ada3-72f12bbb2ed0\tPset_SpaceHeaterPHistoryCommon.SurfaceTemperature[Type]\tNUMBER\t\t424\t1\tIfcReal\t1\nPARAM\t1d1da055-9419-4180-bdb9-916a5314a76a\tPset_SpaceHeaterPHistoryCommon.UACurve[Type]\tTEXT\t\t424\t1\tIfcLabel\t1\n#\nGROUP\t425\tPset_SpaceHeaterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3bc5fd2a-a819-4390-99f2-041bd232deb9\tPset_SpaceHeaterTypeCommon.BodyMass[Type]\tNUMBER\t\t425\t1\tIfcMassMeasure\t1\nPARAM\t79238827-eb6d-4b6b-9c4f-56873ea5855e\tPset_SpaceHeaterTypeCommon.EnergySource[Type]\tTEXT\t\t425\t1\tPEnum_EnergySource\t1\nPARAM\tb353a955-38e0-4c38-bac3-68c5e4b1ecc4\tPset_SpaceHeaterTypeCommon.HeatingSource[Type]\tTEXT\t\t425\t1\tPEnum_HeatingSource\t1\nPARAM\tb84f3b62-cedc-4511-a410-8032f821cb73\tPset_SpaceHeaterTypeCommon.HeatTransferDimension[Type]\tTEXT\t\t425\t1\tPEnum_SpaceHeaterHeatTransferDimension\t1\nPARAM\t14396d18-61de-4f36-b4bc-da0f6140aaf3\tPset_SpaceHeaterTypeCommon.HeatTransferMedium[Type]\tTEXT\t\t425\t1\tPEnum_HeatTransferMedium\t1\nPARAM\tec982f9f-feb9-41e5-b47e-f89bd6d9e673\tPset_SpaceHeaterTypeCommon.Material[Type]\tMULTILINETEXT\t\t425\t1\tIfcMaterial\t1\nPARAM\t3fb54b5f-dd93-4956-945d-7d86db2fc98e\tPset_SpaceHeaterTypeCommon.NumberOfPanels[Type]\tINTEGER\t\t425\t1\tIfcInteger\t1\nPARAM\te5d4e817-6d65-448f-9605-838696410c45\tPset_SpaceHeaterTypeCommon.NumberOfSections[Type]\tINTEGER\t\t425\t1\tIfcInteger\t1\nPARAM\tb546db0a-a09c-4b30-b312-1c580e9c6aa7\tPset_SpaceHeaterTypeCommon.OutputCapacity[Type]\tNUMBER\t\t425\t1\tIfcPowerMeasure\t1\nPARAM\t0cd378d2-5528-4164-950b-6e964269ee26\tPset_SpaceHeaterTypeCommon.PlacementType[Type]\tTEXT\t\t425\t1\tPEnum_SpaceHeaterPlacementType\t1\nPARAM\t573912a7-b341-4e2e-bfc7-f72c9bcf8fa9\tPset_SpaceHeaterTypeCommon.Reference[Type]\tTEXT\t\t425\t1\tIfcIdentifier\t1\nPARAM\t4a03befb-8aca-4e04-b09b-22709eae119c\tPset_SpaceHeaterTypeCommon.Status[Type]\tTEXT\t\t425\t1\tPEnum_ElementStatus\t1\nPARAM\t146ba315-9d0f-4517-bca1-6f1a4c2b488b\tPset_SpaceHeaterTypeCommon.TemperatureClassification[Type]\tTEXT\t\t425\t1\tPEnum_SpaceHeaterTemperatureClassification\t1\nPARAM\t26238d33-8e20-401f-9a9a-5bff7b37cf07\tPset_SpaceHeaterTypeCommon.ThermalEfficiency[Type]\tNUMBER\t\t425\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t9b04e3d9-29ca-4ced-8f97-61deb35898ee\tPset_SpaceHeaterTypeCommon.ThermalMassHeatCapacity[Type]\tNUMBER\t\t425\t1\tIfcReal\t1\n#\nGROUP\t426\tPset_SpaceHeaterTypeConvector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7d81184a-f720-4611-ab59-cb9648df8b5a\tPset_SpaceHeaterTypeConvector.ConvectorType[Type]\tTEXT\t\t426\t1\tPEnum_SpaceHeaterConvectorType\t1\n#\nGROUP\t427\tPset_SpaceHeaterTypeHydronic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9d552a63-97cf-4883-beee-b66c9bb723aa\tPset_SpaceHeaterTypeHydronic.TubingLength[Type]\tLENGTH\t\t427\t1\tIfcLengthMeasure\t1\nPARAM\t724cd2f7-ec44-421e-b948-d476e3e5c972\tPset_SpaceHeaterTypeHydronic.WaterContent[Type]\tNUMBER\t\t427\t1\tIfcMassMeasure\t1\n#\nGROUP\t428\tPset_SpaceHeaterTypeRadiator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5cb7ca5b-a57d-45bc-a732-7d2feb448d45\tPset_SpaceHeaterTypeRadiator.RadiatorType[Type]\tTEXT\t\t428\t1\tPEnum_SpaceHeaterRadiatorType\t1\nPARAM\t06b863c9-9b4f-47c4-a637-3d957cc76126\tPset_SpaceHeaterTypeRadiator.TubingLength[Type]\tLENGTH\t\t428\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t59b8dd3b-c066-4f58-a877-90105b131dd8\tPset_SpaceHeaterTypeRadiator.WaterContent[Type]\tNUMBER\t\t428\t1\tIfcMassMeasure\t1\n#\nGROUP\t429\tPset_SpaceLightingRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t82b0d5a8-2242-42b4-bdaf-35dee06250f2\tPset_SpaceLightingRequirements.ArtificialLighting[Type]\tYESNO\t\t429\t1\tIfcBoolean\t1\nPARAM\t4e87711c-ffb1-4ff1-afca-21a44355e653\tPset_SpaceLightingRequirements.Illuminance[Type]\tNUMBER\t\t429\t1\tIfcIlluminanceMeasure\t1\n#\nGROUP\t430\tPset_SpaceOccupancyRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48b35208-f94e-42ef-95c7-e67f957d45b2\tPset_SpaceOccupancyRequirements.AreaPerOccupant[Type]\tAREA\t\t430\t1\tIfcAreaMeasure\t1\nPARAM\td3e5e06b-7ed7-4447-8f99-8424ac0a6119\tPset_SpaceOccupancyRequirements.IsOutlookDesirable[Type]\tYESNO\t\t430\t1\tIfcBoolean\t1\nPARAM\t98f2b721-bc49-4325-afcf-10566b122ec4\tPset_SpaceOccupancyRequirements.MinimumHeadroom[Type]\tLENGTH\t\t430\t1\tIfcLengthMeasure\t1\nPARAM\t45fa09d3-88b4-4bb3-865c-73f851e6339b\tPset_SpaceOccupancyRequirements.OccupancyNumber[Type]\tINTEGER\t\t430\t1\tIfcCountMeasure\t1\nPARAM\ta116eaf1-09c1-4787-8128-979a43e90945\tPset_SpaceOccupancyRequirements.OccupancyNumberPeak[Type]\tINTEGER\t\t430\t1\tIfcCountMeasure\t1\nPARAM\t50299194-3739-480d-b3c1-35f1c13c2ded\tPset_SpaceOccupancyRequirements.OccupancyTimePerDay[Type]\tNUMBER\t\t430\t1\tIfcTimeMeasure\t1\nPARAM\t58ec46a9-e9a9-4fdc-87b9-d7387ecc0fac\tPset_SpaceOccupancyRequirements.OccupancyType[Type]\tTEXT\t\t430\t1\tIfcLabel\t1\n#\nGROUP\t431\tPset_SpaceParking\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcfd75e62-9052-4ea9-beb5-aeea8b212693\tPset_SpaceParking.HandicapAccessible[Type]\tYESNO\t\t431\t1\tIfcBoolean\t1\nPARAM\t8c11ae75-e526-4fab-9028-c1dd8a8fbe58\tPset_SpaceParking.IsAisle[Type]\tYESNO\t\t431\t1\tIfcBoolean\t1\nPARAM\tb3cd74fa-1a57-4dd9-876e-3a7bc7d3c92c\tPset_SpaceParking.IsOneWay[Type]\tYESNO\t\t431\t1\tIfcBoolean\t1\nPARAM\t700ba8c5-af0f-46a2-b4e5-332cc26596b0\tPset_SpaceParking.ParkingUnits[Type]\tINTEGER\t\t431\t1\tIfcCountMeasure\t1\nPARAM\teb071cb3-ce31-4bec-a9da-60a2c4914538\tPset_SpaceParking.ParkingUse[Type]\tTEXT\t\t431\t1\tIfcLabel\t1\n#\nGROUP\t432\tPset_SpaceParkingAisle\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0dd42299-22fe-4dbe-ae7b-450f52d2cbe2\tPset_SpaceParkingAisle.IsOneWay[Type]\tYESNO\t\t432\t1\tIfcBoolean\t1\n#\nGROUP\t433\tPset_SpaceProgramCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7976c93c-752a-425c-bee5-bcf10a0f8c41\tPset_SpaceProgramCommon.EmployeeType[Type]\tTEXT\t\t433\t1\tIfcLabel\t1\nPARAM\t00731736-a5f8-4e32-ace3-56a9a046f565\tPset_SpaceProgramCommon.FFETypeRequirement[Type]\tTEXT\t\t433\t1\tIfcLabel\t1\nPARAM\te06aa8bf-b377-427e-99f8-d2a71da90568\tPset_SpaceProgramCommon.FunctionRequirement[Type]\tTEXT\t\t433\t1\tIfcLabel\t1\nPARAM\t03d8952c-6173-4be1-8efa-67e804ce6cf1\tPset_SpaceProgramCommon.LightingRequirement[Type]\tTEXT\t\t433\t1\tIfcLabel\t1\nPARAM\tf320a5a1-0183-4bc3-9cba-58af75587b22\tPset_SpaceProgramCommon.Location[Type]\tTEXT\t\t433\t1\tIfcLabel\t1\nPARAM\t32546f9c-0bc4-4d61-be9f-5c378fecab53\tPset_SpaceProgramCommon.OccupancyNumber[Type]\tINTEGER\t\t433\t1\tIfcCountMeasure\t1\nPARAM\t827df1c1-ef2e-4f0f-bf28-098fb77fe4ad\tPset_SpaceProgramCommon.OccupancyType[Type]\tTEXT\t\t433\t1\tIfcLabel\t1\nPARAM\te04de6fe-ecd5-4773-b8f1-1ae8e719f306\tPset_SpaceProgramCommon.PrivacyRequirement[Type]\tTEXT\t\t433\t1\tIfcLabel\t1\nPARAM\tfbac867d-5f24-4f87-a666-7ddc523b8e79\tPset_SpaceProgramCommon.SecurityRequirement[Type]\tTEXT\t\t433\t1\tIfcLabel\t1\n#\nGROUP\t434\tPset_SpaceThermalDesign\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc17dcdaa-7961-4707-ab3a-338fad16646d\tPset_SpaceThermalDesign.BoundaryAreaHeatLoss[Type]\tNUMBER\t\t434\t1\tIfcHeatFluxDensityMeasure\t1\nPARAM\t06741ea3-ec30-4a16-b161-6620c8052733\tPset_SpaceThermalDesign.CeilingRAPlenum[Type]\tYESNO\t\t434\t1\tIfcBoolean\t1\nPARAM\t3002822b-88a8-4ba4-b734-d3dbd1c657cf\tPset_SpaceThermalDesign.CoolingDesignAirflow[Type]\tNUMBER\t\t434\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t40fde375-4305-4e29-90d0-15412df18224\tPset_SpaceThermalDesign.CoolingDryBulb[Type]\tNUMBER\t\t434\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\te5ccc0a1-6cfb-4efd-a807-fd000c1afd74\tPset_SpaceThermalDesign.CoolingRelativeHumidity[Type]\tNUMBER\t\t434\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t9731e9f6-afe7-4f78-9576-f28702426fe5\tPset_SpaceThermalDesign.ExhaustAirFlowrate[Type]\tNUMBER\t\t434\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t928fb183-99f0-4ee4-9f38-55639ce5c33e\tPset_SpaceThermalDesign.HeatingDesignAirflow[Type]\tNUMBER\t\t434\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t83a517d2-d0e6-4826-a60b-1a469aed263c\tPset_SpaceThermalDesign.HeatingDryBulb[Type]\tNUMBER\t\t434\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tccd68d5b-6325-48fd-bb32-53ab8ae732a5\tPset_SpaceThermalDesign.HeatingRelativeHumidity[Type]\tNUMBER\t\t434\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tdc8888d3-5d8a-4d68-86e7-8120e5f61bb5\tPset_SpaceThermalDesign.TotalHeatGain[Type]\tNUMBER\t\t434\t1\tIfcPowerMeasure\t1\nPARAM\tf2d8f0ee-2283-4d44-871a-0e6d1a066fe2\tPset_SpaceThermalDesign.TotalHeatLoss[Type]\tNUMBER\t\t434\t1\tIfcPowerMeasure\t1\nPARAM\t623be5d5-24c2-4bd9-94e9-5aed70f2bbd0\tPset_SpaceThermalDesign.TotalSensibleHeatGain[Type]\tNUMBER\t\t434\t1\tIfcPowerMeasure\t1\nPARAM\t5f8a2f49-6d7d-44fe-9b5b-ce23f68daded\tPset_SpaceThermalDesign.VentilationAirFlowrate[Type]\tNUMBER\t\t434\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t435\tPset_SpaceThermalLoad\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5ad030c1-1a52-4fe4-893c-8a2e25da734d\tPset_SpaceThermalLoad.AirExchangeRate[Type]\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t8f0dd9c3-f3e4-49d3-87a2-e6f00f79eceb\tPset_SpaceThermalLoad.DryBulbTemperature[Type]\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t91c1361a-10fd-4ad8-8be1-c93a610eb64c\tPset_SpaceThermalLoad.EquipmentSensible[Type]\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t7e941220-217d-41ec-b1e4-6f1b7b802baf\tPset_SpaceThermalLoad.ExhaustAir[Type]\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t1ea1dc22-db1c-4908-a216-47253bc73716\tPset_SpaceThermalLoad.InfiltrationSensible[Type]\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\tc3ba2dc3-c61d-47aa-b1e1-c4bde2dc8fb2\tPset_SpaceThermalLoad.Lighting[Type]\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t7765850b-1766-416f-b412-8c5cc4c1c531\tPset_SpaceThermalLoad.People[Type]\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t0968b970-188f-4cda-88d2-9c82fa3cc714\tPset_SpaceThermalLoad.RecirculatedAir[Type]\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t892d9644-2a7b-430b-b35a-4e2661dacf12\tPset_SpaceThermalLoad.RelativeHumidity[Type]\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t68ddeee6-6bb0-4645-99cc-51822501ecb9\tPset_SpaceThermalLoad.TotalLatentLoad[Type]\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t317c6fde-7b37-48e0-841b-9e956a1acb89\tPset_SpaceThermalLoad.TotalRadiantLoad[Type]\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t2f5b2d35-82c6-4027-bcb4-e99c32cde8a5\tPset_SpaceThermalLoad.TotalSensibleLoad[Type]\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t303ccf7f-df57-418b-82c7-715a0de03c0b\tPset_SpaceThermalLoad.VentilationIndoorAir[Type]\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t595fd174-cfe2-441d-a4ca-5e4c1f393fcd\tPset_SpaceThermalLoad.VentilationOutdoorAir[Type]\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\n#\nGROUP\t436\tPset_SpaceThermalLoadPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta73dab42-0454-4fe2-8d56-d213f9b41881\tPset_SpaceThermalLoadPHistory.AirExchangeRate[Type]\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\tff616862-79ec-4f75-adc2-d52a8b757332\tPset_SpaceThermalLoadPHistory.DryBulbTemperature[Type]\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\tabdb4c63-a4d2-4504-8aa0-9d2f9dd0a763\tPset_SpaceThermalLoadPHistory.EquipmentSensible[Type]\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\tc0276209-d72b-46f9-a567-bc44512646ea\tPset_SpaceThermalLoadPHistory.ExhaustAir[Type]\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\t8ae0e9d3-6558-4855-a9ff-b93d69a4c2ec\tPset_SpaceThermalLoadPHistory.InfiltrationSensible[Type]\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\tc56488a4-d235-45e7-8302-86fe39de1a5f\tPset_SpaceThermalLoadPHistory.Lighting[Type]\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\tf9a5aab5-cb5f-47c9-ac6b-bbdbf8af7d59\tPset_SpaceThermalLoadPHistory.People[Type]\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\tc0e41fcb-b3bf-4d40-b2a5-c5fc1e2ebdb1\tPset_SpaceThermalLoadPHistory.RecirculatedAir[Type]\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\t9028a415-9c80-4afa-93b8-b6d13d63d269\tPset_SpaceThermalLoadPHistory.RelativeHumidity[Type]\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\tdc106e6e-0eac-42da-85d5-15f437318954\tPset_SpaceThermalLoadPHistory.TotalLatentLoad[Type]\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\tfffa5bd8-bb8c-46b5-a858-904b372a69b1\tPset_SpaceThermalLoadPHistory.TotalRadiantLoad[Type]\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\te43c8513-9898-4826-9083-276d69068e52\tPset_SpaceThermalLoadPHistory.TotalSensibleLoad[Type]\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\t18c38f96-b636-45f2-8487-214847c572f3\tPset_SpaceThermalLoadPHistory.VentilationIndoorAir[Type]\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\t44f47e33-c2ba-44b7-b7d6-b7c531c6dc3d\tPset_SpaceThermalLoadPHistory.VentilationOutdoorAir[Type]\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\n#\nGROUP\t437\tPset_SpaceThermalPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2518d5df-d452-4a42-99d6-284ad7d6c91f\tPset_SpaceThermalPHistory.CoolingAirFlowRate[Type]\tMULTILINETEXT\t\t437\t1\tIfcTimeSeries\t1\nPARAM\tccbde6f4-2524-466b-a568-d196d1001da1\tPset_SpaceThermalPHistory.ExhaustAirFlowRate[Type]\tMULTILINETEXT\t\t437\t1\tIfcTimeSeries\t1\nPARAM\tc7f2660c-6304-4a43-badc-2379566df8fd\tPset_SpaceThermalPHistory.HeatingAirFlowRate[Type]\tMULTILINETEXT\t\t437\t1\tIfcTimeSeries\t1\nPARAM\tc22309f0-7670-4e01-adeb-be9d84b62e79\tPset_SpaceThermalPHistory.SpaceRelativeHumidity[Type]\tMULTILINETEXT\t\t437\t1\tIfcTimeSeries\t1\nPARAM\t9b7e9642-ccd1-4939-90c7-29c56fb96a65\tPset_SpaceThermalPHistory.SpaceTemperature[Type]\tMULTILINETEXT\t\t437\t1\tIfcTimeSeries\t1\nPARAM\ted9a335a-7d41-4563-9ebb-3fb7dec37cfb\tPset_SpaceThermalPHistory.VentilationAirFlowRate[Type]\tMULTILINETEXT\t\t437\t1\tIfcTimeSeries\t1\n#\nGROUP\t438\tPset_SpaceThermalRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t44e094a1-9108-45b4-ae26-325df180ad3d\tPset_SpaceThermalRequirements.AirConditioning[Type]\tYESNO\t\t438\t1\tIfcBoolean\t1\nPARAM\t49d83d0e-8991-4bc2-8df7-21bd194cba81\tPset_SpaceThermalRequirements.AirConditioningCentral[Type]\tYESNO\t\t438\t1\tIfcBoolean\t1\nPARAM\tfa63d375-770b-44cf-9c6a-e7a57afb54fa\tPset_SpaceThermalRequirements.DiscontinuedHeating[Type]\tYESNO\t\t438\t1\tIfcBoolean\t1\nPARAM\t714456c4-1ae0-481f-bbe0-9b8e5fb6922a\tPset_SpaceThermalRequirements.MechanicalVentilationRate[Type]\tINTEGER\t\t438\t1\tIfcCountMeasure\t1\nPARAM\t9079726c-3ab7-49c9-aae5-f9a8868642c6\tPset_SpaceThermalRequirements.NaturalVentilation[Type]\tYESNO\t\t438\t1\tIfcBoolean\t1\nPARAM\tb3f47e15-8869-4d78-9be5-8d824815b1b4\tPset_SpaceThermalRequirements.NaturalVentilationRate[Type]\tINTEGER\t\t438\t1\tIfcCountMeasure\t1\nPARAM\t4b84ea46-4e27-458b-8898-2b40ebb56fe9\tPset_SpaceThermalRequirements.SpaceHumidity[Type]\tNUMBER\t\t438\t1\tIfcRatioMeasure\t1\nPARAM\tbc38cd60-0402-4b96-ac5a-6039b38c0cb9\tPset_SpaceThermalRequirements.SpaceHumidityMax[Type]\tNUMBER\t\t438\t1\tIfcRatioMeasure\t1\nPARAM\te781edc7-5417-47a1-b1e1-dd2fc9c10f28\tPset_SpaceThermalRequirements.SpaceHumidityMin[Type]\tNUMBER\t\t438\t1\tIfcRatioMeasure\t1\nPARAM\t0d0cab49-8a6d-4a58-b219-ef7e4c272762\tPset_SpaceThermalRequirements.SpaceHumiditySummer[Type]\tNUMBER\t\t438\t1\tIfcRatioMeasure\t1\nPARAM\t7012c067-da42-4858-b99a-ac1fa86487ae\tPset_SpaceThermalRequirements.SpaceHumidityWinter[Type]\tNUMBER\t\t438\t1\tIfcRatioMeasure\t1\nPARAM\t28583049-af11-44f0-be48-5e55f55ece47\tPset_SpaceThermalRequirements.SpaceTemperature[Type]\tNUMBER\t\t438\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t7b3bb5d6-3969-4916-b4ad-3db23202524a\tPset_SpaceThermalRequirements.SpaceTemperatureMax[Type]\tNUMBER\t\t438\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tfc44f32a-bdb3-48c6-a807-746b3660d82e\tPset_SpaceThermalRequirements.SpaceTemperatureMin[Type]\tNUMBER\t\t438\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\ted135707-8139-45fe-b46f-4d91355a8cfa\tPset_SpaceThermalRequirements.SpaceTemperatureSummer[Type]\tNUMBER\t\t438\t1\tIfcThermodynamicTemperatureMeasure \t1\nPARAM\tdbb2acd6-5a0b-409d-8136-13e0c0b1358e\tPset_SpaceThermalRequirements.SpaceTemperatureSummerMax[Type]\tNUMBER\t\t438\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tefa306ba-e01d-49fb-beb5-940aa07c6dd8\tPset_SpaceThermalRequirements.SpaceTemperatureSummerMin[Type]\tNUMBER\t\t438\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t5556c58b-70e9-489f-89f0-b68d7974a67d\tPset_SpaceThermalRequirements.SpaceTemperatureWinter[Type]\tNUMBER\t\t438\t1\tIfcThermodynamicTemperatureMeasure \t1\nPARAM\td2f4d157-427f-42c2-aaae-c9f2a3e56f7f\tPset_SpaceThermalRequirements.SpaceTemperatureWinterMax[Type]\tNUMBER\t\t438\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t4a9c8ae9-975a-497a-8fb5-0a858bd36b71\tPset_SpaceThermalRequirements.SpaceTemperatureWinterMin[Type]\tNUMBER\t\t438\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t439\tPset_SpatialZoneCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t124379f3-f260-4490-90df-804e37c12c70\tPset_SpatialZoneCommon.IsExternal[Type]\tYESNO\t\t439\t1\tIfcBoolean\t1\nPARAM\t6eac8a4a-0934-4578-8afa-e3d6ba3fa832\tPset_SpatialZoneCommon.Reference[Type]\tTEXT\t\t439\t1\tIfcIdentifier\t1\n#\nGROUP\t440\tPset_StackTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6aa79504-a6b1-453b-8cca-c63048aec68f\tPset_StackTerminalTypeCommon.Reference[Type]\tTEXT\t\t440\t1\tIfcIdentifier\t1\nPARAM\t97b7c3ea-67c5-4a7d-954a-5b6de9afc6e4\tPset_StackTerminalTypeCommon.Status[Type]\tTEXT\t\t440\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t441\tPset_StairCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb6b7a43f-825d-4030-805d-7f94491d2423\tPset_StairCommon.FireExit[Type]\tYESNO\t\t441\t1\tIfcBoolean\t1\nPARAM\t829a38d9-a6f4-4542-9e11-f45ccf2da03b\tPset_StairCommon.FireRating[Type]\tTEXT\t\t441\t1\tIfcLabel\t1\nPARAM\teae45c04-7481-4c31-bc21-ce68d5703453\tPset_StairCommon.HandicapAccessible[Type]\tYESNO\t\t441\t1\tIfcBoolean\t1\nPARAM\t280cb6bf-8740-410e-97c8-d04b7af96f4a\tPset_StairCommon.HasNonSkidSurface[Type]\tYESNO\t\t441\t1\tIfcBoolean\t1\nPARAM\t17d94499-6b30-48b8-a266-48d0886ec76e\tPset_StairCommon.IsExternal[Type]\tYESNO\t\t441\t1\tIfcBoolean\t1\nPARAM\t07ebad95-47df-446a-855e-64b460ea4c1b\tPset_StairCommon.LoadBearing[Type]\tYESNO\t\t441\t1\tIfcBoolean\t1\nPARAM\t1f245f11-7b79-40a6-bf47-2432397114cd\tPset_StairCommon.NosingLength[Type]\tLENGTH\t\t441\t1\tIfcLengthMeasure\t1\nPARAM\t1b54453e-2fb5-4eb9-9602-abde6819fd8d\tPset_StairCommon.NumberOfRiser[Type]\tINTEGER\t\t441\t1\tIfcCountMeasure\t1\nPARAM\t8afe2d05-80fb-4347-bfe5-cb11bb109176\tPset_StairCommon.NumberOfTreads[Type]\tINTEGER\t\t441\t1\tIfcCountMeasure\t1\nPARAM\t2d8d71a8-ec99-4f2e-a649-ae661fdc0691\tPset_StairCommon.Reference[Type]\tTEXT\t\t441\t1\tIfcIdentifier\t1\nPARAM\t6554f1d5-15e4-495c-8a5b-8d6aa0345696\tPset_StairCommon.RequiredHeadroom[Type]\tLENGTH\t\t441\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tacac4071-b95b-4605-8eb7-e7731541d7f0\tPset_StairCommon.RiserHeight[Type]\tLENGTH\t\t441\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5da9808c-6589-4951-b1c5-745de934ecea\tPset_StairCommon.Status[Type]\tTEXT\t\t441\t1\tPEnum_ElementStatus\t1\nPARAM\t761ec032-f557-4777-82b0-e7cbe9f906de\tPset_StairCommon.ThermalTransmittance[Type]\tNUMBER\t\t441\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\tb088885e-e8f1-469a-b6f9-a3ea980a9a48\tPset_StairCommon.TreadLength[Type]\tLENGTH\t\t441\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2bdbe850-12d6-4d17-bf4c-8f0772d031a2\tPset_StairCommon.TreadLengthAtInnerSide[Type]\tLENGTH\t\t441\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t17e07c31-28d6-4fb6-98bd-667a261bc800\tPset_StairCommon.TreadLengthAtOffset[Type]\tLENGTH\t\t441\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t17d57e0f-a86a-4810-99cf-cd64c64822dd\tPset_StairCommon.WaistThickness[Type]\tLENGTH\t\t441\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcd2a00de-a246-44ec-86ad-18c987d6f1d1\tPset_StairCommon.WalkingLineOffset[Type]\tLENGTH\t\t441\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t442\tPset_StairFlightCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8132eeb7-7d23-469e-9dfc-5dc1303e3c3c\tPset_StairFlightCommon.Headroom[Type]\tLENGTH\t\t442\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32c34737-fc89-4e91-abbf-5309c32552ef\tPset_StairFlightCommon.NosingLength[Type]\tLENGTH\t\t442\t1\tIfcLengthMeasure\t1\nPARAM\t5c833601-faca-40e3-80d9-610a71785872\tPset_StairFlightCommon.NumberOfRiser[Type]\tINTEGER\t\t442\t1\tIfcCountMeasure\t1\nPARAM\t2de5b2b9-52d2-4653-8493-89d79429181c\tPset_StairFlightCommon.NumberOfTreads[Type]\tINTEGER\t\t442\t1\tIfcCountMeasure\t1\nPARAM\t521f5c0c-ef5d-4c6d-979f-bcee2b748505\tPset_StairFlightCommon.Reference[Type]\tTEXT\t\t442\t1\tIfcIdentifier\t1\nPARAM\tb252ccb4-ef44-416f-90ad-a722aa6e58d7\tPset_StairFlightCommon.RiserHeight[Type]\tLENGTH\t\t442\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t88e4b4e8-bff8-4484-89ad-a29461a6e75b\tPset_StairFlightCommon.Status[Type]\tTEXT\t\t442\t1\tPEnum_ElementStatus\t1\nPARAM\t1f21117e-eae7-4244-b9e5-b86cfb14c41e\tPset_StairFlightCommon.TreadLength[Type]\tLENGTH\t\t442\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t09edd121-856b-4440-b4f9-f810176f1b16\tPset_StairFlightCommon.TreadLengthAtInnerSide[Type]\tLENGTH\t\t442\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td9af64ec-7493-4836-a3dd-5692c7742c43\tPset_StairFlightCommon.TreadLengthAtOffset[Type]\tLENGTH\t\t442\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t19754129-e93e-4eb5-974e-00b52d290c1e\tPset_StairFlightCommon.WaistThickness[Type]\tLENGTH\t\t442\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7b9b9fc1-25ae-4edb-8ba5-ed7a5d94e7ce\tPset_StairFlightCommon.WalkingLineOffset[Type]\tLENGTH\t\t442\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t443\tPset_StructuralSurfaceMemberVaryingThickness\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t69ffa62e-065b-4af8-a6d5-cdee81c40c2f\tPset_StructuralSurfaceMemberVaryingThickness.Location1Global[Type]\tMULTILINETEXT\t\t443\t1\tPropertyListValue\t1\nPARAM\tbba72b17-644f-4b76-ab33-05efb95c6baa\tPset_StructuralSurfaceMemberVaryingThickness.Location1Local[Type]\tMULTILINETEXT\t\t443\t1\tPropertyListValue\t1\nPARAM\t0e76e3b2-92b4-464c-af36-ed92f05c4fcc\tPset_StructuralSurfaceMemberVaryingThickness.Location2Global[Type]\tMULTILINETEXT\t\t443\t1\tPropertyListValue\t1\nPARAM\ta9b7685c-457c-4d0c-bd6a-32f93bca6ea4\tPset_StructuralSurfaceMemberVaryingThickness.Location2Local[Type]\tMULTILINETEXT\t\t443\t1\tPropertyListValue\t1\nPARAM\t3364ad0c-8208-4eee-8c14-070f1d04c2de\tPset_StructuralSurfaceMemberVaryingThickness.Location3Global[Type]\tMULTILINETEXT\t\t443\t1\tPropertyListValue\t1\nPARAM\t329ef554-82b7-4758-b774-ea6d9bdc012e\tPset_StructuralSurfaceMemberVaryingThickness.Location3Local[Type]\tMULTILINETEXT\t\t443\t1\tPropertyListValue\t1\nPARAM\td689e4b7-a9e4-44da-ac94-307c53cc5f69\tPset_StructuralSurfaceMemberVaryingThickness.Thickness1[Type]\tLENGTH\t\t443\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td75b1b7d-3bd0-4664-9f1a-0b41ccec7711\tPset_StructuralSurfaceMemberVaryingThickness.Thickness2[Type]\tLENGTH\t\t443\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t90fd9251-850a-403d-897c-f754743c2a08\tPset_StructuralSurfaceMemberVaryingThickness.Thickness3[Type]\tLENGTH\t\t443\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t444\tPset_SwitchingDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t74c963b5-e7f8-4bfc-89f6-7515394bd796\tPset_SwitchingDeviceTypeCommon.HasLock[Type]\tYESNO\t\t444\t1\tIfcBoolean\t1\nPARAM\ta624fd14-38d9-417d-82f9-18cbc305b20f\tPset_SwitchingDeviceTypeCommon.IsIlluminated[Type]\tYESNO\t\t444\t1\tIfcBoolean\t1\nPARAM\t85ad268a-b01e-4130-8f02-79a1c352f41d\tPset_SwitchingDeviceTypeCommon.Legend[Type]\tTEXT\t\t444\t1\tIfcLabel\t1\nPARAM\t57b28001-c68d-4bf0-a90c-54a377cbbff1\tPset_SwitchingDeviceTypeCommon.NumberOfGangs[Type]\tINTEGER\t\t444\t1\tIfcInteger\t1\nPARAM\t450b1bd6-dba9-4a13-8c6c-928139111c2c\tPset_SwitchingDeviceTypeCommon.Reference[Type]\tTEXT\t\t444\t1\tIfcIdentifier\t1\nPARAM\t48507187-3966-458e-b300-3292d84ff4dc\tPset_SwitchingDeviceTypeCommon.SetPoint[Type]\tMULTILINETEXT\t\t444\t1\tPropertyTableValue\t1\nPARAM\tb5687645-8e30-4bfe-9cae-80ac756bceea\tPset_SwitchingDeviceTypeCommon.Status[Type]\tTEXT\t\t444\t1\tPEnum_ElementStatus\t1\nPARAM\t6a55beee-e723-48c9-8ac3-851b35493e06\tPset_SwitchingDeviceTypeCommon.SwitchFunction[Type]\tTEXT\t\t444\t1\tPEnum_SwitchFunctionType\t1\n#\nGROUP\t445\tPset_SwitchingDeviceTypeContactor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te703be1e-e53e-4b16-a977-5abfd8845bcc\tPset_SwitchingDeviceTypeContactor.ContactorType[Type]\tTEXT\t\t445\t1\tPEnum_ContactorType\t1\n#\nGROUP\t446\tPset_SwitchingDeviceTypeDimmerSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tce89d0e4-203f-4969-b539-b565e631b6ff\tPset_SwitchingDeviceTypeDimmerSwitch.DimmerType[Type]\tTEXT\t\t446\t1\tPEnum_SwitchingDeviceDimmerSwitchType\t1\n#\nGROUP\t447\tPset_SwitchingDeviceTypeEmergencyStop\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdf44083b-1e6c-44e2-aa6c-6d6a62a321f4\tPset_SwitchingDeviceTypeEmergencyStop.SwitchOperation[Type]\tTEXT\t\t447\t1\tPEnum_SwitchingDeviceEmergencyStopType\t1\n#\nGROUP\t448\tPset_SwitchingDeviceTypeKeypad\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6e27e536-7e30-4371-9a26-5f3a3a47f67e\tPset_SwitchingDeviceTypeKeypad.KeypadType[Type]\tTEXT\t\t448\t1\tPEnum_SwitchingDeviceKeypadType\t1\n#\nGROUP\t449\tPset_SwitchingDeviceTypeMomentarySwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t456e9a5d-64d8-4354-b120-8a16c7de4fdb\tPset_SwitchingDeviceTypeMomentarySwitch.MomentaryType[Type]\tTEXT\t\t449\t1\tPEnum_SwitchingDeviceMomentarySwitchType\t1\n#\nGROUP\t450\tPset_SwitchingDeviceTypePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf47d6309-985f-4d12-83fc-4f2fc14f222d\tPset_SwitchingDeviceTypePHistory.SetPoint[Type]\tMULTILINETEXT\t\t450\t1\tIfcTimeSeries\t1\n#\nGROUP\t451\tPset_SwitchingDeviceTypeSelectorSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbf9e9bb6-40dd-4d85-86fd-c6d63b0b8523\tPset_SwitchingDeviceTypeSelectorSwitch.SelectorType[Type]\tTEXT\t\t451\t1\tPEnum_SwitchingDeviceDimmerSwitchType\t1\nPARAM\td6221b8a-be31-4935-8cb6-4824bb7b1f76\tPset_SwitchingDeviceTypeSelectorSwitch.SwitchActivation[Type]\tTEXT\t\t451\t1\tPEnum_SwitchActivation\t1\nPARAM\t30f82820-0d35-40f8-af74-bcdf3f62b228\tPset_SwitchingDeviceTypeSelectorSwitch.SwitchUsage[Type]\tTEXT\t\t451\t1\tPEnum_SwitchUsage\t1\n#\nGROUP\t452\tPset_SwitchingDeviceTypeStarter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdab0c4f7-d628-418e-b87e-61f617377264\tPset_SwitchingDeviceTypeStarter.StarterType[Type]\tTEXT\t\t452\t1\tPEnum_StarterType\t1\n#\nGROUP\t453\tPset_SwitchingDeviceTypeSwitchDisconnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t64d3f1a0-e471-42b9-b132-435a2b810b6b\tPset_SwitchingDeviceTypeSwitchDisconnector.HasVisualIndication[Type]\tYESNO\t\t453\t1\tIfcBoolean\t1\nPARAM\tbb0e2217-af1c-47d4-aac2-941b3e893f46\tPset_SwitchingDeviceTypeSwitchDisconnector.LoadDisconnectionType[Type]\tTEXT\t\t453\t1\tPEnum_LoadDisconnectionType\t1\nPARAM\td9bb31f1-8bc3-496c-b00b-f2c9535ce4f4\tPset_SwitchingDeviceTypeSwitchDisconnector.SwitchDisconnectorType[Type]\tTEXT\t\t453\t1\tPEnum_SwitchDisconnectorType\t1\n#\nGROUP\t454\tPset_SwitchingDeviceTypeToggleSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb023cf62-02d3-4fea-bd0f-016a6bbe9f8b\tPset_SwitchingDeviceTypeToggleSwitch.IsIlluminated[Type]\tYESNO\t\t454\t1\tIfcBoolean\t1\nPARAM\t53ca1d9b-f16d-406f-93b3-5511992624b7\tPset_SwitchingDeviceTypeToggleSwitch.Legend[Type]\tTEXT\t\t454\t1\tIfcLabel\t1\nPARAM\t7df6b8f8-afc3-44c5-821e-abda1260e034\tPset_SwitchingDeviceTypeToggleSwitch.SwitchActivation[Type]\tTEXT\t\t454\t1\tPEnum_SwitchActivation\t1\nPARAM\tc43c2697-8c64-48b8-bb26-4e4ee4557585\tPset_SwitchingDeviceTypeToggleSwitch.SwitchUsage[Type]\tTEXT\t\t454\t1\tPEnum_SwitchUsage\t1\nPARAM\t44a1fa86-f3da-4e6c-ae93-6646ea9a70d2\tPset_SwitchingDeviceTypeToggleSwitch.ToggleSwitchType[Type]\tTEXT\t\t454\t1\tPEnum_SwitchingDeviceToggleSwitchType\t1\n#\nGROUP\t455\tPset_SystemFurnitureElementTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tce5c065b-074b-4925-9cb0-e258b0486e9c\tPset_SystemFurnitureElementTypeCommon.Finishing[Type]\tTEXT\t\t455\t1\tIfcLabel\t1\nPARAM\t76c688bd-ea59-4207-a953-4a3f1f23517a\tPset_SystemFurnitureElementTypeCommon.GroupCode[Type]\tTEXT\t\t455\t1\tIfcIdentifier\t1\nPARAM\t013e6d56-cf82-44ef-8ed8-0bf74aeb69e5\tPset_SystemFurnitureElementTypeCommon.IsUsed[Type]\tYESNO\t\t455\t1\tIfcBoolean\t1\nPARAM\tbf0a2c3a-012b-4e4e-81e1-d105691a19b9\tPset_SystemFurnitureElementTypeCommon.NominalHeight[Type]\tLENGTH\t\t455\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tee38e7fc-4f1b-4f76-a809-3b42d0ce63b8\tPset_SystemFurnitureElementTypeCommon.NominalWidth[Type]\tLENGTH\t\t455\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t456\tPset_SystemFurnitureElementTypePanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb985be9a-4ca4-4cfc-ba00-8bf447eb6701\tPset_SystemFurnitureElementTypePanel.FurniturePanelType[Type]\tTEXT\t\t456\t1\tPEnum_FurniturePanelType\t1\nPARAM\t6d5500ac-7e73-49f4-bfa2-bef75ad62a26\tPset_SystemFurnitureElementTypePanel.HasOpening[Type]\tYESNO\t\t456\t1\tIfcBoolean\t1\nPARAM\t0df05869-9c36-4071-bba8-92358fc6aa20\tPset_SystemFurnitureElementTypePanel.NominalThickness[Type]\tLENGTH\t\t456\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t457\tPset_SystemFurnitureElementTypeWorkSurface\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tddd22059-4f67-4e41-82d4-498f40c206bb\tPset_SystemFurnitureElementTypeWorkSurface.HangingHeight[Type]\tLENGTH\t\t457\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc9648a2b-30d0-4265-b1c6-89b744f72fb3\tPset_SystemFurnitureElementTypeWorkSurface.NominalThickness[Type]\tLENGTH\t\t457\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t43f71aae-0966-4faf-a49e-31a204a33ebd\tPset_SystemFurnitureElementTypeWorkSurface.ShapeDescription[Type]\tTEXT\t\t457\t1\tIfcLabel\t1\nPARAM\tf65086c3-1217-4923-be21-549ab5995f92\tPset_SystemFurnitureElementTypeWorkSurface.SupportType[Type]\tTEXT\t\t457\t1\tPEnum_FurniturePanelType\t1\nPARAM\tfa63df89-fae1-4b4f-b7c0-79dacea981ef\tPset_SystemFurnitureElementTypeWorkSurface.UsePurpose[Type]\tTEXT\t\t457\t1\tIfcLabel\t1\n#\nGROUP\t458\tPset_TankOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8cd512f2-4b55-4e5d-9b6e-4de15854db8b\tPset_TankOccurrence.HasLadder[Type]\tYESNO\t\t458\t1\tIfcBoolean\t1\nPARAM\t798e4eee-bc4c-48e6-b586-eead4e044faf\tPset_TankOccurrence.HasVisualIndicator[Type]\tYESNO\t\t458\t1\tIfcBoolean\t1\nPARAM\t6c510b56-1ed5-408d-bfe0-d3827db3bed8\tPset_TankOccurrence.TankComposition[Type]\tTEXT\t\t458\t1\tPEnum_TankComposition\t1\n#\nGROUP\t459\tPset_TankPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t378163f1-8836-4fbd-9f31-f7ca704a5683\tPset_TankPHistory.Level[Type]\tMULTILINETEXT\t\t459\t1\tIfcTimeSeries\t1\nPARAM\t4ea75dc3-96c6-49da-9548-bcc043033b2a\tPset_TankPHistory.Pressure[Type]\tNUMBER\t\t459\t1\tIfcPressureMeasure\t1\nPARAM\t4ad6a732-d71b-489d-ab1c-e19b12b8dd23\tPset_TankPHistory.Temperature[Type]\tNUMBER\t\t459\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t460\tPset_TankTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t50574e88-76b8-4c49-bb26-9160f8ec7a68\tPset_TankTypeCommon.AccessType[Type]\tTEXT\t\t460\t1\tPEnum_TankAccessType\t1\nPARAM\t4dfc739c-f2f1-4b70-81d3-cc76437cc47f\tPset_TankTypeCommon.EffectiveCapacity[Type]\tVOLUME\t\t460\t1\tIfcVolumeMeasure\t1\nPARAM\t3a35ff3c-c28e-4063-9310-b96e6f5ca12c\tPset_TankTypeCommon.EndShapeType[Type]\tTEXT\t\t460\t1\tPEnum_EndShapeType\t1\nPARAM\tf2cfaa2f-c04b-4e31-9f0e-3d23b965262a\tPset_TankTypeCommon.FirstCurvatureRadius[Type]\tLENGTH\t\t460\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6fe458df-cd82-4d69-9433-4a99d9e02612\tPset_TankTypeCommon.Material[Type]\tMULTILINETEXT\t\t460\t1\tIfcMaterial\t1\nPARAM\td0734e88-06ad-44db-886c-078994df3f88\tPset_TankTypeCommon.MaterialThickness[Type]\tLENGTH\t\t460\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t45c24c0d-d642-4e8e-a779-9422a58b9ff2\tPset_TankTypeCommon.NominalCapacity[Type]\tVOLUME\t\t460\t1\tIfcVolumeMeasure\t1\nPARAM\t25f72821-9111-4717-bd25-802f5487c7f8\tPset_TankTypeCommon.NominalDepth[Type]\tLENGTH\t\t460\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t81b9963b-d1ab-4069-a632-2c8b29397818\tPset_TankTypeCommon.NominalLengthOrDiameter[Type]\tLENGTH\t\t460\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta4cf9dbd-a3a0-47c2-8c11-d2aad3e76fd4\tPset_TankTypeCommon.NominalWidthOrDiameter[Type]\tLENGTH\t\t460\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t389d9d23-bc4e-4058-b1e0-c7d02b24a9b4\tPset_TankTypeCommon.NumberOfSections[Type]\tINTEGER\t\t460\t1\tIfcInteger\t1\nPARAM\t1ba7a7fd-7079-456d-980d-abf6edd98ef6\tPset_TankTypeCommon.OperatingWeight[Type]\tNUMBER\t\t460\t1\tIfcMassMeasure\t1\nPARAM\t31e0ea98-5f08-4726-bceb-1ea310ddb8bb\tPset_TankTypeCommon.PatternType[Type]\tTEXT\t\t460\t1\tPEnum_TankPatternType\t1\nPARAM\tc6be49c1-248d-4f5f-a9bc-1b38cc6dd31d\tPset_TankTypeCommon.Reference[Type]\tTEXT\t\t460\t1\tIfcIdentifier\t1\nPARAM\t69d072fc-4811-40d1-999d-38a3fa8b8e8b\tPset_TankTypeCommon.SecondCurvatureRadius[Type]\tLENGTH\t\t460\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb80e303f-3f02-4754-9038-2e8f9e086739\tPset_TankTypeCommon.Status[Type]\tTEXT\t\t460\t1\tPEnum_ElementStatus\t1\nPARAM\t8300e409-142a-4e56-a8ab-98f2966de8e6\tPset_TankTypeCommon.StorageType[Type]\tTEXT\t\t460\t1\tPEnum_TankStorageType\t1\nPARAM\t8dbc07fa-a637-42d2-ade3-610b8442e5fa\tPset_TankTypeCommon.Type[Type]\tTEXT\t\t460\t1\tPEnum_TankType\t1\n#\nGROUP\t461\tPset_TankTypeExpansion\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tece7f7cf-d205-499b-9d1a-e0652654385a\tPset_TankTypeExpansion.ChargePressure[Type]\tNUMBER\t\t461\t1\tIfcPressureMeasure\t1\nPARAM\t4134564b-abc5-455d-8495-56743b28bae9\tPset_TankTypeExpansion.PressureRegulatorSetting[Type]\tNUMBER\t\t461\t1\tIfcPressureMeasure\t1\nPARAM\t7488352d-f7fc-4d11-b0c1-1d1b3bd97cae\tPset_TankTypeExpansion.ReliefValveSetting[Type]\tNUMBER\t\t461\t1\tIfcPressureMeasure\t1\n#\nGROUP\t462\tPset_TankTypePreformed\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta7777559-b2f6-4104-a756-9acd8f6ec51e\tPset_TankTypePreformed.EndShapeType[Type]\tTEXT\t\t462\t1\tPEnum_EndShapeType\t1\nPARAM\t065952a9-7794-405f-b04b-9575b114db9e\tPset_TankTypePreformed.FirstCurvatureRadius[Type]\tLENGTH\t\t462\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdb06852e-b7d8-42e1-9757-5d67caa9bbfa\tPset_TankTypePreformed.PatternType[Type]\tTEXT\t\t462\t1\tPEnum_TankPatternType\t1\nPARAM\tba3ca46c-cdb7-4114-b7b4-c598a729459d\tPset_TankTypePreformed.SecondCurvatureRadius[Type]\tLENGTH\t\t462\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t463\tPset_TankTypePressureVessel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0da30f05-5893-4fae-a394-cd99f11e5303\tPset_TankTypePressureVessel.ChargePressure[Type]\tNUMBER\t\t463\t1\tIfcPressureMeasure\t1\nPARAM\td87e1fa3-0543-42c9-9d39-d2ce5f8b2bb1\tPset_TankTypePressureVessel.PressureRegulatorSetting[Type]\tNUMBER\t\t463\t1\tIfcPressureMeasure\t1\nPARAM\te91437f0-8df5-450e-a601-2ada7e855202\tPset_TankTypePressureVessel.ReliefValveSetting[Type]\tNUMBER\t\t463\t1\tIfcPressureMeasure\t1\n#\nGROUP\t464\tPset_TankTypeSectional\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4cdda3cf-5033-41a3-b74f-57a30fc1f10f\tPset_TankTypeSectional.NumberOfSections[Type]\tINTEGER\t\t464\t1\tIfcInteger\t1\nPARAM\td7cf153d-fcf6-4f41-bab7-bede03c77a84\tPset_TankTypeSectional.SectionLength[Type]\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taa39e89d-88f2-471a-a49f-96279396327f\tPset_TankTypeSectional.SectionWidth[Type]\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t465\tPset_TendonAnchorCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta661c755-9eb3-4f32-bb14-a28442b6c5e1\tPset_TendonAnchorCommon.Reference[Type]\tTEXT\t\t465\t1\tIfcIdentifier\t1\nPARAM\t32b6754e-909f-4127-b95a-6d989ad3919c\tPset_TendonAnchorCommon.Status[Type]\tTEXT\t\t465\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t466\tPset_TendonCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta0dca432-aea5-42ea-8195-8b8e3cea7764\tPset_TendonCommon.AnchorageSlip[Type]\tLENGTH\t\t466\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t466f4d16-cdfc-4183-82f6-e8815057878b\tPset_TendonCommon.FrictionCoefficient[Type]\tNUMBER\t\t466\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t9394e05f-2634-4706-9126-406fe8f16c24\tPset_TendonCommon.MinCurvatureRadius[Type]\tLENGTH\t\t466\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te4c6e3dc-7846-4eba-98e3-5c11752006a3\tPset_TendonCommon.NominalDiameter[Type]\tLENGTH\t\t466\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tef76a45b-ad19-4cdc-a4a1-6203d61ff373\tPset_TendonCommon.PreStress[Type]\tNUMBER\t\t466\t1\tIfcPressureMeasure\t1\nPARAM\tde2f52ef-4836-4840-bde1-1988f697e2dd\tPset_TendonCommon.Reference[Type]\tTEXT\t\t466\t1\tIfcIdentifier\t1\nPARAM\t0f69819a-0c6b-4cab-9407-7d331f268f89\tPset_TendonCommon.SheathDiameter[Type]\tLENGTH\t\t466\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t53536c2f-707b-44ef-b97e-4171aefb3c6f\tPset_TendonCommon.Status[Type]\tTEXT\t\t466\t1\tPEnum_ElementStatus\t1\nPARAM\t7763ab09-055a-46f8-9ffc-49f0cbdb042e\tPset_TendonCommon.TensionForce[Type]\tNUMBER\t\t466\t1\tIfcForceMeasure\t1\n#\nGROUP\t467\tPset_ThermalLoadAggregate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t53ecbe2f-995f-42b3-822b-4f2656e4d671\tPset_ThermalLoadAggregate.ApplianceDiversity[Type]\tNUMBER\t\t467\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t707a8182-3741-4b55-aa19-a37abd76410a\tPset_ThermalLoadAggregate.InfiltrationDiversitySummer[Type]\tNUMBER\t\t467\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7b62457c-a419-43ab-873e-7d8f905dec43\tPset_ThermalLoadAggregate.InfiltrationDiversityWinter[Type]\tNUMBER\t\t467\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t11175ebf-f7ef-44f9-83d6-94b27139ff07\tPset_ThermalLoadAggregate.LightingDiversity[Type]\tNUMBER\t\t467\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5a8a6a55-7a4f-4c0a-8e71-2d0847b00e16\tPset_ThermalLoadAggregate.LoadSafetyFactor[Type]\tNUMBER\t\t467\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4f2ee6ca-91f3-48dd-86be-c8e918f3b533\tPset_ThermalLoadAggregate.TotalCoolingLoad[Type]\tNUMBER\t\t467\t1\tIfcPowerMeasure\t1\nPARAM\t6b71c33b-5f63-42af-9367-3e5909182134\tPset_ThermalLoadAggregate.TotalHeatingLoad[Type]\tNUMBER\t\t467\t1\tIfcPowerMeasure\t1\n#\nGROUP\t468\tPset_ThermalLoadDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a301cf5-9dc0-476a-bc8f-83677e5ad636\tPset_ThermalLoadDesignCriteria.AppliancePercentLoadToRadiant[Type]\tNUMBER\t\t468\t1\tIfcPositiveRatioMeasure\t1\nPARAM\taab8801d-03d9-4d88-bf07-b26067c8a24f\tPset_ThermalLoadDesignCriteria.LightingLoadIntensity[Type]\tNUMBER\t\t468\t1\tIfcReal\t1\nPARAM\t3ace47a0-46e1-4f29-a341-d243806c6921\tPset_ThermalLoadDesignCriteria.LightingPercentLoadToReturnAir[Type]\tNUMBER\t\t468\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td293c61d-a288-4b45-87dd-4997bfcdb1e1\tPset_ThermalLoadDesignCriteria.OccupancyDiversity[Type]\tNUMBER\t\t468\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tbdafefd9-68a7-4c83-a8f9-9ed02a946f58\tPset_ThermalLoadDesignCriteria.OutsideAirPerPerson[Type]\tNUMBER\t\t468\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t6d5f9ffc-b6cc-4655-a3d0-bfcfe59c58ec\tPset_ThermalLoadDesignCriteria.ReceptacleLoadIntensity[Type]\tNUMBER\t\t468\t1\tIfcReal\t1\n#\nGROUP\t469\tPset_TransformerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7579e475-6187-465d-91a4-dc117258aa4a\tPset_TransformerTypeCommon.EfficiencyCurve[Type]\tMULTILINETEXT\t\t469\t1\tPropertyTableValue\t1\nPARAM\te92119d7-8983-4943-be01-76e8692b5f56\tPset_TransformerTypeCommon.ImaginaryImpedanceRatio[Type]\tNUMBER\t\t469\t1\tIfcRatioMeasure\t1\nPARAM\ta968bda1-bb45-4569-ba77-3e6b9be77bae\tPset_TransformerTypeCommon.IsNeutralPrimaryTerminalAvailable[Type]\tYESNO\t\t469\t1\tIfcBoolean\t1\nPARAM\t0be00804-31d2-4c05-9c35-03f15fbb8ded\tPset_TransformerTypeCommon.IsNeutralSecondaryTerminalAvailable[Type]\tYESNO\t\t469\t1\tIfcBoolean\t1\nPARAM\tdee251ba-4aa4-4596-b3d8-7bf1e143def2\tPset_TransformerTypeCommon.MaximumApparentPower[Type]\tNUMBER\t\t469\t1\tIfcPowerMeasure\t1\nPARAM\t6d97b484-1ef5-45e9-aea2-c48292d47127\tPset_TransformerTypeCommon.PrimaryApparentPower[Type]\tNUMBER\t\t469\t1\tIfcPowerMeasure\t1\nPARAM\t6502bf69-d306-49c3-b835-67ed44916b01\tPset_TransformerTypeCommon.PrimaryCurrent[Type]\tNUMBER\t\t469\t1\tIfcElectricCurrentMeasure\t1\nPARAM\ta4892b15-c688-471b-bc64-f65db26929ad\tPset_TransformerTypeCommon.PrimaryFrequency[Type]\tNUMBER\t\t469\t1\tIfcFrequencyMeasure\t1\nPARAM\tf3158018-b20d-4b88-884d-54aef2746b21\tPset_TransformerTypeCommon.PrimaryVoltage[Type]\tNUMBER\t\t469\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t7a1f01ee-e40e-4d96-b0d2-b510d1df993a\tPset_TransformerTypeCommon.RadiativeFraction[Type]\tNUMBER\t\t469\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t2a9253f8-1ac5-4cbc-b8e3-fc80b51e50d6\tPset_TransformerTypeCommon.RealImpedanceRatio[Type]\tNUMBER\t\t469\t1\tIfcRatioMeasure\t1\nPARAM\te91bfd74-f8f4-475c-85f6-4638b7c9d768\tPset_TransformerTypeCommon.Reference[Type]\tTEXT\t\t469\t1\tIfcIdentifier\t1\nPARAM\t405d0030-1d68-45a5-a305-c27a27cc50d6\tPset_TransformerTypeCommon.SecondaryApparentPower[Type]\tNUMBER\t\t469\t1\tIfcPowerMeasure\t1\nPARAM\tecb337bf-6b31-4797-bea7-f0ff14372a07\tPset_TransformerTypeCommon.SecondaryCurrent[Type]\tNUMBER\t\t469\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tf1378dcb-9e4d-45d0-af7e-2bd27ac92137\tPset_TransformerTypeCommon.SecondaryCurrentType[Type]\tTEXT\t\t469\t1\tPEnum_SecondaryCurrentType\t1\nPARAM\t8b412e32-67ef-4c30-bbbb-55d6a14581bb\tPset_TransformerTypeCommon.SecondaryFrequency[Type]\tNUMBER\t\t469\t1\tIfcFrequencyMeasure\t1\nPARAM\t56d5b2ef-1385-4315-b839-8b71eaef5f35\tPset_TransformerTypeCommon.SecondaryVoltage[Type]\tNUMBER\t\t469\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t52104f0d-16c4-4c57-85bf-ce431a24a05e\tPset_TransformerTypeCommon.ShortCircuitVoltage[Type]\tMULTILINETEXT\t\t469\t1\tIfcComplexNumber\t1\nPARAM\tbf7acad1-9cf7-4c69-a72a-cec5a8abee6d\tPset_TransformerTypeCommon.Status[Type]\tTEXT\t\t469\t1\tPEnum_ElementStatus\t1\nPARAM\t3efcd830-403d-4785-9f14-e2ca08cea10a\tPset_TransformerTypeCommon.TransformerVectorGroup[Type]\tTEXT\t\t469\t1\tPEnum_TransformerVectorGroup\t1\n#\nGROUP\t470\tPset_TransportElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcf7cac39-8714-4027-9d9e-18b53910d2a6\tPset_TransportElementCommon.CapacityPeople[Type]\tINTEGER\t\t470\t1\tIfcCountMeasure\t1\nPARAM\t41621dac-8d51-4bbe-9876-6618dda18907\tPset_TransportElementCommon.CapacityWeight[Type]\tNUMBER\t\t470\t1\tIfcMassMeasure\t1\nPARAM\t66416a21-d85a-460d-a0d6-de213474da91\tPset_TransportElementCommon.FireExit[Type]\tYESNO\t\t470\t1\tIfcBoolean\t1\nPARAM\t383c73ea-357f-4123-920a-24b680bacd0f\tPset_TransportElementCommon.Reference[Type]\tTEXT\t\t470\t1\tIfcIdentifier\t1\nPARAM\t8f02356c-f51e-4149-a4cd-b779ff0923a9\tPset_TransportElementCommon.Status[Type]\tTEXT\t\t470\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t471\tPset_TransportElementElevator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc75cf7d2-267e-4e84-b5a1-67431a126de8\tPset_TransportElementElevator.ClearDepth[Type]\tLENGTH\t\t471\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t49b09e3a-239a-42a1-87b6-db12ede946b2\tPset_TransportElementElevator.ClearHeight[Type]\tLENGTH\t\t471\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4fea65e0-2683-423a-9b80-ccdbfa3d3433\tPset_TransportElementElevator.ClearWidth[Type]\tLENGTH\t\t471\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta9037eda-7492-4674-b78e-14cbdb911cd1\tPset_TransportElementElevator.FireFightingLift[Type]\tYESNO\t\t471\t1\tIfcBoolean\t1\n#\nGROUP\t472\tPset_TubeBundleTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td50cefe5-d693-4bb9-9100-c5c01a389723\tPset_TubeBundleTypeCommon.FoulingFactor[Type]\tNUMBER\t\t472\t1\tIfcThermalResistanceMeasure\t1\nPARAM\tddb119f7-839b-45a9-9a9a-b9d0887fbee0\tPset_TubeBundleTypeCommon.HasTurbulator[Type]\tYESNO\t\t472\t1\tIfcBoolean\t1\nPARAM\t2f5d00b1-01e9-45c7-8a3b-ee315b312159\tPset_TubeBundleTypeCommon.HorizontalSpacing[Type]\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5b661149-08f0-40a6-bc96-452924db5b63\tPset_TubeBundleTypeCommon.InLineRowSpacing[Type]\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te8b6bb24-3ddf-4ac6-bbaf-7019d337eb6b\tPset_TubeBundleTypeCommon.InsideDiameter[Type]\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t47821133-266b-4272-992f-bf8ed6353d5e\tPset_TubeBundleTypeCommon.Length[Type]\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3addc9a9-9ade-45ed-91e0-d80c6376806b\tPset_TubeBundleTypeCommon.Material[Type]\tMULTILINETEXT\t\t472\t1\tIfcMaterial\t1\nPARAM\t5ccd6074-6a18-4f47-b2e8-a72cd791c409\tPset_TubeBundleTypeCommon.NominalDiameter[Type]\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tba4e8f8b-6944-489d-ad79-60980f0fe275\tPset_TubeBundleTypeCommon.NumberOfCircuits[Type]\tINTEGER\t\t472\t1\tIfcInteger\t1\nPARAM\td87f5a9a-e91a-452f-9c81-c1fb18a29c9c\tPset_TubeBundleTypeCommon.NumberOfRows[Type]\tINTEGER\t\t472\t1\tIfcInteger\t1\nPARAM\tb6010939-3f57-4330-9ac4-c02c2024fe5e\tPset_TubeBundleTypeCommon.OutsideDiameter[Type]\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc21ab28a-15e1-425b-86d2-494f851ab5c0\tPset_TubeBundleTypeCommon.Reference[Type]\tTEXT\t\t472\t1\tIfcIdentifier\t1\nPARAM\taecf484e-95a3-4d86-a316-a7d6f5a0565d\tPset_TubeBundleTypeCommon.StaggeredRowSpacing[Type]\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te4fe280e-cbb6-4322-8398-c4aff96260fc\tPset_TubeBundleTypeCommon.Status[Type]\tTEXT\t\t472\t1\tPEnum_ElementStatus\t1\nPARAM\t4f4c864b-7404-4d00-aaca-7af150903591\tPset_TubeBundleTypeCommon.ThermalConductivity[Type]\tNUMBER\t\t472\t1\tIfcThermalConductivityMeasure\t1\nPARAM\td1c9c4ad-35fc-4376-9048-e82d1396deaa\tPset_TubeBundleTypeCommon.VerticalSpacing[Type]\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb51b2aec-3d61-428e-9c61-9aa45f63d0b7\tPset_TubeBundleTypeCommon.Volume[Type]\tVOLUME\t\t472\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t473\tPset_TubeBundleTypeFinned\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te587be47-8e02-4d24-be10-5bd09c160d42\tPset_TubeBundleTypeFinned.Diameter[Type]\tLENGTH\t\t473\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td8ce4155-0b9b-4d8e-848b-c056ce4da026\tPset_TubeBundleTypeFinned.FinCorrugatedType[Type]\tTEXT\t\t473\t1\tIfcLabel\t1\nPARAM\ta719874a-c073-4de7-996e-81927a76f0a4\tPset_TubeBundleTypeFinned.HasCoating[Type]\tYESNO\t\t473\t1\tIfcBoolean\t1\nPARAM\tcd65f524-c47a-4bcb-8e10-f21f719a17af\tPset_TubeBundleTypeFinned.Height[Type]\tLENGTH\t\t473\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbe6c0454-4f76-46fc-9b94-4460557f7ecc\tPset_TubeBundleTypeFinned.Length[Type]\tLENGTH\t\t473\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te8716347-649b-4483-bc10-a94b58e7c4c0\tPset_TubeBundleTypeFinned.Material[Type]\tMULTILINETEXT\t\t473\t1\tIfcMaterial\t1\nPARAM\tf5677b8a-5605-4c1a-9b7b-4ff457223557\tPset_TubeBundleTypeFinned.Spacing[Type]\tLENGTH\t\t473\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t78ffe776-6066-4930-a486-5deadf33a5f3\tPset_TubeBundleTypeFinned.ThermalConductivity[Type]\tNUMBER\t\t473\t1\tIfcThermalConductivityMeasure\t1\nPARAM\ta7ef5596-81d1-45bc-aa42-46ee7847ed89\tPset_TubeBundleTypeFinned.Thickness[Type]\tLENGTH\t\t473\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t474\tPset_UnitaryControlElementPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8fb10db9-639b-47ea-b545-28049657a683\tPset_UnitaryControlElementPHistory.Fan[Type]\tMULTILINETEXT\t\t474\t1\tIfcTimeSeries\t1\nPARAM\t0c295158-b762-4c6d-b14d-7360f5d59aa3\tPset_UnitaryControlElementPHistory.Mode[Type]\tMULTILINETEXT\t\t474\t1\tIfcTimeSeries\t1\nPARAM\t7eb75f66-a2b4-4245-a151-cbce750bd7cf\tPset_UnitaryControlElementPHistory.SetPoint[Type]\tMULTILINETEXT\t\t474\t1\tIfcTimeSeries\t1\nPARAM\teeea7c3b-5f20-4481-81a3-b835d7aa615e\tPset_UnitaryControlElementPHistory.Temperature[Type]\tMULTILINETEXT\t\t474\t1\tIfcTimeSeries\t1\n#\nGROUP\t475\tPset_UnitaryControlElementTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf8c131f3-0776-4e3f-9c74-05ba161f8264\tPset_UnitaryControlElementTypeCommon.Mode[Type]\tMULTILINETEXT\t\t475\t1\tPropertyTableValue\t1\nPARAM\tfe0d9dd4-536c-445a-b3d0-82e2a1c672f7\tPset_UnitaryControlElementTypeCommon.Reference[Type]\tTEXT\t\t475\t1\tIfcIdentifier\t1\nPARAM\te5b546fc-37e9-4f97-814f-f6a50f40a6e4\tPset_UnitaryControlElementTypeCommon.Status[Type]\tTEXT\t\t475\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t476\tPset_UnitaryControlElementTypeIndicatorPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5bf2d26b-a5bc-4cfc-b329-6c8d003a3911\tPset_UnitaryControlElementTypeIndicatorPanel.Application[Type]\tTEXT\t\t476\t1\tPEnum_UnitaryControlElementApplication\t1\n#\nGROUP\t477\tPset_UnitaryControlElementTypeThermostat\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbff823c4-a3ca-4b5a-aeec-f868ce376d26\tPset_UnitaryControlElementTypeThermostat.TemperatureSetPoint[Type]\tMULTILINETEXT\t\t477\t1\tPropertyBoundedValue\t1\n#\nGROUP\t478\tPset_UnitaryEquipmentTypeAirConditioningUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td2d9d13d-efed-4405-a0d7-deb19b240294\tPset_UnitaryEquipmentTypeAirConditioningUnit.CondenserEnteringTemperature[Type]\tNUMBER\t\t478\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t5f78236e-9f14-4793-9945-db0dab71efde\tPset_UnitaryEquipmentTypeAirConditioningUnit.CondenserFlowrate[Type]\tNUMBER\t\t478\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tb194aba2-e483-4bf7-84cf-6423577f8a31\tPset_UnitaryEquipmentTypeAirConditioningUnit.CondenserLeavingTemperature[Type]\tNUMBER\t\t478\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t610d6eb6-d7d4-45bf-89a1-301b5d97dcfc\tPset_UnitaryEquipmentTypeAirConditioningUnit.CoolingEfficiency[Type]\tNUMBER\t\t478\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc0edd89e-a7cf-4211-8c9e-8c2889a9215a\tPset_UnitaryEquipmentTypeAirConditioningUnit.HeatingCapacity[Type]\tNUMBER\t\t478\t1\tIfcPowerMeasure\t1\nPARAM\t47330131-9d7e-4c19-8801-9f804c3d7b5b\tPset_UnitaryEquipmentTypeAirConditioningUnit.HeatingEfficiency[Type]\tNUMBER\t\t478\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf4cf9631-b88d-43d5-934b-7bed8c943336\tPset_UnitaryEquipmentTypeAirConditioningUnit.LatentCoolingCapacity[Type]\tNUMBER\t\t478\t1\tIfcPowerMeasure\t1\nPARAM\t511cb99f-a7c5-4c2c-a6c4-13a863c28f5d\tPset_UnitaryEquipmentTypeAirConditioningUnit.OutsideAirFlowrate[Type]\tNUMBER\t\t478\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t5dc8dd45-7758-4059-95b9-784f9d14b6a8\tPset_UnitaryEquipmentTypeAirConditioningUnit.SensibleCoolingCapacity[Type]\tNUMBER\t\t478\t1\tIfcPowerMeasure\t1\n#\nGROUP\t479\tPset_UnitaryEquipmentTypeAirHandler\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t73a5ba0a-c2eb-4471-908d-77619c05cc33\tPset_UnitaryEquipmentTypeAirHandler.AirHandlerConstruction[Type]\tTEXT\t\t479\t1\tPEnum_AirHandlerConstruction\t1\nPARAM\t36c02567-b6a2-403a-b43e-60241ff45992\tPset_UnitaryEquipmentTypeAirHandler.AirHandlerFanCoilArrangement[Type]\tTEXT\t\t479\t1\tPEnum_AirHandlerFanCoilArrangement\t1\nPARAM\tea216872-106f-4bf0-abe9-711d1a3064ba\tPset_UnitaryEquipmentTypeAirHandler.DualDeck[Type]\tYESNO\t\t479\t1\tIfcBoolean\t1\n#\nGROUP\t480\tPset_UnitaryEquipmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0a8cfd6b-bbe7-4d01-9db4-868cd9d820df\tPset_UnitaryEquipmentTypeCommon.Reference[Type]\tTEXT\t\t480\t1\tIfcIdentifier\t1\nPARAM\t11f7a12c-03a2-4aed-adf0-29ceef7a89f5\tPset_UnitaryEquipmentTypeCommon.Status[Type]\tTEXT\t\t480\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t481\tPset_UtilityConsumption\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0dd14c78-afe2-4327-b7bd-023f67688896\tPset_UtilityConsumption.Electricity[Type]\tTEXT\t\t481\t1\tIfcLabel\t1\nPARAM\td967f88e-d1a9-4790-890a-506ad312dee2\tPset_UtilityConsumption.Fuel[Type]\tTEXT\t\t481\t1\tIfcLabel\t1\nPARAM\t67a0fa38-c7a6-44d3-8d22-471433b77f06\tPset_UtilityConsumption.Heat[Type]\tTEXT\t\t481\t1\tIfcLabel\t1\nPARAM\t2b34af6f-2d29-479f-9704-3b8e94ac6cc8\tPset_UtilityConsumption.Steam[Type]\tTEXT\t\t481\t1\tIfcLabel\t1\nPARAM\t595e82a4-1f0e-4b3d-9804-88c15259f261\tPset_UtilityConsumption.Water[Type]\tTEXT\t\t481\t1\tIfcLabel\t1\n#\nGROUP\t482\tPset_UtilityConsumptionPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0dc1a818-9f6e-48fb-9998-fa8fdd72d7ff\tPset_UtilityConsumptionPHistory.Electricity[Type]\tMULTILINETEXT\t\t482\t1\tIfcTimeSeries\t1\nPARAM\tbcb6226e-9c1a-4e57-b4a0-751a266ec6c7\tPset_UtilityConsumptionPHistory.Fuel[Type]\tMULTILINETEXT\t\t482\t1\tIfcTimeSeries\t1\nPARAM\t7b9bcc75-c897-47b8-945c-b8ab49894fa8\tPset_UtilityConsumptionPHistory.Heat[Type]\tMULTILINETEXT\t\t482\t1\tIfcTimeSeries\t1\nPARAM\t41d9ff16-6b3b-437d-969b-8d8f36947932\tPset_UtilityConsumptionPHistory.Steam[Type]\tMULTILINETEXT\t\t482\t1\tIfcTimeSeries\t1\nPARAM\tc5d89d3e-0fb6-4a0d-a55b-8a02de736e0b\tPset_UtilityConsumptionPHistory.Water[Type]\tMULTILINETEXT\t\t482\t1\tIfcTimeSeries\t1\n#\nGROUP\t483\tPset_ValvePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta46ee934-d6fd-4794-b8cc-e4de4da879e5\tPset_ValvePHistory.MeasuredFlowRate[Type]\tMULTILINETEXT\t\t483\t1\tIfcTimeSeries\t1\nPARAM\tbb36dacf-390c-4073-a25b-71b633adc57a\tPset_ValvePHistory.MeasuredPressureDrop[Type]\tMULTILINETEXT\t\t483\t1\tIfcTimeSeries\t1\nPARAM\tde6b1ed3-cd2e-4481-b1dd-90790c741243\tPset_ValvePHistory.PercentageOpen[Type]\tMULTILINETEXT\t\t483\t1\tIfcTimeSeries\t1\n#\nGROUP\t484\tPset_ValveTypeAirRelease\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1446b091-14ba-41d1-b683-cae34b1e22f2\tPset_ValveTypeAirRelease.IsAutomatic[Type]\tYESNO\t\t484\t1\tIfcBoolean\t1\n#\nGROUP\t485\tPset_ValveTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc0d2a818-2fbc-4002-a2d0-e43e804a31c4\tPset_ValveTypeCommon.BodyMaterial[Type]\tMULTILINETEXT\t\t485\t1\tIfcMaterial\t1\nPARAM\t46832b68-62d7-4921-904c-7340cba1424d\tPset_ValveTypeCommon.CloseOffRating[Type]\tNUMBER\t\t485\t1\tIfcPressureMeasure\t1\nPARAM\t5217feec-a686-456f-aae1-0e3c23cd5792\tPset_ValveTypeCommon.FlowCoefficient[Type]\tNUMBER\t\t485\t1\tIfcReal\t1\nPARAM\t03668c17-9d47-4296-9163-aca8dbfccfd8\tPset_ValveTypeCommon.OperatingMechanismMaterial[Type]\tMULTILINETEXT\t\t485\t1\tIfcMaterial\t1\nPARAM\t39139dd0-04b7-47ae-81d9-88695e6cf7c1\tPset_ValveTypeCommon.Reference[Type]\tTEXT\t\t485\t1\tIfcIdentifier\t1\nPARAM\ta398f930-bdc4-4f0a-9031-dd073f0754f0\tPset_ValveTypeCommon.Size[Type]\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta95b1e84-d6b4-47d2-b8f1-f50253070211\tPset_ValveTypeCommon.Status[Type]\tTEXT\t\t485\t1\tPEnum_ElementStatus\t1\nPARAM\t535324d0-9873-4292-8c9f-7a1e2e4c59d2\tPset_ValveTypeCommon.TestPressure[Type]\tNUMBER\t\t485\t1\tIfcPressureMeasure\t1\nPARAM\td63f4428-6658-49c5-bc11-6df330cbfb30\tPset_ValveTypeCommon.ValveMechanism[Type]\tTEXT\t\t485\t1\tPEnum_ValveMechanism\t1\nPARAM\t77661348-add5-496f-aa54-2d9c48535b10\tPset_ValveTypeCommon.ValveOperation[Type]\tTEXT\t\t485\t1\tPEnum_ValveOperation\t1\nPARAM\t28749f08-22ad-45fd-938c-2dbf2d2465d1\tPset_ValveTypeCommon.ValvePattern[Type]\tTEXT\t\t485\t1\tPEnum_ValvePattern\t1\nPARAM\t0c83a303-579d-4a44-bab8-e0b34cbaf778\tPset_ValveTypeCommon.WorkingPressure[Type]\tNUMBER\t\t485\t1\tIfcPressureMeasure\t1\n#\nGROUP\t486\tPset_ValveTypeDrawOffCock\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8b2788f8-09e7-4d4f-86ef-672762569543\tPset_ValveTypeDrawOffCock.HasHoseUnion[Type]\tYESNO\t\t486\t1\tIfcBoolean\t1\n#\nGROUP\t487\tPset_ValveTypeFaucet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te7ba2bf4-7c2d-4b2e-8c05-d0c67d24cd18\tPset_ValveTypeFaucet.FaucetFunction[Type]\tTEXT\t\t487\t1\tPEnum_FaucetFunction\t1\nPARAM\tdf261e97-2a4d-4566-8844-34322ce026d5\tPset_ValveTypeFaucet.FaucetOperation[Type]\tTEXT\t\t487\t1\tPEnum_FaucetOperation\t1\nPARAM\t18d77a63-2760-4529-9eef-d767e515db77\tPset_ValveTypeFaucet.FaucetTopDescription[Type]\tTEXT\t\t487\t1\tIfcText\t1\nPARAM\t6456435f-53ff-4ec9-bddd-b4172dbbec91\tPset_ValveTypeFaucet.FaucetType[Type]\tTEXT\t\t487\t1\tPEnum_FaucetType\t1\nPARAM\ta50a6923-f589-4e36-902b-5f8048198458\tPset_ValveTypeFaucet.Finish[Type]\tTEXT\t\t487\t1\tIfcText\t1\n#\nGROUP\t488\tPset_ValveTypeFlushing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t69bf465e-c63a-41be-93f6-a9c9b39b7a15\tPset_ValveTypeFlushing.FlushingRate[Type]\tNUMBER\t\t488\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tea7fd99d-dadf-4072-898a-8f50651d1567\tPset_ValveTypeFlushing.HasIntegralShutOffDevice[Type]\tYESNO\t\t488\t1\tIfcBoolean\t1\nPARAM\t86d7f5f8-e906-4ce6-a9bb-036afc666a20\tPset_ValveTypeFlushing.IsHighPressure[Type]\tYESNO\t\t488\t1\tIfcBoolean\t1\n#\nGROUP\t489\tPset_ValveTypeGasTap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb3a20ee8-2f3f-47d1-8a3f-f43e5f814900\tPset_ValveTypeGasTap.HasHoseUnion[Type]\tYESNO\t\t489\t1\tIfcBoolean\t1\n#\nGROUP\t490\tPset_ValveTypeIsolating\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t62577c71-ff37-4b21-be19-205c313b8662\tPset_ValveTypeIsolating.IsNormallyOpen[Type]\tYESNO\t\t490\t1\tIfcBoolean\t1\nPARAM\tc514aee8-38c3-472c-bb19-602b7df232f2\tPset_ValveTypeIsolating.IsolatingPurpose[Type]\tTEXT\t\t490\t1\tPEnum_IsolatingPurpose\t1\n#\nGROUP\t491\tPset_ValveTypeMixing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfa27377a-e1fd-4e12-9b80-c39bfb8b0690\tPset_ValveTypeMixing.MixerControl[Type]\tTEXT\t\t491\t1\tPEnum_MixingValveControl\t1\nPARAM\te0946bc5-2430-4d79-b1e7-2b3cc2d1ceac\tPset_ValveTypeMixing.OutletConnectionSize[Type]\tLENGTH\t\t491\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t492\tPset_ValveTypePressureReducing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t62d0563d-7e0c-4a4a-9dfe-c40c707445ce\tPset_ValveTypePressureReducing.DownstreamPressure[Type]\tNUMBER\t\t492\t1\tIfcPressureMeasure\t1\nPARAM\t715942a8-4e07-4ba1-824c-6ddbd76369af\tPset_ValveTypePressureReducing.UpstreamPressure[Type]\tNUMBER\t\t492\t1\tIfcPressureMeasure\t1\n#\nGROUP\t493\tPset_ValveTypePressureRelief\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t11d70827-02e3-44eb-a148-ad396fdf3e8e\tPset_ValveTypePressureRelief.ReliefPressure[Type]\tNUMBER\t\t493\t1\tIfcPressureMeasure\t1\n#\nGROUP\t494\tPset_VibrationIsolatorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf9c1d866-9483-4935-ad01-871a25c35881\tPset_VibrationIsolatorTypeCommon.Height[Type]\tLENGTH\t\t494\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9099ae5b-0fb8-4252-b477-8e8e9deec516\tPset_VibrationIsolatorTypeCommon.IsolatorCompressibility[Type]\tNUMBER\t\t494\t1\tIfcRatioMeasure\t1\nPARAM\t92407b43-4ff4-4edb-b642-d840bf25ca42\tPset_VibrationIsolatorTypeCommon.IsolatorStaticDeflection[Type]\tLENGTH\t\t494\t1\tIfcLengthMeasure\t1\nPARAM\t7277bb6d-f565-421b-ba41-d463cdfd94d9\tPset_VibrationIsolatorTypeCommon.Material[Type]\tMULTILINETEXT\t\t494\t1\tIfcMaterial\t1\nPARAM\td90da190-ea39-48d2-9019-b5e3ace9830a\tPset_VibrationIsolatorTypeCommon.MaximumSupportedWeight[Type]\tNUMBER\t\t494\t1\tIfcMassMeasure\t1\nPARAM\t69b5d12a-28c7-46ab-ba85-578c888de1b7\tPset_VibrationIsolatorTypeCommon.NominalHeight[Type]\tLENGTH\t\t494\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3d14a325-c5e7-4973-a6ba-3b24860693ed\tPset_VibrationIsolatorTypeCommon.Reference[Type]\tTEXT\t\t494\t1\tIfcIdentifier\t1\nPARAM\t57450441-a5e0-4235-8168-5b85a7c24e75\tPset_VibrationIsolatorTypeCommon.Status[Type]\tTEXT\t\t494\t1\tPEnum_ElementStatus\t1\nPARAM\t97a6f5b9-13c4-4119-829f-65f804bfce8c\tPset_VibrationIsolatorTypeCommon.VibrationTransmissibility[Type]\tNUMBER\t\t494\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t495\tPset_WallCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6032db49-091d-49ee-b032-22da60bec2b3\tPset_WallCommon.AcousticRating[Type]\tTEXT\t\t495\t1\tIfcLabel\t1\nPARAM\tc9a5b4cc-df42-4481-8ab6-2989fe26b252\tPset_WallCommon.Combustible[Type]\tYESNO\t\t495\t1\tIfcBoolean\t1\nPARAM\t14517782-2a4e-4598-a733-fef21b9fd503\tPset_WallCommon.Compartmentation[Type]\tYESNO\t\t495\t1\tIfcBoolean\t1\nPARAM\tfc00d7ee-19b1-45b9-b573-556e7fff4bf5\tPset_WallCommon.ExtendToStructure[Type]\tYESNO\t\t495\t1\tIfcBoolean\t1\nPARAM\tf16e10c1-b9c0-4bd5-997c-c28aa3d135f9\tPset_WallCommon.FireRating[Type]\tTEXT\t\t495\t1\tIfcLabel\t1\nPARAM\t57dab8a3-4fcd-44b7-a5a1-e7d1e63daed5\tPset_WallCommon.IsExternal[Type]\tYESNO\t\t495\t1\tIfcBoolean\t1\nPARAM\t7887ce09-6aed-4ed2-92bc-a09c23d75778\tPset_WallCommon.LoadBearing[Type]\tYESNO\t\t495\t1\tIfcBoolean\t1\nPARAM\t0bc15fbf-7e7a-4aa3-ad8b-13b517f5e0c9\tPset_WallCommon.Reference[Type]\tTEXT\t\t495\t1\tIfcIdentifier\t1\nPARAM\t4f74eb9c-bb88-434a-98fd-4f40795fe1c5\tPset_WallCommon.Status[Type]\tTEXT\t\t495\t1\tPEnum_ElementStatus\t1\nPARAM\tc3879554-d4ce-4cc8-b660-1203e2d0e130\tPset_WallCommon.SurfaceSpreadOfFlame[Type]\tTEXT\t\t495\t1\tIfcLabel\t1\nPARAM\t4947e8d3-8e60-45d2-9120-7a7eb1eb358a\tPset_WallCommon.ThermalTransmittance[Type]\tNUMBER\t\t495\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t496\tPset_Warranty\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t98d6eef0-90cf-46ce-bea2-eb82560f79fd\tPset_Warranty.Exclusions[Type]\tTEXT\t\t496\t1\tIfcText\t1\nPARAM\te7b76427-1d8e-4447-bc1f-293ae4fbd6cd\tPset_Warranty.IsExtendedWarranty[Type]\tYESNO\t\t496\t1\tIfcBoolean\t1\nPARAM\te6d99dd2-5c4b-4ccd-b9c0-29db19922c07\tPset_Warranty.PointOfContact[Type]\tTEXT\t\t496\t1\tIfcLabel\t1\nPARAM\t9e8fbba6-4a01-4399-858c-3b31d75cf944\tPset_Warranty.WarrantyContent[Type]\tTEXT\t\t496\t1\tIfcText\t1\nPARAM\t4a6759c8-0120-4bad-9d5f-63be77f4ffd0\tPset_Warranty.WarrantyEndDate[Type]\tTEXT\t\t496\t1\tIfcDate\t1\nPARAM\tc5d31748-91e5-4df1-8af7-535ed7160181\tPset_Warranty.WarrantyIdentifier[Type]\tTEXT\t\t496\t1\tIfcIdentifier\t1\nPARAM\tc11c9cd6-a788-4061-9e1c-889741a3083d\tPset_Warranty.WarrantyPeriod[Type]\tTEXT\t\t496\t1\tIfcDuration\t1\nPARAM\t4beb7383-f94f-426d-be8c-8209a7f0472c\tPset_Warranty.WarrantyStartDate[Type]\tTEXT\t\t496\t1\tIfcDate\t1\n#\nGROUP\t497\tPset_WasteTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta07886fc-f62b-48d4-bf8c-427b899fa65f\tPset_WasteTerminalTypeCommon.Reference[Type]\tTEXT\t\t497\t1\tIfcIdentifier\t1\nPARAM\ta47f3fe9-535e-4d37-bb72-1952f126fda1\tPset_WasteTerminalTypeCommon.Status[Type]\tTEXT\t\t497\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t498\tPset_WasteTerminalTypeFloorTrap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t97f964be-2baf-4de5-8b09-f454b69d0e0d\tPset_WasteTerminalTypeFloorTrap.BodyMaterial[Type]\tMULTILINETEXT\t\t498\t1\tIfcMaterial\t1\nPARAM\t884134fb-edc2-4daa-900e-98ef9818437d\tPset_WasteTerminalTypeFloorTrap.CoverLength[Type]\tLENGTH\t\t498\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td5bb51d9-3968-4b8d-b4cd-d33e9b5daf80\tPset_WasteTerminalTypeFloorTrap.CoverMaterial[Type]\tMULTILINETEXT\t\t498\t1\tIfcMaterialDefinition\t1\nPARAM\t54bf4635-9c0e-4f7e-934d-7f65d7c72452\tPset_WasteTerminalTypeFloorTrap.CoverWidth[Type]\tLENGTH\t\t498\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb7ed7fca-9076-41c8-b817-9afd6fa6c7b6\tPset_WasteTerminalTypeFloorTrap.HasStrainer[Type]\tYESNO\t\t498\t1\tIfcBoolean\t1\nPARAM\t279e6093-fd23-472e-870b-0c2c2f34bd47\tPset_WasteTerminalTypeFloorTrap.InletConnectionSize[Type]\tLENGTH\t\t498\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5e345885-74bb-44a7-813e-e2aab00c495f\tPset_WasteTerminalTypeFloorTrap.InletPatternType[Type]\tTEXT\t\t498\t1\tPEnum_InletPatternType\t1\nPARAM\t86474b86-1bde-4523-b346-b5b1d659f072\tPset_WasteTerminalTypeFloorTrap.IsForSullageWater[Type]\tYESNO\t\t498\t1\tIfcBoolean\t1\nPARAM\t2c830bc4-3898-45b4-af4c-48d61d6fd831\tPset_WasteTerminalTypeFloorTrap.NominalBodyDepth[Type]\tLENGTH\t\t498\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t403108d4-b79a-4e58-88d1-9c707196bc3b\tPset_WasteTerminalTypeFloorTrap.NominalBodyLength[Type]\tLENGTH\t\t498\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6c48e5a3-5167-4b8c-87e5-f27cc7ef1907\tPset_WasteTerminalTypeFloorTrap.NominalBodyWidth[Type]\tLENGTH\t\t498\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf9a92629-de19-4ab0-a4b2-a0c884481bd2\tPset_WasteTerminalTypeFloorTrap.OutletConnectionSize[Type]\tLENGTH\t\t498\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3675c4ad-d082-429d-90cd-c3a91755c28f\tPset_WasteTerminalTypeFloorTrap.SpilloverLevel[Type]\tLENGTH\t\t498\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t427bd507-e04b-46b7-8f53-6bfc424b3ac4\tPset_WasteTerminalTypeFloorTrap.TrapType[Type]\tTEXT\t\t498\t1\tPEnum_TrapType\t1\n#\nGROUP\t499\tPset_WasteTerminalTypeFloorWaste\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t78e3cdb5-0945-4081-ae84-b27c9072634a\tPset_WasteTerminalTypeFloorWaste.BodyMaterial[Type]\tMULTILINETEXT\t\t499\t1\tIfcMaterial\t1\nPARAM\t2e5f97b5-76d1-45ce-b495-f2a677206222\tPset_WasteTerminalTypeFloorWaste.CoverLength[Type]\tLENGTH\t\t499\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t64b0ed68-7713-43ea-a775-3767c8c65147\tPset_WasteTerminalTypeFloorWaste.CoverMaterial[Type]\tMULTILINETEXT\t\t499\t1\tIfcMaterial\t1\nPARAM\t027c61f4-8466-4978-8538-5d3efd23c27a\tPset_WasteTerminalTypeFloorWaste.CoverWidth[Type]\tLENGTH\t\t499\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t10169173-2aa2-40b9-a317-9411ff4bf6aa\tPset_WasteTerminalTypeFloorWaste.NominalBodyDepth[Type]\tLENGTH\t\t499\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf148866f-3763-41c4-b26a-3992758be98c\tPset_WasteTerminalTypeFloorWaste.NominalBodyLength[Type]\tLENGTH\t\t499\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf2649f03-75f8-4036-a7aa-ad750fb56bb0\tPset_WasteTerminalTypeFloorWaste.NominalBodyWidth[Type]\tLENGTH\t\t499\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t79e7e1ae-9ef0-4c9f-9a55-eba936311966\tPset_WasteTerminalTypeFloorWaste.OutletConnectionSize[Type]\tLENGTH\t\t499\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t500\tPset_WasteTerminalTypeGreaseInterceptor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t93266eec-39f9-47f3-82da-e74c79604071\tPset_WasteTerminalTypeGreaseInterceptor.BodyDepth[Type]\tLENGTH\t\t500\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdfb98912-818b-4263-b207-6e0a0692fbce\tPset_WasteTerminalTypeGreaseInterceptor.CoverLength[Type]\tLENGTH\t\t500\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t60b0527c-ba28-4d7d-86e5-b97bb249f999\tPset_WasteTerminalTypeGreaseInterceptor.CoverMaterial[Type]\tMULTILINETEXT\t\t500\t1\tIfcMaterial\t1\nPARAM\t968308c1-a2f9-4c70-a929-14775bd6feef\tPset_WasteTerminalTypeGreaseInterceptor.CoverWidth[Type]\tLENGTH\t\t500\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb4c01133-7c07-4ebb-82ad-4d9c2a3f9d58\tPset_WasteTerminalTypeGreaseInterceptor.InletConnectionSize[Type]\tLENGTH\t\t500\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t686e227e-b7ff-4938-8f6c-39950965162a\tPset_WasteTerminalTypeGreaseInterceptor.NominalBodyLength[Type]\tLENGTH\t\t500\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t07b49116-404d-431e-954e-1cd4129a7983\tPset_WasteTerminalTypeGreaseInterceptor.NominalBodyMaterial[Type]\tMULTILINETEXT\t\t500\t1\tIfcMaterial\t1\nPARAM\t07b8fb22-8150-4807-b5dc-c1609b38759f\tPset_WasteTerminalTypeGreaseInterceptor.NominalBodyWidth[Type]\tLENGTH\t\t500\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta4dc285d-ff2f-47d0-aca2-5219a31076ad\tPset_WasteTerminalTypeGreaseInterceptor.OutletConnectionSize[Type]\tLENGTH\t\t500\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t30d11311-6bf2-40ef-95bf-88fcf75c29c6\tPset_WasteTerminalTypeGreaseInterceptor.StrainerDepth[Type]\tLENGTH\t\t500\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0a62dda9-d51e-418f-8593-b791a301660a\tPset_WasteTerminalTypeGreaseInterceptor.StrainerDiameter[Type]\tLENGTH\t\t500\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfcd807e2-1ae6-425c-8097-7b6af21d4ed8\tPset_WasteTerminalTypeGreaseInterceptor.StrainerMaterial[Type]\tMULTILINETEXT\t\t500\t1\tIfcMaterial\t1\n#\nGROUP\t501\tPset_WasteTerminalTypeGullySump\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0e5613cc-2954-4196-a7d2-0fb4294c2419\tPset_WasteTerminalTypeGullySump.BackInletPatternType[Type]\tTEXT\t\t501\t1\tPEnum_BackInletPatternType\t1\nPARAM\t5a115109-d568-45d3-8561-e562335c3f52\tPset_WasteTerminalTypeGullySump.CoverLength[Type]\tLENGTH\t\t501\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc9474fbe-ff11-44fb-b9d9-9c9f278ab1a7\tPset_WasteTerminalTypeGullySump.CoverMaterial[Type]\tMULTILINETEXT\t\t501\t1\tIfcMaterial\t1\nPARAM\t21c07854-da0a-4933-a5d4-50d08489cbd7\tPset_WasteTerminalTypeGullySump.CoverWidth[Type]\tLENGTH\t\t501\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6d45abed-66d6-4946-967f-024317f87d96\tPset_WasteTerminalTypeGullySump.GullyType[Type]\tTEXT\t\t501\t1\tPEnum_GullyType\t1\nPARAM\tf7eec290-c14c-4012-8490-9cc43d3a3de9\tPset_WasteTerminalTypeGullySump.InletConnectionSize[Type]\tLENGTH\t\t501\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t58366d4e-8da8-485d-be0d-775111923ceb\tPset_WasteTerminalTypeGullySump.NominalSumpDepth[Type]\tLENGTH\t\t501\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t05d5a71a-d7e5-42bb-8c0c-e4bf7ace2fc8\tPset_WasteTerminalTypeGullySump.NominalSumpLength[Type]\tLENGTH\t\t501\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t380d0ce0-2ecc-4f4f-ad49-b15d5d32b688\tPset_WasteTerminalTypeGullySump.NominalSumpWidth[Type]\tLENGTH\t\t501\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5d0174b0-f4ae-4301-b5bc-e26abb14b158\tPset_WasteTerminalTypeGullySump.OutletConnectionSize[Type]\tLENGTH\t\t501\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3365ff3b-57d0-483c-93f6-74d7d4216769\tPset_WasteTerminalTypeGullySump.SumpMaterial[Type]\tMULTILINETEXT\t\t501\t1\tIfcMaterial\t1\nPARAM\te633e28d-70f1-4b50-92d1-09d6d74e434b\tPset_WasteTerminalTypeGullySump.TrapType[Type]\tTEXT\t\t501\t1\tPEnum_TrapType\t1\n#\nGROUP\t502\tPset_WasteTerminalTypeGullyTrap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3ad975c0-5f53-41be-b78b-dc6acd97e388\tPset_WasteTerminalTypeGullyTrap.BackInletPatternType[Type]\tTEXT\t\t502\t1\tPEnum_BackInletPatternType\t1\nPARAM\t422d817f-4c17-4ea8-bd36-4f2716c9eb11\tPset_WasteTerminalTypeGullyTrap.BodyMaterial[Type]\tMULTILINETEXT\t\t502\t1\tIfcMaterial\t1\nPARAM\td3f881e2-3502-4d48-bd3b-faf465c77753\tPset_WasteTerminalTypeGullyTrap.CoverLength[Type]\tLENGTH\t\t502\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2a2d3f89-46f6-4513-bf62-2cb262462226\tPset_WasteTerminalTypeGullyTrap.CoverMaterial[Type]\tMULTILINETEXT\t\t502\t1\tIfcMaterial\t1\nPARAM\t3960fae8-b013-49cf-8f6b-e0ccafe24e10\tPset_WasteTerminalTypeGullyTrap.CoverWidth[Type]\tLENGTH\t\t502\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t65dfe1bc-23e2-4c93-ac71-3c43dd5e3397\tPset_WasteTerminalTypeGullyTrap.GullyType[Type]\tTEXT\t\t502\t1\tPEnum_GullyType\t1\nPARAM\tf9f7595c-bf94-46a5-8a1b-6323ad1fbfb6\tPset_WasteTerminalTypeGullyTrap.HasStrainer[Type]\tYESNO\t\t502\t1\tIfcBoolean\t1\nPARAM\t35352cd9-dd28-4203-9396-e1ffc9cca2d9\tPset_WasteTerminalTypeGullyTrap.InletConnectionSize[Type]\tLENGTH\t\t502\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t340de26a-1bee-4495-9837-f444a623ee5c\tPset_WasteTerminalTypeGullyTrap.NominalBodyDepth[Type]\tLENGTH\t\t502\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te3d8b1e3-de86-4886-9e96-3f4b19133099\tPset_WasteTerminalTypeGullyTrap.NominalBodyLength[Type]\tLENGTH\t\t502\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdf2aa535-9435-4f3e-8ac9-54d918553c96\tPset_WasteTerminalTypeGullyTrap.NominalBodyWidth[Type]\tLENGTH\t\t502\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3d74b553-97a5-4c9e-92d9-ef88c98684df\tPset_WasteTerminalTypeGullyTrap.OutletConnectionSize[Type]\tLENGTH\t\t502\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td7aa0396-215f-4ba3-b93d-a85994dd01ea\tPset_WasteTerminalTypeGullyTrap.TrapType[Type]\tTEXT\t\t502\t1\tPEnum_TrapType\t1\n#\nGROUP\t503\tPset_WasteTerminalTypeOilInterceptor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t355c6874-5820-4acf-8c87-4ee410693faf\tPset_WasteTerminalTypeOilInterceptor.BodyMaterial[Type]\tMULTILINETEXT\t\t503\t1\tIfcMaterial\t1\nPARAM\t1cf197d4-5b45-42e2-8939-c7e11d96280c\tPset_WasteTerminalTypeOilInterceptor.CoverLength[Type]\tLENGTH\t\t503\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ted4cb1d8-4a70-4ee0-ac0a-ae4cee6e99e6\tPset_WasteTerminalTypeOilInterceptor.CoverMaterial[Type]\tMULTILINETEXT\t\t503\t1\tIfcMaterial\t1\nPARAM\tcfec22bf-a657-4265-b2fe-16ea4709c77d\tPset_WasteTerminalTypeOilInterceptor.CoverWidth[Type]\tLENGTH\t\t503\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tef9dc51f-06df-49ed-af4e-143515f9b18d\tPset_WasteTerminalTypeOilInterceptor.InletConnectionSize[Type]\tLENGTH\t\t503\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf334104b-7d54-4d4d-a125-8ee1f5341555\tPset_WasteTerminalTypeOilInterceptor.NominalBodyDepth[Type]\tLENGTH\t\t503\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3dbf09e4-0eec-43b1-aaac-312705af3c0f\tPset_WasteTerminalTypeOilInterceptor.NominalBodyLength[Type]\tLENGTH\t\t503\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4c0f2561-ba18-4fd9-ad6a-867adb3daac2\tPset_WasteTerminalTypeOilInterceptor.NominalBodyWidth[Type]\tLENGTH\t\t503\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t451c7564-97df-40b4-b2d2-bd42aa3f2d03\tPset_WasteTerminalTypeOilInterceptor.OutletConnectionSize[Type]\tLENGTH\t\t503\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t504\tPset_WasteTerminalTypePetrolInterceptor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td03186c9-d3b4-4016-82be-efe177e01074\tPset_WasteTerminalTypePetrolInterceptor.BodyMaterial[Type]\tMULTILINETEXT\t\t504\t1\tIfcMaterial\t1\nPARAM\t13d94af1-a70a-49d3-98e3-8d01f7e7443d\tPset_WasteTerminalTypePetrolInterceptor.CoverLength[Type]\tLENGTH\t\t504\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t64e79ad5-c278-4513-81c4-84822995decd\tPset_WasteTerminalTypePetrolInterceptor.CoverMaterial[Type]\tMULTILINETEXT\t\t504\t1\tIfcMaterial\t1\nPARAM\t07d1a7c6-d3e1-4254-830c-3068c2fb93b1\tPset_WasteTerminalTypePetrolInterceptor.CoverWidth[Type]\tLENGTH\t\t504\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1fd56e01-eecc-4da3-a42a-957cabbb3ec9\tPset_WasteTerminalTypePetrolInterceptor.InletConnectionSize[Type]\tLENGTH\t\t504\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t944be783-a198-4c07-8d3b-7713b33e4cc7\tPset_WasteTerminalTypePetrolInterceptor.NominalBodyDepth[Type]\tLENGTH\t\t504\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4f522f24-7e9c-42b2-bcac-bc25062300a7\tPset_WasteTerminalTypePetrolInterceptor.NominalBodyLength[Type]\tLENGTH\t\t504\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfcb1e1be-c5a4-45be-b1cb-2c5b6bb3fdbb\tPset_WasteTerminalTypePetrolInterceptor.NominalBodyWidth[Type]\tLENGTH\t\t504\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te6612a2f-df56-4e24-8acb-b51700b806ba\tPset_WasteTerminalTypePetrolInterceptor.OutletConnectionSize[Type]\tLENGTH\t\t504\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t93f4ff37-4be9-43a9-b02a-12ada57d5ad8\tPset_WasteTerminalTypePetrolInterceptor.VentilatingPipeSize[Type]\tLENGTH\t\t504\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t505\tPset_WasteTerminalTypeRoofDrain\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t740964ba-b405-44b6-baf4-9a327e3bfe3b\tPset_WasteTerminalTypeRoofDrain.BodyMaterial[Type]\tMULTILINETEXT\t\t505\t1\tIfcMaterial\t1\nPARAM\tb2bd2a45-2e66-46dc-abb2-e12a89843d2c\tPset_WasteTerminalTypeRoofDrain.CoverLength[Type]\tLENGTH\t\t505\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5157e5a1-6847-44c9-87b7-c39b72007361\tPset_WasteTerminalTypeRoofDrain.CoverMaterial[Type]\tMULTILINETEXT\t\t505\t1\tIfcMaterial\t1\nPARAM\tf62c5513-8c23-4488-97b0-b8db8fddde4a\tPset_WasteTerminalTypeRoofDrain.CoverWidth[Type]\tLENGTH\t\t505\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te627563b-1dee-483e-951d-1c229a04ea27\tPset_WasteTerminalTypeRoofDrain.NominalBodyDepth[Type]\tLENGTH\t\t505\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5303690d-5e95-4059-8ad7-597f22f77f78\tPset_WasteTerminalTypeRoofDrain.NominalBodyLength[Type]\tLENGTH\t\t505\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td0fc4d66-ba4d-419f-b509-7b5c11964619\tPset_WasteTerminalTypeRoofDrain.NominalBodyWidth[Type]\tLENGTH\t\t505\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td7e713a5-0e1a-4ceb-a4fe-c15ae1bd71b6\tPset_WasteTerminalTypeRoofDrain.OutletConnectionSize[Type]\tLENGTH\t\t505\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t506\tPset_WasteTerminalTypeWasteDisposalUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teb56bc06-161e-49c6-be29-68c3024fcc9f\tPset_WasteTerminalTypeWasteDisposalUnit.DrainConnectionSize[Type]\tLENGTH\t\t506\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t39345eb9-2715-451a-9277-02397f6af23f\tPset_WasteTerminalTypeWasteDisposalUnit.NominalDepth[Type]\tLENGTH\t\t506\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t902d0984-c9e1-46af-bbf0-d1d3c8d5bf61\tPset_WasteTerminalTypeWasteDisposalUnit.OutletConnectionSize[Type]\tLENGTH\t\t506\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t507\tPset_WasteTerminalTypeWasteTrap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t414433fb-3fca-4e98-89c0-f9e3fb429546\tPset_WasteTerminalTypeWasteTrap.InletConnectionSize[Type]\tLENGTH\t\t507\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te96991a2-c412-4f75-b2a4-dacdf3bf4dff\tPset_WasteTerminalTypeWasteTrap.OutletConnectionSize[Type]\tLENGTH\t\t507\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te13d7130-0a2d-456f-8aea-1a785bef1951\tPset_WasteTerminalTypeWasteTrap.WasteTrapType[Type]\tTEXT\t\t507\t1\tPEnum_TrapType\t1\n#\nGROUP\t508\tPset_WindowCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf93d5c55-738f-49e0-8756-1a67cef18a90\tPset_WindowCommon.AcousticRating[Type]\tTEXT\t\t508\t1\tIfcLabel\t1\nPARAM\t92799cab-3d18-4856-8c7a-d3f1965cfa9d\tPset_WindowCommon.FireExit[Type]\tYESNO\t\t508\t1\tIfcBoolean\t1\nPARAM\t0f5cb688-4056-4359-8c1b-ec194deede70\tPset_WindowCommon.FireRating[Type]\tTEXT\t\t508\t1\tIfcLabel\t1\nPARAM\t8d7b502d-2952-4664-ba10-fa00514fc7d6\tPset_WindowCommon.GlazingAreaFraction[Type]\tNUMBER\t\t508\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t66593f9f-0336-45c1-be14-0c11e50b3780\tPset_WindowCommon.HasDrive[Type]\tYESNO\t\t508\t1\tIfcBoolean\t1\nPARAM\t0cb5b6f0-0ebf-4a23-b6aa-06d43483156e\tPset_WindowCommon.HasSillExternal[Type]\tYESNO\t\t508\t1\tIfcBoolean\t1\nPARAM\t14ea41d3-fec2-4f5b-83c3-dc05751eb3c4\tPset_WindowCommon.HasSillInternal[Type]\tYESNO\t\t508\t1\tIfcBoolean\t1\nPARAM\t13883ee2-0b55-4fc2-b987-a4c605029f86\tPset_WindowCommon.Infiltration[Type]\tNUMBER\t\t508\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t9b2a70f8-6edf-4111-8136-89ddb4500a38\tPset_WindowCommon.IsExternal[Type]\tYESNO\t\t508\t1\tIfcBoolean\t1\nPARAM\tc4d1355c-6049-45cd-9d4f-1afe347eaf96\tPset_WindowCommon.MechanicalLoadRating[Type]\tTEXT\t\t508\t1\tIfcLabel\t1\nPARAM\t41381f47-4001-4629-9c83-2cfe3bebdd77\tPset_WindowCommon.Reference[Type]\tTEXT\t\t508\t1\tIfcIdentifier\t1\nPARAM\taf01d4a7-90f6-458d-aa52-7cafd2e884c1\tPset_WindowCommon.SecurityRating[Type]\tTEXT\t\t508\t1\tIfcLabel\t1\nPARAM\tdea6f81d-08f9-42f8-ac0a-2070b85aac58\tPset_WindowCommon.SmokeStop[Type]\tYESNO\t\t508\t1\tIfcBoolean\t1\nPARAM\ta1e6e9bc-04a9-46a7-9f7c-02bcd9f4d246\tPset_WindowCommon.Status[Type]\tTEXT\t\t508\t1\tPEnum_ElementStatus\t1\nPARAM\tcc2d0623-8481-4028-b624-15e20ed966a8\tPset_WindowCommon.ThermalTransmittance[Type]\tNUMBER\t\t508\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t9a3ee47c-5356-4e05-b5cd-b0265f6479e2\tPset_WindowCommon.WaterTightnessRating[Type]\tTEXT\t\t508\t1\tIfcLabel\t1\nPARAM\t7bf3108b-d4b2-4960-b212-7520632dbaeb\tPset_WindowCommon.WindLoadRating[Type]\tTEXT\t\t508\t1\tIfcLabel\t1\n#\nGROUP\t509\tPset_WorkControlCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t99b1fec3-7447-4bdc-9f56-37c8fe12b72b\tPset_WorkControlCommon.WorkDayDuration[Type]\tTEXT\t\t509\t1\tIfcDuration\t1\nPARAM\t7339e042-d2d0-4739-a12c-c84de83b236d\tPset_WorkControlCommon.WorkFinishTime[Type]\tTEXT\t\t509\t1\tIfcTime\t1\nPARAM\t847678b2-0bfd-4b56-9c2b-9ce7b130ad71\tPset_WorkControlCommon.WorkMonthDuration[Type]\tTEXT\t\t509\t1\tIfcDuration\t1\nPARAM\tf51f1696-fb9c-401b-92f8-766cc694d7b2\tPset_WorkControlCommon.WorkStartTime[Type]\tTEXT\t\t509\t1\tIfcTime\t1\nPARAM\t26cc20b3-f6c1-463a-821a-2cf9cb452ad1\tPset_WorkControlCommon.WorkWeekDuration[Type]\tTEXT\t\t509\t1\tIfcDuration\t1\n#\nGROUP\t510\tPset_ZoneCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td6bdee2b-2402-4dbb-8f3d-34136cc3ae28\tPset_ZoneCommon.Category[Type]\tTEXT\t\t510\t1\tIfcLabel\t1\nPARAM\t5d6f0dd4-4e04-45dc-8225-01897cfe475f\tPset_ZoneCommon.GrossAreaPlanned[Type]\tAREA\t\t510\t1\tIfcAreaMeasure\t1\nPARAM\t817bd6d5-fe9d-482a-a893-47a652267a3b\tPset_ZoneCommon.GrossPlannedArea[Type]\tAREA\t\t510\t1\tIfcAreaMeasure\t1\nPARAM\tec5f8776-af0f-42ad-962d-f6acb5cbd365\tPset_ZoneCommon.HandicapAccessible[Type]\tYESNO\t\t510\t1\tIfcBoolean\t1\nPARAM\t4ec7651c-7667-49d1-aae0-c17cf5e50ca0\tPset_ZoneCommon.IsExternal[Type]\tYESNO\t\t510\t1\tIfcBoolean\t1\nPARAM\t3491f68d-50b2-4be0-929e-28153efa024c\tPset_ZoneCommon.MechanicalVentilationRate[Type]\tINTEGER\t\t510\t1\tIfcCountMeasure\t1\nPARAM\tf2b6f085-0601-4790-95b8-b7a114e9a41f\tPset_ZoneCommon.NaturalVentilation[Type]\tYESNO\t\t510\t1\tIfcBoolean\t1\nPARAM\tf710f54e-9023-4c5c-aa3a-ed4dd7981ce0\tPset_ZoneCommon.NaturalVentilationRate[Type]\tINTEGER\t\t510\t1\tIfcCountMeasure\t1\nPARAM\t0ee43842-e825-4765-9488-66f9c0f25cdb\tPset_ZoneCommon.NetAreaPlanned[Type]\tAREA\t\t510\t1\tIfcAreaMeasure\t1\nPARAM\te572a7ef-eeeb-4a20-b1c3-460109f12e0c\tPset_ZoneCommon.NetPlannedArea[Type]\tAREA\t\t510\t1\tIfcAreaMeasure\t1\nPARAM\tc564cba0-d1aa-496e-a1c5-d489b84ab6a2\tPset_ZoneCommon.OccupancyNumber[Type]\tINTEGER\t\t510\t1\tIfcCountMeasure\t1\nPARAM\t91fad258-2b39-4241-bffe-f958533071d2\tPset_ZoneCommon.OccupancyType[Type]\tTEXT\t\t510\t1\tIfcLabel\t1\nPARAM\td63bb657-afa6-4e29-a0e7-e39bbe9591d7\tPset_ZoneCommon.PubliclyAccessible[Type]\tYESNO\t\t510\t1\tIfcBoolean\t1\nPARAM\t9955e9a6-8c85-44fd-bcfc-8cb6ed3999e5\tPset_ZoneCommon.Reference[Type]\tTEXT\t\t510\t1\tIfcIdentifier\t1\n#\nGROUP\t511\tQto_ActuatorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te0f5fb0f-a53d-46ec-b6ca-c752c8cc37de\tQto_ActuatorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t511\t1\tIfcMassMeasure\t1\n#\nGROUP\t512\tQto_AirTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1541f683-ab0e-4a19-9cd6-9b01db577d60\tQto_AirTerminalBaseQuantities.GrossWeight[Type]\tNUMBER\t\t512\t1\tIfcMassMeasure\t1\nPARAM\t37f31b12-c37d-470a-bc14-316b47935da4\tQto_AirTerminalBaseQuantities.Perimeter[Type]\tLENGTH\t\t512\t1\tIfcLengthMeasure\t1\nPARAM\t3de42cf9-b532-4c65-a9d6-3ce13c39dc4a\tQto_AirTerminalBaseQuantities.TotalSurfaceArea[Type]\tAREA\t\t512\t1\tIfcAreaMeasure\t1\n#\nGROUP\t513\tQto_AirTerminalBoxTypeBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t85e9c061-87b2-48bf-8eb5-9198a97ce3fb\tQto_AirTerminalBoxTypeBaseQuantities.GrossWeight[Type]\tNUMBER\t\t513\t1\tIfcMassMeasure\t1\n#\nGROUP\t514\tQto_AirToAirHeatRecoveryBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t36966766-e755-45fa-b896-8874611c7f25\tQto_AirToAirHeatRecoveryBaseQuantities.GrossWeight[Type]\tNUMBER\t\t514\t1\tIfcMassMeasure\t1\n#\nGROUP\t515\tQto_AlarmBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t052a9a3a-de19-41a4-a1e7-351f019d1416\tQto_AlarmBaseQuantities.GrossWeight[Type]\tNUMBER\t\t515\t1\tIfcMassMeasure\t1\n#\nGROUP\t516\tQto_AudioVisualApplianceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc9b11c46-82ef-4eb2-a440-c03993991391\tQto_AudioVisualApplianceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t516\t1\tIfcMassMeasure\t1\n#\nGROUP\t517\tQto_BeamBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t595de70b-d6cb-479a-b916-f6ab3d7edd16\tQto_BeamBaseQuantities.CrossSectionArea[Type]\tAREA\t\t517\t1\tIfcAreaMeasure\t1\nPARAM\tb2d5a84e-22f1-41e5-ad4d-14fe73a3bf4a\tQto_BeamBaseQuantities.GrossSurfaceArea[Type]\tAREA\t\t517\t1\tIfcAreaMeasure\t1\nPARAM\t13fcc76c-ab8a-46ef-8291-626e5c37241d\tQto_BeamBaseQuantities.GrossVolume[Type]\tVOLUME\t\t517\t1\tIfcVolumeMeasure\t1\nPARAM\t5885021d-3bf1-4fa5-9e8f-33b9a309345a\tQto_BeamBaseQuantities.GrossWeight[Type]\tNUMBER\t\t517\t1\tIfcMassMeasure\t1\nPARAM\t67d2da57-3536-4ef2-ba5a-d33179c4dc84\tQto_BeamBaseQuantities.Length[Type]\tLENGTH\t\t517\t1\tIfcLengthMeasure\t1\nPARAM\t3f025fa2-84c1-458b-8614-8dd17b3217a1\tQto_BeamBaseQuantities.NetSurfaceArea[Type]\tAREA\t\t517\t1\tIfcAreaMeasure\t1\nPARAM\taaab2082-1bff-42ae-94ec-f228e2a02127\tQto_BeamBaseQuantities.NetVolume[Type]\tVOLUME\t\t517\t1\tIfcVolumeMeasure\t1\nPARAM\t8d81f946-801d-4a1c-a6a9-7b0982ff60c1\tQto_BeamBaseQuantities.NetWeight[Type]\tNUMBER\t\t517\t1\tIfcMassMeasure\t1\nPARAM\t379b714d-8d7d-4547-8c2d-bb5506812e67\tQto_BeamBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t517\t1\tIfcAreaMeasure\t1\n#\nGROUP\t518\tQto_BoilerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6a255c17-bf2d-40e8-89e2-e807b1d0a762\tQto_BoilerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t518\t1\tIfcMassMeasure\t1\nPARAM\t0d136a80-1aa8-49e6-9d49-58b11e620fa2\tQto_BoilerBaseQuantities.NetWeight[Type]\tNUMBER\t\t518\t1\tIfcMassMeasure\t1\nPARAM\t70fc1c16-328b-44fe-a3c9-3ddea7116d57\tQto_BoilerBaseQuantities.TotalSurfaceArea[Type]\tAREA\t\t518\t1\tIfcAreaMeasure\t1\n#\nGROUP\t519\tQto_BuildingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t26040140-b537-45c2-b441-233178c639f7\tQto_BuildingBaseQuantities.EavesHeight[Type]\tLENGTH\t\t519\t1\tIfcLengthMeasure\t1\nPARAM\tc6aeecfc-f33b-4681-9733-4b0d5f257f38\tQto_BuildingBaseQuantities.FootprintArea[Type]\tAREA\t\t519\t1\tIfcAreaMeasure\t1\nPARAM\t2de00587-0057-4bf6-9057-16054741ce2d\tQto_BuildingBaseQuantities.GrossFloorArea[Type]\tAREA\t\t519\t1\tIfcAreaMeasure\t1\nPARAM\t487c6c75-6298-4cca-99bb-8019e3302ec7\tQto_BuildingBaseQuantities.GrossVolume[Type]\tVOLUME\t\t519\t1\tIfcVolumeMeasure\t1\nPARAM\t2e56bc8b-56f8-4293-a0e4-aa5778ea4421\tQto_BuildingBaseQuantities.Height[Type]\tLENGTH\t\t519\t1\tIfcLengthMeasure\t1\nPARAM\tb754333f-1cc7-4499-b150-52f474f0da92\tQto_BuildingBaseQuantities.NetFloorArea[Type]\tAREA\t\t519\t1\tIfcAreaMeasure\t1\nPARAM\t6322d776-637e-47a8-9e90-8920d8687b69\tQto_BuildingBaseQuantities.NetVolume[Type]\tVOLUME\t\t519\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t520\tQto_BuildingElementProxyQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7ef9b8da-44fd-462a-8fb2-e1c7edab441c\tQto_BuildingElementProxyQuantities.NetSurfaceArea[Type]\tAREA\t\t520\t1\tIfcAreaMeasure\t1\nPARAM\t42e3720b-ed21-4b81-8dab-da55ea64f1f6\tQto_BuildingElementProxyQuantities.NetVolume[Type]\tVOLUME\t\t520\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t521\tQto_BuildingStoreyBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t30c2ab71-cd0b-41de-b651-83b212b579a6\tQto_BuildingStoreyBaseQuantities.GrossFloorArea[Type]\tAREA\t\t521\t1\tIfcAreaMeasure\t1\nPARAM\t8374032c-c9c5-4a02-8d53-887b25dff82a\tQto_BuildingStoreyBaseQuantities.GrossHeight[Type]\tLENGTH\t\t521\t1\tIfcLengthMeasure\t1\nPARAM\t8f8681bc-a75a-4af5-a784-fe77657b094e\tQto_BuildingStoreyBaseQuantities.GrossPerimeter[Type]\tLENGTH\t\t521\t1\tIfcLengthMeasure\t1\nPARAM\t29c5440b-0576-401c-96fb-e7065664e39f\tQto_BuildingStoreyBaseQuantities.GrossVolume[Type]\tVOLUME\t\t521\t1\tIfcVolumeMeasure\t1\nPARAM\t4e474f53-db7e-49bd-bd61-e77bdd87fad5\tQto_BuildingStoreyBaseQuantities.NetFloorArea[Type]\tAREA\t\t521\t1\tIfcAreaMeasure\t1\nPARAM\t18b145f1-d057-47c9-acc5-8ea91868be1b\tQto_BuildingStoreyBaseQuantities.NetHeigtht[Type]\tLENGTH\t\t521\t1\tIfcLengthMeasure\t1\nPARAM\t3d8c25d1-b1ef-4a70-a5fb-02c77882afae\tQto_BuildingStoreyBaseQuantities.NetVolume[Type]\tVOLUME\t\t521\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t522\tQto_BurnerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e19e202-74f3-4929-921e-6546603741a3\tQto_BurnerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t522\t1\tIfcMassMeasure\t1\n#\nGROUP\t523\tQto_CableCarrierFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta4a657cd-5e38-46d6-9e66-03ea72688beb\tQto_CableCarrierFittingBaseQuantities.GrossWeight[Type]\tNUMBER\t\t523\t1\tIfcMassMeasure\t1\n#\nGROUP\t524\tQto_CableCarrierSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t351bc5ed-5c98-4029-81a5-9230f1e22263\tQto_CableCarrierSegmentBaseQuantities.CrossSectionArea[Type]\tAREA\t\t524\t1\tIfcAreaMeasure\t1\nPARAM\t0898c6ca-d2ea-46d2-94e9-9d951f3fbecf\tQto_CableCarrierSegmentBaseQuantities.GrossWeight[Type]\tNUMBER\t\t524\t1\tIfcMassMeasure\t1\nPARAM\t8d255d6e-27e0-4ea4-872e-be6937324e67\tQto_CableCarrierSegmentBaseQuantities.Length[Type]\tLENGTH\t\t524\t1\tIfcLengthMeasure\t1\nPARAM\t46d5805d-9120-433c-8acf-f53c6e2d1f99\tQto_CableCarrierSegmentBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t524\t1\tIfcAreaMeasure\t1\n#\nGROUP\t525\tQto_CableFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t32ae27f9-d705-4007-b678-505a2877a81e\tQto_CableFittingBaseQuantities.GrossWeight[Type]\tNUMBER\t\t525\t1\tIfcMassMeasure\t1\n#\nGROUP\t526\tQto_CableSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7ac79e0c-715c-4177-9d8b-61dda40a44f8\tQto_CableSegmentBaseQuantities.CrossSectionArea[Type]\tAREA\t\t526\t1\tIfcAreaMeasure\t1\nPARAM\ta7e45a96-8b00-4a8c-b6bc-f5055773894c\tQto_CableSegmentBaseQuantities.GrossWeight[Type]\tNUMBER\t\t526\t1\tIfcMassMeasure\t1\nPARAM\t0346c05f-980e-4ea5-8979-ef15fb8779a9\tQto_CableSegmentBaseQuantities.Length[Type]\tLENGTH\t\t526\t1\tIfcLengthMeasure\t1\nPARAM\t49aaae5d-330d-4154-ba61-df5374ef8fc5\tQto_CableSegmentBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t526\t1\tIfcAreaMeasure\t1\n#\nGROUP\t527\tQto_ChillerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbbf2de88-f490-432d-84c6-b65ab801c60d\tQto_ChillerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t527\t1\tIfcMassMeasure\t1\n#\nGROUP\t528\tQto_ChimneyBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4b18ddd1-d072-4b49-843a-4fa9d747a519\tQto_ChimneyBaseQuantities.Length[Type]\tLENGTH\t\t528\t1\tIfcLengthMeasure\t1\n#\nGROUP\t529\tQto_CoilBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0c41e537-fec1-4471-879f-dc5429bd920e\tQto_CoilBaseQuantities.GrossWeight[Type]\tNUMBER\t\t529\t1\tIfcMassMeasure\t1\n#\nGROUP\t530\tQto_ColumnBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t77f2fb92-cd25-484a-a843-0a815ec5d41b\tQto_ColumnBaseQuantities.CrossSectionArea[Type]\tAREA\t\t530\t1\tIfcAreaMeasure\t1\nPARAM\t28ad6865-8835-4458-bb29-55bfd67768f5\tQto_ColumnBaseQuantities.GrossSurfaceArea[Type]\tAREA\t\t530\t1\tIfcAreaMeasure\t1\nPARAM\t2000d329-960f-4c65-9b9a-9cb412b73c27\tQto_ColumnBaseQuantities.GrossVolume[Type]\tVOLUME\t\t530\t1\tIfcVolumeMeasure\t1\nPARAM\t9171d0f1-f3ce-45ee-82ab-f19be545f1ed\tQto_ColumnBaseQuantities.GrossWeight[Type]\tNUMBER\t\t530\t1\tIfcMassMeasure\t1\nPARAM\t3387907c-77ad-4c8d-aea4-1174baa2c251\tQto_ColumnBaseQuantities.Length[Type]\tLENGTH\t\t530\t1\tIfcLengthMeasure\t1\nPARAM\t527f0f1b-a218-4fd3-8cb3-fc3b795c599a\tQto_ColumnBaseQuantities.NetSurfaceArea[Type]\tAREA\t\t530\t1\tIfcAreaMeasure\t1\nPARAM\t9be931b8-812c-4c68-84d1-b1ec3081b8ab\tQto_ColumnBaseQuantities.NetVolume[Type]\tVOLUME\t\t530\t1\tIfcVolumeMeasure\t1\nPARAM\t7140bd5f-9661-4c1d-872d-6e3a64d95291\tQto_ColumnBaseQuantities.NetWeight[Type]\tNUMBER\t\t530\t1\tIfcMassMeasure\t1\nPARAM\tb08a23e1-dc0f-447b-9986-871dda670202\tQto_ColumnBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t530\t1\tIfcAreaMeasure\t1\n#\nGROUP\t531\tQto_CommunicationsApplianceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t10658301-38fc-4927-a18e-65d39dcc9216\tQto_CommunicationsApplianceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t531\t1\tIfcMassMeasure\t1\n#\nGROUP\t532\tQto_CompressorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td422b065-2221-4ed0-8620-2f47b480a30f\tQto_CompressorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t532\t1\tIfcMassMeasure\t1\n#\nGROUP\t533\tQto_CondenserBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t63390dd5-6817-4b5f-b029-708e897b78c1\tQto_CondenserBaseQuantities.GrossWeight[Type]\tNUMBER\t\t533\t1\tIfcMassMeasure\t1\n#\nGROUP\t534\tQto_ConstructionEquipmentResourceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfd8b8adc-b072-4f22-9923-09147ff5039d\tQto_ConstructionEquipmentResourceBaseQuantities.OperatingTime[Type]\tNUMBER\t\t534\t1\tIfcTimeMeasure\t1\nPARAM\te7529dbf-30ed-48a7-a88c-07f08e60d039\tQto_ConstructionEquipmentResourceBaseQuantities.UsageTime[Type]\tNUMBER\t\t534\t1\tIfcTimeMeasure\t1\n#\nGROUP\t535\tQto_ConstructionMaterialResourceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0e296676-c3c5-4cf3-9c9a-7cdeaaf45dc3\tQto_ConstructionMaterialResourceBaseQuantities.GrossVolume[Type]\tVOLUME\t\t535\t1\tIfcVolumeMeasure\t1\nPARAM\ta2e35cf1-8756-49bd-bd8e-1a3f862bf369\tQto_ConstructionMaterialResourceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t535\t1\tIfcMassMeasure\t1\nPARAM\tc5c4795a-1e1d-4705-af25-310b8d695c6c\tQto_ConstructionMaterialResourceBaseQuantities.NetVolume[Type]\tVOLUME\t\t535\t1\tIfcVolumeMeasure\t1\nPARAM\t8293e450-8adf-4f4a-a968-fcfe4105773b\tQto_ConstructionMaterialResourceBaseQuantities.NetWeight[Type]\tNUMBER\t\t535\t1\tIfcMassMeasure\t1\n#\nGROUP\t536\tQto_ControllerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t866e4cb4-bf14-4c3e-9d1c-a163fe1d4a0c\tQto_ControllerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t536\t1\tIfcMassMeasure\t1\n#\nGROUP\t537\tQto_CooledBeamBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t176eb97d-ccf6-46b1-9675-8df511d0e3fc\tQto_CooledBeamBaseQuantities.GrossWeight[Type]\tNUMBER\t\t537\t1\tIfcMassMeasure\t1\n#\nGROUP\t538\tQto_CoolingTowerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0600155b-99bf-4a91-ba35-18eef52fdee2\tQto_CoolingTowerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t538\t1\tIfcMassMeasure\t1\n#\nGROUP\t539\tQto_CoveringBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t740d7401-e075-46f4-b67b-d2a35462eef3\tQto_CoveringBaseQuantities.GrossArea[Type]\tAREA\t\t539\t1\tIfcAreaMeasure\t1\nPARAM\t6fcad777-f8d8-4393-a132-a2cbd1cdd52b\tQto_CoveringBaseQuantities.NetArea[Type]\tAREA\t\t539\t1\tIfcAreaMeasure\t1\nPARAM\t41b41198-9e99-44b4-9c5c-458173348869\tQto_CoveringBaseQuantities.Width[Type]\tLENGTH\t\t539\t1\tIfcLengthMeasure\t1\n#\nGROUP\t540\tQto_CurtainWallQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t956c0770-acc9-43bf-9826-148d99ac537b\tQto_CurtainWallQuantities.GrossSideArea[Type]\tAREA\t\t540\t1\tIfcAreaMeasure\t1\nPARAM\t7ee57f54-8f4d-49b3-ab6a-d3c4ae411092\tQto_CurtainWallQuantities.Height[Type]\tLENGTH\t\t540\t1\tIfcLengthMeasure\t1\nPARAM\t35b39d7a-7cdd-494a-a1cf-94cc93f709cc\tQto_CurtainWallQuantities.Length[Type]\tLENGTH\t\t540\t1\tIfcLengthMeasure\t1\nPARAM\ta1579472-ea90-4cf5-a9a1-dea0c1c9cfbc\tQto_CurtainWallQuantities.NetSideArea[Type]\tAREA\t\t540\t1\tIfcAreaMeasure\t1\nPARAM\t4e34ba08-cdf9-41dd-be60-63ac4411d4a7\tQto_CurtainWallQuantities.Width[Type]\tLENGTH\t\t540\t1\tIfcLengthMeasure\t1\n#\nGROUP\t541\tQto_DamperBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0df0734b-e996-4685-9b66-7b0f67c5b81a\tQto_DamperBaseQuantities.GrossWeight[Type]\tNUMBER\t\t541\t1\tIfcMassMeasure\t1\n#\nGROUP\t542\tQto_DistributionChamberElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3c00c51d-fe3b-42c7-82a5-c814e3af1fb7\tQto_DistributionChamberElementBaseQuantities.GrossSurfaceArea[Type]\tAREA\t\t542\t1\tIfcAreaMeasure\t1\nPARAM\tf94f0a6a-f94b-45d3-9726-184947618328\tQto_DistributionChamberElementBaseQuantities.GrossVolume[Type]\tVOLUME\t\t542\t1\tIfcVolumeMeasure\t1\nPARAM\t5441339e-4fce-480c-bb05-a8aca21f3ba5\tQto_DistributionChamberElementBaseQuantities.NetSurfaceArea[Type]\tAREA\t\t542\t1\tIfcAreaMeasure\t1\nPARAM\t2bcf6fae-a7b7-45a9-9180-db1390ec8b94\tQto_DistributionChamberElementBaseQuantities.NetVolume[Type]\tVOLUME\t\t542\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t543\tQto_DoorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taf0e927d-11ab-41d6-a85a-98a013fe9a01\tQto_DoorBaseQuantities.Area[Type]\tAREA\t\t543\t1\tIfcAreaMeasure\t1\nPARAM\t9e5bf6ea-1aeb-4900-a8b5-229c03b5db95\tQto_DoorBaseQuantities.Height[Type]\tLENGTH\t\t543\t1\tIfcLengthMeasure\t1\nPARAM\t422f0c46-7f39-48f3-a764-90778f07498d\tQto_DoorBaseQuantities.Perimeter[Type]\tLENGTH\t\t543\t1\tIfcLengthMeasure\t1\nPARAM\t87286b0d-258d-4b82-9b5a-8f98fea4e24b\tQto_DoorBaseQuantities.Width[Type]\tLENGTH\t\t543\t1\tIfcLengthMeasure\t1\n#\nGROUP\t544\tQto_DuctFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t00ee2dc7-3902-49cc-81d5-e169f48c30b5\tQto_DuctFittingBaseQuantities.GrossCrossSectionArea[Type]\tAREA\t\t544\t1\tIfcAreaMeasure\t1\nPARAM\ta0aee241-300b-4514-bf02-634cff3ef12f\tQto_DuctFittingBaseQuantities.GrossWeight[Type]\tNUMBER\t\t544\t1\tIfcMassMeasure\t1\nPARAM\tc7ebd4f0-ce82-41cf-a811-e25835141910\tQto_DuctFittingBaseQuantities.Length[Type]\tLENGTH\t\t544\t1\tIfcLengthMeasure\t1\nPARAM\tdd84260f-ace5-49b0-a8da-6c0aedb93c35\tQto_DuctFittingBaseQuantities.NetCrossSectionArea[Type]\tAREA\t\t544\t1\tIfcAreaMeasure\t1\nPARAM\t6f0ce78f-7679-4fbb-966c-31e144e67f0a\tQto_DuctFittingBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t544\t1\tIfcAreaMeasure\t1\n#\nGROUP\t545\tQto_DuctSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t87e6a1ec-8638-4d6e-8057-0dc7e79463d4\tQto_DuctSegmentBaseQuantities.GrossCrossSectionArea[Type]\tAREA\t\t545\t1\tIfcAreaMeasure\t1\nPARAM\te8d0d8cc-686d-492b-aff6-a0df0935549e\tQto_DuctSegmentBaseQuantities.GrossWeight[Type]\tNUMBER\t\t545\t1\tIfcMassMeasure\t1\nPARAM\t942783bf-f9bb-4f0c-8d4e-97f441965c8c\tQto_DuctSegmentBaseQuantities.Length[Type]\tLENGTH\t\t545\t1\tIfcLengthMeasure\t1\nPARAM\te3566aa6-05f2-4022-8c84-5dfffbb01607\tQto_DuctSegmentBaseQuantities.NetCrossSectionArea[Type]\tAREA\t\t545\t1\tIfcAreaMeasure\t1\nPARAM\t3c2a1a10-fdfc-430b-8488-b5b2a8bb4a51\tQto_DuctSegmentBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t545\t1\tIfcAreaMeasure\t1\n#\nGROUP\t546\tQto_DuctSilencerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td538a695-8f19-4327-986b-d95dcec2d8ce\tQto_DuctSilencerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t546\t1\tIfcMassMeasure\t1\n#\nGROUP\t547\tQto_ElectricApplianceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t78d16b6e-d314-4ab3-b164-c8aa5c1a73dd\tQto_ElectricApplianceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t547\t1\tIfcMassMeasure\t1\n#\nGROUP\t548\tQto_ElectricDistributionBoardBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbba73cb3-4b8d-47cf-9df3-8bf505319405\tQto_ElectricDistributionBoardBaseQuantities.GrossWeight[Type]\tNUMBER\t\t548\t1\tIfcMassMeasure\t1\nPARAM\ta93f5f96-c6e8-4b44-adcc-8e0025a1a14b\tQto_ElectricDistributionBoardBaseQuantities.NumberOfCircuits[Type]\tINTEGER\t\t548\t1\tIfcCountMeasure\t1\n#\nGROUP\t549\tQto_ElectricFlowStorageDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0f576f2b-91de-4ab9-9c53-a153f7781715\tQto_ElectricFlowStorageDeviceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t549\t1\tIfcMassMeasure\t1\n#\nGROUP\t550\tQto_ElectricGeneratorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t183d5a65-e77e-4803-9ff4-a9f73d201852\tQto_ElectricGeneratorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t550\t1\tIfcMassMeasure\t1\n#\nGROUP\t551\tQto_ElectricMotorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t139a7827-2551-4b75-a13c-3471855faa95\tQto_ElectricMotorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t551\t1\tIfcMassMeasure\t1\n#\nGROUP\t552\tQto_ElectricTimeControlBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t049df424-9d19-4bc5-8ef0-fca18cf04e61\tQto_ElectricTimeControlBaseQuantities.GrossWeight[Type]\tNUMBER\t\t552\t1\tIfcMassMeasure\t1\n#\nGROUP\t553\tQto_EvaporativeCoolerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t078724f1-74dc-474a-82db-1988c623c27e\tQto_EvaporativeCoolerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t553\t1\tIfcMassMeasure\t1\n#\nGROUP\t554\tQto_EvaporatorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf9927ccd-f3b3-4686-8bd9-b5b2df08ef35\tQto_EvaporatorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t554\t1\tIfcMassMeasure\t1\n#\nGROUP\t555\tQto_FanBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t42eeae10-d49d-4f03-a90c-5454db1d1a58\tQto_FanBaseQuantities.GrossWeight[Type]\tNUMBER\t\t555\t1\tIfcMassMeasure\t1\n#\nGROUP\t556\tQto_FilterBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdb56be5a-3105-4de1-b25c-9cca326abc43\tQto_FilterBaseQuantities.GrossWeight[Type]\tNUMBER\t\t556\t1\tIfcMassMeasure\t1\n#\nGROUP\t557\tQto_FireSuppressionTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf74d7f05-98ca-4aff-a038-f251a52dfae0\tQto_FireSuppressionTerminalBaseQuantities.GrossWeight[Type]\tNUMBER\t\t557\t1\tIfcMassMeasure\t1\n#\nGROUP\t558\tQto_FlowInstrumentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t575c9ad4-5ecc-4922-82f7-e5758fc77b34\tQto_FlowInstrumentBaseQuantities.GrossWeight[Type]\tNUMBER\t\t558\t1\tIfcMassMeasure\t1\n#\nGROUP\t559\tQto_FlowMeterBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te7e9ba9f-413e-4f9a-92f3-c086ac1da669\tQto_FlowMeterBaseQuantities.GrossWeight[Type]\tNUMBER\t\t559\t1\tIfcMassMeasure\t1\n#\nGROUP\t560\tQto_FootingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf186262f-8079-42c3-990e-54efeacfdc50\tQto_FootingBaseQuantities.CrossSectionArea[Type]\tAREA\t\t560\t1\tIfcAreaMeasure\t1\nPARAM\t08963d33-4815-4f54-80c3-47ee71203fae\tQto_FootingBaseQuantities.GrossSurfaceArea[Type]\tAREA\t\t560\t1\tIfcAreaMeasure\t1\nPARAM\tae77ed55-5acb-488c-be7a-9af780dfa868\tQto_FootingBaseQuantities.GrossVolume[Type]\tVOLUME\t\t560\t1\tIfcVolumeMeasure\t1\nPARAM\t8df451e6-de31-401f-bf4b-32801d6378db\tQto_FootingBaseQuantities.GrossWeight[Type]\tNUMBER\t\t560\t1\tIfcMassMeasure\t1\nPARAM\t49009742-9a07-41a5-bd31-a8b128cf050b\tQto_FootingBaseQuantities.Height[Type]\tLENGTH\t\t560\t1\tIfcLengthMeasure\t1\nPARAM\t73a68fbc-a85d-42b8-913e-69be37ad65f3\tQto_FootingBaseQuantities.Length[Type]\tLENGTH\t\t560\t1\tIfcLengthMeasure\t1\nPARAM\t4f736201-578a-4a71-ae6b-2882189b4699\tQto_FootingBaseQuantities.NetVolume[Type]\tVOLUME\t\t560\t1\tIfcVolumeMeasure\t1\nPARAM\t5b12ce44-19df-4432-a873-213299b805e7\tQto_FootingBaseQuantities.NetWeight[Type]\tNUMBER\t\t560\t1\tIfcMassMeasure\t1\nPARAM\t5cc8bcfd-e2c4-4111-8ea8-c521537f5866\tQto_FootingBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t560\t1\tIfcAreaMeasure\t1\nPARAM\t4da4b490-0532-459f-b386-5398384d098e\tQto_FootingBaseQuantities.Width[Type]\tLENGTH\t\t560\t1\tIfcLengthMeasure\t1\n#\nGROUP\t561\tQto_HeatExchangerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te5099f45-d827-4246-bba7-28dc5585fa5c\tQto_HeatExchangerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t561\t1\tIfcMassMeasure\t1\n#\nGROUP\t562\tQto_HumidifierBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc45b6178-d7c0-4216-8353-614a8fe5a979\tQto_HumidifierBaseQuantities.GrossWeight[Type]\tNUMBER\t\t562\t1\tIfcMassMeasure\t1\n#\nGROUP\t563\tQto_InterceptorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te3d6f352-e424-4e08-9408-dd8cebff47a5\tQto_InterceptorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t563\t1\tIfcMassMeasure\t1\n#\nGROUP\t564\tQto_JunctionBoxBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1315898a-2504-437f-9a60-fe142d155124\tQto_JunctionBoxBaseQuantities.GrossWeight[Type]\tNUMBER\t\t564\t1\tIfcMassMeasure\t1\nPARAM\t539afffb-28a5-4666-bf61-3a0039279818\tQto_JunctionBoxBaseQuantities.NumberOfGangs[Type]\tINTEGER\t\t564\t1\tIfcCountMeasure\t1\n#\nGROUP\t565\tQto_LaborResourceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t932ca374-875b-4d32-a920-7734542b6697\tQto_LaborResourceBaseQuantities.OvertimeWork[Type]\tNUMBER\t\t565\t1\tIfcTimeMeasure\t1\nPARAM\t7a51213b-07de-4f7e-ac7f-f1d63601da3d\tQto_LaborResourceBaseQuantities.StandardWork[Type]\tNUMBER\t\t565\t1\tIfcTimeMeasure\t1\n#\nGROUP\t566\tQto_LampBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tecbb2d1d-6b76-4136-825f-f4b8778c67dd\tQto_LampBaseQuantities.GrossWeight[Type]\tNUMBER\t\t566\t1\tIfcMassMeasure\t1\n#\nGROUP\t567\tQto_LightFixtureBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t577eba30-efc5-4c25-9e78-eecc52aac0d8\tQto_LightFixtureBaseQuantities.GrossWeight[Type]\tNUMBER\t\t567\t1\tIfcMassMeasure\t1\n#\nGROUP\t568\tQto_MemberBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t146130f6-7242-44c7-b4cf-0764efce9798\tQto_MemberBaseQuantities.CrossSectionArea[Type]\tAREA\t\t568\t1\tIfcAreaMeasure\t1\nPARAM\t404bb87c-19a8-4500-966a-9caa41947c0d\tQto_MemberBaseQuantities.GrossSurfaceArea[Type]\tAREA\t\t568\t1\tIfcAreaMeasure\t1\nPARAM\ta0877c9d-8f29-4227-a163-0312601b0772\tQto_MemberBaseQuantities.GrossVolume[Type]\tVOLUME\t\t568\t1\tIfcVolumeMeasure\t1\nPARAM\t27d410f5-7577-4560-8d14-ae0931707f00\tQto_MemberBaseQuantities.GrossWeight[Type]\tNUMBER\t\t568\t1\tIfcMassMeasure\t1\nPARAM\t9a276285-b460-415b-abca-fb90092cffb3\tQto_MemberBaseQuantities.Length[Type]\tLENGTH\t\t568\t1\tIfcLengthMeasure\t1\nPARAM\t81702afe-958c-4b3a-9031-c4da55843799\tQto_MemberBaseQuantities.NetSurfaceArea[Type]\tAREA\t\t568\t1\tIfcAreaMeasure\t1\nPARAM\t8fa91833-c5ef-4508-8cf8-9824d8a7a707\tQto_MemberBaseQuantities.NetVolume[Type]\tVOLUME\t\t568\t1\tIfcVolumeMeasure\t1\nPARAM\tfd8f7b57-6081-4bc0-98c9-78d3653ff5b5\tQto_MemberBaseQuantities.NetWeight[Type]\tNUMBER\t\t568\t1\tIfcMassMeasure\t1\nPARAM\tef4a88bd-bb39-453d-8b59-d7dd1e5572a5\tQto_MemberBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t568\t1\tIfcAreaMeasure\t1\n#\nGROUP\t569\tQto_MotorConnectionBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3eb46014-359c-4ffb-a78e-b6080e9a5a41\tQto_MotorConnectionBaseQuantities.GrossWeight[Type]\tNUMBER\t\t569\t1\tIfcMassMeasure\t1\n#\nGROUP\t570\tQto_OpeningElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6f486035-6dac-49d1-b6a0-faa2594ac6ac\tQto_OpeningElementBaseQuantities.Area[Type]\tAREA\t\t570\t1\tIfcAreaMeasure\t1\nPARAM\t61bd9e42-e2af-407e-9116-9648264c658d\tQto_OpeningElementBaseQuantities.Depth[Type]\tLENGTH\t\t570\t1\tIfcLengthMeasure\t1\nPARAM\t66be98da-6281-4585-be3c-a1160460d52b\tQto_OpeningElementBaseQuantities.Height[Type]\tLENGTH\t\t570\t1\tIfcLengthMeasure\t1\nPARAM\tb8a34c00-e619-4569-bb79-9acaafec611f\tQto_OpeningElementBaseQuantities.Volume[Type]\tVOLUME\t\t570\t1\tIfcVolumeMeasure\t1\nPARAM\t19843f5b-89f4-4bbc-ba63-2a5667e7634e\tQto_OpeningElementBaseQuantities.Width[Type]\tLENGTH\t\t570\t1\tIfcLengthMeasure\t1\n#\nGROUP\t571\tQto_OutletBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfc18da68-da91-42f6-b31c-68ad7d35357e\tQto_OutletBaseQuantities.GrossWeight[Type]\tNUMBER\t\t571\t1\tIfcMassMeasure\t1\n#\nGROUP\t572\tQto_PileBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdb283971-97c1-4fc2-965a-c829cef95003\tQto_PileBaseQuantities.CrossSectionArea[Type]\tAREA\t\t572\t1\tIfcAreaMeasure\t1\nPARAM\t35539ffa-c254-4b46-911a-b7eef4820d9b\tQto_PileBaseQuantities.GrossSurfaceArea[Type]\tAREA\t\t572\t1\tIfcAreaMeasure\t1\nPARAM\t9b7f1caf-0a14-4946-9d87-f4b3b1299eff\tQto_PileBaseQuantities.GrossVolume[Type]\tVOLUME\t\t572\t1\tIfcVolumeMeasure\t1\nPARAM\tba801601-f444-4471-88d7-f880b861d103\tQto_PileBaseQuantities.GrossWeight[Type]\tNUMBER\t\t572\t1\tIfcMassMeasure\t1\nPARAM\t98bb2687-6b02-4d2a-94d4-d520a3e92ed1\tQto_PileBaseQuantities.Length[Type]\tLENGTH\t\t572\t1\tIfcLengthMeasure\t1\nPARAM\t1e12a14a-24b9-4b8c-bf4f-3a63bc750f9b\tQto_PileBaseQuantities.NetVolume[Type]\tVOLUME\t\t572\t1\tIfcVolumeMeasure\t1\nPARAM\tbd27872d-37ba-424b-a3e3-81af64d69211\tQto_PileBaseQuantities.NetWeight[Type]\tNUMBER\t\t572\t1\tIfcMassMeasure\t1\nPARAM\t9256495e-a299-4307-80e9-081836b2295c\tQto_PileBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t572\t1\tIfcAreaMeasure\t1\n#\nGROUP\t573\tQto_PipeFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfb32f7ee-63e3-4a9a-b82c-520ac4085d87\tQto_PipeFittingBaseQuantities.GrossCrossSectionArea[Type]\tAREA\t\t573\t1\tIfcAreaMeasure\t1\nPARAM\t55c5c9de-f0f4-43e9-bf7c-c80b5e9d4825\tQto_PipeFittingBaseQuantities.GrossWeight[Type]\tNUMBER\t\t573\t1\tIfcMassMeasure\t1\nPARAM\t6a8bb9d1-4362-42db-8e2f-1b2a978d26e1\tQto_PipeFittingBaseQuantities.Length[Type]\tLENGTH\t\t573\t1\tIfcLengthMeasure\t1\nPARAM\tac3dab3f-74e9-4ab5-92b6-cdc49f483d18\tQto_PipeFittingBaseQuantities.NetCrossSectionArea[Type]\tAREA\t\t573\t1\tIfcAreaMeasure\t1\nPARAM\t3f54531f-e0b8-4688-9d11-65b186eee9bd\tQto_PipeFittingBaseQuantities.NetWeight[Type]\tNUMBER\t\t573\t1\tIfcMassMeasure\t1\nPARAM\t0e4f9045-9072-4cfc-bd88-34c9dceb4f9f\tQto_PipeFittingBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t573\t1\tIfcAreaMeasure\t1\n#\nGROUP\t574\tQto_PipeSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tec0505a3-85d2-4d7f-9e57-2f7e0c2c0250\tQto_PipeSegmentBaseQuantities.GrossCrossSectionArea[Type]\tAREA\t\t574\t1\tIfcAreaMeasure\t1\nPARAM\ta6b4fcae-c425-47f9-bf58-89d097a7e454\tQto_PipeSegmentBaseQuantities.GrossWeight[Type]\tNUMBER\t\t574\t1\tIfcMassMeasure\t1\nPARAM\teba44d42-f8b7-4c5f-bf23-57004304d700\tQto_PipeSegmentBaseQuantities.Length[Type]\tLENGTH\t\t574\t1\tIfcLengthMeasure\t1\nPARAM\t217ab057-031a-4ed6-9ce2-81772f47c14e\tQto_PipeSegmentBaseQuantities.NetCrossSectionArea[Type]\tAREA\t\t574\t1\tIfcAreaMeasure\t1\nPARAM\te1c25ca4-4480-430c-81f9-a342682130e5\tQto_PipeSegmentBaseQuantities.NetWeight[Type]\tNUMBER\t\t574\t1\tIfcMassMeasure\t1\nPARAM\ta8163293-a663-4c32-8fcf-ad40959e5e66\tQto_PipeSegmentBaseQuantities.OuterSurfaceArea[Type]\tAREA\t\t574\t1\tIfcAreaMeasure\t1\n#\nGROUP\t575\tQto_PlateBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4fcff3c1-7b14-4f7a-9959-80fdba3e643a\tQto_PlateBaseQuantities.GrossArea[Type]\tAREA\t\t575\t1\tIfcAreaMeasure\t1\nPARAM\t44a07c22-8a0e-4cfa-b87f-6b0fc1a3d904\tQto_PlateBaseQuantities.GrossVolume[Type]\tVOLUME\t\t575\t1\tIfcVolumeMeasure\t1\nPARAM\t5cfceafa-bbc4-48f7-988b-98a5280f0bbb\tQto_PlateBaseQuantities.GrossWeight[Type]\tNUMBER\t\t575\t1\tIfcMassMeasure\t1\nPARAM\t08d02163-6da9-4071-8550-f11752a7f738\tQto_PlateBaseQuantities.NetArea[Type]\tAREA\t\t575\t1\tIfcAreaMeasure\t1\nPARAM\tc30cb1d4-08af-4952-9eac-5e360593528b\tQto_PlateBaseQuantities.NetVolume[Type]\tVOLUME\t\t575\t1\tIfcVolumeMeasure\t1\nPARAM\tfd750145-d790-4dca-a9d4-9f86fc13b5ba\tQto_PlateBaseQuantities.NetWeight[Type]\tNUMBER\t\t575\t1\tIfcMassMeasure\t1\nPARAM\t1a6d4b08-8434-4c58-986e-796f6e6132d6\tQto_PlateBaseQuantities.Perimeter[Type]\tLENGTH\t\t575\t1\tIfcLengthMeasure\t1\nPARAM\t283fdb30-acd6-409c-b242-e342ad81bd26\tQto_PlateBaseQuantities.Width[Type]\tLENGTH\t\t575\t1\tIfcLengthMeasure\t1\n#\nGROUP\t576\tQto_ProjectionElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc991d39d-7bc0-4df1-b253-0ce1a3052bcb\tQto_ProjectionElementBaseQuantities.Area[Type]\tAREA\t\t576\t1\tIfcAreaMeasure\t1\nPARAM\t975316df-b6dc-4240-9a81-b9c5ca7d9592\tQto_ProjectionElementBaseQuantities.Volume[Type]\tVOLUME\t\t576\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t577\tQto_ProtectiveDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tff11509c-1731-4bae-8c6e-2ee8183d2fe1\tQto_ProtectiveDeviceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t577\t1\tIfcMassMeasure\t1\n#\nGROUP\t578\tQto_ProtectiveDeviceTrippingUnitBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td62dca82-44fd-42e4-8956-655d4d926e74\tQto_ProtectiveDeviceTrippingUnitBaseQuantities.GrossWeight[Type]\tNUMBER\t\t578\t1\tIfcMassMeasure\t1\n#\nGROUP\t579\tQto_PumpBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcb5e499b-725d-4ef0-a213-3c2bc7e88afd\tQto_PumpBaseQuantities.GrossWeight[Type]\tNUMBER\t\t579\t1\tIfcMassMeasure\t1\n#\nGROUP\t580\tQto_RailingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t430493fb-3350-4627-8186-208bcccdcf5c\tQto_RailingBaseQuantities.Length[Type]\tLENGTH\t\t580\t1\tIfcLengthMeasure\t1\n#\nGROUP\t581\tQto_RampFlightBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t921a9d97-5414-4621-9ebf-82d8b4d1e6d2\tQto_RampFlightBaseQuantities.GrossArea[Type]\tAREA\t\t581\t1\tIfcAreaMeasure\t1\nPARAM\tfe7e8e60-cbc0-470a-9265-15df9e515fe4\tQto_RampFlightBaseQuantities.GrossVolume[Type]\tVOLUME\t\t581\t1\tIfcVolumeMeasure\t1\nPARAM\t4d91c6f2-2d2e-4ea9-a234-37c76a462b56\tQto_RampFlightBaseQuantities.Length[Type]\tLENGTH\t\t581\t1\tIfcLengthMeasure\t1\nPARAM\t3c453549-24fc-44fb-a186-5d3d8e060662\tQto_RampFlightBaseQuantities.NetArea[Type]\tAREA\t\t581\t1\tIfcAreaMeasure\t1\nPARAM\t949aeced-5b00-47f6-892b-8b1f922f2929\tQto_RampFlightBaseQuantities.NetVolume[Type]\tVOLUME\t\t581\t1\tIfcVolumeMeasure\t1\nPARAM\t327adbec-11ab-40ee-965c-72077e7344bb\tQto_RampFlightBaseQuantities.Width[Type]\tLENGTH\t\t581\t1\tIfcLengthMeasure\t1\n#\nGROUP\t582\tQto_ReinforcingElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t82845659-27bf-4151-b0d9-77f909e48fc3\tQto_ReinforcingElementBaseQuantities.Count[Type]\tINTEGER\t\t582\t1\tIfcCountMeasure\t1\nPARAM\t5500b993-7cd5-4d4b-a1f3-c43aef840144\tQto_ReinforcingElementBaseQuantities.Length[Type]\tLENGTH\t\t582\t1\tIfcLengthMeasure\t1\nPARAM\t23ee2291-2395-4cdc-89a2-057f44d66006\tQto_ReinforcingElementBaseQuantities.Weight[Type]\tNUMBER\t\t582\t1\tIfcMassMeasure\t1\n#\nGROUP\t583\tQto_RoofBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9bf084a3-a2c8-472a-a8c4-60b3a4bcf7b7\tQto_RoofBaseQuantities.GrossArea[Type]\tAREA\t\t583\t1\tIfcAreaMeasure\t1\nPARAM\t423ac981-88ba-4f8f-8138-439330e5fc4f\tQto_RoofBaseQuantities.NetArea[Type]\tAREA\t\t583\t1\tIfcAreaMeasure\t1\nPARAM\t366b8fb3-e5ee-4bba-ab0d-8be493fec04d\tQto_RoofBaseQuantities.ProjectedArea[Type]\tAREA\t\t583\t1\tIfcAreaMeasure\t1\n#\nGROUP\t584\tQto_SanitaryTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf98e9445-76db-4cea-a428-af754e0b859d\tQto_SanitaryTerminalBaseQuantities.GrossWeight[Type]\tNUMBER\t\t584\t1\tIfcMassMeasure\t1\n#\nGROUP\t585\tQto_SensorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t28cf8ea2-6237-46d2-906e-62c3e06abfbc\tQto_SensorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t585\t1\tIfcMassMeasure\t1\n#\nGROUP\t586\tQto_SiteBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0f4b62b8-79e0-4f82-8057-5876f046d633\tQto_SiteBaseQuantities.GrossArea[Type]\tAREA\t\t586\t1\tIfcAreaMeasure\t1\nPARAM\t4b9d4443-1afb-40a5-a19a-1ec45b7cf079\tQto_SiteBaseQuantities.GrossPerimeter[Type]\tLENGTH\t\t586\t1\tIfcLengthMeasure\t1\n#\nGROUP\t587\tQto_SlabBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t03212d12-35e1-4f12-9018-0a753b4c41a7\tQto_SlabBaseQuantities.Depth[Type]\tLENGTH\t\t587\t1\tIfcLengthMeasure\t1\nPARAM\te63c9543-0d4f-4547-8910-a3f24dd7502e\tQto_SlabBaseQuantities.GrossArea[Type]\tAREA\t\t587\t1\tIfcAreaMeasure\t1\nPARAM\t561fcdad-0c7f-41da-b024-9c2eee5bf216\tQto_SlabBaseQuantities.GrossVolume[Type]\tVOLUME\t\t587\t1\tIfcVolumeMeasure\t1\nPARAM\tf1eb1b5f-1e50-4cba-93c3-2cba73641d9c\tQto_SlabBaseQuantities.GrossWeight[Type]\tNUMBER\t\t587\t1\tIfcMassMeasure\t1\nPARAM\tf7fb4781-7233-41ab-b1cb-1e912b740b3e\tQto_SlabBaseQuantities.Length[Type]\tLENGTH\t\t587\t1\tIfcLengthMeasure\t1\nPARAM\tfaa4746c-5d95-43ad-a816-799cc55d5a21\tQto_SlabBaseQuantities.NetArea[Type]\tAREA\t\t587\t1\tIfcAreaMeasure\t1\nPARAM\t86309906-b11f-4dcf-b033-f8e7411a27c7\tQto_SlabBaseQuantities.NetVolume[Type]\tVOLUME\t\t587\t1\tIfcVolumeMeasure\t1\nPARAM\t3e37c743-7dd3-48f8-82a6-e9c533ca9da3\tQto_SlabBaseQuantities.NetWeight[Type]\tNUMBER\t\t587\t1\tIfcMassMeasure\t1\nPARAM\t2d8c0ca9-2fae-4517-8f40-8c41ceb5cf7d\tQto_SlabBaseQuantities.Perimeter[Type]\tLENGTH\t\t587\t1\tIfcLengthMeasure\t1\nPARAM\t660e8036-5b23-468f-9802-84741994a69e\tQto_SlabBaseQuantities.Width[Type]\tLENGTH\t\t587\t1\tIfcLengthMeasure\t1\n#\nGROUP\t588\tQto_SolarDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc3b1090-07b8-4d33-a99b-a33df7b2f7a6\tQto_SolarDeviceBaseQuantities.GrossArea[Type]\tAREA\t\t588\t1\tIfcAreaMeasure\t1\nPARAM\t86f0ae02-1565-43c1-bca9-53233a9af5fe\tQto_SolarDeviceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t588\t1\tIfcMassMeasure\t1\n#\nGROUP\t589\tQto_SpaceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t849125ce-732a-459e-87b1-12183071819e\tQto_SpaceBaseQuantities.FinishCeilingHeight[Type]\tLENGTH\t\t589\t1\tIfcLengthMeasure\t1\nPARAM\t6942af6c-b212-4f61-b16b-890251d8eb33\tQto_SpaceBaseQuantities.FinishFloorHeight[Type]\tLENGTH\t\t589\t1\tIfcLengthMeasure\t1\nPARAM\t8754ed28-4a21-44bd-9bae-14a6d6a9ce72\tQto_SpaceBaseQuantities.GrossCeilingArea[Type]\tAREA\t\t589\t1\tIfcAreaMeasure\t1\nPARAM\ta11444af-f02f-49c6-8d41-bfd86986cd05\tQto_SpaceBaseQuantities.GrossFloorArea[Type]\tAREA\t\t589\t1\tIfcAreaMeasure\t1\nPARAM\te1abdd9d-2211-4e7e-b8cc-b604fcc7e519\tQto_SpaceBaseQuantities.GrossPerimeter[Type]\tLENGTH\t\t589\t1\tIfcLengthMeasure\t1\nPARAM\t589b9ddb-b705-4909-991b-29c12d86739e\tQto_SpaceBaseQuantities.GrossVolume[Type]\tVOLUME\t\t589\t1\tIfcVolumeMeasure\t1\nPARAM\t7692dcfa-6b82-48c4-9c77-3006b3e5c8b2\tQto_SpaceBaseQuantities.GrossWallArea[Type]\tAREA\t\t589\t1\tIfcAreaMeasure\t1\nPARAM\te6b69ade-c13a-4c8b-ac7c-f46d8cfde8af\tQto_SpaceBaseQuantities.Height[Type]\tLENGTH\t\t589\t1\tIfcLengthMeasure\t1\nPARAM\tf7428dc7-2125-402d-93c1-76e168198e36\tQto_SpaceBaseQuantities.NetCeilingArea[Type]\tAREA\t\t589\t1\tIfcAreaMeasure\t1\nPARAM\t220a6103-1f6d-49da-a219-f14337fc68f3\tQto_SpaceBaseQuantities.NetFloorArea[Type]\tAREA\t\t589\t1\tIfcAreaMeasure\t1\nPARAM\ta5913eab-4f3a-4534-89ab-3b5c217a1b51\tQto_SpaceBaseQuantities.NetPerimeter[Type]\tLENGTH\t\t589\t1\tIfcLengthMeasure\t1\nPARAM\t07b18587-87b4-4de7-b523-1ef21b5a2cda\tQto_SpaceBaseQuantities.NetVolume[Type]\tVOLUME\t\t589\t1\tIfcVolumeMeasure\t1\nPARAM\tf330f885-77a2-4b49-b55e-731dc4945af3\tQto_SpaceBaseQuantities.NetWallArea[Type]\tAREA\t\t589\t1\tIfcAreaMeasure\t1\n#\nGROUP\t590\tQto_SpaceHeaterBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3c576c32-46a3-435c-a8ec-531a7a4a79c7\tQto_SpaceHeaterBaseQuantities.GrossWeight[Type]\tNUMBER\t\t590\t1\tIfcMassMeasure\t1\nPARAM\t2da0cf68-a9f3-42c2-b623-85c58faf9921\tQto_SpaceHeaterBaseQuantities.Length[Type]\tLENGTH\t\t590\t1\tIfcLengthMeasure\t1\nPARAM\tca4d1675-d459-43e8-b9c2-abec08be9b7f\tQto_SpaceHeaterBaseQuantities.NetWeight[Type]\tNUMBER\t\t590\t1\tIfcMassMeasure\t1\n#\nGROUP\t591\tQto_StackTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6610183a-0c3e-4323-a486-eb10404c0a9b\tQto_StackTerminalBaseQuantities.GrossWeight[Type]\tNUMBER\t\t591\t1\tIfcMassMeasure\t1\n#\nGROUP\t592\tQto_StairFlightBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta6e29012-8f7c-4acc-809d-500dc623d034\tQto_StairFlightBaseQuantities.GrossVolume[Type]\tVOLUME\t\t592\t1\tIfcVolumeMeasure\t1\nPARAM\t8d7dfbab-a2e2-4d56-85b8-2252732d7e68\tQto_StairFlightBaseQuantities.Length[Type]\tLENGTH\t\t592\t1\tIfcLengthMeasure\t1\nPARAM\t1153a109-5eaa-4337-b720-bf59b55e31bf\tQto_StairFlightBaseQuantities.NetVolume[Type]\tVOLUME\t\t592\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t593\tQto_SwitchingDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9549393b-b926-4adf-bce9-3bf1eec3abce\tQto_SwitchingDeviceBaseQuantities.GrossWeight[Type]\tNUMBER\t\t593\t1\tIfcMassMeasure\t1\n#\nGROUP\t594\tQto_TankBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tae840b9a-ae28-494f-8cb7-f05c52b28377\tQto_TankBaseQuantities.GrossWeight[Type]\tNUMBER\t\t594\t1\tIfcMassMeasure\t1\nPARAM\tfcdb6ffc-ace8-4bcd-83db-68a59205f44e\tQto_TankBaseQuantities.NetWeight[Type]\tNUMBER\t\t594\t1\tIfcMassMeasure\t1\nPARAM\t776a5129-c649-41ee-953f-300a443764cd\tQto_TankBaseQuantities.TotalSurfaceArea[Type]\tAREA\t\t594\t1\tIfcAreaMeasure\t1\n#\nGROUP\t595\tQto_TransformerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t69441c55-6488-407e-b990-38f0826d266e\tQto_TransformerBaseQuantities.GrossWeight[Type]\tNUMBER\t\t595\t1\tIfcMassMeasure\t1\n#\nGROUP\t596\tQto_TubeBundleBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t30cfac62-85ff-4cb6-9cd8-6f81dda9f2bc\tQto_TubeBundleBaseQuantities.GrossWeight[Type]\tNUMBER\t\t596\t1\tIfcMassMeasure\t1\nPARAM\t4a3e04b0-d9bf-411e-bd4b-f86286fc7a40\tQto_TubeBundleBaseQuantities.NetWeight[Type]\tNUMBER\t\t596\t1\tIfcMassMeasure\t1\n#\nGROUP\t597\tQto_UnitaryControlElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5ad416d8-7e54-4814-b982-838108f40cc4\tQto_UnitaryControlElementBaseQuantities.GrossWeight[Type]\tNUMBER\t\t597\t1\tIfcMassMeasure\t1\n#\nGROUP\t598\tQto_UnitaryEquipmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0fe75746-4f1b-4d70-aad7-780590a25362\tQto_UnitaryEquipmentBaseQuantities.GrossWeight[Type]\tNUMBER\t\t598\t1\tIfcMassMeasure\t1\n#\nGROUP\t599\tQto_ValveBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t013590a7-7424-410a-b03d-cb10c588722d\tQto_ValveBaseQuantities.GrossWeight[Type]\tNUMBER\t\t599\t1\tIfcMassMeasure\t1\n#\nGROUP\t600\tQto_VibrationIsolatorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e282b42-fcd5-4a02-916e-479026cfab79\tQto_VibrationIsolatorBaseQuantities.GrossWeight[Type]\tNUMBER\t\t600\t1\tIfcMassMeasure\t1\n#\nGROUP\t601\tQto_WallBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t52c93921-54b0-4df2-8542-57dea01243b3\tQto_WallBaseQuantities.GrossFootprintArea[Type]\tAREA\t\t601\t1\tIfcAreaMeasure\t1\nPARAM\t37cd6b10-6a92-466e-9725-c9c719f4383a\tQto_WallBaseQuantities.GrossSideArea[Type]\tAREA\t\t601\t1\tIfcAreaMeasure\t1\nPARAM\t77dd166e-f7cd-4a8a-8c78-a1c7a5ade1d4\tQto_WallBaseQuantities.GrossVolume[Type]\tVOLUME\t\t601\t1\tIfcVolumeMeasure\t1\nPARAM\tad30a54a-79ba-4d12-b60d-b568175e8988\tQto_WallBaseQuantities.GrossWeight[Type]\tNUMBER\t\t601\t1\tIfcMassMeasure\t1\nPARAM\td245d37f-f262-47e6-9fe6-7612c3d3c358\tQto_WallBaseQuantities.Height[Type]\tLENGTH\t\t601\t1\tIfcLengthMeasure\t1\nPARAM\t0df173c0-7cf0-4e75-a80e-ce5401714303\tQto_WallBaseQuantities.Length[Type]\tLENGTH\t\t601\t1\tIfcLengthMeasure\t1\nPARAM\td2f3193a-6694-40d9-a066-bfd6c5684195\tQto_WallBaseQuantities.NetFootprintArea[Type]\tAREA\t\t601\t1\tIfcAreaMeasure\t1\nPARAM\t451ac791-1244-4d2a-86cb-ceff495e68ae\tQto_WallBaseQuantities.NetSideArea[Type]\tAREA\t\t601\t1\tIfcAreaMeasure\t1\nPARAM\t837281e6-577c-4775-93c9-a3e03ccad4c7\tQto_WallBaseQuantities.NetVolume[Type]\tVOLUME\t\t601\t1\tIfcVolumeMeasure\t1\nPARAM\t069ea2eb-fcff-40dd-b3d4-a67de6d6c9ef\tQto_WallBaseQuantities.NetWeight[Type]\tNUMBER\t\t601\t1\tIfcMassMeasure\t1\nPARAM\tac94a44a-c922-4f8a-82d1-556781d76e58\tQto_WallBaseQuantities.Width[Type]\tLENGTH\t\t601\t1\tIfcLengthMeasure\t1\n#\nGROUP\t602\tQto_WasteTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3beb93a0-6c05-4925-ad27-0e86b579a0ba\tQto_WasteTerminalBaseQuantities.GrossWeight[Type]\tNUMBER\t\t602\t1\tIfcMassMeasure\t1\n#\nGROUP\t603\tQto_WindowBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0665b33d-fbd6-49e1-80a2-723c4f5be8b3\tQto_WindowBaseQuantities.Area[Type]\tAREA\t\t603\t1\tIfcAreaMeasure\t1\nPARAM\t6b257136-5d18-48f7-9365-1232398a63ed\tQto_WindowBaseQuantities.Height[Type]\tLENGTH\t\t603\t1\tIfcLengthMeasure\t1\nPARAM\tc0e7558e-0a8e-486c-bb57-9928a7027667\tQto_WindowBaseQuantities.Perimeter[Type]\tLENGTH\t\t603\t1\tIfcLengthMeasure\t1\nPARAM\tb788dffc-fac0-4e50-aa97-dad78625b446\tQto_WindowBaseQuantities.Width[Type]\tLENGTH\t\t603\t1\tIfcLengthMeasure\t1\n#\nGROUP\t2\tRevit IFCExporter Parameters\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t979a9ef7-a1e5-42aa-b12b-87f4b316b920\tClassificationCode[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\td1de9789-0ee4-4212-8083-a35b7d78c4ee\tClassificationCode(2)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\ta2b43c43-148c-43ac-acc4-804f09623b9f\tClassificationCode(3)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\tcb55abe4-ea3a-452e-8e8d-fc0b72ba8e42\tClassificationCode(4)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t219647f3-80ec-4959-be6e-38875b0cf419\tClassificationCode(5)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\tc7ea8d37-af44-43d5-982d-3193cbd36701\tClassificationCode(6)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\tfbd5a530-c151-4986-a711-2a6c5cd83d3e\tClassificationCode(7)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t7b1b4c28-2b51-49ac-bb80-99832b6d5a77\tClassificationCode(8)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\taf667115-4871-4a74-ad48-cd9156ab52f7\tClassificationCode(9)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\tf4c50e92-76bd-4815-a41c-2a96c13ce3fa\tClassificationCode(10)[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t2db82be1-0d19-4007-9e02-4d1701e979f8\tIfcQtyDepth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t75508649-f36d-499a-8116-67a6ae63a437\tIfcQtyLength[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tcc9723c8-7bf3-4af9-bec4-175c512ae618\tIfcQtyWidth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tfeae8108-41cf-496e-9175-3eff2fddd4af\tIfcQtyDiameter[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t7a5130be-436f-4829-b75b-72c574219b8c\tIfcQtyPerimeter[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t192dcfa0-1bdf-4da3-97f1-a40ebdb72539\tIfcQtyNetPerimeter[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tad610f5c-4e19-46b0-838f-4732a4ab3b1c\tIfcQtyGrossPerimeter[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t145dd5a5-bc9e-48b5-9a9e-77e096bd0bfe\tIfcQtyNetHeight[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t134b9456-7fb3-4089-bed2-440ea7ec5e0e\tIfcQtyFinishCeilingHeight[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t9c0c6850-b2e0-4cf4-a3dc-c588a37aa12e\tIfcQtyGrossHeight[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t6b103c6c-74b9-486f-9906-e5dd6f9f03c7\tIfcQtyFinishFloorHeight[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tdcb095d6-dfba-48d2-97a2-c20e899dc53f\tIfcQtyGrossWallArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t3245f4b2-0cea-431e-bcb7-27a9edae0310\tIfcQtyArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t68698438-8829-4054-8513-8a0b6ce12244\tIfcQtyGrossArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t3d73ad7e-6b1f-48d8-958b-c5559b3544d5\tIfcQtyGrossSurfaceArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t00f5808a-306f-49ee-a5ca-78c22c62ce99\tIfcQtyNetCeilingArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\ta1b7fcd2-7e34-4e65-89b8-f56de11a314b\tIfcQtyNetSurfaceArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t6969d33f-e5f0-4c42-8ec4-5783073ed751\tIfcQtyCrossSectionArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\ta9a58585-2eb5-4db8-9c7c-cf12d1720ebe\tIfcQtyOuterSurfaceArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t596d602a-dae6-47ef-83c4-8db04a4209f6\tIfcQtyGrossCeilingArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t2acd7edb-4e08-4053-8379-d5bddd689985\tIfcQtyNetWallArea[Type]\tAREA\t\t2\t1\t\t1\nPARAM\t329ad038-3907-433e-95b7-1fc5663d21b4\tIfcQtyGrossVolume[Type]\tVOLUME\t\t2\t1\t\t1\nPARAM\t6aff01bb-fc73-4ec5-a59b-8fd19520c2c9\tIfcQtyNetVolume[Type]\tVOLUME\t\t2\t1\t\t1\nPARAM\t0291a3a9-a188-43e3-9e6d-059bd6c7f81b\tIfcQtyVolume[Type]\tVOLUME\t\t2\t1\t\t1\nPARAM\t90933854-33fd-4c06-a6a7-6f849919ae92\tIfcQtyGrossWeight[Type]\tNUMBER\t\t2\t1\t\t1\nPARAM\ta9c5d910-1a26-497b-a034-b28915eddd56\tIfcQtyNetWeight[Type]\tNUMBER\t\t2\t1\t\t1\nPARAM\t9080bc21-a032-4bec-ad15-80307600bbe3\tIfcName[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\tfee87b11-3cdd-4f48-a4c9-1e17c03fed3f\tIfcDescription[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t58ba886e-ac48-4bf1-b77f-760dca5f2712\tIfcLongName[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t0a85b5b6-2af4-480d-85bf-235cee912e09\tIfcTag[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t115763c9-c385-4aad-aac6-6ac789b0cb41\tIfcProfileName[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t3fa9eb1c-a4a0-4fa8-b836-e9b2f417b8d8\tIfcElementType[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t0c449988-1efe-4690-b873-fc98d4fc60e2\tIfcApplicableOccurrence[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t54f49c86-bf8c-4689-830a-54bc73fa0ab2\tIfcObjectType[Type]\tTEXT\t\t2\t1\tSpecial Parameter to set the Instance ObjectType attribute from the Type\t1\nPARAM\t141f4773-6408-460c-9136-ed34a072e8da\tPanelDepth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t6f115f50-3148-4aa0-be19-ce8d91aea627\tPanelWidth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tabec6a05-f532-46f0-b3de-f9e8a9c01335\tLiningDepth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t55e3e35c-c4ba-42df-ba56-048a3995bba5\tLiningThickness[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t3be72e29-7818-4302-89a7-337d1f328e12\tLiningOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\ta1982167-ba1d-463f-b67d-28a9679bc10c\tThresholdDepth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t524d8a84-6533-40f3-b306-880f79263b71\tThresholdThickness[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tb088323c-4dfb-4e78-a124-580119915e40\tThresholdOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t0345acfb-1ffc-4d44-bdb2-9d4dd6c4ca01\tTransomOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t95466b46-291e-427f-8d55-96445794c575\tTransomThickness[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tec98702d-a600-45a7-b710-2a8e943aab7e\tCasingDepth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tdb88ef23-14ab-4a23-963d-72d84bdd303e\tCasingThickness[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t68d470bd-a841-4665-9a55-75ea82f4fa72\tWINDOW_PARTITIONING_TYPE[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t556ad2ea-5ba3-49cc-accf-be26c96b33ff\tWINDOW_PREDEFINED_TYPE[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t0ffb75e9-4b55-4742-8b18-1bf5f83acc04\tConstruction[Type]\tTEXT\t\t2\t1\t\t1\nPARAM\t78af38cc-458e-4e63-9a7e-873a0d73b923\tFirstTransomOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t346df730-8ab6-41ce-8acf-0d4798300553\tSecondTransomOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t1778bc42-afde-4b76-9222-af1a38b05b7c\tMullionThickness[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t93ade552-8d24-473c-a7f0-48b2ddaf1588\tFirstMullionOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t1ea5ba6d-0447-43a5-8f5c-8a905c42ffb0\tSecondMullionOffset[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\t4a37833e-59c1-4532-8fe0-2a0f5214c2ad\tFrameDepth[Type]\tLENGTH\t\t2\t1\t\t1\nPARAM\tb552f0e3-1bc1-496b-a001-08b1f4a9a251\tFrameThickness[Type]\tLENGTH\t\t2\t1\t\t1\n"
  },
  {
    "path": "Source/RevitIFCTools/IFC Shared Parameters-RevitIFCBuiltIn_ALL.txt",
    "content": "# This is a Revit shared parameter file.\n# Do not edit manually.\n*META\tVERSION\tMINVERSION\nMETA\t2\t1\n*GROUP\tID\tNAME\n#\nGROUP\t3\tIfcDoorLiningProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1819e1b5-b30c-4ee7-aeb7-c49728ca1080\tIfcDoorLiningProperties.CasingDepth\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td7dcf29a-3d45-4622-bb3d-d35137e797a4\tIfcDoorLiningProperties.CasingThickness\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7a20e84a-2279-4e30-b1f9-6dee6db0af4d\tIfcDoorLiningProperties.LiningDepth\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tab84187c-4cb8-49ab-84d4-2bfbaccd5e1d\tIfcDoorLiningProperties.LiningOffset\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\t3a3a9dce-694d-4282-81dc-d1678dd6a29b\tIfcDoorLiningProperties.LiningThickness\tLENGTH\t\t3\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t7f77e6eb-aa91-4d00-bcb6-bd92bbaafca1\tIfcDoorLiningProperties.LiningToPanelOffsetX\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\tea0b9e23-706a-4647-aead-2dff355833f9\tIfcDoorLiningProperties.LiningToPanelOffsetY\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\t0377c451-7109-40f0-bbd2-3680d3d01cbe\tIfcDoorLiningProperties.ThresholdDepth\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t196d56dd-2282-404d-9ef1-81fe69861e4a\tIfcDoorLiningProperties.ThresholdOffset\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\t27ea51ec-bf1f-42ea-b398-7854c75cdfe4\tIfcDoorLiningProperties.ThresholdThickness\tLENGTH\t\t3\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t308e162b-cc7d-43a5-9647-5e2ef24074a1\tIfcDoorLiningProperties.TransomOffset\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\tccd51f01-82a2-4ecb-b270-18acdcd68839\tIfcDoorLiningProperties.TransomThickness\tLENGTH\t\t3\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t4\tIfcDoorPanelProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0abb240e-5e49-4377-b855-f79b9fb08e6f\tIfcDoorPanelProperties.PanelDepth\tLENGTH\t\t4\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0c136be1-a89f-43e0-bacf-59b47367d7c6\tIfcDoorPanelProperties.PanelOperation\tTEXT\t\t4\t1\tIfcLabel\t1\nPARAM\t7b0c2c29-96e1-458b-b8dd-7f84245ae619\tIfcDoorPanelProperties.PanelPosition\tTEXT\t\t4\t1\tIfcLabel\t1\nPARAM\ta25893b8-5bcb-409b-ae6a-d53a5208d93c\tIfcDoorPanelProperties.PanelWidth\tNUMBER\t\t4\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t5\tIfcFuelProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tabd4e4cb-3144-41e2-b61f-9eca98123eeb\tIfcFuelProperties.CarbonContent\tNUMBER\t\t5\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t8cb37b96-56e4-416b-9a24-cef09aa2d92e\tIfcFuelProperties.CombustionTemperature\tNUMBER\t\t5\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t3f6698f4-7d7a-4bb1-96ea-ec150f0f504f\tIfcFuelProperties.HigherHeatingValue\tNUMBER\t\t5\t1\tIfcHeatingValueMeasure\t1\nPARAM\t85daa61c-096d-4dd0-ba3e-fc8658228435\tIfcFuelProperties.LowerHeatingValue\tNUMBER\t\t5\t1\tIfcHeatingValueMeasure\t1\n#\nGROUP\t6\tIfcGeneralMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t78126e62-811e-431c-9b2e-7ea99768ed01\tIfcGeneralMaterialProperties.MassDensity\tMASS_DENSITY\t\t6\t1\tIfcMassDensityMeasure\t1\nPARAM\t8f9bb8b3-3b9d-4d64-8eff-ce72a90ae65c\tIfcGeneralMaterialProperties.MolecularWeight\tNUMBER\t\t6\t1\tIfcMolecularWeightMeasure\t1\nPARAM\t022f918e-af55-4c8f-a74f-a749d9c08a16\tIfcGeneralMaterialProperties.Porosity\tNUMBER\t\t6\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t7\tIfcHygroscopicMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t28e6a575-3492-4392-bd8e-69829d6623c4\tIfcHygroscopicMaterialProperties.IsothermalMoistureCapacity\tNUMBER\t\t7\t1\tIfcIsothermalMoistureCapacityMeasure\t1\nPARAM\t4b64b256-1fea-44d1-9e81-a1ea0665126a\tIfcHygroscopicMaterialProperties.LowerVaporResistanceFactor\tNUMBER\t\t7\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t3133af76-87bd-4a7c-aa2c-65d896cc69b8\tIfcHygroscopicMaterialProperties.MoistureDiffusivity\tNUMBER\t\t7\t1\tIfcMoistureDiffusivityMeasure\t1\nPARAM\t516a6e83-2c46-437f-95bb-4186cb22f736\tIfcHygroscopicMaterialProperties.UpperVaporResistanceFactor\tNUMBER\t\t7\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tcf1867c9-c349-4730-8835-254538f8afb5\tIfcHygroscopicMaterialProperties.VaporPermeability\tNUMBER\t\t7\t1\tIfcVaporPermeabilityMeasure\t1\n#\nGROUP\t8\tIfcMechanicalConcreteMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a9d552a-599c-4a2a-bb9b-09829b7bae3b\tIfcMechanicalConcreteMaterialProperties.AdmixturesDescription\tTEXT\t\t8\t1\tIfcText\t1\nPARAM\t055f89f9-8036-424e-9379-b5e3e12e9c78\tIfcMechanicalConcreteMaterialProperties.CompressiveStrength\tNUMBER\t\t8\t1\tIfcPressureMeasure\t1\nPARAM\t0d2a6831-985e-4ff3-a4a7-98bb143555a4\tIfcMechanicalConcreteMaterialProperties.MaxAggregateSize\tLENGTH\t\t8\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t70e70fbe-da0c-4535-a35b-0f5230ec6240\tIfcMechanicalConcreteMaterialProperties.ProtectivePoreRatio\tNUMBER\t\t8\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tdb1dde72-e9b7-49a5-bb4d-cb82710d85b9\tIfcMechanicalConcreteMaterialProperties.WaterImpermeability\tTEXT\t\t8\t1\tIfcText\t1\nPARAM\t103466db-f36e-4f45-9720-d222f65f73f0\tIfcMechanicalConcreteMaterialProperties.Workability\tTEXT\t\t8\t1\tIfcText\t1\n#\nGROUP\t9\tIfcMechanicalMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t772492c1-f0e9-4d95-9758-4d98eb135b43\tIfcMechanicalMaterialProperties.DynamicViscosity\tNUMBER\t\t9\t1\tIfcDynamicViscosityMeasure\t1\nPARAM\t1a77b426-fa46-4c10-a06e-781eb95f2dde\tIfcMechanicalMaterialProperties.PoissonRatio\tNUMBER\t\t9\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t980ea82d-ba8a-489a-aa7a-e22280d8e6bb\tIfcMechanicalMaterialProperties.ShearModulus\tNUMBER\t\t9\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t578f5756-e2f3-4dd8-8bab-c420a66af5a9\tIfcMechanicalMaterialProperties.ThermalExpansionCoefficient\tNUMBER\t\t9\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\t181bc626-041d-4ca4-90c6-bd866d4cb75d\tIfcMechanicalMaterialProperties.YoungModulus\tNUMBER\t\t9\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t10\tIfcMechanicalSteelMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8d98d993-67ec-45c9-8f18-f56b84538b59\tIfcMechanicalSteelMaterialProperties.HardeningModule\tNUMBER\t\t10\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t278e520b-935c-4f7f-af0a-0d76bdd68117\tIfcMechanicalSteelMaterialProperties.PlasticStrain\tNUMBER\t\t10\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t242c6851-6ac1-4e09-98dc-2fa26127f53c\tIfcMechanicalSteelMaterialProperties.ProportionalStress\tNUMBER\t\t10\t1\tIfcPressureMeasure\t1\nPARAM\tfbd309d1-cc33-4463-8977-8efee14e4912\tIfcMechanicalSteelMaterialProperties.Relaxations\tNUMBER\t\t10\t1\tIfcRelaxation\t1\nPARAM\t0eaeefe9-a75d-415f-87fc-e46469c05c1b\tIfcMechanicalSteelMaterialProperties.UltimateStrain\tNUMBER\t\t10\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t766d13cb-37b1-4751-abe1-975bb58c72c0\tIfcMechanicalSteelMaterialProperties.UltimateStress\tNUMBER\t\t10\t1\tIfcPressureMeasure\t1\nPARAM\t8cd7d25f-bca2-45da-9295-69535a94156e\tIfcMechanicalSteelMaterialProperties.YieldStress\tNUMBER\t\t10\t1\tIfcPressureMeasure\t1\n#\nGROUP\t11\tIfcOpticalMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tebdf1727-79bf-4056-b6e2-bd37704fb638\tIfcOpticalMaterialProperties.SolarReflectanceBack\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t29ea9c98-b38a-4104-920b-471f7ea8958a\tIfcOpticalMaterialProperties.SolarReflectanceFront\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t2bdba823-2612-4d50-9438-e1c1712c9b99\tIfcOpticalMaterialProperties.SolarTransmittance\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t60560881-61e7-440e-9714-e4589feffdf9\tIfcOpticalMaterialProperties.ThermalIrEmissivityBack\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4c3df541-abed-4d52-8e60-ea32cb400b5f\tIfcOpticalMaterialProperties.ThermalIrEmissivityFront\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tb9051d10-e427-4a78-aff1-82a57d5b3572\tIfcOpticalMaterialProperties.ThermalIrTransmittance\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t49af3c56-e884-4260-aa51-ae235a1119cb\tIfcOpticalMaterialProperties.VisibleReflectanceBack\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4797f125-aa87-4f0e-9294-d112a7a1c44b\tIfcOpticalMaterialProperties.VisibleReflectanceFront\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t60996c20-05ba-4dbf-8948-c0ed79b7ff1e\tIfcOpticalMaterialProperties.VisibleTransmittance\tNUMBER\t\t11\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t12\tIfcPermeableCoveringProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te39ba2d0-bc07-4cd8-95d5-02a638306c93\tIfcPermeableCoveringProperties.FrameDepth\tLENGTH\t\t12\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3f62a550-f873-4a80-8bb8-bc7f39dc478a\tIfcPermeableCoveringProperties.FrameThickness\tLENGTH\t\t12\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t51880b37-693f-4f8c-995d-0100f9e00c5a\tIfcPermeableCoveringProperties.OperationType\tTEXT\t\t12\t1\tIfcLabel\t1\nPARAM\tbee1d59a-cdc0-46be-8be0-636150b459f8\tIfcPermeableCoveringProperties.PanelPosition\tTEXT\t\t12\t1\tIfcLabel\t1\n#\nGROUP\t13\tIfcProductsOfCombustionProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdfd33bf4-b472-4398-9773-d91799104d74\tIfcProductsOfCombustionProperties.CO2Content\tNUMBER\t\t13\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1bc21c8b-3424-4bc0-87aa-5b9491b4bc79\tIfcProductsOfCombustionProperties.COContent\tNUMBER\t\t13\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t3900d20a-15c1-46e2-88a9-71aaba8ab264\tIfcProductsOfCombustionProperties.N20Content\tNUMBER\t\t13\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t04d1fe89-1ab3-4f01-b2bf-6a6fa3864403\tIfcProductsOfCombustionProperties.SpecificHeatCapacity\tNUMBER\t\t13\t1\tIfcSpecificHeatCapacityMeasure\t1\n#\nGROUP\t14\tIfcReinforcementDefinitionProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tce94709f-cf4b-4403-af6b-7ee6326ef2d9\tIfcReinforcementDefinitionProperties.DefinitionType\tTEXT\t\t14\t1\tIfcLabel\t1\nPARAM\t1e38a24b-756e-410a-83e4-10f2e996d410\tIfcReinforcementDefinitionProperties.ReinforcementSectionDefinitions\tTEXT\t\t14\t1\tIfcLabel\t1\n#\nGROUP\t15\tIfcThermalMaterialProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t10a248ef-1288-43b4-b182-b5a0bdc5c8cf\tIfcThermalMaterialProperties.BoilingPoint\tNUMBER\t\t15\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tb9e8f57e-26d8-482b-9675-cb5d2e37a0a9\tIfcThermalMaterialProperties.FreezingPoint\tNUMBER\t\t15\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\te30d4a68-3e50-4148-bda2-88ee5306b779\tIfcThermalMaterialProperties.SpecificHeatCapacity\tNUMBER\t\t15\t1\tIfcSpecificHeatCapacityMeasure\t1\nPARAM\t0d2e2b58-c52c-4c6b-a147-f175fa711cb6\tIfcThermalMaterialProperties.ThermalConductivity\tNUMBER\t\t15\t1\tIfcThermalConductivityMeasure\t1\n#\nGROUP\t16\tIfcWaterProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tab5e809d-2359-46b3-881f-54bc7b13fe75\tIfcWaterProperties.AcidityConcentration\tNUMBER\t\t16\t1\tIfcIonConcentrationMeasure\t1\nPARAM\tcf5a9c26-6e3a-46ae-bbf6-02d027c4803b\tIfcWaterProperties.AlkalinityConcentration\tNUMBER\t\t16\t1\tIfcIonConcentrationMeasure\t1\nPARAM\ta4b4917d-2627-4204-a66d-663596489cbe\tIfcWaterProperties.DissolvedSolidsContent\tNUMBER\t\t16\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t53048423-8395-4343-89ac-9667f633a5ed\tIfcWaterProperties.Hardness\tNUMBER\t\t16\t1\tIfcIonConcentrationMeasure\t1\nPARAM\t064481c5-046a-4417-9df6-9afe348f6d3f\tIfcWaterProperties.ImpuritiesContent\tNUMBER\t\t16\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tfceffc7c-27f0-4eff-8446-cf6503f8cc1f\tIfcWaterProperties.IsPotable\tNUMBER\t\t16\t1\tBoolean\t1\nPARAM\ta653429b-e4f8-417c-9bb5-f3e5dfe4346e\tIfcWaterProperties.PHLevel\tNUMBER\t\t16\t1\tIfcPHMeasure\t1\n#\nGROUP\t17\tIfcWindowLiningProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8a77e617-eed5-437a-951e-0cd57732bc1f\tIfcWindowLiningProperties.FirstMullionOffset\tNUMBER\t\t17\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t0f72231f-aec1-444a-bb4d-19f9bd68a518\tIfcWindowLiningProperties.FirstTransomOffset\tNUMBER\t\t17\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tcf2c5029-4b7a-4be7-b3cb-747d4c5c2525\tIfcWindowLiningProperties.LiningDepth\tLENGTH\t\t17\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2bd77976-58d7-4bb1-80a0-d4a8225e70b6\tIfcWindowLiningProperties.LiningOffset\tLENGTH\t\t17\t1\tIfcLengthMeasure\t1\nPARAM\t69dde29a-29e2-41ac-96c2-c494e35babf4\tIfcWindowLiningProperties.LiningThickness\tLENGTH\t\t17\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t23d62bb6-1ee9-431d-8a8d-47db42ca6c90\tIfcWindowLiningProperties.LiningToPanelOffsetX\tLENGTH\t\t17\t1\tIfcLengthMeasure\t1\nPARAM\t976ff59d-360f-4067-80ae-e09b1f215b3e\tIfcWindowLiningProperties.LiningToPanelOffsetY\tLENGTH\t\t17\t1\tIfcLengthMeasure\t1\nPARAM\ta010beae-7971-4a59-a999-5872bc891fd7\tIfcWindowLiningProperties.MullionThickness\tLENGTH\t\t17\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tb95c35eb-4ab0-43f1-94ea-b70e1ff420cd\tIfcWindowLiningProperties.SecondMullionOffset\tNUMBER\t\t17\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tf241333c-173f-47f9-95e0-4baaae81dbbd\tIfcWindowLiningProperties.SecondTransomOffset\tNUMBER\t\t17\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t43cca468-66c2-491b-a36c-f891aafbbd83\tIfcWindowLiningProperties.TransomThickness\tLENGTH\t\t17\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t18\tIfcWindowPanelProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t02670d9e-cc6e-47b7-ab1d-bb61a515460d\tIfcWindowPanelProperties.FrameDepth\tLENGTH\t\t18\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t28649af1-d491-4ed6-98ce-d33f3a0e0650\tIfcWindowPanelProperties.FrameThickness\tLENGTH\t\t18\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc713faf1-20ad-485f-9448-6a6c05798a0d\tIfcWindowPanelProperties.OperationType\tTEXT\t\t18\t1\tIfcLabel\t1\nPARAM\t9a076e02-f029-4c39-aaa3-b35067475c67\tIfcWindowPanelProperties.PanelPosition\tTEXT\t\t18\t1\tIfcLabel\t1\n#\nGROUP\t19\tPset_ActionRequest\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf0b0c900-d1bc-11e1-8000-00215ad4efdf\tPset_ActionRequest.RequestComments\tTEXT\t\t19\t1\tIfcText\t1\nPARAM\t8c0bc2cf-c34c-46e5-8da4-4dc9d3268e70\tPset_ActionRequest.RequestDescription\tTEXT\t\t19\t1\tIfcText\t1\nPARAM\te098e980-d1bc-11e1-8000-00215ad4efdf\tPset_ActionRequest.RequestSourceLabel\tTEXT\t\t19\t1\tIfcLabel\t1\nPARAM\teabae800-d1bc-11e1-8000-00215ad4efdf\tPset_ActionRequest.RequestSourceName\tMULTILINETEXT\t\t19\t1\tIfcPerson\t1\nPARAM\t2db759d8-9ced-4100-8794-c73ba0aeff2f\tPset_ActionRequest.RequestSourceType\tTEXT\t\t19\t1\tPEnum_RequestSourceType\t1\nPARAM\t1e2f2317-f0c3-4ede-85a0-e9ea5ff680cd\tPset_ActionRequest.Status\tTEXT\t\t19\t1\tPEnum_RequestStatus\t1\n#\nGROUP\t20\tPset_ActorCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tffc56c44-f18f-42ce-b03b-cb77c9d66a04\tPset_ActorCommon.ActorCategory\tTEXT\t\t20\t1\tIfcLabel\t1\nPARAM\t06be8980-d1bd-11e1-8000-00215ad4efdf\tPset_ActorCommon.Category\tTEXT\t\t20\t1\tIfcLabel\t1\nPARAM\t00c8a880-d1bd-11e1-8000-00215ad4efdf\tPset_ActorCommon.NumberOfActors\tINTEGER\t\t20\t1\tIfcCountMeasure\t1\nPARAM\t0c1bd400-d1bd-11e1-8000-00215ad4efdf\tPset_ActorCommon.SkillLevel\tTEXT\t\t20\t1\tIfcLabel\t1\n#\nGROUP\t21\tPset_ActuatorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t16d66900-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorPHistory.Position\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\nPARAM\td4b10e20-33ae-4027-88aa-13d94eca29f9\tPset_ActuatorPHistory.PositionHistory\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\nPARAM\t1b028680-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorPHistory.Quality\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\nPARAM\t50daeefe-5607-4f11-a1b5-f09f424e4ce1\tPset_ActuatorPHistory.QualityHistory\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\nPARAM\t1dfd7700-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorPHistory.Status\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\nPARAM\t76720899-bfca-4d7b-b2d0-f967965feb7d\tPset_ActuatorPHistory.StatusHistory\tMULTILINETEXT\t\t21\t1\tIfcTimeSeries\t1\n#\nGROUP\t22\tPset_ActuatorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te2ef4d8d-7c34-4cfb-ae24-d73f6da72bb7\tPset_ActuatorTypeCommon.ActuatorApplication\tTEXT\t\t22\t1\tPEnum_ActuatorApplication\t1\nPARAM\te25d05ee-413b-4ac2-9608-7b808fa428d2\tPset_ActuatorTypeCommon.ActuatorStatus\tTEXT\t\t22\t1\tPEnum_ElementStatus\t1\nPARAM\t3469a249-4193-4603-a1c9-c402d5623291\tPset_ActuatorTypeCommon.Application\tTEXT\t\t22\t1\tPEnum_ActuatorApplication\t1\nPARAM\t42595380-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeCommon.FailPosition\tTEXT\t\t22\t1\tPEnum_FailPosition\t1\nPARAM\t4dac7f00-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeCommon.ManualOverride\tYESNO\t\t22\t1\tIfcBoolean\t1\nPARAM\t2a81cf80-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeCommon.Reference\tTEXT\t\t22\t1\tIfcIdentifier\t1\nPARAM\t2f468380-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeCommon.Status\tTEXT\t\t22\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t23\tPset_ActuatorTypeElectricActuator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t58ffaa80-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeElectricActuator.ActuatorInputPower\tNUMBER\t\t23\t1\tIfcPowerMeasure\t1\nPARAM\tc930e454-97ac-4b59-b549-a8a048fda2b1\tPset_ActuatorTypeElectricActuator.ControlPulseCurrent\tNUMBER\t\t23\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t5ef58b80-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeElectricActuator.ElectricActuatorType\tTEXT\t\t23\t1\tPEnum_ElectricActuatorType\t1\n#\nGROUP\t24\tPset_ActuatorTypeHydraulicActuator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7af92d00-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeHydraulicActuator.InputFlowrate\tNUMBER\t\t24\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t759be280-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeHydraulicActuator.InputPressure\tNUMBER\t\t24\t1\tIfcPressureMeasure\t1\n#\nGROUP\t25\tPset_ActuatorTypeLinearActuation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t877d8580-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeLinearActuation.Force\tNUMBER\t\t25\t1\tIfcForceMeasure\t1\nPARAM\t8cdad000-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeLinearActuation.Stroke\tLENGTH\t\t25\t1\tIfcLengthMeasure\t1\n#\nGROUP\t26\tPset_ActuatorTypePneumaticActuator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta24ffa00-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypePneumaticActuator.InputFlowrate\tNUMBER\t\t26\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t9c5a1900-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypePneumaticActuator.InputPressure\tNUMBER\t\t26\t1\tIfcPressureMeasure\t1\n#\nGROUP\t27\tPset_ActuatorTypeRotationalActuation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb8f65100-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeRotationalActuation.RangeAngle\tNUMBER\t\t27\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tb1cf4300-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeRotationalActuation.Torque\tNUMBER\t\t27\t1\tIfcTorqueMeasure\t1\n#\nGROUP\t28\tPset_Address\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tea2ec196-d2db-4b2a-889d-7d807dca72cc\tPset_Address.AddressLines\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\nPARAM\t97739c9c-ad63-4799-b29d-8275969a38b5\tPset_Address.Country\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\tec568eba-f3bd-4eff-a908-91d2d173b46d\tPset_Address.Description\tTEXT\t\t28\t1\tIfcText\t1\nPARAM\t7fcfd63c-4209-4426-ac6e-44cdf36a917b\tPset_Address.ElectronicMailAddresses\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\nPARAM\t3efdc176-b8d8-4ccc-a4d2-af24c550a5d7\tPset_Address.FacsimileNumbers\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\nPARAM\t4fb77032-0a1f-45b2-a4c0-8e29766d959f\tPset_Address.InternalLocation\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\td8dba93f-a559-4116-ba98-f2f4b02a44ad\tPset_Address.MessagingIDs\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\nPARAM\t8e3df059-7dc5-4e23-953a-de12d3e924fc\tPset_Address.PagerNumber\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\tf591c7f3-61e0-4aa0-ac11-1d29a2aa1908\tPset_Address.PostalBox\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t5def99a7-1f73-4704-9bc7-1f2b9a3451cf\tPset_Address.PostalCode\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t44ddba8f-2a25-4acf-b78c-9cae7c6e3c90\tPset_Address.Purpose\tTEXT\t\t28\t1\tPEnum_AddressType\t1\nPARAM\tff5e1171-1bc8-419a-9ca1-abe48a10cb56\tPset_Address.Region\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\te79009b9-b18f-4314-a2ae-db4d23a41c93\tPset_Address.TelephoneNumbers\tMULTILINETEXT\t\t28\t1\tPropertyListValue\t1\nPARAM\t920d734c-fa24-4413-aafb-c0521b9ba711\tPset_Address.Town\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t365218b5-2aae-4c3d-97ca-4d2fac3cc5a7\tPset_Address.UserDefinedPurpose\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t05c84b83-e6ce-4f80-8289-d8d051751867\tPset_Address.WWWHomePageURL\tURL\t\t28\t1\tIfcURIReference\t1\n#\nGROUP\t29\tPset_AirSideSystemInformation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0ecaf900-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.AirflowSensible\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\td2bc70cb-ed82-40ee-a5c4-a21e1ea823f3\tPset_AirSideSystemInformation.AirFlowSensible\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tf3f88480-d1bd-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.AirSideSystemDistributionType\tTEXT\t\t29\t1\tPEnum_AirSideSystemDistributionType\t1\nPARAM\td62b1f80-d1bd-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.AirSideSystemType\tTEXT\t\t29\t1\tPEnum_AirSideSystemType\t1\nPARAM\t31f5a880-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.ApplianceDiversity\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t43d74b80-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.CoolingTemperatureDelta\tNUMBER\t\t29\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\td0353e80-d1bd-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.Description\tTEXT\t\t29\t1\tIfcText\t1\nPARAM\t14284380-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.EnergyGainSensible\tNUMBER\t\t29\t1\tIfcPowerMeasure\t1\nPARAM\t08d51800-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.EnergyGainTotal\tNUMBER\t\t29\t1\tIfcPowerMeasure\t1\nPARAM\t1ab6bb00-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.EnergyLoss\tNUMBER\t\t29\t1\tIfcPowerMeasure\t1\nPARAM\t4fc30d80-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.FanPower\tNUMBER\t\t29\t1\tIfcPowerMeasure\t1\nPARAM\t3de16a80-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.HeatingTemperatureDelta\tNUMBER\t\t29\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t2609e680-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.InfiltrationDiversitySummer\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t2b673100-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.InfiltrationDiversityWinter\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t20ac9c00-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.LightingDiversity\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t37eb8980-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.LoadSafetyFactor\tNUMBER\t\t29\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc9a6c700-d1bd-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.Name\tTEXT\t\t29\t1\tIfcLabel\t1\nPARAM\t0377cd80-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.TotalAirflow\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t2308b17a-7bee-4dde-b2fc-d20ba300755e\tPset_AirSideSystemInformation.TotalAirFlow\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t49cd2c80-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.Ventilation\tNUMBER\t\t29\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t30\tPset_AirTerminalBoxPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t68cbbe80-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxPHistory.AirflowCurve\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\nPARAM\tc761b8db-b75a-49f1-afd3-ef4457730182\tPset_AirTerminalBoxPHistory.AirFlowCurve\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\nPARAM\t61a4b080-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxPHistory.AtmosphericPressure\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\nPARAM\t5d789300-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxPHistory.DamperPosition\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\nPARAM\t65383780-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxPHistory.Sound\tMULTILINETEXT\t\t30\t1\tIfcTimeSeries\t1\n#\nGROUP\t31\tPset_AirTerminalBoxTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8c8f0480-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.AirflowRateRange\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\nPARAM\t53b968f4-6d9f-4f8e-a063-0dc4f979036b\tPset_AirTerminalBoxTypeCommon.AirFlowRateRange\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\nPARAM\t99135d00-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.AirPressureRange\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\nPARAM\ta7617900-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.ArrangementType\tTEXT\t\t31\t1\tPEnum_AirTerminalBoxArrangementType\t1\nPARAM\td37cfa00-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.HasFan\tYESNO\t\t31\t1\tIfcBoolean\t1\nPARAM\tcd871900-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.HasReturnAir\tYESNO\t\t31\t1\tIfcBoolean\t1\nPARAM\tc829ce80-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.HasSoundAttenuator\tYESNO\t\t31\t1\tIfcBoolean\t1\nPARAM\te4c60680-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.HousingThickness\tLENGTH\t\t31\t1\tIfcLengthMeasure\t1\nPARAM\t2541b902-afca-4f97-b050-2df42d1f859e\tPset_AirTerminalBoxTypeCommon.Material\tMULTILINETEXT\t\t31\t1\tIfcMaterial\t1\nPARAM\ta16b9800-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.NominalAirFlowRate\tNUMBER\t\t31\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tdf68bc00-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.NominalDamperDiameter\tLENGTH\t\t31\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td972db00-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.NominalInletAirPressure\tNUMBER\t\t31\t1\tIfcPressureMeasure\t1\nPARAM\teabbe780-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.OperationTemperatureRange\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\nPARAM\t76814400-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.Reference\tTEXT\t\t31\t1\tIfcIdentifier\t1\nPARAM\tb5af9500-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.ReheatType\tTEXT\t\t31\t1\tPEnum_AirTerminalBoxReheatType\t1\nPARAM\tf1e2f580-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.ReturnAirFractionRange\tMULTILINETEXT\t\t31\t1\tPropertyBoundedValue\t1\nPARAM\t7d0fbb80-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.Status\tTEXT\t\t31\t1\tPEnum_ElementStatus\t1\nPARAM\t6ed2531a-bc2f-4092-a9e9-1372f7805462\tPset_AirTerminalBoxTypeCommon.Weight\tNUMBER\t\t31\t1\tIfcMassMeasure\t1\n#\nGROUP\t32\tPset_AirTerminalOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t89dd48d1-b318-4f25-99c1-2f06ce904666\tPset_AirTerminalOccurrence.AirFlowRate\tNUMBER\t\t32\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t00311180-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalOccurrence.AirflowType\tTEXT\t\t32\t1\tPEnum_AirTerminalAirflowType\t1\nPARAM\t7e718371-48bf-42c5-ac90-2db54674c2a8\tPset_AirTerminalOccurrence.AirFlowType\tTEXT\t\t32\t1\tPEnum_AirTerminalAirFlowType\t1\nPARAM\t89c46fde-3529-4d40-bc80-00359c777462\tPset_AirTerminalOccurrence.AirTerminalLocation\tTEXT\t\t32\t1\tPEnum_AirTerminalLocation\t1\nPARAM\t0fb05a80-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalOccurrence.Location\tTEXT\t\t32\t1\tPEnum_AirTerminalLocation\t1\n#\nGROUP\t33\tPset_AirTerminalPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2b1b6580-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.AirFlowRate\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\nPARAM\t80c9b247-5a67-4036-835a-d70c29bfbadb\tPset_AirTerminalPHistory.AirFlowRateHistory\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\nPARAM\t46867080-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.CenterlineAirVelocity\tMULTILINETEXT\t\t33\t1\tPropertyTableValue\t1\nPARAM\t3d959f00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.InductionRatio\tMULTILINETEXT\t\t33\t1\tPropertyTableValue\t1\nPARAM\t2eaeec80-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.NeckAirVelocity\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\nPARAM\t3a9aae80-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.PressureDrop\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\nPARAM\t366e9100-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.SupplyAirTemperatureCooling\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\nPARAM\t32db0a00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.SupplyAirTemperatureHeating\tMULTILINETEXT\t\t33\t1\tIfcTimeSeries\t1\n#\nGROUP\t34\tPset_AirTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tddebc380-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.AirDiffusionPerformanceIndex\tNUMBER\t\t34\t1\tIfcReal\t1\nPARAM\tb72d8d00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.AirFlowrateRange\tMULTILINETEXT\t\t34\t1\tPropertyBoundedValue\t1\nPARAM\td7c1210a-6c7e-42bc-b25e-170fd92ba51f\tPset_AirTerminalTypeCommon.AirFlowRateRange\tMULTILINETEXT\t\t34\t1\tPropertyBoundedValue\t1\nPARAM\t505ca380-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.AirFlowrateVersusFlowControlElement\tMULTILINETEXT\t\t34\t1\tPropertyTableValue\t1\nPARAM\t7ae2932c-9d06-4cba-97fe-4ad256f4d580\tPset_AirTerminalTypeCommon.AirTerminalMountingType\tTEXT\t\t34\t1\tPEnum_AirTerminalMountingType\t1\nPARAM\t31d7c997-83b2-4ca9-8d48-636606ed5711\tPset_AirTerminalTypeCommon.AirTerminalShape\tTEXT\t\t34\t1\tPEnum_AirTerminalShape\t1\nPARAM\t1ab7ba80-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.CoreSetHorizontal\tNUMBER\t\t34\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t1f7c6e80-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.CoreSetVertical\tNUMBER\t\t34\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t070c5400-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.CoreType\tTEXT\t\t34\t1\tPEnum_AirTerminalCoreType\t1\nPARAM\tc6acd600-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.DischargeDirection\tTEXT\t\t34\t1\tPEnum_AirTerminalDischargeDirection\t1\nPARAM\t49ce2c00-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.EffectiveArea\tAREA\t\t34\t1\tIfcAreaMeasure\t1\nPARAM\t7b92c300-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.FaceType\tTEXT\t\t34\t1\tPEnum_AirTerminalFaceType\t1\nPARAM\tf065fd00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.FinishColor\tTEXT\t\t34\t1\tIfcLabel\t1\nPARAM\t6b445b69-ab09-4efc-841c-81778d98f369\tPset_AirTerminalTypeCommon.FinishColour\tTEXT\t\t34\t1\tIfcLabel\t1\nPARAM\te3490e00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.FinishType\tTEXT\t\t34\t1\tPEnum_AirTerminalFinishType\t1\nPARAM\t2a370380-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.FlowControlType\tTEXT\t\t34\t1\tPEnum_AirTerminalFlowControlType\t1\nPARAM\ta250f980-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.FlowPattern\tTEXT\t\t34\t1\tPEnum_AirTerminalFlowPattern\t1\nPARAM\t25724f80-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.HasIntegralControl\tYESNO\t\t34\t1\tIfcBoolean\t1\nPARAM\t39b64c80-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.HasSoundAttenuator\tYESNO\t\t34\t1\tIfcBoolean\t1\nPARAM\t3f139700-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.HasThermalInsulation\tYESNO\t\t34\t1\tIfcBoolean\t1\nPARAM\t33956234-46ca-44bc-b8dc-5a3cb86a4cbe\tPset_AirTerminalTypeCommon.Material\tMULTILINETEXT\t\t34\t1\tIfcMaterial\t1\nPARAM\tf6f47480-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.MountingType\tTEXT\t\t34\t1\tPEnum_AirTerminalMountingType\t1\nPARAM\t4470e180-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.NeckArea\tAREA\t\t34\t1\tIfcAreaMeasure\t1\nPARAM\t9c5b1880-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.NumberOfSlots\tINTEGER\t\t34\t1\tIfcCountMeasure\t1\nPARAM\t5605b980-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.Reference\tTEXT\t\t34\t1\tIfcIdentifier\t1\nPARAM\t6b7ae380-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.Shape\tTEXT\t\t34\t1\tPEnum_AirTerminalShape\t1\nPARAM\t96653780-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.SlotLength\tLENGTH\t\t34\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9107ed00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.SlotWidth\tLENGTH\t\t34\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5c943100-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.Status\tTEXT\t\t34\t1\tPEnum_ElementStatus\t1\nPARAM\tbe549b00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.TemperatureRange\tMULTILINETEXT\t\t34\t1\tPropertyBoundedValue\t1\nPARAM\td4faf200-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.ThrowLength\tLENGTH\t\t34\t1\tIfcLengthMeasure\t1\nPARAM\tc643b188-6fcb-4295-afe2-f8b2a8ec4741\tPset_AirTerminalTypeCommon.Weight\tNUMBER\t\t34\t1\tIfcMassMeasure\t1\n#\nGROUP\t35\tPset_AirTerminalTypeRectangular\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf8e35078-32bf-4ace-a622-cbdf35eaeafd\tPset_AirTerminalTypeRectangular.FaceType\tTEXT\t\t35\t1\tPEnum_AirTerminalFaceType\t1\n#\nGROUP\t36\tPset_AirTerminalTypeRound\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3c0c07b7-7b11-4baa-8bf6-21f49fbb96e4\tPset_AirTerminalTypeRound.FaceType\tTEXT\t\t36\t1\tPEnum_AirTerminalFaceType\t1\n#\nGROUP\t37\tPset_AirTerminalTypeSlot\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf87a0706-b001-40e0-a33e-461e74301bb1\tPset_AirTerminalTypeSlot.NumberOfSlots\tINTEGER\t\t37\t1\tIfcInteger\t1\nPARAM\tcc47ea83-7381-4059-ad6c-6c06ff1d0a31\tPset_AirTerminalTypeSlot.SlotLength\tLENGTH\t\t37\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9d5cd335-d12b-4a71-b8c1-3a55bb99c000\tPset_AirTerminalTypeSlot.SlotWidth\tLENGTH\t\t37\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t38\tPset_AirTerminalTypeSquare\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t27497358-c7b5-4532-82e1-83b21f708b10\tPset_AirTerminalTypeSquare.FaceType\tTEXT\t\t38\t1\tPEnum_AirTerminalFaceType\t1\n#\nGROUP\t39\tPset_AirToAirHeatRecoveryPHist\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t27eb9571-b1ec-4dc8-878d-a3ed3222b6ee\tPset_AirToAirHeatRecoveryPHist.AirPressureDropCurves\tNUMBER\t\t39\t1\tIfcReal\t1\nPARAM\tefb4407f-31fc-40ec-97bb-736b463d3f13\tPset_AirToAirHeatRecoveryPHist.DefrostTemperatureEffectiveness\tNUMBER\t\t39\t1\tIfcReal\t1\nPARAM\td57b9973-d2f5-46d3-a06a-85cf0c08ead7\tPset_AirToAirHeatRecoveryPHist.HumidityEffectiveness\tTEXT\t\t39\t1\tIfcLabel\t1\nPARAM\ta152c3e4-634a-4107-a4de-2a272c18b9f9\tPset_AirToAirHeatRecoveryPHist.LatentHeatTransferRate\tNUMBER\t\t39\t1\tIfcReal\t1\nPARAM\t3e9c1eb9-4716-48ad-8230-53b12de5f41e\tPset_AirToAirHeatRecoveryPHist.SensibleEffectiveness\tTEXT\t\t39\t1\tIfcLabel\t1\nPARAM\t4f028650-adb3-49c1-a52b-22d477ed500f\tPset_AirToAirHeatRecoveryPHist.SensibleEffectivenessTable\tTEXT\t\t39\t1\tIfcLabel\t1\nPARAM\t007eac23-159e-439f-99bb-e3ba5aec66c1\tPset_AirToAirHeatRecoveryPHist.SensibleHeatTransferRate\tNUMBER\t\t39\t1\tIfcReal\t1\nPARAM\t9b52b73c-93dd-4a4c-9c07-df156aaca8fc\tPset_AirToAirHeatRecoveryPHist.TemperatureEffectiveness\tNUMBER\t\t39\t1\tIfcReal\t1\nPARAM\tabac66cb-607a-462e-b17e-797852a90084\tPset_AirToAirHeatRecoveryPHist.TotalEffectiveness\tTEXT\t\t39\t1\tIfcLabel\t1\nPARAM\t62082fd3-1099-4f12-9633-2c49087c885c\tPset_AirToAirHeatRecoveryPHist.TotalEffectivenessTable\tTEXT\t\t39\t1\tIfcLabel\t1\nPARAM\t4cb9f2c4-2567-44c2-b63c-dce12a8e9156\tPset_AirToAirHeatRecoveryPHist.TotalHeatTransferRate\tNUMBER\t\t39\t1\tIfcReal\t1\n#\nGROUP\t40\tPset_AirToAirHeatRecoveryPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t86018c80-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.AirPressureDropCurves\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t6c604500-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.DefrostTemperatureEffectiveness\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t6f5b3580-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.HumidityEffectiveness\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t77b37080-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.LatentHeatTransferRate\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t60748300-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.SensibleEffectiveness\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t7eda7e80-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.SensibleEffectivenessTable\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t73875300-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.SensibleHeatTransferRate\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t679b9100-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.TemperatureEffectiveness\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t64080a00-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.TotalEffectiveness\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t826e0580-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.TotalEffectivenessTable\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\nPARAM\t7b46f780-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.TotalHeatTransferRate\tMULTILINETEXT\t\t40\t1\tIfcTimeSeries\t1\n#\nGROUP\t41\tPset_AirToAirHeatRecoveryTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb77a5800-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.HasDefrost\tYESNO\t\t41\t1\tIfcBoolean\t1\nPARAM\ta893a580-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.HeatTransferType\tTEXT\t\t41\t1\tPEnum_HeatTransferType\t1\nPARAM\t346af719-a0a9-4f7f-a9ab-851e048f1fe9\tPset_AirToAirHeatRecoveryTypeCommon.HeatTransferTypeEnum\tTEXT\t\t41\t1\tPEnum_AirToAirHeatTransferHeatTransferType\t1\nPARAM\tf73bc628-554c-4f5b-b61a-17163f69fd5b\tPset_AirToAirHeatRecoveryTypeCommon.MediaMaterial\tMULTILINETEXT\t\t41\t1\tIfcMaterial\t1\nPARAM\tbea16600-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.OperationalTemperatureRange\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\td1b43600-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.PrimaryAirflowRateRange\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\tc947c84d-7844-4ecd-852c-efae8ae50d32\tPset_AirToAirHeatRecoveryTypeCommon.PrimaryAirFlowRateRange\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\t9285e500-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.Reference\tTEXT\t\t41\t1\tIfcIdentifier\t1\nPARAM\tdb3d9e00-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.SecondaryAirflowRateRange\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\ta693241a-b8fd-460c-9e20-51887fe3144c\tPset_AirToAirHeatRecoveryTypeCommon.SecondaryAirFlowRateRange\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\t987bc600-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.Status\tTEXT\t\t41\t1\tPEnum_ElementStatus\t1\nPARAM\t4ebb5f4f-ca9e-4b83-b165-2789d7056674\tPset_AirToAirHeatRecoveryTypeCommon.Weight\tNUMBER\t\t41\t1\tIfcMassMeasure\t1\n#\nGROUP\t42\tPset_AlarmPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf90b0300-d1c0-11e1-8000-00215ad4efdf\tPset_AlarmPHistory.Acknowledge\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\nPARAM\tef819b00-d1c0-11e1-8000-00215ad4efdf\tPset_AlarmPHistory.Condition\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\nPARAM\t9ed9b03d-1275-49da-a05a-d9c6a4efe2b6\tPset_AlarmPHistory.ConditionHistory\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\nPARAM\tea245080-d1c0-11e1-8000-00215ad4efdf\tPset_AlarmPHistory.Enabled\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\nPARAM\tf3adb880-d1c0-11e1-8000-00215ad4efdf\tPset_AlarmPHistory.Severity\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\nPARAM\tfc9e8a00-d1c0-11e1-8000-00215ad4efdf\tPset_AlarmPHistory.User\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\nPARAM\t721fbb3d-3c3b-435d-a154-44715ab19249\tPset_AlarmPHistory.UserHistory\tMULTILINETEXT\t\t42\t1\tIfcTimeSeries\t1\n#\nGROUP\t43\tPset_AlarmTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6601212c-85b8-4738-95fe-ba4b511a3027\tPset_AlarmTypeCommon.AlarmCondition\tMULTILINETEXT\t\t43\t1\tPropertyTableValue\t1\nPARAM\t222b9380-d1c1-11e1-8000-00215ad4efdf\tPset_AlarmTypeCommon.Condition\tMULTILINETEXT\t\t43\t1\tPropertyTableValue\t1\nPARAM\t088a4c00-d1c1-11e1-8000-00215ad4efdf\tPset_AlarmTypeCommon.Reference\tTEXT\t\t43\t1\tIfcIdentifier\t1\nPARAM\t0e802d00-d1c1-11e1-8000-00215ad4efdf\tPset_AlarmTypeCommon.Status\tTEXT\t\t43\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t44\tPset_AlignmentCantSegmentCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta23e9bff-3693-4649-9c3e-275e24c80592\tPset_AlignmentCantSegmentCommon.CantDeficiency\tLENGTH\t\t44\t1\tIfcLengthMeasure\t1\nPARAM\t1affb6d3-07ef-445d-aa95-86e014adcf7a\tPset_AlignmentCantSegmentCommon.CantEquilibrium\tLENGTH\t\t44\t1\tIfcLengthMeasure\t1\nPARAM\ta5f7df81-4437-4975-a1d8-a3fae03aa345\tPset_AlignmentCantSegmentCommon.EndSmoothingLength\tLENGTH\t\t44\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc99f39c4-d58f-45e7-9672-a39c19756aa4\tPset_AlignmentCantSegmentCommon.StartSmoothingLength\tLENGTH\t\t44\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t45\tPset_AlignmentVerticalSegmentCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8b43e046-d620-4c62-8fd1-c94d5caa7b83\tPset_AlignmentVerticalSegmentCommon.EndElevation\tLENGTH\t\t45\t1\tIfcLengthMeasure\t1\nPARAM\tcffd7763-9d2a-4606-bce2-fe53daf86bfa\tPset_AlignmentVerticalSegmentCommon.StartElevation\tLENGTH\t\t45\t1\tIfcLengthMeasure\t1\n#\nGROUP\t46\tPset_AnalogInput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfa6452bc-f5fc-4e69-90e8-89a36533dff7\tPset_AnalogInput.Deadband\tNUMBER\t\t46\t1\tIfcReal\t1\nPARAM\tb89abf03-3a4a-45f4-933d-8d7dc547605f\tPset_AnalogInput.EventEnable\tTEXT\t\t46\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\t16f1b03c-c21f-45b6-824b-ad86b447ce68\tPset_AnalogInput.HighLimit\tNUMBER\t\t46\t1\tIfcReal\t1\nPARAM\t1aeb83e6-5776-4946-9070-0b95b1b800c0\tPset_AnalogInput.HighLimitEnable\tYESNO\t\t46\t1\tIfcBoolean\t1\nPARAM\t941278cb-7b6a-4457-994b-b3b168148654\tPset_AnalogInput.LowLimit\tNUMBER\t\t46\t1\tIfcReal\t1\nPARAM\tf4913bac-ae18-475a-818d-8e27a1d3cbbe\tPset_AnalogInput.LowLimitEnable\tYESNO\t\t46\t1\tIfcBoolean\t1\nPARAM\t116a96bd-30ce-4ac9-8252-f8c05867fbd7\tPset_AnalogInput.NotifyType\tTEXT\t\t46\t1\tPEnum_BACnetNotifyType\t1\n#\nGROUP\t47\tPset_AnalogOutput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5f8d29eb-3002-407d-b4aa-7bef6e0f3848\tPset_AnalogOutput.Deadband\tNUMBER\t\t47\t1\tIfcReal\t1\nPARAM\tb570c8a8-bf39-4bce-b34c-2584b56b22fa\tPset_AnalogOutput.EventEnable\tTEXT\t\t47\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\t5af76e92-19df-4973-95bb-a92ed243cf82\tPset_AnalogOutput.HighLimit\tNUMBER\t\t47\t1\tIfcReal\t1\nPARAM\t1f1acbc3-10ac-4f71-b04e-69aebf2f6a50\tPset_AnalogOutput.HighLimitEnable\tYESNO\t\t47\t1\tIfcBoolean\t1\nPARAM\t9376633f-755e-4875-9be2-a4cf2b3c6fe7\tPset_AnalogOutput.LowLimit\tNUMBER\t\t47\t1\tIfcReal\t1\nPARAM\t58d9b0f5-b4ea-4953-9d49-46fd6d8fb3b0\tPset_AnalogOutput.LowLimitEnable\tYESNO\t\t47\t1\tIfcBoolean\t1\nPARAM\t696e2703-b189-49ae-9014-2cab876d3b01\tPset_AnalogOutput.NotifyType\tTEXT\t\t47\t1\tPEnum_BACnetNotifyType\t1\n#\nGROUP\t48\tPset_AnnotationContourLine\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t340d3680-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationContourLine.ContourValue\tLENGTH\t\t48\t1\tIfcLengthMeasure\t1\n#\nGROUP\t49\tPset_AnnotationLineOfSight\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t51da9b80-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationLineOfSight.RoadVisibleDistanceLeft\tLENGTH\t\t49\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t57d07c80-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationLineOfSight.RoadVisibleDistanceRight\tLENGTH\t\t49\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t41c2bc00-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationLineOfSight.SetbackDistance\tLENGTH\t\t49\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t47b89d00-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationLineOfSight.VisibleAngleLeft\tANGLE\t\t49\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t4d15e780-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationLineOfSight.VisibleAngleRight\tANGLE\t\t49\t1\tIfcPositivePlaneAngleMeasure\t1\n#\nGROUP\t50\tPset_AnnotationSurveyArea\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7cc4ef80-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationSurveyArea.AccuracyQualityExpected\tNUMBER\t\t50\t1\tIfcRatioMeasure\t1\nPARAM\t76cf0e80-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationSurveyArea.AccuracyQualityObtained\tNUMBER\t\t50\t1\tIfcRatioMeasure\t1\nPARAM\t63bc3e80-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationSurveyArea.AcquisitionMethod\tTEXT\t\t50\t1\tPEnum_AcquisitionMethod\t1\n#\nGROUP\t51\tPset_Asset\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8a7a7500-d1c1-11e1-8000-00215ad4efdf\tPset_Asset.AssetAccountingType\tTEXT\t\t51\t1\tPEnum_AssetAccountingType\t1\nPARAM\ta847da00-d1c1-11e1-8000-00215ad4efdf\tPset_Asset.AssetInsuranceType\tTEXT\t\t51\t1\tPEnum_AssetInsuranceType\t1\nPARAM\t123c173e-3473-4bbe-b653-310a1ad57bed\tPset_Asset.AssetStatus\tTEXT\t\t51\t1\tIfcLabel\t1\nPARAM\t99f9be00-d1c1-11e1-8000-00215ad4efdf\tPset_Asset.AssetTaxType\tTEXT\t\t51\t1\tPEnum_AssetTaxType\t1\nPARAM\t25b34da7-711d-4b4a-98a6-d163fe12deca\tPset_Asset.AssetUse\tTEXT\t\t51\t1\tIfcLabel\t1\n#\nGROUP\t52\tPset_AudioVisualAppliancePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcad9f300-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualAppliancePHistory.AudioVolume\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t2a00533c-1599-4ea4-8878-78dd45fad9c6\tPset_AudioVisualAppliancePHistory.AudioVolumeHistory\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\tc7466c00-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualAppliancePHistory.MediaContent\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\tc31a4e80-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualAppliancePHistory.MediaSource\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t945d7b54-c44e-4105-8ca7-fa39235aa755\tPset_AudioVisualAppliancePHistory.MediaSourceHistory\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\tbd246d80-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualAppliancePHistory.PowerState\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\n#\nGROUP\t53\tPset_AudioVisualApplianceTypeAmplifier\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td7f6e200-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeAmplifier.AmplifierType\tTEXT\t\t53\t1\tPEnum_AudioVisualAmplifierType\t1\nPARAM\te644fe00-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeAmplifier.AudioAmplification\tMULTILINETEXT\t\t53\t1\tPropertyTableValue\t1\nPARAM\tee9d3900-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeAmplifier.AudioMode\tMULTILINETEXT\t\t53\t1\tPropertyTableValue\t1\n#\nGROUP\t54\tPset_AudioVisualApplianceTypeCamera\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfeb51880-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.CameraType\tTEXT\t\t54\t1\tPEnum_AudioVisualCameraType\t1\nPARAM\t0e346180-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.IsOutdoors\tYESNO\t\t54\t1\tIfcBoolean\t1\nPARAM\t34f29800-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.PanHorizontal\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\nPARAM\t2d32f380-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.PanTiltZoomPreset\tMULTILINETEXT\t\t54\t1\tPropertyTableValue\t1\nPARAM\t3c19a600-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.PanVertical\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\nPARAM\t42a81d80-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.TiltHorizontal\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\nPARAM\t489dfe80-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.TiltVertical\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\nPARAM\t25734f00-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.VideoCaptureInterval\tMULTILINETEXT\t\t54\t1\tPropertyTableValue\t1\nPARAM\t18eef680-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.VideoResolutionHeight\tINTEGER\t\t54\t1\tIfcInteger\t1\nPARAM\t1e4c4100-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.VideoResolutionMode\tMULTILINETEXT\t\t54\t1\tPropertyTableValue\t1\nPARAM\t1391ac00-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.VideoResolutionWidth\tINTEGER\t\t54\t1\tIfcInteger\t1\nPARAM\t4e93df80-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.Zoom\tMULTILINETEXT\t\t54\t1\tPropertyBoundedValue\t1\n#\nGROUP\t55\tPset_AudioVisualApplianceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t797e3380-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCommon.AudioVolume\tMULTILINETEXT\t\t55\t1\tPropertyTableValue\t1\nPARAM\t7125f880-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCommon.MediaSource\tMULTILINETEXT\t\t55\t1\tPropertyTableValue\t1\nPARAM\t5bb0ce80-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCommon.Reference\tTEXT\t\t55\t1\tIfcIdentifier\t1\nPARAM\t61a6af80-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCommon.Status\tTEXT\t\t55\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t56\tPset_AudioVisualApplianceTypeDisplay\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf6111200-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.AudioMode\tMULTILINETEXT\t\t56\t1\tPropertyTableValue\t1\nPARAM\tab8f9580-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.Brightness\tNUMBER\t\t56\t1\tIfcIlluminanceMeasure\t1\nPARAM\tb0ece000-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.ContrastRatio\tNUMBER\t\t56\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta6cae180-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.DisplayHeight\tLENGTH\t\t56\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8864e600-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.DisplayType\tTEXT\t\t56\t1\tPEnum_AudioVisualDisplayType\t1\nPARAM\ta03c6a00-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.DisplayWidth\tLENGTH\t\t56\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t99adf280-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.NominalSize\tLENGTH\t\t56\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb77b5780-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.RefreshRate\tNUMBER\t\t56\t1\tIfcFrequencyMeasure\t1\nPARAM\tbc400b80-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.TouchScreen\tTEXT\t\t56\t1\tPEnum_AudioVisualDisplayTouchScreen\t1\nPARAM\tedb8d700-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.VideoCaptionMode\tMULTILINETEXT\t\t56\t1\tPropertyTableValue\t1\nPARAM\td2e66280-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.VideoResolutionHeight\tINTEGER\t\t56\t1\tIfcInteger\t1\nPARAM\tda0d7080-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.VideoResolutionMode\tMULTILINETEXT\t\t56\t1\tPropertyTableValue\t1\nPARAM\tcbbf5480-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.VideoResolutionWidth\tINTEGER\t\t56\t1\tIfcInteger\t1\nPARAM\te42f6f00-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.VideoScaleMode\tMULTILINETEXT\t\t56\t1\tPropertyTableValue\t1\n#\nGROUP\t57\tPset_AudioVisualApplianceTypePlayer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1214b380-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypePlayer.PlayerMediaEject\tYESNO\t\t57\t1\tIfcBoolean\t1\nPARAM\t18a32b00-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypePlayer.PlayerMediaFormat\tMULTILINETEXT\t\t57\t1\tPropertyTableValue\t1\nPARAM\t04f7c480-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypePlayer.PlayerType\tTEXT\t\t57\t1\tPEnum_AudioVisualPlayerType\t1\n#\nGROUP\t58\tPset_AudioVisualApplianceTypeProjector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t28bb0a80-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeProjector.ProjectorType\tTEXT\t\t58\t1\tPEnum_AudioVisualProjectorType\t1\nPARAM\t54d68b80-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeProjector.VideoCaptionMode\tMULTILINETEXT\t\t58\t1\tPropertyTableValue\t1\nPARAM\t3a9cad80-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeProjector.VideoResolutionHeight\tINTEGER\t\t58\t1\tIfcInteger\t1\nPARAM\t412b2500-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeProjector.VideoResolutionMode\tMULTILINETEXT\t\t58\t1\tPropertyTableValue\t1\nPARAM\t34a6cc80-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeProjector.VideoResolutionWidth\tINTEGER\t\t58\t1\tIfcInteger\t1\nPARAM\t4b4d2380-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeProjector.VideoScaleMode\tMULTILINETEXT\t\t58\t1\tPropertyTableValue\t1\n#\nGROUP\t59\tPset_AudioVisualApplianceTypeRailwayCommunicationTerminal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1cbdc8ed-b11b-4554-a5be-c8ae0aabfe39\tPset_AudioVisualApplianceTypeRailwayCommunicationTerminal.RailwayCommunicationTerminalType\tTEXT\t\t59\t1\tPEnum_RailwayCommunicationTerminalType\t1\n#\nGROUP\t60\tPset_AudioVisualApplianceTypeReceiver\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a639500-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeReceiver.AudioAmplification\tMULTILINETEXT\t\t60\t1\tPropertyTableValue\t1\nPARAM\t83546680-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeReceiver.AudioMode\tMULTILINETEXT\t\t60\t1\tPropertyTableValue\t1\nPARAM\t6a4bb580-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeReceiver.ReceiverType\tTEXT\t\t60\t1\tPEnum_AudioVisualReceiverType\t1\n#\nGROUP\t61\tPset_AudioVisualApplianceTypeRecordingEquipment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfabb165d-5cfa-42cf-92ae-9e5ef0a32de1\tPset_AudioVisualApplianceTypeRecordingEquipment.NumberOfInterfaces\tMULTILINETEXT\t\t61\t1\tPropertyTableValue\t1\nPARAM\tdca9d920-2d79-480f-a8cb-721f7fc4ab88\tPset_AudioVisualApplianceTypeRecordingEquipment.StorageCapacity\tINTEGER\t\t61\t1\tIfcInteger\t1\n#\nGROUP\t62\tPset_AudioVisualApplianceTypeSpeaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc0b8f400-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeSpeaker.FrequencyResponse\tMULTILINETEXT\t\t62\t1\tPropertyTableValue\t1\nPARAM\tc7e00200-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeSpeaker.Impedence\tNUMBER\t\t62\t1\tIfcFrequencyMeasure\t1\nPARAM\tb860b900-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeSpeaker.SpeakerDriverSize\tMULTILINETEXT\t\t62\t1\tPropertyTableValue\t1\nPARAM\ta717ac80-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeSpeaker.SpeakerMounting\tTEXT\t\t62\t1\tPEnum_AudioVisualSpeakerMounting\t1\nPARAM\t949d7300-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeSpeaker.SpeakerType\tTEXT\t\t62\t1\tPEnum_AudioVisualSpeakerType\t1\n#\nGROUP\t63\tPset_AudioVisualApplianceTypeTuner\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tea721b00-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeTuner.TunerChannel\tMULTILINETEXT\t\t63\t1\tPropertyTableValue\t1\nPARAM\tf231bf80-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeTuner.TunerFrequency\tMULTILINETEXT\t\t63\t1\tPropertyBoundedValue\t1\nPARAM\te219e000-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeTuner.TunerMode\tMULTILINETEXT\t\t63\t1\tPropertyTableValue\t1\nPARAM\td3cbc400-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeTuner.TunerType\tTEXT\t\t63\t1\tPEnum_AudioVisualTunerType\t1\n#\nGROUP\t64\tPset_AxleCountingEquipment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e4af011-0995-40b0-9a1b-acccc8c052bd\tPset_AxleCountingEquipment.AxleCounterResponseTime\tNUMBER\t\t64\t1\tIfcTimeMeasure\t1\nPARAM\ta1d406e8-3383-49e4-8733-04a11dd25032\tPset_AxleCountingEquipment.AxleCountingEquipmentType\tTEXT\t\t64\t1\tPEnum_AxleCountingEquipmentType\t1\nPARAM\t13e8fb4e-5dbd-4bb1-884a-06d7a1bfeb4d\tPset_AxleCountingEquipment.DetectionRange\tLENGTH\t\t64\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t46277aa1-4427-4427-8c9f-bfe9ae101ed0\tPset_AxleCountingEquipment.FailureInformation\tTEXT\t\t64\t1\tIfcText\t1\nPARAM\t11544080-0acb-4baf-9a84-f267b65f9136\tPset_AxleCountingEquipment.ImpactParameter\tNUMBER\t\t64\t1\tIfcAccelerationMeasure\t1\nPARAM\tb45e911f-484e-400d-b9ac-a9ab3665db6b\tPset_AxleCountingEquipment.InsulationResistance\tNUMBER\t\t64\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t77f7f7ec-da4a-4d26-9dff-7e37c647724c\tPset_AxleCountingEquipment.MaximumVibration\tNUMBER\t\t64\t1\tIfcFrequencyMeasure\t1\nPARAM\t25ff24fe-70ef-4d97-8596-2dc3bfa15b52\tPset_AxleCountingEquipment.NominalWeight\tNUMBER\t\t64\t1\tIfcMassMeasure\t1\nPARAM\te9209757-9524-4a55-9ab9-75e2eacbc128\tPset_AxleCountingEquipment.OperationalTemperatureRange\tMULTILINETEXT\t\t64\t1\tPropertyBoundedValue\t1\nPARAM\te216aa62-5545-4e1d-ae9c-31d1220d3033\tPset_AxleCountingEquipment.RatedVoltage\tMULTILINETEXT\t\t64\t1\tPropertyBoundedValue\t1\n#\nGROUP\t65\tPset_BalanceWeightTensionerDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tce571ac6-08c5-4042-9744-0792cc872e02\tPset_BalanceWeightTensionerDesignCriteria.ReferenceDistanceRopeToPulley\tMULTILINETEXT\t\t65\t1\tPropertyTableValue\t1\nPARAM\t1c5a06a9-6da9-4efb-863c-b9f92a08e463\tPset_BalanceWeightTensionerDesignCriteria.ReferenceDistanceTensionerToGround\tMULTILINETEXT\t\t65\t1\tPropertyTableValue\t1\n#\nGROUP\t66\tPset_BeamCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t38871e80-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.FireRating\tTEXT\t\t66\t1\tIfcLabel\t1\nPARAM\t286f3f00-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.IsExternal\tYESNO\t\t66\t1\tIfcBoolean\t1\nPARAM\t33c26a80-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.LoadBearing\tYESNO\t\t66\t1\tIfcBoolean\t1\nPARAM\t04abf900-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.Reference\tTEXT\t\t66\t1\tIfcIdentifier\t1\nPARAM\t23aa8b00-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.Roll\tNUMBER\t\t66\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t1ee5d700-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.Slope\tNUMBER\t\t66\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t19888c80-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.Span\tLENGTH\t\t66\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0970ad00-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.Status\tTEXT\t\t66\t1\tPEnum_ElementStatus\t1\nPARAM\t2f964d00-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.ThermalTransmittance\tNUMBER\t\t66\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t67\tPset_BearingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e9369a5-1430-4187-8887-df92bc5051ee\tPset_BearingCommon.DisplacementAccommodated\tMULTILINETEXT\t\t67\t1\tPropertyListValue\t1\nPARAM\tb72dcbe7-2c40-4f19-87dd-1b5f9b2e8b3f\tPset_BearingCommon.RotationAccommodated\tMULTILINETEXT\t\t67\t1\tPropertyListValue\t1\n#\nGROUP\t68\tPset_BerthCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4edc66f2-8dd0-4bb3-9194-f702c5012f8f\tPset_BerthCommon.AbnormalBerthingFactor\tNUMBER\t\t68\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t3c248ea7-2b1b-41a7-8b75-7af90d8dabe0\tPset_BerthCommon.BerthApproach\tTEXT\t\t68\t1\tPEnum_BerthApproach\t1\nPARAM\t2ac88a60-3ec4-474b-95f5-144bd5ddcb7f\tPset_BerthCommon.BerthingAngle\tNUMBER\t\t68\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t8265c010-552d-4420-aa76-cb4f9d58e87f\tPset_BerthCommon.BerthingVelocity\tNUMBER\t\t68\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tad0cdce9-e8a7-417a-a085-b628657a834a\tPset_BerthCommon.BerthMode\tTEXT\t\t68\t1\tPEnum_BerthMode\t1\n#\nGROUP\t69\tPset_BinaryInput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2c503c85-1756-40ab-adb2-28f5f5ae7d83\tPset_BinaryInput.AckedTransitions\tTEXT\t\t69\t1\tPEnum_BACnetAckedTransitionsType\t1\nPARAM\t1a3e38ee-c9c2-4859-8a45-84d996b2b134\tPset_BinaryInput.ActiveText\tTEXT\t\t69\t1\tIfcText\t1\nPARAM\t5b202d39-7855-45db-a4f2-856632d25bca\tPset_BinaryInput.EventEnable\tTEXT\t\t69\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\t42343ab0-3652-4b37-ac7d-f6bf58b18e9f\tPset_BinaryInput.FeedbackValue\tTEXT\t\t69\t1\tPEnum_BACnetFeedbackValueType\t1\nPARAM\t22a15ce5-b93a-4076-b27c-92c101df0f56\tPset_BinaryInput.InactiveText\tTEXT\t\t69\t1\tIfcText\t1\nPARAM\t70d91f81-223b-4340-aa24-7ddb34225af9\tPset_BinaryInput.MinimumOffTime\tMULTILINETEXT\t\t69\t1\tIfcLocalTime\t1\nPARAM\t693f586d-f51b-44f8-8829-cc0597359530\tPset_BinaryInput.MinimumOnTime\tMULTILINETEXT\t\t69\t1\tIfcLocalTime\t1\nPARAM\td085e864-df23-44ce-81d5-265d936c84a9\tPset_BinaryInput.Polarity\tTEXT\t\t69\t1\tPEnum_PolarityEnum\t1\n#\nGROUP\t70\tPset_BinaryOutput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t55bc2a15-2281-4163-8c2f-c04c81ee3660\tPset_BinaryOutput.AckedTransitions\tTEXT\t\t70\t1\tPEnum_BACnetAckedTransitionsType\t1\nPARAM\t72ebf169-14ae-4fc9-bc57-0ab5a89b467b\tPset_BinaryOutput.ActiveText\tTEXT\t\t70\t1\tIfcText\t1\nPARAM\t3bb0add6-67f9-4b5f-bf8c-8ee25ec3acaa\tPset_BinaryOutput.AlarmValue\tTEXT\t\t70\t1\tPEnum_BACnetAlarmValueType\t1\nPARAM\te2d0b69b-dbd9-44d1-9211-5f6781c79da2\tPset_BinaryOutput.EventEnable\tTEXT\t\t70\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\t0fff6369-ff2a-4402-bbe6-6e4a3e1e74cb\tPset_BinaryOutput.InactiveText\tTEXT\t\t70\t1\tIfcText\t1\nPARAM\t8b3e2a79-7f23-4d65-ad66-4ff1f264f923\tPset_BinaryOutput.Polarity\tTEXT\t\t70\t1\tPEnum_PolarityEnum\t1\n#\nGROUP\t71\tPset_BoilerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5bb1ce00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.AuxiliaryEnergyConsumption\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\t584b2054-6000-45d4-8f3b-50e906f96a88\tPset_BoilerPHistory.CombustionChamberTemperature\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\t4a68c180-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.CombustionEfficiency\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\t50f73900-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.CombustionTemperature\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\t43da4a00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.EnergySourceConsumption\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\t56548380-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.Load\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\t476dd100-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.OperationalEfficiency\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\t53f22980-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.PartLoadRatio\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\t594f7400-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.PrimaryEnergyConsumption\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\t4dfc4880-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.WorkingPressure\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\nPARAM\t719bf881-63a8-49dc-84dc-59248dbf3a7c\tPset_BoilerPHistory.WorkingPressureHistory\tMULTILINETEXT\t\t71\t1\tIfcTimeSeries\t1\n#\nGROUP\t72\tPset_BoilerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tadf2ef00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.EnergySource\tTEXT\t\t72\t1\tPEnum_EnergySource\t1\nPARAM\t63baac0e-81a6-4be9-bff9-6530b2938844\tPset_BoilerTypeCommon.HeatOutput\tMULTILINETEXT\t\t72\t1\tPropertyListValue\t1\nPARAM\t84d25e80-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.HeatTransferSurfaceArea\tAREA\t\t72\t1\tIfcAreaMeasure\t1\nPARAM\t987dc500-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.IsWaterStorageHeater\tYESNO\t\t72\t1\tIfcBoolean\t1\nPARAM\t34aa656c-0810-4646-961b-c5f720cbdbf6\tPset_BoilerTypeCommon.Material\tMULTILINETEXT\t\t72\t1\tIfcMaterial\t1\nPARAM\t63a1c310-c82b-47a2-91b0-87e84fa76847\tPset_BoilerTypeCommon.NominalEfficiency\tMULTILINETEXT\t\t72\t1\tPropertyListValue\t1\nPARAM\ta9c6d180-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.NominalEnergyConsumption\tNUMBER\t\t72\t1\tIfcPowerMeasure\t1\nPARAM\t89971280-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.NominalPartLoadRatio\tMULTILINETEXT\t\t72\t1\tPropertyBoundedValue\t1\nPARAM\t7a17c980-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.OperatingMode\tTEXT\t\t72\t1\tPEnum_BoilerOperatingMode\t1\nPARAM\ta3d0f080-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.OutletTemperatureRange\tMULTILINETEXT\t\t72\t1\tPropertyBoundedValue\t1\nPARAM\t9ca9e280-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.PartialLoadEfficiencyCurves\tMULTILINETEXT\t\t72\t1\tPropertyTableValue\t1\nPARAM\t75ebac00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.PressureRating\tNUMBER\t\t72\t1\tIfcPressureMeasure\t1\nPARAM\t64a29f80-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.Reference\tTEXT\t\t72\t1\tIfcIdentifier\t1\nPARAM\t68cebd00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.Status\tTEXT\t\t72\t1\tPEnum_ElementStatus\t1\nPARAM\t8ef45d00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.WaterInletTemperatureRange\tMULTILINETEXT\t\t72\t1\tPropertyBoundedValue\t1\nPARAM\t9451a780-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.WaterStorageCapacity\tVOLUME\t\t72\t1\tIfcVolumeMeasure\t1\nPARAM\ta7a2b85b-721e-433d-868b-d6b05dfb35f0\tPset_BoilerTypeCommon.Weight\tNUMBER\t\t72\t1\tIfcMassMeasure\t1\n#\nGROUP\t73\tPset_BoilerTypeSteam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td2e76200-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeSteam.HeatOutput\tMULTILINETEXT\t\t73\t1\tPropertyTableValue\t1\nPARAM\tc82ccd00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeSteam.MaximumOutletPressure\tTEXT\t\t73\t1\tIfcLabel\t1\nPARAM\tcc58ea80-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeSteam.NominalEfficiency\tMULTILINETEXT\t\t73\t1\tPropertyTableValue\t1\nPARAM\tdc6566c5-4e49-430e-8877-fb26240241e0\tPset_BoilerTypeSteam.NominalEfficiencyTable\tMULTILINETEXT\t\t73\t1\tPropertyTableValue\t1\n#\nGROUP\t74\tPset_BoilerTypeWater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te4c90500-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeWater.HeatOutput\tMULTILINETEXT\t\t74\t1\tPropertyTableValue\t1\nPARAM\tde3a8d80-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeWater.NominalEfficiency\tMULTILINETEXT\t\t74\t1\tPropertyTableValue\t1\n#\nGROUP\t75\tPset_BoreholeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te692b18e-8cdc-4e9f-a330-56d33095c43b\tPset_BoreholeCommon.BoreholeState\tTEXT\t\t75\t1\tPEnum_BoreholeState\t1\nPARAM\tcdd5a459-c634-4511-8575-9e0ad5ebaca1\tPset_BoreholeCommon.CapDepth\tLENGTH\t\t75\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t075dd71a-13f8-48e3-9e78-3f0d11e3701b\tPset_BoreholeCommon.CapMaterial\tTEXT\t\t75\t1\tIfcLabel\t1\nPARAM\t972f5d47-c962-4f04-a7a2-c069216f6807\tPset_BoreholeCommon.FillingDepth\tLENGTH\t\t75\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcc5d11c9-b006-4d9d-b5c6-5fb385549732\tPset_BoreholeCommon.FillingMaterial\tTEXT\t\t75\t1\tIfcLabel\t1\nPARAM\ta6a38cb4-cb5e-46db-84e9-ec6755f2ecd6\tPset_BoreholeCommon.GroundwaterDepth\tLENGTH\t\t75\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc3354bb9-08ed-4346-b615-2d1b332c31fd\tPset_BoreholeCommon.LiningMaterial\tTEXT\t\t75\t1\tIfcLabel\t1\nPARAM\t6bbfc4e3-d472-4f6e-a3cf-3d49145b39b5\tPset_BoreholeCommon.LiningThickness\tLENGTH\t\t75\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t76\tPset_BoundedCourseCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t40e11591-9f20-4e6e-a417-2bacff602e5e\tPset_BoundedCourseCommon.SpreadingRate\tNUMBER\t\t76\t1\tIfcNumericMeasure\t1\n#\nGROUP\t77\tPset_BreakwaterCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf9340ea0-2a7b-45f4-8418-b49d684de3c5\tPset_BreakwaterCommon.Elevation\tLENGTH\t\t77\t1\tIfcLengthMeasure\t1\nPARAM\t0f19acc5-84e6-46d8-b1c6-7501ae6b556c\tPset_BreakwaterCommon.StructuralStyle\tTEXT\t\t77\t1\tIfcLabel\t1\n#\nGROUP\t78\tPset_BridgeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5136cac3-b2ad-4396-a329-1a00a1c3d105\tPset_BridgeCommon.StructureIndicator\tTEXT\t\t78\t1\tPEnum_StructureIndicator\t1\n#\nGROUP\t79\tPset_BuildingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te77bac68-4990-433f-9f31-92010d12f8d4\tPset_BuildingCommon.AncillaryFireUse\tTEXT\t\t79\t1\tIfcLabel\t1\nPARAM\tf5797b00-d1c4-11e1-8000-00215ad4efdf\tPset_BuildingCommon.BuildingID\tTEXT\t\t79\t1\tIfcIdentifier\t1\nPARAM\tff02e300-d1c4-11e1-8000-00215ad4efdf\tPset_BuildingCommon.ConstructionMethod\tTEXT\t\t79\t1\tIfcLabel\t1\nPARAM\t032f0080-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.FireProtectionClass\tTEXT\t\t79\t1\tIfcLabel\t1\nPARAM\t2de593e0-cb41-41d3-8ef9-3160bdc16e02\tPset_BuildingCommon.GrossAreaPlanned\tAREA\t\t79\t1\tIfcAreaMeasure\t1\nPARAM\t1510a380-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.GrossPlannedArea\tAREA\t\t79\t1\tIfcAreaMeasure\t1\nPARAM\t2a85cd80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.IsLandmarked\tYESNO\t\t79\t1\tIfcLogical\t1\nPARAM\tfa3e2f00-d1c4-11e1-8000-00215ad4efdf\tPset_BuildingCommon.IsPermanentID\tYESNO\t\t79\t1\tIfcBoolean\t1\nPARAM\t4646ea9d-7abc-415e-aacd-84a174588248\tPset_BuildingCommon.MainFireUse\tTEXT\t\t79\t1\tIfcLabel\t1\nPARAM\t193cc100-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.NetPlannedArea\tAREA\t\t79\t1\tIfcAreaMeasure\t1\nPARAM\t1d68de80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.NumberOfStoreys\tINTEGER\t\t79\t1\tIfcCountMeasure\t1\nPARAM\t104bef80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.OccupancyType\tTEXT\t\t79\t1\tIfcLabel\t1\nPARAM\tf0b4c700-d1c4-11e1-8000-00215ad4efdf\tPset_BuildingCommon.Reference\tTEXT\t\t79\t1\tIfcIdentifier\t1\nPARAM\t075b1e00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.SprinklerProtection\tYESNO\t\t79\t1\tIfcBoolean\t1\nPARAM\t0c1fd200-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.SprinklerProtectionAutomatic\tYESNO\t\t79\t1\tIfcBoolean\t1\nPARAM\t2194fc00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.YearOfConstruction\tTEXT\t\t79\t1\tIfcLabel\t1\nPARAM\t2659b000-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.YearOfLastRefurbishment\tTEXT\t\t79\t1\tIfcLabel\t1\n#\nGROUP\t80\tPset_BuildingElementProxyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t52753100-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyCommon.FireRating\tTEXT\t\t80\t1\tIfcLabel\t1\nPARAM\t46896f00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyCommon.IsExternal\tYESNO\t\t80\t1\tIfcBoolean\t1\nPARAM\t4ee1aa00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyCommon.LoadBearing\tYESNO\t\t80\t1\tIfcBoolean\t1\nPARAM\t35d8f900-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyCommon.Reference\tTEXT\t\t80\t1\tIfcIdentifier\t1\nPARAM\t3a051680-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyCommon.Status\tTEXT\t\t80\t1\tPEnum_ElementStatus\t1\nPARAM\t4ab58c80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyCommon.ThermalTransmittance\tNUMBER\t\t80\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t81\tPset_BuildingElementProxyProvisionForVoid\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6de03c00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyProvisionForVoid.Depth\tLENGTH\t\t81\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t69b41e80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyProvisionForVoid.Diameter\tLENGTH\t\t81\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t65880100-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyProvisionForVoid.Height\tLENGTH\t\t81\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5c972f80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyProvisionForVoid.Shape\tTEXT\t\t81\t1\tIfcLabel\t1\nPARAM\t720c5980-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyProvisionForVoid.System\tTEXT\t\t81\t1\tIfcLabel\t1\nPARAM\t615be380-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyProvisionForVoid.Width\tLENGTH\t\t81\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t82\tPset_BuildingStoreyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t89e3dd80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.AboveGround\tYESNO\t\t82\t1\tIfcLogical\t1\nPARAM\t90d13c17-d929-40f7-a08e-5780c6074e03\tPset_BuildingStoreyCommon.ElevationOfFFLRelative\tLENGTH\t\t82\t1\tIfcLengthMeasure\t1\nPARAM\t16fa4b69-3ddf-4bee-9a37-e58cf24c4bf4\tPset_BuildingStoreyCommon.ElevationOfSSLRelative\tLENGTH\t\t82\t1\tIfcLengthMeasure\t1\nPARAM\t82bccf80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.EntranceLevel\tYESNO\t\t82\t1\tIfcBoolean\t1\nPARAM\t944d5b00-0d7f-4743-a056-374b882a01b0\tPset_BuildingStoreyCommon.GrossAreaPlanned\tAREA\t\t82\t1\tIfcAreaMeasure\t1\nPARAM\ta08a3480-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.GrossPlannedArea\tAREA\t\t82\t1\tIfcAreaMeasure\t1\nPARAM\t9b2cea00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.LoadBearingCapacity\tNUMBER\t\t82\t1\tIfcPlanarForceMeasure\t1\nPARAM\tf7185f91-cdf7-4637-ad80-86d9be6d8d2d\tPset_BuildingStoreyCommon.NetAreaPlanned\tAREA\t\t82\t1\tIfcAreaMeasure\t1\nPARAM\ta5e77f00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.NetPlannedArea\tAREA\t\t82\t1\tIfcAreaMeasure\t1\nPARAM\t7d5f8500-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.Reference\tTEXT\t\t82\t1\tIfcIdentifier\t1\nPARAM\t90725500-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.SprinklerProtection\tYESNO\t\t82\t1\tIfcBoolean\t1\nPARAM\t95cf9f80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.SprinklerProtectionAutomatic\tYESNO\t\t82\t1\tIfcBoolean\t1\n#\nGROUP\t83\tPset_BuildingSystemCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb13aaa80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingSystemCommon.Reference\tTEXT\t\t83\t1\tIfcIdentifier\t1\n#\nGROUP\t84\tPset_BuildingUse\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbd266c80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.MarketCategory\tTEXT\t\t84\t1\tIfcLabel\t1\nPARAM\tf6f77300-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.MarketSubCategoriesAvailableFuture\tMULTILINETEXT\t\t84\t1\tPropertyListValue\t1\nPARAM\tdfb88580-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.MarketSubCategoriesAvailableNow\tMULTILINETEXT\t\t84\t1\tPropertyListValue\t1\nPARAM\tc31c4d80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.MarketSubCategory\tTEXT\t\t84\t1\tIfcLabel\t1\nPARAM\tcf080f80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.NarrativeText\tTEXT\t\t84\t1\tIfcText\t1\nPARAM\tc9122e80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.PlanningControlStatus\tTEXT\t\t84\t1\tIfcLabel\t1\nPARAM\tff4fae00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.RentalRatesInCategoryFuture\tMULTILINETEXT\t\t84\t1\tPropertyBoundedValue\t1\nPARAM\te5ae6680-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.RentalRatesInCategoryNow\tMULTILINETEXT\t\t84\t1\tPropertyBoundedValue\t1\nPARAM\tf1019200-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.TenureModesAvailableFuture\tMULTILINETEXT\t\t84\t1\tPropertyListValue\t1\nPARAM\td92a0e00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.TenureModesAvailableNow\tMULTILINETEXT\t\t84\t1\tPropertyListValue\t1\nPARAM\teba44780-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.VacancyRateInCategoryFuture\tNUMBER\t\t84\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td3ccc380-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.VacancyRateInCategoryNow\tNUMBER\t\t84\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t85\tPset_BuildingUseAdjacent\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0b3b7000-d1c6-11e1-8000-00215ad4efdf\tPset_BuildingUseAdjacent.MarketCategory\tTEXT\t\t85\t1\tIfcLabel\t1\nPARAM\t1098ba80-d1c6-11e1-8000-00215ad4efdf\tPset_BuildingUseAdjacent.MarketSubCategory\tTEXT\t\t85\t1\tIfcLabel\t1\nPARAM\t1c847c80-d1c6-11e1-8000-00215ad4efdf\tPset_BuildingUseAdjacent.NarrativeText\tTEXT\t\t85\t1\tIfcText\t1\nPARAM\t168e9b80-d1c6-11e1-8000-00215ad4efdf\tPset_BuildingUseAdjacent.PlanningControlStatus\tTEXT\t\t85\t1\tIfcLabel\t1\n#\nGROUP\t86\tPset_BuildingWaterStorage\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t91157314-7d65-41a5-8bbd-336f616720eb\tPset_BuildingWaterStorage.OneDayCoolingTowerMakeupWater\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\nPARAM\tc90f0479-603c-4fb4-a51f-6a6cf2fcc126\tPset_BuildingWaterStorage.OneDayEssentialWater\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\nPARAM\t41b31c2e-52ab-47d4-81a0-f513f664a972\tPset_BuildingWaterStorage.OneDayPotableWater\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\nPARAM\t7909c735-1593-4e9f-a522-176854576e71\tPset_BuildingWaterStorage.OneDayProcessOrProductionWater\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\nPARAM\td46b0252-1a53-4b07-b583-7eb95e8ba6b5\tPset_BuildingWaterStorage.WaterStorageRatePerPerson\tVOLUME\t\t86\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t87\tPset_BuiltSystemRailwayLine\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t042e761e-fb1c-4e3c-9f15-07b072216156\tPset_BuiltSystemRailwayLine.IsElectrified\tYESNO\t\t87\t1\tIfcBoolean\t1\nPARAM\td40355e7-6c96-435a-998a-ee64fcc3b9d5\tPset_BuiltSystemRailwayLine.LineCharacteristic\tTEXT\t\t87\t1\tPEnum_LineCharacteristic\t1\nPARAM\tf9b1a0cb-08ec-487b-ac2c-c703b056b0e2\tPset_BuiltSystemRailwayLine.LineID\tTEXT\t\t87\t1\tIfcIdentifier\t1\n#\nGROUP\t88\tPset_BuiltSystemRailwayTrack\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbea8e48a-bbd5-4dde-9e45-1f99c063af9f\tPset_BuiltSystemRailwayTrack.TrackCharacteristic\tTEXT\t\t88\t1\tPEnum_TrackCharacteristic\t1\nPARAM\t3addb827-ad65-4734-8b05-1e445bd6eb0b\tPset_BuiltSystemRailwayTrack.TrackID\tTEXT\t\t88\t1\tIfcIdentifier\t1\nPARAM\t2b4c82e7-e34d-4839-97a2-3cd043bed099\tPset_BuiltSystemRailwayTrack.TrackNumber\tTEXT\t\t88\t1\tIfcIdentifier\t1\nPARAM\t2b09d3f9-4b95-4d54-845c-ae406111eb66\tPset_BuiltSystemRailwayTrack.TrackUsage\tTEXT\t\t88\t1\tPEnum_TrackUsage\t1\n#\nGROUP\t89\tPset_BurnerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3cb43b80-d1c6-11e1-8000-00215ad4efdf\tPset_BurnerTypeCommon.EnergySource\tTEXT\t\t89\t1\tPEnum_EnergySource\t1\nPARAM\t273f1180-d1c6-11e1-8000-00215ad4efdf\tPset_BurnerTypeCommon.Reference\tTEXT\t\t89\t1\tIfcIdentifier\t1\nPARAM\t2d34f280-d1c6-11e1-8000-00215ad4efdf\tPset_BurnerTypeCommon.Status\tTEXT\t\t89\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t90\tPset_CableCarrierFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5ce3fa80-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierFittingTypeCommon.Reference\tTEXT\t\t90\t1\tIfcIdentifier\t1\nPARAM\t61a8ae80-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierFittingTypeCommon.Status\tTEXT\t\t90\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t91\tPset_CableCarrierSegmentTypeCableLadderSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83099a80-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableLadderSegment.LadderConfiguration\tTEXT\t\t91\t1\tIfcText\t1\nPARAM\t7e44e680-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableLadderSegment.NominalHeight\tLENGTH\t\t91\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t55d50299-46dd-485a-b0e2-517b9380385c\tPset_CableCarrierSegmentTypeCableLadderSegment.NominalLength\tLENGTH\t\t91\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t78e79c00-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableLadderSegment.NominalWidth\tLENGTH\t\t91\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t92\tPset_CableCarrierSegmentTypeCableTraySegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t99aff180-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableTraySegment.HasCover\tYESNO\t\t92\t1\tIfcBoolean\t1\nPARAM\t94eb3d80-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableTraySegment.NominalHeight\tLENGTH\t\t92\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t65a3817d-5e2f-4de7-87a6-5ed6d9180008\tPset_CableCarrierSegmentTypeCableTraySegment.NominalLength\tLENGTH\t\t92\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8f8df300-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableTraySegment.NominalWidth\tLENGTH\t\t92\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t93\tPset_CableCarrierSegmentTypeCableTrunkingSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taaf8fe00-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NominalHeight\tLENGTH\t\t93\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5aabd032-4985-4416-86d7-e612f034b98e\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NominalLength\tLENGTH\t\t93\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta59bb380-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NominalWidth\tLENGTH\t\t93\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb0eedf00-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NumberOfCompartments\tINTEGER\t\t93\t1\tIfcCountMeasure\t1\n#\nGROUP\t94\tPset_CableCarrierSegmentTypeCatenaryWire\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9f56ffc5-755b-4107-8bdf-ea534acbb8dd\tPset_CableCarrierSegmentTypeCatenaryWire.ACResistance\tNUMBER\t\t94\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t8ccbd9a8-2afc-47ea-8002-61b78c533b28\tPset_CableCarrierSegmentTypeCatenaryWire.CatenaryWireType\tTEXT\t\t94\t1\tIfcLabel\t1\nPARAM\t9075a1f2-7727-4666-9f3c-2939a43cd8b8\tPset_CableCarrierSegmentTypeCatenaryWire.CurrentCarryingCapacity\tNUMBER\t\t94\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tc93858cb-e713-4e63-981a-a96fb274fd3d\tPset_CableCarrierSegmentTypeCatenaryWire.DCResistance\tNUMBER\t\t94\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t72dc3b47-7cb3-4d05-b58a-54bb53a0cbe9\tPset_CableCarrierSegmentTypeCatenaryWire.LayRatio\tNUMBER\t\t94\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t3f85516c-74aa-4854-8bce-ede6361308a0\tPset_CableCarrierSegmentTypeCatenaryWire.MassPerLength\tNUMBER\t\t94\t1\tIfcMassPerLengthMeasure\t1\nPARAM\t87ea3c19-61c0-403c-9481-caeeed479657\tPset_CableCarrierSegmentTypeCatenaryWire.MechanicalTension\tNUMBER\t\t94\t1\tIfcForceMeasure\t1\nPARAM\t11c8cad5-8d94-4ce2-813a-b8a602904304\tPset_CableCarrierSegmentTypeCatenaryWire.PhysicalDescriptionReference\tMULTILINETEXT\t\t94\t1\tIfcExternalReference\t1\nPARAM\ta556f9f4-8372-470b-9e9e-25857e55e24c\tPset_CableCarrierSegmentTypeCatenaryWire.StrandingMethod\tTEXT\t\t94\t1\tIfcLabel\t1\nPARAM\tee25f93b-6e7e-4299-81dc-6b83938c823b\tPset_CableCarrierSegmentTypeCatenaryWire.TensileStrength\tNUMBER\t\t94\t1\tIfcPressureMeasure\t1\nPARAM\t50ff9d8f-ea9c-493c-95a5-071d4769bc82\tPset_CableCarrierSegmentTypeCatenaryWire.ThermalExpansionCoefficient\tNUMBER\t\t94\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\tbc9b7c5b-6229-45a3-81c1-3b098ff6b6f9\tPset_CableCarrierSegmentTypeCatenaryWire.UltimateTensileStrength\tNUMBER\t\t94\t1\tIfcForceMeasure\t1\nPARAM\t902fa096-d137-4257-8613-697c82da762e\tPset_CableCarrierSegmentTypeCatenaryWire.YoungModulus\tNUMBER\t\t94\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t95\tPset_CableCarrierSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbba97400-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCommon.Reference\tTEXT\t\t95\t1\tIfcIdentifier\t1\nPARAM\tc19f5500-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCommon.Status\tTEXT\t\t95\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t96\tPset_CableCarrierSegmentTypeConduitSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te5fb3180-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeConduitSegment.ConduitShapeType\tTEXT\t\t96\t1\tPEnum_ConduitShapeType\t1\nPARAM\tf4494d80-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeConduitSegment.IsRigid\tYESNO\t\t96\t1\tIfcBoolean\t1\nPARAM\tbb1eff5f-671b-48ec-b8f9-34b3f8781302\tPset_CableCarrierSegmentTypeConduitSegment.NominalDiameter\tLENGTH\t\t96\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdf6cba00-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeConduitSegment.NominalHeight\tLENGTH\t\t96\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8ad91d9a-63ee-4a17-86bb-1b83df24a726\tPset_CableCarrierSegmentTypeConduitSegment.NominalLength\tLENGTH\t\t96\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td976d900-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeConduitSegment.NominalWidth\tLENGTH\t\t96\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t97\tPset_CableCarrierSegmentTypeDropper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t80e0213d-313a-48c5-bc45-000f1e0bca5f\tPset_CableCarrierSegmentTypeDropper.AssemblyInstruction\tMULTILINETEXT\t\t97\t1\tIfcExternalReference\t1\nPARAM\t3ff24496-0b66-4ea4-ad55-b2d0b7568bd0\tPset_CableCarrierSegmentTypeDropper.CurrentCarryingCapacity\tNUMBER\t\t97\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t19475b0c-f54e-4be5-801f-fd6e4e19f1ad\tPset_CableCarrierSegmentTypeDropper.IsAdjustable\tYESNO\t\t97\t1\tIfcBoolean\t1\nPARAM\t5949a370-7905-4c91-954e-7efe0a1821be\tPset_CableCarrierSegmentTypeDropper.IsCurrentCarrying\tYESNO\t\t97\t1\tIfcBoolean\t1\nPARAM\t19282b6b-b39d-4f96-9287-77346b02d030\tPset_CableCarrierSegmentTypeDropper.IsRigid\tYESNO\t\t97\t1\tIfcBoolean\t1\nPARAM\tf86b19d0-69a3-4a50-a8a6-5732ec59a828\tPset_CableCarrierSegmentTypeDropper.NominalLoad\tNUMBER\t\t97\t1\tIfcForceMeasure\t1\nPARAM\t0355ab50-cc05-4b68-8f72-a94c931401c8\tPset_CableCarrierSegmentTypeDropper.TensileStrength\tNUMBER\t\t97\t1\tIfcPressureMeasure\t1\nPARAM\t9efd6045-2a3d-4ff9-b331-270870eb56e6\tPset_CableCarrierSegmentTypeDropper.UltimateTensileStrength\tNUMBER\t\t97\t1\tIfcForceMeasure\t1\n#\nGROUP\t98\tPset_CableFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t00cda600-d1c7-11e1-8000-00215ad4efdf\tPset_CableFittingTypeCommon.Reference\tTEXT\t\t98\t1\tIfcIdentifier\t1\nPARAM\t05925a00-d1c7-11e1-8000-00215ad4efdf\tPset_CableFittingTypeCommon.Status\tTEXT\t\t98\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t99\tPset_CableFittingTypeExit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2c83ea4f-e8bf-4256-9687-d0b43156761e\tPset_CableFittingTypeExit.GroundResistance\tNUMBER\t\t99\t1\tIfcElectricResistanceMeasure\t1\n#\nGROUP\t100\tPset_CableFittingTypeFanout\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5e80256e-2d31-42cd-847e-9ae71defc177\tPset_CableFittingTypeFanout.NumberOfTubes\tINTEGER\t\t100\t1\tIfcCountMeasure\t1\nPARAM\t7c4c60a6-22a3-4aa7-8156-45d642ff45f8\tPset_CableFittingTypeFanout.TubeDiameter\tLENGTH\t\t100\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t101\tPset_CableSegmentConnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2e062796-73ab-445e-bc70-e2d13e849152\tPset_CableSegmentConnector.ConnectorAColour\tTEXT\t\t101\t1\tIfcLabel\t1\nPARAM\td2b2ebfe-bf57-4226-93a5-aa3e069af9e9\tPset_CableSegmentConnector.ConnectorAGender\tTEXT\t\t101\t1\tPEnum_DistributionPortGender\t1\nPARAM\taae8c6e0-a2e6-48a5-993e-5c9949f689e2\tPset_CableSegmentConnector.ConnectorAType\tTEXT\t\t101\t1\tIfcLabel\t1\nPARAM\tb3d35d83-7024-49b4-aeec-c43feb0c3cf4\tPset_CableSegmentConnector.ConnectorBColour\tTEXT\t\t101\t1\tIfcLabel\t1\nPARAM\te762803e-11f4-440a-bfc0-2a2ce11850f8\tPset_CableSegmentConnector.ConnectorBGender\tTEXT\t\t101\t1\tPEnum_DistributionPortGender\t1\nPARAM\tce2ebf18-d7c6-48ec-aa5e-24c3686a4a4b\tPset_CableSegmentConnector.ConnectorBType\tTEXT\t\t101\t1\tIfcLabel\t1\n#\nGROUP\t102\tPset_CableSegmentOccurenceFiberSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t71815647-589f-4bc6-9a6b-00842980cea3\tPset_CableSegmentOccurenceFiberSegment.InUse\tYESNO\t\t102\t1\tIfcBoolean\t1\n#\nGROUP\t103\tPset_CableSegmentOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a917ce3-5e22-4ad5-8d1e-87bc3656c1b8\tPset_CableSegmentOccurrence.CarrierStackNumber\tINTEGER\t\t103\t1\tIfcInteger\t1\nPARAM\tabcd31d1-e546-49a8-a905-edfe6b733605\tPset_CableSegmentOccurrence.CurrentCarryingCapacity\tNUMBER\t\t103\t1\tIfcElectricCurrentMeasure\t1\nPARAM\ta56d3362-7278-4003-b141-8d8169f8652f\tPset_CableSegmentOccurrence.CurrentCarryingCapasity\tNUMBER\t\t103\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t55fbb563-61a2-4104-a0e4-b53d8e4cffd5\tPset_CableSegmentOccurrence.DesignAmbientTemperature\tMULTILINETEXT\t\t103\t1\tPropertyBoundedValue\t1\nPARAM\t977d1cc9-f8f5-48dc-aa23-820a3e9d0774\tPset_CableSegmentOccurrence.DistanceBetweenParallelCircuits\tLENGTH\t\t103\t1\tIfcLengthMeasure\t1\nPARAM\t7c0ce24f-9d03-4d9b-83da-2ac5e4a0634c\tPset_CableSegmentOccurrence.InstallationMethod\tTEXT\t\t103\t1\tIfcLabel\t1\nPARAM\tbe5fd0db-9e23-4a84-b4e0-7762a0e065e1\tPset_CableSegmentOccurrence.InstallationMethodFlagEnum\tTEXT\t\t103\t1\tPEnum_InstallationMethodFlagEnum\t1\nPARAM\td4ec2718-6333-4e1e-a8cd-d1a1d63c7708\tPset_CableSegmentOccurrence.IsHorizontalCable\tYESNO\t\t103\t1\tIfcBoolean\t1\nPARAM\t2632b748-03d3-46c0-aafd-3f7cff1f8d99\tPset_CableSegmentOccurrence.IsMountedFlatCable\tYESNO\t\t103\t1\tIfcBoolean\t1\nPARAM\ta008e02d-7f54-4833-83e4-f8069dde0f37\tPset_CableSegmentOccurrence.MaximumCableLength\tLENGTH\t\t103\t1\tIfcLengthMeasure\t1\nPARAM\t12584689-2536-4091-9491-fb29d755ac82\tPset_CableSegmentOccurrence.MountingMethod\tTEXT\t\t103\t1\tPEnum_MountingMethodEnum\t1\nPARAM\t4a80a2ec-f350-4fc6-ba3f-2235e2f25f04\tPset_CableSegmentOccurrence.NumberOfParallelCircuits\tINTEGER\t\t103\t1\tIfcCountMeasure\t1\nPARAM\t47d6edba-8d71-4af2-b05f-07d968909ff6\tPset_CableSegmentOccurrence.PowerLoss\tNUMBER\t\t103\t1\tIfcPowerMeasure\t1\nPARAM\t2541f50e-561f-40e2-8585-6e810d4e89e4\tPset_CableSegmentOccurrence.SequentialCode\tTEXT\t\t103\t1\tIfcLabel\t1\nPARAM\t366428fd-19e5-4457-a10a-d655640758e7\tPset_CableSegmentOccurrence.SoilConductivity\tNUMBER\t\t103\t1\tIfcThermalConductivityMeasure\t1\nPARAM\td9a5be45-4039-4d22-8b6c-573471e71f22\tPset_CableSegmentOccurrence.UserCorrectionFactor\tNUMBER\t\t103\t1\tIfcReal\t1\n#\nGROUP\t104\tPset_CableSegmentTypeBusBarSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc8d23329-cda6-4d55-811f-ec00b24be7bc\tPset_CableSegmentTypeBusBarSegment.ACResistance\tNUMBER\t\t104\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t2dd3a9bb-3da0-4bb9-8ba7-978d382b35cd\tPset_CableSegmentTypeBusBarSegment.CrossSectionalArea\tAREA\t\t104\t1\tIfcAreaMeasure\t1\nPARAM\t19a8b096-3bb7-4e4a-94a1-4395a74d8457\tPset_CableSegmentTypeBusBarSegment.CurrentCarryingCapacity\tNUMBER\t\t104\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t6d81040a-3f56-4c71-9d08-fd38fd3144a7\tPset_CableSegmentTypeBusBarSegment.DCResistance\tNUMBER\t\t104\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t5affe7b5-f79c-4f10-a6a6-b3c6357b84eb\tPset_CableSegmentTypeBusBarSegment.InsulationMethod\tTEXT\t\t104\t1\tPEnum_InsulatorType\t1\nPARAM\t1e027480-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeBusBarSegment.IsHorizontalBusbar\tYESNO\t\t104\t1\tIfcBoolean\t1\nPARAM\t57603209-d07a-4751-b981-b02b3cd8c226\tPset_CableSegmentTypeBusBarSegment.MassPerLength\tNUMBER\t\t104\t1\tIfcMassPerLengthMeasure\t1\nPARAM\t1f8b22d1-d01c-49e3-ac1a-6c850a54a11a\tPset_CableSegmentTypeBusBarSegment.NominalCurrent\tNUMBER\t\t104\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t85431064-7bcb-459f-b6e5-1163493c5517\tPset_CableSegmentTypeBusBarSegment.OperationalTemperatureRange\tMULTILINETEXT\t\t104\t1\tPropertyBoundedValue\t1\nPARAM\t85d818fb-67d5-4884-b3cb-da4c0a03a9f6\tPset_CableSegmentTypeBusBarSegment.OverallDiameter\tLENGTH\t\t104\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb81e0684-e448-4f0b-a97d-995cafbf3b66\tPset_CableSegmentTypeBusBarSegment.RatedVoltage\tMULTILINETEXT\t\t104\t1\tPropertyBoundedValue\t1\nPARAM\t64475906-fa66-4046-92c7-3d9ef4d6a24b\tPset_CableSegmentTypeBusBarSegment.TensileStrength\tNUMBER\t\t104\t1\tIfcPressureMeasure\t1\nPARAM\tc295d765-f6d3-4a91-9c5f-435102b59b13\tPset_CableSegmentTypeBusBarSegment.ThermalExpansionCoefficient\tNUMBER\t\t104\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\t8fe8467d-4a14-4eaa-9726-a75b8974eddd\tPset_CableSegmentTypeBusBarSegment.UltimateTensileStrength\tNUMBER\t\t104\t1\tIfcForceMeasure\t1\nPARAM\t782d4f75-ebe0-4c4d-9fe2-ed80afac547f\tPset_CableSegmentTypeBusBarSegment.YoungModulus\tNUMBER\t\t104\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t105\tPset_CableSegmentTypeCableSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcf6117d6-0e8f-478d-b50d-1469e2c67044\tPset_CableSegmentTypeCableSegment.ACResistance\tNUMBER\t\t105\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t0172d1d8-2602-4679-8293-22c901339a27\tPset_CableSegmentTypeCableSegment.CableInsulationMaterial\tMULTILINETEXT\t\t105\t1\tIfcMaterial\t1\nPARAM\t9853cda1-817d-45bf-86a5-f7018d05ceb5\tPset_CableSegmentTypeCableSegment.CrossSectionalArea\tAREA\t\t105\t1\tIfcAreaMeasure\t1\nPARAM\tc8eb8eba-d3de-4e0a-b2b8-f5af727629f4\tPset_CableSegmentTypeCableSegment.CurrentCarryingCapacity\tNUMBER\t\t105\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t4abc008b-2217-42d8-b48f-b6169673b089\tPset_CableSegmentTypeCableSegment.DCResistance\tNUMBER\t\t105\t1\tIfcElectricResistanceMeasure\t1\nPARAM\ta54fe800-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.FunctionReliable\tYESNO\t\t105\t1\tIfcBoolean\t1\nPARAM\t9ff29d80-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.HalogenProof\tYESNO\t\t105\t1\tIfcBoolean\t1\nPARAM\t5904a800-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.HasProtectiveEarth\tYESNO\t\t105\t1\tIfcBoolean\t1\nPARAM\te4c38dd4-4839-4629-b0bc-7e2e1a529338\tPset_CableSegmentTypeCableSegment.InsulationVoltage\tNUMBER\t\t105\t1\tIfcElectricVoltageMeasure\t1\nPARAM\tb99adb5b-c561-4cae-8554-9cbe8fa706dc\tPset_CableSegmentTypeCableSegment.MassPerLength\tNUMBER\t\t105\t1\tIfcMassPerLengthMeasure\t1\nPARAM\t04a0f43a-c57b-45be-bc5d-d704f12a173e\tPset_CableSegmentTypeCableSegment.MaximumBendingRadius\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t95f766d9-e0d2-4204-ac1d-e93460f40d23\tPset_CableSegmentTypeCableSegment.MaximumCurrent\tNUMBER\t\t105\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t6de13b80-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.MaximumOperatingTemperature\tNUMBER\t\t105\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t7f2a4800-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.MaximumShortCircuitTemperature\tNUMBER\t\t105\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t2bb28e5b-562e-4e08-aadf-f3a90351a48f\tPset_CableSegmentTypeCableSegment.MaxOperatingTemperature\tNUMBER\t\t105\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t2ed26686-1583-4602-96a6-fa78aad71ed2\tPset_CableSegmentTypeCableSegment.NominalHeight\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t818b8fc7-4806-40d5-a968-75600b073422\tPset_CableSegmentTypeCableSegment.NominalLength\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t67a4fb5d-ebd0-4296-b3ef-237417a4f8fa\tPset_CableSegmentTypeCableSegment.NominalWidthOrDiameter\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8315a195-ccf9-4f82-80f7-f33e38eb337e\tPset_CableSegmentTypeCableSegment.NormalOperatingTemperature\tNUMBER\t\t105\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t31154480-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.NumberOfCores\tINTEGER\t\t105\t1\tIfcCountMeasure\t1\nPARAM\t5fc05682-af69-4fcd-8ef3-1d82c217ffdb\tPset_CableSegmentTypeCableSegment.NumberOfWires\tINTEGER\t\t105\t1\tIfcCountMeasure\t1\nPARAM\t38d4e900-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.OverallDiameter\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t44c0ab00-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.RatedTemperature\tMULTILINETEXT\t\t105\t1\tPropertyBoundedValue\t1\nPARAM\t3ecaca00-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.RatedVoltage\tMULTILINETEXT\t\t105\t1\tPropertyBoundedValue\t1\nPARAM\t4ab68c00-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.ScreenDiameter\tLENGTH\t\t105\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t936e4500-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.SelfExtinguishing60332_1\tYESNO\t\t105\t1\tIfcBoolean\t1\nPARAM\t99642600-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.SelfExtinguishing60332_3\tYESNO\t\t105\t1\tIfcBoolean\t1\nPARAM\ta3c7b4cb-3bfa-443c-8228-30f993ecda47\tPset_CableSegmentTypeCableSegment.SheathColor\tTEXT\t\t105\t1\tIfcLabel\t1\nPARAM\t87828300-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.SpecialConstruction\tTEXT\t\t105\t1\tIfcLabel\t1\nPARAM\t2b1f6380-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.Standard\tTEXT\t\t105\t1\tIfcLabel\t1\nPARAM\t8ea99100-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.Weight\tNUMBER\t\t105\t1\tIfcMassMeasure\t1\n#\nGROUP\t106\tPset_CableSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taf71e680-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCommon.Reference\tTEXT\t\t106\t1\tIfcIdentifier\t1\nPARAM\tb4cf3100-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCommon.Status\tTEXT\t\t106\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t107\tPset_CableSegmentTypeConductorSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2dbed8d5-b3a6-482a-90b7-e7f3d6a05eb8\tPset_CableSegmentTypeConductorSegment.ACResistance\tNUMBER\t\t107\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t16d52f14-0b2f-49f1-a51e-a813642b9709\tPset_CableSegmentTypeConductorSegment.ConductorMaterial\tTEXT\t\t107\t1\tPEnum_MaterialEnum\t1\nPARAM\t0f8c44e5-f30e-4416-9883-9be30a12f2e3\tPset_CableSegmentTypeConductorSegment.ConductorShape\tTEXT\t\t107\t1\tPEnum_ShapeEnum\t1\nPARAM\t837420cb-1a99-4090-a3fc-db9355dc03a0\tPset_CableSegmentTypeConductorSegment.ConductorSheathMaterial\tMULTILINETEXT\t\t107\t1\tIfcMaterial\t1\nPARAM\t4ccd1a80-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeConductorSegment.Construction\tTEXT\t\t107\t1\tPEnum_ConstructionEnum\t1\nPARAM\t2a3b0180-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeConductorSegment.CrossSectionalArea\tAREA\t\t107\t1\tIfcAreaMeasure\t1\nPARAM\tf95e3720-093d-410d-bf17-f52739eda3e4\tPset_CableSegmentTypeConductorSegment.CurrentCarryingCapacity\tNUMBER\t\t107\t1\tIfcElectricCurrentMeasure\t1\nPARAM\ta14c04f8-fc1d-481d-9600-39a37198dc4d\tPset_CableSegmentTypeConductorSegment.DCResistance\tNUMBER\t\t107\t1\tIfcElectricResistanceMeasure\t1\nPARAM\td2ed1a0c-1d00-4427-88d3-f076085bebdd\tPset_CableSegmentTypeConductorSegment.ElectricalConductorFunction\tTEXT\t\t107\t1\tPEnum_ConductorFunction\t1\nPARAM\t30c97900-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeConductorSegment.Function\tTEXT\t\t107\t1\tPEnum_FunctionEnum\t1\nPARAM\t62efad31-f661-4306-a6b0-06469351cf2f\tPset_CableSegmentTypeConductorSegment.IsFireResistant\tYESNO\t\t107\t1\tIfcBoolean\t1\nPARAM\tbdb2751b-097b-48e4-9bf0-82b121bed0ce\tPset_CableSegmentTypeConductorSegment.MassPerLength\tNUMBER\t\t107\t1\tIfcMassPerLengthMeasure\t1\nPARAM\t40e15880-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeConductorSegment.Material\tTEXT\t\t107\t1\tPEnum_MaterialEnum\t1\nPARAM\ta5d0e746-d064-4bfb-bfd7-9226168f0ebb\tPset_CableSegmentTypeConductorSegment.MaximumOperatingTemperature\tNUMBER\t\t107\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t934b0a15-7236-48fe-b549-ffba487cdc96\tPset_CableSegmentTypeConductorSegment.NominalCurrent\tNUMBER\t\t107\t1\tIfcElectricCurrentMeasure\t1\nPARAM\ta87deb43-ee03-46d0-b320-24bff82815f2\tPset_CableSegmentTypeConductorSegment.NominalLength\tLENGTH\t\t107\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6cc92c39-2931-4e88-b523-ab48f94608b2\tPset_CableSegmentTypeConductorSegment.NumberOfCores\tINTEGER\t\t107\t1\tIfcCountMeasure\t1\nPARAM\t864dd0fd-5f66-4b68-8085-79a9e48fbfaf\tPset_CableSegmentTypeConductorSegment.OverallDiameter\tLENGTH\t\t107\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7b3f9abc-db87-4175-9f93-9677b4df614c\tPset_CableSegmentTypeConductorSegment.PhaseReference\tTEXT\t\t107\t1\tIfcIdentifier\t1\nPARAM\t94a208c6-43f7-4301-a2d5-f3a1b4b59a4d\tPset_CableSegmentTypeConductorSegment.RatedVoltage\tMULTILINETEXT\t\t107\t1\tPropertyBoundedValue\t1\nPARAM\t59ea0980-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeConductorSegment.Shape\tTEXT\t\t107\t1\tPEnum_ShapeEnum\t1\nPARAM\t531bcd01-546c-4c88-baa6-2326e2907d96\tPset_CableSegmentTypeConductorSegment.SheathColor\tTEXT\t\t107\t1\tIfcLabel\t1\nPARAM\tb10131c5-cc0e-4c12-973e-6ac7aa6086f8\tPset_CableSegmentTypeConductorSegment.TensileStrength\tNUMBER\t\t107\t1\tIfcPressureMeasure\t1\nPARAM\t738bd472-9595-4486-a7f0-a866607f3bec\tPset_CableSegmentTypeConductorSegment.ThermalExpansionCoefficient\tNUMBER\t\t107\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\tf802ed19-609a-4926-ace9-f2a13d6656fa\tPset_CableSegmentTypeConductorSegment.UltimateTensileStrength\tNUMBER\t\t107\t1\tIfcForceMeasure\t1\nPARAM\tdba884a0-3a09-4044-a111-5ae27beeeb2d\tPset_CableSegmentTypeConductorSegment.YoungModulus\tNUMBER\t\t107\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t108\tPset_CableSegmentTypeContactWire\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t940999dc-5904-4b2b-ab26-1b8a0b7fda80\tPset_CableSegmentTypeContactWire.ACResistance\tNUMBER\t\t108\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t622fd75b-95ba-455a-bfbf-f086c82a6961\tPset_CableSegmentTypeContactWire.CrossSectionalArea\tAREA\t\t108\t1\tIfcAreaMeasure\t1\nPARAM\t46820455-3d3d-4848-bf68-64cb51b6d696\tPset_CableSegmentTypeContactWire.CurrentCarryingCapacity\tNUMBER\t\t108\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t2ff119a6-1661-4b57-875f-294b13045ce7\tPset_CableSegmentTypeContactWire.DCResistance\tNUMBER\t\t108\t1\tIfcElectricResistanceMeasure\t1\nPARAM\tcb365348-1f03-43bd-9104-fdf60982871e\tPset_CableSegmentTypeContactWire.MassPerLength\tNUMBER\t\t108\t1\tIfcMassPerLengthMeasure\t1\nPARAM\t830a524f-5b78-407e-8c46-748d46a55233\tPset_CableSegmentTypeContactWire.TensileStrength\tNUMBER\t\t108\t1\tIfcPressureMeasure\t1\nPARAM\t06af0165-3c62-49dd-b298-c323eaa661b2\tPset_CableSegmentTypeContactWire.ThermalExpansionCoefficient\tNUMBER\t\t108\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\tb63603cf-2d3b-4de8-ad51-3a14e51f5d05\tPset_CableSegmentTypeContactWire.TorsionalStrength\tNUMBER\t\t108\t1\tIfcPressureMeasure\t1\nPARAM\t65ffefa0-2403-4cab-9c57-a1fb6ebd8b2b\tPset_CableSegmentTypeContactWire.YoungModulus\tNUMBER\t\t108\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t109\tPset_CableSegmentTypeCoreSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4f7b46c7-d54a-4608-8990-82dfddae7f04\tPset_CableSegmentTypeCoreSegment.ACResistance\tNUMBER\t\t109\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t8c940200-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.CoreIdentifier\tTEXT\t\t109\t1\tIfcIdentifier\t1\nPARAM\t65f0aca8-9c68-4dba-ae87-123cab754e9e\tPset_CableSegmentTypeCoreSegment.CurrentCarryingCapacity\tNUMBER\t\t109\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t94292eb0-4be2-4d73-b3c1-705eb0c606ef\tPset_CableSegmentTypeCoreSegment.DCResistance\tNUMBER\t\t109\t1\tIfcElectricResistanceMeasure\t1\nPARAM\tc6fd9f00-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.FunctionReliable\tYESNO\t\t109\t1\tIfcBoolean\t1\nPARAM\tc107be00-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.HalogenProof\tYESNO\t\t109\t1\tIfcBoolean\t1\nPARAM\te639b8e5-a68a-4fa7-a1d3-e09d53a120de\tPset_CableSegmentTypeCoreSegment.LayRatio\tNUMBER\t\t109\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4e2407ae-e167-4582-af35-9ab01b00f3a6\tPset_CableSegmentTypeCoreSegment.MassPerLength\tNUMBER\t\t109\t1\tIfcMassPerLengthMeasure\t1\nPARAM\t72f2ba80-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.OverallDiameter\tLENGTH\t\t109\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7f771300-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.RatedTemperature\tMULTILINETEXT\t\t109\t1\tPropertyBoundedValue\t1\nPARAM\t78e89b80-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.RatedVoltage\tMULTILINETEXT\t\t109\t1\tPropertyBoundedValue\t1\nPARAM\t869e2100-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.ScreenDiameter\tLENGTH\t\t109\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb64d2900-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.SelfExtinguishing60332_1\tYESNO\t\t109\t1\tIfcBoolean\t1\nPARAM\tbbaa7380-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.SelfExtinguishing60332_3\tYESNO\t\t109\t1\tIfcBoolean\t1\nPARAM\t9289e300-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.SheathColors\tTEXT\t\t109\t1\tPEnum_CoreColorsEnum\t1\nPARAM\t86eab9cb-4b83-4cfd-b7cf-f50edced6ec6\tPset_CableSegmentTypeCoreSegment.SheathColours\tTEXT\t\t109\t1\tPEnum_CoreColoursEnum\t1\nPARAM\tcc5ae980-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.Standard\tTEXT\t\t109\t1\tIfcLabel\t1\nPARAM\t8b06b6ec-8b25-4664-b701-49ac1580dad6\tPset_CableSegmentTypeCoreSegment.StrandingMethod\tTEXT\t\t109\t1\tIfcLabel\t1\nPARAM\t3d32f2b5-f0ab-442f-b8e7-b2831a9d45fb\tPset_CableSegmentTypeCoreSegment.TensileStrength\tNUMBER\t\t109\t1\tIfcPressureMeasure\t1\nPARAM\t8539decc-64a8-4309-ad4f-c81ac76c39df\tPset_CableSegmentTypeCoreSegment.ThermalExpansionCoefficient\tNUMBER\t\t109\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\t9b29ddad-f7c9-4ac3-ba36-d86b5660e11d\tPset_CableSegmentTypeCoreSegment.UltimateTensileStrength\tNUMBER\t\t109\t1\tIfcForceMeasure\t1\nPARAM\tb1887500-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.Weight\tNUMBER\t\t109\t1\tIfcMassMeasure\t1\nPARAM\t37f6c8c8-6813-4705-97ff-6bdc3401f436\tPset_CableSegmentTypeCoreSegment.YoungModulus\tNUMBER\t\t109\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t110\tPset_CableSegmentTypeEarthingConductor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5a3e9c88-83cf-455d-b4b7-7a8236dc27b9\tPset_CableSegmentTypeEarthingConductor.ResistanceToGround\tNUMBER\t\t110\t1\tIfcElectricResistanceMeasure\t1\n#\nGROUP\t111\tPset_CableSegmentTypeFiberSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t672cfb4a-f554-459c-98c2-118450748ab8\tPset_CableSegmentTypeFiberSegment.FiberColour\tTEXT\t\t111\t1\tPEnum_FiberColour\t1\nPARAM\tf243936a-c89a-4655-b7d6-57f7ba5346af\tPset_CableSegmentTypeFiberSegment.FiberType\tTEXT\t\t111\t1\tPEnum_FiberType\t1\nPARAM\tb5dce850-8978-438b-8673-8deedce2a1d6\tPset_CableSegmentTypeFiberSegment.HasTightJacket\tYESNO\t\t111\t1\tIfcBoolean\t1\n#\nGROUP\t112\tPset_CableSegmentTypeFiberTubeSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0dd55e6e-9f3d-45c4-a744-6d268da889ba\tPset_CableSegmentTypeFiberTubeSegment.FiberTubeColour\tTEXT\t\t112\t1\tPEnum_FiberColour\t1\nPARAM\t56c33b17-e543-4822-8298-64dc9831e8f2\tPset_CableSegmentTypeFiberTubeSegment.NumberOfFibers\tINTEGER\t\t112\t1\tIfcCountMeasure\t1\n#\nGROUP\t113\tPset_CableSegmentTypeOpticalCableSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc7944e3-7fad-48d4-a3a3-8b9c2d80f6aa\tPset_CableSegmentTypeOpticalCableSegment.FiberMode\tTEXT\t\t113\t1\tPEnum_FiberMode\t1\nPARAM\t2ed7bf12-b788-425a-b950-56072baed22f\tPset_CableSegmentTypeOpticalCableSegment.NumberOfFibers\tINTEGER\t\t113\t1\tIfcCountMeasure\t1\nPARAM\t5868fc75-c083-4d54-a20c-cc2b02204369\tPset_CableSegmentTypeOpticalCableSegment.NumberOfMultiModeFibers\tINTEGER\t\t113\t1\tIfcCountMeasure\t1\nPARAM\t46eba71c-a4d7-42b3-9085-04dc1dc155a1\tPset_CableSegmentTypeOpticalCableSegment.NumberOfSingleModeFibers\tINTEGER\t\t113\t1\tIfcCountMeasure\t1\nPARAM\t29e46725-8f88-464f-af6b-ad990a4d5803\tPset_CableSegmentTypeOpticalCableSegment.NumberOfTubes\tINTEGER\t\t113\t1\tIfcCountMeasure\t1\nPARAM\t30240c3c-1f1f-410f-8ba8-1a1fd607ab65\tPset_CableSegmentTypeOpticalCableSegment.OpticalCableStructure\tTEXT\t\t113\t1\tPEnum_OpticalCableStructureType\t1\n#\nGROUP\t114\tPset_CableSegmentTypeStitchWire\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9234c844-c8da-4e91-8eb3-850bdb1c54d1\tPset_CableSegmentTypeStitchWire.AssemblyInstruction\tMULTILINETEXT\t\t114\t1\tIfcExternalReference\t1\nPARAM\t5e31af7c-4daf-4bda-ab93-8d3cef2b8593\tPset_CableSegmentTypeStitchWire.MechanicalTension\tNUMBER\t\t114\t1\tIfcForceMeasure\t1\nPARAM\t90ff7769-ca66-4f00-b3de-01c046ebac0a\tPset_CableSegmentTypeStitchWire.NominalLength\tLENGTH\t\t114\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\teaa5a3c7-83ee-464c-973a-f5721cb990ac\tPset_CableSegmentTypeStitchWire.TensileStrength\tNUMBER\t\t114\t1\tIfcPressureMeasure\t1\nPARAM\t643d3729-b0c1-4946-a7f0-394ce8a332a2\tPset_CableSegmentTypeStitchWire.UltimateTensileStrength\tNUMBER\t\t114\t1\tIfcForceMeasure\t1\n#\nGROUP\t115\tPset_CableSegmentTypeWirePairSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t43cb2251-59d7-42c5-aa8a-71c8df5e9446\tPset_CableSegmentTypeWirePairSegment.CharacteristicImpedance\tNUMBER\t\t115\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t5ed0d9fd-8540-4427-993a-bc17bfafdff2\tPset_CableSegmentTypeWirePairSegment.ConductorDiameter\tLENGTH\t\t115\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc9be1185-13a7-4fab-adf9-ee09425df90e\tPset_CableSegmentTypeWirePairSegment.CoreConductorDiameter\tLENGTH\t\t115\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t19e23b8b-1ba2-4f75-8d85-b9730f3bfa3e\tPset_CableSegmentTypeWirePairSegment.JacketColour\tTEXT\t\t115\t1\tIfcLabel\t1\nPARAM\t8a0adbee-be86-445c-aa9e-6bc21765a889\tPset_CableSegmentTypeWirePairSegment.ShieldConductorDiameter\tLENGTH\t\t115\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2abb64cc-ce75-4802-99f2-30debd16dc79\tPset_CableSegmentTypeWirePairSegment.WirePairType\tTEXT\t\t115\t1\tPEnum_WirePairType\t1\n#\nGROUP\t116\tPset_CargoCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc35519d7-b197-4845-8498-9e7f78558c71\tPset_CargoCommon.AdditionalProcessing\tTEXT\t\t116\t1\tPEnum_AdditionalProcessing\t1\nPARAM\t3d4708cc-5547-4421-abd2-f6c6786a17f9\tPset_CargoCommon.ProcessDirection\tTEXT\t\t116\t1\tPEnum_ProcessDirection\t1\nPARAM\tdf3c15a0-b460-4a63-9b86-3e2d0218c2c1\tPset_CargoCommon.ProcessItem\tTEXT\t\t116\t1\tPEnum_ProcessItem\t1\n#\nGROUP\t117\tPset_CessBetweenRails\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t84441cab-363c-4ac0-a6dd-e1396e067996\tPset_CessBetweenRails.CheckRailType\tTEXT\t\t117\t1\tPEnum_CheckRailType\t1\nPARAM\t530b2635-3aa0-43ca-b341-481ff6d7e38e\tPset_CessBetweenRails.JointRelativePosition\tTEXT\t\t117\t1\tPEnum_RelativePosition\t1\nPARAM\tfae31438-d91d-4563-848d-fc36d05e8cfd\tPset_CessBetweenRails.LoadCapacity\tNUMBER\t\t117\t1\tIfcForceMeasure\t1\nPARAM\t6e00b3e2-3084-476d-9ffb-0497643fa344\tPset_CessBetweenRails.UsagePurpose\tTEXT\t\t117\t1\tPEnum_UsagePurpose\t1\n#\nGROUP\t118\tPset_ChillerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td8df4200-d1c8-11e1-8000-00215ad4efdf\tPset_ChillerPHistory.Capacity\tMULTILINETEXT\t\t118\t1\tIfcTimeSeries\t1\nPARAM\tff94b171-501e-4a83-991f-6819d134d90a\tPset_ChillerPHistory.CapacityCurve\tNUMBER\t\t118\t1\tIfcReal\t1\nPARAM\te0065000-d1c8-11e1-8000-00215ad4efdf\tPset_ChillerPHistory.CoefficientOfPerformance\tMULTILINETEXT\t\t118\t1\tIfcTimeSeries\t1\nPARAM\t3ffca6d2-2073-421e-9dbd-fe5d40f54925\tPset_ChillerPHistory.CoefficientOfPerformanceCurve\tNUMBER\t\t118\t1\tIfcReal\t1\nPARAM\tdbda3280-d1c8-11e1-8000-00215ad4efdf\tPset_ChillerPHistory.EnergyEfficiencyRatio\tMULTILINETEXT\t\t118\t1\tIfcTimeSeries\t1\nPARAM\td95f1587-d481-4251-972f-a47999a6fa92\tPset_ChillerPHistory.FullLoadRatioCurve\tNUMBER\t\t118\t1\tIfcReal\t1\n#\nGROUP\t119\tPset_ChillerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1e9c0a80-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.CapacityCurve\tMULTILINETEXT\t\t119\t1\tPropertyTableValue\t1\nPARAM\t388deca3-ffb8-409f-9d7f-a5f88b15bc51\tPset_ChillerTypeCommon.ChillerCapacity\tNUMBER\t\t119\t1\tIfcPowerMeasure\t1\nPARAM\t278cdc00-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.CoefficientOfPerformanceCurve\tMULTILINETEXT\t\t119\t1\tPropertyTableValue\t1\nPARAM\t2fe51700-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.FullLoadRatioCurve\tMULTILINETEXT\t\t119\t1\tPropertyTableValue\t1\nPARAM\tfe6c4b80-d1c8-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.NominalCapacity\tNUMBER\t\t119\t1\tIfcPowerMeasure\t1\nPARAM\t0926e080-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.NominalCondensingTemperature\tNUMBER\t\t119\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t04622c80-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.NominalEfficiency\tNUMBER\t\t119\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0e842b00-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.NominalEvaporatingTemperature\tNUMBER\t\t119\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t147a0c00-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.NominalHeatRejectionRate\tNUMBER\t\t119\t1\tIfcPowerMeasure\t1\nPARAM\t19d75680-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.NominalPowerConsumption\tNUMBER\t\t119\t1\tIfcPowerMeasure\t1\nPARAM\teac0e500-d1c8-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.Reference\tTEXT\t\t119\t1\tIfcIdentifier\t1\nPARAM\tef859900-d1c8-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.Status\tTEXT\t\t119\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t120\tPset_ChimneyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6cb10e00-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.FireRating\tTEXT\t\t120\t1\tIfcLabel\t1\nPARAM\t5c992e80-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.IsExternal\tYESNO\t\t120\t1\tIfcBoolean\t1\nPARAM\t6753c380-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.LoadBearing\tYESNO\t\t120\t1\tIfcBoolean\t1\nPARAM\t573be400-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.NumberOfDrafts\tINTEGER\t\t120\t1\tIfcCountMeasure\t1\nPARAM\t412e2380-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.Reference\tTEXT\t\t120\t1\tIfcIdentifier\t1\nPARAM\t468b6e00-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.Status\tTEXT\t\t120\t1\tPEnum_ElementStatus\t1\nPARAM\t61f67900-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.ThermalTransmittance\tNUMBER\t\t120\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t121\tPset_CivilElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t70725207-4869-40a2-a2df-14795defd067\tPset_CivilElementCommon.Reference\tTEXT\t\t121\t1\tIfcIdentifier\t1\nPARAM\t0c528b1c-7565-457c-85ee-19a5f19a76f1\tPset_CivilElementCommon.Status\tTEXT\t\t121\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t122\tPset_CoaxialCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc2fddf39-aa06-431b-a661-893c468428fd\tPset_CoaxialCable.CharacteristicImpedance\tNUMBER\t\t122\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t875a55b2-1438-44df-a7b0-7b95e534cddb\tPset_CoaxialCable.CouplingLoss\tNUMBER\t\t122\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t816774cd-febc-4429-b735-9ecb875a4fd0\tPset_CoaxialCable.MaximumTransmissionAttenuation\tNUMBER\t\t122\t1\tIfcSoundPowerLevelMeasure\t1\nPARAM\t8e3d11d0-6620-42e1-9876-722eecc491b5\tPset_CoaxialCable.NumberOfCoaxialPairs\tINTEGER\t\t122\t1\tIfcCountMeasure\t1\nPARAM\t57af1cb6-d413-40b4-8b55-a72bf017c3c4\tPset_CoaxialCable.PropagationSpeedCoefficient\tNUMBER\t\t122\t1\tIfcRatioMeasure\t1\nPARAM\t09f05b05-bdff-42f2-9eac-3ab007499062\tPset_CoaxialCable.RadiantFrequency\tNUMBER\t\t122\t1\tIfcFrequencyMeasure\t1\nPARAM\t6b8d3a55-33d6-48b2-88d0-8528f02e1429\tPset_CoaxialCable.TransmissionLoss\tNUMBER\t\t122\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t123\tPset_CoilOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t789cd000-d1c9-11e1-8000-00215ad4efdf\tPset_CoilOccurrence.HasSoundAttenuation\tYESNO\t\t123\t1\tIfcBoolean\t1\n#\nGROUP\t124\tPset_CoilPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t87838280-d1c9-11e1-8000-00215ad4efdf\tPset_CoilPHistory.AirPressureDropCurve\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\nPARAM\tc91e617f-c419-4e09-895b-38632f4b11a0\tPset_CoilPHistory.AirPressureDropCurveHistory\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\nPARAM\t84889200-d1c9-11e1-8000-00215ad4efdf\tPset_CoilPHistory.AtmosphericPressure\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\nPARAM\t8e11fa00-d1c9-11e1-8000-00215ad4efdf\tPset_CoilPHistory.FaceVelocity\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\nPARAM\t8b170980-d1c9-11e1-8000-00215ad4efdf\tPset_CoilPHistory.SoundCurve\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\nPARAM\tcaf4449e-6458-4ce9-9dfa-ed371fc86f6d\tPset_CoilPHistory.SoundCurveHistory\tMULTILINETEXT\t\t124\t1\tIfcTimeSeries\t1\n#\nGROUP\t125\tPset_CoilTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb4d03080-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.AirflowRateRange\tMULTILINETEXT\t\t125\t1\tPropertyBoundedValue\t1\nPARAM\ta121cb96-2bc1-4191-8450-09512cad7abe\tPset_CoilTypeCommon.AirFlowRateRange\tMULTILINETEXT\t\t125\t1\tPropertyBoundedValue\t1\nPARAM\t18833f40-ebac-42d3-8cd9-797857399417\tPset_CoilTypeCommon.CoilPlacement\tTEXT\t\t125\t1\tPEnum_CoilPlacementType\t1\nPARAM\tc0235c00-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.NominalLatentCapacity\tNUMBER\t\t125\t1\tIfcPowerMeasure\t1\nPARAM\tbb5ea800-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.NominalSensibleCapacity\tNUMBER\t\t125\t1\tIfcPowerMeasure\t1\nPARAM\tc580a680-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.NominalUA\tNUMBER\t\t125\t1\tIfcReal\t1\nPARAM\tad108c00-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.OperationalTemperatureRange\tMULTILINETEXT\t\t125\t1\tPropertyBoundedValue\t1\nPARAM\tc9acc400-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.PlacementType\tTEXT\t\t125\t1\tPEnum_CoilPlacementType\t1\nPARAM\t979b6200-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.Reference\tTEXT\t\t125\t1\tIfcIdentifier\t1\nPARAM\t9ec27000-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.Status\tTEXT\t\t125\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t126\tPset_CoilTypeHydronic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3758f000-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.BypassFactor\tNUMBER\t\t126\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\teea13700-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.CoilConnectionDirection\tTEXT\t\t126\t1\tPEnum_CoilConnectionDirection\t1\nPARAM\te1844800-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.CoilCoolant\tTEXT\t\t126\t1\tPEnum_CoilCoolant\t1\nPARAM\t0b3d6f00-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.CoilFaceArea\tAREA\t\t126\t1\tIfcAreaMeasure\t1\nPARAM\tfd87e980-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.CoilFluidArrangement\tTEXT\t\t126\t1\tPEnum_CoilFluidArrangement\t1\nPARAM\t04e5e344-740f-4a5a-a535-00ba794bd420\tPset_CoilTypeHydronic.Fluid\tMULTILINETEXT\t\t126\t1\tIfcMaterial\t1\nPARAM\tdc26fd80-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.FluidPressureRange\tMULTILINETEXT\t\t126\t1\tPropertyBoundedValue\t1\nPARAM\t109ab980-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.HeatExchangeSurfaceArea\tAREA\t\t126\t1\tIfcAreaMeasure\t1\nPARAM\t15f80400-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.PrimarySurfaceArea\tAREA\t\t126\t1\tIfcAreaMeasure\t1\nPARAM\t1abcb800-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.SecondarySurfaceArea\tAREA\t\t126\t1\tIfcAreaMeasure\t1\nPARAM\t3cb63a80-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.SensibleHeatRatio\tNUMBER\t\t126\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t26a87a00-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.TotalUACurves\tMULTILINETEXT\t\t126\t1\tPropertyTableValue\t1\nPARAM\t2f00b500-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.WaterPressureDropCurve\tMULTILINETEXT\t\t126\t1\tPropertyTableValue\t1\nPARAM\t42ac1b80-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.WetCoilFraction\tNUMBER\t\t126\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t127\tPset_ColumnCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8737b700-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.FireRating\tTEXT\t\t127\t1\tIfcLabel\t1\nPARAM\t77b86e00-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.IsExternal\tYESNO\t\t127\t1\tIfcBoolean\t1\nPARAM\t8141d600-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.LoadBearing\tYESNO\t\t127\t1\tIfcBoolean\t1\nPARAM\t522b6480-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.Reference\tTEXT\t\t127\t1\tIfcIdentifier\t1\nPARAM\t71c28d00-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.Roll\tNUMBER\t\t127\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t6bccac00-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.Slope\tNUMBER\t\t127\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t5a839f80-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.Status\tTEXT\t\t127\t1\tPEnum_ElementStatus\t1\nPARAM\t7c7d2200-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.ThermalTransmittance\tNUMBER\t\t127\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t128\tPset_CommunicationsAppliancePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t90c11f00-d1ca-11e1-8000-00215ad4efdf\tPset_CommunicationsAppliancePHistory.PowerState\tMULTILINETEXT\t\t128\t1\tIfcTimeSeries\t1\n#\nGROUP\t129\tPset_CommunicationsApplianceTypeAntenna\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta83792e5-9ac2-41d2-a7c9-d40d1c0cf5e3\tPset_CommunicationsApplianceTypeAntenna.AntennaGain\tNUMBER\t\t129\t1\tIfcRatioMeasure\t1\nPARAM\tc6d4d25f-f30c-45ff-a619-59988d2e5358\tPset_CommunicationsApplianceTypeAntenna.AntennaType\tTEXT\t\t129\t1\tPEnum_AntennaType\t1\nPARAM\t1b053b27-ff76-4409-ac35-19caf8772d92\tPset_CommunicationsApplianceTypeAntenna.PolarizationMode\tTEXT\t\t129\t1\tPEnum_PolarizationMode\t1\nPARAM\tdfe4af5b-1236-4946-9036-db20f8cee658\tPset_CommunicationsApplianceTypeAntenna.RadiationPattern\tTEXT\t\t129\t1\tPEnum_RadiationPattern\t1\n#\nGROUP\t130\tPset_CommunicationsApplianceTypeAutomaton\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0da59b44-c7ee-43d6-b9f1-1402313569a8\tPset_CommunicationsApplianceTypeAutomaton.InputSignalType\tTEXT\t\t130\t1\tPEnum_InputOutputSignalType\t1\nPARAM\t2f31282d-90c0-45fd-9bd1-697b27535f56\tPset_CommunicationsApplianceTypeAutomaton.OutputSignalType\tTEXT\t\t130\t1\tPEnum_InputOutputSignalType\t1\n#\nGROUP\t131\tPset_CommunicationsApplianceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9ae31d80-d1ca-11e1-8000-00215ad4efdf\tPset_CommunicationsApplianceTypeCommon.Reference\tTEXT\t\t131\t1\tIfcIdentifier\t1\nPARAM\t9fa7d180-d1ca-11e1-8000-00215ad4efdf\tPset_CommunicationsApplianceTypeCommon.Status\tTEXT\t\t131\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t132\tPset_CommunicationsApplianceTypeComputer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6e266a76-5462-439e-b2f3-f7281b4153be\tPset_CommunicationsApplianceTypeComputer.StorageCapacity\tINTEGER\t\t132\t1\tIfcInteger\t1\nPARAM\t09fb3343-f7ea-4415-a4cb-ccf7013949c3\tPset_CommunicationsApplianceTypeComputer.UserInterfaceType\tTEXT\t\t132\t1\tPEnum_ComputerUIType\t1\n#\nGROUP\t133\tPset_CommunicationsApplianceTypeGateway\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tacb0430d-ee5a-4ebf-a7c3-cc6ad766cdc7\tPset_CommunicationsApplianceTypeGateway.NumberOfInterfaces\tMULTILINETEXT\t\t133\t1\tPropertyTableValue\t1\n#\nGROUP\t134\tPset_CommunicationsApplianceTypeIntelligentPeripheral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tda13f512-e6d4-464f-ab90-fee40c48e1bf\tPset_CommunicationsApplianceTypeIntelligentPeripheral.UserCapacity\tINTEGER\t\t134\t1\tIfcInteger\t1\n#\nGROUP\t135\tPset_CommunicationsApplianceTypeIpNetworkEquipment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5e5ece2b-494e-40fa-a9dc-faaec7931eb4\tPset_CommunicationsApplianceTypeIpNetworkEquipment.EquipmentCapacity\tINTEGER\t\t135\t1\tIfcIntegerCountRateMeasure\t1\nPARAM\tf1d6dd75-91f0-4e9f-8bf9-bab53cade397\tPset_CommunicationsApplianceTypeIpNetworkEquipment.ManagingSoftware\tTEXT\t\t135\t1\tIfcLabel\t1\nPARAM\t4f6b91b5-9f20-4a1a-b09c-c73ab07b402e\tPset_CommunicationsApplianceTypeIpNetworkEquipment.NumberOfCoolingFans\tINTEGER\t\t135\t1\tIfcCountMeasure\t1\nPARAM\t4b0d77f7-4b0d-4de8-bec2-28e4b11a5265\tPset_CommunicationsApplianceTypeIpNetworkEquipment.NumberOfInterfaces\tMULTILINETEXT\t\t135\t1\tPropertyTableValue\t1\nPARAM\t6c6e0da2-40de-4453-847e-96e456e284cd\tPset_CommunicationsApplianceTypeIpNetworkEquipment.NumberOfSlots\tINTEGER\t\t135\t1\tIfcCountMeasure\t1\nPARAM\t73d0cd19-b694-40cd-b700-96fc8e898fa7\tPset_CommunicationsApplianceTypeIpNetworkEquipment.SupportedProtocol\tTEXT\t\t135\t1\tIfcLabel\t1\n#\nGROUP\t136\tPset_CommunicationsApplianceTypeModem\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t75a567ec-ca18-41f2-b2e8-f12ecdad56b2\tPset_CommunicationsApplianceTypeModem.CommonInterfaceType\tTEXT\t\t136\t1\tPEnum_CommonInterfaceType\t1\nPARAM\tfedd4a9e-2082-432a-b54a-de4cbdac7466\tPset_CommunicationsApplianceTypeModem.NumberOfCommonInterfaces\tMULTILINETEXT\t\t136\t1\tPropertyTableValue\t1\nPARAM\t63afd9aa-0ae6-4aaf-acf1-94f117cb9bd7\tPset_CommunicationsApplianceTypeModem.NumberOfTrafficInterfaces\tMULTILINETEXT\t\t136\t1\tPropertyTableValue\t1\nPARAM\tc6afc5cc-4ece-491f-abcd-6dc55fa617e7\tPset_CommunicationsApplianceTypeModem.TrafficInterfaceType\tTEXT\t\t136\t1\tPEnum_ModemTrafficInterfaceType\t1\n#\nGROUP\t137\tPset_CommunicationsApplianceTypeOpticalLineTerminal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4485fdae-f1ad-4ce3-963d-f2e16af98c25\tPset_CommunicationsApplianceTypeOpticalLineTerminal.NumberOfInterfaces\tMULTILINETEXT\t\t137\t1\tPropertyTableValue\t1\nPARAM\t8b2cb9d2-3386-4664-b5f7-3a7eb32a3565\tPset_CommunicationsApplianceTypeOpticalLineTerminal.NumberOfSlots\tINTEGER\t\t137\t1\tIfcCountMeasure\t1\n#\nGROUP\t138\tPset_CommunicationsApplianceTypeOpticalNetworkUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t51a24323-9450-46c8-b997-1031661f0bc1\tPset_CommunicationsApplianceTypeOpticalNetworkUnit.NumberOfInterfaces\tMULTILINETEXT\t\t138\t1\tPropertyTableValue\t1\nPARAM\t4a8c57c4-cc77-4080-bd3e-f488cb66963c\tPset_CommunicationsApplianceTypeOpticalNetworkUnit.OpticalNetworkUnitType\tTEXT\t\t138\t1\tPEnum_OpticalNetworkUnitType\t1\n#\nGROUP\t139\tPset_CommunicationsApplianceTypeTelecommand\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5060609e-3bb1-4176-99da-03cea42b91d0\tPset_CommunicationsApplianceTypeTelecommand.NumberOfCPUs\tINTEGER\t\t139\t1\tIfcCountMeasure\t1\nPARAM\tb390812f-a646-427a-8bff-94c4af2f40ef\tPset_CommunicationsApplianceTypeTelecommand.NumberOfWorkstations\tMULTILINETEXT\t\t139\t1\tPropertyTableValue\t1\n#\nGROUP\t140\tPset_CommunicationsApplianceTypeTelephonyExchange\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0ccb9795-1144-4517-a3bc-01eea744c7c0\tPset_CommunicationsApplianceTypeTelephonyExchange.UserCapacity\tINTEGER\t\t140\t1\tIfcInteger\t1\n#\nGROUP\t141\tPset_CommunicationsApplianceTypeTransportEquipment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0991e3fa-050c-46aa-ac67-573c8d263fc4\tPset_CommunicationsApplianceTypeTransportEquipment.ElectricalCrossCapacity\tTEXT\t\t141\t1\tIfcLabel\t1\nPARAM\t28a48cc5-9086-4c04-8b75-c38db8d9cb6b\tPset_CommunicationsApplianceTypeTransportEquipment.IsUpgradable\tYESNO\t\t141\t1\tIfcBoolean\t1\nPARAM\t1d85e225-305f-4f64-8a40-524d63e2e7fc\tPset_CommunicationsApplianceTypeTransportEquipment.NumberOfSlots\tINTEGER\t\t141\t1\tIfcCountMeasure\t1\nPARAM\tfffc30a7-df90-4440-9d04-d3e9481885f6\tPset_CommunicationsApplianceTypeTransportEquipment.TransportEquipmentAssemblyType\tTEXT\t\t141\t1\tPEnum_TransportEquipmentAssemblyType\t1\nPARAM\tc3eafb53-5cc6-47a3-aad3-ddf1aa099985\tPset_CommunicationsApplianceTypeTransportEquipment.TransportEquipmentType\tTEXT\t\t141\t1\tPEnum_TransportEquipmentType\t1\n#\nGROUP\t142\tPset_CompressorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te09fe600-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.CoefficientOfPerformance\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\te72e5d80-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.CompressionEfficiency\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\tda116e80-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.CompressorCapacity\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\tf0b7c580-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.CompressorTotalEfficiency\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\t0200d200-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.CompressorTotalHeatGain\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\tdd0c5f00-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.EnergyEfficiencyRatio\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\tff05e180-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.FrictionHeatGain\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\t05945900-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.FullLoadRatio\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\tde767aa2-db4c-45d8-9fee-cc59526d84f0\tPset_CompressorPHistory.FullLoadRatioCurve\tMULTILINETEXT\t\t142\t1\tPropertyListValue\t1\nPARAM\tf8776a00-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.InputPower\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\ted243e80-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.IsentropicEfficiency\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\tfc0af100-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.LubricantPumpHeatGain\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\tea294e00-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.MechanicalEfficiency\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\tf4e3e300-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.ShaftPower\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\nPARAM\te4336d00-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.VolumetricEfficiency\tMULTILINETEXT\t\t142\t1\tIfcTimeSeries\t1\n#\nGROUP\t143\tPset_CompressorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t57d57a00-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.CompressorSpeed\tNUMBER\t\t143\t1\tIfcRotationalFrequencyMeasure\t1\nPARAM\t70de2b00-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.HasHotGasBypass\tYESNO\t\t143\t1\tIfcBoolean\t1\nPARAM\t6459d280-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.IdealCapacity\tNUMBER\t\t143\t1\tIfcPowerMeasure\t1\nPARAM\t6b80e080-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.IdealShaftPower\tNUMBER\t\t143\t1\tIfcPowerMeasure\t1\nPARAM\t76d40c00-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.ImpellerDiameter\tLENGTH\t\t143\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5310c600-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.MaximumPartLoadRatio\tNUMBER\t\t143\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4db37b80-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.MinimumPartLoadRatio\tNUMBER\t\t143\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5dcb5b00-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.NominalCapacity\tNUMBER\t\t143\t1\tIfcPowerMeasure\t1\nPARAM\t278ddb80-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.PowerSource\tTEXT\t\t143\t1\tPEnum_CompressorTypePowerSource\t1\nPARAM\t0fb65780-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.Reference\tTEXT\t\t143\t1\tIfcIdentifier\t1\nPARAM\t36748e00-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.RefrigerantClass\tTEXT\t\t143\t1\tPEnum_RefrigerantClass\t1\nPARAM\t0aeb60de-a6a2-499d-9baa-1e4c99920e0d\tPset_CompressorTypeCommon.RefrigerantType\tMULTILINETEXT\t\t143\t1\tIfcMaterial\t1\nPARAM\t1513a200-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.Status\tTEXT\t\t143\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t144\tPset_ConcreteElementGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbf832383-c0a0-496f-9b87-f9d11955c454\tPset_ConcreteElementGeneral.AssemblyPlace\tTEXT\t\t144\t1\tPEnum_AssemblyPlace\t1\nPARAM\t1e1d5920-bd4a-4e80-be8a-4a84be7d3c25\tPset_ConcreteElementGeneral.CastingMethod\tTEXT\t\t144\t1\tPEnum_ConcreteCastingMethod\t1\nPARAM\t0764b8e3-6a7c-4275-859f-1534ea3eec09\tPset_ConcreteElementGeneral.ConcreteCover\tLENGTH\t\t144\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbef32e80-d1cb-11e1-8000-00215ad4efdf\tPset_ConcreteElementGeneral.ConcreteCoverAtLinks\tLENGTH\t\t144\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb8fd4d80-d1cb-11e1-8000-00215ad4efdf\tPset_ConcreteElementGeneral.ConcreteCoverAtMainBars\tLENGTH\t\t144\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t64af56b3-0b45-40c2-b43d-74b49a28b9db\tPset_ConcreteElementGeneral.ConstructionMethod\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\tabe05e80-d1cb-11e1-8000-00215ad4efdf\tPset_ConcreteElementGeneral.ConstructionToleranceClass\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\t5ec8e50f-7c94-47d4-a3b8-0da312bc2657\tPset_ConcreteElementGeneral.ConstructionType\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\ta4b95080-d1cb-11e1-8000-00215ad4efdf\tPset_ConcreteElementGeneral.DimensionalAccuracyClass\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\t3a40f78c-380c-41fc-85fe-f2d3cbbf55db\tPset_ConcreteElementGeneral.EnvironmentalClass\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\t9bee0bf7-2ad3-4a66-bef5-7b71b7ca175b\tPset_ConcreteElementGeneral.ExposureClass\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\t1a2f6c91-9cff-4fc8-a350-1998ae04d167\tPset_ConcreteElementGeneral.FireRating\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\t94985a4b-78a9-4230-a252-bb76d489d340\tPset_ConcreteElementGeneral.LifeCycleEnvironmentalLoad\tTEXT\t\t144\t1\tIfcText\t1\nPARAM\t03693864-2cbf-49e2-a90d-346134ac7475\tPset_ConcreteElementGeneral.ReinforcementAreaRatio\tNUMBER\t\t144\t1\tIfcAreaDensityMeasure\t1\nPARAM\tb88ca225-2c4b-4014-bcf2-89bbbd596398\tPset_ConcreteElementGeneral.ReinforcementStrengthClass\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\ta1c0e785-c9bc-4187-8ddb-c67fd0ff3d26\tPset_ConcreteElementGeneral.ReinforcementVolumeRatio\tMASS_DENSITY\t\t144\t1\tIfcMassDensityMeasure\t1\nPARAM\t906b76ed-e429-4fd6-9608-609a1bc961a9\tPset_ConcreteElementGeneral.ServiceLife\tNUMBER\t\t144\t1\tIfcTimeMeasure\t1\nPARAM\t96390dc4-43fd-41d8-8cb6-aca86dce4993\tPset_ConcreteElementGeneral.StrengthClass\tTEXT\t\t144\t1\tIfcLabel\t1\nPARAM\t84899180-d1cb-11e1-8000-00215ad4efdf\tPset_ConcreteElementGeneral.StructuralClass\tTEXT\t\t144\t1\tIfcLabel\t1\n#\nGROUP\t145\tPset_ConcreteElementQuantityGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3b37fec6-340b-4132-b522-68eb4d404689\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryDescription\tTEXT\t\t145\t1\tIfcLabel\t1\nPARAM\t94cdc2d2-f10b-459a-b7f7-b877423d5bda\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryGroupCode\tTEXT\t\t145\t1\tIfcLabel\t1\nPARAM\tb52d3dd7-ad25-4e25-ba15-d0b402faa8ec\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryMaterial\tTEXT\t\t145\t1\tIfcLabel\t1\nPARAM\ta9b5d66d-1a3f-4618-bbcb-c8f645d92831\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryMaterialSpecificationReference\tMULTILINETEXT\t\t145\t1\tIfcExternalReference\t1\nPARAM\t8e8df386-e824-4ce5-a01e-b52fd3eb0e07\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryQuantityByNumberOfItems\tINTEGER\t\t145\t1\tIfcCountMeasure\t1\nPARAM\ta791db89-aae4-4987-96dc-bbf065f5363b\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryQuantityByWeight\tNUMBER\t\t145\t1\tIfcMassMeasure\t1\nPARAM\t67b58211-c7d5-4365-aa3b-ea9ccbe9c50b\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessorySize\tTEXT\t\t145\t1\tIfcLabel\t1\nPARAM\t9bacb691-e039-46ae-89b4-495ab34f4d48\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryType\tTEXT\t\t145\t1\tIfcLabel\t1\nPARAM\t44b8fec8-6c6d-44ee-bed8-e61ee93d16c1\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryTypeSpecificationReference\tMULTILINETEXT\t\t145\t1\tIfcExternalReference\t1\nPARAM\t957283af-9743-497f-8920-281a61b190d0\tPset_ConcreteElementQuantityGeneral.TotalConcreteQuantity\tVOLUME\t\t145\t1\tIfcVolumeMeasure\t1\nPARAM\t6f0e6260-0524-43b6-91bb-8c15ec96230f\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarDiameter\tLENGTH\t\t145\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7aaaed83-ff94-4539-87f7-bc93388b1d44\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarQuantity\tNUMBER\t\t145\t1\tIfcMassMeasure\t1\nPARAM\t653ef51a-ac75-4ae0-b15c-903a6643c08c\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarSteelGrade\tTEXT\t\t145\t1\tIfcLabel\t1\nPARAM\t6ce74f47-6fa5-4f0b-8aba-92e37d05f81d\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarSteelGradeSpecificationReference\tMULTILINETEXT\t\t145\t1\tIfcExternalReference\t1\n#\nGROUP\t146\tPset_ConcreteElementSurfaceFinishQuantityGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta3c0f9a6-5875-4b69-b85d-1c2ad87823f6\tPset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceArea\tAREA\t\t146\t1\tIfcAreaMeasure\t1\nPARAM\t49e67d5d-134e-4fde-aacd-d5c43916ed03\tPset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceClass\tTEXT\t\t146\t1\tIfcLabel\t1\nPARAM\t7f7621d9-ce39-4fc9-881d-ab9de678a378\tPset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceType\tTEXT\t\t146\t1\tIfcLabel\t1\nPARAM\t3e028658-84d4-436d-8e97-440c25c03834\tPset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceArea\tAREA\t\t146\t1\tIfcAreaMeasure\t1\nPARAM\tdd5d5098-66be-46e9-a0c0-e08b43bf1e02\tPset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceClass\tTEXT\t\t146\t1\tIfcLabel\t1\nPARAM\t7aaadab7-9563-46ea-b817-1c7b61cacbfe\tPset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceTextureDescription\tTEXT\t\t146\t1\tIfcText\t1\nPARAM\tc9b75eb0-6176-4a76-89c0-7b7de3be32f1\tPset_ConcreteElementSurfaceFinishQuantityGeneral.SurfaceDescriptionDocReference\tMULTILINETEXT\t\t146\t1\tIfcExternalReference\t1\n#\nGROUP\t147\tPset_CondenserPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a1bc780-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.CompressorCondenserHeatGain\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\t7daf4e80-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.CompressorCondenserPressureDrop\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\t8142d580-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.CondenserMeanVoidFraction\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\t6ec89c00-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.CondensingTemperature\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\t640e0700-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.ExteriorHeatTransferCoefficient\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\t5fe1e980-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.HeatRejectionRate\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\t67a18e00-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.InteriorHeatTransferCoefficient\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\t72f4b980-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.LogarithmicMeanTemperatureDifference\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\t6bcdab80-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.RefrigerantFoulingResistance\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\t76884080-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.UAcurves\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\nPARAM\t84d65c80-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.WaterFoulingResistance\tMULTILINETEXT\t\t147\t1\tIfcTimeSeries\t1\n#\nGROUP\t148\tPset_CondenserTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb0f1dd80-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.ExternalSurfaceArea\tAREA\t\t148\t1\tIfcAreaMeasure\t1\nPARAM\tbc450900-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.InternalRefrigerantVolume\tVOLUME\t\t148\t1\tIfcVolumeMeasure\t1\nPARAM\tb6e7be80-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.InternalSurfaceArea\tAREA\t\t148\t1\tIfcAreaMeasure\t1\nPARAM\tc1a25380-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.InternalWaterVolume\tVOLUME\t\t148\t1\tIfcVolumeMeasure\t1\nPARAM\tc6670780-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.NominalHeatTransferArea\tAREA\t\t148\t1\tIfcAreaMeasure\t1\nPARAM\tcbc45200-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.NominalHeatTransferCoefficient\tNUMBER\t\t148\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t8f90f180-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.Reference\tTEXT\t\t148\t1\tIfcIdentifier\t1\nPARAM\t94ee3c00-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.RefrigerantClass\tTEXT\t\t148\t1\tPEnum_RefrigerantClass\t1\nPARAM\te1ed813e-ae35-42e5-99e8-50bd1b3e7a48\tPset_CondenserTypeCommon.RefrigerantType\tMULTILINETEXT\t\t148\t1\tIfcMaterial\t1\nPARAM\td296b7a0-f2bb-4e30-9010-357681bd4adc\tPset_CondenserTypeCommon.Status\tTEXT\t\t148\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t149\tPset_Condition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdbdc3180-d1cc-11e1-8000-00215ad4efdf\tPset_Condition.AssessmentCondition\tTEXT\t\t149\t1\tIfcLabel\t1\nPARAM\td7177d80-d1cc-11e1-8000-00215ad4efdf\tPset_Condition.AssessmentDate\tTEXT\t\t149\t1\tIfcDate\t1\nPARAM\te1397c00-d1cc-11e1-8000-00215ad4efdf\tPset_Condition.AssessmentDescription\tTEXT\t\t149\t1\tIfcText\t1\nPARAM\t63e40965-a200-4bde-a2b8-16f56da1aef3\tPset_Condition.AssessmentFrequency\tNUMBER\t\t149\t1\tIfcTimeMeasure\t1\nPARAM\tf66d67c0-0ab6-41a1-8b10-a525df615d77\tPset_Condition.AssessmentMethod\tMULTILINETEXT\t\t149\t1\tIfcDocumentReference\t1\nPARAM\td9a43604-9a1f-4eab-b11d-ed427a8f9f9b\tPset_Condition.AssessmentType\tTEXT\t\t149\t1\tIfcLabel\t1\nPARAM\t708aaa85-76fd-48ba-8f9a-a450b389efa5\tPset_Condition.LastAssessmentReport\tTEXT\t\t149\t1\tIfcLabel\t1\nPARAM\tc81c45d4-f3d4-4a61-8526-59c2e435f533\tPset_Condition.NextAssessmentDate\tTEXT\t\t149\t1\tIfcDate\t1\n#\nGROUP\t150\tPset_ConstructionAdministration\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t296dd45f-5005-40b2-b118-e8e4f172343b\tPset_ConstructionAdministration.ProcurementMethod\tTEXT\t\t150\t1\tIfcLabel\t1\nPARAM\t0f3bcab6-f8b4-42b4-b468-2f169010e5d1\tPset_ConstructionAdministration.SpecificationSectionNumber\tTEXT\t\t150\t1\tIfcLabel\t1\nPARAM\tc34a85bf-683a-4561-ae21-e3f8d2e12a5b\tPset_ConstructionAdministration.SubmittalIdentifer\tTEXT\t\t150\t1\tIfcLabel\t1\n#\nGROUP\t151\tPset_ConstructionOccurence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t31771223-4140-4ed7-8684-dd6eb73a6474\tPset_ConstructionOccurence.AssetIdentifier\tTEXT\t\t151\t1\tIfcLabel\t1\nPARAM\t9c02813d-cbea-44d2-97f4-51ec5ecddc41\tPset_ConstructionOccurence.InstallationDate\tTEXT\t\t151\t1\tIfcDate\t1\nPARAM\td9061448-7f73-432f-a77c-7f2bf4bce3c3\tPset_ConstructionOccurence.ModelNumber\tTEXT\t\t151\t1\tIfcLabel\t1\nPARAM\tcc87dd45-b28c-499a-812d-8320b5a37c2f\tPset_ConstructionOccurence.TagNumber\tTEXT\t\t151\t1\tIfcLabel\t1\n#\nGROUP\t152\tPset_ConstructionResource\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t00d0a480-d1cd-11e1-8000-00215ad4efdf\tPset_ConstructionResource.ActualCompletion\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\tf9110000-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.ActualCost\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\tf1515b80-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.ActualWork\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\t2730383e-6034-47e7-95a2-9af1151a45ba\tPset_ConstructionResource.ActualWorkTime\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\tfb735a00-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.RemainingCost\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\tf3b3b580-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.RemainingWork\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\t0354b932-a487-4177-84ee-7954f717fcec\tPset_ConstructionResource.RemainingWorkProgression\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\tfe6e4a80-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.ScheduleCompletion\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\tf6aea600-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.ScheduleCost\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\tee566b00-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.ScheduleWork\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\nPARAM\t00b07eff-f778-4925-ad7a-6bced08814cf\tPset_ConstructionResource.ScheduleWorkProgression\tMULTILINETEXT\t\t152\t1\tIfcTimeSeries\t1\n#\nGROUP\t153\tPset_ControllerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0cbc6680-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerPHistory.Quality\tMULTILINETEXT\t\t153\t1\tIfcTimeSeries\t1\nPARAM\t0f1ec080-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerPHistory.Status\tMULTILINETEXT\t\t153\t1\tIfcTimeSeries\t1\nPARAM\t09c17600-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerPHistory.Value\tMULTILINETEXT\t\t153\t1\tIfcTimeSeries\t1\nPARAM\t154f1e41-4e1d-4579-ad85-8e76141c76c9\tPset_ControllerPHistory.ValueHistory\tMULTILINETEXT\t\t153\t1\tIfcTimeSeries\t1\n#\nGROUP\t154\tPset_ControllerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tee111c9c-558b-4b26-a786-d1d89dea88aa\tPset_ControllerTypeCommon.ControlType\tTEXT\t\t154\t1\tPEnum_ControlType\t1\nPARAM\t1776fb80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeCommon.Reference\tTEXT\t\t154\t1\tIfcIdentifier\t1\nPARAM\t3e1aad58-71b1-4b3b-a925-656f7f74b4c2\tPset_ControllerTypeCommon.SignalFactor\tNUMBER\t\t154\t1\tIfcReal\t1\nPARAM\tc035815e-01a2-4fd9-a21c-9795e7bd0eb4\tPset_ControllerTypeCommon.SignalOffset\tNUMBER\t\t154\t1\tIfcReal\t1\nPARAM\tf5327db5-7978-4ec7-ac5f-a32887bd814d\tPset_ControllerTypeCommon.SignalTime\tNUMBER\t\t154\t1\tIfcTimeMeasure\t1\nPARAM\t1c3baf80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeCommon.Status\tTEXT\t\t154\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t155\tPset_ControllerTypeFloating\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2eb5e900-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.ControlType\tTEXT\t\t155\t1\tPEnum_ControllerTypeFloating\t1\nPARAM\t56a54c80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.Labels\tMULTILINETEXT\t\t155\t1\tPropertyTableValue\t1\nPARAM\t5efd8780-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.Range\tMULTILINETEXT\t\t155\t1\tPropertyBoundedValue\t1\nPARAM\t6de43a00-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.SignalFactor\tNUMBER\t\t155\t1\tIfcReal\t1\nPARAM\t69b81c80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.SignalOffset\tNUMBER\t\t155\t1\tIfcReal\t1\nPARAM\t72a8ee00-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.SignalTime\tNUMBER\t\t155\t1\tIfcTimeMeasure\t1\nPARAM\t63c23b80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.Value\tMULTILINETEXT\t\t155\t1\tPropertyBoundedValue\t1\n#\nGROUP\t156\tPset_ControllerTypeMultiPosition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e94b000-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeMultiPosition.ControlType\tTEXT\t\t156\t1\tPEnum_ControllerMultiPositionType\t1\nPARAM\t3e6bde32-0968-49dd-8907-d922d82e10a0\tPset_ControllerTypeMultiPosition.IntegerRange\tMULTILINETEXT\t\t156\t1\tPropertyBoundedValue\t1\nPARAM\t89e7db80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeMultiPosition.Labels\tMULTILINETEXT\t\t156\t1\tPropertyTableValue\t1\nPARAM\t910ee980-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeMultiPosition.Range\tMULTILINETEXT\t\t156\t1\tPropertyBoundedValue\t1\nPARAM\t95d39d80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeMultiPosition.Value\tMULTILINETEXT\t\t156\t1\tPropertyBoundedValue\t1\n#\nGROUP\t157\tPset_ControllerTypeProgrammable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5a95c146-e11d-4ab0-9a7b-5dbaa356881c\tPset_ControllerTypeProgrammable.Application\tTEXT\t\t157\t1\tPEnum_ControllerApplication\t1\nPARAM\ta126c900-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProgrammable.ControlType\tTEXT\t\t157\t1\tPEnum_ControllerTypeProgrammable\t1\nPARAM\tab48c780-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProgrammable.FirmwareVersion\tTEXT\t\t157\t1\tIfcLabel\t1\nPARAM\tb0a61200-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProgrammable.SoftwareVersion\tTEXT\t\t157\t1\tIfcLabel\t1\n#\nGROUP\t158\tPset_ControllerTypeProportional\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbd2a6a80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.ControlType\tTEXT\t\t158\t1\tPEnum_ControllerProportionalType\t1\nPARAM\teba84580-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.DerivativeConstant\tNUMBER\t\t158\t1\tIfcReal\t1\nPARAM\te6e39180-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.IntegralConstant\tNUMBER\t\t158\t1\tIfcReal\t1\nPARAM\tcc111d00-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.Labels\tMULTILINETEXT\t\t158\t1\tPropertyTableValue\t1\nPARAM\te1864700-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.ProportionalConstant\tNUMBER\t\t158\t1\tIfcReal\t1\nPARAM\td4695800-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.Range\tMULTILINETEXT\t\t158\t1\tPropertyBoundedValue\t1\nPARAM\tb6a967eb-017d-401e-975c-498724ae1213\tPset_ControllerTypeProportional.SignalFactor1\tNUMBER\t\t158\t1\tIfcReal\t1\nPARAM\tf6dcf389-fbb9-43fa-9a4a-c19a7eada379\tPset_ControllerTypeProportional.SignalFactor2\tNUMBER\t\t158\t1\tIfcReal\t1\nPARAM\tc3202180-6f9a-4584-8574-0337b159aa41\tPset_ControllerTypeProportional.SignalTime1\tNUMBER\t\t158\t1\tIfcTimeMeasure\t1\nPARAM\tac973cbe-b8e5-4abb-9be1-b890024686b6\tPset_ControllerTypeProportional.SignalTime2\tNUMBER\t\t158\t1\tIfcTimeMeasure\t1\nPARAM\tf7940780-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.SignalTimeDecrease\tNUMBER\t\t158\t1\tIfcTimeMeasure\t1\nPARAM\tf236bd00-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.SignalTimeIncrease\tNUMBER\t\t158\t1\tIfcTimeMeasure\t1\nPARAM\tda5f3900-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.Value\tMULTILINETEXT\t\t158\t1\tPropertyBoundedValue\t1\n#\nGROUP\t159\tPset_ControllerTypeTwoPosition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t619d5848-fcb1-492f-87c8-fe13c54b13ec\tPset_ControllerTypeTwoPosition.BandWidth\tNUMBER\t\t159\t1\tIfcReal\t1\nPARAM\t02e73300-d1ce-11e1-8000-00215ad4efdf\tPset_ControllerTypeTwoPosition.ControlType\tTEXT\t\t159\t1\tPEnum_ControllerTwoPositionType\t1\nPARAM\t201c0180-d1ce-11e1-8000-00215ad4efdf\tPset_ControllerTypeTwoPosition.Labels\tMULTILINETEXT\t\t159\t1\tPropertyTableValue\t1\nPARAM\t27dba600-d1ce-11e1-8000-00215ad4efdf\tPset_ControllerTypeTwoPosition.Polarity\tYESNO\t\t159\t1\tIfcBoolean\t1\nPARAM\t2d38f080-d1ce-11e1-8000-00215ad4efdf\tPset_ControllerTypeTwoPosition.Value\tYESNO\t\t159\t1\tIfcBoolean\t1\n#\nGROUP\t160\tPset_CooledBeamPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t404bc080-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.BeamCoolingCapacity\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t4346b100-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.BeamHeatingCapacity\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t4641a180-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.CoolingWaterFlowRate\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t4cd01900-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.CorrectionFactorForCooling\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t5063a000-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.CorrectionFactorForHeating\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t493c9200-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.HeatingWaterFlowRate\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t59ed0800-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.ReturnWaterTemperatureCooling\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t607b7f80-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.ReturnWaterTemperatureHeating\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t578aae00-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.SupplyWaterTemperatureCooling\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t5ce7f880-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.SupplyWaterTemperatureHeating\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t39bd4900-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.TotalCoolingCapacity\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t3cb83980-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.TotalHeatingCapacity\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\nPARAM\t53f72700-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.WaterPressureDropCurves\tMULTILINETEXT\t\t160\t1\tIfcTimeSeries\t1\n#\nGROUP\t161\tPset_CooledBeamPHistoryActive\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c674180-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistoryActive.AirFlowRate\tMULTILINETEXT\t\t161\t1\tIfcTimeSeries\t1\nPARAM\t72f5b900-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistoryActive.AirPressureDropCurves\tMULTILINETEXT\t\t161\t1\tIfcTimeSeries\t1\nPARAM\t6ffac880-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistoryActive.Throw\tMULTILINETEXT\t\t161\t1\tIfcTimeSeries\t1\n#\nGROUP\t162\tPset_CooledBeamTypeActive\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7c7f2100-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeActive.AirFlowConfiguration\tTEXT\t\t162\t1\tPEnum_CooledBeamActiveAirFlowConfigurationType\t1\nPARAM\t8acd3d00-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeActive.AirflowRateRange\tMULTILINETEXT\t\t162\t1\tPropertyBoundedValue\t1\nPARAM\t32b3c76d-c8fc-45b3-a856-c3a7807f6497\tPset_CooledBeamTypeActive.AirFlowRateRange\tMULTILINETEXT\t\t162\t1\tPropertyBoundedValue\t1\nPARAM\ta0426700-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeActive.ConnectionSize\tLENGTH\t\t162\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t915bb480-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeActive.SupplyAirConnectionType\tTEXT\t\t162\t1\tPEnum_CooledBeamSupplyAirConnectionType\t1\n#\nGROUP\t163\tPset_CooledBeamTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a0a1400-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.CoilLength\tLENGTH\t\t163\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3ecec800-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.CoilWidth\tLENGTH\t\t163\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9fe9471c-ee77-4958-9c4f-e9277ab33ae8\tPset_CooledBeamTypeCommon.ConnectionSize\tLENGTH\t\t163\t1\tIfcLengthMeasure\t1\nPARAM\t34acc980-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.FinishColor\tTEXT\t\t163\t1\tIfcLabel\t1\nPARAM\ta93af3fb-89b2-417d-9d22-a45b3737e477\tPset_CooledBeamTypeCommon.FinishColour\tTEXT\t\t163\t1\tIfcLabel\t1\nPARAM\t15ae3780-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.IntegratedLightingType\tTEXT\t\t163\t1\tPEnum_CooledBeamIntegratedLightingType\t1\nPARAM\tbfd98f80-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.IsFreeHanging\tYESNO\t\t163\t1\tIfcBoolean\t1\nPARAM\t8ef76eb1-c5ff-4ae1-b3dc-b49a7bf4e09e\tPset_CooledBeamTypeCommon.Material\tMULTILINETEXT\t\t163\t1\tIfcMaterial\t1\nPARAM\tdbdd3100-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalCoolingCapacity\tNUMBER\t\t163\t1\tIfcPowerMeasure\t1\nPARAM\tfc0cf000-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalHeatingCapacity\tNUMBER\t\t163\t1\tIfcPowerMeasure\t1\nPARAM\tf0b9c480-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalReturnWaterTemperatureCooling\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t0af3a280-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalReturnWaterTemperatureHeating\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\teb5c7a00-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureCooling\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t062eee80-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureHeating\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\te697c600-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalSurroundingHumidityCooling\tNUMBER\t\t163\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\te1d31200-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalSurroundingTemperatureCooling\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t016a3a80-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalSurroundingTemperatureHeating\tNUMBER\t\t163\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tf6170f00-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalWaterFlowCooling\tNUMBER\t\t163\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t1050ed00-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalWaterFlowHeating\tNUMBER\t\t163\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t25c61700-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.PipeConnection\tTEXT\t\t163\t1\tPEnum_CooledBeamPipeConnection\t1\nPARAM\t21535213-7813-4832-9936-8109a395d8c7\tPset_CooledBeamTypeCommon.PipeConnectionEnum\tTEXT\t\t163\t1\tPEnum_CooledBeamPipeConnection\t1\nPARAM\taafcfc00-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.Reference\tTEXT\t\t163\t1\tIfcIdentifier\t1\nPARAM\tb05a4680-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.Status\tTEXT\t\t163\t1\tPEnum_ElementStatus\t1\nPARAM\tc536da00-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.WaterFlowControlSystemType\tTEXT\t\t163\t1\tPEnum_CooledBeamWaterFlowControlSystemType\t1\nPARAM\td54eb980-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.WaterPressureRange\tMULTILINETEXT\t\t163\t1\tPropertyBoundedValue\t1\nPARAM\t7e1f41df-14dd-4057-9bd1-16dc65b74289\tPset_CooledBeamTypeCommon.Weight\tNUMBER\t\t163\t1\tIfcMassMeasure\t1\n#\nGROUP\t164\tPset_CoolingTowerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4aba8a00-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerPHistory.Capacity\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\nPARAM\t4db57a80-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerPHistory.HeatTransferCoefficient\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\nPARAM\t57d77900-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerPHistory.Performance\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\nPARAM\t50b06b00-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerPHistory.SumpHeaterPower\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\nPARAM\t5443f200-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerPHistory.UACurve\tMULTILINETEXT\t\t164\t1\tIfcTimeSeries\t1\n#\nGROUP\t165\tPset_CoolingTowerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te9df8180-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.AmbientDesignDryBulbTemperature\tNUMBER\t\t165\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tef3ccc00-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.AmbientDesignWetBulbTemperature\tNUMBER\t\t165\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\td6341b00-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.BasinReserveVolume\tVOLUME\t\t165\t1\tIfcVolumeMeasure\t1\nPARAM\ta553e600-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.CapacityControl\tTEXT\t\t165\t1\tPEnum_CoolingTowerCapacityControl\t1\nPARAM\t4eb03606-5848-4f14-b4bb-f27cefe8158a\tPset_CoolingTowerTypeCommon.CasingMaterial\tMULTILINETEXT\t\t165\t1\tIfcMaterial\t1\nPARAM\t7b022880-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.CircuitType\tTEXT\t\t165\t1\tPEnum_CoolingTowerCircuitType\t1\nPARAM\tc583a500-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.ControlStrategy\tTEXT\t\t165\t1\tPEnum_CoolingTowerControlStrategy\t1\nPARAM\tdb7eac3d-c9dc-4484-8fb1-79a1189f1635\tPset_CoolingTowerTypeCommon.FillMaterial\tMULTILINETEXT\t\t165\t1\tIfcMaterial\t1\nPARAM\t89504480-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.FlowArrangement\tTEXT\t\t165\t1\tPEnum_CoolingTowerFlowArrangement\t1\nPARAM\tdb916580-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.LiftElevationDifference\tLENGTH\t\t165\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t75a4de00-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.NominalCapacity\tNUMBER\t\t165\t1\tIfcPowerMeasure\t1\nPARAM\td0d6d080-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.NumberOfCells\tINTEGER\t\t165\t1\tIfcCountMeasure\t1\nPARAM\te51acd80-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.OperationTemperatureRange\tNUMBER\t\t165\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t6160e100-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.Reference\tTEXT\t\t165\t1\tIfcIdentifier\t1\nPARAM\t95d49d00-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.SprayType\tTEXT\t\t165\t1\tPEnum_CoolingTowerSprayType\t1\nPARAM\t66be2b80-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.Status\tTEXT\t\t165\t1\tPEnum_ElementStatus\t1\nPARAM\te0561980-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.WaterRequirement\tNUMBER\t\t165\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t738855b4-c04c-4e30-bdb3-6cf0127bf466\tPset_CoolingTowerTypeCommon.Weight\tNUMBER\t\t165\t1\tIfcMassMeasure\t1\n#\nGROUP\t166\tPset_CourseApplicationConditions\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t33da02e2-8dac-44a3-98bd-4e084aa85ea1\tPset_CourseApplicationConditions.ApplicationTemperature\tNUMBER\t\t166\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t7f53ac34-2adc-4554-b179-33ba170c2611\tPset_CourseApplicationConditions.WeatherConditions\tTEXT\t\t166\t1\tIfcText\t1\n#\nGROUP\t167\tPset_CourseCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t70b5f00c-c1ab-45b4-935b-c1eab1e03984\tPset_CourseCommon.NominalLength\tLENGTH\t\t167\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tb9729104-5b81-42c1-91e6-c202f744a7f1\tPset_CourseCommon.NominalThickness\tLENGTH\t\t167\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\ta6aa69cd-880f-4e61-8046-4c384af448c3\tPset_CourseCommon.NominalWidth\tLENGTH\t\t167\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t168\tPset_CoveringCeiling\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7ad6e058-1d8a-430d-898c-57d5a7183d0a\tPset_CoveringCeiling.FragilityRating\tTEXT\t\t168\t1\tIfcLabel\t1\nPARAM\tfebc1500-d1cf-11e1-8000-00215ad4efdf\tPset_CoveringCeiling.Permeability\tNUMBER\t\t168\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t04195f80-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCeiling.TileLength\tLENGTH\t\t168\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0976aa00-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCeiling.TileWidth\tLENGTH\t\t168\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t169\tPset_CoveringCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2e6b1d00-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.AcousticRating\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\t45aa0a80-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.Combustible\tYESNO\t\t169\t1\tIfcBoolean\t1\nPARAM\t565a8080-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.Finish\tTEXT\t\t169\t1\tIfcText\t1\nPARAM\t28753c00-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.FireRating\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\t3460fe00-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.FlammabilityRating\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\t63a53c3b-4589-4569-a1c6-71ad903125cb\tPset_CoveringCommon.Fragility\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\t39be4880-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.FragilityRating\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\t4b9feb80-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.IsExternal\tYESNO\t\t169\t1\tIfcBoolean\t1\nPARAM\t9b01cd42-fd2b-4a99-8774-59081c52cd99\tPset_CoveringCommon.Material\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\t14c9d580-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.Reference\tTEXT\t\t169\t1\tIfcIdentifier\t1\nPARAM\t1a272000-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.Status\tTEXT\t\t169\t1\tPEnum_ElementStatus\t1\nPARAM\t3f1b9300-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.SurfaceSpreadOfFlame\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\t50fd3600-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.ThermalTransmittance\tNUMBER\t\t169\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\te0d3c4db-14e5-47b5-9a34-0467f88bebf7\tPset_CoveringCommon.Thickness\tLENGTH\t\t169\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tff16add0-ca54-4912-a2d7-141642c4573f\tPset_CoveringCommon.TotalThickness\tLENGTH\t\t169\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t170\tPset_CoveringFlooring\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t683c2380-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringFlooring.HasAntiStaticSurface\tYESNO\t\t170\t1\tIfcBoolean\t1\nPARAM\t62ded900-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringFlooring.HasNonSkidSurface\tYESNO\t\t170\t1\tIfcBoolean\t1\n#\nGROUP\t171\tPset_CoveringTypeMembrane\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tda693236-51bc-47e2-8c3f-bbb20bec104f\tPset_CoveringTypeMembrane.NominalInstallationDepth\tLENGTH\t\t171\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t43aaef54-6a75-4aac-b30b-e0c360e2c17e\tPset_CoveringTypeMembrane.NominalTransverseInclination\tNUMBER\t\t171\t1\tIfcPlaneAngleMeasure\t1\n#\nGROUP\t172\tPset_CurrentInstrumentTransformer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t41b6b8ce-bb7f-4899-911e-42b5c1800d64\tPset_CurrentInstrumentTransformer.AccuracyClass\tNUMBER\t\t172\t1\tIfcRatioMeasure\t1\nPARAM\t3758677e-0b6a-4983-bac4-7ec55f8715fa\tPset_CurrentInstrumentTransformer.AccuracyGrade\tTEXT\t\t172\t1\tIfcLabel\t1\nPARAM\tb06bd225-fc02-4e5a-b493-5f207c32b73c\tPset_CurrentInstrumentTransformer.NominalCurrent\tNUMBER\t\t172\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tffd13e6f-ff4f-4e8a-a65f-6cfcfc39ce1f\tPset_CurrentInstrumentTransformer.NominalPower\tNUMBER\t\t172\t1\tIfcPowerMeasure\t1\nPARAM\tc5d1f127-9047-4a80-98d5-9eb3ae7c753c\tPset_CurrentInstrumentTransformer.NumberOfPhases\tINTEGER\t\t172\t1\tIfcCountMeasure\t1\nPARAM\t2d86c68d-7713-4134-b127-c889aaaf646d\tPset_CurrentInstrumentTransformer.PrimaryCurrent\tNUMBER\t\t172\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tf8a070cf-e739-4b09-82da-3f6549306527\tPset_CurrentInstrumentTransformer.PrimaryFrequency\tNUMBER\t\t172\t1\tIfcFrequencyMeasure\t1\nPARAM\tf9c30831-76f6-446b-b4ee-3e93f940c369\tPset_CurrentInstrumentTransformer.RatedVoltage\tMULTILINETEXT\t\t172\t1\tPropertyBoundedValue\t1\nPARAM\t21db5e2f-e703-4d39-aacb-1438ae7fc8ab\tPset_CurrentInstrumentTransformer.SecondaryCurrent\tNUMBER\t\t172\t1\tIfcElectricCurrentMeasure\t1\nPARAM\teaa0e632-b4c0-49d5-a461-ddebcd50563a\tPset_CurrentInstrumentTransformer.SecondaryFrequency\tNUMBER\t\t172\t1\tIfcFrequencyMeasure\t1\n#\nGROUP\t173\tPset_CurtainWallCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8b66d300-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.AcousticRating\tTEXT\t\t173\t1\tIfcLabel\t1\nPARAM\t96b9fe80-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.Combustible\tYESNO\t\t173\t1\tIfcBoolean\t1\nPARAM\t915cb400-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.FireRating\tTEXT\t\t173\t1\tIfcLabel\t1\nPARAM\ta6394780-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.IsExternal\tYESNO\t\t173\t1\tIfcBoolean\t1\nPARAM\t75f1a900-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.Reference\tTEXT\t\t173\t1\tIfcIdentifier\t1\nPARAM\t7be78a00-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.Status\tTEXT\t\t173\t1\tPEnum_ElementStatus\t1\nPARAM\t9c174900-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.SurfaceSpreadOfFlame\tTEXT\t\t173\t1\tIfcLabel\t1\nPARAM\ta1749380-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.ThermalTransmittance\tNUMBER\t\t173\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t174\tPset_DamperOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb2250980-d1d0-11e1-8000-00215ad4efdf\tPset_DamperOccurrence.SizingMethod\tTEXT\t\t174\t1\tPEnum_DamperSizingMethod\t1\n#\nGROUP\t175\tPset_DamperPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc36e1600-d1d0-11e1-8000-00215ad4efdf\tPset_DamperPHistory.AirFlowRate\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\nPARAM\tcc5ee780-d1d0-11e1-8000-00215ad4efdf\tPset_DamperPHistory.BladePositionAngle\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\nPARAM\tcff26e80-d1d0-11e1-8000-00215ad4efdf\tPset_DamperPHistory.DamperPosition\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\nPARAM\tc7019d00-d1d0-11e1-8000-00215ad4efdf\tPset_DamperPHistory.Leakage\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\nPARAM\tc9fc8d80-d1d0-11e1-8000-00215ad4efdf\tPset_DamperPHistory.PressureDrop\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\nPARAM\td2ed5f00-d1d0-11e1-8000-00215ad4efdf\tPset_DamperPHistory.PressureLossCoefficient\tMULTILINETEXT\t\t175\t1\tIfcTimeSeries\t1\n#\nGROUP\t176\tPset_DamperTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t16e06400-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.BladeAction\tTEXT\t\t176\t1\tPEnum_DamperBladeAction\t1\nPARAM\t31b2d880-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.BladeEdge\tTEXT\t\t176\t1\tPEnum_DamperBladeEdge\t1\nPARAM\t6fe295a4-17bd-44c2-9e4b-9ae66e3fa336\tPset_DamperTypeCommon.BladeMaterial\tMULTILINETEXT\t\t176\t1\tIfcMaterial\t1\nPARAM\t252e8000-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.BladeShape\tTEXT\t\t176\t1\tPEnum_DamperBladeShape\t1\nPARAM\t0def9280-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.BladeThickness\tLENGTH\t\t176\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t98d08d00-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.CloseOffRating\tNUMBER\t\t176\t1\tIfcPressureMeasure\t1\nPARAM\t42634e80-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.FaceArea\tAREA\t\t176\t1\tIfcAreaMeasure\t1\nPARAM\t8b1b0780-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.FrameDepth\tLENGTH\t\t176\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb6bb77da-767f-490c-9fa7-504ac7b31a80\tPset_DamperTypeCommon.FrameMaterial\tMULTILINETEXT\t\t176\t1\tIfcMaterial\t1\nPARAM\t93734280-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.FrameThickness\tLENGTH\t\t176\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t85252680-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.FrameType\tTEXT\t\t176\t1\tIfcLabel\t1\nPARAM\t750d4700-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.LeakageCurve\tMULTILINETEXT\t\t176\t1\tPropertyTableValue\t1\nPARAM\t67f05800-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.LeakageFullyClosed\tNUMBER\t\t176\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t6cb50c00-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.LossCoefficentCurve\tMULTILINETEXT\t\t176\t1\tPropertyTableValue\t1\nPARAM\t47c09900-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.MaximumAirFlowRate\tNUMBER\t\t176\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t53ac5b00-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.MaximumWorkingPressure\tNUMBER\t\t176\t1\tIfcPressureMeasure\t1\nPARAM\t5e66f000-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.NominalAirFlowRate\tNUMBER\t\t176\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t3d060400-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.NumberofBlades\tINTEGER\t\t176\t1\tIfcInteger\t1\nPARAM\t632ba400-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.OpenPressureDrop\tNUMBER\t\t176\t1\tIfcPressureMeasure\t1\nPARAM\tf0222d80-d1d0-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.Operation\tTEXT\t\t176\t1\tPEnum_DamperOperation\t1\nPARAM\tfca68600-d1d0-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.Orientation\tTEXT\t\t176\t1\tPEnum_DamperOrientation\t1\nPARAM\tdc76c700-d1d0-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.Reference\tTEXT\t\t176\t1\tIfcIdentifier\t1\nPARAM\t7d658200-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.RegeneratedSoundCurve\tMULTILINETEXT\t\t176\t1\tPropertyTableValue\t1\nPARAM\tfbbbf828-76ff-438c-9712-edaa60326184\tPset_DamperTypeCommon.SealMaterial\tMULTILINETEXT\t\t176\t1\tIfcMaterial\t1\nPARAM\te1d41180-d1d0-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.Status\tTEXT\t\t176\t1\tPEnum_ElementStatus\t1\nPARAM\t4c854d00-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.TemperatureRange\tMULTILINETEXT\t\t176\t1\tPropertyBoundedValue\t1\nPARAM\t5909a580-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.TemperatureRating\tNUMBER\t\t176\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t5573ad4e-fd29-414e-bd97-f2150e618b79\tPset_DamperTypeCommon.TorqueRange\tMULTILINETEXT\t\t176\t1\tPropertyBoundedValue\t1\n#\nGROUP\t177\tPset_DamperTypeControlDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taa199980-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeControlDamper.ControlDamperOperation\tTEXT\t\t177\t1\tPEnum_ControlDamperOperation\t1\nPARAM\ta38b2200-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeControlDamper.TorqueRange\tMULTILINETEXT\t\t177\t1\tPropertyBoundedValue\t1\n#\nGROUP\t178\tPset_DamperTypeFireDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc93d300-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireDamper.ActuationType\tTEXT\t\t178\t1\tPEnum_FireDamperActuationType\t1\nPARAM\tc9182b80-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireDamper.ClosureRatingEnum\tTEXT\t\t178\t1\tPEnum_FireDamperClosureRating\t1\nPARAM\td6351a80-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireDamper.FireResistanceRating\tTEXT\t\t178\t1\tIfcLabel\t1\nPARAM\tdc2afb80-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireDamper.FusibleLinkTemperature\tNUMBER\t\t178\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t179\tPset_DamperTypeFireSmokeDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ted740800-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireSmokeDamper.ActuationType\tTEXT\t\t179\t1\tPEnum_FireDamperActuationType\t1\nPARAM\tfa90f700-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireSmokeDamper.ClosureRatingEnum\tTEXT\t\t179\t1\tPEnum_FireDamperClosureRating\t1\nPARAM\te77e2700-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireSmokeDamper.ControlType\tTEXT\t\t179\t1\tIfcLabel\t1\nPARAM\tf86896fd-2479-4b8b-9ffc-86611909aa6c\tPset_DamperTypeFireSmokeDamper.DamperControlType\tTEXT\t\t179\t1\tIfcLabel\t1\nPARAM\t07154f80-d1d2-11e1-8000-00215ad4efdf\tPset_DamperTypeFireSmokeDamper.FireResistanceRating\tTEXT\t\t179\t1\tIfcLabel\t1\nPARAM\t0bda0380-d1d2-11e1-8000-00215ad4efdf\tPset_DamperTypeFireSmokeDamper.FusibleLinkTemperature\tNUMBER\t\t179\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t180\tPset_DamperTypeSmokeDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t172d2f00-d1d2-11e1-8000-00215ad4efdf\tPset_DamperTypeSmokeDamper.ControlType\tTEXT\t\t180\t1\tIfcLabel\t1\n#\nGROUP\t181\tPset_DataTransmissionUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta92e236c-dcb8-4227-937c-33b33f22216e\tPset_DataTransmissionUnit.DataTransmissionUnitUsage\tTEXT\t\t181\t1\tPEnum_DataTransmissionUnitUsage\t1\nPARAM\te142d1ec-1e8b-4ab7-85e2-927b95d38212\tPset_DataTransmissionUnit.SerialInterfaceType\tTEXT\t\t181\t1\tPEnum_SerialInterfaceType\t1\nPARAM\tad97fc77-7645-42cb-95dc-e4e9438346a1\tPset_DataTransmissionUnit.WorkingState\tTEXT\t\t181\t1\tIfcLabel\t1\n#\nGROUP\t182\tPset_DesignPoint\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta2120de5-3f61-4a57-a6ed-4d239d963e9f\tPset_DesignPoint.IsDesignPoint\tYESNO\t\t182\t1\tIfcBoolean\t1\n#\nGROUP\t183\tPset_DiscreteAccessoryAnchorBolt\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc42ec2e1-3e20-4c39-970f-8952e055df89\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltDiameter\tLENGTH\t\t183\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t60b2f740-cccd-4eb7-8c33-c335c3126732\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltLength\tLENGTH\t\t183\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdded3af9-76d4-49ec-8a3c-9ad3e8583eac\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltProtrusionLength\tLENGTH\t\t183\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t586754a7-6804-4fdc-95dc-a6a4660d3e59\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltThreadLength\tLENGTH\t\t183\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t184\tPset_DiscreteAccessoryColumnShoe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t30ce7680-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateDepth\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2613e180-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateThickness\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2c09c280-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateWidth\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t404dbf80-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryColumnShoe.ColumnShoeCasingDepth\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t362bc100-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryColumnShoe.ColumnShoeCasingHeight\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3af07500-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryColumnShoe.ColumnShoeCasingWidth\tLENGTH\t\t184\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t185\tPset_DiscreteAccessoryCornerFixingPlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5bb8ca80-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneX\tLENGTH\t\t185\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t565b8000-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneZ\tLENGTH\t\t185\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4ba0eb00-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateLength\tLENGTH\t\t185\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t50fe3580-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateThickness\tLENGTH\t\t185\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t186\tPset_DiscreteAccessoryDiagonalTrussConnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7723d580-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussBaseBarDiameter\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t81de6a80-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarDiameter\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t71c68b00-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarSpacing\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t67a48c80-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussHeight\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6d01d700-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussLength\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7c812000-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussSecondaryBarDiameter\tLENGTH\t\t186\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t187\tPset_DiscreteAccessoryEdgeFixingPlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9d497580-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneX\tLENGTH\t\t187\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t97ec2b00-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneZ\tLENGTH\t\t187\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8d319600-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateLength\tLENGTH\t\t187\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t928ee080-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateThickness\tLENGTH\t\t187\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t188\tPset_DiscreteAccessoryFixingSocket\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tab979180-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryFixingSocket.FixingSocketHeight\tLENGTH\t\t188\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb0f4dc00-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryFixingSocket.FixingSocketThreadDiameter\tLENGTH\t\t188\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb6522680-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryFixingSocket.FixingSocketThreadLength\tLENGTH\t\t188\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta9353780-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryFixingSocket.FixingSocketTypeReference\tMULTILINETEXT\t\t188\t1\tIfcExternalReference\t1\n#\nGROUP\t189\tPset_DiscreteAccessoryLadderTrussConnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td255c800-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussBaseBarDiameter\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdda8f380-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarDiameter\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcd911400-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarSpacing\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc23de880-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussHeight\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc7029c80-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussLength\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td84ba900-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussSecondaryBarDiameter\tLENGTH\t\t189\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t190\tPset_DiscreteAccessoryStandardFixingPlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teef20000-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateDepth\tLENGTH\t\t190\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf44f4a80-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateThickness\tLENGTH\t\t190\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te8fc1f00-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateWidth\tLENGTH\t\t190\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t191\tPset_DiscreteAccessoryTypeBracket\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t31d6b617-1b75-4ab6-b7e8-25e4183671e8\tPset_DiscreteAccessoryTypeBracket.IsInsulated\tYESNO\t\t191\t1\tIfcBoolean\t1\n#\nGROUP\t192\tPset_DiscreteAccessoryTypeCableArranger\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tef8e4dd6-c83a-4c04-b52c-18f08695704f\tPset_DiscreteAccessoryTypeCableArranger.CableArrangerPosition\tTEXT\t\t192\t1\tPEnum_ArrangerPositionEnum\t1\n#\nGROUP\t193\tPset_DiscreteAccessoryTypeInsulator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td955cc84-8b0d-4339-88f4-c868795b5c04\tPset_DiscreteAccessoryTypeInsulator.BendingStrength\tNUMBER\t\t193\t1\tIfcPressureMeasure\t1\nPARAM\t79b8ba2e-4064-440b-96f2-48eff87a0e85\tPset_DiscreteAccessoryTypeInsulator.BreakdownVoltageTolerance\tNUMBER\t\t193\t1\tIfcElectricVoltageMeasure\t1\nPARAM\te5bff1e2-e555-4f2c-952a-816a19f7ebdf\tPset_DiscreteAccessoryTypeInsulator.CreepageDistance\tLENGTH\t\t193\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcad1c2ff-44c0-403a-9936-02c7c1c6a1cd\tPset_DiscreteAccessoryTypeInsulator.InstallationMethod\tTEXT\t\t193\t1\tIfcLabel\t1\nPARAM\tb20710ec-98ee-40c5-a3bf-751d7d7b1ec1\tPset_DiscreteAccessoryTypeInsulator.InsulationMethod\tTEXT\t\t193\t1\tPEnum_InsulatorType\t1\nPARAM\t5cee4291-8724-4936-9025-c7ed3f15ba77\tPset_DiscreteAccessoryTypeInsulator.InsulationVoltage\tNUMBER\t\t193\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t8332e79f-c6a1-44d1-b96d-3242ffdf2a5d\tPset_DiscreteAccessoryTypeInsulator.LightningPeakVoltage\tNUMBER\t\t193\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t7abf2f4f-58d6-4b2c-af8d-8b09b7ad2f3a\tPset_DiscreteAccessoryTypeInsulator.OperationalTemperatureRange\tMULTILINETEXT\t\t193\t1\tPropertyBoundedValue\t1\nPARAM\t95a2171a-8142-4637-80c7-6cb7feb4b46b\tPset_DiscreteAccessoryTypeInsulator.RatedCurrent\tMULTILINETEXT\t\t193\t1\tPropertyBoundedValue\t1\nPARAM\tb1b6d86a-f310-4493-884f-57917ca7b83d\tPset_DiscreteAccessoryTypeInsulator.RatedVoltage\tMULTILINETEXT\t\t193\t1\tPropertyBoundedValue\t1\nPARAM\t4b8da0e1-f1fd-46d5-94c9-5ba7f5acb971\tPset_DiscreteAccessoryTypeInsulator.RMSWithstandVoltage\tNUMBER\t\t193\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t225e4d3e-800f-41a2-ac09-8b53b98ec47c\tPset_DiscreteAccessoryTypeInsulator.Voltage\tMULTILINETEXT\t\t193\t1\tPropertyBoundedValue\t1\n#\nGROUP\t194\tPset_DiscreteAccessoryTypeLock\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3fd1bf96-5350-4cbd-8207-12df7f7c5f94\tPset_DiscreteAccessoryTypeLock.InstallationPlan\tMULTILINETEXT\t\t194\t1\tIfcExternalReference\t1\nPARAM\tf59f51e1-e53a-453b-bfa6-a87dad751ca8\tPset_DiscreteAccessoryTypeLock.RequiredClosureSpacing\tLENGTH\t\t194\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t195\tPset_DiscreteAccessoryTypeRailBrace\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td15cde1a-b75b-4e0d-a923-490b2b855108\tPset_DiscreteAccessoryTypeRailBrace.IsTemporary\tYESNO\t\t195\t1\tIfcBoolean\t1\n#\nGROUP\t196\tPset_DiscreteAccessoryTypeRailLubrication\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9decf704-3a54-4549-b99c-3d1571be0e84\tPset_DiscreteAccessoryTypeRailLubrication.LubricationPowerSupplyType\tTEXT\t\t196\t1\tPEnum_LubricationPowerSupply\t1\nPARAM\t6f658332-58fc-49a9-a153-a699396fdb2b\tPset_DiscreteAccessoryTypeRailLubrication.LubricationSystemType\tTEXT\t\t196\t1\tPEnum_LubricationSystemType\t1\nPARAM\t9ff76621-c14e-4a5e-8e16-607d4794d50c\tPset_DiscreteAccessoryTypeRailLubrication.MaximumNoiseEmissions\tNUMBER\t\t196\t1\tIfcSoundPowerLevelMeasure\t1\nPARAM\ta6aa8112-cd69-485f-85f7-19b30bec3421\tPset_DiscreteAccessoryTypeRailLubrication.PositionInTrack\tTEXT\t\t196\t1\tPEnum_RelativePosition\t1\n#\nGROUP\t197\tPset_DiscreteAccessoryTypeRailPad\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1ddbe1f5-bc01-44c6-a2cf-52c4c1eea794\tPset_DiscreteAccessoryTypeRailPad.RailPadStiffness\tTEXT\t\t197\t1\tPEnum_RailPadStiffness\t1\n#\nGROUP\t198\tPset_DiscreteAccessoryTypeSlidingChair\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t99cac558-3423-43ac-8ee5-e970cb80bc20\tPset_DiscreteAccessoryTypeSlidingChair.IsSelfLubricated\tYESNO\t\t198\t1\tIfcBoolean\t1\n#\nGROUP\t199\tPset_DiscreteAccessoryTypeSoundAbsorption\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td984d141-705b-4d7f-9028-36cad7d87138\tPset_DiscreteAccessoryTypeSoundAbsorption.SoundAbsorptionLimit\tNUMBER\t\t199\t1\tIfcSoundPowerLevelMeasure\t1\n#\nGROUP\t200\tPset_DiscreteAccessoryTypeTensioningEquipment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfbd06ddf-0f41-46fa-9c6d-34e2d7f5ee78\tPset_DiscreteAccessoryTypeTensioningEquipment.AssemblyInstruction\tMULTILINETEXT\t\t200\t1\tIfcExternalReference\t1\nPARAM\t9e66ebc7-9036-4060-96b2-41c1c14a8143\tPset_DiscreteAccessoryTypeTensioningEquipment.HasBreakLineLock\tYESNO\t\t200\t1\tIfcBoolean\t1\nPARAM\t77f3ac5a-78ce-466c-b93d-19e53d85cb7a\tPset_DiscreteAccessoryTypeTensioningEquipment.RatioOfWireTension\tNUMBER\t\t200\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4fcc65ce-7ec1-4f1e-b795-ef368a52096f\tPset_DiscreteAccessoryTypeTensioningEquipment.ReferenceEnvironmentTemperature\tMULTILINETEXT\t\t200\t1\tPropertyBoundedValue\t1\nPARAM\ta441cf7d-f2ae-4c3f-bef1-d52503fa3974\tPset_DiscreteAccessoryTypeTensioningEquipment.TensileStrength\tNUMBER\t\t200\t1\tIfcPressureMeasure\t1\nPARAM\te7ce5842-a748-4b45-a906-bb9938c0d274\tPset_DiscreteAccessoryTypeTensioningEquipment.TransmissionEfficiency\tNUMBER\t\t200\t1\tIfcRatioMeasure\t1\n#\nGROUP\t201\tPset_DiscreteAccessoryWireLoop\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1648cd00-d1d3-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryWireLoop.WireDiameter\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t252f7f80-d1d3-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryWireLoop.WireEmbeddingLength\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0e892880-d1d3-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryWireLoop.WireLoopBasePlateLength\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t003b0c80-d1d3-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryWireLoop.WireLoopBasePlateThickness\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t05985700-d1d3-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryWireLoop.WireLoopBasePlateWidth\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32e50500-d1d3-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryWireLoop.WireLoopLength\tLENGTH\t\t201\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t202\tPset_DistributionBoardOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t78703733-a424-40ac-a0ed-11f00758b23c\tPset_DistributionBoardOccurrence.IsMain\tYESNO\t\t202\t1\tIfcBoolean\t1\nPARAM\t013e4c88-60f3-47c9-940b-dbb3acaa243f\tPset_DistributionBoardOccurrence.IsSkilledOperator\tYESNO\t\t202\t1\tIfcBoolean\t1\n#\nGROUP\t203\tPset_DistributionBoardTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2a587e2b-b7d3-49b6-a1a1-f31fcc26e9bb\tPset_DistributionBoardTypeCommon.Reference\tTEXT\t\t203\t1\tIfcIdentifier\t1\nPARAM\ta144ad8f-57ab-4339-9bf3-33c230c9be14\tPset_DistributionBoardTypeCommon.Status\tTEXT\t\t203\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t204\tPset_DistributionBoardTypeDispatchingBoard\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t248a0788-f570-4aad-938c-7f738b117bca\tPset_DistributionBoardTypeDispatchingBoard.DispatchingBoardType\tTEXT\t\t204\t1\tPEnum_DispatchingBoardType\t1\nPARAM\t9d3eb231-e623-47cd-b0f6-0a41675ea5b3\tPset_DistributionBoardTypeDispatchingBoard.NumberOfInterfaces\tMULTILINETEXT\t\t204\t1\tPropertyTableValue\t1\n#\nGROUP\t205\tPset_DistributionBoardTypeDistributionFrame\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td131047c-5d64-4815-b0da-f6de96266532\tPset_DistributionBoardTypeDistributionFrame.PortCapacity\tINTEGER\t\t205\t1\tIfcInteger\t1\n#\nGROUP\t206\tPset_DistributionChamberElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t54de8780-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementCommon.Reference\tTEXT\t\t206\t1\tIfcIdentifier\t1\nPARAM\t5e67ef80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementCommon.Status\tTEXT\t\t206\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t207\tPset_DistributionChamberElementTypeFormedDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t88b9ad00-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeFormedDuct.AccessCoverLoadRating\tTEXT\t\t207\t1\tIfcText\t1\nPARAM\t0f4f6ce0-1d4c-4d95-b8d2-47dde9cf8e1e\tPset_DistributionChamberElementTypeFormedDuct.AccessCoverMaterial\tMULTILINETEXT\t\t207\t1\tIfcMaterial\t1\nPARAM\t93eb5ae9-5e1f-42d7-9a62-e94cf906b749\tPset_DistributionChamberElementTypeFormedDuct.BaseMaterial\tMULTILINETEXT\t\t207\t1\tIfcMaterial\t1\nPARAM\t835c6280-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeFormedDuct.BaseThickness\tLENGTH\t\t207\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t83de76c2-5137-4f0c-90be-1a7074962b07\tPset_DistributionChamberElementTypeFormedDuct.CableDuctOccupancyRatio\tNUMBER\t\t207\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t78a1cd80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeFormedDuct.ClearDepth\tLENGTH\t\t207\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t73448300-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeFormedDuct.ClearWidth\tLENGTH\t\t207\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb570c755-c509-4e86-ad74-02bd700c61c8\tPset_DistributionChamberElementTypeFormedDuct.FillMaterial\tMULTILINETEXT\t\t207\t1\tIfcMaterial\t1\nPARAM\t49b4497a-83ea-4bd4-a1d6-f874ffb6aa12\tPset_DistributionChamberElementTypeFormedDuct.WallMaterial\tMULTILINETEXT\t\t207\t1\tIfcMaterial\t1\nPARAM\t7e97ae80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeFormedDuct.WallThickness\tLENGTH\t\t207\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t208\tPset_DistributionChamberElementTypeInspectionChamber\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td46c5680-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.AccessCoverLoadRating\tTEXT\t\t208\t1\tIfcText\t1\nPARAM\tbdc5ff80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.AccessCoverMaterial\tMULTILINETEXT\t\t208\t1\tIfcMaterialDefinition\t1\nPARAM\tc0c0f000-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.AccessLengthOrRadius\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc61e3a80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.AccessWidth\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb0107a00-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.BaseMaterial\tMULTILINETEXT\t\t208\t1\tIfcMaterialDefinition\t1\nPARAM\tb30b6a80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.BaseThickness\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t93744200-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.ChamberLengthOrRadius\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t98d18c80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.ChamberWidth\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7b7eec76-4f0e-4af4-adf4-ae7ee6662271\tPset_DistributionChamberElementTypeInspectionChamber.InspectionChamberInvertLevel\tLENGTH\t\t208\t1\tIfcLengthMeasure\t1\nPARAM\t9e2ed700-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.InvertLevel\tLENGTH\t\t208\t1\tIfcLengthMeasure\t1\nPARAM\ta25af480-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.SoffitLevel\tLENGTH\t\t208\t1\tIfcLengthMeasure\t1\nPARAM\ta850d580-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.WallMaterial\tMULTILINETEXT\t\t208\t1\tIfcMaterialDefinition\t1\nPARAM\tab4bc600-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.WallThickness\tLENGTH\t\t208\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb868b500-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.WithBackdrop\tYESNO\t\t208\t1\tIfcBoolean\t1\n#\nGROUP\t209\tPset_DistributionChamberElementTypeInspectionPit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tec43da80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionPit.Depth\tLENGTH\t\t209\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te0581880-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionPit.Length\tLENGTH\t\t209\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te6e69000-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionPit.Width\tLENGTH\t\t209\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t210\tPset_DistributionChamberElementTypeManhole\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t32993980-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.AccessCoverLoadRating\tTEXT\t\t210\t1\tIfcText\t1\nPARAM\t23b28700-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.AccessCoverMaterial\tMULTILINETEXT\t\t210\t1\tIfcMaterialDefinition\t1\nPARAM\t26ad7780-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.AccessLengthOrRadius\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2ca35880-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.AccessWidth\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0a113f80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.BaseMaterial\tMULTILINETEXT\t\t210\t1\tIfcMaterialDefinition\t1\nPARAM\t0da4c680-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.BaseThickness\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t185f5b80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.HasSteps\tYESNO\t\t210\t1\tIfcBoolean\t1\nPARAM\tf7970600-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.InvertLevel\tLENGTH\t\t210\t1\tIfcLengthMeasure\t1\nPARAM\ta23058b0-99ef-42aa-904a-39250c4015cf\tPset_DistributionChamberElementTypeManhole.IsAccessibleOnFoot\tYESNO\t\t210\t1\tIfcBoolean\t1\nPARAM\t936e8a04-a3ca-42de-8b58-4c2604513322\tPset_DistributionChamberElementTypeManhole.IsLocked\tYESNO\t\t210\t1\tIfcBoolean\t1\nPARAM\t13021100-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.IsShallow\tYESNO\t\t210\t1\tIfcBoolean\t1\nPARAM\td0f42c2e-00f6-4002-9d03-26d3096a0b06\tPset_DistributionChamberElementTypeManhole.NumberOfCableEntries\tINTEGER\t\t210\t1\tIfcCountMeasure\t1\nPARAM\t20b2838a-ab07-48f8-afa3-ab75132bba96\tPset_DistributionChamberElementTypeManhole.NumberOfManholeCovers\tINTEGER\t\t210\t1\tIfcCountMeasure\t1\nPARAM\tfc5bba00-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.SoffitLevel\tLENGTH\t\t210\t1\tIfcLengthMeasure\t1\nPARAM\t834a2024-3934-4e54-8866-7edfe32a94cd\tPset_DistributionChamberElementTypeManhole.TypeOfShaft\tTEXT\t\t210\t1\tPEnum_TypeOfShaft\t1\nPARAM\t01206e00-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.WallMaterial\tMULTILINETEXT\t\t210\t1\tIfcMaterialDefinition\t1\nPARAM\t04b3f500-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.WallThickness\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1dbca600-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.WithBackdrop\tYESNO\t\t210\t1\tIfcBoolean\t1\n#\nGROUP\t211\tPset_DistributionChamberElementTypeMeterChamber\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5b213380-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.AccessCoverMaterial\tMULTILINETEXT\t\t211\t1\tIfcMaterialDefinition\t1\nPARAM\t52306200-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.BaseMaterial\tMULTILINETEXT\t\t211\t1\tIfcMaterialDefinition\t1\nPARAM\t55c3e900-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.BaseThickness\tLENGTH\t\t211\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3d53ce80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.ChamberLengthOrRadius\tLENGTH\t\t211\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t42b11900-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.ChamberWidth\tLENGTH\t\t211\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t48a6fa00-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.WallMaterial\tMULTILINETEXT\t\t211\t1\tIfcMaterialDefinition\t1\nPARAM\t4c3a8100-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.WallThickness\tLENGTH\t\t211\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t212\tPset_DistributionChamberElementTypeSump\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t70965d80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeSump.InvertLevel\tLENGTH\t\t212\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t64aa9b80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeSump.Length\tLENGTH\t\t212\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td351813a-ff13-4c71-98be-c2a899aa7947\tPset_DistributionChamberElementTypeSump.SumpInvertLevel\tLENGTH\t\t212\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6aa07c80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeSump.Width\tLENGTH\t\t212\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t213\tPset_DistributionChamberElementTypeTrench\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83a92d80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeTrench.Depth\tLENGTH\t\t213\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t899f0e80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeTrench.InvertLevel\tLENGTH\t\t213\t1\tIfcLengthMeasure\t1\nPARAM\t7d1ab600-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeTrench.Width\tLENGTH\t\t213\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t214\tPset_DistributionChamberElementTypeValveChamber\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb6532600-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.AccessCoverMaterial\tMULTILINETEXT\t\t214\t1\tIfcMaterialDefinition\t1\nPARAM\tac312780-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.BaseMaterial\tMULTILINETEXT\t\t214\t1\tIfcMaterialDefinition\t1\nPARAM\tafc4ae80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.BaseThickness\tLENGTH\t\t214\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t96236700-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.ChamberLengthOrRadius\tLENGTH\t\t214\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9c194800-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.ChamberWidth\tLENGTH\t\t214\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta20f2900-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.WallMaterial\tMULTILINETEXT\t\t214\t1\tIfcMaterialDefinition\t1\nPARAM\ta5a2b000-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.WallThickness\tLENGTH\t\t214\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t215\tPset_DistributionFlowElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1d126ec1-34b3-4870-a421-58244f26788e\tPset_DistributionFlowElementCommon.Reference\tTEXT\t\t215\t1\tIfcIdentifier\t1\n#\nGROUP\t216\tPset_DistributionPortCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc79c3280-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionPortCommon.ColorCode\tTEXT\t\t216\t1\tIfcLabel\t1\nPARAM\t34b8f934-d91d-451d-9046-adfa36d5e29d\tPset_DistributionPortCommon.ColourCode\tTEXT\t\t216\t1\tIfcLabel\t1\nPARAM\tc0752480-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionPortCommon.PortNumber\tINTEGER\t\t216\t1\tIfcInteger\t1\n#\nGROUP\t217\tPset_DistributionPortDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t26f6e010-3a72-4e2e-91bf-96a6d30ddb98\tPset_DistributionPortDuct.ConnectionType\tTEXT\t\t217\t1\tPEnum_DuctConnectionType\t1\nPARAM\t59a6fab8-3bff-4843-b61b-c3895e0ccb1f\tPset_DistributionPortDuct.PortNumber\tINTEGER\t\t217\t1\tIfcInteger\t1\n#\nGROUP\t218\tPset_DistributionPortPHistoryCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taf897460-248b-4276-85e2-8b50acfc7106\tPset_DistributionPortPHistoryCable.ApparentPower\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\t9fadeb75-92de-4a22-8764-c24ee4f76b0b\tPset_DistributionPortPHistoryCable.Current\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\ta94b902e-b839-44c6-8479-1370c9c89cca\tPset_DistributionPortPHistoryCable.CurrentHistory\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\te72bcd7d-84ae-42c6-b1e3-f696451d1e6e\tPset_DistributionPortPHistoryCable.DataReceived\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\tc1d8b4f5-0772-44d9-8bb7-d96e3b9a3282\tPset_DistributionPortPHistoryCable.DataTransmitted\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\t53e43bce-bef5-4a40-96fd-8862a450903d\tPset_DistributionPortPHistoryCable.PowerFactor\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\t89a3d7b2-060f-4d65-a8cd-ef00b3affa39\tPset_DistributionPortPHistoryCable.PowerFactorHistory\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\t401dc737-0097-4869-9b07-3ef617ef615c\tPset_DistributionPortPHistoryCable.ReactivePower\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\tfbaec689-91c1-4f8f-b0c9-63eb65250f26\tPset_DistributionPortPHistoryCable.RealPower\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\t6fa8730d-4354-42e4-9752-7bd9defeb047\tPset_DistributionPortPHistoryCable.Voltage\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\nPARAM\t43062c92-c8ce-40e4-b895-b4411bbd0527\tPset_DistributionPortPHistoryCable.VoltageHistory\tMULTILINETEXT\t\t218\t1\tIfcTimeSeries\t1\n#\nGROUP\t219\tPset_DistributionPortPHistoryDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t39ebdb53-ec0a-4cfb-9c16-d3b93e4b79d3\tPset_DistributionPortPHistoryDuct.FlowCondition\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\td8ea6d10-74d2-411a-9770-8330100c7e9a\tPset_DistributionPortPHistoryDuct.FlowConditionHistory\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\tbe32824c-472c-44e8-ab71-cf06b1d088c9\tPset_DistributionPortPHistoryDuct.MassFlowRate\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\tb875a981-100a-48ca-ad67-02e2bb7a0c1d\tPset_DistributionPortPHistoryDuct.MassFlowRateHistory\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t81486002-27f7-4025-863b-0dda2b5a372e\tPset_DistributionPortPHistoryDuct.Pressure\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t1cf60062-6751-49a4-be5b-7180ef05bf03\tPset_DistributionPortPHistoryDuct.PressureHisotry\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\tcbe85542-7fd1-4da0-a29d-d807677eb4a9\tPset_DistributionPortPHistoryDuct.Temperature\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t4e5224e4-5a1c-4fde-8ebd-791113bb3f9b\tPset_DistributionPortPHistoryDuct.TemperatureHistory\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t80b98e43-359d-4dc2-bc6f-1e3c586498e1\tPset_DistributionPortPHistoryDuct.Velocity\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\td90dffb3-0567-4441-ba52-f7ff4ca7b16c\tPset_DistributionPortPHistoryDuct.VelocityHistory\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t7e8e87f0-5498-43c0-a39e-88ac3f175c6e\tPset_DistributionPortPHistoryDuct.VolumetricFlowRate\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t6d08a3f1-da6c-4446-98b1-9ba8c191351f\tPset_DistributionPortPHistoryDuct.VolumetricFlowRateHistory\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\tc04ff2c7-bd41-48da-8d8e-037447267a2f\tPset_DistributionPortPHistoryDuct.WetBulbTemperature\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\nPARAM\t6cea51f5-9d48-49c1-addc-f49514199c7f\tPset_DistributionPortPHistoryDuct.WetBulbTemperatureHistory\tMULTILINETEXT\t\t219\t1\tIfcTimeSeries\t1\n#\nGROUP\t220\tPset_DistributionPortPHistoryPipe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a3f6bee-5810-4037-a997-d1c2cbd68a4d\tPset_DistributionPortPHistoryPipe.Flowrate\tMULTILINETEXT\t\t220\t1\tIfcTimeSeries\t1\nPARAM\td31964c0-ab4f-444a-a3a5-26a72084e705\tPset_DistributionPortPHistoryPipe.Pressure\tMULTILINETEXT\t\t220\t1\tIfcTimeSeries\t1\nPARAM\t36d77e79-1936-4513-b229-f61c7632a638\tPset_DistributionPortPHistoryPipe.Temperature\tMULTILINETEXT\t\t220\t1\tIfcTimeSeries\t1\n#\nGROUP\t221\tPset_DistributionPortPipe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7febf3be-117f-4498-9d45-def67f269eab\tPset_DistributionPortPipe.ConnectionType\tTEXT\t\t221\t1\tPEnum_PipeEndStyleTreatment\t1\nPARAM\tee6c702f-d7ef-45c1-8e8f-dc1c021a0afb\tPset_DistributionPortPipe.EndStyleTreatment\tTEXT\t\t221\t1\tPEnum_PipeEndStyleTreatment\t1\nPARAM\tb6e66f62-9d2d-45d2-bc3d-5bad39baf748\tPset_DistributionPortPipe.PortNumber\tINTEGER\t\t221\t1\tIfcInteger\t1\n#\nGROUP\t222\tPset_DistributionPortTypeCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t03d98150-4bcf-4f74-8b31-dee8065d5959\tPset_DistributionPortTypeCable.ConductorFunction\tTEXT\t\t222\t1\tPEnum_ConductorFunctionEnum\t1\nPARAM\t5a9b13be-92d1-4585-8363-4e056c138f30\tPset_DistributionPortTypeCable.ConnectionGender\tTEXT\t\t222\t1\tPEnum_DistributionPortGender\t1\nPARAM\t4a16661b-e738-43fb-99eb-498a99015880\tPset_DistributionPortTypeCable.ConnectionSubtype\tTEXT\t\t222\t1\tIfcLabel\t1\nPARAM\t1b51a543-3f93-4fa7-a503-1c877bb4b429\tPset_DistributionPortTypeCable.ConnectionType\tTEXT\t\t222\t1\tPEnum_DistributionPortElectricalType\t1\nPARAM\t52070921-9727-4e99-917b-fdcae2efea80\tPset_DistributionPortTypeCable.Current\tMULTILINETEXT\t\t222\t1\tPropertyBoundedValue\t1\nPARAM\teaf80f92-e6df-4c29-a180-86e89bea20e9\tPset_DistributionPortTypeCable.CurrentContent3rdHarmonic\tNUMBER\t\t222\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6eebf453-e820-4e4a-941c-2b4106eeb648\tPset_DistributionPortTypeCable.ElectricalConnectionType\tTEXT\t\t222\t1\tPEnum_DistributionPortElectricalType\t1\nPARAM\t1727667f-80e0-48e7-8bd3-bf056125a93e\tPset_DistributionPortTypeCable.HasConnector\tYESNO\t\t222\t1\tIfcBoolean\t1\nPARAM\t67966813-3350-4b73-b3e6-06694b95df6d\tPset_DistributionPortTypeCable.IsWelded\tYESNO\t\t222\t1\tIfcBoolean\t1\nPARAM\t437e2945-ded0-4099-8d45-ae3d9d9770db\tPset_DistributionPortTypeCable.Power\tMULTILINETEXT\t\t222\t1\tPropertyBoundedValue\t1\nPARAM\t1592daba-2e14-4952-a719-49248bab50cc\tPset_DistributionPortTypeCable.Protocols\tMULTILINETEXT\t\t222\t1\tPropertyListValue\t1\nPARAM\t87b7f6b2-94b5-447a-b7ed-aa0e2b690e7d\tPset_DistributionPortTypeCable.Voltage\tMULTILINETEXT\t\t222\t1\tPropertyBoundedValue\t1\n#\nGROUP\t223\tPset_DistributionPortTypeDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2d115f8d-1830-403d-a062-85c9525bd889\tPset_DistributionPortTypeDuct.ConnectionSubtype\tTEXT\t\t223\t1\tIfcLabel\t1\nPARAM\t15d916dd-1d73-40bc-8148-1576f81d2a08\tPset_DistributionPortTypeDuct.ConnectionSubType\tTEXT\t\t223\t1\tIfcLabel\t1\nPARAM\td2b239a6-1db1-4c2a-b423-e3d735a6de1f\tPset_DistributionPortTypeDuct.ConnectionType\tTEXT\t\t223\t1\tPEnum_DuctConnectionType\t1\nPARAM\t0e28d2ef-e503-4631-9664-f17e52ebd118\tPset_DistributionPortTypeDuct.DryBulbTemperature\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\nPARAM\t90a90418-907a-4180-9a52-7bb1ef069005\tPset_DistributionPortTypeDuct.NominalHeight\tLENGTH\t\t223\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9aa93573-8189-43ee-9e7a-d7e898fddfae\tPset_DistributionPortTypeDuct.NominalThickness\tLENGTH\t\t223\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\ta28e9f22-6e20-4a90-9976-810e633a45f4\tPset_DistributionPortTypeDuct.NominalWidth\tLENGTH\t\t223\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t7583cd7c-5ea7-4d10-9e2b-6ad6d0dafa4b\tPset_DistributionPortTypeDuct.Pressure\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\nPARAM\t26538518-abf6-475b-a156-2ce731d7975e\tPset_DistributionPortTypeDuct.Velocity\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\nPARAM\t639c0067-eb44-4ed8-b9d1-77247c1f1cc2\tPset_DistributionPortTypeDuct.VolumetricFlowRate\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\nPARAM\t46e6cb4f-3ecb-4016-b3d9-52ec26836ce6\tPset_DistributionPortTypeDuct.WetBulbTemperature\tMULTILINETEXT\t\t223\t1\tPropertyBoundedValue\t1\n#\nGROUP\t224\tPset_DistributionPortTypePipe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2b26e6e2-4b17-410b-a378-8e3f0c571ecb\tPset_DistributionPortTypePipe.ConnectionSubtype\tTEXT\t\t224\t1\tIfcLabel\t1\nPARAM\tdf1d3977-4bb4-4a8d-96c8-33058af039e0\tPset_DistributionPortTypePipe.ConnectionSubType\tTEXT\t\t224\t1\tIfcLabel\t1\nPARAM\tf842a89d-8ec5-470c-b8ba-7fec7338c6e3\tPset_DistributionPortTypePipe.ConnectionType\tTEXT\t\t224\t1\tPEnum_PipeEndStyleTreatment\t1\nPARAM\ta09f2865-11e9-4d0f-9391-93c2e0155921\tPset_DistributionPortTypePipe.FlowCondition\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\nPARAM\tfcd3dc22-fdfd-4ea0-84f2-00be83155aa3\tPset_DistributionPortTypePipe.InnerDiameter\tLENGTH\t\t224\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta3db7690-009f-42a9-88a9-f5683b29eb8f\tPset_DistributionPortTypePipe.MassFlowRate\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\nPARAM\tac9d7980-31fc-44e1-828a-2cc76ae5d86c\tPset_DistributionPortTypePipe.NominalDiameter\tLENGTH\t\t224\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4d18569d-f126-4f3b-aceb-2da495f1dfda\tPset_DistributionPortTypePipe.OuterDiameter\tLENGTH\t\t224\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcc4abc86-f21d-4ee3-a86d-3815019c5ab3\tPset_DistributionPortTypePipe.Pressure\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\nPARAM\tb6cb7483-a65d-4bd5-ac65-51b080116323\tPset_DistributionPortTypePipe.Temperature\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\nPARAM\t7faf6c2f-fbd6-4304-b388-59166e006c4a\tPset_DistributionPortTypePipe.Velocity\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\nPARAM\tb4252ef2-5858-465d-840e-3539db7eed5e\tPset_DistributionPortTypePipe.VolumetricFlowRate\tMULTILINETEXT\t\t224\t1\tPropertyBoundedValue\t1\n#\nGROUP\t225\tPset_DistributionSystemCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t742ce300-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemCommon.Reference\tTEXT\t\t225\t1\tIfcIdentifier\t1\n#\nGROUP\t226\tPset_DistributionSystemTypeElectrical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9f173700-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeElectrical.Diversity\tNUMBER\t\t226\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t90c91b00-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeElectrical.ElectricalSystemCategory\tTEXT\t\t226\t1\tPEnum_DistributionSystemElectricalCategory\t1\nPARAM\t8018a500-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeElectrical.ElectricalSystemType\tTEXT\t\t226\t1\tPEnum_DistributionSystemElectricalType\t1\nPARAM\ta9393580-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeElectrical.MaximumAllowedVoltageDrop\tNUMBER\t\t226\t1\tIfcElectricVoltageMeasure\t1\nPARAM\tadfde980-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeElectrical.NetImpedance\tNUMBER\t\t226\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t048b4300-4767-4386-b8ba-5b688c837bda\tPset_DistributionSystemTypeElectrical.NumberOfLiveConductors\tINTEGER\t\t226\t1\tIfcCountMeasure\t1\nPARAM\tce8e35d6-0d86-4789-8b19-096e948f8f8c\tPset_DistributionSystemTypeElectrical.RatedVoltageRange\tMULTILINETEXT\t\t226\t1\tPropertyBoundedValue\t1\n#\nGROUP\t227\tPset_DistributionSystemTypeOverheadContactlineSystem\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t805ce33d-9042-44a6-8a0c-ea6ff1d4a83a\tPset_DistributionSystemTypeOverheadContactlineSystem.ContactWireNominalDrop\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t71fd2516-b029-4198-9de0-f9761db55df9\tPset_DistributionSystemTypeOverheadContactlineSystem.ContactWireNominalHeight\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0cb03893-0887-4d7e-a9c6-1553c15b48ac\tPset_DistributionSystemTypeOverheadContactlineSystem.ContactWireStagger\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3e3d8c01-8982-4bca-9c3f-9f5cb6c5e4e3\tPset_DistributionSystemTypeOverheadContactlineSystem.ContactWireUplift\tLENGTH\t\t227\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t681f1f21-3c12-459a-8deb-eb4a28aa1725\tPset_DistributionSystemTypeOverheadContactlineSystem.ElectricalClearance\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t66e0d60f-1a9d-444f-8646-8b9d9cfb8032\tPset_DistributionSystemTypeOverheadContactlineSystem.NumberOfOverlappingSpans\tINTEGER\t\t227\t1\tIfcCountMeasure\t1\nPARAM\teb710fc4-fe1a-4f10-bd0f-6fc4283a5ad5\tPset_DistributionSystemTypeOverheadContactlineSystem.OCSType\tTEXT\t\t227\t1\tPEnum_OverheadContactLineType\t1\nPARAM\t67d67f9b-da4e-4451-8a76-f9ba41323f92\tPset_DistributionSystemTypeOverheadContactlineSystem.PantographType\tTEXT\t\t227\t1\tIfcLabel\t1\nPARAM\t5ea8a253-e524-48ef-9ee4-8eb68e529f30\tPset_DistributionSystemTypeOverheadContactlineSystem.PressureRange\tMULTILINETEXT\t\t227\t1\tPropertyBoundedValue\t1\nPARAM\tbf67a2c1-69ca-4d99-8fd2-90ba552a8b30\tPset_DistributionSystemTypeOverheadContactlineSystem.SpanNominalLength\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbe293857-a0ac-4d67-8958-24a1d668713c\tPset_DistributionSystemTypeOverheadContactlineSystem.TensionLength\tLENGTH\t\t227\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t228\tPset_DistributionSystemTypeVentilation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teef5fe00-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.AspectRatio\tNUMBER\t\t228\t1\tIfcReal\t1\nPARAM\tb9511500-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.DesignName\tTEXT\t\t228\t1\tIfcLabel\t1\nPARAM\te271a580-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.DuctSealant\tMULTILINETEXT\t\t228\t1\tIfcMaterialDefinition\t1\nPARAM\tbfdf8c80-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.DuctSizingMethod\tTEXT\t\t228\t1\tPEnum_DuctSizingMethod\t1\nPARAM\td84fa700-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.FrictionLoss\tNUMBER\t\t228\t1\tIfcReal\t1\nPARAM\td38af300-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.LeakageClass\tNUMBER\t\t228\t1\tIfcPressureMeasure\t1\nPARAM\te69dc300-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.MaximumVelocity\tNUMBER\t\t228\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tf87f6600-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.MinimumHeight\tLENGTH\t\t228\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t02a16480-d1db-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.MinimumWidth\tLENGTH\t\t228\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tce2da880-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.PressureClass\tNUMBER\t\t228\t1\tIfcPressureMeasure\t1\nPARAM\tddacf180-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.ScrapFactor\tNUMBER\t\t228\t1\tIfcReal\t1\n#\nGROUP\t229\tPset_DoorCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t95420380-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.AcousticRating\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\tcde1dd00-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.DurabilityRating\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\t8f98ed80-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.FireExit\tYESNO\t\t229\t1\tIfcBoolean\t1\nPARAM\t7ba0bc00-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.FireRating\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\t5d878b80-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.GlazingAreaFraction\tNUMBER\t\t229\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t76903c80-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.HandicapAccessible\tYESNO\t\t229\t1\tIfcBoolean\t1\nPARAM\taa6b6200-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.HasDrive\tYESNO\t\t229\t1\tIfcBoolean\t1\nPARAM\tec47d880-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.HygrothermalRating\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\t23b68500-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.Infiltration\tNUMBER\t\t229\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t0aadd400-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.IsExternal\tYESNO\t\t229\t1\tIfcBoolean\t1\nPARAM\tda9b78df-a88b-4538-887d-4c597a1059dd\tPset_DoorCommon.MechanicalLoadRating\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\t2795d780-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.Reference\tTEXT\t\t229\t1\tIfcIdentifier\t1\nPARAM\tb4409580-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.SecurityRating\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\tbeaf5f00-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.SelfClosing\tYESNO\t\t229\t1\tIfcBoolean\t1\nPARAM\tcec73e80-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.SmokeStop\tYESNO\t\t229\t1\tIfcBoolean\t1\nPARAM\t32e90300-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.Status\tTEXT\t\t229\t1\tPEnum_ElementStatus\t1\nPARAM\t42b51700-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.ThermalTransmittance\tNUMBER\t\t229\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t5030f042-24d9-4c74-aba7-53294170b227\tPset_DoorCommon.WaterTightnessRating\tTEXT\t\t229\t1\tIfcLabel\t1\nPARAM\t9be0892f-f932-4135-bdaf-cd98782a64ff\tPset_DoorCommon.WindLoadRating\tTEXT\t\t229\t1\tIfcLabel\t1\n#\nGROUP\t230\tPset_DoorTypeTurnstile\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc3deea92-19a1-47c6-8e71-6768cfb94fb2\tPset_DoorTypeTurnstile.IsBidirectional\tYESNO\t\t230\t1\tIfcBoolean\t1\nPARAM\td677b93d-e6dc-4c38-9855-a85d4c8ac3ac\tPset_DoorTypeTurnstile.NarrowChannelWidth\tLENGTH\t\t230\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tae4a11a9-9783-4e3f-a659-8bd834abd244\tPset_DoorTypeTurnstile.TurnstileType\tTEXT\t\t230\t1\tPEnum_TurnstileType\t1\nPARAM\t60ad06c0-c10a-4c40-8dcf-3fcb095f5f36\tPset_DoorTypeTurnstile.WideChannelWidth\tLENGTH\t\t230\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t231\tPset_DoorWindowGlazingType\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7d5c98fb-e2a4-496b-88cc-3fdd33d52aa9\tPset_DoorWindowGlazingType.BeamRadiationTransmittance\tNUMBER\t\t231\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t3da49780-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.FillGas\tTEXT\t\t231\t1\tIfcLabel\t1\nPARAM\t48f7c300-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.GlassColor\tTEXT\t\t231\t1\tIfcLabel\t1\nPARAM\tf6c22db5-13b1-43e3-a808-d1619fcf3479\tPset_DoorWindowGlazingType.GlassColour\tTEXT\t\t231\t1\tIfcLabel\t1\nPARAM\t0df58f80-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.GlassLayers\tINTEGER\t\t231\t1\tIfcCountMeasure\t1\nPARAM\t1a79e800-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.GlassThickness1\tLENGTH\t\t231\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2796d700-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.GlassThickness2\tLENGTH\t\t231\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32516c00-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.GlassThickness3\tLENGTH\t\t231\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t69278200-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.IsCoated\tYESNO\t\t231\t1\tIfcBoolean\t1\nPARAM\t5dd45680-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.IsLaminated\tYESNO\t\t231\t1\tIfcBoolean\t1\nPARAM\t51e89480-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.IsTempered\tYESNO\t\t231\t1\tIfcBoolean\t1\nPARAM\t72185380-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.IsWired\tYESNO\t\t231\t1\tIfcBoolean\t1\nPARAM\tbcb84ce7-865c-42af-bcc3-77831a5791b1\tPset_DoorWindowGlazingType.Reflectivity\tNUMBER\t\t231\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t95db9980-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.ShadingCoefficient\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t84928d00-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.SolarAbsorption\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t91af7c00-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.SolarHeatGainTransmittance\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t88beaa80-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.SolarReflectance\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t8ceac800-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.SolarTransmittance\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t9a07b700-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.ThermalTransmittanceSummer\tNUMBER\t\t231\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t9e33d480-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.ThermalTransmittanceWinter\tNUMBER\t\t231\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t24b39c7d-ba26-4c7d-befc-dd19519f896e\tPset_DoorWindowGlazingType.Translucency\tNUMBER\t\t231\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t7a708e80-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.VisibleLightReflectance\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t80666f80-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.VisibleLightTransmittance\tNUMBER\t\t231\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t232\tPset_DoorWindowShadingType\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7df9c781-04a9-4420-905f-48de5c924975\tPset_DoorWindowShadingType.ExternalShadingCoefficient\tNUMBER\t\t232\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t99bf1924-f82e-4ca3-926d-0102fc3b01c1\tPset_DoorWindowShadingType.InsetShadingCoefficient\tNUMBER\t\t232\t1\tIfcPositiveRatioMeasure \t1\nPARAM\tb2083640-14eb-4acd-8461-7d991fda0961\tPset_DoorWindowShadingType.InternalShadingCoefficient\tNUMBER\t\t232\t1\tIfcPositiveRatioMeasure \t1\n#\nGROUP\t233\tPset_DrainageCatchment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb5ed3e01-eb14-47f6-bd02-27343dc3ea3e\tPset_DrainageCatchment.AreaDrained\tAREA\t\t233\t1\tIfcAreaMeasure\t1\n#\nGROUP\t234\tPset_DrainageCulvert\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta0beb179-7162-4a16-9c96-aeec8707c522\tPset_DrainageCulvert.ClearDepth\tLENGTH\t\t234\t1\tIfcLengthMeasure\t1\nPARAM\t26f5e6ed-2a20-4a06-8e10-416302290168\tPset_DrainageCulvert.InternalWidth\tLENGTH\t\t234\t1\tIfcLengthMeasure\t1\n#\nGROUP\t235\tPset_DrainageOutfall\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1b43defd-c801-4719-98f1-be72bb91688e\tPset_DrainageOutfall.InvertLevel\tLENGTH\t\t235\t1\tIfcLengthMeasure\t1\n#\nGROUP\t236\tPset_DrainageReserve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6d0ef567-c3b4-4e27-ae35-9c69dfea422e\tPset_DrainageReserve.Width\tLENGTH\t\t236\t1\tIfcLengthMeasure\t1\n#\nGROUP\t237\tPset_Draughting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te35c8d33-761f-4fbb-b549-89253c7e6401\tPset_Draughting.Colour.Blue\tINTEGER\t\t237\t1\tIfcInteger\t1\nPARAM\t6e5ac9b1-4c2b-4cf1-9c59-2f1592faa0c1\tPset_Draughting.Colour.Green\tINTEGER\t\t237\t1\tIfcInteger\t1\nPARAM\tc482289f-7205-45c4-a1a4-3fcd065addd5\tPset_Draughting.Colour.Red\tINTEGER\t\t237\t1\tIfcInteger\t1\nPARAM\t6157732a-43f1-43b8-a963-f513179a838b\tPset_Draughting.LayerName\tTEXT\t\t237\t1\tIfcIdentifier\t1\n#\nGROUP\t238\tPset_DuctConnection\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tda6976ee-f963-4dc4-8884-90ee43cca3fe\tPset_DuctConnection.ConnectionType\tMULTILINETEXT\t\t238\t1\tPropertyListValue\t1\n#\nGROUP\t239\tPset_DuctDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta6b311d5-e001-44b5-a56a-cc30c5203977\tPset_DuctDesignCriteria.AspectRatio\tNUMBER\t\t239\t1\tIfcReal \t1\nPARAM\t6a74ce7e-7df0-4e07-a5fa-750487de64dd\tPset_DuctDesignCriteria.DesignName\tTEXT\t\t239\t1\tIfcText\t1\nPARAM\td469a3f6-19ca-4786-974e-7b419e54232e\tPset_DuctDesignCriteria.DuctSealant\tMULTILINETEXT\t\t239\t1\tIfcMaterial\t1\nPARAM\t3376dbe0-8efa-40e1-96c9-1fb7e297957f\tPset_DuctDesignCriteria.DuctSizingMethod\tTEXT\t\t239\t1\tPEnum_DuctSizingMethod\t1\nPARAM\tf78d6b41-d1af-4bfd-9418-8f5f49d848d0\tPset_DuctDesignCriteria.FrictionLoss\tNUMBER\t\t239\t1\tIfcReal\t1\nPARAM\t36658cf7-5bd5-4b12-ba46-94656d230b69\tPset_DuctDesignCriteria.LeakageClass\tNUMBER\t\t239\t1\tIfcPressureMeasure\t1\nPARAM\te830b105-7242-4fb7-a651-d457745a15cc\tPset_DuctDesignCriteria.MaximumVelocity\tNUMBER\t\t239\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t1fe98945-31da-489f-80bf-cd74956231a2\tPset_DuctDesignCriteria.MinimumHeight\tNUMBER\t\t239\t1\tIfcPositiveLengthMeasure \t1\nPARAM\t4310d897-800e-45a7-83c7-2ade42eec6f7\tPset_DuctDesignCriteria.MinimumWidth\tNUMBER\t\t239\t1\tIfcPositiveLengthMeasure \t1\nPARAM\t6ade8563-b726-4031-aff0-ae07ddf44806\tPset_DuctDesignCriteria.PressureClass\tNUMBER\t\t239\t1\tIfcPressureMeasure\t1\nPARAM\t903a73c7-0459-4367-bd1a-4c87a575cfc6\tPset_DuctDesignCriteria.ScrapFactor\tNUMBER\t\t239\t1\tIfcReal \t1\n#\nGROUP\t240\tPset_DuctFittingOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teb17ab00-d1dd-11e1-8000-00215ad4efdf\tPset_DuctFittingOccurrence.Color\tTEXT\t\t240\t1\tIfcLabel\t1\nPARAM\tf876c54c-6b7d-40e7-b542-d549471e703a\tPset_DuctFittingOccurrence.Colour\tTEXT\t\t240\t1\tIfcLabel\t1\nPARAM\te652f700-d1dd-11e1-8000-00215ad4efdf\tPset_DuctFittingOccurrence.HasLiner\tYESNO\t\t240\t1\tIfcBoolean\t1\nPARAM\te0f5ac80-d1dd-11e1-8000-00215ad4efdf\tPset_DuctFittingOccurrence.InteriorRoughnessCoefficient\tLENGTH\t\t240\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t241\tPset_DuctFittingPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfb2f8a80-d1dd-11e1-8000-00215ad4efdf\tPset_DuctFittingPHistory.AirFlowLeakage\tMULTILINETEXT\t\t241\t1\tIfcTimeSeries\t1\nPARAM\tf8cd3080-d1dd-11e1-8000-00215ad4efdf\tPset_DuctFittingPHistory.AtmosphericPressure\tMULTILINETEXT\t\t241\t1\tIfcTimeSeries\t1\nPARAM\tf66ad680-d1dd-11e1-8000-00215ad4efdf\tPset_DuctFittingPHistory.LossCoefficient\tMULTILINETEXT\t\t241\t1\tIfcTimeSeries\t1\n#\nGROUP\t242\tPset_DuctFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taab5ee8d-0309-480c-9d89-d497405f5840\tPset_DuctFittingTypeCommon.EndStyleTreatment\tMULTILINETEXT\t\t242\t1\tPropertyListValue\t1\nPARAM\td00cbbe0-9617-42ee-b89d-4d2809b2993f\tPset_DuctFittingTypeCommon.Material\tMULTILINETEXT\t\t242\t1\tIfcMaterial\t1\nPARAM\t9b60079b-ed6f-449b-943d-294bf0afa00e\tPset_DuctFittingTypeCommon.MaterialThickness\tLENGTH\t\t242\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tef41400f-cf6b-41bb-a951-d978c317d8f2\tPset_DuctFittingTypeCommon.NominalDiameterOrWidth\tMULTILINETEXT\t\t242\t1\tPropertyListValue\t1\nPARAM\tde2c8cc7-5128-4b55-bc42-22fa4315ebf5\tPset_DuctFittingTypeCommon.NominalHeight\tMULTILINETEXT\t\t242\t1\tPropertyListValue\t1\nPARAM\t1601ff00-d1de-11e1-8000-00215ad4efdf\tPset_DuctFittingTypeCommon.PressureClass\tNUMBER\t\t242\t1\tIfcPressureMeasure\t1\nPARAM\t1ac6b300-d1de-11e1-8000-00215ad4efdf\tPset_DuctFittingTypeCommon.PressureRange\tMULTILINETEXT\t\t242\t1\tPropertyBoundedValue\t1\nPARAM\t04205c00-d1de-11e1-8000-00215ad4efdf\tPset_DuctFittingTypeCommon.Reference\tTEXT\t\t242\t1\tIfcIdentifier\t1\nPARAM\t097da680-d1de-11e1-8000-00215ad4efdf\tPset_DuctFittingTypeCommon.Status\tTEXT\t\t242\t1\tPEnum_ElementStatus\t1\nPARAM\t4317f7ad-3663-4328-952c-5cead7073a23\tPset_DuctFittingTypeCommon.SubType\tTEXT\t\t242\t1\tIfcText\t1\nPARAM\t21edc100-d1de-11e1-8000-00215ad4efdf\tPset_DuctFittingTypeCommon.TemperatureRange\tMULTILINETEXT\t\t242\t1\tPropertyBoundedValue\t1\nPARAM\teb751a70-b8a3-42fe-a9e0-cf195ec385b9\tPset_DuctFittingTypeCommon.UnitWeight\tNUMBER\t\t242\t1\tIfcMassPerLengthMeasure\t1\n#\nGROUP\t243\tPset_DuctSegmentOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a5ddb80-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentOccurrence.Color\tTEXT\t\t243\t1\tIfcLabel\t1\nPARAM\t5f17f7cf-faa4-4344-88e4-706d8063b795\tPset_DuctSegmentOccurrence.Colour\tTEXT\t\t243\t1\tIfcLabel\t1\nPARAM\t3467fa80-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentOccurrence.HasLiner\tYESNO\t\t243\t1\tIfcBoolean\t1\nPARAM\t2e721980-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentOccurrence.InteriorRoughnessCoefficient\tLENGTH\t\t243\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t244\tPset_DuctSegmentPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4f3a6f00-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentPHistory.AtmosphericPressure\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\nPARAM\t5a8d9a80-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentPHistory.FluidFlowLeakage\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\nPARAM\t52cdf600-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentPHistory.LeakageCurve\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\nPARAM\t2fb00574-9007-44a1-851e-5598055a6046\tPset_DuctSegmentPHistory.LeakageCurveHistory\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\nPARAM\t4ba6e800-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentPHistory.LossCoefficient\tMULTILINETEXT\t\t244\t1\tIfcTimeSeries\t1\n#\nGROUP\t245\tPset_DuctSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta9defb11-3d61-41b2-ad3c-38b8647626dc\tPset_DuctSegmentTypeCommon.CrossSectionShape\tTEXT\t\t245\t1\tPEnum_DuctSegmentShape\t1\nPARAM\t362f164f-adba-4512-a91c-3734bfa56faf\tPset_DuctSegmentTypeCommon.EndStyleTreatment\tMULTILINETEXT\t\t245\t1\tPropertyListValue\t1\nPARAM\te72347d0-cbba-4d89-b154-0088666d98a1\tPset_DuctSegmentTypeCommon.Length\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta3455380-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.LongitudinalSeam\tTEXT\t\t245\t1\tIfcText\t1\nPARAM\t2195a50d-36b3-49f9-8923-23482f795074\tPset_DuctSegmentTypeCommon.Material\tMULTILINETEXT\t\t245\t1\tIfcMaterial\t1\nPARAM\tb7bb96e0-91eb-4ad3-a508-7db83fd5a7a4\tPset_DuctSegmentTypeCommon.MaterialThickness\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta8a29e00-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.NominalDiameterOrWidth\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb0624280-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.NominalHeight\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9163b080-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.PressureRange\tMULTILINETEXT\t\t245\t1\tPropertyBoundedValue\t1\nPARAM\t66795c80-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.Reference\tTEXT\t\t245\t1\tIfcIdentifier\t1\nPARAM\tb6f0ba00-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.Reinforcement\tTEXT\t\t245\t1\tIfcLabel\t1\nPARAM\tbce69b00-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.ReinforcementSpacing\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7d1fb380-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.Shape\tTEXT\t\t245\t1\tPEnum_DuctSegmentShape\t1\nPARAM\t6bd6a700-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.Status\tTEXT\t\t245\t1\tPEnum_ElementStatus\t1\nPARAM\t9c1e4580-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.TemperatureRange\tMULTILINETEXT\t\t245\t1\tPropertyBoundedValue\t1\nPARAM\t448b619f-9afa-41b2-bc94-33579880c36c\tPset_DuctSegmentTypeCommon.UnitWeight\tNUMBER\t\t245\t1\tIfcMassMeasure\t1\nPARAM\t8c066600-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.WorkingPressure\tNUMBER\t\t245\t1\tIfcPressureMeasure\t1\n#\nGROUP\t246\tPset_DuctSilencerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tca038a00-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerPHistory.AirFlowRate\tMULTILINETEXT\t\t246\t1\tIfcTimeSeries\t1\nPARAM\tce2fa780-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerPHistory.AirPressureDropCurve\tMULTILINETEXT\t\t246\t1\tIfcTimeSeries\t1\n#\nGROUP\t247\tPset_DuctSilencerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfe774600-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.AirFlowrateRange\tMULTILINETEXT\t\t247\t1\tPropertyBoundedValue\t1\nPARAM\tde4f380a-788f-4d93-a425-e1a94c3f710c\tPset_DuctSilencerTypeCommon.AirFlowRateRange\tMULTILINETEXT\t\t247\t1\tPropertyBoundedValue\t1\nPARAM\t177ff700-d1df-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.HasExteriorInsulation\tYESNO\t\t247\t1\tIfcBoolean\t1\nPARAM\tef909380-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.HydraulicDiameter\tLENGTH\t\t247\t1\tIfcLengthMeasure\t1\nPARAM\tf4554780-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.Length\tLENGTH\t\t247\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td7b90f80-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.Reference\tTEXT\t\t247\t1\tIfcIdentifier\t1\nPARAM\t0175cb71-1925-49c4-9c6b-5e9d2527ed17\tPset_DuctSilencerTypeCommon.Shape\tTEXT\t\t247\t1\tPEnum_DuctSilencerShape\t1\nPARAM\tdd165a00-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.Status\tTEXT\t\t247\t1\tPEnum_ElementStatus\t1\nPARAM\t0f27bc00-d1df-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.TemperatureRange\tMULTILINETEXT\t\t247\t1\tPropertyBoundedValue\t1\nPARAM\tf919fb80-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.Weight\tNUMBER\t\t247\t1\tIfcMassMeasure\t1\nPARAM\t0636ea80-d1df-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.WorkingPressureRange\tMULTILINETEXT\t\t247\t1\tPropertyBoundedValue\t1\n#\nGROUP\t248\tPset_ElectricalCircuit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td87281f0-d3ea-4f8c-a2b9-358f807815d9\tPset_ElectricalCircuit.Diversity\tNUMBER\t\t248\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t534b880f-14d9-4f1e-8385-36244a01f61a\tPset_ElectricalCircuit.MaximumAllowedVoltageDrop\tNUMBER\t\t248\t1\tIfcElectricVoltageMeasure\t1\nPARAM\tfe4ef925-dc24-4b21-ab1f-58800c876322\tPset_ElectricalCircuit.NetImpedance\tNUMBER\t\t248\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t40be9780-73d2-44be-8895-81c96be3878a\tPset_ElectricalCircuit.NumberOfPhases\tINTEGER\t\t248\t1\tIfcInteger\t1\n#\nGROUP\t249\tPset_ElectricalDeviceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf936102b-d482-4b7e-b989-a5571e353770\tPset_ElectricalDeviceCommon.ConductorFunction\tTEXT\t\t249\t1\tPEnum_ConductorFunctionEnum\t1\nPARAM\t1cfbebbc-4e63-4a55-860b-d4a37e9cfcc6\tPset_ElectricalDeviceCommon.EarthingStyle\tTEXT\t\t249\t1\tIfcLabel\t1\nPARAM\tf81de313-75c9-4cbd-ae82-398bcba997d5\tPset_ElectricalDeviceCommon.ElectricalDeviceNominalPower\tNUMBER\t\t249\t1\tIfcPowerMeasure\t1\nPARAM\t50b86700-d1df-11e1-8000-00215ad4efdf\tPset_ElectricalDeviceCommon.HasProtectiveEarth\tYESNO\t\t249\t1\tIfcBoolean\t1\nPARAM\td9dff742-5a40-419d-b231-65452fff6962\tPset_ElectricalDeviceCommon.HeatDissipation\tNUMBER\t\t249\t1\tIfcPowerMeasure\t1\nPARAM\taecd027e-d542-4357-a5fd-13331a99bc51\tPset_ElectricalDeviceCommon.IK_Code\tTEXT\t\t249\t1\tIfcLabel\t1\nPARAM\t5d3cbf80-d1df-11e1-8000-00215ad4efdf\tPset_ElectricalDeviceCommon.InsulationStandardClass\tTEXT\t\t249\t1\tPEnum_InsulationStandardClass\t1\nPARAM\t56ae4800-d1df-11e1-8000-00215ad4efdf\tPset_ElectricalDeviceCommon.IP_Code\tTEXT\t\t249\t1\tIfcLabel\t1\nPARAM\t37c5267e-5b65-40bb-8c77-df21a6859cf0\tPset_ElectricalDeviceCommon.NominalCurrent\tNUMBER\t\t249\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tf69a7954-55c7-4842-825a-54711d3b5abc\tPset_ElectricalDeviceCommon.NominalFrequencyRange\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\nPARAM\t157b417a-6196-4c6b-91e7-5c98f64d1dcc\tPset_ElectricalDeviceCommon.NominalPowerConsumption\tNUMBER\t\t249\t1\tIfcPowerMeasure\t1\nPARAM\t5d81b5f3-18ec-4cde-8907-ba0ce0aadc4c\tPset_ElectricalDeviceCommon.NominalVoltage\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\nPARAM\t4b5b1c80-d1df-11e1-8000-00215ad4efdf\tPset_ElectricalDeviceCommon.NumberOfPoles\tINTEGER\t\t249\t1\tIfcCountMeasure\t1\nPARAM\t93e7c6d9-304a-4d2a-a40a-60107453d840\tPset_ElectricalDeviceCommon.NumberOfPowerSupplyPorts\tMULTILINETEXT\t\t249\t1\tPropertyTableValue\t1\nPARAM\t7feeb4ee-b7a5-45f8-b839-3663ee4c6a72\tPset_ElectricalDeviceCommon.PhaseAngle\tANGLE\t\t249\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\te3ee9c35-ebb1-4487-bfb4-f6b6121e9da9\tPset_ElectricalDeviceCommon.PhaseReference\tTEXT\t\t249\t1\tIfcIdentifier\t1\nPARAM\t7d151a50-746f-4ad7-b4d4-e7124726a728\tPset_ElectricalDeviceCommon.Power\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\nPARAM\tcf523435-8315-441f-a6c1-7c9b65bf62a0\tPset_ElectricalDeviceCommon.PowerFactor\tNUMBER\t\t249\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t784d9d21-44d4-40b5-b30e-2ad107609548\tPset_ElectricalDeviceCommon.RatedCurrent\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\nPARAM\ta2e15fb5-e52e-49e3-b867-31401fe07f86\tPset_ElectricalDeviceCommon.RatedVoltage\tMULTILINETEXT\t\t249\t1\tPropertyBoundedValue\t1\nPARAM\td7364fea-0860-4587-b56b-171e665ed6a3\tPset_ElectricalDeviceCommon.UsageCurrent\tNUMBER\t\t249\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t250\tPset_ElectricalDeviceCompliance\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5c004a3a-c9f0-4927-be84-a5d583b5415a\tPset_ElectricalDeviceCompliance.ElectroMagneticStandardsCompliance\tMULTILINETEXT\t\t250\t1\tPropertyTableValue\t1\nPARAM\td95a2b5d-2b7b-4b97-8bda-f58b0e9d55bd\tPset_ElectricalDeviceCompliance.ExplosiveAtmosphereStandardsCompliance\tMULTILINETEXT\t\t250\t1\tPropertyTableValue\t1\nPARAM\t506e8620-59b6-4acc-80c8-5afd682f57ea\tPset_ElectricalDeviceCompliance.FireProofingStandardsCompliance\tMULTILINETEXT\t\t250\t1\tPropertyTableValue\t1\nPARAM\ta6748539-ce57-4c32-945c-a508867a13c3\tPset_ElectricalDeviceCompliance.LightningProtectionStandardsCompliance\tMULTILINETEXT\t\t250\t1\tPropertyTableValue\t1\n#\nGROUP\t251\tPset_ElectricalFeederLine\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc67b2e82-b160-4a1b-a68a-238ba4aa22dd\tPset_ElectricalFeederLine.CurrentCarryingCapacity\tNUMBER\t\t251\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t12c45691-f7c8-49fc-addb-dc15ebc00824\tPset_ElectricalFeederLine.DesignAmbientTemperature\tMULTILINETEXT\t\t251\t1\tPropertyBoundedValue\t1\nPARAM\tb4974f18-714a-4890-a2ed-61e6c573970f\tPset_ElectricalFeederLine.ElectricalClearanceDistance\tLENGTH\t\t251\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t57a36ec0-716c-4835-b582-2e195188c961\tPset_ElectricalFeederLine.ElectricalFeederType\tTEXT\t\t251\t1\tPEnum_ElectricalFeederType\t1\n#\nGROUP\t252\tPset_ElectricAppliancePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7180bc80-d1df-11e1-8000-00215ad4efdf\tPset_ElectricAppliancePHistory.PowerState\tMULTILINETEXT\t\t252\t1\tIfcTimeSeries\t1\n#\nGROUP\t253\tPset_ElectricApplianceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7ba2bb00-d1df-11e1-8000-00215ad4efdf\tPset_ElectricApplianceTypeCommon.Reference\tTEXT\t\t253\t1\tIfcIdentifier\t1\nPARAM\t83faf600-d1df-11e1-8000-00215ad4efdf\tPset_ElectricApplianceTypeCommon.Status\tTEXT\t\t253\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t254\tPset_ElectricApplianceTypeDishwasher\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb0af0d80-d1df-11e1-8000-00215ad4efdf\tPset_ElectricApplianceTypeDishwasher.DishwasherType\tTEXT\t\t254\t1\tPEnum_ElectricApplianceDishwasherType\t1\n#\nGROUP\t255\tPset_ElectricApplianceTypeElectricCooker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcb818200-d1df-11e1-8000-00215ad4efdf\tPset_ElectricApplianceTypeElectricCooker.ElectricCookerType\tTEXT\t\t255\t1\tPEnum_ElectricApplianceElectricCookerType\t1\n#\nGROUP\t256\tPset_ElectricDistributionBoardOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc8b9fc58-cd02-4eed-a320-8ff916082beb\tPset_ElectricDistributionBoardOccurrence.IsMain\tYESNO\t\t256\t1\tIfcBoolean\t1\nPARAM\t421bd751-0cf9-47d8-9829-53510c16a01a\tPset_ElectricDistributionBoardOccurrence.IsSkilledOperator\tYESNO\t\t256\t1\tIfcBoolean\t1\n#\nGROUP\t257\tPset_ElectricDistributionBoardTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te653f680-d1df-11e1-8000-00215ad4efdf\tPset_ElectricDistributionBoardTypeCommon.Reference\tTEXT\t\t257\t1\tIfcIdentifier\t1\nPARAM\tece26e00-d1df-11e1-8000-00215ad4efdf\tPset_ElectricDistributionBoardTypeCommon.Status\tTEXT\t\t257\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t258\tPset_ElectricDistributionPointCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3fe1c495-213f-4af0-aba5-cdab98e11f5e\tPset_ElectricDistributionPointCommon.CaseMaterial\tMULTILINETEXT\t\t258\t1\tIfcMaterial\t1\nPARAM\t811e3796-c713-46f9-9339-0b835de4d27d\tPset_ElectricDistributionPointCommon.CaseWeight\tNUMBER\t\t258\t1\tIfcMassMeasure\t1\nPARAM\t233dd3e8-d001-47fa-8d2b-904e7a274cc4\tPset_ElectricDistributionPointCommon.IsMain\tYESNO\t\t258\t1\tIfcBoolean\t1\nPARAM\t33694f54-7384-4a57-b2b3-b916e944d863\tPset_ElectricDistributionPointCommon.NumberOfDoors\tINTEGER\t\t258\t1\tIfcInteger\t1\nPARAM\t607ff938-a2ce-45af-a850-a7d8ae634f00\tPset_ElectricDistributionPointCommon.NumberOfOpenings\tINTEGER\t\t258\t1\tIfcInteger\t1\n#\nGROUP\t259\tPset_ElectricFlowStorageDevicePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta277fb1f-cdca-4fcc-9c29-8634518b1066\tPset_ElectricFlowStorageDevicePHistory.Level\tNUMBER\t\t259\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t260\tPset_ElectricFlowStorageDeviceTypeBattery\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf57d3ef9-01e7-4abb-a4a7-42d93a1da902\tPset_ElectricFlowStorageDeviceTypeBattery.AssemblyInstruction\tMULTILINETEXT\t\t260\t1\tIfcExternalReference\t1\nPARAM\tfa581e33-7bdb-495b-b6ea-53944520def7\tPset_ElectricFlowStorageDeviceTypeBattery.BatteryChargingType\tTEXT\t\t260\t1\tPEnum_BatteryChargingType\t1\nPARAM\ta011a8cf-ce22-4005-b332-20c681dd4fc1\tPset_ElectricFlowStorageDeviceTypeBattery.CurrentRegulationRate\tNUMBER\t\t260\t1\tIfcRatioMeasure\t1\nPARAM\tc7125ff1-1c26-4498-85ad-78214700477e\tPset_ElectricFlowStorageDeviceTypeBattery.EncapsulationTechnologyCode\tTEXT\t\t260\t1\tIfcIdentifier\t1\nPARAM\t382c88ad-e4f9-42b8-93e4-ffc1730ab84e\tPset_ElectricFlowStorageDeviceTypeBattery.NominalSupplyCurrent\tNUMBER\t\t260\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t2f09c665-db2c-4cdd-810f-26cf3eaf1bf5\tPset_ElectricFlowStorageDeviceTypeBattery.OpenCircuitVoltage\tNUMBER\t\t260\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t22a59f85-7949-4bf6-b55b-fbb73444e1c4\tPset_ElectricFlowStorageDeviceTypeBattery.VoltageRegulationRate\tNUMBER\t\t260\t1\tIfcRatioMeasure\t1\n#\nGROUP\t261\tPset_ElectricFlowStorageDeviceTypeCapacitor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t55e91b40-41d2-4b67-b7f7-c786e4aaf973\tPset_ElectricFlowStorageDeviceTypeCapacitor.NumberOfPhases\tINTEGER\t\t261\t1\tIfcCountMeasure\t1\n#\nGROUP\t262\tPset_ElectricFlowStorageDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3df26200-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ConnectedConductorFunction\tTEXT\t\t262\t1\tPEnum_ConductorFunctionEnum\t1\nPARAM\t8dd12900-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PoleMaximumState\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t97f32780-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PoleMinimumState\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t932e7380-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PolePowerFactorMaximumState\tNUMBER\t\t262\t1\tIfcReal\t1\nPARAM\t9d507200-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PolePowerFactorMinimumState\tNUMBER\t\t262\t1\tIfcReal\t1\nPARAM\t961f401a-e939-4269-8eb4-951597bb68f0\tPset_ElectricFlowStorageDeviceTypeCommon.MaximumInsulatedVoltage\tNUMBER\t\t262\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t7813d9d4-8068-4f79-aca2-93559a565df4\tPset_ElectricFlowStorageDeviceTypeCommon.ModuleCapacity\tNUMBER\t\t262\t1\tIfcElectricCapacitanceMeasure\t1\nPARAM\t64446b41-70e2-49fa-9c6a-4564917ccfd9\tPset_ElectricFlowStorageDeviceTypeCommon.ModulesInParallel\tINTEGER\t\t262\t1\tIfcInteger\t1\nPARAM\t9c327be7-6d6f-4139-ab9f-58c6a5cc7a9a\tPset_ElectricFlowStorageDeviceTypeCommon.ModulesInSeries\tINTEGER\t\t262\t1\tIfcInteger\t1\nPARAM\t359a2700-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.NominalFrequency\tNUMBER\t\t262\t1\tIfcFrequencyMeasure\t1\nPARAM\t2915ce80-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.NominalSupplyVoltage\tNUMBER\t\t262\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t2e731900-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.NominalSupplyVoltageOffset\tMULTILINETEXT\t\t262\t1\tPropertyBoundedValue\t1\nPARAM\td3194927-d78f-4009-b7fb-07728601ea82\tPset_ElectricFlowStorageDeviceTypeCommon.PowerCapacity\tNUMBER\t\t262\t1\tIfcElectricChargeMeasure\t1\nPARAM\t7c868260-451b-4803-8f4f-c498fc0e3a9b\tPset_ElectricFlowStorageDeviceTypeCommon.RadiativeFraction\tNUMBER\t\t262\t1\tIfcRatioMeasure\t1\nPARAM\t401f801b-4f9f-40ad-bbf7-2328b9d53477\tPset_ElectricFlowStorageDeviceTypeCommon.RatedCapacitance\tNUMBER\t\t262\t1\tIfcElectricCapacitanceMeasure\t1\nPARAM\t10a5b400-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.Reference\tTEXT\t\t262\t1\tIfcIdentifier\t1\nPARAM\t76923b80-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PoleMaximumState\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t83af2a80-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PoleMinimumState\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t7db94980-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PolePowerFactorMaximumState\tNUMBER\t\t262\t1\tIfcReal\t1\nPARAM\t890c7500-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PolePowerFactorMinimumState\tNUMBER\t\t262\t1\tIfcReal\t1\nPARAM\t5c585d80-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit2PoleMinimumState\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t64b09880-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit2PolePowerFactorMinimumState\tNUMBER\t\t262\t1\tIfcReal\t1\nPARAM\t51053200-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit3PoleMaximumState\tNUMBER\t\t262\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t56fb1300-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit3PolePowerFactorMaximumState\tNUMBER\t\t262\t1\tIfcReal\t1\nPARAM\t17342b80-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.Status\tTEXT\t\t262\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t263\tPset_ElectricFlowStorageDeviceTypeInductor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1d4d6fab-4a51-4094-90fe-41c834a2ca00\tPset_ElectricFlowStorageDeviceTypeInductor.Inductance\tNUMBER\t\t263\t1\tIfcInductanceMeasure\t1\nPARAM\tbb5179a5-deec-4ec4-9ed0-44cf9d4c2fea\tPset_ElectricFlowStorageDeviceTypeInductor.NumberOfPhases\tINTEGER\t\t263\t1\tIfcCountMeasure\t1\n#\nGROUP\t264\tPset_ElectricFlowStorageDeviceTypeRecharger\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8e3e97de-5fb9-41c5-80f7-39b3b3d91b27\tPset_ElectricFlowStorageDeviceTypeRecharger.NominalSupplyCurrent\tNUMBER\t\t264\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t265\tPset_ElectricFlowStorageDeviceTypeUPS\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta7748134-d9f4-4c35-93a6-628685ca7150\tPset_ElectricFlowStorageDeviceTypeUPS.AssemblyInstruction\tMULTILINETEXT\t\t265\t1\tIfcExternalReference\t1\nPARAM\tc41bf592-8c9c-4337-9bfb-464910fc6096\tPset_ElectricFlowStorageDeviceTypeUPS.CurrentRegulationRate\tNUMBER\t\t265\t1\tIfcRatioMeasure\t1\nPARAM\t29fc843b-6cda-4af1-a087-8818b245d1f2\tPset_ElectricFlowStorageDeviceTypeUPS.NominalSupplyCurrent\tNUMBER\t\t265\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t2240a113-414d-4fa2-afe4-e9fa98ce07e3\tPset_ElectricFlowStorageDeviceTypeUPS.VoltageRegulationRate\tNUMBER\t\t265\t1\tIfcRatioMeasure\t1\n#\nGROUP\t266\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5510d1db-844f-41f3-966a-586d5860c33b\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.ElectronicFilterType\tTEXT\t\t266\t1\tPEnum_ElectronicFilterType\t1\nPARAM\tfadb9a69-8d78-408b-ae54-ca000d2e7ab6\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.NominalCurrent\tNUMBER\t\t266\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t47a6c8aa-c28c-4ae7-8f77-e2a5fdbc2af2\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.NominalPower\tNUMBER\t\t266\t1\tIfcPowerMeasure\t1\nPARAM\t40843c03-ae9b-41a2-852c-e4978407f156\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.PrimaryFrequency\tNUMBER\t\t266\t1\tIfcFrequencyMeasure\t1\nPARAM\tda6be3f1-8241-4923-9f87-dfbe7bb3761c\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.RatedVoltage\tMULTILINETEXT\t\t266\t1\tPropertyBoundedValue\t1\nPARAM\tda34a648-a0ad-4fd6-a8d7-6f8e5ce58293\tPset_ElectricFlowTreatmentDeviceTypeElectronicFilter.SecondaryFrequency\tNUMBER\t\t266\t1\tIfcFrequencyMeasure\t1\n#\nGROUP\t267\tPset_ElectricGeneratorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbb1dd700-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricGeneratorTypeCommon.ElectricGeneratorEfficiency\tNUMBER\t\t267\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc53fd580-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricGeneratorTypeCommon.MaximumPowerOutput\tNUMBER\t\t267\t1\tIfcPowerMeasure\t1\nPARAM\ta80b0700-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricGeneratorTypeCommon.Reference\tTEXT\t\t267\t1\tIfcIdentifier\t1\nPARAM\tc07b2180-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricGeneratorTypeCommon.StartCurrentFactor\tNUMBER\t\t267\t1\tIfcReal\t1\nPARAM\tad685180-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricGeneratorTypeCommon.Status\tTEXT\t\t267\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t268\tPset_ElectricHeaterTypeElectricalCableHeater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t82f138a2-680e-4abc-9174-dea8ebad4ab3\tPset_ElectricHeaterTypeElectricalCableHeater.HeatOutputPerUnitLength\tNUMBER\t\t268\t1\t IfcPowerMeasure\t1\n#\nGROUP\t269\tPset_ElectricHeaterTypeElectricalMatHeater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t324d848a-726e-49c2-96d8-26d07c677bfc\tPset_ElectricHeaterTypeElectricalMatHeater.HeatOutputPerUnitArea\tNUMBER\t\t269\t1\t IfcPowerMeasure\t1\n#\nGROUP\t270\tPset_ElectricHeaterTypeElectricalPointHeater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcd11dec2-109f-4eab-8fc0-b40ca90a0e16\tPset_ElectricHeaterTypeElectricalPointHeater.HeatOutput\tNUMBER\t\t270\t1\t IfcPowerMeasure\t1\n#\nGROUP\t271\tPset_ElectricMotorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te99bb200-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.ElectricMotorEfficiency\tNUMBER\t\t271\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0fc15200-d1e1-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.FrameSize\tTEXT\t\t271\t1\tIfcLabel\t1\nPARAM\t1b147d80-d1e1-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.HasPartWinding\tYESNO\t\t271\t1\tIfcBoolean\t1\nPARAM\t15b73300-d1e1-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.IsGuarded\tYESNO\t\t271\t1\tIfcBoolean\t1\nPARAM\tfddfaf00-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.LockedRotorCurrent\tNUMBER\t\t271\t1\tIfcElectricCurrentMeasure\t1\nPARAM\te56f9480-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.MaximumPowerOutput\tNUMBER\t\t271\t1\tIfcPowerMeasure\t1\nPARAM\t02a46300-d1e1-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.MotorEnclosureType\tTEXT\t\t271\t1\tPEnum_MotorEnclosureType\t1\nPARAM\td25cc480-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.Reference\tTEXT\t\t271\t1\tIfcIdentifier\t1\nPARAM\teef8fc80-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.StartCurrentFactor\tNUMBER\t\t271\t1\tIfcReal\t1\nPARAM\tf3251a00-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.StartingTime\tNUMBER\t\t271\t1\tIfcTimeMeasure\t1\nPARAM\td7217880-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.Status\tTEXT\t\t271\t1\tPEnum_ElementStatus\t1\nPARAM\tf8826480-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.TeTime\tNUMBER\t\t271\t1\tIfcTimeMeasure\t1\n#\nGROUP\t272\tPset_ElectricTimeControlTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t25cf1280-d1e1-11e1-8000-00215ad4efdf\tPset_ElectricTimeControlTypeCommon.Reference\tTEXT\t\t272\t1\tIfcIdentifier\t1\nPARAM\t2bc4f380-d1e1-11e1-8000-00215ad4efdf\tPset_ElectricTimeControlTypeCommon.Status\tTEXT\t\t272\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t273\tPset_ElementAssemblyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t943159a9-3c8d-4316-a7a0-1b4382c6ea80\tPset_ElementAssemblyCommon.Reference\tTEXT\t\t273\t1\tIfcIdentifier\t1\nPARAM\t20e74f79-d075-407a-92f9-3d6788281332\tPset_ElementAssemblyCommon.Status\tTEXT\t\t273\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t274\tPset_ElementAssemblyTypeCantilever\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2f965433-cbef-40cd-a94b-fce812dc86e6\tPset_ElementAssemblyTypeCantilever.AssemblyInstruction\tMULTILINETEXT\t\t274\t1\tIfcExternalReference\t1\nPARAM\t80e4ac76-ec58-481e-8151-ebb7755b1327\tPset_ElementAssemblyTypeCantilever.CantileverType\tTEXT\t\t274\t1\tPEnum_CantileverAssemblyType\t1\nPARAM\t524a96b1-e800-497e-b437-0c44e886455e\tPset_ElementAssemblyTypeCantilever.ContactWireStagger\tLENGTH\t\t274\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc2502814-24ee-47a5-92fe-c9b34aa8bc5d\tPset_ElementAssemblyTypeCantilever.SystemHeight\tLENGTH\t\t274\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t275\tPset_ElementAssemblyTypeDilatationPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tea184fa6-7781-4994-bb6f-d18c81de4794\tPset_ElementAssemblyTypeDilatationPanel.BladesOrientation\tTEXT\t\t275\t1\tPEnum_BladesOrientation\t1\nPARAM\te63b92b6-3783-4d8f-b731-1d74b722281d\tPset_ElementAssemblyTypeDilatationPanel.DilatationLength\tLENGTH\t\t275\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t67f27aad-31a0-455c-acd5-0feb53774977\tPset_ElementAssemblyTypeDilatationPanel.ExpansionDirection\tTEXT\t\t275\t1\tPEnum_ExpansionDirection\t1\nPARAM\tf6fb0122-c287-4807-92e8-8f4f664f2893\tPset_ElementAssemblyTypeDilatationPanel.InstallationPlan\tMULTILINETEXT\t\t275\t1\tIfcDocumentReference\t1\nPARAM\t4f1b4c35-09d7-4147-9dd4-85c3b47950f5\tPset_ElementAssemblyTypeDilatationPanel.TechnicalStandard\tMULTILINETEXT\t\t275\t1\tIfcExternalReference\t1\n#\nGROUP\t276\tPset_ElementAssemblyTypeHeadSpan\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta7525c57-1b36-49fd-854e-b9e3a9ba2e61\tPset_ElementAssemblyTypeHeadSpan.AssemblyInstruction\tMULTILINETEXT\t\t276\t1\tIfcExternalReference\t1\nPARAM\tc9516041-7d66-4aa3-8e3f-0dd8f43b9fc6\tPset_ElementAssemblyTypeHeadSpan.NumberOfTracksCrossed\tINTEGER\t\t276\t1\tIfcCountMeasure\t1\nPARAM\t93b45482-7e04-4b71-816d-6b2473403975\tPset_ElementAssemblyTypeHeadSpan.Span\tLENGTH\t\t276\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t277\tPset_ElementAssemblyTypeMast\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta729b4c7-906f-4ff4-bfa1-4a02530e35ee\tPset_ElementAssemblyTypeMast.WithLightningRod\tYESNO\t\t277\t1\tIfcBoolean\t1\n#\nGROUP\t278\tPset_ElementAssemblyTypeOCSSuspension\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t42845a1e-69cd-4c91-a180-d7cecfa18c54\tPset_ElementAssemblyTypeOCSSuspension.ContactWireHeight\tLENGTH\t\t278\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t266d1fe8-a5bf-4fce-b285-00e3cbb9d023\tPset_ElementAssemblyTypeOCSSuspension.ContactWireStagger\tLENGTH\t\t278\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t279\tPset_ElementAssemblyTypeRigidFrame\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t228b17a8-5655-45b5-9584-4becd234735a\tPset_ElementAssemblyTypeRigidFrame.AssemblyInstruction\tMULTILINETEXT\t\t279\t1\tIfcExternalReference\t1\nPARAM\t81bf8e6a-3b04-4aa1-86ae-00201b0575dd\tPset_ElementAssemblyTypeRigidFrame.LoadCapacity\tNUMBER\t\t279\t1\tIfcForceMeasure\t1\nPARAM\t7eaf073e-9a1f-4809-becc-66c7ebe5d209\tPset_ElementAssemblyTypeRigidFrame.NumberOfTracksCrossed\tINTEGER\t\t279\t1\tIfcCountMeasure\t1\nPARAM\taf93d42e-747b-4c41-bca5-919ed1e92f76\tPset_ElementAssemblyTypeRigidFrame.Span\tLENGTH\t\t279\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t280\tPset_ElementAssemblyTypeSteadyDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8a47076c-20f8-4477-bcba-1b1e823390a1\tPset_ElementAssemblyTypeSteadyDevice.AssemblyInstruction\tMULTILINETEXT\t\t280\t1\tIfcExternalReference\t1\nPARAM\t501c8acc-fff4-4683-9663-29bff32c7e25\tPset_ElementAssemblyTypeSteadyDevice.ContactWireStagger\tLENGTH\t\t280\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t14b88b78-8096-42d6-b4b4-e2b6e0d1ce3b\tPset_ElementAssemblyTypeSteadyDevice.IsSetOnWorkingWire\tYESNO\t\t280\t1\tIfcBoolean\t1\nPARAM\tf509ee5d-c3c9-4276-b793-e8a1fb3806d5\tPset_ElementAssemblyTypeSteadyDevice.SteadyDeviceType\tTEXT\t\t280\t1\tPEnum_SteadyDeviceType\t1\n#\nGROUP\t281\tPset_ElementAssemblyTypeSupportingAssembly\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t65751dfe-a112-4109-9e0a-032607595cd9\tPset_ElementAssemblyTypeSupportingAssembly.NumberOfCantilevers\tINTEGER\t\t281\t1\tIfcCountMeasure\t1\nPARAM\t9abe91d5-6e77-4d24-8a3a-296222f613f8\tPset_ElementAssemblyTypeSupportingAssembly.TypeOfSupportingSystem\tTEXT\t\t281\t1\tPEnum_SupportingSystemType\t1\n#\nGROUP\t282\tPset_ElementAssemblyTypeTrackPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t046c133f-43a0-4260-a225-4cce80664ca7\tPset_ElementAssemblyTypeTrackPanel.InstallationPlan\tMULTILINETEXT\t\t282\t1\tIfcDocumentReference\t1\nPARAM\tb2b57075-d4b7-47e1-957c-3e4c63ce9a1d\tPset_ElementAssemblyTypeTrackPanel.IsAccessibleByVehicle\tYESNO\t\t282\t1\tIfcBoolean\t1\nPARAM\t07d65729-c94a-491c-89e6-77e05c58e4d9\tPset_ElementAssemblyTypeTrackPanel.TrackExpansion\tMULTILINETEXT\t\t282\t1\tPropertyBoundedValue\t1\n#\nGROUP\t283\tPset_ElementAssemblyTypeTractionSwitchingAssembly\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1d8e0946-ada8-4f94-b96a-933cd1a70cad\tPset_ElementAssemblyTypeTractionSwitchingAssembly.DesignAmbientTemperature\tMULTILINETEXT\t\t283\t1\tPropertyBoundedValue\t1\nPARAM\t08b996e7-83b7-44ef-9448-d8501d92f976\tPset_ElementAssemblyTypeTractionSwitchingAssembly.NominalCurrent\tNUMBER\t\t283\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t08411494-7e64-4814-bb45-ac9ec377e754\tPset_ElementAssemblyTypeTractionSwitchingAssembly.NominalPower\tNUMBER\t\t283\t1\tIfcPowerMeasure\t1\nPARAM\t5556537f-9526-488e-a337-e7042153182b\tPset_ElementAssemblyTypeTractionSwitchingAssembly.RatedVoltage\tMULTILINETEXT\t\t283\t1\tPropertyBoundedValue\t1\n#\nGROUP\t284\tPset_ElementAssemblyTypeTurnoutPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4da8d614-6e37-458e-994d-08ea68bfc193\tPset_ElementAssemblyTypeTurnoutPanel.BranchLineDirection\tTEXT\t\t284\t1\tPEnum_BranchLineDirection\t1\nPARAM\t4f94c5b2-34af-4712-907d-0d78b05f3df6\tPset_ElementAssemblyTypeTurnoutPanel.InstallationPlan\tMULTILINETEXT\t\t284\t1\tIfcDocumentReference\t1\nPARAM\t4cf99c64-0bfd-4a1f-baea-befb7b33c6ba\tPset_ElementAssemblyTypeTurnoutPanel.IsAccessibleByVehicle\tYESNO\t\t284\t1\tIfcBoolean\t1\nPARAM\t9931da43-a728-4424-bf7a-3f7fad0bace4\tPset_ElementAssemblyTypeTurnoutPanel.IsSharedTurnout\tYESNO\t\t284\t1\tIfcBoolean\t1\nPARAM\tb1ac3271-7a62-4f15-9c23-a84dae88f12a\tPset_ElementAssemblyTypeTurnoutPanel.MaximumSpeedLimitOfDivergingLine\tNUMBER\t\t284\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tf26811d3-6512-4fc4-92bc-373f124d1d14\tPset_ElementAssemblyTypeTurnoutPanel.PercentShared\tNUMBER\t\t284\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t8178b92c-8d12-41f6-a524-e2f515253c73\tPset_ElementAssemblyTypeTurnoutPanel.TrackElementOrientation\tTEXT\t\t284\t1\tPEnum_TurnoutPanelOrientation\t1\nPARAM\t9b0b0536-9b83-4a0a-b9fe-de7e0ac77b61\tPset_ElementAssemblyTypeTurnoutPanel.TrackExpansion\tMULTILINETEXT\t\t284\t1\tPropertyBoundedValue\t1\nPARAM\tf94b373e-c414-4346-bbc6-60dc1a018c4f\tPset_ElementAssemblyTypeTurnoutPanel.TrackGaugeLength\tLENGTH\t\t284\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc582baa5-48ea-407b-8021-df78e5401a6a\tPset_ElementAssemblyTypeTurnoutPanel.TurnoutCurvedRadius\tLENGTH\t\t284\t1\tIfcLengthMeasure\t1\nPARAM\td6fda0fe-85fa-43ff-8266-6561d11ca5e9\tPset_ElementAssemblyTypeTurnoutPanel.TurnoutHeaterType\tTEXT\t\t284\t1\tPEnum_TurnoutHeaterType\t1\nPARAM\tc049bf5b-26c7-4339-b290-7d7f0079dc57\tPset_ElementAssemblyTypeTurnoutPanel.TurnoutPointMachineCount\tINTEGER\t\t284\t1\tIfcCountMeasure\t1\nPARAM\t69e58c16-e9b8-4bcd-a440-e6c4fe5cd7f5\tPset_ElementAssemblyTypeTurnoutPanel.TypeOfCurvedTurnout\tTEXT\t\t284\t1\tPEnum_TypeOfCurvedTurnout\t1\nPARAM\t00b1bd1d-b264-44ae-93a2-b30418f951e6\tPset_ElementAssemblyTypeTurnoutPanel.TypeOfDrivingDevice\tTEXT\t\t284\t1\tPEnum_TypeOfDrivingDevice\t1\nPARAM\t7e431e75-7d3e-4976-ad12-e6ad1add3f3b\tPset_ElementAssemblyTypeTurnoutPanel.TypeOfJunction\tTEXT\t\t284\t1\tPEnum_TypeOfJunction\t1\nPARAM\tb9518a85-a942-4f6f-9579-cce97a27a30c\tPset_ElementAssemblyTypeTurnoutPanel.TypeOfTurnout\tTEXT\t\t284\t1\tPEnum_TypeOfTurnout\t1\n#\nGROUP\t285\tPset_ElementComponentCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7b199ec-6918-4e05-b9a8-d4dc3a89f6d7\tPset_ElementComponentCommon.CorrosionTreatment\tTEXT\t\t285\t1\tPEnum_ElementComponentCorrosionTreatment\t1\nPARAM\t292f5db4-336e-4b31-9ebd-d91a1ab594ab\tPset_ElementComponentCommon.DeliveryType\tTEXT\t\t285\t1\tPEnum_ElementComponentDeliveryType\t1\nPARAM\t7525c67c-0faa-44ba-995f-99d07b72dd31\tPset_ElementComponentCommon.Reference\tTEXT\t\t285\t1\tIfcIdentifier\t1\nPARAM\t56f08e40-f4ec-4446-8b85-b83294b65e5f\tPset_ElementComponentCommon.Status\tTEXT\t\t285\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t286\tPset_ElementKinematics\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb4550f68-9345-46d2-932b-6a64dc9f9414\tPset_ElementKinematics.CyclicPath\tMULTILINETEXT\t\t286\t1\tPropertyTableValue\t1\nPARAM\t9a38312e-0c70-4fe1-9ce6-76b9f5998f57\tPset_ElementKinematics.CyclicRange\tNUMBER\t\t286\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t24a74947-054c-4458-ac75-245ccc7a0784\tPset_ElementKinematics.LinearPath\tMULTILINETEXT\t\t286\t1\tPropertyTableValue\t1\nPARAM\tf4ad9a73-7ca6-4146-8bf1-26569331de1d\tPset_ElementKinematics.LinearRange\tLENGTH\t\t286\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te9caed91-bf89-4b78-869f-c826bc7ad68e\tPset_ElementKinematics.MaximumAngularVelocity\tNUMBER\t\t286\t1\tIfcAngularVelocityMeasure\t1\nPARAM\t66f942d5-4134-4444-8018-d4da41e498e2\tPset_ElementKinematics.MaximumConstantSpeed\tNUMBER\t\t286\t1\tIfcLinearVelocityMeasure\t1\nPARAM\te75f8278-a662-4e63-bb49-349663be7252\tPset_ElementKinematics.MinimumTime\tNUMBER\t\t286\t1\tIfcTimeMeasure\t1\n#\nGROUP\t287\tPset_ElementShading\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2805d0d9-8bc0-4636-9a6e-62e22f184c9e\tPset_ElementShading.AverageSolarTransmittance\tNUMBER\t\t287\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t075b8868-aaab-44c0-8bec-e2ea4206d65a\tPset_ElementShading.AverageVisibleTransmittance\tNUMBER\t\t287\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1f6dd7e6-7086-4cca-9184-8cc0a05aafdc\tPset_ElementShading.Azimuth\tNUMBER\t\t287\t1\tIfcPositivePlaneAngleMeasure \t1\nPARAM\taecbb1d0-b830-4a2d-a074-0ed749ee2222\tPset_ElementShading.Color\tTEXT\t\t287\t1\tIfcLabel\t1\nPARAM\t08b01627-4cfa-4ce7-b8c8-ef455494ab57\tPset_ElementShading.Inclination\tNUMBER\t\t287\t1\tIfcPositivePlaneAngleMeasure \t1\nPARAM\tec99155b-b09d-40f5-9194-367cf08a9d30\tPset_ElementShading.Reflectance\tNUMBER\t\t287\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tfdc121fd-14c6-4c4b-8b26-c7ffced1a7d8\tPset_ElementShading.Roughness\tLENGTH\t\t287\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta83b9757-eebf-4490-bdcf-59baac537a75\tPset_ElementShading.ShadingDeviceType\tTEXT\t\t287\t1\tPEnum_ElementShading\t1\nPARAM\t53703254-46c5-4a8c-923d-ffa1361e44e3\tPset_ElementShading.TiltRange\tMULTILINETEXT\t\t287\t1\tPropertyBoundedValue\t1\n#\nGROUP\t288\tPset_ElementSize\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t81fd48b7-cc88-4945-b51c-ab529b76ccb4\tPset_ElementSize.NominalHeight\tLENGTH\t\t288\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2dae78e3-f086-43b2-a4b6-a649e8dcb396\tPset_ElementSize.NominalLength\tLENGTH\t\t288\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9ff19841-ff26-4434-835c-2ed9179f7877\tPset_ElementSize.NominalWidth\tLENGTH\t\t288\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t289\tPset_EmbeddedTrack\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcdf8fad8-5b17-445e-936f-180066248776\tPset_EmbeddedTrack.HasDrainage\tYESNO\t\t289\t1\tIfcBoolean\t1\nPARAM\t2619d8db-895b-4717-b0ff-c9716383ae68\tPset_EmbeddedTrack.IsAccessibleByVehicle\tYESNO\t\t289\t1\tIfcBoolean\t1\nPARAM\td38c69ad-ad90-4447-90ec-0366dca24160\tPset_EmbeddedTrack.PermissibleRoadLoad\tNUMBER\t\t289\t1\tIfcMassMeasure\t1\n#\nGROUP\t290\tPset_EnergyConsumptionPHistoryElectricity\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t067468c3-20c7-49f7-aeb6-dc71a8e0f049\tPset_EnergyConsumptionPHistoryElectricity.ApparentPower\tNUMBER\t\t290\t1\tIfcReal\t1\nPARAM\tfec1977c-aab3-4cc7-a1c7-2bb7569a64cf\tPset_EnergyConsumptionPHistoryElectricity.Current\tTEXT\t\t290\t1\tIfcLabel\t1\nPARAM\t982f60c2-097c-4a25-8107-e58d688dbabe\tPset_EnergyConsumptionPHistoryElectricity.PowerFactor\tNUMBER\t\t290\t1\tIfcReal\t1\nPARAM\t81aa7bb2-9ed5-495b-acdf-8724fd196bef\tPset_EnergyConsumptionPHistoryElectricity.ReactivePower\tNUMBER\t\t290\t1\tIfcReal\t1\nPARAM\t465a7311-d470-4165-8361-744d72fa638b\tPset_EnergyConsumptionPHistoryElectricity.RealPower\tNUMBER\t\t290\t1\tIfcReal\t1\nPARAM\te7cc58ad-a50e-4808-95d8-16889eef08dc\tPset_EnergyConsumptionPHistoryElectricity.Voltage\tTEXT\t\t290\t1\tIfcLabel\t1\n#\nGROUP\t291\tPset_EnergyConsumptionPHistoryFuel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4519c9db-9f45-480a-8029-dac0ceae3151\tPset_EnergyConsumptionPHistoryFuel.Flowrate\tNUMBER\t\t291\t1\tIfcReal\t1\nPARAM\t95f29a12-e180-4a5a-a114-01781d7666af\tPset_EnergyConsumptionPHistoryFuel.Pressure\tNUMBER\t\t291\t1\tIfcReal\t1\nPARAM\tb61196e9-bbe5-484c-b42f-07863f9bafe6\tPset_EnergyConsumptionPHistoryFuel.Temperature\tNUMBER\t\t291\t1\tIfcReal\t1\n#\nGROUP\t292\tPset_EnergyConsumptionPHistorySteam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfbd1d549-8dba-45b0-904b-8343e094c16f\tPset_EnergyConsumptionPHistorySteam.Flowrate\tNUMBER\t\t292\t1\tIfcReal\t1\nPARAM\t255cddc1-3752-4514-9d0e-b70f2048681d\tPset_EnergyConsumptionPHistorySteam.Pressure\tNUMBER\t\t292\t1\tIfcReal\t1\nPARAM\td5d55788-b9d1-4b0a-b1fe-5aa92f005a1b\tPset_EnergyConsumptionPHistorySteam.Quality\tTEXT\t\t292\t1\tIfcLabel\t1\nPARAM\tdff997f9-f335-4acf-84a6-e0ba64c7852b\tPset_EnergyConsumptionPHistorySteam.Temperature\tNUMBER\t\t292\t1\tIfcReal\t1\n#\nGROUP\t293\tPset_EnergyConversionDeviceCoil\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t99a2dbcf-e59c-434c-809a-8ea14bf6f715\tPset_EnergyConversionDeviceCoil.HasSoundAttentuation\tYESNO\t\t293\t1\tIfcBoolean\t1\n#\nGROUP\t294\tPset_EnergyConversionDeviceSpaceHeaterPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te9c531d5-a6a0-45e0-aa7d-a37b9a874c6e\tPset_EnergyConversionDeviceSpaceHeaterPanel.NumberOfPanels\tINTEGER\t\t294\t1\tIfcInteger\t1\n#\nGROUP\t295\tPset_EnergyConversionDeviceSpaceHeaterSectional\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tce2794f5-9e04-40f4-9b81-6dd86b1327d1\tPset_EnergyConversionDeviceSpaceHeaterSectional.NumberOfSections\tINTEGER\t\t295\t1\tIfcInteger\t1\n#\nGROUP\t296\tPset_EnergyRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t324a20ba-6b67-4a79-b142-769d98992842\tPset_EnergyRequirements.EnergyConsumption\tNUMBER\t\t296\t1\tIfcEnergyMeasure\t1\nPARAM\t6cfe568b-1703-4c7b-84c7-488566d27ba3\tPset_EnergyRequirements.EnergyConversionEfficiency\tNUMBER\t\t296\t1\tIfcRatioMeasure\t1\nPARAM\t8d3d6aca-fd4b-44fb-9fbc-3afdade0e919\tPset_EnergyRequirements.EnergySourceLabel\tTEXT\t\t296\t1\tIfcLabel\t1\nPARAM\ta1b61839-87a1-4b6f-93c9-aaba3ebbc619\tPset_EnergyRequirements.PowerDemand\tNUMBER\t\t296\t1\tIfcPowerMeasure\t1\n#\nGROUP\t297\tPset_EngineTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5fa01900-d1e1-11e1-8000-00215ad4efdf\tPset_EngineTypeCommon.EnergySource\tTEXT\t\t297\t1\tPEnum_EngineEnergySource\t1\nPARAM\t49925880-d1e1-11e1-8000-00215ad4efdf\tPset_EngineTypeCommon.Reference\tTEXT\t\t297\t1\tIfcIdentifier\t1\nPARAM\t4f883980-d1e1-11e1-8000-00215ad4efdf\tPset_EngineTypeCommon.Status\tTEXT\t\t297\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t298\tPset_EnvironmentalCondition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdba4be13-8f32-4cf2-b31b-f3b72ebf23c7\tPset_EnvironmentalCondition.MaximumAtmosphericPressure\tNUMBER\t\t298\t1\tIfcPressureMeasure\t1\nPARAM\t53ac7f06-1cd8-4fea-92be-6192bf4abe4a\tPset_EnvironmentalCondition.MaximumRainIntensity\tNUMBER\t\t298\t1\tIfcReal\t1\nPARAM\te94c4fe3-2481-4acb-abd6-a36d60e29655\tPset_EnvironmentalCondition.MaximumSolarRadiation\tNUMBER\t\t298\t1\tIfcReal\t1\nPARAM\t504b5705-4679-4973-8951-f9d6a7605256\tPset_EnvironmentalCondition.MaximumWindSpeed\tNUMBER\t\t298\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t86872acd-33e7-4b49-a464-2f2e07ae2f92\tPset_EnvironmentalCondition.OperationalTemperatureRange\tMULTILINETEXT\t\t298\t1\tPropertyBoundedValue\t1\nPARAM\t1d9634fa-6a1c-43dc-9ec4-366a2ea4adb6\tPset_EnvironmentalCondition.ReferenceAirRelativeHumidity\tMULTILINETEXT\t\t298\t1\tPropertyBoundedValue\t1\nPARAM\t20c2d5d0-3f3c-4a7c-a8a4-2c4c3cb90736\tPset_EnvironmentalCondition.ReferenceEnvironmentTemperature\tMULTILINETEXT\t\t298\t1\tPropertyBoundedValue\t1\nPARAM\tcd12a88f-7e7d-4f5c-b488-b9b42efcce71\tPset_EnvironmentalCondition.SaltMistLevel\tTEXT\t\t298\t1\tIfcLabel\t1\nPARAM\t8a4fa4ce-0294-4ebd-899f-e74d19d63f4a\tPset_EnvironmentalCondition.SeismicResistance\tNUMBER\t\t298\t1\tIfcReal\t1\nPARAM\t5c4117bb-9539-4da4-abbb-43642a0f0600\tPset_EnvironmentalCondition.SmokeLevel\tTEXT\t\t298\t1\tIfcLabel\t1\nPARAM\tfb15d892-9387-4ece-bd9e-c5ccfda66a4c\tPset_EnvironmentalCondition.StorageTemperatureRange\tMULTILINETEXT\t\t298\t1\tPropertyBoundedValue\t1\n#\nGROUP\t299\tPset_EnvironmentalEmissions\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6b1bad58-59b5-4173-903d-4ed5e7fdfe7c\tPset_EnvironmentalEmissions.CarbonDioxideEmissions\tNUMBER\t\t299\t1\tIfcMassFlowRateMeasure\t1\nPARAM\td2f7b709-c58c-4019-aa14-bd5793f30c47\tPset_EnvironmentalEmissions.NitrogenOxidesEmissions\tNUMBER\t\t299\t1\tIfcMassFlowRateMeasure\t1\nPARAM\t88d8e342-1407-4d1e-96b6-13fe38b9b11d\tPset_EnvironmentalEmissions.NoiseEmissions\tNUMBER\t\t299\t1\tIfcSoundPowerLevelMeasure\t1\nPARAM\tcf50e12f-ad4d-457b-bee8-4990e9cf5b28\tPset_EnvironmentalEmissions.ParticulateMatterEmissions\tNUMBER\t\t299\t1\tIfcMassFlowRateMeasure\t1\nPARAM\t04b7a72a-f2df-4ce7-870f-a2d02453284a\tPset_EnvironmentalEmissions.SulphurDioxideEmissions\tNUMBER\t\t299\t1\tIfcMassFlowRateMeasure\t1\n#\nGROUP\t300\tPset_EnvironmentalImpactIndicators\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc9202780-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.AtmosphericAcidificationPerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\tc32a4680-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.ClimateChangePerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\tf79e0280-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.EutrophicationPerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\ta7bf3b80-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.ExpectedServiceLife\tNUMBER\t\t300\t1\tIfcTimeMeasure\t1\nPARAM\t88281300-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.FunctionalUnitReference\tTEXT\t\t300\t1\tIfcLabel\t1\nPARAM\tb9084800-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.HazardousWastePerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\taa320509-358c-40ae-83ac-744f8eeb0122\tPset_EnvironmentalImpactIndicators.IndicatorsUnit\tTEXT\t\t300\t1\tIfcText\t1\nPARAM\te0f7ab80-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.InertWastePerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\t96762f00-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.LifeCyclePhase\tTEXT\t\t300\t1\tPEnum_LifeCyclePhase\t1\nPARAM\tbe659280-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.NonHazardousWastePerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\td50be980-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.NonRenewableEnergyConsumptionPerUnit\tNUMBER\t\t300\t1\tIfcEnergyMeasure\t1\nPARAM\tf2d94e80-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.PhotochemicalOzoneFormationPerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\te6ed8c80-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.RadioactiveWastePerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\t82323200-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.Reference\tTEXT\t\t300\t1\tIfcIdentifier\t1\nPARAM\tcf160880-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.RenewableEnergyConsumptionPerUnit\tNUMBER\t\t300\t1\tIfcEnergyMeasure\t1\nPARAM\tdb01ca80-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.ResourceDepletionPerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\tec4ad700-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.StratosphericOzoneLayerDestructionPerUnit\tNUMBER\t\t300\t1\tIfcMassMeasure\t1\nPARAM\tadb51c80-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.TotalPrimaryEnergyConsumptionPerUnit\tNUMBER\t\t300\t1\tIfcEnergyMeasure\t1\nPARAM\t8f4f2100-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.Unit\tTEXT\t\t300\t1\tIfcText\t1\nPARAM\tb3126700-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.WaterConsumptionPerUnit\tVOLUME\t\t300\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t301\tPset_EnvironmentalImpactValues\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1f8d6600-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.AtmosphericAcidification\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t1a301b80-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.ClimateChange\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\tb5b49d20-0bf2-49a4-9d55-8cef7acb75bd\tPset_EnvironmentalImpactValues.Duration\tTEXT\t\t301\t1\tIfcDuration\t1\nPARAM\t4cda1400-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.Eutrophication\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t0f758680-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.HazardousWaste\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t359b2680-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.InertWaste\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\tb8fbc6f7-870b-486e-80cd-661b9dd0c27c\tPset_EnvironmentalImpactValues.LeadInTime\tTEXT\t\t301\t1\tIfcDuration\t1\nPARAM\t88eae355-e7df-464a-849b-e613af48fa32\tPset_EnvironmentalImpactValues.LeadOutTime\tTEXT\t\t301\t1\tIfcDuration\t1\nPARAM\t14d2d100-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.NonHazardousWaste\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t2ae09180-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.NonRenewableEnergyConsumption\tNUMBER\t\t301\t1\tIfcEnergyMeasure\t1\nPARAM\t46e43300-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.PhotochemicalOzoneFormation\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t3b910780-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.RadioactiveWaste\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t25834700-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.RenewableEnergyConsumption\tNUMBER\t\t301\t1\tIfcEnergyMeasure\t1\nPARAM\t303ddc00-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.ResourceDepletion\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t40ee5200-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.StratosphericOzoneLayerDestruction\tNUMBER\t\t301\t1\tIfcMassMeasure\t1\nPARAM\t04225b00-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.TotalPrimaryEnergyConsumption\tNUMBER\t\t301\t1\tIfcEnergyMeasure\t1\nPARAM\t097fa580-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.WaterConsumption\tVOLUME\t\t301\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t302\tPset_EvaporativeCoolerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c8b82e4-9256-47f3-ab8e-66344426eb6b\tPset_EvaporativeCoolerPHistory.AirPressureDropCurve\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\nPARAM\t5c595d00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerPHistory.Effectiveness\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\nPARAM\tfedf87c7-e123-40fb-8d18-2fb11e1e2fed\tPset_EvaporativeCoolerPHistory.EffectivenessTable\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\nPARAM\t62e7d480-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerPHistory.LatentHeatTransferRate\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\nPARAM\t5f544d80-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerPHistory.SensibleHeatTransferRate\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\nPARAM\t65e2c500-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerPHistory.TotalHeatTransferRate\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\nPARAM\t07d099d9-c7d4-4e14-b1ca-f4e32394201b\tPset_EvaporativeCoolerPHistory.WaterPressDropCurve\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\nPARAM\t582d3f80-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerPHistory.WaterSumpTemperature\tMULTILINETEXT\t\t302\t1\tIfcTimeSeries\t1\n#\nGROUP\t303\tPset_EvaporativeCoolerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb1956e80-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.AirPressureDropCurve\tMULTILINETEXT\t\t303\t1\tPropertyTableValue\t1\nPARAM\ta7737000-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.EffectivenessTable\tMULTILINETEXT\t\t303\t1\tPropertyTableValue\t1\nPARAM\t86128400-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.FlowArrangement\tTEXT\t\t303\t1\tPEnum_EvaporativeCoolerFlowArrangement\t1\nPARAM\t93c80980-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.HeatExchangeArea\tAREA\t\t303\t1\tIfcAreaMeasure\t1\nPARAM\t4c70ed76-185d-48cb-b1bf-4f83ce537737\tPset_EvaporativeCoolerTypeCommon.HeatExchangerMediaMaterials\tMULTILINETEXT\t\t303\t1\tIfcMaterial\t1\nPARAM\t99255400-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.OperationTemperatureRange\tMULTILINETEXT\t\t303\t1\tPropertyBoundedValue\t1\nPARAM\t7004c380-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.Reference\tTEXT\t\t303\t1\tIfcIdentifier\t1\nPARAM\t76933b00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.Status\tTEXT\t\t303\t1\tPEnum_ElementStatus\t1\nPARAM\tbce89a00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.WaterPressDropCurve\tMULTILINETEXT\t\t303\t1\tPropertyTableValue\t1\nPARAM\ta2162580-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.WaterRequirement\tNUMBER\t\t303\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tdcf75b89-fea2-48dc-a622-d0e09da3432a\tPset_EvaporativeCoolerTypeCommon.Weight\tNUMBER\t\t303\t1\tIfcMassMeasure\t1\n#\nGROUP\t304\tPset_EvaporatorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teef9fc00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.CompressorEvaporatorHeatGain\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\tf3beb000-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.CompressorEvaporatorPressureDrop\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\tdbe72c00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.EvaporatingTemperature\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\tf8836400-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.EvaporatorMeanVoidFraction\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\td12c9700-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.ExteriorHeatTransferCoefficient\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\tce31a680-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.HeatRejectionRate\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\td4c01e00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.InteriorHeatTransferCoefficient\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\tdee21c80-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.LogarithmicMeanTemperatureDifference\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\td8ec3b80-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.RefrigerantFoulingResistance\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\t4af9c013-026b-433e-b09c-24c8f14ac818\tPset_EvaporatorPHistory.RefrigrerantFoulingResistance\tNUMBER\t\t304\t1\tIfcReal\t1\nPARAM\te1dd0d00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.UAcurves\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\nPARAM\tfc16eb00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.WaterFoulingResistance\tMULTILINETEXT\t\t304\t1\tIfcTimeSeries\t1\n#\nGROUP\t305\tPset_EvaporatorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t28cb0280-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.EvaporatorCoolant\tTEXT\t\t305\t1\tPEnum_EvaporatorCoolant\t1\nPARAM\t1bae1380-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.EvaporatorMediumType\tTEXT\t\t305\t1\tPEnum_EvaporatorMediumType\t1\nPARAM\t5021cf80-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.ExternalSurfaceArea\tAREA\t\t305\t1\tIfcAreaMeasure\t1\nPARAM\t5c0d9180-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.InternalRefrigerantVolume\tVOLUME\t\t305\t1\tIfcVolumeMeasure\t1\nPARAM\t56b04700-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.InternalSurfaceArea\tAREA\t\t305\t1\tIfcAreaMeasure\t1\nPARAM\t616adc00-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.InternalWaterVolume\tVOLUME\t\t305\t1\tIfcVolumeMeasure\t1\nPARAM\t6760bd00-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.NominalHeatTransferArea\tAREA\t\t305\t1\tIfcAreaMeasure\t1\nPARAM\t6d569e00-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.NominalHeatTransferCoefficient\tNUMBER\t\t305\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t05a05300-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.Reference\tTEXT\t\t305\t1\tIfcIdentifier\t1\nPARAM\t397b7880-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.RefrigerantClass\tTEXT\t\t305\t1\tPEnum_RefrigerantClass\t1\nPARAM\t76f73890-9496-4f19-9f1c-1604277fd98e\tPset_EvaporatorTypeCommon.RefrigerantType\tMULTILINETEXT\t\t305\t1\tIfcMaterial\t1\nPARAM\t0c2eca80-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.Status\tTEXT\t\t305\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t306\tPset_FanCentrifugal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta262f080-d1e3-11e1-8000-00215ad4efdf\tPset_FanCentrifugal.Arrangement\tTEXT\t\t306\t1\tPEnum_CentrifugalFanArrangement\t1\nPARAM\t94ad6b00-d1e3-11e1-8000-00215ad4efdf\tPset_FanCentrifugal.DirectionOfRotation\tTEXT\t\t306\t1\tPEnum_CentrifugalFanRotation\t1\nPARAM\t7cd5e700-d1e3-11e1-8000-00215ad4efdf\tPset_FanCentrifugal.DischargePosition\tTEXT\t\t306\t1\tPEnum_CentrifugalFanDischargePosition\t1\nPARAM\t59725f33-ca2c-47fe-bb41-37041e4cba8a\tPset_FanCentrifugal.FanArrangement\tTEXT\t\t306\t1\tPEnum_CentrifugalFanArrangement\t1\n#\nGROUP\t307\tPset_FanOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcfaf9e80-d1e3-11e1-8000-00215ad4efdf\tPset_FanOccurrence.ApplicationOfFan\tTEXT\t\t307\t1\tPEnum_FanApplicationType\t1\nPARAM\te0601480-d1e3-11e1-8000-00215ad4efdf\tPset_FanOccurrence.CoilPosition\tTEXT\t\t307\t1\tPEnum_FanCoilPosition\t1\nPARAM\tbeff2880-d1e3-11e1-8000-00215ad4efdf\tPset_FanOccurrence.DischargeType\tTEXT\t\t307\t1\tPEnum_FanDischargeType\t1\nPARAM\tfa015c00-d1e3-11e1-8000-00215ad4efdf\tPset_FanOccurrence.FanMountingType\tTEXT\t\t307\t1\tPEnum_FanMountingType\t1\nPARAM\t0d142c00-d1e4-11e1-8000-00215ad4efdf\tPset_FanOccurrence.FractionOfMotorHeatToAirStream\tNUMBER\t\t307\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t12717680-d1e4-11e1-8000-00215ad4efdf\tPset_FanOccurrence.ImpellerDiameter\tLENGTH\t\t307\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tece46d00-d1e3-11e1-8000-00215ad4efdf\tPset_FanOccurrence.MotorPosition\tTEXT\t\t307\t1\tPEnum_FanMotorPosition\t1\n#\nGROUP\t308\tPset_FanPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t36cd5300-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.DischargePressureLoss\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\t33d26280-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.DischargeVelocity\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\t3a60da00-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.DrivePowerLoss\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\t47af418e-4ddc-4150-b52e-90d66bc334f5\tPset_FanPHistory.EfficiencyCurve\tMULTILINETEXT\t\t308\t1\tPropertyTableValue\t1\nPARAM\t26b57380-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.FanEfficiency\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\t2cab5480-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.FanPowerRate\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\t2026fc00-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.FanRotationSpeed\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\t29b06400-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.OverallEfficiency\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\td4c7198a-18b1-455e-a335-b495456a4c65\tPset_FanPHistory.PressureCurve\tMULTILINETEXT\t\t308\t1\tPropertyTableValue\t1\nPARAM\t303edb80-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.ShaftPowerRate\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\nPARAM\t23ba8300-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.WheelTipSpeed\tMULTILINETEXT\t\t308\t1\tIfcTimeSeries\t1\n#\nGROUP\t309\tPset_FanTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6a0fe200-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.CapacityControlType\tTEXT\t\t309\t1\tPEnum_FanCapacityControlType\t1\nPARAM\tb22f0480-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.EfficiencyCurve\tMULTILINETEXT\t\t309\t1\tPropertyTableValue\t1\nPARAM\te63d1f5f-8474-4433-bdb2-279c5f079be3\tPset_FanTypeCommon.HousingMaterial\tMULTILINETEXT\t\t309\t1\tIfcMaterial\t1\nPARAM\t5b292f80-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.MotorDriveType\tTEXT\t\t309\t1\tPEnum_FanMotorConnectionType\t1\nPARAM\t83189300-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.NominalAirFlowRate\tNUMBER\t\t309\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t9b88ad80-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.NominalPowerRate\tNUMBER\t\t309\t1\tIfcPowerMeasure\t1\nPARAM\t96c3f980-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.NominalRotationSpeed\tNUMBER\t\t309\t1\tIfcRotationalFrequencyMeasure\t1\nPARAM\t90ce1880-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.NominalStaticPressure\tNUMBER\t\t309\t1\tIfcPressureMeasure\t1\nPARAM\t890e7400-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.NominalTotalPressure\tNUMBER\t\t309\t1\tIfcPressureMeasure\t1\nPARAM\ta0e5f800-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.OperationalCriteria\tNUMBER\t\t309\t1\tIfcTimeMeasure\t1\nPARAM\t7ac05800-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.OperationTemperatureRange\tMULTILINETEXT\t\t309\t1\tPropertyBoundedValue\t1\nPARAM\ta6dbd900-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.PressureCurve\tMULTILINETEXT\t\t309\t1\tPropertyTableValue\t1\nPARAM\t43ea4200-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.Reference\tTEXT\t\t309\t1\tIfcIdentifier\t1\nPARAM\t4b115000-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.Status\tTEXT\t\t309\t1\tPEnum_ElementStatus\t1\nPARAM\t378a418a-fe3f-43ba-93af-07afe7d7a859\tPset_FanTypeCommon.Weight\tNUMBER\t\t309\t1\tIfcMassMeasure\t1\nPARAM\tb2d8bc12-2466-4551-82e3-83934d9bdeec\tPset_FanTypeCommon.WheelMaterial\tMULTILINETEXT\t\t309\t1\tIfcMaterial\t1\n#\nGROUP\t310\tPset_FanTypeSmokeControl\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t01faa1f3-9c12-4282-829a-b6bcaa3bbc19\tPset_FanTypeSmokeControl.MaximumDesignTemperature\tNUMBER\t\t310\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\ta31d008c-8f14-4446-a306-b928e206ee10\tPset_FanTypeSmokeControl.OperationalCriteria\tNUMBER\t\t310\t1\tIfcTimeMeasure\t1\nPARAM\t5b508557-d008-4040-8275-8e4a58fb4093\tPset_FanTypeSmokeControl.SmokeControlFlowrate\tNUMBER\t\t310\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t311\tPset_FastenerRailWeld\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5a1840db-8d01-4715-a4d4-9fa3c30e8e25\tPset_FastenerRailWeld.AssemblyPlace\tTEXT\t\t311\t1\tPEnum_AssemblyPlace\t1\nPARAM\tbb144407-1d9e-4f99-8713-32b30b9df053\tPset_FastenerRailWeld.IsLiftingBracket\tYESNO\t\t311\t1\tIfcBoolean\t1\nPARAM\t47af7706-bccd-4c02-ab85-2898930a98b9\tPset_FastenerRailWeld.JointRelativePosition\tTEXT\t\t311\t1\tPEnum_RelativePosition\t1\nPARAM\t91055e8f-e0f2-4065-9923-96e154ba899c\tPset_FastenerRailWeld.TemperatureDuringInstallation\tNUMBER\t\t311\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t312\tPset_FastenerWeld\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teacede00-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.a\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf3271900-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.c\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf9b59080-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.d\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf96e603b-52f3-4597-9f32-21154b8597b8\tPset_FastenerWeld.DeepPenetrationThroatThickness\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t00dc9e80-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.e\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t21a4f400-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Intermittent\tYESNO\t\t312\t1\tIfcBoolean\t1\nPARAM\t076b1600-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.l\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0e922400-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.n\tINTEGER\t\t312\t1\tIfcCountMeasure\t1\nPARAM\t8edd5eef-a911-46d3-b2b9-cc6d0e08ee84\tPset_FastenerWeld.NominalThroatThickness\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t50446966-6aa0-4ebf-aec8-6b3cc3a9483c\tPset_FastenerWeld.NumberOfWeldElements\tINTEGER\t\t312\t1\tIfcCountMeasure\t1\nPARAM\tdf7bb280-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Process\tINTEGER\t\t312\t1\tIfcInteger\t1\nPARAM\te4d8fd00-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.ProcessName\tTEXT\t\t312\t1\tIfcLabel\t1\nPARAM\t1356d800-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.s\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t28336b80-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Staggered\tYESNO\t\t312\t1\tIfcBoolean\t1\nPARAM\td25ec380-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Surface1\tTEXT\t\t312\t1\tIfcLabel\t1\nPARAM\td854a480-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Surface2\tTEXT\t\t312\t1\tIfcLabel\t1\nPARAM\tc541d480-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Type1\tTEXT\t\t312\t1\tIfcLabel\t1\nPARAM\tcc68e280-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Type2\tTEXT\t\t312\t1\tIfcLabel\t1\nPARAM\tbe86ffa5-619e-444a-8d47-213b31f9b51f\tPset_FastenerWeld.WeldDiameter\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf37bab1d-52c5-4f9d-aa0d-c91c9cc40618\tPset_FastenerWeld.WeldElementLength\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta1e159a0-9908-4716-a6b9-be11b984e478\tPset_FastenerWeld.WeldElementSpacing\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta88a619d-268d-4868-9a22-bbedbfe1c6b9\tPset_FastenerWeld.WeldLegLength\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdfbc7973-6b32-4ee2-a7c0-962663982e08\tPset_FastenerWeld.WeldWidth\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1a7de600-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.z\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t313\tPset_FenderCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbea1cb34-2c8a-4f8a-95ad-366d069cf241\tPset_FenderCommon.CoefficientOfFriction\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta30a110c-4ab9-4d96-802e-b37f825c0460\tPset_FenderCommon.EnergyAbsorption\tNUMBER\t\t313\t1\tIfcEnergyMeasure\t1\nPARAM\t7b0b17dd-5a5c-474a-a77d-02e06dcaea5f\tPset_FenderCommon.EnergyAbsorptionTolerance\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc6e27602-48f9-497b-95a0-8ae30fd86c2d\tPset_FenderCommon.FenderType\tTEXT\t\t313\t1\tPEnum_FenderType\t1\nPARAM\t98e84b16-79af-4b0b-a18a-8a57f755f9a3\tPset_FenderCommon.MaximumTemperatureFactor\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t88bfd9f1-d3ae-4d10-b2f5-3747b8a248bc\tPset_FenderCommon.MaxReaction\tNUMBER\t\t313\t1\tIfcForceMeasure\t1\nPARAM\t44fd1407-6bcb-4c8a-b61e-9e7613e909df\tPset_FenderCommon.MaxReactionTolerance\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t8d1d392e-435c-4975-b58b-63df1aac8ce6\tPset_FenderCommon.MinimumTemperatureFactor\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tbebca621-e57c-48fc-896f-3eeaed7c13f2\tPset_FenderCommon.VelocityFactorEnergy\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t9e5f5394-521b-4f02-8281-6d1642dae50e\tPset_FenderCommon.VelocityFactorReaction\tNUMBER\t\t313\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t314\tPset_FenderDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0bc1b254-8933-49a5-b576-aa22fc03cd88\tPset_FenderDesignCriteria.AddedMassCoefficientMethod\tTEXT\t\t314\t1\tPEnum_AddedMassCoefficientMethod\t1\nPARAM\tea54c993-0f31-44bf-bba0-6511954dc4b8\tPset_FenderDesignCriteria.CoefficientOfFriction\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t42f97396-f6f3-422a-8e9d-e9f4ca7a4d09\tPset_FenderDesignCriteria.EnergyAbsorption\tNUMBER\t\t314\t1\tIfcEnergyMeasure\t1\nPARAM\taf643b79-efd4-436b-8b19-a8e8c662c051\tPset_FenderDesignCriteria.EnergyAbsorptionTolerance\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0fcd1eee-4e12-4925-8460-02eada2c3ed5\tPset_FenderDesignCriteria.MaximumTemperatureFactor\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6b3d7090-bdd9-46a7-8afa-99f7d5de1bf7\tPset_FenderDesignCriteria.MaxReaction\tNUMBER\t\t314\t1\tIfcForceMeasure\t1\nPARAM\t0067495b-6131-4e68-8b45-77f04120d550\tPset_FenderDesignCriteria.MaxReactionTolerance\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf3f203df-bce5-49b3-a5d0-dd0985974a21\tPset_FenderDesignCriteria.MinCompressedFenderHeight\tLENGTH\t\t314\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcdcb62ce-4e0c-4a2a-8198-59da5d12e7fa\tPset_FenderDesignCriteria.MinimumTemperatureFactor\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1076a3ea-2681-4683-abd3-019023df74ef\tPset_FenderDesignCriteria.VelocityFactorEnergy\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t86c3b411-3a64-48e8-8af8-feba08fe7fea\tPset_FenderDesignCriteria.VelocityFactorReaction\tNUMBER\t\t314\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t315\tPset_FilterPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t35505a80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterPHistory.CountedEfficiency\tMULTILINETEXT\t\t315\t1\tIfcTimeSeries\t1\nPARAM\t3c776880-d1e5-11e1-8000-00215ad4efdf\tPset_FilterPHistory.ParticleMassHolding\tMULTILINETEXT\t\t315\t1\tIfcTimeSeries\t1\nPARAM\t397c7800-d1e5-11e1-8000-00215ad4efdf\tPset_FilterPHistory.WeightedEfficiency\tMULTILINETEXT\t\t315\t1\tIfcTimeSeries\t1\n#\nGROUP\t316\tPset_FilterTypeAirParticleFilter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4731fd80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.AirParticleFilterType\tTEXT\t\t316\t1\tPEnum_FilterAirParticleFilterType\t1\nPARAM\t9a0bb500-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.CountedEfficiencyCurve\tMULTILINETEXT\t\t316\t1\tPropertyTableValue\t1\nPARAM\t747eab80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.DustHoldingCapacity\tNUMBER\t\t316\t1\tIfcMassMeasure\t1\nPARAM\t79435f80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.FaceSurfaceArea\tAREA\t\t316\t1\tIfcAreaMeasure\t1\nPARAM\t63359f00-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.FrameMaterial\tMULTILINETEXT\t\t316\t1\tIfcMaterialDefinition\t1\nPARAM\t7fd1d700-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.MediaExtendedArea\tAREA\t\t316\t1\tIfcAreaMeasure\t1\nPARAM\td87df833-d4df-4201-9205-e0cb35d80173\tPset_FilterTypeAirParticleFilter.MediaMaterial\tMULTILINETEXT\t\t316\t1\tIfcMaterial\t1\nPARAM\t852f2180-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.NominalCountedEfficiency\tNUMBER\t\t316\t1\tIfcReal\t1\nPARAM\t8a8c6c00-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.NominalWeightedEfficiency\tNUMBER\t\t316\t1\tIfcReal\t1\nPARAM\t8fe9b680-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.PressureDropCurve\tMULTILINETEXT\t\t316\t1\tPropertyTableValue\t1\nPARAM\t66308f80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.SeparationType\tTEXT\t\t316\t1\tPEnum_FilterAirParticleFilterSeparationType\t1\nPARAM\ta5f77700-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.WeightedEfficiencyCurve\tMULTILINETEXT\t\t316\t1\tPropertyTableValue\t1\n#\nGROUP\t317\tPset_FilterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td808d900-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.FinalResistance\tNUMBER\t\t317\t1\tIfcPressureMeasure\t1\nPARAM\te3f49b00-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.FlowRateRange\tMULTILINETEXT\t\t317\t1\tPropertyBoundedValue\t1\nPARAM\td212f800-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.InitialResistance\tNUMBER\t\t317\t1\tIfcPressureMeasure\t1\nPARAM\t2d8fa950-b4da-42a6-b8b4-09245e38cabf\tPset_FilterTypeCommon.MediaMaterial\tMULTILINETEXT\t\t317\t1\tIfcMaterial\t1\nPARAM\tea831280-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.NominalFilterFaceVelocity\tNUMBER\t\t317\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tf8389800-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.NominalFlowrate\tNUMBER\t\t317\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\teeaf3000-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.NominalMediaSurfaceVelocity\tNUMBER\t\t317\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tfd95e280-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.NominalParticleGeometricMeanDiameter\tLENGTH\t\t317\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t02f32d00-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.NominalParticleGeometricStandardDeviation\tNUMBER\t\t317\t1\tIfcReal\t1\nPARAM\tf2db4d80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.NominalPressureDrop\tNUMBER\t\t317\t1\tIfcPressureMeasure\t1\nPARAM\tdd662380-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.OperationTemperatureRange\tMULTILINETEXT\t\t317\t1\tPropertyBoundedValue\t1\nPARAM\tb60f5680-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.Reference\tTEXT\t\t317\t1\tIfcIdentifier\t1\nPARAM\tbb6ca100-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.Status\tTEXT\t\t317\t1\tPEnum_ElementStatus\t1\nPARAM\tccb5ad80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.Weight\tNUMBER\t\t317\t1\tIfcMassMeasure\t1\n#\nGROUP\t318\tPset_FilterTypeCompressedAirFilter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t25854600-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeCompressedAirFilter.AutomaticCondensateDischarge\tYESNO\t\t318\t1\tIfcBoolean\t1\nPARAM\t2ae29080-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeCompressedAirFilter.CloggingIndicator\tYESNO\t\t318\t1\tIfcBoolean\t1\nPARAM\t0c7c9500-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeCompressedAirFilter.CompressedAirFilterType\tTEXT\t\t318\t1\tPEnum_CompressedAirFilterType\t1\nPARAM\t17cfc080-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeCompressedAirFilter.OperationPressureMax\tNUMBER\t\t318\t1\tIfcPressureMeasure\t1\nPARAM\t1bfbde00-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeCompressedAirFilter.ParticleAbsorptionCurve\tMULTILINETEXT\t\t318\t1\tPropertyTableValue\t1\n#\nGROUP\t319\tPset_FilterTypeWaterFilter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t35048f00-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeWaterFilter.WaterFilterType\tTEXT\t\t319\t1\tPEnum_FilterWaterFilterType\t1\n#\nGROUP\t320\tPset_FireRatingProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf61421bd-e86a-4858-9740-b270db3253a2\tPset_FireRatingProperties.FireResistanceRating\tTEXT\t\t320\t1\tIfcLabel\t1\nPARAM\t3c5f0105-5863-426c-9fa8-a13f872d2c7d\tPset_FireRatingProperties.IsCombustible\tYESNO\t\t320\t1\tIfcBoolean\t1\nPARAM\t3dfc6063-3fa3-45a6-ad59-9c39cda570f5\tPset_FireRatingProperties.SurfaceSpreadOfFlame\tTEXT\t\t320\t1\tIfcLabel\t1\n#\nGROUP\t321\tPset_FireSuppressionTerminalTypeBreechingInlet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t49488c00-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeBreechingInlet.BreechingInletType\tTEXT\t\t321\t1\tPEnum_BreechingInletType\t1\nPARAM\t5ebdb600-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeBreechingInlet.CouplingType\tTEXT\t\t321\t1\tPEnum_BreechingInletCouplingType\t1\nPARAM\t6a10e180-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeBreechingInlet.HasCaps\tYESNO\t\t321\t1\tIfcBoolean\t1\nPARAM\t54032100-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeBreechingInlet.InletDiameter\tLENGTH\t\t321\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t239e763a-5d2c-4f78-993c-ca3572671447\tPset_FireSuppressionTerminalTypeBreechingInlet.Material\tMULTILINETEXT\t\t321\t1\tIfcMaterial\t1\nPARAM\t59606b80-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeBreechingInlet.OutletDiameter\tLENGTH\t\t321\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t322\tPset_FireSuppressionTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t739a4980-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeCommon.Reference\tTEXT\t\t322\t1\tIfcIdentifier\t1\nPARAM\t785efd80-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeCommon.Status\tTEXT\t\t322\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t323\tPset_FireSuppressionTerminalTypeFireHydrant\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbbb96c00-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.BodyColor\tTEXT\t\t323\t1\tIfcText\t1\nPARAM\t79ccd52e-6b7f-4e17-aa5a-370ad0297725\tPset_FireSuppressionTerminalTypeFireHydrant.BodyColour\tTEXT\t\t323\t1\tIfcText\t1\nPARAM\tc07e2000-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.CapColor\tTEXT\t\t323\t1\tIfcText\t1\nPARAM\t91e09372-dcf0-418f-8e76-f71899417276\tPset_FireSuppressionTerminalTypeFireHydrant.CapColour\tTEXT\t\t323\t1\tIfcText\t1\nPARAM\ta5abab80-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.DischargeFlowRate\tNUMBER\t\t323\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t8a40a080-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.FireHydrantType\tTEXT\t\t323\t1\tPEnum_FireHydrantType\t1\nPARAM\taa705f80-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.FlowClass\tTEXT\t\t323\t1\tIfcLabel\t1\nPARAM\t9fb5ca80-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.HoseConnectionSize\tLENGTH\t\t323\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9af11680-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.NumberOfHoseConnections\tINTEGER\t\t323\t1\tIfcCountMeasure\t1\nPARAM\tb65c2180-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.PressureRating\tNUMBER\t\t323\t1\tIfcPressureMeasure\t1\nPARAM\t94629f00-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.PumperConnectionSize\tLENGTH\t\t323\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb0fed700-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.WaterIsPotable\tYESNO\t\t323\t1\tIfcBoolean\t1\n#\nGROUP\t324\tPset_FireSuppressionTerminalTypeHoseReel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t10f57d80-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.ClassificationAuthority\tTEXT\t\t324\t1\tIfcLabel\t1\nPARAM\t0935d900-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.ClassOfService\tTEXT\t\t324\t1\tIfcLabel\t1\nPARAM\teefbfb00-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.HoseDiameter\tLENGTH\t\t324\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf58a7280-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.HoseLength\tLENGTH\t\t324\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfc18ea00-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.HoseNozzleType\tTEXT\t\t324\t1\tPEnum_HoseNozzleType\t1\nPARAM\td986d100-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.HoseReelMountingType\tTEXT\t\t324\t1\tPEnum_HoseReelMountingType\t1\nPARAM\tcc69e200-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.HoseReelType\tTEXT\t\t324\t1\tPEnum_HoseReelType\t1\nPARAM\te9061a00-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.InletConnectionSize\tLENGTH\t\t324\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t325\tPset_FireSuppressionTerminalTypeSprinkler\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t31bdd300-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.Activation\tTEXT\t\t325\t1\tPEnum_SprinklerActivation\t1\nPARAM\t47cb9380-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.ActivationTemperature\tNUMBER\t\t325\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t59ad3680-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.BulbLiquidColor\tTEXT\t\t325\t1\tPEnum_SprinklerBulbLiquidColor\t1\nPARAM\tcf0f74a2-dc99-424c-b0a6-739e27b80a58\tPset_FireSuppressionTerminalTypeSprinkler.BulbLiquidColour\tTEXT\t\t325\t1\tPEnum_SprinklerBulbLiquidColour\t1\nPARAM\t83665d80-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.ConnectionSize\tLENGTH\t\t325\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4d28de00-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.CoverageArea\tAREA\t\t325\t1\tIfcAreaMeasure\t1\nPARAM\te33b64e5-6d99-4e25-9c41-a3110af59a87\tPset_FireSuppressionTerminalTypeSprinkler.DeflectorMaterial\tMULTILINETEXT\t\t325\t1\tIfcMaterial\t1\nPARAM\t78133200-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.DischargeCoefficient\tNUMBER\t\t325\t1\tIfcReal\t1\nPARAM\t6cc00680-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.DischargeFlowRate\tNUMBER\t\t325\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t2906b840-d09b-43d8-b9af-a78ca056b5df\tPset_FireSuppressionTerminalTypeSprinkler.FrameMaterial\tMULTILINETEXT\t\t325\t1\tIfcMaterial\t1\nPARAM\t531ebf00-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.HasDeflector\tYESNO\t\t325\t1\tIfcBoolean\t1\nPARAM\t7d707c80-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.MaximumWorkingPressure\tNUMBER\t\t325\t1\tIfcPressureMeasure\t1\nPARAM\t721d5100-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.ResidualFlowingPressure\tNUMBER\t\t325\t1\tIfcPressureMeasure\t1\nPARAM\t3da99500-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.Response\tTEXT\t\t325\t1\tPEnum_SprinklerResponse\t1\nPARAM\t1d79d600-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.SprinklerType\tTEXT\t\t325\t1\tPEnum_SprinklerType\t1\n#\nGROUP\t326\tPset_FittingBend\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tba290c63-0fc5-4194-85ac-1ec0d53d2425\tPset_FittingBend.BendAngle\tANGLE\t\t326\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t9c37e6d5-d68c-4ee1-adce-9ddb9a7ff53c\tPset_FittingBend.BendRadius\tLENGTH\t\t326\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t327\tPset_FittingJunction\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8fcf24cb-0a89-41ef-b17c-c5f415f76cc6\tPset_FittingJunction.JunctionLeftAngle\tANGLE\t\t327\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\tb2d0dd7c-7c21-400e-8508-dbabf72a5b3f\tPset_FittingJunction.JunctionLeftRadius\tLENGTH\t\t327\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td4ba7a30-beba-48c3-85c5-21d7b7943151\tPset_FittingJunction.JunctionRightAngle\tANGLE\t\t327\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\td3288944-7780-4cba-b190-56f06724219e\tPset_FittingJunction.JunctionRightRadius\tLENGTH\t\t327\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t186d14b2-66ce-4b28-b06f-1e0d354c2dcc\tPset_FittingJunction.JunctionType\tTEXT\t\t327\t1\tPEnum_FittingJunctionType\t1\n#\nGROUP\t328\tPset_FittingTransition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t67babd62-4fbd-4917-acfd-edc239112155\tPset_FittingTransition.EccentricityInY\tLENGTH\t\t328\t1\tIfcLengthMeasure\t1\nPARAM\t00be5990-6233-44ae-809e-64264294f98b\tPset_FittingTransition.EccentricityInZ\tLENGTH\t\t328\t1\tIfcLengthMeasure\t1\nPARAM\tc537859f-ac00-46e0-96a3-8e1db7782b2d\tPset_FittingTransition.NominalLength\tLENGTH\t\t328\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t329\tPset_FlowControllerDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t34728afc-bb21-4431-ab94-888e2c145c5c\tPset_FlowControllerDamper.SizingMethod\tTEXT\t\t329\t1\tPEnum_DamperSizingMethod\t1\n#\nGROUP\t330\tPset_FlowControllerFlowMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t44a680ad-37a5-4031-bab8-59c8405cb22f\tPset_FlowControllerFlowMeter.Purpose\tTEXT\t\t330\t1\tPEnum_FlowMeterPurpose\t1\n#\nGROUP\t331\tPset_FlowFittingDuctFitting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t08f5535e-60d1-4669-acd0-3d5b84a8c338\tPset_FlowFittingDuctFitting.AbsoluteRoughnessFactor\tLENGTH\t\t331\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td7260ab3-ff92-4f26-ab4b-a0ae27f9ab98\tPset_FlowFittingDuctFitting.Color\tTEXT\t\t331\t1\tIfcLabel\t1\nPARAM\t329e0f04-c933-4e71-925a-a8ac7e59fb92\tPset_FlowFittingDuctFitting.HasLiner\tYESNO\t\t331\t1\tIfcBoolean\t1\n#\nGROUP\t332\tPset_FlowFittingPipeFitting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te2c6476a-fe35-4b85-aa2a-11cc0d8e8675\tPset_FlowFittingPipeFitting.Color\tTEXT\t\t332\t1\tIfcLabel\t1\nPARAM\t8856a008-4ba8-41f8-b54e-740959a1e9bb\tPset_FlowFittingPipeFitting.InteriorRoughnessCoefficient\tLENGTH\t\t332\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t333\tPset_FlowInstrumentPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t94af6a00-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentPHistory.Quality\tMULTILINETEXT\t\t333\t1\tIfcTimeSeries\t1\nPARAM\t97aa5a80-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentPHistory.Status\tMULTILINETEXT\t\t333\t1\tIfcTimeSeries\t1\nPARAM\t90834c80-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentPHistory.Value\tMULTILINETEXT\t\t333\t1\tIfcTimeSeries\t1\n#\nGROUP\t334\tPset_FlowInstrumentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta133c280-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentTypeCommon.Reference\tTEXT\t\t334\t1\tIfcIdentifier\t1\nPARAM\ta6910d00-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentTypeCommon.Status\tTEXT\t\t334\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t335\tPset_FlowInstrumentTypePressureGauge\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcaece980-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentTypePressureGauge.DisplaySize\tLENGTH\t\t335\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbc9ecd80-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentTypePressureGauge.PressureGaugeType\tTEXT\t\t335\t1\tPEnum_PressureGaugeType\t1\n#\nGROUP\t336\tPset_FlowInstrumentTypeThermometer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te5bf5e00-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentTypeThermometer.DisplaySize\tLENGTH\t\t336\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td7714200-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentTypeThermometer.ThermometerType\tTEXT\t\t336\t1\tPEnum_ThermometerType\t1\n#\nGROUP\t337\tPset_FlowMeterOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taba0010e-d665-4fe3-a3f7-8579df3462f8\tPset_FlowMeterOccurrence.FlowMeterOurpose\tTEXT\t\t337\t1\tPEnum_FlowMeterPurpose\t1\nPARAM\tf374e380-d1e7-11e1-8000-00215ad4efdf\tPset_FlowMeterOccurrence.Purpose\tTEXT\t\t337\t1\tPEnum_FlowMeterPurpose\t1\n#\nGROUP\t338\tPset_FlowMeterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6cf99e4f-a821-45ec-b0fa-6fb483cebef5\tPset_FlowMeterTypeCommon.IsMain\tYESNO\t\t338\t1\tIfcBoolean\t1\nPARAM\t1bfcdd80-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeCommon.ReadOutType\tTEXT\t\t338\t1\tPEnum_MeterReadOutType\t1\nPARAM\t07204a00-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeCommon.Reference\tTEXT\t\t338\t1\tIfcIdentifier\t1\nPARAM\t2a4af980-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeCommon.RemoteReading\tYESNO\t\t338\t1\tIfcBoolean\t1\nPARAM\t0d162b00-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeCommon.Status\tTEXT\t\t338\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t339\tPset_FlowMeterTypeEnergyMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8e052728-f2a3-4f31-ad69-ff29f047cd98\tPset_FlowMeterTypeEnergyMeter.ConnectionSize\tLENGTH\t\t339\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3afb6f80-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeEnergyMeter.MaximumCurrent\tNUMBER\t\t339\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t4058ba00-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeEnergyMeter.MultipleTarriff\tYESNO\t\t339\t1\tIfcBoolean\t1\nPARAM\t3636bb80-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeEnergyMeter.NominalCurrent\tNUMBER\t\t339\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t340\tPset_FlowMeterTypeGasMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5c5c5b80-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeGasMeter.ConnectionSize\tLENGTH\t\t340\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4cdd1280-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeGasMeter.GasType\tTEXT\t\t340\t1\tPEnum_GasType\t1\nPARAM\t641c0000-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeGasMeter.MaximumFlowRate\tNUMBER\t\t340\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t68e0b400-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeGasMeter.MaximumPressureLoss\tNUMBER\t\t340\t1\tIfcPressureMeasure\t1\n#\nGROUP\t341\tPset_FlowMeterTypeOilMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t75650c80-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeOilMeter.ConnectionSize\tLENGTH\t\t341\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7bf38400-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeOilMeter.MaximumFlowRate\tNUMBER\t\t341\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t342\tPset_FlowMeterTypeWaterMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta47b7e00-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeWaterMeter.BackflowPreventerType\tTEXT\t\t342\t1\tPEnum_BackflowPreventerType\t1\nPARAM\t93327180-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeWaterMeter.ConnectionSize\tLENGTH\t\t342\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t99c0e900-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeWaterMeter.MaximumFlowRate\tNUMBER\t\t342\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t9fb6ca00-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeWaterMeter.MaximumPressureLoss\tNUMBER\t\t342\t1\tIfcPressureMeasure\t1\nPARAM\t87df4600-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeWaterMeter.Type\tTEXT\t\t342\t1\tPEnum_WaterMeterType\t1\n#\nGROUP\t343\tPset_FlowMovingDeviceCompressor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te9a42743-0032-4f7f-ae40-a442097e034a\tPset_FlowMovingDeviceCompressor.ImpellerDiameter\tLENGTH\t\t343\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t344\tPset_FlowMovingDeviceFan\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t67a7e91e-d253-4431-929e-a4e43cd4848e\tPset_FlowMovingDeviceFan.ApplicationOfFan\tTEXT\t\t344\t1\tPEnum_FanApplicationType\t1\nPARAM\tcbafd0d3-8566-4765-a35c-580445f76c03\tPset_FlowMovingDeviceFan.CoilPosition\tTEXT\t\t344\t1\tPEnum_FanCoilPosition\t1\nPARAM\t97fac63f-e5d0-4396-b0a8-4d6137e7f970\tPset_FlowMovingDeviceFan.DischargeType\tTEXT\t\t344\t1\tPEnum_FanDischargeType\t1\nPARAM\tfc8a5391-c1e8-44cd-ab54-d0b7687197f6\tPset_FlowMovingDeviceFan.FanMountingType\tTEXT\t\t344\t1\tPEnum_FanMountingType\t1\nPARAM\t62c05fb7-1fb5-4371-892f-96249005255a\tPset_FlowMovingDeviceFan.FractionOfMotorHeatToAirStream\tNUMBER\t\t344\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1f58766a-df5f-43fd-bb53-960c133d0e35\tPset_FlowMovingDeviceFan.ImpellerDiameter\tLENGTH\t\t344\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3f428838-8353-4b98-8d54-685af11717c0\tPset_FlowMovingDeviceFan.MotorPosition\tTEXT\t\t344\t1\tPEnum_FanMotorPosition\t1\n#\nGROUP\t345\tPset_FlowMovingDeviceFanCentrifugal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8178046f-4537-4b7d-846a-80f0156dad1a\tPset_FlowMovingDeviceFanCentrifugal.Arrangement\tTEXT\t\t345\t1\tPEnum_CentrifugalFanArrangement\t1\nPARAM\t6c60ccde-1ae3-402f-9272-461f2bae4f95\tPset_FlowMovingDeviceFanCentrifugal.DirectionOfRotation\tTEXT\t\t345\t1\tPEnum_CentrifugalFanRotation\t1\nPARAM\t3c4009e3-042f-4721-b9c9-d4f9398ef768\tPset_FlowMovingDeviceFanCentrifugal.DischargePosition\tTEXT\t\t345\t1\tPEnum_CentrifugalFanDischargePosition\t1\n#\nGROUP\t346\tPset_FlowMovingDevicePump\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5ae99c23-b67e-4be8-b1f0-cf402f2a6271\tPset_FlowMovingDevicePump.BaseType\tTEXT\t\t346\t1\tPEnum_PumpBaseType\t1\nPARAM\t75e6c2a8-14e2-40b8-9b24-2557a0f9a950\tPset_FlowMovingDevicePump.DriveConnectionType\tTEXT\t\t346\t1\tPEnum_PumpDriveConnectionType\t1\nPARAM\t0782cb57-417a-49c0-b790-2e6c919398cf\tPset_FlowMovingDevicePump.ImpellerDiameter\tLENGTH\t\t346\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t347\tPset_FlowSegmentDuctSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t98976b1c-476e-4f40-8fdb-75d1f41ba042\tPset_FlowSegmentDuctSegment.Color\tTEXT\t\t347\t1\tIfcLabel\t1\nPARAM\t75f995f8-781b-4b95-af6d-951635b7d563\tPset_FlowSegmentDuctSegment.HasLiner\tYESNO\t\t347\t1\tIfcBoolean\t1\nPARAM\t1ce212f1-fd70-490e-992d-47ea8fc67a91\tPset_FlowSegmentDuctSegment.InteriorRoughnessCoefficient\tLENGTH\t\t347\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0ff789c2-779e-4ff1-9d9c-238add60ef69\tPset_FlowSegmentDuctSegment.Length\tLENGTH\t\t347\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ted76ad9f-69e6-4674-803d-0fef9737be19\tPset_FlowSegmentDuctSegment.MaterialThickness\tLENGTH\t\t347\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t348\tPset_FlowSegmentPipeSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td95943a0-769f-45e2-a279-f91b53be635d\tPset_FlowSegmentPipeSegment.Color\tTEXT\t\t348\t1\tIfcLabel\t1\nPARAM\t6605c902-34ec-40ff-8dc4-79a626ca89d9\tPset_FlowSegmentPipeSegment.Gradient\tNUMBER\t\t348\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t3ac4a6ff-05a7-4f46-9123-2ac76975548a\tPset_FlowSegmentPipeSegment.InteriorRoughnessCoefficient\tLENGTH\t\t348\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8fe4dfdd-d739-4413-a63b-bf277059a44e\tPset_FlowSegmentPipeSegment.InvertElevation\tLENGTH\t\t348\t1\tIfcLengthMeasure\t1\nPARAM\t3cbaf1a8-fe4d-4cda-9971-bd6c3c0bbb52\tPset_FlowSegmentPipeSegment.Length\tLENGTH\t\t348\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t349\tPset_FlowStorageDeviceTank\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4ab87301-e0af-4316-b4c5-2849f97171e0\tPset_FlowStorageDeviceTank.HasLadder\tYESNO\t\t349\t1\tIfcBoolean\t1\nPARAM\t24c53a30-367e-4ca3-b79f-df61e81d244b\tPset_FlowStorageDeviceTank.HasVisualIndicator\tYESNO\t\t349\t1\tIfcBoolean\t1\nPARAM\t2469b872-24c0-4a4c-85ab-1fab8d82981b\tPset_FlowStorageDeviceTank.TankComposition\tTEXT\t\t349\t1\tPEnum_TankComposition\t1\n#\nGROUP\t350\tPset_FlowTerminalAirTerminal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7c391f45-4e72-4009-ae06-685edc001bcf\tPset_FlowTerminalAirTerminal.AirflowType\tTEXT\t\t350\t1\tPEnum_AirTerminalAirflowType\t1\nPARAM\tae0d835b-4320-427c-b7a4-f6df20fe5a43\tPset_FlowTerminalAirTerminal.Location\tTEXT\t\t350\t1\tPEnum_AirTerminalLocation\t1\n#\nGROUP\t351\tPset_FootingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t43b97312-26b0-4190-b668-d0c68f6ce88c\tPset_FootingCommon.LoadBearing\tYESNO\t\t351\t1\tIfcBoolean\t1\nPARAM\tbd842f00-d1e8-11e1-8000-00215ad4efdf\tPset_FootingCommon.Reference\tTEXT\t\t351\t1\tIfcIdentifier\t1\nPARAM\tadd19c59-b07f-4f5d-b87f-60e3bbe18ce0\tPset_FootingCommon.Status\tTEXT\t\t351\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t352\tPset_FootingTypePadFooting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc3d16931-5f7e-41af-8d42-6c02782c6e16\tPset_FootingTypePadFooting.IsReinforced\tYESNO\t\t352\t1\tIfcBoolean\t1\nPARAM\t4d61a7b5-165e-4330-a98a-7efb5f8440ac\tPset_FootingTypePadFooting.LoadBearingCapacity\tNUMBER\t\t352\t1\tIfcPlanarForceMeasure\t1\n#\nGROUP\t353\tPset_FurnitureTypeChair\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td096ff00-d1e8-11e1-8000-00215ad4efdf\tPset_FurnitureTypeChair.HighestSeatingHeight\tLENGTH\t\t353\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te0164800-d1e8-11e1-8000-00215ad4efdf\tPset_FurnitureTypeChair.LowestSeatingHeight\tLENGTH\t\t353\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcaa11e00-d1e8-11e1-8000-00215ad4efdf\tPset_FurnitureTypeChair.SeatingHeight\tLENGTH\t\t353\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t354\tPset_FurnitureTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te8aa7f83-795a-441e-bd72-bc8ec0f13ea2\tPset_FurnitureTypeCommon.Description\tTEXT\t\t354\t1\tIfcText\t1\nPARAM\t1fdd2f80-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeCommon.IsBuiltIn\tYESNO\t\t354\t1\tIfcBoolean\t1\nPARAM\t19e74e80-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeCommon.MainColor\tTEXT\t\t354\t1\tIfcLabel\t1\nPARAM\t7ca54290-d121-412c-b902-7512a009450a\tPset_FurnitureTypeCommon.MainColour\tTEXT\t\t354\t1\tIfcLabel\t1\nPARAM\t118f1380-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeCommon.NominalDepth\tLENGTH\t\t354\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t00460700-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeCommon.NominalHeight\tLENGTH\t\t354\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t076d1500-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeCommon.NominalLength\tLENGTH\t\t354\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tc67404c9-010c-4f04-a3d3-f31eb6a4d813\tPset_FurnitureTypeCommon.Reference\tTEXT\t\t354\t1\tIfcIdentifier\t1\nPARAM\t7334640e-af39-43b9-acb2-ae43ea34a47d\tPset_FurnitureTypeCommon.Status\tTEXT\t\t354\t1\tPEnum_ElementStatus\t1\nPARAM\tf7553580-d1e8-11e1-8000-00215ad4efdf\tPset_FurnitureTypeCommon.Style\tTEXT\t\t354\t1\tIfcLabel\t1\n#\nGROUP\t355\tPset_FurnitureTypeDesk\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2cfa1e80-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeDesk.WorksurfaceArea\tAREA\t\t355\t1\tIfcAreaMeasure\t1\n#\nGROUP\t356\tPset_FurnitureTypeFileCabinet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t38e5e080-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeFileCabinet.WithLock\tYESNO\t\t356\t1\tIfcBoolean\t1\n#\nGROUP\t357\tPset_FurnitureTypeTable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4bf8b080-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeTable.NumberOfChairs\tINTEGER\t\t357\t1\tIfcCountMeasure\t1\nPARAM\t469b6600-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeTable.WorksurfaceArea\tAREA\t\t357\t1\tIfcAreaMeasure\t1\n#\nGROUP\t358\tPset_GasTerminalPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t21c84d28-9c1f-4659-89f6-ba96be133f51\tPset_GasTerminalPHistory.GasFlowRate\tNUMBER\t\t358\t1\tIfcReal\t1\n#\nGROUP\t359\tPset_GasTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td6978a7b-284e-44e1-af3f-ff008a25ada6\tPset_GasTerminalTypeCommon.GasFlowRateRange\tMULTILINETEXT\t\t359\t1\tPropertyBoundedValue\t1\n#\nGROUP\t360\tPset_GasTerminalTypeGasAppliance\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tba3bd0e3-6b4f-47e5-8efa-4dc41be2510b\tPset_GasTerminalTypeGasAppliance.FlueType\tTEXT\t\t360\t1\tPEnum_FlueType\t1\nPARAM\tde95b8f0-20da-42de-bef8-cc9d8b21bddf\tPset_GasTerminalTypeGasAppliance.GasApplianceType\tTEXT\t\t360\t1\tPEnum_GasApplianceType\t1\n#\nGROUP\t361\tPset_GasTerminalTypeGasBurner\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8bd695cd-418e-4fb3-8137-e846280ddd81\tPset_GasTerminalTypeGasBurner.GasBurnerType\tTEXT\t\t361\t1\tPEnum_GasBurnerType\t1\n#\nGROUP\t362\tPset_GateHeadCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3689b0b9-38ed-4ebf-82ef-cd84b42ae3da\tPset_GateHeadCommon.StructuralType\tTEXT\t\t362\t1\tIfcLabel\t1\n#\nGROUP\t363\tPset_GeotechnicalAssemblyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a2830ee-9e26-4ba3-97b5-a1890a78a5a7\tPset_GeotechnicalAssemblyCommon.BoreHolePurpose\tTEXT\t\t363\t1\tPEnum_StrataAssemblyPurpose\t1\nPARAM\t498f6598-9c24-48c7-b39b-37c21eca3fbf\tPset_GeotechnicalAssemblyCommon.Limitations\tTEXT\t\t363\t1\tIfcText\t1\nPARAM\tb20abb64-5542-4b7d-86db-46c563d259ad\tPset_GeotechnicalAssemblyCommon.Methodology\tTEXT\t\t363\t1\tIfcText\t1\nPARAM\tdf77487c-c96a-40b8-9777-0d24e8fc6ba9\tPset_GeotechnicalAssemblyCommon.Status\tTEXT\t\t363\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t364\tPset_GeotechnicalStratumCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tacd41a5d-3999-467f-8912-bbd3089caadd\tPset_GeotechnicalStratumCommon.IsTopographic\tYESNO\t\t364\t1\tIfcLogical\t1\nPARAM\t14d79215-177d-4f1b-b0d7-c4242efebd36\tPset_GeotechnicalStratumCommon.PiezometricHead\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc739306e-8850-4b14-aac6-10969a4cd499\tPset_GeotechnicalStratumCommon.PiezometricPressure\tNUMBER\t\t364\t1\tIfcPressureMeasure\t1\nPARAM\t769c999a-b162-4c05-be8b-3f9a7ce83aba\tPset_GeotechnicalStratumCommon.Status\tTEXT\t\t364\t1\tPEnum_ElementStatus\t1\nPARAM\t5c6e9c5d-6758-4b61-ac0c-3c8fbfa0fbee\tPset_GeotechnicalStratumCommon.StratumColour\tTEXT\t\t364\t1\tIfcLabel\t1\nPARAM\t7c3c411d-a4d5-4b45-89e2-f73fd0ccc0b5\tPset_GeotechnicalStratumCommon.Texture\tTEXT\t\t364\t1\tIfcLabel\t1\n#\nGROUP\t365\tPset_HeatExchangerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t70ed2380-d1e9-11e1-8000-00215ad4efdf\tPset_HeatExchangerTypeCommon.Arrangement\tTEXT\t\t365\t1\tPEnum_HeatExchangerArrangement\t1\nPARAM\t44eaaef2-60eb-4af0-b179-72635320f79b\tPset_HeatExchangerTypeCommon.FlowArrangement\tTEXT\t\t365\t1\tPEnum_HeatExchangerArrangement\t1\nPARAM\t59ae3600-d1e9-11e1-8000-00215ad4efdf\tPset_HeatExchangerTypeCommon.Reference\tTEXT\t\t365\t1\tIfcIdentifier\t1\nPARAM\taafcf165-e874-4b40-b63f-b0967593d09c\tPset_HeatExchangerTypeCommon.ShellMaterial\tMULTILINETEXT\t\t365\t1\tIfcMaterial\t1\nPARAM\t5f0b8080-d1e9-11e1-8000-00215ad4efdf\tPset_HeatExchangerTypeCommon.Status\tTEXT\t\t365\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t366\tPset_HeatExchangerTypePlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8a8e6b00-d1e9-11e1-8000-00215ad4efdf\tPset_HeatExchangerTypePlate.NumberOfPlates\tINTEGER\t\t366\t1\tIfcCountMeasure\t1\n#\nGROUP\t367\tPset_HumidifierPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb2a1e457-ad11-489d-a5e5-2092a1797072\tPset_HumidifierPHistory.AirPressureDropCurve\tMULTILINETEXT\t\t367\t1\tPropertyTableValue\t1\nPARAM\t9843f080-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierPHistory.AtmosphericPressure\tMULTILINETEXT\t\t367\t1\tIfcTimeSeries\t1\nPARAM\ta7c33980-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierPHistory.SaturationEfficiency\tMULTILINETEXT\t\t367\t1\tIfcTimeSeries\t1\nPARAM\t1838efd6-0f99-4081-beed-5ff1d85dc278\tPset_HumidifierPHistory.SaturationEfficiencyCurve\tMULTILINETEXT\t\t367\t1\tPropertyTableValue\t1\n#\nGROUP\t368\tPset_HumidifierTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t11dbde80-d1ea-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.AirPressureDropCurve\tMULTILINETEXT\t\t368\t1\tPropertyTableValue\t1\nPARAM\tcaede900-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.Application\tTEXT\t\t368\t1\tPEnum_HumidifierApplication\t1\nPARAM\tb41fe9ed-8fc6-488f-a896-e5a26526e8b0\tPset_HumidifierTypeCommon.HumidifierApplication\tTEXT\t\t368\t1\tPEnum_HumidifierApplication\t1\nPARAM\te953e480-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.InternalControl\tTEXT\t\t368\t1\tPEnum_HumidifierInternalControl\t1\nPARAM\te1944000-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.NominalAirFlowRate\tNUMBER\t\t368\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tdc36f580-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.NominalMoistureGain\tNUMBER\t\t368\t1\tIfcMassFlowRateMeasure\t1\nPARAM\tb3166500-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.Reference\tTEXT\t\t368\t1\tIfcIdentifier\t1\nPARAM\t02f52c00-d1ea-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.SaturationEfficiencyCurve\tMULTILINETEXT\t\t368\t1\tPropertyTableValue\t1\nPARAM\tb90c4600-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.Status\tTEXT\t\t368\t1\tPEnum_ElementStatus\t1\nPARAM\tfcff4b00-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.WaterRequirement\tNUMBER\t\t368\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\td6d9ab00-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.Weight\tNUMBER\t\t368\t1\tIfcMassMeasure\t1\n#\nGROUP\t369\tPset_ImpactProtectionDeviceOccurrenceBumper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taebcd879-28fb-46c6-93ab-f4d6bad12bd6\tPset_ImpactProtectionDeviceOccurrenceBumper.BrakingLength\tLENGTH\t\t369\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9695e10a-8d3f-49f4-ad80-c2fe201d9cab\tPset_ImpactProtectionDeviceOccurrenceBumper.BumperOrientation\tTEXT\t\t369\t1\tPEnum_BumperOrientation\t1\nPARAM\tbd86a136-f4f5-49bc-9ca7-a97045731955\tPset_ImpactProtectionDeviceOccurrenceBumper.IsRemovableBumper\tYESNO\t\t369\t1\tIfcBoolean\t1\n#\nGROUP\t370\tPset_ImpactProtectionDeviceTypeBumper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t19985328-ac1f-4c61-8562-77fd58aab7c3\tPset_ImpactProtectionDeviceTypeBumper.EnergyAbsorption\tNUMBER\t\t370\t1\tIfcEnergyMeasure\t1\nPARAM\t1ffa8f02-2106-4fd0-9df1-82a4bd8d694f\tPset_ImpactProtectionDeviceTypeBumper.IsAbsorbingEnergy\tYESNO\t\t370\t1\tIfcBoolean\t1\nPARAM\t4539231d-4560-4a29-a7f9-ec0de4d85fef\tPset_ImpactProtectionDeviceTypeBumper.MaximumLoadRetention\tNUMBER\t\t370\t1\tIfcForceMeasure\t1\n#\nGROUP\t371\tPset_InstallationOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tca277e65-90f9-44b0-8859-2ce3abe148ff\tPset_InstallationOccurrence.AcceptanceDate\tTEXT\t\t371\t1\tIfcDate\t1\nPARAM\t0bcc9198-9599-4f08-83b4-ac431cee19fa\tPset_InstallationOccurrence.InstallationDate\tTEXT\t\t371\t1\tIfcDate\t1\nPARAM\t8f30c4cd-8612-4feb-a6c5-64cd624d3b24\tPset_InstallationOccurrence.PutIntoOperationDate\tTEXT\t\t371\t1\tIfcDate\t1\n#\nGROUP\t372\tPset_InterceptorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t697a4a00-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.CoverLength\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t71d28500-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.CoverWidth\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t59fb0100-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.InletConnectionSize\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t523b5c80-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.NominalBodyDepth\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t42bc1380-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.NominalBodyLength\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4a7bb800-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.NominalBodyWidth\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t62533c00-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.OutletConnectionSize\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2ae48f80-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.Reference\tTEXT\t\t372\t1\tIfcIdentifier\t1\nPARAM\t320b9d80-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.Status\tTEXT\t\t372\t1\tPEnum_ElementStatus\t1\nPARAM\t78f99300-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.VentilatingPipeSize\tLENGTH\t\t372\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t373\tPset_IpNetworkEquipmentPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t268275bd-bbaa-45c0-93b5-3ec87b0152d4\tPset_IpNetworkEquipmentPHistory.NumberOfPackets\tMULTILINETEXT\t\t373\t1\tIfcTimeSeries\t1\n#\nGROUP\t374\tPset_JettyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t16d17b60-d224-44ec-b0ae-c492290aeafc\tPset_JettyCommon.BentSpacing\tLENGTH\t\t374\t1\tIfcLengthMeasure\t1\nPARAM\t3697bca8-d998-49b7-b851-84d3b7f60cb4\tPset_JettyCommon.Elevation\tLENGTH\t\t374\t1\tIfcLengthMeasure\t1\nPARAM\t406d85f6-ae4f-4029-8e97-3d02b60de75e\tPset_JettyCommon.PierSectionType\tTEXT\t\t374\t1\tPEnum_SectionType\t1\nPARAM\t4faaaf73-877d-4948-9d70-1da228960919\tPset_JettyCommon.StructuralType\tTEXT\t\t374\t1\tIfcLabel\t1\n#\nGROUP\t375\tPset_JettyDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t483098f3-64ea-429f-a262-31f382c750d6\tPset_JettyDesignCriteria.EquipmentLoading\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\nPARAM\t0aede895-7ca6-41a2-8809-156616f39741\tPset_JettyDesignCriteria.ExtremeHighWaterLevel\tLENGTH\t\t375\t1\tIfcLengthMeasure\t1\nPARAM\t967a5dec-235d-4f53-8f6c-703664df169b\tPset_JettyDesignCriteria.ExtremeLowWaterLevel\tLENGTH\t\t375\t1\tIfcLengthMeasure\t1\nPARAM\t4e1858b9-360b-4d37-90bd-108e1e1f68c6\tPset_JettyDesignCriteria.FlowLoading\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\nPARAM\t752d2412-4dba-40ec-9f77-b3897230ac0b\tPset_JettyDesignCriteria.HighWaterLevel\tLENGTH\t\t375\t1\tIfcLengthMeasure\t1\nPARAM\t661e4f21-86c2-4ab1-8017-2a4df8375e40\tPset_JettyDesignCriteria.LowWaterLevel\tLENGTH\t\t375\t1\tIfcLengthMeasure\t1\nPARAM\te7434ddd-d193-42e8-b9ea-4ed84bbf483c\tPset_JettyDesignCriteria.ShipLoading\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\nPARAM\td05070e1-dea8-4bab-b86b-8d52682fe0f1\tPset_JettyDesignCriteria.UniformlyDistributedLoad\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\nPARAM\t35419ef8-5f54-49d0-86a4-caaea8dba730\tPset_JettyDesignCriteria.WaveLoading\tNUMBER\t\t375\t1\tIfcForceMeasure\t1\n#\nGROUP\t376\tPset_JunctionBoxTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta34b5080-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.ClearDepth\tLENGTH\t\t376\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te60d2880-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.IP_Code\tTEXT\t\t376\t1\tIfcLabel\t1\nPARAM\tdf7eb100-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.IsExternal\tYESNO\t\t376\t1\tIfcBoolean\t1\nPARAM\t2434d313-b408-48a1-b23a-3c9f1acdd9e7\tPset_JunctionBoxTypeCommon.JunctionBoxMountingType\tTEXT\t\t376\t1\tPEnum_JunctionBoxMountingType\t1\nPARAM\tcece3b00-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.MountingType\tTEXT\t\t376\t1\tPEnum_JunctionBoxMountingType\t1\nPARAM\tfcd0936b-c04b-4050-8044-4df1dec2dfef\tPset_JunctionBoxTypeCommon.NominalHeight\tLENGTH\t\t376\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tbd0895e4-2feb-484e-b83f-2cc40bd2fd96\tPset_JunctionBoxTypeCommon.NominalLength\tLENGTH\t\t376\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t4b0c9eb5-6824-44a4-bb3e-2b603bca8766\tPset_JunctionBoxTypeCommon.NominalWidth\tLENGTH\t\t376\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t9dee0600-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.NumberOfGangs\tINTEGER\t\t376\t1\tIfcCountMeasure\t1\nPARAM\tbeb65b80-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.PlacingType\tTEXT\t\t376\t1\tPEnum_JunctionBoxPlacingType\t1\nPARAM\t87e04580-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.Reference\tTEXT\t\t376\t1\tIfcIdentifier\t1\nPARAM\tae9e7c00-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.ShapeType\tTEXT\t\t376\t1\tPEnum_JunctionBoxShapeType\t1\nPARAM\t8dd62680-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.Status\tTEXT\t\t376\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t377\tPset_JunctionBoxTypeData\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8c4cfdec-1327-4768-b879-2889273db20f\tPset_JunctionBoxTypeData.DataConnectionType\tTEXT\t\t377\t1\tPEnum_DataConnectionType\t1\n#\nGROUP\t378\tPset_KerbCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb0afe276-2158-425b-a2a1-1da245c3a932\tPset_KerbCommon.CombinedKerbGutter\tYESNO\t\t378\t1\tIfcBoolean\t1\nPARAM\t7167f602-06ee-4700-a62d-e74cd2c192e7\tPset_KerbCommon.Mountable\tYESNO\t\t378\t1\tIfcBoolean\t1\nPARAM\t6c8ee9ac-57c3-4178-8852-36b070b60153\tPset_KerbCommon.Upstand\tLENGTH\t\t378\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t379\tPset_KerbStone\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t80e57f36-0abd-4ded-b1e4-d67a7d03bae8\tPset_KerbStone.NominalHeight\tLENGTH\t\t379\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t7832bce5-ea43-4748-bfae-647096002007\tPset_KerbStone.NominalLength\tLENGTH\t\t379\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t9a764061-e43c-43a3-8ac8-32eec238b053\tPset_KerbStone.NominalWidth\tLENGTH\t\t379\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t1374d61c-0ecd-432a-b296-d041fd0ad883\tPset_KerbStone.StoneFinishes\tTEXT\t\t379\t1\tIfcLabel\t1\nPARAM\t666038c0-27a0-45ed-ac01-4ffa11391612\tPset_KerbStone.TypeDesignation\tTEXT\t\t379\t1\tIfcLabel\t1\n#\nGROUP\t380\tPset_LampEmitterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t01de7fae-c762-4828-99fd-a2b596c40a7f\tPset_LampEmitterTypeCommon.ColorAppearance\tTEXT\t\t380\t1\tIfcLabel\t1\nPARAM\t4947bebc-313f-42d3-880e-d2b4c6d370af\tPset_LampEmitterTypeCommon.ColorRenderingIndex\tINTEGER\t\t380\t1\tIfcInteger\t1\nPARAM\t8ba2a3df-0ce1-4083-a20a-dccda64aec10\tPset_LampEmitterTypeCommon.ColorTemperature\tNUMBER\t\t380\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t4612709b-eb19-46e5-8d7b-39492ba5316f\tPset_LampEmitterTypeCommon.ContributedLuminousFlux\tNUMBER\t\t380\t1\tIfcLuminousFluxMeasure\t1\nPARAM\t36c21fa4-9f9d-4661-a3ad-4dee9f4ed6e0\tPset_LampEmitterTypeCommon.LampBallastType\tTEXT\t\t380\t1\tPEnum_LampBallastType\t1\nPARAM\tadb58c29-4394-4975-9b9e-2042ab4a7990\tPset_LampEmitterTypeCommon.LampCompensationType\tTEXT\t\t380\t1\tPEnum_LampCompensationType\t1\nPARAM\te9e6e29f-a447-4111-81fa-b763ec01dc08\tPset_LampEmitterTypeCommon.LampMaintenanceFactor\tNUMBER\t\t380\t1\tIfcReal\t1\nPARAM\ta33ebd7b-07e2-49a4-9025-d7c39e396b02\tPset_LampEmitterTypeCommon.LightEmitterNominalPower\tNUMBER\t\t380\t1\tIfcPowerMeasure\t1\nPARAM\t09e62eb4-9876-4b64-aa06-efe3c2679b00\tPset_LampEmitterTypeCommon.Spectrum\tMULTILINETEXT\t\t380\t1\tPropertyTableValue\t1\n#\nGROUP\t381\tPset_LampTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t41d7b180-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.ColorAppearance\tTEXT\t\t381\t1\tIfcLabel\t1\nPARAM\t5fa51680-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.ColorRenderingIndex\tINTEGER\t\t381\t1\tIfcInteger\t1\nPARAM\t59af3580-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.ColorTemperature\tNUMBER\t\t381\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tb5ce81d0-db2b-4892-b8dc-ccf7396ed14e\tPset_LampTypeCommon.ColourAppearance\tTEXT\t\t381\t1\tIfcLabel\t1\nPARAM\t23b3107e-7472-4622-bef4-e5b9543eda41\tPset_LampTypeCommon.ColourRenderingIndex\tINTEGER\t\t381\t1\tIfcInteger\t1\nPARAM\t9c6c0843-e92d-4098-9255-73744984f592\tPset_LampTypeCommon.ColourTemperature\tNUMBER\t\t381\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t0fc64f80-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.ContributedLuminousFlux\tNUMBER\t\t381\t1\tIfcLuminousFluxMeasure\t1\nPARAM\t22d91f80-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.LampBallastType\tTEXT\t\t381\t1\tPEnum_LampBallastType\t1\nPARAM\t32f0ff00-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.LampCompensationType\tTEXT\t\t381\t1\tPEnum_LampCompensationType\t1\nPARAM\t1c4aa800-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.LampMaintenanceFactor\tNUMBER\t\t381\t1\tIfcReal\t1\nPARAM\t15bc3080-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.LightEmitterNominalPower\tNUMBER\t\t381\t1\tIfcPowerMeasure\t1\nPARAM\tf58c7180-d1ea-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.Reference\tTEXT\t\t381\t1\tIfcIdentifier\t1\nPARAM\t4b611980-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.Spectrum\tMULTILINETEXT\t\t381\t1\tPropertyTableValue\t1\nPARAM\tfde4ac80-d1ea-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.Status\tTEXT\t\t381\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t382\tPset_LandRegistration\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t73e91380-d1eb-11e1-8000-00215ad4efdf\tPset_LandRegistration.IsPermanentID\tYESNO\t\t382\t1\tIfcBoolean\t1\nPARAM\t6c296f00-d1eb-11e1-8000-00215ad4efdf\tPset_LandRegistration.LandID\tTEXT\t\t382\t1\tIfcIdentifier\t1\nPARAM\t7b102180-d1eb-11e1-8000-00215ad4efdf\tPset_LandRegistration.LandTitleID\tTEXT\t\t382\t1\tIfcIdentifier\t1\n#\nGROUP\t383\tPset_LightFixtureTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc13d416e-f166-40da-aa81-0a3e1ec5a9e1\tPset_LightFixtureTypeCommon.ArticleNumber\tMULTILINETEXT\t\t383\t1\tIfcClassificationReference\t1\nPARAM\taf83dd80-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.LightFixtureMountingType\tTEXT\t\t383\t1\tPEnum_LightFixtureMountingType\t1\nPARAM\tc5919e00-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.LightFixturePlacingType\tTEXT\t\t383\t1\tPEnum_LightFixturePlacingType\t1\nPARAM\td80bd780-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.MaintenanceFactor\tNUMBER\t\t383\t1\tIfcReal\t1\nPARAM\t456750b3-5575-49ae-920b-6626f5e090d9\tPset_LightFixtureTypeCommon.ManufacturersSpecificInformation\tTEXT\t\t383\t1\tIfcText\t1\nPARAM\tde01b880-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.MaximumPlenumSensibleLoad\tNUMBER\t\t383\t1\tIfcPowerMeasure\t1\nPARAM\te528c680-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.MaximumSpaceSensibleLoad\tNUMBER\t\t383\t1\tIfcPowerMeasure\t1\nPARAM\ta4c94880-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.NumberOfSources\tINTEGER\t\t383\t1\tIfcCountMeasure\t1\nPARAM\t8ebb8800-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.Reference\tTEXT\t\t383\t1\tIfcIdentifier\t1\nPARAM\tea861100-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.SensibleLoadToRadiant\tNUMBER\t\t383\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t9549ff80-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.Status\tTEXT\t\t383\t1\tPEnum_ElementStatus\t1\nPARAM\taa269300-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.TotalWattage\tNUMBER\t\t383\t1\tIfcPowerMeasure\t1\n#\nGROUP\t384\tPset_LightFixtureTypeExitSign\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8ebc6501-7e86-486b-9336-d9a9b0b3f989\tPset_LightFixtureTypeExitSign.Addressablility\tTEXT\t\t384\t1\tPEnum_AddressabilityType\t1\nPARAM\td91142d9-838a-4b2e-847d-3608e246f57a\tPset_LightFixtureTypeExitSign.BackupSupplySystem\tTEXT\t\t384\t1\tPEnum_BackupSupplySystemType\t1\nPARAM\t024fb4cf-cd6d-4dde-99ef-282a0195d011\tPset_LightFixtureTypeExitSign.MinimumTextHeight\tNUMBER\t\t384\t1\tIfcPositiveLengthMeasure \t1\nPARAM\t84494f48-d8c9-4766-8149-0d443e30214c\tPset_LightFixtureTypeExitSign.PictogramEscapeDirection\tTEXT\t\t384\t1\tPEnum_PictogramEscapeDirectionType\t1\nPARAM\t02a836db-9993-40c5-b5ae-6e1419195783\tPset_LightFixtureTypeExitSign.SelfTestFunction\tTEXT\t\t384\t1\tPEnum_SelfTestType\t1\n#\nGROUP\t385\tPset_LightFixtureTypeSecurityLighting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t35a02400-d1ec-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeSecurityLighting.Addressablility\tTEXT\t\t385\t1\tPEnum_AddressabilityType\t1\nPARAM\t1a351900-d1ec-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeSecurityLighting.BackupSupplySystem\tTEXT\t\t385\t1\tPEnum_BackupSupplySystemType\t1\nPARAM\t05588580-d1ec-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeSecurityLighting.FixtureHeight\tLENGTH\t\t385\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t28833500-d1ec-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeSecurityLighting.PictogramEscapeDirection\tTEXT\t\t385\t1\tPEnum_PictogramEscapeDirectionType\t1\nPARAM\tf5d93c80-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeSecurityLighting.SecurityLightingType\tTEXT\t\t385\t1\tPEnum_LightFixtureSecurityLightingType\t1\nPARAM\t0d182a00-d1ec-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeSecurityLighting.SelfTestFunction\tTEXT\t\t385\t1\tPEnum_SelfTestType\t1\n#\nGROUP\t386\tPset_LightFixtureTypeThermal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t90cf7602-20b2-408d-9f61-3ba928a943be\tPset_LightFixtureTypeThermal.MaximumPlenumSensibleLoad\tNUMBER\t\t386\t1\tIfcPowerMeasure\t1\nPARAM\t439cdfea-7218-461e-b98c-b00535caad03\tPset_LightFixtureTypeThermal.MaximumSpaceSensibleLoad\tNUMBER\t\t386\t1\tIfcPowerMeasure\t1\nPARAM\tf69ab30e-17fb-4a14-b4b6-e257776d333c\tPset_LightFixtureTypeThermal.SensibleLoadToRadiant\tNUMBER\t\t386\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t387\tPset_LinearReferencingMethod\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t39d4525d-1f18-4b8e-bf9a-ecefa45ad12f\tPset_LinearReferencingMethod.LRMConstraint\tTEXT\t\t387\t1\tIfcLabel\t1\nPARAM\td9fe5e29-1cc5-4b42-b657-ac296f6b8001\tPset_LinearReferencingMethod.LRMName\tTEXT\t\t387\t1\tIfcLabel\t1\nPARAM\tc0e1deea-17fc-4bd9-b058-2553e5f84d96\tPset_LinearReferencingMethod.LRMType\tTEXT\t\t387\t1\tPEnum_LRMType\t1\nPARAM\te5480d7f-1ad9-4209-be14-8f7a0e8ea40e\tPset_LinearReferencingMethod.LRMUnit\tTEXT\t\t387\t1\tIfcLabel\t1\nPARAM\te1e6a13d-aa97-439d-be45-5cc7f7b0f367\tPset_LinearReferencingMethod.UserDefinedLRMType\tTEXT\t\t387\t1\tIfcLabel\t1\n#\nGROUP\t388\tPset_MaintenanceStrategy\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te24cfbf7-b8fb-452d-b337-84d54ae6e55a\tPset_MaintenanceStrategy.AccidentResponse\tTEXT\t\t388\t1\tPEnum_AccidentResponse\t1\nPARAM\t86c639be-73c7-4ccd-a002-3d88510e67db\tPset_MaintenanceStrategy.AssetCriticality\tTEXT\t\t388\t1\tPEnum_AssetRating\t1\nPARAM\te04d6356-2890-415a-b831-1877a5562ef6\tPset_MaintenanceStrategy.AssetFrailty\tTEXT\t\t388\t1\tPEnum_AssetRating\t1\nPARAM\t3d027598-b69b-4a78-a7de-f9ca17fb64df\tPset_MaintenanceStrategy.AssetPriority\tTEXT\t\t388\t1\tPEnum_AssetRating\t1\nPARAM\t49485b4a-6820-414d-a9e2-3e940abcb160\tPset_MaintenanceStrategy.MonitoringType\tTEXT\t\t388\t1\tPEnum_MonitoringType\t1\n#\nGROUP\t389\tPset_MaintenanceTriggerCondition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta45800ff-3301-4948-9b1d-0bf025ae859c\tPset_MaintenanceTriggerCondition.ConditionDisposalLevel\tTEXT\t\t389\t1\tPEnum_AssetRating\t1\nPARAM\t9fc3a52c-0d4d-470f-8fe2-a61ab2c0df96\tPset_MaintenanceTriggerCondition.ConditionMaintenanceLevel\tTEXT\t\t389\t1\tPEnum_AssetRating\t1\nPARAM\td217f00b-2ecc-4e09-8b5d-27fd5d9e554e\tPset_MaintenanceTriggerCondition.ConditionReplacementLevel\tTEXT\t\t389\t1\tPEnum_AssetRating\t1\nPARAM\t92011223-ee8a-4801-97d2-28663c85cd8c\tPset_MaintenanceTriggerCondition.ConditionTargetPerformance\tTEXT\t\t389\t1\tPEnum_AssetRating\t1\n#\nGROUP\t390\tPset_MaintenanceTriggerDuration\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta195c676-b220-4c30-804f-d2cef049d52f\tPset_MaintenanceTriggerDuration.DurationDisposalLevel\tTEXT\t\t390\t1\tIfcDuration\t1\nPARAM\t95a3f103-e35c-4a59-a9d0-bab9818b7010\tPset_MaintenanceTriggerDuration.DurationMaintenanceLevel\tTEXT\t\t390\t1\tIfcDuration\t1\nPARAM\te1c47da2-172f-4e60-97bd-35638b70ccf7\tPset_MaintenanceTriggerDuration.DurationReplacementLevel\tTEXT\t\t390\t1\tIfcDuration\t1\nPARAM\t687f96ce-fc01-4970-9989-5fe6d01eb842\tPset_MaintenanceTriggerDuration.DurationTargetPerformance\tTEXT\t\t390\t1\tIfcDuration\t1\n#\nGROUP\t391\tPset_MaintenanceTriggerPerformance\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td073c00a-bf5b-4463-ab8b-7c30f2431f88\tPset_MaintenanceTriggerPerformance.DisposalLevel\tNUMBER\t\t391\t1\tIfcReal\t1\nPARAM\t77bdf668-475a-411e-915e-f03df2829d21\tPset_MaintenanceTriggerPerformance.PerformanceMaintenanceLevel\tNUMBER\t\t391\t1\tIfcReal\t1\nPARAM\t403155b3-eb4b-421c-973d-42a9a16dbe30\tPset_MaintenanceTriggerPerformance.ReplacementLevel\tNUMBER\t\t391\t1\tIfcReal\t1\nPARAM\t14254098-ea65-410e-80cd-fa9fe9584251\tPset_MaintenanceTriggerPerformance.TargetPerformance\tNUMBER\t\t391\t1\tIfcReal\t1\n#\nGROUP\t392\tPset_ManufacturerOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4bade480-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerOccurrence.AcquisitionDate\tTEXT\t\t392\t1\tIfcDate\t1\nPARAM\t62543b80-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerOccurrence.AssemblyPlace\tTEXT\t\t392\t1\tPEnum_AssemblyPlace\t1\nPARAM\t510b2f00-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerOccurrence.BarCode\tTEXT\t\t392\t1\tIfcIdentifier\t1\nPARAM\t5c5e5a80-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerOccurrence.BatchReference\tTEXT\t\t392\t1\tIfcIdentifier\t1\nPARAM\t4f703bbb-27f3-46af-8a96-8e5d9bca1968\tPset_ManufacturerOccurrence.ManufacturingDate\tTEXT\t\t392\t1\tIfcDate\t1\nPARAM\t56687980-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerOccurrence.SerialNumber\tTEXT\t\t392\t1\tIfcIdentifier\t1\n#\nGROUP\t393\tPset_ManufacturerTypeInformation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e57dd00-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.ArticleNumber\tTEXT\t\t393\t1\tIfcIdentifier\t1\nPARAM\t9f203280-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.AssemblyPlace\tTEXT\t\t393\t1\tPEnum_AssemblyPlace\t1\nPARAM\t78fa9280-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.GlobalTradeItemNumber\tTEXT\t\t393\t1\tIfcIdentifier\t1\nPARAM\t929bda00-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.Manufacturer\tTEXT\t\t393\t1\tIfcLabel\t1\nPARAM\t8c0d6280-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.ModelLabel\tTEXT\t\t393\t1\tIfcLabel\t1\nPARAM\t84e65480-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.ModelReference\tTEXT\t\t393\t1\tIfcLabel\t1\nPARAM\t2efac6fc-d68e-4da9-aa76-bab7d055069e\tPset_ManufacturerTypeInformation.OperatingWeight\tNUMBER\t\t393\t1\tIfcMassMeasure\t1\nPARAM\t49d77e4b-a940-4ce9-81bf-0f8c930094af\tPset_ManufacturerTypeInformation.OperationalDocument\tMULTILINETEXT\t\t393\t1\tIfcExternalReference\t1\nPARAM\t28dbd877-44d3-41d2-ab1a-dd200c69f5f0\tPset_ManufacturerTypeInformation.PerformanceCertificate\tMULTILINETEXT\t\t393\t1\tIfcDocumentReference\t1\nPARAM\t9891bb00-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.ProductionYear\tTEXT\t\t393\t1\tIfcLabel\t1\nPARAM\td7b3aa2e-1acc-48dc-86c3-021eb6f84ca4\tPset_ManufacturerTypeInformation.SafetyDocument\tMULTILINETEXT\t\t393\t1\tIfcDocumentReference\t1\nPARAM\tb7170604-cdee-47ee-882f-14fa0ecca0b1\tPset_ManufacturerTypeInformation.ShippingWeight\tNUMBER\t\t393\t1\tIfcMassMeasure\t1\n#\nGROUP\t394\tPset_MarineFacilityTransportation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8c1492e8-eeb1-4554-a226-f7ab744d15bd\tPset_MarineFacilityTransportation.BerthCargoWeight\tNUMBER\t\t394\t1\tIfcMassMeasure\t1\nPARAM\t3704aca4-51d7-48fd-b521-8cb138af3a1c\tPset_MarineFacilityTransportation.BerthGrade\tTEXT\t\t394\t1\tIfcLabel\t1\nPARAM\t0b997767-3ae7-4b74-9c4d-ef13138d87cf\tPset_MarineFacilityTransportation.Berths\tINTEGER\t\t394\t1\tIfcCountMeasure\t1\n#\nGROUP\t395\tPset_MarinePartChamberCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2fc95dac-2142-4520-aa11-57b1d8609045\tPset_MarinePartChamberCommon.EffectiveChamberSize\tVOLUME\t\t395\t1\tIfcVolumeMeasure\t1\nPARAM\tc8b93294-da43-4e42-8f50-79dec0e8bd50\tPset_MarinePartChamberCommon.StructuralType\tTEXT\t\t395\t1\tIfcLabel\t1\n#\nGROUP\t396\tPset_MarineVehicleCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taffb9bdf-1018-4f79-92c7-856872a9ca33\tPset_MarineVehicleCommon.AboveDeckProjectedWindEnd\tAREA\t\t396\t1\tIfcAreaMeasure\t1\nPARAM\t84cf8dcf-fb66-40ea-b663-e243859bb28e\tPset_MarineVehicleCommon.AboveDeckProjectedWindSide\tAREA\t\t396\t1\tIfcAreaMeasure\t1\nPARAM\t783b769a-734f-4e3b-88e4-16b56f0be169\tPset_MarineVehicleCommon.CargoDeadWeight\tNUMBER\t\t396\t1\tIfcMassMeasure\t1\nPARAM\t933d7a52-a862-4d84-b7cf-a706d9eecd65\tPset_MarineVehicleCommon.Displacement\tNUMBER\t\t396\t1\tIfcMassMeasure\t1\nPARAM\tcdd08df4-bf87-4203-8e10-52d29c45faaf\tPset_MarineVehicleCommon.LaneMeters\tLENGTH\t\t396\t1\tIfcLengthMeasure\t1\nPARAM\tfc93a4a4-a1c2-487f-88d8-0cf5fb0a89ea\tPset_MarineVehicleCommon.LengthBetweenPerpendiculars\tLENGTH\t\t396\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc24692df-4457-4dd9-899c-608789ff6882\tPset_MarineVehicleCommon.VesselDepth\tLENGTH\t\t396\t1\tIfcLengthMeasure\t1\nPARAM\t880cd21a-7d3f-4c56-9810-7e5c5efe7c69\tPset_MarineVehicleCommon.VesselDraft\tLENGTH\t\t396\t1\tIfcLengthMeasure\t1\n#\nGROUP\t397\tPset_MarineVehicleDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taeea5cc1-8bca-4d73-8a73-65d794c12007\tPset_MarineVehicleDesignCriteria.AllowableHullPressure\tNUMBER\t\t397\t1\tIfcPressureMeasure\t1\nPARAM\t2e3d172c-f4f1-4428-9834-1c1a410e1964\tPset_MarineVehicleDesignCriteria.SoftnessCoefficient\tNUMBER\t\t397\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t398\tPset_MarkerGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1c465278-926e-4acd-8303-df9a165dfc45\tPset_MarkerGeneral.ApproachSpeed\tNUMBER\t\t398\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t258f34cf-aea9-4cb3-8106-f2f24df433a7\tPset_MarkerGeneral.MarkerType\tTEXT\t\t398\t1\tPEnum_MarkerType\t1\nPARAM\td03f795f-6d65-4dc8-9df0-8f96bca1a9ce\tPset_MarkerGeneral.NominalHeight\tLENGTH\t\t398\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5d5a74d8-f18f-463a-8f26-4726c024a3b7\tPset_MarkerGeneral.NominalWidth\tLENGTH\t\t398\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tfd18b788-5816-4afe-923f-d6bf7c4f42c4\tPset_MarkerGeneral.Symbol\tMULTILINETEXT\t\t398\t1\tIfcExternalReference\t1\n#\nGROUP\t399\tPset_MarkingLinesCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2b1367fa-6860-41fb-ad0f-004dd88b9662\tPset_MarkingLinesCommon.DashedLine\tYESNO\t\t399\t1\tIfcBoolean\t1\nPARAM\t50cbc9b9-9edc-4da8-905f-d9b1eb9191c5\tPset_MarkingLinesCommon.DashedLinePattern\tTEXT\t\t399\t1\tIfcLabel\t1\nPARAM\t4803ca45-44c6-4c9a-9292-348b83e695c3\tPset_MarkingLinesCommon.NominalWidth\tLENGTH\t\t399\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t400\tPset_MaterialCombustion\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc7a82c80-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCombustion.CO2Content\tNUMBER\t\t400\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc1b24b80-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCombustion.COContent\tNUMBER\t\t400\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tbc550100-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCombustion.N20Content\tNUMBER\t\t400\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tb6f7b680-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCombustion.SpecificHeatCapacity\tNUMBER\t\t400\t1\tIfcSpecificHeatCapacityMeasure\t1\n#\nGROUP\t401\tPset_MaterialCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tddb5ed00-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCommon.MassDensity\tMASS_DENSITY\t\t401\t1\tIfcMassDensityMeasure\t1\nPARAM\td262c180-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCommon.MolecularWeight\tNUMBER\t\t401\t1\tIfcMolecularWeightMeasure\t1\nPARAM\td858a280-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCommon.Porosity\tNUMBER\t\t401\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t402\tPset_MaterialConcrete\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7573480-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialConcrete.AdmixturesDescription\tTEXT\t\t402\t1\tIfcText\t1\nPARAM\tea3a4580-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialConcrete.CompressiveStrength\tNUMBER\t\t402\t1\tIfcPressureMeasure\t1\nPARAM\tf0302680-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialConcrete.MaxAggregateSize\tLENGTH\t\t402\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t076f1400-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialConcrete.ProtectivePoreRatio\tNUMBER\t\t402\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t01793300-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialConcrete.WaterImpermeability\tTEXT\t\t402\t1\tIfcText\t1\nPARAM\tfcb47f00-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialConcrete.Workability\tTEXT\t\t402\t1\tIfcText\t1\n#\nGROUP\t403\tPset_MaterialEnergy\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t34bbc200-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.GasPressure\tNUMBER\t\t403\t1\tIfcPressureMeasure\t1\nPARAM\t181f8a00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.MoistureCapacityThermalGradient\tNUMBER\t\t403\t1\tIfcReal\t1\nPARAM\t2f5e7780-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.SolarRefractionIndex\tNUMBER\t\t403\t1\tIfcReal\t1\nPARAM\t22da1f00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.SpecificHeatTemperatureDerivative\tNUMBER\t\t403\t1\tIfcReal\t1\nPARAM\t1e156b00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.ThermalConductivityTemperatureDerivative\tNUMBER\t\t403\t1\tIfcReal\t1\nPARAM\t1229a900-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.ViscosityTemperatureDerivative\tNUMBER\t\t403\t1\tIfcReal\t1\nPARAM\t28d00000-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.VisibleRefractionIndex\tNUMBER\t\t403\t1\tIfcReal\t1\n#\nGROUP\t404\tPset_MaterialFuel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t44d3a180-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialFuel.CarbonContent\tNUMBER\t\t404\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t3eddc080-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialFuel.CombustionTemperature\tNUMBER\t\t404\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t4ef5a000-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialFuel.HigherHeatingValue\tNUMBER\t\t404\t1\tIfcHeatingValueMeasure\t1\nPARAM\t4a30ec00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialFuel.LowerHeatingValue\tNUMBER\t\t404\t1\tIfcHeatingValueMeasure\t1\n#\nGROUP\t405\tPset_MaterialHygroscopic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t63399d00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialHygroscopic.IsothermalMoistureCapacity\tNUMBER\t\t405\t1\tIfcIsothermalMoistureCapacityMeasure\t1\nPARAM\t5ddc5280-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialHygroscopic.LowerVaporResistanceFactor\tNUMBER\t\t405\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6c2a6e80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialHygroscopic.MoistureDiffusivity\tNUMBER\t\t405\t1\tIfcMoistureDiffusivityMeasure\t1\nPARAM\t59179e80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialHygroscopic.UpperVaporResistanceFactor\tNUMBER\t\t405\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t67fe5100-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialHygroscopic.VaporPermeability\tNUMBER\t\t405\t1\tIfcVaporPermeabilityMeasure\t1\n#\nGROUP\t406\tPset_MaterialMechanical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t764c6d00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialMechanical.DynamicViscosity\tNUMBER\t\t406\t1\tIfcDynamicViscosityMeasure\t1\nPARAM\t85331f80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialMechanical.PoissonRatio\tNUMBER\t\t406\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t806e6b80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialMechanical.ShearModulus\tNUMBER\t\t406\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t8b290080-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialMechanical.ThermalExpansionCoefficient\tNUMBER\t\t406\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\t7b112100-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialMechanical.YoungModulus\tNUMBER\t\t406\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t407\tPset_MaterialOptical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc3304380-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.SolarReflectanceBack\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tc7f4f780-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.SolarReflectanceFront\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t9c720d00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.SolarTransmittance\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\ta72ca200-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.ThermalIrEmissivityBack\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tac89ec80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.ThermalIrEmissivityFront\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\ta1cf5780-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.ThermalIrTransmittance\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tb7448180-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.VisibleReflectanceBack\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tbd3a6280-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.VisibleReflectanceFront\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t954aff00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.VisibleTransmittance\tNUMBER\t\t407\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t408\tPset_MaterialSteel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te4912f80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.HardeningModule\tNUMBER\t\t408\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tefe45b00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.PlasticStrain\tNUMBER\t\t408\t1\tIfcPositiveRatioMeasure\t1\nPARAM\te9ee7a00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.ProportionalStress\tNUMBER\t\t408\t1\tIfcPressureMeasure\t1\nPARAM\tf541a580-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.Relaxations\tMULTILINETEXT\t\t408\t1\tPropertyTableValue\t1\nPARAM\t7ba1d7a6-3a89-42a9-8a38-091a0e35d433\tPset_MaterialSteel.StructuralGrade\tTEXT\t\t408\t1\tIfcLabel\t1\nPARAM\tdf33e500-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.UltimateStrain\tNUMBER\t\t408\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td9d69a80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.UltimateStress\tNUMBER\t\t408\t1\tIfcPressureMeasure\t1\nPARAM\td3e0b980-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.YieldStress\tNUMBER\t\t408\t1\tIfcPressureMeasure\t1\n#\nGROUP\t409\tPset_MaterialThermal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0be7fc80-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialThermal.BoilingPoint\tNUMBER\t\t409\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t11dddd80-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialThermal.FreezingPoint\tNUMBER\t\t409\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t07234880-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialThermal.SpecificHeatCapacity\tNUMBER\t\t409\t1\tIfcSpecificHeatCapacityMeasure\t1\nPARAM\t17d3be80-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialThermal.ThermalConductivity\tNUMBER\t\t409\t1\tIfcThermalConductivityMeasure\t1\n#\nGROUP\t410\tPset_MaterialWater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t320d9c80-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.AcidityConcentration\tNUMBER\t\t410\t1\tIfcIonConcentrationMeasure\t1\nPARAM\t2cb05200-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.AlkalinityConcentration\tNUMBER\t\t410\t1\tIfcIonConcentrationMeasure\t1\nPARAM\t3afe6e00-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.DissolvedSolidsContent\tNUMBER\t\t410\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t27530780-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.Hardness\tNUMBER\t\t410\t1\tIfcIonConcentrationMeasure\t1\nPARAM\t3639ba00-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.ImpuritiesContent\tNUMBER\t\t410\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t215d2680-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.IsPotable\tYESNO\t\t410\t1\tIfcBoolean\t1\nPARAM\t3fc32200-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.PHLevel\tNUMBER\t\t410\t1\tIfcPHMeasure\t1\n#\nGROUP\t411\tPset_MaterialWood\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t54071f00-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.AppearanceGrade\tTEXT\t\t411\t1\tIfcLabel\t1\nPARAM\t6bdea300-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.DimensionalChangeCoefficient\tNUMBER\t\t411\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5f5a4a80-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.Layers\tINTEGER\t\t411\t1\tIfcInteger\t1\nPARAM\t59646980-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.Layup\tTEXT\t\t411\t1\tIfcLabel\t1\nPARAM\t67b28580-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.MoistureContent\tNUMBER\t\t411\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t63866800-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.Plies\tINTEGER\t\t411\t1\tIfcInteger\t1\nPARAM\t494c8a00-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.Species\tTEXT\t\t411\t1\tIfcLabel\t1\nPARAM\t4ea9d480-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.StrengthGrade\tTEXT\t\t411\t1\tIfcLabel\t1\nPARAM\t70a35700-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.ThicknessSwelling\tNUMBER\t\t411\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t412\tPset_MaterialWoodBasedBeam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7862fb80-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWoodBasedBeam.ApplicableStructuralDesignMethod\tTEXT\t\t412\t1\tIfcLabel\t1\nPARAM\te2154bab-c72b-4d76-8d6b-25351486c020\tPset_MaterialWoodBasedBeam.InPlane.BendingStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t17105162-3bfa-4068-9ab3-094db158888b\tPset_MaterialWoodBasedBeam.InPlane.CompStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t71353332-b257-4ccf-91ab-044a6b910523\tPset_MaterialWoodBasedBeam.InPlane.CompStrengthPerp\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tdb9e5d32-9938-4f23-83af-1b286d7cc42f\tPset_MaterialWoodBasedBeam.InPlane.InstabilityFactors\tMULTILINETEXT\t\t412\t1\tPropertyTableValue\t1\nPARAM\t6818f3dd-ded5-4ba9-88c8-f42268fc3b87\tPset_MaterialWoodBasedBeam.InPlane.RaisedCompStrengthPerp\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t926e5acb-cb0c-4faf-b268-4b27d849344c\tPset_MaterialWoodBasedBeam.InPlane.ReferenceDepth\tLENGTH\t\t412\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t15f0bd0e-e32d-43ee-b7cd-c27ccb2f5adc\tPset_MaterialWoodBasedBeam.InPlane.ShearModulus\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t0b28be5d-26ca-4cea-851a-ce57e5c20079\tPset_MaterialWoodBasedBeam.InPlane.ShearModulusMin\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t2eb6ae33-f3e2-4793-94af-5a347eb0b344\tPset_MaterialWoodBasedBeam.InPlane.ShearStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t8a52008e-1c1e-4473-a8db-72918bb790ba\tPset_MaterialWoodBasedBeam.InPlane.TensileStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t2d23b14d-e914-44d6-aefb-5de7a2ce4ed1\tPset_MaterialWoodBasedBeam.InPlane.TensileStrengthPerp\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t4e453f1f-4a8f-4443-87e1-7a3733691c43\tPset_MaterialWoodBasedBeam.InPlane.TorsionalStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t51595aaa-4ef9-451f-922c-b3f3919f8ed6\tPset_MaterialWoodBasedBeam.InPlane.YoungModulus\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tb769c009-8ca6-4de2-a248-df5f73e0765c\tPset_MaterialWoodBasedBeam.InPlane.YoungModulusMin\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t70c32845-ce7f-4354-bf71-cc4c997938b6\tPset_MaterialWoodBasedBeam.InPlane.YoungModulusPerp\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t2121a8f8-8707-424e-939b-8bedc151b517\tPset_MaterialWoodBasedBeam.InPlane.YoungModulusPerpMin\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t704e6f1e-14fb-4ee5-9bd1-5f094601cb4f\tPset_MaterialWoodBasedBeam.InPlaneNegative.BendingStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tdf75699e-c868-4ca0-a2a2-c16f968d5d51\tPset_MaterialWoodBasedBeam.InPlaneNegative.CompStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tda08a912-e97b-45da-9d72-994e9ee67ddd\tPset_MaterialWoodBasedBeam.InPlaneNegative.CompStrengthPerp\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t3bd36df2-ed28-4495-b355-e73a19074dbf\tPset_MaterialWoodBasedBeam.InPlaneNegative.InstabilityFactors\tMULTILINETEXT\t\t412\t1\tPropertyTableValue\t1\nPARAM\t04558612-ae3d-4334-b9bf-2c7f74267eee\tPset_MaterialWoodBasedBeam.InPlaneNegative.RaisedCompStrengthPerp\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t81a0158a-081d-4765-9b5c-8021e6c228af\tPset_MaterialWoodBasedBeam.InPlaneNegative.ReferenceDepth\tLENGTH\t\t412\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0f3b049f-4e8b-48fd-9312-b7f39e59b17c\tPset_MaterialWoodBasedBeam.InPlaneNegative.ShearModulus\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\ta6e1021b-4e7c-4eae-b5c8-f3b96ba657e1\tPset_MaterialWoodBasedBeam.InPlaneNegative.ShearModulusMin\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tab3d6544-689b-4906-9164-4ec088d57ea8\tPset_MaterialWoodBasedBeam.InPlaneNegative.ShearStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\ta1df15d3-c9fc-4bc3-9c41-97d981790e3e\tPset_MaterialWoodBasedBeam.InPlaneNegative.TensileStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t489c594a-866b-4c28-a6e7-8a15190078b1\tPset_MaterialWoodBasedBeam.InPlaneNegative.TensileStrengthPerp\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t222deef7-fb1a-4fb4-868b-955726ae85cb\tPset_MaterialWoodBasedBeam.InPlaneNegative.TorsionalStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t6be76300-4a05-4e9c-b0fb-7aee753117d2\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulus\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t508173f2-3e4f-401d-8cb1-bf22fb8de49e\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusMin\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tfcf058dc-34f3-48b6-9b65-9f659be2607c\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusPerp\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\ta69354ab-832f-4925-9c83-71cf4a4d99b7\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusPerpMin\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t308b1604-fa7f-4b11-ba71-175ab14f7ffb\tPset_MaterialWoodBasedBeam.OutOfPlane.BendingStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t145228e6-a32b-41f5-8dd0-f484878707f4\tPset_MaterialWoodBasedBeam.OutOfPlane.CompStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t1cb87d67-5af5-41d7-a93f-1c77709838cf\tPset_MaterialWoodBasedBeam.OutOfPlane.CompStrengthPerp\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t062a0680-fadb-4703-8bbb-24c8dc3af1f2\tPset_MaterialWoodBasedBeam.OutOfPlane.InstabilityFactors\tMULTILINETEXT\t\t412\t1\tPropertyTableValue\t1\nPARAM\tdb2eea23-e9ad-40d7-b272-a6e5f4e73e9c\tPset_MaterialWoodBasedBeam.OutOfPlane.RaisedCompStrengthPerp\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\tae54995e-d551-4653-bab6-e506707d7a30\tPset_MaterialWoodBasedBeam.OutOfPlane.ReferenceDepth\tLENGTH\t\t412\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1015aaf1-4fc2-4835-b018-58dce54ba562\tPset_MaterialWoodBasedBeam.OutOfPlane.ShearModulus\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\te85aeb93-d81e-4875-a9a6-7f441e5bfb0a\tPset_MaterialWoodBasedBeam.OutOfPlane.ShearModulusMin\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t9767fd38-c5be-4d90-b761-93dbacb8174e\tPset_MaterialWoodBasedBeam.OutOfPlane.ShearStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t7561e794-9158-42b6-a10e-7015c0cbcd6c\tPset_MaterialWoodBasedBeam.OutOfPlane.TensileStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t7e0321f8-8aa7-4680-bc83-7db526890c02\tPset_MaterialWoodBasedBeam.OutOfPlane.TensileStrengthPerp\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\t1cfb8d02-520d-4c35-a6e0-80580465e624\tPset_MaterialWoodBasedBeam.OutOfPlane.TorsionalStrength\tNUMBER\t\t412\t1\tIfcPressureMeasure\t1\nPARAM\ta54647c6-6eb8-44e1-bcc9-54899f7d058a\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulus\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tca032110-df47-4660-b37c-b9c31013428d\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusMin\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t2b4ac3e3-a1f7-4d94-9081-f129fc33ab18\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusPerp\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tb46ebb31-a823-47a7-904f-8e13e7501e34\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusPerpMin\tNUMBER\t\t412\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t413\tPset_MaterialWoodBasedPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t75b4d600-d1ef-11e1-8000-00215ad4efdf\tPset_MaterialWoodBasedPanel.ApplicableStructuralDesignMethod\tTEXT\t\t413\t1\tIfcLabel\t1\nPARAM\tc3c9c431-7881-4262-ad28-abdc3d705f51\tPset_MaterialWoodBasedPanel.InPlane.BearingStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\tf82b0dc8-ae43-409c-ae6a-caceaf171fb0\tPset_MaterialWoodBasedPanel.InPlane.BendingStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t43cbe65a-8d5c-4a76-9b98-4d0da1ff6417\tPset_MaterialWoodBasedPanel.InPlane.CompressiveStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t84e6e3df-603f-4f14-9a0f-2d18e7bd8443\tPset_MaterialWoodBasedPanel.InPlane.RaisedCompressiveStrength\tNUMBER\t\t413\t1\tIfcPressureMeasure\t1\nPARAM\t48b02192-a22a-4ebe-9108-903c05361ece\tPset_MaterialWoodBasedPanel.InPlane.ReferenceDepth\tLENGTH\t\t413\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4bd9c753-3884-422e-95e5-f0a14e6de99a\tPset_MaterialWoodBasedPanel.InPlane.ShearModulus\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t370ad6a1-4f83-48dd-a7f7-c1d8902fb274\tPset_MaterialWoodBasedPanel.InPlane.ShearStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\taef7c8bc-d73e-434d-a20f-fcf00ed7babc\tPset_MaterialWoodBasedPanel.InPlane.TensileStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\tf88795ab-f8e2-4e72-b93a-3f90f8c300ce\tPset_MaterialWoodBasedPanel.InPlane.YoungModulusBending\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t358fc454-3454-4169-ac1e-38cc58f61634\tPset_MaterialWoodBasedPanel.InPlane.YoungModulusCompression\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t2c404c72-a4b8-49f6-a69b-ce9d0f4f37fc\tPset_MaterialWoodBasedPanel.InPlane.YoungModulusTension\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t144dda8c-caf8-4972-806a-992577539696\tPset_MaterialWoodBasedPanel.OutOfPlane.BearingStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\tf4028709-b945-4973-9621-1c0c70294fca\tPset_MaterialWoodBasedPanel.OutOfPlane.BendingStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t2aec861c-2b6a-4d91-b195-92ab6f03296c\tPset_MaterialWoodBasedPanel.OutOfPlane.CompressiveStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t9a6bd43d-e78c-4ac1-9a19-e9a963c9f95a\tPset_MaterialWoodBasedPanel.OutOfPlane.RaisedCompressiveStrength\tNUMBER\t\t413\t1\tIfcPressureMeasure\t1\nPARAM\tcac94447-840b-4eb7-ba13-f42234111fcc\tPset_MaterialWoodBasedPanel.OutOfPlane.ReferenceDepth\tLENGTH\t\t413\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t95065e16-2735-4f45-903f-0fd09b84b851\tPset_MaterialWoodBasedPanel.OutOfPlane.ShearModulus\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tddf4bd42-acbb-4e38-9441-691a2c19e8ea\tPset_MaterialWoodBasedPanel.OutOfPlane.ShearStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t58fca2f8-7665-483a-942c-2629a28a4aeb\tPset_MaterialWoodBasedPanel.OutOfPlane.TensileStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\tac7bb382-cae8-43d2-8247-37032f114b80\tPset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusBending\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t9d2f0e63-af8f-4371-8966-4aa28915e8d4\tPset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusCompression\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t6ab98e5d-6304-44aa-863f-a5eacb7aa2e3\tPset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusTension\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t6c1f8790-7525-43e0-a1d6-e4ebf42fe435\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.BearingStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t724f6921-b315-4083-935f-315208f9274b\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.BendingStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\ta6afa724-25b2-48a9-bfa4-6b6ccfb73306\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.CompressiveStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\tf46c6856-c20c-4cab-9d1c-ee76811b57f4\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.RaisedCompressiveStrength\tNUMBER\t\t413\t1\tIfcPressureMeasure\t1\nPARAM\tf73420bb-6184-40db-be11-46d9fb646fa0\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.ReferenceDepth\tLENGTH\t\t413\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf06cdc79-4544-45ce-9322-42432067a3b8\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.ShearModulus\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t4a403dcf-501d-4e78-b5ce-e728c2b6a0b6\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.ShearStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\ta4bd6014-998d-4700-92b4-d2b6dd5aeeb9\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.TensileStrength\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t94babf4d-76de-4389-be6c-7ead799975f8\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusBending\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\nPARAM\t1e830245-635c-4ba9-b264-1fbfb34f21c6\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusCompression\tNUMBER\t\t413\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tb19610ec-1ce0-406e-8fa9-2fd04ee8e882\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusTension\tMULTILINETEXT\t\t413\t1\tPropertyTableValue\t1\n#\nGROUP\t414\tPset_MaterialWoodBasedStructure\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t59d9b186-788f-4d5e-9f9c-2725a79a80ca\tPset_MaterialWoodBasedStructure.ApplicableStructuralDesignMethod\tTEXT\t\t414\t1\tIfcLabel\t1\n#\nGROUP\t415\tPset_MechanicalBeamInPlane\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tefd011f8-7425-45c7-9e79-e2b263e2857b\tPset_MechanicalBeamInPlane.BendingStrength\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\t08945168-a0c0-4261-ab25-e046e98d4e2f\tPset_MechanicalBeamInPlane.CompStrength\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\tc666ce13-b799-4139-a92b-dfb058ac3e22\tPset_MechanicalBeamInPlane.CompStrengthPerp\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\t94451164-31e4-4bdf-8ddd-ecfc2286a356\tPset_MechanicalBeamInPlane.InstabilityFactors\tMULTILINETEXT\t\t415\t1\tPropertyTableValue\t1\nPARAM\t2e88babc-5b84-4999-b6f9-f9c06eca955a\tPset_MechanicalBeamInPlane.RaisedCompStrengthPerp\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\tdc12a702-515f-4431-8741-f1ca0baa7453\tPset_MechanicalBeamInPlane.ReferenceDepth\tLENGTH\t\t415\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8570605c-c74b-4159-bb0c-e765566609df\tPset_MechanicalBeamInPlane.ShearModulus\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tbec719b5-1d8d-40fc-9306-66c23a906796\tPset_MechanicalBeamInPlane.ShearModulusMin\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t3d5b6975-a494-48a8-8993-246591d2b86b\tPset_MechanicalBeamInPlane.ShearStrength\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\t646a26f1-b475-479b-a984-06b84cafc677\tPset_MechanicalBeamInPlane.TensileStrength\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\t5aa01104-2653-476f-8650-d90bc8a03a3c\tPset_MechanicalBeamInPlane.TensileStrengthPerp\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\te5cf8c5f-4c45-421f-b8d5-c6ce18ff4a41\tPset_MechanicalBeamInPlane.TorsionalStrength\tNUMBER\t\t415\t1\tIfcPressureMeasure\t1\nPARAM\tf4c82283-9a3e-4133-9dee-fca529915a0c\tPset_MechanicalBeamInPlane.YoungModulus\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t5ac31b88-6699-48b8-8925-a20b05b1bd28\tPset_MechanicalBeamInPlane.YoungModulusMin\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\te29eff1b-1e98-4510-be35-58d04fb2db45\tPset_MechanicalBeamInPlane.YoungModulusPerp\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t91d9cbb9-2b23-49a5-9e57-ace8fd5fbbcd\tPset_MechanicalBeamInPlane.YoungModulusPerpMin\tNUMBER\t\t415\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t416\tPset_MechanicalBeamInPlaneNegative\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t49c26b40-96b5-4c31-b671-09a7fc84b361\tPset_MechanicalBeamInPlaneNegative.BendingStrength\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\tceb9c85b-5645-4260-92dd-ff3ed28e267b\tPset_MechanicalBeamInPlaneNegative.CompStrength\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\t32e4adb8-3746-4827-b860-5f1b576f9954\tPset_MechanicalBeamInPlaneNegative.CompStrengthPerp\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\t5b19f4bf-887b-402d-b183-e7705ccda8b7\tPset_MechanicalBeamInPlaneNegative.InstabilityFactors\tMULTILINETEXT\t\t416\t1\tPropertyTableValue\t1\nPARAM\tab446b06-bfab-45b2-895f-5a348269d379\tPset_MechanicalBeamInPlaneNegative.RaisedCompStrengthPerp\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\td92cbbff-27a8-4fa0-9498-b5d62db13105\tPset_MechanicalBeamInPlaneNegative.ReferenceDepth\tLENGTH\t\t416\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t077ed7a1-2adf-4726-8aa7-7dc636ed2472\tPset_MechanicalBeamInPlaneNegative.ShearModulus\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t7e9306f4-7529-4a24-a9d0-1b1531985c25\tPset_MechanicalBeamInPlaneNegative.ShearModulusMin\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tea7b0e23-3ef9-4ba7-bdcd-e8ddc9438ff9\tPset_MechanicalBeamInPlaneNegative.ShearStrength\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\t3736bea4-dbee-4976-a8c4-b1b0ae5729b8\tPset_MechanicalBeamInPlaneNegative.TensileStrength\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\t76a7884f-6dc5-4b5c-8498-b70e80a4c542\tPset_MechanicalBeamInPlaneNegative.TensileStrengthPerp\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\td4b8dcf2-e49f-435b-aef8-dfd0930599c7\tPset_MechanicalBeamInPlaneNegative.TorsionalStrength\tNUMBER\t\t416\t1\tIfcPressureMeasure\t1\nPARAM\t41f381fa-50b1-4728-825f-05a4cb3154e5\tPset_MechanicalBeamInPlaneNegative.YoungModulus\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t94dde06f-925c-4060-a000-67832f88f8bb\tPset_MechanicalBeamInPlaneNegative.YoungModulusMin\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t921a016d-72cc-47d6-8936-089bf18e51a9\tPset_MechanicalBeamInPlaneNegative.YoungModulusPerp\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tfc4ad0e1-7b7b-4233-ba23-b368197d4cbd\tPset_MechanicalBeamInPlaneNegative.YoungModulusPerpMin\tNUMBER\t\t416\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t417\tPset_MechanicalBeamOutOfPlane\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tee78d422-27ef-4fdd-a8a1-66d33b8c46fb\tPset_MechanicalBeamOutOfPlane.BendingStrength\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\td0604a6f-6f11-4316-9042-07f364345228\tPset_MechanicalBeamOutOfPlane.CompStrength\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\t2b336f11-82b1-462e-b1e4-1dee67071023\tPset_MechanicalBeamOutOfPlane.CompStrengthPerp\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\t5bee75dd-88e4-4163-92cf-ca7de50392e7\tPset_MechanicalBeamOutOfPlane.InstabilityFactors\tMULTILINETEXT\t\t417\t1\tPropertyTableValue\t1\nPARAM\td8bbce3d-9b28-4480-b9a4-00a149ce798f\tPset_MechanicalBeamOutOfPlane.RaisedCompStrengthPerp\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\t626c2c08-76f3-4ec4-a7b4-14ebbbffa1cc\tPset_MechanicalBeamOutOfPlane.ReferenceDepth\tLENGTH\t\t417\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2854deb8-7673-4758-b912-dd09f8416398\tPset_MechanicalBeamOutOfPlane.ShearModulus\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t6fc45276-ade6-4a31-a039-9d87383ddbcd\tPset_MechanicalBeamOutOfPlane.ShearModulusMin\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\taf2e13c5-2fd8-432c-b777-40f114bd1ee7\tPset_MechanicalBeamOutOfPlane.ShearStrength\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\t7f9c1940-2254-460c-99b7-90aad845f5ef\tPset_MechanicalBeamOutOfPlane.TensileStrength\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\t240817d5-1d70-46a7-bbad-629c6119e7c1\tPset_MechanicalBeamOutOfPlane.TensileStrengthPerp\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\t91078cef-46f1-4f75-93ae-69234df5236e\tPset_MechanicalBeamOutOfPlane.TorsionalStrength\tNUMBER\t\t417\t1\tIfcPressureMeasure\t1\nPARAM\tcb9154bf-735f-4588-ad0f-114ad0d5ae0c\tPset_MechanicalBeamOutOfPlane.YoungModulus\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t957db4c4-10f7-45b0-8f6a-2dafdf966494\tPset_MechanicalBeamOutOfPlane.YoungModulusMin\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t00f918d7-7bd3-4d28-a765-8584f087a695\tPset_MechanicalBeamOutOfPlane.YoungModulusPerp\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t32652501-c784-41a1-9bed-079184a5856c\tPset_MechanicalBeamOutOfPlane.YoungModulusPerpMin\tNUMBER\t\t417\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t418\tPset_MechanicalFastenerAnchorBolt\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tca0c8580-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerAnchorBolt.AnchorBoltDiameter\tLENGTH\t\t418\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc37e0e00-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerAnchorBolt.AnchorBoltLength\tLENGTH\t\t418\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td8f33800-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerAnchorBolt.AnchorBoltProtrusionLength\tLENGTH\t\t418\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td1cc2a00-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerAnchorBolt.AnchorBoltThreadLength\tLENGTH\t\t418\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t419\tPset_MechanicalFastenerBolt\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tff18d800-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.HeadShape\tTEXT\t\t419\t1\tIfcLabel\t1\nPARAM\t05a74f80-d1f1-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.KeyShape\tTEXT\t\t419\t1\tIfcLabel\t1\nPARAM\tf45e4300-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.NutsCount\tINTEGER\t\t419\t1\tIfcCountMeasure\t1\nPARAM\t0b9d3080-d1f1-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.NutShape\tTEXT\t\t419\t1\tIfcLabel\t1\nPARAM\te7d9ea80-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.ThreadDiameter\tLENGTH\t\t419\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tee686200-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.ThreadLength\tLENGTH\t\t419\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfa542400-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.WashersCount\tINTEGER\t\t419\t1\tIfcCountMeasure\t1\nPARAM\t1d7ed380-d1f1-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.WasherShape\tTEXT\t\t419\t1\tIfcLabel\t1\n#\nGROUP\t420\tPset_MechanicalFastenerCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t482e19c8-276b-41ed-b957-d1de040e5e61\tPset_MechanicalFastenerCommon.NominalDiameter\tLENGTH\t\t420\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7de3f008-a07a-4194-ba6c-4bf07a65334e\tPset_MechanicalFastenerCommon.NominalLength\tLENGTH\t\t420\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t421\tPset_MechanicalFastenerOCSFitting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9c4ae207-1994-40e3-a630-c37746b1d0e0\tPset_MechanicalFastenerOCSFitting.ManufacturingTechnology\tTEXT\t\t421\t1\tIfcLabel\t1\nPARAM\t9d8f3024-5b8a-42cc-9cf7-19aad15774e1\tPset_MechanicalFastenerOCSFitting.OCSFasteningType\tTEXT\t\t421\t1\tPEnum_OCSFasteningType\t1\n#\nGROUP\t422\tPset_MechanicalFastenerTypeRailFastening\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdeb4f54c-2877-49fc-9ee2-54373f340606\tPset_MechanicalFastenerTypeRailFastening.IsReducedResistanceFastening\tYESNO\t\t422\t1\tIfcBoolean\t1\nPARAM\tdaf85903-63ee-484a-bc4b-12c695102738\tPset_MechanicalFastenerTypeRailFastening.TechnicalStandard\tMULTILINETEXT\t\t422\t1\tIfcExternalReference\t1\nPARAM\tc95da3aa-52f9-4500-864b-60b5af429ae4\tPset_MechanicalFastenerTypeRailFastening.TrackFasteningElasticityType\tTEXT\t\t422\t1\tPEnum_TrackFasteningElasticityType\t1\n#\nGROUP\t423\tPset_MechanicalFastenerTypeRailJoint\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfe437df9-b829-485e-b0d2-d800caf948c0\tPset_MechanicalFastenerTypeRailJoint.AssemblyPlace\tTEXT\t\t423\t1\tPEnum_AssemblyPlace\t1\nPARAM\t4d596130-a46a-43cf-a257-c041b60c732d\tPset_MechanicalFastenerTypeRailJoint.IsCWRJoint\tYESNO\t\t423\t1\tIfcBoolean\t1\nPARAM\t6cfa1db7-5aa5-4871-98ff-e2255f324cd8\tPset_MechanicalFastenerTypeRailJoint.IsJointControlEquipment\tYESNO\t\t423\t1\tIfcBoolean\t1\nPARAM\tde3e761c-1a31-4c6c-8566-0b3571affa13\tPset_MechanicalFastenerTypeRailJoint.IsJointInsulated\tYESNO\t\t423\t1\tIfcBoolean\t1\nPARAM\t8ffea8d6-9937-4249-8c13-ba330089a377\tPset_MechanicalFastenerTypeRailJoint.IsLiftingBracketConnection\tYESNO\t\t423\t1\tIfcBoolean\t1\nPARAM\t42aac79d-0179-40d2-b11d-1408f80e6bc0\tPset_MechanicalFastenerTypeRailJoint.NumberOfScrews\tINTEGER\t\t423\t1\tIfcCountMeasure\t1\nPARAM\t1e62a13e-e4ee-444f-a373-cfd4ec67bfd3\tPset_MechanicalFastenerTypeRailJoint.RailGap\tLENGTH\t\t423\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tce2bc36d-38fc-4fd2-91eb-d143e6da5fe4\tPset_MechanicalFastenerTypeRailJoint.SleeperArrangement\tTEXT\t\t423\t1\tPEnum_SleeperArrangement\t1\n#\nGROUP\t424\tPset_MechanicalPanelInPlane\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9a160b3d-f523-42c0-bd23-6dd936b5ffa5\tPset_MechanicalPanelInPlane.BearingStrength\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\nPARAM\tf5f88910-7939-48d7-a3a3-a27e10b3ba12\tPset_MechanicalPanelInPlane.BendingStrength\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\nPARAM\t8ddc1722-e8cd-4ddb-b3c8-3651fd9e683a\tPset_MechanicalPanelInPlane.CompressiveStrength\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\nPARAM\t47836f51-ff6f-4738-acf8-9457eaa98627\tPset_MechanicalPanelInPlane.RaisedCompressiveStrength\tNUMBER\t\t424\t1\tIfcPressureMeasure\t1\nPARAM\ta8cdbfc4-c715-419b-8fbc-63c1159c28ee\tPset_MechanicalPanelInPlane.ReferenceDepth\tLENGTH\t\t424\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t48526df9-789b-47fe-a714-cc6ac518d2c7\tPset_MechanicalPanelInPlane.ShearModulus\tNUMBER\t\t424\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t76189f8e-d1ac-4992-baea-2bbef11ae878\tPset_MechanicalPanelInPlane.ShearStrength\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\nPARAM\tb725d71b-bb0b-4e53-8266-4ddd75024de4\tPset_MechanicalPanelInPlane.TensileStrength\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\nPARAM\t5f999df2-eca6-4070-a3f1-fcf32c1bf225\tPset_MechanicalPanelInPlane.YoungModulusBending\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\nPARAM\t262313de-2a07-445e-bc78-694801fd7e19\tPset_MechanicalPanelInPlane.YoungModulusCompression\tNUMBER\t\t424\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t52b477cd-3c2d-4fd0-a8f2-573060f2c2e7\tPset_MechanicalPanelInPlane.YoungModulusTension\tMULTILINETEXT\t\t424\t1\tPropertyTableValue\t1\n#\nGROUP\t425\tPset_MechanicalPanelOutOfPlane\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t791156b5-41f0-4d50-a2de-806c49768c59\tPset_MechanicalPanelOutOfPlane.BearingStrength\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\nPARAM\tb4564007-3407-427f-8c73-24430ac039af\tPset_MechanicalPanelOutOfPlane.BendingStrength\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\nPARAM\tc6e24dec-efd5-4f35-9ce8-f0e1315f96a8\tPset_MechanicalPanelOutOfPlane.CompressiveStrength\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\nPARAM\td1d52f8b-0de9-4422-bc80-7fd05d2235af\tPset_MechanicalPanelOutOfPlane.RaisedCompressiveStrength\tNUMBER\t\t425\t1\tIfcPressureMeasure\t1\nPARAM\ta1420895-d8d1-4689-88e1-a8d4842f9c37\tPset_MechanicalPanelOutOfPlane.ReferenceDepth\tLENGTH\t\t425\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfa40c1a2-2672-4bf9-8134-984dbd1002dc\tPset_MechanicalPanelOutOfPlane.ShearModulus\tNUMBER\t\t425\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t622110f3-b321-4a27-9f6c-c0b06afa95bd\tPset_MechanicalPanelOutOfPlane.ShearStrength\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\nPARAM\tc8f2efd6-83f6-476e-82dd-6ba44388b5ee\tPset_MechanicalPanelOutOfPlane.TensileStrength\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\nPARAM\t0ec36f01-c5a5-4459-a70d-bd9839a2a807\tPset_MechanicalPanelOutOfPlane.YoungModulusBending\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\nPARAM\t05bd5a0e-04a1-4f71-8e74-22b532190d8a\tPset_MechanicalPanelOutOfPlane.YoungModulusCompression\tNUMBER\t\t425\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t5932fa42-c521-476d-ae85-4f895da1b715\tPset_MechanicalPanelOutOfPlane.YoungModulusTension\tMULTILINETEXT\t\t425\t1\tPropertyTableValue\t1\n#\nGROUP\t426\tPset_MechanicalPanelOutOfPlaneNegative\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4e159de4-1cec-4b6c-8c3c-fcb796381eb1\tPset_MechanicalPanelOutOfPlaneNegative.BearingStrength\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\nPARAM\t9401f1b9-f21e-426c-8cbf-b0036c4daa07\tPset_MechanicalPanelOutOfPlaneNegative.BendingStrength\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\nPARAM\t0f86796b-bf5a-4432-bb91-d22d3cde9103\tPset_MechanicalPanelOutOfPlaneNegative.CompressiveStrength\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\nPARAM\t311f5c7d-065c-47e1-94a3-f4362ead8598\tPset_MechanicalPanelOutOfPlaneNegative.RaisedCompressiveStrength\tNUMBER\t\t426\t1\tIfcPressureMeasure\t1\nPARAM\t0fc6202d-e36c-40b2-9d3d-afb2da1b4b00\tPset_MechanicalPanelOutOfPlaneNegative.ReferenceDepth\tLENGTH\t\t426\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0bd62322-c7b6-49f6-9f68-ac3880322fce\tPset_MechanicalPanelOutOfPlaneNegative.ShearModulus\tNUMBER\t\t426\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tec1004f3-9c7b-4bc4-a17f-3ca0bcc811db\tPset_MechanicalPanelOutOfPlaneNegative.ShearStrength\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\nPARAM\tbc348d44-b25b-4c2d-96b2-3cc111406a45\tPset_MechanicalPanelOutOfPlaneNegative.TensileStrength\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\nPARAM\tce4c7408-5e0d-47f4-8e48-0a924648e7fc\tPset_MechanicalPanelOutOfPlaneNegative.YoungModulusBending\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\nPARAM\t204f0ba2-9df2-47ef-96c7-fdecbe226569\tPset_MechanicalPanelOutOfPlaneNegative.YoungModulusCompression\tNUMBER\t\t426\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tb0198ac5-7cb0-4595-bae9-ae6a44f465a3\tPset_MechanicalPanelOutOfPlaneNegative.YoungModulusTension\tMULTILINETEXT\t\t426\t1\tPropertyTableValue\t1\n#\nGROUP\t427\tPset_MedicalDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2a032c00-d1f1-11e1-8000-00215ad4efdf\tPset_MedicalDeviceTypeCommon.Reference\tTEXT\t\t427\t1\tIfcIdentifier\t1\nPARAM\t2ff90d00-d1f1-11e1-8000-00215ad4efdf\tPset_MedicalDeviceTypeCommon.Status\tTEXT\t\t427\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t428\tPset_MemberCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t80706a80-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.FireRating\tTEXT\t\t428\t1\tIfcLabel\t1\nPARAM\t6e8ec780-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.IsExternal\tYESNO\t\t428\t1\tIfcBoolean\t1\nPARAM\t7a7a8980-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.LoadBearing\tYESNO\t\t428\t1\tIfcBoolean\t1\nPARAM\t499a5480-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.Reference\tTEXT\t\t428\t1\tIfcIdentifier\t1\nPARAM\t69317d00-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.Roll\tNUMBER\t\t428\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t646cc900-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.Slope\tNUMBER\t\t428\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t5dde5180-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.Span\tLENGTH\t\t428\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4f903580-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.Status\tTEXT\t\t428\t1\tPEnum_ElementStatus\t1\nPARAM\t7484a880-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.ThermalTransmittance\tNUMBER\t\t428\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t429\tPset_MemberTypeAnchoringBar\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta1d40145-2534-446b-a9d2-13893b9d122b\tPset_MemberTypeAnchoringBar.HasLightningRod\tYESNO\t\t429\t1\tIfcBoolean\t1\nPARAM\t7f3ee041-2500-448a-8174-3219d1ab7711\tPset_MemberTypeAnchoringBar.MechanicalStressType\tTEXT\t\t429\t1\tPEnum_MechanicalStressType\t1\n#\nGROUP\t430\tPset_MemberTypeCatenaryStay\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8d143812-d9de-46c8-99fe-48fc378dc218\tPset_MemberTypeCatenaryStay.AssemblyInstruction\tMULTILINETEXT\t\t430\t1\tIfcExternalReference\t1\nPARAM\tb9966025-f281-421e-99cb-0a98039bae47\tPset_MemberTypeCatenaryStay.CatenaryStayType\tTEXT\t\t430\t1\tPEnum_CatenaryStayType\t1\nPARAM\td60e906b-9297-4f94-a2fa-00122335e0bc\tPset_MemberTypeCatenaryStay.NominalHeight\tLENGTH\t\t430\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t907def15-0180-478e-ba79-ae340f55c410\tPset_MemberTypeCatenaryStay.NominalLength\tLENGTH\t\t430\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t431\tPset_MemberTypeOCSRigidSupport\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc90bea72-162f-4290-a11a-a84945418cc5\tPset_MemberTypeOCSRigidSupport.AssemblyInstruction\tMULTILINETEXT\t\t431\t1\tIfcExternalReference\t1\nPARAM\td49c4b06-f4a3-4410-ab4a-9bcb9869d347\tPset_MemberTypeOCSRigidSupport.ContactWireStagger\tLENGTH\t\t431\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t432\tPset_MemberTypePost\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t833ecee9-f808-4739-b740-491b850a99e7\tPset_MemberTypePost.BendingStrength\tNUMBER\t\t432\t1\tIfcPressureMeasure\t1\nPARAM\t5f496918-1bac-402c-b636-e797a4c23120\tPset_MemberTypePost.ConicityRatio\tNUMBER\t\t432\t1\tIfcRatioMeasure\t1\nPARAM\t0ea8edf7-24cb-4adb-999e-98d08820c052\tPset_MemberTypePost.LoadBearingCapacity\tNUMBER\t\t432\t1\tIfcPlanarForceMeasure\t1\nPARAM\t9d8523e9-21db-46d4-a86f-4b4f6e9794e2\tPset_MemberTypePost.NominalHeight\tLENGTH\t\t432\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tc9f942e9-8065-4fe3-b2cd-4eae65335e16\tPset_MemberTypePost.TorsionalStrength\tNUMBER\t\t432\t1\tIfcPressureMeasure\t1\nPARAM\t34d408c0-d269-418d-827c-428691c7381f\tPset_MemberTypePost.WindLoadRating\tTEXT\t\t432\t1\tIfcLabel\t1\n#\nGROUP\t433\tPset_MemberTypeTieBar\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t51d5aab9-5866-48e2-8589-2f4af3289c0e\tPset_MemberTypeTieBar.IsTemporaryInstallation\tYESNO\t\t433\t1\tIfcBoolean\t1\n#\nGROUP\t434\tPset_MobileTelecommunicationsApplianceTypeAccessPoint\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te8404524-b378-4a94-b7de-73ca4910ef05\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.BandWidth\tNUMBER\t\t434\t1\tIfcFrequencyMeasure\t1\nPARAM\t3d350234-da62-40d7-9a26-4daad8f04357\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.DataEncryptionType\tTEXT\t\t434\t1\tIfcLabel\t1\nPARAM\tf8c64ad8-4f93-46b6-85b5-fdb163e43d63\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.DataExchangeRate\tINTEGER\t\t434\t1\tIfcIntegerCountRateMeasure\t1\nPARAM\t8cf6766f-cea0-4982-ac2d-322c9f5997d3\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.NumberOfAntennas\tINTEGER\t\t434\t1\tIfcCountMeasure\t1\nPARAM\tadb3c2ea-b0dc-4edb-a083-a11b6dbffe60\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.NumberOfInterfaces\tMULTILINETEXT\t\t434\t1\tPropertyTableValue\t1\nPARAM\t96e599ee-8faf-4c5d-84c5-14f9a226a1b9\tPset_MobileTelecommunicationsApplianceTypeAccessPoint.UserCapacity\tINTEGER\t\t434\t1\tIfcInteger\t1\n#\nGROUP\t435\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5de47739-22fc-4fdd-a66e-de7aaa373c74\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit.MaximumNumberOfRRUs\tINTEGER\t\t435\t1\tIfcInteger\t1\nPARAM\t72b3fe02-9ea5-4ca2-b069-f07235f6faf7\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit.NumberOfCarriers\tINTEGER\t\t435\t1\tIfcCountMeasure\t1\nPARAM\tdcca868a-7d10-42e4-aead-72fc41af1ead\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit.NumberOfEmergencyTransceivers\tINTEGER\t\t435\t1\tIfcCountMeasure\t1\nPARAM\tb829f099-fcaa-4ebd-91c0-dac779bb5ad1\tPset_MobileTelecommunicationsApplianceTypeBasebandUnit.NumberOfInterfaces\tMULTILINETEXT\t\t435\t1\tPropertyTableValue\t1\n#\nGROUP\t436\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc0cdf453-069d-42c6-b1e4-4ded55841fcc\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.DownlinkRadioBand\tMULTILINETEXT\t\t436\t1\tPropertyBoundedValue\t1\nPARAM\t33be4654-bfe2-4f19-b6c8-8744cfb5c5b6\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.ExchangeCapacity\tINTEGER\t\t436\t1\tIfcInteger\t1\nPARAM\t5bcdbe48-eb0e-49d2-85f7-4a3802f0b648\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfAntennas\tINTEGER\t\t436\t1\tIfcCountMeasure\t1\nPARAM\t9978d088-6046-4171-b7e6-84e9ef27f534\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfCarriers\tINTEGER\t\t436\t1\tIfcCountMeasure\t1\nPARAM\te311d8cf-89f6-49f5-b556-559cab2249c4\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfEmergencyTransceivers\tINTEGER\t\t436\t1\tIfcCountMeasure\t1\nPARAM\tb2288036-bb3d-4b36-a66f-399cc9184615\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfInterfaces\tMULTILINETEXT\t\t436\t1\tPropertyTableValue\t1\nPARAM\te5b477c3-000e-43e6-9056-5c487d194dce\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.NumberOfTransceiversPerAntenna\tMULTILINETEXT\t\t436\t1\tPropertyTableValue\t1\nPARAM\t0f95c582-85dc-4eac-b0e5-3eed6d08ecd2\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.RadiatedOutputPowerPerAntenna\tMULTILINETEXT\t\t436\t1\tPropertyTableValue\t1\nPARAM\ta2a7174d-9362-4595-9dbb-5b040c3cf4b9\tPset_MobileTelecommunicationsApplianceTypeBaseTransceiverStation.UplinkRadioBand\tMULTILINETEXT\t\t436\t1\tPropertyBoundedValue\t1\n#\nGROUP\t437\tPset_MobileTelecommunicationsApplianceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t64a94f73-c16e-42ea-86c0-e1e274ae9e36\tPset_MobileTelecommunicationsApplianceTypeCommon.Reference\tTEXT\t\t437\t1\tIfcIdentifier\t1\nPARAM\tdf5a7221-a980-46bc-b8e0-5c9f82a22d13\tPset_MobileTelecommunicationsApplianceTypeCommon.Status\tTEXT\t\t437\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t438\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t789e237a-82d5-4215-82ff-7db2bab26bd7\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.DownlinkRadioBand\tMULTILINETEXT\t\t438\t1\tPropertyBoundedValue\t1\nPARAM\t97dcd68d-c3fe-42a1-8936-b083dc07a265\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.NumberOfAntennas\tINTEGER\t\t438\t1\tIfcCountMeasure\t1\nPARAM\t2c8ed9c1-ea6d-477f-b2ab-d34f9a7f5f6a\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.NumberOfCarriers\tINTEGER\t\t438\t1\tIfcCountMeasure\t1\nPARAM\td5bc40c7-6867-4a31-bdc2-4976a3d25c22\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.NumberOfInterfaces\tMULTILINETEXT\t\t438\t1\tPropertyTableValue\t1\nPARAM\t54091cfb-9c10-460d-9809-397a9d3df3e1\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.RadiatedOutputPowerPerAntenna\tMULTILINETEXT\t\t438\t1\tPropertyTableValue\t1\nPARAM\ta8d5aa6d-e1e9-4efd-9cca-f79e76a3aac7\tPset_MobileTelecommunicationsApplianceTypeEUtranNodeB.UplinkRadioBand\tMULTILINETEXT\t\t438\t1\tPropertyBoundedValue\t1\n#\nGROUP\t439\tPset_MobileTelecommunicationsApplianceTypeMasterUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t41973d4f-537c-4c70-807b-bd0632384b4d\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.MasterUnitType\tTEXT\t\t439\t1\tPEnum_MasterUnitType\t1\nPARAM\t33e049f7-0dbc-40ed-9103-ebac10866222\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.MaximumNumberOfConnectedRUs\tINTEGER\t\t439\t1\tIfcInteger\t1\nPARAM\t0714f6e6-fc43-495b-823c-d5d032502af7\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.NumberOfInterfaces\tMULTILINETEXT\t\t439\t1\tPropertyTableValue\t1\nPARAM\t9d9b0eed-f4b7-4083-8fff-0cad0a200945\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmissionType\tTEXT\t\t439\t1\tPEnum_TransmissionType\t1\nPARAM\t274735c6-1dc6-4299-808a-c4b9aa1866b2\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmittedBandwidth\tNUMBER\t\t439\t1\tIfcFrequencyMeasure\t1\nPARAM\t645a85e2-547b-4418-bf6d-c62092c51ab1\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmittedFrequency\tNUMBER\t\t439\t1\tIfcFrequencyMeasure\t1\nPARAM\t3929997e-90ac-4544-b484-50f6d1ffab87\tPset_MobileTelecommunicationsApplianceTypeMasterUnit.TransmittedSignal\tTEXT\t\t439\t1\tPEnum_TransmittedSignal\t1\n#\nGROUP\t440\tPset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a4b5f3c-0705-44f4-b211-2abe5aab9365\tPset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter.MaximumNumberOfManagedBSCs\tINTEGER\t\t440\t1\tIfcInteger\t1\nPARAM\t16aa0c29-0ad2-4997-8fd9-8b88493977de\tPset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter.NumberOfInterfaces\tMULTILINETEXT\t\t440\t1\tPropertyTableValue\t1\nPARAM\ta2d9ee96-cd11-4c43-91d9-1f2886d89569\tPset_MobileTelecommunicationsApplianceTypeMobileSwitchingCenter.UserCapacity\tINTEGER\t\t440\t1\tIfcInteger\t1\n#\nGROUP\t441\tPset_MobileTelecommunicationsApplianceTypeMSCServer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb3656add-16fe-4d54-8fbf-2ee6785dedad\tPset_MobileTelecommunicationsApplianceTypeMSCServer.NumberOfInterfaces\tMULTILINETEXT\t\t441\t1\tPropertyTableValue\t1\nPARAM\t7ec6e92f-561e-49a2-ba94-49af51cfde6d\tPset_MobileTelecommunicationsApplianceTypeMSCServer.UserCapacity\tINTEGER\t\t441\t1\tIfcInteger\t1\n#\nGROUP\t442\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2586ab53-c6b1-4368-a2a3-10a197ba0ee6\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.AntennaType\tTEXT\t\t442\t1\tIfcLabel\t1\nPARAM\t1f258deb-0067-47a5-a3ad-85cf3726915b\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.DownlinkRadioBand\tMULTILINETEXT\t\t442\t1\tPropertyBoundedValue\t1\nPARAM\t8923ceef-d1d0-4499-85ac-4588d9b171d4\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.NumberOfCarriers\tINTEGER\t\t442\t1\tIfcCountMeasure\t1\nPARAM\tf408892e-9f0e-4f53-9040-7e62fee62ecf\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.NumberOfInterfaces\tMULTILINETEXT\t\t442\t1\tPropertyTableValue\t1\nPARAM\td4ac1a96-922b-41b7-97c7-b3701f4a59c0\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.NumberOfTransceiversPerAntenna\tMULTILINETEXT\t\t442\t1\tPropertyTableValue\t1\nPARAM\t0e9e2535-6d50-4564-b3ae-cf3d42517b35\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.RadiatedOutputPowerPerAntenna\tMULTILINETEXT\t\t442\t1\tPropertyTableValue\t1\nPARAM\t2c09452c-4fe0-4fb4-b987-e8daf5ed087b\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.RRUConnectionType\tTEXT\t\t442\t1\tPEnum_UnitConnectionType\t1\nPARAM\t355faa79-0680-4cce-bb6e-2ff2356584f8\tPset_MobileTeleCommunicationsApplianceTypeRemoteRadioUnit.UplinkRadioBand\tMULTILINETEXT\t\t442\t1\tPropertyBoundedValue\t1\n#\nGROUP\t443\tPset_MobileTelecommunicationsApplianceTypeRemoteUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta4c97fbe-55bd-47fd-a211-ad80564ce6d8\tPset_MobileTelecommunicationsApplianceTypeRemoteUnit.NumberOfAntennas\tINTEGER\t\t443\t1\tIfcCountMeasure\t1\nPARAM\tf937fc33-3fd4-43b3-b409-7433d90b7d34\tPset_MobileTelecommunicationsApplianceTypeRemoteUnit.NumberOfInterfaces\tMULTILINETEXT\t\t443\t1\tPropertyTableValue\t1\nPARAM\t04682ae5-5249-40c0-b8ac-c618d6d2c49e\tPset_MobileTelecommunicationsApplianceTypeRemoteUnit.RUConnectionType\tTEXT\t\t443\t1\tPEnum_UnitConnectionType\t1\n#\nGROUP\t444\tPset_MooringDeviceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfb25185b-99b7-4a0d-8a45-39bf3335152e\tPset_MooringDeviceCommon.AnchorageType\tTEXT\t\t444\t1\tPEnum_AnchorageType\t1\nPARAM\t9b98adbc-2bf3-47d2-b49c-30dca06d37fe\tPset_MooringDeviceCommon.DeviceCapacity\tNUMBER\t\t444\t1\tIfcForceMeasure\t1\nPARAM\t8f0b3bcc-7d9d-4af4-9bc3-5be3f2d88167\tPset_MooringDeviceCommon.DeviceType\tTEXT\t\t444\t1\tPEnum_MooringDeviceType\t1\nPARAM\t7700434d-4f3f-40be-bfc2-f183b5271ef4\tPset_MooringDeviceCommon.MaximumLineCount\tINTEGER\t\t444\t1\tIfcCountMeasure\t1\nPARAM\tcb40b5c6-7a29-4f3e-815a-3156874f962e\tPset_MooringDeviceCommon.MaximumLineSlope\tNUMBER\t\t444\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t2e1d9cad-580b-4e8f-b675-b0ac41527488\tPset_MooringDeviceCommon.MinumumLineSlope\tNUMBER\t\t444\t1\tIfcPlaneAngleMeasure\t1\n#\nGROUP\t445\tPset_MotorConnectionTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8c5c2c80-d1f1-11e1-8000-00215ad4efdf\tPset_MotorConnectionTypeCommon.Reference\tTEXT\t\t445\t1\tIfcIdentifier\t1\nPARAM\t92eaa400-d1f1-11e1-8000-00215ad4efdf\tPset_MotorConnectionTypeCommon.Status\tTEXT\t\t445\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t446\tPset_MultiStateInput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t06946206-f372-4270-bf63-d2ee539f364b\tPset_MultiStateInput.AlarmValues\tMULTILINETEXT\t\t446\t1\tPropertyListValue\t1\nPARAM\td57ee4b2-9ead-4f20-aed9-6a4076eff45c\tPset_MultiStateInput.EventEnable\tTEXT\t\t446\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\t3e46427b-9f2d-4d51-8c38-51ef898aad02\tPset_MultiStateInput.NotifyType\tTEXT\t\t446\t1\tPEnum_BACnetNotifyType\t1\nPARAM\t268c8786-f8c7-40d0-a202-fd5f0573ba62\tPset_MultiStateInput.NumberOfStates\tINTEGER\t\t446\t1\tIfcInteger\t1\nPARAM\t39b828fa-0532-4906-8f9a-7936b80f4719\tPset_MultiStateInput.StateText\tMULTILINETEXT\t\t446\t1\tPropertyListValue\t1\n#\nGROUP\t447\tPset_MultiStateOutput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t82975ab4-bae6-47f7-b124-2c50ad8135b9\tPset_MultiStateOutput.AlarmValues\tMULTILINETEXT\t\t447\t1\tPropertyListValue\t1\nPARAM\t1e7f2c86-1462-4b30-9262-c359911fe603\tPset_MultiStateOutput.EventEnable\tTEXT\t\t447\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\tf53a71ed-fe81-40dd-b12f-8e0e87de7781\tPset_MultiStateOutput.NotifyType\tTEXT\t\t447\t1\tPEnum_BACnetNotifyType\t1\nPARAM\t39232871-fc8b-4d48-881f-4e8584ca40db\tPset_MultiStateOutput.NumberOfStates\tINTEGER\t\t447\t1\tIfcInteger\t1\nPARAM\t2f892694-be57-42ce-af8b-e4e6606cb4e3\tPset_MultiStateOutput.StateText\tMULTILINETEXT\t\t447\t1\tPropertyListValue\t1\n#\nGROUP\t448\tPset_OnSiteCastKerb\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t46ac5b38-abe9-4e5b-ac0a-ae0d207ea928\tPset_OnSiteCastKerb.NominalHeight\tLENGTH\t\t448\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t04aeb6a4-5d10-441f-afbd-30298ab9854a\tPset_OnSiteCastKerb.NominalWidth\tLENGTH\t\t448\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t449\tPset_OnSiteTelecomControlUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t833a9f8d-ac42-4d33-b97e-55c8aebe11e1\tPset_OnSiteTelecomControlUnit.ControllerInterfaceType\tTEXT\t\t449\t1\tPEnum_ControllerInterfaceType\t1\nPARAM\t0bef247f-c990-44a7-8216-e011453951b2\tPset_OnSiteTelecomControlUnit.HasEarthquakeAlarm\tYESNO\t\t449\t1\tIfcBoolean\t1\nPARAM\t5fe731e4-4229-4a8a-b4df-844224ecd5a6\tPset_OnSiteTelecomControlUnit.HasEarthquakeCollection\tYESNO\t\t449\t1\tIfcBoolean\t1\nPARAM\t76d929f2-e857-439d-b6cf-b3a8f227d434\tPset_OnSiteTelecomControlUnit.HasForeignObjectCollection\tYESNO\t\t449\t1\tIfcBoolean\t1\nPARAM\t1489329d-f222-4594-ac0e-507f1bdaba34\tPset_OnSiteTelecomControlUnit.HasOutputFunction\tYESNO\t\t449\t1\tIfcBoolean\t1\nPARAM\tfaaa9591-79a8-48a7-bcc2-f5faee611b9f\tPset_OnSiteTelecomControlUnit.HasRainCollection\tYESNO\t\t449\t1\tIfcBoolean\t1\nPARAM\t9c97296a-7075-44f3-9e51-eee9e8bc2e77\tPset_OnSiteTelecomControlUnit.HasSnowCollection\tYESNO\t\t449\t1\tIfcBoolean\t1\nPARAM\t7926bea0-d9ec-43bb-96df-dd5a6c199150\tPset_OnSiteTelecomControlUnit.HasWindCollection\tYESNO\t\t449\t1\tIfcBoolean\t1\n#\nGROUP\t450\tPset_OpeningElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t41656e1a-f18d-4e8e-8737-f83dce2bc71d\tPset_OpeningElementCommon.AcousticRating\tTEXT\t\t450\t1\tIfcLabel\t1\nPARAM\tc0cfe880-d1f1-11e1-8000-00215ad4efdf\tPset_OpeningElementCommon.FireExit\tYESNO\t\t450\t1\tIfcBoolean\t1\nPARAM\t13f51b9f-f0c3-45b4-9dfe-c8daf70c7c68\tPset_OpeningElementCommon.FireRating\tTEXT\t\t450\t1\tIfcLabel\t1\nPARAM\t9bc90a19-6b9e-4d03-8ae3-1a4c88810da5\tPset_OpeningElementCommon.ParallelJambs\tNUMBER\t\t450\t1\tIfcBoolean \t1\nPARAM\tc7f6f680-d1f1-11e1-8000-00215ad4efdf\tPset_OpeningElementCommon.ProtectedOpening\tYESNO\t\t450\t1\tIfcBoolean\t1\nPARAM\tbada0780-d1f1-11e1-8000-00215ad4efdf\tPset_OpeningElementCommon.Purpose\tTEXT\t\t450\t1\tIfcLabel\t1\nPARAM\ta72ea100-d1f1-11e1-8000-00215ad4efdf\tPset_OpeningElementCommon.Reference\tTEXT\t\t450\t1\tIfcIdentifier\t1\nPARAM\tad248200-d1f1-11e1-8000-00215ad4efdf\tPset_OpeningElementCommon.Status\tTEXT\t\t450\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t451\tPset_OpticalAdapter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc99de81f-e4f0-464d-b8ed-764921347c0c\tPset_OpticalAdapter.FiberType\tTEXT\t\t451\t1\tPEnum_FiberType\t1\n#\nGROUP\t452\tPset_OpticalPigtail\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t68bf7713-4676-4ebb-b683-70d95f998163\tPset_OpticalPigtail.ConnectorType\tTEXT\t\t452\t1\tIfcLabel\t1\nPARAM\t42902e77-1ffa-4e84-b4e9-71f6e3e82d65\tPset_OpticalPigtail.FiberType\tTEXT\t\t452\t1\tPEnum_FiberType\t1\nPARAM\t5b91f936-45a0-41fa-9446-addde128524a\tPset_OpticalPigtail.JacketColour\tTEXT\t\t452\t1\tIfcLabel\t1\n#\nGROUP\t453\tPset_OpticalSplitter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8ba043c8-4675-43bf-998c-318ed8c7befb\tPset_OpticalSplitter.NumberOfBranches\tINTEGER\t\t453\t1\tIfcCountMeasure\t1\nPARAM\t4ee498a0-5ef6-4545-92e8-cfa2dc33f48f\tPset_OpticalSplitter.NumberOfInterfaces\tMULTILINETEXT\t\t453\t1\tPropertyTableValue\t1\nPARAM\t43c5def7-a152-4adf-9ec2-6f48a38851f3\tPset_OpticalSplitter.OpticalSplitterType\tTEXT\t\t453\t1\tPEnum_OpticalSplitterType\t1\n#\nGROUP\t454\tPset_OutletTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te826b580-d1f1-11e1-8000-00215ad4efdf\tPset_OutletTypeCommon.IsPluggableOutlet\tYESNO\t\t454\t1\tIfcLogical\t1\nPARAM\tf9dc44b0-33ee-47e8-adea-fbbbd20abdd8\tPset_OutletTypeCommon.NumberOfSockets\tINTEGER\t\t454\t1\tIfcCountMeasure\t1\nPARAM\td34a2200-d1f1-11e1-8000-00215ad4efdf\tPset_OutletTypeCommon.Reference\tTEXT\t\t454\t1\tIfcIdentifier\t1\nPARAM\td9400300-d1f1-11e1-8000-00215ad4efdf\tPset_OutletTypeCommon.Status\tTEXT\t\t454\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t455\tPset_OutsideDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1c9a7180-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.BuildingThermalExposure\tTEXT\t\t455\t1\tPEnum_BuildingThermalExposure\t1\nPARAM\t0e4c5580-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.CoolingDesignDay\tTEXT\t\t455\t1\tIfcDateTime\t1\nPARAM\t0391c080-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.CoolingDryBulb\tNUMBER\t\t455\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t08ef0b00-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.CoolingWetBulb\tNUMBER\t\t455\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tfecd0c80-d1f1-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.HeatingDesignDay\tTEXT\t\t455\t1\tIfcDateTime\t1\nPARAM\tf2e14a80-d1f1-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.HeatingDryBulb\tNUMBER\t\t455\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tf8d72b80-d1f1-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.HeatingWetBulb\tNUMBER\t\t455\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t27ed9d00-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.PrevailingWindDirection\tNUMBER\t\t455\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t2d4ae780-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.PrevailingWindVelocity\tNUMBER\t\t455\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t186e5400-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.WeatherDataDate\tTEXT\t\t455\t1\tIfcDateTime\t1\nPARAM\t13110980-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.WeatherDataStation\tTEXT\t\t455\t1\tIfcText\t1\n#\nGROUP\t456\tPset_PackingInstructions\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4eabd380-d1f2-11e1-8000-00215ad4efdf\tPset_PackingInstructions.ContainerMaterial\tMULTILINETEXT\t\t456\t1\tIfcMaterialDefinition\t1\nPARAM\t3b990380-d1f2-11e1-8000-00215ad4efdf\tPset_PackingInstructions.PackingCareType\tTEXT\t\t456\t1\tPEnum_PackingCareType\t1\nPARAM\t510e2d80-d1f2-11e1-8000-00215ad4efdf\tPset_PackingInstructions.SpecialInstructions\tTEXT\t\t456\t1\tIfcText\t1\nPARAM\t4784c580-d1f2-11e1-8000-00215ad4efdf\tPset_PackingInstructions.WrappingMaterial\tMULTILINETEXT\t\t456\t1\tIfcMaterialDefinition\t1\n#\nGROUP\t457\tPset_PatchCordCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t54cdf248-4b79-4f11-a360-1024d5469093\tPset_PatchCordCable.JacketColour\tTEXT\t\t457\t1\tIfcLabel\t1\n#\nGROUP\t458\tPset_PavementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td0beb644-67e8-4878-b576-d552ce3f8b66\tPset_PavementCommon.NominalLength\tLENGTH\t\t458\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tf99e81fa-8e16-4073-a616-7352a4567e1b\tPset_PavementCommon.NominalThickness\tLENGTH\t\t458\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\te6684fde-7be1-405d-858f-c93315b004a7\tPset_PavementCommon.NominalThicknessEnd\tLENGTH\t\t458\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t95902a1e-b6ac-4443-905c-24c000fe34be\tPset_PavementCommon.NominalWidth\tLENGTH\t\t458\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\td0c54b07-50b9-44dc-8372-c9fbf88659f3\tPset_PavementCommon.Reference\tTEXT\t\t458\t1\tIfcIdentifier\t1\nPARAM\t4fe9154a-1f56-48a0-9e27-6bfb599e4d62\tPset_PavementCommon.Status\tTEXT\t\t458\t1\tPEnum_ElementStatus\t1\nPARAM\t56d0524f-cfd0-42de-a343-0038435f91e5\tPset_PavementCommon.StructuralSlope\tNUMBER\t\t458\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tbcf00f46-a24c-4c82-ae6c-e16b2b9232fd\tPset_PavementCommon.StructuralSlopeType\tTEXT\t\t458\t1\tIfcLabel\t1\n#\nGROUP\t459\tPset_PavementMillingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7053bbbd-88d4-49a5-9406-ca8063908934\tPset_PavementMillingCommon.NominalDepth\tLENGTH\t\t459\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tfb24127f-6044-4304-a173-3ba876595301\tPset_PavementMillingCommon.NominalWidth\tLENGTH\t\t459\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t460\tPset_PavementSurfaceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6efb84d1-a33c-4419-a069-99aa7f7e3805\tPset_PavementSurfaceCommon.PavementRoughness\tNUMBER\t\t460\t1\tIfcNumericMeasure\t1\nPARAM\t653848fc-2ac9-4087-b207-1be8b114f487\tPset_PavementSurfaceCommon.PavementTexture\tLENGTH\t\t460\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t461\tPset_Permit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t697e4800-d1f2-11e1-8000-00215ad4efdf\tPset_Permit.EndDate\tTEXT\t\t461\t1\tIfcDateTime\t1\nPARAM\t43a6cf5a-d886-4e33-8217-70fa5a15347a\tPset_Permit.EndTime\tMULTILINETEXT\t\t461\t1\tIfcLocalTime\t1\nPARAM\t5d928600-d1f2-11e1-8000-00215ad4efdf\tPset_Permit.EscortRequirement\tYESNO\t\t461\t1\tIfcBoolean\t1\nPARAM\tdf2e0f34-de56-465e-850e-b1e1310de043\tPset_Permit.PermitDuration\tMULTILINETEXT\t\t461\t1\tIfcDateAndTime\t1\nPARAM\tb127896a-f396-4a16-b9eb-fe2c725cd8c4\tPset_Permit.PermitType\tTEXT\t\t461\t1\tPEnum_PermitType\t1\nPARAM\t6e42fc00-d1f2-11e1-8000-00215ad4efdf\tPset_Permit.SpecialRequirements\tTEXT\t\t461\t1\tIfcText\t1\nPARAM\t63886700-d1f2-11e1-8000-00215ad4efdf\tPset_Permit.StartDate\tTEXT\t\t461\t1\tIfcDateTime\t1\nPARAM\t2b372648-093e-4c6b-a1e2-c6f00f238313\tPset_Permit.StartTime\tMULTILINETEXT\t\t461\t1\tIfcLocalTime\t1\n#\nGROUP\t462\tPset_PileCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t663726ee-008e-4db4-9b6f-7b26952a1fe9\tPset_PileCommon.LoadBearing\tYESNO\t\t462\t1\tIfcBoolean\t1\nPARAM\t7d29ae80-d1f2-11e1-8000-00215ad4efdf\tPset_PileCommon.Reference\tTEXT\t\t462\t1\tIfcIdentifier\t1\nPARAM\t40a25a64-62f8-480a-9c49-ccb5cd0aa752\tPset_PileCommon.Status\tTEXT\t\t462\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t463\tPset_PipeConnection\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbba28a8f-29ed-440b-b20c-64a204d13a01\tPset_PipeConnection.ConnectionType\tMULTILINETEXT\t\t463\t1\tPropertyListValue\t1\n#\nGROUP\t464\tPset_PipeConnectionFlanged\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc57ff80-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.BoltholePitch\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb6621e80-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.BoltSize\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9a5e7d00-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.BoreSize\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta21e2180-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.FlangeDiameter\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t93d00580-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.FlangeStandard\tTEXT\t\t464\t1\tIfcLabel\t1\nPARAM\t8c106100-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.FlangeTable\tTEXT\t\t464\t1\tIfcLabel\t1\nPARAM\ta9ddc600-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.FlangeThickness\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t47798065-7040-4ed8-9074-83ff1cdffabd\tPset_PipeConnectionFlanged.Material\tMULTILINETEXT\t\t464\t1\tIfcMaterial\t1\nPARAM\tb104d400-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.NumberOfBoltholes\tINTEGER\t\t464\t1\tIfcCountMeasure\t1\n#\nGROUP\t465\tPset_PipeFittingOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td0036600-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingOccurrence.Color\tTEXT\t\t465\t1\tIfcLabel\t1\nPARAM\t0e802c8f-1b8b-4e06-84d4-f60ea29c0ca0\tPset_PipeFittingOccurrence.Colour\tTEXT\t\t465\t1\tIfcLabel\t1\nPARAM\tc974ee80-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingOccurrence.InteriorRoughnessCoefficient\tLENGTH\t\t465\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t466\tPset_PipeFittingPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te14c7280-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingPHistory.FlowrateLeakage\tMULTILINETEXT\t\t466\t1\tIfcTimeSeries\t1\nPARAM\tde518200-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingPHistory.LossCoefficient\tMULTILINETEXT\t\t466\t1\tIfcTimeSeries\t1\n#\nGROUP\t467\tPset_PipeFittingTypeBend\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ted383480-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeBend.BendAngle\tANGLE\t\t467\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\tf2957f00-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeBend.BendRadius\tLENGTH\t\t467\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t468\tPset_PipeFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t72066fc3-6915-4683-9076-ee6a09bc4b8d\tPset_PipeFittingTypeCommon.EndStyleTreatment\tMULTILINETEXT\t\t468\t1\tPropertyListValue\t1\nPARAM\t2d97b280-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeCommon.FittingLossFactor\tNUMBER\t\t468\t1\tIfcReal\t1\nPARAM\tc5a0ac18-b4a9-4baf-88c6-95f84e9cf21a\tPset_PipeFittingTypeCommon.InnerDiameter\tMULTILINETEXT\t\t468\t1\tPropertyListValue\t1\nPARAM\t4d6922b9-5d84-43a3-92c7-d44126653abc\tPset_PipeFittingTypeCommon.Material\tMULTILINETEXT\t\t468\t1\tIfcMaterial\t1\nPARAM\t790c81c6-25be-4aee-9c02-d5841948679f\tPset_PipeFittingTypeCommon.NominalDiameter\tMULTILINETEXT\t\t468\t1\tPropertyListValue\t1\nPARAM\tdaf417db-b39b-410e-9804-5a98cde3880b\tPset_PipeFittingTypeCommon.OuterDiameter\tMULTILINETEXT\t\t468\t1\tPropertyListValue\t1\nPARAM\t16f15b80-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeCommon.PressureClass\tNUMBER\t\t468\t1\tIfcPressureMeasure\t1\nPARAM\t1c4ea600-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeCommon.PressureRange\tMULTILINETEXT\t\t468\t1\tPropertyBoundedValue\t1\nPARAM\tffb26e00-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeCommon.Reference\tTEXT\t\t468\t1\tIfcIdentifier\t1\nPARAM\t05a84f00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeCommon.Status\tTEXT\t\t468\t1\tPEnum_ElementStatus\t1\nPARAM\tcff0339e-4840-4052-9f66-58e2b5db41f1\tPset_PipeFittingTypeCommon.SubType\tTEXT\t\t468\t1\tIfcLabel\t1\nPARAM\t25d80e00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeCommon.TemperatureRange\tMULTILINETEXT\t\t468\t1\tPropertyBoundedValue\t1\nPARAM\t94a3dfd1-ab01-4f4c-a3cb-de1c4d59ed16\tPset_PipeFittingTypeCommon.UnitWeight\tNUMBER\t\t468\t1\tIfcMassMeasure\t1\n#\nGROUP\t469\tPset_PipeFittingTypeJunction\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4607cd00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeJunction.JunctionLeftAngle\tANGLE\t\t469\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t4acc8100-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeJunction.JunctionLeftRadius\tLENGTH\t\t469\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5324bc00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeJunction.JunctionRightAngle\tANGLE\t\t469\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t57e97000-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeJunction.JunctionRightRadius\tLENGTH\t\t469\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t39837480-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeJunction.JunctionType\tTEXT\t\t469\t1\tPEnum_PipeFittingJunctionType\t1\n#\nGROUP\t470\tPset_PipeSegmentOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c2d6d00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentOccurrence.Color\tTEXT\t\t470\t1\tIfcLabel\t1\nPARAM\t71f7cebd-44a8-4067-a92d-7e03eedd5ba0\tPset_PipeSegmentOccurrence.Colour\tTEXT\t\t470\t1\tIfcLabel\t1\nPARAM\t73547b00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentOccurrence.Gradient\tNUMBER\t\t470\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t659ef580-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentOccurrence.InteriorRoughnessCoefficient\tLENGTH\t\t470\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t794a5c00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentOccurrence.InvertElevation\tLENGTH\t\t470\t1\tIfcLengthMeasure\t1\n#\nGROUP\t471\tPset_PipeSegmentPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t87987800-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentPHistory.FluidFlowLeakage\tMULTILINETEXT\t\t471\t1\tIfcTimeSeries\t1\nPARAM\t849d8780-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentPHistory.LeakageCurve\tMULTILINETEXT\t\t471\t1\tIfcTimeSeries\t1\n#\nGROUP\t472\tPset_PipeSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t050d69fe-9063-44c5-a9c7-cb88d3d3b222\tPset_PipeSegmentTypeCommon.EndStyleTreatment\tMULTILINETEXT\t\t472\t1\tPropertyListValue\t1\nPARAM\tc7f7f600-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.InnerDiameter\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te0502c63-fa86-45fe-825a-de8e360951f9\tPset_PipeSegmentTypeCommon.Length\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t202b07d9-ff90-448b-9561-3ebdb5e5bcee\tPset_PipeSegmentTypeCommon.Material\tMULTILINETEXT\t\t472\t1\tIfcMaterial\t1\nPARAM\tc0385180-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.NominalDiameter\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcf1f0400-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.OuterDiameter\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tadbe1800-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.PressureRange\tMULTILINETEXT\t\t472\t1\tPropertyBoundedValue\t1\nPARAM\t9121e000-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.Reference\tTEXT\t\t472\t1\tIfcIdentifier\t1\nPARAM\t97b05780-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.Status\tTEXT\t\t472\t1\tPEnum_ElementStatus\t1\nPARAM\tb7e01680-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.TemperatureRange\tMULTILINETEXT\t\t472\t1\tPropertyBoundedValue\t1\nPARAM\t9bf0aff8-2547-4fea-a950-48d18310cb5a\tPset_PipeSegmentTypeCommon.UnitWeight\tNUMBER\t\t472\t1\tIfcMassMeasure\t1\nPARAM\ta72fa080-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.WorkingPressure\tNUMBER\t\t472\t1\tIfcPressureMeasure\t1\n#\nGROUP\t473\tPset_PipeSegmentTypeCulvert\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te2ca6a80-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCulvert.ClearDepth\tLENGTH\t\t473\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdba35c80-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCulvert.InternalWidth\tLENGTH\t\t473\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t474\tPset_PipeSegmentTypeGutter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taebafc19-b6b8-42fa-b444-3d5869eec97d\tPset_PipeSegmentTypeGutter.Complementaryfunction\tTEXT\t\t474\t1\tPEnum_ComplementaryWorks\t1\nPARAM\tf4137700-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeGutter.FlowRating\tNUMBER\t\t474\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t9905def7-3aeb-4bdf-ab78-0f64a1865e3c\tPset_PipeSegmentTypeGutter.IsCovered\tYESNO\t\t474\t1\tIfcBoolean\t1\nPARAM\t65857a98-6771-4f76-97ca-60427d22f57f\tPset_PipeSegmentTypeGutter.IsMonitored\tYESNO\t\t474\t1\tIfcBoolean\t1\nPARAM\t00394cfe-e55e-401f-9746-3d0feef053cf\tPset_PipeSegmentTypeGutter.OrthometricHeight\tLENGTH\t\t474\t1\tIfcLengthMeasure\t1\nPARAM\teeb62c80-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeGutter.Slope\tNUMBER\t\t474\t1\tIfcPlaneAngleMeasure\t1\n#\nGROUP\t475\tPset_PlateCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t24f3ac00-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.AcousticRating\tTEXT\t\t475\t1\tIfcLabel\t1\nPARAM\t2c1aba00-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.FireRating\tTEXT\t\t475\t1\tIfcLabel\t1\nPARAM\t186f5380-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.IsExternal\tYESNO\t\t475\t1\tIfcBoolean\t1\nPARAM\t1e653480-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.LoadBearing\tYESNO\t\t475\t1\tIfcBoolean\t1\nPARAM\t02fa2980-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.Reference\tTEXT\t\t475\t1\tIfcIdentifier\t1\nPARAM\t08f00a80-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.Status\tTEXT\t\t475\t1\tPEnum_ElementStatus\t1\nPARAM\t31780480-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.ThermalTransmittance\tNUMBER\t\t475\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t476\tPset_PointMachine\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2abf6389-8b41-467d-9776-57fc4e138bca\tPset_PointMachine.ActionBarMovementLength\tLENGTH\t\t476\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf42fcc9d-d9ab-4cb4-9583-6d30f5be68d5\tPset_PointMachine.ConversionTime\tNUMBER\t\t476\t1\tIfcTimeMeasure\t1\nPARAM\t7280443f-71ca-4400-9ac8-db88b31b2203\tPset_PointMachine.Current\tMULTILINETEXT\t\t476\t1\tPropertyBoundedValue\t1\nPARAM\teb2e45d4-4e54-4615-87fd-0b4e0be149f8\tPset_PointMachine.HasLockInside\tYESNO\t\t476\t1\tIfcBoolean\t1\nPARAM\ta56044c6-01ad-4986-9671-ac903d34dec9\tPset_PointMachine.LockingForce\tNUMBER\t\t476\t1\tIfcForceMeasure\t1\nPARAM\tdb72e65b-d883-4ad6-9bff-c892259741b9\tPset_PointMachine.MarkingRodMovementLength\tLENGTH\t\t476\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8d7a6b71-660e-4c04-a7f1-73e8b0f0471c\tPset_PointMachine.MaximumOperatingTime\tNUMBER\t\t476\t1\tIfcTimeMeasure\t1\nPARAM\tb91725e3-16c8-4403-be41-8d92502621fb\tPset_PointMachine.MinimumOperatingSpeed\tNUMBER\t\t476\t1\tIfcAngularVelocityMeasure\t1\nPARAM\t1db6490f-b4c8-478a-9488-c7ffc727f821\tPset_PointMachine.TractionForce\tNUMBER\t\t476\t1\tIfcForceMeasure\t1\n#\nGROUP\t477\tPset_PowerControlSystem\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1aa33244-7ff3-458f-89c5-0a015bcd842a\tPset_PowerControlSystem.AssemblyInstruction\tMULTILINETEXT\t\t477\t1\tIfcExternalReference\t1\n#\nGROUP\t478\tPset_PrecastConcreteElementFabrication\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t72701900-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.ActualErectionDate\tTEXT\t\t478\t1\tIfcDateTime\t1\nPARAM\t6dab6500-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.ActualProductionDate\tTEXT\t\t478\t1\tIfcDateTime\t1\nPARAM\t671ced80-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.AsBuiltLocationNumber\tTEXT\t\t478\t1\tIfcLabel\t1\nPARAM\t608e7600-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.PieceMark\tTEXT\t\t478\t1\tIfcLabel\t1\nPARAM\t4359a780-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.ProductionLotId\tTEXT\t\t478\t1\tIfcIdentifier\t1\nPARAM\t48b6f200-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.SerialNumber\tTEXT\t\t478\t1\tIfcIdentifier\t1\nPARAM\tde7ef714-d332-405a-acd2-6af8a8750718\tPset_PrecastConcreteElementFabrication.TypeDesignation\tTEXT\t\t478\t1\tIfcLabel\t1\nPARAM\t3d63c680-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.TypeDesignator\tTEXT\t\t478\t1\tIfcLabel\t1\n#\nGROUP\t479\tPset_PrecastConcreteElementGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t00e49a80-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.BatterAtEnd\tNUMBER\t\t479\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tfb875000-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.BatterAtStart\tNUMBER\t\t479\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tf6c29c00-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.CamberAtMidspan\tNUMBER\t\t479\t1\tIfcRatioMeasure\t1\nPARAM\taba88900-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.CornerChamfer\tLENGTH\t\t479\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t18238800-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.DesignLocationNumber\tTEXT\t\t479\t1\tIfcLabel\t1\nPARAM\t24c4fdd7-9785-4d8c-bb8a-4cba7939d3bc\tPset_PrecastConcreteElementGeneral.ElementGrossVolume\tVOLUME\t\t479\t1\tIfcVolumeMeasure\t1\nPARAM\t56c060ae-8bf5-4262-87f6-ea1a08edf7d3\tPset_PrecastConcreteElementGeneral.ElementNetVolume\tVOLUME\t\t479\t1\tIfcVolumeMeasure\t1\nPARAM\taf9aef6a-7ab6-4e99-9bf6-1088bc6b877b\tPset_PrecastConcreteElementGeneral.ElementWeight\tNUMBER\t\t479\t1\tIfcMassMeasure\t1\nPARAM\tbb27d200-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.FormStrippingStrength\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\nPARAM\tf0342480-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.HollowCorePlugging\tTEXT\t\t479\t1\tIfcLabel\t1\nPARAM\td5fa4680-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.InitialTension\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\nPARAM\tc1b64980-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.LiftingStrength\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\nPARAM\tb4995a80-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.ManufacturingToleranceClass\tTEXT\t\t479\t1\tIfcLabel\t1\nPARAM\tcf6bcf00-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.MinimumAllowableSupportLength\tLENGTH\t\t479\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t122da700-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.PieceMark\tTEXT\t\t479\t1\tIfcLabel\t1\nPARAM\t310248ab-f1a7-4743-b5ab-a8fe75b01e84\tPset_PrecastConcreteElementGeneral.ProductionLotId\tTEXT\t\t479\t1\tIfcIdentifier\t1\nPARAM\tc975ee00-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.ReleaseStrength\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\nPARAM\t38b2064d-7085-40c9-812b-206ea7dab388\tPset_PrecastConcreteElementGeneral.SerialNumber\tTEXT\t\t479\t1\tIfcIdentifier\t1\nPARAM\t0c37c600-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.Shortening\tNUMBER\t\t479\t1\tIfcRatioMeasure\t1\nPARAM\te7435300-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.SupportDuringTransportDescription\tTEXT\t\t479\t1\tIfcText\t1\nPARAM\ted393400-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.SupportDuringTransportDocReference\tMULTILINETEXT\t\t479\t1\tIfcExternalReference\t1\nPARAM\tdbf02780-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.TendonRelaxation\tNUMBER\t\t479\t1\tIfcPositiveRatioMeasure\t1\nPARAM\te14d7200-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.TransportationStrength\tNUMBER\t\t479\t1\tIfcPressureMeasure\t1\nPARAM\t06da7b80-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.Twisting\tNUMBER\t\t479\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tfacb7dfc-8fd0-4e6f-8f2f-4d7b81823c47\tPset_PrecastConcreteElementGeneral.TypeDesignation\tTEXT\t\t479\t1\tIfcLabel\t1\nPARAM\t94699b80-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.TypeDesignator\tTEXT\t\t479\t1\tIfcLabel\t1\n#\nGROUP\t480\tPset_PrecastKerbStone\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0fd10924-b1a9-4435-b765-ffb9942e4238\tPset_PrecastKerbStone.NominalHeight\tLENGTH\t\t480\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t2cb149e9-f1d8-4b59-be0f-b0ed8b1a4584\tPset_PrecastKerbStone.NominalLength\tLENGTH\t\t480\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t9b842aea-74f2-42f0-adb6-95cfc4ea274e\tPset_PrecastKerbStone.NominalWidth\tLENGTH\t\t480\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t135d2776-2f10-4c69-a70e-1956ea0d1ece\tPset_PrecastKerbStone.TypeDesignation\tTEXT\t\t480\t1\tIfcLabel\t1\n#\nGROUP\t481\tPset_PrecastSlab\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4ef99e00-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.AngleBetweenComponentAxes\tNUMBER\t\t481\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t4a34ea00-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.AngleToFirstAxis\tNUMBER\t\t481\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t430ddc00-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.DistanceBetweenComponentAxes\tLENGTH\t\t481\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3c7f6480-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.EdgeDistanceToFirstAxis\tLENGTH\t\t481\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5456e880-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.NominalThickness\tLENGTH\t\t481\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t5b7df680-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.NominalToppingThickness\tLENGTH\t\t481\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t36898380-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.ToppingType\tTEXT\t\t481\t1\tIfcLabel\t1\nPARAM\t6b7fd580-d5c4-4af3-a416-3d075d0e8884\tPset_PrecastSlab.TypeDesignation\tTEXT\t\t481\t1\tIfcLabel\t1\nPARAM\t2ffb0c00-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.TypeDesignator\tTEXT\t\t481\t1\tIfcLabel\t1\n#\nGROUP\t482\tPset_ProcessCapacity\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td4337888-8b09-4cc8-b48b-6366ebba80ea\tPset_ProcessCapacity.DownstreamConnections\tMULTILINETEXT\t\t482\t1\tPropertyListValue\t1\nPARAM\tf94099cd-7449-45fd-a31b-3e8712f409d3\tPset_ProcessCapacity.ProcessCapacity\tINTEGER\t\t482\t1\tIfcCountMeasure\t1\nPARAM\t7fc40cbf-ac77-44d1-b7e4-448e80374366\tPset_ProcessCapacity.ProcessItem\tTEXT\t\t482\t1\tPEnum_ProcessItem\t1\nPARAM\t8571f269-4040-46c4-b2b3-64a8512307d4\tPset_ProcessCapacity.ProcessPerformance\tTEXT\t\t482\t1\tIfcDuration\t1\nPARAM\t13c29d48-5a1e-44b8-9695-bd02d4630d73\tPset_ProcessCapacity.UpstreamConnections\tMULTILINETEXT\t\t482\t1\tPropertyListValue\t1\n#\nGROUP\t483\tPset_ProductRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t66e384ca-d5a5-4927-b728-717c5093378c\tPset_ProductRequirements.Category\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t95b0c0ea-ca1c-4e31-993b-76c3e5ac4a91\tPset_ProductRequirements.Classification\tMULTILINETEXT\t\t483\t1\tIfcClassificationReference\t1\nPARAM\t07fefd08-bcc0-4ce5-8fb2-7855f71bcfbf\tPset_ProductRequirements.DemandImportanceValue\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t70f43e42-ea40-48e5-8b3a-8255536dcdca\tPset_ProductRequirements.DemandThresholdValue\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\tb6b0fb82-6b6b-471b-a74e-aea02456a6c3\tPset_ProductRequirements.DemandValue\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t4be6415b-2ea1-4bee-b2f9-099c8f161a4b\tPset_ProductRequirements.GapValue\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t1224b4fc-efd5-4db7-b2d3-05654d4d1883\tPset_ProductRequirements.GapValueWeighted\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t22f51d81-5d8e-48c9-9be9-2dd8630e6391\tPset_ProductRequirements.GroupName\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\t2cf45bdd-0879-46d4-b4ba-0d109d3f2fca\tPset_ProductRequirements.Name\tTEXT\t\t483\t1\tIfcLabel\t1\nPARAM\tc3713f2a-c757-40d8-aa9a-bc184db00e67\tPset_ProductRequirements.SupplyEvaluationValue\tTEXT\t\t483\t1\tIfcLabel\t1\n#\nGROUP\t484\tPset_ProfileArbitraryDoubleT\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t98e28400-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.FlangeBaseFillet\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t92540c80-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.FlangeChamfer\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t849e8700-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.FlangeDepth\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8cf6c200-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.FlangeDraft\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t9e3fce80-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.FlangeTopFillet\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t705a8a00-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.LeftFlangeWidth\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7e100f80-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.OverallDepth\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t69337c00-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.OverallWidth\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t77819800-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.RightFlangeWidth\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb0ba0800-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.StemBaseChamfer\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tbc0d3380-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.StemBaseFillet\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\ta39d1900-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.StemBaseWidth\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb6175280-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.StemTopChamfer\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tc0d1e780-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.StemTopFillet\tLENGTH\t\t484\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\taa2b9080-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.StemTopWidth\tLENGTH\t\t484\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t485\tPset_ProfileArbitraryHollowCore\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te959e180-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.BaseChamfer\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tfc6cb180-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.BottomCover\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t363db800-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CenterCoreBaseHeight\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4bb2e200-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CenterCoreBaseWidth\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3d64c600-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CenterCoreMiddleHeight\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2de57d00-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CenterCoreSpacing\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t448bd400-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CenterCoreTopHeight\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t53728680-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CenterCoreTopWidth\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0b536400-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CoreBaseHeight\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t202ff780-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CoreBaseWidth\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t11e1db80-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CoreMiddleHeight\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t042c5600-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CoreSpacing\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1908e980-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CoreTopHeight\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t26be6f00-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CoreTopWidth\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdf37e300-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.DraftBaseOffset\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\te3fc9700-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.DraftSideOffset\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tda732f00-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.EdgeDraft\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tee1e9580-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.KeyDepth\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tf2e34980-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.KeyHeight\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tf7a7fd80-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.KeyOffset\tLENGTH\t\t485\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t5a999480-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.NumberOfCores\tINTEGER\t\t485\t1\tIfcCountMeasure\t1\nPARAM\td34c2100-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.OverallDepth\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tccbda980-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.OverallWidth\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t486\tPset_ProfileMechanical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8a489c80-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.CentreOfGravityInX\tLENGTH\t\t486\t1\tIfcLengthMeasure\t1\nPARAM\t92084100-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.CentreOfGravityInY\tLENGTH\t\t486\t1\tIfcLengthMeasure\t1\nPARAM\t6ab17400-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.CrossSectionArea\tAREA\t\t486\t1\tIfcAreaMeasure\t1\nPARAM\t65ecc000-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MassPerLength\tNUMBER\t\t486\t1\tIfcMassPerLengthMeasure\t1\nPARAM\t80bf3480-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MaximumPlateThickness\tLENGTH\t\t486\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te14e7180-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MaximumSectionModulusY\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\nPARAM\tf3301480-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MaximumSectionModulusZ\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\nPARAM\t769d3600-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MinimumPlateThickness\tLENGTH\t\t486\t1\tIfcPositiveLengthMeasure\t1\nPARAM\teb707000-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MinimumSectionModulusY\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\nPARAM\tf9be8c00-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MinimumSectionModulusZ\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\nPARAM\ta5b3a780-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MomentOfInertiaY\tNUMBER\t\t486\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\tb532f080-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MomentOfInertiaYZ\tNUMBER\t\t486\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\tad734c00-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MomentOfInertiaZ\tNUMBER\t\t486\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\t700ebe80-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.Perimeter\tLENGTH\t\t486\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1d81d200-d1f7-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.PlasticShapeFactorY\tNUMBER\t\t486\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t25417680-d1f7-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.PlasticShapeFactorZ\tNUMBER\t\t486\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t14910080-d1f7-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.ShearAreaY\tAREA\t\t486\t1\tIfcAreaMeasure\t1\nPARAM\t0ba02f00-d1f7-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.ShearAreaZ\tAREA\t\t486\t1\tIfcAreaMeasure\t1\nPARAM\t9fbdc680-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.ShearCentreY\tLENGTH\t\t486\t1\tIfcLengthMeasure\t1\nPARAM\t992f4f00-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.ShearCentreZ\tLENGTH\t\t486\t1\tIfcLengthMeasure\t1\nPARAM\td7c50980-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.ShearDeformationAreaY\tAREA\t\t486\t1\tIfcAreaMeasure\t1\nPARAM\td0056500-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.ShearDeformationAreaZ\tAREA\t\t486\t1\tIfcAreaMeasure\t1\nPARAM\tbd8b2b80-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.TorsionalConstantX\tNUMBER\t\t486\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\t0216c700-d1f7-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.TorsionalSectionModulus\tNUMBER\t\t486\t1\tIfcSectionModulusMeasure\t1\nPARAM\tc5e36680-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.WarpingConstant\tNUMBER\t\t486\t1\tIfcWarpingConstantMeasure\t1\n#\nGROUP\t487\tPset_ProjectCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tceb73d71-7154-49dd-8b10-8308bf2e80c9\tPset_ProjectCommon.BuildingPermitId\tTEXT\t\t487\t1\tIfcIdentifier\t1\nPARAM\t6c15781d-cf45-4228-ac7a-1679f66227fd\tPset_ProjectCommon.ConstructionMode\tTEXT\t\t487\t1\tIfcLabel\t1\nPARAM\t92cc4fc3-329f-46e3-a324-871c860116b7\tPset_ProjectCommon.FundingSource\tTEXT\t\t487\t1\tIfcLabel\t1\nPARAM\tf13def40-9e89-48cb-82d8-587a338578a1\tPset_ProjectCommon.GrossAreaPlanned\tAREA\t\t487\t1\tIfcAreaMeasure\t1\nPARAM\t27bd20c8-e4ef-4ea1-a79a-cfc26f1007f9\tPset_ProjectCommon.NetEarnedValue\tMULTILINETEXT\t\t487\t1\tIfcCostValue\t1\nPARAM\ta36a01b1-e37c-4d0c-88a1-531bd93a17c8\tPset_ProjectCommon.PaybackPeriod\tTEXT\t\t487\t1\tIfcDuration\t1\nPARAM\t9de30d4c-a40d-4afd-85b2-5fdb60d3a627\tPset_ProjectCommon.ProjectInvestmentEstimate\tMULTILINETEXT\t\t487\t1\tIfcCostValue\t1\nPARAM\t25b32afa-42c7-4ca1-9466-7c5749975e82\tPset_ProjectCommon.ProjectType\tTEXT\t\t487\t1\tPEnum_ProjectType\t1\nPARAM\t4b5de076-eb07-456b-a4c5-1060eb5ad01e\tPset_ProjectCommon.ROI\tNUMBER\t\t487\t1\tIfcRatioMeasure\t1\n#\nGROUP\t488\tPset_ProjectionElementShadingDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9a9e8197-1098-4d3e-878d-915c477ad61d\tPset_ProjectionElementShadingDevice.Color\tTEXT\t\t488\t1\tIfcLabel\t1\n#\nGROUP\t489\tPset_ProjectionElementShadingDevicePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t33d852b7-3ccd-4a99-8bdc-403d555a9fb2\tPset_ProjectionElementShadingDevicePHistory.Azimuth\tTEXT\t\t489\t1\tIfcLabel\t1\nPARAM\t6397c3ef-fb25-4d65-ba93-0cc882a5d77c\tPset_ProjectionElementShadingDevicePHistory.TiltAngle\tNUMBER\t\t489\t1\tIfcReal\t1\n#\nGROUP\t490\tPset_ProjectionElementTypeShadingDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4aaec5cb-0ed1-4960-a869-b3417d1cae1e\tPset_ProjectionElementTypeShadingDevice.AverageSolarTransmittance\tNUMBER\t\t490\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1ea25fad-145a-4973-a243-11c3be2f0b82\tPset_ProjectionElementTypeShadingDevice.AverageVisibleTransmittance\tNUMBER\t\t490\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td13c8c5f-d9cc-4e7c-b75f-42a6beac7dd5\tPset_ProjectionElementTypeShadingDevice.Color\tTEXT\t\t490\t1\tIfcLabel\t1\nPARAM\t7a329628-4329-4dcb-9b37-4baf927f2c3a\tPset_ProjectionElementTypeShadingDevice.Material\tMULTILINETEXT\t\t490\t1\tIfcMaterial\t1\nPARAM\t36c56b6f-8e3a-4a0f-ba13-f5235305db0f\tPset_ProjectionElementTypeShadingDevice.Reflectance\tNUMBER\t\t490\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td1d74276-a136-457c-927b-e3d038a76d5b\tPset_ProjectionElementTypeShadingDevice.Roughness\tLENGTH\t\t490\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfa92caa7-a81c-4c51-b37d-aafa5a71aaac\tPset_ProjectionElementTypeShadingDevice.ShadingDeviceType\tTEXT\t\t490\t1\tPEnum_ProjectionElementShadingDeviceType\t1\nPARAM\t263c279e-df3e-4426-a641-b44f7732c928\tPset_ProjectionElementTypeShadingDevice.TiltRange\tMULTILINETEXT\t\t490\t1\tPropertyBoundedValue\t1\n#\nGROUP\t491\tPset_ProjectOrderChangeOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t42764500-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderChangeOrder.BudgetSource\tTEXT\t\t491\t1\tIfcText\t1\nPARAM\t6c48b958-8e1d-4173-bfb0-8b9877cabe66\tPset_ProjectOrderChangeOrder.ChangeDescription\tTEXT\t\t491\t1\tIfcText\t1\nPARAM\t38ecdd00-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderChangeOrder.ReasonForChange\tTEXT\t\t491\t1\tIfcText\t1\n#\nGROUP\t492\tPset_ProjectOrderMaintenanceWorkOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t65085e00-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.ContractualType\tTEXT\t\t492\t1\tIfcText\t1\nPARAM\t93863900-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.FaultPriorityType\tTEXT\t\t492\t1\tPEnum_PriorityType\t1\nPARAM\t6e91c600-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.IfNotAccomplished\tTEXT\t\t492\t1\tIfcText\t1\nPARAM\ta8fb6300-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.LocationPriorityType\tTEXT\t\t492\t1\tPEnum_PriorityType\t1\nPARAM\t8c86df8b-e29f-404d-9098-6da680baf4b7\tPset_ProjectOrderMaintenanceWorkOrder.LongJobDescription\tTEXT\t\t492\t1\tIfcText\t1\nPARAM\t781b2e00-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.MaintenaceType\tTEXT\t\t492\t1\tPEnum_MaintenanceType\t1\nPARAM\t7af97f1f-cb8f-453c-b6f3-f03ad25e6e74\tPset_ProjectOrderMaintenanceWorkOrder.MaintenanceType\tTEXT\t\t492\t1\tPEnum_MaintenanceType\t1\nPARAM\t53bf5180-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.ProductDescription\tTEXT\t\t492\t1\tIfcText\t1\nPARAM\tbfa1ba00-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.ScheduledFrequency\tNUMBER\t\t492\t1\tIfcTimeMeasure\t1\nPARAM\teb8d31dd-52c3-4378-8791-8d86d0fef601\tPset_ProjectOrderMaintenanceWorkOrder.ShortJobDescription\tTEXT\t\t492\t1\tIfcText\t1\nPARAM\t5c178c80-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.WorkTypeRequested\tTEXT\t\t492\t1\tIfcText\t1\n#\nGROUP\t493\tPset_ProjectOrderMoveOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t10c2a97f-e5f5-452c-934b-c8b0e868adb6\tPset_ProjectOrderMoveOrder.MoveDescription\tTEXT\t\t493\t1\tIfcText\t1\nPARAM\tcfb99980-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMoveOrder.SpecialInstructions\tTEXT\t\t493\t1\tIfcText\t1\n#\nGROUP\t494\tPset_ProjectOrderPurchaseOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te3650000-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderPurchaseOrder.IsFOB\tYESNO\t\t494\t1\tIfcBoolean\t1\nPARAM\tebbd3b00-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderPurchaseOrder.ShipMethod\tTEXT\t\t494\t1\tIfcText\t1\n#\nGROUP\t495\tPset_ProjectOrderWorkOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0f808100-d1f8-11e1-8000-00215ad4efdf\tPset_ProjectOrderWorkOrder.ContractualType\tTEXT\t\t495\t1\tIfcText\t1\nPARAM\t18715280-d1f8-11e1-8000-00215ad4efdf\tPset_ProjectOrderWorkOrder.IfNotAccomplished\tTEXT\t\t495\t1\tIfcText\t1\nPARAM\tfc0770e3-db46-4761-8824-b468395bcf3d\tPset_ProjectOrderWorkOrder.LongJobDescription\tTEXT\t\t495\t1\tIfcText\t1\nPARAM\tfe377480-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderWorkOrder.ProductDescription\tTEXT\t\t495\t1\tIfcText\t1\nPARAM\t42dfe791-a84c-4b84-84ae-8883359b84bd\tPset_ProjectOrderWorkOrder.ShortJobDescription\tTEXT\t\t495\t1\tIfcText\t1\nPARAM\t07284600-d1f8-11e1-8000-00215ad4efdf\tPset_ProjectOrderWorkOrder.WorkTypeRequested\tTEXT\t\t495\t1\tIfcText\t1\n#\nGROUP\t496\tPset_PropertyAgreement\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc995ce42-37ef-4c80-920b-b4aaeed19a04\tPset_PropertyAgreement.AgreementDate\tTEXT\t\t496\t1\tIfcDate\t1\nPARAM\t2c1cb900-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.AgreementType\tTEXT\t\t496\t1\tPEnum_PropertyAgreementType\t1\nPARAM\te2de1d50-ab4a-4ace-bca7-91495218f426\tPset_PropertyAgreement.AgreementVersion\tTEXT\t\t496\t1\tIfcLabel\t1\nPARAM\t6e45fa80-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.CommencementDate\tTEXT\t\t496\t1\tIfcDate\t1\nPARAM\t90d81380-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.ConditionCommencement\tTEXT\t\t496\t1\tIfcText\t1\nPARAM\ta0575c80-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.ConditionTermination\tTEXT\t\t496\t1\tIfcText\t1\nPARAM\t80279d80-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.Duration\tTEXT\t\t496\t1\tIfcDuration\t1\nPARAM\t46569700-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.Identifier\tTEXT\t\t496\t1\tIfcIdentifier\t1\nPARAM\t87e74200-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.Options\tTEXT\t\t496\t1\tIfcText\t1\nPARAM\t638b6580-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.PropertyName\tTEXT\t\t496\t1\tIfcLabel\t1\nPARAM\t9a617b80-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.Restrictions\tTEXT\t\t496\t1\tIfcText\t1\nPARAM\t7736cc00-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.TerminationDate\tTEXT\t\t496\t1\tIfcDate\t1\nPARAM\t4b3af05e-05d8-4ec7-ae82-40c53e718e4c\tPset_PropertyAgreement.TrackingIdentifier\tTEXT\t\t496\t1\tIfcIdentifier\t1\nPARAM\t50789580-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.Version\tTEXT\t\t496\t1\tIfcLabel\t1\nPARAM\t5b332a80-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.VersionDate\tTEXT\t\t496\t1\tIfcDate\t1\n#\nGROUP\t497\tPset_ProtectiveDeviceBreakerUnitI2TCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td98fcc80-d1f8-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitI2TCurve.BreakerUnitCurve\tMULTILINETEXT\t\t497\t1\tPropertyTableValue\t1\nPARAM\td09efb00-d1f8-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitI2TCurve.NominalCurrent\tNUMBER\t\t497\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tb6651d00-d1f8-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitI2TCurve.VoltageLevel\tTEXT\t\t497\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t498\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2673a300-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve.BreakerUnitFuseBreakingingCurve\tMULTILINETEXT\t\t498\t1\tPropertyTableValue\t1\nPARAM\t152a9680-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve.BreakerUnitFuseMeltingCurve\tMULTILINETEXT\t\t498\t1\tPropertyTableValue\t1\nPARAM\tf75d3180-d1f8-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve.VoltageLevel\tTEXT\t\t498\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t499\tPset_ProtectiveDeviceBreakerUnitIPICurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t68044e00-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitIPICurve.BreakerUnitIPICurve\tMULTILINETEXT\t\t499\t1\tPropertyTableValue\t1\nPARAM\t5fac1300-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitIPICurve.NominalCurrent\tNUMBER\t\t499\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t3d19fa00-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitIPICurve.VoltageLevel\tTEXT\t\t499\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t500\tPset_ProtectiveDeviceBreakerUnitTypeMCB\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc9c4b800-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICN60898\tNUMBER\t\t500\t1\tIfcElectricCurrentMeasure\t1\nPARAM\td2b58980-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICS60898\tNUMBER\t\t500\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tc0d3e680-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICS60947\tNUMBER\t\t500\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tb6b1e800-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICU60947\tNUMBER\t\t500\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tae59ad00-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.NominalCurrents\tMULTILINETEXT\t\t500\t1\tPropertyListValue\t1\nPARAM\t84a08600-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.PowerLoss\tNUMBER\t\t500\t1\tIfcPowerMeasure\t1\nPARAM\t8ec28480-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.VoltageLevel\tTEXT\t\t500\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t501\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1a3c1580-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICM60947\tNUMBER\t\t501\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t0f818080-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICS60947\tNUMBER\t\t501\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t098b9f80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICU60947\tNUMBER\t\t501\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t14decb00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICW60947\tNUMBER\t\t501\t1\tIfcElectricCurrentMeasure\t1\nPARAM\te365ff80-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.PerformanceClasses\tMULTILINETEXT\t\t501\t1\tPropertyListValue\t1\nPARAM\tecef6780-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.VoltageLevel\tTEXT\t\t501\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t502\tPset_ProtectiveDeviceOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf0e1b994-3900-433a-8bb2-e462694b55d1\tPset_ProtectiveDeviceOccurrence.GroundFaultCurrentSetValue\tNUMBER\t\t502\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t8a30c271-7469-4aa7-8319-e83f13deaf14\tPset_ProtectiveDeviceOccurrence.GroundFaultFunction\tYESNO\t\t502\t1\tIfcBoolean\t1\nPARAM\t01151008-7b3e-484a-a631-627e3ef99db0\tPset_ProtectiveDeviceOccurrence.GroundFaulti2tFunction\tYESNO\t\t502\t1\tIfcBoolean\t1\nPARAM\t5a52482a-0258-465f-a47c-c512a46703f1\tPset_ProtectiveDeviceOccurrence.GroundFaultTrippingTime\tNUMBER\t\t502\t1\tIfcTimeMeasure\t1\nPARAM\t3be6cdde-9842-42b0-a0d6-4478bc12607e\tPset_ProtectiveDeviceOccurrence.InstantaneousCurrentSetValue\tNUMBER\t\t502\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t976a7956-1417-4914-adcd-03a1ce7bdf3e\tPset_ProtectiveDeviceOccurrence.InstantaneousTrippingTime\tNUMBER\t\t502\t1\tIfcTimeMeasure\t1\nPARAM\t4bc3d721-5dac-42f8-ad3e-069dc2559ee2\tPset_ProtectiveDeviceOccurrence.LongTimeCurrentSetValue\tNUMBER\t\t502\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tf0250a29-337f-4364-acb3-be5daa02add0\tPset_ProtectiveDeviceOccurrence.LongTimeDelay\tNUMBER\t\t502\t1\tIfcTimeMeasure\t1\nPARAM\tf9250bdd-70df-4cbf-af6a-d72d26170202\tPset_ProtectiveDeviceOccurrence.LongTimeFunction\tYESNO\t\t502\t1\tIfcBoolean\t1\nPARAM\ta4234ac0-9e04-4d25-883b-1529e5898574\tPset_ProtectiveDeviceOccurrence.PoleUsage\tTEXT\t\t502\t1\tPEnum_PoleUsage\t1\nPARAM\t70aaff91-61f9-49ee-b5bc-5517d4044d3e\tPset_ProtectiveDeviceOccurrence.ShortTimeCurrentSetValue\tNUMBER\t\t502\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t337c40a4-98c5-4e4b-aa54-a444cf4790ea\tPset_ProtectiveDeviceOccurrence.ShortTimeFunction\tYESNO\t\t502\t1\tIfcBoolean\t1\nPARAM\tab1a66c0-9b66-4bc3-9fab-a566d40fc3f6\tPset_ProtectiveDeviceOccurrence.ShortTimei2tFunction\tYESNO\t\t502\t1\tIfcBoolean\t1\nPARAM\t74cb82ee-d6ff-4aae-9f88-fe5222059167\tPset_ProtectiveDeviceOccurrence.ShortTimeTrippingTime\tNUMBER\t\t502\t1\tIfcTimeMeasure\t1\n#\nGROUP\t503\tPset_ProtectiveDeviceTrippingCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3049d600-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingCurve.TrippingCurve\tMULTILINETEXT\t\t503\t1\tPropertyTableValue\t1\nPARAM\t245e1400-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingCurve.TrippingCurveType\tTEXT\t\t503\t1\tPEnum_TrippingCurveType\t1\n#\nGROUP\t504\tPset_ProtectiveDeviceTrippingFunctionGCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t61c2a180-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.CurrentTolerance1\tNUMBER\t\t504\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6d15cd00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.CurrentTolerance2\tNUMBER\t\t504\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t671fec00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.CurrentToleranceLimit1\tNUMBER\t\t504\t1\tIfcTimeMeasure\t1\nPARAM\t51122b80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ExternalAdjusted\tYESNO\t\t504\t1\tIfcBoolean\t1\nPARAM\t73a44480-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.IsCurrentTolerancePositiveOnly\tYESNO\t\t504\t1\tIfcBoolean\t1\nPARAM\t42c40f80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.IsSelectable\tYESNO\t\t504\t1\tIfcBoolean\t1\nPARAM\t8ae33200-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.IsTimeTolerancePositiveOnly\tYESNO\t\t504\t1\tIfcBoolean\t1\nPARAM\t4a83b400-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.NominalCurrentAdjusted\tYESNO\t\t504\t1\tIfcBoolean\t1\nPARAM\t57080c80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrent\tNUMBER\t\t504\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t9c2c3e80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrentI2tEnd\tNUMBER\t\t504\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t9171a980-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrentI2tStart\tNUMBER\t\t504\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t5bccc080-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTime\tNUMBER\t\t504\t1\tIfcTimeMeasure\t1\nPARAM\ta2221f80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTimeI2tEnd\tNUMBER\t\t504\t1\tIfcTimeMeasure\t1\nPARAM\t96cef400-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTimeI2tStart\tNUMBER\t\t504\t1\tIfcTimeMeasure\t1\nPARAM\t7a32bc00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.TimeTolerance1\tNUMBER\t\t504\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t84ed5100-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.TimeTolerance2\tNUMBER\t\t504\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t80289d00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.TimeToleranceLimit1\tNUMBER\t\t504\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t505\tPset_ProtectiveDeviceTrippingFunctionICurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc7af2900-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.CurrentTolerance1\tNUMBER\t\t505\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td990cc00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.CurrentTolerance2\tNUMBER\t\t505\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td0076400-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.CurrentToleranceLimit1\tNUMBER\t\t505\t1\tIfcTimeMeasure\t1\nPARAM\te2819d80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.IsCurrentTolerancePositiveOnly\tYESNO\t\t505\t1\tIfcBoolean\t1\nPARAM\ta3d271ad-1c7d-4743-92e5-ceb1ef243667\tPset_ProtectiveDeviceTrippingFunctionICurve.IsOffWhenSFunctionOn\tYESNO\t\t505\t1\tIfcBoolean\t1\nPARAM\tac441e00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.IsSelectable\tYESNO\t\t505\t1\tIfcBoolean\t1\nPARAM\tf9c08b00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.IsTimeTolerancePositiveOnly\tYESNO\t\t505\t1\tIfcBoolean\t1\nPARAM\tffb66c00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.MaxAdjustmentX_ICS\tNUMBER\t\t505\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tb239ff00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.NominalCurrentAdjusted\tYESNO\t\t505\t1\tIfcBoolean\t1\nPARAM\tbc5bfd80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.ReleaseCurrent\tNUMBER\t\t505\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tc251de80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.ReleaseTime\tNUMBER\t\t505\t1\tIfcTimeMeasure\t1\nPARAM\te8777e80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.TimeTolerance1\tNUMBER\t\t505\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf3321380-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.TimeTolerance2\tNUMBER\t\t505\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tee6d5f80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.TimeToleranceLimit1\tNUMBER\t\t505\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t506\tPset_ProtectiveDeviceTrippingFunctionLCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0a710100-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.IsSelectable\tYESNO\t\t506\t1\tIfcBoolean\t1\nPARAM\t27a5cf80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerCurrent1\tNUMBER\t\t506\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t2eccdd80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerCurrent2\tNUMBER\t\t506\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t34c2be80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerTime1\tNUMBER\t\t506\t1\tIfcTimeMeasure\t1\nPARAM\t39877280-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerTime2\tNUMBER\t\t506\t1\tIfcTimeMeasure\t1\nPARAM\t11980f00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperCurrent1\tNUMBER\t\t506\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t16f55980-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperCurrent2\tNUMBER\t\t506\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t1c52a400-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperTime1\tNUMBER\t\t506\t1\tIfcTimeMeasure\t1\nPARAM\t21afee80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperTime2\tNUMBER\t\t506\t1\tIfcTimeMeasure\t1\n#\nGROUP\t507\tPset_ProtectiveDeviceTrippingFunctionSCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5a4fc800-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.CurrentTolerance1\tNUMBER\t\t507\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t66d42080-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.CurrentTolerance2\tNUMBER\t\t507\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5fad1280-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.CurrentToleranceLimit1\tNUMBER\t\t507\t1\tIfcTimeMeasure\t1\nPARAM\t6d629800-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsCurrentTolerancePositiveOnly\tYESNO\t\t507\t1\tIfcBoolean\t1\nPARAM\t8521329d-79b1-46be-b0fd-056df538df7f\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsOffWhenLfunctionOn\tYESNO\t\t507\t1\tIfcBoolean\t1\nPARAM\t4310da80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsSelectable\tYESNO\t\t507\t1\tIfcBoolean\t1\nPARAM\t85d2b280-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsTimeTolerancePositiveOnly\tYESNO\t\t507\t1\tIfcBoolean\t1\nPARAM\t4906bb80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.NominalCurrentAdjusted\tYESNO\t\t507\t1\tIfcBoolean\t1\nPARAM\t4f953300-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrent\tNUMBER\t\t507\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t97b45580-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrentI2tEnd\tNUMBER\t\t507\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t8c612a00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrentI2tStart\tNUMBER\t\t507\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t54f27d80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTime\tNUMBER\t\t507\t1\tIfcTimeMeasure\t1\nPARAM\t9e42cd00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTimeI2tEnd\tNUMBER\t\t507\t1\tIfcTimeMeasure\t1\nPARAM\t92efa180-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTimeI2tStart\tNUMBER\t\t507\t1\tIfcTimeMeasure\t1\nPARAM\t7489a600-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.TimeTolerance1\tNUMBER\t\t507\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7fdcd180-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.TimeTolerance2\tNUMBER\t\t507\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t79e6f080-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.TimeToleranceLimit1\tNUMBER\t\t507\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t508\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc4686d00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentDesignation\tTEXT\t\t508\t1\tIfcLabel\t1\nPARAM\tb0bd0680-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentRange\tMULTILINETEXT\t\t508\t1\tPropertyBoundedValue\t1\nPARAM\tb87cab00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentRangeStepValue\tNUMBER\t\t508\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tbe728c00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentValues\tMULTILINETEXT\t\t508\t1\tPropertyListValue\t1\nPARAM\ta864cb80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentValueType\tTEXT\t\t508\t1\tPEnum_AdjustmentValueType\t1\nPARAM\t48ef3404-d004-41f7-a762-b796a057d713\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.CurrentAdjustmentRange\tMULTILINETEXT\t\t508\t1\tPropertyBoundedValue\t1\nPARAM\t8e7d356a-ac18-4344-bb08-78a74daa6fa3\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.CurrentAdjustmentRangeStepValue\tNUMBER\t\t508\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tc8b1ed4c-7ce5-4c78-98d3-46e9c510ca55\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.CurrentAdjustmentValues\tMULTILINETEXT\t\t508\t1\tPropertyListValue\t1\n#\nGROUP\t509\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te9f57680-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentDesignation\tTEXT\t\t509\t1\tIfcLabel\t1\nPARAM\td813d380-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentRange\tMULTILINETEXT\t\t509\t1\tPropertyBoundedValue\t1\nPARAM\tdfd37800-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentRangeStepValue\tNUMBER\t\t509\t1\tIfcTimeMeasure\t1\nPARAM\te530c280-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentValues\tMULTILINETEXT\t\t509\t1\tPropertyListValue\t1\nPARAM\tcfbb9880-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentValueType\tTEXT\t\t509\t1\tPEnum_AdjustmentValueType\t1\nPARAM\tf083ee00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.CurrentForTimeDelay\tNUMBER\t\t509\t1\tIfcTimeMeasure\t1\nPARAM\tf548a200-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.I2TApplicability\tTEXT\t\t509\t1\tPEnum_AdjustmentValueType\t1\nPARAM\t8c0625bc-4b39-4844-9062-8ee9b42d63c1\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.TimeAdjustmentRange\tMULTILINETEXT\t\t509\t1\tPropertyBoundedValue\t1\nPARAM\t5d9679b3-06e9-463c-a697-1e7603638b5d\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.TimeAdjustmentRangeStepValue\tNUMBER\t\t509\t1\tIfcTimeMeasure\t1\nPARAM\te74a1583-60c3-4f47-8cb6-58727b9ddc60\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.TimeAdjustmentValues\tMULTILINETEXT\t\t509\t1\tPropertyListValue\t1\n#\nGROUP\t510\tPset_ProtectiveDeviceTrippingUnitTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2c1eb800-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.AtexVerified\tYESNO\t\t510\t1\tIfcBoolean\t1\nPARAM\t393ba700-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.LimitingTerminalSize\tAREA\t\t510\t1\tIfcAreaMeasure\t1\nPARAM\t32149900-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.OldDevice\tYESNO\t\t510\t1\tIfcBoolean\t1\nPARAM\t085b7200-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.Reference\tTEXT\t\t510\t1\tIfcIdentifier\t1\nPARAM\t1f01c900-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.Standard\tTEXT\t\t510\t1\tIfcLabel\t1\nPARAM\t0e515300-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.Status\tTEXT\t\t510\t1\tPEnum_ElementStatus\t1\nPARAM\t25904080-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.UseInDiscrimination\tYESNO\t\t510\t1\tIfcBoolean\t1\n#\nGROUP\t511\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t84ee5080-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.CurveDesignation\tTEXT\t\t511\t1\tIfcLabel\t1\nPARAM\t68521880-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.DefinedTemperature\tNUMBER\t\t511\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t45bfff80-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.ElectroMagneticTrippingUnitType\tTEXT\t\t511\t1\tPEnum_ElectroMagneticTrippingUnitType\t1\nPARAM\t553f4880-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I1\tNUMBER\t\t511\t1\tIfcReal\t1\nPARAM\t5b352980-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I2\tNUMBER\t\t511\t1\tIfcReal\t1\nPARAM\t73a54400-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I4\tNUMBER\t\t511\t1\tIfcReal\t1\nPARAM\t799b2500-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I5\tNUMBER\t\t511\t1\tIfcReal\t1\nPARAM\t60927400-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.T2\tNUMBER\t\t511\t1\tIfcTimeMeasure\t1\nPARAM\t80299c80-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.T5\tNUMBER\t\t511\t1\tIfcTimeMeasure\t1\nPARAM\t6ee09000-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.TemperatureFactor\tNUMBER\t\t511\t1\tIfcRatioMeasure\t1\n#\nGROUP\t512\tPset_ProtectiveDeviceTrippingUnitTypeElectronic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t92a3d600-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.ElectronicTrippingUnitType\tTEXT\t\t512\t1\tPEnum_ElectronicTrippingUnitType\t1\nPARAM\ta94a2d00-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection\tYESNO\t\t512\t1\tIfcBoolean\t1\nPARAM\tb8c97600-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_100\tYESNO\t\t512\t1\tIfcBoolean\t1\nPARAM\tb0713b00-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_50\tYESNO\t\t512\t1\tIfcBoolean\t1\nPARAM\tbebf5700-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_Select\tYESNO\t\t512\t1\tIfcBoolean\t1\nPARAM\ta2231f00-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.NominalCurrents\tMULTILINETEXT\t\t512\t1\tPropertyListValue\t1\n#\nGROUP\t513\tPset_ProtectiveDeviceTrippingUnitTypeResidualCurrent\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcb43af80-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeResidualCurrent.TrippingUnitReleaseCurrent\tTEXT\t\t513\t1\tPEnum_TrippingUnitReleaseCurrent\t1\n#\nGROUP\t514\tPset_ProtectiveDeviceTrippingUnitTypeThermal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0e058780-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.CurveDesignation\tTEXT\t\t514\t1\tIfcLabel\t1\nPARAM\t034af280-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.DefinedTemperature\tNUMBER\t\t514\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tf29a7c80-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.I1\tNUMBER\t\t514\t1\tIfcReal\t1\nPARAM\tf8905d80-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.I2\tNUMBER\t\t514\t1\tIfcReal\t1\nPARAM\tfdeda800-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.T2\tNUMBER\t\t514\t1\tIfcTimeMeasure\t1\nPARAM\t0940d380-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.TemperatureFactor\tNUMBER\t\t514\t1\tIfcRatioMeasure\t1\nPARAM\te3b3ca00-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.ThermalTrippingUnitType\tTEXT\t\t514\t1\tPEnum_ThermalTrippingUnitType\t1\n#\nGROUP\t515\tPset_ProtectiveDeviceTypeAntiArcingDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb99939fb-fe06-458b-bcba-a05970495127\tPset_ProtectiveDeviceTypeAntiArcingDevice.GroundingType\tTEXT\t\t515\t1\tIfcLabel\t1\nPARAM\tf49540a4-120e-44ef-921e-299aae96b556\tPset_ProtectiveDeviceTypeAntiArcingDevice.RatedVoltage\tMULTILINETEXT\t\t515\t1\tPropertyBoundedValue\t1\n#\nGROUP\t516\tPset_ProtectiveDeviceTypeCircuitBreaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t99591b9c-6800-4665-9039-f31820da59cf\tPset_ProtectiveDeviceTypeCircuitBreaker.CircuitBreakerType\tTEXT\t\t516\t1\tPEnum_CircuitBreakerType\t1\nPARAM\t47d68e00-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCircuitBreaker.ICM60947\tNUMBER\t\t516\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t3ab99f00-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCircuitBreaker.ICS60947\tNUMBER\t\t516\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t355c5480-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCircuitBreaker.ICU60947\tNUMBER\t\t516\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t40af8000-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCircuitBreaker.ICW60947\tNUMBER\t\t516\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t1bbb0d00-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCircuitBreaker.PerformanceClasses\tMULTILINETEXT\t\t516\t1\tPropertyListValue\t1\nPARAM\t22e21b00-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCircuitBreaker.VoltageLevel\tTEXT\t\t516\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t517\tPset_ProtectiveDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t197939f8-593d-43bf-a45b-1c4f1f7bf4c4\tPset_ProtectiveDeviceTypeCommon.CharacteristicTripCurve\tMULTILINETEXT\t\t517\t1\tPropertyTableValue\t1\nPARAM\t9798084c-6c22-4c0e-ad83-84c3bd0c4610\tPset_ProtectiveDeviceTypeCommon.CutOffCurrent\tNUMBER\t\t517\t1\t IfcElectricCurrentMeasure\t1\nPARAM\t155c0930-1322-498b-b22e-db6bf1c2c7af\tPset_ProtectiveDeviceTypeCommon.LimitingTerminalSize\tAREA\t\t517\t1\tIfcAreaMeasure\t1\nPARAM\te72023ae-3d5f-4532-9e32-cfe1608492fd\tPset_ProtectiveDeviceTypeCommon.MaximumRatedVoltage\tNUMBER\t\t517\t1\t IfcElectricVoltageMeasure\t1\nPARAM\t3b671b10-bed9-4d3c-87ad-28d7089f6d4d\tPset_ProtectiveDeviceTypeCommon.ProtectiveTagType\tTEXT\t\t517\t1\tIfcLabel\t1\nPARAM\tad4d52c3-ab62-4986-ac8f-2b0ebc5fd466\tPset_ProtectiveDeviceTypeCommon.RatedShortCircuitCurrent\tNUMBER\t\t517\t1\t IfcElectricCurrentMeasure\t1\nPARAM\t52912300-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCommon.Reference\tTEXT\t\t517\t1\tIfcIdentifier\t1\nPARAM\t5739d856-122b-4e68-a8c2-81a86f4ed166\tPset_ProtectiveDeviceTypeCommon.StandardUsed\tTEXT\t\t517\t1\tIfcLabel\t1\nPARAM\t58870400-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCommon.Status\tTEXT\t\t517\t1\tPEnum_ElementStatus\t1\nPARAM\tef51a61a-e272-4684-8136-20ce6502bbe6\tPset_ProtectiveDeviceTypeCommon.SwitchingDuty\tINTEGER\t\t517\t1\tIfcInteger\t1\n#\nGROUP\t518\tPset_ProtectiveDeviceTypeEarthFailureDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcfd1a78c-3987-490a-8efc-a74c82fbc125\tPset_ProtectiveDeviceTypeEarthFailureDevice.EarthFailureDeviceType\tTEXT\t\t518\t1\tPEnum_EarthFailureDeviceType\t1\nPARAM\t4d8448e2-8b3a-4ec8-967e-29005d4f630e\tPset_ProtectiveDeviceTypeEarthFailureDevice.Sensitivity\tNUMBER\t\t518\t1\t IfcElectricCurrentMeasure\t1\n#\nGROUP\t519\tPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td0552e80-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker.EarthFailureDeviceType\tTEXT\t\t519\t1\tPEnum_EarthFailureDeviceType\t1\nPARAM\te6fb8580-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker.Sensitivity\tNUMBER\t\t519\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t520\tPset_ProtectiveDeviceTypeFuseDisconnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t669df2ac-c538-4459-8a68-6b63997c3620\tPset_ProtectiveDeviceTypeFuseDisconnector.ArcExtinctionType\tTEXT\t\t520\t1\tIfcLabel\t1\nPARAM\te01f23cd-2333-47c3-8ae2-de06be685e21\tPset_ProtectiveDeviceTypeFuseDisconnector.BreakingCapacity\tNUMBER\t\t520\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tf37fde00-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeFuseDisconnector.FuseDisconnectorType\tTEXT\t\t520\t1\tPEnum_FuseDisconnectorType\t1\nPARAM\t3fcb1e00-d1fe-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeFuseDisconnector.IC60269\tNUMBER\t\t520\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tba8021ab-2621-4d2b-9895-98a54ac6c26f\tPset_ProtectiveDeviceTypeFuseDisconnector.NominalCurrent\tNUMBER\t\t520\t1\tIfcElectricCurrentMeasure\t1\nPARAM\td72fc209-0595-4089-9852-1dffe1c6b421\tPset_ProtectiveDeviceTypeFuseDisconnector.NominalFrequency\tNUMBER\t\t520\t1\tIfcFrequencyMeasure\t1\nPARAM\tf1d52346-422b-473b-b975-865cff5968e2\tPset_ProtectiveDeviceTypeFuseDisconnector.NumberOfPhases\tINTEGER\t\t520\t1\tIfcCountMeasure\t1\nPARAM\t993164ad-13e0-4fdc-88b6-b839ca4bd4e6\tPset_ProtectiveDeviceTypeFuseDisconnector.NumberOfPoles\tINTEGER\t\t520\t1\tIfcCountMeasure\t1\nPARAM\t45c0ff00-d1fe-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeFuseDisconnector.PowerLoss\tNUMBER\t\t520\t1\tIfcPowerMeasure\t1\nPARAM\tba63db9a-776d-49b0-bf0e-f8eb334f09d7\tPset_ProtectiveDeviceTypeFuseDisconnector.RatedVoltage\tMULTILINETEXT\t\t520\t1\tPropertyBoundedValue\t1\nPARAM\tf0fafe95-7016-4778-b06e-037d0d7bd186\tPset_ProtectiveDeviceTypeFuseDisconnector.ReferenceEnvironmentTemperature\tMULTILINETEXT\t\t520\t1\tPropertyBoundedValue\t1\nPARAM\t0f3800bf-a332-4a88-8a7b-6879bcf36f6f\tPset_ProtectiveDeviceTypeFuseDisconnector.TransformationRatio\tNUMBER\t\t520\t1\tIfcRatioMeasure\t1\nPARAM\t2d50e480-d1fe-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeFuseDisconnector.VoltageLevel\tTEXT\t\t520\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t521\tPset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t52455780-d1fe-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker.Sensitivity\tNUMBER\t\t521\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t522\tPset_ProtectiveDeviceTypeResidualCurrentSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5f624680-d1fe-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeResidualCurrentSwitch.Sensitivity\tNUMBER\t\t522\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t523\tPset_ProtectiveDeviceTypeSparkGap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta7b65e44-c79e-44d8-8b17-a03455e438b6\tPset_ProtectiveDeviceTypeSparkGap.BreakdownVoltageTolerance\tNUMBER\t\t523\t1\tIfcElectricVoltageMeasure\t1\nPARAM\tb43bf48b-4005-4ab0-a536-7ffc10ef3c51\tPset_ProtectiveDeviceTypeSparkGap.Capacitance\tNUMBER\t\t523\t1\tIfcElectricCapacitanceMeasure\t1\nPARAM\te314a6fa-0337-45f9-840c-98745352747f\tPset_ProtectiveDeviceTypeSparkGap.CurrentRMS\tNUMBER\t\t523\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t985ff43b-000e-42a9-a8ee-354480c09ab3\tPset_ProtectiveDeviceTypeSparkGap.PowerDissipation\tNUMBER\t\t523\t1\tIfcPowerMeasure\t1\nPARAM\t6525066f-b703-45c4-942b-792d2e67202c\tPset_ProtectiveDeviceTypeSparkGap.Resistivity\tNUMBER\t\t523\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t6895742d-128e-4a53-99b4-4a6b3c33a4e6\tPset_ProtectiveDeviceTypeSparkGap.SparkGapType\tTEXT\t\t523\t1\tPEnum_SparkGapType\t1\n#\nGROUP\t524\tPset_ProtectiveDeviceTypeVaristor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0c9a9e47-a2a9-4f8b-a2bf-6842f5033524\tPset_ProtectiveDeviceTypeVaristor.CharacteristicFunction\tTEXT\t\t524\t1\tIfcText\t1\nPARAM\t6b4e0880-d1fe-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeVaristor.VaristorType\tTEXT\t\t524\t1\tPEnum_VaristorType\t1\n#\nGROUP\t525\tPset_ProvisionForVoid\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te181857d-e7d7-4353-aff8-b8a80d92f4e5\tPset_ProvisionForVoid.Depth\tLENGTH\t\t525\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t85a000d2-fde2-4acd-a8b4-2f6fe0c5ee96\tPset_ProvisionForVoid.Diameter\tLENGTH\t\t525\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td2558354-c58b-4990-a8c0-abd41cca359a\tPset_ProvisionForVoid.Height\tLENGTH\t\t525\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3a6c1788-6357-46b2-b246-91047db064bf\tPset_ProvisionForVoid.System\tTEXT\t\t525\t1\tIfcLabel\t1\nPARAM\t7b1a2190-c406-4e4f-b9cf-fd1646a652e7\tPset_ProvisionForVoid.VoidShape\tTEXT\t\t525\t1\tIfcLabel\t1\nPARAM\t881f62f7-d488-4309-a8df-ea88b10dca6d\tPset_ProvisionForVoid.Width\tLENGTH\t\t525\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t526\tPset_PumpOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8587e680-d1fe-11e1-8000-00215ad4efdf\tPset_PumpOccurrence.BaseType\tTEXT\t\t526\t1\tPEnum_PumpBaseType\t1\nPARAM\t92a4d580-d1fe-11e1-8000-00215ad4efdf\tPset_PumpOccurrence.DriveConnectionType\tTEXT\t\t526\t1\tPEnum_PumpDriveConnectionType\t1\nPARAM\t7dc84200-d1fe-11e1-8000-00215ad4efdf\tPset_PumpOccurrence.ImpellerDiameter\tLENGTH\t\t526\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t527\tPset_PumpPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb36d2b00-d1fe-11e1-8000-00215ad4efdf\tPset_PumpPHistory.Flowrate\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\nPARAM\ta6503c00-d1fe-11e1-8000-00215ad4efdf\tPset_PumpPHistory.MechanicalEfficiency\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\nPARAM\ta9e3c300-d1fe-11e1-8000-00215ad4efdf\tPset_PumpPHistory.OverallEfficiency\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\nPARAM\tb6681b80-d1fe-11e1-8000-00215ad4efdf\tPset_PumpPHistory.Power\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\nPARAM\ted5c20c6-939d-48de-a28a-8dd9ea6f9a82\tPset_PumpPHistory.PowerHistory\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\nPARAM\tad774a00-d1fe-11e1-8000-00215ad4efdf\tPset_PumpPHistory.PressureRise\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\nPARAM\tb0723a80-d1fe-11e1-8000-00215ad4efdf\tPset_PumpPHistory.RotationSpeed\tMULTILINETEXT\t\t527\t1\tIfcTimeSeries\t1\n#\nGROUP\t528\tPset_PumpTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t12eb9904-5fa1-4ccf-b894-348584a79236\tPset_PumpTypeCommon.CasingMaterial\tMULTILINETEXT\t\t528\t1\tIfcMaterial\t1\nPARAM\te6afba00-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.ConnectionSize\tLENGTH\t\t528\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td4ce1700-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.FlowRateRange\tMULTILINETEXT\t\t528\t1\tPropertyBoundedValue\t1\nPARAM\tdbf52500-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.FlowResistanceRange\tMULTILINETEXT\t\t528\t1\tPropertyBoundedValue\t1\nPARAM\t0e33eeaa-f9bc-4efd-99e0-535ace9c9559\tPset_PumpTypeCommon.ImpellerMaterial\tMULTILINETEXT\t\t528\t1\tIfcMaterial\t1\nPARAM\t6b45d691-f254-46e0-ab6e-63497beb877f\tPset_PumpTypeCommon.ImpellerSealMaterial\tMULTILINETEXT\t\t528\t1\tIfcMaterial\t1\nPARAM\tf5966c80-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.NetPositiveSuctionHead\tNUMBER\t\t528\t1\tIfcPressureMeasure\t1\nPARAM\tfb8c4d80-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.NominalRotationSpeed\tNUMBER\t\t528\t1\tIfcRotationalFrequencyMeasure\t1\nPARAM\tbff18380-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.Reference\tTEXT\t\t528\t1\tIfcIdentifier\t1\nPARAM\tc67ffb00-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.Status\tTEXT\t\t528\t1\tPEnum_ElementStatus\t1\nPARAM\tedd6c800-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.TemperatureRange\tMULTILINETEXT\t\t528\t1\tPropertyBoundedValue\t1\n#\nGROUP\t529\tPset_QuantityTakeOff\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t046f362c-9e56-4d1e-bb4f-bca8648f1a7e\tPset_QuantityTakeOff.LayerQuantity.LocalContext\tTEXT\t\t529\t1\tIfcText\t1\nPARAM\t01fb1e2d-7932-4c2f-840a-3232ec2eac53\tPset_QuantityTakeOff.LayerQuantity.MaterialLayer\tTEXT\t\t529\t1\tIfcIdentifier\t1\nPARAM\t2449df65-b4a9-44e1-b632-9323f9abf258\tPset_QuantityTakeOff.LocalContext\tTEXT\t\t529\t1\tIfcText\t1\nPARAM\t1da7db4a-ad94-4467-8298-34e7d244f7ea\tPset_QuantityTakeOff.Reference\tTEXT\t\t529\t1\tIfcIdentifier\t1\n#\nGROUP\t530\tPset_QuayCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t16ce4a2b-540a-4ac2-a5f0-a1c5ddef8d56\tPset_QuayCommon.BentSpacing\tLENGTH\t\t530\t1\tIfcLengthMeasure\t1\nPARAM\t7e08e41b-2652-4f81-b955-0da9e5c452be\tPset_QuayCommon.Elevation\tLENGTH\t\t530\t1\tIfcLengthMeasure\t1\nPARAM\t8bd42282-13ee-4e7c-bd8f-980d9ef8fc31\tPset_QuayCommon.QuaySectionType\tTEXT\t\t530\t1\tPEnum_SectionType\t1\nPARAM\t0a9a4362-4c59-4b90-9243-17f30421bb58\tPset_QuayCommon.StructuralType\tTEXT\t\t530\t1\tIfcLabel\t1\n#\nGROUP\t531\tPset_QuayDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tad242645-84b4-4cf1-b56b-65386ba82140\tPset_QuayDesignCriteria.EquipmentLoading\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\nPARAM\teb5147b1-159c-4f91-8d31-433fbfd6df9b\tPset_QuayDesignCriteria.ExtremeHighWaterLevel\tLENGTH\t\t531\t1\tIfcLengthMeasure\t1\nPARAM\tf2d6b5e8-c3b5-43e6-b290-3c3bba6d001e\tPset_QuayDesignCriteria.ExtremeLowWaterLevel\tLENGTH\t\t531\t1\tIfcLengthMeasure\t1\nPARAM\tf4f48004-ffc0-4c67-b161-189e6d26da9d\tPset_QuayDesignCriteria.FlowLoading\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\nPARAM\t7b584e80-0ec7-4e14-8c37-e6b713ae81d6\tPset_QuayDesignCriteria.HighWaterLevel\tLENGTH\t\t531\t1\tIfcLengthMeasure\t1\nPARAM\tfbde8c19-610e-4199-8d6e-c5988e1c1cd1\tPset_QuayDesignCriteria.LowWaterLevel\tLENGTH\t\t531\t1\tIfcLengthMeasure\t1\nPARAM\t19e5ebd0-1ad7-4e3d-b605-a622c9e508f0\tPset_QuayDesignCriteria.ShipLoading\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\nPARAM\tb0fb0b52-27ba-4428-92e1-203904bbd18b\tPset_QuayDesignCriteria.UniformlyDistributedLoad\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\nPARAM\tf26ea228-eaa7-4d9d-9006-9bd5c2cd743f\tPset_QuayDesignCriteria.WaveLoading\tNUMBER\t\t531\t1\tIfcForceMeasure\t1\n#\nGROUP\t532\tPset_RadiiKerbStone\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2c21de22-5f68-43b4-8f3a-a709fccc4247\tPset_RadiiKerbStone.CurveShape\tTEXT\t\t532\t1\tPEnum_CurveShapeEnum\t1\nPARAM\t485132d9-aa32-42d8-8dea-cbecae8ff98d\tPset_RadiiKerbStone.Radius\tLENGTH\t\t532\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t533\tPset_RailingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1fe82a00-d1ff-11e1-8000-00215ad4efdf\tPset_RailingCommon.Diameter\tLENGTH\t\t533\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1959b280-d1ff-11e1-8000-00215ad4efdf\tPset_RailingCommon.Height\tLENGTH\t\t533\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t270f3800-d1ff-11e1-8000-00215ad4efdf\tPset_RailingCommon.IsExternal\tYESNO\t\t533\t1\tIfcBoolean\t1\nPARAM\t06df7900-d1ff-11e1-8000-00215ad4efdf\tPset_RailingCommon.Reference\tTEXT\t\t533\t1\tIfcIdentifier\t1\nPARAM\t0d6df080-d1ff-11e1-8000-00215ad4efdf\tPset_RailingCommon.Status\tTEXT\t\t533\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t534\tPset_RailTypeBlade\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5a72b91b-d5c5-4362-a702-50ad4f256fb5\tPset_RailTypeBlade.BladeRadius\tLENGTH\t\t534\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdc055456-b019-417e-bf05-3523d4b21575\tPset_RailTypeBlade.IsArticulatedBlade\tYESNO\t\t534\t1\tIfcBoolean\t1\nPARAM\t745c6d7c-45a3-4ed2-8399-a06494b2715d\tPset_RailTypeBlade.IsFallbackBlade\tYESNO\t\t534\t1\tIfcBoolean\t1\nPARAM\t245b9024-201d-465b-b706-8aba639554f9\tPset_RailTypeBlade.NominalLength\tLENGTH\t\t534\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t535\tPset_RailTypeCheckRail\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t060366c8-81ff-4c15-8e4e-ef37cd012b40\tPset_RailTypeCheckRail.CheckRailType\tTEXT\t\t535\t1\tPEnum_CheckRailType\t1\nPARAM\t0f86a95b-f29e-4436-844b-5d3933e2cc51\tPset_RailTypeCheckRail.InstallationPlan\tMULTILINETEXT\t\t535\t1\tIfcExternalReference\t1\n#\nGROUP\t536\tPset_RailTypeGuardRail\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1d52a2e7-dc81-495a-9ac2-0f4d74d2f551\tPset_RailTypeGuardRail.GuardRailConnection\tTEXT\t\t536\t1\tPEnum_GuardRailConnection\t1\nPARAM\t122ef822-3fd9-4a68-8d71-960209543015\tPset_RailTypeGuardRail.GuardRailType\tTEXT\t\t536\t1\tPEnum_GuardRailType\t1\nPARAM\tdde17d3b-380a-47e5-a194-fe0d3f49b4ec\tPset_RailTypeGuardRail.PositionInTrack\tTEXT\t\t536\t1\tPEnum_RelativePosition\t1\n#\nGROUP\t537\tPset_RailTypeRail\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a2a8537-947f-4802-a1e1-6718253e695b\tPset_RailTypeRail.DrillOnRail\tTEXT\t\t537\t1\tPEnum_DrillOnRail\t1\nPARAM\td215a7b7-7e7b-47b8-ad38-80cf736076b1\tPset_RailTypeRail.InstallationPlan\tMULTILINETEXT\t\t537\t1\tIfcExternalReference\t1\nPARAM\t8d2598fd-b20b-451f-b24d-0aea3e08cab5\tPset_RailTypeRail.IsStainless\tYESNO\t\t537\t1\tIfcBoolean\t1\nPARAM\tdd0cbe0d-06e3-4a44-a7ff-101dfeb4a354\tPset_RailTypeRail.MinimumTensileStrength\tNUMBER\t\t537\t1\tIfcForceMeasure\t1\nPARAM\td9892358-2a7e-4c5f-a7c9-6cd122fdd8cd\tPset_RailTypeRail.PositionInTrack\tTEXT\t\t537\t1\tPEnum_RelativePosition\t1\nPARAM\tb30b7bb3-eada-453f-a327-c8cd41a0f6a4\tPset_RailTypeRail.RailCondition\tTEXT\t\t537\t1\tPEnum_RailCondition\t1\nPARAM\t1d074e59-02c3-462d-ac86-6c337c0c980c\tPset_RailTypeRail.RailDeliveryState\tTEXT\t\t537\t1\tPEnum_RailDeliveryState\t1\nPARAM\td05120f0-c50f-4ec3-b5a9-5b5a4709301a\tPset_RailTypeRail.RailElementaryLength\tTEXT\t\t537\t1\tPEnum_RailElementaryLength\t1\nPARAM\t843c1e51-4369-49aa-82db-2b038a98a3d7\tPset_RailTypeRail.TechnicalStandard\tMULTILINETEXT\t\t537\t1\tIfcExternalReference\t1\n#\nGROUP\t538\tPset_RailTypeStockRail\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t50bc62a6-2d70-4fc3-a2d1-0ee2fdef950e\tPset_RailTypeStockRail.InstallationPlan\tMULTILINETEXT\t\t538\t1\tIfcExternalReference\t1\nPARAM\t5d34f428-4fb5-43ba-a114-946399076210\tPset_RailTypeStockRail.NominalLength\tLENGTH\t\t538\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\ta6338c02-cb43-4eb0-9504-ef05b02d1160\tPset_RailTypeStockRail.StockRailRadius\tLENGTH\t\t538\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t539\tPset_RailwayBalise\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8c41f718-637b-45ce-a51e-aa195f2f2e5a\tPset_RailwayBalise.DetectionRange\tLENGTH\t\t539\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc395247d-6fa3-4046-9187-a04db86c1c80\tPset_RailwayBalise.FailureInformation\tTEXT\t\t539\t1\tIfcText\t1\nPARAM\tba3b2fc9-7d29-4e67-82aa-b0b6f061962b\tPset_RailwayBalise.InformationLength\tINTEGER\t\t539\t1\tIfcInteger\t1\nPARAM\ta8376ff6-2207-4707-b077-93e539003ad7\tPset_RailwayBalise.IP_Code\tTEXT\t\t539\t1\tIfcLabel\t1\nPARAM\t8477cded-357f-4836-acfd-880adfa7db68\tPset_RailwayBalise.NominalHeight\tLENGTH\t\t539\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tb56f2ade-e7f4-4938-a788-1f89806f2b40\tPset_RailwayBalise.NominalLength\tLENGTH\t\t539\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t064d921a-64ed-433a-9dd5-23b5c51b1310\tPset_RailwayBalise.NominalWeight\tNUMBER\t\t539\t1\tIfcMassMeasure\t1\nPARAM\t6f98d949-24ca-4cae-951d-80ece6836ea3\tPset_RailwayBalise.NominalWidth\tLENGTH\t\t539\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t9dffeec5-bb94-44d9-a921-07a34e7b236b\tPset_RailwayBalise.OperationalTemperatureRange\tMULTILINETEXT\t\t539\t1\tPropertyBoundedValue\t1\nPARAM\tdb5e9706-7d28-46ef-ac56-9efa694e3122\tPset_RailwayBalise.RailwayBaliseType\tTEXT\t\t539\t1\tPEnum_RailwayBaliseType\t1\nPARAM\t84a915d0-c89a-4d28-929d-d9db81506715\tPset_RailwayBalise.TransmissionRate\tINTEGER\t\t539\t1\tIfcIntegerCountRateMeasure\t1\n#\nGROUP\t540\tPset_RailwayCableCarrier\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb88b34ec-ffa1-41f9-b0a4-3bc5c44f252d\tPset_RailwayCableCarrier.NumberOfCrossedTracks\tINTEGER\t\t540\t1\tIfcCountMeasure\t1\n#\nGROUP\t541\tPset_RailwayLevelCrossing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5ae6a677-fc86-4150-871b-fef36a4ef386\tPset_RailwayLevelCrossing.HasRailDrainage\tYESNO\t\t541\t1\tIfcBoolean\t1\nPARAM\tfbed2bd7-245a-4450-bc94-75a407ee2a2e\tPset_RailwayLevelCrossing.IsAccessibleByVehicle\tYESNO\t\t541\t1\tIfcBoolean\t1\nPARAM\t8f5ae1eb-44e2-4c05-9d1e-b5d0170d7ef7\tPset_RailwayLevelCrossing.IsExceptionalTransportRoute\tYESNO\t\t541\t1\tIfcBoolean\t1\nPARAM\t0c2ef4a9-7aa3-4bf8-a9f6-0a2dfbfaa6b9\tPset_RailwayLevelCrossing.IsPrivateOwner\tYESNO\t\t541\t1\tIfcBoolean\t1\nPARAM\tbe7b7bf3-1635-4d28-b1ef-a40a1f49f5d3\tPset_RailwayLevelCrossing.IsSecuredBySignalingSystem\tYESNO\t\t541\t1\tIfcBoolean\t1\nPARAM\tf1a026d8-edc1-47c8-91dd-735dda42aa0b\tPset_RailwayLevelCrossing.PermissiblePavementLoad\tNUMBER\t\t541\t1\tIfcMassMeasure\t1\n#\nGROUP\t542\tPset_RailwaySignalAspect\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0484a5fd-c0a6-45dc-a65e-5f4e3cb956a5\tPset_RailwaySignalAspect.AppliesToTrainCategory\tTEXT\t\t542\t1\tPEnum_TrainCategory\t1\nPARAM\ta18187dd-afa3-4062-834f-ecf0be8443d9\tPset_RailwaySignalAspect.SignalAspectSymbol\tMULTILINETEXT\t\t542\t1\tIfcExternalReference\t1\nPARAM\te60cfd43-6d0c-4fe9-9d1e-8450f83999fd\tPset_RailwaySignalAspect.SignalAspectType\tTEXT\t\t542\t1\tIfcLabel\t1\nPARAM\t0ee92e3f-663b-425c-8c4d-c124e234ec20\tPset_RailwaySignalAspect.SignLegend\tTEXT\t\t542\t1\tIfcText\t1\n#\nGROUP\t543\tPset_RailwaySignalOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teb2e101b-8282-4ab2-9ce8-9d7a3ded4514\tPset_RailwaySignalOccurrence.ApproachSpeed\tNUMBER\t\t543\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t52a81ad5-189f-46b1-824f-aa57bcc7a2a6\tPset_RailwaySignalOccurrence.DistanceToStopMark\tLENGTH\t\t543\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcaa0ed64-b5da-4498-b76c-84cb115a2baf\tPset_RailwaySignalOccurrence.HandSignallingProhibited\tYESNO\t\t543\t1\tIfcBoolean\t1\nPARAM\t0fa9288f-ff61-46b2-92af-e0a125294ae9\tPset_RailwaySignalOccurrence.HinderingObstaclesDescription\tTEXT\t\t543\t1\tIfcText\t1\nPARAM\t428c0db4-1b41-4263-9742-21b44ad8fb33\tPset_RailwaySignalOccurrence.LimitedClearances\tTEXT\t\t543\t1\tIfcText\t1\nPARAM\t2d224350-ca1a-4ed0-a740-c036673fd095\tPset_RailwaySignalOccurrence.NumberOfLampsNotUsed\tINTEGER\t\t543\t1\tIfcCountMeasure\t1\nPARAM\ta5f4aa1b-99cc-47aa-a2fa-3d6a6fcdfa7c\tPset_RailwaySignalOccurrence.RequiresBannerSignal\tYESNO\t\t543\t1\tIfcBoolean\t1\nPARAM\t115da345-4e00-41bf-819a-2b3484e63be6\tPset_RailwaySignalOccurrence.RequiresOLEMesh\tYESNO\t\t543\t1\tIfcBoolean\t1\nPARAM\t384ec591-9255-4bef-8fe4-56f3dc78b5da\tPset_RailwaySignalOccurrence.RequiresSafetyHandrail\tYESNO\t\t543\t1\tIfcBoolean\t1\nPARAM\t96638635-4ea5-448d-af64-06e4f5d4de94\tPset_RailwaySignalOccurrence.SignalPostTelephoneID\tTEXT\t\t543\t1\tIfcIdentifier\t1\nPARAM\tfa762a6a-a6f0-4b0e-a8e5-4128f875eb4c\tPset_RailwaySignalOccurrence.SignalPostTelephoneType\tTEXT\t\t543\t1\tIfcLabel\t1\nPARAM\t9c88f94f-6055-4d7b-ab8a-16583e70b92a\tPset_RailwaySignalOccurrence.SignalWalkwayLength\tLENGTH\t\t543\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf59b53f2-efec-4099-bfb6-caeaf5d3dda0\tPset_RailwaySignalOccurrence.SpecialPositionArrangement\tTEXT\t\t543\t1\tIfcLabel\t1\n#\nGROUP\t544\tPset_RailwaySignalSighting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td7873b3e-7975-4496-8f32-5dedd8836786\tPset_RailwaySignalSighting.SignalSightingAchievableDistance\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5ebebde4-816d-44f3-9086-5d858102023c\tPset_RailwaySignalSighting.SignalSightingAvailableDistance\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6070bdd3-e60d-4ff2-9bb8-c08a4286f60d\tPset_RailwaySignalSighting.SignalSightingCombinedWithRepeater\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t82f39cc0-700c-4bdd-acb8-ff074096d43b\tPset_RailwaySignalSighting.SignalSightingMinimum\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ted1463ee-db21-4ae3-bdbd-1918ebc7ce2c\tPset_RailwaySignalSighting.SignalSightingPreferred\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc386187b-bd42-4c09-86c4-a1c9f11316f0\tPset_RailwaySignalSighting.SignalSightingRouteIndicator\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td1b1d8d7-becf-45dc-aa9f-cfe029d5e2dc\tPset_RailwaySignalSighting.SignalViewingMinimumInFront\tLENGTH\t\t544\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t545\tPset_RailwaySignalType\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td5a9cc83-7756-4e8b-b302-73249d5cd608\tPset_RailwaySignalType.HasConductorRailGuardBoard\tYESNO\t\t545\t1\tIfcBoolean\t1\nPARAM\t229b2636-1e84-4f45-a1ed-79559673398e\tPset_RailwaySignalType.HotStripOrientation\tTEXT\t\t545\t1\tIfcLabel\t1\nPARAM\t3ee3d758-3736-4ec1-ae60-15793b88c805\tPset_RailwaySignalType.IsHighType\tYESNO\t\t545\t1\tIfcBoolean\t1\nPARAM\tb9675394-4fd4-4265-bac8-f78ae6618f0d\tPset_RailwaySignalType.LensDiffuserOrientation\tTEXT\t\t545\t1\tIfcLabel\t1\nPARAM\tf42020d4-b386-4688-9c62-a35cbe503a67\tPset_RailwaySignalType.LensDiffuserType\tTEXT\t\t545\t1\tIfcLabel\t1\nPARAM\ta300b132-8625-42fc-a2b2-80c4e6db89ae\tPset_RailwaySignalType.MaximumDisplayDistance\tLENGTH\t\t545\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfd5b6747-bdb2-440b-89b0-3c16ab61f8a9\tPset_RailwaySignalType.NumberOfLamps\tINTEGER\t\t545\t1\tIfcCountMeasure\t1\nPARAM\t1a873cd6-ef4b-4506-9553-ee65f5853f47\tPset_RailwaySignalType.RailwaySignalType\tTEXT\t\t545\t1\tPEnum_RailwaySignalType\t1\nPARAM\t0f7d4ab9-e619-46f3-b188-c01435c6d751\tPset_RailwaySignalType.RequiredDisplayDistance\tLENGTH\t\t545\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6725aae6-3629-4228-b179-880de03403ba\tPset_RailwaySignalType.SignalHoodLength\tLENGTH\t\t545\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6a458c05-545f-4225-910d-c15a8da5b7a0\tPset_RailwaySignalType.SignalIndicatorType\tTEXT\t\t545\t1\tPEnum_SignalIndicatorType\t1\nPARAM\t5cd5e098-ee37-46d4-916c-a3241d67ec9f\tPset_RailwaySignalType.SignalMessage\tTEXT\t\t545\t1\tIfcText\t1\n#\nGROUP\t546\tPset_RailwayTrackStructurePart\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te01edf54-0e62-47d4-aaf5-70ba2485d812\tPset_RailwayTrackStructurePart.HasBallastTrack\tYESNO\t\t546\t1\tIfcBoolean\t1\nPARAM\taab6a8df-4f73-4933-b893-faf9fece7f82\tPset_RailwayTrackStructurePart.HasCWR\tYESNO\t\t546\t1\tIfcBoolean\t1\nPARAM\tbc6907b2-d806-4ebd-bd65-7b4391724370\tPset_RailwayTrackStructurePart.IsSunExposed\tYESNO\t\t546\t1\tIfcBoolean\t1\nPARAM\t395daabc-a3c4-45b9-bffb-607a913923af\tPset_RailwayTrackStructurePart.TrackSupportingStructure\tTEXT\t\t546\t1\tPEnum_TrackSupportingStructure\t1\n#\nGROUP\t547\tPset_RampCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5b82f400-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.FireExit\tYESNO\t\t547\t1\tIfcBoolean\t1\nPARAM\t558d1300-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.FireRating\tTEXT\t\t547\t1\tIfcLabel\t1\nPARAM\t60e03e80-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.HandicapAccessible\tYESNO\t\t547\t1\tIfcBoolean\t1\nPARAM\t663d8900-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.HasNonSkidSurface\tYESNO\t\t547\t1\tIfcBoolean\t1\nPARAM\t502fc880-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.IsExternal\tYESNO\t\t547\t1\tIfcBoolean\t1\nPARAM\t761e9ee4-c875-4484-9c2a-57a17935596e\tPset_RampCommon.LoadBearing\tYESNO\t\t547\t1\tIfcBoolean\t1\nPARAM\t33939080-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.Reference\tTEXT\t\t547\t1\tIfcIdentifier\t1\nPARAM\t45753380-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.RequiredHeadroom\tLENGTH\t\t547\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4c03ab00-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.RequiredSlope\tNUMBER\t\t547\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t38f0db00-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.Status\tTEXT\t\t547\t1\tPEnum_ElementStatus\t1\nPARAM\td656025e-d2cd-4245-98c8-b1b57aa9e3a0\tPset_RampCommon.ThermalTransmittance\tNUMBER\t\t547\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t548\tPset_RampFlightCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t566f48cd-afd5-4b54-82f1-c0387bee94fb\tPset_RampFlightCommon.ClearWidth\tLENGTH\t\t548\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t87ed2c28-1a19-44ef-8e39-ba59fe45f6fe\tPset_RampFlightCommon.CounterSlope\tNUMBER\t\t548\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t853c1b00-d1ff-11e1-8000-00215ad4efdf\tPset_RampFlightCommon.Headroom\tLENGTH\t\t548\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2421781d-cac5-4915-9d0c-f0a84a471b1a\tPset_RampFlightCommon.Reference\tTEXT\t\t548\t1\tIfcIdentifier\t1\nPARAM\t4894c521-4bf4-4a8f-b343-7a46abf60dce\tPset_RampFlightCommon.Slope\tNUMBER\t\t548\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t3d94d802-c6c2-4151-b449-da5f830c22c5\tPset_RampFlightCommon.Status\tTEXT\t\t548\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t549\tPset_ReferentCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td1989704-a7ad-4a0b-92ca-f61004a1fac7\tPset_ReferentCommon.NameFormat\tTEXT\t\t549\t1\tIfcLabel\t1\n#\nGROUP\t550\tPset_ReinforcementBarCountOfIndependentFooting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta00e8f80-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarCountOfIndependentFooting.Description\tTEXT\t\t550\t1\tIfcText\t1\nPARAM\ta4d34380-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarCountOfIndependentFooting.Reference\tTEXT\t\t550\t1\tIfcLabel\t1\nPARAM\taac92480-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarCountOfIndependentFooting.XDirectionLowerBarCount\tINTEGER\t\t550\t1\tIfcCountMeasure\t1\nPARAM\tb4528c80-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarCountOfIndependentFooting.XDirectionUpperBarCount\tINTEGER\t\t550\t1\tIfcCountMeasure\t1\nPARAM\taf8dd880-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarCountOfIndependentFooting.YDirectionLowerBarCount\tINTEGER\t\t550\t1\tIfcCountMeasure\t1\nPARAM\tb9174080-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarCountOfIndependentFooting.YDirectionUpperBarCount\tINTEGER\t\t550\t1\tIfcCountMeasure\t1\n#\nGROUP\t551\tPset_ReinforcementBarPitchOfBeam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc59b9900-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfBeam.Description\tTEXT\t\t551\t1\tIfcText\t1\nPARAM\tcb917a00-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfBeam.Reference\tTEXT\t\t551\t1\tIfcLabel\t1\nPARAM\td9df9600-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfBeam.SpacingBarPitch\tLENGTH\t\t551\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td3511e80-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfBeam.StirrupBarPitch\tLENGTH\t\t551\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t552\tPset_ReinforcementBarPitchOfColumn\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te82db200-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.Description\tTEXT\t\t552\t1\tIfcText\t1\nPARAM\t01366300-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.HoopBarPitch\tLENGTH\t\t552\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tecf26600-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.Reference\tTEXT\t\t552\t1\tIfcLabel\t1\nPARAM\tf54aa100-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.ReinforcementBarType\tTEXT\t\t552\t1\tPEnum_ReinforcementBarType\t1\nPARAM\t085d7100-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.XDirectionTieHoopBarPitch\tLENGTH\t\t552\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t101d1580-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.XDirectionTieHoopCount\tINTEGER\t\t552\t1\tIfcCountMeasure\t1\nPARAM\t14e1c980-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.YDirectionTieHoopBarPitch\tLENGTH\t\t552\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1ca16e00-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.YDirectionTieHoopCount\tINTEGER\t\t552\t1\tIfcCountMeasure\t1\n#\nGROUP\t553\tPset_ReinforcementBarPitchOfContinuousFooting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t39d63c80-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfContinuousFooting.CrossingLowerBarPitch\tLENGTH\t\t553\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32169800-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfContinuousFooting.CrossingUpperBarPitch\tLENGTH\t\t553\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t25923f80-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfContinuousFooting.Description\tTEXT\t\t553\t1\tIfcText\t1\nPARAM\t2b882080-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfContinuousFooting.Reference\tTEXT\t\t553\t1\tIfcLabel\t1\n#\nGROUP\t554\tPset_ReinforcementBarPitchOfSlab\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48245880-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.Description\tTEXT\t\t554\t1\tIfcText\t1\nPARAM\t8de12100-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.LongInsideCenterLowerBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5d998280-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.LongInsideCenterTopBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t95a0c580-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.LongInsideEndLowerBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t65f1bd80-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.LongInsideEndTopBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8588e600-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.LongOutsideLowerBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t55414780-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.LongOutsideTopBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4eb2d000-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.Reference\tTEXT\t\t554\t1\tIfcLabel\t1\nPARAM\ta5200e80-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.ShortInsideCenterLowerBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t75710680-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.ShortInsideCenterTopBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tacdfb300-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.ShortInsideEndLowerBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7dc94180-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.ShortInsideEndTopBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9cc7d380-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.ShortOutsideLowerBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6e49f880-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.ShortOutsideTopBarPitch\tLENGTH\t\t554\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t555\tPset_ReinforcementBarPitchOfWall\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc84abe00-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfWall.BarAllocationType\tTEXT\t\t555\t1\tPEnum_ReinforcementBarAllocationType\t1\nPARAM\tbbc66580-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfWall.Description\tTEXT\t\t555\t1\tIfcText\t1\nPARAM\tde587e80-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfWall.HorizontalBarPitch\tLENGTH\t\t555\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc1bc4680-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfWall.Reference\tTEXT\t\t555\t1\tIfcLabel\t1\nPARAM\te7495000-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfWall.SpacingBarPitch\tLENGTH\t\t555\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td698da00-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfWall.VerticalBarPitch\tLENGTH\t\t555\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t556\tPset_ReinforcingBarBendingsBECCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c9856e4-8bc3-45e9-ad41-d289687e1b26\tPset_ReinforcingBarBendingsBECCommon.BECBarShapeCode\tTEXT\t\t556\t1\tIfcLabel\t1\nPARAM\t2d6fce8a-1551-48d8-9a75-d8aaf8887c9b\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_u\tNUMBER\t\t556\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t4074891f-141d-47fd-97b6-8d7f5a61c48c\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_u1\tNUMBER\t\t556\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t1fa303e8-e7df-48a4-8ed4-5b39995dd9dc\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_v\tNUMBER\t\t556\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t93d7c237-1813-48e0-9049-bb4f5ee8c043\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_v1\tNUMBER\t\t556\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t0be5660e-1db1-4892-a2bc-64261f9a838a\tPset_ReinforcingBarBendingsBECCommon.BECCuttingLength\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta0d2d0f3-f6e3-48d3-af7a-e239f4f18169\tPset_ReinforcingBarBendingsBECCommon.BECRollerDiameter\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8c4e1036-730f-49b6-b74e-d4f41c826343\tPset_ReinforcingBarBendingsBECCommon.BECShapeAid_x\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1d020b72-0665-4858-93f0-1e0bebe0f55d\tPset_ReinforcingBarBendingsBECCommon.BECShapeAid_y\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t61e6c56f-2b34-48aa-bb1c-c982a74b3cd8\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_a\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tefa26f42-a8f1-4d48-98e8-5f03bd51e92d\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_b\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t080f0c84-a25d-4fe6-9c52-794734b6bc7a\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_c\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t930382cb-e505-45e8-aa5d-ccfb6f50ae6b\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_d\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t112a6b9b-efae-431c-95e4-9bc52d919c69\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_e\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te6296586-8f38-4edb-8a67-94eb67c20026\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_f\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t77faf4db-193a-4b21-8434-f7214afd2021\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_g\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc5bfdf69-b893-433b-a38c-4fe18873d69f\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_h\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t889650e3-3fad-4802-b63b-9b2bb3d4f180\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_i\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t052144b9-daf6-4f52-8349-2f3e7120d372\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_j\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t29649e55-8a1d-4c1c-a5d2-10da06513d38\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_k\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6882a7d6-4567-4ab6-a120-c994abeecd48\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_l\tLENGTH\t\t556\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t557\tPset_ReinforcingBarBendingsBS8666Common\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9e8c172f-adb7-4630-a4f5-14fbab2c93bd\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeCode\tTEXT\t\t557\t1\tIfcLabel\t1\nPARAM\t3f4f16eb-dd52-4639-99e4-8c0ddfa3ba8a\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_A\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2cea6042-cf12-4f5f-a211-a97a6c6d5977\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_B\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t224e2694-9acf-497a-94a9-eecf8077459b\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_C\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6870558a-9f86-493a-a00b-fe749bdf213f\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_D\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1f079e2c-4cb2-4123-b5d0-261a16fe4008\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_E\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t02de028a-bab3-4c45-85ab-b19c853d3f5e\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_r\tLENGTH\t\t557\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t558\tPset_ReinforcingBarBendingsDIN135610Common\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td77b13b2-fd3c-42ed-812a-bc83641b9c4b\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeCode\tTEXT\t\t558\t1\tIfcLabel\t1\nPARAM\tf44578e1-7c15-496b-bc89-439cf69ef785\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_a\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te857ba1a-085b-4128-9ad6-124c4d13900e\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_b\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taa01933c-dd2a-4619-adfc-9801c3d75b14\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_c\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc51eddd6-3e3c-45e7-af2d-eb959309da8b\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_d\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbe87ed30-7aee-40c5-89c6-b3c366237d21\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_e\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te0f974b8-1a67-449e-a15d-183d9e488f0c\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_z\tLENGTH\t\t558\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t559\tPset_ReinforcingBarBendingsISOCD3766Common\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7b4c7f43-34bc-433b-a2b1-c356a1be9d72\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766BendingEndHook\tNUMBER\t\t559\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t19d332b7-95e3-4bdc-935e-bae7e7533c8e\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766BendingStartHook\tNUMBER\t\t559\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t3fbd6282-57d3-454d-996d-a31de83f63fb\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeCode\tTEXT\t\t559\t1\tIfcLabel\t1\nPARAM\tee9089df-139f-429c-ac45-e34063c8f30a\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_a\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1bffd71d-d79d-471f-a660-7a91672a32a4\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_b\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t83680e64-33e0-4052-a4b8-968b0eaaf524\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_c\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4c4b7550-6f88-47ad-8770-2e8dd2b711bb\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_d\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3a60f25d-fa79-4289-9499-a34907f92aa0\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_e\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1fb87150-d3e3-40ac-a2b3-693f14142838\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_R\tLENGTH\t\t559\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t560\tPset_ReinforcingBarCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td2837eec-2e95-439f-97cc-eef7c80d6580\tPset_ReinforcingBarCommon.BarLength\tLENGTH\t\t560\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t002c10a5-49c4-4cd3-a02a-7d3a7cc3e726\tPset_ReinforcingBarCommon.BarSpacing\tLENGTH\t\t560\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb4b93984-6b42-4bbe-8987-21fbff0d6c8e\tPset_ReinforcingBarCommon.BarSurface\tTEXT\t\t560\t1\tPEnum_ReinforcementBarSurface\t1\nPARAM\t766df352-b926-486a-8cfa-e4e207790013\tPset_ReinforcingBarCommon.BendingParameters\tMULTILINETEXT\t\t560\t1\tPropertyListValue\t1\nPARAM\tb89eecc8-c2d4-45f3-a269-38ae697189aa\tPset_ReinforcingBarCommon.BendingShapeCode\tTEXT\t\t560\t1\tIfcIdentifier\t1\nPARAM\te6ad1050-49cb-411b-a58e-97fb9eade51e\tPset_ReinforcingBarCommon.NominalDiameter\tLENGTH\t\t560\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td9c5cd9f-0bb4-453f-b678-181411558c5d\tPset_ReinforcingBarCommon.Reference\tTEXT\t\t560\t1\tIfcIdentifier\t1\nPARAM\t7d7be887-760d-4fe3-b130-2963f7bccd8a\tPset_ReinforcingBarCommon.Status\tTEXT\t\t560\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t561\tPset_ReinforcingMeshCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb5f3c301-977d-4d3c-ba13-3bb0b891e592\tPset_ReinforcingMeshCommon.LongitudinalBarBendingParameters\tMULTILINETEXT\t\t561\t1\tPropertyListValue\t1\nPARAM\t2b78e3e8-df42-4691-bfe7-60a6a7fe07e8\tPset_ReinforcingMeshCommon.LongitudinalBarBendingShapeCode\tTEXT\t\t561\t1\tIfcIdentifier\t1\nPARAM\t811e1893-d560-4309-b991-a91420614530\tPset_ReinforcingMeshCommon.LongitudinalBarNominalDiameter\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3d68be78-7e02-48bd-ac7b-d525d49bf731\tPset_ReinforcingMeshCommon.LongitudinalBarSpacing\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdb73ef07-f02c-416d-9d6e-350ffbdd5611\tPset_ReinforcingMeshCommon.LongitudinalBarSurface\tTEXT\t\t561\t1\tPEnum_ReinforcementBarSurface\t1\nPARAM\t0829ac88-9a26-4665-b613-28d5c7ff7f24\tPset_ReinforcingMeshCommon.MeshLength\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t91489045-22ec-4efa-a54e-774dc160c4fb\tPset_ReinforcingMeshCommon.MeshWidth\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t13aaa238-51da-43c6-8f16-838b174e4676\tPset_ReinforcingMeshCommon.Reference\tTEXT\t\t561\t1\tIfcIdentifier\t1\nPARAM\t19d8547f-9b0d-4340-aaa9-0721fb5f9d3b\tPset_ReinforcingMeshCommon.Status\tTEXT\t\t561\t1\tPEnum_ElementStatus\t1\nPARAM\t3fde4864-276d-4e84-b252-0670e4b09e04\tPset_ReinforcingMeshCommon.TransverseBarBendingParameters\tMULTILINETEXT\t\t561\t1\tPropertyListValue\t1\nPARAM\t18a3346a-79c9-48f2-a572-94a707b4868c\tPset_ReinforcingMeshCommon.TransverseBarBendingShapeCode\tTEXT\t\t561\t1\tIfcIdentifier\t1\nPARAM\tb387b86a-2194-44f5-b961-f6b7dd3752ae\tPset_ReinforcingMeshCommon.TransverseBarNominalDiameter\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5fc4c373-68ab-4588-9ff1-6a6fbe877c38\tPset_ReinforcingMeshCommon.TransverseBarSpacing\tLENGTH\t\t561\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc9d95d85-7737-4db6-b078-e9d73857f848\tPset_ReinforcingMeshCommon.TransverseBarSurface\tTEXT\t\t561\t1\tPEnum_ReinforcementBarSurface\t1\n#\nGROUP\t562\tPset_Reliability\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2cb1cbe5-8c56-44b1-82ee-ce10bd1a76b2\tPset_Reliability.MeanTimeBetweenFailure\tNUMBER\t\t562\t1\tIfcTimeMeasure\t1\n#\nGROUP\t563\tPset_RepairOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te0f6bbd3-ad25-4329-823a-68ff26fd1fb6\tPset_RepairOccurrence.MeanTimeToRepair\tNUMBER\t\t563\t1\tIfcTimeMeasure\t1\nPARAM\t596d58af-9978-44c7-b451-c723b278c4e6\tPset_RepairOccurrence.RepairContent\tTEXT\t\t563\t1\tIfcText\t1\nPARAM\t9f7d4b93-a289-4481-b6c6-eb3bfccdf652\tPset_RepairOccurrence.RepairDate\tTEXT\t\t563\t1\tIfcDate\t1\n#\nGROUP\t564\tPset_RevetmentCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbef0a85c-46cc-4d5a-ac61-7f9017d58dea\tPset_RevetmentCommon.Elevation\tLENGTH\t\t564\t1\tIfcLengthMeasure\t1\nPARAM\t8c504d40-0994-4630-83ac-4da0c48b6904\tPset_RevetmentCommon.StructuralType\tTEXT\t\t564\t1\tIfcLabel\t1\n#\nGROUP\t565\tPset_Risk\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t81a99380-d201-11e1-8000-00215ad4efdf\tPset_Risk.AffectsSurroundings\tYESNO\t\t565\t1\tIfcBoolean\t1\nPARAM\t30010900-d201-11e1-8000-00215ad4efdf\tPset_Risk.AssessmentOfRisk\tTEXT\t\t565\t1\tPEnum_RiskAssessment\t1\nPARAM\tbbce1db6-1955-4fb6-be8d-4ad4ff09a299\tPset_Risk.AssociatedActivity\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\tac64a6a3-ec8f-4f76-814b-8cd85610fb5a\tPset_Risk.AssociatedLocation\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t07373bb4-d2e2-4da5-91e8-c6ccd468e3b2\tPset_Risk.AssociatedProduct\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t9247cbc4-89dd-4108-a5f2-9eb848a4d663\tPset_Risk.MitigatedRiskConsequence\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\nPARAM\t163ec94e-a824-4399-acac-404b6bb7e77b\tPset_Risk.MitigatedRiskLikelihood\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\nPARAM\t0b6b9bd3-803d-4d48-9e14-554892cb057a\tPset_Risk.MitigatedRiskSignificance\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\nPARAM\t8b3d3c5a-67b2-43d8-a6c7-f4b66ffa597d\tPset_Risk.MitigationPlanned\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t13dd66ef-38c6-4a69-9fa1-ae61b7db4884\tPset_Risk.MitigationProposed\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t1495fe00-d201-11e1-8000-00215ad4efdf\tPset_Risk.NatureOfRisk\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t88d0a180-d201-11e1-8000-00215ad4efdf\tPset_Risk.PreventiveMeassures\tMULTILINETEXT\t\t565\t1\tPropertyListValue\t1\nPARAM\t5f1b687e-f9ac-402d-af8b-09a8b82e7e17\tPset_Risk.RiskAssessmentMethodology\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t29729180-d201-11e1-8000-00215ad4efdf\tPset_Risk.RiskCause\tTEXT\t\t565\t1\tIfcText\t1\nPARAM\t44dd9c80-d201-11e1-8000-00215ad4efdf\tPset_Risk.RiskConsequence\tTEXT\t\t565\t1\tPEnum_RiskConsequence\t1\nPARAM\tec621fd6-235c-4fef-8270-daf3be5ea3a0\tPset_Risk.RiskName\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t7191b400-d201-11e1-8000-00215ad4efdf\tPset_Risk.RiskOwner\tTEXT\t\t565\t1\tPEnum_RiskOwner\t1\nPARAM\t5aeb5d00-d201-11e1-8000-00215ad4efdf\tPset_Risk.RiskRating\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\nPARAM\t0516b500-d201-11e1-8000-00215ad4efdf\tPset_Risk.RiskType\tTEXT\t\t565\t1\tPEnum_RiskType\t1\nPARAM\t1bbd0c00-d201-11e1-8000-00215ad4efdf\tPset_Risk.SubNatureOfRisk1\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t224b8380-d201-11e1-8000-00215ad4efdf\tPset_Risk.SubNatureOfRisk2\tTEXT\t\t565\t1\tIfcLabel\t1\nPARAM\t7b8c1065-ea9d-4bc4-a999-53ea101d3460\tPset_Risk.UnmitigatedRiskConsequence\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\nPARAM\t192acd8d-da03-4dc1-9758-f293dc10e01d\tPset_Risk.UnmitigatedRiskLikelihood\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\nPARAM\t4b06fa8f-114a-4c1f-bdd5-bb9b4888e06e\tPset_Risk.UnmitigatedRiskSignificance\tTEXT\t\t565\t1\tPEnum_RiskRating\t1\n#\nGROUP\t566\tPset_RoadDesignCriteriaCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t52b8bf86-4e27-417e-9f57-fcd393c4bd05\tPset_RoadDesignCriteriaCommon.Crossfall\tNUMBER\t\t566\t1\tIfcRatioMeasure\t1\nPARAM\t0bc124e6-526d-425d-9c43-ed723d3b50e1\tPset_RoadDesignCriteriaCommon.DesignSpeed\tNUMBER\t\t566\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t0c041470-0f96-4717-9fd0-d7c62c2f433e\tPset_RoadDesignCriteriaCommon.DesignTrafficVolume\tINTEGER\t\t566\t1\tIfcCountMeasure\t1\nPARAM\t9eeacdb4-0894-4e28-850d-157a0a5c9deb\tPset_RoadDesignCriteriaCommon.DesignVehicleClass\tTEXT\t\t566\t1\tIfcLabel\t1\nPARAM\tdf7d9884-2fa1-4802-8d82-17c5ec3ce882\tPset_RoadDesignCriteriaCommon.LaneWidth\tLENGTH\t\t566\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta6fd2657-e7fd-42da-b97e-e562a4c54e00\tPset_RoadDesignCriteriaCommon.NumberOfThroughLanes\tINTEGER\t\t566\t1\tIfcCountMeasure\t1\nPARAM\tf081cea6-5680-4b09-87b0-ef9574ebb8e5\tPset_RoadDesignCriteriaCommon.RoadDesignClass\tTEXT\t\t566\t1\tIfcLabel\t1\n#\nGROUP\t567\tPset_RoadGuardElement\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6cd6455b-f668-42ef-b715-a00c8a18e459\tPset_RoadGuardElement.IsMoveable\tYESNO\t\t567\t1\tIfcBoolean\t1\nPARAM\t1a4d78bb-cabb-4cc5-a596-382e4b12c655\tPset_RoadGuardElement.IsTerminal\tYESNO\t\t567\t1\tIfcBoolean\t1\nPARAM\tca9fcd71-2511-4a1c-ac4c-89024fd15a16\tPset_RoadGuardElement.IsTransition\tYESNO\t\t567\t1\tIfcBoolean\t1\nPARAM\tb8123a9a-e47c-48fc-8d13-e585cfc36354\tPset_RoadGuardElement.TerminalType\tTEXT\t\t567\t1\tIfcLabel\t1\n#\nGROUP\t568\tPset_RoadMarkingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t40197393-e5e0-401d-9242-2557e2d01765\tPset_RoadMarkingCommon.ApplicationMethod\tTEXT\t\t568\t1\tIfcText\t1\nPARAM\t817a70a8-6614-4698-a80d-f9a2b8e218c8\tPset_RoadMarkingCommon.DiagramNumber\tTEXT\t\t568\t1\tIfcLabel\t1\nPARAM\t788d1dcf-f7d8-4ea9-9195-39ad8a2816a4\tPset_RoadMarkingCommon.MaterialColour\tTEXT\t\t568\t1\tIfcLabel\t1\nPARAM\t9a9204ae-37a1-478e-817d-f5b1c775a24f\tPset_RoadMarkingCommon.MaterialThickness\tLENGTH\t\t568\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfd473cfe-d282-430c-973c-339e56e83283\tPset_RoadMarkingCommon.MaterialType\tTEXT\t\t568\t1\tIfcLabel\t1\nPARAM\t46bd1ad0-e7de-482a-8b8f-ba4bddcb0d04\tPset_RoadMarkingCommon.Structure\tTEXT\t\t568\t1\tIfcLabel\t1\n#\nGROUP\t569\tPset_RoadSymbolsCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td3f6df7e-d095-4b79-8cf1-bba88c4adf52\tPset_RoadSymbolsCommon.Text\tTEXT\t\t569\t1\tIfcText\t1\nPARAM\ta0bfc334-12c8-4b72-9f01-7a33dd57f342\tPset_RoadSymbolsCommon.TypeDesignation\tTEXT\t\t569\t1\tIfcLabel\t1\n#\nGROUP\t570\tPset_RoofCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tadc51480-d201-11e1-8000-00215ad4efdf\tPset_RoofCommon.AcousticRating\tTEXT\t\t570\t1\tIfcLabel\t1\nPARAM\tb584b900-d201-11e1-8000-00215ad4efdf\tPset_RoofCommon.FireRating\tTEXT\t\t570\t1\tIfcLabel\t1\nPARAM\tbd445d80-d201-11e1-8000-00215ad4efdf\tPset_RoofCommon.IsExternal\tYESNO\t\t570\t1\tIfcBoolean\t1\nPARAM\t87a90f61-4ea4-4ebe-a4d7-523924d88911\tPset_RoofCommon.LoadBearing\tYESNO\t\t570\t1\tIfcBoolean\t1\nPARAM\t2ed6cec4-3f7b-46db-9747-865a45f796e3\tPset_RoofCommon.ProjectedArea\tAREA\t\t570\t1\tIfcAreaMeasure\t1\nPARAM\t984fea80-d201-11e1-8000-00215ad4efdf\tPset_RoofCommon.Reference\tTEXT\t\t570\t1\tIfcIdentifier\t1\nPARAM\t9e45cb80-d201-11e1-8000-00215ad4efdf\tPset_RoofCommon.Status\tTEXT\t\t570\t1\tPEnum_ElementStatus\t1\nPARAM\tc46b6b80-d201-11e1-8000-00215ad4efdf\tPset_RoofCommon.ThermalTransmittance\tNUMBER\t\t570\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\td3597dc3-6116-4c78-b549-b4cc7d7d954b\tPset_RoofCommon.TotalArea\tAREA\t\t570\t1\tIfcAreaMeasure\t1\n#\nGROUP\t571\tPset_SanitaryTerminalTypeBath\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td0572d80-d201-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeBath.BathType\tTEXT\t\t571\t1\tPEnum_BathType\t1\nPARAM\t1c6c726a-46b6-47fd-ab5e-91e18b52257e\tPset_SanitaryTerminalTypeBath.Color\tTEXT\t\t571\t1\tIfcText\t1\nPARAM\t0f857e80-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeBath.DrainSize\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t17452300-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeBath.HasGrabHandles\tYESNO\t\t571\t1\tIfcBoolean\t1\nPARAM\t5f78915c-8a07-4868-ba4c-21a602efa2b5\tPset_SanitaryTerminalTypeBath.Material\tMULTILINETEXT\t\t571\t1\tIfcMaterial\t1\nPARAM\t3917936e-b404-4131-9772-84e16b65186f\tPset_SanitaryTerminalTypeBath.MaterialThickness\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t04f40a39-2d44-41ca-a498-6f969d7590ad\tPset_SanitaryTerminalTypeBath.NominalDepth\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf4383efd-5724-4cef-ab97-001baea609e7\tPset_SanitaryTerminalTypeBath.NominalLength\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td3c9412d-f511-4093-a420-2710c09b3ed6\tPset_SanitaryTerminalTypeBath.NominalWidth\tLENGTH\t\t571\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t572\tPset_SanitaryTerminalTypeBidet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbaab89e9-6cce-4f8e-925b-c9eb61559477\tPset_SanitaryTerminalTypeBidet.BidetMounting\tTEXT\t\t572\t1\tPEnum_SanitaryMounting\t1\nPARAM\t6ceb19bb-1e96-4488-8db3-4c0e3b5890df\tPset_SanitaryTerminalTypeBidet.Color\tTEXT\t\t572\t1\tIfcText\t1\nPARAM\t5bd0be80-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeBidet.DrainSize\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9864ad7a-1048-4b03-b2fd-d644c5e06a7b\tPset_SanitaryTerminalTypeBidet.Material\tMULTILINETEXT\t\t572\t1\tIfcMaterial\t1\nPARAM\t23c97b80-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeBidet.Mounting\tTEXT\t\t572\t1\tPEnum_SanitaryMounting\t1\nPARAM\t3aaefcc3-7900-42ac-b01a-48fbb16e1b5f\tPset_SanitaryTerminalTypeBidet.NominalDepth\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te72199c7-c1d7-4f0a-a54b-9c4e311feec8\tPset_SanitaryTerminalTypeBidet.NominalLength\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2c4195fc-24eb-46b4-b20f-148ae752543e\tPset_SanitaryTerminalTypeBidet.NominalWidth\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t53788380-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeBidet.SpilloverLevel\tLENGTH\t\t572\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t573\tPset_SanitaryTerminalTypeCistern\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t786cf680-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCistern.CisternCapacity\tVOLUME\t\t573\t1\tIfcVolumeMeasure\t1\nPARAM\t56f2fbbb-f9ba-4f7e-9517-3488fab4938d\tPset_SanitaryTerminalTypeCistern.CisternColor\tTEXT\t\t573\t1\tIfcText\t1\nPARAM\t6a1eda80-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCistern.CisternHeight\tTEXT\t\t573\t1\tPEnum_CisternHeight\t1\nPARAM\te52311c3-8caf-4f44-8ce2-dbdd740e8834\tPset_SanitaryTerminalTypeCistern.CisternMaterial\tMULTILINETEXT\t\t573\t1\tIfcMaterial\t1\nPARAM\t95a1c500-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCistern.FlushRate\tMULTILINETEXT\t\t573\t1\tPropertyBoundedValue\t1\nPARAM\t84f14f00-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCistern.FlushType\tTEXT\t\t573\t1\tPEnum_FlushType\t1\nPARAM\t9cc8d300-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCistern.IsAutomaticFlush\tYESNO\t\t573\t1\tIfcBoolean\t1\nPARAM\t7dca4100-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCistern.IsSingleFlush\tYESNO\t\t573\t1\tIfcBoolean\t1\n#\nGROUP\t574\tPset_SanitaryTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t93112095-298e-44d2-9aea-7995d82eb202\tPset_SanitaryTerminalTypeCommon.Color\tTEXT\t\t574\t1\tIfcLabel\t1\nPARAM\t9c2c6aa5-fc5f-42ba-ba6e-e7f1d2992b3f\tPset_SanitaryTerminalTypeCommon.Colour\tTEXT\t\t574\t1\tIfcLabel\t1\nPARAM\tbb516e7b-73f8-4dcd-85b9-53f3b61f0f22\tPset_SanitaryTerminalTypeCommon.NominalDepth\tLENGTH\t\t574\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t36bde0df-4e7b-4ff4-a9b7-b5191c5e82f7\tPset_SanitaryTerminalTypeCommon.NominalLength\tLENGTH\t\t574\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t6cf48d3d-336e-4eb0-acdf-9bdf68db0d60\tPset_SanitaryTerminalTypeCommon.NominalWidth\tLENGTH\t\t574\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\taeaa7600-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCommon.Reference\tTEXT\t\t574\t1\tIfcIdentifier\t1\nPARAM\t1b1c71bc-3419-4116-982b-bacb563822d6\tPset_SanitaryTerminalTypeCommon.Status\tTEXT\t\t574\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t575\tPset_SanitaryTerminalTypeSanitaryFountain\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tca0e0236-4c1c-4b85-afaa-dad76d85565f\tPset_SanitaryTerminalTypeSanitaryFountain.Color\tTEXT\t\t575\t1\tIfcText\t1\nPARAM\tf8935c00-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSanitaryFountain.DrainSize\tLENGTH\t\t575\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbb2ece80-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSanitaryFountain.FountainType\tTEXT\t\t575\t1\tPEnum_FountainType\t1\nPARAM\td5a96864-185d-4f2c-883d-fd064355599c\tPset_SanitaryTerminalTypeSanitaryFountain.Material\tMULTILINETEXT\t\t575\t1\tIfcMaterial\t1\nPARAM\tc7b32700-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSanitaryFountain.Mounting\tTEXT\t\t575\t1\tPEnum_SanitaryMounting\t1\nPARAM\t182e36f3-84dd-489c-a2a3-e7f639185afb\tPset_SanitaryTerminalTypeSanitaryFountain.NominalDepth\tLENGTH\t\t575\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8a04fec7-0858-4138-b351-5a2113f19c38\tPset_SanitaryTerminalTypeSanitaryFountain.NominalLength\tLENGTH\t\t575\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb2a4597a-26cc-4f89-ad58-f4cdb887661e\tPset_SanitaryTerminalTypeSanitaryFountain.NominalWidth\tLENGTH\t\t575\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t576\tPset_SanitaryTerminalTypeShower\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfff5e822-96b6-4900-aaee-b6758686eacf\tPset_SanitaryTerminalTypeShower.Color\tTEXT\t\t576\t1\tIfcText\t1\nPARAM\t427c4200-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeShower.DrainSize\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t15c82a80-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeShower.HasTray\tYESNO\t\t576\t1\tIfcBoolean\t1\nPARAM\t95d6b066-02e9-4ecd-965d-c7488459b975\tPset_SanitaryTerminalTypeShower.Material\tMULTILINETEXT\t\t576\t1\tIfcMaterial\t1\nPARAM\ta234ce91-6851-4f72-857c-53e2cbba223d\tPset_SanitaryTerminalTypeShower.MaterialThickness\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te855e578-480d-4977-9977-04c614101735\tPset_SanitaryTerminalTypeShower.NominalDepth\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t481a718e-dde9-425e-9e66-fc00797eea9f\tPset_SanitaryTerminalTypeShower.NominalLength\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf8e0636f-ed4b-4943-8d1d-c96fd2b2081c\tPset_SanitaryTerminalTypeShower.NominalWidth\tLENGTH\t\t576\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3bedca80-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeShower.ShowerHeadDescription\tTEXT\t\t576\t1\tIfcText\t1\nPARAM\t06e17800-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeShower.ShowerType\tTEXT\t\t576\t1\tPEnum_ShowerType\t1\n#\nGROUP\t577\tPset_SanitaryTerminalTypeSink\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta141bb80-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSink.Color\tTEXT\t\t577\t1\tIfcLabel\t1\nPARAM\t56794e45-8656-4018-98ed-ef6ce5bbea78\tPset_SanitaryTerminalTypeSink.Colour\tTEXT\t\t577\t1\tIfcLabel\t1\nPARAM\tbc143000-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSink.DrainSize\tLENGTH\t\t577\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t232c7d3f-0165-4fef-a047-8c4e4a180491\tPset_SanitaryTerminalTypeSink.Material\tMULTILINETEXT\t\t577\t1\tIfcMaterial\t1\nPARAM\t7192b380-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSink.Mounting\tTEXT\t\t577\t1\tPEnum_SanitaryMounting\t1\nPARAM\tc5050180-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSink.MountingOffset\tLENGTH\t\t577\t1\tIfcLengthMeasure\t1\nPARAM\t1b4712bd-9af8-4aa2-800b-88930ee956a9\tPset_SanitaryTerminalTypeSink.NominalDepth\tLENGTH\t\t577\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9fc87f56-dad4-4d6d-8e01-298e16818e76\tPset_SanitaryTerminalTypeSink.NominalLength\tLENGTH\t\t577\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf3534007-dbcd-4b90-9abb-c1c3e83b6dd7\tPset_SanitaryTerminalTypeSink.NominalWidth\tLENGTH\t\t577\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6933b16c-04d4-45d2-b1a2-a50d994b5571\tPset_SanitaryTerminalTypeSink.SinkMounting\tTEXT\t\t577\t1\tPEnum_SanitaryMounting\t1\nPARAM\t532cb800-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSink.SinkType\tTEXT\t\t577\t1\tPEnum_SinkType\t1\n#\nGROUP\t578\tPset_SanitaryTerminalTypeToiletPan\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7ff9da9e-924b-4c10-8580-dd69077c5db4\tPset_SanitaryTerminalTypeToiletPan.NominalDepth\tLENGTH\t\t578\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t80fe3d1b-ad22-4a95-add8-f32f93ffdeeb\tPset_SanitaryTerminalTypeToiletPan.NominalLength\tLENGTH\t\t578\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t084467e9-4a9e-470a-a103-a2210ddc3115\tPset_SanitaryTerminalTypeToiletPan.NominalWidth\tLENGTH\t\t578\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te8354d40-2382-4aee-9ab8-9362ef5b799a\tPset_SanitaryTerminalTypeToiletPan.PanColor\tTEXT\t\t578\t1\tIfcText\t1\nPARAM\ta3f7edae-9d77-49d2-801d-e5a446d33e4f\tPset_SanitaryTerminalTypeToiletPan.PanMaterial\tMULTILINETEXT\t\t578\t1\tIfcMaterial\t1\nPARAM\tf7aefa00-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeToiletPan.PanMounting\tTEXT\t\t578\t1\tPEnum_SanitaryMounting\t1\nPARAM\t0f867e00-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeToiletPan.SpilloverLevel\tLENGTH\t\t578\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te7971a80-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeToiletPan.ToiletPanType\tTEXT\t\t578\t1\tPEnum_ToiletPanType\t1\nPARAM\td221f080-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeToiletPan.ToiletType\tTEXT\t\t578\t1\tPEnum_ToiletType\t1\n#\nGROUP\t579\tPset_SanitaryTerminalTypeUrinal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4361a380-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeUrinal.Mounting\tTEXT\t\t579\t1\tPEnum_SanitaryMounting\t1\nPARAM\ta2569e5f-8a74-4c80-80ec-c5230816cf08\tPset_SanitaryTerminalTypeUrinal.NominalDepth\tLENGTH\t\t579\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t87775b31-1501-410d-9521-93d3eb2a07f6\tPset_SanitaryTerminalTypeUrinal.NominalLength\tLENGTH\t\t579\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td9a306f1-6b95-45af-9a97-392480084695\tPset_SanitaryTerminalTypeUrinal.NominalWidth\tLENGTH\t\t579\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t596f6400-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeUrinal.SpilloverLevel\tLENGTH\t\t579\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t506fe258-a383-466d-ac5f-00d8c61e315a\tPset_SanitaryTerminalTypeUrinal.UrinalColor\tTEXT\t\t579\t1\tIfcText\t1\nPARAM\te988c680-6b70-4d6a-b792-2672dad544b3\tPset_SanitaryTerminalTypeUrinal.UrinalMaterial\tMULTILINETEXT\t\t579\t1\tIfcMaterial\t1\nPARAM\t35138780-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeUrinal.UrinalType\tTEXT\t\t579\t1\tPEnum_UrinalType\t1\n#\nGROUP\t580\tPset_SanitaryTerminalTypeWashHandBasin\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta5150092-5f8a-48ba-b12a-95995535f7c4\tPset_SanitaryTerminalTypeWashHandBasin.Color\tTEXT\t\t580\t1\tIfcText\t1\nPARAM\tbff48200-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeWashHandBasin.DrainSize\tLENGTH\t\t580\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfba34126-ee67-4152-b619-03e6dfa9fd79\tPset_SanitaryTerminalTypeWashHandBasin.Material\tMULTILINETEXT\t\t580\t1\tIfcMaterial\t1\nPARAM\t9176a700-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeWashHandBasin.Mounting\tTEXT\t\t580\t1\tPEnum_SanitaryMounting\t1\nPARAM\tc97dea00-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeWashHandBasin.MountingOffset\tLENGTH\t\t580\t1\tIfcLengthMeasure\t1\nPARAM\t01489ce4-3889-4324-8748-2dedd0f6f822\tPset_SanitaryTerminalTypeWashHandBasin.NominalDepth\tLENGTH\t\t580\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4dd7414e-6e8b-4b7d-b6ea-e79a799e0aca\tPset_SanitaryTerminalTypeWashHandBasin.NominalLength\tLENGTH\t\t580\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf32cb2f0-f755-4ef0-b247-42d268446b18\tPset_SanitaryTerminalTypeWashHandBasin.NominalWidth\tLENGTH\t\t580\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7c6eee7c-b025-41a9-a938-5ab1421ce6a5\tPset_SanitaryTerminalTypeWashHandBasin.WashHandBasinMounting\tTEXT\t\t580\t1\tPEnum_SanitaryMounting\t1\nPARAM\t802d9a80-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeWashHandBasin.WashHandBasinType\tTEXT\t\t580\t1\tPEnum_WashHandBasinType\t1\n#\nGROUP\t581\tPset_SanitaryTerminalTypeWCSeat\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf2729eee-246a-4c13-b106-685e189745fb\tPset_SanitaryTerminalTypeWCSeat.SeatColor\tTEXT\t\t581\t1\tIfcText\t1\nPARAM\t00d07849-b909-4a6a-a5a9-46c8c850751e\tPset_SanitaryTerminalTypeWCSeat.SeatHasCover\tYESNO\t\t581\t1\tIfcBoolean\t1\nPARAM\tcf4db829-68ea-4975-a6ae-7c0c3eaf540a\tPset_SanitaryTerminalTypeWCSeat.SeatMaterial\tMULTILINETEXT\t\t581\t1\tIfcMaterial\t1\nPARAM\t9bdf5d49-6054-45fd-a46d-bf7888c1431b\tPset_SanitaryTerminalTypeWCSeat.SeatType\tTEXT\t\t581\t1\tPEnum_ToiletSeatType\t1\n#\nGROUP\t582\tPset_SectioningDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf1dde6cc-8837-40d0-a5db-be9237763dcb\tPset_SectioningDevice.SectioningDeviceType\tTEXT\t\t582\t1\tPEnum_SectioningDeviceType\t1\n#\nGROUP\t583\tPset_SectionInsulator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taf925669-06bf-408d-95b8-747ae9e58641\tPset_SectionInsulator.ACResistance\tNUMBER\t\t583\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t45f758ba-f8fd-4774-be57-bb29acbbbffc\tPset_SectionInsulator.IsArcSuppressing\tYESNO\t\t583\t1\tIfcBoolean\t1\nPARAM\td1dca2c8-d303-4dc3-8e2a-8015c049721b\tPset_SectionInsulator.NumberOfWires\tINTEGER\t\t583\t1\tIfcCountMeasure\t1\nPARAM\t7389bdd2-9921-4813-bc19-8bd476c4397f\tPset_SectionInsulator.TensileStrength\tNUMBER\t\t583\t1\tIfcForceMeasure\t1\n#\nGROUP\t584\tPset_SensorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td8fd3300-d204-11e1-8000-00215ad4efdf\tPset_SensorPHistory.Direction\tMULTILINETEXT\t\t584\t1\tIfcTimeSeries\t1\nPARAM\tdbf82380-d204-11e1-8000-00215ad4efdf\tPset_SensorPHistory.Quality\tMULTILINETEXT\t\t584\t1\tIfcTimeSeries\t1\nPARAM\tdef31400-d204-11e1-8000-00215ad4efdf\tPset_SensorPHistory.Status\tMULTILINETEXT\t\t584\t1\tIfcTimeSeries\t1\nPARAM\td569ac00-d204-11e1-8000-00215ad4efdf\tPset_SensorPHistory.Value\tMULTILINETEXT\t\t584\t1\tIfcTimeSeries\t1\n#\nGROUP\t585\tPset_SensorTypeCO2Sensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t59b695b5-0fb6-4612-b29a-bec57aa10d46\tPset_SensorTypeCO2Sensor.AccuracyOfCO2Sensor\tNUMBER\t\t585\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t395e986e-db11-45d5-8d56-8dfe92f80b98\tPset_SensorTypeCO2Sensor.CO2SensorRange\tMULTILINETEXT\t\t585\t1\tPropertyBoundedValue\t1\nPARAM\t41d7257b-9519-4449-aa7c-a9a2a1b3a064\tPset_SensorTypeCO2Sensor.CoverageArea\tAREA\t\t585\t1\tIfcAreaMeasure\t1\nPARAM\tbf4aaaff-0d93-430f-a6a7-fcd155b6da0e\tPset_SensorTypeCO2Sensor.SetPointCO2Concentration\tMULTILINETEXT\t\t585\t1\tPropertyBoundedValue\t1\nPARAM\te4ab0c98-8417-4826-9c10-ddef20bb5aa9\tPset_SensorTypeCO2Sensor.SetPointConcentration\tMULTILINETEXT\t\t585\t1\tPropertyBoundedValue\t1\nPARAM\t4bc2730e-47e0-493b-a7d4-4d11a5d5d909\tPset_SensorTypeCO2Sensor.TimeConstant\tNUMBER\t\t585\t1\tIfcTimeMeasure\t1\nPARAM\t75519508-f5b6-40c7-84b5-38fb0c2ee23a\tPset_SensorTypeCO2Sensor.WashHandBasinSetPoint\tNUMBER\t\t585\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t586\tPset_SensorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te9151280-d204-11e1-8000-00215ad4efdf\tPset_SensorTypeCommon.Reference\tTEXT\t\t586\t1\tIfcIdentifier\t1\nPARAM\tf03c2080-d204-11e1-8000-00215ad4efdf\tPset_SensorTypeCommon.Status\tTEXT\t\t586\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t587\tPset_SensorTypeConductanceSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0649e100-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeConductanceSensor.SetPointConductance\tMULTILINETEXT\t\t587\t1\tPropertyBoundedValue\t1\n#\nGROUP\t588\tPset_SensorTypeContactSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t12ce3980-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeContactSensor.SetPointContact\tMULTILINETEXT\t\t588\t1\tPropertyBoundedValue\t1\n#\nGROUP\t589\tPset_SensorTypeEarthquakeSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5f3e8321-3a89-4813-81b0-242b0e0e793a\tPset_SensorTypeEarthquakeSensor.DataCollectionType\tTEXT\t\t589\t1\tPEnum_DataCollectionType\t1\nPARAM\te3c7a0c6-c282-439d-b4e3-bdf3a40e2885\tPset_SensorTypeEarthquakeSensor.DegreeOfLinearity\tNUMBER\t\t589\t1\tIfcRatioMeasure\t1\nPARAM\tec72c201-9f4f-48cc-972a-9b2681005e67\tPset_SensorTypeEarthquakeSensor.DynamicRange\tMULTILINETEXT\t\t589\t1\tPropertyBoundedValue\t1\nPARAM\tcb38594f-c0e2-40c6-9b1d-0ee69be8c27a\tPset_SensorTypeEarthquakeSensor.EarthquakeSensorRange\tMULTILINETEXT\t\t589\t1\tPropertyBoundedValue\t1\nPARAM\t1095d2c9-fc4c-4c29-ac66-140a4ac697ae\tPset_SensorTypeEarthquakeSensor.EarthquakeSensorType\tTEXT\t\t589\t1\tPEnum_EarthquakeSensorType\t1\nPARAM\t6dee041f-ce61-498d-b24d-6082642e3225\tPset_SensorTypeEarthquakeSensor.FullScaleOutput\tNUMBER\t\t589\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tb7e02eb5-5ff0-4453-9bd2-3b4f8b188d86\tPset_SensorTypeEarthquakeSensor.LinearVelocityResolution\tNUMBER\t\t589\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t9ce2440e-39f9-4896-bdb6-089db8642268\tPset_SensorTypeEarthquakeSensor.MarginOfError\tNUMBER\t\t589\t1\tIfcRatioMeasure\t1\nPARAM\ted210406-c7ba-4bc4-a57c-d60d6fadfc3f\tPset_SensorTypeEarthquakeSensor.SamplingFrequency\tNUMBER\t\t589\t1\tIfcFrequencyMeasure\t1\nPARAM\ta8efdec6-c210-46b3-be7c-96e216045e3f\tPset_SensorTypeEarthquakeSensor.SerialInterfaceType\tTEXT\t\t589\t1\tPEnum_SerialInterfaceType\t1\nPARAM\t73cbefb9-2a5c-4655-a4c7-f28fa0ac5254\tPset_SensorTypeEarthquakeSensor.TransverseSensitivityRatio\tNUMBER\t\t589\t1\tIfcRatioMeasure\t1\nPARAM\tdcd7dbe7-f972-49a5-af3c-f29152bee43e\tPset_SensorTypeEarthquakeSensor.WorkingState\tTEXT\t\t589\t1\tIfcLabel\t1\n#\nGROUP\t590\tPset_SensorTypeFireSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2679a000-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeFireSensor.AccuracyOfFireSensor\tNUMBER\t\t590\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t2083bf00-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeFireSensor.FireSensorSetPoint\tNUMBER\t\t590\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t2c6f8100-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeFireSensor.TimeConstant\tNUMBER\t\t590\t1\tIfcTimeMeasure\t1\n#\nGROUP\t591\tPset_SensorTypeFlowSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a250680-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeFlowSensor.SetPointFlow\tMULTILINETEXT\t\t591\t1\tPropertyBoundedValue\t1\n#\nGROUP\t592\tPset_SensorTypeForeignObjectDetectionSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tec328db0-4648-488c-ba71-f77ac991b765\tPset_SensorTypeForeignObjectDetectionSensor.ForeignObjectDetectionSensorType\tTEXT\t\t592\t1\tPEnum_ForeignObjectDetectionSensorType\t1\nPARAM\tfebc1a76-6ede-4ccb-88bf-3d1591a01c85\tPset_SensorTypeForeignObjectDetectionSensor.SerialInterfaceType\tTEXT\t\t592\t1\tPEnum_SerialInterfaceType\t1\nPARAM\tbaf3727f-5e4a-4400-8959-84237f6926a2\tPset_SensorTypeForeignObjectDetectionSensor.WorkingState\tTEXT\t\t592\t1\tIfcLabel\t1\n#\nGROUP\t593\tPset_SensorTypeFrostSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2c68553a-248d-4030-9438-39a8806ebd51\tPset_SensorTypeFrostSensor.SetPointFrost\tMULTILINETEXT\t\t593\t1\tPropertyBoundedValue\t1\n#\nGROUP\t594\tPset_SensorTypeGasSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t78e2ddc9-4918-410e-b182-4057b58a61cb\tPset_SensorTypeGasSensor.AccuracyOfGasSensor\tNUMBER\t\t594\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6a6ca500-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeGasSensor.CoverageArea\tAREA\t\t594\t1\tIfcAreaMeasure\t1\nPARAM\t490bb900-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeGasSensor.GasDetected\tTEXT\t\t594\t1\tIfcLabel\t1\nPARAM\t98ef6c5c-2966-49a2-a112-63ba9d89c0d6\tPset_SensorTypeGasSensor.GasSensorRange\tMULTILINETEXT\t\t594\t1\tPropertyBoundedValue\t1\nPARAM\ta579b900-5eee-423b-b81c-be1ef506b774\tPset_SensorTypeGasSensor.GasSensorSetPoint\tNUMBER\t\t594\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5163f400-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeGasSensor.SetPointConcentration\tMULTILINETEXT\t\t594\t1\tPropertyBoundedValue\t1\nPARAM\t4eff7f6b-adb9-4226-81ce-f16533709be5\tPset_SensorTypeGasSensor.TimeConstant\tNUMBER\t\t594\t1\tIfcTimeMeasure\t1\n#\nGROUP\t595\tPset_SensorTypeHeatSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7f493880-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeHeatSensor.CoverageArea\tAREA\t\t595\t1\tIfcAreaMeasure\t1\nPARAM\t3eb7b739-b6fe-4d8a-ad69-8d8e2b1b5d35\tPset_SensorTypeHeatSensor.HeatSensorAccuracy\tNUMBER\t\t595\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t9c5fd79b-803c-4ec9-8f5e-03ceab1ed077\tPset_SensorTypeHeatSensor.HeatSensorRange\tMULTILINETEXT\t\t595\t1\tPropertyBoundedValue\t1\nPARAM\t7a07da78-cdf5-48ff-af5e-bc0b789d445a\tPset_SensorTypeHeatSensor.HeatSensorSetPoint\tNUMBER\t\t595\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t8cfebe00-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeHeatSensor.RateOfTemperatureRise\tNUMBER\t\t595\t1\tIfcTemperatureRateOfChangeMeasure\t1\nPARAM\t84a68300-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeHeatSensor.SetPointTemperature\tMULTILINETEXT\t\t595\t1\tPropertyBoundedValue\t1\nPARAM\t4db5accc-0baf-4dc3-bb6f-06514d15112e\tPset_SensorTypeHeatSensor.TimeConstant\tNUMBER\t\t595\t1\tIfcTimeMeasure\t1\n#\nGROUP\t596\tPset_SensorTypeHumiditySensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t60e82933-dc48-4872-a0b9-02b848072efe\tPset_SensorTypeHumiditySensor.AccuracyOfHumiditySensor\tNUMBER\t\t596\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t2133f619-fe71-4d89-add4-65a268c052c1\tPset_SensorTypeHumiditySensor.HumiditySensorRange\tMULTILINETEXT\t\t596\t1\tPropertyBoundedValue\t1\nPARAM\t48a0ad4d-f0f2-4869-8313-acf522525030\tPset_SensorTypeHumiditySensor.HumiditySetPoint\tNUMBER\t\t596\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta6a00580-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeHumiditySensor.SetPointHumidity\tMULTILINETEXT\t\t596\t1\tPropertyBoundedValue\t1\nPARAM\t6ccc8f74-99f2-4549-96b3-1af2d71b9d24\tPset_SensorTypeHumiditySensor.TimeConstant\tNUMBER\t\t596\t1\tIfcTimeMeasure\t1\n#\nGROUP\t597\tPset_SensorTypeIdentifierSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t51b07040-b891-47dd-a5f7-01b8e246bf62\tPset_SensorTypeIdentifierSensor.SetPointIdentifier\tMULTILINETEXT\t\t597\t1\tPropertyBoundedValue\t1\n#\nGROUP\t598\tPset_SensorTypeIonConcentrationSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbcadc600-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeIonConcentrationSensor.SetPointConcentration\tMULTILINETEXT\t\t598\t1\tPropertyBoundedValue\t1\nPARAM\te2a9b8ac-82f3-484e-843b-36b8076284f2\tPset_SensorTypeIonConcentrationSensor.SetPointIonConcentration\tMULTILINETEXT\t\t598\t1\tPropertyBoundedValue\t1\nPARAM\tb61f4e80-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeIonConcentrationSensor.SubstanceDetected\tTEXT\t\t598\t1\tIfcLabel\t1\n#\nGROUP\t599\tPset_SensorTypeLevelSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc9cab500-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeLevelSensor.SetPointLevel\tMULTILINETEXT\t\t599\t1\tPropertyBoundedValue\t1\n#\nGROUP\t600\tPset_SensorTypeLightSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t74f3feeb-5dfb-40e0-8d83-6841ea2c3aeb\tPset_SensorTypeLightSensor.LightSensorAccuracy\tNUMBER\t\t600\t1\tIfcIlluminanceMeasure\t1\nPARAM\t7ac10515-4ef7-43e0-9dcf-4ea5d08fea08\tPset_SensorTypeLightSensor.LightSensorRange\tMULTILINETEXT\t\t600\t1\tPropertyBoundedValue\t1\nPARAM\tf68397d7-0f3c-461c-8f97-7931aeca75b5\tPset_SensorTypeLightSensor.LightSensorSetPoint\tNUMBER\t\t600\t1\tIfcIlluminanceMeasure\t1\nPARAM\te1a23900-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeLightSensor.SetPointIlluminance\tMULTILINETEXT\t\t600\t1\tPropertyBoundedValue\t1\nPARAM\td9aecf17-64c7-4704-8088-813a518bb948\tPset_SensorTypeLightSensor.TimeConstant\tNUMBER\t\t600\t1\tIfcTimeMeasure\t1\n#\nGROUP\t601\tPset_SensorTypeMoistureSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tee269180-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeMoistureSensor.SetPointMoisture\tMULTILINETEXT\t\t601\t1\tPropertyBoundedValue\t1\n#\nGROUP\t602\tPset_SensorTypeMovementSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfd0d4400-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeMovementSensor.MovementSensingType\tTEXT\t\t602\t1\tPEnum_MovementSensingType\t1\nPARAM\t09919c80-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeMovementSensor.SetPointMovement\tMULTILINETEXT\t\t602\t1\tPropertyBoundedValue\t1\nPARAM\tb0d48bba-5191-4f5f-8786-966d5957c83c\tPset_SensorTypeMovementSensor.TimeConstant\tNUMBER\t\t602\t1\tIfcTimeMeasure\t1\n#\nGROUP\t603\tPset_SensorTypePHSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1910e580-d206-11e1-8000-00215ad4efdf\tPset_SensorTypePHSensor.SetPointPH\tMULTILINETEXT\t\t603\t1\tPropertyBoundedValue\t1\n#\nGROUP\t604\tPset_SensorTypePressureSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfdeaffac-fea8-487d-8ccd-a7ddf3c493e3\tPset_SensorTypePressureSensor.AccuracyOfPressureSensor\tNUMBER\t\t604\t1\tIfcPressureMeasure\t1\nPARAM\t30e86980-d206-11e1-8000-00215ad4efdf\tPset_SensorTypePressureSensor.IsSwitch\tYESNO\t\t604\t1\tIfcBoolean\t1\nPARAM\t4bd27b63-84de-4ea2-98da-b563646beb5d\tPset_SensorTypePressureSensor.PressureSensorRange\tMULTILINETEXT\t\t604\t1\tPropertyBoundedValue\t1\nPARAM\tf516bca9-acf9-437f-8291-09df80788bea\tPset_SensorTypePressureSensor.PressureSensorSetPoint\tNUMBER\t\t604\t1\tIfcPressureMeasure\t1\nPARAM\t262dd480-d206-11e1-8000-00215ad4efdf\tPset_SensorTypePressureSensor.SetPointPressure\tMULTILINETEXT\t\t604\t1\tPropertyBoundedValue\t1\nPARAM\t781b9c4b-7f2f-4752-a2dc-4026bd5f2727\tPset_SensorTypePressureSensor.TimeConstant\tNUMBER\t\t604\t1\tIfcTimeMeasure\t1\n#\nGROUP\t605\tPset_SensorTypeRadiationSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3cd42b80-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeRadiationSensor.SetPointRadiation\tMULTILINETEXT\t\t605\t1\tPropertyBoundedValue\t1\n#\nGROUP\t606\tPset_SensorTypeRadioactivitySensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4bbade00-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeRadioactivitySensor.SetPointRadioactivity\tMULTILINETEXT\t\t606\t1\tPropertyBoundedValue\t1\n#\nGROUP\t607\tPset_SensorTypeRainSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf86abd5f-b8a8-4cdb-8744-73319be7eff5\tPset_SensorTypeRainSensor.DataCollectionType\tTEXT\t\t607\t1\tPEnum_DataCollectionType\t1\nPARAM\tf055c03d-b04a-4f98-a575-e700e9b2b88e\tPset_SensorTypeRainSensor.LengthMeasureResolution\tLENGTH\t\t607\t1\tIfcLengthMeasure\t1\nPARAM\tf6575f2f-4cb7-447f-aad3-5d2d5f2e3c33\tPset_SensorTypeRainSensor.MarginOfError\tNUMBER\t\t607\t1\tIfcRatioMeasure\t1\nPARAM\t84b55dfe-ce97-4324-80b9-6282d318d544\tPset_SensorTypeRainSensor.RainMeasureRange\tMULTILINETEXT\t\t607\t1\tPropertyBoundedValue\t1\nPARAM\tea1dd299-cfb9-44a2-9a25-297f68b184e1\tPset_SensorTypeRainSensor.RainSensorType\tTEXT\t\t607\t1\tPEnum_RainSensorType\t1\nPARAM\t22e5b507-ea2f-469f-ada7-3fafa3e42093\tPset_SensorTypeRainSensor.SamplingFrequency\tNUMBER\t\t607\t1\tIfcFrequencyMeasure\t1\nPARAM\t91a25e8d-ef29-41d1-af11-f92fe1fc538c\tPset_SensorTypeRainSensor.SerialInterfaceType\tTEXT\t\t607\t1\tPEnum_SerialInterfaceType\t1\nPARAM\t216e761f-1ec2-4d52-a732-974e559af10d\tPset_SensorTypeRainSensor.WorkingState\tTEXT\t\t607\t1\tIfcLabel\t1\n#\nGROUP\t608\tPset_SensorTypeSmokeSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf309cd80-99ad-4156-9903-c1e875c8416b\tPset_SensorTypeSmokeSensor.AccuracyOfSmokeSensor\tNUMBER\t\t608\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t58d7cd00-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeSmokeSensor.CoverageArea\tAREA\t\t608\t1\tIfcAreaMeasure\t1\nPARAM\t68571600-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeSmokeSensor.HasBuiltInAlarm\tYESNO\t\t608\t1\tIfcBoolean\t1\nPARAM\t4a1499ef-ac8f-4070-ba57-da8dbf11d47a\tPset_SensorTypeSmokeSensor.PressureSensorSetPoint\tNUMBER\t\t608\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5f664480-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeSmokeSensor.SetPointConcentration\tMULTILINETEXT\t\t608\t1\tPropertyBoundedValue\t1\nPARAM\t24787944-ad1a-4601-b5fc-e83940a3feec\tPset_SensorTypeSmokeSensor.SmokeSensorRange\tMULTILINETEXT\t\t608\t1\tPropertyBoundedValue\t1\nPARAM\t18b2e5e8-683d-4884-89ef-c81fe91292f1\tPset_SensorTypeSmokeSensor.TimeConstant\tNUMBER\t\t608\t1\tIfcTimeMeasure\t1\n#\nGROUP\t609\tPset_SensorTypeSnowSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2dbece66-efac-4a65-986b-921c7f913e53\tPset_SensorTypeSnowSensor.DataCollectionType\tTEXT\t\t609\t1\tPEnum_DataCollectionType\t1\nPARAM\t6b7d1a34-84ff-4cb0-87dd-14116975c7b6\tPset_SensorTypeSnowSensor.ImageResolution\tTEXT\t\t609\t1\tIfcLabel\t1\nPARAM\t40749387-dc53-40bf-9233-3486cdcf1833\tPset_SensorTypeSnowSensor.ImageShootingMode\tTEXT\t\t609\t1\tPEnum_ImageShootingMode\t1\nPARAM\t18b3da70-11ce-48c7-bd3a-e8063ff06496\tPset_SensorTypeSnowSensor.LengthMeasureResolution\tLENGTH\t\t609\t1\tIfcLengthMeasure\t1\nPARAM\t459c433a-da29-4b7e-98fa-3dc7cc8ca5f4\tPset_SensorTypeSnowSensor.MarginOfError\tNUMBER\t\t609\t1\tIfcRatioMeasure\t1\nPARAM\t89697b80-2f4a-4f51-adfa-e7281c62cd00\tPset_SensorTypeSnowSensor.SamplingFrequency\tNUMBER\t\t609\t1\tIfcFrequencyMeasure\t1\nPARAM\tc00efe0f-40f0-4f23-a3de-f06a7cf9baaa\tPset_SensorTypeSnowSensor.SerialInterfaceType\tTEXT\t\t609\t1\tPEnum_SerialInterfaceType\t1\nPARAM\t3421f5b5-8723-47bf-a85d-5e2b578c222c\tPset_SensorTypeSnowSensor.SnowSensorMeasureRange\tMULTILINETEXT\t\t609\t1\tPropertyBoundedValue\t1\nPARAM\t2528262a-4077-4bed-aa7f-754e6ebfb9ca\tPset_SensorTypeSnowSensor.SnowSensorType\tTEXT\t\t609\t1\tPEnum_SnowSensorType\t1\n#\nGROUP\t610\tPset_SensorTypeSoundSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7442d800-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeSoundSensor.SetPointSound\tMULTILINETEXT\t\t610\t1\tPropertyBoundedValue\t1\nPARAM\t721c40d1-425d-443d-990a-2c1d747439d6\tPset_SensorTypeSoundSensor.SoundSensorAccuracy\tNUMBER\t\t610\t1\tIfcSoundPressureMeasure\t1\nPARAM\ta5ef093a-ea25-4d46-9bff-f533a8d341a5\tPset_SensorTypeSoundSensor.SoundSensorRange\tMULTILINETEXT\t\t610\t1\tPropertyBoundedValue\t1\nPARAM\t5c1326e6-b4cd-4e43-85e3-e06f5d6bf882\tPset_SensorTypeSoundSensor.SoundSensorSetPoint\tNUMBER\t\t610\t1\tIfcSoundPressureMeasure\t1\nPARAM\tda38ec03-e9ce-4d0d-9946-38a0928ce169\tPset_SensorTypeSoundSensor.TimeConstant\tNUMBER\t\t610\t1\tIfcTimeMeasure\t1\n#\nGROUP\t611\tPset_SensorTypeTemperatureSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc62dcf5-413f-4286-aba9-1b08f010c8b6\tPset_SensorTypeTemperatureSensor.AccuracyOfTemperatureSensor\tNUMBER\t\t611\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t93416a00-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeTemperatureSensor.SetPointTemperature\tMULTILINETEXT\t\t611\t1\tPropertyBoundedValue\t1\nPARAM\t5203274c-a81a-4a21-957a-0e6aee5e58c6\tPset_SensorTypeTemperatureSensor.TemperatureSensorRange\tMULTILINETEXT\t\t611\t1\tPropertyBoundedValue\t1\nPARAM\te6e109d6-e05b-4e1a-98d9-d4371defbadf\tPset_SensorTypeTemperatureSensor.TemperatureSensorSetPoint\tNUMBER\t\t611\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t815fc700-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeTemperatureSensor.TemperatureSensorType\tTEXT\t\t611\t1\tPEnum_TemperatureSensorType\t1\nPARAM\tc0c2d5da-e2ec-4f7a-8c39-a997740153ed\tPset_SensorTypeTemperatureSensor.TimeConstant\tNUMBER\t\t611\t1\tIfcTimeMeasure\t1\n#\nGROUP\t612\tPset_SensorTypeTurnoutClosureSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3898a5fe-017c-4acd-a947-ec39e204a5cf\tPset_SensorTypeTurnoutClosureSensor.DetectionRange\tLENGTH\t\t612\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3b0fca2c-ea28-46bb-ab38-921f7812a569\tPset_SensorTypeTurnoutClosureSensor.IndicationRodMovementRange\tMULTILINETEXT\t\t612\t1\tPropertyBoundedValue\t1\n#\nGROUP\t613\tPset_SensorTypeWindSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta9138c4d-c157-4361-b10c-7c49b05c37f6\tPset_SensorTypeWindSensor.DampingRatio\tNUMBER\t\t613\t1\tIfcRatioMeasure\t1\nPARAM\t6137fb3d-48fb-493a-82db-f3cb3c528cb4\tPset_SensorTypeWindSensor.DataCollectionType\tTEXT\t\t613\t1\tPEnum_DataCollectionType\t1\nPARAM\tafb68323-25e9-4567-972f-2e3d61d6f929\tPset_SensorTypeWindSensor.LinearVelocityResolution\tNUMBER\t\t613\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t60e284c1-72cc-42b6-a8f4-8433fb448b3b\tPset_SensorTypeWindSensor.MarginOfError\tNUMBER\t\t613\t1\tIfcRatioMeasure\t1\nPARAM\t80f3caba-e51a-4418-bdb6-b0c16564429f\tPset_SensorTypeWindSensor.SamplingFrequency\tNUMBER\t\t613\t1\tIfcFrequencyMeasure\t1\nPARAM\t2393b941-3ebd-476c-8e3d-69b5f37851a1\tPset_SensorTypeWindSensor.SerialInterfaceType\tTEXT\t\t613\t1\tPEnum_SerialInterfaceType\t1\nPARAM\tb66c1980-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeWindSensor.SetPointSpeed\tNUMBER\t\t613\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t3c85d5ec-098d-4a44-be64-778f77ae7800\tPset_SensorTypeWindSensor.StartingWindSpeed\tNUMBER\t\t613\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tfe0835ad-0de4-498f-b9a4-bd015409ae10\tPset_SensorTypeWindSensor.TimeConstant\tNUMBER\t\t613\t1\tIfcTimeMeasure\t1\nPARAM\te60683f4-f6a4-402f-a300-7e6ed61bbdd2\tPset_SensorTypeWindSensor.WindAngleRange\tMULTILINETEXT\t\t613\t1\tPropertyBoundedValue\t1\nPARAM\ta2c0b300-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeWindSensor.WindSensorType\tTEXT\t\t613\t1\tPEnum_WindSensorType\t1\nPARAM\t251665bb-2ead-4548-8d44-ae52cfc6b4f4\tPset_SensorTypeWindSensor.WindSpeedRange\tMULTILINETEXT\t\t613\t1\tPropertyBoundedValue\t1\nPARAM\t9cd7089a-3cc0-4d56-8289-d36323332bce\tPset_SensorTypeWindSensor.WorkingState\tTEXT\t\t613\t1\tIfcLabel\t1\n#\nGROUP\t614\tPset_ServiceLife\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8eb2f467-91c2-42e7-b997-996569152d4f\tPset_ServiceLife.MeanTimeBetweenFailure\tTEXT\t\t614\t1\tIfcDuration\t1\nPARAM\teadfd580-d206-11e1-8000-00215ad4efdf\tPset_ServiceLife.ServiceLifeDuration\tMULTILINETEXT\t\t614\t1\tPropertyBoundedValue\t1\n#\nGROUP\t615\tPset_ServiceLifeFactors\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8d77f8cb-925b-4cfd-bea4-8301f42c89a0\tPset_ServiceLifeFactors.DesignLevel\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\nPARAM\tab27c286-d027-498e-962a-bd4fa0cab9a8\tPset_ServiceLifeFactors.IndoorEnvironment\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\nPARAM\t37ac936a-1b0a-42bf-a3c0-f4998cca50e4\tPset_ServiceLifeFactors.InUseConditions\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\nPARAM\t97e75274-0425-44a8-9cb6-5b8a94766d30\tPset_ServiceLifeFactors.MaintenanceLevel\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\nPARAM\t9988ab22-befe-45c9-ab3c-94972c61bd90\tPset_ServiceLifeFactors.OutdoorEnvironment\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\nPARAM\td5f52787-15be-42a0-b539-cf3f060054e3\tPset_ServiceLifeFactors.QualityOfComponents\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\nPARAM\tac78d9e0-d39b-43f4-af2c-7b7596d60667\tPset_ServiceLifeFactors.WorkExecutionLevel\tMULTILINETEXT\t\t615\t1\tPropertyBoundedValue\t1\n#\nGROUP\t616\tPset_ShadingDeviceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t69d50e00-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.IsExternal\tYESNO\t\t616\t1\tIfcBoolean\t1\nPARAM\t6f325880-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.MechanicalOperated\tYESNO\t\t616\t1\tIfcBoolean\t1\nPARAM\t47db8b80-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.Reference\tTEXT\t\t616\t1\tIfcIdentifier\t1\nPARAM\ta1dc5100-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.Roughness\tTEXT\t\t616\t1\tIfcLabel\t1\nPARAM\t5de94c00-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.ShadingDeviceType\tTEXT\t\t616\t1\tPEnum_ElementShading\t1\nPARAM\t85401900-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.SolarReflectance\tNUMBER\t\t616\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t79eced80-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.SolarTransmittance\tNUMBER\t\t616\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t4e6a0300-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.Status\tTEXT\t\t616\t1\tPEnum_ElementStatus\t1\nPARAM\ta86ac880-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.SurfaceColor\tTEXT\t\t616\t1\tIfcLabel\t1\nPARAM\ta0fcee0e-2062-4e6d-82ef-70d10e7bbf73\tPset_ShadingDeviceCommon.SurfaceColour\tTEXT\t\t616\t1\tIfcLabel\t1\nPARAM\t75283980-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.ThermalTransmittance\tNUMBER\t\t616\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t9c7f0680-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.VisibleLightReflectance\tNUMBER\t\t616\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t7f4a3800-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.VisibleLightTransmittance\tNUMBER\t\t616\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t617\tPset_ShadingDevicePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc6382d80-d207-11e1-8000-00215ad4efdf\tPset_ShadingDevicePHistory.Azimuth\tMULTILINETEXT\t\t617\t1\tIfcTimeSeries\t1\nPARAM\tb3255d80-d207-11e1-8000-00215ad4efdf\tPset_ShadingDevicePHistory.TiltAngle\tMULTILINETEXT\t\t617\t1\tIfcTimeSeries\t1\n#\nGROUP\t618\tPset_ShipLockCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t93f5e45e-8fb9-440b-81e3-a9e7bc2a1865\tPset_ShipLockCommon.CillLevelLowerHead\tLENGTH\t\t618\t1\tIfcLengthMeasure\t1\nPARAM\tda41ae54-2cdf-4712-abed-29845ed43854\tPset_ShipLockCommon.CillLevelUpperHead\tLENGTH\t\t618\t1\tIfcLengthMeasure\t1\nPARAM\t4439e607-c975-46cf-995b-3ca9232a40dc\tPset_ShipLockCommon.WaterDeliverySystemType\tTEXT\t\t618\t1\tIfcLabel\t1\nPARAM\t5ff96806-c6af-4ea9-b96a-bd07b9ddd186\tPset_ShipLockCommon.WaterDeliveryValveType\tTEXT\t\t618\t1\tIfcLabel\t1\n#\nGROUP\t619\tPset_ShiplockComplex\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tff47c027-d82f-4faa-b684-26238b0f8903\tPset_ShiplockComplex.LockChamberLevels\tINTEGER\t\t619\t1\tIfcCountMeasure\t1\nPARAM\t54996247-07ba-4c96-9fa5-f0914d8374b3\tPset_ShiplockComplex.LockGrade\tTEXT\t\t619\t1\tIfcLabel\t1\nPARAM\t199dd5ec-f01b-4188-bcdd-ac7d3777e726\tPset_ShiplockComplex.LockLines\tINTEGER\t\t619\t1\tIfcCountMeasure\t1\nPARAM\taaa6a2c1-63bb-4e77-8fb7-87ae09ccd0cb\tPset_ShiplockComplex.LockMode\tTEXT\t\t619\t1\tIfcLabel\t1\n#\nGROUP\t620\tPset_ShiplockDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5c4d5950-e3c9-4ad6-92b9-1350736e08bf\tPset_ShiplockDesignCriteria.DownstreamFloodWaterLevel\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\t31b04fe1-2fdd-45f5-bb91-458c08975348\tPset_ShiplockDesignCriteria.DownstreamMaintenanceWaterLevel\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\t2ba451a3-55ef-4ebf-a433-cc362e1e1346\tPset_ShiplockDesignCriteria.MaximumDownstreamNavigableWaterLevel\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\t994da1d9-4bf0-4e44-a86d-d5e83c70fd9f\tPset_ShiplockDesignCriteria.MaximumUpstreamNavigableWaterLevel\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\taacb77eb-1a96-4576-a7e1-3a5b5fbcc1cf\tPset_ShiplockDesignCriteria.MinimumDownstreamNavigableWaterLevel\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\te92fb730-38ac-4655-8326-e9d623bf0873\tPset_ShiplockDesignCriteria.MinimumUpstreamNavigableWaterLevel\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\t2896f545-b381-4c70-a730-59a132030998\tPset_ShiplockDesignCriteria.UpstreamFloodWaterLevel\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\nPARAM\te716b940-d7d8-4b27-a02d-903bda55a40f\tPset_ShiplockDesignCriteria.UpstreamMaintenanceWaterLevel\tLENGTH\t\t620\t1\tIfcLengthMeasure\t1\n#\nGROUP\t621\tPset_ShipyardCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t08135f85-b07e-4d4a-adf4-c23a2f761f9b\tPset_ShipyardCommon.PrimaryProductionType\tTEXT\t\t621\t1\tIfcLabel\t1\n#\nGROUP\t622\tPset_SignalFrame\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcf21ca18-679f-4d61-9ca7-013558ded191\tPset_SignalFrame.BackboardType\tTEXT\t\t622\t1\tIfcLabel\t1\nPARAM\t16f58c9e-b856-4433-a5c0-0a076f1dab91\tPset_SignalFrame.NominalWidth\tLENGTH\t\t622\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t2bf98d0d-d3ae-4998-bd78-b61dc13a62ac\tPset_SignalFrame.SignalFrameBackboardDiameter\tLENGTH\t\t622\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0c347ea1-5ec1-44eb-aa92-ddc848f69499\tPset_SignalFrame.SignalFrameBackboardHeight\tLENGTH\t\t622\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf64f5c56-8586-4e1e-98d0-4a6eece6a4de\tPset_SignalFrame.SignalFrameType\tTEXT\t\t622\t1\tIfcLabel\t1\nPARAM\tec386b6c-6f46-403c-8f0b-793cfcf19b23\tPset_SignalFrame.SignalIndicatorType\tTEXT\t\t622\t1\tPEnum_SignalIndicatorType\t1\n#\nGROUP\t623\tPset_SignCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tddbb7f25-02b2-481f-8721-f47a2b6594f7\tPset_SignCommon.Category\tTEXT\t\t623\t1\tIfcLabel\t1\nPARAM\tf98ce2af-7ce5-4ea2-a9ad-f2224572dac3\tPset_SignCommon.IsExternal\tYESNO\t\t623\t1\tIfcBoolean\t1\nPARAM\t86485264-3067-4afa-a88b-8bc7298233c0\tPset_SignCommon.Reference\tTEXT\t\t623\t1\tIfcIdentifier\t1\nPARAM\t00f83934-3685-460b-a4fd-8e6f5b10f5f7\tPset_SignCommon.TactileMarking\tYESNO\t\t623\t1\tIfcBoolean\t1\n#\nGROUP\t624\tPset_SiteCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdc32ed2d-58f7-4638-88fc-8a0dcc1ebc54\tPset_SiteCommon.BuildableArea\tAREA\t\t624\t1\tIfcAreaMeasure\t1\nPARAM\t41ff7c55-cd01-4e78-972c-c7ec49853817\tPset_SiteCommon.BuildingHeightLimit\tLENGTH\t\t624\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6e4bc3ba-6026-4923-9256-fdc3b7dcad0b\tPset_SiteCommon.FloorAreaRatio\tNUMBER\t\t624\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf5496012-83e8-49e8-b2fc-d0639c9c7394\tPset_SiteCommon.GrossAreaPlanned\tAREA\t\t624\t1\tIfcAreaMeasure\t1\nPARAM\t2db3713c-6ec4-4f96-82d4-95f0ca8c184b\tPset_SiteCommon.Reference\tTEXT\t\t624\t1\tIfcIdentifier\t1\nPARAM\tcec026c1-b978-4d3c-b657-a67fb34be612\tPset_SiteCommon.SiteCoverageRatio\tNUMBER\t\t624\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t004297b7-015a-4993-9a20-81ae39fc5df2\tPset_SiteCommon.TotalArea\tAREA\t\t624\t1\tIfcAreaMeasure\t1\n#\nGROUP\t625\tPset_SiteWeather\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9469744b-4e60-4902-a895-6dbc28cc329f\tPset_SiteWeather.MaxAmbientTemp\tNUMBER\t\t625\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\ta0998b67-40a9-4e5a-907d-b426533a05a5\tPset_SiteWeather.MinAmbientTemp\tNUMBER\t\t625\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t626\tPset_SlabCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta3c71da3-c4bd-40aa-bf35-5cf18aeeeec0\tPset_SlabCommon.AcousticRating\tTEXT\t\t626\t1\tIfcLabel\t1\nPARAM\t3934d753-d8ce-484d-8311-dcab5d825590\tPset_SlabCommon.Combustible\tYESNO\t\t626\t1\tIfcBoolean\t1\nPARAM\t5fab7762-010a-4d66-a94c-15a679090e37\tPset_SlabCommon.Compartmentation\tYESNO\t\t626\t1\tIfcBoolean\t1\nPARAM\tc93f5556-48c4-433a-9eab-b6e2e1bec9a9\tPset_SlabCommon.FireRating\tTEXT\t\t626\t1\tIfcLabel\t1\nPARAM\t4d5197c1-d7c1-40ee-932f-b1339f2b570d\tPset_SlabCommon.IsExternal\tYESNO\t\t626\t1\tIfcBoolean\t1\nPARAM\t92825b2b-4c88-4474-b84c-09c03ed3783a\tPset_SlabCommon.LoadBearing\tYESNO\t\t626\t1\tIfcBoolean\t1\nPARAM\t49598380-d208-11e1-8000-00215ad4efdf\tPset_SlabCommon.PitchAngle\tNUMBER\t\t626\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tfd7bdaba-bb4e-43de-a6c5-20478d9825e0\tPset_SlabCommon.Reference\tTEXT\t\t626\t1\tIfcIdentifier\t1\nPARAM\t3c3b5e34-702d-420a-ba1c-051f3025807d\tPset_SlabCommon.Status\tTEXT\t\t626\t1\tPEnum_ElementStatus\t1\nPARAM\td93380fd-a51f-402d-8885-b98a4255837e\tPset_SlabCommon.SurfaceSpreadOfFlame\tTEXT\t\t626\t1\tIfcLabel\t1\nPARAM\tade1a8e6-1272-4665-a7ff-9c1077125690\tPset_SlabCommon.ThermalTransmittance\tNUMBER\t\t626\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t627\tPset_SlabTypeTrackSlab\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t99fa24c4-375d-46fb-9928-5216d7fd88c7\tPset_SlabTypeTrackSlab.TechnicalStandard\tMULTILINETEXT\t\t627\t1\tIfcExternalReference\t1\n#\nGROUP\t628\tPset_SolarDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9a9a35d2-95f8-4d56-8bac-6657ec7bec7d\tPset_SolarDeviceTypeCommon.ActiveCellSurfaceAreaFraction\tNUMBER\t\t628\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t034f6cea-a9d8-48df-8940-419e8c744201\tPset_SolarDeviceTypeCommon.CellEfficiency\tNUMBER\t\t628\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t55dddc00-d208-11e1-8000-00215ad4efdf\tPset_SolarDeviceTypeCommon.Reference\tTEXT\t\t628\t1\tIfcIdentifier\t1\nPARAM\t5bd3bd00-d208-11e1-8000-00215ad4efdf\tPset_SolarDeviceTypeCommon.Status\tTEXT\t\t628\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t629\tPset_SolidStratumCapacity\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t17ac29ae-4e16-4f0d-95bd-5a99a0bb3224\tPset_SolidStratumCapacity.CohesionBehaviour\tNUMBER\t\t629\t1\tIfcPressureMeasure\t1\nPARAM\t3007e218-6cbd-4b28-b3da-26404dedbf3a\tPset_SolidStratumCapacity.FrictionAngle\tNUMBER\t\t629\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t9d085b18-0771-41b5-bd17-c6d66e379709\tPset_SolidStratumCapacity.FrictionBehaviour\tNUMBER\t\t629\t1\tIfcPressureMeasure\t1\nPARAM\tf8d718d8-156f-4999-8fb8-e75f749dbb87\tPset_SolidStratumCapacity.GrainSize\tLENGTH\t\t629\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t95460886-53b5-4133-9084-c98e5e42f424\tPset_SolidStratumCapacity.HydraulicConductivity\tNUMBER\t\t629\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t0fe3fd9a-fd05-4c4a-b27f-267ff6b86c92\tPset_SolidStratumCapacity.LoadBearingCapacity\tNUMBER\t\t629\t1\tIfcPlanarForceMeasure\t1\nPARAM\t90318423-9fc8-4aa7-a619-cedace4d9c25\tPset_SolidStratumCapacity.NValue\tINTEGER\t\t629\t1\tIfcCountMeasure\t1\nPARAM\tfacd3b0a-b27c-438c-904d-b8f2821efda2\tPset_SolidStratumCapacity.PermeabilityBehaviour\tNUMBER\t\t629\t1\tIfcRatioMeasure\t1\nPARAM\t51b405aa-ea52-4dc7-a5be-a29917c8e8aa\tPset_SolidStratumCapacity.PoisonsRatio\tNUMBER\t\t629\t1\tIfcRatioMeasure\t1\nPARAM\t15378a63-0443-45d8-8785-62175dcf3470\tPset_SolidStratumCapacity.PwaveVelocity\tNUMBER\t\t629\t1\tIfcLinearVelocityMeasure\t1\nPARAM\td5c69ad2-3730-4362-9220-78726a662b98\tPset_SolidStratumCapacity.Resistivity\tNUMBER\t\t629\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t1c9b5030-556b-4e39-a8fd-aacf634a4ca8\tPset_SolidStratumCapacity.SettlementBehaviour\tNUMBER\t\t629\t1\tIfcPressureMeasure\t1\nPARAM\t55bc9f2d-4ac7-4cad-b4e8-f5d0464e7438\tPset_SolidStratumCapacity.SwaveVelocity\tNUMBER\t\t629\t1\tIfcLinearVelocityMeasure\t1\n#\nGROUP\t630\tPset_SolidStratumComposition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5ea49554-ab2a-4265-ac99-2f55da06bd1f\tPset_SolidStratumComposition.AirVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t5bb9b212-8382-40c5-8160-4b5de83e9eab\tPset_SolidStratumComposition.BouldersVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t2bdef069-a96c-47ea-a71f-3db4b0bdef32\tPset_SolidStratumComposition.ClayVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t9a58a154-4af2-4edd-8a97-ae4a7b61c018\tPset_SolidStratumComposition.CobblesVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t63cd3886-6084-4262-9269-408e3271a512\tPset_SolidStratumComposition.CompositeFractions\tTEXT\t\t630\t1\tPEnum_SoilCompositeFractions\t1\nPARAM\t6cf91668-b000-4796-9568-751c2078045e\tPset_SolidStratumComposition.ContaminantVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t684ef71e-efbb-41b2-8b1c-6fe613e4e831\tPset_SolidStratumComposition.FillVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\tc417c933-4ed1-45fb-b8e5-bef7a433d685\tPset_SolidStratumComposition.GravelVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t904644d5-b497-49d6-94c4-ff4d6935e325\tPset_SolidStratumComposition.OrganicVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t0ff426fe-373a-4a54-9eea-0dee83fc6ea6\tPset_SolidStratumComposition.RockVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t774a7afa-d02d-4c19-95b1-9343195f4996\tPset_SolidStratumComposition.SandVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\tb9df0d71-67d5-4532-9d32-c5fc87310869\tPset_SolidStratumComposition.SiltVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\nPARAM\t6d3b9448-3ccc-4756-a08b-ee2b0c271ba3\tPset_SolidStratumComposition.WaterVolume\tVOLUME\t\t630\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t631\tPset_SoundAttenuation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t80c83000-d208-11e1-8000-00215ad4efdf\tPset_SoundAttenuation.SoundFrequency\tMULTILINETEXT\t\t631\t1\tPropertyListValue\t1\nPARAM\t858ce400-d208-11e1-8000-00215ad4efdf\tPset_SoundAttenuation.SoundPressure\tMULTILINETEXT\t\t631\t1\tIfcTimeSeries\t1\nPARAM\t7443d780-d208-11e1-8000-00215ad4efdf\tPset_SoundAttenuation.SoundScale\tTEXT\t\t631\t1\tPEnum_SoundScale\t1\n#\nGROUP\t632\tPset_SoundGeneration\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8faee280-d208-11e1-8000-00215ad4efdf\tPset_SoundGeneration.SoundCurve\tMULTILINETEXT\t\t632\t1\tPropertyTableValue\t1\n#\nGROUP\t633\tPset_SpaceAirHandlingDimensioning\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7492a24-fec7-44f3-b37a-08c2d3c7016f\tPset_SpaceAirHandlingDimensioning.BoundaryAreaHeatLoss\tNUMBER\t\t633\t1\tIfcHeatFluxDensityMeasure\t1\nPARAM\t3ff6de6f-830c-4003-a236-322944322118\tPset_SpaceAirHandlingDimensioning.CeilingRAPlenum\tYESNO\t\t633\t1\tIfcBoolean\t1\nPARAM\t2b4d8497-069b-4fd5-8379-658cf42789e7\tPset_SpaceAirHandlingDimensioning.CoolingDesignAirFlow\tNUMBER\t\t633\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t6474c1ec-457d-494a-8f50-a2b6c38dd90c\tPset_SpaceAirHandlingDimensioning.CoolingDryBulb\tNUMBER\t\t633\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tcb63ba50-f6e0-41c1-831e-8a31e89703c6\tPset_SpaceAirHandlingDimensioning.CoolingRelativeHumidity\tNUMBER\t\t633\t1\tIfcPositiveRatioMeasure\t1\nPARAM\taab505cb-d4e7-4483-949e-6903c099f71d\tPset_SpaceAirHandlingDimensioning.DesignAirFlow\tNUMBER\t\t633\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t240b24db-f545-449e-b3f3-02a51897916a\tPset_SpaceAirHandlingDimensioning.HeatingDesignAirFlow\tNUMBER\t\t633\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t073674f6-15df-492e-9261-e5b0604fd554\tPset_SpaceAirHandlingDimensioning.HeatingDryBulb\tNUMBER\t\t633\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t8ce9fe7c-f483-4793-86c7-f44c807ac7e1\tPset_SpaceAirHandlingDimensioning.HeatingRelativeHumidity\tNUMBER\t\t633\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t15c466a7-1bad-4f75-bc2e-1cc76f14c316\tPset_SpaceAirHandlingDimensioning.SensibleHeatGain\tNUMBER\t\t633\t1\tIfcPowerMeasure\t1\nPARAM\t0a046d7c-7276-477f-98ee-e1ee1624311e\tPset_SpaceAirHandlingDimensioning.TotalHeatGain\tNUMBER\t\t633\t1\tIfcPowerMeasure\t1\nPARAM\tbdd6472c-26b7-440e-beaf-9cec2d0f6fd2\tPset_SpaceAirHandlingDimensioning.TotalHeatLoss\tNUMBER\t\t633\t1\tIfcPowerMeasure\t1\nPARAM\tfa959428-195f-49f6-8cb3-662d27bc29a9\tPset_SpaceAirHandlingDimensioning.VentilationDesignAirFlow\tNUMBER\t\t633\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t634\tPset_SpaceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1eface6c-d6b8-4857-9c6b-f3dd4a2a8ab8\tPset_SpaceCommon.Category\tTEXT\t\t634\t1\tIfcLabel\t1\nPARAM\t0cb4e5de-6ee9-4f3b-9ae2-7b05a4876e85\tPset_SpaceCommon.CeilingCovering\tTEXT\t\t634\t1\tIfcLabel\t1\nPARAM\t5968a5ef-fe99-46d5-a9ee-35717871a8b1\tPset_SpaceCommon.Concealed\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\t312a6935-bb3b-4468-9da7-7dacc8bd0f6a\tPset_SpaceCommon.ConcealedCeiling\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\t19d86a9d-53b5-482d-b0db-ce29dd90fa22\tPset_SpaceCommon.ConcealedFlooring\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\tcf407cb0-c6fc-4c05-9295-d8a320cd03b5\tPset_SpaceCommon.FloorCovering\tTEXT\t\t634\t1\tIfcLabel\t1\nPARAM\t3315662e-a31b-4d94-bb30-ba3dc0604ec4\tPset_SpaceCommon.GrossAreaPlanned\tAREA\t\t634\t1\tIfcAreaMeasure\t1\nPARAM\t00ee9580-d209-11e1-8000-00215ad4efdf\tPset_SpaceCommon.GrossPlannedArea\tAREA\t\t634\t1\tIfcAreaMeasure\t1\nPARAM\t1499fc00-d209-11e1-8000-00215ad4efdf\tPset_SpaceCommon.HandicapAccessible\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\tf7fdc400-d208-11e1-8000-00215ad4efdf\tPset_SpaceCommon.IsExternal\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\t95a2414c-241c-460e-bb7e-a19d0dcb20d6\tPset_SpaceCommon.MechanicalVentilationRate\tINTEGER\t\t634\t1\tIfcCountMeasure\t1\nPARAM\t34d9d1b6-0e11-4315-b69d-912cffbcaf5a\tPset_SpaceCommon.NaturalVentilation\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\tee61b60a-800b-41f8-a22a-fdb78cae8249\tPset_SpaceCommon.NaturalVentilationRate\tINTEGER\t\t634\t1\tIfcCountMeasure\t1\nPARAM\t06e47680-d209-11e1-8000-00215ad4efdf\tPset_SpaceCommon.NetPlannedArea\tAREA\t\t634\t1\tIfcAreaMeasure\t1\nPARAM\t9e0bc4d1-611b-4b5d-816e-e6ad71c684c7\tPset_SpaceCommon.OccupancyNumber\tINTEGER\t\t634\t1\tIfcCountMeasure\t1\nPARAM\t462f01f4-2f08-438b-9df0-1dd980cf4957\tPset_SpaceCommon.OccupancyType\tTEXT\t\t634\t1\tIfcLabel\t1\nPARAM\t0d72ee00-d209-11e1-8000-00215ad4efdf\tPset_SpaceCommon.PubliclyAccessible\tYESNO\t\t634\t1\tIfcBoolean\t1\nPARAM\ta81efd00-d208-11e1-8000-00215ad4efdf\tPset_SpaceCommon.Reference\tTEXT\t\t634\t1\tIfcIdentifier\t1\nPARAM\t85df3b70-be9c-4b40-98f8-2be651c1bc1f\tPset_SpaceCommon.SkirtingBoard\tTEXT\t\t634\t1\tIfcLabel\t1\nPARAM\t4fa76590-503b-4a39-883d-b47285df0b74\tPset_SpaceCommon.WallCovering\tTEXT\t\t634\t1\tIfcLabel\t1\n#\nGROUP\t635\tPset_SpaceCoveringRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tda83c423-5c1d-40ab-a951-0f6abe2412f6\tPset_SpaceCoveringRequirements.CeilingCovering\tTEXT\t\t635\t1\tIfcLabel\t1\nPARAM\tabdab367-fcc6-4b08-b03d-584baeb819c8\tPset_SpaceCoveringRequirements.CeilingCoveringThickness\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7502fd34-b7fa-4942-80c6-10aec4787043\tPset_SpaceCoveringRequirements.ConcealedCeiling\tYESNO\t\t635\t1\tIfcBoolean\t1\nPARAM\ta7d072c8-df32-45bd-9c1b-9424d7f35a87\tPset_SpaceCoveringRequirements.ConcealedCeilingOffset\tLENGTH\t\t635\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t8650a689-ba06-4df6-9f05-2a87ab070f02\tPset_SpaceCoveringRequirements.ConcealedFlooring\tYESNO\t\t635\t1\tIfcBoolean\t1\nPARAM\t56029141-a7c0-40c4-aef5-1a242fa1611f\tPset_SpaceCoveringRequirements.ConcealedFlooringOffset\tLENGTH\t\t635\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tbfd1f6a6-ca08-4408-9916-5d31dda04831\tPset_SpaceCoveringRequirements.FloorCovering\tTEXT\t\t635\t1\tIfcLabel\t1\nPARAM\t9650c4d3-c07f-4ccc-9fd8-147b099f0939\tPset_SpaceCoveringRequirements.FloorCoveringThickness\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3f9ca576-2462-47ff-8bdc-a254b651a15a\tPset_SpaceCoveringRequirements.Molding\tTEXT\t\t635\t1\tIfcLabel\t1\nPARAM\t1e009268-2e53-47b2-b2c5-050bd03ee111\tPset_SpaceCoveringRequirements.MoldingHeight\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6d6b4d00-a223-4b90-b4eb-1901ca5be2b5\tPset_SpaceCoveringRequirements.SkirtingBoard\tTEXT\t\t635\t1\tIfcLabel\t1\nPARAM\taf1249f7-1eb2-4579-aaec-871aa4a6287b\tPset_SpaceCoveringRequirements.SkirtingBoardHeight\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t69193a7f-647f-4526-bd7f-1d3b9fdd1a9e\tPset_SpaceCoveringRequirements.WallCovering\tTEXT\t\t635\t1\tIfcLabel\t1\nPARAM\t44c775b1-4a0d-46c5-8ad8-c7e36c34a349\tPset_SpaceCoveringRequirements.WallCoveringThickness\tLENGTH\t\t635\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t636\tPset_SpaceFireSafetyRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8bcf9000-d209-11e1-8000-00215ad4efdf\tPset_SpaceFireSafetyRequirements.AirPressurization\tYESNO\t\t636\t1\tIfcBoolean\t1\nPARAM\t24b148bf-889e-4e63-ac7d-9ef51567cd78\tPset_SpaceFireSafetyRequirements.AncillaryFireUse\tTEXT\t\t636\t1\tIfcLabel\t1\nPARAM\t76f2fc80-d209-11e1-8000-00215ad4efdf\tPset_SpaceFireSafetyRequirements.FireExit\tYESNO\t\t636\t1\tIfcBoolean\t1\nPARAM\t0c962c05-9faf-44f0-9239-ad8c48b7d713\tPset_SpaceFireSafetyRequirements.FireHazardFactor\tTEXT\t\t636\t1\tIfcLabel\t1\nPARAM\t33988e00-d209-11e1-8000-00215ad4efdf\tPset_SpaceFireSafetyRequirements.FireRiskFactor\tTEXT\t\t636\t1\tIfcLabel\t1\nPARAM\t3c895f80-d209-11e1-8000-00215ad4efdf\tPset_SpaceFireSafetyRequirements.FlammableStorage\tYESNO\t\t636\t1\tIfcBoolean\t1\nPARAM\t3a4ed567-c719-4414-a7e8-58022f2c894e\tPset_SpaceFireSafetyRequirements.MainFireUse\tTEXT\t\t636\t1\tIfcLabel\t1\nPARAM\t7e1a0a80-d209-11e1-8000-00215ad4efdf\tPset_SpaceFireSafetyRequirements.SprinklerProtection\tYESNO\t\t636\t1\tIfcBoolean\t1\nPARAM\t840feb80-d209-11e1-8000-00215ad4efdf\tPset_SpaceFireSafetyRequirements.SprinklerProtectionAutomatic\tYESNO\t\t636\t1\tIfcBoolean\t1\n#\nGROUP\t637\tPset_SpaceHeaterPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb9b4d480-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.AirResistanceCurve\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\tadc91280-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.AuxiliaryEnergySourceConsumption\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\tfb00d530-59e4-4a73-87cc-90731384efe1\tPset_SpaceHeaterPHistory.CharacteristicExponent\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\ta0ac2380-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.Effectiveness\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\tbde0f200-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.Exponent\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\t9c800600-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.FractionConvectiveHeatTransfer\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\t9a1dac00-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.FractionRadiantHeatTransfer\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\tc1747900-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.HeatOutputRate\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\tb6b9e400-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.OutputCapacityCurve\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\ta6096e00-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.SpaceAirTemperature\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\ta99cf500-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.SpaceMeanRadiantTemperature\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\ta30e7d80-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.SurfaceTemperature\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\nPARAM\tb15c9980-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.UACurve\tMULTILINETEXT\t\t637\t1\tIfcTimeSeries\t1\n#\nGROUP\t638\tPset_SpaceHeaterPHistoryCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t62e33e22-c70d-4032-ba2f-3cae02922ee5\tPset_SpaceHeaterPHistoryCommon.AirResistanceCurve\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\t8018b647-5e75-4cc7-9971-afe2a655e2fc\tPset_SpaceHeaterPHistoryCommon.AuxiliaryEnergySourceConsumption\tTEXT\t\t638\t1\tIfcLabel\t1\nPARAM\td0d3c2df-b537-4089-b7fd-6ff7e8f16527\tPset_SpaceHeaterPHistoryCommon.Effectiveness\tTEXT\t\t638\t1\tIfcLabel\t1\nPARAM\t044a88f6-4361-4681-859d-f7671c4c027a\tPset_SpaceHeaterPHistoryCommon.Exponent\tTEXT\t\t638\t1\tIfcLabel\t1\nPARAM\t0bd4775a-42a4-471d-b47f-fa7681e1e2fb\tPset_SpaceHeaterPHistoryCommon.FractionConvectiveHeatTransfer\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\tacde0e1e-be78-4d92-9513-1acbb2455644\tPset_SpaceHeaterPHistoryCommon.FractionRadiantHeatTransfer\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\te837d066-ecbb-43b8-9e89-08e2579e80b8\tPset_SpaceHeaterPHistoryCommon.HeatOutputRate\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\t915a8f87-580a-4115-a657-a32dac42b1cd\tPset_SpaceHeaterPHistoryCommon.OutputCapacityCurve\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\t4f34eb27-7cd9-4e9a-8fa3-2c18e719bd14\tPset_SpaceHeaterPHistoryCommon.SpaceAirTemperature\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\tdddbafdc-2bcc-4e28-ad12-b021d6ebbc21\tPset_SpaceHeaterPHistoryCommon.SpaceMeanRadiantTemperature\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\t952fe42e-143b-497d-972c-b05ac332464f\tPset_SpaceHeaterPHistoryCommon.SurfaceTemperature\tNUMBER\t\t638\t1\tIfcReal\t1\nPARAM\t4876859c-5182-4785-97ca-958d7a99815e\tPset_SpaceHeaterPHistoryCommon.UACurve\tTEXT\t\t638\t1\tIfcLabel\t1\n#\nGROUP\t639\tPset_SpaceHeaterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4f506400-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.BodyMass\tNUMBER\t\t639\t1\tIfcMassMeasure\t1\nPARAM\t216b1f80-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.EnergySource\tTEXT\t\t639\t1\tPEnum_EnergySource\t1\nPARAM\t87dbbac4-4fbc-4a61-8fd2-ff49be7966b6\tPset_SpaceHeaterTypeCommon.HeatingSource\tTEXT\t\t639\t1\tPEnum_HeatingSource\t1\nPARAM\t07c9d800-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.HeatTransferDimension\tTEXT\t\t639\t1\tPEnum_SpaceHeaterHeatTransferDimension\t1\nPARAM\t14e6c700-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.HeatTransferMedium\tTEXT\t\t639\t1\tPEnum_HeatTransferMedium\t1\nPARAM\t74beb997-5939-4f8a-9595-948e9d954b35\tPset_SpaceHeaterTypeCommon.Material\tMULTILINETEXT\t\t639\t1\tIfcMaterial\t1\nPARAM\t6d1dc900-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.NumberOfPanels\tINTEGER\t\t639\t1\tIfcCountMeasure\t1\nPARAM\t727b1380-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.NumberOfSections\tINTEGER\t\t639\t1\tIfcCountMeasure\t1\nPARAM\t5d9e8000-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.OutputCapacity\tNUMBER\t\t639\t1\tIfcPowerMeasure\t1\nPARAM\te9fc7300-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.PlacementType\tTEXT\t\t639\t1\tPEnum_SpaceHeaterPlacementType\t1\nPARAM\tcafde100-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.Reference\tTEXT\t\t639\t1\tIfcIdentifier\t1\nPARAM\t6c4c9f6f-55e2-4eeb-a542-926939c9efb1\tPset_SpaceHeaterTypeCommon.SpaceHeaterPlacement\tTEXT\t\t639\t1\tPEnum_SpaceHeaterPlacementType\t1\nPARAM\td224ef00-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.Status\tTEXT\t\t639\t1\tPEnum_ElementStatus\t1\nPARAM\tfbde1600-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.TemperatureClassification\tTEXT\t\t639\t1\tPEnum_SpaceHeaterTemperatureClassification\t1\nPARAM\t63946100-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.ThermalEfficiency\tNUMBER\t\t639\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t57a89f00-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.ThermalMassHeatCapacity\tNUMBER\t\t639\t1\tIfcReal\t1\n#\nGROUP\t640\tPset_SpaceHeaterTypeConvector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e66d580-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeConvector.ConvectorType\tTEXT\t\t640\t1\tPEnum_SpaceHeaterConvectorType\t1\n#\nGROUP\t641\tPset_SpaceHeaterTypeHydronic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t10706847-8208-49e5-82b9-e0fa7b09335c\tPset_SpaceHeaterTypeHydronic.TubingLength\tLENGTH\t\t641\t1\tIfcLengthMeasure\t1\nPARAM\t26f7234f-35b8-4c53-87c1-ab7757232c81\tPset_SpaceHeaterTypeHydronic.WaterContent\tNUMBER\t\t641\t1\tIfcMassMeasure\t1\n#\nGROUP\t642\tPset_SpaceHeaterTypeRadiator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9179a580-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeRadiator.RadiatorType\tTEXT\t\t642\t1\tPEnum_SpaceHeaterRadiatorType\t1\nPARAM\ta0f8ee80-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeRadiator.TubingLength\tLENGTH\t\t642\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta9512980-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeRadiator.WaterContent\tNUMBER\t\t642\t1\tIfcMassMeasure\t1\n#\nGROUP\t643\tPset_SpaceHVACDesign\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2bb1b671-04b4-462a-8ef5-023e20511f30\tPset_SpaceHVACDesign.AirConditioning\tYESNO\t\t643\t1\tIfcBoolean\t1\nPARAM\t7f6730db-61ad-45ae-b52c-ed9a0d91334b\tPset_SpaceHVACDesign.AirConditioningCentral\tYESNO\t\t643\t1\tIfcBoolean\t1\nPARAM\t5cfa0d87-01b9-4397-842a-89ebe257be3e\tPset_SpaceHVACDesign.AirHandlingName\tTEXT\t\t643\t1\tIfcLabel\t1\nPARAM\te7a418dc-bbb9-4176-9aad-7b07eff4bd49\tPset_SpaceHVACDesign.DiscontinuedHeating\tYESNO\t\t643\t1\tIfcBoolean\t1\nPARAM\tccc43101-a0be-4b96-8a40-143e9bb84829\tPset_SpaceHVACDesign.HumidityMax\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t51778e83-55b7-4524-9fb0-93c9709b4399\tPset_SpaceHVACDesign.HumidityMin\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t735568ae-828e-4d50-8fd2-3fcc3e640a22\tPset_SpaceHVACDesign.HumiditySetPoint\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7974427c-fa78-46ca-ac7b-0d0c3ecb592e\tPset_SpaceHVACDesign.HumiditySummer\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t163923cb-2bd9-4b67-9c3d-ac5ac18ce02a\tPset_SpaceHVACDesign.HumidityWinter\tNUMBER\t\t643\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tff04375f-5fdc-4d11-a98e-0e79f439601a\tPset_SpaceHVACDesign.MechanicalVentilation\tYESNO\t\t643\t1\tIfcBoolean\t1\nPARAM\td9574168-d40c-4dfa-813f-69de285b972e\tPset_SpaceHVACDesign.MechanicalVentilationRate\tINTEGER\t\t643\t1\tIfcCountMeasure\t1\nPARAM\t3ee208f0-a5a9-4a55-9a94-e8407f79fae4\tPset_SpaceHVACDesign.NaturalVentilation\tYESNO\t\t643\t1\tIfcBoolean\t1\nPARAM\t9166243c-98a2-403b-a7b5-9dd29d10f092\tPset_SpaceHVACDesign.NaturalVentilationRate\tINTEGER\t\t643\t1\tIfcCountMeasure\t1\nPARAM\t686684e9-7dd7-492f-a3ea-6050b9b6778e\tPset_SpaceHVACDesign.TemperatureMax\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\td4ce1f5e-0951-4b9d-b051-ce1d6e052543\tPset_SpaceHVACDesign.TemperatureMin\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t045b63d8-d57a-42a0-bf17-9a2a7d721618\tPset_SpaceHVACDesign.TemperatureSetPoint\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t657961b7-9b93-4c02-af99-5a69edea46dc\tPset_SpaceHVACDesign.TemperatureSummerMax\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tbfceeaaa-80c7-4df8-8860-4b6f43e2317f\tPset_SpaceHVACDesign.TemperatureSummerMin\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t61ba0725-667a-49a5-9eec-adbf7241dcf5\tPset_SpaceHVACDesign.TemperatureWinterMax\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tc3513186-7790-410b-b4f1-418de09bb2f1\tPset_SpaceHVACDesign.TemperatureWinterMin\tNUMBER\t\t643\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t644\tPset_SpaceLightingDesign\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t76426c40-07d6-456d-8982-61d5fcb4ccee\tPset_SpaceLightingDesign.ArtificialLighting\tYESNO\t\t644\t1\tIfcBoolean\t1\nPARAM\t28aa4835-6a61-4612-a66f-0adce7e711bd\tPset_SpaceLightingDesign.Illuminance\tNUMBER\t\t644\t1\tIfcIlluminanceMeasure\t1\n#\nGROUP\t645\tPset_SpaceLightingRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb53ceb80-d20a-11e1-8000-00215ad4efdf\tPset_SpaceLightingRequirements.ArtificialLighting\tYESNO\t\t645\t1\tIfcBoolean\t1\nPARAM\tbb32cc80-d20a-11e1-8000-00215ad4efdf\tPset_SpaceLightingRequirements.Illuminance\tNUMBER\t\t645\t1\tIfcIlluminanceMeasure\t1\n#\nGROUP\t646\tPset_SpaceOccupancyRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te0bfd600-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.AreaPerOccupant\tAREA\t\t646\t1\tIfcAreaMeasure\t1\nPARAM\teae1d480-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.IsOutlookDesirable\tYESNO\t\t646\t1\tIfcBoolean\t1\nPARAM\te61d2080-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.MinimumHeadroom\tLENGTH\t\t646\t1\tIfcLengthMeasure\t1\nPARAM\tcf76c980-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.OccupancyNumber\tINTEGER\t\t646\t1\tIfcCountMeasure\t1\nPARAM\td4d41400-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.OccupancyNumberPeak\tINTEGER\t\t646\t1\tIfcCountMeasure\t1\nPARAM\tdac9f500-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.OccupancyTimePerDay\tNUMBER\t\t646\t1\tIfcTimeMeasure\t1\nPARAM\tc84fbb80-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.OccupancyType\tTEXT\t\t646\t1\tIfcLabel\t1\n#\nGROUP\t647\tPset_SpaceParking\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta74fbc68-56e4-404f-9917-67f048ca9d23\tPset_SpaceParking.HandicapAccessible\tYESNO\t\t647\t1\tIfcBoolean\t1\nPARAM\t051bb280-d20b-11e1-8000-00215ad4efdf\tPset_SpaceParking.IsAisle\tYESNO\t\t647\t1\tIfcBoolean\t1\nPARAM\t0c42c080-d20b-11e1-8000-00215ad4efdf\tPset_SpaceParking.IsOneWay\tYESNO\t\t647\t1\tIfcBoolean\t1\nPARAM\tffbe6800-d20a-11e1-8000-00215ad4efdf\tPset_SpaceParking.ParkingUnits\tINTEGER\t\t647\t1\tIfcCountMeasure\t1\nPARAM\tf7662d00-d20a-11e1-8000-00215ad4efdf\tPset_SpaceParking.ParkingUse\tTEXT\t\t647\t1\tIfcLabel\t1\n#\nGROUP\t648\tPset_SpaceParkingAisle\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t22b7fe61-940f-4e03-986a-2b53767fdf19\tPset_SpaceParkingAisle.IsOneWay\tYESNO\t\t648\t1\tIfcBoolean\t1\n#\nGROUP\t649\tPset_SpaceProgramCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taea900b9-903d-4930-8483-4944fef95679\tPset_SpaceProgramCommon.EmployeeType\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\ta6c1ab03-871f-496b-abc7-f559102cd20b\tPset_SpaceProgramCommon.FFETypeRequirement\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\tc14d78a9-02be-4122-bcf6-340f21698bb6\tPset_SpaceProgramCommon.FunctionRequirement\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\t45baac17-7aa0-4f18-8db4-174d9979e4c8\tPset_SpaceProgramCommon.LightingRequirement\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\t3c6211fa-862f-4390-83f3-54d0d71c6f1c\tPset_SpaceProgramCommon.Location\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\t7de36c01-c87e-4815-baaa-b3958359cc27\tPset_SpaceProgramCommon.OccupancyNumber\tINTEGER\t\t649\t1\tIfcCountMeasure\t1\nPARAM\t3db64fb4-4490-439d-88d4-54687e350137\tPset_SpaceProgramCommon.OccupancyType\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\t0635a2ad-b72d-4030-af13-91b85876df2a\tPset_SpaceProgramCommon.PrivacyRequirement\tTEXT\t\t649\t1\tIfcLabel\t1\nPARAM\t2b0b297c-311c-4bd6-a396-c276d67c2013\tPset_SpaceProgramCommon.SecurityRequirement\tTEXT\t\t649\t1\tIfcLabel\t1\n#\nGROUP\t650\tPset_SpaceThermalDesign\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t617ed200-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.BoundaryAreaHeatLoss\tNUMBER\t\t650\t1\tIfcHeatFluxDensityMeasure\t1\nPARAM\t5a57c400-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.CeilingRAPlenum\tYESNO\t\t650\t1\tIfcBoolean\t1\nPARAM\t19f84600-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.CoolingDesignAirflow\tNUMBER\t\t650\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t385e4180-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.CoolingDryBulb\tNUMBER\t\t650\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t3dbb8c00-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.CoolingRelativeHumidity\tNUMBER\t\t650\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t54fa7980-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.ExhaustAirFlowrate\tNUMBER\t\t650\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t1fee2700-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.HeatingDesignAirflow\tNUMBER\t\t650\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t43b16d00-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.HeatingDryBulb\tNUMBER\t\t650\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t490eb780-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.HeatingRelativeHumidity\tNUMBER\t\t650\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t2c727f80-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.TotalHeatGain\tNUMBER\t\t650\t1\tIfcPowerMeasure\t1\nPARAM\t31373380-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.TotalHeatLoss\tNUMBER\t\t650\t1\tIfcPowerMeasure\t1\nPARAM\t25e40800-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.TotalSensibleHeatGain\tNUMBER\t\t650\t1\tIfcPowerMeasure\t1\nPARAM\t4f9d2f00-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.VentilationAirFlowrate\tNUMBER\t\t650\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t651\tPset_SpaceThermalLoad\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta4d94080-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.AirExchangeRate\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\tbfabb500-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.DryBulbTemperature\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t807d6400-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.EquipmentSensible\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t9db23280-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.ExhaustAir\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\tce926780-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.InfiltrationSensible\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t7491a200-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.Lighting\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t6e032a80-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.People\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t9723bb00-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.RecirculatedAir\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\tc6d2c300-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.RelativeHumidity\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\tde11b080-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.TotalLatentLoad\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\te8cc4580-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.TotalRadiantLoad\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\td6520c00-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.TotalSensibleLoad\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t870bdb80-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.VentilationIndoorAir\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\nPARAM\t8f641680-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.VentilationOutdoorAir\tMULTILINETEXT\t\t651\t1\tPropertyBoundedValue\t1\n#\nGROUP\t652\tPset_SpaceThermalLoadPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0bf6f500-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.AirExchangeRate\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t682f68ba-7961-4425-a201-a69ae991db17\tPset_SpaceThermalLoadPHistory.AirExchangeRateTimeHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t0f8a7c00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.DryBulbTemperature\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t641958d4-c86e-4c82-8bca-65a78723a54e\tPset_SpaceThermalLoadPHistory.DryBulbTemperatureHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tfda8d900-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.EquipmentSensible\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t064dec5c-627e-46a5-b964-5f3b7693fb3d\tPset_SpaceThermalLoadPHistory.EquipmentSensibleHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t08fc0480-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.ExhaustAir\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t68f6c194-9b23-4ee5-a236-08d8b27f3c34\tPset_SpaceThermalLoadPHistory.ExhaustAirHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t15805d00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.InfiltrationSensible\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t8c760cb8-c1d9-4876-9776-80b33cbe6ec4\tPset_SpaceThermalLoadPHistory.InfiltrationSensibleHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tfaade880-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.Lighting\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\te433a278-e64c-48e0-8b25-46af384d75aa\tPset_SpaceThermalLoadPHistory.LightingHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tf7b2f800-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.People\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t39797967-9fb9-4391-a49e-08ffb37169c6\tPset_SpaceThermalLoadPHistory.PeopleHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t06011400-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.RecirculatedAir\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tc628dc7d-5b8f-4d14-bde3-825a72282087\tPset_SpaceThermalLoadPHistory.RecirculatedAirHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t12856c80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.RelativeHumidity\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t761cbbce-da9d-48d5-96a9-64a7d87227ef\tPset_SpaceThermalLoadPHistory.RelativeHumidityHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t1b763e00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.TotalLatentLoad\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tbfae7e49-24bd-4ba7-8230-90c9594f61c2\tPset_SpaceThermalLoadPHistory.TotalLatentLoadHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t1e712e80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.TotalRadiantLoad\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tbe9c14a8-06a8-48b8-8aa9-e578c66815b7\tPset_SpaceThermalLoadPHistory.TotalRadiantLoadHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t187b4d80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.TotalSensibleLoad\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t7dd2d8ff-6577-4373-bf9b-8b768a29f172\tPset_SpaceThermalLoadPHistory.TotalSensibleLoadHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t000b3300-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.VentilationIndoorAir\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\tbfaf21ac-d0e9-41b4-bf2e-c67d9979aaa4\tPset_SpaceThermalLoadPHistory.VentilationIndoorAirHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t03062380-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.VentilationOutdoorAir\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\nPARAM\t02d739ae-b4f5-4e67-8865-1aca5fdd2f5e\tPset_SpaceThermalLoadPHistory.VentilationOutdoorAirHistory\tMULTILINETEXT\t\t652\t1\tIfcTimeSeries\t1\n#\nGROUP\t653\tPset_SpaceThermalPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t27fa9680-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalPHistory.CoolingAirFlowRate\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\t3183fe80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalPHistory.ExhaustAirFlowRate\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\t2b8e1d80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalPHistory.HeatingAirFlowRate\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\t38ab0c80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalPHistory.SpaceRelativeHumidity\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\t35178580-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalPHistory.SpaceTemperature\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\ta21dc910-a384-48f2-a295-a3e2bf849215\tPset_SpaceThermalPHistory.SpaceTemperatureHistory\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\t2e890e00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalPHistory.VentilationAirFlowRate\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\nPARAM\t9e001da6-6f54-470f-8d1e-6b12bdb1c340\tPset_SpaceThermalPHistory.VentilationAirFlowRateHistory\tMULTILINETEXT\t\t653\t1\tIfcTimeSeries\t1\n#\nGROUP\t654\tPset_SpaceThermalRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9fc8c100-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.AirConditioning\tYESNO\t\t654\t1\tIfcBoolean\t1\nPARAM\ta5bea200-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.AirConditioningCentral\tYESNO\t\t654\t1\tIfcBoolean\t1\nPARAM\t86c01000-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.DiscontinuedHeating\tYESNO\t\t654\t1\tIfcBoolean\t1\nPARAM\t9a6b7680-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.MechanicalVentilationRate\tINTEGER\t\t654\t1\tIfcCountMeasure\t1\nPARAM\t8d4e8780-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.NaturalVentilation\tYESNO\t\t654\t1\tIfcBoolean\t1\nPARAM\t94759580-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.NaturalVentilationRate\tINTEGER\t\t654\t1\tIfcCountMeasure\t1\nPARAM\t6bed9b80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceHumidity\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\nPARAM\t70b24f80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceHumidityMax\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\nPARAM\t76a83080-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceHumidityMin\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\nPARAM\t7c057b00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceHumiditySummer\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\nPARAM\t8162c580-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceHumidityWinter\tNUMBER\t\t654\t1\tIfcRatioMeasure\t1\nPARAM\t42cd0b00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperature\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t48c2ec00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperatureMax\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t4eb8cd00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperatureMin\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t5b987553-d57e-4bf3-8014-90787ba00b54\tPset_SpaceThermalRequirements.SpaceTemperatureSummer\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure \t1\nPARAM\t54161780-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperatureSummerMax\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t5a0bf880-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperatureSummerMin\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\taf976ddd-94b0-4d46-907c-e92f6bc5ec4e\tPset_SpaceThermalRequirements.SpaceTemperatureWinter\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure \t1\nPARAM\t6001d980-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperatureWinterMax\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t65f7ba80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperatureWinterMin\tNUMBER\t\t654\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t655\tPset_SpatialZoneCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3ae302c7-0c29-4228-89f6-f36a68e14a44\tPset_SpatialZoneCommon.IsExternal\tYESNO\t\t655\t1\tIfcBoolean\t1\nPARAM\t09e2b7b5-4192-4636-a1d5-31d532a1a8d2\tPset_SpatialZoneCommon.Reference\tTEXT\t\t655\t1\tIfcIdentifier\t1\n#\nGROUP\t656\tPset_SpringTensioner\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t07617ec7-9938-4fe8-aeda-fc78d8a442c4\tPset_SpringTensioner.NominalWeight\tNUMBER\t\t656\t1\tIfcMassMeasure\t1\nPARAM\tdba655ed-3996-480f-8f0f-a6fa99821e1a\tPset_SpringTensioner.TensileStrength\tNUMBER\t\t656\t1\tIfcPressureMeasure\t1\nPARAM\t7af4200c-8630-43d8-9129-83adb7982368\tPset_SpringTensioner.TensioningWorkingRange\tMULTILINETEXT\t\t656\t1\tPropertyBoundedValue\t1\n#\nGROUP\t657\tPset_StackTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb2db9100-d20c-11e1-8000-00215ad4efdf\tPset_StackTerminalTypeCommon.Reference\tTEXT\t\t657\t1\tIfcIdentifier\t1\nPARAM\tb838db80-d20c-11e1-8000-00215ad4efdf\tPset_StackTerminalTypeCommon.Status\tTEXT\t\t657\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t658\tPset_StairCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t22518080-d20d-11e1-8000-00215ad4efdf\tPset_StairCommon.FireExit\tYESNO\t\t658\t1\tIfcBoolean\t1\nPARAM\t19f94580-d20d-11e1-8000-00215ad4efdf\tPset_StairCommon.FireRating\tTEXT\t\t658\t1\tIfcLabel\t1\nPARAM\t0cdc5680-d20d-11e1-8000-00215ad4efdf\tPset_StairCommon.HandicapAccessible\tYESNO\t\t658\t1\tIfcBoolean\t1\nPARAM\t29788e80-d20d-11e1-8000-00215ad4efdf\tPset_StairCommon.HasNonSkidSurface\tYESNO\t\t658\t1\tIfcBoolean\t1\nPARAM\t136ace00-d20d-11e1-8000-00215ad4efdf\tPset_StairCommon.IsExternal\tYESNO\t\t658\t1\tIfcBoolean\t1\nPARAM\t8fc535f6-6e7a-4d68-99fd-3b4218b31836\tPset_StairCommon.LoadBearing\tYESNO\t\t658\t1\tIfcBoolean\t1\nPARAM\ta9e3055e-9126-471c-aa4a-118eb84c2751\tPset_StairCommon.NosingLength\tLENGTH\t\t658\t1\tIfcLengthMeasure\t1\nPARAM\te8807a00-d20c-11e1-8000-00215ad4efdf\tPset_StairCommon.NumberOfRiser\tINTEGER\t\t658\t1\tIfcCountMeasure\t1\nPARAM\ted452e00-d20c-11e1-8000-00215ad4efdf\tPset_StairCommon.NumberOfTreads\tINTEGER\t\t658\t1\tIfcCountMeasure\t1\nPARAM\td272b980-d20c-11e1-8000-00215ad4efdf\tPset_StairCommon.Reference\tTEXT\t\t658\t1\tIfcIdentifier\t1\nPARAM\t04841b80-d20d-11e1-8000-00215ad4efdf\tPset_StairCommon.RequiredHeadroom\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf2a27880-d20c-11e1-8000-00215ad4efdf\tPset_StairCommon.RiserHeight\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td9013100-d20c-11e1-8000-00215ad4efdf\tPset_StairCommon.Status\tTEXT\t\t658\t1\tPEnum_ElementStatus\t1\nPARAM\te2afaa3c-a326-44f2-94f3-a4fb08059fc3\tPset_StairCommon.ThermalTransmittance\tNUMBER\t\t658\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\tfafab380-d20c-11e1-8000-00215ad4efdf\tPset_StairCommon.TreadLength\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9996d6e7-f7ec-4fb9-973c-027edc7fc421\tPset_StairCommon.TreadLengthAtInnerSide\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t468b4f6c-361b-4ced-8545-cc440b4d8a1d\tPset_StairCommon.TreadLengthAtOffset\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t47b259a7-db12-46f4-87ec-f6049461cc52\tPset_StairCommon.WaistThickness\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t975f98e2-5ec8-4e4d-ad52-a2fb2cad197c\tPset_StairCommon.WalkingLineOffset\tLENGTH\t\t658\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t659\tPset_StairFlightCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8bd18f00-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.Headroom\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6c3a6680-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.NosingLength\tLENGTH\t\t659\t1\tIfcLengthMeasure\t1\nPARAM\t4f059800-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.NumberOfRiser\tINTEGER\t\t659\t1\tIfcCountMeasure\t1\nPARAM\t54fb7900-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.NumberOfTreads\tINTEGER\t\t659\t1\tIfcCountMeasure\t1\nPARAM\t39906e00-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.Reference\tTEXT\t\t659\t1\tIfcIdentifier\t1\nPARAM\t5af15a00-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.RiserHeight\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t401ee580-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.Status\tTEXT\t\t659\t1\tPEnum_ElementStatus\t1\nPARAM\t63499500-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.TreadLength\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8411ea80-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.TreadLengthAtInnerSide\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7b211900-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.TreadLengthAtOffset\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9429ca00-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.WaistThickness\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7197b100-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.WalkingLineOffset\tLENGTH\t\t659\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t660\tPset_Stationing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6500b63b-ebfa-4f9b-bffa-fc7bd554fdb3\tPset_Stationing.IncomingStation\tLENGTH\t\t660\t1\tIfcLengthMeasure\t1\nPARAM\t984f5f79-8e8b-429c-a058-4b1fc7d91337\tPset_Stationing.Station\tLENGTH\t\t660\t1\tIfcLengthMeasure\t1\n#\nGROUP\t661\tPset_StructuralSurfaceMemberVaryingThickness\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1f2c5ae6-f4a4-4733-969a-effb41892a77\tPset_StructuralSurfaceMemberVaryingThickness.Location1Global\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\nPARAM\tbd40a904-6365-4cfb-9cd6-4f425f027504\tPset_StructuralSurfaceMemberVaryingThickness.Location1Local\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\nPARAM\tcffbd577-c8ae-4ae3-b9c7-f17891e8b4d8\tPset_StructuralSurfaceMemberVaryingThickness.Location2Global\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\nPARAM\t058e4602-830c-41f4-862b-1d1c7338a7b0\tPset_StructuralSurfaceMemberVaryingThickness.Location2Local\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\nPARAM\t8fa1dfe7-5189-4b6a-96e0-71431b39e282\tPset_StructuralSurfaceMemberVaryingThickness.Location3Global\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\nPARAM\t441117ba-4772-4c3e-946e-ac44f07c39da\tPset_StructuralSurfaceMemberVaryingThickness.Location3Local\tMULTILINETEXT\t\t661\t1\tPropertyListValue\t1\nPARAM\tb96886be-793e-4099-b0a2-8924bfd23b83\tPset_StructuralSurfaceMemberVaryingThickness.Thickness1\tLENGTH\t\t661\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t054660e6-4799-4621-a6bd-ad29616d79b0\tPset_StructuralSurfaceMemberVaryingThickness.Thickness2\tLENGTH\t\t661\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t27d5c5a6-13ac-4c96-a769-fb075fde8178\tPset_StructuralSurfaceMemberVaryingThickness.Thickness3\tLENGTH\t\t661\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t662\tPset_SumpBusterCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t68a23581-2973-43a4-a31f-807a04f5a650\tPset_SumpBusterCommon.TypeDesignation\tTEXT\t\t662\t1\tIfcLabel\t1\n#\nGROUP\t663\tPset_Superelevation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t487a5d25-fcee-4649-8855-3874c82717e2\tPset_Superelevation.Side\tTEXT\t\t663\t1\tPEnum_SideType\t1\nPARAM\td6a70e27-a171-40ed-99ec-fcbf7ec6298a\tPset_Superelevation.Superelevation\tNUMBER\t\t663\t1\tIfcRatioMeasure\t1\nPARAM\t3f1d8c6a-eda5-4dbb-b03b-750b0e6d41c3\tPset_Superelevation.TransitionSuperelevation\tTEXT\t\t663\t1\tPEnum_TransitionSuperelevationType\t1\n#\nGROUP\t664\tPset_SwitchingDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcd623a00-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.HasLock\tYESNO\t\t664\t1\tIfcBoolean\t1\nPARAM\td4894800-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.IsIlluminated\tYESNO\t\t664\t1\tIfcBoolean\t1\nPARAM\tdb17bf80-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.Legend\tTEXT\t\t664\t1\tIfcLabel\t1\nPARAM\tb885a680-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.NumberOfGangs\tINTEGER\t\t664\t1\tIfcCountMeasure\t1\nPARAM\ta277e600-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.Reference\tTEXT\t\t664\t1\tIfcIdentifier\t1\nPARAM\te2d76400-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.SetPoint\tMULTILINETEXT\t\t664\t1\tPropertyTableValue\t1\nPARAM\ta9065d80-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.Status\tTEXT\t\t664\t1\tPEnum_ElementStatus\t1\nPARAM\tbde2f100-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.SwitchFunction\tTEXT\t\t664\t1\tPEnum_SwitchFunctionType\t1\n#\nGROUP\t665\tPset_SwitchingDeviceTypeContactor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7b3f780-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeContactor.ContactorType\tTEXT\t\t665\t1\tPEnum_ContactorType\t1\n#\nGROUP\t666\tPset_SwitchingDeviceTypeDimmerSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t11edd580-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeDimmerSwitch.DimmerType\tTEXT\t\t666\t1\tPEnum_SwitchingDeviceDimmerSwitchType\t1\n#\nGROUP\t667\tPset_SwitchingDeviceTypeEmergencyStop\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a2383b5-f769-4c33-9bd8-7061df4d0cc2\tPset_SwitchingDeviceTypeEmergencyStop.BreakingCapacity\tNUMBER\t\t667\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t85d3846c-cbfe-46c9-8612-18dc25e016c3\tPset_SwitchingDeviceTypeEmergencyStop.NominalCurrent\tNUMBER\t\t667\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t4495396b-abe3-464b-9f99-b0530f60e685\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfAffectedPoles\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\nPARAM\tce6cec2c-7627-4d06-bd2e-11290828e1d5\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfEarthFaultRelays\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\nPARAM\ta438a349-5606-46f7-86f1-5ba51e09b6d1\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfEmergencyButtons\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\nPARAM\t959456a7-13f3-4ae4-8a9a-6ad4505827dd\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfOverCurrentRelays\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\nPARAM\te5ee7276-4781-4568-af52-620a6731b4ac\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfPhases\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\nPARAM\t7475038e-205f-4939-96ce-276077e50929\tPset_SwitchingDeviceTypeEmergencyStop.NumberOfRelays\tINTEGER\t\t667\t1\tIfcCountMeasure\t1\nPARAM\t439c0159-1071-49a2-9eee-dd0c6102e804\tPset_SwitchingDeviceTypeEmergencyStop.RatedFrequency\tNUMBER\t\t667\t1\tIfcFrequencyMeasure\t1\nPARAM\t48c69023-6195-4ae4-bdcd-a5d1e2a77739\tPset_SwitchingDeviceTypeEmergencyStop.RatedVoltage\tMULTILINETEXT\t\t667\t1\tPropertyBoundedValue\t1\nPARAM\tfac73baf-4d13-4715-a1e9-edcac84ac8f8\tPset_SwitchingDeviceTypeEmergencyStop.ReferenceEnvironmentTemperature\tMULTILINETEXT\t\t667\t1\tPropertyBoundedValue\t1\nPARAM\t25993c00-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeEmergencyStop.SwitchOperation\tTEXT\t\t667\t1\tPEnum_SwitchingDeviceEmergencyStopType\t1\nPARAM\t4a125b3f-1771-4529-9ece-a7e6bd9d6dc9\tPset_SwitchingDeviceTypeEmergencyStop.TransformationRatio\tNUMBER\t\t667\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t668\tPset_SwitchingDeviceTypeKeypad\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t38137580-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeKeypad.KeypadType\tTEXT\t\t668\t1\tPEnum_SwitchingDeviceKeypadType\t1\n#\nGROUP\t669\tPset_SwitchingDeviceTypeMomentarySwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4c577280-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeMomentarySwitch.MomentaryType\tTEXT\t\t669\t1\tPEnum_SwitchingDeviceMomentarySwitchType\t1\n#\nGROUP\t670\tPset_SwitchingDeviceTypePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5b3e2500-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypePHistory.SetPoint\tMULTILINETEXT\t\t670\t1\tIfcTimeSeries\t1\nPARAM\t886090a4-64af-418e-a0f6-5b837f17e566\tPset_SwitchingDeviceTypePHistory.SetPointHistory\tMULTILINETEXT\t\t670\t1\tIfcTimeSeries\t1\n#\nGROUP\t671\tPset_SwitchingDeviceTypeRelay\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6488c9bd-69c5-4e92-9f04-e566471292d1\tPset_SwitchingDeviceTypeRelay.ContactResistance\tNUMBER\t\t671\t1\tIfcElectricResistanceMeasure\t1\nPARAM\tac234e6c-348e-4fd5-ac33-411aa66f0f45\tPset_SwitchingDeviceTypeRelay.Current\tMULTILINETEXT\t\t671\t1\tPropertyBoundedValue\t1\nPARAM\tf69f1d29-b405-4ac2-9996-aacc84b58834\tPset_SwitchingDeviceTypeRelay.InsulationResistance\tNUMBER\t\t671\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t584c5add-c653-49e9-b9b6-75a6d1bfc690\tPset_SwitchingDeviceTypeRelay.NominalHeight\tLENGTH\t\t671\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\td5c57d17-0bbe-4502-9039-b4bb1526427a\tPset_SwitchingDeviceTypeRelay.NominalLength\tLENGTH\t\t671\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t825df3a0-56c1-459a-8680-698ff8074c86\tPset_SwitchingDeviceTypeRelay.NominalWidth\tLENGTH\t\t671\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t5914ab87-d52e-44c1-bfda-fe2499e0c5dd\tPset_SwitchingDeviceTypeRelay.PullInVoltage\tNUMBER\t\t671\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t4a72c236-b91b-461b-b8df-64bc5fcf9cf9\tPset_SwitchingDeviceTypeRelay.ReleaseVoltage\tNUMBER\t\t671\t1\tIfcElectricVoltageMeasure\t1\nPARAM\tee5d7c45-ff88-4400-9c3a-696cfc2aa93f\tPset_SwitchingDeviceTypeRelay.Voltage\tMULTILINETEXT\t\t671\t1\tPropertyBoundedValue\t1\n#\nGROUP\t672\tPset_SwitchingDeviceTypeSelectorSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1fc7b52e-4bd0-4a77-a3d3-3bc98859fc9a\tPset_SwitchingDeviceTypeSelectorSwitch.NominalCurrent\tNUMBER\t\t672\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t1696c64a-fde2-456f-9785-2e1c42d5d14a\tPset_SwitchingDeviceTypeSelectorSwitch.NominalPower\tNUMBER\t\t672\t1\tIfcPowerMeasure\t1\nPARAM\t00aa38bd-5ea7-42ad-af0b-39d6a99c60aa\tPset_SwitchingDeviceTypeSelectorSwitch.NumberOfPhases\tINTEGER\t\t672\t1\tIfcCountMeasure\t1\nPARAM\t69a5d74e-7e49-4794-ab9f-1d80ab6dee89\tPset_SwitchingDeviceTypeSelectorSwitch.RatedFrequency\tNUMBER\t\t672\t1\tIfcFrequencyMeasure\t1\nPARAM\te2774f63-8490-48de-a23a-02e68ceb9c34\tPset_SwitchingDeviceTypeSelectorSwitch.ReferenceEnvironmentTemperature\tMULTILINETEXT\t\t672\t1\tPropertyBoundedValue\t1\nPARAM\t63966000-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeSelectorSwitch.SelectorType\tTEXT\t\t672\t1\tPEnum_SwitchingDeviceDimmerSwitchType\t1\nPARAM\t80cb2e80-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeSelectorSwitch.SwitchActivation\tTEXT\t\t672\t1\tPEnum_SwitchActivation\t1\nPARAM\t701ab880-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeSelectorSwitch.SwitchUsage\tTEXT\t\t672\t1\tPEnum_SwitchUsage\t1\n#\nGROUP\t673\tPset_SwitchingDeviceTypeStarter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t99d3df80-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeStarter.StarterType\tTEXT\t\t673\t1\tPEnum_StarterType\t1\n#\nGROUP\t674\tPset_SwitchingDeviceTypeSwitchDisconnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0efd4e43-16e2-4682-990c-0b78cd08ca44\tPset_SwitchingDeviceTypeSwitchDisconnector.HasVisualIndication\tYESNO\t\t674\t1\tIfcBoolean\t1\nPARAM\tc5ef6080-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeSwitchDisconnector.LoadDisconnectionType\tTEXT\t\t674\t1\tPEnum_LoadDisconnectionType\t1\nPARAM\tb3752700-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeSwitchDisconnector.SwitchDisconnectorType\tTEXT\t\t674\t1\tPEnum_SwitchDisconnectorType\t1\n#\nGROUP\t675\tPset_SwitchingDeviceTypeToggleSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdf0b5831-dd4c-40c7-b3b3-6de4b38c311c\tPset_SwitchingDeviceTypeToggleSwitch.IsIlluminated\tYESNO\t\t675\t1\tIfcBoolean\t1\nPARAM\tdb279ca8-2c04-41e8-a1ae-164677c1c667\tPset_SwitchingDeviceTypeToggleSwitch.Legend\tTEXT\t\t675\t1\tIfcLabel\t1\nPARAM\tfdf6a380-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeToggleSwitch.SwitchActivation\tTEXT\t\t675\t1\tPEnum_SwitchActivation\t1\nPARAM\teddec400-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeToggleSwitch.SwitchUsage\tTEXT\t\t675\t1\tPEnum_SwitchUsage\t1\nPARAM\td9023080-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeToggleSwitch.ToggleSwitchType\tTEXT\t\t675\t1\tPEnum_SwitchingDeviceToggleSwitchType\t1\n#\nGROUP\t676\tPset_SymmetricPairCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0a9d7298-7ac7-4da4-9cb5-ce7bba79b2ff\tPset_SymmetricPairCable.NumberOfTwistedPairs\tINTEGER\t\t676\t1\tIfcCountMeasure\t1\nPARAM\tc17e1d3b-7ec1-4b03-ac72-3ff44edcca91\tPset_SymmetricPairCable.NumberOfUntwistedPairs\tINTEGER\t\t676\t1\tIfcCountMeasure\t1\n#\nGROUP\t677\tPset_SystemFurnitureElementTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t35655000-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeCommon.Finishing\tTEXT\t\t677\t1\tIfcLabel\t1\nPARAM\t1d8dcc00-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeCommon.GroupCode\tTEXT\t\t677\t1\tIfcIdentifier\t1\nPARAM\t16ff5480-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeCommon.IsUsed\tYESNO\t\t677\t1\tIfcBoolean\t1\nPARAM\t2d0d1500-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeCommon.NominalHeight\tLENGTH\t\t677\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t24b4da00-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeCommon.NominalWidth\tLENGTH\t\t677\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t678\tPset_SystemFurnitureElementTypePanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a41e380-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypePanel.FurniturePanelType\tTEXT\t\t678\t1\tPEnum_FurniturePanelType\t1\nPARAM\t43b36c00-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypePanel.HasOpening\tYESNO\t\t678\t1\tIfcBoolean\t1\nPARAM\t5e85e080-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypePanel.NominalThickness\tLENGTH\t\t678\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t679\tPset_SystemFurnitureElementTypeSubrack\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb0f868e1-3c4d-4849-bbc3-07ec18f907fb\tPset_SystemFurnitureElementTypeSubrack.NumberOfOccupiedUnits\tINTEGER\t\t679\t1\tIfcCountMeasure\t1\nPARAM\tdd97a197-28ea-4b2c-b746-4d893c46f0a0\tPset_SystemFurnitureElementTypeSubrack.NumberOfSlots\tINTEGER\t\t679\t1\tIfcCountMeasure\t1\nPARAM\tfb905259-b60d-44d7-9462-5d89ab1513dd\tPset_SystemFurnitureElementTypeSubrack.NumberOfUnits\tINTEGER\t\t679\t1\tIfcCountMeasure\t1\n#\nGROUP\t680\tPset_SystemFurnitureElementTypeWorkSurface\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t807f6300-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeWorkSurface.HangingHeight\tLENGTH\t\t680\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8a08cb00-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeWorkSurface.NominalThickness\tLENGTH\t\t680\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t92610600-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeWorkSurface.ShapeDescription\tTEXT\t\t680\t1\tIfcLabel\t1\nPARAM\t73fb0a80-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeWorkSurface.SupportType\tTEXT\t\t680\t1\tPEnum_FurniturePanelType\t1\nPARAM\t6cd3fc80-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeWorkSurface.UsePurpose\tTEXT\t\t680\t1\tIfcLabel\t1\n#\nGROUP\t681\tPset_TankOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tad337a80-d20f-11e1-8000-00215ad4efdf\tPset_TankOccurrence.HasLadder\tYESNO\t\t681\t1\tIfcBoolean\t1\nPARAM\tb3c1f200-d20f-11e1-8000-00215ad4efdf\tPset_TankOccurrence.HasVisualIndicator\tYESNO\t\t681\t1\tIfcBoolean\t1\nPARAM\ta0af2200-d20f-11e1-8000-00215ad4efdf\tPset_TankOccurrence.TankComposition\tTEXT\t\t681\t1\tPEnum_TankComposition\t1\n#\nGROUP\t682\tPset_TankPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8fa541df-39a0-4896-9706-7a0165b4dd83\tPset_TankPHistory.Level\tMULTILINETEXT\t\t682\t1\tIfcTimeSeries\t1\nPARAM\t4f41ecc2-4f1b-4dc0-981c-a475bd7927d0\tPset_TankPHistory.Pressure\tNUMBER\t\t682\t1\tIfcPressureMeasure\t1\nPARAM\t7be8fc90-c36f-4ab3-9132-6f58dc7ec77c\tPset_TankPHistory.Temperature\tNUMBER\t\t682\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t683\tPset_TankTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td2c08400-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.AccessType\tTEXT\t\t683\t1\tPEnum_TankAccessType\t1\nPARAM\t0ac7c700-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.EffectiveCapacity\tVOLUME\t\t683\t1\tIfcVolumeMeasure\t1\nPARAM\t1f0bc400-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.EndShapeType\tTEXT\t\t683\t1\tPEnum_EndShapeType\t1\nPARAM\t2cc14980-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.FirstCurvatureRadius\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t290da519-48fe-4c9e-ba6f-cb26e41d3ae8\tPset_TankTypeCommon.Material\tMULTILINETEXT\t\t683\t1\tIfcMaterial\t1\nPARAM\t509267e8-33c0-493e-96ce-d9cd3039dce1\tPset_TankTypeCommon.MaterialThickness\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t069ba980-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.NominalCapacity\tVOLUME\t\t683\t1\tIfcVolumeMeasure\t1\nPARAM\tfedc0500-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.NominalDepth\tLENGTH\t\t683\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\teff55280-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.NominalLengthOrDiameter\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf7b4f700-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.NominalWidthOrDiameter\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3cd92900-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.NumberOfSections\tINTEGER\t\t683\t1\tIfcCountMeasure\t1\nPARAM\t0f8c7b00-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.OperatingWeight\tNUMBER\t\t683\t1\tIfcMassMeasure\t1\nPARAM\t14512f00-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.PatternType\tTEXT\t\t683\t1\tPEnum_TankPatternType\t1\nPARAM\tc0464a80-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.Reference\tTEXT\t\t683\t1\tIfcIdentifier\t1\nPARAM\t3480ee00-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.SecondCurvatureRadius\tLENGTH\t\t683\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc5a39500-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.Status\tTEXT\t\t683\t1\tPEnum_ElementStatus\t1\nPARAM\te0760980-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.StorageType\tTEXT\t\t683\t1\tPEnum_TankStorageType\t1\nPARAM\tac5b160f-d64a-4548-b105-d0ebe65d246e\tPset_TankTypeCommon.TankNominalCapacity\tVOLUME\t\t683\t1\tIfcVolumeMeasure\t1\nPARAM\td7a336cd-c824-4b16-9ac6-9de8cf8ebc1c\tPset_TankTypeCommon.Type\tTEXT\t\t683\t1\tPEnum_TankType\t1\n#\nGROUP\t684\tPset_TankTypeExpansion\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48c4eb00-d210-11e1-8000-00215ad4efdf\tPset_TankTypeExpansion.ChargePressure\tNUMBER\t\t684\t1\tIfcPressureMeasure\t1\nPARAM\t5a0df780-d210-11e1-8000-00215ad4efdf\tPset_TankTypeExpansion.PressureRegulatorSetting\tNUMBER\t\t684\t1\tIfcPressureMeasure\t1\nPARAM\t5f6b4200-d210-11e1-8000-00215ad4efdf\tPset_TankTypeExpansion.ReliefValveSetting\tNUMBER\t\t684\t1\tIfcPressureMeasure\t1\n#\nGROUP\t685\tPset_TankTypePreformed\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7873f300-d210-11e1-8000-00215ad4efdf\tPset_TankTypePreformed.EndShapeType\tTEXT\t\t685\t1\tPEnum_EndShapeType\t1\nPARAM\t89246900-d210-11e1-8000-00215ad4efdf\tPset_TankTypePreformed.FirstCurvatureRadius\tLENGTH\t\t685\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6b570400-d210-11e1-8000-00215ad4efdf\tPset_TankTypePreformed.PatternType\tTEXT\t\t685\t1\tPEnum_TankPatternType\t1\nPARAM\t92add100-d210-11e1-8000-00215ad4efdf\tPset_TankTypePreformed.SecondCurvatureRadius\tLENGTH\t\t685\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t686\tPset_TankTypePressureVessel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta2c5b080-d210-11e1-8000-00215ad4efdf\tPset_TankTypePressureVessel.ChargePressure\tNUMBER\t\t686\t1\tIfcPressureMeasure\t1\nPARAM\ta9ecbe80-d210-11e1-8000-00215ad4efdf\tPset_TankTypePressureVessel.PressureRegulatorSetting\tNUMBER\t\t686\t1\tIfcPressureMeasure\t1\nPARAM\tb07b3600-d210-11e1-8000-00215ad4efdf\tPset_TankTypePressureVessel.ReliefValveSetting\tNUMBER\t\t686\t1\tIfcPressureMeasure\t1\n#\nGROUP\t687\tPset_TankTypeSectional\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbd982500-d210-11e1-8000-00215ad4efdf\tPset_TankTypeSectional.NumberOfSections\tINTEGER\t\t687\t1\tIfcCountMeasure\t1\nPARAM\tc4269c80-d210-11e1-8000-00215ad4efdf\tPset_TankTypeSectional.SectionLength\tLENGTH\t\t687\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcd176e00-d210-11e1-8000-00215ad4efdf\tPset_TankTypeSectional.SectionWidth\tLENGTH\t\t687\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t688\tPset_TelecomCableGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t694fbef1-9544-4318-9d14-f822457897a1\tPset_TelecomCableGeneral.Attenuation\tNUMBER\t\t688\t1\tIfcReal\t1\nPARAM\t7adf32e7-160f-4c6c-8cf8-111d424f65f2\tPset_TelecomCableGeneral.CableArmourType\tTEXT\t\t688\t1\tPEnum_CableArmourType\t1\nPARAM\tcd9bb321-7078-4b5e-a4ea-2a884b25413d\tPset_TelecomCableGeneral.CableFunctionType\tTEXT\t\t688\t1\tPEnum_CableFunctionType\t1\nPARAM\t81ff6d62-30a6-4859-989b-5f2ecdb44702\tPset_TelecomCableGeneral.FireRating\tTEXT\t\t688\t1\tIfcLabel\t1\nPARAM\ta0d1ac4b-2bbf-4816-aaef-903326e9e5d1\tPset_TelecomCableGeneral.IsFireResistant\tYESNO\t\t688\t1\tIfcBoolean\t1\nPARAM\t9f2e46d8-2340-4e3f-806e-cc303cda887c\tPset_TelecomCableGeneral.JacketColour\tTEXT\t\t688\t1\tIfcLabel\t1\nPARAM\ta4894916-9cd4-4629-9e2e-855785eeee48\tPset_TelecomCableGeneral.NominalDiameter\tLENGTH\t\t688\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t689\tPset_TendonAnchorCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb5971383-4774-4d1a-b5bc-124390a70bbc\tPset_TendonAnchorCommon.Reference\tTEXT\t\t689\t1\tIfcIdentifier\t1\nPARAM\t3a18c38e-e4b4-48f8-8098-819b3ff33013\tPset_TendonAnchorCommon.Status\tTEXT\t\t689\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t690\tPset_TendonCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t77759cd6-099e-4656-9c74-fe2dbd0605c0\tPset_TendonCommon.AnchorageSlip\tLENGTH\t\t690\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taf2e2873-a344-40a4-a639-13f2b8958528\tPset_TendonCommon.FrictionCoefficient\tNUMBER\t\t690\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\te3ef2b0d-f418-42df-a5e3-f69de6adbd7f\tPset_TendonCommon.MinCurvatureRadius\tLENGTH\t\t690\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0a226221-13c6-42ed-8538-929d572f6910\tPset_TendonCommon.NominalDiameter\tLENGTH\t\t690\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t394262a7-521b-4e97-a665-dc358cf7cdda\tPset_TendonCommon.PreStress\tNUMBER\t\t690\t1\tIfcPressureMeasure\t1\nPARAM\t76ffa86f-ceff-4260-a836-d0c072b7e32c\tPset_TendonCommon.Reference\tTEXT\t\t690\t1\tIfcIdentifier\t1\nPARAM\ta54972ba-690e-404d-b974-4a365cecd3b3\tPset_TendonCommon.SheathDiameter\tLENGTH\t\t690\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taaf163da-0d95-48da-9eef-b0ef76abcde1\tPset_TendonCommon.Status\tTEXT\t\t690\t1\tPEnum_ElementStatus\t1\nPARAM\t885d4f56-9ff4-4e79-ba7b-8caf8e151367\tPset_TendonCommon.TensionForce\tNUMBER\t\t690\t1\tIfcForceMeasure\t1\n#\nGROUP\t691\tPset_ThermalLoad\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0406120f-622b-4d46-a9d2-b6df5d87ecff\tPset_ThermalLoad.ApplianceDiversity\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\te77405c6-7b18-42a9-bbfd-30e2d9ecd775\tPset_ThermalLoad.AppliancePercentLoadToRadiant\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tda828cbf-46cd-4e22-b1ba-e30cac4c01e4\tPset_ThermalLoad.InfiltrationDiversitySummer\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tec6e2761-66c3-4fe3-a45d-707cfa2b1871\tPset_ThermalLoad.InfiltrationDiversityWinter\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t65d6ee4b-b248-4e61-9401-3f6e26c552fe\tPset_ThermalLoad.LightingDiversity\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\teac6a40f-a68d-445b-abd8-2eddab20d648\tPset_ThermalLoad.LightingLoadIntensity\tNUMBER\t\t691\t1\tIfcHeatFluxDensityMeasure\t1\nPARAM\t96c7c031-4f84-453e-9eb7-9b309c3f0528\tPset_ThermalLoad.LightingPercentLoadToReturnAir\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t50bb171e-8fa3-4daa-a891-e25670ce5fb8\tPset_ThermalLoad.LoadSafetyFactor\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t2b2360cb-5b95-4d55-ad6f-09a3984596d6\tPset_ThermalLoad.OccupancyDiversity\tNUMBER\t\t691\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t996eb913-f6ff-46fa-9ef4-8b09ff8cca88\tPset_ThermalLoad.OutsideAirPerPerson\tNUMBER\t\t691\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t87aab719-21c8-44f6-90ef-0f7122f55619\tPset_ThermalLoad.ReceptacleLoadIntensity\tNUMBER\t\t691\t1\tIfcHeatFluxDensityMeasure\t1\nPARAM\tf2e47693-2d58-4d2d-a119-0f08b8dd650f\tPset_ThermalLoad.TotalCoolingLoad\tNUMBER\t\t691\t1\tIfcPowerMeasure\t1\nPARAM\tebd1764a-0fa0-47db-8075-eb2e69e93591\tPset_ThermalLoad.TotalHeatingLoad\tNUMBER\t\t691\t1\tIfcPowerMeasure\t1\n#\nGROUP\t692\tPset_ThermalLoadAggregate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0059fd00-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.ApplianceDiversity\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf33d0e00-d210-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.InfiltrationDiversitySummer\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf9cb8580-d210-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.InfiltrationDiversityWinter\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\nPARAM\teae4d300-d210-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.LightingDiversity\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t064fde00-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.LoadSafetyFactor\tNUMBER\t\t692\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tdf91a780-d210-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.TotalCoolingLoad\tNUMBER\t\t692\t1\tIfcPowerMeasure\t1\nPARAM\te4eef200-d210-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.TotalHeatingLoad\tNUMBER\t\t692\t1\tIfcPowerMeasure\t1\n#\nGROUP\t693\tPset_ThermalLoadDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2aabba80-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadDesignCriteria.AppliancePercentLoadToRadiant\tNUMBER\t\t693\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t313a3200-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadDesignCriteria.LightingLoadIntensity\tNUMBER\t\t693\t1\tIfcReal\t1\nPARAM\t37c8a980-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadDesignCriteria.LightingPercentLoadToReturnAir\tNUMBER\t\t693\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t18ca1780-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadDesignCriteria.OccupancyDiversity\tNUMBER\t\t693\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1ebff880-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadDesignCriteria.OutsideAirPerPerson\tNUMBER\t\t693\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t24b5d980-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadDesignCriteria.ReceptacleLoadIntensity\tNUMBER\t\t693\t1\tIfcReal\t1\n#\nGROUP\t694\tPset_TicketProcessing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1ee0639e-a3b5-4fbe-8f4e-9885eac2e44c\tPset_TicketProcessing.TicketProcessingTime\tNUMBER\t\t694\t1\tIfcTimeMeasure\t1\nPARAM\t30955c27-17e6-4e93-b75b-462f55627642\tPset_TicketProcessing.TicketStuckRatio\tNUMBER\t\t694\t1\tIfcRatioMeasure\t1\n#\nGROUP\t695\tPset_TicketVendingMachine\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2397d020-4287-419f-9bf9-ad275cf7c170\tPset_TicketVendingMachine.MoneyStuckRatio\tNUMBER\t\t695\t1\tIfcRatioMeasure\t1\nPARAM\t4156e1a3-9abb-4c5f-8dae-9438b30e6cce\tPset_TicketVendingMachine.PaymentMethod\tTEXT\t\t695\t1\tPEnum_PaymentMethod\t1\nPARAM\t5df3c6a2-9963-4511-92f3-7cf448c870f8\tPset_TicketVendingMachine.TicketProductionSpeed\tINTEGER\t\t695\t1\tIfcIntegerCountRateMeasure\t1\nPARAM\tee0c9f0f-7030-4e6f-a256-aff1f8a9e86d\tPset_TicketVendingMachine.TicketStuckRatio\tNUMBER\t\t695\t1\tIfcRatioMeasure\t1\nPARAM\t31664981-c94e-44d6-a441-011bfd0e6199\tPset_TicketVendingMachine.TicketVendingMachineType\tTEXT\t\t695\t1\tPEnum_TicketVendingMachineType\t1\nPARAM\td4e56077-f4e2-47e7-932b-9938d90ea547\tPset_TicketVendingMachine.VendingMachineUserInterface\tTEXT\t\t695\t1\tPEnum_VendingMachineUserInterface\t1\n#\nGROUP\t696\tPset_Tiling\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te01d117b-3976-446a-9aad-ac0e57456151\tPset_Tiling.Permeability\tNUMBER\t\t696\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t495740ff-2794-4792-af03-c52ff3d4627d\tPset_Tiling.TileLength\tLENGTH\t\t696\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t37c09419-ecfd-4aea-a1e9-d1cf622a4d54\tPset_Tiling.TileWidth\tLENGTH\t\t696\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t697\tPset_Tolerance\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfe22675c-6631-425d-8ebf-34b2ed0d462b\tPset_Tolerance.ElevationalFlatness\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbc1efc4e-7956-4aa1-9ee1-9ac00d4ebad2\tPset_Tolerance.HorizontalFlatness\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t122b7dc3-ae85-4433-a33b-6218b607a02c\tPset_Tolerance.HorizontalOrthogonality\tNUMBER\t\t697\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tecac4531-38ab-4bfe-8713-5e180d411a03\tPset_Tolerance.HorizontalStraightness\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t167addb9-7d7a-4e06-88c3-53dd200a65f4\tPset_Tolerance.HorizontalTolerance\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0f59fc7a-983b-4fb9-a41a-60e575484220\tPset_Tolerance.OrthogonalOrthogonality\tNUMBER\t\t697\t1\tIfcPlaneAngleMeasure\t1\nPARAM\te3875179-0044-4e0f-941b-f358a499934f\tPset_Tolerance.OrthogonalStraightness\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2227a96c-4110-484f-a138-41913f10ebec\tPset_Tolerance.OrthogonalTolerance\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td93e8f48-faf5-4d6b-b361-28d1a456d754\tPset_Tolerance.OverallOrthogonality\tNUMBER\t\t697\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t280ba47f-5926-45f7-8925-07cee0137580\tPset_Tolerance.OverallStraightness\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5cbfe1ba-9e65-4c2e-9301-94f354788d1c\tPset_Tolerance.OverallTolerance\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfd7bc1b3-1027-43c9-a7d7-c484ddeb189d\tPset_Tolerance.PlanarFlatness\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf9f1370d-d5de-4ad0-b476-2223d74e3a9e\tPset_Tolerance.SideFlatness\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t67203480-edaf-47d7-aa8a-0143e3daa24c\tPset_Tolerance.ToleranceBasis\tTEXT\t\t697\t1\tPEnum_ToleranceBasis\t1\nPARAM\tbb1726e7-12c6-4921-b164-33367b161142\tPset_Tolerance.ToleranceDescription\tTEXT\t\t697\t1\tIfcText\t1\nPARAM\t7819989c-6d8b-44d9-830c-a9a5d20c0f80\tPset_Tolerance.VerticalOrthogonality\tNUMBER\t\t697\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t0f866616-1921-4694-8c4f-ba7dde23af3b\tPset_Tolerance.VerticalStraightness\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbc448aa3-227c-4172-b140-439fae87e446\tPset_Tolerance.VerticalTolerance\tLENGTH\t\t697\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t698\tPset_TrackBase\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t393255c9-d452-4fb0-badb-941c7bb69869\tPset_TrackBase.IsSurfaceGalling\tYESNO\t\t698\t1\tIfcBoolean\t1\nPARAM\t7c3f80fe-4130-47df-a32c-b0e96517a140\tPset_TrackBase.SurfaceGallingArea\tAREA\t\t698\t1\tIfcAreaMeasure\t1\n#\nGROUP\t699\tPset_TrackElementOccurrenceSleeper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a267d97-dc38-4888-ae94-8aa322400805\tPset_TrackElementOccurrenceSleeper.HasSpecialEquipment\tYESNO\t\t699\t1\tIfcBoolean\t1\nPARAM\tc6cffcb8-87bd-4d75-87b3-177619e25a14\tPset_TrackElementOccurrenceSleeper.IsContaminatedSleeper\tYESNO\t\t699\t1\tIfcBoolean\t1\nPARAM\t610f38b4-60c3-4cdd-b826-a715e22e8628\tPset_TrackElementOccurrenceSleeper.SequenceInTrackPanel\tINTEGER\t\t699\t1\tIfcInteger\t1\nPARAM\t7bc7c08a-636f-4ff2-904d-358e6d45fcac\tPset_TrackElementOccurrenceSleeper.UnderSleeperPadStiffness\tTEXT\t\t699\t1\tPEnum_UnderSleeperPadStiffness\t1\n#\nGROUP\t700\tPset_TrackElementPHistoryDerailer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7dd95a2-b8a6-4279-a280-0dc497ace5f4\tPset_TrackElementPHistoryDerailer.IsDerailing\tMULTILINETEXT\t\t700\t1\tIfcTimeSeries\t1\n#\nGROUP\t701\tPset_TrackElementTypeDerailer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8be5b3c9-f145-4722-bba9-1a69bbe84181\tPset_TrackElementTypeDerailer.AppliedLineLoad\tNUMBER\t\t701\t1\tIfcMassPerLengthMeasure\t1\nPARAM\tb76c5ef8-6026-443e-927c-17e1aa24897a\tPset_TrackElementTypeDerailer.DerailmentHeight\tLENGTH\t\t701\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb6b3bacd-ab28-44ef-8cc8-83dc440e650c\tPset_TrackElementTypeDerailer.DerailmentMaximumSpeedLimit\tNUMBER\t\t701\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t6a08f9b3-318e-4fba-9ad8-ecbbde5a56c5\tPset_TrackElementTypeDerailer.DerailmentWheelDiameter\tLENGTH\t\t701\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t702\tPset_TrackElementTypeSleeper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3cae96aa-a06e-4ee2-a526-aa0742560e09\tPset_TrackElementTypeSleeper.FasteningType\tTEXT\t\t702\t1\tIfcLabel\t1\nPARAM\t17f3a2ce-a21d-450c-baab-71fbacae389b\tPset_TrackElementTypeSleeper.HollowSleeperUsage\tTEXT\t\t702\t1\tIfcLabel\t1\nPARAM\t7dea2b13-6326-4854-bb82-e0434e0c9c3a\tPset_TrackElementTypeSleeper.InstalledCondition\tTEXT\t\t702\t1\tPEnum_InstalledCondition\t1\nPARAM\te1f25ee7-9f71-41fe-b255-b50cdf36c09b\tPset_TrackElementTypeSleeper.IsElectricallyInsulated\tYESNO\t\t702\t1\tIfcBoolean\t1\nPARAM\tc96badd5-dbd0-4ebe-9cb3-2e678db095d9\tPset_TrackElementTypeSleeper.IsHollowSleeper\tYESNO\t\t702\t1\tIfcBoolean\t1\nPARAM\tddebb956-f60c-4e71-91f7-938671ba0d8c\tPset_TrackElementTypeSleeper.NumberOfTrackCenters\tINTEGER\t\t702\t1\tIfcCountMeasure\t1\nPARAM\t0852dc3d-ea8f-442a-8857-e0503bad2e93\tPset_TrackElementTypeSleeper.SleeperType\tTEXT\t\t702\t1\tPEnum_SleeperType\t1\nPARAM\t6fbf59bd-a61e-4181-b9ca-a1f011ef465f\tPset_TrackElementTypeSleeper.TechnicalStandard\tMULTILINETEXT\t\t702\t1\tIfcExternalReference\t1\n#\nGROUP\t703\tPset_TractionPowerSystem\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teec1c820-ff83-4d6d-9a13-485aaa03fe7a\tPset_TractionPowerSystem.ElectrificationType\tTEXT\t\t703\t1\tPEnum_ElectrificationType\t1\nPARAM\t57b2672e-349c-4b5e-86b5-2c1115e7a380\tPset_TractionPowerSystem.NominalVoltage\tNUMBER\t\t703\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t08a67a74-89a6-4ce5-9fab-b8209ed8c00e\tPset_TractionPowerSystem.PowerSupplyMode\tTEXT\t\t703\t1\tPEnum_PowerSupplyMode\t1\nPARAM\t23f6af24-68f9-4efc-a232-738a9b0fcd8f\tPset_TractionPowerSystem.RatedFrequency\tNUMBER\t\t703\t1\tIfcFrequencyMeasure\t1\n#\nGROUP\t704\tPset_TrafficCalmingDeviceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t921629e6-713f-4167-b627-aa36a8457131\tPset_TrafficCalmingDeviceCommon.TypeDesignation\tTEXT\t\t704\t1\tIfcLabel\t1\n#\nGROUP\t705\tPset_TransformerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta438b8c2-7a9c-4e9d-9976-e29609f23d3c\tPset_TransformerTypeCommon.EfficiencyCurve\tMULTILINETEXT\t\t705\t1\tPropertyTableValue\t1\nPARAM\tac9be380-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.ImaginaryImpedanceRatio\tNUMBER\t\t705\t1\tIfcRatioMeasure\t1\nPARAM\td228ed00-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.IsNeutralPrimaryTerminalAvailable\tYESNO\t\t705\t1\tIfcBoolean\t1\nPARAM\td94ffb00-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.IsNeutralSecondaryTerminalAvailable\tYESNO\t\t705\t1\tIfcBoolean\t1\nPARAM\t8f671500-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.MaximumApparentPower\tNUMBER\t\t705\t1\tIfcPowerMeasure\t1\nPARAM\t837b5300-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.PrimaryApparentPower\tNUMBER\t\t705\t1\tIfcPowerMeasure\t1\nPARAM\t6a72a200-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.PrimaryCurrent\tNUMBER\t\t705\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t778f9100-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.PrimaryFrequency\tNUMBER\t\t705\t1\tIfcFrequencyMeasure\t1\nPARAM\t5dee4980-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.PrimaryVoltage\tNUMBER\t\t705\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t57cfcbd7-f9f6-45e7-b359-f754cd1030db\tPset_TransformerTypeCommon.RadiativeFraction\tNUMBER\t\t705\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\ta6a60280-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.RealImpedanceRatio\tNUMBER\t\t705\t1\tIfcRatioMeasure\t1\nPARAM\t444d0200-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.Reference\tTEXT\t\t705\t1\tIfcIdentifier\t1\nPARAM\t89713400-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.SecondaryApparentPower\tNUMBER\t\t705\t1\tIfcPowerMeasure\t1\nPARAM\t71011980-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.SecondaryCurrent\tNUMBER\t\t705\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t94c45f80-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.SecondaryCurrentType\tTEXT\t\t705\t1\tPEnum_SecondaryCurrentType\t1\nPARAM\t7e1e0880-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.SecondaryFrequency\tNUMBER\t\t705\t1\tIfcFrequencyMeasure\t1\nPARAM\t634b9400-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.SecondaryVoltage\tNUMBER\t\t705\t1\tIfcElectricVoltageMeasure\t1\nPARAM\ta0b02180-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.ShortCircuitVoltage\tMULTILINETEXT\t\t705\t1\tIfcComplexNumber\t1\nPARAM\t4b741000-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.Status\tTEXT\t\t705\t1\tPEnum_ElementStatus\t1\nPARAM\t95580b08-0033-4fb1-80f4-ce1d5048a707\tPset_TransformerTypeCommon.TransformerVectorGroup\tTEXT\t\t705\t1\tPEnum_TransformerVectorGroup\t1\n#\nGROUP\t706\tPset_TransitionSectionCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3032435f-8b1f-4c02-b8bc-96c48fe95e96\tPset_TransitionSectionCommon.NominalLength\tLENGTH\t\t706\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t707\tPset_TransportElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t000e3180-d212-11e1-8000-00215ad4efdf\tPset_TransportElementCommon.CapacityPeople\tINTEGER\t\t707\t1\tIfcCountMeasure\t1\nPARAM\t056b7c00-d212-11e1-8000-00215ad4efdf\tPset_TransportElementCommon.CapacityWeight\tNUMBER\t\t707\t1\tIfcMassMeasure\t1\nPARAM\t0c928a00-d212-11e1-8000-00215ad4efdf\tPset_TransportElementCommon.FireExit\tYESNO\t\t707\t1\tIfcBoolean\t1\nPARAM\te967da80-d211-11e1-8000-00215ad4efdf\tPset_TransportElementCommon.Reference\tTEXT\t\t707\t1\tIfcIdentifier\t1\nPARAM\teff65200-d211-11e1-8000-00215ad4efdf\tPset_TransportElementCommon.Status\tTEXT\t\t707\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t708\tPset_TransportElementElevator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t29c75880-d212-11e1-8000-00215ad4efdf\tPset_TransportElementElevator.ClearDepth\tLENGTH\t\t708\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t321f9380-d212-11e1-8000-00215ad4efdf\tPset_TransportElementElevator.ClearHeight\tLENGTH\t\t708\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t20d68700-d212-11e1-8000-00215ad4efdf\tPset_TransportElementElevator.ClearWidth\tLENGTH\t\t708\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1a480f80-d212-11e1-8000-00215ad4efdf\tPset_TransportElementElevator.FireFightingLift\tYESNO\t\t708\t1\tIfcBoolean\t1\n#\nGROUP\t709\tPset_TransportEquipmentOTN\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te7533440-aa54-4d47-b63b-32d84ca341ce\tPset_TransportEquipmentOTN.ChromaticDispersionTolerance\tNUMBER\t\t709\t1\tIfcReal\t1\nPARAM\t1392767b-7d0b-4c2b-aa0f-0e49d3d33d9b\tPset_TransportEquipmentOTN.EquipmentCapacity\tINTEGER\t\t709\t1\tIfcIntegerCountRateMeasure\t1\nPARAM\t4cddf633-5e05-443e-a937-fe6fa823ed65\tPset_TransportEquipmentOTN.MinimumOpticalSignalToNoiseRatio\tNUMBER\t\t709\t1\tIfcRatioMeasure\t1\nPARAM\t850b4974-93db-477b-be9a-d9fbcc58126d\tPset_TransportEquipmentOTN.PolarizationModeDispersionTolerance\tNUMBER\t\t709\t1\tIfcTimeMeasure\t1\nPARAM\t7002213f-5d54-4b40-8d92-68ce3f6f93de\tPset_TransportEquipmentOTN.SingleChannelAveragePower\tNUMBER\t\t709\t1\tIfcPowerMeasure\t1\nPARAM\t7beeb907-80d7-4ec4-b1ca-4b425ae75478\tPset_TransportEquipmentOTN.SingleChannelPower\tMULTILINETEXT\t\t709\t1\tPropertyBoundedValue\t1\nPARAM\t61a5268f-37b5-4e9d-9bd0-0b2e42b2dc38\tPset_TransportEquipmentOTN.SingleWaveTransmissionRate\tNUMBER\t\t709\t1\tIfcFrequencyMeasure\t1\n#\nGROUP\t710\tPset_TrenchExcavationCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9f4b0379-a5c3-4a94-a8e6-fcb1b3912256\tPset_TrenchExcavationCommon.NominalDepth\tLENGTH\t\t710\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t32b3a853-f42a-4fab-9696-306974c9b207\tPset_TrenchExcavationCommon.NominalWidth\tLENGTH\t\t710\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t711\tPset_TubeBundleTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t757a0200-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.FoulingFactor\tNUMBER\t\t711\t1\tIfcThermalResistanceMeasure\t1\nPARAM\tb8d47080-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.HasTurbulator\tYESNO\t\t711\t1\tIfcBoolean\t1\nPARAM\ta78b6400-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.HorizontalSpacing\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t672be600-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.InLineRowSpacing\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9f332900-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.InsideDiameter\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t80349700-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.Length\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t39dee270-b6c7-4be8-afa7-dd9b432ff013\tPset_TubeBundleTypeCommon.Material\tMULTILINETEXT\t\t711\t1\tIfcMaterial\t1\nPARAM\t8e82b300-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.NominalDiameter\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t701cb780-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.NumberOfCircuits\tINTEGER\t\t711\t1\tIfcCountMeasure\t1\nPARAM\t58453380-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.NumberOfRows\tINTEGER\t\t711\t1\tIfcCountMeasure\t1\nPARAM\t96daee00-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.OutsideDiameter\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t42377300-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.Reference\tTEXT\t\t711\t1\tIfcIdentifier\t1\nPARAM\t5ed3ab00-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.StaggeredRowSpacing\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t48c5ea80-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.Status\tTEXT\t\t711\t1\tPEnum_ElementStatus\t1\nPARAM\t7ad74c80-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.ThermalConductivity\tNUMBER\t\t711\t1\tIfcThermalConductivityMeasure\t1\nPARAM\tb07c3580-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.VerticalSpacing\tLENGTH\t\t711\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t89256880-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.Volume\tVOLUME\t\t711\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t712\tPset_TubeBundleTypeFinned\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf33e0d80-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.Diameter\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfc2edf00-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.FinCorrugatedType\tTEXT\t\t712\t1\tIfcLabel\t1\nPARAM\t0355ed00-d213-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.HasCoating\tYESNO\t\t712\t1\tIfcBoolean\t1\nPARAM\te9b4a580-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.Height\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te15c6a80-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.Length\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf2a92243-5915-4384-8be7-40590b579e48\tPset_TubeBundleTypeFinned.Material\tMULTILINETEXT\t\t712\t1\tIfcMaterial\t1\nPARAM\tc8ec5000-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.Spacing\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdb668980-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.ThermalConductivity\tNUMBER\t\t712\t1\tIfcThermalConductivityMeasure\t1\nPARAM\td1dd2180-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.Thickness\tLENGTH\t\t712\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t713\tPset_Uncertainty\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8803b541-878a-4ca7-9c25-d1986cff83d6\tPset_Uncertainty.HorizontalUncertainty\tLENGTH\t\t713\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taf065fab-ea56-4544-99fc-d5e0fa7b32ad\tPset_Uncertainty.LinearUncertainty\tLENGTH\t\t713\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td953d39d-f665-4dca-9be3-768f8ab91420\tPset_Uncertainty.OrthogonalUncertainty\tLENGTH\t\t713\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2b577f9e-06cf-4ef7-8ac3-44a5d9e6c140\tPset_Uncertainty.UncertaintyBasis\tTEXT\t\t713\t1\tPEnum_UncertaintyBasis\t1\nPARAM\t59c638e5-30a0-4389-a292-4d4284be01e3\tPset_Uncertainty.UncertaintyDescription\tTEXT\t\t713\t1\tIfcText\t1\nPARAM\tee7cdcf0-27c3-43a5-a399-632161213578\tPset_Uncertainty.VerticalUncertainty\tLENGTH\t\t713\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t714\tPset_UnitaryControlElementBaseStationController\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taa296576-e1db-4edc-80af-e77bbcc9d462\tPset_UnitaryControlElementBaseStationController.NumberOfInterfaces\tMULTILINETEXT\t\t714\t1\tPropertyTableValue\t1\nPARAM\t99e4df9a-5787-4430-b2c8-7d50d0727b8e\tPset_UnitaryControlElementBaseStationController.NumberOfManagedBTSs\tINTEGER\t\t714\t1\tIfcCountMeasure\t1\nPARAM\td005dc24-516a-4741-b570-cbcf0bd27088\tPset_UnitaryControlElementBaseStationController.NumberOfManagedCarriers\tINTEGER\t\t714\t1\tIfcCountMeasure\t1\n#\nGROUP\t715\tPset_UnitaryControlElementPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t17015380-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementPHistory.Fan\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\nPARAM\t136dcc80-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementPHistory.Mode\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\nPARAM\t88d5b643-e9d2-44d1-bc25-7f7692f40c71\tPset_UnitaryControlElementPHistory.OperationModeHistory\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\nPARAM\t1a94da80-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementPHistory.SetPoint\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\nPARAM\t1072dc00-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementPHistory.Temperature\tMULTILINETEXT\t\t715\t1\tIfcTimeSeries\t1\n#\nGROUP\t716\tPset_UnitaryControlElementTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3ac49980-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementTypeCommon.Mode\tMULTILINETEXT\t\t716\t1\tPropertyTableValue\t1\nPARAM\ted7f731d-a664-441d-b358-5a8372615318\tPset_UnitaryControlElementTypeCommon.OperationMode\tMULTILINETEXT\t\t716\t1\tPropertyTableValue\t1\nPARAM\t241e4280-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementTypeCommon.Reference\tTEXT\t\t716\t1\tIfcIdentifier\t1\nPARAM\t2a142380-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementTypeCommon.Status\tTEXT\t\t716\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t717\tPset_UnitaryControlElementTypeControlPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t86d34d3c-1be3-4c8f-bc7d-f0fe536373cb\tPset_UnitaryControlElementTypeControlPanel.NominalCurrent\tNUMBER\t\t717\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tb8f4d796-1fbe-43c1-9052-af5700c18289\tPset_UnitaryControlElementTypeControlPanel.NominalPower\tNUMBER\t\t717\t1\tIfcPowerMeasure\t1\nPARAM\t9b8034a2-59a9-401a-9095-95f1323a2aa5\tPset_UnitaryControlElementTypeControlPanel.RatedVoltage\tMULTILINETEXT\t\t717\t1\tPropertyBoundedValue\t1\nPARAM\t18f921ac-e3fb-4480-8052-38bacf4fa9ef\tPset_UnitaryControlElementTypeControlPanel.ReferenceAirRelativeHumidity\tMULTILINETEXT\t\t717\t1\tPropertyBoundedValue\t1\nPARAM\t34055084-542a-455d-aa6a-e1e1f6a0021c\tPset_UnitaryControlElementTypeControlPanel.ReferenceEnvironmentTemperature\tMULTILINETEXT\t\t717\t1\tPropertyBoundedValue\t1\n#\nGROUP\t718\tPset_UnitaryControlElementTypeIndicatorPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta214298b-c8bc-4c2d-91e0-2d20124d29f8\tPset_UnitaryControlElementTypeIndicatorPanel.Application\tTEXT\t\t718\t1\tPEnum_UnitaryControlElementApplication\t1\nPARAM\td2de3947-00e2-4541-9d17-8fb48b642f73\tPset_UnitaryControlElementTypeIndicatorPanel.UnitaryApplication\tTEXT\t\t718\t1\tPEnum_UnitaryControlElementApplication\t1\n#\nGROUP\t719\tPset_UnitaryControlElementTypeThermostat\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t41d7fa5a-1d4b-4dbf-9733-687435d62493\tPset_UnitaryControlElementTypeThermostat.TemperatureSetPoint\tMULTILINETEXT\t\t719\t1\tPropertyBoundedValue\t1\n#\nGROUP\t720\tPset_UnitaryEquipmentTypeAirConditioningUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t93943200-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.CondenserEnteringTemperature\tNUMBER\t\t720\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t8d9e5100-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.CondenserFlowrate\tNUMBER\t\t720\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t9b53d680-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.CondenserLeavingTemperature\tNUMBER\t\t720\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t7bbcae00-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.CoolingEfficiency\tNUMBER\t\t720\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t824b2580-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.HeatingCapacity\tNUMBER\t\t720\t1\tIfcPowerMeasure\t1\nPARAM\t88410680-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.HeatingEfficiency\tNUMBER\t\t720\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t75c6cd00-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.LatentCoolingCapacity\tNUMBER\t\t720\t1\tIfcPowerMeasure\t1\nPARAM\ta149b780-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.OutsideAirFlowrate\tNUMBER\t\t720\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t5a5bc200-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.SensibleCoolingCapacity\tNUMBER\t\t720\t1\tIfcPowerMeasure\t1\n#\nGROUP\t721\tPset_UnitaryEquipmentTypeAirHandler\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tadce1000-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirHandler.AirHandlerConstruction\tTEXT\t\t721\t1\tPEnum_AirHandlerConstruction\t1\nPARAM\tbaeaff00-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirHandler.AirHandlerFanCoilArrangement\tTEXT\t\t721\t1\tPEnum_AirHandlerFanCoilArrangement\t1\nPARAM\tc6d6c100-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirHandler.DualDeck\tYESNO\t\t721\t1\tIfcBoolean\t1\n#\nGROUP\t722\tPset_UnitaryEquipmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td2c28300-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeCommon.Reference\tTEXT\t\t722\t1\tIfcIdentifier\t1\nPARAM\td950fa80-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeCommon.Status\tTEXT\t\t722\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t723\tPset_UtilityConsumption\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3adb8501-10de-47f0-8de0-4c8add8eb5f5\tPset_UtilityConsumption.Electricity\tTEXT\t\t723\t1\tIfcLabel\t1\nPARAM\t03d13a50-42c5-432a-b41c-f34c0229b59f\tPset_UtilityConsumption.Fuel\tTEXT\t\t723\t1\tIfcLabel\t1\nPARAM\te22534ca-1923-43e3-b914-d07c0f1d6b20\tPset_UtilityConsumption.Heat\tTEXT\t\t723\t1\tIfcLabel\t1\nPARAM\t51272df6-8346-4d7a-b6c6-fe6d1045947f\tPset_UtilityConsumption.Steam\tTEXT\t\t723\t1\tIfcLabel\t1\nPARAM\t3a711cff-0212-4ca2-9a60-da08db6d9e4c\tPset_UtilityConsumption.Water\tTEXT\t\t723\t1\tIfcLabel\t1\n#\nGROUP\t724\tPset_UtilityConsumptionPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf1c11500-d213-11e1-8000-00215ad4efdf\tPset_UtilityConsumptionPHistory.Electricity\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\nPARAM\tf7b6f600-d213-11e1-8000-00215ad4efdf\tPset_UtilityConsumptionPHistory.Fuel\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\nPARAM\teec62480-d213-11e1-8000-00215ad4efdf\tPset_UtilityConsumptionPHistory.Heat\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\nPARAM\tfab1e680-d213-11e1-8000-00215ad4efdf\tPset_UtilityConsumptionPHistory.Steam\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\nPARAM\tf4bc0580-d213-11e1-8000-00215ad4efdf\tPset_UtilityConsumptionPHistory.Water\tMULTILINETEXT\t\t724\t1\tIfcTimeSeries\t1\n#\nGROUP\t725\tPset_ValvePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t069da880-d214-11e1-8000-00215ad4efdf\tPset_ValvePHistory.MeasuredFlowRate\tMULTILINETEXT\t\t725\t1\tIfcTimeSeries\t1\nPARAM\t0ac9c600-d214-11e1-8000-00215ad4efdf\tPset_ValvePHistory.MeasuredPressureDrop\tMULTILINETEXT\t\t725\t1\tIfcTimeSeries\t1\nPARAM\t03a2b800-d214-11e1-8000-00215ad4efdf\tPset_ValvePHistory.PercentageOpen\tMULTILINETEXT\t\t725\t1\tIfcTimeSeries\t1\n#\nGROUP\t726\tPset_ValveTypeAirRelease\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t161cf180-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeAirRelease.IsAutomatic\tYESNO\t\t726\t1\tIfcBoolean\t1\n#\nGROUP\t727\tPset_ValveTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t98f8aec8-247b-430d-a4ae-121784d5e7b0\tPset_ValveTypeCommon.BodyMaterial\tMULTILINETEXT\t\t727\t1\tIfcMaterial\t1\nPARAM\t8a579500-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.CloseOffRating\tNUMBER\t\t727\t1\tIfcPressureMeasure\t1\nPARAM\t8461b400-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.FlowCoefficient\tNUMBER\t\t727\t1\tIfcReal\t1\nPARAM\tac0fa7dd-4cfe-4446-895c-b4b6600866f1\tPset_ValveTypeCommon.OperatingMechanismMaterial\tMULTILINETEXT\t\t727\t1\tIfcMaterial\t1\nPARAM\t2208b380-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.Reference\tTEXT\t\t727\t1\tIfcIdentifier\t1\nPARAM\t6a27d600-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.Size\tLENGTH\t\t727\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t103808cf-5fe6-4d58-9e73-17c7493147b5\tPset_ValveTypeCommon.Status\tTEXT\t\t727\t1\tPEnum_ElementStatus\t1\nPARAM\t7875f200-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.TestPressure\tNUMBER\t\t727\t1\tIfcPressureMeasure\t1\nPARAM\t51b7bb80-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.ValveMechanism\tTEXT\t\t727\t1\tPEnum_ValveMechanism\t1\nPARAM\t38167400-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.ValveOperation\tTEXT\t\t727\t1\tPEnum_ValveOperation\t1\nPARAM\t27fe9480-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.ValvePattern\tTEXT\t\t727\t1\tPEnum_ValvePattern\t1\nPARAM\t7e6bd300-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.WorkingPressure\tNUMBER\t\t727\t1\tIfcPressureMeasure\t1\n#\nGROUP\t728\tPset_ValveTypeDrawOffCock\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t96dbed80-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeDrawOffCock.HasHoseUnion\tYESNO\t\t728\t1\tIfcBoolean\t1\n#\nGROUP\t729\tPset_ValveTypeFaucet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcbe84000-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFaucet.FaucetFunction\tTEXT\t\t729\t1\tPEnum_FaucetFunction\t1\nPARAM\tb70bac80-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFaucet.FaucetOperation\tTEXT\t\t729\t1\tPEnum_FaucetOperation\t1\nPARAM\te02c3d00-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFaucet.FaucetTopDescription\tTEXT\t\t729\t1\tIfcText\t1\nPARAM\ta3f8dc80-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFaucet.FaucetType\tTEXT\t\t729\t1\tPEnum_FaucetType\t1\nPARAM\tda365c00-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFaucet.Finish\tTEXT\t\t729\t1\tIfcText\t1\n#\nGROUP\t730\tPset_ValveTypeFlushing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tec17ff00-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFlushing.FlushingRate\tNUMBER\t\t730\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tf20de000-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFlushing.HasIntegralShutOffDevice\tYESNO\t\t730\t1\tIfcBoolean\t1\nPARAM\tf89c5780-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFlushing.IsHighPressure\tYESNO\t\t730\t1\tIfcBoolean\t1\n#\nGROUP\t731\tPset_ValveTypeGasTap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0651dd00-d215-11e1-8000-00215ad4efdf\tPset_ValveTypeGasTap.HasHoseUnion\tYESNO\t\t731\t1\tIfcBoolean\t1\n#\nGROUP\t732\tPset_ValveTypeIsolating\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t12d63580-d215-11e1-8000-00215ad4efdf\tPset_ValveTypeIsolating.IsNormallyOpen\tYESNO\t\t732\t1\tIfcBoolean\t1\nPARAM\t1a95da00-d215-11e1-8000-00215ad4efdf\tPset_ValveTypeIsolating.IsolatingPurpose\tTEXT\t\t732\t1\tPEnum_IsolatingPurpose\t1\n#\nGROUP\t733\tPset_ValveTypeMixing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2c777d00-d215-11e1-8000-00215ad4efdf\tPset_ValveTypeMixing.MixerControl\tTEXT\t\t733\t1\tPEnum_MixingValveControl\t1\nPARAM\t49ac4b80-d215-11e1-8000-00215ad4efdf\tPset_ValveTypeMixing.OutletConnectionSize\tLENGTH\t\t733\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t734\tPset_ValveTypePressureReducing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5fba0c00-d215-11e1-8000-00215ad4efdf\tPset_ValveTypePressureReducing.DownstreamPressure\tNUMBER\t\t734\t1\tIfcPressureMeasure\t1\nPARAM\t59c42b00-d215-11e1-8000-00215ad4efdf\tPset_ValveTypePressureReducing.UpstreamPressure\tNUMBER\t\t734\t1\tIfcPressureMeasure\t1\n#\nGROUP\t735\tPset_ValveTypePressureRelief\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6cd6fb00-d215-11e1-8000-00215ad4efdf\tPset_ValveTypePressureRelief.ReliefPressure\tNUMBER\t\t735\t1\tIfcPressureMeasure\t1\n#\nGROUP\t736\tPset_VegetationCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf93c9a71-0165-4ea8-8080-8af0ef35e023\tPset_VegetationCommon.BotanicalName\tTEXT\t\t736\t1\tIfcLabel\t1\nPARAM\t57f40226-ee2b-4b87-8ebf-ec6e2f7d5a9b\tPset_VegetationCommon.LocalName\tTEXT\t\t736\t1\tIfcLabel\t1\n#\nGROUP\t737\tPset_VehicleAvailability\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t690f1857-7053-4943-a8d5-82109a361f23\tPset_VehicleAvailability.MaintenanceDowntime\tNUMBER\t\t737\t1\tIfcRatioMeasure\t1\nPARAM\t157f2fdd-dc53-4330-94f8-f80cc739f00b\tPset_VehicleAvailability.VehicleAvailability\tNUMBER\t\t737\t1\tIfcRatioMeasure\t1\nPARAM\t6262c479-658d-4039-b0e2-ea4659f8f56e\tPset_VehicleAvailability.WeatherDowntime\tNUMBER\t\t737\t1\tIfcRatioMeasure\t1\n#\nGROUP\t738\tPset_VesselLineCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te9118634-e664-4410-8055-b1b091ad9c7c\tPset_VesselLineCommon.CentreLineToFairlead\tLENGTH\t\t738\t1\tIfcLengthMeasure\t1\nPARAM\t286cc151-3e42-4e39-8e47-0065da5bfde6\tPset_VesselLineCommon.FairleadToTermination\tLENGTH\t\t738\t1\tIfcLengthMeasure\t1\nPARAM\tc39ae03e-31cc-41a1-bffc-281059b1aae2\tPset_VesselLineCommon.HeightAboveMainDeck\tLENGTH\t\t738\t1\tIfcLengthMeasure\t1\nPARAM\t8c33492e-fef2-46ea-9926-65da0e548aa1\tPset_VesselLineCommon.LineIdentifier\tTEXT\t\t738\t1\tIfcIdentifier\t1\nPARAM\t78ea0a09-63a3-46e9-9956-cf85cc2dd275\tPset_VesselLineCommon.LineStrength\tNUMBER\t\t738\t1\tIfcForceMeasure\t1\nPARAM\t8840404e-8f35-4305-a3c0-ad87015487c7\tPset_VesselLineCommon.LineType\tTEXT\t\t738\t1\tIfcLabel\t1\nPARAM\tf3f0afd0-50a0-4c0a-a4c3-c2ecd39a3069\tPset_VesselLineCommon.MidshipToFairLead\tLENGTH\t\t738\t1\tIfcLengthMeasure\t1\nPARAM\t3d5fe8d6-875b-45fe-8c63-701605ba964d\tPset_VesselLineCommon.PreTensionAim\tNUMBER\t\t738\t1\tIfcForceMeasure\t1\nPARAM\tb50d3953-5bed-40a7-a7b7-f8469e18656f\tPset_VesselLineCommon.TailDiameter\tLENGTH\t\t738\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t292c8be4-9625-4977-b995-128bd95ec7bf\tPset_VesselLineCommon.TailLength\tLENGTH\t\t738\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2d801def-b115-4f9d-9dd6-2dcd996760ed\tPset_VesselLineCommon.TailStrength\tNUMBER\t\t738\t1\tIfcForceMeasure\t1\nPARAM\te877b8b0-7a4d-4436-b29b-7f72c59b3c92\tPset_VesselLineCommon.TailType\tTEXT\t\t738\t1\tIfcLabel\t1\nPARAM\t4844604d-89b6-4fae-96b0-cac77ba81a47\tPset_VesselLineCommon.WinchBreakLimit\tNUMBER\t\t738\t1\tIfcForceMeasure\t1\n#\nGROUP\t739\tPset_VibrationIsolatorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcb60a188-ae0d-4c85-b701-a99598ba7075\tPset_VibrationIsolatorTypeCommon.Height\tLENGTH\t\t739\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8b3cf680-d215-11e1-8000-00215ad4efdf\tPset_VibrationIsolatorTypeCommon.IsolatorCompressibility\tNUMBER\t\t739\t1\tIfcRatioMeasure\t1\nPARAM\t85dfac00-d215-11e1-8000-00215ad4efdf\tPset_VibrationIsolatorTypeCommon.IsolatorStaticDeflection\tLENGTH\t\t739\t1\tIfcLengthMeasure\t1\nPARAM\t89ee9a3a-ccf7-4263-8adb-8aecbfd91860\tPset_VibrationIsolatorTypeCommon.Material\tMULTILINETEXT\t\t739\t1\tIfcMaterial\t1\nPARAM\t998b1280-d215-11e1-8000-00215ad4efdf\tPset_VibrationIsolatorTypeCommon.MaximumSupportedWeight\tNUMBER\t\t739\t1\tIfcMassMeasure\t1\nPARAM\t9132d780-d215-11e1-8000-00215ad4efdf\tPset_VibrationIsolatorTypeCommon.NominalHeight\tLENGTH\t\t739\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t795b5380-d215-11e1-8000-00215ad4efdf\tPset_VibrationIsolatorTypeCommon.Reference\tTEXT\t\t739\t1\tIfcIdentifier\t1\nPARAM\t1a989eee-042c-4402-833b-b2453e382388\tPset_VibrationIsolatorTypeCommon.Status\tTEXT\t\t739\t1\tPEnum_ElementStatus\t1\nPARAM\t7f513480-d215-11e1-8000-00215ad4efdf\tPset_VibrationIsolatorTypeCommon.VibrationTransmissibility\tNUMBER\t\t739\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t740\tPset_VoltageInstrumentTransformer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5cbc9f04-eb46-4f9b-b90c-4254470aa4f3\tPset_VoltageInstrumentTransformer.AccuracyClass\tNUMBER\t\t740\t1\tIfcRatioMeasure\t1\nPARAM\t8c9ed2b8-4d06-4844-bb3f-7fa902e59ef2\tPset_VoltageInstrumentTransformer.AccuracyGrade\tTEXT\t\t740\t1\tIfcLabel\t1\nPARAM\t9fcc4ae8-1444-4cea-a329-4e9186ad691f\tPset_VoltageInstrumentTransformer.NominalCurrent\tNUMBER\t\t740\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t1cd68416-9910-498b-9e01-79deeeec3f69\tPset_VoltageInstrumentTransformer.NominalPower\tNUMBER\t\t740\t1\tIfcPowerMeasure\t1\nPARAM\t125bda4b-92fe-4041-8eb6-8d72db3a1606\tPset_VoltageInstrumentTransformer.NumberOfPhases\tINTEGER\t\t740\t1\tIfcCountMeasure\t1\nPARAM\t88eec545-e7af-488b-90dc-c00bae0556b7\tPset_VoltageInstrumentTransformer.PrimaryFrequency\tNUMBER\t\t740\t1\tIfcFrequencyMeasure\t1\nPARAM\t0c433820-4d17-442e-9505-6d677d54b261\tPset_VoltageInstrumentTransformer.PrimaryVoltage\tNUMBER\t\t740\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t8ff0f0be-6800-4f6f-865d-b04200b0214f\tPset_VoltageInstrumentTransformer.RatedVoltage\tMULTILINETEXT\t\t740\t1\tPropertyBoundedValue\t1\nPARAM\t90285b34-bd15-435a-8726-4cadbde94211\tPset_VoltageInstrumentTransformer.SecondaryFrequency\tNUMBER\t\t740\t1\tIfcFrequencyMeasure\t1\nPARAM\t91ef539a-cc64-44db-98ef-1a3c646cbf9a\tPset_VoltageInstrumentTransformer.SecondaryVoltage\tNUMBER\t\t740\t1\tIfcElectricVoltageMeasure\t1\n#\nGROUP\t741\tPset_WallCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc17a7600-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.AcousticRating\tTEXT\t\t741\t1\tIfcLabel\t1\nPARAM\tcfc89200-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.Combustible\tYESNO\t\t741\t1\tIfcBoolean\t1\nPARAM\tf981b900-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.Compartmentation\tYESNO\t\t741\t1\tIfcBoolean\t1\nPARAM\tea027000-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.ExtendToStructure\tYESNO\t\t741\t1\tIfcBoolean\t1\nPARAM\tc93a1a80-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.FireRating\tTEXT\t\t741\t1\tIfcLabel\t1\nPARAM\te2db6200-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.IsExternal\tYESNO\t\t741\t1\tIfcBoolean\t1\nPARAM\tf1c21480-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.LoadBearing\tYESNO\t\t741\t1\tIfcBoolean\t1\nPARAM\taa3b8880-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.Reference\tTEXT\t\t741\t1\tIfcIdentifier\t1\nPARAM\tb0ca0000-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.Status\tTEXT\t\t741\t1\tPEnum_ElementStatus\t1\nPARAM\td6570980-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.SurfaceSpreadOfFlame\tTEXT\t\t741\t1\tIfcLabel\t1\nPARAM\tde16ae00-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.ThermalTransmittance\tNUMBER\t\t741\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t742\tPset_Warranty\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t30f06580-d216-11e1-8000-00215ad4efdf\tPset_Warranty.Exclusions\tTEXT\t\t742\t1\tIfcText\t1\nPARAM\t19b17800-d216-11e1-8000-00215ad4efdf\tPset_Warranty.IsExtendedWarranty\tYESNO\t\t742\t1\tIfcBoolean\t1\nPARAM\t2635d080-d216-11e1-8000-00215ad4efdf\tPset_Warranty.PointOfContact\tTEXT\t\t742\t1\tIfcLabel\t1\nPARAM\t2a61ee00-d216-11e1-8000-00215ad4efdf\tPset_Warranty.WarrantyContent\tTEXT\t\t742\t1\tIfcText\t1\nPARAM\t14542d80-d216-11e1-8000-00215ad4efdf\tPset_Warranty.WarrantyEndDate\tTEXT\t\t742\t1\tIfcDate\t1\nPARAM\t08686b80-d216-11e1-8000-00215ad4efdf\tPset_Warranty.WarrantyIdentifier\tTEXT\t\t742\t1\tIfcIdentifier\t1\nPARAM\t20d88600-d216-11e1-8000-00215ad4efdf\tPset_Warranty.WarrantyPeriod\tTEXT\t\t742\t1\tIfcDuration\t1\nPARAM\t0ef6e300-d216-11e1-8000-00215ad4efdf\tPset_Warranty.WarrantyStartDate\tTEXT\t\t742\t1\tIfcDate\t1\n#\nGROUP\t743\tPset_WasteTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3c439100-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeCommon.Reference\tTEXT\t\t743\t1\tIfcIdentifier\t1\nPARAM\t42d20880-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeCommon.Status\tTEXT\t\t743\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t744\tPset_WasteTerminalTypeFloorTrap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tede7f163-e16b-4977-900c-551643a33355\tPset_WasteTerminalTypeFloorTrap.BodyMaterial\tMULTILINETEXT\t\t744\t1\tIfcMaterial\t1\nPARAM\tcdb30300-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.CoverLength\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdf94a600-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.CoverMaterial\tMULTILINETEXT\t\t744\t1\tIfcMaterialDefinition\t1\nPARAM\td6a3d480-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.CoverWidth\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t95132980-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.HasStrainer\tYESNO\t\t744\t1\tIfcBoolean\t1\nPARAM\tc4299b00-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.InletConnectionSize\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta65c3600-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.InletPatternType\tTEXT\t\t744\t1\tPEnum_InletPatternType\t1\nPARAM\t757c0100-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.IsForSullageWater\tYESNO\t\t744\t1\tIfcBoolean\t1\nPARAM\t6bf29900-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.NominalBodyDepth\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5aa98c80-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.NominalBodyLength\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t639a5e00-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.NominalBodyWidth\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9c3a3780-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.OutletConnectionSize\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7ca30f00-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.SpilloverLevel\tLENGTH\t\t744\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8593e080-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.TrapType\tTEXT\t\t744\t1\tPEnum_TrapType\t1\n#\nGROUP\t745\tPset_WasteTerminalTypeFloorWaste\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc22a63a2-efb4-463b-a77b-4a3a4c74aac6\tPset_WasteTerminalTypeFloorWaste.BodyMaterial\tMULTILINETEXT\t\t745\t1\tIfcMaterial\t1\nPARAM\t0d79ea80-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorWaste.CoverLength\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfcfb5e45-647e-4cb4-9409-210a27aec5de\tPset_WasteTerminalTypeFloorWaste.CoverMaterial\tMULTILINETEXT\t\t745\t1\tIfcMaterial\t1\nPARAM\t17035280-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorWaste.CoverWidth\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfaffb100-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorWaste.NominalBodyDepth\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te8857780-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorWaste.NominalBodyLength\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf20edf80-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorWaste.NominalBodyWidth\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t03f08280-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorWaste.OutletConnectionSize\tLENGTH\t\t745\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t746\tPset_WasteTerminalTypeGreaseInterceptor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t76b4afb1-148e-4476-bbb4-f8e11f7ef0f5\tPset_WasteTerminalTypeGreaseInterceptor.BodyDepth\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7b1a9d46-a64a-45c5-bcbd-42807c520f33\tPset_WasteTerminalTypeGreaseInterceptor.CoverLength\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb7c8cf85-6b18-49bd-8c6c-80e381ec4355\tPset_WasteTerminalTypeGreaseInterceptor.CoverMaterial\tMULTILINETEXT\t\t746\t1\tIfcMaterial\t1\nPARAM\t8a84a27c-bc75-4c9f-885a-ff7b4f41cbaa\tPset_WasteTerminalTypeGreaseInterceptor.CoverWidth\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te7409eaf-2afc-4ab0-84bf-10be5302400b\tPset_WasteTerminalTypeGreaseInterceptor.InletConnectionSize\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb6efa515-b6af-4218-aa4c-d1613fddb22b\tPset_WasteTerminalTypeGreaseInterceptor.NominalBodyLength\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9ab773bd-b761-42ea-b04a-89f2127ed7a1\tPset_WasteTerminalTypeGreaseInterceptor.NominalBodyMaterial\tMULTILINETEXT\t\t746\t1\tIfcMaterial\t1\nPARAM\t95efa82a-bce4-4684-90e2-feb91b0dcfeb\tPset_WasteTerminalTypeGreaseInterceptor.NominalBodyWidth\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2f5edcaf-5608-448e-8ce0-1f7d41981565\tPset_WasteTerminalTypeGreaseInterceptor.OutletConnectionSize\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t64f2e978-e5ea-417a-b095-2235e5931cb1\tPset_WasteTerminalTypeGreaseInterceptor.StrainerDepth\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8315cec5-18e5-488d-80a5-aba30f30aeab\tPset_WasteTerminalTypeGreaseInterceptor.StrainerDiameter\tLENGTH\t\t746\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7117dc07-f6a9-438c-b6e8-2c4fa750e080\tPset_WasteTerminalTypeGreaseInterceptor.StrainerMaterial\tMULTILINETEXT\t\t746\t1\tIfcMaterial\t1\n#\nGROUP\t747\tPset_WasteTerminalTypeGullySump\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t69dd0a00-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.BackInletPatternType\tTEXT\t\t747\t1\tPEnum_BackInletPatternType\t1\nPARAM\t909b4080-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.CoverLength\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t122d418d-3358-4809-b0b5-bf2ed04fb613\tPset_WasteTerminalTypeGullySump.CoverMaterial\tMULTILINETEXT\t\t747\t1\tIfcMaterial\t1\nPARAM\t9abd3f00-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.CoverWidth\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t431ed380-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.GullyType\tTEXT\t\t747\t1\tPEnum_GullyType\t1\nPARAM\t87aa6f00-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.InletConnectionSize\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t38643e80-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.NominalSumpDepth\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t26829b80-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.NominalSumpLength\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t300c0380-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.NominalSumpWidth\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6053a200-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.OutletConnectionSize\tLENGTH\t\t747\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t64c82df5-20d3-47ee-bd23-0ab6179a9662\tPset_WasteTerminalTypeGullySump.SumpMaterial\tMULTILINETEXT\t\t747\t1\tIfcMaterial\t1\nPARAM\t503bc280-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.TrapType\tTEXT\t\t747\t1\tPEnum_TrapType\t1\n#\nGROUP\t748\tPset_WasteTerminalTypeGullyTrap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf4be0480-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.BackInletPatternType\tTEXT\t\t748\t1\tPEnum_BackInletPatternType\t1\nPARAM\t73a0474f-e0cf-4933-80b6-eb803941d633\tPset_WasteTerminalTypeGullyTrap.BodyMaterial\tMULTILINETEXT\t\t748\t1\tIfcMaterial\t1\nPARAM\t1919e100-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.CoverLength\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t463e224f-3693-401c-97ed-a237372c77c1\tPset_WasteTerminalTypeGullyTrap.CoverMaterial\tMULTILINETEXT\t\t748\t1\tIfcMaterial\t1\nPARAM\t21721c00-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.CoverWidth\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc809ed00-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.GullyType\tTEXT\t\t748\t1\tPEnum_GullyType\t1\nPARAM\td5bf7280-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.HasStrainer\tYESNO\t\t748\t1\tIfcBoolean\t1\nPARAM\t10290f80-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.InletConnectionSize\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbe808500-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.NominalBodyDepth\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taad51e80-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.NominalBodyLength\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb45e8680-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.NominalBodyWidth\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tec65c980-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.OutletConnectionSize\tLENGTH\t\t748\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdd7f1700-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.TrapType\tTEXT\t\t748\t1\tPEnum_TrapType\t1\n#\nGROUP\t749\tPset_WasteTerminalTypeOilInterceptor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t27c906d4-69ba-4fd7-8839-7f753e1da5b1\tPset_WasteTerminalTypeOilInterceptor.BodyMaterial\tMULTILINETEXT\t\t749\t1\tIfcMaterial\t1\nPARAM\tf23c76fd-2c8e-42be-9daf-dd7752c484b2\tPset_WasteTerminalTypeOilInterceptor.CoverLength\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta0a75ee6-80dc-4f27-ba7b-d8a2104f7705\tPset_WasteTerminalTypeOilInterceptor.CoverMaterial\tMULTILINETEXT\t\t749\t1\tIfcMaterial\t1\nPARAM\t0896c2fc-e917-4dc1-977d-9c3ba4054a72\tPset_WasteTerminalTypeOilInterceptor.CoverWidth\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t38d7cbd5-4463-4361-8310-599f1325325f\tPset_WasteTerminalTypeOilInterceptor.InletConnectionSize\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t63888a3c-4850-4c8c-8124-f77ba780a389\tPset_WasteTerminalTypeOilInterceptor.NominalBodyDepth\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t96cccd1b-f1c8-45c8-b7a8-665bcf4e43af\tPset_WasteTerminalTypeOilInterceptor.NominalBodyLength\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t46d98c2c-0075-4933-beee-5f0e3a3983a7\tPset_WasteTerminalTypeOilInterceptor.NominalBodyWidth\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t831aaf70-c5ba-4835-9d63-d804d1164582\tPset_WasteTerminalTypeOilInterceptor.OutletConnectionSize\tLENGTH\t\t749\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t750\tPset_WasteTerminalTypePetrolInterceptor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tea01f55d-15ff-4838-b5c5-4fd7d578d75d\tPset_WasteTerminalTypePetrolInterceptor.BodyMaterial\tMULTILINETEXT\t\t750\t1\tIfcMaterial\t1\nPARAM\t2396a8b9-1cc9-4656-88ae-bffa46aa620f\tPset_WasteTerminalTypePetrolInterceptor.CoverLength\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t76ec1c35-f23e-427b-a8c3-cea9916ad20e\tPset_WasteTerminalTypePetrolInterceptor.CoverMaterial\tMULTILINETEXT\t\t750\t1\tIfcMaterial\t1\nPARAM\t7b91d7f1-b31c-49b7-a8b6-e11e65e16969\tPset_WasteTerminalTypePetrolInterceptor.CoverWidth\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t79dceadb-6e67-46ef-b0dc-81ec17fc6fca\tPset_WasteTerminalTypePetrolInterceptor.InletConnectionSize\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t583922cc-179e-40d4-8ea3-59f4653f0833\tPset_WasteTerminalTypePetrolInterceptor.NominalBodyDepth\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taa23ce95-2dd2-4fc0-9aea-f8682955d827\tPset_WasteTerminalTypePetrolInterceptor.NominalBodyLength\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t845a959f-077e-43fe-9950-e277a6989b75\tPset_WasteTerminalTypePetrolInterceptor.NominalBodyWidth\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te76fd15a-20d6-4407-b62a-7e700aa45fc0\tPset_WasteTerminalTypePetrolInterceptor.OutletConnectionSize\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8fb0077f-6516-4853-ae57-bf03a3bde72a\tPset_WasteTerminalTypePetrolInterceptor.VentilatingPipeSize\tLENGTH\t\t750\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t751\tPset_WasteTerminalTypeRoofDrain\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0aeac948-a0f2-46b7-b901-3569a724a609\tPset_WasteTerminalTypeRoofDrain.BodyMaterial\tMULTILINETEXT\t\t751\t1\tIfcMaterial\t1\nPARAM\t4ebeca00-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeRoofDrain.CoverLength\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9a9abe13-5318-4c00-89c8-a6a5e4f4f97d\tPset_WasteTerminalTypeRoofDrain.CoverMaterial\tMULTILINETEXT\t\t751\t1\tIfcMaterial\t1\nPARAM\t57170500-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeRoofDrain.CoverWidth\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3e0e5400-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeRoofDrain.NominalBodyDepth\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2df67480-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeRoofDrain.NominalBodyLength\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t364eaf80-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeRoofDrain.NominalBodyWidth\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t46668f00-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeRoofDrain.OutletConnectionSize\tLENGTH\t\t751\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t752\tPset_WasteTerminalTypeWasteDisposalUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t65fdb780-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeWasteDisposalUnit.DrainConnectionSize\tLENGTH\t\t752\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t76ae2d80-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeWasteDisposalUnit.NominalDepth\tLENGTH\t\t752\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t6e55f280-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeWasteDisposalUnit.OutletConnectionSize\tLENGTH\t\t752\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t753\tPset_WasteTerminalTypeWasteTrap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t980f1980-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeWasteTrap.InletConnectionSize\tLENGTH\t\t753\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t904f7500-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeWasteTrap.OutletConnectionSize\tLENGTH\t\t753\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t83cb1c80-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeWasteTrap.WasteTrapType\tTEXT\t\t753\t1\tPEnum_TrapType\t1\n#\nGROUP\t754\tPset_WaterStratumCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1badc57a-9d9a-4de3-9fe8-d581de687e27\tPset_WaterStratumCommon.AnnualRange\tLENGTH\t\t754\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc4e70463-f23e-4baa-85ed-64e1e6ac2024\tPset_WaterStratumCommon.AnnualTrend\tLENGTH\t\t754\t1\tIfcLengthMeasure\t1\nPARAM\t9cb509fb-568b-4d1e-9492-d4d951a42e15\tPset_WaterStratumCommon.IsFreshwater\tYESNO\t\t754\t1\tIfcLogical\t1\nPARAM\tc0e6cd1e-6928-4f5e-a105-3f947bab506c\tPset_WaterStratumCommon.SeicheRange\tLENGTH\t\t754\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdbc3dee1-b971-4918-9c92-fb0da9e1813e\tPset_WaterStratumCommon.TidalRange\tLENGTH\t\t754\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t598f1b95-7e55-4aca-b9f4-9594ca128ee9\tPset_WaterStratumCommon.WaveRange\tLENGTH\t\t754\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t755\tPset_Width\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3f45747d-8d79-4141-87bc-3ccb68b054d7\tPset_Width.NominalWidth\tLENGTH\t\t755\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t1abc16fd-a5b0-481b-bd01-fdac8104e95f\tPset_Width.Side\tTEXT\t\t755\t1\tPEnum_SideType\t1\nPARAM\t00934150-4771-4357-b2a7-9e79c3b60e5f\tPset_Width.TransitionWidth\tTEXT\t\t755\t1\tPEnum_TransitionWidthType\t1\n#\nGROUP\t756\tPset_WindowCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb9700580-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.AcousticRating\tTEXT\t\t756\t1\tIfcLabel\t1\nPARAM\t005dfb00-d219-11e1-8000-00215ad4efdf\tPset_WindowCommon.FireExit\tYESNO\t\t756\t1\tIfcBoolean\t1\nPARAM\tbffe7d00-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.FireRating\tTEXT\t\t756\t1\tIfcLabel\t1\nPARAM\tdd334b80-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.GlazingAreaFraction\tNUMBER\t\t756\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf2a87580-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.HasDrive\tYESNO\t\t756\t1\tIfcBoolean\t1\nPARAM\te3c1c300-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.HasSillExternal\tYESNO\t\t756\t1\tIfcBoolean\t1\nPARAM\teae8d100-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.HasSillInternal\tYESNO\t\t756\t1\tIfcBoolean\t1\nPARAM\td3114d00-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.Infiltration\tNUMBER\t\t756\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tcd1b6c00-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.IsExternal\tYESNO\t\t756\t1\tIfcBoolean\t1\nPARAM\t7db55f92-39da-4d10-830c-d420f3a1988c\tPset_WindowCommon.MechanicalLoadRating\tTEXT\t\t756\t1\tIfcLabel\t1\nPARAM\ta6f5cc00-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.Reference\tTEXT\t\t756\t1\tIfcIdentifier\t1\nPARAM\tc68cf480-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.SecurityRating\tTEXT\t\t756\t1\tIfcLabel\t1\nPARAM\tf9cf8380-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.SmokeStop\tYESNO\t\t756\t1\tIfcBoolean\t1\nPARAM\tacebad00-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.Status\tTEXT\t\t756\t1\tPEnum_ElementStatus\t1\nPARAM\td86e9780-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.ThermalTransmittance\tNUMBER\t\t756\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\te92533f3-a7e4-4161-96ad-923faee29e96\tPset_WindowCommon.WaterTightnessRating\tTEXT\t\t756\t1\tIfcLabel\t1\nPARAM\t664882a1-5b8a-4200-87f6-f80670cbe20b\tPset_WindowCommon.WindLoadRating\tTEXT\t\t756\t1\tIfcLabel\t1\n#\nGROUP\t757\tPset_WiredCommunicationPortCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te54e3455-4c94-4613-9eb0-e3d0c28bba32\tPset_WiredCommunicationPortCommon.CommunicationStandard\tTEXT\t\t757\t1\tPEnum_CommunicationStandard\t1\nPARAM\t3fb74ba4-9454-4a78-9265-07e56a1b8d1a\tPset_WiredCommunicationPortCommon.MaximumTransferRate\tINTEGER\t\t757\t1\tIfcIntegerCountRateMeasure\t1\n#\nGROUP\t758\tPset_WorkControlCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1cfa3300-d219-11e1-8000-00215ad4efdf\tPset_WorkControlCommon.WorkDayDuration\tTEXT\t\t758\t1\tIfcDuration\t1\nPARAM\t179ce880-d219-11e1-8000-00215ad4efdf\tPset_WorkControlCommon.WorkFinishTime\tTEXT\t\t758\t1\tIfcTime\t1\nPARAM\t27b4c800-d219-11e1-8000-00215ad4efdf\tPset_WorkControlCommon.WorkMonthDuration\tTEXT\t\t758\t1\tIfcDuration\t1\nPARAM\t12d83480-d219-11e1-8000-00215ad4efdf\tPset_WorkControlCommon.WorkStartTime\tTEXT\t\t758\t1\tIfcTime\t1\nPARAM\t22f01400-d219-11e1-8000-00215ad4efdf\tPset_WorkControlCommon.WorkWeekDuration\tTEXT\t\t758\t1\tIfcDuration\t1\n#\nGROUP\t759\tPset_ZoneCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfae5baa6-c7cc-4e06-80cd-2df6ee99eece\tPset_ZoneCommon.Category\tTEXT\t\t759\t1\tIfcLabel\t1\nPARAM\t6aaa8536-a77f-48f3-9c4c-98539c4e1c4a\tPset_ZoneCommon.GrossAreaPlanned\tAREA\t\t759\t1\tIfcAreaMeasure\t1\nPARAM\tf612feec-72a2-4a43-9621-a0c271d08886\tPset_ZoneCommon.GrossPlannedArea\tAREA\t\t759\t1\tIfcAreaMeasure\t1\nPARAM\t6704bcc6-c483-45c3-9d90-e4e5dbb87748\tPset_ZoneCommon.HandicapAccessible\tYESNO\t\t759\t1\tIfcBoolean\t1\nPARAM\tcd616a7a-8e64-4bde-8454-989699ddf1b8\tPset_ZoneCommon.IsExternal\tYESNO\t\t759\t1\tIfcBoolean\t1\nPARAM\td8701e2b-c4f9-49f0-9634-fad47597bcf1\tPset_ZoneCommon.MechanicalVentilationRate\tINTEGER\t\t759\t1\tIfcCountMeasure\t1\nPARAM\t142017c5-7df7-4608-815a-fc8a4223c387\tPset_ZoneCommon.NaturalVentilation\tYESNO\t\t759\t1\tIfcBoolean\t1\nPARAM\t504732de-8cf2-4ede-b741-cf3e592a3fc7\tPset_ZoneCommon.NaturalVentilationRate\tINTEGER\t\t759\t1\tIfcCountMeasure\t1\nPARAM\td21e9362-b349-421f-b143-d8f3c62f4d93\tPset_ZoneCommon.NetAreaPlanned\tAREA\t\t759\t1\tIfcAreaMeasure\t1\nPARAM\t4655738f-d56e-4f09-ae04-0d3e3a45cbaa\tPset_ZoneCommon.NetPlannedArea\tAREA\t\t759\t1\tIfcAreaMeasure\t1\nPARAM\t3298a9ed-7148-41c6-b0fc-9cb39473ab76\tPset_ZoneCommon.OccupancyNumber\tINTEGER\t\t759\t1\tIfcCountMeasure\t1\nPARAM\tca75dfbe-dc19-406d-9d40-1d768decb871\tPset_ZoneCommon.OccupancyType\tTEXT\t\t759\t1\tIfcLabel\t1\nPARAM\ta9c1d119-d845-488b-8aaa-68625296c6d4\tPset_ZoneCommon.PubliclyAccessible\tYESNO\t\t759\t1\tIfcBoolean\t1\nPARAM\t113a9e35-1465-4468-8305-8e69d5276b24\tPset_ZoneCommon.Reference\tTEXT\t\t759\t1\tIfcIdentifier\t1\n#\nGROUP\t760\tQto_ActuatorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t19782cc3-7869-4310-8917-c89d6fd0e8a3\tQto_ActuatorBaseQuantities.GrossWeight\tNUMBER\t\t760\t1\tIfcMassMeasure\t1\n#\nGROUP\t761\tQto_AirTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta0949257-6887-4ac8-86c5-9846c9d2e04a\tQto_AirTerminalBaseQuantities.GrossWeight\tNUMBER\t\t761\t1\tIfcMassMeasure\t1\nPARAM\t77be93f6-0954-405e-a38e-d2700a4e4da9\tQto_AirTerminalBaseQuantities.Perimeter\tLENGTH\t\t761\t1\tIfcLengthMeasure\t1\nPARAM\t27bc57ac-3bc1-42de-a946-2b6f9358e4d9\tQto_AirTerminalBaseQuantities.TotalSurfaceArea\tAREA\t\t761\t1\tIfcAreaMeasure\t1\n#\nGROUP\t762\tQto_AirTerminalBoxTypeBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5f637be7-4113-49cf-a813-c989bd0ad192\tQto_AirTerminalBoxTypeBaseQuantities.GrossWeight\tNUMBER\t\t762\t1\tIfcMassMeasure\t1\n#\nGROUP\t763\tQto_AirToAirHeatRecoveryBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcf9ca32a-82e1-4d38-9b62-889f3231aa8a\tQto_AirToAirHeatRecoveryBaseQuantities.GrossWeight\tNUMBER\t\t763\t1\tIfcMassMeasure\t1\n#\nGROUP\t764\tQto_AlarmBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb8a11d44-70fd-46f9-9ea8-df0f01c13f88\tQto_AlarmBaseQuantities.GrossWeight\tNUMBER\t\t764\t1\tIfcMassMeasure\t1\n#\nGROUP\t765\tQto_ArealStratumBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t334e6983-82b9-4621-b742-b7cc6539d127\tQto_ArealStratumBaseQuantities.Area\tAREA\t\t765\t1\tIfcAreaMeasure\t1\nPARAM\t3874204a-c890-4b25-baec-7cc9e24e3333\tQto_ArealStratumBaseQuantities.Length\tLENGTH\t\t765\t1\tIfcLengthMeasure\t1\nPARAM\te1ed6207-ec00-472e-8be6-37659c26341a\tQto_ArealStratumBaseQuantities.PlanLength\tLENGTH\t\t765\t1\tIfcLengthMeasure\t1\n#\nGROUP\t766\tQto_AudioVisualApplianceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbfb41ca2-0f12-46bc-8087-f90e1d086246\tQto_AudioVisualApplianceBaseQuantities.GrossWeight\tNUMBER\t\t766\t1\tIfcMassMeasure\t1\n#\nGROUP\t767\tQto_BeamBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a0e9237-e3ed-4037-a2cb-b194b64d0b50\tQto_BeamBaseQuantities.CrossSectionArea\tAREA\t\t767\t1\tIfcAreaMeasure\t1\nPARAM\tb458221e-bac2-48ae-99aa-59fbe347ed25\tQto_BeamBaseQuantities.GrossSurfaceArea\tAREA\t\t767\t1\tIfcAreaMeasure\t1\nPARAM\t65719fa3-ed69-436e-91cc-90f804ba2910\tQto_BeamBaseQuantities.GrossVolume\tVOLUME\t\t767\t1\tIfcVolumeMeasure\t1\nPARAM\t03bdaa78-1cd4-467d-9a55-cb24da923f25\tQto_BeamBaseQuantities.GrossWeight\tNUMBER\t\t767\t1\tIfcMassMeasure\t1\nPARAM\tfa40f222-0b79-4729-873c-f4171396d5b9\tQto_BeamBaseQuantities.Height\tLENGTH\t\t767\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t079deba9-d739-42b7-8314-a132db837c39\tQto_BeamBaseQuantities.Length\tLENGTH\t\t767\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t315e738d-11cb-4568-86b2-6987ee3f30b3\tQto_BeamBaseQuantities.NetSurfaceArea\tAREA\t\t767\t1\tIfcAreaMeasure\t1\nPARAM\t91bfdfef-1411-475d-975c-210645cfefcc\tQto_BeamBaseQuantities.NetVolume\tVOLUME\t\t767\t1\tIfcVolumeMeasure\t1\nPARAM\t2fa8a952-3bf5-4110-9fe7-9ba8ff176e34\tQto_BeamBaseQuantities.NetWeight\tNUMBER\t\t767\t1\tIfcMassMeasure\t1\nPARAM\tbeb3ac26-30c4-43bb-9d01-a073419573a8\tQto_BeamBaseQuantities.OuterSurfaceArea\tAREA\t\t767\t1\tIfcAreaMeasure\t1\nPARAM\t0b66c992-006a-4ae6-b6e6-ea7e03f889cd\tQto_BeamBaseQuantities.Width\tLENGTH\t\t767\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t768\tQto_BodyGeometryValidation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0b44be9a-7352-4e70-a35b-68fef844e245\tQto_BodyGeometryValidation.GrossSurfaceArea\tAREA\t\t768\t1\tIfcAreaMeasure\t1\nPARAM\t8b812e9a-20b4-4b9e-8cf9-24d04a58560c\tQto_BodyGeometryValidation.GrossVolume\tVOLUME\t\t768\t1\tIfcVolumeMeasure\t1\nPARAM\t63a75606-1e1c-49b5-8dd9-ea830ff2d4b9\tQto_BodyGeometryValidation.NetSurfaceArea\tAREA\t\t768\t1\tIfcAreaMeasure\t1\nPARAM\t9b319920-42dd-4285-a545-ed8ac838bf33\tQto_BodyGeometryValidation.NetVolume\tVOLUME\t\t768\t1\tIfcVolumeMeasure\t1\nPARAM\t36832b1a-531d-482f-bc5a-8077dc63e9b2\tQto_BodyGeometryValidation.SurfaceGenusAfterFeatures\tINTEGER\t\t768\t1\tIfcCountMeasure\t1\nPARAM\t802ada3a-4189-4e97-91cc-41f816da2dc3\tQto_BodyGeometryValidation.SurfaceGenusBeforeFeatures\tINTEGER\t\t768\t1\tIfcCountMeasure\t1\n#\nGROUP\t769\tQto_BoilerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2f4a0337-47d6-4050-b9e6-ed4e21821de2\tQto_BoilerBaseQuantities.GrossWeight\tNUMBER\t\t769\t1\tIfcMassMeasure\t1\nPARAM\t1e577026-fb66-4bb2-85e4-f0b49616e471\tQto_BoilerBaseQuantities.NetWeight\tNUMBER\t\t769\t1\tIfcMassMeasure\t1\nPARAM\t1689a8db-a287-49e6-975d-b04c87dcb50b\tQto_BoilerBaseQuantities.TotalSurfaceArea\tAREA\t\t769\t1\tIfcAreaMeasure\t1\n#\nGROUP\t770\tQto_BuildingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t73309cba-0cee-4889-8f55-bce18ec8e681\tQto_BuildingBaseQuantities.EavesHeight\tLENGTH\t\t770\t1\tIfcLengthMeasure\t1\nPARAM\tf0fb54dc-e0e9-4b36-9683-fee9c79923bd\tQto_BuildingBaseQuantities.FootprintArea\tAREA\t\t770\t1\tIfcAreaMeasure\t1\nPARAM\tb979db98-f353-4ba4-931d-f8345a1985e0\tQto_BuildingBaseQuantities.FootPrintArea\tAREA\t\t770\t1\tIfcAreaMeasure\t1\nPARAM\ta7a2d4e0-4c7c-4283-b646-ef59619364a5\tQto_BuildingBaseQuantities.GrossFloorArea\tAREA\t\t770\t1\tIfcAreaMeasure\t1\nPARAM\tba023fd4-1f9f-453e-8542-bb45c3df971c\tQto_BuildingBaseQuantities.GrossVolume\tVOLUME\t\t770\t1\tIfcVolumeMeasure\t1\nPARAM\tfe755362-5d6c-49d4-bcde-118dcadef8e9\tQto_BuildingBaseQuantities.Height\tLENGTH\t\t770\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf506186b-da7e-4ae9-afbd-d060cfa33243\tQto_BuildingBaseQuantities.NetFloorArea\tAREA\t\t770\t1\tIfcAreaMeasure\t1\nPARAM\t87adba3c-673d-472e-b079-8e4c5caa1436\tQto_BuildingBaseQuantities.NetVolume\tVOLUME\t\t770\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t771\tQto_BuildingElementProxyQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t71acb583-df81-4514-a1d4-20d4644654d9\tQto_BuildingElementProxyQuantities.NetSurfaceArea\tAREA\t\t771\t1\tIfcAreaMeasure\t1\nPARAM\tc4b592a7-d56c-4a4d-96aa-0ead3ae7205d\tQto_BuildingElementProxyQuantities.NetVolume\tVOLUME\t\t771\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t772\tQto_BuildingStoreyBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t95fa32fb-a157-409f-b3f7-e67bd556fefe\tQto_BuildingStoreyBaseQuantities.GrossFloorArea\tAREA\t\t772\t1\tIfcAreaMeasure\t1\nPARAM\tddbe40c7-7e47-4c93-983a-5bf4de588d7f\tQto_BuildingStoreyBaseQuantities.GrossHeight\tLENGTH\t\t772\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3da89eb1-a6ac-462c-9c55-b85bb8fe038b\tQto_BuildingStoreyBaseQuantities.GrossPerimeter\tLENGTH\t\t772\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5a817af0-1cf4-4fde-bc72-9f4feaa0c857\tQto_BuildingStoreyBaseQuantities.GrossVolume\tVOLUME\t\t772\t1\tIfcVolumeMeasure\t1\nPARAM\td21157d3-0800-4a66-9570-3a6a3e576be6\tQto_BuildingStoreyBaseQuantities.NetFloorArea\tAREA\t\t772\t1\tIfcAreaMeasure\t1\nPARAM\t8fde143e-88d0-48d6-9ae1-98c4d98753cf\tQto_BuildingStoreyBaseQuantities.NetHeight\tLENGTH\t\t772\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t82bb663e-b7a9-4916-9f8e-1382796f5c8d\tQto_BuildingStoreyBaseQuantities.NetHeigtht\tLENGTH\t\t772\t1\tIfcLengthMeasure\t1\nPARAM\t216c55f6-fad7-42d1-8ef6-d13bb653d864\tQto_BuildingStoreyBaseQuantities.NetVolume\tVOLUME\t\t772\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t773\tQto_BurnerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teaf2edb1-14da-4726-a9ca-34a16ff4e3db\tQto_BurnerBaseQuantities.GrossWeight\tNUMBER\t\t773\t1\tIfcMassMeasure\t1\n#\nGROUP\t774\tQto_CableCarrierFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2b033fcb-530e-4219-b153-53d509d6837a\tQto_CableCarrierFittingBaseQuantities.GrossWeight\tNUMBER\t\t774\t1\tIfcMassMeasure\t1\n#\nGROUP\t775\tQto_CableCarrierSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t15b60181-80a3-4a11-9950-3f5285273eee\tQto_CableCarrierSegmentBaseQuantities.CrossSectionArea\tAREA\t\t775\t1\tIfcAreaMeasure\t1\nPARAM\td37832cb-0951-4699-a61d-dd79c3faa148\tQto_CableCarrierSegmentBaseQuantities.GrossWeight\tNUMBER\t\t775\t1\tIfcMassMeasure\t1\nPARAM\tb054a366-1429-413b-bc28-9da517db09ce\tQto_CableCarrierSegmentBaseQuantities.Length\tLENGTH\t\t775\t1\tIfcLengthMeasure\t1\nPARAM\t9837fc53-21bb-4351-8a11-27b55c613a2f\tQto_CableCarrierSegmentBaseQuantities.OuterSurfaceArea\tAREA\t\t775\t1\tIfcAreaMeasure\t1\n#\nGROUP\t776\tQto_CableFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2a32a8b8-6d85-41e8-8263-9d0a0843f2bf\tQto_CableFittingBaseQuantities.GrossWeight\tNUMBER\t\t776\t1\tIfcMassMeasure\t1\n#\nGROUP\t777\tQto_CableSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8e110910-23a2-4342-ac2c-ef9fbfecbcbf\tQto_CableSegmentBaseQuantities.CrossSectionArea\tAREA\t\t777\t1\tIfcAreaMeasure\t1\nPARAM\tb80a4774-dbca-4ba7-9e48-d79c52ebd2e8\tQto_CableSegmentBaseQuantities.GrossWeight\tNUMBER\t\t777\t1\tIfcMassMeasure\t1\nPARAM\tf4c8046f-f56b-4330-8cfa-b03bcd9099e4\tQto_CableSegmentBaseQuantities.Length\tLENGTH\t\t777\t1\tIfcLengthMeasure\t1\nPARAM\t005e18ad-caec-4ee5-af2e-32edf0f931f5\tQto_CableSegmentBaseQuantities.OuterSurfaceArea\tAREA\t\t777\t1\tIfcAreaMeasure\t1\n#\nGROUP\t778\tQto_ChillerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td56869e3-8fab-4470-8a7a-aa2081d44924\tQto_ChillerBaseQuantities.GrossWeight\tNUMBER\t\t778\t1\tIfcMassMeasure\t1\n#\nGROUP\t779\tQto_ChimneyBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teaec6c3e-6b45-4b6c-ab36-f48511910fcd\tQto_ChimneyBaseQuantities.Length\tLENGTH\t\t779\t1\tIfcLengthMeasure\t1\n#\nGROUP\t780\tQto_CoilBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8fe6c26f-f689-4c00-82f2-3203fd495634\tQto_CoilBaseQuantities.GrossWeight\tNUMBER\t\t780\t1\tIfcMassMeasure\t1\n#\nGROUP\t781\tQto_ColumnBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta183a6cc-a940-49a9-95aa-d1dd9118b091\tQto_ColumnBaseQuantities.CrossSectionArea\tAREA\t\t781\t1\tIfcAreaMeasure\t1\nPARAM\tfc9bdad2-9631-41da-ad93-be6bb889228e\tQto_ColumnBaseQuantities.GrossSurfaceArea\tAREA\t\t781\t1\tIfcAreaMeasure\t1\nPARAM\t384ea5f0-233c-4321-a55f-691280a77ce4\tQto_ColumnBaseQuantities.GrossVolume\tVOLUME\t\t781\t1\tIfcVolumeMeasure\t1\nPARAM\t7c165d7a-dcbc-422a-a4e4-8e1288dc78bd\tQto_ColumnBaseQuantities.GrossWeight\tNUMBER\t\t781\t1\tIfcMassMeasure\t1\nPARAM\t56ae95ff-c7a1-4cc7-9e87-d2e8fb9e3914\tQto_ColumnBaseQuantities.Height\tLENGTH\t\t781\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta0fcc17c-8c38-4a56-9903-a6c0db4141bc\tQto_ColumnBaseQuantities.Length\tLENGTH\t\t781\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3af096a8-a032-4ed9-8ffc-7cc82fd958c0\tQto_ColumnBaseQuantities.NetSurfaceArea\tAREA\t\t781\t1\tIfcAreaMeasure\t1\nPARAM\t67285270-6a53-4a5e-a442-bbd8e441a1ab\tQto_ColumnBaseQuantities.NetVolume\tVOLUME\t\t781\t1\tIfcVolumeMeasure\t1\nPARAM\t0250bf87-7b65-4587-9d4d-feff4f6ad818\tQto_ColumnBaseQuantities.NetWeight\tNUMBER\t\t781\t1\tIfcMassMeasure\t1\nPARAM\t4d5f7a2d-dce5-4db1-9022-92607bfca471\tQto_ColumnBaseQuantities.OuterSurfaceArea\tAREA\t\t781\t1\tIfcAreaMeasure\t1\nPARAM\t1962905a-f957-4594-9eae-6ae936c609c2\tQto_ColumnBaseQuantities.Width\tLENGTH\t\t781\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t782\tQto_CommunicationsApplianceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td38bb55d-0db3-4084-b61d-2b96bfb3be6d\tQto_CommunicationsApplianceBaseQuantities.GrossWeight\tNUMBER\t\t782\t1\tIfcMassMeasure\t1\n#\nGROUP\t783\tQto_CompressorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4838e484-cbca-46eb-803b-07f211378c6e\tQto_CompressorBaseQuantities.GrossWeight\tNUMBER\t\t783\t1\tIfcMassMeasure\t1\n#\nGROUP\t784\tQto_CondenserBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8194261a-d122-44c6-974f-5b2b752d6650\tQto_CondenserBaseQuantities.GrossWeight\tNUMBER\t\t784\t1\tIfcMassMeasure\t1\n#\nGROUP\t785\tQto_ConduitSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf50d57fd-2571-4900-8b64-1f0568345a59\tQto_ConduitSegmentBaseQuantities.InnerDiameter\tLENGTH\t\t785\t1\tIfcLengthMeasure\t1\nPARAM\t0f73039a-085b-4fc3-8ab1-fcd4dd7d91ad\tQto_ConduitSegmentBaseQuantities.OuterDiameter\tLENGTH\t\t785\t1\tIfcLengthMeasure\t1\n#\nGROUP\t786\tQto_ConstructionEquipmentResourceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcab67b3c-ec99-4207-a66d-d79cb6b688dd\tQto_ConstructionEquipmentResourceBaseQuantities.OperatingTime\tNUMBER\t\t786\t1\tIfcTimeMeasure\t1\nPARAM\te4af67d3-9284-4a09-9642-e44a9162bc13\tQto_ConstructionEquipmentResourceBaseQuantities.UsageTime\tNUMBER\t\t786\t1\tIfcTimeMeasure\t1\n#\nGROUP\t787\tQto_ConstructionMaterialResourceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcf92e9e5-9de5-47a0-b6b7-5a502dfb0544\tQto_ConstructionMaterialResourceBaseQuantities.GrossVolume\tVOLUME\t\t787\t1\tIfcVolumeMeasure\t1\nPARAM\t476a9b16-9ea4-4d8d-ae7f-23280f8469be\tQto_ConstructionMaterialResourceBaseQuantities.GrossWeight\tNUMBER\t\t787\t1\tIfcMassMeasure\t1\nPARAM\t03f25042-881d-4327-ad02-1c707b0af505\tQto_ConstructionMaterialResourceBaseQuantities.NetVolume\tVOLUME\t\t787\t1\tIfcVolumeMeasure\t1\nPARAM\t02b7c7c4-b347-4a3a-a241-93a27e3e2c86\tQto_ConstructionMaterialResourceBaseQuantities.NetWeight\tNUMBER\t\t787\t1\tIfcMassMeasure\t1\n#\nGROUP\t788\tQto_ControllerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4d49823b-659e-4674-8d5e-c99a22fae38f\tQto_ControllerBaseQuantities.GrossWeight\tNUMBER\t\t788\t1\tIfcMassMeasure\t1\n#\nGROUP\t789\tQto_CooledBeamBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t474a2b5f-d3c0-43d0-859a-5598b3e6388f\tQto_CooledBeamBaseQuantities.GrossWeight\tNUMBER\t\t789\t1\tIfcMassMeasure\t1\n#\nGROUP\t790\tQto_CoolingTowerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0fab17c9-085a-4b26-bea9-e8c6670651d0\tQto_CoolingTowerBaseQuantities.GrossWeight\tNUMBER\t\t790\t1\tIfcMassMeasure\t1\n#\nGROUP\t791\tQto_CourseBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7353a6dd-ea34-4c59-9084-696e0017dc6c\tQto_CourseBaseQuantities.GrossVolume\tVOLUME\t\t791\t1\tIfcVolumeMeasure\t1\nPARAM\tba71f8c2-3609-4c37-9e10-893ba4e7c0c2\tQto_CourseBaseQuantities.Length\tLENGTH\t\t791\t1\tIfcLengthMeasure\t1\nPARAM\t09ecf7d7-3f95-4d76-93ac-97d07e65d0bb\tQto_CourseBaseQuantities.Thickness\tLENGTH\t\t791\t1\tIfcLengthMeasure\t1\nPARAM\t0fef9333-f2a1-40f2-9444-d27d75712ed5\tQto_CourseBaseQuantities.Volume\tVOLUME\t\t791\t1\tIfcVolumeMeasure\t1\nPARAM\tdde73094-6218-49ec-bc79-f0464cc2a3d8\tQto_CourseBaseQuantities.Weight\tNUMBER\t\t791\t1\tIfcMassMeasure\t1\nPARAM\t0be5b44b-256a-40a9-83be-91f77c092792\tQto_CourseBaseQuantities.Width\tLENGTH\t\t791\t1\tIfcLengthMeasure\t1\n#\nGROUP\t792\tQto_CoveringBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf2af95ee-26a0-4ba3-8c26-36bbb9d3ae26\tQto_CoveringBaseQuantities.GrossArea\tAREA\t\t792\t1\tIfcAreaMeasure\t1\nPARAM\t7765472e-54e2-4ec6-a881-b69517ec713d\tQto_CoveringBaseQuantities.GrossCeilingArea\tAREA\t\t792\t1\tIfcAreaMeasure\t1\nPARAM\t8fe2d1a8-3ee2-4b74-9722-6d8a649368b4\tQto_CoveringBaseQuantities.NetArea\tAREA\t\t792\t1\tIfcAreaMeasure\t1\nPARAM\ta4f2db20-7c28-4227-b134-b95238155e4d\tQto_CoveringBaseQuantities.Width\tLENGTH\t\t792\t1\tIfcLengthMeasure\t1\n#\nGROUP\t793\tQto_CurtainWallQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tca10d5a3-1350-4b89-b4a8-52b776a40e24\tQto_CurtainWallQuantities.GrossSideArea\tAREA\t\t793\t1\tIfcAreaMeasure\t1\nPARAM\t2ff22e99-a76c-46c1-a3c2-d43ab1b80cac\tQto_CurtainWallQuantities.Height\tLENGTH\t\t793\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6f17f8b7-7f8d-4c47-95b6-ca609711e684\tQto_CurtainWallQuantities.Length\tLENGTH\t\t793\t1\tIfcLengthMeasure\t1\nPARAM\t7e77a6ae-3390-47fb-b816-7c4bf6011971\tQto_CurtainWallQuantities.NetSideArea\tAREA\t\t793\t1\tIfcAreaMeasure\t1\nPARAM\t69aa76f7-5968-4bab-ae1f-b99635e15d42\tQto_CurtainWallQuantities.Width\tLENGTH\t\t793\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t794\tQto_DamperBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2f28baab-a9d0-4ccc-87c5-1c3baaa1acf0\tQto_DamperBaseQuantities.GrossWeight\tNUMBER\t\t794\t1\tIfcMassMeasure\t1\n#\nGROUP\t795\tQto_DistributionBoardBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tafa93514-f51d-4533-a663-016e4016a7ab\tQto_DistributionBoardBaseQuantities.GrossWeight\tNUMBER\t\t795\t1\tIfcMassMeasure\t1\nPARAM\t8e313414-349b-47ad-9fcb-656dc5c9759f\tQto_DistributionBoardBaseQuantities.NumberOfCircuits\tINTEGER\t\t795\t1\tIfcCountMeasure\t1\n#\nGROUP\t796\tQto_DistributionChamberElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tecf509f7-9a2b-431d-ae77-47ea0c781813\tQto_DistributionChamberElementBaseQuantities.Depth\tLENGTH\t\t796\t1\tIfcLengthMeasure\t1\nPARAM\t3a63b7a0-3239-41c1-8ccd-74f316b2befc\tQto_DistributionChamberElementBaseQuantities.GrossSurfaceArea\tAREA\t\t796\t1\tIfcAreaMeasure\t1\nPARAM\te12cf6db-d8fd-4764-9c20-9f6ec2aa1efd\tQto_DistributionChamberElementBaseQuantities.GrossVolume\tVOLUME\t\t796\t1\tIfcVolumeMeasure\t1\nPARAM\ta19f95e1-1329-4648-9c8d-b63247d55644\tQto_DistributionChamberElementBaseQuantities.NetSurfaceArea\tAREA\t\t796\t1\tIfcAreaMeasure\t1\nPARAM\t4aa02212-f677-4d92-8730-b106d6c45af5\tQto_DistributionChamberElementBaseQuantities.NetVolume\tVOLUME\t\t796\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t797\tQto_DoorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t13ee8da9-c23f-46f1-8cee-9424eecb0c49\tQto_DoorBaseQuantities.Area\tAREA\t\t797\t1\tIfcAreaMeasure\t1\nPARAM\t9d52d7de-84d5-4408-8222-1f65265cb7eb\tQto_DoorBaseQuantities.Height\tLENGTH\t\t797\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3434c260-9ca8-4662-870a-72b876038812\tQto_DoorBaseQuantities.Perimeter\tLENGTH\t\t797\t1\tIfcLengthMeasure\t1\nPARAM\tac6bc708-46e3-44a2-bb66-210345ecbd52\tQto_DoorBaseQuantities.Width\tLENGTH\t\t797\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t798\tQto_DuctFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2a9bee22-8fbb-455b-9c26-b87b6fc1298d\tQto_DuctFittingBaseQuantities.GrossCrossSectionArea\tAREA\t\t798\t1\tIfcAreaMeasure\t1\nPARAM\tca6efd50-1a30-4f3c-bc6d-b5061ac24841\tQto_DuctFittingBaseQuantities.GrossWeight\tNUMBER\t\t798\t1\tIfcMassMeasure\t1\nPARAM\t4f572399-4ed0-4fa6-92d1-06fb269ae633\tQto_DuctFittingBaseQuantities.Length\tLENGTH\t\t798\t1\tIfcLengthMeasure\t1\nPARAM\t000c594b-f381-4180-8be3-e51dbb0e7885\tQto_DuctFittingBaseQuantities.NetCrossSectionArea\tAREA\t\t798\t1\tIfcAreaMeasure\t1\nPARAM\t9fe865b5-8107-4430-87ef-4f1ab47cde39\tQto_DuctFittingBaseQuantities.OuterSurfaceArea\tAREA\t\t798\t1\tIfcAreaMeasure\t1\n#\nGROUP\t799\tQto_DuctSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t726eb6c1-e56d-40a8-b473-4de941bc92fa\tQto_DuctSegmentBaseQuantities.GrossCrossSectionArea\tAREA\t\t799\t1\tIfcAreaMeasure\t1\nPARAM\tc8c985fe-8539-4df0-a9be-2a8db549018d\tQto_DuctSegmentBaseQuantities.GrossWeight\tNUMBER\t\t799\t1\tIfcMassMeasure\t1\nPARAM\t5770af40-d0e3-489a-b125-0b39067b2f85\tQto_DuctSegmentBaseQuantities.Length\tLENGTH\t\t799\t1\tIfcLengthMeasure\t1\nPARAM\t8d4aefea-86bd-4761-a388-54413297bdd6\tQto_DuctSegmentBaseQuantities.NetCrossSectionArea\tAREA\t\t799\t1\tIfcAreaMeasure\t1\nPARAM\t6236547b-3571-4abb-a18f-297be512f420\tQto_DuctSegmentBaseQuantities.OuterSurfaceArea\tAREA\t\t799\t1\tIfcAreaMeasure\t1\n#\nGROUP\t800\tQto_DuctSilencerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2e0c3751-e33b-4f5d-bbc1-39bfc708fabb\tQto_DuctSilencerBaseQuantities.GrossWeight\tNUMBER\t\t800\t1\tIfcMassMeasure\t1\n#\nGROUP\t801\tQto_EarthworksCutBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3d83acab-9c31-4828-93da-cb81b79ce4b9\tQto_EarthworksCutBaseQuantities.Depth\tLENGTH\t\t801\t1\tIfcLengthMeasure\t1\nPARAM\td51d2b58-be54-42f4-8191-29d0a818c429\tQto_EarthworksCutBaseQuantities.Length\tLENGTH\t\t801\t1\tIfcLengthMeasure\t1\nPARAM\ta91fa2b8-2a8c-4d22-be85-d4bfc072e836\tQto_EarthworksCutBaseQuantities.LooseVolume\tVOLUME\t\t801\t1\tIfcVolumeMeasure\t1\nPARAM\t7a676f74-f3c9-4623-96d9-fa6d188466ee\tQto_EarthworksCutBaseQuantities.UndisturbedVolume\tVOLUME\t\t801\t1\tIfcVolumeMeasure\t1\nPARAM\td58baa53-7f34-48c0-ad2f-a5a1d5b77f3a\tQto_EarthworksCutBaseQuantities.Weight\tNUMBER\t\t801\t1\tIfcMassMeasure\t1\nPARAM\t02fa95e6-ea5e-4863-9b7b-27f710098c4b\tQto_EarthworksCutBaseQuantities.Width\tLENGTH\t\t801\t1\tIfcLengthMeasure\t1\n#\nGROUP\t802\tQto_EarthworksFillBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3d39838d-2e93-4abd-9e01-8b61a24ab7c4\tQto_EarthworksFillBaseQuantities.CompactedVolume\tVOLUME\t\t802\t1\tIfcVolumeMeasure\t1\nPARAM\t1a66d669-8649-48ab-826c-32df71a3df99\tQto_EarthworksFillBaseQuantities.Depth\tLENGTH\t\t802\t1\tIfcLengthMeasure\t1\nPARAM\te8ecb73d-66d1-46fc-b06d-b89c4fc6daea\tQto_EarthworksFillBaseQuantities.Length\tLENGTH\t\t802\t1\tIfcLengthMeasure\t1\nPARAM\t3b7f62b0-0608-462c-93af-dda903e1fc0f\tQto_EarthworksFillBaseQuantities.LooseVolume\tVOLUME\t\t802\t1\tIfcVolumeMeasure\t1\nPARAM\tb0f13f69-b6b3-48ad-bd74-25a92241448b\tQto_EarthworksFillBaseQuantities.Width\tLENGTH\t\t802\t1\tIfcLengthMeasure\t1\n#\nGROUP\t803\tQto_ElectricApplianceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t124d8173-da9a-45d8-bd3f-0a6279191953\tQto_ElectricApplianceBaseQuantities.GrossWeight\tNUMBER\t\t803\t1\tIfcMassMeasure\t1\n#\nGROUP\t804\tQto_ElectricDistributionBoardBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdb679ce9-4e25-4bb7-bd89-d57945253248\tQto_ElectricDistributionBoardBaseQuantities.GrossWeight\tNUMBER\t\t804\t1\tIfcMassMeasure\t1\nPARAM\t6a5dc809-7cff-4df8-8d53-b3a4fa3d7f2c\tQto_ElectricDistributionBoardBaseQuantities.NumberOfCircuits\tINTEGER\t\t804\t1\tIfcCountMeasure\t1\n#\nGROUP\t805\tQto_ElectricFlowStorageDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc66f87b-0760-45ca-bf46-315dd1e5054d\tQto_ElectricFlowStorageDeviceBaseQuantities.GrossWeight\tNUMBER\t\t805\t1\tIfcMassMeasure\t1\n#\nGROUP\t806\tQto_ElectricGeneratorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5cc16fe6-2ec3-4c83-aa62-290738e2ccdf\tQto_ElectricGeneratorBaseQuantities.GrossWeight\tNUMBER\t\t806\t1\tIfcMassMeasure\t1\n#\nGROUP\t807\tQto_ElectricMotorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teeb4e8d0-6814-46ec-9010-19b44e614c17\tQto_ElectricMotorBaseQuantities.GrossWeight\tNUMBER\t\t807\t1\tIfcMassMeasure\t1\n#\nGROUP\t808\tQto_ElectricTimeControlBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t079bff0f-feb3-4245-8f4c-67f4d3ce1817\tQto_ElectricTimeControlBaseQuantities.GrossWeight\tNUMBER\t\t808\t1\tIfcMassMeasure\t1\n#\nGROUP\t809\tQto_EvaporativeCoolerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf59150b8-7bbf-4db8-ad52-52b9950c1066\tQto_EvaporativeCoolerBaseQuantities.GrossWeight\tNUMBER\t\t809\t1\tIfcMassMeasure\t1\n#\nGROUP\t810\tQto_EvaporatorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t482557d1-6b6f-4e57-823c-2362d4ada351\tQto_EvaporatorBaseQuantities.GrossWeight\tNUMBER\t\t810\t1\tIfcMassMeasure\t1\n#\nGROUP\t811\tQto_FacilityPartBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4777bf03-1c21-4190-80dc-aed62083cf84\tQto_FacilityPartBaseQuantities.Area\tAREA\t\t811\t1\tIfcAreaMeasure\t1\nPARAM\ta2c726d0-3681-45a6-91b5-e37c42036b57\tQto_FacilityPartBaseQuantities.Height\tLENGTH\t\t811\t1\tIfcLengthMeasure\t1\nPARAM\te5e02b21-8e70-475d-91ef-7a2af30f3e28\tQto_FacilityPartBaseQuantities.Length\tLENGTH\t\t811\t1\tIfcLengthMeasure\t1\nPARAM\te746e205-930f-4971-8d1f-3ee4ec59ae30\tQto_FacilityPartBaseQuantities.Volume\tVOLUME\t\t811\t1\tIfcVolumeMeasure\t1\nPARAM\t2150495e-8c6c-4a88-b456-97b6ecc5a25b\tQto_FacilityPartBaseQuantities.Width\tLENGTH\t\t811\t1\tIfcLengthMeasure\t1\n#\nGROUP\t812\tQto_FanBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4649fae0-824b-4961-aa9f-0f9c194d0387\tQto_FanBaseQuantities.GrossWeight\tNUMBER\t\t812\t1\tIfcMassMeasure\t1\n#\nGROUP\t813\tQto_FilterBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te4b220d9-d4b2-41f3-8f37-05ac715e0aee\tQto_FilterBaseQuantities.GrossWeight\tNUMBER\t\t813\t1\tIfcMassMeasure\t1\n#\nGROUP\t814\tQto_FireSuppressionTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t55a5f984-af0f-49bb-b9c9-705f9725e88f\tQto_FireSuppressionTerminalBaseQuantities.GrossWeight\tNUMBER\t\t814\t1\tIfcMassMeasure\t1\n#\nGROUP\t815\tQto_FlowInstrumentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t349c4747-b7ad-428a-a3ad-4c8813b494aa\tQto_FlowInstrumentBaseQuantities.GrossWeight\tNUMBER\t\t815\t1\tIfcMassMeasure\t1\n#\nGROUP\t816\tQto_FlowMeterBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a1ff13b-53b8-4aa3-b6ad-94fcac17c8b1\tQto_FlowMeterBaseQuantities.GrossWeight\tNUMBER\t\t816\t1\tIfcMassMeasure\t1\n#\nGROUP\t817\tQto_FootingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3b2cc6bd-5fb9-44f2-9392-5ba2e56afe9e\tQto_FootingBaseQuantities.CrossSectionArea\tAREA\t\t817\t1\tIfcAreaMeasure\t1\nPARAM\ta78631fa-a773-4f4e-b204-3d20ed0ed889\tQto_FootingBaseQuantities.GrossSurfaceArea\tAREA\t\t817\t1\tIfcAreaMeasure\t1\nPARAM\t7eb42f9e-d367-4749-890b-e4e5c529f9a8\tQto_FootingBaseQuantities.GrossVolume\tVOLUME\t\t817\t1\tIfcVolumeMeasure\t1\nPARAM\t2d487b95-1014-4f39-ae9d-a69987967967\tQto_FootingBaseQuantities.GrossWeight\tNUMBER\t\t817\t1\tIfcMassMeasure\t1\nPARAM\tb89ab78f-1e8c-4c9f-98ba-8e3d71b8e507\tQto_FootingBaseQuantities.Height\tLENGTH\t\t817\t1\tIfcLengthMeasure\t1\nPARAM\tb60a62fe-ed5d-402d-bdd4-a8327b3a511f\tQto_FootingBaseQuantities.Length\tLENGTH\t\t817\t1\tIfcLengthMeasure\t1\nPARAM\t102f2406-fd11-4157-9709-bd7b9890ff9c\tQto_FootingBaseQuantities.NetVolume\tVOLUME\t\t817\t1\tIfcVolumeMeasure\t1\nPARAM\t3584bcaa-e3f6-4af6-9005-4688a76c0d31\tQto_FootingBaseQuantities.NetWeight\tNUMBER\t\t817\t1\tIfcMassMeasure\t1\nPARAM\t780e9bac-de3a-42a2-a5c5-dbed6d53cd0e\tQto_FootingBaseQuantities.OuterSurfaceArea\tAREA\t\t817\t1\tIfcAreaMeasure\t1\nPARAM\t902845f2-976d-4e61-864e-645d1dfd07b2\tQto_FootingBaseQuantities.Width\tLENGTH\t\t817\t1\tIfcLengthMeasure\t1\n#\nGROUP\t818\tQto_HeatExchangerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbad421e0-7e01-44a9-a9b6-aefe2d0e2bd4\tQto_HeatExchangerBaseQuantities.GrossWeight\tNUMBER\t\t818\t1\tIfcMassMeasure\t1\n#\nGROUP\t819\tQto_HumidifierBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8d7655c4-d9c4-443e-89e7-4fbd267231d4\tQto_HumidifierBaseQuantities.GrossWeight\tNUMBER\t\t819\t1\tIfcMassMeasure\t1\n#\nGROUP\t820\tQto_ImpactProtectionDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3bf92702-ba0b-4a38-aa95-2e980883183f\tQto_ImpactProtectionDeviceBaseQuantities.Weight\tNUMBER\t\t820\t1\tIfcMassMeasure\t1\n#\nGROUP\t821\tQto_InterceptorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t26e71c7e-599c-4c53-b33f-329bb8781b98\tQto_InterceptorBaseQuantities.GrossWeight\tNUMBER\t\t821\t1\tIfcMassMeasure\t1\n#\nGROUP\t822\tQto_JunctionBoxBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1f2db772-c7ef-4d7b-83f2-dc928dadefc5\tQto_JunctionBoxBaseQuantities.GrossWeight\tNUMBER\t\t822\t1\tIfcMassMeasure\t1\nPARAM\t3ebe461d-859e-4195-bf9f-49c0688c6322\tQto_JunctionBoxBaseQuantities.Height\tLENGTH\t\t822\t1\tIfcLengthMeasure\t1\nPARAM\te6f0b389-5895-4388-8ec6-42e4c6c4c9c7\tQto_JunctionBoxBaseQuantities.Length\tLENGTH\t\t822\t1\tIfcLengthMeasure\t1\nPARAM\t250581c5-0d72-44c4-8e54-fd8a32d4e354\tQto_JunctionBoxBaseQuantities.NumberOfGangs\tINTEGER\t\t822\t1\tIfcCountMeasure\t1\nPARAM\t7aa8781d-cfdf-4191-a06c-6f05b63af9fa\tQto_JunctionBoxBaseQuantities.Width\tLENGTH\t\t822\t1\tIfcLengthMeasure\t1\n#\nGROUP\t823\tQto_KerbBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc120032e-91fa-4588-9f97-3d85417cd536\tQto_KerbBaseQuantities.Depth\tLENGTH\t\t823\t1\tIfcLengthMeasure\t1\nPARAM\tbbb5ca9b-9e50-4f29-97c4-cb6729b418fd\tQto_KerbBaseQuantities.Height\tLENGTH\t\t823\t1\tIfcLengthMeasure\t1\nPARAM\t4528cb6f-07de-46af-b429-cbd4211784bd\tQto_KerbBaseQuantities.Length\tLENGTH\t\t823\t1\tIfcLengthMeasure\t1\nPARAM\t591ae29c-0d46-4b91-aa6d-e4a39b73ed71\tQto_KerbBaseQuantities.Volume\tVOLUME\t\t823\t1\tIfcVolumeMeasure\t1\nPARAM\tf91193ec-75b1-4bf0-b0e4-67d850702604\tQto_KerbBaseQuantities.Weight\tNUMBER\t\t823\t1\tIfcMassMeasure\t1\nPARAM\tb0073a25-a52a-41ae-b5e7-92ca8e9acaee\tQto_KerbBaseQuantities.Width\tLENGTH\t\t823\t1\tIfcLengthMeasure\t1\n#\nGROUP\t824\tQto_LaborResourceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t50875b91-708b-44ee-a5e0-aaa2307755f5\tQto_LaborResourceBaseQuantities.OvertimeWork\tNUMBER\t\t824\t1\tIfcTimeMeasure\t1\nPARAM\tf03b5ccb-adcf-4d05-bfa4-95bd7c102ad9\tQto_LaborResourceBaseQuantities.StandardWork\tNUMBER\t\t824\t1\tIfcTimeMeasure\t1\n#\nGROUP\t825\tQto_LampBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf1ba94b9-a1c5-43ea-96fc-fdc9401cc034\tQto_LampBaseQuantities.GrossWeight\tNUMBER\t\t825\t1\tIfcMassMeasure\t1\n#\nGROUP\t826\tQto_LightFixtureBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t10c33af5-56c5-4d95-ab30-5d8b143b7d80\tQto_LightFixtureBaseQuantities.GrossWeight\tNUMBER\t\t826\t1\tIfcMassMeasure\t1\n#\nGROUP\t827\tQto_LinearStratumBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc826ebf3-5fc9-405f-8957-e32aa6234609\tQto_LinearStratumBaseQuantities.Diameter\tLENGTH\t\t827\t1\tIfcLengthMeasure\t1\nPARAM\t5d27710a-1db6-4879-b52e-0405a92ba3e0\tQto_LinearStratumBaseQuantities.Length\tLENGTH\t\t827\t1\tIfcLengthMeasure\t1\n#\nGROUP\t828\tQto_MarineFacilityBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t99a345e8-80a6-4406-9c17-a55037ddd11a\tQto_MarineFacilityBaseQuantities.Area\tAREA\t\t828\t1\tIfcAreaMeasure\t1\nPARAM\td2942d92-8eeb-44de-9f54-c3764d69a65f\tQto_MarineFacilityBaseQuantities.Height\tLENGTH\t\t828\t1\tIfcLengthMeasure\t1\nPARAM\t8e7a9c88-b425-4c18-ac62-36e7f9d769a2\tQto_MarineFacilityBaseQuantities.Length\tLENGTH\t\t828\t1\tIfcLengthMeasure\t1\nPARAM\t922dd6ba-953b-49fd-baa4-9c4feb7182e9\tQto_MarineFacilityBaseQuantities.Volume\tVOLUME\t\t828\t1\tIfcVolumeMeasure\t1\nPARAM\tfdfdbc9b-3ad0-407f-9919-dd1dd21b0ae3\tQto_MarineFacilityBaseQuantities.Width\tLENGTH\t\t828\t1\tIfcLengthMeasure\t1\n#\nGROUP\t829\tQto_MemberBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf8db575f-b52a-4c13-ab8d-e26a6c0cc9bc\tQto_MemberBaseQuantities.CrossSectionArea\tAREA\t\t829\t1\tIfcAreaMeasure\t1\nPARAM\t73e21012-961a-4325-8ff2-d4b68b5e3349\tQto_MemberBaseQuantities.GrossSurfaceArea\tAREA\t\t829\t1\tIfcAreaMeasure\t1\nPARAM\ta275609f-9f44-4fc7-bf48-ee034ce29a42\tQto_MemberBaseQuantities.GrossVolume\tVOLUME\t\t829\t1\tIfcVolumeMeasure\t1\nPARAM\teb9f962e-3960-4409-bdca-9d28ef181c6e\tQto_MemberBaseQuantities.GrossWeight\tNUMBER\t\t829\t1\tIfcMassMeasure\t1\nPARAM\t7166872a-305c-47c0-b118-14cc08acd8c8\tQto_MemberBaseQuantities.Length\tLENGTH\t\t829\t1\tIfcLengthMeasure\t1\nPARAM\t08de4b92-fa62-41a5-b3bf-b64311d51afa\tQto_MemberBaseQuantities.NetSurfaceArea\tAREA\t\t829\t1\tIfcAreaMeasure\t1\nPARAM\tb1d7d7f7-9f40-470b-ad1b-9968758e70c7\tQto_MemberBaseQuantities.NetVolume\tVOLUME\t\t829\t1\tIfcVolumeMeasure\t1\nPARAM\tc5d683fe-c290-4d5f-a9cd-f33079531df0\tQto_MemberBaseQuantities.NetWeight\tNUMBER\t\t829\t1\tIfcMassMeasure\t1\nPARAM\t95c6dacf-04d8-4101-9e2d-7dfc04cb2f7f\tQto_MemberBaseQuantities.OuterSurfaceArea\tAREA\t\t829\t1\tIfcAreaMeasure\t1\n#\nGROUP\t830\tQto_MotorConnectionBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf46a7a4b-8ce0-49bb-b3bb-b44f0119710b\tQto_MotorConnectionBaseQuantities.GrossWeight\tNUMBER\t\t830\t1\tIfcMassMeasure\t1\n#\nGROUP\t831\tQto_OpeningElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48981854-9858-42c0-aadb-1735f160dd34\tQto_OpeningElementBaseQuantities.Area\tAREA\t\t831\t1\tIfcAreaMeasure\t1\nPARAM\t14cf5683-fc9c-44c5-87d3-c937932fda67\tQto_OpeningElementBaseQuantities.Depth\tLENGTH\t\t831\t1\tIfcLengthMeasure\t1\nPARAM\t4e3c23a2-9a6e-411a-bca9-20397a1c14fb\tQto_OpeningElementBaseQuantities.Height\tLENGTH\t\t831\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t37062a0a-f986-4156-8b13-9a1b07916a03\tQto_OpeningElementBaseQuantities.Volume\tVOLUME\t\t831\t1\tIfcVolumeMeasure\t1\nPARAM\t4e144a12-30c4-4db9-9cbe-fbc1bde7f07c\tQto_OpeningElementBaseQuantities.Width\tLENGTH\t\t831\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t832\tQto_OutletBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9d10dccd-61e1-4fb5-a1e4-7ee2adae99c4\tQto_OutletBaseQuantities.GrossWeight\tNUMBER\t\t832\t1\tIfcMassMeasure\t1\n#\nGROUP\t833\tQto_PavementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4430e183-e7ef-4013-add6-628ba2d5dc27\tQto_PavementBaseQuantities.Depth\tLENGTH\t\t833\t1\tIfcLengthMeasure\t1\nPARAM\tc0e1d70a-794d-4d17-a5d9-8e8ba33c55f3\tQto_PavementBaseQuantities.GrossArea\tAREA\t\t833\t1\tIfcAreaMeasure\t1\nPARAM\t72c94e4a-2f8a-4e97-bf3e-93c28ce7f3ae\tQto_PavementBaseQuantities.GrossVolume\tVOLUME\t\t833\t1\tIfcVolumeMeasure\t1\nPARAM\t5a70cd52-bfca-46b4-bda3-6d3044f8d13b\tQto_PavementBaseQuantities.Length\tLENGTH\t\t833\t1\tIfcLengthMeasure\t1\nPARAM\t066e42c9-890c-4b48-a0b9-fd4445c88c30\tQto_PavementBaseQuantities.NetArea\tAREA\t\t833\t1\tIfcAreaMeasure\t1\nPARAM\t3ed3ef9c-08da-4f06-a73b-218f78411e56\tQto_PavementBaseQuantities.NetVolume\tVOLUME\t\t833\t1\tIfcVolumeMeasure\t1\nPARAM\ta08d3997-0bd4-4fef-b87b-9be90558161e\tQto_PavementBaseQuantities.Width\tLENGTH\t\t833\t1\tIfcLengthMeasure\t1\n#\nGROUP\t834\tQto_PictorialSignQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb1d4eb09-e929-410c-994e-9f6e5d0a37f3\tQto_PictorialSignQuantities.Area\tAREA\t\t834\t1\tIfcAreaMeasure\t1\nPARAM\t991f03fd-2a0d-4457-8d5e-023ef2874b8f\tQto_PictorialSignQuantities.SignArea\tAREA\t\t834\t1\tIfcAreaMeasure\t1\n#\nGROUP\t835\tQto_PileBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0e8ec0c5-97f7-46c9-b1c0-32f21c1765db\tQto_PileBaseQuantities.CrossSectionArea\tAREA\t\t835\t1\tIfcAreaMeasure\t1\nPARAM\t42a00474-6e1e-47f5-91a4-f8eef05653a1\tQto_PileBaseQuantities.GrossSurfaceArea\tAREA\t\t835\t1\tIfcAreaMeasure\t1\nPARAM\te40e4036-3573-4c2c-b956-b7aa363a7fbf\tQto_PileBaseQuantities.GrossVolume\tVOLUME\t\t835\t1\tIfcVolumeMeasure\t1\nPARAM\td2e93518-37d0-4b76-9506-65a115a392b6\tQto_PileBaseQuantities.GrossWeight\tNUMBER\t\t835\t1\tIfcMassMeasure\t1\nPARAM\tddb35aa5-1f79-4f2d-896e-9dbad6e68d99\tQto_PileBaseQuantities.Length\tLENGTH\t\t835\t1\tIfcLengthMeasure\t1\nPARAM\t88dc8673-3f77-44c0-bd46-62954a33f447\tQto_PileBaseQuantities.NetVolume\tVOLUME\t\t835\t1\tIfcVolumeMeasure\t1\nPARAM\t68781760-9338-434f-8a62-41538c0db1b9\tQto_PileBaseQuantities.NetWeight\tNUMBER\t\t835\t1\tIfcMassMeasure\t1\nPARAM\td6f4c5f2-9542-4d03-b425-1fc2c63e6edf\tQto_PileBaseQuantities.OuterSurfaceArea\tAREA\t\t835\t1\tIfcAreaMeasure\t1\n#\nGROUP\t836\tQto_PipeFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83c310b6-31e4-4965-addc-58c2e8043c86\tQto_PipeFittingBaseQuantities.GrossCrossSectionArea\tAREA\t\t836\t1\tIfcAreaMeasure\t1\nPARAM\t51d2aa19-91d1-40d6-a31e-a19b2b5de65b\tQto_PipeFittingBaseQuantities.GrossWeight\tNUMBER\t\t836\t1\tIfcMassMeasure\t1\nPARAM\t85bc057b-f676-4a2c-a434-8d1c7a4ce3c2\tQto_PipeFittingBaseQuantities.Length\tLENGTH\t\t836\t1\tIfcLengthMeasure\t1\nPARAM\tdafe79a5-95cb-4432-b699-299415eaa1e0\tQto_PipeFittingBaseQuantities.NetCrossSectionArea\tAREA\t\t836\t1\tIfcAreaMeasure\t1\nPARAM\t1edff67b-ea89-475b-a6a5-c4b7cae59616\tQto_PipeFittingBaseQuantities.NetWeight\tNUMBER\t\t836\t1\tIfcMassMeasure\t1\nPARAM\t50b351fb-6fbc-4509-a08c-8fe3d0ce1c8c\tQto_PipeFittingBaseQuantities.OuterSurfaceArea\tAREA\t\t836\t1\tIfcAreaMeasure\t1\n#\nGROUP\t837\tQto_PipeSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc9894b0-faa5-4dfa-bd62-ad11c221d7b2\tQto_PipeSegmentBaseQuantities.FootPrintArea\tAREA\t\t837\t1\tIfcAreaMeasure\t1\nPARAM\t331265e3-e2a1-4341-9b9c-bc9e6df56e49\tQto_PipeSegmentBaseQuantities.GrossCrossSectionArea\tAREA\t\t837\t1\tIfcAreaMeasure\t1\nPARAM\td4859687-f4fe-4298-a235-7228929744d9\tQto_PipeSegmentBaseQuantities.GrossWeight\tNUMBER\t\t837\t1\tIfcMassMeasure\t1\nPARAM\tc8440aa7-c619-4d27-9ccc-eb3b0fd7ff40\tQto_PipeSegmentBaseQuantities.Length\tLENGTH\t\t837\t1\tIfcLengthMeasure\t1\nPARAM\t28e2bc44-55f9-4e45-a689-e84ba8120f1a\tQto_PipeSegmentBaseQuantities.NetCrossSectionArea\tAREA\t\t837\t1\tIfcAreaMeasure\t1\nPARAM\t108bcae6-6105-4a96-a028-83326a9bd6ba\tQto_PipeSegmentBaseQuantities.NetWeight\tNUMBER\t\t837\t1\tIfcMassMeasure\t1\nPARAM\td361ed2d-1f52-4362-8910-29e446da4b7a\tQto_PipeSegmentBaseQuantities.OuterSurfaceArea\tAREA\t\t837\t1\tIfcAreaMeasure\t1\n#\nGROUP\t838\tQto_PlateBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7d2068c2-3614-4bf8-9ae8-ec3b4b6d3152\tQto_PlateBaseQuantities.GrossArea\tAREA\t\t838\t1\tIfcAreaMeasure\t1\nPARAM\t452df3d5-4c01-4941-8656-f3b5ea754c50\tQto_PlateBaseQuantities.GrossVolume\tVOLUME\t\t838\t1\tIfcVolumeMeasure\t1\nPARAM\t1d6e2b8a-4f15-4857-aac8-f009b0d361c9\tQto_PlateBaseQuantities.GrossWeight\tNUMBER\t\t838\t1\tIfcMassMeasure\t1\nPARAM\t8e09dea7-951f-4fff-831d-5d12649eb03c\tQto_PlateBaseQuantities.NetArea\tAREA\t\t838\t1\tIfcAreaMeasure\t1\nPARAM\t25e5c3fe-8803-4284-84b9-c49a9ce2563e\tQto_PlateBaseQuantities.NetVolume\tVOLUME\t\t838\t1\tIfcVolumeMeasure\t1\nPARAM\t3ebc0e1f-f66d-4016-8eed-02cc3a6f6f06\tQto_PlateBaseQuantities.NetWeight\tNUMBER\t\t838\t1\tIfcMassMeasure\t1\nPARAM\t0e0b6049-6f82-43df-85ff-d5d202e03433\tQto_PlateBaseQuantities.Perimeter\tLENGTH\t\t838\t1\tIfcLengthMeasure\t1\nPARAM\tf4112c07-b6bd-44de-8f0c-6bb39c668448\tQto_PlateBaseQuantities.Width\tLENGTH\t\t838\t1\tIfcLengthMeasure\t1\n#\nGROUP\t839\tQto_ProjectionElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9f508b19-4688-4594-aa1f-0c187dddbcf8\tQto_ProjectionElementBaseQuantities.Area\tAREA\t\t839\t1\tIfcAreaMeasure\t1\nPARAM\ta51b6943-c05c-4450-82ae-93cf717ede32\tQto_ProjectionElementBaseQuantities.Volume\tVOLUME\t\t839\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t840\tQto_ProtectiveDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tacb0bfd8-be18-4915-b4d6-587100e2fe3f\tQto_ProtectiveDeviceBaseQuantities.GrossWeight\tNUMBER\t\t840\t1\tIfcMassMeasure\t1\n#\nGROUP\t841\tQto_ProtectiveDeviceTrippingUnitBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta12ba581-2fdc-4964-b048-0d8b91719c98\tQto_ProtectiveDeviceTrippingUnitBaseQuantities.GrossWeight\tNUMBER\t\t841\t1\tIfcMassMeasure\t1\n#\nGROUP\t842\tQto_PumpBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t27186f31-f72e-4f45-89d3-73da4c5ec9ff\tQto_PumpBaseQuantities.GrossWeight\tNUMBER\t\t842\t1\tIfcMassMeasure\t1\n#\nGROUP\t843\tQto_RailBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5839d2ca-751e-4b0c-a883-b059c8f242a3\tQto_RailBaseQuantities.Length\tLENGTH\t\t843\t1\tIfcLengthMeasure\t1\nPARAM\t11a78427-260f-42fb-bfb6-155442e80666\tQto_RailBaseQuantities.Volume\tVOLUME\t\t843\t1\tIfcVolumeMeasure\t1\nPARAM\t170d5685-8076-4e62-b808-01a2f02fd9bf\tQto_RailBaseQuantities.Weight\tNUMBER\t\t843\t1\tIfcMassMeasure\t1\n#\nGROUP\t844\tQto_RailingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2f927e26-5e88-4fea-b13a-068de4fb4358\tQto_RailingBaseQuantities.Length\tLENGTH\t\t844\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t845\tQto_RampFlightBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t97552d67-05fb-4931-b85b-157020e9f33c\tQto_RampFlightBaseQuantities.GrossArea\tAREA\t\t845\t1\tIfcAreaMeasure\t1\nPARAM\tb3d8220e-acbf-45ad-98a1-ed1f55bb01ff\tQto_RampFlightBaseQuantities.GrossVolume\tVOLUME\t\t845\t1\tIfcVolumeMeasure\t1\nPARAM\tb3d8a3f1-8f2f-4857-8cf0-fc46da913b25\tQto_RampFlightBaseQuantities.Length\tLENGTH\t\t845\t1\tIfcLengthMeasure\t1\nPARAM\t9aef8358-3619-44ef-aaac-0c043ff14f6c\tQto_RampFlightBaseQuantities.NetArea\tAREA\t\t845\t1\tIfcAreaMeasure\t1\nPARAM\tefd2a2f8-dd76-4726-ba48-2a5133cdebb2\tQto_RampFlightBaseQuantities.NetVolume\tVOLUME\t\t845\t1\tIfcVolumeMeasure\t1\nPARAM\t0eeff58b-6937-4533-a2b3-2392634a906e\tQto_RampFlightBaseQuantities.Width\tLENGTH\t\t845\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t846\tQto_ReinforcedSoilBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tda1576db-eb86-4383-bb28-ee7d99e54ea5\tQto_ReinforcedSoilBaseQuantities.Area\tAREA\t\t846\t1\tIfcAreaMeasure\t1\nPARAM\tdbd4c781-2a06-4938-917c-796c350acc33\tQto_ReinforcedSoilBaseQuantities.Depth\tLENGTH\t\t846\t1\tIfcLengthMeasure\t1\nPARAM\t621ff023-da95-49d5-afcf-45afd9d0cc7b\tQto_ReinforcedSoilBaseQuantities.Length\tLENGTH\t\t846\t1\tIfcLengthMeasure\t1\nPARAM\tfec3414b-b621-410f-88cd-a634f36a97a3\tQto_ReinforcedSoilBaseQuantities.Volume\tVOLUME\t\t846\t1\tIfcVolumeMeasure\t1\nPARAM\t2e8a9bf6-881c-4739-aef7-453509965a21\tQto_ReinforcedSoilBaseQuantities.Width\tLENGTH\t\t846\t1\tIfcLengthMeasure\t1\n#\nGROUP\t847\tQto_ReinforcingElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t28f00955-3059-4784-8da9-7fc6efbd7427\tQto_ReinforcingElementBaseQuantities.Count\tINTEGER\t\t847\t1\tIfcCountMeasure\t1\nPARAM\t7860ad61-83a4-42ac-811b-95f3c8f9825a\tQto_ReinforcingElementBaseQuantities.Length\tLENGTH\t\t847\t1\tIfcLengthMeasure\t1\nPARAM\td313d164-de03-4082-ad3f-95193d75e8dd\tQto_ReinforcingElementBaseQuantities.Weight\tNUMBER\t\t847\t1\tIfcMassMeasure\t1\n#\nGROUP\t848\tQto_RoofBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc4b40295-6be0-4ffd-a25f-f6217f6d989c\tQto_RoofBaseQuantities.GrossArea\tAREA\t\t848\t1\tIfcAreaMeasure\t1\nPARAM\te4ad19c4-9d6d-4b70-aca7-a936f6fc88b6\tQto_RoofBaseQuantities.NetArea\tAREA\t\t848\t1\tIfcAreaMeasure\t1\nPARAM\tb84d9709-2e45-4395-9d2e-829289d59d11\tQto_RoofBaseQuantities.ProjectedArea\tAREA\t\t848\t1\tIfcAreaMeasure\t1\n#\nGROUP\t849\tQto_SanitaryTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t115c4179-c0c2-47cc-916b-512fb3cf51af\tQto_SanitaryTerminalBaseQuantities.GrossWeight\tNUMBER\t\t849\t1\tIfcMassMeasure\t1\n#\nGROUP\t850\tQto_SensorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tab2131bb-121f-418f-b28b-a0d8fca362c0\tQto_SensorBaseQuantities.GrossWeight\tNUMBER\t\t850\t1\tIfcMassMeasure\t1\n#\nGROUP\t851\tQto_SignalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbd8574ec-b2be-48b8-8515-12ea317ec870\tQto_SignalBaseQuantities.Weight\tNUMBER\t\t851\t1\tIfcMassMeasure\t1\n#\nGROUP\t852\tQto_SignBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t55881d6b-9a5d-4375-aa9a-5b82d9769f62\tQto_SignBaseQuantities.Height\tLENGTH\t\t852\t1\tIfcLengthMeasure\t1\nPARAM\t658c7b3c-ae56-4440-b325-6d4d9eab616f\tQto_SignBaseQuantities.Thickness\tLENGTH\t\t852\t1\tIfcLengthMeasure\t1\nPARAM\tf8eec110-9762-4840-b977-306f4fb73a0b\tQto_SignBaseQuantities.Weight\tNUMBER\t\t852\t1\tIfcMassMeasure\t1\nPARAM\t9cb9aec8-5e7b-4683-be0b-9fb7c46482b5\tQto_SignBaseQuantities.Width\tLENGTH\t\t852\t1\tIfcLengthMeasure\t1\n#\nGROUP\t853\tQto_SiteBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t72793c92-1790-450c-b410-1e61523edbc1\tQto_SiteBaseQuantities.GrossArea\tAREA\t\t853\t1\tIfcAreaMeasure\t1\nPARAM\t4e16d8ca-9a67-4b00-a732-7e4a13b2c9fa\tQto_SiteBaseQuantities.GrossPerimeter\tLENGTH\t\t853\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t854\tQto_SlabBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8eda2582-0291-4cea-bb43-988c084900cc\tQto_SlabBaseQuantities.Depth\tLENGTH\t\t854\t1\tIfcLengthMeasure\t1\nPARAM\t9fdc6e2f-51b7-48dc-a7cf-6814a70dd693\tQto_SlabBaseQuantities.GrossArea\tAREA\t\t854\t1\tIfcAreaMeasure\t1\nPARAM\t868643eb-f5e8-449b-9c08-0f34e8464eb0\tQto_SlabBaseQuantities.GrossVolume\tVOLUME\t\t854\t1\tIfcVolumeMeasure\t1\nPARAM\tdb6d0d2c-1934-44f0-85ea-b9ad7b6d2a66\tQto_SlabBaseQuantities.GrossWeight\tNUMBER\t\t854\t1\tIfcMassMeasure\t1\nPARAM\t7dc38c1e-73ac-442b-ad21-ff81ed30a3bb\tQto_SlabBaseQuantities.Length\tLENGTH\t\t854\t1\tIfcLengthMeasure\t1\nPARAM\td4d20fb1-f366-4e31-9ec2-0edd5afb2ae8\tQto_SlabBaseQuantities.NetArea\tAREA\t\t854\t1\tIfcAreaMeasure\t1\nPARAM\t0878815a-4acd-4917-aa25-0a74851d9cd4\tQto_SlabBaseQuantities.NetVolume\tVOLUME\t\t854\t1\tIfcVolumeMeasure\t1\nPARAM\t2ce16095-acf0-43f7-86d4-ea79c843883b\tQto_SlabBaseQuantities.NetWeight\tNUMBER\t\t854\t1\tIfcMassMeasure\t1\nPARAM\ta8ba1f48-1b4c-444e-923e-f663e967df9a\tQto_SlabBaseQuantities.Perimeter\tLENGTH\t\t854\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tac3b5bf1-b5f5-42cc-80c1-4917abc52389\tQto_SlabBaseQuantities.Width\tLENGTH\t\t854\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t855\tQto_SleeperBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9597f8dc-9bb8-4b28-a836-1bfa2836b44c\tQto_SleeperBaseQuantities.Height\tLENGTH\t\t855\t1\tIfcLengthMeasure\t1\nPARAM\ta4b349ef-e7e9-411f-8582-8014d18f11a7\tQto_SleeperBaseQuantities.Length\tLENGTH\t\t855\t1\tIfcLengthMeasure\t1\nPARAM\tfc86a71f-eec2-4bf4-8ebd-0eab718effcd\tQto_SleeperBaseQuantities.Width\tLENGTH\t\t855\t1\tIfcLengthMeasure\t1\n#\nGROUP\t856\tQto_SolarDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t826a5fcf-be3f-44fa-b178-cbd64230e6e0\tQto_SolarDeviceBaseQuantities.GrossArea\tAREA\t\t856\t1\tIfcAreaMeasure\t1\nPARAM\te4168c63-1f75-493d-8402-c659678915fe\tQto_SolarDeviceBaseQuantities.GrossWeight\tNUMBER\t\t856\t1\tIfcMassMeasure\t1\n#\nGROUP\t857\tQto_SpaceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t89473d08-a401-4e1e-8f0e-d83fd943db92\tQto_SpaceBaseQuantities.FinishCeilingHeight\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t030ba543-7f29-49c2-a7bc-84076e5e3495\tQto_SpaceBaseQuantities.FinishFloorHeight\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t90c8ba61-9dc5-4a55-a3de-2c621945bb9b\tQto_SpaceBaseQuantities.GrossCeilingArea\tAREA\t\t857\t1\tIfcAreaMeasure\t1\nPARAM\t90cdcbff-af35-432b-93f6-75be19321859\tQto_SpaceBaseQuantities.GrossFloorArea\tAREA\t\t857\t1\tIfcAreaMeasure\t1\nPARAM\tc09c7f71-d3cf-4353-b464-2ffe33259c77\tQto_SpaceBaseQuantities.GrossPerimeter\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t60cda972-2bf6-41e2-aedf-b77bdaa8f9bb\tQto_SpaceBaseQuantities.GrossVolume\tVOLUME\t\t857\t1\tIfcVolumeMeasure\t1\nPARAM\tc5688503-1f22-41a5-a3a7-3ae74c0c8c5b\tQto_SpaceBaseQuantities.GrossWallArea\tAREA\t\t857\t1\tIfcAreaMeasure\t1\nPARAM\t71b6564a-d911-4145-aea9-a56e8a47e676\tQto_SpaceBaseQuantities.Height\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6696b610-74e6-4839-a751-4df9195189b8\tQto_SpaceBaseQuantities.NetCeilingArea\tAREA\t\t857\t1\tIfcAreaMeasure\t1\nPARAM\t061ccacb-4fec-4d7c-b4c1-76dc1c65c7c2\tQto_SpaceBaseQuantities.NetFloorArea\tAREA\t\t857\t1\tIfcAreaMeasure\t1\nPARAM\t4d892d15-22ca-442c-a007-0b15c8698f77\tQto_SpaceBaseQuantities.NetPerimeter\tLENGTH\t\t857\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t861b7ce2-9eb1-48db-ae25-1f69df60265b\tQto_SpaceBaseQuantities.NetVolume\tVOLUME\t\t857\t1\tIfcVolumeMeasure\t1\nPARAM\t7fe66068-6e71-4f6b-be18-e07efb6ced82\tQto_SpaceBaseQuantities.NetWallArea\tAREA\t\t857\t1\tIfcAreaMeasure\t1\n#\nGROUP\t858\tQto_SpaceHeaterBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t08350294-6a6d-46c0-8e61-b9b285e571a2\tQto_SpaceHeaterBaseQuantities.GrossWeight\tNUMBER\t\t858\t1\tIfcMassMeasure\t1\nPARAM\t6feb9f3b-19e7-4dd4-ade3-4b663efc146f\tQto_SpaceHeaterBaseQuantities.Length\tLENGTH\t\t858\t1\tIfcLengthMeasure\t1\nPARAM\t31cc0a39-adba-4da9-836e-b9d3afaefdeb\tQto_SpaceHeaterBaseQuantities.NetWeight\tNUMBER\t\t858\t1\tIfcMassMeasure\t1\n#\nGROUP\t859\tQto_SpatialZoneBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6d297fd0-dbf0-467c-8a50-b7817f1460c2\tQto_SpatialZoneBaseQuantities.Height\tLENGTH\t\t859\t1\tIfcLengthMeasure\t1\nPARAM\t022fcb23-cdb1-41b3-93b1-f6e0bcb0762e\tQto_SpatialZoneBaseQuantities.Length\tLENGTH\t\t859\t1\tIfcLengthMeasure\t1\nPARAM\t784c7af9-c891-4049-bc60-166bd4c1fa0c\tQto_SpatialZoneBaseQuantities.Width\tLENGTH\t\t859\t1\tIfcLengthMeasure\t1\n#\nGROUP\t860\tQto_StackTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tafe7bdeb-250b-4398-a1e5-9224f8d2b7e5\tQto_StackTerminalBaseQuantities.GrossWeight\tNUMBER\t\t860\t1\tIfcMassMeasure\t1\n#\nGROUP\t861\tQto_StairFlightBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t90986c0e-1cf3-47ee-895d-c299b80ffddf\tQto_StairFlightBaseQuantities.GrossVolume\tVOLUME\t\t861\t1\tIfcVolumeMeasure\t1\nPARAM\ta4210939-8e6c-44ee-8004-cfcb5d512acb\tQto_StairFlightBaseQuantities.Length\tLENGTH\t\t861\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t83a0ac8a-e64f-429d-9dc6-e1167b1f5537\tQto_StairFlightBaseQuantities.NetVolume\tVOLUME\t\t861\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t862\tQto_SurfaceFeatureBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb21c5184-2098-4d4a-afd5-ca997df41328\tQto_SurfaceFeatureBaseQuantities.Area\tAREA\t\t862\t1\tIfcAreaMeasure\t1\nPARAM\t3f696e3a-2f46-48ed-8aeb-f74e4522dadb\tQto_SurfaceFeatureBaseQuantities.Length\tLENGTH\t\t862\t1\tIfcLengthMeasure\t1\n#\nGROUP\t863\tQto_SwitchingDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta120c0bf-9ca8-43af-b719-88225d16907e\tQto_SwitchingDeviceBaseQuantities.GrossWeight\tNUMBER\t\t863\t1\tIfcMassMeasure\t1\n#\nGROUP\t864\tQto_TankBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0f597677-c96d-421d-8871-5eef73461056\tQto_TankBaseQuantities.GrossWeight\tNUMBER\t\t864\t1\tIfcMassMeasure\t1\nPARAM\tb57d94b3-2667-42da-aad3-231912df8a7b\tQto_TankBaseQuantities.NetWeight\tNUMBER\t\t864\t1\tIfcMassMeasure\t1\nPARAM\tec62fbc2-a909-4e3e-b8cf-1fa6131a1aa2\tQto_TankBaseQuantities.TotalSurfaceArea\tAREA\t\t864\t1\tIfcAreaMeasure\t1\n#\nGROUP\t865\tQto_TransformerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a41788b-a8de-4ed0-853b-4ff5d44d69a9\tQto_TransformerBaseQuantities.GrossWeight\tNUMBER\t\t865\t1\tIfcMassMeasure\t1\n#\nGROUP\t866\tQto_TubeBundleBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta4686a0f-8d97-4b46-be9c-c6e72e21d7d0\tQto_TubeBundleBaseQuantities.GrossWeight\tNUMBER\t\t866\t1\tIfcMassMeasure\t1\nPARAM\tf83dde95-d2ea-4099-9973-ec47ecc82e8e\tQto_TubeBundleBaseQuantities.NetWeight\tNUMBER\t\t866\t1\tIfcMassMeasure\t1\n#\nGROUP\t867\tQto_UnitaryControlElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t70efc986-7b73-4b17-bd1f-8839534eac0e\tQto_UnitaryControlElementBaseQuantities.GrossWeight\tNUMBER\t\t867\t1\tIfcMassMeasure\t1\n#\nGROUP\t868\tQto_UnitaryEquipmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1eeec8bf-f172-4add-a79c-401a4c3adcb4\tQto_UnitaryEquipmentBaseQuantities.GrossWeight\tNUMBER\t\t868\t1\tIfcMassMeasure\t1\n#\nGROUP\t869\tQto_ValveBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t28d60e6c-2bbd-4884-a09d-28a0bc75d8f6\tQto_ValveBaseQuantities.GrossWeight\tNUMBER\t\t869\t1\tIfcMassMeasure\t1\n#\nGROUP\t870\tQto_VehicleBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8c771391-0b6d-4e8e-8ae8-14baf685f4aa\tQto_VehicleBaseQuantities.Height\tLENGTH\t\t870\t1\tIfcLengthMeasure\t1\nPARAM\t23de9660-5a2e-4c29-8202-10cc711f8ac9\tQto_VehicleBaseQuantities.Length\tLENGTH\t\t870\t1\tIfcLengthMeasure\t1\nPARAM\t69822aaa-2127-48b2-8492-e848411d24cb\tQto_VehicleBaseQuantities.Width\tLENGTH\t\t870\t1\tIfcLengthMeasure\t1\n#\nGROUP\t871\tQto_VibrationIsolatorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfbe06ed6-65df-465f-87ce-5a23edf4d8ed\tQto_VibrationIsolatorBaseQuantities.GrossWeight\tNUMBER\t\t871\t1\tIfcMassMeasure\t1\n#\nGROUP\t872\tQto_VolumetricStratumBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2b4d4237-f441-4d26-aaeb-b4957bb08c0f\tQto_VolumetricStratumBaseQuantities.Area\tAREA\t\t872\t1\tIfcAreaMeasure\t1\nPARAM\t2b44b18a-8d59-41c1-a7b2-1d2c243774c0\tQto_VolumetricStratumBaseQuantities.Mass\tNUMBER\t\t872\t1\tIfcMassMeasure\t1\nPARAM\t149ef74b-8536-4b95-9ccd-6c6ae8ce7da7\tQto_VolumetricStratumBaseQuantities.PlanArea\tAREA\t\t872\t1\tIfcAreaMeasure\t1\nPARAM\ta9d644d2-db3e-4962-a529-09b00085817a\tQto_VolumetricStratumBaseQuantities.Volume\tVOLUME\t\t872\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t873\tQto_WallBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te8e3fb80-34c1-41eb-954d-fec1ac06290e\tQto_WallBaseQuantities.GrossFootprintArea\tAREA\t\t873\t1\tIfcAreaMeasure\t1\nPARAM\t13bba5bf-7526-4734-aef9-3605e6b17958\tQto_WallBaseQuantities.GrossFootPrintArea\tAREA\t\t873\t1\tIfcAreaMeasure\t1\nPARAM\tdbc8ee14-6034-4cd3-9236-4e8a894901c1\tQto_WallBaseQuantities.GrossSideArea\tAREA\t\t873\t1\tIfcAreaMeasure\t1\nPARAM\t4b40e73c-b43b-4588-a3fa-ab33edfce60b\tQto_WallBaseQuantities.GrossVolume\tVOLUME\t\t873\t1\tIfcVolumeMeasure\t1\nPARAM\t40326b46-0a75-49e7-a25d-6da407254ef5\tQto_WallBaseQuantities.GrossWeight\tNUMBER\t\t873\t1\tIfcMassMeasure\t1\nPARAM\tb9f35976-5649-45f8-86eb-8288656ed38f\tQto_WallBaseQuantities.Height\tLENGTH\t\t873\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t51166695-c636-429f-8d2c-e8112ab48ca5\tQto_WallBaseQuantities.Length\tLENGTH\t\t873\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t13353b73-5e5e-4d92-820f-ae4cc0379e24\tQto_WallBaseQuantities.NetFootprintArea\tAREA\t\t873\t1\tIfcAreaMeasure\t1\nPARAM\tf73b948a-6048-4d01-8a10-78b946c67e80\tQto_WallBaseQuantities.NetFootPrintArea\tAREA\t\t873\t1\tIfcAreaMeasure\t1\nPARAM\tdcb36a1f-0872-419a-bf56-63cf2d22b3da\tQto_WallBaseQuantities.NetSideArea\tAREA\t\t873\t1\tIfcAreaMeasure\t1\nPARAM\t13e6ad86-1462-4242-9ebb-d252bb1d9192\tQto_WallBaseQuantities.NetVolume\tVOLUME\t\t873\t1\tIfcVolumeMeasure\t1\nPARAM\t57114e5d-8d01-4038-a38e-6dfd1cd202e0\tQto_WallBaseQuantities.NetWeight\tNUMBER\t\t873\t1\tIfcMassMeasure\t1\nPARAM\t0b05421f-55df-4243-909f-fd4e0871dcde\tQto_WallBaseQuantities.Width\tLENGTH\t\t873\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t874\tQto_WasteTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfa5e8d81-36f7-42b7-a1c7-1f77e508a6cd\tQto_WasteTerminalBaseQuantities.GrossWeight\tNUMBER\t\t874\t1\tIfcMassMeasure\t1\n#\nGROUP\t875\tQto_WindowBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83a23e3c-3914-4638-81aa-b408f4646ccc\tQto_WindowBaseQuantities.Area\tAREA\t\t875\t1\tIfcAreaMeasure\t1\nPARAM\t35670df8-40b5-403a-b57b-5ab2880b1215\tQto_WindowBaseQuantities.Height\tLENGTH\t\t875\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te41e4c8a-e44e-49b4-8e38-c3e7a9195a62\tQto_WindowBaseQuantities.Perimeter\tLENGTH\t\t875\t1\tIfcLengthMeasure\t1\nPARAM\t60599e64-a277-40ed-bb90-640b0134f781\tQto_WindowBaseQuantities.Width\tLENGTH\t\t875\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t2\tRevit IFCExporter Parameters\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf440bb0c-7518-406c-9b84-1de93ecb2d67\tClassificationCode\tTEXT\t\t2\t1\t\t1\nPARAM\t3e35c8f6-18a2-4678-92a7-29f9a2f790bf\tClassificationCode(2)\tTEXT\t\t2\t1\t\t1\nPARAM\t9c810054-8b25-4c82-a8f6-a19d4bde001f\tClassificationCode(3)\tTEXT\t\t2\t1\t\t1\nPARAM\t902d8dc8-abda-4046-97eb-ebf0c69ae3b2\tClassificationCode(4)\tTEXT\t\t2\t1\t\t1\nPARAM\t6fb63bec-20f3-4855-9697-a4a087577498\tClassificationCode(5)\tTEXT\t\t2\t1\t\t1\nPARAM\tf6117ce5-e8d3-4b6d-9598-7fd7cc2f729e\tClassificationCode(6)\tTEXT\t\t2\t1\t\t1\nPARAM\tf67f3f99-d04c-4b62-a087-81ab6a1d50c4\tClassificationCode(7)\tTEXT\t\t2\t1\t\t1\nPARAM\tb00af5fc-5f1b-40d6-87de-8902f93f7aab\tClassificationCode(8)\tTEXT\t\t2\t1\t\t1\nPARAM\t88125f36-db46-4998-a16d-605bf75cb83f\tClassificationCode(9)\tTEXT\t\t2\t1\t\t1\nPARAM\t0a531080-2060-4bc6-802b-9230d35ac14d\tClassificationCode(10)\tTEXT\t\t2\t1\t\t1\nPARAM\t26f1bba3-a3cb-4fbc-ba29-d7650f1bcb4b\tAssembly Code\tTEXT\t\t2\t1\tUniformat Classification\t1\nPARAM\tb623d495-dc76-46cb-ac7b-bfe126728bf2\tAssembly Description\tTEXT\t\t2\t1\tUniformat Classification\t1\nPARAM\t9ed03820-7425-4d90-868e-2ab0f5319495\tIfcProjectedCRS.Name\tTEXT\t\t2\t1\t\t1\nPARAM\te4090d66-012c-45fe-9ac9-4cfe51c0dd29\tIfcProjectedCRS.Description\tTEXT\t\t2\t1\t\t1\nPARAM\te66c0e06-0383-480f-854e-950bb0d435f8\tIfcProjectedCRS.GeodeticDatum\tTEXT\t\t2\t1\t\t1\nPARAM\tbc47059f-e418-41f2-85b9-8b556dacae5e\tIfcProjectedCRS.VerticalDatum\tTEXT\t\t2\t1\t\t1\nPARAM\tb1d60aea-e267-4ca1-b899-cb06d5eaa9c8\tIfcProjectedCRS.MapProjection\tTEXT\t\t2\t1\t\t1\nPARAM\t91150f20-dc6c-4691-be1e-fe0ed0dfae6f\tIfcProjectedCRS.MapZone\tTEXT\t\t2\t1\t\t1\nPARAM\t093a80c9-4a77-4076-a71c-041e3521608c\tIfcProjectedCRS.MapUnit\tTEXT\t\t2\t1\t\t1\nPARAM\t9c5ad3aa-75d4-448a-a75c-db72ae2139f8\tIfcQtyDepth\tLENGTH\t\t2\t1\t\t1\nPARAM\t90d03a57-2f8c-4c2f-b478-4c43c164e8d2\tIfcQtyLength\tLENGTH\t\t2\t1\t\t1\nPARAM\t7da39469-0a4a-4e77-8ddd-f4204f1a4001\tIfcQtyWidth\tLENGTH\t\t2\t1\t\t1\nPARAM\t93981409-c088-46b2-93a9-9f3caa98efb1\tIfcQtyDiameter\tLENGTH\t\t2\t1\t\t1\nPARAM\te69202d5-65bd-4f49-88b5-e79ce9824f46\tIfcQtyPerimeter\tLENGTH\t\t2\t1\t\t1\nPARAM\ta902c427-138b-496c-9ae9-5a294d18e178\tIfcQtyNetPerimeter\tLENGTH\t\t2\t1\t\t1\nPARAM\tc88a41a7-31ae-4bfe-bab7-8950a4c3f23a\tIfcQtyGrossPerimeter\tLENGTH\t\t2\t1\t\t1\nPARAM\t706a33bb-dc20-4da4-a013-6f111b175a0a\tIfcQtyNetHeight\tLENGTH\t\t2\t1\t\t1\nPARAM\t12c928d0-fb68-4594-958c-55cc6e01175f\tIfcQtyFinishCeilingHeight\tLENGTH\t\t2\t1\t\t1\nPARAM\t7accfb6d-f55e-472a-b450-2d9dc23f04ce\tIfcQtyGrossHeight\tLENGTH\t\t2\t1\t\t1\nPARAM\t29c0b07c-5eb9-4927-82a0-ef9690eefbc9\tIfcQtyFinishFloorHeight\tLENGTH\t\t2\t1\t\t1\nPARAM\t3784ad06-1e5d-46c1-ae2b-a50ffa959830\tIfcQtyGrossWallArea\tAREA\t\t2\t1\t\t1\nPARAM\t5313d6cd-b3dd-4bf9-8c2e-3ce37e98da79\tIfcQtyArea\tAREA\t\t2\t1\t\t1\nPARAM\t9d022292-72f2-44d3-959c-b1b1c2e5dfaa\tIfcQtyGrossArea\tAREA\t\t2\t1\t\t1\nPARAM\tbdb374af-f2cb-4684-989a-7e53203af0d5\tIfcQtyGrossSurfaceArea\tAREA\t\t2\t1\t\t1\nPARAM\td765bfba-70d7-4977-8ef9-f4d48fa633ca\tIfcQtyNetCeilingArea\tAREA\t\t2\t1\t\t1\nPARAM\t94513a38-2eeb-451c-bb99-f7d6e701b95e\tIfcQtyNetSurfaceArea\tAREA\t\t2\t1\t\t1\nPARAM\t0f29392b-03ec-4be3-8266-8ecac58daf70\tIfcQtyCrossSectionArea\tAREA\t\t2\t1\t\t1\nPARAM\t681c1f20-289c-4691-8c54-61899c7058bb\tIfcQtyOuterSurfaceArea\tAREA\t\t2\t1\t\t1\nPARAM\t783bb840-f3b2-4078-ad37-43e42c706d34\tIfcQtyGrossCeilingArea\tAREA\t\t2\t1\t\t1\nPARAM\tdfbae751-2781-4625-b21f-374fdb7c952e\tIfcQtyNetWallArea\tAREA\t\t2\t1\t\t1\nPARAM\t5a446881-e984-4984-95d6-364b49312cdd\tIfcQtyGrossVolume\tVOLUME\t\t2\t1\t\t1\nPARAM\te9ce1eaf-b637-4f79-9bdd-8028abc942aa\tIfcQtyNetVolume\tVOLUME\t\t2\t1\t\t1\nPARAM\t3d3650c9-ffaf-4df6-bf27-71ce745e7f52\tIfcQtyVolume\tVOLUME\t\t2\t1\t\t1\nPARAM\t4cb8562d-51fd-425f-b51f-66ea7b212a7c\tIfcQtyGrossWeight\tNUMBER\t\t2\t1\t\t1\nPARAM\t343189da-1fca-411a-ad0d-ba735f79c476\tIfcQtyNetWeight\tNUMBER\t\t2\t1\t\t1\nPARAM\t8654f7d0-4046-4658-8f4c-f7c9fae9c48b\tZoneName\tTEXT\t\t2\t1\t\t1\nPARAM\t9d26a3cd-a7e7-48f4-88bf-794ba795a0ba\tZoneGroupName\tTEXT\t\t2\t1\t\t1\nPARAM\t803a2a7e-2c1b-4297-a4bb-9d7431580b75\tZoneObjectType\tTEXT\t\t2\t1\t\t1\nPARAM\t9959634a-4d88-4139-a7d5-51fb25655bd3\tZoneLongName\tTEXT\t\t2\t1\t\t1\nPARAM\tb898aba5-8f77-463f-9e88-56787fa0dd92\tZoneDescription\tTEXT\t\t2\t1\t\t1\nPARAM\t7bd18f19-93ba-418f-8d6e-a4dc6b20353b\tZoneClassificationCode\tTEXT\t\t2\t1\t\t1\nPARAM\t3794b219-95ee-448f-b16f-e878ae037933\tPset_RampFlightCommon.HeadRoom\tLENGTH\t\t2\t1\t\t1\nPARAM\t84db17c9-9e1e-44d1-8cbe-69ea634f0eb1\tIfcRampFlight.IfcQtyLength\tLENGTH\t\t2\t1\t\t1\nPARAM\ta325a639-582a-4bd3-a249-002ac2676be2\tIfcRampFlight.IfcQtyWidth\tLENGTH\t\t2\t1\t\t1\nPARAM\tc6bf3693-2edb-4839-ba96-aa2c6ad33cfa\tIfcRampFlight.IfcQtyGrossArea\tAREA\t\t2\t1\t\t1\nPARAM\t4e23e39d-0809-42ea-8bf0-9b3d19d39875\tIfcRampFlight.IfcQtyGrossVolume\tVOLUME\t\t2\t1\t\t1\nPARAM\te5b29aef-b0aa-40d3-bc71-6fbf911e94b2\tIfcRampLanding.IfcQtyLength\tLENGTH\t\t2\t1\t\t1\nPARAM\tecc2c088-3d16-4c27-af59-8612a77d75af\tIfcRampLanding.IfcQtyWidth\tLENGTH\t\t2\t1\t\t1\nPARAM\t7e016416-a454-4236-b250-dbd0b1d9345b\tIfcRampLanding.IfcQtyDepth\tLENGTH\t\t2\t1\t\t1\nPARAM\t4a40afcb-1979-43ef-a4bf-9df8993161f2\tIfcRampLanding.IfcQtyGrossArea\tAREA\t\t2\t1\t\t1\nPARAM\tc3a0ed1e-419f-43a4-a0d3-b88bbb1ce593\tIfcRampLanding.IfcQtyGrossVolume\tVOLUME\t\t2\t1\t\t1\nPARAM\t785453d0-915c-47a2-a024-fed0cdaf39bf\tIfcRampLanding.IfcQtyGrossWeight\tNUMBER\t\t2\t1\t\t1\nPARAM\t925f5c62-001f-4777-87e2-862c97393149\tIfcRampLanding.IfcQtyNetWeight\tNUMBER\t\t2\t1\t\t1\nPARAM\t8635020d-0c0e-4f3a-ab32-a0ad3b6bfff2\tBIM Standards URL\tURL\t\t2\t1\t\t1\nPARAM\t5267e00f-cf59-45eb-8317-bcd7028fa748\tOmniClass Number\tTEXT\t\t2\t1\t\t1\nPARAM\t90847638-6cac-41fa-9db4-2e151700858f\tOmniClass Title\tTEXT\t\t2\t1\t\t1\nPARAM\t0823de64-1327-4b89-a69c-3820b898d926\tSpace Type (Owner) Reference\tTEXT\t\t2\t1\t\t1\nPARAM\ta52ff1af-7a41-4bee-b956-4866bf6feca0\tSpace Type (Owner) Name\tTEXT\t\t2\t1\t\t1\nPARAM\tec9e9682-f7a2-4a5a-aefc-c77c16401e23\tSpace Category (Owner) Reference\tTEXT\t\t2\t1\t\t1\nPARAM\t34713fdf-e119-49e9-92ed-5d11f708920f\tSpace Category (Owner) Name\tTEXT\t\t2\t1\t\t1\nPARAM\t60ef59f7-f0e7-4d07-bb6e-41fc18510a31\tSpace Category (BOMA) Reference\tTEXT\t\t2\t1\t\t1\nPARAM\t12bd9755-8e4f-4d4e-9240-2301d2cd7617\tSpace Category (BOMA) Name\tTEXT\t\t2\t1\t\t1\nPARAM\ta20a1633-3a20-4337-9a5f-b8fcfa09a428\tSpatial Zone Conditioning Requirement\tTEXT\t\t2\t1\t\t1\nPARAM\t9d838298-00ac-4fec-820b-0d527f887cb7\tHVAC System Type\tTEXT\t\t2\t1\t\t1\nPARAM\tc7c65649-0abc-476d-8693-10779207dd50\tUser Defined HVAC System Type\tTEXT\t\t2\t1\t\t1\nPARAM\t36e76e83-a3c8-41c1-9fe8-a3abef236c3c\tIs Daylit Zone\tYESNO\t\t2\t1\t\t1\nPARAM\t7ee7d7b5-8c02-4055-8c24-09d8f913cca2\tNumber of Daylight Sensors\tINTEGER\t\t2\t1\t\t1\nPARAM\t8253a0dd-4285-4210-869e-2a0f7c2d8ee4\tDesign Illuminance\tNUMBER\t\t2\t1\t\t1\nPARAM\t7d669cb2-e5ba-445e-b291-87a5b64f61eb\tLighting Controls Type URL\tTEXT\t\t2\t1\t\t1\nPARAM\te8d94391-3331-4c7f-9e63-e91c17998c64\tSpace Occupant Organization Abbreviation\tTEXT\t\t2\t1\t\t1\nPARAM\t739849a8-5ca6-494b-bac4-4afcc1eb1505\tSpace Occupant Organization Name\tTEXT\t\t2\t1\t\t1\nPARAM\t52b8cea7-4ca9-4172-9501-d3527cf54a59\tOccupant\tTEXT\t\t2\t1\t\t1\nPARAM\td6908c54-3606-4dca-a8ce-56d32ab4192b\tSpace Occupant Organization ID Reference\tTEXT\t\t2\t1\t\t1\nPARAM\tb8872605-81c5-4337-a238-6be576570d55\tSpace Occupant Organization ID Name\tTEXT\t\t2\t1\t\t1\nPARAM\t04b2abb6-6470-4c81-9e7c-1e5b44ed34fe\tSpace Occupant Sub-Organization ID Reference\tTEXT\t\t2\t1\t\t1\nPARAM\t6a9800f5-ff43-4907-9a36-8afc0ec15154\tSpace Occupant Sub-Organization ID Name\tTEXT\t\t2\t1\t\t1\nPARAM\t63fa188d-e00e-490c-a1b2-c513517ca9ce\tSpace Occupant Organization Billing ID Reference\tTEXT\t\t2\t1\t\t1\nPARAM\t27a7919b-9f58-49fe-961c-010c984b38a1\tSpace Occupant Organization Billing ID Name\tTEXT\t\t2\t1\t\t1\nPARAM\t7abd2ba2-0106-4e89-805e-0a77700f2616\tSpatial Zone Type (Owner) Reference\tTEXT\t\t2\t1\t\t1\nPARAM\t5824fd9f-930e-41db-b20e-9c00aa9a8ab3\tSpatial Zone Type (Owner) Name\tTEXT\t\t2\t1\t\t1\nPARAM\t0f1bae35-e82d-4a6c-a7db-572245ff29d6\tSpatial Zone Security Level (Owner) Reference\tTEXT\t\t2\t1\t\t1\nPARAM\t4320b6e8-9b0a-4632-b465-e95dc3df493c\tSpatial Zone Security Level (Owner) Name\tTEXT\t\t2\t1\t\t1\nPARAM\t8c7a547a-6f7f-4eef-a24c-b974efc717e5\tASHRAE Zone Type\tTEXT\t\t2\t1\t\t1\nPARAM\td05b5436-5063-46e9-97e3-af659b69828e\tIfcMaterialLayer.IsVentilated\tYESNO\t\t2\t1\t\t1\nPARAM\ta458f550-164e-4e95-b816-3b28e8014197\tIfcMaterialLayer.Name\tTEXT\t\t2\t1\t\t1\nPARAM\tf69e625c-6005-48bd-80c7-f6e02c122788\tIfcMaterialLayer.Priority\tINTEGER\t\t2\t1\t\t1\nPARAM\t36617d8d-1abb-41c4-b4e8-da1fd62aaad6\tIfcMaterialLayer.Description\tTEXT\t\t2\t1\t\t1\nPARAM\t55cfe7d7-0b60-4214-97da-d2c5555641cb\tIfcMaterialLayer.Category\tTEXT\t\t2\t1\t\t1\nPARAM\t004d4a7b-b77e-479a-a6c3-56ca61babccb\tIfcMaterialLayerSet.Name\tTEXT\t\t2\t1\t\t1\nPARAM\tab39f525-6de4-49ef-844e-95c5e11f1ff6\tIfcMaterialLayerSet.Description\tTEXT\t\t2\t1\t\t1\nPARAM\tcf633970-73fe-49cd-b03e-af60d49d4deb\tIfcName\tTEXT\t\t2\t1\t\t1\nPARAM\t8df7e965-feaf-403f-8290-d4c289c99840\tIfcDescription\tTEXT\t\t2\t1\t\t1\nPARAM\t5d167d01-84fc-47cf-b6af-d4ad81f45868\tIfcLongName\tTEXT\t\t2\t1\t\t1\nPARAM\t577b74dc-fffe-4165-bfb6-00b0a0a24542\tIfcObjectType\tTEXT\t\t2\t1\t\t1\nPARAM\tf113d237-6742-4ab3-8c8d-566bcbd6c6bb\tIfcTag\tTEXT\t\t2\t1\t\t1\nPARAM\t74a4d438-a3f3-4173-a238-a4ad5134d16d\tIfcCapacityByWeight\tNUMBER\t\t2\t1\t\t1\nPARAM\t25c5194c-5659-4459-9df5-f2c6167300b5\tIfcLandTitleNumber\tTEXT\t\t2\t1\t\t1\nPARAM\tadc1655c-2373-481b-abbe-15932619db06\tIfcspaceElevationWithFlooring\tLENGTH\t\t2\t1\t\t1\nPARAM\t486a0eb2-b1d3-43be-abdf-44e396875d66\tIfcCapacityByNumber\tNUMBER\t\t2\t1\t\t1\nPARAM\t17d638a6-954d-46f5-9fd8-a12329895bb6\tIfcPresentationLayer\tTEXT\t\t2\t1\t\t1\nPARAM\ta45065e7-99ce-4323-95c2-a10e0063bcec\tIfcCadLayer\tTEXT\t\t2\t1\t(Deprecated)\t1\nPARAM\tbff4553d-62d0-4ce8-86d3-fa3d2ba9944c\tSiteName\tTEXT\t\t2\t1\t\t1\nPARAM\t1691cccc-14bf-4859-a1ef-a4a3c03a3345\tSiteLongName\tTEXT\t\t2\t1\t\t1\nPARAM\t70e9b810-1d94-4dd8-9c47-1223d10cfc91\tSiteDescription\tTEXT\t\t2\t1\t\t1\nPARAM\t3deb300a-d856-4192-b39b-4c22d5089f8b\tSiteObjectType\tTEXT\t\t2\t1\t\t1\nPARAM\td77d44de-e38b-4fa3-89b2-d41c46ef5250\tSiteLandTitleNumber\tTEXT\t\t2\t1\t\t1\nPARAM\t126288d7-a4be-40a8-ba93-8a9e8c05d33b\tBuildingLongName\tTEXT\t\t2\t1\t\t1\nPARAM\tbe201e5e-4c8c-4fad-9cce-2a93e39dbfd8\tBuildingDescription\tTEXT\t\t2\t1\t\t1\nPARAM\taea294d5-2859-41dc-a58e-5ac7192901be\tBuildingObjectType\tTEXT\t\t2\t1\t\t1\nPARAM\t71d092aa-0c92-4346-b2ad-2102c8e7710c\tIfcCategory\tTEXT\t\t2\t1\t\t1\nPARAM\t55914e74-79dd-4fef-9539-0c0631743aee\tIfcSingleMaterialOverride\tTEXT\t\t2\t1\tParameter to force a single material assignment when there is only a single material\t1\nPARAM\t298bfb8d-7c66-4d69-a493-14beb1bbfd4b\tIfcSpatialContainer\tTEXT\t\t2\t1\tParameter to override element containment\t1\nPARAM\t8f0306fa-4df3-479d-bc44-e55210e0d0e4\tConcealedCovering\tYESNO\t\t2\t1\t\t1\nPARAM\t8083a04d-d537-4089-acef-03c7d96ec873\tUserDefinedOperationType\tTEXT\t\t2\t1\t\t1\nPARAM\tabad1d39-6965-468f-8861-370e6b726678\tIfcSiteGUID\tTEXT\t\t2\t1\t\t1\nPARAM\t07dce341-b4e9-4507-8778-0e44321f516f\tPanelDepth\tLENGTH\t\t2\t1\t\t1\nPARAM\te766bd67-5383-4174-8e98-303739b9e623\tPanelWidth\tLENGTH\t\t2\t1\t\t1\nPARAM\t2f4e182a-b7d4-491c-ad28-488029ec2ad6\tLiningDepth\tLENGTH\t\t2\t1\t\t1\nPARAM\tac8bc243-5ae0-481f-bc3e-7ad204b07e10\tLiningThickness\tLENGTH\t\t2\t1\t\t1\nPARAM\t3452d5ee-008e-45b7-9ab0-1ef676436f99\tLiningOffset\tLENGTH\t\t2\t1\t\t1\nPARAM\t212a2526-8958-4b4f-8f3e-f757acb11cae\tThresholdDepth\tLENGTH\t\t2\t1\t\t1\nPARAM\t1db58254-34e4-437d-8057-beda0baec0e5\tThresholdThickness\tLENGTH\t\t2\t1\t\t1\nPARAM\t925fd679-94c4-4856-b141-3b89c84f6b09\tThresholdOffset\tLENGTH\t\t2\t1\t\t1\nPARAM\t72aec9c0-11fb-40db-b87a-2b85b5e9ac7d\tTransomOffset\tLENGTH\t\t2\t1\t\t1\nPARAM\t406efee5-8198-4298-a899-a9360be1a59e\tTransomThickness\tLENGTH\t\t2\t1\t\t1\nPARAM\t001fc06e-689f-4d30-ad4e-93cf89478d14\tCasingDepth\tLENGTH\t\t2\t1\t\t1\nPARAM\t2c0d426a-418c-4e6c-a9bb-eb99f02b359e\tCasingThickness\tLENGTH\t\t2\t1\t\t1\nPARAM\t90949a73-8b1e-48fa-bd97-90162e909594\tWINDOW_PARTITIONING_TYPE\tTEXT\t\t2\t1\t\t1\nPARAM\t2244f64f-eb85-4344-80ff-1341ae32ad13\tWINDOW_PREDEFINED_TYPE\tTEXT\t\t2\t1\t\t1\nPARAM\t2951370c-de30-489a-8d8a-be8efc74db42\tFirstTransomOffset\tLENGTH\t\t2\t1\t\t1\nPARAM\t9fa581b0-bab3-4926-9dce-f01cd8326b95\tSecondTransomOffset\tLENGTH\t\t2\t1\t\t1\nPARAM\t5d4d24aa-2147-40fb-b5f8-cae80691dfec\tMullionThickness\tLENGTH\t\t2\t1\t\t1\nPARAM\t97385d06-1f09-43f4-8d0d-d41809c2df9c\tFirstMullionOffset\tLENGTH\t\t2\t1\t\t1\nPARAM\ta766f4c3-f32f-4c85-b750-0cd593d23ad7\tSecondMullionOffset\tLENGTH\t\t2\t1\t\t1\nPARAM\tceb8fb2c-b22c-4165-925a-cac1d338cc4e\tIfcDistributionSystem\tTEXT\t\t2\t1\t\t1\nPARAM\t1134e004-9d8d-4a61-b471-a259078b4efd\tIfcDistributionSystemPredefinedType\tTEXT\t\t2\t1\t\t1\nPARAM\tb4e68375-fcc3-48f1-bc62-f6b913b20061\tIfcSystem\tTEXT\t\t2\t1\t\t1\nPARAM\t5ab20e24-77de-4128-98ea-1107031a2824\tIfcWindowStyle.ConstructionType\tTEXT\t\t2\t1\t\t1\nPARAM\t18f02068-e293-4868-bf1f-90deae7ae32b\tIfcDoorStyle.ConstructionType\tTEXT\t\t2\t1\t\t1\n"
  },
  {
    "path": "Source/RevitIFCTools/IFC Shared Parameters-RevitIFCBuiltIn_ALL_grouped.txt",
    "content": "# This is a Revit shared parameter file.\n# Do not edit manually.\n*META\tVERSION\tMINVERSION\nMETA\t2\t1\n*GROUP\tID\tNAME\n#\nGROUP\t3\tIfcDoorLiningProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1819e1b5-b30c-4ee7-aeb7-c49728ca1080\tIfcDoorLiningProperties.CasingDepth\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td7dcf29a-3d45-4622-bb3d-d35137e797a4\tIfcDoorLiningProperties.CasingThickness\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7a20e84a-2279-4e30-b1f9-6dee6db0af4d\tIfcDoorLiningProperties.LiningDepth\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tab84187c-4cb8-49ab-84d4-2bfbaccd5e1d\tIfcDoorLiningProperties.LiningOffset\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\t3a3a9dce-694d-4282-81dc-d1678dd6a29b\tIfcDoorLiningProperties.LiningThickness\tLENGTH\t\t3\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t7f77e6eb-aa91-4d00-bcb6-bd92bbaafca1\tIfcDoorLiningProperties.LiningToPanelOffsetX\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\tea0b9e23-706a-4647-aead-2dff355833f9\tIfcDoorLiningProperties.LiningToPanelOffsetY\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\t0377c451-7109-40f0-bbd2-3680d3d01cbe\tIfcDoorLiningProperties.ThresholdDepth\tLENGTH\t\t3\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t196d56dd-2282-404d-9ef1-81fe69861e4a\tIfcDoorLiningProperties.ThresholdOffset\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\t27ea51ec-bf1f-42ea-b398-7854c75cdfe4\tIfcDoorLiningProperties.ThresholdThickness\tLENGTH\t\t3\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t308e162b-cc7d-43a5-9647-5e2ef24074a1\tIfcDoorLiningProperties.TransomOffset\tLENGTH\t\t3\t1\tIfcLengthMeasure\t1\nPARAM\tccd51f01-82a2-4ecb-b270-18acdcd68839\tIfcDoorLiningProperties.TransomThickness\tLENGTH\t\t3\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t4\tIfcDoorPanelProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0abb240e-5e49-4377-b855-f79b9fb08e6f\tIfcDoorPanelProperties.PanelDepth\tLENGTH\t\t4\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0c136be1-a89f-43e0-bacf-59b47367d7c6\tIfcDoorPanelProperties.PanelOperation\tTEXT\t\t4\t1\tIfcLabel\t1\nPARAM\t7b0c2c29-96e1-458b-b8dd-7f84245ae619\tIfcDoorPanelProperties.PanelPosition\tTEXT\t\t4\t1\tIfcLabel\t1\nPARAM\ta25893b8-5bcb-409b-ae6a-d53a5208d93c\tIfcDoorPanelProperties.PanelWidth\tNUMBER\t\t4\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t5\tIfcPermeableCoveringProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te39ba2d0-bc07-4cd8-95d5-02a638306c93\tIfcPermeableCoveringProperties.FrameDepth\tLENGTH\t\t5\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3f62a550-f873-4a80-8bb8-bc7f39dc478a\tIfcPermeableCoveringProperties.FrameThickness\tLENGTH\t\t5\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t51880b37-693f-4f8c-995d-0100f9e00c5a\tIfcPermeableCoveringProperties.OperationType\tTEXT\t\t5\t1\tIfcLabel\t1\nPARAM\tbee1d59a-cdc0-46be-8be0-636150b459f8\tIfcPermeableCoveringProperties.PanelPosition\tTEXT\t\t5\t1\tIfcLabel\t1\n#\nGROUP\t6\tIfcReinforcementDefinitionProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tce94709f-cf4b-4403-af6b-7ee6326ef2d9\tIfcReinforcementDefinitionProperties.DefinitionType\tTEXT\t\t6\t1\tIfcLabel\t1\nPARAM\t1e38a24b-756e-410a-83e4-10f2e996d410\tIfcReinforcementDefinitionProperties.ReinforcementSectionDefinitions\tTEXT\t\t6\t1\tIfcLabel\t1\n#\nGROUP\t7\tIfcWindowLiningProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8a77e617-eed5-437a-951e-0cd57732bc1f\tIfcWindowLiningProperties.FirstMullionOffset\tNUMBER\t\t7\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t0f72231f-aec1-444a-bb4d-19f9bd68a518\tIfcWindowLiningProperties.FirstTransomOffset\tNUMBER\t\t7\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tcf2c5029-4b7a-4be7-b3cb-747d4c5c2525\tIfcWindowLiningProperties.LiningDepth\tLENGTH\t\t7\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2bd77976-58d7-4bb1-80a0-d4a8225e70b6\tIfcWindowLiningProperties.LiningOffset\tLENGTH\t\t7\t1\tIfcLengthMeasure\t1\nPARAM\t69dde29a-29e2-41ac-96c2-c494e35babf4\tIfcWindowLiningProperties.LiningThickness\tLENGTH\t\t7\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t23d62bb6-1ee9-431d-8a8d-47db42ca6c90\tIfcWindowLiningProperties.LiningToPanelOffsetX\tLENGTH\t\t7\t1\tIfcLengthMeasure\t1\nPARAM\t976ff59d-360f-4067-80ae-e09b1f215b3e\tIfcWindowLiningProperties.LiningToPanelOffsetY\tLENGTH\t\t7\t1\tIfcLengthMeasure\t1\nPARAM\ta010beae-7971-4a59-a999-5872bc891fd7\tIfcWindowLiningProperties.MullionThickness\tLENGTH\t\t7\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tb95c35eb-4ab0-43f1-94ea-b70e1ff420cd\tIfcWindowLiningProperties.SecondMullionOffset\tNUMBER\t\t7\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\tf241333c-173f-47f9-95e0-4baaae81dbbd\tIfcWindowLiningProperties.SecondTransomOffset\tNUMBER\t\t7\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t43cca468-66c2-491b-a36c-f891aafbbd83\tIfcWindowLiningProperties.TransomThickness\tLENGTH\t\t7\t1\tIfcNonNegativeLengthMeasure\t1\n#\nGROUP\t8\tIfcWindowPanelProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t02670d9e-cc6e-47b7-ab1d-bb61a515460d\tIfcWindowPanelProperties.FrameDepth\tLENGTH\t\t8\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t28649af1-d491-4ed6-98ce-d33f3a0e0650\tIfcWindowPanelProperties.FrameThickness\tLENGTH\t\t8\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc713faf1-20ad-485f-9448-6a6c05798a0d\tIfcWindowPanelProperties.OperationType\tTEXT\t\t8\t1\tIfcLabel\t1\nPARAM\t9a076e02-f029-4c39-aaa3-b35067475c67\tIfcWindowPanelProperties.PanelPosition\tTEXT\t\t8\t1\tIfcLabel\t1\n#\nGROUP\t9\tPset_ActionRequest\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf0b0c900-d1bc-11e1-8000-00215ad4efdf\tPset_ActionRequest.RequestComments\tTEXT\t\t9\t1\tIfcText\t1\nPARAM\t8c0bc2cf-c34c-46e5-8da4-4dc9d3268e70\tPset_ActionRequest.RequestDescription\tTEXT\t\t9\t1\tIfcText\t1\nPARAM\te098e980-d1bc-11e1-8000-00215ad4efdf\tPset_ActionRequest.RequestSourceLabel\tTEXT\t\t9\t1\tIfcLabel\t1\nPARAM\teabae800-d1bc-11e1-8000-00215ad4efdf\tPset_ActionRequest.RequestSourceName\tMULTILINETEXT\t\t9\t1\tIfcPerson\t1\nPARAM\t2db759d8-9ced-4100-8794-c73ba0aeff2f\tPset_ActionRequest.RequestSourceType\tTEXT\t\t9\t1\tPEnum_RequestSourceType\t1\nPARAM\t1e2f2317-f0c3-4ede-85a0-e9ea5ff680cd\tPset_ActionRequest.Status\tTEXT\t\t9\t1\tPEnum_RequestStatus\t1\n#\nGROUP\t10\tPset_ActorCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t06be8980-d1bd-11e1-8000-00215ad4efdf\tPset_ActorCommon.Category\tTEXT\t\t10\t1\tIfcLabel\t1\nPARAM\t00c8a880-d1bd-11e1-8000-00215ad4efdf\tPset_ActorCommon.NumberOfActors\tINTEGER\t\t10\t1\tIfcCountMeasure\t1\nPARAM\t0c1bd400-d1bd-11e1-8000-00215ad4efdf\tPset_ActorCommon.SkillLevel\tTEXT\t\t10\t1\tIfcLabel\t1\n#\nGROUP\t11\tPset_ActuatorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t16d66900-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorPHistory.Position\tMULTILINETEXT\t\t11\t1\tIfcTimeSeries\t1\nPARAM\t1b028680-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorPHistory.Quality\tMULTILINETEXT\t\t11\t1\tIfcTimeSeries\t1\nPARAM\t1dfd7700-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorPHistory.Status\tMULTILINETEXT\t\t11\t1\tIfcTimeSeries\t1\n#\nGROUP\t12\tPset_ActuatorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3469a249-4193-4603-a1c9-c402d5623291\tPset_ActuatorTypeCommon.Application\tTEXT\t\t12\t1\tPEnum_ActuatorApplication\t1\nPARAM\t42595380-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeCommon.FailPosition\tTEXT\t\t12\t1\tPEnum_FailPosition\t1\nPARAM\t4dac7f00-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeCommon.ManualOverride\tYESNO\t\t12\t1\tIfcBoolean\t1\nPARAM\t2a81cf80-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeCommon.Reference\tTEXT\t\t12\t1\tIfcIdentifier\t1\nPARAM\t2f468380-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeCommon.Status\tTEXT\t\t12\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t13\tPset_ActuatorTypeElectricActuator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t58ffaa80-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeElectricActuator.ActuatorInputPower\tNUMBER\t\t13\t1\tIfcPowerMeasure\t1\nPARAM\t5ef58b80-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeElectricActuator.ElectricActuatorType\tTEXT\t\t13\t1\tPEnum_ElectricActuatorType\t1\n#\nGROUP\t14\tPset_ActuatorTypeHydraulicActuator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7af92d00-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeHydraulicActuator.InputFlowrate\tNUMBER\t\t14\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t759be280-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeHydraulicActuator.InputPressure\tNUMBER\t\t14\t1\tIfcPressureMeasure\t1\n#\nGROUP\t15\tPset_ActuatorTypeLinearActuation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t877d8580-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeLinearActuation.Force\tNUMBER\t\t15\t1\tIfcForceMeasure\t1\nPARAM\t8cdad000-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeLinearActuation.Stroke\tLENGTH\t\t15\t1\tIfcLengthMeasure\t1\n#\nGROUP\t16\tPset_ActuatorTypePneumaticActuator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta24ffa00-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypePneumaticActuator.InputFlowrate\tNUMBER\t\t16\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t9c5a1900-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypePneumaticActuator.InputPressure\tNUMBER\t\t16\t1\tIfcPressureMeasure\t1\n#\nGROUP\t17\tPset_ActuatorTypeRotationalActuation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb8f65100-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeRotationalActuation.RangeAngle\tNUMBER\t\t17\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tb1cf4300-d1bd-11e1-8000-00215ad4efdf\tPset_ActuatorTypeRotationalActuation.Torque\tNUMBER\t\t17\t1\tIfcTorqueMeasure\t1\n#\nGROUP\t18\tPset_AirSideSystemInformation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0ecaf900-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.AirflowSensible\tNUMBER\t\t18\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tf3f88480-d1bd-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.AirSideSystemDistributionType\tTEXT\t\t18\t1\tPEnum_AirSideSystemDistributionType\t1\nPARAM\td62b1f80-d1bd-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.AirSideSystemType\tTEXT\t\t18\t1\tPEnum_AirSideSystemType\t1\nPARAM\t31f5a880-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.ApplianceDiversity\tNUMBER\t\t18\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t43d74b80-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.CoolingTemperatureDelta\tNUMBER\t\t18\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\td0353e80-d1bd-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.Description\tTEXT\t\t18\t1\tIfcLabel\t1\nPARAM\t14284380-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.EnergyGainSensible\tNUMBER\t\t18\t1\tIfcPowerMeasure\t1\nPARAM\t08d51800-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.EnergyGainTotal\tNUMBER\t\t18\t1\tIfcPowerMeasure\t1\nPARAM\t1ab6bb00-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.EnergyLoss\tNUMBER\t\t18\t1\tIfcPowerMeasure\t1\nPARAM\t4fc30d80-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.FanPower\tNUMBER\t\t18\t1\tIfcPowerMeasure\t1\nPARAM\t3de16a80-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.HeatingTemperatureDelta\tNUMBER\t\t18\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t2609e680-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.InfiltrationDiversitySummer\tNUMBER\t\t18\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t2b673100-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.InfiltrationDiversityWinter\tNUMBER\t\t18\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t20ac9c00-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.LightingDiversity\tNUMBER\t\t18\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t37eb8980-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.LoadSafetyFactor\tNUMBER\t\t18\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc9a6c700-d1bd-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.Name\tTEXT\t\t18\t1\tIfcLabel\t1\nPARAM\t0377cd80-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.TotalAirflow\tNUMBER\t\t18\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t49cd2c80-d1be-11e1-8000-00215ad4efdf\tPset_AirSideSystemInformation.Ventilation\tNUMBER\t\t18\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t19\tPset_AirTerminalBoxPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t68cbbe80-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxPHistory.AirflowCurve\tMULTILINETEXT\t\t19\t1\tIfcTimeSeries\t1\nPARAM\t61a4b080-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxPHistory.AtmosphericPressure\tMULTILINETEXT\t\t19\t1\tIfcTimeSeries\t1\nPARAM\t5d789300-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxPHistory.DamperPosition\tMULTILINETEXT\t\t19\t1\tIfcTimeSeries\t1\nPARAM\t65383780-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxPHistory.Sound\tMULTILINETEXT\t\t19\t1\tIfcTimeSeries\t1\n#\nGROUP\t20\tPset_AirTerminalBoxTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8c8f0480-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.AirflowRateRange\tMULTILINETEXT\t\t20\t1\tPropertyBoundedValue\t1\nPARAM\t99135d00-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.AirPressureRange\tMULTILINETEXT\t\t20\t1\tPropertyBoundedValue\t1\nPARAM\ta7617900-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.ArrangementType\tTEXT\t\t20\t1\tPEnum_AirTerminalBoxArrangementType\t1\nPARAM\td37cfa00-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.HasFan\tYESNO\t\t20\t1\tIfcBoolean\t1\nPARAM\tcd871900-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.HasReturnAir\tYESNO\t\t20\t1\tIfcBoolean\t1\nPARAM\tc829ce80-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.HasSoundAttenuator\tYESNO\t\t20\t1\tIfcBoolean\t1\nPARAM\te4c60680-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.HousingThickness\tLENGTH\t\t20\t1\tIfcLengthMeasure\t1\nPARAM\t2541b902-afca-4f97-b050-2df42d1f859e\tPset_AirTerminalBoxTypeCommon.Material\tMULTILINETEXT\t\t20\t1\tIfcMaterial\t1\nPARAM\ta16b9800-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.NominalAirFlowRate\tNUMBER\t\t20\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tdf68bc00-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.NominalDamperDiameter\tLENGTH\t\t20\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td972db00-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.NominalInletAirPressure\tNUMBER\t\t20\t1\tIfcPressureMeasure\t1\nPARAM\teabbe780-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.OperationTemperatureRange\tMULTILINETEXT\t\t20\t1\tPropertyBoundedValue\t1\nPARAM\t76814400-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.Reference\tTEXT\t\t20\t1\tIfcIdentifier\t1\nPARAM\tb5af9500-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.ReheatType\tTEXT\t\t20\t1\tPEnum_AirTerminalBoxReheatType\t1\nPARAM\tf1e2f580-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.ReturnAirFractionRange\tMULTILINETEXT\t\t20\t1\tPropertyBoundedValue\t1\nPARAM\t7d0fbb80-d1be-11e1-8000-00215ad4efdf\tPset_AirTerminalBoxTypeCommon.Status\tTEXT\t\t20\t1\tPEnum_ElementStatus\t1\nPARAM\t6ed2531a-bc2f-4092-a9e9-1372f7805462\tPset_AirTerminalBoxTypeCommon.Weight\tNUMBER\t\t20\t1\tIfcMassMeasure\t1\n#\nGROUP\t21\tPset_AirTerminalOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t89dd48d1-b318-4f25-99c1-2f06ce904666\tPset_AirTerminalOccurrence.AirFlowRate\tNUMBER\t\t21\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t00311180-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalOccurrence.AirflowType\tTEXT\t\t21\t1\tPEnum_AirTerminalAirflowType\t1\nPARAM\t0fb05a80-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalOccurrence.Location\tTEXT\t\t21\t1\tPEnum_AirTerminalLocation\t1\n#\nGROUP\t22\tPset_AirTerminalPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2b1b6580-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.AirFlowRate\tMULTILINETEXT\t\t22\t1\tIfcTimeSeries\t1\nPARAM\t46867080-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.CenterlineAirVelocity\tMULTILINETEXT\t\t22\t1\tPropertyTableValue\t1\nPARAM\t3d959f00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.InductionRatio\tMULTILINETEXT\t\t22\t1\tPropertyTableValue\t1\nPARAM\t2eaeec80-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.NeckAirVelocity\tMULTILINETEXT\t\t22\t1\tIfcTimeSeries\t1\nPARAM\t3a9aae80-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.PressureDrop\tMULTILINETEXT\t\t22\t1\tIfcTimeSeries\t1\nPARAM\t366e9100-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.SupplyAirTemperatureCooling\tMULTILINETEXT\t\t22\t1\tIfcTimeSeries\t1\nPARAM\t32db0a00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalPHistory.SupplyAirTemperatureHeating\tMULTILINETEXT\t\t22\t1\tIfcTimeSeries\t1\n#\nGROUP\t23\tPset_AirTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tddebc380-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.AirDiffusionPerformanceIndex\tNUMBER\t\t23\t1\tIfcReal\t1\nPARAM\tb72d8d00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.AirFlowrateRange\tMULTILINETEXT\t\t23\t1\tPropertyBoundedValue\t1\nPARAM\t505ca380-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.AirFlowrateVersusFlowControlElement\tMULTILINETEXT\t\t23\t1\tPropertyTableValue\t1\nPARAM\t1ab7ba80-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.CoreSetHorizontal\tNUMBER\t\t23\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t1f7c6e80-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.CoreSetVertical\tNUMBER\t\t23\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t070c5400-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.CoreType\tTEXT\t\t23\t1\tPEnum_AirTerminalCoreType\t1\nPARAM\tc6acd600-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.DischargeDirection\tTEXT\t\t23\t1\tPEnum_AirTerminalDischargeDirection\t1\nPARAM\t49ce2c00-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.EffectiveArea\tAREA\t\t23\t1\tIfcAreaMeasure\t1\nPARAM\t7b92c300-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.FaceType\tTEXT\t\t23\t1\tPEnum_AirTerminalFaceType\t1\nPARAM\tf065fd00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.FinishColor\tTEXT\t\t23\t1\tIfcLabel\t1\nPARAM\te3490e00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.FinishType\tTEXT\t\t23\t1\tPEnum_AirTerminalFinishType\t1\nPARAM\t2a370380-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.FlowControlType\tTEXT\t\t23\t1\tPEnum_AirTerminalFlowControlType\t1\nPARAM\ta250f980-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.FlowPattern\tTEXT\t\t23\t1\tPEnum_AirTerminalFlowPattern\t1\nPARAM\t25724f80-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.HasIntegralControl\tYESNO\t\t23\t1\tIfcBoolean\t1\nPARAM\t39b64c80-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.HasSoundAttenuator\tYESNO\t\t23\t1\tIfcBoolean\t1\nPARAM\t3f139700-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.HasThermalInsulation\tYESNO\t\t23\t1\tIfcBoolean\t1\nPARAM\t33956234-46ca-44bc-b8dc-5a3cb86a4cbe\tPset_AirTerminalTypeCommon.Material\tMULTILINETEXT\t\t23\t1\tIfcMaterial\t1\nPARAM\tf6f47480-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.MountingType\tTEXT\t\t23\t1\tPEnum_AirTerminalMountingType\t1\nPARAM\t4470e180-d1c0-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.NeckArea\tAREA\t\t23\t1\tIfcAreaMeasure\t1\nPARAM\t9c5b1880-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.NumberOfSlots\tINTEGER\t\t23\t1\tIfcInteger\t1\nPARAM\t5605b980-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.Reference\tTEXT\t\t23\t1\tIfcIdentifier\t1\nPARAM\t6b7ae380-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.Shape\tTEXT\t\t23\t1\tPEnum_AirTerminalShape\t1\nPARAM\t96653780-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.SlotLength\tLENGTH\t\t23\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9107ed00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.SlotWidth\tLENGTH\t\t23\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5c943100-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.Status\tTEXT\t\t23\t1\tPEnum_ElementStatus\t1\nPARAM\tbe549b00-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.TemperatureRange\tMULTILINETEXT\t\t23\t1\tPropertyBoundedValue\t1\nPARAM\td4faf200-d1bf-11e1-8000-00215ad4efdf\tPset_AirTerminalTypeCommon.ThrowLength\tLENGTH\t\t23\t1\tIfcLengthMeasure\t1\nPARAM\tc643b188-6fcb-4295-afe2-f8b2a8ec4741\tPset_AirTerminalTypeCommon.Weight\tNUMBER\t\t23\t1\tIfcMassMeasure\t1\n#\nGROUP\t24\tPset_AirTerminalTypeRectangular\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf8e35078-32bf-4ace-a622-cbdf35eaeafd\tPset_AirTerminalTypeRectangular.FaceType\tTEXT\t\t24\t1\tPEnum_AirTerminalFaceType\t1\n#\nGROUP\t25\tPset_AirTerminalTypeRound\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3c0c07b7-7b11-4baa-8bf6-21f49fbb96e4\tPset_AirTerminalTypeRound.FaceType\tTEXT\t\t25\t1\tPEnum_AirTerminalFaceType\t1\n#\nGROUP\t26\tPset_AirTerminalTypeSlot\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf87a0706-b001-40e0-a33e-461e74301bb1\tPset_AirTerminalTypeSlot.NumberOfSlots\tINTEGER\t\t26\t1\tIfcInteger\t1\nPARAM\tcc47ea83-7381-4059-ad6c-6c06ff1d0a31\tPset_AirTerminalTypeSlot.SlotLength\tLENGTH\t\t26\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9d5cd335-d12b-4a71-b8c1-3a55bb99c000\tPset_AirTerminalTypeSlot.SlotWidth\tLENGTH\t\t26\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t27\tPset_AirTerminalTypeSquare\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t27497358-c7b5-4532-82e1-83b21f708b10\tPset_AirTerminalTypeSquare.FaceType\tTEXT\t\t27\t1\tPEnum_AirTerminalFaceType\t1\n#\nGROUP\t28\tPset_AirToAirHeatRecoveryPHist\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t27eb9571-b1ec-4dc8-878d-a3ed3222b6ee\tPset_AirToAirHeatRecoveryPHist.AirPressureDropCurves\tNUMBER\t\t28\t1\tIfcReal\t1\nPARAM\tefb4407f-31fc-40ec-97bb-736b463d3f13\tPset_AirToAirHeatRecoveryPHist.DefrostTemperatureEffectiveness\tNUMBER\t\t28\t1\tIfcReal\t1\nPARAM\td57b9973-d2f5-46d3-a06a-85cf0c08ead7\tPset_AirToAirHeatRecoveryPHist.HumidityEffectiveness\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\ta152c3e4-634a-4107-a4de-2a272c18b9f9\tPset_AirToAirHeatRecoveryPHist.LatentHeatTransferRate\tNUMBER\t\t28\t1\tIfcReal\t1\nPARAM\t3e9c1eb9-4716-48ad-8230-53b12de5f41e\tPset_AirToAirHeatRecoveryPHist.SensibleEffectiveness\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t4f028650-adb3-49c1-a52b-22d477ed500f\tPset_AirToAirHeatRecoveryPHist.SensibleEffectivenessTable\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t007eac23-159e-439f-99bb-e3ba5aec66c1\tPset_AirToAirHeatRecoveryPHist.SensibleHeatTransferRate\tNUMBER\t\t28\t1\tIfcReal\t1\nPARAM\t9b52b73c-93dd-4a4c-9c07-df156aaca8fc\tPset_AirToAirHeatRecoveryPHist.TemperatureEffectiveness\tNUMBER\t\t28\t1\tIfcReal\t1\nPARAM\tabac66cb-607a-462e-b17e-797852a90084\tPset_AirToAirHeatRecoveryPHist.TotalEffectiveness\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t62082fd3-1099-4f12-9633-2c49087c885c\tPset_AirToAirHeatRecoveryPHist.TotalEffectivenessTable\tTEXT\t\t28\t1\tIfcLabel\t1\nPARAM\t4cb9f2c4-2567-44c2-b63c-dce12a8e9156\tPset_AirToAirHeatRecoveryPHist.TotalHeatTransferRate\tNUMBER\t\t28\t1\tIfcReal\t1\n#\nGROUP\t29\tPset_AirToAirHeatRecoveryPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t86018c80-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.AirPressureDropCurves\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\t6c604500-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.DefrostTemperatureEffectiveness\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\t6f5b3580-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.HumidityEffectiveness\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\t77b37080-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.LatentHeatTransferRate\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\t60748300-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.SensibleEffectiveness\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\t7eda7e80-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.SensibleEffectivenessTable\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\t73875300-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.SensibleHeatTransferRate\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\t679b9100-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.TemperatureEffectiveness\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\t64080a00-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.TotalEffectiveness\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\t826e0580-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.TotalEffectivenessTable\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\nPARAM\t7b46f780-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryPHistory.TotalHeatTransferRate\tMULTILINETEXT\t\t29\t1\tIfcTimeSeries\t1\n#\nGROUP\t30\tPset_AirToAirHeatRecoveryTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb77a5800-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.HasDefrost\tYESNO\t\t30\t1\tIfcBoolean\t1\nPARAM\ta893a580-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.HeatTransferType\tTEXT\t\t30\t1\tPEnum_HeatTransferType\t1\nPARAM\t346af719-a0a9-4f7f-a9ab-851e048f1fe9\tPset_AirToAirHeatRecoveryTypeCommon.HeatTransferTypeEnum\tTEXT\t\t30\t1\tPEnum_AirToAirHeatTransferHeatTransferType\t1\nPARAM\tf73bc628-554c-4f5b-b61a-17163f69fd5b\tPset_AirToAirHeatRecoveryTypeCommon.MediaMaterial\tMULTILINETEXT\t\t30\t1\tIfcMaterial\t1\nPARAM\tbea16600-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.OperationalTemperatureRange\tMULTILINETEXT\t\t30\t1\tPropertyBoundedValue\t1\nPARAM\td1b43600-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.PrimaryAirflowRateRange\tMULTILINETEXT\t\t30\t1\tPropertyBoundedValue\t1\nPARAM\t9285e500-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.Reference\tTEXT\t\t30\t1\tIfcIdentifier\t1\nPARAM\tdb3d9e00-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.SecondaryAirflowRateRange\tMULTILINETEXT\t\t30\t1\tPropertyBoundedValue\t1\nPARAM\t987bc600-d1c0-11e1-8000-00215ad4efdf\tPset_AirToAirHeatRecoveryTypeCommon.Status\tTEXT\t\t30\t1\tPEnum_ElementStatus\t1\nPARAM\t4ebb5f4f-ca9e-4b83-b165-2789d7056674\tPset_AirToAirHeatRecoveryTypeCommon.Weight\tNUMBER\t\t30\t1\tIfcMassMeasure\t1\n#\nGROUP\t31\tPset_AlarmPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf90b0300-d1c0-11e1-8000-00215ad4efdf\tPset_AlarmPHistory.Acknowledge\tMULTILINETEXT\t\t31\t1\tIfcTimeSeries\t1\nPARAM\tef819b00-d1c0-11e1-8000-00215ad4efdf\tPset_AlarmPHistory.Condition\tMULTILINETEXT\t\t31\t1\tIfcTimeSeries\t1\nPARAM\tea245080-d1c0-11e1-8000-00215ad4efdf\tPset_AlarmPHistory.Enabled\tMULTILINETEXT\t\t31\t1\tIfcTimeSeries\t1\nPARAM\tf3adb880-d1c0-11e1-8000-00215ad4efdf\tPset_AlarmPHistory.Severity\tMULTILINETEXT\t\t31\t1\tIfcTimeSeries\t1\nPARAM\tfc9e8a00-d1c0-11e1-8000-00215ad4efdf\tPset_AlarmPHistory.User\tMULTILINETEXT\t\t31\t1\tIfcTimeSeries\t1\n#\nGROUP\t32\tPset_AlarmTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t222b9380-d1c1-11e1-8000-00215ad4efdf\tPset_AlarmTypeCommon.Condition\tMULTILINETEXT\t\t32\t1\tPropertyTableValue\t1\nPARAM\t088a4c00-d1c1-11e1-8000-00215ad4efdf\tPset_AlarmTypeCommon.Reference\tTEXT\t\t32\t1\tIfcIdentifier\t1\nPARAM\t0e802d00-d1c1-11e1-8000-00215ad4efdf\tPset_AlarmTypeCommon.Status\tTEXT\t\t32\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t33\tPset_AnalogInput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfa6452bc-f5fc-4e69-90e8-89a36533dff7\tPset_AnalogInput.Deadband\tNUMBER\t\t33\t1\tIfcReal\t1\nPARAM\tb89abf03-3a4a-45f4-933d-8d7dc547605f\tPset_AnalogInput.EventEnable\tTEXT\t\t33\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\t16f1b03c-c21f-45b6-824b-ad86b447ce68\tPset_AnalogInput.HighLimit\tNUMBER\t\t33\t1\tIfcReal\t1\nPARAM\t1aeb83e6-5776-4946-9070-0b95b1b800c0\tPset_AnalogInput.HighLimitEnable\tYESNO\t\t33\t1\tIfcBoolean\t1\nPARAM\t941278cb-7b6a-4457-994b-b3b168148654\tPset_AnalogInput.LowLimit\tNUMBER\t\t33\t1\tIfcReal\t1\nPARAM\tf4913bac-ae18-475a-818d-8e27a1d3cbbe\tPset_AnalogInput.LowLimitEnable\tYESNO\t\t33\t1\tIfcBoolean\t1\nPARAM\t116a96bd-30ce-4ac9-8252-f8c05867fbd7\tPset_AnalogInput.NotifyType\tTEXT\t\t33\t1\tPEnum_BACnetNotifyType\t1\n#\nGROUP\t34\tPset_AnalogOutput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5f8d29eb-3002-407d-b4aa-7bef6e0f3848\tPset_AnalogOutput.Deadband\tNUMBER\t\t34\t1\tIfcReal\t1\nPARAM\tb570c8a8-bf39-4bce-b34c-2584b56b22fa\tPset_AnalogOutput.EventEnable\tTEXT\t\t34\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\t5af76e92-19df-4973-95bb-a92ed243cf82\tPset_AnalogOutput.HighLimit\tNUMBER\t\t34\t1\tIfcReal\t1\nPARAM\t1f1acbc3-10ac-4f71-b04e-69aebf2f6a50\tPset_AnalogOutput.HighLimitEnable\tYESNO\t\t34\t1\tIfcBoolean\t1\nPARAM\t9376633f-755e-4875-9be2-a4cf2b3c6fe7\tPset_AnalogOutput.LowLimit\tNUMBER\t\t34\t1\tIfcReal\t1\nPARAM\t58d9b0f5-b4ea-4953-9d49-46fd6d8fb3b0\tPset_AnalogOutput.LowLimitEnable\tYESNO\t\t34\t1\tIfcBoolean\t1\nPARAM\t696e2703-b189-49ae-9014-2cab876d3b01\tPset_AnalogOutput.NotifyType\tTEXT\t\t34\t1\tPEnum_BACnetNotifyType\t1\n#\nGROUP\t35\tPset_AnnotationContourLine\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t340d3680-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationContourLine.ContourValue\tLENGTH\t\t35\t1\tIfcLengthMeasure\t1\n#\nGROUP\t36\tPset_AnnotationLineOfSight\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t51da9b80-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationLineOfSight.RoadVisibleDistanceLeft\tLENGTH\t\t36\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t57d07c80-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationLineOfSight.RoadVisibleDistanceRight\tLENGTH\t\t36\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t41c2bc00-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationLineOfSight.SetbackDistance\tLENGTH\t\t36\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t47b89d00-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationLineOfSight.VisibleAngleLeft\tANGLE\t\t36\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t4d15e780-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationLineOfSight.VisibleAngleRight\tANGLE\t\t36\t1\tIfcPositivePlaneAngleMeasure\t1\n#\nGROUP\t37\tPset_AnnotationSurveyArea\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7cc4ef80-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationSurveyArea.AccuracyQualityExpected\tNUMBER\t\t37\t1\tIfcRatioMeasure\t1\nPARAM\t76cf0e80-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationSurveyArea.AccuracyQualityObtained\tNUMBER\t\t37\t1\tIfcRatioMeasure\t1\nPARAM\t63bc3e80-d1c1-11e1-8000-00215ad4efdf\tPset_AnnotationSurveyArea.AcquisitionMethod\tTEXT\t\t37\t1\tPEnum_AcquisitionMethod\t1\n#\nGROUP\t38\tPset_Asset\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8a7a7500-d1c1-11e1-8000-00215ad4efdf\tPset_Asset.AssetAccountingType\tTEXT\t\t38\t1\tPEnum_AssetAccountingType\t1\nPARAM\ta847da00-d1c1-11e1-8000-00215ad4efdf\tPset_Asset.AssetInsuranceType\tTEXT\t\t38\t1\tPEnum_AssetInsuranceType\t1\nPARAM\t99f9be00-d1c1-11e1-8000-00215ad4efdf\tPset_Asset.AssetTaxType\tTEXT\t\t38\t1\tPEnum_AssetTaxType\t1\n#\nGROUP\t39\tPset_AudioVisualAppliancePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcad9f300-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualAppliancePHistory.AudioVolume\tMULTILINETEXT\t\t39\t1\tIfcTimeSeries\t1\nPARAM\tc7466c00-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualAppliancePHistory.MediaContent\tMULTILINETEXT\t\t39\t1\tIfcTimeSeries\t1\nPARAM\tc31a4e80-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualAppliancePHistory.MediaSource\tMULTILINETEXT\t\t39\t1\tIfcTimeSeries\t1\nPARAM\tbd246d80-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualAppliancePHistory.PowerState\tMULTILINETEXT\t\t39\t1\tIfcTimeSeries\t1\n#\nGROUP\t40\tPset_AudioVisualApplianceTypeAmplifier\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td7f6e200-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeAmplifier.AmplifierType\tTEXT\t\t40\t1\tPEnum_AudioVisualAmplifierType\t1\nPARAM\te644fe00-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeAmplifier.AudioAmplification\tMULTILINETEXT\t\t40\t1\tPropertyTableValue\t1\nPARAM\tee9d3900-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeAmplifier.AudioMode\tMULTILINETEXT\t\t40\t1\tPropertyTableValue\t1\n#\nGROUP\t41\tPset_AudioVisualApplianceTypeCamera\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfeb51880-d1c1-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.CameraType\tTEXT\t\t41\t1\tPEnum_AudioVisualCameraType\t1\nPARAM\t0e346180-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.IsOutdoors\tYESNO\t\t41\t1\tIfcBoolean\t1\nPARAM\t34f29800-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.PanHorizontal\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\t2d32f380-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.PanTiltZoomPreset\tMULTILINETEXT\t\t41\t1\tPropertyTableValue\t1\nPARAM\t3c19a600-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.PanVertical\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\t42a81d80-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.TiltHorizontal\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\t489dfe80-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.TiltVertical\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\nPARAM\t25734f00-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.VideoCaptureInterval\tMULTILINETEXT\t\t41\t1\tPropertyTableValue\t1\nPARAM\t18eef680-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.VideoResolutionHeight\tINTEGER\t\t41\t1\tIfcInteger\t1\nPARAM\t1e4c4100-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.VideoResolutionMode\tMULTILINETEXT\t\t41\t1\tPropertyTableValue\t1\nPARAM\t1391ac00-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.VideoResolutionWidth\tINTEGER\t\t41\t1\tIfcInteger\t1\nPARAM\t4e93df80-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCamera.Zoom\tMULTILINETEXT\t\t41\t1\tPropertyBoundedValue\t1\n#\nGROUP\t42\tPset_AudioVisualApplianceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t797e3380-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCommon.AudioVolume\tMULTILINETEXT\t\t42\t1\tPropertyTableValue\t1\nPARAM\t7125f880-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCommon.MediaSource\tMULTILINETEXT\t\t42\t1\tPropertyTableValue\t1\nPARAM\t5bb0ce80-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCommon.Reference\tTEXT\t\t42\t1\tIfcIdentifier\t1\nPARAM\t61a6af80-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeCommon.Status\tTEXT\t\t42\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t43\tPset_AudioVisualApplianceTypeDisplay\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf6111200-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.AudioMode\tMULTILINETEXT\t\t43\t1\tPropertyTableValue\t1\nPARAM\tab8f9580-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.Brightness\tNUMBER\t\t43\t1\tIfcIlluminanceMeasure\t1\nPARAM\tb0ece000-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.ContrastRatio\tNUMBER\t\t43\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta6cae180-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.DisplayHeight\tLENGTH\t\t43\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8864e600-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.DisplayType\tTEXT\t\t43\t1\tPEnum_AudioVisualDisplayType\t1\nPARAM\ta03c6a00-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.DisplayWidth\tLENGTH\t\t43\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t99adf280-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.NominalSize\tLENGTH\t\t43\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb77b5780-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.RefreshRate\tNUMBER\t\t43\t1\tIfcFrequencyMeasure\t1\nPARAM\tbc400b80-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.TouchScreen\tTEXT\t\t43\t1\tPEnum_AudioVisualDisplayTouchScreen\t1\nPARAM\tedb8d700-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.VideoCaptionMode\tMULTILINETEXT\t\t43\t1\tPropertyTableValue\t1\nPARAM\td2e66280-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.VideoResolutionHeight\tINTEGER\t\t43\t1\tIfcInteger\t1\nPARAM\tda0d7080-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.VideoResolutionMode\tMULTILINETEXT\t\t43\t1\tPropertyTableValue\t1\nPARAM\tcbbf5480-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.VideoResolutionWidth\tINTEGER\t\t43\t1\tIfcInteger\t1\nPARAM\te42f6f00-d1c2-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeDisplay.VideoScaleMode\tMULTILINETEXT\t\t43\t1\tPropertyTableValue\t1\n#\nGROUP\t44\tPset_AudioVisualApplianceTypePlayer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1214b380-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypePlayer.PlayerMediaEject\tYESNO\t\t44\t1\tIfcBoolean\t1\nPARAM\t18a32b00-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypePlayer.PlayerMediaFormat\tMULTILINETEXT\t\t44\t1\tPropertyTableValue\t1\nPARAM\t04f7c480-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypePlayer.PlayerType\tTEXT\t\t44\t1\tPEnum_AudioVisualPlayerType\t1\n#\nGROUP\t45\tPset_AudioVisualApplianceTypeProjector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t28bb0a80-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeProjector.ProjectorType\tTEXT\t\t45\t1\tPEnum_AudioVisualProjectorType\t1\nPARAM\t54d68b80-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeProjector.VideoCaptionMode\tMULTILINETEXT\t\t45\t1\tPropertyTableValue\t1\nPARAM\t3a9cad80-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeProjector.VideoResolutionHeight\tINTEGER\t\t45\t1\tIfcInteger\t1\nPARAM\t412b2500-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeProjector.VideoResolutionMode\tMULTILINETEXT\t\t45\t1\tPropertyTableValue\t1\nPARAM\t34a6cc80-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeProjector.VideoResolutionWidth\tINTEGER\t\t45\t1\tIfcInteger\t1\nPARAM\t4b4d2380-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeProjector.VideoScaleMode\tMULTILINETEXT\t\t45\t1\tPropertyTableValue\t1\n#\nGROUP\t46\tPset_AudioVisualApplianceTypeReceiver\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a639500-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeReceiver.AudioAmplification\tMULTILINETEXT\t\t46\t1\tPropertyTableValue\t1\nPARAM\t83546680-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeReceiver.AudioMode\tMULTILINETEXT\t\t46\t1\tPropertyTableValue\t1\nPARAM\t6a4bb580-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeReceiver.ReceiverType\tTEXT\t\t46\t1\tPEnum_AudioVisualReceiverType\t1\n#\nGROUP\t47\tPset_AudioVisualApplianceTypeSpeaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc0b8f400-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeSpeaker.FrequencyResponse\tMULTILINETEXT\t\t47\t1\tPropertyTableValue\t1\nPARAM\tc7e00200-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeSpeaker.Impedence\tNUMBER\t\t47\t1\tIfcFrequencyMeasure\t1\nPARAM\tb860b900-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeSpeaker.SpeakerDriverSize\tMULTILINETEXT\t\t47\t1\tPropertyTableValue\t1\nPARAM\ta717ac80-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeSpeaker.SpeakerMounting\tTEXT\t\t47\t1\tPEnum_AudioVisualSpeakerMounting\t1\nPARAM\t949d7300-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeSpeaker.SpeakerType\tTEXT\t\t47\t1\tPEnum_AudioVisualSpeakerType\t1\n#\nGROUP\t48\tPset_AudioVisualApplianceTypeTuner\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tea721b00-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeTuner.TunerChannel\tMULTILINETEXT\t\t48\t1\tPropertyTableValue\t1\nPARAM\tf231bf80-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeTuner.TunerFrequency\tMULTILINETEXT\t\t48\t1\tPropertyBoundedValue\t1\nPARAM\te219e000-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeTuner.TunerMode\tMULTILINETEXT\t\t48\t1\tPropertyTableValue\t1\nPARAM\td3cbc400-d1c3-11e1-8000-00215ad4efdf\tPset_AudioVisualApplianceTypeTuner.TunerType\tTEXT\t\t48\t1\tPEnum_AudioVisualTunerType\t1\n#\nGROUP\t49\tPset_BeamCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t38871e80-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.FireRating\tTEXT\t\t49\t1\tIfcLabel\t1\nPARAM\t286f3f00-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.IsExternal\tYESNO\t\t49\t1\tIfcBoolean\t1\nPARAM\t33c26a80-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.LoadBearing\tYESNO\t\t49\t1\tIfcBoolean\t1\nPARAM\t04abf900-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.Reference\tTEXT\t\t49\t1\tIfcIdentifier\t1\nPARAM\t23aa8b00-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.Roll\tNUMBER\t\t49\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t1ee5d700-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.Slope\tNUMBER\t\t49\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t19888c80-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.Span\tLENGTH\t\t49\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0970ad00-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.Status\tTEXT\t\t49\t1\tPEnum_ElementStatus\t1\nPARAM\t2f964d00-d1c4-11e1-8000-00215ad4efdf\tPset_BeamCommon.ThermalTransmittance\tNUMBER\t\t49\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t50\tPset_BinaryInput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2c503c85-1756-40ab-adb2-28f5f5ae7d83\tPset_BinaryInput.AckedTransitions\tTEXT\t\t50\t1\tPEnum_BACnetAckedTransitionsType\t1\nPARAM\t1a3e38ee-c9c2-4859-8a45-84d996b2b134\tPset_BinaryInput.ActiveText\tTEXT\t\t50\t1\tIfcText\t1\nPARAM\t5b202d39-7855-45db-a4f2-856632d25bca\tPset_BinaryInput.EventEnable\tTEXT\t\t50\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\t42343ab0-3652-4b37-ac7d-f6bf58b18e9f\tPset_BinaryInput.FeedbackValue\tTEXT\t\t50\t1\tPEnum_BACnetFeedbackValueType\t1\nPARAM\t22a15ce5-b93a-4076-b27c-92c101df0f56\tPset_BinaryInput.InactiveText\tTEXT\t\t50\t1\tIfcText\t1\nPARAM\t70d91f81-223b-4340-aa24-7ddb34225af9\tPset_BinaryInput.MinimumOffTime\tMULTILINETEXT\t\t50\t1\tIfcLocalTime\t1\nPARAM\t693f586d-f51b-44f8-8829-cc0597359530\tPset_BinaryInput.MinimumOnTime\tMULTILINETEXT\t\t50\t1\tIfcLocalTime\t1\nPARAM\td085e864-df23-44ce-81d5-265d936c84a9\tPset_BinaryInput.Polarity\tTEXT\t\t50\t1\tPEnum_PolarityEnum\t1\n#\nGROUP\t51\tPset_BinaryOutput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t55bc2a15-2281-4163-8c2f-c04c81ee3660\tPset_BinaryOutput.AckedTransitions\tTEXT\t\t51\t1\tPEnum_BACnetAckedTransitionsType\t1\nPARAM\t72ebf169-14ae-4fc9-bc57-0ab5a89b467b\tPset_BinaryOutput.ActiveText\tTEXT\t\t51\t1\tIfcText\t1\nPARAM\t3bb0add6-67f9-4b5f-bf8c-8ee25ec3acaa\tPset_BinaryOutput.AlarmValue\tTEXT\t\t51\t1\tPEnum_BACnetAlarmValueType\t1\nPARAM\te2d0b69b-dbd9-44d1-9211-5f6781c79da2\tPset_BinaryOutput.EventEnable\tTEXT\t\t51\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\t0fff6369-ff2a-4402-bbe6-6e4a3e1e74cb\tPset_BinaryOutput.InactiveText\tTEXT\t\t51\t1\tIfcText\t1\nPARAM\t8b3e2a79-7f23-4d65-ad66-4ff1f264f923\tPset_BinaryOutput.Polarity\tTEXT\t\t51\t1\tPEnum_PolarityEnum\t1\n#\nGROUP\t52\tPset_BoilerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5bb1ce00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.AuxiliaryEnergyConsumption\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t4a68c180-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.CombustionEfficiency\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t50f73900-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.CombustionTemperature\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t43da4a00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.EnergySourceConsumption\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t56548380-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.Load\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t476dd100-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.OperationalEfficiency\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t53f22980-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.PartLoadRatio\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t594f7400-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.PrimaryEnergyConsumption\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\nPARAM\t4dfc4880-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerPHistory.WorkingPressure\tMULTILINETEXT\t\t52\t1\tIfcTimeSeries\t1\n#\nGROUP\t53\tPset_BoilerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tadf2ef00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.EnergySource\tTEXT\t\t53\t1\tPEnum_EnergySource\t1\nPARAM\t63baac0e-81a6-4be9-bff9-6530b2938844\tPset_BoilerTypeCommon.HeatOutput\tMULTILINETEXT\t\t53\t1\tPropertyListValue\t1\nPARAM\t84d25e80-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.HeatTransferSurfaceArea\tAREA\t\t53\t1\tIfcAreaMeasure\t1\nPARAM\t987dc500-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.IsWaterStorageHeater\tYESNO\t\t53\t1\tIfcBoolean\t1\nPARAM\t34aa656c-0810-4646-961b-c5f720cbdbf6\tPset_BoilerTypeCommon.Material\tMULTILINETEXT\t\t53\t1\tIfcMaterial\t1\nPARAM\t63a1c310-c82b-47a2-91b0-87e84fa76847\tPset_BoilerTypeCommon.NominalEfficiency\tMULTILINETEXT\t\t53\t1\tPropertyListValue\t1\nPARAM\ta9c6d180-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.NominalEnergyConsumption\tNUMBER\t\t53\t1\tIfcPowerMeasure\t1\nPARAM\t89971280-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.NominalPartLoadRatio\tMULTILINETEXT\t\t53\t1\tPropertyBoundedValue\t1\nPARAM\t7a17c980-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.OperatingMode\tTEXT\t\t53\t1\tPEnum_BoilerOperatingMode\t1\nPARAM\ta3d0f080-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.OutletTemperatureRange\tMULTILINETEXT\t\t53\t1\tPropertyBoundedValue\t1\nPARAM\t9ca9e280-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.PartialLoadEfficiencyCurves\tMULTILINETEXT\t\t53\t1\tPropertyTableValue\t1\nPARAM\t75ebac00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.PressureRating\tNUMBER\t\t53\t1\tIfcPressureMeasure\t1\nPARAM\t64a29f80-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.Reference\tTEXT\t\t53\t1\tIfcIdentifier\t1\nPARAM\t68cebd00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.Status\tTEXT\t\t53\t1\tPEnum_ElementStatus\t1\nPARAM\t8ef45d00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.WaterInletTemperatureRange\tMULTILINETEXT\t\t53\t1\tPropertyBoundedValue\t1\nPARAM\t9451a780-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeCommon.WaterStorageCapacity\tVOLUME\t\t53\t1\tIfcVolumeMeasure\t1\nPARAM\ta7a2b85b-721e-433d-868b-d6b05dfb35f0\tPset_BoilerTypeCommon.Weight\tNUMBER\t\t53\t1\tIfcMassMeasure\t1\n#\nGROUP\t54\tPset_BoilerTypeSteam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td2e76200-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeSteam.HeatOutput\tMULTILINETEXT\t\t54\t1\tPropertyTableValue\t1\nPARAM\tc82ccd00-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeSteam.MaximumOutletPressure\tTEXT\t\t54\t1\tIfcLabel\t1\nPARAM\tcc58ea80-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeSteam.NominalEfficiency\tMULTILINETEXT\t\t54\t1\tPropertyTableValue\t1\n#\nGROUP\t55\tPset_BoilerTypeWater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te4c90500-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeWater.HeatOutput\tMULTILINETEXT\t\t55\t1\tPropertyTableValue\t1\nPARAM\tde3a8d80-d1c4-11e1-8000-00215ad4efdf\tPset_BoilerTypeWater.NominalEfficiency\tMULTILINETEXT\t\t55\t1\tPropertyTableValue\t1\n#\nGROUP\t56\tPset_BuildingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te77bac68-4990-433f-9f31-92010d12f8d4\tPset_BuildingCommon.AncillaryFireUse\tTEXT\t\t56\t1\tIfcLabel\t1\nPARAM\tf5797b00-d1c4-11e1-8000-00215ad4efdf\tPset_BuildingCommon.BuildingID\tTEXT\t\t56\t1\tIfcIdentifier\t1\nPARAM\tff02e300-d1c4-11e1-8000-00215ad4efdf\tPset_BuildingCommon.ConstructionMethod\tTEXT\t\t56\t1\tIfcLabel\t1\nPARAM\t032f0080-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.FireProtectionClass\tTEXT\t\t56\t1\tIfcLabel\t1\nPARAM\t2de593e0-cb41-41d3-8ef9-3160bdc16e02\tPset_BuildingCommon.GrossAreaPlanned\tAREA\t\t56\t1\tIfcAreaMeasure\t1\nPARAM\t1510a380-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.GrossPlannedArea\tAREA\t\t56\t1\tIfcAreaMeasure\t1\nPARAM\t2a85cd80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.IsLandmarked\tYESNO\t\t56\t1\tIfcLogical\t1\nPARAM\tfa3e2f00-d1c4-11e1-8000-00215ad4efdf\tPset_BuildingCommon.IsPermanentID\tYESNO\t\t56\t1\tIfcBoolean\t1\nPARAM\t4646ea9d-7abc-415e-aacd-84a174588248\tPset_BuildingCommon.MainFireUse\tTEXT\t\t56\t1\tIfcLabel\t1\nPARAM\t193cc100-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.NetPlannedArea\tAREA\t\t56\t1\tIfcAreaMeasure\t1\nPARAM\t1d68de80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.NumberOfStoreys\tINTEGER\t\t56\t1\tIfcInteger\t1\nPARAM\t104bef80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.OccupancyType\tTEXT\t\t56\t1\tIfcLabel\t1\nPARAM\tf0b4c700-d1c4-11e1-8000-00215ad4efdf\tPset_BuildingCommon.Reference\tTEXT\t\t56\t1\tIfcIdentifier\t1\nPARAM\t075b1e00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.SprinklerProtection\tYESNO\t\t56\t1\tIfcBoolean\t1\nPARAM\t0c1fd200-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.SprinklerProtectionAutomatic\tYESNO\t\t56\t1\tIfcBoolean\t1\nPARAM\t2194fc00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.YearOfConstruction\tTEXT\t\t56\t1\tIfcLabel\t1\nPARAM\t2659b000-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingCommon.YearOfLastRefurbishment\tTEXT\t\t56\t1\tIfcLabel\t1\n#\nGROUP\t57\tPset_BuildingElementProxyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t52753100-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyCommon.FireRating\tTEXT\t\t57\t1\tIfcLabel\t1\nPARAM\t46896f00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyCommon.IsExternal\tYESNO\t\t57\t1\tIfcBoolean\t1\nPARAM\t4ee1aa00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyCommon.LoadBearing\tYESNO\t\t57\t1\tIfcBoolean\t1\nPARAM\t35d8f900-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyCommon.Reference\tTEXT\t\t57\t1\tIfcIdentifier\t1\nPARAM\t3a051680-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyCommon.Status\tTEXT\t\t57\t1\tPEnum_ElementStatus\t1\nPARAM\t4ab58c80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyCommon.ThermalTransmittance\tNUMBER\t\t57\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t58\tPset_BuildingElementProxyProvisionForVoid\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6de03c00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyProvisionForVoid.Depth\tLENGTH\t\t58\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t69b41e80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyProvisionForVoid.Diameter\tLENGTH\t\t58\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t65880100-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyProvisionForVoid.Height\tLENGTH\t\t58\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5c972f80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyProvisionForVoid.Shape\tTEXT\t\t58\t1\tIfcLabel\t1\nPARAM\t720c5980-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyProvisionForVoid.System\tTEXT\t\t58\t1\tIfcLabel\t1\nPARAM\t615be380-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingElementProxyProvisionForVoid.Width\tLENGTH\t\t58\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t59\tPset_BuildingStoreyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t89e3dd80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.AboveGround\tYESNO\t\t59\t1\tIfcLogical\t1\nPARAM\t82bccf80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.EntranceLevel\tYESNO\t\t59\t1\tIfcBoolean\t1\nPARAM\t944d5b00-0d7f-4743-a056-374b882a01b0\tPset_BuildingStoreyCommon.GrossAreaPlanned\tAREA\t\t59\t1\tIfcAreaMeasure\t1\nPARAM\ta08a3480-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.GrossPlannedArea\tAREA\t\t59\t1\tIfcAreaMeasure\t1\nPARAM\t9b2cea00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.LoadBearingCapacity\tNUMBER\t\t59\t1\tIfcPlanarForceMeasure\t1\nPARAM\tf7185f91-cdf7-4637-ad80-86d9be6d8d2d\tPset_BuildingStoreyCommon.NetAreaPlanned\tAREA\t\t59\t1\tIfcAreaMeasure\t1\nPARAM\ta5e77f00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.NetPlannedArea\tAREA\t\t59\t1\tIfcAreaMeasure\t1\nPARAM\t7d5f8500-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.Reference\tTEXT\t\t59\t1\tIfcIdentifier\t1\nPARAM\t90725500-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.SprinklerProtection\tYESNO\t\t59\t1\tIfcBoolean\t1\nPARAM\t95cf9f80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingStoreyCommon.SprinklerProtectionAutomatic\tYESNO\t\t59\t1\tIfcBoolean\t1\n#\nGROUP\t60\tPset_BuildingSystemCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb13aaa80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingSystemCommon.Reference\tTEXT\t\t60\t1\tIfcIdentifier\t1\n#\nGROUP\t61\tPset_BuildingUse\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbd266c80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.MarketCategory\tTEXT\t\t61\t1\tIfcLabel\t1\nPARAM\tf6f77300-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.MarketSubCategoriesAvailableFuture\tMULTILINETEXT\t\t61\t1\tPropertyListValue\t1\nPARAM\tdfb88580-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.MarketSubCategoriesAvailableNow\tMULTILINETEXT\t\t61\t1\tPropertyListValue\t1\nPARAM\tc31c4d80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.MarketSubCategory\tTEXT\t\t61\t1\tIfcLabel\t1\nPARAM\tcf080f80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.NarrativeText\tTEXT\t\t61\t1\tIfcText\t1\nPARAM\tc9122e80-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.PlanningControlStatus\tTEXT\t\t61\t1\tIfcLabel\t1\nPARAM\tff4fae00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.RentalRatesInCategoryFuture\tMULTILINETEXT\t\t61\t1\tPropertyBoundedValue\t1\nPARAM\te5ae6680-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.RentalRatesInCategoryNow\tMULTILINETEXT\t\t61\t1\tPropertyBoundedValue\t1\nPARAM\tf1019200-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.TenureModesAvailableFuture\tMULTILINETEXT\t\t61\t1\tPropertyListValue\t1\nPARAM\td92a0e00-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.TenureModesAvailableNow\tMULTILINETEXT\t\t61\t1\tPropertyListValue\t1\nPARAM\teba44780-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.VacancyRateInCategoryFuture\tNUMBER\t\t61\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td3ccc380-d1c5-11e1-8000-00215ad4efdf\tPset_BuildingUse.VacancyRateInCategoryNow\tNUMBER\t\t61\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t62\tPset_BuildingUseAdjacent\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0b3b7000-d1c6-11e1-8000-00215ad4efdf\tPset_BuildingUseAdjacent.MarketCategory\tTEXT\t\t62\t1\tIfcLabel\t1\nPARAM\t1098ba80-d1c6-11e1-8000-00215ad4efdf\tPset_BuildingUseAdjacent.MarketSubCategory\tTEXT\t\t62\t1\tIfcLabel\t1\nPARAM\t1c847c80-d1c6-11e1-8000-00215ad4efdf\tPset_BuildingUseAdjacent.NarrativeText\tTEXT\t\t62\t1\tIfcText\t1\nPARAM\t168e9b80-d1c6-11e1-8000-00215ad4efdf\tPset_BuildingUseAdjacent.PlanningControlStatus\tTEXT\t\t62\t1\tIfcLabel\t1\n#\nGROUP\t63\tPset_BuildingWaterStorage\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t91157314-7d65-41a5-8bbd-336f616720eb\tPset_BuildingWaterStorage.OneDayCoolingTowerMakeupWater\tVOLUME\t\t63\t1\tIfcVolumeMeasure\t1\nPARAM\tc90f0479-603c-4fb4-a51f-6a6cf2fcc126\tPset_BuildingWaterStorage.OneDayEssentialWater\tVOLUME\t\t63\t1\tIfcVolumeMeasure\t1\nPARAM\t41b31c2e-52ab-47d4-81a0-f513f664a972\tPset_BuildingWaterStorage.OneDayPotableWater\tVOLUME\t\t63\t1\tIfcVolumeMeasure\t1\nPARAM\t7909c735-1593-4e9f-a522-176854576e71\tPset_BuildingWaterStorage.OneDayProcessOrProductionWater\tVOLUME\t\t63\t1\tIfcVolumeMeasure\t1\nPARAM\td46b0252-1a53-4b07-b583-7eb95e8ba6b5\tPset_BuildingWaterStorage.WaterStorageRatePerPerson\tVOLUME\t\t63\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t64\tPset_BurnerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3cb43b80-d1c6-11e1-8000-00215ad4efdf\tPset_BurnerTypeCommon.EnergySource\tTEXT\t\t64\t1\tPEnum_EnergySource\t1\nPARAM\t273f1180-d1c6-11e1-8000-00215ad4efdf\tPset_BurnerTypeCommon.Reference\tTEXT\t\t64\t1\tIfcIdentifier\t1\nPARAM\t2d34f280-d1c6-11e1-8000-00215ad4efdf\tPset_BurnerTypeCommon.Status\tTEXT\t\t64\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t65\tPset_CableCarrierFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5ce3fa80-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierFittingTypeCommon.Reference\tTEXT\t\t65\t1\tIfcIdentifier\t1\nPARAM\t61a8ae80-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierFittingTypeCommon.Status\tTEXT\t\t65\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t66\tPset_CableCarrierSegmentTypeCableLadderSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83099a80-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableLadderSegment.LadderConfiguration\tTEXT\t\t66\t1\tIfcText\t1\nPARAM\t7e44e680-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableLadderSegment.NominalHeight\tLENGTH\t\t66\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t55d50299-46dd-485a-b0e2-517b9380385c\tPset_CableCarrierSegmentTypeCableLadderSegment.NominalLength\tLENGTH\t\t66\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t78e79c00-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableLadderSegment.NominalWidth\tLENGTH\t\t66\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t67\tPset_CableCarrierSegmentTypeCableTraySegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t99aff180-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableTraySegment.HasCover\tYESNO\t\t67\t1\tIfcBoolean\t1\nPARAM\t94eb3d80-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableTraySegment.NominalHeight\tLENGTH\t\t67\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t65a3817d-5e2f-4de7-87a6-5ed6d9180008\tPset_CableCarrierSegmentTypeCableTraySegment.NominalLength\tLENGTH\t\t67\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8f8df300-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableTraySegment.NominalWidth\tLENGTH\t\t67\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t68\tPset_CableCarrierSegmentTypeCableTrunkingSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taaf8fe00-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NominalHeight\tLENGTH\t\t68\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5aabd032-4985-4416-86d7-e612f034b98e\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NominalLength\tLENGTH\t\t68\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta59bb380-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NominalWidth\tLENGTH\t\t68\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb0eedf00-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCableTrunkingSegment.NumberOfCompartments\tINTEGER\t\t68\t1\tIfcInteger\t1\n#\nGROUP\t69\tPset_CableCarrierSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbba97400-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCommon.Reference\tTEXT\t\t69\t1\tIfcIdentifier\t1\nPARAM\tc19f5500-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeCommon.Status\tTEXT\t\t69\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t70\tPset_CableCarrierSegmentTypeConduitSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te5fb3180-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeConduitSegment.ConduitShapeType\tTEXT\t\t70\t1\tPEnum_ConduitShapeType\t1\nPARAM\tf4494d80-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeConduitSegment.IsRigid\tYESNO\t\t70\t1\tIfcBoolean\t1\nPARAM\tdf6cba00-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeConduitSegment.NominalHeight\tLENGTH\t\t70\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8ad91d9a-63ee-4a17-86bb-1b83df24a726\tPset_CableCarrierSegmentTypeConduitSegment.NominalLength\tLENGTH\t\t70\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td976d900-d1c6-11e1-8000-00215ad4efdf\tPset_CableCarrierSegmentTypeConduitSegment.NominalWidth\tLENGTH\t\t70\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t71\tPset_CableFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t00cda600-d1c7-11e1-8000-00215ad4efdf\tPset_CableFittingTypeCommon.Reference\tTEXT\t\t71\t1\tIfcIdentifier\t1\nPARAM\t05925a00-d1c7-11e1-8000-00215ad4efdf\tPset_CableFittingTypeCommon.Status\tTEXT\t\t71\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t72\tPset_CableSegmentOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a917ce3-5e22-4ad5-8d1e-87bc3656c1b8\tPset_CableSegmentOccurrence.CarrierStackNumber\tINTEGER\t\t72\t1\tIfcInteger\t1\nPARAM\ta56d3362-7278-4003-b141-8d8169f8652f\tPset_CableSegmentOccurrence.CurrentCarryingCapasity\tNUMBER\t\t72\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t55fbb563-61a2-4104-a0e4-b53d8e4cffd5\tPset_CableSegmentOccurrence.DesignAmbientTemperature\tMULTILINETEXT\t\t72\t1\tPropertyBoundedValue\t1\nPARAM\t977d1cc9-f8f5-48dc-aa23-820a3e9d0774\tPset_CableSegmentOccurrence.DistanceBetweenParallelCircuits\tLENGTH\t\t72\t1\tIfcLengthMeasure\t1\nPARAM\t7c0ce24f-9d03-4d9b-83da-2ac5e4a0634c\tPset_CableSegmentOccurrence.InstallationMethod\tTEXT\t\t72\t1\tIfcLabel\t1\nPARAM\tbe5fd0db-9e23-4a84-b4e0-7762a0e065e1\tPset_CableSegmentOccurrence.InstallationMethodFlagEnum\tTEXT\t\t72\t1\tPEnum_InstallationMethodFlagEnum\t1\nPARAM\td4ec2718-6333-4e1e-a8cd-d1a1d63c7708\tPset_CableSegmentOccurrence.IsHorizontalCable\tYESNO\t\t72\t1\tIfcBoolean\t1\nPARAM\t2632b748-03d3-46c0-aafd-3f7cff1f8d99\tPset_CableSegmentOccurrence.IsMountedFlatCable\tYESNO\t\t72\t1\tIfcBoolean\t1\nPARAM\ta008e02d-7f54-4833-83e4-f8069dde0f37\tPset_CableSegmentOccurrence.MaximumCableLength\tLENGTH\t\t72\t1\tIfcLengthMeasure\t1\nPARAM\t12584689-2536-4091-9491-fb29d755ac82\tPset_CableSegmentOccurrence.MountingMethod\tTEXT\t\t72\t1\tPEnum_MountingMethodEnum\t1\nPARAM\t4a80a2ec-f350-4fc6-ba3f-2235e2f25f04\tPset_CableSegmentOccurrence.NumberOfParallelCircuits\tINTEGER\t\t72\t1\tIfcInteger\t1\nPARAM\t47d6edba-8d71-4af2-b05f-07d968909ff6\tPset_CableSegmentOccurrence.PowerLoss\tNUMBER\t\t72\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t366428fd-19e5-4457-a10a-d655640758e7\tPset_CableSegmentOccurrence.SoilConductivity\tNUMBER\t\t72\t1\tIfcThermalConductivityMeasure\t1\nPARAM\td9a5be45-4039-4d22-8b6c-573471e71f22\tPset_CableSegmentOccurrence.UserCorrectionFactor\tNUMBER\t\t72\t1\tIfcReal\t1\n#\nGROUP\t73\tPset_CableSegmentTypeBusBarSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1e027480-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeBusBarSegment.IsHorizontalBusbar\tYESNO\t\t73\t1\tIfcBoolean\t1\n#\nGROUP\t74\tPset_CableSegmentTypeCableSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0172d1d8-2602-4679-8293-22c901339a27\tPset_CableSegmentTypeCableSegment.CableInsulationMaterial\tMULTILINETEXT\t\t74\t1\tIfcMaterial\t1\nPARAM\t9853cda1-817d-45bf-86a5-f7018d05ceb5\tPset_CableSegmentTypeCableSegment.CrossSectionalArea\tAREA\t\t74\t1\tIfcAreaMeasure\t1\nPARAM\ta54fe800-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.FunctionReliable\tYESNO\t\t74\t1\tIfcBoolean\t1\nPARAM\t9ff29d80-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.HalogenProof\tYESNO\t\t74\t1\tIfcBoolean\t1\nPARAM\t5904a800-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.HasProtectiveEarth\tYESNO\t\t74\t1\tIfcBoolean\t1\nPARAM\t6de13b80-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.MaximumOperatingTemperature\tNUMBER\t\t74\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t7f2a4800-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.MaximumShortCircuitTemperature\tNUMBER\t\t74\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t2bb28e5b-562e-4e08-aadf-f3a90351a48f\tPset_CableSegmentTypeCableSegment.MaxOperatingTemperature\tNUMBER\t\t74\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t2ed26686-1583-4602-96a6-fa78aad71ed2\tPset_CableSegmentTypeCableSegment.NominalHeight\tLENGTH\t\t74\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t818b8fc7-4806-40d5-a968-75600b073422\tPset_CableSegmentTypeCableSegment.NominalLength\tLENGTH\t\t74\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t67a4fb5d-ebd0-4296-b3ef-237417a4f8fa\tPset_CableSegmentTypeCableSegment.NominalWidthOrDiameter\tLENGTH\t\t74\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8315a195-ccf9-4f82-80f7-f33e38eb337e\tPset_CableSegmentTypeCableSegment.NormalOperatingTemperature\tNUMBER\t\t74\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t31154480-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.NumberOfCores\tINTEGER\t\t74\t1\tIfcInteger\t1\nPARAM\t38d4e900-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.OverallDiameter\tLENGTH\t\t74\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t44c0ab00-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.RatedTemperature\tMULTILINETEXT\t\t74\t1\tPropertyBoundedValue\t1\nPARAM\t3ecaca00-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.RatedVoltage\tMULTILINETEXT\t\t74\t1\tPropertyBoundedValue\t1\nPARAM\t4ab68c00-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.ScreenDiameter\tLENGTH\t\t74\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t936e4500-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.SelfExtinguishing60332_1\tYESNO\t\t74\t1\tIfcBoolean\t1\nPARAM\t99642600-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.SelfExtinguishing60332_3\tYESNO\t\t74\t1\tIfcBoolean\t1\nPARAM\ta3c7b4cb-3bfa-443c-8228-30f993ecda47\tPset_CableSegmentTypeCableSegment.SheathColor\tTEXT\t\t74\t1\tIfcLabel\t1\nPARAM\t87828300-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.SpecialConstruction\tTEXT\t\t74\t1\tIfcLabel\t1\nPARAM\t2b1f6380-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.Standard\tTEXT\t\t74\t1\tIfcLabel\t1\nPARAM\t8ea99100-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCableSegment.Weight\tNUMBER\t\t74\t1\tIfcMassMeasure\t1\n#\nGROUP\t75\tPset_CableSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taf71e680-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCommon.Reference\tTEXT\t\t75\t1\tIfcIdentifier\t1\nPARAM\tb4cf3100-d1c7-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCommon.Status\tTEXT\t\t75\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t76\tPset_CableSegmentTypeConductorSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t16d52f14-0b2f-49f1-a51e-a813642b9709\tPset_CableSegmentTypeConductorSegment.ConductorMaterial\tMULTILINETEXT\t\t76\t1\tIfcMaterial\t1\nPARAM\t837420cb-1a99-4090-a3fc-db9355dc03a0\tPset_CableSegmentTypeConductorSegment.ConductorSheathMaterial\tMULTILINETEXT\t\t76\t1\tIfcMaterial\t1\nPARAM\t4ccd1a80-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeConductorSegment.Construction\tTEXT\t\t76\t1\tPEnum_ConstructionEnum\t1\nPARAM\t2a3b0180-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeConductorSegment.CrossSectionalArea\tAREA\t\t76\t1\tIfcAreaMeasure\t1\nPARAM\td2ed1a0c-1d00-4427-88d3-f076085bebdd\tPset_CableSegmentTypeConductorSegment.ElectricalConductorFunction\tTEXT\t\t76\t1\tPEnum_ConductorFunction\t1\nPARAM\t30c97900-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeConductorSegment.Function\tTEXT\t\t76\t1\tPEnum_FunctionEnum\t1\nPARAM\t62efad31-f661-4306-a6b0-06469351cf2f\tPset_CableSegmentTypeConductorSegment.IsFireResistant\tYESNO\t\t76\t1\tIfcBoolean\t1\nPARAM\t40e15880-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeConductorSegment.Material\tTEXT\t\t76\t1\tPEnum_MaterialEnum\t1\nPARAM\ta5d0e746-d064-4bfb-bfd7-9226168f0ebb\tPset_CableSegmentTypeConductorSegment.MaximumOperatingTemperature\tNUMBER\t\t76\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\ta87deb43-ee03-46d0-b320-24bff82815f2\tPset_CableSegmentTypeConductorSegment.NominalLength\tLENGTH\t\t76\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7b3f9abc-db87-4175-9f93-9677b4df614c\tPset_CableSegmentTypeConductorSegment.PhaseReference\tTEXT\t\t76\t1\tIfcIdentifier\t1\nPARAM\t59ea0980-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeConductorSegment.Shape\tTEXT\t\t76\t1\tPEnum_ShapeEnum\t1\nPARAM\t531bcd01-546c-4c88-baa6-2326e2907d96\tPset_CableSegmentTypeConductorSegment.SheathColor\tTEXT\t\t76\t1\tIfcLabel\t1\n#\nGROUP\t77\tPset_CableSegmentTypeCoreSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8c940200-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.CoreIdentifier\tTEXT\t\t77\t1\tIfcIdentifier\t1\nPARAM\tc6fd9f00-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.FunctionReliable\tYESNO\t\t77\t1\tIfcBoolean\t1\nPARAM\tc107be00-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.HalogenProof\tYESNO\t\t77\t1\tIfcBoolean\t1\nPARAM\t72f2ba80-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.OverallDiameter\tLENGTH\t\t77\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7f771300-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.RatedTemperature\tMULTILINETEXT\t\t77\t1\tPropertyBoundedValue\t1\nPARAM\t78e89b80-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.RatedVoltage\tMULTILINETEXT\t\t77\t1\tPropertyBoundedValue\t1\nPARAM\t869e2100-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.ScreenDiameter\tLENGTH\t\t77\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb64d2900-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.SelfExtinguishing60332_1\tYESNO\t\t77\t1\tIfcBoolean\t1\nPARAM\tbbaa7380-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.SelfExtinguishing60332_3\tYESNO\t\t77\t1\tIfcBoolean\t1\nPARAM\t9289e300-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.SheathColors\tTEXT\t\t77\t1\tPEnum_CoreColorsEnum\t1\nPARAM\tcc5ae980-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.Standard\tTEXT\t\t77\t1\tIfcLabel\t1\nPARAM\tb1887500-d1c8-11e1-8000-00215ad4efdf\tPset_CableSegmentTypeCoreSegment.Weight\tNUMBER\t\t77\t1\tIfcMassMeasure\t1\n#\nGROUP\t78\tPset_ChillerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td8df4200-d1c8-11e1-8000-00215ad4efdf\tPset_ChillerPHistory.Capacity\tMULTILINETEXT\t\t78\t1\tIfcTimeSeries\t1\nPARAM\tff94b171-501e-4a83-991f-6819d134d90a\tPset_ChillerPHistory.CapacityCurve\tNUMBER\t\t78\t1\tIfcReal\t1\nPARAM\te0065000-d1c8-11e1-8000-00215ad4efdf\tPset_ChillerPHistory.CoefficientOfPerformance\tMULTILINETEXT\t\t78\t1\tIfcTimeSeries\t1\nPARAM\t3ffca6d2-2073-421e-9dbd-fe5d40f54925\tPset_ChillerPHistory.CoefficientOfPerformanceCurve\tNUMBER\t\t78\t1\tIfcReal\t1\nPARAM\tdbda3280-d1c8-11e1-8000-00215ad4efdf\tPset_ChillerPHistory.EnergyEfficiencyRatio\tMULTILINETEXT\t\t78\t1\tIfcTimeSeries\t1\nPARAM\td95f1587-d481-4251-972f-a47999a6fa92\tPset_ChillerPHistory.FullLoadRatioCurve\tNUMBER\t\t78\t1\tIfcReal\t1\n#\nGROUP\t79\tPset_ChillerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1e9c0a80-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.CapacityCurve\tMULTILINETEXT\t\t79\t1\tPropertyTableValue\t1\nPARAM\t278cdc00-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.CoefficientOfPerformanceCurve\tMULTILINETEXT\t\t79\t1\tPropertyTableValue\t1\nPARAM\t2fe51700-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.FullLoadRatioCurve\tMULTILINETEXT\t\t79\t1\tPropertyTableValue\t1\nPARAM\tfe6c4b80-d1c8-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.NominalCapacity\tNUMBER\t\t79\t1\tIfcPowerMeasure\t1\nPARAM\t0926e080-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.NominalCondensingTemperature\tNUMBER\t\t79\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t04622c80-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.NominalEfficiency\tNUMBER\t\t79\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0e842b00-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.NominalEvaporatingTemperature\tNUMBER\t\t79\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t147a0c00-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.NominalHeatRejectionRate\tNUMBER\t\t79\t1\tIfcPowerMeasure\t1\nPARAM\t19d75680-d1c9-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.NominalPowerConsumption\tNUMBER\t\t79\t1\tIfcPowerMeasure\t1\nPARAM\teac0e500-d1c8-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.Reference\tTEXT\t\t79\t1\tIfcIdentifier\t1\nPARAM\tef859900-d1c8-11e1-8000-00215ad4efdf\tPset_ChillerTypeCommon.Status\tTEXT\t\t79\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t80\tPset_ChimneyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6cb10e00-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.FireRating\tTEXT\t\t80\t1\tIfcLabel\t1\nPARAM\t5c992e80-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.IsExternal\tYESNO\t\t80\t1\tIfcBoolean\t1\nPARAM\t6753c380-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.LoadBearing\tYESNO\t\t80\t1\tIfcBoolean\t1\nPARAM\t573be400-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.NumberOfDrafts\tINTEGER\t\t80\t1\tIfcCountMeasure\t1\nPARAM\t412e2380-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.Reference\tTEXT\t\t80\t1\tIfcIdentifier\t1\nPARAM\t468b6e00-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.Status\tTEXT\t\t80\t1\tPEnum_ElementStatus\t1\nPARAM\t61f67900-d1c9-11e1-8000-00215ad4efdf\tPset_ChimneyCommon.ThermalTransmittance\tNUMBER\t\t80\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t81\tPset_CivilElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t70725207-4869-40a2-a2df-14795defd067\tPset_CivilElementCommon.Reference\tTEXT\t\t81\t1\tIfcIdentifier\t1\nPARAM\t0c528b1c-7565-457c-85ee-19a5f19a76f1\tPset_CivilElementCommon.Status\tTEXT\t\t81\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t82\tPset_CoilOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t789cd000-d1c9-11e1-8000-00215ad4efdf\tPset_CoilOccurrence.HasSoundAttenuation\tYESNO\t\t82\t1\tIfcBoolean\t1\n#\nGROUP\t83\tPset_CoilPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t87838280-d1c9-11e1-8000-00215ad4efdf\tPset_CoilPHistory.AirPressureDropCurve\tMULTILINETEXT\t\t83\t1\tIfcTimeSeries\t1\nPARAM\t84889200-d1c9-11e1-8000-00215ad4efdf\tPset_CoilPHistory.AtmosphericPressure\tMULTILINETEXT\t\t83\t1\tIfcTimeSeries\t1\nPARAM\t8e11fa00-d1c9-11e1-8000-00215ad4efdf\tPset_CoilPHistory.FaceVelocity\tMULTILINETEXT\t\t83\t1\tIfcTimeSeries\t1\nPARAM\t8b170980-d1c9-11e1-8000-00215ad4efdf\tPset_CoilPHistory.SoundCurve\tMULTILINETEXT\t\t83\t1\tIfcTimeSeries\t1\n#\nGROUP\t84\tPset_CoilTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb4d03080-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.AirflowRateRange\tMULTILINETEXT\t\t84\t1\tPropertyBoundedValue\t1\nPARAM\tc0235c00-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.NominalLatentCapacity\tNUMBER\t\t84\t1\tIfcPowerMeasure\t1\nPARAM\tbb5ea800-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.NominalSensibleCapacity\tNUMBER\t\t84\t1\tIfcPowerMeasure\t1\nPARAM\tc580a680-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.NominalUA\tNUMBER\t\t84\t1\tIfcReal\t1\nPARAM\tad108c00-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.OperationalTemperatureRange\tMULTILINETEXT\t\t84\t1\tPropertyBoundedValue\t1\nPARAM\tc9acc400-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.PlacementType\tTEXT\t\t84\t1\tPEnum_CoilPlacementType\t1\nPARAM\t979b6200-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.Reference\tTEXT\t\t84\t1\tIfcIdentifier\t1\nPARAM\t9ec27000-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeCommon.Status\tTEXT\t\t84\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t85\tPset_CoilTypeHydronic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3758f000-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.BypassFactor\tNUMBER\t\t85\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\teea13700-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.CoilConnectionDirection\tTEXT\t\t85\t1\tPEnum_CoilConnectionDirection\t1\nPARAM\te1844800-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.CoilCoolant\tTEXT\t\t85\t1\tPEnum_CoilCoolant\t1\nPARAM\t0b3d6f00-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.CoilFaceArea\tAREA\t\t85\t1\tIfcAreaMeasure\t1\nPARAM\tfd87e980-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.CoilFluidArrangement\tTEXT\t\t85\t1\tPEnum_CoilFluidArrangement\t1\nPARAM\t04e5e344-740f-4a5a-a535-00ba794bd420\tPset_CoilTypeHydronic.Fluid\tMULTILINETEXT\t\t85\t1\tIfcMaterial\t1\nPARAM\tdc26fd80-d1c9-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.FluidPressureRange\tMULTILINETEXT\t\t85\t1\tPropertyBoundedValue\t1\nPARAM\t109ab980-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.HeatExchangeSurfaceArea\tAREA\t\t85\t1\tIfcAreaMeasure\t1\nPARAM\t15f80400-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.PrimarySurfaceArea\tAREA\t\t85\t1\tIfcAreaMeasure\t1\nPARAM\t1abcb800-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.SecondarySurfaceArea\tAREA\t\t85\t1\tIfcAreaMeasure\t1\nPARAM\t3cb63a80-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.SensibleHeatRatio\tNUMBER\t\t85\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t26a87a00-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.TotalUACurves\tMULTILINETEXT\t\t85\t1\tPropertyTableValue\t1\nPARAM\t2f00b500-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.WaterPressureDropCurve\tMULTILINETEXT\t\t85\t1\tPropertyTableValue\t1\nPARAM\t42ac1b80-d1ca-11e1-8000-00215ad4efdf\tPset_CoilTypeHydronic.WetCoilFraction\tNUMBER\t\t85\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t86\tPset_ColumnCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8737b700-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.FireRating\tTEXT\t\t86\t1\tIfcLabel\t1\nPARAM\t77b86e00-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.IsExternal\tYESNO\t\t86\t1\tIfcBoolean\t1\nPARAM\t8141d600-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.LoadBearing\tYESNO\t\t86\t1\tIfcBoolean\t1\nPARAM\t522b6480-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.Reference\tTEXT\t\t86\t1\tIfcIdentifier\t1\nPARAM\t71c28d00-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.Roll\tNUMBER\t\t86\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t6bccac00-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.Slope\tNUMBER\t\t86\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t5a839f80-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.Status\tTEXT\t\t86\t1\tPEnum_ElementStatus\t1\nPARAM\t7c7d2200-d1ca-11e1-8000-00215ad4efdf\tPset_ColumnCommon.ThermalTransmittance\tNUMBER\t\t86\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t87\tPset_CommunicationsAppliancePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t90c11f00-d1ca-11e1-8000-00215ad4efdf\tPset_CommunicationsAppliancePHistory.PowerState\tMULTILINETEXT\t\t87\t1\tIfcTimeSeries\t1\n#\nGROUP\t88\tPset_CommunicationsApplianceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9ae31d80-d1ca-11e1-8000-00215ad4efdf\tPset_CommunicationsApplianceTypeCommon.Reference\tTEXT\t\t88\t1\tIfcIdentifier\t1\nPARAM\t9fa7d180-d1ca-11e1-8000-00215ad4efdf\tPset_CommunicationsApplianceTypeCommon.Status\tTEXT\t\t88\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t89\tPset_CompressorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te09fe600-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.CoefficientOfPerformance\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\te72e5d80-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.CompressionEfficiency\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\tda116e80-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.CompressorCapacity\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\tf0b7c580-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.CompressorTotalEfficiency\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\t0200d200-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.CompressorTotalHeatGain\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\tdd0c5f00-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.EnergyEfficiencyRatio\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\tff05e180-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.FrictionHeatGain\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\t05945900-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.FullLoadRatio\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\tde767aa2-db4c-45d8-9fee-cc59526d84f0\tPset_CompressorPHistory.FullLoadRatioCurve\tMULTILINETEXT\t\t89\t1\tPropertyListValue\t1\nPARAM\tf8776a00-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.InputPower\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\ted243e80-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.IsentropicEfficiency\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\tfc0af100-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.LubricantPumpHeatGain\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\tea294e00-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.MechanicalEfficiency\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\tf4e3e300-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.ShaftPower\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\nPARAM\te4336d00-d1ca-11e1-8000-00215ad4efdf\tPset_CompressorPHistory.VolumetricEfficiency\tMULTILINETEXT\t\t89\t1\tIfcTimeSeries\t1\n#\nGROUP\t90\tPset_CompressorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t57d57a00-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.CompressorSpeed\tNUMBER\t\t90\t1\tIfcRotationalFrequencyMeasure\t1\nPARAM\t70de2b00-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.HasHotGasBypass\tYESNO\t\t90\t1\tIfcBoolean\t1\nPARAM\t6459d280-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.IdealCapacity\tNUMBER\t\t90\t1\tIfcPowerMeasure\t1\nPARAM\t6b80e080-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.IdealShaftPower\tNUMBER\t\t90\t1\tIfcPowerMeasure\t1\nPARAM\t76d40c00-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.ImpellerDiameter\tLENGTH\t\t90\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5310c600-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.MaximumPartLoadRatio\tNUMBER\t\t90\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4db37b80-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.MinimumPartLoadRatio\tNUMBER\t\t90\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5dcb5b00-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.NominalCapacity\tNUMBER\t\t90\t1\tIfcPowerMeasure\t1\nPARAM\t278ddb80-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.PowerSource\tTEXT\t\t90\t1\tPEnum_CompressorTypePowerSource\t1\nPARAM\t0fb65780-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.Reference\tTEXT\t\t90\t1\tIfcIdentifier\t1\nPARAM\t36748e00-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.RefrigerantClass\tTEXT\t\t90\t1\tPEnum_RefrigerantClass\t1\nPARAM\t0aeb60de-a6a2-499d-9baa-1e4c99920e0d\tPset_CompressorTypeCommon.RefrigerantType\tMULTILINETEXT\t\t90\t1\tIfcMaterial\t1\nPARAM\t1513a200-d1cb-11e1-8000-00215ad4efdf\tPset_CompressorTypeCommon.Status\tTEXT\t\t90\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t91\tPset_ConcreteElementGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0764b8e3-6a7c-4275-859f-1534ea3eec09\tPset_ConcreteElementGeneral.ConcreteCover\tLENGTH\t\t91\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbef32e80-d1cb-11e1-8000-00215ad4efdf\tPset_ConcreteElementGeneral.ConcreteCoverAtLinks\tLENGTH\t\t91\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb8fd4d80-d1cb-11e1-8000-00215ad4efdf\tPset_ConcreteElementGeneral.ConcreteCoverAtMainBars\tLENGTH\t\t91\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t64af56b3-0b45-40c2-b43d-74b49a28b9db\tPset_ConcreteElementGeneral.ConstructionMethod\tTEXT\t\t91\t1\tIfcLabel\t1\nPARAM\tabe05e80-d1cb-11e1-8000-00215ad4efdf\tPset_ConcreteElementGeneral.ConstructionToleranceClass\tTEXT\t\t91\t1\tIfcLabel\t1\nPARAM\t5ec8e50f-7c94-47d4-a3b8-0da312bc2657\tPset_ConcreteElementGeneral.ConstructionType\tTEXT\t\t91\t1\tIfcLabel\t1\nPARAM\ta4b95080-d1cb-11e1-8000-00215ad4efdf\tPset_ConcreteElementGeneral.DimensionalAccuracyClass\tTEXT\t\t91\t1\tIfcLabel\t1\nPARAM\t3a40f78c-380c-41fc-85fe-f2d3cbbf55db\tPset_ConcreteElementGeneral.EnvironmentalClass\tTEXT\t\t91\t1\tIfcLabel\t1\nPARAM\t9bee0bf7-2ad3-4a66-bef5-7b71b7ca175b\tPset_ConcreteElementGeneral.ExposureClass\tTEXT\t\t91\t1\tIfcLabel\t1\nPARAM\t1a2f6c91-9cff-4fc8-a350-1998ae04d167\tPset_ConcreteElementGeneral.FireRating\tTEXT\t\t91\t1\tIfcLabel\t1\nPARAM\t94985a4b-78a9-4230-a252-bb76d489d340\tPset_ConcreteElementGeneral.LifeCycleEnvironmentalLoad\tTEXT\t\t91\t1\tIfcText\t1\nPARAM\t03693864-2cbf-49e2-a90d-346134ac7475\tPset_ConcreteElementGeneral.ReinforcementAreaRatio\tNUMBER\t\t91\t1\tIfcAreaDensityMeasure\t1\nPARAM\tb88ca225-2c4b-4014-bcf2-89bbbd596398\tPset_ConcreteElementGeneral.ReinforcementStrengthClass\tTEXT\t\t91\t1\tIfcLabel\t1\nPARAM\ta1c0e785-c9bc-4187-8ddb-c67fd0ff3d26\tPset_ConcreteElementGeneral.ReinforcementVolumeRatio\tMASS_DENSITY\t\t91\t1\tIfcMassDensityMeasure\t1\nPARAM\t906b76ed-e429-4fd6-9608-609a1bc961a9\tPset_ConcreteElementGeneral.ServiceLife\tNUMBER\t\t91\t1\tIfcTimeMeasure\t1\nPARAM\t96390dc4-43fd-41d8-8cb6-aca86dce4993\tPset_ConcreteElementGeneral.StrengthClass\tTEXT\t\t91\t1\tIfcLabel\t1\nPARAM\t84899180-d1cb-11e1-8000-00215ad4efdf\tPset_ConcreteElementGeneral.StructuralClass\tTEXT\t\t91\t1\tIfcLabel\t1\n#\nGROUP\t92\tPset_ConcreteElementQuantityGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3b37fec6-340b-4132-b522-68eb4d404689\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryDescription\tTEXT\t\t92\t1\tIfcLabel\t1\nPARAM\t94cdc2d2-f10b-459a-b7f7-b877423d5bda\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryGroupCode\tTEXT\t\t92\t1\tIfcLabel\t1\nPARAM\tb52d3dd7-ad25-4e25-ba15-d0b402faa8ec\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryMaterial\tTEXT\t\t92\t1\tIfcLabel\t1\nPARAM\ta9b5d66d-1a3f-4618-bbcb-c8f645d92831\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryMaterialSpecificationReference\tMULTILINETEXT\t\t92\t1\tIfcExternalReference\t1\nPARAM\t8e8df386-e824-4ce5-a01e-b52fd3eb0e07\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryQuantityByNumberOfItems\tINTEGER\t\t92\t1\tIfcCountMeasure\t1\nPARAM\ta791db89-aae4-4987-96dc-bbf065f5363b\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryQuantityByWeight\tNUMBER\t\t92\t1\tIfcMassMeasure\t1\nPARAM\t67b58211-c7d5-4365-aa3b-ea9ccbe9c50b\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessorySize\tTEXT\t\t92\t1\tIfcLabel\t1\nPARAM\t9bacb691-e039-46ae-89b4-495ab34f4d48\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryType\tTEXT\t\t92\t1\tIfcLabel\t1\nPARAM\t44b8fec8-6c6d-44ee-bed8-e61ee93d16c1\tPset_ConcreteElementQuantityGeneral.TotalAccessoryQuantity.AccessoryTypeSpecificationReference\tMULTILINETEXT\t\t92\t1\tIfcExternalReference\t1\nPARAM\t957283af-9743-497f-8920-281a61b190d0\tPset_ConcreteElementQuantityGeneral.TotalConcreteQuantity\tVOLUME\t\t92\t1\tIfcVolumeMeasure\t1\nPARAM\t6f0e6260-0524-43b6-91bb-8c15ec96230f\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarDiameter\tLENGTH\t\t92\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7aaaed83-ff94-4539-87f7-bc93388b1d44\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarQuantity\tNUMBER\t\t92\t1\tIfcMassMeasure\t1\nPARAM\t653ef51a-ac75-4ae0-b15c-903a6643c08c\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarSteelGrade\tTEXT\t\t92\t1\tIfcLabel\t1\nPARAM\t6ce74f47-6fa5-4f0b-8aba-92e37d05f81d\tPset_ConcreteElementQuantityGeneral.TotalRebarQuantity.RebarSteelGradeSpecificationReference\tMULTILINETEXT\t\t92\t1\tIfcExternalReference\t1\n#\nGROUP\t93\tPset_ConcreteElementSurfaceFinishQuantityGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta3c0f9a6-5875-4b69-b85d-1c2ad87823f6\tPset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceArea\tAREA\t\t93\t1\tIfcAreaMeasure\t1\nPARAM\t49e67d5d-134e-4fde-aacd-d5c43916ed03\tPset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceClass\tTEXT\t\t93\t1\tIfcLabel\t1\nPARAM\t7f7621d9-ce39-4fc9-881d-ab9de678a378\tPset_ConcreteElementSurfaceFinishQuantityGeneral.ExternalSurface.ExternalSurfaceType\tTEXT\t\t93\t1\tIfcLabel\t1\nPARAM\t3e028658-84d4-436d-8e97-440c25c03834\tPset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceArea\tAREA\t\t93\t1\tIfcAreaMeasure\t1\nPARAM\tdd5d5098-66be-46e9-a0c0-e08b43bf1e02\tPset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceClass\tTEXT\t\t93\t1\tIfcLabel\t1\nPARAM\t7aaadab7-9563-46ea-b817-1c7b61cacbfe\tPset_ConcreteElementSurfaceFinishQuantityGeneral.FormSurface.FormSurfaceTextureDescription\tTEXT\t\t93\t1\tIfcText\t1\nPARAM\tc9b75eb0-6176-4a76-89c0-7b7de3be32f1\tPset_ConcreteElementSurfaceFinishQuantityGeneral.SurfaceDescriptionDocReference\tMULTILINETEXT\t\t93\t1\tIfcExternalReference\t1\n#\nGROUP\t94\tPset_CondenserPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a1bc780-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.CompressorCondenserHeatGain\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\t7daf4e80-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.CompressorCondenserPressureDrop\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\t8142d580-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.CondenserMeanVoidFraction\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\t6ec89c00-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.CondensingTemperature\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\t640e0700-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.ExteriorHeatTransferCoefficient\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\t5fe1e980-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.HeatRejectionRate\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\t67a18e00-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.InteriorHeatTransferCoefficient\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\t72f4b980-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.LogarithmicMeanTemperatureDifference\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\t6bcdab80-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.RefrigerantFoulingResistance\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\t76884080-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.UAcurves\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\nPARAM\t84d65c80-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserPHistory.WaterFoulingResistance\tMULTILINETEXT\t\t94\t1\tIfcTimeSeries\t1\n#\nGROUP\t95\tPset_CondenserTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb0f1dd80-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.ExternalSurfaceArea\tAREA\t\t95\t1\tIfcAreaMeasure\t1\nPARAM\tbc450900-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.InternalRefrigerantVolume\tVOLUME\t\t95\t1\tIfcVolumeMeasure\t1\nPARAM\tb6e7be80-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.InternalSurfaceArea\tAREA\t\t95\t1\tIfcAreaMeasure\t1\nPARAM\tc1a25380-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.InternalWaterVolume\tVOLUME\t\t95\t1\tIfcVolumeMeasure\t1\nPARAM\tc6670780-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.NominalHeatTransferArea\tAREA\t\t95\t1\tIfcAreaMeasure\t1\nPARAM\tcbc45200-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.NominalHeatTransferCoefficient\tNUMBER\t\t95\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t8f90f180-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.Reference\tTEXT\t\t95\t1\tIfcIdentifier\t1\nPARAM\t94ee3c00-d1cc-11e1-8000-00215ad4efdf\tPset_CondenserTypeCommon.RefrigerantClass\tTEXT\t\t95\t1\tPEnum_RefrigerantClass\t1\nPARAM\te1ed813e-ae35-42e5-99e8-50bd1b3e7a48\tPset_CondenserTypeCommon.RefrigerantType\tMULTILINETEXT\t\t95\t1\tIfcMaterial\t1\nPARAM\td296b7a0-f2bb-4e30-9010-357681bd4adc\tPset_CondenserTypeCommon.Status\tTEXT\t\t95\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t96\tPset_Condition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdbdc3180-d1cc-11e1-8000-00215ad4efdf\tPset_Condition.AssessmentCondition\tTEXT\t\t96\t1\tIfcLabel\t1\nPARAM\td7177d80-d1cc-11e1-8000-00215ad4efdf\tPset_Condition.AssessmentDate\tTEXT\t\t96\t1\tIfcDate\t1\nPARAM\te1397c00-d1cc-11e1-8000-00215ad4efdf\tPset_Condition.AssessmentDescription\tTEXT\t\t96\t1\tIfcText\t1\n#\nGROUP\t97\tPset_ConstructionResource\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t00d0a480-d1cd-11e1-8000-00215ad4efdf\tPset_ConstructionResource.ActualCompletion\tMULTILINETEXT\t\t97\t1\tIfcTimeSeries\t1\nPARAM\tf9110000-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.ActualCost\tMULTILINETEXT\t\t97\t1\tIfcTimeSeries\t1\nPARAM\tf1515b80-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.ActualWork\tMULTILINETEXT\t\t97\t1\tIfcTimeSeries\t1\nPARAM\tfb735a00-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.RemainingCost\tMULTILINETEXT\t\t97\t1\tIfcTimeSeries\t1\nPARAM\tf3b3b580-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.RemainingWork\tMULTILINETEXT\t\t97\t1\tIfcTimeSeries\t1\nPARAM\tfe6e4a80-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.ScheduleCompletion\tMULTILINETEXT\t\t97\t1\tIfcTimeSeries\t1\nPARAM\tf6aea600-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.ScheduleCost\tMULTILINETEXT\t\t97\t1\tIfcTimeSeries\t1\nPARAM\tee566b00-d1cc-11e1-8000-00215ad4efdf\tPset_ConstructionResource.ScheduleWork\tMULTILINETEXT\t\t97\t1\tIfcTimeSeries\t1\n#\nGROUP\t98\tPset_ControllerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0cbc6680-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerPHistory.Quality\tMULTILINETEXT\t\t98\t1\tIfcTimeSeries\t1\nPARAM\t0f1ec080-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerPHistory.Status\tMULTILINETEXT\t\t98\t1\tIfcTimeSeries\t1\nPARAM\t09c17600-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerPHistory.Value\tMULTILINETEXT\t\t98\t1\tIfcTimeSeries\t1\n#\nGROUP\t99\tPset_ControllerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tee111c9c-558b-4b26-a786-d1d89dea88aa\tPset_ControllerTypeCommon.ControlType\tTEXT\t\t99\t1\tPEnum_ControlType\t1\nPARAM\t1776fb80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeCommon.Reference\tTEXT\t\t99\t1\tIfcIdentifier\t1\nPARAM\t3e1aad58-71b1-4b3b-a925-656f7f74b4c2\tPset_ControllerTypeCommon.SignalFactor\tNUMBER\t\t99\t1\tIfcReal\t1\nPARAM\tc035815e-01a2-4fd9-a21c-9795e7bd0eb4\tPset_ControllerTypeCommon.SignalOffset\tNUMBER\t\t99\t1\tIfcReal\t1\nPARAM\tf5327db5-7978-4ec7-ac5f-a32887bd814d\tPset_ControllerTypeCommon.SignalTime\tNUMBER\t\t99\t1\tIfcTimeMeasure\t1\nPARAM\t1c3baf80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeCommon.Status\tTEXT\t\t99\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t100\tPset_ControllerTypeFloating\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2eb5e900-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.ControlType\tTEXT\t\t100\t1\tPEnum_ControllerTypeFloating\t1\nPARAM\t56a54c80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.Labels\tMULTILINETEXT\t\t100\t1\tPropertyTableValue\t1\nPARAM\t5efd8780-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.Range\tMULTILINETEXT\t\t100\t1\tPropertyBoundedValue\t1\nPARAM\t6de43a00-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.SignalFactor\tNUMBER\t\t100\t1\tIfcReal\t1\nPARAM\t69b81c80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.SignalOffset\tNUMBER\t\t100\t1\tIfcReal\t1\nPARAM\t72a8ee00-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.SignalTime\tNUMBER\t\t100\t1\tIfcTimeMeasure\t1\nPARAM\t63c23b80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeFloating.Value\tMULTILINETEXT\t\t100\t1\tPropertyBoundedValue\t1\n#\nGROUP\t101\tPset_ControllerTypeMultiPosition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e94b000-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeMultiPosition.ControlType\tTEXT\t\t101\t1\tPEnum_ControllerMultiPositionType\t1\nPARAM\t89e7db80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeMultiPosition.Labels\tMULTILINETEXT\t\t101\t1\tPropertyTableValue\t1\nPARAM\t910ee980-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeMultiPosition.Range\tMULTILINETEXT\t\t101\t1\tPropertyBoundedValue\t1\nPARAM\t95d39d80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeMultiPosition.Value\tMULTILINETEXT\t\t101\t1\tPropertyBoundedValue\t1\n#\nGROUP\t102\tPset_ControllerTypeProgrammable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5a95c146-e11d-4ab0-9a7b-5dbaa356881c\tPset_ControllerTypeProgrammable.Application\tTEXT\t\t102\t1\tPEnum_ControllerApplication\t1\nPARAM\ta126c900-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProgrammable.ControlType\tTEXT\t\t102\t1\tPEnum_ControllerTypeProgrammable\t1\nPARAM\tab48c780-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProgrammable.FirmwareVersion\tTEXT\t\t102\t1\tIfcLabel\t1\nPARAM\tb0a61200-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProgrammable.SoftwareVersion\tTEXT\t\t102\t1\tIfcLabel\t1\n#\nGROUP\t103\tPset_ControllerTypeProportional\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbd2a6a80-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.ControlType\tTEXT\t\t103\t1\tPEnum_ControllerProportionalType\t1\nPARAM\teba84580-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.DerivativeConstant\tNUMBER\t\t103\t1\tIfcReal\t1\nPARAM\te6e39180-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.IntegralConstant\tNUMBER\t\t103\t1\tIfcReal\t1\nPARAM\tcc111d00-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.Labels\tMULTILINETEXT\t\t103\t1\tPropertyTableValue\t1\nPARAM\te1864700-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.ProportionalConstant\tNUMBER\t\t103\t1\tIfcReal\t1\nPARAM\td4695800-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.Range\tMULTILINETEXT\t\t103\t1\tPropertyBoundedValue\t1\nPARAM\tb6a967eb-017d-401e-975c-498724ae1213\tPset_ControllerTypeProportional.SignalFactor1\tNUMBER\t\t103\t1\tIfcReal\t1\nPARAM\tf6dcf389-fbb9-43fa-9a4a-c19a7eada379\tPset_ControllerTypeProportional.SignalFactor2\tNUMBER\t\t103\t1\tIfcReal\t1\nPARAM\tc3202180-6f9a-4584-8574-0337b159aa41\tPset_ControllerTypeProportional.SignalTime1\tNUMBER\t\t103\t1\tIfcTimeMeasure\t1\nPARAM\tac973cbe-b8e5-4abb-9be1-b890024686b6\tPset_ControllerTypeProportional.SignalTime2\tNUMBER\t\t103\t1\tIfcTimeMeasure\t1\nPARAM\tf7940780-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.SignalTimeDecrease\tNUMBER\t\t103\t1\tIfcTimeMeasure\t1\nPARAM\tf236bd00-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.SignalTimeIncrease\tNUMBER\t\t103\t1\tIfcTimeMeasure\t1\nPARAM\tda5f3900-d1cd-11e1-8000-00215ad4efdf\tPset_ControllerTypeProportional.Value\tMULTILINETEXT\t\t103\t1\tPropertyBoundedValue\t1\n#\nGROUP\t104\tPset_ControllerTypeTwoPosition\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t619d5848-fcb1-492f-87c8-fe13c54b13ec\tPset_ControllerTypeTwoPosition.BandWidth\tNUMBER\t\t104\t1\tIfcReal\t1\nPARAM\t02e73300-d1ce-11e1-8000-00215ad4efdf\tPset_ControllerTypeTwoPosition.ControlType\tTEXT\t\t104\t1\tPEnum_ControllerTwoPositionType\t1\nPARAM\t201c0180-d1ce-11e1-8000-00215ad4efdf\tPset_ControllerTypeTwoPosition.Labels\tMULTILINETEXT\t\t104\t1\tPropertyTableValue\t1\nPARAM\t27dba600-d1ce-11e1-8000-00215ad4efdf\tPset_ControllerTypeTwoPosition.Polarity\tYESNO\t\t104\t1\tIfcBoolean\t1\nPARAM\t2d38f080-d1ce-11e1-8000-00215ad4efdf\tPset_ControllerTypeTwoPosition.Value\tYESNO\t\t104\t1\tIfcBoolean\t1\n#\nGROUP\t105\tPset_CooledBeamPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t404bc080-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.BeamCoolingCapacity\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t4346b100-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.BeamHeatingCapacity\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t4641a180-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.CoolingWaterFlowRate\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t4cd01900-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.CorrectionFactorForCooling\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t5063a000-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.CorrectionFactorForHeating\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t493c9200-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.HeatingWaterFlowRate\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t59ed0800-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.ReturnWaterTemperatureCooling\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t607b7f80-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.ReturnWaterTemperatureHeating\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t578aae00-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.SupplyWaterTemperatureCooling\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t5ce7f880-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.SupplyWaterTemperatureHeating\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t39bd4900-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.TotalCoolingCapacity\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t3cb83980-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.TotalHeatingCapacity\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\nPARAM\t53f72700-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistory.WaterPressureDropCurves\tMULTILINETEXT\t\t105\t1\tIfcTimeSeries\t1\n#\nGROUP\t106\tPset_CooledBeamPHistoryActive\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c674180-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistoryActive.AirFlowRate\tMULTILINETEXT\t\t106\t1\tIfcTimeSeries\t1\nPARAM\t72f5b900-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistoryActive.AirPressureDropCurves\tMULTILINETEXT\t\t106\t1\tIfcTimeSeries\t1\nPARAM\t6ffac880-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamPHistoryActive.Throw\tMULTILINETEXT\t\t106\t1\tIfcTimeSeries\t1\n#\nGROUP\t107\tPset_CooledBeamTypeActive\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7c7f2100-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeActive.AirFlowConfiguration\tTEXT\t\t107\t1\tPEnum_CooledBeamActiveAirFlowConfigurationType\t1\nPARAM\t8acd3d00-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeActive.AirflowRateRange\tMULTILINETEXT\t\t107\t1\tPropertyBoundedValue\t1\nPARAM\ta0426700-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeActive.ConnectionSize\tLENGTH\t\t107\t1\tIfcLengthMeasure\t1\nPARAM\t915bb480-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeActive.SupplyAirConnectionType\tTEXT\t\t107\t1\tPEnum_CooledBeamSupplyAirConnectionType\t1\n#\nGROUP\t108\tPset_CooledBeamTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a0a1400-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.CoilLength\tLENGTH\t\t108\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3ecec800-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.CoilWidth\tLENGTH\t\t108\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9fe9471c-ee77-4958-9c4f-e9277ab33ae8\tPset_CooledBeamTypeCommon.ConnectionSize\tLENGTH\t\t108\t1\tIfcLengthMeasure\t1\nPARAM\t34acc980-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.FinishColor\tTEXT\t\t108\t1\tIfcLabel\t1\nPARAM\t15ae3780-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.IntegratedLightingType\tTEXT\t\t108\t1\tPEnum_CooledBeamIntegratedLightingType\t1\nPARAM\tbfd98f80-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.IsFreeHanging\tYESNO\t\t108\t1\tIfcBoolean\t1\nPARAM\t8ef76eb1-c5ff-4ae1-b3dc-b49a7bf4e09e\tPset_CooledBeamTypeCommon.Material\tMULTILINETEXT\t\t108\t1\tIfcMaterial\t1\nPARAM\tdbdd3100-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalCoolingCapacity\tNUMBER\t\t108\t1\tIfcPowerMeasure\t1\nPARAM\tfc0cf000-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalHeatingCapacity\tNUMBER\t\t108\t1\tIfcPowerMeasure\t1\nPARAM\tf0b9c480-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalReturnWaterTemperatureCooling\tNUMBER\t\t108\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t0af3a280-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalReturnWaterTemperatureHeating\tNUMBER\t\t108\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\teb5c7a00-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureCooling\tNUMBER\t\t108\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t062eee80-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalSupplyWaterTemperatureHeating\tNUMBER\t\t108\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\te697c600-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalSurroundingHumidityCooling\tNUMBER\t\t108\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\te1d31200-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalSurroundingTemperatureCooling\tNUMBER\t\t108\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t016a3a80-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalSurroundingTemperatureHeating\tNUMBER\t\t108\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tf6170f00-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalWaterFlowCooling\tNUMBER\t\t108\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t1050ed00-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.NominalWaterFlowHeating\tNUMBER\t\t108\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t25c61700-d1cf-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.PipeConnection\tTEXT\t\t108\t1\tPEnum_CooledBeamPipeConnection\t1\nPARAM\t21535213-7813-4832-9936-8109a395d8c7\tPset_CooledBeamTypeCommon.PipeConnectionEnum\tTEXT\t\t108\t1\tPEnum_CooledBeamPipeConnection\t1\nPARAM\taafcfc00-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.Reference\tTEXT\t\t108\t1\tIfcIdentifier\t1\nPARAM\tb05a4680-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.Status\tTEXT\t\t108\t1\tPEnum_ElementStatus\t1\nPARAM\tc536da00-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.WaterFlowControlSystemType\tTEXT\t\t108\t1\tPEnum_CooledBeamWaterFlowControlSystemType\t1\nPARAM\td54eb980-d1ce-11e1-8000-00215ad4efdf\tPset_CooledBeamTypeCommon.WaterPressureRange\tMULTILINETEXT\t\t108\t1\tPropertyBoundedValue\t1\nPARAM\t7e1f41df-14dd-4057-9bd1-16dc65b74289\tPset_CooledBeamTypeCommon.Weight\tNUMBER\t\t108\t1\tIfcMassMeasure\t1\n#\nGROUP\t109\tPset_CoolingTowerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4aba8a00-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerPHistory.Capacity\tMULTILINETEXT\t\t109\t1\tIfcTimeSeries\t1\nPARAM\t4db57a80-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerPHistory.HeatTransferCoefficient\tMULTILINETEXT\t\t109\t1\tIfcTimeSeries\t1\nPARAM\t57d77900-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerPHistory.Performance\tMULTILINETEXT\t\t109\t1\tIfcTimeSeries\t1\nPARAM\t50b06b00-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerPHistory.SumpHeaterPower\tMULTILINETEXT\t\t109\t1\tIfcTimeSeries\t1\nPARAM\t5443f200-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerPHistory.UACurve\tMULTILINETEXT\t\t109\t1\tIfcTimeSeries\t1\n#\nGROUP\t110\tPset_CoolingTowerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te9df8180-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.AmbientDesignDryBulbTemperature\tNUMBER\t\t110\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tef3ccc00-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.AmbientDesignWetBulbTemperature\tNUMBER\t\t110\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\td6341b00-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.BasinReserveVolume\tVOLUME\t\t110\t1\tIfcVolumeMeasure\t1\nPARAM\ta553e600-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.CapacityControl\tTEXT\t\t110\t1\tPEnum_CoolingTowerCapacityControl\t1\nPARAM\t4eb03606-5848-4f14-b4bb-f27cefe8158a\tPset_CoolingTowerTypeCommon.CasingMaterial\tMULTILINETEXT\t\t110\t1\tIfcMaterial\t1\nPARAM\t7b022880-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.CircuitType\tTEXT\t\t110\t1\tPEnum_CoolingTowerCircuitType\t1\nPARAM\tc583a500-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.ControlStrategy\tTEXT\t\t110\t1\tPEnum_CoolingTowerControlStrategy\t1\nPARAM\tdb7eac3d-c9dc-4484-8fb1-79a1189f1635\tPset_CoolingTowerTypeCommon.FillMaterial\tMULTILINETEXT\t\t110\t1\tIfcMaterial\t1\nPARAM\t89504480-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.FlowArrangement\tTEXT\t\t110\t1\tPEnum_CoolingTowerFlowArrangement\t1\nPARAM\tdb916580-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.LiftElevationDifference\tLENGTH\t\t110\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t75a4de00-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.NominalCapacity\tNUMBER\t\t110\t1\tIfcPowerMeasure\t1\nPARAM\td0d6d080-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.NumberOfCells\tINTEGER\t\t110\t1\tIfcInteger\t1\nPARAM\te51acd80-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.OperationTemperatureRange\tNUMBER\t\t110\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t6160e100-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.Reference\tTEXT\t\t110\t1\tIfcIdentifier\t1\nPARAM\t95d49d00-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.SprayType\tTEXT\t\t110\t1\tPEnum_CoolingTowerSprayType\t1\nPARAM\t66be2b80-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.Status\tTEXT\t\t110\t1\tPEnum_ElementStatus\t1\nPARAM\te0561980-d1cf-11e1-8000-00215ad4efdf\tPset_CoolingTowerTypeCommon.WaterRequirement\tNUMBER\t\t110\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t738855b4-c04c-4e30-bdb3-6cf0127bf466\tPset_CoolingTowerTypeCommon.Weight\tNUMBER\t\t110\t1\tIfcMassMeasure\t1\n#\nGROUP\t111\tPset_CoveringCeiling\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7ad6e058-1d8a-430d-898c-57d5a7183d0a\tPset_CoveringCeiling.FragilityRating\tTEXT\t\t111\t1\tIfcLabel\t1\nPARAM\tfebc1500-d1cf-11e1-8000-00215ad4efdf\tPset_CoveringCeiling.Permeability\tNUMBER\t\t111\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t04195f80-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCeiling.TileLength\tLENGTH\t\t111\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0976aa00-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCeiling.TileWidth\tLENGTH\t\t111\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t112\tPset_CoveringCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2e6b1d00-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.AcousticRating\tTEXT\t\t112\t1\tIfcLabel\t1\nPARAM\t45aa0a80-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.Combustible\tYESNO\t\t112\t1\tIfcBoolean\t1\nPARAM\t565a8080-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.Finish\tTEXT\t\t112\t1\tIfcText\t1\nPARAM\t28753c00-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.FireRating\tTEXT\t\t112\t1\tIfcLabel\t1\nPARAM\t3460fe00-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.FlammabilityRating\tTEXT\t\t112\t1\tIfcLabel\t1\nPARAM\t63a53c3b-4589-4569-a1c6-71ad903125cb\tPset_CoveringCommon.Fragility\tTEXT\t\t112\t1\tIfcLabel\t1\nPARAM\t39be4880-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.FragilityRating\tTEXT\t\t112\t1\tIfcLabel\t1\nPARAM\t4b9feb80-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.IsExternal\tYESNO\t\t112\t1\tIfcBoolean\t1\nPARAM\t9b01cd42-fd2b-4a99-8774-59081c52cd99\tPset_CoveringCommon.Material\tTEXT\t\t112\t1\tIfcLabel\t1\nPARAM\t14c9d580-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.Reference\tTEXT\t\t112\t1\tIfcIdentifier\t1\nPARAM\t1a272000-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.Status\tTEXT\t\t112\t1\tPEnum_ElementStatus\t1\nPARAM\t3f1b9300-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.SurfaceSpreadOfFlame\tTEXT\t\t112\t1\tIfcLabel\t1\nPARAM\t50fd3600-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringCommon.ThermalTransmittance\tNUMBER\t\t112\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\te0d3c4db-14e5-47b5-9a34-0467f88bebf7\tPset_CoveringCommon.Thickness\tLENGTH\t\t112\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tff16add0-ca54-4912-a2d7-141642c4573f\tPset_CoveringCommon.TotalThickness\tLENGTH\t\t112\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t113\tPset_CoveringFlooring\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t683c2380-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringFlooring.HasAntiStaticSurface\tYESNO\t\t113\t1\tIfcBoolean\t1\nPARAM\t62ded900-d1d0-11e1-8000-00215ad4efdf\tPset_CoveringFlooring.HasNonSkidSurface\tYESNO\t\t113\t1\tIfcBoolean\t1\n#\nGROUP\t114\tPset_CurtainWallCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8b66d300-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.AcousticRating\tTEXT\t\t114\t1\tIfcLabel\t1\nPARAM\t96b9fe80-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.Combustible\tYESNO\t\t114\t1\tIfcBoolean\t1\nPARAM\t915cb400-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.FireRating\tTEXT\t\t114\t1\tIfcLabel\t1\nPARAM\ta6394780-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.IsExternal\tYESNO\t\t114\t1\tIfcBoolean\t1\nPARAM\t75f1a900-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.Reference\tTEXT\t\t114\t1\tIfcIdentifier\t1\nPARAM\t7be78a00-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.Status\tTEXT\t\t114\t1\tPEnum_ElementStatus\t1\nPARAM\t9c174900-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.SurfaceSpreadOfFlame\tTEXT\t\t114\t1\tIfcLabel\t1\nPARAM\ta1749380-d1d0-11e1-8000-00215ad4efdf\tPset_CurtainWallCommon.ThermalTransmittance\tNUMBER\t\t114\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t115\tPset_DamperOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb2250980-d1d0-11e1-8000-00215ad4efdf\tPset_DamperOccurrence.SizingMethod\tTEXT\t\t115\t1\tPEnum_DamperSizingMethod\t1\n#\nGROUP\t116\tPset_DamperPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc36e1600-d1d0-11e1-8000-00215ad4efdf\tPset_DamperPHistory.AirFlowRate\tMULTILINETEXT\t\t116\t1\tIfcTimeSeries\t1\nPARAM\tcc5ee780-d1d0-11e1-8000-00215ad4efdf\tPset_DamperPHistory.BladePositionAngle\tMULTILINETEXT\t\t116\t1\tIfcTimeSeries\t1\nPARAM\tcff26e80-d1d0-11e1-8000-00215ad4efdf\tPset_DamperPHistory.DamperPosition\tMULTILINETEXT\t\t116\t1\tIfcTimeSeries\t1\nPARAM\tc7019d00-d1d0-11e1-8000-00215ad4efdf\tPset_DamperPHistory.Leakage\tMULTILINETEXT\t\t116\t1\tIfcTimeSeries\t1\nPARAM\tc9fc8d80-d1d0-11e1-8000-00215ad4efdf\tPset_DamperPHistory.PressureDrop\tMULTILINETEXT\t\t116\t1\tIfcTimeSeries\t1\nPARAM\td2ed5f00-d1d0-11e1-8000-00215ad4efdf\tPset_DamperPHistory.PressureLossCoefficient\tMULTILINETEXT\t\t116\t1\tIfcTimeSeries\t1\n#\nGROUP\t117\tPset_DamperTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t16e06400-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.BladeAction\tTEXT\t\t117\t1\tPEnum_DamperBladeAction\t1\nPARAM\t31b2d880-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.BladeEdge\tTEXT\t\t117\t1\tPEnum_DamperBladeEdge\t1\nPARAM\t6fe295a4-17bd-44c2-9e4b-9ae66e3fa336\tPset_DamperTypeCommon.BladeMaterial\tMULTILINETEXT\t\t117\t1\tIfcMaterial\t1\nPARAM\t252e8000-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.BladeShape\tTEXT\t\t117\t1\tPEnum_DamperBladeShape\t1\nPARAM\t0def9280-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.BladeThickness\tLENGTH\t\t117\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t98d08d00-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.CloseOffRating\tNUMBER\t\t117\t1\tIfcPressureMeasure\t1\nPARAM\t42634e80-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.FaceArea\tAREA\t\t117\t1\tIfcAreaMeasure\t1\nPARAM\t8b1b0780-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.FrameDepth\tLENGTH\t\t117\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb6bb77da-767f-490c-9fa7-504ac7b31a80\tPset_DamperTypeCommon.FrameMaterial\tMULTILINETEXT\t\t117\t1\tIfcMaterial\t1\nPARAM\t93734280-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.FrameThickness\tLENGTH\t\t117\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t85252680-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.FrameType\tTEXT\t\t117\t1\tIfcLabel\t1\nPARAM\t750d4700-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.LeakageCurve\tMULTILINETEXT\t\t117\t1\tPropertyTableValue\t1\nPARAM\t67f05800-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.LeakageFullyClosed\tNUMBER\t\t117\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t6cb50c00-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.LossCoefficentCurve\tMULTILINETEXT\t\t117\t1\tPropertyTableValue\t1\nPARAM\t47c09900-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.MaximumAirFlowRate\tNUMBER\t\t117\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t53ac5b00-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.MaximumWorkingPressure\tNUMBER\t\t117\t1\tIfcPressureMeasure\t1\nPARAM\t5e66f000-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.NominalAirFlowRate\tNUMBER\t\t117\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t3d060400-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.NumberofBlades\tINTEGER\t\t117\t1\tIfcInteger\t1\nPARAM\t632ba400-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.OpenPressureDrop\tNUMBER\t\t117\t1\tIfcPressureMeasure\t1\nPARAM\tf0222d80-d1d0-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.Operation\tTEXT\t\t117\t1\tPEnum_DamperOperation\t1\nPARAM\tfca68600-d1d0-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.Orientation\tTEXT\t\t117\t1\tPEnum_DamperOrientation\t1\nPARAM\tdc76c700-d1d0-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.Reference\tTEXT\t\t117\t1\tIfcIdentifier\t1\nPARAM\t7d658200-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.RegeneratedSoundCurve\tMULTILINETEXT\t\t117\t1\tPropertyTableValue\t1\nPARAM\tfbbbf828-76ff-438c-9712-edaa60326184\tPset_DamperTypeCommon.SealMaterial\tMULTILINETEXT\t\t117\t1\tIfcMaterial\t1\nPARAM\te1d41180-d1d0-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.Status\tTEXT\t\t117\t1\tPEnum_ElementStatus\t1\nPARAM\t4c854d00-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.TemperatureRange\tMULTILINETEXT\t\t117\t1\tPropertyBoundedValue\t1\nPARAM\t5909a580-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeCommon.TemperatureRating\tNUMBER\t\t117\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t5573ad4e-fd29-414e-bd97-f2150e618b79\tPset_DamperTypeCommon.TorqueRange\tMULTILINETEXT\t\t117\t1\tPropertyBoundedValue\t1\n#\nGROUP\t118\tPset_DamperTypeControlDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taa199980-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeControlDamper.ControlDamperOperation\tTEXT\t\t118\t1\tPEnum_ControlDamperOperation\t1\nPARAM\ta38b2200-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeControlDamper.TorqueRange\tMULTILINETEXT\t\t118\t1\tPropertyBoundedValue\t1\n#\nGROUP\t119\tPset_DamperTypeFireDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc93d300-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireDamper.ActuationType\tTEXT\t\t119\t1\tPEnum_FireDamperActuationType\t1\nPARAM\tc9182b80-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireDamper.ClosureRatingEnum\tTEXT\t\t119\t1\tPEnum_FireDamperClosureRating\t1\nPARAM\td6351a80-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireDamper.FireResistanceRating\tTEXT\t\t119\t1\tIfcLabel\t1\nPARAM\tdc2afb80-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireDamper.FusibleLinkTemperature\tNUMBER\t\t119\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t120\tPset_DamperTypeFireSmokeDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ted740800-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireSmokeDamper.ActuationType\tTEXT\t\t120\t1\tPEnum_FireDamperActuationType\t1\nPARAM\tfa90f700-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireSmokeDamper.ClosureRatingEnum\tTEXT\t\t120\t1\tPEnum_FireDamperClosureRating\t1\nPARAM\te77e2700-d1d1-11e1-8000-00215ad4efdf\tPset_DamperTypeFireSmokeDamper.ControlType\tTEXT\t\t120\t1\tIfcLabel\t1\nPARAM\t07154f80-d1d2-11e1-8000-00215ad4efdf\tPset_DamperTypeFireSmokeDamper.FireResistanceRating\tTEXT\t\t120\t1\tIfcLabel\t1\nPARAM\t0bda0380-d1d2-11e1-8000-00215ad4efdf\tPset_DamperTypeFireSmokeDamper.FusibleLinkTemperature\tNUMBER\t\t120\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t121\tPset_DamperTypeSmokeDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t172d2f00-d1d2-11e1-8000-00215ad4efdf\tPset_DamperTypeSmokeDamper.ControlType\tTEXT\t\t121\t1\tIfcLabel\t1\n#\nGROUP\t122\tPset_DesignPoint\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta2120de5-3f61-4a57-a6ed-4d239d963e9f\tPset_DesignPoint.IsDesignPoint\tYESNO\t\t122\t1\tIfcBoolean\t1\n#\nGROUP\t123\tPset_DiscreteAccessoryAnchorBolt\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc42ec2e1-3e20-4c39-970f-8952e055df89\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltDiameter\tLENGTH\t\t123\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t60b2f740-cccd-4eb7-8c33-c335c3126732\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltLength\tLENGTH\t\t123\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdded3af9-76d4-49ec-8a3c-9ad3e8583eac\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltProtrusionLength\tLENGTH\t\t123\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t586754a7-6804-4fdc-95dc-a6a4660d3e59\tPset_DiscreteAccessoryAnchorBolt.AnchorBoltThreadLength\tLENGTH\t\t123\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t124\tPset_DiscreteAccessoryColumnShoe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t30ce7680-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateDepth\tLENGTH\t\t124\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2613e180-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateThickness\tLENGTH\t\t124\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2c09c280-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryColumnShoe.ColumnShoeBasePlateWidth\tLENGTH\t\t124\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t404dbf80-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryColumnShoe.ColumnShoeCasingDepth\tLENGTH\t\t124\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t362bc100-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryColumnShoe.ColumnShoeCasingHeight\tLENGTH\t\t124\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3af07500-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryColumnShoe.ColumnShoeCasingWidth\tLENGTH\t\t124\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t125\tPset_DiscreteAccessoryCornerFixingPlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5bb8ca80-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneX\tLENGTH\t\t125\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t565b8000-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateFlangeWidthInPlaneZ\tLENGTH\t\t125\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4ba0eb00-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateLength\tLENGTH\t\t125\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t50fe3580-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryCornerFixingPlate.CornerFixingPlateThickness\tLENGTH\t\t125\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t126\tPset_DiscreteAccessoryDiagonalTrussConnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7723d580-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussBaseBarDiameter\tLENGTH\t\t126\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t81de6a80-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarDiameter\tLENGTH\t\t126\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t71c68b00-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussCrossBarSpacing\tLENGTH\t\t126\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t67a48c80-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussHeight\tLENGTH\t\t126\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6d01d700-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussLength\tLENGTH\t\t126\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7c812000-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryDiagonalTrussConnector.DiagonalTrussSecondaryBarDiameter\tLENGTH\t\t126\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t127\tPset_DiscreteAccessoryEdgeFixingPlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9d497580-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneX\tLENGTH\t\t127\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t97ec2b00-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateFlangeWidthInPlaneZ\tLENGTH\t\t127\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8d319600-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateLength\tLENGTH\t\t127\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t928ee080-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryEdgeFixingPlate.EdgeFixingPlateThickness\tLENGTH\t\t127\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t128\tPset_DiscreteAccessoryFixingSocket\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tab979180-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryFixingSocket.FixingSocketHeight\tLENGTH\t\t128\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb0f4dc00-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryFixingSocket.FixingSocketThreadDiameter\tLENGTH\t\t128\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb6522680-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryFixingSocket.FixingSocketThreadLength\tLENGTH\t\t128\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta9353780-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryFixingSocket.FixingSocketTypeReference\tMULTILINETEXT\t\t128\t1\tIfcExternalReference\t1\n#\nGROUP\t129\tPset_DiscreteAccessoryLadderTrussConnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td255c800-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussBaseBarDiameter\tLENGTH\t\t129\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdda8f380-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarDiameter\tLENGTH\t\t129\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcd911400-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussCrossBarSpacing\tLENGTH\t\t129\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc23de880-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussHeight\tLENGTH\t\t129\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc7029c80-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussLength\tLENGTH\t\t129\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td84ba900-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryLadderTrussConnector.LadderTrussSecondaryBarDiameter\tLENGTH\t\t129\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t130\tPset_DiscreteAccessoryStandardFixingPlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teef20000-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateDepth\tLENGTH\t\t130\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf44f4a80-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateThickness\tLENGTH\t\t130\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te8fc1f00-d1d2-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryStandardFixingPlate.StandardFixingPlateWidth\tLENGTH\t\t130\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t131\tPset_DiscreteAccessoryWireLoop\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1648cd00-d1d3-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryWireLoop.WireDiameter\tLENGTH\t\t131\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t252f7f80-d1d3-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryWireLoop.WireEmbeddingLength\tLENGTH\t\t131\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0e892880-d1d3-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryWireLoop.WireLoopBasePlateLength\tLENGTH\t\t131\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t003b0c80-d1d3-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryWireLoop.WireLoopBasePlateThickness\tLENGTH\t\t131\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t05985700-d1d3-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryWireLoop.WireLoopBasePlateWidth\tLENGTH\t\t131\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32e50500-d1d3-11e1-8000-00215ad4efdf\tPset_DiscreteAccessoryWireLoop.WireLoopLength\tLENGTH\t\t131\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t132\tPset_DistributionChamberElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t54de8780-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementCommon.Reference\tTEXT\t\t132\t1\tIfcIdentifier\t1\nPARAM\t5e67ef80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementCommon.Status\tTEXT\t\t132\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t133\tPset_DistributionChamberElementTypeFormedDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t88b9ad00-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeFormedDuct.AccessCoverLoadRating\tTEXT\t\t133\t1\tIfcText\t1\nPARAM\t0f4f6ce0-1d4c-4d95-b8d2-47dde9cf8e1e\tPset_DistributionChamberElementTypeFormedDuct.AccessCoverMaterial\tMULTILINETEXT\t\t133\t1\tIfcMaterial\t1\nPARAM\t93eb5ae9-5e1f-42d7-9a62-e94cf906b749\tPset_DistributionChamberElementTypeFormedDuct.BaseMaterial\tMULTILINETEXT\t\t133\t1\tIfcMaterial\t1\nPARAM\t835c6280-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeFormedDuct.BaseThickness\tLENGTH\t\t133\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t78a1cd80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeFormedDuct.ClearDepth\tLENGTH\t\t133\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t73448300-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeFormedDuct.ClearWidth\tLENGTH\t\t133\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb570c755-c509-4e86-ad74-02bd700c61c8\tPset_DistributionChamberElementTypeFormedDuct.FillMaterial\tMULTILINETEXT\t\t133\t1\tIfcMaterial\t1\nPARAM\t49b4497a-83ea-4bd4-a1d6-f874ffb6aa12\tPset_DistributionChamberElementTypeFormedDuct.WallMaterial\tMULTILINETEXT\t\t133\t1\tIfcMaterial\t1\nPARAM\t7e97ae80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeFormedDuct.WallThickness\tLENGTH\t\t133\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t134\tPset_DistributionChamberElementTypeInspectionChamber\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td46c5680-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.AccessCoverLoadRating\tTEXT\t\t134\t1\tIfcText\t1\nPARAM\tbdc5ff80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.AccessCoverMaterial\tMULTILINETEXT\t\t134\t1\tIfcMaterialDefinition\t1\nPARAM\tc0c0f000-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.AccessLengthOrRadius\tLENGTH\t\t134\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc61e3a80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.AccessWidth\tLENGTH\t\t134\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb0107a00-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.BaseMaterial\tMULTILINETEXT\t\t134\t1\tIfcMaterialDefinition\t1\nPARAM\tb30b6a80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.BaseThickness\tLENGTH\t\t134\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t93744200-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.ChamberLengthOrRadius\tLENGTH\t\t134\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t98d18c80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.ChamberWidth\tLENGTH\t\t134\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9e2ed700-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.InvertLevel\tLENGTH\t\t134\t1\tIfcLengthMeasure\t1\nPARAM\ta25af480-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.SoffitLevel\tLENGTH\t\t134\t1\tIfcLengthMeasure\t1\nPARAM\ta850d580-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.WallMaterial\tMULTILINETEXT\t\t134\t1\tIfcMaterialDefinition\t1\nPARAM\tab4bc600-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.WallThickness\tLENGTH\t\t134\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb868b500-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionChamber.WithBackdrop\tYESNO\t\t134\t1\tIfcBoolean\t1\n#\nGROUP\t135\tPset_DistributionChamberElementTypeInspectionPit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tec43da80-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionPit.Depth\tLENGTH\t\t135\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te0581880-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionPit.Length\tLENGTH\t\t135\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te6e69000-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeInspectionPit.Width\tLENGTH\t\t135\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t136\tPset_DistributionChamberElementTypeManhole\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t32993980-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.AccessCoverLoadRating\tTEXT\t\t136\t1\tIfcText\t1\nPARAM\t23b28700-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.AccessCoverMaterial\tMULTILINETEXT\t\t136\t1\tIfcMaterialDefinition\t1\nPARAM\t26ad7780-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.AccessLengthOrRadius\tLENGTH\t\t136\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2ca35880-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.AccessWidth\tLENGTH\t\t136\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0a113f80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.BaseMaterial\tMULTILINETEXT\t\t136\t1\tIfcMaterialDefinition\t1\nPARAM\t0da4c680-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.BaseThickness\tLENGTH\t\t136\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t185f5b80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.HasSteps\tYESNO\t\t136\t1\tIfcBoolean\t1\nPARAM\tf7970600-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.InvertLevel\tLENGTH\t\t136\t1\tIfcLengthMeasure\t1\nPARAM\t13021100-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.IsShallow\tYESNO\t\t136\t1\tIfcBoolean\t1\nPARAM\tfc5bba00-d1d3-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.SoffitLevel\tLENGTH\t\t136\t1\tIfcLengthMeasure\t1\nPARAM\t01206e00-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.WallMaterial\tMULTILINETEXT\t\t136\t1\tIfcMaterialDefinition\t1\nPARAM\t04b3f500-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.WallThickness\tLENGTH\t\t136\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1dbca600-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeManhole.WithBackdrop\tYESNO\t\t136\t1\tIfcBoolean\t1\n#\nGROUP\t137\tPset_DistributionChamberElementTypeMeterChamber\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5b213380-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.AccessCoverMaterial\tMULTILINETEXT\t\t137\t1\tIfcMaterialDefinition\t1\nPARAM\t52306200-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.BaseMaterial\tMULTILINETEXT\t\t137\t1\tIfcMaterialDefinition\t1\nPARAM\t55c3e900-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.BaseThickness\tLENGTH\t\t137\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3d53ce80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.ChamberLengthOrRadius\tLENGTH\t\t137\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t42b11900-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.ChamberWidth\tLENGTH\t\t137\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t48a6fa00-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.WallMaterial\tMULTILINETEXT\t\t137\t1\tIfcMaterialDefinition\t1\nPARAM\t4c3a8100-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeMeterChamber.WallThickness\tLENGTH\t\t137\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t138\tPset_DistributionChamberElementTypeSump\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t70965d80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeSump.InvertLevel\tLENGTH\t\t138\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t64aa9b80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeSump.Length\tLENGTH\t\t138\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6aa07c80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeSump.Width\tLENGTH\t\t138\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t139\tPset_DistributionChamberElementTypeTrench\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83a92d80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeTrench.Depth\tLENGTH\t\t139\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t899f0e80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeTrench.InvertLevel\tLENGTH\t\t139\t1\tIfcLengthMeasure\t1\nPARAM\t7d1ab600-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeTrench.Width\tLENGTH\t\t139\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t140\tPset_DistributionChamberElementTypeValveChamber\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb6532600-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.AccessCoverMaterial\tMULTILINETEXT\t\t140\t1\tIfcMaterialDefinition\t1\nPARAM\tac312780-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.BaseMaterial\tMULTILINETEXT\t\t140\t1\tIfcMaterialDefinition\t1\nPARAM\tafc4ae80-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.BaseThickness\tLENGTH\t\t140\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t96236700-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.ChamberLengthOrRadius\tLENGTH\t\t140\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9c194800-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.ChamberWidth\tLENGTH\t\t140\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta20f2900-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.WallMaterial\tMULTILINETEXT\t\t140\t1\tIfcMaterialDefinition\t1\nPARAM\ta5a2b000-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionChamberElementTypeValveChamber.WallThickness\tLENGTH\t\t140\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t141\tPset_DistributionFlowElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1d126ec1-34b3-4870-a421-58244f26788e\tPset_DistributionFlowElementCommon.Reference\tTEXT\t\t141\t1\tIfcIdentifier\t1\n#\nGROUP\t142\tPset_DistributionPortCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc79c3280-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionPortCommon.ColorCode\tTEXT\t\t142\t1\tIfcLabel\t1\nPARAM\tc0752480-d1d4-11e1-8000-00215ad4efdf\tPset_DistributionPortCommon.PortNumber\tINTEGER\t\t142\t1\tIfcInteger\t1\n#\nGROUP\t143\tPset_DistributionPortDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t26f6e010-3a72-4e2e-91bf-96a6d30ddb98\tPset_DistributionPortDuct.ConnectionType\tTEXT\t\t143\t1\tPEnum_DuctConnectionType\t1\nPARAM\t59a6fab8-3bff-4843-b61b-c3895e0ccb1f\tPset_DistributionPortDuct.PortNumber\tINTEGER\t\t143\t1\tIfcInteger\t1\n#\nGROUP\t144\tPset_DistributionPortPHistoryCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taf897460-248b-4276-85e2-8b50acfc7106\tPset_DistributionPortPHistoryCable.ApparentPower\tMULTILINETEXT\t\t144\t1\tIfcTimeSeries\t1\nPARAM\t9fadeb75-92de-4a22-8764-c24ee4f76b0b\tPset_DistributionPortPHistoryCable.Current\tMULTILINETEXT\t\t144\t1\tIfcTimeSeries\t1\nPARAM\te72bcd7d-84ae-42c6-b1e3-f696451d1e6e\tPset_DistributionPortPHistoryCable.DataReceived\tMULTILINETEXT\t\t144\t1\tIfcTimeSeries\t1\nPARAM\tc1d8b4f5-0772-44d9-8bb7-d96e3b9a3282\tPset_DistributionPortPHistoryCable.DataTransmitted\tMULTILINETEXT\t\t144\t1\tIfcTimeSeries\t1\nPARAM\t53e43bce-bef5-4a40-96fd-8862a450903d\tPset_DistributionPortPHistoryCable.PowerFactor\tMULTILINETEXT\t\t144\t1\tIfcTimeSeries\t1\nPARAM\t401dc737-0097-4869-9b07-3ef617ef615c\tPset_DistributionPortPHistoryCable.ReactivePower\tMULTILINETEXT\t\t144\t1\tIfcTimeSeries\t1\nPARAM\tfbaec689-91c1-4f8f-b0c9-63eb65250f26\tPset_DistributionPortPHistoryCable.RealPower\tMULTILINETEXT\t\t144\t1\tIfcTimeSeries\t1\nPARAM\t6fa8730d-4354-42e4-9752-7bd9defeb047\tPset_DistributionPortPHistoryCable.Voltage\tMULTILINETEXT\t\t144\t1\tIfcTimeSeries\t1\n#\nGROUP\t145\tPset_DistributionPortPHistoryDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t39ebdb53-ec0a-4cfb-9c16-d3b93e4b79d3\tPset_DistributionPortPHistoryDuct.FlowCondition\tMULTILINETEXT\t\t145\t1\tIfcTimeSeries\t1\nPARAM\tbe32824c-472c-44e8-ab71-cf06b1d088c9\tPset_DistributionPortPHistoryDuct.MassFlowRate\tMULTILINETEXT\t\t145\t1\tIfcTimeSeries\t1\nPARAM\t81486002-27f7-4025-863b-0dda2b5a372e\tPset_DistributionPortPHistoryDuct.Pressure\tMULTILINETEXT\t\t145\t1\tIfcTimeSeries\t1\nPARAM\tcbe85542-7fd1-4da0-a29d-d807677eb4a9\tPset_DistributionPortPHistoryDuct.Temperature\tMULTILINETEXT\t\t145\t1\tIfcTimeSeries\t1\nPARAM\t80b98e43-359d-4dc2-bc6f-1e3c586498e1\tPset_DistributionPortPHistoryDuct.Velocity\tMULTILINETEXT\t\t145\t1\tIfcTimeSeries\t1\nPARAM\t7e8e87f0-5498-43c0-a39e-88ac3f175c6e\tPset_DistributionPortPHistoryDuct.VolumetricFlowRate\tMULTILINETEXT\t\t145\t1\tIfcTimeSeries\t1\nPARAM\tc04ff2c7-bd41-48da-8d8e-037447267a2f\tPset_DistributionPortPHistoryDuct.WetBulbTemperature\tMULTILINETEXT\t\t145\t1\tIfcTimeSeries\t1\n#\nGROUP\t146\tPset_DistributionPortPHistoryPipe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a3f6bee-5810-4037-a997-d1c2cbd68a4d\tPset_DistributionPortPHistoryPipe.Flowrate\tMULTILINETEXT\t\t146\t1\tIfcTimeSeries\t1\nPARAM\td31964c0-ab4f-444a-a3a5-26a72084e705\tPset_DistributionPortPHistoryPipe.Pressure\tMULTILINETEXT\t\t146\t1\tIfcTimeSeries\t1\nPARAM\t36d77e79-1936-4513-b229-f61c7632a638\tPset_DistributionPortPHistoryPipe.Temperature\tMULTILINETEXT\t\t146\t1\tIfcTimeSeries\t1\n#\nGROUP\t147\tPset_DistributionPortPipe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7febf3be-117f-4498-9d45-def67f269eab\tPset_DistributionPortPipe.ConnectionType\tTEXT\t\t147\t1\tPEnum_PipeEndStyleTreatment\t1\nPARAM\tee6c702f-d7ef-45c1-8e8f-dc1c021a0afb\tPset_DistributionPortPipe.EndStyleTreatment\tTEXT\t\t147\t1\tPEnum_PipeEndStyleTreatment\t1\nPARAM\tb6e66f62-9d2d-45d2-bc3d-5bad39baf748\tPset_DistributionPortPipe.PortNumber\tINTEGER\t\t147\t1\tIfcInteger\t1\n#\nGROUP\t148\tPset_DistributionPortTypeCable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t03d98150-4bcf-4f74-8b31-dee8065d5959\tPset_DistributionPortTypeCable.ConductorFunction\tTEXT\t\t148\t1\tPEnum_ConductorFunction\t1\nPARAM\t5a9b13be-92d1-4585-8363-4e056c138f30\tPset_DistributionPortTypeCable.ConnectionGender\tTEXT\t\t148\t1\tPEnum_ConnectionGender\t1\nPARAM\t4a16661b-e738-43fb-99eb-498a99015880\tPset_DistributionPortTypeCable.ConnectionSubtype\tTEXT\t\t148\t1\tIfcLabel\t1\nPARAM\t1b51a543-3f93-4fa7-a503-1c877bb4b429\tPset_DistributionPortTypeCable.ConnectionType\tTEXT\t\t148\t1\tPEnum_DistributionPortElectricalType\t1\nPARAM\t52070921-9727-4e99-917b-fdcae2efea80\tPset_DistributionPortTypeCable.Current\tMULTILINETEXT\t\t148\t1\tPropertyBoundedValue\t1\nPARAM\teaf80f92-e6df-4c29-a180-86e89bea20e9\tPset_DistributionPortTypeCable.CurrentContent3rdHarmonic\tNUMBER\t\t148\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t437e2945-ded0-4099-8d45-ae3d9d9770db\tPset_DistributionPortTypeCable.Power\tMULTILINETEXT\t\t148\t1\tPropertyBoundedValue\t1\nPARAM\t1592daba-2e14-4952-a719-49248bab50cc\tPset_DistributionPortTypeCable.Protocols\tMULTILINETEXT\t\t148\t1\tPropertyListValue\t1\nPARAM\t87b7f6b2-94b5-447a-b7ed-aa0e2b690e7d\tPset_DistributionPortTypeCable.Voltage\tMULTILINETEXT\t\t148\t1\tPropertyBoundedValue\t1\n#\nGROUP\t149\tPset_DistributionPortTypeDuct\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t15d916dd-1d73-40bc-8148-1576f81d2a08\tPset_DistributionPortTypeDuct.ConnectionSubType\tTEXT\t\t149\t1\tIfcLabel\t1\nPARAM\td2b239a6-1db1-4c2a-b423-e3d735a6de1f\tPset_DistributionPortTypeDuct.ConnectionType\tTEXT\t\t149\t1\tPEnum_DuctConnectionType\t1\nPARAM\t0e28d2ef-e503-4631-9664-f17e52ebd118\tPset_DistributionPortTypeDuct.DryBulbTemperature\tMULTILINETEXT\t\t149\t1\tPropertyBoundedValue\t1\nPARAM\t90a90418-907a-4180-9a52-7bb1ef069005\tPset_DistributionPortTypeDuct.NominalHeight\tLENGTH\t\t149\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9aa93573-8189-43ee-9e7a-d7e898fddfae\tPset_DistributionPortTypeDuct.NominalThickness\tLENGTH\t\t149\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta28e9f22-6e20-4a90-9976-810e633a45f4\tPset_DistributionPortTypeDuct.NominalWidth\tLENGTH\t\t149\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7583cd7c-5ea7-4d10-9e2b-6ad6d0dafa4b\tPset_DistributionPortTypeDuct.Pressure\tMULTILINETEXT\t\t149\t1\tPropertyBoundedValue\t1\nPARAM\t26538518-abf6-475b-a156-2ce731d7975e\tPset_DistributionPortTypeDuct.Velocity\tMULTILINETEXT\t\t149\t1\tPropertyBoundedValue\t1\nPARAM\t639c0067-eb44-4ed8-b9d1-77247c1f1cc2\tPset_DistributionPortTypeDuct.VolumetricFlowRate\tMULTILINETEXT\t\t149\t1\tPropertyBoundedValue\t1\nPARAM\t46e6cb4f-3ecb-4016-b3d9-52ec26836ce6\tPset_DistributionPortTypeDuct.WetBulbTemperature\tMULTILINETEXT\t\t149\t1\tPropertyBoundedValue\t1\n#\nGROUP\t150\tPset_DistributionPortTypePipe\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdf1d3977-4bb4-4a8d-96c8-33058af039e0\tPset_DistributionPortTypePipe.ConnectionSubType\tTEXT\t\t150\t1\tIfcLabel\t1\nPARAM\tf842a89d-8ec5-470c-b8ba-7fec7338c6e3\tPset_DistributionPortTypePipe.ConnectionType\tTEXT\t\t150\t1\tPEnum_PipeEndStyleTreatment\t1\nPARAM\ta09f2865-11e9-4d0f-9391-93c2e0155921\tPset_DistributionPortTypePipe.FlowCondition\tMULTILINETEXT\t\t150\t1\tPropertyBoundedValue\t1\nPARAM\tfcd3dc22-fdfd-4ea0-84f2-00be83155aa3\tPset_DistributionPortTypePipe.InnerDiameter\tLENGTH\t\t150\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta3db7690-009f-42a9-88a9-f5683b29eb8f\tPset_DistributionPortTypePipe.MassFlowRate\tMULTILINETEXT\t\t150\t1\tPropertyBoundedValue\t1\nPARAM\tac9d7980-31fc-44e1-828a-2cc76ae5d86c\tPset_DistributionPortTypePipe.NominalDiameter\tLENGTH\t\t150\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4d18569d-f126-4f3b-aceb-2da495f1dfda\tPset_DistributionPortTypePipe.OuterDiameter\tLENGTH\t\t150\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcc4abc86-f21d-4ee3-a86d-3815019c5ab3\tPset_DistributionPortTypePipe.Pressure\tMULTILINETEXT\t\t150\t1\tPropertyBoundedValue\t1\nPARAM\tb6cb7483-a65d-4bd5-ac65-51b080116323\tPset_DistributionPortTypePipe.Temperature\tMULTILINETEXT\t\t150\t1\tPropertyBoundedValue\t1\nPARAM\t7faf6c2f-fbd6-4304-b388-59166e006c4a\tPset_DistributionPortTypePipe.Velocity\tMULTILINETEXT\t\t150\t1\tPropertyBoundedValue\t1\nPARAM\tb4252ef2-5858-465d-840e-3539db7eed5e\tPset_DistributionPortTypePipe.VolumetricFlowRate\tMULTILINETEXT\t\t150\t1\tPropertyBoundedValue\t1\n#\nGROUP\t151\tPset_DistributionSystemCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t742ce300-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemCommon.Reference\tTEXT\t\t151\t1\tIfcIdentifier\t1\n#\nGROUP\t152\tPset_DistributionSystemTypeElectrical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9f173700-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeElectrical.Diversity\tNUMBER\t\t152\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t90c91b00-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeElectrical.ElectricalSystemCategory\tTEXT\t\t152\t1\tPEnum_DistributionSystemElectricalCategory\t1\nPARAM\t8018a500-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeElectrical.ElectricalSystemType\tTEXT\t\t152\t1\tPEnum_DistributionSystemElectricalType\t1\nPARAM\ta9393580-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeElectrical.MaximumAllowedVoltageDrop\tNUMBER\t\t152\t1\tIfcElectricVoltageMeasure\t1\nPARAM\tadfde980-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeElectrical.NetImpedance\tNUMBER\t\t152\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t048b4300-4767-4386-b8ba-5b688c837bda\tPset_DistributionSystemTypeElectrical.NumberOfLiveConductors\tINTEGER\t\t152\t1\tIfcInteger\t1\n#\nGROUP\t153\tPset_DistributionSystemTypeVentilation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teef5fe00-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.AspectRatio\tNUMBER\t\t153\t1\tIfcReal\t1\nPARAM\tb9511500-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.DesignName\tTEXT\t\t153\t1\tIfcLabel\t1\nPARAM\te271a580-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.DuctSealant\tMULTILINETEXT\t\t153\t1\tIfcMaterialDefinition\t1\nPARAM\tbfdf8c80-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.DuctSizingMethod\tTEXT\t\t153\t1\tPEnum_DuctSizingMethod\t1\nPARAM\td84fa700-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.FrictionLoss\tNUMBER\t\t153\t1\tIfcReal\t1\nPARAM\td38af300-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.LeakageClass\tNUMBER\t\t153\t1\tIfcPressureMeasure\t1\nPARAM\te69dc300-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.MaximumVelocity\tNUMBER\t\t153\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tf87f6600-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.MinimumHeight\tLENGTH\t\t153\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t02a16480-d1db-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.MinimumWidth\tLENGTH\t\t153\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tce2da880-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.PressureClass\tNUMBER\t\t153\t1\tIfcPressureMeasure\t1\nPARAM\tddacf180-d1da-11e1-8000-00215ad4efdf\tPset_DistributionSystemTypeVentilation.ScrapFactor\tNUMBER\t\t153\t1\tIfcReal\t1\n#\nGROUP\t154\tPset_DoorCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t95420380-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.AcousticRating\tTEXT\t\t154\t1\tIfcLabel\t1\nPARAM\tcde1dd00-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.DurabilityRating\tTEXT\t\t154\t1\tIfcLabel\t1\nPARAM\t8f98ed80-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.FireExit\tYESNO\t\t154\t1\tIfcBoolean\t1\nPARAM\t7ba0bc00-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.FireRating\tTEXT\t\t154\t1\tIfcLabel\t1\nPARAM\t5d878b80-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.GlazingAreaFraction\tNUMBER\t\t154\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t76903c80-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.HandicapAccessible\tYESNO\t\t154\t1\tIfcBoolean\t1\nPARAM\taa6b6200-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.HasDrive\tYESNO\t\t154\t1\tIfcBoolean\t1\nPARAM\tec47d880-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.HygrothermalRating\tTEXT\t\t154\t1\tIfcLabel\t1\nPARAM\t23b68500-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.Infiltration\tNUMBER\t\t154\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t0aadd400-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.IsExternal\tYESNO\t\t154\t1\tIfcBoolean\t1\nPARAM\tda9b78df-a88b-4538-887d-4c597a1059dd\tPset_DoorCommon.MechanicalLoadRating\tTEXT\t\t154\t1\tIfcLabel\t1\nPARAM\t2795d780-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.Reference\tTEXT\t\t154\t1\tIfcIdentifier\t1\nPARAM\tb4409580-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.SecurityRating\tTEXT\t\t154\t1\tIfcLabel\t1\nPARAM\tbeaf5f00-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.SelfClosing\tYESNO\t\t154\t1\tIfcBoolean\t1\nPARAM\tcec73e80-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.SmokeStop\tYESNO\t\t154\t1\tIfcBoolean\t1\nPARAM\t32e90300-d1db-11e1-8000-00215ad4efdf\tPset_DoorCommon.Status\tTEXT\t\t154\t1\tPEnum_ElementStatus\t1\nPARAM\t42b51700-d1dc-11e1-8000-00215ad4efdf\tPset_DoorCommon.ThermalTransmittance\tNUMBER\t\t154\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t5030f042-24d9-4c74-aba7-53294170b227\tPset_DoorCommon.WaterTightnessRating\tTEXT\t\t154\t1\tIfcLabel\t1\nPARAM\t9be0892f-f932-4135-bdaf-cd98782a64ff\tPset_DoorCommon.WindLoadRating\tTEXT\t\t154\t1\tIfcLabel\t1\n#\nGROUP\t155\tPset_DoorWindowGlazingType\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7d5c98fb-e2a4-496b-88cc-3fdd33d52aa9\tPset_DoorWindowGlazingType.BeamRadiationTransmittance\tNUMBER\t\t155\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t3da49780-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.FillGas\tTEXT\t\t155\t1\tIfcLabel\t1\nPARAM\t48f7c300-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.GlassColor\tTEXT\t\t155\t1\tIfcLabel\t1\nPARAM\t0df58f80-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.GlassLayers\tINTEGER\t\t155\t1\tIfcCountMeasure\t1\nPARAM\t1a79e800-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.GlassThickness1\tLENGTH\t\t155\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2796d700-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.GlassThickness2\tLENGTH\t\t155\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32516c00-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.GlassThickness3\tLENGTH\t\t155\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t69278200-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.IsCoated\tYESNO\t\t155\t1\tIfcBoolean\t1\nPARAM\t5dd45680-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.IsLaminated\tYESNO\t\t155\t1\tIfcBoolean\t1\nPARAM\t51e89480-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.IsTempered\tYESNO\t\t155\t1\tIfcBoolean\t1\nPARAM\t72185380-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.IsWired\tYESNO\t\t155\t1\tIfcBoolean\t1\nPARAM\tbcb84ce7-865c-42af-bcc3-77831a5791b1\tPset_DoorWindowGlazingType.Reflectivity\tNUMBER\t\t155\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t95db9980-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.ShadingCoefficient\tNUMBER\t\t155\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t84928d00-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.SolarAbsorption\tNUMBER\t\t155\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t91af7c00-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.SolarHeatGainTransmittance\tNUMBER\t\t155\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t88beaa80-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.SolarReflectance\tNUMBER\t\t155\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t8ceac800-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.SolarTransmittance\tNUMBER\t\t155\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t9a07b700-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.ThermalTransmittanceSummer\tNUMBER\t\t155\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t9e33d480-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.ThermalTransmittanceWinter\tNUMBER\t\t155\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t24b39c7d-ba26-4c7d-befc-dd19519f896e\tPset_DoorWindowGlazingType.Translucency\tNUMBER\t\t155\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t7a708e80-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.VisibleLightReflectance\tNUMBER\t\t155\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t80666f80-d1dd-11e1-8000-00215ad4efdf\tPset_DoorWindowGlazingType.VisibleLightTransmittance\tNUMBER\t\t155\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t156\tPset_DoorWindowShadingType\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7df9c781-04a9-4420-905f-48de5c924975\tPset_DoorWindowShadingType.ExternalShadingCoefficient\tNUMBER\t\t156\t1\tIfcPositiveRatioMeasure \t1\nPARAM\t99bf1924-f82e-4ca3-926d-0102fc3b01c1\tPset_DoorWindowShadingType.InsetShadingCoefficient\tNUMBER\t\t156\t1\tIfcPositiveRatioMeasure \t1\nPARAM\tb2083640-14eb-4acd-8461-7d991fda0961\tPset_DoorWindowShadingType.InternalShadingCoefficient\tNUMBER\t\t156\t1\tIfcPositiveRatioMeasure \t1\n#\nGROUP\t157\tPset_DrainageCatchment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb5ed3e01-eb14-47f6-bd02-27343dc3ea3e\tPset_DrainageCatchment.AreaDrained\tAREA\t\t157\t1\tIfcAreaMeasure\t1\n#\nGROUP\t158\tPset_DrainageCulvert\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta0beb179-7162-4a16-9c96-aeec8707c522\tPset_DrainageCulvert.ClearDepth\tLENGTH\t\t158\t1\tIfcLengthMeasure\t1\nPARAM\t26f5e6ed-2a20-4a06-8e10-416302290168\tPset_DrainageCulvert.InternalWidth\tLENGTH\t\t158\t1\tIfcLengthMeasure\t1\n#\nGROUP\t159\tPset_DrainageOutfall\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1b43defd-c801-4719-98f1-be72bb91688e\tPset_DrainageOutfall.InvertLevel\tLENGTH\t\t159\t1\tIfcLengthMeasure\t1\n#\nGROUP\t160\tPset_DrainageReserve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6d0ef567-c3b4-4e27-ae35-9c69dfea422e\tPset_DrainageReserve.Width\tLENGTH\t\t160\t1\tIfcLengthMeasure\t1\n#\nGROUP\t161\tPset_Draughting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te35c8d33-761f-4fbb-b549-89253c7e6401\tPset_Draughting.Colour.Blue\tINTEGER\t\t161\t1\tIfcInteger\t1\nPARAM\t6e5ac9b1-4c2b-4cf1-9c59-2f1592faa0c1\tPset_Draughting.Colour.Green\tINTEGER\t\t161\t1\tIfcInteger\t1\nPARAM\tc482289f-7205-45c4-a1a4-3fcd065addd5\tPset_Draughting.Colour.Red\tINTEGER\t\t161\t1\tIfcInteger\t1\nPARAM\t6157732a-43f1-43b8-a963-f513179a838b\tPset_Draughting.LayerName\tTEXT\t\t161\t1\tIfcIdentifier\t1\n#\nGROUP\t162\tPset_DuctConnection\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tda6976ee-f963-4dc4-8884-90ee43cca3fe\tPset_DuctConnection.ConnectionType\tMULTILINETEXT\t\t162\t1\tPropertyListValue\t1\n#\nGROUP\t163\tPset_DuctDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta6b311d5-e001-44b5-a56a-cc30c5203977\tPset_DuctDesignCriteria.AspectRatio\tNUMBER\t\t163\t1\tIfcReal \t1\nPARAM\t6a74ce7e-7df0-4e07-a5fa-750487de64dd\tPset_DuctDesignCriteria.DesignName\tTEXT\t\t163\t1\tIfcText\t1\nPARAM\td469a3f6-19ca-4786-974e-7b419e54232e\tPset_DuctDesignCriteria.DuctSealant\tMULTILINETEXT\t\t163\t1\tIfcMaterial\t1\nPARAM\t3376dbe0-8efa-40e1-96c9-1fb7e297957f\tPset_DuctDesignCriteria.DuctSizingMethod\tTEXT\t\t163\t1\tPEnum_DuctSizingMethod\t1\nPARAM\tf78d6b41-d1af-4bfd-9418-8f5f49d848d0\tPset_DuctDesignCriteria.FrictionLoss\tNUMBER\t\t163\t1\tIfcReal\t1\nPARAM\t36658cf7-5bd5-4b12-ba46-94656d230b69\tPset_DuctDesignCriteria.LeakageClass\tNUMBER\t\t163\t1\tIfcPressureMeasure\t1\nPARAM\te830b105-7242-4fb7-a651-d457745a15cc\tPset_DuctDesignCriteria.MaximumVelocity\tNUMBER\t\t163\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t1fe98945-31da-489f-80bf-cd74956231a2\tPset_DuctDesignCriteria.MinimumHeight\tNUMBER\t\t163\t1\tIfcPositiveLengthMeasure \t1\nPARAM\t4310d897-800e-45a7-83c7-2ade42eec6f7\tPset_DuctDesignCriteria.MinimumWidth\tNUMBER\t\t163\t1\tIfcPositiveLengthMeasure \t1\nPARAM\t6ade8563-b726-4031-aff0-ae07ddf44806\tPset_DuctDesignCriteria.PressureClass\tNUMBER\t\t163\t1\tIfcPressureMeasure\t1\nPARAM\t903a73c7-0459-4367-bd1a-4c87a575cfc6\tPset_DuctDesignCriteria.ScrapFactor\tNUMBER\t\t163\t1\tIfcReal \t1\n#\nGROUP\t164\tPset_DuctFittingOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teb17ab00-d1dd-11e1-8000-00215ad4efdf\tPset_DuctFittingOccurrence.Color\tTEXT\t\t164\t1\tIfcLabel\t1\nPARAM\te652f700-d1dd-11e1-8000-00215ad4efdf\tPset_DuctFittingOccurrence.HasLiner\tYESNO\t\t164\t1\tIfcBoolean\t1\nPARAM\te0f5ac80-d1dd-11e1-8000-00215ad4efdf\tPset_DuctFittingOccurrence.InteriorRoughnessCoefficient\tLENGTH\t\t164\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t165\tPset_DuctFittingPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfb2f8a80-d1dd-11e1-8000-00215ad4efdf\tPset_DuctFittingPHistory.AirFlowLeakage\tMULTILINETEXT\t\t165\t1\tIfcTimeSeries\t1\nPARAM\tf8cd3080-d1dd-11e1-8000-00215ad4efdf\tPset_DuctFittingPHistory.AtmosphericPressure\tMULTILINETEXT\t\t165\t1\tIfcTimeSeries\t1\nPARAM\tf66ad680-d1dd-11e1-8000-00215ad4efdf\tPset_DuctFittingPHistory.LossCoefficient\tMULTILINETEXT\t\t165\t1\tIfcTimeSeries\t1\n#\nGROUP\t166\tPset_DuctFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taab5ee8d-0309-480c-9d89-d497405f5840\tPset_DuctFittingTypeCommon.EndStyleTreatment\tMULTILINETEXT\t\t166\t1\tPropertyListValue\t1\nPARAM\td00cbbe0-9617-42ee-b89d-4d2809b2993f\tPset_DuctFittingTypeCommon.Material\tMULTILINETEXT\t\t166\t1\tIfcMaterial\t1\nPARAM\t9b60079b-ed6f-449b-943d-294bf0afa00e\tPset_DuctFittingTypeCommon.MaterialThickness\tLENGTH\t\t166\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tef41400f-cf6b-41bb-a951-d978c317d8f2\tPset_DuctFittingTypeCommon.NominalDiameterOrWidth\tMULTILINETEXT\t\t166\t1\tPropertyListValue\t1\nPARAM\tde2c8cc7-5128-4b55-bc42-22fa4315ebf5\tPset_DuctFittingTypeCommon.NominalHeight\tMULTILINETEXT\t\t166\t1\tPropertyListValue\t1\nPARAM\t1601ff00-d1de-11e1-8000-00215ad4efdf\tPset_DuctFittingTypeCommon.PressureClass\tNUMBER\t\t166\t1\tIfcPressureMeasure\t1\nPARAM\t1ac6b300-d1de-11e1-8000-00215ad4efdf\tPset_DuctFittingTypeCommon.PressureRange\tMULTILINETEXT\t\t166\t1\tPropertyBoundedValue\t1\nPARAM\t04205c00-d1de-11e1-8000-00215ad4efdf\tPset_DuctFittingTypeCommon.Reference\tTEXT\t\t166\t1\tIfcIdentifier\t1\nPARAM\t097da680-d1de-11e1-8000-00215ad4efdf\tPset_DuctFittingTypeCommon.Status\tTEXT\t\t166\t1\tPEnum_ElementStatus\t1\nPARAM\t4317f7ad-3663-4328-952c-5cead7073a23\tPset_DuctFittingTypeCommon.SubType\tTEXT\t\t166\t1\tIfcText\t1\nPARAM\t21edc100-d1de-11e1-8000-00215ad4efdf\tPset_DuctFittingTypeCommon.TemperatureRange\tMULTILINETEXT\t\t166\t1\tPropertyBoundedValue\t1\nPARAM\teb751a70-b8a3-42fe-a9e0-cf195ec385b9\tPset_DuctFittingTypeCommon.UnitWeight\tNUMBER\t\t166\t1\tIfcMassPerLengthMeasure\t1\n#\nGROUP\t167\tPset_DuctSegmentOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a5ddb80-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentOccurrence.Color\tTEXT\t\t167\t1\tIfcLabel\t1\nPARAM\t3467fa80-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentOccurrence.HasLiner\tYESNO\t\t167\t1\tIfcBoolean\t1\nPARAM\t2e721980-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentOccurrence.InteriorRoughnessCoefficient\tLENGTH\t\t167\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t168\tPset_DuctSegmentPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4f3a6f00-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentPHistory.AtmosphericPressure\tMULTILINETEXT\t\t168\t1\tIfcTimeSeries\t1\nPARAM\t5a8d9a80-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentPHistory.FluidFlowLeakage\tMULTILINETEXT\t\t168\t1\tIfcTimeSeries\t1\nPARAM\t52cdf600-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentPHistory.LeakageCurve\tMULTILINETEXT\t\t168\t1\tIfcTimeSeries\t1\nPARAM\t4ba6e800-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentPHistory.LossCoefficient\tMULTILINETEXT\t\t168\t1\tIfcTimeSeries\t1\n#\nGROUP\t169\tPset_DuctSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t362f164f-adba-4512-a91c-3734bfa56faf\tPset_DuctSegmentTypeCommon.EndStyleTreatment\tMULTILINETEXT\t\t169\t1\tPropertyListValue\t1\nPARAM\te72347d0-cbba-4d89-b154-0088666d98a1\tPset_DuctSegmentTypeCommon.Length\tLENGTH\t\t169\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta3455380-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.LongitudinalSeam\tTEXT\t\t169\t1\tIfcText\t1\nPARAM\t2195a50d-36b3-49f9-8923-23482f795074\tPset_DuctSegmentTypeCommon.Material\tMULTILINETEXT\t\t169\t1\tIfcMaterial\t1\nPARAM\tb7bb96e0-91eb-4ad3-a508-7db83fd5a7a4\tPset_DuctSegmentTypeCommon.MaterialThickness\tLENGTH\t\t169\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta8a29e00-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.NominalDiameterOrWidth\tLENGTH\t\t169\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb0624280-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.NominalHeight\tLENGTH\t\t169\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9163b080-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.PressureRange\tMULTILINETEXT\t\t169\t1\tPropertyBoundedValue\t1\nPARAM\t66795c80-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.Reference\tTEXT\t\t169\t1\tIfcIdentifier\t1\nPARAM\tb6f0ba00-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.Reinforcement\tTEXT\t\t169\t1\tIfcLabel\t1\nPARAM\tbce69b00-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.ReinforcementSpacing\tLENGTH\t\t169\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7d1fb380-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.Shape\tTEXT\t\t169\t1\tPEnum_DuctSegmentShape\t1\nPARAM\t6bd6a700-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.Status\tTEXT\t\t169\t1\tPEnum_ElementStatus\t1\nPARAM\t9c1e4580-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.TemperatureRange\tMULTILINETEXT\t\t169\t1\tPropertyBoundedValue\t1\nPARAM\t448b619f-9afa-41b2-bc94-33579880c36c\tPset_DuctSegmentTypeCommon.UnitWeight\tNUMBER\t\t169\t1\tIfcMassMeasure\t1\nPARAM\t8c066600-d1de-11e1-8000-00215ad4efdf\tPset_DuctSegmentTypeCommon.WorkingPressure\tNUMBER\t\t169\t1\tIfcPressureMeasure\t1\n#\nGROUP\t170\tPset_DuctSilencerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tca038a00-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerPHistory.AirFlowRate\tMULTILINETEXT\t\t170\t1\tIfcTimeSeries\t1\nPARAM\tce2fa780-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerPHistory.AirPressureDropCurve\tMULTILINETEXT\t\t170\t1\tIfcTimeSeries\t1\n#\nGROUP\t171\tPset_DuctSilencerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfe774600-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.AirFlowrateRange\tMULTILINETEXT\t\t171\t1\tPropertyBoundedValue\t1\nPARAM\t177ff700-d1df-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.HasExteriorInsulation\tYESNO\t\t171\t1\tIfcBoolean\t1\nPARAM\tef909380-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.HydraulicDiameter\tLENGTH\t\t171\t1\tIfcLengthMeasure\t1\nPARAM\tf4554780-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.Length\tLENGTH\t\t171\t1\tIfcLengthMeasure\t1\nPARAM\td7b90f80-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.Reference\tTEXT\t\t171\t1\tIfcIdentifier\t1\nPARAM\t0175cb71-1925-49c4-9c6b-5e9d2527ed17\tPset_DuctSilencerTypeCommon.Shape\tTEXT\t\t171\t1\tPEnum_DuctSilencerShape\t1\nPARAM\tdd165a00-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.Status\tTEXT\t\t171\t1\tPEnum_ElementStatus\t1\nPARAM\t0f27bc00-d1df-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.TemperatureRange\tMULTILINETEXT\t\t171\t1\tPropertyBoundedValue\t1\nPARAM\tf919fb80-d1de-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.Weight\tNUMBER\t\t171\t1\tIfcMassMeasure\t1\nPARAM\t0636ea80-d1df-11e1-8000-00215ad4efdf\tPset_DuctSilencerTypeCommon.WorkingPressureRange\tMULTILINETEXT\t\t171\t1\tPropertyBoundedValue\t1\n#\nGROUP\t172\tPset_ElectricalCircuit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td87281f0-d3ea-4f8c-a2b9-358f807815d9\tPset_ElectricalCircuit.Diversity\tNUMBER\t\t172\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t534b880f-14d9-4f1e-8385-36244a01f61a\tPset_ElectricalCircuit.MaximumAllowedVoltageDrop\tNUMBER\t\t172\t1\tIfcElectricVoltageMeasure\t1\nPARAM\tfe4ef925-dc24-4b21-ab1f-58800c876322\tPset_ElectricalCircuit.NetImpedance\tNUMBER\t\t172\t1\tIfcElectricResistanceMeasure\t1\nPARAM\t40be9780-73d2-44be-8895-81c96be3878a\tPset_ElectricalCircuit.NumberOfPhases\tINTEGER\t\t172\t1\tIfcInteger\t1\n#\nGROUP\t173\tPset_ElectricalDeviceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf936102b-d482-4b7e-b989-a5571e353770\tPset_ElectricalDeviceCommon.ConductorFunction\tTEXT\t\t173\t1\tPEnum_ConductorFunctionEnum\t1\nPARAM\tf81de313-75c9-4cbd-ae82-398bcba997d5\tPset_ElectricalDeviceCommon.ElectricalDeviceNominalPower\tNUMBER\t\t173\t1\tIfcPowerMeasure\t1\nPARAM\t50b86700-d1df-11e1-8000-00215ad4efdf\tPset_ElectricalDeviceCommon.HasProtectiveEarth\tYESNO\t\t173\t1\tIfcBoolean\t1\nPARAM\taecd027e-d542-4357-a5fd-13331a99bc51\tPset_ElectricalDeviceCommon.IK_Code\tTEXT\t\t173\t1\tIfcLabel\t1\nPARAM\t5d3cbf80-d1df-11e1-8000-00215ad4efdf\tPset_ElectricalDeviceCommon.InsulationStandardClass\tTEXT\t\t173\t1\tPEnum_InsulationStandardClass\t1\nPARAM\t56ae4800-d1df-11e1-8000-00215ad4efdf\tPset_ElectricalDeviceCommon.IP_Code\tTEXT\t\t173\t1\tIfcLabel\t1\nPARAM\t37c5267e-5b65-40bb-8c77-df21a6859cf0\tPset_ElectricalDeviceCommon.NominalCurrent\tNUMBER\t\t173\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tf69a7954-55c7-4842-825a-54711d3b5abc\tPset_ElectricalDeviceCommon.NominalFrequencyRange\tMULTILINETEXT\t\t173\t1\tPropertyBoundedValue\t1\nPARAM\t5d81b5f3-18ec-4cde-8907-ba0ce0aadc4c\tPset_ElectricalDeviceCommon.NominalVoltage\tMULTILINETEXT\t\t173\t1\tPropertyBoundedValue\t1\nPARAM\t4b5b1c80-d1df-11e1-8000-00215ad4efdf\tPset_ElectricalDeviceCommon.NumberOfPoles\tINTEGER\t\t173\t1\tIfcInteger\t1\nPARAM\t7feeb4ee-b7a5-45f8-b839-3663ee4c6a72\tPset_ElectricalDeviceCommon.PhaseAngle\tANGLE\t\t173\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\te3ee9c35-ebb1-4487-bfb4-f6b6121e9da9\tPset_ElectricalDeviceCommon.PhaseReference\tTEXT\t\t173\t1\tIfcIdentifier\t1\nPARAM\tcf523435-8315-441f-a6c1-7c9b65bf62a0\tPset_ElectricalDeviceCommon.PowerFactor\tNUMBER\t\t173\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t784d9d21-44d4-40b5-b30e-2ad107609548\tPset_ElectricalDeviceCommon.RatedCurrent\tMULTILINETEXT\t\t173\t1\tPropertyBoundedValue\t1\nPARAM\ta2e15fb5-e52e-49e3-b867-31401fe07f86\tPset_ElectricalDeviceCommon.RatedVoltage\tMULTILINETEXT\t\t173\t1\tPropertyBoundedValue\t1\nPARAM\td7364fea-0860-4587-b56b-171e665ed6a3\tPset_ElectricalDeviceCommon.UsageCurrent\tNUMBER\t\t173\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t174\tPset_ElectricAppliancePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7180bc80-d1df-11e1-8000-00215ad4efdf\tPset_ElectricAppliancePHistory.PowerState\tMULTILINETEXT\t\t174\t1\tIfcTimeSeries\t1\n#\nGROUP\t175\tPset_ElectricApplianceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7ba2bb00-d1df-11e1-8000-00215ad4efdf\tPset_ElectricApplianceTypeCommon.Reference\tTEXT\t\t175\t1\tIfcIdentifier\t1\nPARAM\t83faf600-d1df-11e1-8000-00215ad4efdf\tPset_ElectricApplianceTypeCommon.Status\tTEXT\t\t175\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t176\tPset_ElectricApplianceTypeDishwasher\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb0af0d80-d1df-11e1-8000-00215ad4efdf\tPset_ElectricApplianceTypeDishwasher.DishwasherType\tTEXT\t\t176\t1\tPEnum_ElectricApplianceDishwasherType\t1\n#\nGROUP\t177\tPset_ElectricApplianceTypeElectricCooker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcb818200-d1df-11e1-8000-00215ad4efdf\tPset_ElectricApplianceTypeElectricCooker.ElectricCookerType\tTEXT\t\t177\t1\tPEnum_ElectricApplianceElectricCookerType\t1\n#\nGROUP\t178\tPset_ElectricDistributionBoardOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc8b9fc58-cd02-4eed-a320-8ff916082beb\tPset_ElectricDistributionBoardOccurrence.IsMain\tYESNO\t\t178\t1\tIfcBoolean\t1\nPARAM\t421bd751-0cf9-47d8-9829-53510c16a01a\tPset_ElectricDistributionBoardOccurrence.IsSkilledOperator\tYESNO\t\t178\t1\tIfcBoolean\t1\n#\nGROUP\t179\tPset_ElectricDistributionBoardTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te653f680-d1df-11e1-8000-00215ad4efdf\tPset_ElectricDistributionBoardTypeCommon.Reference\tTEXT\t\t179\t1\tIfcIdentifier\t1\nPARAM\tece26e00-d1df-11e1-8000-00215ad4efdf\tPset_ElectricDistributionBoardTypeCommon.Status\tTEXT\t\t179\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t180\tPset_ElectricDistributionPointCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3fe1c495-213f-4af0-aba5-cdab98e11f5e\tPset_ElectricDistributionPointCommon.CaseMaterial\tMULTILINETEXT\t\t180\t1\tIfcMaterial\t1\nPARAM\t811e3796-c713-46f9-9339-0b835de4d27d\tPset_ElectricDistributionPointCommon.CaseWeight\tNUMBER\t\t180\t1\tIfcMassMeasure\t1\nPARAM\t233dd3e8-d001-47fa-8d2b-904e7a274cc4\tPset_ElectricDistributionPointCommon.IsMain\tYESNO\t\t180\t1\tIfcBoolean\t1\nPARAM\t33694f54-7384-4a57-b2b3-b916e944d863\tPset_ElectricDistributionPointCommon.NumberOfDoors\tINTEGER\t\t180\t1\tIfcInteger\t1\nPARAM\t607ff938-a2ce-45af-a850-a7d8ae634f00\tPset_ElectricDistributionPointCommon.NumberOfOpenings\tINTEGER\t\t180\t1\tIfcInteger\t1\n#\nGROUP\t181\tPset_ElectricFlowStorageDevicePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta277fb1f-cdca-4fcc-9c29-8634518b1066\tPset_ElectricFlowStorageDevicePHistory.Level\tNUMBER\t\t181\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t182\tPset_ElectricFlowStorageDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3df26200-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ConnectedConductorFunction\tTEXT\t\t182\t1\tPEnum_ConductorFunctionEnum\t1\nPARAM\t8dd12900-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PoleMaximumState\tNUMBER\t\t182\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t97f32780-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PoleMinimumState\tNUMBER\t\t182\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t932e7380-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PolePowerFactorMaximumState\tNUMBER\t\t182\t1\tIfcReal\t1\nPARAM\t9d507200-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.EarthFault1PolePowerFactorMinimumState\tNUMBER\t\t182\t1\tIfcReal\t1\nPARAM\t7813d9d4-8068-4f79-aca2-93559a565df4\tPset_ElectricFlowStorageDeviceTypeCommon.ModuleCapacity\tNUMBER\t\t182\t1\tIfcElectricCapacitanceMeasure\t1\nPARAM\t64446b41-70e2-49fa-9c6a-4564917ccfd9\tPset_ElectricFlowStorageDeviceTypeCommon.ModulesInParallel\tINTEGER\t\t182\t1\tIfcInteger\t1\nPARAM\t9c327be7-6d6f-4139-ab9f-58c6a5cc7a9a\tPset_ElectricFlowStorageDeviceTypeCommon.ModulesInSeries\tINTEGER\t\t182\t1\tIfcInteger\t1\nPARAM\t359a2700-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.NominalFrequency\tNUMBER\t\t182\t1\tIfcFrequencyMeasure\t1\nPARAM\t2915ce80-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.NominalSupplyVoltage\tNUMBER\t\t182\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t2e731900-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.NominalSupplyVoltageOffset\tMULTILINETEXT\t\t182\t1\tPropertyBoundedValue\t1\nPARAM\t7c868260-451b-4803-8f4f-c498fc0e3a9b\tPset_ElectricFlowStorageDeviceTypeCommon.RadiativeFraction\tNUMBER\t\t182\t1\tIfcRatioMeasure\t1\nPARAM\t10a5b400-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.Reference\tTEXT\t\t182\t1\tIfcIdentifier\t1\nPARAM\t76923b80-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PoleMaximumState\tNUMBER\t\t182\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t83af2a80-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PoleMinimumState\tNUMBER\t\t182\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t7db94980-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PolePowerFactorMaximumState\tNUMBER\t\t182\t1\tIfcReal\t1\nPARAM\t890c7500-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit1PolePowerFactorMinimumState\tNUMBER\t\t182\t1\tIfcReal\t1\nPARAM\t5c585d80-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit2PoleMinimumState\tNUMBER\t\t182\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t64b09880-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit2PolePowerFactorMinimumState\tNUMBER\t\t182\t1\tIfcReal\t1\nPARAM\t51053200-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit3PoleMaximumState\tNUMBER\t\t182\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t56fb1300-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.ShortCircuit3PolePowerFactorMaximumState\tNUMBER\t\t182\t1\tIfcReal\t1\nPARAM\t17342b80-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricFlowStorageDeviceTypeCommon.Status\tTEXT\t\t182\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t183\tPset_ElectricGeneratorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbb1dd700-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricGeneratorTypeCommon.ElectricGeneratorEfficiency\tNUMBER\t\t183\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc53fd580-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricGeneratorTypeCommon.MaximumPowerOutput\tNUMBER\t\t183\t1\tIfcPowerMeasure\t1\nPARAM\ta80b0700-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricGeneratorTypeCommon.Reference\tTEXT\t\t183\t1\tIfcIdentifier\t1\nPARAM\tc07b2180-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricGeneratorTypeCommon.StartCurrentFactor\tNUMBER\t\t183\t1\tIfcReal\t1\nPARAM\tad685180-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricGeneratorTypeCommon.Status\tTEXT\t\t183\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t184\tPset_ElectricHeaterTypeElectricalCableHeater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t82f138a2-680e-4abc-9174-dea8ebad4ab3\tPset_ElectricHeaterTypeElectricalCableHeater.HeatOutputPerUnitLength\tNUMBER\t\t184\t1\t IfcPowerMeasure\t1\n#\nGROUP\t185\tPset_ElectricHeaterTypeElectricalMatHeater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t324d848a-726e-49c2-96d8-26d07c677bfc\tPset_ElectricHeaterTypeElectricalMatHeater.HeatOutputPerUnitArea\tNUMBER\t\t185\t1\t IfcPowerMeasure\t1\n#\nGROUP\t186\tPset_ElectricHeaterTypeElectricalPointHeater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcd11dec2-109f-4eab-8fc0-b40ca90a0e16\tPset_ElectricHeaterTypeElectricalPointHeater.HeatOutput\tNUMBER\t\t186\t1\t IfcPowerMeasure\t1\n#\nGROUP\t187\tPset_ElectricMotorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te99bb200-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.ElectricMotorEfficiency\tNUMBER\t\t187\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t0fc15200-d1e1-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.FrameSize\tTEXT\t\t187\t1\tIfcLabel\t1\nPARAM\t1b147d80-d1e1-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.HasPartWinding\tYESNO\t\t187\t1\tIfcBoolean\t1\nPARAM\t15b73300-d1e1-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.IsGuarded\tYESNO\t\t187\t1\tIfcBoolean\t1\nPARAM\tfddfaf00-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.LockedRotorCurrent\tNUMBER\t\t187\t1\tIfcElectricCurrentMeasure\t1\nPARAM\te56f9480-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.MaximumPowerOutput\tNUMBER\t\t187\t1\tIfcPowerMeasure\t1\nPARAM\t02a46300-d1e1-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.MotorEnclosureType\tTEXT\t\t187\t1\tPEnum_MotorEnclosureType\t1\nPARAM\td25cc480-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.Reference\tTEXT\t\t187\t1\tIfcIdentifier\t1\nPARAM\teef8fc80-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.StartCurrentFactor\tNUMBER\t\t187\t1\tIfcReal\t1\nPARAM\tf3251a00-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.StartingTime\tNUMBER\t\t187\t1\tIfcTimeMeasure\t1\nPARAM\td7217880-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.Status\tTEXT\t\t187\t1\tPEnum_ElementStatus\t1\nPARAM\tf8826480-d1e0-11e1-8000-00215ad4efdf\tPset_ElectricMotorTypeCommon.TeTime\tNUMBER\t\t187\t1\tIfcTimeMeasure\t1\n#\nGROUP\t188\tPset_ElectricTimeControlTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t25cf1280-d1e1-11e1-8000-00215ad4efdf\tPset_ElectricTimeControlTypeCommon.Reference\tTEXT\t\t188\t1\tIfcIdentifier\t1\nPARAM\t2bc4f380-d1e1-11e1-8000-00215ad4efdf\tPset_ElectricTimeControlTypeCommon.Status\tTEXT\t\t188\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t189\tPset_ElementAssemblyCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t943159a9-3c8d-4316-a7a0-1b4382c6ea80\tPset_ElementAssemblyCommon.Reference\tTEXT\t\t189\t1\tIfcIdentifier\t1\nPARAM\t20e74f79-d075-407a-92f9-3d6788281332\tPset_ElementAssemblyCommon.Status\tTEXT\t\t189\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t190\tPset_ElementComponentCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7b199ec-6918-4e05-b9a8-d4dc3a89f6d7\tPset_ElementComponentCommon.CorrosionTreatment\tTEXT\t\t190\t1\tPEnum_CorrosionTreatment\t1\nPARAM\t292f5db4-336e-4b31-9ebd-d91a1ab594ab\tPset_ElementComponentCommon.DeliveryType\tTEXT\t\t190\t1\tPEnum_DeliveryType\t1\nPARAM\t7525c67c-0faa-44ba-995f-99d07b72dd31\tPset_ElementComponentCommon.Reference\tTEXT\t\t190\t1\tIfcIdentifier\t1\nPARAM\t56f08e40-f4ec-4446-8b85-b83294b65e5f\tPset_ElementComponentCommon.Status\tTEXT\t\t190\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t191\tPset_ElementShading\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2805d0d9-8bc0-4636-9a6e-62e22f184c9e\tPset_ElementShading.AverageSolarTransmittance\tNUMBER\t\t191\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t075b8868-aaab-44c0-8bec-e2ea4206d65a\tPset_ElementShading.AverageVisibleTransmittance\tNUMBER\t\t191\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1f6dd7e6-7086-4cca-9184-8cc0a05aafdc\tPset_ElementShading.Azimuth\tNUMBER\t\t191\t1\tIfcPositivePlaneAngleMeasure \t1\nPARAM\taecbb1d0-b830-4a2d-a074-0ed749ee2222\tPset_ElementShading.Color\tTEXT\t\t191\t1\tIfcLabel\t1\nPARAM\t08b01627-4cfa-4ce7-b8c8-ef455494ab57\tPset_ElementShading.Inclination\tNUMBER\t\t191\t1\tIfcPositivePlaneAngleMeasure \t1\nPARAM\tec99155b-b09d-40f5-9194-367cf08a9d30\tPset_ElementShading.Reflectance\tNUMBER\t\t191\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tfdc121fd-14c6-4c4b-8b26-c7ffced1a7d8\tPset_ElementShading.Roughness\tLENGTH\t\t191\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta83b9757-eebf-4490-bdcf-59baac537a75\tPset_ElementShading.ShadingDeviceType\tTEXT\t\t191\t1\tPEnum_ElementShading\t1\nPARAM\t53703254-46c5-4a8c-923d-ffa1361e44e3\tPset_ElementShading.TiltRange\tMULTILINETEXT\t\t191\t1\tPropertyBoundedValue\t1\n#\nGROUP\t192\tPset_EnergyConsumptionPHistoryElectricity\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t067468c3-20c7-49f7-aeb6-dc71a8e0f049\tPset_EnergyConsumptionPHistoryElectricity.ApparentPower\tNUMBER\t\t192\t1\tIfcReal\t1\nPARAM\tfec1977c-aab3-4cc7-a1c7-2bb7569a64cf\tPset_EnergyConsumptionPHistoryElectricity.Current\tTEXT\t\t192\t1\tIfcLabel\t1\nPARAM\t982f60c2-097c-4a25-8107-e58d688dbabe\tPset_EnergyConsumptionPHistoryElectricity.PowerFactor\tNUMBER\t\t192\t1\tIfcReal\t1\nPARAM\t81aa7bb2-9ed5-495b-acdf-8724fd196bef\tPset_EnergyConsumptionPHistoryElectricity.ReactivePower\tNUMBER\t\t192\t1\tIfcReal\t1\nPARAM\t465a7311-d470-4165-8361-744d72fa638b\tPset_EnergyConsumptionPHistoryElectricity.RealPower\tNUMBER\t\t192\t1\tIfcReal\t1\nPARAM\te7cc58ad-a50e-4808-95d8-16889eef08dc\tPset_EnergyConsumptionPHistoryElectricity.Voltage\tTEXT\t\t192\t1\tIfcLabel\t1\n#\nGROUP\t193\tPset_EnergyConsumptionPHistoryFuel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4519c9db-9f45-480a-8029-dac0ceae3151\tPset_EnergyConsumptionPHistoryFuel.Flowrate\tNUMBER\t\t193\t1\tIfcReal\t1\nPARAM\t95f29a12-e180-4a5a-a114-01781d7666af\tPset_EnergyConsumptionPHistoryFuel.Pressure\tNUMBER\t\t193\t1\tIfcReal\t1\nPARAM\tb61196e9-bbe5-484c-b42f-07863f9bafe6\tPset_EnergyConsumptionPHistoryFuel.Temperature\tNUMBER\t\t193\t1\tIfcReal\t1\n#\nGROUP\t194\tPset_EnergyConsumptionPHistorySteam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfbd1d549-8dba-45b0-904b-8343e094c16f\tPset_EnergyConsumptionPHistorySteam.Flowrate\tNUMBER\t\t194\t1\tIfcReal\t1\nPARAM\t255cddc1-3752-4514-9d0e-b70f2048681d\tPset_EnergyConsumptionPHistorySteam.Pressure\tNUMBER\t\t194\t1\tIfcReal\t1\nPARAM\td5d55788-b9d1-4b0a-b1fe-5aa92f005a1b\tPset_EnergyConsumptionPHistorySteam.Quality\tTEXT\t\t194\t1\tIfcLabel\t1\nPARAM\tdff997f9-f335-4acf-84a6-e0ba64c7852b\tPset_EnergyConsumptionPHistorySteam.Temperature\tNUMBER\t\t194\t1\tIfcReal\t1\n#\nGROUP\t195\tPset_EnergyConversionDeviceCoil\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t99a2dbcf-e59c-434c-809a-8ea14bf6f715\tPset_EnergyConversionDeviceCoil.HasSoundAttentuation\tYESNO\t\t195\t1\tIfcBoolean\t1\n#\nGROUP\t196\tPset_EnergyConversionDeviceSpaceHeaterPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te9c531d5-a6a0-45e0-aa7d-a37b9a874c6e\tPset_EnergyConversionDeviceSpaceHeaterPanel.NumberOfPanels\tINTEGER\t\t196\t1\tIfcInteger\t1\n#\nGROUP\t197\tPset_EnergyConversionDeviceSpaceHeaterSectional\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tce2794f5-9e04-40f4-9b81-6dd86b1327d1\tPset_EnergyConversionDeviceSpaceHeaterSectional.NumberOfSections\tINTEGER\t\t197\t1\tIfcInteger\t1\n#\nGROUP\t198\tPset_EngineTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5fa01900-d1e1-11e1-8000-00215ad4efdf\tPset_EngineTypeCommon.EnergySource\tTEXT\t\t198\t1\tPEnum_EngineEnergySource\t1\nPARAM\t49925880-d1e1-11e1-8000-00215ad4efdf\tPset_EngineTypeCommon.Reference\tTEXT\t\t198\t1\tIfcIdentifier\t1\nPARAM\t4f883980-d1e1-11e1-8000-00215ad4efdf\tPset_EngineTypeCommon.Status\tTEXT\t\t198\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t199\tPset_EnvironmentalImpactIndicators\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc9202780-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.AtmosphericAcidificationPerUnit\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\tc32a4680-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.ClimateChangePerUnit\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\tf79e0280-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.EutrophicationPerUnit\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\ta7bf3b80-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.ExpectedServiceLife\tNUMBER\t\t199\t1\tIfcTimeMeasure\t1\nPARAM\t88281300-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.FunctionalUnitReference\tTEXT\t\t199\t1\tIfcLabel\t1\nPARAM\tb9084800-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.HazardousWastePerUnit\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\te0f7ab80-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.InertWastePerUnit\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\t96762f00-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.LifeCyclePhase\tTEXT\t\t199\t1\tPEnum_LifeCyclePhase\t1\nPARAM\tbe659280-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.NonHazardousWastePerUnit\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\td50be980-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.NonRenewableEnergyConsumptionPerUnit\tNUMBER\t\t199\t1\tIfcEnergyMeasure\t1\nPARAM\tf2d94e80-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.PhotochemicalOzoneFormationPerUnit\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\te6ed8c80-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.RadioactiveWastePerUnit\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\t82323200-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.Reference\tTEXT\t\t199\t1\tIfcIdentifier\t1\nPARAM\tcf160880-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.RenewableEnergyConsumptionPerUnit\tNUMBER\t\t199\t1\tIfcEnergyMeasure\t1\nPARAM\tdb01ca80-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.ResourceDepletionPerUnit\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\tec4ad700-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.StratosphericOzoneLayerDestructionPerUnit\tNUMBER\t\t199\t1\tIfcMassMeasure\t1\nPARAM\tadb51c80-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.TotalPrimaryEnergyConsumptionPerUnit\tNUMBER\t\t199\t1\tIfcEnergyMeasure\t1\nPARAM\t8f4f2100-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.Unit\tTEXT\t\t199\t1\tIfcText\t1\nPARAM\tb3126700-d1e1-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactIndicators.WaterConsumptionPerUnit\tVOLUME\t\t199\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t200\tPset_EnvironmentalImpactValues\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1f8d6600-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.AtmosphericAcidification\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\t1a301b80-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.ClimateChange\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\tb5b49d20-0bf2-49a4-9d55-8cef7acb75bd\tPset_EnvironmentalImpactValues.Duration\tTEXT\t\t200\t1\tIfcDuration\t1\nPARAM\t4cda1400-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.Eutrophication\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\t0f758680-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.HazardousWaste\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\t359b2680-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.InertWaste\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\tb8fbc6f7-870b-486e-80cd-661b9dd0c27c\tPset_EnvironmentalImpactValues.LeadInTime\tTEXT\t\t200\t1\tIfcDuration\t1\nPARAM\t88eae355-e7df-464a-849b-e613af48fa32\tPset_EnvironmentalImpactValues.LeadOutTime\tTEXT\t\t200\t1\tIfcDuration\t1\nPARAM\t14d2d100-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.NonHazardousWaste\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\t2ae09180-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.NonRenewableEnergyConsumption\tNUMBER\t\t200\t1\tIfcEnergyMeasure\t1\nPARAM\t46e43300-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.PhotochemicalOzoneFormation\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\t3b910780-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.RadioactiveWaste\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\t25834700-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.RenewableEnergyConsumption\tNUMBER\t\t200\t1\tIfcEnergyMeasure\t1\nPARAM\t303ddc00-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.ResourceDepletion\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\t40ee5200-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.StratosphericOzoneLayerDestruction\tNUMBER\t\t200\t1\tIfcMassMeasure\t1\nPARAM\t04225b00-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.TotalPrimaryEnergyConsumption\tNUMBER\t\t200\t1\tIfcEnergyMeasure\t1\nPARAM\t097fa580-d1e2-11e1-8000-00215ad4efdf\tPset_EnvironmentalImpactValues.WaterConsumption\tVOLUME\t\t200\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t201\tPset_EvaporativeCoolerPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c8b82e4-9256-47f3-ab8e-66344426eb6b\tPset_EvaporativeCoolerPHistory.AirPressureDropCurve\tMULTILINETEXT\t\t201\t1\tPropertyListValue\t1\nPARAM\t5c595d00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerPHistory.Effectiveness\tMULTILINETEXT\t\t201\t1\tIfcTimeSeries\t1\nPARAM\tfedf87c7-e123-40fb-8d18-2fb11e1e2fed\tPset_EvaporativeCoolerPHistory.EffectivenessTable\tMULTILINETEXT\t\t201\t1\tPropertyListValue\t1\nPARAM\t62e7d480-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerPHistory.LatentHeatTransferRate\tMULTILINETEXT\t\t201\t1\tIfcTimeSeries\t1\nPARAM\t5f544d80-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerPHistory.SensibleHeatTransferRate\tMULTILINETEXT\t\t201\t1\tIfcTimeSeries\t1\nPARAM\t65e2c500-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerPHistory.TotalHeatTransferRate\tMULTILINETEXT\t\t201\t1\tIfcTimeSeries\t1\nPARAM\t07d099d9-c7d4-4e14-b1ca-f4e32394201b\tPset_EvaporativeCoolerPHistory.WaterPressDropCurve\tMULTILINETEXT\t\t201\t1\tPropertyListValue\t1\nPARAM\t582d3f80-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerPHistory.WaterSumpTemperature\tMULTILINETEXT\t\t201\t1\tIfcTimeSeries\t1\n#\nGROUP\t202\tPset_EvaporativeCoolerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb1956e80-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.AirPressureDropCurve\tMULTILINETEXT\t\t202\t1\tPropertyTableValue\t1\nPARAM\ta7737000-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.EffectivenessTable\tMULTILINETEXT\t\t202\t1\tPropertyTableValue\t1\nPARAM\t86128400-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.FlowArrangement\tTEXT\t\t202\t1\tPEnum_EvaporativeCoolerFlowArrangement\t1\nPARAM\t93c80980-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.HeatExchangeArea\tAREA\t\t202\t1\tIfcAreaMeasure\t1\nPARAM\t4c70ed76-185d-48cb-b1bf-4f83ce537737\tPset_EvaporativeCoolerTypeCommon.HeatExchangerMediaMaterials\tMULTILINETEXT\t\t202\t1\tIfcMaterial\t1\nPARAM\t99255400-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.OperationTemperatureRange\tMULTILINETEXT\t\t202\t1\tPropertyBoundedValue\t1\nPARAM\t7004c380-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.Reference\tTEXT\t\t202\t1\tIfcIdentifier\t1\nPARAM\t76933b00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.Status\tTEXT\t\t202\t1\tPEnum_ElementStatus\t1\nPARAM\tbce89a00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.WaterPressDropCurve\tMULTILINETEXT\t\t202\t1\tPropertyTableValue\t1\nPARAM\ta2162580-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporativeCoolerTypeCommon.WaterRequirement\tNUMBER\t\t202\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tdcf75b89-fea2-48dc-a622-d0e09da3432a\tPset_EvaporativeCoolerTypeCommon.Weight\tNUMBER\t\t202\t1\tIfcMassMeasure\t1\n#\nGROUP\t203\tPset_EvaporatorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teef9fc00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.CompressorEvaporatorHeatGain\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\tf3beb000-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.CompressorEvaporatorPressureDrop\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\tdbe72c00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.EvaporatingTemperature\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\tf8836400-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.EvaporatorMeanVoidFraction\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\td12c9700-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.ExteriorHeatTransferCoefficient\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\tce31a680-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.HeatRejectionRate\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\td4c01e00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.InteriorHeatTransferCoefficient\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\tdee21c80-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.LogarithmicMeanTemperatureDifference\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\td8ec3b80-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.RefrigerantFoulingResistance\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\t4af9c013-026b-433e-b09c-24c8f14ac818\tPset_EvaporatorPHistory.RefrigrerantFoulingResistance\tNUMBER\t\t203\t1\tIfcReal\t1\nPARAM\te1dd0d00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.UAcurves\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\nPARAM\tfc16eb00-d1e2-11e1-8000-00215ad4efdf\tPset_EvaporatorPHistory.WaterFoulingResistance\tMULTILINETEXT\t\t203\t1\tIfcTimeSeries\t1\n#\nGROUP\t204\tPset_EvaporatorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t28cb0280-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.EvaporatorCoolant\tTEXT\t\t204\t1\tPEnum_EvaporatorCoolant\t1\nPARAM\t1bae1380-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.EvaporatorMediumType\tTEXT\t\t204\t1\tPEnum_EvaporatorMediumType\t1\nPARAM\t5021cf80-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.ExternalSurfaceArea\tAREA\t\t204\t1\tIfcAreaMeasure\t1\nPARAM\t5c0d9180-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.InternalRefrigerantVolume\tVOLUME\t\t204\t1\tIfcVolumeMeasure\t1\nPARAM\t56b04700-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.InternalSurfaceArea\tAREA\t\t204\t1\tIfcAreaMeasure\t1\nPARAM\t616adc00-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.InternalWaterVolume\tVOLUME\t\t204\t1\tIfcVolumeMeasure\t1\nPARAM\t6760bd00-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.NominalHeatTransferArea\tAREA\t\t204\t1\tIfcAreaMeasure\t1\nPARAM\t6d569e00-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.NominalHeatTransferCoefficient\tNUMBER\t\t204\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t05a05300-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.Reference\tTEXT\t\t204\t1\tIfcIdentifier\t1\nPARAM\t397b7880-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.RefrigerantClass\tTEXT\t\t204\t1\tPEnum_RefrigerantClass\t1\nPARAM\t76f73890-9496-4f19-9f1c-1604277fd98e\tPset_EvaporatorTypeCommon.RefrigerantType\tMULTILINETEXT\t\t204\t1\tIfcMaterial\t1\nPARAM\t0c2eca80-d1e3-11e1-8000-00215ad4efdf\tPset_EvaporatorTypeCommon.Status\tTEXT\t\t204\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t205\tPset_FanCentrifugal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta262f080-d1e3-11e1-8000-00215ad4efdf\tPset_FanCentrifugal.Arrangement\tTEXT\t\t205\t1\tPEnum_CentrifugalFanArrangement\t1\nPARAM\t94ad6b00-d1e3-11e1-8000-00215ad4efdf\tPset_FanCentrifugal.DirectionOfRotation\tTEXT\t\t205\t1\tPEnum_CentrifugalFanRotation\t1\nPARAM\t7cd5e700-d1e3-11e1-8000-00215ad4efdf\tPset_FanCentrifugal.DischargePosition\tTEXT\t\t205\t1\tPEnum_CentrifugalFanDischargePosition\t1\n#\nGROUP\t206\tPset_FanOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcfaf9e80-d1e3-11e1-8000-00215ad4efdf\tPset_FanOccurrence.ApplicationOfFan\tTEXT\t\t206\t1\tPEnum_FanApplicationType\t1\nPARAM\te0601480-d1e3-11e1-8000-00215ad4efdf\tPset_FanOccurrence.CoilPosition\tTEXT\t\t206\t1\tPEnum_FanCoilPosition\t1\nPARAM\tbeff2880-d1e3-11e1-8000-00215ad4efdf\tPset_FanOccurrence.DischargeType\tTEXT\t\t206\t1\tPEnum_FanDischargeType\t1\nPARAM\tfa015c00-d1e3-11e1-8000-00215ad4efdf\tPset_FanOccurrence.FanMountingType\tTEXT\t\t206\t1\tPEnum_FanMountingType\t1\nPARAM\t0d142c00-d1e4-11e1-8000-00215ad4efdf\tPset_FanOccurrence.FractionOfMotorHeatToAirStream\tNUMBER\t\t206\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t12717680-d1e4-11e1-8000-00215ad4efdf\tPset_FanOccurrence.ImpellerDiameter\tLENGTH\t\t206\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tece46d00-d1e3-11e1-8000-00215ad4efdf\tPset_FanOccurrence.MotorPosition\tTEXT\t\t206\t1\tPEnum_FanMotorPosition\t1\n#\nGROUP\t207\tPset_FanPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t36cd5300-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.DischargePressureLoss\tMULTILINETEXT\t\t207\t1\tIfcTimeSeries\t1\nPARAM\t33d26280-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.DischargeVelocity\tMULTILINETEXT\t\t207\t1\tIfcTimeSeries\t1\nPARAM\t3a60da00-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.DrivePowerLoss\tMULTILINETEXT\t\t207\t1\tIfcTimeSeries\t1\nPARAM\t47af418e-4ddc-4150-b52e-90d66bc334f5\tPset_FanPHistory.EfficiencyCurve\tMULTILINETEXT\t\t207\t1\tPropertyTableValue\t1\nPARAM\t26b57380-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.FanEfficiency\tMULTILINETEXT\t\t207\t1\tIfcTimeSeries\t1\nPARAM\t2cab5480-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.FanPowerRate\tMULTILINETEXT\t\t207\t1\tIfcTimeSeries\t1\nPARAM\t2026fc00-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.FanRotationSpeed\tMULTILINETEXT\t\t207\t1\tIfcTimeSeries\t1\nPARAM\t29b06400-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.OverallEfficiency\tMULTILINETEXT\t\t207\t1\tIfcTimeSeries\t1\nPARAM\td4c7198a-18b1-455e-a335-b495456a4c65\tPset_FanPHistory.PressureCurve\tMULTILINETEXT\t\t207\t1\tPropertyTableValue\t1\nPARAM\t303edb80-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.ShaftPowerRate\tMULTILINETEXT\t\t207\t1\tIfcTimeSeries\t1\nPARAM\t23ba8300-d1e4-11e1-8000-00215ad4efdf\tPset_FanPHistory.WheelTipSpeed\tMULTILINETEXT\t\t207\t1\tIfcTimeSeries\t1\n#\nGROUP\t208\tPset_FanTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6a0fe200-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.CapacityControlType\tTEXT\t\t208\t1\tPEnum_FanCapacityControlType\t1\nPARAM\tb22f0480-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.EfficiencyCurve\tMULTILINETEXT\t\t208\t1\tPropertyTableValue\t1\nPARAM\te63d1f5f-8474-4433-bdb2-279c5f079be3\tPset_FanTypeCommon.HousingMaterial\tMULTILINETEXT\t\t208\t1\tIfcMaterial\t1\nPARAM\t5b292f80-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.MotorDriveType\tTEXT\t\t208\t1\tPEnum_FanMotorConnectionType\t1\nPARAM\t83189300-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.NominalAirFlowRate\tNUMBER\t\t208\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t9b88ad80-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.NominalPowerRate\tNUMBER\t\t208\t1\tIfcPowerMeasure\t1\nPARAM\t96c3f980-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.NominalRotationSpeed\tNUMBER\t\t208\t1\tIfcRotationalFrequencyMeasure\t1\nPARAM\t90ce1880-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.NominalStaticPressure\tNUMBER\t\t208\t1\tIfcPressureMeasure\t1\nPARAM\t890e7400-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.NominalTotalPressure\tNUMBER\t\t208\t1\tIfcPressureMeasure\t1\nPARAM\ta0e5f800-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.OperationalCriteria\tNUMBER\t\t208\t1\tIfcTimeMeasure\t1\nPARAM\t7ac05800-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.OperationTemperatureRange\tMULTILINETEXT\t\t208\t1\tPropertyBoundedValue\t1\nPARAM\ta6dbd900-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.PressureCurve\tMULTILINETEXT\t\t208\t1\tPropertyTableValue\t1\nPARAM\t43ea4200-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.Reference\tTEXT\t\t208\t1\tIfcIdentifier\t1\nPARAM\t4b115000-d1e4-11e1-8000-00215ad4efdf\tPset_FanTypeCommon.Status\tTEXT\t\t208\t1\tPEnum_ElementStatus\t1\nPARAM\t378a418a-fe3f-43ba-93af-07afe7d7a859\tPset_FanTypeCommon.Weight\tNUMBER\t\t208\t1\tIfcMassMeasure\t1\nPARAM\tb2d8bc12-2466-4551-82e3-83934d9bdeec\tPset_FanTypeCommon.WheelMaterial\tMULTILINETEXT\t\t208\t1\tIfcMaterial\t1\n#\nGROUP\t209\tPset_FanTypeSmokeControl\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t01faa1f3-9c12-4282-829a-b6bcaa3bbc19\tPset_FanTypeSmokeControl.MaximumDesignTemperature\tNUMBER\t\t209\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\ta31d008c-8f14-4446-a306-b928e206ee10\tPset_FanTypeSmokeControl.OperationalCriteria\tNUMBER\t\t209\t1\tIfcTimeMeasure\t1\nPARAM\t5b508557-d008-4040-8275-8e4a58fb4093\tPset_FanTypeSmokeControl.SmokeControlFlowrate\tNUMBER\t\t209\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t210\tPset_FastenerWeld\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teacede00-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.a\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf3271900-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.c\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf9b59080-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.d\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t00dc9e80-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.e\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t21a4f400-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Intermittent\tYESNO\t\t210\t1\tIfcBoolean\t1\nPARAM\t076b1600-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.l\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0e922400-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.n\tINTEGER\t\t210\t1\tIfcCountMeasure\t1\nPARAM\tdf7bb280-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Process\tINTEGER\t\t210\t1\tIfcInteger\t1\nPARAM\te4d8fd00-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.ProcessName\tTEXT\t\t210\t1\tIfcLabel\t1\nPARAM\t1356d800-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.s\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t28336b80-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Staggered\tYESNO\t\t210\t1\tIfcBoolean\t1\nPARAM\td25ec380-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Surface1\tTEXT\t\t210\t1\tIfcLabel\t1\nPARAM\td854a480-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Surface2\tTEXT\t\t210\t1\tIfcLabel\t1\nPARAM\tc541d480-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Type1\tTEXT\t\t210\t1\tIfcLabel\t1\nPARAM\tcc68e280-d1e4-11e1-8000-00215ad4efdf\tPset_FastenerWeld.Type2\tTEXT\t\t210\t1\tIfcLabel\t1\nPARAM\t1a7de600-d1e5-11e1-8000-00215ad4efdf\tPset_FastenerWeld.z\tLENGTH\t\t210\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t211\tPset_FilterPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t35505a80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterPHistory.CountedEfficiency\tMULTILINETEXT\t\t211\t1\tIfcTimeSeries\t1\nPARAM\t3c776880-d1e5-11e1-8000-00215ad4efdf\tPset_FilterPHistory.ParticleMassHolding\tMULTILINETEXT\t\t211\t1\tIfcTimeSeries\t1\nPARAM\t397c7800-d1e5-11e1-8000-00215ad4efdf\tPset_FilterPHistory.WeightedEfficiency\tMULTILINETEXT\t\t211\t1\tIfcTimeSeries\t1\n#\nGROUP\t212\tPset_FilterTypeAirParticleFilter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4731fd80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.AirParticleFilterType\tTEXT\t\t212\t1\tPEnum_FilterAirParticleFilterType\t1\nPARAM\t9a0bb500-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.CountedEfficiencyCurve\tMULTILINETEXT\t\t212\t1\tPropertyTableValue\t1\nPARAM\t747eab80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.DustHoldingCapacity\tNUMBER\t\t212\t1\tIfcMassMeasure\t1\nPARAM\t79435f80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.FaceSurfaceArea\tAREA\t\t212\t1\tIfcAreaMeasure\t1\nPARAM\t63359f00-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.FrameMaterial\tMULTILINETEXT\t\t212\t1\tIfcMaterialDefinition\t1\nPARAM\t7fd1d700-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.MediaExtendedArea\tAREA\t\t212\t1\tIfcAreaMeasure\t1\nPARAM\td87df833-d4df-4201-9205-e0cb35d80173\tPset_FilterTypeAirParticleFilter.MediaMaterial\tMULTILINETEXT\t\t212\t1\tIfcMaterial\t1\nPARAM\t852f2180-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.NominalCountedEfficiency\tNUMBER\t\t212\t1\tIfcReal\t1\nPARAM\t8a8c6c00-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.NominalWeightedEfficiency\tNUMBER\t\t212\t1\tIfcReal\t1\nPARAM\t8fe9b680-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.PressureDropCurve\tMULTILINETEXT\t\t212\t1\tPropertyTableValue\t1\nPARAM\t66308f80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.SeparationType\tTEXT\t\t212\t1\tPEnum_FilterAirParticleFilterSeparationType\t1\nPARAM\ta5f77700-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeAirParticleFilter.WeightedEfficiencyCurve\tMULTILINETEXT\t\t212\t1\tPropertyTableValue\t1\n#\nGROUP\t213\tPset_FilterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td808d900-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.FinalResistance\tNUMBER\t\t213\t1\tIfcPressureMeasure\t1\nPARAM\te3f49b00-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.FlowRateRange\tMULTILINETEXT\t\t213\t1\tPropertyBoundedValue\t1\nPARAM\td212f800-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.InitialResistance\tNUMBER\t\t213\t1\tIfcPressureMeasure\t1\nPARAM\t2d8fa950-b4da-42a6-b8b4-09245e38cabf\tPset_FilterTypeCommon.MediaMaterial\tMULTILINETEXT\t\t213\t1\tIfcMaterial\t1\nPARAM\tea831280-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.NominalFilterFaceVelocity\tNUMBER\t\t213\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tf8389800-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.NominalFlowrate\tNUMBER\t\t213\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\teeaf3000-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.NominalMediaSurfaceVelocity\tNUMBER\t\t213\t1\tIfcLinearVelocityMeasure\t1\nPARAM\tfd95e280-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.NominalParticleGeometricMeanDiameter\tLENGTH\t\t213\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t02f32d00-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.NominalParticleGeometricStandardDeviation\tNUMBER\t\t213\t1\tIfcReal\t1\nPARAM\tf2db4d80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.NominalPressureDrop\tNUMBER\t\t213\t1\tIfcPressureMeasure\t1\nPARAM\tdd662380-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.OperationTemperatureRange\tMULTILINETEXT\t\t213\t1\tPropertyBoundedValue\t1\nPARAM\tb60f5680-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.Reference\tTEXT\t\t213\t1\tIfcIdentifier\t1\nPARAM\tbb6ca100-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.Status\tTEXT\t\t213\t1\tPEnum_ElementStatus\t1\nPARAM\tccb5ad80-d1e5-11e1-8000-00215ad4efdf\tPset_FilterTypeCommon.Weight\tNUMBER\t\t213\t1\tIfcMassMeasure\t1\n#\nGROUP\t214\tPset_FilterTypeCompressedAirFilter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t25854600-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeCompressedAirFilter.AutomaticCondensateDischarge\tYESNO\t\t214\t1\tIfcBoolean\t1\nPARAM\t2ae29080-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeCompressedAirFilter.CloggingIndicator\tYESNO\t\t214\t1\tIfcBoolean\t1\nPARAM\t0c7c9500-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeCompressedAirFilter.CompressedAirFilterType\tTEXT\t\t214\t1\tPEnum_CompressedAirFilterType\t1\nPARAM\t17cfc080-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeCompressedAirFilter.OperationPressureMax\tNUMBER\t\t214\t1\tIfcPressureMeasure\t1\nPARAM\t1bfbde00-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeCompressedAirFilter.ParticleAbsorptionCurve\tMULTILINETEXT\t\t214\t1\tPropertyTableValue\t1\n#\nGROUP\t215\tPset_FilterTypeWaterFilter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t35048f00-d1e6-11e1-8000-00215ad4efdf\tPset_FilterTypeWaterFilter.WaterFilterType\tTEXT\t\t215\t1\tPEnum_FilterWaterFilterType\t1\n#\nGROUP\t216\tPset_FireRatingProperties\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf61421bd-e86a-4858-9740-b270db3253a2\tPset_FireRatingProperties.FireResistanceRating\tTEXT\t\t216\t1\tIfcLabel\t1\nPARAM\t3c5f0105-5863-426c-9fa8-a13f872d2c7d\tPset_FireRatingProperties.IsCombustible\tYESNO\t\t216\t1\tIfcBoolean\t1\nPARAM\t3dfc6063-3fa3-45a6-ad59-9c39cda570f5\tPset_FireRatingProperties.SurfaceSpreadOfFlame\tTEXT\t\t216\t1\tIfcLabel\t1\n#\nGROUP\t217\tPset_FireSuppressionTerminalTypeBreechingInlet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t49488c00-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeBreechingInlet.BreechingInletType\tTEXT\t\t217\t1\tPEnum_BreechingInletType\t1\nPARAM\t5ebdb600-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeBreechingInlet.CouplingType\tTEXT\t\t217\t1\tPEnum_BreechingInletCouplingType\t1\nPARAM\t6a10e180-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeBreechingInlet.HasCaps\tYESNO\t\t217\t1\tIfcBoolean\t1\nPARAM\t54032100-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeBreechingInlet.InletDiameter\tLENGTH\t\t217\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t239e763a-5d2c-4f78-993c-ca3572671447\tPset_FireSuppressionTerminalTypeBreechingInlet.Material\tMULTILINETEXT\t\t217\t1\tIfcMaterial\t1\nPARAM\t59606b80-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeBreechingInlet.OutletDiameter\tLENGTH\t\t217\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t218\tPset_FireSuppressionTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t739a4980-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeCommon.Reference\tTEXT\t\t218\t1\tIfcIdentifier\t1\nPARAM\t785efd80-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeCommon.Status\tTEXT\t\t218\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t219\tPset_FireSuppressionTerminalTypeFireHydrant\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbbb96c00-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.BodyColor\tTEXT\t\t219\t1\tIfcText\t1\nPARAM\tc07e2000-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.CapColor\tTEXT\t\t219\t1\tIfcText\t1\nPARAM\ta5abab80-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.DischargeFlowRate\tNUMBER\t\t219\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t8a40a080-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.FireHydrantType\tTEXT\t\t219\t1\tPEnum_FireHydrantType\t1\nPARAM\taa705f80-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.FlowClass\tTEXT\t\t219\t1\tIfcLabel\t1\nPARAM\t9fb5ca80-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.HoseConnectionSize\tLENGTH\t\t219\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9af11680-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.NumberOfHoseConnections\tINTEGER\t\t219\t1\tIfcInteger\t1\nPARAM\tb65c2180-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.PressureRating\tNUMBER\t\t219\t1\tIfcPressureMeasure\t1\nPARAM\t94629f00-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.PumperConnectionSize\tLENGTH\t\t219\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb0fed700-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeFireHydrant.WaterIsPotable\tYESNO\t\t219\t1\tIfcBoolean\t1\n#\nGROUP\t220\tPset_FireSuppressionTerminalTypeHoseReel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t10f57d80-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.ClassificationAuthority\tTEXT\t\t220\t1\tIfcLabel\t1\nPARAM\t0935d900-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.ClassOfService\tTEXT\t\t220\t1\tIfcLabel\t1\nPARAM\teefbfb00-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.HoseDiameter\tLENGTH\t\t220\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf58a7280-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.HoseLength\tLENGTH\t\t220\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfc18ea00-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.HoseNozzleType\tTEXT\t\t220\t1\tPEnum_HoseNozzleType\t1\nPARAM\td986d100-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.HoseReelMountingType\tTEXT\t\t220\t1\tPEnum_HoseReelMountingType\t1\nPARAM\tcc69e200-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.HoseReelType\tTEXT\t\t220\t1\tPEnum_HoseReelType\t1\nPARAM\te9061a00-d1e6-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeHoseReel.InletConnectionSize\tLENGTH\t\t220\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t221\tPset_FireSuppressionTerminalTypeSprinkler\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t31bdd300-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.Activation\tTEXT\t\t221\t1\tPEnum_SprinklerActivation\t1\nPARAM\t47cb9380-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.ActivationTemperature\tNUMBER\t\t221\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t59ad3680-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.BulbLiquidColor\tTEXT\t\t221\t1\tPEnum_SprinklerBulbLiquidColor\t1\nPARAM\t83665d80-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.ConnectionSize\tLENGTH\t\t221\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4d28de00-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.CoverageArea\tAREA\t\t221\t1\tIfcAreaMeasure\t1\nPARAM\te33b64e5-6d99-4e25-9c41-a3110af59a87\tPset_FireSuppressionTerminalTypeSprinkler.DeflectorMaterial\tMULTILINETEXT\t\t221\t1\tIfcMaterial\t1\nPARAM\t78133200-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.DischargeCoefficient\tNUMBER\t\t221\t1\tIfcReal\t1\nPARAM\t6cc00680-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.DischargeFlowRate\tNUMBER\t\t221\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t2906b840-d09b-43d8-b9af-a78ca056b5df\tPset_FireSuppressionTerminalTypeSprinkler.FrameMaterial\tMULTILINETEXT\t\t221\t1\tIfcMaterial\t1\nPARAM\t531ebf00-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.HasDeflector\tYESNO\t\t221\t1\tIfcBoolean\t1\nPARAM\t7d707c80-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.MaximumWorkingPressure\tNUMBER\t\t221\t1\tIfcPressureMeasure\t1\nPARAM\t721d5100-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.ResidualFlowingPressure\tNUMBER\t\t221\t1\tIfcPressureMeasure\t1\nPARAM\t3da99500-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.Response\tTEXT\t\t221\t1\tPEnum_SprinklerResponse\t1\nPARAM\t1d79d600-d1e7-11e1-8000-00215ad4efdf\tPset_FireSuppressionTerminalTypeSprinkler.SprinklerType\tTEXT\t\t221\t1\tPEnum_SprinklerType\t1\n#\nGROUP\t222\tPset_FlowControllerDamper\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t34728afc-bb21-4431-ab94-888e2c145c5c\tPset_FlowControllerDamper.SizingMethod\tTEXT\t\t222\t1\tPEnum_DamperSizingMethod\t1\n#\nGROUP\t223\tPset_FlowControllerFlowMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t44a680ad-37a5-4031-bab8-59c8405cb22f\tPset_FlowControllerFlowMeter.Purpose\tTEXT\t\t223\t1\tPEnum_FlowMeterPurpose\t1\n#\nGROUP\t224\tPset_FlowFittingDuctFitting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t08f5535e-60d1-4669-acd0-3d5b84a8c338\tPset_FlowFittingDuctFitting.AbsoluteRoughnessFactor\tLENGTH\t\t224\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td7260ab3-ff92-4f26-ab4b-a0ae27f9ab98\tPset_FlowFittingDuctFitting.Color\tTEXT\t\t224\t1\tIfcLabel\t1\nPARAM\t329e0f04-c933-4e71-925a-a8ac7e59fb92\tPset_FlowFittingDuctFitting.HasLiner\tYESNO\t\t224\t1\tIfcBoolean\t1\n#\nGROUP\t225\tPset_FlowFittingPipeFitting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te2c6476a-fe35-4b85-aa2a-11cc0d8e8675\tPset_FlowFittingPipeFitting.Color\tTEXT\t\t225\t1\tIfcLabel\t1\nPARAM\t8856a008-4ba8-41f8-b54e-740959a1e9bb\tPset_FlowFittingPipeFitting.InteriorRoughnessCoefficient\tLENGTH\t\t225\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t226\tPset_FlowInstrumentPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t94af6a00-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentPHistory.Quality\tMULTILINETEXT\t\t226\t1\tIfcTimeSeries\t1\nPARAM\t97aa5a80-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentPHistory.Status\tMULTILINETEXT\t\t226\t1\tIfcTimeSeries\t1\nPARAM\t90834c80-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentPHistory.Value\tMULTILINETEXT\t\t226\t1\tIfcTimeSeries\t1\n#\nGROUP\t227\tPset_FlowInstrumentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta133c280-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentTypeCommon.Reference\tTEXT\t\t227\t1\tIfcIdentifier\t1\nPARAM\ta6910d00-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentTypeCommon.Status\tTEXT\t\t227\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t228\tPset_FlowInstrumentTypePressureGauge\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcaece980-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentTypePressureGauge.DisplaySize\tLENGTH\t\t228\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbc9ecd80-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentTypePressureGauge.PressureGaugeType\tTEXT\t\t228\t1\tPEnum_PressureGaugeType\t1\n#\nGROUP\t229\tPset_FlowInstrumentTypeThermometer\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te5bf5e00-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentTypeThermometer.DisplaySize\tLENGTH\t\t229\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td7714200-d1e7-11e1-8000-00215ad4efdf\tPset_FlowInstrumentTypeThermometer.ThermometerType\tTEXT\t\t229\t1\tPEnum_ThermometerType\t1\n#\nGROUP\t230\tPset_FlowMeterOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf374e380-d1e7-11e1-8000-00215ad4efdf\tPset_FlowMeterOccurrence.Purpose\tTEXT\t\t230\t1\tPEnum_FlowMeterPurpose\t1\n#\nGROUP\t231\tPset_FlowMeterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6cf99e4f-a821-45ec-b0fa-6fb483cebef5\tPset_FlowMeterTypeCommon.IsMain\tYESNO\t\t231\t1\tIfcBoolean\t1\nPARAM\t1bfcdd80-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeCommon.ReadOutType\tTEXT\t\t231\t1\tPEnum_MeterReadOutType\t1\nPARAM\t07204a00-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeCommon.Reference\tTEXT\t\t231\t1\tIfcIdentifier\t1\nPARAM\t2a4af980-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeCommon.RemoteReading\tYESNO\t\t231\t1\tIfcBoolean\t1\nPARAM\t0d162b00-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeCommon.Status\tTEXT\t\t231\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t232\tPset_FlowMeterTypeEnergyMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8e052728-f2a3-4f31-ad69-ff29f047cd98\tPset_FlowMeterTypeEnergyMeter.ConnectionSize\tLENGTH\t\t232\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3afb6f80-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeEnergyMeter.MaximumCurrent\tNUMBER\t\t232\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t4058ba00-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeEnergyMeter.MultipleTarriff\tYESNO\t\t232\t1\tIfcBoolean\t1\nPARAM\t3636bb80-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeEnergyMeter.NominalCurrent\tNUMBER\t\t232\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t233\tPset_FlowMeterTypeGasMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5c5c5b80-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeGasMeter.ConnectionSize\tLENGTH\t\t233\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4cdd1280-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeGasMeter.GasType\tTEXT\t\t233\t1\tPEnum_GasType\t1\nPARAM\t641c0000-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeGasMeter.MaximumFlowRate\tNUMBER\t\t233\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t68e0b400-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeGasMeter.MaximumPressureLoss\tNUMBER\t\t233\t1\tIfcPressureMeasure\t1\n#\nGROUP\t234\tPset_FlowMeterTypeOilMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t75650c80-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeOilMeter.ConnectionSize\tLENGTH\t\t234\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7bf38400-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeOilMeter.MaximumFlowRate\tNUMBER\t\t234\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t235\tPset_FlowMeterTypeWaterMeter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta47b7e00-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeWaterMeter.BackflowPreventerType\tTEXT\t\t235\t1\tPEnum_BackflowPreventerType\t1\nPARAM\t93327180-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeWaterMeter.ConnectionSize\tLENGTH\t\t235\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t99c0e900-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeWaterMeter.MaximumFlowRate\tNUMBER\t\t235\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t9fb6ca00-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeWaterMeter.MaximumPressureLoss\tNUMBER\t\t235\t1\tIfcPressureMeasure\t1\nPARAM\t87df4600-d1e8-11e1-8000-00215ad4efdf\tPset_FlowMeterTypeWaterMeter.Type\tTEXT\t\t235\t1\tPEnum_WaterMeterType\t1\n#\nGROUP\t236\tPset_FlowMovingDeviceCompressor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te9a42743-0032-4f7f-ae40-a442097e034a\tPset_FlowMovingDeviceCompressor.ImpellerDiameter\tLENGTH\t\t236\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t237\tPset_FlowMovingDeviceFan\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t67a7e91e-d253-4431-929e-a4e43cd4848e\tPset_FlowMovingDeviceFan.ApplicationOfFan\tTEXT\t\t237\t1\tPEnum_FanApplicationType\t1\nPARAM\tcbafd0d3-8566-4765-a35c-580445f76c03\tPset_FlowMovingDeviceFan.CoilPosition\tTEXT\t\t237\t1\tPEnum_FanCoilPosition\t1\nPARAM\t97fac63f-e5d0-4396-b0a8-4d6137e7f970\tPset_FlowMovingDeviceFan.DischargeType\tTEXT\t\t237\t1\tPEnum_FanDischargeType\t1\nPARAM\tfc8a5391-c1e8-44cd-ab54-d0b7687197f6\tPset_FlowMovingDeviceFan.FanMountingType\tTEXT\t\t237\t1\tPEnum_FanMountingType\t1\nPARAM\t62c05fb7-1fb5-4371-892f-96249005255a\tPset_FlowMovingDeviceFan.FractionOfMotorHeatToAirStream\tNUMBER\t\t237\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1f58766a-df5f-43fd-bb53-960c133d0e35\tPset_FlowMovingDeviceFan.ImpellerDiameter\tLENGTH\t\t237\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3f428838-8353-4b98-8d54-685af11717c0\tPset_FlowMovingDeviceFan.MotorPosition\tTEXT\t\t237\t1\tPEnum_FanMotorPosition\t1\n#\nGROUP\t238\tPset_FlowMovingDeviceFanCentrifugal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8178046f-4537-4b7d-846a-80f0156dad1a\tPset_FlowMovingDeviceFanCentrifugal.Arrangement\tTEXT\t\t238\t1\tPEnum_CentrifugalFanArrangement\t1\nPARAM\t6c60ccde-1ae3-402f-9272-461f2bae4f95\tPset_FlowMovingDeviceFanCentrifugal.DirectionOfRotation\tTEXT\t\t238\t1\tPEnum_CentrifugalFanRotation\t1\nPARAM\t3c4009e3-042f-4721-b9c9-d4f9398ef768\tPset_FlowMovingDeviceFanCentrifugal.DischargePosition\tTEXT\t\t238\t1\tPEnum_CentrifugalFanDischargePosition\t1\n#\nGROUP\t239\tPset_FlowMovingDevicePump\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5ae99c23-b67e-4be8-b1f0-cf402f2a6271\tPset_FlowMovingDevicePump.BaseType\tTEXT\t\t239\t1\tPEnum_PumpBaseType\t1\nPARAM\t75e6c2a8-14e2-40b8-9b24-2557a0f9a950\tPset_FlowMovingDevicePump.DriveConnectionType\tTEXT\t\t239\t1\tPEnum_PumpDriveConnectionType\t1\nPARAM\t0782cb57-417a-49c0-b790-2e6c919398cf\tPset_FlowMovingDevicePump.ImpellerDiameter\tLENGTH\t\t239\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t240\tPset_FlowSegmentDuctSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t98976b1c-476e-4f40-8fdb-75d1f41ba042\tPset_FlowSegmentDuctSegment.Color\tTEXT\t\t240\t1\tIfcLabel\t1\nPARAM\t75f995f8-781b-4b95-af6d-951635b7d563\tPset_FlowSegmentDuctSegment.HasLiner\tYESNO\t\t240\t1\tIfcBoolean\t1\nPARAM\t1ce212f1-fd70-490e-992d-47ea8fc67a91\tPset_FlowSegmentDuctSegment.InteriorRoughnessCoefficient\tLENGTH\t\t240\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0ff789c2-779e-4ff1-9d9c-238add60ef69\tPset_FlowSegmentDuctSegment.Length\tLENGTH\t\t240\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ted76ad9f-69e6-4674-803d-0fef9737be19\tPset_FlowSegmentDuctSegment.MaterialThickness\tLENGTH\t\t240\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t241\tPset_FlowSegmentPipeSegment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td95943a0-769f-45e2-a279-f91b53be635d\tPset_FlowSegmentPipeSegment.Color\tTEXT\t\t241\t1\tIfcLabel\t1\nPARAM\t6605c902-34ec-40ff-8dc4-79a626ca89d9\tPset_FlowSegmentPipeSegment.Gradient\tNUMBER\t\t241\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t3ac4a6ff-05a7-4f46-9123-2ac76975548a\tPset_FlowSegmentPipeSegment.InteriorRoughnessCoefficient\tLENGTH\t\t241\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8fe4dfdd-d739-4413-a63b-bf277059a44e\tPset_FlowSegmentPipeSegment.InvertElevation\tLENGTH\t\t241\t1\tIfcLengthMeasure\t1\nPARAM\t3cbaf1a8-fe4d-4cda-9971-bd6c3c0bbb52\tPset_FlowSegmentPipeSegment.Length\tLENGTH\t\t241\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t242\tPset_FlowStorageDeviceTank\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4ab87301-e0af-4316-b4c5-2849f97171e0\tPset_FlowStorageDeviceTank.HasLadder\tYESNO\t\t242\t1\tIfcBoolean\t1\nPARAM\t24c53a30-367e-4ca3-b79f-df61e81d244b\tPset_FlowStorageDeviceTank.HasVisualIndicator\tYESNO\t\t242\t1\tIfcBoolean\t1\nPARAM\t2469b872-24c0-4a4c-85ab-1fab8d82981b\tPset_FlowStorageDeviceTank.TankComposition\tTEXT\t\t242\t1\tPEnum_TankComposition\t1\n#\nGROUP\t243\tPset_FlowTerminalAirTerminal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7c391f45-4e72-4009-ae06-685edc001bcf\tPset_FlowTerminalAirTerminal.AirflowType\tTEXT\t\t243\t1\tPEnum_AirTerminalAirflowType\t1\nPARAM\tae0d835b-4320-427c-b7a4-f6df20fe5a43\tPset_FlowTerminalAirTerminal.Location\tTEXT\t\t243\t1\tPEnum_AirTerminalLocation\t1\n#\nGROUP\t244\tPset_FootingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t43b97312-26b0-4190-b668-d0c68f6ce88c\tPset_FootingCommon.LoadBearing\tYESNO\t\t244\t1\tIfcBoolean\t1\nPARAM\tbd842f00-d1e8-11e1-8000-00215ad4efdf\tPset_FootingCommon.Reference\tTEXT\t\t244\t1\tIfcIdentifier\t1\nPARAM\tadd19c59-b07f-4f5d-b87f-60e3bbe18ce0\tPset_FootingCommon.Status\tTEXT\t\t244\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t245\tPset_FurnitureTypeChair\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td096ff00-d1e8-11e1-8000-00215ad4efdf\tPset_FurnitureTypeChair.HighestSeatingHeight\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te0164800-d1e8-11e1-8000-00215ad4efdf\tPset_FurnitureTypeChair.LowestSeatingHeight\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcaa11e00-d1e8-11e1-8000-00215ad4efdf\tPset_FurnitureTypeChair.SeatingHeight\tLENGTH\t\t245\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t246\tPset_FurnitureTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te8aa7f83-795a-441e-bd72-bc8ec0f13ea2\tPset_FurnitureTypeCommon.Description\tTEXT\t\t246\t1\tIfcText\t1\nPARAM\t1fdd2f80-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeCommon.IsBuiltIn\tYESNO\t\t246\t1\tIfcBoolean\t1\nPARAM\t19e74e80-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeCommon.MainColor\tTEXT\t\t246\t1\tIfcLabel\t1\nPARAM\t118f1380-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeCommon.NominalDepth\tLENGTH\t\t246\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t00460700-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeCommon.NominalHeight\tLENGTH\t\t246\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t076d1500-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeCommon.NominalLength\tLENGTH\t\t246\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc67404c9-010c-4f04-a3d3-f31eb6a4d813\tPset_FurnitureTypeCommon.Reference\tTEXT\t\t246\t1\tIfcIdentifier\t1\nPARAM\t7334640e-af39-43b9-acb2-ae43ea34a47d\tPset_FurnitureTypeCommon.Status\tTEXT\t\t246\t1\tPEnum_ElementStatus\t1\nPARAM\tf7553580-d1e8-11e1-8000-00215ad4efdf\tPset_FurnitureTypeCommon.Style\tTEXT\t\t246\t1\tIfcLabel\t1\n#\nGROUP\t247\tPset_FurnitureTypeDesk\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2cfa1e80-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeDesk.WorksurfaceArea\tAREA\t\t247\t1\tIfcAreaMeasure\t1\n#\nGROUP\t248\tPset_FurnitureTypeFileCabinet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t38e5e080-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeFileCabinet.WithLock\tYESNO\t\t248\t1\tIfcBoolean\t1\n#\nGROUP\t249\tPset_FurnitureTypeTable\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4bf8b080-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeTable.NumberOfChairs\tINTEGER\t\t249\t1\tIfcInteger\t1\nPARAM\t469b6600-d1e9-11e1-8000-00215ad4efdf\tPset_FurnitureTypeTable.WorksurfaceArea\tAREA\t\t249\t1\tIfcAreaMeasure\t1\n#\nGROUP\t250\tPset_GasTerminalPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t21c84d28-9c1f-4659-89f6-ba96be133f51\tPset_GasTerminalPHistory.GasFlowRate\tNUMBER\t\t250\t1\tIfcReal\t1\n#\nGROUP\t251\tPset_GasTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td6978a7b-284e-44e1-af3f-ff008a25ada6\tPset_GasTerminalTypeCommon.GasFlowRateRange\tMULTILINETEXT\t\t251\t1\tPropertyBoundedValue\t1\n#\nGROUP\t252\tPset_GasTerminalTypeGasAppliance\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tba3bd0e3-6b4f-47e5-8efa-4dc41be2510b\tPset_GasTerminalTypeGasAppliance.FlueType\tTEXT\t\t252\t1\tPEnum_FlueType\t1\nPARAM\tde95b8f0-20da-42de-bef8-cc9d8b21bddf\tPset_GasTerminalTypeGasAppliance.GasApplianceType\tTEXT\t\t252\t1\tPEnum_GasApplianceType\t1\n#\nGROUP\t253\tPset_GasTerminalTypeGasBurner\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8bd695cd-418e-4fb3-8137-e846280ddd81\tPset_GasTerminalTypeGasBurner.GasBurnerType\tTEXT\t\t253\t1\tPEnum_GasBurnerType\t1\n#\nGROUP\t254\tPset_HeatExchangerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t70ed2380-d1e9-11e1-8000-00215ad4efdf\tPset_HeatExchangerTypeCommon.Arrangement\tTEXT\t\t254\t1\tPEnum_HeatExchangerArrangement\t1\nPARAM\t59ae3600-d1e9-11e1-8000-00215ad4efdf\tPset_HeatExchangerTypeCommon.Reference\tTEXT\t\t254\t1\tIfcIdentifier\t1\nPARAM\taafcf165-e874-4b40-b63f-b0967593d09c\tPset_HeatExchangerTypeCommon.ShellMaterial\tMULTILINETEXT\t\t254\t1\tIfcMaterial\t1\nPARAM\t5f0b8080-d1e9-11e1-8000-00215ad4efdf\tPset_HeatExchangerTypeCommon.Status\tTEXT\t\t254\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t255\tPset_HeatExchangerTypePlate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8a8e6b00-d1e9-11e1-8000-00215ad4efdf\tPset_HeatExchangerTypePlate.NumberOfPlates\tINTEGER\t\t255\t1\tIfcInteger\t1\n#\nGROUP\t256\tPset_HumidifierPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb2a1e457-ad11-489d-a5e5-2092a1797072\tPset_HumidifierPHistory.AirPressureDropCurve\tMULTILINETEXT\t\t256\t1\tPropertyTableValue\t1\nPARAM\t9843f080-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierPHistory.AtmosphericPressure\tMULTILINETEXT\t\t256\t1\tIfcTimeSeries\t1\nPARAM\ta7c33980-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierPHistory.SaturationEfficiency\tMULTILINETEXT\t\t256\t1\tIfcTimeSeries\t1\nPARAM\t1838efd6-0f99-4081-beed-5ff1d85dc278\tPset_HumidifierPHistory.SaturationEfficiencyCurve\tMULTILINETEXT\t\t256\t1\tPropertyTableValue\t1\n#\nGROUP\t257\tPset_HumidifierTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t11dbde80-d1ea-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.AirPressureDropCurve\tMULTILINETEXT\t\t257\t1\tPropertyTableValue\t1\nPARAM\tcaede900-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.Application\tTEXT\t\t257\t1\tPEnum_HumidifierApplication\t1\nPARAM\te953e480-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.InternalControl\tTEXT\t\t257\t1\tPEnum_HumidifierInternalControl\t1\nPARAM\te1944000-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.NominalAirFlowRate\tNUMBER\t\t257\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tdc36f580-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.NominalMoistureGain\tNUMBER\t\t257\t1\tIfcMassFlowRateMeasure\t1\nPARAM\tb3166500-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.Reference\tTEXT\t\t257\t1\tIfcIdentifier\t1\nPARAM\t02f52c00-d1ea-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.SaturationEfficiencyCurve\tMULTILINETEXT\t\t257\t1\tPropertyTableValue\t1\nPARAM\tb90c4600-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.Status\tTEXT\t\t257\t1\tPEnum_ElementStatus\t1\nPARAM\tfcff4b00-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.WaterRequirement\tNUMBER\t\t257\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\td6d9ab00-d1e9-11e1-8000-00215ad4efdf\tPset_HumidifierTypeCommon.Weight\tNUMBER\t\t257\t1\tIfcMassMeasure\t1\n#\nGROUP\t258\tPset_InterceptorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t697a4a00-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.CoverLength\tLENGTH\t\t258\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t71d28500-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.CoverWidth\tLENGTH\t\t258\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t59fb0100-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.InletConnectionSize\tLENGTH\t\t258\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t523b5c80-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.NominalBodyDepth\tLENGTH\t\t258\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t42bc1380-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.NominalBodyLength\tLENGTH\t\t258\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4a7bb800-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.NominalBodyWidth\tLENGTH\t\t258\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t62533c00-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.OutletConnectionSize\tLENGTH\t\t258\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2ae48f80-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.Reference\tTEXT\t\t258\t1\tIfcIdentifier\t1\nPARAM\t320b9d80-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.Status\tTEXT\t\t258\t1\tPEnum_ElementStatus\t1\nPARAM\t78f99300-d1ea-11e1-8000-00215ad4efdf\tPset_InterceptorTypeCommon.VentilatingPipeSize\tLENGTH\t\t258\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t259\tPset_JunctionBoxTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta34b5080-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.ClearDepth\tLENGTH\t\t259\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te60d2880-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.IP_Code\tTEXT\t\t259\t1\tIfcLabel\t1\nPARAM\tdf7eb100-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.IsExternal\tYESNO\t\t259\t1\tIfcBoolean\t1\nPARAM\tcece3b00-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.MountingType\tTEXT\t\t259\t1\tPEnum_JunctionBoxMountingType\t1\nPARAM\t9dee0600-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.NumberOfGangs\tINTEGER\t\t259\t1\tIfcInteger\t1\nPARAM\tbeb65b80-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.PlacingType\tTEXT\t\t259\t1\tPEnum_JunctionBoxPlacingType\t1\nPARAM\t87e04580-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.Reference\tTEXT\t\t259\t1\tIfcIdentifier\t1\nPARAM\tae9e7c00-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.ShapeType\tTEXT\t\t259\t1\tPEnum_JunctionBoxShapeType\t1\nPARAM\t8dd62680-d1ea-11e1-8000-00215ad4efdf\tPset_JunctionBoxTypeCommon.Status\tTEXT\t\t259\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t260\tPset_LampEmitterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t01de7fae-c762-4828-99fd-a2b596c40a7f\tPset_LampEmitterTypeCommon.ColorAppearance\tTEXT\t\t260\t1\tIfcLabel\t1\nPARAM\t4947bebc-313f-42d3-880e-d2b4c6d370af\tPset_LampEmitterTypeCommon.ColorRenderingIndex\tINTEGER\t\t260\t1\tIfcInteger\t1\nPARAM\t8ba2a3df-0ce1-4083-a20a-dccda64aec10\tPset_LampEmitterTypeCommon.ColorTemperature\tNUMBER\t\t260\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t4612709b-eb19-46e5-8d7b-39492ba5316f\tPset_LampEmitterTypeCommon.ContributedLuminousFlux\tNUMBER\t\t260\t1\tIfcLuminousFluxMeasure\t1\nPARAM\t36c21fa4-9f9d-4661-a3ad-4dee9f4ed6e0\tPset_LampEmitterTypeCommon.LampBallastType\tTEXT\t\t260\t1\tPEnum_LampBallastType\t1\nPARAM\tadb58c29-4394-4975-9b9e-2042ab4a7990\tPset_LampEmitterTypeCommon.LampCompensationType\tTEXT\t\t260\t1\tPEnum_LampCompensationType\t1\nPARAM\te9e6e29f-a447-4111-81fa-b763ec01dc08\tPset_LampEmitterTypeCommon.LampMaintenanceFactor\tNUMBER\t\t260\t1\tIfcReal\t1\nPARAM\ta33ebd7b-07e2-49a4-9025-d7c39e396b02\tPset_LampEmitterTypeCommon.LightEmitterNominalPower\tNUMBER\t\t260\t1\tIfcPowerMeasure\t1\nPARAM\t09e62eb4-9876-4b64-aa06-efe3c2679b00\tPset_LampEmitterTypeCommon.Spectrum\tMULTILINETEXT\t\t260\t1\tPropertyTableValue\t1\n#\nGROUP\t261\tPset_LampTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t41d7b180-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.ColorAppearance\tTEXT\t\t261\t1\tIfcLabel\t1\nPARAM\t5fa51680-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.ColorRenderingIndex\tINTEGER\t\t261\t1\tIfcInteger\t1\nPARAM\t59af3580-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.ColorTemperature\tNUMBER\t\t261\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t0fc64f80-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.ContributedLuminousFlux\tNUMBER\t\t261\t1\tIfcLuminousFluxMeasure\t1\nPARAM\t22d91f80-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.LampBallastType\tTEXT\t\t261\t1\tPEnum_LampBallastType\t1\nPARAM\t32f0ff00-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.LampCompensationType\tTEXT\t\t261\t1\tPEnum_LampCompensationType\t1\nPARAM\t1c4aa800-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.LampMaintenanceFactor\tNUMBER\t\t261\t1\tIfcReal\t1\nPARAM\t15bc3080-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.LightEmitterNominalPower\tNUMBER\t\t261\t1\tIfcPowerMeasure\t1\nPARAM\tf58c7180-d1ea-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.Reference\tTEXT\t\t261\t1\tIfcIdentifier\t1\nPARAM\t4b611980-d1eb-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.Spectrum\tMULTILINETEXT\t\t261\t1\tPropertyTableValue\t1\nPARAM\tfde4ac80-d1ea-11e1-8000-00215ad4efdf\tPset_LampTypeCommon.Status\tTEXT\t\t261\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t262\tPset_LandRegistration\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t73e91380-d1eb-11e1-8000-00215ad4efdf\tPset_LandRegistration.IsPermanentID\tYESNO\t\t262\t1\tIfcBoolean\t1\nPARAM\t6c296f00-d1eb-11e1-8000-00215ad4efdf\tPset_LandRegistration.LandID\tTEXT\t\t262\t1\tIfcIdentifier\t1\nPARAM\t7b102180-d1eb-11e1-8000-00215ad4efdf\tPset_LandRegistration.LandTitleID\tTEXT\t\t262\t1\tIfcIdentifier\t1\n#\nGROUP\t263\tPset_LightFixtureTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc13d416e-f166-40da-aa81-0a3e1ec5a9e1\tPset_LightFixtureTypeCommon.ArticleNumber\tMULTILINETEXT\t\t263\t1\tIfcClassificationReference\t1\nPARAM\taf83dd80-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.LightFixtureMountingType\tTEXT\t\t263\t1\tPEnum_LightFixtureMountingType\t1\nPARAM\tc5919e00-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.LightFixturePlacingType\tTEXT\t\t263\t1\tPEnum_LightFixturePlacingType\t1\nPARAM\td80bd780-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.MaintenanceFactor\tNUMBER\t\t263\t1\tIfcReal\t1\nPARAM\t456750b3-5575-49ae-920b-6626f5e090d9\tPset_LightFixtureTypeCommon.ManufacturersSpecificInformation\tTEXT\t\t263\t1\tIfcText\t1\nPARAM\tde01b880-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.MaximumPlenumSensibleLoad\tNUMBER\t\t263\t1\tIfcPowerMeasure\t1\nPARAM\te528c680-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.MaximumSpaceSensibleLoad\tNUMBER\t\t263\t1\tIfcPowerMeasure\t1\nPARAM\ta4c94880-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.NumberOfSources\tINTEGER\t\t263\t1\tIfcInteger\t1\nPARAM\t8ebb8800-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.Reference\tTEXT\t\t263\t1\tIfcIdentifier\t1\nPARAM\tea861100-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.SensibleLoadToRadiant\tNUMBER\t\t263\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t9549ff80-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.Status\tTEXT\t\t263\t1\tPEnum_ElementStatus\t1\nPARAM\taa269300-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeCommon.TotalWattage\tNUMBER\t\t263\t1\tIfcPowerMeasure\t1\n#\nGROUP\t264\tPset_LightFixtureTypeExitSign\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8ebc6501-7e86-486b-9336-d9a9b0b3f989\tPset_LightFixtureTypeExitSign.Addressablility\tTEXT\t\t264\t1\tPEnum_AddressabilityType\t1\nPARAM\td91142d9-838a-4b2e-847d-3608e246f57a\tPset_LightFixtureTypeExitSign.BackupSupplySystem\tTEXT\t\t264\t1\tPEnum_BackupSupplySystemType\t1\nPARAM\t024fb4cf-cd6d-4dde-99ef-282a0195d011\tPset_LightFixtureTypeExitSign.MinimumTextHeight\tNUMBER\t\t264\t1\tIfcPositiveLengthMeasure \t1\nPARAM\t84494f48-d8c9-4766-8149-0d443e30214c\tPset_LightFixtureTypeExitSign.PictogramEscapeDirection\tTEXT\t\t264\t1\tPEnum_PictogramEscapeDirectionType\t1\nPARAM\t02a836db-9993-40c5-b5ae-6e1419195783\tPset_LightFixtureTypeExitSign.SelfTestFunction\tTEXT\t\t264\t1\tPEnum_SelfTestType\t1\n#\nGROUP\t265\tPset_LightFixtureTypeSecurityLighting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t35a02400-d1ec-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeSecurityLighting.Addressablility\tTEXT\t\t265\t1\tPEnum_AddressabilityType\t1\nPARAM\t1a351900-d1ec-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeSecurityLighting.BackupSupplySystem\tTEXT\t\t265\t1\tPEnum_BackupSupplySystemType\t1\nPARAM\t05588580-d1ec-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeSecurityLighting.FixtureHeight\tLENGTH\t\t265\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t28833500-d1ec-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeSecurityLighting.PictogramEscapeDirection\tTEXT\t\t265\t1\tPEnum_PictogramEscapeDirectionType\t1\nPARAM\tf5d93c80-d1eb-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeSecurityLighting.SecurityLightingType\tTEXT\t\t265\t1\tPEnum_LightFixtureSecurityLightingType\t1\nPARAM\t0d182a00-d1ec-11e1-8000-00215ad4efdf\tPset_LightFixtureTypeSecurityLighting.SelfTestFunction\tTEXT\t\t265\t1\tPEnum_SelfTestType\t1\n#\nGROUP\t266\tPset_LightFixtureTypeThermal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t90cf7602-20b2-408d-9f61-3ba928a943be\tPset_LightFixtureTypeThermal.MaximumPlenumSensibleLoad\tNUMBER\t\t266\t1\tIfcPowerMeasure\t1\nPARAM\t439cdfea-7218-461e-b98c-b00535caad03\tPset_LightFixtureTypeThermal.MaximumSpaceSensibleLoad\tNUMBER\t\t266\t1\tIfcPowerMeasure\t1\nPARAM\tf69ab30e-17fb-4a14-b4b6-e257776d333c\tPset_LightFixtureTypeThermal.SensibleLoadToRadiant\tNUMBER\t\t266\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t267\tPset_ManufacturerOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4bade480-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerOccurrence.AcquisitionDate\tTEXT\t\t267\t1\tIfcDate\t1\nPARAM\t62543b80-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerOccurrence.AssemblyPlace\tTEXT\t\t267\t1\tPEnum_AssemblyPlace\t1\nPARAM\t510b2f00-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerOccurrence.BarCode\tTEXT\t\t267\t1\tIfcIdentifier\t1\nPARAM\t5c5e5a80-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerOccurrence.BatchReference\tTEXT\t\t267\t1\tIfcIdentifier\t1\nPARAM\t56687980-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerOccurrence.SerialNumber\tTEXT\t\t267\t1\tIfcIdentifier\t1\n#\nGROUP\t268\tPset_ManufacturerTypeInformation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e57dd00-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.ArticleNumber\tTEXT\t\t268\t1\tIfcIdentifier\t1\nPARAM\t9f203280-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.AssemblyPlace\tTEXT\t\t268\t1\tPEnum_AssemblyPlace\t1\nPARAM\t78fa9280-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.GlobalTradeItemNumber\tTEXT\t\t268\t1\tIfcIdentifier\t1\nPARAM\t929bda00-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.Manufacturer\tTEXT\t\t268\t1\tIfcLabel\t1\nPARAM\t8c0d6280-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.ModelLabel\tTEXT\t\t268\t1\tIfcLabel\t1\nPARAM\t84e65480-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.ModelReference\tTEXT\t\t268\t1\tIfcLabel\t1\nPARAM\t2efac6fc-d68e-4da9-aa76-bab7d055069e\tPset_ManufacturerTypeInformation.OperatingWeight\tNUMBER\t\t268\t1\tIfcMassMeasure\t1\nPARAM\t9891bb00-d1ec-11e1-8000-00215ad4efdf\tPset_ManufacturerTypeInformation.ProductionYear\tTEXT\t\t268\t1\tIfcLabel\t1\nPARAM\tb7170604-cdee-47ee-882f-14fa0ecca0b1\tPset_ManufacturerTypeInformation.ShippingWeight\tNUMBER\t\t268\t1\tIfcMassMeasure\t1\n#\nGROUP\t269\tPset_MaterialCombustion\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc7a82c80-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCombustion.CO2Content\tNUMBER\t\t269\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc1b24b80-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCombustion.COContent\tNUMBER\t\t269\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tbc550100-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCombustion.N20Content\tNUMBER\t\t269\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tb6f7b680-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCombustion.SpecificHeatCapacity\tNUMBER\t\t269\t1\tIfcSpecificHeatCapacityMeasure\t1\n#\nGROUP\t270\tPset_MaterialCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tddb5ed00-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCommon.MassDensity\tMASS_DENSITY\t\t270\t1\tIfcMassDensityMeasure\t1\nPARAM\td262c180-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCommon.MolecularWeight\tNUMBER\t\t270\t1\tIfcMolecularWeightMeasure\t1\nPARAM\td858a280-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialCommon.Porosity\tNUMBER\t\t270\t1\tIfcNormalisedRatioMeasure\t1\n#\nGROUP\t271\tPset_MaterialConcrete\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7573480-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialConcrete.AdmixturesDescription\tTEXT\t\t271\t1\tIfcText\t1\nPARAM\tea3a4580-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialConcrete.CompressiveStrength\tNUMBER\t\t271\t1\tIfcPressureMeasure\t1\nPARAM\tf0302680-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialConcrete.MaxAggregateSize\tLENGTH\t\t271\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t076f1400-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialConcrete.ProtectivePoreRatio\tNUMBER\t\t271\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t01793300-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialConcrete.WaterImpermeability\tTEXT\t\t271\t1\tIfcText\t1\nPARAM\tfcb47f00-d1ec-11e1-8000-00215ad4efdf\tPset_MaterialConcrete.Workability\tTEXT\t\t271\t1\tIfcText\t1\n#\nGROUP\t272\tPset_MaterialEnergy\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t34bbc200-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.GasPressure\tNUMBER\t\t272\t1\tIfcPressureMeasure\t1\nPARAM\t181f8a00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.MoistureCapacityThermalGradient\tNUMBER\t\t272\t1\tIfcReal\t1\nPARAM\t2f5e7780-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.SolarRefractionIndex\tNUMBER\t\t272\t1\tIfcReal\t1\nPARAM\t22da1f00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.SpecificHeatTemperatureDerivative\tNUMBER\t\t272\t1\tIfcReal\t1\nPARAM\t1e156b00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.ThermalConductivityTemperatureDerivative\tNUMBER\t\t272\t1\tIfcReal\t1\nPARAM\t1229a900-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.ViscosityTemperatureDerivative\tNUMBER\t\t272\t1\tIfcReal\t1\nPARAM\t28d00000-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialEnergy.VisibleRefractionIndex\tNUMBER\t\t272\t1\tIfcReal\t1\n#\nGROUP\t273\tPset_MaterialFuel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t44d3a180-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialFuel.CarbonContent\tNUMBER\t\t273\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t3eddc080-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialFuel.CombustionTemperature\tNUMBER\t\t273\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t4ef5a000-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialFuel.HigherHeatingValue\tNUMBER\t\t273\t1\tIfcHeatingValueMeasure\t1\nPARAM\t4a30ec00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialFuel.LowerHeatingValue\tNUMBER\t\t273\t1\tIfcHeatingValueMeasure\t1\n#\nGROUP\t274\tPset_MaterialHygroscopic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t63399d00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialHygroscopic.IsothermalMoistureCapacity\tNUMBER\t\t274\t1\tIfcIsothermalMoistureCapacityMeasure\t1\nPARAM\t5ddc5280-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialHygroscopic.LowerVaporResistanceFactor\tNUMBER\t\t274\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6c2a6e80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialHygroscopic.MoistureDiffusivity\tNUMBER\t\t274\t1\tIfcMoistureDiffusivityMeasure\t1\nPARAM\t59179e80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialHygroscopic.UpperVaporResistanceFactor\tNUMBER\t\t274\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t67fe5100-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialHygroscopic.VaporPermeability\tNUMBER\t\t274\t1\tIfcVaporPermeabilityMeasure\t1\n#\nGROUP\t275\tPset_MaterialMechanical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t764c6d00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialMechanical.DynamicViscosity\tNUMBER\t\t275\t1\tIfcDynamicViscosityMeasure\t1\nPARAM\t85331f80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialMechanical.PoissonRatio\tNUMBER\t\t275\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t806e6b80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialMechanical.ShearModulus\tNUMBER\t\t275\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t8b290080-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialMechanical.ThermalExpansionCoefficient\tNUMBER\t\t275\t1\tIfcThermalExpansionCoefficientMeasure\t1\nPARAM\t7b112100-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialMechanical.YoungModulus\tNUMBER\t\t275\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t276\tPset_MaterialOptical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc3304380-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.SolarReflectanceBack\tNUMBER\t\t276\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tc7f4f780-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.SolarReflectanceFront\tNUMBER\t\t276\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t9c720d00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.SolarTransmittance\tNUMBER\t\t276\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta72ca200-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.ThermalIrEmissivityBack\tNUMBER\t\t276\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tac89ec80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.ThermalIrEmissivityFront\tNUMBER\t\t276\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta1cf5780-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.ThermalIrTransmittance\tNUMBER\t\t276\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tb7448180-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.VisibleReflectanceBack\tNUMBER\t\t276\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tbd3a6280-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.VisibleReflectanceFront\tNUMBER\t\t276\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t954aff00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialOptical.VisibleTransmittance\tNUMBER\t\t276\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t277\tPset_MaterialSteel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te4912f80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.HardeningModule\tNUMBER\t\t277\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tefe45b00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.PlasticStrain\tNUMBER\t\t277\t1\tIfcPositiveRatioMeasure\t1\nPARAM\te9ee7a00-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.ProportionalStress\tNUMBER\t\t277\t1\tIfcPressureMeasure\t1\nPARAM\tf541a580-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.Relaxations\tMULTILINETEXT\t\t277\t1\tPropertyTableValue\t1\nPARAM\tdf33e500-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.UltimateStrain\tNUMBER\t\t277\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td9d69a80-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.UltimateStress\tNUMBER\t\t277\t1\tIfcPressureMeasure\t1\nPARAM\td3e0b980-d1ed-11e1-8000-00215ad4efdf\tPset_MaterialSteel.YieldStress\tNUMBER\t\t277\t1\tIfcPressureMeasure\t1\n#\nGROUP\t278\tPset_MaterialThermal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0be7fc80-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialThermal.BoilingPoint\tNUMBER\t\t278\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t11dddd80-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialThermal.FreezingPoint\tNUMBER\t\t278\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t07234880-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialThermal.SpecificHeatCapacity\tNUMBER\t\t278\t1\tIfcSpecificHeatCapacityMeasure\t1\nPARAM\t17d3be80-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialThermal.ThermalConductivity\tNUMBER\t\t278\t1\tIfcThermalConductivityMeasure\t1\n#\nGROUP\t279\tPset_MaterialWater\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t320d9c80-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.AcidityConcentration\tNUMBER\t\t279\t1\tIfcIonConcentrationMeasure\t1\nPARAM\t2cb05200-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.AlkalinityConcentration\tNUMBER\t\t279\t1\tIfcIonConcentrationMeasure\t1\nPARAM\t3afe6e00-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.DissolvedSolidsContent\tNUMBER\t\t279\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t27530780-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.Hardness\tNUMBER\t\t279\t1\tIfcIonConcentrationMeasure\t1\nPARAM\t3639ba00-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.ImpuritiesContent\tNUMBER\t\t279\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t215d2680-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.IsPotable\tYESNO\t\t279\t1\tIfcBoolean\t1\nPARAM\t3fc32200-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWater.PHLevel\tNUMBER\t\t279\t1\tIfcPHMeasure\t1\n#\nGROUP\t280\tPset_MaterialWood\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t54071f00-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.AppearanceGrade\tTEXT\t\t280\t1\tIfcLabel\t1\nPARAM\t6bdea300-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.DimensionalChangeCoefficient\tNUMBER\t\t280\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5f5a4a80-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.Layers\tINTEGER\t\t280\t1\tIfcInteger\t1\nPARAM\t59646980-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.Layup\tTEXT\t\t280\t1\tIfcLabel\t1\nPARAM\t67b28580-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.MoistureContent\tNUMBER\t\t280\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t63866800-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.Plies\tINTEGER\t\t280\t1\tIfcInteger\t1\nPARAM\t494c8a00-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.Species\tTEXT\t\t280\t1\tIfcLabel\t1\nPARAM\t4ea9d480-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.StrengthGrade\tTEXT\t\t280\t1\tIfcLabel\t1\nPARAM\t70a35700-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWood.ThicknessSwelling\tNUMBER\t\t280\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t281\tPset_MaterialWoodBasedBeam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7862fb80-d1ee-11e1-8000-00215ad4efdf\tPset_MaterialWoodBasedBeam.ApplicableStructuralDesignMethod\tTEXT\t\t281\t1\tIfcLabel\t1\nPARAM\te2154bab-c72b-4d76-8d6b-25351486c020\tPset_MaterialWoodBasedBeam.InPlane.BendingStrength\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t17105162-3bfa-4068-9ab3-094db158888b\tPset_MaterialWoodBasedBeam.InPlane.CompStrength\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t71353332-b257-4ccf-91ab-044a6b910523\tPset_MaterialWoodBasedBeam.InPlane.CompStrengthPerp\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\tdb9e5d32-9938-4f23-83af-1b286d7cc42f\tPset_MaterialWoodBasedBeam.InPlane.InstabilityFactors\tMULTILINETEXT\t\t281\t1\tPropertyTableValue\t1\nPARAM\t6818f3dd-ded5-4ba9-88c8-f42268fc3b87\tPset_MaterialWoodBasedBeam.InPlane.RaisedCompStrengthPerp\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t926e5acb-cb0c-4faf-b268-4b27d849344c\tPset_MaterialWoodBasedBeam.InPlane.ReferenceDepth\tLENGTH\t\t281\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t15f0bd0e-e32d-43ee-b7cd-c27ccb2f5adc\tPset_MaterialWoodBasedBeam.InPlane.ShearModulus\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t0b28be5d-26ca-4cea-851a-ce57e5c20079\tPset_MaterialWoodBasedBeam.InPlane.ShearModulusMin\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t2eb6ae33-f3e2-4793-94af-5a347eb0b344\tPset_MaterialWoodBasedBeam.InPlane.ShearStrength\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t8a52008e-1c1e-4473-a8db-72918bb790ba\tPset_MaterialWoodBasedBeam.InPlane.TensileStrength\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t2d23b14d-e914-44d6-aefb-5de7a2ce4ed1\tPset_MaterialWoodBasedBeam.InPlane.TensileStrengthPerp\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t4e453f1f-4a8f-4443-87e1-7a3733691c43\tPset_MaterialWoodBasedBeam.InPlane.TorsionalStrength\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t51595aaa-4ef9-451f-922c-b3f3919f8ed6\tPset_MaterialWoodBasedBeam.InPlane.YoungModulus\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tb769c009-8ca6-4de2-a248-df5f73e0765c\tPset_MaterialWoodBasedBeam.InPlane.YoungModulusMin\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t70c32845-ce7f-4354-bf71-cc4c997938b6\tPset_MaterialWoodBasedBeam.InPlane.YoungModulusPerp\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t2121a8f8-8707-424e-939b-8bedc151b517\tPset_MaterialWoodBasedBeam.InPlane.YoungModulusPerpMin\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t704e6f1e-14fb-4ee5-9bd1-5f094601cb4f\tPset_MaterialWoodBasedBeam.InPlaneNegative.BendingStrength\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\tdf75699e-c868-4ca0-a2a2-c16f968d5d51\tPset_MaterialWoodBasedBeam.InPlaneNegative.CompStrength\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\tda08a912-e97b-45da-9d72-994e9ee67ddd\tPset_MaterialWoodBasedBeam.InPlaneNegative.CompStrengthPerp\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t3bd36df2-ed28-4495-b355-e73a19074dbf\tPset_MaterialWoodBasedBeam.InPlaneNegative.InstabilityFactors\tMULTILINETEXT\t\t281\t1\tPropertyTableValue\t1\nPARAM\t04558612-ae3d-4334-b9bf-2c7f74267eee\tPset_MaterialWoodBasedBeam.InPlaneNegative.RaisedCompStrengthPerp\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t81a0158a-081d-4765-9b5c-8021e6c228af\tPset_MaterialWoodBasedBeam.InPlaneNegative.ReferenceDepth\tLENGTH\t\t281\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0f3b049f-4e8b-48fd-9312-b7f39e59b17c\tPset_MaterialWoodBasedBeam.InPlaneNegative.ShearModulus\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\ta6e1021b-4e7c-4eae-b5c8-f3b96ba657e1\tPset_MaterialWoodBasedBeam.InPlaneNegative.ShearModulusMin\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tab3d6544-689b-4906-9164-4ec088d57ea8\tPset_MaterialWoodBasedBeam.InPlaneNegative.ShearStrength\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\ta1df15d3-c9fc-4bc3-9c41-97d981790e3e\tPset_MaterialWoodBasedBeam.InPlaneNegative.TensileStrength\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t489c594a-866b-4c28-a6e7-8a15190078b1\tPset_MaterialWoodBasedBeam.InPlaneNegative.TensileStrengthPerp\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t222deef7-fb1a-4fb4-868b-955726ae85cb\tPset_MaterialWoodBasedBeam.InPlaneNegative.TorsionalStrength\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t6be76300-4a05-4e9c-b0fb-7aee753117d2\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulus\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t508173f2-3e4f-401d-8cb1-bf22fb8de49e\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusMin\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tfcf058dc-34f3-48b6-9b65-9f659be2607c\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusPerp\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\ta69354ab-832f-4925-9c83-71cf4a4d99b7\tPset_MaterialWoodBasedBeam.InPlaneNegative.YoungModulusPerpMin\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t308b1604-fa7f-4b11-ba71-175ab14f7ffb\tPset_MaterialWoodBasedBeam.OutOfPlane.BendingStrength\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t145228e6-a32b-41f5-8dd0-f484878707f4\tPset_MaterialWoodBasedBeam.OutOfPlane.CompStrength\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t1cb87d67-5af5-41d7-a93f-1c77709838cf\tPset_MaterialWoodBasedBeam.OutOfPlane.CompStrengthPerp\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t062a0680-fadb-4703-8bbb-24c8dc3af1f2\tPset_MaterialWoodBasedBeam.OutOfPlane.InstabilityFactors\tMULTILINETEXT\t\t281\t1\tPropertyTableValue\t1\nPARAM\tdb2eea23-e9ad-40d7-b272-a6e5f4e73e9c\tPset_MaterialWoodBasedBeam.OutOfPlane.RaisedCompStrengthPerp\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\tae54995e-d551-4653-bab6-e506707d7a30\tPset_MaterialWoodBasedBeam.OutOfPlane.ReferenceDepth\tLENGTH\t\t281\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1015aaf1-4fc2-4835-b018-58dce54ba562\tPset_MaterialWoodBasedBeam.OutOfPlane.ShearModulus\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\te85aeb93-d81e-4875-a9a6-7f441e5bfb0a\tPset_MaterialWoodBasedBeam.OutOfPlane.ShearModulusMin\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t9767fd38-c5be-4d90-b761-93dbacb8174e\tPset_MaterialWoodBasedBeam.OutOfPlane.ShearStrength\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t7561e794-9158-42b6-a10e-7015c0cbcd6c\tPset_MaterialWoodBasedBeam.OutOfPlane.TensileStrength\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t7e0321f8-8aa7-4680-bc83-7db526890c02\tPset_MaterialWoodBasedBeam.OutOfPlane.TensileStrengthPerp\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\t1cfb8d02-520d-4c35-a6e0-80580465e624\tPset_MaterialWoodBasedBeam.OutOfPlane.TorsionalStrength\tNUMBER\t\t281\t1\tIfcPressureMeasure\t1\nPARAM\ta54647c6-6eb8-44e1-bcc9-54899f7d058a\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulus\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tca032110-df47-4660-b37c-b9c31013428d\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusMin\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t2b4ac3e3-a1f7-4d94-9081-f129fc33ab18\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusPerp\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tb46ebb31-a823-47a7-904f-8e13e7501e34\tPset_MaterialWoodBasedBeam.OutOfPlane.YoungModulusPerpMin\tNUMBER\t\t281\t1\tIfcModulusOfElasticityMeasure\t1\n#\nGROUP\t282\tPset_MaterialWoodBasedPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t75b4d600-d1ef-11e1-8000-00215ad4efdf\tPset_MaterialWoodBasedPanel.ApplicableStructuralDesignMethod\tTEXT\t\t282\t1\tIfcLabel\t1\nPARAM\tc3c9c431-7881-4262-ad28-abdc3d705f51\tPset_MaterialWoodBasedPanel.InPlane.BearingStrength\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\tf82b0dc8-ae43-409c-ae6a-caceaf171fb0\tPset_MaterialWoodBasedPanel.InPlane.BendingStrength\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t43cbe65a-8d5c-4a76-9b98-4d0da1ff6417\tPset_MaterialWoodBasedPanel.InPlane.CompressiveStrength\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t84e6e3df-603f-4f14-9a0f-2d18e7bd8443\tPset_MaterialWoodBasedPanel.InPlane.RaisedCompressiveStrength\tNUMBER\t\t282\t1\tIfcPressureMeasure\t1\nPARAM\t48b02192-a22a-4ebe-9108-903c05361ece\tPset_MaterialWoodBasedPanel.InPlane.ReferenceDepth\tLENGTH\t\t282\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4bd9c753-3884-422e-95e5-f0a14e6de99a\tPset_MaterialWoodBasedPanel.InPlane.ShearModulus\tNUMBER\t\t282\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t370ad6a1-4f83-48dd-a7f7-c1d8902fb274\tPset_MaterialWoodBasedPanel.InPlane.ShearStrength\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\taef7c8bc-d73e-434d-a20f-fcf00ed7babc\tPset_MaterialWoodBasedPanel.InPlane.TensileStrength\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\tf88795ab-f8e2-4e72-b93a-3f90f8c300ce\tPset_MaterialWoodBasedPanel.InPlane.YoungModulusBending\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t358fc454-3454-4169-ac1e-38cc58f61634\tPset_MaterialWoodBasedPanel.InPlane.YoungModulusCompression\tNUMBER\t\t282\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t2c404c72-a4b8-49f6-a69b-ce9d0f4f37fc\tPset_MaterialWoodBasedPanel.InPlane.YoungModulusTension\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t144dda8c-caf8-4972-806a-992577539696\tPset_MaterialWoodBasedPanel.OutOfPlane.BearingStrength\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\tf4028709-b945-4973-9621-1c0c70294fca\tPset_MaterialWoodBasedPanel.OutOfPlane.BendingStrength\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t2aec861c-2b6a-4d91-b195-92ab6f03296c\tPset_MaterialWoodBasedPanel.OutOfPlane.CompressiveStrength\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t9a6bd43d-e78c-4ac1-9a19-e9a963c9f95a\tPset_MaterialWoodBasedPanel.OutOfPlane.RaisedCompressiveStrength\tNUMBER\t\t282\t1\tIfcPressureMeasure\t1\nPARAM\tcac94447-840b-4eb7-ba13-f42234111fcc\tPset_MaterialWoodBasedPanel.OutOfPlane.ReferenceDepth\tLENGTH\t\t282\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t95065e16-2735-4f45-903f-0fd09b84b851\tPset_MaterialWoodBasedPanel.OutOfPlane.ShearModulus\tNUMBER\t\t282\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tddf4bd42-acbb-4e38-9441-691a2c19e8ea\tPset_MaterialWoodBasedPanel.OutOfPlane.ShearStrength\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t58fca2f8-7665-483a-942c-2629a28a4aeb\tPset_MaterialWoodBasedPanel.OutOfPlane.TensileStrength\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\tac7bb382-cae8-43d2-8247-37032f114b80\tPset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusBending\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t9d2f0e63-af8f-4371-8966-4aa28915e8d4\tPset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusCompression\tNUMBER\t\t282\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t6ab98e5d-6304-44aa-863f-a5eacb7aa2e3\tPset_MaterialWoodBasedPanel.OutOfPlane.YoungModulusTension\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t6c1f8790-7525-43e0-a1d6-e4ebf42fe435\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.BearingStrength\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t724f6921-b315-4083-935f-315208f9274b\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.BendingStrength\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\ta6afa724-25b2-48a9-bfa4-6b6ccfb73306\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.CompressiveStrength\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\tf46c6856-c20c-4cab-9d1c-ee76811b57f4\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.RaisedCompressiveStrength\tNUMBER\t\t282\t1\tIfcPressureMeasure\t1\nPARAM\tf73420bb-6184-40db-be11-46d9fb646fa0\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.ReferenceDepth\tLENGTH\t\t282\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf06cdc79-4544-45ce-9322-42432067a3b8\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.ShearModulus\tNUMBER\t\t282\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\t4a403dcf-501d-4e78-b5ce-e728c2b6a0b6\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.ShearStrength\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\ta4bd6014-998d-4700-92b4-d2b6dd5aeeb9\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.TensileStrength\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t94babf4d-76de-4389-be6c-7ead799975f8\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusBending\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\nPARAM\t1e830245-635c-4ba9-b264-1fbfb34f21c6\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusCompression\tNUMBER\t\t282\t1\tIfcModulusOfElasticityMeasure\t1\nPARAM\tb19610ec-1ce0-406e-8fa9-2fd04ee8e882\tPset_MaterialWoodBasedPanel.OutOfPlaneNegative.YoungModulusTension\tMULTILINETEXT\t\t282\t1\tPropertyTableValue\t1\n#\nGROUP\t283\tPset_MechanicalFastenerAnchorBolt\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tca0c8580-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerAnchorBolt.AnchorBoltDiameter\tLENGTH\t\t283\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc37e0e00-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerAnchorBolt.AnchorBoltLength\tLENGTH\t\t283\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td8f33800-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerAnchorBolt.AnchorBoltProtrusionLength\tLENGTH\t\t283\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td1cc2a00-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerAnchorBolt.AnchorBoltThreadLength\tLENGTH\t\t283\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t284\tPset_MechanicalFastenerBolt\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tff18d800-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.HeadShape\tTEXT\t\t284\t1\tIfcLabel\t1\nPARAM\t05a74f80-d1f1-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.KeyShape\tTEXT\t\t284\t1\tIfcLabel\t1\nPARAM\tf45e4300-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.NutsCount\tINTEGER\t\t284\t1\tIfcCountMeasure\t1\nPARAM\t0b9d3080-d1f1-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.NutShape\tTEXT\t\t284\t1\tIfcLabel\t1\nPARAM\te7d9ea80-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.ThreadDiameter\tLENGTH\t\t284\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tee686200-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.ThreadLength\tLENGTH\t\t284\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfa542400-d1f0-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.WashersCount\tINTEGER\t\t284\t1\tIfcCountMeasure\t1\nPARAM\t1d7ed380-d1f1-11e1-8000-00215ad4efdf\tPset_MechanicalFastenerBolt.WasherShape\tTEXT\t\t284\t1\tIfcLabel\t1\n#\nGROUP\t285\tPset_MechanicalFastenerCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t482e19c8-276b-41ed-b957-d1de040e5e61\tPset_MechanicalFastenerCommon.NominalDiameter\tLENGTH\t\t285\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7de3f008-a07a-4194-ba6c-4bf07a65334e\tPset_MechanicalFastenerCommon.NominalLength\tLENGTH\t\t285\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t286\tPset_MedicalDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2a032c00-d1f1-11e1-8000-00215ad4efdf\tPset_MedicalDeviceTypeCommon.Reference\tTEXT\t\t286\t1\tIfcIdentifier\t1\nPARAM\t2ff90d00-d1f1-11e1-8000-00215ad4efdf\tPset_MedicalDeviceTypeCommon.Status\tTEXT\t\t286\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t287\tPset_MemberCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t80706a80-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.FireRating\tTEXT\t\t287\t1\tIfcLabel\t1\nPARAM\t6e8ec780-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.IsExternal\tYESNO\t\t287\t1\tIfcBoolean\t1\nPARAM\t7a7a8980-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.LoadBearing\tYESNO\t\t287\t1\tIfcBoolean\t1\nPARAM\t499a5480-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.Reference\tTEXT\t\t287\t1\tIfcIdentifier\t1\nPARAM\t69317d00-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.Roll\tNUMBER\t\t287\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t646cc900-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.Slope\tNUMBER\t\t287\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t5dde5180-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.Span\tLENGTH\t\t287\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4f903580-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.Status\tTEXT\t\t287\t1\tPEnum_ElementStatus\t1\nPARAM\t7484a880-d1f1-11e1-8000-00215ad4efdf\tPset_MemberCommon.ThermalTransmittance\tNUMBER\t\t287\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t288\tPset_MotorConnectionTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8c5c2c80-d1f1-11e1-8000-00215ad4efdf\tPset_MotorConnectionTypeCommon.Reference\tTEXT\t\t288\t1\tIfcIdentifier\t1\nPARAM\t92eaa400-d1f1-11e1-8000-00215ad4efdf\tPset_MotorConnectionTypeCommon.Status\tTEXT\t\t288\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t289\tPset_MultiStateInput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t06946206-f372-4270-bf63-d2ee539f364b\tPset_MultiStateInput.AlarmValues\tMULTILINETEXT\t\t289\t1\tPropertyListValue\t1\nPARAM\td57ee4b2-9ead-4f20-aed9-6a4076eff45c\tPset_MultiStateInput.EventEnable\tTEXT\t\t289\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\t3e46427b-9f2d-4d51-8c38-51ef898aad02\tPset_MultiStateInput.NotifyType\tTEXT\t\t289\t1\tPEnum_BACnetNotifyType\t1\nPARAM\t268c8786-f8c7-40d0-a202-fd5f0573ba62\tPset_MultiStateInput.NumberOfStates\tINTEGER\t\t289\t1\tIfcInteger\t1\nPARAM\t39b828fa-0532-4906-8f9a-7936b80f4719\tPset_MultiStateInput.StateText\tMULTILINETEXT\t\t289\t1\tPropertyListValue\t1\n#\nGROUP\t290\tPset_MultiStateOutput\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t82975ab4-bae6-47f7-b124-2c50ad8135b9\tPset_MultiStateOutput.AlarmValues\tMULTILINETEXT\t\t290\t1\tPropertyListValue\t1\nPARAM\t1e7f2c86-1462-4b30-9262-c359911fe603\tPset_MultiStateOutput.EventEnable\tTEXT\t\t290\t1\tPEnum_BACnetEventEnableType\t1\nPARAM\tf53a71ed-fe81-40dd-b12f-8e0e87de7781\tPset_MultiStateOutput.NotifyType\tTEXT\t\t290\t1\tPEnum_BACnetNotifyType\t1\nPARAM\t39232871-fc8b-4d48-881f-4e8584ca40db\tPset_MultiStateOutput.NumberOfStates\tINTEGER\t\t290\t1\tIfcInteger\t1\nPARAM\t2f892694-be57-42ce-af8b-e4e6606cb4e3\tPset_MultiStateOutput.StateText\tMULTILINETEXT\t\t290\t1\tPropertyListValue\t1\n#\nGROUP\t291\tPset_OpeningElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc0cfe880-d1f1-11e1-8000-00215ad4efdf\tPset_OpeningElementCommon.FireExit\tYESNO\t\t291\t1\tIfcBoolean\t1\nPARAM\t9bc90a19-6b9e-4d03-8ae3-1a4c88810da5\tPset_OpeningElementCommon.ParallelJambs\tNUMBER\t\t291\t1\tIfcBoolean \t1\nPARAM\tc7f6f680-d1f1-11e1-8000-00215ad4efdf\tPset_OpeningElementCommon.ProtectedOpening\tYESNO\t\t291\t1\tIfcBoolean\t1\nPARAM\tbada0780-d1f1-11e1-8000-00215ad4efdf\tPset_OpeningElementCommon.Purpose\tTEXT\t\t291\t1\tIfcLabel\t1\nPARAM\ta72ea100-d1f1-11e1-8000-00215ad4efdf\tPset_OpeningElementCommon.Reference\tTEXT\t\t291\t1\tIfcIdentifier\t1\nPARAM\tad248200-d1f1-11e1-8000-00215ad4efdf\tPset_OpeningElementCommon.Status\tTEXT\t\t291\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t292\tPset_OutletTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te826b580-d1f1-11e1-8000-00215ad4efdf\tPset_OutletTypeCommon.IsPluggableOutlet\tYESNO\t\t292\t1\tIfcLogical\t1\nPARAM\tf9dc44b0-33ee-47e8-adea-fbbbd20abdd8\tPset_OutletTypeCommon.NumberOfSockets\tINTEGER\t\t292\t1\tIfcInteger\t1\nPARAM\td34a2200-d1f1-11e1-8000-00215ad4efdf\tPset_OutletTypeCommon.Reference\tTEXT\t\t292\t1\tIfcIdentifier\t1\nPARAM\td9400300-d1f1-11e1-8000-00215ad4efdf\tPset_OutletTypeCommon.Status\tTEXT\t\t292\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t293\tPset_OutsideDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1c9a7180-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.BuildingThermalExposure\tTEXT\t\t293\t1\tPEnum_BuildingThermalExposure\t1\nPARAM\t0e4c5580-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.CoolingDesignDay\tTEXT\t\t293\t1\tIfcDateTime\t1\nPARAM\t0391c080-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.CoolingDryBulb\tNUMBER\t\t293\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t08ef0b00-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.CoolingWetBulb\tNUMBER\t\t293\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tfecd0c80-d1f1-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.HeatingDesignDay\tTEXT\t\t293\t1\tIfcDateTime\t1\nPARAM\tf2e14a80-d1f1-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.HeatingDryBulb\tNUMBER\t\t293\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tf8d72b80-d1f1-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.HeatingWetBulb\tNUMBER\t\t293\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t27ed9d00-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.PrevailingWindDirection\tNUMBER\t\t293\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t2d4ae780-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.PrevailingWindVelocity\tNUMBER\t\t293\t1\tIfcLinearVelocityMeasure\t1\nPARAM\t186e5400-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.WeatherDataDate\tTEXT\t\t293\t1\tIfcDateTime\t1\nPARAM\t13110980-d1f2-11e1-8000-00215ad4efdf\tPset_OutsideDesignCriteria.WeatherDataStation\tTEXT\t\t293\t1\tIfcText\t1\n#\nGROUP\t294\tPset_PackingInstructions\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4eabd380-d1f2-11e1-8000-00215ad4efdf\tPset_PackingInstructions.ContainerMaterial\tMULTILINETEXT\t\t294\t1\tIfcMaterialDefinition\t1\nPARAM\t3b990380-d1f2-11e1-8000-00215ad4efdf\tPset_PackingInstructions.PackingCareType\tTEXT\t\t294\t1\tPEnum_PackingCareType\t1\nPARAM\t510e2d80-d1f2-11e1-8000-00215ad4efdf\tPset_PackingInstructions.SpecialInstructions\tTEXT\t\t294\t1\tIfcText\t1\nPARAM\t4784c580-d1f2-11e1-8000-00215ad4efdf\tPset_PackingInstructions.WrappingMaterial\tMULTILINETEXT\t\t294\t1\tIfcMaterialDefinition\t1\n#\nGROUP\t295\tPset_Permit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t697e4800-d1f2-11e1-8000-00215ad4efdf\tPset_Permit.EndDate\tTEXT\t\t295\t1\tIfcDateTime\t1\nPARAM\t43a6cf5a-d886-4e33-8217-70fa5a15347a\tPset_Permit.EndTime\tMULTILINETEXT\t\t295\t1\tIfcLocalTime\t1\nPARAM\t5d928600-d1f2-11e1-8000-00215ad4efdf\tPset_Permit.EscortRequirement\tYESNO\t\t295\t1\tIfcBoolean\t1\nPARAM\tdf2e0f34-de56-465e-850e-b1e1310de043\tPset_Permit.PermitDuration\tMULTILINETEXT\t\t295\t1\tIfcDateAndTime\t1\nPARAM\tb127896a-f396-4a16-b9eb-fe2c725cd8c4\tPset_Permit.PermitType\tTEXT\t\t295\t1\tPEnum_PermitType\t1\nPARAM\t6e42fc00-d1f2-11e1-8000-00215ad4efdf\tPset_Permit.SpecialRequirements\tTEXT\t\t295\t1\tIfcText\t1\nPARAM\t63886700-d1f2-11e1-8000-00215ad4efdf\tPset_Permit.StartDate\tTEXT\t\t295\t1\tIfcDateTime\t1\nPARAM\t2b372648-093e-4c6b-a1e2-c6f00f238313\tPset_Permit.StartTime\tMULTILINETEXT\t\t295\t1\tIfcLocalTime\t1\n#\nGROUP\t296\tPset_PileCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t663726ee-008e-4db4-9b6f-7b26952a1fe9\tPset_PileCommon.LoadBearing\tYESNO\t\t296\t1\tIfcBoolean\t1\nPARAM\t7d29ae80-d1f2-11e1-8000-00215ad4efdf\tPset_PileCommon.Reference\tTEXT\t\t296\t1\tIfcIdentifier\t1\nPARAM\t40a25a64-62f8-480a-9c49-ccb5cd0aa752\tPset_PileCommon.Status\tTEXT\t\t296\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t297\tPset_PipeConnection\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbba28a8f-29ed-440b-b20c-64a204d13a01\tPset_PipeConnection.ConnectionType\tMULTILINETEXT\t\t297\t1\tPropertyListValue\t1\n#\nGROUP\t298\tPset_PipeConnectionFlanged\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc57ff80-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.BoltholePitch\tLENGTH\t\t298\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb6621e80-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.BoltSize\tLENGTH\t\t298\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9a5e7d00-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.BoreSize\tLENGTH\t\t298\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta21e2180-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.FlangeDiameter\tLENGTH\t\t298\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t93d00580-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.FlangeStandard\tTEXT\t\t298\t1\tIfcLabel\t1\nPARAM\t8c106100-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.FlangeTable\tTEXT\t\t298\t1\tIfcLabel\t1\nPARAM\ta9ddc600-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.FlangeThickness\tLENGTH\t\t298\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t47798065-7040-4ed8-9074-83ff1cdffabd\tPset_PipeConnectionFlanged.Material\tMULTILINETEXT\t\t298\t1\tIfcMaterial\t1\nPARAM\tb104d400-d1f2-11e1-8000-00215ad4efdf\tPset_PipeConnectionFlanged.NumberOfBoltholes\tINTEGER\t\t298\t1\tIfcInteger\t1\n#\nGROUP\t299\tPset_PipeFittingOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td0036600-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingOccurrence.Color\tTEXT\t\t299\t1\tIfcLabel\t1\nPARAM\tc974ee80-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingOccurrence.InteriorRoughnessCoefficient\tLENGTH\t\t299\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t300\tPset_PipeFittingPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te14c7280-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingPHistory.FlowrateLeakage\tMULTILINETEXT\t\t300\t1\tIfcTimeSeries\t1\nPARAM\tde518200-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingPHistory.LossCoefficient\tMULTILINETEXT\t\t300\t1\tIfcTimeSeries\t1\n#\nGROUP\t301\tPset_PipeFittingTypeBend\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ted383480-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeBend.BendAngle\tANGLE\t\t301\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\tf2957f00-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeBend.BendRadius\tLENGTH\t\t301\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t302\tPset_PipeFittingTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t72066fc3-6915-4683-9076-ee6a09bc4b8d\tPset_PipeFittingTypeCommon.EndStyleTreatment\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\nPARAM\t2d97b280-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeCommon.FittingLossFactor\tNUMBER\t\t302\t1\tIfcReal\t1\nPARAM\tc5a0ac18-b4a9-4baf-88c6-95f84e9cf21a\tPset_PipeFittingTypeCommon.InnerDiameter\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\nPARAM\t4d6922b9-5d84-43a3-92c7-d44126653abc\tPset_PipeFittingTypeCommon.Material\tMULTILINETEXT\t\t302\t1\tIfcMaterial\t1\nPARAM\t790c81c6-25be-4aee-9c02-d5841948679f\tPset_PipeFittingTypeCommon.NominalDiameter\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\nPARAM\tdaf417db-b39b-410e-9804-5a98cde3880b\tPset_PipeFittingTypeCommon.OuterDiameter\tMULTILINETEXT\t\t302\t1\tPropertyListValue\t1\nPARAM\t16f15b80-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeCommon.PressureClass\tNUMBER\t\t302\t1\tIfcPressureMeasure\t1\nPARAM\t1c4ea600-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeCommon.PressureRange\tMULTILINETEXT\t\t302\t1\tPropertyBoundedValue\t1\nPARAM\tffb26e00-d1f2-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeCommon.Reference\tTEXT\t\t302\t1\tIfcIdentifier\t1\nPARAM\t05a84f00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeCommon.Status\tTEXT\t\t302\t1\tPEnum_ElementStatus\t1\nPARAM\tcff0339e-4840-4052-9f66-58e2b5db41f1\tPset_PipeFittingTypeCommon.SubType\tTEXT\t\t302\t1\tIfcLabel\t1\nPARAM\t25d80e00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeCommon.TemperatureRange\tMULTILINETEXT\t\t302\t1\tPropertyBoundedValue\t1\nPARAM\t94a3dfd1-ab01-4f4c-a3cb-de1c4d59ed16\tPset_PipeFittingTypeCommon.UnitWeight\tNUMBER\t\t302\t1\tIfcMassMeasure\t1\n#\nGROUP\t303\tPset_PipeFittingTypeJunction\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4607cd00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeJunction.JunctionLeftAngle\tANGLE\t\t303\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t4acc8100-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeJunction.JunctionLeftRadius\tLENGTH\t\t303\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5324bc00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeJunction.JunctionRightAngle\tANGLE\t\t303\t1\tIfcPositivePlaneAngleMeasure\t1\nPARAM\t57e97000-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeJunction.JunctionRightRadius\tLENGTH\t\t303\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t39837480-d1f3-11e1-8000-00215ad4efdf\tPset_PipeFittingTypeJunction.JunctionType\tTEXT\t\t303\t1\tPEnum_PipeFittingJunctionType\t1\n#\nGROUP\t304\tPset_PipeSegmentOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c2d6d00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentOccurrence.Color\tTEXT\t\t304\t1\tIfcLabel\t1\nPARAM\t73547b00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentOccurrence.Gradient\tNUMBER\t\t304\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t659ef580-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentOccurrence.InteriorRoughnessCoefficient\tLENGTH\t\t304\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t794a5c00-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentOccurrence.InvertElevation\tLENGTH\t\t304\t1\tIfcLengthMeasure\t1\n#\nGROUP\t305\tPset_PipeSegmentPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t87987800-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentPHistory.FluidFlowLeakage\tMULTILINETEXT\t\t305\t1\tIfcTimeSeries\t1\nPARAM\t849d8780-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentPHistory.LeakageCurve\tMULTILINETEXT\t\t305\t1\tIfcTimeSeries\t1\n#\nGROUP\t306\tPset_PipeSegmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t050d69fe-9063-44c5-a9c7-cb88d3d3b222\tPset_PipeSegmentTypeCommon.EndStyleTreatment\tMULTILINETEXT\t\t306\t1\tPropertyListValue\t1\nPARAM\tc7f7f600-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.InnerDiameter\tLENGTH\t\t306\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t202b07d9-ff90-448b-9561-3ebdb5e5bcee\tPset_PipeSegmentTypeCommon.Material\tMULTILINETEXT\t\t306\t1\tIfcMaterial\t1\nPARAM\tc0385180-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.NominalDiameter\tLENGTH\t\t306\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcf1f0400-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.OuterDiameter\tLENGTH\t\t306\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tadbe1800-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.PressureRange\tMULTILINETEXT\t\t306\t1\tPropertyBoundedValue\t1\nPARAM\t9121e000-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.Reference\tTEXT\t\t306\t1\tIfcIdentifier\t1\nPARAM\t97b05780-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.Status\tTEXT\t\t306\t1\tPEnum_ElementStatus\t1\nPARAM\tb7e01680-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.TemperatureRange\tMULTILINETEXT\t\t306\t1\tPropertyBoundedValue\t1\nPARAM\t9bf0aff8-2547-4fea-a950-48d18310cb5a\tPset_PipeSegmentTypeCommon.UnitWeight\tNUMBER\t\t306\t1\tIfcMassMeasure\t1\nPARAM\ta72fa080-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCommon.WorkingPressure\tNUMBER\t\t306\t1\tIfcPressureMeasure\t1\n#\nGROUP\t307\tPset_PipeSegmentTypeCulvert\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te2ca6a80-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCulvert.ClearDepth\tLENGTH\t\t307\t1\tIfcLengthMeasure\t1\nPARAM\tdba35c80-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeCulvert.InternalWidth\tLENGTH\t\t307\t1\tIfcLengthMeasure\t1\n#\nGROUP\t308\tPset_PipeSegmentTypeGutter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf4137700-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeGutter.FlowRating\tNUMBER\t\t308\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\teeb62c80-d1f3-11e1-8000-00215ad4efdf\tPset_PipeSegmentTypeGutter.Slope\tNUMBER\t\t308\t1\tIfcPlaneAngleMeasure\t1\n#\nGROUP\t309\tPset_PlateCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t24f3ac00-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.AcousticRating\tTEXT\t\t309\t1\tIfcLabel\t1\nPARAM\t2c1aba00-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.FireRating\tTEXT\t\t309\t1\tIfcLabel\t1\nPARAM\t186f5380-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.IsExternal\tYESNO\t\t309\t1\tIfcBoolean\t1\nPARAM\t1e653480-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.LoadBearing\tYESNO\t\t309\t1\tIfcBoolean\t1\nPARAM\t02fa2980-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.Reference\tTEXT\t\t309\t1\tIfcIdentifier\t1\nPARAM\t08f00a80-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.Status\tTEXT\t\t309\t1\tPEnum_ElementStatus\t1\nPARAM\t31780480-d1f4-11e1-8000-00215ad4efdf\tPset_PlateCommon.ThermalTransmittance\tNUMBER\t\t309\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t310\tPset_PrecastConcreteElementFabrication\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t72701900-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.ActualErectionDate\tTEXT\t\t310\t1\tIfcDateTime\t1\nPARAM\t6dab6500-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.ActualProductionDate\tTEXT\t\t310\t1\tIfcDateTime\t1\nPARAM\t671ced80-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.AsBuiltLocationNumber\tTEXT\t\t310\t1\tIfcLabel\t1\nPARAM\t608e7600-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.PieceMark\tTEXT\t\t310\t1\tIfcLabel\t1\nPARAM\t4359a780-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.ProductionLotId\tTEXT\t\t310\t1\tIfcIdentifier\t1\nPARAM\t48b6f200-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.SerialNumber\tTEXT\t\t310\t1\tIfcIdentifier\t1\nPARAM\t3d63c680-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementFabrication.TypeDesignator\tTEXT\t\t310\t1\tIfcLabel\t1\n#\nGROUP\t311\tPset_PrecastConcreteElementGeneral\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t00e49a80-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.BatterAtEnd\tNUMBER\t\t311\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tfb875000-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.BatterAtStart\tNUMBER\t\t311\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tf6c29c00-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.CamberAtMidspan\tNUMBER\t\t311\t1\tIfcRatioMeasure\t1\nPARAM\taba88900-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.CornerChamfer\tLENGTH\t\t311\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t18238800-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.DesignLocationNumber\tTEXT\t\t311\t1\tIfcLabel\t1\nPARAM\t24c4fdd7-9785-4d8c-bb8a-4cba7939d3bc\tPset_PrecastConcreteElementGeneral.ElementGrossVolume\tVOLUME\t\t311\t1\tIfcVolumeMeasure\t1\nPARAM\t56c060ae-8bf5-4262-87f6-ea1a08edf7d3\tPset_PrecastConcreteElementGeneral.ElementNetVolume\tVOLUME\t\t311\t1\tIfcVolumeMeasure\t1\nPARAM\taf9aef6a-7ab6-4e99-9bf6-1088bc6b877b\tPset_PrecastConcreteElementGeneral.ElementWeight\tNUMBER\t\t311\t1\tIfcMassMeasure\t1\nPARAM\tbb27d200-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.FormStrippingStrength\tNUMBER\t\t311\t1\tIfcPressureMeasure\t1\nPARAM\tf0342480-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.HollowCorePlugging\tTEXT\t\t311\t1\tIfcLabel\t1\nPARAM\td5fa4680-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.InitialTension\tNUMBER\t\t311\t1\tIfcPressureMeasure\t1\nPARAM\tc1b64980-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.LiftingStrength\tNUMBER\t\t311\t1\tIfcPressureMeasure\t1\nPARAM\tb4995a80-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.ManufacturingToleranceClass\tTEXT\t\t311\t1\tIfcLabel\t1\nPARAM\tcf6bcf00-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.MinimumAllowableSupportLength\tLENGTH\t\t311\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t122da700-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.PieceMark\tTEXT\t\t311\t1\tIfcLabel\t1\nPARAM\t310248ab-f1a7-4743-b5ab-a8fe75b01e84\tPset_PrecastConcreteElementGeneral.ProductionLotId\tTEXT\t\t311\t1\tIfcIdentifier\t1\nPARAM\tc975ee00-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.ReleaseStrength\tNUMBER\t\t311\t1\tIfcPressureMeasure\t1\nPARAM\t38b2064d-7085-40c9-812b-206ea7dab388\tPset_PrecastConcreteElementGeneral.SerialNumber\tTEXT\t\t311\t1\tIfcIdentifier\t1\nPARAM\t0c37c600-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.Shortening\tNUMBER\t\t311\t1\tIfcRatioMeasure\t1\nPARAM\te7435300-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.SupportDuringTransportDescription\tTEXT\t\t311\t1\tIfcText\t1\nPARAM\ted393400-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.SupportDuringTransportDocReference\tMULTILINETEXT\t\t311\t1\tIfcExternalReference\t1\nPARAM\tdbf02780-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.TendonRelaxation\tNUMBER\t\t311\t1\tIfcPositiveRatioMeasure\t1\nPARAM\te14d7200-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.TransportationStrength\tNUMBER\t\t311\t1\tIfcPressureMeasure\t1\nPARAM\t06da7b80-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.Twisting\tNUMBER\t\t311\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t94699b80-d1f4-11e1-8000-00215ad4efdf\tPset_PrecastConcreteElementGeneral.TypeDesignator\tTEXT\t\t311\t1\tIfcLabel\t1\n#\nGROUP\t312\tPset_PrecastSlab\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4ef99e00-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.AngleBetweenComponentAxes\tNUMBER\t\t312\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t4a34ea00-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.AngleToFirstAxis\tNUMBER\t\t312\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t430ddc00-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.DistanceBetweenComponentAxes\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3c7f6480-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.EdgeDistanceToFirstAxis\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5456e880-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.NominalThickness\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5b7df680-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.NominalToppingThickness\tLENGTH\t\t312\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t36898380-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.ToppingType\tTEXT\t\t312\t1\tIfcLabel\t1\nPARAM\t2ffb0c00-d1f5-11e1-8000-00215ad4efdf\tPset_PrecastSlab.TypeDesignator\tTEXT\t\t312\t1\tIfcLabel\t1\n#\nGROUP\t313\tPset_ProductRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t66e384ca-d5a5-4927-b728-717c5093378c\tPset_ProductRequirements.Category\tTEXT\t\t313\t1\tIfcLabel\t1\nPARAM\t95b0c0ea-ca1c-4e31-993b-76c3e5ac4a91\tPset_ProductRequirements.Classification\tMULTILINETEXT\t\t313\t1\tIfcClassificationReference\t1\nPARAM\t07fefd08-bcc0-4ce5-8fb2-7855f71bcfbf\tPset_ProductRequirements.DemandImportanceValue\tTEXT\t\t313\t1\tIfcLabel\t1\nPARAM\t70f43e42-ea40-48e5-8b3a-8255536dcdca\tPset_ProductRequirements.DemandThresholdValue\tTEXT\t\t313\t1\tIfcLabel\t1\nPARAM\tb6b0fb82-6b6b-471b-a74e-aea02456a6c3\tPset_ProductRequirements.DemandValue\tTEXT\t\t313\t1\tIfcLabel\t1\nPARAM\t4be6415b-2ea1-4bee-b2f9-099c8f161a4b\tPset_ProductRequirements.GapValue\tTEXT\t\t313\t1\tIfcLabel\t1\nPARAM\t1224b4fc-efd5-4db7-b2d3-05654d4d1883\tPset_ProductRequirements.GapValueWeighted\tTEXT\t\t313\t1\tIfcLabel\t1\nPARAM\t22f51d81-5d8e-48c9-9be9-2dd8630e6391\tPset_ProductRequirements.GroupName\tTEXT\t\t313\t1\tIfcLabel\t1\nPARAM\t2cf45bdd-0879-46d4-b4ba-0d109d3f2fca\tPset_ProductRequirements.Name\tTEXT\t\t313\t1\tIfcLabel\t1\nPARAM\tc3713f2a-c757-40d8-aa9a-bc184db00e67\tPset_ProductRequirements.SupplyEvaluationValue\tTEXT\t\t313\t1\tIfcLabel\t1\n#\nGROUP\t314\tPset_ProfileArbitraryDoubleT\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t98e28400-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.FlangeBaseFillet\tLENGTH\t\t314\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t92540c80-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.FlangeChamfer\tLENGTH\t\t314\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t849e8700-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.FlangeDepth\tLENGTH\t\t314\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8cf6c200-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.FlangeDraft\tLENGTH\t\t314\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t9e3fce80-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.FlangeTopFillet\tLENGTH\t\t314\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t705a8a00-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.LeftFlangeWidth\tLENGTH\t\t314\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7e100f80-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.OverallDepth\tLENGTH\t\t314\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t69337c00-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.OverallWidth\tLENGTH\t\t314\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t77819800-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.RightFlangeWidth\tLENGTH\t\t314\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb0ba0800-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.StemBaseChamfer\tLENGTH\t\t314\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tbc0d3380-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.StemBaseFillet\tLENGTH\t\t314\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\ta39d1900-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.StemBaseWidth\tLENGTH\t\t314\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb6175280-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.StemTopChamfer\tLENGTH\t\t314\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tc0d1e780-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.StemTopFillet\tLENGTH\t\t314\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\taa2b9080-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryDoubleT.StemTopWidth\tLENGTH\t\t314\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t315\tPset_ProfileArbitraryHollowCore\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te959e180-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.BaseChamfer\tLENGTH\t\t315\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tfc6cb180-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.BottomCover\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t363db800-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CenterCoreBaseHeight\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4bb2e200-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CenterCoreBaseWidth\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3d64c600-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CenterCoreMiddleHeight\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2de57d00-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CenterCoreSpacing\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t448bd400-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CenterCoreTopHeight\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t53728680-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CenterCoreTopWidth\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0b536400-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CoreBaseHeight\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t202ff780-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CoreBaseWidth\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t11e1db80-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CoreMiddleHeight\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t042c5600-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CoreSpacing\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1908e980-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CoreTopHeight\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t26be6f00-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.CoreTopWidth\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdf37e300-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.DraftBaseOffset\tLENGTH\t\t315\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\te3fc9700-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.DraftSideOffset\tLENGTH\t\t315\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tda732f00-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.EdgeDraft\tLENGTH\t\t315\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tee1e9580-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.KeyDepth\tLENGTH\t\t315\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tf2e34980-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.KeyHeight\tLENGTH\t\t315\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tf7a7fd80-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.KeyOffset\tLENGTH\t\t315\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t5a999480-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.NumberOfCores\tINTEGER\t\t315\t1\tIfcCountMeasure\t1\nPARAM\td34c2100-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.OverallDepth\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tccbda980-d1f5-11e1-8000-00215ad4efdf\tPset_ProfileArbitraryHollowCore.OverallWidth\tLENGTH\t\t315\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t316\tPset_ProfileMechanical\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8a489c80-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.CentreOfGravityInX\tLENGTH\t\t316\t1\tIfcLengthMeasure\t1\nPARAM\t92084100-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.CentreOfGravityInY\tLENGTH\t\t316\t1\tIfcLengthMeasure\t1\nPARAM\t6ab17400-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.CrossSectionArea\tAREA\t\t316\t1\tIfcAreaMeasure\t1\nPARAM\t65ecc000-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MassPerLength\tNUMBER\t\t316\t1\tIfcMassPerLengthMeasure\t1\nPARAM\t80bf3480-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MaximumPlateThickness\tLENGTH\t\t316\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te14e7180-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MaximumSectionModulusY\tNUMBER\t\t316\t1\tIfcSectionModulusMeasure\t1\nPARAM\tf3301480-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MaximumSectionModulusZ\tNUMBER\t\t316\t1\tIfcSectionModulusMeasure\t1\nPARAM\t769d3600-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MinimumPlateThickness\tLENGTH\t\t316\t1\tIfcPositiveLengthMeasure\t1\nPARAM\teb707000-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MinimumSectionModulusY\tNUMBER\t\t316\t1\tIfcSectionModulusMeasure\t1\nPARAM\tf9be8c00-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MinimumSectionModulusZ\tNUMBER\t\t316\t1\tIfcSectionModulusMeasure\t1\nPARAM\ta5b3a780-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MomentOfInertiaY\tNUMBER\t\t316\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\tb532f080-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MomentOfInertiaYZ\tNUMBER\t\t316\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\tad734c00-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.MomentOfInertiaZ\tNUMBER\t\t316\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\t700ebe80-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.Perimeter\tLENGTH\t\t316\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1d81d200-d1f7-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.PlasticShapeFactorY\tNUMBER\t\t316\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t25417680-d1f7-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.PlasticShapeFactorZ\tNUMBER\t\t316\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t14910080-d1f7-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.ShearAreaY\tAREA\t\t316\t1\tIfcAreaMeasure\t1\nPARAM\t0ba02f00-d1f7-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.ShearAreaZ\tAREA\t\t316\t1\tIfcAreaMeasure\t1\nPARAM\t9fbdc680-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.ShearCentreY\tLENGTH\t\t316\t1\tIfcLengthMeasure\t1\nPARAM\t992f4f00-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.ShearCentreZ\tLENGTH\t\t316\t1\tIfcLengthMeasure\t1\nPARAM\td7c50980-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.ShearDeformationAreaY\tAREA\t\t316\t1\tIfcAreaMeasure\t1\nPARAM\td0056500-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.ShearDeformationAreaZ\tAREA\t\t316\t1\tIfcAreaMeasure\t1\nPARAM\tbd8b2b80-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.TorsionalConstantX\tNUMBER\t\t316\t1\tIfcMomentOfInertiaMeasure\t1\nPARAM\t0216c700-d1f7-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.TorsionalSectionModulus\tNUMBER\t\t316\t1\tIfcSectionModulusMeasure\t1\nPARAM\tc5e36680-d1f6-11e1-8000-00215ad4efdf\tPset_ProfileMechanical.WarpingConstant\tNUMBER\t\t316\t1\tIfcWarpingConstantMeasure\t1\n#\nGROUP\t317\tPset_ProjectCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tceb73d71-7154-49dd-8b10-8308bf2e80c9\tPset_ProjectCommon.BuildingPermitId\tTEXT\t\t317\t1\tIfcIdentifier\t1\nPARAM\t6c15781d-cf45-4228-ac7a-1679f66227fd\tPset_ProjectCommon.ConstructionMode\tTEXT\t\t317\t1\tIfcLabel\t1\nPARAM\tf13def40-9e89-48cb-82d8-587a338578a1\tPset_ProjectCommon.GrossAreaPlanned\tAREA\t\t317\t1\tIfcAreaMeasure\t1\n#\nGROUP\t318\tPset_ProjectionElementShadingDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9a9e8197-1098-4d3e-878d-915c477ad61d\tPset_ProjectionElementShadingDevice.Color\tTEXT\t\t318\t1\tIfcLabel\t1\n#\nGROUP\t319\tPset_ProjectionElementShadingDevicePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t33d852b7-3ccd-4a99-8bdc-403d555a9fb2\tPset_ProjectionElementShadingDevicePHistory.Azimuth\tTEXT\t\t319\t1\tIfcLabel\t1\nPARAM\t6397c3ef-fb25-4d65-ba93-0cc882a5d77c\tPset_ProjectionElementShadingDevicePHistory.TiltAngle\tNUMBER\t\t319\t1\tIfcReal\t1\n#\nGROUP\t320\tPset_ProjectionElementTypeShadingDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4aaec5cb-0ed1-4960-a869-b3417d1cae1e\tPset_ProjectionElementTypeShadingDevice.AverageSolarTransmittance\tNUMBER\t\t320\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1ea25fad-145a-4973-a243-11c3be2f0b82\tPset_ProjectionElementTypeShadingDevice.AverageVisibleTransmittance\tNUMBER\t\t320\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td13c8c5f-d9cc-4e7c-b75f-42a6beac7dd5\tPset_ProjectionElementTypeShadingDevice.Color\tTEXT\t\t320\t1\tIfcLabel\t1\nPARAM\t7a329628-4329-4dcb-9b37-4baf927f2c3a\tPset_ProjectionElementTypeShadingDevice.Material\tMULTILINETEXT\t\t320\t1\tIfcMaterial\t1\nPARAM\t36c56b6f-8e3a-4a0f-ba13-f5235305db0f\tPset_ProjectionElementTypeShadingDevice.Reflectance\tNUMBER\t\t320\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td1d74276-a136-457c-927b-e3d038a76d5b\tPset_ProjectionElementTypeShadingDevice.Roughness\tLENGTH\t\t320\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfa92caa7-a81c-4c51-b37d-aafa5a71aaac\tPset_ProjectionElementTypeShadingDevice.ShadingDeviceType\tTEXT\t\t320\t1\tPEnum_ProjectionElementShadingDeviceType\t1\nPARAM\t263c279e-df3e-4426-a641-b44f7732c928\tPset_ProjectionElementTypeShadingDevice.TiltRange\tMULTILINETEXT\t\t320\t1\tPropertyBoundedValue\t1\n#\nGROUP\t321\tPset_ProjectOrderChangeOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t42764500-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderChangeOrder.BudgetSource\tTEXT\t\t321\t1\tIfcText\t1\nPARAM\t6c48b958-8e1d-4173-bfb0-8b9877cabe66\tPset_ProjectOrderChangeOrder.ChangeDescription\tTEXT\t\t321\t1\tIfcText\t1\nPARAM\t38ecdd00-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderChangeOrder.ReasonForChange\tTEXT\t\t321\t1\tIfcText\t1\n#\nGROUP\t322\tPset_ProjectOrderMaintenanceWorkOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t65085e00-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.ContractualType\tTEXT\t\t322\t1\tIfcText\t1\nPARAM\t93863900-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.FaultPriorityType\tTEXT\t\t322\t1\tPEnum_PriorityType\t1\nPARAM\t6e91c600-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.IfNotAccomplished\tTEXT\t\t322\t1\tIfcText\t1\nPARAM\ta8fb6300-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.LocationPriorityType\tTEXT\t\t322\t1\tPEnum_PriorityType\t1\nPARAM\t8c86df8b-e29f-404d-9098-6da680baf4b7\tPset_ProjectOrderMaintenanceWorkOrder.LongJobDescription\tTEXT\t\t322\t1\tIfcText\t1\nPARAM\t781b2e00-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.MaintenaceType\tTEXT\t\t322\t1\tPEnum_MaintenanceType\t1\nPARAM\t53bf5180-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.ProductDescription\tTEXT\t\t322\t1\tIfcText\t1\nPARAM\tbfa1ba00-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.ScheduledFrequency\tNUMBER\t\t322\t1\tIfcTimeMeasure\t1\nPARAM\teb8d31dd-52c3-4378-8791-8d86d0fef601\tPset_ProjectOrderMaintenanceWorkOrder.ShortJobDescription\tTEXT\t\t322\t1\tIfcText\t1\nPARAM\t5c178c80-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMaintenanceWorkOrder.WorkTypeRequested\tTEXT\t\t322\t1\tIfcText\t1\n#\nGROUP\t323\tPset_ProjectOrderMoveOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t10c2a97f-e5f5-452c-934b-c8b0e868adb6\tPset_ProjectOrderMoveOrder.MoveDescription\tTEXT\t\t323\t1\tIfcText\t1\nPARAM\tcfb99980-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderMoveOrder.SpecialInstructions\tTEXT\t\t323\t1\tIfcText\t1\n#\nGROUP\t324\tPset_ProjectOrderPurchaseOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te3650000-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderPurchaseOrder.IsFOB\tYESNO\t\t324\t1\tIfcBoolean\t1\nPARAM\tebbd3b00-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderPurchaseOrder.ShipMethod\tTEXT\t\t324\t1\tIfcText\t1\n#\nGROUP\t325\tPset_ProjectOrderWorkOrder\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0f808100-d1f8-11e1-8000-00215ad4efdf\tPset_ProjectOrderWorkOrder.ContractualType\tTEXT\t\t325\t1\tIfcText\t1\nPARAM\t18715280-d1f8-11e1-8000-00215ad4efdf\tPset_ProjectOrderWorkOrder.IfNotAccomplished\tTEXT\t\t325\t1\tIfcText\t1\nPARAM\tfc0770e3-db46-4761-8824-b468395bcf3d\tPset_ProjectOrderWorkOrder.LongJobDescription\tTEXT\t\t325\t1\tIfcText\t1\nPARAM\tfe377480-d1f7-11e1-8000-00215ad4efdf\tPset_ProjectOrderWorkOrder.ProductDescription\tTEXT\t\t325\t1\tIfcText\t1\nPARAM\t42dfe791-a84c-4b84-84ae-8883359b84bd\tPset_ProjectOrderWorkOrder.ShortJobDescription\tTEXT\t\t325\t1\tIfcText\t1\nPARAM\t07284600-d1f8-11e1-8000-00215ad4efdf\tPset_ProjectOrderWorkOrder.WorkTypeRequested\tTEXT\t\t325\t1\tIfcText\t1\n#\nGROUP\t326\tPset_PropertyAgreement\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2c1cb900-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.AgreementType\tTEXT\t\t326\t1\tPEnum_PropertyAgreementType\t1\nPARAM\t6e45fa80-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.CommencementDate\tTEXT\t\t326\t1\tIfcDate\t1\nPARAM\t90d81380-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.ConditionCommencement\tTEXT\t\t326\t1\tIfcText\t1\nPARAM\ta0575c80-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.ConditionTermination\tTEXT\t\t326\t1\tIfcText\t1\nPARAM\t80279d80-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.Duration\tTEXT\t\t326\t1\tIfcDuration\t1\nPARAM\t46569700-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.Identifier\tTEXT\t\t326\t1\tIfcIdentifier\t1\nPARAM\t87e74200-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.Options\tTEXT\t\t326\t1\tIfcText\t1\nPARAM\t638b6580-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.PropertyName\tTEXT\t\t326\t1\tIfcLabel\t1\nPARAM\t9a617b80-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.Restrictions\tTEXT\t\t326\t1\tIfcText\t1\nPARAM\t7736cc00-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.TerminationDate\tTEXT\t\t326\t1\tIfcDate\t1\nPARAM\t50789580-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.Version\tTEXT\t\t326\t1\tIfcLabel\t1\nPARAM\t5b332a80-d1f8-11e1-8000-00215ad4efdf\tPset_PropertyAgreement.VersionDate\tTEXT\t\t326\t1\tIfcDate\t1\n#\nGROUP\t327\tPset_ProtectiveDeviceBreakerUnitI2TCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td98fcc80-d1f8-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitI2TCurve.BreakerUnitCurve\tMULTILINETEXT\t\t327\t1\tPropertyTableValue\t1\nPARAM\td09efb00-d1f8-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitI2TCurve.NominalCurrent\tNUMBER\t\t327\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tb6651d00-d1f8-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitI2TCurve.VoltageLevel\tTEXT\t\t327\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t328\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2673a300-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve.BreakerUnitFuseBreakingingCurve\tMULTILINETEXT\t\t328\t1\tPropertyTableValue\t1\nPARAM\t152a9680-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve.BreakerUnitFuseMeltingCurve\tMULTILINETEXT\t\t328\t1\tPropertyTableValue\t1\nPARAM\tf75d3180-d1f8-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitI2TFuseCurve.VoltageLevel\tTEXT\t\t328\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t329\tPset_ProtectiveDeviceBreakerUnitIPICurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t68044e00-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitIPICurve.BreakerUnitIPICurve\tMULTILINETEXT\t\t329\t1\tPropertyTableValue\t1\nPARAM\t5fac1300-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitIPICurve.NominalCurrent\tNUMBER\t\t329\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t3d19fa00-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitIPICurve.VoltageLevel\tTEXT\t\t329\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t330\tPset_ProtectiveDeviceBreakerUnitTypeMCB\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc9c4b800-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICN60898\tNUMBER\t\t330\t1\tIfcElectricCurrentMeasure\t1\nPARAM\td2b58980-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICS60898\tNUMBER\t\t330\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tc0d3e680-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICS60947\tNUMBER\t\t330\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tb6b1e800-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.ICU60947\tNUMBER\t\t330\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tae59ad00-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.NominalCurrents\tMULTILINETEXT\t\t330\t1\tPropertyListValue\t1\nPARAM\t84a08600-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.PowerLoss\tNUMBER\t\t330\t1\tIfcPowerMeasure\t1\nPARAM\t8ec28480-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMCB.VoltageLevel\tTEXT\t\t330\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t331\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1a3c1580-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICM60947\tNUMBER\t\t331\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t0f818080-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICS60947\tNUMBER\t\t331\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t098b9f80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICU60947\tNUMBER\t\t331\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t14decb00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.ICW60947\tNUMBER\t\t331\t1\tIfcElectricCurrentMeasure\t1\nPARAM\te365ff80-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.PerformanceClasses\tMULTILINETEXT\t\t331\t1\tPropertyListValue\t1\nPARAM\tecef6780-d1f9-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceBreakerUnitTypeMotorProtection.VoltageLevel\tTEXT\t\t331\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t332\tPset_ProtectiveDeviceOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf0e1b994-3900-433a-8bb2-e462694b55d1\tPset_ProtectiveDeviceOccurrence.GroundFaultCurrentSetValue\tNUMBER\t\t332\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t8a30c271-7469-4aa7-8319-e83f13deaf14\tPset_ProtectiveDeviceOccurrence.GroundFaultFunction\tYESNO\t\t332\t1\tIfcBoolean\t1\nPARAM\t01151008-7b3e-484a-a631-627e3ef99db0\tPset_ProtectiveDeviceOccurrence.GroundFaulti2tFunction\tYESNO\t\t332\t1\tIfcBoolean\t1\nPARAM\t5a52482a-0258-465f-a47c-c512a46703f1\tPset_ProtectiveDeviceOccurrence.GroundFaultTrippingTime\tNUMBER\t\t332\t1\tIfcTimeMeasure\t1\nPARAM\t3be6cdde-9842-42b0-a0d6-4478bc12607e\tPset_ProtectiveDeviceOccurrence.InstantaneousCurrentSetValue\tNUMBER\t\t332\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t976a7956-1417-4914-adcd-03a1ce7bdf3e\tPset_ProtectiveDeviceOccurrence.InstantaneousTrippingTime\tNUMBER\t\t332\t1\tIfcTimeMeasure\t1\nPARAM\t4bc3d721-5dac-42f8-ad3e-069dc2559ee2\tPset_ProtectiveDeviceOccurrence.LongTimeCurrentSetValue\tNUMBER\t\t332\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tf0250a29-337f-4364-acb3-be5daa02add0\tPset_ProtectiveDeviceOccurrence.LongTimeDelay\tNUMBER\t\t332\t1\tIfcTimeMeasure\t1\nPARAM\tf9250bdd-70df-4cbf-af6a-d72d26170202\tPset_ProtectiveDeviceOccurrence.LongTimeFunction\tYESNO\t\t332\t1\tIfcBoolean\t1\nPARAM\ta4234ac0-9e04-4d25-883b-1529e5898574\tPset_ProtectiveDeviceOccurrence.PoleUsage\tTEXT\t\t332\t1\tPEnum_PoleUsage\t1\nPARAM\t70aaff91-61f9-49ee-b5bc-5517d4044d3e\tPset_ProtectiveDeviceOccurrence.ShortTimeCurrentSetValue\tNUMBER\t\t332\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t337c40a4-98c5-4e4b-aa54-a444cf4790ea\tPset_ProtectiveDeviceOccurrence.ShortTimeFunction\tYESNO\t\t332\t1\tIfcBoolean\t1\nPARAM\tab1a66c0-9b66-4bc3-9fab-a566d40fc3f6\tPset_ProtectiveDeviceOccurrence.ShortTimei2tFunction\tYESNO\t\t332\t1\tIfcBoolean\t1\nPARAM\t74cb82ee-d6ff-4aae-9f88-fe5222059167\tPset_ProtectiveDeviceOccurrence.ShortTimeTrippingTime\tNUMBER\t\t332\t1\tIfcTimeMeasure\t1\n#\nGROUP\t333\tPset_ProtectiveDeviceTrippingCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3049d600-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingCurve.TrippingCurve\tMULTILINETEXT\t\t333\t1\tPropertyTableValue\t1\nPARAM\t245e1400-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingCurve.TrippingCurveType\tTEXT\t\t333\t1\tPEnum_TrippingCurveType\t1\n#\nGROUP\t334\tPset_ProtectiveDeviceTrippingFunctionGCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t61c2a180-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.CurrentTolerance1\tNUMBER\t\t334\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6d15cd00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.CurrentTolerance2\tNUMBER\t\t334\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t671fec00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.CurrentToleranceLimit1\tNUMBER\t\t334\t1\tIfcTimeMeasure\t1\nPARAM\t51122b80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ExternalAdjusted\tYESNO\t\t334\t1\tIfcBoolean\t1\nPARAM\t73a44480-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.IsCurrentTolerancePositiveOnly\tYESNO\t\t334\t1\tIfcBoolean\t1\nPARAM\t42c40f80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.IsSelectable\tYESNO\t\t334\t1\tIfcBoolean\t1\nPARAM\t8ae33200-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.IsTimeTolerancePositiveOnly\tYESNO\t\t334\t1\tIfcBoolean\t1\nPARAM\t4a83b400-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.NominalCurrentAdjusted\tYESNO\t\t334\t1\tIfcBoolean\t1\nPARAM\t57080c80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrent\tNUMBER\t\t334\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t9c2c3e80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrentI2tEnd\tNUMBER\t\t334\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t9171a980-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseCurrentI2tStart\tNUMBER\t\t334\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t5bccc080-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTime\tNUMBER\t\t334\t1\tIfcTimeMeasure\t1\nPARAM\ta2221f80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTimeI2tEnd\tNUMBER\t\t334\t1\tIfcTimeMeasure\t1\nPARAM\t96cef400-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.ReleaseTimeI2tStart\tNUMBER\t\t334\t1\tIfcTimeMeasure\t1\nPARAM\t7a32bc00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.TimeTolerance1\tNUMBER\t\t334\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t84ed5100-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.TimeTolerance2\tNUMBER\t\t334\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t80289d00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionGCurve.TimeToleranceLimit1\tNUMBER\t\t334\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t335\tPset_ProtectiveDeviceTrippingFunctionICurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc7af2900-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.CurrentTolerance1\tNUMBER\t\t335\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td990cc00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.CurrentTolerance2\tNUMBER\t\t335\t1\tIfcPositiveRatioMeasure\t1\nPARAM\td0076400-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.CurrentToleranceLimit1\tNUMBER\t\t335\t1\tIfcTimeMeasure\t1\nPARAM\te2819d80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.IsCurrentTolerancePositiveOnly\tYESNO\t\t335\t1\tIfcBoolean\t1\nPARAM\ta3d271ad-1c7d-4743-92e5-ceb1ef243667\tPset_ProtectiveDeviceTrippingFunctionICurve.IsOffWhenSFunctionOn\tYESNO\t\t335\t1\tIfcBoolean\t1\nPARAM\tac441e00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.IsSelectable\tYESNO\t\t335\t1\tIfcBoolean\t1\nPARAM\tf9c08b00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.IsTimeTolerancePositiveOnly\tYESNO\t\t335\t1\tIfcBoolean\t1\nPARAM\tffb66c00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.MaxAdjustmentX_ICS\tNUMBER\t\t335\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tb239ff00-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.NominalCurrentAdjusted\tYESNO\t\t335\t1\tIfcBoolean\t1\nPARAM\tbc5bfd80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.ReleaseCurrent\tNUMBER\t\t335\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tc251de80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.ReleaseTime\tNUMBER\t\t335\t1\tIfcTimeMeasure\t1\nPARAM\te8777e80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.TimeTolerance1\tNUMBER\t\t335\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf3321380-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.TimeTolerance2\tNUMBER\t\t335\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tee6d5f80-d1fa-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionICurve.TimeToleranceLimit1\tNUMBER\t\t335\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t336\tPset_ProtectiveDeviceTrippingFunctionLCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0a710100-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.IsSelectable\tYESNO\t\t336\t1\tIfcBoolean\t1\nPARAM\t27a5cf80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerCurrent1\tNUMBER\t\t336\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t2eccdd80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerCurrent2\tNUMBER\t\t336\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t34c2be80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerTime1\tNUMBER\t\t336\t1\tIfcTimeMeasure\t1\nPARAM\t39877280-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.LowerTime2\tNUMBER\t\t336\t1\tIfcTimeMeasure\t1\nPARAM\t11980f00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperCurrent1\tNUMBER\t\t336\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t16f55980-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperCurrent2\tNUMBER\t\t336\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t1c52a400-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperTime1\tNUMBER\t\t336\t1\tIfcTimeMeasure\t1\nPARAM\t21afee80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionLCurve.UpperTime2\tNUMBER\t\t336\t1\tIfcTimeMeasure\t1\n#\nGROUP\t337\tPset_ProtectiveDeviceTrippingFunctionSCurve\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5a4fc800-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.CurrentTolerance1\tNUMBER\t\t337\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t66d42080-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.CurrentTolerance2\tNUMBER\t\t337\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5fad1280-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.CurrentToleranceLimit1\tNUMBER\t\t337\t1\tIfcTimeMeasure\t1\nPARAM\t6d629800-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsCurrentTolerancePositiveOnly\tYESNO\t\t337\t1\tIfcBoolean\t1\nPARAM\t8521329d-79b1-46be-b0fd-056df538df7f\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsOffWhenLfunctionOn\tYESNO\t\t337\t1\tIfcBoolean\t1\nPARAM\t4310da80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsSelectable\tYESNO\t\t337\t1\tIfcBoolean\t1\nPARAM\t85d2b280-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.IsTimeTolerancePositiveOnly\tYESNO\t\t337\t1\tIfcBoolean\t1\nPARAM\t4906bb80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.NominalCurrentAdjusted\tYESNO\t\t337\t1\tIfcBoolean\t1\nPARAM\t4f953300-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrent\tNUMBER\t\t337\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t97b45580-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrentI2tEnd\tNUMBER\t\t337\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t8c612a00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseCurrentI2tStart\tNUMBER\t\t337\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t54f27d80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTime\tNUMBER\t\t337\t1\tIfcTimeMeasure\t1\nPARAM\t9e42cd00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTimeI2tEnd\tNUMBER\t\t337\t1\tIfcTimeMeasure\t1\nPARAM\t92efa180-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.ReleaseTimeI2tStart\tNUMBER\t\t337\t1\tIfcTimeMeasure\t1\nPARAM\t7489a600-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.TimeTolerance1\tNUMBER\t\t337\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7fdcd180-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.TimeTolerance2\tNUMBER\t\t337\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t79e6f080-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingFunctionSCurve.TimeToleranceLimit1\tNUMBER\t\t337\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t338\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc4686d00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentDesignation\tTEXT\t\t338\t1\tIfcLabel\t1\nPARAM\tb0bd0680-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentRange\tMULTILINETEXT\t\t338\t1\tPropertyBoundedValue\t1\nPARAM\tb87cab00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentRangeStepValue\tNUMBER\t\t338\t1\tIfcElectricCurrentMeasure\t1\nPARAM\tbe728c00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentValues\tMULTILINETEXT\t\t338\t1\tPropertyListValue\t1\nPARAM\ta864cb80-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitCurrentAdjustment.AdjustmentValueType\tTEXT\t\t338\t1\tPEnum_AdjustmentValueType\t1\n#\nGROUP\t339\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te9f57680-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentDesignation\tTEXT\t\t339\t1\tIfcLabel\t1\nPARAM\td813d380-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentRange\tMULTILINETEXT\t\t339\t1\tPropertyBoundedValue\t1\nPARAM\tdfd37800-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentRangeStepValue\tNUMBER\t\t339\t1\tIfcTimeMeasure\t1\nPARAM\te530c280-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentValues\tMULTILINETEXT\t\t339\t1\tPropertyListValue\t1\nPARAM\tcfbb9880-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.AdjustmentValueType\tTEXT\t\t339\t1\tPEnum_AdjustmentValueType\t1\nPARAM\tf083ee00-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.CurrentForTimeDelay\tNUMBER\t\t339\t1\tIfcTimeMeasure\t1\nPARAM\tf548a200-d1fb-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTimeAdjustment.I2TApplicability\tTEXT\t\t339\t1\tPEnum_AdjustmentValueType\t1\n#\nGROUP\t340\tPset_ProtectiveDeviceTrippingUnitTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2c1eb800-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.AtexVerified\tYESNO\t\t340\t1\tIfcBoolean\t1\nPARAM\t393ba700-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.LimitingTerminalSize\tAREA\t\t340\t1\tIfcAreaMeasure\t1\nPARAM\t32149900-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.OldDevice\tYESNO\t\t340\t1\tIfcBoolean\t1\nPARAM\t085b7200-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.Reference\tTEXT\t\t340\t1\tIfcIdentifier\t1\nPARAM\t1f01c900-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.Standard\tTEXT\t\t340\t1\tIfcLabel\t1\nPARAM\t0e515300-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.Status\tTEXT\t\t340\t1\tPEnum_ElementStatus\t1\nPARAM\t25904080-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeCommon.UseInDiscrimination\tYESNO\t\t340\t1\tIfcBoolean\t1\n#\nGROUP\t341\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t84ee5080-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.CurveDesignation\tTEXT\t\t341\t1\tIfcLabel\t1\nPARAM\t68521880-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.DefinedTemperature\tNUMBER\t\t341\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t45bfff80-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.ElectroMagneticTrippingUnitType\tTEXT\t\t341\t1\tPEnum_ElectroMagneticTrippingUnitType\t1\nPARAM\t553f4880-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I1\tNUMBER\t\t341\t1\tIfcReal\t1\nPARAM\t5b352980-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I2\tNUMBER\t\t341\t1\tIfcReal\t1\nPARAM\t73a54400-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I4\tNUMBER\t\t341\t1\tIfcReal\t1\nPARAM\t799b2500-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.I5\tNUMBER\t\t341\t1\tIfcReal\t1\nPARAM\t60927400-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.T2\tNUMBER\t\t341\t1\tIfcTimeMeasure\t1\nPARAM\t80299c80-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.T5\tNUMBER\t\t341\t1\tIfcTimeMeasure\t1\nPARAM\t6ee09000-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic.TemperatureFactor\tNUMBER\t\t341\t1\tIfcRatioMeasure\t1\n#\nGROUP\t342\tPset_ProtectiveDeviceTrippingUnitTypeElectronic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t92a3d600-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.ElectronicTrippingUnitType\tTEXT\t\t342\t1\tPEnum_ElectronicTrippingUnitType\t1\nPARAM\ta94a2d00-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection\tYESNO\t\t342\t1\tIfcBoolean\t1\nPARAM\tb8c97600-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_100\tYESNO\t\t342\t1\tIfcBoolean\t1\nPARAM\tb0713b00-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_50\tYESNO\t\t342\t1\tIfcBoolean\t1\nPARAM\tbebf5700-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.N_Protection_Select\tYESNO\t\t342\t1\tIfcBoolean\t1\nPARAM\ta2231f00-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeElectronic.NominalCurrents\tMULTILINETEXT\t\t342\t1\tPropertyListValue\t1\n#\nGROUP\t343\tPset_ProtectiveDeviceTrippingUnitTypeResidualCurrent\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcb43af80-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeResidualCurrent.TrippingUnitReleaseCurrent\tTEXT\t\t343\t1\tPEnum_TrippingUnitReleaseCurrent\t1\n#\nGROUP\t344\tPset_ProtectiveDeviceTrippingUnitTypeThermal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0e058780-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.CurveDesignation\tTEXT\t\t344\t1\tIfcLabel\t1\nPARAM\t034af280-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.DefinedTemperature\tNUMBER\t\t344\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\tf29a7c80-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.I1\tNUMBER\t\t344\t1\tIfcReal\t1\nPARAM\tf8905d80-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.I2\tNUMBER\t\t344\t1\tIfcReal\t1\nPARAM\tfdeda800-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.T2\tNUMBER\t\t344\t1\tIfcTimeMeasure\t1\nPARAM\t0940d380-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.TemperatureFactor\tNUMBER\t\t344\t1\tIfcRatioMeasure\t1\nPARAM\te3b3ca00-d1fc-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTrippingUnitTypeThermal.ThermalTrippingUnitType\tTEXT\t\t344\t1\tPEnum_ThermalTrippingUnitType\t1\n#\nGROUP\t345\tPset_ProtectiveDeviceTypeCircuitBreaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t99591b9c-6800-4665-9039-f31820da59cf\tPset_ProtectiveDeviceTypeCircuitBreaker.CircuitBreakerType\tTEXT\t\t345\t1\tPEnum_CircuitBreakerType\t1\nPARAM\t47d68e00-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCircuitBreaker.ICM60947\tNUMBER\t\t345\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t3ab99f00-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCircuitBreaker.ICS60947\tNUMBER\t\t345\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t355c5480-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCircuitBreaker.ICU60947\tNUMBER\t\t345\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t40af8000-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCircuitBreaker.ICW60947\tNUMBER\t\t345\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t1bbb0d00-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCircuitBreaker.PerformanceClasses\tMULTILINETEXT\t\t345\t1\tPropertyListValue\t1\nPARAM\t22e21b00-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCircuitBreaker.VoltageLevel\tTEXT\t\t345\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t346\tPset_ProtectiveDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t197939f8-593d-43bf-a45b-1c4f1f7bf4c4\tPset_ProtectiveDeviceTypeCommon.CharacteristicTripCurve\tMULTILINETEXT\t\t346\t1\tPropertyTableValue\t1\nPARAM\t9798084c-6c22-4c0e-ad83-84c3bd0c4610\tPset_ProtectiveDeviceTypeCommon.CutOffCurrent\tNUMBER\t\t346\t1\t IfcElectricCurrentMeasure\t1\nPARAM\t155c0930-1322-498b-b22e-db6bf1c2c7af\tPset_ProtectiveDeviceTypeCommon.LimitingTerminalSize\tAREA\t\t346\t1\tIfcAreaMeasure\t1\nPARAM\te72023ae-3d5f-4532-9e32-cfe1608492fd\tPset_ProtectiveDeviceTypeCommon.MaximumRatedVoltage\tNUMBER\t\t346\t1\t IfcElectricVoltageMeasure\t1\nPARAM\t3b671b10-bed9-4d3c-87ad-28d7089f6d4d\tPset_ProtectiveDeviceTypeCommon.ProtectiveTagType\tTEXT\t\t346\t1\tIfcLabel\t1\nPARAM\tad4d52c3-ab62-4986-ac8f-2b0ebc5fd466\tPset_ProtectiveDeviceTypeCommon.RatedShortCircuitCurrent\tNUMBER\t\t346\t1\t IfcElectricCurrentMeasure\t1\nPARAM\t52912300-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCommon.Reference\tTEXT\t\t346\t1\tIfcIdentifier\t1\nPARAM\t5739d856-122b-4e68-a8c2-81a86f4ed166\tPset_ProtectiveDeviceTypeCommon.StandardUsed\tTEXT\t\t346\t1\tIfcLabel\t1\nPARAM\t58870400-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeCommon.Status\tTEXT\t\t346\t1\tPEnum_ElementStatus\t1\nPARAM\tef51a61a-e272-4684-8136-20ce6502bbe6\tPset_ProtectiveDeviceTypeCommon.SwitchingDuty\tINTEGER\t\t346\t1\tIfcInteger\t1\n#\nGROUP\t347\tPset_ProtectiveDeviceTypeEarthFailureDevice\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcfd1a78c-3987-490a-8efc-a74c82fbc125\tPset_ProtectiveDeviceTypeEarthFailureDevice.EarthFailureDeviceType\tTEXT\t\t347\t1\tPEnum_EarthFailureDeviceType\t1\nPARAM\t4d8448e2-8b3a-4ec8-967e-29005d4f630e\tPset_ProtectiveDeviceTypeEarthFailureDevice.Sensitivity\tNUMBER\t\t347\t1\t IfcElectricCurrentMeasure\t1\n#\nGROUP\t348\tPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td0552e80-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker.EarthFailureDeviceType\tTEXT\t\t348\t1\tPEnum_EarthFailureDeviceType\t1\nPARAM\te6fb8580-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker.Sensitivity\tNUMBER\t\t348\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t349\tPset_ProtectiveDeviceTypeFuseDisconnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf37fde00-d1fd-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeFuseDisconnector.FuseDisconnectorType\tTEXT\t\t349\t1\tPEnum_FuseDisconnectorType\t1\nPARAM\t3fcb1e00-d1fe-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeFuseDisconnector.IC60269\tNUMBER\t\t349\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t45c0ff00-d1fe-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeFuseDisconnector.PowerLoss\tNUMBER\t\t349\t1\tIfcPowerMeasure\t1\nPARAM\t2d50e480-d1fe-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeFuseDisconnector.VoltageLevel\tTEXT\t\t349\t1\tPEnum_VoltageLevels\t1\n#\nGROUP\t350\tPset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t52455780-d1fe-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker.Sensitivity\tNUMBER\t\t350\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t351\tPset_ProtectiveDeviceTypeResidualCurrentSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5f624680-d1fe-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeResidualCurrentSwitch.Sensitivity\tNUMBER\t\t351\t1\tIfcElectricCurrentMeasure\t1\n#\nGROUP\t352\tPset_ProtectiveDeviceTypeVaristor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6b4e0880-d1fe-11e1-8000-00215ad4efdf\tPset_ProtectiveDeviceTypeVaristor.VaristorType\tTEXT\t\t352\t1\tPEnum_VaristorType\t1\n#\nGROUP\t353\tPset_PumpOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8587e680-d1fe-11e1-8000-00215ad4efdf\tPset_PumpOccurrence.BaseType\tTEXT\t\t353\t1\tPEnum_PumpBaseType\t1\nPARAM\t92a4d580-d1fe-11e1-8000-00215ad4efdf\tPset_PumpOccurrence.DriveConnectionType\tTEXT\t\t353\t1\tPEnum_PumpDriveConnectionType\t1\nPARAM\t7dc84200-d1fe-11e1-8000-00215ad4efdf\tPset_PumpOccurrence.ImpellerDiameter\tLENGTH\t\t353\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t354\tPset_PumpPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb36d2b00-d1fe-11e1-8000-00215ad4efdf\tPset_PumpPHistory.Flowrate\tMULTILINETEXT\t\t354\t1\tIfcTimeSeries\t1\nPARAM\ta6503c00-d1fe-11e1-8000-00215ad4efdf\tPset_PumpPHistory.MechanicalEfficiency\tMULTILINETEXT\t\t354\t1\tIfcTimeSeries\t1\nPARAM\ta9e3c300-d1fe-11e1-8000-00215ad4efdf\tPset_PumpPHistory.OverallEfficiency\tMULTILINETEXT\t\t354\t1\tIfcTimeSeries\t1\nPARAM\tb6681b80-d1fe-11e1-8000-00215ad4efdf\tPset_PumpPHistory.Power\tMULTILINETEXT\t\t354\t1\tIfcTimeSeries\t1\nPARAM\tad774a00-d1fe-11e1-8000-00215ad4efdf\tPset_PumpPHistory.PressureRise\tMULTILINETEXT\t\t354\t1\tIfcTimeSeries\t1\nPARAM\tb0723a80-d1fe-11e1-8000-00215ad4efdf\tPset_PumpPHistory.RotationSpeed\tMULTILINETEXT\t\t354\t1\tIfcTimeSeries\t1\n#\nGROUP\t355\tPset_PumpTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t12eb9904-5fa1-4ccf-b894-348584a79236\tPset_PumpTypeCommon.CasingMaterial\tMULTILINETEXT\t\t355\t1\tIfcMaterial\t1\nPARAM\te6afba00-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.ConnectionSize\tLENGTH\t\t355\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td4ce1700-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.FlowRateRange\tMULTILINETEXT\t\t355\t1\tPropertyBoundedValue\t1\nPARAM\tdbf52500-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.FlowResistanceRange\tMULTILINETEXT\t\t355\t1\tPropertyBoundedValue\t1\nPARAM\t0e33eeaa-f9bc-4efd-99e0-535ace9c9559\tPset_PumpTypeCommon.ImpellerMaterial\tMULTILINETEXT\t\t355\t1\tIfcMaterial\t1\nPARAM\t6b45d691-f254-46e0-ab6e-63497beb877f\tPset_PumpTypeCommon.ImpellerSealMaterial\tMULTILINETEXT\t\t355\t1\tIfcMaterial\t1\nPARAM\tf5966c80-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.NetPositiveSuctionHead\tNUMBER\t\t355\t1\tIfcPressureMeasure\t1\nPARAM\tfb8c4d80-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.NominalRotationSpeed\tNUMBER\t\t355\t1\tIfcRotationalFrequencyMeasure\t1\nPARAM\tbff18380-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.Reference\tTEXT\t\t355\t1\tIfcIdentifier\t1\nPARAM\tc67ffb00-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.Status\tTEXT\t\t355\t1\tPEnum_ElementStatus\t1\nPARAM\tedd6c800-d1fe-11e1-8000-00215ad4efdf\tPset_PumpTypeCommon.TemperatureRange\tMULTILINETEXT\t\t355\t1\tPropertyBoundedValue\t1\n#\nGROUP\t356\tPset_QuantityTakeOff\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t046f362c-9e56-4d1e-bb4f-bca8648f1a7e\tPset_QuantityTakeOff.LayerQuantity.LocalContext\tTEXT\t\t356\t1\tIfcText\t1\nPARAM\t01fb1e2d-7932-4c2f-840a-3232ec2eac53\tPset_QuantityTakeOff.LayerQuantity.MaterialLayer\tTEXT\t\t356\t1\tIfcIdentifier\t1\nPARAM\t2449df65-b4a9-44e1-b632-9323f9abf258\tPset_QuantityTakeOff.LocalContext\tTEXT\t\t356\t1\tIfcText\t1\nPARAM\t1da7db4a-ad94-4467-8298-34e7d244f7ea\tPset_QuantityTakeOff.Reference\tTEXT\t\t356\t1\tIfcIdentifier\t1\n#\nGROUP\t357\tPset_RailingCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1fe82a00-d1ff-11e1-8000-00215ad4efdf\tPset_RailingCommon.Diameter\tLENGTH\t\t357\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1959b280-d1ff-11e1-8000-00215ad4efdf\tPset_RailingCommon.Height\tLENGTH\t\t357\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t270f3800-d1ff-11e1-8000-00215ad4efdf\tPset_RailingCommon.IsExternal\tYESNO\t\t357\t1\tIfcBoolean\t1\nPARAM\t06df7900-d1ff-11e1-8000-00215ad4efdf\tPset_RailingCommon.Reference\tTEXT\t\t357\t1\tIfcIdentifier\t1\nPARAM\t0d6df080-d1ff-11e1-8000-00215ad4efdf\tPset_RailingCommon.Status\tTEXT\t\t357\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t358\tPset_RampCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5b82f400-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.FireExit\tYESNO\t\t358\t1\tIfcBoolean\t1\nPARAM\t558d1300-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.FireRating\tTEXT\t\t358\t1\tIfcLabel\t1\nPARAM\t60e03e80-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.HandicapAccessible\tYESNO\t\t358\t1\tIfcBoolean\t1\nPARAM\t663d8900-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.HasNonSkidSurface\tYESNO\t\t358\t1\tIfcBoolean\t1\nPARAM\t502fc880-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.IsExternal\tYESNO\t\t358\t1\tIfcBoolean\t1\nPARAM\t761e9ee4-c875-4484-9c2a-57a17935596e\tPset_RampCommon.LoadBearing\tYESNO\t\t358\t1\tIfcBoolean\t1\nPARAM\t33939080-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.Reference\tTEXT\t\t358\t1\tIfcIdentifier\t1\nPARAM\t45753380-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.RequiredHeadroom\tLENGTH\t\t358\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4c03ab00-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.RequiredSlope\tNUMBER\t\t358\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t38f0db00-d1ff-11e1-8000-00215ad4efdf\tPset_RampCommon.Status\tTEXT\t\t358\t1\tPEnum_ElementStatus\t1\nPARAM\td656025e-d2cd-4245-98c8-b1b57aa9e3a0\tPset_RampCommon.ThermalTransmittance\tNUMBER\t\t358\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t359\tPset_RampFlightCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t566f48cd-afd5-4b54-82f1-c0387bee94fb\tPset_RampFlightCommon.ClearWidth\tLENGTH\t\t359\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t87ed2c28-1a19-44ef-8e39-ba59fe45f6fe\tPset_RampFlightCommon.CounterSlope\tNUMBER\t\t359\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t853c1b00-d1ff-11e1-8000-00215ad4efdf\tPset_RampFlightCommon.Headroom\tLENGTH\t\t359\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2421781d-cac5-4915-9d0c-f0a84a471b1a\tPset_RampFlightCommon.Reference\tTEXT\t\t359\t1\tIfcIdentifier\t1\nPARAM\t4894c521-4bf4-4a8f-b343-7a46abf60dce\tPset_RampFlightCommon.Slope\tNUMBER\t\t359\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t3d94d802-c6c2-4151-b449-da5f830c22c5\tPset_RampFlightCommon.Status\tTEXT\t\t359\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t360\tPset_ReinforcementBarCountOfIndependentFooting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta00e8f80-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarCountOfIndependentFooting.Description\tTEXT\t\t360\t1\tIfcText\t1\nPARAM\ta4d34380-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarCountOfIndependentFooting.Reference\tTEXT\t\t360\t1\tIfcLabel\t1\nPARAM\taac92480-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarCountOfIndependentFooting.XDirectionLowerBarCount\tINTEGER\t\t360\t1\tIfcInteger\t1\nPARAM\tb4528c80-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarCountOfIndependentFooting.XDirectionUpperBarCount\tINTEGER\t\t360\t1\tIfcInteger\t1\nPARAM\taf8dd880-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarCountOfIndependentFooting.YDirectionLowerBarCount\tINTEGER\t\t360\t1\tIfcInteger\t1\nPARAM\tb9174080-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarCountOfIndependentFooting.YDirectionUpperBarCount\tINTEGER\t\t360\t1\tIfcInteger\t1\n#\nGROUP\t361\tPset_ReinforcementBarPitchOfBeam\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc59b9900-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfBeam.Description\tTEXT\t\t361\t1\tIfcText\t1\nPARAM\tcb917a00-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfBeam.Reference\tTEXT\t\t361\t1\tIfcLabel\t1\nPARAM\td9df9600-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfBeam.SpacingBarPitch\tLENGTH\t\t361\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td3511e80-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfBeam.StirrupBarPitch\tLENGTH\t\t361\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t362\tPset_ReinforcementBarPitchOfColumn\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te82db200-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.Description\tTEXT\t\t362\t1\tIfcText\t1\nPARAM\t01366300-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.HoopBarPitch\tLENGTH\t\t362\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tecf26600-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.Reference\tTEXT\t\t362\t1\tIfcLabel\t1\nPARAM\tf54aa100-d1ff-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.ReinforcementBarType\tTEXT\t\t362\t1\tPEnum_ReinforcementBarType\t1\nPARAM\t085d7100-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.XDirectionTieHoopBarPitch\tLENGTH\t\t362\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t101d1580-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.XDirectionTieHoopCount\tINTEGER\t\t362\t1\tIfcInteger\t1\nPARAM\t14e1c980-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.YDirectionTieHoopBarPitch\tLENGTH\t\t362\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1ca16e00-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfColumn.YDirectionTieHoopCount\tINTEGER\t\t362\t1\tIfcInteger\t1\n#\nGROUP\t363\tPset_ReinforcementBarPitchOfContinuousFooting\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t39d63c80-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfContinuousFooting.CrossingLowerBarPitch\tLENGTH\t\t363\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t32169800-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfContinuousFooting.CrossingUpperBarPitch\tLENGTH\t\t363\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t25923f80-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfContinuousFooting.Description\tTEXT\t\t363\t1\tIfcText\t1\nPARAM\t2b882080-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfContinuousFooting.Reference\tTEXT\t\t363\t1\tIfcLabel\t1\n#\nGROUP\t364\tPset_ReinforcementBarPitchOfSlab\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48245880-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.Description\tTEXT\t\t364\t1\tIfcText\t1\nPARAM\t8de12100-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.LongInsideCenterLowerBarPitch\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5d998280-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.LongInsideCenterTopBarPitch\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t95a0c580-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.LongInsideEndLowerBarPitch\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t65f1bd80-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.LongInsideEndTopBarPitch\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8588e600-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.LongOutsideLowerBarPitch\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t55414780-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.LongOutsideTopBarPitch\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4eb2d000-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.Reference\tTEXT\t\t364\t1\tIfcLabel\t1\nPARAM\ta5200e80-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.ShortInsideCenterLowerBarPitch\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t75710680-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.ShortInsideCenterTopBarPitch\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tacdfb300-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.ShortInsideEndLowerBarPitch\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7dc94180-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.ShortInsideEndTopBarPitch\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9cc7d380-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.ShortOutsideLowerBarPitch\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6e49f880-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfSlab.ShortOutsideTopBarPitch\tLENGTH\t\t364\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t365\tPset_ReinforcementBarPitchOfWall\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc84abe00-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfWall.BarAllocationType\tTEXT\t\t365\t1\tPEnum_ReinforcementBarAllocationType\t1\nPARAM\tbbc66580-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfWall.Description\tTEXT\t\t365\t1\tIfcText\t1\nPARAM\tde587e80-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfWall.HorizontalBarPitch\tLENGTH\t\t365\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc1bc4680-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfWall.Reference\tTEXT\t\t365\t1\tIfcLabel\t1\nPARAM\te7495000-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfWall.SpacingBarPitch\tLENGTH\t\t365\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td698da00-d200-11e1-8000-00215ad4efdf\tPset_ReinforcementBarPitchOfWall.VerticalBarPitch\tLENGTH\t\t365\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t366\tPset_ReinforcingBarBendingsBECCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6c9856e4-8bc3-45e9-ad41-d289687e1b26\tPset_ReinforcingBarBendingsBECCommon.BECBarShapeCode\tTEXT\t\t366\t1\tIfcLabel\t1\nPARAM\t2d6fce8a-1551-48d8-9a75-d8aaf8887c9b\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_u\tNUMBER\t\t366\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t4074891f-141d-47fd-97b6-8d7f5a61c48c\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_u1\tNUMBER\t\t366\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t1fa303e8-e7df-48a4-8ed4-5b39995dd9dc\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_v\tNUMBER\t\t366\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t93d7c237-1813-48e0-9049-bb4f5ee8c043\tPset_ReinforcingBarBendingsBECCommon.BECBendingParameter_v1\tNUMBER\t\t366\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t0be5660e-1db1-4892-a2bc-64261f9a838a\tPset_ReinforcingBarBendingsBECCommon.BECCuttingLength\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta0d2d0f3-f6e3-48d3-af7a-e239f4f18169\tPset_ReinforcingBarBendingsBECCommon.BECRollerDiameter\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8c4e1036-730f-49b6-b74e-d4f41c826343\tPset_ReinforcingBarBendingsBECCommon.BECShapeAid_x\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1d020b72-0665-4858-93f0-1e0bebe0f55d\tPset_ReinforcingBarBendingsBECCommon.BECShapeAid_y\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t61e6c56f-2b34-48aa-bb1c-c982a74b3cd8\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_a\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tefa26f42-a8f1-4d48-98e8-5f03bd51e92d\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_b\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t080f0c84-a25d-4fe6-9c52-794734b6bc7a\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_c\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t930382cb-e505-45e8-aa5d-ccfb6f50ae6b\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_d\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t112a6b9b-efae-431c-95e4-9bc52d919c69\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_e\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te6296586-8f38-4edb-8a67-94eb67c20026\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_f\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t77faf4db-193a-4b21-8434-f7214afd2021\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_g\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc5bfdf69-b893-433b-a38c-4fe18873d69f\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_h\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t889650e3-3fad-4802-b63b-9b2bb3d4f180\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_i\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t052144b9-daf6-4f52-8349-2f3e7120d372\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_j\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t29649e55-8a1d-4c1c-a5d2-10da06513d38\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_k\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6882a7d6-4567-4ab6-a120-c994abeecd48\tPset_ReinforcingBarBendingsBECCommon.BECShapeParameter_l\tLENGTH\t\t366\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t367\tPset_ReinforcingBarBendingsBS8666Common\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9e8c172f-adb7-4630-a4f5-14fbab2c93bd\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeCode\tTEXT\t\t367\t1\tIfcLabel\t1\nPARAM\t3f4f16eb-dd52-4639-99e4-8c0ddfa3ba8a\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_A\tLENGTH\t\t367\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2cea6042-cf12-4f5f-a211-a97a6c6d5977\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_B\tLENGTH\t\t367\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t224e2694-9acf-497a-94a9-eecf8077459b\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_C\tLENGTH\t\t367\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6870558a-9f86-493a-a00b-fe749bdf213f\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_D\tLENGTH\t\t367\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1f079e2c-4cb2-4123-b5d0-261a16fe4008\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_E\tLENGTH\t\t367\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t02de028a-bab3-4c45-85ab-b19c853d3f5e\tPset_ReinforcingBarBendingsBS8666Common.BS8666ShapeParameter_r\tLENGTH\t\t367\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t368\tPset_ReinforcingBarBendingsDIN135610Common\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td77b13b2-fd3c-42ed-812a-bc83641b9c4b\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeCode\tTEXT\t\t368\t1\tIfcLabel\t1\nPARAM\tf44578e1-7c15-496b-bc89-439cf69ef785\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_a\tLENGTH\t\t368\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te857ba1a-085b-4128-9ad6-124c4d13900e\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_b\tLENGTH\t\t368\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taa01933c-dd2a-4619-adfc-9801c3d75b14\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_c\tLENGTH\t\t368\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc51eddd6-3e3c-45e7-af2d-eb959309da8b\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_d\tLENGTH\t\t368\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbe87ed30-7aee-40c5-89c6-b3c366237d21\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_e\tLENGTH\t\t368\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te0f974b8-1a67-449e-a15d-183d9e488f0c\tPset_ReinforcingBarBendingsDIN135610Common.DIN135610ShapeParameter_z\tLENGTH\t\t368\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t369\tPset_ReinforcingBarBendingsISOCD3766Common\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7b4c7f43-34bc-433b-a2b1-c356a1be9d72\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766BendingEndHook\tNUMBER\t\t369\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t19d332b7-95e3-4bdc-935e-bae7e7533c8e\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766BendingStartHook\tNUMBER\t\t369\t1\tIfcPlaneAngleMeasure\t1\nPARAM\t3fbd6282-57d3-454d-996d-a31de83f63fb\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeCode\tTEXT\t\t369\t1\tIfcLabel\t1\nPARAM\tee9089df-139f-429c-ac45-e34063c8f30a\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_a\tLENGTH\t\t369\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1bffd71d-d79d-471f-a660-7a91672a32a4\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_b\tLENGTH\t\t369\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t83680e64-33e0-4052-a4b8-968b0eaaf524\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_c\tLENGTH\t\t369\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4c4b7550-6f88-47ad-8770-2e8dd2b711bb\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_d\tLENGTH\t\t369\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3a60f25d-fa79-4289-9499-a34907f92aa0\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_e\tLENGTH\t\t369\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1fb87150-d3e3-40ac-a2b3-693f14142838\tPset_ReinforcingBarBendingsISOCD3766Common.ISOCD3766ShapeParameter_R\tLENGTH\t\t369\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t370\tPset_ReinforcingBarCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td2837eec-2e95-439f-97cc-eef7c80d6580\tPset_ReinforcingBarCommon.BarLength\tLENGTH\t\t370\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t002c10a5-49c4-4cd3-a02a-7d3a7cc3e726\tPset_ReinforcingBarCommon.BarSpacing\tLENGTH\t\t370\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb4b93984-6b42-4bbe-8987-21fbff0d6c8e\tPset_ReinforcingBarCommon.BarSurface\tTEXT\t\t370\t1\tPEnum_ReinforcementBarSurface\t1\nPARAM\t766df352-b926-486a-8cfa-e4e207790013\tPset_ReinforcingBarCommon.BendingParameters\tMULTILINETEXT\t\t370\t1\tPropertyListValue\t1\nPARAM\tb89eecc8-c2d4-45f3-a269-38ae697189aa\tPset_ReinforcingBarCommon.BendingShapeCode\tTEXT\t\t370\t1\tIfcIdentifier\t1\nPARAM\te6ad1050-49cb-411b-a58e-97fb9eade51e\tPset_ReinforcingBarCommon.NominalDiameter\tLENGTH\t\t370\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td9c5cd9f-0bb4-453f-b678-181411558c5d\tPset_ReinforcingBarCommon.Reference\tTEXT\t\t370\t1\tIfcIdentifier\t1\nPARAM\t7d7be887-760d-4fe3-b130-2963f7bccd8a\tPset_ReinforcingBarCommon.Status\tTEXT\t\t370\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t371\tPset_ReinforcingMeshCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb5f3c301-977d-4d3c-ba13-3bb0b891e592\tPset_ReinforcingMeshCommon.LongitudinalBarBendingParameters\tMULTILINETEXT\t\t371\t1\tPropertyListValue\t1\nPARAM\t2b78e3e8-df42-4691-bfe7-60a6a7fe07e8\tPset_ReinforcingMeshCommon.LongitudinalBarBendingShapeCode\tTEXT\t\t371\t1\tIfcIdentifier\t1\nPARAM\t811e1893-d560-4309-b991-a91420614530\tPset_ReinforcingMeshCommon.LongitudinalBarNominalDiameter\tLENGTH\t\t371\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3d68be78-7e02-48bd-ac7b-d525d49bf731\tPset_ReinforcingMeshCommon.LongitudinalBarSpacing\tLENGTH\t\t371\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdb73ef07-f02c-416d-9d6e-350ffbdd5611\tPset_ReinforcingMeshCommon.LongitudinalBarSurface\tTEXT\t\t371\t1\tPEnum_ReinforcementBarSurface\t1\nPARAM\t0829ac88-9a26-4665-b613-28d5c7ff7f24\tPset_ReinforcingMeshCommon.MeshLength\tLENGTH\t\t371\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t91489045-22ec-4efa-a54e-774dc160c4fb\tPset_ReinforcingMeshCommon.MeshWidth\tLENGTH\t\t371\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t13aaa238-51da-43c6-8f16-838b174e4676\tPset_ReinforcingMeshCommon.Reference\tTEXT\t\t371\t1\tIfcIdentifier\t1\nPARAM\t19d8547f-9b0d-4340-aaa9-0721fb5f9d3b\tPset_ReinforcingMeshCommon.Status\tTEXT\t\t371\t1\tPEnum_ElementStatus\t1\nPARAM\t3fde4864-276d-4e84-b252-0670e4b09e04\tPset_ReinforcingMeshCommon.TransverseBarBendingParameters\tMULTILINETEXT\t\t371\t1\tPropertyListValue\t1\nPARAM\t18a3346a-79c9-48f2-a572-94a707b4868c\tPset_ReinforcingMeshCommon.TransverseBarBendingShapeCode\tTEXT\t\t371\t1\tIfcIdentifier\t1\nPARAM\tb387b86a-2194-44f5-b961-f6b7dd3752ae\tPset_ReinforcingMeshCommon.TransverseBarNominalDiameter\tLENGTH\t\t371\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5fc4c373-68ab-4588-9ff1-6a6fbe877c38\tPset_ReinforcingMeshCommon.TransverseBarSpacing\tLENGTH\t\t371\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc9d95d85-7737-4db6-b078-e9d73857f848\tPset_ReinforcingMeshCommon.TransverseBarSurface\tTEXT\t\t371\t1\tPEnum_ReinforcementBarSurface\t1\n#\nGROUP\t372\tPset_Reliability\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2cb1cbe5-8c56-44b1-82ee-ce10bd1a76b2\tPset_Reliability.MeanTimeBetweenFailure\tNUMBER\t\t372\t1\tIfcTimeMeasure\t1\n#\nGROUP\t373\tPset_Risk\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t81a99380-d201-11e1-8000-00215ad4efdf\tPset_Risk.AffectsSurroundings\tYESNO\t\t373\t1\tIfcBoolean\t1\nPARAM\t30010900-d201-11e1-8000-00215ad4efdf\tPset_Risk.AssessmentOfRisk\tTEXT\t\t373\t1\tPEnum_RiskAssessment\t1\nPARAM\t1495fe00-d201-11e1-8000-00215ad4efdf\tPset_Risk.NatureOfRisk\tTEXT\t\t373\t1\tIfcLabel\t1\nPARAM\t88d0a180-d201-11e1-8000-00215ad4efdf\tPset_Risk.PreventiveMeassures\tMULTILINETEXT\t\t373\t1\tPropertyListValue\t1\nPARAM\t29729180-d201-11e1-8000-00215ad4efdf\tPset_Risk.RiskCause\tTEXT\t\t373\t1\tIfcText\t1\nPARAM\t44dd9c80-d201-11e1-8000-00215ad4efdf\tPset_Risk.RiskConsequence\tTEXT\t\t373\t1\tPEnum_RiskConsequence\t1\nPARAM\t7191b400-d201-11e1-8000-00215ad4efdf\tPset_Risk.RiskOwner\tTEXT\t\t373\t1\tPEnum_RiskOwner\t1\nPARAM\t5aeb5d00-d201-11e1-8000-00215ad4efdf\tPset_Risk.RiskRating\tTEXT\t\t373\t1\tPEnum_RiskRating\t1\nPARAM\t0516b500-d201-11e1-8000-00215ad4efdf\tPset_Risk.RiskType\tTEXT\t\t373\t1\tPEnum_RiskType\t1\nPARAM\t1bbd0c00-d201-11e1-8000-00215ad4efdf\tPset_Risk.SubNatureOfRisk1\tTEXT\t\t373\t1\tIfcLabel\t1\nPARAM\t224b8380-d201-11e1-8000-00215ad4efdf\tPset_Risk.SubNatureOfRisk2\tTEXT\t\t373\t1\tIfcLabel\t1\n#\nGROUP\t374\tPset_RoofCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tadc51480-d201-11e1-8000-00215ad4efdf\tPset_RoofCommon.AcousticRating\tTEXT\t\t374\t1\tIfcLabel\t1\nPARAM\tb584b900-d201-11e1-8000-00215ad4efdf\tPset_RoofCommon.FireRating\tTEXT\t\t374\t1\tIfcLabel\t1\nPARAM\tbd445d80-d201-11e1-8000-00215ad4efdf\tPset_RoofCommon.IsExternal\tYESNO\t\t374\t1\tIfcBoolean\t1\nPARAM\t87a90f61-4ea4-4ebe-a4d7-523924d88911\tPset_RoofCommon.LoadBearing\tYESNO\t\t374\t1\tIfcBoolean\t1\nPARAM\t2ed6cec4-3f7b-46db-9747-865a45f796e3\tPset_RoofCommon.ProjectedArea\tAREA\t\t374\t1\tIfcAreaMeasure\t1\nPARAM\t984fea80-d201-11e1-8000-00215ad4efdf\tPset_RoofCommon.Reference\tTEXT\t\t374\t1\tIfcIdentifier\t1\nPARAM\t9e45cb80-d201-11e1-8000-00215ad4efdf\tPset_RoofCommon.Status\tTEXT\t\t374\t1\tPEnum_ElementStatus\t1\nPARAM\tc46b6b80-d201-11e1-8000-00215ad4efdf\tPset_RoofCommon.ThermalTransmittance\tNUMBER\t\t374\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\td3597dc3-6116-4c78-b549-b4cc7d7d954b\tPset_RoofCommon.TotalArea\tAREA\t\t374\t1\tIfcAreaMeasure\t1\n#\nGROUP\t375\tPset_SanitaryTerminalTypeBath\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td0572d80-d201-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeBath.BathType\tTEXT\t\t375\t1\tPEnum_BathType\t1\nPARAM\t1c6c726a-46b6-47fd-ab5e-91e18b52257e\tPset_SanitaryTerminalTypeBath.Color\tTEXT\t\t375\t1\tIfcText\t1\nPARAM\t0f857e80-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeBath.DrainSize\tLENGTH\t\t375\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t17452300-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeBath.HasGrabHandles\tYESNO\t\t375\t1\tIfcBoolean\t1\nPARAM\t5f78915c-8a07-4868-ba4c-21a602efa2b5\tPset_SanitaryTerminalTypeBath.Material\tMULTILINETEXT\t\t375\t1\tIfcMaterial\t1\nPARAM\t3917936e-b404-4131-9772-84e16b65186f\tPset_SanitaryTerminalTypeBath.MaterialThickness\tLENGTH\t\t375\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t04f40a39-2d44-41ca-a498-6f969d7590ad\tPset_SanitaryTerminalTypeBath.NominalDepth\tLENGTH\t\t375\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf4383efd-5724-4cef-ab97-001baea609e7\tPset_SanitaryTerminalTypeBath.NominalLength\tLENGTH\t\t375\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td3c9412d-f511-4093-a420-2710c09b3ed6\tPset_SanitaryTerminalTypeBath.NominalWidth\tLENGTH\t\t375\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t376\tPset_SanitaryTerminalTypeBidet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbaab89e9-6cce-4f8e-925b-c9eb61559477\tPset_SanitaryTerminalTypeBidet.BidetMounting\tTEXT\t\t376\t1\tPEnum_SanitaryMounting\t1\nPARAM\t6ceb19bb-1e96-4488-8db3-4c0e3b5890df\tPset_SanitaryTerminalTypeBidet.Color\tTEXT\t\t376\t1\tIfcText\t1\nPARAM\t5bd0be80-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeBidet.DrainSize\tLENGTH\t\t376\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9864ad7a-1048-4b03-b2fd-d644c5e06a7b\tPset_SanitaryTerminalTypeBidet.Material\tMULTILINETEXT\t\t376\t1\tIfcMaterial\t1\nPARAM\t23c97b80-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeBidet.Mounting\tTEXT\t\t376\t1\tPEnum_SanitaryMounting\t1\nPARAM\t3aaefcc3-7900-42ac-b01a-48fbb16e1b5f\tPset_SanitaryTerminalTypeBidet.NominalDepth\tLENGTH\t\t376\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te72199c7-c1d7-4f0a-a54b-9c4e311feec8\tPset_SanitaryTerminalTypeBidet.NominalLength\tLENGTH\t\t376\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2c4195fc-24eb-46b4-b20f-148ae752543e\tPset_SanitaryTerminalTypeBidet.NominalWidth\tLENGTH\t\t376\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t53788380-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeBidet.SpilloverLevel\tLENGTH\t\t376\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t377\tPset_SanitaryTerminalTypeCistern\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t786cf680-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCistern.CisternCapacity\tVOLUME\t\t377\t1\tIfcVolumeMeasure\t1\nPARAM\t56f2fbbb-f9ba-4f7e-9517-3488fab4938d\tPset_SanitaryTerminalTypeCistern.CisternColor\tTEXT\t\t377\t1\tIfcText\t1\nPARAM\t6a1eda80-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCistern.CisternHeight\tTEXT\t\t377\t1\tPEnum_CisternHeight\t1\nPARAM\te52311c3-8caf-4f44-8ce2-dbdd740e8834\tPset_SanitaryTerminalTypeCistern.CisternMaterial\tMULTILINETEXT\t\t377\t1\tIfcMaterial\t1\nPARAM\t95a1c500-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCistern.FlushRate\tMULTILINETEXT\t\t377\t1\tPropertyBoundedValue\t1\nPARAM\t84f14f00-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCistern.FlushType\tTEXT\t\t377\t1\tPEnum_FlushType\t1\nPARAM\t9cc8d300-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCistern.IsAutomaticFlush\tYESNO\t\t377\t1\tIfcBoolean\t1\nPARAM\t7dca4100-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCistern.IsSingleFlush\tYESNO\t\t377\t1\tIfcBoolean\t1\n#\nGROUP\t378\tPset_SanitaryTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t93112095-298e-44d2-9aea-7995d82eb202\tPset_SanitaryTerminalTypeCommon.Color\tTEXT\t\t378\t1\tIfcLabel\t1\nPARAM\tbb516e7b-73f8-4dcd-85b9-53f3b61f0f22\tPset_SanitaryTerminalTypeCommon.NominalDepth\tLENGTH\t\t378\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t36bde0df-4e7b-4ff4-a9b7-b5191c5e82f7\tPset_SanitaryTerminalTypeCommon.NominalLength\tLENGTH\t\t378\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6cf48d3d-336e-4eb0-acdf-9bdf68db0d60\tPset_SanitaryTerminalTypeCommon.NominalWidth\tLENGTH\t\t378\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taeaa7600-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeCommon.Reference\tTEXT\t\t378\t1\tIfcIdentifier\t1\nPARAM\t1b1c71bc-3419-4116-982b-bacb563822d6\tPset_SanitaryTerminalTypeCommon.Status\tTEXT\t\t378\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t379\tPset_SanitaryTerminalTypeSanitaryFountain\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tca0e0236-4c1c-4b85-afaa-dad76d85565f\tPset_SanitaryTerminalTypeSanitaryFountain.Color\tTEXT\t\t379\t1\tIfcText\t1\nPARAM\tf8935c00-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSanitaryFountain.DrainSize\tLENGTH\t\t379\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbb2ece80-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSanitaryFountain.FountainType\tTEXT\t\t379\t1\tPEnum_FountainType\t1\nPARAM\td5a96864-185d-4f2c-883d-fd064355599c\tPset_SanitaryTerminalTypeSanitaryFountain.Material\tMULTILINETEXT\t\t379\t1\tIfcMaterial\t1\nPARAM\tc7b32700-d202-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSanitaryFountain.Mounting\tTEXT\t\t379\t1\tPEnum_SanitaryMounting\t1\nPARAM\t182e36f3-84dd-489c-a2a3-e7f639185afb\tPset_SanitaryTerminalTypeSanitaryFountain.NominalDepth\tLENGTH\t\t379\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8a04fec7-0858-4138-b351-5a2113f19c38\tPset_SanitaryTerminalTypeSanitaryFountain.NominalLength\tLENGTH\t\t379\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb2a4597a-26cc-4f89-ad58-f4cdb887661e\tPset_SanitaryTerminalTypeSanitaryFountain.NominalWidth\tLENGTH\t\t379\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t380\tPset_SanitaryTerminalTypeShower\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfff5e822-96b6-4900-aaee-b6758686eacf\tPset_SanitaryTerminalTypeShower.Color\tTEXT\t\t380\t1\tIfcText\t1\nPARAM\t427c4200-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeShower.DrainSize\tLENGTH\t\t380\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t15c82a80-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeShower.HasTray\tYESNO\t\t380\t1\tIfcBoolean\t1\nPARAM\t95d6b066-02e9-4ecd-965d-c7488459b975\tPset_SanitaryTerminalTypeShower.Material\tMULTILINETEXT\t\t380\t1\tIfcMaterial\t1\nPARAM\ta234ce91-6851-4f72-857c-53e2cbba223d\tPset_SanitaryTerminalTypeShower.MaterialThickness\tLENGTH\t\t380\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te855e578-480d-4977-9977-04c614101735\tPset_SanitaryTerminalTypeShower.NominalDepth\tLENGTH\t\t380\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t481a718e-dde9-425e-9e66-fc00797eea9f\tPset_SanitaryTerminalTypeShower.NominalLength\tLENGTH\t\t380\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf8e0636f-ed4b-4943-8d1d-c96fd2b2081c\tPset_SanitaryTerminalTypeShower.NominalWidth\tLENGTH\t\t380\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3bedca80-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeShower.ShowerHeadDescription\tTEXT\t\t380\t1\tIfcText\t1\nPARAM\t06e17800-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeShower.ShowerType\tTEXT\t\t380\t1\tPEnum_ShowerType\t1\n#\nGROUP\t381\tPset_SanitaryTerminalTypeSink\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta141bb80-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSink.Color\tTEXT\t\t381\t1\tIfcLabel\t1\nPARAM\tbc143000-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSink.DrainSize\tLENGTH\t\t381\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t232c7d3f-0165-4fef-a047-8c4e4a180491\tPset_SanitaryTerminalTypeSink.Material\tMULTILINETEXT\t\t381\t1\tIfcMaterial\t1\nPARAM\t7192b380-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSink.Mounting\tTEXT\t\t381\t1\tPEnum_SanitaryMounting\t1\nPARAM\tc5050180-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSink.MountingOffset\tLENGTH\t\t381\t1\tIfcLengthMeasure\t1\nPARAM\t1b4712bd-9af8-4aa2-800b-88930ee956a9\tPset_SanitaryTerminalTypeSink.NominalDepth\tLENGTH\t\t381\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9fc87f56-dad4-4d6d-8e01-298e16818e76\tPset_SanitaryTerminalTypeSink.NominalLength\tLENGTH\t\t381\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf3534007-dbcd-4b90-9abb-c1c3e83b6dd7\tPset_SanitaryTerminalTypeSink.NominalWidth\tLENGTH\t\t381\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6933b16c-04d4-45d2-b1a2-a50d994b5571\tPset_SanitaryTerminalTypeSink.SinkMounting\tTEXT\t\t381\t1\tPEnum_SanitaryMounting\t1\nPARAM\t532cb800-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeSink.SinkType\tTEXT\t\t381\t1\tPEnum_SinkType\t1\n#\nGROUP\t382\tPset_SanitaryTerminalTypeToiletPan\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7ff9da9e-924b-4c10-8580-dd69077c5db4\tPset_SanitaryTerminalTypeToiletPan.NominalDepth\tLENGTH\t\t382\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t80fe3d1b-ad22-4a95-add8-f32f93ffdeeb\tPset_SanitaryTerminalTypeToiletPan.NominalLength\tLENGTH\t\t382\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t084467e9-4a9e-470a-a103-a2210ddc3115\tPset_SanitaryTerminalTypeToiletPan.NominalWidth\tLENGTH\t\t382\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te8354d40-2382-4aee-9ab8-9362ef5b799a\tPset_SanitaryTerminalTypeToiletPan.PanColor\tTEXT\t\t382\t1\tIfcText\t1\nPARAM\ta3f7edae-9d77-49d2-801d-e5a446d33e4f\tPset_SanitaryTerminalTypeToiletPan.PanMaterial\tMULTILINETEXT\t\t382\t1\tIfcMaterial\t1\nPARAM\tf7aefa00-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeToiletPan.PanMounting\tTEXT\t\t382\t1\tPEnum_SanitaryMounting\t1\nPARAM\t0f867e00-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeToiletPan.SpilloverLevel\tLENGTH\t\t382\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te7971a80-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeToiletPan.ToiletPanType\tTEXT\t\t382\t1\tPEnum_ToiletPanType\t1\nPARAM\td221f080-d203-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeToiletPan.ToiletType\tTEXT\t\t382\t1\tPEnum_ToiletType\t1\n#\nGROUP\t383\tPset_SanitaryTerminalTypeUrinal\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4361a380-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeUrinal.Mounting\tTEXT\t\t383\t1\tPEnum_SanitaryMounting\t1\nPARAM\ta2569e5f-8a74-4c80-80ec-c5230816cf08\tPset_SanitaryTerminalTypeUrinal.NominalDepth\tLENGTH\t\t383\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t87775b31-1501-410d-9521-93d3eb2a07f6\tPset_SanitaryTerminalTypeUrinal.NominalLength\tLENGTH\t\t383\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td9a306f1-6b95-45af-9a97-392480084695\tPset_SanitaryTerminalTypeUrinal.NominalWidth\tLENGTH\t\t383\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t596f6400-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeUrinal.SpilloverLevel\tLENGTH\t\t383\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t506fe258-a383-466d-ac5f-00d8c61e315a\tPset_SanitaryTerminalTypeUrinal.UrinalColor\tTEXT\t\t383\t1\tIfcText\t1\nPARAM\te988c680-6b70-4d6a-b792-2672dad544b3\tPset_SanitaryTerminalTypeUrinal.UrinalMaterial\tMULTILINETEXT\t\t383\t1\tIfcMaterial\t1\nPARAM\t35138780-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeUrinal.UrinalType\tTEXT\t\t383\t1\tPEnum_UrinalType\t1\n#\nGROUP\t384\tPset_SanitaryTerminalTypeWashHandBasin\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta5150092-5f8a-48ba-b12a-95995535f7c4\tPset_SanitaryTerminalTypeWashHandBasin.Color\tTEXT\t\t384\t1\tIfcText\t1\nPARAM\tbff48200-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeWashHandBasin.DrainSize\tLENGTH\t\t384\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfba34126-ee67-4152-b619-03e6dfa9fd79\tPset_SanitaryTerminalTypeWashHandBasin.Material\tMULTILINETEXT\t\t384\t1\tIfcMaterial\t1\nPARAM\t9176a700-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeWashHandBasin.Mounting\tTEXT\t\t384\t1\tPEnum_SanitaryMounting\t1\nPARAM\tc97dea00-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeWashHandBasin.MountingOffset\tLENGTH\t\t384\t1\tIfcLengthMeasure\t1\nPARAM\t01489ce4-3889-4324-8748-2dedd0f6f822\tPset_SanitaryTerminalTypeWashHandBasin.NominalDepth\tLENGTH\t\t384\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t4dd7414e-6e8b-4b7d-b6ea-e79a799e0aca\tPset_SanitaryTerminalTypeWashHandBasin.NominalLength\tLENGTH\t\t384\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf32cb2f0-f755-4ef0-b247-42d268446b18\tPset_SanitaryTerminalTypeWashHandBasin.NominalWidth\tLENGTH\t\t384\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7c6eee7c-b025-41a9-a938-5ab1421ce6a5\tPset_SanitaryTerminalTypeWashHandBasin.WashHandBasinMounting\tTEXT\t\t384\t1\tPEnum_SanitaryMounting\t1\nPARAM\t802d9a80-d204-11e1-8000-00215ad4efdf\tPset_SanitaryTerminalTypeWashHandBasin.WashHandBasinType\tTEXT\t\t384\t1\tPEnum_WashHandBasinType\t1\n#\nGROUP\t385\tPset_SanitaryTerminalTypeWCSeat\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf2729eee-246a-4c13-b106-685e189745fb\tPset_SanitaryTerminalTypeWCSeat.SeatColor\tTEXT\t\t385\t1\tIfcText\t1\nPARAM\t00d07849-b909-4a6a-a5a9-46c8c850751e\tPset_SanitaryTerminalTypeWCSeat.SeatHasCover\tYESNO\t\t385\t1\tIfcBoolean\t1\nPARAM\tcf4db829-68ea-4975-a6ae-7c0c3eaf540a\tPset_SanitaryTerminalTypeWCSeat.SeatMaterial\tMULTILINETEXT\t\t385\t1\tIfcMaterial\t1\nPARAM\t9bdf5d49-6054-45fd-a46d-bf7888c1431b\tPset_SanitaryTerminalTypeWCSeat.SeatType\tTEXT\t\t385\t1\tPEnum_ToiletSeatType\t1\n#\nGROUP\t386\tPset_SensorPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td8fd3300-d204-11e1-8000-00215ad4efdf\tPset_SensorPHistory.Direction\tMULTILINETEXT\t\t386\t1\tIfcTimeSeries\t1\nPARAM\tdbf82380-d204-11e1-8000-00215ad4efdf\tPset_SensorPHistory.Quality\tMULTILINETEXT\t\t386\t1\tIfcTimeSeries\t1\nPARAM\tdef31400-d204-11e1-8000-00215ad4efdf\tPset_SensorPHistory.Status\tMULTILINETEXT\t\t386\t1\tIfcTimeSeries\t1\nPARAM\td569ac00-d204-11e1-8000-00215ad4efdf\tPset_SensorPHistory.Value\tMULTILINETEXT\t\t386\t1\tIfcTimeSeries\t1\n#\nGROUP\t387\tPset_SensorTypeCO2Sensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t59b695b5-0fb6-4612-b29a-bec57aa10d46\tPset_SensorTypeCO2Sensor.AccuracyOfCO2Sensor\tNUMBER\t\t387\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t395e986e-db11-45d5-8d56-8dfe92f80b98\tPset_SensorTypeCO2Sensor.CO2SensorRange\tMULTILINETEXT\t\t387\t1\tPropertyBoundedValue\t1\nPARAM\t41d7257b-9519-4449-aa7c-a9a2a1b3a064\tPset_SensorTypeCO2Sensor.CoverageArea\tAREA\t\t387\t1\tIfcAreaMeasure\t1\nPARAM\te4ab0c98-8417-4826-9c10-ddef20bb5aa9\tPset_SensorTypeCO2Sensor.SetPointConcentration\tMULTILINETEXT\t\t387\t1\tPropertyBoundedValue\t1\nPARAM\t4bc2730e-47e0-493b-a7d4-4d11a5d5d909\tPset_SensorTypeCO2Sensor.TimeConstant\tNUMBER\t\t387\t1\tIfcTimeMeasure\t1\nPARAM\t75519508-f5b6-40c7-84b5-38fb0c2ee23a\tPset_SensorTypeCO2Sensor.WashHandBasinSetPoint\tNUMBER\t\t387\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t388\tPset_SensorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te9151280-d204-11e1-8000-00215ad4efdf\tPset_SensorTypeCommon.Reference\tTEXT\t\t388\t1\tIfcIdentifier\t1\nPARAM\tf03c2080-d204-11e1-8000-00215ad4efdf\tPset_SensorTypeCommon.Status\tTEXT\t\t388\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t389\tPset_SensorTypeConductanceSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0649e100-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeConductanceSensor.SetPointConductance\tMULTILINETEXT\t\t389\t1\tPropertyBoundedValue\t1\n#\nGROUP\t390\tPset_SensorTypeContactSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t12ce3980-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeContactSensor.SetPointContact\tMULTILINETEXT\t\t390\t1\tPropertyBoundedValue\t1\n#\nGROUP\t391\tPset_SensorTypeFireSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2679a000-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeFireSensor.AccuracyOfFireSensor\tNUMBER\t\t391\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t2083bf00-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeFireSensor.FireSensorSetPoint\tNUMBER\t\t391\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t2c6f8100-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeFireSensor.TimeConstant\tNUMBER\t\t391\t1\tIfcTimeMeasure\t1\n#\nGROUP\t392\tPset_SensorTypeFlowSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a250680-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeFlowSensor.SetPointFlow\tMULTILINETEXT\t\t392\t1\tPropertyBoundedValue\t1\n#\nGROUP\t393\tPset_SensorTypeFrostSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2c68553a-248d-4030-9438-39a8806ebd51\tPset_SensorTypeFrostSensor.SetPointFrost\tMULTILINETEXT\t\t393\t1\tPropertyBoundedValue\t1\n#\nGROUP\t394\tPset_SensorTypeGasSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t78e2ddc9-4918-410e-b182-4057b58a61cb\tPset_SensorTypeGasSensor.AccuracyOfGasSensor\tNUMBER\t\t394\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t6a6ca500-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeGasSensor.CoverageArea\tAREA\t\t394\t1\tIfcAreaMeasure\t1\nPARAM\t490bb900-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeGasSensor.GasDetected\tTEXT\t\t394\t1\tIfcLabel\t1\nPARAM\t98ef6c5c-2966-49a2-a112-63ba9d89c0d6\tPset_SensorTypeGasSensor.GasSensorRange\tMULTILINETEXT\t\t394\t1\tPropertyBoundedValue\t1\nPARAM\ta579b900-5eee-423b-b81c-be1ef506b774\tPset_SensorTypeGasSensor.GasSensorSetPoint\tNUMBER\t\t394\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5163f400-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeGasSensor.SetPointConcentration\tMULTILINETEXT\t\t394\t1\tPropertyBoundedValue\t1\nPARAM\t4eff7f6b-adb9-4226-81ce-f16533709be5\tPset_SensorTypeGasSensor.TimeConstant\tNUMBER\t\t394\t1\tIfcTimeMeasure\t1\n#\nGROUP\t395\tPset_SensorTypeHeatSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7f493880-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeHeatSensor.CoverageArea\tAREA\t\t395\t1\tIfcAreaMeasure\t1\nPARAM\t3eb7b739-b6fe-4d8a-ad69-8d8e2b1b5d35\tPset_SensorTypeHeatSensor.HeatSensorAccuracy\tNUMBER\t\t395\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t9c5fd79b-803c-4ec9-8f5e-03ceab1ed077\tPset_SensorTypeHeatSensor.HeatSensorRange\tMULTILINETEXT\t\t395\t1\tPropertyBoundedValue\t1\nPARAM\t7a07da78-cdf5-48ff-af5e-bc0b789d445a\tPset_SensorTypeHeatSensor.HeatSensorSetPoint\tNUMBER\t\t395\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t8cfebe00-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeHeatSensor.RateOfTemperatureRise\tNUMBER\t\t395\t1\tIfcTemperatureRateOfChangeMeasure\t1\nPARAM\t84a68300-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeHeatSensor.SetPointTemperature\tMULTILINETEXT\t\t395\t1\tPropertyBoundedValue\t1\nPARAM\t4db5accc-0baf-4dc3-bb6f-06514d15112e\tPset_SensorTypeHeatSensor.TimeConstant\tNUMBER\t\t395\t1\tIfcTimeMeasure\t1\n#\nGROUP\t396\tPset_SensorTypeHumiditySensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t60e82933-dc48-4872-a0b9-02b848072efe\tPset_SensorTypeHumiditySensor.AccuracyOfHumiditySensor\tNUMBER\t\t396\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t2133f619-fe71-4d89-add4-65a268c052c1\tPset_SensorTypeHumiditySensor.HumiditySensorRange\tMULTILINETEXT\t\t396\t1\tPropertyBoundedValue\t1\nPARAM\t48a0ad4d-f0f2-4869-8313-acf522525030\tPset_SensorTypeHumiditySensor.HumiditySetPoint\tNUMBER\t\t396\t1\tIfcPositiveRatioMeasure\t1\nPARAM\ta6a00580-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeHumiditySensor.SetPointHumidity\tMULTILINETEXT\t\t396\t1\tPropertyBoundedValue\t1\nPARAM\t6ccc8f74-99f2-4549-96b3-1af2d71b9d24\tPset_SensorTypeHumiditySensor.TimeConstant\tNUMBER\t\t396\t1\tIfcTimeMeasure\t1\n#\nGROUP\t397\tPset_SensorTypeIdentifierSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t51b07040-b891-47dd-a5f7-01b8e246bf62\tPset_SensorTypeIdentifierSensor.SetPointIdentifier\tMULTILINETEXT\t\t397\t1\tPropertyBoundedValue\t1\n#\nGROUP\t398\tPset_SensorTypeIonConcentrationSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbcadc600-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeIonConcentrationSensor.SetPointConcentration\tMULTILINETEXT\t\t398\t1\tPropertyBoundedValue\t1\nPARAM\tb61f4e80-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeIonConcentrationSensor.SubstanceDetected\tTEXT\t\t398\t1\tIfcLabel\t1\n#\nGROUP\t399\tPset_SensorTypeLevelSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc9cab500-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeLevelSensor.SetPointLevel\tMULTILINETEXT\t\t399\t1\tPropertyBoundedValue\t1\n#\nGROUP\t400\tPset_SensorTypeLightSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t74f3feeb-5dfb-40e0-8d83-6841ea2c3aeb\tPset_SensorTypeLightSensor.LightSensorAccuracy\tNUMBER\t\t400\t1\tIfcIlluminanceMeasure\t1\nPARAM\t7ac10515-4ef7-43e0-9dcf-4ea5d08fea08\tPset_SensorTypeLightSensor.LightSensorRange\tMULTILINETEXT\t\t400\t1\tPropertyBoundedValue\t1\nPARAM\tf68397d7-0f3c-461c-8f97-7931aeca75b5\tPset_SensorTypeLightSensor.LightSensorSetPoint\tNUMBER\t\t400\t1\tIfcIlluminanceMeasure\t1\nPARAM\te1a23900-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeLightSensor.SetPointIlluminance\tMULTILINETEXT\t\t400\t1\tPropertyBoundedValue\t1\nPARAM\td9aecf17-64c7-4704-8088-813a518bb948\tPset_SensorTypeLightSensor.TimeConstant\tNUMBER\t\t400\t1\tIfcTimeMeasure\t1\n#\nGROUP\t401\tPset_SensorTypeMoistureSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tee269180-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeMoistureSensor.SetPointMoisture\tMULTILINETEXT\t\t401\t1\tPropertyBoundedValue\t1\n#\nGROUP\t402\tPset_SensorTypeMovementSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfd0d4400-d205-11e1-8000-00215ad4efdf\tPset_SensorTypeMovementSensor.MovementSensingType\tTEXT\t\t402\t1\tPEnum_MovementSensingType\t1\nPARAM\t09919c80-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeMovementSensor.SetPointMovement\tMULTILINETEXT\t\t402\t1\tPropertyBoundedValue\t1\nPARAM\tb0d48bba-5191-4f5f-8786-966d5957c83c\tPset_SensorTypeMovementSensor.TimeConstant\tNUMBER\t\t402\t1\tIfcTimeMeasure\t1\n#\nGROUP\t403\tPset_SensorTypePHSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1910e580-d206-11e1-8000-00215ad4efdf\tPset_SensorTypePHSensor.SetPointPH\tMULTILINETEXT\t\t403\t1\tPropertyBoundedValue\t1\n#\nGROUP\t404\tPset_SensorTypePressureSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfdeaffac-fea8-487d-8ccd-a7ddf3c493e3\tPset_SensorTypePressureSensor.AccuracyOfPressureSensor\tNUMBER\t\t404\t1\tIfcPressureMeasure\t1\nPARAM\t30e86980-d206-11e1-8000-00215ad4efdf\tPset_SensorTypePressureSensor.IsSwitch\tYESNO\t\t404\t1\tIfcBoolean\t1\nPARAM\t4bd27b63-84de-4ea2-98da-b563646beb5d\tPset_SensorTypePressureSensor.PressureSensorRange\tMULTILINETEXT\t\t404\t1\tPropertyBoundedValue\t1\nPARAM\tf516bca9-acf9-437f-8291-09df80788bea\tPset_SensorTypePressureSensor.PressureSensorSetPoint\tNUMBER\t\t404\t1\tIfcPressureMeasure\t1\nPARAM\t262dd480-d206-11e1-8000-00215ad4efdf\tPset_SensorTypePressureSensor.SetPointPressure\tMULTILINETEXT\t\t404\t1\tPropertyBoundedValue\t1\nPARAM\t781b9c4b-7f2f-4752-a2dc-4026bd5f2727\tPset_SensorTypePressureSensor.TimeConstant\tNUMBER\t\t404\t1\tIfcTimeMeasure\t1\n#\nGROUP\t405\tPset_SensorTypeRadiationSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3cd42b80-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeRadiationSensor.SetPointRadiation\tMULTILINETEXT\t\t405\t1\tPropertyBoundedValue\t1\n#\nGROUP\t406\tPset_SensorTypeRadioactivitySensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4bbade00-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeRadioactivitySensor.SetPointRadioactivity\tMULTILINETEXT\t\t406\t1\tPropertyBoundedValue\t1\n#\nGROUP\t407\tPset_SensorTypeSmokeSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf309cd80-99ad-4156-9903-c1e875c8416b\tPset_SensorTypeSmokeSensor.AccuracyOfSmokeSensor\tNUMBER\t\t407\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t58d7cd00-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeSmokeSensor.CoverageArea\tAREA\t\t407\t1\tIfcAreaMeasure\t1\nPARAM\t68571600-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeSmokeSensor.HasBuiltInAlarm\tYESNO\t\t407\t1\tIfcBoolean\t1\nPARAM\t4a1499ef-ac8f-4070-ba57-da8dbf11d47a\tPset_SensorTypeSmokeSensor.PressureSensorSetPoint\tNUMBER\t\t407\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t5f664480-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeSmokeSensor.SetPointConcentration\tMULTILINETEXT\t\t407\t1\tPropertyBoundedValue\t1\nPARAM\t24787944-ad1a-4601-b5fc-e83940a3feec\tPset_SensorTypeSmokeSensor.SmokeSensorRange\tMULTILINETEXT\t\t407\t1\tPropertyBoundedValue\t1\nPARAM\t18b2e5e8-683d-4884-89ef-c81fe91292f1\tPset_SensorTypeSmokeSensor.TimeConstant\tNUMBER\t\t407\t1\tIfcTimeMeasure\t1\n#\nGROUP\t408\tPset_SensorTypeSoundSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7442d800-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeSoundSensor.SetPointSound\tMULTILINETEXT\t\t408\t1\tPropertyBoundedValue\t1\nPARAM\t721c40d1-425d-443d-990a-2c1d747439d6\tPset_SensorTypeSoundSensor.SoundSensorAccuracy\tNUMBER\t\t408\t1\tIfcSoundPressureMeasure\t1\nPARAM\ta5ef093a-ea25-4d46-9bff-f533a8d341a5\tPset_SensorTypeSoundSensor.SoundSensorRange\tMULTILINETEXT\t\t408\t1\tPropertyBoundedValue\t1\nPARAM\t5c1326e6-b4cd-4e43-85e3-e06f5d6bf882\tPset_SensorTypeSoundSensor.SoundSensorSetPoint\tNUMBER\t\t408\t1\tIfcSoundPressureMeasure\t1\nPARAM\tda38ec03-e9ce-4d0d-9946-38a0928ce169\tPset_SensorTypeSoundSensor.TimeConstant\tNUMBER\t\t408\t1\tIfcTimeMeasure\t1\n#\nGROUP\t409\tPset_SensorTypeTemperatureSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc62dcf5-413f-4286-aba9-1b08f010c8b6\tPset_SensorTypeTemperatureSensor.AccuracyOfTemperatureSensor\tNUMBER\t\t409\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t93416a00-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeTemperatureSensor.SetPointTemperature\tMULTILINETEXT\t\t409\t1\tPropertyBoundedValue\t1\nPARAM\t5203274c-a81a-4a21-957a-0e6aee5e58c6\tPset_SensorTypeTemperatureSensor.TemperatureSensorRange\tMULTILINETEXT\t\t409\t1\tPropertyBoundedValue\t1\nPARAM\te6e109d6-e05b-4e1a-98d9-d4371defbadf\tPset_SensorTypeTemperatureSensor.TemperatureSensorSetPoint\tNUMBER\t\t409\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t815fc700-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeTemperatureSensor.TemperatureSensorType\tTEXT\t\t409\t1\tPEnum_TemperatureSensorType\t1\nPARAM\tc0c2d5da-e2ec-4f7a-8c39-a997740153ed\tPset_SensorTypeTemperatureSensor.TimeConstant\tNUMBER\t\t409\t1\tIfcTimeMeasure\t1\n#\nGROUP\t410\tPset_SensorTypeWindSensor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb66c1980-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeWindSensor.SetPointSpeed\tNUMBER\t\t410\t1\tIfcLinearVelocityMeasure\t1\nPARAM\ta2c0b300-d206-11e1-8000-00215ad4efdf\tPset_SensorTypeWindSensor.WindSensorType\tTEXT\t\t410\t1\tPEnum_WindSensorType\t1\n#\nGROUP\t411\tPset_ServiceLife\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8eb2f467-91c2-42e7-b997-996569152d4f\tPset_ServiceLife.MeanTimeBetweenFailure\tTEXT\t\t411\t1\tIfcDuration\t1\nPARAM\teadfd580-d206-11e1-8000-00215ad4efdf\tPset_ServiceLife.ServiceLifeDuration\tMULTILINETEXT\t\t411\t1\tPropertyBoundedValue\t1\n#\nGROUP\t412\tPset_ServiceLifeFactors\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8d77f8cb-925b-4cfd-bea4-8301f42c89a0\tPset_ServiceLifeFactors.DesignLevel\tMULTILINETEXT\t\t412\t1\tPropertyBoundedValue\t1\nPARAM\tab27c286-d027-498e-962a-bd4fa0cab9a8\tPset_ServiceLifeFactors.IndoorEnvironment\tMULTILINETEXT\t\t412\t1\tPropertyBoundedValue\t1\nPARAM\t37ac936a-1b0a-42bf-a3c0-f4998cca50e4\tPset_ServiceLifeFactors.InUseConditions\tMULTILINETEXT\t\t412\t1\tPropertyBoundedValue\t1\nPARAM\t97e75274-0425-44a8-9cb6-5b8a94766d30\tPset_ServiceLifeFactors.MaintenanceLevel\tMULTILINETEXT\t\t412\t1\tPropertyBoundedValue\t1\nPARAM\t9988ab22-befe-45c9-ab3c-94972c61bd90\tPset_ServiceLifeFactors.OutdoorEnvironment\tMULTILINETEXT\t\t412\t1\tPropertyBoundedValue\t1\nPARAM\td5f52787-15be-42a0-b539-cf3f060054e3\tPset_ServiceLifeFactors.QualityOfComponents\tMULTILINETEXT\t\t412\t1\tPropertyBoundedValue\t1\nPARAM\tac78d9e0-d39b-43f4-af2c-7b7596d60667\tPset_ServiceLifeFactors.WorkExecutionLevel\tMULTILINETEXT\t\t412\t1\tPropertyBoundedValue\t1\n#\nGROUP\t413\tPset_ShadingDeviceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t69d50e00-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.IsExternal\tYESNO\t\t413\t1\tIfcBoolean\t1\nPARAM\t6f325880-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.MechanicalOperated\tYESNO\t\t413\t1\tIfcBoolean\t1\nPARAM\t47db8b80-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.Reference\tTEXT\t\t413\t1\tIfcIdentifier\t1\nPARAM\ta1dc5100-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.Roughness\tTEXT\t\t413\t1\tIfcLabel\t1\nPARAM\t5de94c00-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.ShadingDeviceType\tTEXT\t\t413\t1\tPEnum_ElementShading\t1\nPARAM\t85401900-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.SolarReflectance\tNUMBER\t\t413\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t79eced80-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.SolarTransmittance\tNUMBER\t\t413\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t4e6a0300-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.Status\tTEXT\t\t413\t1\tPEnum_ElementStatus\t1\nPARAM\ta86ac880-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.SurfaceColor\tTEXT\t\t413\t1\tIfcLabel\t1\nPARAM\t75283980-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.ThermalTransmittance\tNUMBER\t\t413\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\t9c7f0680-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.VisibleLightReflectance\tNUMBER\t\t413\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t7f4a3800-d207-11e1-8000-00215ad4efdf\tPset_ShadingDeviceCommon.VisibleLightTransmittance\tNUMBER\t\t413\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t414\tPset_ShadingDevicePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc6382d80-d207-11e1-8000-00215ad4efdf\tPset_ShadingDevicePHistory.Azimuth\tMULTILINETEXT\t\t414\t1\tIfcTimeSeries\t1\nPARAM\tb3255d80-d207-11e1-8000-00215ad4efdf\tPset_ShadingDevicePHistory.TiltAngle\tMULTILINETEXT\t\t414\t1\tIfcTimeSeries\t1\n#\nGROUP\t415\tPset_SiteCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdc32ed2d-58f7-4638-88fc-8a0dcc1ebc54\tPset_SiteCommon.BuildableArea\tAREA\t\t415\t1\tIfcAreaMeasure\t1\nPARAM\t41ff7c55-cd01-4e78-972c-c7ec49853817\tPset_SiteCommon.BuildingHeightLimit\tLENGTH\t\t415\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6e4bc3ba-6026-4923-9256-fdc3b7dcad0b\tPset_SiteCommon.FloorAreaRatio\tNUMBER\t\t415\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf5496012-83e8-49e8-b2fc-d0639c9c7394\tPset_SiteCommon.GrossAreaPlanned\tAREA\t\t415\t1\tIfcAreaMeasure\t1\nPARAM\t2db3713c-6ec4-4f96-82d4-95f0ca8c184b\tPset_SiteCommon.Reference\tTEXT\t\t415\t1\tIfcIdentifier\t1\nPARAM\tcec026c1-b978-4d3c-b657-a67fb34be612\tPset_SiteCommon.SiteCoverageRatio\tNUMBER\t\t415\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t004297b7-015a-4993-9a20-81ae39fc5df2\tPset_SiteCommon.TotalArea\tAREA\t\t415\t1\tIfcAreaMeasure\t1\n#\nGROUP\t416\tPset_SlabCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta3c71da3-c4bd-40aa-bf35-5cf18aeeeec0\tPset_SlabCommon.AcousticRating\tTEXT\t\t416\t1\tIfcLabel\t1\nPARAM\t3934d753-d8ce-484d-8311-dcab5d825590\tPset_SlabCommon.Combustible\tYESNO\t\t416\t1\tIfcBoolean\t1\nPARAM\t5fab7762-010a-4d66-a94c-15a679090e37\tPset_SlabCommon.Compartmentation\tYESNO\t\t416\t1\tIfcBoolean\t1\nPARAM\tc93f5556-48c4-433a-9eab-b6e2e1bec9a9\tPset_SlabCommon.FireRating\tTEXT\t\t416\t1\tIfcLabel\t1\nPARAM\t4d5197c1-d7c1-40ee-932f-b1339f2b570d\tPset_SlabCommon.IsExternal\tYESNO\t\t416\t1\tIfcBoolean\t1\nPARAM\t92825b2b-4c88-4474-b84c-09c03ed3783a\tPset_SlabCommon.LoadBearing\tYESNO\t\t416\t1\tIfcBoolean\t1\nPARAM\t49598380-d208-11e1-8000-00215ad4efdf\tPset_SlabCommon.PitchAngle\tNUMBER\t\t416\t1\tIfcPlaneAngleMeasure\t1\nPARAM\tfd7bdaba-bb4e-43de-a6c5-20478d9825e0\tPset_SlabCommon.Reference\tTEXT\t\t416\t1\tIfcIdentifier\t1\nPARAM\t3c3b5e34-702d-420a-ba1c-051f3025807d\tPset_SlabCommon.Status\tTEXT\t\t416\t1\tPEnum_ElementStatus\t1\nPARAM\td93380fd-a51f-402d-8885-b98a4255837e\tPset_SlabCommon.SurfaceSpreadOfFlame\tTEXT\t\t416\t1\tIfcLabel\t1\nPARAM\tade1a8e6-1272-4665-a7ff-9c1077125690\tPset_SlabCommon.ThermalTransmittance\tNUMBER\t\t416\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t417\tPset_SolarDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9a9a35d2-95f8-4d56-8bac-6657ec7bec7d\tPset_SolarDeviceTypeCommon.ActiveCellSurfaceAreaFraction\tNUMBER\t\t417\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t034f6cea-a9d8-48df-8940-419e8c744201\tPset_SolarDeviceTypeCommon.CellEfficiency\tNUMBER\t\t417\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t55dddc00-d208-11e1-8000-00215ad4efdf\tPset_SolarDeviceTypeCommon.Reference\tTEXT\t\t417\t1\tIfcIdentifier\t1\nPARAM\t5bd3bd00-d208-11e1-8000-00215ad4efdf\tPset_SolarDeviceTypeCommon.Status\tTEXT\t\t417\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t418\tPset_SoundAttenuation\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t80c83000-d208-11e1-8000-00215ad4efdf\tPset_SoundAttenuation.SoundFrequency\tMULTILINETEXT\t\t418\t1\tPropertyListValue\t1\nPARAM\t858ce400-d208-11e1-8000-00215ad4efdf\tPset_SoundAttenuation.SoundPressure\tMULTILINETEXT\t\t418\t1\tIfcTimeSeries\t1\nPARAM\t7443d780-d208-11e1-8000-00215ad4efdf\tPset_SoundAttenuation.SoundScale\tTEXT\t\t418\t1\tPEnum_SoundScale\t1\n#\nGROUP\t419\tPset_SoundGeneration\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8faee280-d208-11e1-8000-00215ad4efdf\tPset_SoundGeneration.SoundCurve\tMULTILINETEXT\t\t419\t1\tPropertyTableValue\t1\n#\nGROUP\t420\tPset_SpaceCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1eface6c-d6b8-4857-9c6b-f3dd4a2a8ab8\tPset_SpaceCommon.Category\tTEXT\t\t420\t1\tIfcLabel\t1\nPARAM\t0cb4e5de-6ee9-4f3b-9ae2-7b05a4876e85\tPset_SpaceCommon.CeilingCovering\tTEXT\t\t420\t1\tIfcLabel\t1\nPARAM\t5968a5ef-fe99-46d5-a9ee-35717871a8b1\tPset_SpaceCommon.Concealed\tYESNO\t\t420\t1\tIfcBoolean\t1\nPARAM\t312a6935-bb3b-4468-9da7-7dacc8bd0f6a\tPset_SpaceCommon.ConcealedCeiling\tYESNO\t\t420\t1\tIfcBoolean\t1\nPARAM\t19d86a9d-53b5-482d-b0db-ce29dd90fa22\tPset_SpaceCommon.ConcealedFlooring\tYESNO\t\t420\t1\tIfcBoolean\t1\nPARAM\tcf407cb0-c6fc-4c05-9295-d8a320cd03b5\tPset_SpaceCommon.FloorCovering\tTEXT\t\t420\t1\tIfcLabel\t1\nPARAM\t3315662e-a31b-4d94-bb30-ba3dc0604ec4\tPset_SpaceCommon.GrossAreaPlanned\tAREA\t\t420\t1\tIfcAreaMeasure\t1\nPARAM\t00ee9580-d209-11e1-8000-00215ad4efdf\tPset_SpaceCommon.GrossPlannedArea\tAREA\t\t420\t1\tIfcAreaMeasure\t1\nPARAM\t1499fc00-d209-11e1-8000-00215ad4efdf\tPset_SpaceCommon.HandicapAccessible\tYESNO\t\t420\t1\tIfcBoolean\t1\nPARAM\tf7fdc400-d208-11e1-8000-00215ad4efdf\tPset_SpaceCommon.IsExternal\tYESNO\t\t420\t1\tIfcBoolean\t1\nPARAM\t95a2414c-241c-460e-bb7e-a19d0dcb20d6\tPset_SpaceCommon.MechanicalVentilationRate\tINTEGER\t\t420\t1\tIfcCountMeasure\t1\nPARAM\t34d9d1b6-0e11-4315-b69d-912cffbcaf5a\tPset_SpaceCommon.NaturalVentilation\tYESNO\t\t420\t1\tIfcBoolean\t1\nPARAM\tee61b60a-800b-41f8-a22a-fdb78cae8249\tPset_SpaceCommon.NaturalVentilationRate\tINTEGER\t\t420\t1\tIfcCountMeasure\t1\nPARAM\t06e47680-d209-11e1-8000-00215ad4efdf\tPset_SpaceCommon.NetPlannedArea\tAREA\t\t420\t1\tIfcAreaMeasure\t1\nPARAM\t9e0bc4d1-611b-4b5d-816e-e6ad71c684c7\tPset_SpaceCommon.OccupancyNumber\tINTEGER\t\t420\t1\tIfcCountMeasure\t1\nPARAM\t462f01f4-2f08-438b-9df0-1dd980cf4957\tPset_SpaceCommon.OccupancyType\tTEXT\t\t420\t1\tIfcLabel\t1\nPARAM\t0d72ee00-d209-11e1-8000-00215ad4efdf\tPset_SpaceCommon.PubliclyAccessible\tYESNO\t\t420\t1\tIfcBoolean\t1\nPARAM\ta81efd00-d208-11e1-8000-00215ad4efdf\tPset_SpaceCommon.Reference\tTEXT\t\t420\t1\tIfcIdentifier\t1\nPARAM\t85df3b70-be9c-4b40-98f8-2be651c1bc1f\tPset_SpaceCommon.SkirtingBoard\tTEXT\t\t420\t1\tIfcLabel\t1\nPARAM\t4fa76590-503b-4a39-883d-b47285df0b74\tPset_SpaceCommon.WallCovering\tTEXT\t\t420\t1\tIfcLabel\t1\n#\nGROUP\t421\tPset_SpaceCoveringRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tda83c423-5c1d-40ab-a951-0f6abe2412f6\tPset_SpaceCoveringRequirements.CeilingCovering\tTEXT\t\t421\t1\tIfcLabel\t1\nPARAM\tabdab367-fcc6-4b08-b03d-584baeb819c8\tPset_SpaceCoveringRequirements.CeilingCoveringThickness\tLENGTH\t\t421\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7502fd34-b7fa-4942-80c6-10aec4787043\tPset_SpaceCoveringRequirements.ConcealedCeiling\tYESNO\t\t421\t1\tIfcBoolean\t1\nPARAM\ta7d072c8-df32-45bd-9c1b-9424d7f35a87\tPset_SpaceCoveringRequirements.ConcealedCeilingOffset\tLENGTH\t\t421\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\t8650a689-ba06-4df6-9f05-2a87ab070f02\tPset_SpaceCoveringRequirements.ConcealedFlooring\tYESNO\t\t421\t1\tIfcBoolean\t1\nPARAM\t56029141-a7c0-40c4-aef5-1a242fa1611f\tPset_SpaceCoveringRequirements.ConcealedFlooringOffset\tLENGTH\t\t421\t1\tIfcNonNegativeLengthMeasure\t1\nPARAM\tbfd1f6a6-ca08-4408-9916-5d31dda04831\tPset_SpaceCoveringRequirements.FloorCovering\tTEXT\t\t421\t1\tIfcLabel\t1\nPARAM\t9650c4d3-c07f-4ccc-9fd8-147b099f0939\tPset_SpaceCoveringRequirements.FloorCoveringThickness\tLENGTH\t\t421\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3f9ca576-2462-47ff-8bdc-a254b651a15a\tPset_SpaceCoveringRequirements.Molding\tTEXT\t\t421\t1\tIfcLabel\t1\nPARAM\t1e009268-2e53-47b2-b2c5-050bd03ee111\tPset_SpaceCoveringRequirements.MoldingHeight\tLENGTH\t\t421\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6d6b4d00-a223-4b90-b4eb-1901ca5be2b5\tPset_SpaceCoveringRequirements.SkirtingBoard\tTEXT\t\t421\t1\tIfcLabel\t1\nPARAM\taf1249f7-1eb2-4579-aaec-871aa4a6287b\tPset_SpaceCoveringRequirements.SkirtingBoardHeight\tLENGTH\t\t421\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t69193a7f-647f-4526-bd7f-1d3b9fdd1a9e\tPset_SpaceCoveringRequirements.WallCovering\tTEXT\t\t421\t1\tIfcLabel\t1\nPARAM\t44c775b1-4a0d-46c5-8ad8-c7e36c34a349\tPset_SpaceCoveringRequirements.WallCoveringThickness\tLENGTH\t\t421\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t422\tPset_SpaceFireSafetyRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8bcf9000-d209-11e1-8000-00215ad4efdf\tPset_SpaceFireSafetyRequirements.AirPressurization\tYESNO\t\t422\t1\tIfcBoolean\t1\nPARAM\t24b148bf-889e-4e63-ac7d-9ef51567cd78\tPset_SpaceFireSafetyRequirements.AncillaryFireUse\tTEXT\t\t422\t1\tIfcLabel\t1\nPARAM\t76f2fc80-d209-11e1-8000-00215ad4efdf\tPset_SpaceFireSafetyRequirements.FireExit\tYESNO\t\t422\t1\tIfcBoolean\t1\nPARAM\t0c962c05-9faf-44f0-9239-ad8c48b7d713\tPset_SpaceFireSafetyRequirements.FireHazardFactor\tTEXT\t\t422\t1\tIfcLabel\t1\nPARAM\t33988e00-d209-11e1-8000-00215ad4efdf\tPset_SpaceFireSafetyRequirements.FireRiskFactor\tTEXT\t\t422\t1\tIfcLabel\t1\nPARAM\t3c895f80-d209-11e1-8000-00215ad4efdf\tPset_SpaceFireSafetyRequirements.FlammableStorage\tYESNO\t\t422\t1\tIfcBoolean\t1\nPARAM\t3a4ed567-c719-4414-a7e8-58022f2c894e\tPset_SpaceFireSafetyRequirements.MainFireUse\tTEXT\t\t422\t1\tIfcLabel\t1\nPARAM\t7e1a0a80-d209-11e1-8000-00215ad4efdf\tPset_SpaceFireSafetyRequirements.SprinklerProtection\tYESNO\t\t422\t1\tIfcBoolean\t1\nPARAM\t840feb80-d209-11e1-8000-00215ad4efdf\tPset_SpaceFireSafetyRequirements.SprinklerProtectionAutomatic\tYESNO\t\t422\t1\tIfcBoolean\t1\n#\nGROUP\t423\tPset_SpaceHeaterPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb9b4d480-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.AirResistanceCurve\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\tadc91280-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.AuxiliaryEnergySourceConsumption\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\ta0ac2380-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.Effectiveness\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\tbde0f200-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.Exponent\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\t9c800600-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.FractionConvectiveHeatTransfer\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\t9a1dac00-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.FractionRadiantHeatTransfer\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\tc1747900-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.HeatOutputRate\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\tb6b9e400-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.OutputCapacityCurve\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\ta6096e00-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.SpaceAirTemperature\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\ta99cf500-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.SpaceMeanRadiantTemperature\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\ta30e7d80-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.SurfaceTemperature\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\nPARAM\tb15c9980-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterPHistory.UACurve\tMULTILINETEXT\t\t423\t1\tIfcTimeSeries\t1\n#\nGROUP\t424\tPset_SpaceHeaterPHistoryCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t62e33e22-c70d-4032-ba2f-3cae02922ee5\tPset_SpaceHeaterPHistoryCommon.AirResistanceCurve\tNUMBER\t\t424\t1\tIfcReal\t1\nPARAM\t8018b647-5e75-4cc7-9971-afe2a655e2fc\tPset_SpaceHeaterPHistoryCommon.AuxiliaryEnergySourceConsumption\tTEXT\t\t424\t1\tIfcLabel\t1\nPARAM\td0d3c2df-b537-4089-b7fd-6ff7e8f16527\tPset_SpaceHeaterPHistoryCommon.Effectiveness\tTEXT\t\t424\t1\tIfcLabel\t1\nPARAM\t044a88f6-4361-4681-859d-f7671c4c027a\tPset_SpaceHeaterPHistoryCommon.Exponent\tTEXT\t\t424\t1\tIfcLabel\t1\nPARAM\t0bd4775a-42a4-471d-b47f-fa7681e1e2fb\tPset_SpaceHeaterPHistoryCommon.FractionConvectiveHeatTransfer\tNUMBER\t\t424\t1\tIfcReal\t1\nPARAM\tacde0e1e-be78-4d92-9513-1acbb2455644\tPset_SpaceHeaterPHistoryCommon.FractionRadiantHeatTransfer\tNUMBER\t\t424\t1\tIfcReal\t1\nPARAM\te837d066-ecbb-43b8-9e89-08e2579e80b8\tPset_SpaceHeaterPHistoryCommon.HeatOutputRate\tNUMBER\t\t424\t1\tIfcReal\t1\nPARAM\t915a8f87-580a-4115-a657-a32dac42b1cd\tPset_SpaceHeaterPHistoryCommon.OutputCapacityCurve\tNUMBER\t\t424\t1\tIfcReal\t1\nPARAM\t4f34eb27-7cd9-4e9a-8fa3-2c18e719bd14\tPset_SpaceHeaterPHistoryCommon.SpaceAirTemperature\tNUMBER\t\t424\t1\tIfcReal\t1\nPARAM\tdddbafdc-2bcc-4e28-ad12-b021d6ebbc21\tPset_SpaceHeaterPHistoryCommon.SpaceMeanRadiantTemperature\tNUMBER\t\t424\t1\tIfcReal\t1\nPARAM\t952fe42e-143b-497d-972c-b05ac332464f\tPset_SpaceHeaterPHistoryCommon.SurfaceTemperature\tNUMBER\t\t424\t1\tIfcReal\t1\nPARAM\t4876859c-5182-4785-97ca-958d7a99815e\tPset_SpaceHeaterPHistoryCommon.UACurve\tTEXT\t\t424\t1\tIfcLabel\t1\n#\nGROUP\t425\tPset_SpaceHeaterTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4f506400-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.BodyMass\tNUMBER\t\t425\t1\tIfcMassMeasure\t1\nPARAM\t216b1f80-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.EnergySource\tTEXT\t\t425\t1\tPEnum_EnergySource\t1\nPARAM\t87dbbac4-4fbc-4a61-8fd2-ff49be7966b6\tPset_SpaceHeaterTypeCommon.HeatingSource\tTEXT\t\t425\t1\tPEnum_HeatingSource\t1\nPARAM\t07c9d800-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.HeatTransferDimension\tTEXT\t\t425\t1\tPEnum_SpaceHeaterHeatTransferDimension\t1\nPARAM\t14e6c700-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.HeatTransferMedium\tTEXT\t\t425\t1\tPEnum_HeatTransferMedium\t1\nPARAM\t74beb997-5939-4f8a-9595-948e9d954b35\tPset_SpaceHeaterTypeCommon.Material\tMULTILINETEXT\t\t425\t1\tIfcMaterial\t1\nPARAM\t6d1dc900-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.NumberOfPanels\tINTEGER\t\t425\t1\tIfcInteger\t1\nPARAM\t727b1380-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.NumberOfSections\tINTEGER\t\t425\t1\tIfcInteger\t1\nPARAM\t5d9e8000-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.OutputCapacity\tNUMBER\t\t425\t1\tIfcPowerMeasure\t1\nPARAM\te9fc7300-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.PlacementType\tTEXT\t\t425\t1\tPEnum_SpaceHeaterPlacementType\t1\nPARAM\tcafde100-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.Reference\tTEXT\t\t425\t1\tIfcIdentifier\t1\nPARAM\td224ef00-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.Status\tTEXT\t\t425\t1\tPEnum_ElementStatus\t1\nPARAM\tfbde1600-d209-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.TemperatureClassification\tTEXT\t\t425\t1\tPEnum_SpaceHeaterTemperatureClassification\t1\nPARAM\t63946100-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.ThermalEfficiency\tNUMBER\t\t425\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\t57a89f00-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeCommon.ThermalMassHeatCapacity\tNUMBER\t\t425\t1\tIfcReal\t1\n#\nGROUP\t426\tPset_SpaceHeaterTypeConvector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7e66d580-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeConvector.ConvectorType\tTEXT\t\t426\t1\tPEnum_SpaceHeaterConvectorType\t1\n#\nGROUP\t427\tPset_SpaceHeaterTypeHydronic\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t10706847-8208-49e5-82b9-e0fa7b09335c\tPset_SpaceHeaterTypeHydronic.TubingLength\tLENGTH\t\t427\t1\tIfcLengthMeasure\t1\nPARAM\t26f7234f-35b8-4c53-87c1-ab7757232c81\tPset_SpaceHeaterTypeHydronic.WaterContent\tNUMBER\t\t427\t1\tIfcMassMeasure\t1\n#\nGROUP\t428\tPset_SpaceHeaterTypeRadiator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9179a580-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeRadiator.RadiatorType\tTEXT\t\t428\t1\tPEnum_SpaceHeaterRadiatorType\t1\nPARAM\ta0f8ee80-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeRadiator.TubingLength\tLENGTH\t\t428\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta9512980-d20a-11e1-8000-00215ad4efdf\tPset_SpaceHeaterTypeRadiator.WaterContent\tNUMBER\t\t428\t1\tIfcMassMeasure\t1\n#\nGROUP\t429\tPset_SpaceLightingRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb53ceb80-d20a-11e1-8000-00215ad4efdf\tPset_SpaceLightingRequirements.ArtificialLighting\tYESNO\t\t429\t1\tIfcBoolean\t1\nPARAM\tbb32cc80-d20a-11e1-8000-00215ad4efdf\tPset_SpaceLightingRequirements.Illuminance\tNUMBER\t\t429\t1\tIfcIlluminanceMeasure\t1\n#\nGROUP\t430\tPset_SpaceOccupancyRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te0bfd600-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.AreaPerOccupant\tAREA\t\t430\t1\tIfcAreaMeasure\t1\nPARAM\teae1d480-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.IsOutlookDesirable\tYESNO\t\t430\t1\tIfcBoolean\t1\nPARAM\te61d2080-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.MinimumHeadroom\tLENGTH\t\t430\t1\tIfcLengthMeasure\t1\nPARAM\tcf76c980-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.OccupancyNumber\tINTEGER\t\t430\t1\tIfcCountMeasure\t1\nPARAM\td4d41400-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.OccupancyNumberPeak\tINTEGER\t\t430\t1\tIfcCountMeasure\t1\nPARAM\tdac9f500-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.OccupancyTimePerDay\tNUMBER\t\t430\t1\tIfcTimeMeasure\t1\nPARAM\tc84fbb80-d20a-11e1-8000-00215ad4efdf\tPset_SpaceOccupancyRequirements.OccupancyType\tTEXT\t\t430\t1\tIfcLabel\t1\n#\nGROUP\t431\tPset_SpaceParking\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta74fbc68-56e4-404f-9917-67f048ca9d23\tPset_SpaceParking.HandicapAccessible\tYESNO\t\t431\t1\tIfcBoolean\t1\nPARAM\t051bb280-d20b-11e1-8000-00215ad4efdf\tPset_SpaceParking.IsAisle\tYESNO\t\t431\t1\tIfcBoolean\t1\nPARAM\t0c42c080-d20b-11e1-8000-00215ad4efdf\tPset_SpaceParking.IsOneWay\tYESNO\t\t431\t1\tIfcBoolean\t1\nPARAM\tffbe6800-d20a-11e1-8000-00215ad4efdf\tPset_SpaceParking.ParkingUnits\tINTEGER\t\t431\t1\tIfcCountMeasure\t1\nPARAM\tf7662d00-d20a-11e1-8000-00215ad4efdf\tPset_SpaceParking.ParkingUse\tTEXT\t\t431\t1\tIfcLabel\t1\n#\nGROUP\t432\tPset_SpaceParkingAisle\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t22b7fe61-940f-4e03-986a-2b53767fdf19\tPset_SpaceParkingAisle.IsOneWay\tYESNO\t\t432\t1\tIfcBoolean\t1\n#\nGROUP\t433\tPset_SpaceProgramCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\taea900b9-903d-4930-8483-4944fef95679\tPset_SpaceProgramCommon.EmployeeType\tTEXT\t\t433\t1\tIfcLabel\t1\nPARAM\ta6c1ab03-871f-496b-abc7-f559102cd20b\tPset_SpaceProgramCommon.FFETypeRequirement\tTEXT\t\t433\t1\tIfcLabel\t1\nPARAM\tc14d78a9-02be-4122-bcf6-340f21698bb6\tPset_SpaceProgramCommon.FunctionRequirement\tTEXT\t\t433\t1\tIfcLabel\t1\nPARAM\t45baac17-7aa0-4f18-8db4-174d9979e4c8\tPset_SpaceProgramCommon.LightingRequirement\tTEXT\t\t433\t1\tIfcLabel\t1\nPARAM\t3c6211fa-862f-4390-83f3-54d0d71c6f1c\tPset_SpaceProgramCommon.Location\tTEXT\t\t433\t1\tIfcLabel\t1\nPARAM\t7de36c01-c87e-4815-baaa-b3958359cc27\tPset_SpaceProgramCommon.OccupancyNumber\tINTEGER\t\t433\t1\tIfcCountMeasure\t1\nPARAM\t3db64fb4-4490-439d-88d4-54687e350137\tPset_SpaceProgramCommon.OccupancyType\tTEXT\t\t433\t1\tIfcLabel\t1\nPARAM\t0635a2ad-b72d-4030-af13-91b85876df2a\tPset_SpaceProgramCommon.PrivacyRequirement\tTEXT\t\t433\t1\tIfcLabel\t1\nPARAM\t2b0b297c-311c-4bd6-a396-c276d67c2013\tPset_SpaceProgramCommon.SecurityRequirement\tTEXT\t\t433\t1\tIfcLabel\t1\n#\nGROUP\t434\tPset_SpaceThermalDesign\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t617ed200-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.BoundaryAreaHeatLoss\tNUMBER\t\t434\t1\tIfcHeatFluxDensityMeasure\t1\nPARAM\t5a57c400-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.CeilingRAPlenum\tYESNO\t\t434\t1\tIfcBoolean\t1\nPARAM\t19f84600-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.CoolingDesignAirflow\tNUMBER\t\t434\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t385e4180-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.CoolingDryBulb\tNUMBER\t\t434\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t3dbb8c00-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.CoolingRelativeHumidity\tNUMBER\t\t434\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t54fa7980-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.ExhaustAirFlowrate\tNUMBER\t\t434\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t1fee2700-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.HeatingDesignAirflow\tNUMBER\t\t434\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t43b16d00-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.HeatingDryBulb\tNUMBER\t\t434\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t490eb780-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.HeatingRelativeHumidity\tNUMBER\t\t434\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t2c727f80-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.TotalHeatGain\tNUMBER\t\t434\t1\tIfcPowerMeasure\t1\nPARAM\t31373380-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.TotalHeatLoss\tNUMBER\t\t434\t1\tIfcPowerMeasure\t1\nPARAM\t25e40800-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.TotalSensibleHeatGain\tNUMBER\t\t434\t1\tIfcPowerMeasure\t1\nPARAM\t4f9d2f00-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalDesign.VentilationAirFlowrate\tNUMBER\t\t434\t1\tIfcVolumetricFlowRateMeasure\t1\n#\nGROUP\t435\tPset_SpaceThermalLoad\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta4d94080-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.AirExchangeRate\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\tbfabb500-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.DryBulbTemperature\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t807d6400-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.EquipmentSensible\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t9db23280-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.ExhaustAir\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\tce926780-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.InfiltrationSensible\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t7491a200-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.Lighting\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t6e032a80-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.People\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t9723bb00-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.RecirculatedAir\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\tc6d2c300-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.RelativeHumidity\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\tde11b080-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.TotalLatentLoad\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\te8cc4580-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.TotalRadiantLoad\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\td6520c00-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.TotalSensibleLoad\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t870bdb80-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.VentilationIndoorAir\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\nPARAM\t8f641680-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoad.VentilationOutdoorAir\tMULTILINETEXT\t\t435\t1\tPropertyBoundedValue\t1\n#\nGROUP\t436\tPset_SpaceThermalLoadPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0bf6f500-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.AirExchangeRate\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\t0f8a7c00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.DryBulbTemperature\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\tfda8d900-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.EquipmentSensible\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\t08fc0480-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.ExhaustAir\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\t15805d00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.InfiltrationSensible\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\tfaade880-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.Lighting\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\tf7b2f800-d20b-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.People\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\t06011400-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.RecirculatedAir\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\t12856c80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.RelativeHumidity\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\t1b763e00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.TotalLatentLoad\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\t1e712e80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.TotalRadiantLoad\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\t187b4d80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.TotalSensibleLoad\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\t000b3300-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.VentilationIndoorAir\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\nPARAM\t03062380-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalLoadPHistory.VentilationOutdoorAir\tMULTILINETEXT\t\t436\t1\tIfcTimeSeries\t1\n#\nGROUP\t437\tPset_SpaceThermalPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t27fa9680-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalPHistory.CoolingAirFlowRate\tMULTILINETEXT\t\t437\t1\tIfcTimeSeries\t1\nPARAM\t3183fe80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalPHistory.ExhaustAirFlowRate\tMULTILINETEXT\t\t437\t1\tIfcTimeSeries\t1\nPARAM\t2b8e1d80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalPHistory.HeatingAirFlowRate\tMULTILINETEXT\t\t437\t1\tIfcTimeSeries\t1\nPARAM\t38ab0c80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalPHistory.SpaceRelativeHumidity\tMULTILINETEXT\t\t437\t1\tIfcTimeSeries\t1\nPARAM\t35178580-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalPHistory.SpaceTemperature\tMULTILINETEXT\t\t437\t1\tIfcTimeSeries\t1\nPARAM\t2e890e00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalPHistory.VentilationAirFlowRate\tMULTILINETEXT\t\t437\t1\tIfcTimeSeries\t1\n#\nGROUP\t438\tPset_SpaceThermalRequirements\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9fc8c100-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.AirConditioning\tYESNO\t\t438\t1\tIfcBoolean\t1\nPARAM\ta5bea200-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.AirConditioningCentral\tYESNO\t\t438\t1\tIfcBoolean\t1\nPARAM\t86c01000-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.DiscontinuedHeating\tYESNO\t\t438\t1\tIfcBoolean\t1\nPARAM\t9a6b7680-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.MechanicalVentilationRate\tINTEGER\t\t438\t1\tIfcCountMeasure\t1\nPARAM\t8d4e8780-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.NaturalVentilation\tYESNO\t\t438\t1\tIfcBoolean\t1\nPARAM\t94759580-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.NaturalVentilationRate\tINTEGER\t\t438\t1\tIfcCountMeasure\t1\nPARAM\t6bed9b80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceHumidity\tNUMBER\t\t438\t1\tIfcRatioMeasure\t1\nPARAM\t70b24f80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceHumidityMax\tNUMBER\t\t438\t1\tIfcRatioMeasure\t1\nPARAM\t76a83080-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceHumidityMin\tNUMBER\t\t438\t1\tIfcRatioMeasure\t1\nPARAM\t7c057b00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceHumiditySummer\tNUMBER\t\t438\t1\tIfcRatioMeasure\t1\nPARAM\t8162c580-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceHumidityWinter\tNUMBER\t\t438\t1\tIfcRatioMeasure\t1\nPARAM\t42cd0b00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperature\tNUMBER\t\t438\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t48c2ec00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperatureMax\tNUMBER\t\t438\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t4eb8cd00-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperatureMin\tNUMBER\t\t438\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t5b987553-d57e-4bf3-8014-90787ba00b54\tPset_SpaceThermalRequirements.SpaceTemperatureSummer\tNUMBER\t\t438\t1\tIfcThermodynamicTemperatureMeasure \t1\nPARAM\t54161780-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperatureSummerMax\tNUMBER\t\t438\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t5a0bf880-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperatureSummerMin\tNUMBER\t\t438\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\taf976ddd-94b0-4d46-907c-e92f6bc5ec4e\tPset_SpaceThermalRequirements.SpaceTemperatureWinter\tNUMBER\t\t438\t1\tIfcThermodynamicTemperatureMeasure \t1\nPARAM\t6001d980-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperatureWinterMax\tNUMBER\t\t438\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t65f7ba80-d20c-11e1-8000-00215ad4efdf\tPset_SpaceThermalRequirements.SpaceTemperatureWinterMin\tNUMBER\t\t438\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t439\tPset_SpatialZoneCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3ae302c7-0c29-4228-89f6-f36a68e14a44\tPset_SpatialZoneCommon.IsExternal\tYESNO\t\t439\t1\tIfcBoolean\t1\nPARAM\t09e2b7b5-4192-4636-a1d5-31d532a1a8d2\tPset_SpatialZoneCommon.Reference\tTEXT\t\t439\t1\tIfcIdentifier\t1\n#\nGROUP\t440\tPset_StackTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb2db9100-d20c-11e1-8000-00215ad4efdf\tPset_StackTerminalTypeCommon.Reference\tTEXT\t\t440\t1\tIfcIdentifier\t1\nPARAM\tb838db80-d20c-11e1-8000-00215ad4efdf\tPset_StackTerminalTypeCommon.Status\tTEXT\t\t440\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t441\tPset_StairCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t22518080-d20d-11e1-8000-00215ad4efdf\tPset_StairCommon.FireExit\tYESNO\t\t441\t1\tIfcBoolean\t1\nPARAM\t19f94580-d20d-11e1-8000-00215ad4efdf\tPset_StairCommon.FireRating\tTEXT\t\t441\t1\tIfcLabel\t1\nPARAM\t0cdc5680-d20d-11e1-8000-00215ad4efdf\tPset_StairCommon.HandicapAccessible\tYESNO\t\t441\t1\tIfcBoolean\t1\nPARAM\t29788e80-d20d-11e1-8000-00215ad4efdf\tPset_StairCommon.HasNonSkidSurface\tYESNO\t\t441\t1\tIfcBoolean\t1\nPARAM\t136ace00-d20d-11e1-8000-00215ad4efdf\tPset_StairCommon.IsExternal\tYESNO\t\t441\t1\tIfcBoolean\t1\nPARAM\t8fc535f6-6e7a-4d68-99fd-3b4218b31836\tPset_StairCommon.LoadBearing\tYESNO\t\t441\t1\tIfcBoolean\t1\nPARAM\ta9e3055e-9126-471c-aa4a-118eb84c2751\tPset_StairCommon.NosingLength\tLENGTH\t\t441\t1\tIfcLengthMeasure\t1\nPARAM\te8807a00-d20c-11e1-8000-00215ad4efdf\tPset_StairCommon.NumberOfRiser\tINTEGER\t\t441\t1\tIfcCountMeasure\t1\nPARAM\ted452e00-d20c-11e1-8000-00215ad4efdf\tPset_StairCommon.NumberOfTreads\tINTEGER\t\t441\t1\tIfcCountMeasure\t1\nPARAM\td272b980-d20c-11e1-8000-00215ad4efdf\tPset_StairCommon.Reference\tTEXT\t\t441\t1\tIfcIdentifier\t1\nPARAM\t04841b80-d20d-11e1-8000-00215ad4efdf\tPset_StairCommon.RequiredHeadroom\tLENGTH\t\t441\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf2a27880-d20c-11e1-8000-00215ad4efdf\tPset_StairCommon.RiserHeight\tLENGTH\t\t441\t1\tIfcPositiveLengthMeasure\t1\nPARAM\td9013100-d20c-11e1-8000-00215ad4efdf\tPset_StairCommon.Status\tTEXT\t\t441\t1\tPEnum_ElementStatus\t1\nPARAM\te2afaa3c-a326-44f2-94f3-a4fb08059fc3\tPset_StairCommon.ThermalTransmittance\tNUMBER\t\t441\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\tfafab380-d20c-11e1-8000-00215ad4efdf\tPset_StairCommon.TreadLength\tLENGTH\t\t441\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9996d6e7-f7ec-4fb9-973c-027edc7fc421\tPset_StairCommon.TreadLengthAtInnerSide\tLENGTH\t\t441\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t468b4f6c-361b-4ced-8545-cc440b4d8a1d\tPset_StairCommon.TreadLengthAtOffset\tLENGTH\t\t441\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t47b259a7-db12-46f4-87ec-f6049461cc52\tPset_StairCommon.WaistThickness\tLENGTH\t\t441\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t975f98e2-5ec8-4e4d-ad52-a2fb2cad197c\tPset_StairCommon.WalkingLineOffset\tLENGTH\t\t441\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t442\tPset_StairFlightCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8bd18f00-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.Headroom\tLENGTH\t\t442\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6c3a6680-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.NosingLength\tLENGTH\t\t442\t1\tIfcLengthMeasure\t1\nPARAM\t4f059800-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.NumberOfRiser\tINTEGER\t\t442\t1\tIfcCountMeasure\t1\nPARAM\t54fb7900-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.NumberOfTreads\tINTEGER\t\t442\t1\tIfcCountMeasure\t1\nPARAM\t39906e00-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.Reference\tTEXT\t\t442\t1\tIfcIdentifier\t1\nPARAM\t5af15a00-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.RiserHeight\tLENGTH\t\t442\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t401ee580-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.Status\tTEXT\t\t442\t1\tPEnum_ElementStatus\t1\nPARAM\t63499500-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.TreadLength\tLENGTH\t\t442\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8411ea80-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.TreadLengthAtInnerSide\tLENGTH\t\t442\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7b211900-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.TreadLengthAtOffset\tLENGTH\t\t442\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9429ca00-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.WaistThickness\tLENGTH\t\t442\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7197b100-d20d-11e1-8000-00215ad4efdf\tPset_StairFlightCommon.WalkingLineOffset\tLENGTH\t\t442\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t443\tPset_StructuralSurfaceMemberVaryingThickness\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1f2c5ae6-f4a4-4733-969a-effb41892a77\tPset_StructuralSurfaceMemberVaryingThickness.Location1Global\tMULTILINETEXT\t\t443\t1\tPropertyListValue\t1\nPARAM\tbd40a904-6365-4cfb-9cd6-4f425f027504\tPset_StructuralSurfaceMemberVaryingThickness.Location1Local\tMULTILINETEXT\t\t443\t1\tPropertyListValue\t1\nPARAM\tcffbd577-c8ae-4ae3-b9c7-f17891e8b4d8\tPset_StructuralSurfaceMemberVaryingThickness.Location2Global\tMULTILINETEXT\t\t443\t1\tPropertyListValue\t1\nPARAM\t058e4602-830c-41f4-862b-1d1c7338a7b0\tPset_StructuralSurfaceMemberVaryingThickness.Location2Local\tMULTILINETEXT\t\t443\t1\tPropertyListValue\t1\nPARAM\t8fa1dfe7-5189-4b6a-96e0-71431b39e282\tPset_StructuralSurfaceMemberVaryingThickness.Location3Global\tMULTILINETEXT\t\t443\t1\tPropertyListValue\t1\nPARAM\t441117ba-4772-4c3e-946e-ac44f07c39da\tPset_StructuralSurfaceMemberVaryingThickness.Location3Local\tMULTILINETEXT\t\t443\t1\tPropertyListValue\t1\nPARAM\tb96886be-793e-4099-b0a2-8924bfd23b83\tPset_StructuralSurfaceMemberVaryingThickness.Thickness1\tLENGTH\t\t443\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t054660e6-4799-4621-a6bd-ad29616d79b0\tPset_StructuralSurfaceMemberVaryingThickness.Thickness2\tLENGTH\t\t443\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t27d5c5a6-13ac-4c96-a769-fb075fde8178\tPset_StructuralSurfaceMemberVaryingThickness.Thickness3\tLENGTH\t\t443\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t444\tPset_SwitchingDeviceTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcd623a00-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.HasLock\tYESNO\t\t444\t1\tIfcBoolean\t1\nPARAM\td4894800-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.IsIlluminated\tYESNO\t\t444\t1\tIfcBoolean\t1\nPARAM\tdb17bf80-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.Legend\tTEXT\t\t444\t1\tIfcLabel\t1\nPARAM\tb885a680-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.NumberOfGangs\tINTEGER\t\t444\t1\tIfcInteger\t1\nPARAM\ta277e600-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.Reference\tTEXT\t\t444\t1\tIfcIdentifier\t1\nPARAM\te2d76400-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.SetPoint\tMULTILINETEXT\t\t444\t1\tPropertyTableValue\t1\nPARAM\ta9065d80-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.Status\tTEXT\t\t444\t1\tPEnum_ElementStatus\t1\nPARAM\tbde2f100-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeCommon.SwitchFunction\tTEXT\t\t444\t1\tPEnum_SwitchFunctionType\t1\n#\nGROUP\t445\tPset_SwitchingDeviceTypeContactor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf7b3f780-d20d-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeContactor.ContactorType\tTEXT\t\t445\t1\tPEnum_ContactorType\t1\n#\nGROUP\t446\tPset_SwitchingDeviceTypeDimmerSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t11edd580-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeDimmerSwitch.DimmerType\tTEXT\t\t446\t1\tPEnum_SwitchingDeviceDimmerSwitchType\t1\n#\nGROUP\t447\tPset_SwitchingDeviceTypeEmergencyStop\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t25993c00-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeEmergencyStop.SwitchOperation\tTEXT\t\t447\t1\tPEnum_SwitchingDeviceEmergencyStopType\t1\n#\nGROUP\t448\tPset_SwitchingDeviceTypeKeypad\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t38137580-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeKeypad.KeypadType\tTEXT\t\t448\t1\tPEnum_SwitchingDeviceKeypadType\t1\n#\nGROUP\t449\tPset_SwitchingDeviceTypeMomentarySwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4c577280-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeMomentarySwitch.MomentaryType\tTEXT\t\t449\t1\tPEnum_SwitchingDeviceMomentarySwitchType\t1\n#\nGROUP\t450\tPset_SwitchingDeviceTypePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5b3e2500-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypePHistory.SetPoint\tMULTILINETEXT\t\t450\t1\tIfcTimeSeries\t1\n#\nGROUP\t451\tPset_SwitchingDeviceTypeSelectorSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t63966000-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeSelectorSwitch.SelectorType\tTEXT\t\t451\t1\tPEnum_SwitchingDeviceDimmerSwitchType\t1\nPARAM\t80cb2e80-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeSelectorSwitch.SwitchActivation\tTEXT\t\t451\t1\tPEnum_SwitchActivation\t1\nPARAM\t701ab880-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeSelectorSwitch.SwitchUsage\tTEXT\t\t451\t1\tPEnum_SwitchUsage\t1\n#\nGROUP\t452\tPset_SwitchingDeviceTypeStarter\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t99d3df80-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeStarter.StarterType\tTEXT\t\t452\t1\tPEnum_StarterType\t1\n#\nGROUP\t453\tPset_SwitchingDeviceTypeSwitchDisconnector\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0efd4e43-16e2-4682-990c-0b78cd08ca44\tPset_SwitchingDeviceTypeSwitchDisconnector.HasVisualIndication\tYESNO\t\t453\t1\tIfcBoolean\t1\nPARAM\tc5ef6080-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeSwitchDisconnector.LoadDisconnectionType\tTEXT\t\t453\t1\tPEnum_LoadDisconnectionType\t1\nPARAM\tb3752700-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeSwitchDisconnector.SwitchDisconnectorType\tTEXT\t\t453\t1\tPEnum_SwitchDisconnectorType\t1\n#\nGROUP\t454\tPset_SwitchingDeviceTypeToggleSwitch\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdf0b5831-dd4c-40c7-b3b3-6de4b38c311c\tPset_SwitchingDeviceTypeToggleSwitch.IsIlluminated\tYESNO\t\t454\t1\tIfcBoolean\t1\nPARAM\tdb279ca8-2c04-41e8-a1ae-164677c1c667\tPset_SwitchingDeviceTypeToggleSwitch.Legend\tTEXT\t\t454\t1\tIfcLabel\t1\nPARAM\tfdf6a380-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeToggleSwitch.SwitchActivation\tTEXT\t\t454\t1\tPEnum_SwitchActivation\t1\nPARAM\teddec400-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeToggleSwitch.SwitchUsage\tTEXT\t\t454\t1\tPEnum_SwitchUsage\t1\nPARAM\td9023080-d20e-11e1-8000-00215ad4efdf\tPset_SwitchingDeviceTypeToggleSwitch.ToggleSwitchType\tTEXT\t\t454\t1\tPEnum_SwitchingDeviceToggleSwitchType\t1\n#\nGROUP\t455\tPset_SystemFurnitureElementTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t35655000-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeCommon.Finishing\tTEXT\t\t455\t1\tIfcLabel\t1\nPARAM\t1d8dcc00-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeCommon.GroupCode\tTEXT\t\t455\t1\tIfcIdentifier\t1\nPARAM\t16ff5480-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeCommon.IsUsed\tYESNO\t\t455\t1\tIfcBoolean\t1\nPARAM\t2d0d1500-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeCommon.NominalHeight\tLENGTH\t\t455\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t24b4da00-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeCommon.NominalWidth\tLENGTH\t\t455\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t456\tPset_SystemFurnitureElementTypePanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a41e380-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypePanel.FurniturePanelType\tTEXT\t\t456\t1\tPEnum_FurniturePanelType\t1\nPARAM\t43b36c00-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypePanel.HasOpening\tYESNO\t\t456\t1\tIfcBoolean\t1\nPARAM\t5e85e080-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypePanel.NominalThickness\tLENGTH\t\t456\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t457\tPset_SystemFurnitureElementTypeWorkSurface\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t807f6300-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeWorkSurface.HangingHeight\tLENGTH\t\t457\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8a08cb00-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeWorkSurface.NominalThickness\tLENGTH\t\t457\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t92610600-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeWorkSurface.ShapeDescription\tTEXT\t\t457\t1\tIfcLabel\t1\nPARAM\t73fb0a80-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeWorkSurface.SupportType\tTEXT\t\t457\t1\tPEnum_FurniturePanelType\t1\nPARAM\t6cd3fc80-d20f-11e1-8000-00215ad4efdf\tPset_SystemFurnitureElementTypeWorkSurface.UsePurpose\tTEXT\t\t457\t1\tIfcLabel\t1\n#\nGROUP\t458\tPset_TankOccurrence\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tad337a80-d20f-11e1-8000-00215ad4efdf\tPset_TankOccurrence.HasLadder\tYESNO\t\t458\t1\tIfcBoolean\t1\nPARAM\tb3c1f200-d20f-11e1-8000-00215ad4efdf\tPset_TankOccurrence.HasVisualIndicator\tYESNO\t\t458\t1\tIfcBoolean\t1\nPARAM\ta0af2200-d20f-11e1-8000-00215ad4efdf\tPset_TankOccurrence.TankComposition\tTEXT\t\t458\t1\tPEnum_TankComposition\t1\n#\nGROUP\t459\tPset_TankPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8fa541df-39a0-4896-9706-7a0165b4dd83\tPset_TankPHistory.Level\tMULTILINETEXT\t\t459\t1\tIfcTimeSeries\t1\nPARAM\t4f41ecc2-4f1b-4dc0-981c-a475bd7927d0\tPset_TankPHistory.Pressure\tNUMBER\t\t459\t1\tIfcPressureMeasure\t1\nPARAM\t7be8fc90-c36f-4ab3-9132-6f58dc7ec77c\tPset_TankPHistory.Temperature\tNUMBER\t\t459\t1\tIfcThermodynamicTemperatureMeasure\t1\n#\nGROUP\t460\tPset_TankTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td2c08400-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.AccessType\tTEXT\t\t460\t1\tPEnum_TankAccessType\t1\nPARAM\t0ac7c700-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.EffectiveCapacity\tVOLUME\t\t460\t1\tIfcVolumeMeasure\t1\nPARAM\t1f0bc400-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.EndShapeType\tTEXT\t\t460\t1\tPEnum_EndShapeType\t1\nPARAM\t2cc14980-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.FirstCurvatureRadius\tLENGTH\t\t460\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t290da519-48fe-4c9e-ba6f-cb26e41d3ae8\tPset_TankTypeCommon.Material\tMULTILINETEXT\t\t460\t1\tIfcMaterial\t1\nPARAM\t509267e8-33c0-493e-96ce-d9cd3039dce1\tPset_TankTypeCommon.MaterialThickness\tLENGTH\t\t460\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t069ba980-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.NominalCapacity\tVOLUME\t\t460\t1\tIfcVolumeMeasure\t1\nPARAM\tfedc0500-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.NominalDepth\tLENGTH\t\t460\t1\tIfcPositiveLengthMeasure\t1\nPARAM\teff55280-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.NominalLengthOrDiameter\tLENGTH\t\t460\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf7b4f700-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.NominalWidthOrDiameter\tLENGTH\t\t460\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3cd92900-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.NumberOfSections\tINTEGER\t\t460\t1\tIfcInteger\t1\nPARAM\t0f8c7b00-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.OperatingWeight\tNUMBER\t\t460\t1\tIfcMassMeasure\t1\nPARAM\t14512f00-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.PatternType\tTEXT\t\t460\t1\tPEnum_TankPatternType\t1\nPARAM\tc0464a80-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.Reference\tTEXT\t\t460\t1\tIfcIdentifier\t1\nPARAM\t3480ee00-d210-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.SecondCurvatureRadius\tLENGTH\t\t460\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc5a39500-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.Status\tTEXT\t\t460\t1\tPEnum_ElementStatus\t1\nPARAM\te0760980-d20f-11e1-8000-00215ad4efdf\tPset_TankTypeCommon.StorageType\tTEXT\t\t460\t1\tPEnum_TankStorageType\t1\nPARAM\td7a336cd-c824-4b16-9ac6-9de8cf8ebc1c\tPset_TankTypeCommon.Type\tTEXT\t\t460\t1\tPEnum_TankType\t1\n#\nGROUP\t461\tPset_TankTypeExpansion\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48c4eb00-d210-11e1-8000-00215ad4efdf\tPset_TankTypeExpansion.ChargePressure\tNUMBER\t\t461\t1\tIfcPressureMeasure\t1\nPARAM\t5a0df780-d210-11e1-8000-00215ad4efdf\tPset_TankTypeExpansion.PressureRegulatorSetting\tNUMBER\t\t461\t1\tIfcPressureMeasure\t1\nPARAM\t5f6b4200-d210-11e1-8000-00215ad4efdf\tPset_TankTypeExpansion.ReliefValveSetting\tNUMBER\t\t461\t1\tIfcPressureMeasure\t1\n#\nGROUP\t462\tPset_TankTypePreformed\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7873f300-d210-11e1-8000-00215ad4efdf\tPset_TankTypePreformed.EndShapeType\tTEXT\t\t462\t1\tPEnum_EndShapeType\t1\nPARAM\t89246900-d210-11e1-8000-00215ad4efdf\tPset_TankTypePreformed.FirstCurvatureRadius\tLENGTH\t\t462\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6b570400-d210-11e1-8000-00215ad4efdf\tPset_TankTypePreformed.PatternType\tTEXT\t\t462\t1\tPEnum_TankPatternType\t1\nPARAM\t92add100-d210-11e1-8000-00215ad4efdf\tPset_TankTypePreformed.SecondCurvatureRadius\tLENGTH\t\t462\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t463\tPset_TankTypePressureVessel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta2c5b080-d210-11e1-8000-00215ad4efdf\tPset_TankTypePressureVessel.ChargePressure\tNUMBER\t\t463\t1\tIfcPressureMeasure\t1\nPARAM\ta9ecbe80-d210-11e1-8000-00215ad4efdf\tPset_TankTypePressureVessel.PressureRegulatorSetting\tNUMBER\t\t463\t1\tIfcPressureMeasure\t1\nPARAM\tb07b3600-d210-11e1-8000-00215ad4efdf\tPset_TankTypePressureVessel.ReliefValveSetting\tNUMBER\t\t463\t1\tIfcPressureMeasure\t1\n#\nGROUP\t464\tPset_TankTypeSectional\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbd982500-d210-11e1-8000-00215ad4efdf\tPset_TankTypeSectional.NumberOfSections\tINTEGER\t\t464\t1\tIfcInteger\t1\nPARAM\tc4269c80-d210-11e1-8000-00215ad4efdf\tPset_TankTypeSectional.SectionLength\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tcd176e00-d210-11e1-8000-00215ad4efdf\tPset_TankTypeSectional.SectionWidth\tLENGTH\t\t464\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t465\tPset_TendonAnchorCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb5971383-4774-4d1a-b5bc-124390a70bbc\tPset_TendonAnchorCommon.Reference\tTEXT\t\t465\t1\tIfcIdentifier\t1\nPARAM\t3a18c38e-e4b4-48f8-8098-819b3ff33013\tPset_TendonAnchorCommon.Status\tTEXT\t\t465\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t466\tPset_TendonCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t77759cd6-099e-4656-9c74-fe2dbd0605c0\tPset_TendonCommon.AnchorageSlip\tLENGTH\t\t466\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taf2e2873-a344-40a4-a639-13f2b8958528\tPset_TendonCommon.FrictionCoefficient\tNUMBER\t\t466\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\te3ef2b0d-f418-42df-a5e3-f69de6adbd7f\tPset_TendonCommon.MinCurvatureRadius\tLENGTH\t\t466\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t0a226221-13c6-42ed-8538-929d572f6910\tPset_TendonCommon.NominalDiameter\tLENGTH\t\t466\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t394262a7-521b-4e97-a665-dc358cf7cdda\tPset_TendonCommon.PreStress\tNUMBER\t\t466\t1\tIfcPressureMeasure\t1\nPARAM\t76ffa86f-ceff-4260-a836-d0c072b7e32c\tPset_TendonCommon.Reference\tTEXT\t\t466\t1\tIfcIdentifier\t1\nPARAM\ta54972ba-690e-404d-b974-4a365cecd3b3\tPset_TendonCommon.SheathDiameter\tLENGTH\t\t466\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taaf163da-0d95-48da-9eef-b0ef76abcde1\tPset_TendonCommon.Status\tTEXT\t\t466\t1\tPEnum_ElementStatus\t1\nPARAM\t885d4f56-9ff4-4e79-ba7b-8caf8e151367\tPset_TendonCommon.TensionForce\tNUMBER\t\t466\t1\tIfcForceMeasure\t1\n#\nGROUP\t467\tPset_ThermalLoadAggregate\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0059fd00-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.ApplianceDiversity\tNUMBER\t\t467\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf33d0e00-d210-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.InfiltrationDiversitySummer\tNUMBER\t\t467\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf9cb8580-d210-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.InfiltrationDiversityWinter\tNUMBER\t\t467\t1\tIfcPositiveRatioMeasure\t1\nPARAM\teae4d300-d210-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.LightingDiversity\tNUMBER\t\t467\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t064fde00-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.LoadSafetyFactor\tNUMBER\t\t467\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tdf91a780-d210-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.TotalCoolingLoad\tNUMBER\t\t467\t1\tIfcPowerMeasure\t1\nPARAM\te4eef200-d210-11e1-8000-00215ad4efdf\tPset_ThermalLoadAggregate.TotalHeatingLoad\tNUMBER\t\t467\t1\tIfcPowerMeasure\t1\n#\nGROUP\t468\tPset_ThermalLoadDesignCriteria\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2aabba80-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadDesignCriteria.AppliancePercentLoadToRadiant\tNUMBER\t\t468\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t313a3200-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadDesignCriteria.LightingLoadIntensity\tNUMBER\t\t468\t1\tIfcReal\t1\nPARAM\t37c8a980-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadDesignCriteria.LightingPercentLoadToReturnAir\tNUMBER\t\t468\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t18ca1780-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadDesignCriteria.OccupancyDiversity\tNUMBER\t\t468\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t1ebff880-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadDesignCriteria.OutsideAirPerPerson\tNUMBER\t\t468\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t24b5d980-d211-11e1-8000-00215ad4efdf\tPset_ThermalLoadDesignCriteria.ReceptacleLoadIntensity\tNUMBER\t\t468\t1\tIfcReal\t1\n#\nGROUP\t469\tPset_TransformerTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta438b8c2-7a9c-4e9d-9976-e29609f23d3c\tPset_TransformerTypeCommon.EfficiencyCurve\tMULTILINETEXT\t\t469\t1\tPropertyTableValue\t1\nPARAM\tac9be380-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.ImaginaryImpedanceRatio\tNUMBER\t\t469\t1\tIfcRatioMeasure\t1\nPARAM\td228ed00-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.IsNeutralPrimaryTerminalAvailable\tYESNO\t\t469\t1\tIfcBoolean\t1\nPARAM\td94ffb00-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.IsNeutralSecondaryTerminalAvailable\tYESNO\t\t469\t1\tIfcBoolean\t1\nPARAM\t8f671500-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.MaximumApparentPower\tNUMBER\t\t469\t1\tIfcPowerMeasure\t1\nPARAM\t837b5300-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.PrimaryApparentPower\tNUMBER\t\t469\t1\tIfcPowerMeasure\t1\nPARAM\t6a72a200-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.PrimaryCurrent\tNUMBER\t\t469\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t778f9100-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.PrimaryFrequency\tNUMBER\t\t469\t1\tIfcFrequencyMeasure\t1\nPARAM\t5dee4980-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.PrimaryVoltage\tNUMBER\t\t469\t1\tIfcElectricVoltageMeasure\t1\nPARAM\t57cfcbd7-f9f6-45e7-b359-f754cd1030db\tPset_TransformerTypeCommon.RadiativeFraction\tNUMBER\t\t469\t1\tIfcNormalisedRatioMeasure\t1\nPARAM\ta6a60280-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.RealImpedanceRatio\tNUMBER\t\t469\t1\tIfcRatioMeasure\t1\nPARAM\t444d0200-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.Reference\tTEXT\t\t469\t1\tIfcIdentifier\t1\nPARAM\t89713400-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.SecondaryApparentPower\tNUMBER\t\t469\t1\tIfcPowerMeasure\t1\nPARAM\t71011980-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.SecondaryCurrent\tNUMBER\t\t469\t1\tIfcElectricCurrentMeasure\t1\nPARAM\t94c45f80-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.SecondaryCurrentType\tTEXT\t\t469\t1\tPEnum_SecondaryCurrentType\t1\nPARAM\t7e1e0880-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.SecondaryFrequency\tNUMBER\t\t469\t1\tIfcFrequencyMeasure\t1\nPARAM\t634b9400-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.SecondaryVoltage\tNUMBER\t\t469\t1\tIfcElectricVoltageMeasure\t1\nPARAM\ta0b02180-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.ShortCircuitVoltage\tMULTILINETEXT\t\t469\t1\tIfcComplexNumber\t1\nPARAM\t4b741000-d211-11e1-8000-00215ad4efdf\tPset_TransformerTypeCommon.Status\tTEXT\t\t469\t1\tPEnum_ElementStatus\t1\nPARAM\t95580b08-0033-4fb1-80f4-ce1d5048a707\tPset_TransformerTypeCommon.TransformerVectorGroup\tTEXT\t\t469\t1\tPEnum_TransformerVectorGroup\t1\n#\nGROUP\t470\tPset_TransportElementCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t000e3180-d212-11e1-8000-00215ad4efdf\tPset_TransportElementCommon.CapacityPeople\tINTEGER\t\t470\t1\tIfcCountMeasure\t1\nPARAM\t056b7c00-d212-11e1-8000-00215ad4efdf\tPset_TransportElementCommon.CapacityWeight\tNUMBER\t\t470\t1\tIfcMassMeasure\t1\nPARAM\t0c928a00-d212-11e1-8000-00215ad4efdf\tPset_TransportElementCommon.FireExit\tYESNO\t\t470\t1\tIfcBoolean\t1\nPARAM\te967da80-d211-11e1-8000-00215ad4efdf\tPset_TransportElementCommon.Reference\tTEXT\t\t470\t1\tIfcIdentifier\t1\nPARAM\teff65200-d211-11e1-8000-00215ad4efdf\tPset_TransportElementCommon.Status\tTEXT\t\t470\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t471\tPset_TransportElementElevator\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t29c75880-d212-11e1-8000-00215ad4efdf\tPset_TransportElementElevator.ClearDepth\tLENGTH\t\t471\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t321f9380-d212-11e1-8000-00215ad4efdf\tPset_TransportElementElevator.ClearHeight\tLENGTH\t\t471\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t20d68700-d212-11e1-8000-00215ad4efdf\tPset_TransportElementElevator.ClearWidth\tLENGTH\t\t471\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t1a480f80-d212-11e1-8000-00215ad4efdf\tPset_TransportElementElevator.FireFightingLift\tYESNO\t\t471\t1\tIfcBoolean\t1\n#\nGROUP\t472\tPset_TubeBundleTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t757a0200-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.FoulingFactor\tNUMBER\t\t472\t1\tIfcThermalResistanceMeasure\t1\nPARAM\tb8d47080-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.HasTurbulator\tYESNO\t\t472\t1\tIfcBoolean\t1\nPARAM\ta78b6400-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.HorizontalSpacing\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t672be600-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.InLineRowSpacing\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9f332900-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.InsideDiameter\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t80349700-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.Length\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t39dee270-b6c7-4be8-afa7-dd9b432ff013\tPset_TubeBundleTypeCommon.Material\tMULTILINETEXT\t\t472\t1\tIfcMaterial\t1\nPARAM\t8e82b300-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.NominalDiameter\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t701cb780-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.NumberOfCircuits\tINTEGER\t\t472\t1\tIfcInteger\t1\nPARAM\t58453380-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.NumberOfRows\tINTEGER\t\t472\t1\tIfcInteger\t1\nPARAM\t96daee00-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.OutsideDiameter\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t42377300-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.Reference\tTEXT\t\t472\t1\tIfcIdentifier\t1\nPARAM\t5ed3ab00-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.StaggeredRowSpacing\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t48c5ea80-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.Status\tTEXT\t\t472\t1\tPEnum_ElementStatus\t1\nPARAM\t7ad74c80-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.ThermalConductivity\tNUMBER\t\t472\t1\tIfcThermalConductivityMeasure\t1\nPARAM\tb07c3580-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.VerticalSpacing\tLENGTH\t\t472\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t89256880-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeCommon.Volume\tVOLUME\t\t472\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t473\tPset_TubeBundleTypeFinned\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf33e0d80-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.Diameter\tLENGTH\t\t473\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfc2edf00-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.FinCorrugatedType\tTEXT\t\t473\t1\tIfcLabel\t1\nPARAM\t0355ed00-d213-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.HasCoating\tYESNO\t\t473\t1\tIfcBoolean\t1\nPARAM\te9b4a580-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.Height\tLENGTH\t\t473\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te15c6a80-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.Length\tLENGTH\t\t473\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf2a92243-5915-4384-8be7-40590b579e48\tPset_TubeBundleTypeFinned.Material\tMULTILINETEXT\t\t473\t1\tIfcMaterial\t1\nPARAM\tc8ec5000-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.Spacing\tLENGTH\t\t473\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdb668980-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.ThermalConductivity\tNUMBER\t\t473\t1\tIfcThermalConductivityMeasure\t1\nPARAM\td1dd2180-d212-11e1-8000-00215ad4efdf\tPset_TubeBundleTypeFinned.Thickness\tLENGTH\t\t473\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t474\tPset_UnitaryControlElementPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t17015380-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementPHistory.Fan\tMULTILINETEXT\t\t474\t1\tIfcTimeSeries\t1\nPARAM\t136dcc80-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementPHistory.Mode\tMULTILINETEXT\t\t474\t1\tIfcTimeSeries\t1\nPARAM\t1a94da80-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementPHistory.SetPoint\tMULTILINETEXT\t\t474\t1\tIfcTimeSeries\t1\nPARAM\t1072dc00-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementPHistory.Temperature\tMULTILINETEXT\t\t474\t1\tIfcTimeSeries\t1\n#\nGROUP\t475\tPset_UnitaryControlElementTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3ac49980-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementTypeCommon.Mode\tMULTILINETEXT\t\t475\t1\tPropertyTableValue\t1\nPARAM\t241e4280-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementTypeCommon.Reference\tTEXT\t\t475\t1\tIfcIdentifier\t1\nPARAM\t2a142380-d213-11e1-8000-00215ad4efdf\tPset_UnitaryControlElementTypeCommon.Status\tTEXT\t\t475\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t476\tPset_UnitaryControlElementTypeIndicatorPanel\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta214298b-c8bc-4c2d-91e0-2d20124d29f8\tPset_UnitaryControlElementTypeIndicatorPanel.Application\tTEXT\t\t476\t1\tPEnum_UnitaryControlElementApplication\t1\n#\nGROUP\t477\tPset_UnitaryControlElementTypeThermostat\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t41d7fa5a-1d4b-4dbf-9733-687435d62493\tPset_UnitaryControlElementTypeThermostat.TemperatureSetPoint\tMULTILINETEXT\t\t477\t1\tPropertyBoundedValue\t1\n#\nGROUP\t478\tPset_UnitaryEquipmentTypeAirConditioningUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t93943200-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.CondenserEnteringTemperature\tNUMBER\t\t478\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t8d9e5100-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.CondenserFlowrate\tNUMBER\t\t478\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t9b53d680-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.CondenserLeavingTemperature\tNUMBER\t\t478\t1\tIfcThermodynamicTemperatureMeasure\t1\nPARAM\t7bbcae00-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.CoolingEfficiency\tNUMBER\t\t478\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t824b2580-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.HeatingCapacity\tNUMBER\t\t478\t1\tIfcPowerMeasure\t1\nPARAM\t88410680-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.HeatingEfficiency\tNUMBER\t\t478\t1\tIfcPositiveRatioMeasure\t1\nPARAM\t75c6cd00-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.LatentCoolingCapacity\tNUMBER\t\t478\t1\tIfcPowerMeasure\t1\nPARAM\ta149b780-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.OutsideAirFlowrate\tNUMBER\t\t478\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\t5a5bc200-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirConditioningUnit.SensibleCoolingCapacity\tNUMBER\t\t478\t1\tIfcPowerMeasure\t1\n#\nGROUP\t479\tPset_UnitaryEquipmentTypeAirHandler\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tadce1000-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirHandler.AirHandlerConstruction\tTEXT\t\t479\t1\tPEnum_AirHandlerConstruction\t1\nPARAM\tbaeaff00-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirHandler.AirHandlerFanCoilArrangement\tTEXT\t\t479\t1\tPEnum_AirHandlerFanCoilArrangement\t1\nPARAM\tc6d6c100-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeAirHandler.DualDeck\tYESNO\t\t479\t1\tIfcBoolean\t1\n#\nGROUP\t480\tPset_UnitaryEquipmentTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td2c28300-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeCommon.Reference\tTEXT\t\t480\t1\tIfcIdentifier\t1\nPARAM\td950fa80-d213-11e1-8000-00215ad4efdf\tPset_UnitaryEquipmentTypeCommon.Status\tTEXT\t\t480\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t481\tPset_UtilityConsumption\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3adb8501-10de-47f0-8de0-4c8add8eb5f5\tPset_UtilityConsumption.Electricity\tTEXT\t\t481\t1\tIfcLabel\t1\nPARAM\t03d13a50-42c5-432a-b41c-f34c0229b59f\tPset_UtilityConsumption.Fuel\tTEXT\t\t481\t1\tIfcLabel\t1\nPARAM\te22534ca-1923-43e3-b914-d07c0f1d6b20\tPset_UtilityConsumption.Heat\tTEXT\t\t481\t1\tIfcLabel\t1\nPARAM\t51272df6-8346-4d7a-b6c6-fe6d1045947f\tPset_UtilityConsumption.Steam\tTEXT\t\t481\t1\tIfcLabel\t1\nPARAM\t3a711cff-0212-4ca2-9a60-da08db6d9e4c\tPset_UtilityConsumption.Water\tTEXT\t\t481\t1\tIfcLabel\t1\n#\nGROUP\t482\tPset_UtilityConsumptionPHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf1c11500-d213-11e1-8000-00215ad4efdf\tPset_UtilityConsumptionPHistory.Electricity\tMULTILINETEXT\t\t482\t1\tIfcTimeSeries\t1\nPARAM\tf7b6f600-d213-11e1-8000-00215ad4efdf\tPset_UtilityConsumptionPHistory.Fuel\tMULTILINETEXT\t\t482\t1\tIfcTimeSeries\t1\nPARAM\teec62480-d213-11e1-8000-00215ad4efdf\tPset_UtilityConsumptionPHistory.Heat\tMULTILINETEXT\t\t482\t1\tIfcTimeSeries\t1\nPARAM\tfab1e680-d213-11e1-8000-00215ad4efdf\tPset_UtilityConsumptionPHistory.Steam\tMULTILINETEXT\t\t482\t1\tIfcTimeSeries\t1\nPARAM\tf4bc0580-d213-11e1-8000-00215ad4efdf\tPset_UtilityConsumptionPHistory.Water\tMULTILINETEXT\t\t482\t1\tIfcTimeSeries\t1\n#\nGROUP\t483\tPset_ValvePHistory\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t069da880-d214-11e1-8000-00215ad4efdf\tPset_ValvePHistory.MeasuredFlowRate\tMULTILINETEXT\t\t483\t1\tIfcTimeSeries\t1\nPARAM\t0ac9c600-d214-11e1-8000-00215ad4efdf\tPset_ValvePHistory.MeasuredPressureDrop\tMULTILINETEXT\t\t483\t1\tIfcTimeSeries\t1\nPARAM\t03a2b800-d214-11e1-8000-00215ad4efdf\tPset_ValvePHistory.PercentageOpen\tMULTILINETEXT\t\t483\t1\tIfcTimeSeries\t1\n#\nGROUP\t484\tPset_ValveTypeAirRelease\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t161cf180-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeAirRelease.IsAutomatic\tYESNO\t\t484\t1\tIfcBoolean\t1\n#\nGROUP\t485\tPset_ValveTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t98f8aec8-247b-430d-a4ae-121784d5e7b0\tPset_ValveTypeCommon.BodyMaterial\tMULTILINETEXT\t\t485\t1\tIfcMaterial\t1\nPARAM\t8a579500-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.CloseOffRating\tNUMBER\t\t485\t1\tIfcPressureMeasure\t1\nPARAM\t8461b400-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.FlowCoefficient\tNUMBER\t\t485\t1\tIfcReal\t1\nPARAM\tac0fa7dd-4cfe-4446-895c-b4b6600866f1\tPset_ValveTypeCommon.OperatingMechanismMaterial\tMULTILINETEXT\t\t485\t1\tIfcMaterial\t1\nPARAM\t2208b380-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.Reference\tTEXT\t\t485\t1\tIfcIdentifier\t1\nPARAM\t6a27d600-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.Size\tLENGTH\t\t485\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t103808cf-5fe6-4d58-9e73-17c7493147b5\tPset_ValveTypeCommon.Status\tTEXT\t\t485\t1\tPEnum_ElementStatus\t1\nPARAM\t7875f200-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.TestPressure\tNUMBER\t\t485\t1\tIfcPressureMeasure\t1\nPARAM\t51b7bb80-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.ValveMechanism\tTEXT\t\t485\t1\tPEnum_ValveMechanism\t1\nPARAM\t38167400-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.ValveOperation\tTEXT\t\t485\t1\tPEnum_ValveOperation\t1\nPARAM\t27fe9480-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.ValvePattern\tTEXT\t\t485\t1\tPEnum_ValvePattern\t1\nPARAM\t7e6bd300-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeCommon.WorkingPressure\tNUMBER\t\t485\t1\tIfcPressureMeasure\t1\n#\nGROUP\t486\tPset_ValveTypeDrawOffCock\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t96dbed80-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeDrawOffCock.HasHoseUnion\tYESNO\t\t486\t1\tIfcBoolean\t1\n#\nGROUP\t487\tPset_ValveTypeFaucet\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcbe84000-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFaucet.FaucetFunction\tTEXT\t\t487\t1\tPEnum_FaucetFunction\t1\nPARAM\tb70bac80-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFaucet.FaucetOperation\tTEXT\t\t487\t1\tPEnum_FaucetOperation\t1\nPARAM\te02c3d00-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFaucet.FaucetTopDescription\tTEXT\t\t487\t1\tIfcText\t1\nPARAM\ta3f8dc80-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFaucet.FaucetType\tTEXT\t\t487\t1\tPEnum_FaucetType\t1\nPARAM\tda365c00-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFaucet.Finish\tTEXT\t\t487\t1\tIfcText\t1\n#\nGROUP\t488\tPset_ValveTypeFlushing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tec17ff00-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFlushing.FlushingRate\tNUMBER\t\t488\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tf20de000-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFlushing.HasIntegralShutOffDevice\tYESNO\t\t488\t1\tIfcBoolean\t1\nPARAM\tf89c5780-d214-11e1-8000-00215ad4efdf\tPset_ValveTypeFlushing.IsHighPressure\tYESNO\t\t488\t1\tIfcBoolean\t1\n#\nGROUP\t489\tPset_ValveTypeGasTap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0651dd00-d215-11e1-8000-00215ad4efdf\tPset_ValveTypeGasTap.HasHoseUnion\tYESNO\t\t489\t1\tIfcBoolean\t1\n#\nGROUP\t490\tPset_ValveTypeIsolating\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t12d63580-d215-11e1-8000-00215ad4efdf\tPset_ValveTypeIsolating.IsNormallyOpen\tYESNO\t\t490\t1\tIfcBoolean\t1\nPARAM\t1a95da00-d215-11e1-8000-00215ad4efdf\tPset_ValveTypeIsolating.IsolatingPurpose\tTEXT\t\t490\t1\tPEnum_IsolatingPurpose\t1\n#\nGROUP\t491\tPset_ValveTypeMixing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2c777d00-d215-11e1-8000-00215ad4efdf\tPset_ValveTypeMixing.MixerControl\tTEXT\t\t491\t1\tPEnum_MixingValveControl\t1\nPARAM\t49ac4b80-d215-11e1-8000-00215ad4efdf\tPset_ValveTypeMixing.OutletConnectionSize\tLENGTH\t\t491\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t492\tPset_ValveTypePressureReducing\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5fba0c00-d215-11e1-8000-00215ad4efdf\tPset_ValveTypePressureReducing.DownstreamPressure\tNUMBER\t\t492\t1\tIfcPressureMeasure\t1\nPARAM\t59c42b00-d215-11e1-8000-00215ad4efdf\tPset_ValveTypePressureReducing.UpstreamPressure\tNUMBER\t\t492\t1\tIfcPressureMeasure\t1\n#\nGROUP\t493\tPset_ValveTypePressureRelief\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t6cd6fb00-d215-11e1-8000-00215ad4efdf\tPset_ValveTypePressureRelief.ReliefPressure\tNUMBER\t\t493\t1\tIfcPressureMeasure\t1\n#\nGROUP\t494\tPset_VibrationIsolatorTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcb60a188-ae0d-4c85-b701-a99598ba7075\tPset_VibrationIsolatorTypeCommon.Height\tLENGTH\t\t494\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8b3cf680-d215-11e1-8000-00215ad4efdf\tPset_VibrationIsolatorTypeCommon.IsolatorCompressibility\tNUMBER\t\t494\t1\tIfcRatioMeasure\t1\nPARAM\t85dfac00-d215-11e1-8000-00215ad4efdf\tPset_VibrationIsolatorTypeCommon.IsolatorStaticDeflection\tLENGTH\t\t494\t1\tIfcLengthMeasure\t1\nPARAM\t89ee9a3a-ccf7-4263-8adb-8aecbfd91860\tPset_VibrationIsolatorTypeCommon.Material\tMULTILINETEXT\t\t494\t1\tIfcMaterial\t1\nPARAM\t998b1280-d215-11e1-8000-00215ad4efdf\tPset_VibrationIsolatorTypeCommon.MaximumSupportedWeight\tNUMBER\t\t494\t1\tIfcMassMeasure\t1\nPARAM\t9132d780-d215-11e1-8000-00215ad4efdf\tPset_VibrationIsolatorTypeCommon.NominalHeight\tLENGTH\t\t494\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t795b5380-d215-11e1-8000-00215ad4efdf\tPset_VibrationIsolatorTypeCommon.Reference\tTEXT\t\t494\t1\tIfcIdentifier\t1\nPARAM\t1a989eee-042c-4402-833b-b2453e382388\tPset_VibrationIsolatorTypeCommon.Status\tTEXT\t\t494\t1\tPEnum_ElementStatus\t1\nPARAM\t7f513480-d215-11e1-8000-00215ad4efdf\tPset_VibrationIsolatorTypeCommon.VibrationTransmissibility\tNUMBER\t\t494\t1\tIfcPositiveRatioMeasure\t1\n#\nGROUP\t495\tPset_WallCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc17a7600-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.AcousticRating\tTEXT\t\t495\t1\tIfcLabel\t1\nPARAM\tcfc89200-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.Combustible\tYESNO\t\t495\t1\tIfcBoolean\t1\nPARAM\tf981b900-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.Compartmentation\tYESNO\t\t495\t1\tIfcBoolean\t1\nPARAM\tea027000-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.ExtendToStructure\tYESNO\t\t495\t1\tIfcBoolean\t1\nPARAM\tc93a1a80-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.FireRating\tTEXT\t\t495\t1\tIfcLabel\t1\nPARAM\te2db6200-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.IsExternal\tYESNO\t\t495\t1\tIfcBoolean\t1\nPARAM\tf1c21480-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.LoadBearing\tYESNO\t\t495\t1\tIfcBoolean\t1\nPARAM\taa3b8880-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.Reference\tTEXT\t\t495\t1\tIfcIdentifier\t1\nPARAM\tb0ca0000-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.Status\tTEXT\t\t495\t1\tPEnum_ElementStatus\t1\nPARAM\td6570980-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.SurfaceSpreadOfFlame\tTEXT\t\t495\t1\tIfcLabel\t1\nPARAM\tde16ae00-d215-11e1-8000-00215ad4efdf\tPset_WallCommon.ThermalTransmittance\tNUMBER\t\t495\t1\tIfcThermalTransmittanceMeasure\t1\n#\nGROUP\t496\tPset_Warranty\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t30f06580-d216-11e1-8000-00215ad4efdf\tPset_Warranty.Exclusions\tTEXT\t\t496\t1\tIfcText\t1\nPARAM\t19b17800-d216-11e1-8000-00215ad4efdf\tPset_Warranty.IsExtendedWarranty\tYESNO\t\t496\t1\tIfcBoolean\t1\nPARAM\t2635d080-d216-11e1-8000-00215ad4efdf\tPset_Warranty.PointOfContact\tTEXT\t\t496\t1\tIfcLabel\t1\nPARAM\t2a61ee00-d216-11e1-8000-00215ad4efdf\tPset_Warranty.WarrantyContent\tTEXT\t\t496\t1\tIfcText\t1\nPARAM\t14542d80-d216-11e1-8000-00215ad4efdf\tPset_Warranty.WarrantyEndDate\tTEXT\t\t496\t1\tIfcDate\t1\nPARAM\t08686b80-d216-11e1-8000-00215ad4efdf\tPset_Warranty.WarrantyIdentifier\tTEXT\t\t496\t1\tIfcIdentifier\t1\nPARAM\t20d88600-d216-11e1-8000-00215ad4efdf\tPset_Warranty.WarrantyPeriod\tTEXT\t\t496\t1\tIfcDuration\t1\nPARAM\t0ef6e300-d216-11e1-8000-00215ad4efdf\tPset_Warranty.WarrantyStartDate\tTEXT\t\t496\t1\tIfcDate\t1\n#\nGROUP\t497\tPset_WasteTerminalTypeCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3c439100-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeCommon.Reference\tTEXT\t\t497\t1\tIfcIdentifier\t1\nPARAM\t42d20880-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeCommon.Status\tTEXT\t\t497\t1\tPEnum_ElementStatus\t1\n#\nGROUP\t498\tPset_WasteTerminalTypeFloorTrap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tede7f163-e16b-4977-900c-551643a33355\tPset_WasteTerminalTypeFloorTrap.BodyMaterial\tMULTILINETEXT\t\t498\t1\tIfcMaterial\t1\nPARAM\tcdb30300-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.CoverLength\tLENGTH\t\t498\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdf94a600-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.CoverMaterial\tMULTILINETEXT\t\t498\t1\tIfcMaterialDefinition\t1\nPARAM\td6a3d480-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.CoverWidth\tLENGTH\t\t498\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t95132980-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.HasStrainer\tYESNO\t\t498\t1\tIfcBoolean\t1\nPARAM\tc4299b00-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.InletConnectionSize\tLENGTH\t\t498\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta65c3600-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.InletPatternType\tTEXT\t\t498\t1\tPEnum_InletPatternType\t1\nPARAM\t757c0100-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.IsForSullageWater\tYESNO\t\t498\t1\tIfcBoolean\t1\nPARAM\t6bf29900-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.NominalBodyDepth\tLENGTH\t\t498\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t5aa98c80-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.NominalBodyLength\tLENGTH\t\t498\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t639a5e00-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.NominalBodyWidth\tLENGTH\t\t498\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9c3a3780-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.OutletConnectionSize\tLENGTH\t\t498\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7ca30f00-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.SpilloverLevel\tLENGTH\t\t498\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8593e080-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorTrap.TrapType\tTEXT\t\t498\t1\tPEnum_TrapType\t1\n#\nGROUP\t499\tPset_WasteTerminalTypeFloorWaste\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc22a63a2-efb4-463b-a77b-4a3a4c74aac6\tPset_WasteTerminalTypeFloorWaste.BodyMaterial\tMULTILINETEXT\t\t499\t1\tIfcMaterial\t1\nPARAM\t0d79ea80-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorWaste.CoverLength\tLENGTH\t\t499\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfcfb5e45-647e-4cb4-9409-210a27aec5de\tPset_WasteTerminalTypeFloorWaste.CoverMaterial\tMULTILINETEXT\t\t499\t1\tIfcMaterial\t1\nPARAM\t17035280-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorWaste.CoverWidth\tLENGTH\t\t499\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tfaffb100-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorWaste.NominalBodyDepth\tLENGTH\t\t499\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te8857780-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorWaste.NominalBodyLength\tLENGTH\t\t499\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tf20edf80-d216-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorWaste.NominalBodyWidth\tLENGTH\t\t499\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t03f08280-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeFloorWaste.OutletConnectionSize\tLENGTH\t\t499\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t500\tPset_WasteTerminalTypeGreaseInterceptor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t76b4afb1-148e-4476-bbb4-f8e11f7ef0f5\tPset_WasteTerminalTypeGreaseInterceptor.BodyDepth\tLENGTH\t\t500\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7b1a9d46-a64a-45c5-bcbd-42807c520f33\tPset_WasteTerminalTypeGreaseInterceptor.CoverLength\tLENGTH\t\t500\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb7c8cf85-6b18-49bd-8c6c-80e381ec4355\tPset_WasteTerminalTypeGreaseInterceptor.CoverMaterial\tMULTILINETEXT\t\t500\t1\tIfcMaterial\t1\nPARAM\t8a84a27c-bc75-4c9f-885a-ff7b4f41cbaa\tPset_WasteTerminalTypeGreaseInterceptor.CoverWidth\tLENGTH\t\t500\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te7409eaf-2afc-4ab0-84bf-10be5302400b\tPset_WasteTerminalTypeGreaseInterceptor.InletConnectionSize\tLENGTH\t\t500\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb6efa515-b6af-4218-aa4c-d1613fddb22b\tPset_WasteTerminalTypeGreaseInterceptor.NominalBodyLength\tLENGTH\t\t500\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9ab773bd-b761-42ea-b04a-89f2127ed7a1\tPset_WasteTerminalTypeGreaseInterceptor.NominalBodyMaterial\tMULTILINETEXT\t\t500\t1\tIfcMaterial\t1\nPARAM\t95efa82a-bce4-4684-90e2-feb91b0dcfeb\tPset_WasteTerminalTypeGreaseInterceptor.NominalBodyWidth\tLENGTH\t\t500\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2f5edcaf-5608-448e-8ce0-1f7d41981565\tPset_WasteTerminalTypeGreaseInterceptor.OutletConnectionSize\tLENGTH\t\t500\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t64f2e978-e5ea-417a-b095-2235e5931cb1\tPset_WasteTerminalTypeGreaseInterceptor.StrainerDepth\tLENGTH\t\t500\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8315cec5-18e5-488d-80a5-aba30f30aeab\tPset_WasteTerminalTypeGreaseInterceptor.StrainerDiameter\tLENGTH\t\t500\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t7117dc07-f6a9-438c-b6e8-2c4fa750e080\tPset_WasteTerminalTypeGreaseInterceptor.StrainerMaterial\tMULTILINETEXT\t\t500\t1\tIfcMaterial\t1\n#\nGROUP\t501\tPset_WasteTerminalTypeGullySump\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t69dd0a00-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.BackInletPatternType\tTEXT\t\t501\t1\tPEnum_BackInletPatternType\t1\nPARAM\t909b4080-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.CoverLength\tLENGTH\t\t501\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t122d418d-3358-4809-b0b5-bf2ed04fb613\tPset_WasteTerminalTypeGullySump.CoverMaterial\tMULTILINETEXT\t\t501\t1\tIfcMaterial\t1\nPARAM\t9abd3f00-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.CoverWidth\tLENGTH\t\t501\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t431ed380-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.GullyType\tTEXT\t\t501\t1\tPEnum_GullyType\t1\nPARAM\t87aa6f00-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.InletConnectionSize\tLENGTH\t\t501\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t38643e80-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.NominalSumpDepth\tLENGTH\t\t501\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t26829b80-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.NominalSumpLength\tLENGTH\t\t501\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t300c0380-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.NominalSumpWidth\tLENGTH\t\t501\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6053a200-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.OutletConnectionSize\tLENGTH\t\t501\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t64c82df5-20d3-47ee-bd23-0ab6179a9662\tPset_WasteTerminalTypeGullySump.SumpMaterial\tMULTILINETEXT\t\t501\t1\tIfcMaterial\t1\nPARAM\t503bc280-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullySump.TrapType\tTEXT\t\t501\t1\tPEnum_TrapType\t1\n#\nGROUP\t502\tPset_WasteTerminalTypeGullyTrap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf4be0480-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.BackInletPatternType\tTEXT\t\t502\t1\tPEnum_BackInletPatternType\t1\nPARAM\t73a0474f-e0cf-4933-80b6-eb803941d633\tPset_WasteTerminalTypeGullyTrap.BodyMaterial\tMULTILINETEXT\t\t502\t1\tIfcMaterial\t1\nPARAM\t1919e100-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.CoverLength\tLENGTH\t\t502\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t463e224f-3693-401c-97ed-a237372c77c1\tPset_WasteTerminalTypeGullyTrap.CoverMaterial\tMULTILINETEXT\t\t502\t1\tIfcMaterial\t1\nPARAM\t21721c00-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.CoverWidth\tLENGTH\t\t502\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tc809ed00-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.GullyType\tTEXT\t\t502\t1\tPEnum_GullyType\t1\nPARAM\td5bf7280-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.HasStrainer\tYESNO\t\t502\t1\tIfcBoolean\t1\nPARAM\t10290f80-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.InletConnectionSize\tLENGTH\t\t502\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tbe808500-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.NominalBodyDepth\tLENGTH\t\t502\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taad51e80-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.NominalBodyLength\tLENGTH\t\t502\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tb45e8680-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.NominalBodyWidth\tLENGTH\t\t502\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tec65c980-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.OutletConnectionSize\tLENGTH\t\t502\t1\tIfcPositiveLengthMeasure\t1\nPARAM\tdd7f1700-d217-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeGullyTrap.TrapType\tTEXT\t\t502\t1\tPEnum_TrapType\t1\n#\nGROUP\t503\tPset_WasteTerminalTypeOilInterceptor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t27c906d4-69ba-4fd7-8839-7f753e1da5b1\tPset_WasteTerminalTypeOilInterceptor.BodyMaterial\tMULTILINETEXT\t\t503\t1\tIfcMaterial\t1\nPARAM\tf23c76fd-2c8e-42be-9daf-dd7752c484b2\tPset_WasteTerminalTypeOilInterceptor.CoverLength\tLENGTH\t\t503\t1\tIfcPositiveLengthMeasure\t1\nPARAM\ta0a75ee6-80dc-4f27-ba7b-d8a2104f7705\tPset_WasteTerminalTypeOilInterceptor.CoverMaterial\tMULTILINETEXT\t\t503\t1\tIfcMaterial\t1\nPARAM\t0896c2fc-e917-4dc1-977d-9c3ba4054a72\tPset_WasteTerminalTypeOilInterceptor.CoverWidth\tLENGTH\t\t503\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t38d7cbd5-4463-4361-8310-599f1325325f\tPset_WasteTerminalTypeOilInterceptor.InletConnectionSize\tLENGTH\t\t503\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t63888a3c-4850-4c8c-8124-f77ba780a389\tPset_WasteTerminalTypeOilInterceptor.NominalBodyDepth\tLENGTH\t\t503\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t96cccd1b-f1c8-45c8-b7a8-665bcf4e43af\tPset_WasteTerminalTypeOilInterceptor.NominalBodyLength\tLENGTH\t\t503\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t46d98c2c-0075-4933-beee-5f0e3a3983a7\tPset_WasteTerminalTypeOilInterceptor.NominalBodyWidth\tLENGTH\t\t503\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t831aaf70-c5ba-4835-9d63-d804d1164582\tPset_WasteTerminalTypeOilInterceptor.OutletConnectionSize\tLENGTH\t\t503\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t504\tPset_WasteTerminalTypePetrolInterceptor\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tea01f55d-15ff-4838-b5c5-4fd7d578d75d\tPset_WasteTerminalTypePetrolInterceptor.BodyMaterial\tMULTILINETEXT\t\t504\t1\tIfcMaterial\t1\nPARAM\t2396a8b9-1cc9-4656-88ae-bffa46aa620f\tPset_WasteTerminalTypePetrolInterceptor.CoverLength\tLENGTH\t\t504\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t76ec1c35-f23e-427b-a8c3-cea9916ad20e\tPset_WasteTerminalTypePetrolInterceptor.CoverMaterial\tMULTILINETEXT\t\t504\t1\tIfcMaterial\t1\nPARAM\t7b91d7f1-b31c-49b7-a8b6-e11e65e16969\tPset_WasteTerminalTypePetrolInterceptor.CoverWidth\tLENGTH\t\t504\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t79dceadb-6e67-46ef-b0dc-81ec17fc6fca\tPset_WasteTerminalTypePetrolInterceptor.InletConnectionSize\tLENGTH\t\t504\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t583922cc-179e-40d4-8ea3-59f4653f0833\tPset_WasteTerminalTypePetrolInterceptor.NominalBodyDepth\tLENGTH\t\t504\t1\tIfcPositiveLengthMeasure\t1\nPARAM\taa23ce95-2dd2-4fc0-9aea-f8682955d827\tPset_WasteTerminalTypePetrolInterceptor.NominalBodyLength\tLENGTH\t\t504\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t845a959f-077e-43fe-9950-e277a6989b75\tPset_WasteTerminalTypePetrolInterceptor.NominalBodyWidth\tLENGTH\t\t504\t1\tIfcPositiveLengthMeasure\t1\nPARAM\te76fd15a-20d6-4407-b62a-7e700aa45fc0\tPset_WasteTerminalTypePetrolInterceptor.OutletConnectionSize\tLENGTH\t\t504\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t8fb0077f-6516-4853-ae57-bf03a3bde72a\tPset_WasteTerminalTypePetrolInterceptor.VentilatingPipeSize\tLENGTH\t\t504\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t505\tPset_WasteTerminalTypeRoofDrain\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0aeac948-a0f2-46b7-b901-3569a724a609\tPset_WasteTerminalTypeRoofDrain.BodyMaterial\tMULTILINETEXT\t\t505\t1\tIfcMaterial\t1\nPARAM\t4ebeca00-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeRoofDrain.CoverLength\tLENGTH\t\t505\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t9a9abe13-5318-4c00-89c8-a6a5e4f4f97d\tPset_WasteTerminalTypeRoofDrain.CoverMaterial\tMULTILINETEXT\t\t505\t1\tIfcMaterial\t1\nPARAM\t57170500-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeRoofDrain.CoverWidth\tLENGTH\t\t505\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t3e0e5400-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeRoofDrain.NominalBodyDepth\tLENGTH\t\t505\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t2df67480-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeRoofDrain.NominalBodyLength\tLENGTH\t\t505\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t364eaf80-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeRoofDrain.NominalBodyWidth\tLENGTH\t\t505\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t46668f00-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeRoofDrain.OutletConnectionSize\tLENGTH\t\t505\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t506\tPset_WasteTerminalTypeWasteDisposalUnit\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t65fdb780-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeWasteDisposalUnit.DrainConnectionSize\tLENGTH\t\t506\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t76ae2d80-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeWasteDisposalUnit.NominalDepth\tLENGTH\t\t506\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t6e55f280-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeWasteDisposalUnit.OutletConnectionSize\tLENGTH\t\t506\t1\tIfcPositiveLengthMeasure\t1\n#\nGROUP\t507\tPset_WasteTerminalTypeWasteTrap\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t980f1980-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeWasteTrap.InletConnectionSize\tLENGTH\t\t507\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t904f7500-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeWasteTrap.OutletConnectionSize\tLENGTH\t\t507\t1\tIfcPositiveLengthMeasure\t1\nPARAM\t83cb1c80-d218-11e1-8000-00215ad4efdf\tPset_WasteTerminalTypeWasteTrap.WasteTrapType\tTEXT\t\t507\t1\tPEnum_TrapType\t1\n#\nGROUP\t508\tPset_WindowCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb9700580-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.AcousticRating\tTEXT\t\t508\t1\tIfcLabel\t1\nPARAM\t005dfb00-d219-11e1-8000-00215ad4efdf\tPset_WindowCommon.FireExit\tYESNO\t\t508\t1\tIfcBoolean\t1\nPARAM\tbffe7d00-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.FireRating\tTEXT\t\t508\t1\tIfcLabel\t1\nPARAM\tdd334b80-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.GlazingAreaFraction\tNUMBER\t\t508\t1\tIfcPositiveRatioMeasure\t1\nPARAM\tf2a87580-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.HasDrive\tYESNO\t\t508\t1\tIfcBoolean\t1\nPARAM\te3c1c300-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.HasSillExternal\tYESNO\t\t508\t1\tIfcBoolean\t1\nPARAM\teae8d100-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.HasSillInternal\tYESNO\t\t508\t1\tIfcBoolean\t1\nPARAM\td3114d00-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.Infiltration\tNUMBER\t\t508\t1\tIfcVolumetricFlowRateMeasure\t1\nPARAM\tcd1b6c00-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.IsExternal\tYESNO\t\t508\t1\tIfcBoolean\t1\nPARAM\t7db55f92-39da-4d10-830c-d420f3a1988c\tPset_WindowCommon.MechanicalLoadRating\tTEXT\t\t508\t1\tIfcLabel\t1\nPARAM\ta6f5cc00-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.Reference\tTEXT\t\t508\t1\tIfcIdentifier\t1\nPARAM\tc68cf480-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.SecurityRating\tTEXT\t\t508\t1\tIfcLabel\t1\nPARAM\tf9cf8380-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.SmokeStop\tYESNO\t\t508\t1\tIfcBoolean\t1\nPARAM\tacebad00-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.Status\tTEXT\t\t508\t1\tPEnum_ElementStatus\t1\nPARAM\td86e9780-d218-11e1-8000-00215ad4efdf\tPset_WindowCommon.ThermalTransmittance\tNUMBER\t\t508\t1\tIfcThermalTransmittanceMeasure\t1\nPARAM\te92533f3-a7e4-4161-96ad-923faee29e96\tPset_WindowCommon.WaterTightnessRating\tTEXT\t\t508\t1\tIfcLabel\t1\nPARAM\t664882a1-5b8a-4200-87f6-f80670cbe20b\tPset_WindowCommon.WindLoadRating\tTEXT\t\t508\t1\tIfcLabel\t1\n#\nGROUP\t509\tPset_WorkControlCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1cfa3300-d219-11e1-8000-00215ad4efdf\tPset_WorkControlCommon.WorkDayDuration\tTEXT\t\t509\t1\tIfcDuration\t1\nPARAM\t179ce880-d219-11e1-8000-00215ad4efdf\tPset_WorkControlCommon.WorkFinishTime\tTEXT\t\t509\t1\tIfcTime\t1\nPARAM\t27b4c800-d219-11e1-8000-00215ad4efdf\tPset_WorkControlCommon.WorkMonthDuration\tTEXT\t\t509\t1\tIfcDuration\t1\nPARAM\t12d83480-d219-11e1-8000-00215ad4efdf\tPset_WorkControlCommon.WorkStartTime\tTEXT\t\t509\t1\tIfcTime\t1\nPARAM\t22f01400-d219-11e1-8000-00215ad4efdf\tPset_WorkControlCommon.WorkWeekDuration\tTEXT\t\t509\t1\tIfcDuration\t1\n#\nGROUP\t510\tPset_ZoneCommon\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfae5baa6-c7cc-4e06-80cd-2df6ee99eece\tPset_ZoneCommon.Category\tTEXT\t\t510\t1\tIfcLabel\t1\nPARAM\t6aaa8536-a77f-48f3-9c4c-98539c4e1c4a\tPset_ZoneCommon.GrossAreaPlanned\tAREA\t\t510\t1\tIfcAreaMeasure\t1\nPARAM\tf612feec-72a2-4a43-9621-a0c271d08886\tPset_ZoneCommon.GrossPlannedArea\tAREA\t\t510\t1\tIfcAreaMeasure\t1\nPARAM\t6704bcc6-c483-45c3-9d90-e4e5dbb87748\tPset_ZoneCommon.HandicapAccessible\tYESNO\t\t510\t1\tIfcBoolean\t1\nPARAM\tcd616a7a-8e64-4bde-8454-989699ddf1b8\tPset_ZoneCommon.IsExternal\tYESNO\t\t510\t1\tIfcBoolean\t1\nPARAM\td8701e2b-c4f9-49f0-9634-fad47597bcf1\tPset_ZoneCommon.MechanicalVentilationRate\tINTEGER\t\t510\t1\tIfcCountMeasure\t1\nPARAM\t142017c5-7df7-4608-815a-fc8a4223c387\tPset_ZoneCommon.NaturalVentilation\tYESNO\t\t510\t1\tIfcBoolean\t1\nPARAM\t504732de-8cf2-4ede-b741-cf3e592a3fc7\tPset_ZoneCommon.NaturalVentilationRate\tINTEGER\t\t510\t1\tIfcCountMeasure\t1\nPARAM\td21e9362-b349-421f-b143-d8f3c62f4d93\tPset_ZoneCommon.NetAreaPlanned\tAREA\t\t510\t1\tIfcAreaMeasure\t1\nPARAM\t4655738f-d56e-4f09-ae04-0d3e3a45cbaa\tPset_ZoneCommon.NetPlannedArea\tAREA\t\t510\t1\tIfcAreaMeasure\t1\nPARAM\t3298a9ed-7148-41c6-b0fc-9cb39473ab76\tPset_ZoneCommon.OccupancyNumber\tINTEGER\t\t510\t1\tIfcCountMeasure\t1\nPARAM\tca75dfbe-dc19-406d-9d40-1d768decb871\tPset_ZoneCommon.OccupancyType\tTEXT\t\t510\t1\tIfcLabel\t1\nPARAM\ta9c1d119-d845-488b-8aaa-68625296c6d4\tPset_ZoneCommon.PubliclyAccessible\tYESNO\t\t510\t1\tIfcBoolean\t1\nPARAM\t113a9e35-1465-4468-8305-8e69d5276b24\tPset_ZoneCommon.Reference\tTEXT\t\t510\t1\tIfcIdentifier\t1\n#\nGROUP\t511\tQto_ActuatorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t19782cc3-7869-4310-8917-c89d6fd0e8a3\tQto_ActuatorBaseQuantities.GrossWeight\tNUMBER\t\t511\t1\tIfcMassMeasure\t1\n#\nGROUP\t512\tQto_AirTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta0949257-6887-4ac8-86c5-9846c9d2e04a\tQto_AirTerminalBaseQuantities.GrossWeight\tNUMBER\t\t512\t1\tIfcMassMeasure\t1\nPARAM\t77be93f6-0954-405e-a38e-d2700a4e4da9\tQto_AirTerminalBaseQuantities.Perimeter\tLENGTH\t\t512\t1\tIfcLengthMeasure\t1\nPARAM\t27bc57ac-3bc1-42de-a946-2b6f9358e4d9\tQto_AirTerminalBaseQuantities.TotalSurfaceArea\tAREA\t\t512\t1\tIfcAreaMeasure\t1\n#\nGROUP\t513\tQto_AirTerminalBoxTypeBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5f637be7-4113-49cf-a813-c989bd0ad192\tQto_AirTerminalBoxTypeBaseQuantities.GrossWeight\tNUMBER\t\t513\t1\tIfcMassMeasure\t1\n#\nGROUP\t514\tQto_AirToAirHeatRecoveryBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcf9ca32a-82e1-4d38-9b62-889f3231aa8a\tQto_AirToAirHeatRecoveryBaseQuantities.GrossWeight\tNUMBER\t\t514\t1\tIfcMassMeasure\t1\n#\nGROUP\t515\tQto_AlarmBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tb8a11d44-70fd-46f9-9ea8-df0f01c13f88\tQto_AlarmBaseQuantities.GrossWeight\tNUMBER\t\t515\t1\tIfcMassMeasure\t1\n#\nGROUP\t516\tQto_AudioVisualApplianceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbfb41ca2-0f12-46bc-8087-f90e1d086246\tQto_AudioVisualApplianceBaseQuantities.GrossWeight\tNUMBER\t\t516\t1\tIfcMassMeasure\t1\n#\nGROUP\t517\tQto_BeamBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4a0e9237-e3ed-4037-a2cb-b194b64d0b50\tQto_BeamBaseQuantities.CrossSectionArea\tAREA\t\t517\t1\tIfcAreaMeasure\t1\nPARAM\tb458221e-bac2-48ae-99aa-59fbe347ed25\tQto_BeamBaseQuantities.GrossSurfaceArea\tAREA\t\t517\t1\tIfcAreaMeasure\t1\nPARAM\t65719fa3-ed69-436e-91cc-90f804ba2910\tQto_BeamBaseQuantities.GrossVolume\tVOLUME\t\t517\t1\tIfcVolumeMeasure\t1\nPARAM\t03bdaa78-1cd4-467d-9a55-cb24da923f25\tQto_BeamBaseQuantities.GrossWeight\tNUMBER\t\t517\t1\tIfcMassMeasure\t1\nPARAM\t079deba9-d739-42b7-8314-a132db837c39\tQto_BeamBaseQuantities.Length\tLENGTH\t\t517\t1\tIfcLengthMeasure\t1\nPARAM\t315e738d-11cb-4568-86b2-6987ee3f30b3\tQto_BeamBaseQuantities.NetSurfaceArea\tAREA\t\t517\t1\tIfcAreaMeasure\t1\nPARAM\t91bfdfef-1411-475d-975c-210645cfefcc\tQto_BeamBaseQuantities.NetVolume\tVOLUME\t\t517\t1\tIfcVolumeMeasure\t1\nPARAM\t2fa8a952-3bf5-4110-9fe7-9ba8ff176e34\tQto_BeamBaseQuantities.NetWeight\tNUMBER\t\t517\t1\tIfcMassMeasure\t1\nPARAM\tbeb3ac26-30c4-43bb-9d01-a073419573a8\tQto_BeamBaseQuantities.OuterSurfaceArea\tAREA\t\t517\t1\tIfcAreaMeasure\t1\n#\nGROUP\t518\tQto_BoilerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2f4a0337-47d6-4050-b9e6-ed4e21821de2\tQto_BoilerBaseQuantities.GrossWeight\tNUMBER\t\t518\t1\tIfcMassMeasure\t1\nPARAM\t1e577026-fb66-4bb2-85e4-f0b49616e471\tQto_BoilerBaseQuantities.NetWeight\tNUMBER\t\t518\t1\tIfcMassMeasure\t1\nPARAM\t1689a8db-a287-49e6-975d-b04c87dcb50b\tQto_BoilerBaseQuantities.TotalSurfaceArea\tAREA\t\t518\t1\tIfcAreaMeasure\t1\n#\nGROUP\t519\tQto_BuildingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t73309cba-0cee-4889-8f55-bce18ec8e681\tQto_BuildingBaseQuantities.EavesHeight\tLENGTH\t\t519\t1\tIfcLengthMeasure\t1\nPARAM\tf0fb54dc-e0e9-4b36-9683-fee9c79923bd\tQto_BuildingBaseQuantities.FootprintArea\tAREA\t\t519\t1\tIfcAreaMeasure\t1\nPARAM\ta7a2d4e0-4c7c-4283-b646-ef59619364a5\tQto_BuildingBaseQuantities.GrossFloorArea\tAREA\t\t519\t1\tIfcAreaMeasure\t1\nPARAM\tba023fd4-1f9f-453e-8542-bb45c3df971c\tQto_BuildingBaseQuantities.GrossVolume\tVOLUME\t\t519\t1\tIfcVolumeMeasure\t1\nPARAM\tfe755362-5d6c-49d4-bcde-118dcadef8e9\tQto_BuildingBaseQuantities.Height\tLENGTH\t\t519\t1\tIfcLengthMeasure\t1\nPARAM\tf506186b-da7e-4ae9-afbd-d060cfa33243\tQto_BuildingBaseQuantities.NetFloorArea\tAREA\t\t519\t1\tIfcAreaMeasure\t1\nPARAM\t87adba3c-673d-472e-b079-8e4c5caa1436\tQto_BuildingBaseQuantities.NetVolume\tVOLUME\t\t519\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t520\tQto_BuildingElementProxyQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t71acb583-df81-4514-a1d4-20d4644654d9\tQto_BuildingElementProxyQuantities.NetSurfaceArea\tAREA\t\t520\t1\tIfcAreaMeasure\t1\nPARAM\tc4b592a7-d56c-4a4d-96aa-0ead3ae7205d\tQto_BuildingElementProxyQuantities.NetVolume\tVOLUME\t\t520\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t521\tQto_BuildingStoreyBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t95fa32fb-a157-409f-b3f7-e67bd556fefe\tQto_BuildingStoreyBaseQuantities.GrossFloorArea\tAREA\t\t521\t1\tIfcAreaMeasure\t1\nPARAM\tddbe40c7-7e47-4c93-983a-5bf4de588d7f\tQto_BuildingStoreyBaseQuantities.GrossHeight\tLENGTH\t\t521\t1\tIfcLengthMeasure\t1\nPARAM\t3da89eb1-a6ac-462c-9c55-b85bb8fe038b\tQto_BuildingStoreyBaseQuantities.GrossPerimeter\tLENGTH\t\t521\t1\tIfcLengthMeasure\t1\nPARAM\t5a817af0-1cf4-4fde-bc72-9f4feaa0c857\tQto_BuildingStoreyBaseQuantities.GrossVolume\tVOLUME\t\t521\t1\tIfcVolumeMeasure\t1\nPARAM\td21157d3-0800-4a66-9570-3a6a3e576be6\tQto_BuildingStoreyBaseQuantities.NetFloorArea\tAREA\t\t521\t1\tIfcAreaMeasure\t1\nPARAM\t82bb663e-b7a9-4916-9f8e-1382796f5c8d\tQto_BuildingStoreyBaseQuantities.NetHeigtht\tLENGTH\t\t521\t1\tIfcLengthMeasure\t1\nPARAM\t216c55f6-fad7-42d1-8ef6-d13bb653d864\tQto_BuildingStoreyBaseQuantities.NetVolume\tVOLUME\t\t521\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t522\tQto_BurnerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teaf2edb1-14da-4726-a9ca-34a16ff4e3db\tQto_BurnerBaseQuantities.GrossWeight\tNUMBER\t\t522\t1\tIfcMassMeasure\t1\n#\nGROUP\t523\tQto_CableCarrierFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2b033fcb-530e-4219-b153-53d509d6837a\tQto_CableCarrierFittingBaseQuantities.GrossWeight\tNUMBER\t\t523\t1\tIfcMassMeasure\t1\n#\nGROUP\t524\tQto_CableCarrierSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t15b60181-80a3-4a11-9950-3f5285273eee\tQto_CableCarrierSegmentBaseQuantities.CrossSectionArea\tAREA\t\t524\t1\tIfcAreaMeasure\t1\nPARAM\td37832cb-0951-4699-a61d-dd79c3faa148\tQto_CableCarrierSegmentBaseQuantities.GrossWeight\tNUMBER\t\t524\t1\tIfcMassMeasure\t1\nPARAM\tb054a366-1429-413b-bc28-9da517db09ce\tQto_CableCarrierSegmentBaseQuantities.Length\tLENGTH\t\t524\t1\tIfcLengthMeasure\t1\nPARAM\t9837fc53-21bb-4351-8a11-27b55c613a2f\tQto_CableCarrierSegmentBaseQuantities.OuterSurfaceArea\tAREA\t\t524\t1\tIfcAreaMeasure\t1\n#\nGROUP\t525\tQto_CableFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2a32a8b8-6d85-41e8-8263-9d0a0843f2bf\tQto_CableFittingBaseQuantities.GrossWeight\tNUMBER\t\t525\t1\tIfcMassMeasure\t1\n#\nGROUP\t526\tQto_CableSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8e110910-23a2-4342-ac2c-ef9fbfecbcbf\tQto_CableSegmentBaseQuantities.CrossSectionArea\tAREA\t\t526\t1\tIfcAreaMeasure\t1\nPARAM\tb80a4774-dbca-4ba7-9e48-d79c52ebd2e8\tQto_CableSegmentBaseQuantities.GrossWeight\tNUMBER\t\t526\t1\tIfcMassMeasure\t1\nPARAM\tf4c8046f-f56b-4330-8cfa-b03bcd9099e4\tQto_CableSegmentBaseQuantities.Length\tLENGTH\t\t526\t1\tIfcLengthMeasure\t1\nPARAM\t005e18ad-caec-4ee5-af2e-32edf0f931f5\tQto_CableSegmentBaseQuantities.OuterSurfaceArea\tAREA\t\t526\t1\tIfcAreaMeasure\t1\n#\nGROUP\t527\tQto_ChillerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td56869e3-8fab-4470-8a7a-aa2081d44924\tQto_ChillerBaseQuantities.GrossWeight\tNUMBER\t\t527\t1\tIfcMassMeasure\t1\n#\nGROUP\t528\tQto_ChimneyBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teaec6c3e-6b45-4b6c-ab36-f48511910fcd\tQto_ChimneyBaseQuantities.Length\tLENGTH\t\t528\t1\tIfcLengthMeasure\t1\n#\nGROUP\t529\tQto_CoilBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8fe6c26f-f689-4c00-82f2-3203fd495634\tQto_CoilBaseQuantities.GrossWeight\tNUMBER\t\t529\t1\tIfcMassMeasure\t1\n#\nGROUP\t530\tQto_ColumnBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta183a6cc-a940-49a9-95aa-d1dd9118b091\tQto_ColumnBaseQuantities.CrossSectionArea\tAREA\t\t530\t1\tIfcAreaMeasure\t1\nPARAM\tfc9bdad2-9631-41da-ad93-be6bb889228e\tQto_ColumnBaseQuantities.GrossSurfaceArea\tAREA\t\t530\t1\tIfcAreaMeasure\t1\nPARAM\t384ea5f0-233c-4321-a55f-691280a77ce4\tQto_ColumnBaseQuantities.GrossVolume\tVOLUME\t\t530\t1\tIfcVolumeMeasure\t1\nPARAM\t7c165d7a-dcbc-422a-a4e4-8e1288dc78bd\tQto_ColumnBaseQuantities.GrossWeight\tNUMBER\t\t530\t1\tIfcMassMeasure\t1\nPARAM\ta0fcc17c-8c38-4a56-9903-a6c0db4141bc\tQto_ColumnBaseQuantities.Length\tLENGTH\t\t530\t1\tIfcLengthMeasure\t1\nPARAM\t3af096a8-a032-4ed9-8ffc-7cc82fd958c0\tQto_ColumnBaseQuantities.NetSurfaceArea\tAREA\t\t530\t1\tIfcAreaMeasure\t1\nPARAM\t67285270-6a53-4a5e-a442-bbd8e441a1ab\tQto_ColumnBaseQuantities.NetVolume\tVOLUME\t\t530\t1\tIfcVolumeMeasure\t1\nPARAM\t0250bf87-7b65-4587-9d4d-feff4f6ad818\tQto_ColumnBaseQuantities.NetWeight\tNUMBER\t\t530\t1\tIfcMassMeasure\t1\nPARAM\t4d5f7a2d-dce5-4db1-9022-92607bfca471\tQto_ColumnBaseQuantities.OuterSurfaceArea\tAREA\t\t530\t1\tIfcAreaMeasure\t1\n#\nGROUP\t531\tQto_CommunicationsApplianceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\td38bb55d-0db3-4084-b61d-2b96bfb3be6d\tQto_CommunicationsApplianceBaseQuantities.GrossWeight\tNUMBER\t\t531\t1\tIfcMassMeasure\t1\n#\nGROUP\t532\tQto_CompressorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4838e484-cbca-46eb-803b-07f211378c6e\tQto_CompressorBaseQuantities.GrossWeight\tNUMBER\t\t532\t1\tIfcMassMeasure\t1\n#\nGROUP\t533\tQto_CondenserBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8194261a-d122-44c6-974f-5b2b752d6650\tQto_CondenserBaseQuantities.GrossWeight\tNUMBER\t\t533\t1\tIfcMassMeasure\t1\n#\nGROUP\t534\tQto_ConstructionEquipmentResourceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcab67b3c-ec99-4207-a66d-d79cb6b688dd\tQto_ConstructionEquipmentResourceBaseQuantities.OperatingTime\tNUMBER\t\t534\t1\tIfcTimeMeasure\t1\nPARAM\te4af67d3-9284-4a09-9642-e44a9162bc13\tQto_ConstructionEquipmentResourceBaseQuantities.UsageTime\tNUMBER\t\t534\t1\tIfcTimeMeasure\t1\n#\nGROUP\t535\tQto_ConstructionMaterialResourceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tcf92e9e5-9de5-47a0-b6b7-5a502dfb0544\tQto_ConstructionMaterialResourceBaseQuantities.GrossVolume\tVOLUME\t\t535\t1\tIfcVolumeMeasure\t1\nPARAM\t476a9b16-9ea4-4d8d-ae7f-23280f8469be\tQto_ConstructionMaterialResourceBaseQuantities.GrossWeight\tNUMBER\t\t535\t1\tIfcMassMeasure\t1\nPARAM\t03f25042-881d-4327-ad02-1c707b0af505\tQto_ConstructionMaterialResourceBaseQuantities.NetVolume\tVOLUME\t\t535\t1\tIfcVolumeMeasure\t1\nPARAM\t02b7c7c4-b347-4a3a-a241-93a27e3e2c86\tQto_ConstructionMaterialResourceBaseQuantities.NetWeight\tNUMBER\t\t535\t1\tIfcMassMeasure\t1\n#\nGROUP\t536\tQto_ControllerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4d49823b-659e-4674-8d5e-c99a22fae38f\tQto_ControllerBaseQuantities.GrossWeight\tNUMBER\t\t536\t1\tIfcMassMeasure\t1\n#\nGROUP\t537\tQto_CooledBeamBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t474a2b5f-d3c0-43d0-859a-5598b3e6388f\tQto_CooledBeamBaseQuantities.GrossWeight\tNUMBER\t\t537\t1\tIfcMassMeasure\t1\n#\nGROUP\t538\tQto_CoolingTowerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0fab17c9-085a-4b26-bea9-e8c6670651d0\tQto_CoolingTowerBaseQuantities.GrossWeight\tNUMBER\t\t538\t1\tIfcMassMeasure\t1\n#\nGROUP\t539\tQto_CoveringBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf2af95ee-26a0-4ba3-8c26-36bbb9d3ae26\tQto_CoveringBaseQuantities.GrossArea\tAREA\t\t539\t1\tIfcAreaMeasure\t1\nPARAM\t8fe2d1a8-3ee2-4b74-9722-6d8a649368b4\tQto_CoveringBaseQuantities.NetArea\tAREA\t\t539\t1\tIfcAreaMeasure\t1\nPARAM\ta4f2db20-7c28-4227-b134-b95238155e4d\tQto_CoveringBaseQuantities.Width\tLENGTH\t\t539\t1\tIfcLengthMeasure\t1\n#\nGROUP\t540\tQto_CurtainWallQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tca10d5a3-1350-4b89-b4a8-52b776a40e24\tQto_CurtainWallQuantities.GrossSideArea\tAREA\t\t540\t1\tIfcAreaMeasure\t1\nPARAM\t2ff22e99-a76c-46c1-a3c2-d43ab1b80cac\tQto_CurtainWallQuantities.Height\tLENGTH\t\t540\t1\tIfcLengthMeasure\t1\nPARAM\t6f17f8b7-7f8d-4c47-95b6-ca609711e684\tQto_CurtainWallQuantities.Length\tLENGTH\t\t540\t1\tIfcLengthMeasure\t1\nPARAM\t7e77a6ae-3390-47fb-b816-7c4bf6011971\tQto_CurtainWallQuantities.NetSideArea\tAREA\t\t540\t1\tIfcAreaMeasure\t1\nPARAM\t69aa76f7-5968-4bab-ae1f-b99635e15d42\tQto_CurtainWallQuantities.Width\tLENGTH\t\t540\t1\tIfcLengthMeasure\t1\n#\nGROUP\t541\tQto_DamperBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2f28baab-a9d0-4ccc-87c5-1c3baaa1acf0\tQto_DamperBaseQuantities.GrossWeight\tNUMBER\t\t541\t1\tIfcMassMeasure\t1\n#\nGROUP\t542\tQto_DistributionChamberElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a63b7a0-3239-41c1-8ccd-74f316b2befc\tQto_DistributionChamberElementBaseQuantities.GrossSurfaceArea\tAREA\t\t542\t1\tIfcAreaMeasure\t1\nPARAM\te12cf6db-d8fd-4764-9c20-9f6ec2aa1efd\tQto_DistributionChamberElementBaseQuantities.GrossVolume\tVOLUME\t\t542\t1\tIfcVolumeMeasure\t1\nPARAM\ta19f95e1-1329-4648-9c8d-b63247d55644\tQto_DistributionChamberElementBaseQuantities.NetSurfaceArea\tAREA\t\t542\t1\tIfcAreaMeasure\t1\nPARAM\t4aa02212-f677-4d92-8730-b106d6c45af5\tQto_DistributionChamberElementBaseQuantities.NetVolume\tVOLUME\t\t542\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t543\tQto_DoorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t13ee8da9-c23f-46f1-8cee-9424eecb0c49\tQto_DoorBaseQuantities.Area\tAREA\t\t543\t1\tIfcAreaMeasure\t1\nPARAM\t9d52d7de-84d5-4408-8222-1f65265cb7eb\tQto_DoorBaseQuantities.Height\tLENGTH\t\t543\t1\tIfcLengthMeasure\t1\nPARAM\t3434c260-9ca8-4662-870a-72b876038812\tQto_DoorBaseQuantities.Perimeter\tLENGTH\t\t543\t1\tIfcLengthMeasure\t1\nPARAM\tac6bc708-46e3-44a2-bb66-210345ecbd52\tQto_DoorBaseQuantities.Width\tLENGTH\t\t543\t1\tIfcLengthMeasure\t1\n#\nGROUP\t544\tQto_DuctFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2a9bee22-8fbb-455b-9c26-b87b6fc1298d\tQto_DuctFittingBaseQuantities.GrossCrossSectionArea\tAREA\t\t544\t1\tIfcAreaMeasure\t1\nPARAM\tca6efd50-1a30-4f3c-bc6d-b5061ac24841\tQto_DuctFittingBaseQuantities.GrossWeight\tNUMBER\t\t544\t1\tIfcMassMeasure\t1\nPARAM\t4f572399-4ed0-4fa6-92d1-06fb269ae633\tQto_DuctFittingBaseQuantities.Length\tLENGTH\t\t544\t1\tIfcLengthMeasure\t1\nPARAM\t000c594b-f381-4180-8be3-e51dbb0e7885\tQto_DuctFittingBaseQuantities.NetCrossSectionArea\tAREA\t\t544\t1\tIfcAreaMeasure\t1\nPARAM\t9fe865b5-8107-4430-87ef-4f1ab47cde39\tQto_DuctFittingBaseQuantities.OuterSurfaceArea\tAREA\t\t544\t1\tIfcAreaMeasure\t1\n#\nGROUP\t545\tQto_DuctSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t726eb6c1-e56d-40a8-b473-4de941bc92fa\tQto_DuctSegmentBaseQuantities.GrossCrossSectionArea\tAREA\t\t545\t1\tIfcAreaMeasure\t1\nPARAM\tc8c985fe-8539-4df0-a9be-2a8db549018d\tQto_DuctSegmentBaseQuantities.GrossWeight\tNUMBER\t\t545\t1\tIfcMassMeasure\t1\nPARAM\t5770af40-d0e3-489a-b125-0b39067b2f85\tQto_DuctSegmentBaseQuantities.Length\tLENGTH\t\t545\t1\tIfcLengthMeasure\t1\nPARAM\t8d4aefea-86bd-4761-a388-54413297bdd6\tQto_DuctSegmentBaseQuantities.NetCrossSectionArea\tAREA\t\t545\t1\tIfcAreaMeasure\t1\nPARAM\t6236547b-3571-4abb-a18f-297be512f420\tQto_DuctSegmentBaseQuantities.OuterSurfaceArea\tAREA\t\t545\t1\tIfcAreaMeasure\t1\n#\nGROUP\t546\tQto_DuctSilencerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2e0c3751-e33b-4f5d-bbc1-39bfc708fabb\tQto_DuctSilencerBaseQuantities.GrossWeight\tNUMBER\t\t546\t1\tIfcMassMeasure\t1\n#\nGROUP\t547\tQto_ElectricApplianceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t124d8173-da9a-45d8-bd3f-0a6279191953\tQto_ElectricApplianceBaseQuantities.GrossWeight\tNUMBER\t\t547\t1\tIfcMassMeasure\t1\n#\nGROUP\t548\tQto_ElectricDistributionBoardBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tdb679ce9-4e25-4bb7-bd89-d57945253248\tQto_ElectricDistributionBoardBaseQuantities.GrossWeight\tNUMBER\t\t548\t1\tIfcMassMeasure\t1\nPARAM\t6a5dc809-7cff-4df8-8d53-b3a4fa3d7f2c\tQto_ElectricDistributionBoardBaseQuantities.NumberOfCircuits\tINTEGER\t\t548\t1\tIfcCountMeasure\t1\n#\nGROUP\t549\tQto_ElectricFlowStorageDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbc66f87b-0760-45ca-bf46-315dd1e5054d\tQto_ElectricFlowStorageDeviceBaseQuantities.GrossWeight\tNUMBER\t\t549\t1\tIfcMassMeasure\t1\n#\nGROUP\t550\tQto_ElectricGeneratorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t5cc16fe6-2ec3-4c83-aa62-290738e2ccdf\tQto_ElectricGeneratorBaseQuantities.GrossWeight\tNUMBER\t\t550\t1\tIfcMassMeasure\t1\n#\nGROUP\t551\tQto_ElectricMotorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\teeb4e8d0-6814-46ec-9010-19b44e614c17\tQto_ElectricMotorBaseQuantities.GrossWeight\tNUMBER\t\t551\t1\tIfcMassMeasure\t1\n#\nGROUP\t552\tQto_ElectricTimeControlBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t079bff0f-feb3-4245-8f4c-67f4d3ce1817\tQto_ElectricTimeControlBaseQuantities.GrossWeight\tNUMBER\t\t552\t1\tIfcMassMeasure\t1\n#\nGROUP\t553\tQto_EvaporativeCoolerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf59150b8-7bbf-4db8-ad52-52b9950c1066\tQto_EvaporativeCoolerBaseQuantities.GrossWeight\tNUMBER\t\t553\t1\tIfcMassMeasure\t1\n#\nGROUP\t554\tQto_EvaporatorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t482557d1-6b6f-4e57-823c-2362d4ada351\tQto_EvaporatorBaseQuantities.GrossWeight\tNUMBER\t\t554\t1\tIfcMassMeasure\t1\n#\nGROUP\t555\tQto_FanBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t4649fae0-824b-4961-aa9f-0f9c194d0387\tQto_FanBaseQuantities.GrossWeight\tNUMBER\t\t555\t1\tIfcMassMeasure\t1\n#\nGROUP\t556\tQto_FilterBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te4b220d9-d4b2-41f3-8f37-05ac715e0aee\tQto_FilterBaseQuantities.GrossWeight\tNUMBER\t\t556\t1\tIfcMassMeasure\t1\n#\nGROUP\t557\tQto_FireSuppressionTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t55a5f984-af0f-49bb-b9c9-705f9725e88f\tQto_FireSuppressionTerminalBaseQuantities.GrossWeight\tNUMBER\t\t557\t1\tIfcMassMeasure\t1\n#\nGROUP\t558\tQto_FlowInstrumentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t349c4747-b7ad-428a-a3ad-4c8813b494aa\tQto_FlowInstrumentBaseQuantities.GrossWeight\tNUMBER\t\t558\t1\tIfcMassMeasure\t1\n#\nGROUP\t559\tQto_FlowMeterBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7a1ff13b-53b8-4aa3-b6ad-94fcac17c8b1\tQto_FlowMeterBaseQuantities.GrossWeight\tNUMBER\t\t559\t1\tIfcMassMeasure\t1\n#\nGROUP\t560\tQto_FootingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3b2cc6bd-5fb9-44f2-9392-5ba2e56afe9e\tQto_FootingBaseQuantities.CrossSectionArea\tAREA\t\t560\t1\tIfcAreaMeasure\t1\nPARAM\ta78631fa-a773-4f4e-b204-3d20ed0ed889\tQto_FootingBaseQuantities.GrossSurfaceArea\tAREA\t\t560\t1\tIfcAreaMeasure\t1\nPARAM\t7eb42f9e-d367-4749-890b-e4e5c529f9a8\tQto_FootingBaseQuantities.GrossVolume\tVOLUME\t\t560\t1\tIfcVolumeMeasure\t1\nPARAM\t2d487b95-1014-4f39-ae9d-a69987967967\tQto_FootingBaseQuantities.GrossWeight\tNUMBER\t\t560\t1\tIfcMassMeasure\t1\nPARAM\tb89ab78f-1e8c-4c9f-98ba-8e3d71b8e507\tQto_FootingBaseQuantities.Height\tLENGTH\t\t560\t1\tIfcLengthMeasure\t1\nPARAM\tb60a62fe-ed5d-402d-bdd4-a8327b3a511f\tQto_FootingBaseQuantities.Length\tLENGTH\t\t560\t1\tIfcLengthMeasure\t1\nPARAM\t102f2406-fd11-4157-9709-bd7b9890ff9c\tQto_FootingBaseQuantities.NetVolume\tVOLUME\t\t560\t1\tIfcVolumeMeasure\t1\nPARAM\t3584bcaa-e3f6-4af6-9005-4688a76c0d31\tQto_FootingBaseQuantities.NetWeight\tNUMBER\t\t560\t1\tIfcMassMeasure\t1\nPARAM\t780e9bac-de3a-42a2-a5c5-dbed6d53cd0e\tQto_FootingBaseQuantities.OuterSurfaceArea\tAREA\t\t560\t1\tIfcAreaMeasure\t1\nPARAM\t902845f2-976d-4e61-864e-645d1dfd07b2\tQto_FootingBaseQuantities.Width\tLENGTH\t\t560\t1\tIfcLengthMeasure\t1\n#\nGROUP\t561\tQto_HeatExchangerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tbad421e0-7e01-44a9-a9b6-aefe2d0e2bd4\tQto_HeatExchangerBaseQuantities.GrossWeight\tNUMBER\t\t561\t1\tIfcMassMeasure\t1\n#\nGROUP\t562\tQto_HumidifierBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8d7655c4-d9c4-443e-89e7-4fbd267231d4\tQto_HumidifierBaseQuantities.GrossWeight\tNUMBER\t\t562\t1\tIfcMassMeasure\t1\n#\nGROUP\t563\tQto_InterceptorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t26e71c7e-599c-4c53-b33f-329bb8781b98\tQto_InterceptorBaseQuantities.GrossWeight\tNUMBER\t\t563\t1\tIfcMassMeasure\t1\n#\nGROUP\t564\tQto_JunctionBoxBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1f2db772-c7ef-4d7b-83f2-dc928dadefc5\tQto_JunctionBoxBaseQuantities.GrossWeight\tNUMBER\t\t564\t1\tIfcMassMeasure\t1\nPARAM\t250581c5-0d72-44c4-8e54-fd8a32d4e354\tQto_JunctionBoxBaseQuantities.NumberOfGangs\tINTEGER\t\t564\t1\tIfcCountMeasure\t1\n#\nGROUP\t565\tQto_LaborResourceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t50875b91-708b-44ee-a5e0-aaa2307755f5\tQto_LaborResourceBaseQuantities.OvertimeWork\tNUMBER\t\t565\t1\tIfcTimeMeasure\t1\nPARAM\tf03b5ccb-adcf-4d05-bfa4-95bd7c102ad9\tQto_LaborResourceBaseQuantities.StandardWork\tNUMBER\t\t565\t1\tIfcTimeMeasure\t1\n#\nGROUP\t566\tQto_LampBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf1ba94b9-a1c5-43ea-96fc-fdc9401cc034\tQto_LampBaseQuantities.GrossWeight\tNUMBER\t\t566\t1\tIfcMassMeasure\t1\n#\nGROUP\t567\tQto_LightFixtureBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t10c33af5-56c5-4d95-ab30-5d8b143b7d80\tQto_LightFixtureBaseQuantities.GrossWeight\tNUMBER\t\t567\t1\tIfcMassMeasure\t1\n#\nGROUP\t568\tQto_MemberBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf8db575f-b52a-4c13-ab8d-e26a6c0cc9bc\tQto_MemberBaseQuantities.CrossSectionArea\tAREA\t\t568\t1\tIfcAreaMeasure\t1\nPARAM\t73e21012-961a-4325-8ff2-d4b68b5e3349\tQto_MemberBaseQuantities.GrossSurfaceArea\tAREA\t\t568\t1\tIfcAreaMeasure\t1\nPARAM\ta275609f-9f44-4fc7-bf48-ee034ce29a42\tQto_MemberBaseQuantities.GrossVolume\tVOLUME\t\t568\t1\tIfcVolumeMeasure\t1\nPARAM\teb9f962e-3960-4409-bdca-9d28ef181c6e\tQto_MemberBaseQuantities.GrossWeight\tNUMBER\t\t568\t1\tIfcMassMeasure\t1\nPARAM\t7166872a-305c-47c0-b118-14cc08acd8c8\tQto_MemberBaseQuantities.Length\tLENGTH\t\t568\t1\tIfcLengthMeasure\t1\nPARAM\t08de4b92-fa62-41a5-b3bf-b64311d51afa\tQto_MemberBaseQuantities.NetSurfaceArea\tAREA\t\t568\t1\tIfcAreaMeasure\t1\nPARAM\tb1d7d7f7-9f40-470b-ad1b-9968758e70c7\tQto_MemberBaseQuantities.NetVolume\tVOLUME\t\t568\t1\tIfcVolumeMeasure\t1\nPARAM\tc5d683fe-c290-4d5f-a9cd-f33079531df0\tQto_MemberBaseQuantities.NetWeight\tNUMBER\t\t568\t1\tIfcMassMeasure\t1\nPARAM\t95c6dacf-04d8-4101-9e2d-7dfc04cb2f7f\tQto_MemberBaseQuantities.OuterSurfaceArea\tAREA\t\t568\t1\tIfcAreaMeasure\t1\n#\nGROUP\t569\tQto_MotorConnectionBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf46a7a4b-8ce0-49bb-b3bb-b44f0119710b\tQto_MotorConnectionBaseQuantities.GrossWeight\tNUMBER\t\t569\t1\tIfcMassMeasure\t1\n#\nGROUP\t570\tQto_OpeningElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t48981854-9858-42c0-aadb-1735f160dd34\tQto_OpeningElementBaseQuantities.Area\tAREA\t\t570\t1\tIfcAreaMeasure\t1\nPARAM\t14cf5683-fc9c-44c5-87d3-c937932fda67\tQto_OpeningElementBaseQuantities.Depth\tLENGTH\t\t570\t1\tIfcLengthMeasure\t1\nPARAM\t4e3c23a2-9a6e-411a-bca9-20397a1c14fb\tQto_OpeningElementBaseQuantities.Height\tLENGTH\t\t570\t1\tIfcLengthMeasure\t1\nPARAM\t37062a0a-f986-4156-8b13-9a1b07916a03\tQto_OpeningElementBaseQuantities.Volume\tVOLUME\t\t570\t1\tIfcVolumeMeasure\t1\nPARAM\t4e144a12-30c4-4db9-9cbe-fbc1bde7f07c\tQto_OpeningElementBaseQuantities.Width\tLENGTH\t\t570\t1\tIfcLengthMeasure\t1\n#\nGROUP\t571\tQto_OutletBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9d10dccd-61e1-4fb5-a1e4-7ee2adae99c4\tQto_OutletBaseQuantities.GrossWeight\tNUMBER\t\t571\t1\tIfcMassMeasure\t1\n#\nGROUP\t572\tQto_PileBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0e8ec0c5-97f7-46c9-b1c0-32f21c1765db\tQto_PileBaseQuantities.CrossSectionArea\tAREA\t\t572\t1\tIfcAreaMeasure\t1\nPARAM\t42a00474-6e1e-47f5-91a4-f8eef05653a1\tQto_PileBaseQuantities.GrossSurfaceArea\tAREA\t\t572\t1\tIfcAreaMeasure\t1\nPARAM\te40e4036-3573-4c2c-b956-b7aa363a7fbf\tQto_PileBaseQuantities.GrossVolume\tVOLUME\t\t572\t1\tIfcVolumeMeasure\t1\nPARAM\td2e93518-37d0-4b76-9506-65a115a392b6\tQto_PileBaseQuantities.GrossWeight\tNUMBER\t\t572\t1\tIfcMassMeasure\t1\nPARAM\tddb35aa5-1f79-4f2d-896e-9dbad6e68d99\tQto_PileBaseQuantities.Length\tLENGTH\t\t572\t1\tIfcLengthMeasure\t1\nPARAM\t88dc8673-3f77-44c0-bd46-62954a33f447\tQto_PileBaseQuantities.NetVolume\tVOLUME\t\t572\t1\tIfcVolumeMeasure\t1\nPARAM\t68781760-9338-434f-8a62-41538c0db1b9\tQto_PileBaseQuantities.NetWeight\tNUMBER\t\t572\t1\tIfcMassMeasure\t1\nPARAM\td6f4c5f2-9542-4d03-b425-1fc2c63e6edf\tQto_PileBaseQuantities.OuterSurfaceArea\tAREA\t\t572\t1\tIfcAreaMeasure\t1\n#\nGROUP\t573\tQto_PipeFittingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83c310b6-31e4-4965-addc-58c2e8043c86\tQto_PipeFittingBaseQuantities.GrossCrossSectionArea\tAREA\t\t573\t1\tIfcAreaMeasure\t1\nPARAM\t51d2aa19-91d1-40d6-a31e-a19b2b5de65b\tQto_PipeFittingBaseQuantities.GrossWeight\tNUMBER\t\t573\t1\tIfcMassMeasure\t1\nPARAM\t85bc057b-f676-4a2c-a434-8d1c7a4ce3c2\tQto_PipeFittingBaseQuantities.Length\tLENGTH\t\t573\t1\tIfcLengthMeasure\t1\nPARAM\tdafe79a5-95cb-4432-b699-299415eaa1e0\tQto_PipeFittingBaseQuantities.NetCrossSectionArea\tAREA\t\t573\t1\tIfcAreaMeasure\t1\nPARAM\t1edff67b-ea89-475b-a6a5-c4b7cae59616\tQto_PipeFittingBaseQuantities.NetWeight\tNUMBER\t\t573\t1\tIfcMassMeasure\t1\nPARAM\t50b351fb-6fbc-4509-a08c-8fe3d0ce1c8c\tQto_PipeFittingBaseQuantities.OuterSurfaceArea\tAREA\t\t573\t1\tIfcAreaMeasure\t1\n#\nGROUP\t574\tQto_PipeSegmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t331265e3-e2a1-4341-9b9c-bc9e6df56e49\tQto_PipeSegmentBaseQuantities.GrossCrossSectionArea\tAREA\t\t574\t1\tIfcAreaMeasure\t1\nPARAM\td4859687-f4fe-4298-a235-7228929744d9\tQto_PipeSegmentBaseQuantities.GrossWeight\tNUMBER\t\t574\t1\tIfcMassMeasure\t1\nPARAM\tc8440aa7-c619-4d27-9ccc-eb3b0fd7ff40\tQto_PipeSegmentBaseQuantities.Length\tLENGTH\t\t574\t1\tIfcLengthMeasure\t1\nPARAM\t28e2bc44-55f9-4e45-a689-e84ba8120f1a\tQto_PipeSegmentBaseQuantities.NetCrossSectionArea\tAREA\t\t574\t1\tIfcAreaMeasure\t1\nPARAM\t108bcae6-6105-4a96-a028-83326a9bd6ba\tQto_PipeSegmentBaseQuantities.NetWeight\tNUMBER\t\t574\t1\tIfcMassMeasure\t1\nPARAM\td361ed2d-1f52-4362-8910-29e446da4b7a\tQto_PipeSegmentBaseQuantities.OuterSurfaceArea\tAREA\t\t574\t1\tIfcAreaMeasure\t1\n#\nGROUP\t575\tQto_PlateBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t7d2068c2-3614-4bf8-9ae8-ec3b4b6d3152\tQto_PlateBaseQuantities.GrossArea\tAREA\t\t575\t1\tIfcAreaMeasure\t1\nPARAM\t452df3d5-4c01-4941-8656-f3b5ea754c50\tQto_PlateBaseQuantities.GrossVolume\tVOLUME\t\t575\t1\tIfcVolumeMeasure\t1\nPARAM\t1d6e2b8a-4f15-4857-aac8-f009b0d361c9\tQto_PlateBaseQuantities.GrossWeight\tNUMBER\t\t575\t1\tIfcMassMeasure\t1\nPARAM\t8e09dea7-951f-4fff-831d-5d12649eb03c\tQto_PlateBaseQuantities.NetArea\tAREA\t\t575\t1\tIfcAreaMeasure\t1\nPARAM\t25e5c3fe-8803-4284-84b9-c49a9ce2563e\tQto_PlateBaseQuantities.NetVolume\tVOLUME\t\t575\t1\tIfcVolumeMeasure\t1\nPARAM\t3ebc0e1f-f66d-4016-8eed-02cc3a6f6f06\tQto_PlateBaseQuantities.NetWeight\tNUMBER\t\t575\t1\tIfcMassMeasure\t1\nPARAM\t0e0b6049-6f82-43df-85ff-d5d202e03433\tQto_PlateBaseQuantities.Perimeter\tLENGTH\t\t575\t1\tIfcLengthMeasure\t1\nPARAM\tf4112c07-b6bd-44de-8f0c-6bb39c668448\tQto_PlateBaseQuantities.Width\tLENGTH\t\t575\t1\tIfcLengthMeasure\t1\n#\nGROUP\t576\tQto_ProjectionElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t9f508b19-4688-4594-aa1f-0c187dddbcf8\tQto_ProjectionElementBaseQuantities.Area\tAREA\t\t576\t1\tIfcAreaMeasure\t1\nPARAM\ta51b6943-c05c-4450-82ae-93cf717ede32\tQto_ProjectionElementBaseQuantities.Volume\tVOLUME\t\t576\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t577\tQto_ProtectiveDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tacb0bfd8-be18-4915-b4d6-587100e2fe3f\tQto_ProtectiveDeviceBaseQuantities.GrossWeight\tNUMBER\t\t577\t1\tIfcMassMeasure\t1\n#\nGROUP\t578\tQto_ProtectiveDeviceTrippingUnitBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta12ba581-2fdc-4964-b048-0d8b91719c98\tQto_ProtectiveDeviceTrippingUnitBaseQuantities.GrossWeight\tNUMBER\t\t578\t1\tIfcMassMeasure\t1\n#\nGROUP\t579\tQto_PumpBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t27186f31-f72e-4f45-89d3-73da4c5ec9ff\tQto_PumpBaseQuantities.GrossWeight\tNUMBER\t\t579\t1\tIfcMassMeasure\t1\n#\nGROUP\t580\tQto_RailingBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t2f927e26-5e88-4fea-b13a-068de4fb4358\tQto_RailingBaseQuantities.Length\tLENGTH\t\t580\t1\tIfcLengthMeasure\t1\n#\nGROUP\t581\tQto_RampFlightBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t97552d67-05fb-4931-b85b-157020e9f33c\tQto_RampFlightBaseQuantities.GrossArea\tAREA\t\t581\t1\tIfcAreaMeasure\t1\nPARAM\tb3d8220e-acbf-45ad-98a1-ed1f55bb01ff\tQto_RampFlightBaseQuantities.GrossVolume\tVOLUME\t\t581\t1\tIfcVolumeMeasure\t1\nPARAM\tb3d8a3f1-8f2f-4857-8cf0-fc46da913b25\tQto_RampFlightBaseQuantities.Length\tLENGTH\t\t581\t1\tIfcLengthMeasure\t1\nPARAM\t9aef8358-3619-44ef-aaac-0c043ff14f6c\tQto_RampFlightBaseQuantities.NetArea\tAREA\t\t581\t1\tIfcAreaMeasure\t1\nPARAM\tefd2a2f8-dd76-4726-ba48-2a5133cdebb2\tQto_RampFlightBaseQuantities.NetVolume\tVOLUME\t\t581\t1\tIfcVolumeMeasure\t1\nPARAM\t0eeff58b-6937-4533-a2b3-2392634a906e\tQto_RampFlightBaseQuantities.Width\tLENGTH\t\t581\t1\tIfcLengthMeasure\t1\n#\nGROUP\t582\tQto_ReinforcingElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t28f00955-3059-4784-8da9-7fc6efbd7427\tQto_ReinforcingElementBaseQuantities.Count\tINTEGER\t\t582\t1\tIfcCountMeasure\t1\nPARAM\t7860ad61-83a4-42ac-811b-95f3c8f9825a\tQto_ReinforcingElementBaseQuantities.Length\tLENGTH\t\t582\t1\tIfcLengthMeasure\t1\nPARAM\td313d164-de03-4082-ad3f-95193d75e8dd\tQto_ReinforcingElementBaseQuantities.Weight\tNUMBER\t\t582\t1\tIfcMassMeasure\t1\n#\nGROUP\t583\tQto_RoofBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tc4b40295-6be0-4ffd-a25f-f6217f6d989c\tQto_RoofBaseQuantities.GrossArea\tAREA\t\t583\t1\tIfcAreaMeasure\t1\nPARAM\te4ad19c4-9d6d-4b70-aca7-a936f6fc88b6\tQto_RoofBaseQuantities.NetArea\tAREA\t\t583\t1\tIfcAreaMeasure\t1\nPARAM\tb84d9709-2e45-4395-9d2e-829289d59d11\tQto_RoofBaseQuantities.ProjectedArea\tAREA\t\t583\t1\tIfcAreaMeasure\t1\n#\nGROUP\t584\tQto_SanitaryTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t115c4179-c0c2-47cc-916b-512fb3cf51af\tQto_SanitaryTerminalBaseQuantities.GrossWeight\tNUMBER\t\t584\t1\tIfcMassMeasure\t1\n#\nGROUP\t585\tQto_SensorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tab2131bb-121f-418f-b28b-a0d8fca362c0\tQto_SensorBaseQuantities.GrossWeight\tNUMBER\t\t585\t1\tIfcMassMeasure\t1\n#\nGROUP\t586\tQto_SiteBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t72793c92-1790-450c-b410-1e61523edbc1\tQto_SiteBaseQuantities.GrossArea\tAREA\t\t586\t1\tIfcAreaMeasure\t1\nPARAM\t4e16d8ca-9a67-4b00-a732-7e4a13b2c9fa\tQto_SiteBaseQuantities.GrossPerimeter\tLENGTH\t\t586\t1\tIfcLengthMeasure\t1\n#\nGROUP\t587\tQto_SlabBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t8eda2582-0291-4cea-bb43-988c084900cc\tQto_SlabBaseQuantities.Depth\tLENGTH\t\t587\t1\tIfcLengthMeasure\t1\nPARAM\t9fdc6e2f-51b7-48dc-a7cf-6814a70dd693\tQto_SlabBaseQuantities.GrossArea\tAREA\t\t587\t1\tIfcAreaMeasure\t1\nPARAM\t868643eb-f5e8-449b-9c08-0f34e8464eb0\tQto_SlabBaseQuantities.GrossVolume\tVOLUME\t\t587\t1\tIfcVolumeMeasure\t1\nPARAM\tdb6d0d2c-1934-44f0-85ea-b9ad7b6d2a66\tQto_SlabBaseQuantities.GrossWeight\tNUMBER\t\t587\t1\tIfcMassMeasure\t1\nPARAM\t7dc38c1e-73ac-442b-ad21-ff81ed30a3bb\tQto_SlabBaseQuantities.Length\tLENGTH\t\t587\t1\tIfcLengthMeasure\t1\nPARAM\td4d20fb1-f366-4e31-9ec2-0edd5afb2ae8\tQto_SlabBaseQuantities.NetArea\tAREA\t\t587\t1\tIfcAreaMeasure\t1\nPARAM\t0878815a-4acd-4917-aa25-0a74851d9cd4\tQto_SlabBaseQuantities.NetVolume\tVOLUME\t\t587\t1\tIfcVolumeMeasure\t1\nPARAM\t2ce16095-acf0-43f7-86d4-ea79c843883b\tQto_SlabBaseQuantities.NetWeight\tNUMBER\t\t587\t1\tIfcMassMeasure\t1\nPARAM\ta8ba1f48-1b4c-444e-923e-f663e967df9a\tQto_SlabBaseQuantities.Perimeter\tLENGTH\t\t587\t1\tIfcLengthMeasure\t1\nPARAM\tac3b5bf1-b5f5-42cc-80c1-4917abc52389\tQto_SlabBaseQuantities.Width\tLENGTH\t\t587\t1\tIfcLengthMeasure\t1\n#\nGROUP\t588\tQto_SolarDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t826a5fcf-be3f-44fa-b178-cbd64230e6e0\tQto_SolarDeviceBaseQuantities.GrossArea\tAREA\t\t588\t1\tIfcAreaMeasure\t1\nPARAM\te4168c63-1f75-493d-8402-c659678915fe\tQto_SolarDeviceBaseQuantities.GrossWeight\tNUMBER\t\t588\t1\tIfcMassMeasure\t1\n#\nGROUP\t589\tQto_SpaceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t89473d08-a401-4e1e-8f0e-d83fd943db92\tQto_SpaceBaseQuantities.FinishCeilingHeight\tLENGTH\t\t589\t1\tIfcLengthMeasure\t1\nPARAM\t030ba543-7f29-49c2-a7bc-84076e5e3495\tQto_SpaceBaseQuantities.FinishFloorHeight\tLENGTH\t\t589\t1\tIfcLengthMeasure\t1\nPARAM\t90c8ba61-9dc5-4a55-a3de-2c621945bb9b\tQto_SpaceBaseQuantities.GrossCeilingArea\tAREA\t\t589\t1\tIfcAreaMeasure\t1\nPARAM\t90cdcbff-af35-432b-93f6-75be19321859\tQto_SpaceBaseQuantities.GrossFloorArea\tAREA\t\t589\t1\tIfcAreaMeasure\t1\nPARAM\tc09c7f71-d3cf-4353-b464-2ffe33259c77\tQto_SpaceBaseQuantities.GrossPerimeter\tLENGTH\t\t589\t1\tIfcLengthMeasure\t1\nPARAM\t60cda972-2bf6-41e2-aedf-b77bdaa8f9bb\tQto_SpaceBaseQuantities.GrossVolume\tVOLUME\t\t589\t1\tIfcVolumeMeasure\t1\nPARAM\tc5688503-1f22-41a5-a3a7-3ae74c0c8c5b\tQto_SpaceBaseQuantities.GrossWallArea\tAREA\t\t589\t1\tIfcAreaMeasure\t1\nPARAM\t71b6564a-d911-4145-aea9-a56e8a47e676\tQto_SpaceBaseQuantities.Height\tLENGTH\t\t589\t1\tIfcLengthMeasure\t1\nPARAM\t6696b610-74e6-4839-a751-4df9195189b8\tQto_SpaceBaseQuantities.NetCeilingArea\tAREA\t\t589\t1\tIfcAreaMeasure\t1\nPARAM\t061ccacb-4fec-4d7c-b4c1-76dc1c65c7c2\tQto_SpaceBaseQuantities.NetFloorArea\tAREA\t\t589\t1\tIfcAreaMeasure\t1\nPARAM\t4d892d15-22ca-442c-a007-0b15c8698f77\tQto_SpaceBaseQuantities.NetPerimeter\tLENGTH\t\t589\t1\tIfcLengthMeasure\t1\nPARAM\t861b7ce2-9eb1-48db-ae25-1f69df60265b\tQto_SpaceBaseQuantities.NetVolume\tVOLUME\t\t589\t1\tIfcVolumeMeasure\t1\nPARAM\t7fe66068-6e71-4f6b-be18-e07efb6ced82\tQto_SpaceBaseQuantities.NetWallArea\tAREA\t\t589\t1\tIfcAreaMeasure\t1\n#\nGROUP\t590\tQto_SpaceHeaterBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t08350294-6a6d-46c0-8e61-b9b285e571a2\tQto_SpaceHeaterBaseQuantities.GrossWeight\tNUMBER\t\t590\t1\tIfcMassMeasure\t1\nPARAM\t6feb9f3b-19e7-4dd4-ade3-4b663efc146f\tQto_SpaceHeaterBaseQuantities.Length\tLENGTH\t\t590\t1\tIfcLengthMeasure\t1\nPARAM\t31cc0a39-adba-4da9-836e-b9d3afaefdeb\tQto_SpaceHeaterBaseQuantities.NetWeight\tNUMBER\t\t590\t1\tIfcMassMeasure\t1\n#\nGROUP\t591\tQto_StackTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tafe7bdeb-250b-4398-a1e5-9224f8d2b7e5\tQto_StackTerminalBaseQuantities.GrossWeight\tNUMBER\t\t591\t1\tIfcMassMeasure\t1\n#\nGROUP\t592\tQto_StairFlightBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t90986c0e-1cf3-47ee-895d-c299b80ffddf\tQto_StairFlightBaseQuantities.GrossVolume\tVOLUME\t\t592\t1\tIfcVolumeMeasure\t1\nPARAM\ta4210939-8e6c-44ee-8004-cfcb5d512acb\tQto_StairFlightBaseQuantities.Length\tLENGTH\t\t592\t1\tIfcLengthMeasure\t1\nPARAM\t83a0ac8a-e64f-429d-9dc6-e1167b1f5537\tQto_StairFlightBaseQuantities.NetVolume\tVOLUME\t\t592\t1\tIfcVolumeMeasure\t1\n#\nGROUP\t593\tQto_SwitchingDeviceBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta120c0bf-9ca8-43af-b719-88225d16907e\tQto_SwitchingDeviceBaseQuantities.GrossWeight\tNUMBER\t\t593\t1\tIfcMassMeasure\t1\n#\nGROUP\t594\tQto_TankBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t0f597677-c96d-421d-8871-5eef73461056\tQto_TankBaseQuantities.GrossWeight\tNUMBER\t\t594\t1\tIfcMassMeasure\t1\nPARAM\tb57d94b3-2667-42da-aad3-231912df8a7b\tQto_TankBaseQuantities.NetWeight\tNUMBER\t\t594\t1\tIfcMassMeasure\t1\nPARAM\tec62fbc2-a909-4e3e-b8cf-1fa6131a1aa2\tQto_TankBaseQuantities.TotalSurfaceArea\tAREA\t\t594\t1\tIfcAreaMeasure\t1\n#\nGROUP\t595\tQto_TransformerBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t3a41788b-a8de-4ed0-853b-4ff5d44d69a9\tQto_TransformerBaseQuantities.GrossWeight\tNUMBER\t\t595\t1\tIfcMassMeasure\t1\n#\nGROUP\t596\tQto_TubeBundleBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\ta4686a0f-8d97-4b46-be9c-c6e72e21d7d0\tQto_TubeBundleBaseQuantities.GrossWeight\tNUMBER\t\t596\t1\tIfcMassMeasure\t1\nPARAM\tf83dde95-d2ea-4099-9973-ec47ecc82e8e\tQto_TubeBundleBaseQuantities.NetWeight\tNUMBER\t\t596\t1\tIfcMassMeasure\t1\n#\nGROUP\t597\tQto_UnitaryControlElementBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t70efc986-7b73-4b17-bd1f-8839534eac0e\tQto_UnitaryControlElementBaseQuantities.GrossWeight\tNUMBER\t\t597\t1\tIfcMassMeasure\t1\n#\nGROUP\t598\tQto_UnitaryEquipmentBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t1eeec8bf-f172-4add-a79c-401a4c3adcb4\tQto_UnitaryEquipmentBaseQuantities.GrossWeight\tNUMBER\t\t598\t1\tIfcMassMeasure\t1\n#\nGROUP\t599\tQto_ValveBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t28d60e6c-2bbd-4884-a09d-28a0bc75d8f6\tQto_ValveBaseQuantities.GrossWeight\tNUMBER\t\t599\t1\tIfcMassMeasure\t1\n#\nGROUP\t600\tQto_VibrationIsolatorBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfbe06ed6-65df-465f-87ce-5a23edf4d8ed\tQto_VibrationIsolatorBaseQuantities.GrossWeight\tNUMBER\t\t600\t1\tIfcMassMeasure\t1\n#\nGROUP\t601\tQto_WallBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\te8e3fb80-34c1-41eb-954d-fec1ac06290e\tQto_WallBaseQuantities.GrossFootprintArea\tAREA\t\t601\t1\tIfcAreaMeasure\t1\nPARAM\tdbc8ee14-6034-4cd3-9236-4e8a894901c1\tQto_WallBaseQuantities.GrossSideArea\tAREA\t\t601\t1\tIfcAreaMeasure\t1\nPARAM\t4b40e73c-b43b-4588-a3fa-ab33edfce60b\tQto_WallBaseQuantities.GrossVolume\tVOLUME\t\t601\t1\tIfcVolumeMeasure\t1\nPARAM\t40326b46-0a75-49e7-a25d-6da407254ef5\tQto_WallBaseQuantities.GrossWeight\tNUMBER\t\t601\t1\tIfcMassMeasure\t1\nPARAM\tb9f35976-5649-45f8-86eb-8288656ed38f\tQto_WallBaseQuantities.Height\tLENGTH\t\t601\t1\tIfcLengthMeasure\t1\nPARAM\t51166695-c636-429f-8d2c-e8112ab48ca5\tQto_WallBaseQuantities.Length\tLENGTH\t\t601\t1\tIfcLengthMeasure\t1\nPARAM\t13353b73-5e5e-4d92-820f-ae4cc0379e24\tQto_WallBaseQuantities.NetFootprintArea\tAREA\t\t601\t1\tIfcAreaMeasure\t1\nPARAM\tdcb36a1f-0872-419a-bf56-63cf2d22b3da\tQto_WallBaseQuantities.NetSideArea\tAREA\t\t601\t1\tIfcAreaMeasure\t1\nPARAM\t13e6ad86-1462-4242-9ebb-d252bb1d9192\tQto_WallBaseQuantities.NetVolume\tVOLUME\t\t601\t1\tIfcVolumeMeasure\t1\nPARAM\t57114e5d-8d01-4038-a38e-6dfd1cd202e0\tQto_WallBaseQuantities.NetWeight\tNUMBER\t\t601\t1\tIfcMassMeasure\t1\nPARAM\t0b05421f-55df-4243-909f-fd4e0871dcde\tQto_WallBaseQuantities.Width\tLENGTH\t\t601\t1\tIfcLengthMeasure\t1\n#\nGROUP\t602\tQto_WasteTerminalBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tfa5e8d81-36f7-42b7-a1c7-1f77e508a6cd\tQto_WasteTerminalBaseQuantities.GrossWeight\tNUMBER\t\t602\t1\tIfcMassMeasure\t1\n#\nGROUP\t603\tQto_WindowBaseQuantities\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\t83a23e3c-3914-4638-81aa-b408f4646ccc\tQto_WindowBaseQuantities.Area\tAREA\t\t603\t1\tIfcAreaMeasure\t1\nPARAM\t35670df8-40b5-403a-b57b-5ab2880b1215\tQto_WindowBaseQuantities.Height\tLENGTH\t\t603\t1\tIfcLengthMeasure\t1\nPARAM\te41e4c8a-e44e-49b4-8e38-c3e7a9195a62\tQto_WindowBaseQuantities.Perimeter\tLENGTH\t\t603\t1\tIfcLengthMeasure\t1\nPARAM\t60599e64-a277-40ed-bb90-640b0134f781\tQto_WindowBaseQuantities.Width\tLENGTH\t\t603\t1\tIfcLengthMeasure\t1\n#\nGROUP\t2\tRevit IFCExporter Parameters\n*PARAM\tGUID\tNAME\tDATATYPE\tDATACATEGORY\tGROUP\tVISIBLE\tDESCRIPTION\tUSERMODIFIABLE\n#\nPARAM\tf440bb0c-7518-406c-9b84-1de93ecb2d67\tClassificationCode\tTEXT\t\t2\t1\t\t1\nPARAM\t3e35c8f6-18a2-4678-92a7-29f9a2f790bf\tClassificationCode(2)\tTEXT\t\t2\t1\t\t1\nPARAM\t9c810054-8b25-4c82-a8f6-a19d4bde001f\tClassificationCode(3)\tTEXT\t\t2\t1\t\t1\nPARAM\t902d8dc8-abda-4046-97eb-ebf0c69ae3b2\tClassificationCode(4)\tTEXT\t\t2\t1\t\t1\nPARAM\t6fb63bec-20f3-4855-9697-a4a087577498\tClassificationCode(5)\tTEXT\t\t2\t1\t\t1\nPARAM\tf6117ce5-e8d3-4b6d-9598-7fd7cc2f729e\tClassificationCode(6)\tTEXT\t\t2\t1\t\t1\nPARAM\tf67f3f99-d04c-4b62-a087-81ab6a1d50c4\tClassificationCode(7)\tTEXT\t\t2\t1\t\t1\nPARAM\tb00af5fc-5f1b-40d6-87de-8902f93f7aab\tClassificationCode(8)\tTEXT\t\t2\t1\t\t1\nPARAM\t88125f36-db46-4998-a16d-605bf75cb83f\tClassificationCode(9)\tTEXT\t\t2\t1\t\t1\nPARAM\t0a531080-2060-4bc6-802b-9230d35ac14d\tClassificationCode(10)\tTEXT\t\t2\t1\t\t1\nPARAM\t26f1bba3-a3cb-4fbc-ba29-d7650f1bcb4b\tAssembly Code\tTEXT\t\t2\t1\tUniformat Classification\t1\nPARAM\tb623d495-dc76-46cb-ac7b-bfe126728bf2\tAssembly Description\tTEXT\t\t2\t1\tUniformat Classification\t1\nPARAM\t33c16c61-6659-4117-9de9-61841142aa81\tProjectGlobalPositioning.Scale\tNUMBER\t\t2\t1\t\t1\nPARAM\t9ed03820-7425-4d90-868e-2ab0f5319495\tProjectGlobalPositioning.CRSName\tTEXT\t\t2\t1\t\t1\nPARAM\te4090d66-012c-45fe-9ac9-4cfe51c0dd29\tProjectGlobalPositioning.CRSDescription\tTEXT\t\t2\t1\t\t1\nPARAM\te66c0e06-0383-480f-854e-950bb0d435f8\tProjectGlobalPositioning.CRSGeodeticDatum\tTEXT\t\t2\t1\t\t1\nPARAM\tbc47059f-e418-41f2-85b9-8b556dacae5e\tProjectGlobalPositioning.CRSVerticalDatum\tTEXT\t\t2\t1\t\t1\nPARAM\tb1d60aea-e267-4ca1-b899-cb06d5eaa9c8\tProjectGlobalPositioning.CRSMapProjection\tTEXT\t\t2\t1\t\t1\nPARAM\t91150f20-dc6c-4691-be1e-fe0ed0dfae6f\tProjectGlobalPositioning.CRSMapZone\tTEXT\t\t2\t1\t\t1\nPARAM\t093a80c9-4a77-4076-a71c-041e3521608c\tProjectGlobalPositioning.CRSMapUnit\tTEXT\t\t2\t1\t\t1\nPARAM\t9c5ad3aa-75d4-448a-a75c-db72ae2139f8\tIfcQtyDepth\tLENGTH\t\t2\t1\t\t1\nPARAM\t90d03a57-2f8c-4c2f-b478-4c43c164e8d2\tIfcQtyLength\tLENGTH\t\t2\t1\t\t1\nPARAM\t7da39469-0a4a-4e77-8ddd-f4204f1a4001\tIfcQtyWidth\tLENGTH\t\t2\t1\t\t1\nPARAM\t93981409-c088-46b2-93a9-9f3caa98efb1\tIfcQtyDiameter\tLENGTH\t\t2\t1\t\t1\nPARAM\te69202d5-65bd-4f49-88b5-e79ce9824f46\tIfcQtyPerimeter\tLENGTH\t\t2\t1\t\t1\nPARAM\ta902c427-138b-496c-9ae9-5a294d18e178\tIfcQtyNetPerimeter\tLENGTH\t\t2\t1\t\t1\nPARAM\tc88a41a7-31ae-4bfe-bab7-8950a4c3f23a\tIfcQtyGrossPerimeter\tLENGTH\t\t2\t1\t\t1\nPARAM\t706a33bb-dc20-4da4-a013-6f111b175a0a\tIfcQtyNetHeight\tLENGTH\t\t2\t1\t\t1\nPARAM\t12c928d0-fb68-4594-958c-55cc6e01175f\tIfcQtyFinishCeilingHeight\tLENGTH\t\t2\t1\t\t1\nPARAM\t7accfb6d-f55e-472a-b450-2d9dc23f04ce\tIfcQtyGrossHeight\tLENGTH\t\t2\t1\t\t1\nPARAM\t29c0b07c-5eb9-4927-82a0-ef9690eefbc9\tIfcQtyFinishFloorHeight\tLENGTH\t\t2\t1\t\t1\nPARAM\t3784ad06-1e5d-46c1-ae2b-a50ffa959830\tIfcQtyGrossWallArea\tAREA\t\t2\t1\t\t1\nPARAM\t5313d6cd-b3dd-4bf9-8c2e-3ce37e98da79\tIfcQtyArea\tAREA\t\t2\t1\t\t1\nPARAM\t9d022292-72f2-44d3-959c-b1b1c2e5dfaa\tIfcQtyGrossArea\tAREA\t\t2\t1\t\t1\nPARAM\tbdb374af-f2cb-4684-989a-7e53203af0d5\tIfcQtyGrossSurfaceArea\tAREA\t\t2\t1\t\t1\nPARAM\td765bfba-70d7-4977-8ef9-f4d48fa633ca\tIfcQtyNetCeilingArea\tAREA\t\t2\t1\t\t1\nPARAM\t94513a38-2eeb-451c-bb99-f7d6e701b95e\tIfcQtyNetSurfaceArea\tAREA\t\t2\t1\t\t1\nPARAM\t0f29392b-03ec-4be3-8266-8ecac58daf70\tIfcQtyCrossSectionArea\tAREA\t\t2\t1\t\t1\nPARAM\t681c1f20-289c-4691-8c54-61899c7058bb\tIfcQtyOuterSurfaceArea\tAREA\t\t2\t1\t\t1\nPARAM\t783bb840-f3b2-4078-ad37-43e42c706d34\tIfcQtyGrossCeilingArea\tAREA\t\t2\t1\t\t1\nPARAM\tdfbae751-2781-4625-b21f-374fdb7c952e\tIfcQtyNetWallArea\tAREA\t\t2\t1\t\t1\nPARAM\t5a446881-e984-4984-95d6-364b49312cdd\tIfcQtyGrossVolume\tVOLUME\t\t2\t1\t\t1\nPARAM\te9ce1eaf-b637-4f79-9bdd-8028abc942aa\tIfcQtyNetVolume\tVOLUME\t\t2\t1\t\t1\nPARAM\t3d3650c9-ffaf-4df6-bf27-71ce745e7f52\tIfcQtyVolume\tVOLUME\t\t2\t1\t\t1\nPARAM\t4cb8562d-51fd-425f-b51f-66ea7b212a7c\tIfcQtyGrossWeight\tNUMBER\t\t2\t1\t\t1\nPARAM\t343189da-1fca-411a-ad0d-ba735f79c476\tIfcQtyNetWeight\tNUMBER\t\t2\t1\t\t1\nPARAM\t8654f7d0-4046-4658-8f4c-f7c9fae9c48b\tZoneName\tTEXT\t\t2\t1\t\t1\nPARAM\t9d26a3cd-a7e7-48f4-88bf-794ba795a0ba\tZoneGroupName\tTEXT\t\t2\t1\t\t1\nPARAM\t803a2a7e-2c1b-4297-a4bb-9d7431580b75\tZoneObjectType\tTEXT\t\t2\t1\t\t1\nPARAM\t9959634a-4d88-4139-a7d5-51fb25655bd3\tZoneLongName\tTEXT\t\t2\t1\t\t1\nPARAM\tb898aba5-8f77-463f-9e88-56787fa0dd92\tZoneDescription\tTEXT\t\t2\t1\t\t1\nPARAM\t7bd18f19-93ba-418f-8d6e-a4dc6b20353b\tZoneClassificationCode\tTEXT\t\t2\t1\t\t1\nPARAM\t3794b219-95ee-448f-b16f-e878ae037933\tPset_RampFlightCommon.HeadRoom\tLENGTH\t\t2\t1\t\t1\nPARAM\t84db17c9-9e1e-44d1-8cbe-69ea634f0eb1\tIfcRampFlight.IfcQtyLength\tLENGTH\t\t2\t1\t\t1\nPARAM\ta325a639-582a-4bd3-a249-002ac2676be2\tIfcRampFlight.IfcQtyWidth\tLENGTH\t\t2\t1\t\t1\nPARAM\tc6bf3693-2edb-4839-ba96-aa2c6ad33cfa\tIfcRampFlight.IfcQtyGrossArea\tAREA\t\t2\t1\t\t1\nPARAM\t4e23e39d-0809-42ea-8bf0-9b3d19d39875\tIfcRampFlight.IfcQtyGrossVolume\tVOLUME\t\t2\t1\t\t1\nPARAM\te5b29aef-b0aa-40d3-bc71-6fbf911e94b2\tIfcRampLanding.IfcQtyLength\tLENGTH\t\t2\t1\t\t1\nPARAM\tecc2c088-3d16-4c27-af59-8612a77d75af\tIfcRampLanding.IfcQtyWidth\tLENGTH\t\t2\t1\t\t1\nPARAM\t7e016416-a454-4236-b250-dbd0b1d9345b\tIfcRampLanding.IfcQtyDepth\tLENGTH\t\t2\t1\t\t1\nPARAM\t4a40afcb-1979-43ef-a4bf-9df8993161f2\tIfcRampLanding.IfcQtyGrossArea\tAREA\t\t2\t1\t\t1\nPARAM\tc3a0ed1e-419f-43a4-a0d3-b88bbb1ce593\tIfcRampLanding.IfcQtyGrossVolume\tVOLUME\t\t2\t1\t\t1\nPARAM\t785453d0-915c-47a2-a024-fed0cdaf39bf\tIfcRampLanding.IfcQtyGrossWeight\tNUMBER\t\t2\t1\t\t1\nPARAM\t925f5c62-001f-4777-87e2-862c97393149\tIfcRampLanding.IfcQtyNetWeight\tNUMBER\t\t2\t1\t\t1\nPARAM\t8635020d-0c0e-4f3a-ab32-a0ad3b6bfff2\tBIM Standards URL\tURL\t\t2\t1\t\t1\nPARAM\t5267e00f-cf59-45eb-8317-bcd7028fa748\tOmniClass Number\tTEXT\t\t2\t1\t\t1\nPARAM\t90847638-6cac-41fa-9db4-2e151700858f\tOmniClass Title\tTEXT\t\t2\t1\t\t1\nPARAM\t0823de64-1327-4b89-a69c-3820b898d926\tSpace Type (Owner) Reference\tTEXT\t\t2\t1\t\t1\nPARAM\ta52ff1af-7a41-4bee-b956-4866bf6feca0\tSpace Type (Owner) Name\tTEXT\t\t2\t1\t\t1\nPARAM\tec9e9682-f7a2-4a5a-aefc-c77c16401e23\tSpace Category (Owner) Reference\tTEXT\t\t2\t1\t\t1\nPARAM\t34713fdf-e119-49e9-92ed-5d11f708920f\tSpace Category (Owner) Name\tTEXT\t\t2\t1\t\t1\nPARAM\t60ef59f7-f0e7-4d07-bb6e-41fc18510a31\tSpace Category (BOMA) Reference\tTEXT\t\t2\t1\t\t1\nPARAM\t12bd9755-8e4f-4d4e-9240-2301d2cd7617\tSpace Category (BOMA) Name\tTEXT\t\t2\t1\t\t1\nPARAM\ta20a1633-3a20-4337-9a5f-b8fcfa09a428\tSpatial Zone Conditioning Requirement\tTEXT\t\t2\t1\t\t1\nPARAM\t9d838298-00ac-4fec-820b-0d527f887cb7\tHVAC System Type\tTEXT\t\t2\t1\t\t1\nPARAM\tc7c65649-0abc-476d-8693-10779207dd50\tUser Defined HVAC System Type\tTEXT\t\t2\t1\t\t1\nPARAM\t36e76e83-a3c8-41c1-9fe8-a3abef236c3c\tIs Daylit Zone\tYESNO\t\t2\t1\t\t1\nPARAM\t7ee7d7b5-8c02-4055-8c24-09d8f913cca2\tNumber of Daylight Sensors\tINTEGER\t\t2\t1\t\t1\nPARAM\t8253a0dd-4285-4210-869e-2a0f7c2d8ee4\tDesign Illuminance\tNUMBER\t\t2\t1\t\t1\nPARAM\t7d669cb2-e5ba-445e-b291-87a5b64f61eb\tLighting Controls Type URL\tTEXT\t\t2\t1\t\t1\nPARAM\te8d94391-3331-4c7f-9e63-e91c17998c64\tSpace Occupant Organization Abbreviation\tTEXT\t\t2\t1\t\t1\nPARAM\t739849a8-5ca6-494b-bac4-4afcc1eb1505\tSpace Occupant Organization Name\tTEXT\t\t2\t1\t\t1\nPARAM\t52b8cea7-4ca9-4172-9501-d3527cf54a59\tOccupant\tTEXT\t\t2\t1\t\t1\nPARAM\td6908c54-3606-4dca-a8ce-56d32ab4192b\tSpace Occupant Organization ID Reference\tTEXT\t\t2\t1\t\t1\nPARAM\tb8872605-81c5-4337-a238-6be576570d55\tSpace Occupant Organization ID Name\tTEXT\t\t2\t1\t\t1\nPARAM\t04b2abb6-6470-4c81-9e7c-1e5b44ed34fe\tSpace Occupant Sub-Organization ID Reference\tTEXT\t\t2\t1\t\t1\nPARAM\t6a9800f5-ff43-4907-9a36-8afc0ec15154\tSpace Occupant Sub-Organization ID Name\tTEXT\t\t2\t1\t\t1\nPARAM\t63fa188d-e00e-490c-a1b2-c513517ca9ce\tSpace Occupant Organization Billing ID Reference\tTEXT\t\t2\t1\t\t1\nPARAM\t27a7919b-9f58-49fe-961c-010c984b38a1\tSpace Occupant Organization Billing ID Name\tTEXT\t\t2\t1\t\t1\nPARAM\t7abd2ba2-0106-4e89-805e-0a77700f2616\tSpatial Zone Type (Owner) Reference\tTEXT\t\t2\t1\t\t1\nPARAM\t5824fd9f-930e-41db-b20e-9c00aa9a8ab3\tSpatial Zone Type (Owner) Name\tTEXT\t\t2\t1\t\t1\nPARAM\t0f1bae35-e82d-4a6c-a7db-572245ff29d6\tSpatial Zone Security Level (Owner) Reference\tTEXT\t\t2\t1\t\t1\nPARAM\t4320b6e8-9b0a-4632-b465-e95dc3df493c\tSpatial Zone Security Level (Owner) Name\tTEXT\t\t2\t1\t\t1\nPARAM\t8c7a547a-6f7f-4eef-a24c-b974efc717e5\tASHRAE Zone Type\tTEXT\t\t2\t1\t\t1\nPARAM\td05b5436-5063-46e9-97e3-af659b69828e\tIfcMaterialLayer.IsVentilated\tYESNO\t\t2\t1\t\t1\nPARAM\ta458f550-164e-4e95-b816-3b28e8014197\tIfcMaterialLayer.Name\tTEXT\t\t2\t1\t\t1\nPARAM\tf69e625c-6005-48bd-80c7-f6e02c122788\tIfcMaterialLayer.Priority\tINTEGER\t\t2\t1\t\t1\nPARAM\t36617d8d-1abb-41c4-b4e8-da1fd62aaad6\tIfcMaterialLayer.Description\tTEXT\t\t2\t1\t\t1\nPARAM\t55cfe7d7-0b60-4214-97da-d2c5555641cb\tIfcMaterialLayer.Category\tTEXT\t\t2\t1\t\t1\nPARAM\t004d4a7b-b77e-479a-a6c3-56ca61babccb\tIfcMaterialLayerSet.Name\tTEXT\t\t2\t1\t\t1\nPARAM\tab39f525-6de4-49ef-844e-95c5e11f1ff6\tIfcMaterialLayerSet.Description\tTEXT\t\t2\t1\t\t1\nPARAM\tcf633970-73fe-49cd-b03e-af60d49d4deb\tIfcName\tTEXT\t\t2\t1\t\t1\nPARAM\t8df7e965-feaf-403f-8290-d4c289c99840\tIfcDescription\tTEXT\t\t2\t1\t\t1\nPARAM\t5d167d01-84fc-47cf-b6af-d4ad81f45868\tIfcLongName\tTEXT\t\t2\t1\t\t1\nPARAM\t577b74dc-fffe-4165-bfb6-00b0a0a24542\tIfcObjectType\tTEXT\t\t2\t1\t\t1\nPARAM\tf113d237-6742-4ab3-8c8d-566bcbd6c6bb\tIfcTag\tTEXT\t\t2\t1\t\t1\nPARAM\t74a4d438-a3f3-4173-a238-a4ad5134d16d\tIfcCapacityByWeight\tNUMBER\t\t2\t1\t\t1\nPARAM\t25c5194c-5659-4459-9df5-f2c6167300b5\tIfcLandTitleNumber\tTEXT\t\t2\t1\t\t1\nPARAM\tadc1655c-2373-481b-abbe-15932619db06\tIfcspaceElevationWithFlooring\tLENGTH\t\t2\t1\t\t1\nPARAM\t486a0eb2-b1d3-43be-abdf-44e396875d66\tIfcCapacityByNumber\tNUMBER\t\t2\t1\t\t1\nPARAM\t17d638a6-954d-46f5-9fd8-a12329895bb6\tIfcPresentationLayer\tTEXT\t\t2\t1\t\t1\nPARAM\ta45065e7-99ce-4323-95c2-a10e0063bcec\tIfcCadLayer\tTEXT\t\t2\t1\t(Deprecated)\t1\nPARAM\tbff4553d-62d0-4ce8-86d3-fa3d2ba9944c\tSiteName\tTEXT\t\t2\t1\t\t1\nPARAM\t1691cccc-14bf-4859-a1ef-a4a3c03a3345\tSiteLongName\tTEXT\t\t2\t1\t\t1\nPARAM\t70e9b810-1d94-4dd8-9c47-1223d10cfc91\tSiteDescription\tTEXT\t\t2\t1\t\t1\nPARAM\t3deb300a-d856-4192-b39b-4c22d5089f8b\tSiteObjectType\tTEXT\t\t2\t1\t\t1\nPARAM\td77d44de-e38b-4fa3-89b2-d41c46ef5250\tSiteLandTitleNumber\tTEXT\t\t2\t1\t\t1\nPARAM\t126288d7-a4be-40a8-ba93-8a9e8c05d33b\tBuildingLongName\tTEXT\t\t2\t1\t\t1\nPARAM\tbe201e5e-4c8c-4fad-9cce-2a93e39dbfd8\tBuildingDescription\tTEXT\t\t2\t1\t\t1\nPARAM\taea294d5-2859-41dc-a58e-5ac7192901be\tBuildingObjectType\tTEXT\t\t2\t1\t\t1\nPARAM\t71d092aa-0c92-4346-b2ad-2102c8e7710c\tIfcCategory\tTEXT\t\t2\t1\t\t1\nPARAM\t55914e74-79dd-4fef-9539-0c0631743aee\tIfcSingleMaterialOverride\tTEXT\t\t2\t1\tParameter to force a single material assignment when there is only a single material\t1\nPARAM\t298bfb8d-7c66-4d69-a493-14beb1bbfd4b\tIfcSpatialContainer\tTEXT\t\t2\t1\tParameter to override element containment\t1\nPARAM\t8f0306fa-4df3-479d-bc44-e55210e0d0e4\tConcealedCovering\tYESNO\t\t2\t1\t\t1\nPARAM\t8083a04d-d537-4089-acef-03c7d96ec873\tUserDefinedOperationType\tTEXT\t\t2\t1\t\t1\nPARAM\tabad1d39-6965-468f-8861-370e6b726678\tIfcSiteGUID\tTEXT\t\t2\t1\t\t1\nPARAM\t07dce341-b4e9-4507-8778-0e44321f516f\tPanelDepth\tLENGTH\t\t2\t1\t\t1\nPARAM\te766bd67-5383-4174-8e98-303739b9e623\tPanelWidth\tLENGTH\t\t2\t1\t\t1\nPARAM\t2f4e182a-b7d4-491c-ad28-488029ec2ad6\tLiningDepth\tLENGTH\t\t2\t1\t\t1\nPARAM\tac8bc243-5ae0-481f-bc3e-7ad204b07e10\tLiningThickness\tLENGTH\t\t2\t1\t\t1\nPARAM\t3452d5ee-008e-45b7-9ab0-1ef676436f99\tLiningOffset\tLENGTH\t\t2\t1\t\t1\nPARAM\t212a2526-8958-4b4f-8f3e-f757acb11cae\tThresholdDepth\tLENGTH\t\t2\t1\t\t1\nPARAM\t1db58254-34e4-437d-8057-beda0baec0e5\tThresholdThickness\tLENGTH\t\t2\t1\t\t1\nPARAM\t925fd679-94c4-4856-b141-3b89c84f6b09\tThresholdOffset\tLENGTH\t\t2\t1\t\t1\nPARAM\t72aec9c0-11fb-40db-b87a-2b85b5e9ac7d\tTransomOffset\tLENGTH\t\t2\t1\t\t1\nPARAM\t406efee5-8198-4298-a899-a9360be1a59e\tTransomThickness\tLENGTH\t\t2\t1\t\t1\nPARAM\t001fc06e-689f-4d30-ad4e-93cf89478d14\tCasingDepth\tLENGTH\t\t2\t1\t\t1\nPARAM\t2c0d426a-418c-4e6c-a9bb-eb99f02b359e\tCasingThickness\tLENGTH\t\t2\t1\t\t1\nPARAM\t90949a73-8b1e-48fa-bd97-90162e909594\tWINDOW_PARTITIONING_TYPE\tTEXT\t\t2\t1\t\t1\nPARAM\t2244f64f-eb85-4344-80ff-1341ae32ad13\tWINDOW_PREDEFINED_TYPE\tTEXT\t\t2\t1\t\t1\nPARAM\t2951370c-de30-489a-8d8a-be8efc74db42\tFirstTransomOffset\tLENGTH\t\t2\t1\t\t1\nPARAM\t9fa581b0-bab3-4926-9dce-f01cd8326b95\tSecondTransomOffset\tLENGTH\t\t2\t1\t\t1\nPARAM\t5d4d24aa-2147-40fb-b5f8-cae80691dfec\tMullionThickness\tLENGTH\t\t2\t1\t\t1\nPARAM\t97385d06-1f09-43f4-8d0d-d41809c2df9c\tFirstMullionOffset\tLENGTH\t\t2\t1\t\t1\nPARAM\ta766f4c3-f32f-4c85-b750-0cd593d23ad7\tSecondMullionOffset\tLENGTH\t\t2\t1\t\t1\n"
  },
  {
    "path": "Source/RevitIFCTools/IFC2X2_ADD1.exp",
    "content": "(*\nCopyright by:\nInternational Alliance for Interoperability, 1996-2003\n\nAll rights reserved. No part of this documentation may be\nreproduced, stored in a retrieval system, or transmitted\nin any form or by any means, without the prior written\npermission of the owner.\n\nContents:\nfull IFC object model EXPRESS definitions for the IFC2x Edition 2 Addendum 1\n- express longform distribution\n\nIssue date:\nJuly 16, 2004\n\nDevelopment Team:\nModeling Support Group of the \nInternational Alliance for Interoperability\n*)\n\n\n\n\n\nSCHEMA IFC2X2_FINAL;\n\nTYPE IfcAbsorbedDoseMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAccelerationMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAmountOfSubstanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAngularVelocityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAreaMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcBoolean = BOOLEAN;\nEND_TYPE;\n\nTYPE IfcComplexNumber = ARRAY [1:2] OF REAL;\nEND_TYPE;\n\nTYPE IfcCompoundPlaneAngleMeasure = LIST [3:3] OF INTEGER;\n WHERE\n\tWR1 : { -360 <= SELF[1] < 360 };\n\tWR2 : { -60 <= SELF[2] < 60 };\n\tWR3 : { -60 <= SELF[3] < 60 };\n\tWR4 : ((SELF[1] >= 0) AND (SELF[2] >= 0) AND (SELF[3] >= 0)) OR ((SELF[1] <= 0) AND (SELF[2] <= 0) AND (SELF[3] <= 0));\nEND_TYPE;\n\nTYPE IfcContextDependentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcCountMeasure = NUMBER;\nEND_TYPE;\n\nTYPE IfcCurvatureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcDayInMonthNumber = INTEGER;\nEND_TYPE;\n\nTYPE IfcDaylightSavingHour = INTEGER;\n WHERE\n\tWR1 : { 0 <= SELF <= 2 };\nEND_TYPE;\n\nTYPE IfcDescriptiveMeasure = STRING;\nEND_TYPE;\n\nTYPE IfcDimensionCount = INTEGER;\n WHERE\n\tWR1 : { 0 < SELF <= 3 };\nEND_TYPE;\n\nTYPE IfcDoseEquivalentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcDynamicViscosityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricCapacitanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricChargeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricConductanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricCurrentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricResistanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricVoltageMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcEnergyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcFrequencyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcGloballyUniqueId = STRING(22) FIXED;\nEND_TYPE;\n\nTYPE IfcHeatFluxDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcHeatingValueMeasure = REAL;\n WHERE\n\tWR1 : SELF > 0;\nEND_TYPE;\n\nTYPE IfcHourInDay = INTEGER;\n WHERE\n\tWR1 : { 0 <= SELF < 24 };\nEND_TYPE;\n\nTYPE IfcIdentifier = STRING;\nEND_TYPE;\n\nTYPE IfcIlluminanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcInductanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcInteger = INTEGER;\nEND_TYPE;\n\nTYPE IfcIntegerCountRateMeasure = INTEGER;\nEND_TYPE;\n\nTYPE IfcIonConcentrationMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcIsothermalMoistureCapacityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcKinematicViscosityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLabel = STRING;\nEND_TYPE;\n\nTYPE IfcLengthMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearMomentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearStiffnessMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearVelocityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLogical = LOGICAL;\nEND_TYPE;\n\nTYPE IfcLuminousFluxMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLuminousIntensityDistributionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLuminousIntensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMagneticFluxDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMagneticFluxMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassFlowRateMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassPerLengthMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMinuteInHour = INTEGER;\n WHERE\n\tWR1 : {0 <= SELF <= 59 };\nEND_TYPE;\n\nTYPE IfcModulusOfElasticityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfLinearSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfRotationalSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMoistureDiffusivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMolecularWeightMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMomentOfInertiaMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMonetaryMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMonthInYearNumber = INTEGER;\n WHERE\n\tWR1 : { 1<= SELF <= 12 };\nEND_TYPE;\n\nTYPE IfcNormalisedRatioMeasure = IfcRatioMeasure;\n WHERE\n\tWR1 : {0.0 <= SELF <= 1.0};\nEND_TYPE;\n\nTYPE IfcNumericMeasure = NUMBER;\nEND_TYPE;\n\nTYPE IfcPHMeasure = REAL;\n WHERE\n\tWR21 : {0.0 <= SELF <= 14.0};\nEND_TYPE;\n\nTYPE IfcParameterValue = REAL;\nEND_TYPE;\n\nTYPE IfcPlanarForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPlaneAngleMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPositiveLengthMeasure = IfcLengthMeasure;\n WHERE\n\tWR1 : SELF > 0;\nEND_TYPE;\n\nTYPE IfcPositivePlaneAngleMeasure = IfcPlaneAngleMeasure;\n WHERE\n\tWR1 : SELF > 0;\nEND_TYPE;\n\nTYPE IfcPositiveRatioMeasure = IfcRatioMeasure;\n WHERE\n\tWR1 : SELF > 0;\nEND_TYPE;\n\nTYPE IfcPowerMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPresentableText = STRING;\nEND_TYPE;\n\nTYPE IfcPressureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRadioActivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRatioMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcReal = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalFrequencyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalMassMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalStiffnessMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSecondInMinute = REAL;\n WHERE\n\tWR1 : { 0 <= SELF < 60 };\nEND_TYPE;\n\nTYPE IfcSectionModulusMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSectionalAreaIntegralMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcShearModulusMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSolidAngleMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPowerMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPressureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSpecificHeatCapacityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSpecularExponent = REAL;\nEND_TYPE;\n\nTYPE IfcSpecularRoughness = REAL;\n WHERE\n\tWR1 : {0.0 <= SELF <= 1.0};\nEND_TYPE;\n\nTYPE IfcTemperatureGradientMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcText = STRING;\nEND_TYPE;\n\nTYPE IfcTextAlignment = IfcLabel;\nEND_TYPE;\n\nTYPE IfcThermalAdmittanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalConductivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalExpansionCoefficientMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalResistanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalTransmittanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermodynamicTemperatureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcTimeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcTimeStamp = INTEGER;\nEND_TYPE;\n\nTYPE IfcTorqueMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcVaporPermeabilityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcVolumeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcVolumetricFlowRateMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcWarpingConstantMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcWarpingMomentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcYearNumber = INTEGER;\nEND_TYPE;\n\nTYPE IfcActionSourceTypeEnum = ENUMERATION OF\n\t(DEAD_LOAD_G\n\t,COMPLETION_G1\n\t,LIVE_LOAD_Q\n\t,SNOW_S\n\t,WIND_W\n\t,PRESTRESSING_P\n\t,SETTLEMENT_U\n\t,TEMPERATURE_T\n\t,EARTHQUAKE_E\n\t,FIRE\n\t,IMPULSE\n\t,IMPACT\n\t,TRANSPORT\n\t,ERECTION\n\t,PROPPING\n\t,SYSTEM_IMPERFECTION\n\t,SHRINKAGE\n\t,CREEP\n\t,LACK_OF_FIT\n\t,BUOYANCY\n\t,ICE\n\t,CURRENT\n\t,WAVE\n\t,RAIN\n\t,BRAKES\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActionTypeEnum = ENUMERATION OF\n\t(PERMANENT_G\n\t,VARIABLE_Q\n\t,EXTRAORDINARY_A\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActuatorTypeEnum = ENUMERATION OF\n\t(ELECTRICACTUATOR\n\t,HANDOPERATEDACTUATOR\n\t,HYDRAULICACTUATOR\n\t,PNEUMATICACTUATOR\n\t,THERMOSTATICACTUATOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAddressTypeEnum = ENUMERATION OF\n\t(OFFICE\n\t,SITE\n\t,HOME\n\t,DISTRIBUTIONPOINT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcAheadOrBehind = ENUMERATION OF\n\t(AHEAD\n\t,BEHIND);\nEND_TYPE;\n\nTYPE IfcAirTerminalBoxTypeEnum = ENUMERATION OF\n\t(CONSTANTFLOW\n\t,VARIABLEFLOWPRESSUREDEPENDANT\n\t,VARIABLEFLOWPRESSUREINDEPENDANT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAirTerminalTypeEnum = ENUMERATION OF\n\t(GRILLE\n\t,REGISTER\n\t,DIFFUSER\n\t,EYEBALL\n\t,IRIS\n\t,LINEARGRILLE\n\t,LINEARDIFFUSER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAirToAirHeatRecoveryTypeEnum = ENUMERATION OF\n\t(FIXEDPLATECOUNTERFLOWEXCHANGER\n\t,FIXEDPLATECROSSFLOWEXCHANGER\n\t,FIXEDPLATEPARALLELFLOWEXCHANGER\n\t,ROTARYWHEEL\n\t,RUNAROUNDCOILLOOP\n\t,HEATPIPE\n\t,TWINTOWERENTHALPYRECOVERYLOOPS\n\t,THERMOSIPHONSEALEDTUBEHEATEXCHANGERS\n\t,THERMOSIPHONCOILTYPEHEATEXCHANGERS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAlarmTypeEnum = ENUMERATION OF\n\t(BELL\n\t,BREAKGLASSBUTTON\n\t,LIGHT\n\t,MANUALPULLBOX\n\t,SIREN\n\t,WHISTLE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAnalysisModelTypeEnum = ENUMERATION OF\n\t(IN_PLANE_LOADING_2D\n\t,OUT_PLANE_LOADING_2D\n\t,LOADING_3D\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAnalysisTheoryTypeEnum = ENUMERATION OF\n\t(FIRST_ORDER_THEORY\n\t,SECOND_ORDER_THEORY\n\t,THIRD_ORDER_THEORY\n\t,FULL_NONLINEAR_THEORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcArithmeticOperatorEnum = ENUMERATION OF\n\t(ADD\n\t,DIVIDE\n\t,MULTIPLY\n\t,SUBTRACT);\nEND_TYPE;\n\nTYPE IfcAssemblyPlaceEnum = ENUMERATION OF\n\t(SITE\n\t,FACTORY\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBSplineCurveForm = ENUMERATION OF\n\t(POLYLINE_FORM\n\t,CIRCULAR_ARC\n\t,ELLIPTIC_ARC\n\t,PARABOLIC_ARC\n\t,HYPERBOLIC_ARC\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcBeamTypeEnum = ENUMERATION OF\n\t(BEAM\n\t,JOIST\n\t,LINTEL\n\t,T_BEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBenchmarkEnum = ENUMERATION OF\n\t(GREATERTHAN\n\t,GREATERTHANOREQUALTO\n\t,LESSTHAN\n\t,LESSTHANOREQUALTO\n\t,EQUALTO\n\t,NOTEQUALTO);\nEND_TYPE;\n\nTYPE IfcBoilerTypeEnum = ENUMERATION OF\n\t(WATER\n\t,STEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBooleanOperator = ENUMERATION OF\n\t(UNION\n\t,INTERSECTION\n\t,DIFFERENCE);\nEND_TYPE;\n\nTYPE IfcCableCarrierFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CROSS\n\t,REDUCER\n\t,TEE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableCarrierSegmentTypeEnum = ENUMERATION OF\n\t(CABLELADDERSEGMENT\n\t,CABLETRAYSEGMENT\n\t,CABLETRUNKINGSEGMENT\n\t,CONDUITSEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableSegmentTypeEnum = ENUMERATION OF\n\t(CABLESEGMENT\n\t,CONDUCTORSEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcChangeActionEnum = ENUMERATION OF\n\t(NOCHANGE\n\t,MODIFIED\n\t,ADDED\n\t,DELETED\n\t,MODIFIEDADDED\n\t,MODIFIEDDELETED);\nEND_TYPE;\n\nTYPE IfcChillerTypeEnum = ENUMERATION OF\n\t(AIRCOOLED\n\t,WATERCOOLED\n\t,HEATRECOVERY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoilTypeEnum = ENUMERATION OF\n\t(DXCOOLINGCOIL\n\t,WATERCOOLINGCOIL\n\t,STEAMHEATINGCOIL\n\t,WATERHEATINGCOIL\n\t,ELECTRICHEATINGCOIL\n\t,GASHEATINGCOIL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcColumnTypeEnum = ENUMERATION OF\n\t(COLUMN\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCompressorTypeEnum = ENUMERATION OF\n\t(DYNAMIC\n\t,RECIPROCATING\n\t,ROTARY\n\t,SCROLL\n\t,TROCHOIDAL\n\t,SINGLESTAGE\n\t,BOOSTER\n\t,OPENTYPE\n\t,HERMETIC\n\t,SEMIHERMETIC\n\t,WELDEDSHELLHERMETIC\n\t,ROLLINGPISTON\n\t,ROTARYVANE\n\t,SINGLESCREW\n\t,TWINSCREW\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCondenserTypeEnum = ENUMERATION OF\n\t(WATERCOOLEDSHELLTUBE\n\t,WATERCOOLEDSHELLCOIL\n\t,WATERCOOLEDTUBEINTUBE\n\t,WATERCOOLEDBRAZEDPLATE\n\t,AIRCOOLED\n\t,EVAPORATIVECOOLED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConnectionTypeEnum = ENUMERATION OF\n\t(ATPATH\n\t,ATSTART\n\t,ATEND\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConstraintEnum = ENUMERATION OF\n\t(HARD\n\t,SOFT\n\t,ADVISORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcControllerTypeEnum = ENUMERATION OF\n\t(FLOATING\n\t,PROPORTIONAL\n\t,PROPORTIONALINTEGRAL\n\t,PROPORTIONALINTEGRALDERIVATIVE\n\t,TIMEDTWOPOSITION\n\t,TWOPOSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCooledBeamTypeEnum = ENUMERATION OF\n\t(ACTIVE\n\t,PASSIVE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoolingTowerTypeEnum = ENUMERATION OF\n\t(NATURALDRAFT\n\t,MECHANICALINDUCEDDRAFT\n\t,MECHANICALFORCEDDRAFT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCostScheduleTypeEnum = ENUMERATION OF\n\t(BUDGET\n\t,COSTPLAN\n\t,ESTIMATE\n\t,TENDER\n\t,PRICEDBILLOFQUANTITIES\n\t,UNPRICEDBILLOFQUANTITIES\n\t,SCHEDULEOFRATES\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoveringTypeEnum = ENUMERATION OF\n\t(CEILING\n\t,FLOORING\n\t,CLADDING\n\t,ROOFING\n\t,INSULATION\n\t,MEMBRANE\n\t,SLEEVING\n\t,WRAPPING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCurrencyEnum = ENUMERATION OF\n\t(AED\n\t,AES\n\t,ATS\n\t,AUD\n\t,BBD\n\t,BEG\n\t,BGL\n\t,BHD\n\t,BMD\n\t,BND\n\t,BRL\n\t,BSD\n\t,BWP\n\t,BZD\n\t,CAD\n\t,CBD\n\t,CHF\n\t,CLP\n\t,CNY\n\t,CYS\n\t,CZK\n\t,DDP\n\t,DEM\n\t,DKK\n\t,EGL\n\t,EST\n\t,EUR\n\t,FAK\n\t,FIM\n\t,FJD\n\t,FKP\n\t,FRF\n\t,GBP\n\t,GIP\n\t,GMD\n\t,GRX\n\t,HKD\n\t,HUF\n\t,ICK\n\t,IDR\n\t,ILS\n\t,INR\n\t,IRP\n\t,ITL\n\t,JMD\n\t,JOD\n\t,JPY\n\t,KES\n\t,KRW\n\t,KWD\n\t,KYD\n\t,LKR\n\t,LUF\n\t,MTL\n\t,MUR\n\t,MXN\n\t,MYR\n\t,NLG\n\t,NZD\n\t,OMR\n\t,PGK\n\t,PHP\n\t,PKR\n\t,PLN\n\t,PTN\n\t,QAR\n\t,RUR\n\t,SAR\n\t,SCR\n\t,SEK\n\t,SGD\n\t,SKP\n\t,THB\n\t,TRL\n\t,TTD\n\t,TWD\n\t,USD\n\t,VEB\n\t,VND\n\t,XEU\n\t,ZAR\n\t,ZWD\n\t,NOK);\nEND_TYPE;\n\nTYPE IfcDamperTypeEnum = ENUMERATION OF\n\t(CONTROLDAMPER\n\t,FIREDAMPER\n\t,SMOKEDAMPER\n\t,FIRESMOKEDAMPER\n\t,BACKDRAFTDAMPER\n\t,RELIEFDAMPER\n\t,BLASTDAMPER\n\t,GRAVITYDAMPER\n\t,GRAVITYRELIEFDAMPER\n\t,BALANCINGDAMPER\n\t,FUMEHOODEXHAUST\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDataOriginEnum = ENUMERATION OF\n\t(MEASURED\n\t,PREDICTED\n\t,SIMULATED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDerivedUnitEnum = ENUMERATION OF\n\t(ANGULARVELOCITYUNIT\n\t,COMPOUNDPLANEANGLEUNIT\n\t,DYNAMICVISCOSITYUNIT\n\t,HEATFLUXDENSITYUNIT\n\t,INTEGERCOUNTRATEUNIT\n\t,ISOTHERMALMOISTURECAPACITYUNIT\n\t,KINEMATICVISCOSITYUNIT\n\t,LINEARVELOCITYUNIT\n\t,MASSDENSITYUNIT\n\t,MASSFLOWRATEUNIT\n\t,MOISTUREDIFFUSIVITYUNIT\n\t,MOLECULARWEIGHTUNIT\n\t,SPECIFICHEATCAPACITYUNIT\n\t,THERMALADMITTANCEUNIT\n\t,THERMALCONDUCTANCEUNIT\n\t,THERMALRESISTANCEUNIT\n\t,THERMALTRANSMITTANCEUNIT\n\t,VAPORPERMEABILITYUNIT\n\t,VOLUMETRICFLOWRATEUNIT\n\t,ROTATIONALFREQUENCYUNIT\n\t,TORQUEUNIT\n\t,MOMENTOFINERTIAUNIT\n\t,LINEARMOMENTUNIT\n\t,LINEARFORCEUNIT\n\t,PLANARFORCEUNIT\n\t,MODULUSOFELASTICITYUNIT\n\t,SHEARMODULUSUNIT\n\t,LINEARSTIFFNESSUNIT\n\t,ROTATIONALSTIFFNESSUNIT\n\t,MODULUSOFSUBGRADEREACTIONUNIT\n\t,ACCELERATIONUNIT\n\t,CURVATUREUNIT\n\t,HEATINGVALUEUNIT\n\t,IONCONCENTRATIONUNIT\n\t,LUMINOUSINTENSITYDISTRIBUTIONUNIT\n\t,MASSPERLENGTHUNIT\n\t,MODULUSOFLINEARSUBGRADEREACTIONUNIT\n\t,MODULUSOFROTATIONALSUBGRADEREACTIONUNIT\n\t,PHUNIT\n\t,ROTATIONALMASSUNIT\n\t,SECTIONAREAINTEGRALUNIT\n\t,SECTIONMODULUSUNIT\n\t,SOUNDPOWERUNIT\n\t,SOUNDPRESSUREUNIT\n\t,TEMPERATUREGRADIENTUNIT\n\t,THERMALEXPANSIONCOEFFICIENTUNIT\n\t,WARPINGCONSTANTUNIT\n\t,WARPINGMOMENTUNIT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcDimensionExtentUsage = ENUMERATION OF\n\t(ORIGIN\n\t,TARGET);\nEND_TYPE;\n\nTYPE IfcDirectionSenseEnum = ENUMERATION OF\n\t(POSITIVE\n\t,NEGATIVE);\nEND_TYPE;\n\nTYPE IfcDistributionChamberElementTypeEnum = ENUMERATION OF\n\t(FORMEDDUCT\n\t,INSPECTIONCHAMBER\n\t,INSPECTIONPIT\n\t,MANHOLE\n\t,METERCHAMBER\n\t,SUMP\n\t,TRENCH\n\t,VALVECHAMBER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDocumentConfidentialityEnum = ENUMERATION OF\n\t(PUBLIC\n\t,RESTRICTED\n\t,CONFIDENTIAL\n\t,PERSONAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDocumentStatusEnum = ENUMERATION OF\n\t(DRAFT\n\t,FINALDRAFT\n\t,FINAL\n\t,REVISION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorPanelOperationEnum = ENUMERATION OF\n\t(SWINGING\n\t,DOUBLE_ACTING\n\t,SLIDING\n\t,FOLDING\n\t,REVOLVING\n\t,ROLLINGUP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorPanelPositionEnum = ENUMERATION OF\n\t(LEFT\n\t,MIDDLE\n\t,RIGHT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorStyleConstructionEnum = ENUMERATION OF\n\t(ALUMINIUM\n\t,HIGH_GRADE_STEEL\n\t,STEEL\n\t,WOOD\n\t,ALUMINIUM_WOOD\n\t,ALUMINIUM_PLASTIC\n\t,PLASTIC\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorStyleOperationEnum = ENUMERATION OF\n\t(SINGLE_SWING_LEFT\n\t,SINGLE_SWING_RIGHT\n\t,DOUBLE_DOOR_SINGLE_SWING\n\t,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT\n\t,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT\n\t,DOUBLE_SWING_LEFT\n\t,DOUBLE_SWING_RIGHT\n\t,DOUBLE_DOOR_DOUBLE_SWING\n\t,SLIDING_TO_LEFT\n\t,SLIDING_TO_RIGHT\n\t,DOUBLE_DOOR_SLIDING\n\t,FOLDING_TO_LEFT\n\t,FOLDING_TO_RIGHT\n\t,DOUBLE_DOOR_FOLDING\n\t,REVOLVING\n\t,ROLLINGUP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CONNECTOR\n\t,ENTRY\n\t,EXIT\n\t,JUNCTION\n\t,OBSTRUCTION\n\t,TRANSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctSegmentTypeEnum = ENUMERATION OF\n\t(RIGIDSEGMENT\n\t,FLEXIBLESEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctSilencerTypeEnum = ENUMERATION OF\n\t(FLATOVAL\n\t,RECTANGULAR\n\t,ROUND\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricApplianceTypeEnum = ENUMERATION OF\n\t(COMPUTER\n\t,DIRECTWATERHEATER\n\t,DISHWASHER\n\t,ELECTRICCOOKER\n\t,ELECTRICHEATER\n\t,FACSIMILE\n\t,FREESTANDINGFAN\n\t,FREEZER\n\t,FRIDGE_FREEZER\n\t,HANDDRYER\n\t,INDIRECTWATERHEATER\n\t,MICROWAVE\n\t,PHOTOCOPIER\n\t,PRINTER\n\t,REFRIGERATOR\n\t,RADIANTHEATER\n\t,SCANNER\n\t,TELEPHONE\n\t,TUMBLEDRYER\n\t,TV\n\t,VENDINGMACHINE\n\t,WASHINGMACHINE\n\t,WATERHEATER\n\t,WATERCOOLER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricCurrentEnum = ENUMERATION OF\n\t(ALTERNATING\n\t,DIRECT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricDistributionPointFunctionEnum = ENUMERATION OF\n\t(ALARMPANEL\n\t,CONSUMERUNIT\n\t,CONTROLPANEL\n\t,DISTRIBUTIONBOARD\n\t,GASDETECTORPANEL\n\t,INDICATORPANEL\n\t,MIMICPANEL\n\t,MOTORCONTROLCENTRE\n\t,SWITCHBOARD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricFlowStorageDeviceTypeEnum = ENUMERATION OF\n\t(BATTERY\n\t,CAPACITORBANK\n\t,HARMONICFILTER\n\t,INDUCTORBANK\n\t,UPS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricGeneratorTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricHeaterTypeEnum = ENUMERATION OF\n\t(ELECTRICPOINTHEATER\n\t,ELECTRICCABLEHEATER\n\t,ELECTRICMATHEATER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricMotorTypeEnum = ENUMERATION OF\n\t(DC\n\t,INDUCTION\n\t,POLYPHASE\n\t,RELUCTANCESYNCHRONOUS\n\t,SYNCHRONOUS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricTimeControlTypeEnum = ENUMERATION OF\n\t(TIMECLOCK\n\t,TIMEDELAY\n\t,RELAY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElementAssemblyTypeEnum = ENUMERATION OF\n\t(ACCESSORY_ASSEMBLY\n\t,ARCH\n\t,BEAM_GRID\n\t,BRACED_FRAME\n\t,GIRDER\n\t,REINFORCEMENT_UNIT\n\t,RIGID_FRAME\n\t,SLAB_FIELD\n\t,TRUSS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElementCompositionEnum = ENUMERATION OF\n\t(COMPLEX\n\t,ELEMENT\n\t,PARTIAL);\nEND_TYPE;\n\nTYPE IfcEnergySequenceEnum = ENUMERATION OF\n\t(PRIMARY\n\t,SECONDARY\n\t,TERTIARY\n\t,AUXILIARY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEnvironmentalImpactCategoryEnum = ENUMERATION OF\n\t(COMBINEDVALUE\n\t,DISPOSAL\n\t,EXTRACTION\n\t,INSTALLATION\n\t,MANUFACTURE\n\t,TRANSPORTATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEvaporativeCoolerTypeEnum = ENUMERATION OF\n\t(DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER\n\t,DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER\n\t,DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER\n\t,DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER\n\t,DIRECTEVAPORATIVEAIRWASHER\n\t,INDIRECTEVAPORATIVEPACKAGEAIRCOOLER\n\t,INDIRECTEVAPORATIVEWETCOIL\n\t,INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER\n\t,INDIRECTDIRECTCOMBINATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEvaporatorTypeEnum = ENUMERATION OF\n\t(DIRECTEXPANSIONSHELLANDTUBE\n\t,DIRECTEXPANSIONTUBEINTUBE\n\t,DIRECTEXPANSIONBRAZEDPLATE\n\t,FLOODEDSHELLANDTUBE\n\t,SHELLANDCOIL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFanTypeEnum = ENUMERATION OF\n\t(CENTRIFUGALFORWARDCURVED\n\t,CENTRIFUGALRADIAL\n\t,CENTRIFUGALBACKWARDINCLINEDCURVED\n\t,CENTRIFUGALAIRFOIL\n\t,TUBEAXIAL\n\t,VANEAXIAL\n\t,PROPELLORAXIAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFilterTypeEnum = ENUMERATION OF\n\t(AIRPARTICLEFILTER\n\t,ODORFILTER\n\t,OILFILTER\n\t,STRAINER\n\t,WATERFILTER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFireSuppressionTerminalTypeEnum = ENUMERATION OF\n\t(BREECHINGINLET\n\t,FIREHYDRANT\n\t,HOSEREEL\n\t,SPRINKLER\n\t,SPRINKLERDEFLECTOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowDirectionEnum = ENUMERATION OF\n\t(SOURCE\n\t,SINK\n\t,SOURCEANDSINK\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowInstrumentTypeEnum = ENUMERATION OF\n\t(PRESSUREGAUGE\n\t,THERMOMETER\n\t,AMMETER\n\t,FREQUENCYMETER\n\t,POWERFACTORMETER\n\t,PHASEANGLEMETER\n\t,VOLTMETER_PEAK\n\t,VOLTMETER_RMS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowMeterTypeEnum = ENUMERATION OF\n\t(ELECTRICMETER\n\t,ENERGYMETER\n\t,FLOWMETER\n\t,GASMETER\n\t,OILMETER\n\t,WATERMETER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFootingTypeEnum = ENUMERATION OF\n\t(FOOTING_BEAM\n\t,PAD_FOOTING\n\t,PILE_CAP\n\t,STRIP_FOOTING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGasTerminalTypeEnum = ENUMERATION OF\n\t(GASAPPLIANCE\n\t,GASBOOSTER\n\t,GASBURNER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGeometricProjectionEnum = ENUMERATION OF\n\t(GRAPH_VIEW\n\t,SKETCH_VIEW\n\t,MODEL_VIEW\n\t,PLAN_VIEW\n\t,REFLECTED_PLAN_VIEW\n\t,SECTION_VIEW\n\t,ELEVATION_VIEW\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGlobalOrLocalEnum = ENUMERATION OF\n\t(GLOBAL_COORDS\n\t,LOCAL_COORDS);\nEND_TYPE;\n\nTYPE IfcHeatExchangerTypeEnum = ENUMERATION OF\n\t(PLATE\n\t,SHELLANDTUBE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcHumidifierTypeEnum = ENUMERATION OF\n\t(STEAMINJECTION\n\t,ADIABATICAIRWASHER\n\t,ADIABATICPAN\n\t,ADIABATICWETTEDELEMENT\n\t,ADIABATICATOMIZING\n\t,ADIABATICULTRASONIC\n\t,ADIABATICRIGIDMEDIA\n\t,ADIABATICCOMPRESSEDAIRNOZZLE\n\t,ASSISTEDELECTRIC\n\t,ASSISTEDNATURALGAS\n\t,ASSISTEDPROPANE\n\t,ASSISTEDBUTANE\n\t,ASSISTEDSTEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcInternalOrExternalEnum = ENUMERATION OF\n\t(INTERNAL\n\t,EXTERNAL\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcInventoryTypeEnum = ENUMERATION OF\n\t(ASSETINVENTORY\n\t,SPACEINVENTORY\n\t,FURNITUREINVENTORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcJunctionBoxTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLampTypeEnum = ENUMERATION OF\n\t(COMPACTFLUORESCENT\n\t,FLUORESCENT\n\t,HIGHPRESSUREMERCURY\n\t,HIGHPRESSURESODIUM\n\t,METALHALIDE\n\t,TUNGSTENFILAMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLayerSetDirectionEnum = ENUMERATION OF\n\t(AXIS1\n\t,AXIS2\n\t,AXIS3);\nEND_TYPE;\n\nTYPE IfcLightDistributionCurveEnum = ENUMERATION OF\n\t(TYPE_A\n\t,TYPE_B\n\t,TYPE_C\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLightEmissionSourceEnum = ENUMERATION OF\n\t(COMPACTFLUORESCENT\n\t,FLUORESCENT\n\t,HIGHPRESSUREMERCURY\n\t,HIGHPRESSURESODIUM\n\t,LIGHTEMITTINGDIODE\n\t,LOWPRESSURESODIUM\n\t,LOWVOLTAGEHALOGEN\n\t,MAINVOLTAGEHALOGEN\n\t,METALHALIDE\n\t,TUNGSTENFILAMENT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLightFixtureTypeEnum = ENUMERATION OF\n\t(POINTSOURCE\n\t,DIRECTIONSOURCE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLoadGroupTypeEnum = ENUMERATION OF\n\t(LOAD_GROUP\n\t,LOAD_CASE\n\t,LOAD_COMBINATION_GROUP\n\t,LOAD_COMBINATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLogicalOperatorEnum = ENUMERATION OF\n\t(LOGICALAND\n\t,LOGICALOR);\nEND_TYPE;\n\nTYPE IfcMemberTypeEnum = ENUMERATION OF\n\t(BRACE\n\t,CHORD\n\t,COLLAR\n\t,MEMBER\n\t,PLATE\n\t,POST\n\t,PURLIN\n\t,RAFTER\n\t,STRINGER\n\t,STRUT\n\t,STUD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcMotorConnectionTypeEnum = ENUMERATION OF\n\t(BELTDRIVE\n\t,COUPLING\n\t,DIRECTDRIVE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcNullStyle = ENUMERATION OF\n\t(NULL);\nEND_TYPE;\n\nTYPE IfcObjectTypeEnum = ENUMERATION OF\n\t(PRODUCT\n\t,PROCESS\n\t,CONTROL\n\t,RESOURCE\n\t,ACTOR\n\t,GROUP\n\t,PROJECT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcObjectiveEnum = ENUMERATION OF\n\t(CODECOMPLIANCE\n\t,DESIGNINTENT\n\t,HEALTHANDSAFETY\n\t,REQUIREMENT\n\t,SPECIFICATION\n\t,TRIGGERCONDITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcOccupantTypeEnum = ENUMERATION OF\n\t(ASSIGNEE\n\t,ASSIGNOR\n\t,LESSEE\n\t,LESSOR\n\t,LETTINGAGENT\n\t,OWNER\n\t,TENANT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcOutletTypeEnum = ENUMERATION OF\n\t(AUDIOVISUALOUTLET\n\t,COMMUNICATIONSOUTLET\n\t,POWEROUTLET\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPermeableCoveringOperationEnum = ENUMERATION OF\n\t(GRILL\n\t,LOUVER\n\t,SCREEN\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPhysicalOrVirtualEnum = ENUMERATION OF\n\t(PHYSICAL\n\t,VIRTUAL\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPileConstructionEnum = ENUMERATION OF\n\t(CAST_IN_PLACE\n\t,COMPOSITE\n\t,PRECAST_CONCRETE\n\t,PREFAB_STEEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPileTypeEnum = ENUMERATION OF\n\t(COHESION\n\t,FRICTION\n\t,SUPPORT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPipeFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CONNECTOR\n\t,ENTRY\n\t,EXIT\n\t,JUNCTION\n\t,OBSTRUCTION\n\t,TRANSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPipeSegmentTypeEnum = ENUMERATION OF\n\t(FLEXIBLESEGMENT\n\t,RIGIDSEGMENT\n\t,GUTTER\n\t,SPOOL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPlateTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProcedureTypeEnum = ENUMERATION OF\n\t(ADVICE_CAUTION\n\t,ADVICE_NOTE\n\t,ADVICE_WARNING\n\t,CALIBRATION\n\t,DIAGNOSTIC\n\t,SHUTDOWN\n\t,STARTUP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProfileTypeEnum = ENUMERATION OF\n\t(CURVE\n\t,AREA);\nEND_TYPE;\n\nTYPE IfcProjectOrderRecordTypeEnum = ENUMERATION OF\n\t(CHANGE\n\t,MAINTENANCE\n\t,MOVE\n\t,PURCHASE\n\t,WORK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProjectOrderTypeEnum = ENUMERATION OF\n\t(CHANGEORDER\n\t,MAINTENANCEWORKORDER\n\t,MOVEORDER\n\t,PURCHASEORDER\n\t,WORKORDER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProjectedOrTrueLengthEnum = ENUMERATION OF\n\t(PROJECTED_LENGTH\n\t,TRUE_LENGTH);\nEND_TYPE;\n\nTYPE IfcPropertySourceEnum = ENUMERATION OF\n\t(DESIGN\n\t,DESIGNMAXIMUM\n\t,DESIGNMINIMUM\n\t,SIMULATED\n\t,ASBUILT\n\t,COMMISSIONING\n\t,MEASURED\n\t,USERDEFINED\n\t,NOTKNOWN);\nEND_TYPE;\n\nTYPE IfcProtectiveDeviceTypeEnum = ENUMERATION OF\n\t(FUSEDISCONNECTOR\n\t,CIRCUITBREAKER\n\t,EARTHFAILUREDEVICE\n\t,RESIDUALCURRENTCIRCUITBREAKER\n\t,RESIDUALCURRENTSWITCH\n\t,VARISTOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPumpTypeEnum = ENUMERATION OF\n\t(CIRCULATOR\n\t,ENDSUCTION\n\t,SPLITCASE\n\t,VERTICALINLINE\n\t,VERTICALTURBINE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRailingTypeEnum = ENUMERATION OF\n\t(HANDRAIL\n\t,GUARDRAIL\n\t,BALUSTRADE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRampFlightTypeEnum = ENUMERATION OF\n\t(STRAIGHT\n\t,SPIRAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRampTypeEnum = ENUMERATION OF\n\t(STRAIGHT_RUN_RAMP\n\t,TWO_STRAIGHT_RUN_RAMP\n\t,QUARTER_TURN_RAMP\n\t,TWO_QUARTER_TURN_RAMP\n\t,HALF_TURN_RAMP\n\t,SPIRAL_RAMP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReflectanceMethodEnum = ENUMERATION OF\n\t(BLINN\n\t,FLAT\n\t,GLASS\n\t,MATT\n\t,METAL\n\t,MIRROR\n\t,PHONG\n\t,PLASTIC\n\t,STRAUSS\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReinforcingBarRoleEnum = ENUMERATION OF\n\t(MAIN\n\t,SHEAR\n\t,LIGATURE\n\t,STUD\n\t,PUNCHING\n\t,EDGE\n\t,RING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReinforcingBarSurfaceEnum = ENUMERATION OF\n\t(PLAIN\n\t,TEXTURED);\nEND_TYPE;\n\nTYPE IfcResourceConsumptionEnum = ENUMERATION OF\n\t(CONSUMED\n\t,PARTIALLYCONSUMED\n\t,NOTCONSUMED\n\t,OCCUPIED\n\t,PARTIALLYOCCUPIED\n\t,NOTOCCUPIED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRibPlateDirectionEnum = ENUMERATION OF\n\t(DIRECTION_X\n\t,DIRECTION_Y);\nEND_TYPE;\n\nTYPE IfcRoleEnum = ENUMERATION OF\n\t(SUPPLIER\n\t,MANUFACTURER\n\t,CONTRACTOR\n\t,SUBCONTRACTOR\n\t,ARCHITECT\n\t,STRUCTURALENGINEER\n\t,COSTENGINEER\n\t,CLIENT\n\t,BUILDINGOWNER\n\t,BUILDINGOPERATOR\n\t,MECHANICALENGINEER\n\t,ELECTRICALENGINEER\n\t,PROJECTMANAGER\n\t,FACILITIESMANAGER\n\t,CIVILENGINEER\n\t,COMISSIONINGENGINEER\n\t,ENGINEER\n\t,OWNER\n\t,CONSULTANT\n\t,CONSTRUCTIONMANAGER\n\t,FIELDCONSTRUCTIONMANAGER\n\t,RESELLER\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcRoofTypeEnum = ENUMERATION OF\n\t(FLAT_ROOF\n\t,SHED_ROOF\n\t,GABLE_ROOF\n\t,HIP_ROOF\n\t,HIPPED_GABLE_ROOF\n\t,GAMBREL_ROOF\n\t,MANSARD_ROOF\n\t,BARREL_ROOF\n\t,RAINBOW_ROOF\n\t,BUTTERFLY_ROOF\n\t,PAVILION_ROOF\n\t,DOME_ROOF\n\t,FREEFORM\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSIPrefix = ENUMERATION OF\n\t(EXA\n\t,PETA\n\t,TERA\n\t,GIGA\n\t,MEGA\n\t,KILO\n\t,HECTO\n\t,DECA\n\t,DECI\n\t,CENTI\n\t,MILLI\n\t,MICRO\n\t,NANO\n\t,PICO\n\t,FEMTO\n\t,ATTO);\nEND_TYPE;\n\nTYPE IfcSIUnitName = ENUMERATION OF\n\t(AMPERE\n\t,BECQUEREL\n\t,CANDELA\n\t,COULOMB\n\t,CUBIC_METRE\n\t,DEGREE_CELSIUS\n\t,FARAD\n\t,GRAM\n\t,GRAY\n\t,HENRY\n\t,HERTZ\n\t,JOULE\n\t,KELVIN\n\t,LUMEN\n\t,LUX\n\t,METRE\n\t,MOLE\n\t,NEWTON\n\t,OHM\n\t,PASCAL\n\t,RADIAN\n\t,SECOND\n\t,SIEMENS\n\t,SIEVERT\n\t,SQUARE_METRE\n\t,STERADIAN\n\t,TESLA\n\t,VOLT\n\t,WATT\n\t,WEBER);\nEND_TYPE;\n\nTYPE IfcSanitaryTerminalTypeEnum = ENUMERATION OF\n\t(BATH\n\t,BIDET\n\t,CISTERN\n\t,SHOWER\n\t,SINK\n\t,SANITARYFOUNTAIN\n\t,TOILETPAN\n\t,URINAL\n\t,WASHHANDBASIN\n\t,WCSEAT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSectionTypeEnum = ENUMERATION OF\n\t(UNIFORM\n\t,TAPERED);\nEND_TYPE;\n\nTYPE IfcSensorTypeEnum = ENUMERATION OF\n\t(CO2SENSOR\n\t,FIRESENSOR\n\t,FLOWSENSOR\n\t,GASSENSOR\n\t,HEATSENSOR\n\t,HUMIDITYSENSOR\n\t,LIGHTSENSOR\n\t,MOISTURESENSOR\n\t,MOVEMENTSENSOR\n\t,PRESSURESENSOR\n\t,SMOKESENSOR\n\t,SOUNDSENSOR\n\t,TEMPERATURESENSOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSequenceEnum = ENUMERATION OF\n\t(START_START\n\t,START_FINISH\n\t,FINISH_START\n\t,FINISH_FINISH\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcServiceLifeFactorTypeEnum = ENUMERATION OF\n\t(A_QUALITYOFCOMPONENTS\n\t,B_DESIGNLEVEL\n\t,C_WORKEXECUTIONLEVEL\n\t,D_INDOORENVIRONMENT\n\t,E_OUTDOORENVIRONMENT\n\t,F_INUSECONDITIONS\n\t,G_MAINTENANCELEVEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcServiceLifeTypeEnum = ENUMERATION OF\n\t(ACTUALSERVICELIFE\n\t,EXPECTEDSERVICELIFE\n\t,OPTIMISTICREFERENCESERVICELIFE\n\t,PESSIMISTICREFERENCESERVICELIFE\n\t,REFERENCESERVICELIFE);\nEND_TYPE;\n\nTYPE IfcSlabTypeEnum = ENUMERATION OF\n\t(FLOOR\n\t,ROOF\n\t,LANDING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSoundScaleEnum = ENUMERATION OF\n\t(DBA\n\t,DBB\n\t,DBC\n\t,NC\n\t,NR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSpaceHeaterTypeEnum = ENUMERATION OF\n\t(SECTIONALRADIATOR\n\t,PANELRADIATOR\n\t,TUBULARRADIATOR\n\t,CONVECTOR\n\t,BASEBOARDHEATER\n\t,FINNEDTUBEUNIT\n\t,UNITHEATER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStackTerminalTypeEnum = ENUMERATION OF\n\t(BIRDCAGE\n\t,COWL\n\t,RAINWATERHOPPER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStairFlightTypeEnum = ENUMERATION OF\n\t(STRAIGHT\n\t,WINDER\n\t,SPIRAL\n\t,CURVED\n\t,FREEFORM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStairTypeEnum = ENUMERATION OF\n\t(STRAIGHT_RUN_STAIR\n\t,TWO_STRAIGHT_RUN_STAIR\n\t,QUARTER_WINDING_STAIR\n\t,QUARTER_TURN_STAIR\n\t,HALF_WINDING_STAIR\n\t,HALF_TURN_STAIR\n\t,TWO_QUARTER_WINDING_STAIR\n\t,TWO_QUARTER_TURN_STAIR\n\t,THREE_QUARTER_WINDING_STAIR\n\t,THREE_QUARTER_TURN_STAIR\n\t,SPIRAL_STAIR\n\t,DOUBLE_RETURN_STAIR\n\t,CURVED_RUN_STAIR\n\t,TWO_CURVED_RUN_STAIR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStateEnum = ENUMERATION OF\n\t(READWRITE\n\t,READONLY\n\t,LOCKED\n\t,READWRITELOCKED\n\t,READONLYLOCKED);\nEND_TYPE;\n\nTYPE IfcStructuralCurveTypeEnum = ENUMERATION OF\n\t(RIGID_JOINED_MEMBER\n\t,PIN_JOINED_MEMBER\n\t,CABLE\n\t,TENSION_MEMBER\n\t,COMPRESSION_MEMBER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStructuralSurfaceTypeEnum = ENUMERATION OF\n\t(BENDING_ELEMENT\n\t,MEMBRANE_ELEMENT\n\t,SHELL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSurfaceSide = ENUMERATION OF\n\t(POSITIVE\n\t,NEGATIVE\n\t,BOTH);\nEND_TYPE;\n\nTYPE IfcSurfaceTextureEnum = ENUMERATION OF\n\t(BUMP\n\t,OPACITY\n\t,REFLECTION\n\t,SELFILLUMINATION\n\t,SHININESS\n\t,SPECULAR\n\t,TEXTURE\n\t,TRANSPARENCYMAP\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSwitchingDeviceTypeEnum = ENUMERATION OF\n\t(CONTACTOR\n\t,EMERGENCYSTOP\n\t,STARTER\n\t,SWITCHDISCONNECTOR\n\t,TOGGLESWITCH\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTankTypeEnum = ENUMERATION OF\n\t(PREFORMED\n\t,SECTIONAL\n\t,EXPANSION\n\t,PRESSUREVESSEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTendonTypeEnum = ENUMERATION OF\n\t(STRAND\n\t,WIRE\n\t,BAR\n\t,COATED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTextPath = ENUMERATION OF\n\t(LEFT\n\t,RIGHT\n\t,UP\n\t,DOWN);\nEND_TYPE;\n\nTYPE IfcThermalLoadSourceEnum = ENUMERATION OF\n\t(PEOPLE\n\t,LIGHTING\n\t,EQUIPMENT\n\t,VENTILATIONINDOORAIR\n\t,VENTILATIONOUTSIDEAIR\n\t,RECIRCULATEDAIR\n\t,EXHAUSTAIR\n\t,AIREXCHANGERATE\n\t,DRYBULBTEMPERATURE\n\t,RELATIVEHUMIDITY\n\t,INFILTRATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcThermalLoadTypeEnum = ENUMERATION OF\n\t(SENSIBLE\n\t,LATENT\n\t,RADIANT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTimeSeriesDataTypeEnum = ENUMERATION OF\n\t(CONTINUOUS\n\t,DISCRETE\n\t,DISCRETEBINARY\n\t,PIECEWISEBINARY\n\t,PIECEWISECONSTANT\n\t,PIECEWISECONTINUOUS\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTimeSeriesScheduleTypeEnum = ENUMERATION OF\n\t(ANNUAL\n\t,MONTHLY\n\t,WEEKLY\n\t,DAILY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTransformerTypeEnum = ENUMERATION OF\n\t(CURRENT\n\t,FREQUENCY\n\t,VOLTAGE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTransitionCode = ENUMERATION OF\n\t(DISCONTINUOUS\n\t,CONTINUOUS\n\t,CONTSAMEGRADIENT\n\t,CONTSAMEGRADIENTSAMECURVATURE);\nEND_TYPE;\n\nTYPE IfcTransportElementTypeEnum = ENUMERATION OF\n\t(ELEVATOR\n\t,ESCALATOR\n\t,MOVINGWALKWAY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTrimmingPreference = ENUMERATION OF\n\t(CARTESIAN\n\t,PARAMETER\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcTubeBundleTypeEnum = ENUMERATION OF\n\t(FINNED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcUnitEnum = ENUMERATION OF\n\t(ABSORBEDDOSEUNIT\n\t,AMOUNTOFSUBSTANCEUNIT\n\t,AREAUNIT\n\t,DOSEEQUIVALENTUNIT\n\t,ELECTRICCAPACITANCEUNIT\n\t,ELECTRICCHARGEUNIT\n\t,ELECTRICCONDUCTANCEUNIT\n\t,ELECTRICCURRENTUNIT\n\t,ELECTRICRESISTANCEUNIT\n\t,ELECTRICVOLTAGEUNIT\n\t,ENERGYUNIT\n\t,FORCEUNIT\n\t,FREQUENCYUNIT\n\t,ILLUMINANCEUNIT\n\t,INDUCTANCEUNIT\n\t,LENGTHUNIT\n\t,LUMINOUSFLUXUNIT\n\t,LUMINOUSINTENSITYUNIT\n\t,MAGNETICFLUXDENSITYUNIT\n\t,MAGNETICFLUXUNIT\n\t,MASSUNIT\n\t,PLANEANGLEUNIT\n\t,POWERUNIT\n\t,PRESSUREUNIT\n\t,RADIOACTIVITYUNIT\n\t,SOLIDANGLEUNIT\n\t,THERMODYNAMICTEMPERATUREUNIT\n\t,TIMEUNIT\n\t,VOLUMEUNIT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcUnitaryEquipmentTypeEnum = ENUMERATION OF\n\t(AIRHANDLER\n\t,AIRCONDITIONINGUNIT\n\t,SPLITSYSTEM\n\t,ROOFTOPUNIT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcValveTypeEnum = ENUMERATION OF\n\t(AIRRELEASE\n\t,ANTIVACUUM\n\t,CHANGEOVER\n\t,CHECK\n\t,COMMISSIONING\n\t,DIVERTING\n\t,DRAWOFFCOCK\n\t,DOUBLECHECK\n\t,DOUBLEREGULATING\n\t,FAUCET\n\t,FLUSHING\n\t,GASCOCK\n\t,GASTAP\n\t,ISOLATING\n\t,MIXING\n\t,PRESSUREREDUCING\n\t,PRESSURERELIEF\n\t,REGULATING\n\t,SAFETYCUTOFF\n\t,STEAMTRAP\n\t,STOPCOCK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcVibrationIsolatorTypeEnum = ENUMERATION OF\n\t(COMPRESSION\n\t,SPRING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWallTypeEnum = ENUMERATION OF\n\t(STANDARD\n\t,POLYGONAL\n\t,SHEAR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWasteTerminalTypeEnum = ENUMERATION OF\n\t(FLOORTRAP\n\t,FLOORWASTE\n\t,GULLYSUMP\n\t,GULLYTRAP\n\t,GREASEINTERCEPTOR\n\t,OILINTERCEPTOR\n\t,PETROLINTERCEPTOR\n\t,ROOFDRAIN\n\t,WASTEDISPOSALUNIT\n\t,WASTETRAP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowPanelOperationEnum = ENUMERATION OF\n\t(SIDEHUNGRIGHTHAND\n\t,SIDEHUNGLEFTHAND\n\t,TILTANDTURNRIGHTHAND\n\t,TILTANDTURNLEFTHAND\n\t,TOPHUNG\n\t,BOTTOMHUNG\n\t,PIVOTHORIZONTAL\n\t,PIVOTVERTICAL\n\t,SLIDINGHORIZONTAL\n\t,SLIDINGVERTICAL\n\t,REMOVABLECASEMENT\n\t,FIXEDCASEMENT\n\t,OTHEROPERATION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowPanelPositionEnum = ENUMERATION OF\n\t(LEFT\n\t,MIDDLE\n\t,RIGHT\n\t,BOTTOM\n\t,TOP\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowStyleConstructionEnum = ENUMERATION OF\n\t(ALUMINIUM\n\t,HIGH_GRADE_STEEL\n\t,STEEL\n\t,WOOD\n\t,ALUMINIUM_WOOD\n\t,PLASTIC\n\t,OTHER_CONSTRUCTION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowStyleOperationEnum = ENUMERATION OF\n\t(SINGLE_PANEL\n\t,DOUBLE_PANEL_VERTICAL\n\t,DOUBLE_PANEL_HORIZONTAL\n\t,TRIPLE_PANEL_VERTICAL\n\t,TRIPLE_PANEL_BOTTOM\n\t,TRIPLE_PANEL_TOP\n\t,TRIPLE_PANEL_LEFT\n\t,TRIPLE_PANEL_RIGHT\n\t,TRIPLE_PANEL_HORIZONTAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWorkControlTypeEnum = ENUMERATION OF\n\t(ACTUAL\n\t,BASELINE\n\t,PLANNED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActorSelect = SELECT\n\t(IfcOrganization\n\t,IfcPerson\n\t,IfcPersonAndOrganization);\nEND_TYPE;\n\nTYPE IfcAppliedValueSelect = SELECT\n\t(IfcRatioMeasure\n\t,IfcMeasureWithUnit\n\t,IfcMonetaryMeasure);\nEND_TYPE;\n\nTYPE IfcAxis2Placement = SELECT\n\t(IfcAxis2Placement2D\n\t,IfcAxis2Placement3D);\nEND_TYPE;\n\nTYPE IfcBooleanOperand = SELECT\n\t(IfcSolidModel\n\t,IfcHalfSpaceSolid\n\t,IfcBooleanResult);\nEND_TYPE;\n\nTYPE IfcCharacterSpacingSelect = SELECT\n\t(IfcRatioMeasure\n\t,IfcLengthMeasure\n\t,IfcMeasureWithUnit);\nEND_TYPE;\n\nTYPE IfcCharacterStyleSelect = SELECT\n\t(IfcColour);\nEND_TYPE;\n\nTYPE IfcClassificationNotationSelect = SELECT\n\t(IfcClassificationNotation\n\t,IfcClassificationReference);\nEND_TYPE;\n\nTYPE IfcColour = SELECT\n\t(IfcColourSpecification\n\t,IfcPreDefinedColour);\nEND_TYPE;\n\nTYPE IfcColourOrFactor = SELECT\n\t(IfcColourRgb\n\t,IfcNormalisedRatioMeasure);\nEND_TYPE;\n\nTYPE IfcConditionCriterionSelect = SELECT\n\t(IfcLabel\n\t,IfcMeasureWithUnit);\nEND_TYPE;\n\nTYPE IfcCsgSelect = SELECT\n\t(IfcBooleanResult);\nEND_TYPE;\n\nTYPE IfcCurveFontOrScaledCurveFontSelect = SELECT\n\t(IfcCurveStyleFontSelect\n\t,IfcCurveStyleFontAndScaling);\nEND_TYPE;\n\nTYPE IfcCurveStyleFontSelect = SELECT\n\t(IfcPreDefinedCurveFont\n\t,IfcCurveStyleFont);\nEND_TYPE;\n\nTYPE IfcDateTimeSelect = SELECT\n\t(IfcCalendarDate\n\t,IfcLocalTime\n\t,IfcDateAndTime);\nEND_TYPE;\n\nTYPE IfcDefinedSymbolSelect = SELECT\n\t(IfcPreDefinedSymbol\n\t,IfcExternallyDefinedSymbol);\nEND_TYPE;\n\nTYPE IfcDerivedMeasureValue = SELECT\n\t(IfcVolumetricFlowRateMeasure\n\t,IfcTimeStamp\n\t,IfcThermalTransmittanceMeasure\n\t,IfcThermalResistanceMeasure\n\t,IfcThermalAdmittanceMeasure\n\t,IfcPressureMeasure\n\t,IfcPowerMeasure\n\t,IfcMassFlowRateMeasure\n\t,IfcMassDensityMeasure\n\t,IfcLinearVelocityMeasure\n\t,IfcKinematicViscosityMeasure\n\t,IfcIntegerCountRateMeasure\n\t,IfcHeatFluxDensityMeasure\n\t,IfcFrequencyMeasure\n\t,IfcEnergyMeasure\n\t,IfcElectricVoltageMeasure\n\t,IfcDynamicViscosityMeasure\n\t,IfcCompoundPlaneAngleMeasure\n\t,IfcAngularVelocityMeasure\n\t,IfcThermalConductivityMeasure\n\t,IfcMolecularWeightMeasure\n\t,IfcVaporPermeabilityMeasure\n\t,IfcMoistureDiffusivityMeasure\n\t,IfcIsothermalMoistureCapacityMeasure\n\t,IfcSpecificHeatCapacityMeasure\n\t,IfcMonetaryMeasure\n\t,IfcMagneticFluxDensityMeasure\n\t,IfcMagneticFluxMeasure\n\t,IfcLuminousFluxMeasure\n\t,IfcForceMeasure\n\t,IfcInductanceMeasure\n\t,IfcIlluminanceMeasure\n\t,IfcElectricResistanceMeasure\n\t,IfcElectricConductanceMeasure\n\t,IfcElectricChargeMeasure\n\t,IfcDoseEquivalentMeasure\n\t,IfcElectricCapacitanceMeasure\n\t,IfcAbsorbedDoseMeasure\n\t,IfcRadioActivityMeasure\n\t,IfcRotationalFrequencyMeasure\n\t,IfcTorqueMeasure\n\t,IfcAccelerationMeasure\n\t,IfcLinearForceMeasure\n\t,IfcLinearStiffnessMeasure\n\t,IfcModulusOfSubgradeReactionMeasure\n\t,IfcModulusOfElasticityMeasure\n\t,IfcMomentOfInertiaMeasure\n\t,IfcPlanarForceMeasure\n\t,IfcRotationalStiffnessMeasure\n\t,IfcShearModulusMeasure\n\t,IfcLinearMomentMeasure\n\t,IfcLuminousIntensityDistributionMeasure\n\t,IfcCurvatureMeasure\n\t,IfcMassPerLengthMeasure\n\t,IfcModulusOfLinearSubgradeReactionMeasure\n\t,IfcModulusOfRotationalSubgradeReactionMeasure\n\t,IfcRotationalMassMeasure\n\t,IfcSectionalAreaIntegralMeasure\n\t,IfcSectionModulusMeasure\n\t,IfcTemperatureGradientMeasure\n\t,IfcThermalExpansionCoefficientMeasure\n\t,IfcWarpingConstantMeasure\n\t,IfcWarpingMomentMeasure\n\t,IfcSoundPowerMeasure\n\t,IfcSoundPressureMeasure\n\t,IfcHeatingValueMeasure\n\t,IfcPHMeasure\n\t,IfcIonConcentrationMeasure);\nEND_TYPE;\n\nTYPE IfcDocumentSelect = SELECT\n\t(IfcDocumentReference\n\t,IfcDocumentInformation);\nEND_TYPE;\n\nTYPE IfcDraughtingCalloutElement = SELECT\n\t(IfcAnnotationCurveOccurrence\n\t,IfcAnnotationTextOccurrence\n\t,IfcAnnotationSymbolOccurrence);\nEND_TYPE;\n\nTYPE IfcFillAreaStyleTileShapeSelect = SELECT\n\t(IfcFillAreaStyleTileSymbolWithStyle);\nEND_TYPE;\n\nTYPE IfcFillStyleSelect = SELECT\n\t(IfcFillAreaStyleHatching\n\t,IfcFillAreaStyleTiles\n\t,IfcColour\n\t,IfcExternallyDefinedHatchStyle);\nEND_TYPE;\n\nTYPE IfcFontSelect = SELECT\n\t(IfcPreDefinedTextFont\n\t,IfcExternallyDefinedTextFont);\nEND_TYPE;\n\nTYPE IfcGeometricSetSelect = SELECT\n\t(IfcPoint\n\t,IfcCurve\n\t,IfcSurface);\nEND_TYPE;\n\nTYPE IfcLayeredItem = SELECT\n\t(IfcRepresentationItem\n\t,IfcRepresentation);\nEND_TYPE;\n\nTYPE IfcLibrarySelect = SELECT\n\t(IfcLibraryReference\n\t,IfcLibraryInformation);\nEND_TYPE;\n\nTYPE IfcLightDistributionDataSourceSelect = SELECT\n\t(IfcExternalReference\n\t,IfcLightIntensityDistribution);\nEND_TYPE;\n\nTYPE IfcMaterialSelect = SELECT\n\t(IfcMaterial\n\t,IfcMaterialList\n\t,IfcMaterialLayerSetUsage\n\t,IfcMaterialLayerSet\n\t,IfcMaterialLayer);\nEND_TYPE;\n\nTYPE IfcMeasureValue = SELECT\n\t(IfcVolumeMeasure\n\t,IfcTimeMeasure\n\t,IfcThermodynamicTemperatureMeasure\n\t,IfcSolidAngleMeasure\n\t,IfcPositiveRatioMeasure\n\t,IfcRatioMeasure\n\t,IfcPositivePlaneAngleMeasure\n\t,IfcPlaneAngleMeasure\n\t,IfcParameterValue\n\t,IfcNumericMeasure\n\t,IfcMassMeasure\n\t,IfcPositiveLengthMeasure\n\t,IfcLengthMeasure\n\t,IfcElectricCurrentMeasure\n\t,IfcDescriptiveMeasure\n\t,IfcCountMeasure\n\t,IfcContextDependentMeasure\n\t,IfcAreaMeasure\n\t,IfcAmountOfSubstanceMeasure\n\t,IfcLuminousIntensityMeasure\n\t,IfcNormalisedRatioMeasure\n\t,IfcComplexNumber);\nEND_TYPE;\n\nTYPE IfcMetricValueSelect = SELECT\n\t(IfcDateTimeSelect\n\t,IfcMeasureWithUnit\n\t,IfcTable\n\t,IfcText\n\t,IfcTimeSeries\n\t,IfcCostValue);\nEND_TYPE;\n\nTYPE IfcObjectReferenceSelect = SELECT\n\t(IfcMaterial\n\t,IfcPerson\n\t,IfcDateAndTime\n\t,IfcMaterialList\n\t,IfcOrganization\n\t,IfcCalendarDate\n\t,IfcLocalTime\n\t,IfcPersonAndOrganization\n\t,IfcMaterialLayer\n\t,IfcExternalReference\n\t,IfcTimeSeries\n\t,IfcAddress\n\t,IfcAppliedValue);\nEND_TYPE;\n\nTYPE IfcPresentationStyleSelect = SELECT\n\t(IfcNullStyle\n\t,IfcCurveStyle\n\t,IfcSymbolStyle\n\t,IfcFillAreaStyle\n\t,IfcTextStyle\n\t,IfcSurfaceStyle);\nEND_TYPE;\n\nTYPE IfcShell = SELECT\n\t(IfcClosedShell\n\t,IfcOpenShell);\nEND_TYPE;\n\nTYPE IfcSimpleValue = SELECT\n\t(IfcInteger\n\t,IfcReal\n\t,IfcBoolean\n\t,IfcIdentifier\n\t,IfcText\n\t,IfcLabel\n\t,IfcLogical);\nEND_TYPE;\n\nTYPE IfcSizeSelect = SELECT\n\t(IfcPositiveLengthMeasure\n\t,IfcMeasureWithUnit);\nEND_TYPE;\n\nTYPE IfcSpecularHighlightSelect = SELECT\n\t(IfcSpecularExponent\n\t,IfcSpecularRoughness);\nEND_TYPE;\n\nTYPE IfcStructuralActivityAssignmentSelect = SELECT\n\t(IfcStructuralItem\n\t,IfcBuildingElement);\nEND_TYPE;\n\nTYPE IfcSurfaceStyleElementSelect = SELECT\n\t(IfcSurfaceStyleShading\n\t,IfcSurfaceStyleLighting\n\t,IfcSurfaceStyleWithTextures\n\t,IfcExternallyDefinedSufaceStyle\n\t,IfcSurfaceStyleRefraction);\nEND_TYPE;\n\nTYPE IfcSymbolStyleSelect = SELECT\n\t(IfcColour);\nEND_TYPE;\n\nTYPE IfcTextStyleSelect = SELECT\n\t(IfcTextStyleWithMirror\n\t,IfcTextStyleWithSpacing\n\t,IfcTextStyleWithBoxCharacteristics);\nEND_TYPE;\n\nTYPE IfcTrimmingSelect = SELECT\n\t(IfcCartesianPoint\n\t,IfcParameterValue);\nEND_TYPE;\n\nTYPE IfcUnit = SELECT\n\t(IfcDerivedUnit\n\t,IfcNamedUnit\n\t,IfcMonetaryUnit);\nEND_TYPE;\n\nTYPE IfcValue = SELECT\n\t(IfcMeasureValue\n\t,IfcSimpleValue\n\t,IfcDerivedMeasureValue);\nEND_TYPE;\n\nTYPE IfcVectorOrDirection = SELECT\n\t(IfcDirection\n\t,IfcVector);\nEND_TYPE;\n\nENTITY Ifc2DCompositeCurve\n SUBTYPE OF (IfcCompositeCurve);\n WHERE\n\tWR1 : SELF\\IfcCompositeCurve.ClosedCurve;\n\tWR2 : SELF\\IfcCurve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcActionRequest\n SUBTYPE OF (IfcControl);\n\tRequestID : IfcIdentifier;\n UNIQUE\n\tUR2 : RequestID;\nEND_ENTITY;\n\nENTITY IfcActor\n SUPERTYPE OF (ONEOF\n\t(IfcOccupant))\n SUBTYPE OF (IfcObject);\n\tTheActor : IfcActorSelect;\n INVERSE\n\tIsActingUpon : SET [0:?] OF IfcRelAssignsToActor FOR RelatingActor;\nEND_ENTITY;\n\nENTITY IfcActorRole;\n\tRole : IfcRoleEnum;\n\tUserDefinedRole : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n WHERE\n\tWR1 : (Role <> IfcRoleEnum.USERDEFINED) OR\n            ((Role = IfcRoleEnum.USERDEFINED) AND\n              EXISTS(SELF.UserDefinedRole));\nEND_ENTITY;\n\nENTITY IfcActuatorType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcActuatorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcAddress\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPostalAddress\n\t,IfcTelecomAddress));\n\tPurpose : OPTIONAL IfcAddressTypeEnum;\n\tDescription : OPTIONAL IfcText;\n\tUserDefinedPurpose : OPTIONAL IfcLabel;\n INVERSE\n\tOfPerson : SET [0:?] OF IfcPerson FOR Addresses;\n\tOfOrganization : SET [0:?] OF IfcOrganization FOR Addresses;\n WHERE\n\tWR1 : (NOT(EXISTS(Purpose))) OR\n            ((Purpose <> IfcAddressTypeEnum.USERDEFINED) OR\n            ((Purpose = IfcAddressTypeEnum.USERDEFINED) AND\n              EXISTS(SELF.UserDefinedPurpose)));\nEND_ENTITY;\n\nENTITY IfcAirTerminalBoxType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcAirTerminalBoxTypeEnum;\nEND_ENTITY;\n\nENTITY IfcAirTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcAirTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcAirToAirHeatRecoveryType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcAirToAirHeatRecoveryTypeEnum;\nEND_ENTITY;\n\nENTITY IfcAlarmType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcAlarmTypeEnum;\nEND_ENTITY;\n\nENTITY IfcAngularDimension\n SUBTYPE OF (IfcDimensionCurveDirectedCallout);\nEND_ENTITY;\n\nENTITY IfcAnnotation\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\nEND_ENTITY;\n\nENTITY IfcAnnotationCurveOccurrence\n SUPERTYPE OF (ONEOF\n\t(IfcDimensionCurve\n\t,IfcProjectionCurve))\n SUBTYPE OF (IfcAnnotationOccurrence);\nEND_ENTITY;\n\nENTITY IfcAnnotationFillArea\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tBoundaries : SET [1:?] OF IfcCurve;\nEND_ENTITY;\n\nENTITY IfcAnnotationFillAreaOccurrence\n SUBTYPE OF (IfcAnnotationOccurrence);\n\tFillStyleTarget : IfcPoint;\nEND_ENTITY;\n\nENTITY IfcAnnotationOccurrence\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAnnotationCurveOccurrence\n\t,IfcAnnotationFillAreaOccurrence\n\t,IfcAnnotationSurfaceOccurrence\n\t,IfcAnnotationSymbolOccurrence\n\t,IfcAnnotationTextOccurrence))\n SUBTYPE OF (IfcStyledItem);\nEND_ENTITY;\n\nENTITY IfcAnnotationSurfaceOccurrence\n SUBTYPE OF (IfcAnnotationOccurrence);\nEND_ENTITY;\n\nENTITY IfcAnnotationSymbolOccurrence\n SUPERTYPE OF (ONEOF\n\t(IfcTerminatorSymbol))\n SUBTYPE OF (IfcAnnotationOccurrence);\nEND_ENTITY;\n\nENTITY IfcAnnotationTextOccurrence\n SUBTYPE OF (IfcAnnotationOccurrence);\nEND_ENTITY;\n\nENTITY IfcApplication;\n\tApplicationDeveloper : IfcOrganization;\n\tVersion : IfcLabel;\n\tApplicationFullName : IfcLabel;\n\tApplicationIdentifier : IfcIdentifier;\n UNIQUE\n\tUR1 : ApplicationIdentifier;\n\tUR2 : ApplicationFullName, Version;\nEND_ENTITY;\n\nENTITY IfcAppliedValue\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCostValue\n\t,IfcEnvironmentalImpactValue));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tAppliedValue : OPTIONAL IfcAppliedValueSelect;\n\tUnitBasis : OPTIONAL IfcMeasureWithUnit;\n\tApplicableDate : OPTIONAL IfcDateTimeSelect;\n\tFixedUntilDate : OPTIONAL IfcDateTimeSelect;\n INVERSE\n\tValuesReferenced : SET [0:?] OF IfcReferencesValueDocument FOR ReferencingValues;\n\tValueOfComponents : SET [0:?] OF IfcAppliedValueRelationship FOR ComponentOfTotal;\n\tIsComponentIn : SET [0:?] OF IfcAppliedValueRelationship FOR Components;\n WHERE\n\tWR1 : EXISTS (AppliedValue) OR \n            EXISTS (ValueOfComponents);\nEND_ENTITY;\n\nENTITY IfcAppliedValueRelationship;\n\tComponentOfTotal : IfcAppliedValue;\n\tComponents : SET [1:?] OF IfcAppliedValue;\n\tArithmeticOperator : IfcArithmeticOperatorEnum;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcApproval;\n\tDescription : OPTIONAL IfcText;\n\tApprovalDateTime : IfcDateTimeSelect;\n\tApprovalStatus : OPTIONAL IfcLabel;\n\tApprovalLevel : OPTIONAL IfcLabel;\n\tApprovalQualifier : OPTIONAL IfcText;\n\tName : IfcLabel;\n\tIdentifier : IfcIdentifier;\n INVERSE\n\tActors : SET [0:?] OF IfcApprovalActorRelationship FOR Approval;\n\tIsRelatedWith : SET [0:?] OF IfcApprovalRelationship FOR RelatedApproval;\n\tRelates : SET [0:?] OF IfcApprovalRelationship FOR RelatingApproval;\nEND_ENTITY;\n\nENTITY IfcApprovalActorRelationship;\n\tActor : IfcActorSelect;\n\tApproval : IfcApproval;\n\tRole : IfcActorRole;\nEND_ENTITY;\n\nENTITY IfcApprovalPropertyRelationship;\n\tApprovedProperties : SET [1:?] OF IfcProperty;\n\tApproval : IfcApproval;\nEND_ENTITY;\n\nENTITY IfcApprovalRelationship;\n\tRelatedApproval : IfcApproval;\n\tRelatingApproval : IfcApproval;\n\tDescription : OPTIONAL IfcText;\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcArbitraryClosedProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcArbitraryProfileDefWithVoids))\n SUBTYPE OF (IfcProfileDef);\n\tOuterCurve : IfcCurve;\n WHERE\n\tWR1 : OuterCurve.Dim = 2;\n\tWR2 : NOT('IFC2X2_FINAL.IFCLINE' IN TYPEOF(OuterCurve));\n\tWR3 : NOT('IFC2X2_FINAL.IFCOFFSETCURVE2D' IN TYPEOF(OuterCurve));\nEND_ENTITY;\n\nENTITY IfcArbitraryOpenProfileDef\n SUBTYPE OF (IfcProfileDef);\n\tCurve : IfcBoundedCurve;\n WHERE\n\tWR1 : SELF\\IfcProfileDef.ProfileType = IfcProfileTypeEnum.CURVE;\n\tWR2 : Curve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcArbitraryProfileDefWithVoids\n SUBTYPE OF (IfcArbitraryClosedProfileDef);\n\tInnerCurves : SET [1:?] OF IfcCurve;\n WHERE\n\tWR1 : SELF\\IfcProfileDef.ProfileType = AREA;\n\tWR2 : SIZEOF(QUERY(temp <* InnerCurves | temp.Dim <> 2)) = 0;\n\tWR3 : SIZEOF(QUERY(temp <* InnerCurves | 'IFC2X2_FINAL.IFCLINE' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcAsset\n SUBTYPE OF (IfcGroup);\n\tAssetID : IfcIdentifier;\n\tOriginalValue : IfcCostValue;\n\tCurrentValue : IfcCostValue;\n\tTotalReplacementCost : IfcCostValue;\n\tOwner : IfcActorSelect;\n\tUser : IfcActorSelect;\n\tResponsiblePerson : IfcPerson;\n\tIncorporationDate : IfcCalendarDate;\n\tDepreciatedValue : IfcCostValue;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcGroup.IsGroupedBy.RelatedObjects | NOT('IFC2X2_FINAL.IFCELEMENT' IN TYPEOF(Temp)))) = 0;\nEND_ENTITY;\n\nENTITY IfcAsymmetricIShapeProfileDef\n SUBTYPE OF (IfcIShapeProfileDef);\n\tTopFlangeWidth : IfcPositiveLengthMeasure;\n\tTopFlangeThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTopFlangeFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tCentreOfGravityInY : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcAxis1Placement\n SUBTYPE OF (IfcPlacement);\n\tAxis : OPTIONAL IfcDirection;\n DERIVE\n\tZ : IfcDirection := NVL (IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n WHERE\n\tWR1 : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);\n\tWR2 : SELF\\IfcPlacement.Location.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcAxis2Placement2D\n SUBTYPE OF (IfcPlacement);\n\tRefDirection : OPTIONAL IfcDirection;\n DERIVE\n\tP : LIST [2:2] OF IfcDirection := IfcBuild2Axes(RefDirection);\n WHERE\n\tWR1 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 2);\n\tWR2 : SELF\\IfcPlacement.Location.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcAxis2Placement3D\n SUBTYPE OF (IfcPlacement);\n\tAxis : OPTIONAL IfcDirection;\n\tRefDirection : OPTIONAL IfcDirection;\n DERIVE\n\tP : LIST [3:3] OF IfcDirection := IfcBuildAxes(Axis, RefDirection);\n WHERE\n\tWR1 : SELF\\IfcPlacement.Location.Dim = 3;\n\tWR2 : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);\n\tWR3 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 3);\n\tWR4 : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0);\n\tWR5 : NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection)));\nEND_ENTITY;\n\nENTITY IfcBSplineCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBezierCurve))\n SUBTYPE OF (IfcBoundedCurve);\n\tDegree : INTEGER;\n\tControlPointsList : LIST [2:?] OF IfcCartesianPoint;\n\tCurveForm : IfcBSplineCurveForm;\n\tClosedCurve : LOGICAL;\n\tSelfIntersect : LOGICAL;\n DERIVE\n\tControlPoints : ARRAY [0:255] OF IfcCartesianPoint := IfcListToArray(ControlPointsList,0,UpperIndexOnControlPoints);\n\tUpperIndexOnControlPoints : INTEGER := (SIZEOF(ControlPointsList) - 1);\n WHERE\n\tWR41 : SIZEOF(QUERY(Temp <* ControlPointsList |\n               Temp.Dim <> ControlPointsList[1].Dim))\n             = 0;\nEND_ENTITY;\n\nENTITY IfcBeam\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcBeamType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcBeamTypeEnum;\nEND_ENTITY;\n\nENTITY IfcBezierCurve\n SUPERTYPE OF (ONEOF\n\t(IfcRationalBezierCurve))\n SUBTYPE OF (IfcBSplineCurve);\nEND_ENTITY;\n\nENTITY IfcBoilerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcBoilerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcBooleanClippingResult\n SUBTYPE OF (IfcBooleanResult);\n WHERE\n\tWR1 : ('IFC2X2_FINAL.IFCSWEPTAREASOLID' IN TYPEOF(FirstOperand)) OR ('IFC2X2_FINAL.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(FirstOperand));\n\tWR2 : ('IFC2X2_FINAL.IFCHALFSPACESOLID' IN TYPEOF(SecondOperand));\n\tWR3 : Operator = DIFFERENCE;\nEND_ENTITY;\n\nENTITY IfcBooleanResult\n SUPERTYPE OF (ONEOF\n\t(IfcBooleanClippingResult))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOperator : IfcBooleanOperator;\n\tFirstOperand : IfcBooleanOperand;\n\tSecondOperand : IfcBooleanOperand;\n DERIVE\n\tDim : IfcDimensionCount := FirstOperand.Dim;\n WHERE\n\tWR1 : FirstOperand.Dim = SecondOperand.Dim;\nEND_ENTITY;\n\nENTITY IfcBoundaryCondition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBoundaryEdgeCondition\n\t,IfcBoundaryFaceCondition\n\t,IfcBoundaryNodeCondition));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcBoundaryEdgeCondition\n SUBTYPE OF (IfcBoundaryCondition);\n\tLinearStiffnessByLengthX : OPTIONAL IfcModulusOfLinearSubgradeReactionMeasure;\n\tLinearStiffnessByLengthY : OPTIONAL IfcModulusOfLinearSubgradeReactionMeasure;\n\tLinearStiffnessByLengthZ : OPTIONAL IfcModulusOfLinearSubgradeReactionMeasure;\n\tRotationalStiffnessByLengthX : OPTIONAL IfcModulusOfRotationalSubgradeReactionMeasure;\n\tRotationalStiffnessByLengthY : OPTIONAL IfcModulusOfRotationalSubgradeReactionMeasure;\n\tRotationalStiffnessByLengthZ : OPTIONAL IfcModulusOfRotationalSubgradeReactionMeasure;\nEND_ENTITY;\n\nENTITY IfcBoundaryFaceCondition\n SUBTYPE OF (IfcBoundaryCondition);\n\tLinearStiffnessByAreaX : OPTIONAL IfcModulusOfSubgradeReactionMeasure;\n\tLinearStiffnessByAreaY : OPTIONAL IfcModulusOfSubgradeReactionMeasure;\n\tLinearStiffnessByAreaZ : OPTIONAL IfcModulusOfSubgradeReactionMeasure;\nEND_ENTITY;\n\nENTITY IfcBoundaryNodeCondition\n SUPERTYPE OF (ONEOF\n\t(IfcBoundaryNodeConditionWarping))\n SUBTYPE OF (IfcBoundaryCondition);\n\tLinearStiffnessX : OPTIONAL IfcLinearStiffnessMeasure;\n\tLinearStiffnessY : OPTIONAL IfcLinearStiffnessMeasure;\n\tLinearStiffnessZ : OPTIONAL IfcLinearStiffnessMeasure;\n\tRotationalStiffnessX : OPTIONAL IfcRotationalStiffnessMeasure;\n\tRotationalStiffnessY : OPTIONAL IfcRotationalStiffnessMeasure;\n\tRotationalStiffnessZ : OPTIONAL IfcRotationalStiffnessMeasure;\nEND_ENTITY;\n\nENTITY IfcBoundaryNodeConditionWarping\n SUBTYPE OF (IfcBoundaryNodeCondition);\n\tWarpingStiffness : OPTIONAL IfcWarpingMomentMeasure;\nEND_ENTITY;\n\nENTITY IfcBoundedCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBSplineCurve\n\t,IfcCompositeCurve\n\t,IfcPolyline\n\t,IfcTrimmedCurve))\n SUBTYPE OF (IfcCurve);\nEND_ENTITY;\n\nENTITY IfcBoundedSurface\n SUPERTYPE OF (ONEOF\n\t(IfcCurveBoundedPlane\n\t,IfcRectangularTrimmedSurface))\n SUBTYPE OF (IfcSurface);\nEND_ENTITY;\n\nENTITY IfcBoundingBox\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tCorner : IfcCartesianPoint;\n\tXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\n\tZDim : IfcPositiveLengthMeasure;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcBoxedHalfSpace\n SUBTYPE OF (IfcHalfSpaceSolid);\n\tEnclosure : IfcBoundingBox;\n WHERE\n\tWR1 : NOT ('IFC2X2_FINAL.IFCCURVEBOUNDEDPLANE' IN TYPEOF(SELF\\IfcHalfSpaceSolid.BaseSurface));\nEND_ENTITY;\n\nENTITY IfcBuilding\n SUBTYPE OF (IfcSpatialStructureElement);\n\tElevationOfRefHeight : OPTIONAL IfcLengthMeasure;\n\tElevationOfTerrain : OPTIONAL IfcLengthMeasure;\n\tBuildingAddress : OPTIONAL IfcPostalAddress;\nEND_ENTITY;\n\nENTITY IfcBuildingElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBeam\n\t,IfcBuildingElementComponent\n\t,IfcBuildingElementProxy\n\t,IfcColumn\n\t,IfcCovering\n\t,IfcCurtainWall\n\t,IfcDoor\n\t,IfcFooting\n\t,IfcMember\n\t,IfcPile\n\t,IfcRailing\n\t,IfcRamp\n\t,IfcRampFlight\n\t,IfcRoof\n\t,IfcSlab\n\t,IfcStair\n\t,IfcStairFlight\n\t,IfcWall\n\t,IfcWindow))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcBuildingElementComponent\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuildingElementPart\n\t,IfcPlate\n\t,IfcReinforcingElement))\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcBuildingElementComponentType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPlateType))\n SUBTYPE OF (IfcBuildingElementType);\nEND_ENTITY;\n\nENTITY IfcBuildingElementPart\n SUBTYPE OF (IfcBuildingElementComponent);\nEND_ENTITY;\n\nENTITY IfcBuildingElementProxy\n SUBTYPE OF (IfcBuildingElement);\n\tCompositionType : OPTIONAL IfcElementCompositionEnum;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcBuildingElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBeamType\n\t,IfcBuildingElementComponentType\n\t,IfcColumnType\n\t,IfcCoveringType\n\t,IfcMemberType\n\t,IfcRailingType\n\t,IfcRampFlightType\n\t,IfcSlabType\n\t,IfcStairFlightType\n\t,IfcWallType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcBuildingStorey\n SUBTYPE OF (IfcSpatialStructureElement);\n\tElevation : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tWidth : IfcPositiveLengthMeasure;\n\tWallThickness : IfcPositiveLengthMeasure;\n\tGirth : IfcPositiveLengthMeasure;\n\tInternalFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tCentreOfGravityInX : IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : Girth < (Depth / 2);\n\tWR2 : NOT(EXISTS(InternalFilletRadius)) OR\n            ((InternalFilletRadius <= Width/2) AND (InternalFilletRadius <= Depth/2));\n\tWR3 : (WallThickness < Width/2) AND (WallThickness < Depth/2);\nEND_ENTITY;\n\nENTITY IfcCableCarrierFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcCableCarrierFittingTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcCableCarrierFittingTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcCableCarrierFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCableCarrierSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcCableCarrierSegmentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCableSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcCableSegmentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCalendarDate;\n\tDayComponent : IfcDayInMonthNumber;\n\tMonthComponent : IfcMonthInYearNumber;\n\tYearComponent : IfcYearNumber;\n WHERE\n\tWR21 : IfcValidCalendarDate (SELF);\nEND_ENTITY;\n\nENTITY IfcCartesianPoint\n SUBTYPE OF (IfcPoint);\n\tCoordinates : LIST [1:3] OF IfcLengthMeasure;\n DERIVE\n\tDim : IfcDimensionCount := HIINDEX(Coordinates);\n WHERE\n\tWR1 : HIINDEX(Coordinates) >= 2;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCartesianTransformationOperator2D\n\t,IfcCartesianTransformationOperator3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tAxis1 : OPTIONAL IfcDirection;\n\tAxis2 : OPTIONAL IfcDirection;\n\tLocalOrigin : IfcCartesianPoint;\n\tScale : OPTIONAL REAL;\n DERIVE\n\tScl : REAL := NVL(Scale, 1.0);\n\tDim : IfcDimensionCount := LocalOrigin.Dim;\n WHERE\n\tWR1 : Scl > 0.0;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator2D\n SUPERTYPE OF (ONEOF\n\t(IfcCartesianTransformationOperator2DnonUniform))\n SUBTYPE OF (IfcCartesianTransformationOperator);\n DERIVE\n\tU : LIST [2:2] OF IfcDirection := IfcBaseAxis(2,SELF\\IfcCartesianTransformationOperator.Axis1,\n          SELF\\IfcCartesianTransformationOperator.Axis2,?);\n WHERE\n\tWR1 : SELF\\IfcCartesianTransformationOperator.Dim = 2;\n\tWR2 : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis1)) OR \n            (SELF\\IfcCartesianTransformationOperator.Axis1.Dim = 2);\n\tWR3 : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis2)) OR \n            (SELF\\IfcCartesianTransformationOperator.Axis2.Dim = 2);\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator2DnonUniform\n SUBTYPE OF (IfcCartesianTransformationOperator2D);\n\tScale2 : OPTIONAL REAL;\n DERIVE\n\tScl2 : REAL := NVL(Scale2, SELF\\IfcCartesianTransformationOperator.Scl);\n WHERE\n\tWR1 : Scl2 > 0.0;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator3D\n SUPERTYPE OF (ONEOF\n\t(IfcCartesianTransformationOperator3DnonUniform))\n SUBTYPE OF (IfcCartesianTransformationOperator);\n\tAxis3 : OPTIONAL IfcDirection;\n DERIVE\n\tU : LIST [3:3] OF IfcDirection := IfcBaseAxis(3,SELF\\IfcCartesianTransformationOperator.Axis1,\n              SELF\\IfcCartesianTransformationOperator.Axis2,Axis3);\n WHERE\n\tWR1 : SELF\\IfcCartesianTransformationOperator.Dim = 3;\n\tWR2 : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis1)) OR \n            (SELF\\IfcCartesianTransformationOperator.Axis1.Dim = 3);\n\tWR3 : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis2)) OR \n            (SELF\\IfcCartesianTransformationOperator.Axis2.Dim = 3);\n\tWR4 : NOT(EXISTS(Axis3)) OR (Axis3.Dim = 3);\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator3DnonUniform\n SUBTYPE OF (IfcCartesianTransformationOperator3D);\n\tScale2 : OPTIONAL REAL;\n\tScale3 : OPTIONAL REAL;\n DERIVE\n\tScl2 : REAL := NVL(Scale2, SELF\\IfcCartesianTransformationOperator.Scl);\n\tScl3 : REAL := NVL(Scale3, SELF\\IfcCartesianTransformationOperator.Scl);\n WHERE\n\tWR1 : Scl2 > 0.0;\n\tWR2 : Scl3 > 0.0;\nEND_ENTITY;\n\nENTITY IfcChamferEdgeFeature\n SUBTYPE OF (IfcEdgeFeature);\n\tWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tHeight : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcChillerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcChillerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCircle\n SUBTYPE OF (IfcConic);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCircleHollowProfileDef\n SUBTYPE OF (IfcCircleProfileDef);\n\tWallThickness : IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : WallThickness < SELF\\IfcCircleProfileDef.Radius;\nEND_ENTITY;\n\nENTITY IfcCircleProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcCircleHollowProfileDef))\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcClassification;\n\tSource : IfcLabel;\n\tEdition : IfcLabel;\n\tEditionDate : OPTIONAL IfcCalendarDate;\n\tName : IfcLabel;\n INVERSE\n\tContains : SET [0:?] OF IfcClassificationItem FOR ItemOf;\nEND_ENTITY;\n\nENTITY IfcClassificationItem;\n\tNotation : IfcClassificationNotationFacet;\n\tItemOf : OPTIONAL IfcClassification;\n\tTitle : IfcLabel;\n INVERSE\n\tIsClassifiedItemIn : SET [0:1] OF IfcClassificationItemRelationship FOR RelatedItems;\n\tIsClassifyingItemIn : SET [0:1] OF IfcClassificationItemRelationship FOR RelatingItem;\nEND_ENTITY;\n\nENTITY IfcClassificationItemRelationship;\n\tRelatingItem : IfcClassificationItem;\n\tRelatedItems : SET [1:?] OF IfcClassificationItem;\nEND_ENTITY;\n\nENTITY IfcClassificationNotation;\n\tNotationFacets : SET [1:?] OF IfcClassificationNotationFacet;\nEND_ENTITY;\n\nENTITY IfcClassificationNotationFacet;\n\tNotationValue : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcClassificationReference\n SUBTYPE OF (IfcExternalReference);\n\tReferencedSource : OPTIONAL IfcClassification;\nEND_ENTITY;\n\nENTITY IfcClosedShell\n SUBTYPE OF (IfcConnectedFaceSet);\nEND_ENTITY;\n\nENTITY IfcCoilType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCoilTypeEnum;\nEND_ENTITY;\n\nENTITY IfcColourRgb\n SUBTYPE OF (IfcColourSpecification);\n\tRed : IfcNormalisedRatioMeasure;\n\tGreen : IfcNormalisedRatioMeasure;\n\tBlue : IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcColourSpecification\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcColourRgb));\nEND_ENTITY;\n\nENTITY IfcColumn\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcColumnType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcColumnTypeEnum;\nEND_ENTITY;\n\nENTITY IfcComplexProperty\n SUBTYPE OF (IfcProperty);\n\tUsageName : IfcIdentifier;\n\tHasProperties : SET [1:?] OF IfcProperty;\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* HasProperties | SELF :=: temp)) = 0;\n\tWR22 : IfcUniquePropertyName(HasProperties);\nEND_ENTITY;\n\nENTITY IfcCompositeCurve\n SUPERTYPE OF (ONEOF\n\t(Ifc2DCompositeCurve))\n SUBTYPE OF (IfcBoundedCurve);\n\tSegments : LIST [1:?] OF IfcCompositeCurveSegment;\n\tSelfIntersect : LOGICAL;\n DERIVE\n\tNSegments : INTEGER := SIZEOF(Segments);\n\tClosedCurve : LOGICAL := Segments[NSegments].Transition <> Discontinuous;\n WHERE\n\tWR41 : ((NOT ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 1)) OR ((ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 0));\n\tWR42 : SIZEOF( QUERY( Temp <* Segments | Temp.Dim <> Segments[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcCompositeCurveSegment\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tTransition : IfcTransitionCode;\n\tSameSense : BOOLEAN;\n\tParentCurve : IfcCurve;\n DERIVE\n\tDim : IfcDimensionCount := ParentCurve.Dim;\n INVERSE\n\tUsingCurves : SET [1:?] OF IfcCompositeCurve FOR Segments;\n WHERE\n\tWR1 : ('IFC2X2_FINAL.IFCBOUNDEDCURVE' IN TYPEOF(ParentCurve));\nEND_ENTITY;\n\nENTITY IfcCompositeProfileDef\n SUBTYPE OF (IfcProfileDef);\n\tProfiles : SET [2:?] OF IfcProfileDef;\n\tLabel : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* Profiles | temp.ProfileType <> Profiles[1].ProfileType)) = 0;\n\tWR2 : SIZEOF(QUERY(temp <* Profiles | 'IFC2X2_FINAL.IFCCOMPOSITEPROFILEDEF' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcCompressorType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcCompressorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCondenserType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCondenserTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCondition\n SUBTYPE OF (IfcGroup);\nEND_ENTITY;\n\nENTITY IfcConditionCriterion\n SUBTYPE OF (IfcControl);\n\tCriterion : IfcConditionCriterionSelect;\n\tCriterionDateTime : IfcDateTimeSelect;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcConic\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCircle\n\t,IfcEllipse))\n SUBTYPE OF (IfcCurve);\n\tPosition : IfcAxis2Placement;\nEND_ENTITY;\n\nENTITY IfcConnectedFaceSet\n SUPERTYPE OF (ONEOF\n\t(IfcClosedShell\n\t,IfcOpenShell))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tCfsFaces : SET [1:?] OF IfcFace;\nEND_ENTITY;\n\nENTITY IfcConnectionCurveGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tCurveOnRelatingElement : IfcBoundedCurve;\n\tCurveOnRelatedElement : OPTIONAL IfcBoundedCurve;\nEND_ENTITY;\n\nENTITY IfcConnectionGeometry\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConnectionCurveGeometry\n\t,IfcConnectionPointGeometry\n\t,IfcConnectionPortGeometry\n\t,IfcConnectionSurfaceGeometry));\nEND_ENTITY;\n\nENTITY IfcConnectionPointGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tPointOnRelatingElement : IfcPoint;\n\tPointOnRelatedElement : OPTIONAL IfcPoint;\nEND_ENTITY;\n\nENTITY IfcConnectionPortGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tLocationAtRelatingElement : IfcAxis2Placement;\n\tLocationAtRelatedElement : OPTIONAL IfcAxis2Placement;\n\tProfileOfPort : IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcConnectionSurfaceGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tSurfaceOnRelatingElement : IfcSurface;\n\tSurfaceOnRelatedElement : OPTIONAL IfcSurface;\nEND_ENTITY;\n\nENTITY IfcConstraint\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcMetric\n\t,IfcObjective));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tConstraintGrade : IfcConstraintEnum;\n\tConstraintSource : OPTIONAL IfcLabel;\n\tCreatingActor : OPTIONAL IfcActorSelect;\n\tCreationTime : OPTIONAL IfcDateTimeSelect;\n\tUserDefinedGrade : OPTIONAL IfcLabel;\n INVERSE\n\tClassifiedAs : SET [0:?] OF IfcConstraintClassificationRelationship FOR ClassifiedConstraint;\n\tRelatesConstraints : SET [0:?] OF IfcConstraintRelationship FOR RelatingConstraint;\n\tIsRelatedWith : SET [0:?] OF IfcConstraintRelationship FOR RelatedConstraints;\n\tPropertiesForConstraint : SET [0:?] OF IfcPropertyConstraintRelationship FOR RelatingConstraint;\n\tAggregates : SET [0:?] OF IfcConstraintAggregationRelationship FOR RelatingConstraint;\n\tIsAggregatedIn : SET [0:?] OF IfcConstraintAggregationRelationship FOR RelatedConstraints;\n WHERE\n\tWR11 : (ConstraintGrade <> IfcConstraintEnum.USERDEFINED) OR\n             ((ConstraintGrade = IfcConstraintEnum.USERDEFINED) AND EXISTS(SELF\\IfcConstraint.UserDefinedGrade));\nEND_ENTITY;\n\nENTITY IfcConstraintAggregationRelationship;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRelatingConstraint : IfcConstraint;\n\tRelatedConstraints : LIST [1:?] OF UNIQUE IfcConstraint;\n\tLogicalAggregator : IfcLogicalOperatorEnum;\n WHERE\n\tWR11 : SIZEOF(QUERY(temp <* RelatedConstraints | \n               temp :=: RelatingConstraint\n               )) = 0;\nEND_ENTITY;\n\nENTITY IfcConstraintClassificationRelationship;\n\tClassifiedConstraint : IfcConstraint;\n\tRelatedClassifications : SET [1:?] OF IfcClassificationNotationSelect;\nEND_ENTITY;\n\nENTITY IfcConstraintRelationship;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRelatingConstraint : IfcConstraint;\n\tRelatedConstraints : SET [1:?] OF IfcConstraint;\n WHERE\n\tWR11 : SIZEOF(QUERY(temp <* RelatedConstraints | temp :=: RelatingConstraint )) = 0;\nEND_ENTITY;\n\nENTITY IfcConstructionEquipmentResource\n SUBTYPE OF (IfcConstructionResource);\nEND_ENTITY;\n\nENTITY IfcConstructionMaterialResource\n SUBTYPE OF (IfcConstructionResource);\n\tSuppliers : OPTIONAL SET [1:?] OF IfcActorSelect;\n\tUsageRatio : OPTIONAL IfcRatioMeasure;\n WHERE\n\tWR1 : SIZEOF(SELF\\IfcResource.ResourceOf) <=1;\n\tWR2 : NOT(EXISTS(SELF\\IfcResource.ResourceOf[1])) OR\n            (SELF\\IfcResource.ResourceOf[1].RelatedObjectsType = IfcObjectTypeEnum.PRODUCT);\nEND_ENTITY;\n\nENTITY IfcConstructionProductResource\n SUBTYPE OF (IfcConstructionResource);\n WHERE\n\tWR1 : SIZEOF(SELF\\IfcResource.ResourceOf) <=1;\n\tWR2 : NOT(EXISTS(SELF\\IfcResource.ResourceOf[1])) OR\n            (SELF\\IfcResource.ResourceOf[1].RelatedObjectsType = IfcObjectTypeEnum.PRODUCT);\nEND_ENTITY;\n\nENTITY IfcConstructionResource\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConstructionEquipmentResource\n\t,IfcConstructionMaterialResource\n\t,IfcConstructionProductResource\n\t,IfcCrewResource\n\t,IfcLaborResource\n\t,IfcSubContractResource))\n SUBTYPE OF (IfcResource);\n\tResourceIdentifier : OPTIONAL IfcIdentifier;\n\tResourceGroup : OPTIONAL IfcLabel;\n\tResourceConsumption : OPTIONAL IfcResourceConsumptionEnum;\n\tBaseQuantity : OPTIONAL IfcMeasureWithUnit;\nEND_ENTITY;\n\nENTITY IfcContextDependentUnit\n SUBTYPE OF (IfcNamedUnit);\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcControl\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcActionRequest\n\t,IfcConditionCriterion\n\t,IfcCostItem\n\t,IfcCostSchedule\n\t,IfcEquipmentStandard\n\t,IfcFurnitureStandard\n\t,IfcPerformanceHistory\n\t,IfcPermit\n\t,IfcProjectOrder\n\t,IfcProjectOrderRecord\n\t,IfcScheduleTimeControl\n\t,IfcServiceLife\n\t,IfcSpaceProgram\n\t,IfcTimeSeriesSchedule\n\t,IfcWorkControl))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tControls : SET [0:?] OF IfcRelAssignsToControl FOR RelatingControl;\nEND_ENTITY;\n\nENTITY IfcControllerType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcControllerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcConversionBasedUnit\n SUBTYPE OF (IfcNamedUnit);\n\tName : IfcLabel;\n\tConversionFactor : IfcMeasureWithUnit;\nEND_ENTITY;\n\nENTITY IfcCooledBeamType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCooledBeamTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCoolingTowerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCoolingTowerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCoordinatedUniversalTimeOffset;\n\tHourOffset : IfcHourInDay;\n\tMinuteOffset : OPTIONAL IfcMinuteInHour;\n\tSense : IfcAheadOrBehind;\nEND_ENTITY;\n\nENTITY IfcCostItem\n SUBTYPE OF (IfcControl);\nEND_ENTITY;\n\nENTITY IfcCostSchedule\n SUBTYPE OF (IfcControl);\n\tSubmittedBy : OPTIONAL IfcActorSelect;\n\tPreparedBy : OPTIONAL IfcActorSelect;\n\tSubmittedOn : OPTIONAL IfcDateTimeSelect;\n\tStatus : OPTIONAL IfcLabel;\n\tTargetUsers : OPTIONAL SET [1:?] OF IfcActorSelect;\n\tUpdateDate : OPTIONAL IfcDateTimeSelect;\n\tID : IfcIdentifier;\n\tPredefinedType : IfcCostScheduleTypeEnum;\n UNIQUE\n\tUR2 : ID;\nEND_ENTITY;\n\nENTITY IfcCostValue\n SUBTYPE OF (IfcAppliedValue);\n\tCostType : IfcLabel;\n\tCondition : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcCovering\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcCoveringTypeEnum;\n INVERSE\n\tCovers : SET [0:1] OF IfcRelCoversBldgElements FOR RelatedCoverings;\nEND_ENTITY;\n\nENTITY IfcCoveringType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcCoveringTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCraneRailAShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tOverallHeight : IfcPositiveLengthMeasure;\n\tBaseWidth2 : IfcPositiveLengthMeasure;\n\tRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tHeadWidth : IfcPositiveLengthMeasure;\n\tHeadDepth2 : IfcPositiveLengthMeasure;\n\tHeadDepth3 : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tBaseWidth4 : IfcPositiveLengthMeasure;\n\tBaseDepth1 : IfcPositiveLengthMeasure;\n\tBaseDepth2 : IfcPositiveLengthMeasure;\n\tBaseDepth3 : IfcPositiveLengthMeasure;\n\tCentreOfGravityInY : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCraneRailFShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tOverallHeight : IfcPositiveLengthMeasure;\n\tHeadWidth : IfcPositiveLengthMeasure;\n\tRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tHeadDepth2 : IfcPositiveLengthMeasure;\n\tHeadDepth3 : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tBaseDepth1 : IfcPositiveLengthMeasure;\n\tBaseDepth2 : IfcPositiveLengthMeasure;\n\tCentreOfGravityInY : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCrewResource\n SUBTYPE OF (IfcConstructionResource);\nEND_ENTITY;\n\nENTITY IfcCsgSolid\n SUBTYPE OF (IfcSolidModel);\n\tTreeRootExpression : IfcCsgSelect;\nEND_ENTITY;\n\nENTITY IfcCurrencyRelationship;\n\tRelatingMonetaryUnit : IfcMonetaryUnit;\n\tRelatedMonetaryUnit : IfcMonetaryUnit;\n\tExchangeRate : IfcPositiveRatioMeasure;\n\tRateDateTime : IfcDateAndTime;\n\tRateSource : OPTIONAL IfcLibraryInformation;\nEND_ENTITY;\n\nENTITY IfcCurtainWall\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBoundedCurve\n\t,IfcConic\n\t,IfcLine\n\t,IfcOffsetCurve2D\n\t,IfcOffsetCurve3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\tDim : IfcDimensionCount := IfcCurveDim(SELF);\nEND_ENTITY;\n\nENTITY IfcCurveBoundedPlane\n SUBTYPE OF (IfcBoundedSurface);\n\tBasisSurface : IfcPlane;\n\tOuterBoundary : IfcCurve;\n\tInnerBoundaries : SET [0:?] OF IfcCurve;\n DERIVE\n\tDim : IfcDimensionCount := BasisSurface.Dim;\nEND_ENTITY;\n\nENTITY IfcCurveStyle;\n\tName : IfcLabel;\n\tCurveFont : OPTIONAL IfcCurveFontOrScaledCurveFontSelect;\n\tCurveWidth : OPTIONAL IfcSizeSelect;\n\tCurveColour : OPTIONAL IfcColour;\nEND_ENTITY;\n\nENTITY IfcCurveStyleFont;\n\tName : OPTIONAL IfcLabel;\n\tPatternList : LIST [1:?] OF IfcCurveStyleFontPattern;\nEND_ENTITY;\n\nENTITY IfcCurveStyleFontAndScaling;\n\tName : OPTIONAL IfcLabel;\n\tCurveFont : IfcCurveStyleFontSelect;\n\tCurveFontScaling : IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcCurveStyleFontPattern;\n\tVisibleSegmentLength : IfcPositiveLengthMeasure;\n\tInvisibleSegmentLength : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcDamperType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcDamperTypeEnum;\nEND_ENTITY;\n\nENTITY IfcDateAndTime;\n\tDateComponent : IfcCalendarDate;\n\tTimeComponent : IfcLocalTime;\nEND_ENTITY;\n\nENTITY IfcDefinedSymbol\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tDefinition : IfcDefinedSymbolSelect;\n\tTarget : IfcCartesianTransformationOperator2D;\nEND_ENTITY;\n\nENTITY IfcDerivedProfileDef\n SUBTYPE OF (IfcProfileDef);\n\tParentProfile : IfcProfileDef;\n\tOperator : IfcCartesianTransformationOperator2D;\n\tLabel : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : SELF\\IfcProfileDef.ProfileType = ParentProfile.ProfileType;\nEND_ENTITY;\n\nENTITY IfcDerivedUnit;\n\tElements : SET [1:?] OF IfcDerivedUnitElement;\n\tUnitType : IfcDerivedUnitEnum;\n\tUserDefinedType : OPTIONAL IfcLabel;\n DERIVE\n\tDimensions : IfcDimensionalExponents := IfcDeriveDimensionalExponents(SELF);\n WHERE\n\tWR1 : (SIZEOF (Elements) > 1) OR ((SIZEOF (Elements) = 1) AND (Elements[1].Exponent <> 1 ));\n\tWR2 : (UnitType <> IfcDerivedUnitEnum.USERDEFINED) OR\n            ((UnitType = IfcDerivedUnitEnum.USERDEFINED) AND \n             (EXISTS(SELF.UserDefinedType)));\nEND_ENTITY;\n\nENTITY IfcDerivedUnitElement;\n\tUnit : IfcNamedUnit;\n\tExponent : INTEGER;\nEND_ENTITY;\n\nENTITY IfcDiameterDimension\n SUBTYPE OF (IfcDimensionCurveDirectedCallout);\nEND_ENTITY;\n\nENTITY IfcDimensionCalloutRelationship\n SUBTYPE OF (IfcDraughtingCalloutRelationship);\n WHERE\n\tWR21 : SELF\\IfcDraughtingCalloutRelationship.Name IN ['primary','secondary'];\n\tWR22 : SIZEOF(TYPEOF(SELF\\IfcDraughtingCalloutRelationship.RelatingDraughtingCallout) * [\n                  'IFC2X2_FINAL.IFCANGULARDIMENSION',\n                  'IFC2X2_FINAL.IFCDIAMETERDIMENSION',\n                  'IFC2X2_FINAL.IFCLINEARDIMENSION',\n                  'IFC2X2_FINAL.IFCRADIUSDIMENSION']) = 1;\n\tWR23 : NOT ('IFC2X2_FINAL.IFCDIMENSIONCURVEDIRECTEDCALLOUT'\n               IN TYPEOF (SELF\\IfcDraughtingCalloutRelationship.RelatedDraughtingCallout));\nEND_ENTITY;\n\nENTITY IfcDimensionCurve\n SUBTYPE OF (IfcAnnotationCurveOccurrence);\n INVERSE\n\tAnnotatedBySymbols : SET [0:2] OF IfcTerminatorSymbol FOR AnnotatedCurve;\n WHERE\n\tWR51 : SIZEOF(USEDIN(SELF,'IFC2X2_FINAL.' + \n                   'IFCDRAUGHTINGCALLOUT.CONTENTS')) \n                   >= 1;\n\tWR52 : (SIZEOF(QUERY (Dct1 <* AnnotatedBySymbols | (Dct1.Role = ORIGIN))) <= 1) \n             AND \n             (SIZEOF(QUERY (Dct2 <* AnnotatedBySymbols | (Dct2.Role = TARGET))) <= 1);\n\tWR53 : SIZEOF(QUERY (Dct <* AnnotatedBySymbols | \n               NOT('IFC2X2_FINAL.IFCDIMENSIONCURVETERMINATOR' IN TYPEOF(Dct)))) \n               = 0;\nEND_ENTITY;\n\nENTITY IfcDimensionCurveDirectedCallout\n SUPERTYPE OF (ONEOF\n\t(IfcAngularDimension\n\t,IfcDiameterDimension\n\t,IfcLinearDimension\n\t,IfcRadiusDimension))\n SUBTYPE OF (IfcDraughtingCallout);\n WHERE\n\tWR41 : SIZEOF(QUERY (Dc <* SELF\\IfcDraughtingCallout.Contents | (\n                   'IFC2X2_FINAL.IFCDIMENSIONCURVE' IN TYPEOF(Dc)))) \n                  = 1;\n\tWR42 : SIZEOF (QUERY (Dc <* SELF.contents |\n                    ('IFC2X2_FINAL.IFCPROJECTIONCURVE' IN\n                      TYPEOF (Dc)))) <= 2;\nEND_ENTITY;\n\nENTITY IfcDimensionCurveTerminator\n SUBTYPE OF (IfcTerminatorSymbol);\n\tRole : IfcDimensionExtentUsage;\n WHERE\n\tWR61 : 'IFC2X2_FINAL.IFCDIMENSIONCURVE' IN TYPEOF\n             (SELF\\IfcTerminatorSymbol.AnnotatedCurve);\nEND_ENTITY;\n\nENTITY IfcDimensionalExponents;\n\tLengthExponent : INTEGER;\n\tMassExponent : INTEGER;\n\tTimeExponent : INTEGER;\n\tElectricCurrentExponent : INTEGER;\n\tThermodynamicTemperatureExponent : INTEGER;\n\tAmountOfSubstanceExponent : INTEGER;\n\tLuminousIntensityExponent : INTEGER;\nEND_ENTITY;\n\nENTITY IfcDirection\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tDirectionRatios : LIST [2:3] OF REAL;\n DERIVE\n\tDim : IfcDimensionCount := HIINDEX(DirectionRatios);\nEND_ENTITY;\n\nENTITY IfcDiscreteAccessory\n SUBTYPE OF (IfcElementComponent);\nEND_ENTITY;\n\nENTITY IfcDiscreteAccessoryType\n SUPERTYPE OF (ONEOF\n\t(IfcVibrationIsolatorType))\n SUBTYPE OF (IfcElementComponentType);\nEND_ENTITY;\n\nENTITY IfcDistributionChamberElement\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcDistributionChamberElementType\n SUBTYPE OF (IfcDistributionFlowElementType);\n\tPredefinedType : IfcDistributionChamberElementTypeEnum;\nEND_ENTITY;\n\nENTITY IfcDistributionControlElement\n SUBTYPE OF (IfcDistributionElement);\n\tControlElementId : OPTIONAL IfcIdentifier;\n INVERSE\n\tAssignedToFlowElement : SET [0:1] OF IfcRelFlowControlElements FOR RelatedControlElements;\nEND_ENTITY;\n\nENTITY IfcDistributionControlElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcActuatorType\n\t,IfcAlarmType\n\t,IfcControllerType\n\t,IfcFlowInstrumentType\n\t,IfcSensorType))\n SUBTYPE OF (IfcDistributionElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionElement\n SUPERTYPE OF (ONEOF\n\t(IfcDistributionControlElement\n\t,IfcDistributionFlowElement))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcDistributionElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDistributionControlElementType\n\t,IfcDistributionFlowElementType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionFlowElement\n SUPERTYPE OF (ONEOF\n\t(IfcDistributionChamberElement\n\t,IfcEnergyConversionDevice\n\t,IfcFlowController\n\t,IfcFlowFitting\n\t,IfcFlowMovingDevice\n\t,IfcFlowSegment\n\t,IfcFlowStorageDevice\n\t,IfcFlowTerminal\n\t,IfcFlowTreatmentDevice))\n SUBTYPE OF (IfcDistributionElement);\n INVERSE\n\tHasControlElements : SET [0:1] OF IfcRelFlowControlElements FOR RelatingFlowElement;\nEND_ENTITY;\n\nENTITY IfcDistributionFlowElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDistributionChamberElementType\n\t,IfcEnergyConversionDeviceType\n\t,IfcFlowControllerType\n\t,IfcFlowFittingType\n\t,IfcFlowMovingDeviceType\n\t,IfcFlowSegmentType\n\t,IfcFlowStorageDeviceType\n\t,IfcFlowTerminalType\n\t,IfcFlowTreatmentDeviceType))\n SUBTYPE OF (IfcDistributionElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionPort\n SUBTYPE OF (IfcPort);\n\tFlowDirection : OPTIONAL IfcFlowDirectionEnum;\nEND_ENTITY;\n\nENTITY IfcDocumentElectronicFormat;\n\tFileExtension : OPTIONAL IfcLabel;\n\tMimeContentType : OPTIONAL IfcLabel;\n\tMimeSubtype : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS(FileExtension) OR EXISTS(MimeContentType);\nEND_ENTITY;\n\nENTITY IfcDocumentInformation;\n\tDocumentId : IfcIdentifier;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tDocumentReferences : OPTIONAL SET [1:?] OF IfcDocumentReference;\n\tPurpose : OPTIONAL IfcText;\n\tIntendedUse : OPTIONAL IfcText;\n\tScope : OPTIONAL IfcText;\n\tRevision : OPTIONAL IfcLabel;\n\tDocumentOwner : OPTIONAL IfcActorSelect;\n\tEditors : OPTIONAL SET [1:?] OF IfcActorSelect;\n\tCreationTime : OPTIONAL IfcDateAndTime;\n\tLastRevisionTime : OPTIONAL IfcDateAndTime;\n\tElectronicFormat : OPTIONAL IfcDocumentElectronicFormat;\n\tValidFrom : OPTIONAL IfcCalendarDate;\n\tValidUntil : OPTIONAL IfcCalendarDate;\n\tConfidentiality : OPTIONAL IfcDocumentConfidentialityEnum;\n\tStatus : OPTIONAL IfcDocumentStatusEnum;\n INVERSE\n\tIsPointedTo : SET [0:?] OF IfcDocumentInformationRelationship FOR RelatedDocuments;\n\tIsPointer : SET [0:1] OF IfcDocumentInformationRelationship FOR RelatingDocument;\nEND_ENTITY;\n\nENTITY IfcDocumentInformationRelationship;\n\tRelatingDocument : IfcDocumentInformation;\n\tRelatedDocuments : SET [1:?] OF IfcDocumentInformation;\n\tRelationshipType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcDocumentReference\n SUBTYPE OF (IfcExternalReference);\n INVERSE\n\tReferenceToDocument : SET [0:1] OF IfcDocumentInformation FOR DocumentReferences;\n WHERE\n\tWR1 : EXISTS(Name) XOR EXISTS(ReferenceToDocument[1]);\nEND_ENTITY;\n\nENTITY IfcDoor\n SUBTYPE OF (IfcBuildingElement);\n\tOverallHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tOverallWidth : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcDoorLiningProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tLiningDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tLiningThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tThresholdDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tThresholdThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTransomThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTransomOffset : OPTIONAL IfcLengthMeasure;\n\tLiningOffset : OPTIONAL IfcLengthMeasure;\n\tThresholdOffset : OPTIONAL IfcLengthMeasure;\n\tCasingThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tCasingDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n WHERE\n\tWR1 : (EXISTS(LiningDepth) AND EXISTS(LiningThickness)) XOR\n            (NOT(EXISTS(LiningDepth)) AND NOT(EXISTS(LiningThickness)));\n\tWR2 : (EXISTS(ThresholdDepth) AND EXISTS(ThresholdThickness)) XOR\n            (NOT(EXISTS(ThresholdDepth)) AND NOT(EXISTS(ThresholdThickness)));\n\tWR3 : (EXISTS(TransomOffset) AND EXISTS(TransomThickness)) XOR\n            (NOT(EXISTS(TransomOffset)) AND NOT(EXISTS(TransomThickness)));\n\tWR4 : (EXISTS(CasingDepth) AND EXISTS(CasingThickness)) XOR\n            (NOT(EXISTS(CasingDepth)) AND NOT(EXISTS(CasingThickness)));\n\tWR5 : EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1]) AND \n            ('IFC2X2_FINAL.IFCDOORSTYLE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]));\nEND_ENTITY;\n\nENTITY IfcDoorPanelProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tPanelDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tPanelOperation : IfcDoorPanelOperationEnum;\n\tPanelWidth : OPTIONAL IfcNormalisedRatioMeasure;\n\tPanelPosition : IfcDoorPanelPositionEnum;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1]) AND \n            ('IFC2X2_FINAL.IFCDOORSTYLE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]));\nEND_ENTITY;\n\nENTITY IfcDoorStyle\n SUBTYPE OF (IfcTypeProduct);\n\tOperationType : IfcDoorStyleOperationEnum;\n\tConstructionType : IfcDoorStyleConstructionEnum;\n\tParameterTakesPrecedence : BOOLEAN;\n\tSizeable : BOOLEAN;\nEND_ENTITY;\n\nENTITY IfcDraughtingCallout\n SUPERTYPE OF (ONEOF\n\t(IfcDimensionCurveDirectedCallout\n\t,IfcStructuredDimensionCallout))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tContents : SET [1:?] OF IfcDraughtingCalloutElement;\n INVERSE\n\tIsRelatedFromCallout : SET [0:?] OF IfcDraughtingCalloutRelationship FOR RelatedDraughtingCallout;\n\tIsRelatedToCallout : SET [0:?] OF IfcDraughtingCalloutRelationship FOR RelatingDraughtingCallout;\nEND_ENTITY;\n\nENTITY IfcDraughtingCalloutRelationship\n SUPERTYPE OF (ONEOF\n\t(IfcDimensionCalloutRelationship));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRelatingDraughtingCallout : IfcDraughtingCallout;\n\tRelatedDraughtingCallout : IfcDraughtingCallout;\nEND_ENTITY;\n\nENTITY IfcDraughtingPreDefinedColour\n SUBTYPE OF (IfcPreDefinedColour);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['black','red','green','blue','yellow',\n                  'magenta','cyan','white','by layer'];\nEND_ENTITY;\n\nENTITY IfcDraughtingPreDefinedCurveFont\n SUBTYPE OF (IfcPreDefinedCurveFont);\n WHERE\n\tWR31 : SELF\\IfcPredefinedItem.Name IN\n                    ['continuous',\n                     'chain',\n                     'chain double dash',\n                     'dashed',\n                     'dotted',\n                     'by layer'];\nEND_ENTITY;\n\nENTITY IfcDraughtingPreDefinedTextFont\n SUBTYPE OF (IfcPreDefinedTextFont);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['ISO 3098-1 font A','ISO 3098-1 font B'];\nEND_ENTITY;\n\nENTITY IfcDuctFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcDuctFittingTypeEnum;\n WHERE\n\tWR2 : (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcDuctSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcDuctSegmentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcDuctSilencerType\n SUBTYPE OF (IfcFlowTreatmentDeviceType);\n\tPredefinedType : IfcDuctSilencerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcEdge\n SUPERTYPE OF (ONEOF\n\t(IfcEdgeCurve\n\t,IfcOrientedEdge\n\t,IfcSubedge))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tEdgeStart : IfcVertex;\n\tEdgeEnd : IfcVertex;\nEND_ENTITY;\n\nENTITY IfcEdgeCurve\n SUBTYPE OF (IfcEdge);\n\tEdgeGeometry : IfcCurve;\n\tSameSense : BOOLEAN;\nEND_ENTITY;\n\nENTITY IfcEdgeFeature\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcChamferEdgeFeature\n\t,IfcRoundedEdgeFeature))\n SUBTYPE OF (IfcFeatureElementSubtraction);\n\tFeatureLength : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcEdgeLoop\n SUBTYPE OF (IfcLoop);\n\tEdgeList : LIST [1:?] OF IfcOrientedEdge;\n DERIVE\n\tNe : INTEGER := SIZEOF(EdgeList);\n WHERE\n\tWR1 : (EdgeList[1].EdgeStart) :=: (EdgeList[Ne].EdgeEnd);\n\tWR2 : IfcLoopHeadToTail(SELF);\nEND_ENTITY;\n\nENTITY IfcElectricApplianceType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcElectricApplianceTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricDistributionPoint\n SUBTYPE OF (IfcFlowController);\n\tDistributionPointFunction : IfcElectricDistributionPointFunctionEnum;\n\tUserDefinedFunction : OPTIONAL IfcLabel;\n WHERE\n\tWR31 : (DistributionPointFunction <> IfcElectricDistributionPointFunctionEnum.USERDEFINED) OR\n             ((DistributionPointFunction = IfcElectricDistributionPointFunctionEnum.USERDEFINED) AND EXISTS(SELF\\IfcElectricDistributionPoint.UserDefinedFunction));\nEND_ENTITY;\n\nENTITY IfcElectricFlowStorageDeviceType\n SUBTYPE OF (IfcFlowStorageDeviceType);\n\tPredefinedType : IfcElectricFlowStorageDeviceTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricGeneratorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcElectricGeneratorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricHeaterType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcElectricHeaterTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricMotorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcElectricMotorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricTimeControlType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcElectricTimeControlTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricalBaseProperties\n SUBTYPE OF (IfcEnergyProperties);\n\tElectricCurrentType : OPTIONAL IfcElectricCurrentEnum;\n\tInputVoltage : IfcElectricVoltageMeasure;\n\tInputFrequency : IfcFrequencyMeasure;\n\tFullLoadCurrent : OPTIONAL IfcElectricCurrentMeasure;\n\tMinimumCircuitCurrent : OPTIONAL IfcElectricCurrentMeasure;\n\tMaximumPowerInput : OPTIONAL IfcPowerMeasure;\n\tRatedPowerInput : OPTIONAL IfcPowerMeasure;\n\tInputPhase : INTEGER;\nEND_ENTITY;\n\nENTITY IfcElectricalCircuit\n SUBTYPE OF (IfcSystem);\nEND_ENTITY;\n\nENTITY IfcElectricalElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuildingElement\n\t,IfcDistributionElement\n\t,IfcElectricalElement\n\t,IfcElementAssembly\n\t,IfcElementComponent\n\t,IfcEquipmentElement\n\t,IfcFeatureElement\n\t,IfcFurnishingElement\n\t,IfcTransportElement\n\t,IfcVirtualElement))\n SUBTYPE OF (IfcProduct);\n\tTag : OPTIONAL IfcIdentifier;\n INVERSE\n\tFillsVoids : SET [0:1] OF IfcRelFillsElement FOR RelatedBuildingElement;\n\tConnectedTo : SET [0:?] OF IfcRelConnectsElements FOR RelatingElement;\n\tHasCoverings : SET [0:?] OF IfcRelCoversBldgElements FOR RelatingBuildingElement;\n\tHasProjections : SET [0:?] OF IfcRelProjectsElement FOR RelatingElement;\n\tHasPorts : SET [0:?] OF IfcRelConnectsPortToElement FOR RelatedElement;\n\tHasOpenings : SET [0:?] OF IfcRelVoidsElement FOR RelatingBuildingElement;\n\tIsConnectionRealization : SET [0:?] OF IfcRelConnectsWithRealizingElements FOR RealizingElements;\n\tProvidesBoundaries : SET [0:?] OF IfcRelSpaceBoundary FOR RelatedBuildingElement;\n\tConnectedFrom : SET [0:?] OF IfcRelConnectsElements FOR RelatedElement;\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\nEND_ENTITY;\n\nENTITY IfcElementAssembly\n SUBTYPE OF (IfcElement);\n\tAssemblyPlace : OPTIONAL IfcAssemblyPlaceEnum;\n\tPredefinedType : IfcElementAssemblyTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcElementAssemblyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElementAssemblyTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcElementComponent\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDiscreteAccessory\n\t,IfcFastener))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcElementComponentType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDiscreteAccessoryType\n\t,IfcFastenerType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcElementQuantity\n SUBTYPE OF (IfcPropertySetDefinition);\n\tMethodOfMeasurement : OPTIONAL IfcLabel;\n\tQuantities : SET [1:?] OF IfcPhysicalQuantity;\nEND_ENTITY;\n\nENTITY IfcElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuildingElementType\n\t,IfcDistributionElementType\n\t,IfcElementComponentType\n\t,IfcFurnishingElementType\n\t,IfcTransportElementType))\n SUBTYPE OF (IfcTypeProduct);\n\tElementType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcElementarySurface\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPlane))\n SUBTYPE OF (IfcSurface);\n\tPosition : IfcAxis2Placement3D;\n DERIVE\n\tDim : IfcDimensionCount := Position.Dim;\nEND_ENTITY;\n\nENTITY IfcEllipse\n SUBTYPE OF (IfcConic);\n\tSemiAxis1 : IfcPositiveLengthMeasure;\n\tSemiAxis2 : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcEllipseProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tSemiAxis1 : IfcPositiveLengthMeasure;\n\tSemiAxis2 : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcEnergyConversionDevice\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcEnergyConversionDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAirToAirHeatRecoveryType\n\t,IfcBoilerType\n\t,IfcChillerType\n\t,IfcCoilType\n\t,IfcCondenserType\n\t,IfcCooledBeamType\n\t,IfcCoolingTowerType\n\t,IfcElectricGeneratorType\n\t,IfcElectricMotorType\n\t,IfcEvaporativeCoolerType\n\t,IfcEvaporatorType\n\t,IfcHeatExchangerType\n\t,IfcHumidifierType\n\t,IfcMotorConnectionType\n\t,IfcSpaceHeaterType\n\t,IfcTransformerType\n\t,IfcTubeBundleType\n\t,IfcUnitaryEquipmentType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcEnergyProperties\n SUPERTYPE OF (ONEOF\n\t(IfcElectricalBaseProperties))\n SUBTYPE OF (IfcPropertySetDefinition);\n\tEnergySequence : OPTIONAL IfcEnergySequenceEnum;\n\tUserDefinedEnergySequence : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcEnvironmentalImpactValue\n SUBTYPE OF (IfcAppliedValue);\n\tImpactType : IfcLabel;\n\tCategory : IfcEnvironmentalImpactCategoryEnum;\n\tUserDefinedCategory : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : (Category <> IfcEnvironmentalImpactCategoryEnum.USERDEFINED) OR\n            ((Category = IfcEnvironmentalImpactCategoryEnum.USERDEFINED) AND EXISTS(SELF\\IfcEnvironmentalImpactValue.UserDefinedCategory));\nEND_ENTITY;\n\nENTITY IfcEquipmentElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcEquipmentStandard\n SUBTYPE OF (IfcControl);\nEND_ENTITY;\n\nENTITY IfcEvaporativeCoolerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcEvaporativeCoolerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcEvaporatorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcEvaporatorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcExtendedMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tExtendedProperties : SET [1:?] OF IfcProperty;\n\tDescription : OPTIONAL IfcText;\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcExternalReference\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcClassificationReference\n\t,IfcDocumentReference\n\t,IfcExternallyDefinedHatchStyle\n\t,IfcExternallyDefinedSufaceStyle\n\t,IfcExternallyDefinedSymbol\n\t,IfcExternallyDefinedTextFont\n\t,IfcLibraryReference));\n\tLocation : OPTIONAL IfcLabel;\n\tItemReference : OPTIONAL IfcIdentifier;\n\tName : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS(ItemReference) OR EXISTS(Location) OR EXISTS(Name);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedHatchStyle\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedSufaceStyle\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedSymbol\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedTextFont\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExtrudedAreaSolid\n SUBTYPE OF (IfcSweptAreaSolid);\n\tExtrudedDirection : IfcDirection;\n\tDepth : IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : IfcDotProduct(IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcDirection([0.0,0.0,1.0]), SELF.ExtrudedDirection) <> 0.0;\nEND_ENTITY;\n\nENTITY IfcFace\n SUPERTYPE OF (ONEOF\n\t(IfcFaceSurface))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tBounds : SET [1:?] OF IfcFaceBound;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* Bounds | 'IFC2X2_FINAL.IFCFACEOUTERBOUND' IN TYPEOF(temp))) <= 1;\nEND_ENTITY;\n\nENTITY IfcFaceBasedSurfaceModel\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tFbsmFaces : SET [1:?] OF IfcConnectedFaceSet;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcFaceBound\n SUPERTYPE OF (ONEOF\n\t(IfcFaceOuterBound))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tBound : IfcLoop;\n\tOrientation : BOOLEAN;\n WHERE\n\tWR1 : 'IFC2X2_FINAL.IFCPOLYLOOP' IN TYPEOF(Bound);\nEND_ENTITY;\n\nENTITY IfcFaceOuterBound\n SUBTYPE OF (IfcFaceBound);\nEND_ENTITY;\n\nENTITY IfcFaceSurface\n SUBTYPE OF (IfcFace);\n\tFaceSurface : IfcSurface;\n\tSameSense : BOOLEAN;\nEND_ENTITY;\n\nENTITY IfcFacetedBrep\n SUBTYPE OF (IfcManifoldSolidBrep);\nEND_ENTITY;\n\nENTITY IfcFacetedBrepWithVoids\n SUBTYPE OF (IfcManifoldSolidBrep);\n\tVoids : SET [1:?] OF IfcClosedShell;\nEND_ENTITY;\n\nENTITY IfcFailureConnectionCondition\n SUBTYPE OF (IfcStructuralConnectionCondition);\n\tTensionFailureX : OPTIONAL IfcForceMeasure;\n\tTensionFailureY : OPTIONAL IfcForceMeasure;\n\tTensionFailureZ : OPTIONAL IfcForceMeasure;\n\tCompressionFailureX : OPTIONAL IfcForceMeasure;\n\tCompressionFailureY : OPTIONAL IfcForceMeasure;\n\tCompressionFailureZ : OPTIONAL IfcForceMeasure;\nEND_ENTITY;\n\nENTITY IfcFanType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcFanTypeEnum;\nEND_ENTITY;\n\nENTITY IfcFastener\n SUPERTYPE OF (ONEOF\n\t(IfcMechanicalFastener))\n SUBTYPE OF (IfcElementComponent);\nEND_ENTITY;\n\nENTITY IfcFastenerType\n SUPERTYPE OF (ONEOF\n\t(IfcMechanicalFastenerType))\n SUBTYPE OF (IfcElementComponentType);\nEND_ENTITY;\n\nENTITY IfcFeatureElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcFeatureElementAddition\n\t,IfcFeatureElementSubtraction))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcFeatureElementAddition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcProjectionElement))\n SUBTYPE OF (IfcFeatureElement);\n INVERSE\n\tProjectsElements : IfcRelProjectsElement FOR RelatedFeatureElement;\nEND_ENTITY;\n\nENTITY IfcFeatureElementSubtraction\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcEdgeFeature\n\t,IfcOpeningElement))\n SUBTYPE OF (IfcFeatureElement);\n INVERSE\n\tVoidsElements : IfcRelVoidsElement FOR RelatedOpeningElement;\nEND_ENTITY;\n\nENTITY IfcFillAreaStyle;\n\tFillStyles : SET [1:?] OF IfcFillStyleSelect;\n\tName : IfcLabel;\n WHERE\n\tWR11 : SIZEOF(QUERY(Style <* SELF.FillStyles |\n               'IFC2X2_FINAL.IFCCOLOUR' IN\n                TYPEOF(Style)\n               )) <= 1;\nEND_ENTITY;\n\nENTITY IfcFillAreaStyleHatching\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tHatchLineAppearance : IfcCurveStyle;\n\tStartOfNextHatchLine : IfcOneDirectionRepeatFactor;\n\tPointOfReferenceHatchLine : IfcCartesianPoint;\n\tPatternStart : IfcCartesianPoint;\n\tHatchLineAngle : IfcPlaneAngleMeasure;\nEND_ENTITY;\n\nENTITY IfcFillAreaStyleTileSymbolWithStyle\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSymbol : IfcAnnotationSymbolOccurrence;\nEND_ENTITY;\n\nENTITY IfcFillAreaStyleTiles\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tTilingPattern : IfcOneDirectionRepeatFactor;\n\tTiles : SET [1:?] OF IfcFillAreaStyleTileShapeSelect;\n\tTilingScale : IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcFilterType\n SUBTYPE OF (IfcFlowTreatmentDeviceType);\n\tPredefinedType : IfcFilterTypeEnum;\nEND_ENTITY;\n\nENTITY IfcFireSuppressionTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcFireSuppressionTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcFlowController\n SUPERTYPE OF (ONEOF\n\t(IfcElectricDistributionPoint))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowControllerType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAirTerminalBoxType\n\t,IfcDamperType\n\t,IfcElectricTimeControlType\n\t,IfcFlowMeterType\n\t,IfcProtectiveDeviceType\n\t,IfcSwitchingDeviceType\n\t,IfcValveType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowFitting\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowFittingType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCableCarrierFittingType\n\t,IfcDuctFittingType\n\t,IfcJunctionBoxType\n\t,IfcPipeFittingType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowInstrumentType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcFlowInstrumentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcFlowMeterType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcFlowMeterTypeEnum;\nEND_ENTITY;\n\nENTITY IfcFlowMovingDevice\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowMovingDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCompressorType\n\t,IfcFanType\n\t,IfcPumpType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowSegment\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowSegmentType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCableCarrierSegmentType\n\t,IfcCableSegmentType\n\t,IfcDuctSegmentType\n\t,IfcPipeSegmentType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowStorageDevice\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowStorageDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcElectricFlowStorageDeviceType\n\t,IfcTankType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowTerminal\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowTerminalType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAirTerminalType\n\t,IfcElectricApplianceType\n\t,IfcElectricHeaterType\n\t,IfcFireSuppressionTerminalType\n\t,IfcGasTerminalType\n\t,IfcLampType\n\t,IfcLightFixtureType\n\t,IfcOutletType\n\t,IfcSanitaryTerminalType\n\t,IfcStackTerminalType\n\t,IfcWasteTerminalType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowTreatmentDevice\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowTreatmentDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDuctSilencerType\n\t,IfcFilterType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFluidFlowProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tPropertySource : IfcPropertySourceEnum;\n\tFlowConditionTimeSeries : OPTIONAL IfcTimeSeries;\n\tVelocityTimeSeries : OPTIONAL IfcTimeSeries;\n\tFlowrateTimeSeries : OPTIONAL IfcTimeSeries;\n\tFluid : IfcMaterial;\n\tPressureTimeSeries : OPTIONAL IfcTimeSeries;\n\tUserDefinedPropertySource : OPTIONAL IfcLabel;\n\tTemperatureSingleValue : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tWetBulbTemperatureSingleValue : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tWetBulbTemperatureTimeSeries : OPTIONAL IfcTimeSeries;\n\tTemperatureTimeSeries : OPTIONAL IfcTimeSeries;\n\tFlowrateSingleValue : OPTIONAL IfcDerivedMeasureValue;\n\tFlowConditionSingleValue : OPTIONAL IfcPositiveRatioMeasure;\n\tVelocitySingleValue : OPTIONAL IfcLinearVelocityMeasure;\n\tPressureSingleValue : OPTIONAL IfcPressureMeasure;\nEND_ENTITY;\n\nENTITY IfcFooting\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : IfcFootingTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcFuelProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tCombustionTemperature : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tCarbonContent : OPTIONAL IfcPositiveRatioMeasure;\n\tLowerHeatingValue : OPTIONAL IfcHeatingValueMeasure;\n\tHigherHeatingValue : OPTIONAL IfcHeatingValueMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcFurnishingElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcFurnishingElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcFurnitureType\n\t,IfcSystemFurnitureElementType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcFurnitureStandard\n SUBTYPE OF (IfcControl);\nEND_ENTITY;\n\nENTITY IfcFurnitureType\n SUBTYPE OF (IfcFurnishingElementType);\n\tAssemblyPlace : IfcAssemblyPlaceEnum;\nEND_ENTITY;\n\nENTITY IfcGasTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcGasTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcGeneralMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tMolecularWeight : OPTIONAL IfcMolecularWeightMeasure;\n\tPorosity : OPTIONAL IfcNormalisedRatioMeasure;\n\tMassDensity : OPTIONAL IfcMassDensityMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcGeneralProfileProperties\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralProfileProperties))\n SUBTYPE OF (IfcProfileProperties);\n\tPhysicalWeight : OPTIONAL IfcMassPerLengthMeasure;\n\tPerimeter : OPTIONAL IfcPositiveLengthMeasure;\n\tMinimumPlateThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tMaximumPlateThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tCrossSectionArea : OPTIONAL IfcAreaMeasure;\n WHERE\n\tWR1 : NOT(EXISTS(CrossSectionArea)) OR (CrossSectionArea > 0);\nEND_ENTITY;\n\nENTITY IfcGeometricCurveSet\n SUBTYPE OF (IfcGeometricSet);\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcGeometricSet.Elements |\n            'IFC2X2_FINAL.IFCSURFACE' IN TYPEOF(Temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationContext\n SUPERTYPE OF (ONEOF\n\t(IfcGeometricRepresentationSubContext))\n SUBTYPE OF (IfcRepresentationContext);\n\tCoordinateSpaceDimension : IfcDimensionCount;\n\tPrecision : OPTIONAL REAL;\n\tWorldCoordinateSystem : IfcAxis2Placement;\n\tTrueNorth : OPTIONAL IfcDirection;\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAnnotationFillArea\n\t,IfcBooleanResult\n\t,IfcBoundingBox\n\t,IfcCartesianTransformationOperator\n\t,IfcCompositeCurveSegment\n\t,IfcCurve\n\t,IfcDefinedSymbol\n\t,IfcDirection\n\t,IfcDraughtingCallout\n\t,IfcFaceBasedSurfaceModel\n\t,IfcFillAreaStyleHatching\n\t,IfcFillAreaStyleTileSymbolWithStyle\n\t,IfcFillAreaStyleTiles\n\t,IfcGeometricSet\n\t,IfcHalfSpaceSolid\n\t,IfcLightSource\n\t,IfcOneDirectionRepeatFactor\n\t,IfcPlacement\n\t,IfcPlanarExtent\n\t,IfcPoint\n\t,IfcSectionedSpine\n\t,IfcShellBasedSurfaceModel\n\t,IfcSolidModel\n\t,IfcSurface\n\t,IfcTextLiteral\n\t,IfcVector))\n SUBTYPE OF (IfcRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationSubContext\n SUBTYPE OF (IfcGeometricRepresentationContext);\n\tParentContext : IfcGeometricRepresentationContext;\n\tTargetScale : OPTIONAL IfcPositiveRatioMeasure;\n\tTargetView : IfcGeometricProjectionEnum;\n\tUserDefinedTargetView : OPTIONAL IfcLabel;\n DERIVE\n\tSELF\\IfcGeometricRepresentationContext.WorldCoordinateSystem : IfcAxis2Placement := ParentContext.WorldCoordinateSystem;\n\tSELF\\IfcGeometricRepresentationContext.CoordinateSpaceDimension : IfcDimensionCount := ParentContext.CoordinateSpaceDimension;\n\tSELF\\IfcGeometricRepresentationContext.TrueNorth : IfcDirection := ParentContext.TrueNorth;\n\tSELF\\IfcGeometricRepresentationContext.Precision : REAL := ParentContext.Precision;\n WHERE\n\tWR31 : NOT('IFC2X2_FINAL.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(ParentContext));\n\tWR32 : (TargetView <> IfcGeometricProjectionEnum.USERDEFINED) OR \n             ((TargetView =  IfcGeometricProjectionEnum.USERDEFINED) AND \n              EXISTS(UserDefinedTargetView));\nEND_ENTITY;\n\nENTITY IfcGeometricSet\n SUPERTYPE OF (ONEOF\n\t(IfcGeometricCurveSet))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tElements : SET [1:?] OF IfcGeometricSetSelect;\n DERIVE\n\tDim : IfcDimensionCount := Elements[1].Dim;\n WHERE\n\tWR21 : SIZEOF(QUERY(Temp <* Elements |\n               Temp.Dim <> Elements[1].Dim))\n             = 0;\nEND_ENTITY;\n\nENTITY IfcGrid\n SUBTYPE OF (IfcProduct);\n\tUAxes : LIST [1:?] OF UNIQUE IfcGridAxis;\n\tVAxes : LIST [1:?] OF UNIQUE IfcGridAxis;\n\tWAxes : OPTIONAL LIST [1:?] OF UNIQUE IfcGridAxis;\n INVERSE\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcProduct.ObjectPlacement);\n\tWR2 : NOT(EXISTS(SELF\\IfcProduct.Representation));\nEND_ENTITY;\n\nENTITY IfcGridAxis;\n\tAxisTag : OPTIONAL IfcLabel;\n\tAxisCurve : IfcCurve;\n\tSameSense : IfcBoolean;\n WHERE\n\tWR1 : AxisCurve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcGridPlacement\n SUBTYPE OF (IfcObjectPlacement);\n\tPlacementLocation : IfcVirtualGridIntersection;\n\tPlacementRefDirection : OPTIONAL IfcVirtualGridIntersection;\nEND_ENTITY;\n\nENTITY IfcGroup\n SUPERTYPE OF (ONEOF\n\t(IfcAsset\n\t,IfcCondition\n\t,IfcInventory\n\t,IfcStructuralLoadGroup\n\t,IfcStructuralResultGroup\n\t,IfcSystem\n\t,IfcZone))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tIsGroupedBy : IfcRelAssignsToGroup FOR RelatingGroup;\nEND_ENTITY;\n\nENTITY IfcHalfSpaceSolid\n SUPERTYPE OF (ONEOF\n\t(IfcBoxedHalfSpace\n\t,IfcPolygonalBoundedHalfSpace))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tBaseSurface : IfcSurface;\n\tAgreementFlag : BOOLEAN;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcHeatExchangerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcHeatExchangerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcHumidifierType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcHumidifierTypeEnum;\nEND_ENTITY;\n\nENTITY IfcHygroscopicMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tUpperVaporResistanceFactor : OPTIONAL IfcPositiveRatioMeasure;\n\tLowerVaporResistanceFactor : OPTIONAL IfcPositiveRatioMeasure;\n\tIsothermalMoistureCapacity : OPTIONAL IfcIsothermalMoistureCapacityMeasure;\n\tVaporPermeability : OPTIONAL IfcVaporPermeabilityMeasure;\n\tMoistureDiffusivity : OPTIONAL IfcMoistureDiffusivityMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcIShapeProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcAsymmetricIShapeProfileDef))\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tOverallWidth : IfcPositiveLengthMeasure;\n\tOverallDepth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : FlangeThickness < (OverallDepth / 2);\n\tWR2 : WebThickness < OverallWidth;\n\tWR3 : NOT(EXISTS(FilletRadius)) OR\n            ((FilletRadius <= (OverallWidth - WebThickness)/2) AND \n             (FilletRadius <= (OverallDepth - (2 * FlangeThickness))/2));\nEND_ENTITY;\n\nENTITY IfcImageTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tUrlReference : IfcIdentifier;\nEND_ENTITY;\n\nENTITY IfcInventory\n SUBTYPE OF (IfcGroup);\n\tInventoryType : IfcInventoryTypeEnum;\n\tJurisdiction : IfcActorSelect;\n\tResponsiblePersons : SET [1:?] OF IfcPerson;\n\tLastUpdateDate : IfcCalendarDate;\n\tCurrentValue : OPTIONAL IfcCostValue;\n\tOriginalValue : OPTIONAL IfcCostValue;\n WHERE\n\tWR41 : SIZEOF(QUERY(temp <* SELF\\IfcGroup.IsGroupedBy.RelatedObjects |\n                 NOT( ('IFC2X2_FINAL.IFCSPACE' IN TYPEOF (temp)) OR \n                      ('IFC2X2_FINAL.IFCASSET' IN TYPEOF (temp)) OR\n                      ('IFC2X2_FINAL.IFCFURNISHINGELEMENT' IN TYPEOF (temp))\n                 ))) = 0;\nEND_ENTITY;\n\nENTITY IfcIrregularTimeSeries\n SUBTYPE OF (IfcTimeSeries);\n\tValues : LIST [1:?] OF IfcIrregularTimeSeriesValue;\nEND_ENTITY;\n\nENTITY IfcIrregularTimeSeriesValue;\n\tTimeStamp : IfcDateTimeSelect;\n\tListValues : LIST [1:?] OF IfcValue;\nEND_ENTITY;\n\nENTITY IfcJunctionBoxType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcJunctionBoxTypeEnum;\nEND_ENTITY;\n\nENTITY IfcLShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tLegSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tCentreOfGravityInX : IfcPositiveLengthMeasure;\n\tCentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : Thickness < Depth;\n\tWR2 : NOT(EXISTS(Width)) OR (Thickness < Width);\n\tWR3 : NOT(EXISTS(Width) XOR EXISTS(CentreOfGravityInY));\nEND_ENTITY;\n\nENTITY IfcLaborResource\n SUBTYPE OF (IfcConstructionResource);\n\tSkillSet : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcLampType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcLampTypeEnum;\nEND_ENTITY;\n\nENTITY IfcLibraryInformation;\n\tName : IfcLabel;\n\tVersion : OPTIONAL IfcLabel;\n\tPublisher : OPTIONAL IfcOrganization;\n\tVersionDate : OPTIONAL IfcCalendarDate;\n\tLibraryReference : OPTIONAL SET [1:?] OF IfcLibraryReference;\nEND_ENTITY;\n\nENTITY IfcLibraryReference\n SUBTYPE OF (IfcExternalReference);\n INVERSE\n\tReferenceIntoLibrary : SET [0:1] OF IfcLibraryInformation FOR LibraryReference;\nEND_ENTITY;\n\nENTITY IfcLightDistributionData;\n\tMainPlaneAngle : IfcPlaneAngleMeasure;\n\tSecondaryPlaneAngle : LIST [1:?] OF IfcPlaneAngleMeasure;\n\tLuminousIntensity : LIST [1:?] OF IfcLuminousIntensityDistributionMeasure;\nEND_ENTITY;\n\nENTITY IfcLightFixtureType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcLightFixtureTypeEnum;\nEND_ENTITY;\n\nENTITY IfcLightIntensityDistribution;\n\tLightDistributionCurve : IfcLightDistributionCurveEnum;\n\tDistributionData : LIST [1:?] OF IfcLightDistributionData;\nEND_ENTITY;\n\nENTITY IfcLightSource\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcLightSourceAmbient\n\t,IfcLightSourceDirectional\n\t,IfcLightSourceGoniometric\n\t,IfcLightSourcePositional))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tName : OPTIONAL IfcLabel;\n\tLightColour : IfcColourRgb;\n\tAmbientIntensity : OPTIONAL IfcNormalisedRatioMeasure;\n\tIntensity : OPTIONAL IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcLightSourceAmbient\n SUBTYPE OF (IfcLightSource);\nEND_ENTITY;\n\nENTITY IfcLightSourceDirectional\n SUBTYPE OF (IfcLightSource);\n\tOrientation : IfcDirection;\nEND_ENTITY;\n\nENTITY IfcLightSourceGoniometric\n SUBTYPE OF (IfcLightSource);\n\tPosition : IfcAxis2Placement3D;\n\tColourAppearance : OPTIONAL IfcColourRgb;\n\tColourTemperature : IfcThermodynamicTemperatureMeasure;\n\tLuminousFlux : IfcLuminousFluxMeasure;\n\tLightEmissionSource : IfcLightEmissionSourceEnum;\n\tLightDistributionDataSource : IfcLightDistributionDataSourceSelect;\nEND_ENTITY;\n\nENTITY IfcLightSourcePositional\n SUPERTYPE OF (ONEOF\n\t(IfcLightSourceSpot))\n SUBTYPE OF (IfcLightSource);\n\tPosition : IfcCartesianPoint;\n\tRadius : IfcPositiveLengthMeasure;\n\tConstantAttenuation : IfcReal;\n\tDistanceAttenuation : IfcReal;\n\tQuadricAttenuation : IfcReal;\nEND_ENTITY;\n\nENTITY IfcLightSourceSpot\n SUBTYPE OF (IfcLightSourcePositional);\n\tOrientation : IfcDirection;\n\tConcentrationExponent : OPTIONAL IfcReal;\n\tSpreadAngle : IfcPositivePlaneAngleMeasure;\n\tBeamWidthAngle : IfcPositivePlaneAngleMeasure;\nEND_ENTITY;\n\nENTITY IfcLine\n SUBTYPE OF (IfcCurve);\n\tPnt : IfcCartesianPoint;\n\tDir : IfcVector;\n WHERE\n\tWR1 : Dir.Dim = Pnt.Dim;\nEND_ENTITY;\n\nENTITY IfcLinearDimension\n SUBTYPE OF (IfcDimensionCurveDirectedCallout);\nEND_ENTITY;\n\nENTITY IfcLocalPlacement\n SUBTYPE OF (IfcObjectPlacement);\n\tPlacementRelTo : OPTIONAL IfcObjectPlacement;\n\tRelativePlacement : IfcAxis2Placement;\n WHERE\n\tWR21 : IfcCorrectLocalPlacement(RelativePlacement, PlacementRelTo);\nEND_ENTITY;\n\nENTITY IfcLocalTime;\n\tHourComponent : IfcHourInDay;\n\tMinuteComponent : OPTIONAL IfcMinuteInHour;\n\tSecondComponent : OPTIONAL IfcSecondInMinute;\n\tZone : OPTIONAL IfcCoordinatedUniversalTimeOffset;\n\tDaylightSavingOffset : OPTIONAL IfcDaylightSavingHour;\n WHERE\n\tWR21 : IfcValidTime (SELF);\nEND_ENTITY;\n\nENTITY IfcLoop\n SUPERTYPE OF (ONEOF\n\t(IfcEdgeLoop\n\t,IfcPolyLoop\n\t,IfcVertexLoop))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcManifoldSolidBrep\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcFacetedBrep\n\t,IfcFacetedBrepWithVoids))\n SUBTYPE OF (IfcSolidModel);\n\tOuter : IfcClosedShell;\nEND_ENTITY;\n\nENTITY IfcMappedItem\n SUBTYPE OF (IfcRepresentationItem);\n\tMappingSource : IfcRepresentationMap;\n\tMappingTarget : IfcCartesianTransformationOperator;\nEND_ENTITY;\n\nENTITY IfcMaterial;\n\tName : IfcLabel;\n INVERSE\n\tClassifiedAs : SET [0:1] OF IfcMaterialClassificationRelationship FOR ClassifiedMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialClassificationRelationship;\n\tMaterialClassifications : SET [1:?] OF IfcClassificationNotationSelect;\n\tClassifiedMaterial : IfcMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialLayer;\n\tMaterial : OPTIONAL IfcMaterial;\n\tLayerThickness : IfcPositiveLengthMeasure;\n\tIsVentilated : OPTIONAL IfcBoolean;\n INVERSE\n\tToMaterialLayerSet : IfcMaterialLayerSet FOR MaterialLayers;\nEND_ENTITY;\n\nENTITY IfcMaterialLayerSet;\n\tMaterialLayers : LIST [1:?] OF IfcMaterialLayer;\n\tLayerSetName : OPTIONAL IfcLabel;\n DERIVE\n\tTotalThickness : IfcLengthMeasure := IfcMlsTotalThickness(SELF);\nEND_ENTITY;\n\nENTITY IfcMaterialLayerSetUsage;\n\tForLayerSet : IfcMaterialLayerSet;\n\tLayerSetDirection : IfcLayerSetDirectionEnum;\n\tDirectionSense : IfcDirectionSenseEnum;\n\tOffsetFromReferenceLine : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMaterialList;\n\tMaterials : LIST [1:?] OF IfcMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialProperties\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcExtendedMaterialProperties\n\t,IfcFuelProperties\n\t,IfcGeneralMaterialProperties\n\t,IfcHygroscopicMaterialProperties\n\t,IfcMechanicalMaterialProperties\n\t,IfcOpticalMaterialProperties\n\t,IfcProductsOfCombustionProperties\n\t,IfcThermalMaterialProperties\n\t,IfcWaterProperties));\n\tMaterial : IfcMaterial;\nEND_ENTITY;\n\nENTITY IfcMeasureWithUnit;\n\tValueComponent : IfcValue;\n\tUnitComponent : IfcUnit;\nEND_ENTITY;\n\nENTITY IfcMechanicalConcreteMaterialProperties\n SUBTYPE OF (IfcMechanicalMaterialProperties);\n\tCompressiveStrength : OPTIONAL IfcPressureMeasure;\n\tMaxAggregateSize : OPTIONAL IfcPositiveLengthMeasure;\n\tAdmixturesDescription : OPTIONAL IfcText;\n\tWorkability : OPTIONAL IfcText;\n\tProtectivePoreRatio : OPTIONAL IfcNormalisedRatioMeasure;\n\tWaterImpermeability : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcMechanicalFastener\n SUBTYPE OF (IfcFastener);\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tNominalLength : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMechanicalFastenerType\n SUBTYPE OF (IfcFastenerType);\nEND_ENTITY;\n\nENTITY IfcMechanicalMaterialProperties\n SUPERTYPE OF (ONEOF\n\t(IfcMechanicalConcreteMaterialProperties\n\t,IfcMechanicalSteelMaterialProperties))\n SUBTYPE OF (IfcMaterialProperties);\n\tDynamicViscosity : OPTIONAL IfcDynamicViscosityMeasure;\n\tYoungModulus : OPTIONAL IfcModulusOfElasticityMeasure;\n\tShearModulus : OPTIONAL IfcModulusOfElasticityMeasure;\n\tPoissonRatio : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalExpansionCoefficient : OPTIONAL IfcThermalExpansionCoefficientMeasure;\n UNIQUE\n\tUR11 : Material;\n WHERE\n\tWR21 : NOT(EXISTS(YoungModulus)) OR (YoungModulus >= 0.0);\n\tWR22 : NOT(EXISTS(ShearModulus)) OR (ShearModulus >= 0.0);\nEND_ENTITY;\n\nENTITY IfcMechanicalSteelMaterialProperties\n SUBTYPE OF (IfcMechanicalMaterialProperties);\n\tYieldStress : OPTIONAL IfcPressureMeasure;\n\tUltimateStress : OPTIONAL IfcPressureMeasure;\n\tUltimateStrain : OPTIONAL IfcPositiveRatioMeasure;\n\tHardeningModule : OPTIONAL IfcModulusOfElasticityMeasure;\n\tProportionalStress : OPTIONAL IfcPressureMeasure;\n\tPlasticStrain : OPTIONAL IfcPositiveRatioMeasure;\n\tRelaxations : OPTIONAL SET [1:?] OF IfcRelaxation;\n WHERE\n\tWR31 : NOT(EXISTS(YieldStress)) OR (YieldStress >= 0);\n\tWR32 : NOT(EXISTS(UltimateStress)) OR (UltimateStress >= 0);\n\tWR33 : NOT(EXISTS(HardeningModule)) OR (HardeningModule >= 0);\n\tWR34 : NOT(EXISTS(ProportionalStress)) OR (ProportionalStress >= 0);\nEND_ENTITY;\n\nENTITY IfcMember\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcMemberType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcMemberTypeEnum;\nEND_ENTITY;\n\nENTITY IfcMetric\n SUBTYPE OF (IfcConstraint);\n\tBenchmark : IfcBenchmarkEnum;\n\tValueSource : OPTIONAL IfcLabel;\n\tDataValue : IfcMetricValueSelect;\nEND_ENTITY;\n\nENTITY IfcMonetaryUnit;\n\tCurrency : IfcCurrencyEnum;\nEND_ENTITY;\n\nENTITY IfcMotorConnectionType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcMotorConnectionTypeEnum;\nEND_ENTITY;\n\nENTITY IfcMove\n SUBTYPE OF (IfcTask);\n\tMoveFrom : IfcSpatialStructureElement;\n\tMoveTo : IfcSpatialStructureElement;\n\tPunchList : OPTIONAL LIST [1:?] OF UNIQUE IfcText;\n WHERE\n\tWR1 : SIZEOF(SELF\\IfcProcess.OperatesOn) >= 1;\n\tWR2 : SIZEOF(QUERY(temp <* OperatesOn |\n              SIZEOF(QUERY(temp2 <* temp.RelatedObjects |\n                ('IFC2X2_FINAL.IFCACTOR' IN TYPEOF (temp2)) OR\n                ('IFC2X2_FINAL.IFCEQUIPMENTELEMENT' IN TYPEOF (temp2)) OR\n                ('IFC2X2_FINAL.IFCFURNISHINGELEMENT' IN TYPEOF (temp2)) )) >=1\n              )) >= 1;\n\tWR3 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcNamedUnit\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcContextDependentUnit\n\t,IfcConversionBasedUnit\n\t,IfcSIUnit));\n\tDimensions : IfcDimensionalExponents;\n\tUnitType : IfcUnitEnum;\n WHERE\n\tWR1 : IfcCorrectDimensions (SELF.UnitType, SELF.Dimensions);\nEND_ENTITY;\n\nENTITY IfcObject\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcActor\n\t,IfcControl\n\t,IfcGroup\n\t,IfcProcess\n\t,IfcProduct\n\t,IfcProject\n\t,IfcResource))\n SUBTYPE OF (IfcRoot);\n\tObjectType : OPTIONAL IfcLabel;\n INVERSE\n\tIsDefinedBy : SET [0:?] OF IfcRelDefines FOR RelatedObjects;\n\tHasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects;\n\tHasAssignments : SET [0:?] OF IfcRelAssigns FOR RelatedObjects;\n\tDecomposes : SET [0:1] OF IfcRelDecomposes FOR RelatedObjects;\n\tIsDecomposedBy : SET [0:?] OF IfcRelDecomposes FOR RelatingObject;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* IsDefinedBy | 'IFC2X2_FINAL.IFCRELDEFINESBYTYPE' IN TYPEOF(temp))) <= 1;\nEND_ENTITY;\n\nENTITY IfcObjectPlacement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcGridPlacement\n\t,IfcLocalPlacement));\n INVERSE\n\tReferencedByPlacements : SET [0:?] OF IfcLocalPlacement FOR PlacementRelTo;\nEND_ENTITY;\n\nENTITY IfcObjective\n SUBTYPE OF (IfcConstraint);\n\tBenchmarkValues : OPTIONAL IfcMetric;\n\tResultValues : OPTIONAL IfcMetric;\n\tObjectiveQualifier : IfcObjectiveEnum;\n\tUserDefinedQualifier : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : (ObjectiveQualifier <> IfcObjectiveEnum.USERDEFINED) OR\n             ((ObjectiveQualifier = IfcObjectiveEnum.USERDEFINED) AND EXISTS(SELF\\IfcObjective.UserDefinedQualifier));\nEND_ENTITY;\n\nENTITY IfcOccupant\n SUBTYPE OF (IfcActor);\n\tPredefinedType : IfcOccupantTypeEnum;\n WHERE\n\tWR31 : NOT(PredefinedType = IfcOccupantTypeEnum.USERDEFINED) \n           OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcOffsetCurve2D\n SUBTYPE OF (IfcCurve);\n\tBasisCurve : IfcCurve;\n\tDistance : IfcLengthMeasure;\n\tSelfIntersect : LOGICAL;\n WHERE\n\tWR1 : BasisCurve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcOffsetCurve3D\n SUBTYPE OF (IfcCurve);\n\tBasisCurve : IfcCurve;\n\tDistance : IfcLengthMeasure;\n\tSelfIntersect : LOGICAL;\n\tRefDirection : IfcDirection;\n WHERE\n\tWR1 : BasisCurve.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcOneDirectionRepeatFactor\n SUPERTYPE OF (ONEOF\n\t(IfcTwoDirectionRepeatFactor))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tRepeatFactor : IfcVector;\nEND_ENTITY;\n\nENTITY IfcOpenShell\n SUBTYPE OF (IfcConnectedFaceSet);\nEND_ENTITY;\n\nENTITY IfcOpeningElement\n SUBTYPE OF (IfcFeatureElementSubtraction);\n INVERSE\n\tHasFillings : SET [0:?] OF IfcRelFillsElement FOR RelatingOpeningElement;\nEND_ENTITY;\n\nENTITY IfcOpticalMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tVisibleTransmittance : OPTIONAL IfcPositiveRatioMeasure;\n\tSolarTransmittance : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalIrTransmittance : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalIrEmissivityBack : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalIrEmissivityFront : OPTIONAL IfcPositiveRatioMeasure;\n\tVisibleReflectanceBack : OPTIONAL IfcPositiveRatioMeasure;\n\tVisibleReflectanceFront : OPTIONAL IfcPositiveRatioMeasure;\n\tSolarReflectanceFront : OPTIONAL IfcPositiveRatioMeasure;\n\tSolarReflectanceBack : OPTIONAL IfcPositiveRatioMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcOrderAction\n SUBTYPE OF (IfcTask);\n\tActionID : IfcIdentifier;\n UNIQUE\n\tUR2 : ActionID;\nEND_ENTITY;\n\nENTITY IfcOrganization;\n\tId : OPTIONAL IfcIdentifier;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\n\tAddresses : OPTIONAL LIST [1:?] OF IfcAddress;\n INVERSE\n\tIsRelatedBy : SET [0:?] OF IfcOrganizationRelationship FOR RelatedOrganizations;\n\tRelates : SET [0:?] OF IfcOrganizationRelationship FOR RelatingOrganization;\n\tEngages : SET [0:?] OF IfcPersonAndOrganization FOR TheOrganization;\nEND_ENTITY;\n\nENTITY IfcOrganizationRelationship;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRelatingOrganization : IfcOrganization;\n\tRelatedOrganizations : SET [1:?] OF IfcOrganization;\nEND_ENTITY;\n\nENTITY IfcOrientedEdge\n SUBTYPE OF (IfcEdge);\n\tEdgeElement : IfcEdge;\n\tOrientation : BOOLEAN;\n DERIVE\n\tSELF\\IfcEdge.EdgeStart : IfcVertex := IfcBooleanChoose \n                               (Orientation, EdgeElement.EdgeStart, EdgeElement.EdgeEnd);\n\tSELF\\IfcEdge.EdgeEnd : IfcVertex := IfcBooleanChoose \n                               (Orientation, EdgeElement.EdgeEnd, EdgeElement.EdgeStart);\n WHERE\n\tWR1 : NOT('IFC2X2_FINAL.IFCORIENTEDEDGE' IN TYPEOF(EdgeElement));\nEND_ENTITY;\n\nENTITY IfcOutletType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcOutletTypeEnum;\nEND_ENTITY;\n\nENTITY IfcOwnerHistory;\n\tOwningUser : IfcPersonAndOrganization;\n\tOwningApplication : IfcApplication;\n\tState : OPTIONAL IfcStateEnum;\n\tChangeAction : IfcChangeActionEnum;\n\tLastModifiedDate : OPTIONAL IfcTimeStamp;\n\tLastModifyingUser : OPTIONAL IfcPersonAndOrganization;\n\tLastModifyingApplication : OPTIONAL IfcApplication;\n\tCreationDate : IfcTimeStamp;\nEND_ENTITY;\n\nENTITY IfcParameterizedProfileDef\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCShapeProfileDef\n\t,IfcCircleProfileDef\n\t,IfcCraneRailAShapeProfileDef\n\t,IfcCraneRailFShapeProfileDef\n\t,IfcEllipseProfileDef\n\t,IfcIShapeProfileDef\n\t,IfcLShapeProfileDef\n\t,IfcRectangleProfileDef\n\t,IfcTShapeProfileDef\n\t,IfcTrapeziumProfileDef\n\t,IfcUShapeProfileDef\n\t,IfcZShapeProfileDef))\n SUBTYPE OF (IfcProfileDef);\n\tPosition : IfcAxis2Placement2D;\nEND_ENTITY;\n\nENTITY IfcPath\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tEdgeList : LIST [1:?] OF UNIQUE IfcOrientedEdge;\n WHERE\n\tWR1 : IfcPathHeadToTail(SELF);\nEND_ENTITY;\n\nENTITY IfcPerformanceHistory\n SUBTYPE OF (IfcControl);\n\tLifeCyclePhase : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcPermeableCoveringProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tOperationType : IfcPermeableCoveringOperationEnum;\n\tPanelPosition : IfcWindowPanelPositionEnum;\n\tFrameDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tFrameThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\nEND_ENTITY;\n\nENTITY IfcPermit\n SUBTYPE OF (IfcControl);\n\tPermitID : IfcIdentifier;\n UNIQUE\n\tUR2 : PermitID;\nEND_ENTITY;\n\nENTITY IfcPerson;\n\tId : OPTIONAL IfcIdentifier;\n\tFamilyName : OPTIONAL IfcLabel;\n\tGivenName : OPTIONAL IfcLabel;\n\tMiddleNames : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPrefixTitles : OPTIONAL LIST [1:?] OF IfcLabel;\n\tSuffixTitles : OPTIONAL LIST [1:?] OF IfcLabel;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\n\tAddresses : OPTIONAL LIST [1:?] OF IfcAddress;\n INVERSE\n\tEngagedIn : SET [0:?] OF IfcPersonAndOrganization FOR ThePerson;\n WHERE\n\tWR1 : EXISTS(FamilyName) OR \n            EXISTS(GivenName);\nEND_ENTITY;\n\nENTITY IfcPersonAndOrganization;\n\tThePerson : IfcPerson;\n\tTheOrganization : IfcOrganization;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\nEND_ENTITY;\n\nENTITY IfcPhysicalComplexQuantity\n SUBTYPE OF (IfcPhysicalQuantity);\n\tHasQuantities : SET [1:?] OF IfcPhysicalQuantity;\n\tDiscrimination : IfcLabel;\n\tQuality : OPTIONAL IfcLabel;\n\tUsage : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* HasQuantities | SELF :=: temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcPhysicalQuantity\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPhysicalComplexQuantity\n\t,IfcPhysicalSimpleQuantity));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tPartOfComplex : SET [0:1] OF IfcPhysicalComplexQuantity FOR HasQuantities;\nEND_ENTITY;\n\nENTITY IfcPhysicalSimpleQuantity\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcQuantityArea\n\t,IfcQuantityCount\n\t,IfcQuantityLength\n\t,IfcQuantityTime\n\t,IfcQuantityVolume\n\t,IfcQuantityWeight))\n SUBTYPE OF (IfcPhysicalQuantity);\n\tUnit : OPTIONAL IfcNamedUnit;\nEND_ENTITY;\n\nENTITY IfcPile\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : IfcPileTypeEnum;\n\tConstructionType : OPTIONAL IfcPileConstructionEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcPipeFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcPipeFittingTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcPipeFittingTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcPipeFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcPipeSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcPipeSegmentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcPixelTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tWidth : IfcInteger;\n\tHeight : IfcInteger;\n\tColourComponents : IfcInteger;\n\tPixel : LIST [1:?] OF STRING(10);\n WHERE\n\tWR21 : Width >= 1;\n\tWR22 : Height >= 1;\n\tWR23 : {1 <= ColourComponents <= 4};\n\tWR24 : SIZEOF(Pixel) = (Width * Height);\nEND_ENTITY;\n\nENTITY IfcPlacement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAxis1Placement\n\t,IfcAxis2Placement2D\n\t,IfcAxis2Placement3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tLocation : IfcCartesianPoint;\n DERIVE\n\tDim : IfcDimensionCount := Location.Dim;\nEND_ENTITY;\n\nENTITY IfcPlanarBox\n SUBTYPE OF (IfcPlanarExtent);\n\tPlacement : IfcAxis2Placement;\nEND_ENTITY;\n\nENTITY IfcPlanarExtent\n SUPERTYPE OF (ONEOF\n\t(IfcPlanarBox))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSizeInX : IfcLengthMeasure;\n\tSizeInY : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcPlane\n SUBTYPE OF (IfcElementarySurface);\nEND_ENTITY;\n\nENTITY IfcPlate\n SUBTYPE OF (IfcBuildingElementComponent);\nEND_ENTITY;\n\nENTITY IfcPlateType\n SUBTYPE OF (IfcBuildingElementComponentType);\n\tPredefinedType : IfcPlateTypeEnum;\n WHERE\n\tWR1 : SIZEOF (QUERY(temp <* SELF\\IfcObject.HasAssociations | 'IFC2X2_FINAL.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp) )) = 1;\nEND_ENTITY;\n\nENTITY IfcPoint\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCartesianPoint\n\t,IfcPointOnCurve\n\t,IfcPointOnSurface))\n SUBTYPE OF (IfcGeometricRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcPointOnCurve\n SUBTYPE OF (IfcPoint);\n\tBasisCurve : IfcCurve;\n\tPointParameter : IfcParameterValue;\n DERIVE\n\tDim : IfcDimensionCount := BasisCurve.Dim;\nEND_ENTITY;\n\nENTITY IfcPointOnSurface\n SUBTYPE OF (IfcPoint);\n\tBasisSurface : IfcSurface;\n\tPointParameterU : IfcParameterValue;\n\tPointParameterV : IfcParameterValue;\n DERIVE\n\tDim : IfcDimensionCount := BasisSurface.Dim;\nEND_ENTITY;\n\nENTITY IfcPolyLoop\n SUBTYPE OF (IfcLoop);\n\tPolygon : LIST [3:?] OF UNIQUE IfcCartesianPoint;\n WHERE\n\tWR21 : SIZEOF(QUERY(Temp <* Polygon | Temp.Dim <> Polygon[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcPolygonalBoundedHalfSpace\n SUBTYPE OF (IfcHalfSpaceSolid);\n\tPosition : IfcAxis2Placement3D;\n\tPolygonalBoundary : IfcPolyline;\n WHERE\n\tWR41 : PolygonalBoundary.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcPolyline\n SUBTYPE OF (IfcBoundedCurve);\n\tPoints : LIST [2:?] OF IfcCartesianPoint;\n WHERE\n\tWR41 : SIZEOF(QUERY(Temp <* Points | Temp.Dim <> Points[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcPort\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDistributionPort))\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tContainedIn : IfcRelConnectsPortToElement FOR RelatingPort;\n\tConnectedFrom : SET [0:1] OF IfcRelConnectsPorts FOR RelatedPort;\n\tConnectedTo : SET [0:1] OF IfcRelConnectsPorts FOR RelatingPort;\nEND_ENTITY;\n\nENTITY IfcPostalAddress\n SUBTYPE OF (IfcAddress);\n\tInternalLocation : OPTIONAL IfcLabel;\n\tAddressLines : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPostalBox : OPTIONAL IfcLabel;\n\tTown : OPTIONAL IfcLabel;\n\tRegion : OPTIONAL IfcLabel;\n\tPostalCode : OPTIONAL IfcLabel;\n\tCountry : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS (InternalLocation) OR \n            EXISTS (AddressLines) OR\n            EXISTS (PostalBox) OR\n            EXISTS (PostalCode) OR\n            EXISTS (Town) OR \n            EXISTS (Region) OR  \n            EXISTS (Country);\nEND_ENTITY;\n\nENTITY IfcPreDefinedColour\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDraughtingPreDefinedColour))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPreDefinedCurveFont\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDraughtingPreDefinedCurveFont))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPreDefinedDimensionSymbol\n SUBTYPE OF (IfcPreDefinedSymbol);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['arc length','conical taper','counterbore',\n                  'countersink','depth','diameter','plus minus','radius',\n                  'slope','spherical diameter','spherical radius','square'];\nEND_ENTITY;\n\nENTITY IfcPreDefinedItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPreDefinedColour\n\t,IfcPreDefinedCurveFont\n\t,IfcPreDefinedSymbol\n\t,IfcPreDefinedTextFont));\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcPreDefinedPointMarkerSymbol\n SUBTYPE OF (IfcPreDefinedSymbol);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['asterisk','circle','dot','plus','square','triangle','x'];\nEND_ENTITY;\n\nENTITY IfcPreDefinedSymbol\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPreDefinedDimensionSymbol\n\t,IfcPreDefinedPointMarkerSymbol\n\t,IfcPreDefinedTerminatorSymbol))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPreDefinedTerminatorSymbol\n SUBTYPE OF (IfcPreDefinedSymbol);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['blanked arrow','blanked box',\n                 'blanked dot','dimension origin','filled arrow','filled box',\n                 'filled dot','integral symbol','open arrow','slash','unfilled arrow'];\nEND_ENTITY;\n\nENTITY IfcPreDefinedTextFont\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDraughtingPreDefinedTextFont))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPresentationLayerAssignment\n SUPERTYPE OF (ONEOF\n\t(IfcPresentationLayerAssignmentWithStyle));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tAssignedItems : SET [1:?] OF IfcLayeredItem;\nEND_ENTITY;\n\nENTITY IfcPresentationLayerAssignmentWithStyle\n SUBTYPE OF (IfcPresentationLayerAssignment);\n\tLayerNumber : OPTIONAL INTEGER;\n\tLayerOn : LOGICAL;\n\tLayerOnInAllViews : LOGICAL;\n\tLayerFrozen : LOGICAL;\n\tLayerFrozenInAllViews : LOGICAL;\n\tLayerBlocked : LOGICAL;\n\tLayerColour : OPTIONAL IfcColour;\n\tLayerCurveWidth : OPTIONAL IfcSizeSelect;\n\tLayerCurveFont : OPTIONAL IfcCurveFontOrScaledCurveFontSelect;\nEND_ENTITY;\n\nENTITY IfcPresentationStyleAssignment;\n\tStyles : SET [1:?] OF IfcPresentationStyleSelect;\nEND_ENTITY;\n\nENTITY IfcProcedure\n SUBTYPE OF (IfcProcess);\n\tProcedureID : IfcIdentifier;\n\tProcedureType : IfcProcedureTypeEnum;\n\tUserDefinedProcedureType : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* SELF\\IfcObject.Decomposes | NOT('IFC2X2_FINAL.IFCRELNESTS' IN TYPEOF(temp)))) = 0;\n\tWR2 : SIZEOF(QUERY(temp <* SELF\\IfcObject.IsDecomposedBy | NOT('IFC2X2_FINAL.IFCRELNESTS' IN TYPEOF(temp)))) = 0;\n\tWR3 : EXISTS(SELF\\IfcRoot.Name);\n\tWR4 : (ProcedureType <> IfcProcedureTypeEnum.USERDEFINED) OR\n            ((ProcedureType = IfcProcedureTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcProcedure.UserDefinedProcedureType));\nEND_ENTITY;\n\nENTITY IfcProcess\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcProcedure\n\t,IfcTask))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tOperatesOn : SET [0:?] OF IfcRelAssignsToProcess FOR RelatingProcess;\n\tIsSuccessorFrom : SET [0:?] OF IfcRelSequence FOR RelatedProcess;\n\tIsPredecessorTo : SET [0:?] OF IfcRelSequence FOR RelatingProcess;\nEND_ENTITY;\n\nENTITY IfcProduct\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAnnotation\n\t,IfcElement\n\t,IfcGrid\n\t,IfcPort\n\t,IfcProxy\n\t,IfcSpatialStructureElement\n\t,IfcStructuralActivity\n\t,IfcStructuralItem))\n SUBTYPE OF (IfcObject);\n\tObjectPlacement : OPTIONAL IfcObjectPlacement;\n\tRepresentation : OPTIONAL IfcProductRepresentation;\n INVERSE\n\tReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct;\n WHERE\n\tWR1 : (EXISTS(Representation) AND EXISTS(ObjectPlacement))\n            OR (EXISTS(Representation) AND \n               (NOT('IFC2X2_FINAL.IFCPRODUCTDEFINITIONSHAPE' IN TYPEOF(Representation))))\n            OR (NOT(EXISTS(Representation)));\nEND_ENTITY;\n\nENTITY IfcProductDefinitionShape\n SUBTYPE OF (IfcProductRepresentation);\n INVERSE\n\tHasShapeAspects : SET [0:?] OF IfcShapeAspect FOR PartOfProductDefinitionShape;\nEND_ENTITY;\n\nENTITY IfcProductRepresentation\n SUPERTYPE OF (ONEOF\n\t(IfcProductDefinitionShape));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRepresentations : LIST [1:?] OF IfcRepresentation;\nEND_ENTITY;\n\nENTITY IfcProductsOfCombustionProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tSpecificHeatCapacity : OPTIONAL IfcSpecificHeatCapacityMeasure;\n\tN20Content : OPTIONAL IfcPositiveRatioMeasure;\n\tCOContent : OPTIONAL IfcPositiveRatioMeasure;\n\tCO2Content : OPTIONAL IfcPositiveRatioMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcProfileDef\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcArbitraryClosedProfileDef\n\t,IfcArbitraryOpenProfileDef\n\t,IfcCompositeProfileDef\n\t,IfcDerivedProfileDef\n\t,IfcParameterizedProfileDef));\n\tProfileType : IfcProfileTypeEnum;\n\tProfileName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcProfileProperties\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcGeneralProfileProperties\n\t,IfcRibPlateProfileProperties));\n\tProfileName : OPTIONAL IfcLabel;\n\tProfileDefinition : OPTIONAL IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcProject\n SUBTYPE OF (IfcObject);\n\tLongName : OPTIONAL IfcLabel;\n\tPhase : OPTIONAL IfcLabel;\n\tRepresentationContexts : SET [1:?] OF IfcRepresentationContext;\n\tUnitsInContext : IfcUnitAssignment;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcProjectOrder\n SUBTYPE OF (IfcControl);\n\tID : IfcIdentifier;\n\tPredefinedType : IfcProjectOrderTypeEnum;\n\tStatus : OPTIONAL IfcLabel;\n UNIQUE\n\tUR2 : ID;\nEND_ENTITY;\n\nENTITY IfcProjectOrderRecord\n SUBTYPE OF (IfcControl);\n\tRecords : LIST [1:?] OF UNIQUE IfcRelAssignsToProjectOrder;\n\tPredefinedType : IfcProjectOrderRecordTypeEnum;\nEND_ENTITY;\n\nENTITY IfcProjectionCurve\n SUBTYPE OF (IfcAnnotationCurveOccurrence);\nEND_ENTITY;\n\nENTITY IfcProjectionElement\n SUBTYPE OF (IfcFeatureElementAddition);\nEND_ENTITY;\n\nENTITY IfcProperty\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcComplexProperty\n\t,IfcSimpleProperty));\n\tName : IfcIdentifier;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tPropertyForDependance : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependingProperty;\n\tPropertyDependsOn : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependantProperty;\n\tPartOfComplex : SET [0:1] OF IfcComplexProperty FOR HasProperties;\nEND_ENTITY;\n\nENTITY IfcPropertyBoundedValue\n SUBTYPE OF (IfcSimpleProperty);\n\tUpperBoundValue : OPTIONAL IfcValue;\n\tLowerBoundValue : OPTIONAL IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n WHERE\n\tWR21 : NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(LowerBoundValue)) OR\n             (TYPEOF(UpperBoundValue) = TYPEOF(LowerBoundValue));\n\tWR22 : EXISTS(UpperBoundValue) OR EXISTS(LowerBoundValue);\nEND_ENTITY;\n\nENTITY IfcPropertyConstraintRelationship;\n\tRelatingConstraint : IfcConstraint;\n\tRelatedProperties : SET [1:?] OF IfcProperty;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcPropertyDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPropertySetDefinition\n\t,IfcTypeObject))\n SUBTYPE OF (IfcRoot);\n INVERSE\n\tHasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects;\nEND_ENTITY;\n\nENTITY IfcPropertyDependencyRelationship;\n\tDependingProperty : IfcProperty;\n\tDependantProperty : IfcProperty;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tExpression : OPTIONAL IfcText;\n WHERE\n\tWR1 : DependingProperty :<>: DependantProperty;\nEND_ENTITY;\n\nENTITY IfcPropertyEnumeratedValue\n SUBTYPE OF (IfcSimpleProperty);\n\tEnumerationValues : LIST [1:?] OF IfcValue;\n\tEnumerationReference : OPTIONAL IfcPropertyEnumeration;\n WHERE\n\tWR1 : NOT(EXISTS(EnumerationReference)) OR \n               (SIZEOF(QUERY(temp <* EnumerationValues |\n                temp IN EnumerationReference.EnumerationValues))\n                = SIZEOF(EnumerationValues));\nEND_ENTITY;\n\nENTITY IfcPropertyEnumeration;\n\tName : IfcLabel;\n\tEnumerationValues : LIST [1:?] OF UNIQUE IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n UNIQUE\n\tUR1 : Name;\nEND_ENTITY;\n\nENTITY IfcPropertyListValue\n SUBTYPE OF (IfcSimpleProperty);\n\tListValues : LIST [1:?] OF IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n WHERE\n\tWR31 : SIZEOF(QUERY(temp <* SELF.ListValues | \n               NOT(TYPEOF(SELF.ListValues[1]) = TYPEOF(temp))\n               )) = 0;\nEND_ENTITY;\n\nENTITY IfcPropertyReferenceValue\n SUBTYPE OF (IfcSimpleProperty);\n\tUsageName : OPTIONAL IfcLabel;\n\tPropertyReference : IfcObjectReferenceSelect;\nEND_ENTITY;\n\nENTITY IfcPropertySet\n SUBTYPE OF (IfcPropertySetDefinition);\n\tHasProperties : SET [1:?] OF IfcProperty;\n WHERE\n\tWR31 : EXISTS(SELF\\IfcRoot.Name);\n\tWR32 : IfcUniquePropertyName(HasProperties);\nEND_ENTITY;\n\nENTITY IfcPropertySetDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDoorLiningProperties\n\t,IfcDoorPanelProperties\n\t,IfcElementQuantity\n\t,IfcEnergyProperties\n\t,IfcFluidFlowProperties\n\t,IfcPermeableCoveringProperties\n\t,IfcPropertySet\n\t,IfcReinforcementDefinitionProperties\n\t,IfcServiceLifeFactor\n\t,IfcSoundProperties\n\t,IfcSoundValue\n\t,IfcSpaceThermalLoadProperties\n\t,IfcWindowLiningProperties\n\t,IfcWindowPanelProperties))\n SUBTYPE OF (IfcPropertyDefinition);\n INVERSE\n\tPropertyDefinitionOf : SET [0:1] OF IfcRelDefinesByProperties FOR RelatingPropertyDefinition;\n\tDefinesType : SET [0:1] OF IfcTypeObject FOR HasPropertySets;\nEND_ENTITY;\n\nENTITY IfcPropertySingleValue\n SUBTYPE OF (IfcSimpleProperty);\n\tNominalValue : IfcValue;\n\tUnit : OPTIONAL IfcUnit;\nEND_ENTITY;\n\nENTITY IfcPropertyTableValue\n SUBTYPE OF (IfcSimpleProperty);\n\tDefiningValues : LIST [1:?] OF UNIQUE IfcValue;\n\tDefinedValues : LIST [1:?] OF IfcValue;\n\tExpression : OPTIONAL IfcText;\n\tDefiningUnit : OPTIONAL IfcUnit;\n\tDefinedUnit : OPTIONAL IfcUnit;\n WHERE\n\tWR1 : SIZEOF(DefiningValues) = SIZEOF(DefinedValues);\n\tWR2 : SIZEOF(QUERY(temp <* SELF.DefiningValues | TYPEOF(temp) <> TYPEOF(SELF.DefiningValues[1])))=0;\n\tWR3 : SIZEOF(QUERY(temp <* SELF.DefinedValues | TYPEOF(temp) <> TYPEOF(SELF.DefinedValues[1])))=0;\nEND_ENTITY;\n\nENTITY IfcProtectiveDeviceType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcProtectiveDeviceTypeEnum;\nEND_ENTITY;\n\nENTITY IfcProxy\n SUBTYPE OF (IfcProduct);\n\tProxyType : IfcObjectTypeEnum;\n\tTag : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcPumpType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcPumpTypeEnum;\nEND_ENTITY;\n\nENTITY IfcQuantityArea\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tAreaValue : IfcAreaMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.AREAUNIT);\n\tWR22 : AreaValue >= 0;\nEND_ENTITY;\n\nENTITY IfcQuantityCount\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tCountValue : IfcCountMeasure;\n WHERE\n\tWR1 : CountValue >= 0;\nEND_ENTITY;\n\nENTITY IfcQuantityLength\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tLengthValue : IfcLengthMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.LENGTHUNIT);\n\tWR22 : LengthValue >= 0;\nEND_ENTITY;\n\nENTITY IfcQuantityTime\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tTimeValue : IfcTimeMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.TIMEUNIT);\n\tWR22 : TimeValue >= 0;\nEND_ENTITY;\n\nENTITY IfcQuantityVolume\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tVolumeValue : IfcVolumeMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.VOLUMEUNIT);\n\tWR22 : VolumeValue >= 0;\nEND_ENTITY;\n\nENTITY IfcQuantityWeight\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tWeightValue : IfcMassMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.MASSUNIT);\n\tWR22 : WeightValue >= 0;\nEND_ENTITY;\n\nENTITY IfcRadiusDimension\n SUBTYPE OF (IfcDimensionCurveDirectedCallout);\nEND_ENTITY;\n\nENTITY IfcRailing\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcRailingTypeEnum;\nEND_ENTITY;\n\nENTITY IfcRailingType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcRailingTypeEnum;\nEND_ENTITY;\n\nENTITY IfcRamp\n SUBTYPE OF (IfcBuildingElement);\n\tShapeType : IfcRampTypeEnum;\n WHERE\n\tWR1 : (HIINDEX(SELF\\IfcObject.IsDecomposedBy) = 0) OR ((HIINDEX(SELF\\IfcObject.IsDecomposedBy) = 1) AND (NOT(EXISTS(SELF\\IfcProduct.Representation))));\nEND_ENTITY;\n\nENTITY IfcRampFlight\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcRampFlightType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcRampFlightTypeEnum;\nEND_ENTITY;\n\nENTITY IfcRationalBezierCurve\n SUBTYPE OF (IfcBezierCurve);\n\tWeightsData : LIST [2:?] OF REAL;\n DERIVE\n\tWeights : ARRAY [0:255] OF REAL := IfcListToArray(WeightsData,0,SELF\\IfcBSplineCurve.UpperIndexOnControlPoints);\n WHERE\n\tWR1 : SIZEOF(WeightsData) = SIZEOF(SELF\\IfcBSplineCurve.ControlPointsList);\n\tWR2 : IfcCurveWeightsPositive(SELF);\nEND_ENTITY;\n\nENTITY IfcRectangleHollowProfileDef\n SUBTYPE OF (IfcRectangleProfileDef);\n\tWallThickness : IfcPositiveLengthMeasure;\n\tInnerFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tOuterFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : (WallThickness < (SELF\\IfcRectangleProfileDef.XDim / 2)) AND \n            (WallThickness < (SELF\\IfcRectangleProfileDef.YDim / 2));\n\tWR2 : NOT(EXISTS(OuterFilletRadius)) OR \n            ((OuterFilletRadius <= (SELF\\IfcRectangleProfileDef.XDim / 2)) AND \n             (OuterFilletRadius <= (SELF\\IfcRectangleProfileDef.YDim / 2)));\n\tWR3 : NOT(EXISTS(InnerFilletRadius)) OR \n            ((InnerFilletRadius <= (SELF\\IfcRectangleProfileDef.XDim / 2 - WallThickness)) AND \n             (InnerFilletRadius <= (SELF\\IfcRectangleProfileDef.YDim / 2 - WallThickness)));\nEND_ENTITY;\n\nENTITY IfcRectangleProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcRectangleHollowProfileDef\n\t,IfcRoundedRectangleProfileDef))\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRectangularTrimmedSurface\n SUBTYPE OF (IfcBoundedSurface);\n\tBasisSurface : IfcSurface;\n\tU1 : IfcParameterValue;\n\tV1 : IfcParameterValue;\n\tU2 : IfcParameterValue;\n\tV2 : IfcParameterValue;\n\tUsense : BOOLEAN;\n\tVsense : BOOLEAN;\n DERIVE\n\tDim : IfcDimensionCount := BasisSurface.Dim;\n WHERE\n\tWR1 : U1 <> U2;\n\tWR2 : V1 <> V2;\n\tWR3 : (('IFC2X2_FINAL.IFCELEMENTARYSURFACE' IN TYPEOF(BasisSurface)) AND\n                     (NOT ('IFC2X2_FINAL.IFCPLANE' IN TYPEOF(BasisSurface)))) OR\n                     ('IFC2X2_FINAL.IFCSURFACEOFREVOLUTION' IN TYPEOF(BasisSurface)) OR\n                     (Usense = (U2 > U1));\n\tWR4 : Vsense = (V2 > V1);\nEND_ENTITY;\n\nENTITY IfcReferencesValueDocument;\n\tReferencedDocument : IfcDocumentSelect;\n\tReferencingValues : SET [1:?] OF IfcAppliedValue;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcRegularTimeSeries\n SUBTYPE OF (IfcTimeSeries);\n\tTimeStep : IfcTimeMeasure;\n\tValues : LIST [1:?] OF IfcTimeSeriesValue;\nEND_ENTITY;\n\nENTITY IfcReinforcementBarProperties;\n\tTotalCrossSectionArea : IfcAreaMeasure;\n\tSteelGrade : IfcLabel;\n\tBarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;\n\tEffectiveDepth : OPTIONAL IfcLengthMeasure;\n\tNominalBarDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tBarCount : OPTIONAL IfcCountMeasure;\nEND_ENTITY;\n\nENTITY IfcReinforcementDefinitionProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tDefinitionType : OPTIONAL IfcLabel;\n\tReinforcementSectionDefinitions : LIST [1:?] OF IfcSectionReinforcementProperties;\nEND_ENTITY;\n\nENTITY IfcReinforcingBar\n SUBTYPE OF (IfcReinforcingElement);\n\tNominalDiameter : IfcPositiveLengthMeasure;\n\tCrossSectionArea : IfcAreaMeasure;\n\tBarLength : OPTIONAL IfcPositiveLengthMeasure;\n\tBarRole : IfcReinforcingBarRoleEnum;\n\tBarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;\n WHERE\n\tWR1 : (BarRole <> IfcReinforcingBarRoleEnum.USERDEFINED) OR ((BarRole = IfcReinforcingBarRoleEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcReinforcingElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcReinforcingBar\n\t,IfcReinforcingMesh\n\t,IfcTendon\n\t,IfcTendonAnchor))\n SUBTYPE OF (IfcBuildingElementComponent);\n\tSteelGrade : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcReinforcingMesh\n SUBTYPE OF (IfcReinforcingElement);\n\tMeshLength : OPTIONAL IfcPositiveLengthMeasure;\n\tMeshWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tLongitudinalBarNominalDiameter : IfcPositiveLengthMeasure;\n\tTransverseBarNominalDiameter : IfcPositiveLengthMeasure;\n\tLongitudinalBarCrossSectionArea : IfcAreaMeasure;\n\tTransverseBarCrossSectionArea : IfcAreaMeasure;\n\tLongitudinalBarSpacing : IfcPositiveLengthMeasure;\n\tTransverseBarSpacing : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRelAggregates\n SUBTYPE OF (IfcRelDecomposes);\nEND_ENTITY;\n\nENTITY IfcRelAssigns\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelAssignsToActor\n\t,IfcRelAssignsToControl\n\t,IfcRelAssignsToGroup\n\t,IfcRelAssignsToProcess\n\t,IfcRelAssignsToProduct\n\t,IfcRelAssignsToResource))\n SUBTYPE OF (IfcRelationship);\n\tRelatedObjects : SET [1:?] OF IfcObject;\n\tRelatedObjectsType : OPTIONAL IfcObjectTypeEnum;\n WHERE\n\tWR1 : IfcCorrectObjectAssignment(RelatedObjectsType, RelatedObjects);\nEND_ENTITY;\n\nENTITY IfcRelAssignsTasks\n SUBTYPE OF (IfcRelAssignsToControl);\n\tTimeForTask : OPTIONAL IfcScheduleTimeControl;\n WHERE\n\tWR1 : HIINDEX(SELF\\IfcRelAssigns.RelatedObjects) = 1;\n\tWR2 : 'IFC2X2_FINAL.IFCTASK' IN TYPEOF(SELF\\IfcRelAssigns.RelatedObjects[1]);\n\tWR3 : 'IFC2X2_FINAL.IFCWORKCONTROL' IN TYPEOF(SELF\\IfcRelAssignsToControl.RelatingControl);\nEND_ENTITY;\n\nENTITY IfcRelAssignsToActor\n SUPERTYPE OF (ONEOF\n\t(IfcRelOccupiesSpaces))\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingActor : IfcActor;\n\tActingRole : OPTIONAL IfcActorRole;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingActor :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToControl\n SUPERTYPE OF (ONEOF\n\t(IfcRelAssignsTasks\n\t,IfcRelAssignsToProjectOrder\n\t,IfcRelSchedulesCostItems))\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingControl : IfcControl;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingControl :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToGroup\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingGroup : IfcGroup;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingGroup :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToProcess\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingProcess : IfcProcess;\n\tQuantityInProcess : OPTIONAL IfcMeasureWithUnit;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingProcess :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToProduct\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingProduct : IfcProduct;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingProduct :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToProjectOrder\n SUBTYPE OF (IfcRelAssignsToControl);\nEND_ENTITY;\n\nENTITY IfcRelAssignsToResource\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingResource : IfcResource;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingResource :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssociates\n SUPERTYPE OF (ONEOF\n\t(IfcRelAssociatesAppliedValue\n\t,IfcRelAssociatesApproval\n\t,IfcRelAssociatesClassification\n\t,IfcRelAssociatesConstraint\n\t,IfcRelAssociatesDocument\n\t,IfcRelAssociatesLibrary\n\t,IfcRelAssociatesMaterial\n\t,IfcRelAssociatesProfileProperties))\n SUBTYPE OF (IfcRelationship);\n\tRelatedObjects : SET [1:?] OF IfcRoot;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* RelatedObjects |\n             NOT(('IFC2X2_FINAL.IFCOBJECT' IN TYPEOF(temp)) \n              OR ('IFC2X2_FINAL.IFCPROPERTYDEFINITION' IN TYPEOF(temp)))\n             )) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesAppliedValue\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingAppliedValue : IfcAppliedValue;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesApproval\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingApproval : IfcApproval;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesClassification\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingClassification : IfcClassificationNotationSelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesConstraint\n SUBTYPE OF (IfcRelAssociates);\n\tIntent : IfcLabel;\n\tRelatingConstraint : IfcConstraint;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesDocument\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingDocument : IfcDocumentSelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesLibrary\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingLibrary : IfcLibrarySelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesMaterial\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingMaterial : IfcMaterialSelect;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* SELF\\IfcRelAssociates.RelatedObjects | \n            ('IFC2X2_FINAL.IFCFEATUREELEMENTSUBTRACTION' IN TYPEOF(temp))\n              OR ('IFC2X2_FINAL.IFCVIRTUALELEMENT' IN TYPEOF(temp))\n            )) = 0;\n\tWR2 : SIZEOF(QUERY(temp <* SELF\\IfcRelAssociates.RelatedObjects | \n            NOT(\n            ('IFC2X2_FINAL.IFCPRODUCT' IN TYPEOF(temp)) OR\n            ('IFC2X2_FINAL.IFCTYPEPRODUCT' IN TYPEOF(temp))\n            ))) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesProfileProperties\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingProfileProperties : IfcProfileProperties;\n\tProfileSectionLocation : OPTIONAL IfcShapeAspect;\nEND_ENTITY;\n\nENTITY IfcRelConnects\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelConnectsElements\n\t,IfcRelConnectsPortToElement\n\t,IfcRelConnectsPorts\n\t,IfcRelConnectsStructuralActivity\n\t,IfcRelConnectsStructuralMember\n\t,IfcRelContainedInSpatialStructure\n\t,IfcRelCoversBldgElements\n\t,IfcRelFillsElement\n\t,IfcRelFlowControlElements\n\t,IfcRelInteractionRequirements\n\t,IfcRelProjectsElement\n\t,IfcRelSequence\n\t,IfcRelServicesBuildings\n\t,IfcRelSpaceBoundary\n\t,IfcRelVoidsElement))\n SUBTYPE OF (IfcRelationship);\nEND_ENTITY;\n\nENTITY IfcRelConnectsElements\n SUPERTYPE OF (ONEOF\n\t(IfcRelConnectsPathElements\n\t,IfcRelConnectsWithRealizingElements))\n SUBTYPE OF (IfcRelConnects);\n\tConnectionGeometry : OPTIONAL IfcConnectionGeometry;\n\tRelatingElement : IfcElement;\n\tRelatedElement : IfcElement;\n WHERE\n\tWR31 : RelatingElement :<>: RelatedElement;\nEND_ENTITY;\n\nENTITY IfcRelConnectsPathElements\n SUBTYPE OF (IfcRelConnectsElements);\n\tRelatingPriorities : LIST [0:?] OF INTEGER;\n\tRelatedPriorities : LIST [0:?] OF INTEGER;\n\tRelatedConnectionType : IfcConnectionTypeEnum;\n\tRelatingConnectionType : IfcConnectionTypeEnum;\n DERIVE\n\tRelatedLayerCount : INTEGER := IfcNoOfLayers(SELF\\IfcRelConnectsElements.RelatedElement);\n\tRelatingLayerCount : INTEGER := IfcNoOfLayers(SELF\\IfcRelConnectsElements.RelatingElement);\nEND_ENTITY;\n\nENTITY IfcRelConnectsPortToElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingPort : IfcPort;\n\tRelatedElement : IfcElement;\nEND_ENTITY;\n\nENTITY IfcRelConnectsPorts\n SUBTYPE OF (IfcRelConnects);\n\tRelatingPort : IfcPort;\n\tRelatedPort : IfcPort;\n\tRealizingElement : OPTIONAL IfcElement;\nEND_ENTITY;\n\nENTITY IfcRelConnectsStructuralActivity\n SUBTYPE OF (IfcRelConnects);\n\tRelatingElement : IfcStructuralActivityAssignmentSelect;\n\tRelatedStructuralActivity : IfcStructuralActivity;\nEND_ENTITY;\n\nENTITY IfcRelConnectsStructuralMember\n SUBTYPE OF (IfcRelConnects);\n\tRelatingStructuralMember : IfcStructuralMember;\n\tRelatedStructuralConnection : IfcStructuralConnection;\n\tAppliedCondition : OPTIONAL IfcBoundaryCondition;\n\tAdditionalConditions : OPTIONAL IfcStructuralConnectionCondition;\n\tSupportedLength : OPTIONAL IfcLengthMeasure;\n\tConditionCoordinateSystem : OPTIONAL IfcAxis2Placement3D;\nEND_ENTITY;\n\nENTITY IfcRelConnectsWithRealizingElements\n SUBTYPE OF (IfcRelConnectsElements);\n\tRealizingElements : SET [1:?] OF IfcElement;\n\tConnectionType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcRelContainedInSpatialStructure\n SUBTYPE OF (IfcRelConnects);\n\tRelatedElements : SET [1:?] OF IfcProduct;\n\tRelatingStructure : IfcSpatialStructureElement;\n WHERE\n\tWR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC2X2_FINAL.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcRelCoversBldgElements\n SUBTYPE OF (IfcRelConnects);\n\tRelatingBuildingElement : IfcElement;\n\tRelatedCoverings : SET [1:?] OF IfcCovering;\nEND_ENTITY;\n\nENTITY IfcRelDecomposes\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelAggregates\n\t,IfcRelNests))\n SUBTYPE OF (IfcRelationship);\n\tRelatingObject : IfcObject;\n\tRelatedObjects : SET [1:?] OF IfcObject;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* RelatedObjects | RelatingObject :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelDefines\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelDefinesByProperties\n\t,IfcRelDefinesByType))\n SUBTYPE OF (IfcRelationship);\n\tRelatedObjects : SET [1:?] OF IfcObject;\nEND_ENTITY;\n\nENTITY IfcRelDefinesByProperties\n SUPERTYPE OF (ONEOF\n\t(IfcRelOverridesProperties))\n SUBTYPE OF (IfcRelDefines);\n\tRelatingPropertyDefinition : IfcPropertySetDefinition;\nEND_ENTITY;\n\nENTITY IfcRelDefinesByType\n SUBTYPE OF (IfcRelDefines);\n\tRelatingType : IfcTypeObject;\nEND_ENTITY;\n\nENTITY IfcRelFillsElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingOpeningElement : IfcOpeningElement;\n\tRelatedBuildingElement : IfcElement;\nEND_ENTITY;\n\nENTITY IfcRelFlowControlElements\n SUBTYPE OF (IfcRelConnects);\n\tRelatedControlElements : SET [1:?] OF IfcDistributionControlElement;\n\tRelatingFlowElement : IfcDistributionFlowElement;\nEND_ENTITY;\n\nENTITY IfcRelInteractionRequirements\n SUBTYPE OF (IfcRelConnects);\n\tDailyInteraction : OPTIONAL IfcCountMeasure;\n\tImportanceRating : OPTIONAL IfcNormalisedRatioMeasure;\n\tLocationOfInteraction : OPTIONAL IfcSpatialStructureElement;\n\tRelatedSpaceProgram : IfcSpaceProgram;\n\tRelatingSpaceProgram : IfcSpaceProgram;\nEND_ENTITY;\n\nENTITY IfcRelNests\n SUBTYPE OF (IfcRelDecomposes);\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelDecomposes.RelatedObjects | \n              NOT(TYPEOF(SELF\\IfcRelDecomposes.RelatingObject) = TYPEOF(Temp)))) = 0;\nEND_ENTITY;\n\nENTITY IfcRelOccupiesSpaces\n SUBTYPE OF (IfcRelAssignsToActor);\nEND_ENTITY;\n\nENTITY IfcRelOverridesProperties\n SUBTYPE OF (IfcRelDefinesByProperties);\n\tOverridingProperties : SET [1:?] OF IfcProperty;\n WHERE\n\tWR1 : SIZEOF(SELF\\IfcRelDefines.RelatedObjects) = 1;\nEND_ENTITY;\n\nENTITY IfcRelProjectsElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingElement : IfcElement;\n\tRelatedFeatureElement : IfcFeatureElementAddition;\nEND_ENTITY;\n\nENTITY IfcRelSchedulesCostItems\n SUBTYPE OF (IfcRelAssignsToControl);\n WHERE\n\tWR11 : SIZEOF(QUERY(temp <* SELF\\IfcRelAssigns.RelatedObjects |\n               NOT('IFC2X2_FINAL.IFCCOSTITEM' IN TYPEOF(temp))\n               )) = 0;\n\tWR12 : 'IFC2X2_FINAL.IFCCOSTSCHEDULE' IN TYPEOF (SELF\\IfcRelAssignsToControl.RelatingControl);\nEND_ENTITY;\n\nENTITY IfcRelSequence\n SUBTYPE OF (IfcRelConnects);\n\tRelatingProcess : IfcProcess;\n\tRelatedProcess : IfcProcess;\n\tTimeLag : IfcTimeMeasure;\n\tSequenceType : IfcSequenceEnum;\n WHERE\n\tWR1 : RelatingProcess :<>: RelatedProcess;\nEND_ENTITY;\n\nENTITY IfcRelServicesBuildings\n SUBTYPE OF (IfcRelConnects);\n\tRelatingSystem : IfcSystem;\n\tRelatedBuildings : SET [1:?] OF IfcSpatialStructureElement;\nEND_ENTITY;\n\nENTITY IfcRelSpaceBoundary\n SUBTYPE OF (IfcRelConnects);\n\tRelatingSpace : IfcSpace;\n\tRelatedBuildingElement : OPTIONAL IfcElement;\n\tConnectionGeometry : OPTIONAL IfcConnectionGeometry;\n\tPhysicalOrVirtualBoundary : IfcPhysicalOrVirtualEnum;\n\tInternalOrExternalBoundary : IfcInternalOrExternalEnum;\n WHERE\n\tWR1 : ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Physical) AND \n              (EXISTS(RelatedBuildingElement) AND NOT('IFC2X2_FINAL.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) \n            OR \n            ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Virtual) AND \n              (NOT(EXISTS(RelatedBuildingElement)) OR ('IFC2X2_FINAL.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) \n            OR \n             (PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.NotDefined);\nEND_ENTITY;\n\nENTITY IfcRelVoidsElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingBuildingElement : IfcElement;\n\tRelatedOpeningElement : IfcFeatureElementSubtraction;\nEND_ENTITY;\n\nENTITY IfcRelationship\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelAssigns\n\t,IfcRelAssociates\n\t,IfcRelConnects\n\t,IfcRelDecomposes\n\t,IfcRelDefines))\n SUBTYPE OF (IfcRoot);\nEND_ENTITY;\n\nENTITY IfcRelaxation;\n\tRelaxationValue : IfcNormalisedRatioMeasure;\n\tInitialStress : IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcRepresentation\n SUPERTYPE OF (ONEOF\n\t(IfcShapeRepresentation\n\t,IfcStyledRepresentation\n\t,IfcTopologyRepresentation));\n\tContextOfItems : IfcRepresentationContext;\n\tRepresentationIdentifier : OPTIONAL IfcLabel;\n\tRepresentationType : OPTIONAL IfcLabel;\n\tItems : SET [1:?] OF IfcRepresentationItem;\n INVERSE\n\tOfProductRepresentation : SET [0:1] OF IfcProductRepresentation FOR Representations;\nEND_ENTITY;\n\nENTITY IfcRepresentationContext\n SUPERTYPE OF (ONEOF\n\t(IfcGeometricRepresentationContext));\n\tContextIdentifier : OPTIONAL IfcLabel;\n\tContextType : OPTIONAL IfcLabel;\n INVERSE\n\tRepresentationsInContext : SET [0:?] OF IfcRepresentation FOR ContextOfItems;\nEND_ENTITY;\n\nENTITY IfcRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcGeometricRepresentationItem\n\t,IfcMappedItem\n\t,IfcStyledItem\n\t,IfcTopologicalRepresentationItem));\nEND_ENTITY;\n\nENTITY IfcRepresentationMap;\n\tMappingOrigin : IfcAxis2Placement;\n\tMappedRepresentation : IfcRepresentation;\n INVERSE\n\tMapUsage : SET [0:?] OF IfcMappedItem FOR MappingSource;\nEND_ENTITY;\n\nENTITY IfcResource\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConstructionResource))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tResourceOf : SET [0:?] OF IfcRelAssignsToResource FOR RelatingResource;\nEND_ENTITY;\n\nENTITY IfcRevolvedAreaSolid\n SUBTYPE OF (IfcSweptAreaSolid);\n\tAxis : IfcAxis1Placement;\n\tAngle : IfcPlaneAngleMeasure;\n DERIVE\n\tAxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(Axis.Location, \n                   IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Axis.Z,1.0));\n WHERE\n\tWR1 : Axis.Location.Coordinates[3] = 0.0;\n\tWR2 : Axis.Z.DirectionRatios[3] = 0.0;\nEND_ENTITY;\n\nENTITY IfcRibPlateProfileProperties\n SUBTYPE OF (IfcProfileProperties);\n\tThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tRibHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tRibWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tRibSpacing : OPTIONAL IfcPositiveLengthMeasure;\n\tDirection : IfcRibPlateDirectionEnum;\nEND_ENTITY;\n\nENTITY IfcRoof\n SUBTYPE OF (IfcBuildingElement);\n\tShapeType : IfcRoofTypeEnum;\n WHERE\n\tWR1 : (HIINDEX(SELF\\IfcObject.IsDecomposedBy) = 0) OR \n            ((HIINDEX(SELF\\IfcObject.IsDecomposedBy) = 1) AND (NOT(EXISTS(SELF\\IfcProduct.Representation))));\nEND_ENTITY;\n\nENTITY IfcRoot\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcObject\n\t,IfcPropertyDefinition\n\t,IfcRelationship));\n\tGlobalId : IfcGloballyUniqueId;\n\tOwnerHistory : IfcOwnerHistory;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n UNIQUE\n\tUR1 : GlobalId;\nEND_ENTITY;\n\nENTITY IfcRoundedEdgeFeature\n SUBTYPE OF (IfcEdgeFeature);\n\tRadius : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRoundedRectangleProfileDef\n SUBTYPE OF (IfcRectangleProfileDef);\n\tRoundingRadius : IfcPositiveLengthMeasure;\n WHERE\n\tWR21 : ((RoundingRadius <= (SELF\\IfcRectangleProfileDef.XDim/2)) AND \n              (RoundingRadius <= (SELF\\IfcRectangleProfileDef.YDim/2)));\nEND_ENTITY;\n\nENTITY IfcSIUnit\n SUBTYPE OF (IfcNamedUnit);\n\tPrefix : OPTIONAL IfcSIPrefix;\n\tName : IfcSIUnitName;\n DERIVE\n\tSELF\\IfcNamedUnit.Dimensions : IfcDimensionalExponents := IfcDimensionsForSiUnit (SELF.Name);\nEND_ENTITY;\n\nENTITY IfcSanitaryTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcSanitaryTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcScheduleTimeControl\n SUBTYPE OF (IfcControl);\n\tActualStart : OPTIONAL IfcDateTimeSelect;\n\tEarlyStart : OPTIONAL IfcDateTimeSelect;\n\tLateStart : OPTIONAL IfcDateTimeSelect;\n\tScheduleStart : OPTIONAL IfcDateTimeSelect;\n\tActualFinish : OPTIONAL IfcDateTimeSelect;\n\tEarlyFinish : OPTIONAL IfcDateTimeSelect;\n\tLateFinish : OPTIONAL IfcDateTimeSelect;\n\tScheduleFinish : OPTIONAL IfcDateTimeSelect;\n\tScheduleDuration : OPTIONAL IfcTimeMeasure;\n\tActualDuration : OPTIONAL IfcTimeMeasure;\n\tRemainingTime : OPTIONAL IfcTimeMeasure;\n\tFreeFloat : OPTIONAL IfcTimeMeasure;\n\tTotalFloat : OPTIONAL IfcTimeMeasure;\n\tIsCritical : OPTIONAL BOOLEAN;\n\tStatusTime : OPTIONAL IfcDateTimeSelect;\n\tStartFloat : OPTIONAL IfcTimeMeasure;\n\tFinishFloat : OPTIONAL IfcTimeMeasure;\n\tCompletion : OPTIONAL IfcPositiveRatioMeasure;\n INVERSE\n\tScheduleTimeControlAssigned : IfcRelAssignsTasks FOR TimeForTask;\nEND_ENTITY;\n\nENTITY IfcSectionProperties;\n\tSectionType : IfcSectionTypeEnum;\n\tStartProfile : IfcProfileDef;\n\tEndProfile : OPTIONAL IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcSectionReinforcementProperties;\n\tLongitudinalStartPosition : IfcLengthMeasure;\n\tLongitudinalEndPosition : IfcLengthMeasure;\n\tTransversePosition : OPTIONAL IfcLengthMeasure;\n\tReinforcementRole : IfcReinforcingBarRoleEnum;\n\tSectionDefinition : IfcSectionProperties;\n\tCrossSectionReinforcementDefinitions : SET [1:?] OF IfcReinforcementBarProperties;\nEND_ENTITY;\n\nENTITY IfcSectionedSpine\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSpineCurve : IfcCompositeCurve;\n\tCrossSections : LIST [2:?] OF IfcProfileDef;\n\tCrossSectionPositions : LIST [2:?] OF IfcAxis2Placement3D;\n DERIVE\n\tDim : IfcDimensionCount := 3;\n WHERE\n\tWR1 : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions);\n\tWR2 : SIZEOF(QUERY(temp <* CrossSections | CrossSections[1].ProfileType <> temp.ProfileType)) = 0;\n\tWR3 : SpineCurve.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcSensorType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcSensorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcServiceLife\n SUBTYPE OF (IfcControl);\n\tServiceLifeType : IfcServiceLifeTypeEnum;\n\tServiceLifeDuration : IfcTimeMeasure;\nEND_ENTITY;\n\nENTITY IfcServiceLifeFactor\n SUBTYPE OF (IfcPropertySetDefinition);\n\tPredefinedType : IfcServiceLifeFactorTypeEnum;\n\tUpperValue : OPTIONAL IfcMeasureValue;\n\tMostUsedValue : IfcMeasureValue;\n\tLowerValue : OPTIONAL IfcMeasureValue;\n WHERE\n\tWR31 : NOT(PredefinedType = IfcServiceLifeFactorTypeEnum.USERDEFINED) \n           OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcShapeAspect;\n\tShapeRepresentations : LIST [1:?] OF IfcShapeRepresentation;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tProductDefinitional : LOGICAL;\n\tPartOfProductDefinitionShape : IfcProductDefinitionShape;\nEND_ENTITY;\n\nENTITY IfcShapeRepresentation\n SUBTYPE OF (IfcRepresentation);\n INVERSE\n\tOfShapeAspect : SET [0:1] OF IfcShapeAspect FOR ShapeRepresentations;\n WHERE\n\tWR21 : 'IFC2X2_FINAL.IFCGEOMETRICREPRESENTATIONCONTEXT' \n             IN TYPEOF(SELF\\IfcRepresentation.ContextOfItems);\n\tWR22 : SIZEOF(QUERY(temp <* Items | \n               ('IFC2X2_FINAL.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))\n                 AND (NOT(SIZEOF(\n                   ['IFC2X2_FINAL.IFCVERTEXPOINT',\n                    'IFC2X2_FINAL.IFCEDGECURVE',\n                    'IFC2X2_FINAL.IFCFACESURFACE'] * TYPEOF(temp)) = 1))\n             )) = 0;\n\tWR23 : EXISTS(SELF\\IfcRepresentation.RepresentationType);\n\tWR24 : IfcShapeRepresentationTypes(SELF\\IfcRepresentation.RepresentationType, SELF\\IfcRepresentation.Items);\nEND_ENTITY;\n\nENTITY IfcShellBasedSurfaceModel\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSbsmBoundary : SET [1:?] OF IfcShell;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcSimpleProperty\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPropertyBoundedValue\n\t,IfcPropertyEnumeratedValue\n\t,IfcPropertyListValue\n\t,IfcPropertyReferenceValue\n\t,IfcPropertySingleValue\n\t,IfcPropertyTableValue))\n SUBTYPE OF (IfcProperty);\nEND_ENTITY;\n\nENTITY IfcSite\n SUBTYPE OF (IfcSpatialStructureElement);\n\tRefLatitude : OPTIONAL IfcCompoundPlaneAngleMeasure;\n\tRefLongitude : OPTIONAL IfcCompoundPlaneAngleMeasure;\n\tRefElevation : OPTIONAL IfcLengthMeasure;\n\tLandTitleNumber : OPTIONAL IfcLabel;\n\tSiteAddress : OPTIONAL IfcPostalAddress;\nEND_ENTITY;\n\nENTITY IfcSlab\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcSlabTypeEnum;\n WHERE\n\tWR2 : (PredefinedType <> IfcSlabTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcSlabTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcSlabType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcSlabTypeEnum;\nEND_ENTITY;\n\nENTITY IfcSlippageConnectionCondition\n SUBTYPE OF (IfcStructuralConnectionCondition);\n\tSlippageX : OPTIONAL IfcLengthMeasure;\n\tSlippageY : OPTIONAL IfcLengthMeasure;\n\tSlippageZ : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcSolidModel\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCsgSolid\n\t,IfcManifoldSolidBrep\n\t,IfcSweptAreaSolid\n\t,IfcSweptDiskSolid))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcSoundProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tIsAttenuating : IfcBoolean;\n\tSoundScale : OPTIONAL IfcSoundScaleEnum;\n\tPointOfMeasurement : OPTIONAL IfcLocalPlacement;\n\tSoundValues : LIST [1:8] OF IfcSoundValue;\nEND_ENTITY;\n\nENTITY IfcSoundValue\n SUBTYPE OF (IfcPropertySetDefinition);\n\tSoundLevelTimeSeries : OPTIONAL IfcTimeSeries;\n\tFrequency : IfcFrequencyMeasure;\n\tSoundLevelSingleValue : OPTIONAL IfcDerivedMeasureValue;\nEND_ENTITY;\n\nENTITY IfcSpace\n SUBTYPE OF (IfcSpatialStructureElement);\n\tInteriorOrExteriorSpace : IfcInternalOrExternalEnum;\n\tElevationWithFlooring : OPTIONAL IfcLengthMeasure;\n INVERSE\n\tBoundedBy : SET [0:?] OF IfcRelSpaceBoundary FOR RelatingSpace;\nEND_ENTITY;\n\nENTITY IfcSpaceHeaterType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcSpaceHeaterTypeEnum;\nEND_ENTITY;\n\nENTITY IfcSpaceProgram\n SUBTYPE OF (IfcControl);\n\tSpaceProgramIdentifier : IfcIdentifier;\n\tMaxRequiredArea : OPTIONAL IfcAreaMeasure;\n\tMinRequiredArea : OPTIONAL IfcAreaMeasure;\n\tRequestedLocation : OPTIONAL IfcSpatialStructureElement;\n\tStandardRequiredArea : IfcAreaMeasure;\n INVERSE\n\tHasInteractionReqsFrom : SET [0:?] OF IfcRelInteractionRequirements FOR RelatedSpaceProgram;\n\tHasInteractionReqsTo : SET [0:?] OF IfcRelInteractionRequirements FOR RelatingSpaceProgram;\nEND_ENTITY;\n\nENTITY IfcSpaceThermalLoadProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tApplicableValueRatio : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalLoadSource : IfcThermalLoadSourceEnum;\n\tPropertySource : IfcPropertySourceEnum;\n\tSourceDescription : OPTIONAL IfcText;\n\tMaximumValue : IfcPowerMeasure;\n\tMinimumValue : OPTIONAL IfcPowerMeasure;\n\tThermalLoadTimeSeriesValues : OPTIONAL IfcTimeSeries;\n\tUserDefinedThermalLoadSource : OPTIONAL IfcLabel;\n\tUserDefinedPropertySource : OPTIONAL IfcLabel;\n\tThermalLoadType : IfcThermalLoadTypeEnum;\nEND_ENTITY;\n\nENTITY IfcSpatialStructureElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuilding\n\t,IfcBuildingStorey\n\t,IfcSite\n\t,IfcSpace))\n SUBTYPE OF (IfcProduct);\n\tLongName : OPTIONAL IfcLabel;\n\tCompositionType : IfcElementCompositionEnum;\n INVERSE\n\tServicedBySystems : SET [0:?] OF IfcRelServicesBuildings FOR RelatedBuildings;\n\tContainsElements : SET [0:?] OF IfcRelContainedInSpatialStructure FOR RelatingStructure;\n WHERE\n\tWR41 : (HIINDEX(SELF\\IfcObject.Decomposes) = 1) \n             AND\n             ('IFC2X2_FINAL.IFCRELAGGREGATES' IN TYPEOF(SELF\\IfcObject.Decomposes[1])) \n             AND\n             (('IFC2X2_FINAL.IFCPROJECT' IN TYPEOF (SELF\\IfcObject.Decomposes[1].RelatingObject)) OR\n              ('IFC2X2_FINAL.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF (SELF\\IfcObject.Decomposes[1].RelatingObject))\n             );\nEND_ENTITY;\n\nENTITY IfcStackTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcStackTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcStair\n SUBTYPE OF (IfcBuildingElement);\n\tShapeType : IfcStairTypeEnum;\n WHERE\n\tWR1 : (HIINDEX(SELF\\IfcObject.IsDecomposedBy) = 0) OR ((HIINDEX(SELF\\IfcObject.IsDecomposedBy) = 1) AND (NOT(EXISTS(SELF\\IfcProduct.Representation))));\nEND_ENTITY;\n\nENTITY IfcStairFlight\n SUBTYPE OF (IfcBuildingElement);\n\tNumberOfRiser : OPTIONAL INTEGER;\n\tNumberOfTreads : OPTIONAL INTEGER;\n\tRiserHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tTreadLength : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcStairFlightType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcStairFlightTypeEnum;\nEND_ENTITY;\n\nENTITY IfcStructuralAction\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralLinearAction\n\t,IfcStructuralPlanarAction\n\t,IfcStructuralPointAction))\n SUBTYPE OF (IfcStructuralActivity);\n\tDestabilizingLoad : BOOLEAN;\n\tProjectedOrTrue : IfcProjectedOrTrueLengthEnum;\n\tCausedBy : OPTIONAL IfcStructuralReaction;\nEND_ENTITY;\n\nENTITY IfcStructuralActivity\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralAction\n\t,IfcStructuralReaction))\n SUBTYPE OF (IfcProduct);\n\tAppliedLoad : IfcStructuralLoad;\n\tGlobalOrLocal : IfcGlobalOrLocalEnum;\n INVERSE\n\tAssignedToStructuralItem : IfcRelConnectsStructuralActivity FOR RelatedStructuralActivity;\nEND_ENTITY;\n\nENTITY IfcStructuralAnalysisModel\n SUBTYPE OF (IfcSystem);\n\tPredefinedType : IfcAnalysisModelTypeEnum;\n\tOrientationOf2DPlane : OPTIONAL IfcAxis2Placement3D;\n\tLoadedBy : OPTIONAL SET [1:?] OF IfcStructuralLoadGroup;\n\tHasResults : OPTIONAL SET [1:?] OF IfcStructuralResultGroup;\nEND_ENTITY;\n\nENTITY IfcStructuralConnection\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralCurveConnection\n\t,IfcStructuralPointConnection\n\t,IfcStructuralSurfaceConnection))\n SUBTYPE OF (IfcStructuralItem);\n\tAppliedCondition : OPTIONAL IfcBoundaryCondition;\n INVERSE\n\tConnectsStructuralMembers : SET [1:?] OF IfcRelConnectsStructuralMember FOR RelatedStructuralConnection;\nEND_ENTITY;\n\nENTITY IfcStructuralConnectionCondition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcFailureConnectionCondition\n\t,IfcSlippageConnectionCondition));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcStructuralCurveConnection\n SUBTYPE OF (IfcStructuralConnection);\nEND_ENTITY;\n\nENTITY IfcStructuralCurveMember\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralCurveMemberVarying))\n SUBTYPE OF (IfcStructuralMember);\n\tPredefinedType : IfcStructuralCurveTypeEnum;\nEND_ENTITY;\n\nENTITY IfcStructuralCurveMemberVarying\n SUBTYPE OF (IfcStructuralCurveMember);\nEND_ENTITY;\n\nENTITY IfcStructuralItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralConnection\n\t,IfcStructuralMember))\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tAssignedStructuralActivity : SET [0:?] OF IfcRelConnectsStructuralActivity FOR RelatingElement;\nEND_ENTITY;\n\nENTITY IfcStructuralLinearAction\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralLinearActionVarying))\n SUBTYPE OF (IfcStructuralAction);\n WHERE\n\tWR61 : SIZEOF(['IFC2X2_FINAL.IFCSTRUCTURALLOADLINEARFORCE',\n                     'IFC2X2_FINAL.IFCSTRUCTURALLOADTEMPERATURE']\n             * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralLinearActionVarying\n SUBTYPE OF (IfcStructuralLinearAction);\n\tVaryingAppliedLoadLocation : IfcShapeAspect;\n\tSubsequentAppliedLoads : LIST [1:?] OF IfcStructuralLoad;\n DERIVE\n\tVaryingAppliedLoads : LIST [2:?] OF IfcStructuralLoad := IfcAddToBeginOfList(SELF\\IfcStructuralActivity.AppliedLoad, SubsequentAppliedLoads);\nEND_ENTITY;\n\nENTITY IfcStructuralLoad\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadStatic));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadGroup\n SUBTYPE OF (IfcGroup);\n\tPredefinedType : IfcLoadGroupTypeEnum;\n\tActionType : IfcActionTypeEnum;\n\tActionSource : IfcActionSourceTypeEnum;\n\tCoefficient : OPTIONAL IfcPositiveRatioMeasure;\n\tPurpose : OPTIONAL IfcLabel;\n INVERSE\n\tSourceOfResultGroup : SET [0:1] OF IfcStructuralResultGroup FOR ResultForLoadGroup;\n\tLoadGroupFor : SET [0:?] OF IfcStructuralAnalysisModel FOR LoadedBy;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadLinearForce\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tLinearForceX : OPTIONAL IfcLinearForceMeasure;\n\tLinearForceY : OPTIONAL IfcLinearForceMeasure;\n\tLinearForceZ : OPTIONAL IfcLinearForceMeasure;\n\tLinearMomentX : OPTIONAL IfcLinearMomentMeasure;\n\tLinearMomentY : OPTIONAL IfcLinearMomentMeasure;\n\tLinearMomentZ : OPTIONAL IfcLinearMomentMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadPlanarForce\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tPlanarForceX : OPTIONAL IfcPlanarForceMeasure;\n\tPlanarForceY : OPTIONAL IfcPlanarForceMeasure;\n\tPlanarForceZ : OPTIONAL IfcPlanarForceMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleDisplacement\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadSingleDisplacementDistortion))\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tDisplacementX : OPTIONAL IfcLengthMeasure;\n\tDisplacementY : OPTIONAL IfcLengthMeasure;\n\tDisplacementZ : OPTIONAL IfcLengthMeasure;\n\tRotationalDisplacementRX : OPTIONAL IfcPlaneAngleMeasure;\n\tRotationalDisplacementRY : OPTIONAL IfcPlaneAngleMeasure;\n\tRotationalDisplacementRZ : OPTIONAL IfcPlaneAngleMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleDisplacementDistortion\n SUBTYPE OF (IfcStructuralLoadSingleDisplacement);\n\tDistortion : OPTIONAL IfcCurvatureMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleForce\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadSingleForceWarping))\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tForceX : OPTIONAL IfcForceMeasure;\n\tForceY : OPTIONAL IfcForceMeasure;\n\tForceZ : OPTIONAL IfcForceMeasure;\n\tMomentX : OPTIONAL IfcTorqueMeasure;\n\tMomentY : OPTIONAL IfcTorqueMeasure;\n\tMomentZ : OPTIONAL IfcTorqueMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleForceWarping\n SUBTYPE OF (IfcStructuralLoadSingleForce);\n\tWarpingMoment : OPTIONAL IfcWarpingMomentMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadStatic\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadLinearForce\n\t,IfcStructuralLoadPlanarForce\n\t,IfcStructuralLoadSingleDisplacement\n\t,IfcStructuralLoadSingleForce\n\t,IfcStructuralLoadTemperature))\n SUBTYPE OF (IfcStructuralLoad);\nEND_ENTITY;\n\nENTITY IfcStructuralLoadTemperature\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tDeltaT_Constant : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tDeltaT_Y : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tDeltaT_Z : OPTIONAL IfcThermodynamicTemperatureMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralMember\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralCurveMember\n\t,IfcStructuralSurfaceMember))\n SUBTYPE OF (IfcStructuralItem);\n INVERSE\n\tConnectedBy : SET [0:?] OF IfcRelConnectsStructuralMember FOR RelatingStructuralMember;\nEND_ENTITY;\n\nENTITY IfcStructuralPlanarAction\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralPlanarActionVarying))\n SUBTYPE OF (IfcStructuralAction);\n WHERE\n\tWR61 : SIZEOF(['IFC2X2_FINAL.IFCSTRUCTURALLOADPLANARFORCE',\n                     'IFC2X2_FINAL.IFCSTRUCTURALLOADTEMPERATURE']\n             * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralPlanarActionVarying\n SUBTYPE OF (IfcStructuralPlanarAction);\n\tVaryingAppliedLoadLocation : IfcShapeAspect;\n\tSubsequentAppliedLoads : LIST [2:?] OF IfcStructuralLoad;\n DERIVE\n\tVaryingAppliedLoads : LIST [3:?] OF IfcStructuralLoad := IfcAddToBeginOfList(SELF\\IfcStructuralActivity.AppliedLoad, SubsequentAppliedLoads);\nEND_ENTITY;\n\nENTITY IfcStructuralPointAction\n SUBTYPE OF (IfcStructuralAction);\n WHERE\n\tWR61 : SIZEOF(['IFC2X2_FINAL.IFCSTRUCTURALLOADSINGLEFORCE',\n                     'IFC2X2_FINAL.IFCSTRUCTURALLOADSINGLEDISPLACEMENT']\n             * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralPointConnection\n SUBTYPE OF (IfcStructuralConnection);\nEND_ENTITY;\n\nENTITY IfcStructuralPointReaction\n SUBTYPE OF (IfcStructuralReaction);\n WHERE\n\tWR61 : SIZEOF(['IFC2X2_FINAL.IFCSTRUCTURALLOADSINGLEFORCE',\n                     'IFC2X2_FINAL.IFCSTRUCTURALLOADSINGLEDISPLACEMENT']\n             * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralProfileProperties\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralSteelProfileProperties))\n SUBTYPE OF (IfcGeneralProfileProperties);\n\tTorsionalConstantX : OPTIONAL IfcMomentOfInertiaMeasure;\n\tMomentOfInertiaYZ : OPTIONAL IfcMomentOfInertiaMeasure;\n\tMomentOfInertiaY : OPTIONAL IfcMomentOfInertiaMeasure;\n\tMomentOfInertiaZ : OPTIONAL IfcMomentOfInertiaMeasure;\n\tWarpingConstant : OPTIONAL IfcWarpingConstantMeasure;\n\tShearCentreZ : OPTIONAL IfcLengthMeasure;\n\tShearCentreY : OPTIONAL IfcLengthMeasure;\n\tShearDeformationAreaZ : OPTIONAL IfcAreaMeasure;\n\tShearDeformationAreaY : OPTIONAL IfcAreaMeasure;\n\tMaximumSectionModulusY : OPTIONAL IfcSectionModulusMeasure;\n\tMinimumSectionModulusY : OPTIONAL IfcSectionModulusMeasure;\n\tMaximumSectionModulusZ : OPTIONAL IfcSectionModulusMeasure;\n\tMinimumSectionModulusZ : OPTIONAL IfcSectionModulusMeasure;\n\tTorsionalSectionModulus : OPTIONAL IfcSectionModulusMeasure;\n WHERE\n\tWR1 : NOT(EXISTS(ShearDeformationAreaY)) OR (ShearDeformationAreaY >= 0);\n\tWR2 : NOT(EXISTS(ShearDeformationAreaZ)) OR (ShearDeformationAreaZ >= 0);\nEND_ENTITY;\n\nENTITY IfcStructuralReaction\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralPointReaction))\n SUBTYPE OF (IfcStructuralActivity);\n INVERSE\n\tCauses : SET [0:?] OF IfcStructuralAction FOR CausedBy;\nEND_ENTITY;\n\nENTITY IfcStructuralResultGroup\n SUBTYPE OF (IfcGroup);\n\tTheoryType : IfcAnalysisTheoryTypeEnum;\n\tResultForLoadGroup : OPTIONAL IfcStructuralLoadGroup;\n\tIsLinear : BOOLEAN;\n INVERSE\n\tResultGroupFor : SET [0:1] OF IfcStructuralAnalysisModel FOR HasResults;\nEND_ENTITY;\n\nENTITY IfcStructuralSteelProfileProperties\n SUBTYPE OF (IfcStructuralProfileProperties);\n\tShearAreaZ : OPTIONAL IfcAreaMeasure;\n\tShearAreaY : OPTIONAL IfcAreaMeasure;\n\tPlasticShapeFactorY : OPTIONAL IfcPositiveRatioMeasure;\n\tPlasticShapeFactorZ : OPTIONAL IfcPositiveRatioMeasure;\n WHERE\n\tWR1 : NOT(EXISTS(ShearAreaY)) OR (ShearAreaY >= 0);\n\tWR2 : NOT(EXISTS(ShearAreaZ)) OR (ShearAreaZ >= 0);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceConnection\n SUBTYPE OF (IfcStructuralConnection);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceMember\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralSurfaceMemberVarying))\n SUBTYPE OF (IfcStructuralMember);\n\tPredefinedType : IfcStructuralSurfaceTypeEnum;\n\tThickness : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceMemberVarying\n SUBTYPE OF (IfcStructuralSurfaceMember);\n\tSubsequentThickness : LIST [2:?] OF IfcPositiveLengthMeasure;\n\tVaryingThicknessLocation : IfcShapeAspect;\n DERIVE\n\tVaryingThickness : LIST [3:?] OF IfcPositiveLengthMeasure := IfcAddToBeginOfList(SELF\\IfcStructuralSurfaceMember.Thickness, SubsequentThickness);\n WHERE\n\tWR61 : EXISTS(SELF\\IfcStructuralSurfaceMember.Thickness);\n\tWR62 : SIZEOF(QUERY(temp <* SELF.VaryingThicknessLocation.ShapeRepresentations |\n               NOT(SIZEOF(temp\\IfcRepresentation.Items) = 1)\n               )) = 0;\n\tWR63 : SIZEOF(QUERY(temp <* SELF.VaryingThicknessLocation.ShapeRepresentations |\n               NOT(('IFC2X2_FINAL.IFCCARTESIANPOINT' IN TYPEOF(temp\\IfcRepresentation.Items[1]))\n                     OR\n                   ('IFC2X2_FINAL.IFCPOINTONSURFACE' IN TYPEOF(temp\\IfcRepresentation.Items[1])))\n               )) = 0;\nEND_ENTITY;\n\nENTITY IfcStructuredDimensionCallout\n SUBTYPE OF (IfcDraughtingCallout);\n WHERE\n\tWR31 : SIZEOF(QUERY ( Ato <* QUERY ( Con <* SELF.contents | (\n                   'IFC2X2_FINAL.IFCANNOTATIONTEXTOCCURRENCE' IN \n                    TYPEOF(Con)) ) | (NOT (Ato.Name IN ['dimension value',\n                   'tolerance value','unit text','prefix text','suffix text']))))\n                  = 0;\nEND_ENTITY;\n\nENTITY IfcStyledItem\n SUPERTYPE OF (ONEOF\n\t(IfcAnnotationOccurrence))\n SUBTYPE OF (IfcRepresentationItem);\n\tItem : IfcRepresentationItem;\n\tStyles : SET [1:?] OF IfcPresentationStyleAssignment;\n\tName : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : SIZEOF(Styles) = 1;\nEND_ENTITY;\n\nENTITY IfcStyledRepresentation\n SUBTYPE OF (IfcRepresentation);\nEND_ENTITY;\n\nENTITY IfcSubContractResource\n SUBTYPE OF (IfcConstructionResource);\n\tSubContractor : OPTIONAL IfcActorSelect;\n\tJobDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcSubedge\n SUBTYPE OF (IfcEdge);\n\tParentEdge : IfcEdge;\nEND_ENTITY;\n\nENTITY IfcSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBoundedSurface\n\t,IfcElementarySurface\n\t,IfcSweptSurface))\n SUBTYPE OF (IfcGeometricRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcSurfaceCurveSweptAreaSolid\n SUBTYPE OF (IfcSweptAreaSolid);\n\tDirectrix : IfcCurve;\n\tStartParam : IfcParameterValue;\n\tEndParam : IfcParameterValue;\n\tReferenceSurface : IfcSurface;\nEND_ENTITY;\n\nENTITY IfcSurfaceOfLinearExtrusion\n SUBTYPE OF (IfcSweptSurface);\n\tExtrudedDirection : IfcDirection;\n\tDepth : IfcLengthMeasure;\n DERIVE\n\tExtrusionAxis : IfcVector := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (ExtrudedDirection, Depth);\n WHERE\n\tWR41 : Depth > 0;\nEND_ENTITY;\n\nENTITY IfcSurfaceOfRevolution\n SUBTYPE OF (IfcSweptSurface);\n\tAxisPosition : IfcAxis1Placement;\n DERIVE\n\tAxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(AxisPosition.Location, \n                       IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(AxisPosition.Z,1.0));\nEND_ENTITY;\n\nENTITY IfcSurfaceStyle;\n\tSide : IfcSurfaceSide;\n\tName : IfcLabel;\n\tStyles : SET [1:5] OF IfcSurfaceStyleElementSelect;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleLighting;\n\tDiffuseTransmissionColour : IfcColourRgb;\n\tDiffuseReflectionColour : IfcColourRgb;\n\tTransmissionColour : IfcColourRgb;\n\tReflectanceColour : IfcColourRgb;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleRefraction;\n\tRefractionIndex : OPTIONAL IfcReal;\n\tDispersionFactor : OPTIONAL IfcReal;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleRendering\n SUBTYPE OF (IfcSurfaceStyleShading);\n\tTransparency : OPTIONAL IfcNormalisedRatioMeasure;\n\tDiffuseColour : OPTIONAL IfcColourOrFactor;\n\tTransmissionColour : OPTIONAL IfcColourOrFactor;\n\tDiffuseTransmissionColour : OPTIONAL IfcColourOrFactor;\n\tReflectionColour : OPTIONAL IfcColourOrFactor;\n\tSpecularColour : OPTIONAL IfcColourOrFactor;\n\tSpecularHighlight : OPTIONAL IfcSpecularHighlightSelect;\n\tReflectanceMethod : IfcReflectanceMethodEnum;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleShading\n SUPERTYPE OF (ONEOF\n\t(IfcSurfaceStyleRendering));\n\tSurfaceColour : IfcColourRgb;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleWithTextures;\n\tTextures : SET [1:?] OF IfcSurfaceTexture;\n INVERSE\n\tHasTextureCoordinates : SET [0:1] OF IfcTextureCoordinate FOR Texture;\nEND_ENTITY;\n\nENTITY IfcSurfaceTexture\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcImageTexture\n\t,IfcPixelTexture));\n\tRepeatS : BOOLEAN;\n\tRepeatT : BOOLEAN;\n\tTextureType : IfcSurfaceTextureEnum;\n\tTextureTransform : OPTIONAL IfcCartesianTransformationOperator2D;\nEND_ENTITY;\n\nENTITY IfcSweptAreaSolid\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcExtrudedAreaSolid\n\t,IfcRevolvedAreaSolid\n\t,IfcSurfaceCurveSweptAreaSolid))\n SUBTYPE OF (IfcSolidModel);\n\tSweptArea : IfcProfileDef;\n\tPosition : IfcAxis2Placement3D;\n WHERE\n\tWR1 : NOT('IFC2X2_FINAL.IFCDERIVEDPROFILEDEF' IN TYPEOF(SweptArea));\n\tWR2 : SweptArea.ProfileType = IfcProfileTypeEnum.Area;\nEND_ENTITY;\n\nENTITY IfcSweptDiskSolid\n SUBTYPE OF (IfcSolidModel);\n\tDirectrix : IfcCurve;\n\tRadius : IfcPositiveLengthMeasure;\n\tInnerRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tStartParam : IfcParameterValue;\n\tEndParam : IfcParameterValue;\n WHERE\n\tWR1 : Directrix.Dim = 3;\n\tWR2 : (NOT EXISTS(InnerRadius)) OR (Radius > InnerRadius);\nEND_ENTITY;\n\nENTITY IfcSweptSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcSurfaceOfLinearExtrusion\n\t,IfcSurfaceOfRevolution))\n SUBTYPE OF (IfcSurface);\n\tSweptCurve : IfcProfileDef;\n\tPosition : IfcAxis2Placement3D;\n DERIVE\n\tDim : IfcDimensionCount := Position.Dim;\n WHERE\n\tWR1 : NOT('IFC2X2_FINAL.IFCDERIVEDPROFILEDEF' IN TYPEOF(SweptCurve));\n\tWR2 : SweptCurve.ProfileType = IfcProfileTypeEnum.Curve;\nEND_ENTITY;\n\nENTITY IfcSwitchingDeviceType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcSwitchingDeviceTypeEnum;\nEND_ENTITY;\n\nENTITY IfcSymbolStyle;\n\tName : IfcLabel;\n\tStyleOfSymbol : IfcSymbolStyleSelect;\nEND_ENTITY;\n\nENTITY IfcSystem\n SUPERTYPE OF (ONEOF\n\t(IfcElectricalCircuit\n\t,IfcStructuralAnalysisModel))\n SUBTYPE OF (IfcGroup);\n INVERSE\n\tServicesBuildings : SET [0:1] OF IfcRelServicesBuildings FOR RelatingSystem;\n WHERE\n\tWR1 : SIZEOF (QUERY (temp <* SELF\\IfcGroup.IsGroupedBy.RelatedObjects |  NOT('IFC2X2_FINAL.IFCELEMENT' IN TYPEOF(temp)))) = 0;\nEND_ENTITY;\n\nENTITY IfcSystemFurnitureElementType\n SUBTYPE OF (IfcFurnishingElementType);\nEND_ENTITY;\n\nENTITY IfcTShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tFlangeEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tWebEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tWebSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tCentreOfGravityInY : IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : FlangeThickness < Depth;\n\tWR2 : WebThickness < FlangeWidth;\nEND_ENTITY;\n\nENTITY IfcTable;\n\tName : STRING;\n\tRows : LIST [1:?] OF IfcTableRow;\n DERIVE\n\tNumberOfCellsInRow : INTEGER := HIINDEX(Rows[1].RowCells);\n\tNumberOfHeadings : INTEGER := SIZEOF(QUERY( Temp <* Rows | Temp.IsHeading));\n\tNumberOfDataRows : INTEGER := SIZEOF(QUERY( Temp <* Rows | NOT(Temp.IsHeading)));\n WHERE\n\tWR1 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0;\n\tWR2 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0;\n\tWR3 : { 0 <= NumberOfHeadings <= 1 };\nEND_ENTITY;\n\nENTITY IfcTableRow;\n\tRowCells : LIST [1:?] OF IfcValue;\n\tIsHeading : BOOLEAN;\n INVERSE\n\tOfTable : IfcTable FOR Rows;\nEND_ENTITY;\n\nENTITY IfcTankType\n SUBTYPE OF (IfcFlowStorageDeviceType);\n\tPredefinedType : IfcTankTypeEnum;\nEND_ENTITY;\n\nENTITY IfcTask\n SUPERTYPE OF (ONEOF\n\t(IfcMove\n\t,IfcOrderAction))\n SUBTYPE OF (IfcProcess);\n\tTaskId : IfcIdentifier;\n\tStatus : OPTIONAL IfcLabel;\n\tWorkMethod : OPTIONAL IfcLabel;\n\tIsMilestone : BOOLEAN;\n\tPriority : OPTIONAL INTEGER;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* SELF\\IfcObject.Decomposes | NOT('IFC2X2_FINAL.IFCRELNESTS' IN TYPEOF(temp)))) = 0;\n\tWR2 : SIZEOF(QUERY(temp <* SELF\\IfcObject.IsDecomposedBy | NOT('IFC2X2_FINAL.IFCRELNESTS' IN TYPEOF(temp)))) = 0;\n\tWR3 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcTelecomAddress\n SUBTYPE OF (IfcAddress);\n\tTelephoneNumbers : OPTIONAL LIST [1:?] OF IfcLabel;\n\tFacsimileNumbers : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPagerNumber : OPTIONAL IfcLabel;\n\tElectronicMailAddresses : OPTIONAL LIST [1:?] OF IfcLabel;\n\tWWWHomePageURL : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS (TelephoneNumbers) OR\n            EXISTS (PagerNumber) OR\n            EXISTS (FacsimileNumbers) OR \n            EXISTS (ElectronicMailAddresses) OR \n            EXISTS (WWWHomePageURL);\nEND_ENTITY;\n\nENTITY IfcTendon\n SUBTYPE OF (IfcReinforcingElement);\n\tPredefinedType : IfcTendonTypeEnum;\n\tNominalDiameter : IfcPositiveLengthMeasure;\n\tCrossSectionArea : IfcAreaMeasure;\n\tTensionForce : OPTIONAL IfcForceMeasure;\n\tPreStress : OPTIONAL IfcPressureMeasure;\n\tFrictionCoefficient : OPTIONAL IfcNormalisedRatioMeasure;\n\tAnchorageSlip : OPTIONAL IfcPositiveLengthMeasure;\n\tMinCurvatureRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : (PredefinedType <> IfcTendonTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTendonTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcTendonAnchor\n SUBTYPE OF (IfcReinforcingElement);\nEND_ENTITY;\n\nENTITY IfcTerminatorSymbol\n SUPERTYPE OF (ONEOF\n\t(IfcDimensionCurveTerminator))\n SUBTYPE OF (IfcAnnotationSymbolOccurrence);\n\tAnnotatedCurve : IfcAnnotationCurveOccurrence;\nEND_ENTITY;\n\nENTITY IfcTextLiteral\n SUPERTYPE OF (ONEOF\n\t(IfcTextLiteralWithExtent))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tLiteral : IfcPresentableText;\n\tPlacement : IfcAxis2Placement;\n\tAlignment : IfcTextAlignment;\n\tPath : IfcTextPath;\n\tFont : IfcFontSelect;\nEND_ENTITY;\n\nENTITY IfcTextLiteralWithExtent\n SUBTYPE OF (IfcTextLiteral);\n\tExtent : IfcPlanarExtent;\nEND_ENTITY;\n\nENTITY IfcTextStyle;\n\tName : IfcLabel;\n\tCharacterGlyphAppearance : OPTIONAL IfcCharacterStyleSelect;\n\tTextStyles : OPTIONAL SET [1:3] OF IfcTextStyleSelect;\n WHERE\n\tWR11 : HIINDEX(TextStyles) <= 3;\n\tWR12 : NOT(EXISTS(SELF.TextStyles)) \n             OR\n              (SIZEOF(QUERY(Style1 <* SELF.TextStyles |\n                 SIZEOF(QUERY(Style2 <* SELF.TextStyles - Style1 |\n                   TYPEOF(Style1) = TYPEOF(Style2)\n                 )) > 0\n               )) = 0 );\nEND_ENTITY;\n\nENTITY IfcTextStyleWithBoxCharacteristics;\n\tBoxHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tBoxWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tBoxSlantAngle : OPTIONAL IfcPlaneAngleMeasure;\n\tBoxRotateAngle : OPTIONAL IfcPlaneAngleMeasure;\nEND_ENTITY;\n\nENTITY IfcTextStyleWithMirror;\n\tMirrorPlacement : IfcAxis2Placement;\nEND_ENTITY;\n\nENTITY IfcTextStyleWithSpacing;\n\tCharacterSpacing : IfcCharacterSpacingSelect;\nEND_ENTITY;\n\nENTITY IfcTextureCoordinate\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcTextureCoordinateGenerator\n\t,IfcTextureMap));\n\tTexture : IfcSurfaceStyleWithTextures;\nEND_ENTITY;\n\nENTITY IfcTextureCoordinateGenerator\n SUBTYPE OF (IfcTextureCoordinate);\n\tMode : IfcLabel;\n\tParameter : LIST [1:?] OF IfcSimpleValue;\nEND_ENTITY;\n\nENTITY IfcTextureMap\n SUBTYPE OF (IfcTextureCoordinate);\n\tVertexBasedTextures : OPTIONAL SET [1:?] OF IfcVertexBasedTextureMap;\nEND_ENTITY;\n\nENTITY IfcTextureVertex;\n\tCoordinates : LIST [2:2] OF IfcParameterValue;\nEND_ENTITY;\n\nENTITY IfcThermalMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tSpecificHeatCapacity : OPTIONAL IfcSpecificHeatCapacityMeasure;\n\tBoilingPoint : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tFreezingPoint : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tThermalConductivity : OPTIONAL IfcThermalConductivityMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcTimeSeries\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcIrregularTimeSeries\n\t,IfcRegularTimeSeries));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tStartTime : IfcDateTimeSelect;\n\tEndTime : IfcDateTimeSelect;\n\tTimeSeriesDataType : IfcTimeSeriesDataTypeEnum;\n\tDataOrigin : IfcDataOriginEnum;\n\tUserDefinedDataOrigin : OPTIONAL IfcLabel;\n\tUnit : OPTIONAL IfcUnit;\n INVERSE\n\tDocumentedBy : SET [0:1] OF IfcTimeSeriesReferenceRelationship FOR ReferencedTimeSeries;\nEND_ENTITY;\n\nENTITY IfcTimeSeriesReferenceRelationship;\n\tReferencedTimeSeries : IfcTimeSeries;\n\tTimeSeriesReferences : SET [1:?] OF IfcDocumentSelect;\nEND_ENTITY;\n\nENTITY IfcTimeSeriesSchedule\n SUBTYPE OF (IfcControl);\n\tApplicableDates : OPTIONAL LIST [1:?] OF IfcDateTimeSelect;\n\tTimeSeriesScheduleType : IfcTimeSeriesScheduleTypeEnum;\n\tTimeSeries : IfcTimeSeries;\n WHERE\n\tWR41 : NOT(TimeSeriesScheduleType=IfcTimeSeriesScheduleTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcTimeSeriesValue;\n\tListValues : LIST [1:?] OF IfcValue;\nEND_ENTITY;\n\nENTITY IfcTopologicalRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConnectedFaceSet\n\t,IfcEdge\n\t,IfcFace\n\t,IfcFaceBound\n\t,IfcLoop\n\t,IfcPath\n\t,IfcVertex))\n SUBTYPE OF (IfcRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcTopologyRepresentation\n SUBTYPE OF (IfcRepresentation);\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* SELF\\IfcRepresentation.Items | \n               NOT('IFC2X2_FINAL.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))\n             )) = 0;\n\tWR22 : EXISTS(SELF\\IfcRepresentation.RepresentationType);\n\tWR23 : IfcTopologyRepresentationTypes(SELF\\IfcRepresentation.RepresentationType, SELF\\IfcRepresentation.Items);\nEND_ENTITY;\n\nENTITY IfcTransformerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcTransformerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcTransportElement\n SUBTYPE OF (IfcElement);\n\tOperationType : OPTIONAL IfcTransportElementTypeEnum;\n\tCapacityByWeight : OPTIONAL IfcMassMeasure;\n\tCapacityByNumber : OPTIONAL IfcCountMeasure;\nEND_ENTITY;\n\nENTITY IfcTransportElementType\n SUBTYPE OF (IfcElementType);\n\tPredefinedType : IfcTransportElementTypeEnum;\nEND_ENTITY;\n\nENTITY IfcTrapeziumProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tBottomXDim : IfcPositiveLengthMeasure;\n\tTopXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\n\tTopXOffset : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcTrimmedCurve\n SUBTYPE OF (IfcBoundedCurve);\n\tBasisCurve : IfcCurve;\n\tTrim1 : SET [1:2] OF IfcTrimmingSelect;\n\tTrim2 : SET [1:2] OF IfcTrimmingSelect;\n\tSenseAgreement : BOOLEAN;\n\tMasterRepresentation : IfcTrimmingPreference;\n WHERE\n\tWR41 : (HIINDEX(Trim1) = 1) OR (TYPEOF(Trim1[1]) <> TYPEOF(Trim1[2]));\n\tWR42 : (HIINDEX(Trim2) = 1) OR (TYPEOF(Trim2[1]) <> TYPEOF(Trim2[2]));\n\tWR43 : NOT('IFC2X2_FINAL.IFCBOUNDEDCURVE' IN TYPEOF(BasisCurve));\nEND_ENTITY;\n\nENTITY IfcTubeBundleType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcTubeBundleTypeEnum;\nEND_ENTITY;\n\nENTITY IfcTwoDirectionRepeatFactor\n SUBTYPE OF (IfcOneDirectionRepeatFactor);\n\tSecondRepeatFactor : IfcVector;\nEND_ENTITY;\n\nENTITY IfcTypeObject\n SUPERTYPE OF (ONEOF\n\t(IfcTypeProduct))\n SUBTYPE OF (IfcPropertyDefinition);\n\tApplicableOccurrence : OPTIONAL IfcLabel;\n\tHasPropertySets : OPTIONAL LIST [1:?] OF UNIQUE IfcPropertySetDefinition;\n INVERSE\n\tObjectTypeOf : SET [0:1] OF IfcRelDefinesByType FOR RelatingType;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcTypeProduct\n SUPERTYPE OF (ONEOF\n\t(IfcDoorStyle\n\t,IfcElementType\n\t,IfcWindowStyle))\n SUBTYPE OF (IfcTypeObject);\n\tRepresentationMaps : OPTIONAL LIST [1:?] OF UNIQUE IfcRepresentationMap;\n\tTag : OPTIONAL IfcLabel;\n WHERE\n\tWR41 : NOT(EXISTS(SELF\\IfcTypeObject.ObjectTypeOf[1])) OR\n             (SIZEOF(QUERY(temp <* SELF\\IfcTypeObject.ObjectTypeOf[1].RelatedObjects |\n               NOT('IFC2X2_FINAL.IFCPRODUCT' IN TYPEOF(temp)))\n             ) = 0);\nEND_ENTITY;\n\nENTITY IfcUShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tCentreOfGravityInX : IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : FlangeThickness < (Depth / 2);\n\tWR2 : WebThickness < FlangeWidth;\nEND_ENTITY;\n\nENTITY IfcUnitAssignment;\n\tUnits : SET [1:?] OF IfcUnit;\nEND_ENTITY;\n\nENTITY IfcUnitaryEquipmentType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcUnitaryEquipmentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcValveType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcValveTypeEnum;\nEND_ENTITY;\n\nENTITY IfcVector\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOrientation : IfcDirection;\n\tMagnitude : IfcLengthMeasure;\n DERIVE\n\tDim : IfcDimensionCount := Orientation.Dim;\n WHERE\n\tWR1 : Magnitude >= 0.0;\nEND_ENTITY;\n\nENTITY IfcVertex\n SUPERTYPE OF (ONEOF\n\t(IfcVertexPoint))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcVertexBasedTextureMap;\n\tTextureVertices : LIST [1:?] OF IfcTextureVertex;\n\tVertexBasedGeometry : IfcPolyLoop;\nEND_ENTITY;\n\nENTITY IfcVertexLoop\n SUBTYPE OF (IfcLoop);\n\tLoopVertex : IfcVertex;\nEND_ENTITY;\n\nENTITY IfcVertexPoint\n SUBTYPE OF (IfcVertex);\n\tVertexGeometry : IfcPoint;\nEND_ENTITY;\n\nENTITY IfcVibrationIsolatorType\n SUBTYPE OF (IfcDiscreteAccessoryType);\n\tPredefinedType : IfcVibrationIsolatorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcVirtualElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcVirtualGridIntersection;\n\tIntersectingAxes : LIST [2:2] OF UNIQUE IfcGridAxis;\n\tOffsetDistances : LIST [2:3] OF IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcWall\n SUPERTYPE OF (ONEOF\n\t(IfcWallStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n WHERE\n\tWR1 : SIZEOF (QUERY(temp <* SELF\\IfcObject.HasAssociations |\n              'IFC2X2_FINAL.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)\n              )) <= 1;\nEND_ENTITY;\n\nENTITY IfcWallStandardCase\n SUBTYPE OF (IfcWall);\n WHERE\n\tWR1 : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC2X2_FINAL.IFCRELASSOCIATES.RELATEDOBJECTS') |\n                          ('IFC2X2_FINAL.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND\n                          ('IFC2X2_FINAL.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial))\n                          )) = 1;\nEND_ENTITY;\n\nENTITY IfcWallType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcWallTypeEnum;\nEND_ENTITY;\n\nENTITY IfcWasteTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcWasteTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcWaterProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tIsPotable : OPTIONAL BOOLEAN;\n\tHardness : OPTIONAL IfcIonConcentrationMeasure;\n\tAlkalinityConcentration : OPTIONAL IfcIonConcentrationMeasure;\n\tAcidityConcentration : OPTIONAL IfcIonConcentrationMeasure;\n\tImpuritiesContent : OPTIONAL IfcNormalisedRatioMeasure;\n\tPHLevel : OPTIONAL IfcPHMeasure;\n\tDissolvedSolidsContent : OPTIONAL IfcNormalisedRatioMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcWindow\n SUBTYPE OF (IfcBuildingElement);\n\tOverallHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tOverallWidth : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcWindowLiningProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tLiningDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tLiningThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTransomThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tMullionThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tFirstTransomOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tSecondTransomOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tFirstMullionOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tSecondMullionOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n WHERE\n\tWR1 : (EXISTS(LiningDepth) AND EXISTS(LiningThickness)) XOR\n            (NOT(EXISTS(LiningDepth)) AND NOT(EXISTS(LiningThickness)));\nEND_ENTITY;\n\nENTITY IfcWindowPanelProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tOperationType : IfcWindowPanelOperationEnum;\n\tPanelPosition : IfcWindowPanelPositionEnum;\n\tFrameDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tFrameThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\nEND_ENTITY;\n\nENTITY IfcWindowStyle\n SUBTYPE OF (IfcTypeProduct);\n\tConstructionType : IfcWindowStyleConstructionEnum;\n\tOperationType : IfcWindowStyleOperationEnum;\n\tParameterTakesPrecedence : BOOLEAN;\n\tSizeable : BOOLEAN;\nEND_ENTITY;\n\nENTITY IfcWorkControl\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcWorkPlan\n\t,IfcWorkSchedule))\n SUBTYPE OF (IfcControl);\n\tIdentifier : IfcIdentifier;\n\tCreationDate : IfcDateTimeSelect;\n\tCreators : OPTIONAL SET [1:?] OF IfcPerson;\n\tPurpose : OPTIONAL IfcLabel;\n\tDuration : OPTIONAL IfcTimeMeasure;\n\tTotalFloat : OPTIONAL IfcTimeMeasure;\n\tStartTime : IfcDateTimeSelect;\n\tFinishTime : OPTIONAL IfcDateTimeSelect;\n\tWorkControlType : OPTIONAL IfcWorkControlTypeEnum;\n\tUserDefinedControlType : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : (WorkControlType <> IfcWorkControlTypeEnum.USERDEFINED) OR\n            ((WorkControlType = IfcWorkControlTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcWorkControl.UserDefinedControlType));\nEND_ENTITY;\n\nENTITY IfcWorkPlan\n SUBTYPE OF (IfcWorkControl);\nEND_ENTITY;\n\nENTITY IfcWorkSchedule\n SUBTYPE OF (IfcWorkControl);\nEND_ENTITY;\n\nENTITY IfcZShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : FlangeThickness < (Depth / 2);\nEND_ENTITY;\n\nENTITY IfcZone\n SUBTYPE OF (IfcGroup);\n WHERE\n\tWR1 : SIZEOF (QUERY (temp <* SELF\\IfcGroup.IsGroupedBy.RelatedObjects |  NOT(('IFC2X2_FINAL.IFCZONE' IN TYPEOF(temp)) OR ('IFC2X2_FINAL.IFCSPACE' IN TYPEOF(temp))) )) = 0;\nEND_ENTITY;\n\nFUNCTION IfcAddToBeginOfList\n\t(AScalar : GENERIC;\n     AList   : LIST OF GENERIC)\n\t: LIST[1:?] OF GENERIC;\n  \n    LOCAL\n      Result : LIST OF GENERIC := [];\n    END_LOCAL;\n  \n    IF NOT(EXISTS(AScalar)) THEN\n      Result := AList;\n    ELSE\n      Result := Result + AScalar;\n      IF (HIINDEX(AList) >= 1) THEN\n        REPEAT i:=1 TO HIINDEX(AList);\n          Result[i+1] := AList[i];\n        END_REPEAT;\n      END_IF;\n    END_IF;\n    RETURN(Result);\nEND_FUNCTION;\n\nFUNCTION IfcBaseAxis\n\t(Dim : INTEGER; \n     Axis1, Axis2, Axis3 : IfcDirection)\n\t: LIST [2:3] OF IfcDirection;\n  \n  LOCAL\n    U : LIST [2:3] OF IfcDirection;\n    Factor : REAL;\n    D1, D2 : IfcDirection;\n  END_LOCAL;\n  \n    IF (Dim = 3) THEN \n      D1 := NVL(IfcNormalise(Axis3), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n      D2 := IfcFirstProjAxis(D1, Axis1);\n      U  := [D2, IfcSecondProjAxis(D1, D2, Axis2), D1];\n    ELSE\n      IF EXISTS(Axis1) THEN\n        D1 := IfcNormalise(Axis1);\n        U  := [D1, IfcOrthogonalComplement(D1)];\n        IF EXISTS(Axis2) THEN\n          Factor := IfcDotProduct(Axis2, U[2]);\n          IF (Factor < 0.0) THEN\n            U[2].DirectionRatios[1] := -U[2].DirectionRatios[1];\n            U[2].DirectionRatios[2] := -U[2].DirectionRatios[2];\n          END_IF;\n        END_IF;\n      ELSE\n        IF EXISTS(Axis2) THEN\n          D1 := IfcNormalise(Axis2);\n          U  := [IfcOrthogonalComplement(D1), D1];\n          U[1].DirectionRatios[1] := -U[1].DirectionRatios[1];\n          U[1].DirectionRatios[2] := -U[1].DirectionRatios[2];\n          ELSE\n            U := [IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0, 0.0]), \n                  IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0, 1.0])];\n        END_IF;\n      END_IF;\n    END_IF;\n    RETURN(U);\nEND_FUNCTION;\n\nFUNCTION IfcBooleanChoose\n\t(B : BOOLEAN ;\n       Choice1, Choice2 : Generic : Item)\n\t: Generic : Item;\n    IF B THEN\n       RETURN (Choice1);\n    ELSE\n       RETURN (Choice2);\n    END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcBuild2Axes\n\t(RefDirection : IfcDirection)\n\t: LIST [2:2] OF IfcDirection;\n  LOCAL\n    D : IfcDirection := NVL(IfcNormalise(RefDirection),\n        IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0]));\n  END_LOCAL;\n    RETURN([D, IfcOrthogonalComplement(D)]);\nEND_FUNCTION;\n\nFUNCTION IfcBuildAxes\n\t(Axis, RefDirection : IfcDirection)\n\t: LIST [3:3] OF IfcDirection;\n  LOCAL\n    D1, D2 : IfcDirection;\n  END_LOCAL;\n    D1 := NVL(IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n    D2 := IfcFirstProjAxis(D1, RefDirection);\n    RETURN ([D2, IfcNormalise(IfcCrossProduct(D1,D2)).Orientation, D1]);\nEND_FUNCTION;\n\nFUNCTION IfcCorrectDimensions\n\t(m   : IfcUnitEnum; Dim : IfcDimensionalExponents)\n\t: LOGICAL;  \n  CASE m OF\n    LENGTHUNIT : IF\n      Dim = (IfcDimensionalExponents (1, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    MASSUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 1, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    TIMEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 1, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICCURRENTUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    THERMODYNAMICTEMPERATUREUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 1, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    AMOUNTOFSUBSTANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 1, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    LUMINOUSINTENSITYUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    PLANEANGLEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    SOLIDANGLEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    AREAUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    VOLUMEUNIT : IF\n      Dim = (IfcDimensionalExponents (3, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n  \n    ABSORBEDDOSEUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    RADIOACTIVITYUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICCAPACITANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (-2, 1, 4, 1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    DOSEEQUIVALENTUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICCHARGEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 1, 1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICCONDUCTANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (-2, -1, 3, 2, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICVOLTAGEUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -3, -1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICRESISTANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -3, -2, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ENERGYUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    FORCEUNIT : IF\n      Dim = (IfcDimensionalExponents (1, 1, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    FREQUENCYUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    INDUCTANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -2, -2, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ILLUMINANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (-2, 0, 0, 0, 0, 0, 1))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    LUMINOUSFLUXUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    MAGNETICFLUXUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -2, -1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    MAGNETICFLUXDENSITYUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 1, -2, -1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    POWERUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -3, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    PRESSUREUNIT : IF\n      Dim = (IfcDimensionalExponents (-1, 1, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n  \n    OTHERWISE :\n      RETURN (UNKNOWN);\n  END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcCorrectLocalPlacement\n\t(AxisPlacement:IfcAxis2Placement; \n     RelPlacement : IfcObjectPlacement)\n\t: LOGICAL;\n  \n    IF (EXISTS(RelPlacement)) THEN\n      IF ('IFC2X2_FINAL.IFCGRIDPLACEMENT' IN TYPEOF(RelPlacement)) THEN\n        RETURN(?);\n      END_IF;\n      IF ('IFC2X2_FINAL.IFCLOCALPLACEMENT' IN TYPEOF(RelPlacement)) THEN\n        IF ('IFC2X2_FINAL.IFCAXIS2PLACEMENT2D' IN TYPEOF(AxisPlacement)) THEN\n          RETURN(TRUE);\n        END_IF;\n        IF ('IFC2X2_FINAL.IFCAXIS2PLACEMENT3D' IN TYPEOF(AxisPlacement)) THEN\n          IF (RelPlacement.RelativePlacement.Dim = 3) THEN\n            RETURN(TRUE);\n          ELSE\n            RETURN(FALSE);\n          END_IF;\n        END_IF;\n      END_IF;\n    ELSE\n      RETURN(TRUE);  \n    END_IF;\n    RETURN(?);\nEND_FUNCTION;\n\nFUNCTION IfcCorrectObjectAssignment\n\t(Constraint: IfcObjectTypeEnum; Objects : SET[1:?] OF IfcObject)\n\t: LOGICAL;\n    \n  LOCAL\n    Count : INTEGER := 0;\n  END_LOCAL;\n  \n    IF NOT(EXISTS(Constraint)) THEN \n      RETURN(?);\n    END_IF;\n  \n    CASE Constraint OF\n      IfcObjectTypeEnum.NOTDEFINED : RETURN(TRUE);\n      IfcObjectTypeEnum.PRODUCT :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X2_FINAL.IFCPRODUCT' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.PROCESS :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X2_FINAL.IFCPROCESS' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.CONTROL :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X2_FINAL.IFCCONTROL' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.RESOURCE :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X2_FINAL.IFCRESOURCE' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.ACTOR :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X2_FINAL.IFCACTOR' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.GROUP :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X2_FINAL.IFCGROUP' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.PROJECT :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X2_FINAL.IFCPROJECT' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      OTHERWISE : RETURN(?);\n    END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcCrossProduct\n\t(Arg1, Arg2 : IfcDirection)\n\t: IfcVector;\n  LOCAL\n    Mag : REAL;\n    Res : IfcDirection;\n    V1,V2  : LIST[3:3] OF REAL;\n    Result : IfcVector;\n  END_LOCAL;\n  \n    IF (NOT EXISTS (Arg1) OR (Arg1.Dim = 2)) OR (NOT EXISTS (Arg2) OR (Arg2.Dim = 2)) THEN\n      RETURN(?);\n    ELSE\n      BEGIN\n        V1  := IfcNormalise(Arg1).DirectionRatios;\n        V2  := IfcNormalise(Arg2).DirectionRatios;\n        Res := IfcRepresentationItem() || IfcGeometricRepresentationItem () \n               || IfcDirection([(V1[2]*V2[3] - V1[3]*V2[2]), (V1[3]*V2[1] - V1[1]*V2[3]), (V1[1]*V2[2] - V1[2]*V2[1])]);\n        Mag := 0.0;\n        REPEAT i := 1 TO 3;\n          Mag := Mag + Res.DirectionRatios[i]*Res.DirectionRatios[i];\n        END_REPEAT;\n        IF (Mag > 0.0) THEN\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Res, SQRT(Mag));\n        ELSE\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Arg1, 0.0);\n        END_IF;\n        RETURN(Result);\n      END;\n    END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcCurveDim\n\t(Curve : IfcCurve)\n\t: IfcDimensionCount;\n  \n    IF ('IFC2X2_FINAL.IFCLINE' IN TYPEOF(Curve))\n      THEN RETURN(Curve.Pnt.Dim);\n    END_IF;\n    IF ('IFC2X2_FINAL.IFCCONIC' IN TYPEOF(Curve))\n      THEN RETURN(Curve.Position.Dim);\n    END_IF;\n    IF ('IFC2X2_FINAL.IFCPOLYLINE' IN TYPEOF(Curve))\n      THEN RETURN(Curve.Points[1].Dim);\n    END_IF;\n    IF ('IFC2X2_FINAL.IFCTRIMMEDCURVE' IN TYPEOF(Curve))\n      THEN RETURN(IfcCurveDim(Curve.BasisCurve));\n    END_IF;\n    IF ('IFC2X2_FINAL.IFCCOMPOSITECURVE' IN TYPEOF(Curve))\n      THEN RETURN(Curve.Segments[1].Dim);\n    END_IF;\n    IF ('IFC2X2_FINAL.IFCBSPLINECURVE' IN TYPEOF(Curve))\n      THEN RETURN(Curve.ControlPointsList[1].Dim);\n    END_IF;\n    IF ('IFC2X2_FINAL.IFCOFFSETCURVE2D' IN TYPEOF(Curve))\n      THEN RETURN(2); \n    END_IF;\n    IF ('IFC2X2_FINAL.IFCOFFSETCURVE3D' IN TYPEOF(Curve))\n      THEN RETURN(3);\n    END_IF;\n  RETURN (?);\nEND_FUNCTION;\n\nFUNCTION IfcCurveWeightsPositive\n\t(B: IfcRationalBezierCurve)\n\t: BOOLEAN;\n     LOCAL\n       Result : BOOLEAN := TRUE;\n     END_LOCAL;\n  \n     REPEAT i := 0 TO B.UpperIndexOnControlPoints;\n       IF B.Weights[i] <= 0.0  THEN\n         Result := FALSE;\n         RETURN(Result);\n       END_IF;\n     END_REPEAT;\n     RETURN(Result);\nEND_FUNCTION;\n\nFUNCTION IfcDeriveDimensionalExponents\n\t(x : IfcUnit)\n\t: IfcDimensionalExponents;  \n    LOCAL\n      Result : IfcDimensionalExponents :=\n               IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 0);  \n    END_LOCAL;\n    IF 'IFC2X2_FINAL.IFCDERIVEDUNIT' IN TYPEOF(x) THEN\n      REPEAT i := LOINDEX(x.Elements) TO HIINDEX(x.Elements);\n        Result.LengthExponent :=        Result.LengthExponent +\n          (x.Elements[i].Exponent *\n           x.Elements[i].Unit.Dimensions.LengthExponent);\n        Result.MassExponent :=        Result.MassExponent  +\n          (x.Elements[i].Exponent *\n           x.Elements[i].Unit.Dimensions.MassExponent);\n        Result.TimeExponent :=        Result.TimeExponent +\n          (x.Elements[i].Exponent *\n           x.Elements[i].Unit.Dimensions.TimeExponent);\n        Result.ElectricCurrentExponent :=        Result.ElectricCurrentExponent +\n          (x.Elements[i].Exponent *\n           x.Elements[i].Unit.Dimensions.ElectricCurrentExponent);\n        Result.ThermodynamicTemperatureExponent :=\n          Result.ThermodynamicTemperatureExponent +\n          (x.Elements[i].Exponent *\n           x.Elements[i].Unit.Dimensions.ThermodynamicTemperatureExponent);\n        Result.AmountOfSubstanceExponent :=\n          Result.AmountOfSubstanceExponent +        (x.Elements[i].Exponent *\n           x.Elements[i].Unit.Dimensions.AmountOfSubstanceExponent);\n        Result.LuminousIntensityExponent :=\n          Result.LuminousIntensityExponent +        (x.Elements[i].Exponent *\n           x.Elements[i].Unit.Dimensions.LuminousIntensityExponent);\n      END_REPEAT;  \n    ELSE \n      Result := x.Dimensions;  \n    END_IF;  \n  RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcDimensionsForSiUnit\n\t(n : IfcSiUnitName )\n\t: IfcDimensionalExponents;\n    CASE n OF\n      METRE          : RETURN (IfcDimensionalExponents\n                               (1, 0, 0, 0, 0, 0, 0));\n      SQUARE_METRE   : RETURN (IfcDimensionalExponents\n                               (2, 0, 0, 0, 0, 0, 0));\n      CUBIC_METRE    : RETURN (IfcDimensionalExponents\n                               (3, 0, 0, 0, 0, 0, 0));\n      GRAM           : RETURN (IfcDimensionalExponents\n                               (0, 1, 0, 0, 0, 0, 0));\n      SECOND         : RETURN (IfcDimensionalExponents\n                               (0, 0, 1, 0, 0, 0, 0));\n      AMPERE         : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 1, 0, 0, 0));\n      KELVIN         : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 1, 0, 0));\n      MOLE           : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 1, 0));\n      CANDELA        : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 1));\n      RADIAN         : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 0));\n      STERADIAN      : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 0));\n      HERTZ          : RETURN (IfcDimensionalExponents\n                               (0, 0, -1, 0, 0, 0, 0));\n      NEWTON         : RETURN (IfcDimensionalExponents\n                               (1, 1, -2, 0, 0, 0, 0));\n      PASCAL         : RETURN (IfcDimensionalExponents\n                               (-1, 1, -2, 0, 0, 0, 0));\n      JOULE          : RETURN (IfcDimensionalExponents\n                               (2, 1, -2, 0, 0, 0, 0));\n      WATT           : RETURN (IfcDimensionalExponents\n                               (2, 1, -3, 0, 0, 0, 0));\n      COULOMB        : RETURN (IfcDimensionalExponents\n                               (0, 0, 1, 1, 0, 0, 0));\n      VOLT           : RETURN (IfcDimensionalExponents\n                               (2, 1, -3, -1, 0, 0, 0));\n      FARAD          : RETURN (IfcDimensionalExponents\n                               (-2, -1, 4, 1, 0, 0, 0));\n      OHM            : RETURN (IfcDimensionalExponents\n                               (2, 1, -3, -2, 0, 0, 0));\n      SIEMENS        : RETURN (IfcDimensionalExponents\n                               (-2, -1, 3, 2, 0, 0, 0));\n      WEBER          : RETURN (IfcDimensionalExponents\n                               (2, 1, -2, -1, 0, 0, 0));\n      TESLA          : RETURN (IfcDimensionalExponents\n                               (0, 1, -2, -1, 0, 0, 0));\n      HENRY          : RETURN (IfcDimensionalExponents\n                               (2, 1, -2, -2, 0, 0, 0));\n      DEGREE_CELSIUS : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 1, 0, 0));\n      LUMEN          : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 1));\n      LUX            : RETURN (IfcDimensionalExponents\n                               (-2, 0, 0, 0, 0, 0, 1));\n      BECQUEREL      : RETURN (IfcDimensionalExponents\n                               (0, 0, -1, 0, 0, 0, 0));\n      GRAY           : RETURN (IfcDimensionalExponents\n                               (2, 0, -2, 0, 0, 0, 0));\n      SIEVERT        : RETURN (IfcDimensionalExponents\n                               (2, 0, -2, 0, 0, 0, 0));\n      OTHERWISE      : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 0));\n    END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcDotProduct\n\t(Arg1, Arg2 : IfcDirection)\n\t: REAL;\n  LOCAL\n    Scalar : REAL;\n    Vec1, Vec2 : IfcDirection;\n    Ndim   : INTEGER;\n  END_LOCAL;\n  \n    IF NOT EXISTS (Arg1) OR NOT EXISTS (Arg2) THEN\n      Scalar := ?;\n    ELSE\n      IF (Arg1.Dim <> Arg2.Dim) THEN\n        Scalar := ?;\n      ELSE\n        BEGIN\n          Vec1 := IfcNormalise(Arg1);\n          Vec2 := IfcNormalise(Arg2);\n          Ndim := Arg1.Dim;\n          Scalar := 0.0;\n          REPEAT i := 1 TO Ndim;\n            Scalar := Scalar + Vec1.DirectionRatios[i]*Vec2.DirectionRatios[i];\n          END_REPEAT;\n        END;\n      END_IF;\n    END_IF;\n    RETURN (Scalar);\nEND_FUNCTION;\n\nFUNCTION IfcFirstProjAxis\n\t(ZAxis, Arg : IfcDirection)\n\t: IfcDirection;\n  LOCAL\n    XAxis : IfcDirection;\n    V     : IfcDirection;\n    Z     : IfcDirection;\n    XVec  : IfcVector;\n  END_LOCAL;\n  \n    IF (NOT EXISTS(ZAxis)) THEN\n      RETURN (?) ;\n    ELSE\n      Z := IfcNormalise(ZAxis);\n      IF NOT EXISTS(Arg) THEN\n        IF (Z.DirectionRatios <> [1.0,0.0,0.0]) THEN\n          V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0,0.0]);\n        ELSE\n          V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]);\n        END_IF;\n      ELSE\n        IF (Arg.Dim <> 3) THEN\n          RETURN (?) ;\n        END_IF;\n        IF ((IfcCrossProduct(Arg,Z).Magnitude) = 0.0) THEN\n          RETURN (?);\n        ELSE\n          V := IfcNormalise(Arg);\n        END_IF;\n      END_IF;\n      XVec  := IfcScalarTimesVector(IfcDotProduct(V, Z), Z);\n      XAxis := IfcVectorDifference(V, XVec).Orientation;\n      XAxis := IfcNormalise(XAxis);\n    END_IF;\n    RETURN(XAxis);\nEND_FUNCTION;\n\nFUNCTION IfcLeapYear\n\t(Year : IfcYearNumber)\n\t: BOOLEAN;\n  \n  IF ((((Year MOD 4) = 0) AND ((Year MOD 100) <> 0)) OR\n              ((Year MOD 400) = 0)) THEN\n    RETURN(TRUE);\n  ELSE\n    RETURN(FALSE);\n  END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcListToArray\n\t(Lis : LIST [0:?] OF GENERIC : T;\n         Low,U : INTEGER)\n\t: ARRAY OF GENERIC : T;\n     LOCAL\n       N   : INTEGER;\n       Res : ARRAY [Low:U] OF GENERIC : T;\n     END_LOCAL;\n        \n     N := SIZEOF(Lis);\n     IF (N <> (U-Low +1)) THEN\n       RETURN(?);\n     ELSE\n       Res := [Lis[1] : N];\n       REPEAT i := 2 TO N;\n         Res[Low+i-1] := Lis[i];\n       END_REPEAT;\n       RETURN(Res);\n     END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcLoopHeadToTail\n\t(ALoop : IfcEdgeLoop)\n\t: LOGICAL;\n     LOCAL\n       N : INTEGER;\n       P : LOGICAL := TRUE;\n     END_LOCAL;\n       \n       N := SIZEOF (ALoop.EdgeList);\n       REPEAT i := 2 TO N;\n         P := P AND (ALoop.EdgeList[i-1].EdgeEnd :=:\n                     ALoop.EdgeList[i].EdgeStart);\n       END_REPEAT;     \n       RETURN (P);\nEND_FUNCTION;\n\nFUNCTION IfcMlsTotalThickness\n\t(LayerSet : IfcMaterialLayerSet)\n\t: IfcLengthMeasure;\n    LOCAL\n      Max : IfcLengthMeasure := LayerSet.MaterialLayers[1].LayerThickness;    \n    END_LOCAL;\n  \n    IF SIZEOF(LayerSet.MaterialLayers) > 1 THEN\n      REPEAT i := 2 TO HIINDEX(LayerSet.MaterialLayers);\n         Max := Max + LayerSet.MaterialLayers[i].LayerThickness;\n      END_REPEAT;\n    END_IF;\n    RETURN (Max);\nEND_FUNCTION;\n\nFUNCTION IfcNoOfLayers\n\t(Element : IfcElement )\n\t: INTEGER;\n      \n      LOCAL\n        Association : BAG OF IfcRelAssociates := [];\n        MaterialAssociation : SET OF IfcRelAssociatesMaterial := [];\n      END_LOCAL;\n      \n      Association := USEDIN(Element, 'IFC2X2_FINAL.IFCRELASSOCIATES.RELATEDOBJECTS');\n   \n      IF SIZEOF (Association) > 0 THEN\n        REPEAT i := 1 TO HIINDEX(Association);\n          IF ('IFC2X2_FINAL.IFCRELASSOCIATESMATERIAL' IN TYPEOF(Association[i])) THEN \n            MaterialAssociation := MaterialAssociation + Association[i];\n          END_IF;\n        END_REPEAT;\n      END_IF;\n      \n      IF (SIZEOF(MaterialAssociation) <> 1) THEN\n        RETURN (?);\n      ELSE\n        IF 'IFC2X2_FINAL.IFCMATERIAL' IN TYPEOF(MaterialAssociation[1].RelatingMaterial) THEN\n           RETURN (1);\n        END_IF;\n        IF 'IFC2X2_FINAL.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(MaterialAssociation[1].RelatingMaterial) THEN\n           RETURN (SIZEOF(MaterialAssociation[1].RelatingMaterial.ForLayerSet.MaterialLayers));\n        END_IF;\n        IF 'IFC2X2_FINAL.IFCMATERIALLIST' IN TYPEOF(MaterialAssociation[1].RelatingMaterial) THEN\n           RETURN (?);\n        END_IF;\n      END_IF;\n    \n      RETURN (?);\nEND_FUNCTION;\n\nFUNCTION IfcNormalise\n\t(Arg : IfcVectorOrDirection)\n\t: IfcVectorOrDirection;\n  LOCAL\n    Ndim : INTEGER;\n    V    : IfcDirection\n         := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]); \n    Vec  : IfcVector \n         := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (\n              IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]), 1.);\n    Mag  : REAL;\n    Result : IfcVectorOrDirection\n           := V;\n  END_LOCAL;\n  \n    IF NOT EXISTS (Arg) THEN\n      RETURN (?);\n    ELSE\n      Ndim := Arg.Dim;\n      IF 'IFC2X2_FINAL.IFCVECTOR' IN TYPEOF(Arg) THEN\n        BEGIN\n          Vec := Arg;\n          V := Arg.Orientation;\n          IF Arg.Magnitude = 0.0 THEN\n            RETURN(?);\n          ELSE\n            Vec.Magnitude := 1.0;\n          END_IF;\n        END;\n      ELSE\n        V := Arg;\n      END_IF;\n      Mag := 0.0;\n        REPEAT i := 1 TO Ndim;\n          Mag := Mag + V.DirectionRatios[i]*V.DirectionRatios[i];\n        END_REPEAT;\n      IF Mag > 0.0 THEN\n        Mag := SQRT(Mag);\n        REPEAT i := 1 TO Ndim;\n          V.DirectionRatios[i] := V.DirectionRatios[i]/Mag;\n        END_REPEAT;\n        IF 'IFC2X2_FINAL.IFCVECTOR' IN TYPEOF(arg) THEN\n          Vec.Orientation := V;\n          Result := Vec;\n        ELSE\n          Result := V;\n        END_IF;\n      ELSE\n        RETURN(?);\n      END_IF;\n    END_IF;\n    RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcOrthogonalComplement\n\t(Vec : IfcDirection)\n\t: IfcDirection;\n  LOCAL\n    Result : IfcDirection ;\n  END_LOCAL;\n    IF NOT EXISTS (Vec) OR (Vec.Dim <> 2) THEN\n      RETURN(?);\n    ELSE\n      Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([-Vec.DirectionRatios[2], Vec.DirectionRatios[1]]);\n      RETURN(Result);\n    END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcPathHeadToTail\n\t(APath : IfcPath)\n\t: LOGICAL;\n     LOCAL\n       N : INTEGER := 0;\n       P : LOGICAL := UNKNOWN;\n     END_LOCAL;\n       N := SIZEOF (APath.EdgeList);\n     REPEAT i := 2 TO N;\n        P := P AND (APath.EdgeList[i-1].EdgeEnd :=:\n                    APath.EdgeList[i].EdgeStart);\n     END_REPEAT;\n     RETURN (P);\nEND_FUNCTION;\n\nFUNCTION IfcSameAxis2Placement\n\t(ap1, ap2 : IfcAxis2Placement; Epsilon : REAL)\n\t: LOGICAL;\n  \n    RETURN (IfcSameDirection(ap1.P[1],ap2.P[1],Epsilon) AND\n            IfcSameDirection(ap1.P[2],ap2.P[2],Epsilon) AND\n            IfcSameCartesianPoint(ap1.Location,ap1.Location,Epsilon));\nEND_FUNCTION;\n\nFUNCTION IfcSameCartesianPoint\n\t(cp1, cp2 : IfcCartesianPoint; Epsilon : REAL)\n\t: LOGICAL;\n  \n    RETURN (IfcSameValue(cp1.Coordinates[1],cp2.Coordinates[1],Epsilon) AND\n            IfcSameValue(cp1.Coordinates[2],cp2.Coordinates[2],Epsilon) AND\n            IfcSameValue(NVL(cp1.Coordinates[3],0.0),NVL(cp2.Coordinates[3],0.0),Epsilon));\nEND_FUNCTION;\n\nFUNCTION IfcSameDirection\n\t(dir1, dir2 : IfcDirection; Epsilon : REAL)\n\t: LOGICAL;\n  \n    RETURN (IfcSameValue(dir1.DirectionRatios[1],dir2.DirectionRatios[1],Epsilon) AND\n            IfcSameValue(dir1.DirectionRatios[2],dir2.DirectionRatios[2],Epsilon) AND\n            IfcSameValue(NVL(dir1.DirectionRatios[3],0.0),NVL(dir2.DirectionRatios[3],0.0),Epsilon));\nEND_FUNCTION;\n\nFUNCTION IfcSameValidPrecision\n\t(Epsilon1, Epsilon2 : REAL)\n\t: LOGICAL;\n  LOCAL\n    ValidEps1, ValidEps2 : REAL;\n    DefaultEps           : REAL := 0.00000001;\n    DerivationOfEps      : REAL := 1.001;\n    UpperEps             : REAL := 1.0;\n  END_LOCAL;\n  \n  \n  \n  \n  \n  \n    ValidEps1 := NVL(Epsilon1, DefaultEps);\n    ValidEps2 := NVL(Epsilon2, DefaultEps);\n    RETURN ((0.0 < ValidEps1) AND (ValidEps1 <= DerivationOfEps * ValidEps2) AND (ValidEps2 <= DerivationOfEps * ValidEps1) AND (ValidEps2 < UpperEps));\nEND_FUNCTION;\n\nFUNCTION IfcSameValue\n\t(Value1, Value2 : REAL; Epsilon : REAL)\n\t: LOGICAL;\n  LOCAL\n    ValidEps : REAL;\n  END_LOCAL;\n  \n  \n  \n  \n    ValidEps := NVL(Epsilon, 0.00000001);\n    RETURN ((Value1 + ValidEps > Value2) AND (Value1 < Value2 + ValidEps));\nEND_FUNCTION;\n\nFUNCTION IfcScalarTimesVector\n\t(Scalar : REAL; Vec : IfcVectorOrDirection)\n\t: IfcVector;\n  LOCAL\n    V : IfcDirection;\n    Mag : REAL;\n    Result : IfcVector;\n  END_LOCAL;\n  \n    IF NOT EXISTS (Scalar) OR NOT EXISTS (Vec) THEN\n      RETURN (?) ;\n    ELSE\n      IF 'IFC2X2_FINAL.IFCVECTOR' IN TYPEOF (Vec) THEN\n        V := Vec.Orientation;\n        Mag := Scalar * Vec.Magnitude;\n      ELSE\n        V := Vec;\n        Mag := Scalar;\n      END_IF;\n      IF (Mag < 0.0 ) THEN\n        REPEAT i := 1 TO SIZEOF(V.DirectionRatios);\n          V.DirectionRatios[i] := -V.DirectionRatios[i];\n        END_REPEAT;\n        Mag := -Mag;\n      END_IF;\n      Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(IfcNormalise(V), Mag);\n    END_IF;\n    RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcSecondProjAxis\n\t(ZAxis, XAxis, Arg: IfcDirection)\n\t: IfcDirection;\n  LOCAL\n    YAxis : IfcVector;\n    V     : IfcDirection;\n    Temp  : IfcVector;\n  END_LOCAL;\n  \n    IF NOT EXISTS(Arg) THEN\n      V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]);\n    ELSE\n      V := Arg;\n    END_IF;\n    Temp  := IfcScalarTimesVector(IfcDotProduct(V, ZAxis), ZAxis);\n    YAxis := IfcVectorDifference(V, Temp);\n    Temp  := IfcScalarTimesVector(IfcDotProduct(V, XAxis), XAxis);\n    YAxis := IfcVectorDifference(YAxis, Temp);\n    YAxis := IfcNormalise(YAxis);\n    RETURN(YAxis.Orientation);\nEND_FUNCTION;\n\nFUNCTION IfcShapeRepresentationTypes\n\t(RepType : IfcLabel; Items : SET OF IfcRepresentationItem)\n\t: LOGICAL;\n      \n      LOCAL\n        Count : INTEGER := 0;\n      END_LOCAL;\n  \n      CASE RepType OF \n      'Curve2D' :\n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCCURVE' IN TYPEOF(temp)) \n                   AND (temp.Dim = 2)));\n        END;\n      'GeometricSet' : \n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCGEOMETRICSET' IN TYPEOF(temp))\n                   OR ('IFC2X2_FINAL.IFCPOINT' IN TYPEOF(temp))\n                   OR ('IFC2X2_FINAL.IFCCURVE' IN TYPEOF(temp))\n                   OR ('IFC2X2_FINAL.IFCSURFACE' IN TYPEOF(temp))));\n        END;\n      'GeometricCurveSet' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCGEOMETRICCURVESET' IN TYPEOF(temp))\n                   OR ('IFC2X2_FINAL.IFCGEOMETRICSET' IN TYPEOF(temp))\n                   OR ('IFC2X2_FINAL.IFCPOINT' IN TYPEOF(temp))\n                   OR ('IFC2X2_FINAL.IFCCURVE' IN TYPEOF(temp))));\n           REPEAT i:=1 TO HIINDEX(Items);  \n             IF ('IFC2X2_FINAL.IFCGEOMETRICSET' IN TYPEOF(Items[i]))\n             THEN\n               IF (SIZEOF(QUERY(temp <* Items[i]\\IfcGeometricSet.Elements | 'IFC2X2_FINAL.IFCSURFACE' IN TYPEOF(temp))) > 0)\n               THEN\n                 Count := Count - 1;\n               END_IF;\n             END_IF;\n           END_REPEAT;\n        END;\n      'SurfaceModel' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                     'IFC2X2_FINAL.IFCSHELLBASEDSURFACEMODEL',\n                     'IFC2X2_FINAL.IFCFACEBASEDSURFACEMODEL',\n                     'IFC2X2_FINAL.IFCFACETEDBREP',\n                     'IFC2X2_FINAL.IFCFACETEDBREPWITHVOIDS'] * TYPEOF(temp)) >= 1\n                   ));      \n        END;\n      'SolidModel' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCSOLIDMODEL' IN TYPEOF(temp))));            \n        END;\n      'SweptSolid' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCSWEPTAREASOLID' IN TYPEOF(temp))));            \n        END;\n      'CSG' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCBOOLEANRESULT' IN TYPEOF(temp))));            \n        END;\n      'Clipping' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(temp))));            \n        END;\n      'AdvancedSweptSolid' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCSURFACECURVESWEPTAREASOLID' IN TYPEOF(temp))\n                   OR ('IFC2X2_FINAL.IFCSWEPTDISKSOLID' IN TYPEOF(temp))));      \n        END;\n      'Brep' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCFACETEDBREP' IN TYPEOF(temp))\n                   OR ('IFC2X2_FINAL.IFCFACETEDBREPWITHVOIDS' IN TYPEOF(temp))));      \n        END;\n      'BoundingBox' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCBOUNDINGBOX' IN TYPEOF(temp))));\n          IF (SIZEOF(Items) > 1)\n          THEN\n            Count := 0;\n          END_IF;   \n        END;\n      'SectionedSpine' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCSECTIONEDSPINE' IN TYPEOF(temp))));      \n        END;\n      'MappedRepresentation' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X2_FINAL.IFCMAPPEDITEM' IN TYPEOF(temp)))); \n          IF (SIZEOF(Items) > 1)\n          THEN\n            Count := 0;\n          END_IF;   \n        END;\n       OTHERWISE : RETURN(?);\n      END_CASE;\n      RETURN (Count = SIZEOF(Items));\nEND_FUNCTION;\n\nFUNCTION IfcTopologyRepresentationTypes\n\t(RepType : IfcLabel; Items : SET OF IfcRepresentationItem)\n\t: LOGICAL;\n      \n      LOCAL\n        Count : INTEGER := 0;\n      END_LOCAL;\n  \n      CASE RepType OF \n      'Vertex' :\n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X2_FINAL.IFCVERTEX' IN TYPEOF(temp))));\n        END;\n      'Edge' : \n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X2_FINAL.IFCEDGE' IN TYPEOF(temp))));\n        END;\n      'Path' : \n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X2_FINAL.IFCPATH' IN TYPEOF(temp))));\n        END;\n      'Face' : \n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X2_FINAL.IFCFACE' IN TYPEOF(temp))));\n        END;\n      'Shell' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X2_FINAL.IFCOPENSHELL' IN TYPEOF(temp))\n                      OR ('IFC2X2_FINAL.IFCCLOSEDSHELL' IN TYPEOF(temp))));\n        END;\n      'Undefined': RETURN(TRUE);\n       OTHERWISE : RETURN(?);\n      END_CASE;\n      RETURN (Count = SIZEOF(Items));\nEND_FUNCTION;\n\nFUNCTION IfcUniquePropertyName\n\t(Properties : SET [1:?] OF IfcProperty)\n\t: LOGICAL;\n  \n  LOCAL\n    Names : SET OF IfcIdentifier := [];\n  END_LOCAL;\n  \n  REPEAT i:=1 TO HIINDEX(Properties);\n    Names := Names + Properties[i].Name;\n  END_REPEAT;\n  RETURN (SIZEOF(Names) = SIZEOF(Properties));\nEND_FUNCTION;\n\nFUNCTION IfcValidCalendarDate\n\t(Date : IfcCalendarDate)\n\t: LOGICAL;\n  IF NOT ({1 <= Date.DayComponent <= 31}) THEN    \n    RETURN(FALSE);  \n  END_IF;\n  CASE Date.MonthComponent OF\n    4         : RETURN({ 1<= Date.DayComponent <= 30});\n    6         : RETURN({ 1<= Date.DayComponent <= 30});\n    9         : RETURN({ 1<= Date.DayComponent <= 30});\n    11        : RETURN({ 1<= Date.DayComponent <= 30});    \n    2         :    \n    BEGIN\n      IF (IfcLeapYear(Date.YearComponent)) THEN\n        RETURN({ 1<= Date.DayComponent <= 29});      \n      ELSE\n        RETURN({ 1<= Date.DayComponent <= 28});      \n      END_IF;    \n    END;\n    OTHERWISE : RETURN(TRUE);  \n  END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcValidTime\n\t(Time: IfcLocalTime)\n\t: BOOLEAN;\n  IF EXISTS (Time.SecondComponent) THEN\n    RETURN (EXISTS (Time.MinuteComponent));  \n  ELSE    \n    RETURN (TRUE);  \n  END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcVectorDifference\n\t(Arg1, Arg2 : IfcVectorOrDirection)\n\t: IfcVector;\n  LOCAL\n    Result : IfcVector;\n    Res, Vec1, Vec2 : IfcDirection;\n    Mag, Mag1, Mag2 : REAL;\n    Ndim : INTEGER;\n  END_LOCAL;\n  \n    IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN\n      RETURN (?) ;\n    ELSE\n      BEGIN\n        IF 'IFC2X2_FINAL.IFCVECTOR' IN TYPEOF(Arg1) THEN\n          Mag1 := Arg1.Magnitude;\n          Vec1 := Arg1.Orientation;\n        ELSE\n          Mag1 := 1.0;\n          Vec1 := Arg1;\n        END_IF;\n        IF 'IFC2X2_FINAL.IFCVECTOR' IN TYPEOF(Arg2) THEN\n          Mag2 := Arg2.Magnitude;\n          Vec2 := Arg2.Orientation;\n        ELSE\n          Mag2 := 1.0;\n          Vec2 := Arg2;\n        END_IF;\n        Vec1 := IfcNormalise (Vec1);\n        Vec2 := IfcNormalise (Vec2);\n        Ndim := SIZEOF(Vec1.DirectionRatios);\n        Mag  := 0.0;\n        IF (Ndim = 2) THEN\n          Res := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.,0.]);\n        ELSE\n          Res := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.,0.,0.]);\n        END_IF;\n        Res.DirectionRatios := [0.0:Ndim];\n        REPEAT i := 1 TO Ndim;\n          Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] + Mag2*Vec2.DirectionRatios[i];\n          Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]);\n        END_REPEAT;\n        IF (Mag > 0.0 ) THEN\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag));\n        ELSE\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0);\n        END_IF;\n      END;\n    END_IF;\n    RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcVectorSum\n\t(Arg1, Arg2 : IfcVectorOrDirection)\n\t: IfcVector;\n  LOCAL\n    Result : IfcVector;\n    Res, Vec1, Vec2 : IfcDirection;\n    Mag, Mag1, Mag2 : REAL;\n    Ndim : INTEGER;\n  END_LOCAL;\n  \n    IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN\n      RETURN (?) ;\n    ELSE\n      BEGIN\n        IF 'IFC2X2_FINAL.IFCVECTOR' IN TYPEOF(Arg1) THEN\n          Mag1 := Arg1.Magnitude;\n          Vec1 := Arg1.Orientation;\n        ELSE\n          Mag1 := 1.0;\n          Vec1 := Arg1;\n        END_IF;\n        IF 'IFC2X2_FINAL.IFCVECTOR' IN TYPEOF(Arg2) THEN\n          Mag2 := Arg2.Magnitude;\n          Vec2 := Arg2.Orientation;\n        ELSE\n          Mag2 := 1.0;\n          Vec2 := Arg2;\n        END_IF;\n        Vec1 := IfcNormalise (Vec1);\n        Vec2 := IfcNormalise (Vec2);\n        Ndim := SIZEOF(Vec1.DirectionRatios);\n        Mag  := 0.0;\n        Res  := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([]);\n        REPEAT i := 1 TO Ndim;\n          Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] +\n                                       Mag2*Vec2.DirectionRatios[i];\n          Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]);\n        END_REPEAT;\n        IF (Mag > 0.0 ) THEN\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag));\n        ELSE\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0);\n        END_IF;\n      END;\n    END_IF;\n    RETURN (Result);\nEND_FUNCTION;\n\nRULE IfcPlacementNotShared FOR \n\t(IfcObjectPlacement);\n      LOCAL\n    \n    IsPlacementShared : LOGICAL := FALSE;\n    \n  END_LOCAL;\n    \n  IF (SIZEOF(IfcObjectPlacement) > 0) THEN\n    \n    REPEAT i := LOINDEX(IfcObjectPlacement)   TO HIINDEX(IfcObjectPlacement);\n    \n      IF (SIZEOF(USEDIN(IfcObjectPlacement[i],   'IFC2X2_FINAL.IFCPRODUCT.OBJECTPLACEMENT')) > 1) THEN\n    \n        IsPlacementShared := TRUE;\n    \n      END_IF;\n    \n    END_REPEAT;\n    \n  END_IF;\n    \n\n    WHERE\n      WR1 : IsPlacementShared = FALSE;\nEND_RULE;\n\nRULE IfcRepresentationContextSameWCS FOR \n\t(IfcGeometricRepresentationContext);\n    LOCAL\n      IsDifferent  : LOGICAL := FALSE;\n    END_LOCAL;\n      IF (SIZEOF(IfcGeometricRepresentationContext) > 1)\n      THEN\n        REPEAT i := 2 TO HIINDEX(IfcGeometricRepresentationContext);\n          IF (IfcGeometricRepresentationContext[1].WorldCoordinateSystem :<>: IfcGeometricRepresentationContext[i].WorldCoordinateSystem)\n          THEN\n            IsDifferent := (NOT(IfcSameValidPrecision(IfcGeometricRepresentationContext[1].Precision,\n                                                      IfcGeometricRepresentationContext[i].Precision)))\n                        OR (NOT(IfcSameAxis2Placement(IfcGeometricRepresentationContext[1].WorldCoordinateSystem,\n                                                      IfcGeometricRepresentationContext[i].WorldCoordinateSystem,\n                                                      IfcGeometricRepresentationContext[1].Precision)));\n          END_IF;\n        END_REPEAT;\n      END_IF;\n    WHERE\n      WR1 : IsDifferent = FALSE;\nEND_RULE;\n\nRULE IfcSingleProjectInstance FOR \n\t(IfcProject);\n    WHERE\n      WR1 : SIZEOF(IfcProject) <= 1;\nEND_RULE;\n\nEND_SCHEMA;\n"
  },
  {
    "path": "Source/RevitIFCTools/IFC2X2_ADD1.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- created with EXPTOOL V20070502 (perl 5 program) written by Thomas Liebich, AEC3, tl@aec3.de -->\n<!-- validated with XMLspy2007 sp2 (http://www.xmlspy.com) by Thomas Liebich, AEC3, tl@aec3.de -->\n<!-- configuration options used to create the following XML schema definitions following ISO 10303-28ed2 CD -->\n<!-- global options within the <option> scoping element -->\n<!-- + <inheritance> = \"true\" -->\n<!-- + <exp-type> = \"unspecified\" -->\n<!-- + <exp-attribute> = \"double-tag\" -->\n<!-- + <flatten> = \"false\" -->\n<!-- + <sparse> = \"true\" -->\n<!-- + <tagless> = \"false\" -->\n<!-- + <naming-convention> = \"preserve-case\" -->\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:ex=\"urn:iso.org:standard:10303:part(28):version(2):xmlschema:common\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:ifc=\"http://www.iai-tech.org/ifcXML/IFC2x2/FINAL\" targetNamespace=\"http://www.iai-tech.org/ifcXML/IFC2x2/FINAL\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\">\n\t<!-- root element declaration (for SCHEMA definitions) -->\n\t<xs:import namespace=\"urn:iso.org:standard:10303:part(28):version(2):xmlschema:common\" schemaLocation=\"http://www.iai-tech.org/ifcXML/IFC2x2/FINAL/ex.xsd\"/>\n\t<xs:element name=\"uos\" type=\"ifc:uos\" substitutionGroup=\"ex:uos\"/>\n\t<xs:complexType name=\"uos\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:uos\">\n\t\t\t\t<xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n\t\t\t\t\t<xs:element ref=\"ex:Entity\"/>\n\t\t\t\t</xs:choice>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<!-- element and complex type declarations (for ENTITY definitions) -->\n\t<xs:element name=\"Ifc2DCompositeCurve\" type=\"ifc:Ifc2DCompositeCurve\" substitutionGroup=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"Ifc2DCompositeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActionRequest\" type=\"ifc:IfcActionRequest\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActionRequest\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RequestID\" type=\"ifc:IfcIdentifier\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActor\" type=\"ifc:IfcActor\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TheActor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActorRole\" type=\"ifc:IfcActorRole\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActorRole\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Role\" type=\"ifc:IfcRoleEnum\"/>\n\t\t\t\t\t<xs:element name=\"UserDefinedRole\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActuatorType\" type=\"ifc:IfcActuatorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActuatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAddress\" type=\"ifc:IfcAddress\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAddress\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Purpose\" type=\"ifc:IfcAddressTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"UserDefinedPurpose\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalBoxType\" type=\"ifc:IfcAirTerminalBoxType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalBoxType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalType\" type=\"ifc:IfcAirTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirToAirHeatRecoveryType\" type=\"ifc:IfcAirToAirHeatRecoveryType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirToAirHeatRecoveryType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlarmType\" type=\"ifc:IfcAlarmType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlarmType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAngularDimension\" type=\"ifc:IfcAngularDimension\" substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAngularDimension\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotation\" type=\"ifc:IfcAnnotation\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotationCurveOccurrence\" type=\"ifc:IfcAnnotationCurveOccurrence\" substitutionGroup=\"ifc:IfcAnnotationOccurrence\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotationCurveOccurrence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotationFillArea\" type=\"ifc:IfcAnnotationFillArea\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotationFillArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Boundaries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotationFillAreaOccurrence\" type=\"ifc:IfcAnnotationFillAreaOccurrence\" substitutionGroup=\"ifc:IfcAnnotationOccurrence\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotationFillAreaOccurrence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FillStyleTarget\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotationOccurrence\" type=\"ifc:IfcAnnotationOccurrence\" abstract=\"true\" substitutionGroup=\"ifc:IfcStyledItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotationOccurrence\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStyledItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotationSurfaceOccurrence\" type=\"ifc:IfcAnnotationSurfaceOccurrence\" substitutionGroup=\"ifc:IfcAnnotationOccurrence\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotationSurfaceOccurrence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotationSymbolOccurrence\" type=\"ifc:IfcAnnotationSymbolOccurrence\" substitutionGroup=\"ifc:IfcAnnotationOccurrence\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotationSymbolOccurrence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotationTextOccurrence\" type=\"ifc:IfcAnnotationTextOccurrence\" substitutionGroup=\"ifc:IfcAnnotationOccurrence\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotationTextOccurrence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApplication\" type=\"ifc:IfcApplication\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApplication\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ApplicationDeveloper\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Version\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"ApplicationFullName\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"ApplicationIdentifier\" type=\"ifc:IfcIdentifier\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAppliedValue\" type=\"ifc:IfcAppliedValue\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAppliedValue\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"AppliedValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitBasis\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ApplicableDate\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FixedUntilDate\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAppliedValueRelationship\" type=\"ifc:IfcAppliedValueRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAppliedValueRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ComponentOfTotal\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Components\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ArithmeticOperator\" type=\"ifc:IfcArithmeticOperatorEnum\"/>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApproval\" type=\"ifc:IfcApproval\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApproval\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ApprovalDateTime\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ApprovalStatus\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ApprovalLevel\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ApprovalQualifier\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"Identifier\" type=\"ifc:IfcIdentifier\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApprovalActorRelationship\" type=\"ifc:IfcApprovalActorRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApprovalActorRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Actor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Approval\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Role\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApprovalPropertyRelationship\" type=\"ifc:IfcApprovalPropertyRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApprovalPropertyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ApprovedProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Approval\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApprovalRelationship\" type=\"ifc:IfcApprovalRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApprovalRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedApproval\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryClosedProfileDef\" type=\"ifc:IfcArbitraryClosedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryClosedProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OuterCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryOpenProfileDef\" type=\"ifc:IfcArbitraryOpenProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryOpenProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Curve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryProfileDefWithVoids\" type=\"ifc:IfcArbitraryProfileDefWithVoids\" substitutionGroup=\"ifc:IfcArbitraryClosedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryProfileDefWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryClosedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerCurves\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAsset\" type=\"ifc:IfcAsset\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAsset\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AssetID\" type=\"ifc:IfcIdentifier\"/>\n\t\t\t\t\t<xs:element name=\"OriginalValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurrentValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TotalReplacementCost\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Owner\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"User\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResponsiblePerson\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"IncorporationDate\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DepreciatedValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAsymmetricIShapeProfileDef\" type=\"ifc:IfcAsymmetricIShapeProfileDef\" substitutionGroup=\"ifc:IfcIShapeProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAsymmetricIShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcIShapeProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TopFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"TopFlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TopFlangeFilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis1Placement\" type=\"ifc:IfcAxis1Placement\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis1Placement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis2Placement2D\" type=\"ifc:IfcAxis2Placement2D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis2Placement2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RefDirection\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis2Placement3D\" type=\"ifc:IfcAxis2Placement3D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis2Placement3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RefDirection\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineCurve\" type=\"ifc:IfcBSplineCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Degree\" type=\"xs:long\"/>\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveForm\" type=\"ifc:IfcBSplineCurveForm\"/>\n\t\t\t\t\t<xs:element name=\"ClosedCurve\" type=\"ex:logical\"/>\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeam\" type=\"ifc:IfcBeam\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeam\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeamType\" type=\"ifc:IfcBeamType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeamType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBezierCurve\" type=\"ifc:IfcBezierCurve\" substitutionGroup=\"ifc:IfcBSplineCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBezierCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoilerType\" type=\"ifc:IfcBoilerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoilerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBooleanClippingResult\" type=\"ifc:IfcBooleanClippingResult\" substitutionGroup=\"ifc:IfcBooleanResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBooleanClippingResult\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBooleanResult\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBooleanResult\" type=\"ifc:IfcBooleanResult\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBooleanResult\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Operator\" type=\"ifc:IfcBooleanOperator\"/>\n\t\t\t\t\t<xs:element name=\"FirstOperand\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondOperand\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryCondition\" type=\"ifc:IfcBoundaryCondition\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryCondition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryEdgeCondition\" type=\"ifc:IfcBoundaryEdgeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryEdgeCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByLengthX\" type=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByLengthY\" type=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByLengthZ\" type=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthX\" type=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthY\" type=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthZ\" type=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryFaceCondition\" type=\"ifc:IfcBoundaryFaceCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryFaceCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByAreaX\" type=\"ifc:IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByAreaY\" type=\"ifc:IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByAreaZ\" type=\"ifc:IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryNodeCondition\" type=\"ifc:IfcBoundaryNodeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryNodeCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LinearStiffnessX\" type=\"ifc:IfcLinearStiffnessMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LinearStiffnessY\" type=\"ifc:IfcLinearStiffnessMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LinearStiffnessZ\" type=\"ifc:IfcLinearStiffnessMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessX\" type=\"ifc:IfcRotationalStiffnessMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessY\" type=\"ifc:IfcRotationalStiffnessMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessZ\" type=\"ifc:IfcRotationalStiffnessMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryNodeConditionWarping\" type=\"ifc:IfcBoundaryNodeConditionWarping\" substitutionGroup=\"ifc:IfcBoundaryNodeCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryNodeConditionWarping\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryNodeCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WarpingStiffness\" type=\"ifc:IfcWarpingMomentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundedCurve\" type=\"ifc:IfcBoundedCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundedCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundedSurface\" type=\"ifc:IfcBoundedSurface\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundingBox\" type=\"ifc:IfcBoundingBox\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundingBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Corner\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"ZDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoxedHalfSpace\" type=\"ifc:IfcBoxedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoxedHalfSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Enclosure\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundingBox\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuilding\" type=\"ifc:IfcBuilding\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuilding\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ElevationOfRefHeight\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ElevationOfTerrain\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"BuildingAddress\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPostalAddress\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElement\" type=\"ifc:IfcBuildingElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementComponent\" type=\"ifc:IfcBuildingElementComponent\" abstract=\"true\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementComponent\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementComponentType\" type=\"ifc:IfcBuildingElementComponentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementComponentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementPart\" type=\"ifc:IfcBuildingElementPart\" substitutionGroup=\"ifc:IfcBuildingElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementPart\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementComponent\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementProxy\" type=\"ifc:IfcBuildingElementProxy\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementProxy\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CompositionType\" type=\"ifc:IfcElementCompositionEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementType\" type=\"ifc:IfcBuildingElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingStorey\" type=\"ifc:IfcBuildingStorey\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingStorey\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elevation\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCShapeProfileDef\" type=\"ifc:IfcCShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"Girth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"InternalFilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierFittingType\" type=\"ifc:IfcCableCarrierFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierSegmentType\" type=\"ifc:IfcCableCarrierSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableSegmentType\" type=\"ifc:IfcCableSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCalendarDate\" type=\"ifc:IfcCalendarDate\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCalendarDate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DayComponent\" type=\"ifc:IfcDayInMonthNumber\"/>\n\t\t\t\t\t<xs:element name=\"MonthComponent\" type=\"ifc:IfcMonthInYearNumber\"/>\n\t\t\t\t\t<xs:element name=\"YearComponent\" type=\"ifc:IfcYearNumber\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPoint\" type=\"ifc:IfcCartesianPoint\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Coordinates\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\" maxOccurs=\"3\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator\" type=\"ifc:IfcCartesianTransformationOperator\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis1\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Axis2\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LocalOrigin\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Scale\" type=\"xs:double\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator2D\" type=\"ifc:IfcCartesianTransformationOperator2D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator2DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator2DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2DnonUniform\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator2D\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Scale2\" type=\"xs:double\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator3D\" type=\"ifc:IfcCartesianTransformationOperator3D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis3\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator3DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator3DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3DnonUniform\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator3D\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Scale2\" type=\"xs:double\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Scale3\" type=\"xs:double\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChamferEdgeFeature\" type=\"ifc:IfcChamferEdgeFeature\" substitutionGroup=\"ifc:IfcEdgeFeature\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChamferEdgeFeature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdgeFeature\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChillerType\" type=\"ifc:IfcChillerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChillerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircle\" type=\"ifc:IfcCircle\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircleHollowProfileDef\" type=\"ifc:IfcCircleHollowProfileDef\" substitutionGroup=\"ifc:IfcCircleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircleHollowProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCircleProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircleProfileDef\" type=\"ifc:IfcCircleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassification\" type=\"ifc:IfcClassification\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassification\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Source\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"Edition\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"EditionDate\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassificationItem\" type=\"ifc:IfcClassificationItem\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassificationItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Notation\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationNotationFacet\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ItemOf\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Title\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassificationItemRelationship\" type=\"ifc:IfcClassificationItemRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassificationItemRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingItem\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationItem\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedItems\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassificationNotation\" type=\"ifc:IfcClassificationNotation\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassificationNotation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"NotationFacets\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationNotationFacet\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationNotationFacet\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassificationNotationFacet\" type=\"ifc:IfcClassificationNotationFacet\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassificationNotationFacet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"NotationValue\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassificationReference\" type=\"ifc:IfcClassificationReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassificationReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedSource\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClosedShell\" type=\"ifc:IfcClosedShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClosedShell\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoilType\" type=\"ifc:IfcCoilType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoilType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourRgb\" type=\"ifc:IfcColourRgb\" substitutionGroup=\"ifc:IfcColourSpecification\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourRgb\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcColourSpecification\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Red\" type=\"ifc:IfcNormalisedRatioMeasure\"/>\n\t\t\t\t\t<xs:element name=\"Green\" type=\"ifc:IfcNormalisedRatioMeasure\"/>\n\t\t\t\t\t<xs:element name=\"Blue\" type=\"ifc:IfcNormalisedRatioMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourSpecification\" type=\"ifc:IfcColourSpecification\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourSpecification\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumn\" type=\"ifc:IfcColumn\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumn\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumnType\" type=\"ifc:IfcColumnType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumnType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcComplexProperty\" type=\"ifc:IfcComplexProperty\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcComplexProperty\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UsageName\" type=\"ifc:IfcIdentifier\"/>\n\t\t\t\t\t<xs:element name=\"HasProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurve\" type=\"ifc:IfcCompositeCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Segments\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCompositeCurveSegment\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCompositeCurveSegment\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurveSegment\" type=\"ifc:IfcCompositeCurveSegment\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurveSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Transition\" type=\"ifc:IfcTransitionCode\"/>\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"xs:boolean\"/>\n\t\t\t\t\t<xs:element name=\"ParentCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeProfileDef\" type=\"ifc:IfcCompositeProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Profiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Label\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompressorType\" type=\"ifc:IfcCompressorType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompressorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCondenserType\" type=\"ifc:IfcCondenserType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCondenserType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCondition\" type=\"ifc:IfcCondition\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConditionCriterion\" type=\"ifc:IfcConditionCriterion\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConditionCriterion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Criterion\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcConditionCriterionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CriterionDateTime\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConic\" type=\"ifc:IfcConic\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConic\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectedFaceSet\" type=\"ifc:IfcConnectedFaceSet\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectedFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CfsFaces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFace\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFace\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionCurveGeometry\" type=\"ifc:IfcConnectionCurveGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionCurveGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionGeometry\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionPointGeometry\" type=\"ifc:IfcConnectionPointGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionPointGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PointOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionPortGeometry\" type=\"ifc:IfcConnectionPortGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionPortGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LocationAtRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LocationAtRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ProfileOfPort\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionSurfaceGeometry\" type=\"ifc:IfcConnectionSurfaceGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionSurfaceGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstraint\" type=\"ifc:IfcConstraint\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstraint\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ConstraintGrade\" type=\"ifc:IfcConstraintEnum\"/>\n\t\t\t\t\t<xs:element name=\"ConstraintSource\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CreatingActor\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CreationTime\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UserDefinedGrade\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstraintAggregationRelationship\" type=\"ifc:IfcConstraintAggregationRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstraintAggregationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedConstraints\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcConstraint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LogicalAggregator\" type=\"ifc:IfcLogicalOperatorEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstraintClassificationRelationship\" type=\"ifc:IfcConstraintClassificationRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstraintClassificationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ClassifiedConstraint\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedClassifications\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationNotationSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstraintRelationship\" type=\"ifc:IfcConstraintRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstraintRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedConstraints\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcConstraint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionEquipmentResource\" type=\"ifc:IfcConstructionEquipmentResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionEquipmentResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionMaterialResource\" type=\"ifc:IfcConstructionMaterialResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionMaterialResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Suppliers\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UsageRatio\" type=\"ifc:IfcRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionProductResource\" type=\"ifc:IfcConstructionProductResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionProductResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionResource\" type=\"ifc:IfcConstructionResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ResourceIdentifier\" type=\"ifc:IfcIdentifier\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ResourceGroup\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ResourceConsumption\" type=\"ifc:IfcResourceConsumptionEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"BaseQuantity\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcContextDependentUnit\" type=\"ifc:IfcContextDependentUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcContextDependentUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcControl\" type=\"ifc:IfcControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcControl\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcControllerType\" type=\"ifc:IfcControllerType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcControllerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConversionBasedUnit\" type=\"ifc:IfcConversionBasedUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConversionBasedUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"ConversionFactor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCooledBeamType\" type=\"ifc:IfcCooledBeamType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCooledBeamType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoolingTowerType\" type=\"ifc:IfcCoolingTowerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoolingTowerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoordinatedUniversalTimeOffset\" type=\"ifc:IfcCoordinatedUniversalTimeOffset\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoordinatedUniversalTimeOffset\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HourOffset\" type=\"ifc:IfcHourInDay\"/>\n\t\t\t\t\t<xs:element name=\"MinuteOffset\" type=\"ifc:IfcMinuteInHour\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Sense\" type=\"ifc:IfcAheadOrBehind\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostItem\" type=\"ifc:IfcCostItem\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostSchedule\" type=\"ifc:IfcCostSchedule\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SubmittedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PreparedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SubmittedOn\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Status\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TargetUsers\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UpdateDate\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ID\" type=\"ifc:IfcIdentifier\"/>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCostScheduleTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostValue\" type=\"ifc:IfcCostValue\" substitutionGroup=\"ifc:IfcAppliedValue\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CostType\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"Condition\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCovering\" type=\"ifc:IfcCovering\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCovering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoveringType\" type=\"ifc:IfcCoveringType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoveringType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCraneRailAShapeProfileDef\" type=\"ifc:IfcCraneRailAShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCraneRailAShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"BaseWidth2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"HeadWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"HeadDepth2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"HeadDepth3\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"BaseWidth4\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"BaseDepth1\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"BaseDepth2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"BaseDepth3\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCraneRailFShapeProfileDef\" type=\"ifc:IfcCraneRailFShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCraneRailFShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"HeadWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"HeadDepth2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"HeadDepth3\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"BaseDepth1\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"BaseDepth2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCrewResource\" type=\"ifc:IfcCrewResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCrewResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCsgSolid\" type=\"ifc:IfcCsgSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCsgSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TreeRootExpression\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCsgSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurrencyRelationship\" type=\"ifc:IfcCurrencyRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurrencyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMonetaryUnit\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedMonetaryUnit\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ExchangeRate\" type=\"ifc:IfcPositiveRatioMeasure\"/>\n\t\t\t\t\t<xs:element name=\"RateDateTime\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RateSource\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurtainWall\" type=\"ifc:IfcCurtainWall\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurtainWall\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurve\" type=\"ifc:IfcCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveBoundedPlane\" type=\"ifc:IfcCurveBoundedPlane\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveBoundedPlane\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPlane\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"OuterBoundary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyle\" type=\"ifc:IfcCurveStyle\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"CurveFont\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveWidth\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFont\" type=\"ifc:IfcCurveStyleFont\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PatternList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontPattern\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurveStyleFontPattern\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFontAndScaling\" type=\"ifc:IfcCurveStyleFontAndScaling\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFontAndScaling\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CurveFont\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveFontScaling\" type=\"ifc:IfcPositiveRatioMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFontPattern\" type=\"ifc:IfcCurveStyleFontPattern\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFontPattern\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VisibleSegmentLength\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"InvisibleSegmentLength\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDamperType\" type=\"ifc:IfcDamperType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDamperType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDateAndTime\" type=\"ifc:IfcDateAndTime\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDateAndTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DateComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TimeComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLocalTime\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDefinedSymbol\" type=\"ifc:IfcDefinedSymbol\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDefinedSymbol\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Definition\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinedSymbolSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Target\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator2D\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedProfileDef\" type=\"ifc:IfcDerivedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentProfile\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Operator\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator2D\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Label\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedUnit\" type=\"ifc:IfcDerivedUnit\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDerivedUnitElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDerivedUnitElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitType\" type=\"ifc:IfcDerivedUnitEnum\"/>\n\t\t\t\t\t<xs:element name=\"UserDefinedType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedUnitElement\" type=\"ifc:IfcDerivedUnitElement\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedUnitElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Exponent\" type=\"xs:long\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDiameterDimension\" type=\"ifc:IfcDiameterDimension\" substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDiameterDimension\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDimensionCalloutRelationship\" type=\"ifc:IfcDimensionCalloutRelationship\" substitutionGroup=\"ifc:IfcDraughtingCalloutRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDimensionCalloutRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCalloutRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDimensionCurve\" type=\"ifc:IfcDimensionCurve\" substitutionGroup=\"ifc:IfcAnnotationCurveOccurrence\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDimensionCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationCurveOccurrence\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDimensionCurveDirectedCallout\" type=\"ifc:IfcDimensionCurveDirectedCallout\" substitutionGroup=\"ifc:IfcDraughtingCallout\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDimensionCurveDirectedCallout\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCallout\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDimensionCurveTerminator\" type=\"ifc:IfcDimensionCurveTerminator\" substitutionGroup=\"ifc:IfcTerminatorSymbol\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDimensionCurveTerminator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTerminatorSymbol\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Role\" type=\"ifc:IfcDimensionExtentUsage\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDimensionalExponents\" type=\"ifc:IfcDimensionalExponents\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDimensionalExponents\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LengthExponent\" type=\"xs:long\"/>\n\t\t\t\t\t<xs:element name=\"MassExponent\" type=\"xs:long\"/>\n\t\t\t\t\t<xs:element name=\"TimeExponent\" type=\"xs:long\"/>\n\t\t\t\t\t<xs:element name=\"ElectricCurrentExponent\" type=\"xs:long\"/>\n\t\t\t\t\t<xs:element name=\"ThermodynamicTemperatureExponent\" type=\"xs:long\"/>\n\t\t\t\t\t<xs:element name=\"AmountOfSubstanceExponent\" type=\"xs:long\"/>\n\t\t\t\t\t<xs:element name=\"LuminousIntensityExponent\" type=\"xs:long\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDirection\" type=\"ifc:IfcDirection\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDirection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DirectionRatios\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:double-wrapper\" minOccurs=\"2\" maxOccurs=\"3\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:double-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDiscreteAccessory\" type=\"ifc:IfcDiscreteAccessory\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDiscreteAccessory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDiscreteAccessoryType\" type=\"ifc:IfcDiscreteAccessoryType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDiscreteAccessoryType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionChamberElement\" type=\"ifc:IfcDistributionChamberElement\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionChamberElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionChamberElementType\" type=\"ifc:IfcDistributionChamberElementType\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionChamberElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionControlElement\" type=\"ifc:IfcDistributionControlElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionControlElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ControlElementId\" type=\"ifc:IfcIdentifier\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionControlElementType\" type=\"ifc:IfcDistributionControlElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionControlElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionElement\" type=\"ifc:IfcDistributionElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionElementType\" type=\"ifc:IfcDistributionElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionFlowElement\" type=\"ifc:IfcDistributionFlowElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionFlowElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionFlowElementType\" type=\"ifc:IfcDistributionFlowElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionFlowElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionPort\" type=\"ifc:IfcDistributionPort\" substitutionGroup=\"ifc:IfcPort\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionPort\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPort\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FlowDirection\" type=\"ifc:IfcFlowDirectionEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentElectronicFormat\" type=\"ifc:IfcDocumentElectronicFormat\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentElectronicFormat\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FileExtension\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MimeContentType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MimeSubtype\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentInformation\" type=\"ifc:IfcDocumentInformation\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentInformation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DocumentId\" type=\"ifc:IfcIdentifier\"/>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"DocumentReferences\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDocumentReference\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Purpose\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"IntendedUse\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Scope\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Revision\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"DocumentOwner\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Editors\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CreationTime\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LastRevisionTime\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ElectronicFormat\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentElectronicFormat\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ValidFrom\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ValidUntil\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Confidentiality\" type=\"ifc:IfcDocumentConfidentialityEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Status\" type=\"ifc:IfcDocumentStatusEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentInformationRelationship\" type=\"ifc:IfcDocumentInformationRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentInformationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedDocuments\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDocumentInformation\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelationshipType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentReference\" type=\"ifc:IfcDocumentReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoor\" type=\"ifc:IfcDoor\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorLiningProperties\" type=\"ifc:IfcDoorLiningProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorLiningProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LiningThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ThresholdDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ThresholdThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TransomThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TransomOffset\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LiningOffset\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ThresholdOffset\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CasingThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CasingDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorPanelProperties\" type=\"ifc:IfcDoorPanelProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorPanelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PanelDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PanelOperation\" type=\"ifc:IfcDoorPanelOperationEnum\"/>\n\t\t\t\t\t<xs:element name=\"PanelWidth\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PanelPosition\" type=\"ifc:IfcDoorPanelPositionEnum\"/>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorStyle\" type=\"ifc:IfcDoorStyle\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcDoorStyleOperationEnum\"/>\n\t\t\t\t\t<xs:element name=\"ConstructionType\" type=\"ifc:IfcDoorStyleConstructionEnum\"/>\n\t\t\t\t\t<xs:element name=\"ParameterTakesPrecedence\" type=\"xs:boolean\"/>\n\t\t\t\t\t<xs:element name=\"Sizeable\" type=\"xs:boolean\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingCallout\" type=\"ifc:IfcDraughtingCallout\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingCallout\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Contents\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDraughtingCalloutElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDraughtingCalloutElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingCalloutRelationship\" type=\"ifc:IfcDraughtingCalloutRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingCalloutRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RelatingDraughtingCallout\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDraughtingCallout\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedDraughtingCallout\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDraughtingCallout\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingPreDefinedColour\" type=\"ifc:IfcDraughtingPreDefinedColour\" substitutionGroup=\"ifc:IfcPreDefinedColour\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedColour\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingPreDefinedCurveFont\" type=\"ifc:IfcDraughtingPreDefinedCurveFont\" substitutionGroup=\"ifc:IfcPreDefinedCurveFont\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedCurveFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingPreDefinedTextFont\" type=\"ifc:IfcDraughtingPreDefinedTextFont\" substitutionGroup=\"ifc:IfcPreDefinedTextFont\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedTextFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedTextFont\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctFittingType\" type=\"ifc:IfcDuctFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSegmentType\" type=\"ifc:IfcDuctSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSilencerType\" type=\"ifc:IfcDuctSilencerType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSilencerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdge\" type=\"ifc:IfcEdge\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeStart\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertex\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EdgeEnd\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertex\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdgeCurve\" type=\"ifc:IfcEdgeCurve\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdgeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeGeometry\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"xs:boolean\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdgeFeature\" type=\"ifc:IfcEdgeFeature\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdgeFeature\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FeatureLength\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdgeLoop\" type=\"ifc:IfcEdgeLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdgeLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricApplianceType\" type=\"ifc:IfcElectricApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricDistributionPoint\" type=\"ifc:IfcElectricDistributionPoint\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricDistributionPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DistributionPointFunction\" type=\"ifc:IfcElectricDistributionPointFunctionEnum\"/>\n\t\t\t\t\t<xs:element name=\"UserDefinedFunction\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowStorageDeviceType\" type=\"ifc:IfcElectricFlowStorageDeviceType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowStorageDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricGeneratorType\" type=\"ifc:IfcElectricGeneratorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricGeneratorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricHeaterType\" type=\"ifc:IfcElectricHeaterType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricHeaterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricHeaterTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricMotorType\" type=\"ifc:IfcElectricMotorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricMotorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricTimeControlType\" type=\"ifc:IfcElectricTimeControlType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricTimeControlType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricalBaseProperties\" type=\"ifc:IfcElectricalBaseProperties\" substitutionGroup=\"ifc:IfcEnergyProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricalBaseProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ElectricCurrentType\" type=\"ifc:IfcElectricCurrentEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"InputVoltage\" type=\"ifc:IfcElectricVoltageMeasure\"/>\n\t\t\t\t\t<xs:element name=\"InputFrequency\" type=\"ifc:IfcFrequencyMeasure\"/>\n\t\t\t\t\t<xs:element name=\"FullLoadCurrent\" type=\"ifc:IfcElectricCurrentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MinimumCircuitCurrent\" type=\"ifc:IfcElectricCurrentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MaximumPowerInput\" type=\"ifc:IfcPowerMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RatedPowerInput\" type=\"ifc:IfcPowerMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"InputPhase\" type=\"xs:long\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricalCircuit\" type=\"ifc:IfcElectricalCircuit\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricalCircuit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricalElement\" type=\"ifc:IfcElectricalElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricalElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElement\" type=\"ifc:IfcElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Tag\" type=\"ifc:IfcIdentifier\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementAssembly\" type=\"ifc:IfcElementAssembly\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementAssembly\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementComponent\" type=\"ifc:IfcElementComponent\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementComponent\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementComponentType\" type=\"ifc:IfcElementComponentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementComponentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementQuantity\" type=\"ifc:IfcElementQuantity\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementQuantity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MethodOfMeasurement\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Quantities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementType\" type=\"ifc:IfcElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ElementType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementarySurface\" type=\"ifc:IfcElementarySurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementarySurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEllipse\" type=\"ifc:IfcEllipse\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEllipse\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEllipseProfileDef\" type=\"ifc:IfcEllipseProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEllipseProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEnergyConversionDevice\" type=\"ifc:IfcEnergyConversionDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEnergyConversionDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEnergyConversionDeviceType\" type=\"ifc:IfcEnergyConversionDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEnergyConversionDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEnergyProperties\" type=\"ifc:IfcEnergyProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEnergyProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EnergySequence\" type=\"ifc:IfcEnergySequenceEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"UserDefinedEnergySequence\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEnvironmentalImpactValue\" type=\"ifc:IfcEnvironmentalImpactValue\" substitutionGroup=\"ifc:IfcAppliedValue\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEnvironmentalImpactValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ImpactType\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"Category\" type=\"ifc:IfcEnvironmentalImpactCategoryEnum\"/>\n\t\t\t\t\t<xs:element name=\"UserDefinedCategory\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEquipmentElement\" type=\"ifc:IfcEquipmentElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEquipmentElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEquipmentStandard\" type=\"ifc:IfcEquipmentStandard\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEquipmentStandard\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporativeCoolerType\" type=\"ifc:IfcEvaporativeCoolerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporativeCoolerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporatorType\" type=\"ifc:IfcEvaporatorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtendedMaterialProperties\" type=\"ifc:IfcExtendedMaterialProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtendedMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtendedProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalReference\" type=\"ifc:IfcExternalReference\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalReference\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Location\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ItemReference\" type=\"ifc:IfcIdentifier\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedHatchStyle\" type=\"ifc:IfcExternallyDefinedHatchStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedHatchStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedSufaceStyle\" type=\"ifc:IfcExternallyDefinedSufaceStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedSufaceStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedSymbol\" type=\"ifc:IfcExternallyDefinedSymbol\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedSymbol\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedTextFont\" type=\"ifc:IfcExternallyDefinedTextFont\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedTextFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtrudedAreaSolid\" type=\"ifc:IfcExtrudedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtrudedAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFace\" type=\"ifc:IfcFace\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Bounds\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFaceBound\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFaceBound\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceBasedSurfaceModel\" type=\"ifc:IfcFaceBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceBasedSurfaceModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FbsmFaces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectedFaceSet\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcConnectedFaceSet\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceBound\" type=\"ifc:IfcFaceBound\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceBound\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Bound\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLoop\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"xs:boolean\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceOuterBound\" type=\"ifc:IfcFaceOuterBound\" substitutionGroup=\"ifc:IfcFaceBound\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceOuterBound\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFaceBound\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceSurface\" type=\"ifc:IfcFaceSurface\" substitutionGroup=\"ifc:IfcFace\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFace\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FaceSurface\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"xs:boolean\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacetedBrep\" type=\"ifc:IfcFacetedBrep\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacetedBrep\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacetedBrepWithVoids\" type=\"ifc:IfcFacetedBrepWithVoids\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacetedBrepWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Voids\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClosedShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFailureConnectionCondition\" type=\"ifc:IfcFailureConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFailureConnectionCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TensionFailureX\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TensionFailureY\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TensionFailureZ\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CompressionFailureX\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CompressionFailureY\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CompressionFailureZ\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFanType\" type=\"ifc:IfcFanType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFanType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFastener\" type=\"ifc:IfcFastener\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFastener\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFastenerType\" type=\"ifc:IfcFastenerType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFastenerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElement\" type=\"ifc:IfcFeatureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElementAddition\" type=\"ifc:IfcFeatureElementAddition\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElementAddition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElementSubtraction\" type=\"ifc:IfcFeatureElementSubtraction\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElementSubtraction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyle\" type=\"ifc:IfcFillAreaStyle\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FillStyles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFillStyleSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyleHatching\" type=\"ifc:IfcFillAreaStyleHatching\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyleHatching\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HatchLineAppearance\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyle\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"StartOfNextHatchLine\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOneDirectionRepeatFactor\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointOfReferenceHatchLine\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PatternStart\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HatchLineAngle\" type=\"ifc:IfcPlaneAngleMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyleTileSymbolWithStyle\" type=\"ifc:IfcFillAreaStyleTileSymbolWithStyle\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyleTileSymbolWithStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Symbol\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAnnotationSymbolOccurrence\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyleTiles\" type=\"ifc:IfcFillAreaStyleTiles\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyleTiles\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TilingPattern\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOneDirectionRepeatFactor\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Tiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillAreaStyleTileShapeSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFillAreaStyleTileShapeSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TilingScale\" type=\"ifc:IfcPositiveRatioMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFilterType\" type=\"ifc:IfcFilterType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFilterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFireSuppressionTerminalType\" type=\"ifc:IfcFireSuppressionTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFireSuppressionTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowController\" type=\"ifc:IfcFlowController\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowController\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowControllerType\" type=\"ifc:IfcFlowControllerType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowControllerType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowFitting\" type=\"ifc:IfcFlowFitting\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowFittingType\" type=\"ifc:IfcFlowFittingType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowFittingType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowInstrumentType\" type=\"ifc:IfcFlowInstrumentType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowInstrumentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMeterType\" type=\"ifc:IfcFlowMeterType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMeterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMovingDevice\" type=\"ifc:IfcFlowMovingDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMovingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMovingDeviceType\" type=\"ifc:IfcFlowMovingDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMovingDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowSegment\" type=\"ifc:IfcFlowSegment\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowSegmentType\" type=\"ifc:IfcFlowSegmentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowSegmentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowStorageDevice\" type=\"ifc:IfcFlowStorageDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowStorageDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowStorageDeviceType\" type=\"ifc:IfcFlowStorageDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowStorageDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTerminal\" type=\"ifc:IfcFlowTerminal\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTerminalType\" type=\"ifc:IfcFlowTerminalType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTerminalType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTreatmentDevice\" type=\"ifc:IfcFlowTreatmentDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTreatmentDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTreatmentDeviceType\" type=\"ifc:IfcFlowTreatmentDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTreatmentDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFluidFlowProperties\" type=\"ifc:IfcFluidFlowProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFluidFlowProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PropertySource\" type=\"ifc:IfcPropertySourceEnum\"/>\n\t\t\t\t\t<xs:element name=\"FlowConditionTimeSeries\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VelocityTimeSeries\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FlowrateTimeSeries\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Fluid\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PressureTimeSeries\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UserDefinedPropertySource\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TemperatureSingleValue\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"WetBulbTemperatureSingleValue\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"WetBulbTemperatureTimeSeries\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TemperatureTimeSeries\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FlowrateSingleValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDerivedMeasureValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FlowConditionSingleValue\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"VelocitySingleValue\" type=\"ifc:IfcLinearVelocityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PressureSingleValue\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFooting\" type=\"ifc:IfcFooting\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFooting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFuelProperties\" type=\"ifc:IfcFuelProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFuelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CombustionTemperature\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CarbonContent\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LowerHeatingValue\" type=\"ifc:IfcHeatingValueMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"HigherHeatingValue\" type=\"ifc:IfcHeatingValueMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnishingElement\" type=\"ifc:IfcFurnishingElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnishingElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnishingElementType\" type=\"ifc:IfcFurnishingElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnishingElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnitureStandard\" type=\"ifc:IfcFurnitureStandard\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnitureStandard\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnitureType\" type=\"ifc:IfcFurnitureType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnitureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGasTerminalType\" type=\"ifc:IfcGasTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGasTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcGasTerminalTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeneralMaterialProperties\" type=\"ifc:IfcGeneralMaterialProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeneralMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MolecularWeight\" type=\"ifc:IfcMolecularWeightMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Porosity\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MassDensity\" type=\"ifc:IfcMassDensityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeneralProfileProperties\" type=\"ifc:IfcGeneralProfileProperties\" substitutionGroup=\"ifc:IfcProfileProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeneralProfileProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PhysicalWeight\" type=\"ifc:IfcMassPerLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Perimeter\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MinimumPlateThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MaximumPlateThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricCurveSet\" type=\"ifc:IfcGeometricCurveSet\" substitutionGroup=\"ifc:IfcGeometricSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricCurveSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationContext\" type=\"ifc:IfcGeometricRepresentationContext\" substitutionGroup=\"ifc:IfcRepresentationContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationContext\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CoordinateSpaceDimension\" type=\"ifc:IfcDimensionCount\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Precision\" type=\"xs:double\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"WorldCoordinateSystem\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TrueNorth\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationItem\" type=\"ifc:IfcGeometricRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcGeometricRepresentationContext\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContextIdentifier\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ContextType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationSubContext\" type=\"ifc:IfcGeometricRepresentationSubContext\" substitutionGroup=\"ifc:IfcGeometricRepresentationContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationSubContext-temp\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentContext\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationContext\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TargetScale\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TargetView\" type=\"ifc:IfcGeometricProjectionEnum\"/>\n\t\t\t\t\t<xs:element name=\"UserDefinedTargetView\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricSet\" type=\"ifc:IfcGeometricSet\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGeometricSetSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGrid\" type=\"ifc:IfcGrid\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGrid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WAxes\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGridAxis\" type=\"ifc:IfcGridAxis\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGridAxis\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisTag\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"AxisCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"ifc:IfcBoolean\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGridPlacement\" type=\"ifc:IfcGridPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGridPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlacementLocation\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PlacementRefDirection\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGroup\" type=\"ifc:IfcGroup\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHalfSpaceSolid\" type=\"ifc:IfcHalfSpaceSolid\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHalfSpaceSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseSurface\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"AgreementFlag\" type=\"xs:boolean\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHeatExchangerType\" type=\"ifc:IfcHeatExchangerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHeatExchangerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHumidifierType\" type=\"ifc:IfcHumidifierType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHumidifierType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHygroscopicMaterialProperties\" type=\"ifc:IfcHygroscopicMaterialProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHygroscopicMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UpperVaporResistanceFactor\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LowerVaporResistanceFactor\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"IsothermalMoistureCapacity\" type=\"ifc:IfcIsothermalMoistureCapacityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"VaporPermeability\" type=\"ifc:IfcVaporPermeabilityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MoistureDiffusivity\" type=\"ifc:IfcMoistureDiffusivityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIShapeProfileDef\" type=\"ifc:IfcIShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcImageTexture\" type=\"ifc:IfcImageTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcImageTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UrlReference\" type=\"ifc:IfcIdentifier\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInventory\" type=\"ifc:IfcInventory\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInventory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InventoryType\" type=\"ifc:IfcInventoryTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"Jurisdiction\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResponsiblePersons\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPerson\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LastUpdateDate\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurrentValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"OriginalValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIrregularTimeSeries\" type=\"ifc:IfcIrregularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIrregularTimeSeries\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIrregularTimeSeriesValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcIrregularTimeSeriesValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIrregularTimeSeriesValue\" type=\"ifc:IfcIrregularTimeSeriesValue\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIrregularTimeSeriesValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TimeStamp\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcJunctionBoxType\" type=\"ifc:IfcJunctionBoxType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcJunctionBoxType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLShapeProfileDef\" type=\"ifc:IfcLShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"EdgeRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LegSlope\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLaborResource\" type=\"ifc:IfcLaborResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLaborResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SkillSet\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLampType\" type=\"ifc:IfcLampType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLampType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLibraryInformation\" type=\"ifc:IfcLibraryInformation\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLibraryInformation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"Version\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Publisher\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VersionDate\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LibraryReference\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLibraryReference\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLibraryReference\" type=\"ifc:IfcLibraryReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLibraryReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightDistributionData\" type=\"ifc:IfcLightDistributionData\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightDistributionData\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MainPlaneAngle\" type=\"ifc:IfcPlaneAngleMeasure\"/>\n\t\t\t\t\t<xs:element name=\"SecondaryPlaneAngle\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPlaneAngleMeasure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LuminousIntensity\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLuminousIntensityDistributionMeasure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightFixtureType\" type=\"ifc:IfcLightFixtureType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightFixtureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightIntensityDistribution\" type=\"ifc:IfcLightIntensityDistribution\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightIntensityDistribution\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LightDistributionCurve\" type=\"ifc:IfcLightDistributionCurveEnum\"/>\n\t\t\t\t\t<xs:element name=\"DistributionData\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLightDistributionData\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLightDistributionData\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSource\" type=\"ifc:IfcLightSource\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LightColour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"AmbientIntensity\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Intensity\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceAmbient\" type=\"ifc:IfcLightSourceAmbient\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceAmbient\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceDirectional\" type=\"ifc:IfcLightSourceDirectional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceDirectional\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceGoniometric\" type=\"ifc:IfcLightSourceGoniometric\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceGoniometric\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ColourAppearance\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ColourTemperature\" type=\"ifc:IfcThermodynamicTemperatureMeasure\"/>\n\t\t\t\t\t<xs:element name=\"LuminousFlux\" type=\"ifc:IfcLuminousFluxMeasure\"/>\n\t\t\t\t\t<xs:element name=\"LightEmissionSource\" type=\"ifc:IfcLightEmissionSourceEnum\"/>\n\t\t\t\t\t<xs:element name=\"LightDistributionDataSource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourcePositional\" type=\"ifc:IfcLightSourcePositional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourcePositional\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"ConstantAttenuation\" type=\"ifc:IfcReal\"/>\n\t\t\t\t\t<xs:element name=\"DistanceAttenuation\" type=\"ifc:IfcReal\"/>\n\t\t\t\t\t<xs:element name=\"QuadricAttenuation\" type=\"ifc:IfcReal\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceSpot\" type=\"ifc:IfcLightSourceSpot\" substitutionGroup=\"ifc:IfcLightSourcePositional\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceSpot\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSourcePositional\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ConcentrationExponent\" type=\"ifc:IfcReal\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"SpreadAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\"/>\n\t\t\t\t\t<xs:element name=\"BeamWidthAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLine\" type=\"ifc:IfcLine\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Pnt\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Dir\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLinearDimension\" type=\"ifc:IfcLinearDimension\" substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLinearDimension\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLocalPlacement\" type=\"ifc:IfcLocalPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLocalPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlacementRelTo\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectPlacement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelativePlacement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLocalTime\" type=\"ifc:IfcLocalTime\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLocalTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HourComponent\" type=\"ifc:IfcHourInDay\"/>\n\t\t\t\t\t<xs:element name=\"MinuteComponent\" type=\"ifc:IfcMinuteInHour\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"SecondComponent\" type=\"ifc:IfcSecondInMinute\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Zone\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCoordinatedUniversalTimeOffset\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DaylightSavingOffset\" type=\"ifc:IfcDaylightSavingHour\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLoop\" type=\"ifc:IfcLoop\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcManifoldSolidBrep\" type=\"ifc:IfcManifoldSolidBrep\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcManifoldSolidBrep\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Outer\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMappedItem\" type=\"ifc:IfcMappedItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMappedItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MappingSource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MappingTarget\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterial\" type=\"ifc:IfcMaterial\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterial\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialClassificationRelationship\" type=\"ifc:IfcMaterialClassificationRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialClassificationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialClassifications\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationNotationSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ClassifiedMaterial\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayer\" type=\"ifc:IfcMaterialLayer\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LayerThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"IsVentilated\" type=\"ifc:IfcBoolean\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerSet\" type=\"ifc:IfcMaterialLayerSet\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialLayers\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcMaterialLayer\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LayerSetName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerSetUsage\" type=\"ifc:IfcMaterialLayerSetUsage\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerSetUsage\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForLayerSet\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayerSet\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LayerSetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\"/>\n\t\t\t\t\t<xs:element name=\"DirectionSense\" type=\"ifc:IfcDirectionSenseEnum\"/>\n\t\t\t\t\t<xs:element name=\"OffsetFromReferenceLine\" type=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialList\" type=\"ifc:IfcMaterialList\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Materials\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProperties\" type=\"ifc:IfcMaterialProperties\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProperties\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMeasureWithUnit\" type=\"ifc:IfcMeasureWithUnit\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMeasureWithUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ValueComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalConcreteMaterialProperties\" type=\"ifc:IfcMechanicalConcreteMaterialProperties\" substitutionGroup=\"ifc:IfcMechanicalMaterialProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalConcreteMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMechanicalMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CompressiveStrength\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MaxAggregateSize\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"AdmixturesDescription\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Workability\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ProtectivePoreRatio\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"WaterImpermeability\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalFastener\" type=\"ifc:IfcMechanicalFastener\" substitutionGroup=\"ifc:IfcFastener\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalFastener\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFastener\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"NominalLength\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalFastenerType\" type=\"ifc:IfcMechanicalFastenerType\" substitutionGroup=\"ifc:IfcFastenerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalFastenerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFastenerType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalMaterialProperties\" type=\"ifc:IfcMechanicalMaterialProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DynamicViscosity\" type=\"ifc:IfcDynamicViscosityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"YoungModulus\" type=\"ifc:IfcModulusOfElasticityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ShearModulus\" type=\"ifc:IfcModulusOfElasticityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PoissonRatio\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ThermalExpansionCoefficient\" type=\"ifc:IfcThermalExpansionCoefficientMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalSteelMaterialProperties\" type=\"ifc:IfcMechanicalSteelMaterialProperties\" substitutionGroup=\"ifc:IfcMechanicalMaterialProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalSteelMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMechanicalMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"YieldStress\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"UltimateStress\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"UltimateStrain\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"HardeningModule\" type=\"ifc:IfcModulusOfElasticityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ProportionalStress\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PlasticStrain\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Relaxations\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelaxation\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRelaxation\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMember\" type=\"ifc:IfcMember\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMemberType\" type=\"ifc:IfcMemberType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMemberType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMetric\" type=\"ifc:IfcMetric\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMetric\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Benchmark\" type=\"ifc:IfcBenchmarkEnum\"/>\n\t\t\t\t\t<xs:element name=\"ValueSource\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"DataValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMonetaryUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Currency\" type=\"ifc:IfcCurrencyEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMotorConnectionType\" type=\"ifc:IfcMotorConnectionType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMotorConnectionType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMove\" type=\"ifc:IfcMove\" substitutionGroup=\"ifc:IfcTask\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMove\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTask\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MoveFrom\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MoveTo\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PunchList\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcText\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcText\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcNamedUnit\" type=\"ifc:IfcNamedUnit\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcNamedUnit\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Dimensions\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDimensionalExponents\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitType\" type=\"ifc:IfcUnitEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObject\" type=\"ifc:IfcObject\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObject\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ObjectType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjectPlacement\" type=\"ifc:IfcObjectPlacement\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjectPlacement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjective\" type=\"ifc:IfcObjective\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjective\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BenchmarkValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMetric\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResultValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMetric\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ObjectiveQualifier\" type=\"ifc:IfcObjectiveEnum\"/>\n\t\t\t\t\t<xs:element name=\"UserDefinedQualifier\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOccupant\" type=\"ifc:IfcOccupant\" substitutionGroup=\"ifc:IfcActor\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOccupant\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcActor\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcOccupantTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurve2D\" type=\"ifc:IfcOffsetCurve2D\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurve2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Distance\" type=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurve3D\" type=\"ifc:IfcOffsetCurve3D\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurve3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Distance\" type=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\"/>\n\t\t\t\t\t<xs:element name=\"RefDirection\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOneDirectionRepeatFactor\" type=\"ifc:IfcOneDirectionRepeatFactor\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOneDirectionRepeatFactor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepeatFactor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpenShell\" type=\"ifc:IfcOpenShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpenShell\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpeningElement\" type=\"ifc:IfcOpeningElement\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpeningElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpticalMaterialProperties\" type=\"ifc:IfcOpticalMaterialProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpticalMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VisibleTransmittance\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"SolarTransmittance\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ThermalIrTransmittance\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ThermalIrEmissivityBack\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ThermalIrEmissivityFront\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"VisibleReflectanceBack\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"VisibleReflectanceFront\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"SolarReflectanceFront\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"SolarReflectanceBack\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrderAction\" type=\"ifc:IfcOrderAction\" substitutionGroup=\"ifc:IfcTask\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrderAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTask\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ActionID\" type=\"ifc:IfcIdentifier\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrganization\" type=\"ifc:IfcOrganization\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrganization\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Id\" type=\"ifc:IfcIdentifier\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Addresses\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAddress\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrganizationRelationship\" type=\"ifc:IfcOrganizationRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrganizationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RelatingOrganization\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedOrganizations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcOrganization\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcOrientedEdge-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrientedEdge\" type=\"ifc:IfcOrientedEdge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrientedEdge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOrientedEdge-temp\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcEdge\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"xs:boolean\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOutletType\" type=\"ifc:IfcOutletType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOutletType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOwnerHistory\" type=\"ifc:IfcOwnerHistory\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOwnerHistory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OwningUser\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"OwningApplication\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApplication\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"State\" type=\"ifc:IfcStateEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ChangeAction\" type=\"ifc:IfcChangeActionEnum\"/>\n\t\t\t\t\t<xs:element name=\"LastModifiedDate\" type=\"ifc:IfcTimeStamp\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LastModifyingUser\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LastModifyingApplication\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApplication\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CreationDate\" type=\"ifc:IfcTimeStamp\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcParameterizedProfileDef\" type=\"ifc:IfcParameterizedProfileDef\" abstract=\"true\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcParameterizedProfileDef\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPath\" type=\"ifc:IfcPath\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPath\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPerformanceHistory\" type=\"ifc:IfcPerformanceHistory\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPerformanceHistory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LifeCyclePhase\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPermeableCoveringProperties\" type=\"ifc:IfcPermeableCoveringProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPermeableCoveringProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcPermeableCoveringOperationEnum\"/>\n\t\t\t\t\t<xs:element name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\"/>\n\t\t\t\t\t<xs:element name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPermit\" type=\"ifc:IfcPermit\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPermit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PermitID\" type=\"ifc:IfcIdentifier\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPerson\" type=\"ifc:IfcPerson\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPerson\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Id\" type=\"ifc:IfcIdentifier\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"FamilyName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"GivenName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MiddleNames\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PrefixTitles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SuffixTitles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Addresses\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAddress\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPersonAndOrganization\" type=\"ifc:IfcPersonAndOrganization\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPersonAndOrganization\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ThePerson\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TheOrganization\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalComplexQuantity\" type=\"ifc:IfcPhysicalComplexQuantity\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalComplexQuantity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasQuantities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Discrimination\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"Quality\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Usage\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalQuantity\" type=\"ifc:IfcPhysicalQuantity\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalQuantity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalSimpleQuantity\" type=\"ifc:IfcPhysicalSimpleQuantity\" abstract=\"true\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalSimpleQuantity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPile\" type=\"ifc:IfcPile\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPile\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"ConstructionType\" type=\"ifc:IfcPileConstructionEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeFittingType\" type=\"ifc:IfcPipeFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeSegmentType\" type=\"ifc:IfcPipeSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPixelTexture\" type=\"ifc:IfcPixelTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPixelTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Width\" type=\"ifc:IfcInteger\"/>\n\t\t\t\t\t<xs:element name=\"Height\" type=\"ifc:IfcInteger\"/>\n\t\t\t\t\t<xs:element name=\"ColourComponents\" type=\"ifc:IfcInteger\"/>\n\t\t\t\t\t<xs:element name=\"Pixel\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:string-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:string-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlacement\" type=\"ifc:IfcPlacement\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlacement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Location\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlanarBox\" type=\"ifc:IfcPlanarBox\" substitutionGroup=\"ifc:IfcPlanarExtent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlanarBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlanarExtent\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Placement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlanarExtent\" type=\"ifc:IfcPlanarExtent\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlanarExtent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SizeInX\" type=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"SizeInY\" type=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlane\" type=\"ifc:IfcPlane\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlane\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlate\" type=\"ifc:IfcPlate\" substitutionGroup=\"ifc:IfcBuildingElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementComponent\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlateType\" type=\"ifc:IfcPlateType\" substitutionGroup=\"ifc:IfcBuildingElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlateType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementComponentType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPoint\" type=\"ifc:IfcPoint\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPoint\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPointOnCurve\" type=\"ifc:IfcPointOnCurve\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPointOnCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointParameter\" type=\"ifc:IfcParameterValue\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPointOnSurface\" type=\"ifc:IfcPointOnSurface\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPointOnSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointParameterU\" type=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t<xs:element name=\"PointParameterV\" type=\"ifc:IfcParameterValue\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolyLoop\" type=\"ifc:IfcPolyLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolyLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Polygon\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"3\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolygonalBoundedHalfSpace\" type=\"ifc:IfcPolygonalBoundedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolygonalBoundedHalfSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PolygonalBoundary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPolyline\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolyline\" type=\"ifc:IfcPolyline\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolyline\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Points\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPort\" type=\"ifc:IfcPort\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPort\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPostalAddress\" type=\"ifc:IfcPostalAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPostalAddress\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InternalLocation\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"AddressLines\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PostalBox\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Town\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Region\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PostalCode\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Country\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedColour\" type=\"ifc:IfcPreDefinedColour\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedColour\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedCurveFont\" type=\"ifc:IfcPreDefinedCurveFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedCurveFont\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedDimensionSymbol\" type=\"ifc:IfcPreDefinedDimensionSymbol\" substitutionGroup=\"ifc:IfcPreDefinedSymbol\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedDimensionSymbol\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedSymbol\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedItem\" type=\"ifc:IfcPreDefinedItem\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedPointMarkerSymbol\" type=\"ifc:IfcPreDefinedPointMarkerSymbol\" substitutionGroup=\"ifc:IfcPreDefinedSymbol\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedPointMarkerSymbol\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedSymbol\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedSymbol\" type=\"ifc:IfcPreDefinedSymbol\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedSymbol\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedTerminatorSymbol\" type=\"ifc:IfcPreDefinedTerminatorSymbol\" substitutionGroup=\"ifc:IfcPreDefinedSymbol\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedTerminatorSymbol\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedSymbol\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedTextFont\" type=\"ifc:IfcPreDefinedTextFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedTextFont\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationLayerAssignment\" type=\"ifc:IfcPresentationLayerAssignment\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationLayerAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"AssignedItems\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLayeredItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLayeredItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationLayerAssignmentWithStyle\" type=\"ifc:IfcPresentationLayerAssignmentWithStyle\" substitutionGroup=\"ifc:IfcPresentationLayerAssignment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationLayerAssignmentWithStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationLayerAssignment\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LayerNumber\" type=\"xs:long\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LayerOn\" type=\"ex:logical\"/>\n\t\t\t\t\t<xs:element name=\"LayerOnInAllViews\" type=\"ex:logical\"/>\n\t\t\t\t\t<xs:element name=\"LayerFrozen\" type=\"ex:logical\"/>\n\t\t\t\t\t<xs:element name=\"LayerFrozenInAllViews\" type=\"ex:logical\"/>\n\t\t\t\t\t<xs:element name=\"LayerBlocked\" type=\"ex:logical\"/>\n\t\t\t\t\t<xs:element name=\"LayerColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LayerCurveWidth\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LayerCurveFont\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationStyleAssignment\" type=\"ifc:IfcPresentationStyleAssignment\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationStyleAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPresentationStyleSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcedure\" type=\"ifc:IfcProcedure\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcedure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ProcedureID\" type=\"ifc:IfcIdentifier\"/>\n\t\t\t\t\t<xs:element name=\"ProcedureType\" type=\"ifc:IfcProcedureTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"UserDefinedProcedureType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcess\" type=\"ifc:IfcProcess\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcess\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProduct\" type=\"ifc:IfcProduct\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProduct\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ObjectPlacement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectPlacement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Representation\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProductRepresentation\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProductDefinitionShape\" type=\"ifc:IfcProductDefinitionShape\" substitutionGroup=\"ifc:IfcProductRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProductDefinitionShape\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProductRepresentation\" type=\"ifc:IfcProductRepresentation\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProductRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Representations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentation\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProductsOfCombustionProperties\" type=\"ifc:IfcProductsOfCombustionProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProductsOfCombustionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SpecificHeatCapacity\" type=\"ifc:IfcSpecificHeatCapacityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"N20Content\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"COContent\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CO2Content\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProfileDef\" type=\"ifc:IfcProfileDef\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProfileDef\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ProfileType\" type=\"ifc:IfcProfileTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"ProfileName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProfileProperties\" type=\"ifc:IfcProfileProperties\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProfileProperties\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ProfileName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ProfileDefinition\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProject\" type=\"ifc:IfcProject\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LongName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Phase\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RepresentationContexts\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentationContext\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitsInContext\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcUnitAssignment\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectOrder\" type=\"ifc:IfcProjectOrder\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectOrder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ID\" type=\"ifc:IfcIdentifier\"/>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcProjectOrderTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"Status\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectOrderRecord\" type=\"ifc:IfcProjectOrderRecord\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectOrderRecord\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Records\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelAssignsToProjectOrder\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRelAssignsToProjectOrder\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcProjectOrderRecordTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectionCurve\" type=\"ifc:IfcProjectionCurve\" substitutionGroup=\"ifc:IfcAnnotationCurveOccurrence\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectionCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationCurveOccurrence\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectionElement\" type=\"ifc:IfcProjectionElement\" substitutionGroup=\"ifc:IfcFeatureElementAddition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectionElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementAddition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProperty\" type=\"ifc:IfcProperty\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProperty\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcIdentifier\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyBoundedValue\" type=\"ifc:IfcPropertyBoundedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyBoundedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UpperBoundValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LowerBoundValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyConstraintRelationship\" type=\"ifc:IfcPropertyConstraintRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyConstraintRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyDefinition\" type=\"ifc:IfcPropertyDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyDependencyRelationship\" type=\"ifc:IfcPropertyDependencyRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyDependencyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DependingProperty\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DependantProperty\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Expression\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyEnumeratedValue\" type=\"ifc:IfcPropertyEnumeratedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyEnumeratedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EnumerationReference\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyEnumeration\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyEnumeration\" type=\"ifc:IfcPropertyEnumeration\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyEnumeration\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyListValue\" type=\"ifc:IfcPropertyListValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyListValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyReferenceValue\" type=\"ifc:IfcPropertyReferenceValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyReferenceValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UsageName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PropertyReference\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySet\" type=\"ifc:IfcPropertySet\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySetDefinition\" type=\"ifc:IfcPropertySetDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySetDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySingleValue\" type=\"ifc:IfcPropertySingleValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySingleValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"NominalValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTableValue\" type=\"ifc:IfcPropertyTableValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTableValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DefiningValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefinedValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Expression\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"DefiningUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefinedUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceType\" type=\"ifc:IfcProtectiveDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProxy\" type=\"ifc:IfcProxy\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProxy\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ProxyType\" type=\"ifc:IfcObjectTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"Tag\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPumpType\" type=\"ifc:IfcPumpType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPumpType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityArea\" type=\"ifc:IfcQuantityArea\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AreaValue\" type=\"ifc:IfcAreaMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityCount\" type=\"ifc:IfcQuantityCount\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityCount\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CountValue\" type=\"ifc:IfcCountMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityLength\" type=\"ifc:IfcQuantityLength\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityLength\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LengthValue\" type=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityTime\" type=\"ifc:IfcQuantityTime\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TimeValue\" type=\"ifc:IfcTimeMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityVolume\" type=\"ifc:IfcQuantityVolume\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityVolume\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VolumeValue\" type=\"ifc:IfcVolumeMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityWeight\" type=\"ifc:IfcQuantityWeight\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityWeight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WeightValue\" type=\"ifc:IfcMassMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRadiusDimension\" type=\"ifc:IfcRadiusDimension\" substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRadiusDimension\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailing\" type=\"ifc:IfcRailing\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailing\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailingType\" type=\"ifc:IfcRailingType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRamp\" type=\"ifc:IfcRamp\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRamp\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeType\" type=\"ifc:IfcRampTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampFlight\" type=\"ifc:IfcRampFlight\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampFlight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampFlightType\" type=\"ifc:IfcRampFlightType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampFlightType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRationalBezierCurve\" type=\"ifc:IfcRationalBezierCurve\" substitutionGroup=\"ifc:IfcBezierCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRationalBezierCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBezierCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WeightsData\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:double-wrapper\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:double-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangleHollowProfileDef\" type=\"ifc:IfcRectangleHollowProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangleHollowProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"InnerFilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"OuterFilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangleProfileDef\" type=\"ifc:IfcRectangleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangularTrimmedSurface\" type=\"ifc:IfcRectangularTrimmedSurface\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangularTrimmedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"U1\" type=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t<xs:element name=\"V1\" type=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t<xs:element name=\"U2\" type=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t<xs:element name=\"V2\" type=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t<xs:element name=\"Usense\" type=\"xs:boolean\"/>\n\t\t\t\t\t<xs:element name=\"Vsense\" type=\"xs:boolean\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReferencesValueDocument\" type=\"ifc:IfcReferencesValueDocument\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReferencesValueDocument\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedDocument\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencingValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRegularTimeSeries\" type=\"ifc:IfcRegularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRegularTimeSeries\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TimeStep\" type=\"ifc:IfcTimeMeasure\"/>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeriesValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTimeSeriesValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcementBarProperties\" type=\"ifc:IfcReinforcementBarProperties\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcementBarProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TotalCrossSectionArea\" type=\"ifc:IfcAreaMeasure\"/>\n\t\t\t\t\t<xs:element name=\"SteelGrade\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"EffectiveDepth\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"NominalBarDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"BarCount\" type=\"ifc:IfcCountMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcementDefinitionProperties\" type=\"ifc:IfcReinforcementDefinitionProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcementDefinitionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DefinitionType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ReinforcementSectionDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionReinforcementProperties\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSectionReinforcementProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingBar\" type=\"ifc:IfcReinforcingBar\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingBar\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\"/>\n\t\t\t\t\t<xs:element name=\"BarLength\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"BarRole\" type=\"ifc:IfcReinforcingBarRoleEnum\"/>\n\t\t\t\t\t<xs:element name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingElement\" type=\"ifc:IfcReinforcingElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcBuildingElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementComponent\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SteelGrade\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingMesh\" type=\"ifc:IfcReinforcingMesh\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingMesh\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MeshLength\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MeshWidth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\"/>\n\t\t\t\t\t<xs:element name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\"/>\n\t\t\t\t\t<xs:element name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAggregates\" type=\"ifc:IfcRelAggregates\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAggregates\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssigns\" type=\"ifc:IfcRelAssigns\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssigns\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcObject\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedObjectsType\" type=\"ifc:IfcObjectTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsTasks\" type=\"ifc:IfcRelAssignsTasks\" substitutionGroup=\"ifc:IfcRelAssignsToControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsTasks\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TimeForTask\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcScheduleTimeControl\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToActor\" type=\"ifc:IfcRelAssignsToActor\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToActor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingActor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActor\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ActingRole\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToControl\" type=\"ifc:IfcRelAssignsToControl\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToControl\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingControl\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcControl\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToGroup\" type=\"ifc:IfcRelAssignsToGroup\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingGroup\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGroup\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToProcess\" type=\"ifc:IfcRelAssignsToProcess\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToProcess\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProcess\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"QuantityInProcess\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToProduct\" type=\"ifc:IfcRelAssignsToProduct\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToProduct\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProduct\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToProjectOrder\" type=\"ifc:IfcRelAssignsToProjectOrder\" substitutionGroup=\"ifc:IfcRelAssignsToControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToProjectOrder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToControl\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToResource\" type=\"ifc:IfcRelAssignsToResource\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingResource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcResource\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociates\" type=\"ifc:IfcRelAssociates\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociates\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRoot\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRoot\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesAppliedValue\" type=\"ifc:IfcRelAssociatesAppliedValue\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesAppliedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingAppliedValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesApproval\" type=\"ifc:IfcRelAssociatesApproval\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesApproval\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesClassification\" type=\"ifc:IfcRelAssociatesClassification\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesClassification\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingClassification\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesConstraint\" type=\"ifc:IfcRelAssociatesConstraint\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesConstraint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Intent\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesDocument\" type=\"ifc:IfcRelAssociatesDocument\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesDocument\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesLibrary\" type=\"ifc:IfcRelAssociatesLibrary\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesLibrary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingLibrary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLibrarySelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesMaterial\" type=\"ifc:IfcRelAssociatesMaterial\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesMaterial\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMaterialSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesProfileProperties\" type=\"ifc:IfcRelAssociatesProfileProperties\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesProfileProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProfileProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileProperties\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ProfileSectionLocation\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnects\" type=\"ifc:IfcRelConnects\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnects\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsElements\" type=\"ifc:IfcRelConnectsElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectionGeometry\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPathElements\" type=\"ifc:IfcRelConnectsPathElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPathElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPriorities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:long-wrapper\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:long-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedPriorities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:long-wrapper\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:long-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedConnectionType\" type=\"ifc:IfcConnectionTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"RelatingConnectionType\" type=\"ifc:IfcConnectionTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPortToElement\" type=\"ifc:IfcRelConnectsPortToElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPortToElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPort\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPort\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPorts\" type=\"ifc:IfcRelConnectsPorts\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPorts\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPort\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPort\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedPort\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPort\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RealizingElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsStructuralActivity\" type=\"ifc:IfcRelConnectsStructuralActivity\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsStructuralActivity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralActivity\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralActivity\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsStructuralMember\" type=\"ifc:IfcRelConnectsStructuralMember\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsStructuralMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingStructuralMember\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralMember\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralConnection\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralConnection\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCondition\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"AdditionalConditions\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralConnectionCondition\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SupportedLength\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ConditionCoordinateSystem\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsWithRealizingElements\" type=\"ifc:IfcRelConnectsWithRealizingElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsWithRealizingElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RealizingElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ConnectionType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelContainedInSpatialStructure\" type=\"ifc:IfcRelContainedInSpatialStructure\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelContainedInSpatialStructure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProduct\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingStructure\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelCoversBldgElements\" type=\"ifc:IfcRelCoversBldgElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelCoversBldgElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCovering\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDecomposes\" type=\"ifc:IfcRelDecomposes\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDecomposes\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingObject\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcObject\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefines\" type=\"ifc:IfcRelDefines\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefines\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcObject\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByProperties\" type=\"ifc:IfcRelDefinesByProperties\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPropertyDefinition\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByType\" type=\"ifc:IfcRelDefinesByType\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingType\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTypeObject\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelFillsElement\" type=\"ifc:IfcRelFillsElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelFillsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingOpeningElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOpeningElement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelFlowControlElements\" type=\"ifc:IfcRelFlowControlElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelFlowControlElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedControlElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionControlElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDistributionControlElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingFlowElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionFlowElement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelInteractionRequirements\" type=\"ifc:IfcRelInteractionRequirements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelInteractionRequirements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DailyInteraction\" type=\"ifc:IfcCountMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ImportanceRating\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LocationOfInteraction\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedSpaceProgram\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpaceProgram\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingSpaceProgram\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpaceProgram\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelNests\" type=\"ifc:IfcRelNests\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelNests\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelOccupiesSpaces\" type=\"ifc:IfcRelOccupiesSpaces\" substitutionGroup=\"ifc:IfcRelAssignsToActor\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelOccupiesSpaces\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToActor\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelOverridesProperties\" type=\"ifc:IfcRelOverridesProperties\" substitutionGroup=\"ifc:IfcRelDefinesByProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelOverridesProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefinesByProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OverridingProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelProjectsElement\" type=\"ifc:IfcRelProjectsElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelProjectsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedFeatureElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFeatureElementAddition\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSchedulesCostItems\" type=\"ifc:IfcRelSchedulesCostItems\" substitutionGroup=\"ifc:IfcRelAssignsToControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSchedulesCostItems\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToControl\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSequence\" type=\"ifc:IfcRelSequence\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSequence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProcess\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedProcess\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProcess\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TimeLag\" type=\"ifc:IfcTimeMeasure\"/>\n\t\t\t\t\t<xs:element name=\"SequenceType\" type=\"ifc:IfcSequenceEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelServicesBuildings\" type=\"ifc:IfcRelServicesBuildings\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelServicesBuildings\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSystem\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSystem\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedBuildings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSpatialStructureElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary\" type=\"ifc:IfcRelSpaceBoundary\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSpace\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpace\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectionGeometry\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PhysicalOrVirtualBoundary\" type=\"ifc:IfcPhysicalOrVirtualEnum\"/>\n\t\t\t\t\t<xs:element name=\"InternalOrExternalBoundary\" type=\"ifc:IfcInternalOrExternalEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelVoidsElement\" type=\"ifc:IfcRelVoidsElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelVoidsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedOpeningElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFeatureElementSubtraction\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelationship\" type=\"ifc:IfcRelationship\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelationship\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelaxation\" type=\"ifc:IfcRelaxation\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelaxation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelaxationValue\" type=\"ifc:IfcNormalisedRatioMeasure\"/>\n\t\t\t\t\t<xs:element name=\"InitialStress\" type=\"ifc:IfcNormalisedRatioMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentation\" type=\"ifc:IfcRepresentation\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContextOfItems\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RepresentationIdentifier\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RepresentationType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Items\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentationItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationContext\" type=\"ifc:IfcRepresentationContext\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContextIdentifier\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ContextType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationItem\" type=\"ifc:IfcRepresentationItem\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationMap\" type=\"ifc:IfcRepresentationMap\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MappingOrigin\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MappedRepresentation\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResource\" type=\"ifc:IfcResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRevolvedAreaSolid\" type=\"ifc:IfcRevolvedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRevolvedAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis1Placement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Angle\" type=\"ifc:IfcPlaneAngleMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRibPlateProfileProperties\" type=\"ifc:IfcRibPlateProfileProperties\" substitutionGroup=\"ifc:IfcProfileProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRibPlateProfileProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RibHeight\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RibWidth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RibSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Direction\" type=\"ifc:IfcRibPlateDirectionEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoof\" type=\"ifc:IfcRoof\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoof\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeType\" type=\"ifc:IfcRoofTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoot\" type=\"ifc:IfcRoot\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoot\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"GlobalId\" type=\"ifc:IfcGloballyUniqueId\"/>\n\t\t\t\t\t<xs:element name=\"OwnerHistory\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOwnerHistory\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoundedEdgeFeature\" type=\"ifc:IfcRoundedEdgeFeature\" substitutionGroup=\"ifc:IfcEdgeFeature\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoundedEdgeFeature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdgeFeature\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoundedRectangleProfileDef\" type=\"ifc:IfcRoundedRectangleProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoundedRectangleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RoundingRadius\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcSIUnit-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UnitType\" type=\"ifc:IfcUnitEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSIUnit\" type=\"ifc:IfcSIUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSIUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSIUnit-temp\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Prefix\" type=\"ifc:IfcSIPrefix\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcSIUnitName\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSanitaryTerminalType\" type=\"ifc:IfcSanitaryTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSanitaryTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcScheduleTimeControl\" type=\"ifc:IfcScheduleTimeControl\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcScheduleTimeControl\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ActualStart\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EarlyStart\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LateStart\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ScheduleStart\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ActualFinish\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EarlyFinish\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LateFinish\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ScheduleFinish\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ScheduleDuration\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ActualDuration\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RemainingTime\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"FreeFloat\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TotalFloat\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"IsCritical\" type=\"xs:boolean\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"StatusTime\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"StartFloat\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"FinishFloat\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Completion\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionProperties\" type=\"ifc:IfcSectionProperties\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SectionType\" type=\"ifc:IfcSectionTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"StartProfile\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EndProfile\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionReinforcementProperties\" type=\"ifc:IfcSectionReinforcementProperties\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionReinforcementProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LongitudinalStartPosition\" type=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"LongitudinalEndPosition\" type=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"TransversePosition\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ReinforcementRole\" type=\"ifc:IfcReinforcingBarRoleEnum\"/>\n\t\t\t\t\t<xs:element name=\"SectionDefinition\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionProperties\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CrossSectionReinforcementDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReinforcementBarProperties\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcReinforcementBarProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionedSpine\" type=\"ifc:IfcSectionedSpine\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionedSpine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SpineCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCompositeCurve\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CrossSections\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CrossSectionPositions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAxis2Placement3D\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSensorType\" type=\"ifc:IfcSensorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSensorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcServiceLife\" type=\"ifc:IfcServiceLife\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcServiceLife\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ServiceLifeType\" type=\"ifc:IfcServiceLifeTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"ServiceLifeDuration\" type=\"ifc:IfcTimeMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcServiceLifeFactor\" type=\"ifc:IfcServiceLifeFactor\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcServiceLifeFactor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcServiceLifeFactorTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"UpperValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MostUsedValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LowerValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeAspect\" type=\"ifc:IfcShapeAspect\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeAspect\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeRepresentations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeRepresentation\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcShapeRepresentation\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ProductDefinitional\" type=\"ex:logical\"/>\n\t\t\t\t\t<xs:element name=\"PartOfProductDefinitionShape\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProductDefinitionShape\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeRepresentation\" type=\"ifc:IfcShapeRepresentation\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShellBasedSurfaceModel\" type=\"ifc:IfcShellBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShellBasedSurfaceModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SbsmBoundary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSimpleProperty\" type=\"ifc:IfcSimpleProperty\" abstract=\"true\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSimpleProperty\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProperty\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSite\" type=\"ifc:IfcSite\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSite\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RefLatitude\" type=\"ifc:IfcCompoundPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RefLongitude\" type=\"ifc:IfcCompoundPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RefElevation\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LandTitleNumber\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"SiteAddress\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPostalAddress\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlab\" type=\"ifc:IfcSlab\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlab\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlabType\" type=\"ifc:IfcSlabType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlabType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlippageConnectionCondition\" type=\"ifc:IfcSlippageConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlippageConnectionCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SlippageX\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"SlippageY\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"SlippageZ\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolidModel\" type=\"ifc:IfcSolidModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolidModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSoundProperties\" type=\"ifc:IfcSoundProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSoundProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IsAttenuating\" type=\"ifc:IfcBoolean\"/>\n\t\t\t\t\t<xs:element name=\"SoundScale\" type=\"ifc:IfcSoundScaleEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PointOfMeasurement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLocalPlacement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SoundValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSoundValue\" maxOccurs=\"8\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSoundValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSoundValue\" type=\"ifc:IfcSoundValue\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSoundValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SoundLevelTimeSeries\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Frequency\" type=\"ifc:IfcFrequencyMeasure\"/>\n\t\t\t\t\t<xs:element name=\"SoundLevelSingleValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDerivedMeasureValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpace\" type=\"ifc:IfcSpace\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InteriorOrExteriorSpace\" type=\"ifc:IfcInternalOrExternalEnum\"/>\n\t\t\t\t\t<xs:element name=\"ElevationWithFlooring\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceHeaterType\" type=\"ifc:IfcSpaceHeaterType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceHeaterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceProgram\" type=\"ifc:IfcSpaceProgram\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceProgram\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SpaceProgramIdentifier\" type=\"ifc:IfcIdentifier\"/>\n\t\t\t\t\t<xs:element name=\"MaxRequiredArea\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MinRequiredArea\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RequestedLocation\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"StandardRequiredArea\" type=\"ifc:IfcAreaMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceThermalLoadProperties\" type=\"ifc:IfcSpaceThermalLoadProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceThermalLoadProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ApplicableValueRatio\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ThermalLoadSource\" type=\"ifc:IfcThermalLoadSourceEnum\"/>\n\t\t\t\t\t<xs:element name=\"PropertySource\" type=\"ifc:IfcPropertySourceEnum\"/>\n\t\t\t\t\t<xs:element name=\"SourceDescription\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MaximumValue\" type=\"ifc:IfcPowerMeasure\"/>\n\t\t\t\t\t<xs:element name=\"MinimumValue\" type=\"ifc:IfcPowerMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ThermalLoadTimeSeriesValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UserDefinedThermalLoadSource\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"UserDefinedPropertySource\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ThermalLoadType\" type=\"ifc:IfcThermalLoadTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialStructureElement\" type=\"ifc:IfcSpatialStructureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialStructureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LongName\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CompositionType\" type=\"ifc:IfcElementCompositionEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStackTerminalType\" type=\"ifc:IfcStackTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStackTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStair\" type=\"ifc:IfcStair\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStair\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeType\" type=\"ifc:IfcStairTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairFlight\" type=\"ifc:IfcStairFlight\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairFlight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"NumberOfRiser\" type=\"xs:long\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"NumberOfTreads\" type=\"xs:long\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RiserHeight\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TreadLength\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairFlightType\" type=\"ifc:IfcStairFlightType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairFlightType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralAction\" type=\"ifc:IfcStructuralAction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralAction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DestabilizingLoad\" type=\"xs:boolean\"/>\n\t\t\t\t\t<xs:element name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\"/>\n\t\t\t\t\t<xs:element name=\"CausedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralReaction\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralActivity\" type=\"ifc:IfcStructuralActivity\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralActivity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedLoad\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoad\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"GlobalOrLocal\" type=\"ifc:IfcGlobalOrLocalEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralAnalysisModel\" type=\"ifc:IfcStructuralAnalysisModel\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralAnalysisModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAnalysisModelTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"OrientationOf2DPlane\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LoadedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralLoadGroup\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasResults\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralResultGroup\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralResultGroup\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralConnection\" type=\"ifc:IfcStructuralConnection\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralConnection\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCondition\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralConnectionCondition\" type=\"ifc:IfcStructuralConnectionCondition\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralConnectionCondition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveConnection\" type=\"ifc:IfcStructuralCurveConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveMember\" type=\"ifc:IfcStructuralCurveMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveMemberVarying\" type=\"ifc:IfcStructuralCurveMemberVarying\" substitutionGroup=\"ifc:IfcStructuralCurveMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveMemberVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralItem\" type=\"ifc:IfcStructuralItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLinearAction\" type=\"ifc:IfcStructuralLinearAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLinearAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLinearActionVarying\" type=\"ifc:IfcStructuralLinearActionVarying\" substitutionGroup=\"ifc:IfcStructuralLinearAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLinearActionVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLinearAction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VaryingAppliedLoadLocation\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SubsequentAppliedLoads\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoad\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralLoad\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoad\" type=\"ifc:IfcStructuralLoad\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoad\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadGroup\" type=\"ifc:IfcStructuralLoadGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcLoadGroupTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"ActionType\" type=\"ifc:IfcActionTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"ActionSource\" type=\"ifc:IfcActionSourceTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"Coefficient\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Purpose\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadLinearForce\" type=\"ifc:IfcStructuralLoadLinearForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadLinearForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LinearForceX\" type=\"ifc:IfcLinearForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LinearForceY\" type=\"ifc:IfcLinearForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LinearForceZ\" type=\"ifc:IfcLinearForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LinearMomentX\" type=\"ifc:IfcLinearMomentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LinearMomentY\" type=\"ifc:IfcLinearMomentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LinearMomentZ\" type=\"ifc:IfcLinearMomentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadPlanarForce\" type=\"ifc:IfcStructuralLoadPlanarForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadPlanarForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlanarForceX\" type=\"ifc:IfcPlanarForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PlanarForceY\" type=\"ifc:IfcPlanarForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PlanarForceZ\" type=\"ifc:IfcPlanarForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacement\" type=\"ifc:IfcStructuralLoadSingleDisplacement\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DisplacementX\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"DisplacementY\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"DisplacementZ\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RotationalDisplacementRX\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RotationalDisplacementRY\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RotationalDisplacementRZ\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacementDistortion\" type=\"ifc:IfcStructuralLoadSingleDisplacementDistortion\" substitutionGroup=\"ifc:IfcStructuralLoadSingleDisplacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacementDistortion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleDisplacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Distortion\" type=\"ifc:IfcCurvatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleForce\" type=\"ifc:IfcStructuralLoadSingleForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForceX\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ForceY\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ForceZ\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MomentX\" type=\"ifc:IfcTorqueMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MomentY\" type=\"ifc:IfcTorqueMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MomentZ\" type=\"ifc:IfcTorqueMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleForceWarping\" type=\"ifc:IfcStructuralLoadSingleForceWarping\" substitutionGroup=\"ifc:IfcStructuralLoadSingleForce\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleForceWarping\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleForce\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WarpingMoment\" type=\"ifc:IfcWarpingMomentMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadStatic\" type=\"ifc:IfcStructuralLoadStatic\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadStatic\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadTemperature\" type=\"ifc:IfcStructuralLoadTemperature\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadTemperature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DeltaT_Constant\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"DeltaT_Y\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"DeltaT_Z\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralMember\" type=\"ifc:IfcStructuralMember\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralMember\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPlanarAction\" type=\"ifc:IfcStructuralPlanarAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPlanarAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPlanarActionVarying\" type=\"ifc:IfcStructuralPlanarActionVarying\" substitutionGroup=\"ifc:IfcStructuralPlanarAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPlanarActionVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralPlanarAction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VaryingAppliedLoadLocation\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SubsequentAppliedLoads\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoad\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralLoad\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointAction\" type=\"ifc:IfcStructuralPointAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointConnection\" type=\"ifc:IfcStructuralPointConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointReaction\" type=\"ifc:IfcStructuralPointReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralProfileProperties\" type=\"ifc:IfcStructuralProfileProperties\" substitutionGroup=\"ifc:IfcGeneralProfileProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralProfileProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeneralProfileProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TorsionalConstantX\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MomentOfInertiaYZ\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MomentOfInertiaY\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MomentOfInertiaZ\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"WarpingConstant\" type=\"ifc:IfcWarpingConstantMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ShearCentreZ\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ShearCentreY\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ShearDeformationAreaZ\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ShearDeformationAreaY\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MaximumSectionModulusY\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MinimumSectionModulusY\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MaximumSectionModulusZ\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MinimumSectionModulusZ\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TorsionalSectionModulus\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralReaction\" type=\"ifc:IfcStructuralReaction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralReaction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralResultGroup\" type=\"ifc:IfcStructuralResultGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralResultGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TheoryType\" type=\"ifc:IfcAnalysisTheoryTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"ResultForLoadGroup\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"IsLinear\" type=\"xs:boolean\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSteelProfileProperties\" type=\"ifc:IfcStructuralSteelProfileProperties\" substitutionGroup=\"ifc:IfcStructuralProfileProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSteelProfileProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralProfileProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShearAreaZ\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ShearAreaY\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PlasticShapeFactorY\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PlasticShapeFactorZ\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceConnection\" type=\"ifc:IfcStructuralSurfaceConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceMember\" type=\"ifc:IfcStructuralSurfaceMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceMemberVarying\" type=\"ifc:IfcStructuralSurfaceMemberVarying\" substitutionGroup=\"ifc:IfcStructuralSurfaceMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceMemberVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SubsequentThickness\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VaryingThicknessLocation\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuredDimensionCallout\" type=\"ifc:IfcStructuredDimensionCallout\" substitutionGroup=\"ifc:IfcDraughtingCallout\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuredDimensionCallout\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCallout\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyledItem\" type=\"ifc:IfcStyledItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyledItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Item\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPresentationStyleAssignment\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPresentationStyleAssignment\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyledRepresentation\" type=\"ifc:IfcStyledRepresentation\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyledRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubContractResource\" type=\"ifc:IfcSubContractResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubContractResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SubContractor\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"JobDescription\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubedge\" type=\"ifc:IfcSubedge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubedge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentEdge\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcEdge\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurface\" type=\"ifc:IfcSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceCurveSweptAreaSolid\" type=\"ifc:IfcSurfaceCurveSweptAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceCurveSweptAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"StartParam\" type=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t<xs:element name=\"EndParam\" type=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t<xs:element name=\"ReferenceSurface\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceOfLinearExtrusion\" type=\"ifc:IfcSurfaceOfLinearExtrusion\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceOfLinearExtrusion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceOfRevolution\" type=\"ifc:IfcSurfaceOfRevolution\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceOfRevolution\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisPosition\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis1Placement\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyle\" type=\"ifc:IfcSurfaceStyle\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Side\" type=\"ifc:IfcSurfaceSide\"/>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\" maxOccurs=\"5\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSurfaceStyleElementSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleLighting\" type=\"ifc:IfcSurfaceStyleLighting\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleLighting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DiffuseReflectionColour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TransmissionColour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReflectanceColour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleRefraction\" type=\"ifc:IfcSurfaceStyleRefraction\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleRefraction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RefractionIndex\" type=\"ifc:IfcReal\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"DispersionFactor\" type=\"ifc:IfcReal\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleRendering\" type=\"ifc:IfcSurfaceStyleRendering\" substitutionGroup=\"ifc:IfcSurfaceStyleShading\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleRendering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceStyleShading\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Transparency\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"DiffuseColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TransmissionColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReflectionColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SpecularColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SpecularHighlight\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReflectanceMethod\" type=\"ifc:IfcReflectanceMethodEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleShading\" type=\"ifc:IfcSurfaceStyleShading\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleShading\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SurfaceColour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleWithTextures\" type=\"ifc:IfcSurfaceStyleWithTextures\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleWithTextures\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Textures\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSurfaceTexture\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceTexture\" type=\"ifc:IfcSurfaceTexture\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceTexture\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepeatS\" type=\"xs:boolean\"/>\n\t\t\t\t\t<xs:element name=\"RepeatT\" type=\"xs:boolean\"/>\n\t\t\t\t\t<xs:element name=\"TextureType\" type=\"ifc:IfcSurfaceTextureEnum\"/>\n\t\t\t\t\t<xs:element name=\"TextureTransform\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator2D\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptAreaSolid\" type=\"ifc:IfcSweptAreaSolid\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptAreaSolid\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SweptArea\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptDiskSolid\" type=\"ifc:IfcSweptDiskSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptDiskSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"InnerRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"StartParam\" type=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t<xs:element name=\"EndParam\" type=\"ifc:IfcParameterValue\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptSurface\" type=\"ifc:IfcSweptSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SweptCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSwitchingDeviceType\" type=\"ifc:IfcSwitchingDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSwitchingDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSymbolStyle\" type=\"ifc:IfcSymbolStyle\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSymbolStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"StyleOfSymbol\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSymbolStyleSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystem\" type=\"ifc:IfcSystem\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystemFurnitureElementType\" type=\"ifc:IfcSystemFurnitureElementType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystemFurnitureElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTShapeProfileDef\" type=\"ifc:IfcTShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"FlangeEdgeRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"WebEdgeRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"WebSlope\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTable\" type=\"ifc:IfcTable\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTable\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"xs:normalizedString\"/>\n\t\t\t\t\t<xs:element name=\"Rows\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableRow\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTableRow\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTableRow\" type=\"ifc:IfcTableRow\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTableRow\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RowCells\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"IsHeading\" type=\"xs:boolean\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTankType\" type=\"ifc:IfcTankType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTankType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTask\" type=\"ifc:IfcTask\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTask\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TaskId\" type=\"ifc:IfcIdentifier\"/>\n\t\t\t\t\t<xs:element name=\"Status\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"WorkMethod\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"IsMilestone\" type=\"xs:boolean\"/>\n\t\t\t\t\t<xs:element name=\"Priority\" type=\"xs:long\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTelecomAddress\" type=\"ifc:IfcTelecomAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTelecomAddress\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TelephoneNumbers\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FacsimileNumbers\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PagerNumber\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ElectronicMailAddresses\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WWWHomePageURL\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendon\" type=\"ifc:IfcTendon\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendon\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\"/>\n\t\t\t\t\t<xs:element name=\"TensionForce\" type=\"ifc:IfcForceMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PreStress\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"FrictionCoefficient\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"AnchorageSlip\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MinCurvatureRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonAnchor\" type=\"ifc:IfcTendonAnchor\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonAnchor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTerminatorSymbol\" type=\"ifc:IfcTerminatorSymbol\" substitutionGroup=\"ifc:IfcAnnotationSymbolOccurrence\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTerminatorSymbol\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationSymbolOccurrence\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AnnotatedCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAnnotationCurveOccurrence\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextLiteral\" type=\"ifc:IfcTextLiteral\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextLiteral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Literal\" type=\"ifc:IfcPresentableText\"/>\n\t\t\t\t\t<xs:element name=\"Placement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Alignment\" type=\"ifc:IfcTextAlignment\"/>\n\t\t\t\t\t<xs:element name=\"Path\" type=\"ifc:IfcTextPath\"/>\n\t\t\t\t\t<xs:element name=\"Font\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextLiteralWithExtent\" type=\"ifc:IfcTextLiteralWithExtent\" substitutionGroup=\"ifc:IfcTextLiteral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextLiteralWithExtent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextLiteral\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Extent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPlanarExtent\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyle\" type=\"ifc:IfcTextStyle\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"CharacterGlyphAppearance\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCharacterStyleSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TextStyles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTextStyleSelect\" maxOccurs=\"3\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTextStyleSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleWithBoxCharacteristics\" type=\"ifc:IfcTextStyleWithBoxCharacteristics\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleWithBoxCharacteristics\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BoxHeight\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"BoxWidth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"BoxSlantAngle\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"BoxRotateAngle\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleWithMirror\" type=\"ifc:IfcTextStyleWithMirror\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleWithMirror\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MirrorPlacement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleWithSpacing\" type=\"ifc:IfcTextStyleWithSpacing\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleWithSpacing\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CharacterSpacing\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCharacterSpacingSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinate\" type=\"ifc:IfcTextureCoordinate\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinate\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Texture\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleWithTextures\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinateGenerator\" type=\"ifc:IfcTextureCoordinateGenerator\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinateGenerator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Mode\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"Parameter\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSimpleValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSimpleValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureMap\" type=\"ifc:IfcTextureMap\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VertexBasedTextures\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertexBasedTextureMap\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcVertexBasedTextureMap\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureVertex\" type=\"ifc:IfcTextureVertex\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureVertex\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Coordinates\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcParameterValue\" minOccurs=\"2\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcThermalMaterialProperties\" type=\"ifc:IfcThermalMaterialProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcThermalMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SpecificHeatCapacity\" type=\"ifc:IfcSpecificHeatCapacityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"BoilingPoint\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"FreezingPoint\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ThermalConductivity\" type=\"ifc:IfcThermalConductivityMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimeSeries\" type=\"ifc:IfcTimeSeries\" abstract=\"true\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimeSeries\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\"/>\n\t\t\t\t\t<xs:element name=\"Description\" type=\"ifc:IfcText\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"StartTime\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EndTime\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TimeSeriesDataType\" type=\"ifc:IfcTimeSeriesDataTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\"/>\n\t\t\t\t\t<xs:element name=\"UserDefinedDataOrigin\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimeSeriesReferenceRelationship\" type=\"ifc:IfcTimeSeriesReferenceRelationship\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimeSeriesReferenceRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedTimeSeries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TimeSeriesReferences\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDocumentSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimeSeriesSchedule\" type=\"ifc:IfcTimeSeriesSchedule\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimeSeriesSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ApplicableDates\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TimeSeriesScheduleType\" type=\"ifc:IfcTimeSeriesScheduleTypeEnum\"/>\n\t\t\t\t\t<xs:element name=\"TimeSeries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimeSeriesValue\" type=\"ifc:IfcTimeSeriesValue\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimeSeriesValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTopologicalRepresentationItem\" type=\"ifc:IfcTopologicalRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTopologicalRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTopologyRepresentation\" type=\"ifc:IfcTopologyRepresentation\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTopologyRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransformerType\" type=\"ifc:IfcTransformerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransformerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportElement\" type=\"ifc:IfcTransportElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcTransportElementTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CapacityByWeight\" type=\"ifc:IfcMassMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CapacityByNumber\" type=\"ifc:IfcCountMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportElementType\" type=\"ifc:IfcTransportElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrapeziumProfileDef\" type=\"ifc:IfcTrapeziumProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrapeziumProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BottomXDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"TopXDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"TopXOffset\" type=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrimmedCurve\" type=\"ifc:IfcTrimmedCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrimmedCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Trim1\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Trim2\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SenseAgreement\" type=\"xs:boolean\"/>\n\t\t\t\t\t<xs:element name=\"MasterRepresentation\" type=\"ifc:IfcTrimmingPreference\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTubeBundleType\" type=\"ifc:IfcTubeBundleType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTubeBundleType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTwoDirectionRepeatFactor\" type=\"ifc:IfcTwoDirectionRepeatFactor\" substitutionGroup=\"ifc:IfcOneDirectionRepeatFactor\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTwoDirectionRepeatFactor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOneDirectionRepeatFactor\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SecondRepeatFactor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeObject\" type=\"ifc:IfcTypeObject\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeObject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ApplicableOccurrence\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"HasPropertySets\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeProduct\" type=\"ifc:IfcTypeProduct\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeProduct\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepresentationMaps\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentationMap\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Tag\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUShapeProfileDef\" type=\"ifc:IfcUShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"EdgeRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitAssignment\" type=\"ifc:IfcUnitAssignment\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Units\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryEquipmentType\" type=\"ifc:IfcUnitaryEquipmentType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryEquipmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcValveType\" type=\"ifc:IfcValveType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcValveType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVector\" type=\"ifc:IfcVector\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVector\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Magnitude\" type=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertex\" type=\"ifc:IfcVertex\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertex\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertexBasedTextureMap\" type=\"ifc:IfcVertexBasedTextureMap\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertexBasedTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextureVertices\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextureVertex\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTextureVertex\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VertexBasedGeometry\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPolyLoop\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertexLoop\" type=\"ifc:IfcVertexLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertexLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LoopVertex\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertex\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertexPoint\" type=\"ifc:IfcVertexPoint\" substitutionGroup=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertexPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcVertex\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VertexGeometry\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationIsolatorType\" type=\"ifc:IfcVibrationIsolatorType\" substitutionGroup=\"ifc:IfcDiscreteAccessoryType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationIsolatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDiscreteAccessoryType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVirtualElement\" type=\"ifc:IfcVirtualElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVirtualElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVirtualGridIntersection\" type=\"ifc:IfcVirtualGridIntersection\" substitutionGroup=\"ex:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVirtualGridIntersection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IntersectingAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" minOccurs=\"2\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"OffsetDistances\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\" minOccurs=\"2\" maxOccurs=\"3\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWall\" type=\"ifc:IfcWall\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWall\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallStandardCase\" type=\"ifc:IfcWallStandardCase\" substitutionGroup=\"ifc:IfcWall\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWall\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallType\" type=\"ifc:IfcWallType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWasteTerminalType\" type=\"ifc:IfcWasteTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWasteTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWaterProperties\" type=\"ifc:IfcWaterProperties\" substitutionGroup=\"ifc:IfcMaterialProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWaterProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IsPotable\" type=\"xs:boolean\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Hardness\" type=\"ifc:IfcIonConcentrationMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"AlkalinityConcentration\" type=\"ifc:IfcIonConcentrationMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"AcidityConcentration\" type=\"ifc:IfcIonConcentrationMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ImpuritiesContent\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PHLevel\" type=\"ifc:IfcPHMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"DissolvedSolidsContent\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindow\" type=\"ifc:IfcWindow\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindow\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowLiningProperties\" type=\"ifc:IfcWindowLiningProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowLiningProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LiningThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TransomThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"MullionThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"FirstTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"SecondTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"FirstMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"SecondMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowPanelProperties\" type=\"ifc:IfcWindowPanelProperties\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowPanelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcWindowPanelOperationEnum\"/>\n\t\t\t\t\t<xs:element name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\"/>\n\t\t\t\t\t<xs:element name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowStyle\" type=\"ifc:IfcWindowStyle\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConstructionType\" type=\"ifc:IfcWindowStyleConstructionEnum\"/>\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcWindowStyleOperationEnum\"/>\n\t\t\t\t\t<xs:element name=\"ParameterTakesPrecedence\" type=\"xs:boolean\"/>\n\t\t\t\t\t<xs:element name=\"Sizeable\" type=\"xs:boolean\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkControl\" type=\"ifc:IfcWorkControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkControl\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Identifier\" type=\"ifc:IfcIdentifier\"/>\n\t\t\t\t\t<xs:element name=\"CreationDate\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Creators\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPerson\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Purpose\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Duration\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TotalFloat\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"StartTime\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FinishTime\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WorkControlType\" type=\"ifc:IfcWorkControlTypeEnum\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"UserDefinedControlType\" type=\"ifc:IfcLabel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkPlan\" type=\"ifc:IfcWorkPlan\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkPlan\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkSchedule\" type=\"ifc:IfcWorkSchedule\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcZShapeProfileDef\" type=\"ifc:IfcZShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcZShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t\t\t<xs:element name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"EdgeRadius\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcZone\" type=\"ifc:IfcZone\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcZone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<!-- group declarations (for SELECT data type definitions) -->\n\t<xs:complexType name=\"IfcActorSelect\">\n\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcActorSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcAppliedValueSelect\">\n\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcAppliedValueSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcAxis2Placement\">\n\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcAxis2Placement\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcBooleanOperand\">\n\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcBooleanOperand\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHalfSpaceSolid\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcCharacterSpacingSelect\">\n\t\t<xs:group ref=\"ifc:IfcCharacterSpacingSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcCharacterSpacingSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcCharacterStyleSelect\">\n\t\t<xs:group ref=\"ifc:IfcCharacterStyleSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcCharacterStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcClassificationNotationSelect\">\n\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcClassificationNotationSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClassificationNotation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcColour\">\n\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcColour\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcColourOrFactor\">\n\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcColourOrFactor\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcConditionCriterionSelect\">\n\t\t<xs:group ref=\"ifc:IfcConditionCriterionSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcConditionCriterionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLabel\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcCsgSelect\">\n\t\t<xs:group ref=\"ifc:IfcCsgSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcCsgSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcCurveFontOrScaledCurveFontSelect\">\n\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcCurveFontOrScaledCurveFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontAndScaling\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcCurveStyleFontSelect\">\n\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcCurveStyleFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcDateTimeSelect\">\n\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcDateTimeSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLocalTime\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcDefinedSymbolSelect\">\n\t\t<xs:group ref=\"ifc:IfcDefinedSymbolSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcDefinedSymbolSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedSymbol\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSymbol\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcDerivedMeasureValue\">\n\t\t<xs:group ref=\"ifc:IfcDerivedMeasureValue\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcDerivedMeasureValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcDocumentSelect\">\n\t\t<xs:group ref=\"ifc:IfcDocumentSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcDocumentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcDraughtingCalloutElement\">\n\t\t<xs:group ref=\"ifc:IfcDraughtingCalloutElement\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcDraughtingCalloutElement\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAnnotationCurveOccurrence\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAnnotationTextOccurrence\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAnnotationSymbolOccurrence\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcFillAreaStyleTileShapeSelect\">\n\t\t<xs:group ref=\"ifc:IfcFillAreaStyleTileShapeSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcFillAreaStyleTileShapeSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTileSymbolWithStyle\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcFillStyleSelect\">\n\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcFillStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleHatching\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTiles\"/>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedHatchStyle\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcFontSelect\">\n\t\t<xs:group ref=\"ifc:IfcFontSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedTextFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedTextFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcGeometricSetSelect\">\n\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcGeometricSetSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcLayeredItem\">\n\t\t<xs:group ref=\"ifc:IfcLayeredItem\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcLayeredItem\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentation\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcLibrarySelect\">\n\t\t<xs:group ref=\"ifc:IfcLibrarySelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcLibrarySelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcLightDistributionDataSourceSelect\">\n\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcLightDistributionDataSourceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLightIntensityDistribution\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcMaterialSelect\">\n\t\t<xs:group ref=\"ifc:IfcMaterialSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcMaterialSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcMaterial\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayerSetUsage\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayerSet\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcMeasureValue\">\n\t\t<xs:group ref=\"ifc:IfcMeasureValue\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcMeasureValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcMetricValueSelect\">\n\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcMetricValueSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLocalTime\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTable\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCostValue\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcObjectReferenceSelect\">\n\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcObjectReferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcMaterial\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLocalTime\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAddress\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcPresentationStyleSelect\">\n\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcPresentationStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcNullStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSymbolStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTextStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyle\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcShell\">\n\t\t<xs:group ref=\"ifc:IfcShell\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcShell\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOpenShell\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcSimpleValue\">\n\t\t<xs:group ref=\"ifc:IfcSimpleValue\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcSimpleValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcInteger\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcSizeSelect\">\n\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcSizeSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcSpecularHighlightSelect\">\n\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcSpecularHighlightSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcSpecularExponent\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecularRoughness\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcStructuralActivityAssignmentSelect\">\n\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcStructuralActivityAssignmentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcStructuralItem\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBuildingElement\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcSurfaceStyleElementSelect\">\n\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcSurfaceStyleElementSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleShading\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleLighting\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleWithTextures\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSufaceStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleRefraction\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcSymbolStyleSelect\">\n\t\t<xs:group ref=\"ifc:IfcSymbolStyleSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcSymbolStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcTextStyleSelect\">\n\t\t<xs:group ref=\"ifc:IfcTextStyleSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcTextStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcTextStyleWithMirror\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTextStyleWithSpacing\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTextStyleWithBoxCharacteristics\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcTrimmingSelect\">\n\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcTrimmingSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcUnit\">\n\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcUnit\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDerivedUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcValue\">\n\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:complexType name=\"IfcVectorOrDirection\">\n\t\t<xs:group ref=\"ifc:IfcVectorOrDirection\"/>\n\t</xs:complexType>\n\t<xs:group name=\"IfcVectorOrDirection\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<!-- enumeration type declarations (for ENUMERATION data type definitions) -->\n\t<xs:element name=\"IfcActionSourceTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcActionSourceTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcActionSourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dead_load_g\"/>\n\t\t\t<xs:enumeration value=\"completion_g1\"/>\n\t\t\t<xs:enumeration value=\"live_load_q\"/>\n\t\t\t<xs:enumeration value=\"snow_s\"/>\n\t\t\t<xs:enumeration value=\"wind_w\"/>\n\t\t\t<xs:enumeration value=\"prestressing_p\"/>\n\t\t\t<xs:enumeration value=\"settlement_u\"/>\n\t\t\t<xs:enumeration value=\"temperature_t\"/>\n\t\t\t<xs:enumeration value=\"earthquake_e\"/>\n\t\t\t<xs:enumeration value=\"fire\"/>\n\t\t\t<xs:enumeration value=\"impulse\"/>\n\t\t\t<xs:enumeration value=\"impact\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"erection\"/>\n\t\t\t<xs:enumeration value=\"propping\"/>\n\t\t\t<xs:enumeration value=\"system_imperfection\"/>\n\t\t\t<xs:enumeration value=\"shrinkage\"/>\n\t\t\t<xs:enumeration value=\"creep\"/>\n\t\t\t<xs:enumeration value=\"lack_of_fit\"/>\n\t\t\t<xs:enumeration value=\"buoyancy\"/>\n\t\t\t<xs:enumeration value=\"ice\"/>\n\t\t\t<xs:enumeration value=\"current\"/>\n\t\t\t<xs:enumeration value=\"wave\"/>\n\t\t\t<xs:enumeration value=\"rain\"/>\n\t\t\t<xs:enumeration value=\"brakes\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcActionTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcActionTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcActionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"permanent_g\"/>\n\t\t\t<xs:enumeration value=\"variable_q\"/>\n\t\t\t<xs:enumeration value=\"extraordinary_a\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcActuatorTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcActuatorTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcActuatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electricactuator\"/>\n\t\t\t<xs:enumeration value=\"handoperatedactuator\"/>\n\t\t\t<xs:enumeration value=\"hydraulicactuator\"/>\n\t\t\t<xs:enumeration value=\"pneumaticactuator\"/>\n\t\t\t<xs:enumeration value=\"thermostaticactuator\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcAddressTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAddressTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcAddressTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"office\"/>\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"home\"/>\n\t\t\t<xs:enumeration value=\"distributionpoint\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcAheadOrBehind\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAheadOrBehind\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcAheadOrBehind\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ahead\"/>\n\t\t\t<xs:enumeration value=\"behind\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcAirTerminalBoxTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAirTerminalBoxTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcAirTerminalBoxTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"constantflow\"/>\n\t\t\t<xs:enumeration value=\"variableflowpressuredependant\"/>\n\t\t\t<xs:enumeration value=\"variableflowpressureindependant\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcAirTerminalTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAirTerminalTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcAirTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"grille\"/>\n\t\t\t<xs:enumeration value=\"register\"/>\n\t\t\t<xs:enumeration value=\"diffuser\"/>\n\t\t\t<xs:enumeration value=\"eyeball\"/>\n\t\t\t<xs:enumeration value=\"iris\"/>\n\t\t\t<xs:enumeration value=\"lineargrille\"/>\n\t\t\t<xs:enumeration value=\"lineardiffuser\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcAirToAirHeatRecoveryTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcAirToAirHeatRecoveryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fixedplatecounterflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"fixedplatecrossflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"fixedplateparallelflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"rotarywheel\"/>\n\t\t\t<xs:enumeration value=\"runaroundcoilloop\"/>\n\t\t\t<xs:enumeration value=\"heatpipe\"/>\n\t\t\t<xs:enumeration value=\"twintowerenthalpyrecoveryloops\"/>\n\t\t\t<xs:enumeration value=\"thermosiphonsealedtubeheatexchangers\"/>\n\t\t\t<xs:enumeration value=\"thermosiphoncoiltypeheatexchangers\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcAlarmTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAlarmTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcAlarmTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bell\"/>\n\t\t\t<xs:enumeration value=\"breakglassbutton\"/>\n\t\t\t<xs:enumeration value=\"light\"/>\n\t\t\t<xs:enumeration value=\"manualpullbox\"/>\n\t\t\t<xs:enumeration value=\"siren\"/>\n\t\t\t<xs:enumeration value=\"whistle\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcAnalysisModelTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAnalysisModelTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcAnalysisModelTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"in_plane_loading_2d\"/>\n\t\t\t<xs:enumeration value=\"out_plane_loading_2d\"/>\n\t\t\t<xs:enumeration value=\"loading_3d\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcAnalysisTheoryTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAnalysisTheoryTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcAnalysisTheoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"first_order_theory\"/>\n\t\t\t<xs:enumeration value=\"second_order_theory\"/>\n\t\t\t<xs:enumeration value=\"third_order_theory\"/>\n\t\t\t<xs:enumeration value=\"full_nonlinear_theory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcArithmeticOperatorEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcArithmeticOperatorEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcArithmeticOperatorEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"add\"/>\n\t\t\t<xs:enumeration value=\"divide\"/>\n\t\t\t<xs:enumeration value=\"multiply\"/>\n\t\t\t<xs:enumeration value=\"subtract\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcAssemblyPlaceEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAssemblyPlaceEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcAssemblyPlaceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"factory\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcBSplineCurveForm\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBSplineCurveForm\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcBSplineCurveForm\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"polyline_form\"/>\n\t\t\t<xs:enumeration value=\"circular_arc\"/>\n\t\t\t<xs:enumeration value=\"elliptic_arc\"/>\n\t\t\t<xs:enumeration value=\"parabolic_arc\"/>\n\t\t\t<xs:enumeration value=\"hyperbolic_arc\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcBeamTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBeamTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcBeamTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beam\"/>\n\t\t\t<xs:enumeration value=\"joist\"/>\n\t\t\t<xs:enumeration value=\"lintel\"/>\n\t\t\t<xs:enumeration value=\"t_beam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcBenchmarkEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBenchmarkEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcBenchmarkEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"greaterthan\"/>\n\t\t\t<xs:enumeration value=\"greaterthanorequalto\"/>\n\t\t\t<xs:enumeration value=\"lessthan\"/>\n\t\t\t<xs:enumeration value=\"lessthanorequalto\"/>\n\t\t\t<xs:enumeration value=\"equalto\"/>\n\t\t\t<xs:enumeration value=\"notequalto\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcBoilerTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBoilerTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcBoilerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"water\"/>\n\t\t\t<xs:enumeration value=\"steam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcBooleanOperator\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBooleanOperator\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcBooleanOperator\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"union\"/>\n\t\t\t<xs:enumeration value=\"intersection\"/>\n\t\t\t<xs:enumeration value=\"difference\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcCableCarrierFittingTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCableCarrierFittingTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcCableCarrierFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"cross\"/>\n\t\t\t<xs:enumeration value=\"reducer\"/>\n\t\t\t<xs:enumeration value=\"tee\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcCableCarrierSegmentTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCableCarrierSegmentTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcCableCarrierSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cableladdersegment\"/>\n\t\t\t<xs:enumeration value=\"cabletraysegment\"/>\n\t\t\t<xs:enumeration value=\"cabletrunkingsegment\"/>\n\t\t\t<xs:enumeration value=\"conduitsegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcCableSegmentTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCableSegmentTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcCableSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cablesegment\"/>\n\t\t\t<xs:enumeration value=\"conductorsegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcChangeActionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcChangeActionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcChangeActionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"nochange\"/>\n\t\t\t<xs:enumeration value=\"modified\"/>\n\t\t\t<xs:enumeration value=\"added\"/>\n\t\t\t<xs:enumeration value=\"deleted\"/>\n\t\t\t<xs:enumeration value=\"modifiedadded\"/>\n\t\t\t<xs:enumeration value=\"modifieddeleted\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcChillerTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcChillerTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcChillerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aircooled\"/>\n\t\t\t<xs:enumeration value=\"watercooled\"/>\n\t\t\t<xs:enumeration value=\"heatrecovery\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcCoilTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCoilTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcCoilTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dxcoolingcoil\"/>\n\t\t\t<xs:enumeration value=\"watercoolingcoil\"/>\n\t\t\t<xs:enumeration value=\"steamheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"waterheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"electricheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"gasheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcColumnTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcColumnTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcColumnTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"column\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcCompressorTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCompressorTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcCompressorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dynamic\"/>\n\t\t\t<xs:enumeration value=\"reciprocating\"/>\n\t\t\t<xs:enumeration value=\"rotary\"/>\n\t\t\t<xs:enumeration value=\"scroll\"/>\n\t\t\t<xs:enumeration value=\"trochoidal\"/>\n\t\t\t<xs:enumeration value=\"singlestage\"/>\n\t\t\t<xs:enumeration value=\"booster\"/>\n\t\t\t<xs:enumeration value=\"opentype\"/>\n\t\t\t<xs:enumeration value=\"hermetic\"/>\n\t\t\t<xs:enumeration value=\"semihermetic\"/>\n\t\t\t<xs:enumeration value=\"weldedshellhermetic\"/>\n\t\t\t<xs:enumeration value=\"rollingpiston\"/>\n\t\t\t<xs:enumeration value=\"rotaryvane\"/>\n\t\t\t<xs:enumeration value=\"singlescrew\"/>\n\t\t\t<xs:enumeration value=\"twinscrew\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcCondenserTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCondenserTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcCondenserTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"watercooledshelltube\"/>\n\t\t\t<xs:enumeration value=\"watercooledshellcoil\"/>\n\t\t\t<xs:enumeration value=\"watercooledtubeintube\"/>\n\t\t\t<xs:enumeration value=\"watercooledbrazedplate\"/>\n\t\t\t<xs:enumeration value=\"aircooled\"/>\n\t\t\t<xs:enumeration value=\"evaporativecooled\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcConnectionTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcConnectionTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcConnectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"atpath\"/>\n\t\t\t<xs:enumeration value=\"atstart\"/>\n\t\t\t<xs:enumeration value=\"atend\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcConstraintEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcConstraintEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcConstraintEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"hard\"/>\n\t\t\t<xs:enumeration value=\"soft\"/>\n\t\t\t<xs:enumeration value=\"advisory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcControllerTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcControllerTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcControllerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floating\"/>\n\t\t\t<xs:enumeration value=\"proportional\"/>\n\t\t\t<xs:enumeration value=\"proportionalintegral\"/>\n\t\t\t<xs:enumeration value=\"proportionalintegralderivative\"/>\n\t\t\t<xs:enumeration value=\"timedtwoposition\"/>\n\t\t\t<xs:enumeration value=\"twoposition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcCooledBeamTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCooledBeamTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcCooledBeamTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"active\"/>\n\t\t\t<xs:enumeration value=\"passive\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcCoolingTowerTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCoolingTowerTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcCoolingTowerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"naturaldraft\"/>\n\t\t\t<xs:enumeration value=\"mechanicalinduceddraft\"/>\n\t\t\t<xs:enumeration value=\"mechanicalforceddraft\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcCostScheduleTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCostScheduleTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcCostScheduleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"budget\"/>\n\t\t\t<xs:enumeration value=\"costplan\"/>\n\t\t\t<xs:enumeration value=\"estimate\"/>\n\t\t\t<xs:enumeration value=\"tender\"/>\n\t\t\t<xs:enumeration value=\"pricedbillofquantities\"/>\n\t\t\t<xs:enumeration value=\"unpricedbillofquantities\"/>\n\t\t\t<xs:enumeration value=\"scheduleofrates\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcCoveringTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCoveringTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcCoveringTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ceiling\"/>\n\t\t\t<xs:enumeration value=\"flooring\"/>\n\t\t\t<xs:enumeration value=\"cladding\"/>\n\t\t\t<xs:enumeration value=\"roofing\"/>\n\t\t\t<xs:enumeration value=\"insulation\"/>\n\t\t\t<xs:enumeration value=\"membrane\"/>\n\t\t\t<xs:enumeration value=\"sleeving\"/>\n\t\t\t<xs:enumeration value=\"wrapping\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcCurrencyEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCurrencyEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcCurrencyEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aed\"/>\n\t\t\t<xs:enumeration value=\"aes\"/>\n\t\t\t<xs:enumeration value=\"ats\"/>\n\t\t\t<xs:enumeration value=\"aud\"/>\n\t\t\t<xs:enumeration value=\"bbd\"/>\n\t\t\t<xs:enumeration value=\"beg\"/>\n\t\t\t<xs:enumeration value=\"bgl\"/>\n\t\t\t<xs:enumeration value=\"bhd\"/>\n\t\t\t<xs:enumeration value=\"bmd\"/>\n\t\t\t<xs:enumeration value=\"bnd\"/>\n\t\t\t<xs:enumeration value=\"brl\"/>\n\t\t\t<xs:enumeration value=\"bsd\"/>\n\t\t\t<xs:enumeration value=\"bwp\"/>\n\t\t\t<xs:enumeration value=\"bzd\"/>\n\t\t\t<xs:enumeration value=\"cad\"/>\n\t\t\t<xs:enumeration value=\"cbd\"/>\n\t\t\t<xs:enumeration value=\"chf\"/>\n\t\t\t<xs:enumeration value=\"clp\"/>\n\t\t\t<xs:enumeration value=\"cny\"/>\n\t\t\t<xs:enumeration value=\"cys\"/>\n\t\t\t<xs:enumeration value=\"czk\"/>\n\t\t\t<xs:enumeration value=\"ddp\"/>\n\t\t\t<xs:enumeration value=\"dem\"/>\n\t\t\t<xs:enumeration value=\"dkk\"/>\n\t\t\t<xs:enumeration value=\"egl\"/>\n\t\t\t<xs:enumeration value=\"est\"/>\n\t\t\t<xs:enumeration value=\"eur\"/>\n\t\t\t<xs:enumeration value=\"fak\"/>\n\t\t\t<xs:enumeration value=\"fim\"/>\n\t\t\t<xs:enumeration value=\"fjd\"/>\n\t\t\t<xs:enumeration value=\"fkp\"/>\n\t\t\t<xs:enumeration value=\"frf\"/>\n\t\t\t<xs:enumeration value=\"gbp\"/>\n\t\t\t<xs:enumeration value=\"gip\"/>\n\t\t\t<xs:enumeration value=\"gmd\"/>\n\t\t\t<xs:enumeration value=\"grx\"/>\n\t\t\t<xs:enumeration value=\"hkd\"/>\n\t\t\t<xs:enumeration value=\"huf\"/>\n\t\t\t<xs:enumeration value=\"ick\"/>\n\t\t\t<xs:enumeration value=\"idr\"/>\n\t\t\t<xs:enumeration value=\"ils\"/>\n\t\t\t<xs:enumeration value=\"inr\"/>\n\t\t\t<xs:enumeration value=\"irp\"/>\n\t\t\t<xs:enumeration value=\"itl\"/>\n\t\t\t<xs:enumeration value=\"jmd\"/>\n\t\t\t<xs:enumeration value=\"jod\"/>\n\t\t\t<xs:enumeration value=\"jpy\"/>\n\t\t\t<xs:enumeration value=\"kes\"/>\n\t\t\t<xs:enumeration value=\"krw\"/>\n\t\t\t<xs:enumeration value=\"kwd\"/>\n\t\t\t<xs:enumeration value=\"kyd\"/>\n\t\t\t<xs:enumeration value=\"lkr\"/>\n\t\t\t<xs:enumeration value=\"luf\"/>\n\t\t\t<xs:enumeration value=\"mtl\"/>\n\t\t\t<xs:enumeration value=\"mur\"/>\n\t\t\t<xs:enumeration value=\"mxn\"/>\n\t\t\t<xs:enumeration value=\"myr\"/>\n\t\t\t<xs:enumeration value=\"nlg\"/>\n\t\t\t<xs:enumeration value=\"nzd\"/>\n\t\t\t<xs:enumeration value=\"omr\"/>\n\t\t\t<xs:enumeration value=\"pgk\"/>\n\t\t\t<xs:enumeration value=\"php\"/>\n\t\t\t<xs:enumeration value=\"pkr\"/>\n\t\t\t<xs:enumeration value=\"pln\"/>\n\t\t\t<xs:enumeration value=\"ptn\"/>\n\t\t\t<xs:enumeration value=\"qar\"/>\n\t\t\t<xs:enumeration value=\"rur\"/>\n\t\t\t<xs:enumeration value=\"sar\"/>\n\t\t\t<xs:enumeration value=\"scr\"/>\n\t\t\t<xs:enumeration value=\"sek\"/>\n\t\t\t<xs:enumeration value=\"sgd\"/>\n\t\t\t<xs:enumeration value=\"skp\"/>\n\t\t\t<xs:enumeration value=\"thb\"/>\n\t\t\t<xs:enumeration value=\"trl\"/>\n\t\t\t<xs:enumeration value=\"ttd\"/>\n\t\t\t<xs:enumeration value=\"twd\"/>\n\t\t\t<xs:enumeration value=\"usd\"/>\n\t\t\t<xs:enumeration value=\"veb\"/>\n\t\t\t<xs:enumeration value=\"vnd\"/>\n\t\t\t<xs:enumeration value=\"xeu\"/>\n\t\t\t<xs:enumeration value=\"zar\"/>\n\t\t\t<xs:enumeration value=\"zwd\"/>\n\t\t\t<xs:enumeration value=\"nok\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDamperTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDamperTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDamperTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"controldamper\"/>\n\t\t\t<xs:enumeration value=\"firedamper\"/>\n\t\t\t<xs:enumeration value=\"smokedamper\"/>\n\t\t\t<xs:enumeration value=\"firesmokedamper\"/>\n\t\t\t<xs:enumeration value=\"backdraftdamper\"/>\n\t\t\t<xs:enumeration value=\"reliefdamper\"/>\n\t\t\t<xs:enumeration value=\"blastdamper\"/>\n\t\t\t<xs:enumeration value=\"gravitydamper\"/>\n\t\t\t<xs:enumeration value=\"gravityreliefdamper\"/>\n\t\t\t<xs:enumeration value=\"balancingdamper\"/>\n\t\t\t<xs:enumeration value=\"fumehoodexhaust\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDataOriginEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDataOriginEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDataOriginEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"measured\"/>\n\t\t\t<xs:enumeration value=\"predicted\"/>\n\t\t\t<xs:enumeration value=\"simulated\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDerivedUnitEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDerivedUnitEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDerivedUnitEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"angularvelocityunit\"/>\n\t\t\t<xs:enumeration value=\"compoundplaneangleunit\"/>\n\t\t\t<xs:enumeration value=\"dynamicviscosityunit\"/>\n\t\t\t<xs:enumeration value=\"heatfluxdensityunit\"/>\n\t\t\t<xs:enumeration value=\"integercountrateunit\"/>\n\t\t\t<xs:enumeration value=\"isothermalmoisturecapacityunit\"/>\n\t\t\t<xs:enumeration value=\"kinematicviscosityunit\"/>\n\t\t\t<xs:enumeration value=\"linearvelocityunit\"/>\n\t\t\t<xs:enumeration value=\"massdensityunit\"/>\n\t\t\t<xs:enumeration value=\"massflowrateunit\"/>\n\t\t\t<xs:enumeration value=\"moisturediffusivityunit\"/>\n\t\t\t<xs:enumeration value=\"molecularweightunit\"/>\n\t\t\t<xs:enumeration value=\"specificheatcapacityunit\"/>\n\t\t\t<xs:enumeration value=\"thermaladmittanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermalconductanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermalresistanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermaltransmittanceunit\"/>\n\t\t\t<xs:enumeration value=\"vaporpermeabilityunit\"/>\n\t\t\t<xs:enumeration value=\"volumetricflowrateunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalfrequencyunit\"/>\n\t\t\t<xs:enumeration value=\"torqueunit\"/>\n\t\t\t<xs:enumeration value=\"momentofinertiaunit\"/>\n\t\t\t<xs:enumeration value=\"linearmomentunit\"/>\n\t\t\t<xs:enumeration value=\"linearforceunit\"/>\n\t\t\t<xs:enumeration value=\"planarforceunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofelasticityunit\"/>\n\t\t\t<xs:enumeration value=\"shearmodulusunit\"/>\n\t\t\t<xs:enumeration value=\"linearstiffnessunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalstiffnessunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"accelerationunit\"/>\n\t\t\t<xs:enumeration value=\"curvatureunit\"/>\n\t\t\t<xs:enumeration value=\"heatingvalueunit\"/>\n\t\t\t<xs:enumeration value=\"ionconcentrationunit\"/>\n\t\t\t<xs:enumeration value=\"luminousintensitydistributionunit\"/>\n\t\t\t<xs:enumeration value=\"massperlengthunit\"/>\n\t\t\t<xs:enumeration value=\"modulusoflinearsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofrotationalsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"phunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalmassunit\"/>\n\t\t\t<xs:enumeration value=\"sectionareaintegralunit\"/>\n\t\t\t<xs:enumeration value=\"sectionmodulusunit\"/>\n\t\t\t<xs:enumeration value=\"soundpowerunit\"/>\n\t\t\t<xs:enumeration value=\"soundpressureunit\"/>\n\t\t\t<xs:enumeration value=\"temperaturegradientunit\"/>\n\t\t\t<xs:enumeration value=\"thermalexpansioncoefficientunit\"/>\n\t\t\t<xs:enumeration value=\"warpingconstantunit\"/>\n\t\t\t<xs:enumeration value=\"warpingmomentunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDimensionExtentUsage\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDimensionExtentUsage\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDimensionExtentUsage\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"origin\"/>\n\t\t\t<xs:enumeration value=\"target\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDirectionSenseEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDirectionSenseEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDirectionSenseEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"positive\"/>\n\t\t\t<xs:enumeration value=\"negative\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDistributionChamberElementTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDistributionChamberElementTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDistributionChamberElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"formedduct\"/>\n\t\t\t<xs:enumeration value=\"inspectionchamber\"/>\n\t\t\t<xs:enumeration value=\"inspectionpit\"/>\n\t\t\t<xs:enumeration value=\"manhole\"/>\n\t\t\t<xs:enumeration value=\"meterchamber\"/>\n\t\t\t<xs:enumeration value=\"sump\"/>\n\t\t\t<xs:enumeration value=\"trench\"/>\n\t\t\t<xs:enumeration value=\"valvechamber\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDocumentConfidentialityEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDocumentConfidentialityEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDocumentConfidentialityEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"public\"/>\n\t\t\t<xs:enumeration value=\"restricted\"/>\n\t\t\t<xs:enumeration value=\"confidential\"/>\n\t\t\t<xs:enumeration value=\"personal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDocumentStatusEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDocumentStatusEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDocumentStatusEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"draft\"/>\n\t\t\t<xs:enumeration value=\"finaldraft\"/>\n\t\t\t<xs:enumeration value=\"final\"/>\n\t\t\t<xs:enumeration value=\"revision\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDoorPanelOperationEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorPanelOperationEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDoorPanelOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"swinging\"/>\n\t\t\t<xs:enumeration value=\"double_acting\"/>\n\t\t\t<xs:enumeration value=\"sliding\"/>\n\t\t\t<xs:enumeration value=\"folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDoorPanelPositionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorPanelPositionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDoorPanelPositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"middle\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDoorStyleConstructionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorStyleConstructionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDoorStyleConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aluminium\"/>\n\t\t\t<xs:enumeration value=\"high_grade_steel\"/>\n\t\t\t<xs:enumeration value=\"steel\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"aluminium_wood\"/>\n\t\t\t<xs:enumeration value=\"aluminium_plastic\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDoorStyleOperationEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorStyleOperationEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDoorStyleOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_swing_left\"/>\n\t\t\t<xs:enumeration value=\"single_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_left\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_right\"/>\n\t\t\t<xs:enumeration value=\"double_swing_left\"/>\n\t\t\t<xs:enumeration value=\"double_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_double_swing\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_left\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_sliding\"/>\n\t\t\t<xs:enumeration value=\"folding_to_left\"/>\n\t\t\t<xs:enumeration value=\"folding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDuctFittingTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDuctFittingTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDuctFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"obstruction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDuctSegmentTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDuctSegmentTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDuctSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDuctSilencerTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDuctSilencerTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDuctSilencerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flatoval\"/>\n\t\t\t<xs:enumeration value=\"rectangular\"/>\n\t\t\t<xs:enumeration value=\"round\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcElectricApplianceTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricApplianceTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcElectricApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"computer\"/>\n\t\t\t<xs:enumeration value=\"directwaterheater\"/>\n\t\t\t<xs:enumeration value=\"dishwasher\"/>\n\t\t\t<xs:enumeration value=\"electriccooker\"/>\n\t\t\t<xs:enumeration value=\"electricheater\"/>\n\t\t\t<xs:enumeration value=\"facsimile\"/>\n\t\t\t<xs:enumeration value=\"freestandingfan\"/>\n\t\t\t<xs:enumeration value=\"freezer\"/>\n\t\t\t<xs:enumeration value=\"fridge_freezer\"/>\n\t\t\t<xs:enumeration value=\"handdryer\"/>\n\t\t\t<xs:enumeration value=\"indirectwaterheater\"/>\n\t\t\t<xs:enumeration value=\"microwave\"/>\n\t\t\t<xs:enumeration value=\"photocopier\"/>\n\t\t\t<xs:enumeration value=\"printer\"/>\n\t\t\t<xs:enumeration value=\"refrigerator\"/>\n\t\t\t<xs:enumeration value=\"radiantheater\"/>\n\t\t\t<xs:enumeration value=\"scanner\"/>\n\t\t\t<xs:enumeration value=\"telephone\"/>\n\t\t\t<xs:enumeration value=\"tumbledryer\"/>\n\t\t\t<xs:enumeration value=\"tv\"/>\n\t\t\t<xs:enumeration value=\"vendingmachine\"/>\n\t\t\t<xs:enumeration value=\"washingmachine\"/>\n\t\t\t<xs:enumeration value=\"waterheater\"/>\n\t\t\t<xs:enumeration value=\"watercooler\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcElectricCurrentEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcElectricCurrentEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"alternating\"/>\n\t\t\t<xs:enumeration value=\"direct\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcElectricDistributionPointFunctionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricDistributionPointFunctionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcElectricDistributionPointFunctionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"alarmpanel\"/>\n\t\t\t<xs:enumeration value=\"consumerunit\"/>\n\t\t\t<xs:enumeration value=\"controlpanel\"/>\n\t\t\t<xs:enumeration value=\"distributionboard\"/>\n\t\t\t<xs:enumeration value=\"gasdetectorpanel\"/>\n\t\t\t<xs:enumeration value=\"indicatorpanel\"/>\n\t\t\t<xs:enumeration value=\"mimicpanel\"/>\n\t\t\t<xs:enumeration value=\"motorcontrolcentre\"/>\n\t\t\t<xs:enumeration value=\"switchboard\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcElectricFlowStorageDeviceTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcElectricFlowStorageDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"battery\"/>\n\t\t\t<xs:enumeration value=\"capacitorbank\"/>\n\t\t\t<xs:enumeration value=\"harmonicfilter\"/>\n\t\t\t<xs:enumeration value=\"inductorbank\"/>\n\t\t\t<xs:enumeration value=\"ups\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcElectricGeneratorTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricGeneratorTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcElectricGeneratorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcElectricHeaterTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricHeaterTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcElectricHeaterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electricpointheater\"/>\n\t\t\t<xs:enumeration value=\"electriccableheater\"/>\n\t\t\t<xs:enumeration value=\"electricmatheater\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcElectricMotorTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricMotorTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcElectricMotorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dc\"/>\n\t\t\t<xs:enumeration value=\"induction\"/>\n\t\t\t<xs:enumeration value=\"polyphase\"/>\n\t\t\t<xs:enumeration value=\"reluctancesynchronous\"/>\n\t\t\t<xs:enumeration value=\"synchronous\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcElectricTimeControlTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricTimeControlTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcElectricTimeControlTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"timeclock\"/>\n\t\t\t<xs:enumeration value=\"timedelay\"/>\n\t\t\t<xs:enumeration value=\"relay\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcElementAssemblyTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElementAssemblyTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcElementAssemblyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"accessory_assembly\"/>\n\t\t\t<xs:enumeration value=\"arch\"/>\n\t\t\t<xs:enumeration value=\"beam_grid\"/>\n\t\t\t<xs:enumeration value=\"braced_frame\"/>\n\t\t\t<xs:enumeration value=\"girder\"/>\n\t\t\t<xs:enumeration value=\"reinforcement_unit\"/>\n\t\t\t<xs:enumeration value=\"rigid_frame\"/>\n\t\t\t<xs:enumeration value=\"slab_field\"/>\n\t\t\t<xs:enumeration value=\"truss\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcElementCompositionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElementCompositionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcElementCompositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"complex\"/>\n\t\t\t<xs:enumeration value=\"element\"/>\n\t\t\t<xs:enumeration value=\"partial\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcEnergySequenceEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergySequenceEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcEnergySequenceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"primary\"/>\n\t\t\t<xs:enumeration value=\"secondary\"/>\n\t\t\t<xs:enumeration value=\"tertiary\"/>\n\t\t\t<xs:enumeration value=\"auxiliary\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcEnvironmentalImpactCategoryEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcEnvironmentalImpactCategoryEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcEnvironmentalImpactCategoryEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"combinedvalue\"/>\n\t\t\t<xs:enumeration value=\"disposal\"/>\n\t\t\t<xs:enumeration value=\"extraction\"/>\n\t\t\t<xs:enumeration value=\"installation\"/>\n\t\t\t<xs:enumeration value=\"manufacture\"/>\n\t\t\t<xs:enumeration value=\"transportation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcEvaporativeCoolerTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcEvaporativeCoolerTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcEvaporativeCoolerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directevaporativerandommediaaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativerigidmediaaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativeslingerspackagedaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativepackagedrotaryaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativeairwasher\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativepackageaircooler\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativewetcoil\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativecoolingtowerorcoilcooler\"/>\n\t\t\t<xs:enumeration value=\"indirectdirectcombination\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcEvaporatorTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcEvaporatorTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcEvaporatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directexpansionshellandtube\"/>\n\t\t\t<xs:enumeration value=\"directexpansiontubeintube\"/>\n\t\t\t<xs:enumeration value=\"directexpansionbrazedplate\"/>\n\t\t\t<xs:enumeration value=\"floodedshellandtube\"/>\n\t\t\t<xs:enumeration value=\"shellandcoil\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcFanTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFanTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcFanTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"centrifugalforwardcurved\"/>\n\t\t\t<xs:enumeration value=\"centrifugalradial\"/>\n\t\t\t<xs:enumeration value=\"centrifugalbackwardinclinedcurved\"/>\n\t\t\t<xs:enumeration value=\"centrifugalairfoil\"/>\n\t\t\t<xs:enumeration value=\"tubeaxial\"/>\n\t\t\t<xs:enumeration value=\"vaneaxial\"/>\n\t\t\t<xs:enumeration value=\"propelloraxial\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcFilterTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFilterTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcFilterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airparticlefilter\"/>\n\t\t\t<xs:enumeration value=\"odorfilter\"/>\n\t\t\t<xs:enumeration value=\"oilfilter\"/>\n\t\t\t<xs:enumeration value=\"strainer\"/>\n\t\t\t<xs:enumeration value=\"waterfilter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcFireSuppressionTerminalTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFireSuppressionTerminalTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcFireSuppressionTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"breechinginlet\"/>\n\t\t\t<xs:enumeration value=\"firehydrant\"/>\n\t\t\t<xs:enumeration value=\"hosereel\"/>\n\t\t\t<xs:enumeration value=\"sprinkler\"/>\n\t\t\t<xs:enumeration value=\"sprinklerdeflector\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcFlowDirectionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFlowDirectionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcFlowDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"source\"/>\n\t\t\t<xs:enumeration value=\"sink\"/>\n\t\t\t<xs:enumeration value=\"sourceandsink\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcFlowInstrumentTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFlowInstrumentTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcFlowInstrumentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pressuregauge\"/>\n\t\t\t<xs:enumeration value=\"thermometer\"/>\n\t\t\t<xs:enumeration value=\"ammeter\"/>\n\t\t\t<xs:enumeration value=\"frequencymeter\"/>\n\t\t\t<xs:enumeration value=\"powerfactormeter\"/>\n\t\t\t<xs:enumeration value=\"phaseanglemeter\"/>\n\t\t\t<xs:enumeration value=\"voltmeter_peak\"/>\n\t\t\t<xs:enumeration value=\"voltmeter_rms\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcFlowMeterTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFlowMeterTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcFlowMeterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electricmeter\"/>\n\t\t\t<xs:enumeration value=\"energymeter\"/>\n\t\t\t<xs:enumeration value=\"flowmeter\"/>\n\t\t\t<xs:enumeration value=\"gasmeter\"/>\n\t\t\t<xs:enumeration value=\"oilmeter\"/>\n\t\t\t<xs:enumeration value=\"watermeter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcFootingTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFootingTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcFootingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"footing_beam\"/>\n\t\t\t<xs:enumeration value=\"pad_footing\"/>\n\t\t\t<xs:enumeration value=\"pile_cap\"/>\n\t\t\t<xs:enumeration value=\"strip_footing\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcGasTerminalTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcGasTerminalTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcGasTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"gasappliance\"/>\n\t\t\t<xs:enumeration value=\"gasbooster\"/>\n\t\t\t<xs:enumeration value=\"gasburner\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcGeometricProjectionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcGeometricProjectionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcGeometricProjectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"graph_view\"/>\n\t\t\t<xs:enumeration value=\"sketch_view\"/>\n\t\t\t<xs:enumeration value=\"model_view\"/>\n\t\t\t<xs:enumeration value=\"plan_view\"/>\n\t\t\t<xs:enumeration value=\"reflected_plan_view\"/>\n\t\t\t<xs:enumeration value=\"section_view\"/>\n\t\t\t<xs:enumeration value=\"elevation_view\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcGlobalOrLocalEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcGlobalOrLocalEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcGlobalOrLocalEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"global_coords\"/>\n\t\t\t<xs:enumeration value=\"local_coords\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcHeatExchangerTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatExchangerTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcHeatExchangerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plate\"/>\n\t\t\t<xs:enumeration value=\"shellandtube\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcHumidifierTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHumidifierTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcHumidifierTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"steaminjection\"/>\n\t\t\t<xs:enumeration value=\"adiabaticairwasher\"/>\n\t\t\t<xs:enumeration value=\"adiabaticpan\"/>\n\t\t\t<xs:enumeration value=\"adiabaticwettedelement\"/>\n\t\t\t<xs:enumeration value=\"adiabaticatomizing\"/>\n\t\t\t<xs:enumeration value=\"adiabaticultrasonic\"/>\n\t\t\t<xs:enumeration value=\"adiabaticrigidmedia\"/>\n\t\t\t<xs:enumeration value=\"adiabaticcompressedairnozzle\"/>\n\t\t\t<xs:enumeration value=\"assistedelectric\"/>\n\t\t\t<xs:enumeration value=\"assistednaturalgas\"/>\n\t\t\t<xs:enumeration value=\"assistedpropane\"/>\n\t\t\t<xs:enumeration value=\"assistedbutane\"/>\n\t\t\t<xs:enumeration value=\"assistedsteam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcInternalOrExternalEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInternalOrExternalEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcInternalOrExternalEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"internal\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcInventoryTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInventoryTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcInventoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assetinventory\"/>\n\t\t\t<xs:enumeration value=\"spaceinventory\"/>\n\t\t\t<xs:enumeration value=\"furnitureinventory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcJunctionBoxTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcJunctionBoxTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcJunctionBoxTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcLampTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLampTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcLampTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcLayerSetDirectionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLayerSetDirectionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcLayerSetDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"axis1\"/>\n\t\t\t<xs:enumeration value=\"axis2\"/>\n\t\t\t<xs:enumeration value=\"axis3\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcLightDistributionCurveEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLightDistributionCurveEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcLightDistributionCurveEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"type_a\"/>\n\t\t\t<xs:enumeration value=\"type_b\"/>\n\t\t\t<xs:enumeration value=\"type_c\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcLightEmissionSourceEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLightEmissionSourceEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcLightEmissionSourceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"lightemittingdiode\"/>\n\t\t\t<xs:enumeration value=\"lowpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"lowvoltagehalogen\"/>\n\t\t\t<xs:enumeration value=\"mainvoltagehalogen\"/>\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcLightFixtureTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLightFixtureTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcLightFixtureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pointsource\"/>\n\t\t\t<xs:enumeration value=\"directionsource\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcLoadGroupTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLoadGroupTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcLoadGroupTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"load_group\"/>\n\t\t\t<xs:enumeration value=\"load_case\"/>\n\t\t\t<xs:enumeration value=\"load_combination_group\"/>\n\t\t\t<xs:enumeration value=\"load_combination\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcLogicalOperatorEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLogicalOperatorEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcLogicalOperatorEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"logicaland\"/>\n\t\t\t<xs:enumeration value=\"logicalor\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcMemberTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMemberTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"brace\"/>\n\t\t\t<xs:enumeration value=\"chord\"/>\n\t\t\t<xs:enumeration value=\"collar\"/>\n\t\t\t<xs:enumeration value=\"member\"/>\n\t\t\t<xs:enumeration value=\"plate\"/>\n\t\t\t<xs:enumeration value=\"post\"/>\n\t\t\t<xs:enumeration value=\"purlin\"/>\n\t\t\t<xs:enumeration value=\"rafter\"/>\n\t\t\t<xs:enumeration value=\"stringer\"/>\n\t\t\t<xs:enumeration value=\"strut\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcMotorConnectionTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMotorConnectionTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcMotorConnectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beltdrive\"/>\n\t\t\t<xs:enumeration value=\"coupling\"/>\n\t\t\t<xs:enumeration value=\"directdrive\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcNullStyle\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNullStyle\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcNullStyle\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"null\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcObjectTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcObjectTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcObjectTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"product\"/>\n\t\t\t<xs:enumeration value=\"process\"/>\n\t\t\t<xs:enumeration value=\"control\"/>\n\t\t\t<xs:enumeration value=\"resource\"/>\n\t\t\t<xs:enumeration value=\"actor\"/>\n\t\t\t<xs:enumeration value=\"group\"/>\n\t\t\t<xs:enumeration value=\"project\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcObjectiveEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcObjectiveEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcObjectiveEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"codecompliance\"/>\n\t\t\t<xs:enumeration value=\"designintent\"/>\n\t\t\t<xs:enumeration value=\"healthandsafety\"/>\n\t\t\t<xs:enumeration value=\"requirement\"/>\n\t\t\t<xs:enumeration value=\"specification\"/>\n\t\t\t<xs:enumeration value=\"triggercondition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcOccupantTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcOccupantTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcOccupantTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assignee\"/>\n\t\t\t<xs:enumeration value=\"assignor\"/>\n\t\t\t<xs:enumeration value=\"lessee\"/>\n\t\t\t<xs:enumeration value=\"lessor\"/>\n\t\t\t<xs:enumeration value=\"lettingagent\"/>\n\t\t\t<xs:enumeration value=\"owner\"/>\n\t\t\t<xs:enumeration value=\"tenant\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcOutletTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcOutletTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcOutletTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"audiovisualoutlet\"/>\n\t\t\t<xs:enumeration value=\"communicationsoutlet\"/>\n\t\t\t<xs:enumeration value=\"poweroutlet\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcPermeableCoveringOperationEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPermeableCoveringOperationEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcPermeableCoveringOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"grill\"/>\n\t\t\t<xs:enumeration value=\"louver\"/>\n\t\t\t<xs:enumeration value=\"screen\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcPhysicalOrVirtualEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPhysicalOrVirtualEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcPhysicalOrVirtualEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"physical\"/>\n\t\t\t<xs:enumeration value=\"virtual\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcPileConstructionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPileConstructionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcPileConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cast_in_place\"/>\n\t\t\t<xs:enumeration value=\"composite\"/>\n\t\t\t<xs:enumeration value=\"precast_concrete\"/>\n\t\t\t<xs:enumeration value=\"prefab_steel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcPileTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPileTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcPileTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cohesion\"/>\n\t\t\t<xs:enumeration value=\"friction\"/>\n\t\t\t<xs:enumeration value=\"support\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcPipeFittingTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPipeFittingTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcPipeFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"obstruction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcPipeSegmentTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPipeSegmentTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcPipeSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\n\t\t\t<xs:enumeration value=\"gutter\"/>\n\t\t\t<xs:enumeration value=\"spool\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcPlateTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlateTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcPlateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcProcedureTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcProcedureTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcProcedureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"advice_caution\"/>\n\t\t\t<xs:enumeration value=\"advice_note\"/>\n\t\t\t<xs:enumeration value=\"advice_warning\"/>\n\t\t\t<xs:enumeration value=\"calibration\"/>\n\t\t\t<xs:enumeration value=\"diagnostic\"/>\n\t\t\t<xs:enumeration value=\"shutdown\"/>\n\t\t\t<xs:enumeration value=\"startup\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcProfileTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcProfileTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcProfileTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curve\"/>\n\t\t\t<xs:enumeration value=\"area\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcProjectOrderRecordTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcProjectOrderRecordTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcProjectOrderRecordTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"change\"/>\n\t\t\t<xs:enumeration value=\"maintenance\"/>\n\t\t\t<xs:enumeration value=\"move\"/>\n\t\t\t<xs:enumeration value=\"purchase\"/>\n\t\t\t<xs:enumeration value=\"work\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcProjectOrderTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcProjectOrderTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcProjectOrderTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"changeorder\"/>\n\t\t\t<xs:enumeration value=\"maintenanceworkorder\"/>\n\t\t\t<xs:enumeration value=\"moveorder\"/>\n\t\t\t<xs:enumeration value=\"purchaseorder\"/>\n\t\t\t<xs:enumeration value=\"workorder\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcProjectedOrTrueLengthEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcProjectedOrTrueLengthEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcProjectedOrTrueLengthEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"projected_length\"/>\n\t\t\t<xs:enumeration value=\"true_length\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcPropertySourceEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPropertySourceEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcPropertySourceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"design\"/>\n\t\t\t<xs:enumeration value=\"designmaximum\"/>\n\t\t\t<xs:enumeration value=\"designminimum\"/>\n\t\t\t<xs:enumeration value=\"simulated\"/>\n\t\t\t<xs:enumeration value=\"asbuilt\"/>\n\t\t\t<xs:enumeration value=\"commissioning\"/>\n\t\t\t<xs:enumeration value=\"measured\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notknown\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcProtectiveDeviceTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcProtectiveDeviceTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcProtectiveDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fusedisconnector\"/>\n\t\t\t<xs:enumeration value=\"circuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"earthfailuredevice\"/>\n\t\t\t<xs:enumeration value=\"residualcurrentcircuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"residualcurrentswitch\"/>\n\t\t\t<xs:enumeration value=\"varistor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcPumpTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPumpTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcPumpTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"circulator\"/>\n\t\t\t<xs:enumeration value=\"endsuction\"/>\n\t\t\t<xs:enumeration value=\"splitcase\"/>\n\t\t\t<xs:enumeration value=\"verticalinline\"/>\n\t\t\t<xs:enumeration value=\"verticalturbine\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcRailingTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRailingTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcRailingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"handrail\"/>\n\t\t\t<xs:enumeration value=\"guardrail\"/>\n\t\t\t<xs:enumeration value=\"balustrade\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcRampFlightTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRampFlightTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcRampFlightTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight\"/>\n\t\t\t<xs:enumeration value=\"spiral\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcRampTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRampTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcRampTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight_run_ramp\"/>\n\t\t\t<xs:enumeration value=\"two_straight_run_ramp\"/>\n\t\t\t<xs:enumeration value=\"quarter_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"half_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"spiral_ramp\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcReflectanceMethodEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcReflectanceMethodEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcReflectanceMethodEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blinn\"/>\n\t\t\t<xs:enumeration value=\"flat\"/>\n\t\t\t<xs:enumeration value=\"glass\"/>\n\t\t\t<xs:enumeration value=\"matt\"/>\n\t\t\t<xs:enumeration value=\"metal\"/>\n\t\t\t<xs:enumeration value=\"mirror\"/>\n\t\t\t<xs:enumeration value=\"phong\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"strauss\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcReinforcingBarRoleEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcReinforcingBarRoleEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcReinforcingBarRoleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"main\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"ligature\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"punching\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"ring\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcReinforcingBarSurfaceEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcReinforcingBarSurfaceEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcReinforcingBarSurfaceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plain\"/>\n\t\t\t<xs:enumeration value=\"textured\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcResourceConsumptionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcResourceConsumptionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcResourceConsumptionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"consumed\"/>\n\t\t\t<xs:enumeration value=\"partiallyconsumed\"/>\n\t\t\t<xs:enumeration value=\"notconsumed\"/>\n\t\t\t<xs:enumeration value=\"occupied\"/>\n\t\t\t<xs:enumeration value=\"partiallyoccupied\"/>\n\t\t\t<xs:enumeration value=\"notoccupied\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcRibPlateDirectionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRibPlateDirectionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcRibPlateDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"direction_x\"/>\n\t\t\t<xs:enumeration value=\"direction_y\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcRoleEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRoleEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcRoleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"supplier\"/>\n\t\t\t<xs:enumeration value=\"manufacturer\"/>\n\t\t\t<xs:enumeration value=\"contractor\"/>\n\t\t\t<xs:enumeration value=\"subcontractor\"/>\n\t\t\t<xs:enumeration value=\"architect\"/>\n\t\t\t<xs:enumeration value=\"structuralengineer\"/>\n\t\t\t<xs:enumeration value=\"costengineer\"/>\n\t\t\t<xs:enumeration value=\"client\"/>\n\t\t\t<xs:enumeration value=\"buildingowner\"/>\n\t\t\t<xs:enumeration value=\"buildingoperator\"/>\n\t\t\t<xs:enumeration value=\"mechanicalengineer\"/>\n\t\t\t<xs:enumeration value=\"electricalengineer\"/>\n\t\t\t<xs:enumeration value=\"projectmanager\"/>\n\t\t\t<xs:enumeration value=\"facilitiesmanager\"/>\n\t\t\t<xs:enumeration value=\"civilengineer\"/>\n\t\t\t<xs:enumeration value=\"comissioningengineer\"/>\n\t\t\t<xs:enumeration value=\"engineer\"/>\n\t\t\t<xs:enumeration value=\"owner\"/>\n\t\t\t<xs:enumeration value=\"consultant\"/>\n\t\t\t<xs:enumeration value=\"constructionmanager\"/>\n\t\t\t<xs:enumeration value=\"fieldconstructionmanager\"/>\n\t\t\t<xs:enumeration value=\"reseller\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcRoofTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRoofTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcRoofTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flat_roof\"/>\n\t\t\t<xs:enumeration value=\"shed_roof\"/>\n\t\t\t<xs:enumeration value=\"gable_roof\"/>\n\t\t\t<xs:enumeration value=\"hip_roof\"/>\n\t\t\t<xs:enumeration value=\"hipped_gable_roof\"/>\n\t\t\t<xs:enumeration value=\"gambrel_roof\"/>\n\t\t\t<xs:enumeration value=\"mansard_roof\"/>\n\t\t\t<xs:enumeration value=\"barrel_roof\"/>\n\t\t\t<xs:enumeration value=\"rainbow_roof\"/>\n\t\t\t<xs:enumeration value=\"butterfly_roof\"/>\n\t\t\t<xs:enumeration value=\"pavilion_roof\"/>\n\t\t\t<xs:enumeration value=\"dome_roof\"/>\n\t\t\t<xs:enumeration value=\"freeform\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSIPrefix\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSIPrefix\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSIPrefix\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"exa\"/>\n\t\t\t<xs:enumeration value=\"peta\"/>\n\t\t\t<xs:enumeration value=\"tera\"/>\n\t\t\t<xs:enumeration value=\"giga\"/>\n\t\t\t<xs:enumeration value=\"mega\"/>\n\t\t\t<xs:enumeration value=\"kilo\"/>\n\t\t\t<xs:enumeration value=\"hecto\"/>\n\t\t\t<xs:enumeration value=\"deca\"/>\n\t\t\t<xs:enumeration value=\"deci\"/>\n\t\t\t<xs:enumeration value=\"centi\"/>\n\t\t\t<xs:enumeration value=\"milli\"/>\n\t\t\t<xs:enumeration value=\"micro\"/>\n\t\t\t<xs:enumeration value=\"nano\"/>\n\t\t\t<xs:enumeration value=\"pico\"/>\n\t\t\t<xs:enumeration value=\"femto\"/>\n\t\t\t<xs:enumeration value=\"atto\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSIUnitName\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSIUnitName\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSIUnitName\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ampere\"/>\n\t\t\t<xs:enumeration value=\"becquerel\"/>\n\t\t\t<xs:enumeration value=\"candela\"/>\n\t\t\t<xs:enumeration value=\"coulomb\"/>\n\t\t\t<xs:enumeration value=\"cubic_metre\"/>\n\t\t\t<xs:enumeration value=\"degree_celsius\"/>\n\t\t\t<xs:enumeration value=\"farad\"/>\n\t\t\t<xs:enumeration value=\"gram\"/>\n\t\t\t<xs:enumeration value=\"gray\"/>\n\t\t\t<xs:enumeration value=\"henry\"/>\n\t\t\t<xs:enumeration value=\"hertz\"/>\n\t\t\t<xs:enumeration value=\"joule\"/>\n\t\t\t<xs:enumeration value=\"kelvin\"/>\n\t\t\t<xs:enumeration value=\"lumen\"/>\n\t\t\t<xs:enumeration value=\"lux\"/>\n\t\t\t<xs:enumeration value=\"metre\"/>\n\t\t\t<xs:enumeration value=\"mole\"/>\n\t\t\t<xs:enumeration value=\"newton\"/>\n\t\t\t<xs:enumeration value=\"ohm\"/>\n\t\t\t<xs:enumeration value=\"pascal\"/>\n\t\t\t<xs:enumeration value=\"radian\"/>\n\t\t\t<xs:enumeration value=\"second\"/>\n\t\t\t<xs:enumeration value=\"siemens\"/>\n\t\t\t<xs:enumeration value=\"sievert\"/>\n\t\t\t<xs:enumeration value=\"square_metre\"/>\n\t\t\t<xs:enumeration value=\"steradian\"/>\n\t\t\t<xs:enumeration value=\"tesla\"/>\n\t\t\t<xs:enumeration value=\"volt\"/>\n\t\t\t<xs:enumeration value=\"watt\"/>\n\t\t\t<xs:enumeration value=\"weber\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSanitaryTerminalTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSanitaryTerminalTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSanitaryTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bath\"/>\n\t\t\t<xs:enumeration value=\"bidet\"/>\n\t\t\t<xs:enumeration value=\"cistern\"/>\n\t\t\t<xs:enumeration value=\"shower\"/>\n\t\t\t<xs:enumeration value=\"sink\"/>\n\t\t\t<xs:enumeration value=\"sanitaryfountain\"/>\n\t\t\t<xs:enumeration value=\"toiletpan\"/>\n\t\t\t<xs:enumeration value=\"urinal\"/>\n\t\t\t<xs:enumeration value=\"washhandbasin\"/>\n\t\t\t<xs:enumeration value=\"wcseat\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSectionTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"uniform\"/>\n\t\t\t<xs:enumeration value=\"tapered\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSensorTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSensorTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSensorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"co2sensor\"/>\n\t\t\t<xs:enumeration value=\"firesensor\"/>\n\t\t\t<xs:enumeration value=\"flowsensor\"/>\n\t\t\t<xs:enumeration value=\"gassensor\"/>\n\t\t\t<xs:enumeration value=\"heatsensor\"/>\n\t\t\t<xs:enumeration value=\"humiditysensor\"/>\n\t\t\t<xs:enumeration value=\"lightsensor\"/>\n\t\t\t<xs:enumeration value=\"moisturesensor\"/>\n\t\t\t<xs:enumeration value=\"movementsensor\"/>\n\t\t\t<xs:enumeration value=\"pressuresensor\"/>\n\t\t\t<xs:enumeration value=\"smokesensor\"/>\n\t\t\t<xs:enumeration value=\"soundsensor\"/>\n\t\t\t<xs:enumeration value=\"temperaturesensor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSequenceEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSequenceEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSequenceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"start_start\"/>\n\t\t\t<xs:enumeration value=\"start_finish\"/>\n\t\t\t<xs:enumeration value=\"finish_start\"/>\n\t\t\t<xs:enumeration value=\"finish_finish\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcServiceLifeFactorTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcServiceLifeFactorTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcServiceLifeFactorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"a_qualityofcomponents\"/>\n\t\t\t<xs:enumeration value=\"b_designlevel\"/>\n\t\t\t<xs:enumeration value=\"c_workexecutionlevel\"/>\n\t\t\t<xs:enumeration value=\"d_indoorenvironment\"/>\n\t\t\t<xs:enumeration value=\"e_outdoorenvironment\"/>\n\t\t\t<xs:enumeration value=\"f_inuseconditions\"/>\n\t\t\t<xs:enumeration value=\"g_maintenancelevel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcServiceLifeTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcServiceLifeTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcServiceLifeTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actualservicelife\"/>\n\t\t\t<xs:enumeration value=\"expectedservicelife\"/>\n\t\t\t<xs:enumeration value=\"optimisticreferenceservicelife\"/>\n\t\t\t<xs:enumeration value=\"pessimisticreferenceservicelife\"/>\n\t\t\t<xs:enumeration value=\"referenceservicelife\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSlabTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSlabTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSlabTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floor\"/>\n\t\t\t<xs:enumeration value=\"roof\"/>\n\t\t\t<xs:enumeration value=\"landing\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSoundScaleEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundScaleEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSoundScaleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dba\"/>\n\t\t\t<xs:enumeration value=\"dbb\"/>\n\t\t\t<xs:enumeration value=\"dbc\"/>\n\t\t\t<xs:enumeration value=\"nc\"/>\n\t\t\t<xs:enumeration value=\"nr\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSpaceHeaterTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpaceHeaterTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSpaceHeaterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"sectionalradiator\"/>\n\t\t\t<xs:enumeration value=\"panelradiator\"/>\n\t\t\t<xs:enumeration value=\"tubularradiator\"/>\n\t\t\t<xs:enumeration value=\"convector\"/>\n\t\t\t<xs:enumeration value=\"baseboardheater\"/>\n\t\t\t<xs:enumeration value=\"finnedtubeunit\"/>\n\t\t\t<xs:enumeration value=\"unitheater\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcStackTerminalTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcStackTerminalTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcStackTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"birdcage\"/>\n\t\t\t<xs:enumeration value=\"cowl\"/>\n\t\t\t<xs:enumeration value=\"rainwaterhopper\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcStairFlightTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcStairFlightTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcStairFlightTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight\"/>\n\t\t\t<xs:enumeration value=\"winder\"/>\n\t\t\t<xs:enumeration value=\"spiral\"/>\n\t\t\t<xs:enumeration value=\"curved\"/>\n\t\t\t<xs:enumeration value=\"freeform\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcStairTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcStairTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcStairTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight_run_stair\"/>\n\t\t\t<xs:enumeration value=\"two_straight_run_stair\"/>\n\t\t\t<xs:enumeration value=\"quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"half_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"half_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"three_quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"three_quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"spiral_stair\"/>\n\t\t\t<xs:enumeration value=\"double_return_stair\"/>\n\t\t\t<xs:enumeration value=\"curved_run_stair\"/>\n\t\t\t<xs:enumeration value=\"two_curved_run_stair\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcStateEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcStateEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcStateEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"readwrite\"/>\n\t\t\t<xs:enumeration value=\"readonly\"/>\n\t\t\t<xs:enumeration value=\"locked\"/>\n\t\t\t<xs:enumeration value=\"readwritelocked\"/>\n\t\t\t<xs:enumeration value=\"readonlylocked\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcStructuralCurveTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcStructuralCurveTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rigid_joined_member\"/>\n\t\t\t<xs:enumeration value=\"pin_joined_member\"/>\n\t\t\t<xs:enumeration value=\"cable\"/>\n\t\t\t<xs:enumeration value=\"tension_member\"/>\n\t\t\t<xs:enumeration value=\"compression_member\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcStructuralSurfaceTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcStructuralSurfaceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bending_element\"/>\n\t\t\t<xs:enumeration value=\"membrane_element\"/>\n\t\t\t<xs:enumeration value=\"shell\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSurfaceSide\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSurfaceSide\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSurfaceSide\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"positive\"/>\n\t\t\t<xs:enumeration value=\"negative\"/>\n\t\t\t<xs:enumeration value=\"both\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSurfaceTextureEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSurfaceTextureEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSurfaceTextureEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bump\"/>\n\t\t\t<xs:enumeration value=\"opacity\"/>\n\t\t\t<xs:enumeration value=\"reflection\"/>\n\t\t\t<xs:enumeration value=\"selfillumination\"/>\n\t\t\t<xs:enumeration value=\"shininess\"/>\n\t\t\t<xs:enumeration value=\"specular\"/>\n\t\t\t<xs:enumeration value=\"texture\"/>\n\t\t\t<xs:enumeration value=\"transparencymap\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSwitchingDeviceTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSwitchingDeviceTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSwitchingDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"contactor\"/>\n\t\t\t<xs:enumeration value=\"emergencystop\"/>\n\t\t\t<xs:enumeration value=\"starter\"/>\n\t\t\t<xs:enumeration value=\"switchdisconnector\"/>\n\t\t\t<xs:enumeration value=\"toggleswitch\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcTankTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTankTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcTankTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"preformed\"/>\n\t\t\t<xs:enumeration value=\"sectional\"/>\n\t\t\t<xs:enumeration value=\"expansion\"/>\n\t\t\t<xs:enumeration value=\"pressurevessel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcTendonTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTendonTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcTendonTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"strand\"/>\n\t\t\t<xs:enumeration value=\"wire\"/>\n\t\t\t<xs:enumeration value=\"bar\"/>\n\t\t\t<xs:enumeration value=\"coated\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcTextPath\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTextPath\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcTextPath\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"up\"/>\n\t\t\t<xs:enumeration value=\"down\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcThermalLoadSourceEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalLoadSourceEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcThermalLoadSourceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"people\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"equipment\"/>\n\t\t\t<xs:enumeration value=\"ventilationindoorair\"/>\n\t\t\t<xs:enumeration value=\"ventilationoutsideair\"/>\n\t\t\t<xs:enumeration value=\"recirculatedair\"/>\n\t\t\t<xs:enumeration value=\"exhaustair\"/>\n\t\t\t<xs:enumeration value=\"airexchangerate\"/>\n\t\t\t<xs:enumeration value=\"drybulbtemperature\"/>\n\t\t\t<xs:enumeration value=\"relativehumidity\"/>\n\t\t\t<xs:enumeration value=\"infiltration\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcThermalLoadTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalLoadTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcThermalLoadTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"sensible\"/>\n\t\t\t<xs:enumeration value=\"latent\"/>\n\t\t\t<xs:enumeration value=\"radiant\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcTimeSeriesDataTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeSeriesDataTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcTimeSeriesDataTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"continuous\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"discretebinary\"/>\n\t\t\t<xs:enumeration value=\"piecewisebinary\"/>\n\t\t\t<xs:enumeration value=\"piecewiseconstant\"/>\n\t\t\t<xs:enumeration value=\"piecewisecontinuous\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcTimeSeriesScheduleTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeSeriesScheduleTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcTimeSeriesScheduleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"annual\"/>\n\t\t\t<xs:enumeration value=\"monthly\"/>\n\t\t\t<xs:enumeration value=\"weekly\"/>\n\t\t\t<xs:enumeration value=\"daily\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcTransformerTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTransformerTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcTransformerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"current\"/>\n\t\t\t<xs:enumeration value=\"frequency\"/>\n\t\t\t<xs:enumeration value=\"voltage\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcTransitionCode\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTransitionCode\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcTransitionCode\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"discontinuous\"/>\n\t\t\t<xs:enumeration value=\"continuous\"/>\n\t\t\t<xs:enumeration value=\"contsamegradient\"/>\n\t\t\t<xs:enumeration value=\"contsamegradientsamecurvature\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcTransportElementTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTransportElementTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcTransportElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"elevator\"/>\n\t\t\t<xs:enumeration value=\"escalator\"/>\n\t\t\t<xs:enumeration value=\"movingwalkway\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcTrimmingPreference\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTrimmingPreference\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcTrimmingPreference\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cartesian\"/>\n\t\t\t<xs:enumeration value=\"parameter\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcTubeBundleTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTubeBundleTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcTubeBundleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"finned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcUnitEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcUnitEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcUnitEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"absorbeddoseunit\"/>\n\t\t\t<xs:enumeration value=\"amountofsubstanceunit\"/>\n\t\t\t<xs:enumeration value=\"areaunit\"/>\n\t\t\t<xs:enumeration value=\"doseequivalentunit\"/>\n\t\t\t<xs:enumeration value=\"electriccapacitanceunit\"/>\n\t\t\t<xs:enumeration value=\"electricchargeunit\"/>\n\t\t\t<xs:enumeration value=\"electricconductanceunit\"/>\n\t\t\t<xs:enumeration value=\"electriccurrentunit\"/>\n\t\t\t<xs:enumeration value=\"electricresistanceunit\"/>\n\t\t\t<xs:enumeration value=\"electricvoltageunit\"/>\n\t\t\t<xs:enumeration value=\"energyunit\"/>\n\t\t\t<xs:enumeration value=\"forceunit\"/>\n\t\t\t<xs:enumeration value=\"frequencyunit\"/>\n\t\t\t<xs:enumeration value=\"illuminanceunit\"/>\n\t\t\t<xs:enumeration value=\"inductanceunit\"/>\n\t\t\t<xs:enumeration value=\"lengthunit\"/>\n\t\t\t<xs:enumeration value=\"luminousfluxunit\"/>\n\t\t\t<xs:enumeration value=\"luminousintensityunit\"/>\n\t\t\t<xs:enumeration value=\"magneticfluxdensityunit\"/>\n\t\t\t<xs:enumeration value=\"magneticfluxunit\"/>\n\t\t\t<xs:enumeration value=\"massunit\"/>\n\t\t\t<xs:enumeration value=\"planeangleunit\"/>\n\t\t\t<xs:enumeration value=\"powerunit\"/>\n\t\t\t<xs:enumeration value=\"pressureunit\"/>\n\t\t\t<xs:enumeration value=\"radioactivityunit\"/>\n\t\t\t<xs:enumeration value=\"solidangleunit\"/>\n\t\t\t<xs:enumeration value=\"thermodynamictemperatureunit\"/>\n\t\t\t<xs:enumeration value=\"timeunit\"/>\n\t\t\t<xs:enumeration value=\"volumeunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcUnitaryEquipmentTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcUnitaryEquipmentTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcUnitaryEquipmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airhandler\"/>\n\t\t\t<xs:enumeration value=\"airconditioningunit\"/>\n\t\t\t<xs:enumeration value=\"splitsystem\"/>\n\t\t\t<xs:enumeration value=\"rooftopunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcValveTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcValveTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcValveTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airrelease\"/>\n\t\t\t<xs:enumeration value=\"antivacuum\"/>\n\t\t\t<xs:enumeration value=\"changeover\"/>\n\t\t\t<xs:enumeration value=\"check\"/>\n\t\t\t<xs:enumeration value=\"commissioning\"/>\n\t\t\t<xs:enumeration value=\"diverting\"/>\n\t\t\t<xs:enumeration value=\"drawoffcock\"/>\n\t\t\t<xs:enumeration value=\"doublecheck\"/>\n\t\t\t<xs:enumeration value=\"doubleregulating\"/>\n\t\t\t<xs:enumeration value=\"faucet\"/>\n\t\t\t<xs:enumeration value=\"flushing\"/>\n\t\t\t<xs:enumeration value=\"gascock\"/>\n\t\t\t<xs:enumeration value=\"gastap\"/>\n\t\t\t<xs:enumeration value=\"isolating\"/>\n\t\t\t<xs:enumeration value=\"mixing\"/>\n\t\t\t<xs:enumeration value=\"pressurereducing\"/>\n\t\t\t<xs:enumeration value=\"pressurerelief\"/>\n\t\t\t<xs:enumeration value=\"regulating\"/>\n\t\t\t<xs:enumeration value=\"safetycutoff\"/>\n\t\t\t<xs:enumeration value=\"steamtrap\"/>\n\t\t\t<xs:enumeration value=\"stopcock\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcVibrationIsolatorTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVibrationIsolatorTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcVibrationIsolatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compression\"/>\n\t\t\t<xs:enumeration value=\"spring\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcWallTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWallTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcWallTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"standard\"/>\n\t\t\t<xs:enumeration value=\"polygonal\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcWasteTerminalTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWasteTerminalTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcWasteTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floortrap\"/>\n\t\t\t<xs:enumeration value=\"floorwaste\"/>\n\t\t\t<xs:enumeration value=\"gullysump\"/>\n\t\t\t<xs:enumeration value=\"gullytrap\"/>\n\t\t\t<xs:enumeration value=\"greaseinterceptor\"/>\n\t\t\t<xs:enumeration value=\"oilinterceptor\"/>\n\t\t\t<xs:enumeration value=\"petrolinterceptor\"/>\n\t\t\t<xs:enumeration value=\"roofdrain\"/>\n\t\t\t<xs:enumeration value=\"wastedisposalunit\"/>\n\t\t\t<xs:enumeration value=\"wastetrap\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcWindowPanelOperationEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowPanelOperationEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcWindowPanelOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"sidehungrighthand\"/>\n\t\t\t<xs:enumeration value=\"sidehunglefthand\"/>\n\t\t\t<xs:enumeration value=\"tiltandturnrighthand\"/>\n\t\t\t<xs:enumeration value=\"tiltandturnlefthand\"/>\n\t\t\t<xs:enumeration value=\"tophung\"/>\n\t\t\t<xs:enumeration value=\"bottomhung\"/>\n\t\t\t<xs:enumeration value=\"pivothorizontal\"/>\n\t\t\t<xs:enumeration value=\"pivotvertical\"/>\n\t\t\t<xs:enumeration value=\"slidinghorizontal\"/>\n\t\t\t<xs:enumeration value=\"slidingvertical\"/>\n\t\t\t<xs:enumeration value=\"removablecasement\"/>\n\t\t\t<xs:enumeration value=\"fixedcasement\"/>\n\t\t\t<xs:enumeration value=\"otheroperation\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcWindowPanelPositionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowPanelPositionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcWindowPanelPositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"middle\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"bottom\"/>\n\t\t\t<xs:enumeration value=\"top\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcWindowStyleConstructionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowStyleConstructionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcWindowStyleConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aluminium\"/>\n\t\t\t<xs:enumeration value=\"high_grade_steel\"/>\n\t\t\t<xs:enumeration value=\"steel\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"aluminium_wood\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"other_construction\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcWindowStyleOperationEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowStyleOperationEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcWindowStyleOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_panel\"/>\n\t\t\t<xs:enumeration value=\"double_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"double_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_bottom\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_top\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_left\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_right\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcWorkControlTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWorkControlTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcWorkControlTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actual\"/>\n\t\t\t<xs:enumeration value=\"baseline\"/>\n\t\t\t<xs:enumeration value=\"planned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<!-- simple type declarations (for TYPE defined data type definitions) -->\n\t<xs:element name=\"IfcAbsorbedDoseMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAbsorbedDoseMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcAbsorbedDoseMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcAccelerationMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAccelerationMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcAccelerationMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcAmountOfSubstanceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAmountOfSubstanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcAmountOfSubstanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcAngularVelocityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAngularVelocityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcAngularVelocityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcAreaMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcAreaMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcBoolean\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBoolean\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcBoolean\">\n\t\t<xs:restriction base=\"xs:boolean\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcComplexNumber\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:complexContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcComplexNumber\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:complexContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:complexType name=\"IfcComplexNumber\">\n\t\t<xs:sequence>\n\t\t\t<xs:element ref=\"ex:double-wrapper\" minOccurs=\"2\" maxOccurs=\"2\"/>\n\t\t</xs:sequence>\n\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:double-wrapper\"/>\n\t\t<xs:attribute ref=\"ex:cType\" fixed=\"array\"/>\n\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompoundPlaneAngleMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:complexContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCompoundPlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:complexContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:complexType name=\"IfcCompoundPlaneAngleMeasure\">\n\t\t<xs:sequence>\n\t\t\t<xs:element ref=\"ex:long-wrapper\" minOccurs=\"3\" maxOccurs=\"3\"/>\n\t\t</xs:sequence>\n\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:long-wrapper\"/>\n\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\"/>\n\t\t<xs:attribute ref=\"ex:arraySize\" use=\"optional\"/>\n\t</xs:complexType>\n\t<xs:element name=\"IfcContextDependentMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcContextDependentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcContextDependentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcCountMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCountMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcCountMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcCurvatureMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCurvatureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcCurvatureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDayInMonthNumber\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDayInMonthNumber\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDayInMonthNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDaylightSavingHour\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDaylightSavingHour\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDaylightSavingHour\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDescriptiveMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDescriptiveMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDescriptiveMeasure\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDimensionCount\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDimensionCount\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDimensionCount\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDoseEquivalentMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDoseEquivalentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDoseEquivalentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcDynamicViscosityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDynamicViscosityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcDynamicViscosityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcElectricCapacitanceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCapacitanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcElectricCapacitanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcElectricChargeMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricChargeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcElectricChargeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcElectricConductanceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricConductanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcElectricConductanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcElectricCurrentMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcElectricCurrentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcElectricResistanceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricResistanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcElectricResistanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcElectricVoltageMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricVoltageMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcElectricVoltageMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcEnergyMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcEnergyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcForceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcFrequencyMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFrequencyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcFrequencyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcGloballyUniqueId\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcGloballyUniqueId\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcGloballyUniqueId\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:minLength value=\"22\"/>\n\t\t\t<xs:maxLength value=\"22\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcHeatFluxDensityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatFluxDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcHeatFluxDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcHeatingValueMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatingValueMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcHeatingValueMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcHourInDay\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHourInDay\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcHourInDay\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcIdentifier\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIdentifier\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcIdentifier\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcIlluminanceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIlluminanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcIlluminanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcInductanceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInductanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcInductanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcInteger\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInteger\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcInteger\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcIntegerCountRateMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIntegerCountRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcIntegerCountRateMeasure\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcIonConcentrationMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIonConcentrationMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcIonConcentrationMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcIsothermalMoistureCapacityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcIsothermalMoistureCapacityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcKinematicViscosityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcKinematicViscosityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcKinematicViscosityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcLabel\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLabel\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcLabel\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcLengthMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcLengthMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcLinearForceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcLinearForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcLinearMomentMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearMomentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcLinearMomentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcLinearStiffnessMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearStiffnessMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcLinearStiffnessMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcLinearVelocityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearVelocityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcLinearVelocityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcLogical\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLogical\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcLogical\">\n\t\t<xs:restriction base=\"ex:logical\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcLuminousFluxMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousFluxMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcLuminousFluxMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcLuminousIntensityDistributionMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityDistributionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcLuminousIntensityDistributionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcLuminousIntensityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcLuminousIntensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcMagneticFluxDensityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcMagneticFluxDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcMagneticFluxMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcMagneticFluxMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcMassDensityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcMassDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcMassFlowRateMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassFlowRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcMassFlowRateMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcMassMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcMassMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcMassPerLengthMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassPerLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcMassPerLengthMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcMinuteInHour\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMinuteInHour\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcMinuteInHour\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcModulusOfElasticityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfElasticityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcModulusOfElasticityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcModulusOfSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcMoistureDiffusivityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMoistureDiffusivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcMoistureDiffusivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcMolecularWeightMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMolecularWeightMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcMolecularWeightMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcMomentOfInertiaMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMomentOfInertiaMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcMomentOfInertiaMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcMonetaryMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMonetaryMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcMonetaryMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcMonthInYearNumber\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMonthInYearNumber\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcMonthInYearNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcNormalisedRatioMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNormalisedRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcNormalisedRatioMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcNumericMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNumericMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcNumericMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcPHMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPHMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcPHMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcParameterValue\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcParameterValue\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcParameterValue\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcPlanarForceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlanarForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcPlanarForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcPlaneAngleMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcPlaneAngleMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcPositiveLengthMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcPositivePlaneAngleMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositivePlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcPositivePlaneAngleMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcPlaneAngleMeasure\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcPositiveRatioMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcPowerMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPowerMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcPowerMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcPresentableText\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPresentableText\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcPresentableText\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcPressureMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPressureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcPressureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcRadioActivityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRadioActivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcRadioActivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcRatioMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcRatioMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcReal\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcReal\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcReal\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcRotationalFrequencyMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalFrequencyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcRotationalFrequencyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcRotationalMassMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalMassMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcRotationalMassMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcRotationalStiffnessMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalStiffnessMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcRotationalStiffnessMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSecondInMinute\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSecondInMinute\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSecondInMinute\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSectionModulusMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionModulusMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSectionModulusMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSectionalAreaIntegralMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionalAreaIntegralMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSectionalAreaIntegralMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcShearModulusMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcShearModulusMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcShearModulusMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSolidAngleMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSolidAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSolidAngleMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSoundPowerMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSoundPowerMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSoundPressureMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSoundPressureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSpecificHeatCapacityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecificHeatCapacityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSpecificHeatCapacityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSpecularExponent\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularExponent\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSpecularExponent\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcSpecularRoughness\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularRoughness\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcSpecularRoughness\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcTemperatureGradientMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureGradientMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcTemperatureGradientMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcText\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcText\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcText\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcTextAlignment\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTextAlignment\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcTextAlignment\">\n\t\t<xs:restriction base=\"ifc:IfcLabel\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcThermalAdmittanceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalAdmittanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcThermalAdmittanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcThermalConductivityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalConductivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcThermalConductivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcThermalExpansionCoefficientMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalExpansionCoefficientMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcThermalExpansionCoefficientMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcThermalResistanceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalResistanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcThermalResistanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcThermalTransmittanceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalTransmittanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcThermalTransmittanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermodynamicTemperatureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcThermodynamicTemperatureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcTimeMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcTimeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcTimeStamp\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeStamp\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcTimeStamp\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcTorqueMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTorqueMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcTorqueMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcVaporPermeabilityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVaporPermeabilityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcVaporPermeabilityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcVolumeMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcVolumeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcVolumetricFlowRateMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumetricFlowRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcVolumetricFlowRateMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcWarpingConstantMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingConstantMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcWarpingConstantMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcWarpingMomentMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingMomentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcWarpingMomentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcYearNumber\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcYearNumber\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:simpleType name=\"IfcYearNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n</xs:schema>\n"
  },
  {
    "path": "Source/RevitIFCTools/IFC2X3_TC1.exp",
    "content": "(*\nCopyright by:\nInternational Alliance for Interoperability, 1996-2007\n\nAll rights reserved. No part of this documentation may be\nreproduced, stored in a retrieval system, or transmitted\nin any form or by any means, without the prior written\npermission of the owner.\n\nContents:\nfull IFC object model EXPRESS definitions for the IFC2x Edition 3 Technical Corrigendum 1 release\n\n- express longform distribution\n- compiled for EXPRESS version 1 technical corrigendum 2\n\nIssue date:\nJuly 10, 2007\n\nDevelopment Team:\nModeling Support Group of the \nInternational Alliance for Interoperability\ncompiled by Thomas Liebich tl@aec3.com\n*)\n\nSCHEMA IFC2X3;\n\nTYPE IfcAbsorbedDoseMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAccelerationMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAmountOfSubstanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAngularVelocityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAreaMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcBoolean = BOOLEAN;\nEND_TYPE;\n\nTYPE IfcBoxAlignment = IfcLabel;\n WHERE\n\tWR1 : SELF IN ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right'];\nEND_TYPE;\n\nTYPE IfcComplexNumber = ARRAY [1:2] OF REAL;\nEND_TYPE;\n\nTYPE IfcCompoundPlaneAngleMeasure = LIST [3:4] OF INTEGER;\n WHERE\n\tWR1 : { -360 <= SELF[1] < 360 };\n\tWR2 : { -60 <= SELF[2] < 60 };\n\tWR3 : { -60 <= SELF[3] < 60 };\n\tWR4 : ((SELF[1] >= 0) AND (SELF[2] >= 0) AND (SELF[3] >= 0)) OR ((SELF[1] <= 0) AND (SELF[2] <= 0) AND (SELF[3] <= 0));\nEND_TYPE;\n\nTYPE IfcContextDependentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcCountMeasure = NUMBER;\nEND_TYPE;\n\nTYPE IfcCurvatureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcDayInMonthNumber = INTEGER;\nEND_TYPE;\n\nTYPE IfcDaylightSavingHour = INTEGER;\n WHERE\n\tWR1 : { 0 <= SELF <= 2 };\nEND_TYPE;\n\nTYPE IfcDescriptiveMeasure = STRING;\nEND_TYPE;\n\nTYPE IfcDimensionCount = INTEGER;\n WHERE\n\tWR1 : { 0 < SELF <= 3 };\nEND_TYPE;\n\nTYPE IfcDoseEquivalentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcDynamicViscosityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricCapacitanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricChargeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricConductanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricCurrentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricResistanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricVoltageMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcEnergyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcFontStyle = STRING;\n WHERE\n\tWR1 : SELF IN ['normal','italic','oblique'];\nEND_TYPE;\n\nTYPE IfcFontVariant = STRING;\n WHERE\n\tWR1 : SELF IN ['normal','small-caps'];\nEND_TYPE;\n\nTYPE IfcFontWeight = STRING;\n WHERE\n\tWR1 : SELF IN ['normal','small-caps','100','200','300','400','500','600','700','800','900'];\nEND_TYPE;\n\nTYPE IfcForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcFrequencyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcGloballyUniqueId = STRING(22) FIXED;\nEND_TYPE;\n\nTYPE IfcHeatFluxDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcHeatingValueMeasure = REAL;\n WHERE\n\tWR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcHourInDay = INTEGER;\n WHERE\n\tWR1 : { 0 <= SELF < 24 };\nEND_TYPE;\n\nTYPE IfcIdentifier = STRING;\nEND_TYPE;\n\nTYPE IfcIlluminanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcInductanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcInteger = INTEGER;\nEND_TYPE;\n\nTYPE IfcIntegerCountRateMeasure = INTEGER;\nEND_TYPE;\n\nTYPE IfcIonConcentrationMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcIsothermalMoistureCapacityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcKinematicViscosityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLabel = STRING;\nEND_TYPE;\n\nTYPE IfcLengthMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearMomentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearStiffnessMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearVelocityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLogical = LOGICAL;\nEND_TYPE;\n\nTYPE IfcLuminousFluxMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLuminousIntensityDistributionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLuminousIntensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMagneticFluxDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMagneticFluxMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassFlowRateMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassPerLengthMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMinuteInHour = INTEGER;\n WHERE\n\tWR1 : {0 <= SELF <= 59 };\nEND_TYPE;\n\nTYPE IfcModulusOfElasticityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfLinearSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfRotationalSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMoistureDiffusivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMolecularWeightMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMomentOfInertiaMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMonetaryMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMonthInYearNumber = INTEGER;\n WHERE\n\tWR1 : { 1<= SELF <= 12 };\nEND_TYPE;\n\nTYPE IfcNormalisedRatioMeasure = IfcRatioMeasure;\n WHERE\n\tWR1 : {0.0 <= SELF <= 1.0};\nEND_TYPE;\n\nTYPE IfcNumericMeasure = NUMBER;\nEND_TYPE;\n\nTYPE IfcPHMeasure = REAL;\n WHERE\n\tWR21 : {0.0 <= SELF <= 14.0};\nEND_TYPE;\n\nTYPE IfcParameterValue = REAL;\nEND_TYPE;\n\nTYPE IfcPlanarForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPlaneAngleMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPositiveLengthMeasure = IfcLengthMeasure;\n WHERE\n\tWR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcPositivePlaneAngleMeasure = IfcPlaneAngleMeasure;\n WHERE\n\tWR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcPositiveRatioMeasure = IfcRatioMeasure;\n WHERE\n\tWR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcPowerMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPresentableText = STRING;\nEND_TYPE;\n\nTYPE IfcPressureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRadioActivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRatioMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcReal = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalFrequencyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalMassMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalStiffnessMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSecondInMinute = REAL;\n WHERE\n\tWR1 : { 0. <= SELF < 60. };\nEND_TYPE;\n\nTYPE IfcSectionModulusMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSectionalAreaIntegralMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcShearModulusMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSolidAngleMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPowerMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPressureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSpecificHeatCapacityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSpecularExponent = REAL;\nEND_TYPE;\n\nTYPE IfcSpecularRoughness = REAL;\n WHERE\n\tWR1 : {0.0 <= SELF <= 1.0};\nEND_TYPE;\n\nTYPE IfcTemperatureGradientMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcText = STRING;\nEND_TYPE;\n\nTYPE IfcTextAlignment = STRING;\n WHERE\n\tWR1 : SELF IN ['left', 'right', 'center', 'justify'];\nEND_TYPE;\n\nTYPE IfcTextDecoration = STRING;\n WHERE\n\tWR1 : SELF IN ['none', 'underline', 'overline', 'line-through', 'blink'];\nEND_TYPE;\n\nTYPE IfcTextFontName = STRING;\nEND_TYPE;\n\nTYPE IfcTextTransformation = STRING;\n WHERE\n\tWR1 : SELF IN ['capitalize', 'uppercase', 'lowercase', 'none'];\nEND_TYPE;\n\nTYPE IfcThermalAdmittanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalConductivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalExpansionCoefficientMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalResistanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalTransmittanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermodynamicTemperatureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcTimeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcTimeStamp = INTEGER;\nEND_TYPE;\n\nTYPE IfcTorqueMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcVaporPermeabilityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcVolumeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcVolumetricFlowRateMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcWarpingConstantMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcWarpingMomentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcYearNumber = INTEGER;\nEND_TYPE;\n\nTYPE IfcActionSourceTypeEnum = ENUMERATION OF\n\t(DEAD_LOAD_G\n\t,COMPLETION_G1\n\t,LIVE_LOAD_Q\n\t,SNOW_S\n\t,WIND_W\n\t,PRESTRESSING_P\n\t,SETTLEMENT_U\n\t,TEMPERATURE_T\n\t,EARTHQUAKE_E\n\t,FIRE\n\t,IMPULSE\n\t,IMPACT\n\t,TRANSPORT\n\t,ERECTION\n\t,PROPPING\n\t,SYSTEM_IMPERFECTION\n\t,SHRINKAGE\n\t,CREEP\n\t,LACK_OF_FIT\n\t,BUOYANCY\n\t,ICE\n\t,CURRENT\n\t,WAVE\n\t,RAIN\n\t,BRAKES\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActionTypeEnum = ENUMERATION OF\n\t(PERMANENT_G\n\t,VARIABLE_Q\n\t,EXTRAORDINARY_A\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActuatorTypeEnum = ENUMERATION OF\n\t(ELECTRICACTUATOR\n\t,HANDOPERATEDACTUATOR\n\t,HYDRAULICACTUATOR\n\t,PNEUMATICACTUATOR\n\t,THERMOSTATICACTUATOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAddressTypeEnum = ENUMERATION OF\n\t(OFFICE\n\t,SITE\n\t,HOME\n\t,DISTRIBUTIONPOINT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcAheadOrBehind = ENUMERATION OF\n\t(AHEAD\n\t,BEHIND);\nEND_TYPE;\n\nTYPE IfcAirTerminalBoxTypeEnum = ENUMERATION OF\n\t(CONSTANTFLOW\n\t,VARIABLEFLOWPRESSUREDEPENDANT\n\t,VARIABLEFLOWPRESSUREINDEPENDANT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAirTerminalTypeEnum = ENUMERATION OF\n\t(GRILLE\n\t,REGISTER\n\t,DIFFUSER\n\t,EYEBALL\n\t,IRIS\n\t,LINEARGRILLE\n\t,LINEARDIFFUSER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAirToAirHeatRecoveryTypeEnum = ENUMERATION OF\n\t(FIXEDPLATECOUNTERFLOWEXCHANGER\n\t,FIXEDPLATECROSSFLOWEXCHANGER\n\t,FIXEDPLATEPARALLELFLOWEXCHANGER\n\t,ROTARYWHEEL\n\t,RUNAROUNDCOILLOOP\n\t,HEATPIPE\n\t,TWINTOWERENTHALPYRECOVERYLOOPS\n\t,THERMOSIPHONSEALEDTUBEHEATEXCHANGERS\n\t,THERMOSIPHONCOILTYPEHEATEXCHANGERS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAlarmTypeEnum = ENUMERATION OF\n\t(BELL\n\t,BREAKGLASSBUTTON\n\t,LIGHT\n\t,MANUALPULLBOX\n\t,SIREN\n\t,WHISTLE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAnalysisModelTypeEnum = ENUMERATION OF\n\t(IN_PLANE_LOADING_2D\n\t,OUT_PLANE_LOADING_2D\n\t,LOADING_3D\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAnalysisTheoryTypeEnum = ENUMERATION OF\n\t(FIRST_ORDER_THEORY\n\t,SECOND_ORDER_THEORY\n\t,THIRD_ORDER_THEORY\n\t,FULL_NONLINEAR_THEORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcArithmeticOperatorEnum = ENUMERATION OF\n\t(ADD\n\t,DIVIDE\n\t,MULTIPLY\n\t,SUBTRACT);\nEND_TYPE;\n\nTYPE IfcAssemblyPlaceEnum = ENUMERATION OF\n\t(SITE\n\t,FACTORY\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBSplineCurveForm = ENUMERATION OF\n\t(POLYLINE_FORM\n\t,CIRCULAR_ARC\n\t,ELLIPTIC_ARC\n\t,PARABOLIC_ARC\n\t,HYPERBOLIC_ARC\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcBeamTypeEnum = ENUMERATION OF\n\t(BEAM\n\t,JOIST\n\t,LINTEL\n\t,T_BEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBenchmarkEnum = ENUMERATION OF\n\t(GREATERTHAN\n\t,GREATERTHANOREQUALTO\n\t,LESSTHAN\n\t,LESSTHANOREQUALTO\n\t,EQUALTO\n\t,NOTEQUALTO);\nEND_TYPE;\n\nTYPE IfcBoilerTypeEnum = ENUMERATION OF\n\t(WATER\n\t,STEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBooleanOperator = ENUMERATION OF\n\t(UNION\n\t,INTERSECTION\n\t,DIFFERENCE);\nEND_TYPE;\n\nTYPE IfcBuildingElementProxyTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableCarrierFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CROSS\n\t,REDUCER\n\t,TEE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableCarrierSegmentTypeEnum = ENUMERATION OF\n\t(CABLELADDERSEGMENT\n\t,CABLETRAYSEGMENT\n\t,CABLETRUNKINGSEGMENT\n\t,CONDUITSEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableSegmentTypeEnum = ENUMERATION OF\n\t(CABLESEGMENT\n\t,CONDUCTORSEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcChangeActionEnum = ENUMERATION OF\n\t(NOCHANGE\n\t,MODIFIED\n\t,ADDED\n\t,DELETED\n\t,MODIFIEDADDED\n\t,MODIFIEDDELETED);\nEND_TYPE;\n\nTYPE IfcChillerTypeEnum = ENUMERATION OF\n\t(AIRCOOLED\n\t,WATERCOOLED\n\t,HEATRECOVERY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoilTypeEnum = ENUMERATION OF\n\t(DXCOOLINGCOIL\n\t,WATERCOOLINGCOIL\n\t,STEAMHEATINGCOIL\n\t,WATERHEATINGCOIL\n\t,ELECTRICHEATINGCOIL\n\t,GASHEATINGCOIL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcColumnTypeEnum = ENUMERATION OF\n\t(COLUMN\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCompressorTypeEnum = ENUMERATION OF\n\t(DYNAMIC\n\t,RECIPROCATING\n\t,ROTARY\n\t,SCROLL\n\t,TROCHOIDAL\n\t,SINGLESTAGE\n\t,BOOSTER\n\t,OPENTYPE\n\t,HERMETIC\n\t,SEMIHERMETIC\n\t,WELDEDSHELLHERMETIC\n\t,ROLLINGPISTON\n\t,ROTARYVANE\n\t,SINGLESCREW\n\t,TWINSCREW\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCondenserTypeEnum = ENUMERATION OF\n\t(WATERCOOLEDSHELLTUBE\n\t,WATERCOOLEDSHELLCOIL\n\t,WATERCOOLEDTUBEINTUBE\n\t,WATERCOOLEDBRAZEDPLATE\n\t,AIRCOOLED\n\t,EVAPORATIVECOOLED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConnectionTypeEnum = ENUMERATION OF\n\t(ATPATH\n\t,ATSTART\n\t,ATEND\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConstraintEnum = ENUMERATION OF\n\t(HARD\n\t,SOFT\n\t,ADVISORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcControllerTypeEnum = ENUMERATION OF\n\t(FLOATING\n\t,PROPORTIONAL\n\t,PROPORTIONALINTEGRAL\n\t,PROPORTIONALINTEGRALDERIVATIVE\n\t,TIMEDTWOPOSITION\n\t,TWOPOSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCooledBeamTypeEnum = ENUMERATION OF\n\t(ACTIVE\n\t,PASSIVE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoolingTowerTypeEnum = ENUMERATION OF\n\t(NATURALDRAFT\n\t,MECHANICALINDUCEDDRAFT\n\t,MECHANICALFORCEDDRAFT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCostScheduleTypeEnum = ENUMERATION OF\n\t(BUDGET\n\t,COSTPLAN\n\t,ESTIMATE\n\t,TENDER\n\t,PRICEDBILLOFQUANTITIES\n\t,UNPRICEDBILLOFQUANTITIES\n\t,SCHEDULEOFRATES\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoveringTypeEnum = ENUMERATION OF\n\t(CEILING\n\t,FLOORING\n\t,CLADDING\n\t,ROOFING\n\t,INSULATION\n\t,MEMBRANE\n\t,SLEEVING\n\t,WRAPPING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCurrencyEnum = ENUMERATION OF\n\t(AED\n\t,AES\n\t,ATS\n\t,AUD\n\t,BBD\n\t,BEG\n\t,BGL\n\t,BHD\n\t,BMD\n\t,BND\n\t,BRL\n\t,BSD\n\t,BWP\n\t,BZD\n\t,CAD\n\t,CBD\n\t,CHF\n\t,CLP\n\t,CNY\n\t,CYS\n\t,CZK\n\t,DDP\n\t,DEM\n\t,DKK\n\t,EGL\n\t,EST\n\t,EUR\n\t,FAK\n\t,FIM\n\t,FJD\n\t,FKP\n\t,FRF\n\t,GBP\n\t,GIP\n\t,GMD\n\t,GRX\n\t,HKD\n\t,HUF\n\t,ICK\n\t,IDR\n\t,ILS\n\t,INR\n\t,IRP\n\t,ITL\n\t,JMD\n\t,JOD\n\t,JPY\n\t,KES\n\t,KRW\n\t,KWD\n\t,KYD\n\t,LKR\n\t,LUF\n\t,MTL\n\t,MUR\n\t,MXN\n\t,MYR\n\t,NLG\n\t,NZD\n\t,OMR\n\t,PGK\n\t,PHP\n\t,PKR\n\t,PLN\n\t,PTN\n\t,QAR\n\t,RUR\n\t,SAR\n\t,SCR\n\t,SEK\n\t,SGD\n\t,SKP\n\t,THB\n\t,TRL\n\t,TTD\n\t,TWD\n\t,USD\n\t,VEB\n\t,VND\n\t,XEU\n\t,ZAR\n\t,ZWD\n\t,NOK);\nEND_TYPE;\n\nTYPE IfcCurtainWallTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDamperTypeEnum = ENUMERATION OF\n\t(CONTROLDAMPER\n\t,FIREDAMPER\n\t,SMOKEDAMPER\n\t,FIRESMOKEDAMPER\n\t,BACKDRAFTDAMPER\n\t,RELIEFDAMPER\n\t,BLASTDAMPER\n\t,GRAVITYDAMPER\n\t,GRAVITYRELIEFDAMPER\n\t,BALANCINGDAMPER\n\t,FUMEHOODEXHAUST\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDataOriginEnum = ENUMERATION OF\n\t(MEASURED\n\t,PREDICTED\n\t,SIMULATED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDerivedUnitEnum = ENUMERATION OF\n\t(ANGULARVELOCITYUNIT\n\t,COMPOUNDPLANEANGLEUNIT\n\t,DYNAMICVISCOSITYUNIT\n\t,HEATFLUXDENSITYUNIT\n\t,INTEGERCOUNTRATEUNIT\n\t,ISOTHERMALMOISTURECAPACITYUNIT\n\t,KINEMATICVISCOSITYUNIT\n\t,LINEARVELOCITYUNIT\n\t,MASSDENSITYUNIT\n\t,MASSFLOWRATEUNIT\n\t,MOISTUREDIFFUSIVITYUNIT\n\t,MOLECULARWEIGHTUNIT\n\t,SPECIFICHEATCAPACITYUNIT\n\t,THERMALADMITTANCEUNIT\n\t,THERMALCONDUCTANCEUNIT\n\t,THERMALRESISTANCEUNIT\n\t,THERMALTRANSMITTANCEUNIT\n\t,VAPORPERMEABILITYUNIT\n\t,VOLUMETRICFLOWRATEUNIT\n\t,ROTATIONALFREQUENCYUNIT\n\t,TORQUEUNIT\n\t,MOMENTOFINERTIAUNIT\n\t,LINEARMOMENTUNIT\n\t,LINEARFORCEUNIT\n\t,PLANARFORCEUNIT\n\t,MODULUSOFELASTICITYUNIT\n\t,SHEARMODULUSUNIT\n\t,LINEARSTIFFNESSUNIT\n\t,ROTATIONALSTIFFNESSUNIT\n\t,MODULUSOFSUBGRADEREACTIONUNIT\n\t,ACCELERATIONUNIT\n\t,CURVATUREUNIT\n\t,HEATINGVALUEUNIT\n\t,IONCONCENTRATIONUNIT\n\t,LUMINOUSINTENSITYDISTRIBUTIONUNIT\n\t,MASSPERLENGTHUNIT\n\t,MODULUSOFLINEARSUBGRADEREACTIONUNIT\n\t,MODULUSOFROTATIONALSUBGRADEREACTIONUNIT\n\t,PHUNIT\n\t,ROTATIONALMASSUNIT\n\t,SECTIONAREAINTEGRALUNIT\n\t,SECTIONMODULUSUNIT\n\t,SOUNDPOWERUNIT\n\t,SOUNDPRESSUREUNIT\n\t,TEMPERATUREGRADIENTUNIT\n\t,THERMALEXPANSIONCOEFFICIENTUNIT\n\t,WARPINGCONSTANTUNIT\n\t,WARPINGMOMENTUNIT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcDimensionExtentUsage = ENUMERATION OF\n\t(ORIGIN\n\t,TARGET);\nEND_TYPE;\n\nTYPE IfcDirectionSenseEnum = ENUMERATION OF\n\t(POSITIVE\n\t,NEGATIVE);\nEND_TYPE;\n\nTYPE IfcDistributionChamberElementTypeEnum = ENUMERATION OF\n\t(FORMEDDUCT\n\t,INSPECTIONCHAMBER\n\t,INSPECTIONPIT\n\t,MANHOLE\n\t,METERCHAMBER\n\t,SUMP\n\t,TRENCH\n\t,VALVECHAMBER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDocumentConfidentialityEnum = ENUMERATION OF\n\t(PUBLIC\n\t,RESTRICTED\n\t,CONFIDENTIAL\n\t,PERSONAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDocumentStatusEnum = ENUMERATION OF\n\t(DRAFT\n\t,FINALDRAFT\n\t,FINAL\n\t,REVISION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorPanelOperationEnum = ENUMERATION OF\n\t(SWINGING\n\t,DOUBLE_ACTING\n\t,SLIDING\n\t,FOLDING\n\t,REVOLVING\n\t,ROLLINGUP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorPanelPositionEnum = ENUMERATION OF\n\t(LEFT\n\t,MIDDLE\n\t,RIGHT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorStyleConstructionEnum = ENUMERATION OF\n\t(ALUMINIUM\n\t,HIGH_GRADE_STEEL\n\t,STEEL\n\t,WOOD\n\t,ALUMINIUM_WOOD\n\t,ALUMINIUM_PLASTIC\n\t,PLASTIC\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorStyleOperationEnum = ENUMERATION OF\n\t(SINGLE_SWING_LEFT\n\t,SINGLE_SWING_RIGHT\n\t,DOUBLE_DOOR_SINGLE_SWING\n\t,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT\n\t,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT\n\t,DOUBLE_SWING_LEFT\n\t,DOUBLE_SWING_RIGHT\n\t,DOUBLE_DOOR_DOUBLE_SWING\n\t,SLIDING_TO_LEFT\n\t,SLIDING_TO_RIGHT\n\t,DOUBLE_DOOR_SLIDING\n\t,FOLDING_TO_LEFT\n\t,FOLDING_TO_RIGHT\n\t,DOUBLE_DOOR_FOLDING\n\t,REVOLVING\n\t,ROLLINGUP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CONNECTOR\n\t,ENTRY\n\t,EXIT\n\t,JUNCTION\n\t,OBSTRUCTION\n\t,TRANSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctSegmentTypeEnum = ENUMERATION OF\n\t(RIGIDSEGMENT\n\t,FLEXIBLESEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctSilencerTypeEnum = ENUMERATION OF\n\t(FLATOVAL\n\t,RECTANGULAR\n\t,ROUND\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricApplianceTypeEnum = ENUMERATION OF\n\t(COMPUTER\n\t,DIRECTWATERHEATER\n\t,DISHWASHER\n\t,ELECTRICCOOKER\n\t,ELECTRICHEATER\n\t,FACSIMILE\n\t,FREESTANDINGFAN\n\t,FREEZER\n\t,FRIDGE_FREEZER\n\t,HANDDRYER\n\t,INDIRECTWATERHEATER\n\t,MICROWAVE\n\t,PHOTOCOPIER\n\t,PRINTER\n\t,REFRIGERATOR\n\t,RADIANTHEATER\n\t,SCANNER\n\t,TELEPHONE\n\t,TUMBLEDRYER\n\t,TV\n\t,VENDINGMACHINE\n\t,WASHINGMACHINE\n\t,WATERHEATER\n\t,WATERCOOLER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricCurrentEnum = ENUMERATION OF\n\t(ALTERNATING\n\t,DIRECT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricDistributionPointFunctionEnum = ENUMERATION OF\n\t(ALARMPANEL\n\t,CONSUMERUNIT\n\t,CONTROLPANEL\n\t,DISTRIBUTIONBOARD\n\t,GASDETECTORPANEL\n\t,INDICATORPANEL\n\t,MIMICPANEL\n\t,MOTORCONTROLCENTRE\n\t,SWITCHBOARD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricFlowStorageDeviceTypeEnum = ENUMERATION OF\n\t(BATTERY\n\t,CAPACITORBANK\n\t,HARMONICFILTER\n\t,INDUCTORBANK\n\t,UPS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricGeneratorTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricHeaterTypeEnum = ENUMERATION OF\n\t(ELECTRICPOINTHEATER\n\t,ELECTRICCABLEHEATER\n\t,ELECTRICMATHEATER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricMotorTypeEnum = ENUMERATION OF\n\t(DC\n\t,INDUCTION\n\t,POLYPHASE\n\t,RELUCTANCESYNCHRONOUS\n\t,SYNCHRONOUS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricTimeControlTypeEnum = ENUMERATION OF\n\t(TIMECLOCK\n\t,TIMEDELAY\n\t,RELAY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElementAssemblyTypeEnum = ENUMERATION OF\n\t(ACCESSORY_ASSEMBLY\n\t,ARCH\n\t,BEAM_GRID\n\t,BRACED_FRAME\n\t,GIRDER\n\t,REINFORCEMENT_UNIT\n\t,RIGID_FRAME\n\t,SLAB_FIELD\n\t,TRUSS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElementCompositionEnum = ENUMERATION OF\n\t(COMPLEX\n\t,ELEMENT\n\t,PARTIAL);\nEND_TYPE;\n\nTYPE IfcEnergySequenceEnum = ENUMERATION OF\n\t(PRIMARY\n\t,SECONDARY\n\t,TERTIARY\n\t,AUXILIARY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEnvironmentalImpactCategoryEnum = ENUMERATION OF\n\t(COMBINEDVALUE\n\t,DISPOSAL\n\t,EXTRACTION\n\t,INSTALLATION\n\t,MANUFACTURE\n\t,TRANSPORTATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEvaporativeCoolerTypeEnum = ENUMERATION OF\n\t(DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER\n\t,DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER\n\t,DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER\n\t,DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER\n\t,DIRECTEVAPORATIVEAIRWASHER\n\t,INDIRECTEVAPORATIVEPACKAGEAIRCOOLER\n\t,INDIRECTEVAPORATIVEWETCOIL\n\t,INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER\n\t,INDIRECTDIRECTCOMBINATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEvaporatorTypeEnum = ENUMERATION OF\n\t(DIRECTEXPANSIONSHELLANDTUBE\n\t,DIRECTEXPANSIONTUBEINTUBE\n\t,DIRECTEXPANSIONBRAZEDPLATE\n\t,FLOODEDSHELLANDTUBE\n\t,SHELLANDCOIL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFanTypeEnum = ENUMERATION OF\n\t(CENTRIFUGALFORWARDCURVED\n\t,CENTRIFUGALRADIAL\n\t,CENTRIFUGALBACKWARDINCLINEDCURVED\n\t,CENTRIFUGALAIRFOIL\n\t,TUBEAXIAL\n\t,VANEAXIAL\n\t,PROPELLORAXIAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFilterTypeEnum = ENUMERATION OF\n\t(AIRPARTICLEFILTER\n\t,ODORFILTER\n\t,OILFILTER\n\t,STRAINER\n\t,WATERFILTER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFireSuppressionTerminalTypeEnum = ENUMERATION OF\n\t(BREECHINGINLET\n\t,FIREHYDRANT\n\t,HOSEREEL\n\t,SPRINKLER\n\t,SPRINKLERDEFLECTOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowDirectionEnum = ENUMERATION OF\n\t(SOURCE\n\t,SINK\n\t,SOURCEANDSINK\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowInstrumentTypeEnum = ENUMERATION OF\n\t(PRESSUREGAUGE\n\t,THERMOMETER\n\t,AMMETER\n\t,FREQUENCYMETER\n\t,POWERFACTORMETER\n\t,PHASEANGLEMETER\n\t,VOLTMETER_PEAK\n\t,VOLTMETER_RMS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowMeterTypeEnum = ENUMERATION OF\n\t(ELECTRICMETER\n\t,ENERGYMETER\n\t,FLOWMETER\n\t,GASMETER\n\t,OILMETER\n\t,WATERMETER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFootingTypeEnum = ENUMERATION OF\n\t(FOOTING_BEAM\n\t,PAD_FOOTING\n\t,PILE_CAP\n\t,STRIP_FOOTING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGasTerminalTypeEnum = ENUMERATION OF\n\t(GASAPPLIANCE\n\t,GASBOOSTER\n\t,GASBURNER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGeometricProjectionEnum = ENUMERATION OF\n\t(GRAPH_VIEW\n\t,SKETCH_VIEW\n\t,MODEL_VIEW\n\t,PLAN_VIEW\n\t,REFLECTED_PLAN_VIEW\n\t,SECTION_VIEW\n\t,ELEVATION_VIEW\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGlobalOrLocalEnum = ENUMERATION OF\n\t(GLOBAL_COORDS\n\t,LOCAL_COORDS);\nEND_TYPE;\n\nTYPE IfcHeatExchangerTypeEnum = ENUMERATION OF\n\t(PLATE\n\t,SHELLANDTUBE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcHumidifierTypeEnum = ENUMERATION OF\n\t(STEAMINJECTION\n\t,ADIABATICAIRWASHER\n\t,ADIABATICPAN\n\t,ADIABATICWETTEDELEMENT\n\t,ADIABATICATOMIZING\n\t,ADIABATICULTRASONIC\n\t,ADIABATICRIGIDMEDIA\n\t,ADIABATICCOMPRESSEDAIRNOZZLE\n\t,ASSISTEDELECTRIC\n\t,ASSISTEDNATURALGAS\n\t,ASSISTEDPROPANE\n\t,ASSISTEDBUTANE\n\t,ASSISTEDSTEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcInternalOrExternalEnum = ENUMERATION OF\n\t(INTERNAL\n\t,EXTERNAL\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcInventoryTypeEnum = ENUMERATION OF\n\t(ASSETINVENTORY\n\t,SPACEINVENTORY\n\t,FURNITUREINVENTORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcJunctionBoxTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLampTypeEnum = ENUMERATION OF\n\t(COMPACTFLUORESCENT\n\t,FLUORESCENT\n\t,HIGHPRESSUREMERCURY\n\t,HIGHPRESSURESODIUM\n\t,METALHALIDE\n\t,TUNGSTENFILAMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLayerSetDirectionEnum = ENUMERATION OF\n\t(AXIS1\n\t,AXIS2\n\t,AXIS3);\nEND_TYPE;\n\nTYPE IfcLightDistributionCurveEnum = ENUMERATION OF\n\t(TYPE_A\n\t,TYPE_B\n\t,TYPE_C\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLightEmissionSourceEnum = ENUMERATION OF\n\t(COMPACTFLUORESCENT\n\t,FLUORESCENT\n\t,HIGHPRESSUREMERCURY\n\t,HIGHPRESSURESODIUM\n\t,LIGHTEMITTINGDIODE\n\t,LOWPRESSURESODIUM\n\t,LOWVOLTAGEHALOGEN\n\t,MAINVOLTAGEHALOGEN\n\t,METALHALIDE\n\t,TUNGSTENFILAMENT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLightFixtureTypeEnum = ENUMERATION OF\n\t(POINTSOURCE\n\t,DIRECTIONSOURCE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLoadGroupTypeEnum = ENUMERATION OF\n\t(LOAD_GROUP\n\t,LOAD_CASE\n\t,LOAD_COMBINATION_GROUP\n\t,LOAD_COMBINATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLogicalOperatorEnum = ENUMERATION OF\n\t(LOGICALAND\n\t,LOGICALOR);\nEND_TYPE;\n\nTYPE IfcMemberTypeEnum = ENUMERATION OF\n\t(BRACE\n\t,CHORD\n\t,COLLAR\n\t,MEMBER\n\t,MULLION\n\t,PLATE\n\t,POST\n\t,PURLIN\n\t,RAFTER\n\t,STRINGER\n\t,STRUT\n\t,STUD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcMotorConnectionTypeEnum = ENUMERATION OF\n\t(BELTDRIVE\n\t,COUPLING\n\t,DIRECTDRIVE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcNullStyle = ENUMERATION OF\n\t(NULL);\nEND_TYPE;\n\nTYPE IfcObjectTypeEnum = ENUMERATION OF\n\t(PRODUCT\n\t,PROCESS\n\t,CONTROL\n\t,RESOURCE\n\t,ACTOR\n\t,GROUP\n\t,PROJECT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcObjectiveEnum = ENUMERATION OF\n\t(CODECOMPLIANCE\n\t,DESIGNINTENT\n\t,HEALTHANDSAFETY\n\t,REQUIREMENT\n\t,SPECIFICATION\n\t,TRIGGERCONDITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcOccupantTypeEnum = ENUMERATION OF\n\t(ASSIGNEE\n\t,ASSIGNOR\n\t,LESSEE\n\t,LESSOR\n\t,LETTINGAGENT\n\t,OWNER\n\t,TENANT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcOutletTypeEnum = ENUMERATION OF\n\t(AUDIOVISUALOUTLET\n\t,COMMUNICATIONSOUTLET\n\t,POWEROUTLET\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPermeableCoveringOperationEnum = ENUMERATION OF\n\t(GRILL\n\t,LOUVER\n\t,SCREEN\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPhysicalOrVirtualEnum = ENUMERATION OF\n\t(PHYSICAL\n\t,VIRTUAL\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPileConstructionEnum = ENUMERATION OF\n\t(CAST_IN_PLACE\n\t,COMPOSITE\n\t,PRECAST_CONCRETE\n\t,PREFAB_STEEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPileTypeEnum = ENUMERATION OF\n\t(COHESION\n\t,FRICTION\n\t,SUPPORT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPipeFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CONNECTOR\n\t,ENTRY\n\t,EXIT\n\t,JUNCTION\n\t,OBSTRUCTION\n\t,TRANSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPipeSegmentTypeEnum = ENUMERATION OF\n\t(FLEXIBLESEGMENT\n\t,RIGIDSEGMENT\n\t,GUTTER\n\t,SPOOL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPlateTypeEnum = ENUMERATION OF\n\t(CURTAIN_PANEL\n\t,SHEET\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProcedureTypeEnum = ENUMERATION OF\n\t(ADVICE_CAUTION\n\t,ADVICE_NOTE\n\t,ADVICE_WARNING\n\t,CALIBRATION\n\t,DIAGNOSTIC\n\t,SHUTDOWN\n\t,STARTUP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProfileTypeEnum = ENUMERATION OF\n\t(CURVE\n\t,AREA);\nEND_TYPE;\n\nTYPE IfcProjectOrderRecordTypeEnum = ENUMERATION OF\n\t(CHANGE\n\t,MAINTENANCE\n\t,MOVE\n\t,PURCHASE\n\t,WORK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProjectOrderTypeEnum = ENUMERATION OF\n\t(CHANGEORDER\n\t,MAINTENANCEWORKORDER\n\t,MOVEORDER\n\t,PURCHASEORDER\n\t,WORKORDER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProjectedOrTrueLengthEnum = ENUMERATION OF\n\t(PROJECTED_LENGTH\n\t,TRUE_LENGTH);\nEND_TYPE;\n\nTYPE IfcPropertySourceEnum = ENUMERATION OF\n\t(DESIGN\n\t,DESIGNMAXIMUM\n\t,DESIGNMINIMUM\n\t,SIMULATED\n\t,ASBUILT\n\t,COMMISSIONING\n\t,MEASURED\n\t,USERDEFINED\n\t,NOTKNOWN);\nEND_TYPE;\n\nTYPE IfcProtectiveDeviceTypeEnum = ENUMERATION OF\n\t(FUSEDISCONNECTOR\n\t,CIRCUITBREAKER\n\t,EARTHFAILUREDEVICE\n\t,RESIDUALCURRENTCIRCUITBREAKER\n\t,RESIDUALCURRENTSWITCH\n\t,VARISTOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPumpTypeEnum = ENUMERATION OF\n\t(CIRCULATOR\n\t,ENDSUCTION\n\t,SPLITCASE\n\t,VERTICALINLINE\n\t,VERTICALTURBINE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRailingTypeEnum = ENUMERATION OF\n\t(HANDRAIL\n\t,GUARDRAIL\n\t,BALUSTRADE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRampFlightTypeEnum = ENUMERATION OF\n\t(STRAIGHT\n\t,SPIRAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRampTypeEnum = ENUMERATION OF\n\t(STRAIGHT_RUN_RAMP\n\t,TWO_STRAIGHT_RUN_RAMP\n\t,QUARTER_TURN_RAMP\n\t,TWO_QUARTER_TURN_RAMP\n\t,HALF_TURN_RAMP\n\t,SPIRAL_RAMP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReflectanceMethodEnum = ENUMERATION OF\n\t(BLINN\n\t,FLAT\n\t,GLASS\n\t,MATT\n\t,METAL\n\t,MIRROR\n\t,PHONG\n\t,PLASTIC\n\t,STRAUSS\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReinforcingBarRoleEnum = ENUMERATION OF\n\t(MAIN\n\t,SHEAR\n\t,LIGATURE\n\t,STUD\n\t,PUNCHING\n\t,EDGE\n\t,RING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReinforcingBarSurfaceEnum = ENUMERATION OF\n\t(PLAIN\n\t,TEXTURED);\nEND_TYPE;\n\nTYPE IfcResourceConsumptionEnum = ENUMERATION OF\n\t(CONSUMED\n\t,PARTIALLYCONSUMED\n\t,NOTCONSUMED\n\t,OCCUPIED\n\t,PARTIALLYOCCUPIED\n\t,NOTOCCUPIED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRibPlateDirectionEnum = ENUMERATION OF\n\t(DIRECTION_X\n\t,DIRECTION_Y);\nEND_TYPE;\n\nTYPE IfcRoleEnum = ENUMERATION OF\n\t(SUPPLIER\n\t,MANUFACTURER\n\t,CONTRACTOR\n\t,SUBCONTRACTOR\n\t,ARCHITECT\n\t,STRUCTURALENGINEER\n\t,COSTENGINEER\n\t,CLIENT\n\t,BUILDINGOWNER\n\t,BUILDINGOPERATOR\n\t,MECHANICALENGINEER\n\t,ELECTRICALENGINEER\n\t,PROJECTMANAGER\n\t,FACILITIESMANAGER\n\t,CIVILENGINEER\n\t,COMISSIONINGENGINEER\n\t,ENGINEER\n\t,OWNER\n\t,CONSULTANT\n\t,CONSTRUCTIONMANAGER\n\t,FIELDCONSTRUCTIONMANAGER\n\t,RESELLER\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcRoofTypeEnum = ENUMERATION OF\n\t(FLAT_ROOF\n\t,SHED_ROOF\n\t,GABLE_ROOF\n\t,HIP_ROOF\n\t,HIPPED_GABLE_ROOF\n\t,GAMBREL_ROOF\n\t,MANSARD_ROOF\n\t,BARREL_ROOF\n\t,RAINBOW_ROOF\n\t,BUTTERFLY_ROOF\n\t,PAVILION_ROOF\n\t,DOME_ROOF\n\t,FREEFORM\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSIPrefix = ENUMERATION OF\n\t(EXA\n\t,PETA\n\t,TERA\n\t,GIGA\n\t,MEGA\n\t,KILO\n\t,HECTO\n\t,DECA\n\t,DECI\n\t,CENTI\n\t,MILLI\n\t,MICRO\n\t,NANO\n\t,PICO\n\t,FEMTO\n\t,ATTO);\nEND_TYPE;\n\nTYPE IfcSIUnitName = ENUMERATION OF\n\t(AMPERE\n\t,BECQUEREL\n\t,CANDELA\n\t,COULOMB\n\t,CUBIC_METRE\n\t,DEGREE_CELSIUS\n\t,FARAD\n\t,GRAM\n\t,GRAY\n\t,HENRY\n\t,HERTZ\n\t,JOULE\n\t,KELVIN\n\t,LUMEN\n\t,LUX\n\t,METRE\n\t,MOLE\n\t,NEWTON\n\t,OHM\n\t,PASCAL\n\t,RADIAN\n\t,SECOND\n\t,SIEMENS\n\t,SIEVERT\n\t,SQUARE_METRE\n\t,STERADIAN\n\t,TESLA\n\t,VOLT\n\t,WATT\n\t,WEBER);\nEND_TYPE;\n\nTYPE IfcSanitaryTerminalTypeEnum = ENUMERATION OF\n\t(BATH\n\t,BIDET\n\t,CISTERN\n\t,SHOWER\n\t,SINK\n\t,SANITARYFOUNTAIN\n\t,TOILETPAN\n\t,URINAL\n\t,WASHHANDBASIN\n\t,WCSEAT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSectionTypeEnum = ENUMERATION OF\n\t(UNIFORM\n\t,TAPERED);\nEND_TYPE;\n\nTYPE IfcSensorTypeEnum = ENUMERATION OF\n\t(CO2SENSOR\n\t,FIRESENSOR\n\t,FLOWSENSOR\n\t,GASSENSOR\n\t,HEATSENSOR\n\t,HUMIDITYSENSOR\n\t,LIGHTSENSOR\n\t,MOISTURESENSOR\n\t,MOVEMENTSENSOR\n\t,PRESSURESENSOR\n\t,SMOKESENSOR\n\t,SOUNDSENSOR\n\t,TEMPERATURESENSOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSequenceEnum = ENUMERATION OF\n\t(START_START\n\t,START_FINISH\n\t,FINISH_START\n\t,FINISH_FINISH\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcServiceLifeFactorTypeEnum = ENUMERATION OF\n\t(A_QUALITYOFCOMPONENTS\n\t,B_DESIGNLEVEL\n\t,C_WORKEXECUTIONLEVEL\n\t,D_INDOORENVIRONMENT\n\t,E_OUTDOORENVIRONMENT\n\t,F_INUSECONDITIONS\n\t,G_MAINTENANCELEVEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcServiceLifeTypeEnum = ENUMERATION OF\n\t(ACTUALSERVICELIFE\n\t,EXPECTEDSERVICELIFE\n\t,OPTIMISTICREFERENCESERVICELIFE\n\t,PESSIMISTICREFERENCESERVICELIFE\n\t,REFERENCESERVICELIFE);\nEND_TYPE;\n\nTYPE IfcSlabTypeEnum = ENUMERATION OF\n\t(FLOOR\n\t,ROOF\n\t,LANDING\n\t,BASESLAB\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSoundScaleEnum = ENUMERATION OF\n\t(DBA\n\t,DBB\n\t,DBC\n\t,NC\n\t,NR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSpaceHeaterTypeEnum = ENUMERATION OF\n\t(SECTIONALRADIATOR\n\t,PANELRADIATOR\n\t,TUBULARRADIATOR\n\t,CONVECTOR\n\t,BASEBOARDHEATER\n\t,FINNEDTUBEUNIT\n\t,UNITHEATER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSpaceTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStackTerminalTypeEnum = ENUMERATION OF\n\t(BIRDCAGE\n\t,COWL\n\t,RAINWATERHOPPER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStairFlightTypeEnum = ENUMERATION OF\n\t(STRAIGHT\n\t,WINDER\n\t,SPIRAL\n\t,CURVED\n\t,FREEFORM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStairTypeEnum = ENUMERATION OF\n\t(STRAIGHT_RUN_STAIR\n\t,TWO_STRAIGHT_RUN_STAIR\n\t,QUARTER_WINDING_STAIR\n\t,QUARTER_TURN_STAIR\n\t,HALF_WINDING_STAIR\n\t,HALF_TURN_STAIR\n\t,TWO_QUARTER_WINDING_STAIR\n\t,TWO_QUARTER_TURN_STAIR\n\t,THREE_QUARTER_WINDING_STAIR\n\t,THREE_QUARTER_TURN_STAIR\n\t,SPIRAL_STAIR\n\t,DOUBLE_RETURN_STAIR\n\t,CURVED_RUN_STAIR\n\t,TWO_CURVED_RUN_STAIR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStateEnum = ENUMERATION OF\n\t(READWRITE\n\t,READONLY\n\t,LOCKED\n\t,READWRITELOCKED\n\t,READONLYLOCKED);\nEND_TYPE;\n\nTYPE IfcStructuralCurveTypeEnum = ENUMERATION OF\n\t(RIGID_JOINED_MEMBER\n\t,PIN_JOINED_MEMBER\n\t,CABLE\n\t,TENSION_MEMBER\n\t,COMPRESSION_MEMBER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStructuralSurfaceTypeEnum = ENUMERATION OF\n\t(BENDING_ELEMENT\n\t,MEMBRANE_ELEMENT\n\t,SHELL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSurfaceSide = ENUMERATION OF\n\t(POSITIVE\n\t,NEGATIVE\n\t,BOTH);\nEND_TYPE;\n\nTYPE IfcSurfaceTextureEnum = ENUMERATION OF\n\t(BUMP\n\t,OPACITY\n\t,REFLECTION\n\t,SELFILLUMINATION\n\t,SHININESS\n\t,SPECULAR\n\t,TEXTURE\n\t,TRANSPARENCYMAP\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSwitchingDeviceTypeEnum = ENUMERATION OF\n\t(CONTACTOR\n\t,EMERGENCYSTOP\n\t,STARTER\n\t,SWITCHDISCONNECTOR\n\t,TOGGLESWITCH\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTankTypeEnum = ENUMERATION OF\n\t(PREFORMED\n\t,SECTIONAL\n\t,EXPANSION\n\t,PRESSUREVESSEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTendonTypeEnum = ENUMERATION OF\n\t(STRAND\n\t,WIRE\n\t,BAR\n\t,COATED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTextPath = ENUMERATION OF\n\t(LEFT\n\t,RIGHT\n\t,UP\n\t,DOWN);\nEND_TYPE;\n\nTYPE IfcThermalLoadSourceEnum = ENUMERATION OF\n\t(PEOPLE\n\t,LIGHTING\n\t,EQUIPMENT\n\t,VENTILATIONINDOORAIR\n\t,VENTILATIONOUTSIDEAIR\n\t,RECIRCULATEDAIR\n\t,EXHAUSTAIR\n\t,AIREXCHANGERATE\n\t,DRYBULBTEMPERATURE\n\t,RELATIVEHUMIDITY\n\t,INFILTRATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcThermalLoadTypeEnum = ENUMERATION OF\n\t(SENSIBLE\n\t,LATENT\n\t,RADIANT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTimeSeriesDataTypeEnum = ENUMERATION OF\n\t(CONTINUOUS\n\t,DISCRETE\n\t,DISCRETEBINARY\n\t,PIECEWISEBINARY\n\t,PIECEWISECONSTANT\n\t,PIECEWISECONTINUOUS\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTimeSeriesScheduleTypeEnum = ENUMERATION OF\n\t(ANNUAL\n\t,MONTHLY\n\t,WEEKLY\n\t,DAILY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTransformerTypeEnum = ENUMERATION OF\n\t(CURRENT\n\t,FREQUENCY\n\t,VOLTAGE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTransitionCode = ENUMERATION OF\n\t(DISCONTINUOUS\n\t,CONTINUOUS\n\t,CONTSAMEGRADIENT\n\t,CONTSAMEGRADIENTSAMECURVATURE);\nEND_TYPE;\n\nTYPE IfcTransportElementTypeEnum = ENUMERATION OF\n\t(ELEVATOR\n\t,ESCALATOR\n\t,MOVINGWALKWAY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTrimmingPreference = ENUMERATION OF\n\t(CARTESIAN\n\t,PARAMETER\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcTubeBundleTypeEnum = ENUMERATION OF\n\t(FINNED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcUnitEnum = ENUMERATION OF\n\t(ABSORBEDDOSEUNIT\n\t,AMOUNTOFSUBSTANCEUNIT\n\t,AREAUNIT\n\t,DOSEEQUIVALENTUNIT\n\t,ELECTRICCAPACITANCEUNIT\n\t,ELECTRICCHARGEUNIT\n\t,ELECTRICCONDUCTANCEUNIT\n\t,ELECTRICCURRENTUNIT\n\t,ELECTRICRESISTANCEUNIT\n\t,ELECTRICVOLTAGEUNIT\n\t,ENERGYUNIT\n\t,FORCEUNIT\n\t,FREQUENCYUNIT\n\t,ILLUMINANCEUNIT\n\t,INDUCTANCEUNIT\n\t,LENGTHUNIT\n\t,LUMINOUSFLUXUNIT\n\t,LUMINOUSINTENSITYUNIT\n\t,MAGNETICFLUXDENSITYUNIT\n\t,MAGNETICFLUXUNIT\n\t,MASSUNIT\n\t,PLANEANGLEUNIT\n\t,POWERUNIT\n\t,PRESSUREUNIT\n\t,RADIOACTIVITYUNIT\n\t,SOLIDANGLEUNIT\n\t,THERMODYNAMICTEMPERATUREUNIT\n\t,TIMEUNIT\n\t,VOLUMEUNIT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcUnitaryEquipmentTypeEnum = ENUMERATION OF\n\t(AIRHANDLER\n\t,AIRCONDITIONINGUNIT\n\t,SPLITSYSTEM\n\t,ROOFTOPUNIT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcValveTypeEnum = ENUMERATION OF\n\t(AIRRELEASE\n\t,ANTIVACUUM\n\t,CHANGEOVER\n\t,CHECK\n\t,COMMISSIONING\n\t,DIVERTING\n\t,DRAWOFFCOCK\n\t,DOUBLECHECK\n\t,DOUBLEREGULATING\n\t,FAUCET\n\t,FLUSHING\n\t,GASCOCK\n\t,GASTAP\n\t,ISOLATING\n\t,MIXING\n\t,PRESSUREREDUCING\n\t,PRESSURERELIEF\n\t,REGULATING\n\t,SAFETYCUTOFF\n\t,STEAMTRAP\n\t,STOPCOCK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcVibrationIsolatorTypeEnum = ENUMERATION OF\n\t(COMPRESSION\n\t,SPRING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWallTypeEnum = ENUMERATION OF\n\t(STANDARD\n\t,POLYGONAL\n\t,SHEAR\n\t,ELEMENTEDWALL\n\t,PLUMBINGWALL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWasteTerminalTypeEnum = ENUMERATION OF\n\t(FLOORTRAP\n\t,FLOORWASTE\n\t,GULLYSUMP\n\t,GULLYTRAP\n\t,GREASEINTERCEPTOR\n\t,OILINTERCEPTOR\n\t,PETROLINTERCEPTOR\n\t,ROOFDRAIN\n\t,WASTEDISPOSALUNIT\n\t,WASTETRAP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowPanelOperationEnum = ENUMERATION OF\n\t(SIDEHUNGRIGHTHAND\n\t,SIDEHUNGLEFTHAND\n\t,TILTANDTURNRIGHTHAND\n\t,TILTANDTURNLEFTHAND\n\t,TOPHUNG\n\t,BOTTOMHUNG\n\t,PIVOTHORIZONTAL\n\t,PIVOTVERTICAL\n\t,SLIDINGHORIZONTAL\n\t,SLIDINGVERTICAL\n\t,REMOVABLECASEMENT\n\t,FIXEDCASEMENT\n\t,OTHEROPERATION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowPanelPositionEnum = ENUMERATION OF\n\t(LEFT\n\t,MIDDLE\n\t,RIGHT\n\t,BOTTOM\n\t,TOP\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowStyleConstructionEnum = ENUMERATION OF\n\t(ALUMINIUM\n\t,HIGH_GRADE_STEEL\n\t,STEEL\n\t,WOOD\n\t,ALUMINIUM_WOOD\n\t,PLASTIC\n\t,OTHER_CONSTRUCTION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowStyleOperationEnum = ENUMERATION OF\n\t(SINGLE_PANEL\n\t,DOUBLE_PANEL_VERTICAL\n\t,DOUBLE_PANEL_HORIZONTAL\n\t,TRIPLE_PANEL_VERTICAL\n\t,TRIPLE_PANEL_BOTTOM\n\t,TRIPLE_PANEL_TOP\n\t,TRIPLE_PANEL_LEFT\n\t,TRIPLE_PANEL_RIGHT\n\t,TRIPLE_PANEL_HORIZONTAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWorkControlTypeEnum = ENUMERATION OF\n\t(ACTUAL\n\t,BASELINE\n\t,PLANNED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActorSelect = SELECT\n\t(IfcOrganization\n\t,IfcPerson\n\t,IfcPersonAndOrganization);\nEND_TYPE;\n\nTYPE IfcAppliedValueSelect = SELECT\n\t(IfcRatioMeasure\n\t,IfcMeasureWithUnit\n\t,IfcMonetaryMeasure);\nEND_TYPE;\n\nTYPE IfcAxis2Placement = SELECT\n\t(IfcAxis2Placement2D\n\t,IfcAxis2Placement3D);\nEND_TYPE;\n\nTYPE IfcBooleanOperand = SELECT\n\t(IfcSolidModel\n\t,IfcHalfSpaceSolid\n\t,IfcBooleanResult\n\t,IfcCsgPrimitive3D);\nEND_TYPE;\n\nTYPE IfcCharacterStyleSelect = SELECT\n\t(IfcTextStyleForDefinedFont);\nEND_TYPE;\n\nTYPE IfcClassificationNotationSelect = SELECT\n\t(IfcClassificationNotation\n\t,IfcClassificationReference);\nEND_TYPE;\n\nTYPE IfcColour = SELECT\n\t(IfcColourSpecification\n\t,IfcPreDefinedColour);\nEND_TYPE;\n\nTYPE IfcColourOrFactor = SELECT\n\t(IfcColourRgb\n\t,IfcNormalisedRatioMeasure);\nEND_TYPE;\n\nTYPE IfcConditionCriterionSelect = SELECT\n\t(IfcLabel\n\t,IfcMeasureWithUnit);\nEND_TYPE;\n\nTYPE IfcCsgSelect = SELECT\n\t(IfcBooleanResult\n\t,IfcCsgPrimitive3D);\nEND_TYPE;\n\nTYPE IfcCurveFontOrScaledCurveFontSelect = SELECT\n\t(IfcCurveStyleFontSelect\n\t,IfcCurveStyleFontAndScaling);\nEND_TYPE;\n\nTYPE IfcCurveOrEdgeCurve = SELECT\n\t(IfcBoundedCurve\n\t,IfcEdgeCurve);\nEND_TYPE;\n\nTYPE IfcCurveStyleFontSelect = SELECT\n\t(IfcPreDefinedCurveFont\n\t,IfcCurveStyleFont);\nEND_TYPE;\n\nTYPE IfcDateTimeSelect = SELECT\n\t(IfcCalendarDate\n\t,IfcLocalTime\n\t,IfcDateAndTime);\nEND_TYPE;\n\nTYPE IfcDefinedSymbolSelect = SELECT\n\t(IfcPreDefinedSymbol\n\t,IfcExternallyDefinedSymbol);\nEND_TYPE;\n\nTYPE IfcDerivedMeasureValue = SELECT\n\t(IfcVolumetricFlowRateMeasure\n\t,IfcTimeStamp\n\t,IfcThermalTransmittanceMeasure\n\t,IfcThermalResistanceMeasure\n\t,IfcThermalAdmittanceMeasure\n\t,IfcPressureMeasure\n\t,IfcPowerMeasure\n\t,IfcMassFlowRateMeasure\n\t,IfcMassDensityMeasure\n\t,IfcLinearVelocityMeasure\n\t,IfcKinematicViscosityMeasure\n\t,IfcIntegerCountRateMeasure\n\t,IfcHeatFluxDensityMeasure\n\t,IfcFrequencyMeasure\n\t,IfcEnergyMeasure\n\t,IfcElectricVoltageMeasure\n\t,IfcDynamicViscosityMeasure\n\t,IfcCompoundPlaneAngleMeasure\n\t,IfcAngularVelocityMeasure\n\t,IfcThermalConductivityMeasure\n\t,IfcMolecularWeightMeasure\n\t,IfcVaporPermeabilityMeasure\n\t,IfcMoistureDiffusivityMeasure\n\t,IfcIsothermalMoistureCapacityMeasure\n\t,IfcSpecificHeatCapacityMeasure\n\t,IfcMonetaryMeasure\n\t,IfcMagneticFluxDensityMeasure\n\t,IfcMagneticFluxMeasure\n\t,IfcLuminousFluxMeasure\n\t,IfcForceMeasure\n\t,IfcInductanceMeasure\n\t,IfcIlluminanceMeasure\n\t,IfcElectricResistanceMeasure\n\t,IfcElectricConductanceMeasure\n\t,IfcElectricChargeMeasure\n\t,IfcDoseEquivalentMeasure\n\t,IfcElectricCapacitanceMeasure\n\t,IfcAbsorbedDoseMeasure\n\t,IfcRadioActivityMeasure\n\t,IfcRotationalFrequencyMeasure\n\t,IfcTorqueMeasure\n\t,IfcAccelerationMeasure\n\t,IfcLinearForceMeasure\n\t,IfcLinearStiffnessMeasure\n\t,IfcModulusOfSubgradeReactionMeasure\n\t,IfcModulusOfElasticityMeasure\n\t,IfcMomentOfInertiaMeasure\n\t,IfcPlanarForceMeasure\n\t,IfcRotationalStiffnessMeasure\n\t,IfcShearModulusMeasure\n\t,IfcLinearMomentMeasure\n\t,IfcLuminousIntensityDistributionMeasure\n\t,IfcCurvatureMeasure\n\t,IfcMassPerLengthMeasure\n\t,IfcModulusOfLinearSubgradeReactionMeasure\n\t,IfcModulusOfRotationalSubgradeReactionMeasure\n\t,IfcRotationalMassMeasure\n\t,IfcSectionalAreaIntegralMeasure\n\t,IfcSectionModulusMeasure\n\t,IfcTemperatureGradientMeasure\n\t,IfcThermalExpansionCoefficientMeasure\n\t,IfcWarpingConstantMeasure\n\t,IfcWarpingMomentMeasure\n\t,IfcSoundPowerMeasure\n\t,IfcSoundPressureMeasure\n\t,IfcHeatingValueMeasure\n\t,IfcPHMeasure\n\t,IfcIonConcentrationMeasure);\nEND_TYPE;\n\nTYPE IfcDocumentSelect = SELECT\n\t(IfcDocumentReference\n\t,IfcDocumentInformation);\nEND_TYPE;\n\nTYPE IfcDraughtingCalloutElement = SELECT\n\t(IfcAnnotationCurveOccurrence\n\t,IfcAnnotationTextOccurrence\n\t,IfcAnnotationSymbolOccurrence);\nEND_TYPE;\n\nTYPE IfcFillAreaStyleTileShapeSelect = SELECT\n\t(IfcFillAreaStyleTileSymbolWithStyle);\nEND_TYPE;\n\nTYPE IfcFillStyleSelect = SELECT\n\t(IfcFillAreaStyleHatching\n\t,IfcFillAreaStyleTiles\n\t,IfcColour\n\t,IfcExternallyDefinedHatchStyle);\nEND_TYPE;\n\nTYPE IfcGeometricSetSelect = SELECT\n\t(IfcPoint\n\t,IfcCurve\n\t,IfcSurface);\nEND_TYPE;\n\nTYPE IfcHatchLineDistanceSelect = SELECT\n\t(IfcOneDirectionRepeatFactor\n\t,IfcPositiveLengthMeasure);\nEND_TYPE;\n\nTYPE IfcLayeredItem = SELECT\n\t(IfcRepresentationItem\n\t,IfcRepresentation);\nEND_TYPE;\n\nTYPE IfcLibrarySelect = SELECT\n\t(IfcLibraryReference\n\t,IfcLibraryInformation);\nEND_TYPE;\n\nTYPE IfcLightDistributionDataSourceSelect = SELECT\n\t(IfcExternalReference\n\t,IfcLightIntensityDistribution);\nEND_TYPE;\n\nTYPE IfcMaterialSelect = SELECT\n\t(IfcMaterial\n\t,IfcMaterialList\n\t,IfcMaterialLayerSetUsage\n\t,IfcMaterialLayerSet\n\t,IfcMaterialLayer);\nEND_TYPE;\n\nTYPE IfcMeasureValue = SELECT\n\t(IfcVolumeMeasure\n\t,IfcTimeMeasure\n\t,IfcThermodynamicTemperatureMeasure\n\t,IfcSolidAngleMeasure\n\t,IfcPositiveRatioMeasure\n\t,IfcRatioMeasure\n\t,IfcPositivePlaneAngleMeasure\n\t,IfcPlaneAngleMeasure\n\t,IfcParameterValue\n\t,IfcNumericMeasure\n\t,IfcMassMeasure\n\t,IfcPositiveLengthMeasure\n\t,IfcLengthMeasure\n\t,IfcElectricCurrentMeasure\n\t,IfcDescriptiveMeasure\n\t,IfcCountMeasure\n\t,IfcContextDependentMeasure\n\t,IfcAreaMeasure\n\t,IfcAmountOfSubstanceMeasure\n\t,IfcLuminousIntensityMeasure\n\t,IfcNormalisedRatioMeasure\n\t,IfcComplexNumber);\nEND_TYPE;\n\nTYPE IfcMetricValueSelect = SELECT\n\t(IfcDateTimeSelect\n\t,IfcMeasureWithUnit\n\t,IfcTable\n\t,IfcText\n\t,IfcTimeSeries\n\t,IfcCostValue);\nEND_TYPE;\n\nTYPE IfcObjectReferenceSelect = SELECT\n\t(IfcMaterial\n\t,IfcPerson\n\t,IfcDateAndTime\n\t,IfcMaterialList\n\t,IfcOrganization\n\t,IfcCalendarDate\n\t,IfcLocalTime\n\t,IfcPersonAndOrganization\n\t,IfcMaterialLayer\n\t,IfcExternalReference\n\t,IfcTimeSeries\n\t,IfcAddress\n\t,IfcAppliedValue);\nEND_TYPE;\n\nTYPE IfcOrientationSelect = SELECT\n\t(IfcPlaneAngleMeasure\n\t,IfcDirection);\nEND_TYPE;\n\nTYPE IfcPointOrVertexPoint = SELECT\n\t(IfcPoint\n\t,IfcVertexPoint);\nEND_TYPE;\n\nTYPE IfcPresentationStyleSelect = SELECT\n\t(IfcNullStyle\n\t,IfcCurveStyle\n\t,IfcSymbolStyle\n\t,IfcFillAreaStyle\n\t,IfcTextStyle\n\t,IfcSurfaceStyle);\nEND_TYPE;\n\nTYPE IfcShell = SELECT\n\t(IfcClosedShell\n\t,IfcOpenShell);\nEND_TYPE;\n\nTYPE IfcSimpleValue = SELECT\n\t(IfcInteger\n\t,IfcReal\n\t,IfcBoolean\n\t,IfcIdentifier\n\t,IfcText\n\t,IfcLabel\n\t,IfcLogical);\nEND_TYPE;\n\nTYPE IfcSizeSelect = SELECT\n\t(IfcRatioMeasure\n\t,IfcLengthMeasure\n\t,IfcDescriptiveMeasure\n\t,IfcPositiveLengthMeasure\n\t,IfcNormalisedRatioMeasure\n\t,IfcPositiveRatioMeasure);\nEND_TYPE;\n\nTYPE IfcSpecularHighlightSelect = SELECT\n\t(IfcSpecularExponent\n\t,IfcSpecularRoughness);\nEND_TYPE;\n\nTYPE IfcStructuralActivityAssignmentSelect = SELECT\n\t(IfcStructuralItem\n\t,IfcElement);\nEND_TYPE;\n\nTYPE IfcSurfaceOrFaceSurface = SELECT\n\t(IfcSurface\n\t,IfcFaceSurface\n\t,IfcFaceBasedSurfaceModel);\nEND_TYPE;\n\nTYPE IfcSurfaceStyleElementSelect = SELECT\n\t(IfcSurfaceStyleShading\n\t,IfcSurfaceStyleLighting\n\t,IfcSurfaceStyleWithTextures\n\t,IfcExternallyDefinedSurfaceStyle\n\t,IfcSurfaceStyleRefraction);\nEND_TYPE;\n\nTYPE IfcSymbolStyleSelect = SELECT\n\t(IfcColour);\nEND_TYPE;\n\nTYPE IfcTextFontSelect = SELECT\n\t(IfcPreDefinedTextFont\n\t,IfcExternallyDefinedTextFont);\nEND_TYPE;\n\nTYPE IfcTextStyleSelect = SELECT\n\t(IfcTextStyleWithBoxCharacteristics\n\t,IfcTextStyleTextModel);\nEND_TYPE;\n\nTYPE IfcTrimmingSelect = SELECT\n\t(IfcCartesianPoint\n\t,IfcParameterValue);\nEND_TYPE;\n\nTYPE IfcUnit = SELECT\n\t(IfcDerivedUnit\n\t,IfcNamedUnit\n\t,IfcMonetaryUnit);\nEND_TYPE;\n\nTYPE IfcValue = SELECT\n\t(IfcMeasureValue\n\t,IfcSimpleValue\n\t,IfcDerivedMeasureValue);\nEND_TYPE;\n\nTYPE IfcVectorOrDirection = SELECT\n\t(IfcDirection\n\t,IfcVector);\nEND_TYPE;\n\nENTITY Ifc2DCompositeCurve\n SUBTYPE OF (IfcCompositeCurve);\n WHERE\n\tWR1 : SELF\\IfcCompositeCurve.ClosedCurve;\n\tWR2 : SELF\\IfcCurve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcActionRequest\n SUBTYPE OF (IfcControl);\n\tRequestID : IfcIdentifier;\n UNIQUE\n\tUR2 : RequestID;\nEND_ENTITY;\n\nENTITY IfcActor\n SUPERTYPE OF (ONEOF\n\t(IfcOccupant))\n SUBTYPE OF (IfcObject);\n\tTheActor : IfcActorSelect;\n INVERSE\n\tIsActingUpon : SET [0:?] OF IfcRelAssignsToActor FOR RelatingActor;\nEND_ENTITY;\n\nENTITY IfcActorRole;\n\tRole : IfcRoleEnum;\n\tUserDefinedRole : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n WHERE\n\tWR1 : (Role <> IfcRoleEnum.USERDEFINED) OR\n            ((Role = IfcRoleEnum.USERDEFINED) AND\n              EXISTS(SELF.UserDefinedRole));\nEND_ENTITY;\n\nENTITY IfcActuatorType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcActuatorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcAddress\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPostalAddress\n\t,IfcTelecomAddress));\n\tPurpose : OPTIONAL IfcAddressTypeEnum;\n\tDescription : OPTIONAL IfcText;\n\tUserDefinedPurpose : OPTIONAL IfcLabel;\n INVERSE\n\tOfPerson : SET [0:?] OF IfcPerson FOR Addresses;\n\tOfOrganization : SET [0:?] OF IfcOrganization FOR Addresses;\n WHERE\n\tWR1 : (NOT(EXISTS(Purpose))) OR\n            ((Purpose <> IfcAddressTypeEnum.USERDEFINED) OR\n            ((Purpose = IfcAddressTypeEnum.USERDEFINED) AND\n              EXISTS(SELF.UserDefinedPurpose)));\nEND_ENTITY;\n\nENTITY IfcAirTerminalBoxType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcAirTerminalBoxTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcAirTerminalBoxTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcAirTerminalBoxTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAirTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcAirTerminalTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcAirTerminalTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcAirTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAirToAirHeatRecoveryType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcAirToAirHeatRecoveryTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAlarmType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcAlarmTypeEnum;\nEND_ENTITY;\n\nENTITY IfcAngularDimension\n SUBTYPE OF (IfcDimensionCurveDirectedCallout);\nEND_ENTITY;\n\nENTITY IfcAnnotation\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\nEND_ENTITY;\n\nENTITY IfcAnnotationCurveOccurrence\n SUPERTYPE OF (ONEOF\n\t(IfcDimensionCurve\n\t,IfcProjectionCurve))\n SUBTYPE OF (IfcAnnotationOccurrence);\n WHERE\n\tWR31 : NOT(EXISTS(SELF\\IfcStyledItem.Item)) OR\n             ('IFC2X3.IFCCURVE' IN TYPEOF (SELF\\IfcStyledItem.Item));\nEND_ENTITY;\n\nENTITY IfcAnnotationFillArea\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOuterBoundary : IfcCurve;\n\tInnerBoundaries : OPTIONAL SET [1:?] OF IfcCurve;\nEND_ENTITY;\n\nENTITY IfcAnnotationFillAreaOccurrence\n SUBTYPE OF (IfcAnnotationOccurrence);\n\tFillStyleTarget : OPTIONAL IfcPoint;\n\tGlobalOrLocal : OPTIONAL IfcGlobalOrLocalEnum;\n WHERE\n\tWR31 : NOT(EXISTS(SELF\\IfcStyledItem.Item)) OR\n             ('IFC2X3.IFCANNOTATIONFILLAREA' IN TYPEOF (SELF\\IfcStyledItem.Item));\nEND_ENTITY;\n\nENTITY IfcAnnotationOccurrence\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAnnotationCurveOccurrence\n\t,IfcAnnotationFillAreaOccurrence\n\t,IfcAnnotationSurfaceOccurrence\n\t,IfcAnnotationSymbolOccurrence\n\t,IfcAnnotationTextOccurrence))\n SUBTYPE OF (IfcStyledItem);\nEND_ENTITY;\n\nENTITY IfcAnnotationSurface\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tItem : IfcGeometricRepresentationItem;\n\tTextureCoordinates : OPTIONAL IfcTextureCoordinate;\n WHERE\n\tWR01 : SIZEOF([\n               'IFC2X3.IFCSURFACE',\n               'IFC2X3.IFCSHELLBASEDSURFACEMODEL',\n               'IFC2X3.IFCFACEBASEDSURFACEMODEL',\n               'IFC2X3.IFCSOLIDMODEL',\n               'IFC2X3.IFCBOOLEANRESULT',\n               'IFC2X3.IFCCSGPRIMITIVE3D'] \n              * TYPEOF(Item)\n               ) >= 1;\nEND_ENTITY;\n\nENTITY IfcAnnotationSurfaceOccurrence\n SUBTYPE OF (IfcAnnotationOccurrence);\n WHERE\n\tWR31 : NOT(EXISTS(SELF\\IfcStyledItem.Item)) OR \n             (SIZEOF(\n              ['IFC2X3.IFCSURFACE',\n               'IFC2X3.IFCFACEBASEDSURFACEMODEL',\n               'IFC2X3.IFCSHELLBASEDSURFACEMODEL',\n               'IFC2X3.IFCSOLIDMODEL'] *\n              TYPEOF(SELF\\IfcStyledItem.Item)) > 0);\nEND_ENTITY;\n\nENTITY IfcAnnotationSymbolOccurrence\n SUPERTYPE OF (ONEOF\n\t(IfcTerminatorSymbol))\n SUBTYPE OF (IfcAnnotationOccurrence);\n WHERE\n\tWR31 : NOT(EXISTS(SELF\\IfcStyledItem.Item)) OR\n             ('IFC2X3.IFCDEFINEDSYMBOL' IN TYPEOF (SELF\\IfcStyledItem.Item));\nEND_ENTITY;\n\nENTITY IfcAnnotationTextOccurrence\n SUBTYPE OF (IfcAnnotationOccurrence);\n WHERE\n\tWR31 : NOT(EXISTS(SELF\\IfcStyledItem.Item)) OR\n             ('IFC2X3.IFCTEXTLITERAL' IN TYPEOF (SELF\\IfcStyledItem.Item));\nEND_ENTITY;\n\nENTITY IfcApplication;\n\tApplicationDeveloper : IfcOrganization;\n\tVersion : IfcLabel;\n\tApplicationFullName : IfcLabel;\n\tApplicationIdentifier : IfcIdentifier;\n UNIQUE\n\tUR1 : ApplicationIdentifier;\n\tUR2 : ApplicationFullName, Version;\nEND_ENTITY;\n\nENTITY IfcAppliedValue\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCostValue\n\t,IfcEnvironmentalImpactValue));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tAppliedValue : OPTIONAL IfcAppliedValueSelect;\n\tUnitBasis : OPTIONAL IfcMeasureWithUnit;\n\tApplicableDate : OPTIONAL IfcDateTimeSelect;\n\tFixedUntilDate : OPTIONAL IfcDateTimeSelect;\n INVERSE\n\tValuesReferenced : SET [0:?] OF IfcReferencesValueDocument FOR ReferencingValues;\n\tValueOfComponents : SET [0:?] OF IfcAppliedValueRelationship FOR ComponentOfTotal;\n\tIsComponentIn : SET [0:?] OF IfcAppliedValueRelationship FOR Components;\n WHERE\n\tWR1 : EXISTS (AppliedValue) OR \n            EXISTS (ValueOfComponents);\nEND_ENTITY;\n\nENTITY IfcAppliedValueRelationship;\n\tComponentOfTotal : IfcAppliedValue;\n\tComponents : SET [1:?] OF IfcAppliedValue;\n\tArithmeticOperator : IfcArithmeticOperatorEnum;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcApproval;\n\tDescription : OPTIONAL IfcText;\n\tApprovalDateTime : IfcDateTimeSelect;\n\tApprovalStatus : OPTIONAL IfcLabel;\n\tApprovalLevel : OPTIONAL IfcLabel;\n\tApprovalQualifier : OPTIONAL IfcText;\n\tName : IfcLabel;\n\tIdentifier : IfcIdentifier;\n INVERSE\n\tActors : SET [0:?] OF IfcApprovalActorRelationship FOR Approval;\n\tIsRelatedWith : SET [0:?] OF IfcApprovalRelationship FOR RelatedApproval;\n\tRelates : SET [0:?] OF IfcApprovalRelationship FOR RelatingApproval;\nEND_ENTITY;\n\nENTITY IfcApprovalActorRelationship;\n\tActor : IfcActorSelect;\n\tApproval : IfcApproval;\n\tRole : IfcActorRole;\nEND_ENTITY;\n\nENTITY IfcApprovalPropertyRelationship;\n\tApprovedProperties : SET [1:?] OF IfcProperty;\n\tApproval : IfcApproval;\nEND_ENTITY;\n\nENTITY IfcApprovalRelationship;\n\tRelatedApproval : IfcApproval;\n\tRelatingApproval : IfcApproval;\n\tDescription : OPTIONAL IfcText;\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcArbitraryClosedProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcArbitraryProfileDefWithVoids))\n SUBTYPE OF (IfcProfileDef);\n\tOuterCurve : IfcCurve;\n WHERE\n\tWR1 : OuterCurve.Dim = 2;\n\tWR2 : NOT('IFC2X3.IFCLINE' IN TYPEOF(OuterCurve));\n\tWR3 : NOT('IFC2X3.IFCOFFSETCURVE2D' IN TYPEOF(OuterCurve));\nEND_ENTITY;\n\nENTITY IfcArbitraryOpenProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcCenterLineProfileDef))\n SUBTYPE OF (IfcProfileDef);\n\tCurve : IfcBoundedCurve;\n WHERE\n\tWR11 : ('IFC2X3.IFCCENTERLINEPROFILEDEF' IN TYPEOF(SELF)) OR \n              (SELF\\IfcProfileDef.ProfileType = IfcProfileTypeEnum.CURVE);\n\tWR12 : Curve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcArbitraryProfileDefWithVoids\n SUBTYPE OF (IfcArbitraryClosedProfileDef);\n\tInnerCurves : SET [1:?] OF IfcCurve;\n WHERE\n\tWR1 : SELF\\IfcProfileDef.ProfileType = AREA;\n\tWR2 : SIZEOF(QUERY(temp <* InnerCurves | temp.Dim <> 2)) = 0;\n\tWR3 : SIZEOF(QUERY(temp <* InnerCurves | 'IFC2X3.IFCLINE' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcAsset\n SUBTYPE OF (IfcGroup);\n\tAssetID : IfcIdentifier;\n\tOriginalValue : IfcCostValue;\n\tCurrentValue : IfcCostValue;\n\tTotalReplacementCost : IfcCostValue;\n\tOwner : IfcActorSelect;\n\tUser : IfcActorSelect;\n\tResponsiblePerson : IfcPerson;\n\tIncorporationDate : IfcCalendarDate;\n\tDepreciatedValue : IfcCostValue;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcGroup.IsGroupedBy.RelatedObjects | NOT('IFC2X3.IFCELEMENT' IN TYPEOF(Temp)))) = 0;\nEND_ENTITY;\n\nENTITY IfcAsymmetricIShapeProfileDef\n SUBTYPE OF (IfcIShapeProfileDef);\n\tTopFlangeWidth : IfcPositiveLengthMeasure;\n\tTopFlangeThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTopFlangeFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tCentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcAxis1Placement\n SUBTYPE OF (IfcPlacement);\n\tAxis : OPTIONAL IfcDirection;\n DERIVE\n\tZ : IfcDirection := NVL (IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n WHERE\n\tWR1 : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);\n\tWR2 : SELF\\IfcPlacement.Location.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcAxis2Placement2D\n SUBTYPE OF (IfcPlacement);\n\tRefDirection : OPTIONAL IfcDirection;\n DERIVE\n\tP : LIST [2:2] OF IfcDirection := IfcBuild2Axes(RefDirection);\n WHERE\n\tWR1 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 2);\n\tWR2 : SELF\\IfcPlacement.Location.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcAxis2Placement3D\n SUBTYPE OF (IfcPlacement);\n\tAxis : OPTIONAL IfcDirection;\n\tRefDirection : OPTIONAL IfcDirection;\n DERIVE\n\tP : LIST [3:3] OF IfcDirection := IfcBuildAxes(Axis, RefDirection);\n WHERE\n\tWR1 : SELF\\IfcPlacement.Location.Dim = 3;\n\tWR2 : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);\n\tWR3 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 3);\n\tWR4 : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0);\n\tWR5 : NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection)));\nEND_ENTITY;\n\nENTITY IfcBSplineCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBezierCurve))\n SUBTYPE OF (IfcBoundedCurve);\n\tDegree : INTEGER;\n\tControlPointsList : LIST [2:?] OF IfcCartesianPoint;\n\tCurveForm : IfcBSplineCurveForm;\n\tClosedCurve : LOGICAL;\n\tSelfIntersect : LOGICAL;\n DERIVE\n\tControlPoints : ARRAY [0:255] OF IfcCartesianPoint := IfcListToArray(ControlPointsList,0,UpperIndexOnControlPoints);\n\tUpperIndexOnControlPoints : INTEGER := (SIZEOF(ControlPointsList) - 1);\n WHERE\n\tWR41 : SIZEOF(QUERY(Temp <* ControlPointsList |\n               Temp.Dim <> ControlPointsList[1].Dim))\n             = 0;\nEND_ENTITY;\n\nENTITY IfcBeam\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcBeamType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcBeamTypeEnum;\nEND_ENTITY;\n\nENTITY IfcBezierCurve\n SUPERTYPE OF (ONEOF\n\t(IfcRationalBezierCurve))\n SUBTYPE OF (IfcBSplineCurve);\nEND_ENTITY;\n\nENTITY IfcBlobTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tRasterFormat : IfcIdentifier;\n\tRasterCode : BOOLEAN;\n WHERE\n\tWR11 : SELF.RasterFormat IN ['BMP', 'JPG', 'GIF', 'PNG'];\nEND_ENTITY;\n\nENTITY IfcBlock\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tXLength : IfcPositiveLengthMeasure;\n\tYLength : IfcPositiveLengthMeasure;\n\tZLength : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcBoilerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcBoilerTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcBoilerTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcBoilerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcBooleanClippingResult\n SUBTYPE OF (IfcBooleanResult);\n WHERE\n\tWR1 : ('IFC2X3.IFCSWEPTAREASOLID' IN TYPEOF(FirstOperand)) OR ('IFC2X3.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(FirstOperand));\n\tWR2 : ('IFC2X3.IFCHALFSPACESOLID' IN TYPEOF(SecondOperand));\n\tWR3 : Operator = DIFFERENCE;\nEND_ENTITY;\n\nENTITY IfcBooleanResult\n SUPERTYPE OF (ONEOF\n\t(IfcBooleanClippingResult))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOperator : IfcBooleanOperator;\n\tFirstOperand : IfcBooleanOperand;\n\tSecondOperand : IfcBooleanOperand;\n DERIVE\n\tDim : IfcDimensionCount := FirstOperand.Dim;\n WHERE\n\tWR1 : FirstOperand.Dim = SecondOperand.Dim;\nEND_ENTITY;\n\nENTITY IfcBoundaryCondition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBoundaryEdgeCondition\n\t,IfcBoundaryFaceCondition\n\t,IfcBoundaryNodeCondition));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcBoundaryEdgeCondition\n SUBTYPE OF (IfcBoundaryCondition);\n\tLinearStiffnessByLengthX : OPTIONAL IfcModulusOfLinearSubgradeReactionMeasure;\n\tLinearStiffnessByLengthY : OPTIONAL IfcModulusOfLinearSubgradeReactionMeasure;\n\tLinearStiffnessByLengthZ : OPTIONAL IfcModulusOfLinearSubgradeReactionMeasure;\n\tRotationalStiffnessByLengthX : OPTIONAL IfcModulusOfRotationalSubgradeReactionMeasure;\n\tRotationalStiffnessByLengthY : OPTIONAL IfcModulusOfRotationalSubgradeReactionMeasure;\n\tRotationalStiffnessByLengthZ : OPTIONAL IfcModulusOfRotationalSubgradeReactionMeasure;\nEND_ENTITY;\n\nENTITY IfcBoundaryFaceCondition\n SUBTYPE OF (IfcBoundaryCondition);\n\tLinearStiffnessByAreaX : OPTIONAL IfcModulusOfSubgradeReactionMeasure;\n\tLinearStiffnessByAreaY : OPTIONAL IfcModulusOfSubgradeReactionMeasure;\n\tLinearStiffnessByAreaZ : OPTIONAL IfcModulusOfSubgradeReactionMeasure;\nEND_ENTITY;\n\nENTITY IfcBoundaryNodeCondition\n SUPERTYPE OF (ONEOF\n\t(IfcBoundaryNodeConditionWarping))\n SUBTYPE OF (IfcBoundaryCondition);\n\tLinearStiffnessX : OPTIONAL IfcLinearStiffnessMeasure;\n\tLinearStiffnessY : OPTIONAL IfcLinearStiffnessMeasure;\n\tLinearStiffnessZ : OPTIONAL IfcLinearStiffnessMeasure;\n\tRotationalStiffnessX : OPTIONAL IfcRotationalStiffnessMeasure;\n\tRotationalStiffnessY : OPTIONAL IfcRotationalStiffnessMeasure;\n\tRotationalStiffnessZ : OPTIONAL IfcRotationalStiffnessMeasure;\nEND_ENTITY;\n\nENTITY IfcBoundaryNodeConditionWarping\n SUBTYPE OF (IfcBoundaryNodeCondition);\n\tWarpingStiffness : OPTIONAL IfcWarpingMomentMeasure;\nEND_ENTITY;\n\nENTITY IfcBoundedCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBSplineCurve\n\t,IfcCompositeCurve\n\t,IfcPolyline\n\t,IfcTrimmedCurve))\n SUBTYPE OF (IfcCurve);\nEND_ENTITY;\n\nENTITY IfcBoundedSurface\n SUPERTYPE OF (ONEOF\n\t(IfcCurveBoundedPlane\n\t,IfcRectangularTrimmedSurface))\n SUBTYPE OF (IfcSurface);\nEND_ENTITY;\n\nENTITY IfcBoundingBox\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tCorner : IfcCartesianPoint;\n\tXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\n\tZDim : IfcPositiveLengthMeasure;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcBoxedHalfSpace\n SUBTYPE OF (IfcHalfSpaceSolid);\n\tEnclosure : IfcBoundingBox;\n WHERE\n\tWR1 : NOT ('IFC2X3.IFCCURVEBOUNDEDPLANE' IN TYPEOF(SELF\\IfcHalfSpaceSolid.BaseSurface));\nEND_ENTITY;\n\nENTITY IfcBuilding\n SUBTYPE OF (IfcSpatialStructureElement);\n\tElevationOfRefHeight : OPTIONAL IfcLengthMeasure;\n\tElevationOfTerrain : OPTIONAL IfcLengthMeasure;\n\tBuildingAddress : OPTIONAL IfcPostalAddress;\nEND_ENTITY;\n\nENTITY IfcBuildingElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBeam\n\t,IfcBuildingElementComponent\n\t,IfcBuildingElementProxy\n\t,IfcColumn\n\t,IfcCovering\n\t,IfcCurtainWall\n\t,IfcDoor\n\t,IfcFooting\n\t,IfcMember\n\t,IfcPile\n\t,IfcPlate\n\t,IfcRailing\n\t,IfcRamp\n\t,IfcRampFlight\n\t,IfcRoof\n\t,IfcSlab\n\t,IfcStair\n\t,IfcStairFlight\n\t,IfcWall\n\t,IfcWindow))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcBuildingElementComponent\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuildingElementPart\n\t,IfcReinforcingElement))\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcBuildingElementPart\n SUBTYPE OF (IfcBuildingElementComponent);\nEND_ENTITY;\n\nENTITY IfcBuildingElementProxy\n SUBTYPE OF (IfcBuildingElement);\n\tCompositionType : OPTIONAL IfcElementCompositionEnum;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcBuildingElementProxyType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcBuildingElementProxyTypeEnum;\nEND_ENTITY;\n\nENTITY IfcBuildingElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBeamType\n\t,IfcBuildingElementProxyType\n\t,IfcColumnType\n\t,IfcCoveringType\n\t,IfcCurtainWallType\n\t,IfcMemberType\n\t,IfcPlateType\n\t,IfcRailingType\n\t,IfcRampFlightType\n\t,IfcSlabType\n\t,IfcStairFlightType\n\t,IfcWallType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcBuildingStorey\n SUBTYPE OF (IfcSpatialStructureElement);\n\tElevation : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tWidth : IfcPositiveLengthMeasure;\n\tWallThickness : IfcPositiveLengthMeasure;\n\tGirth : IfcPositiveLengthMeasure;\n\tInternalFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tCentreOfGravityInX : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : Girth < (Depth / 2.);\n\tWR2 : NOT(EXISTS(InternalFilletRadius)) OR\n            ((InternalFilletRadius <= Width/2.) AND (InternalFilletRadius <= Depth/2.));\n\tWR3 : (WallThickness < Width/2.) AND (WallThickness < Depth/2.);\nEND_ENTITY;\n\nENTITY IfcCableCarrierFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcCableCarrierFittingTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcCableCarrierFittingTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcCableCarrierFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCableCarrierSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcCableCarrierSegmentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCableSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcCableSegmentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCalendarDate;\n\tDayComponent : IfcDayInMonthNumber;\n\tMonthComponent : IfcMonthInYearNumber;\n\tYearComponent : IfcYearNumber;\n WHERE\n\tWR21 : IfcValidCalendarDate (SELF);\nEND_ENTITY;\n\nENTITY IfcCartesianPoint\n SUBTYPE OF (IfcPoint);\n\tCoordinates : LIST [1:3] OF IfcLengthMeasure;\n DERIVE\n\tDim : IfcDimensionCount := HIINDEX(Coordinates);\n WHERE\n\tWR1 : HIINDEX(Coordinates) >= 2;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCartesianTransformationOperator2D\n\t,IfcCartesianTransformationOperator3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tAxis1 : OPTIONAL IfcDirection;\n\tAxis2 : OPTIONAL IfcDirection;\n\tLocalOrigin : IfcCartesianPoint;\n\tScale : OPTIONAL REAL;\n DERIVE\n\tScl : REAL := NVL(Scale, 1.0);\n\tDim : IfcDimensionCount := LocalOrigin.Dim;\n WHERE\n\tWR1 : Scl > 0.0;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator2D\n SUPERTYPE OF (ONEOF\n\t(IfcCartesianTransformationOperator2DnonUniform))\n SUBTYPE OF (IfcCartesianTransformationOperator);\n DERIVE\n\tU : LIST [2:2] OF IfcDirection := IfcBaseAxis(2,SELF\\IfcCartesianTransformationOperator.Axis1,\n          SELF\\IfcCartesianTransformationOperator.Axis2,?);\n WHERE\n\tWR1 : SELF\\IfcCartesianTransformationOperator.Dim = 2;\n\tWR2 : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis1)) OR \n            (SELF\\IfcCartesianTransformationOperator.Axis1.Dim = 2);\n\tWR3 : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis2)) OR \n            (SELF\\IfcCartesianTransformationOperator.Axis2.Dim = 2);\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator2DnonUniform\n SUBTYPE OF (IfcCartesianTransformationOperator2D);\n\tScale2 : OPTIONAL REAL;\n DERIVE\n\tScl2 : REAL := NVL(Scale2, SELF\\IfcCartesianTransformationOperator.Scl);\n WHERE\n\tWR1 : Scl2 > 0.0;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator3D\n SUPERTYPE OF (ONEOF\n\t(IfcCartesianTransformationOperator3DnonUniform))\n SUBTYPE OF (IfcCartesianTransformationOperator);\n\tAxis3 : OPTIONAL IfcDirection;\n DERIVE\n\tU : LIST [3:3] OF IfcDirection := IfcBaseAxis(3,SELF\\IfcCartesianTransformationOperator.Axis1,\n              SELF\\IfcCartesianTransformationOperator.Axis2,Axis3);\n WHERE\n\tWR1 : SELF\\IfcCartesianTransformationOperator.Dim = 3;\n\tWR2 : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis1)) OR \n            (SELF\\IfcCartesianTransformationOperator.Axis1.Dim = 3);\n\tWR3 : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis2)) OR \n            (SELF\\IfcCartesianTransformationOperator.Axis2.Dim = 3);\n\tWR4 : NOT(EXISTS(Axis3)) OR (Axis3.Dim = 3);\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator3DnonUniform\n SUBTYPE OF (IfcCartesianTransformationOperator3D);\n\tScale2 : OPTIONAL REAL;\n\tScale3 : OPTIONAL REAL;\n DERIVE\n\tScl2 : REAL := NVL(Scale2, SELF\\IfcCartesianTransformationOperator.Scl);\n\tScl3 : REAL := NVL(Scale3, SELF\\IfcCartesianTransformationOperator.Scl);\n WHERE\n\tWR1 : Scl2 > 0.0;\n\tWR2 : Scl3 > 0.0;\nEND_ENTITY;\n\nENTITY IfcCenterLineProfileDef\n SUBTYPE OF (IfcArbitraryOpenProfileDef);\n\tThickness : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcChamferEdgeFeature\n SUBTYPE OF (IfcEdgeFeature);\n\tWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tHeight : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcChillerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcChillerTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCircle\n SUBTYPE OF (IfcConic);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCircleHollowProfileDef\n SUBTYPE OF (IfcCircleProfileDef);\n\tWallThickness : IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : WallThickness < SELF\\IfcCircleProfileDef.Radius;\nEND_ENTITY;\n\nENTITY IfcCircleProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcCircleHollowProfileDef))\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcClassification;\n\tSource : IfcLabel;\n\tEdition : IfcLabel;\n\tEditionDate : OPTIONAL IfcCalendarDate;\n\tName : IfcLabel;\n INVERSE\n\tContains : SET [0:?] OF IfcClassificationItem FOR ItemOf;\nEND_ENTITY;\n\nENTITY IfcClassificationItem;\n\tNotation : IfcClassificationNotationFacet;\n\tItemOf : OPTIONAL IfcClassification;\n\tTitle : IfcLabel;\n INVERSE\n\tIsClassifiedItemIn : SET [0:1] OF IfcClassificationItemRelationship FOR RelatedItems;\n\tIsClassifyingItemIn : SET [0:1] OF IfcClassificationItemRelationship FOR RelatingItem;\nEND_ENTITY;\n\nENTITY IfcClassificationItemRelationship;\n\tRelatingItem : IfcClassificationItem;\n\tRelatedItems : SET [1:?] OF IfcClassificationItem;\nEND_ENTITY;\n\nENTITY IfcClassificationNotation;\n\tNotationFacets : SET [1:?] OF IfcClassificationNotationFacet;\nEND_ENTITY;\n\nENTITY IfcClassificationNotationFacet;\n\tNotationValue : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcClassificationReference\n SUBTYPE OF (IfcExternalReference);\n\tReferencedSource : OPTIONAL IfcClassification;\nEND_ENTITY;\n\nENTITY IfcClosedShell\n SUBTYPE OF (IfcConnectedFaceSet);\nEND_ENTITY;\n\nENTITY IfcCoilType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCoilTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcCoilTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcCoilTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcColourRgb\n SUBTYPE OF (IfcColourSpecification);\n\tRed : IfcNormalisedRatioMeasure;\n\tGreen : IfcNormalisedRatioMeasure;\n\tBlue : IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcColourSpecification\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcColourRgb));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcColumn\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcColumnType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcColumnTypeEnum;\nEND_ENTITY;\n\nENTITY IfcComplexProperty\n SUBTYPE OF (IfcProperty);\n\tUsageName : IfcIdentifier;\n\tHasProperties : SET [1:?] OF IfcProperty;\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* HasProperties | SELF :=: temp)) = 0;\n\tWR22 : IfcUniquePropertyName(HasProperties);\nEND_ENTITY;\n\nENTITY IfcCompositeCurve\n SUPERTYPE OF (ONEOF\n\t(Ifc2DCompositeCurve))\n SUBTYPE OF (IfcBoundedCurve);\n\tSegments : LIST [1:?] OF IfcCompositeCurveSegment;\n\tSelfIntersect : LOGICAL;\n DERIVE\n\tNSegments : INTEGER := SIZEOF(Segments);\n\tClosedCurve : LOGICAL := Segments[NSegments].Transition <> Discontinuous;\n WHERE\n\tWR41 : ((NOT ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 1)) OR ((ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 0));\n\tWR42 : SIZEOF( QUERY( Temp <* Segments | Temp.Dim <> Segments[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcCompositeCurveSegment\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tTransition : IfcTransitionCode;\n\tSameSense : BOOLEAN;\n\tParentCurve : IfcCurve;\n DERIVE\n\tDim : IfcDimensionCount := ParentCurve.Dim;\n INVERSE\n\tUsingCurves : SET [1:?] OF IfcCompositeCurve FOR Segments;\n WHERE\n\tWR1 : ('IFC2X3.IFCBOUNDEDCURVE' IN TYPEOF(ParentCurve));\nEND_ENTITY;\n\nENTITY IfcCompositeProfileDef\n SUBTYPE OF (IfcProfileDef);\n\tProfiles : SET [2:?] OF IfcProfileDef;\n\tLabel : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* Profiles | temp.ProfileType <> Profiles[1].ProfileType)) = 0;\n\tWR2 : SIZEOF(QUERY(temp <* Profiles | 'IFC2X3.IFCCOMPOSITEPROFILEDEF' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcCompressorType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcCompressorTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcCompressorTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcCompressorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCondenserType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCondenserTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcCondenserTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcCondenserTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCondition\n SUBTYPE OF (IfcGroup);\nEND_ENTITY;\n\nENTITY IfcConditionCriterion\n SUBTYPE OF (IfcControl);\n\tCriterion : IfcConditionCriterionSelect;\n\tCriterionDateTime : IfcDateTimeSelect;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcConic\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCircle\n\t,IfcEllipse))\n SUBTYPE OF (IfcCurve);\n\tPosition : IfcAxis2Placement;\nEND_ENTITY;\n\nENTITY IfcConnectedFaceSet\n SUPERTYPE OF (ONEOF\n\t(IfcClosedShell\n\t,IfcOpenShell))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tCfsFaces : SET [1:?] OF IfcFace;\nEND_ENTITY;\n\nENTITY IfcConnectionCurveGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tCurveOnRelatingElement : IfcCurveOrEdgeCurve;\n\tCurveOnRelatedElement : OPTIONAL IfcCurveOrEdgeCurve;\nEND_ENTITY;\n\nENTITY IfcConnectionGeometry\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConnectionCurveGeometry\n\t,IfcConnectionPointGeometry\n\t,IfcConnectionPortGeometry\n\t,IfcConnectionSurfaceGeometry));\nEND_ENTITY;\n\nENTITY IfcConnectionPointEccentricity\n SUBTYPE OF (IfcConnectionPointGeometry);\n\tEccentricityInX : OPTIONAL IfcLengthMeasure;\n\tEccentricityInY : OPTIONAL IfcLengthMeasure;\n\tEccentricityInZ : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcConnectionPointGeometry\n SUPERTYPE OF (ONEOF\n\t(IfcConnectionPointEccentricity))\n SUBTYPE OF (IfcConnectionGeometry);\n\tPointOnRelatingElement : IfcPointOrVertexPoint;\n\tPointOnRelatedElement : OPTIONAL IfcPointOrVertexPoint;\nEND_ENTITY;\n\nENTITY IfcConnectionPortGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tLocationAtRelatingElement : IfcAxis2Placement;\n\tLocationAtRelatedElement : OPTIONAL IfcAxis2Placement;\n\tProfileOfPort : IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcConnectionSurfaceGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tSurfaceOnRelatingElement : IfcSurfaceOrFaceSurface;\n\tSurfaceOnRelatedElement : OPTIONAL IfcSurfaceOrFaceSurface;\nEND_ENTITY;\n\nENTITY IfcConstraint\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcMetric\n\t,IfcObjective));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tConstraintGrade : IfcConstraintEnum;\n\tConstraintSource : OPTIONAL IfcLabel;\n\tCreatingActor : OPTIONAL IfcActorSelect;\n\tCreationTime : OPTIONAL IfcDateTimeSelect;\n\tUserDefinedGrade : OPTIONAL IfcLabel;\n INVERSE\n\tClassifiedAs : SET [0:?] OF IfcConstraintClassificationRelationship FOR ClassifiedConstraint;\n\tRelatesConstraints : SET [0:?] OF IfcConstraintRelationship FOR RelatingConstraint;\n\tIsRelatedWith : SET [0:?] OF IfcConstraintRelationship FOR RelatedConstraints;\n\tPropertiesForConstraint : SET [0:?] OF IfcPropertyConstraintRelationship FOR RelatingConstraint;\n\tAggregates : SET [0:?] OF IfcConstraintAggregationRelationship FOR RelatingConstraint;\n\tIsAggregatedIn : SET [0:?] OF IfcConstraintAggregationRelationship FOR RelatedConstraints;\n WHERE\n\tWR11 : (ConstraintGrade <> IfcConstraintEnum.USERDEFINED) OR\n             ((ConstraintGrade = IfcConstraintEnum.USERDEFINED) AND EXISTS(SELF\\IfcConstraint.UserDefinedGrade));\nEND_ENTITY;\n\nENTITY IfcConstraintAggregationRelationship;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRelatingConstraint : IfcConstraint;\n\tRelatedConstraints : LIST [1:?] OF UNIQUE IfcConstraint;\n\tLogicalAggregator : IfcLogicalOperatorEnum;\n WHERE\n\tWR11 : SIZEOF(QUERY(temp <* RelatedConstraints | \n               temp :=: RelatingConstraint\n               )) = 0;\nEND_ENTITY;\n\nENTITY IfcConstraintClassificationRelationship;\n\tClassifiedConstraint : IfcConstraint;\n\tRelatedClassifications : SET [1:?] OF IfcClassificationNotationSelect;\nEND_ENTITY;\n\nENTITY IfcConstraintRelationship;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRelatingConstraint : IfcConstraint;\n\tRelatedConstraints : SET [1:?] OF IfcConstraint;\n WHERE\n\tWR11 : SIZEOF(QUERY(temp <* RelatedConstraints | temp :=: RelatingConstraint )) = 0;\nEND_ENTITY;\n\nENTITY IfcConstructionEquipmentResource\n SUBTYPE OF (IfcConstructionResource);\nEND_ENTITY;\n\nENTITY IfcConstructionMaterialResource\n SUBTYPE OF (IfcConstructionResource);\n\tSuppliers : OPTIONAL SET [1:?] OF IfcActorSelect;\n\tUsageRatio : OPTIONAL IfcRatioMeasure;\n WHERE\n\tWR1 : SIZEOF(SELF\\IfcResource.ResourceOf) <=1;\n\tWR2 : NOT(EXISTS(SELF\\IfcResource.ResourceOf[1])) OR\n            (SELF\\IfcResource.ResourceOf[1].RelatedObjectsType = IfcObjectTypeEnum.PRODUCT);\nEND_ENTITY;\n\nENTITY IfcConstructionProductResource\n SUBTYPE OF (IfcConstructionResource);\n WHERE\n\tWR1 : SIZEOF(SELF\\IfcResource.ResourceOf) <=1;\n\tWR2 : NOT(EXISTS(SELF\\IfcResource.ResourceOf[1])) OR\n            (SELF\\IfcResource.ResourceOf[1].RelatedObjectsType = IfcObjectTypeEnum.PRODUCT);\nEND_ENTITY;\n\nENTITY IfcConstructionResource\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConstructionEquipmentResource\n\t,IfcConstructionMaterialResource\n\t,IfcConstructionProductResource\n\t,IfcCrewResource\n\t,IfcLaborResource\n\t,IfcSubContractResource))\n SUBTYPE OF (IfcResource);\n\tResourceIdentifier : OPTIONAL IfcIdentifier;\n\tResourceGroup : OPTIONAL IfcLabel;\n\tResourceConsumption : OPTIONAL IfcResourceConsumptionEnum;\n\tBaseQuantity : OPTIONAL IfcMeasureWithUnit;\nEND_ENTITY;\n\nENTITY IfcContextDependentUnit\n SUBTYPE OF (IfcNamedUnit);\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcControl\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcActionRequest\n\t,IfcConditionCriterion\n\t,IfcCostItem\n\t,IfcCostSchedule\n\t,IfcEquipmentStandard\n\t,IfcFurnitureStandard\n\t,IfcPerformanceHistory\n\t,IfcPermit\n\t,IfcProjectOrder\n\t,IfcProjectOrderRecord\n\t,IfcScheduleTimeControl\n\t,IfcServiceLife\n\t,IfcSpaceProgram\n\t,IfcTimeSeriesSchedule\n\t,IfcWorkControl))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tControls : SET [0:?] OF IfcRelAssignsToControl FOR RelatingControl;\nEND_ENTITY;\n\nENTITY IfcControllerType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcControllerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcConversionBasedUnit\n SUBTYPE OF (IfcNamedUnit);\n\tName : IfcLabel;\n\tConversionFactor : IfcMeasureWithUnit;\nEND_ENTITY;\n\nENTITY IfcCooledBeamType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCooledBeamTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcCooledBeamTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcCooledBeamTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCoolingTowerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCoolingTowerTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcCoolingTowerTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcCoolingTowerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCoordinatedUniversalTimeOffset;\n\tHourOffset : IfcHourInDay;\n\tMinuteOffset : OPTIONAL IfcMinuteInHour;\n\tSense : IfcAheadOrBehind;\nEND_ENTITY;\n\nENTITY IfcCostItem\n SUBTYPE OF (IfcControl);\nEND_ENTITY;\n\nENTITY IfcCostSchedule\n SUBTYPE OF (IfcControl);\n\tSubmittedBy : OPTIONAL IfcActorSelect;\n\tPreparedBy : OPTIONAL IfcActorSelect;\n\tSubmittedOn : OPTIONAL IfcDateTimeSelect;\n\tStatus : OPTIONAL IfcLabel;\n\tTargetUsers : OPTIONAL SET [1:?] OF IfcActorSelect;\n\tUpdateDate : OPTIONAL IfcDateTimeSelect;\n\tID : IfcIdentifier;\n\tPredefinedType : IfcCostScheduleTypeEnum;\n UNIQUE\n\tUR2 : ID;\nEND_ENTITY;\n\nENTITY IfcCostValue\n SUBTYPE OF (IfcAppliedValue);\n\tCostType : IfcLabel;\n\tCondition : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcCovering\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcCoveringTypeEnum;\n INVERSE\n\tCoversSpaces : SET [0:1] OF IfcRelCoversSpaces FOR RelatedCoverings;\n\tCovers : SET [0:1] OF IfcRelCoversBldgElements FOR RelatedCoverings;\n WHERE\n\tWR61 : NOT(EXISTS(PredefinedType)) OR \n              (PredefinedType <> IfcCoveringTypeEnum.USERDEFINED) OR \n              ((PredefinedType = IfcCoveringTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcCoveringType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcCoveringTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCraneRailAShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tOverallHeight : IfcPositiveLengthMeasure;\n\tBaseWidth2 : IfcPositiveLengthMeasure;\n\tRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tHeadWidth : IfcPositiveLengthMeasure;\n\tHeadDepth2 : IfcPositiveLengthMeasure;\n\tHeadDepth3 : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tBaseWidth4 : IfcPositiveLengthMeasure;\n\tBaseDepth1 : IfcPositiveLengthMeasure;\n\tBaseDepth2 : IfcPositiveLengthMeasure;\n\tBaseDepth3 : IfcPositiveLengthMeasure;\n\tCentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCraneRailFShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tOverallHeight : IfcPositiveLengthMeasure;\n\tHeadWidth : IfcPositiveLengthMeasure;\n\tRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tHeadDepth2 : IfcPositiveLengthMeasure;\n\tHeadDepth3 : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tBaseDepth1 : IfcPositiveLengthMeasure;\n\tBaseDepth2 : IfcPositiveLengthMeasure;\n\tCentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCrewResource\n SUBTYPE OF (IfcConstructionResource);\nEND_ENTITY;\n\nENTITY IfcCsgPrimitive3D\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBlock\n\t,IfcRectangularPyramid\n\t,IfcRightCircularCone\n\t,IfcRightCircularCylinder\n\t,IfcSphere))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tPosition : IfcAxis2Placement3D;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcCsgSolid\n SUBTYPE OF (IfcSolidModel);\n\tTreeRootExpression : IfcCsgSelect;\nEND_ENTITY;\n\nENTITY IfcCurrencyRelationship;\n\tRelatingMonetaryUnit : IfcMonetaryUnit;\n\tRelatedMonetaryUnit : IfcMonetaryUnit;\n\tExchangeRate : IfcPositiveRatioMeasure;\n\tRateDateTime : IfcDateAndTime;\n\tRateSource : OPTIONAL IfcLibraryInformation;\nEND_ENTITY;\n\nENTITY IfcCurtainWall\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcCurtainWallType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcCurtainWallTypeEnum;\nEND_ENTITY;\n\nENTITY IfcCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBoundedCurve\n\t,IfcConic\n\t,IfcLine\n\t,IfcOffsetCurve2D\n\t,IfcOffsetCurve3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\tDim : IfcDimensionCount := IfcCurveDim(SELF);\nEND_ENTITY;\n\nENTITY IfcCurveBoundedPlane\n SUBTYPE OF (IfcBoundedSurface);\n\tBasisSurface : IfcPlane;\n\tOuterBoundary : IfcCurve;\n\tInnerBoundaries : SET [0:?] OF IfcCurve;\n DERIVE\n\tDim : IfcDimensionCount := BasisSurface.Dim;\nEND_ENTITY;\n\nENTITY IfcCurveStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tCurveFont : OPTIONAL IfcCurveFontOrScaledCurveFontSelect;\n\tCurveWidth : OPTIONAL IfcSizeSelect;\n\tCurveColour : OPTIONAL IfcColour;\n WHERE\n\tWR11 : (NOT(EXISTS(CurveWidth))) OR\n             ('IFC2X3.IFCPOSITIVELENGTHMEASURE' IN TYPEOF(CurveWidth)) OR \n              (('IFC2X3.IFCDESCRIPTIVEMEASURE' IN TYPEOF(CurveWidth)) AND\n              (CurveWidth = 'by layer'));\nEND_ENTITY;\n\nENTITY IfcCurveStyleFont;\n\tName : OPTIONAL IfcLabel;\n\tPatternList : LIST [1:?] OF IfcCurveStyleFontPattern;\nEND_ENTITY;\n\nENTITY IfcCurveStyleFontAndScaling;\n\tName : OPTIONAL IfcLabel;\n\tCurveFont : IfcCurveStyleFontSelect;\n\tCurveFontScaling : IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcCurveStyleFontPattern;\n\tVisibleSegmentLength : IfcLengthMeasure;\n\tInvisibleSegmentLength : IfcPositiveLengthMeasure;\n WHERE\n\tWR01 : VisibleSegmentLength >= 0.;\nEND_ENTITY;\n\nENTITY IfcDamperType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcDamperTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDateAndTime;\n\tDateComponent : IfcCalendarDate;\n\tTimeComponent : IfcLocalTime;\nEND_ENTITY;\n\nENTITY IfcDefinedSymbol\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tDefinition : IfcDefinedSymbolSelect;\n\tTarget : IfcCartesianTransformationOperator2D;\nEND_ENTITY;\n\nENTITY IfcDerivedProfileDef\n SUBTYPE OF (IfcProfileDef);\n\tParentProfile : IfcProfileDef;\n\tOperator : IfcCartesianTransformationOperator2D;\n\tLabel : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : SELF\\IfcProfileDef.ProfileType = ParentProfile.ProfileType;\nEND_ENTITY;\n\nENTITY IfcDerivedUnit;\n\tElements : SET [1:?] OF IfcDerivedUnitElement;\n\tUnitType : IfcDerivedUnitEnum;\n\tUserDefinedType : OPTIONAL IfcLabel;\n DERIVE\n\tDimensions : IfcDimensionalExponents := IfcDeriveDimensionalExponents(Elements);\n WHERE\n\tWR1 : (SIZEOF (Elements) > 1) OR ((SIZEOF (Elements) = 1) AND (Elements[1].Exponent <> 1 ));\n\tWR2 : (UnitType <> IfcDerivedUnitEnum.USERDEFINED) OR\n            ((UnitType = IfcDerivedUnitEnum.USERDEFINED) AND \n             (EXISTS(SELF.UserDefinedType)));\nEND_ENTITY;\n\nENTITY IfcDerivedUnitElement;\n\tUnit : IfcNamedUnit;\n\tExponent : INTEGER;\nEND_ENTITY;\n\nENTITY IfcDiameterDimension\n SUBTYPE OF (IfcDimensionCurveDirectedCallout);\nEND_ENTITY;\n\nENTITY IfcDimensionCalloutRelationship\n SUBTYPE OF (IfcDraughtingCalloutRelationship);\n WHERE\n\tWR11 : SELF\\IfcDraughtingCalloutRelationship.Name IN ['primary','secondary'];\n\tWR12 : SIZEOF(TYPEOF(SELF\\IfcDraughtingCalloutRelationship.RelatingDraughtingCallout) * [\n                  'IFC2X3.IFCANGULARDIMENSION',\n                  'IFC2X3.IFCDIAMETERDIMENSION',\n                  'IFC2X3.IFCLINEARDIMENSION',\n                  'IFC2X3.IFCRADIUSDIMENSION']) = 1;\n\tWR13 : NOT ('IFC2X3.IFCDIMENSIONCURVEDIRECTEDCALLOUT'\n               IN TYPEOF (SELF\\IfcDraughtingCalloutRelationship.RelatedDraughtingCallout));\nEND_ENTITY;\n\nENTITY IfcDimensionCurve\n SUBTYPE OF (IfcAnnotationCurveOccurrence);\n INVERSE\n\tAnnotatedBySymbols : SET [0:2] OF IfcTerminatorSymbol FOR AnnotatedCurve;\n WHERE\n\tWR51 : SIZEOF(USEDIN(SELF,'IFC2X3.IFCDRAUGHTINGCALLOUT.CONTENTS')) \n                   >= 1;\n\tWR52 : (SIZEOF(QUERY (Dct1 <* USEDIN(SELF,'IFC2X3.' + \n                            'IFCTERMINATORSYMBOL.ANNOTATEDCURVE') | (Dct1.Role = IfcDimensionExtentUsage.ORIGIN))) <= 1) \n             AND \n             (SIZEOF(QUERY (Dct2 <* USEDIN(SELF,'IFC2X3.' + \n                            'IFCTERMINATORSYMBOL.ANNOTATEDCURVE') | (Dct2.Role = IfcDimensionExtentUsage.TARGET))) <= 1);\n\tWR53 : SIZEOF(QUERY (Dct <* AnnotatedBySymbols | \n               NOT('IFC2X3.IFCDIMENSIONCURVETERMINATOR' IN TYPEOF(Dct)))) \n               = 0;\nEND_ENTITY;\n\nENTITY IfcDimensionCurveDirectedCallout\n SUPERTYPE OF (ONEOF\n\t(IfcAngularDimension\n\t,IfcDiameterDimension\n\t,IfcLinearDimension\n\t,IfcRadiusDimension))\n SUBTYPE OF (IfcDraughtingCallout);\n WHERE\n\tWR41 : SIZEOF(QUERY (Dc <* SELF\\IfcDraughtingCallout.Contents | (\n                   'IFC2X3.IFCDIMENSIONCURVE' IN TYPEOF(Dc)))) \n                  = 1;\n\tWR42 : SIZEOF (QUERY (Dc <* SELF.contents |\n                    ('IFC2X3.IFCPROJECTIONCURVE' IN\n                      TYPEOF (Dc)))) <= 2;\nEND_ENTITY;\n\nENTITY IfcDimensionCurveTerminator\n SUBTYPE OF (IfcTerminatorSymbol);\n\tRole : IfcDimensionExtentUsage;\n WHERE\n\tWR61 : 'IFC2X3.IFCDIMENSIONCURVE' IN TYPEOF\n             (SELF\\IfcTerminatorSymbol.AnnotatedCurve);\nEND_ENTITY;\n\nENTITY IfcDimensionPair\n SUBTYPE OF (IfcDraughtingCalloutRelationship);\n WHERE\n\tWR11 : SELF.Name IN ['chained','parallel'];\n\tWR12 : SIZEOF(TYPEOF(SELF.RelatingDraughtingCallout) * [\n                            'IFC2X3.IFCANGULARDIMENSION',\n                            'IFC2X3.IFCDIAMETERDIMENSION',\n                            'IFC2X3.IFCLINEARDIMENSION',\n                            'IFC2X3.IFCRADIUSDIMENSION']) = 1;\n\tWR13 : SIZEOF(TYPEOF(SELF.RelatedDraughtingCallout) * [\n                            'IFC2X3.IFCANGULARDIMENSION',\n                            'IFC2X3.IFCDIAMETERDIMENSION',\n                            'IFC2X3.IFCLINEARDIMENSION',\n                            'IFC2X3.IFCRADIUSDIMENSION']) = 1;\nEND_ENTITY;\n\nENTITY IfcDimensionalExponents;\n\tLengthExponent : INTEGER;\n\tMassExponent : INTEGER;\n\tTimeExponent : INTEGER;\n\tElectricCurrentExponent : INTEGER;\n\tThermodynamicTemperatureExponent : INTEGER;\n\tAmountOfSubstanceExponent : INTEGER;\n\tLuminousIntensityExponent : INTEGER;\nEND_ENTITY;\n\nENTITY IfcDirection\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tDirectionRatios : LIST [2:3] OF REAL;\n DERIVE\n\tDim : IfcDimensionCount := HIINDEX(DirectionRatios);\nEND_ENTITY;\n\nENTITY IfcDiscreteAccessory\n SUBTYPE OF (IfcElementComponent);\nEND_ENTITY;\n\nENTITY IfcDiscreteAccessoryType\n SUPERTYPE OF (ONEOF\n\t(IfcVibrationIsolatorType))\n SUBTYPE OF (IfcElementComponentType);\nEND_ENTITY;\n\nENTITY IfcDistributionChamberElement\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcDistributionChamberElementType\n SUBTYPE OF (IfcDistributionFlowElementType);\n\tPredefinedType : IfcDistributionChamberElementTypeEnum;\nEND_ENTITY;\n\nENTITY IfcDistributionControlElement\n SUBTYPE OF (IfcDistributionElement);\n\tControlElementId : OPTIONAL IfcIdentifier;\n INVERSE\n\tAssignedToFlowElement : SET [0:1] OF IfcRelFlowControlElements FOR RelatedControlElements;\nEND_ENTITY;\n\nENTITY IfcDistributionControlElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcActuatorType\n\t,IfcAlarmType\n\t,IfcControllerType\n\t,IfcFlowInstrumentType\n\t,IfcSensorType))\n SUBTYPE OF (IfcDistributionElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionElement\n SUPERTYPE OF (ONEOF\n\t(IfcDistributionControlElement\n\t,IfcDistributionFlowElement))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcDistributionElementType\n SUPERTYPE OF (ONEOF\n\t(IfcDistributionControlElementType\n\t,IfcDistributionFlowElementType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionFlowElement\n SUPERTYPE OF (ONEOF\n\t(IfcDistributionChamberElement\n\t,IfcEnergyConversionDevice\n\t,IfcFlowController\n\t,IfcFlowFitting\n\t,IfcFlowMovingDevice\n\t,IfcFlowSegment\n\t,IfcFlowStorageDevice\n\t,IfcFlowTerminal\n\t,IfcFlowTreatmentDevice))\n SUBTYPE OF (IfcDistributionElement);\n INVERSE\n\tHasControlElements : SET [0:1] OF IfcRelFlowControlElements FOR RelatingFlowElement;\nEND_ENTITY;\n\nENTITY IfcDistributionFlowElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDistributionChamberElementType\n\t,IfcEnergyConversionDeviceType\n\t,IfcFlowControllerType\n\t,IfcFlowFittingType\n\t,IfcFlowMovingDeviceType\n\t,IfcFlowSegmentType\n\t,IfcFlowStorageDeviceType\n\t,IfcFlowTerminalType\n\t,IfcFlowTreatmentDeviceType))\n SUBTYPE OF (IfcDistributionElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionPort\n SUBTYPE OF (IfcPort);\n\tFlowDirection : OPTIONAL IfcFlowDirectionEnum;\nEND_ENTITY;\n\nENTITY IfcDocumentElectronicFormat;\n\tFileExtension : OPTIONAL IfcLabel;\n\tMimeContentType : OPTIONAL IfcLabel;\n\tMimeSubtype : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS(FileExtension) OR EXISTS(MimeContentType);\nEND_ENTITY;\n\nENTITY IfcDocumentInformation;\n\tDocumentId : IfcIdentifier;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tDocumentReferences : OPTIONAL SET [1:?] OF IfcDocumentReference;\n\tPurpose : OPTIONAL IfcText;\n\tIntendedUse : OPTIONAL IfcText;\n\tScope : OPTIONAL IfcText;\n\tRevision : OPTIONAL IfcLabel;\n\tDocumentOwner : OPTIONAL IfcActorSelect;\n\tEditors : OPTIONAL SET [1:?] OF IfcActorSelect;\n\tCreationTime : OPTIONAL IfcDateAndTime;\n\tLastRevisionTime : OPTIONAL IfcDateAndTime;\n\tElectronicFormat : OPTIONAL IfcDocumentElectronicFormat;\n\tValidFrom : OPTIONAL IfcCalendarDate;\n\tValidUntil : OPTIONAL IfcCalendarDate;\n\tConfidentiality : OPTIONAL IfcDocumentConfidentialityEnum;\n\tStatus : OPTIONAL IfcDocumentStatusEnum;\n INVERSE\n\tIsPointedTo : SET [0:?] OF IfcDocumentInformationRelationship FOR RelatedDocuments;\n\tIsPointer : SET [0:1] OF IfcDocumentInformationRelationship FOR RelatingDocument;\nEND_ENTITY;\n\nENTITY IfcDocumentInformationRelationship;\n\tRelatingDocument : IfcDocumentInformation;\n\tRelatedDocuments : SET [1:?] OF IfcDocumentInformation;\n\tRelationshipType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcDocumentReference\n SUBTYPE OF (IfcExternalReference);\n INVERSE\n\tReferenceToDocument : SET [0:1] OF IfcDocumentInformation FOR DocumentReferences;\n WHERE\n\tWR1 : EXISTS(Name) XOR EXISTS(ReferenceToDocument[1]);\nEND_ENTITY;\n\nENTITY IfcDoor\n SUBTYPE OF (IfcBuildingElement);\n\tOverallHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tOverallWidth : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcDoorLiningProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tLiningDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tLiningThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tThresholdDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tThresholdThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTransomThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTransomOffset : OPTIONAL IfcLengthMeasure;\n\tLiningOffset : OPTIONAL IfcLengthMeasure;\n\tThresholdOffset : OPTIONAL IfcLengthMeasure;\n\tCasingThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tCasingDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n WHERE\n\tWR31 : NOT(NOT(EXISTS(LiningDepth)) AND EXISTS(LiningThickness));\n\tWR32 : NOT(NOT(EXISTS(ThresholdDepth)) AND EXISTS(ThresholdThickness));\n\tWR33 : (EXISTS(TransomOffset) AND EXISTS(TransomThickness)) XOR\n             (NOT(EXISTS(TransomOffset)) AND NOT(EXISTS(TransomThickness)));\n\tWR34 : (EXISTS(CasingDepth) AND EXISTS(CasingThickness)) XOR\n             (NOT(EXISTS(CasingDepth)) AND NOT(EXISTS(CasingThickness)));\n\tWR35 : EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1]) AND \n             ('IFC2X3.IFCDOORSTYLE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]));\nEND_ENTITY;\n\nENTITY IfcDoorPanelProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tPanelDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tPanelOperation : IfcDoorPanelOperationEnum;\n\tPanelWidth : OPTIONAL IfcNormalisedRatioMeasure;\n\tPanelPosition : IfcDoorPanelPositionEnum;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n WHERE\n\tWR31 : EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1]) AND \n             ('IFC2X3.IFCDOORSTYLE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]));\nEND_ENTITY;\n\nENTITY IfcDoorStyle\n SUBTYPE OF (IfcTypeProduct);\n\tOperationType : IfcDoorStyleOperationEnum;\n\tConstructionType : IfcDoorStyleConstructionEnum;\n\tParameterTakesPrecedence : BOOLEAN;\n\tSizeable : BOOLEAN;\nEND_ENTITY;\n\nENTITY IfcDraughtingCallout\n SUPERTYPE OF (ONEOF\n\t(IfcDimensionCurveDirectedCallout\n\t,IfcStructuredDimensionCallout))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tContents : SET [1:?] OF IfcDraughtingCalloutElement;\n INVERSE\n\tIsRelatedFromCallout : SET [0:?] OF IfcDraughtingCalloutRelationship FOR RelatedDraughtingCallout;\n\tIsRelatedToCallout : SET [0:?] OF IfcDraughtingCalloutRelationship FOR RelatingDraughtingCallout;\nEND_ENTITY;\n\nENTITY IfcDraughtingCalloutRelationship\n SUPERTYPE OF (ONEOF\n\t(IfcDimensionCalloutRelationship\n\t,IfcDimensionPair));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRelatingDraughtingCallout : IfcDraughtingCallout;\n\tRelatedDraughtingCallout : IfcDraughtingCallout;\nEND_ENTITY;\n\nENTITY IfcDraughtingPreDefinedColour\n SUBTYPE OF (IfcPreDefinedColour);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['black','red','green','blue','yellow',\n                  'magenta','cyan','white','by layer'];\nEND_ENTITY;\n\nENTITY IfcDraughtingPreDefinedCurveFont\n SUBTYPE OF (IfcPreDefinedCurveFont);\n WHERE\n\tWR31 : SELF\\IfcPredefinedItem.Name IN\n                    ['continuous',\n                     'chain',\n                     'chain double dash',\n                     'dashed',\n                     'dotted',\n                     'by layer'];\nEND_ENTITY;\n\nENTITY IfcDraughtingPreDefinedTextFont\n SUBTYPE OF (IfcPreDefinedTextFont);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['ISO 3098-1 font A','ISO 3098-1 font B'];\nEND_ENTITY;\n\nENTITY IfcDuctFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcDuctFittingTypeEnum;\n WHERE\n\tWR2 : (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDuctSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcDuctSegmentTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcDuctSegmentTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcDuctSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDuctSilencerType\n SUBTYPE OF (IfcFlowTreatmentDeviceType);\n\tPredefinedType : IfcDuctSilencerTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcDuctSilencerTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcDuctSilencerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcEdge\n SUPERTYPE OF (ONEOF\n\t(IfcEdgeCurve\n\t,IfcOrientedEdge\n\t,IfcSubedge))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tEdgeStart : IfcVertex;\n\tEdgeEnd : IfcVertex;\nEND_ENTITY;\n\nENTITY IfcEdgeCurve\n SUBTYPE OF (IfcEdge);\n\tEdgeGeometry : IfcCurve;\n\tSameSense : BOOLEAN;\nEND_ENTITY;\n\nENTITY IfcEdgeFeature\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcChamferEdgeFeature\n\t,IfcRoundedEdgeFeature))\n SUBTYPE OF (IfcFeatureElementSubtraction);\n\tFeatureLength : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcEdgeLoop\n SUBTYPE OF (IfcLoop);\n\tEdgeList : LIST [1:?] OF IfcOrientedEdge;\n DERIVE\n\tNe : INTEGER := SIZEOF(EdgeList);\n WHERE\n\tWR1 : (EdgeList[1].EdgeStart) :=: (EdgeList[Ne].EdgeEnd);\n\tWR2 : IfcLoopHeadToTail(SELF);\nEND_ENTITY;\n\nENTITY IfcElectricApplianceType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcElectricApplianceTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricDistributionPoint\n SUBTYPE OF (IfcFlowController);\n\tDistributionPointFunction : IfcElectricDistributionPointFunctionEnum;\n\tUserDefinedFunction : OPTIONAL IfcLabel;\n WHERE\n\tWR31 : (DistributionPointFunction <> IfcElectricDistributionPointFunctionEnum.USERDEFINED) OR\n             ((DistributionPointFunction = IfcElectricDistributionPointFunctionEnum.USERDEFINED) AND EXISTS(SELF\\IfcElectricDistributionPoint.UserDefinedFunction));\nEND_ENTITY;\n\nENTITY IfcElectricFlowStorageDeviceType\n SUBTYPE OF (IfcFlowStorageDeviceType);\n\tPredefinedType : IfcElectricFlowStorageDeviceTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricGeneratorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcElectricGeneratorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricHeaterType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcElectricHeaterTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricMotorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcElectricMotorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricTimeControlType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcElectricTimeControlTypeEnum;\nEND_ENTITY;\n\nENTITY IfcElectricalBaseProperties\n SUBTYPE OF (IfcEnergyProperties);\n\tElectricCurrentType : OPTIONAL IfcElectricCurrentEnum;\n\tInputVoltage : IfcElectricVoltageMeasure;\n\tInputFrequency : IfcFrequencyMeasure;\n\tFullLoadCurrent : OPTIONAL IfcElectricCurrentMeasure;\n\tMinimumCircuitCurrent : OPTIONAL IfcElectricCurrentMeasure;\n\tMaximumPowerInput : OPTIONAL IfcPowerMeasure;\n\tRatedPowerInput : OPTIONAL IfcPowerMeasure;\n\tInputPhase : INTEGER;\nEND_ENTITY;\n\nENTITY IfcElectricalCircuit\n SUBTYPE OF (IfcSystem);\nEND_ENTITY;\n\nENTITY IfcElectricalElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuildingElement\n\t,IfcDistributionElement\n\t,IfcElectricalElement\n\t,IfcElementAssembly\n\t,IfcElementComponent\n\t,IfcEquipmentElement\n\t,IfcFeatureElement\n\t,IfcFurnishingElement\n\t,IfcTransportElement\n\t,IfcVirtualElement))\n SUBTYPE OF (IfcProduct);\n\tTag : OPTIONAL IfcIdentifier;\n INVERSE\n\tHasStructuralMember : SET [0:?] OF IfcRelConnectsStructuralElement FOR RelatingElement;\n\tFillsVoids : SET [0:1] OF IfcRelFillsElement FOR RelatedBuildingElement;\n\tConnectedTo : SET [0:?] OF IfcRelConnectsElements FOR RelatingElement;\n\tHasCoverings : SET [0:?] OF IfcRelCoversBldgElements FOR RelatingBuildingElement;\n\tHasProjections : SET [0:?] OF IfcRelProjectsElement FOR RelatingElement;\n\tReferencedInStructures : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatedElements;\n\tHasPorts : SET [0:?] OF IfcRelConnectsPortToElement FOR RelatedElement;\n\tHasOpenings : SET [0:?] OF IfcRelVoidsElement FOR RelatingBuildingElement;\n\tIsConnectionRealization : SET [0:?] OF IfcRelConnectsWithRealizingElements FOR RealizingElements;\n\tProvidesBoundaries : SET [0:?] OF IfcRelSpaceBoundary FOR RelatedBuildingElement;\n\tConnectedFrom : SET [0:?] OF IfcRelConnectsElements FOR RelatedElement;\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\nEND_ENTITY;\n\nENTITY IfcElementAssembly\n SUBTYPE OF (IfcElement);\n\tAssemblyPlace : OPTIONAL IfcAssemblyPlaceEnum;\n\tPredefinedType : IfcElementAssemblyTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcElementAssemblyTypeEnum.USERDEFINED) OR ((PredefinedType = IfcElementAssemblyTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcElementComponent\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDiscreteAccessory\n\t,IfcFastener))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcElementComponentType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDiscreteAccessoryType\n\t,IfcFastenerType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcElementQuantity\n SUBTYPE OF (IfcPropertySetDefinition);\n\tMethodOfMeasurement : OPTIONAL IfcLabel;\n\tQuantities : SET [1:?] OF IfcPhysicalQuantity;\nEND_ENTITY;\n\nENTITY IfcElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuildingElementType\n\t,IfcDistributionElementType\n\t,IfcElementComponentType\n\t,IfcFurnishingElementType\n\t,IfcSpatialStructureElementType\n\t,IfcTransportElementType))\n SUBTYPE OF (IfcTypeProduct);\n\tElementType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcElementarySurface\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPlane))\n SUBTYPE OF (IfcSurface);\n\tPosition : IfcAxis2Placement3D;\n DERIVE\n\tDim : IfcDimensionCount := Position.Dim;\nEND_ENTITY;\n\nENTITY IfcEllipse\n SUBTYPE OF (IfcConic);\n\tSemiAxis1 : IfcPositiveLengthMeasure;\n\tSemiAxis2 : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcEllipseProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tSemiAxis1 : IfcPositiveLengthMeasure;\n\tSemiAxis2 : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcEnergyConversionDevice\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcEnergyConversionDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAirToAirHeatRecoveryType\n\t,IfcBoilerType\n\t,IfcChillerType\n\t,IfcCoilType\n\t,IfcCondenserType\n\t,IfcCooledBeamType\n\t,IfcCoolingTowerType\n\t,IfcElectricGeneratorType\n\t,IfcElectricMotorType\n\t,IfcEvaporativeCoolerType\n\t,IfcEvaporatorType\n\t,IfcHeatExchangerType\n\t,IfcHumidifierType\n\t,IfcMotorConnectionType\n\t,IfcSpaceHeaterType\n\t,IfcTransformerType\n\t,IfcTubeBundleType\n\t,IfcUnitaryEquipmentType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcEnergyProperties\n SUPERTYPE OF (ONEOF\n\t(IfcElectricalBaseProperties))\n SUBTYPE OF (IfcPropertySetDefinition);\n\tEnergySequence : OPTIONAL IfcEnergySequenceEnum;\n\tUserDefinedEnergySequence : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcEnvironmentalImpactValue\n SUBTYPE OF (IfcAppliedValue);\n\tImpactType : IfcLabel;\n\tCategory : IfcEnvironmentalImpactCategoryEnum;\n\tUserDefinedCategory : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : (Category <> IfcEnvironmentalImpactCategoryEnum.USERDEFINED) OR\n            ((Category = IfcEnvironmentalImpactCategoryEnum.USERDEFINED) AND EXISTS(SELF\\IfcEnvironmentalImpactValue.UserDefinedCategory));\nEND_ENTITY;\n\nENTITY IfcEquipmentElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcEquipmentStandard\n SUBTYPE OF (IfcControl);\nEND_ENTITY;\n\nENTITY IfcEvaporativeCoolerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcEvaporativeCoolerTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcEvaporativeCoolerTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcEvaporativeCoolerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcEvaporatorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcEvaporatorTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcEvaporatorTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcEvaporatorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcExtendedMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tExtendedProperties : SET [1:?] OF IfcProperty;\n\tDescription : OPTIONAL IfcText;\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcExternalReference\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcClassificationReference\n\t,IfcDocumentReference\n\t,IfcExternallyDefinedHatchStyle\n\t,IfcExternallyDefinedSurfaceStyle\n\t,IfcExternallyDefinedSymbol\n\t,IfcExternallyDefinedTextFont\n\t,IfcLibraryReference));\n\tLocation : OPTIONAL IfcLabel;\n\tItemReference : OPTIONAL IfcIdentifier;\n\tName : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS(ItemReference) OR EXISTS(Location) OR EXISTS(Name);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedHatchStyle\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedSurfaceStyle\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedSymbol\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedTextFont\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExtrudedAreaSolid\n SUBTYPE OF (IfcSweptAreaSolid);\n\tExtrudedDirection : IfcDirection;\n\tDepth : IfcPositiveLengthMeasure;\n WHERE\n\tWR31 : IfcDotProduct(IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcDirection([0.0,0.0,1.0]), SELF.ExtrudedDirection) <> 0.0;\nEND_ENTITY;\n\nENTITY IfcFace\n SUPERTYPE OF (ONEOF\n\t(IfcFaceSurface))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tBounds : SET [1:?] OF IfcFaceBound;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* Bounds | 'IFC2X3.IFCFACEOUTERBOUND' IN TYPEOF(temp))) <= 1;\nEND_ENTITY;\n\nENTITY IfcFaceBasedSurfaceModel\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tFbsmFaces : SET [1:?] OF IfcConnectedFaceSet;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcFaceBound\n SUPERTYPE OF (ONEOF\n\t(IfcFaceOuterBound))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tBound : IfcLoop;\n\tOrientation : BOOLEAN;\nEND_ENTITY;\n\nENTITY IfcFaceOuterBound\n SUBTYPE OF (IfcFaceBound);\nEND_ENTITY;\n\nENTITY IfcFaceSurface\n SUBTYPE OF (IfcFace);\n\tFaceSurface : IfcSurface;\n\tSameSense : BOOLEAN;\nEND_ENTITY;\n\nENTITY IfcFacetedBrep\n SUBTYPE OF (IfcManifoldSolidBrep);\nEND_ENTITY;\n\nENTITY IfcFacetedBrepWithVoids\n SUBTYPE OF (IfcManifoldSolidBrep);\n\tVoids : SET [1:?] OF IfcClosedShell;\nEND_ENTITY;\n\nENTITY IfcFailureConnectionCondition\n SUBTYPE OF (IfcStructuralConnectionCondition);\n\tTensionFailureX : OPTIONAL IfcForceMeasure;\n\tTensionFailureY : OPTIONAL IfcForceMeasure;\n\tTensionFailureZ : OPTIONAL IfcForceMeasure;\n\tCompressionFailureX : OPTIONAL IfcForceMeasure;\n\tCompressionFailureY : OPTIONAL IfcForceMeasure;\n\tCompressionFailureZ : OPTIONAL IfcForceMeasure;\nEND_ENTITY;\n\nENTITY IfcFanType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcFanTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcFanTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcFanTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFastener\n SUPERTYPE OF (ONEOF\n\t(IfcMechanicalFastener))\n SUBTYPE OF (IfcElementComponent);\nEND_ENTITY;\n\nENTITY IfcFastenerType\n SUPERTYPE OF (ONEOF\n\t(IfcMechanicalFastenerType))\n SUBTYPE OF (IfcElementComponentType);\nEND_ENTITY;\n\nENTITY IfcFeatureElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcFeatureElementAddition\n\t,IfcFeatureElementSubtraction))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcFeatureElementAddition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcProjectionElement))\n SUBTYPE OF (IfcFeatureElement);\n INVERSE\n\tProjectsElements : IfcRelProjectsElement FOR RelatedFeatureElement;\nEND_ENTITY;\n\nENTITY IfcFeatureElementSubtraction\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcEdgeFeature\n\t,IfcOpeningElement))\n SUBTYPE OF (IfcFeatureElement);\n INVERSE\n\tVoidsElements : IfcRelVoidsElement FOR RelatedOpeningElement;\nEND_ENTITY;\n\nENTITY IfcFillAreaStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tFillStyles : SET [1:?] OF IfcFillStyleSelect;\n WHERE\n\tWR11 : SIZEOF(QUERY(Style <* SELF.FillStyles |\n               'IFC2X3.IFCCOLOUR' IN\n                TYPEOF(Style)\n               )) <= 1;\n\tWR12 : SIZEOF(QUERY(Style <* SELF.FillStyles |\n               'IFC2X3.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN\n                TYPEOF(Style)\n               )) <= 1;\n\tWR13 : IfcCorrectFillAreaStyle(SELF.FillStyles);\nEND_ENTITY;\n\nENTITY IfcFillAreaStyleHatching\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tHatchLineAppearance : IfcCurveStyle;\n\tStartOfNextHatchLine : IfcHatchLineDistanceSelect;\n\tPointOfReferenceHatchLine : OPTIONAL IfcCartesianPoint;\n\tPatternStart : OPTIONAL IfcCartesianPoint;\n\tHatchLineAngle : IfcPlaneAngleMeasure;\n WHERE\n\tWR21 : NOT(\n              'IFC2X3.IFCTWODIRECTIONREPEATFACTOR' \n              IN TYPEOF(StartOfNextHatchLine)\n             );\n\tWR22 : NOT(EXISTS(PatternStart)) \n             OR (PatternStart.Dim = 2);\n\tWR23 : NOT(EXISTS(PointOfReferenceHatchLine)) \n             OR (PointOfReferenceHatchLine.Dim = 2);\nEND_ENTITY;\n\nENTITY IfcFillAreaStyleTileSymbolWithStyle\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSymbol : IfcAnnotationSymbolOccurrence;\nEND_ENTITY;\n\nENTITY IfcFillAreaStyleTiles\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tTilingPattern : IfcOneDirectionRepeatFactor;\n\tTiles : SET [1:?] OF IfcFillAreaStyleTileShapeSelect;\n\tTilingScale : IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcFilterType\n SUBTYPE OF (IfcFlowTreatmentDeviceType);\n\tPredefinedType : IfcFilterTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcFilterTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcFilterTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFireSuppressionTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcFireSuppressionTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcFlowController\n SUPERTYPE OF (ONEOF\n\t(IfcElectricDistributionPoint))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowControllerType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAirTerminalBoxType\n\t,IfcDamperType\n\t,IfcElectricTimeControlType\n\t,IfcFlowMeterType\n\t,IfcProtectiveDeviceType\n\t,IfcSwitchingDeviceType\n\t,IfcValveType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowFitting\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowFittingType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCableCarrierFittingType\n\t,IfcDuctFittingType\n\t,IfcJunctionBoxType\n\t,IfcPipeFittingType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowInstrumentType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcFlowInstrumentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcFlowMeterType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcFlowMeterTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcFlowMeterTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcFlowMeterTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFlowMovingDevice\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowMovingDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCompressorType\n\t,IfcFanType\n\t,IfcPumpType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowSegment\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowSegmentType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCableCarrierSegmentType\n\t,IfcCableSegmentType\n\t,IfcDuctSegmentType\n\t,IfcPipeSegmentType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowStorageDevice\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowStorageDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcElectricFlowStorageDeviceType\n\t,IfcTankType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowTerminal\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowTerminalType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAirTerminalType\n\t,IfcElectricApplianceType\n\t,IfcElectricHeaterType\n\t,IfcFireSuppressionTerminalType\n\t,IfcGasTerminalType\n\t,IfcLampType\n\t,IfcLightFixtureType\n\t,IfcOutletType\n\t,IfcSanitaryTerminalType\n\t,IfcStackTerminalType\n\t,IfcWasteTerminalType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowTreatmentDevice\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowTreatmentDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDuctSilencerType\n\t,IfcFilterType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFluidFlowProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tPropertySource : IfcPropertySourceEnum;\n\tFlowConditionTimeSeries : OPTIONAL IfcTimeSeries;\n\tVelocityTimeSeries : OPTIONAL IfcTimeSeries;\n\tFlowrateTimeSeries : OPTIONAL IfcTimeSeries;\n\tFluid : IfcMaterial;\n\tPressureTimeSeries : OPTIONAL IfcTimeSeries;\n\tUserDefinedPropertySource : OPTIONAL IfcLabel;\n\tTemperatureSingleValue : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tWetBulbTemperatureSingleValue : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tWetBulbTemperatureTimeSeries : OPTIONAL IfcTimeSeries;\n\tTemperatureTimeSeries : OPTIONAL IfcTimeSeries;\n\tFlowrateSingleValue : OPTIONAL IfcDerivedMeasureValue;\n\tFlowConditionSingleValue : OPTIONAL IfcPositiveRatioMeasure;\n\tVelocitySingleValue : OPTIONAL IfcLinearVelocityMeasure;\n\tPressureSingleValue : OPTIONAL IfcPressureMeasure;\nEND_ENTITY;\n\nENTITY IfcFooting\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : IfcFootingTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR ((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcFuelProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tCombustionTemperature : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tCarbonContent : OPTIONAL IfcPositiveRatioMeasure;\n\tLowerHeatingValue : OPTIONAL IfcHeatingValueMeasure;\n\tHigherHeatingValue : OPTIONAL IfcHeatingValueMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcFurnishingElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcFurnishingElementType\n SUPERTYPE OF (ONEOF\n\t(IfcFurnitureType\n\t,IfcSystemFurnitureElementType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcFurnitureStandard\n SUBTYPE OF (IfcControl);\nEND_ENTITY;\n\nENTITY IfcFurnitureType\n SUBTYPE OF (IfcFurnishingElementType);\n\tAssemblyPlace : IfcAssemblyPlaceEnum;\nEND_ENTITY;\n\nENTITY IfcGasTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcGasTerminalTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcGasTerminalTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcGasTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcGeneralMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tMolecularWeight : OPTIONAL IfcMolecularWeightMeasure;\n\tPorosity : OPTIONAL IfcNormalisedRatioMeasure;\n\tMassDensity : OPTIONAL IfcMassDensityMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcGeneralProfileProperties\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralProfileProperties))\n SUBTYPE OF (IfcProfileProperties);\n\tPhysicalWeight : OPTIONAL IfcMassPerLengthMeasure;\n\tPerimeter : OPTIONAL IfcPositiveLengthMeasure;\n\tMinimumPlateThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tMaximumPlateThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tCrossSectionArea : OPTIONAL IfcAreaMeasure;\n WHERE\n\tWR1 : NOT(EXISTS(CrossSectionArea)) OR (CrossSectionArea > 0.);\nEND_ENTITY;\n\nENTITY IfcGeometricCurveSet\n SUBTYPE OF (IfcGeometricSet);\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcGeometricSet.Elements |\n            'IFC2X3.IFCSURFACE' IN TYPEOF(Temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationContext\n SUPERTYPE OF (ONEOF\n\t(IfcGeometricRepresentationSubContext))\n SUBTYPE OF (IfcRepresentationContext);\n\tCoordinateSpaceDimension : IfcDimensionCount;\n\tPrecision : OPTIONAL REAL;\n\tWorldCoordinateSystem : IfcAxis2Placement;\n\tTrueNorth : OPTIONAL IfcDirection;\n INVERSE\n\tHasSubContexts : SET [0:?] OF IfcGeometricRepresentationSubContext FOR ParentContext;\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAnnotationFillArea\n\t,IfcAnnotationSurface\n\t,IfcBooleanResult\n\t,IfcBoundingBox\n\t,IfcCartesianTransformationOperator\n\t,IfcCompositeCurveSegment\n\t,IfcCsgPrimitive3D\n\t,IfcCurve\n\t,IfcDefinedSymbol\n\t,IfcDirection\n\t,IfcDraughtingCallout\n\t,IfcFaceBasedSurfaceModel\n\t,IfcFillAreaStyleHatching\n\t,IfcFillAreaStyleTileSymbolWithStyle\n\t,IfcFillAreaStyleTiles\n\t,IfcGeometricSet\n\t,IfcHalfSpaceSolid\n\t,IfcLightSource\n\t,IfcOneDirectionRepeatFactor\n\t,IfcPlacement\n\t,IfcPlanarExtent\n\t,IfcPoint\n\t,IfcSectionedSpine\n\t,IfcShellBasedSurfaceModel\n\t,IfcSolidModel\n\t,IfcSurface\n\t,IfcTextLiteral\n\t,IfcVector))\n SUBTYPE OF (IfcRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationSubContext\n SUBTYPE OF (IfcGeometricRepresentationContext);\n\tParentContext : IfcGeometricRepresentationContext;\n\tTargetScale : OPTIONAL IfcPositiveRatioMeasure;\n\tTargetView : IfcGeometricProjectionEnum;\n\tUserDefinedTargetView : OPTIONAL IfcLabel;\n DERIVE\n\tSELF\\IfcGeometricRepresentationContext.WorldCoordinateSystem : IfcAxis2Placement := ParentContext.WorldCoordinateSystem;\n\tSELF\\IfcGeometricRepresentationContext.CoordinateSpaceDimension : IfcDimensionCount := ParentContext.CoordinateSpaceDimension;\n\tSELF\\IfcGeometricRepresentationContext.TrueNorth : IfcDirection := NVL(ParentContext.TrueNorth,SELF.WorldCoordinateSystem.P[2]);\n\tSELF\\IfcGeometricRepresentationContext.Precision : REAL := NVL(ParentContext.Precision,1.E-5);\n WHERE\n\tWR31 : NOT('IFC2X3.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(ParentContext));\n\tWR32 : (TargetView <> IfcGeometricProjectionEnum.USERDEFINED) OR \n             ((TargetView =  IfcGeometricProjectionEnum.USERDEFINED) AND \n              EXISTS(UserDefinedTargetView));\nEND_ENTITY;\n\nENTITY IfcGeometricSet\n SUPERTYPE OF (ONEOF\n\t(IfcGeometricCurveSet))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tElements : SET [1:?] OF IfcGeometricSetSelect;\n DERIVE\n\tDim : IfcDimensionCount := Elements[1].Dim;\n WHERE\n\tWR21 : SIZEOF(QUERY(Temp <* Elements |\n               Temp.Dim <> Elements[1].Dim))\n             = 0;\nEND_ENTITY;\n\nENTITY IfcGrid\n SUBTYPE OF (IfcProduct);\n\tUAxes : LIST [1:?] OF UNIQUE IfcGridAxis;\n\tVAxes : LIST [1:?] OF UNIQUE IfcGridAxis;\n\tWAxes : OPTIONAL LIST [1:?] OF UNIQUE IfcGridAxis;\n INVERSE\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\n WHERE\n\tWR41 : EXISTS(SELF\\IfcProduct.ObjectPlacement);\nEND_ENTITY;\n\nENTITY IfcGridAxis;\n\tAxisTag : OPTIONAL IfcLabel;\n\tAxisCurve : IfcCurve;\n\tSameSense : IfcBoolean;\n INVERSE\n\tPartOfW : SET [0:1] OF IfcGrid FOR WAxes;\n\tPartOfV : SET [0:1] OF IfcGrid FOR VAxes;\n\tPartOfU : SET [0:1] OF IfcGrid FOR UAxes;\n\tHasIntersections : SET [0:?] OF IfcVirtualGridIntersection FOR IntersectingAxes;\n WHERE\n\tWR1 : AxisCurve.Dim = 2;\n\tWR2 : (SIZEOF(PartOfU) = 1) XOR (SIZEOF(PartOfV) = 1) XOR (SIZEOF(PartOfW) = 1);\nEND_ENTITY;\n\nENTITY IfcGridPlacement\n SUBTYPE OF (IfcObjectPlacement);\n\tPlacementLocation : IfcVirtualGridIntersection;\n\tPlacementRefDirection : OPTIONAL IfcVirtualGridIntersection;\nEND_ENTITY;\n\nENTITY IfcGroup\n SUPERTYPE OF (ONEOF\n\t(IfcAsset\n\t,IfcCondition\n\t,IfcInventory\n\t,IfcStructuralLoadGroup\n\t,IfcStructuralResultGroup\n\t,IfcSystem\n\t,IfcZone))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tIsGroupedBy : IfcRelAssignsToGroup FOR RelatingGroup;\nEND_ENTITY;\n\nENTITY IfcHalfSpaceSolid\n SUPERTYPE OF (ONEOF\n\t(IfcBoxedHalfSpace\n\t,IfcPolygonalBoundedHalfSpace))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tBaseSurface : IfcSurface;\n\tAgreementFlag : BOOLEAN;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcHeatExchangerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcHeatExchangerTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcHeatExchangerTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcHeatExchangerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcHumidifierType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcHumidifierTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcHumidifierTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcHumidifierTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcHygroscopicMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tUpperVaporResistanceFactor : OPTIONAL IfcPositiveRatioMeasure;\n\tLowerVaporResistanceFactor : OPTIONAL IfcPositiveRatioMeasure;\n\tIsothermalMoistureCapacity : OPTIONAL IfcIsothermalMoistureCapacityMeasure;\n\tVaporPermeability : OPTIONAL IfcVaporPermeabilityMeasure;\n\tMoistureDiffusivity : OPTIONAL IfcMoistureDiffusivityMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcIShapeProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcAsymmetricIShapeProfileDef))\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tOverallWidth : IfcPositiveLengthMeasure;\n\tOverallDepth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : FlangeThickness < (OverallDepth / 2.);\n\tWR2 : WebThickness < OverallWidth;\n\tWR3 : NOT(EXISTS(FilletRadius)) OR\n            ((FilletRadius <= (OverallWidth - WebThickness)/2.) AND \n             (FilletRadius <= (OverallDepth - (2. * FlangeThickness))/2.));\nEND_ENTITY;\n\nENTITY IfcImageTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tUrlReference : IfcIdentifier;\nEND_ENTITY;\n\nENTITY IfcInventory\n SUBTYPE OF (IfcGroup);\n\tInventoryType : IfcInventoryTypeEnum;\n\tJurisdiction : IfcActorSelect;\n\tResponsiblePersons : SET [1:?] OF IfcPerson;\n\tLastUpdateDate : IfcCalendarDate;\n\tCurrentValue : OPTIONAL IfcCostValue;\n\tOriginalValue : OPTIONAL IfcCostValue;\n WHERE\n\tWR41 : SIZEOF(QUERY(temp <* SELF\\IfcGroup.IsGroupedBy.RelatedObjects |\n                 NOT( ('IFC2X3.IFCSPACE' IN TYPEOF (temp)) OR \n                      ('IFC2X3.IFCASSET' IN TYPEOF (temp)) OR\n                      ('IFC2X3.IFCFURNISHINGELEMENT' IN TYPEOF (temp))\n                 ))) = 0;\nEND_ENTITY;\n\nENTITY IfcIrregularTimeSeries\n SUBTYPE OF (IfcTimeSeries);\n\tValues : LIST [1:?] OF IfcIrregularTimeSeriesValue;\nEND_ENTITY;\n\nENTITY IfcIrregularTimeSeriesValue;\n\tTimeStamp : IfcDateTimeSelect;\n\tListValues : LIST [1:?] OF IfcValue;\nEND_ENTITY;\n\nENTITY IfcJunctionBoxType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcJunctionBoxTypeEnum;\nEND_ENTITY;\n\nENTITY IfcLShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tLegSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tCentreOfGravityInX : OPTIONAL IfcPositiveLengthMeasure;\n\tCentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR21 : Thickness < Depth;\n\tWR22 : NOT(EXISTS(Width)) OR (Thickness < Width);\nEND_ENTITY;\n\nENTITY IfcLaborResource\n SUBTYPE OF (IfcConstructionResource);\n\tSkillSet : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcLampType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcLampTypeEnum;\nEND_ENTITY;\n\nENTITY IfcLibraryInformation;\n\tName : IfcLabel;\n\tVersion : OPTIONAL IfcLabel;\n\tPublisher : OPTIONAL IfcOrganization;\n\tVersionDate : OPTIONAL IfcCalendarDate;\n\tLibraryReference : OPTIONAL SET [1:?] OF IfcLibraryReference;\nEND_ENTITY;\n\nENTITY IfcLibraryReference\n SUBTYPE OF (IfcExternalReference);\n INVERSE\n\tReferenceIntoLibrary : SET [0:1] OF IfcLibraryInformation FOR LibraryReference;\nEND_ENTITY;\n\nENTITY IfcLightDistributionData;\n\tMainPlaneAngle : IfcPlaneAngleMeasure;\n\tSecondaryPlaneAngle : LIST [1:?] OF IfcPlaneAngleMeasure;\n\tLuminousIntensity : LIST [1:?] OF IfcLuminousIntensityDistributionMeasure;\nEND_ENTITY;\n\nENTITY IfcLightFixtureType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcLightFixtureTypeEnum;\nEND_ENTITY;\n\nENTITY IfcLightIntensityDistribution;\n\tLightDistributionCurve : IfcLightDistributionCurveEnum;\n\tDistributionData : LIST [1:?] OF IfcLightDistributionData;\nEND_ENTITY;\n\nENTITY IfcLightSource\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcLightSourceAmbient\n\t,IfcLightSourceDirectional\n\t,IfcLightSourceGoniometric\n\t,IfcLightSourcePositional))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tName : OPTIONAL IfcLabel;\n\tLightColour : IfcColourRgb;\n\tAmbientIntensity : OPTIONAL IfcNormalisedRatioMeasure;\n\tIntensity : OPTIONAL IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcLightSourceAmbient\n SUBTYPE OF (IfcLightSource);\nEND_ENTITY;\n\nENTITY IfcLightSourceDirectional\n SUBTYPE OF (IfcLightSource);\n\tOrientation : IfcDirection;\nEND_ENTITY;\n\nENTITY IfcLightSourceGoniometric\n SUBTYPE OF (IfcLightSource);\n\tPosition : IfcAxis2Placement3D;\n\tColourAppearance : OPTIONAL IfcColourRgb;\n\tColourTemperature : IfcThermodynamicTemperatureMeasure;\n\tLuminousFlux : IfcLuminousFluxMeasure;\n\tLightEmissionSource : IfcLightEmissionSourceEnum;\n\tLightDistributionDataSource : IfcLightDistributionDataSourceSelect;\nEND_ENTITY;\n\nENTITY IfcLightSourcePositional\n SUPERTYPE OF (ONEOF\n\t(IfcLightSourceSpot))\n SUBTYPE OF (IfcLightSource);\n\tPosition : IfcCartesianPoint;\n\tRadius : IfcPositiveLengthMeasure;\n\tConstantAttenuation : IfcReal;\n\tDistanceAttenuation : IfcReal;\n\tQuadricAttenuation : IfcReal;\nEND_ENTITY;\n\nENTITY IfcLightSourceSpot\n SUBTYPE OF (IfcLightSourcePositional);\n\tOrientation : IfcDirection;\n\tConcentrationExponent : OPTIONAL IfcReal;\n\tSpreadAngle : IfcPositivePlaneAngleMeasure;\n\tBeamWidthAngle : IfcPositivePlaneAngleMeasure;\nEND_ENTITY;\n\nENTITY IfcLine\n SUBTYPE OF (IfcCurve);\n\tPnt : IfcCartesianPoint;\n\tDir : IfcVector;\n WHERE\n\tWR1 : Dir.Dim = Pnt.Dim;\nEND_ENTITY;\n\nENTITY IfcLinearDimension\n SUBTYPE OF (IfcDimensionCurveDirectedCallout);\nEND_ENTITY;\n\nENTITY IfcLocalPlacement\n SUBTYPE OF (IfcObjectPlacement);\n\tPlacementRelTo : OPTIONAL IfcObjectPlacement;\n\tRelativePlacement : IfcAxis2Placement;\n WHERE\n\tWR21 : IfcCorrectLocalPlacement(RelativePlacement, PlacementRelTo);\nEND_ENTITY;\n\nENTITY IfcLocalTime;\n\tHourComponent : IfcHourInDay;\n\tMinuteComponent : OPTIONAL IfcMinuteInHour;\n\tSecondComponent : OPTIONAL IfcSecondInMinute;\n\tZone : OPTIONAL IfcCoordinatedUniversalTimeOffset;\n\tDaylightSavingOffset : OPTIONAL IfcDaylightSavingHour;\n WHERE\n\tWR21 : IfcValidTime (SELF);\nEND_ENTITY;\n\nENTITY IfcLoop\n SUPERTYPE OF (ONEOF\n\t(IfcEdgeLoop\n\t,IfcPolyLoop\n\t,IfcVertexLoop))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcManifoldSolidBrep\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcFacetedBrep\n\t,IfcFacetedBrepWithVoids))\n SUBTYPE OF (IfcSolidModel);\n\tOuter : IfcClosedShell;\nEND_ENTITY;\n\nENTITY IfcMappedItem\n SUBTYPE OF (IfcRepresentationItem);\n\tMappingSource : IfcRepresentationMap;\n\tMappingTarget : IfcCartesianTransformationOperator;\nEND_ENTITY;\n\nENTITY IfcMaterial;\n\tName : IfcLabel;\n INVERSE\n\tHasRepresentation : SET [0:1] OF IfcMaterialDefinitionRepresentation FOR RepresentedMaterial;\n\tClassifiedAs : SET [0:1] OF IfcMaterialClassificationRelationship FOR ClassifiedMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialClassificationRelationship;\n\tMaterialClassifications : SET [1:?] OF IfcClassificationNotationSelect;\n\tClassifiedMaterial : IfcMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialDefinitionRepresentation\n SUBTYPE OF (IfcProductRepresentation);\n\tRepresentedMaterial : IfcMaterial;\n WHERE\n\tWR11 : SIZEOF(QUERY(temp <* Representations | \n               (NOT('IFC2X3.IFCSTYLEDREPRESENTATION' IN TYPEOF(temp)))\n             )) = 0;\nEND_ENTITY;\n\nENTITY IfcMaterialLayer;\n\tMaterial : OPTIONAL IfcMaterial;\n\tLayerThickness : IfcPositiveLengthMeasure;\n\tIsVentilated : OPTIONAL IfcLogical;\n INVERSE\n\tToMaterialLayerSet : IfcMaterialLayerSet FOR MaterialLayers;\nEND_ENTITY;\n\nENTITY IfcMaterialLayerSet;\n\tMaterialLayers : LIST [1:?] OF IfcMaterialLayer;\n\tLayerSetName : OPTIONAL IfcLabel;\n DERIVE\n\tTotalThickness : IfcLengthMeasure := IfcMlsTotalThickness(SELF);\nEND_ENTITY;\n\nENTITY IfcMaterialLayerSetUsage;\n\tForLayerSet : IfcMaterialLayerSet;\n\tLayerSetDirection : IfcLayerSetDirectionEnum;\n\tDirectionSense : IfcDirectionSenseEnum;\n\tOffsetFromReferenceLine : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMaterialList;\n\tMaterials : LIST [1:?] OF IfcMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialProperties\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcExtendedMaterialProperties\n\t,IfcFuelProperties\n\t,IfcGeneralMaterialProperties\n\t,IfcHygroscopicMaterialProperties\n\t,IfcMechanicalMaterialProperties\n\t,IfcOpticalMaterialProperties\n\t,IfcProductsOfCombustionProperties\n\t,IfcThermalMaterialProperties\n\t,IfcWaterProperties));\n\tMaterial : IfcMaterial;\nEND_ENTITY;\n\nENTITY IfcMeasureWithUnit;\n\tValueComponent : IfcValue;\n\tUnitComponent : IfcUnit;\nEND_ENTITY;\n\nENTITY IfcMechanicalConcreteMaterialProperties\n SUBTYPE OF (IfcMechanicalMaterialProperties);\n\tCompressiveStrength : OPTIONAL IfcPressureMeasure;\n\tMaxAggregateSize : OPTIONAL IfcPositiveLengthMeasure;\n\tAdmixturesDescription : OPTIONAL IfcText;\n\tWorkability : OPTIONAL IfcText;\n\tProtectivePoreRatio : OPTIONAL IfcNormalisedRatioMeasure;\n\tWaterImpermeability : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcMechanicalFastener\n SUBTYPE OF (IfcFastener);\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tNominalLength : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMechanicalFastenerType\n SUBTYPE OF (IfcFastenerType);\nEND_ENTITY;\n\nENTITY IfcMechanicalMaterialProperties\n SUPERTYPE OF (ONEOF\n\t(IfcMechanicalConcreteMaterialProperties\n\t,IfcMechanicalSteelMaterialProperties))\n SUBTYPE OF (IfcMaterialProperties);\n\tDynamicViscosity : OPTIONAL IfcDynamicViscosityMeasure;\n\tYoungModulus : OPTIONAL IfcModulusOfElasticityMeasure;\n\tShearModulus : OPTIONAL IfcModulusOfElasticityMeasure;\n\tPoissonRatio : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalExpansionCoefficient : OPTIONAL IfcThermalExpansionCoefficientMeasure;\n UNIQUE\n\tUR11 : Material;\n WHERE\n\tWR21 : NOT(EXISTS(YoungModulus)) OR (YoungModulus >= 0.0);\n\tWR22 : NOT(EXISTS(ShearModulus)) OR (ShearModulus >= 0.0);\nEND_ENTITY;\n\nENTITY IfcMechanicalSteelMaterialProperties\n SUBTYPE OF (IfcMechanicalMaterialProperties);\n\tYieldStress : OPTIONAL IfcPressureMeasure;\n\tUltimateStress : OPTIONAL IfcPressureMeasure;\n\tUltimateStrain : OPTIONAL IfcPositiveRatioMeasure;\n\tHardeningModule : OPTIONAL IfcModulusOfElasticityMeasure;\n\tProportionalStress : OPTIONAL IfcPressureMeasure;\n\tPlasticStrain : OPTIONAL IfcPositiveRatioMeasure;\n\tRelaxations : OPTIONAL SET [1:?] OF IfcRelaxation;\n WHERE\n\tWR31 : NOT(EXISTS(YieldStress)) OR (YieldStress >= 0.);\n\tWR32 : NOT(EXISTS(UltimateStress)) OR (UltimateStress >= 0.);\n\tWR33 : NOT(EXISTS(HardeningModule)) OR (HardeningModule >= 0.);\n\tWR34 : NOT(EXISTS(ProportionalStress)) OR (ProportionalStress >= 0.);\nEND_ENTITY;\n\nENTITY IfcMember\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcMemberType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcMemberTypeEnum;\nEND_ENTITY;\n\nENTITY IfcMetric\n SUBTYPE OF (IfcConstraint);\n\tBenchmark : IfcBenchmarkEnum;\n\tValueSource : OPTIONAL IfcLabel;\n\tDataValue : IfcMetricValueSelect;\nEND_ENTITY;\n\nENTITY IfcMonetaryUnit;\n\tCurrency : IfcCurrencyEnum;\nEND_ENTITY;\n\nENTITY IfcMotorConnectionType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcMotorConnectionTypeEnum;\nEND_ENTITY;\n\nENTITY IfcMove\n SUBTYPE OF (IfcTask);\n\tMoveFrom : IfcSpatialStructureElement;\n\tMoveTo : IfcSpatialStructureElement;\n\tPunchList : OPTIONAL LIST [1:?] OF UNIQUE IfcText;\n WHERE\n\tWR1 : SIZEOF(SELF\\IfcProcess.OperatesOn) >= 1;\n\tWR2 : SIZEOF(QUERY(temp <* OperatesOn |\n              SIZEOF(QUERY(temp2 <* temp.RelatedObjects |\n                ('IFC2X3.IFCACTOR' IN TYPEOF (temp2)) OR\n                ('IFC2X3.IFCEQUIPMENTELEMENT' IN TYPEOF (temp2)) OR\n                ('IFC2X3.IFCFURNISHINGELEMENT' IN TYPEOF (temp2)) )) >=1\n              )) >= 1;\n\tWR3 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcNamedUnit\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcContextDependentUnit\n\t,IfcConversionBasedUnit\n\t,IfcSIUnit));\n\tDimensions : IfcDimensionalExponents;\n\tUnitType : IfcUnitEnum;\n WHERE\n\tWR1 : IfcCorrectDimensions (SELF.UnitType, SELF.Dimensions);\nEND_ENTITY;\n\nENTITY IfcObject\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcActor\n\t,IfcControl\n\t,IfcGroup\n\t,IfcProcess\n\t,IfcProduct\n\t,IfcProject\n\t,IfcResource))\n SUBTYPE OF (IfcObjectDefinition);\n\tObjectType : OPTIONAL IfcLabel;\n INVERSE\n\tIsDefinedBy : SET [0:?] OF IfcRelDefines FOR RelatedObjects;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* IsDefinedBy | 'IFC2X3.IFCRELDEFINESBYTYPE' IN TYPEOF(temp))) <= 1;\nEND_ENTITY;\n\nENTITY IfcObjectDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcObject\n\t,IfcTypeObject))\n SUBTYPE OF (IfcRoot);\n INVERSE\n\tHasAssignments : SET [0:?] OF IfcRelAssigns FOR RelatedObjects;\n\tIsDecomposedBy : SET [0:?] OF IfcRelDecomposes FOR RelatingObject;\n\tDecomposes : SET [0:1] OF IfcRelDecomposes FOR RelatedObjects;\n\tHasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects;\nEND_ENTITY;\n\nENTITY IfcObjectPlacement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcGridPlacement\n\t,IfcLocalPlacement));\n INVERSE\n\tPlacesObject : SET [1:1] OF IfcProduct FOR ObjectPlacement;\n\tReferencedByPlacements : SET [0:?] OF IfcLocalPlacement FOR PlacementRelTo;\nEND_ENTITY;\n\nENTITY IfcObjective\n SUBTYPE OF (IfcConstraint);\n\tBenchmarkValues : OPTIONAL IfcMetric;\n\tResultValues : OPTIONAL IfcMetric;\n\tObjectiveQualifier : IfcObjectiveEnum;\n\tUserDefinedQualifier : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : (ObjectiveQualifier <> IfcObjectiveEnum.USERDEFINED) OR\n             ((ObjectiveQualifier = IfcObjectiveEnum.USERDEFINED) AND EXISTS(SELF\\IfcObjective.UserDefinedQualifier));\nEND_ENTITY;\n\nENTITY IfcOccupant\n SUBTYPE OF (IfcActor);\n\tPredefinedType : IfcOccupantTypeEnum;\n WHERE\n\tWR31 : NOT(PredefinedType = IfcOccupantTypeEnum.USERDEFINED) \n             OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcOffsetCurve2D\n SUBTYPE OF (IfcCurve);\n\tBasisCurve : IfcCurve;\n\tDistance : IfcLengthMeasure;\n\tSelfIntersect : LOGICAL;\n WHERE\n\tWR1 : BasisCurve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcOffsetCurve3D\n SUBTYPE OF (IfcCurve);\n\tBasisCurve : IfcCurve;\n\tDistance : IfcLengthMeasure;\n\tSelfIntersect : LOGICAL;\n\tRefDirection : IfcDirection;\n WHERE\n\tWR1 : BasisCurve.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcOneDirectionRepeatFactor\n SUPERTYPE OF (ONEOF\n\t(IfcTwoDirectionRepeatFactor))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tRepeatFactor : IfcVector;\nEND_ENTITY;\n\nENTITY IfcOpenShell\n SUBTYPE OF (IfcConnectedFaceSet);\nEND_ENTITY;\n\nENTITY IfcOpeningElement\n SUBTYPE OF (IfcFeatureElementSubtraction);\n INVERSE\n\tHasFillings : SET [0:?] OF IfcRelFillsElement FOR RelatingOpeningElement;\nEND_ENTITY;\n\nENTITY IfcOpticalMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tVisibleTransmittance : OPTIONAL IfcPositiveRatioMeasure;\n\tSolarTransmittance : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalIrTransmittance : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalIrEmissivityBack : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalIrEmissivityFront : OPTIONAL IfcPositiveRatioMeasure;\n\tVisibleReflectanceBack : OPTIONAL IfcPositiveRatioMeasure;\n\tVisibleReflectanceFront : OPTIONAL IfcPositiveRatioMeasure;\n\tSolarReflectanceFront : OPTIONAL IfcPositiveRatioMeasure;\n\tSolarReflectanceBack : OPTIONAL IfcPositiveRatioMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcOrderAction\n SUBTYPE OF (IfcTask);\n\tActionID : IfcIdentifier;\n UNIQUE\n\tUR2 : ActionID;\nEND_ENTITY;\n\nENTITY IfcOrganization;\n\tId : OPTIONAL IfcIdentifier;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\n\tAddresses : OPTIONAL LIST [1:?] OF IfcAddress;\n INVERSE\n\tIsRelatedBy : SET [0:?] OF IfcOrganizationRelationship FOR RelatedOrganizations;\n\tRelates : SET [0:?] OF IfcOrganizationRelationship FOR RelatingOrganization;\n\tEngages : SET [0:?] OF IfcPersonAndOrganization FOR TheOrganization;\nEND_ENTITY;\n\nENTITY IfcOrganizationRelationship;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRelatingOrganization : IfcOrganization;\n\tRelatedOrganizations : SET [1:?] OF IfcOrganization;\nEND_ENTITY;\n\nENTITY IfcOrientedEdge\n SUBTYPE OF (IfcEdge);\n\tEdgeElement : IfcEdge;\n\tOrientation : BOOLEAN;\n DERIVE\n\tSELF\\IfcEdge.EdgeStart : IfcVertex := IfcBooleanChoose \n                               (Orientation, EdgeElement.EdgeStart, EdgeElement.EdgeEnd);\n\tSELF\\IfcEdge.EdgeEnd : IfcVertex := IfcBooleanChoose \n                               (Orientation, EdgeElement.EdgeEnd, EdgeElement.EdgeStart);\n WHERE\n\tWR1 : NOT('IFC2X3.IFCORIENTEDEDGE' IN TYPEOF(EdgeElement));\nEND_ENTITY;\n\nENTITY IfcOutletType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcOutletTypeEnum;\nEND_ENTITY;\n\nENTITY IfcOwnerHistory;\n\tOwningUser : IfcPersonAndOrganization;\n\tOwningApplication : IfcApplication;\n\tState : OPTIONAL IfcStateEnum;\n\tChangeAction : IfcChangeActionEnum;\n\tLastModifiedDate : OPTIONAL IfcTimeStamp;\n\tLastModifyingUser : OPTIONAL IfcPersonAndOrganization;\n\tLastModifyingApplication : OPTIONAL IfcApplication;\n\tCreationDate : IfcTimeStamp;\nEND_ENTITY;\n\nENTITY IfcParameterizedProfileDef\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCShapeProfileDef\n\t,IfcCircleProfileDef\n\t,IfcCraneRailAShapeProfileDef\n\t,IfcCraneRailFShapeProfileDef\n\t,IfcEllipseProfileDef\n\t,IfcIShapeProfileDef\n\t,IfcLShapeProfileDef\n\t,IfcRectangleProfileDef\n\t,IfcTShapeProfileDef\n\t,IfcTrapeziumProfileDef\n\t,IfcUShapeProfileDef\n\t,IfcZShapeProfileDef))\n SUBTYPE OF (IfcProfileDef);\n\tPosition : IfcAxis2Placement2D;\nEND_ENTITY;\n\nENTITY IfcPath\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tEdgeList : LIST [1:?] OF UNIQUE IfcOrientedEdge;\n WHERE\n\tWR1 : IfcPathHeadToTail(SELF);\nEND_ENTITY;\n\nENTITY IfcPerformanceHistory\n SUBTYPE OF (IfcControl);\n\tLifeCyclePhase : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcPermeableCoveringProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tOperationType : IfcPermeableCoveringOperationEnum;\n\tPanelPosition : IfcWindowPanelPositionEnum;\n\tFrameDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tFrameThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\nEND_ENTITY;\n\nENTITY IfcPermit\n SUBTYPE OF (IfcControl);\n\tPermitID : IfcIdentifier;\n UNIQUE\n\tUR2 : PermitID;\nEND_ENTITY;\n\nENTITY IfcPerson;\n\tId : OPTIONAL IfcIdentifier;\n\tFamilyName : OPTIONAL IfcLabel;\n\tGivenName : OPTIONAL IfcLabel;\n\tMiddleNames : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPrefixTitles : OPTIONAL LIST [1:?] OF IfcLabel;\n\tSuffixTitles : OPTIONAL LIST [1:?] OF IfcLabel;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\n\tAddresses : OPTIONAL LIST [1:?] OF IfcAddress;\n INVERSE\n\tEngagedIn : SET [0:?] OF IfcPersonAndOrganization FOR ThePerson;\n WHERE\n\tWR1 : EXISTS(FamilyName) OR \n            EXISTS(GivenName);\nEND_ENTITY;\n\nENTITY IfcPersonAndOrganization;\n\tThePerson : IfcPerson;\n\tTheOrganization : IfcOrganization;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\nEND_ENTITY;\n\nENTITY IfcPhysicalComplexQuantity\n SUBTYPE OF (IfcPhysicalQuantity);\n\tHasQuantities : SET [1:?] OF IfcPhysicalQuantity;\n\tDiscrimination : IfcLabel;\n\tQuality : OPTIONAL IfcLabel;\n\tUsage : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* HasQuantities | SELF :=: temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcPhysicalQuantity\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPhysicalComplexQuantity\n\t,IfcPhysicalSimpleQuantity));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tPartOfComplex : SET [0:1] OF IfcPhysicalComplexQuantity FOR HasQuantities;\nEND_ENTITY;\n\nENTITY IfcPhysicalSimpleQuantity\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcQuantityArea\n\t,IfcQuantityCount\n\t,IfcQuantityLength\n\t,IfcQuantityTime\n\t,IfcQuantityVolume\n\t,IfcQuantityWeight))\n SUBTYPE OF (IfcPhysicalQuantity);\n\tUnit : OPTIONAL IfcNamedUnit;\nEND_ENTITY;\n\nENTITY IfcPile\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : IfcPileTypeEnum;\n\tConstructionType : OPTIONAL IfcPileConstructionEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR ((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcPipeFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcPipeFittingTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcPipeFittingTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcPipeFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcPipeSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcPipeSegmentTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcPipeSegmentTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcPipeSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcPixelTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tWidth : IfcInteger;\n\tHeight : IfcInteger;\n\tColourComponents : IfcInteger;\n\tPixel : LIST [1:?] OF BINARY(32);\n WHERE\n\tWR21 : Width >= 1;\n\tWR22 : Height >= 1;\n\tWR23 : {1 <= ColourComponents <= 4};\n\tWR24 : SIZEOF(Pixel) = (Width * Height);\nEND_ENTITY;\n\nENTITY IfcPlacement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAxis1Placement\n\t,IfcAxis2Placement2D\n\t,IfcAxis2Placement3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tLocation : IfcCartesianPoint;\n DERIVE\n\tDim : IfcDimensionCount := Location.Dim;\nEND_ENTITY;\n\nENTITY IfcPlanarBox\n SUBTYPE OF (IfcPlanarExtent);\n\tPlacement : IfcAxis2Placement;\nEND_ENTITY;\n\nENTITY IfcPlanarExtent\n SUPERTYPE OF (ONEOF\n\t(IfcPlanarBox))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSizeInX : IfcLengthMeasure;\n\tSizeInY : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcPlane\n SUBTYPE OF (IfcElementarySurface);\nEND_ENTITY;\n\nENTITY IfcPlate\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcPlateType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcPlateTypeEnum;\nEND_ENTITY;\n\nENTITY IfcPoint\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCartesianPoint\n\t,IfcPointOnCurve\n\t,IfcPointOnSurface))\n SUBTYPE OF (IfcGeometricRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcPointOnCurve\n SUBTYPE OF (IfcPoint);\n\tBasisCurve : IfcCurve;\n\tPointParameter : IfcParameterValue;\n DERIVE\n\tDim : IfcDimensionCount := BasisCurve.Dim;\nEND_ENTITY;\n\nENTITY IfcPointOnSurface\n SUBTYPE OF (IfcPoint);\n\tBasisSurface : IfcSurface;\n\tPointParameterU : IfcParameterValue;\n\tPointParameterV : IfcParameterValue;\n DERIVE\n\tDim : IfcDimensionCount := BasisSurface.Dim;\nEND_ENTITY;\n\nENTITY IfcPolyLoop\n SUBTYPE OF (IfcLoop);\n\tPolygon : LIST [3:?] OF UNIQUE IfcCartesianPoint;\n WHERE\n\tWR21 : SIZEOF(QUERY(Temp <* Polygon | Temp.Dim <> Polygon[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcPolygonalBoundedHalfSpace\n SUBTYPE OF (IfcHalfSpaceSolid);\n\tPosition : IfcAxis2Placement3D;\n\tPolygonalBoundary : IfcBoundedCurve;\n WHERE\n\tWR41 : PolygonalBoundary.Dim = 2;\n\tWR42 : SIZEOF(TYPEOF(PolygonalBoundary) * [\n               'IFC2X3.IFCPOLYLINE', \n               'IFC2X3.IFCCOMPOSITECURVE']\n             ) = 1;\nEND_ENTITY;\n\nENTITY IfcPolyline\n SUBTYPE OF (IfcBoundedCurve);\n\tPoints : LIST [2:?] OF IfcCartesianPoint;\n WHERE\n\tWR41 : SIZEOF(QUERY(Temp <* Points | Temp.Dim <> Points[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcPort\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDistributionPort))\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tContainedIn : IfcRelConnectsPortToElement FOR RelatingPort;\n\tConnectedFrom : SET [0:1] OF IfcRelConnectsPorts FOR RelatedPort;\n\tConnectedTo : SET [0:1] OF IfcRelConnectsPorts FOR RelatingPort;\nEND_ENTITY;\n\nENTITY IfcPostalAddress\n SUBTYPE OF (IfcAddress);\n\tInternalLocation : OPTIONAL IfcLabel;\n\tAddressLines : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPostalBox : OPTIONAL IfcLabel;\n\tTown : OPTIONAL IfcLabel;\n\tRegion : OPTIONAL IfcLabel;\n\tPostalCode : OPTIONAL IfcLabel;\n\tCountry : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS (InternalLocation) OR \n            EXISTS (AddressLines) OR\n            EXISTS (PostalBox) OR\n            EXISTS (PostalCode) OR\n            EXISTS (Town) OR \n            EXISTS (Region) OR  \n            EXISTS (Country);\nEND_ENTITY;\n\nENTITY IfcPreDefinedColour\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDraughtingPreDefinedColour))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPreDefinedCurveFont\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDraughtingPreDefinedCurveFont))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPreDefinedDimensionSymbol\n SUBTYPE OF (IfcPreDefinedSymbol);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['arc length','conical taper','counterbore',\n                  'countersink','depth','diameter','plus minus','radius',\n                  'slope','spherical diameter','spherical radius','square'];\nEND_ENTITY;\n\nENTITY IfcPreDefinedItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPreDefinedColour\n\t,IfcPreDefinedCurveFont\n\t,IfcPreDefinedSymbol\n\t,IfcPreDefinedTextFont));\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcPreDefinedPointMarkerSymbol\n SUBTYPE OF (IfcPreDefinedSymbol);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['asterisk','circle','dot','plus','square','triangle','x'];\nEND_ENTITY;\n\nENTITY IfcPreDefinedSymbol\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPreDefinedDimensionSymbol\n\t,IfcPreDefinedPointMarkerSymbol\n\t,IfcPreDefinedTerminatorSymbol))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPreDefinedTerminatorSymbol\n SUBTYPE OF (IfcPreDefinedSymbol);\n WHERE\n\tWR31 : SELF\\IfcPreDefinedItem.Name IN ['blanked arrow','blanked box',\n                 'blanked dot','dimension origin','filled arrow','filled box',\n                 'filled dot','integral symbol','open arrow','slash','unfilled arrow'];\nEND_ENTITY;\n\nENTITY IfcPreDefinedTextFont\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDraughtingPreDefinedTextFont\n\t,IfcTextStyleFontModel))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPresentationLayerAssignment\n SUPERTYPE OF (ONEOF\n\t(IfcPresentationLayerWithStyle));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tAssignedItems : SET [1:?] OF IfcLayeredItem;\n\tIdentifier : OPTIONAL IfcIdentifier;\nEND_ENTITY;\n\nENTITY IfcPresentationLayerWithStyle\n SUBTYPE OF (IfcPresentationLayerAssignment);\n\tLayerOn : LOGICAL;\n\tLayerFrozen : LOGICAL;\n\tLayerBlocked : LOGICAL;\n\tLayerStyles : SET [0:?] OF IfcPresentationStyleSelect;\nEND_ENTITY;\n\nENTITY IfcPresentationStyle\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCurveStyle\n\t,IfcFillAreaStyle\n\t,IfcSurfaceStyle\n\t,IfcSymbolStyle\n\t,IfcTextStyle));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcPresentationStyleAssignment;\n\tStyles : SET [1:?] OF IfcPresentationStyleSelect;\nEND_ENTITY;\n\nENTITY IfcProcedure\n SUBTYPE OF (IfcProcess);\n\tProcedureID : IfcIdentifier;\n\tProcedureType : IfcProcedureTypeEnum;\n\tUserDefinedProcedureType : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* SELF\\IfcObjectDefinition.Decomposes | NOT('IFC2X3.IFCRELNESTS' IN TYPEOF(temp)))) = 0;\n\tWR2 : SIZEOF(QUERY(temp <* SELF\\IfcObjectDefinition.IsDecomposedBy | NOT('IFC2X3.IFCRELNESTS' IN TYPEOF(temp)))) = 0;\n\tWR3 : EXISTS(SELF\\IfcRoot.Name);\n\tWR4 : (ProcedureType <> IfcProcedureTypeEnum.USERDEFINED) OR\n            ((ProcedureType = IfcProcedureTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcProcedure.UserDefinedProcedureType));\nEND_ENTITY;\n\nENTITY IfcProcess\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcProcedure\n\t,IfcTask))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tOperatesOn : SET [0:?] OF IfcRelAssignsToProcess FOR RelatingProcess;\n\tIsSuccessorFrom : SET [0:?] OF IfcRelSequence FOR RelatedProcess;\n\tIsPredecessorTo : SET [0:?] OF IfcRelSequence FOR RelatingProcess;\nEND_ENTITY;\n\nENTITY IfcProduct\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAnnotation\n\t,IfcElement\n\t,IfcGrid\n\t,IfcPort\n\t,IfcProxy\n\t,IfcSpatialStructureElement\n\t,IfcStructuralActivity\n\t,IfcStructuralItem))\n SUBTYPE OF (IfcObject);\n\tObjectPlacement : OPTIONAL IfcObjectPlacement;\n\tRepresentation : OPTIONAL IfcProductRepresentation;\n INVERSE\n\tReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct;\n WHERE\n\tWR1 : (EXISTS(Representation) AND EXISTS(ObjectPlacement))\n                        OR (EXISTS(Representation) AND \n                           (NOT('IFC2X3.IFCPRODUCTDEFINITIONSHAPE' IN TYPEOF(Representation))))\n                        OR (NOT(EXISTS(Representation)));\nEND_ENTITY;\n\nENTITY IfcProductDefinitionShape\n SUBTYPE OF (IfcProductRepresentation);\n INVERSE\n\tShapeOfProduct : SET [1:1] OF IfcProduct FOR Representation;\n\tHasShapeAspects : SET [0:?] OF IfcShapeAspect FOR PartOfProductDefinitionShape;\n WHERE\n\tWR11 : SIZEOF(QUERY(temp <* Representations | \n               (NOT('IFC2X3.IFCSHAPEMODEL' IN TYPEOF(temp)))\n             )) = 0;\nEND_ENTITY;\n\nENTITY IfcProductRepresentation\n SUPERTYPE OF (ONEOF\n\t(IfcMaterialDefinitionRepresentation\n\t,IfcProductDefinitionShape));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRepresentations : LIST [1:?] OF IfcRepresentation;\nEND_ENTITY;\n\nENTITY IfcProductsOfCombustionProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tSpecificHeatCapacity : OPTIONAL IfcSpecificHeatCapacityMeasure;\n\tN20Content : OPTIONAL IfcPositiveRatioMeasure;\n\tCOContent : OPTIONAL IfcPositiveRatioMeasure;\n\tCO2Content : OPTIONAL IfcPositiveRatioMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcProfileDef\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcArbitraryClosedProfileDef\n\t,IfcArbitraryOpenProfileDef\n\t,IfcCompositeProfileDef\n\t,IfcDerivedProfileDef\n\t,IfcParameterizedProfileDef));\n\tProfileType : IfcProfileTypeEnum;\n\tProfileName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcProfileProperties\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcGeneralProfileProperties\n\t,IfcRibPlateProfileProperties));\n\tProfileName : OPTIONAL IfcLabel;\n\tProfileDefinition : OPTIONAL IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcProject\n SUBTYPE OF (IfcObject);\n\tLongName : OPTIONAL IfcLabel;\n\tPhase : OPTIONAL IfcLabel;\n\tRepresentationContexts : SET [1:?] OF IfcRepresentationContext;\n\tUnitsInContext : IfcUnitAssignment;\n WHERE\n\tWR31 : EXISTS(SELF\\IfcRoot.Name);\n\tWR32 : SIZEOF(QUERY(Temp <* RepresentationContexts |\n              'IFC2X3.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(Temp)\n             )) = 0;\n\tWR33 : SIZEOF(SELF\\IfcObjectDefinition.Decomposes) = 0;\nEND_ENTITY;\n\nENTITY IfcProjectOrder\n SUBTYPE OF (IfcControl);\n\tID : IfcIdentifier;\n\tPredefinedType : IfcProjectOrderTypeEnum;\n\tStatus : OPTIONAL IfcLabel;\n UNIQUE\n\tUR2 : ID;\nEND_ENTITY;\n\nENTITY IfcProjectOrderRecord\n SUBTYPE OF (IfcControl);\n\tRecords : LIST [1:?] OF UNIQUE IfcRelAssignsToProjectOrder;\n\tPredefinedType : IfcProjectOrderRecordTypeEnum;\nEND_ENTITY;\n\nENTITY IfcProjectionCurve\n SUBTYPE OF (IfcAnnotationCurveOccurrence);\nEND_ENTITY;\n\nENTITY IfcProjectionElement\n SUBTYPE OF (IfcFeatureElementAddition);\nEND_ENTITY;\n\nENTITY IfcProperty\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcComplexProperty\n\t,IfcSimpleProperty));\n\tName : IfcIdentifier;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tPropertyForDependance : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependingProperty;\n\tPropertyDependsOn : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependantProperty;\n\tPartOfComplex : SET [0:1] OF IfcComplexProperty FOR HasProperties;\nEND_ENTITY;\n\nENTITY IfcPropertyBoundedValue\n SUBTYPE OF (IfcSimpleProperty);\n\tUpperBoundValue : OPTIONAL IfcValue;\n\tLowerBoundValue : OPTIONAL IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n WHERE\n\tWR21 : NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(LowerBoundValue)) OR\n             (TYPEOF(UpperBoundValue) = TYPEOF(LowerBoundValue));\n\tWR22 : EXISTS(UpperBoundValue) OR EXISTS(LowerBoundValue);\nEND_ENTITY;\n\nENTITY IfcPropertyConstraintRelationship;\n\tRelatingConstraint : IfcConstraint;\n\tRelatedProperties : SET [1:?] OF IfcProperty;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcPropertyDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPropertySetDefinition))\n SUBTYPE OF (IfcRoot);\n INVERSE\n\tHasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects;\nEND_ENTITY;\n\nENTITY IfcPropertyDependencyRelationship;\n\tDependingProperty : IfcProperty;\n\tDependantProperty : IfcProperty;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tExpression : OPTIONAL IfcText;\n WHERE\n\tWR1 : DependingProperty :<>: DependantProperty;\nEND_ENTITY;\n\nENTITY IfcPropertyEnumeratedValue\n SUBTYPE OF (IfcSimpleProperty);\n\tEnumerationValues : LIST [1:?] OF IfcValue;\n\tEnumerationReference : OPTIONAL IfcPropertyEnumeration;\n WHERE\n\tWR1 : NOT(EXISTS(EnumerationReference)) OR \n               (SIZEOF(QUERY(temp <* EnumerationValues |\n                temp IN EnumerationReference.EnumerationValues))\n                = SIZEOF(EnumerationValues));\nEND_ENTITY;\n\nENTITY IfcPropertyEnumeration;\n\tName : IfcLabel;\n\tEnumerationValues : LIST [1:?] OF UNIQUE IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n UNIQUE\n\tUR1 : Name;\n WHERE\n\tWR01 : SIZEOF(QUERY(temp <* SELF.EnumerationValues | \n               NOT(TYPEOF(SELF.EnumerationValues[1]) = TYPEOF(temp))\n               )) = 0;\nEND_ENTITY;\n\nENTITY IfcPropertyListValue\n SUBTYPE OF (IfcSimpleProperty);\n\tListValues : LIST [1:?] OF IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n WHERE\n\tWR31 : SIZEOF(QUERY(temp <* SELF.ListValues | \n               NOT(TYPEOF(SELF.ListValues[1]) = TYPEOF(temp))\n               )) = 0;\nEND_ENTITY;\n\nENTITY IfcPropertyReferenceValue\n SUBTYPE OF (IfcSimpleProperty);\n\tUsageName : OPTIONAL IfcLabel;\n\tPropertyReference : IfcObjectReferenceSelect;\nEND_ENTITY;\n\nENTITY IfcPropertySet\n SUBTYPE OF (IfcPropertySetDefinition);\n\tHasProperties : SET [1:?] OF IfcProperty;\n WHERE\n\tWR31 : EXISTS(SELF\\IfcRoot.Name);\n\tWR32 : IfcUniquePropertyName(HasProperties);\nEND_ENTITY;\n\nENTITY IfcPropertySetDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDoorLiningProperties\n\t,IfcDoorPanelProperties\n\t,IfcElementQuantity\n\t,IfcEnergyProperties\n\t,IfcFluidFlowProperties\n\t,IfcPermeableCoveringProperties\n\t,IfcPropertySet\n\t,IfcReinforcementDefinitionProperties\n\t,IfcServiceLifeFactor\n\t,IfcSoundProperties\n\t,IfcSoundValue\n\t,IfcSpaceThermalLoadProperties\n\t,IfcWindowLiningProperties\n\t,IfcWindowPanelProperties))\n SUBTYPE OF (IfcPropertyDefinition);\n INVERSE\n\tPropertyDefinitionOf : SET [0:1] OF IfcRelDefinesByProperties FOR RelatingPropertyDefinition;\n\tDefinesType : SET [0:1] OF IfcTypeObject FOR HasPropertySets;\nEND_ENTITY;\n\nENTITY IfcPropertySingleValue\n SUBTYPE OF (IfcSimpleProperty);\n\tNominalValue : OPTIONAL IfcValue;\n\tUnit : OPTIONAL IfcUnit;\nEND_ENTITY;\n\nENTITY IfcPropertyTableValue\n SUBTYPE OF (IfcSimpleProperty);\n\tDefiningValues : LIST [1:?] OF UNIQUE IfcValue;\n\tDefinedValues : LIST [1:?] OF IfcValue;\n\tExpression : OPTIONAL IfcText;\n\tDefiningUnit : OPTIONAL IfcUnit;\n\tDefinedUnit : OPTIONAL IfcUnit;\n WHERE\n\tWR1 : SIZEOF(DefiningValues) = SIZEOF(DefinedValues);\n\tWR2 : SIZEOF(QUERY(temp <* SELF.DefiningValues | TYPEOF(temp) <> TYPEOF(SELF.DefiningValues[1])))=0;\n\tWR3 : SIZEOF(QUERY(temp <* SELF.DefinedValues | TYPEOF(temp) <> TYPEOF(SELF.DefinedValues[1])))=0;\nEND_ENTITY;\n\nENTITY IfcProtectiveDeviceType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcProtectiveDeviceTypeEnum;\nEND_ENTITY;\n\nENTITY IfcProxy\n SUBTYPE OF (IfcProduct);\n\tProxyType : IfcObjectTypeEnum;\n\tTag : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcPumpType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcPumpTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcPumpTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcPumpTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcQuantityArea\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tAreaValue : IfcAreaMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.AREAUNIT);\n\tWR22 : AreaValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityCount\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tCountValue : IfcCountMeasure;\n WHERE\n\tWR21 : CountValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityLength\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tLengthValue : IfcLengthMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.LENGTHUNIT);\n\tWR22 : LengthValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityTime\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tTimeValue : IfcTimeMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.TIMEUNIT);\n\tWR22 : TimeValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityVolume\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tVolumeValue : IfcVolumeMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.VOLUMEUNIT);\n\tWR22 : VolumeValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityWeight\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tWeightValue : IfcMassMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n                (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.MASSUNIT);\n\tWR22 : WeightValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcRadiusDimension\n SUBTYPE OF (IfcDimensionCurveDirectedCallout);\nEND_ENTITY;\n\nENTITY IfcRailing\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcRailingTypeEnum;\n WHERE\n\tWR61 : NOT(EXISTS(PredefinedType)) OR\n              (PredefinedType <> IfcRailingTypeEnum.USERDEFINED) OR\n              ((PredefinedType = IfcRailingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcRailingType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcRailingTypeEnum;\nEND_ENTITY;\n\nENTITY IfcRamp\n SUBTYPE OF (IfcBuildingElement);\n\tShapeType : IfcRampTypeEnum;\n WHERE\n\tWR1 : (HIINDEX(SELF\\IfcObjectDefinition.IsDecomposedBy) = 0) OR \n            ((HIINDEX(SELF\\IfcObjectDefinition.IsDecomposedBy) = 1) AND (NOT(EXISTS(SELF\\IfcProduct.Representation))));\nEND_ENTITY;\n\nENTITY IfcRampFlight\n SUBTYPE OF (IfcBuildingElement);\nEND_ENTITY;\n\nENTITY IfcRampFlightType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcRampFlightTypeEnum;\nEND_ENTITY;\n\nENTITY IfcRationalBezierCurve\n SUBTYPE OF (IfcBezierCurve);\n\tWeightsData : LIST [2:?] OF REAL;\n DERIVE\n\tWeights : ARRAY [0:255] OF REAL := IfcListToArray(WeightsData,0,SELF\\IfcBSplineCurve.UpperIndexOnControlPoints);\n WHERE\n\tWR1 : SIZEOF(WeightsData) = SIZEOF(SELF\\IfcBSplineCurve.ControlPointsList);\n\tWR2 : IfcCurveWeightsPositive(SELF);\nEND_ENTITY;\n\nENTITY IfcRectangleHollowProfileDef\n SUBTYPE OF (IfcRectangleProfileDef);\n\tWallThickness : IfcPositiveLengthMeasure;\n\tInnerFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tOuterFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR31 : (WallThickness < (SELF\\IfcRectangleProfileDef.XDim/2.)) AND \n             (WallThickness < (SELF\\IfcRectangleProfileDef.YDim/2.));\n\tWR32 : NOT(EXISTS(OuterFilletRadius)) OR \n             ((OuterFilletRadius <= (SELF\\IfcRectangleProfileDef.XDim/2.)) AND \n              (OuterFilletRadius <= (SELF\\IfcRectangleProfileDef.YDim/2.)));\n\tWR33 : NOT(EXISTS(InnerFilletRadius)) OR \n             ((InnerFilletRadius <= (SELF\\IfcRectangleProfileDef.XDim/2. - WallThickness)) AND \n              (InnerFilletRadius <= (SELF\\IfcRectangleProfileDef.YDim/2. - WallThickness)));\nEND_ENTITY;\n\nENTITY IfcRectangleProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcRectangleHollowProfileDef\n\t,IfcRoundedRectangleProfileDef))\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRectangularPyramid\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tXLength : IfcPositiveLengthMeasure;\n\tYLength : IfcPositiveLengthMeasure;\n\tHeight : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRectangularTrimmedSurface\n SUBTYPE OF (IfcBoundedSurface);\n\tBasisSurface : IfcSurface;\n\tU1 : IfcParameterValue;\n\tV1 : IfcParameterValue;\n\tU2 : IfcParameterValue;\n\tV2 : IfcParameterValue;\n\tUsense : BOOLEAN;\n\tVsense : BOOLEAN;\n DERIVE\n\tDim : IfcDimensionCount := BasisSurface.Dim;\n WHERE\n\tWR1 : U1 <> U2;\n\tWR2 : V1 <> V2;\n\tWR3 : (('IFC2X3.IFCELEMENTARYSURFACE' IN TYPEOF(BasisSurface)) AND\n                     (NOT ('IFC2X3.IFCPLANE' IN TYPEOF(BasisSurface)))) OR\n                     ('IFC2X3.IFCSURFACEOFREVOLUTION' IN TYPEOF(BasisSurface)) OR\n                     (Usense = (U2 > U1));\n\tWR4 : Vsense = (V2 > V1);\nEND_ENTITY;\n\nENTITY IfcReferencesValueDocument;\n\tReferencedDocument : IfcDocumentSelect;\n\tReferencingValues : SET [1:?] OF IfcAppliedValue;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcRegularTimeSeries\n SUBTYPE OF (IfcTimeSeries);\n\tTimeStep : IfcTimeMeasure;\n\tValues : LIST [1:?] OF IfcTimeSeriesValue;\nEND_ENTITY;\n\nENTITY IfcReinforcementBarProperties;\n\tTotalCrossSectionArea : IfcAreaMeasure;\n\tSteelGrade : IfcLabel;\n\tBarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;\n\tEffectiveDepth : OPTIONAL IfcLengthMeasure;\n\tNominalBarDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tBarCount : OPTIONAL IfcCountMeasure;\nEND_ENTITY;\n\nENTITY IfcReinforcementDefinitionProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tDefinitionType : OPTIONAL IfcLabel;\n\tReinforcementSectionDefinitions : LIST [1:?] OF IfcSectionReinforcementProperties;\nEND_ENTITY;\n\nENTITY IfcReinforcingBar\n SUBTYPE OF (IfcReinforcingElement);\n\tNominalDiameter : IfcPositiveLengthMeasure;\n\tCrossSectionArea : IfcAreaMeasure;\n\tBarLength : OPTIONAL IfcPositiveLengthMeasure;\n\tBarRole : IfcReinforcingBarRoleEnum;\n\tBarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;\n WHERE\n\tWR1 : (BarRole <> IfcReinforcingBarRoleEnum.USERDEFINED) OR ((BarRole = IfcReinforcingBarRoleEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcReinforcingElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcReinforcingBar\n\t,IfcReinforcingMesh\n\t,IfcTendon\n\t,IfcTendonAnchor))\n SUBTYPE OF (IfcBuildingElementComponent);\n\tSteelGrade : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcReinforcingMesh\n SUBTYPE OF (IfcReinforcingElement);\n\tMeshLength : OPTIONAL IfcPositiveLengthMeasure;\n\tMeshWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tLongitudinalBarNominalDiameter : IfcPositiveLengthMeasure;\n\tTransverseBarNominalDiameter : IfcPositiveLengthMeasure;\n\tLongitudinalBarCrossSectionArea : IfcAreaMeasure;\n\tTransverseBarCrossSectionArea : IfcAreaMeasure;\n\tLongitudinalBarSpacing : IfcPositiveLengthMeasure;\n\tTransverseBarSpacing : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRelAggregates\n SUBTYPE OF (IfcRelDecomposes);\nEND_ENTITY;\n\nENTITY IfcRelAssigns\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelAssignsToActor\n\t,IfcRelAssignsToControl\n\t,IfcRelAssignsToGroup\n\t,IfcRelAssignsToProcess\n\t,IfcRelAssignsToProduct\n\t,IfcRelAssignsToResource))\n SUBTYPE OF (IfcRelationship);\n\tRelatedObjects : SET [1:?] OF IfcObjectDefinition;\n\tRelatedObjectsType : OPTIONAL IfcObjectTypeEnum;\n WHERE\n\tWR1 : IfcCorrectObjectAssignment(RelatedObjectsType, RelatedObjects);\nEND_ENTITY;\n\nENTITY IfcRelAssignsTasks\n SUBTYPE OF (IfcRelAssignsToControl);\n\tTimeForTask : OPTIONAL IfcScheduleTimeControl;\n WHERE\n\tWR1 : HIINDEX(SELF\\IfcRelAssigns.RelatedObjects) = 1;\n\tWR2 : 'IFC2X3.IFCTASK' IN TYPEOF(SELF\\IfcRelAssigns.RelatedObjects[1]);\n\tWR3 : 'IFC2X3.IFCWORKCONTROL' IN TYPEOF(SELF\\IfcRelAssignsToControl.RelatingControl);\nEND_ENTITY;\n\nENTITY IfcRelAssignsToActor\n SUPERTYPE OF (ONEOF\n\t(IfcRelOccupiesSpaces))\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingActor : IfcActor;\n\tActingRole : OPTIONAL IfcActorRole;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingActor :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToControl\n SUPERTYPE OF (ONEOF\n\t(IfcRelAssignsTasks\n\t,IfcRelAssignsToProjectOrder\n\t,IfcRelSchedulesCostItems))\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingControl : IfcControl;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingControl :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToGroup\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingGroup : IfcGroup;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingGroup :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToProcess\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingProcess : IfcProcess;\n\tQuantityInProcess : OPTIONAL IfcMeasureWithUnit;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingProcess :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToProduct\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingProduct : IfcProduct;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingProduct :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToProjectOrder\n SUBTYPE OF (IfcRelAssignsToControl);\nEND_ENTITY;\n\nENTITY IfcRelAssignsToResource\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingResource : IfcResource;\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingResource :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssociates\n SUPERTYPE OF (ONEOF\n\t(IfcRelAssociatesAppliedValue\n\t,IfcRelAssociatesApproval\n\t,IfcRelAssociatesClassification\n\t,IfcRelAssociatesConstraint\n\t,IfcRelAssociatesDocument\n\t,IfcRelAssociatesLibrary\n\t,IfcRelAssociatesMaterial\n\t,IfcRelAssociatesProfileProperties))\n SUBTYPE OF (IfcRelationship);\n\tRelatedObjects : SET [1:?] OF IfcRoot;\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* RelatedObjects |\n              NOT(('IFC2X3.IFCOBJECTDEFINITION' IN TYPEOF(temp)) \n               OR ('IFC2X3.IFCPROPERTYDEFINITION' IN TYPEOF(temp)))\n              )) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesAppliedValue\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingAppliedValue : IfcAppliedValue;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesApproval\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingApproval : IfcApproval;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesClassification\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingClassification : IfcClassificationNotationSelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesConstraint\n SUBTYPE OF (IfcRelAssociates);\n\tIntent : IfcLabel;\n\tRelatingConstraint : IfcConstraint;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesDocument\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingDocument : IfcDocumentSelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesLibrary\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingLibrary : IfcLibrarySelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesMaterial\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingMaterial : IfcMaterialSelect;\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* SELF\\IfcRelAssociates.RelatedObjects | \n             ('IFC2X3.IFCFEATUREELEMENTSUBTRACTION' IN TYPEOF(temp))\n               OR ('IFC2X3.IFCVIRTUALELEMENT' IN TYPEOF(temp))\n             )) = 0;\n\tWR22 : SIZEOF(QUERY(temp <* SELF\\IfcRelAssociates.RelatedObjects | \n             (NOT('IFC2X3.IFCPRODUCT' IN TYPEOF(temp)) \n              AND NOT('IFC2X3.IFCTYPEPRODUCT' IN TYPEOF(temp)))\n             )) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesProfileProperties\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingProfileProperties : IfcProfileProperties;\n\tProfileSectionLocation : OPTIONAL IfcShapeAspect;\n\tProfileOrientation : OPTIONAL IfcOrientationSelect;\nEND_ENTITY;\n\nENTITY IfcRelConnects\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelConnectsElements\n\t,IfcRelConnectsPortToElement\n\t,IfcRelConnectsPorts\n\t,IfcRelConnectsStructuralActivity\n\t,IfcRelConnectsStructuralElement\n\t,IfcRelConnectsStructuralMember\n\t,IfcRelContainedInSpatialStructure\n\t,IfcRelCoversBldgElements\n\t,IfcRelCoversSpaces\n\t,IfcRelFillsElement\n\t,IfcRelFlowControlElements\n\t,IfcRelInteractionRequirements\n\t,IfcRelProjectsElement\n\t,IfcRelReferencedInSpatialStructure\n\t,IfcRelSequence\n\t,IfcRelServicesBuildings\n\t,IfcRelSpaceBoundary\n\t,IfcRelVoidsElement))\n SUBTYPE OF (IfcRelationship);\nEND_ENTITY;\n\nENTITY IfcRelConnectsElements\n SUPERTYPE OF (ONEOF\n\t(IfcRelConnectsPathElements\n\t,IfcRelConnectsWithRealizingElements))\n SUBTYPE OF (IfcRelConnects);\n\tConnectionGeometry : OPTIONAL IfcConnectionGeometry;\n\tRelatingElement : IfcElement;\n\tRelatedElement : IfcElement;\n WHERE\n\tWR31 : RelatingElement :<>: RelatedElement;\nEND_ENTITY;\n\nENTITY IfcRelConnectsPathElements\n SUBTYPE OF (IfcRelConnectsElements);\n\tRelatingPriorities : LIST [0:?] OF INTEGER;\n\tRelatedPriorities : LIST [0:?] OF INTEGER;\n\tRelatedConnectionType : IfcConnectionTypeEnum;\n\tRelatingConnectionType : IfcConnectionTypeEnum;\nEND_ENTITY;\n\nENTITY IfcRelConnectsPortToElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingPort : IfcPort;\n\tRelatedElement : IfcElement;\nEND_ENTITY;\n\nENTITY IfcRelConnectsPorts\n SUBTYPE OF (IfcRelConnects);\n\tRelatingPort : IfcPort;\n\tRelatedPort : IfcPort;\n\tRealizingElement : OPTIONAL IfcElement;\nEND_ENTITY;\n\nENTITY IfcRelConnectsStructuralActivity\n SUBTYPE OF (IfcRelConnects);\n\tRelatingElement : IfcStructuralActivityAssignmentSelect;\n\tRelatedStructuralActivity : IfcStructuralActivity;\nEND_ENTITY;\n\nENTITY IfcRelConnectsStructuralElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingElement : IfcElement;\n\tRelatedStructuralMember : IfcStructuralMember;\nEND_ENTITY;\n\nENTITY IfcRelConnectsStructuralMember\n SUPERTYPE OF (ONEOF\n\t(IfcRelConnectsWithEccentricity))\n SUBTYPE OF (IfcRelConnects);\n\tRelatingStructuralMember : IfcStructuralMember;\n\tRelatedStructuralConnection : IfcStructuralConnection;\n\tAppliedCondition : OPTIONAL IfcBoundaryCondition;\n\tAdditionalConditions : OPTIONAL IfcStructuralConnectionCondition;\n\tSupportedLength : OPTIONAL IfcLengthMeasure;\n\tConditionCoordinateSystem : OPTIONAL IfcAxis2Placement3D;\nEND_ENTITY;\n\nENTITY IfcRelConnectsWithEccentricity\n SUBTYPE OF (IfcRelConnectsStructuralMember);\n\tConnectionConstraint : IfcConnectionGeometry;\nEND_ENTITY;\n\nENTITY IfcRelConnectsWithRealizingElements\n SUBTYPE OF (IfcRelConnectsElements);\n\tRealizingElements : SET [1:?] OF IfcElement;\n\tConnectionType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcRelContainedInSpatialStructure\n SUBTYPE OF (IfcRelConnects);\n\tRelatedElements : SET [1:?] OF IfcProduct;\n\tRelatingStructure : IfcSpatialStructureElement;\n WHERE\n\tWR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC2X3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcRelCoversBldgElements\n SUBTYPE OF (IfcRelConnects);\n\tRelatingBuildingElement : IfcElement;\n\tRelatedCoverings : SET [1:?] OF IfcCovering;\nEND_ENTITY;\n\nENTITY IfcRelCoversSpaces\n SUBTYPE OF (IfcRelConnects);\n\tRelatedSpace : IfcSpace;\n\tRelatedCoverings : SET [1:?] OF IfcCovering;\nEND_ENTITY;\n\nENTITY IfcRelDecomposes\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelAggregates\n\t,IfcRelNests))\n SUBTYPE OF (IfcRelationship);\n\tRelatingObject : IfcObjectDefinition;\n\tRelatedObjects : SET [1:?] OF IfcObjectDefinition;\n WHERE\n\tWR31 : SIZEOF(QUERY(Temp <* RelatedObjects | RelatingObject :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelDefines\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelDefinesByProperties\n\t,IfcRelDefinesByType))\n SUBTYPE OF (IfcRelationship);\n\tRelatedObjects : SET [1:?] OF IfcObject;\nEND_ENTITY;\n\nENTITY IfcRelDefinesByProperties\n SUPERTYPE OF (ONEOF\n\t(IfcRelOverridesProperties))\n SUBTYPE OF (IfcRelDefines);\n\tRelatingPropertyDefinition : IfcPropertySetDefinition;\nEND_ENTITY;\n\nENTITY IfcRelDefinesByType\n SUBTYPE OF (IfcRelDefines);\n\tRelatingType : IfcTypeObject;\nEND_ENTITY;\n\nENTITY IfcRelFillsElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingOpeningElement : IfcOpeningElement;\n\tRelatedBuildingElement : IfcElement;\nEND_ENTITY;\n\nENTITY IfcRelFlowControlElements\n SUBTYPE OF (IfcRelConnects);\n\tRelatedControlElements : SET [1:?] OF IfcDistributionControlElement;\n\tRelatingFlowElement : IfcDistributionFlowElement;\nEND_ENTITY;\n\nENTITY IfcRelInteractionRequirements\n SUBTYPE OF (IfcRelConnects);\n\tDailyInteraction : OPTIONAL IfcCountMeasure;\n\tImportanceRating : OPTIONAL IfcNormalisedRatioMeasure;\n\tLocationOfInteraction : OPTIONAL IfcSpatialStructureElement;\n\tRelatedSpaceProgram : IfcSpaceProgram;\n\tRelatingSpaceProgram : IfcSpaceProgram;\nEND_ENTITY;\n\nENTITY IfcRelNests\n SUBTYPE OF (IfcRelDecomposes);\n WHERE\n\tWR1 : SIZEOF(QUERY(Temp <* SELF\\IfcRelDecomposes.RelatedObjects | \n              NOT(TYPEOF(SELF\\IfcRelDecomposes.RelatingObject) = TYPEOF(Temp)))) = 0;\nEND_ENTITY;\n\nENTITY IfcRelOccupiesSpaces\n SUBTYPE OF (IfcRelAssignsToActor);\nEND_ENTITY;\n\nENTITY IfcRelOverridesProperties\n SUBTYPE OF (IfcRelDefinesByProperties);\n\tOverridingProperties : SET [1:?] OF IfcProperty;\n WHERE\n\tWR1 : SIZEOF(SELF\\IfcRelDefines.RelatedObjects) = 1;\nEND_ENTITY;\n\nENTITY IfcRelProjectsElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingElement : IfcElement;\n\tRelatedFeatureElement : IfcFeatureElementAddition;\nEND_ENTITY;\n\nENTITY IfcRelReferencedInSpatialStructure\n SUBTYPE OF (IfcRelConnects);\n\tRelatedElements : SET [1:?] OF IfcProduct;\n\tRelatingStructure : IfcSpatialStructureElement;\n WHERE\n\tWR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC2X3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcRelSchedulesCostItems\n SUBTYPE OF (IfcRelAssignsToControl);\n WHERE\n\tWR11 : SIZEOF(QUERY(temp <* SELF\\IfcRelAssigns.RelatedObjects |\n               NOT('IFC2X3.IFCCOSTITEM' IN TYPEOF(temp))\n               )) = 0;\n\tWR12 : 'IFC2X3.IFCCOSTSCHEDULE' IN TYPEOF (SELF\\IfcRelAssignsToControl.RelatingControl);\nEND_ENTITY;\n\nENTITY IfcRelSequence\n SUBTYPE OF (IfcRelConnects);\n\tRelatingProcess : IfcProcess;\n\tRelatedProcess : IfcProcess;\n\tTimeLag : IfcTimeMeasure;\n\tSequenceType : IfcSequenceEnum;\n WHERE\n\tWR1 : RelatingProcess :<>: RelatedProcess;\nEND_ENTITY;\n\nENTITY IfcRelServicesBuildings\n SUBTYPE OF (IfcRelConnects);\n\tRelatingSystem : IfcSystem;\n\tRelatedBuildings : SET [1:?] OF IfcSpatialStructureElement;\nEND_ENTITY;\n\nENTITY IfcRelSpaceBoundary\n SUBTYPE OF (IfcRelConnects);\n\tRelatingSpace : IfcSpace;\n\tRelatedBuildingElement : OPTIONAL IfcElement;\n\tConnectionGeometry : OPTIONAL IfcConnectionGeometry;\n\tPhysicalOrVirtualBoundary : IfcPhysicalOrVirtualEnum;\n\tInternalOrExternalBoundary : IfcInternalOrExternalEnum;\n WHERE\n\tWR1 : ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Physical) AND \n              (EXISTS(RelatedBuildingElement) AND NOT('IFC2X3.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) \n            OR \n            ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Virtual) AND \n              (NOT(EXISTS(RelatedBuildingElement)) OR ('IFC2X3.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) \n            OR \n             (PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.NotDefined);\nEND_ENTITY;\n\nENTITY IfcRelVoidsElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingBuildingElement : IfcElement;\n\tRelatedOpeningElement : IfcFeatureElementSubtraction;\nEND_ENTITY;\n\nENTITY IfcRelationship\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelAssigns\n\t,IfcRelAssociates\n\t,IfcRelConnects\n\t,IfcRelDecomposes\n\t,IfcRelDefines))\n SUBTYPE OF (IfcRoot);\nEND_ENTITY;\n\nENTITY IfcRelaxation;\n\tRelaxationValue : IfcNormalisedRatioMeasure;\n\tInitialStress : IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcRepresentation\n SUPERTYPE OF (ONEOF\n\t(IfcShapeModel\n\t,IfcStyleModel));\n\tContextOfItems : IfcRepresentationContext;\n\tRepresentationIdentifier : OPTIONAL IfcLabel;\n\tRepresentationType : OPTIONAL IfcLabel;\n\tItems : SET [1:?] OF IfcRepresentationItem;\n INVERSE\n\tRepresentationMap : SET [0:1] OF IfcRepresentationMap FOR MappedRepresentation;\n\tLayerAssignments : SET [0:?] OF IfcPresentationLayerAssignment FOR AssignedItems;\n\tOfProductRepresentation : SET [0:1] OF IfcProductRepresentation FOR Representations;\nEND_ENTITY;\n\nENTITY IfcRepresentationContext\n SUPERTYPE OF (ONEOF\n\t(IfcGeometricRepresentationContext));\n\tContextIdentifier : OPTIONAL IfcLabel;\n\tContextType : OPTIONAL IfcLabel;\n INVERSE\n\tRepresentationsInContext : SET [0:?] OF IfcRepresentation FOR ContextOfItems;\nEND_ENTITY;\n\nENTITY IfcRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcGeometricRepresentationItem\n\t,IfcMappedItem\n\t,IfcStyledItem\n\t,IfcTopologicalRepresentationItem));\n INVERSE\n\tLayerAssignments : SET [0:?] OF IfcPresentationLayerAssignment FOR AssignedItems;\n\tStyledByItem : SET [0:1] OF IfcStyledItem FOR Item;\nEND_ENTITY;\n\nENTITY IfcRepresentationMap;\n\tMappingOrigin : IfcAxis2Placement;\n\tMappedRepresentation : IfcRepresentation;\n INVERSE\n\tMapUsage : SET [0:?] OF IfcMappedItem FOR MappingSource;\nEND_ENTITY;\n\nENTITY IfcResource\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConstructionResource))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tResourceOf : SET [0:?] OF IfcRelAssignsToResource FOR RelatingResource;\nEND_ENTITY;\n\nENTITY IfcRevolvedAreaSolid\n SUBTYPE OF (IfcSweptAreaSolid);\n\tAxis : IfcAxis1Placement;\n\tAngle : IfcPlaneAngleMeasure;\n DERIVE\n\tAxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(Axis.Location, \n                   IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Axis.Z,1.0));\n WHERE\n\tWR31 : Axis.Location.Coordinates[3] = 0.0;\n\tWR32 : Axis.Z.DirectionRatios[3] = 0.0;\nEND_ENTITY;\n\nENTITY IfcRibPlateProfileProperties\n SUBTYPE OF (IfcProfileProperties);\n\tThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tRibHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tRibWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tRibSpacing : OPTIONAL IfcPositiveLengthMeasure;\n\tDirection : IfcRibPlateDirectionEnum;\nEND_ENTITY;\n\nENTITY IfcRightCircularCone\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tHeight : IfcPositiveLengthMeasure;\n\tBottomRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRightCircularCylinder\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tHeight : IfcPositiveLengthMeasure;\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRoof\n SUBTYPE OF (IfcBuildingElement);\n\tShapeType : IfcRoofTypeEnum;\n WHERE\n\tWR1 : (HIINDEX(SELF\\IfcObjectDefinition.IsDecomposedBy) = 0) OR \n            ((HIINDEX(SELF\\IfcObjectDefinition.IsDecomposedBy) = 1) AND (NOT(EXISTS(SELF\\IfcProduct.Representation))));\nEND_ENTITY;\n\nENTITY IfcRoot\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcObjectDefinition\n\t,IfcPropertyDefinition\n\t,IfcRelationship));\n\tGlobalId : IfcGloballyUniqueId;\n\tOwnerHistory : IfcOwnerHistory;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n UNIQUE\n\tUR1 : GlobalId;\nEND_ENTITY;\n\nENTITY IfcRoundedEdgeFeature\n SUBTYPE OF (IfcEdgeFeature);\n\tRadius : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRoundedRectangleProfileDef\n SUBTYPE OF (IfcRectangleProfileDef);\n\tRoundingRadius : IfcPositiveLengthMeasure;\n WHERE\n\tWR31 : ((RoundingRadius <= (SELF\\IfcRectangleProfileDef.XDim/2.)) AND \n              (RoundingRadius <= (SELF\\IfcRectangleProfileDef.YDim/2.)));\nEND_ENTITY;\n\nENTITY IfcSIUnit\n SUBTYPE OF (IfcNamedUnit);\n\tPrefix : OPTIONAL IfcSIPrefix;\n\tName : IfcSIUnitName;\n DERIVE\n\tSELF\\IfcNamedUnit.Dimensions : IfcDimensionalExponents := IfcDimensionsForSiUnit (SELF.Name);\nEND_ENTITY;\n\nENTITY IfcSanitaryTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcSanitaryTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcScheduleTimeControl\n SUBTYPE OF (IfcControl);\n\tActualStart : OPTIONAL IfcDateTimeSelect;\n\tEarlyStart : OPTIONAL IfcDateTimeSelect;\n\tLateStart : OPTIONAL IfcDateTimeSelect;\n\tScheduleStart : OPTIONAL IfcDateTimeSelect;\n\tActualFinish : OPTIONAL IfcDateTimeSelect;\n\tEarlyFinish : OPTIONAL IfcDateTimeSelect;\n\tLateFinish : OPTIONAL IfcDateTimeSelect;\n\tScheduleFinish : OPTIONAL IfcDateTimeSelect;\n\tScheduleDuration : OPTIONAL IfcTimeMeasure;\n\tActualDuration : OPTIONAL IfcTimeMeasure;\n\tRemainingTime : OPTIONAL IfcTimeMeasure;\n\tFreeFloat : OPTIONAL IfcTimeMeasure;\n\tTotalFloat : OPTIONAL IfcTimeMeasure;\n\tIsCritical : OPTIONAL BOOLEAN;\n\tStatusTime : OPTIONAL IfcDateTimeSelect;\n\tStartFloat : OPTIONAL IfcTimeMeasure;\n\tFinishFloat : OPTIONAL IfcTimeMeasure;\n\tCompletion : OPTIONAL IfcPositiveRatioMeasure;\n INVERSE\n\tScheduleTimeControlAssigned : IfcRelAssignsTasks FOR TimeForTask;\nEND_ENTITY;\n\nENTITY IfcSectionProperties;\n\tSectionType : IfcSectionTypeEnum;\n\tStartProfile : IfcProfileDef;\n\tEndProfile : OPTIONAL IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcSectionReinforcementProperties;\n\tLongitudinalStartPosition : IfcLengthMeasure;\n\tLongitudinalEndPosition : IfcLengthMeasure;\n\tTransversePosition : OPTIONAL IfcLengthMeasure;\n\tReinforcementRole : IfcReinforcingBarRoleEnum;\n\tSectionDefinition : IfcSectionProperties;\n\tCrossSectionReinforcementDefinitions : SET [1:?] OF IfcReinforcementBarProperties;\nEND_ENTITY;\n\nENTITY IfcSectionedSpine\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSpineCurve : IfcCompositeCurve;\n\tCrossSections : LIST [2:?] OF IfcProfileDef;\n\tCrossSectionPositions : LIST [2:?] OF IfcAxis2Placement3D;\n DERIVE\n\tDim : IfcDimensionCount := 3;\n WHERE\n\tWR1 : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions);\n\tWR2 : SIZEOF(QUERY(temp <* CrossSections | CrossSections[1].ProfileType <> temp.ProfileType)) = 0;\n\tWR3 : SpineCurve.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcSensorType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcSensorTypeEnum;\nEND_ENTITY;\n\nENTITY IfcServiceLife\n SUBTYPE OF (IfcControl);\n\tServiceLifeType : IfcServiceLifeTypeEnum;\n\tServiceLifeDuration : IfcTimeMeasure;\nEND_ENTITY;\n\nENTITY IfcServiceLifeFactor\n SUBTYPE OF (IfcPropertySetDefinition);\n\tPredefinedType : IfcServiceLifeFactorTypeEnum;\n\tUpperValue : OPTIONAL IfcMeasureValue;\n\tMostUsedValue : IfcMeasureValue;\n\tLowerValue : OPTIONAL IfcMeasureValue;\n WHERE\n\tWR31 : NOT(PredefinedType = IfcServiceLifeFactorTypeEnum.USERDEFINED)\n             OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcShapeAspect;\n\tShapeRepresentations : LIST [1:?] OF IfcShapeModel;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tProductDefinitional : LOGICAL;\n\tPartOfProductDefinitionShape : IfcProductDefinitionShape;\nEND_ENTITY;\n\nENTITY IfcShapeModel\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcShapeRepresentation\n\t,IfcTopologyRepresentation))\n SUBTYPE OF (IfcRepresentation);\n INVERSE\n\tOfShapeAspect : SET [0:1] OF IfcShapeAspect FOR ShapeRepresentations;\n WHERE\n\tWR11 : (SIZEOF(SELF\\IfcRepresentation.OfProductRepresentation) = 1) XOR \n             (SIZEOF(SELF\\IfcRepresentation.RepresentationMap) = 1) XOR\n             (SIZEOF(OfShapeAspect) = 1);\nEND_ENTITY;\n\nENTITY IfcShapeRepresentation\n SUBTYPE OF (IfcShapeModel);\n WHERE\n\tWR21 : 'IFC2X3.IFCGEOMETRICREPRESENTATIONCONTEXT' \n             IN TYPEOF(SELF\\IfcRepresentation.ContextOfItems);\n\tWR22 : SIZEOF(QUERY(temp <* Items | \n               ('IFC2X3.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))\n                 AND (NOT(SIZEOF(\n                   ['IFC2X3.IFCVERTEXPOINT',\n                    'IFC2X3.IFCEDGECURVE',\n                    'IFC2X3.IFCFACESURFACE'] * TYPEOF(temp)) = 1))\n             )) = 0;\n\tWR23 : EXISTS(SELF\\IfcRepresentation.RepresentationType);\n\tWR24 : IfcShapeRepresentationTypes(SELF\\IfcRepresentation.RepresentationType, SELF\\IfcRepresentation.Items);\nEND_ENTITY;\n\nENTITY IfcShellBasedSurfaceModel\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSbsmBoundary : SET [1:?] OF IfcShell;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcSimpleProperty\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPropertyBoundedValue\n\t,IfcPropertyEnumeratedValue\n\t,IfcPropertyListValue\n\t,IfcPropertyReferenceValue\n\t,IfcPropertySingleValue\n\t,IfcPropertyTableValue))\n SUBTYPE OF (IfcProperty);\nEND_ENTITY;\n\nENTITY IfcSite\n SUBTYPE OF (IfcSpatialStructureElement);\n\tRefLatitude : OPTIONAL IfcCompoundPlaneAngleMeasure;\n\tRefLongitude : OPTIONAL IfcCompoundPlaneAngleMeasure;\n\tRefElevation : OPTIONAL IfcLengthMeasure;\n\tLandTitleNumber : OPTIONAL IfcLabel;\n\tSiteAddress : OPTIONAL IfcPostalAddress;\nEND_ENTITY;\n\nENTITY IfcSlab\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcSlabTypeEnum;\n WHERE\n\tWR61 : NOT(EXISTS(PredefinedType)) OR\n              (PredefinedType <> IfcSlabTypeEnum.USERDEFINED) OR\n              ((PredefinedType = IfcSlabTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcSlabType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcSlabTypeEnum;\nEND_ENTITY;\n\nENTITY IfcSlippageConnectionCondition\n SUBTYPE OF (IfcStructuralConnectionCondition);\n\tSlippageX : OPTIONAL IfcLengthMeasure;\n\tSlippageY : OPTIONAL IfcLengthMeasure;\n\tSlippageZ : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcSolidModel\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCsgSolid\n\t,IfcManifoldSolidBrep\n\t,IfcSweptAreaSolid\n\t,IfcSweptDiskSolid))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcSoundProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tIsAttenuating : IfcBoolean;\n\tSoundScale : OPTIONAL IfcSoundScaleEnum;\n\tSoundValues : LIST [1:8] OF IfcSoundValue;\nEND_ENTITY;\n\nENTITY IfcSoundValue\n SUBTYPE OF (IfcPropertySetDefinition);\n\tSoundLevelTimeSeries : OPTIONAL IfcTimeSeries;\n\tFrequency : IfcFrequencyMeasure;\n\tSoundLevelSingleValue : OPTIONAL IfcDerivedMeasureValue;\nEND_ENTITY;\n\nENTITY IfcSpace\n SUBTYPE OF (IfcSpatialStructureElement);\n\tInteriorOrExteriorSpace : IfcInternalOrExternalEnum;\n\tElevationWithFlooring : OPTIONAL IfcLengthMeasure;\n INVERSE\n\tHasCoverings : SET [0:?] OF IfcRelCoversSpaces FOR RelatedSpace;\n\tBoundedBy : SET [0:?] OF IfcRelSpaceBoundary FOR RelatingSpace;\nEND_ENTITY;\n\nENTITY IfcSpaceHeaterType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcSpaceHeaterTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcSpaceHeaterTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcSpaceHeaterTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSpaceProgram\n SUBTYPE OF (IfcControl);\n\tSpaceProgramIdentifier : IfcIdentifier;\n\tMaxRequiredArea : OPTIONAL IfcAreaMeasure;\n\tMinRequiredArea : OPTIONAL IfcAreaMeasure;\n\tRequestedLocation : OPTIONAL IfcSpatialStructureElement;\n\tStandardRequiredArea : IfcAreaMeasure;\n INVERSE\n\tHasInteractionReqsFrom : SET [0:?] OF IfcRelInteractionRequirements FOR RelatedSpaceProgram;\n\tHasInteractionReqsTo : SET [0:?] OF IfcRelInteractionRequirements FOR RelatingSpaceProgram;\nEND_ENTITY;\n\nENTITY IfcSpaceThermalLoadProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tApplicableValueRatio : OPTIONAL IfcPositiveRatioMeasure;\n\tThermalLoadSource : IfcThermalLoadSourceEnum;\n\tPropertySource : IfcPropertySourceEnum;\n\tSourceDescription : OPTIONAL IfcText;\n\tMaximumValue : IfcPowerMeasure;\n\tMinimumValue : OPTIONAL IfcPowerMeasure;\n\tThermalLoadTimeSeriesValues : OPTIONAL IfcTimeSeries;\n\tUserDefinedThermalLoadSource : OPTIONAL IfcLabel;\n\tUserDefinedPropertySource : OPTIONAL IfcLabel;\n\tThermalLoadType : IfcThermalLoadTypeEnum;\nEND_ENTITY;\n\nENTITY IfcSpaceType\n SUBTYPE OF (IfcSpatialStructureElementType);\n\tPredefinedType : IfcSpaceTypeEnum;\nEND_ENTITY;\n\nENTITY IfcSpatialStructureElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuilding\n\t,IfcBuildingStorey\n\t,IfcSite\n\t,IfcSpace))\n SUBTYPE OF (IfcProduct);\n\tLongName : OPTIONAL IfcLabel;\n\tCompositionType : IfcElementCompositionEnum;\n INVERSE\n\tReferencesElements : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatingStructure;\n\tServicedBySystems : SET [0:?] OF IfcRelServicesBuildings FOR RelatedBuildings;\n\tContainsElements : SET [0:?] OF IfcRelContainedInSpatialStructure FOR RelatingStructure;\n WHERE\n\tWR41 : (HIINDEX(SELF\\IfcObjectDefinition.Decomposes) = 1) \n             AND\n             ('IFC2X3.IFCRELAGGREGATES' IN TYPEOF(SELF\\IfcObjectDefinition.Decomposes[1])) \n             AND\n             (('IFC2X3.IFCPROJECT' IN TYPEOF (SELF\\IfcObjectDefinition.Decomposes[1].RelatingObject)) OR\n              ('IFC2X3.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF (SELF\\IfcObjectDefinition.Decomposes[1].RelatingObject))\n             );\nEND_ENTITY;\n\nENTITY IfcSpatialStructureElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcSpaceType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcSphere\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcStackTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcStackTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcStair\n SUBTYPE OF (IfcBuildingElement);\n\tShapeType : IfcStairTypeEnum;\n WHERE\n\tWR1 : (HIINDEX(SELF\\IfcObjectDefinition.IsDecomposedBy) = 0) OR \n            ((HIINDEX(SELF\\IfcObjectDefinition.IsDecomposedBy) = 1) AND (NOT(EXISTS(SELF\\IfcProduct.Representation))));\nEND_ENTITY;\n\nENTITY IfcStairFlight\n SUBTYPE OF (IfcBuildingElement);\n\tNumberOfRiser : OPTIONAL INTEGER;\n\tNumberOfTreads : OPTIONAL INTEGER;\n\tRiserHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tTreadLength : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcStairFlightType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcStairFlightTypeEnum;\nEND_ENTITY;\n\nENTITY IfcStructuralAction\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralLinearAction\n\t,IfcStructuralPlanarAction\n\t,IfcStructuralPointAction))\n SUBTYPE OF (IfcStructuralActivity);\n\tDestabilizingLoad : BOOLEAN;\n\tCausedBy : OPTIONAL IfcStructuralReaction;\nEND_ENTITY;\n\nENTITY IfcStructuralActivity\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralAction\n\t,IfcStructuralReaction))\n SUBTYPE OF (IfcProduct);\n\tAppliedLoad : IfcStructuralLoad;\n\tGlobalOrLocal : IfcGlobalOrLocalEnum;\n INVERSE\n\tAssignedToStructuralItem : IfcRelConnectsStructuralActivity FOR RelatedStructuralActivity;\nEND_ENTITY;\n\nENTITY IfcStructuralAnalysisModel\n SUBTYPE OF (IfcSystem);\n\tPredefinedType : IfcAnalysisModelTypeEnum;\n\tOrientationOf2DPlane : OPTIONAL IfcAxis2Placement3D;\n\tLoadedBy : OPTIONAL SET [1:?] OF IfcStructuralLoadGroup;\n\tHasResults : OPTIONAL SET [1:?] OF IfcStructuralResultGroup;\nEND_ENTITY;\n\nENTITY IfcStructuralConnection\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralCurveConnection\n\t,IfcStructuralPointConnection\n\t,IfcStructuralSurfaceConnection))\n SUBTYPE OF (IfcStructuralItem);\n\tAppliedCondition : OPTIONAL IfcBoundaryCondition;\n INVERSE\n\tConnectsStructuralMembers : SET [1:?] OF IfcRelConnectsStructuralMember FOR RelatedStructuralConnection;\nEND_ENTITY;\n\nENTITY IfcStructuralConnectionCondition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcFailureConnectionCondition\n\t,IfcSlippageConnectionCondition));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcStructuralCurveConnection\n SUBTYPE OF (IfcStructuralConnection);\nEND_ENTITY;\n\nENTITY IfcStructuralCurveMember\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralCurveMemberVarying))\n SUBTYPE OF (IfcStructuralMember);\n\tPredefinedType : IfcStructuralCurveTypeEnum;\nEND_ENTITY;\n\nENTITY IfcStructuralCurveMemberVarying\n SUBTYPE OF (IfcStructuralCurveMember);\nEND_ENTITY;\n\nENTITY IfcStructuralItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralConnection\n\t,IfcStructuralMember))\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tAssignedStructuralActivity : SET [0:?] OF IfcRelConnectsStructuralActivity FOR RelatingElement;\nEND_ENTITY;\n\nENTITY IfcStructuralLinearAction\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralLinearActionVarying))\n SUBTYPE OF (IfcStructuralAction);\n\tProjectedOrTrue : IfcProjectedOrTrueLengthEnum;\n WHERE\n\tWR61 : SIZEOF(['IFC2X3.IFCSTRUCTURALLOADLINEARFORCE',\n                     'IFC2X3.IFCSTRUCTURALLOADTEMPERATURE']\n             * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralLinearActionVarying\n SUBTYPE OF (IfcStructuralLinearAction);\n\tVaryingAppliedLoadLocation : IfcShapeAspect;\n\tSubsequentAppliedLoads : LIST [1:?] OF IfcStructuralLoad;\n DERIVE\n\tVaryingAppliedLoads : LIST [2:?] OF IfcStructuralLoad := IfcAddToBeginOfList(SELF\\IfcStructuralActivity.AppliedLoad, SubsequentAppliedLoads);\nEND_ENTITY;\n\nENTITY IfcStructuralLoad\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadStatic));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadGroup\n SUBTYPE OF (IfcGroup);\n\tPredefinedType : IfcLoadGroupTypeEnum;\n\tActionType : IfcActionTypeEnum;\n\tActionSource : IfcActionSourceTypeEnum;\n\tCoefficient : OPTIONAL IfcRatioMeasure;\n\tPurpose : OPTIONAL IfcLabel;\n INVERSE\n\tSourceOfResultGroup : SET [0:1] OF IfcStructuralResultGroup FOR ResultForLoadGroup;\n\tLoadGroupFor : SET [0:?] OF IfcStructuralAnalysisModel FOR LoadedBy;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadLinearForce\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tLinearForceX : OPTIONAL IfcLinearForceMeasure;\n\tLinearForceY : OPTIONAL IfcLinearForceMeasure;\n\tLinearForceZ : OPTIONAL IfcLinearForceMeasure;\n\tLinearMomentX : OPTIONAL IfcLinearMomentMeasure;\n\tLinearMomentY : OPTIONAL IfcLinearMomentMeasure;\n\tLinearMomentZ : OPTIONAL IfcLinearMomentMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadPlanarForce\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tPlanarForceX : OPTIONAL IfcPlanarForceMeasure;\n\tPlanarForceY : OPTIONAL IfcPlanarForceMeasure;\n\tPlanarForceZ : OPTIONAL IfcPlanarForceMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleDisplacement\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadSingleDisplacementDistortion))\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tDisplacementX : OPTIONAL IfcLengthMeasure;\n\tDisplacementY : OPTIONAL IfcLengthMeasure;\n\tDisplacementZ : OPTIONAL IfcLengthMeasure;\n\tRotationalDisplacementRX : OPTIONAL IfcPlaneAngleMeasure;\n\tRotationalDisplacementRY : OPTIONAL IfcPlaneAngleMeasure;\n\tRotationalDisplacementRZ : OPTIONAL IfcPlaneAngleMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleDisplacementDistortion\n SUBTYPE OF (IfcStructuralLoadSingleDisplacement);\n\tDistortion : OPTIONAL IfcCurvatureMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleForce\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadSingleForceWarping))\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tForceX : OPTIONAL IfcForceMeasure;\n\tForceY : OPTIONAL IfcForceMeasure;\n\tForceZ : OPTIONAL IfcForceMeasure;\n\tMomentX : OPTIONAL IfcTorqueMeasure;\n\tMomentY : OPTIONAL IfcTorqueMeasure;\n\tMomentZ : OPTIONAL IfcTorqueMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleForceWarping\n SUBTYPE OF (IfcStructuralLoadSingleForce);\n\tWarpingMoment : OPTIONAL IfcWarpingMomentMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadStatic\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadLinearForce\n\t,IfcStructuralLoadPlanarForce\n\t,IfcStructuralLoadSingleDisplacement\n\t,IfcStructuralLoadSingleForce\n\t,IfcStructuralLoadTemperature))\n SUBTYPE OF (IfcStructuralLoad);\nEND_ENTITY;\n\nENTITY IfcStructuralLoadTemperature\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tDeltaT_Constant : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tDeltaT_Y : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tDeltaT_Z : OPTIONAL IfcThermodynamicTemperatureMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralMember\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralCurveMember\n\t,IfcStructuralSurfaceMember))\n SUBTYPE OF (IfcStructuralItem);\n INVERSE\n\tReferencesElement : SET [0:?] OF IfcRelConnectsStructuralElement FOR RelatedStructuralMember;\n\tConnectedBy : SET [0:?] OF IfcRelConnectsStructuralMember FOR RelatingStructuralMember;\nEND_ENTITY;\n\nENTITY IfcStructuralPlanarAction\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralPlanarActionVarying))\n SUBTYPE OF (IfcStructuralAction);\n\tProjectedOrTrue : IfcProjectedOrTrueLengthEnum;\n WHERE\n\tWR61 : SIZEOF(['IFC2X3.IFCSTRUCTURALLOADPLANARFORCE',\n                     'IFC2X3.IFCSTRUCTURALLOADTEMPERATURE']\n             * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralPlanarActionVarying\n SUBTYPE OF (IfcStructuralPlanarAction);\n\tVaryingAppliedLoadLocation : IfcShapeAspect;\n\tSubsequentAppliedLoads : LIST [2:?] OF IfcStructuralLoad;\n DERIVE\n\tVaryingAppliedLoads : LIST [3:?] OF IfcStructuralLoad := IfcAddToBeginOfList(SELF\\IfcStructuralActivity.AppliedLoad, SubsequentAppliedLoads);\nEND_ENTITY;\n\nENTITY IfcStructuralPointAction\n SUBTYPE OF (IfcStructuralAction);\n WHERE\n\tWR61 : SIZEOF(['IFC2X3.IFCSTRUCTURALLOADSINGLEFORCE',\n                     'IFC2X3.IFCSTRUCTURALLOADSINGLEDISPLACEMENT']\n             * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralPointConnection\n SUBTYPE OF (IfcStructuralConnection);\nEND_ENTITY;\n\nENTITY IfcStructuralPointReaction\n SUBTYPE OF (IfcStructuralReaction);\n WHERE\n\tWR61 : SIZEOF(['IFC2X3.IFCSTRUCTURALLOADSINGLEFORCE',\n                     'IFC2X3.IFCSTRUCTURALLOADSINGLEDISPLACEMENT']\n             * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralProfileProperties\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralSteelProfileProperties))\n SUBTYPE OF (IfcGeneralProfileProperties);\n\tTorsionalConstantX : OPTIONAL IfcMomentOfInertiaMeasure;\n\tMomentOfInertiaYZ : OPTIONAL IfcMomentOfInertiaMeasure;\n\tMomentOfInertiaY : OPTIONAL IfcMomentOfInertiaMeasure;\n\tMomentOfInertiaZ : OPTIONAL IfcMomentOfInertiaMeasure;\n\tWarpingConstant : OPTIONAL IfcWarpingConstantMeasure;\n\tShearCentreZ : OPTIONAL IfcLengthMeasure;\n\tShearCentreY : OPTIONAL IfcLengthMeasure;\n\tShearDeformationAreaZ : OPTIONAL IfcAreaMeasure;\n\tShearDeformationAreaY : OPTIONAL IfcAreaMeasure;\n\tMaximumSectionModulusY : OPTIONAL IfcSectionModulusMeasure;\n\tMinimumSectionModulusY : OPTIONAL IfcSectionModulusMeasure;\n\tMaximumSectionModulusZ : OPTIONAL IfcSectionModulusMeasure;\n\tMinimumSectionModulusZ : OPTIONAL IfcSectionModulusMeasure;\n\tTorsionalSectionModulus : OPTIONAL IfcSectionModulusMeasure;\n\tCentreOfGravityInX : OPTIONAL IfcLengthMeasure;\n\tCentreOfGravityInY : OPTIONAL IfcLengthMeasure;\n WHERE\n\tWR21 : NOT(EXISTS(ShearDeformationAreaY)) OR (ShearDeformationAreaY >= 0.);\n\tWR22 : NOT(EXISTS(ShearDeformationAreaZ)) OR (ShearDeformationAreaZ >= 0.);\nEND_ENTITY;\n\nENTITY IfcStructuralReaction\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralPointReaction))\n SUBTYPE OF (IfcStructuralActivity);\n INVERSE\n\tCauses : SET [0:?] OF IfcStructuralAction FOR CausedBy;\nEND_ENTITY;\n\nENTITY IfcStructuralResultGroup\n SUBTYPE OF (IfcGroup);\n\tTheoryType : IfcAnalysisTheoryTypeEnum;\n\tResultForLoadGroup : OPTIONAL IfcStructuralLoadGroup;\n\tIsLinear : BOOLEAN;\n INVERSE\n\tResultGroupFor : SET [0:1] OF IfcStructuralAnalysisModel FOR HasResults;\nEND_ENTITY;\n\nENTITY IfcStructuralSteelProfileProperties\n SUBTYPE OF (IfcStructuralProfileProperties);\n\tShearAreaZ : OPTIONAL IfcAreaMeasure;\n\tShearAreaY : OPTIONAL IfcAreaMeasure;\n\tPlasticShapeFactorY : OPTIONAL IfcPositiveRatioMeasure;\n\tPlasticShapeFactorZ : OPTIONAL IfcPositiveRatioMeasure;\n WHERE\n\tWR31 : NOT(EXISTS(ShearAreaY)) OR (ShearAreaY >= 0.);\n\tWR32 : NOT(EXISTS(ShearAreaZ)) OR (ShearAreaZ >= 0.);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceConnection\n SUBTYPE OF (IfcStructuralConnection);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceMember\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralSurfaceMemberVarying))\n SUBTYPE OF (IfcStructuralMember);\n\tPredefinedType : IfcStructuralSurfaceTypeEnum;\n\tThickness : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceMemberVarying\n SUBTYPE OF (IfcStructuralSurfaceMember);\n\tSubsequentThickness : LIST [2:?] OF IfcPositiveLengthMeasure;\n\tVaryingThicknessLocation : IfcShapeAspect;\n DERIVE\n\tVaryingThickness : LIST [3:?] OF IfcPositiveLengthMeasure := IfcAddToBeginOfList(SELF\\IfcStructuralSurfaceMember.Thickness, SubsequentThickness);\n WHERE\n\tWR61 : EXISTS(SELF\\IfcStructuralSurfaceMember.Thickness);\n\tWR62 : SIZEOF(QUERY(temp <* SELF.VaryingThicknessLocation.ShapeRepresentations |\n               NOT(SIZEOF(temp\\IfcRepresentation.Items) = 1)\n               )) = 0;\n\tWR63 : SIZEOF(QUERY(temp <* SELF.VaryingThicknessLocation.ShapeRepresentations |\n               NOT(('IFC2X3.IFCCARTESIANPOINT' IN TYPEOF(temp\\IfcRepresentation.Items[1]))\n                     OR\n                   ('IFC2X3.IFCPOINTONSURFACE' IN TYPEOF(temp\\IfcRepresentation.Items[1])))\n               )) = 0;\nEND_ENTITY;\n\nENTITY IfcStructuredDimensionCallout\n SUBTYPE OF (IfcDraughtingCallout);\n WHERE\n\tWR31 : SIZEOF(QUERY ( Ato <* QUERY ( Con <* SELF.contents | (\n                   'IFC2X3.IFCANNOTATIONTEXTOCCURRENCE' IN \n                    TYPEOF(Con)) ) | (NOT (Ato.Name IN ['dimension value',\n                   'tolerance value','unit text','prefix text','suffix text']))))\n                  = 0;\nEND_ENTITY;\n\nENTITY IfcStyleModel\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStyledRepresentation))\n SUBTYPE OF (IfcRepresentation);\nEND_ENTITY;\n\nENTITY IfcStyledItem\n SUPERTYPE OF (ONEOF\n\t(IfcAnnotationOccurrence))\n SUBTYPE OF (IfcRepresentationItem);\n\tItem : OPTIONAL IfcRepresentationItem;\n\tStyles : SET [1:?] OF IfcPresentationStyleAssignment;\n\tName : OPTIONAL IfcLabel;\n WHERE\n\tWR11 : SIZEOF(Styles) = 1;\n\tWR12 : NOT('IFC2X3.IFCSTYLEDITEM' IN TYPEOF(Item));\nEND_ENTITY;\n\nENTITY IfcStyledRepresentation\n SUBTYPE OF (IfcStyleModel);\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* SELF\\IfcRepresentation.Items | \n               (NOT('IFC2X3.IFCSTYLEDITEM' IN TYPEOF(temp)))\n             )) = 0;\nEND_ENTITY;\n\nENTITY IfcSubContractResource\n SUBTYPE OF (IfcConstructionResource);\n\tSubContractor : OPTIONAL IfcActorSelect;\n\tJobDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcSubedge\n SUBTYPE OF (IfcEdge);\n\tParentEdge : IfcEdge;\nEND_ENTITY;\n\nENTITY IfcSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBoundedSurface\n\t,IfcElementarySurface\n\t,IfcSweptSurface))\n SUBTYPE OF (IfcGeometricRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcSurfaceCurveSweptAreaSolid\n SUBTYPE OF (IfcSweptAreaSolid);\n\tDirectrix : IfcCurve;\n\tStartParam : IfcParameterValue;\n\tEndParam : IfcParameterValue;\n\tReferenceSurface : IfcSurface;\nEND_ENTITY;\n\nENTITY IfcSurfaceOfLinearExtrusion\n SUBTYPE OF (IfcSweptSurface);\n\tExtrudedDirection : IfcDirection;\n\tDepth : IfcLengthMeasure;\n DERIVE\n\tExtrusionAxis : IfcVector := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (ExtrudedDirection, Depth);\n WHERE\n\tWR41 : Depth > 0.;\nEND_ENTITY;\n\nENTITY IfcSurfaceOfRevolution\n SUBTYPE OF (IfcSweptSurface);\n\tAxisPosition : IfcAxis1Placement;\n DERIVE\n\tAxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(AxisPosition.Location, \n                       IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(AxisPosition.Z,1.0));\nEND_ENTITY;\n\nENTITY IfcSurfaceStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tSide : IfcSurfaceSide;\n\tStyles : SET [1:5] OF IfcSurfaceStyleElementSelect;\n WHERE\n\tWR11 : SIZEOF(QUERY(Style <* SELF.Styles |\n               'IFC2X3.IFCSURFACESTYLESHADING' IN\n                TYPEOF(Style)\n               )) <= 1;\n\tWR12 : SIZEOF(QUERY(Style <* SELF.Styles |\n               'IFC2X3.IFCSURFACESTYLELIGHTING' IN\n                TYPEOF(Style)\n               )) <= 1;\n\tWR13 : SIZEOF(QUERY(Style <* SELF.Styles |\n               'IFC2X3.IFCSURFACESTYLEREFRACTION' IN\n                TYPEOF(Style)\n               )) <= 1;\n\tWR14 : SIZEOF(QUERY(Style <* SELF.Styles |\n               'IFC2X3.IFCSURFACESTYLEWITHTEXTURES' IN\n                TYPEOF(Style)\n               )) <= 1;\n\tWR15 : SIZEOF(QUERY(Style <* SELF.Styles |\n               'IFC2X3.IFCEXTERNALLYDEFINEDSURFACESTYLE' IN\n                TYPEOF(Style)\n               )) <= 1;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleLighting;\n\tDiffuseTransmissionColour : IfcColourRgb;\n\tDiffuseReflectionColour : IfcColourRgb;\n\tTransmissionColour : IfcColourRgb;\n\tReflectanceColour : IfcColourRgb;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleRefraction;\n\tRefractionIndex : OPTIONAL IfcReal;\n\tDispersionFactor : OPTIONAL IfcReal;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleRendering\n SUBTYPE OF (IfcSurfaceStyleShading);\n\tTransparency : OPTIONAL IfcNormalisedRatioMeasure;\n\tDiffuseColour : OPTIONAL IfcColourOrFactor;\n\tTransmissionColour : OPTIONAL IfcColourOrFactor;\n\tDiffuseTransmissionColour : OPTIONAL IfcColourOrFactor;\n\tReflectionColour : OPTIONAL IfcColourOrFactor;\n\tSpecularColour : OPTIONAL IfcColourOrFactor;\n\tSpecularHighlight : OPTIONAL IfcSpecularHighlightSelect;\n\tReflectanceMethod : IfcReflectanceMethodEnum;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleShading\n SUPERTYPE OF (ONEOF\n\t(IfcSurfaceStyleRendering));\n\tSurfaceColour : IfcColourRgb;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleWithTextures;\n\tTextures : LIST [1:?] OF IfcSurfaceTexture;\nEND_ENTITY;\n\nENTITY IfcSurfaceTexture\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBlobTexture\n\t,IfcImageTexture\n\t,IfcPixelTexture));\n\tRepeatS : BOOLEAN;\n\tRepeatT : BOOLEAN;\n\tTextureType : IfcSurfaceTextureEnum;\n\tTextureTransform : OPTIONAL IfcCartesianTransformationOperator2D;\nEND_ENTITY;\n\nENTITY IfcSweptAreaSolid\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcExtrudedAreaSolid\n\t,IfcRevolvedAreaSolid\n\t,IfcSurfaceCurveSweptAreaSolid))\n SUBTYPE OF (IfcSolidModel);\n\tSweptArea : IfcProfileDef;\n\tPosition : IfcAxis2Placement3D;\n WHERE\n\tWR22 : SweptArea.ProfileType = IfcProfileTypeEnum.Area;\nEND_ENTITY;\n\nENTITY IfcSweptDiskSolid\n SUBTYPE OF (IfcSolidModel);\n\tDirectrix : IfcCurve;\n\tRadius : IfcPositiveLengthMeasure;\n\tInnerRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tStartParam : IfcParameterValue;\n\tEndParam : IfcParameterValue;\n WHERE\n\tWR1 : Directrix.Dim = 3;\n\tWR2 : (NOT EXISTS(InnerRadius)) OR (Radius > InnerRadius);\nEND_ENTITY;\n\nENTITY IfcSweptSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcSurfaceOfLinearExtrusion\n\t,IfcSurfaceOfRevolution))\n SUBTYPE OF (IfcSurface);\n\tSweptCurve : IfcProfileDef;\n\tPosition : IfcAxis2Placement3D;\n DERIVE\n\tDim : IfcDimensionCount := Position.Dim;\n WHERE\n\tWR1 : NOT('IFC2X3.IFCDERIVEDPROFILEDEF' IN TYPEOF(SweptCurve));\n\tWR2 : SweptCurve.ProfileType = IfcProfileTypeEnum.Curve;\nEND_ENTITY;\n\nENTITY IfcSwitchingDeviceType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcSwitchingDeviceTypeEnum;\nEND_ENTITY;\n\nENTITY IfcSymbolStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tStyleOfSymbol : IfcSymbolStyleSelect;\nEND_ENTITY;\n\nENTITY IfcSystem\n SUPERTYPE OF (ONEOF\n\t(IfcElectricalCircuit\n\t,IfcStructuralAnalysisModel))\n SUBTYPE OF (IfcGroup);\n INVERSE\n\tServicesBuildings : SET [0:1] OF IfcRelServicesBuildings FOR RelatingSystem;\nEND_ENTITY;\n\nENTITY IfcSystemFurnitureElementType\n SUBTYPE OF (IfcFurnishingElementType);\nEND_ENTITY;\n\nENTITY IfcTShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tFlangeEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tWebEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tWebSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tCentreOfGravityInY : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : FlangeThickness < Depth;\n\tWR2 : WebThickness < FlangeWidth;\nEND_ENTITY;\n\nENTITY IfcTable;\n\tName : STRING;\n\tRows : LIST [1:?] OF IfcTableRow;\n DERIVE\n\tNumberOfCellsInRow : INTEGER := HIINDEX(Rows[1].RowCells);\n\tNumberOfHeadings : INTEGER := SIZEOF(QUERY( Temp <* Rows | Temp.IsHeading));\n\tNumberOfDataRows : INTEGER := SIZEOF(QUERY( Temp <* Rows | NOT(Temp.IsHeading)));\n WHERE\n\tWR1 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0;\n\tWR2 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0;\n\tWR3 : { 0 <= NumberOfHeadings <= 1 };\nEND_ENTITY;\n\nENTITY IfcTableRow;\n\tRowCells : LIST [1:?] OF IfcValue;\n\tIsHeading : BOOLEAN;\n INVERSE\n\tOfTable : IfcTable FOR Rows;\nEND_ENTITY;\n\nENTITY IfcTankType\n SUBTYPE OF (IfcFlowStorageDeviceType);\n\tPredefinedType : IfcTankTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcTankTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcTankTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTask\n SUPERTYPE OF (ONEOF\n\t(IfcMove\n\t,IfcOrderAction))\n SUBTYPE OF (IfcProcess);\n\tTaskId : IfcIdentifier;\n\tStatus : OPTIONAL IfcLabel;\n\tWorkMethod : OPTIONAL IfcLabel;\n\tIsMilestone : BOOLEAN;\n\tPriority : OPTIONAL INTEGER;\n WHERE\n\tWR1 : SIZEOF(QUERY(temp <* SELF\\IfcObjectDefinition.Decomposes | NOT('IFC2X3.IFCRELNESTS' IN TYPEOF(temp)))) = 0;\n\tWR2 : SIZEOF(QUERY(temp <* SELF\\IfcObjectDefinition.IsDecomposedBy | NOT('IFC2X3.IFCRELNESTS' IN TYPEOF(temp)))) = 0;\n\tWR3 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcTelecomAddress\n SUBTYPE OF (IfcAddress);\n\tTelephoneNumbers : OPTIONAL LIST [1:?] OF IfcLabel;\n\tFacsimileNumbers : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPagerNumber : OPTIONAL IfcLabel;\n\tElectronicMailAddresses : OPTIONAL LIST [1:?] OF IfcLabel;\n\tWWWHomePageURL : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS (TelephoneNumbers) OR\n            EXISTS (PagerNumber) OR\n            EXISTS (FacsimileNumbers) OR \n            EXISTS (ElectronicMailAddresses) OR \n            EXISTS (WWWHomePageURL);\nEND_ENTITY;\n\nENTITY IfcTendon\n SUBTYPE OF (IfcReinforcingElement);\n\tPredefinedType : IfcTendonTypeEnum;\n\tNominalDiameter : IfcPositiveLengthMeasure;\n\tCrossSectionArea : IfcAreaMeasure;\n\tTensionForce : OPTIONAL IfcForceMeasure;\n\tPreStress : OPTIONAL IfcPressureMeasure;\n\tFrictionCoefficient : OPTIONAL IfcNormalisedRatioMeasure;\n\tAnchorageSlip : OPTIONAL IfcPositiveLengthMeasure;\n\tMinCurvatureRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : (PredefinedType <> IfcTendonTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTendonTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcTendonAnchor\n SUBTYPE OF (IfcReinforcingElement);\nEND_ENTITY;\n\nENTITY IfcTerminatorSymbol\n SUPERTYPE OF (ONEOF\n\t(IfcDimensionCurveTerminator))\n SUBTYPE OF (IfcAnnotationSymbolOccurrence);\n\tAnnotatedCurve : IfcAnnotationCurveOccurrence;\nEND_ENTITY;\n\nENTITY IfcTextLiteral\n SUPERTYPE OF (ONEOF\n\t(IfcTextLiteralWithExtent))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tLiteral : IfcPresentableText;\n\tPlacement : IfcAxis2Placement;\n\tPath : IfcTextPath;\nEND_ENTITY;\n\nENTITY IfcTextLiteralWithExtent\n SUBTYPE OF (IfcTextLiteral);\n\tExtent : IfcPlanarExtent;\n\tBoxAlignment : IfcBoxAlignment;\n WHERE\n\tWR31 : NOT('IFC2X3.IFCPLANARBOX' IN TYPEOF(Extent));\nEND_ENTITY;\n\nENTITY IfcTextStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tTextCharacterAppearance : OPTIONAL IfcCharacterStyleSelect;\n\tTextStyle : OPTIONAL IfcTextStyleSelect;\n\tTextFontStyle : IfcTextFontSelect;\nEND_ENTITY;\n\nENTITY IfcTextStyleFontModel\n SUBTYPE OF (IfcPreDefinedTextFont);\n\tFontFamily : OPTIONAL LIST [1:?] OF IfcTextFontName;\n\tFontStyle : OPTIONAL IfcFontStyle;\n\tFontVariant : OPTIONAL IfcFontVariant;\n\tFontWeight : OPTIONAL IfcFontWeight;\n\tFontSize : IfcSizeSelect;\n WHERE\n\tWR31 : ('IFC2X3.IFCLENGTHMEASURE' IN TYPEOF(SELF.FontSize)) AND\n             (SELF.FontSize > 0.);\nEND_ENTITY;\n\nENTITY IfcTextStyleForDefinedFont;\n\tColour : IfcColour;\n\tBackgroundColour : OPTIONAL IfcColour;\nEND_ENTITY;\n\nENTITY IfcTextStyleTextModel;\n\tTextIndent : OPTIONAL IfcSizeSelect;\n\tTextAlign : OPTIONAL IfcTextAlignment;\n\tTextDecoration : OPTIONAL IfcTextDecoration;\n\tLetterSpacing : OPTIONAL IfcSizeSelect;\n\tWordSpacing : OPTIONAL IfcSizeSelect;\n\tTextTransform : OPTIONAL IfcTextTransformation;\n\tLineHeight : OPTIONAL IfcSizeSelect;\nEND_ENTITY;\n\nENTITY IfcTextStyleWithBoxCharacteristics;\n\tBoxHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tBoxWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tBoxSlantAngle : OPTIONAL IfcPlaneAngleMeasure;\n\tBoxRotateAngle : OPTIONAL IfcPlaneAngleMeasure;\n\tCharacterSpacing : OPTIONAL IfcSizeSelect;\nEND_ENTITY;\n\nENTITY IfcTextureCoordinate\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcTextureCoordinateGenerator\n\t,IfcTextureMap));\n INVERSE\n\tAnnotatedSurface : SET [1:1] OF IfcAnnotationSurface FOR TextureCoordinates;\nEND_ENTITY;\n\nENTITY IfcTextureCoordinateGenerator\n SUBTYPE OF (IfcTextureCoordinate);\n\tMode : IfcLabel;\n\tParameter : LIST [1:?] OF IfcSimpleValue;\nEND_ENTITY;\n\nENTITY IfcTextureMap\n SUBTYPE OF (IfcTextureCoordinate);\n\tTextureMaps : SET [1:?] OF IfcVertexBasedTextureMap;\n WHERE\n\tWR11 : SIZEOF([\n               'IFC2X3.IFCSHELLBASEDSURFACEMODEL',\n               'IFC2X3.IFCFACEBASEDSURFACEMODEL',\n               'IFC2X3.IFCFACETEDBREP',\n               'IFC2X3.IFCFACETEDBREPWITHVOIDS'] \n              * TYPEOF(SELF\\IfcTextureCoordinate.AnnotatedSurface[1].Item)\n               ) >= 1;\nEND_ENTITY;\n\nENTITY IfcTextureVertex;\n\tCoordinates : LIST [2:2] OF IfcParameterValue;\nEND_ENTITY;\n\nENTITY IfcThermalMaterialProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tSpecificHeatCapacity : OPTIONAL IfcSpecificHeatCapacityMeasure;\n\tBoilingPoint : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tFreezingPoint : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tThermalConductivity : OPTIONAL IfcThermalConductivityMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcTimeSeries\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcIrregularTimeSeries\n\t,IfcRegularTimeSeries));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tStartTime : IfcDateTimeSelect;\n\tEndTime : IfcDateTimeSelect;\n\tTimeSeriesDataType : IfcTimeSeriesDataTypeEnum;\n\tDataOrigin : IfcDataOriginEnum;\n\tUserDefinedDataOrigin : OPTIONAL IfcLabel;\n\tUnit : OPTIONAL IfcUnit;\n INVERSE\n\tDocumentedBy : SET [0:1] OF IfcTimeSeriesReferenceRelationship FOR ReferencedTimeSeries;\nEND_ENTITY;\n\nENTITY IfcTimeSeriesReferenceRelationship;\n\tReferencedTimeSeries : IfcTimeSeries;\n\tTimeSeriesReferences : SET [1:?] OF IfcDocumentSelect;\nEND_ENTITY;\n\nENTITY IfcTimeSeriesSchedule\n SUBTYPE OF (IfcControl);\n\tApplicableDates : OPTIONAL LIST [1:?] OF IfcDateTimeSelect;\n\tTimeSeriesScheduleType : IfcTimeSeriesScheduleTypeEnum;\n\tTimeSeries : IfcTimeSeries;\n WHERE\n\tWR41 : NOT(TimeSeriesScheduleType=IfcTimeSeriesScheduleTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcTimeSeriesValue;\n\tListValues : LIST [1:?] OF IfcValue;\nEND_ENTITY;\n\nENTITY IfcTopologicalRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConnectedFaceSet\n\t,IfcEdge\n\t,IfcFace\n\t,IfcFaceBound\n\t,IfcLoop\n\t,IfcPath\n\t,IfcVertex))\n SUBTYPE OF (IfcRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcTopologyRepresentation\n SUBTYPE OF (IfcShapeModel);\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* SELF\\IfcRepresentation.Items | \n               NOT('IFC2X3.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))\n             )) = 0;\n\tWR22 : EXISTS(SELF\\IfcRepresentation.RepresentationType);\n\tWR23 : IfcTopologyRepresentationTypes(SELF\\IfcRepresentation.RepresentationType, SELF\\IfcRepresentation.Items);\nEND_ENTITY;\n\nENTITY IfcTransformerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcTransformerTypeEnum;\nEND_ENTITY;\n\nENTITY IfcTransportElement\n SUBTYPE OF (IfcElement);\n\tOperationType : OPTIONAL IfcTransportElementTypeEnum;\n\tCapacityByWeight : OPTIONAL IfcMassMeasure;\n\tCapacityByNumber : OPTIONAL IfcCountMeasure;\nEND_ENTITY;\n\nENTITY IfcTransportElementType\n SUBTYPE OF (IfcElementType);\n\tPredefinedType : IfcTransportElementTypeEnum;\nEND_ENTITY;\n\nENTITY IfcTrapeziumProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tBottomXDim : IfcPositiveLengthMeasure;\n\tTopXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\n\tTopXOffset : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcTrimmedCurve\n SUBTYPE OF (IfcBoundedCurve);\n\tBasisCurve : IfcCurve;\n\tTrim1 : SET [1:2] OF IfcTrimmingSelect;\n\tTrim2 : SET [1:2] OF IfcTrimmingSelect;\n\tSenseAgreement : BOOLEAN;\n\tMasterRepresentation : IfcTrimmingPreference;\n WHERE\n\tWR41 : (HIINDEX(Trim1) = 1) OR (TYPEOF(Trim1[1]) <> TYPEOF(Trim1[2]));\n\tWR42 : (HIINDEX(Trim2) = 1) OR (TYPEOF(Trim2[1]) <> TYPEOF(Trim2[2]));\n\tWR43 : NOT('IFC2X3.IFCBOUNDEDCURVE' IN TYPEOF(BasisCurve));\nEND_ENTITY;\n\nENTITY IfcTubeBundleType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcTubeBundleTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcTubeBundleTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcTubeBundleTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTwoDirectionRepeatFactor\n SUBTYPE OF (IfcOneDirectionRepeatFactor);\n\tSecondRepeatFactor : IfcVector;\nEND_ENTITY;\n\nENTITY IfcTypeObject\n SUPERTYPE OF (ONEOF\n\t(IfcTypeProduct))\n SUBTYPE OF (IfcObjectDefinition);\n\tApplicableOccurrence : OPTIONAL IfcLabel;\n\tHasPropertySets : OPTIONAL SET [1:?] OF IfcPropertySetDefinition;\n INVERSE\n\tObjectTypeOf : SET [0:1] OF IfcRelDefinesByType FOR RelatingType;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcTypeProduct\n SUPERTYPE OF (ONEOF\n\t(IfcDoorStyle\n\t,IfcElementType\n\t,IfcWindowStyle))\n SUBTYPE OF (IfcTypeObject);\n\tRepresentationMaps : OPTIONAL LIST [1:?] OF UNIQUE IfcRepresentationMap;\n\tTag : OPTIONAL IfcLabel;\n WHERE\n\tWR41 : NOT(EXISTS(SELF\\IfcTypeObject.ObjectTypeOf[1])) OR\n             (SIZEOF(QUERY(temp <* SELF\\IfcTypeObject.ObjectTypeOf[1].RelatedObjects |\n               NOT('IFC2X3.IFCPRODUCT' IN TYPEOF(temp)))\n             ) = 0);\nEND_ENTITY;\n\nENTITY IfcUShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tCentreOfGravityInX : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR21 : FlangeThickness < (Depth / 2.);\n\tWR22 : WebThickness < FlangeWidth;\nEND_ENTITY;\n\nENTITY IfcUnitAssignment;\n\tUnits : SET [1:?] OF IfcUnit;\n WHERE\n\tWR01 : IfcCorrectUnitAssignment(Units);\nEND_ENTITY;\n\nENTITY IfcUnitaryEquipmentType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcUnitaryEquipmentTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcUnitaryEquipmentTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcUnitaryEquipmentTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcValveType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcValveTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcValveTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcValveTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcVector\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOrientation : IfcDirection;\n\tMagnitude : IfcLengthMeasure;\n DERIVE\n\tDim : IfcDimensionCount := Orientation.Dim;\n WHERE\n\tWR1 : Magnitude >= 0.0;\nEND_ENTITY;\n\nENTITY IfcVertex\n SUPERTYPE OF (ONEOF\n\t(IfcVertexPoint))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcVertexBasedTextureMap;\n\tTextureVertices : LIST [3:?] OF IfcTextureVertex;\n\tTexturePoints : LIST [3:?] OF IfcCartesianPoint;\nEND_ENTITY;\n\nENTITY IfcVertexLoop\n SUBTYPE OF (IfcLoop);\n\tLoopVertex : IfcVertex;\nEND_ENTITY;\n\nENTITY IfcVertexPoint\n SUBTYPE OF (IfcVertex);\n\tVertexGeometry : IfcPoint;\nEND_ENTITY;\n\nENTITY IfcVibrationIsolatorType\n SUBTYPE OF (IfcDiscreteAccessoryType);\n\tPredefinedType : IfcVibrationIsolatorTypeEnum;\n WHERE\n\tWR1 : (PredefinedType <> IfcVibrationIsolatorTypeEnum.USERDEFINED) OR\n            ((PredefinedType = IfcVibrationIsolatorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcVirtualElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcVirtualGridIntersection;\n\tIntersectingAxes : LIST [2:2] OF UNIQUE IfcGridAxis;\n\tOffsetDistances : LIST [2:3] OF IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcWall\n SUPERTYPE OF (ONEOF\n\t(IfcWallStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n WHERE\n\tWR1 : SIZEOF (QUERY(temp <* SELF\\IfcObjectDefinition.HasAssociations |\n              'IFC2X3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)\n              )) <= 1;\nEND_ENTITY;\n\nENTITY IfcWallStandardCase\n SUBTYPE OF (IfcWall);\n WHERE\n\tWR1 : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC2X3.IFCRELASSOCIATES.RELATEDOBJECTS') |\n                          ('IFC2X3.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND\n                          ('IFC2X3.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial))\n                          )) = 1;\nEND_ENTITY;\n\nENTITY IfcWallType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcWallTypeEnum;\nEND_ENTITY;\n\nENTITY IfcWasteTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcWasteTerminalTypeEnum;\nEND_ENTITY;\n\nENTITY IfcWaterProperties\n SUBTYPE OF (IfcMaterialProperties);\n\tIsPotable : OPTIONAL BOOLEAN;\n\tHardness : OPTIONAL IfcIonConcentrationMeasure;\n\tAlkalinityConcentration : OPTIONAL IfcIonConcentrationMeasure;\n\tAcidityConcentration : OPTIONAL IfcIonConcentrationMeasure;\n\tImpuritiesContent : OPTIONAL IfcNormalisedRatioMeasure;\n\tPHLevel : OPTIONAL IfcPHMeasure;\n\tDissolvedSolidsContent : OPTIONAL IfcNormalisedRatioMeasure;\n UNIQUE\n\tUR11 : Material;\nEND_ENTITY;\n\nENTITY IfcWindow\n SUBTYPE OF (IfcBuildingElement);\n\tOverallHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tOverallWidth : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcWindowLiningProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tLiningDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tLiningThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTransomThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tMullionThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tFirstTransomOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tSecondTransomOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tFirstMullionOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tSecondMullionOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n WHERE\n\tWR31 : NOT(NOT(EXISTS(LiningDepth)) AND EXISTS(LiningThickness));\n\tWR32 : NOT(NOT(EXISTS(FirstTransomOffset)) AND EXISTS(SecondTransomOffset));\n\tWR33 : NOT(NOT(EXISTS(FirstMullionOffset)) AND EXISTS(SecondMullionOffset));\n\tWR34 : EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1]) AND \n             ('IFC2X3.IFCWINDOWSTYLE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]));\nEND_ENTITY;\n\nENTITY IfcWindowPanelProperties\n SUBTYPE OF (IfcPropertySetDefinition);\n\tOperationType : IfcWindowPanelOperationEnum;\n\tPanelPosition : IfcWindowPanelPositionEnum;\n\tFrameDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tFrameThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\nEND_ENTITY;\n\nENTITY IfcWindowStyle\n SUBTYPE OF (IfcTypeProduct);\n\tConstructionType : IfcWindowStyleConstructionEnum;\n\tOperationType : IfcWindowStyleOperationEnum;\n\tParameterTakesPrecedence : BOOLEAN;\n\tSizeable : BOOLEAN;\nEND_ENTITY;\n\nENTITY IfcWorkControl\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcWorkPlan\n\t,IfcWorkSchedule))\n SUBTYPE OF (IfcControl);\n\tIdentifier : IfcIdentifier;\n\tCreationDate : IfcDateTimeSelect;\n\tCreators : OPTIONAL SET [1:?] OF IfcPerson;\n\tPurpose : OPTIONAL IfcLabel;\n\tDuration : OPTIONAL IfcTimeMeasure;\n\tTotalFloat : OPTIONAL IfcTimeMeasure;\n\tStartTime : IfcDateTimeSelect;\n\tFinishTime : OPTIONAL IfcDateTimeSelect;\n\tWorkControlType : OPTIONAL IfcWorkControlTypeEnum;\n\tUserDefinedControlType : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : (WorkControlType <> IfcWorkControlTypeEnum.USERDEFINED) OR\n            ((WorkControlType = IfcWorkControlTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcWorkControl.UserDefinedControlType));\nEND_ENTITY;\n\nENTITY IfcWorkPlan\n SUBTYPE OF (IfcWorkControl);\nEND_ENTITY;\n\nENTITY IfcWorkSchedule\n SUBTYPE OF (IfcWorkControl);\nEND_ENTITY;\n\nENTITY IfcZShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tWR21 : FlangeThickness < (Depth / 2.);\nEND_ENTITY;\n\nENTITY IfcZone\n SUBTYPE OF (IfcGroup);\n WHERE\n\tWR1 : SIZEOF (QUERY (temp <* SELF\\IfcGroup.IsGroupedBy.RelatedObjects |  NOT(('IFC2X3.IFCZONE' IN TYPEOF(temp)) OR ('IFC2X3.IFCSPACE' IN TYPEOF(temp))) )) = 0;\nEND_ENTITY;\n\nFUNCTION IfcAddToBeginOfList\n\t(AScalar : GENERIC;\n       AList   : LIST OF GENERIC:AL)\n\t: LIST[1:?] OF GENERIC:AL;\n    \n      LOCAL\n        Result : LIST OF GENERIC:AL := [];\n      END_LOCAL;\n  \n    IF NOT(EXISTS(AScalar)) THEN\n      Result := AList;\n    ELSE\n      Result := Result + AScalar;\n      IF (HIINDEX(AList) >= 1) THEN\n        REPEAT i:=1 TO HIINDEX(AList);\n          Result[i+1] := AList[i];\n        END_REPEAT;\n      END_IF;\n    END_IF;\n    RETURN(Result);\nEND_FUNCTION;\n\nFUNCTION IfcBaseAxis\n\t(Dim : INTEGER; \n     Axis1, Axis2, Axis3 : IfcDirection)\n\t: LIST [2:3] OF IfcDirection;\n  \n  LOCAL\n    U : LIST [2:3] OF IfcDirection;\n    Factor : REAL;\n    D1, D2 : IfcDirection;\n  END_LOCAL;\n  \n    IF (Dim = 3) THEN \n      D1 := NVL(IfcNormalise(Axis3), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n      D2 := IfcFirstProjAxis(D1, Axis1);\n      U  := [D2, IfcSecondProjAxis(D1, D2, Axis2), D1];\n    ELSE\n      IF EXISTS(Axis1) THEN\n        D1 := IfcNormalise(Axis1);\n        U  := [D1, IfcOrthogonalComplement(D1)];\n        IF EXISTS(Axis2) THEN\n          Factor := IfcDotProduct(Axis2, U[2]);\n          IF (Factor < 0.0) THEN\n            U[2].DirectionRatios[1] := -U[2].DirectionRatios[1];\n            U[2].DirectionRatios[2] := -U[2].DirectionRatios[2];\n          END_IF;\n        END_IF;\n      ELSE\n        IF EXISTS(Axis2) THEN\n          D1 := IfcNormalise(Axis2);\n          U  := [IfcOrthogonalComplement(D1), D1];\n          U[1].DirectionRatios[1] := -U[1].DirectionRatios[1];\n          U[1].DirectionRatios[2] := -U[1].DirectionRatios[2];\n          ELSE\n            U := [IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0, 0.0]), \n                  IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0, 1.0])];\n        END_IF;\n      END_IF;\n    END_IF;\n    RETURN(U);\nEND_FUNCTION;\n\nFUNCTION IfcBooleanChoose\n\t(B : BOOLEAN ;\n       Choice1, Choice2 : Generic : Item)\n\t: Generic : Item;\n    IF B THEN\n       RETURN (Choice1);\n    ELSE\n       RETURN (Choice2);\n    END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcBuild2Axes\n\t(RefDirection : IfcDirection)\n\t: LIST [2:2] OF IfcDirection;\n  LOCAL\n    D : IfcDirection := NVL(IfcNormalise(RefDirection),\n        IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0]));\n  END_LOCAL;\n    RETURN([D, IfcOrthogonalComplement(D)]);\nEND_FUNCTION;\n\nFUNCTION IfcBuildAxes\n\t(Axis, RefDirection : IfcDirection)\n\t: LIST [3:3] OF IfcDirection;\n  LOCAL\n    D1, D2 : IfcDirection;\n  END_LOCAL;\n    D1 := NVL(IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n    D2 := IfcFirstProjAxis(D1, RefDirection);\n    RETURN ([D2, IfcNormalise(IfcCrossProduct(D1,D2))\\IfcVector.Orientation, D1]);\nEND_FUNCTION;\n\nFUNCTION IfcCorrectDimensions\n\t(m   : IfcUnitEnum; Dim : IfcDimensionalExponents)\n\t: LOGICAL;  \n  CASE m OF\n    LENGTHUNIT : IF\n      Dim = (IfcDimensionalExponents (1, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    MASSUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 1, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    TIMEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 1, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICCURRENTUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    THERMODYNAMICTEMPERATUREUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 1, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    AMOUNTOFSUBSTANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 1, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    LUMINOUSINTENSITYUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    PLANEANGLEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    SOLIDANGLEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    AREAUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    VOLUMEUNIT : IF\n      Dim = (IfcDimensionalExponents (3, 0, 0, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n  \n    ABSORBEDDOSEUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    RADIOACTIVITYUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICCAPACITANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (-2, 1, 4, 1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    DOSEEQUIVALENTUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICCHARGEUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 1, 1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICCONDUCTANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (-2, -1, 3, 2, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICVOLTAGEUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -3, -1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ELECTRICRESISTANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -3, -2, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ENERGYUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    FORCEUNIT : IF\n      Dim = (IfcDimensionalExponents (1, 1, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    FREQUENCYUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    INDUCTANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -2, -2, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    ILLUMINANCEUNIT : IF\n      Dim = (IfcDimensionalExponents (-2, 0, 0, 0, 0, 0, 1))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    LUMINOUSFLUXUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    MAGNETICFLUXUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -2, -1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    MAGNETICFLUXDENSITYUNIT : IF\n      Dim = (IfcDimensionalExponents (0, 1, -2, -1, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    POWERUNIT : IF\n      Dim = (IfcDimensionalExponents (2, 1, -3, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n    PRESSUREUNIT : IF\n      Dim = (IfcDimensionalExponents (-1, 1, -2, 0, 0, 0, 0))\n        THEN RETURN(TRUE);\n        ELSE RETURN(FALSE);\n      END_IF;\n  \n    OTHERWISE :\n      RETURN (UNKNOWN);\n  END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcCorrectFillAreaStyle\n\t(Styles : SET[1:?] OF IfcFillStyleSelect)\n\t: LOGICAL;\n  \n  LOCAL\n     Hatching : INTEGER := 0;\n     Tiles    : INTEGER := 0;\n     Colour   : INTEGER := 0;\n     External : INTEGER := 0;\n  END_LOCAL;\n  \n  \n  External := SIZEOF(QUERY(Style <* Styles |\n    'IFC2X3.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN\n     TYPEOF(Style)));\n  \n  Hatching  := SIZEOF(QUERY(Style <* Styles |\n    'IFC2X3.IFCFILLAREASTYLEHATCHING' IN\n     TYPEOF(Style)));\n  \n  Tiles     := SIZEOF(QUERY(Style <* Styles |\n    'IFC2X3.IFCFILLAREASTYLETILES' IN\n     TYPEOF(Style)));\n  \n  Colour    := SIZEOF(QUERY(Style <* Styles |\n    'IFC2X3.IFCCOLOUR' IN\n     TYPEOF(Style)));\n  \n  \n  IF (External > 1) THEN\n    RETURN (FALSE);\n  END_IF;\n  \n  \n  IF ((External = 1) AND ((Hatching > 0) OR (Tiles > 0) OR (Colour > 0))) THEN\n    RETURN (FALSE);\n  END_IF;\n  \n  \n  IF (Colour > 1) THEN\n    RETURN (FALSE);\n  END_IF;\n  \n  IF ((Hatching > 0) AND (Tiles >0)) THEN\n    RETURN (FALSE);\n  END_IF;\n  \n  RETURN(TRUE);\nEND_FUNCTION;\n\nFUNCTION IfcCorrectLocalPlacement\n\t(AxisPlacement:IfcAxis2Placement; \n     RelPlacement : IfcObjectPlacement)\n\t: LOGICAL;\n  \n    IF (EXISTS(RelPlacement)) THEN\n      IF ('IFC2X3.IFCGRIDPLACEMENT' IN TYPEOF(RelPlacement)) THEN\n        RETURN(?);\n      END_IF;\n      IF ('IFC2X3.IFCLOCALPLACEMENT' IN TYPEOF(RelPlacement)) THEN\n        IF ('IFC2X3.IFCAXIS2PLACEMENT2D' IN TYPEOF(AxisPlacement)) THEN\n          RETURN(TRUE);\n        END_IF;\n        IF ('IFC2X3.IFCAXIS2PLACEMENT3D' IN TYPEOF(AxisPlacement)) THEN\n          IF (RelPlacement.RelativePlacement.Dim = 3) THEN\n            RETURN(TRUE);\n          ELSE\n            RETURN(FALSE);\n          END_IF;\n        END_IF;\n      END_IF;\n    ELSE\n      RETURN(TRUE);  \n    END_IF;\n    RETURN(?);\nEND_FUNCTION;\n\nFUNCTION IfcCorrectObjectAssignment\n\t(Constraint: IfcObjectTypeEnum; Objects : SET[1:?] OF IfcObjectDefinition)\n\t: LOGICAL;\n    \n  LOCAL\n    Count : INTEGER := 0;\n  END_LOCAL;\n  \n      IF NOT(EXISTS(Constraint)) THEN \n        RETURN(TRUE);\n      END_IF;\n    \n      CASE Constraint OF\n        IfcObjectTypeEnum.NOTDEFINED : RETURN(TRUE);\n        IfcObjectTypeEnum.PRODUCT :\n          BEGIN\n            Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCPRODUCT' IN TYPEOF(temp))));\n            RETURN(Count = 0);\n          END;\n        IfcObjectTypeEnum.PROCESS :\n          BEGIN\n            Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCPROCESS' IN TYPEOF(temp))));\n            RETURN(Count = 0);\n          END;\n        IfcObjectTypeEnum.CONTROL :\n          BEGIN\n            Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCCONTROL' IN TYPEOF(temp))));\n            RETURN(Count = 0);\n          END;\n        IfcObjectTypeEnum.RESOURCE :\n          BEGIN\n            Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCRESOURCE' IN TYPEOF(temp))));\n            RETURN(Count = 0);\n          END;\n        IfcObjectTypeEnum.ACTOR :\n          BEGIN\n            Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCACTOR' IN TYPEOF(temp))));\n            RETURN(Count = 0);\n          END;\n        IfcObjectTypeEnum.GROUP :\n          BEGIN\n            Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCGROUP' IN TYPEOF(temp))));\n            RETURN(Count = 0);\n          END;\n        IfcObjectTypeEnum.PROJECT :\n          BEGIN\n            Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC2X3.IFCPROJECT' IN TYPEOF(temp))));\n            RETURN(Count = 0);\n          END;\n        OTHERWISE : RETURN(?);\n      END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcCorrectUnitAssignment\n\t(Units : SET [1:?] OF IfcUnit)\n\t: LOGICAL;\n  \n    LOCAL\n      NamedUnitNumber    : INTEGER := 0;\n      DerivedUnitNumber  : INTEGER := 0;\n      MonetaryUnitNumber : INTEGER := 0;\n      NamedUnitNames     : SET OF IfcUnitEnum := [];\n      DerivedUnitNames   : SET OF IfcDerivedUnitEnum := [];\n    END_LOCAL;\n  \n    NamedUnitNumber    := SIZEOF(QUERY(temp <* Units | ('IFC2X3.IFCNAMEDUNIT' IN TYPEOF(temp)) AND NOT(temp\\IfcNamedUnit.UnitType = IfcUnitEnum.USERDEFINED)));\n    DerivedUnitNumber  := SIZEOF(QUERY(temp <* Units | ('IFC2X3.IFCDERIVEDUNIT' IN TYPEOF(temp)) AND NOT(temp\\IfcDerivedUnit.UnitType = IfcDerivedUnitEnum.USERDEFINED)));\n    MonetaryUnitNumber := SIZEOF(QUERY(temp <* Units |  'IFC2X3.IFCMONETARYUNIT' IN TYPEOF(temp)));\n  \n    REPEAT i := 1 TO SIZEOF(Units);\n      IF (('IFC2X3.IFCNAMEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i]\\IfcNamedUnit.UnitType = IfcUnitEnum.USERDEFINED)) THEN\n          NamedUnitNames := NamedUnitNames + Units[i]\\IfcNamedUnit.UnitType;\n      END_IF;\n      IF (('IFC2X3.IFCDERIVEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i]\\IfcDerivedUnit.UnitType = IfcDerivedUnitEnum.USERDEFINED)) THEN\n          DerivedUnitNames := DerivedUnitNames + Units[i]\\IfcDerivedUnit.UnitType;\n      END_IF;\n    END_REPEAT;\n  \n    RETURN((SIZEOF(NamedUnitNames) = NamedUnitNumber) AND (SIZEOF(DerivedUnitNames) = DerivedUnitNumber) AND (MonetaryUnitNumber <= 1));\nEND_FUNCTION;\n\nFUNCTION IfcCrossProduct\n\t(Arg1, Arg2 : IfcDirection)\n\t: IfcVector;\n  LOCAL\n    Mag : REAL;\n    Res : IfcDirection;\n    V1,V2  : LIST[3:3] OF REAL;\n    Result : IfcVector;\n  END_LOCAL;\n  \n    IF (NOT EXISTS (Arg1) OR (Arg1.Dim = 2)) OR (NOT EXISTS (Arg2) OR (Arg2.Dim = 2)) THEN\n      RETURN(?);\n    ELSE\n      BEGIN\n        V1  := IfcNormalise(Arg1).DirectionRatios;\n        V2  := IfcNormalise(Arg2).DirectionRatios;\n        Res := IfcRepresentationItem() || IfcGeometricRepresentationItem () \n               || IfcDirection([(V1[2]*V2[3] - V1[3]*V2[2]), (V1[3]*V2[1] - V1[1]*V2[3]), (V1[1]*V2[2] - V1[2]*V2[1])]);\n        Mag := 0.0;\n        REPEAT i := 1 TO 3;\n          Mag := Mag + Res.DirectionRatios[i]*Res.DirectionRatios[i];\n        END_REPEAT;\n        IF (Mag > 0.0) THEN\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Res, SQRT(Mag));\n        ELSE\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Arg1, 0.0);\n        END_IF;\n        RETURN(Result);\n      END;\n    END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcCurveDim\n\t(Curve : IfcCurve)\n\t: IfcDimensionCount;\n  \n    IF ('IFC2X3.IFCLINE' IN TYPEOF(Curve))\n      THEN RETURN(Curve\\IfcLine.Pnt.Dim);\n    END_IF;\n    IF ('IFC2X3.IFCCONIC' IN TYPEOF(Curve))\n      THEN RETURN(Curve\\IfcConic.Position.Dim);\n    END_IF;\n    IF ('IFC2X3.IFCPOLYLINE' IN TYPEOF(Curve))\n      THEN RETURN(Curve\\IfcPolyline.Points[1].Dim);\n    END_IF;\n    IF ('IFC2X3.IFCTRIMMEDCURVE' IN TYPEOF(Curve))\n      THEN RETURN(IfcCurveDim(Curve\\IfcTrimmedCurve.BasisCurve));\n    END_IF;\n    IF ('IFC2X3.IFCCOMPOSITECURVE' IN TYPEOF(Curve))\n      THEN RETURN(Curve\\IfcCompositeCurve.Segments[1].Dim);\n    END_IF;\n    IF ('IFC2X3.IFCBSPLINECURVE' IN TYPEOF(Curve))\n      THEN RETURN(Curve\\IfcBSplineCurve.ControlPointsList[1].Dim);\n    END_IF;\n    IF ('IFC2X3.IFCOFFSETCURVE2D' IN TYPEOF(Curve))\n      THEN RETURN(2); \n    END_IF;\n    IF ('IFC2X3.IFCOFFSETCURVE3D' IN TYPEOF(Curve))\n      THEN RETURN(3);\n    END_IF;\n  RETURN (?);\nEND_FUNCTION;\n\nFUNCTION IfcCurveWeightsPositive\n\t(B: IfcRationalBezierCurve)\n\t: BOOLEAN;\n     LOCAL\n       Result : BOOLEAN := TRUE;\n     END_LOCAL;\n  \n     REPEAT i := 0 TO B.UpperIndexOnControlPoints;\n       IF B.Weights[i] <= 0.0  THEN\n         Result := FALSE;\n         RETURN(Result);\n       END_IF;\n     END_REPEAT;\n     RETURN(Result);\nEND_FUNCTION;\n\nFUNCTION IfcDeriveDimensionalExponents\n\t(UnitElements : SET [1:?] Of IfcDerivedUnitElement)\n\t: IfcDimensionalExponents;  \n      LOCAL\n      Result : IfcDimensionalExponents :=\n              IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 0);  \n      END_LOCAL;\n      REPEAT i := LOINDEX(UnitElements) TO HIINDEX(UnitElements);\n          Result.LengthExponent := Result.LengthExponent +\n            (UnitElements[i].Exponent *\n             UnitElements[i].Unit.Dimensions.LengthExponent);\n          Result.MassExponent := Result.MassExponent  +\n            (UnitElements[i].Exponent *\n             UnitElements[i].Unit.Dimensions.MassExponent);\n          Result.TimeExponent := Result.TimeExponent +\n            (UnitElements[i].Exponent *\n             UnitElements[i].Unit.Dimensions.TimeExponent);\n          Result.ElectricCurrentExponent := Result.ElectricCurrentExponent +\n            (UnitElements[i].Exponent *\n             UnitElements[i].Unit.Dimensions.ElectricCurrentExponent);\n          Result.ThermodynamicTemperatureExponent := Result.ThermodynamicTemperatureExponent +\n            (UnitElements[i].Exponent *\n             UnitElements[i].Unit.Dimensions.ThermodynamicTemperatureExponent);\n          Result.AmountOfSubstanceExponent := Result.AmountOfSubstanceExponent +\n            (UnitElements[i].Exponent *\n             UnitElements[i].Unit.Dimensions.AmountOfSubstanceExponent);\n          Result.LuminousIntensityExponent := Result.LuminousIntensityExponent +\n            (UnitElements[i].Exponent *\n             UnitElements[i].Unit.Dimensions.LuminousIntensityExponent);\n      END_REPEAT;  \n      RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcDimensionsForSiUnit\n\t(n : IfcSiUnitName )\n\t: IfcDimensionalExponents;\n    CASE n OF\n      METRE          : RETURN (IfcDimensionalExponents\n                               (1, 0, 0, 0, 0, 0, 0));\n      SQUARE_METRE   : RETURN (IfcDimensionalExponents\n                               (2, 0, 0, 0, 0, 0, 0));\n      CUBIC_METRE    : RETURN (IfcDimensionalExponents\n                               (3, 0, 0, 0, 0, 0, 0));\n      GRAM           : RETURN (IfcDimensionalExponents\n                               (0, 1, 0, 0, 0, 0, 0));\n      SECOND         : RETURN (IfcDimensionalExponents\n                               (0, 0, 1, 0, 0, 0, 0));\n      AMPERE         : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 1, 0, 0, 0));\n      KELVIN         : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 1, 0, 0));\n      MOLE           : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 1, 0));\n      CANDELA        : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 1));\n      RADIAN         : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 0));\n      STERADIAN      : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 0));\n      HERTZ          : RETURN (IfcDimensionalExponents\n                               (0, 0, -1, 0, 0, 0, 0));\n      NEWTON         : RETURN (IfcDimensionalExponents\n                               (1, 1, -2, 0, 0, 0, 0));\n      PASCAL         : RETURN (IfcDimensionalExponents\n                               (-1, 1, -2, 0, 0, 0, 0));\n      JOULE          : RETURN (IfcDimensionalExponents\n                               (2, 1, -2, 0, 0, 0, 0));\n      WATT           : RETURN (IfcDimensionalExponents\n                               (2, 1, -3, 0, 0, 0, 0));\n      COULOMB        : RETURN (IfcDimensionalExponents\n                               (0, 0, 1, 1, 0, 0, 0));\n      VOLT           : RETURN (IfcDimensionalExponents\n                               (2, 1, -3, -1, 0, 0, 0));\n      FARAD          : RETURN (IfcDimensionalExponents\n                               (-2, -1, 4, 1, 0, 0, 0));\n      OHM            : RETURN (IfcDimensionalExponents\n                               (2, 1, -3, -2, 0, 0, 0));\n      SIEMENS        : RETURN (IfcDimensionalExponents\n                               (-2, -1, 3, 2, 0, 0, 0));\n      WEBER          : RETURN (IfcDimensionalExponents\n                               (2, 1, -2, -1, 0, 0, 0));\n      TESLA          : RETURN (IfcDimensionalExponents\n                               (0, 1, -2, -1, 0, 0, 0));\n      HENRY          : RETURN (IfcDimensionalExponents\n                               (2, 1, -2, -2, 0, 0, 0));\n      DEGREE_CELSIUS : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 1, 0, 0));\n      LUMEN          : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 1));\n      LUX            : RETURN (IfcDimensionalExponents\n                               (-2, 0, 0, 0, 0, 0, 1));\n      BECQUEREL      : RETURN (IfcDimensionalExponents\n                               (0, 0, -1, 0, 0, 0, 0));\n      GRAY           : RETURN (IfcDimensionalExponents\n                               (2, 0, -2, 0, 0, 0, 0));\n      SIEVERT        : RETURN (IfcDimensionalExponents\n                               (2, 0, -2, 0, 0, 0, 0));\n      OTHERWISE      : RETURN (IfcDimensionalExponents\n                               (0, 0, 0, 0, 0, 0, 0));\n    END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcDotProduct\n\t(Arg1, Arg2 : IfcDirection)\n\t: REAL;\n  LOCAL\n    Scalar : REAL;\n    Vec1, Vec2 : IfcDirection;\n    Ndim   : INTEGER;\n  END_LOCAL;\n  \n    IF NOT EXISTS (Arg1) OR NOT EXISTS (Arg2) THEN\n      Scalar := ?;\n    ELSE\n      IF (Arg1.Dim <> Arg2.Dim) THEN\n        Scalar := ?;\n      ELSE\n        BEGIN\n          Vec1 := IfcNormalise(Arg1);\n          Vec2 := IfcNormalise(Arg2);\n          Ndim := Arg1.Dim;\n          Scalar := 0.0;\n          REPEAT i := 1 TO Ndim;\n            Scalar := Scalar + Vec1.DirectionRatios[i]*Vec2.DirectionRatios[i];\n          END_REPEAT;\n        END;\n      END_IF;\n    END_IF;\n    RETURN (Scalar);\nEND_FUNCTION;\n\nFUNCTION IfcFirstProjAxis\n\t(ZAxis, Arg : IfcDirection)\n\t: IfcDirection;\n  LOCAL\n    XAxis : IfcDirection;\n    V     : IfcDirection;\n    Z     : IfcDirection;\n    XVec  : IfcVector;\n  END_LOCAL;\n  \n    IF (NOT EXISTS(ZAxis)) THEN\n      RETURN (?) ;\n    ELSE\n      Z := IfcNormalise(ZAxis);\n      IF NOT EXISTS(Arg) THEN\n        IF (Z.DirectionRatios <> [1.0,0.0,0.0]) THEN\n          V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0,0.0]);\n        ELSE\n          V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]);\n        END_IF;\n      ELSE\n        IF (Arg.Dim <> 3) THEN\n          RETURN (?) ;\n        END_IF;\n        IF ((IfcCrossProduct(Arg,Z).Magnitude) = 0.0) THEN\n          RETURN (?);\n        ELSE\n          V := IfcNormalise(Arg);\n        END_IF;\n      END_IF;\n      XVec  := IfcScalarTimesVector(IfcDotProduct(V, Z), Z);\n      XAxis := IfcVectorDifference(V, XVec).Orientation;\n      XAxis := IfcNormalise(XAxis);\n    END_IF;\n    RETURN(XAxis);\nEND_FUNCTION;\n\nFUNCTION IfcLeapYear\n\t(Year : IfcYearNumber)\n\t: BOOLEAN;\n  \n  IF ((((Year MOD 4) = 0) AND ((Year MOD 100) <> 0)) OR\n              ((Year MOD 400) = 0)) THEN\n    RETURN(TRUE);\n  ELSE\n    RETURN(FALSE);\n  END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcListToArray\n\t(Lis : LIST [0:?] OF GENERIC : T;\n         Low,U : INTEGER)\n\t: ARRAY OF GENERIC : T;\n     LOCAL\n       N   : INTEGER;\n       Res : ARRAY [Low:U] OF GENERIC : T;\n     END_LOCAL;\n        \n     N := SIZEOF(Lis);\n     IF (N <> (U-Low +1)) THEN\n       RETURN(?);\n     ELSE\n       Res := [Lis[1] : N];\n       REPEAT i := 2 TO N;\n         Res[Low+i-1] := Lis[i];\n       END_REPEAT;\n       RETURN(Res);\n     END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcLoopHeadToTail\n\t(ALoop : IfcEdgeLoop)\n\t: LOGICAL;\n     LOCAL\n       N : INTEGER;\n       P : LOGICAL := TRUE;\n     END_LOCAL;\n       \n       N := SIZEOF (ALoop.EdgeList);\n       REPEAT i := 2 TO N;\n         P := P AND (ALoop.EdgeList[i-1].EdgeEnd :=:\n                     ALoop.EdgeList[i].EdgeStart);\n       END_REPEAT;     \n       RETURN (P);\nEND_FUNCTION;\n\nFUNCTION IfcMlsTotalThickness\n\t(LayerSet : IfcMaterialLayerSet)\n\t: IfcLengthMeasure;\n    LOCAL\n      Max : IfcLengthMeasure := LayerSet.MaterialLayers[1].LayerThickness;    \n    END_LOCAL;\n  \n    IF SIZEOF(LayerSet.MaterialLayers) > 1 THEN\n      REPEAT i := 2 TO HIINDEX(LayerSet.MaterialLayers);\n         Max := Max + LayerSet.MaterialLayers[i].LayerThickness;\n      END_REPEAT;\n    END_IF;\n    RETURN (Max);\nEND_FUNCTION;\n\nFUNCTION IfcNormalise\n\t(Arg : IfcVectorOrDirection)\n\t: IfcVectorOrDirection;\n  LOCAL\n    Ndim : INTEGER;\n    V    : IfcDirection\n         := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]); \n    Vec  : IfcVector \n         := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (\n              IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]), 1.);\n    Mag  : REAL;\n    Result : IfcVectorOrDirection\n           := V;\n  END_LOCAL;\n  \n    IF NOT EXISTS (Arg) THEN\n      RETURN (?);\n    ELSE\n      Ndim := Arg.Dim;\n      IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg) THEN\n        BEGIN\n  \tV.DirectionRatios := Arg\\IfcVector.Orientation.DirectionRatios;\n          Vec.Magnitude := Arg\\IfcVector.Magnitude;\n  \tVec.Orientation := V;\n          IF Arg.Magnitude = 0.0 THEN\n            RETURN(?);\n          ELSE\n            Vec.Magnitude := 1.0;\n          END_IF;\n        END;\n      ELSE\n        V.DirectionRatios := Arg.DirectionRatios;\n      END_IF;\n      Mag := 0.0;\n        REPEAT i := 1 TO Ndim;\n          Mag := Mag + V.DirectionRatios[i]*V.DirectionRatios[i];\n        END_REPEAT;\n      IF Mag > 0.0 THEN\n        Mag := SQRT(Mag);\n        REPEAT i := 1 TO Ndim;\n          V.DirectionRatios[i] := V.DirectionRatios[i]/Mag;\n        END_REPEAT;\n        IF 'IFC2X3.IFCVECTOR' IN TYPEOF(arg) THEN\n          Vec.Orientation := V;\n          Result := Vec;\n        ELSE\n          Result := V;\n        END_IF;\n      ELSE\n        RETURN(?);\n      END_IF;\n    END_IF;\n    RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcOrthogonalComplement\n\t(Vec : IfcDirection)\n\t: IfcDirection;\n  LOCAL\n    Result : IfcDirection ;\n  END_LOCAL;\n    IF NOT EXISTS (Vec) OR (Vec.Dim <> 2) THEN\n      RETURN(?);\n    ELSE\n      Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([-Vec.DirectionRatios[2], Vec.DirectionRatios[1]]);\n      RETURN(Result);\n    END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcPathHeadToTail\n\t(APath : IfcPath)\n\t: LOGICAL;\n     LOCAL\n       N : INTEGER := 0;\n       P : LOGICAL := UNKNOWN;\n     END_LOCAL;\n       N := SIZEOF (APath.EdgeList);\n     REPEAT i := 2 TO N;\n        P := P AND (APath.EdgeList[i-1].EdgeEnd :=:\n                    APath.EdgeList[i].EdgeStart);\n     END_REPEAT;\n     RETURN (P);\nEND_FUNCTION;\n\nFUNCTION IfcSameAxis2Placement\n\t(ap1, ap2 : IfcAxis2Placement; Epsilon : REAL)\n\t: LOGICAL;\n  \n    RETURN (IfcSameDirection(ap1.P[1],ap2.P[1],Epsilon) AND\n            IfcSameDirection(ap1.P[2],ap2.P[2],Epsilon) AND\n            IfcSameCartesianPoint(ap1.Location,ap1.Location,Epsilon));\nEND_FUNCTION;\n\nFUNCTION IfcSameCartesianPoint\n\t(cp1, cp2 : IfcCartesianPoint; Epsilon : REAL)\n\t: LOGICAL;\n    \n    LOCAL\n      cp1x : REAL := cp1.Coordinates[1];\n      cp1y : REAL := cp1.Coordinates[2];\n      cp1z : REAL := 0;\n      cp2x : REAL := cp2.Coordinates[1];\n      cp2y : REAL := cp2.Coordinates[2];\n      cp2z : REAL := 0;\n    END_LOCAL;\n  \n    IF (SIZEOF(cp1.Coordinates) > 2) THEN\n      cp1z := cp1.Coordinates[3];\n    END_IF;\n  \n    IF (SIZEOF(cp2.Coordinates) > 2) THEN\n      cp2z := cp2.Coordinates[3];\n    END_IF;\n  \n    RETURN (IfcSameValue(cp1x,cp2x,Epsilon) AND\n            IfcSameValue(cp1y,cp2y,Epsilon) AND\n            IfcSameValue(cp1z,cp2z,Epsilon));\nEND_FUNCTION;\n\nFUNCTION IfcSameDirection\n\t(dir1, dir2 : IfcDirection; Epsilon : REAL)\n\t: LOGICAL;\n    LOCAL\n      dir1x : REAL := dir1.DirectionRatios[1];\n      dir1y : REAL := dir1.DirectionRatios[2];\n      dir1z : REAL := 0;\n      dir2x : REAL := dir2.DirectionRatios[1];\n      dir2y : REAL := dir2.DirectionRatios[2];\n      dir2z : REAL := 0;\n    END_LOCAL;\n  \n    IF (SIZEOF(dir1.DirectionRatios) > 2) THEN\n      dir1z := dir1.DirectionRatios[3];\n    END_IF;\n  \n    IF (SIZEOF(dir2.DirectionRatios) > 2) THEN\n      dir2z := dir2.DirectionRatios[3];\n    END_IF;\n    \n    RETURN (IfcSameValue(dir1x,dir2x,Epsilon) AND\n            IfcSameValue(dir1y,dir2y,Epsilon) AND\n            IfcSameValue(dir1z,dir2z,Epsilon));\nEND_FUNCTION;\n\nFUNCTION IfcSameValidPrecision\n\t(Epsilon1, Epsilon2 : REAL)\n\t: LOGICAL;\n    LOCAL\n      ValidEps1, ValidEps2 : REAL;\n      DefaultEps           : REAL := 0.000001;\n      DerivationOfEps      : REAL := 1.001;\n      UpperEps             : REAL := 1.0;\n    END_LOCAL;\n    \n      ValidEps1 := NVL(Epsilon1, DefaultEps);\n      ValidEps2 := NVL(Epsilon2, DefaultEps);\n      RETURN ((0.0 < ValidEps1) AND (ValidEps1 <= (DerivationOfEps * ValidEps2)) AND \n              (ValidEps2 <= (DerivationOfEps * ValidEps1)) AND (ValidEps2 < UpperEps));\nEND_FUNCTION;\n\nFUNCTION IfcSameValue\n\t(Value1, Value2 : REAL; Epsilon : REAL)\n\t: LOGICAL;\n    LOCAL\n      ValidEps    : REAL;\n      DefaultEps  : REAL := 0.000001;\n    END_LOCAL;\n    \n    ValidEps := NVL(Epsilon, DefaultEps);\n    RETURN ((Value1 + ValidEps > Value2) AND (Value1 < Value2 + ValidEps));\nEND_FUNCTION;\n\nFUNCTION IfcScalarTimesVector\n\t(Scalar : REAL; Vec : IfcVectorOrDirection)\n\t: IfcVector;\n  LOCAL\n    V : IfcDirection;\n    Mag : REAL;\n    Result : IfcVector;\n  END_LOCAL;\n  \n    IF NOT EXISTS (Scalar) OR NOT EXISTS (Vec) THEN\n      RETURN (?) ;\n    ELSE\n      IF 'IFC2X3.IFCVECTOR' IN TYPEOF (Vec) THEN\n        V := Vec\\IfcVector.Orientation;\n        Mag := Scalar * Vec\\IfcVector.Magnitude;\n      ELSE\n        V := Vec;\n        Mag := Scalar;\n      END_IF;\n      IF (Mag < 0.0 ) THEN\n        REPEAT i := 1 TO SIZEOF(V.DirectionRatios);\n          V.DirectionRatios[i] := -V.DirectionRatios[i];\n        END_REPEAT;\n        Mag := -Mag;\n      END_IF;\n      Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(IfcNormalise(V), Mag);\n    END_IF;\n    RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcSecondProjAxis\n\t(ZAxis, XAxis, Arg: IfcDirection)\n\t: IfcDirection;\n  LOCAL\n    YAxis : IfcVector;\n    V     : IfcDirection;\n    Temp  : IfcVector;\n  END_LOCAL;\n  \n    IF NOT EXISTS(Arg) THEN\n      V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]);\n    ELSE\n      V := Arg;\n    END_IF;\n    Temp  := IfcScalarTimesVector(IfcDotProduct(V, ZAxis), ZAxis);\n    YAxis := IfcVectorDifference(V, Temp);\n    Temp  := IfcScalarTimesVector(IfcDotProduct(V, XAxis), XAxis);\n    YAxis := IfcVectorDifference(YAxis, Temp);\n    YAxis := IfcNormalise(YAxis);\n    RETURN(YAxis.Orientation);\nEND_FUNCTION;\n\nFUNCTION IfcShapeRepresentationTypes\n\t(RepType : IfcLabel; Items : SET OF IfcRepresentationItem)\n\t: LOGICAL;\n      \n      LOCAL\n        Count : INTEGER := 0;\n      END_LOCAL;\n  \n      CASE RepType OF \n      'Curve2D' :\n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCCURVE' IN TYPEOF(temp)) \n                   AND (temp.Dim = 2)));\n        END;\n      'Annotation2D' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | (\n                    SIZEOF(TYPEOF(temp) * [\n                     'IFC2X3.IFCPOINT',\n                     'IFC2X3.IFCCURVE',\n                     'IFC2X3.IFCGEOMETRICCURVESET',\n                     'IFC2X3.IFCANNOTATIONFILLAREA',\n                     'IFC2X3.IFCDEFINEDSYMBOL',\n                     'IFC2X3.IFCTEXTLITERAL',\n                     'IFC2X3.IFCDRAUGHTINGCALLOUT']) = 1)\n                   ));\n        END;\n      'GeometricSet' : \n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCGEOMETRICSET' IN TYPEOF(temp))\n                   OR ('IFC2X3.IFCPOINT' IN TYPEOF(temp))\n                   OR ('IFC2X3.IFCCURVE' IN TYPEOF(temp))\n                   OR ('IFC2X3.IFCSURFACE' IN TYPEOF(temp))));\n        END;\n      'GeometricCurveSet' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCGEOMETRICCURVESET' IN TYPEOF(temp))\n                   OR ('IFC2X3.IFCGEOMETRICSET' IN TYPEOF(temp))\n                   OR ('IFC2X3.IFCPOINT' IN TYPEOF(temp))\n                   OR ('IFC2X3.IFCCURVE' IN TYPEOF(temp))));\n           REPEAT i:=1 TO HIINDEX(Items);  \n             IF ('IFC2X3.IFCGEOMETRICSET' IN TYPEOF(Items[i]))\n             THEN\n               IF (SIZEOF(QUERY(temp <* Items[i]\\IfcGeometricSet.Elements | 'IFC2X3.IFCSURFACE' IN TYPEOF(temp))) > 0)\n               THEN\n                 Count := Count - 1;\n               END_IF;\n             END_IF;\n           END_REPEAT;\n        END;\n      'SurfaceModel' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                     'IFC2X3.IFCSHELLBASEDSURFACEMODEL',\n                     'IFC2X3.IFCFACEBASEDSURFACEMODEL',\n                     'IFC2X3.IFCFACETEDBREP',\n                     'IFC2X3.IFCFACETEDBREPWITHVOIDS'] * TYPEOF(temp)) >= 1\n                   ));      \n        END;\n      'SolidModel' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCSOLIDMODEL' IN TYPEOF(temp))));            \n        END;\n      'SweptSolid' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCSWEPTAREASOLID' IN TYPEOF(temp))));            \n        END;\n      'CSG' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCBOOLEANRESULT' IN TYPEOF(temp))));            \n        END;\n      'Clipping' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(temp))));            \n        END;\n      'AdvancedSweptSolid' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCSURFACECURVESWEPTAREASOLID' IN TYPEOF(temp))\n                   OR ('IFC2X3.IFCSWEPTDISKSOLID' IN TYPEOF(temp))));      \n        END;\n      'Brep' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCFACETEDBREP' IN TYPEOF(temp))\n                   OR ('IFC2X3.IFCFACETEDBREPWITHVOIDS' IN TYPEOF(temp))));      \n        END;\n      'BoundingBox' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCBOUNDINGBOX' IN TYPEOF(temp))));\n          IF (SIZEOF(Items) > 1)\n          THEN\n            Count := 0;\n          END_IF;   \n        END;\n      'SectionedSpine' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCSECTIONEDSPINE' IN TYPEOF(temp))));      \n        END;\n      'MappedRepresentation' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | ('IFC2X3.IFCMAPPEDITEM' IN TYPEOF(temp))));  \n        END;\n       OTHERWISE : RETURN(?);\n      END_CASE;\n      RETURN (Count = SIZEOF(Items));\nEND_FUNCTION;\n\nFUNCTION IfcTopologyRepresentationTypes\n\t(RepType : IfcLabel; Items : SET OF IfcRepresentationItem)\n\t: LOGICAL;\n      \n      LOCAL\n        Count : INTEGER := 0;\n      END_LOCAL;\n  \n      CASE RepType OF \n      'Vertex' :\n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X3.IFCVERTEX' IN TYPEOF(temp))));\n        END;\n      'Edge' : \n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X3.IFCEDGE' IN TYPEOF(temp))));\n        END;\n      'Path' : \n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X3.IFCPATH' IN TYPEOF(temp))));\n        END;\n      'Face' : \n        BEGIN \n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X3.IFCFACE' IN TYPEOF(temp))));\n        END;\n      'Shell' :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Items | \n                    ('IFC2X3.IFCOPENSHELL' IN TYPEOF(temp))\n                      OR ('IFC2X3.IFCCLOSEDSHELL' IN TYPEOF(temp))));\n        END;\n      'Undefined': RETURN(TRUE);\n       OTHERWISE : RETURN(?);\n      END_CASE;\n      RETURN (Count = SIZEOF(Items));\nEND_FUNCTION;\n\nFUNCTION IfcUniquePropertyName\n\t(Properties : SET [1:?] OF IfcProperty)\n\t: LOGICAL;\n  \n  LOCAL\n    Names : SET OF IfcIdentifier := [];\n  END_LOCAL;\n  \n  REPEAT i:=1 TO HIINDEX(Properties);\n    Names := Names + Properties[i].Name;\n  END_REPEAT;\n  RETURN (SIZEOF(Names) = SIZEOF(Properties));\nEND_FUNCTION;\n\nFUNCTION IfcValidCalendarDate\n\t(Date : IfcCalendarDate)\n\t: LOGICAL;\n  IF NOT ({1 <= Date.DayComponent <= 31}) THEN    \n    RETURN(FALSE);  \n  END_IF;\n  CASE Date.MonthComponent OF\n    4         : RETURN({ 1<= Date.DayComponent <= 30});\n    6         : RETURN({ 1<= Date.DayComponent <= 30});\n    9         : RETURN({ 1<= Date.DayComponent <= 30});\n    11        : RETURN({ 1<= Date.DayComponent <= 30});    \n    2         :    \n    BEGIN\n      IF (IfcLeapYear(Date.YearComponent)) THEN\n        RETURN({ 1<= Date.DayComponent <= 29});      \n      ELSE\n        RETURN({ 1<= Date.DayComponent <= 28});      \n      END_IF;    \n    END;\n    OTHERWISE : RETURN(TRUE);  \n  END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcValidTime\n\t(Time: IfcLocalTime)\n\t: BOOLEAN;\n  IF EXISTS (Time.SecondComponent) THEN\n    RETURN (EXISTS (Time.MinuteComponent));  \n  ELSE    \n    RETURN (TRUE);  \n  END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcVectorDifference\n\t(Arg1, Arg2 : IfcVectorOrDirection)\n\t: IfcVector;\n  LOCAL\n    Result : IfcVector;\n    Res, Vec1, Vec2 : IfcDirection;\n    Mag, Mag1, Mag2 : REAL;\n    Ndim : INTEGER;\n  END_LOCAL;\n  \n    IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN\n      RETURN (?) ;\n    ELSE\n      BEGIN\n        IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg1) THEN\n          Mag1 := Arg1\\IfcVector.Magnitude;\n          Vec1 := Arg1\\IfcVector.Orientation;\n        ELSE\n          Mag1 := 1.0;\n          Vec1 := Arg1;\n        END_IF;\n        IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg2) THEN\n          Mag2 := Arg2\\IfcVector.Magnitude;\n          Vec2 := Arg2\\IfcVector.Orientation;\n        ELSE\n          Mag2 := 1.0;\n          Vec2 := Arg2;\n        END_IF;\n        Vec1 := IfcNormalise (Vec1);\n        Vec2 := IfcNormalise (Vec2);\n        Ndim := SIZEOF(Vec1.DirectionRatios);\n        Mag  := 0.0;\n        Res  := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0:Ndim]);\n  \n        REPEAT i := 1 TO Ndim;\n          Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] - Mag2*Vec2.DirectionRatios[i];\n          Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]);\n        END_REPEAT;\n  \n        IF (Mag > 0.0 ) THEN\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag));\n        ELSE\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0);\n        END_IF;\n      END;\n    END_IF;\n    RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcVectorSum\n\t(Arg1, Arg2 : IfcVectorOrDirection)\n\t: IfcVector;\n  LOCAL\n    Result : IfcVector;\n    Res, Vec1, Vec2 : IfcDirection;\n    Mag, Mag1, Mag2 : REAL;\n    Ndim : INTEGER;\n  END_LOCAL;\n  \n    IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN\n      RETURN (?) ;\n    ELSE\n      BEGIN\n        IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg1) THEN\n          Mag1 := Arg1\\IfcVector.Magnitude;\n          Vec1 := Arg1\\IfcVector.Orientation;\n        ELSE\n          Mag1 := 1.0;\n          Vec1 := Arg1;\n        END_IF;\n        IF 'IFC2X3.IFCVECTOR' IN TYPEOF(Arg2) THEN\n          Mag2 := Arg2\\IfcVector.Magnitude;\n          Vec2 := Arg2\\IfcVector.Orientation;\n        ELSE\n          Mag2 := 1.0;\n          Vec2 := Arg2;\n        END_IF;\n        Vec1 := IfcNormalise (Vec1);\n        Vec2 := IfcNormalise (Vec2);\n        Ndim := SIZEOF(Vec1.DirectionRatios);\n        Mag  := 0.0;\n        Res  := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0:Ndim]);\n  \n        REPEAT i := 1 TO Ndim;\n          Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] + Mag2*Vec2.DirectionRatios[i];\n          Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]);\n        END_REPEAT;\n  \n        IF (Mag > 0.0 ) THEN\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag));\n        ELSE\n          Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0);\n        END_IF;\n      END;\n    END_IF;\n    RETURN (Result);\nEND_FUNCTION;\n\nRULE IfcRepresentationContextSameWCS FOR \n\t(IfcGeometricRepresentationContext);\n    LOCAL\n      IsDifferent  : LOGICAL := FALSE;\n    END_LOCAL;\n      IF (SIZEOF(IfcGeometricRepresentationContext) > 1)\n      THEN\n        REPEAT i := 2 TO HIINDEX(IfcGeometricRepresentationContext);\n          IF (IfcGeometricRepresentationContext[1].WorldCoordinateSystem :<>: IfcGeometricRepresentationContext[i].WorldCoordinateSystem)\n          THEN\n            IsDifferent := (NOT(IfcSameValidPrecision(IfcGeometricRepresentationContext[1].Precision,\n                                                      IfcGeometricRepresentationContext[i].Precision)))\n                        OR (NOT(IfcSameAxis2Placement(IfcGeometricRepresentationContext[1].WorldCoordinateSystem,\n                                                      IfcGeometricRepresentationContext[i].WorldCoordinateSystem,\n                                                      IfcGeometricRepresentationContext[1].Precision)));\n            IF (IsDifferent = TRUE) THEN\n              ESCAPE;\n            END_IF;\n          END_IF;\n        END_REPEAT;\n      END_IF;\n    WHERE\n      WR1 : IsDifferent = FALSE;\nEND_RULE;\n\nRULE IfcSingleProjectInstance FOR \n\t(IfcProject);\n    WHERE\n      WR1 : SIZEOF(IfcProject) <= 1;\nEND_RULE;\n\nEND_SCHEMA;"
  },
  {
    "path": "Source/RevitIFCTools/IFC2X3_TC1.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- created with EXPTOOL V20070502 (perl 5 program) written by Thomas Liebich, AEC3, tl@aec3.de -->\n<!-- validated with XMLspy2007 sp2 (http://www.xmlspy.com) by Thomas Liebich, AEC3, tl@aec3.de -->\n<!-- configuration options used to create the following XML schema definitions following ISO 10303-28ed2 CD -->\n<!-- global options within the <option> scoping element -->\n<!-- + <inheritance> = \"true\" -->\n<!-- + <exp-type> = \"unspecified\" -->\n<!-- + <exp-attribute> = \"double-tag\" -->\n<!-- + <flatten> = \"false\" -->\n<!-- + <sparse> = \"true\" -->\n<!-- + <tagless> = \"false\" -->\n<!-- + <naming-convention> = \"preserve-case\" -->\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\" xmlns:ex=\"urn:iso.org:standard:10303:part(28):version(2):xmlschema:common\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:ifc=\"http://www.iai-tech.org/ifcXML/IFC2x3/FINAL\" attributeFormDefault=\"unqualified\" targetNamespace=\"http://www.iai-tech.org/ifcXML/IFC2x3/FINAL\">\n\n\n<!-- root element declaration (for SCHEMA definitions) -->\n\n\t<xs:import namespace=\"urn:iso.org:standard:10303:part(28):version(2):xmlschema:common\" schemaLocation=\"http://www.iai-tech.org/ifcXML/IFC2x3/FINAL/ex.xsd\">\n\t</xs:import>\n\t<xs:element substitutionGroup=\"ex:uos\" name=\"uos\" type=\"ifc:uos\">\n\t</xs:element>\n\t<xs:complexType name=\"uos\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:uos\">\n\t\t\t\t<xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n\t\t\t\t\t<xs:element ref=\"ex:Entity\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:choice>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\n\n<!-- element and complex type declarations (for ENTITY definitions) -->\n\n\t<xs:element substitutionGroup=\"ifc:IfcCompositeCurve\" name=\"Ifc2DCompositeCurve\" nillable=\"true\" type=\"ifc:Ifc2DCompositeCurve\">\n\t</xs:element>\n\t<xs:complexType name=\"Ifc2DCompositeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurve\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcActionRequest\" nillable=\"true\" type=\"ifc:IfcActionRequest\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcActionRequest\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RequestID\" type=\"ifc:IfcIdentifier\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcActor\" nillable=\"true\" type=\"ifc:IfcActor\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcActor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TheActor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcActorRole\" nillable=\"true\" type=\"ifc:IfcActorRole\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcActorRole\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Role\" type=\"ifc:IfcRoleEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UserDefinedRole\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionControlElementType\" name=\"IfcActuatorType\" nillable=\"true\" type=\"ifc:IfcActuatorType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcActuatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcAddress\" nillable=\"true\" type=\"ifc:IfcAddress\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAddress\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Purpose\" minOccurs=\"0\" type=\"ifc:IfcAddressTypeEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UserDefinedPurpose\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcAirTerminalBoxType\" nillable=\"true\" type=\"ifc:IfcAirTerminalBoxType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAirTerminalBoxType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcAirTerminalType\" nillable=\"true\" type=\"ifc:IfcAirTerminalType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAirTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcAirToAirHeatRecoveryType\" nillable=\"true\" type=\"ifc:IfcAirToAirHeatRecoveryType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAirToAirHeatRecoveryType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionControlElementType\" name=\"IfcAlarmType\" nillable=\"true\" type=\"ifc:IfcAlarmType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAlarmType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" name=\"IfcAngularDimension\" nillable=\"true\" type=\"ifc:IfcAngularDimension\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAngularDimension\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcAnnotation\" nillable=\"true\" type=\"ifc:IfcAnnotation\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAnnotation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationOccurrence\" name=\"IfcAnnotationCurveOccurrence\" nillable=\"true\" type=\"ifc:IfcAnnotationCurveOccurrence\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAnnotationCurveOccurrence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcAnnotationFillArea\" nillable=\"true\" type=\"ifc:IfcAnnotationFillArea\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAnnotationFillArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OuterBoundary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurve\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationOccurrence\" name=\"IfcAnnotationFillAreaOccurrence\" nillable=\"true\" type=\"ifc:IfcAnnotationFillAreaOccurrence\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAnnotationFillAreaOccurrence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"FillStyleTarget\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPoint\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"GlobalOrLocal\" minOccurs=\"0\" type=\"ifc:IfcGlobalOrLocalEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStyledItem\" name=\"IfcAnnotationOccurrence\" nillable=\"true\" type=\"ifc:IfcAnnotationOccurrence\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAnnotationOccurrence\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStyledItem\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcAnnotationSurface\" nillable=\"true\" type=\"ifc:IfcAnnotationSurface\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAnnotationSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Item\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TextureCoordinates\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationOccurrence\" name=\"IfcAnnotationSurfaceOccurrence\" nillable=\"true\" type=\"ifc:IfcAnnotationSurfaceOccurrence\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAnnotationSurfaceOccurrence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationOccurrence\" name=\"IfcAnnotationSymbolOccurrence\" nillable=\"true\" type=\"ifc:IfcAnnotationSymbolOccurrence\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAnnotationSymbolOccurrence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationOccurrence\" name=\"IfcAnnotationTextOccurrence\" nillable=\"true\" type=\"ifc:IfcAnnotationTextOccurrence\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAnnotationTextOccurrence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationOccurrence\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcApplication\" nillable=\"true\" type=\"ifc:IfcApplication\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcApplication\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ApplicationDeveloper\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Version\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ApplicationFullName\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ApplicationIdentifier\" type=\"ifc:IfcIdentifier\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcAppliedValue\" nillable=\"true\" type=\"ifc:IfcAppliedValue\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAppliedValue\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"AppliedValue\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"UnitBasis\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ApplicableDate\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"FixedUntilDate\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcAppliedValueRelationship\" nillable=\"true\" type=\"ifc:IfcAppliedValueRelationship\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAppliedValueRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ComponentOfTotal\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Components\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAppliedValue\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ArithmeticOperator\" type=\"ifc:IfcArithmeticOperatorEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcApproval\" nillable=\"true\" type=\"ifc:IfcApproval\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcApproval\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ApprovalDateTime\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ApprovalStatus\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ApprovalLevel\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ApprovalQualifier\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Identifier\" type=\"ifc:IfcIdentifier\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcApprovalActorRelationship\" nillable=\"true\" type=\"ifc:IfcApprovalActorRelationship\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcApprovalActorRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Actor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Approval\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Role\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcApprovalPropertyRelationship\" nillable=\"true\" type=\"ifc:IfcApprovalPropertyRelationship\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcApprovalPropertyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ApprovedProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Approval\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcApprovalRelationship\" nillable=\"true\" type=\"ifc:IfcApprovalRelationship\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcApprovalRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedApproval\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProfileDef\" name=\"IfcArbitraryClosedProfileDef\" nillable=\"true\" type=\"ifc:IfcArbitraryClosedProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcArbitraryClosedProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OuterCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProfileDef\" name=\"IfcArbitraryOpenProfileDef\" nillable=\"true\" type=\"ifc:IfcArbitraryOpenProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcArbitraryOpenProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Curve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcArbitraryClosedProfileDef\" name=\"IfcArbitraryProfileDefWithVoids\" nillable=\"true\" type=\"ifc:IfcArbitraryProfileDefWithVoids\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcArbitraryProfileDefWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryClosedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerCurves\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurve\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcAsset\" nillable=\"true\" type=\"ifc:IfcAsset\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAsset\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AssetID\" type=\"ifc:IfcIdentifier\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"OriginalValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurrentValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TotalReplacementCost\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Owner\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"User\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResponsiblePerson\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"IncorporationDate\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DepreciatedValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcIShapeProfileDef\" name=\"IfcAsymmetricIShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcAsymmetricIShapeProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAsymmetricIShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcIShapeProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TopFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TopFlangeThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TopFlangeFilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPlacement\" name=\"IfcAxis1Placement\" nillable=\"true\" type=\"ifc:IfcAxis1Placement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAxis1Placement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Axis\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPlacement\" name=\"IfcAxis2Placement2D\" nillable=\"true\" type=\"ifc:IfcAxis2Placement2D\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAxis2Placement2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"RefDirection\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPlacement\" name=\"IfcAxis2Placement3D\" nillable=\"true\" type=\"ifc:IfcAxis2Placement3D\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcAxis2Placement3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Axis\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"RefDirection\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBoundedCurve\" name=\"IfcBSplineCurve\" nillable=\"true\" type=\"ifc:IfcBSplineCurve\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBSplineCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Degree\" type=\"xs:long\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" maxOccurs=\"unbounded\" minOccurs=\"2\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveForm\" type=\"ifc:IfcBSplineCurveForm\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ClosedCurve\" type=\"ex:logical\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcBeam\" nillable=\"true\" type=\"ifc:IfcBeam\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBeam\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcBeamType\" nillable=\"true\" type=\"ifc:IfcBeamType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBeamType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBSplineCurve\" name=\"IfcBezierCurve\" nillable=\"true\" type=\"ifc:IfcBezierCurve\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBezierCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurve\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSurfaceTexture\" name=\"IfcBlobTexture\" nillable=\"true\" type=\"ifc:IfcBlobTexture\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBlobTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RasterFormat\" type=\"ifc:IfcIdentifier\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RasterCode\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcCsgPrimitive3D\" name=\"IfcBlock\" nillable=\"true\" type=\"ifc:IfcBlock\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBlock\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ZLength\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcBoilerType\" nillable=\"true\" type=\"ifc:IfcBoilerType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBoilerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBooleanResult\" name=\"IfcBooleanClippingResult\" nillable=\"true\" type=\"ifc:IfcBooleanClippingResult\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBooleanClippingResult\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBooleanResult\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcBooleanResult\" nillable=\"true\" type=\"ifc:IfcBooleanResult\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBooleanResult\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Operator\" type=\"ifc:IfcBooleanOperator\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FirstOperand\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondOperand\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcBoundaryCondition\" nillable=\"true\" type=\"ifc:IfcBoundaryCondition\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBoundaryCondition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBoundaryCondition\" name=\"IfcBoundaryEdgeCondition\" nillable=\"true\" type=\"ifc:IfcBoundaryEdgeCondition\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBoundaryEdgeCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByLengthX\" minOccurs=\"0\" type=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByLengthY\" minOccurs=\"0\" type=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByLengthZ\" minOccurs=\"0\" type=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthX\" minOccurs=\"0\" type=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthY\" minOccurs=\"0\" type=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthZ\" minOccurs=\"0\" type=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBoundaryCondition\" name=\"IfcBoundaryFaceCondition\" nillable=\"true\" type=\"ifc:IfcBoundaryFaceCondition\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBoundaryFaceCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByAreaX\" minOccurs=\"0\" type=\"ifc:IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByAreaY\" minOccurs=\"0\" type=\"ifc:IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LinearStiffnessByAreaZ\" minOccurs=\"0\" type=\"ifc:IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBoundaryCondition\" name=\"IfcBoundaryNodeCondition\" nillable=\"true\" type=\"ifc:IfcBoundaryNodeCondition\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBoundaryNodeCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LinearStiffnessX\" minOccurs=\"0\" type=\"ifc:IfcLinearStiffnessMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LinearStiffnessY\" minOccurs=\"0\" type=\"ifc:IfcLinearStiffnessMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LinearStiffnessZ\" minOccurs=\"0\" type=\"ifc:IfcLinearStiffnessMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessX\" minOccurs=\"0\" type=\"ifc:IfcRotationalStiffnessMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessY\" minOccurs=\"0\" type=\"ifc:IfcRotationalStiffnessMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessZ\" minOccurs=\"0\" type=\"ifc:IfcRotationalStiffnessMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBoundaryNodeCondition\" name=\"IfcBoundaryNodeConditionWarping\" nillable=\"true\" type=\"ifc:IfcBoundaryNodeConditionWarping\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBoundaryNodeConditionWarping\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryNodeCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WarpingStiffness\" minOccurs=\"0\" type=\"ifc:IfcWarpingMomentMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcCurve\" name=\"IfcBoundedCurve\" nillable=\"true\" type=\"ifc:IfcBoundedCurve\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBoundedCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSurface\" name=\"IfcBoundedSurface\" nillable=\"true\" type=\"ifc:IfcBoundedSurface\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBoundedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcBoundingBox\" nillable=\"true\" type=\"ifc:IfcBoundingBox\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBoundingBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Corner\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ZDim\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcHalfSpaceSolid\" name=\"IfcBoxedHalfSpace\" nillable=\"true\" type=\"ifc:IfcBoxedHalfSpace\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBoxedHalfSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Enclosure\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundingBox\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSpatialStructureElement\" name=\"IfcBuilding\" nillable=\"true\" type=\"ifc:IfcBuilding\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBuilding\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ElevationOfRefHeight\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ElevationOfTerrain\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"BuildingAddress\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPostalAddress\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcBuildingElement\" nillable=\"true\" type=\"ifc:IfcBuildingElement\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBuildingElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcBuildingElementComponent\" nillable=\"true\" type=\"ifc:IfcBuildingElementComponent\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBuildingElementComponent\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementComponent\" name=\"IfcBuildingElementPart\" nillable=\"true\" type=\"ifc:IfcBuildingElementPart\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBuildingElementPart\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementComponent\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcBuildingElementProxy\" nillable=\"true\" type=\"ifc:IfcBuildingElementProxy\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBuildingElementProxy\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CompositionType\" minOccurs=\"0\" type=\"ifc:IfcElementCompositionEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcBuildingElementProxyType\" nillable=\"true\" type=\"ifc:IfcBuildingElementProxyType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBuildingElementProxyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcBuildingElementProxyTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElementType\" name=\"IfcBuildingElementType\" nillable=\"true\" type=\"ifc:IfcBuildingElementType\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBuildingElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSpatialStructureElement\" name=\"IfcBuildingStorey\" nillable=\"true\" type=\"ifc:IfcBuildingStorey\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcBuildingStorey\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elevation\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcCShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcCShapeProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Girth\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"InternalFilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowFittingType\" name=\"IfcCableCarrierFittingType\" nillable=\"true\" type=\"ifc:IfcCableCarrierFittingType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCableCarrierFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowSegmentType\" name=\"IfcCableCarrierSegmentType\" nillable=\"true\" type=\"ifc:IfcCableCarrierSegmentType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCableCarrierSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowSegmentType\" name=\"IfcCableSegmentType\" nillable=\"true\" type=\"ifc:IfcCableSegmentType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCableSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcCalendarDate\" nillable=\"true\" type=\"ifc:IfcCalendarDate\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCalendarDate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DayComponent\" type=\"ifc:IfcDayInMonthNumber\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MonthComponent\" type=\"ifc:IfcMonthInYearNumber\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"YearComponent\" type=\"ifc:IfcYearNumber\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPoint\" name=\"IfcCartesianPoint\" nillable=\"true\" type=\"ifc:IfcCartesianPoint\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCartesianPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Coordinates\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\" maxOccurs=\"3\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcCartesianTransformationOperator\" nillable=\"true\" type=\"ifc:IfcCartesianTransformationOperator\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Axis1\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Axis2\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LocalOrigin\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Scale\" minOccurs=\"0\" type=\"xs:double\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" name=\"IfcCartesianTransformationOperator2D\" nillable=\"true\" type=\"ifc:IfcCartesianTransformationOperator2D\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcCartesianTransformationOperator2D\" name=\"IfcCartesianTransformationOperator2DnonUniform\" nillable=\"true\" type=\"ifc:IfcCartesianTransformationOperator2DnonUniform\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2DnonUniform\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator2D\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Scale2\" minOccurs=\"0\" type=\"xs:double\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" name=\"IfcCartesianTransformationOperator3D\" nillable=\"true\" type=\"ifc:IfcCartesianTransformationOperator3D\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Axis3\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcCartesianTransformationOperator3D\" name=\"IfcCartesianTransformationOperator3DnonUniform\" nillable=\"true\" type=\"ifc:IfcCartesianTransformationOperator3DnonUniform\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3DnonUniform\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator3D\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Scale2\" minOccurs=\"0\" type=\"xs:double\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Scale3\" minOccurs=\"0\" type=\"xs:double\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcArbitraryOpenProfileDef\" name=\"IfcCenterLineProfileDef\" nillable=\"true\" type=\"ifc:IfcCenterLineProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCenterLineProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryOpenProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEdgeFeature\" name=\"IfcChamferEdgeFeature\" nillable=\"true\" type=\"ifc:IfcChamferEdgeFeature\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcChamferEdgeFeature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdgeFeature\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Width\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Height\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcChillerType\" nillable=\"true\" type=\"ifc:IfcChillerType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcChillerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcConic\" name=\"IfcCircle\" nillable=\"true\" type=\"ifc:IfcCircle\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCircle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcCircleProfileDef\" name=\"IfcCircleHollowProfileDef\" nillable=\"true\" type=\"ifc:IfcCircleHollowProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCircleHollowProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCircleProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcCircleProfileDef\" nillable=\"true\" type=\"ifc:IfcCircleProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCircleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcClassification\" nillable=\"true\" type=\"ifc:IfcClassification\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcClassification\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Source\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Edition\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EditionDate\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcClassificationItem\" nillable=\"true\" type=\"ifc:IfcClassificationItem\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcClassificationItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Notation\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationNotationFacet\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ItemOf\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassification\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Title\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcClassificationItemRelationship\" nillable=\"true\" type=\"ifc:IfcClassificationItemRelationship\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcClassificationItemRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingItem\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationItem\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedItems\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationItem\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationItem\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcClassificationNotation\" nillable=\"true\" type=\"ifc:IfcClassificationNotation\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcClassificationNotation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"NotationFacets\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationNotationFacet\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationNotationFacet\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcClassificationNotationFacet\" nillable=\"true\" type=\"ifc:IfcClassificationNotationFacet\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcClassificationNotationFacet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"NotationValue\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcClassificationReference\" nillable=\"true\" type=\"ifc:IfcClassificationReference\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcClassificationReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ReferencedSource\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassification\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcConnectedFaceSet\" name=\"IfcClosedShell\" nillable=\"true\" type=\"ifc:IfcClosedShell\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcClosedShell\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcCoilType\" nillable=\"true\" type=\"ifc:IfcCoilType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCoilType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcColourSpecification\" name=\"IfcColourRgb\" nillable=\"true\" type=\"ifc:IfcColourRgb\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcColourRgb\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcColourSpecification\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Red\" type=\"ifc:IfcNormalisedRatioMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Green\" type=\"ifc:IfcNormalisedRatioMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Blue\" type=\"ifc:IfcNormalisedRatioMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcColourSpecification\" nillable=\"true\" type=\"ifc:IfcColourSpecification\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcColourSpecification\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcColumn\" nillable=\"true\" type=\"ifc:IfcColumn\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcColumn\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcColumnType\" nillable=\"true\" type=\"ifc:IfcColumnType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcColumnType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProperty\" name=\"IfcComplexProperty\" nillable=\"true\" type=\"ifc:IfcComplexProperty\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcComplexProperty\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UsageName\" type=\"ifc:IfcIdentifier\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBoundedCurve\" name=\"IfcCompositeCurve\" nillable=\"true\" type=\"ifc:IfcCompositeCurve\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCompositeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Segments\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCompositeCurveSegment\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCompositeCurveSegment\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcCompositeCurveSegment\" nillable=\"true\" type=\"ifc:IfcCompositeCurveSegment\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCompositeCurveSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Transition\" type=\"ifc:IfcTransitionCode\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ParentCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProfileDef\" name=\"IfcCompositeProfileDef\" nillable=\"true\" type=\"ifc:IfcCompositeProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCompositeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Profiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" maxOccurs=\"unbounded\" minOccurs=\"2\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProfileDef\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Label\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" name=\"IfcCompressorType\" nillable=\"true\" type=\"ifc:IfcCompressorType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCompressorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcCondenserType\" nillable=\"true\" type=\"ifc:IfcCondenserType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCondenserType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcCondition\" nillable=\"true\" type=\"ifc:IfcCondition\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcConditionCriterion\" nillable=\"true\" type=\"ifc:IfcConditionCriterion\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcConditionCriterion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Criterion\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcConditionCriterionSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CriterionDateTime\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcCurve\" name=\"IfcConic\" nillable=\"true\" type=\"ifc:IfcConic\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcConic\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcConnectedFaceSet\" nillable=\"true\" type=\"ifc:IfcConnectedFaceSet\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcConnectedFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CfsFaces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFace\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFace\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcConnectionGeometry\" name=\"IfcConnectionCurveGeometry\" nillable=\"true\" type=\"ifc:IfcConnectionCurveGeometry\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcConnectionCurveGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CurveOnRelatedElement\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcConnectionGeometry\" nillable=\"true\" type=\"ifc:IfcConnectionGeometry\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcConnectionGeometry\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcConnectionPointGeometry\" name=\"IfcConnectionPointEccentricity\" nillable=\"true\" type=\"ifc:IfcConnectionPointEccentricity\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcConnectionPointEccentricity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionPointGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EccentricityInX\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EccentricityInY\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EccentricityInZ\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcConnectionGeometry\" name=\"IfcConnectionPointGeometry\" nillable=\"true\" type=\"ifc:IfcConnectionPointGeometry\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcConnectionPointGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PointOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PointOnRelatedElement\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcConnectionGeometry\" name=\"IfcConnectionPortGeometry\" nillable=\"true\" type=\"ifc:IfcConnectionPortGeometry\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcConnectionPortGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LocationAtRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LocationAtRelatedElement\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ProfileOfPort\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcConnectionGeometry\" name=\"IfcConnectionSurfaceGeometry\" nillable=\"true\" type=\"ifc:IfcConnectionSurfaceGeometry\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcConnectionSurfaceGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SurfaceOnRelatedElement\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcConstraint\" nillable=\"true\" type=\"ifc:IfcConstraint\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcConstraint\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ConstraintGrade\" type=\"ifc:IfcConstraintEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ConstraintSource\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CreatingActor\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CreationTime\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UserDefinedGrade\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcConstraintAggregationRelationship\" nillable=\"true\" type=\"ifc:IfcConstraintAggregationRelationship\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcConstraintAggregationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedConstraints\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcConstraint\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LogicalAggregator\" type=\"ifc:IfcLogicalOperatorEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcConstraintClassificationRelationship\" nillable=\"true\" type=\"ifc:IfcConstraintClassificationRelationship\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcConstraintClassificationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ClassifiedConstraint\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedClassifications\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationNotationSelect\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcConstraintRelationship\" nillable=\"true\" type=\"ifc:IfcConstraintRelationship\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcConstraintRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedConstraints\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcConstraint\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcConstructionResource\" name=\"IfcConstructionEquipmentResource\" nillable=\"true\" type=\"ifc:IfcConstructionEquipmentResource\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcConstructionEquipmentResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcConstructionResource\" name=\"IfcConstructionMaterialResource\" nillable=\"true\" type=\"ifc:IfcConstructionMaterialResource\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcConstructionMaterialResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Suppliers\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorSelect\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UsageRatio\" minOccurs=\"0\" type=\"ifc:IfcRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcConstructionResource\" name=\"IfcConstructionProductResource\" nillable=\"true\" type=\"ifc:IfcConstructionProductResource\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcConstructionProductResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcResource\" name=\"IfcConstructionResource\" nillable=\"true\" type=\"ifc:IfcConstructionResource\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcConstructionResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ResourceIdentifier\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResourceGroup\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResourceConsumption\" minOccurs=\"0\" type=\"ifc:IfcResourceConsumptionEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"BaseQuantity\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcNamedUnit\" name=\"IfcContextDependentUnit\" nillable=\"true\" type=\"ifc:IfcContextDependentUnit\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcContextDependentUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcControl\" nillable=\"true\" type=\"ifc:IfcControl\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcControl\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionControlElementType\" name=\"IfcControllerType\" nillable=\"true\" type=\"ifc:IfcControllerType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcControllerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcNamedUnit\" name=\"IfcConversionBasedUnit\" nillable=\"true\" type=\"ifc:IfcConversionBasedUnit\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcConversionBasedUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ConversionFactor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcCooledBeamType\" nillable=\"true\" type=\"ifc:IfcCooledBeamType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCooledBeamType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcCoolingTowerType\" nillable=\"true\" type=\"ifc:IfcCoolingTowerType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCoolingTowerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcCoordinatedUniversalTimeOffset\" nillable=\"true\" type=\"ifc:IfcCoordinatedUniversalTimeOffset\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCoordinatedUniversalTimeOffset\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HourOffset\" type=\"ifc:IfcHourInDay\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MinuteOffset\" minOccurs=\"0\" type=\"ifc:IfcMinuteInHour\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Sense\" type=\"ifc:IfcAheadOrBehind\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcCostItem\" nillable=\"true\" type=\"ifc:IfcCostItem\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCostItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcCostSchedule\" nillable=\"true\" type=\"ifc:IfcCostSchedule\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCostSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SubmittedBy\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PreparedBy\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SubmittedOn\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Status\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TargetUsers\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorSelect\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"UpdateDate\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ID\" type=\"ifc:IfcIdentifier\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCostScheduleTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcAppliedValue\" name=\"IfcCostValue\" nillable=\"true\" type=\"ifc:IfcCostValue\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCostValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CostType\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Condition\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcCovering\" nillable=\"true\" type=\"ifc:IfcCovering\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCovering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" minOccurs=\"0\" type=\"ifc:IfcCoveringTypeEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcCoveringType\" nillable=\"true\" type=\"ifc:IfcCoveringType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCoveringType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcCraneRailAShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcCraneRailAShapeProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCraneRailAShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseWidth2\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Radius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HeadWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HeadDepth2\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HeadDepth3\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseWidth4\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseDepth1\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseDepth2\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseDepth3\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcCraneRailFShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcCraneRailFShapeProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCraneRailFShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HeadWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Radius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HeadDepth2\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HeadDepth3\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseDepth1\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseDepth2\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcConstructionResource\" name=\"IfcCrewResource\" nillable=\"true\" type=\"ifc:IfcCrewResource\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCrewResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcCsgPrimitive3D\" nillable=\"true\" type=\"ifc:IfcCsgPrimitive3D\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCsgPrimitive3D\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSolidModel\" name=\"IfcCsgSolid\" nillable=\"true\" type=\"ifc:IfcCsgSolid\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCsgSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TreeRootExpression\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCsgSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcCurrencyRelationship\" nillable=\"true\" type=\"ifc:IfcCurrencyRelationship\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCurrencyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMonetaryUnit\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedMonetaryUnit\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ExchangeRate\" type=\"ifc:IfcPositiveRatioMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RateDateTime\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"RateSource\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcCurtainWall\" nillable=\"true\" type=\"ifc:IfcCurtainWall\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCurtainWall\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcCurtainWallType\" nillable=\"true\" type=\"ifc:IfcCurtainWallType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCurtainWallType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcCurtainWallTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcCurve\" nillable=\"true\" type=\"ifc:IfcCurve\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBoundedSurface\" name=\"IfcCurveBoundedPlane\" nillable=\"true\" type=\"ifc:IfcCurveBoundedPlane\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCurveBoundedPlane\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPlane\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"OuterBoundary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\" minOccurs=\"0\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurve\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPresentationStyle\" name=\"IfcCurveStyle\" nillable=\"true\" type=\"ifc:IfcCurveStyle\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCurveStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CurveFont\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CurveWidth\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CurveColour\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcCurveStyleFont\" nillable=\"true\" type=\"ifc:IfcCurveStyleFont\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCurveStyleFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PatternList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontPattern\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCurveStyleFontPattern\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcCurveStyleFontAndScaling\" nillable=\"true\" type=\"ifc:IfcCurveStyleFontAndScaling\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCurveStyleFontAndScaling\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveFont\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveFontScaling\" type=\"ifc:IfcPositiveRatioMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcCurveStyleFontPattern\" nillable=\"true\" type=\"ifc:IfcCurveStyleFontPattern\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcCurveStyleFontPattern\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VisibleSegmentLength\" type=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"InvisibleSegmentLength\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcDamperType\" nillable=\"true\" type=\"ifc:IfcDamperType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDamperType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDateAndTime\" nillable=\"true\" type=\"ifc:IfcDateAndTime\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDateAndTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DateComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TimeComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLocalTime\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcDefinedSymbol\" nillable=\"true\" type=\"ifc:IfcDefinedSymbol\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDefinedSymbol\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Definition\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinedSymbolSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Target\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator2D\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProfileDef\" name=\"IfcDerivedProfileDef\" nillable=\"true\" type=\"ifc:IfcDerivedProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDerivedProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentProfile\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Operator\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator2D\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Label\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDerivedUnit\" nillable=\"true\" type=\"ifc:IfcDerivedUnit\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDerivedUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDerivedUnitElement\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDerivedUnitElement\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitType\" type=\"ifc:IfcDerivedUnitEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UserDefinedType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDerivedUnitElement\" nillable=\"true\" type=\"ifc:IfcDerivedUnitElement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDerivedUnitElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Exponent\" type=\"xs:long\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" name=\"IfcDiameterDimension\" nillable=\"true\" type=\"ifc:IfcDiameterDimension\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDiameterDimension\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDraughtingCalloutRelationship\" name=\"IfcDimensionCalloutRelationship\" nillable=\"true\" type=\"ifc:IfcDimensionCalloutRelationship\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDimensionCalloutRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCalloutRelationship\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationCurveOccurrence\" name=\"IfcDimensionCurve\" nillable=\"true\" type=\"ifc:IfcDimensionCurve\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDimensionCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationCurveOccurrence\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDraughtingCallout\" name=\"IfcDimensionCurveDirectedCallout\" nillable=\"true\" type=\"ifc:IfcDimensionCurveDirectedCallout\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDimensionCurveDirectedCallout\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCallout\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTerminatorSymbol\" name=\"IfcDimensionCurveTerminator\" nillable=\"true\" type=\"ifc:IfcDimensionCurveTerminator\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDimensionCurveTerminator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTerminatorSymbol\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Role\" type=\"ifc:IfcDimensionExtentUsage\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDraughtingCalloutRelationship\" name=\"IfcDimensionPair\" nillable=\"true\" type=\"ifc:IfcDimensionPair\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDimensionPair\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCalloutRelationship\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDimensionalExponents\" nillable=\"true\" type=\"ifc:IfcDimensionalExponents\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDimensionalExponents\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LengthExponent\" type=\"xs:long\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MassExponent\" type=\"xs:long\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TimeExponent\" type=\"xs:long\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ElectricCurrentExponent\" type=\"xs:long\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ThermodynamicTemperatureExponent\" type=\"xs:long\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"AmountOfSubstanceExponent\" type=\"xs:long\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LuminousIntensityExponent\" type=\"xs:long\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcDirection\" nillable=\"true\" type=\"ifc:IfcDirection\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDirection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DirectionRatios\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:double-wrapper\" maxOccurs=\"3\" minOccurs=\"2\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:double-wrapper\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElementComponent\" name=\"IfcDiscreteAccessory\" nillable=\"true\" type=\"ifc:IfcDiscreteAccessory\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDiscreteAccessory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElementComponentType\" name=\"IfcDiscreteAccessoryType\" nillable=\"true\" type=\"ifc:IfcDiscreteAccessoryType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDiscreteAccessoryType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcDistributionChamberElement\" nillable=\"true\" type=\"ifc:IfcDistributionChamberElement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDistributionChamberElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcDistributionChamberElementType\" nillable=\"true\" type=\"ifc:IfcDistributionChamberElementType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDistributionChamberElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionElement\" name=\"IfcDistributionControlElement\" nillable=\"true\" type=\"ifc:IfcDistributionControlElement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDistributionControlElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ControlElementId\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionElementType\" name=\"IfcDistributionControlElementType\" nillable=\"true\" type=\"ifc:IfcDistributionControlElementType\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDistributionControlElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcDistributionElement\" nillable=\"true\" type=\"ifc:IfcDistributionElement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDistributionElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElementType\" name=\"IfcDistributionElementType\" nillable=\"true\" type=\"ifc:IfcDistributionElementType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDistributionElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionElement\" name=\"IfcDistributionFlowElement\" nillable=\"true\" type=\"ifc:IfcDistributionFlowElement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDistributionFlowElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionElementType\" name=\"IfcDistributionFlowElementType\" nillable=\"true\" type=\"ifc:IfcDistributionFlowElementType\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDistributionFlowElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPort\" name=\"IfcDistributionPort\" nillable=\"true\" type=\"ifc:IfcDistributionPort\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDistributionPort\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPort\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FlowDirection\" minOccurs=\"0\" type=\"ifc:IfcFlowDirectionEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDocumentElectronicFormat\" nillable=\"true\" type=\"ifc:IfcDocumentElectronicFormat\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDocumentElectronicFormat\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FileExtension\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MimeContentType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MimeSubtype\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDocumentInformation\" nillable=\"true\" type=\"ifc:IfcDocumentInformation\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDocumentInformation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DocumentId\" type=\"ifc:IfcIdentifier\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DocumentReferences\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDocumentReference\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Purpose\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"IntendedUse\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Scope\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Revision\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"DocumentOwner\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Editors\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorSelect\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CreationTime\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LastRevisionTime\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ElectronicFormat\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentElectronicFormat\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ValidFrom\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ValidUntil\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Confidentiality\" minOccurs=\"0\" type=\"ifc:IfcDocumentConfidentialityEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Status\" minOccurs=\"0\" type=\"ifc:IfcDocumentStatusEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDocumentInformationRelationship\" nillable=\"true\" type=\"ifc:IfcDocumentInformationRelationship\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDocumentInformationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedDocuments\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDocumentInformation\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelationshipType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcDocumentReference\" nillable=\"true\" type=\"ifc:IfcDocumentReference\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDocumentReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcDoor\" nillable=\"true\" type=\"ifc:IfcDoor\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDoor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OverallHeight\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"OverallWidth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcDoorLiningProperties\" nillable=\"true\" type=\"ifc:IfcDoorLiningProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDoorLiningProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LiningDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LiningThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ThresholdDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ThresholdThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TransomThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TransomOffset\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LiningOffset\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ThresholdOffset\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CasingThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CasingDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ShapeAspectStyle\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcDoorPanelProperties\" nillable=\"true\" type=\"ifc:IfcDoorPanelProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDoorPanelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PanelDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PanelOperation\" type=\"ifc:IfcDoorPanelOperationEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PanelWidth\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PanelPosition\" type=\"ifc:IfcDoorPanelPositionEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ShapeAspectStyle\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTypeProduct\" name=\"IfcDoorStyle\" nillable=\"true\" type=\"ifc:IfcDoorStyle\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDoorStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcDoorStyleOperationEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ConstructionType\" type=\"ifc:IfcDoorStyleConstructionEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ParameterTakesPrecedence\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Sizeable\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcDraughtingCallout\" nillable=\"true\" type=\"ifc:IfcDraughtingCallout\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDraughtingCallout\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Contents\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDraughtingCalloutElement\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDraughtingCalloutElement\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcDraughtingCalloutRelationship\" nillable=\"true\" type=\"ifc:IfcDraughtingCalloutRelationship\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDraughtingCalloutRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingDraughtingCallout\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDraughtingCallout\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedDraughtingCallout\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDraughtingCallout\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedColour\" name=\"IfcDraughtingPreDefinedColour\" nillable=\"true\" type=\"ifc:IfcDraughtingPreDefinedColour\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedColour\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedColour\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedCurveFont\" name=\"IfcDraughtingPreDefinedCurveFont\" nillable=\"true\" type=\"ifc:IfcDraughtingPreDefinedCurveFont\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedCurveFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedCurveFont\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedTextFont\" name=\"IfcDraughtingPreDefinedTextFont\" nillable=\"true\" type=\"ifc:IfcDraughtingPreDefinedTextFont\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedTextFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedTextFont\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowFittingType\" name=\"IfcDuctFittingType\" nillable=\"true\" type=\"ifc:IfcDuctFittingType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDuctFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowSegmentType\" name=\"IfcDuctSegmentType\" nillable=\"true\" type=\"ifc:IfcDuctSegmentType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDuctSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" name=\"IfcDuctSilencerType\" nillable=\"true\" type=\"ifc:IfcDuctSilencerType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcDuctSilencerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcEdge\" nillable=\"true\" type=\"ifc:IfcEdge\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcEdge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EdgeStart\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertex\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EdgeEnd\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertex\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEdge\" name=\"IfcEdgeCurve\" nillable=\"true\" type=\"ifc:IfcEdgeCurve\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcEdgeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeGeometry\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" name=\"IfcEdgeFeature\" nillable=\"true\" type=\"ifc:IfcEdgeFeature\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcEdgeFeature\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FeatureLength\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcLoop\" name=\"IfcEdgeLoop\" nillable=\"true\" type=\"ifc:IfcEdgeLoop\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcEdgeLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcOrientedEdge\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcElectricApplianceType\" nillable=\"true\" type=\"ifc:IfcElectricApplianceType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcElectricApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowController\" name=\"IfcElectricDistributionPoint\" nillable=\"true\" type=\"ifc:IfcElectricDistributionPoint\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcElectricDistributionPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DistributionPointFunction\" type=\"ifc:IfcElectricDistributionPointFunctionEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UserDefinedFunction\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" name=\"IfcElectricFlowStorageDeviceType\" nillable=\"true\" type=\"ifc:IfcElectricFlowStorageDeviceType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcElectricFlowStorageDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcElectricGeneratorType\" nillable=\"true\" type=\"ifc:IfcElectricGeneratorType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcElectricGeneratorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcElectricHeaterType\" nillable=\"true\" type=\"ifc:IfcElectricHeaterType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcElectricHeaterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricHeaterTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcElectricMotorType\" nillable=\"true\" type=\"ifc:IfcElectricMotorType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcElectricMotorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcElectricTimeControlType\" nillable=\"true\" type=\"ifc:IfcElectricTimeControlType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcElectricTimeControlType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyProperties\" name=\"IfcElectricalBaseProperties\" nillable=\"true\" type=\"ifc:IfcElectricalBaseProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcElectricalBaseProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ElectricCurrentType\" minOccurs=\"0\" type=\"ifc:IfcElectricCurrentEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"InputVoltage\" type=\"ifc:IfcElectricVoltageMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"InputFrequency\" type=\"ifc:IfcFrequencyMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FullLoadCurrent\" minOccurs=\"0\" type=\"ifc:IfcElectricCurrentMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MinimumCircuitCurrent\" minOccurs=\"0\" type=\"ifc:IfcElectricCurrentMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MaximumPowerInput\" minOccurs=\"0\" type=\"ifc:IfcPowerMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RatedPowerInput\" minOccurs=\"0\" type=\"ifc:IfcPowerMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"InputPhase\" type=\"xs:long\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSystem\" name=\"IfcElectricalCircuit\" nillable=\"true\" type=\"ifc:IfcElectricalCircuit\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcElectricalCircuit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcElectricalElement\" nillable=\"true\" type=\"ifc:IfcElectricalElement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcElectricalElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcElement\" nillable=\"true\" type=\"ifc:IfcElement\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Tag\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcElementAssembly\" nillable=\"true\" type=\"ifc:IfcElementAssembly\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcElementAssembly\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AssemblyPlace\" minOccurs=\"0\" type=\"ifc:IfcAssemblyPlaceEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcElementComponent\" nillable=\"true\" type=\"ifc:IfcElementComponent\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcElementComponent\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElementType\" name=\"IfcElementComponentType\" nillable=\"true\" type=\"ifc:IfcElementComponentType\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcElementComponentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcElementQuantity\" nillable=\"true\" type=\"ifc:IfcElementQuantity\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcElementQuantity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MethodOfMeasurement\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Quantities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTypeProduct\" name=\"IfcElementType\" nillable=\"true\" type=\"ifc:IfcElementType\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ElementType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSurface\" name=\"IfcElementarySurface\" nillable=\"true\" type=\"ifc:IfcElementarySurface\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcElementarySurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcConic\" name=\"IfcEllipse\" nillable=\"true\" type=\"ifc:IfcEllipse\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcEllipse\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcEllipseProfileDef\" nillable=\"true\" type=\"ifc:IfcEllipseProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcEllipseProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcEnergyConversionDevice\" nillable=\"true\" type=\"ifc:IfcEnergyConversionDevice\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcEnergyConversionDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcEnergyConversionDeviceType\" nillable=\"true\" type=\"ifc:IfcEnergyConversionDeviceType\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcEnergyConversionDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcEnergyProperties\" nillable=\"true\" type=\"ifc:IfcEnergyProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcEnergyProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EnergySequence\" minOccurs=\"0\" type=\"ifc:IfcEnergySequenceEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UserDefinedEnergySequence\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcAppliedValue\" name=\"IfcEnvironmentalImpactValue\" nillable=\"true\" type=\"ifc:IfcEnvironmentalImpactValue\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcEnvironmentalImpactValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ImpactType\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Category\" type=\"ifc:IfcEnvironmentalImpactCategoryEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UserDefinedCategory\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcEquipmentElement\" nillable=\"true\" type=\"ifc:IfcEquipmentElement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcEquipmentElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcEquipmentStandard\" nillable=\"true\" type=\"ifc:IfcEquipmentStandard\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcEquipmentStandard\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcEvaporativeCoolerType\" nillable=\"true\" type=\"ifc:IfcEvaporativeCoolerType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcEvaporativeCoolerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcEvaporatorType\" nillable=\"true\" type=\"ifc:IfcEvaporatorType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcEvaporatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcExtendedMaterialProperties\" nillable=\"true\" type=\"ifc:IfcExtendedMaterialProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcExtendedMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtendedProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcExternalReference\" nillable=\"true\" type=\"ifc:IfcExternalReference\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcExternalReference\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Location\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ItemReference\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcExternallyDefinedHatchStyle\" nillable=\"true\" type=\"ifc:IfcExternallyDefinedHatchStyle\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcExternallyDefinedHatchStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcExternallyDefinedSurfaceStyle\" nillable=\"true\" type=\"ifc:IfcExternallyDefinedSurfaceStyle\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcExternallyDefinedSurfaceStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcExternallyDefinedSymbol\" nillable=\"true\" type=\"ifc:IfcExternallyDefinedSymbol\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcExternallyDefinedSymbol\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcExternallyDefinedTextFont\" nillable=\"true\" type=\"ifc:IfcExternallyDefinedTextFont\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcExternallyDefinedTextFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSweptAreaSolid\" name=\"IfcExtrudedAreaSolid\" nillable=\"true\" type=\"ifc:IfcExtrudedAreaSolid\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcExtrudedAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcFace\" nillable=\"true\" type=\"ifc:IfcFace\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Bounds\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFaceBound\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFaceBound\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcFaceBasedSurfaceModel\" nillable=\"true\" type=\"ifc:IfcFaceBasedSurfaceModel\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFaceBasedSurfaceModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FbsmFaces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectedFaceSet\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcConnectedFaceSet\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcFaceBound\" nillable=\"true\" type=\"ifc:IfcFaceBound\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFaceBound\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Bound\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLoop\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFaceBound\" name=\"IfcFaceOuterBound\" nillable=\"true\" type=\"ifc:IfcFaceOuterBound\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFaceOuterBound\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFaceBound\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFace\" name=\"IfcFaceSurface\" nillable=\"true\" type=\"ifc:IfcFaceSurface\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFaceSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFace\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FaceSurface\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcManifoldSolidBrep\" name=\"IfcFacetedBrep\" nillable=\"true\" type=\"ifc:IfcFacetedBrep\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFacetedBrep\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcManifoldSolidBrep\" name=\"IfcFacetedBrepWithVoids\" nillable=\"true\" type=\"ifc:IfcFacetedBrepWithVoids\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFacetedBrepWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Voids\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClosedShell\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" name=\"IfcFailureConnectionCondition\" nillable=\"true\" type=\"ifc:IfcFailureConnectionCondition\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFailureConnectionCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TensionFailureX\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TensionFailureY\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TensionFailureZ\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CompressionFailureX\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CompressionFailureY\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CompressionFailureZ\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" name=\"IfcFanType\" nillable=\"true\" type=\"ifc:IfcFanType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFanType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElementComponent\" name=\"IfcFastener\" nillable=\"true\" type=\"ifc:IfcFastener\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFastener\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElementComponentType\" name=\"IfcFastenerType\" nillable=\"true\" type=\"ifc:IfcFastenerType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFastenerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcFeatureElement\" nillable=\"true\" type=\"ifc:IfcFeatureElement\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFeatureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFeatureElement\" name=\"IfcFeatureElementAddition\" nillable=\"true\" type=\"ifc:IfcFeatureElementAddition\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFeatureElementAddition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFeatureElement\" name=\"IfcFeatureElementSubtraction\" nillable=\"true\" type=\"ifc:IfcFeatureElementSubtraction\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFeatureElementSubtraction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPresentationStyle\" name=\"IfcFillAreaStyle\" nillable=\"true\" type=\"ifc:IfcFillAreaStyle\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFillAreaStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FillStyles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFillStyleSelect\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcFillAreaStyleHatching\" nillable=\"true\" type=\"ifc:IfcFillAreaStyleHatching\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFillAreaStyleHatching\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HatchLineAppearance\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyle\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"StartOfNextHatchLine\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcHatchLineDistanceSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PointOfReferenceHatchLine\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PatternStart\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HatchLineAngle\" type=\"ifc:IfcPlaneAngleMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcFillAreaStyleTileSymbolWithStyle\" nillable=\"true\" type=\"ifc:IfcFillAreaStyleTileSymbolWithStyle\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFillAreaStyleTileSymbolWithStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Symbol\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAnnotationSymbolOccurrence\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcFillAreaStyleTiles\" nillable=\"true\" type=\"ifc:IfcFillAreaStyleTiles\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFillAreaStyleTiles\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TilingPattern\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOneDirectionRepeatFactor\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Tiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillAreaStyleTileShapeSelect\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcFillAreaStyleTileShapeSelect\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TilingScale\" type=\"ifc:IfcPositiveRatioMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" name=\"IfcFilterType\" nillable=\"true\" type=\"ifc:IfcFilterType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFilterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcFireSuppressionTerminalType\" nillable=\"true\" type=\"ifc:IfcFireSuppressionTerminalType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFireSuppressionTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowController\" nillable=\"true\" type=\"ifc:IfcFlowController\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFlowController\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowControllerType\" nillable=\"true\" type=\"ifc:IfcFlowControllerType\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFlowControllerType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowFitting\" nillable=\"true\" type=\"ifc:IfcFlowFitting\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFlowFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowFittingType\" nillable=\"true\" type=\"ifc:IfcFlowFittingType\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFlowFittingType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionControlElementType\" name=\"IfcFlowInstrumentType\" nillable=\"true\" type=\"ifc:IfcFlowInstrumentType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFlowInstrumentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcFlowMeterType\" nillable=\"true\" type=\"ifc:IfcFlowMeterType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFlowMeterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowMovingDevice\" nillable=\"true\" type=\"ifc:IfcFlowMovingDevice\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFlowMovingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowMovingDeviceType\" nillable=\"true\" type=\"ifc:IfcFlowMovingDeviceType\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFlowMovingDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowSegment\" nillable=\"true\" type=\"ifc:IfcFlowSegment\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFlowSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowSegmentType\" nillable=\"true\" type=\"ifc:IfcFlowSegmentType\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFlowSegmentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowStorageDevice\" nillable=\"true\" type=\"ifc:IfcFlowStorageDevice\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFlowStorageDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowStorageDeviceType\" nillable=\"true\" type=\"ifc:IfcFlowStorageDeviceType\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFlowStorageDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowTerminal\" nillable=\"true\" type=\"ifc:IfcFlowTerminal\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFlowTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowTerminalType\" nillable=\"true\" type=\"ifc:IfcFlowTerminalType\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFlowTerminalType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElement\" name=\"IfcFlowTreatmentDevice\" nillable=\"true\" type=\"ifc:IfcFlowTreatmentDevice\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFlowTreatmentDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionFlowElementType\" name=\"IfcFlowTreatmentDeviceType\" nillable=\"true\" type=\"ifc:IfcFlowTreatmentDeviceType\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFlowTreatmentDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcFluidFlowProperties\" nillable=\"true\" type=\"ifc:IfcFluidFlowProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFluidFlowProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PropertySource\" type=\"ifc:IfcPropertySourceEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"FlowConditionTimeSeries\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"VelocityTimeSeries\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"FlowrateTimeSeries\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Fluid\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PressureTimeSeries\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UserDefinedPropertySource\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TemperatureSingleValue\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WetBulbTemperatureSingleValue\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"WetBulbTemperatureTimeSeries\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TemperatureTimeSeries\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"FlowrateSingleValue\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDerivedMeasureValue\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FlowConditionSingleValue\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VelocitySingleValue\" minOccurs=\"0\" type=\"ifc:IfcLinearVelocityMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PressureSingleValue\" minOccurs=\"0\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcFooting\" nillable=\"true\" type=\"ifc:IfcFooting\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFooting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcFuelProperties\" nillable=\"true\" type=\"ifc:IfcFuelProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFuelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CombustionTemperature\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CarbonContent\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LowerHeatingValue\" minOccurs=\"0\" type=\"ifc:IfcHeatingValueMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HigherHeatingValue\" minOccurs=\"0\" type=\"ifc:IfcHeatingValueMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcFurnishingElement\" nillable=\"true\" type=\"ifc:IfcFurnishingElement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFurnishingElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElementType\" name=\"IfcFurnishingElementType\" nillable=\"true\" type=\"ifc:IfcFurnishingElementType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFurnishingElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcFurnitureStandard\" nillable=\"true\" type=\"ifc:IfcFurnitureStandard\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFurnitureStandard\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFurnishingElementType\" name=\"IfcFurnitureType\" nillable=\"true\" type=\"ifc:IfcFurnitureType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcFurnitureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcGasTerminalType\" nillable=\"true\" type=\"ifc:IfcGasTerminalType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcGasTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcGasTerminalTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcGeneralMaterialProperties\" nillable=\"true\" type=\"ifc:IfcGeneralMaterialProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcGeneralMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MolecularWeight\" minOccurs=\"0\" type=\"ifc:IfcMolecularWeightMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Porosity\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MassDensity\" minOccurs=\"0\" type=\"ifc:IfcMassDensityMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProfileProperties\" name=\"IfcGeneralProfileProperties\" nillable=\"true\" type=\"ifc:IfcGeneralProfileProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcGeneralProfileProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PhysicalWeight\" minOccurs=\"0\" type=\"ifc:IfcMassPerLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Perimeter\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MinimumPlateThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MaximumPlateThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CrossSectionArea\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricSet\" name=\"IfcGeometricCurveSet\" nillable=\"true\" type=\"ifc:IfcGeometricCurveSet\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcGeometricCurveSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricSet\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentationContext\" name=\"IfcGeometricRepresentationContext\" nillable=\"true\" type=\"ifc:IfcGeometricRepresentationContext\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcGeometricRepresentationContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationContext\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CoordinateSpaceDimension\" minOccurs=\"0\" type=\"ifc:IfcDimensionCount\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Precision\" minOccurs=\"0\" type=\"xs:double\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"WorldCoordinateSystem\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TrueNorth\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentationItem\" name=\"IfcGeometricRepresentationItem\" nillable=\"true\" type=\"ifc:IfcGeometricRepresentationItem\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcGeometricRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcGeometricRepresentationContext\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContextIdentifier\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ContextType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationContext\" name=\"IfcGeometricRepresentationSubContext\" nillable=\"true\" type=\"ifc:IfcGeometricRepresentationSubContext\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationSubContext-temp\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentContext\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationContext\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TargetScale\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TargetView\" type=\"ifc:IfcGeometricProjectionEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UserDefinedTargetView\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcGeometricSet\" nillable=\"true\" type=\"ifc:IfcGeometricSet\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcGeometricSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGeometricSetSelect\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcGrid\" nillable=\"true\" type=\"ifc:IfcGrid\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcGrid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WAxes\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcGridAxis\" nillable=\"true\" type=\"ifc:IfcGridAxis\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcGridAxis\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisTag\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"AxisCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SameSense\" type=\"ifc:IfcBoolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcObjectPlacement\" name=\"IfcGridPlacement\" nillable=\"true\" type=\"ifc:IfcGridPlacement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcGridPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlacementLocation\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PlacementRefDirection\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcGroup\" nillable=\"true\" type=\"ifc:IfcGroup\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcHalfSpaceSolid\" nillable=\"true\" type=\"ifc:IfcHalfSpaceSolid\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcHalfSpaceSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseSurface\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"AgreementFlag\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcHeatExchangerType\" nillable=\"true\" type=\"ifc:IfcHeatExchangerType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcHeatExchangerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcHumidifierType\" nillable=\"true\" type=\"ifc:IfcHumidifierType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcHumidifierType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcHygroscopicMaterialProperties\" nillable=\"true\" type=\"ifc:IfcHygroscopicMaterialProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcHygroscopicMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UpperVaporResistanceFactor\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LowerVaporResistanceFactor\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"IsothermalMoistureCapacity\" minOccurs=\"0\" type=\"ifc:IfcIsothermalMoistureCapacityMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VaporPermeability\" minOccurs=\"0\" type=\"ifc:IfcVaporPermeabilityMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MoistureDiffusivity\" minOccurs=\"0\" type=\"ifc:IfcMoistureDiffusivityMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcIShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcIShapeProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcIShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSurfaceTexture\" name=\"IfcImageTexture\" nillable=\"true\" type=\"ifc:IfcImageTexture\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcImageTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UrlReference\" type=\"ifc:IfcIdentifier\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcInventory\" nillable=\"true\" type=\"ifc:IfcInventory\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcInventory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InventoryType\" type=\"ifc:IfcInventoryTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Jurisdiction\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResponsiblePersons\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPerson\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LastUpdateDate\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CurrentValue\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"OriginalValue\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTimeSeries\" name=\"IfcIrregularTimeSeries\" nillable=\"true\" type=\"ifc:IfcIrregularTimeSeries\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcIrregularTimeSeries\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIrregularTimeSeriesValue\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcIrregularTimeSeriesValue\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcIrregularTimeSeriesValue\" nillable=\"true\" type=\"ifc:IfcIrregularTimeSeriesValue\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcIrregularTimeSeriesValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TimeStamp\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowFittingType\" name=\"IfcJunctionBoxType\" nillable=\"true\" type=\"ifc:IfcJunctionBoxType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcJunctionBoxType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcLShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcLShapeProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Width\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EdgeRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LegSlope\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcConstructionResource\" name=\"IfcLaborResource\" nillable=\"true\" type=\"ifc:IfcLaborResource\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLaborResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SkillSet\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcLampType\" nillable=\"true\" type=\"ifc:IfcLampType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLampType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcLibraryInformation\" nillable=\"true\" type=\"ifc:IfcLibraryInformation\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLibraryInformation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Version\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Publisher\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"VersionDate\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LibraryReference\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLibraryReference\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcExternalReference\" name=\"IfcLibraryReference\" nillable=\"true\" type=\"ifc:IfcLibraryReference\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLibraryReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcLightDistributionData\" nillable=\"true\" type=\"ifc:IfcLightDistributionData\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLightDistributionData\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MainPlaneAngle\" type=\"ifc:IfcPlaneAngleMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondaryPlaneAngle\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPlaneAngleMeasure\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LuminousIntensity\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLuminousIntensityDistributionMeasure\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcLightFixtureType\" nillable=\"true\" type=\"ifc:IfcLightFixtureType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLightFixtureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcLightIntensityDistribution\" nillable=\"true\" type=\"ifc:IfcLightIntensityDistribution\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLightIntensityDistribution\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LightDistributionCurve\" type=\"ifc:IfcLightDistributionCurveEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DistributionData\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLightDistributionData\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLightDistributionData\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcLightSource\" nillable=\"true\" type=\"ifc:IfcLightSource\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLightSource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LightColour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"AmbientIntensity\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Intensity\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcLightSource\" name=\"IfcLightSourceAmbient\" nillable=\"true\" type=\"ifc:IfcLightSourceAmbient\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLightSourceAmbient\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcLightSource\" name=\"IfcLightSourceDirectional\" nillable=\"true\" type=\"ifc:IfcLightSourceDirectional\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLightSourceDirectional\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcLightSource\" name=\"IfcLightSourceGoniometric\" nillable=\"true\" type=\"ifc:IfcLightSourceGoniometric\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLightSourceGoniometric\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ColourAppearance\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ColourTemperature\" type=\"ifc:IfcThermodynamicTemperatureMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LuminousFlux\" type=\"ifc:IfcLuminousFluxMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LightEmissionSource\" type=\"ifc:IfcLightEmissionSourceEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LightDistributionDataSource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcLightSource\" name=\"IfcLightSourcePositional\" nillable=\"true\" type=\"ifc:IfcLightSourcePositional\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLightSourcePositional\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ConstantAttenuation\" type=\"ifc:IfcReal\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DistanceAttenuation\" type=\"ifc:IfcReal\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"QuadricAttenuation\" type=\"ifc:IfcReal\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcLightSourcePositional\" name=\"IfcLightSourceSpot\" nillable=\"true\" type=\"ifc:IfcLightSourceSpot\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLightSourceSpot\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSourcePositional\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ConcentrationExponent\" minOccurs=\"0\" type=\"ifc:IfcReal\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SpreadAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BeamWidthAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcCurve\" name=\"IfcLine\" nillable=\"true\" type=\"ifc:IfcLine\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Pnt\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Dir\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" name=\"IfcLinearDimension\" nillable=\"true\" type=\"ifc:IfcLinearDimension\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLinearDimension\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcObjectPlacement\" name=\"IfcLocalPlacement\" nillable=\"true\" type=\"ifc:IfcLocalPlacement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLocalPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"PlacementRelTo\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectPlacement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelativePlacement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcLocalTime\" nillable=\"true\" type=\"ifc:IfcLocalTime\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLocalTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HourComponent\" type=\"ifc:IfcHourInDay\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MinuteComponent\" minOccurs=\"0\" type=\"ifc:IfcMinuteInHour\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondComponent\" minOccurs=\"0\" type=\"ifc:IfcSecondInMinute\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Zone\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCoordinatedUniversalTimeOffset\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DaylightSavingOffset\" minOccurs=\"0\" type=\"ifc:IfcDaylightSavingHour\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcLoop\" nillable=\"true\" type=\"ifc:IfcLoop\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSolidModel\" name=\"IfcManifoldSolidBrep\" nillable=\"true\" type=\"ifc:IfcManifoldSolidBrep\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcManifoldSolidBrep\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Outer\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentationItem\" name=\"IfcMappedItem\" nillable=\"true\" type=\"ifc:IfcMappedItem\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMappedItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MappingSource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MappingTarget\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterial\" nillable=\"true\" type=\"ifc:IfcMaterial\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMaterial\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterialClassificationRelationship\" nillable=\"true\" type=\"ifc:IfcMaterialClassificationRelationship\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMaterialClassificationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialClassifications\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcClassificationNotationSelect\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ClassifiedMaterial\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProductRepresentation\" name=\"IfcMaterialDefinitionRepresentation\" nillable=\"true\" type=\"ifc:IfcMaterialDefinitionRepresentation\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMaterialDefinitionRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepresentedMaterial\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterialLayer\" nillable=\"true\" type=\"ifc:IfcMaterialLayer\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMaterialLayer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Material\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LayerThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"IsVentilated\" minOccurs=\"0\" type=\"ifc:IfcLogical\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterialLayerSet\" nillable=\"true\" type=\"ifc:IfcMaterialLayerSet\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMaterialLayerSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialLayers\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcMaterialLayer\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LayerSetName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterialLayerSetUsage\" nillable=\"true\" type=\"ifc:IfcMaterialLayerSetUsage\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMaterialLayerSetUsage\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForLayerSet\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayerSet\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LayerSetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DirectionSense\" type=\"ifc:IfcDirectionSenseEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"OffsetFromReferenceLine\" type=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterialList\" nillable=\"true\" type=\"ifc:IfcMaterialList\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMaterialList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Materials\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcMaterial\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMaterialProperties\" nillable=\"true\" type=\"ifc:IfcMaterialProperties\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMaterialProperties\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMeasureWithUnit\" nillable=\"true\" type=\"ifc:IfcMeasureWithUnit\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMeasureWithUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ValueComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcMechanicalMaterialProperties\" name=\"IfcMechanicalConcreteMaterialProperties\" nillable=\"true\" type=\"ifc:IfcMechanicalConcreteMaterialProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMechanicalConcreteMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMechanicalMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CompressiveStrength\" minOccurs=\"0\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MaxAggregateSize\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"AdmixturesDescription\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Workability\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ProtectivePoreRatio\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WaterImpermeability\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFastener\" name=\"IfcMechanicalFastener\" nillable=\"true\" type=\"ifc:IfcMechanicalFastener\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMechanicalFastener\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFastener\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"NominalDiameter\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"NominalLength\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFastenerType\" name=\"IfcMechanicalFastenerType\" nillable=\"true\" type=\"ifc:IfcMechanicalFastenerType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMechanicalFastenerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFastenerType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcMechanicalMaterialProperties\" nillable=\"true\" type=\"ifc:IfcMechanicalMaterialProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMechanicalMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DynamicViscosity\" minOccurs=\"0\" type=\"ifc:IfcDynamicViscosityMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"YoungModulus\" minOccurs=\"0\" type=\"ifc:IfcModulusOfElasticityMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ShearModulus\" minOccurs=\"0\" type=\"ifc:IfcModulusOfElasticityMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PoissonRatio\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ThermalExpansionCoefficient\" minOccurs=\"0\" type=\"ifc:IfcThermalExpansionCoefficientMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcMechanicalMaterialProperties\" name=\"IfcMechanicalSteelMaterialProperties\" nillable=\"true\" type=\"ifc:IfcMechanicalSteelMaterialProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMechanicalSteelMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMechanicalMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"YieldStress\" minOccurs=\"0\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UltimateStress\" minOccurs=\"0\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UltimateStrain\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HardeningModule\" minOccurs=\"0\" type=\"ifc:IfcModulusOfElasticityMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ProportionalStress\" minOccurs=\"0\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PlasticStrain\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Relaxations\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelaxation\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRelaxation\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcMember\" nillable=\"true\" type=\"ifc:IfcMember\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcMemberType\" nillable=\"true\" type=\"ifc:IfcMemberType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMemberType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcConstraint\" name=\"IfcMetric\" nillable=\"true\" type=\"ifc:IfcMetric\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMetric\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Benchmark\" type=\"ifc:IfcBenchmarkEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ValueSource\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DataValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcMonetaryUnit\" nillable=\"true\" type=\"ifc:IfcMonetaryUnit\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMonetaryUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Currency\" type=\"ifc:IfcCurrencyEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcMotorConnectionType\" nillable=\"true\" type=\"ifc:IfcMotorConnectionType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMotorConnectionType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTask\" name=\"IfcMove\" nillable=\"true\" type=\"ifc:IfcMove\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcMove\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTask\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MoveFrom\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MoveTo\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PunchList\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcText\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcText\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcNamedUnit\" nillable=\"true\" type=\"ifc:IfcNamedUnit\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcNamedUnit\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Dimensions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDimensionalExponents\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitType\" type=\"ifc:IfcUnitEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcObjectDefinition\" name=\"IfcObject\" nillable=\"true\" type=\"ifc:IfcObject\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcObject\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ObjectType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRoot\" name=\"IfcObjectDefinition\" nillable=\"true\" type=\"ifc:IfcObjectDefinition\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcObjectDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcObjectPlacement\" nillable=\"true\" type=\"ifc:IfcObjectPlacement\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcObjectPlacement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcConstraint\" name=\"IfcObjective\" nillable=\"true\" type=\"ifc:IfcObjective\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcObjective\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"BenchmarkValues\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMetric\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ResultValues\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMetric\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ObjectiveQualifier\" type=\"ifc:IfcObjectiveEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UserDefinedQualifier\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcActor\" name=\"IfcOccupant\" nillable=\"true\" type=\"ifc:IfcOccupant\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcOccupant\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcActor\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcOccupantTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcCurve\" name=\"IfcOffsetCurve2D\" nillable=\"true\" type=\"ifc:IfcOffsetCurve2D\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcOffsetCurve2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Distance\" type=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcCurve\" name=\"IfcOffsetCurve3D\" nillable=\"true\" type=\"ifc:IfcOffsetCurve3D\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcOffsetCurve3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Distance\" type=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SelfIntersect\" type=\"ex:logical\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RefDirection\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcOneDirectionRepeatFactor\" nillable=\"true\" type=\"ifc:IfcOneDirectionRepeatFactor\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcOneDirectionRepeatFactor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepeatFactor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcConnectedFaceSet\" name=\"IfcOpenShell\" nillable=\"true\" type=\"ifc:IfcOpenShell\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcOpenShell\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" name=\"IfcOpeningElement\" nillable=\"true\" type=\"ifc:IfcOpeningElement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcOpeningElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcOpticalMaterialProperties\" nillable=\"true\" type=\"ifc:IfcOpticalMaterialProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcOpticalMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VisibleTransmittance\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SolarTransmittance\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ThermalIrTransmittance\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ThermalIrEmissivityBack\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ThermalIrEmissivityFront\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VisibleReflectanceBack\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VisibleReflectanceFront\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SolarReflectanceFront\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SolarReflectanceBack\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTask\" name=\"IfcOrderAction\" nillable=\"true\" type=\"ifc:IfcOrderAction\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcOrderAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTask\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ActionID\" type=\"ifc:IfcIdentifier\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcOrganization\" nillable=\"true\" type=\"ifc:IfcOrganization\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcOrganization\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Id\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Roles\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorRole\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Addresses\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAddress\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcOrganizationRelationship\" nillable=\"true\" type=\"ifc:IfcOrganizationRelationship\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcOrganizationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingOrganization\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedOrganizations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcOrganization\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:complexType name=\"IfcOrientedEdge-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element substitutionGroup=\"ifc:IfcEdge\" name=\"IfcOrientedEdge\" nillable=\"true\" type=\"ifc:IfcOrientedEdge\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcOrientedEdge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOrientedEdge-temp\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcEdge\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcOutletType\" nillable=\"true\" type=\"ifc:IfcOutletType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcOutletType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcOwnerHistory\" nillable=\"true\" type=\"ifc:IfcOwnerHistory\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcOwnerHistory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OwningUser\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"OwningApplication\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApplication\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"State\" minOccurs=\"0\" type=\"ifc:IfcStateEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ChangeAction\" type=\"ifc:IfcChangeActionEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LastModifiedDate\" minOccurs=\"0\" type=\"ifc:IfcTimeStamp\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LastModifyingUser\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LastModifyingApplication\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApplication\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CreationDate\" type=\"ifc:IfcTimeStamp\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProfileDef\" name=\"IfcParameterizedProfileDef\" nillable=\"true\" type=\"ifc:IfcParameterizedProfileDef\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcParameterizedProfileDef\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcPath\" nillable=\"true\" type=\"ifc:IfcPath\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPath\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcOrientedEdge\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcPerformanceHistory\" nillable=\"true\" type=\"ifc:IfcPerformanceHistory\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPerformanceHistory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LifeCyclePhase\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcPermeableCoveringProperties\" nillable=\"true\" type=\"ifc:IfcPermeableCoveringProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPermeableCoveringProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcPermeableCoveringOperationEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FrameDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FrameThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ShapeAspectStyle\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcPermit\" nillable=\"true\" type=\"ifc:IfcPermit\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPermit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PermitID\" type=\"ifc:IfcIdentifier\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPerson\" nillable=\"true\" type=\"ifc:IfcPerson\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPerson\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Id\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FamilyName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"GivenName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MiddleNames\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PrefixTitles\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SuffixTitles\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Roles\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorRole\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Addresses\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAddress\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPersonAndOrganization\" nillable=\"true\" type=\"ifc:IfcPersonAndOrganization\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPersonAndOrganization\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ThePerson\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TheOrganization\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Roles\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcActorRole\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalQuantity\" name=\"IfcPhysicalComplexQuantity\" nillable=\"true\" type=\"ifc:IfcPhysicalComplexQuantity\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPhysicalComplexQuantity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasQuantities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Discrimination\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Quality\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Usage\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPhysicalQuantity\" nillable=\"true\" type=\"ifc:IfcPhysicalQuantity\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPhysicalQuantity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalQuantity\" name=\"IfcPhysicalSimpleQuantity\" nillable=\"true\" type=\"ifc:IfcPhysicalSimpleQuantity\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPhysicalSimpleQuantity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Unit\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcPile\" nillable=\"true\" type=\"ifc:IfcPile\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPile\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ConstructionType\" minOccurs=\"0\" type=\"ifc:IfcPileConstructionEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowFittingType\" name=\"IfcPipeFittingType\" nillable=\"true\" type=\"ifc:IfcPipeFittingType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPipeFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowSegmentType\" name=\"IfcPipeSegmentType\" nillable=\"true\" type=\"ifc:IfcPipeSegmentType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPipeSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSurfaceTexture\" name=\"IfcPixelTexture\" nillable=\"true\" type=\"ifc:IfcPixelTexture\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPixelTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Width\" type=\"ifc:IfcInteger\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Height\" type=\"ifc:IfcInteger\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ColourComponents\" type=\"ifc:IfcInteger\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Pixel\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:hexBinary-wrapper\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:hexBinary-wrapper\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcPlacement\" nillable=\"true\" type=\"ifc:IfcPlacement\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPlacement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Location\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPlanarExtent\" name=\"IfcPlanarBox\" nillable=\"true\" type=\"ifc:IfcPlanarBox\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPlanarBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlanarExtent\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Placement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcPlanarExtent\" nillable=\"true\" type=\"ifc:IfcPlanarExtent\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPlanarExtent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SizeInX\" type=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SizeInY\" type=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElementarySurface\" name=\"IfcPlane\" nillable=\"true\" type=\"ifc:IfcPlane\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPlane\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcPlate\" nillable=\"true\" type=\"ifc:IfcPlate\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPlate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcPlateType\" nillable=\"true\" type=\"ifc:IfcPlateType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPlateType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcPoint\" nillable=\"true\" type=\"ifc:IfcPoint\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPoint\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPoint\" name=\"IfcPointOnCurve\" nillable=\"true\" type=\"ifc:IfcPointOnCurve\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPointOnCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointParameter\" type=\"ifc:IfcParameterValue\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPoint\" name=\"IfcPointOnSurface\" nillable=\"true\" type=\"ifc:IfcPointOnSurface\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPointOnSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointParameterU\" type=\"ifc:IfcParameterValue\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointParameterV\" type=\"ifc:IfcParameterValue\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcLoop\" name=\"IfcPolyLoop\" nillable=\"true\" type=\"ifc:IfcPolyLoop\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPolyLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Polygon\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" maxOccurs=\"unbounded\" minOccurs=\"3\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcHalfSpaceSolid\" name=\"IfcPolygonalBoundedHalfSpace\" nillable=\"true\" type=\"ifc:IfcPolygonalBoundedHalfSpace\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPolygonalBoundedHalfSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PolygonalBoundary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBoundedCurve\" name=\"IfcPolyline\" nillable=\"true\" type=\"ifc:IfcPolyline\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPolyline\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Points\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" maxOccurs=\"unbounded\" minOccurs=\"2\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcPort\" nillable=\"true\" type=\"ifc:IfcPort\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPort\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcAddress\" name=\"IfcPostalAddress\" nillable=\"true\" type=\"ifc:IfcPostalAddress\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPostalAddress\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InternalLocation\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"AddressLines\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PostalBox\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Town\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Region\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PostalCode\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Country\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedItem\" name=\"IfcPreDefinedColour\" nillable=\"true\" type=\"ifc:IfcPreDefinedColour\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPreDefinedColour\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedItem\" name=\"IfcPreDefinedCurveFont\" nillable=\"true\" type=\"ifc:IfcPreDefinedCurveFont\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPreDefinedCurveFont\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedSymbol\" name=\"IfcPreDefinedDimensionSymbol\" nillable=\"true\" type=\"ifc:IfcPreDefinedDimensionSymbol\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPreDefinedDimensionSymbol\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedSymbol\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPreDefinedItem\" nillable=\"true\" type=\"ifc:IfcPreDefinedItem\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPreDefinedItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedSymbol\" name=\"IfcPreDefinedPointMarkerSymbol\" nillable=\"true\" type=\"ifc:IfcPreDefinedPointMarkerSymbol\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPreDefinedPointMarkerSymbol\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedSymbol\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedItem\" name=\"IfcPreDefinedSymbol\" nillable=\"true\" type=\"ifc:IfcPreDefinedSymbol\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPreDefinedSymbol\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedSymbol\" name=\"IfcPreDefinedTerminatorSymbol\" nillable=\"true\" type=\"ifc:IfcPreDefinedTerminatorSymbol\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPreDefinedTerminatorSymbol\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedSymbol\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedItem\" name=\"IfcPreDefinedTextFont\" nillable=\"true\" type=\"ifc:IfcPreDefinedTextFont\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPreDefinedTextFont\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPresentationLayerAssignment\" nillable=\"true\" type=\"ifc:IfcPresentationLayerAssignment\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPresentationLayerAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"AssignedItems\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLayeredItem\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLayeredItem\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Identifier\" minOccurs=\"0\" type=\"ifc:IfcIdentifier\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPresentationLayerAssignment\" name=\"IfcPresentationLayerWithStyle\" nillable=\"true\" type=\"ifc:IfcPresentationLayerWithStyle\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPresentationLayerWithStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationLayerAssignment\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LayerOn\" type=\"ex:logical\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LayerFrozen\" type=\"ex:logical\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LayerBlocked\" type=\"ex:logical\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LayerStyles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\" maxOccurs=\"unbounded\" minOccurs=\"0\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPresentationStyleSelect\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPresentationStyle\" nillable=\"true\" type=\"ifc:IfcPresentationStyle\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPresentationStyle\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPresentationStyleAssignment\" nillable=\"true\" type=\"ifc:IfcPresentationStyleAssignment\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPresentationStyleAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPresentationStyleSelect\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProcess\" name=\"IfcProcedure\" nillable=\"true\" type=\"ifc:IfcProcedure\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcProcedure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ProcedureID\" type=\"ifc:IfcIdentifier\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ProcedureType\" type=\"ifc:IfcProcedureTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UserDefinedProcedureType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcProcess\" nillable=\"true\" type=\"ifc:IfcProcess\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcProcess\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcProduct\" nillable=\"true\" type=\"ifc:IfcProduct\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcProduct\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ObjectPlacement\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectPlacement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Representation\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProductRepresentation\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProductRepresentation\" name=\"IfcProductDefinitionShape\" nillable=\"true\" type=\"ifc:IfcProductDefinitionShape\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcProductDefinitionShape\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcProductRepresentation\" nillable=\"true\" type=\"ifc:IfcProductRepresentation\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcProductRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Representations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentation\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcProductsOfCombustionProperties\" nillable=\"true\" type=\"ifc:IfcProductsOfCombustionProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcProductsOfCombustionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SpecificHeatCapacity\" minOccurs=\"0\" type=\"ifc:IfcSpecificHeatCapacityMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"N20Content\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"COContent\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CO2Content\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcProfileDef\" nillable=\"true\" type=\"ifc:IfcProfileDef\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcProfileDef\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ProfileType\" type=\"ifc:IfcProfileTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ProfileName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcProfileProperties\" nillable=\"true\" type=\"ifc:IfcProfileProperties\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcProfileProperties\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ProfileName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ProfileDefinition\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcProject\" nillable=\"true\" type=\"ifc:IfcProject\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcProject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LongName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Phase\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RepresentationContexts\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentationContext\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitsInContext\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcUnitAssignment\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcProjectOrder\" nillable=\"true\" type=\"ifc:IfcProjectOrder\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcProjectOrder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ID\" type=\"ifc:IfcIdentifier\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcProjectOrderTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Status\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcProjectOrderRecord\" nillable=\"true\" type=\"ifc:IfcProjectOrderRecord\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcProjectOrderRecord\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Records\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelAssignsToProjectOrder\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRelAssignsToProjectOrder\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcProjectOrderRecordTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationCurveOccurrence\" name=\"IfcProjectionCurve\" nillable=\"true\" type=\"ifc:IfcProjectionCurve\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcProjectionCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationCurveOccurrence\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFeatureElementAddition\" name=\"IfcProjectionElement\" nillable=\"true\" type=\"ifc:IfcProjectionElement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcProjectionElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementAddition\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcProperty\" nillable=\"true\" type=\"ifc:IfcProperty\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcProperty\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcIdentifier\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSimpleProperty\" name=\"IfcPropertyBoundedValue\" nillable=\"true\" type=\"ifc:IfcPropertyBoundedValue\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPropertyBoundedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"UpperBoundValue\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LowerBoundValue\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Unit\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPropertyConstraintRelationship\" nillable=\"true\" type=\"ifc:IfcPropertyConstraintRelationship\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPropertyConstraintRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRoot\" name=\"IfcPropertyDefinition\" nillable=\"true\" type=\"ifc:IfcPropertyDefinition\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPropertyDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPropertyDependencyRelationship\" nillable=\"true\" type=\"ifc:IfcPropertyDependencyRelationship\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPropertyDependencyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DependingProperty\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DependantProperty\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Expression\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSimpleProperty\" name=\"IfcPropertyEnumeratedValue\" nillable=\"true\" type=\"ifc:IfcPropertyEnumeratedValue\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPropertyEnumeratedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EnumerationReference\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyEnumeration\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcPropertyEnumeration\" nillable=\"true\" type=\"ifc:IfcPropertyEnumeration\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPropertyEnumeration\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Unit\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSimpleProperty\" name=\"IfcPropertyListValue\" nillable=\"true\" type=\"ifc:IfcPropertyListValue\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPropertyListValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Unit\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSimpleProperty\" name=\"IfcPropertyReferenceValue\" nillable=\"true\" type=\"ifc:IfcPropertyReferenceValue\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPropertyReferenceValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UsageName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PropertyReference\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcPropertySet\" nillable=\"true\" type=\"ifc:IfcPropertySet\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPropertySet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPropertyDefinition\" name=\"IfcPropertySetDefinition\" nillable=\"true\" type=\"ifc:IfcPropertySetDefinition\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPropertySetDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSimpleProperty\" name=\"IfcPropertySingleValue\" nillable=\"true\" type=\"ifc:IfcPropertySingleValue\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPropertySingleValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"NominalValue\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Unit\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSimpleProperty\" name=\"IfcPropertyTableValue\" nillable=\"true\" type=\"ifc:IfcPropertyTableValue\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPropertyTableValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DefiningValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefinedValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Expression\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"DefiningUnit\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"DefinedUnit\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcProtectiveDeviceType\" nillable=\"true\" type=\"ifc:IfcProtectiveDeviceType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcProtectiveDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcProxy\" nillable=\"true\" type=\"ifc:IfcProxy\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcProxy\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ProxyType\" type=\"ifc:IfcObjectTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Tag\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" name=\"IfcPumpType\" nillable=\"true\" type=\"ifc:IfcPumpType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcPumpType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" name=\"IfcQuantityArea\" nillable=\"true\" type=\"ifc:IfcQuantityArea\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcQuantityArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AreaValue\" type=\"ifc:IfcAreaMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" name=\"IfcQuantityCount\" nillable=\"true\" type=\"ifc:IfcQuantityCount\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcQuantityCount\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CountValue\" type=\"ifc:IfcCountMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" name=\"IfcQuantityLength\" nillable=\"true\" type=\"ifc:IfcQuantityLength\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcQuantityLength\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LengthValue\" type=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" name=\"IfcQuantityTime\" nillable=\"true\" type=\"ifc:IfcQuantityTime\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcQuantityTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TimeValue\" type=\"ifc:IfcTimeMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" name=\"IfcQuantityVolume\" nillable=\"true\" type=\"ifc:IfcQuantityVolume\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcQuantityVolume\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VolumeValue\" type=\"ifc:IfcVolumeMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" name=\"IfcQuantityWeight\" nillable=\"true\" type=\"ifc:IfcQuantityWeight\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcQuantityWeight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WeightValue\" type=\"ifc:IfcMassMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDimensionCurveDirectedCallout\" name=\"IfcRadiusDimension\" nillable=\"true\" type=\"ifc:IfcRadiusDimension\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRadiusDimension\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDimensionCurveDirectedCallout\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcRailing\" nillable=\"true\" type=\"ifc:IfcRailing\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRailing\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" minOccurs=\"0\" type=\"ifc:IfcRailingTypeEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcRailingType\" nillable=\"true\" type=\"ifc:IfcRailingType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRailingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcRamp\" nillable=\"true\" type=\"ifc:IfcRamp\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRamp\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeType\" type=\"ifc:IfcRampTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcRampFlight\" nillable=\"true\" type=\"ifc:IfcRampFlight\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRampFlight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcRampFlightType\" nillable=\"true\" type=\"ifc:IfcRampFlightType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRampFlightType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBezierCurve\" name=\"IfcRationalBezierCurve\" nillable=\"true\" type=\"ifc:IfcRationalBezierCurve\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRationalBezierCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBezierCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WeightsData\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:double-wrapper\" maxOccurs=\"unbounded\" minOccurs=\"2\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:double-wrapper\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRectangleProfileDef\" name=\"IfcRectangleHollowProfileDef\" nillable=\"true\" type=\"ifc:IfcRectangleHollowProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRectangleHollowProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"InnerFilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"OuterFilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcRectangleProfileDef\" nillable=\"true\" type=\"ifc:IfcRectangleProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRectangleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcCsgPrimitive3D\" name=\"IfcRectangularPyramid\" nillable=\"true\" type=\"ifc:IfcRectangularPyramid\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRectangularPyramid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBoundedSurface\" name=\"IfcRectangularTrimmedSurface\" nillable=\"true\" type=\"ifc:IfcRectangularTrimmedSurface\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRectangularTrimmedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"U1\" type=\"ifc:IfcParameterValue\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"V1\" type=\"ifc:IfcParameterValue\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"U2\" type=\"ifc:IfcParameterValue\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"V2\" type=\"ifc:IfcParameterValue\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Usense\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Vsense\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcReferencesValueDocument\" nillable=\"true\" type=\"ifc:IfcReferencesValueDocument\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcReferencesValueDocument\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedDocument\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencingValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAppliedValue\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTimeSeries\" name=\"IfcRegularTimeSeries\" nillable=\"true\" type=\"ifc:IfcRegularTimeSeries\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRegularTimeSeries\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TimeStep\" type=\"ifc:IfcTimeMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeriesValue\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTimeSeriesValue\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcReinforcementBarProperties\" nillable=\"true\" type=\"ifc:IfcReinforcementBarProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcReinforcementBarProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TotalCrossSectionArea\" type=\"ifc:IfcAreaMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SteelGrade\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BarSurface\" minOccurs=\"0\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EffectiveDepth\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"NominalBarDiameter\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BarCount\" minOccurs=\"0\" type=\"ifc:IfcCountMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcReinforcementDefinitionProperties\" nillable=\"true\" type=\"ifc:IfcReinforcementDefinitionProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcReinforcementDefinitionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DefinitionType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReinforcementSectionDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionReinforcementProperties\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSectionReinforcementProperties\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcReinforcingElement\" name=\"IfcReinforcingBar\" nillable=\"true\" type=\"ifc:IfcReinforcingBar\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcReinforcingBar\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BarLength\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BarRole\" type=\"ifc:IfcReinforcingBarRoleEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BarSurface\" minOccurs=\"0\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementComponent\" name=\"IfcReinforcingElement\" nillable=\"true\" type=\"ifc:IfcReinforcingElement\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcReinforcingElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementComponent\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SteelGrade\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcReinforcingElement\" name=\"IfcReinforcingMesh\" nillable=\"true\" type=\"ifc:IfcReinforcingMesh\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcReinforcingMesh\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MeshLength\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MeshWidth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelDecomposes\" name=\"IfcRelAggregates\" nillable=\"true\" type=\"ifc:IfcRelAggregates\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAggregates\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelationship\" name=\"IfcRelAssigns\" nillable=\"true\" type=\"ifc:IfcRelAssigns\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAssigns\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcObjectDefinition\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedObjectsType\" minOccurs=\"0\" type=\"ifc:IfcObjectTypeEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssignsToControl\" name=\"IfcRelAssignsTasks\" nillable=\"true\" type=\"ifc:IfcRelAssignsTasks\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAssignsTasks\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TimeForTask\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcScheduleTimeControl\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssigns\" name=\"IfcRelAssignsToActor\" nillable=\"true\" type=\"ifc:IfcRelAssignsToActor\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAssignsToActor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingActor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActor\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ActingRole\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssigns\" name=\"IfcRelAssignsToControl\" nillable=\"true\" type=\"ifc:IfcRelAssignsToControl\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAssignsToControl\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingControl\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcControl\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssigns\" name=\"IfcRelAssignsToGroup\" nillable=\"true\" type=\"ifc:IfcRelAssignsToGroup\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAssignsToGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingGroup\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGroup\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssigns\" name=\"IfcRelAssignsToProcess\" nillable=\"true\" type=\"ifc:IfcRelAssignsToProcess\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAssignsToProcess\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProcess\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"QuantityInProcess\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssigns\" name=\"IfcRelAssignsToProduct\" nillable=\"true\" type=\"ifc:IfcRelAssignsToProduct\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAssignsToProduct\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProduct\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssignsToControl\" name=\"IfcRelAssignsToProjectOrder\" nillable=\"true\" type=\"ifc:IfcRelAssignsToProjectOrder\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAssignsToProjectOrder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToControl\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssigns\" name=\"IfcRelAssignsToResource\" nillable=\"true\" type=\"ifc:IfcRelAssignsToResource\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAssignsToResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingResource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcResource\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelationship\" name=\"IfcRelAssociates\" nillable=\"true\" type=\"ifc:IfcRelAssociates\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAssociates\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRoot\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRoot\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesAppliedValue\" nillable=\"true\" type=\"ifc:IfcRelAssociatesAppliedValue\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAssociatesAppliedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingAppliedValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesApproval\" nillable=\"true\" type=\"ifc:IfcRelAssociatesApproval\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAssociatesApproval\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesClassification\" nillable=\"true\" type=\"ifc:IfcRelAssociatesClassification\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAssociatesClassification\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingClassification\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesConstraint\" nillable=\"true\" type=\"ifc:IfcRelAssociatesConstraint\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAssociatesConstraint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Intent\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesDocument\" nillable=\"true\" type=\"ifc:IfcRelAssociatesDocument\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAssociatesDocument\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesLibrary\" nillable=\"true\" type=\"ifc:IfcRelAssociatesLibrary\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAssociatesLibrary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingLibrary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLibrarySelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesMaterial\" nillable=\"true\" type=\"ifc:IfcRelAssociatesMaterial\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAssociatesMaterial\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMaterialSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssociates\" name=\"IfcRelAssociatesProfileProperties\" nillable=\"true\" type=\"ifc:IfcRelAssociatesProfileProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelAssociatesProfileProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProfileProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileProperties\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ProfileSectionLocation\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ProfileOrientation\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcOrientationSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelationship\" name=\"IfcRelConnects\" nillable=\"true\" type=\"ifc:IfcRelConnects\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelConnects\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelConnectsElements\" nillable=\"true\" type=\"ifc:IfcRelConnectsElements\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelConnectsElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ConnectionGeometry\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnectsElements\" name=\"IfcRelConnectsPathElements\" nillable=\"true\" type=\"ifc:IfcRelConnectsPathElements\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelConnectsPathElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPriorities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:long-wrapper\" maxOccurs=\"unbounded\" minOccurs=\"0\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:long-wrapper\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedPriorities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ex:long-wrapper\" maxOccurs=\"unbounded\" minOccurs=\"0\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:long-wrapper\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedConnectionType\" type=\"ifc:IfcConnectionTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingConnectionType\" type=\"ifc:IfcConnectionTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelConnectsPortToElement\" nillable=\"true\" type=\"ifc:IfcRelConnectsPortToElement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelConnectsPortToElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPort\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPort\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelConnectsPorts\" nillable=\"true\" type=\"ifc:IfcRelConnectsPorts\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelConnectsPorts\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPort\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPort\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedPort\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPort\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"RealizingElement\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelConnectsStructuralActivity\" nillable=\"true\" type=\"ifc:IfcRelConnectsStructuralActivity\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelConnectsStructuralActivity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralActivity\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralActivity\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelConnectsStructuralElement\" nillable=\"true\" type=\"ifc:IfcRelConnectsStructuralElement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelConnectsStructuralElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralMember\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralMember\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelConnectsStructuralMember\" nillable=\"true\" type=\"ifc:IfcRelConnectsStructuralMember\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelConnectsStructuralMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingStructuralMember\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralMember\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralConnection\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralConnection\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"AppliedCondition\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"AdditionalConditions\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SupportedLength\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ConditionCoordinateSystem\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnectsStructuralMember\" name=\"IfcRelConnectsWithEccentricity\" nillable=\"true\" type=\"ifc:IfcRelConnectsWithEccentricity\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelConnectsWithEccentricity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConnectionConstraint\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnectsElements\" name=\"IfcRelConnectsWithRealizingElements\" nillable=\"true\" type=\"ifc:IfcRelConnectsWithRealizingElements\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelConnectsWithRealizingElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RealizingElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcElement\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ConnectionType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelContainedInSpatialStructure\" nillable=\"true\" type=\"ifc:IfcRelContainedInSpatialStructure\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelContainedInSpatialStructure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProduct\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingStructure\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelCoversBldgElements\" nillable=\"true\" type=\"ifc:IfcRelCoversBldgElements\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelCoversBldgElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCovering\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelCoversSpaces\" nillable=\"true\" type=\"ifc:IfcRelCoversSpaces\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelCoversSpaces\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedSpace\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpace\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCovering\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelationship\" name=\"IfcRelDecomposes\" nillable=\"true\" type=\"ifc:IfcRelDecomposes\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelDecomposes\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingObject\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcObjectDefinition\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelationship\" name=\"IfcRelDefines\" nillable=\"true\" type=\"ifc:IfcRelDefines\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelDefines\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcObject\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelDefines\" name=\"IfcRelDefinesByProperties\" nillable=\"true\" type=\"ifc:IfcRelDefinesByProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelDefinesByProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPropertyDefinition\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelDefines\" name=\"IfcRelDefinesByType\" nillable=\"true\" type=\"ifc:IfcRelDefinesByType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelDefinesByType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingType\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTypeObject\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelFillsElement\" nillable=\"true\" type=\"ifc:IfcRelFillsElement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelFillsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingOpeningElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOpeningElement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelFlowControlElements\" nillable=\"true\" type=\"ifc:IfcRelFlowControlElements\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelFlowControlElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedControlElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionControlElement\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingFlowElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionFlowElement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelInteractionRequirements\" nillable=\"true\" type=\"ifc:IfcRelInteractionRequirements\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelInteractionRequirements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DailyInteraction\" minOccurs=\"0\" type=\"ifc:IfcCountMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ImportanceRating\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LocationOfInteraction\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedSpaceProgram\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpaceProgram\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingSpaceProgram\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpaceProgram\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelDecomposes\" name=\"IfcRelNests\" nillable=\"true\" type=\"ifc:IfcRelNests\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelNests\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssignsToActor\" name=\"IfcRelOccupiesSpaces\" nillable=\"true\" type=\"ifc:IfcRelOccupiesSpaces\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelOccupiesSpaces\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToActor\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelDefinesByProperties\" name=\"IfcRelOverridesProperties\" nillable=\"true\" type=\"ifc:IfcRelOverridesProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelOverridesProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefinesByProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OverridingProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProperty\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelProjectsElement\" nillable=\"true\" type=\"ifc:IfcRelProjectsElement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelProjectsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedFeatureElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFeatureElementAddition\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelReferencedInSpatialStructure\" nillable=\"true\" type=\"ifc:IfcRelReferencedInSpatialStructure\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelReferencedInSpatialStructure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProduct\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingStructure\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelAssignsToControl\" name=\"IfcRelSchedulesCostItems\" nillable=\"true\" type=\"ifc:IfcRelSchedulesCostItems\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelSchedulesCostItems\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToControl\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelSequence\" nillable=\"true\" type=\"ifc:IfcRelSequence\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelSequence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProcess\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedProcess\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProcess\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TimeLag\" type=\"ifc:IfcTimeMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SequenceType\" type=\"ifc:IfcSequenceEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelServicesBuildings\" nillable=\"true\" type=\"ifc:IfcRelServicesBuildings\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelServicesBuildings\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSystem\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSystem\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedBuildings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelSpaceBoundary\" nillable=\"true\" type=\"ifc:IfcRelSpaceBoundary\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelSpaceBoundary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSpace\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpace\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"RelatedBuildingElement\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ConnectionGeometry\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PhysicalOrVirtualBoundary\" type=\"ifc:IfcPhysicalOrVirtualEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"InternalOrExternalBoundary\" type=\"ifc:IfcInternalOrExternalEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRelConnects\" name=\"IfcRelVoidsElement\" nillable=\"true\" type=\"ifc:IfcRelVoidsElement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelVoidsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedOpeningElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRoot\" name=\"IfcRelationship\" nillable=\"true\" type=\"ifc:IfcRelationship\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelationship\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcRelaxation\" nillable=\"true\" type=\"ifc:IfcRelaxation\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRelaxation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelaxationValue\" type=\"ifc:IfcNormalisedRatioMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"InitialStress\" type=\"ifc:IfcNormalisedRatioMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcRepresentation\" nillable=\"true\" type=\"ifc:IfcRepresentation\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContextOfItems\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RepresentationIdentifier\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RepresentationType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Items\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentationItem\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcRepresentationContext\" nillable=\"true\" type=\"ifc:IfcRepresentationContext\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRepresentationContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContextIdentifier\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ContextType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcRepresentationItem\" nillable=\"true\" type=\"ifc:IfcRepresentationItem\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcRepresentationMap\" nillable=\"true\" type=\"ifc:IfcRepresentationMap\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRepresentationMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MappingOrigin\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MappedRepresentation\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcObject\" name=\"IfcResource\" nillable=\"true\" type=\"ifc:IfcResource\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSweptAreaSolid\" name=\"IfcRevolvedAreaSolid\" nillable=\"true\" type=\"ifc:IfcRevolvedAreaSolid\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRevolvedAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis1Placement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Angle\" type=\"ifc:IfcPlaneAngleMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProfileProperties\" name=\"IfcRibPlateProfileProperties\" nillable=\"true\" type=\"ifc:IfcRibPlateProfileProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRibPlateProfileProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Thickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RibHeight\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RibWidth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RibSpacing\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Direction\" type=\"ifc:IfcRibPlateDirectionEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcCsgPrimitive3D\" name=\"IfcRightCircularCone\" nillable=\"true\" type=\"ifc:IfcRightCircularCone\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRightCircularCone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BottomRadius\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcCsgPrimitive3D\" name=\"IfcRightCircularCylinder\" nillable=\"true\" type=\"ifc:IfcRightCircularCylinder\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRightCircularCylinder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcRoof\" nillable=\"true\" type=\"ifc:IfcRoof\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRoof\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeType\" type=\"ifc:IfcRoofTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcRoot\" nillable=\"true\" type=\"ifc:IfcRoot\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRoot\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"GlobalId\" type=\"ifc:IfcGloballyUniqueId\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"OwnerHistory\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOwnerHistory\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEdgeFeature\" name=\"IfcRoundedEdgeFeature\" nillable=\"true\" type=\"ifc:IfcRoundedEdgeFeature\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRoundedEdgeFeature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdgeFeature\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Radius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRectangleProfileDef\" name=\"IfcRoundedRectangleProfileDef\" nillable=\"true\" type=\"ifc:IfcRoundedRectangleProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcRoundedRectangleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RoundingRadius\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:complexType name=\"IfcSIUnit-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UnitType\" type=\"ifc:IfcUnitEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element substitutionGroup=\"ifc:IfcNamedUnit\" name=\"IfcSIUnit\" nillable=\"true\" type=\"ifc:IfcSIUnit\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSIUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSIUnit-temp\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Prefix\" minOccurs=\"0\" type=\"ifc:IfcSIPrefix\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcSIUnitName\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcSanitaryTerminalType\" nillable=\"true\" type=\"ifc:IfcSanitaryTerminalType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSanitaryTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcScheduleTimeControl\" nillable=\"true\" type=\"ifc:IfcScheduleTimeControl\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcScheduleTimeControl\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ActualStart\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EarlyStart\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LateStart\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ScheduleStart\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ActualFinish\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EarlyFinish\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LateFinish\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ScheduleFinish\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ScheduleDuration\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ActualDuration\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RemainingTime\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FreeFloat\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TotalFloat\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"IsCritical\" minOccurs=\"0\" type=\"xs:boolean\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"StatusTime\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"StartFloat\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FinishFloat\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Completion\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSectionProperties\" nillable=\"true\" type=\"ifc:IfcSectionProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSectionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SectionType\" type=\"ifc:IfcSectionTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"StartProfile\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"EndProfile\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSectionReinforcementProperties\" nillable=\"true\" type=\"ifc:IfcSectionReinforcementProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSectionReinforcementProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LongitudinalStartPosition\" type=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LongitudinalEndPosition\" type=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TransversePosition\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReinforcementRole\" type=\"ifc:IfcReinforcingBarRoleEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SectionDefinition\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionProperties\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CrossSectionReinforcementDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReinforcementBarProperties\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcReinforcementBarProperties\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcSectionedSpine\" nillable=\"true\" type=\"ifc:IfcSectionedSpine\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSectionedSpine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SpineCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCompositeCurve\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CrossSections\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" maxOccurs=\"unbounded\" minOccurs=\"2\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcProfileDef\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CrossSectionPositions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\" maxOccurs=\"unbounded\" minOccurs=\"2\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcAxis2Placement3D\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDistributionControlElementType\" name=\"IfcSensorType\" nillable=\"true\" type=\"ifc:IfcSensorType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSensorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcServiceLife\" nillable=\"true\" type=\"ifc:IfcServiceLife\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcServiceLife\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ServiceLifeType\" type=\"ifc:IfcServiceLifeTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ServiceLifeDuration\" type=\"ifc:IfcTimeMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcServiceLifeFactor\" nillable=\"true\" type=\"ifc:IfcServiceLifeFactor\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcServiceLifeFactor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcServiceLifeFactorTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"UpperValue\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MostUsedValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LowerValue\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcShapeAspect\" nillable=\"true\" type=\"ifc:IfcShapeAspect\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcShapeAspect\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeRepresentations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeModel\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcShapeModel\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ProductDefinitional\" type=\"ex:logical\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PartOfProductDefinitionShape\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProductDefinitionShape\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentation\" name=\"IfcShapeModel\" nillable=\"true\" type=\"ifc:IfcShapeModel\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcShapeModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcShapeModel\" name=\"IfcShapeRepresentation\" nillable=\"true\" type=\"ifc:IfcShapeRepresentation\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcShapeRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcShellBasedSurfaceModel\" nillable=\"true\" type=\"ifc:IfcShellBasedSurfaceModel\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcShellBasedSurfaceModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SbsmBoundary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcShell\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcShell\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProperty\" name=\"IfcSimpleProperty\" nillable=\"true\" type=\"ifc:IfcSimpleProperty\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSimpleProperty\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProperty\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSpatialStructureElement\" name=\"IfcSite\" nillable=\"true\" type=\"ifc:IfcSite\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSite\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RefLatitude\" minOccurs=\"0\" type=\"ifc:IfcCompoundPlaneAngleMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RefLongitude\" minOccurs=\"0\" type=\"ifc:IfcCompoundPlaneAngleMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RefElevation\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LandTitleNumber\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SiteAddress\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPostalAddress\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcSlab\" nillable=\"true\" type=\"ifc:IfcSlab\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSlab\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" minOccurs=\"0\" type=\"ifc:IfcSlabTypeEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcSlabType\" nillable=\"true\" type=\"ifc:IfcSlabType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSlabType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" name=\"IfcSlippageConnectionCondition\" nillable=\"true\" type=\"ifc:IfcSlippageConnectionCondition\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSlippageConnectionCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SlippageX\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SlippageY\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SlippageZ\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcSolidModel\" nillable=\"true\" type=\"ifc:IfcSolidModel\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSolidModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcSoundProperties\" nillable=\"true\" type=\"ifc:IfcSoundProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSoundProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IsAttenuating\" type=\"ifc:IfcBoolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SoundScale\" minOccurs=\"0\" type=\"ifc:IfcSoundScaleEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SoundValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSoundValue\" maxOccurs=\"8\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSoundValue\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcSoundValue\" nillable=\"true\" type=\"ifc:IfcSoundValue\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSoundValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SoundLevelTimeSeries\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Frequency\" type=\"ifc:IfcFrequencyMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SoundLevelSingleValue\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDerivedMeasureValue\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSpatialStructureElement\" name=\"IfcSpace\" nillable=\"true\" type=\"ifc:IfcSpace\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InteriorOrExteriorSpace\" type=\"ifc:IfcInternalOrExternalEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ElevationWithFlooring\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcSpaceHeaterType\" nillable=\"true\" type=\"ifc:IfcSpaceHeaterType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSpaceHeaterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcSpaceProgram\" nillable=\"true\" type=\"ifc:IfcSpaceProgram\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSpaceProgram\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SpaceProgramIdentifier\" type=\"ifc:IfcIdentifier\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MaxRequiredArea\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MinRequiredArea\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"RequestedLocation\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"StandardRequiredArea\" type=\"ifc:IfcAreaMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcSpaceThermalLoadProperties\" nillable=\"true\" type=\"ifc:IfcSpaceThermalLoadProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSpaceThermalLoadProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ApplicableValueRatio\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ThermalLoadSource\" type=\"ifc:IfcThermalLoadSourceEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PropertySource\" type=\"ifc:IfcPropertySourceEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SourceDescription\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MaximumValue\" type=\"ifc:IfcPowerMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MinimumValue\" minOccurs=\"0\" type=\"ifc:IfcPowerMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ThermalLoadTimeSeriesValues\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UserDefinedThermalLoadSource\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UserDefinedPropertySource\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ThermalLoadType\" type=\"ifc:IfcThermalLoadTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSpatialStructureElementType\" name=\"IfcSpaceType\" nillable=\"true\" type=\"ifc:IfcSpaceType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSpaceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSpaceTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcSpatialStructureElement\" nillable=\"true\" type=\"ifc:IfcSpatialStructureElement\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSpatialStructureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LongName\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CompositionType\" type=\"ifc:IfcElementCompositionEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElementType\" name=\"IfcSpatialStructureElementType\" nillable=\"true\" type=\"ifc:IfcSpatialStructureElementType\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSpatialStructureElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcCsgPrimitive3D\" name=\"IfcSphere\" nillable=\"true\" type=\"ifc:IfcSphere\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSphere\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcStackTerminalType\" nillable=\"true\" type=\"ifc:IfcStackTerminalType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStackTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcStair\" nillable=\"true\" type=\"ifc:IfcStair\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStair\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeType\" type=\"ifc:IfcStairTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcStairFlight\" nillable=\"true\" type=\"ifc:IfcStairFlight\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStairFlight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"NumberOfRiser\" minOccurs=\"0\" type=\"xs:long\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"NumberOfTreads\" minOccurs=\"0\" type=\"xs:long\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RiserHeight\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TreadLength\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcStairFlightType\" nillable=\"true\" type=\"ifc:IfcStairFlightType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStairFlightType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralActivity\" name=\"IfcStructuralAction\" nillable=\"true\" type=\"ifc:IfcStructuralAction\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralAction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DestabilizingLoad\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CausedBy\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralReaction\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcStructuralActivity\" nillable=\"true\" type=\"ifc:IfcStructuralActivity\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralActivity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedLoad\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoad\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"GlobalOrLocal\" type=\"ifc:IfcGlobalOrLocalEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSystem\" name=\"IfcStructuralAnalysisModel\" nillable=\"true\" type=\"ifc:IfcStructuralAnalysisModel\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralAnalysisModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcAnalysisModelTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"OrientationOf2DPlane\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LoadedBy\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralLoadGroup\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasResults\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralResultGroup\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralResultGroup\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralItem\" name=\"IfcStructuralConnection\" nillable=\"true\" type=\"ifc:IfcStructuralConnection\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralConnection\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"AppliedCondition\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcStructuralConnectionCondition\" nillable=\"true\" type=\"ifc:IfcStructuralConnectionCondition\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralConnectionCondition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralConnection\" name=\"IfcStructuralCurveConnection\" nillable=\"true\" type=\"ifc:IfcStructuralCurveConnection\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralCurveConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralMember\" name=\"IfcStructuralCurveMember\" nillable=\"true\" type=\"ifc:IfcStructuralCurveMember\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralCurveMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralCurveMember\" name=\"IfcStructuralCurveMemberVarying\" nillable=\"true\" type=\"ifc:IfcStructuralCurveMemberVarying\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralCurveMemberVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveMember\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProduct\" name=\"IfcStructuralItem\" nillable=\"true\" type=\"ifc:IfcStructuralItem\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralAction\" name=\"IfcStructuralLinearAction\" nillable=\"true\" type=\"ifc:IfcStructuralLinearAction\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralLinearAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLinearAction\" name=\"IfcStructuralLinearActionVarying\" nillable=\"true\" type=\"ifc:IfcStructuralLinearActionVarying\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralLinearActionVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLinearAction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VaryingAppliedLoadLocation\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SubsequentAppliedLoads\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoad\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralLoad\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcStructuralLoad\" nillable=\"true\" type=\"ifc:IfcStructuralLoad\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralLoad\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcStructuralLoadGroup\" nillable=\"true\" type=\"ifc:IfcStructuralLoadGroup\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralLoadGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcLoadGroupTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ActionType\" type=\"ifc:IfcActionTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ActionSource\" type=\"ifc:IfcActionSourceTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Coefficient\" minOccurs=\"0\" type=\"ifc:IfcRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Purpose\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadStatic\" name=\"IfcStructuralLoadLinearForce\" nillable=\"true\" type=\"ifc:IfcStructuralLoadLinearForce\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralLoadLinearForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LinearForceX\" minOccurs=\"0\" type=\"ifc:IfcLinearForceMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LinearForceY\" minOccurs=\"0\" type=\"ifc:IfcLinearForceMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LinearForceZ\" minOccurs=\"0\" type=\"ifc:IfcLinearForceMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LinearMomentX\" minOccurs=\"0\" type=\"ifc:IfcLinearMomentMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LinearMomentY\" minOccurs=\"0\" type=\"ifc:IfcLinearMomentMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LinearMomentZ\" minOccurs=\"0\" type=\"ifc:IfcLinearMomentMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadStatic\" name=\"IfcStructuralLoadPlanarForce\" nillable=\"true\" type=\"ifc:IfcStructuralLoadPlanarForce\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralLoadPlanarForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlanarForceX\" minOccurs=\"0\" type=\"ifc:IfcPlanarForceMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PlanarForceY\" minOccurs=\"0\" type=\"ifc:IfcPlanarForceMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PlanarForceZ\" minOccurs=\"0\" type=\"ifc:IfcPlanarForceMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadStatic\" name=\"IfcStructuralLoadSingleDisplacement\" nillable=\"true\" type=\"ifc:IfcStructuralLoadSingleDisplacement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DisplacementX\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DisplacementY\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DisplacementZ\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalDisplacementRX\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalDisplacementRY\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalDisplacementRZ\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadSingleDisplacement\" name=\"IfcStructuralLoadSingleDisplacementDistortion\" nillable=\"true\" type=\"ifc:IfcStructuralLoadSingleDisplacementDistortion\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacementDistortion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleDisplacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Distortion\" minOccurs=\"0\" type=\"ifc:IfcCurvatureMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadStatic\" name=\"IfcStructuralLoadSingleForce\" nillable=\"true\" type=\"ifc:IfcStructuralLoadSingleForce\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralLoadSingleForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForceX\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ForceY\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ForceZ\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MomentX\" minOccurs=\"0\" type=\"ifc:IfcTorqueMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MomentY\" minOccurs=\"0\" type=\"ifc:IfcTorqueMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MomentZ\" minOccurs=\"0\" type=\"ifc:IfcTorqueMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadSingleForce\" name=\"IfcStructuralLoadSingleForceWarping\" nillable=\"true\" type=\"ifc:IfcStructuralLoadSingleForceWarping\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralLoadSingleForceWarping\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleForce\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WarpingMoment\" minOccurs=\"0\" type=\"ifc:IfcWarpingMomentMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoad\" name=\"IfcStructuralLoadStatic\" nillable=\"true\" type=\"ifc:IfcStructuralLoadStatic\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralLoadStatic\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralLoadStatic\" name=\"IfcStructuralLoadTemperature\" nillable=\"true\" type=\"ifc:IfcStructuralLoadTemperature\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralLoadTemperature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DeltaT_Constant\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DeltaT_Y\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DeltaT_Z\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralItem\" name=\"IfcStructuralMember\" nillable=\"true\" type=\"ifc:IfcStructuralMember\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralMember\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralAction\" name=\"IfcStructuralPlanarAction\" nillable=\"true\" type=\"ifc:IfcStructuralPlanarAction\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralPlanarAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralPlanarAction\" name=\"IfcStructuralPlanarActionVarying\" nillable=\"true\" type=\"ifc:IfcStructuralPlanarActionVarying\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralPlanarActionVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralPlanarAction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VaryingAppliedLoadLocation\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SubsequentAppliedLoads\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoad\" maxOccurs=\"unbounded\" minOccurs=\"2\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcStructuralLoad\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralAction\" name=\"IfcStructuralPointAction\" nillable=\"true\" type=\"ifc:IfcStructuralPointAction\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralPointAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralConnection\" name=\"IfcStructuralPointConnection\" nillable=\"true\" type=\"ifc:IfcStructuralPointConnection\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralPointConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralReaction\" name=\"IfcStructuralPointReaction\" nillable=\"true\" type=\"ifc:IfcStructuralPointReaction\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralPointReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeneralProfileProperties\" name=\"IfcStructuralProfileProperties\" nillable=\"true\" type=\"ifc:IfcStructuralProfileProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralProfileProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeneralProfileProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TorsionalConstantX\" minOccurs=\"0\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MomentOfInertiaYZ\" minOccurs=\"0\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MomentOfInertiaY\" minOccurs=\"0\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MomentOfInertiaZ\" minOccurs=\"0\" type=\"ifc:IfcMomentOfInertiaMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WarpingConstant\" minOccurs=\"0\" type=\"ifc:IfcWarpingConstantMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ShearCentreZ\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ShearCentreY\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ShearDeformationAreaZ\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ShearDeformationAreaY\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MaximumSectionModulusY\" minOccurs=\"0\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MinimumSectionModulusY\" minOccurs=\"0\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MaximumSectionModulusZ\" minOccurs=\"0\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MinimumSectionModulusZ\" minOccurs=\"0\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TorsionalSectionModulus\" minOccurs=\"0\" type=\"ifc:IfcSectionModulusMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" minOccurs=\"0\" type=\"ifc:IfcLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralActivity\" name=\"IfcStructuralReaction\" nillable=\"true\" type=\"ifc:IfcStructuralReaction\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralReaction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcStructuralResultGroup\" nillable=\"true\" type=\"ifc:IfcStructuralResultGroup\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralResultGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TheoryType\" type=\"ifc:IfcAnalysisTheoryTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ResultForLoadGroup\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"IsLinear\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralProfileProperties\" name=\"IfcStructuralSteelProfileProperties\" nillable=\"true\" type=\"ifc:IfcStructuralSteelProfileProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralSteelProfileProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralProfileProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShearAreaZ\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ShearAreaY\" minOccurs=\"0\" type=\"ifc:IfcAreaMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PlasticShapeFactorY\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PlasticShapeFactorZ\" minOccurs=\"0\" type=\"ifc:IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralConnection\" name=\"IfcStructuralSurfaceConnection\" nillable=\"true\" type=\"ifc:IfcStructuralSurfaceConnection\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralSurfaceConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralMember\" name=\"IfcStructuralSurfaceMember\" nillable=\"true\" type=\"ifc:IfcStructuralSurfaceMember\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralSurfaceMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Thickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStructuralSurfaceMember\" name=\"IfcStructuralSurfaceMemberVarying\" nillable=\"true\" type=\"ifc:IfcStructuralSurfaceMemberVarying\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuralSurfaceMemberVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SubsequentThickness\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\" maxOccurs=\"unbounded\" minOccurs=\"2\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VaryingThicknessLocation\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDraughtingCallout\" name=\"IfcStructuredDimensionCallout\" nillable=\"true\" type=\"ifc:IfcStructuredDimensionCallout\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStructuredDimensionCallout\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDraughtingCallout\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentation\" name=\"IfcStyleModel\" nillable=\"true\" type=\"ifc:IfcStyleModel\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStyleModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentationItem\" name=\"IfcStyledItem\" nillable=\"true\" type=\"ifc:IfcStyledItem\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStyledItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Item\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPresentationStyleAssignment\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPresentationStyleAssignment\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Name\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcStyleModel\" name=\"IfcStyledRepresentation\" nillable=\"true\" type=\"ifc:IfcStyledRepresentation\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcStyledRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStyleModel\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcConstructionResource\" name=\"IfcSubContractResource\" nillable=\"true\" type=\"ifc:IfcSubContractResource\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSubContractResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SubContractor\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"JobDescription\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEdge\" name=\"IfcSubedge\" nillable=\"true\" type=\"ifc:IfcSubedge\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSubedge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentEdge\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcEdge\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcSurface\" nillable=\"true\" type=\"ifc:IfcSurface\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSweptAreaSolid\" name=\"IfcSurfaceCurveSweptAreaSolid\" nillable=\"true\" type=\"ifc:IfcSurfaceCurveSweptAreaSolid\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSurfaceCurveSweptAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"StartParam\" type=\"ifc:IfcParameterValue\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EndParam\" type=\"ifc:IfcParameterValue\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferenceSurface\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurface\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSweptSurface\" name=\"IfcSurfaceOfLinearExtrusion\" nillable=\"true\" type=\"ifc:IfcSurfaceOfLinearExtrusion\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSurfaceOfLinearExtrusion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSweptSurface\" name=\"IfcSurfaceOfRevolution\" nillable=\"true\" type=\"ifc:IfcSurfaceOfRevolution\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSurfaceOfRevolution\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisPosition\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis1Placement\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPresentationStyle\" name=\"IfcSurfaceStyle\" nillable=\"true\" type=\"ifc:IfcSurfaceStyle\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSurfaceStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Side\" type=\"ifc:IfcSurfaceSide\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\" maxOccurs=\"5\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSurfaceStyleElementSelect\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSurfaceStyleLighting\" nillable=\"true\" type=\"ifc:IfcSurfaceStyleLighting\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSurfaceStyleLighting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DiffuseReflectionColour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TransmissionColour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReflectanceColour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSurfaceStyleRefraction\" nillable=\"true\" type=\"ifc:IfcSurfaceStyleRefraction\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSurfaceStyleRefraction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RefractionIndex\" minOccurs=\"0\" type=\"ifc:IfcReal\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DispersionFactor\" minOccurs=\"0\" type=\"ifc:IfcReal\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSurfaceStyleShading\" name=\"IfcSurfaceStyleRendering\" nillable=\"true\" type=\"ifc:IfcSurfaceStyleRendering\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSurfaceStyleRendering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceStyleShading\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Transparency\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"DiffuseColour\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TransmissionColour\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"DiffuseTransmissionColour\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ReflectionColour\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SpecularColour\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"SpecularHighlight\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReflectanceMethod\" type=\"ifc:IfcReflectanceMethodEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSurfaceStyleShading\" nillable=\"true\" type=\"ifc:IfcSurfaceStyleShading\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSurfaceStyleShading\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SurfaceColour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSurfaceStyleWithTextures\" nillable=\"true\" type=\"ifc:IfcSurfaceStyleWithTextures\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSurfaceStyleWithTextures\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Textures\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcSurfaceTexture\" nillable=\"true\" type=\"ifc:IfcSurfaceTexture\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSurfaceTexture\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepeatS\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RepeatT\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TextureType\" type=\"ifc:IfcSurfaceTextureEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TextureTransform\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianTransformationOperator2D\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSolidModel\" name=\"IfcSweptAreaSolid\" nillable=\"true\" type=\"ifc:IfcSweptAreaSolid\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSweptAreaSolid\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SweptArea\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSolidModel\" name=\"IfcSweptDiskSolid\" nillable=\"true\" type=\"ifc:IfcSweptDiskSolid\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSweptDiskSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"InnerRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"StartParam\" type=\"ifc:IfcParameterValue\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EndParam\" type=\"ifc:IfcParameterValue\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcSurface\" name=\"IfcSweptSurface\" nillable=\"true\" type=\"ifc:IfcSweptSurface\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSweptSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SweptCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcSwitchingDeviceType\" nillable=\"true\" type=\"ifc:IfcSwitchingDeviceType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSwitchingDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPresentationStyle\" name=\"IfcSymbolStyle\" nillable=\"true\" type=\"ifc:IfcSymbolStyle\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSymbolStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StyleOfSymbol\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSymbolStyleSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcSystem\" nillable=\"true\" type=\"ifc:IfcSystem\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFurnishingElementType\" name=\"IfcSystemFurnitureElementType\" nillable=\"true\" type=\"ifc:IfcSystemFurnitureElementType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcSystemFurnitureElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcTShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcTShapeProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FlangeEdgeRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WebEdgeRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WebSlope\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FlangeSlope\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInY\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTable\" nillable=\"true\" type=\"ifc:IfcTable\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTable\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"xs:normalizedString\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Rows\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableRow\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTableRow\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTableRow\" nillable=\"true\" type=\"ifc:IfcTableRow\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTableRow\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RowCells\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"IsHeading\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" name=\"IfcTankType\" nillable=\"true\" type=\"ifc:IfcTankType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTankType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcProcess\" name=\"IfcTask\" nillable=\"true\" type=\"ifc:IfcTask\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTask\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TaskId\" type=\"ifc:IfcIdentifier\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Status\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WorkMethod\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"IsMilestone\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Priority\" minOccurs=\"0\" type=\"xs:long\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcAddress\" name=\"IfcTelecomAddress\" nillable=\"true\" type=\"ifc:IfcTelecomAddress\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTelecomAddress\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TelephoneNumbers\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FacsimileNumbers\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PagerNumber\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ElectronicMailAddresses\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLabel\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WWWHomePageURL\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcReinforcingElement\" name=\"IfcTendon\" nillable=\"true\" type=\"ifc:IfcTendon\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTendon\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TensionForce\" minOccurs=\"0\" type=\"ifc:IfcForceMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PreStress\" minOccurs=\"0\" type=\"ifc:IfcPressureMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FrictionCoefficient\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"AnchorageSlip\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MinCurvatureRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcReinforcingElement\" name=\"IfcTendonAnchor\" nillable=\"true\" type=\"ifc:IfcTendonAnchor\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTendonAnchor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcAnnotationSymbolOccurrence\" name=\"IfcTerminatorSymbol\" nillable=\"true\" type=\"ifc:IfcTerminatorSymbol\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTerminatorSymbol\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAnnotationSymbolOccurrence\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AnnotatedCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAnnotationCurveOccurrence\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcTextLiteral\" nillable=\"true\" type=\"ifc:IfcTextLiteral\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTextLiteral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Literal\" type=\"ifc:IfcPresentableText\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Placement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Path\" type=\"ifc:IfcTextPath\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTextLiteral\" name=\"IfcTextLiteralWithExtent\" nillable=\"true\" type=\"ifc:IfcTextLiteralWithExtent\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTextLiteralWithExtent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextLiteral\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Extent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPlanarExtent\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BoxAlignment\" type=\"ifc:IfcBoxAlignment\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPresentationStyle\" name=\"IfcTextStyle\" nillable=\"true\" type=\"ifc:IfcTextStyle\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTextStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TextCharacterAppearance\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCharacterStyleSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TextStyle\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTextStyleSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TextFontStyle\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTextFontSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPreDefinedTextFont\" name=\"IfcTextStyleFontModel\" nillable=\"true\" type=\"ifc:IfcTextStyleFontModel\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTextStyleFontModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedTextFont\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FontFamily\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextFontName\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTextFontName\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FontStyle\" minOccurs=\"0\" type=\"ifc:IfcFontStyle\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FontVariant\" minOccurs=\"0\" type=\"ifc:IfcFontVariant\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FontWeight\" minOccurs=\"0\" type=\"ifc:IfcFontWeight\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FontSize\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTextStyleForDefinedFont\" nillable=\"true\" type=\"ifc:IfcTextStyleForDefinedFont\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTextStyleForDefinedFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Colour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"BackgroundColour\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTextStyleTextModel\" nillable=\"true\" type=\"ifc:IfcTextStyleTextModel\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTextStyleTextModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"TextIndent\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TextAlign\" minOccurs=\"0\" type=\"ifc:IfcTextAlignment\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TextDecoration\" minOccurs=\"0\" type=\"ifc:IfcTextDecoration\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LetterSpacing\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"WordSpacing\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TextTransform\" minOccurs=\"0\" type=\"ifc:IfcTextTransformation\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"LineHeight\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTextStyleWithBoxCharacteristics\" nillable=\"true\" type=\"ifc:IfcTextStyleWithBoxCharacteristics\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTextStyleWithBoxCharacteristics\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BoxHeight\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BoxWidth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BoxSlantAngle\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BoxRotateAngle\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"CharacterSpacing\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTextureCoordinate\" nillable=\"true\" type=\"ifc:IfcTextureCoordinate\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTextureCoordinate\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTextureCoordinate\" name=\"IfcTextureCoordinateGenerator\" nillable=\"true\" type=\"ifc:IfcTextureCoordinateGenerator\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTextureCoordinateGenerator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Mode\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Parameter\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSimpleValue\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcSimpleValue\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTextureCoordinate\" name=\"IfcTextureMap\" nillable=\"true\" type=\"ifc:IfcTextureMap\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextureMaps\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertexBasedTextureMap\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcVertexBasedTextureMap\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTextureVertex\" nillable=\"true\" type=\"ifc:IfcTextureVertex\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTextureVertex\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Coordinates\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcParameterValue\" maxOccurs=\"2\" minOccurs=\"2\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcParameterValue\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcThermalMaterialProperties\" nillable=\"true\" type=\"ifc:IfcThermalMaterialProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcThermalMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SpecificHeatCapacity\" minOccurs=\"0\" type=\"ifc:IfcSpecificHeatCapacityMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BoilingPoint\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FreezingPoint\" minOccurs=\"0\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ThermalConductivity\" minOccurs=\"0\" type=\"ifc:IfcThermalConductivityMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTimeSeries\" nillable=\"true\" type=\"ifc:IfcTimeSeries\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTimeSeries\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Name\" type=\"ifc:IfcLabel\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Description\" minOccurs=\"0\" type=\"ifc:IfcText\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"StartTime\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EndTime\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TimeSeriesDataType\" type=\"ifc:IfcTimeSeriesDataTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UserDefinedDataOrigin\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"Unit\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTimeSeriesReferenceRelationship\" nillable=\"true\" type=\"ifc:IfcTimeSeriesReferenceRelationship\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTimeSeriesReferenceRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedTimeSeries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TimeSeriesReferences\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDocumentSelect\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcTimeSeriesSchedule\" nillable=\"true\" type=\"ifc:IfcTimeSeriesSchedule\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTimeSeriesSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ApplicableDates\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TimeSeriesScheduleType\" type=\"ifc:IfcTimeSeriesScheduleTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TimeSeries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcTimeSeriesValue\" nillable=\"true\" type=\"ifc:IfcTimeSeriesValue\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTimeSeriesValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcValue\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcRepresentationItem\" name=\"IfcTopologicalRepresentationItem\" nillable=\"true\" type=\"ifc:IfcTopologicalRepresentationItem\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTopologicalRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcShapeModel\" name=\"IfcTopologyRepresentation\" nillable=\"true\" type=\"ifc:IfcTopologyRepresentation\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTopologyRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcTransformerType\" nillable=\"true\" type=\"ifc:IfcTransformerType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTransformerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcTransportElement\" nillable=\"true\" type=\"ifc:IfcTransportElement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTransportElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OperationType\" minOccurs=\"0\" type=\"ifc:IfcTransportElementTypeEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CapacityByWeight\" minOccurs=\"0\" type=\"ifc:IfcMassMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CapacityByNumber\" minOccurs=\"0\" type=\"ifc:IfcCountMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElementType\" name=\"IfcTransportElementType\" nillable=\"true\" type=\"ifc:IfcTransportElementType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTransportElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcTrapeziumProfileDef\" nillable=\"true\" type=\"ifc:IfcTrapeziumProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTrapeziumProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BottomXDim\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TopXDim\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TopXOffset\" type=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBoundedCurve\" name=\"IfcTrimmedCurve\" nillable=\"true\" type=\"ifc:IfcTrimmedCurve\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTrimmedCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Trim1\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTrimmingSelect\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Trim2\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTrimmingSelect\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SenseAgreement\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MasterRepresentation\" type=\"ifc:IfcTrimmingPreference\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcTubeBundleType\" nillable=\"true\" type=\"ifc:IfcTubeBundleType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTubeBundleType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcOneDirectionRepeatFactor\" name=\"IfcTwoDirectionRepeatFactor\" nillable=\"true\" type=\"ifc:IfcTwoDirectionRepeatFactor\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTwoDirectionRepeatFactor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOneDirectionRepeatFactor\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SecondRepeatFactor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcObjectDefinition\" name=\"IfcTypeObject\" nillable=\"true\" type=\"ifc:IfcTypeObject\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTypeObject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ApplicableOccurrence\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasPropertySets\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTypeObject\" name=\"IfcTypeProduct\" nillable=\"true\" type=\"ifc:IfcTypeProduct\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcTypeProduct\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepresentationMaps\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcRepresentationMap\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Tag\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcUShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcUShapeProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcUShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EdgeRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FlangeSlope\" minOccurs=\"0\" type=\"ifc:IfcPlaneAngleMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CentreOfGravityInX\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcUnitAssignment\" nillable=\"true\" type=\"ifc:IfcUnitAssignment\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcUnitAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Units\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcUnit\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" name=\"IfcUnitaryEquipmentType\" nillable=\"true\" type=\"ifc:IfcUnitaryEquipmentType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcUnitaryEquipmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowControllerType\" name=\"IfcValveType\" nillable=\"true\" type=\"ifc:IfcValveType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcValveType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" name=\"IfcVector\" nillable=\"true\" type=\"ifc:IfcVector\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcVector\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDirection\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Magnitude\" type=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" name=\"IfcVertex\" nillable=\"true\" type=\"ifc:IfcVertex\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcVertex\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcVertexBasedTextureMap\" nillable=\"true\" type=\"ifc:IfcVertexBasedTextureMap\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcVertexBasedTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextureVertices\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextureVertex\" maxOccurs=\"unbounded\" minOccurs=\"3\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcTextureVertex\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TexturePoints\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" maxOccurs=\"unbounded\" minOccurs=\"3\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcCartesianPoint\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcLoop\" name=\"IfcVertexLoop\" nillable=\"true\" type=\"ifc:IfcVertexLoop\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcVertexLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LoopVertex\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVertex\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcVertex\" name=\"IfcVertexPoint\" nillable=\"true\" type=\"ifc:IfcVertexPoint\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcVertexPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcVertex\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VertexGeometry\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPoint\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcDiscreteAccessoryType\" name=\"IfcVibrationIsolatorType\" nillable=\"true\" type=\"ifc:IfcVibrationIsolatorType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcVibrationIsolatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDiscreteAccessoryType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcElement\" name=\"IfcVirtualElement\" nillable=\"true\" type=\"ifc:IfcVirtualElement\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcVirtualElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ex:Entity\" name=\"IfcVirtualGridIntersection\" nillable=\"true\" type=\"ifc:IfcVirtualGridIntersection\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcVirtualGridIntersection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ex:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IntersectingAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"2\" minOccurs=\"2\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcGridAxis\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list-unique\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"OffsetDistances\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\" maxOccurs=\"3\" minOccurs=\"2\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcWall\" nillable=\"true\" type=\"ifc:IfcWall\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcWall\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcWall\" name=\"IfcWallStandardCase\" nillable=\"true\" type=\"ifc:IfcWallStandardCase\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcWallStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWall\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElementType\" name=\"IfcWallType\" nillable=\"true\" type=\"ifc:IfcWallType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcWallType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcFlowTerminalType\" name=\"IfcWasteTerminalType\" nillable=\"true\" type=\"ifc:IfcWasteTerminalType\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcWasteTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcMaterialProperties\" name=\"IfcWaterProperties\" nillable=\"true\" type=\"ifc:IfcWaterProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcWaterProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IsPotable\" minOccurs=\"0\" type=\"xs:boolean\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Hardness\" minOccurs=\"0\" type=\"ifc:IfcIonConcentrationMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"AlkalinityConcentration\" minOccurs=\"0\" type=\"ifc:IfcIonConcentrationMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"AcidityConcentration\" minOccurs=\"0\" type=\"ifc:IfcIonConcentrationMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ImpuritiesContent\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PHLevel\" minOccurs=\"0\" type=\"ifc:IfcPHMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DissolvedSolidsContent\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcBuildingElement\" name=\"IfcWindow\" nillable=\"true\" type=\"ifc:IfcWindow\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcWindow\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OverallHeight\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"OverallWidth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcWindowLiningProperties\" nillable=\"true\" type=\"ifc:IfcWindowLiningProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcWindowLiningProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LiningDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LiningThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TransomThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MullionThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FirstTransomOffset\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondTransomOffset\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FirstMullionOffset\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondMullionOffset\" minOccurs=\"0\" type=\"ifc:IfcNormalisedRatioMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ShapeAspectStyle\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcPropertySetDefinition\" name=\"IfcWindowPanelProperties\" nillable=\"true\" type=\"ifc:IfcWindowPanelProperties\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcWindowPanelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcWindowPanelOperationEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FrameDepth\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FrameThickness\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"ShapeAspectStyle\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:choice>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:choice>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcTypeProduct\" name=\"IfcWindowStyle\" nillable=\"true\" type=\"ifc:IfcWindowStyle\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcWindowStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConstructionType\" type=\"ifc:IfcWindowStyleConstructionEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"OperationType\" type=\"ifc:IfcWindowStyleOperationEnum\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ParameterTakesPrecedence\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Sizeable\" type=\"xs:boolean\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcControl\" name=\"IfcWorkControl\" nillable=\"true\" type=\"ifc:IfcWorkControl\" abstract=\"true\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcWorkControl\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Identifier\" type=\"ifc:IfcIdentifier\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CreationDate\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Creators\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\">\n\t\t\t\t\t\t\t\t</xs:element>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ifc:IfcPerson\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ex:cType\" fixed=\"set\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t\t\t\t\t\t</xs:attribute>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Purpose\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Duration\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TotalFloat\" minOccurs=\"0\" type=\"ifc:IfcTimeMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"StartTime\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element minOccurs=\"0\" name=\"FinishTime\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t\t\t\t\t\t</xs:group>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WorkControlType\" minOccurs=\"0\" type=\"ifc:IfcWorkControlTypeEnum\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UserDefinedControlType\" minOccurs=\"0\" type=\"ifc:IfcLabel\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcWorkControl\" name=\"IfcWorkPlan\" nillable=\"true\" type=\"ifc:IfcWorkPlan\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcWorkPlan\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcWorkControl\" name=\"IfcWorkSchedule\" nillable=\"true\" type=\"ifc:IfcWorkSchedule\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcWorkSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcParameterizedProfileDef\" name=\"IfcZShapeProfileDef\" nillable=\"true\" type=\"ifc:IfcZShapeProfileDef\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcZShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FilletRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EdgeRadius\" minOccurs=\"0\" type=\"ifc:IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\t<xs:element substitutionGroup=\"ifc:IfcGroup\" name=\"IfcZone\" nillable=\"true\" type=\"ifc:IfcZone\">\n\t</xs:element>\n\t<xs:complexType name=\"IfcZone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\n\n\n<!-- group declarations (for SELECT data type definitions) -->\n\n\t<xs:complexType name=\"IfcActorSelect\">\n\t\t<xs:group ref=\"ifc:IfcActorSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcActorSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcAppliedValueSelect\">\n\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcAppliedValueSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcAxis2Placement\">\n\t\t<xs:group ref=\"ifc:IfcAxis2Placement\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcAxis2Placement\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcBooleanOperand\">\n\t\t<xs:group ref=\"ifc:IfcBooleanOperand\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcBooleanOperand\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcCharacterStyleSelect\">\n\t\t<xs:group ref=\"ifc:IfcCharacterStyleSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcCharacterStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcTextStyleForDefinedFont\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcClassificationNotationSelect\">\n\t\t<xs:group ref=\"ifc:IfcClassificationNotationSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcClassificationNotationSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClassificationNotation\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcColour\">\n\t\t<xs:group ref=\"ifc:IfcColour\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcColour\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcColourOrFactor\">\n\t\t<xs:group ref=\"ifc:IfcColourOrFactor\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcColourOrFactor\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourRgb\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcConditionCriterionSelect\">\n\t\t<xs:group ref=\"ifc:IfcConditionCriterionSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcConditionCriterionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLabel\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcCsgSelect\">\n\t\t<xs:group ref=\"ifc:IfcCsgSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcCsgSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcCurveFontOrScaledCurveFontSelect\">\n\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcCurveFontOrScaledCurveFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontAndScaling\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcCurveOrEdgeCurve\">\n\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcCurveOrEdgeCurve\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcEdgeCurve\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcCurveStyleFontSelect\">\n\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcCurveStyleFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcDateTimeSelect\">\n\t\t<xs:group ref=\"ifc:IfcDateTimeSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcDateTimeSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLocalTime\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcDefinedSymbolSelect\">\n\t\t<xs:group ref=\"ifc:IfcDefinedSymbolSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcDefinedSymbolSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedSymbol\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSymbol\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcDerivedMeasureValue\">\n\t\t<xs:group ref=\"ifc:IfcDerivedMeasureValue\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcDerivedMeasureValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcDocumentSelect\">\n\t\t<xs:group ref=\"ifc:IfcDocumentSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcDocumentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcDraughtingCalloutElement\">\n\t\t<xs:group ref=\"ifc:IfcDraughtingCalloutElement\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcDraughtingCalloutElement\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAnnotationCurveOccurrence\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcAnnotationTextOccurrence\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcAnnotationSymbolOccurrence\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcFillAreaStyleTileShapeSelect\">\n\t\t<xs:group ref=\"ifc:IfcFillAreaStyleTileShapeSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcFillAreaStyleTileShapeSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTileSymbolWithStyle\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcFillStyleSelect\">\n\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcFillStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleHatching\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTiles\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedHatchStyle\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcGeometricSetSelect\">\n\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcGeometricSetSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPoint\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcCurve\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSurface\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcHatchLineDistanceSelect\">\n\t\t<xs:group ref=\"ifc:IfcHatchLineDistanceSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcHatchLineDistanceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcOneDirectionRepeatFactor\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcLayeredItem\">\n\t\t<xs:group ref=\"ifc:IfcLayeredItem\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcLayeredItem\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentation\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcLibrarySelect\">\n\t\t<xs:group ref=\"ifc:IfcLibrarySelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcLibrarySelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcLightDistributionDataSourceSelect\">\n\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcLightDistributionDataSourceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLightIntensityDistribution\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcMaterialSelect\">\n\t\t<xs:group ref=\"ifc:IfcMaterialSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcMaterialSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayerSetUsage\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayerSet\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcMeasureValue\">\n\t\t<xs:group ref=\"ifc:IfcMeasureValue\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcMeasureValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcMetricValueSelect\">\n\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcMetricValueSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLocalTime\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcTable\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcText\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcCostValue\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcObjectReferenceSelect\">\n\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcObjectReferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcMaterial\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcDateAndTime\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcCalendarDate\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLocalTime\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcAddress\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcOrientationSelect\">\n\t\t<xs:group ref=\"ifc:IfcOrientationSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcOrientationSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcDirection\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcPointOrVertexPoint\">\n\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcPointOrVertexPoint\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPoint\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcVertexPoint\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcPresentationStyleSelect\">\n\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcPresentationStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcNullStyle\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyle\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSymbolStyle\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyle\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcTextStyle\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyle\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcShell\">\n\t\t<xs:group ref=\"ifc:IfcShell\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcShell\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcOpenShell\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcSimpleValue\">\n\t\t<xs:group ref=\"ifc:IfcSimpleValue\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcSimpleValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcInteger\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcReal\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcText\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLabel\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLogical\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcSizeSelect\">\n\t\t<xs:group ref=\"ifc:IfcSizeSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcSizeSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcSpecularHighlightSelect\">\n\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcSpecularHighlightSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcSpecularExponent\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSpecularRoughness\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcStructuralActivityAssignmentSelect\">\n\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcStructuralActivityAssignmentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcStructuralItem\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcElement\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcSurfaceOrFaceSurface\">\n\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcSurfaceOrFaceSurface\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcSurface\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcFaceSurface\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcFaceBasedSurfaceModel\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcSurfaceStyleElementSelect\">\n\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcSurfaceStyleElementSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleShading\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleLighting\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleWithTextures\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSurfaceStyle\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleRefraction\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcSymbolStyleSelect\">\n\t\t<xs:group ref=\"ifc:IfcSymbolStyleSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcSymbolStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcTextFontSelect\">\n\t\t<xs:group ref=\"ifc:IfcTextFontSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcTextFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedTextFont\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedTextFont\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcTextStyleSelect\">\n\t\t<xs:group ref=\"ifc:IfcTextStyleSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcTextStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcTextStyleWithBoxCharacteristics\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcTextStyleTextModel\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcTrimmingSelect\">\n\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcTrimmingSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcUnit\">\n\t\t<xs:group ref=\"ifc:IfcUnit\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcUnit\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDerivedUnit\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcValue\">\n\t\t<xs:group ref=\"ifc:IfcValue\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcInteger\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcReal\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcText\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLabel\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLogical\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\t<xs:complexType name=\"IfcVectorOrDirection\">\n\t\t<xs:group ref=\"ifc:IfcVectorOrDirection\">\n\t\t</xs:group>\n\t</xs:complexType>\n\t<xs:group name=\"IfcVectorOrDirection\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDirection\">\n\t\t\t</xs:element>\n\t\t\t<xs:element ref=\"ifc:IfcVector\">\n\t\t\t</xs:element>\n\t\t</xs:choice>\n\t</xs:group>\n\n\n\n<!-- enumeration type declarations (for ENUMERATION data type definitions) -->\n\n\t<xs:element name=\"IfcActionSourceTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcActionSourceTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcActionSourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dead_load_g\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"completion_g1\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"live_load_q\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"snow_s\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"wind_w\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"prestressing_p\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"settlement_u\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"temperature_t\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"earthquake_e\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"fire\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"impulse\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"impact\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"transport\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"erection\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"propping\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"system_imperfection\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"shrinkage\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"creep\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"lack_of_fit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"buoyancy\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"ice\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"current\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"wave\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"rain\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"brakes\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcActionTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcActionTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcActionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"permanent_g\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"variable_q\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"extraordinary_a\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcActuatorTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcActuatorTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcActuatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electricactuator\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"handoperatedactuator\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"hydraulicactuator\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pneumaticactuator\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"thermostaticactuator\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcAddressTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAddressTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcAddressTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"office\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"site\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"home\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"distributionpoint\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcAheadOrBehind\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAheadOrBehind\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcAheadOrBehind\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ahead\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"behind\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcAirTerminalBoxTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAirTerminalBoxTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcAirTerminalBoxTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"constantflow\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"variableflowpressuredependant\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"variableflowpressureindependant\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcAirTerminalTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAirTerminalTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcAirTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"grille\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"register\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"diffuser\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"eyeball\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"iris\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"lineargrille\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"lineardiffuser\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcAirToAirHeatRecoveryTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcAirToAirHeatRecoveryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fixedplatecounterflowexchanger\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"fixedplatecrossflowexchanger\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"fixedplateparallelflowexchanger\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"rotarywheel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"runaroundcoilloop\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"heatpipe\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"twintowerenthalpyrecoveryloops\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"thermosiphonsealedtubeheatexchangers\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"thermosiphoncoiltypeheatexchangers\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcAlarmTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAlarmTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcAlarmTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bell\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"breakglassbutton\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"light\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"manualpullbox\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"siren\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"whistle\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcAnalysisModelTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAnalysisModelTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcAnalysisModelTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"in_plane_loading_2d\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"out_plane_loading_2d\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"loading_3d\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcAnalysisTheoryTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAnalysisTheoryTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcAnalysisTheoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"first_order_theory\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"second_order_theory\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"third_order_theory\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"full_nonlinear_theory\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcArithmeticOperatorEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcArithmeticOperatorEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcArithmeticOperatorEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"add\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"divide\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"multiply\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"subtract\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcAssemblyPlaceEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAssemblyPlaceEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcAssemblyPlaceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"site\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"factory\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcBSplineCurveForm\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBSplineCurveForm\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcBSplineCurveForm\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"polyline_form\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"circular_arc\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"elliptic_arc\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"parabolic_arc\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"hyperbolic_arc\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"unspecified\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcBeamTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBeamTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcBeamTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beam\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"joist\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"lintel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"t_beam\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcBenchmarkEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBenchmarkEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcBenchmarkEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"greaterthan\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"greaterthanorequalto\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"lessthan\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"lessthanorequalto\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"equalto\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notequalto\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcBoilerTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBoilerTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcBoilerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"water\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"steam\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcBooleanOperator\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBooleanOperator\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcBooleanOperator\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"union\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"intersection\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"difference\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcBuildingElementProxyTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBuildingElementProxyTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcBuildingElementProxyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcCableCarrierFittingTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCableCarrierFittingTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcCableCarrierFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"cross\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"reducer\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"tee\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcCableCarrierSegmentTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCableCarrierSegmentTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcCableCarrierSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cableladdersegment\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"cabletraysegment\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"cabletrunkingsegment\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"conduitsegment\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcCableSegmentTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCableSegmentTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcCableSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cablesegment\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"conductorsegment\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcChangeActionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcChangeActionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcChangeActionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"nochange\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"modified\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"added\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"deleted\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"modifiedadded\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"modifieddeleted\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcChillerTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcChillerTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcChillerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aircooled\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"watercooled\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"heatrecovery\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcCoilTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCoilTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcCoilTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dxcoolingcoil\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"watercoolingcoil\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"steamheatingcoil\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"waterheatingcoil\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"electricheatingcoil\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gasheatingcoil\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcColumnTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcColumnTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcColumnTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"column\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcCompressorTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCompressorTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcCompressorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dynamic\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"reciprocating\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"rotary\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"scroll\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"trochoidal\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"singlestage\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"booster\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"opentype\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"hermetic\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"semihermetic\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"weldedshellhermetic\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"rollingpiston\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"rotaryvane\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"singlescrew\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"twinscrew\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcCondenserTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCondenserTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcCondenserTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"watercooledshelltube\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"watercooledshellcoil\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"watercooledtubeintube\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"watercooledbrazedplate\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"aircooled\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"evaporativecooled\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcConnectionTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcConnectionTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcConnectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"atpath\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"atstart\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"atend\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcConstraintEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcConstraintEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcConstraintEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"hard\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"soft\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"advisory\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcControllerTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcControllerTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcControllerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floating\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"proportional\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"proportionalintegral\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"proportionalintegralderivative\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"timedtwoposition\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"twoposition\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcCooledBeamTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCooledBeamTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcCooledBeamTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"active\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"passive\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcCoolingTowerTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCoolingTowerTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcCoolingTowerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"naturaldraft\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"mechanicalinduceddraft\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"mechanicalforceddraft\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcCostScheduleTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCostScheduleTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcCostScheduleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"budget\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"costplan\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"estimate\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"tender\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pricedbillofquantities\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"unpricedbillofquantities\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"scheduleofrates\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcCoveringTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCoveringTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcCoveringTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ceiling\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"flooring\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"cladding\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"roofing\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"insulation\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"membrane\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sleeving\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"wrapping\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcCurrencyEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCurrencyEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcCurrencyEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aed\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"aes\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"ats\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"aud\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"bbd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"beg\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"bgl\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"bhd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"bmd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"bnd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"brl\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"bsd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"bwp\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"bzd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"cad\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"cbd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"chf\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"clp\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"cny\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"cys\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"czk\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"ddp\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"dem\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"dkk\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"egl\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"est\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"eur\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"fak\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"fim\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"fjd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"fkp\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"frf\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gbp\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gip\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gmd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"grx\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"hkd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"huf\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"ick\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"idr\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"ils\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"inr\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"irp\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"itl\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"jmd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"jod\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"jpy\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"kes\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"krw\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"kwd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"kyd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"lkr\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"luf\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"mtl\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"mur\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"mxn\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"myr\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"nlg\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"nzd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"omr\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pgk\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"php\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pkr\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pln\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"ptn\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"qar\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"rur\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sar\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"scr\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sek\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sgd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"skp\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"thb\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"trl\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"ttd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"twd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"usd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"veb\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"vnd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"xeu\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"zar\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"zwd\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"nok\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcCurtainWallTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCurtainWallTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcCurtainWallTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDamperTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDamperTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDamperTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"controldamper\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"firedamper\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"smokedamper\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"firesmokedamper\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"backdraftdamper\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"reliefdamper\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"blastdamper\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gravitydamper\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gravityreliefdamper\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"balancingdamper\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"fumehoodexhaust\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDataOriginEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDataOriginEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDataOriginEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"measured\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"predicted\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"simulated\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDerivedUnitEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDerivedUnitEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDerivedUnitEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"angularvelocityunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"compoundplaneangleunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"dynamicviscosityunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"heatfluxdensityunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"integercountrateunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"isothermalmoisturecapacityunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"kinematicviscosityunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"linearvelocityunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"massdensityunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"massflowrateunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"moisturediffusivityunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"molecularweightunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"specificheatcapacityunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"thermaladmittanceunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"thermalconductanceunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"thermalresistanceunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"thermaltransmittanceunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"vaporpermeabilityunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"volumetricflowrateunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"rotationalfrequencyunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"torqueunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"momentofinertiaunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"linearmomentunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"linearforceunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"planarforceunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"modulusofelasticityunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"shearmodulusunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"linearstiffnessunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"rotationalstiffnessunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"modulusofsubgradereactionunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"accelerationunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"curvatureunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"heatingvalueunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"ionconcentrationunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"luminousintensitydistributionunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"massperlengthunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"modulusoflinearsubgradereactionunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"modulusofrotationalsubgradereactionunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"phunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"rotationalmassunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sectionareaintegralunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sectionmodulusunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"soundpowerunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"soundpressureunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"temperaturegradientunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"thermalexpansioncoefficientunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"warpingconstantunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"warpingmomentunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDimensionExtentUsage\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDimensionExtentUsage\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDimensionExtentUsage\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"origin\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"target\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDirectionSenseEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDirectionSenseEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDirectionSenseEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"positive\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"negative\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDistributionChamberElementTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDistributionChamberElementTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDistributionChamberElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"formedduct\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"inspectionchamber\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"inspectionpit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"manhole\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"meterchamber\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sump\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"trench\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"valvechamber\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDocumentConfidentialityEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDocumentConfidentialityEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDocumentConfidentialityEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"public\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"restricted\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"confidential\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"personal\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDocumentStatusEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDocumentStatusEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDocumentStatusEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"draft\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"finaldraft\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"final\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"revision\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDoorPanelOperationEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorPanelOperationEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDoorPanelOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"swinging\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"double_acting\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sliding\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"folding\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"revolving\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"rollingup\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDoorPanelPositionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorPanelPositionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDoorPanelPositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"middle\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"right\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDoorStyleConstructionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorStyleConstructionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDoorStyleConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aluminium\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"high_grade_steel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"steel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"wood\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"aluminium_wood\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"aluminium_plastic\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"plastic\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDoorStyleOperationEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDoorStyleOperationEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDoorStyleOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_swing_left\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"single_swing_right\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"double_door_single_swing\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_left\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_right\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"double_swing_left\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"double_swing_right\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"double_door_double_swing\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sliding_to_left\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sliding_to_right\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"double_door_sliding\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"folding_to_left\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"folding_to_right\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"double_door_folding\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"revolving\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"rollingup\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDuctFittingTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDuctFittingTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDuctFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"connector\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"entry\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"exit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"junction\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"obstruction\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"transition\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDuctSegmentTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDuctSegmentTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDuctSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rigidsegment\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"flexiblesegment\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDuctSilencerTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDuctSilencerTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDuctSilencerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flatoval\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"rectangular\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"round\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcElectricApplianceTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricApplianceTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcElectricApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"computer\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"directwaterheater\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"dishwasher\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"electriccooker\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"electricheater\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"facsimile\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"freestandingfan\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"freezer\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"fridge_freezer\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"handdryer\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"indirectwaterheater\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"microwave\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"photocopier\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"printer\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"refrigerator\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"radiantheater\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"scanner\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"telephone\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"tumbledryer\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"tv\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"vendingmachine\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"washingmachine\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"waterheater\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"watercooler\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcElectricCurrentEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcElectricCurrentEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"alternating\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"direct\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcElectricDistributionPointFunctionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricDistributionPointFunctionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcElectricDistributionPointFunctionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"alarmpanel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"consumerunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"controlpanel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"distributionboard\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gasdetectorpanel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"indicatorpanel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"mimicpanel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"motorcontrolcentre\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"switchboard\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcElectricFlowStorageDeviceTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcElectricFlowStorageDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"battery\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"capacitorbank\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"harmonicfilter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"inductorbank\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"ups\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcElectricGeneratorTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricGeneratorTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcElectricGeneratorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcElectricHeaterTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricHeaterTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcElectricHeaterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electricpointheater\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"electriccableheater\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"electricmatheater\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcElectricMotorTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricMotorTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcElectricMotorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dc\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"induction\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"polyphase\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"reluctancesynchronous\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"synchronous\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcElectricTimeControlTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricTimeControlTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcElectricTimeControlTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"timeclock\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"timedelay\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"relay\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcElementAssemblyTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElementAssemblyTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcElementAssemblyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"accessory_assembly\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"arch\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"beam_grid\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"braced_frame\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"girder\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"reinforcement_unit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"rigid_frame\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"slab_field\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"truss\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcElementCompositionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElementCompositionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcElementCompositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"complex\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"element\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"partial\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcEnergySequenceEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergySequenceEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcEnergySequenceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"primary\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"secondary\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"tertiary\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"auxiliary\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcEnvironmentalImpactCategoryEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcEnvironmentalImpactCategoryEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcEnvironmentalImpactCategoryEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"combinedvalue\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"disposal\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"extraction\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"installation\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"manufacture\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"transportation\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcEvaporativeCoolerTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcEvaporativeCoolerTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcEvaporativeCoolerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directevaporativerandommediaaircooler\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"directevaporativerigidmediaaircooler\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"directevaporativeslingerspackagedaircooler\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"directevaporativepackagedrotaryaircooler\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"directevaporativeairwasher\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"indirectevaporativepackageaircooler\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"indirectevaporativewetcoil\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"indirectevaporativecoolingtowerorcoilcooler\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"indirectdirectcombination\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcEvaporatorTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcEvaporatorTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcEvaporatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directexpansionshellandtube\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"directexpansiontubeintube\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"directexpansionbrazedplate\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"floodedshellandtube\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"shellandcoil\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcFanTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFanTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcFanTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"centrifugalforwardcurved\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"centrifugalradial\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"centrifugalbackwardinclinedcurved\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"centrifugalairfoil\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"tubeaxial\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"vaneaxial\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"propelloraxial\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcFilterTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFilterTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcFilterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airparticlefilter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"odorfilter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"oilfilter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"strainer\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"waterfilter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcFireSuppressionTerminalTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFireSuppressionTerminalTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcFireSuppressionTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"breechinginlet\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"firehydrant\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"hosereel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sprinkler\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sprinklerdeflector\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcFlowDirectionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFlowDirectionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcFlowDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"source\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sink\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sourceandsink\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcFlowInstrumentTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFlowInstrumentTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcFlowInstrumentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pressuregauge\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"thermometer\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"ammeter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"frequencymeter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"powerfactormeter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"phaseanglemeter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"voltmeter_peak\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"voltmeter_rms\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcFlowMeterTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFlowMeterTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcFlowMeterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electricmeter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"energymeter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"flowmeter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gasmeter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"oilmeter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"watermeter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcFootingTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFootingTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcFootingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"footing_beam\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pad_footing\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pile_cap\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"strip_footing\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcGasTerminalTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcGasTerminalTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcGasTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"gasappliance\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gasbooster\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gasburner\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcGeometricProjectionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcGeometricProjectionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcGeometricProjectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"graph_view\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sketch_view\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"model_view\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"plan_view\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"reflected_plan_view\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"section_view\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"elevation_view\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcGlobalOrLocalEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcGlobalOrLocalEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcGlobalOrLocalEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"global_coords\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"local_coords\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcHeatExchangerTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatExchangerTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcHeatExchangerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plate\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"shellandtube\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcHumidifierTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHumidifierTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcHumidifierTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"steaminjection\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"adiabaticairwasher\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"adiabaticpan\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"adiabaticwettedelement\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"adiabaticatomizing\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"adiabaticultrasonic\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"adiabaticrigidmedia\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"adiabaticcompressedairnozzle\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"assistedelectric\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"assistednaturalgas\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"assistedpropane\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"assistedbutane\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"assistedsteam\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcInternalOrExternalEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInternalOrExternalEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcInternalOrExternalEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"internal\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"external\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcInventoryTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInventoryTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcInventoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assetinventory\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"spaceinventory\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"furnitureinventory\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcJunctionBoxTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcJunctionBoxTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcJunctionBoxTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcLampTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLampTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcLampTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compactfluorescent\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"fluorescent\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"highpressuremercury\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"highpressuresodium\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"metalhalide\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"tungstenfilament\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcLayerSetDirectionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLayerSetDirectionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcLayerSetDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"axis1\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"axis2\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"axis3\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcLightDistributionCurveEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLightDistributionCurveEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcLightDistributionCurveEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"type_a\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"type_b\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"type_c\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcLightEmissionSourceEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLightEmissionSourceEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcLightEmissionSourceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compactfluorescent\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"fluorescent\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"highpressuremercury\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"highpressuresodium\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"lightemittingdiode\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"lowpressuresodium\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"lowvoltagehalogen\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"mainvoltagehalogen\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"metalhalide\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"tungstenfilament\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcLightFixtureTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLightFixtureTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcLightFixtureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pointsource\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"directionsource\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcLoadGroupTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLoadGroupTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcLoadGroupTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"load_group\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"load_case\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"load_combination_group\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"load_combination\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcLogicalOperatorEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLogicalOperatorEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcLogicalOperatorEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"logicaland\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"logicalor\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcMemberTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMemberTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"brace\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"chord\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"collar\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"member\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"mullion\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"plate\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"post\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"purlin\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"rafter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"stringer\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"strut\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"stud\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcMotorConnectionTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMotorConnectionTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcMotorConnectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beltdrive\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"coupling\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"directdrive\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcNullStyle\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNullStyle\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcNullStyle\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"null\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcObjectTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcObjectTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcObjectTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"product\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"process\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"control\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"resource\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"actor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"group\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"project\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcObjectiveEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcObjectiveEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcObjectiveEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"codecompliance\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"designintent\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"healthandsafety\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"requirement\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"specification\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"triggercondition\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcOccupantTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcOccupantTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcOccupantTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assignee\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"assignor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"lessee\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"lessor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"lettingagent\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"owner\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"tenant\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcOutletTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcOutletTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcOutletTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"audiovisualoutlet\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"communicationsoutlet\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"poweroutlet\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcPermeableCoveringOperationEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPermeableCoveringOperationEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcPermeableCoveringOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"grill\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"louver\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"screen\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcPhysicalOrVirtualEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPhysicalOrVirtualEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcPhysicalOrVirtualEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"physical\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"virtual\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcPileConstructionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPileConstructionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcPileConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cast_in_place\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"composite\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"precast_concrete\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"prefab_steel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcPileTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPileTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcPileTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cohesion\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"friction\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"support\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcPipeFittingTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPipeFittingTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcPipeFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"connector\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"entry\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"exit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"junction\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"obstruction\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"transition\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcPipeSegmentTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPipeSegmentTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcPipeSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flexiblesegment\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"rigidsegment\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gutter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"spool\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcPlateTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlateTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcPlateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curtain_panel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sheet\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcProcedureTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcProcedureTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcProcedureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"advice_caution\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"advice_note\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"advice_warning\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"calibration\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"diagnostic\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"shutdown\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"startup\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcProfileTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcProfileTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcProfileTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curve\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"area\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcProjectOrderRecordTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcProjectOrderRecordTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcProjectOrderRecordTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"change\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"maintenance\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"move\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"purchase\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"work\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcProjectOrderTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcProjectOrderTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcProjectOrderTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"changeorder\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"maintenanceworkorder\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"moveorder\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"purchaseorder\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"workorder\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcProjectedOrTrueLengthEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcProjectedOrTrueLengthEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcProjectedOrTrueLengthEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"projected_length\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"true_length\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcPropertySourceEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPropertySourceEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcPropertySourceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"design\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"designmaximum\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"designminimum\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"simulated\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"asbuilt\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"commissioning\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"measured\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notknown\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcProtectiveDeviceTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcProtectiveDeviceTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcProtectiveDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fusedisconnector\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"circuitbreaker\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"earthfailuredevice\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"residualcurrentcircuitbreaker\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"residualcurrentswitch\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"varistor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcPumpTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPumpTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcPumpTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"circulator\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"endsuction\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"splitcase\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"verticalinline\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"verticalturbine\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcRailingTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRailingTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcRailingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"handrail\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"guardrail\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"balustrade\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcRampFlightTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRampFlightTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcRampFlightTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"spiral\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcRampTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRampTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcRampTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight_run_ramp\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"two_straight_run_ramp\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"quarter_turn_ramp\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"two_quarter_turn_ramp\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"half_turn_ramp\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"spiral_ramp\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcReflectanceMethodEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcReflectanceMethodEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcReflectanceMethodEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blinn\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"flat\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"glass\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"matt\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"metal\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"mirror\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"phong\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"plastic\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"strauss\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcReinforcingBarRoleEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcReinforcingBarRoleEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcReinforcingBarRoleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"main\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"shear\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"ligature\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"stud\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"punching\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"edge\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"ring\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcReinforcingBarSurfaceEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcReinforcingBarSurfaceEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcReinforcingBarSurfaceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plain\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"textured\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcResourceConsumptionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcResourceConsumptionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcResourceConsumptionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"consumed\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"partiallyconsumed\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notconsumed\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"occupied\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"partiallyoccupied\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notoccupied\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcRibPlateDirectionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRibPlateDirectionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcRibPlateDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"direction_x\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"direction_y\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcRoleEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRoleEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcRoleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"supplier\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"manufacturer\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"contractor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"subcontractor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"architect\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"structuralengineer\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"costengineer\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"client\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"buildingowner\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"buildingoperator\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"mechanicalengineer\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"electricalengineer\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"projectmanager\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"facilitiesmanager\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"civilengineer\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"comissioningengineer\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"engineer\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"owner\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"consultant\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"constructionmanager\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"fieldconstructionmanager\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"reseller\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcRoofTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRoofTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcRoofTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flat_roof\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"shed_roof\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gable_roof\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"hip_roof\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"hipped_gable_roof\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gambrel_roof\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"mansard_roof\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"barrel_roof\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"rainbow_roof\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"butterfly_roof\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pavilion_roof\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"dome_roof\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"freeform\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSIPrefix\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSIPrefix\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSIPrefix\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"exa\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"peta\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"tera\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"giga\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"mega\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"kilo\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"hecto\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"deca\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"deci\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"centi\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"milli\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"micro\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"nano\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pico\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"femto\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"atto\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSIUnitName\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSIUnitName\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSIUnitName\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ampere\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"becquerel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"candela\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"coulomb\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"cubic_metre\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"degree_celsius\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"farad\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gram\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gray\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"henry\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"hertz\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"joule\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"kelvin\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"lumen\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"lux\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"metre\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"mole\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"newton\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"ohm\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pascal\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"radian\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"second\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"siemens\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sievert\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"square_metre\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"steradian\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"tesla\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"volt\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"watt\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"weber\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSanitaryTerminalTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSanitaryTerminalTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSanitaryTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bath\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"bidet\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"cistern\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"shower\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sink\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sanitaryfountain\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"toiletpan\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"urinal\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"washhandbasin\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"wcseat\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSectionTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"uniform\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"tapered\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSensorTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSensorTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSensorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"co2sensor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"firesensor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"flowsensor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gassensor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"heatsensor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"humiditysensor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"lightsensor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"moisturesensor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"movementsensor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pressuresensor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"smokesensor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"soundsensor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"temperaturesensor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSequenceEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSequenceEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSequenceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"start_start\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"start_finish\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"finish_start\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"finish_finish\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcServiceLifeFactorTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcServiceLifeFactorTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcServiceLifeFactorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"a_qualityofcomponents\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"b_designlevel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"c_workexecutionlevel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"d_indoorenvironment\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"e_outdoorenvironment\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"f_inuseconditions\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"g_maintenancelevel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcServiceLifeTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcServiceLifeTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcServiceLifeTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actualservicelife\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"expectedservicelife\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"optimisticreferenceservicelife\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pessimisticreferenceservicelife\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"referenceservicelife\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSlabTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSlabTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSlabTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"roof\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"landing\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"baseslab\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSoundScaleEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundScaleEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSoundScaleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dba\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"dbb\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"dbc\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"nc\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"nr\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSpaceHeaterTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpaceHeaterTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSpaceHeaterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"sectionalradiator\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"panelradiator\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"tubularradiator\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"convector\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"baseboardheater\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"finnedtubeunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"unitheater\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSpaceTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpaceTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSpaceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcStackTerminalTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcStackTerminalTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcStackTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"birdcage\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"cowl\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"rainwaterhopper\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcStairFlightTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcStairFlightTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcStairFlightTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"winder\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"spiral\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"curved\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"freeform\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcStairTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcStairTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcStairTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight_run_stair\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"two_straight_run_stair\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"quarter_winding_stair\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"quarter_turn_stair\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"half_winding_stair\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"half_turn_stair\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"two_quarter_winding_stair\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"two_quarter_turn_stair\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"three_quarter_winding_stair\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"three_quarter_turn_stair\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"spiral_stair\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"double_return_stair\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"curved_run_stair\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"two_curved_run_stair\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcStateEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcStateEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcStateEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"readwrite\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"readonly\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"locked\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"readwritelocked\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"readonlylocked\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcStructuralCurveTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcStructuralCurveTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rigid_joined_member\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pin_joined_member\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"cable\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"tension_member\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"compression_member\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcStructuralSurfaceTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcStructuralSurfaceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bending_element\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"membrane_element\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"shell\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSurfaceSide\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSurfaceSide\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSurfaceSide\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"positive\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"negative\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"both\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSurfaceTextureEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSurfaceTextureEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSurfaceTextureEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bump\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"opacity\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"reflection\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"selfillumination\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"shininess\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"specular\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"texture\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"transparencymap\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSwitchingDeviceTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSwitchingDeviceTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSwitchingDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"contactor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"emergencystop\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"starter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"switchdisconnector\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"toggleswitch\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcTankTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTankTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcTankTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"preformed\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sectional\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"expansion\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pressurevessel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcTendonTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTendonTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcTendonTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"strand\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"wire\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"bar\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"coated\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcTextPath\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTextPath\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcTextPath\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"right\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"up\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"down\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcThermalLoadSourceEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalLoadSourceEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcThermalLoadSourceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"people\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"lighting\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"equipment\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"ventilationindoorair\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"ventilationoutsideair\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"recirculatedair\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"exhaustair\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"airexchangerate\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"drybulbtemperature\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"relativehumidity\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"infiltration\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcThermalLoadTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalLoadTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcThermalLoadTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"sensible\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"latent\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"radiant\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcTimeSeriesDataTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeSeriesDataTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcTimeSeriesDataTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"continuous\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"discrete\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"discretebinary\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"piecewisebinary\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"piecewiseconstant\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"piecewisecontinuous\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcTimeSeriesScheduleTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeSeriesScheduleTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcTimeSeriesScheduleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"annual\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"monthly\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"weekly\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"daily\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcTransformerTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTransformerTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcTransformerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"current\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"frequency\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"voltage\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcTransitionCode\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTransitionCode\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcTransitionCode\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"discontinuous\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"continuous\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"contsamegradient\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"contsamegradientsamecurvature\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcTransportElementTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTransportElementTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcTransportElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"elevator\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"escalator\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"movingwalkway\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcTrimmingPreference\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTrimmingPreference\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcTrimmingPreference\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cartesian\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"parameter\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"unspecified\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcTubeBundleTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTubeBundleTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcTubeBundleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"finned\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcUnitEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcUnitEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcUnitEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"absorbeddoseunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"amountofsubstanceunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"areaunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"doseequivalentunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"electriccapacitanceunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"electricchargeunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"electricconductanceunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"electriccurrentunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"electricresistanceunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"electricvoltageunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"energyunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"forceunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"frequencyunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"illuminanceunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"inductanceunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"lengthunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"luminousfluxunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"luminousintensityunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"magneticfluxdensityunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"magneticfluxunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"massunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"planeangleunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"powerunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pressureunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"radioactivityunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"solidangleunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"thermodynamictemperatureunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"timeunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"volumeunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcUnitaryEquipmentTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcUnitaryEquipmentTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcUnitaryEquipmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airhandler\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"airconditioningunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"splitsystem\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"rooftopunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcValveTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcValveTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcValveTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airrelease\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"antivacuum\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"changeover\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"check\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"commissioning\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"diverting\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"drawoffcock\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"doublecheck\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"doubleregulating\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"faucet\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"flushing\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gascock\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gastap\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"isolating\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"mixing\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pressurereducing\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pressurerelief\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"regulating\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"safetycutoff\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"steamtrap\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"stopcock\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcVibrationIsolatorTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVibrationIsolatorTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcVibrationIsolatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compression\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"spring\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcWallTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWallTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcWallTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"standard\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"polygonal\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"shear\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"elementedwall\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"plumbingwall\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcWasteTerminalTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWasteTerminalTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcWasteTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floortrap\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"floorwaste\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gullysump\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"gullytrap\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"greaseinterceptor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"oilinterceptor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"petrolinterceptor\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"roofdrain\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"wastedisposalunit\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"wastetrap\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcWindowPanelOperationEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowPanelOperationEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcWindowPanelOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"sidehungrighthand\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"sidehunglefthand\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"tiltandturnrighthand\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"tiltandturnlefthand\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"tophung\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"bottomhung\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pivothorizontal\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"pivotvertical\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"slidinghorizontal\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"slidingvertical\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"removablecasement\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"fixedcasement\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"otheroperation\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcWindowPanelPositionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowPanelPositionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcWindowPanelPositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"middle\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"right\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"bottom\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"top\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcWindowStyleConstructionEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowStyleConstructionEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcWindowStyleConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aluminium\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"high_grade_steel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"steel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"wood\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"aluminium_wood\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"plastic\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"other_construction\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcWindowStyleOperationEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWindowStyleOperationEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcWindowStyleOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_panel\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"double_panel_vertical\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"double_panel_horizontal\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"triple_panel_vertical\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"triple_panel_bottom\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"triple_panel_top\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"triple_panel_left\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"triple_panel_right\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"triple_panel_horizontal\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcWorkControlTypeEnum\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWorkControlTypeEnum\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcWorkControlTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actual\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"baseline\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"planned\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"userdefined\">\n\t\t\t</xs:enumeration>\n\t\t\t<xs:enumeration value=\"notdefined\">\n\t\t\t</xs:enumeration>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\n\n<!-- simple type declarations (for TYPE defined data type definitions) -->\n\n\t<xs:element name=\"IfcAbsorbedDoseMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAbsorbedDoseMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcAbsorbedDoseMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcAccelerationMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAccelerationMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcAccelerationMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcAmountOfSubstanceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAmountOfSubstanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcAmountOfSubstanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcAngularVelocityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAngularVelocityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcAngularVelocityMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcAreaMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcAreaMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcBoolean\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBoolean\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcBoolean\">\n\t\t<xs:restriction base=\"xs:boolean\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcBoxAlignment\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBoxAlignment\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcBoxAlignment\">\n\t\t<xs:restriction base=\"ifc:IfcLabel\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcComplexNumber\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:complexContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcComplexNumber\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:complexContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:complexType name=\"IfcComplexNumber\">\n\t\t<xs:sequence>\n\t\t\t<xs:element ref=\"ex:double-wrapper\" maxOccurs=\"2\" minOccurs=\"2\">\n\t\t\t</xs:element>\n\t\t</xs:sequence>\n\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:double-wrapper\">\n\t\t</xs:attribute>\n\t\t<xs:attribute ref=\"ex:cType\" fixed=\"array\">\n\t\t</xs:attribute>\n\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t</xs:attribute>\n\t</xs:complexType>\n\n\n\t<xs:element name=\"IfcCompoundPlaneAngleMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:complexContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCompoundPlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:complexContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:complexType name=\"IfcCompoundPlaneAngleMeasure\">\n\t\t<xs:sequence>\n\t\t\t<xs:element ref=\"ex:long-wrapper\" maxOccurs=\"4\" minOccurs=\"3\">\n\t\t\t</xs:element>\n\t\t</xs:sequence>\n\t\t<xs:attribute ref=\"ex:itemType\" fixed=\"ex:long-wrapper\">\n\t\t</xs:attribute>\n\t\t<xs:attribute ref=\"ex:cType\" fixed=\"list\">\n\t\t</xs:attribute>\n\t\t<xs:attribute use=\"optional\" ref=\"ex:arraySize\">\n\t\t</xs:attribute>\n\t</xs:complexType>\n\n\n\t<xs:element name=\"IfcContextDependentMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcContextDependentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcContextDependentMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcCountMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCountMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcCountMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcCurvatureMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCurvatureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcCurvatureMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDayInMonthNumber\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDayInMonthNumber\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDayInMonthNumber\">\n\t\t<xs:restriction base=\"xs:long\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDaylightSavingHour\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDaylightSavingHour\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDaylightSavingHour\">\n\t\t<xs:restriction base=\"xs:long\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDescriptiveMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDescriptiveMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDescriptiveMeasure\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDimensionCount\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDimensionCount\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDimensionCount\">\n\t\t<xs:restriction base=\"xs:long\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDoseEquivalentMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDoseEquivalentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDoseEquivalentMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcDynamicViscosityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDynamicViscosityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcDynamicViscosityMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcElectricCapacitanceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCapacitanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcElectricCapacitanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcElectricChargeMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricChargeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcElectricChargeMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcElectricConductanceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricConductanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcElectricConductanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcElectricCurrentMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcElectricCurrentMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcElectricResistanceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricResistanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcElectricResistanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcElectricVoltageMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricVoltageMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcElectricVoltageMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcEnergyMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcEnergyMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcFontStyle\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFontStyle\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcFontStyle\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcFontVariant\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFontVariant\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcFontVariant\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcFontWeight\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFontWeight\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcFontWeight\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcForceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcFrequencyMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFrequencyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcFrequencyMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcGloballyUniqueId\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcGloballyUniqueId\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcGloballyUniqueId\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:minLength value=\"22\">\n\t\t\t</xs:minLength>\n\t\t\t<xs:maxLength value=\"22\">\n\t\t\t</xs:maxLength>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcHeatFluxDensityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatFluxDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcHeatFluxDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcHeatingValueMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatingValueMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcHeatingValueMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcHourInDay\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHourInDay\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcHourInDay\">\n\t\t<xs:restriction base=\"xs:long\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcIdentifier\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIdentifier\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcIdentifier\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcIlluminanceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIlluminanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcIlluminanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcInductanceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInductanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcInductanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcInteger\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInteger\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcInteger\">\n\t\t<xs:restriction base=\"xs:long\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcIntegerCountRateMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIntegerCountRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcIntegerCountRateMeasure\">\n\t\t<xs:restriction base=\"xs:long\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcIonConcentrationMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIonConcentrationMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcIonConcentrationMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcIsothermalMoistureCapacityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcIsothermalMoistureCapacityMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcKinematicViscosityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcKinematicViscosityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcKinematicViscosityMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcLabel\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLabel\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcLabel\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcLengthMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcLengthMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcLinearForceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcLinearForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcLinearMomentMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearMomentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcLinearMomentMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcLinearStiffnessMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearStiffnessMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcLinearStiffnessMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcLinearVelocityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearVelocityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcLinearVelocityMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcLogical\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLogical\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcLogical\">\n\t\t<xs:restriction base=\"ex:logical\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcLuminousFluxMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousFluxMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcLuminousFluxMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcLuminousIntensityDistributionMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityDistributionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcLuminousIntensityDistributionMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcLuminousIntensityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcLuminousIntensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcMagneticFluxDensityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcMagneticFluxDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcMagneticFluxMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcMagneticFluxMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcMassDensityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcMassDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcMassFlowRateMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassFlowRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcMassFlowRateMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcMassMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcMassMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcMassPerLengthMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassPerLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcMassPerLengthMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcMinuteInHour\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMinuteInHour\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcMinuteInHour\">\n\t\t<xs:restriction base=\"xs:long\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcModulusOfElasticityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfElasticityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcModulusOfElasticityMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcModulusOfLinearSubgradeReactionMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcModulusOfRotationalSubgradeReactionMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcModulusOfSubgradeReactionMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcModulusOfSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcMoistureDiffusivityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMoistureDiffusivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcMoistureDiffusivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcMolecularWeightMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMolecularWeightMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcMolecularWeightMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcMomentOfInertiaMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMomentOfInertiaMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcMomentOfInertiaMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcMonetaryMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMonetaryMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcMonetaryMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcMonthInYearNumber\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMonthInYearNumber\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcMonthInYearNumber\">\n\t\t<xs:restriction base=\"xs:long\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcNormalisedRatioMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNormalisedRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcNormalisedRatioMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcNumericMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNumericMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcNumericMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcPHMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPHMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcPHMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcParameterValue\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcParameterValue\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcParameterValue\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcPlanarForceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlanarForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcPlanarForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcPlaneAngleMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcPlaneAngleMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcPositiveLengthMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcPositiveLengthMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcPositivePlaneAngleMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositivePlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcPositivePlaneAngleMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcPlaneAngleMeasure\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcPositiveRatioMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcPositiveRatioMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcPowerMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPowerMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcPowerMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcPresentableText\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPresentableText\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcPresentableText\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcPressureMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPressureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcPressureMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcRadioActivityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRadioActivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcRadioActivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcRatioMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcRatioMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcReal\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcReal\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcReal\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcRotationalFrequencyMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalFrequencyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcRotationalFrequencyMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcRotationalMassMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalMassMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcRotationalMassMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcRotationalStiffnessMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalStiffnessMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcRotationalStiffnessMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSecondInMinute\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSecondInMinute\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSecondInMinute\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSectionModulusMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionModulusMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSectionModulusMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSectionalAreaIntegralMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionalAreaIntegralMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSectionalAreaIntegralMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcShearModulusMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcShearModulusMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcShearModulusMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSolidAngleMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSolidAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSolidAngleMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSoundPowerMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSoundPowerMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSoundPressureMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSoundPressureMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSpecificHeatCapacityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecificHeatCapacityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSpecificHeatCapacityMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSpecularExponent\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularExponent\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSpecularExponent\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcSpecularRoughness\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularRoughness\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcSpecularRoughness\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcTemperatureGradientMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureGradientMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcTemperatureGradientMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcText\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcText\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcText\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcTextAlignment\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTextAlignment\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcTextAlignment\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcTextDecoration\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTextDecoration\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcTextDecoration\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcTextFontName\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTextFontName\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcTextFontName\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcTextTransformation\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTextTransformation\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcTextTransformation\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcThermalAdmittanceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalAdmittanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcThermalAdmittanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcThermalConductivityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalConductivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcThermalConductivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcThermalExpansionCoefficientMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalExpansionCoefficientMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcThermalExpansionCoefficientMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcThermalResistanceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalResistanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcThermalResistanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcThermalTransmittanceMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalTransmittanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcThermalTransmittanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcThermodynamicTemperatureMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermodynamicTemperatureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcThermodynamicTemperatureMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcTimeMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcTimeMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcTimeStamp\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeStamp\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcTimeStamp\">\n\t\t<xs:restriction base=\"xs:long\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcTorqueMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTorqueMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcTorqueMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcVaporPermeabilityMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVaporPermeabilityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcVaporPermeabilityMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcVolumeMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcVolumeMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcVolumetricFlowRateMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumetricFlowRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcVolumetricFlowRateMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcWarpingConstantMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingConstantMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcWarpingConstantMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcWarpingMomentMeasure\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingMomentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcWarpingMomentMeasure\">\n\t\t<xs:restriction base=\"xs:double\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n\t<xs:element name=\"IfcYearNumber\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcYearNumber\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ex:instanceAttributes\">\n\t\t\t\t\t</xs:attributeGroup>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\n\t<xs:simpleType name=\"IfcYearNumber\">\n\t\t<xs:restriction base=\"xs:long\">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\n\n</xs:schema>\n"
  },
  {
    "path": "Source/RevitIFCTools/IFC4.exp",
    "content": "(*\nCopyright by:\nbuildingSMART International Limited, 1996-2017\n\nAny technical documentation made available by buildingSMART International Limited\nis the copyrighted work of buildingSMART International Limited and is owned by the \nbuildingSMART International Limited. It may be photocopied, used in software development, \nor translated into another computer language without prior written consent from \nbuildingSMART International Limited provided that full attribution is given. \nPrior written consent is required if changes are made to the technical specification.\n\nThis material is delivered to you as is and buildingSMART International Limited makes \nno warranty of any kind with regard to it, including, but not limited to, the implied \nwarranties as to its accuracy or fitness for a particular purpose. Any use of the \ntechnical documentation or the information contained therein is at the risk of the user. \nDocumentation may include technical or other inaccuracies or typographical errors. \nbuildingSMART International Limited shall not be liable for errors contained therein or \nfor incidental consequential damages in connection with the furnishing, performance or use \nof the material. The information contained in this document is subject to change without notice.\n\nIssue date:\nSunday, October 29, 2017\n\n*)\n\nSCHEMA IFC4;\n\nTYPE IfcAbsorbedDoseMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAccelerationMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAmountOfSubstanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAngularVelocityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcArcIndex = LIST [3:3] OF IfcPositiveInteger;\nEND_TYPE;\n\nTYPE IfcAreaDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAreaMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcBinary = BINARY;\nEND_TYPE;\n\nTYPE IfcBoolean = BOOLEAN;\nEND_TYPE;\n\nTYPE IfcBoxAlignment = IfcLabel;\n WHERE\n\tWR1 : SELF IN ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right'];\nEND_TYPE;\n\nTYPE IfcCardinalPointReference = INTEGER;\n WHERE\n\tGreaterThanZero : SELF > 0;\nEND_TYPE;\n\nTYPE IfcComplexNumber = ARRAY [1:2] OF REAL;\nEND_TYPE;\n\nTYPE IfcCompoundPlaneAngleMeasure = LIST [3:4] OF INTEGER;\n WHERE\n\tMinutesInRange : ABS(SELF[2]) < 60;\n\tSecondsInRange : ABS(SELF[3]) < 60;\n\tMicrosecondsInRange : (SIZEOF(SELF) = 3) OR (ABS(SELF[4]) < 1000000);\n\tConsistentSign : ((SELF[1] >= 0) AND (SELF[2] >= 0) AND (SELF[3] >= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] >= 0)))\nOR\n((SELF[1] <= 0) AND (SELF[2] <= 0) AND (SELF[3] <= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] <= 0)));\nEND_TYPE;\n\nTYPE IfcContextDependentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcCountMeasure = NUMBER;\nEND_TYPE;\n\nTYPE IfcCurvatureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcDate = STRING;\nEND_TYPE;\n\nTYPE IfcDateTime = STRING;\nEND_TYPE;\n\nTYPE IfcDayInMonthNumber = INTEGER;\n WHERE\n\tValidRange : {1 <= SELF <= 31};\nEND_TYPE;\n\nTYPE IfcDayInWeekNumber = INTEGER;\n WHERE\n\tValidRange : {1 <= SELF <= 7};\nEND_TYPE;\n\nTYPE IfcDescriptiveMeasure = STRING;\nEND_TYPE;\n\nTYPE IfcDimensionCount = INTEGER;\n WHERE\n\tWR1 : { 0 < SELF <= 3 };\nEND_TYPE;\n\nTYPE IfcDoseEquivalentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcDuration = STRING;\nEND_TYPE;\n\nTYPE IfcDynamicViscosityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricCapacitanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricChargeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricConductanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricCurrentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricResistanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricVoltageMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcEnergyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcFontStyle = STRING;\n WHERE\n\tWR1 : SELF IN ['normal','italic','oblique'];\nEND_TYPE;\n\nTYPE IfcFontVariant = STRING;\n WHERE\n\tWR1 : SELF IN ['normal','small-caps'];\nEND_TYPE;\n\nTYPE IfcFontWeight = STRING;\n WHERE\n\tWR1 : SELF IN ['normal','small-caps','100','200','300','400','500','600','700','800','900'];\nEND_TYPE;\n\nTYPE IfcForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcFrequencyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcGloballyUniqueId = STRING(22) FIXED;\nEND_TYPE;\n\nTYPE IfcHeatFluxDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcHeatingValueMeasure = REAL;\n WHERE\n\tWR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcIdentifier = STRING(255);\nEND_TYPE;\n\nTYPE IfcIlluminanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcInductanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcInteger = INTEGER;\nEND_TYPE;\n\nTYPE IfcIntegerCountRateMeasure = INTEGER;\nEND_TYPE;\n\nTYPE IfcIonConcentrationMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcIsothermalMoistureCapacityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcKinematicViscosityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLabel = STRING(255);\nEND_TYPE;\n\nTYPE IfcLanguageId = IfcIdentifier;\nEND_TYPE;\n\nTYPE IfcLengthMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLineIndex = LIST [2:?] OF IfcPositiveInteger;\nEND_TYPE;\n\nTYPE IfcLinearForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearMomentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearStiffnessMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearVelocityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLogical = LOGICAL;\nEND_TYPE;\n\nTYPE IfcLuminousFluxMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLuminousIntensityDistributionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLuminousIntensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMagneticFluxDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMagneticFluxMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassFlowRateMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassPerLengthMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfElasticityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfLinearSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfRotationalSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMoistureDiffusivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMolecularWeightMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMomentOfInertiaMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMonetaryMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMonthInYearNumber = INTEGER;\n WHERE\n\tValidRange : {1 <= SELF <= 12};\nEND_TYPE;\n\nTYPE IfcNonNegativeLengthMeasure = IfcLengthMeasure;\n WHERE\n\tNotNegative : SELF >= 0.;\nEND_TYPE;\n\nTYPE IfcNormalisedRatioMeasure = IfcRatioMeasure;\n WHERE\n\tWR1 : {0.0 <= SELF <= 1.0};\nEND_TYPE;\n\nTYPE IfcNumericMeasure = NUMBER;\nEND_TYPE;\n\nTYPE IfcPHMeasure = REAL;\n WHERE\n\tWR21 : {0.0 <= SELF <= 14.0};\nEND_TYPE;\n\nTYPE IfcParameterValue = REAL;\nEND_TYPE;\n\nTYPE IfcPlanarForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPlaneAngleMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPositiveInteger = IfcInteger;\n WHERE\n\tWR1 : SELF > 0;\nEND_TYPE;\n\nTYPE IfcPositiveLengthMeasure = IfcLengthMeasure;\n WHERE\n\tWR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcPositivePlaneAngleMeasure = IfcPlaneAngleMeasure;\n WHERE\n\tWR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcPositiveRatioMeasure = IfcRatioMeasure;\n WHERE\n\tWR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcPowerMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPresentableText = STRING;\nEND_TYPE;\n\nTYPE IfcPressureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPropertySetDefinitionSet = SET [1:?] OF IfcPropertySetDefinition;\nEND_TYPE;\n\nTYPE IfcRadioActivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRatioMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcReal = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalFrequencyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalMassMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalStiffnessMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSectionModulusMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSectionalAreaIntegralMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcShearModulusMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSolidAngleMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPowerLevelMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPowerMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPressureLevelMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPressureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSpecificHeatCapacityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSpecularExponent = REAL;\nEND_TYPE;\n\nTYPE IfcSpecularRoughness = REAL;\n WHERE\n\tWR1 : {0.0 <= SELF <= 1.0};\nEND_TYPE;\n\nTYPE IfcTemperatureGradientMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcTemperatureRateOfChangeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcText = STRING;\nEND_TYPE;\n\nTYPE IfcTextAlignment = STRING;\n WHERE\n\tWR1 : SELF IN ['left', 'right', 'center', 'justify'];\nEND_TYPE;\n\nTYPE IfcTextDecoration = STRING;\n WHERE\n\tWR1 : SELF IN ['none', 'underline', 'overline', 'line-through', 'blink'];\nEND_TYPE;\n\nTYPE IfcTextFontName = STRING;\nEND_TYPE;\n\nTYPE IfcTextTransformation = STRING;\n WHERE\n\tWR1 : SELF IN ['capitalize', 'uppercase', 'lowercase', 'none'];\nEND_TYPE;\n\nTYPE IfcThermalAdmittanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalConductivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalExpansionCoefficientMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalResistanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalTransmittanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermodynamicTemperatureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcTime = STRING;\nEND_TYPE;\n\nTYPE IfcTimeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcTimeStamp = INTEGER;\nEND_TYPE;\n\nTYPE IfcTorqueMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcURIReference = STRING;\nEND_TYPE;\n\nTYPE IfcVaporPermeabilityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcVolumeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcVolumetricFlowRateMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcWarpingConstantMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcWarpingMomentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcActionRequestTypeEnum = ENUMERATION OF\n\t(EMAIL\n\t,FAX\n\t,PHONE\n\t,POST\n\t,VERBAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActionSourceTypeEnum = ENUMERATION OF\n\t(DEAD_LOAD_G\n\t,COMPLETION_G1\n\t,LIVE_LOAD_Q\n\t,SNOW_S\n\t,WIND_W\n\t,PRESTRESSING_P\n\t,SETTLEMENT_U\n\t,TEMPERATURE_T\n\t,EARTHQUAKE_E\n\t,FIRE\n\t,IMPULSE\n\t,IMPACT\n\t,TRANSPORT\n\t,ERECTION\n\t,PROPPING\n\t,SYSTEM_IMPERFECTION\n\t,SHRINKAGE\n\t,CREEP\n\t,LACK_OF_FIT\n\t,BUOYANCY\n\t,ICE\n\t,CURRENT\n\t,WAVE\n\t,RAIN\n\t,BRAKES\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActionTypeEnum = ENUMERATION OF\n\t(PERMANENT_G\n\t,VARIABLE_Q\n\t,EXTRAORDINARY_A\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActuatorTypeEnum = ENUMERATION OF\n\t(ELECTRICACTUATOR\n\t,HANDOPERATEDACTUATOR\n\t,HYDRAULICACTUATOR\n\t,PNEUMATICACTUATOR\n\t,THERMOSTATICACTUATOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAddressTypeEnum = ENUMERATION OF\n\t(OFFICE\n\t,SITE\n\t,HOME\n\t,DISTRIBUTIONPOINT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcAirTerminalBoxTypeEnum = ENUMERATION OF\n\t(CONSTANTFLOW\n\t,VARIABLEFLOWPRESSUREDEPENDANT\n\t,VARIABLEFLOWPRESSUREINDEPENDANT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAirTerminalTypeEnum = ENUMERATION OF\n\t(DIFFUSER\n\t,GRILLE\n\t,LOUVRE\n\t,REGISTER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAirToAirHeatRecoveryTypeEnum = ENUMERATION OF\n\t(FIXEDPLATECOUNTERFLOWEXCHANGER\n\t,FIXEDPLATECROSSFLOWEXCHANGER\n\t,FIXEDPLATEPARALLELFLOWEXCHANGER\n\t,ROTARYWHEEL\n\t,RUNAROUNDCOILLOOP\n\t,HEATPIPE\n\t,TWINTOWERENTHALPYRECOVERYLOOPS\n\t,THERMOSIPHONSEALEDTUBEHEATEXCHANGERS\n\t,THERMOSIPHONCOILTYPEHEATEXCHANGERS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAlarmTypeEnum = ENUMERATION OF\n\t(BELL\n\t,BREAKGLASSBUTTON\n\t,LIGHT\n\t,MANUALPULLBOX\n\t,SIREN\n\t,WHISTLE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAnalysisModelTypeEnum = ENUMERATION OF\n\t(IN_PLANE_LOADING_2D\n\t,OUT_PLANE_LOADING_2D\n\t,LOADING_3D\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAnalysisTheoryTypeEnum = ENUMERATION OF\n\t(FIRST_ORDER_THEORY\n\t,SECOND_ORDER_THEORY\n\t,THIRD_ORDER_THEORY\n\t,FULL_NONLINEAR_THEORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcArithmeticOperatorEnum = ENUMERATION OF\n\t(ADD\n\t,DIVIDE\n\t,MULTIPLY\n\t,SUBTRACT);\nEND_TYPE;\n\nTYPE IfcAssemblyPlaceEnum = ENUMERATION OF\n\t(SITE\n\t,FACTORY\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAudioVisualApplianceTypeEnum = ENUMERATION OF\n\t(AMPLIFIER\n\t,CAMERA\n\t,DISPLAY\n\t,MICROPHONE\n\t,PLAYER\n\t,PROJECTOR\n\t,RECEIVER\n\t,SPEAKER\n\t,SWITCHER\n\t,TELEPHONE\n\t,TUNER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBSplineCurveForm = ENUMERATION OF\n\t(POLYLINE_FORM\n\t,CIRCULAR_ARC\n\t,ELLIPTIC_ARC\n\t,PARABOLIC_ARC\n\t,HYPERBOLIC_ARC\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcBSplineSurfaceForm = ENUMERATION OF\n\t(PLANE_SURF\n\t,CYLINDRICAL_SURF\n\t,CONICAL_SURF\n\t,SPHERICAL_SURF\n\t,TOROIDAL_SURF\n\t,SURF_OF_REVOLUTION\n\t,RULED_SURF\n\t,GENERALISED_CONE\n\t,QUADRIC_SURF\n\t,SURF_OF_LINEAR_EXTRUSION\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcBeamTypeEnum = ENUMERATION OF\n\t(BEAM\n\t,JOIST\n\t,HOLLOWCORE\n\t,LINTEL\n\t,SPANDREL\n\t,T_BEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBenchmarkEnum = ENUMERATION OF\n\t(GREATERTHAN\n\t,GREATERTHANOREQUALTO\n\t,LESSTHAN\n\t,LESSTHANOREQUALTO\n\t,EQUALTO\n\t,NOTEQUALTO\n\t,INCLUDES\n\t,NOTINCLUDES\n\t,INCLUDEDIN\n\t,NOTINCLUDEDIN);\nEND_TYPE;\n\nTYPE IfcBoilerTypeEnum = ENUMERATION OF\n\t(WATER\n\t,STEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBooleanOperator = ENUMERATION OF\n\t(UNION\n\t,INTERSECTION\n\t,DIFFERENCE);\nEND_TYPE;\n\nTYPE IfcBuildingElementPartTypeEnum = ENUMERATION OF\n\t(INSULATION\n\t,PRECASTPANEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBuildingElementProxyTypeEnum = ENUMERATION OF\n\t(COMPLEX\n\t,ELEMENT\n\t,PARTIAL\n\t,PROVISIONFORVOID\n\t,PROVISIONFORSPACE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBuildingSystemTypeEnum = ENUMERATION OF\n\t(FENESTRATION\n\t,FOUNDATION\n\t,LOADBEARING\n\t,OUTERSHELL\n\t,SHADING\n\t,TRANSPORT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBurnerTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableCarrierFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CROSS\n\t,REDUCER\n\t,TEE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableCarrierSegmentTypeEnum = ENUMERATION OF\n\t(CABLELADDERSEGMENT\n\t,CABLETRAYSEGMENT\n\t,CABLETRUNKINGSEGMENT\n\t,CONDUITSEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableFittingTypeEnum = ENUMERATION OF\n\t(CONNECTOR\n\t,ENTRY\n\t,EXIT\n\t,JUNCTION\n\t,TRANSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableSegmentTypeEnum = ENUMERATION OF\n\t(BUSBARSEGMENT\n\t,CABLESEGMENT\n\t,CONDUCTORSEGMENT\n\t,CORESEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcChangeActionEnum = ENUMERATION OF\n\t(NOCHANGE\n\t,MODIFIED\n\t,ADDED\n\t,DELETED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcChillerTypeEnum = ENUMERATION OF\n\t(AIRCOOLED\n\t,WATERCOOLED\n\t,HEATRECOVERY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcChimneyTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoilTypeEnum = ENUMERATION OF\n\t(DXCOOLINGCOIL\n\t,ELECTRICHEATINGCOIL\n\t,GASHEATINGCOIL\n\t,HYDRONICCOIL\n\t,STEAMHEATINGCOIL\n\t,WATERCOOLINGCOIL\n\t,WATERHEATINGCOIL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcColumnTypeEnum = ENUMERATION OF\n\t(COLUMN\n\t,PILASTER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCommunicationsApplianceTypeEnum = ENUMERATION OF\n\t(ANTENNA\n\t,COMPUTER\n\t,FAX\n\t,GATEWAY\n\t,MODEM\n\t,NETWORKAPPLIANCE\n\t,NETWORKBRIDGE\n\t,NETWORKHUB\n\t,PRINTER\n\t,REPEATER\n\t,ROUTER\n\t,SCANNER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcComplexPropertyTemplateTypeEnum = ENUMERATION OF\n\t(P_COMPLEX\n\t,Q_COMPLEX);\nEND_TYPE;\n\nTYPE IfcCompressorTypeEnum = ENUMERATION OF\n\t(DYNAMIC\n\t,RECIPROCATING\n\t,ROTARY\n\t,SCROLL\n\t,TROCHOIDAL\n\t,SINGLESTAGE\n\t,BOOSTER\n\t,OPENTYPE\n\t,HERMETIC\n\t,SEMIHERMETIC\n\t,WELDEDSHELLHERMETIC\n\t,ROLLINGPISTON\n\t,ROTARYVANE\n\t,SINGLESCREW\n\t,TWINSCREW\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCondenserTypeEnum = ENUMERATION OF\n\t(AIRCOOLED\n\t,EVAPORATIVECOOLED\n\t,WATERCOOLED\n\t,WATERCOOLEDBRAZEDPLATE\n\t,WATERCOOLEDSHELLCOIL\n\t,WATERCOOLEDSHELLTUBE\n\t,WATERCOOLEDTUBEINTUBE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConnectionTypeEnum = ENUMERATION OF\n\t(ATPATH\n\t,ATSTART\n\t,ATEND\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConstraintEnum = ENUMERATION OF\n\t(HARD\n\t,SOFT\n\t,ADVISORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConstructionEquipmentResourceTypeEnum = ENUMERATION OF\n\t(DEMOLISHING\n\t,EARTHMOVING\n\t,ERECTING\n\t,HEATING\n\t,LIGHTING\n\t,PAVING\n\t,PUMPING\n\t,TRANSPORTING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConstructionMaterialResourceTypeEnum = ENUMERATION OF\n\t(AGGREGATES\n\t,CONCRETE\n\t,DRYWALL\n\t,FUEL\n\t,GYPSUM\n\t,MASONRY\n\t,METAL\n\t,PLASTIC\n\t,WOOD\n\t,NOTDEFINED\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcConstructionProductResourceTypeEnum = ENUMERATION OF\n\t(ASSEMBLY\n\t,FORMWORK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcControllerTypeEnum = ENUMERATION OF\n\t(FLOATING\n\t,PROGRAMMABLE\n\t,PROPORTIONAL\n\t,MULTIPOSITION\n\t,TWOPOSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCooledBeamTypeEnum = ENUMERATION OF\n\t(ACTIVE\n\t,PASSIVE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoolingTowerTypeEnum = ENUMERATION OF\n\t(NATURALDRAFT\n\t,MECHANICALINDUCEDDRAFT\n\t,MECHANICALFORCEDDRAFT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCostItemTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCostScheduleTypeEnum = ENUMERATION OF\n\t(BUDGET\n\t,COSTPLAN\n\t,ESTIMATE\n\t,TENDER\n\t,PRICEDBILLOFQUANTITIES\n\t,UNPRICEDBILLOFQUANTITIES\n\t,SCHEDULEOFRATES\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoveringTypeEnum = ENUMERATION OF\n\t(CEILING\n\t,FLOORING\n\t,CLADDING\n\t,ROOFING\n\t,MOLDING\n\t,SKIRTINGBOARD\n\t,INSULATION\n\t,MEMBRANE\n\t,SLEEVING\n\t,WRAPPING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCrewResourceTypeEnum = ENUMERATION OF\n\t(OFFICE\n\t,SITE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCurtainWallTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCurveInterpolationEnum = ENUMERATION OF\n\t(LINEAR\n\t,LOG_LINEAR\n\t,LOG_LOG\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDamperTypeEnum = ENUMERATION OF\n\t(BACKDRAFTDAMPER\n\t,BALANCINGDAMPER\n\t,BLASTDAMPER\n\t,CONTROLDAMPER\n\t,FIREDAMPER\n\t,FIRESMOKEDAMPER\n\t,FUMEHOODEXHAUST\n\t,GRAVITYDAMPER\n\t,GRAVITYRELIEFDAMPER\n\t,RELIEFDAMPER\n\t,SMOKEDAMPER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDataOriginEnum = ENUMERATION OF\n\t(MEASURED\n\t,PREDICTED\n\t,SIMULATED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDerivedUnitEnum = ENUMERATION OF\n\t(ANGULARVELOCITYUNIT\n\t,AREADENSITYUNIT\n\t,COMPOUNDPLANEANGLEUNIT\n\t,DYNAMICVISCOSITYUNIT\n\t,HEATFLUXDENSITYUNIT\n\t,INTEGERCOUNTRATEUNIT\n\t,ISOTHERMALMOISTURECAPACITYUNIT\n\t,KINEMATICVISCOSITYUNIT\n\t,LINEARVELOCITYUNIT\n\t,MASSDENSITYUNIT\n\t,MASSFLOWRATEUNIT\n\t,MOISTUREDIFFUSIVITYUNIT\n\t,MOLECULARWEIGHTUNIT\n\t,SPECIFICHEATCAPACITYUNIT\n\t,THERMALADMITTANCEUNIT\n\t,THERMALCONDUCTANCEUNIT\n\t,THERMALRESISTANCEUNIT\n\t,THERMALTRANSMITTANCEUNIT\n\t,VAPORPERMEABILITYUNIT\n\t,VOLUMETRICFLOWRATEUNIT\n\t,ROTATIONALFREQUENCYUNIT\n\t,TORQUEUNIT\n\t,MOMENTOFINERTIAUNIT\n\t,LINEARMOMENTUNIT\n\t,LINEARFORCEUNIT\n\t,PLANARFORCEUNIT\n\t,MODULUSOFELASTICITYUNIT\n\t,SHEARMODULUSUNIT\n\t,LINEARSTIFFNESSUNIT\n\t,ROTATIONALSTIFFNESSUNIT\n\t,MODULUSOFSUBGRADEREACTIONUNIT\n\t,ACCELERATIONUNIT\n\t,CURVATUREUNIT\n\t,HEATINGVALUEUNIT\n\t,IONCONCENTRATIONUNIT\n\t,LUMINOUSINTENSITYDISTRIBUTIONUNIT\n\t,MASSPERLENGTHUNIT\n\t,MODULUSOFLINEARSUBGRADEREACTIONUNIT\n\t,MODULUSOFROTATIONALSUBGRADEREACTIONUNIT\n\t,PHUNIT\n\t,ROTATIONALMASSUNIT\n\t,SECTIONAREAINTEGRALUNIT\n\t,SECTIONMODULUSUNIT\n\t,SOUNDPOWERLEVELUNIT\n\t,SOUNDPOWERUNIT\n\t,SOUNDPRESSURELEVELUNIT\n\t,SOUNDPRESSUREUNIT\n\t,TEMPERATUREGRADIENTUNIT\n\t,TEMPERATURERATEOFCHANGEUNIT\n\t,THERMALEXPANSIONCOEFFICIENTUNIT\n\t,WARPINGCONSTANTUNIT\n\t,WARPINGMOMENTUNIT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcDirectionSenseEnum = ENUMERATION OF\n\t(POSITIVE\n\t,NEGATIVE);\nEND_TYPE;\n\nTYPE IfcDiscreteAccessoryTypeEnum = ENUMERATION OF\n\t(ANCHORPLATE\n\t,BRACKET\n\t,SHOE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDistributionChamberElementTypeEnum = ENUMERATION OF\n\t(FORMEDDUCT\n\t,INSPECTIONCHAMBER\n\t,INSPECTIONPIT\n\t,MANHOLE\n\t,METERCHAMBER\n\t,SUMP\n\t,TRENCH\n\t,VALVECHAMBER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDistributionPortTypeEnum = ENUMERATION OF\n\t(CABLE\n\t,CABLECARRIER\n\t,DUCT\n\t,PIPE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDistributionSystemEnum = ENUMERATION OF\n\t(AIRCONDITIONING\n\t,AUDIOVISUAL\n\t,CHEMICAL\n\t,CHILLEDWATER\n\t,COMMUNICATION\n\t,COMPRESSEDAIR\n\t,CONDENSERWATER\n\t,CONTROL\n\t,CONVEYING\n\t,DATA\n\t,DISPOSAL\n\t,DOMESTICCOLDWATER\n\t,DOMESTICHOTWATER\n\t,DRAINAGE\n\t,EARTHING\n\t,ELECTRICAL\n\t,ELECTROACOUSTIC\n\t,EXHAUST\n\t,FIREPROTECTION\n\t,FUEL\n\t,GAS\n\t,HAZARDOUS\n\t,HEATING\n\t,LIGHTING\n\t,LIGHTNINGPROTECTION\n\t,MUNICIPALSOLIDWASTE\n\t,OIL\n\t,OPERATIONAL\n\t,POWERGENERATION\n\t,RAINWATER\n\t,REFRIGERATION\n\t,SECURITY\n\t,SEWAGE\n\t,SIGNAL\n\t,STORMWATER\n\t,TELEPHONE\n\t,TV\n\t,VACUUM\n\t,VENT\n\t,VENTILATION\n\t,WASTEWATER\n\t,WATERSUPPLY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDocumentConfidentialityEnum = ENUMERATION OF\n\t(PUBLIC\n\t,RESTRICTED\n\t,CONFIDENTIAL\n\t,PERSONAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDocumentStatusEnum = ENUMERATION OF\n\t(DRAFT\n\t,FINALDRAFT\n\t,FINAL\n\t,REVISION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorPanelOperationEnum = ENUMERATION OF\n\t(SWINGING\n\t,DOUBLE_ACTING\n\t,SLIDING\n\t,FOLDING\n\t,REVOLVING\n\t,ROLLINGUP\n\t,FIXEDPANEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorPanelPositionEnum = ENUMERATION OF\n\t(LEFT\n\t,MIDDLE\n\t,RIGHT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorStyleConstructionEnum = ENUMERATION OF\n\t(ALUMINIUM\n\t,HIGH_GRADE_STEEL\n\t,STEEL\n\t,WOOD\n\t,ALUMINIUM_WOOD\n\t,ALUMINIUM_PLASTIC\n\t,PLASTIC\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorStyleOperationEnum = ENUMERATION OF\n\t(SINGLE_SWING_LEFT\n\t,SINGLE_SWING_RIGHT\n\t,DOUBLE_DOOR_SINGLE_SWING\n\t,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT\n\t,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT\n\t,DOUBLE_SWING_LEFT\n\t,DOUBLE_SWING_RIGHT\n\t,DOUBLE_DOOR_DOUBLE_SWING\n\t,SLIDING_TO_LEFT\n\t,SLIDING_TO_RIGHT\n\t,DOUBLE_DOOR_SLIDING\n\t,FOLDING_TO_LEFT\n\t,FOLDING_TO_RIGHT\n\t,DOUBLE_DOOR_FOLDING\n\t,REVOLVING\n\t,ROLLINGUP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorTypeEnum = ENUMERATION OF\n\t(DOOR\n\t,GATE\n\t,TRAPDOOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorTypeOperationEnum = ENUMERATION OF\n\t(SINGLE_SWING_LEFT\n\t,SINGLE_SWING_RIGHT\n\t,DOUBLE_DOOR_SINGLE_SWING\n\t,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT\n\t,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT\n\t,DOUBLE_SWING_LEFT\n\t,DOUBLE_SWING_RIGHT\n\t,DOUBLE_DOOR_DOUBLE_SWING\n\t,SLIDING_TO_LEFT\n\t,SLIDING_TO_RIGHT\n\t,DOUBLE_DOOR_SLIDING\n\t,FOLDING_TO_LEFT\n\t,FOLDING_TO_RIGHT\n\t,DOUBLE_DOOR_FOLDING\n\t,REVOLVING\n\t,ROLLINGUP\n\t,SWING_FIXED_LEFT\n\t,SWING_FIXED_RIGHT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CONNECTOR\n\t,ENTRY\n\t,EXIT\n\t,JUNCTION\n\t,OBSTRUCTION\n\t,TRANSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctSegmentTypeEnum = ENUMERATION OF\n\t(RIGIDSEGMENT\n\t,FLEXIBLESEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctSilencerTypeEnum = ENUMERATION OF\n\t(FLATOVAL\n\t,RECTANGULAR\n\t,ROUND\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricApplianceTypeEnum = ENUMERATION OF\n\t(DISHWASHER\n\t,ELECTRICCOOKER\n\t,FREESTANDINGELECTRICHEATER\n\t,FREESTANDINGFAN\n\t,FREESTANDINGWATERHEATER\n\t,FREESTANDINGWATERCOOLER\n\t,FREEZER\n\t,FRIDGE_FREEZER\n\t,HANDDRYER\n\t,KITCHENMACHINE\n\t,MICROWAVE\n\t,PHOTOCOPIER\n\t,REFRIGERATOR\n\t,TUMBLEDRYER\n\t,VENDINGMACHINE\n\t,WASHINGMACHINE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricDistributionBoardTypeEnum = ENUMERATION OF\n\t(CONSUMERUNIT\n\t,DISTRIBUTIONBOARD\n\t,MOTORCONTROLCENTRE\n\t,SWITCHBOARD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricFlowStorageDeviceTypeEnum = ENUMERATION OF\n\t(BATTERY\n\t,CAPACITORBANK\n\t,HARMONICFILTER\n\t,INDUCTORBANK\n\t,UPS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricGeneratorTypeEnum = ENUMERATION OF\n\t(CHP\n\t,ENGINEGENERATOR\n\t,STANDALONE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricMotorTypeEnum = ENUMERATION OF\n\t(DC\n\t,INDUCTION\n\t,POLYPHASE\n\t,RELUCTANCESYNCHRONOUS\n\t,SYNCHRONOUS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricTimeControlTypeEnum = ENUMERATION OF\n\t(TIMECLOCK\n\t,TIMEDELAY\n\t,RELAY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElementAssemblyTypeEnum = ENUMERATION OF\n\t(ACCESSORY_ASSEMBLY\n\t,ARCH\n\t,BEAM_GRID\n\t,BRACED_FRAME\n\t,GIRDER\n\t,REINFORCEMENT_UNIT\n\t,RIGID_FRAME\n\t,SLAB_FIELD\n\t,TRUSS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElementCompositionEnum = ENUMERATION OF\n\t(COMPLEX\n\t,ELEMENT\n\t,PARTIAL);\nEND_TYPE;\n\nTYPE IfcEngineTypeEnum = ENUMERATION OF\n\t(EXTERNALCOMBUSTION\n\t,INTERNALCOMBUSTION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEvaporativeCoolerTypeEnum = ENUMERATION OF\n\t(DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER\n\t,DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER\n\t,DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER\n\t,DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER\n\t,DIRECTEVAPORATIVEAIRWASHER\n\t,INDIRECTEVAPORATIVEPACKAGEAIRCOOLER\n\t,INDIRECTEVAPORATIVEWETCOIL\n\t,INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER\n\t,INDIRECTDIRECTCOMBINATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEvaporatorTypeEnum = ENUMERATION OF\n\t(DIRECTEXPANSION\n\t,DIRECTEXPANSIONSHELLANDTUBE\n\t,DIRECTEXPANSIONTUBEINTUBE\n\t,DIRECTEXPANSIONBRAZEDPLATE\n\t,FLOODEDSHELLANDTUBE\n\t,SHELLANDCOIL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEventTriggerTypeEnum = ENUMERATION OF\n\t(EVENTRULE\n\t,EVENTMESSAGE\n\t,EVENTTIME\n\t,EVENTCOMPLEX\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEventTypeEnum = ENUMERATION OF\n\t(STARTEVENT\n\t,ENDEVENT\n\t,INTERMEDIATEEVENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcExternalSpatialElementTypeEnum = ENUMERATION OF\n\t(EXTERNAL\n\t,EXTERNAL_EARTH\n\t,EXTERNAL_WATER\n\t,EXTERNAL_FIRE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFanTypeEnum = ENUMERATION OF\n\t(CENTRIFUGALFORWARDCURVED\n\t,CENTRIFUGALRADIAL\n\t,CENTRIFUGALBACKWARDINCLINEDCURVED\n\t,CENTRIFUGALAIRFOIL\n\t,TUBEAXIAL\n\t,VANEAXIAL\n\t,PROPELLORAXIAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFastenerTypeEnum = ENUMERATION OF\n\t(GLUE\n\t,MORTAR\n\t,WELD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFilterTypeEnum = ENUMERATION OF\n\t(AIRPARTICLEFILTER\n\t,COMPRESSEDAIRFILTER\n\t,ODORFILTER\n\t,OILFILTER\n\t,STRAINER\n\t,WATERFILTER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFireSuppressionTerminalTypeEnum = ENUMERATION OF\n\t(BREECHINGINLET\n\t,FIREHYDRANT\n\t,HOSEREEL\n\t,SPRINKLER\n\t,SPRINKLERDEFLECTOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowDirectionEnum = ENUMERATION OF\n\t(SOURCE\n\t,SINK\n\t,SOURCEANDSINK\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowInstrumentTypeEnum = ENUMERATION OF\n\t(PRESSUREGAUGE\n\t,THERMOMETER\n\t,AMMETER\n\t,FREQUENCYMETER\n\t,POWERFACTORMETER\n\t,PHASEANGLEMETER\n\t,VOLTMETER_PEAK\n\t,VOLTMETER_RMS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowMeterTypeEnum = ENUMERATION OF\n\t(ENERGYMETER\n\t,GASMETER\n\t,OILMETER\n\t,WATERMETER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFootingTypeEnum = ENUMERATION OF\n\t(CAISSON_FOUNDATION\n\t,FOOTING_BEAM\n\t,PAD_FOOTING\n\t,PILE_CAP\n\t,STRIP_FOOTING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFurnitureTypeEnum = ENUMERATION OF\n\t(CHAIR\n\t,TABLE\n\t,DESK\n\t,BED\n\t,FILECABINET\n\t,SHELF\n\t,SOFA\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGeographicElementTypeEnum = ENUMERATION OF\n\t(TERRAIN\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGeometricProjectionEnum = ENUMERATION OF\n\t(GRAPH_VIEW\n\t,SKETCH_VIEW\n\t,MODEL_VIEW\n\t,PLAN_VIEW\n\t,REFLECTED_PLAN_VIEW\n\t,SECTION_VIEW\n\t,ELEVATION_VIEW\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGlobalOrLocalEnum = ENUMERATION OF\n\t(GLOBAL_COORDS\n\t,LOCAL_COORDS);\nEND_TYPE;\n\nTYPE IfcGridTypeEnum = ENUMERATION OF\n\t(RECTANGULAR\n\t,RADIAL\n\t,TRIANGULAR\n\t,IRREGULAR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcHeatExchangerTypeEnum = ENUMERATION OF\n\t(PLATE\n\t,SHELLANDTUBE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcHumidifierTypeEnum = ENUMERATION OF\n\t(STEAMINJECTION\n\t,ADIABATICAIRWASHER\n\t,ADIABATICPAN\n\t,ADIABATICWETTEDELEMENT\n\t,ADIABATICATOMIZING\n\t,ADIABATICULTRASONIC\n\t,ADIABATICRIGIDMEDIA\n\t,ADIABATICCOMPRESSEDAIRNOZZLE\n\t,ASSISTEDELECTRIC\n\t,ASSISTEDNATURALGAS\n\t,ASSISTEDPROPANE\n\t,ASSISTEDBUTANE\n\t,ASSISTEDSTEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcInterceptorTypeEnum = ENUMERATION OF\n\t(CYCLONIC\n\t,GREASE\n\t,OIL\n\t,PETROL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcInternalOrExternalEnum = ENUMERATION OF\n\t(INTERNAL\n\t,EXTERNAL\n\t,EXTERNAL_EARTH\n\t,EXTERNAL_WATER\n\t,EXTERNAL_FIRE\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcInventoryTypeEnum = ENUMERATION OF\n\t(ASSETINVENTORY\n\t,SPACEINVENTORY\n\t,FURNITUREINVENTORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcJunctionBoxTypeEnum = ENUMERATION OF\n\t(DATA\n\t,POWER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcKnotType = ENUMERATION OF\n\t(UNIFORM_KNOTS\n\t,QUASI_UNIFORM_KNOTS\n\t,PIECEWISE_BEZIER_KNOTS\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcLaborResourceTypeEnum = ENUMERATION OF\n\t(ADMINISTRATION\n\t,CARPENTRY\n\t,CLEANING\n\t,CONCRETE\n\t,DRYWALL\n\t,ELECTRIC\n\t,FINISHING\n\t,FLOORING\n\t,GENERAL\n\t,HVAC\n\t,LANDSCAPING\n\t,MASONRY\n\t,PAINTING\n\t,PAVING\n\t,PLUMBING\n\t,ROOFING\n\t,SITEGRADING\n\t,STEELWORK\n\t,SURVEYING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLampTypeEnum = ENUMERATION OF\n\t(COMPACTFLUORESCENT\n\t,FLUORESCENT\n\t,HALOGEN\n\t,HIGHPRESSUREMERCURY\n\t,HIGHPRESSURESODIUM\n\t,LED\n\t,METALHALIDE\n\t,OLED\n\t,TUNGSTENFILAMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLayerSetDirectionEnum = ENUMERATION OF\n\t(AXIS1\n\t,AXIS2\n\t,AXIS3);\nEND_TYPE;\n\nTYPE IfcLightDistributionCurveEnum = ENUMERATION OF\n\t(TYPE_A\n\t,TYPE_B\n\t,TYPE_C\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLightEmissionSourceEnum = ENUMERATION OF\n\t(COMPACTFLUORESCENT\n\t,FLUORESCENT\n\t,HIGHPRESSUREMERCURY\n\t,HIGHPRESSURESODIUM\n\t,LIGHTEMITTINGDIODE\n\t,LOWPRESSURESODIUM\n\t,LOWVOLTAGEHALOGEN\n\t,MAINVOLTAGEHALOGEN\n\t,METALHALIDE\n\t,TUNGSTENFILAMENT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLightFixtureTypeEnum = ENUMERATION OF\n\t(POINTSOURCE\n\t,DIRECTIONSOURCE\n\t,SECURITYLIGHTING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLoadGroupTypeEnum = ENUMERATION OF\n\t(LOAD_GROUP\n\t,LOAD_CASE\n\t,LOAD_COMBINATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLogicalOperatorEnum = ENUMERATION OF\n\t(LOGICALAND\n\t,LOGICALOR\n\t,LOGICALXOR\n\t,LOGICALNOTAND\n\t,LOGICALNOTOR);\nEND_TYPE;\n\nTYPE IfcMechanicalFastenerTypeEnum = ENUMERATION OF\n\t(ANCHORBOLT\n\t,BOLT\n\t,DOWEL\n\t,NAIL\n\t,NAILPLATE\n\t,RIVET\n\t,SCREW\n\t,SHEARCONNECTOR\n\t,STAPLE\n\t,STUDSHEARCONNECTOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcMedicalDeviceTypeEnum = ENUMERATION OF\n\t(AIRSTATION\n\t,FEEDAIRUNIT\n\t,OXYGENGENERATOR\n\t,OXYGENPLANT\n\t,VACUUMSTATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcMemberTypeEnum = ENUMERATION OF\n\t(BRACE\n\t,CHORD\n\t,COLLAR\n\t,MEMBER\n\t,MULLION\n\t,PLATE\n\t,POST\n\t,PURLIN\n\t,RAFTER\n\t,STRINGER\n\t,STRUT\n\t,STUD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcMotorConnectionTypeEnum = ENUMERATION OF\n\t(BELTDRIVE\n\t,COUPLING\n\t,DIRECTDRIVE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcNullStyle = ENUMERATION OF\n\t(NULL);\nEND_TYPE;\n\nTYPE IfcObjectTypeEnum = ENUMERATION OF\n\t(PRODUCT\n\t,PROCESS\n\t,CONTROL\n\t,RESOURCE\n\t,ACTOR\n\t,GROUP\n\t,PROJECT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcObjectiveEnum = ENUMERATION OF\n\t(CODECOMPLIANCE\n\t,CODEWAIVER\n\t,DESIGNINTENT\n\t,EXTERNAL\n\t,HEALTHANDSAFETY\n\t,MERGECONFLICT\n\t,MODELVIEW\n\t,PARAMETER\n\t,REQUIREMENT\n\t,SPECIFICATION\n\t,TRIGGERCONDITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcOccupantTypeEnum = ENUMERATION OF\n\t(ASSIGNEE\n\t,ASSIGNOR\n\t,LESSEE\n\t,LESSOR\n\t,LETTINGAGENT\n\t,OWNER\n\t,TENANT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcOpeningElementTypeEnum = ENUMERATION OF\n\t(OPENING\n\t,RECESS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcOutletTypeEnum = ENUMERATION OF\n\t(AUDIOVISUALOUTLET\n\t,COMMUNICATIONSOUTLET\n\t,POWEROUTLET\n\t,DATAOUTLET\n\t,TELEPHONEOUTLET\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPerformanceHistoryTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPermeableCoveringOperationEnum = ENUMERATION OF\n\t(GRILL\n\t,LOUVER\n\t,SCREEN\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPermitTypeEnum = ENUMERATION OF\n\t(ACCESS\n\t,BUILDING\n\t,WORK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPhysicalOrVirtualEnum = ENUMERATION OF\n\t(PHYSICAL\n\t,VIRTUAL\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPileConstructionEnum = ENUMERATION OF\n\t(CAST_IN_PLACE\n\t,COMPOSITE\n\t,PRECAST_CONCRETE\n\t,PREFAB_STEEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPileTypeEnum = ENUMERATION OF\n\t(BORED\n\t,DRIVEN\n\t,JETGROUTING\n\t,COHESION\n\t,FRICTION\n\t,SUPPORT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPipeFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CONNECTOR\n\t,ENTRY\n\t,EXIT\n\t,JUNCTION\n\t,OBSTRUCTION\n\t,TRANSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPipeSegmentTypeEnum = ENUMERATION OF\n\t(CULVERT\n\t,FLEXIBLESEGMENT\n\t,RIGIDSEGMENT\n\t,GUTTER\n\t,SPOOL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPlateTypeEnum = ENUMERATION OF\n\t(CURTAIN_PANEL\n\t,SHEET\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPreferredSurfaceCurveRepresentation = ENUMERATION OF\n\t(CURVE3D\n\t,PCURVE_S1\n\t,PCURVE_S2);\nEND_TYPE;\n\nTYPE IfcProcedureTypeEnum = ENUMERATION OF\n\t(ADVICE_CAUTION\n\t,ADVICE_NOTE\n\t,ADVICE_WARNING\n\t,CALIBRATION\n\t,DIAGNOSTIC\n\t,SHUTDOWN\n\t,STARTUP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProfileTypeEnum = ENUMERATION OF\n\t(CURVE\n\t,AREA);\nEND_TYPE;\n\nTYPE IfcProjectOrderTypeEnum = ENUMERATION OF\n\t(CHANGEORDER\n\t,MAINTENANCEWORKORDER\n\t,MOVEORDER\n\t,PURCHASEORDER\n\t,WORKORDER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProjectedOrTrueLengthEnum = ENUMERATION OF\n\t(PROJECTED_LENGTH\n\t,TRUE_LENGTH);\nEND_TYPE;\n\nTYPE IfcProjectionElementTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPropertySetTemplateTypeEnum = ENUMERATION OF\n\t(PSET_TYPEDRIVENONLY\n\t,PSET_TYPEDRIVENOVERRIDE\n\t,PSET_OCCURRENCEDRIVEN\n\t,PSET_PERFORMANCEDRIVEN\n\t,QTO_TYPEDRIVENONLY\n\t,QTO_TYPEDRIVENOVERRIDE\n\t,QTO_OCCURRENCEDRIVEN\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProtectiveDeviceTrippingUnitTypeEnum = ENUMERATION OF\n\t(ELECTRONIC\n\t,ELECTROMAGNETIC\n\t,RESIDUALCURRENT\n\t,THERMAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProtectiveDeviceTypeEnum = ENUMERATION OF\n\t(CIRCUITBREAKER\n\t,EARTHLEAKAGECIRCUITBREAKER\n\t,EARTHINGSWITCH\n\t,FUSEDISCONNECTOR\n\t,RESIDUALCURRENTCIRCUITBREAKER\n\t,RESIDUALCURRENTSWITCH\n\t,VARISTOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPumpTypeEnum = ENUMERATION OF\n\t(CIRCULATOR\n\t,ENDSUCTION\n\t,SPLITCASE\n\t,SUBMERSIBLEPUMP\n\t,SUMPPUMP\n\t,VERTICALINLINE\n\t,VERTICALTURBINE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRailingTypeEnum = ENUMERATION OF\n\t(HANDRAIL\n\t,GUARDRAIL\n\t,BALUSTRADE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRampFlightTypeEnum = ENUMERATION OF\n\t(STRAIGHT\n\t,SPIRAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRampTypeEnum = ENUMERATION OF\n\t(STRAIGHT_RUN_RAMP\n\t,TWO_STRAIGHT_RUN_RAMP\n\t,QUARTER_TURN_RAMP\n\t,TWO_QUARTER_TURN_RAMP\n\t,HALF_TURN_RAMP\n\t,SPIRAL_RAMP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRecurrenceTypeEnum = ENUMERATION OF\n\t(DAILY\n\t,WEEKLY\n\t,MONTHLY_BY_DAY_OF_MONTH\n\t,MONTHLY_BY_POSITION\n\t,BY_DAY_COUNT\n\t,BY_WEEKDAY_COUNT\n\t,YEARLY_BY_DAY_OF_MONTH\n\t,YEARLY_BY_POSITION);\nEND_TYPE;\n\nTYPE IfcReflectanceMethodEnum = ENUMERATION OF\n\t(BLINN\n\t,FLAT\n\t,GLASS\n\t,MATT\n\t,METAL\n\t,MIRROR\n\t,PHONG\n\t,PLASTIC\n\t,STRAUSS\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReinforcingBarRoleEnum = ENUMERATION OF\n\t(MAIN\n\t,SHEAR\n\t,LIGATURE\n\t,STUD\n\t,PUNCHING\n\t,EDGE\n\t,RING\n\t,ANCHORING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReinforcingBarSurfaceEnum = ENUMERATION OF\n\t(PLAIN\n\t,TEXTURED);\nEND_TYPE;\n\nTYPE IfcReinforcingBarTypeEnum = ENUMERATION OF\n\t(ANCHORING\n\t,EDGE\n\t,LIGATURE\n\t,MAIN\n\t,PUNCHING\n\t,RING\n\t,SHEAR\n\t,STUD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReinforcingMeshTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRoleEnum = ENUMERATION OF\n\t(SUPPLIER\n\t,MANUFACTURER\n\t,CONTRACTOR\n\t,SUBCONTRACTOR\n\t,ARCHITECT\n\t,STRUCTURALENGINEER\n\t,COSTENGINEER\n\t,CLIENT\n\t,BUILDINGOWNER\n\t,BUILDINGOPERATOR\n\t,MECHANICALENGINEER\n\t,ELECTRICALENGINEER\n\t,PROJECTMANAGER\n\t,FACILITIESMANAGER\n\t,CIVILENGINEER\n\t,COMMISSIONINGENGINEER\n\t,ENGINEER\n\t,OWNER\n\t,CONSULTANT\n\t,CONSTRUCTIONMANAGER\n\t,FIELDCONSTRUCTIONMANAGER\n\t,RESELLER\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcRoofTypeEnum = ENUMERATION OF\n\t(FLAT_ROOF\n\t,SHED_ROOF\n\t,GABLE_ROOF\n\t,HIP_ROOF\n\t,HIPPED_GABLE_ROOF\n\t,GAMBREL_ROOF\n\t,MANSARD_ROOF\n\t,BARREL_ROOF\n\t,RAINBOW_ROOF\n\t,BUTTERFLY_ROOF\n\t,PAVILION_ROOF\n\t,DOME_ROOF\n\t,FREEFORM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSIPrefix = ENUMERATION OF\n\t(EXA\n\t,PETA\n\t,TERA\n\t,GIGA\n\t,MEGA\n\t,KILO\n\t,HECTO\n\t,DECA\n\t,DECI\n\t,CENTI\n\t,MILLI\n\t,MICRO\n\t,NANO\n\t,PICO\n\t,FEMTO\n\t,ATTO);\nEND_TYPE;\n\nTYPE IfcSIUnitName = ENUMERATION OF\n\t(AMPERE\n\t,BECQUEREL\n\t,CANDELA\n\t,COULOMB\n\t,CUBIC_METRE\n\t,DEGREE_CELSIUS\n\t,FARAD\n\t,GRAM\n\t,GRAY\n\t,HENRY\n\t,HERTZ\n\t,JOULE\n\t,KELVIN\n\t,LUMEN\n\t,LUX\n\t,METRE\n\t,MOLE\n\t,NEWTON\n\t,OHM\n\t,PASCAL\n\t,RADIAN\n\t,SECOND\n\t,SIEMENS\n\t,SIEVERT\n\t,SQUARE_METRE\n\t,STERADIAN\n\t,TESLA\n\t,VOLT\n\t,WATT\n\t,WEBER);\nEND_TYPE;\n\nTYPE IfcSanitaryTerminalTypeEnum = ENUMERATION OF\n\t(BATH\n\t,BIDET\n\t,CISTERN\n\t,SHOWER\n\t,SINK\n\t,SANITARYFOUNTAIN\n\t,TOILETPAN\n\t,URINAL\n\t,WASHHANDBASIN\n\t,WCSEAT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSectionTypeEnum = ENUMERATION OF\n\t(UNIFORM\n\t,TAPERED);\nEND_TYPE;\n\nTYPE IfcSensorTypeEnum = ENUMERATION OF\n\t(COSENSOR\n\t,CO2SENSOR\n\t,CONDUCTANCESENSOR\n\t,CONTACTSENSOR\n\t,FIRESENSOR\n\t,FLOWSENSOR\n\t,FROSTSENSOR\n\t,GASSENSOR\n\t,HEATSENSOR\n\t,HUMIDITYSENSOR\n\t,IDENTIFIERSENSOR\n\t,IONCONCENTRATIONSENSOR\n\t,LEVELSENSOR\n\t,LIGHTSENSOR\n\t,MOISTURESENSOR\n\t,MOVEMENTSENSOR\n\t,PHSENSOR\n\t,PRESSURESENSOR\n\t,RADIATIONSENSOR\n\t,RADIOACTIVITYSENSOR\n\t,SMOKESENSOR\n\t,SOUNDSENSOR\n\t,TEMPERATURESENSOR\n\t,WINDSENSOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSequenceEnum = ENUMERATION OF\n\t(START_START\n\t,START_FINISH\n\t,FINISH_START\n\t,FINISH_FINISH\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcShadingDeviceTypeEnum = ENUMERATION OF\n\t(JALOUSIE\n\t,SHUTTER\n\t,AWNING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSimplePropertyTemplateTypeEnum = ENUMERATION OF\n\t(P_SINGLEVALUE\n\t,P_ENUMERATEDVALUE\n\t,P_BOUNDEDVALUE\n\t,P_LISTVALUE\n\t,P_TABLEVALUE\n\t,P_REFERENCEVALUE\n\t,Q_LENGTH\n\t,Q_AREA\n\t,Q_VOLUME\n\t,Q_COUNT\n\t,Q_WEIGHT\n\t,Q_TIME);\nEND_TYPE;\n\nTYPE IfcSlabTypeEnum = ENUMERATION OF\n\t(FLOOR\n\t,ROOF\n\t,LANDING\n\t,BASESLAB\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSolarDeviceTypeEnum = ENUMERATION OF\n\t(SOLARCOLLECTOR\n\t,SOLARPANEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSpaceHeaterTypeEnum = ENUMERATION OF\n\t(CONVECTOR\n\t,RADIATOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSpaceTypeEnum = ENUMERATION OF\n\t(SPACE\n\t,PARKING\n\t,GFA\n\t,INTERNAL\n\t,EXTERNAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSpatialZoneTypeEnum = ENUMERATION OF\n\t(CONSTRUCTION\n\t,FIRESAFETY\n\t,LIGHTING\n\t,OCCUPANCY\n\t,SECURITY\n\t,THERMAL\n\t,TRANSPORT\n\t,VENTILATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStackTerminalTypeEnum = ENUMERATION OF\n\t(BIRDCAGE\n\t,COWL\n\t,RAINWATERHOPPER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStairFlightTypeEnum = ENUMERATION OF\n\t(STRAIGHT\n\t,WINDER\n\t,SPIRAL\n\t,CURVED\n\t,FREEFORM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStairTypeEnum = ENUMERATION OF\n\t(STRAIGHT_RUN_STAIR\n\t,TWO_STRAIGHT_RUN_STAIR\n\t,QUARTER_WINDING_STAIR\n\t,QUARTER_TURN_STAIR\n\t,HALF_WINDING_STAIR\n\t,HALF_TURN_STAIR\n\t,TWO_QUARTER_WINDING_STAIR\n\t,TWO_QUARTER_TURN_STAIR\n\t,THREE_QUARTER_WINDING_STAIR\n\t,THREE_QUARTER_TURN_STAIR\n\t,SPIRAL_STAIR\n\t,DOUBLE_RETURN_STAIR\n\t,CURVED_RUN_STAIR\n\t,TWO_CURVED_RUN_STAIR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStateEnum = ENUMERATION OF\n\t(READWRITE\n\t,READONLY\n\t,LOCKED\n\t,READWRITELOCKED\n\t,READONLYLOCKED);\nEND_TYPE;\n\nTYPE IfcStructuralCurveActivityTypeEnum = ENUMERATION OF\n\t(CONST\n\t,LINEAR\n\t,POLYGONAL\n\t,EQUIDISTANT\n\t,SINUS\n\t,PARABOLA\n\t,DISCRETE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStructuralCurveMemberTypeEnum = ENUMERATION OF\n\t(RIGID_JOINED_MEMBER\n\t,PIN_JOINED_MEMBER\n\t,CABLE\n\t,TENSION_MEMBER\n\t,COMPRESSION_MEMBER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStructuralSurfaceActivityTypeEnum = ENUMERATION OF\n\t(CONST\n\t,BILINEAR\n\t,DISCRETE\n\t,ISOCONTOUR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStructuralSurfaceMemberTypeEnum = ENUMERATION OF\n\t(BENDING_ELEMENT\n\t,MEMBRANE_ELEMENT\n\t,SHELL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSubContractResourceTypeEnum = ENUMERATION OF\n\t(PURCHASE\n\t,WORK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSurfaceFeatureTypeEnum = ENUMERATION OF\n\t(MARK\n\t,TAG\n\t,TREATMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSurfaceSide = ENUMERATION OF\n\t(POSITIVE\n\t,NEGATIVE\n\t,BOTH);\nEND_TYPE;\n\nTYPE IfcSwitchingDeviceTypeEnum = ENUMERATION OF\n\t(CONTACTOR\n\t,DIMMERSWITCH\n\t,EMERGENCYSTOP\n\t,KEYPAD\n\t,MOMENTARYSWITCH\n\t,SELECTORSWITCH\n\t,STARTER\n\t,SWITCHDISCONNECTOR\n\t,TOGGLESWITCH\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSystemFurnitureElementTypeEnum = ENUMERATION OF\n\t(PANEL\n\t,WORKSURFACE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTankTypeEnum = ENUMERATION OF\n\t(BASIN\n\t,BREAKPRESSURE\n\t,EXPANSION\n\t,FEEDANDEXPANSION\n\t,PRESSUREVESSEL\n\t,STORAGE\n\t,VESSEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTaskDurationEnum = ENUMERATION OF\n\t(ELAPSEDTIME\n\t,WORKTIME\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTaskTypeEnum = ENUMERATION OF\n\t(ATTENDANCE\n\t,CONSTRUCTION\n\t,DEMOLITION\n\t,DISMANTLE\n\t,DISPOSAL\n\t,INSTALLATION\n\t,LOGISTIC\n\t,MAINTENANCE\n\t,MOVE\n\t,OPERATION\n\t,REMOVAL\n\t,RENOVATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTendonAnchorTypeEnum = ENUMERATION OF\n\t(COUPLER\n\t,FIXED_END\n\t,TENSIONING_END\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTendonTypeEnum = ENUMERATION OF\n\t(BAR\n\t,COATED\n\t,STRAND\n\t,WIRE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTextPath = ENUMERATION OF\n\t(LEFT\n\t,RIGHT\n\t,UP\n\t,DOWN);\nEND_TYPE;\n\nTYPE IfcTimeSeriesDataTypeEnum = ENUMERATION OF\n\t(CONTINUOUS\n\t,DISCRETE\n\t,DISCRETEBINARY\n\t,PIECEWISEBINARY\n\t,PIECEWISECONSTANT\n\t,PIECEWISECONTINUOUS\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTransformerTypeEnum = ENUMERATION OF\n\t(CURRENT\n\t,FREQUENCY\n\t,INVERTER\n\t,RECTIFIER\n\t,VOLTAGE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTransitionCode = ENUMERATION OF\n\t(DISCONTINUOUS\n\t,CONTINUOUS\n\t,CONTSAMEGRADIENT\n\t,CONTSAMEGRADIENTSAMECURVATURE);\nEND_TYPE;\n\nTYPE IfcTransportElementTypeEnum = ENUMERATION OF\n\t(ELEVATOR\n\t,ESCALATOR\n\t,MOVINGWALKWAY\n\t,CRANEWAY\n\t,LIFTINGGEAR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTrimmingPreference = ENUMERATION OF\n\t(CARTESIAN\n\t,PARAMETER\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcTubeBundleTypeEnum = ENUMERATION OF\n\t(FINNED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcUnitEnum = ENUMERATION OF\n\t(ABSORBEDDOSEUNIT\n\t,AMOUNTOFSUBSTANCEUNIT\n\t,AREAUNIT\n\t,DOSEEQUIVALENTUNIT\n\t,ELECTRICCAPACITANCEUNIT\n\t,ELECTRICCHARGEUNIT\n\t,ELECTRICCONDUCTANCEUNIT\n\t,ELECTRICCURRENTUNIT\n\t,ELECTRICRESISTANCEUNIT\n\t,ELECTRICVOLTAGEUNIT\n\t,ENERGYUNIT\n\t,FORCEUNIT\n\t,FREQUENCYUNIT\n\t,ILLUMINANCEUNIT\n\t,INDUCTANCEUNIT\n\t,LENGTHUNIT\n\t,LUMINOUSFLUXUNIT\n\t,LUMINOUSINTENSITYUNIT\n\t,MAGNETICFLUXDENSITYUNIT\n\t,MAGNETICFLUXUNIT\n\t,MASSUNIT\n\t,PLANEANGLEUNIT\n\t,POWERUNIT\n\t,PRESSUREUNIT\n\t,RADIOACTIVITYUNIT\n\t,SOLIDANGLEUNIT\n\t,THERMODYNAMICTEMPERATUREUNIT\n\t,TIMEUNIT\n\t,VOLUMEUNIT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcUnitaryControlElementTypeEnum = ENUMERATION OF\n\t(ALARMPANEL\n\t,CONTROLPANEL\n\t,GASDETECTIONPANEL\n\t,INDICATORPANEL\n\t,MIMICPANEL\n\t,HUMIDISTAT\n\t,THERMOSTAT\n\t,WEATHERSTATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcUnitaryEquipmentTypeEnum = ENUMERATION OF\n\t(AIRHANDLER\n\t,AIRCONDITIONINGUNIT\n\t,DEHUMIDIFIER\n\t,SPLITSYSTEM\n\t,ROOFTOPUNIT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcValveTypeEnum = ENUMERATION OF\n\t(AIRRELEASE\n\t,ANTIVACUUM\n\t,CHANGEOVER\n\t,CHECK\n\t,COMMISSIONING\n\t,DIVERTING\n\t,DRAWOFFCOCK\n\t,DOUBLECHECK\n\t,DOUBLEREGULATING\n\t,FAUCET\n\t,FLUSHING\n\t,GASCOCK\n\t,GASTAP\n\t,ISOLATING\n\t,MIXING\n\t,PRESSUREREDUCING\n\t,PRESSURERELIEF\n\t,REGULATING\n\t,SAFETYCUTOFF\n\t,STEAMTRAP\n\t,STOPCOCK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcVibrationIsolatorTypeEnum = ENUMERATION OF\n\t(COMPRESSION\n\t,SPRING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcVoidingFeatureTypeEnum = ENUMERATION OF\n\t(CUTOUT\n\t,NOTCH\n\t,HOLE\n\t,MITER\n\t,CHAMFER\n\t,EDGE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWallTypeEnum = ENUMERATION OF\n\t(MOVABLE\n\t,PARAPET\n\t,PARTITIONING\n\t,PLUMBINGWALL\n\t,SHEAR\n\t,SOLIDWALL\n\t,STANDARD\n\t,POLYGONAL\n\t,ELEMENTEDWALL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWasteTerminalTypeEnum = ENUMERATION OF\n\t(FLOORTRAP\n\t,FLOORWASTE\n\t,GULLYSUMP\n\t,GULLYTRAP\n\t,ROOFDRAIN\n\t,WASTEDISPOSALUNIT\n\t,WASTETRAP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowPanelOperationEnum = ENUMERATION OF\n\t(SIDEHUNGRIGHTHAND\n\t,SIDEHUNGLEFTHAND\n\t,TILTANDTURNRIGHTHAND\n\t,TILTANDTURNLEFTHAND\n\t,TOPHUNG\n\t,BOTTOMHUNG\n\t,PIVOTHORIZONTAL\n\t,PIVOTVERTICAL\n\t,SLIDINGHORIZONTAL\n\t,SLIDINGVERTICAL\n\t,REMOVABLECASEMENT\n\t,FIXEDCASEMENT\n\t,OTHEROPERATION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowPanelPositionEnum = ENUMERATION OF\n\t(LEFT\n\t,MIDDLE\n\t,RIGHT\n\t,BOTTOM\n\t,TOP\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowStyleConstructionEnum = ENUMERATION OF\n\t(ALUMINIUM\n\t,HIGH_GRADE_STEEL\n\t,STEEL\n\t,WOOD\n\t,ALUMINIUM_WOOD\n\t,PLASTIC\n\t,OTHER_CONSTRUCTION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowStyleOperationEnum = ENUMERATION OF\n\t(SINGLE_PANEL\n\t,DOUBLE_PANEL_VERTICAL\n\t,DOUBLE_PANEL_HORIZONTAL\n\t,TRIPLE_PANEL_VERTICAL\n\t,TRIPLE_PANEL_BOTTOM\n\t,TRIPLE_PANEL_TOP\n\t,TRIPLE_PANEL_LEFT\n\t,TRIPLE_PANEL_RIGHT\n\t,TRIPLE_PANEL_HORIZONTAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowTypeEnum = ENUMERATION OF\n\t(WINDOW\n\t,SKYLIGHT\n\t,LIGHTDOME\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowTypePartitioningEnum = ENUMERATION OF\n\t(SINGLE_PANEL\n\t,DOUBLE_PANEL_VERTICAL\n\t,DOUBLE_PANEL_HORIZONTAL\n\t,TRIPLE_PANEL_VERTICAL\n\t,TRIPLE_PANEL_BOTTOM\n\t,TRIPLE_PANEL_TOP\n\t,TRIPLE_PANEL_LEFT\n\t,TRIPLE_PANEL_RIGHT\n\t,TRIPLE_PANEL_HORIZONTAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWorkCalendarTypeEnum = ENUMERATION OF\n\t(FIRSTSHIFT\n\t,SECONDSHIFT\n\t,THIRDSHIFT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWorkPlanTypeEnum = ENUMERATION OF\n\t(ACTUAL\n\t,BASELINE\n\t,PLANNED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWorkScheduleTypeEnum = ENUMERATION OF\n\t(ACTUAL\n\t,BASELINE\n\t,PLANNED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActorSelect = SELECT\n\t(IfcOrganization\n\t,IfcPerson\n\t,IfcPersonAndOrganization);\nEND_TYPE;\n\nTYPE IfcAppliedValueSelect = SELECT\n\t(IfcMeasureWithUnit\n\t,IfcReference\n\t,IfcValue);\nEND_TYPE;\n\nTYPE IfcAxis2Placement = SELECT\n\t(IfcAxis2Placement2D\n\t,IfcAxis2Placement3D);\nEND_TYPE;\n\nTYPE IfcBendingParameterSelect = SELECT\n\t(IfcLengthMeasure\n\t,IfcPlaneAngleMeasure);\nEND_TYPE;\n\nTYPE IfcBooleanOperand = SELECT\n\t(IfcBooleanResult\n\t,IfcCsgPrimitive3D\n\t,IfcHalfSpaceSolid\n\t,IfcSolidModel\n\t,IfcTessellatedFaceSet);\nEND_TYPE;\n\nTYPE IfcClassificationReferenceSelect = SELECT\n\t(IfcClassification\n\t,IfcClassificationReference);\nEND_TYPE;\n\nTYPE IfcClassificationSelect = SELECT\n\t(IfcClassification\n\t,IfcClassificationReference);\nEND_TYPE;\n\nTYPE IfcColour = SELECT\n\t(IfcColourSpecification\n\t,IfcPreDefinedColour);\nEND_TYPE;\n\nTYPE IfcColourOrFactor = SELECT\n\t(IfcColourRgb\n\t,IfcNormalisedRatioMeasure);\nEND_TYPE;\n\nTYPE IfcCoordinateReferenceSystemSelect = SELECT\n\t(IfcCoordinateReferenceSystem\n\t,IfcGeometricRepresentationContext);\nEND_TYPE;\n\nTYPE IfcCsgSelect = SELECT\n\t(IfcBooleanResult\n\t,IfcCsgPrimitive3D);\nEND_TYPE;\n\nTYPE IfcCurveFontOrScaledCurveFontSelect = SELECT\n\t(IfcCurveStyleFontAndScaling\n\t,IfcCurveStyleFontSelect);\nEND_TYPE;\n\nTYPE IfcCurveOnSurface = SELECT\n\t(IfcCompositeCurveOnSurface\n\t,IfcPcurve\n\t,IfcSurfaceCurve);\nEND_TYPE;\n\nTYPE IfcCurveOrEdgeCurve = SELECT\n\t(IfcBoundedCurve\n\t,IfcEdgeCurve);\nEND_TYPE;\n\nTYPE IfcCurveStyleFontSelect = SELECT\n\t(IfcCurveStyleFont\n\t,IfcPreDefinedCurveFont);\nEND_TYPE;\n\nTYPE IfcDefinitionSelect = SELECT\n\t(IfcObjectDefinition\n\t,IfcPropertyDefinition);\nEND_TYPE;\n\nTYPE IfcDerivedMeasureValue = SELECT\n\t(IfcAbsorbedDoseMeasure\n\t,IfcAccelerationMeasure\n\t,IfcAngularVelocityMeasure\n\t,IfcAreaDensityMeasure\n\t,IfcCompoundPlaneAngleMeasure\n\t,IfcCurvatureMeasure\n\t,IfcDoseEquivalentMeasure\n\t,IfcDynamicViscosityMeasure\n\t,IfcElectricCapacitanceMeasure\n\t,IfcElectricChargeMeasure\n\t,IfcElectricConductanceMeasure\n\t,IfcElectricResistanceMeasure\n\t,IfcElectricVoltageMeasure\n\t,IfcEnergyMeasure\n\t,IfcForceMeasure\n\t,IfcFrequencyMeasure\n\t,IfcHeatFluxDensityMeasure\n\t,IfcHeatingValueMeasure\n\t,IfcIlluminanceMeasure\n\t,IfcInductanceMeasure\n\t,IfcIntegerCountRateMeasure\n\t,IfcIonConcentrationMeasure\n\t,IfcIsothermalMoistureCapacityMeasure\n\t,IfcKinematicViscosityMeasure\n\t,IfcLinearForceMeasure\n\t,IfcLinearMomentMeasure\n\t,IfcLinearStiffnessMeasure\n\t,IfcLinearVelocityMeasure\n\t,IfcLuminousFluxMeasure\n\t,IfcLuminousIntensityDistributionMeasure\n\t,IfcMagneticFluxDensityMeasure\n\t,IfcMagneticFluxMeasure\n\t,IfcMassDensityMeasure\n\t,IfcMassFlowRateMeasure\n\t,IfcMassPerLengthMeasure\n\t,IfcModulusOfElasticityMeasure\n\t,IfcModulusOfLinearSubgradeReactionMeasure\n\t,IfcModulusOfRotationalSubgradeReactionMeasure\n\t,IfcModulusOfSubgradeReactionMeasure\n\t,IfcMoistureDiffusivityMeasure\n\t,IfcMolecularWeightMeasure\n\t,IfcMomentOfInertiaMeasure\n\t,IfcMonetaryMeasure\n\t,IfcPHMeasure\n\t,IfcPlanarForceMeasure\n\t,IfcPowerMeasure\n\t,IfcPressureMeasure\n\t,IfcRadioActivityMeasure\n\t,IfcRotationalFrequencyMeasure\n\t,IfcRotationalMassMeasure\n\t,IfcRotationalStiffnessMeasure\n\t,IfcSectionModulusMeasure\n\t,IfcSectionalAreaIntegralMeasure\n\t,IfcShearModulusMeasure\n\t,IfcSoundPowerLevelMeasure\n\t,IfcSoundPowerMeasure\n\t,IfcSoundPressureLevelMeasure\n\t,IfcSoundPressureMeasure\n\t,IfcSpecificHeatCapacityMeasure\n\t,IfcTemperatureGradientMeasure\n\t,IfcTemperatureRateOfChangeMeasure\n\t,IfcThermalAdmittanceMeasure\n\t,IfcThermalConductivityMeasure\n\t,IfcThermalExpansionCoefficientMeasure\n\t,IfcThermalResistanceMeasure\n\t,IfcThermalTransmittanceMeasure\n\t,IfcTorqueMeasure\n\t,IfcVaporPermeabilityMeasure\n\t,IfcVolumetricFlowRateMeasure\n\t,IfcWarpingConstantMeasure\n\t,IfcWarpingMomentMeasure);\nEND_TYPE;\n\nTYPE IfcDocumentSelect = SELECT\n\t(IfcDocumentInformation\n\t,IfcDocumentReference);\nEND_TYPE;\n\nTYPE IfcFillStyleSelect = SELECT\n\t(IfcColour\n\t,IfcExternallyDefinedHatchStyle\n\t,IfcFillAreaStyleHatching\n\t,IfcFillAreaStyleTiles);\nEND_TYPE;\n\nTYPE IfcGeometricSetSelect = SELECT\n\t(IfcCurve\n\t,IfcPoint\n\t,IfcSurface);\nEND_TYPE;\n\nTYPE IfcGridPlacementDirectionSelect = SELECT\n\t(IfcDirection\n\t,IfcVirtualGridIntersection);\nEND_TYPE;\n\nTYPE IfcHatchLineDistanceSelect = SELECT\n\t(IfcPositiveLengthMeasure\n\t,IfcVector);\nEND_TYPE;\n\nTYPE IfcLayeredItem = SELECT\n\t(IfcRepresentation\n\t,IfcRepresentationItem);\nEND_TYPE;\n\nTYPE IfcLibrarySelect = SELECT\n\t(IfcLibraryInformation\n\t,IfcLibraryReference);\nEND_TYPE;\n\nTYPE IfcLightDistributionDataSourceSelect = SELECT\n\t(IfcExternalReference\n\t,IfcLightIntensityDistribution);\nEND_TYPE;\n\nTYPE IfcMaterialSelect = SELECT\n\t(IfcMaterialDefinition\n\t,IfcMaterialList\n\t,IfcMaterialUsageDefinition);\nEND_TYPE;\n\nTYPE IfcMeasureValue = SELECT\n\t(IfcAmountOfSubstanceMeasure\n\t,IfcAreaMeasure\n\t,IfcComplexNumber\n\t,IfcContextDependentMeasure\n\t,IfcCountMeasure\n\t,IfcDescriptiveMeasure\n\t,IfcElectricCurrentMeasure\n\t,IfcLengthMeasure\n\t,IfcLuminousIntensityMeasure\n\t,IfcMassMeasure\n\t,IfcNonNegativeLengthMeasure\n\t,IfcNormalisedRatioMeasure\n\t,IfcNumericMeasure\n\t,IfcParameterValue\n\t,IfcPlaneAngleMeasure\n\t,IfcPositiveLengthMeasure\n\t,IfcPositivePlaneAngleMeasure\n\t,IfcPositiveRatioMeasure\n\t,IfcRatioMeasure\n\t,IfcSolidAngleMeasure\n\t,IfcThermodynamicTemperatureMeasure\n\t,IfcTimeMeasure\n\t,IfcVolumeMeasure);\nEND_TYPE;\n\nTYPE IfcMetricValueSelect = SELECT\n\t(IfcAppliedValue\n\t,IfcMeasureWithUnit\n\t,IfcReference\n\t,IfcTable\n\t,IfcTimeSeries\n\t,IfcValue);\nEND_TYPE;\n\nTYPE IfcModulusOfRotationalSubgradeReactionSelect = SELECT\n\t(IfcBoolean\n\t,IfcModulusOfRotationalSubgradeReactionMeasure);\nEND_TYPE;\n\nTYPE IfcModulusOfSubgradeReactionSelect = SELECT\n\t(IfcBoolean\n\t,IfcModulusOfSubgradeReactionMeasure);\nEND_TYPE;\n\nTYPE IfcModulusOfTranslationalSubgradeReactionSelect = SELECT\n\t(IfcBoolean\n\t,IfcModulusOfLinearSubgradeReactionMeasure);\nEND_TYPE;\n\nTYPE IfcObjectReferenceSelect = SELECT\n\t(IfcAddress\n\t,IfcAppliedValue\n\t,IfcExternalReference\n\t,IfcMaterialDefinition\n\t,IfcOrganization\n\t,IfcPerson\n\t,IfcPersonAndOrganization\n\t,IfcTable\n\t,IfcTimeSeries);\nEND_TYPE;\n\nTYPE IfcPointOrVertexPoint = SELECT\n\t(IfcPoint\n\t,IfcVertexPoint);\nEND_TYPE;\n\nTYPE IfcPresentationStyleSelect = SELECT\n\t(IfcCurveStyle\n\t,IfcFillAreaStyle\n\t,IfcNullStyle\n\t,IfcSurfaceStyle\n\t,IfcTextStyle);\nEND_TYPE;\n\nTYPE IfcProcessSelect = SELECT\n\t(IfcProcess\n\t,IfcTypeProcess);\nEND_TYPE;\n\nTYPE IfcProductRepresentationSelect = SELECT\n\t(IfcProductDefinitionShape\n\t,IfcRepresentationMap);\nEND_TYPE;\n\nTYPE IfcProductSelect = SELECT\n\t(IfcProduct\n\t,IfcTypeProduct);\nEND_TYPE;\n\nTYPE IfcPropertySetDefinitionSelect = SELECT\n\t(IfcPropertySetDefinition\n\t,IfcPropertySetDefinitionSet);\nEND_TYPE;\n\nTYPE IfcResourceObjectSelect = SELECT\n\t(IfcActorRole\n\t,IfcAppliedValue\n\t,IfcApproval\n\t,IfcConstraint\n\t,IfcContextDependentUnit\n\t,IfcConversionBasedUnit\n\t,IfcExternalInformation\n\t,IfcExternalReference\n\t,IfcMaterialDefinition\n\t,IfcOrganization\n\t,IfcPerson\n\t,IfcPersonAndOrganization\n\t,IfcPhysicalQuantity\n\t,IfcProfileDef\n\t,IfcPropertyAbstraction\n\t,IfcTimeSeries);\nEND_TYPE;\n\nTYPE IfcResourceSelect = SELECT\n\t(IfcResource\n\t,IfcTypeResource);\nEND_TYPE;\n\nTYPE IfcRotationalStiffnessSelect = SELECT\n\t(IfcBoolean\n\t,IfcRotationalStiffnessMeasure);\nEND_TYPE;\n\nTYPE IfcSegmentIndexSelect = SELECT\n\t(IfcArcIndex\n\t,IfcLineIndex);\nEND_TYPE;\n\nTYPE IfcShell = SELECT\n\t(IfcClosedShell\n\t,IfcOpenShell);\nEND_TYPE;\n\nTYPE IfcSimpleValue = SELECT\n\t(IfcBinary\n\t,IfcBoolean\n\t,IfcDate\n\t,IfcDateTime\n\t,IfcDuration\n\t,IfcIdentifier\n\t,IfcInteger\n\t,IfcLabel\n\t,IfcLogical\n\t,IfcPositiveInteger\n\t,IfcReal\n\t,IfcText\n\t,IfcTime\n\t,IfcTimeStamp);\nEND_TYPE;\n\nTYPE IfcSizeSelect = SELECT\n\t(IfcDescriptiveMeasure\n\t,IfcLengthMeasure\n\t,IfcNormalisedRatioMeasure\n\t,IfcPositiveLengthMeasure\n\t,IfcPositiveRatioMeasure\n\t,IfcRatioMeasure);\nEND_TYPE;\n\nTYPE IfcSolidOrShell = SELECT\n\t(IfcClosedShell\n\t,IfcSolidModel);\nEND_TYPE;\n\nTYPE IfcSpaceBoundarySelect = SELECT\n\t(IfcExternalSpatialElement\n\t,IfcSpace);\nEND_TYPE;\n\nTYPE IfcSpecularHighlightSelect = SELECT\n\t(IfcSpecularExponent\n\t,IfcSpecularRoughness);\nEND_TYPE;\n\nTYPE IfcStructuralActivityAssignmentSelect = SELECT\n\t(IfcElement\n\t,IfcStructuralItem);\nEND_TYPE;\n\nTYPE IfcStyleAssignmentSelect = SELECT\n\t(IfcPresentationStyle\n\t,IfcPresentationStyleAssignment);\nEND_TYPE;\n\nTYPE IfcSurfaceOrFaceSurface = SELECT\n\t(IfcFaceBasedSurfaceModel\n\t,IfcFaceSurface\n\t,IfcSurface);\nEND_TYPE;\n\nTYPE IfcSurfaceStyleElementSelect = SELECT\n\t(IfcExternallyDefinedSurfaceStyle\n\t,IfcSurfaceStyleLighting\n\t,IfcSurfaceStyleRefraction\n\t,IfcSurfaceStyleShading\n\t,IfcSurfaceStyleWithTextures);\nEND_TYPE;\n\nTYPE IfcTextFontSelect = SELECT\n\t(IfcExternallyDefinedTextFont\n\t,IfcPreDefinedTextFont);\nEND_TYPE;\n\nTYPE IfcTimeOrRatioSelect = SELECT\n\t(IfcDuration\n\t,IfcRatioMeasure);\nEND_TYPE;\n\nTYPE IfcTranslationalStiffnessSelect = SELECT\n\t(IfcBoolean\n\t,IfcLinearStiffnessMeasure);\nEND_TYPE;\n\nTYPE IfcTrimmingSelect = SELECT\n\t(IfcCartesianPoint\n\t,IfcParameterValue);\nEND_TYPE;\n\nTYPE IfcUnit = SELECT\n\t(IfcDerivedUnit\n\t,IfcMonetaryUnit\n\t,IfcNamedUnit);\nEND_TYPE;\n\nTYPE IfcValue = SELECT\n\t(IfcDerivedMeasureValue\n\t,IfcMeasureValue\n\t,IfcSimpleValue);\nEND_TYPE;\n\nTYPE IfcVectorOrDirection = SELECT\n\t(IfcDirection\n\t,IfcVector);\nEND_TYPE;\n\nTYPE IfcWarpingStiffnessSelect = SELECT\n\t(IfcBoolean\n\t,IfcWarpingMomentMeasure);\nEND_TYPE;\n\nENTITY IfcActionRequest\n SUBTYPE OF (IfcControl);\n\tPredefinedType : OPTIONAL IfcActionRequestTypeEnum;\n\tStatus : OPTIONAL IfcLabel;\n\tLongDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcActor\n SUPERTYPE OF (ONEOF\n    (IfcOccupant))\n SUBTYPE OF (IfcObject);\n\tTheActor : IfcActorSelect;\n INVERSE\n\tIsActingUpon : SET [0:?] OF IfcRelAssignsToActor FOR RelatingActor;\nEND_ENTITY;\n\nENTITY IfcActorRole;\n\tRole : IfcRoleEnum;\n\tUserDefinedRole : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tHasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\n WHERE\n\tWR1 : (Role <> IfcRoleEnum.USERDEFINED) OR\n((Role = IfcRoleEnum.USERDEFINED) AND\n  EXISTS(SELF.UserDefinedRole));\nEND_ENTITY;\n\nENTITY IfcActuator\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcActuatorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcActuatorTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcActuatorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n('IFC4.IFCACTUATORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcActuatorType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcActuatorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcActuatorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcActuatorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAddress\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcPostalAddress\n    ,IfcTelecomAddress));\n\tPurpose : OPTIONAL IfcAddressTypeEnum;\n\tDescription : OPTIONAL IfcText;\n\tUserDefinedPurpose : OPTIONAL IfcLabel;\n INVERSE\n\tOfPerson : SET [0:?] OF IfcPerson FOR Addresses;\n\tOfOrganization : SET [0:?] OF IfcOrganization FOR Addresses;\n WHERE\n\tWR1 : (NOT(EXISTS(Purpose))) OR\n((Purpose <> IfcAddressTypeEnum.USERDEFINED) OR\n((Purpose = IfcAddressTypeEnum.USERDEFINED) AND\n  EXISTS(SELF.UserDefinedPurpose)));\nEND_ENTITY;\n\nENTITY IfcAdvancedBrep\n SUPERTYPE OF (ONEOF\n    (IfcAdvancedBrepWithVoids))\n SUBTYPE OF (IfcManifoldSolidBrep);\n WHERE\n\tHasAdvancedFaces : SIZEOF(QUERY(Afs <* SELF\\IfcManifoldSolidBrep.Outer.CfsFaces |\n  (NOT ('IFC4.IFCADVANCEDFACE' IN TYPEOF(Afs)))\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcAdvancedBrepWithVoids\n SUBTYPE OF (IfcAdvancedBrep);\n\tVoids : SET [1:?] OF IfcClosedShell;\n WHERE\n\tVoidsHaveAdvancedFaces : SIZEOF (QUERY (Vsh <* Voids |\n  SIZEOF (QUERY (Afs <* Vsh.CfsFaces |\n  (NOT ('IFC4.IFCADVANCEDFACE' IN TYPEOF(Afs)))\n  )) = 0\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcAdvancedFace\n SUBTYPE OF (IfcFaceSurface);\n WHERE\n\tApplicableSurface : SIZEOF (\n['IFC4.IFCELEMENTARYSURFACE',\n 'IFC4.IFCSWEPTSURFACE',\n 'IFC4.IFCBSPLINESURFACE'] *\nTYPEOF(SELF\\IfcFaceSurface.FaceSurface)) = 1;\n\tRequiresEdgeCurve : SIZEOF(QUERY (ElpFbnds <* \n  QUERY (Bnds <* SELF\\IfcFace.Bounds |\n    'IFC4.IFCEDGELOOP' IN TYPEOF(Bnds.Bound)) |\n     NOT (SIZEOF (QUERY (Oe <* ElpFbnds.Bound\\IfcEdgeLoop.EdgeList |\n       NOT('IFC4.IFCEDGECURVE' IN \n       TYPEOF(Oe\\IfcOrientedEdge.EdgeElement)\n  ))) = 0\n))) = 0;\n\tApplicableEdgeCurves : SIZEOF(QUERY (ElpFbnds <* \n  QUERY (Bnds <* SELF\\IfcFace.Bounds |\n    'IFC4.IFCEDGELOOP' IN TYPEOF(Bnds.Bound)) |\n     NOT (SIZEOF (QUERY (Oe <* ElpFbnds.Bound\\IfcEdgeLoop.EdgeList |\n       NOT (SIZEOF (['IFC4.IFCLINE',\n                     'IFC4.IFCCONIC',\n                     'IFC4.IFCPOLYLINE',\n                     'IFC4.IFCBSPLINECURVE'] *\n         TYPEOF(Oe\\IfcOrientedEdge.EdgeElement\\IfcEdgeCurve.EdgeGeometry)) = 1 )\n  )) = 0\n))) = 0;\nEND_ENTITY;\n\nENTITY IfcAirTerminal\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcAirTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcAirTerminalTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcAirTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCAIRTERMINALTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcAirTerminalBox\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcAirTerminalBoxTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcAirTerminalBoxTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcAirTerminalBoxTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCAIRTERMINALBOXTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcAirTerminalBoxType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcAirTerminalBoxTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcAirTerminalBoxTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcAirTerminalBoxTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAirTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcAirTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcAirTerminalTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcAirTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAirToAirHeatRecovery\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcAirToAirHeatRecoveryTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCAIRTOAIRHEATRECOVERYTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcAirToAirHeatRecoveryType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcAirToAirHeatRecoveryTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAlarm\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcAlarmTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcAlarmTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcAlarmTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n('IFC4.IFCALARMTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcAlarmType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcAlarmTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcAlarmTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcAlarmTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAnnotation\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\nEND_ENTITY;\n\nENTITY IfcAnnotationFillArea\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOuterBoundary : IfcCurve;\n\tInnerBoundaries : OPTIONAL SET [1:?] OF IfcCurve;\nEND_ENTITY;\n\nENTITY IfcApplication;\n\tApplicationDeveloper : IfcOrganization;\n\tVersion : IfcLabel;\n\tApplicationFullName : IfcLabel;\n\tApplicationIdentifier : IfcIdentifier;\n UNIQUE\n\tUR1 : ApplicationIdentifier;\n\tUR2 : ApplicationFullName, Version;\nEND_ENTITY;\n\nENTITY IfcAppliedValue\n SUPERTYPE OF (ONEOF\n    (IfcCostValue));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tAppliedValue : OPTIONAL IfcAppliedValueSelect;\n\tUnitBasis : OPTIONAL IfcMeasureWithUnit;\n\tApplicableDate : OPTIONAL IfcDate;\n\tFixedUntilDate : OPTIONAL IfcDate;\n\tCategory : OPTIONAL IfcLabel;\n\tCondition : OPTIONAL IfcLabel;\n\tArithmeticOperator : OPTIONAL IfcArithmeticOperatorEnum;\n\tComponents : OPTIONAL LIST [1:?] OF IfcAppliedValue;\n INVERSE\n\tHasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcApproval;\n\tIdentifier : OPTIONAL IfcIdentifier;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tTimeOfApproval : OPTIONAL IfcDateTime;\n\tStatus : OPTIONAL IfcLabel;\n\tLevel : OPTIONAL IfcLabel;\n\tQualifier : OPTIONAL IfcText;\n\tRequestingApproval : OPTIONAL IfcActorSelect;\n\tGivingApproval : OPTIONAL IfcActorSelect;\n INVERSE\n\tHasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\n\tApprovedObjects : SET [0:?] OF IfcRelAssociatesApproval FOR RelatingApproval;\n\tApprovedResources : SET [0:?] OF IfcResourceApprovalRelationship FOR RelatingApproval;\n\tIsRelatedWith : SET [0:?] OF IfcApprovalRelationship FOR RelatedApprovals;\n\tRelates : SET [0:?] OF IfcApprovalRelationship FOR RelatingApproval;\n WHERE\n\tHasIdentifierOrName : EXISTS (Identifier) OR EXISTS (Name);\nEND_ENTITY;\n\nENTITY IfcApprovalRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingApproval : IfcApproval;\n\tRelatedApprovals : SET [1:?] OF IfcApproval;\nEND_ENTITY;\n\nENTITY IfcArbitraryClosedProfileDef\n SUPERTYPE OF (ONEOF\n    (IfcArbitraryProfileDefWithVoids))\n SUBTYPE OF (IfcProfileDef);\n\tOuterCurve : IfcCurve;\n WHERE\n\tWR1 : OuterCurve.Dim = 2;\n\tWR2 : NOT('IFC4.IFCLINE' IN TYPEOF(OuterCurve));\n\tWR3 : NOT('IFC4.IFCOFFSETCURVE2D' IN TYPEOF(OuterCurve));\nEND_ENTITY;\n\nENTITY IfcArbitraryOpenProfileDef\n SUPERTYPE OF (ONEOF\n    (IfcCenterLineProfileDef))\n SUBTYPE OF (IfcProfileDef);\n\tCurve : IfcBoundedCurve;\n WHERE\n\tWR11 : ('IFC4.IFCCENTERLINEPROFILEDEF' IN TYPEOF(SELF)) OR \n (SELF\\IfcProfileDef.ProfileType = IfcProfileTypeEnum.CURVE);\n\tWR12 : Curve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcArbitraryProfileDefWithVoids\n SUBTYPE OF (IfcArbitraryClosedProfileDef);\n\tInnerCurves : SET [1:?] OF IfcCurve;\n WHERE\n\tWR1 : SELF\\IfcProfileDef.ProfileType = AREA;\n\tWR2 : SIZEOF(QUERY(temp <* InnerCurves | temp.Dim <> 2)) = 0;\n\tWR3 : SIZEOF(QUERY(temp <* InnerCurves | 'IFC4.IFCLINE' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcAsset\n SUBTYPE OF (IfcGroup);\n\tIdentification : OPTIONAL IfcIdentifier;\n\tOriginalValue : OPTIONAL IfcCostValue;\n\tCurrentValue : OPTIONAL IfcCostValue;\n\tTotalReplacementCost : OPTIONAL IfcCostValue;\n\tOwner : OPTIONAL IfcActorSelect;\n\tUser : OPTIONAL IfcActorSelect;\n\tResponsiblePerson : OPTIONAL IfcPerson;\n\tIncorporationDate : OPTIONAL IfcDate;\n\tDepreciatedValue : OPTIONAL IfcCostValue;\nEND_ENTITY;\n\nENTITY IfcAsymmetricIShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tBottomFlangeWidth : IfcPositiveLengthMeasure;\n\tOverallDepth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tBottomFlangeThickness : IfcPositiveLengthMeasure;\n\tBottomFlangeFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tTopFlangeWidth : IfcPositiveLengthMeasure;\n\tTopFlangeThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTopFlangeFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tBottomFlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tBottomFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tTopFlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tTopFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n WHERE\n\tValidFlangeThickness : NOT(EXISTS(TopFlangeThickness)) OR ((BottomFlangeThickness + TopFlangeThickness) < OverallDepth);\n\tValidWebThickness : (WebThickness < BottomFlangeWidth) AND (WebThickness < TopFlangeWidth);\n\tValidBottomFilletRadius : (NOT(EXISTS(BottomFlangeFilletRadius))) OR \n(BottomFlangeFilletRadius <= (BottomFlangeWidth - WebThickness)/2.);\n\tValidTopFilletRadius : (NOT(EXISTS(TopFlangeFilletRadius))) OR \n(TopFlangeFilletRadius <= (TopFlangeWidth - WebThickness)/2.);\nEND_ENTITY;\n\nENTITY IfcAudioVisualAppliance\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcAudioVisualApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcAudioVisualApplianceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcAudioVisualApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCAUDIOVISUALAPPLIANCETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcAudioVisualApplianceType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcAudioVisualApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcAudioVisualApplianceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcAudioVisualApplianceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAxis1Placement\n SUBTYPE OF (IfcPlacement);\n\tAxis : OPTIONAL IfcDirection;\n DERIVE\n\tZ : IfcDirection := NVL (IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n WHERE\n\tAxisIs3D : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);\n\tLocationIs3D : SELF\\IfcPlacement.Location.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcAxis2Placement2D\n SUBTYPE OF (IfcPlacement);\n\tRefDirection : OPTIONAL IfcDirection;\n DERIVE\n\tP : LIST [2:2] OF IfcDirection := IfcBuild2Axes(RefDirection);\n WHERE\n\tRefDirIs2D : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 2);\n\tLocationIs2D : SELF\\IfcPlacement.Location.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcAxis2Placement3D\n SUBTYPE OF (IfcPlacement);\n\tAxis : OPTIONAL IfcDirection;\n\tRefDirection : OPTIONAL IfcDirection;\n DERIVE\n\tP : LIST [3:3] OF IfcDirection := IfcBuildAxes(Axis, RefDirection);\n WHERE\n\tLocationIs3D : SELF\\IfcPlacement.Location.Dim = 3;\n\tAxisIs3D : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);\n\tRefDirIs3D : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 3);\n\tAxisToRefDirPosition : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0);\n\tAxisAndRefDirProvision : NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection)));\nEND_ENTITY;\n\nENTITY IfcBSplineCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBSplineCurveWithKnots))\n SUBTYPE OF (IfcBoundedCurve);\n\tDegree : IfcInteger;\n\tControlPointsList : LIST [2:?] OF IfcCartesianPoint;\n\tCurveForm : IfcBSplineCurveForm;\n\tClosedCurve : IfcLogical;\n\tSelfIntersect : IfcLogical;\n DERIVE\n\tUpperIndexOnControlPoints : IfcInteger := (SIZEOF(ControlPointsList) - 1);\n\tControlPoints : ARRAY [0:UpperIndexOnControlPoints] OF IfcCartesianPoint := IfcListToArray(ControlPointsList,0,UpperIndexOnControlPoints);\n WHERE\n\tSameDim : SIZEOF(QUERY(Temp <* ControlPointsList |\n  Temp.Dim <> ControlPointsList[1].Dim))\n= 0;\nEND_ENTITY;\n\nENTITY IfcBSplineCurveWithKnots\n SUPERTYPE OF (ONEOF\n    (IfcRationalBSplineCurveWithKnots))\n SUBTYPE OF (IfcBSplineCurve);\n\tKnotMultiplicities : LIST [2:?] OF IfcInteger;\n\tKnots : LIST [2:?] OF IfcParameterValue;\n\tKnotSpec : IfcKnotType;\n DERIVE\n\tUpperIndexOnKnots : IfcInteger := SIZEOF(Knots);\n WHERE\n\tConsistentBSpline : IfcConstraintsParamBSpline(Degree, UpperIndexOnKnots,\nUpperIndexOnControlPoints, KnotMultiplicities, Knots);\n\tCorrespondingKnotLists : SIZEOF(KnotMultiplicities) = UpperIndexOnKnots;\nEND_ENTITY;\n\nENTITY IfcBSplineSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBSplineSurfaceWithKnots))\n SUBTYPE OF (IfcBoundedSurface);\n\tUDegree : IfcInteger;\n\tVDegree : IfcInteger;\n\tControlPointsList : LIST [2:?] OF LIST [2:?] OF IfcCartesianPoint;\n\tSurfaceForm : IfcBSplineSurfaceForm;\n\tUClosed : IfcLogical;\n\tVClosed : IfcLogical;\n\tSelfIntersect : IfcLogical;\n DERIVE\n\tUUpper : IfcInteger := SIZEOF(ControlPointsList) - 1;\n\tVUpper : IfcInteger := SIZEOF(ControlPointsList[1]) - 1;\n\tControlPoints : ARRAY [0:UUpper] OF ARRAY [0:VUpper] OF IfcCartesianPoint := IfcMakeArrayOfArray(ControlPointsList,\n0,UUpper,0,VUpper);\nEND_ENTITY;\n\nENTITY IfcBSplineSurfaceWithKnots\n SUPERTYPE OF (ONEOF\n    (IfcRationalBSplineSurfaceWithKnots))\n SUBTYPE OF (IfcBSplineSurface);\n\tUMultiplicities : LIST [2:?] OF IfcInteger;\n\tVMultiplicities : LIST [2:?] OF IfcInteger;\n\tUKnots : LIST [2:?] OF IfcParameterValue;\n\tVKnots : LIST [2:?] OF IfcParameterValue;\n\tKnotSpec : IfcKnotType;\n DERIVE\n\tKnotVUpper : IfcInteger := SIZEOF(VKnots);\n\tKnotUUpper : IfcInteger := SIZEOF(UKnots);\n WHERE\n\tUDirectionConstraints : IfcConstraintsParamBSpline (\n  SELF\\IfcBSplineSurface.UDegree, KnotUUpper, \n  SELF\\IfcBSplineSurface.UUpper, UMultiplicities, UKnots);\n\tVDirectionConstraints : IfcConstraintsParamBSpline (\n  SELF\\IfcBSplineSurface.VDegree, KnotVUpper, \n  SELF\\IfcBSplineSurface.VUpper, VMultiplicities, VKnots);\n\tCorrespondingULists : SIZEOF(UMultiplicities) = KnotUUpper;\n\tCorrespondingVLists : SIZEOF(VMultiplicities) = KnotVUpper;\nEND_ENTITY;\n\nENTITY IfcBeam\n SUPERTYPE OF (ONEOF\n    (IfcBeamStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcBeamTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcBeamTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBeamTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCBEAMTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcBeamStandardCase\n SUBTYPE OF (IfcBeam);\n WHERE\n\tHasMaterialProfileSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') |\n              ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND\n              ('IFC4.IFCMATERIALPROFILESETUSAGE' IN TYPEOF(temp.RelatingMaterial))\n              )) = 1;\nEND_ENTITY;\n\nENTITY IfcBeamType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcBeamTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcBeamTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcBeamTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcBlobTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tRasterFormat : IfcIdentifier;\n\tRasterCode : IfcBinary;\n WHERE\n\tSupportedRasterFormat : SELF.RasterFormat IN ['BMP', 'JPG', 'GIF', 'PNG'];\n\tRasterCodeByteStream : BLENGTH(RasterCode) MOD 8 = 0;\nEND_ENTITY;\n\nENTITY IfcBlock\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tXLength : IfcPositiveLengthMeasure;\n\tYLength : IfcPositiveLengthMeasure;\n\tZLength : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcBoiler\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcBoilerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcBoilerTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcBoilerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCBOILERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcBoilerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcBoilerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcBoilerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcBoilerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcBooleanClippingResult\n SUBTYPE OF (IfcBooleanResult);\n WHERE\n\tFirstOperandType : ('IFC4.IFCSWEPTAREASOLID' IN TYPEOF(FirstOperand)) OR \n('IFC4.IFCSWEPTDISCSOLID' IN TYPEOF(FirstOperand)) OR \n('IFC4.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(FirstOperand));\n\tSecondOperandType : ('IFC4.IFCHALFSPACESOLID' IN TYPEOF(SecondOperand));\n\tOperatorType : Operator = DIFFERENCE;\nEND_ENTITY;\n\nENTITY IfcBooleanResult\n SUPERTYPE OF (ONEOF\n    (IfcBooleanClippingResult))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOperator : IfcBooleanOperator;\n\tFirstOperand : IfcBooleanOperand;\n\tSecondOperand : IfcBooleanOperand;\n DERIVE\n\tDim : IfcDimensionCount := FirstOperand.Dim;\n WHERE\n\tSameDim : FirstOperand.Dim = SecondOperand.Dim;\n\tFirstOperandClosed : NOT('IFC4.IFCTESSELLATEDFACESET' IN TYPEOF(FirstOperand)) OR (EXISTS(FirstOperand.Closed) AND FirstOperand.Closed);\n\tSecondOperandClosed : NOT('IFC4.IFCTESSELLATEDFACESET' IN TYPEOF(SecondOperand)) OR (EXISTS(SecondOperand.Closed) AND SecondOperand.Closed);\nEND_ENTITY;\n\nENTITY IfcBoundaryCondition\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBoundaryEdgeCondition\n    ,IfcBoundaryFaceCondition\n    ,IfcBoundaryNodeCondition));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcBoundaryCurve\n SUPERTYPE OF (ONEOF\n    (IfcOuterBoundaryCurve))\n SUBTYPE OF (IfcCompositeCurveOnSurface);\n WHERE\n\tIsClosed : SELF\\IfcCompositeCurve.ClosedCurve;\nEND_ENTITY;\n\nENTITY IfcBoundaryEdgeCondition\n SUBTYPE OF (IfcBoundaryCondition);\n\tTranslationalStiffnessByLengthX : OPTIONAL IfcModulusOfTranslationalSubgradeReactionSelect;\n\tTranslationalStiffnessByLengthY : OPTIONAL IfcModulusOfTranslationalSubgradeReactionSelect;\n\tTranslationalStiffnessByLengthZ : OPTIONAL IfcModulusOfTranslationalSubgradeReactionSelect;\n\tRotationalStiffnessByLengthX : OPTIONAL IfcModulusOfRotationalSubgradeReactionSelect;\n\tRotationalStiffnessByLengthY : OPTIONAL IfcModulusOfRotationalSubgradeReactionSelect;\n\tRotationalStiffnessByLengthZ : OPTIONAL IfcModulusOfRotationalSubgradeReactionSelect;\nEND_ENTITY;\n\nENTITY IfcBoundaryFaceCondition\n SUBTYPE OF (IfcBoundaryCondition);\n\tTranslationalStiffnessByAreaX : OPTIONAL IfcModulusOfSubgradeReactionSelect;\n\tTranslationalStiffnessByAreaY : OPTIONAL IfcModulusOfSubgradeReactionSelect;\n\tTranslationalStiffnessByAreaZ : OPTIONAL IfcModulusOfSubgradeReactionSelect;\nEND_ENTITY;\n\nENTITY IfcBoundaryNodeCondition\n SUPERTYPE OF (ONEOF\n    (IfcBoundaryNodeConditionWarping))\n SUBTYPE OF (IfcBoundaryCondition);\n\tTranslationalStiffnessX : OPTIONAL IfcTranslationalStiffnessSelect;\n\tTranslationalStiffnessY : OPTIONAL IfcTranslationalStiffnessSelect;\n\tTranslationalStiffnessZ : OPTIONAL IfcTranslationalStiffnessSelect;\n\tRotationalStiffnessX : OPTIONAL IfcRotationalStiffnessSelect;\n\tRotationalStiffnessY : OPTIONAL IfcRotationalStiffnessSelect;\n\tRotationalStiffnessZ : OPTIONAL IfcRotationalStiffnessSelect;\nEND_ENTITY;\n\nENTITY IfcBoundaryNodeConditionWarping\n SUBTYPE OF (IfcBoundaryNodeCondition);\n\tWarpingStiffness : OPTIONAL IfcWarpingStiffnessSelect;\nEND_ENTITY;\n\nENTITY IfcBoundedCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBSplineCurve\n    ,IfcCompositeCurve\n    ,IfcIndexedPolyCurve\n    ,IfcPolyline\n    ,IfcTrimmedCurve))\n SUBTYPE OF (IfcCurve);\nEND_ENTITY;\n\nENTITY IfcBoundedSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBSplineSurface\n    ,IfcCurveBoundedPlane\n    ,IfcCurveBoundedSurface\n    ,IfcRectangularTrimmedSurface))\n SUBTYPE OF (IfcSurface);\nEND_ENTITY;\n\nENTITY IfcBoundingBox\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tCorner : IfcCartesianPoint;\n\tXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\n\tZDim : IfcPositiveLengthMeasure;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcBoxedHalfSpace\n SUBTYPE OF (IfcHalfSpaceSolid);\n\tEnclosure : IfcBoundingBox;\n WHERE\n\tUnboundedSurface : NOT ('IFC4.IFCCURVEBOUNDEDPLANE' IN TYPEOF(SELF\\IfcHalfSpaceSolid.BaseSurface));\nEND_ENTITY;\n\nENTITY IfcBuilding\n SUBTYPE OF (IfcSpatialStructureElement);\n\tElevationOfRefHeight : OPTIONAL IfcLengthMeasure;\n\tElevationOfTerrain : OPTIONAL IfcLengthMeasure;\n\tBuildingAddress : OPTIONAL IfcPostalAddress;\nEND_ENTITY;\n\nENTITY IfcBuildingElement\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBeam\n    ,IfcBuildingElementProxy\n    ,IfcChimney\n    ,IfcColumn\n    ,IfcCovering\n    ,IfcCurtainWall\n    ,IfcDoor\n    ,IfcFooting\n    ,IfcMember\n    ,IfcPile\n    ,IfcPlate\n    ,IfcRailing\n    ,IfcRamp\n    ,IfcRampFlight\n    ,IfcRoof\n    ,IfcShadingDevice\n    ,IfcSlab\n    ,IfcStair\n    ,IfcStairFlight\n    ,IfcWall\n    ,IfcWindow))\n SUBTYPE OF (IfcElement);\n WHERE\n\tMaxOneMaterialAssociation : SIZEOF (QUERY(temp <* SELF\\IfcObjectDefinition.HasAssociations |\n  'IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)\n  )) <= 1;\nEND_ENTITY;\n\nENTITY IfcBuildingElementPart\n SUBTYPE OF (IfcElementComponent);\n\tPredefinedType : OPTIONAL IfcBuildingElementPartTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n(PredefinedType <> IfcBuildingElementPartTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcBuildingElementPartTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCBUILDINGELEMENTPARTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcBuildingElementPartType\n SUBTYPE OF (IfcElementComponentType);\n\tPredefinedType : IfcBuildingElementPartTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcBuildingElementPartTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcBuildingElementPartTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcBuildingElementProxy\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcBuildingElementProxyTypeEnum;\n WHERE\n\tHasObjectName : EXISTS(SELF\\IfcRoot.Name);\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcBuildingElementProxyTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBuildingElementProxyTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCBUILDINGELEMENTPROXYTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcBuildingElementProxyType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcBuildingElementProxyTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcBuildingElementProxyTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcBuildingElementProxyTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcBuildingElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBeamType\n    ,IfcBuildingElementProxyType\n    ,IfcChimneyType\n    ,IfcColumnType\n    ,IfcCoveringType\n    ,IfcCurtainWallType\n    ,IfcDoorType\n    ,IfcFootingType\n    ,IfcMemberType\n    ,IfcPileType\n    ,IfcPlateType\n    ,IfcRailingType\n    ,IfcRampFlightType\n    ,IfcRampType\n    ,IfcRoofType\n    ,IfcShadingDeviceType\n    ,IfcSlabType\n    ,IfcStairFlightType\n    ,IfcStairType\n    ,IfcWallType\n    ,IfcWindowType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcBuildingStorey\n SUBTYPE OF (IfcSpatialStructureElement);\n\tElevation : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcBuildingSystem\n SUBTYPE OF (IfcSystem);\n\tPredefinedType : OPTIONAL IfcBuildingSystemTypeEnum;\n\tLongName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcBurner\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcBurnerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcBurnerTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcBurnerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCBURNERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcBurnerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcBurnerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcBurnerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcBurnerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tWidth : IfcPositiveLengthMeasure;\n\tWallThickness : IfcPositiveLengthMeasure;\n\tGirth : IfcPositiveLengthMeasure;\n\tInternalFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n WHERE\n\tValidGirth : Girth < (Depth / 2.);\n\tValidInternalFilletRadius : NOT(EXISTS(InternalFilletRadius)) OR\n((InternalFilletRadius <= Width/2. - WallThickness) AND (InternalFilletRadius <= Depth/2. - WallThickness));\n\tValidWallThickness : (WallThickness < Width/2.) AND (WallThickness < Depth/2.);\nEND_ENTITY;\n\nENTITY IfcCableCarrierFitting\n SUBTYPE OF (IfcFlowFitting);\n\tPredefinedType : OPTIONAL IfcCableCarrierFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCableCarrierFittingTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCableCarrierFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCABLECARRIERFITTINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCableCarrierFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcCableCarrierFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCableCarrierFittingTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCableCarrierFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCableCarrierSegment\n SUBTYPE OF (IfcFlowSegment);\n\tPredefinedType : OPTIONAL IfcCableCarrierSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCableCarrierSegmentTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCableCarrierSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCABLECARRIERSEGMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCableCarrierSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcCableCarrierSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCableCarrierSegmentTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCableCarrierSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCableFitting\n SUBTYPE OF (IfcFlowFitting);\n\tPredefinedType : OPTIONAL IfcCableFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCableFittingTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCableFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCABLEFITTINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCableFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcCableFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCableFittingTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCableFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCableSegment\n SUBTYPE OF (IfcFlowSegment);\n\tPredefinedType : OPTIONAL IfcCableSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCableSegmentTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCableSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCABLESEGMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCableSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcCableSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCableSegmentTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCableSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCartesianPoint\n SUBTYPE OF (IfcPoint);\n\tCoordinates : LIST [1:3] OF IfcLengthMeasure;\n DERIVE\n\tDim : IfcDimensionCount := HIINDEX(Coordinates);\n WHERE\n\tCP2Dor3D : HIINDEX(Coordinates) >= 2;\nEND_ENTITY;\n\nENTITY IfcCartesianPointList\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCartesianPointList2D\n    ,IfcCartesianPointList3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\tDim : IfcDimensionCount := IfcPointListDim(SELF);\nEND_ENTITY;\n\nENTITY IfcCartesianPointList2D\n SUBTYPE OF (IfcCartesianPointList);\n\tCoordList : LIST [1:?] OF LIST [2:2] OF IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCartesianPointList3D\n SUBTYPE OF (IfcCartesianPointList);\n\tCoordList : LIST [1:?] OF LIST [3:3] OF IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCartesianTransformationOperator2D\n    ,IfcCartesianTransformationOperator3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tAxis1 : OPTIONAL IfcDirection;\n\tAxis2 : OPTIONAL IfcDirection;\n\tLocalOrigin : IfcCartesianPoint;\n\tScale : OPTIONAL IfcReal;\n DERIVE\n\tScl : IfcReal := NVL(Scale, 1.0);\n\tDim : IfcDimensionCount := LocalOrigin.Dim;\n WHERE\n\tScaleGreaterZero : Scl > 0.0;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator2D\n SUPERTYPE OF (ONEOF\n    (IfcCartesianTransformationOperator2DnonUniform))\n SUBTYPE OF (IfcCartesianTransformationOperator);\n DERIVE\n\tU : LIST [2:2] OF IfcDirection := IfcBaseAxis(2,SELF\\IfcCartesianTransformationOperator.Axis1,\nSELF\\IfcCartesianTransformationOperator.Axis2,?);\n WHERE\n\tDimEqual2 : SELF\\IfcCartesianTransformationOperator.Dim = 2;\n\tAxis1Is2D : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis1)) OR \n(SELF\\IfcCartesianTransformationOperator.Axis1.Dim = 2);\n\tAxis2Is2D : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis2)) OR \n(SELF\\IfcCartesianTransformationOperator.Axis2.Dim = 2);\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator2DnonUniform\n SUBTYPE OF (IfcCartesianTransformationOperator2D);\n\tScale2 : OPTIONAL IfcReal;\n DERIVE\n\tScl2 : IfcReal := NVL(Scale2, SELF\\IfcCartesianTransformationOperator.Scl);\n WHERE\n\tScale2GreaterZero : Scl2 > 0.0;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator3D\n SUPERTYPE OF (ONEOF\n    (IfcCartesianTransformationOperator3DnonUniform))\n SUBTYPE OF (IfcCartesianTransformationOperator);\n\tAxis3 : OPTIONAL IfcDirection;\n DERIVE\n\tU : LIST [3:3] OF IfcDirection := IfcBaseAxis(3,SELF\\IfcCartesianTransformationOperator.Axis1,\nSELF\\IfcCartesianTransformationOperator.Axis2,Axis3);\n WHERE\n\tDimIs3D : SELF\\IfcCartesianTransformationOperator.Dim = 3;\n\tAxis1Is3D : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis1)) OR \n(SELF\\IfcCartesianTransformationOperator.Axis1.Dim = 3);\n\tAxis2Is3D : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis2)) OR \n(SELF\\IfcCartesianTransformationOperator.Axis2.Dim = 3);\n\tAxis3Is3D : NOT(EXISTS(Axis3)) OR (Axis3.Dim = 3);\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator3DnonUniform\n SUBTYPE OF (IfcCartesianTransformationOperator3D);\n\tScale2 : OPTIONAL IfcReal;\n\tScale3 : OPTIONAL IfcReal;\n DERIVE\n\tScl2 : IfcReal := NVL(Scale2, SELF\\IfcCartesianTransformationOperator.Scl);\n\tScl3 : IfcReal := NVL(Scale3, SELF\\IfcCartesianTransformationOperator.Scl);\n WHERE\n\tScale2GreaterZero : Scl2 > 0.0;\n\tScale3GreaterZero : Scl3 > 0.0;\nEND_ENTITY;\n\nENTITY IfcCenterLineProfileDef\n SUBTYPE OF (IfcArbitraryOpenProfileDef);\n\tThickness : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcChiller\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcChillerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCHILLERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcChillerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcChillerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcChimney\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcChimneyTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcChimneyTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcChimneyTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCCHIMNEYTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcChimneyType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcChimneyTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcChimneyTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcChimneyTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCircle\n SUBTYPE OF (IfcConic);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCircleHollowProfileDef\n SUBTYPE OF (IfcCircleProfileDef);\n\tWallThickness : IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : WallThickness < SELF\\IfcCircleProfileDef.Radius;\nEND_ENTITY;\n\nENTITY IfcCircleProfileDef\n SUPERTYPE OF (ONEOF\n    (IfcCircleHollowProfileDef))\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCivilElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcCivilElementType\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcClassification\n SUBTYPE OF (IfcExternalInformation);\n\tSource : OPTIONAL IfcLabel;\n\tEdition : OPTIONAL IfcLabel;\n\tEditionDate : OPTIONAL IfcDate;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tLocation : OPTIONAL IfcURIReference;\n\tReferenceTokens : OPTIONAL LIST [1:?] OF IfcIdentifier;\n INVERSE\n\tClassificationForObjects : SET [0:?] OF IfcRelAssociatesClassification FOR RelatingClassification;\n\tHasReferences : SET [0:?] OF IfcClassificationReference FOR ReferencedSource;\nEND_ENTITY;\n\nENTITY IfcClassificationReference\n SUBTYPE OF (IfcExternalReference);\n\tReferencedSource : OPTIONAL IfcClassificationReferenceSelect;\n\tDescription : OPTIONAL IfcText;\n\tSort : OPTIONAL IfcIdentifier;\n INVERSE\n\tClassificationRefForObjects : SET [0:?] OF IfcRelAssociatesClassification FOR RelatingClassification;\n\tHasReferences : SET [0:?] OF IfcClassificationReference FOR ReferencedSource;\nEND_ENTITY;\n\nENTITY IfcClosedShell\n SUBTYPE OF (IfcConnectedFaceSet);\nEND_ENTITY;\n\nENTITY IfcCoil\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcCoilTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCoilTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCoilTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCOILTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCoilType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCoilTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCoilTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCoilTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcColourRgb\n SUBTYPE OF (IfcColourSpecification);\n\tRed : IfcNormalisedRatioMeasure;\n\tGreen : IfcNormalisedRatioMeasure;\n\tBlue : IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcColourRgbList\n SUBTYPE OF (IfcPresentationItem);\n\tColourList : LIST [1:?] OF LIST [3:3] OF IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcColourSpecification\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcColourRgb))\n SUBTYPE OF (IfcPresentationItem);\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcColumn\n SUPERTYPE OF (ONEOF\n    (IfcColumnStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcColumnTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcColumnTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcColumnTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCCOLUMNTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcColumnStandardCase\n SUBTYPE OF (IfcColumn);\n WHERE\n\tHasMaterialProfileSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') |\n              ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND\n              ('IFC4.IFCMATERIALPROFILESETUSAGE' IN TYPEOF(temp.RelatingMaterial))\n              )) = 1;\nEND_ENTITY;\n\nENTITY IfcColumnType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcColumnTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcColumnTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcColumnTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCommunicationsAppliance\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcCommunicationsApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCommunicationsApplianceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCommunicationsApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCOMMUNICATIONSAPPLIANCETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCommunicationsApplianceType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcCommunicationsApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCommunicationsApplianceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCommunicationsApplianceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcComplexProperty\n SUBTYPE OF (IfcProperty);\n\tUsageName : IfcIdentifier;\n\tHasProperties : SET [1:?] OF IfcProperty;\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* HasProperties | SELF :=: temp)) = 0;\n\tWR22 : IfcUniquePropertyName(HasProperties);\nEND_ENTITY;\n\nENTITY IfcComplexPropertyTemplate\n SUBTYPE OF (IfcPropertyTemplate);\n\tUsageName : OPTIONAL IfcLabel;\n\tTemplateType : OPTIONAL IfcComplexPropertyTemplateTypeEnum;\n\tHasPropertyTemplates : OPTIONAL SET [1:?] OF IfcPropertyTemplate;\n WHERE\n\tUniquePropertyNames : IfcUniquePropertyTemplateNames(HasPropertyTemplates);\n\tNoSelfReference : SIZEOF(QUERY(temp <* HasPropertyTemplates | SELF :=: temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcCompositeCurve\n SUPERTYPE OF (ONEOF\n    (IfcCompositeCurveOnSurface))\n SUBTYPE OF (IfcBoundedCurve);\n\tSegments : LIST [1:?] OF IfcCompositeCurveSegment;\n\tSelfIntersect : IfcLogical;\n DERIVE\n\tNSegments : IfcInteger := SIZEOF(Segments);\n\tClosedCurve : IfcLogical := Segments[NSegments].Transition <> Discontinuous;\n WHERE\n\tCurveContinuous : ((NOT ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 1)) OR ((ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 0));\n\tSameDim : SIZEOF( QUERY( Temp <* Segments | Temp.Dim <> Segments[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcCompositeCurveOnSurface\n SUPERTYPE OF (ONEOF\n    (IfcBoundaryCurve))\n SUBTYPE OF (IfcCompositeCurve);\n DERIVE\n\tBasisSurface : SET [0:1] OF IfcSurface := IfcGetBasisSurface(SELF);\n WHERE\n\tSameSurface : SIZEOF(BasisSurface) > 0;\nEND_ENTITY;\n\nENTITY IfcCompositeCurveSegment\n SUPERTYPE OF (ONEOF\n    (IfcReparametrisedCompositeCurveSegment))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tTransition : IfcTransitionCode;\n\tSameSense : IfcBoolean;\n\tParentCurve : IfcCurve;\n DERIVE\n\tDim : IfcDimensionCount := ParentCurve.Dim;\n INVERSE\n\tUsingCurves : SET [1:?] OF IfcCompositeCurve FOR Segments;\n WHERE\n\tParentIsBoundedCurve : ('IFC4.IFCBOUNDEDCURVE' IN TYPEOF(ParentCurve));\nEND_ENTITY;\n\nENTITY IfcCompositeProfileDef\n SUBTYPE OF (IfcProfileDef);\n\tProfiles : SET [2:?] OF IfcProfileDef;\n\tLabel : OPTIONAL IfcLabel;\n WHERE\n\tInvariantProfileType : SIZEOF(QUERY(temp <* Profiles | temp.ProfileType <> Profiles[1].ProfileType)) = 0;\n\tNoRecursion : SIZEOF(QUERY(temp <* Profiles | 'IFC4.IFCCOMPOSITEPROFILEDEF' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcCompressor\n SUBTYPE OF (IfcFlowMovingDevice);\n\tPredefinedType : OPTIONAL IfcCompressorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCompressorTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCompressorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCOMPRESSORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCompressorType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcCompressorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCompressorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCompressorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCondenser\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcCondenserTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCondenserTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCondenserTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCONDENSERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCondenserType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCondenserTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCondenserTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCondenserTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcConic\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCircle\n    ,IfcEllipse))\n SUBTYPE OF (IfcCurve);\n\tPosition : IfcAxis2Placement;\nEND_ENTITY;\n\nENTITY IfcConnectedFaceSet\n SUPERTYPE OF (ONEOF\n    (IfcClosedShell\n    ,IfcOpenShell))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tCfsFaces : SET [1:?] OF IfcFace;\nEND_ENTITY;\n\nENTITY IfcConnectionCurveGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tCurveOnRelatingElement : IfcCurveOrEdgeCurve;\n\tCurveOnRelatedElement : OPTIONAL IfcCurveOrEdgeCurve;\nEND_ENTITY;\n\nENTITY IfcConnectionGeometry\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcConnectionCurveGeometry\n    ,IfcConnectionPointGeometry\n    ,IfcConnectionSurfaceGeometry\n    ,IfcConnectionVolumeGeometry));\nEND_ENTITY;\n\nENTITY IfcConnectionPointEccentricity\n SUBTYPE OF (IfcConnectionPointGeometry);\n\tEccentricityInX : OPTIONAL IfcLengthMeasure;\n\tEccentricityInY : OPTIONAL IfcLengthMeasure;\n\tEccentricityInZ : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcConnectionPointGeometry\n SUPERTYPE OF (ONEOF\n    (IfcConnectionPointEccentricity))\n SUBTYPE OF (IfcConnectionGeometry);\n\tPointOnRelatingElement : IfcPointOrVertexPoint;\n\tPointOnRelatedElement : OPTIONAL IfcPointOrVertexPoint;\nEND_ENTITY;\n\nENTITY IfcConnectionSurfaceGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tSurfaceOnRelatingElement : IfcSurfaceOrFaceSurface;\n\tSurfaceOnRelatedElement : OPTIONAL IfcSurfaceOrFaceSurface;\nEND_ENTITY;\n\nENTITY IfcConnectionVolumeGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tVolumeOnRelatingElement : IfcSolidOrShell;\n\tVolumeOnRelatedElement : OPTIONAL IfcSolidOrShell;\nEND_ENTITY;\n\nENTITY IfcConstraint\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcMetric\n    ,IfcObjective));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tConstraintGrade : IfcConstraintEnum;\n\tConstraintSource : OPTIONAL IfcLabel;\n\tCreatingActor : OPTIONAL IfcActorSelect;\n\tCreationTime : OPTIONAL IfcDateTime;\n\tUserDefinedGrade : OPTIONAL IfcLabel;\n INVERSE\n\tHasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\n\tPropertiesForConstraint : SET [0:?] OF IfcResourceConstraintRelationship FOR RelatingConstraint;\n WHERE\n\tWR11 : (ConstraintGrade <> IfcConstraintEnum.USERDEFINED) OR\n((ConstraintGrade = IfcConstraintEnum.USERDEFINED) AND EXISTS(SELF\\IfcConstraint.UserDefinedGrade));\nEND_ENTITY;\n\nENTITY IfcConstructionEquipmentResource\n SUBTYPE OF (IfcConstructionResource);\n\tPredefinedType : OPTIONAL IfcConstructionEquipmentResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcConstructionEquipmentResourceType\n SUBTYPE OF (IfcConstructionResourceType);\n\tPredefinedType : IfcConstructionEquipmentResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeResource.ResourceType));\nEND_ENTITY;\n\nENTITY IfcConstructionMaterialResource\n SUBTYPE OF (IfcConstructionResource);\n\tPredefinedType : OPTIONAL IfcConstructionMaterialResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcConstructionMaterialResourceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcConstructionMaterialResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcConstructionMaterialResourceType\n SUBTYPE OF (IfcConstructionResourceType);\n\tPredefinedType : IfcConstructionMaterialResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcConstructionMaterialResourceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcConstructionMaterialResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeResource.ResourceType));\nEND_ENTITY;\n\nENTITY IfcConstructionProductResource\n SUBTYPE OF (IfcConstructionResource);\n\tPredefinedType : OPTIONAL IfcConstructionProductResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcConstructionProductResourceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcConstructionProductResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcConstructionProductResourceType\n SUBTYPE OF (IfcConstructionResourceType);\n\tPredefinedType : IfcConstructionProductResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcConstructionProductResourceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcConstructionProductResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeResource.ResourceType));\nEND_ENTITY;\n\nENTITY IfcConstructionResource\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcConstructionEquipmentResource\n    ,IfcConstructionMaterialResource\n    ,IfcConstructionProductResource\n    ,IfcCrewResource\n    ,IfcLaborResource\n    ,IfcSubContractResource))\n SUBTYPE OF (IfcResource);\n\tUsage : OPTIONAL IfcResourceTime;\n\tBaseCosts : OPTIONAL LIST [1:?] OF IfcAppliedValue;\n\tBaseQuantity : OPTIONAL IfcPhysicalQuantity;\nEND_ENTITY;\n\nENTITY IfcConstructionResourceType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcConstructionEquipmentResourceType\n    ,IfcConstructionMaterialResourceType\n    ,IfcConstructionProductResourceType\n    ,IfcCrewResourceType\n    ,IfcLaborResourceType\n    ,IfcSubContractResourceType))\n SUBTYPE OF (IfcTypeResource);\n\tBaseCosts : OPTIONAL LIST [1:?] OF IfcAppliedValue;\n\tBaseQuantity : OPTIONAL IfcPhysicalQuantity;\nEND_ENTITY;\n\nENTITY IfcContext\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcProject\n    ,IfcProjectLibrary))\n SUBTYPE OF (IfcObjectDefinition);\n\tObjectType : OPTIONAL IfcLabel;\n\tLongName : OPTIONAL IfcLabel;\n\tPhase : OPTIONAL IfcLabel;\n\tRepresentationContexts : OPTIONAL SET [1:?] OF IfcRepresentationContext;\n\tUnitsInContext : OPTIONAL IfcUnitAssignment;\n INVERSE\n\tIsDefinedBy : SET [0:?] OF IfcRelDefinesByProperties FOR RelatedObjects;\n\tDeclares : SET [0:?] OF IfcRelDeclares FOR RelatingContext;\nEND_ENTITY;\n\nENTITY IfcContextDependentUnit\n SUBTYPE OF (IfcNamedUnit);\n\tName : IfcLabel;\n INVERSE\n\tHasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcControl\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcActionRequest\n    ,IfcCostItem\n    ,IfcCostSchedule\n    ,IfcPerformanceHistory\n    ,IfcPermit\n    ,IfcProjectOrder\n    ,IfcWorkCalendar\n    ,IfcWorkControl))\n SUBTYPE OF (IfcObject);\n\tIdentification : OPTIONAL IfcIdentifier;\n INVERSE\n\tControls : SET [0:?] OF IfcRelAssignsToControl FOR RelatingControl;\nEND_ENTITY;\n\nENTITY IfcController\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcControllerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcControllerTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcControllerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n('IFC4.IFCCONTROLLERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcControllerType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcControllerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcControllerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcControllerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcConversionBasedUnit\n SUPERTYPE OF (ONEOF\n    (IfcConversionBasedUnitWithOffset))\n SUBTYPE OF (IfcNamedUnit);\n\tName : IfcLabel;\n\tConversionFactor : IfcMeasureWithUnit;\n INVERSE\n\tHasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcConversionBasedUnitWithOffset\n SUBTYPE OF (IfcConversionBasedUnit);\n\tConversionOffset : IfcReal;\nEND_ENTITY;\n\nENTITY IfcCooledBeam\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcCooledBeamTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCooledBeamTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCooledBeamTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCOOLEDBEAMTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCooledBeamType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCooledBeamTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCooledBeamTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCooledBeamTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCoolingTower\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcCoolingTowerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCoolingTowerTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCoolingTowerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCCOOLINGTOWERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCoolingTowerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCoolingTowerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCoolingTowerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCoolingTowerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCoordinateOperation\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcMapConversion));\n\tSourceCRS : IfcCoordinateReferenceSystemSelect;\n\tTargetCRS : IfcCoordinateReferenceSystem;\nEND_ENTITY;\n\nENTITY IfcCoordinateReferenceSystem\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcProjectedCRS));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tGeodeticDatum : OPTIONAL IfcIdentifier;\n\tVerticalDatum : OPTIONAL IfcIdentifier;\n INVERSE\n\tHasCoordinateOperation : SET [0:1] OF IfcCoordinateOperation FOR SourceCRS;\nEND_ENTITY;\n\nENTITY IfcCostItem\n SUBTYPE OF (IfcControl);\n\tPredefinedType : OPTIONAL IfcCostItemTypeEnum;\n\tCostValues : OPTIONAL LIST [1:?] OF IfcCostValue;\n\tCostQuantities : OPTIONAL LIST [1:?] OF IfcPhysicalQuantity;\nEND_ENTITY;\n\nENTITY IfcCostSchedule\n SUBTYPE OF (IfcControl);\n\tPredefinedType : OPTIONAL IfcCostScheduleTypeEnum;\n\tStatus : OPTIONAL IfcLabel;\n\tSubmittedOn : OPTIONAL IfcDateTime;\n\tUpdateDate : OPTIONAL IfcDateTime;\nEND_ENTITY;\n\nENTITY IfcCostValue\n SUBTYPE OF (IfcAppliedValue);\nEND_ENTITY;\n\nENTITY IfcCovering\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcCoveringTypeEnum;\n INVERSE\n\tCoversSpaces : SET [0:1] OF IfcRelCoversSpaces FOR RelatedCoverings;\n\tCoversElements : SET [0:1] OF IfcRelCoversBldgElements FOR RelatedCoverings;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCoveringTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCoveringTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCCOVERINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCoveringType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcCoveringTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCoveringTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCoveringTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCrewResource\n SUBTYPE OF (IfcConstructionResource);\n\tPredefinedType : OPTIONAL IfcCrewResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCrewResourceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCrewResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcCrewResourceType\n SUBTYPE OF (IfcConstructionResourceType);\n\tPredefinedType : IfcCrewResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCrewResourceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCrewResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeResource.ResourceType));\nEND_ENTITY;\n\nENTITY IfcCsgPrimitive3D\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBlock\n    ,IfcRectangularPyramid\n    ,IfcRightCircularCone\n    ,IfcRightCircularCylinder\n    ,IfcSphere))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tPosition : IfcAxis2Placement3D;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcCsgSolid\n SUBTYPE OF (IfcSolidModel);\n\tTreeRootExpression : IfcCsgSelect;\nEND_ENTITY;\n\nENTITY IfcCurrencyRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingMonetaryUnit : IfcMonetaryUnit;\n\tRelatedMonetaryUnit : IfcMonetaryUnit;\n\tExchangeRate : IfcPositiveRatioMeasure;\n\tRateDateTime : OPTIONAL IfcDateTime;\n\tRateSource : OPTIONAL IfcLibraryInformation;\nEND_ENTITY;\n\nENTITY IfcCurtainWall\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcCurtainWallTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcCurtainWallTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCurtainWallTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCCURTAINWALLTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCurtainWallType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcCurtainWallTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCurtainWallTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCurtainWallTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBoundedCurve\n    ,IfcConic\n    ,IfcLine\n    ,IfcOffsetCurve2D\n    ,IfcOffsetCurve3D\n    ,IfcPcurve\n    ,IfcSurfaceCurve))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\tDim : IfcDimensionCount := IfcCurveDim(SELF);\nEND_ENTITY;\n\nENTITY IfcCurveBoundedPlane\n SUBTYPE OF (IfcBoundedSurface);\n\tBasisSurface : IfcPlane;\n\tOuterBoundary : IfcCurve;\n\tInnerBoundaries : SET [0:?] OF IfcCurve;\nEND_ENTITY;\n\nENTITY IfcCurveBoundedSurface\n SUBTYPE OF (IfcBoundedSurface);\n\tBasisSurface : IfcSurface;\n\tBoundaries : SET [1:?] OF IfcBoundaryCurve;\n\tImplicitOuter : IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcCurveStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tCurveFont : OPTIONAL IfcCurveFontOrScaledCurveFontSelect;\n\tCurveWidth : OPTIONAL IfcSizeSelect;\n\tCurveColour : OPTIONAL IfcColour;\n\tModelOrDraughting : OPTIONAL IfcBoolean;\n WHERE\n\tMeasureOfWidth : (NOT(EXISTS(CurveWidth))) OR\n('IFC4.IFCPOSITIVELENGTHMEASURE' IN TYPEOF(CurveWidth)) OR \n (('IFC4.IFCDESCRIPTIVEMEASURE' IN TYPEOF(CurveWidth)) AND\n (CurveWidth = 'by layer'));\n\tIdentifiableCurveStyle : EXISTS(CurveFont) OR EXISTS(CurveWidth) OR EXISTS(CurveColour);\nEND_ENTITY;\n\nENTITY IfcCurveStyleFont\n SUBTYPE OF (IfcPresentationItem);\n\tName : OPTIONAL IfcLabel;\n\tPatternList : LIST [1:?] OF IfcCurveStyleFontPattern;\nEND_ENTITY;\n\nENTITY IfcCurveStyleFontAndScaling\n SUBTYPE OF (IfcPresentationItem);\n\tName : OPTIONAL IfcLabel;\n\tCurveFont : IfcCurveStyleFontSelect;\n\tCurveFontScaling : IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcCurveStyleFontPattern\n SUBTYPE OF (IfcPresentationItem);\n\tVisibleSegmentLength : IfcLengthMeasure;\n\tInvisibleSegmentLength : IfcPositiveLengthMeasure;\n WHERE\n\tVisibleLengthGreaterEqualZero : VisibleSegmentLength >= 0.;\nEND_ENTITY;\n\nENTITY IfcCylindricalSurface\n SUBTYPE OF (IfcElementarySurface);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcDamper\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcDamperTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCDAMPERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDamperType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcDamperTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDerivedProfileDef\n SUPERTYPE OF (ONEOF\n    (IfcMirroredProfileDef))\n SUBTYPE OF (IfcProfileDef);\n\tParentProfile : IfcProfileDef;\n\tOperator : IfcCartesianTransformationOperator2D;\n\tLabel : OPTIONAL IfcLabel;\n WHERE\n\tInvariantProfileType : SELF\\IfcProfileDef.ProfileType = ParentProfile.ProfileType;\nEND_ENTITY;\n\nENTITY IfcDerivedUnit;\n\tElements : SET [1:?] OF IfcDerivedUnitElement;\n\tUnitType : IfcDerivedUnitEnum;\n\tUserDefinedType : OPTIONAL IfcLabel;\n DERIVE\n\tDimensions : IfcDimensionalExponents := IfcDeriveDimensionalExponents(Elements);\n WHERE\n\tWR1 : (SIZEOF (Elements) > 1) OR ((SIZEOF (Elements) = 1) AND (Elements[1].Exponent <> 1 ));\n\tWR2 : (UnitType <> IfcDerivedUnitEnum.USERDEFINED) OR\n((UnitType = IfcDerivedUnitEnum.USERDEFINED) AND \n (EXISTS(SELF.UserDefinedType)));\nEND_ENTITY;\n\nENTITY IfcDerivedUnitElement;\n\tUnit : IfcNamedUnit;\n\tExponent : INTEGER;\nEND_ENTITY;\n\nENTITY IfcDimensionalExponents;\n\tLengthExponent : INTEGER;\n\tMassExponent : INTEGER;\n\tTimeExponent : INTEGER;\n\tElectricCurrentExponent : INTEGER;\n\tThermodynamicTemperatureExponent : INTEGER;\n\tAmountOfSubstanceExponent : INTEGER;\n\tLuminousIntensityExponent : INTEGER;\nEND_ENTITY;\n\nENTITY IfcDirection\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tDirectionRatios : LIST [2:3] OF IfcReal;\n DERIVE\n\tDim : IfcDimensionCount := HIINDEX(DirectionRatios);\n WHERE\n\tMagnitudeGreaterZero : SIZEOF(QUERY(Tmp <* DirectionRatios | Tmp <> 0.0)) > 0;\nEND_ENTITY;\n\nENTITY IfcDiscreteAccessory\n SUBTYPE OF (IfcElementComponent);\n\tPredefinedType : OPTIONAL IfcDiscreteAccessoryTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n(PredefinedType <> IfcDiscreteAccessoryTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcDiscreteAccessoryTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCDISCRETEACCESSORYTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDiscreteAccessoryType\n SUBTYPE OF (IfcElementComponentType);\n\tPredefinedType : IfcDiscreteAccessoryTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDiscreteAccessoryTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcDiscreteAccessoryTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDistributionChamberElement\n SUBTYPE OF (IfcDistributionFlowElement);\n\tPredefinedType : OPTIONAL IfcDistributionChamberElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcDistributionChamberElementTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcDistributionChamberElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n('IFC4.IFCDISTRIBUTIONCHAMBERELEMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDistributionChamberElementType\n SUBTYPE OF (IfcDistributionFlowElementType);\n\tPredefinedType : IfcDistributionChamberElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDistributionChamberElementTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcDistributionChamberElementTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDistributionCircuit\n SUBTYPE OF (IfcDistributionSystem);\nEND_ENTITY;\n\nENTITY IfcDistributionControlElement\n SUPERTYPE OF (ONEOF\n    (IfcActuator\n    ,IfcAlarm\n    ,IfcController\n    ,IfcFlowInstrument\n    ,IfcProtectiveDeviceTrippingUnit\n    ,IfcSensor\n    ,IfcUnitaryControlElement))\n SUBTYPE OF (IfcDistributionElement);\n INVERSE\n\tAssignedToFlowElement : SET [0:1] OF IfcRelFlowControlElements FOR RelatedControlElements;\nEND_ENTITY;\n\nENTITY IfcDistributionControlElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcActuatorType\n    ,IfcAlarmType\n    ,IfcControllerType\n    ,IfcFlowInstrumentType\n    ,IfcProtectiveDeviceTrippingUnitType\n    ,IfcSensorType\n    ,IfcUnitaryControlElementType))\n SUBTYPE OF (IfcDistributionElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionElement\n SUPERTYPE OF (ONEOF\n    (IfcDistributionControlElement\n    ,IfcDistributionFlowElement))\n SUBTYPE OF (IfcElement);\n INVERSE\n\tHasPorts : SET [0:?] OF IfcRelConnectsPortToElement FOR RelatedElement;\nEND_ENTITY;\n\nENTITY IfcDistributionElementType\n SUPERTYPE OF (ONEOF\n    (IfcDistributionControlElementType\n    ,IfcDistributionFlowElementType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionFlowElement\n SUPERTYPE OF (ONEOF\n    (IfcDistributionChamberElement\n    ,IfcEnergyConversionDevice\n    ,IfcFlowController\n    ,IfcFlowFitting\n    ,IfcFlowMovingDevice\n    ,IfcFlowSegment\n    ,IfcFlowStorageDevice\n    ,IfcFlowTerminal\n    ,IfcFlowTreatmentDevice))\n SUBTYPE OF (IfcDistributionElement);\n INVERSE\n\tHasControlElements : SET [0:1] OF IfcRelFlowControlElements FOR RelatingFlowElement;\nEND_ENTITY;\n\nENTITY IfcDistributionFlowElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcDistributionChamberElementType\n    ,IfcEnergyConversionDeviceType\n    ,IfcFlowControllerType\n    ,IfcFlowFittingType\n    ,IfcFlowMovingDeviceType\n    ,IfcFlowSegmentType\n    ,IfcFlowStorageDeviceType\n    ,IfcFlowTerminalType\n    ,IfcFlowTreatmentDeviceType))\n SUBTYPE OF (IfcDistributionElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionPort\n SUBTYPE OF (IfcPort);\n\tFlowDirection : OPTIONAL IfcFlowDirectionEnum;\n\tPredefinedType : OPTIONAL IfcDistributionPortTypeEnum;\n\tSystemType : OPTIONAL IfcDistributionSystemEnum;\nEND_ENTITY;\n\nENTITY IfcDistributionSystem\n SUPERTYPE OF (ONEOF\n    (IfcDistributionCircuit))\n SUBTYPE OF (IfcSystem);\n\tLongName : OPTIONAL IfcLabel;\n\tPredefinedType : OPTIONAL IfcDistributionSystemEnum;\nEND_ENTITY;\n\nENTITY IfcDocumentInformation\n SUBTYPE OF (IfcExternalInformation);\n\tIdentification : IfcIdentifier;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tLocation : OPTIONAL IfcURIReference;\n\tPurpose : OPTIONAL IfcText;\n\tIntendedUse : OPTIONAL IfcText;\n\tScope : OPTIONAL IfcText;\n\tRevision : OPTIONAL IfcLabel;\n\tDocumentOwner : OPTIONAL IfcActorSelect;\n\tEditors : OPTIONAL SET [1:?] OF IfcActorSelect;\n\tCreationTime : OPTIONAL IfcDateTime;\n\tLastRevisionTime : OPTIONAL IfcDateTime;\n\tElectronicFormat : OPTIONAL IfcIdentifier;\n\tValidFrom : OPTIONAL IfcDate;\n\tValidUntil : OPTIONAL IfcDate;\n\tConfidentiality : OPTIONAL IfcDocumentConfidentialityEnum;\n\tStatus : OPTIONAL IfcDocumentStatusEnum;\n INVERSE\n\tDocumentInfoForObjects : SET [0:?] OF IfcRelAssociatesDocument FOR RelatingDocument;\n\tHasDocumentReferences : SET [0:?] OF IfcDocumentReference FOR ReferencedDocument;\n\tIsPointedTo : SET [0:?] OF IfcDocumentInformationRelationship FOR RelatedDocuments;\n\tIsPointer : SET [0:1] OF IfcDocumentInformationRelationship FOR RelatingDocument;\nEND_ENTITY;\n\nENTITY IfcDocumentInformationRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingDocument : IfcDocumentInformation;\n\tRelatedDocuments : SET [1:?] OF IfcDocumentInformation;\n\tRelationshipType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcDocumentReference\n SUBTYPE OF (IfcExternalReference);\n\tDescription : OPTIONAL IfcText;\n\tReferencedDocument : OPTIONAL IfcDocumentInformation;\n INVERSE\n\tDocumentRefForObjects : SET [0:?] OF IfcRelAssociatesDocument FOR RelatingDocument;\n WHERE\n\tWR1 : EXISTS(Name) XOR EXISTS(ReferencedDocument);\nEND_ENTITY;\n\nENTITY IfcDoor\n SUPERTYPE OF (ONEOF\n    (IfcDoorStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n\tOverallHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tOverallWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : OPTIONAL IfcDoorTypeEnum;\n\tOperationType : OPTIONAL IfcDoorTypeOperationEnum;\n\tUserDefinedOperationType : OPTIONAL IfcLabel;\n WHERE\n\tCorrectStyleAssigned : (SIZEOF(IsTypedBy) = 0) \nOR ('IFC4.IFCDOORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDoorLiningProperties\n SUBTYPE OF (IfcPreDefinedPropertySet);\n\tLiningDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tLiningThickness : OPTIONAL IfcNonNegativeLengthMeasure;\n\tThresholdDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tThresholdThickness : OPTIONAL IfcNonNegativeLengthMeasure;\n\tTransomThickness : OPTIONAL IfcNonNegativeLengthMeasure;\n\tTransomOffset : OPTIONAL IfcLengthMeasure;\n\tLiningOffset : OPTIONAL IfcLengthMeasure;\n\tThresholdOffset : OPTIONAL IfcLengthMeasure;\n\tCasingThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tCasingDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n\tLiningToPanelOffsetX : OPTIONAL IfcLengthMeasure;\n\tLiningToPanelOffsetY : OPTIONAL IfcLengthMeasure;\n WHERE\n\tWR31 : NOT(EXISTS(LiningDepth) AND NOT(EXISTS(LiningThickness)));\n\tWR32 : NOT(EXISTS(ThresholdDepth) AND NOT(EXISTS(ThresholdThickness)));\n\tWR33 : (EXISTS(TransomOffset) AND EXISTS(TransomThickness)) XOR\n(NOT(EXISTS(TransomOffset)) AND NOT(EXISTS(TransomThickness)));\n\tWR34 : (EXISTS(CasingDepth) AND EXISTS(CasingThickness)) XOR\n(NOT(EXISTS(CasingDepth)) AND NOT(EXISTS(CasingThickness)));\n\tWR35 : (EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1])) \nAND \n(\n ('IFC4.IFCDOORTYPE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]))\n  OR\n ('IFC4.IFCDOORSTYLE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]))\n);\nEND_ENTITY;\n\nENTITY IfcDoorPanelProperties\n SUBTYPE OF (IfcPreDefinedPropertySet);\n\tPanelDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tPanelOperation : IfcDoorPanelOperationEnum;\n\tPanelWidth : OPTIONAL IfcNormalisedRatioMeasure;\n\tPanelPosition : IfcDoorPanelPositionEnum;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n WHERE\n\tApplicableToType : (EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1])) \nAND \n(\n ('IFC4.IFCDOORTYPE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]))\n  OR\n ('IFC4.IFCDOORSTYLE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]))\n);\nEND_ENTITY;\n\nENTITY IfcDoorStandardCase\n SUBTYPE OF (IfcDoor);\nEND_ENTITY;\n\nENTITY IfcDoorStyle\n SUBTYPE OF (IfcTypeProduct);\n\tOperationType : IfcDoorStyleOperationEnum;\n\tConstructionType : IfcDoorStyleConstructionEnum;\n\tParameterTakesPrecedence : IfcBoolean;\n\tSizeable : IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcDoorType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcDoorTypeEnum;\n\tOperationType : IfcDoorTypeOperationEnum;\n\tParameterTakesPrecedence : OPTIONAL IfcBoolean;\n\tUserDefinedOperationType : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDoorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcDoorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDraughtingPreDefinedColour\n SUBTYPE OF (IfcPreDefinedColour);\n WHERE\n\tPreDefinedColourNames : SELF\\IfcPreDefinedItem.Name IN ['black','red','green','blue','yellow',\n     'magenta','cyan','white','by layer'];\nEND_ENTITY;\n\nENTITY IfcDraughtingPreDefinedCurveFont\n SUBTYPE OF (IfcPreDefinedCurveFont);\n WHERE\n\tPreDefinedCurveFontNames : SELF\\IfcPredefinedItem.Name IN\n       ['continuous',\n        'chain',\n        'chain double dash',\n        'dashed',\n        'dotted',\n        'by layer'];\nEND_ENTITY;\n\nENTITY IfcDuctFitting\n SUBTYPE OF (IfcFlowFitting);\n\tPredefinedType : OPTIONAL IfcDuctFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCDUCTFITTINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDuctFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcDuctFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDuctSegment\n SUBTYPE OF (IfcFlowSegment);\n\tPredefinedType : OPTIONAL IfcDuctSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcDuctSegmentTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcDuctSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCDUCTSEGMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDuctSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcDuctSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDuctSegmentTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcDuctSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDuctSilencer\n SUBTYPE OF (IfcFlowTreatmentDevice);\n\tPredefinedType : OPTIONAL IfcDuctSilencerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcDuctSilencerTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcDuctSilencerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCDUCTSILENCERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDuctSilencerType\n SUBTYPE OF (IfcFlowTreatmentDeviceType);\n\tPredefinedType : IfcDuctSilencerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDuctSilencerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcDuctSilencerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcEdge\n SUPERTYPE OF (ONEOF\n    (IfcEdgeCurve\n    ,IfcOrientedEdge\n    ,IfcSubedge))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tEdgeStart : IfcVertex;\n\tEdgeEnd : IfcVertex;\nEND_ENTITY;\n\nENTITY IfcEdgeCurve\n SUBTYPE OF (IfcEdge);\n\tEdgeGeometry : IfcCurve;\n\tSameSense : IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcEdgeLoop\n SUBTYPE OF (IfcLoop);\n\tEdgeList : LIST [1:?] OF IfcOrientedEdge;\n DERIVE\n\tNe : IfcInteger := SIZEOF(EdgeList);\n WHERE\n\tIsClosed : (EdgeList[1].EdgeStart) :=: (EdgeList[Ne].EdgeEnd);\n\tIsContinuous : IfcLoopHeadToTail(SELF);\nEND_ENTITY;\n\nENTITY IfcElectricAppliance\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcElectricApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcElectricApplianceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcElectricApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCELECTRICAPPLIANCETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricApplianceType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcElectricApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricApplianceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcElectricApplianceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElectricDistributionBoard\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcElectricDistributionBoardTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcElectricDistributionBoardTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcElectricDistributionBoardTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCELECTRICDISTRIBUTIONBOARDTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricDistributionBoardType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcElectricDistributionBoardTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricDistributionBoardTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcElectricDistributionBoardTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElectricFlowStorageDevice\n SUBTYPE OF (IfcFlowStorageDevice);\n\tPredefinedType : OPTIONAL IfcElectricFlowStorageDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCELECTRICFLOWSTORAGEDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricFlowStorageDeviceType\n SUBTYPE OF (IfcFlowStorageDeviceType);\n\tPredefinedType : IfcElectricFlowStorageDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElectricGenerator\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcElectricGeneratorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcElectricGeneratorTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcElectricGeneratorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCELECTRICGENERATORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricGeneratorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcElectricGeneratorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricGeneratorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcElectricGeneratorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElectricMotor\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcElectricMotorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcElectricMotorTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcElectricMotorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCELECTRICMOTORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricMotorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcElectricMotorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricMotorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcElectricMotorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElectricTimeControl\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcElectricTimeControlTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcElectricTimeControlTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcElectricTimeControlTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCELECTRICTIMECONTROLTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricTimeControlType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcElectricTimeControlTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricTimeControlTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcElectricTimeControlTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElement\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBuildingElement\n    ,IfcCivilElement\n    ,IfcDistributionElement\n    ,IfcElementAssembly\n    ,IfcElementComponent\n    ,IfcFeatureElement\n    ,IfcFurnishingElement\n    ,IfcGeographicElement\n    ,IfcTransportElement\n    ,IfcVirtualElement))\n SUBTYPE OF (IfcProduct);\n\tTag : OPTIONAL IfcIdentifier;\n INVERSE\n\tFillsVoids : SET [0:1] OF IfcRelFillsElement FOR RelatedBuildingElement;\n\tConnectedTo : SET [0:?] OF IfcRelConnectsElements FOR RelatingElement;\n\tIsInterferedByElements : SET [0:?] OF IfcRelInterferesElements FOR RelatedElement;\n\tInterferesElements : SET [0:?] OF IfcRelInterferesElements FOR RelatingElement;\n\tHasProjections : SET [0:?] OF IfcRelProjectsElement FOR RelatingElement;\n\tReferencedInStructures : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatedElements;\n\tHasOpenings : SET [0:?] OF IfcRelVoidsElement FOR RelatingBuildingElement;\n\tIsConnectionRealization : SET [0:?] OF IfcRelConnectsWithRealizingElements FOR RealizingElements;\n\tProvidesBoundaries : SET [0:?] OF IfcRelSpaceBoundary FOR RelatedBuildingElement;\n\tConnectedFrom : SET [0:?] OF IfcRelConnectsElements FOR RelatedElement;\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\n\tHasCoverings : SET [0:?] OF IfcRelCoversBldgElements FOR RelatingBuildingElement;\nEND_ENTITY;\n\nENTITY IfcElementAssembly\n SUBTYPE OF (IfcElement);\n\tAssemblyPlace : OPTIONAL IfcAssemblyPlaceEnum;\n\tPredefinedType : OPTIONAL IfcElementAssemblyTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcElementAssemblyTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcElementAssemblyTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCELEMENTASSEMBLYTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElementAssemblyType\n SUBTYPE OF (IfcElementType);\n\tPredefinedType : IfcElementAssemblyTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElementAssemblyTypeEnum.USERDEFINED) OR \n((PredefinedType = IfcElementAssemblyTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElementComponent\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBuildingElementPart\n    ,IfcDiscreteAccessory\n    ,IfcFastener\n    ,IfcMechanicalFastener\n    ,IfcReinforcingElement\n    ,IfcVibrationIsolator))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcElementComponentType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBuildingElementPartType\n    ,IfcDiscreteAccessoryType\n    ,IfcFastenerType\n    ,IfcMechanicalFastenerType\n    ,IfcReinforcingElementType\n    ,IfcVibrationIsolatorType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcElementQuantity\n SUBTYPE OF (IfcQuantitySet);\n\tMethodOfMeasurement : OPTIONAL IfcLabel;\n\tQuantities : SET [1:?] OF IfcPhysicalQuantity;\n WHERE\n\tUniqueQuantityNames : IfcUniqueQuantityNames(Quantities);\nEND_ENTITY;\n\nENTITY IfcElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBuildingElementType\n    ,IfcCivilElementType\n    ,IfcDistributionElementType\n    ,IfcElementAssemblyType\n    ,IfcElementComponentType\n    ,IfcFurnishingElementType\n    ,IfcGeographicElementType\n    ,IfcTransportElementType))\n SUBTYPE OF (IfcTypeProduct);\n\tElementType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcElementarySurface\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCylindricalSurface\n    ,IfcPlane\n    ,IfcSphericalSurface\n    ,IfcToroidalSurface))\n SUBTYPE OF (IfcSurface);\n\tPosition : IfcAxis2Placement3D;\nEND_ENTITY;\n\nENTITY IfcEllipse\n SUBTYPE OF (IfcConic);\n\tSemiAxis1 : IfcPositiveLengthMeasure;\n\tSemiAxis2 : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcEllipseProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tSemiAxis1 : IfcPositiveLengthMeasure;\n\tSemiAxis2 : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcEnergyConversionDevice\n SUPERTYPE OF (ONEOF\n    (IfcAirToAirHeatRecovery\n    ,IfcBoiler\n    ,IfcBurner\n    ,IfcChiller\n    ,IfcCoil\n    ,IfcCondenser\n    ,IfcCooledBeam\n    ,IfcCoolingTower\n    ,IfcElectricGenerator\n    ,IfcElectricMotor\n    ,IfcEngine\n    ,IfcEvaporativeCooler\n    ,IfcEvaporator\n    ,IfcHeatExchanger\n    ,IfcHumidifier\n    ,IfcMotorConnection\n    ,IfcSolarDevice\n    ,IfcTransformer\n    ,IfcTubeBundle\n    ,IfcUnitaryEquipment))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcEnergyConversionDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcAirToAirHeatRecoveryType\n    ,IfcBoilerType\n    ,IfcBurnerType\n    ,IfcChillerType\n    ,IfcCoilType\n    ,IfcCondenserType\n    ,IfcCooledBeamType\n    ,IfcCoolingTowerType\n    ,IfcElectricGeneratorType\n    ,IfcElectricMotorType\n    ,IfcEngineType\n    ,IfcEvaporativeCoolerType\n    ,IfcEvaporatorType\n    ,IfcHeatExchangerType\n    ,IfcHumidifierType\n    ,IfcMotorConnectionType\n    ,IfcSolarDeviceType\n    ,IfcTransformerType\n    ,IfcTubeBundleType\n    ,IfcUnitaryEquipmentType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcEngine\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcEngineTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcEngineTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcEngineTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n('IFC4.IFCENGINETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcEngineType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcEngineTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcEngineTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcEngineTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcEvaporativeCooler\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcEvaporativeCoolerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcEvaporativeCoolerTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcEvaporativeCoolerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCEVAPORATIVECOOLERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcEvaporativeCoolerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcEvaporativeCoolerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcEvaporativeCoolerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcEvaporativeCoolerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcEvaporator\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcEvaporatorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcEvaporatorTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcEvaporatorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCEVAPORATORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcEvaporatorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcEvaporatorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcEvaporatorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcEvaporatorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcEvent\n SUBTYPE OF (IfcProcess);\n\tPredefinedType : OPTIONAL IfcEventTypeEnum;\n\tEventTriggerType : OPTIONAL IfcEventTriggerTypeEnum;\n\tUserDefinedEventTriggerType : OPTIONAL IfcLabel;\n\tEventOccurenceTime : OPTIONAL IfcEventTime;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcEventTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEventTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : NOT(EXISTS(EventTriggerType)) OR (EventTriggerType <> IfcEventTriggerTypeEnum.USERDEFINED) OR ((EventTriggerType = IfcEventTriggerTypeEnum.USERDEFINED) AND EXISTS(UserDefinedEventTriggerType));\nEND_ENTITY;\n\nENTITY IfcEventTime\n SUBTYPE OF (IfcSchedulingTime);\n\tActualDate : OPTIONAL IfcDateTime;\n\tEarlyDate : OPTIONAL IfcDateTime;\n\tLateDate : OPTIONAL IfcDateTime;\n\tScheduleDate : OPTIONAL IfcDateTime;\nEND_ENTITY;\n\nENTITY IfcEventType\n SUBTYPE OF (IfcTypeProcess);\n\tPredefinedType : IfcEventTypeEnum;\n\tEventTriggerType : IfcEventTriggerTypeEnum;\n\tUserDefinedEventTriggerType : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcEventTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEventTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeProcess.ProcessType));\n\tCorrectEventTriggerType : (EventTriggerType <> IfcEventTriggerTypeEnum.USERDEFINED) OR ((EventTriggerType = IfcEventTriggerTypeEnum.USERDEFINED) AND EXISTS(UserDefinedEventTriggerType));\nEND_ENTITY;\n\nENTITY IfcExtendedProperties\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcMaterialProperties\n    ,IfcProfileProperties))\n SUBTYPE OF (IfcPropertyAbstraction);\n\tName : OPTIONAL IfcIdentifier;\n\tDescription : OPTIONAL IfcText;\n\tProperties : SET [1:?] OF IfcProperty;\nEND_ENTITY;\n\nENTITY IfcExternalInformation\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcClassification\n    ,IfcDocumentInformation\n    ,IfcLibraryInformation));\nEND_ENTITY;\n\nENTITY IfcExternalReference\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcClassificationReference\n    ,IfcDocumentReference\n    ,IfcExternallyDefinedHatchStyle\n    ,IfcExternallyDefinedSurfaceStyle\n    ,IfcExternallyDefinedTextFont\n    ,IfcLibraryReference));\n\tLocation : OPTIONAL IfcURIReference;\n\tIdentification : OPTIONAL IfcIdentifier;\n\tName : OPTIONAL IfcLabel;\n INVERSE\n\tExternalReferenceForResources : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatingReference;\n WHERE\n\tWR1 : EXISTS(Identification) OR EXISTS(Location) OR EXISTS(Name);\nEND_ENTITY;\n\nENTITY IfcExternalReferenceRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingReference : IfcExternalReference;\n\tRelatedResourceObjects : SET [1:?] OF IfcResourceObjectSelect;\nEND_ENTITY;\n\nENTITY IfcExternalSpatialElement\n SUBTYPE OF (IfcExternalSpatialStructureElement);\n\tPredefinedType : OPTIONAL IfcExternalSpatialElementTypeEnum;\n INVERSE\n\tBoundedBy : SET [0:?] OF IfcRelSpaceBoundary FOR RelatingSpace;\nEND_ENTITY;\n\nENTITY IfcExternalSpatialStructureElement\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcExternalSpatialElement))\n SUBTYPE OF (IfcSpatialElement);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedHatchStyle\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedSurfaceStyle\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedTextFont\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExtrudedAreaSolid\n SUPERTYPE OF (ONEOF\n    (IfcExtrudedAreaSolidTapered))\n SUBTYPE OF (IfcSweptAreaSolid);\n\tExtrudedDirection : IfcDirection;\n\tDepth : IfcPositiveLengthMeasure;\n WHERE\n\tValidExtrusionDirection : IfcDotProduct(IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcDirection([0.0,0.0,1.0]), SELF.ExtrudedDirection) <> 0.0;\nEND_ENTITY;\n\nENTITY IfcExtrudedAreaSolidTapered\n SUBTYPE OF (IfcExtrudedAreaSolid);\n\tEndSweptArea : IfcProfileDef;\n WHERE\n\tCorrectProfileAssignment : IfcTaperedSweptAreaProfiles(SELF\\IfcSweptAreaSolid.SweptArea, SELF.EndSweptArea);\nEND_ENTITY;\n\nENTITY IfcFace\n SUPERTYPE OF (ONEOF\n    (IfcFaceSurface))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tBounds : SET [1:?] OF IfcFaceBound;\n INVERSE\n\tHasTextureMaps : SET [0:?] OF IfcTextureMap FOR MappedTo;\n WHERE\n\tHasOuterBound : SIZEOF(QUERY(temp <* Bounds | 'IFC4.IFCFACEOUTERBOUND' IN TYPEOF(temp))) <= 1;\nEND_ENTITY;\n\nENTITY IfcFaceBasedSurfaceModel\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tFbsmFaces : SET [1:?] OF IfcConnectedFaceSet;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcFaceBound\n SUPERTYPE OF (ONEOF\n    (IfcFaceOuterBound))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tBound : IfcLoop;\n\tOrientation : IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcFaceOuterBound\n SUBTYPE OF (IfcFaceBound);\nEND_ENTITY;\n\nENTITY IfcFaceSurface\n SUPERTYPE OF (ONEOF\n    (IfcAdvancedFace))\n SUBTYPE OF (IfcFace);\n\tFaceSurface : IfcSurface;\n\tSameSense : IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcFacetedBrep\n SUPERTYPE OF (ONEOF\n    (IfcFacetedBrepWithVoids))\n SUBTYPE OF (IfcManifoldSolidBrep);\nEND_ENTITY;\n\nENTITY IfcFacetedBrepWithVoids\n SUBTYPE OF (IfcFacetedBrep);\n\tVoids : SET [1:?] OF IfcClosedShell;\nEND_ENTITY;\n\nENTITY IfcFailureConnectionCondition\n SUBTYPE OF (IfcStructuralConnectionCondition);\n\tTensionFailureX : OPTIONAL IfcForceMeasure;\n\tTensionFailureY : OPTIONAL IfcForceMeasure;\n\tTensionFailureZ : OPTIONAL IfcForceMeasure;\n\tCompressionFailureX : OPTIONAL IfcForceMeasure;\n\tCompressionFailureY : OPTIONAL IfcForceMeasure;\n\tCompressionFailureZ : OPTIONAL IfcForceMeasure;\nEND_ENTITY;\n\nENTITY IfcFan\n SUBTYPE OF (IfcFlowMovingDevice);\n\tPredefinedType : OPTIONAL IfcFanTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcFanTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcFanTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCFANTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFanType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcFanTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFanTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFanTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFastener\n SUBTYPE OF (IfcElementComponent);\n\tPredefinedType : OPTIONAL IfcFastenerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n(PredefinedType <> IfcFastenerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFastenerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCFASTENERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFastenerType\n SUBTYPE OF (IfcElementComponentType);\n\tPredefinedType : IfcFastenerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFastenerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFastenerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFeatureElement\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcFeatureElementAddition\n    ,IfcFeatureElementSubtraction\n    ,IfcSurfaceFeature))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcFeatureElementAddition\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcProjectionElement))\n SUBTYPE OF (IfcFeatureElement);\n INVERSE\n\tProjectsElements : IfcRelProjectsElement FOR RelatedFeatureElement;\nEND_ENTITY;\n\nENTITY IfcFeatureElementSubtraction\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcOpeningElement\n    ,IfcVoidingFeature))\n SUBTYPE OF (IfcFeatureElement);\n INVERSE\n\tVoidsElements : IfcRelVoidsElement FOR RelatedOpeningElement;\n WHERE\n\tHasNoSubtraction : SIZEOF(SELF\\IfcElement.HasOpenings) = 0;\n\tIsNotFilling : SIZEOF(SELF\\IfcElement.FillsVoids) = 0;\nEND_ENTITY;\n\nENTITY IfcFillAreaStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tFillStyles : SET [1:?] OF IfcFillStyleSelect;\n\tModelorDraughting : OPTIONAL IfcBoolean;\n WHERE\n\tMaxOneColour : SIZEOF(QUERY(Style <* SELF.FillStyles |\n  'IFC4.IFCCOLOUR' IN\n   TYPEOF(Style)\n  )) <= 1;\n\tMaxOneExtHatchStyle : SIZEOF(QUERY(Style <* SELF.FillStyles |\n  'IFC4.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN\n   TYPEOF(Style)\n  )) <= 1;\n\tConsistentHatchStyleDef : IfcCorrectFillAreaStyle(SELF.FillStyles);\nEND_ENTITY;\n\nENTITY IfcFillAreaStyleHatching\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tHatchLineAppearance : IfcCurveStyle;\n\tStartOfNextHatchLine : IfcHatchLineDistanceSelect;\n\tPointOfReferenceHatchLine : OPTIONAL IfcCartesianPoint;\n\tPatternStart : OPTIONAL IfcCartesianPoint;\n\tHatchLineAngle : IfcPlaneAngleMeasure;\n WHERE\n\tPatternStart2D : NOT(EXISTS(PatternStart)) OR (PatternStart.Dim = 2);\n\tRefHatchLine2D : NOT(EXISTS(PointOfReferenceHatchLine)) OR (PointOfReferenceHatchLine.Dim = 2);\nEND_ENTITY;\n\nENTITY IfcFillAreaStyleTiles\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tTilingPattern : LIST [2:2] OF IfcVector;\n\tTiles : SET [1:?] OF IfcStyledItem;\n\tTilingScale : IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcFilter\n SUBTYPE OF (IfcFlowTreatmentDevice);\n\tPredefinedType : OPTIONAL IfcFilterTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcFilterTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcFilterTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCFILTERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFilterType\n SUBTYPE OF (IfcFlowTreatmentDeviceType);\n\tPredefinedType : IfcFilterTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFilterTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFilterTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFireSuppressionTerminal\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcFireSuppressionTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcFireSuppressionTerminalTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcFireSuppressionTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCFIRESUPPRESSIONTERMINALTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFireSuppressionTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcFireSuppressionTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFireSuppressionTerminalTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFireSuppressionTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFixedReferenceSweptAreaSolid\n SUBTYPE OF (IfcSweptAreaSolid);\n\tDirectrix : IfcCurve;\n\tStartParam : OPTIONAL IfcParameterValue;\n\tEndParam : OPTIONAL IfcParameterValue;\n\tFixedReference : IfcDirection;\n WHERE\n\tDirectrixBounded : (EXISTS(StartParam) AND EXISTS(EndParam)) OR \n(SIZEOF(['IFC4.IFCCONIC', 'IFC4.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1);\nEND_ENTITY;\n\nENTITY IfcFlowController\n SUPERTYPE OF (ONEOF\n    (IfcAirTerminalBox\n    ,IfcDamper\n    ,IfcElectricDistributionBoard\n    ,IfcElectricTimeControl\n    ,IfcFlowMeter\n    ,IfcProtectiveDevice\n    ,IfcSwitchingDevice\n    ,IfcValve))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowControllerType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcAirTerminalBoxType\n    ,IfcDamperType\n    ,IfcElectricDistributionBoardType\n    ,IfcElectricTimeControlType\n    ,IfcFlowMeterType\n    ,IfcProtectiveDeviceType\n    ,IfcSwitchingDeviceType\n    ,IfcValveType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowFitting\n SUPERTYPE OF (ONEOF\n    (IfcCableCarrierFitting\n    ,IfcCableFitting\n    ,IfcDuctFitting\n    ,IfcJunctionBox\n    ,IfcPipeFitting))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowFittingType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCableCarrierFittingType\n    ,IfcCableFittingType\n    ,IfcDuctFittingType\n    ,IfcJunctionBoxType\n    ,IfcPipeFittingType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowInstrument\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcFlowInstrumentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcFlowInstrumentTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcFlowInstrumentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n('IFC4.IFCFLOWINSTRUMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFlowInstrumentType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcFlowInstrumentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFlowInstrumentTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFlowInstrumentTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFlowMeter\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcFlowMeterTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcFlowMeterTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcFlowMeterTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCFLOWMETERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFlowMeterType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcFlowMeterTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFlowMeterTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFlowMeterTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFlowMovingDevice\n SUPERTYPE OF (ONEOF\n    (IfcCompressor\n    ,IfcFan\n    ,IfcPump))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowMovingDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCompressorType\n    ,IfcFanType\n    ,IfcPumpType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowSegment\n SUPERTYPE OF (ONEOF\n    (IfcCableCarrierSegment\n    ,IfcCableSegment\n    ,IfcDuctSegment\n    ,IfcPipeSegment))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowSegmentType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCableCarrierSegmentType\n    ,IfcCableSegmentType\n    ,IfcDuctSegmentType\n    ,IfcPipeSegmentType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowStorageDevice\n SUPERTYPE OF (ONEOF\n    (IfcElectricFlowStorageDevice\n    ,IfcTank))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowStorageDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcElectricFlowStorageDeviceType\n    ,IfcTankType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowTerminal\n SUPERTYPE OF (ONEOF\n    (IfcAirTerminal\n    ,IfcAudioVisualAppliance\n    ,IfcCommunicationsAppliance\n    ,IfcElectricAppliance\n    ,IfcFireSuppressionTerminal\n    ,IfcLamp\n    ,IfcLightFixture\n    ,IfcMedicalDevice\n    ,IfcOutlet\n    ,IfcSanitaryTerminal\n    ,IfcSpaceHeater\n    ,IfcStackTerminal\n    ,IfcWasteTerminal))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowTerminalType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcAirTerminalType\n    ,IfcAudioVisualApplianceType\n    ,IfcCommunicationsApplianceType\n    ,IfcElectricApplianceType\n    ,IfcFireSuppressionTerminalType\n    ,IfcLampType\n    ,IfcLightFixtureType\n    ,IfcMedicalDeviceType\n    ,IfcOutletType\n    ,IfcSanitaryTerminalType\n    ,IfcSpaceHeaterType\n    ,IfcStackTerminalType\n    ,IfcWasteTerminalType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowTreatmentDevice\n SUPERTYPE OF (ONEOF\n    (IfcDuctSilencer\n    ,IfcFilter\n    ,IfcInterceptor))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowTreatmentDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcDuctSilencerType\n    ,IfcFilterType\n    ,IfcInterceptorType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFooting\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcFootingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT EXISTS(PredefinedType) OR\n(PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCFOOTINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFootingType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcFootingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFurnishingElement\n SUPERTYPE OF (ONEOF\n    (IfcFurniture\n    ,IfcSystemFurnitureElement))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcFurnishingElementType\n SUPERTYPE OF (ONEOF\n    (IfcFurnitureType\n    ,IfcSystemFurnitureElementType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcFurniture\n SUBTYPE OF (IfcFurnishingElement);\n\tPredefinedType : OPTIONAL IfcFurnitureTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcFurnitureTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcFurnitureTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n   ('IFC4.IFCFURNITURETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFurnitureType\n SUBTYPE OF (IfcFurnishingElementType);\n\tAssemblyPlace : IfcAssemblyPlaceEnum;\n\tPredefinedType : OPTIONAL IfcFurnitureTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFurnitureTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcFurnitureTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcGeographicElement\n SUBTYPE OF (IfcElement);\n\tPredefinedType : OPTIONAL IfcGeographicElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcGeographicElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcGeographicElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCGEOGRAPHICELEMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcGeographicElementType\n SUBTYPE OF (IfcElementType);\n\tPredefinedType : IfcGeographicElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcGeographicElementTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcGeographicElementTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcGeometricCurveSet\n SUBTYPE OF (IfcGeometricSet);\n WHERE\n\tNoSurfaces : SIZEOF(QUERY(Temp <* SELF\\IfcGeometricSet.Elements |\n'IFC4.IFCSURFACE' IN TYPEOF(Temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationContext\n SUPERTYPE OF (ONEOF\n    (IfcGeometricRepresentationSubContext))\n SUBTYPE OF (IfcRepresentationContext);\n\tCoordinateSpaceDimension : IfcDimensionCount;\n\tPrecision : OPTIONAL IfcReal;\n\tWorldCoordinateSystem : IfcAxis2Placement;\n\tTrueNorth : OPTIONAL IfcDirection;\n INVERSE\n\tHasSubContexts : SET [0:?] OF IfcGeometricRepresentationSubContext FOR ParentContext;\n\tHasCoordinateOperation : SET [0:1] OF IfcCoordinateOperation FOR SourceCRS;\n WHERE\n\tNorth2D : NOT(EXISTS(TrueNorth)) OR (HIINDEX(TrueNorth.DirectionRatios) = 2);\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcAnnotationFillArea\n    ,IfcBooleanResult\n    ,IfcBoundingBox\n    ,IfcCartesianPointList\n    ,IfcCartesianTransformationOperator\n    ,IfcCompositeCurveSegment\n    ,IfcCsgPrimitive3D\n    ,IfcCurve\n    ,IfcDirection\n    ,IfcFaceBasedSurfaceModel\n    ,IfcFillAreaStyleHatching\n    ,IfcFillAreaStyleTiles\n    ,IfcGeometricSet\n    ,IfcHalfSpaceSolid\n    ,IfcLightSource\n    ,IfcPlacement\n    ,IfcPlanarExtent\n    ,IfcPoint\n    ,IfcSectionedSpine\n    ,IfcShellBasedSurfaceModel\n    ,IfcSolidModel\n    ,IfcSurface\n    ,IfcTessellatedItem\n    ,IfcTextLiteral\n    ,IfcVector))\n SUBTYPE OF (IfcRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationSubContext\n SUBTYPE OF (IfcGeometricRepresentationContext);\n\tParentContext : IfcGeometricRepresentationContext;\n\tTargetScale : OPTIONAL IfcPositiveRatioMeasure;\n\tTargetView : IfcGeometricProjectionEnum;\n\tUserDefinedTargetView : OPTIONAL IfcLabel;\n DERIVE\n\tSELF\\IfcGeometricRepresentationContext.WorldCoordinateSystem : IfcAxis2Placement := ParentContext.WorldCoordinateSystem;\n\tSELF\\IfcGeometricRepresentationContext.CoordinateSpaceDimension : IfcDimensionCount := ParentContext.CoordinateSpaceDimension;\n\tSELF\\IfcGeometricRepresentationContext.TrueNorth : IfcDirection := NVL(ParentContext.TrueNorth, IfcConvertDirectionInto2D(SELF\\IfcGeometricRepresentationContext.WorldCoordinateSystem.P[2]));\n\tSELF\\IfcGeometricRepresentationContext.Precision : IfcReal := NVL(ParentContext.Precision,1.E-5);\n WHERE\n\tParentNoSub : NOT('IFC4.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(ParentContext));\n\tUserTargetProvided : (TargetView <> IfcGeometricProjectionEnum.USERDEFINED) OR \n((TargetView =  IfcGeometricProjectionEnum.USERDEFINED) AND EXISTS(UserDefinedTargetView));\n\tNoCoordOperation : SIZEOF(SELF\\IfcGeometricRepresentationContext.HasCoordinateOperation) = 0;\nEND_ENTITY;\n\nENTITY IfcGeometricSet\n SUPERTYPE OF (ONEOF\n    (IfcGeometricCurveSet))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tElements : SET [1:?] OF IfcGeometricSetSelect;\n DERIVE\n\tDim : IfcDimensionCount := Elements[1].Dim;\n WHERE\n\tConsistentDim : SIZEOF(QUERY(Temp <* Elements |\n  Temp.Dim <> Elements[1].Dim))\n= 0;\nEND_ENTITY;\n\nENTITY IfcGrid\n SUBTYPE OF (IfcProduct);\n\tUAxes : LIST [1:?] OF UNIQUE IfcGridAxis;\n\tVAxes : LIST [1:?] OF UNIQUE IfcGridAxis;\n\tWAxes : OPTIONAL LIST [1:?] OF UNIQUE IfcGridAxis;\n\tPredefinedType : OPTIONAL IfcGridTypeEnum;\n INVERSE\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\n WHERE\n\tHasPlacement : EXISTS(SELF\\IfcProduct.ObjectPlacement);\nEND_ENTITY;\n\nENTITY IfcGridAxis;\n\tAxisTag : OPTIONAL IfcLabel;\n\tAxisCurve : IfcCurve;\n\tSameSense : IfcBoolean;\n INVERSE\n\tPartOfW : SET [0:1] OF IfcGrid FOR WAxes;\n\tPartOfV : SET [0:1] OF IfcGrid FOR VAxes;\n\tPartOfU : SET [0:1] OF IfcGrid FOR UAxes;\n\tHasIntersections : SET [0:?] OF IfcVirtualGridIntersection FOR IntersectingAxes;\n WHERE\n\tWR1 : AxisCurve.Dim = 2;\n\tWR2 : (SIZEOF(PartOfU) = 1) XOR (SIZEOF(PartOfV) = 1) XOR (SIZEOF(PartOfW) = 1);\nEND_ENTITY;\n\nENTITY IfcGridPlacement\n SUBTYPE OF (IfcObjectPlacement);\n\tPlacementLocation : IfcVirtualGridIntersection;\n\tPlacementRefDirection : OPTIONAL IfcGridPlacementDirectionSelect;\nEND_ENTITY;\n\nENTITY IfcGroup\n SUPERTYPE OF (ONEOF\n    (IfcAsset\n    ,IfcInventory\n    ,IfcStructuralLoadGroup\n    ,IfcStructuralResultGroup\n    ,IfcSystem))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tIsGroupedBy : SET [0:?] OF IfcRelAssignsToGroup FOR RelatingGroup;\nEND_ENTITY;\n\nENTITY IfcHalfSpaceSolid\n SUPERTYPE OF (ONEOF\n    (IfcBoxedHalfSpace\n    ,IfcPolygonalBoundedHalfSpace))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tBaseSurface : IfcSurface;\n\tAgreementFlag : IfcBoolean;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcHeatExchanger\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcHeatExchangerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcHeatExchangerTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcHeatExchangerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCHEATEXCHANGERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcHeatExchangerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcHeatExchangerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcHeatExchangerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcHeatExchangerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcHumidifier\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcHumidifierTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcHumidifierTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcHumidifierTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCHUMIDIFIERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcHumidifierType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcHumidifierTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcHumidifierTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcHumidifierTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcIShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tOverallWidth : IfcPositiveLengthMeasure;\n\tOverallDepth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tFlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n WHERE\n\tValidFlangeThickness : (2. * FlangeThickness) < OverallDepth;\n\tValidWebThickness : WebThickness < OverallWidth;\n\tValidFilletRadius : NOT(EXISTS(FilletRadius)) OR\n((FilletRadius <= (OverallWidth - WebThickness)/2.) AND \n (FilletRadius <= (OverallDepth - (2. * FlangeThickness))/2.));\nEND_ENTITY;\n\nENTITY IfcImageTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tURLReference : IfcURIReference;\nEND_ENTITY;\n\nENTITY IfcIndexedColourMap\n SUBTYPE OF (IfcPresentationItem);\n\tMappedTo : IfcTessellatedFaceSet;\n\tOpacity : OPTIONAL IfcNormalisedRatioMeasure;\n\tColours : IfcColourRgbList;\n\tColourIndex : LIST [1:?] OF IfcPositiveInteger;\nEND_ENTITY;\n\nENTITY IfcIndexedPolyCurve\n SUBTYPE OF (IfcBoundedCurve);\n\tPoints : IfcCartesianPointList;\n\tSegments : OPTIONAL LIST [1:?] OF IfcSegmentIndexSelect;\n\tSelfIntersect : OPTIONAL IfcBoolean;\n WHERE\n\tConsecutive : (SIZEOF(Segments) = 0) OR IfcConsecutiveSegments(Segments);\nEND_ENTITY;\n\nENTITY IfcIndexedPolygonalFace\n SUPERTYPE OF (ONEOF\n    (IfcIndexedPolygonalFaceWithVoids))\n SUBTYPE OF (IfcTessellatedItem);\n\tCoordIndex : LIST [3:?] OF IfcPositiveInteger;\n INVERSE\n\tToFaceSet : SET [1:?] OF IfcPolygonalFaceSet FOR Faces;\nEND_ENTITY;\n\nENTITY IfcIndexedPolygonalFaceWithVoids\n SUBTYPE OF (IfcIndexedPolygonalFace);\n\tInnerCoordIndices : LIST [1:?] OF LIST [3:?] OF UNIQUE IfcPositiveInteger;\nEND_ENTITY;\n\nENTITY IfcIndexedTextureMap\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcIndexedTriangleTextureMap))\n SUBTYPE OF (IfcTextureCoordinate);\n\tMappedTo : IfcTessellatedFaceSet;\n\tTexCoords : IfcTextureVertexList;\nEND_ENTITY;\n\nENTITY IfcIndexedTriangleTextureMap\n SUBTYPE OF (IfcIndexedTextureMap);\n\tTexCoordIndex : OPTIONAL LIST [1:?] OF LIST [3:3] OF IfcPositiveInteger;\nEND_ENTITY;\n\nENTITY IfcInterceptor\n SUBTYPE OF (IfcFlowTreatmentDevice);\n\tPredefinedType : OPTIONAL IfcInterceptorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcInterceptorTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcInterceptorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCINTERCEPTORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcInterceptorType\n SUBTYPE OF (IfcFlowTreatmentDeviceType);\n\tPredefinedType : IfcInterceptorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcInterceptorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcInterceptorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcIntersectionCurve\n SUBTYPE OF (IfcSurfaceCurve);\n WHERE\n\tTwoPCurves : SIZEOF(SELF\\IfcSurfaceCurve.AssociatedGeometry) = 2;\n\tDistinctSurfaces : IfcAssociatedSurface(SELF\\IfcSurfaceCurve.AssociatedGeometry[1]) <> IfcAssociatedSurface(SELF\\IfcSurfaceCurve.AssociatedGeometry[2]);\nEND_ENTITY;\n\nENTITY IfcInventory\n SUBTYPE OF (IfcGroup);\n\tPredefinedType : OPTIONAL IfcInventoryTypeEnum;\n\tJurisdiction : OPTIONAL IfcActorSelect;\n\tResponsiblePersons : OPTIONAL SET [1:?] OF IfcPerson;\n\tLastUpdateDate : OPTIONAL IfcDate;\n\tCurrentValue : OPTIONAL IfcCostValue;\n\tOriginalValue : OPTIONAL IfcCostValue;\nEND_ENTITY;\n\nENTITY IfcIrregularTimeSeries\n SUBTYPE OF (IfcTimeSeries);\n\tValues : LIST [1:?] OF IfcIrregularTimeSeriesValue;\nEND_ENTITY;\n\nENTITY IfcIrregularTimeSeriesValue;\n\tTimeStamp : IfcDateTime;\n\tListValues : LIST [1:?] OF IfcValue;\nEND_ENTITY;\n\nENTITY IfcJunctionBox\n SUBTYPE OF (IfcFlowFitting);\n\tPredefinedType : OPTIONAL IfcJunctionBoxTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcJunctionBoxTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcJunctionBoxTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCJUNCTIONBOXTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcJunctionBoxType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcJunctionBoxTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcJunctionBoxTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcJunctionBoxTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcLShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tLegSlope : OPTIONAL IfcPlaneAngleMeasure;\n WHERE\n\tValidThickness : (Thickness < Depth) AND (NOT(EXISTS(Width)) OR (Thickness < Width));\nEND_ENTITY;\n\nENTITY IfcLaborResource\n SUBTYPE OF (IfcConstructionResource);\n\tPredefinedType : OPTIONAL IfcLaborResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcLaborResourceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcLaborResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcLaborResourceType\n SUBTYPE OF (IfcConstructionResourceType);\n\tPredefinedType : IfcLaborResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcLaborResourceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcLaborResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeResource.ResourceType));\nEND_ENTITY;\n\nENTITY IfcLagTime\n SUBTYPE OF (IfcSchedulingTime);\n\tLagValue : IfcTimeOrRatioSelect;\n\tDurationType : IfcTaskDurationEnum;\nEND_ENTITY;\n\nENTITY IfcLamp\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcLampTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcLampTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcLampTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCLAMPTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcLampType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcLampTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcLampTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcLampTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcLibraryInformation\n SUBTYPE OF (IfcExternalInformation);\n\tName : IfcLabel;\n\tVersion : OPTIONAL IfcLabel;\n\tPublisher : OPTIONAL IfcActorSelect;\n\tVersionDate : OPTIONAL IfcDateTime;\n\tLocation : OPTIONAL IfcURIReference;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tLibraryInfoForObjects : SET [0:?] OF IfcRelAssociatesLibrary FOR RelatingLibrary;\n\tHasLibraryReferences : SET [0:?] OF IfcLibraryReference FOR ReferencedLibrary;\nEND_ENTITY;\n\nENTITY IfcLibraryReference\n SUBTYPE OF (IfcExternalReference);\n\tDescription : OPTIONAL IfcText;\n\tLanguage : OPTIONAL IfcLanguageId;\n\tReferencedLibrary : OPTIONAL IfcLibraryInformation;\n INVERSE\n\tLibraryRefForObjects : SET [0:?] OF IfcRelAssociatesLibrary FOR RelatingLibrary;\nEND_ENTITY;\n\nENTITY IfcLightDistributionData;\n\tMainPlaneAngle : IfcPlaneAngleMeasure;\n\tSecondaryPlaneAngle : LIST [1:?] OF IfcPlaneAngleMeasure;\n\tLuminousIntensity : LIST [1:?] OF IfcLuminousIntensityDistributionMeasure;\nEND_ENTITY;\n\nENTITY IfcLightFixture\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcLightFixtureTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcLightFixtureTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcLightFixtureTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCLIGHTFIXTURETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcLightFixtureType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcLightFixtureTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcLightFixtureTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcLightFixtureTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcLightIntensityDistribution;\n\tLightDistributionCurve : IfcLightDistributionCurveEnum;\n\tDistributionData : LIST [1:?] OF IfcLightDistributionData;\nEND_ENTITY;\n\nENTITY IfcLightSource\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcLightSourceAmbient\n    ,IfcLightSourceDirectional\n    ,IfcLightSourceGoniometric\n    ,IfcLightSourcePositional))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tName : OPTIONAL IfcLabel;\n\tLightColour : IfcColourRgb;\n\tAmbientIntensity : OPTIONAL IfcNormalisedRatioMeasure;\n\tIntensity : OPTIONAL IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcLightSourceAmbient\n SUBTYPE OF (IfcLightSource);\nEND_ENTITY;\n\nENTITY IfcLightSourceDirectional\n SUBTYPE OF (IfcLightSource);\n\tOrientation : IfcDirection;\nEND_ENTITY;\n\nENTITY IfcLightSourceGoniometric\n SUBTYPE OF (IfcLightSource);\n\tPosition : IfcAxis2Placement3D;\n\tColourAppearance : OPTIONAL IfcColourRgb;\n\tColourTemperature : IfcThermodynamicTemperatureMeasure;\n\tLuminousFlux : IfcLuminousFluxMeasure;\n\tLightEmissionSource : IfcLightEmissionSourceEnum;\n\tLightDistributionDataSource : IfcLightDistributionDataSourceSelect;\nEND_ENTITY;\n\nENTITY IfcLightSourcePositional\n SUPERTYPE OF (ONEOF\n    (IfcLightSourceSpot))\n SUBTYPE OF (IfcLightSource);\n\tPosition : IfcCartesianPoint;\n\tRadius : IfcPositiveLengthMeasure;\n\tConstantAttenuation : IfcReal;\n\tDistanceAttenuation : IfcReal;\n\tQuadricAttenuation : IfcReal;\nEND_ENTITY;\n\nENTITY IfcLightSourceSpot\n SUBTYPE OF (IfcLightSourcePositional);\n\tOrientation : IfcDirection;\n\tConcentrationExponent : OPTIONAL IfcReal;\n\tSpreadAngle : IfcPositivePlaneAngleMeasure;\n\tBeamWidthAngle : IfcPositivePlaneAngleMeasure;\nEND_ENTITY;\n\nENTITY IfcLine\n SUBTYPE OF (IfcCurve);\n\tPnt : IfcCartesianPoint;\n\tDir : IfcVector;\n WHERE\n\tSameDim : Dir.Dim = Pnt.Dim;\nEND_ENTITY;\n\nENTITY IfcLocalPlacement\n SUBTYPE OF (IfcObjectPlacement);\n\tPlacementRelTo : OPTIONAL IfcObjectPlacement;\n\tRelativePlacement : IfcAxis2Placement;\n WHERE\n\tWR21 : IfcCorrectLocalPlacement(RelativePlacement, PlacementRelTo);\nEND_ENTITY;\n\nENTITY IfcLoop\n SUPERTYPE OF (ONEOF\n    (IfcEdgeLoop\n    ,IfcPolyLoop\n    ,IfcVertexLoop))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcManifoldSolidBrep\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcAdvancedBrep\n    ,IfcFacetedBrep))\n SUBTYPE OF (IfcSolidModel);\n\tOuter : IfcClosedShell;\nEND_ENTITY;\n\nENTITY IfcMapConversion\n SUBTYPE OF (IfcCoordinateOperation);\n\tEastings : IfcLengthMeasure;\n\tNorthings : IfcLengthMeasure;\n\tOrthogonalHeight : IfcLengthMeasure;\n\tXAxisAbscissa : OPTIONAL IfcReal;\n\tXAxisOrdinate : OPTIONAL IfcReal;\n\tScale : OPTIONAL IfcReal;\nEND_ENTITY;\n\nENTITY IfcMappedItem\n SUBTYPE OF (IfcRepresentationItem);\n\tMappingSource : IfcRepresentationMap;\n\tMappingTarget : IfcCartesianTransformationOperator;\nEND_ENTITY;\n\nENTITY IfcMaterial\n SUBTYPE OF (IfcMaterialDefinition);\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tCategory : OPTIONAL IfcLabel;\n INVERSE\n\tHasRepresentation : SET [0:1] OF IfcMaterialDefinitionRepresentation FOR RepresentedMaterial;\n\tIsRelatedWith : SET [0:?] OF IfcMaterialRelationship FOR RelatedMaterials;\n\tRelatesTo : SET [0:1] OF IfcMaterialRelationship FOR RelatingMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialClassificationRelationship;\n\tMaterialClassifications : SET [1:?] OF IfcClassificationSelect;\n\tClassifiedMaterial : IfcMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialConstituent\n SUBTYPE OF (IfcMaterialDefinition);\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tMaterial : IfcMaterial;\n\tFraction : OPTIONAL IfcNormalisedRatioMeasure;\n\tCategory : OPTIONAL IfcLabel;\n INVERSE\n\tToMaterialConstituentSet : IfcMaterialConstituentSet FOR MaterialConstituents;\nEND_ENTITY;\n\nENTITY IfcMaterialConstituentSet\n SUBTYPE OF (IfcMaterialDefinition);\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tMaterialConstituents : OPTIONAL SET [1:?] OF IfcMaterialConstituent;\nEND_ENTITY;\n\nENTITY IfcMaterialDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcMaterial\n    ,IfcMaterialConstituent\n    ,IfcMaterialConstituentSet\n    ,IfcMaterialLayer\n    ,IfcMaterialLayerSet\n    ,IfcMaterialProfile\n    ,IfcMaterialProfileSet));\n INVERSE\n\tAssociatedTo : SET [0:?] OF IfcRelAssociatesMaterial FOR RelatingMaterial;\n\tHasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\n\tHasProperties : SET [0:?] OF IfcMaterialProperties FOR Material;\nEND_ENTITY;\n\nENTITY IfcMaterialDefinitionRepresentation\n SUBTYPE OF (IfcProductRepresentation);\n\tRepresentedMaterial : IfcMaterial;\n WHERE\n\tOnlyStyledRepresentations : SIZEOF(QUERY(temp <* Representations | \n  (NOT('IFC4.IFCSTYLEDREPRESENTATION' IN TYPEOF(temp)))\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcMaterialLayer\n SUPERTYPE OF (ONEOF\n    (IfcMaterialLayerWithOffsets))\n SUBTYPE OF (IfcMaterialDefinition);\n\tMaterial : OPTIONAL IfcMaterial;\n\tLayerThickness : IfcNonNegativeLengthMeasure;\n\tIsVentilated : OPTIONAL IfcLogical;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tCategory : OPTIONAL IfcLabel;\n\tPriority : OPTIONAL IfcInteger;\n INVERSE\n\tToMaterialLayerSet : IfcMaterialLayerSet FOR MaterialLayers;\n WHERE\n\tNormalizedPriority : NOT(EXISTS(Priority)) OR {0 <= Priority <= 100};\nEND_ENTITY;\n\nENTITY IfcMaterialLayerSet\n SUBTYPE OF (IfcMaterialDefinition);\n\tMaterialLayers : LIST [1:?] OF IfcMaterialLayer;\n\tLayerSetName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n DERIVE\n\tTotalThickness : IfcLengthMeasure := IfcMlsTotalThickness(SELF);\nEND_ENTITY;\n\nENTITY IfcMaterialLayerSetUsage\n SUBTYPE OF (IfcMaterialUsageDefinition);\n\tForLayerSet : IfcMaterialLayerSet;\n\tLayerSetDirection : IfcLayerSetDirectionEnum;\n\tDirectionSense : IfcDirectionSenseEnum;\n\tOffsetFromReferenceLine : IfcLengthMeasure;\n\tReferenceExtent : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMaterialLayerWithOffsets\n SUBTYPE OF (IfcMaterialLayer);\n\tOffsetDirection : IfcLayerSetDirectionEnum;\n\tOffsetValues : ARRAY [1:2] OF IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMaterialList;\n\tMaterials : LIST [1:?] OF IfcMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialProfile\n SUPERTYPE OF (ONEOF\n    (IfcMaterialProfileWithOffsets))\n SUBTYPE OF (IfcMaterialDefinition);\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tMaterial : OPTIONAL IfcMaterial;\n\tProfile : IfcProfileDef;\n\tPriority : OPTIONAL IfcInteger;\n\tCategory : OPTIONAL IfcLabel;\n INVERSE\n\tToMaterialProfileSet : IfcMaterialProfileSet FOR MaterialProfiles;\n WHERE\n\tNormalizedPriority : NOT(EXISTS(Priority)) OR {0 <= Priority <= 100};\nEND_ENTITY;\n\nENTITY IfcMaterialProfileSet\n SUBTYPE OF (IfcMaterialDefinition);\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tMaterialProfiles : LIST [1:?] OF IfcMaterialProfile;\n\tCompositeProfile : OPTIONAL IfcCompositeProfileDef;\nEND_ENTITY;\n\nENTITY IfcMaterialProfileSetUsage\n SUPERTYPE OF (ONEOF\n    (IfcMaterialProfileSetUsageTapering))\n SUBTYPE OF (IfcMaterialUsageDefinition);\n\tForProfileSet : IfcMaterialProfileSet;\n\tCardinalPoint : OPTIONAL IfcCardinalPointReference;\n\tReferenceExtent : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMaterialProfileSetUsageTapering\n SUBTYPE OF (IfcMaterialProfileSetUsage);\n\tForProfileEndSet : IfcMaterialProfileSet;\n\tCardinalEndPoint : OPTIONAL IfcCardinalPointReference;\nEND_ENTITY;\n\nENTITY IfcMaterialProfileWithOffsets\n SUBTYPE OF (IfcMaterialProfile);\n\tOffsetValues : ARRAY [1:2] OF IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMaterialProperties\n SUBTYPE OF (IfcExtendedProperties);\n\tMaterial : IfcMaterialDefinition;\nEND_ENTITY;\n\nENTITY IfcMaterialRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingMaterial : IfcMaterial;\n\tRelatedMaterials : SET [1:?] OF IfcMaterial;\n\tExpression : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcMaterialUsageDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcMaterialLayerSetUsage\n    ,IfcMaterialProfileSetUsage));\n INVERSE\n\tAssociatedTo : SET [1:?] OF IfcRelAssociatesMaterial FOR RelatingMaterial;\nEND_ENTITY;\n\nENTITY IfcMeasureWithUnit;\n\tValueComponent : IfcValue;\n\tUnitComponent : IfcUnit;\nEND_ENTITY;\n\nENTITY IfcMechanicalFastener\n SUBTYPE OF (IfcElementComponent);\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tNominalLength : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : OPTIONAL IfcMechanicalFastenerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n(PredefinedType <> IfcMechanicalFastenerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcMechanicalFastenerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCMECHANICALFASTENERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcMechanicalFastenerType\n SUBTYPE OF (IfcElementComponentType);\n\tPredefinedType : IfcMechanicalFastenerTypeEnum;\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tNominalLength : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcMechanicalFastenerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcMechanicalFastenerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcMedicalDevice\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcMedicalDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcMedicalDeviceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcMedicalDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCMEDICALDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcMedicalDeviceType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcMedicalDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcMedicalDeviceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcMedicalDeviceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcMember\n SUPERTYPE OF (ONEOF\n    (IfcMemberStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcMemberTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcMemberTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcMemberTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCMEMBERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcMemberStandardCase\n SUBTYPE OF (IfcMember);\n WHERE\n\tHasMaterialProfileSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') |\n              ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND\n              ('IFC4.IFCMATERIALPROFILESETUSAGE' IN TYPEOF(temp.RelatingMaterial))\n              )) = 1;\nEND_ENTITY;\n\nENTITY IfcMemberType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcMemberTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcMemberTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcMemberTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcMetric\n SUBTYPE OF (IfcConstraint);\n\tBenchmark : IfcBenchmarkEnum;\n\tValueSource : OPTIONAL IfcLabel;\n\tDataValue : OPTIONAL IfcMetricValueSelect;\n\tReferencePath : OPTIONAL IfcReference;\nEND_ENTITY;\n\nENTITY IfcMirroredProfileDef\n SUBTYPE OF (IfcDerivedProfileDef);\n DERIVE\n\tSELF\\IfcDerivedProfileDef.Operator : IfcCartesianTransformationOperator2D := \nIfcRepresentationItem() || IfcGeometricRepresentationItem() ||\nIfcCartesianTransformationOperator(\n    -- Axis1\n    IfcRepresentationItem() || IfcGeometricRepresentationItem() ||\n    IfcDirection([-1., 0.]),\n    -- Axis2\n    IfcRepresentationItem() || IfcGeometricRepresentationItem() ||\n    IfcDirection([ 0., 1.]),\n    -- LocalOrigin\n    IfcRepresentationItem() || IfcGeometricRepresentationItem() ||\n    IfcPoint() || IfcCartesianPoint([0., 0.]),\n    -- Scale\n    1.) ||\nIfcCartesianTransformationOperator2D();\nEND_ENTITY;\n\nENTITY IfcMonetaryUnit;\n\tCurrency : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcMotorConnection\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcMotorConnectionTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcMotorConnectionTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcMotorConnectionTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCMOTORCONNECTIONTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcMotorConnectionType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcMotorConnectionTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcMotorConnectionTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcMotorConnectionTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcNamedUnit\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcContextDependentUnit\n    ,IfcConversionBasedUnit\n    ,IfcSIUnit));\n\tDimensions : IfcDimensionalExponents;\n\tUnitType : IfcUnitEnum;\n WHERE\n\tWR1 : IfcCorrectDimensions (SELF.UnitType, SELF.Dimensions);\nEND_ENTITY;\n\nENTITY IfcObject\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcActor\n    ,IfcControl\n    ,IfcGroup\n    ,IfcProcess\n    ,IfcProduct\n    ,IfcResource))\n SUBTYPE OF (IfcObjectDefinition);\n\tObjectType : OPTIONAL IfcLabel;\n INVERSE\n\tIsDeclaredBy : SET [0:1] OF IfcRelDefinesByObject FOR RelatedObjects;\n\tDeclares : SET [0:?] OF IfcRelDefinesByObject FOR RelatingObject;\n\tIsTypedBy : SET [0:1] OF IfcRelDefinesByType FOR RelatedObjects;\n\tIsDefinedBy : SET [0:?] OF IfcRelDefinesByProperties FOR RelatedObjects;\n WHERE\n\tUniquePropertySetNames : ((SIZEOF(IsDefinedBy) = 0) OR IfcUniqueDefinitionNames(IsDefinedBy));\nEND_ENTITY;\n\nENTITY IfcObjectDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcContext\n    ,IfcObject\n    ,IfcTypeObject))\n SUBTYPE OF (IfcRoot);\n INVERSE\n\tHasAssignments : SET [0:?] OF IfcRelAssigns FOR RelatedObjects;\n\tNests : SET [0:1] OF IfcRelNests FOR RelatedObjects;\n\tIsNestedBy : SET [0:?] OF IfcRelNests FOR RelatingObject;\n\tHasContext : SET [0:1] OF IfcRelDeclares FOR RelatedDefinitions;\n\tIsDecomposedBy : SET [0:?] OF IfcRelAggregates FOR RelatingObject;\n\tDecomposes : SET [0:1] OF IfcRelAggregates FOR RelatedObjects;\n\tHasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects;\nEND_ENTITY;\n\nENTITY IfcObjectPlacement\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcGridPlacement\n    ,IfcLocalPlacement));\n INVERSE\n\tPlacesObject : SET [0:?] OF IfcProduct FOR ObjectPlacement;\n\tReferencedByPlacements : SET [0:?] OF IfcLocalPlacement FOR PlacementRelTo;\nEND_ENTITY;\n\nENTITY IfcObjective\n SUBTYPE OF (IfcConstraint);\n\tBenchmarkValues : OPTIONAL LIST [1:?] OF IfcConstraint;\n\tLogicalAggregator : OPTIONAL IfcLogicalOperatorEnum;\n\tObjectiveQualifier : IfcObjectiveEnum;\n\tUserDefinedQualifier : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : (ObjectiveQualifier <> IfcObjectiveEnum.USERDEFINED) OR\n((ObjectiveQualifier = IfcObjectiveEnum.USERDEFINED) AND EXISTS(SELF\\IfcObjective.UserDefinedQualifier));\nEND_ENTITY;\n\nENTITY IfcOccupant\n SUBTYPE OF (IfcActor);\n\tPredefinedType : OPTIONAL IfcOccupantTypeEnum;\n WHERE\n\tWR31 : NOT(PredefinedType = IfcOccupantTypeEnum.USERDEFINED) \nOR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcOffsetCurve2D\n SUBTYPE OF (IfcCurve);\n\tBasisCurve : IfcCurve;\n\tDistance : IfcLengthMeasure;\n\tSelfIntersect : IfcLogical;\n WHERE\n\tDimIs2D : BasisCurve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcOffsetCurve3D\n SUBTYPE OF (IfcCurve);\n\tBasisCurve : IfcCurve;\n\tDistance : IfcLengthMeasure;\n\tSelfIntersect : IfcLogical;\n\tRefDirection : IfcDirection;\n WHERE\n\tDimIs2D : BasisCurve.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcOpenShell\n SUBTYPE OF (IfcConnectedFaceSet);\nEND_ENTITY;\n\nENTITY IfcOpeningElement\n SUPERTYPE OF (ONEOF\n    (IfcOpeningStandardCase))\n SUBTYPE OF (IfcFeatureElementSubtraction);\n\tPredefinedType : OPTIONAL IfcOpeningElementTypeEnum;\n INVERSE\n\tHasFillings : SET [0:?] OF IfcRelFillsElement FOR RelatingOpeningElement;\nEND_ENTITY;\n\nENTITY IfcOpeningStandardCase\n SUBTYPE OF (IfcOpeningElement);\nEND_ENTITY;\n\nENTITY IfcOrganization;\n\tIdentification : OPTIONAL IfcIdentifier;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\n\tAddresses : OPTIONAL LIST [1:?] OF IfcAddress;\n INVERSE\n\tIsRelatedBy : SET [0:?] OF IfcOrganizationRelationship FOR RelatedOrganizations;\n\tRelates : SET [0:?] OF IfcOrganizationRelationship FOR RelatingOrganization;\n\tEngages : SET [0:?] OF IfcPersonAndOrganization FOR TheOrganization;\nEND_ENTITY;\n\nENTITY IfcOrganizationRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingOrganization : IfcOrganization;\n\tRelatedOrganizations : SET [1:?] OF IfcOrganization;\nEND_ENTITY;\n\nENTITY IfcOrientedEdge\n SUBTYPE OF (IfcEdge);\n\tEdgeElement : IfcEdge;\n\tOrientation : IfcBoolean;\n DERIVE\n\tSELF\\IfcEdge.EdgeStart : IfcVertex := IfcBooleanChoose \n(Orientation, EdgeElement.EdgeStart, EdgeElement.EdgeEnd);\n\tSELF\\IfcEdge.EdgeEnd : IfcVertex := IfcBooleanChoose \n(Orientation, EdgeElement.EdgeEnd, EdgeElement.EdgeStart);\n WHERE\n\tEdgeElementNotOriented : NOT('IFC4.IFCORIENTEDEDGE' IN TYPEOF(EdgeElement));\nEND_ENTITY;\n\nENTITY IfcOuterBoundaryCurve\n SUBTYPE OF (IfcBoundaryCurve);\nEND_ENTITY;\n\nENTITY IfcOutlet\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcOutletTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcOutletTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcOutletTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCOUTLETTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcOutletType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcOutletTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcOutletTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcOutletTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcOwnerHistory;\n\tOwningUser : IfcPersonAndOrganization;\n\tOwningApplication : IfcApplication;\n\tState : OPTIONAL IfcStateEnum;\n\tChangeAction : OPTIONAL IfcChangeActionEnum;\n\tLastModifiedDate : OPTIONAL IfcTimeStamp;\n\tLastModifyingUser : OPTIONAL IfcPersonAndOrganization;\n\tLastModifyingApplication : OPTIONAL IfcApplication;\n\tCreationDate : IfcTimeStamp;\n WHERE\n\tCorrectChangeAction : (EXISTS(LastModifiedDate)) OR\n(NOT(EXISTS(LastModifiedDate)) AND NOT(EXISTS(ChangeAction))) OR\n(NOT(EXISTS(LastModifiedDate)) AND EXISTS(ChangeAction) AND ((ChangeAction = IfcChangeActionEnum.NOTDEFINED) OR (ChangeAction = IfcChangeActionEnum.NOCHANGE)));\nEND_ENTITY;\n\nENTITY IfcParameterizedProfileDef\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcAsymmetricIShapeProfileDef\n    ,IfcCShapeProfileDef\n    ,IfcCircleProfileDef\n    ,IfcEllipseProfileDef\n    ,IfcIShapeProfileDef\n    ,IfcLShapeProfileDef\n    ,IfcRectangleProfileDef\n    ,IfcTShapeProfileDef\n    ,IfcTrapeziumProfileDef\n    ,IfcUShapeProfileDef\n    ,IfcZShapeProfileDef))\n SUBTYPE OF (IfcProfileDef);\n\tPosition : OPTIONAL IfcAxis2Placement2D;\nEND_ENTITY;\n\nENTITY IfcPath\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tEdgeList : LIST [1:?] OF UNIQUE IfcOrientedEdge;\n WHERE\n\tIsContinuous : IfcPathHeadToTail(SELF);\nEND_ENTITY;\n\nENTITY IfcPcurve\n SUBTYPE OF (IfcCurve);\n\tBasisSurface : IfcSurface;\n\tReferenceCurve : IfcCurve;\n WHERE\n\tDimIs2D : ReferenceCurve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcPerformanceHistory\n SUBTYPE OF (IfcControl);\n\tLifeCyclePhase : IfcLabel;\n\tPredefinedType : OPTIONAL IfcPerformanceHistoryTypeEnum;\nEND_ENTITY;\n\nENTITY IfcPermeableCoveringProperties\n SUBTYPE OF (IfcPreDefinedPropertySet);\n\tOperationType : IfcPermeableCoveringOperationEnum;\n\tPanelPosition : IfcWindowPanelPositionEnum;\n\tFrameDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tFrameThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\nEND_ENTITY;\n\nENTITY IfcPermit\n SUBTYPE OF (IfcControl);\n\tPredefinedType : OPTIONAL IfcPermitTypeEnum;\n\tStatus : OPTIONAL IfcLabel;\n\tLongDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcPerson;\n\tIdentification : OPTIONAL IfcIdentifier;\n\tFamilyName : OPTIONAL IfcLabel;\n\tGivenName : OPTIONAL IfcLabel;\n\tMiddleNames : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPrefixTitles : OPTIONAL LIST [1:?] OF IfcLabel;\n\tSuffixTitles : OPTIONAL LIST [1:?] OF IfcLabel;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\n\tAddresses : OPTIONAL LIST [1:?] OF IfcAddress;\n INVERSE\n\tEngagedIn : SET [0:?] OF IfcPersonAndOrganization FOR ThePerson;\n WHERE\n\tIdentifiablePerson : EXISTS(Identification) OR EXISTS(FamilyName) OR EXISTS(GivenName);\n\tValidSetOfNames : NOT EXISTS(MiddleNames) OR EXISTS(FamilyName) OR EXISTS(GivenName);\nEND_ENTITY;\n\nENTITY IfcPersonAndOrganization;\n\tThePerson : IfcPerson;\n\tTheOrganization : IfcOrganization;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\nEND_ENTITY;\n\nENTITY IfcPhysicalComplexQuantity\n SUBTYPE OF (IfcPhysicalQuantity);\n\tHasQuantities : SET [1:?] OF IfcPhysicalQuantity;\n\tDiscrimination : IfcLabel;\n\tQuality : OPTIONAL IfcLabel;\n\tUsage : OPTIONAL IfcLabel;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(temp <* HasQuantities | SELF :=: temp)) = 0;\n\tUniqueQuantityNames : IfcUniqueQuantityNames(HasQuantities);\nEND_ENTITY;\n\nENTITY IfcPhysicalQuantity\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcPhysicalComplexQuantity\n    ,IfcPhysicalSimpleQuantity));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tHasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\n\tPartOfComplex : SET [0:1] OF IfcPhysicalComplexQuantity FOR HasQuantities;\nEND_ENTITY;\n\nENTITY IfcPhysicalSimpleQuantity\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcQuantityArea\n    ,IfcQuantityCount\n    ,IfcQuantityLength\n    ,IfcQuantityTime\n    ,IfcQuantityVolume\n    ,IfcQuantityWeight))\n SUBTYPE OF (IfcPhysicalQuantity);\n\tUnit : OPTIONAL IfcNamedUnit;\nEND_ENTITY;\n\nENTITY IfcPile\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcPileTypeEnum;\n\tConstructionType : OPTIONAL IfcPileConstructionEnum;\n WHERE\n\tCorrectPredefinedType : NOT EXISTS(PredefinedType) OR\n(PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCPILETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcPileType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcPileTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcPipeFitting\n SUBTYPE OF (IfcFlowFitting);\n\tPredefinedType : OPTIONAL IfcPipeFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcPipeFittingTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcPipeFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCPIPEFITTINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcPipeFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcPipeFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcPipeFittingTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcPipeFittingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcPipeSegment\n SUBTYPE OF (IfcFlowSegment);\n\tPredefinedType : OPTIONAL IfcPipeSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcPipeSegmentTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcPipeSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCPIPESEGMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcPipeSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcPipeSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcPipeSegmentTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcPipeSegmentTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcPixelTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tWidth : IfcInteger;\n\tHeight : IfcInteger;\n\tColourComponents : IfcInteger;\n\tPixel : LIST [1:?] OF IfcBinary;\n WHERE\n\tMinPixelInS : Width >= 1;\n\tMinPixelInT : Height >= 1;\n\tNumberOfColours : {1 <= ColourComponents <= 4};\n\tSizeOfPixelList : SIZEOF(Pixel) = (Width * Height);\n\tPixelAsByteAndSameLength : SIZEOF(QUERY(temp<* Pixel |\n (BLENGTH(temp) MOD 8 = 0) AND\n (BLENGTH(temp) = BLENGTH(Pixel[1]))\n)) = SIZEOF(Pixel);\nEND_ENTITY;\n\nENTITY IfcPlacement\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcAxis1Placement\n    ,IfcAxis2Placement2D\n    ,IfcAxis2Placement3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tLocation : IfcCartesianPoint;\n DERIVE\n\tDim : IfcDimensionCount := Location.Dim;\nEND_ENTITY;\n\nENTITY IfcPlanarBox\n SUBTYPE OF (IfcPlanarExtent);\n\tPlacement : IfcAxis2Placement;\nEND_ENTITY;\n\nENTITY IfcPlanarExtent\n SUPERTYPE OF (ONEOF\n    (IfcPlanarBox))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSizeInX : IfcLengthMeasure;\n\tSizeInY : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcPlane\n SUBTYPE OF (IfcElementarySurface);\nEND_ENTITY;\n\nENTITY IfcPlate\n SUPERTYPE OF (ONEOF\n    (IfcPlateStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcPlateTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcPlateTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcPlateTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCPLATETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcPlateStandardCase\n SUBTYPE OF (IfcPlate);\n WHERE\n\tHasMaterialLayerSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') |\n              ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND\n              ('IFC4.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial))\n              )) = 1;\nEND_ENTITY;\n\nENTITY IfcPlateType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcPlateTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcPlateTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcPlateTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcPoint\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCartesianPoint\n    ,IfcPointOnCurve\n    ,IfcPointOnSurface))\n SUBTYPE OF (IfcGeometricRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcPointOnCurve\n SUBTYPE OF (IfcPoint);\n\tBasisCurve : IfcCurve;\n\tPointParameter : IfcParameterValue;\n DERIVE\n\tDim : IfcDimensionCount := BasisCurve.Dim;\nEND_ENTITY;\n\nENTITY IfcPointOnSurface\n SUBTYPE OF (IfcPoint);\n\tBasisSurface : IfcSurface;\n\tPointParameterU : IfcParameterValue;\n\tPointParameterV : IfcParameterValue;\n DERIVE\n\tDim : IfcDimensionCount := BasisSurface.Dim;\nEND_ENTITY;\n\nENTITY IfcPolyLoop\n SUBTYPE OF (IfcLoop);\n\tPolygon : LIST [3:?] OF UNIQUE IfcCartesianPoint;\n WHERE\n\tAllPointsSameDim : SIZEOF(QUERY(Temp <* Polygon | Temp.Dim <> Polygon[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcPolygonalBoundedHalfSpace\n SUBTYPE OF (IfcHalfSpaceSolid);\n\tPosition : IfcAxis2Placement3D;\n\tPolygonalBoundary : IfcBoundedCurve;\n WHERE\n\tBoundaryDim : PolygonalBoundary.Dim = 2;\n\tBoundaryType : SIZEOF(TYPEOF(PolygonalBoundary) * [\n  'IFC4.IFCPOLYLINE', \n  'IFC4.IFCCOMPOSITECURVE']\n) = 1;\nEND_ENTITY;\n\nENTITY IfcPolygonalFaceSet\n SUBTYPE OF (IfcTessellatedFaceSet);\n\tClosed : OPTIONAL IfcBoolean;\n\tFaces : LIST [1:?] OF IfcIndexedPolygonalFace;\n\tPnIndex : OPTIONAL LIST [1:?] OF IfcPositiveInteger;\nEND_ENTITY;\n\nENTITY IfcPolyline\n SUBTYPE OF (IfcBoundedCurve);\n\tPoints : LIST [2:?] OF IfcCartesianPoint;\n WHERE\n\tSameDim : SIZEOF(QUERY(Temp <* Points | Temp.Dim <> Points[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcPort\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcDistributionPort))\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tContainedIn : SET [0:1] OF IfcRelConnectsPortToElement FOR RelatingPort;\n\tConnectedFrom : SET [0:1] OF IfcRelConnectsPorts FOR RelatedPort;\n\tConnectedTo : SET [0:1] OF IfcRelConnectsPorts FOR RelatingPort;\nEND_ENTITY;\n\nENTITY IfcPostalAddress\n SUBTYPE OF (IfcAddress);\n\tInternalLocation : OPTIONAL IfcLabel;\n\tAddressLines : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPostalBox : OPTIONAL IfcLabel;\n\tTown : OPTIONAL IfcLabel;\n\tRegion : OPTIONAL IfcLabel;\n\tPostalCode : OPTIONAL IfcLabel;\n\tCountry : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS (InternalLocation) OR \nEXISTS (AddressLines) OR\nEXISTS (PostalBox) OR\nEXISTS (PostalCode) OR\nEXISTS (Town) OR \nEXISTS (Region) OR  \nEXISTS (Country);\nEND_ENTITY;\n\nENTITY IfcPreDefinedColour\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcDraughtingPreDefinedColour))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPreDefinedCurveFont\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcDraughtingPreDefinedCurveFont))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPreDefinedItem\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcPreDefinedColour\n    ,IfcPreDefinedCurveFont\n    ,IfcPreDefinedTextFont))\n SUBTYPE OF (IfcPresentationItem);\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcPreDefinedProperties\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcReinforcementBarProperties\n    ,IfcSectionProperties\n    ,IfcSectionReinforcementProperties))\n SUBTYPE OF (IfcPropertyAbstraction);\nEND_ENTITY;\n\nENTITY IfcPreDefinedPropertySet\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcDoorLiningProperties\n    ,IfcDoorPanelProperties\n    ,IfcPermeableCoveringProperties\n    ,IfcReinforcementDefinitionProperties\n    ,IfcWindowLiningProperties\n    ,IfcWindowPanelProperties))\n SUBTYPE OF (IfcPropertySetDefinition);\nEND_ENTITY;\n\nENTITY IfcPreDefinedTextFont\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcTextStyleFontModel))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcColourRgbList\n    ,IfcColourSpecification\n    ,IfcCurveStyleFont\n    ,IfcCurveStyleFontAndScaling\n    ,IfcCurveStyleFontPattern\n    ,IfcIndexedColourMap\n    ,IfcPreDefinedItem\n    ,IfcSurfaceStyleLighting\n    ,IfcSurfaceStyleRefraction\n    ,IfcSurfaceStyleShading\n    ,IfcSurfaceStyleWithTextures\n    ,IfcSurfaceTexture\n    ,IfcTextStyleForDefinedFont\n    ,IfcTextStyleTextModel\n    ,IfcTextureCoordinate\n    ,IfcTextureVertex\n    ,IfcTextureVertexList));\nEND_ENTITY;\n\nENTITY IfcPresentationLayerAssignment\n SUPERTYPE OF (ONEOF\n    (IfcPresentationLayerWithStyle));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tAssignedItems : SET [1:?] OF IfcLayeredItem;\n\tIdentifier : OPTIONAL IfcIdentifier;\n WHERE\n\tApplicableItems : SIZEOF(QUERY(temp <* AssignedItems | (\n  SIZEOF(TYPEOF(temp) * [\n    'IFC4.IFCSHAPEREPRESENTATION',\n    'IFC4.IFCGEOMETRICREPRESENTATIONITEM',\n    'IFC4.IFCMAPPEDITEM']) = 1)\n)) = SIZEOF(AssignedItems);\nEND_ENTITY;\n\nENTITY IfcPresentationLayerWithStyle\n SUBTYPE OF (IfcPresentationLayerAssignment);\n\tLayerOn : IfcLogical;\n\tLayerFrozen : IfcLogical;\n\tLayerBlocked : IfcLogical;\n\tLayerStyles : SET [0:?] OF IfcPresentationStyle;\n WHERE\n\tApplicableOnlyToItems : SIZEOF(QUERY(temp <* AssignedItems | (\n  SIZEOF(TYPEOF(temp) * [\n    'IFC4.IFCGEOMETRICREPRESENTATIONITEM',\n    'IFC4.IFCMAPPEDITEM']) = 1)\n)) = SIZEOF(AssignedItems);\nEND_ENTITY;\n\nENTITY IfcPresentationStyle\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCurveStyle\n    ,IfcFillAreaStyle\n    ,IfcSurfaceStyle\n    ,IfcTextStyle));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcPresentationStyleAssignment;\n\tStyles : SET [1:?] OF IfcPresentationStyleSelect;\nEND_ENTITY;\n\nENTITY IfcProcedure\n SUBTYPE OF (IfcProcess);\n\tPredefinedType : OPTIONAL IfcProcedureTypeEnum;\n WHERE\n\tHasName : EXISTS(SELF\\IfcRoot.Name);\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcProcedureTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcProcedureTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcProcedureType\n SUBTYPE OF (IfcTypeProcess);\n\tPredefinedType : IfcProcedureTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcProcedureTypeEnum.USERDEFINED) OR ((PredefinedType = IfcProcedureTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeProcess.ProcessType));\nEND_ENTITY;\n\nENTITY IfcProcess\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcEvent\n    ,IfcProcedure\n    ,IfcTask))\n SUBTYPE OF (IfcObject);\n\tIdentification : OPTIONAL IfcIdentifier;\n\tLongDescription : OPTIONAL IfcText;\n INVERSE\n\tIsPredecessorTo : SET [0:?] OF IfcRelSequence FOR RelatingProcess;\n\tIsSuccessorFrom : SET [0:?] OF IfcRelSequence FOR RelatedProcess;\n\tOperatesOn : SET [0:?] OF IfcRelAssignsToProcess FOR RelatingProcess;\nEND_ENTITY;\n\nENTITY IfcProduct\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcAnnotation\n    ,IfcElement\n    ,IfcGrid\n    ,IfcPort\n    ,IfcProxy\n    ,IfcSpatialElement\n    ,IfcStructuralActivity\n    ,IfcStructuralItem))\n SUBTYPE OF (IfcObject);\n\tObjectPlacement : OPTIONAL IfcObjectPlacement;\n\tRepresentation : OPTIONAL IfcProductRepresentation;\n INVERSE\n\tReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct;\n WHERE\n\tPlacementForShapeRepresentation : (EXISTS(Representation) AND EXISTS(ObjectPlacement))\n            OR (EXISTS(Representation) AND \n\t\t\t   (SIZEOF(QUERY(temp <* Representation.Representations | 'IFC4.IFCSHAPEREPRESENTATION' IN TYPEOF(temp))) = 0))\n            OR (NOT(EXISTS(Representation)));\nEND_ENTITY;\n\nENTITY IfcProductDefinitionShape\n SUBTYPE OF (IfcProductRepresentation);\n INVERSE\n\tShapeOfProduct : SET [1:?] OF IfcProduct FOR Representation;\n\tHasShapeAspects : SET [0:?] OF IfcShapeAspect FOR PartOfProductDefinitionShape;\n WHERE\n\tOnlyShapeModel : SIZEOF(QUERY(temp <* Representations | \n  (NOT('IFC4.IFCSHAPEMODEL' IN TYPEOF(temp)))\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcProductRepresentation\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcMaterialDefinitionRepresentation\n    ,IfcProductDefinitionShape));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRepresentations : LIST [1:?] OF IfcRepresentation;\nEND_ENTITY;\n\nENTITY IfcProfileDef\n SUPERTYPE OF (ONEOF\n    (IfcArbitraryClosedProfileDef\n    ,IfcArbitraryOpenProfileDef\n    ,IfcCompositeProfileDef\n    ,IfcDerivedProfileDef\n    ,IfcParameterizedProfileDef));\n\tProfileType : IfcProfileTypeEnum;\n\tProfileName : OPTIONAL IfcLabel;\n INVERSE\n\tHasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\n\tHasProperties : SET [0:?] OF IfcProfileProperties FOR ProfileDefinition;\nEND_ENTITY;\n\nENTITY IfcProfileProperties\n SUBTYPE OF (IfcExtendedProperties);\n\tProfileDefinition : IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcProject\n SUBTYPE OF (IfcContext);\n WHERE\n\tHasName : EXISTS(SELF\\IfcRoot.Name);\n\tCorrectContext : NOT(EXISTS(SELF\\IfcContext.RepresentationContexts)) OR\n(SIZEOF(QUERY(Temp <* SELF\\IfcContext.RepresentationContexts |\n 'IFC4.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(Temp)\n  )) = 0);\n\tNoDecomposition : SIZEOF(SELF\\IfcObjectDefinition.Decomposes) = 0;\nEND_ENTITY;\n\nENTITY IfcProjectLibrary\n SUBTYPE OF (IfcContext);\nEND_ENTITY;\n\nENTITY IfcProjectOrder\n SUBTYPE OF (IfcControl);\n\tPredefinedType : OPTIONAL IfcProjectOrderTypeEnum;\n\tStatus : OPTIONAL IfcLabel;\n\tLongDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcProjectedCRS\n SUBTYPE OF (IfcCoordinateReferenceSystem);\n\tMapProjection : OPTIONAL IfcIdentifier;\n\tMapZone : OPTIONAL IfcIdentifier;\n\tMapUnit : OPTIONAL IfcNamedUnit;\n WHERE\n\tIsLengthUnit : NOT(EXISTS(MapUnit)) OR (MapUnit.UnitType = IfcUnitEnum.LENGTHUNIT);\nEND_ENTITY;\n\nENTITY IfcProjectionElement\n SUBTYPE OF (IfcFeatureElementAddition);\n\tPredefinedType : OPTIONAL IfcProjectionElementTypeEnum;\nEND_ENTITY;\n\nENTITY IfcProperty\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcComplexProperty\n    ,IfcSimpleProperty))\n SUBTYPE OF (IfcPropertyAbstraction);\n\tName : IfcIdentifier;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tPartOfPset : SET [0:?] OF IfcPropertySet FOR HasProperties;\n\tPropertyForDependance : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependingProperty;\n\tPropertyDependsOn : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependantProperty;\n\tPartOfComplex : SET [0:?] OF IfcComplexProperty FOR HasProperties;\n\tHasConstraints : SET [0:?] OF IfcResourceConstraintRelationship FOR RelatedResourceObjects;\n\tHasApprovals : SET [0:?] OF IfcResourceApprovalRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcPropertyAbstraction\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcExtendedProperties\n    ,IfcPreDefinedProperties\n    ,IfcProperty\n    ,IfcPropertyEnumeration));\n INVERSE\n\tHasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcPropertyBoundedValue\n SUBTYPE OF (IfcSimpleProperty);\n\tUpperBoundValue : OPTIONAL IfcValue;\n\tLowerBoundValue : OPTIONAL IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n\tSetPointValue : OPTIONAL IfcValue;\n WHERE\n\tSameUnitUpperLower : NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(LowerBoundValue)) OR\n(TYPEOF(UpperBoundValue) = TYPEOF(LowerBoundValue));\n\tSameUnitUpperSet : NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(SetPointValue)) OR\n(TYPEOF(UpperBoundValue) = TYPEOF(SetPointValue));\n\tSameUnitLowerSet : NOT(EXISTS(LowerBoundValue)) OR NOT(EXISTS(SetPointValue)) OR\n(TYPEOF(LowerBoundValue) = TYPEOF(SetPointValue));\nEND_ENTITY;\n\nENTITY IfcPropertyDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcPropertySetDefinition\n    ,IfcPropertyTemplateDefinition))\n SUBTYPE OF (IfcRoot);\n INVERSE\n\tHasContext : SET [0:1] OF IfcRelDeclares FOR RelatedDefinitions;\n\tHasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects;\nEND_ENTITY;\n\nENTITY IfcPropertyDependencyRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tDependingProperty : IfcProperty;\n\tDependantProperty : IfcProperty;\n\tExpression : OPTIONAL IfcText;\n WHERE\n\tNoSelfReference : DependingProperty :<>: DependantProperty;\nEND_ENTITY;\n\nENTITY IfcPropertyEnumeratedValue\n SUBTYPE OF (IfcSimpleProperty);\n\tEnumerationValues : OPTIONAL LIST [1:?] OF IfcValue;\n\tEnumerationReference : OPTIONAL IfcPropertyEnumeration;\n WHERE\n\tWR21 : NOT(EXISTS(EnumerationReference)) \nOR  NOT(EXISTS(EnumerationValues)) \nOR  (SIZEOF(QUERY(temp <* EnumerationValues |\n    temp IN EnumerationReference.EnumerationValues))\n    = SIZEOF(EnumerationValues));\nEND_ENTITY;\n\nENTITY IfcPropertyEnumeration\n SUBTYPE OF (IfcPropertyAbstraction);\n\tName : IfcLabel;\n\tEnumerationValues : LIST [1:?] OF UNIQUE IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n UNIQUE\n\tUR1 : Name;\n WHERE\n\tWR01 : SIZEOF(QUERY(temp <* SELF.EnumerationValues | \n  NOT(TYPEOF(SELF.EnumerationValues[1]) = TYPEOF(temp))\n  )) = 0;\nEND_ENTITY;\n\nENTITY IfcPropertyListValue\n SUBTYPE OF (IfcSimpleProperty);\n\tListValues : OPTIONAL LIST [1:?] OF IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n WHERE\n\tWR31 : SIZEOF(QUERY(temp <* SELF.ListValues | \n  NOT(TYPEOF(SELF.ListValues[1]) = TYPEOF(temp))\n  )) = 0;\nEND_ENTITY;\n\nENTITY IfcPropertyReferenceValue\n SUBTYPE OF (IfcSimpleProperty);\n\tUsageName : OPTIONAL IfcText;\n\tPropertyReference : OPTIONAL IfcObjectReferenceSelect;\nEND_ENTITY;\n\nENTITY IfcPropertySet\n SUBTYPE OF (IfcPropertySetDefinition);\n\tHasProperties : SET [1:?] OF IfcProperty;\n WHERE\n\tExistsName : EXISTS(SELF\\IfcRoot.Name);\n\tUniquePropertyNames : IfcUniquePropertyName(HasProperties);\nEND_ENTITY;\n\nENTITY IfcPropertySetDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcPreDefinedPropertySet\n    ,IfcPropertySet\n    ,IfcQuantitySet))\n SUBTYPE OF (IfcPropertyDefinition);\n INVERSE\n\tDefinesType : SET [0:?] OF IfcTypeObject FOR HasPropertySets;\n\tIsDefinedBy : SET [0:?] OF IfcRelDefinesByTemplate FOR RelatedPropertySets;\n\tDefinesOccurrence : SET [0:?] OF IfcRelDefinesByProperties FOR RelatingPropertyDefinition;\nEND_ENTITY;\n\nENTITY IfcPropertySetTemplate\n SUBTYPE OF (IfcPropertyTemplateDefinition);\n\tTemplateType : OPTIONAL IfcPropertySetTemplateTypeEnum;\n\tApplicableEntity : OPTIONAL IfcIdentifier;\n\tHasPropertyTemplates : SET [1:?] OF IfcPropertyTemplate;\n INVERSE\n\tDefines : SET [0:?] OF IfcRelDefinesByTemplate FOR RelatingTemplate;\n WHERE\n\tExistsName : EXISTS(SELF\\IfcRoot.Name);\n\tUniquePropertyNames : IfcUniquePropertyTemplateNames(HasPropertyTemplates);\nEND_ENTITY;\n\nENTITY IfcPropertySingleValue\n SUBTYPE OF (IfcSimpleProperty);\n\tNominalValue : OPTIONAL IfcValue;\n\tUnit : OPTIONAL IfcUnit;\nEND_ENTITY;\n\nENTITY IfcPropertyTableValue\n SUBTYPE OF (IfcSimpleProperty);\n\tDefiningValues : OPTIONAL LIST [1:?] OF UNIQUE IfcValue;\n\tDefinedValues : OPTIONAL LIST [1:?] OF IfcValue;\n\tExpression : OPTIONAL IfcText;\n\tDefiningUnit : OPTIONAL IfcUnit;\n\tDefinedUnit : OPTIONAL IfcUnit;\n\tCurveInterpolation : OPTIONAL IfcCurveInterpolationEnum;\n WHERE\n\tWR21 : (NOT(EXISTS(DefiningValues)) AND NOT(EXISTS(DefinedValues)))\nOR (SIZEOF(DefiningValues) = SIZEOF(DefinedValues));\n\tWR22 : NOT(EXISTS(DefiningValues)) OR \n(SIZEOF(QUERY(temp <* SELF.DefiningValues | TYPEOF(temp) <> TYPEOF(SELF.DefiningValues[1])\n)) = 0);\n\tWR23 : NOT(EXISTS(DefinedValues)) OR \n(SIZEOF(QUERY(temp <* SELF.DefinedValues | TYPEOF(temp) <> TYPEOF(SELF.DefinedValues[1])\n)) = 0);\nEND_ENTITY;\n\nENTITY IfcPropertyTemplate\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcComplexPropertyTemplate\n    ,IfcSimplePropertyTemplate))\n SUBTYPE OF (IfcPropertyTemplateDefinition);\n INVERSE\n\tPartOfComplexTemplate : SET [0:?] OF IfcComplexPropertyTemplate FOR HasPropertyTemplates;\n\tPartOfPsetTemplate : SET [0:?] OF IfcPropertySetTemplate FOR HasPropertyTemplates;\nEND_ENTITY;\n\nENTITY IfcPropertyTemplateDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcPropertySetTemplate\n    ,IfcPropertyTemplate))\n SUBTYPE OF (IfcPropertyDefinition);\nEND_ENTITY;\n\nENTITY IfcProtectiveDevice\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcProtectiveDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcProtectiveDeviceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcProtectiveDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCPROTECTIVEDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcProtectiveDeviceTrippingUnit\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcProtectiveDeviceTrippingUnitTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCPROTECTIVEDEVICETRIPPINGUNITTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcProtectiveDeviceTrippingUnitType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcProtectiveDeviceTrippingUnitTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcProtectiveDeviceType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcProtectiveDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcProtectiveDeviceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcProtectiveDeviceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcProxy\n SUBTYPE OF (IfcProduct);\n\tProxyType : IfcObjectTypeEnum;\n\tTag : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcPump\n SUBTYPE OF (IfcFlowMovingDevice);\n\tPredefinedType : OPTIONAL IfcPumpTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcPumpTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcPumpTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCPUMPTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcPumpType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcPumpTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcPumpTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcPumpTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcQuantityArea\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tAreaValue : IfcAreaMeasure;\n\tFormula : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n   (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.AREAUNIT);\n\tWR22 : AreaValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityCount\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tCountValue : IfcCountMeasure;\n\tFormula : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : CountValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityLength\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tLengthValue : IfcLengthMeasure;\n\tFormula : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n   (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.LENGTHUNIT);\n\tWR22 : LengthValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantitySet\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcElementQuantity))\n SUBTYPE OF (IfcPropertySetDefinition);\nEND_ENTITY;\n\nENTITY IfcQuantityTime\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tTimeValue : IfcTimeMeasure;\n\tFormula : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n   (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.TIMEUNIT);\n\tWR22 : TimeValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityVolume\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tVolumeValue : IfcVolumeMeasure;\n\tFormula : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n   (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.VOLUMEUNIT);\n\tWR22 : VolumeValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityWeight\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tWeightValue : IfcMassMeasure;\n\tFormula : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n   (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.MASSUNIT);\n\tWR22 : WeightValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcRailing\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcRailingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcRailingTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRailingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCRAILINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcRailingType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcRailingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcRailingTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcRailingTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcRamp\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcRampTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcRampTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRampTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCRAMPTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcRampFlight\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcRampFlightTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcRampFlightTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRampFlightTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCRAMPFLIGHTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcRampFlightType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcRampFlightTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcRampFlightTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcRampFlightTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcRampType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcRampTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcRampTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcRampTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcRationalBSplineCurveWithKnots\n SUBTYPE OF (IfcBSplineCurveWithKnots);\n\tWeightsData : LIST [2:?] OF IfcReal;\n DERIVE\n\tWeights : ARRAY [0:UpperIndexOnControlPoints] OF IfcReal := IfcListToArray(WeightsData,0,SELF\\IfcBSplineCurve.UpperIndexOnControlPoints);\n WHERE\n\tSameNumOfWeightsAndPoints : SIZEOF(WeightsData) = SIZEOF(SELF\\IfcBSplineCurve.ControlPointsList);\n\tWeightsGreaterZero : IfcCurveWeightsPositive(SELF);\nEND_ENTITY;\n\nENTITY IfcRationalBSplineSurfaceWithKnots\n SUBTYPE OF (IfcBSplineSurfaceWithKnots);\n\tWeightsData : LIST [2:?] OF LIST [2:?] OF IfcReal;\n DERIVE\n\tWeights : ARRAY [0:UUpper] OF ARRAY [0:VUpper] OF IfcReal := IfcMakeArrayOfArray(WeightsData,0,UUpper,0,VUpper);\n WHERE\n\tCorrespondingWeightsDataLists : (SIZEOF(WeightsData) = SIZEOF(SELF\\IfcBSplineSurface.ControlPointsList))\nAND \n(SIZEOF(WeightsData[1]) = SIZEOF(SELF\\IfcBSplineSurface.ControlPointsList[1]));\n\tWeightValuesGreaterZero : IfcSurfaceWeightsPositive(SELF);\nEND_ENTITY;\n\nENTITY IfcRectangleHollowProfileDef\n SUBTYPE OF (IfcRectangleProfileDef);\n\tWallThickness : IfcPositiveLengthMeasure;\n\tInnerFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tOuterFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n WHERE\n\tValidWallThickness : (WallThickness < (SELF\\IfcRectangleProfileDef.XDim/2.)) AND \n(WallThickness < (SELF\\IfcRectangleProfileDef.YDim/2.));\n\tValidInnerRadius : NOT(EXISTS(InnerFilletRadius)) OR \n((InnerFilletRadius <= (SELF\\IfcRectangleProfileDef.XDim/2. - WallThickness)) AND \n (InnerFilletRadius <= (SELF\\IfcRectangleProfileDef.YDim/2. - WallThickness)));\n\tValidOuterRadius : NOT(EXISTS(OuterFilletRadius)) OR \n((OuterFilletRadius <= (SELF\\IfcRectangleProfileDef.XDim/2.)) AND \n (OuterFilletRadius <= (SELF\\IfcRectangleProfileDef.YDim/2.)));\nEND_ENTITY;\n\nENTITY IfcRectangleProfileDef\n SUPERTYPE OF (ONEOF\n    (IfcRectangleHollowProfileDef\n    ,IfcRoundedRectangleProfileDef))\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRectangularPyramid\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tXLength : IfcPositiveLengthMeasure;\n\tYLength : IfcPositiveLengthMeasure;\n\tHeight : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRectangularTrimmedSurface\n SUBTYPE OF (IfcBoundedSurface);\n\tBasisSurface : IfcSurface;\n\tU1 : IfcParameterValue;\n\tV1 : IfcParameterValue;\n\tU2 : IfcParameterValue;\n\tV2 : IfcParameterValue;\n\tUsense : IfcBoolean;\n\tVsense : IfcBoolean;\n WHERE\n\tU1AndU2Different : U1 <> U2;\n\tV1AndV2Different : V1 <> V2;\n\tUsenseCompatible : (('IFC4.IFCELEMENTARYSURFACE' IN TYPEOF(BasisSurface)) AND\n         (NOT ('IFC4.IFCPLANE' IN TYPEOF(BasisSurface)))) OR\n         ('IFC4.IFCSURFACEOFREVOLUTION' IN TYPEOF(BasisSurface)) OR\n         (Usense = (U2 > U1));\n\tVsenseCompatible : Vsense = (V2 > V1);\nEND_ENTITY;\n\nENTITY IfcRecurrencePattern;\n\tRecurrenceType : IfcRecurrenceTypeEnum;\n\tDayComponent : OPTIONAL SET [1:?] OF IfcDayInMonthNumber;\n\tWeekdayComponent : OPTIONAL SET [1:?] OF IfcDayInWeekNumber;\n\tMonthComponent : OPTIONAL SET [1:?] OF IfcMonthInYearNumber;\n\tPosition : OPTIONAL IfcInteger;\n\tInterval : OPTIONAL IfcInteger;\n\tOccurrences : OPTIONAL IfcInteger;\n\tTimePeriods : OPTIONAL LIST [1:?] OF IfcTimePeriod;\nEND_ENTITY;\n\nENTITY IfcReference;\n\tTypeIdentifier : OPTIONAL IfcIdentifier;\n\tAttributeIdentifier : OPTIONAL IfcIdentifier;\n\tInstanceName : OPTIONAL IfcLabel;\n\tListPositions : OPTIONAL LIST [1:?] OF IfcInteger;\n\tInnerReference : OPTIONAL IfcReference;\nEND_ENTITY;\n\nENTITY IfcRegularTimeSeries\n SUBTYPE OF (IfcTimeSeries);\n\tTimeStep : IfcTimeMeasure;\n\tValues : LIST [1:?] OF IfcTimeSeriesValue;\nEND_ENTITY;\n\nENTITY IfcReinforcementBarProperties\n SUBTYPE OF (IfcPreDefinedProperties);\n\tTotalCrossSectionArea : IfcAreaMeasure;\n\tSteelGrade : IfcLabel;\n\tBarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;\n\tEffectiveDepth : OPTIONAL IfcLengthMeasure;\n\tNominalBarDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tBarCount : OPTIONAL IfcCountMeasure;\nEND_ENTITY;\n\nENTITY IfcReinforcementDefinitionProperties\n SUBTYPE OF (IfcPreDefinedPropertySet);\n\tDefinitionType : OPTIONAL IfcLabel;\n\tReinforcementSectionDefinitions : LIST [1:?] OF IfcSectionReinforcementProperties;\nEND_ENTITY;\n\nENTITY IfcReinforcingBar\n SUBTYPE OF (IfcReinforcingElement);\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tBarLength : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : OPTIONAL IfcReinforcingBarTypeEnum;\n\tBarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;\n WHERE\n\tCorrectPredefinedType : NOT EXISTS(PredefinedType) OR\n(PredefinedType <> IfcReinforcingBarTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcReinforcingBarTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCREINFORCINGBARTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcReinforcingBarType\n SUBTYPE OF (IfcReinforcingElementType);\n\tPredefinedType : IfcReinforcingBarTypeEnum;\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tBarLength : OPTIONAL IfcPositiveLengthMeasure;\n\tBarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;\n\tBendingShapeCode : OPTIONAL IfcLabel;\n\tBendingParameters : OPTIONAL LIST [1:?] OF IfcBendingParameterSelect;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcReinforcingBarTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcReinforcingBarTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\n\tBendingShapeCodeProvided : NOT EXISTS(BendingParameters) OR EXISTS(BendingShapeCode);\nEND_ENTITY;\n\nENTITY IfcReinforcingElement\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcReinforcingBar\n    ,IfcReinforcingMesh\n    ,IfcTendon\n    ,IfcTendonAnchor))\n SUBTYPE OF (IfcElementComponent);\n\tSteelGrade : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcReinforcingElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcReinforcingBarType\n    ,IfcReinforcingMeshType\n    ,IfcTendonAnchorType\n    ,IfcTendonType))\n SUBTYPE OF (IfcElementComponentType);\nEND_ENTITY;\n\nENTITY IfcReinforcingMesh\n SUBTYPE OF (IfcReinforcingElement);\n\tMeshLength : OPTIONAL IfcPositiveLengthMeasure;\n\tMeshWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tLongitudinalBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tTransverseBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tLongitudinalBarCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tTransverseBarCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tLongitudinalBarSpacing : OPTIONAL IfcPositiveLengthMeasure;\n\tTransverseBarSpacing : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : OPTIONAL IfcReinforcingMeshTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT EXISTS(PredefinedType) OR\n(PredefinedType <> IfcReinforcingMeshTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcReinforcingMeshTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCREINFORCINGMESHTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcReinforcingMeshType\n SUBTYPE OF (IfcReinforcingElementType);\n\tPredefinedType : IfcReinforcingMeshTypeEnum;\n\tMeshLength : OPTIONAL IfcPositiveLengthMeasure;\n\tMeshWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tLongitudinalBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tTransverseBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tLongitudinalBarCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tTransverseBarCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tLongitudinalBarSpacing : OPTIONAL IfcPositiveLengthMeasure;\n\tTransverseBarSpacing : OPTIONAL IfcPositiveLengthMeasure;\n\tBendingShapeCode : OPTIONAL IfcLabel;\n\tBendingParameters : OPTIONAL LIST [1:?] OF IfcBendingParameterSelect;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcReinforcingMeshTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcReinforcingMeshTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\n\tBendingShapeCodeProvided : NOT EXISTS(BendingParameters) OR EXISTS(BendingShapeCode);\nEND_ENTITY;\n\nENTITY IfcRelAggregates\n SUBTYPE OF (IfcRelDecomposes);\n\tRelatingObject : IfcObjectDefinition;\n\tRelatedObjects : SET [1:?] OF IfcObjectDefinition;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* RelatedObjects | RelatingObject :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssigns\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcRelAssignsToActor\n    ,IfcRelAssignsToControl\n    ,IfcRelAssignsToGroup\n    ,IfcRelAssignsToProcess\n    ,IfcRelAssignsToProduct\n    ,IfcRelAssignsToResource))\n SUBTYPE OF (IfcRelationship);\n\tRelatedObjects : SET [1:?] OF IfcObjectDefinition;\n\tRelatedObjectsType : OPTIONAL IfcObjectTypeEnum;\n WHERE\n\tWR1 : IfcCorrectObjectAssignment(RelatedObjectsType, RelatedObjects);\nEND_ENTITY;\n\nENTITY IfcRelAssignsToActor\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingActor : IfcActor;\n\tActingRole : OPTIONAL IfcActorRole;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingActor :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToControl\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingControl : IfcControl;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingControl :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToGroup\n SUPERTYPE OF (ONEOF\n    (IfcRelAssignsToGroupByFactor))\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingGroup : IfcGroup;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingGroup :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToGroupByFactor\n SUBTYPE OF (IfcRelAssignsToGroup);\n\tFactor : IfcRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToProcess\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingProcess : IfcProcessSelect;\n\tQuantityInProcess : OPTIONAL IfcMeasureWithUnit;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingProcess :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToProduct\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingProduct : IfcProductSelect;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingProduct :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToResource\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingResource : IfcResourceSelect;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingResource :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssociates\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcRelAssociatesApproval\n    ,IfcRelAssociatesClassification\n    ,IfcRelAssociatesConstraint\n    ,IfcRelAssociatesDocument\n    ,IfcRelAssociatesLibrary\n    ,IfcRelAssociatesMaterial))\n SUBTYPE OF (IfcRelationship);\n\tRelatedObjects : SET [1:?] OF IfcDefinitionSelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesApproval\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingApproval : IfcApproval;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesClassification\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingClassification : IfcClassificationSelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesConstraint\n SUBTYPE OF (IfcRelAssociates);\n\tIntent : OPTIONAL IfcLabel;\n\tRelatingConstraint : IfcConstraint;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesDocument\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingDocument : IfcDocumentSelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesLibrary\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingLibrary : IfcLibrarySelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesMaterial\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingMaterial : IfcMaterialSelect;\n WHERE\n\tNoVoidElement : SIZEOF(QUERY(temp <* SELF\\IfcRelAssociates.RelatedObjects | \n  ('IFC4.IFCFEATUREELEMENTSUBTRACTION' IN TYPEOF(temp)) OR \n  ('IFC4.IFCVIRTUALELEMENT' IN TYPEOF(temp)) \n)) = 0;\n\tAllowedElements : SIZEOF(QUERY(temp <* SELF\\IfcRelAssociates.RelatedObjects | (\n  SIZEOF(TYPEOF(temp) * [   \n    'IFC4.IFCELEMENT', \n    'IFC4.IFCELEMENTTYPE',\n    'IFC4.IFCWINDOWSTYLE',\n    'IFC4.IFCDOORSTYLE',\n    'IFC4.IFCSTRUCTURALMEMBER',\n    'IFC4.IFCPORT']) = 0) \n)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelConnects\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcRelConnectsElements\n    ,IfcRelConnectsPortToElement\n    ,IfcRelConnectsPorts\n    ,IfcRelConnectsStructuralActivity\n    ,IfcRelConnectsStructuralMember\n    ,IfcRelContainedInSpatialStructure\n    ,IfcRelCoversBldgElements\n    ,IfcRelCoversSpaces\n    ,IfcRelFillsElement\n    ,IfcRelFlowControlElements\n    ,IfcRelInterferesElements\n    ,IfcRelReferencedInSpatialStructure\n    ,IfcRelSequence\n    ,IfcRelServicesBuildings\n    ,IfcRelSpaceBoundary))\n SUBTYPE OF (IfcRelationship);\nEND_ENTITY;\n\nENTITY IfcRelConnectsElements\n SUPERTYPE OF (ONEOF\n    (IfcRelConnectsPathElements\n    ,IfcRelConnectsWithRealizingElements))\n SUBTYPE OF (IfcRelConnects);\n\tConnectionGeometry : OPTIONAL IfcConnectionGeometry;\n\tRelatingElement : IfcElement;\n\tRelatedElement : IfcElement;\n WHERE\n\tNoSelfReference : RelatingElement :<>: RelatedElement;\nEND_ENTITY;\n\nENTITY IfcRelConnectsPathElements\n SUBTYPE OF (IfcRelConnectsElements);\n\tRelatingPriorities : LIST [0:?] OF IfcInteger;\n\tRelatedPriorities : LIST [0:?] OF IfcInteger;\n\tRelatedConnectionType : IfcConnectionTypeEnum;\n\tRelatingConnectionType : IfcConnectionTypeEnum;\n WHERE\n\tNormalizedRelatingPriorities : (SIZEOF(RelatingPriorities) = 0)\nOR\n(SIZEOF (QUERY (temp <* RelatingPriorities\n  | {0 <= temp <= 100}\n  )) = SIZEOF(RelatingPriorities));\n\tNormalizedRelatedPriorities : (SIZEOF(RelatedPriorities) = 0)\nOR\n(SIZEOF (QUERY (temp <* RelatedPriorities\n  | {0 <= temp <= 100}\n  )) = SIZEOF(RelatedPriorities));\nEND_ENTITY;\n\nENTITY IfcRelConnectsPortToElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingPort : IfcPort;\n\tRelatedElement : IfcDistributionElement;\nEND_ENTITY;\n\nENTITY IfcRelConnectsPorts\n SUBTYPE OF (IfcRelConnects);\n\tRelatingPort : IfcPort;\n\tRelatedPort : IfcPort;\n\tRealizingElement : OPTIONAL IfcElement;\n WHERE\n\tNoSelfReference : RelatingPort :<>: RelatedPort;\nEND_ENTITY;\n\nENTITY IfcRelConnectsStructuralActivity\n SUBTYPE OF (IfcRelConnects);\n\tRelatingElement : IfcStructuralActivityAssignmentSelect;\n\tRelatedStructuralActivity : IfcStructuralActivity;\nEND_ENTITY;\n\nENTITY IfcRelConnectsStructuralMember\n SUPERTYPE OF (ONEOF\n    (IfcRelConnectsWithEccentricity))\n SUBTYPE OF (IfcRelConnects);\n\tRelatingStructuralMember : IfcStructuralMember;\n\tRelatedStructuralConnection : IfcStructuralConnection;\n\tAppliedCondition : OPTIONAL IfcBoundaryCondition;\n\tAdditionalConditions : OPTIONAL IfcStructuralConnectionCondition;\n\tSupportedLength : OPTIONAL IfcLengthMeasure;\n\tConditionCoordinateSystem : OPTIONAL IfcAxis2Placement3D;\nEND_ENTITY;\n\nENTITY IfcRelConnectsWithEccentricity\n SUBTYPE OF (IfcRelConnectsStructuralMember);\n\tConnectionConstraint : IfcConnectionGeometry;\nEND_ENTITY;\n\nENTITY IfcRelConnectsWithRealizingElements\n SUBTYPE OF (IfcRelConnectsElements);\n\tRealizingElements : SET [1:?] OF IfcElement;\n\tConnectionType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcRelContainedInSpatialStructure\n SUBTYPE OF (IfcRelConnects);\n\tRelatedElements : SET [1:?] OF IfcProduct;\n\tRelatingStructure : IfcSpatialElement;\n WHERE\n\tWR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC4.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcRelCoversBldgElements\n SUBTYPE OF (IfcRelConnects);\n\tRelatingBuildingElement : IfcElement;\n\tRelatedCoverings : SET [1:?] OF IfcCovering;\nEND_ENTITY;\n\nENTITY IfcRelCoversSpaces\n SUBTYPE OF (IfcRelConnects);\n\tRelatingSpace : IfcSpace;\n\tRelatedCoverings : SET [1:?] OF IfcCovering;\nEND_ENTITY;\n\nENTITY IfcRelDeclares\n SUBTYPE OF (IfcRelationship);\n\tRelatingContext : IfcContext;\n\tRelatedDefinitions : SET [1:?] OF IfcDefinitionSelect;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* RelatedDefinitions | RelatingContext :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelDecomposes\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcRelAggregates\n    ,IfcRelNests\n    ,IfcRelProjectsElement\n    ,IfcRelVoidsElement))\n SUBTYPE OF (IfcRelationship);\nEND_ENTITY;\n\nENTITY IfcRelDefines\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcRelDefinesByObject\n    ,IfcRelDefinesByProperties\n    ,IfcRelDefinesByTemplate\n    ,IfcRelDefinesByType))\n SUBTYPE OF (IfcRelationship);\nEND_ENTITY;\n\nENTITY IfcRelDefinesByObject\n SUBTYPE OF (IfcRelDefines);\n\tRelatedObjects : SET [1:?] OF IfcObject;\n\tRelatingObject : IfcObject;\nEND_ENTITY;\n\nENTITY IfcRelDefinesByProperties\n SUBTYPE OF (IfcRelDefines);\n\tRelatedObjects : SET [1:?] OF IfcObjectDefinition;\n\tRelatingPropertyDefinition : IfcPropertySetDefinitionSelect;\n WHERE\n\tNoRelatedTypeObject : SIZEOF(QUERY(Types <* SELF\\IfcRelDefinesByProperties.RelatedObjects |  'IFC4.IFCTYPEOBJECT' IN TYPEOF(Types))) = 0;\nEND_ENTITY;\n\nENTITY IfcRelDefinesByTemplate\n SUBTYPE OF (IfcRelDefines);\n\tRelatedPropertySets : SET [1:?] OF IfcPropertySetDefinition;\n\tRelatingTemplate : IfcPropertySetTemplate;\nEND_ENTITY;\n\nENTITY IfcRelDefinesByType\n SUBTYPE OF (IfcRelDefines);\n\tRelatedObjects : SET [1:?] OF IfcObject;\n\tRelatingType : IfcTypeObject;\nEND_ENTITY;\n\nENTITY IfcRelFillsElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingOpeningElement : IfcOpeningElement;\n\tRelatedBuildingElement : IfcElement;\nEND_ENTITY;\n\nENTITY IfcRelFlowControlElements\n SUBTYPE OF (IfcRelConnects);\n\tRelatedControlElements : SET [1:?] OF IfcDistributionControlElement;\n\tRelatingFlowElement : IfcDistributionFlowElement;\nEND_ENTITY;\n\nENTITY IfcRelInterferesElements\n SUBTYPE OF (IfcRelConnects);\n\tRelatingElement : IfcElement;\n\tRelatedElement : IfcElement;\n\tInterferenceGeometry : OPTIONAL IfcConnectionGeometry;\n\tInterferenceType : OPTIONAL IfcIdentifier;\n\tImpliedOrder : LOGICAL;\n WHERE\n\tNotSelfReference : RelatingElement :<>: RelatedElement;\nEND_ENTITY;\n\nENTITY IfcRelNests\n SUBTYPE OF (IfcRelDecomposes);\n\tRelatingObject : IfcObjectDefinition;\n\tRelatedObjects : LIST [1:?] OF IfcObjectDefinition;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* RelatedObjects | RelatingObject :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelProjectsElement\n SUBTYPE OF (IfcRelDecomposes);\n\tRelatingElement : IfcElement;\n\tRelatedFeatureElement : IfcFeatureElementAddition;\nEND_ENTITY;\n\nENTITY IfcRelReferencedInSpatialStructure\n SUBTYPE OF (IfcRelConnects);\n\tRelatedElements : SET [1:?] OF IfcProduct;\n\tRelatingStructure : IfcSpatialElement;\n WHERE\n\tAllowedRelatedElements : SIZEOF(QUERY(temp <* RelatedElements | ('IFC4.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp)) AND (NOT ('IFC4.IFCSPACE' IN TYPEOF(temp)))\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelSequence\n SUBTYPE OF (IfcRelConnects);\n\tRelatingProcess : IfcProcess;\n\tRelatedProcess : IfcProcess;\n\tTimeLag : OPTIONAL IfcLagTime;\n\tSequenceType : OPTIONAL IfcSequenceEnum;\n\tUserDefinedSequenceType : OPTIONAL IfcLabel;\n WHERE\n\tAvoidInconsistentSequence : RelatingProcess :<>: RelatedProcess;\n\tCorrectSequenceType : (SequenceType <> IfcSequenceEnum.USERDEFINED) OR ((SequenceType = IfcSequenceEnum.USERDEFINED) AND EXISTS(UserDefinedSequenceType));\nEND_ENTITY;\n\nENTITY IfcRelServicesBuildings\n SUBTYPE OF (IfcRelConnects);\n\tRelatingSystem : IfcSystem;\n\tRelatedBuildings : SET [1:?] OF IfcSpatialElement;\nEND_ENTITY;\n\nENTITY IfcRelSpaceBoundary\n SUPERTYPE OF (ONEOF\n    (IfcRelSpaceBoundary1stLevel))\n SUBTYPE OF (IfcRelConnects);\n\tRelatingSpace : IfcSpaceBoundarySelect;\n\tRelatedBuildingElement : IfcElement;\n\tConnectionGeometry : OPTIONAL IfcConnectionGeometry;\n\tPhysicalOrVirtualBoundary : IfcPhysicalOrVirtualEnum;\n\tInternalOrExternalBoundary : IfcInternalOrExternalEnum;\n WHERE\n\tCorrectPhysOrVirt : ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Physical) \n  AND (NOT('IFC4.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) \nOR \n((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Virtual) \n  AND (('IFC4.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)) \n  OR   ('IFC4.IFCOPENINGELEMENT' IN TYPEOF(RelatedBuildingElement)))) \nOR \n(PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.NotDefined);\nEND_ENTITY;\n\nENTITY IfcRelSpaceBoundary1stLevel\n SUPERTYPE OF (ONEOF\n    (IfcRelSpaceBoundary2ndLevel))\n SUBTYPE OF (IfcRelSpaceBoundary);\n\tParentBoundary : OPTIONAL IfcRelSpaceBoundary1stLevel;\n INVERSE\n\tInnerBoundaries : SET [0:?] OF IfcRelSpaceBoundary1stLevel FOR ParentBoundary;\nEND_ENTITY;\n\nENTITY IfcRelSpaceBoundary2ndLevel\n SUBTYPE OF (IfcRelSpaceBoundary1stLevel);\n\tCorrespondingBoundary : OPTIONAL IfcRelSpaceBoundary2ndLevel;\n INVERSE\n\tCorresponds : SET [0:1] OF IfcRelSpaceBoundary2ndLevel FOR CorrespondingBoundary;\nEND_ENTITY;\n\nENTITY IfcRelVoidsElement\n SUBTYPE OF (IfcRelDecomposes);\n\tRelatingBuildingElement : IfcElement;\n\tRelatedOpeningElement : IfcFeatureElementSubtraction;\nEND_ENTITY;\n\nENTITY IfcRelationship\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcRelAssigns\n    ,IfcRelAssociates\n    ,IfcRelConnects\n    ,IfcRelDeclares\n    ,IfcRelDecomposes\n    ,IfcRelDefines))\n SUBTYPE OF (IfcRoot);\nEND_ENTITY;\n\nENTITY IfcReparametrisedCompositeCurveSegment\n SUBTYPE OF (IfcCompositeCurveSegment);\n\tParamLength : IfcParameterValue;\n WHERE\n\tPositiveLengthParameter : ParamLength > 0.0;\nEND_ENTITY;\n\nENTITY IfcRepresentation\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcShapeModel\n    ,IfcStyleModel));\n\tContextOfItems : IfcRepresentationContext;\n\tRepresentationIdentifier : OPTIONAL IfcLabel;\n\tRepresentationType : OPTIONAL IfcLabel;\n\tItems : SET [1:?] OF IfcRepresentationItem;\n INVERSE\n\tRepresentationMap : SET [0:1] OF IfcRepresentationMap FOR MappedRepresentation;\n\tLayerAssignments : SET [0:?] OF IfcPresentationLayerAssignment FOR AssignedItems;\n\tOfProductRepresentation : SET [0:?] OF IfcProductRepresentation FOR Representations;\nEND_ENTITY;\n\nENTITY IfcRepresentationContext\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcGeometricRepresentationContext));\n\tContextIdentifier : OPTIONAL IfcLabel;\n\tContextType : OPTIONAL IfcLabel;\n INVERSE\n\tRepresentationsInContext : SET [0:?] OF IfcRepresentation FOR ContextOfItems;\nEND_ENTITY;\n\nENTITY IfcRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcGeometricRepresentationItem\n    ,IfcMappedItem\n    ,IfcStyledItem\n    ,IfcTopologicalRepresentationItem));\n INVERSE\n\tLayerAssignment : SET [0:1] OF IfcPresentationLayerAssignment FOR AssignedItems;\n\tStyledByItem : SET [0:1] OF IfcStyledItem FOR Item;\nEND_ENTITY;\n\nENTITY IfcRepresentationMap;\n\tMappingOrigin : IfcAxis2Placement;\n\tMappedRepresentation : IfcRepresentation;\n INVERSE\n\tHasShapeAspects : SET [0:?] OF IfcShapeAspect FOR PartOfProductDefinitionShape;\n\tMapUsage : SET [0:?] OF IfcMappedItem FOR MappingSource;\n WHERE\n\tApplicableMappedRepr : 'IFC4.IFCSHAPEMODEL' IN TYPEOF(MappedRepresentation);\nEND_ENTITY;\n\nENTITY IfcResource\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcConstructionResource))\n SUBTYPE OF (IfcObject);\n\tIdentification : OPTIONAL IfcIdentifier;\n\tLongDescription : OPTIONAL IfcText;\n INVERSE\n\tResourceOf : SET [0:?] OF IfcRelAssignsToResource FOR RelatingResource;\nEND_ENTITY;\n\nENTITY IfcResourceApprovalRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatedResourceObjects : SET [1:?] OF IfcResourceObjectSelect;\n\tRelatingApproval : IfcApproval;\nEND_ENTITY;\n\nENTITY IfcResourceConstraintRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingConstraint : IfcConstraint;\n\tRelatedResourceObjects : SET [1:?] OF IfcResourceObjectSelect;\nEND_ENTITY;\n\nENTITY IfcResourceLevelRelationship\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcApprovalRelationship\n    ,IfcCurrencyRelationship\n    ,IfcDocumentInformationRelationship\n    ,IfcExternalReferenceRelationship\n    ,IfcMaterialRelationship\n    ,IfcOrganizationRelationship\n    ,IfcPropertyDependencyRelationship\n    ,IfcResourceApprovalRelationship\n    ,IfcResourceConstraintRelationship));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcResourceTime\n SUBTYPE OF (IfcSchedulingTime);\n\tScheduleWork : OPTIONAL IfcDuration;\n\tScheduleUsage : OPTIONAL IfcPositiveRatioMeasure;\n\tScheduleStart : OPTIONAL IfcDateTime;\n\tScheduleFinish : OPTIONAL IfcDateTime;\n\tScheduleContour : OPTIONAL IfcLabel;\n\tLevelingDelay : OPTIONAL IfcDuration;\n\tIsOverAllocated : OPTIONAL IfcBoolean;\n\tStatusTime : OPTIONAL IfcDateTime;\n\tActualWork : OPTIONAL IfcDuration;\n\tActualUsage : OPTIONAL IfcPositiveRatioMeasure;\n\tActualStart : OPTIONAL IfcDateTime;\n\tActualFinish : OPTIONAL IfcDateTime;\n\tRemainingWork : OPTIONAL IfcDuration;\n\tRemainingUsage : OPTIONAL IfcPositiveRatioMeasure;\n\tCompletion : OPTIONAL IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcRevolvedAreaSolid\n SUPERTYPE OF (ONEOF\n    (IfcRevolvedAreaSolidTapered))\n SUBTYPE OF (IfcSweptAreaSolid);\n\tAxis : IfcAxis1Placement;\n\tAngle : IfcPlaneAngleMeasure;\n DERIVE\n\tAxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(Axis.Location, \n  IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Axis.Z,1.0));\n WHERE\n\tAxisStartInXY : Axis.Location.Coordinates[3] = 0.0;\n\tAxisDirectionInXY : Axis.Z.DirectionRatios[3] = 0.0;\nEND_ENTITY;\n\nENTITY IfcRevolvedAreaSolidTapered\n SUBTYPE OF (IfcRevolvedAreaSolid);\n\tEndSweptArea : IfcProfileDef;\n WHERE\n\tCorrectProfileAssignment : IfcTaperedSweptAreaProfiles(SELF\\IfcSweptAreaSolid.SweptArea, SELF.EndSweptArea);\nEND_ENTITY;\n\nENTITY IfcRightCircularCone\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tHeight : IfcPositiveLengthMeasure;\n\tBottomRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRightCircularCylinder\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tHeight : IfcPositiveLengthMeasure;\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRoof\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcRoofTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcRoofTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRoofTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCROOFTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcRoofType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcRoofTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcRoofTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcRoofTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcRoot\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcObjectDefinition\n    ,IfcPropertyDefinition\n    ,IfcRelationship));\n\tGlobalId : IfcGloballyUniqueId;\n\tOwnerHistory : OPTIONAL IfcOwnerHistory;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n UNIQUE\n\tUR1 : GlobalId;\nEND_ENTITY;\n\nENTITY IfcRoundedRectangleProfileDef\n SUBTYPE OF (IfcRectangleProfileDef);\n\tRoundingRadius : IfcPositiveLengthMeasure;\n WHERE\n\tValidRadius : ((RoundingRadius <= (SELF\\IfcRectangleProfileDef.XDim/2.)) AND \n (RoundingRadius <= (SELF\\IfcRectangleProfileDef.YDim/2.)));\nEND_ENTITY;\n\nENTITY IfcSIUnit\n SUBTYPE OF (IfcNamedUnit);\n\tPrefix : OPTIONAL IfcSIPrefix;\n\tName : IfcSIUnitName;\n DERIVE\n\tSELF\\IfcNamedUnit.Dimensions : IfcDimensionalExponents := IfcDimensionsForSiUnit (SELF.Name);\nEND_ENTITY;\n\nENTITY IfcSanitaryTerminal\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcSanitaryTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcSanitaryTerminalTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcSanitaryTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCSANITARYTERMINALTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSanitaryTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcSanitaryTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSanitaryTerminalTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcSanitaryTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSchedulingTime\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcEventTime\n    ,IfcLagTime\n    ,IfcResourceTime\n    ,IfcTaskTime\n    ,IfcWorkTime));\n\tName : OPTIONAL IfcLabel;\n\tDataOrigin : OPTIONAL IfcDataOriginEnum;\n\tUserDefinedDataOrigin : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcSeamCurve\n SUBTYPE OF (IfcSurfaceCurve);\n WHERE\n\tTwoPCurves : SIZEOF(SELF\\IfcSurfaceCurve.AssociatedGeometry) = 2;\n\tSameSurface : IfcAssociatedSurface(SELF\\IfcSurfaceCurve.AssociatedGeometry[1]) = IfcAssociatedSurface(SELF\\IfcSurfaceCurve.AssociatedGeometry[2]);\nEND_ENTITY;\n\nENTITY IfcSectionProperties\n SUBTYPE OF (IfcPreDefinedProperties);\n\tSectionType : IfcSectionTypeEnum;\n\tStartProfile : IfcProfileDef;\n\tEndProfile : OPTIONAL IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcSectionReinforcementProperties\n SUBTYPE OF (IfcPreDefinedProperties);\n\tLongitudinalStartPosition : IfcLengthMeasure;\n\tLongitudinalEndPosition : IfcLengthMeasure;\n\tTransversePosition : OPTIONAL IfcLengthMeasure;\n\tReinforcementRole : IfcReinforcingBarRoleEnum;\n\tSectionDefinition : IfcSectionProperties;\n\tCrossSectionReinforcementDefinitions : SET [1:?] OF IfcReinforcementBarProperties;\nEND_ENTITY;\n\nENTITY IfcSectionedSpine\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSpineCurve : IfcCompositeCurve;\n\tCrossSections : LIST [2:?] OF IfcProfileDef;\n\tCrossSectionPositions : LIST [2:?] OF IfcAxis2Placement3D;\n DERIVE\n\tDim : IfcDimensionCount := 3;\n WHERE\n\tCorrespondingSectionPositions : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions);\n\tConsistentProfileTypes : SIZEOF(QUERY(temp <* CrossSections | CrossSections[1].ProfileType <> temp.ProfileType)) = 0;\n\tSpineCurveDim : SpineCurve.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcSensor\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcSensorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcSensorTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcSensorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n('IFC4.IFCSENSORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSensorType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcSensorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSensorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcSensorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcShadingDevice\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcShadingDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcShadingDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcShadingDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCSHADINGDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcShadingDeviceType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcShadingDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcShadingDeviceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcShadingDeviceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcShapeAspect;\n\tShapeRepresentations : LIST [1:?] OF IfcShapeModel;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tProductDefinitional : IfcLogical;\n\tPartOfProductDefinitionShape : OPTIONAL IfcProductRepresentationSelect;\nEND_ENTITY;\n\nENTITY IfcShapeModel\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcShapeRepresentation\n    ,IfcTopologyRepresentation))\n SUBTYPE OF (IfcRepresentation);\n INVERSE\n\tOfShapeAspect : SET [0:1] OF IfcShapeAspect FOR ShapeRepresentations;\n WHERE\n\tWR11 : (SIZEOF(SELF\\IfcRepresentation.OfProductRepresentation) = 1) XOR \n(SIZEOF(SELF\\IfcRepresentation.RepresentationMap) = 1) XOR\n(SIZEOF(OfShapeAspect) = 1);\nEND_ENTITY;\n\nENTITY IfcShapeRepresentation\n SUBTYPE OF (IfcShapeModel);\n WHERE\n\tCorrectContext : 'IFC4.IFCGEOMETRICREPRESENTATIONCONTEXT' \nIN TYPEOF(SELF\\IfcRepresentation.ContextOfItems);\n\tNoTopologicalItem : SIZEOF(QUERY(temp <* Items | \n  ('IFC4.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))\n    AND (NOT(SIZEOF(\n      ['IFC4.IFCVERTEXPOINT',\n       'IFC4.IFCEDGECURVE',\n       'IFC4.IFCFACESURFACE'] * TYPEOF(temp)) = 1))\n)) = 0;\n\tHasRepresentationType : EXISTS(SELF\\IfcRepresentation.RepresentationType);\n\tHasRepresentationIdentifier : EXISTS(SELF\\IfcRepresentation.RepresentationIdentifier);\n\tCorrectItemsForType : IfcShapeRepresentationTypes(SELF\\IfcRepresentation.RepresentationType, SELF\\IfcRepresentation.Items);\nEND_ENTITY;\n\nENTITY IfcShellBasedSurfaceModel\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSbsmBoundary : SET [1:?] OF IfcShell;\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcSimpleProperty\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcPropertyBoundedValue\n    ,IfcPropertyEnumeratedValue\n    ,IfcPropertyListValue\n    ,IfcPropertyReferenceValue\n    ,IfcPropertySingleValue\n    ,IfcPropertyTableValue))\n SUBTYPE OF (IfcProperty);\nEND_ENTITY;\n\nENTITY IfcSimplePropertyTemplate\n SUBTYPE OF (IfcPropertyTemplate);\n\tTemplateType : OPTIONAL IfcSimplePropertyTemplateTypeEnum;\n\tPrimaryMeasureType : OPTIONAL IfcLabel;\n\tSecondaryMeasureType : OPTIONAL IfcLabel;\n\tEnumerators : OPTIONAL IfcPropertyEnumeration;\n\tPrimaryUnit : OPTIONAL IfcUnit;\n\tSecondaryUnit : OPTIONAL IfcUnit;\n\tExpression : OPTIONAL IfcLabel;\n\tAccessState : OPTIONAL IfcStateEnum;\nEND_ENTITY;\n\nENTITY IfcSite\n SUBTYPE OF (IfcSpatialStructureElement);\n\tRefLatitude : OPTIONAL IfcCompoundPlaneAngleMeasure;\n\tRefLongitude : OPTIONAL IfcCompoundPlaneAngleMeasure;\n\tRefElevation : OPTIONAL IfcLengthMeasure;\n\tLandTitleNumber : OPTIONAL IfcLabel;\n\tSiteAddress : OPTIONAL IfcPostalAddress;\nEND_ENTITY;\n\nENTITY IfcSlab\n SUPERTYPE OF (ONEOF\n    (IfcSlabElementedCase\n    ,IfcSlabStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcSlabTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSlabTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSlabTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCSLABTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSlabElementedCase\n SUBTYPE OF (IfcSlab);\n WHERE\n\tHasDecomposition : HIINDEX(SELF\\IfcObjectDefinition.IsDecomposedBy) > 0;\nEND_ENTITY;\n\nENTITY IfcSlabStandardCase\n SUBTYPE OF (IfcSlab);\n WHERE\n\tHasMaterialLayerSetusage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') |\n              ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND\n              ('IFC4.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial))\n              )) = 1;\nEND_ENTITY;\n\nENTITY IfcSlabType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcSlabTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSlabTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcSlabTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSlippageConnectionCondition\n SUBTYPE OF (IfcStructuralConnectionCondition);\n\tSlippageX : OPTIONAL IfcLengthMeasure;\n\tSlippageY : OPTIONAL IfcLengthMeasure;\n\tSlippageZ : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcSolarDevice\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcSolarDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcSolarDeviceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcSolarDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCSOLARDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSolarDeviceType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcSolarDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSolarDeviceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcSolarDeviceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSolidModel\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcCsgSolid\n    ,IfcManifoldSolidBrep\n    ,IfcSweptAreaSolid\n    ,IfcSweptDiskSolid))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcSpace\n SUBTYPE OF (IfcSpatialStructureElement);\n\tPredefinedType : OPTIONAL IfcSpaceTypeEnum;\n\tElevationWithFlooring : OPTIONAL IfcLengthMeasure;\n INVERSE\n\tHasCoverings : SET [0:?] OF IfcRelCoversSpaces FOR RelatingSpace;\n\tBoundedBy : SET [0:?] OF IfcRelSpaceBoundary FOR RelatingSpace;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSpaceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSpaceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCSPACETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSpaceHeater\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcSpaceHeaterTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcSpaceHeaterTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcSpaceHeaterTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCSPACEHEATERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSpaceHeaterType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcSpaceHeaterTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSpaceHeaterTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcSpaceHeaterTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSpaceType\n SUBTYPE OF (IfcSpatialStructureElementType);\n\tPredefinedType : IfcSpaceTypeEnum;\n\tLongName : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSpaceTypeEnum.USERDEFINED) OR \n((PredefinedType = IfcSpaceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcSpatialElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSpatialElement\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcExternalSpatialStructureElement\n    ,IfcSpatialStructureElement\n    ,IfcSpatialZone))\n SUBTYPE OF (IfcProduct);\n\tLongName : OPTIONAL IfcLabel;\n INVERSE\n\tContainsElements : SET [0:?] OF IfcRelContainedInSpatialStructure FOR RelatingStructure;\n\tServicedBySystems : SET [0:?] OF IfcRelServicesBuildings FOR RelatedBuildings;\n\tReferencesElements : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatingStructure;\nEND_ENTITY;\n\nENTITY IfcSpatialElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcSpatialStructureElementType\n    ,IfcSpatialZoneType))\n SUBTYPE OF (IfcTypeProduct);\n\tElementType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcSpatialStructureElement\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBuilding\n    ,IfcBuildingStorey\n    ,IfcSite\n    ,IfcSpace))\n SUBTYPE OF (IfcSpatialElement);\n\tCompositionType : OPTIONAL IfcElementCompositionEnum;\n WHERE\n\tWR41 : (HIINDEX(SELF\\IfcObjectDefinition.Decomposes) = 1) \nAND\n('IFC4.IFCRELAGGREGATES' IN TYPEOF(SELF\\IfcObjectDefinition.Decomposes[1])) \nAND\n(('IFC4.IFCPROJECT' IN TYPEOF (SELF\\IfcObjectDefinition.Decomposes[1].RelatingObject)) OR\n ('IFC4.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF (SELF\\IfcObjectDefinition.Decomposes[1].RelatingObject))\n);\nEND_ENTITY;\n\nENTITY IfcSpatialStructureElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcSpaceType))\n SUBTYPE OF (IfcSpatialElementType);\nEND_ENTITY;\n\nENTITY IfcSpatialZone\n SUBTYPE OF (IfcSpatialElement);\n\tPredefinedType : OPTIONAL IfcSpatialZoneTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSpatialZoneTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSpatialZoneTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCSPATIALZONETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSpatialZoneType\n SUBTYPE OF (IfcSpatialElementType);\n\tPredefinedType : IfcSpatialZoneTypeEnum;\n\tLongName : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSpatialZoneTypeEnum.USERDEFINED) OR \n((PredefinedType = IfcSpatialZoneTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcSpatialElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSphere\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcSphericalSurface\n SUBTYPE OF (IfcElementarySurface);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcStackTerminal\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcStackTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcStackTerminalTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcStackTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCSTACKTERMINALTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcStackTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcStackTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcStackTerminalTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcStackTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcStair\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcStairTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcStairTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcStairTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCSTAIRTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcStairFlight\n SUBTYPE OF (IfcBuildingElement);\n\tNumberOfRisers : OPTIONAL IfcInteger;\n\tNumberOfTreads : OPTIONAL IfcInteger;\n\tRiserHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tTreadLength : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : OPTIONAL IfcStairFlightTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcStairFlightTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcStairFlightTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCSTAIRFLIGHTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcStairFlightType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcStairFlightTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcStairFlightTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcStairFlightTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcStairType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcStairTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcStairTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcStairTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcStructuralAction\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStructuralCurveAction\n    ,IfcStructuralPointAction\n    ,IfcStructuralSurfaceAction))\n SUBTYPE OF (IfcStructuralActivity);\n\tDestabilizingLoad : OPTIONAL IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcStructuralActivity\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStructuralAction\n    ,IfcStructuralReaction))\n SUBTYPE OF (IfcProduct);\n\tAppliedLoad : IfcStructuralLoad;\n\tGlobalOrLocal : IfcGlobalOrLocalEnum;\n INVERSE\n\tAssignedToStructuralItem : SET [0:1] OF IfcRelConnectsStructuralActivity FOR RelatedStructuralActivity;\nEND_ENTITY;\n\nENTITY IfcStructuralAnalysisModel\n SUBTYPE OF (IfcSystem);\n\tPredefinedType : IfcAnalysisModelTypeEnum;\n\tOrientationOf2DPlane : OPTIONAL IfcAxis2Placement3D;\n\tLoadedBy : OPTIONAL SET [1:?] OF IfcStructuralLoadGroup;\n\tHasResults : OPTIONAL SET [1:?] OF IfcStructuralResultGroup;\n\tSharedPlacement : OPTIONAL IfcObjectPlacement;\n WHERE\n\tHasObjectType : (PredefinedType <> IfcAnalysisModelTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStructuralConnection\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStructuralCurveConnection\n    ,IfcStructuralPointConnection\n    ,IfcStructuralSurfaceConnection))\n SUBTYPE OF (IfcStructuralItem);\n\tAppliedCondition : OPTIONAL IfcBoundaryCondition;\n INVERSE\n\tConnectsStructuralMembers : SET [1:?] OF IfcRelConnectsStructuralMember FOR RelatedStructuralConnection;\nEND_ENTITY;\n\nENTITY IfcStructuralConnectionCondition\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcFailureConnectionCondition\n    ,IfcSlippageConnectionCondition));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcStructuralCurveAction\n SUPERTYPE OF (ONEOF\n    (IfcStructuralLinearAction))\n SUBTYPE OF (IfcStructuralAction);\n\tProjectedOrTrue : OPTIONAL IfcProjectedOrTrueLengthEnum;\n\tPredefinedType : IfcStructuralCurveActivityTypeEnum;\n WHERE\n\tProjectedIsGlobal : (NOT EXISTS(ProjectedOrTrue)) OR\n((ProjectedOrTrue <> PROJECTED_LENGTH) OR\n (SELF\\IfcStructuralActivity.GlobalOrLocal = GLOBAL_COORDS));\n\tHasObjectType : (PredefinedType <> IfcStructuralCurveActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\n\tSuitablePredefinedType : PredefinedType <> IfcStructuralCurveActivityTypeEnum.EQUIDISTANT;\nEND_ENTITY;\n\nENTITY IfcStructuralCurveConnection\n SUBTYPE OF (IfcStructuralConnection);\n\tAxis : IfcDirection;\nEND_ENTITY;\n\nENTITY IfcStructuralCurveMember\n SUPERTYPE OF (ONEOF\n    (IfcStructuralCurveMemberVarying))\n SUBTYPE OF (IfcStructuralMember);\n\tPredefinedType : IfcStructuralCurveMemberTypeEnum;\n\tAxis : IfcDirection;\n WHERE\n\tHasObjectType : (PredefinedType <> IfcStructuralCurveMemberTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStructuralCurveMemberVarying\n SUBTYPE OF (IfcStructuralCurveMember);\nEND_ENTITY;\n\nENTITY IfcStructuralCurveReaction\n SUBTYPE OF (IfcStructuralReaction);\n\tPredefinedType : IfcStructuralCurveActivityTypeEnum;\n WHERE\n\tHasObjectType : (PredefinedType <> IfcStructuralCurveActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\n\tSuitablePredefinedType : (PredefinedType <> IfcStructuralCurveActivityTypeEnum.SINUS) AND (PredefinedType <> IfcStructuralCurveActivityTypeEnum.PARABOLA);\nEND_ENTITY;\n\nENTITY IfcStructuralItem\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStructuralConnection\n    ,IfcStructuralMember))\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tAssignedStructuralActivity : SET [0:?] OF IfcRelConnectsStructuralActivity FOR RelatingElement;\nEND_ENTITY;\n\nENTITY IfcStructuralLinearAction\n SUBTYPE OF (IfcStructuralCurveAction);\n WHERE\n\tSuitableLoadType : SIZEOF(['IFC4.IFCSTRUCTURALLOADLINEARFORCE', 'IFC4.IFCSTRUCTURALLOADTEMPERATURE'] * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\n\tConstPredefinedType : SELF\\IfcStructuralCurveAction.PredefinedType = IfcStructuralCurveActivityTypeEnum.CONST;\nEND_ENTITY;\n\nENTITY IfcStructuralLoad\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStructuralLoadConfiguration\n    ,IfcStructuralLoadOrResult));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadCase\n SUBTYPE OF (IfcStructuralLoadGroup);\n\tSelfWeightCoefficients : OPTIONAL LIST [3:3] OF IfcRatioMeasure;\n WHERE\n\tIsLoadCasePredefinedType : SELF\\IfcStructuralLoadGroup.PredefinedType = IfcLoadGroupTypeEnum.LOAD_CASE;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadConfiguration\n SUBTYPE OF (IfcStructuralLoad);\n\tValues : LIST [1:?] OF IfcStructuralLoadOrResult;\n\tLocations : OPTIONAL LIST [1:?] OF UNIQUE LIST [1:2] OF IfcLengthMeasure;\n WHERE\n\tValidListSize : NOT EXISTS(Locations) OR (SIZEOF(Locations) = SIZEOF(Values));\nEND_ENTITY;\n\nENTITY IfcStructuralLoadGroup\n SUPERTYPE OF (ONEOF\n    (IfcStructuralLoadCase))\n SUBTYPE OF (IfcGroup);\n\tPredefinedType : IfcLoadGroupTypeEnum;\n\tActionType : IfcActionTypeEnum;\n\tActionSource : IfcActionSourceTypeEnum;\n\tCoefficient : OPTIONAL IfcRatioMeasure;\n\tPurpose : OPTIONAL IfcLabel;\n INVERSE\n\tSourceOfResultGroup : SET [0:1] OF IfcStructuralResultGroup FOR ResultForLoadGroup;\n\tLoadGroupFor : SET [0:?] OF IfcStructuralAnalysisModel FOR LoadedBy;\n WHERE\n\tHasObjectType : (\n  (PredefinedType <> IfcLoadGroupTypeEnum.USERDEFINED) AND\n  (ActionType <> IfcActionTypeEnum.USERDEFINED) AND\n  (ActionSource <> IfcActionSourceTypeEnum.USERDEFINED)\n) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStructuralLoadLinearForce\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tLinearForceX : OPTIONAL IfcLinearForceMeasure;\n\tLinearForceY : OPTIONAL IfcLinearForceMeasure;\n\tLinearForceZ : OPTIONAL IfcLinearForceMeasure;\n\tLinearMomentX : OPTIONAL IfcLinearMomentMeasure;\n\tLinearMomentY : OPTIONAL IfcLinearMomentMeasure;\n\tLinearMomentZ : OPTIONAL IfcLinearMomentMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadOrResult\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStructuralLoadStatic\n    ,IfcSurfaceReinforcementArea))\n SUBTYPE OF (IfcStructuralLoad);\nEND_ENTITY;\n\nENTITY IfcStructuralLoadPlanarForce\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tPlanarForceX : OPTIONAL IfcPlanarForceMeasure;\n\tPlanarForceY : OPTIONAL IfcPlanarForceMeasure;\n\tPlanarForceZ : OPTIONAL IfcPlanarForceMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleDisplacement\n SUPERTYPE OF (ONEOF\n    (IfcStructuralLoadSingleDisplacementDistortion))\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tDisplacementX : OPTIONAL IfcLengthMeasure;\n\tDisplacementY : OPTIONAL IfcLengthMeasure;\n\tDisplacementZ : OPTIONAL IfcLengthMeasure;\n\tRotationalDisplacementRX : OPTIONAL IfcPlaneAngleMeasure;\n\tRotationalDisplacementRY : OPTIONAL IfcPlaneAngleMeasure;\n\tRotationalDisplacementRZ : OPTIONAL IfcPlaneAngleMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleDisplacementDistortion\n SUBTYPE OF (IfcStructuralLoadSingleDisplacement);\n\tDistortion : OPTIONAL IfcCurvatureMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleForce\n SUPERTYPE OF (ONEOF\n    (IfcStructuralLoadSingleForceWarping))\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tForceX : OPTIONAL IfcForceMeasure;\n\tForceY : OPTIONAL IfcForceMeasure;\n\tForceZ : OPTIONAL IfcForceMeasure;\n\tMomentX : OPTIONAL IfcTorqueMeasure;\n\tMomentY : OPTIONAL IfcTorqueMeasure;\n\tMomentZ : OPTIONAL IfcTorqueMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleForceWarping\n SUBTYPE OF (IfcStructuralLoadSingleForce);\n\tWarpingMoment : OPTIONAL IfcWarpingMomentMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadStatic\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStructuralLoadLinearForce\n    ,IfcStructuralLoadPlanarForce\n    ,IfcStructuralLoadSingleDisplacement\n    ,IfcStructuralLoadSingleForce\n    ,IfcStructuralLoadTemperature))\n SUBTYPE OF (IfcStructuralLoadOrResult);\nEND_ENTITY;\n\nENTITY IfcStructuralLoadTemperature\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tDeltaTConstant : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tDeltaTY : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tDeltaTZ : OPTIONAL IfcThermodynamicTemperatureMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralMember\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStructuralCurveMember\n    ,IfcStructuralSurfaceMember))\n SUBTYPE OF (IfcStructuralItem);\n INVERSE\n\tConnectedBy : SET [0:?] OF IfcRelConnectsStructuralMember FOR RelatingStructuralMember;\nEND_ENTITY;\n\nENTITY IfcStructuralPlanarAction\n SUBTYPE OF (IfcStructuralSurfaceAction);\n WHERE\n\tSuitableLoadType : SIZEOF(['IFC4.IFCSTRUCTURALLOADPLANARFORCE', 'IFC4.IFCSTRUCTURALLOADTEMPERATURE'] * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\n\tConstPredefinedType : SELF\\IfcStructuralSurfaceAction.PredefinedType = IfcStructuralSurfaceActivityTypeEnum.CONST;\nEND_ENTITY;\n\nENTITY IfcStructuralPointAction\n SUBTYPE OF (IfcStructuralAction);\n WHERE\n\tSuitableLoadType : SIZEOF(['IFC4.IFCSTRUCTURALLOADSINGLEFORCE', 'IFC4.IFCSTRUCTURALLOADSINGLEDISPLACEMENT'] * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralPointConnection\n SUBTYPE OF (IfcStructuralConnection);\n\tConditionCoordinateSystem : OPTIONAL IfcAxis2Placement3D;\nEND_ENTITY;\n\nENTITY IfcStructuralPointReaction\n SUBTYPE OF (IfcStructuralReaction);\n WHERE\n\tSuitableLoadType : SIZEOF(['IFC4.IFCSTRUCTURALLOADSINGLEFORCE', 'IFC4.IFCSTRUCTURALLOADSINGLEDISPLACEMENT'] * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralReaction\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStructuralCurveReaction\n    ,IfcStructuralPointReaction\n    ,IfcStructuralSurfaceReaction))\n SUBTYPE OF (IfcStructuralActivity);\nEND_ENTITY;\n\nENTITY IfcStructuralResultGroup\n SUBTYPE OF (IfcGroup);\n\tTheoryType : IfcAnalysisTheoryTypeEnum;\n\tResultForLoadGroup : OPTIONAL IfcStructuralLoadGroup;\n\tIsLinear : IfcBoolean;\n INVERSE\n\tResultGroupFor : SET [0:1] OF IfcStructuralAnalysisModel FOR HasResults;\n WHERE\n\tHasObjectType : (TheoryType <> IfcAnalysisTheoryTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceAction\n SUPERTYPE OF (ONEOF\n    (IfcStructuralPlanarAction))\n SUBTYPE OF (IfcStructuralAction);\n\tProjectedOrTrue : OPTIONAL IfcProjectedOrTrueLengthEnum;\n\tPredefinedType : IfcStructuralSurfaceActivityTypeEnum;\n WHERE\n\tProjectedIsGlobal : (NOT EXISTS(ProjectedOrTrue)) OR\n((ProjectedOrTrue <> PROJECTED_LENGTH) OR\n (SELF\\IfcStructuralActivity.GlobalOrLocal = GLOBAL_COORDS));\n\tHasObjectType : (PredefinedType <> IfcStructuralSurfaceActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceConnection\n SUBTYPE OF (IfcStructuralConnection);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceMember\n SUPERTYPE OF (ONEOF\n    (IfcStructuralSurfaceMemberVarying))\n SUBTYPE OF (IfcStructuralMember);\n\tPredefinedType : IfcStructuralSurfaceMemberTypeEnum;\n\tThickness : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tHasObjectType : (PredefinedType <> IfcStructuralSurfaceMemberTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceMemberVarying\n SUBTYPE OF (IfcStructuralSurfaceMember);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceReaction\n SUBTYPE OF (IfcStructuralReaction);\n\tPredefinedType : IfcStructuralSurfaceActivityTypeEnum;\n WHERE\n\tHasPredefinedType : (PredefinedType <> IfcStructuralSurfaceActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStyleModel\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcStyledRepresentation))\n SUBTYPE OF (IfcRepresentation);\nEND_ENTITY;\n\nENTITY IfcStyledItem\n SUBTYPE OF (IfcRepresentationItem);\n\tItem : OPTIONAL IfcRepresentationItem;\n\tStyles : SET [1:?] OF IfcStyleAssignmentSelect;\n\tName : OPTIONAL IfcLabel;\n WHERE\n\tApplicableItem : NOT('IFC4.IFCSTYLEDITEM' IN TYPEOF(Item));\nEND_ENTITY;\n\nENTITY IfcStyledRepresentation\n SUBTYPE OF (IfcStyleModel);\n WHERE\n\tOnlyStyledItems : SIZEOF(QUERY(temp <* SELF\\IfcRepresentation.Items | \n  (NOT('IFC4.IFCSTYLEDITEM' IN TYPEOF(temp)))\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcSubContractResource\n SUBTYPE OF (IfcConstructionResource);\n\tPredefinedType : OPTIONAL IfcSubContractResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcSubContractResourceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcSubContractResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcSubContractResourceType\n SUBTYPE OF (IfcConstructionResourceType);\n\tPredefinedType : IfcSubContractResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSubContractResourceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcSubContractResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeResource.ResourceType));\nEND_ENTITY;\n\nENTITY IfcSubedge\n SUBTYPE OF (IfcEdge);\n\tParentEdge : IfcEdge;\nEND_ENTITY;\n\nENTITY IfcSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBoundedSurface\n    ,IfcElementarySurface\n    ,IfcSweptSurface))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\tDim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcSurfaceCurve\n SUPERTYPE OF (ONEOF\n    (IfcIntersectionCurve\n    ,IfcSeamCurve))\n SUBTYPE OF (IfcCurve);\n\tCurve3D : IfcCurve;\n\tAssociatedGeometry : LIST [1:2] OF IfcPcurve;\n\tMasterRepresentation : IfcPreferredSurfaceCurveRepresentation;\n DERIVE\n\tBasisSurface : SET [1:2] OF IfcSurface := IfcGetBasisSurface(SELF);\n WHERE\n\tCurveIs3D : Curve3D.Dim = 3;\n\tCurveIsNotPcurve : NOT ('IFC4.IFCPCURVE' IN TYPEOF(Curve3D));\nEND_ENTITY;\n\nENTITY IfcSurfaceCurveSweptAreaSolid\n SUBTYPE OF (IfcSweptAreaSolid);\n\tDirectrix : IfcCurve;\n\tStartParam : OPTIONAL IfcParameterValue;\n\tEndParam : OPTIONAL IfcParameterValue;\n\tReferenceSurface : IfcSurface;\n WHERE\n\tDirectrixBounded : (EXISTS(StartParam) AND EXISTS(EndParam)) OR \n(SIZEOF(['IFC4.IFCCONIC', 'IFC4.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1);\nEND_ENTITY;\n\nENTITY IfcSurfaceFeature\n SUBTYPE OF (IfcFeatureElement);\n\tPredefinedType : OPTIONAL IfcSurfaceFeatureTypeEnum;\n WHERE\n\tHasObjectType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcSurfaceFeatureTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcSurfaceOfLinearExtrusion\n SUBTYPE OF (IfcSweptSurface);\n\tExtrudedDirection : IfcDirection;\n\tDepth : IfcLengthMeasure;\n DERIVE\n\tExtrusionAxis : IfcVector := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (ExtrudedDirection, Depth);\n WHERE\n\tDepthGreaterZero : Depth > 0.;\nEND_ENTITY;\n\nENTITY IfcSurfaceOfRevolution\n SUBTYPE OF (IfcSweptSurface);\n\tAxisPosition : IfcAxis1Placement;\n DERIVE\n\tAxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(AxisPosition.Location, \n  IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(AxisPosition.Z,1.0));\nEND_ENTITY;\n\nENTITY IfcSurfaceReinforcementArea\n SUBTYPE OF (IfcStructuralLoadOrResult);\n\tSurfaceReinforcement1 : OPTIONAL LIST [2:3] OF IfcLengthMeasure;\n\tSurfaceReinforcement2 : OPTIONAL LIST [2:3] OF IfcLengthMeasure;\n\tShearReinforcement : OPTIONAL IfcRatioMeasure;\n WHERE\n\tSurfaceAndOrShearAreaSpecified : EXISTS(SurfaceReinforcement1) OR EXISTS(SurfaceReinforcement2) OR EXISTS(ShearReinforcement);\n\tNonnegativeArea1 : (NOT EXISTS(SurfaceReinforcement1)) OR (\n    (SurfaceReinforcement1[1] >= 0.) AND\n    (SurfaceReinforcement1[2] >= 0.) AND\n    ((SIZEOF(SurfaceReinforcement1) = 1) OR (SurfaceReinforcement1[1] >= 0.))\n);\n\tNonnegativeArea2 : (NOT EXISTS(SurfaceReinforcement2)) OR (\n    (SurfaceReinforcement2[1] >= 0.) AND\n    (SurfaceReinforcement2[2] >= 0.) AND\n    ((SIZEOF(SurfaceReinforcement2) = 1) OR (SurfaceReinforcement2[1] >= 0.))\n);\n\tNonnegativeArea3 : (NOT EXISTS(ShearReinforcement)) OR (ShearReinforcement >= 0.);\nEND_ENTITY;\n\nENTITY IfcSurfaceStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tSide : IfcSurfaceSide;\n\tStyles : SET [1:5] OF IfcSurfaceStyleElementSelect;\n WHERE\n\tMaxOneShading : SIZEOF(QUERY(Style <* SELF.Styles |\n  'IFC4.IFCSURFACESTYLESHADING' IN\n   TYPEOF(Style)\n  )) <= 1;\n\tMaxOneLighting : SIZEOF(QUERY(Style <* SELF.Styles |\n  'IFC4.IFCSURFACESTYLELIGHTING' IN\n   TYPEOF(Style)\n  )) <= 1;\n\tMaxOneRefraction : SIZEOF(QUERY(Style <* SELF.Styles |\n  'IFC4.IFCSURFACESTYLEREFRACTION' IN\n   TYPEOF(Style)\n  )) <= 1;\n\tMaxOneTextures : SIZEOF(QUERY(Style <* SELF.Styles |\n  'IFC4.IFCSURFACESTYLEWITHTEXTURES' IN\n   TYPEOF(Style)\n  )) <= 1;\n\tMaxOneExtDefined : SIZEOF(QUERY(Style <* SELF.Styles |\n  'IFC4.IFCEXTERNALLYDEFINEDSURFACESTYLE' IN\n   TYPEOF(Style)\n  )) <= 1;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleLighting\n SUBTYPE OF (IfcPresentationItem);\n\tDiffuseTransmissionColour : IfcColourRgb;\n\tDiffuseReflectionColour : IfcColourRgb;\n\tTransmissionColour : IfcColourRgb;\n\tReflectanceColour : IfcColourRgb;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleRefraction\n SUBTYPE OF (IfcPresentationItem);\n\tRefractionIndex : OPTIONAL IfcReal;\n\tDispersionFactor : OPTIONAL IfcReal;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleRendering\n SUBTYPE OF (IfcSurfaceStyleShading);\n\tDiffuseColour : OPTIONAL IfcColourOrFactor;\n\tTransmissionColour : OPTIONAL IfcColourOrFactor;\n\tDiffuseTransmissionColour : OPTIONAL IfcColourOrFactor;\n\tReflectionColour : OPTIONAL IfcColourOrFactor;\n\tSpecularColour : OPTIONAL IfcColourOrFactor;\n\tSpecularHighlight : OPTIONAL IfcSpecularHighlightSelect;\n\tReflectanceMethod : IfcReflectanceMethodEnum;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleShading\n SUPERTYPE OF (ONEOF\n    (IfcSurfaceStyleRendering))\n SUBTYPE OF (IfcPresentationItem);\n\tSurfaceColour : IfcColourRgb;\n\tTransparency : OPTIONAL IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleWithTextures\n SUBTYPE OF (IfcPresentationItem);\n\tTextures : LIST [1:?] OF IfcSurfaceTexture;\nEND_ENTITY;\n\nENTITY IfcSurfaceTexture\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcBlobTexture\n    ,IfcImageTexture\n    ,IfcPixelTexture))\n SUBTYPE OF (IfcPresentationItem);\n\tRepeatS : IfcBoolean;\n\tRepeatT : IfcBoolean;\n\tMode : OPTIONAL IfcIdentifier;\n\tTextureTransform : OPTIONAL IfcCartesianTransformationOperator2D;\n\tParameter : OPTIONAL LIST [1:?] OF IfcIdentifier;\n INVERSE\n\tIsMappedBy : SET [0:?] OF IfcTextureCoordinate FOR Maps;\n\tUsedInStyles : SET [0:?] OF IfcSurfaceStyleWithTextures FOR Textures;\nEND_ENTITY;\n\nENTITY IfcSweptAreaSolid\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcExtrudedAreaSolid\n    ,IfcFixedReferenceSweptAreaSolid\n    ,IfcRevolvedAreaSolid\n    ,IfcSurfaceCurveSweptAreaSolid))\n SUBTYPE OF (IfcSolidModel);\n\tSweptArea : IfcProfileDef;\n\tPosition : OPTIONAL IfcAxis2Placement3D;\n WHERE\n\tSweptAreaType : SweptArea.ProfileType = IfcProfileTypeEnum.Area;\nEND_ENTITY;\n\nENTITY IfcSweptDiskSolid\n SUPERTYPE OF (ONEOF\n    (IfcSweptDiskSolidPolygonal))\n SUBTYPE OF (IfcSolidModel);\n\tDirectrix : IfcCurve;\n\tRadius : IfcPositiveLengthMeasure;\n\tInnerRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tStartParam : OPTIONAL IfcParameterValue;\n\tEndParam : OPTIONAL IfcParameterValue;\n WHERE\n\tDirectrixDim : Directrix.Dim = 3;\n\tInnerRadiusSize : (NOT EXISTS(InnerRadius)) OR (Radius > InnerRadius);\n\tDirectrixBounded : (EXISTS(StartParam) AND EXISTS(EndParam)) OR \n(SIZEOF(['IFC4.IFCCONIC', 'IFC4.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1);\nEND_ENTITY;\n\nENTITY IfcSweptDiskSolidPolygonal\n SUBTYPE OF (IfcSweptDiskSolid);\n\tFilletRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tCorrectRadii : NOT(EXISTS(FilletRadius)) OR (FilletRadius >= SELF\\IfcSweptDiskSolid.Radius);\n\tDirectrixIsPolyline : ('IFC4.IFCPOLYLINE' IN TYPEOF(SELF\\IfcSweptDiskSolid.Directrix)) OR\n(('IFC4.IFCINDEXEDPOLYCURVE' IN TYPEOF(SELF\\IfcSweptDiskSolid.Directrix)) AND NOT(EXISTS(SELF\\IfcSweptDiskSolid.Directrix.Segments)));\nEND_ENTITY;\n\nENTITY IfcSweptSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcSurfaceOfLinearExtrusion\n    ,IfcSurfaceOfRevolution))\n SUBTYPE OF (IfcSurface);\n\tSweptCurve : IfcProfileDef;\n\tPosition : OPTIONAL IfcAxis2Placement3D;\n WHERE\n\tSweptCurveType : SweptCurve.ProfileType = IfcProfileTypeEnum.Curve;\nEND_ENTITY;\n\nENTITY IfcSwitchingDevice\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcSwitchingDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcSwitchingDeviceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcSwitchingDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCSWITCHINGDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSwitchingDeviceType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcSwitchingDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSwitchingDeviceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcSwitchingDeviceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSystem\n SUPERTYPE OF (ONEOF\n    (IfcBuildingSystem\n    ,IfcDistributionSystem\n    ,IfcStructuralAnalysisModel\n    ,IfcZone))\n SUBTYPE OF (IfcGroup);\n INVERSE\n\tServicesBuildings : SET [0:1] OF IfcRelServicesBuildings FOR RelatingSystem;\nEND_ENTITY;\n\nENTITY IfcSystemFurnitureElement\n SUBTYPE OF (IfcFurnishingElement);\n\tPredefinedType : OPTIONAL IfcSystemFurnitureElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcSystemFurnitureElementTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcSystemFurnitureElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n   ('IFC4.IFCSYSTEMFURNITUREELEMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSystemFurnitureElementType\n SUBTYPE OF (IfcFurnishingElementType);\n\tPredefinedType : OPTIONAL IfcSystemFurnitureElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSystemFurnitureElementTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcSystemFurnitureElementTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tFlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tWebEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tWebSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n WHERE\n\tValidFlangeThickness : FlangeThickness < Depth;\n\tValidWebThickness : WebThickness < FlangeWidth;\nEND_ENTITY;\n\nENTITY IfcTable;\n\tName : OPTIONAL IfcLabel;\n\tRows : OPTIONAL LIST [1:?] OF IfcTableRow;\n\tColumns : OPTIONAL LIST [1:?] OF IfcTableColumn;\n DERIVE\n\tNumberOfCellsInRow : IfcInteger := HIINDEX(Rows[1].RowCells);\n\tNumberOfHeadings : IfcInteger := SIZEOF(QUERY( Temp <* Rows | Temp.IsHeading));\n\tNumberOfDataRows : IfcInteger := SIZEOF(QUERY( Temp <* Rows | NOT(Temp.IsHeading)));\n WHERE\n\tWR1 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0;\n\tWR2 : { 0 <= NumberOfHeadings <= 1 };\nEND_ENTITY;\n\nENTITY IfcTableColumn;\n\tIdentifier : OPTIONAL IfcIdentifier;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tUnit : OPTIONAL IfcUnit;\n\tReferencePath : OPTIONAL IfcReference;\nEND_ENTITY;\n\nENTITY IfcTableRow;\n\tRowCells : OPTIONAL LIST [1:?] OF IfcValue;\n\tIsHeading : OPTIONAL IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcTank\n SUBTYPE OF (IfcFlowStorageDevice);\n\tPredefinedType : OPTIONAL IfcTankTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcTankTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcTankTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCTANKTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTankType\n SUBTYPE OF (IfcFlowStorageDeviceType);\n\tPredefinedType : IfcTankTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTankTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcTankTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTask\n SUBTYPE OF (IfcProcess);\n\tStatus : OPTIONAL IfcLabel;\n\tWorkMethod : OPTIONAL IfcLabel;\n\tIsMilestone : IfcBoolean;\n\tPriority : OPTIONAL IfcInteger;\n\tTaskTime : OPTIONAL IfcTaskTime;\n\tPredefinedType : OPTIONAL IfcTaskTypeEnum;\n WHERE\n\tHasName : EXISTS(SELF\\IfcRoot.Name);\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcTaskTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTaskTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcTaskTime\n SUPERTYPE OF (ONEOF\n    (IfcTaskTimeRecurring))\n SUBTYPE OF (IfcSchedulingTime);\n\tDurationType : OPTIONAL IfcTaskDurationEnum;\n\tScheduleDuration : OPTIONAL IfcDuration;\n\tScheduleStart : OPTIONAL IfcDateTime;\n\tScheduleFinish : OPTIONAL IfcDateTime;\n\tEarlyStart : OPTIONAL IfcDateTime;\n\tEarlyFinish : OPTIONAL IfcDateTime;\n\tLateStart : OPTIONAL IfcDateTime;\n\tLateFinish : OPTIONAL IfcDateTime;\n\tFreeFloat : OPTIONAL IfcDuration;\n\tTotalFloat : OPTIONAL IfcDuration;\n\tIsCritical : OPTIONAL IfcBoolean;\n\tStatusTime : OPTIONAL IfcDateTime;\n\tActualDuration : OPTIONAL IfcDuration;\n\tActualStart : OPTIONAL IfcDateTime;\n\tActualFinish : OPTIONAL IfcDateTime;\n\tRemainingTime : OPTIONAL IfcDuration;\n\tCompletion : OPTIONAL IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcTaskTimeRecurring\n SUBTYPE OF (IfcTaskTime);\n\tRecurrence : IfcRecurrencePattern;\nEND_ENTITY;\n\nENTITY IfcTaskType\n SUBTYPE OF (IfcTypeProcess);\n\tPredefinedType : IfcTaskTypeEnum;\n\tWorkMethod : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTaskTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTaskTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeProcess.ProcessType));\nEND_ENTITY;\n\nENTITY IfcTelecomAddress\n SUBTYPE OF (IfcAddress);\n\tTelephoneNumbers : OPTIONAL LIST [1:?] OF IfcLabel;\n\tFacsimileNumbers : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPagerNumber : OPTIONAL IfcLabel;\n\tElectronicMailAddresses : OPTIONAL LIST [1:?] OF IfcLabel;\n\tWWWHomePageURL : OPTIONAL IfcURIReference;\n\tMessagingIDs : OPTIONAL LIST [1:?] OF IfcURIReference;\n WHERE\n\tMinimumDataProvided : EXISTS (TelephoneNumbers) OR\nEXISTS (FacsimileNumbers) OR \nEXISTS (PagerNumber) OR\nEXISTS (ElectronicMailAddresses) OR \nEXISTS (WWWHomePageURL) OR\nEXISTS (MessagingIDs);\nEND_ENTITY;\n\nENTITY IfcTendon\n SUBTYPE OF (IfcReinforcingElement);\n\tPredefinedType : OPTIONAL IfcTendonTypeEnum;\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tTensionForce : OPTIONAL IfcForceMeasure;\n\tPreStress : OPTIONAL IfcPressureMeasure;\n\tFrictionCoefficient : OPTIONAL IfcNormalisedRatioMeasure;\n\tAnchorageSlip : OPTIONAL IfcPositiveLengthMeasure;\n\tMinCurvatureRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n(PredefinedType <> IfcTendonTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcTendonTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCTENDONTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTendonAnchor\n SUBTYPE OF (IfcReinforcingElement);\n\tPredefinedType : OPTIONAL IfcTendonAnchorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n(PredefinedType <> IfcTendonAnchorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcTendonAnchorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n('IFC4.IFCTENDONANCHORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTendonAnchorType\n SUBTYPE OF (IfcReinforcingElementType);\n\tPredefinedType : IfcTendonAnchorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTendonAnchorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcTendonAnchorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTendonType\n SUBTYPE OF (IfcReinforcingElementType);\n\tPredefinedType : IfcTendonTypeEnum;\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tSheathDiameter : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTendonTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcTendonTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTessellatedFaceSet\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcPolygonalFaceSet\n    ,IfcTriangulatedFaceSet))\n SUBTYPE OF (IfcTessellatedItem);\n\tCoordinates : IfcCartesianPointList3D;\n DERIVE\n\tDim : IfcDimensionCount := 3;\n INVERSE\n\tHasColours : SET [0:1] OF IfcIndexedColourMap FOR MappedTo;\n\tHasTextures : SET [0:?] OF IfcIndexedTextureMap FOR MappedTo;\nEND_ENTITY;\n\nENTITY IfcTessellatedItem\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcIndexedPolygonalFace\n    ,IfcTessellatedFaceSet))\n SUBTYPE OF (IfcGeometricRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcTextLiteral\n SUPERTYPE OF (ONEOF\n    (IfcTextLiteralWithExtent))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tLiteral : IfcPresentableText;\n\tPlacement : IfcAxis2Placement;\n\tPath : IfcTextPath;\nEND_ENTITY;\n\nENTITY IfcTextLiteralWithExtent\n SUBTYPE OF (IfcTextLiteral);\n\tExtent : IfcPlanarExtent;\n\tBoxAlignment : IfcBoxAlignment;\n WHERE\n\tWR31 : NOT('IFC4.IFCPLANARBOX' IN TYPEOF(Extent));\nEND_ENTITY;\n\nENTITY IfcTextStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tTextCharacterAppearance : OPTIONAL IfcTextStyleForDefinedFont;\n\tTextStyle : OPTIONAL IfcTextStyleTextModel;\n\tTextFontStyle : IfcTextFontSelect;\n\tModelOrDraughting : OPTIONAL IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcTextStyleFontModel\n SUBTYPE OF (IfcPreDefinedTextFont);\n\tFontFamily : LIST [1:?] OF IfcTextFontName;\n\tFontStyle : OPTIONAL IfcFontStyle;\n\tFontVariant : OPTIONAL IfcFontVariant;\n\tFontWeight : OPTIONAL IfcFontWeight;\n\tFontSize : IfcSizeSelect;\n WHERE\n\tMeasureOfFontSize : ('IFC4.IFCLENGTHMEASURE' IN TYPEOF(SELF.FontSize)) AND\n(SELF.FontSize > 0.);\nEND_ENTITY;\n\nENTITY IfcTextStyleForDefinedFont\n SUBTYPE OF (IfcPresentationItem);\n\tColour : IfcColour;\n\tBackgroundColour : OPTIONAL IfcColour;\nEND_ENTITY;\n\nENTITY IfcTextStyleTextModel\n SUBTYPE OF (IfcPresentationItem);\n\tTextIndent : OPTIONAL IfcSizeSelect;\n\tTextAlign : OPTIONAL IfcTextAlignment;\n\tTextDecoration : OPTIONAL IfcTextDecoration;\n\tLetterSpacing : OPTIONAL IfcSizeSelect;\n\tWordSpacing : OPTIONAL IfcSizeSelect;\n\tTextTransform : OPTIONAL IfcTextTransformation;\n\tLineHeight : OPTIONAL IfcSizeSelect;\nEND_ENTITY;\n\nENTITY IfcTextureCoordinate\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcIndexedTextureMap\n    ,IfcTextureCoordinateGenerator\n    ,IfcTextureMap))\n SUBTYPE OF (IfcPresentationItem);\n\tMaps : LIST [1:?] OF IfcSurfaceTexture;\nEND_ENTITY;\n\nENTITY IfcTextureCoordinateGenerator\n SUBTYPE OF (IfcTextureCoordinate);\n\tMode : IfcLabel;\n\tParameter : OPTIONAL LIST [1:?] OF IfcReal;\nEND_ENTITY;\n\nENTITY IfcTextureMap\n SUBTYPE OF (IfcTextureCoordinate);\n\tVertices : LIST [3:?] OF IfcTextureVertex;\n\tMappedTo : IfcFace;\nEND_ENTITY;\n\nENTITY IfcTextureVertex\n SUBTYPE OF (IfcPresentationItem);\n\tCoordinates : LIST [2:2] OF IfcParameterValue;\nEND_ENTITY;\n\nENTITY IfcTextureVertexList\n SUBTYPE OF (IfcPresentationItem);\n\tTexCoordsList : LIST [1:?] OF LIST [2:2] OF IfcParameterValue;\nEND_ENTITY;\n\nENTITY IfcTimePeriod;\n\tStartTime : IfcTime;\n\tEndTime : IfcTime;\nEND_ENTITY;\n\nENTITY IfcTimeSeries\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcIrregularTimeSeries\n    ,IfcRegularTimeSeries));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tStartTime : IfcDateTime;\n\tEndTime : IfcDateTime;\n\tTimeSeriesDataType : IfcTimeSeriesDataTypeEnum;\n\tDataOrigin : IfcDataOriginEnum;\n\tUserDefinedDataOrigin : OPTIONAL IfcLabel;\n\tUnit : OPTIONAL IfcUnit;\n INVERSE\n\tHasExternalReference : SET [1:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcTimeSeriesValue;\n\tListValues : LIST [1:?] OF IfcValue;\nEND_ENTITY;\n\nENTITY IfcTopologicalRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcConnectedFaceSet\n    ,IfcEdge\n    ,IfcFace\n    ,IfcFaceBound\n    ,IfcLoop\n    ,IfcPath\n    ,IfcVertex))\n SUBTYPE OF (IfcRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcTopologyRepresentation\n SUBTYPE OF (IfcShapeModel);\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* SELF\\IfcRepresentation.Items | \n  NOT('IFC4.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))\n)) = 0;\n\tWR22 : EXISTS(SELF\\IfcRepresentation.RepresentationType);\n\tWR23 : IfcTopologyRepresentationTypes(SELF\\IfcRepresentation.RepresentationType, SELF\\IfcRepresentation.Items);\nEND_ENTITY;\n\nENTITY IfcToroidalSurface\n SUBTYPE OF (IfcElementarySurface);\n\tMajorRadius : IfcPositiveLengthMeasure;\n\tMinorRadius : IfcPositiveLengthMeasure;\n WHERE\n\tMajorLargerMinor : MinorRadius < MajorRadius;\nEND_ENTITY;\n\nENTITY IfcTransformer\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcTransformerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcTransformerTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcTransformerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCTRANFORMERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTransformerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcTransformerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTransformerTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcTransformerTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTransportElement\n SUBTYPE OF (IfcElement);\n\tPredefinedType : OPTIONAL IfcTransportElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcTransportElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcTransportElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCTRANSPORTELEMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTransportElementType\n SUBTYPE OF (IfcElementType);\n\tPredefinedType : IfcTransportElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTransportElementTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcTransportElementTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTrapeziumProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tBottomXDim : IfcPositiveLengthMeasure;\n\tTopXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\n\tTopXOffset : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcTriangulatedFaceSet\n SUBTYPE OF (IfcTessellatedFaceSet);\n\tNormals : OPTIONAL LIST [1:?] OF LIST [3:3] OF IfcParameterValue;\n\tClosed : OPTIONAL IfcBoolean;\n\tCoordIndex : LIST [1:?] OF LIST [3:3] OF IfcPositiveInteger;\n\tPnIndex : OPTIONAL LIST [1:?] OF IfcPositiveInteger;\n DERIVE\n\tNumberOfTriangles : IfcInteger := SIZEOF(CoordIndex);\nEND_ENTITY;\n\nENTITY IfcTrimmedCurve\n SUBTYPE OF (IfcBoundedCurve);\n\tBasisCurve : IfcCurve;\n\tTrim1 : SET [1:2] OF IfcTrimmingSelect;\n\tTrim2 : SET [1:2] OF IfcTrimmingSelect;\n\tSenseAgreement : IfcBoolean;\n\tMasterRepresentation : IfcTrimmingPreference;\n WHERE\n\tTrim1ValuesConsistent : (HIINDEX(Trim1) = 1) OR (TYPEOF(Trim1[1]) <> TYPEOF(Trim1[2]));\n\tTrim2ValuesConsistent : (HIINDEX(Trim2) = 1) OR (TYPEOF(Trim2[1]) <> TYPEOF(Trim2[2]));\n\tNoTrimOfBoundedCurves : NOT('IFC4.IFCBOUNDEDCURVE' IN TYPEOF(BasisCurve));\nEND_ENTITY;\n\nENTITY IfcTubeBundle\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcTubeBundleTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcTubeBundleTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcTubeBundleTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCTUBEBUNDLETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTubeBundleType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcTubeBundleTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTubeBundleTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcTubeBundleTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTypeObject\n SUPERTYPE OF (ONEOF\n    (IfcTypeProcess\n    ,IfcTypeProduct\n    ,IfcTypeResource))\n SUBTYPE OF (IfcObjectDefinition);\n\tApplicableOccurrence : OPTIONAL IfcIdentifier;\n\tHasPropertySets : OPTIONAL SET [1:?] OF IfcPropertySetDefinition;\n INVERSE\n\tTypes : SET [0:1] OF IfcRelDefinesByType FOR RelatingType;\n WHERE\n\tNameRequired : EXISTS(SELF\\IfcRoot.Name);\n\tUniquePropertySetNames : (NOT(EXISTS(HasPropertySets))) OR IfcUniquePropertySetNames(HasPropertySets);\nEND_ENTITY;\n\nENTITY IfcTypeProcess\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcEventType\n    ,IfcProcedureType\n    ,IfcTaskType))\n SUBTYPE OF (IfcTypeObject);\n\tIdentification : OPTIONAL IfcIdentifier;\n\tLongDescription : OPTIONAL IfcText;\n\tProcessType : OPTIONAL IfcLabel;\n INVERSE\n\tOperatesOn : SET [0:?] OF IfcRelAssignsToProcess FOR RelatingProcess;\nEND_ENTITY;\n\nENTITY IfcTypeProduct\n SUPERTYPE OF (ONEOF\n    (IfcDoorStyle\n    ,IfcElementType\n    ,IfcSpatialElementType\n    ,IfcWindowStyle))\n SUBTYPE OF (IfcTypeObject);\n\tRepresentationMaps : OPTIONAL LIST [1:?] OF UNIQUE IfcRepresentationMap;\n\tTag : OPTIONAL IfcLabel;\n INVERSE\n\tReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct;\n WHERE\n\tApplicableOccurrence : NOT(EXISTS(SELF\\IfcTypeObject.Types[1])) OR\n(SIZEOF(QUERY(temp <* SELF\\IfcTypeObject.Types[1].RelatedObjects |\n  NOT('IFC4.IFCPRODUCT' IN TYPEOF(temp)))\n) = 0);\nEND_ENTITY;\n\nENTITY IfcTypeResource\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcConstructionResourceType))\n SUBTYPE OF (IfcTypeObject);\n\tIdentification : OPTIONAL IfcIdentifier;\n\tLongDescription : OPTIONAL IfcText;\n\tResourceType : OPTIONAL IfcLabel;\n INVERSE\n\tResourceOf : SET [0:?] OF IfcRelAssignsToResource FOR RelatingResource;\nEND_ENTITY;\n\nENTITY IfcUShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n WHERE\n\tValidFlangeThickness : FlangeThickness < (Depth / 2.);\n\tValidWebThickness : WebThickness < FlangeWidth;\nEND_ENTITY;\n\nENTITY IfcUnitAssignment;\n\tUnits : SET [1:?] OF IfcUnit;\n WHERE\n\tWR01 : IfcCorrectUnitAssignment(Units);\nEND_ENTITY;\n\nENTITY IfcUnitaryControlElement\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcUnitaryControlElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcUnitaryControlElementTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcUnitaryControlElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n('IFC4.IFCUNITARYCONTROLELEMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcUnitaryControlElementType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcUnitaryControlElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcUnitaryControlElementTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcUnitaryControlElementTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcUnitaryEquipment\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcUnitaryEquipmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcUnitaryEquipmentTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcUnitaryEquipmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCUNITARYEQUIPMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcUnitaryEquipmentType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcUnitaryEquipmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcUnitaryEquipmentTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcUnitaryEquipmentTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcValve\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcValveTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcValveTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcValveTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCVALVETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcValveType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcValveTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcValveTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcValveTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcVector\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOrientation : IfcDirection;\n\tMagnitude : IfcLengthMeasure;\n DERIVE\n\tDim : IfcDimensionCount := Orientation.Dim;\n WHERE\n\tMagGreaterOrEqualZero : Magnitude >= 0.0;\nEND_ENTITY;\n\nENTITY IfcVertex\n SUPERTYPE OF (ONEOF\n    (IfcVertexPoint))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcVertexLoop\n SUBTYPE OF (IfcLoop);\n\tLoopVertex : IfcVertex;\nEND_ENTITY;\n\nENTITY IfcVertexPoint\n SUBTYPE OF (IfcVertex);\n\tVertexGeometry : IfcPoint;\nEND_ENTITY;\n\nENTITY IfcVibrationIsolator\n SUBTYPE OF (IfcElementComponent);\n\tPredefinedType : OPTIONAL IfcVibrationIsolatorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcVibrationIsolatorTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcVibrationIsolatorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCVIBRATIONISOLATORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcVibrationIsolatorType\n SUBTYPE OF (IfcElementComponentType);\n\tPredefinedType : IfcVibrationIsolatorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcVibrationIsolatorTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcVibrationIsolatorTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcVirtualElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcVirtualGridIntersection;\n\tIntersectingAxes : LIST [2:2] OF UNIQUE IfcGridAxis;\n\tOffsetDistances : LIST [2:3] OF IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcVoidingFeature\n SUBTYPE OF (IfcFeatureElementSubtraction);\n\tPredefinedType : OPTIONAL IfcVoidingFeatureTypeEnum;\n WHERE\n\tHasObjectType : NOT EXISTS(PredefinedType) OR (PredefinedType <> IfcVoidingFeatureTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcWall\n SUPERTYPE OF (ONEOF\n    (IfcWallElementedCase\n    ,IfcWallStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n\tPredefinedType : OPTIONAL IfcWallTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcWallTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcWallTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4.IFCWALLTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcWallElementedCase\n SUBTYPE OF (IfcWall);\n WHERE\n\tHasDecomposition : HIINDEX(SELF\\IfcObjectDefinition.IsDecomposedBy) > 0;\nEND_ENTITY;\n\nENTITY IfcWallStandardCase\n SUBTYPE OF (IfcWall);\n WHERE\n\tHasMaterialLayerSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4.IFCRELASSOCIATES.RELATEDOBJECTS') |\n              ('IFC4.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND\n              ('IFC4.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial))\n              )) = 1;\nEND_ENTITY;\n\nENTITY IfcWallType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcWallTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcWallTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcWallTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcWasteTerminal\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcWasteTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcWasteTerminalTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcWasteTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR \n  ('IFC4.IFCWASTETERMINALTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcWasteTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcWasteTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcWasteTerminalTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcWasteTerminalTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcWindow\n SUPERTYPE OF (ONEOF\n    (IfcWindowStandardCase))\n SUBTYPE OF (IfcBuildingElement);\n\tOverallHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tOverallWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : OPTIONAL IfcWindowTypeEnum;\n\tPartitioningType : OPTIONAL IfcWindowTypePartitioningEnum;\n\tUserDefinedPartitioningType : OPTIONAL IfcLabel;\n WHERE\n\tCorrectStyleAssigned : (SIZEOF(IsTypedBy) = 0) \nOR ('IFC4.IFCWINDOWTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcWindowLiningProperties\n SUBTYPE OF (IfcPreDefinedPropertySet);\n\tLiningDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tLiningThickness : OPTIONAL IfcNonNegativeLengthMeasure;\n\tTransomThickness : OPTIONAL IfcNonNegativeLengthMeasure;\n\tMullionThickness : OPTIONAL IfcNonNegativeLengthMeasure;\n\tFirstTransomOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tSecondTransomOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tFirstMullionOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tSecondMullionOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n\tLiningOffset : OPTIONAL IfcLengthMeasure;\n\tLiningToPanelOffsetX : OPTIONAL IfcLengthMeasure;\n\tLiningToPanelOffsetY : OPTIONAL IfcLengthMeasure;\n WHERE\n\tWR31 : NOT(EXISTS(LiningDepth) AND NOT(EXISTS(LiningThickness)));\n\tWR32 : NOT(NOT(EXISTS(FirstTransomOffset)) AND EXISTS(SecondTransomOffset));\n\tWR33 : NOT(NOT(EXISTS(FirstMullionOffset)) AND EXISTS(SecondMullionOffset));\n\tWR34 : (EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1])) \nAND \n(\n ('IFC4.IFCWINDOWTYPE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]))\n  OR\n ('IFC4.IFCWINDOWSTYLE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]))\n);\nEND_ENTITY;\n\nENTITY IfcWindowPanelProperties\n SUBTYPE OF (IfcPreDefinedPropertySet);\n\tOperationType : IfcWindowPanelOperationEnum;\n\tPanelPosition : IfcWindowPanelPositionEnum;\n\tFrameDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tFrameThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n WHERE\n\tApplicableToType : (EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1])) \nAND \n(\n ('IFC4.IFCWINDOWTYPE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]))\n  OR\n ('IFC4.IFCWINDOWSTYLE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]))\n);\nEND_ENTITY;\n\nENTITY IfcWindowStandardCase\n SUBTYPE OF (IfcWindow);\nEND_ENTITY;\n\nENTITY IfcWindowStyle\n SUBTYPE OF (IfcTypeProduct);\n\tConstructionType : IfcWindowStyleConstructionEnum;\n\tOperationType : IfcWindowStyleOperationEnum;\n\tParameterTakesPrecedence : IfcBoolean;\n\tSizeable : IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcWindowType\n SUBTYPE OF (IfcBuildingElementType);\n\tPredefinedType : IfcWindowTypeEnum;\n\tPartitioningType : IfcWindowTypePartitioningEnum;\n\tParameterTakesPrecedence : OPTIONAL IfcBoolean;\n\tUserDefinedPartitioningType : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcWindowTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcWindowTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcWorkCalendar\n SUBTYPE OF (IfcControl);\n\tWorkingTimes : OPTIONAL SET [1:?] OF IfcWorkTime;\n\tExceptionTimes : OPTIONAL SET [1:?] OF IfcWorkTime;\n\tPredefinedType : OPTIONAL IfcWorkCalendarTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcWorkCalendarTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcWorkCalendarTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcWorkControl\n ABSTRACT SUPERTYPE OF (ONEOF\n    (IfcWorkPlan\n    ,IfcWorkSchedule))\n SUBTYPE OF (IfcControl);\n\tCreationDate : IfcDateTime;\n\tCreators : OPTIONAL SET [1:?] OF IfcPerson;\n\tPurpose : OPTIONAL IfcLabel;\n\tDuration : OPTIONAL IfcDuration;\n\tTotalFloat : OPTIONAL IfcDuration;\n\tStartTime : IfcDateTime;\n\tFinishTime : OPTIONAL IfcDateTime;\nEND_ENTITY;\n\nENTITY IfcWorkPlan\n SUBTYPE OF (IfcWorkControl);\n\tPredefinedType : OPTIONAL IfcWorkPlanTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcWorkPlanTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcWorkPlanTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcWorkSchedule\n SUBTYPE OF (IfcWorkControl);\n\tPredefinedType : OPTIONAL IfcWorkScheduleTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcWorkScheduleTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcWorkScheduleTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcWorkTime\n SUBTYPE OF (IfcSchedulingTime);\n\tRecurrencePattern : OPTIONAL IfcRecurrencePattern;\n\tStart : OPTIONAL IfcDate;\n\tFinish : OPTIONAL IfcDate;\nEND_ENTITY;\n\nENTITY IfcZShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n WHERE\n\tValidFlangeThickness : FlangeThickness < (Depth / 2.);\nEND_ENTITY;\n\nENTITY IfcZone\n SUBTYPE OF (IfcSystem);\n\tLongName : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : (SIZEOF(SELF\\IfcGroup.IsGroupedBy) = 0) OR\n\t(SIZEOF (QUERY (temp <* SELF\\IfcGroup.IsGroupedBy[1].RelatedObjects |  \n\t\tNOT(('IFC4.IFCZONE' IN TYPEOF(temp)) OR \n\t\t('IFC4.IFCSPACE' IN TYPEOF(temp)) OR\n\t\t('IFC4.IFCSPATIALZONE' IN TYPEOF(temp))\n\t))) = 0);\nEND_ENTITY;\n\nFUNCTION IfcAssociatedSurface\n(Arg : IfcPcurve) : IfcSurface;\n\n   LOCAL\n     Surf : IfcSurface;\n   END_LOCAL;\n   \n   Surf := Arg\\IfcPcurve.BasisSurface;\n   \n   RETURN(Surf);\nEND_FUNCTION;\n\nFUNCTION IfcBaseAxis\n(Dim : INTEGER; \n   Axis1, Axis2, Axis3 : IfcDirection) \n    : LIST [2:3] OF IfcDirection;\n\nLOCAL\n  U : LIST [2:3] OF IfcDirection;\n  Factor : REAL;\n  D1, D2 : IfcDirection;\nEND_LOCAL;\n\n  IF (Dim = 3) THEN \n    D1 := NVL(IfcNormalise(Axis3), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n    D2 := IfcFirstProjAxis(D1, Axis1);\n    U  := [D2, IfcSecondProjAxis(D1, D2, Axis2), D1];\n  ELSE\n    IF EXISTS(Axis1) THEN\n      D1 := IfcNormalise(Axis1);\n      U  := [D1, IfcOrthogonalComplement(D1)];\n      IF EXISTS(Axis2) THEN\n        Factor := IfcDotProduct(Axis2, U[2]);\n        IF (Factor < 0.0) THEN\n          U[2].DirectionRatios[1] := -U[2].DirectionRatios[1];\n          U[2].DirectionRatios[2] := -U[2].DirectionRatios[2];\n        END_IF;\n      END_IF;\n    ELSE\n      IF EXISTS(Axis2) THEN\n        D1 := IfcNormalise(Axis2);\n        U  := [IfcOrthogonalComplement(D1), D1];\n        U[1].DirectionRatios[1] := -U[1].DirectionRatios[1];\n        U[1].DirectionRatios[2] := -U[1].DirectionRatios[2];\n        ELSE\n          U := [IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0, 0.0]), \n                IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0, 1.0])];\n      END_IF;\n    END_IF;\n  END_IF;\n  RETURN(U);\nEND_FUNCTION;\n\nFUNCTION IfcBooleanChoose\n(B : BOOLEAN ;\n     Choice1, Choice2 : GENERIC : Item) : GENERIC : Item;\n  IF B THEN\n     RETURN (Choice1);\n  ELSE\n     RETURN (Choice2);\n  END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcBuild2Axes\n(RefDirection : IfcDirection)\n    : LIST [2:2] OF IfcDirection;\nLOCAL\n  D : IfcDirection := NVL(IfcNormalise(RefDirection),\n      IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0]));\nEND_LOCAL;\n  RETURN([D, IfcOrthogonalComplement(D)]);\nEND_FUNCTION;\n\nFUNCTION IfcBuildAxes\n(Axis, RefDirection : IfcDirection) \n    : LIST [3:3] OF IfcDirection;\nLOCAL\n  D1, D2 : IfcDirection;\nEND_LOCAL;\n  D1 := NVL(IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n  D2 := IfcFirstProjAxis(D1, RefDirection);\n  RETURN ([D2, IfcNormalise(IfcCrossProduct(D1,D2))\\IfcVector.Orientation, D1]);\nEND_FUNCTION;\n\nFUNCTION IfcConsecutiveSegments\n(Segments : LIST [1:?] OF IfcSegmentIndexSelect)\n  : BOOLEAN;\n\n LOCAL\n  Result : BOOLEAN := TRUE;\n END_LOCAL;\n\n  REPEAT i := 1 TO (HIINDEX(Segments)-1);\n    IF Segments[i][HIINDEX(Segments[i])] <> Segments[i+1][1] THEN\n      BEGIN\n        Result := FALSE;\n        ESCAPE;\n      END;\n\tEND_IF;\n  END_REPEAT;\n\n  RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcConstraintsParamBSpline\n( Degree, UpKnots, UpCp : INTEGER;\n  KnotMult : LIST OF INTEGER;\n  Knots : LIST OF IfcParameterValue ) \n: BOOLEAN;\n\n\n  LOCAL\n    Result : BOOLEAN := TRUE;\n    K, Sum : INTEGER;\n  END_LOCAL;\n\n  (* Find sum of knot multiplicities. *)\n  Sum := KnotMult[1];\n  REPEAT i := 2 TO UpKnots;\n    Sum := Sum + KnotMult[i];\n  END_REPEAT;\n\n  (* Check limits holding for all B-spline parametrisations *)\n  IF (Degree < 1) OR (UpKnots < 2) OR (UpCp < Degree) OR\n    (Sum <> (Degree + UpCp + 2)) THEN\n    Result := FALSE;\n    RETURN(Result);\n  END_IF;\n\n  K := KnotMult[1];\n  IF (K < 1) OR (K > Degree + 1) THEN\n    Result := FALSE;\n    RETURN(Result);\n  END_IF;\n\n  REPEAT i := 2 TO UpKnots;\n    IF (KnotMult[i] < 1) OR (Knots[i] <= Knots[i-1]) THEN\n      Result := FALSE;\n      RETURN(Result);\n    END_IF;\n    K := KnotMult[i];\n    IF (i < UpKnots) AND (K > Degree) THEN\n      Result := FALSE;\n      RETURN(Result);\n    END_IF;\n    IF (i = UpKnots) AND (K > Degree + 1) THEN\n      Result := FALSE;\n      RETURN(Result);\n    END_IF;\n  END_REPEAT;\n\n  RETURN(result);\nEND_FUNCTION;\n\nFUNCTION IfcConvertDirectionInto2D\n(Direction : IfcDirection)\n    : IfcDirection;\n\t\n  LOCAL\n    Direction2D : IfcDirection := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.,1.]);\n  END_LOCAL;\n  \n  Direction2D.DirectionRatios[1] := Direction.DirectionRatios[1];\n  Direction2D.DirectionRatios[2] := Direction.DirectionRatios[2];\n  \n  RETURN (Direction2D);\nEND_FUNCTION;\n\nFUNCTION IfcCorrectDimensions\n(m   : IfcUnitEnum; Dim : IfcDimensionalExponents) : LOGICAL;  \nCASE m OF\n  LENGTHUNIT : IF\n    Dim = (IfcDimensionalExponents (1, 0, 0, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  MASSUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 1, 0, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  TIMEUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 1, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ELECTRICCURRENTUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 1, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  THERMODYNAMICTEMPERATUREUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 1, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  AMOUNTOFSUBSTANCEUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 1, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  LUMINOUSINTENSITYUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  PLANEANGLEUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  SOLIDANGLEUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  AREAUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 0, 0, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  VOLUMEUNIT : IF\n    Dim = (IfcDimensionalExponents (3, 0, 0, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n\n  ABSORBEDDOSEUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  RADIOACTIVITYUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ELECTRICCAPACITANCEUNIT : IF\n    Dim = (IfcDimensionalExponents (-2, -1, 4, 2, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  DOSEEQUIVALENTUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ELECTRICCHARGEUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 1, 1, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ELECTRICCONDUCTANCEUNIT : IF\n    Dim = (IfcDimensionalExponents (-2, -1, 3, 2, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ELECTRICVOLTAGEUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 1, -3, -1, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ELECTRICRESISTANCEUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 1, -3, -2, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ENERGYUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 1, -2, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  FORCEUNIT : IF\n    Dim = (IfcDimensionalExponents (1, 1, -2, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  FREQUENCYUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  INDUCTANCEUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 1, -2, -2, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ILLUMINANCEUNIT : IF\n    Dim = (IfcDimensionalExponents (-2, 0, 0, 0, 0, 0, 1))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  LUMINOUSFLUXUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  MAGNETICFLUXUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 1, -2, -1, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  MAGNETICFLUXDENSITYUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 1, -2, -1, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  POWERUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 1, -3, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  PRESSUREUNIT : IF\n    Dim = (IfcDimensionalExponents (-1, 1, -2, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n\n  OTHERWISE :\n    RETURN (UNKNOWN);\nEND_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcCorrectFillAreaStyle\n(Styles : SET[1:?] OF IfcFillStyleSelect)\n  :LOGICAL;\n\nLOCAL\n   Hatching : INTEGER := 0;\n   Tiles    : INTEGER := 0;\n   Colour   : INTEGER := 0;\n   External : INTEGER := 0;\nEND_LOCAL;\n\n\nExternal := SIZEOF(QUERY(Style <* Styles |\n  'IFC4.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN\n   TYPEOF(Style)));\n\nHatching  := SIZEOF(QUERY(Style <* Styles |\n  'IFC4.IFCFILLAREASTYLEHATCHING' IN\n   TYPEOF(Style)));\n\nTiles     := SIZEOF(QUERY(Style <* Styles |\n  'IFC4.IFCFILLAREASTYLETILES' IN\n   TYPEOF(Style)));\n\nColour    := SIZEOF(QUERY(Style <* Styles |\n  'IFC4.IFCCOLOUR' IN\n   TYPEOF(Style)));\n\n\nIF (External > 1) THEN\n  RETURN (FALSE);\nEND_IF;\n\n\nIF ((External = 1) AND ((Hatching > 0) OR (Tiles > 0) OR (Colour > 0))) THEN\n  RETURN (FALSE);\nEND_IF;\n\n\nIF (Colour > 1) THEN\n  RETURN (FALSE);\nEND_IF;\n\nIF ((Hatching > 0) AND (Tiles >0)) THEN\n  RETURN (FALSE);\nEND_IF;\n\nRETURN(TRUE);\nEND_FUNCTION;\n\nFUNCTION IfcCorrectLocalPlacement\n(AxisPlacement:IfcAxis2Placement; \n   RelPlacement : IfcObjectPlacement):LOGICAL;\n\n  IF (EXISTS(RelPlacement)) THEN\n    IF ('IFC4.IFCGRIDPLACEMENT' IN TYPEOF(RelPlacement)) THEN\n      RETURN(?);\n    END_IF;\n    IF ('IFC4.IFCLOCALPLACEMENT' IN TYPEOF(RelPlacement)) THEN\n      IF ('IFC4.IFCAXIS2PLACEMENT2D' IN TYPEOF(AxisPlacement)) THEN\n        RETURN(TRUE);\n      END_IF;\n      IF ('IFC4.IFCAXIS2PLACEMENT3D' IN TYPEOF(AxisPlacement)) THEN\n        IF (RelPlacement\\IfcLocalPlacement.RelativePlacement.Dim = 3) THEN\n          RETURN(TRUE);\n        ELSE\n          RETURN(FALSE);\n        END_IF;\n      END_IF;\n    END_IF;\n  ELSE\n    RETURN(TRUE);  \n  END_IF;\n  RETURN(?);\nEND_FUNCTION;\n\nFUNCTION IfcCorrectObjectAssignment\n(Constraint: IfcObjectTypeEnum; Objects : SET[1:?] OF IfcObjectDefinition)\n  : LOGICAL ;\n  \nLOCAL\n  Count : INTEGER := 0;\nEND_LOCAL;\n\n    IF NOT(EXISTS(Constraint)) THEN \n      RETURN(TRUE);\n    END_IF;\n  \n    CASE Constraint OF\n      IfcObjectTypeEnum.NOTDEFINED : RETURN(TRUE);\n      IfcObjectTypeEnum.PRODUCT :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCPRODUCT' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.PROCESS :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCPROCESS' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.CONTROL :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCCONTROL' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.RESOURCE :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCRESOURCE' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.ACTOR :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCACTOR' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.GROUP :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCGROUP' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      IfcObjectTypeEnum.PROJECT :\n        BEGIN\n          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFC4.IFCPROJECT' IN TYPEOF(temp))));\n          RETURN(Count = 0);\n        END;\n      OTHERWISE : RETURN(?);\n    END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcCorrectUnitAssignment\n(Units : SET [1:?] OF IfcUnit)\n   : LOGICAL;\n\n  LOCAL\n    NamedUnitNumber    : INTEGER := 0;\n    DerivedUnitNumber  : INTEGER := 0;\n    MonetaryUnitNumber : INTEGER := 0;\n    NamedUnitNames     : SET OF IfcUnitEnum := [];\n    DerivedUnitNames   : SET OF IfcDerivedUnitEnum := [];\n  END_LOCAL;\n\n  NamedUnitNumber    := SIZEOF(QUERY(temp <* Units | ('IFC4.IFCNAMEDUNIT' IN TYPEOF(temp)) AND NOT(temp\\IfcNamedUnit.UnitType = IfcUnitEnum.USERDEFINED)));\n  DerivedUnitNumber  := SIZEOF(QUERY(temp <* Units | ('IFC4.IFCDERIVEDUNIT' IN TYPEOF(temp)) AND NOT(temp\\IfcDerivedUnit.UnitType = IfcDerivedUnitEnum.USERDEFINED)));\n  MonetaryUnitNumber := SIZEOF(QUERY(temp <* Units |  'IFC4.IFCMONETARYUNIT' IN TYPEOF(temp)));\n\n  REPEAT i := 1 TO SIZEOF(Units);\n    IF (('IFC4.IFCNAMEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i]\\IfcNamedUnit.UnitType = IfcUnitEnum.USERDEFINED)) THEN\n        NamedUnitNames := NamedUnitNames + Units[i]\\IfcNamedUnit.UnitType;\n    END_IF;\n    IF (('IFC4.IFCDERIVEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i]\\IfcDerivedUnit.UnitType = IfcDerivedUnitEnum.USERDEFINED)) THEN\n        DerivedUnitNames := DerivedUnitNames + Units[i]\\IfcDerivedUnit.UnitType;\n    END_IF;\n  END_REPEAT;\n\n  RETURN((SIZEOF(NamedUnitNames) = NamedUnitNumber) AND (SIZEOF(DerivedUnitNames) = DerivedUnitNumber) AND (MonetaryUnitNumber <= 1));\nEND_FUNCTION;\n\nFUNCTION IfcCrossProduct\n(Arg1, Arg2 : IfcDirection) \n    : IfcVector;\nLOCAL\n  Mag : REAL;\n  Res : IfcDirection;\n  V1,V2  : LIST[3:3] OF REAL;\n  Result : IfcVector;\nEND_LOCAL;\n\n  IF (NOT EXISTS (Arg1) OR (Arg1.Dim = 2)) OR (NOT EXISTS (Arg2) OR (Arg2.Dim = 2)) THEN\n    RETURN(?);\n  ELSE\n    BEGIN\n      V1  := IfcNormalise(Arg1)\\IfcDirection.DirectionRatios;\n\n      V2  := IfcNormalise(Arg2)\\IfcDirection.DirectionRatios;\n      Res := IfcRepresentationItem() || IfcGeometricRepresentationItem () \n             || IfcDirection([(V1[2]*V2[3] - V1[3]*V2[2]), (V1[3]*V2[1] - V1[1]*V2[3]), (V1[1]*V2[2] - V1[2]*V2[1])]);\n      Mag := 0.0;\n      REPEAT i := 1 TO 3;\n        Mag := Mag + Res.DirectionRatios[i]*Res.DirectionRatios[i];\n      END_REPEAT;\n      IF (Mag > 0.0) THEN\n        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Res, SQRT(Mag));\n      ELSE\n        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Arg1, 0.0);\n      END_IF;\n      RETURN(Result);\n    END;\n  END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcCurveDim\n(Curve : IfcCurve)\n       : IfcDimensionCount;\n\n  IF ('IFC4.IFCLINE' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcLine.Pnt.Dim);\n  END_IF;\n  IF ('IFC4.IFCCONIC' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcConic.Position.Dim);\n  END_IF;\n  IF ('IFC4.IFCPOLYLINE' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcPolyline.Points[1].Dim);\n  END_IF;\n  IF ('IFC4.IFCTRIMMEDCURVE' IN TYPEOF(Curve))\n    THEN RETURN(IfcCurveDim(Curve\\IfcTrimmedCurve.BasisCurve));\n  END_IF;\n  IF ('IFC4.IFCCOMPOSITECURVE' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcCompositeCurve.Segments[1].Dim);\n  END_IF;\n  IF ('IFC4.IFCBSPLINECURVE' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcBSplineCurve.ControlPointsList[1].Dim);\n  END_IF;\n  IF ('IFC4.IFCOFFSETCURVE2D' IN TYPEOF(Curve))\n    THEN RETURN(2); \n  END_IF;\n  IF ('IFC4.IFCOFFSETCURVE3D' IN TYPEOF(Curve))\n    THEN RETURN(3);\n  END_IF;\n  IF ('IFC4.IFCPCURVE' IN TYPEOF(Curve))\n    THEN RETURN(3);\n  END_IF;\n  IF ('IFC4.IFCINDEXEDPOLYCURVE' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcIndexedPolyCurve.Points.Dim);\n  END_IF;\nRETURN (?);\nEND_FUNCTION;\n\nFUNCTION IfcCurveWeightsPositive\n( B: IfcRationalBSplineCurveWithKnots)\n: BOOLEAN;\n\n  LOCAL\n    Result : BOOLEAN := TRUE;\n  END_LOCAL;\n\n  REPEAT i := 0 TO B.UpperIndexOnControlPoints;\n    IF B.Weights[i] <= 0.0  THEN\n      Result := FALSE;\n      RETURN(Result);\n    END_IF;\n  END_REPEAT;\n  RETURN(Result);\nEND_FUNCTION;\n\nFUNCTION IfcDeriveDimensionalExponents\n(UnitElements : SET [1:?] OF IfcDerivedUnitElement)\n    : IfcDimensionalExponents;  \n    LOCAL\n    Result : IfcDimensionalExponents :=\n            IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 0);  \n    END_LOCAL;\n    REPEAT i := LOINDEX(UnitElements) TO HIINDEX(UnitElements);\n        Result.LengthExponent := Result.LengthExponent +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.LengthExponent);\n        Result.MassExponent := Result.MassExponent  +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.MassExponent);\n        Result.TimeExponent := Result.TimeExponent +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.TimeExponent);\n        Result.ElectricCurrentExponent := Result.ElectricCurrentExponent +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.ElectricCurrentExponent);\n        Result.ThermodynamicTemperatureExponent := Result.ThermodynamicTemperatureExponent +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.ThermodynamicTemperatureExponent);\n        Result.AmountOfSubstanceExponent := Result.AmountOfSubstanceExponent +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.AmountOfSubstanceExponent);\n        Result.LuminousIntensityExponent := Result.LuminousIntensityExponent +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.LuminousIntensityExponent);\n    END_REPEAT;  \n    RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcDimensionsForSiUnit\n(n : IfcSiUnitName )     : IfcDimensionalExponents;\n  CASE n OF\n    METRE          : RETURN (IfcDimensionalExponents\n                             (1, 0, 0, 0, 0, 0, 0));\n    SQUARE_METRE   : RETURN (IfcDimensionalExponents\n                             (2, 0, 0, 0, 0, 0, 0));\n    CUBIC_METRE    : RETURN (IfcDimensionalExponents\n                             (3, 0, 0, 0, 0, 0, 0));\n    GRAM           : RETURN (IfcDimensionalExponents\n                             (0, 1, 0, 0, 0, 0, 0));\n    SECOND         : RETURN (IfcDimensionalExponents\n                             (0, 0, 1, 0, 0, 0, 0));\n    AMPERE         : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 1, 0, 0, 0));\n    KELVIN         : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 1, 0, 0));\n    MOLE           : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 0, 1, 0));\n    CANDELA        : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 0, 0, 1));\n    RADIAN         : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 0, 0, 0));\n    STERADIAN      : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 0, 0, 0));\n    HERTZ          : RETURN (IfcDimensionalExponents\n                             (0, 0, -1, 0, 0, 0, 0));\n    NEWTON         : RETURN (IfcDimensionalExponents\n                             (1, 1, -2, 0, 0, 0, 0));\n    PASCAL         : RETURN (IfcDimensionalExponents\n                             (-1, 1, -2, 0, 0, 0, 0));\n    JOULE          : RETURN (IfcDimensionalExponents\n                             (2, 1, -2, 0, 0, 0, 0));\n    WATT           : RETURN (IfcDimensionalExponents\n                             (2, 1, -3, 0, 0, 0, 0));\n    COULOMB        : RETURN (IfcDimensionalExponents\n                             (0, 0, 1, 1, 0, 0, 0));\n    VOLT           : RETURN (IfcDimensionalExponents\n                             (2, 1, -3, -1, 0, 0, 0));\n    FARAD          : RETURN (IfcDimensionalExponents\n                             (-2, -1, 4, 2, 0, 0, 0));\n    OHM            : RETURN (IfcDimensionalExponents\n                             (2, 1, -3, -2, 0, 0, 0));\n    SIEMENS        : RETURN (IfcDimensionalExponents\n                             (-2, -1, 3, 2, 0, 0, 0));\n    WEBER          : RETURN (IfcDimensionalExponents\n                             (2, 1, -2, -1, 0, 0, 0));\n    TESLA          : RETURN (IfcDimensionalExponents\n                             (0, 1, -2, -1, 0, 0, 0));\n    HENRY          : RETURN (IfcDimensionalExponents\n                             (2, 1, -2, -2, 0, 0, 0));\n    DEGREE_CELSIUS : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 1, 0, 0));\n    LUMEN          : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 0, 0, 1));\n    LUX            : RETURN (IfcDimensionalExponents\n                             (-2, 0, 0, 0, 0, 0, 1));\n    BECQUEREL      : RETURN (IfcDimensionalExponents\n                             (0, 0, -1, 0, 0, 0, 0));\n    GRAY           : RETURN (IfcDimensionalExponents\n                             (2, 0, -2, 0, 0, 0, 0));\n    SIEVERT        : RETURN (IfcDimensionalExponents\n                             (2, 0, -2, 0, 0, 0, 0));\n    OTHERWISE      : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 0, 0, 0));\n  END_CASE;\nEND_FUNCTION;\n\nFUNCTION IfcDotProduct\n(Arg1, Arg2 : IfcDirection) \n    : REAL;\nLOCAL\n  Scalar : REAL;\n  Vec1, Vec2 : IfcDirection;\n  Ndim   : INTEGER;\nEND_LOCAL;\n\n  IF NOT EXISTS (Arg1) OR NOT EXISTS (Arg2) THEN\n    Scalar := ?;\n  ELSE\n    IF (Arg1.Dim <> Arg2.Dim) THEN\n      Scalar := ?;\n    ELSE\n      BEGIN\n        Vec1 := IfcNormalise(Arg1);\n        Vec2 := IfcNormalise(Arg2);\n        Ndim := Arg1.Dim;\n        Scalar := 0.0;\n        REPEAT i := 1 TO Ndim;\n          Scalar := Scalar + Vec1.DirectionRatios[i]*Vec2.DirectionRatios[i];\n        END_REPEAT;\n      END;\n    END_IF;\n  END_IF;\n  RETURN (Scalar);\nEND_FUNCTION;\n\nFUNCTION IfcFirstProjAxis\n(ZAxis, Arg : IfcDirection) : IfcDirection;\nLOCAL\n  XAxis : IfcDirection;\n  V     : IfcDirection;\n  Z     : IfcDirection;\n  XVec  : IfcVector;\nEND_LOCAL;\n\n  IF (NOT EXISTS(ZAxis)) THEN\n    RETURN (?) ;\n  ELSE\n    Z := IfcNormalise(ZAxis);\n    IF NOT EXISTS(Arg) THEN\n      IF (Z.DirectionRatios <> [1.0,0.0,0.0]) THEN\n        V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0,0.0]);\n      ELSE\n        V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]);\n      END_IF;\n    ELSE\n      IF (Arg.Dim <> 3) THEN\n        RETURN (?) ;\n      END_IF;\n      IF ((IfcCrossProduct(Arg,Z).Magnitude) = 0.0) THEN\n        RETURN (?);\n      ELSE\n        V := IfcNormalise(Arg);\n      END_IF;\n    END_IF;\n    XVec  := IfcScalarTimesVector(IfcDotProduct(V, Z), Z);\n    XAxis := IfcVectorDifference(V, XVec).Orientation;\n    XAxis := IfcNormalise(XAxis);\n  END_IF;\n  RETURN(XAxis);\nEND_FUNCTION;\n\nFUNCTION IfcGetBasisSurface\n(C : IfcCurveOnSurface) : SET[0:2] OF IfcSurface;\n\n  LOCAL\n    Surfs : SET[0:2] OF IfcSurface;\n    N : INTEGER;\n  END_LOCAL;\n\n  Surfs := [];\n  IF 'IFC4.IFCPCURVE' IN TYPEOF (C) THEN\n    Surfs := [C\\IfcPCurve.BasisSurface];\n  ELSE\n    IF 'IFC4.IFCSURFACECURVE' IN TYPEOF (C) THEN\n      N := SIZEOF(C\\IfcSurfaceCurve.AssociatedGeometry);\n      REPEAT i := 1 TO N;\n      Surfs := Surfs + IfcAssociatedSurface(C\\IfcSurfaceCurve.AssociatedGeometry[i]);\n      END_REPEAT;\n    END_IF;\n  END_IF;\n  IF 'IFC4.IFCCOMPOSITECURVEONSURFACE' IN TYPEOF (C) THEN\n\n    (* For an IfcCompositeCurveOnSurface the BasisSurface is the intersection of the BasisSurface of all the segments. *)\n\n    N := SIZEOF(C\\IfcCompositeCurve.Segments);\n    Surfs := IfcGetBasisSurface(C\\IfcCompositeCurve.Segments[1].ParentCurve);\n    IF N > 1 THEN\n      REPEAT i := 2 TO N;\n        Surfs := Surfs * IfcGetBasisSurface(C\\IfcCompositeCurve.Segments[1].ParentCurve);\n      END_REPEAT;\n    END_IF;\n  END_IF;\n  RETURN(Surfs);\nEND_FUNCTION;\n\nFUNCTION IfcListToArray\n(Lis : LIST [0:?] OF GENERIC : T;\n       Low,U : INTEGER) : ARRAY OF GENERIC : T;\n   LOCAL\n     N   : INTEGER;\n     Res : ARRAY [Low:U] OF GENERIC : T;\n   END_LOCAL;\n      \n   N := SIZEOF(Lis);\n   IF (N <> (U-Low +1)) THEN\n     RETURN(?);\n   ELSE\n     Res := [Lis[1] : N];\n     REPEAT i := 2 TO N;\n       Res[Low+i-1] := Lis[i];\n     END_REPEAT;\n     RETURN(Res);\n   END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcLoopHeadToTail\n(ALoop : IfcEdgeLoop) : LOGICAL;\n   LOCAL\n     N : INTEGER;\n     P : LOGICAL := TRUE;\n   END_LOCAL;\n     \n     N := SIZEOF (ALoop.EdgeList);\n     REPEAT i := 2 TO N;\n       P := P AND (ALoop.EdgeList[i-1].EdgeEnd :=:\n                   ALoop.EdgeList[i].EdgeStart);\n     END_REPEAT;     \n     RETURN (P);\nEND_FUNCTION;\n\nFUNCTION IfcMakeArrayOfArray\n(Lis : LIST[1:?] OF LIST [1:?] OF GENERIC : T;\n Low1, U1, Low2, U2 : INTEGER):\nARRAY [Low1:U1] OF ARRAY [Low2:U2] OF GENERIC : T;\n\n  LOCAL\n    Res : ARRAY[Low1:U1] OF ARRAY [Low2:U2] OF GENERIC : T;\n  END_LOCAL;\n\n  (* Check input dimensions for consistency *)\n  IF (U1-Low1+1) <> SIZEOF(Lis) THEN\n    RETURN (?);\n  END_IF;\n  IF (U2 - Low2 + 1 ) <> SIZEOF(Lis[1]) THEN\n    RETURN (?) ;\n  END_IF;\n\n  (* Initialise Res with values from Lis[1] *)\n  Res := [IfcListToArray(Lis[1], Low2, U2) : (U1-Low1 + 1)];\n  REPEAT i := 2 TO HIINDEX(Lis);\n    IF (U2-Low2+1) <> SIZEOF(Lis[i]) THEN\n      RETURN (?);\n    END_IF;\n    Res[Low1+i-1] := IfcListToArray(Lis[i], Low2, U2);\n  END_REPEAT;\n  RETURN (Res);\nEND_FUNCTION;\n\nFUNCTION IfcMlsTotalThickness\n(LayerSet : IfcMaterialLayerSet) : IfcLengthMeasure;\n  LOCAL\n    Max : IfcLengthMeasure := LayerSet.MaterialLayers[1].LayerThickness;    \n  END_LOCAL;\n\n  IF SIZEOF(LayerSet.MaterialLayers) > 1 THEN\n    REPEAT i := 2 TO HIINDEX(LayerSet.MaterialLayers);\n       Max := Max + LayerSet.MaterialLayers[i].LayerThickness;\n    END_REPEAT;\n  END_IF;\n  RETURN (Max);\nEND_FUNCTION;\n\nFUNCTION IfcNormalise\n(Arg : IfcVectorOrDirection) \n    : IfcVectorOrDirection;\nLOCAL\n  Ndim : INTEGER;\n  V    : IfcDirection\n         := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]); \n  Vec  : IfcVector \n         := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (\n            IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]), 1.);\n  Mag  : REAL;\n  Result : IfcVectorOrDirection\n         := V;\nEND_LOCAL;\n\n  IF NOT EXISTS (Arg) THEN\n    RETURN (?);\n  ELSE\n    IF 'IFC4.IFCVECTOR' IN TYPEOF(Arg) THEN\n      BEGIN\n        Ndim := Arg\\IfcVector.Dim;\n\tV.DirectionRatios := Arg\\IfcVector.Orientation.DirectionRatios;\n        Vec.Magnitude := Arg\\IfcVector.Magnitude;\n\tVec.Orientation := V;\n        IF Arg\\IfcVector.Magnitude = 0.0 THEN\n          RETURN(?);\n        ELSE\n          Vec.Magnitude := 1.0;\n        END_IF;\n      END;\n    ELSE\n      BEGIN\n        Ndim := Arg\\IfcDirection.Dim;\n        V.DirectionRatios := Arg\\IfcDirection.DirectionRatios;\n      END;\n    END_IF;\n\n    Mag := 0.0;\n      REPEAT i := 1 TO Ndim;\n        Mag := Mag + V.DirectionRatios[i]*V.DirectionRatios[i];\n      END_REPEAT;\n    IF Mag > 0.0 THEN\n      Mag := SQRT(Mag);\n      REPEAT i := 1 TO Ndim;\n        V.DirectionRatios[i] := V.DirectionRatios[i]/Mag;\n      END_REPEAT;\n      IF 'IFC4.IFCVECTOR' IN TYPEOF(arg) THEN\n        Vec.Orientation := V;\n        Result := Vec;\n      ELSE\n        Result := V;\n      END_IF;\n    ELSE\n      RETURN(?);\n    END_IF;\n  END_IF;\n  RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcOrthogonalComplement\n(Vec : IfcDirection) \n    : IfcDirection;\nLOCAL\n  Result : IfcDirection ;\nEND_LOCAL;\n  IF NOT EXISTS (Vec) OR (Vec.Dim <> 2) THEN\n    RETURN(?);\n  ELSE\n    Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([-Vec.DirectionRatios[2], Vec.DirectionRatios[1]]);\n    RETURN(Result);\n  END_IF;\nEND_FUNCTION;\n\nFUNCTION IfcPathHeadToTail\n(APath : IfcPath) : LOGICAL;\n   LOCAL\n     N : INTEGER := 0;\n     P : LOGICAL := UNKNOWN;\n   END_LOCAL;\n     N := SIZEOF (APath.EdgeList);\n   REPEAT i := 2 TO N;\n      P := P AND (APath.EdgeList[i-1].EdgeEnd :=:\n                  APath.EdgeList[i].EdgeStart);\n   END_REPEAT;\n   RETURN (P);\nEND_FUNCTION;\n\nFUNCTION IfcPointListDim\n(PointList : IfcCartesianPointList)\n           : IfcDimensionCount;\n\n  IF ('IFC4.IFCCARTESIANPOINTLIST2D' IN TYPEOF(PointList))\n    THEN RETURN(2);\n  END_IF;\t\t   \n  IF ('IFC4.IFCCARTESIANPOINTLIST3D' IN TYPEOF(PointList))\n    THEN RETURN(3);\n  END_IF;\t\t   \n  RETURN (?);\nEND_FUNCTION;\n\nFUNCTION IfcSameAxis2Placement\n(ap1, ap2 : IfcAxis2Placement; Epsilon : REAL)\n  : LOGICAL ;\n\n  RETURN (IfcSameDirection(ap1.P[1],ap2.P[1],Epsilon) AND\n          IfcSameDirection(ap1.P[2],ap2.P[2],Epsilon) AND\n          IfcSameCartesianPoint(ap1.Location,ap1.Location,Epsilon));\nEND_FUNCTION;\n\nFUNCTION IfcSameCartesianPoint\n(cp1, cp2 : IfcCartesianPoint; Epsilon : REAL)\n\t: LOGICAL;\n  \n  LOCAL\n    cp1x : REAL := cp1.Coordinates[1];\n    cp1y : REAL := cp1.Coordinates[2];\n    cp1z : REAL := 0;\n    cp2x : REAL := cp2.Coordinates[1];\n    cp2y : REAL := cp2.Coordinates[2];\n    cp2z : REAL := 0;\n  END_LOCAL;\n\n  IF (SIZEOF(cp1.Coordinates) > 2) THEN\n    cp1z := cp1.Coordinates[3];\n  END_IF;\n\n  IF (SIZEOF(cp2.Coordinates) > 2) THEN\n    cp2z := cp2.Coordinates[3];\n  END_IF;\n\n  RETURN (IfcSameValue(cp1x,cp2x,Epsilon) AND\n          IfcSameValue(cp1y,cp2y,Epsilon) AND\n          IfcSameValue(cp1z,cp2z,Epsilon));\nEND_FUNCTION;\n\nFUNCTION IfcSameDirection\n(dir1, dir2 : IfcDirection; Epsilon : REAL)\n\t: LOGICAL;\n  LOCAL\n    dir1x : REAL := dir1.DirectionRatios[1];\n    dir1y : REAL := dir1.DirectionRatios[2];\n    dir1z : REAL := 0;\n    dir2x : REAL := dir2.DirectionRatios[1];\n    dir2y : REAL := dir2.DirectionRatios[2];\n    dir2z : REAL := 0;\n  END_LOCAL;\n\n  IF (SIZEOF(dir1.DirectionRatios) > 2) THEN\n    dir1z := dir1.DirectionRatios[3];\n  END_IF;\n\n  IF (SIZEOF(dir2.DirectionRatios) > 2) THEN\n    dir2z := dir2.DirectionRatios[3];\n  END_IF;\n  \n  RETURN (IfcSameValue(dir1x,dir2x,Epsilon) AND\n          IfcSameValue(dir1y,dir2y,Epsilon) AND\n          IfcSameValue(dir1z,dir2z,Epsilon));\nEND_FUNCTION;\n\nFUNCTION IfcSameValidPrecision\n(Epsilon1, Epsilon2 : REAL) : LOGICAL ;\n  LOCAL\n    ValidEps1, ValidEps2 : REAL;\n    DefaultEps           : REAL := 0.000001;\n    DerivationOfEps      : REAL := 1.001;\n    UpperEps             : REAL := 1.0;\n  END_LOCAL;\n  \n    ValidEps1 := NVL(Epsilon1, DefaultEps);\n    ValidEps2 := NVL(Epsilon2, DefaultEps);\n    RETURN ((0.0 < ValidEps1) AND (ValidEps1 <= (DerivationOfEps * ValidEps2)) AND \n            (ValidEps2 <= (DerivationOfEps * ValidEps1)) AND (ValidEps2 < UpperEps));\nEND_FUNCTION;\n\nFUNCTION IfcSameValue\n(Value1, Value2 : REAL; Epsilon : REAL)\n\t: LOGICAL;\n  LOCAL\n    ValidEps    : REAL;\n    DefaultEps  : REAL := 0.000001;\n  END_LOCAL;\n  \n  ValidEps := NVL(Epsilon, DefaultEps);\n  RETURN ((Value1 + ValidEps > Value2) AND (Value1 < Value2 + ValidEps));\nEND_FUNCTION;\n\nFUNCTION IfcScalarTimesVector\n(Scalar : REAL; Vec : IfcVectorOrDirection)\n    : IfcVector;\nLOCAL\n  V : IfcDirection;\n  Mag : REAL;\n  Result : IfcVector;\nEND_LOCAL;\n\n  IF NOT EXISTS (Scalar) OR NOT EXISTS (Vec) THEN\n    RETURN (?) ;\n  ELSE\n    IF 'IFC4.IFCVECTOR' IN TYPEOF (Vec) THEN\n      V := Vec\\IfcVector.Orientation;\n      Mag := Scalar * Vec\\IfcVector.Magnitude;\n    ELSE\n      V := Vec;\n      Mag := Scalar;\n    END_IF;\n    IF (Mag < 0.0 ) THEN\n      REPEAT i := 1 TO SIZEOF(V.DirectionRatios);\n        V.DirectionRatios[i] := -V.DirectionRatios[i];\n      END_REPEAT;\n      Mag := -Mag;\n    END_IF;\n    Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(IfcNormalise(V), Mag);\n  END_IF;\n  RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcSecondProjAxis\n(ZAxis, XAxis, Arg: IfcDirection) \n    : IfcDirection;\nLOCAL\n  YAxis : IfcVector;\n  V     : IfcDirection;\n  Temp  : IfcVector;\nEND_LOCAL;\n\n  IF NOT EXISTS(Arg) THEN\n    V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]);\n  ELSE\n    V := Arg;\n  END_IF;\n  Temp  := IfcScalarTimesVector(IfcDotProduct(V, ZAxis), ZAxis);\n  YAxis := IfcVectorDifference(V, Temp);\n  Temp  := IfcScalarTimesVector(IfcDotProduct(V, XAxis), XAxis);\n  YAxis := IfcVectorDifference(YAxis, Temp);\n  YAxis := IfcNormalise(YAxis);\n  RETURN(YAxis.Orientation);\nEND_FUNCTION;\n\nFUNCTION IfcShapeRepresentationTypes\n(RepType : IfcLabel; Items : SET OF IfcRepresentationItem) : LOGICAL;\n    \n    LOCAL\n      Count : INTEGER := 0;\n    END_LOCAL;\n\n    CASE RepType OF \n    'Point' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCPOINT' IN TYPEOF(temp))));\n      END;\n\n    'PointCloud' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCCARTESIANPOINTLIST3D' IN TYPEOF(temp))));\n      END;\n\n    'Curve' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCCURVE' IN TYPEOF(temp))));\n      END;\n\n    'Curve2D' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCCURVE' IN TYPEOF(temp)) \n                 AND (temp\\IfcCurve.Dim = 2)));\n      END;\n\n    'Curve3D' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCCURVE' IN TYPEOF(temp)) \n                 AND (temp\\IfcCurve.Dim = 3)));\n      END;\n\n    'Surface' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCSURFACE' IN TYPEOF(temp))));\n      END;\n\n    'Surface2D' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCSURFACE' IN TYPEOF(temp)) \n                 AND (temp\\IfcSurface.Dim = 2)));\n      END;\n\n    'Surface3D' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCSURFACE' IN TYPEOF(temp)) \n                 AND (temp\\IfcSurface.Dim = 3)));\n      END;\n\n    'FillArea' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCANNOTATIONFILLAREA' IN TYPEOF(temp))));\n      END;\n\n    'Text' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCTEXTLITERAL' IN TYPEOF(temp))));\n      END;\n\n    'AdvancedSurface' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | 'IFC4.IFCBSPLINESURFACE' IN TYPEOF(temp)));\n      END;\n\n    'Annotation2D' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | (\n                  SIZEOF(TYPEOF(temp) * [\n                   'IFC4.IFCPOINT',\n                   'IFC4.IFCCURVE',\n                   'IFC4.IFCGEOMETRICCURVESET',\n                   'IFC4.IFCANNOTATIONFILLAREA',\n                   'IFC4.IFCTEXTLITERAL']) = 1)\n                 ));\n      END;\n\n    'GeometricSet' : \n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCGEOMETRICSET' IN TYPEOF(temp))\n                 OR ('IFC4.IFCPOINT' IN TYPEOF(temp))\n                 OR ('IFC4.IFCCURVE' IN TYPEOF(temp))\n                 OR ('IFC4.IFCSURFACE' IN TYPEOF(temp))));\n      END;\n\n    'GeometricCurveSet' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCGEOMETRICCURVESET' IN TYPEOF(temp))\n                 OR ('IFC4.IFCGEOMETRICSET' IN TYPEOF(temp))\n                 OR ('IFC4.IFCPOINT' IN TYPEOF(temp))\n                 OR ('IFC4.IFCCURVE' IN TYPEOF(temp))));\n         REPEAT i:=1 TO HIINDEX(Items);  \n           IF ('IFC4.IFCGEOMETRICSET' IN TYPEOF(Items[i]))\n           THEN\n             IF (SIZEOF(QUERY(temp <* Items[i]\\IfcGeometricSet.Elements | 'IFC4.IFCSURFACE' IN TYPEOF(temp))) > 0)\n             THEN\n               Count := Count - 1;\n             END_IF;\n           END_IF;\n         END_REPEAT;\n      END;\n\n    'Tessellation' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | 'IFC4.IFCTESSELLATEDITEM' IN TYPEOF(temp)));\n      END;\n\n    'SurfaceOrSolidModel' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                   'IFC4.IFCTESSELLATEDITEM',\n                   'IFC4.IFCSHELLBASEDSURFACEMODEL',\n                   'IFC4.IFCFACEBASEDSURFACEMODEL',\n                   'IFC4.IFCSOLIDMODEL'] * TYPEOF(temp)) >= 1\n                 ));      \n      END;\n\n    'SurfaceModel' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                   'IFC4.IFCTESSELLATEDITEM',\n                   'IFC4.IFCSHELLBASEDSURFACEMODEL',\n                   'IFC4.IFCFACEBASEDSURFACEMODEL'] * TYPEOF(temp)) >= 1\n                 ));      \n      END;\n\n    'SolidModel' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCSOLIDMODEL' IN TYPEOF(temp))));            \n      END;\n\n    'SweptSolid' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | (SIZEOF([\n                   'IFC4.IFCEXTRUDEDAREASOLID',\n                   'IFC4.IFCREVOLVEDAREASOLID'] * TYPEOF(temp)) >= 1\n                   ) AND (SIZEOF([\n                   'IFC4.IFCEXTRUDEDAREASOLIDTAPERED',\n                   'IFC4.IFCREVOLVEDAREASOLIDTAPERED'] * TYPEOF(temp)) = 0\n                   )\n                 ));                             \n      END;\n\n    'AdvancedSweptSolid' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                   'IFC4.IFCSWEPTAREASOLID',\n                   'IFC4.IFCSWEPTDISKSOLID'] *  TYPEOF(temp)) >= 1\n                 ));      \n      END;\n\n    'CSG' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                   'IFC4.IFCBOOLEANRESULT',\n                   'IFC4.IFCCSGPRIMITIVE3D',\n                   'IFC4.IFCCSGSOLID'] *  TYPEOF(temp)) >= 1\n                 ));            \n      END;\n\n    'Clipping' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                   'IFC4.IFCCSGSOLID',\n                   'IFC4.IFCBOOLEANCLIPPINGRESULT'] * TYPEOF(temp)) >= 1\n                 )); \n      END;\n\n    'Brep' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCFACETEDBREP' IN TYPEOF(temp))));      \n      END;\n\n    'AdvancedBrep' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCMANIFOLDSOLIDBREP' IN TYPEOF(temp))));      \n      END;\n\n    'BoundingBox' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCBOUNDINGBOX' IN TYPEOF(temp))));\n        IF (SIZEOF(Items) > 1)\n        THEN\n          Count := 0;\n        END_IF;   \n      END;\n\n    'SectionedSpine' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCSECTIONEDSPINE' IN TYPEOF(temp))));      \n      END;\n\n    'LightSource' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCLIGHTSOURCE' IN TYPEOF(temp))));      \n      END;\n\n    'MappedRepresentation' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4.IFCMAPPEDITEM' IN TYPEOF(temp))));  \n      END;\n\n     OTHERWISE : RETURN(?);\n    END_CASE;\n    RETURN (Count = SIZEOF(Items));\nEND_FUNCTION;\n\nFUNCTION IfcSurfaceWeightsPositive\n( B: IfcRationalBSplineSurfaceWithKnots) \n: BOOLEAN;\n\n  LOCAL\n    Result : BOOLEAN := TRUE;\n    Weights : ARRAY [ 0 : B\\IfcBSplineSurface.UUpper ] OF ARRAY [ 0 : B\\IfcBSplineSurface.VUpper ] OF REAL := B.Weights;\n  END_LOCAL;\n\n  REPEAT i := 0 TO B\\IfcBSplineSurface.UUpper;\n    REPEAT j := 0 TO B\\IfcBSplineSurface.VUpper;\n      IF (Weights[i][j] <= 0.0) THEN\n        Result := FALSE;\n        RETURN(Result);\n      END_IF;\n    END_REPEAT;\n  END_REPEAT;\n  RETURN(Result);\nEND_FUNCTION;\n\nFUNCTION IfcTaperedSweptAreaProfiles\n(StartArea, EndArea : IfcProfileDef)\n : LOGICAL;\n\nLOCAL\n   Result : LOGICAL := FALSE;\nEND_LOCAL;\n   \nIF ('IFC4.IFCPARAMETERIZEDPROFILEDEF' IN TYPEOF(StartArea)) THEN\n   IF ('IFC4.IFCDERIVEDPROFILEDEF' IN TYPEOF(EndArea)) THEN\n      Result := (StartArea :=: EndArea\\IfcDerivedProfileDef.ParentProfile);\n   ELSE\n      Result := (TYPEOF(StartArea) = TYPEOF(EndArea));\n   END_IF;\nELSE\n   IF ('IFC4.IFCDERIVEDPROFILEDEF' IN TYPEOF(EndArea)) THEN\n      Result := (StartArea :=: EndArea\\IfcDerivedProfileDef.ParentProfile);\n   ELSE\n      Result := FALSE;\n   END_IF;\nEND_IF;\n\nRETURN(Result);\nEND_FUNCTION;\n\nFUNCTION IfcTopologyRepresentationTypes\n(RepType : IfcLabel; Items : SET OF IfcRepresentationItem) : LOGICAL;\n    \n    LOCAL\n      Count : INTEGER := 0;\n    END_LOCAL;\n\n    CASE RepType OF \n    'Vertex' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | \n                  ('IFC4.IFCVERTEX' IN TYPEOF(temp))));\n      END;\n    'Edge' : \n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | \n                  ('IFC4.IFCEDGE' IN TYPEOF(temp))));\n      END;\n    'Path' : \n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | \n                  ('IFC4.IFCPATH' IN TYPEOF(temp))));\n      END;\n    'Face' : \n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | \n                  ('IFC4.IFCFACE' IN TYPEOF(temp))));\n      END;\n    'Shell' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | \n                  ('IFC4.IFCOPENSHELL' IN TYPEOF(temp))\n                    OR ('IFC4.IFCCLOSEDSHELL' IN TYPEOF(temp))));\n      END;\n    'Undefined': RETURN(TRUE);\n     OTHERWISE : RETURN(?);\n    END_CASE;\n    RETURN (Count = SIZEOF(Items));\nEND_FUNCTION;\n\nFUNCTION IfcUniqueDefinitionNames\n(Relations : SET [1:?] OF IfcRelDefinesByProperties)\n:LOGICAL;\n\nLOCAL\n  Definition : IfcPropertySetDefinitionSelect;\n  DefinitionSet : IfcPropertySetDefinitionSet;\n  Properties : SET OF IfcPropertySetDefinition := [];\n  Result : LOGICAL;\nEND_LOCAL;\n\nIF SIZEOF(Relations) = 0 THEN\n  RETURN(TRUE);\nEND_IF;\n\nREPEAT i:=1 TO HIINDEX(Relations);\n  Definition := Relations[i].RelatingPropertyDefinition;\n  IF 'IFC4.IFCPROPERTYSETDEFINITION' IN TYPEOF(Definition) THEN\n    Properties := Properties + Definition;\n  ELSE \n    IF 'IFC4.IFCPROPERTYSETDEFINITIONSET' IN TYPEOF(Definition) THEN\n      BEGIN\n        DefinitionSet := Definition;\n        REPEAT j:= 1 TO HIINDEX(DefinitionSet);\n          Properties := Properties + DefinitionSet[j];\n        END_REPEAT;\n      END;\n\tEND_IF;\n  END_IF;\nEND_REPEAT;\n\nResult := IfcUniquePropertySetNames(Properties);\nRETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcUniquePropertyName\n(Properties : SET [1:?] OF IfcProperty)\n :LOGICAL;\n\n LOCAL\n   Names : SET OF IfcIdentifier := [];\n END_LOCAL;\n\n REPEAT i:=1 TO HIINDEX(Properties);\n   Names := Names + Properties[i].Name;\n END_REPEAT;\n\n RETURN (SIZEOF(Names) = SIZEOF(Properties));\nEND_FUNCTION;\n\nFUNCTION IfcUniquePropertySetNames\n(Properties : SET [1:?] OF IfcPropertySetDefinition)\n:LOGICAL;\n\nLOCAL\n  Names : SET OF IfcLabel := [];\n  Unnamed : INTEGER := 0;\nEND_LOCAL;\n\nREPEAT i:=1 TO HIINDEX(Properties);\n  IF 'IFC4.IFCPROPERTYSET' IN TYPEOF(Properties[i]) THEN\n    Names := Names + Properties[i]\\IfcRoot.Name;\n  ELSE\n    Unnamed := Unnamed + 1;\n  END_IF;\nEND_REPEAT;\n\nRETURN (SIZEOF(Names) + Unnamed = SIZEOF(Properties));\nEND_FUNCTION;\n\nFUNCTION IfcUniquePropertyTemplateNames\n(Properties : SET [1:?] OF IfcPropertyTemplate)\n:LOGICAL;\n\nLOCAL\n  Names : SET OF IfcLabel := [];\nEND_LOCAL;\n\nREPEAT i:=1 TO HIINDEX(Properties);\n  Names := Names + Properties[i].Name;\nEND_REPEAT;\nRETURN (SIZEOF(Names) = SIZEOF(Properties));\nEND_FUNCTION;\n\nFUNCTION IfcUniqueQuantityNames\n(Properties : SET [1:?] OF IfcPhysicalQuantity)\n:LOGICAL;\n\nLOCAL\n  Names : SET OF IfcLabel := [];\nEND_LOCAL;\n\nREPEAT i:=1 TO HIINDEX(Properties);\n  Names := Names + Properties[i].Name;\nEND_REPEAT;\nRETURN (SIZEOF(Names) = SIZEOF(Properties));\nEND_FUNCTION;\n\nFUNCTION IfcVectorDifference\n(Arg1, Arg2 : IfcVectorOrDirection)\n    : IfcVector;\nLOCAL\n  Result : IfcVector;\n  Res, Vec1, Vec2 : IfcDirection;\n  Mag, Mag1, Mag2 : REAL;\n  Ndim : INTEGER;\nEND_LOCAL;\n\n  IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN\n    RETURN (?) ;\n  ELSE\n    BEGIN\n      IF 'IFC4.IFCVECTOR' IN TYPEOF(Arg1) THEN\n        Mag1 := Arg1\\IfcVector.Magnitude;\n        Vec1 := Arg1\\IfcVector.Orientation;\n      ELSE\n        Mag1 := 1.0;\n        Vec1 := Arg1;\n      END_IF;\n      IF 'IFC4.IFCVECTOR' IN TYPEOF(Arg2) THEN\n        Mag2 := Arg2\\IfcVector.Magnitude;\n        Vec2 := Arg2\\IfcVector.Orientation;\n      ELSE\n        Mag2 := 1.0;\n        Vec2 := Arg2;\n      END_IF;\n      Vec1 := IfcNormalise (Vec1);\n      Vec2 := IfcNormalise (Vec2);\n      Ndim := SIZEOF(Vec1.DirectionRatios);\n      Mag  := 0.0;\n      Res  := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0:Ndim]);\n\n      REPEAT i := 1 TO Ndim;\n        Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] - Mag2*Vec2.DirectionRatios[i];\n        Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]);\n      END_REPEAT;\n\n      IF (Mag > 0.0 ) THEN\n        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag));\n      ELSE\n        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0);\n      END_IF;\n    END;\n  END_IF;\n  RETURN (Result);\nEND_FUNCTION;\n\nFUNCTION IfcVectorSum\n(Arg1, Arg2 : IfcVectorOrDirection) \n    : IfcVector;\nLOCAL\n  Result : IfcVector;\n  Res, Vec1, Vec2 : IfcDirection;\n  Mag, Mag1, Mag2 : REAL;\n  Ndim : INTEGER;\nEND_LOCAL;\n\n  IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN\n    RETURN (?) ;\n  ELSE\n    BEGIN\n      IF 'IFC4.IFCVECTOR' IN TYPEOF(Arg1) THEN\n        Mag1 := Arg1\\IfcVector.Magnitude;\n        Vec1 := Arg1\\IfcVector.Orientation;\n      ELSE\n        Mag1 := 1.0;\n        Vec1 := Arg1;\n      END_IF;\n      IF 'IFC4.IFCVECTOR' IN TYPEOF(Arg2) THEN\n        Mag2 := Arg2\\IfcVector.Magnitude;\n        Vec2 := Arg2\\IfcVector.Orientation;\n      ELSE\n        Mag2 := 1.0;\n        Vec2 := Arg2;\n      END_IF;\n      Vec1 := IfcNormalise (Vec1);\n      Vec2 := IfcNormalise (Vec2);\n      Ndim := SIZEOF(Vec1.DirectionRatios);\n      Mag  := 0.0;\n      Res  := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0:Ndim]);\n\n      REPEAT i := 1 TO Ndim;\n        Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] + Mag2*Vec2.DirectionRatios[i];\n        Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]);\n      END_REPEAT;\n\n      IF (Mag > 0.0 ) THEN\n        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag));\n      ELSE\n        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0);\n      END_IF;\n    END;\n  END_IF;\n  RETURN (Result);\nEND_FUNCTION;\n\nRULE IfcRepresentationContextSameWCS FOR\n\t(IfcGeometricRepresentationContext);\nLOCAL\n  IsDifferent  : LOGICAL := FALSE;\nEND_LOCAL;\n  IF (SIZEOF(IfcGeometricRepresentationContext) > 1)\n  THEN\n    REPEAT i := 2 TO HIINDEX(IfcGeometricRepresentationContext);\n      IF (IfcGeometricRepresentationContext[1].WorldCoordinateSystem :<>: IfcGeometricRepresentationContext[i].WorldCoordinateSystem)\n      THEN\n        IsDifferent := (NOT(IfcSameValidPrecision(IfcGeometricRepresentationContext[1].Precision,\n                                                  IfcGeometricRepresentationContext[i].Precision)))\n                    OR (NOT(IfcSameAxis2Placement(IfcGeometricRepresentationContext[1].WorldCoordinateSystem,\n                                                  IfcGeometricRepresentationContext[i].WorldCoordinateSystem,\n                                                  IfcGeometricRepresentationContext[1].Precision)));\n        IF (IsDifferent = TRUE) THEN\n          ESCAPE;\n        END_IF;\n      END_IF;\n    END_REPEAT;\n  END_IF;\n    WHERE\n      WR1 : IsDifferent = FALSE;\nEND_RULE;\n\nRULE IfcSingleProjectInstance FOR\n\t(IfcProject);\n\n    WHERE\n      WR1 : SIZEOF(IfcProject) <= 1;\nEND_RULE;\n\nEND_SCHEMA;\n"
  },
  {
    "path": "Source/RevitIFCTools/IFC4.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:ifc=\"http://www.buildingsmart-tech.org/ifc/IFC4/Add2TC1\" targetNamespace=\"http://www.buildingsmart-tech.org/ifc/IFC4/Add2TC1\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\" >\n<!-- created with IFCDOC 11.7 at buildingsmart-tech.org -->\n\n<!--\nCopyright by:\nbuildingSMART International Limited, 1996-2017\n\nAny technical documentation made available by buildingSMART International Limited\nis the copyrighted work of buildingSMART International Limited and is owned by the \nbuildingSMART International Limited. It may be photocopied, used in software development, \nor translated into another computer language without prior written consent from \nbuildingSMART International Limited provided that full attribution is given. \nPrior written consent is required if changes are made to the technical specification.\n\nThis material is delivered to you as is and buildingSMART International Limited makes \nno warranty of any kind with regard to it, including, but not limited to, the implied \nwarranties as to its accuracy or fitness for a particular purpose. Any use of the \ntechnical documentation or the information contained therein is at the risk of the user. \nDocumentation may include technical or other inaccuracies or typographical errors. \nbuildingSMART International Limited shall not be liable for errors contained therein or \nfor incidental consequential damages in connection with the furnishing, performance or use \nof the material. The information contained in this document is subject to change without notice.\n-->\n\n\t<!-- root element declaration (for SCHEMA definitions) -->\n\t<xs:element name=\"uos\" type=\"ifc:uos\" abstract=\"true\"/>\n    <xs:simpleType name=\"Seq-anyURI\">\n        <xs:list itemType=\"xs:anyURI\"/>\n    </xs:simpleType>\n\t<xs:complexType name=\"uos\" abstract=\"true\">\n\t\t<xs:sequence>\n\t\t\t<xs:element name=\"header\" minOccurs=\"0\">\n\t\t\t\t<xs:complexType>\n\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t<xs:element name=\"name\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"time_stamp\" type=\"xs:dateTime\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"author\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"organization\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"preprocessor_version\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"originating_system\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"authorization\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"documentation\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t</xs:sequence>\n\t\t\t\t</xs:complexType>\n\t\t\t</xs:element>\n\t\t</xs:sequence>\n\t\t<xs:attribute name=\"id\" type=\"xs:ID\" use=\"optional\"/>\n\t\t<xs:attribute name=\"express\" type=\"ifc:Seq-anyURI\" use=\"optional\"/>\n\t\t<xs:attribute name=\"configuration\" type=\"ifc:Seq-anyURI\" use=\"optional\"/>\n\t</xs:complexType>\n\t<xs:element name=\"ifcXML\" type=\"ifc:ifcXML\" substitutionGroup=\"ifc:uos\"/>\n\t<xs:complexType name=\"ifcXML\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:uos\">\n\t\t\t\t<xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n\t\t\t\t\t<xs:element ref=\"ifc:Entity\"/>\n\t\t\t\t</xs:choice>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<!-- element and complex type declarations (for ENTITY definitions) -->\n\t<xs:element name=\"IfcActionRequest\" type=\"ifc:IfcActionRequest\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActionRequest\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActionRequestTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActor\" type=\"ifc:IfcActor\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TheActor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActorRole\" type=\"ifc:IfcActorRole\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActorRole\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Role\" type=\"ifc:IfcRoleEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedRole\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActuator\" type=\"ifc:IfcActuator\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActuator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActuatorType\" type=\"ifc:IfcActuatorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActuatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAddress\" type=\"ifc:IfcAddress\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAddress\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcAddressTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPurpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedBrep\" type=\"ifc:IfcAdvancedBrep\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedBrep\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedBrepWithVoids\" type=\"ifc:IfcAdvancedBrepWithVoids\" substitutionGroup=\"ifc:IfcAdvancedBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedBrepWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAdvancedBrep\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Voids\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClosedShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedFace\" type=\"ifc:IfcAdvancedFace\" substitutionGroup=\"ifc:IfcFaceSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFaceSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminal\" type=\"ifc:IfcAirTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalBox\" type=\"ifc:IfcAirTerminalBox\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalBoxType\" type=\"ifc:IfcAirTerminalBoxType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalBoxType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalType\" type=\"ifc:IfcAirTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirToAirHeatRecovery\" type=\"ifc:IfcAirToAirHeatRecovery\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirToAirHeatRecovery\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirToAirHeatRecoveryType\" type=\"ifc:IfcAirToAirHeatRecoveryType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirToAirHeatRecoveryType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlarm\" type=\"ifc:IfcAlarm\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlarm\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlarmType\" type=\"ifc:IfcAlarmType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlarmType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotation\" type=\"ifc:IfcAnnotation\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotationFillArea\" type=\"ifc:IfcAnnotationFillArea\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotationFillArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OuterBoundary\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApplication\" type=\"ifc:IfcApplication\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApplication\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ApplicationDeveloper\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Version\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicationFullName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicationIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAppliedValue\" type=\"ifc:IfcAppliedValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAppliedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitBasis\" type=\"ifc:IfcMeasureWithUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Components\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicableDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FixedUntilDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Condition\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ArithmeticOperator\" type=\"ifc:IfcArithmeticOperatorEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApproval\" type=\"ifc:IfcApproval\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApproval\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RequestingApproval\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"GivingApproval\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeOfApproval\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Level\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Qualifier\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApprovalRelationship\" type=\"ifc:IfcApprovalRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApprovalRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedApprovals\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcApproval\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryClosedProfileDef\" type=\"ifc:IfcArbitraryClosedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryClosedProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OuterCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryOpenProfileDef\" type=\"ifc:IfcArbitraryOpenProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryOpenProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Curve\" type=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryProfileDefWithVoids\" type=\"ifc:IfcArbitraryProfileDefWithVoids\" substitutionGroup=\"ifc:IfcArbitraryClosedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryProfileDefWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryClosedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerCurves\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAsset\" type=\"ifc:IfcAsset\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAsset\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OriginalValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CurrentValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TotalReplacementCost\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Owner\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"User\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResponsiblePerson\" type=\"ifc:IfcPerson\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"DepreciatedValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IncorporationDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAsymmetricIShapeProfileDef\" type=\"ifc:IfcAsymmetricIShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAsymmetricIShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"BottomFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAudioVisualAppliance\" type=\"ifc:IfcAudioVisualAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAudioVisualAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAudioVisualApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAudioVisualApplianceType\" type=\"ifc:IfcAudioVisualApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAudioVisualApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAudioVisualApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis1Placement\" type=\"ifc:IfcAxis1Placement\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis1Placement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis2Placement2D\" type=\"ifc:IfcAxis2Placement2D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis2Placement2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis2Placement3D\" type=\"ifc:IfcAxis2Placement3D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis2Placement3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineCurve\" type=\"ifc:IfcBSplineCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Degree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveForm\" type=\"ifc:IfcBSplineCurveForm\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ClosedCurve\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineCurveWithKnots\" type=\"ifc:IfcBSplineCurveWithKnots\" substitutionGroup=\"ifc:IfcBSplineCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineCurveWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurve\">\n\t\t\t\t<xs:attribute name=\"KnotMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Knots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"KnotSpec\" type=\"ifc:IfcKnotType\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineSurface\" type=\"ifc:IfcBSplineSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"4\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UDegree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VDegree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SurfaceForm\" type=\"ifc:IfcBSplineSurfaceForm\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UClosed\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VClosed\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineSurfaceWithKnots\" type=\"ifc:IfcBSplineSurfaceWithKnots\" substitutionGroup=\"ifc:IfcBSplineSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineSurfaceWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineSurface\">\n\t\t\t\t<xs:attribute name=\"UMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"VMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"UKnots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"VKnots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"KnotSpec\" type=\"ifc:IfcKnotType\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeam\" type=\"ifc:IfcBeam\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeam\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeamStandardCase\" type=\"ifc:IfcBeamStandardCase\" substitutionGroup=\"ifc:IfcBeam\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeamStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBeam\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeamType\" type=\"ifc:IfcBeamType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeamType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBlobTexture\" type=\"ifc:IfcBlobTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBlobTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RasterCode\" type=\"ifc:IfcBinary\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RasterFormat\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBlock\" type=\"ifc:IfcBlock\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBlock\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ZLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoiler\" type=\"ifc:IfcBoiler\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoiler\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoilerType\" type=\"ifc:IfcBoilerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoilerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBooleanClippingResult\" type=\"ifc:IfcBooleanClippingResult\" substitutionGroup=\"ifc:IfcBooleanResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBooleanClippingResult\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBooleanResult\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBooleanResult\" type=\"ifc:IfcBooleanResult\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBooleanResult\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FirstOperand\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondOperand\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Operator\" type=\"ifc:IfcBooleanOperator\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryCondition\" type=\"ifc:IfcBoundaryCondition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryCondition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryCurve\" type=\"ifc:IfcBoundaryCurve\" substitutionGroup=\"ifc:IfcCompositeCurveOnSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurveOnSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryEdgeCondition\" type=\"ifc:IfcBoundaryEdgeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryEdgeCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryFaceCondition\" type=\"ifc:IfcBoundaryFaceCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryFaceCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryNodeCondition\" type=\"ifc:IfcBoundaryNodeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryNodeCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryNodeConditionWarping\" type=\"ifc:IfcBoundaryNodeConditionWarping\" substitutionGroup=\"ifc:IfcBoundaryNodeCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryNodeConditionWarping\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryNodeCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WarpingStiffness\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcWarpingStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundedCurve\" type=\"ifc:IfcBoundedCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundedCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundedSurface\" type=\"ifc:IfcBoundedSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundedSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundingBox\" type=\"ifc:IfcBoundingBox\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundingBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Corner\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ZDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoxedHalfSpace\" type=\"ifc:IfcBoxedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoxedHalfSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Enclosure\" type=\"ifc:IfcBoundingBox\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuilding\" type=\"ifc:IfcBuilding\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuilding\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BuildingAddress\" type=\"ifc:IfcPostalAddress\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ElevationOfRefHeight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElevationOfTerrain\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElement\" type=\"ifc:IfcBuildingElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementPart\" type=\"ifc:IfcBuildingElementPart\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementPart\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementPartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementPartType\" type=\"ifc:IfcBuildingElementPartType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementPartType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementPartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementProxy\" type=\"ifc:IfcBuildingElementProxy\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementProxy\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementProxyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementProxyType\" type=\"ifc:IfcBuildingElementProxyType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementProxyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementProxyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementType\" type=\"ifc:IfcBuildingElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingStorey\" type=\"ifc:IfcBuildingStorey\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingStorey\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"Elevation\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingSystem\" type=\"ifc:IfcBuildingSystem\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingSystemTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBurner\" type=\"ifc:IfcBurner\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBurner\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBurnerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBurnerType\" type=\"ifc:IfcBurnerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBurnerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBurnerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCShapeProfileDef\" type=\"ifc:IfcCShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Girth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InternalFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierFitting\" type=\"ifc:IfcCableCarrierFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierFittingType\" type=\"ifc:IfcCableCarrierFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierSegment\" type=\"ifc:IfcCableCarrierSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierSegmentType\" type=\"ifc:IfcCableCarrierSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableFitting\" type=\"ifc:IfcCableFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableFittingType\" type=\"ifc:IfcCableFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableSegment\" type=\"ifc:IfcCableSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableSegmentType\" type=\"ifc:IfcCableSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPoint\" type=\"ifc:IfcCartesianPoint\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:attribute name=\"Coordinates\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList\" type=\"ifc:IfcCartesianPointList\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList2D\" type=\"ifc:IfcCartesianPointList2D\" substitutionGroup=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianPointList\">\n\t\t\t\t<xs:attribute name=\"CoordList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList3D\" type=\"ifc:IfcCartesianPointList3D\" substitutionGroup=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianPointList\">\n\t\t\t\t<xs:attribute name=\"CoordList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator\" type=\"ifc:IfcCartesianTransformationOperator\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis1\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Axis2\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LocalOrigin\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Scale\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator2D\" type=\"ifc:IfcCartesianTransformationOperator2D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator2DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator2DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2DnonUniform\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator2D\">\n\t\t\t\t<xs:attribute name=\"Scale2\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator3D\" type=\"ifc:IfcCartesianTransformationOperator3D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis3\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator3DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator3DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3DnonUniform\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator3D\">\n\t\t\t\t<xs:attribute name=\"Scale2\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scale3\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCenterLineProfileDef\" type=\"ifc:IfcCenterLineProfileDef\" substitutionGroup=\"ifc:IfcArbitraryOpenProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCenterLineProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryOpenProfileDef\">\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChiller\" type=\"ifc:IfcChiller\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChiller\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChillerType\" type=\"ifc:IfcChillerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChillerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChimney\" type=\"ifc:IfcChimney\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChimney\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChimneyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChimneyType\" type=\"ifc:IfcChimneyType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChimneyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChimneyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircle\" type=\"ifc:IfcCircle\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircleHollowProfileDef\" type=\"ifc:IfcCircleHollowProfileDef\" substitutionGroup=\"ifc:IfcCircleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircleHollowProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCircleProfileDef\">\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircleProfileDef\" type=\"ifc:IfcCircleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCivilElement\" type=\"ifc:IfcCivilElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCivilElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCivilElementType\" type=\"ifc:IfcCivilElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCivilElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassification\" type=\"ifc:IfcClassification\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassification\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferenceTokens\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasReferences\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationReference\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Source\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Edition\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EditionDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassificationReference\" type=\"ifc:IfcClassificationReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassificationReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasReferences\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationReference\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Sort\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClosedShell\" type=\"ifc:IfcClosedShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClosedShell\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoil\" type=\"ifc:IfcCoil\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoil\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoilType\" type=\"ifc:IfcCoilType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoilType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourRgb\" type=\"ifc:IfcColourRgb\" substitutionGroup=\"ifc:IfcColourSpecification\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourRgb\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcColourSpecification\">\n\t\t\t\t<xs:attribute name=\"Red\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Green\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Blue\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourRgbList\" type=\"ifc:IfcColourRgbList\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourRgbList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"ColourList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcNormalisedRatioMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourSpecification\" type=\"ifc:IfcColourSpecification\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourSpecification\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumn\" type=\"ifc:IfcColumn\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumn\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumnStandardCase\" type=\"ifc:IfcColumnStandardCase\" substitutionGroup=\"ifc:IfcColumn\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumnStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcColumn\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumnType\" type=\"ifc:IfcColumnType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumnType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCommunicationsAppliance\" type=\"ifc:IfcCommunicationsAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCommunicationsAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCommunicationsApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCommunicationsApplianceType\" type=\"ifc:IfcCommunicationsApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCommunicationsApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCommunicationsApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcComplexProperty\" type=\"ifc:IfcComplexProperty\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcComplexProperty\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcComplexPropertyTemplate\" type=\"ifc:IfcComplexPropertyTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcComplexPropertyTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertyTemplates\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyTemplate\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertyTemplate\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcComplexPropertyTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurve\" type=\"ifc:IfcCompositeCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Segments\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCompositeCurveSegment\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCompositeCurveSegment\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurveOnSurface\" type=\"ifc:IfcCompositeCurveOnSurface\" substitutionGroup=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurveOnSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurveSegment\" type=\"ifc:IfcCompositeCurveSegment\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurveSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Transition\" type=\"ifc:IfcTransitionCode\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeProfileDef\" type=\"ifc:IfcCompositeProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Profiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Label\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompressor\" type=\"ifc:IfcCompressor\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompressor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompressorType\" type=\"ifc:IfcCompressorType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompressorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCondenser\" type=\"ifc:IfcCondenser\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCondenser\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCondenserType\" type=\"ifc:IfcCondenserType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCondenserType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConic\" type=\"ifc:IfcConic\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConic\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectedFaceSet\" type=\"ifc:IfcConnectedFaceSet\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectedFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CfsFaces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFace\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFace\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionCurveGeometry\" type=\"ifc:IfcConnectionCurveGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionCurveGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionGeometry\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionPointEccentricity\" type=\"ifc:IfcConnectionPointEccentricity\" substitutionGroup=\"ifc:IfcConnectionPointGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionPointEccentricity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionPointGeometry\">\n\t\t\t\t<xs:attribute name=\"EccentricityInX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EccentricityInY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EccentricityInZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionPointGeometry\" type=\"ifc:IfcConnectionPointGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionPointGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PointOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionSurfaceGeometry\" type=\"ifc:IfcConnectionSurfaceGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionSurfaceGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionVolumeGeometry\" type=\"ifc:IfcConnectionVolumeGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionVolumeGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VolumeOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSolidOrShell\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VolumeOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSolidOrShell\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstraint\" type=\"ifc:IfcConstraint\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstraint\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CreatingActor\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstraintGrade\" type=\"ifc:IfcConstraintEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstraintSource\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionEquipmentResource\" type=\"ifc:IfcConstructionEquipmentResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionEquipmentResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionEquipmentResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionEquipmentResourceType\" type=\"ifc:IfcConstructionEquipmentResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionEquipmentResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionEquipmentResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionMaterialResource\" type=\"ifc:IfcConstructionMaterialResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionMaterialResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionMaterialResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionMaterialResourceType\" type=\"ifc:IfcConstructionMaterialResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionMaterialResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionMaterialResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionProductResource\" type=\"ifc:IfcConstructionProductResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionProductResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionProductResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionProductResourceType\" type=\"ifc:IfcConstructionProductResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionProductResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionProductResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionResource\" type=\"ifc:IfcConstructionResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Usage\" type=\"ifc:IfcResourceTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"BaseCosts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseQuantity\" type=\"ifc:IfcPhysicalQuantity\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionResourceType\" type=\"ifc:IfcConstructionResourceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionResourceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseCosts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseQuantity\" type=\"ifc:IfcPhysicalQuantity\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcContext\" type=\"ifc:IfcContext\" abstract=\"true\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcContext\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepresentationContexts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationContext\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitsInContext\" type=\"ifc:IfcUnitAssignment\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"IsDefinedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDefinesByProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDefinesByProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Declares\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDeclares\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDeclares\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ObjectType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Phase\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcContextDependentUnit\" type=\"ifc:IfcContextDependentUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcContextDependentUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcControl\" type=\"ifc:IfcControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcControl\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcController\" type=\"ifc:IfcController\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcController\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcControllerType\" type=\"ifc:IfcControllerType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcControllerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConversionBasedUnit\" type=\"ifc:IfcConversionBasedUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConversionBasedUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConversionFactor\" type=\"ifc:IfcMeasureWithUnit\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConversionBasedUnitWithOffset\" type=\"ifc:IfcConversionBasedUnitWithOffset\" substitutionGroup=\"ifc:IfcConversionBasedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConversionBasedUnitWithOffset\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConversionBasedUnit\">\n\t\t\t\t<xs:attribute name=\"ConversionOffset\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCooledBeam\" type=\"ifc:IfcCooledBeam\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCooledBeam\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCooledBeamType\" type=\"ifc:IfcCooledBeamType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCooledBeamType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoolingTower\" type=\"ifc:IfcCoolingTower\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoolingTower\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoolingTowerType\" type=\"ifc:IfcCoolingTowerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoolingTowerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoordinateOperation\" type=\"ifc:IfcCoordinateOperation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoordinateOperation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TargetCRS\" type=\"ifc:IfcCoordinateReferenceSystem\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoordinateReferenceSystem\" type=\"ifc:IfcCoordinateReferenceSystem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoordinateReferenceSystem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"GeodeticDatum\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VerticalDatum\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostItem\" type=\"ifc:IfcCostItem\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CostValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCostValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CostQuantities\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCostItemTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostSchedule\" type=\"ifc:IfcCostSchedule\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCostScheduleTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SubmittedOn\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UpdateDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostValue\" type=\"ifc:IfcCostValue\" substitutionGroup=\"ifc:IfcAppliedValue\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCovering\" type=\"ifc:IfcCovering\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCovering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoveringType\" type=\"ifc:IfcCoveringType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoveringType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCrewResource\" type=\"ifc:IfcCrewResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCrewResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCrewResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCrewResourceType\" type=\"ifc:IfcCrewResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCrewResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCrewResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCsgPrimitive3D\" type=\"ifc:IfcCsgPrimitive3D\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCsgPrimitive3D\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCsgSolid\" type=\"ifc:IfcCsgSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCsgSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TreeRootExpression\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCsgSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurrencyRelationship\" type=\"ifc:IfcCurrencyRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurrencyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RateSource\" type=\"ifc:IfcLibraryInformation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ExchangeRate\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RateDateTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurtainWall\" type=\"ifc:IfcCurtainWall\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurtainWall\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCurtainWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurtainWallType\" type=\"ifc:IfcCurtainWallType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurtainWallType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCurtainWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurve\" type=\"ifc:IfcCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveBoundedPlane\" type=\"ifc:IfcCurveBoundedPlane\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveBoundedPlane\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcPlane\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"OuterBoundary\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveBoundedSurface\" type=\"ifc:IfcCurveBoundedSurface\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveBoundedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Boundaries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBoundaryCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ImplicitOuter\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyle\" type=\"ifc:IfcCurveStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveFont\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveWidth\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelOrDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFont\" type=\"ifc:IfcCurveStyleFont\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PatternList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontPattern\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurveStyleFontPattern\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFontAndScaling\" type=\"ifc:IfcCurveStyleFontAndScaling\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFontAndScaling\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveFont\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveFontScaling\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFontPattern\" type=\"ifc:IfcCurveStyleFontPattern\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFontPattern\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"VisibleSegmentLength\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InvisibleSegmentLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCylindricalSurface\" type=\"ifc:IfcCylindricalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCylindricalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDamper\" type=\"ifc:IfcDamper\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDamper\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDamperType\" type=\"ifc:IfcDamperType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDamperType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedProfileDef\" type=\"ifc:IfcDerivedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Operator\" type=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Label\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedUnit\" type=\"ifc:IfcDerivedUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDerivedUnitElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDerivedUnitElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UnitType\" type=\"ifc:IfcDerivedUnitEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedUnitElement\" type=\"ifc:IfcDerivedUnitElement\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedUnitElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" type=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Exponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDimensionalExponents\" type=\"ifc:IfcDimensionalExponents\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDimensionalExponents\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"LengthExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MassExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectricCurrentExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThermodynamicTemperatureExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AmountOfSubstanceExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LuminousIntensityExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDirection\" type=\"ifc:IfcDirection\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDirection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:attribute name=\"DirectionRatios\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDiscreteAccessory\" type=\"ifc:IfcDiscreteAccessory\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDiscreteAccessory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDiscreteAccessoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDiscreteAccessoryType\" type=\"ifc:IfcDiscreteAccessoryType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDiscreteAccessoryType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDiscreteAccessoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionChamberElement\" type=\"ifc:IfcDistributionChamberElement\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionChamberElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionChamberElementType\" type=\"ifc:IfcDistributionChamberElementType\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionChamberElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionCircuit\" type=\"ifc:IfcDistributionCircuit\" substitutionGroup=\"ifc:IfcDistributionSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionCircuit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionSystem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionControlElement\" type=\"ifc:IfcDistributionControlElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionControlElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionControlElementType\" type=\"ifc:IfcDistributionControlElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionControlElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionElement\" type=\"ifc:IfcDistributionElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionElementType\" type=\"ifc:IfcDistributionElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionFlowElement\" type=\"ifc:IfcDistributionFlowElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionFlowElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionFlowElementType\" type=\"ifc:IfcDistributionFlowElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionFlowElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionPort\" type=\"ifc:IfcDistributionPort\" substitutionGroup=\"ifc:IfcPort\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionPort\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPort\">\n\t\t\t\t<xs:attribute name=\"FlowDirection\" type=\"ifc:IfcFlowDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionPortTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SystemType\" type=\"ifc:IfcDistributionSystemEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionSystem\" type=\"ifc:IfcDistributionSystem\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionSystemEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentInformation\" type=\"ifc:IfcDocumentInformation\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentInformation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DocumentOwner\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Editors\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IntendedUse\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scope\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Revision\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastRevisionTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectronicFormat\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValidFrom\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValidUntil\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Confidentiality\" type=\"ifc:IfcDocumentConfidentialityEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcDocumentStatusEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentInformationRelationship\" type=\"ifc:IfcDocumentInformationRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentInformationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingDocument\" type=\"ifc:IfcDocumentInformation\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedDocuments\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDocumentInformation\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RelationshipType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentReference\" type=\"ifc:IfcDocumentReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedDocument\" type=\"ifc:IfcDocumentInformation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoor\" type=\"ifc:IfcDoor\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDoorTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorTypeOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedOperationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorLiningProperties\" type=\"ifc:IfcDoorLiningProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorLiningProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CasingThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CasingDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorPanelProperties\" type=\"ifc:IfcDoorPanelProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorPanelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PanelDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelOperation\" type=\"ifc:IfcDoorPanelOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelWidth\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcDoorPanelPositionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorStandardCase\" type=\"ifc:IfcDoorStandardCase\" substitutionGroup=\"ifc:IfcDoor\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDoor\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorStyle\" type=\"ifc:IfcDoorStyle\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorStyleOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstructionType\" type=\"ifc:IfcDoorStyleConstructionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Sizeable\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorType\" type=\"ifc:IfcDoorType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDoorTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorTypeOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedOperationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingPreDefinedColour\" type=\"ifc:IfcDraughtingPreDefinedColour\" substitutionGroup=\"ifc:IfcPreDefinedColour\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedColour\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingPreDefinedCurveFont\" type=\"ifc:IfcDraughtingPreDefinedCurveFont\" substitutionGroup=\"ifc:IfcPreDefinedCurveFont\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedCurveFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctFitting\" type=\"ifc:IfcDuctFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctFittingType\" type=\"ifc:IfcDuctFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSegment\" type=\"ifc:IfcDuctSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSegmentType\" type=\"ifc:IfcDuctSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSilencer\" type=\"ifc:IfcDuctSilencer\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSilencer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSilencerType\" type=\"ifc:IfcDuctSilencerType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSilencerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdge\" type=\"ifc:IfcEdge\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeStart\" type=\"ifc:IfcVertex\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"EdgeEnd\" type=\"ifc:IfcVertex\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdgeCurve\" type=\"ifc:IfcEdgeCurve\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdgeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeGeometry\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdgeLoop\" type=\"ifc:IfcEdgeLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdgeLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricAppliance\" type=\"ifc:IfcElectricAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricApplianceType\" type=\"ifc:IfcElectricApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricDistributionBoard\" type=\"ifc:IfcElectricDistributionBoard\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricDistributionBoard\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricDistributionBoardTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricDistributionBoardType\" type=\"ifc:IfcElectricDistributionBoardType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricDistributionBoardType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricDistributionBoardTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowStorageDevice\" type=\"ifc:IfcElectricFlowStorageDevice\" substitutionGroup=\"ifc:IfcFlowStorageDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowStorageDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowStorageDeviceType\" type=\"ifc:IfcElectricFlowStorageDeviceType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowStorageDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricGenerator\" type=\"ifc:IfcElectricGenerator\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricGenerator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricGeneratorType\" type=\"ifc:IfcElectricGeneratorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricGeneratorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricMotor\" type=\"ifc:IfcElectricMotor\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricMotor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricMotorType\" type=\"ifc:IfcElectricMotorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricMotorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricTimeControl\" type=\"ifc:IfcElectricTimeControl\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricTimeControl\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricTimeControlType\" type=\"ifc:IfcElectricTimeControlType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricTimeControlType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElement\" type=\"ifc:IfcElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProjections\" type=\"ifc:IfcRelProjectsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"HasOpenings\" type=\"ifc:IfcRelVoidsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementAssembly\" type=\"ifc:IfcElementAssembly\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementAssembly\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementAssemblyType\" type=\"ifc:IfcElementAssemblyType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementAssemblyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementComponent\" type=\"ifc:IfcElementComponent\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementComponent\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementComponentType\" type=\"ifc:IfcElementComponentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementComponentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementQuantity\" type=\"ifc:IfcElementQuantity\" substitutionGroup=\"ifc:IfcQuantitySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementQuantity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcQuantitySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Quantities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MethodOfMeasurement\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementType\" type=\"ifc:IfcElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ElementType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementarySurface\" type=\"ifc:IfcElementarySurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementarySurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEllipse\" type=\"ifc:IfcEllipse\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEllipse\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\n\t\t\t\t<xs:attribute name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEllipseProfileDef\" type=\"ifc:IfcEllipseProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEllipseProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEnergyConversionDevice\" type=\"ifc:IfcEnergyConversionDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEnergyConversionDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEnergyConversionDeviceType\" type=\"ifc:IfcEnergyConversionDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEnergyConversionDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEngine\" type=\"ifc:IfcEngine\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEngine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEngineTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEngineType\" type=\"ifc:IfcEngineType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEngineType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEngineTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporativeCooler\" type=\"ifc:IfcEvaporativeCooler\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporativeCooler\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporativeCoolerType\" type=\"ifc:IfcEvaporativeCoolerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporativeCoolerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporator\" type=\"ifc:IfcEvaporator\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporatorType\" type=\"ifc:IfcEvaporatorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvent\" type=\"ifc:IfcEvent\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EventOccurenceTime\" type=\"ifc:IfcEventTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEventTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EventTriggerType\" type=\"ifc:IfcEventTriggerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedEventTriggerType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEventTime\" type=\"ifc:IfcEventTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEventTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"ActualDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEventType\" type=\"ifc:IfcEventType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEventType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEventTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EventTriggerType\" type=\"ifc:IfcEventTriggerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedEventTriggerType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtendedProperties\" type=\"ifc:IfcExtendedProperties\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtendedProperties\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Properties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalInformation\" type=\"ifc:IfcExternalInformation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalInformation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalReference\" type=\"ifc:IfcExternalReference\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalReference\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalReferenceRelationship\" type=\"ifc:IfcExternalReferenceRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalReferenceRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingReference\" type=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalSpatialElement\" type=\"ifc:IfcExternalSpatialElement\" substitutionGroup=\"ifc:IfcExternalSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalSpatialElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcExternalSpatialElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalSpatialStructureElement\" type=\"ifc:IfcExternalSpatialStructureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalSpatialStructureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedHatchStyle\" type=\"ifc:IfcExternallyDefinedHatchStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedHatchStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedSurfaceStyle\" type=\"ifc:IfcExternallyDefinedSurfaceStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedSurfaceStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedTextFont\" type=\"ifc:IfcExternallyDefinedTextFont\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedTextFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtrudedAreaSolid\" type=\"ifc:IfcExtrudedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtrudedAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtrudedAreaSolidTapered\" type=\"ifc:IfcExtrudedAreaSolidTapered\" substitutionGroup=\"ifc:IfcExtrudedAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtrudedAreaSolidTapered\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtrudedAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EndSweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFace\" type=\"ifc:IfcFace\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Bounds\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFaceBound\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFaceBound\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceBasedSurfaceModel\" type=\"ifc:IfcFaceBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceBasedSurfaceModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FbsmFaces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectedFaceSet\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcConnectedFaceSet\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceBound\" type=\"ifc:IfcFaceBound\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceBound\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Bound\" type=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Orientation\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceOuterBound\" type=\"ifc:IfcFaceOuterBound\" substitutionGroup=\"ifc:IfcFaceBound\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceOuterBound\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFaceBound\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceSurface\" type=\"ifc:IfcFaceSurface\" substitutionGroup=\"ifc:IfcFace\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFace\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FaceSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacetedBrep\" type=\"ifc:IfcFacetedBrep\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacetedBrep\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacetedBrepWithVoids\" type=\"ifc:IfcFacetedBrepWithVoids\" substitutionGroup=\"ifc:IfcFacetedBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacetedBrepWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacetedBrep\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Voids\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClosedShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFailureConnectionCondition\" type=\"ifc:IfcFailureConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFailureConnectionCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t<xs:attribute name=\"TensionFailureX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionFailureY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionFailureZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFan\" type=\"ifc:IfcFan\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFan\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFanType\" type=\"ifc:IfcFanType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFanType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFastener\" type=\"ifc:IfcFastener\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFastener\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFastenerType\" type=\"ifc:IfcFastenerType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFastenerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElement\" type=\"ifc:IfcFeatureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElementAddition\" type=\"ifc:IfcFeatureElementAddition\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElementAddition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElementSubtraction\" type=\"ifc:IfcFeatureElementSubtraction\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElementSubtraction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyle\" type=\"ifc:IfcFillAreaStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FillStyles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFillStyleSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelorDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyleHatching\" type=\"ifc:IfcFillAreaStyleHatching\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyleHatching\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HatchLineAppearance\" type=\"ifc:IfcCurveStyle\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"StartOfNextHatchLine\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcHatchLineDistanceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointOfReferenceHatchLine\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PatternStart\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"HatchLineAngle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyleTiles\" type=\"ifc:IfcFillAreaStyleTiles\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyleTiles\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TilingPattern\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\" minOccurs=\"2\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcVector\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Tiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStyledItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStyledItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TilingScale\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFilter\" type=\"ifc:IfcFilter\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFilter\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFilterType\" type=\"ifc:IfcFilterType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFilterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFireSuppressionTerminal\" type=\"ifc:IfcFireSuppressionTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFireSuppressionTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFireSuppressionTerminalType\" type=\"ifc:IfcFireSuppressionTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFireSuppressionTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFixedReferenceSweptAreaSolid\" type=\"ifc:IfcFixedReferenceSweptAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFixedReferenceSweptAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"FixedReference\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"StartParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowController\" type=\"ifc:IfcFlowController\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowController\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowControllerType\" type=\"ifc:IfcFlowControllerType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowControllerType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowFitting\" type=\"ifc:IfcFlowFitting\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowFittingType\" type=\"ifc:IfcFlowFittingType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowFittingType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowInstrument\" type=\"ifc:IfcFlowInstrument\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowInstrument\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowInstrumentType\" type=\"ifc:IfcFlowInstrumentType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowInstrumentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMeter\" type=\"ifc:IfcFlowMeter\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMeter\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMeterType\" type=\"ifc:IfcFlowMeterType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMeterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMovingDevice\" type=\"ifc:IfcFlowMovingDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMovingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMovingDeviceType\" type=\"ifc:IfcFlowMovingDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMovingDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowSegment\" type=\"ifc:IfcFlowSegment\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowSegmentType\" type=\"ifc:IfcFlowSegmentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowSegmentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowStorageDevice\" type=\"ifc:IfcFlowStorageDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowStorageDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowStorageDeviceType\" type=\"ifc:IfcFlowStorageDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowStorageDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTerminal\" type=\"ifc:IfcFlowTerminal\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTerminalType\" type=\"ifc:IfcFlowTerminalType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTerminalType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTreatmentDevice\" type=\"ifc:IfcFlowTreatmentDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTreatmentDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTreatmentDeviceType\" type=\"ifc:IfcFlowTreatmentDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTreatmentDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFooting\" type=\"ifc:IfcFooting\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFooting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFootingType\" type=\"ifc:IfcFootingType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFootingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnishingElement\" type=\"ifc:IfcFurnishingElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnishingElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnishingElementType\" type=\"ifc:IfcFurnishingElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnishingElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurniture\" type=\"ifc:IfcFurniture\" substitutionGroup=\"ifc:IfcFurnishingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurniture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFurnitureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnitureType\" type=\"ifc:IfcFurnitureType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnitureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\n\t\t\t\t<xs:attribute name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFurnitureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeographicElement\" type=\"ifc:IfcGeographicElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeographicElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGeographicElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeographicElementType\" type=\"ifc:IfcGeographicElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeographicElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGeographicElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricCurveSet\" type=\"ifc:IfcGeometricCurveSet\" substitutionGroup=\"ifc:IfcGeometricSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricCurveSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationContext\" type=\"ifc:IfcGeometricRepresentationContext\" substitutionGroup=\"ifc:IfcRepresentationContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationContext\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WorldCoordinateSystem\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TrueNorth\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"HasSubContexts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationSubContext\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGeometricRepresentationSubContext\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasCoordinateOperation\" type=\"ifc:IfcCoordinateOperation\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CoordinateSpaceDimension\" type=\"ifc:IfcDimensionCount\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Precision\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationItem\" type=\"ifc:IfcGeometricRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcGeometricRepresentationContext\">\n\t\t\t\t<xs:sequence/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationSubContext\" type=\"ifc:IfcGeometricRepresentationSubContext\" substitutionGroup=\"ifc:IfcGeometricRepresentationContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationSubContext-temp\">\n\t\t\t\t<xs:attribute name=\"TargetScale\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TargetView\" type=\"ifc:IfcGeometricProjectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedTargetView\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricSet\" type=\"ifc:IfcGeometricSet\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGeometricSetSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGrid\" type=\"ifc:IfcGrid\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGrid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WAxes\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGridTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGridAxis\" type=\"ifc:IfcGridAxis\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGridAxis\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"AxisTag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGridPlacement\" type=\"ifc:IfcGridPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGridPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlacementLocation\" type=\"ifc:IfcVirtualGridIntersection\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"PlacementRefDirection\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGridPlacementDirectionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGroup\" type=\"ifc:IfcGroup\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHalfSpaceSolid\" type=\"ifc:IfcHalfSpaceSolid\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHalfSpaceSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"AgreementFlag\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHeatExchanger\" type=\"ifc:IfcHeatExchanger\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHeatExchanger\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHeatExchangerType\" type=\"ifc:IfcHeatExchangerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHeatExchangerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHumidifier\" type=\"ifc:IfcHumidifier\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHumidifier\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHumidifierType\" type=\"ifc:IfcHumidifierType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHumidifierType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIShapeProfileDef\" type=\"ifc:IfcIShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcImageTexture\" type=\"ifc:IfcImageTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcImageTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:attribute name=\"URLReference\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedColourMap\" type=\"ifc:IfcIndexedColourMap\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedColourMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Colours\" type=\"ifc:IfcColourRgbList\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Opacity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ColourIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolyCurve\" type=\"ifc:IfcIndexedPolyCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolyCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Points\" type=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Segments\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSegmentIndexSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSegmentIndexSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolygonalFace\" type=\"ifc:IfcIndexedPolygonalFace\" substitutionGroup=\"ifc:IfcTessellatedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolygonalFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedItem\">\n\t\t\t\t<xs:attribute name=\"CoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolygonalFaceWithVoids\" type=\"ifc:IfcIndexedPolygonalFaceWithVoids\" substitutionGroup=\"ifc:IfcIndexedPolygonalFace\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolygonalFaceWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcIndexedPolygonalFace\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerCoordIndices\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element name=\"Seq-IfcPositiveInteger-wrapper\" type=\"ifc:Seq-IfcPositiveInteger\" maxOccurs=\"unbounded\" />\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedTextureMap\" type=\"ifc:IfcIndexedTextureMap\" abstract=\"true\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedTextureMap\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TexCoords\" type=\"ifc:IfcTextureVertexList\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedTriangleTextureMap\" type=\"ifc:IfcIndexedTriangleTextureMap\" substitutionGroup=\"ifc:IfcIndexedTextureMap\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedTriangleTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcIndexedTextureMap\">\n\t\t\t\t<xs:attribute name=\"TexCoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInterceptor\" type=\"ifc:IfcInterceptor\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInterceptor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInterceptorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInterceptorType\" type=\"ifc:IfcInterceptorType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInterceptorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInterceptorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIntersectionCurve\" type=\"ifc:IfcIntersectionCurve\" substitutionGroup=\"ifc:IfcSurfaceCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIntersectionCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInventory\" type=\"ifc:IfcInventory\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInventory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Jurisdiction\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResponsiblePersons\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPerson\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurrentValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"OriginalValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInventoryTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastUpdateDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIrregularTimeSeries\" type=\"ifc:IfcIrregularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIrregularTimeSeries\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIrregularTimeSeriesValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIrregularTimeSeriesValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIrregularTimeSeriesValue\" type=\"ifc:IfcIrregularTimeSeriesValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIrregularTimeSeriesValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TimeStamp\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcJunctionBox\" type=\"ifc:IfcJunctionBox\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcJunctionBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcJunctionBoxType\" type=\"ifc:IfcJunctionBoxType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcJunctionBoxType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLShapeProfileDef\" type=\"ifc:IfcLShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LegSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLaborResource\" type=\"ifc:IfcLaborResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLaborResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLaborResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLaborResourceType\" type=\"ifc:IfcLaborResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLaborResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLaborResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLagTime\" type=\"ifc:IfcLagTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLagTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LagValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTimeOrRatioSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"DurationType\" type=\"ifc:IfcTaskDurationEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLamp\" type=\"ifc:IfcLamp\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLamp\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLampType\" type=\"ifc:IfcLampType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLampType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLibraryInformation\" type=\"ifc:IfcLibraryInformation\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLibraryInformation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Publisher\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Version\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VersionDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLibraryReference\" type=\"ifc:IfcLibraryReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLibraryReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedLibrary\" type=\"ifc:IfcLibraryInformation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Language\" type=\"ifc:IfcLanguageId\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightDistributionData\" type=\"ifc:IfcLightDistributionData\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightDistributionData\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"MainPlaneAngle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondaryPlaneAngle\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPlaneAngleMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"LuminousIntensity\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLuminousIntensityDistributionMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightFixture\" type=\"ifc:IfcLightFixture\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightFixture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightFixtureType\" type=\"ifc:IfcLightFixtureType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightFixtureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightIntensityDistribution\" type=\"ifc:IfcLightIntensityDistribution\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightIntensityDistribution\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DistributionData\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLightDistributionData\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLightDistributionData\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LightDistributionCurve\" type=\"ifc:IfcLightDistributionCurveEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSource\" type=\"ifc:IfcLightSource\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LightColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AmbientIntensity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Intensity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceAmbient\" type=\"ifc:IfcLightSourceAmbient\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceAmbient\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceDirectional\" type=\"ifc:IfcLightSourceDirectional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceDirectional\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceGoniometric\" type=\"ifc:IfcLightSourceGoniometric\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceGoniometric\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ColourAppearance\" type=\"ifc:IfcColourRgb\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LightDistributionDataSource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ColourTemperature\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LuminousFlux\" type=\"ifc:IfcLuminousFluxMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LightEmissionSource\" type=\"ifc:IfcLightEmissionSourceEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourcePositional\" type=\"ifc:IfcLightSourcePositional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourcePositional\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstantAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DistanceAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"QuadricAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceSpot\" type=\"ifc:IfcLightSourceSpot\" substitutionGroup=\"ifc:IfcLightSourcePositional\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceSpot\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSourcePositional\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ConcentrationExponent\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SpreadAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BeamWidthAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLine\" type=\"ifc:IfcLine\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Pnt\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Dir\" type=\"ifc:IfcVector\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLocalPlacement\" type=\"ifc:IfcLocalPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLocalPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlacementRelTo\" type=\"ifc:IfcObjectPlacement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RelativePlacement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLoop\" type=\"ifc:IfcLoop\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcManifoldSolidBrep\" type=\"ifc:IfcManifoldSolidBrep\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcManifoldSolidBrep\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Outer\" type=\"ifc:IfcClosedShell\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMapConversion\" type=\"ifc:IfcMapConversion\" substitutionGroup=\"ifc:IfcCoordinateOperation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMapConversion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCoordinateOperation\">\n\t\t\t\t<xs:attribute name=\"Eastings\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Northings\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OrthogonalHeight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"XAxisAbscissa\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"XAxisOrdinate\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scale\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMappedItem\" type=\"ifc:IfcMappedItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMappedItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MappingSource\" type=\"ifc:IfcRepresentationMap\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"MappingTarget\" type=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterial\" type=\"ifc:IfcMaterial\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterial\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasRepresentation\" type=\"ifc:IfcMaterialDefinitionRepresentation\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialClassificationRelationship\" type=\"ifc:IfcMaterialClassificationRelationship\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialClassificationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialClassifications\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ClassifiedMaterial\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialConstituent\" type=\"ifc:IfcMaterialConstituent\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialConstituent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Fraction\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialConstituentSet\" type=\"ifc:IfcMaterialConstituentSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialConstituentSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialConstituents\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialConstituent\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialConstituent\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialDefinition\" type=\"ifc:IfcMaterialDefinition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialDefinitionRepresentation\" type=\"ifc:IfcMaterialDefinitionRepresentation\" substitutionGroup=\"ifc:IfcProductRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialDefinitionRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayer\" type=\"ifc:IfcMaterialLayer\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsVentilated\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerSet\" type=\"ifc:IfcMaterialLayerSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialLayers\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialLayer\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerSetName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerSetUsage\" type=\"ifc:IfcMaterialLayerSetUsage\" substitutionGroup=\"ifc:IfcMaterialUsageDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerSetUsage\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialUsageDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForLayerSet\" type=\"ifc:IfcMaterialLayerSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerSetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DirectionSense\" type=\"ifc:IfcDirectionSenseEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OffsetFromReferenceLine\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReferenceExtent\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerWithOffsets\" type=\"ifc:IfcMaterialLayerWithOffsets\" substitutionGroup=\"ifc:IfcMaterialLayer\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerWithOffsets\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialLayer\">\n\t\t\t\t<xs:attribute name=\"OffsetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OffsetValues\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialList\" type=\"ifc:IfcMaterialList\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Materials\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfile\" type=\"ifc:IfcMaterialProfile\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfile\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Profile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSet\" type=\"ifc:IfcMaterialProfileSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialProfiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialProfile\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialProfile\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CompositeProfile\" type=\"ifc:IfcCompositeProfileDef\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSetUsage\" type=\"ifc:IfcMaterialProfileSetUsage\" substitutionGroup=\"ifc:IfcMaterialUsageDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSetUsage\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialUsageDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForProfileSet\" type=\"ifc:IfcMaterialProfileSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CardinalPoint\" type=\"ifc:IfcCardinalPointReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReferenceExtent\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSetUsageTapering\" type=\"ifc:IfcMaterialProfileSetUsageTapering\" substitutionGroup=\"ifc:IfcMaterialProfileSetUsage\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSetUsageTapering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProfileSetUsage\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForProfileEndSet\" type=\"ifc:IfcMaterialProfileSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CardinalEndPoint\" type=\"ifc:IfcCardinalPointReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileWithOffsets\" type=\"ifc:IfcMaterialProfileWithOffsets\" substitutionGroup=\"ifc:IfcMaterialProfile\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileWithOffsets\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProfile\">\n\t\t\t\t<xs:attribute name=\"OffsetValues\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProperties\" type=\"ifc:IfcMaterialProperties\" substitutionGroup=\"ifc:IfcExtendedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtendedProperties\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialRelationship\" type=\"ifc:IfcMaterialRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedMaterials\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialUsageDefinition\" type=\"ifc:IfcMaterialUsageDefinition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialUsageDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMeasureWithUnit\" type=\"ifc:IfcMeasureWithUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMeasureWithUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ValueComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalFastener\" type=\"ifc:IfcMechanicalFastener\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalFastener\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMechanicalFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalFastenerType\" type=\"ifc:IfcMechanicalFastenerType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalFastenerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMechanicalFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMedicalDevice\" type=\"ifc:IfcMedicalDevice\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMedicalDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMedicalDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMedicalDeviceType\" type=\"ifc:IfcMedicalDeviceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMedicalDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMedicalDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMember\" type=\"ifc:IfcMember\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMemberStandardCase\" type=\"ifc:IfcMemberStandardCase\" substitutionGroup=\"ifc:IfcMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMemberStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMemberType\" type=\"ifc:IfcMemberType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMemberType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMetric\" type=\"ifc:IfcMetric\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMetric\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DataValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencePath\" type=\"ifc:IfcReference\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Benchmark\" type=\"ifc:IfcBenchmarkEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValueSource\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcMirroredProfileDef-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcDerivedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMirroredProfileDef\" type=\"ifc:IfcMirroredProfileDef\" substitutionGroup=\"ifc:IfcDerivedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMirroredProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMirroredProfileDef-temp\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMonetaryUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Currency\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMotorConnection\" type=\"ifc:IfcMotorConnection\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMotorConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMotorConnectionType\" type=\"ifc:IfcMotorConnectionType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMotorConnectionType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcNamedUnit\" type=\"ifc:IfcNamedUnit\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcNamedUnit\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Dimensions\" type=\"ifc:IfcDimensionalExponents\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UnitType\" type=\"ifc:IfcUnitEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObject\" type=\"ifc:IfcObject\" abstract=\"true\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObject\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IsDeclaredBy\" type=\"ifc:IfcRelDefinesByObject\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"IsTypedBy\" type=\"ifc:IfcRelDefinesByType\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"IsDefinedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDefinesByProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDefinesByProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ObjectType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjectDefinition\" type=\"ifc:IfcObjectDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjectDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IsNestedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelNests\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelNests\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"IsDecomposedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelAggregates\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelAggregates\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjectPlacement\" type=\"ifc:IfcObjectPlacement\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjectPlacement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjective\" type=\"ifc:IfcObjective\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjective\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BenchmarkValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcConstraint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LogicalAggregator\" type=\"ifc:IfcLogicalOperatorEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ObjectiveQualifier\" type=\"ifc:IfcObjectiveEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedQualifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOccupant\" type=\"ifc:IfcOccupant\" substitutionGroup=\"ifc:IfcActor\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOccupant\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcActor\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOccupantTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurve2D\" type=\"ifc:IfcOffsetCurve2D\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurve2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Distance\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurve3D\" type=\"ifc:IfcOffsetCurve3D\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurve3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Distance\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpenShell\" type=\"ifc:IfcOpenShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpenShell\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpeningElement\" type=\"ifc:IfcOpeningElement\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpeningElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasFillings\" type=\"ifc:IfcRelFillsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOpeningElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpeningStandardCase\" type=\"ifc:IfcOpeningStandardCase\" substitutionGroup=\"ifc:IfcOpeningElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpeningStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOpeningElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrganization\" type=\"ifc:IfcOrganization\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrganization\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Addresses\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAddress\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrganizationRelationship\" type=\"ifc:IfcOrganizationRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrganizationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingOrganization\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedOrganizations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrganization\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcOrientedEdge-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrientedEdge\" type=\"ifc:IfcOrientedEdge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrientedEdge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOrientedEdge-temp\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeElement\" type=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Orientation\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOuterBoundaryCurve\" type=\"ifc:IfcOuterBoundaryCurve\" substitutionGroup=\"ifc:IfcBoundaryCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOuterBoundaryCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOutlet\" type=\"ifc:IfcOutlet\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOutlet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOutletType\" type=\"ifc:IfcOutletType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOutletType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOwnerHistory\" type=\"ifc:IfcOwnerHistory\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOwnerHistory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OwningUser\" type=\"ifc:IfcPersonAndOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"OwningApplication\" type=\"ifc:IfcApplication\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"LastModifyingUser\" type=\"ifc:IfcPersonAndOrganization\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LastModifyingApplication\" type=\"ifc:IfcApplication\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"State\" type=\"ifc:IfcStateEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ChangeAction\" type=\"ifc:IfcChangeActionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastModifiedDate\" type=\"ifc:IfcTimeStamp\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationDate\" type=\"ifc:IfcTimeStamp\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcParameterizedProfileDef\" type=\"ifc:IfcParameterizedProfileDef\" abstract=\"true\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcParameterizedProfileDef\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement2D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPath\" type=\"ifc:IfcPath\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPath\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPcurve\" type=\"ifc:IfcPcurve\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPcurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReferenceCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPerformanceHistory\" type=\"ifc:IfcPerformanceHistory\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPerformanceHistory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"LifeCyclePhase\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPerformanceHistoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPermeableCoveringProperties\" type=\"ifc:IfcPermeableCoveringProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPermeableCoveringProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcPermeableCoveringOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPermit\" type=\"ifc:IfcPermit\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPermit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPermitTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPerson\" type=\"ifc:IfcPerson\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPerson\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Addresses\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAddress\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FamilyName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"GivenName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MiddleNames\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PrefixTitles\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"SuffixTitles\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPersonAndOrganization\" type=\"ifc:IfcPersonAndOrganization\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPersonAndOrganization\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ThePerson\" type=\"ifc:IfcPerson\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TheOrganization\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalComplexQuantity\" type=\"ifc:IfcPhysicalComplexQuantity\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalComplexQuantity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasQuantities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Discrimination\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Quality\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Usage\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalQuantity\" type=\"ifc:IfcPhysicalQuantity\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalQuantity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalSimpleQuantity\" type=\"ifc:IfcPhysicalSimpleQuantity\" abstract=\"true\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalSimpleQuantity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" type=\"ifc:IfcNamedUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPile\" type=\"ifc:IfcPile\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPile\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstructionType\" type=\"ifc:IfcPileConstructionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPileType\" type=\"ifc:IfcPileType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPileType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeFitting\" type=\"ifc:IfcPipeFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeFittingType\" type=\"ifc:IfcPipeFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeSegment\" type=\"ifc:IfcPipeSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeSegmentType\" type=\"ifc:IfcPipeSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPixelTexture\" type=\"ifc:IfcPixelTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPixelTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ColourComponents\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Pixel\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"xs:hexBinary\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlacement\" type=\"ifc:IfcPlacement\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlacement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Location\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlanarBox\" type=\"ifc:IfcPlanarBox\" substitutionGroup=\"ifc:IfcPlanarExtent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlanarBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlanarExtent\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Placement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlanarExtent\" type=\"ifc:IfcPlanarExtent\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlanarExtent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:attribute name=\"SizeInX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SizeInY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlane\" type=\"ifc:IfcPlane\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlane\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlate\" type=\"ifc:IfcPlate\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlateStandardCase\" type=\"ifc:IfcPlateStandardCase\" substitutionGroup=\"ifc:IfcPlate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlateStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlate\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlateType\" type=\"ifc:IfcPlateType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlateType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPoint\" type=\"ifc:IfcPoint\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPoint\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPointOnCurve\" type=\"ifc:IfcPointOnCurve\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPointOnCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PointParameter\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPointOnSurface\" type=\"ifc:IfcPointOnSurface\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPointOnSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PointParameterU\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PointParameterV\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolyLoop\" type=\"ifc:IfcPolyLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolyLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Polygon\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"3\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolygonalBoundedHalfSpace\" type=\"ifc:IfcPolygonalBoundedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolygonalBoundedHalfSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"PolygonalBoundary\" type=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolygonalFaceSet\" type=\"ifc:IfcPolygonalFaceSet\" substitutionGroup=\"ifc:IfcTessellatedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolygonalFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedFaceSet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Faces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIndexedPolygonalFace\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIndexedPolygonalFace\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Closed\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PnIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolyline\" type=\"ifc:IfcPolyline\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolyline\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Points\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPort\" type=\"ifc:IfcPort\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPort\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPostalAddress\" type=\"ifc:IfcPostalAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPostalAddress\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AddressLines\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"InternalLocation\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PostalBox\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Town\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Region\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PostalCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Country\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedColour\" type=\"ifc:IfcPreDefinedColour\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedColour\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedCurveFont\" type=\"ifc:IfcPreDefinedCurveFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedCurveFont\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedItem\" type=\"ifc:IfcPreDefinedItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedProperties\" type=\"ifc:IfcPreDefinedProperties\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedProperties\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedPropertySet\" type=\"ifc:IfcPreDefinedPropertySet\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedPropertySet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedTextFont\" type=\"ifc:IfcPreDefinedTextFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedTextFont\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationItem\" type=\"ifc:IfcPresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationLayerAssignment\" type=\"ifc:IfcPresentationLayerAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationLayerAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AssignedItems\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLayeredItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLayeredItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationLayerWithStyle\" type=\"ifc:IfcPresentationLayerWithStyle\" substitutionGroup=\"ifc:IfcPresentationLayerAssignment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationLayerWithStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationLayerAssignment\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LayerStyles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPresentationStyle\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPresentationStyle\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerOn\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LayerFrozen\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LayerBlocked\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationStyle\" type=\"ifc:IfcPresentationStyle\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationStyle\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationStyleAssignment\" type=\"ifc:IfcPresentationStyleAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationStyleAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPresentationStyleSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcedure\" type=\"ifc:IfcProcedure\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcedure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProcedureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcedureType\" type=\"ifc:IfcProcedureType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcedureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProcedureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcess\" type=\"ifc:IfcProcess\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcess\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProduct\" type=\"ifc:IfcProduct\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProduct\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ObjectPlacement\" type=\"ifc:IfcObjectPlacement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Representation\" type=\"ifc:IfcProductRepresentation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProductDefinitionShape\" type=\"ifc:IfcProductDefinitionShape\" substitutionGroup=\"ifc:IfcProductRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProductDefinitionShape\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasShapeAspects\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShapeAspect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProductRepresentation\" type=\"ifc:IfcProductRepresentation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProductRepresentation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Representations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentation\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProfileDef\" type=\"ifc:IfcProfileDef\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ProfileType\" type=\"ifc:IfcProfileTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProfileName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProfileProperties\" type=\"ifc:IfcProfileProperties\" substitutionGroup=\"ifc:IfcExtendedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProfileProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtendedProperties\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProject\" type=\"ifc:IfcProject\" substitutionGroup=\"ifc:IfcContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcContext\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectLibrary\" type=\"ifc:IfcProjectLibrary\" substitutionGroup=\"ifc:IfcContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectLibrary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcContext\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectOrder\" type=\"ifc:IfcProjectOrder\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectOrder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProjectOrderTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectedCRS\" type=\"ifc:IfcProjectedCRS\" substitutionGroup=\"ifc:IfcCoordinateReferenceSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectedCRS\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCoordinateReferenceSystem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MapUnit\" type=\"ifc:IfcNamedUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MapProjection\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MapZone\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectionElement\" type=\"ifc:IfcProjectionElement\" substitutionGroup=\"ifc:IfcFeatureElementAddition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectionElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementAddition\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProjectionElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProperty\" type=\"ifc:IfcProperty\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProperty\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyAbstraction\" type=\"ifc:IfcPropertyAbstraction\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyAbstraction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyBoundedValue\" type=\"ifc:IfcPropertyBoundedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyBoundedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UpperBoundValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LowerBoundValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SetPointValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyDefinition\" type=\"ifc:IfcPropertyDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyDependencyRelationship\" type=\"ifc:IfcPropertyDependencyRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyDependencyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DependingProperty\" type=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"DependantProperty\" type=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyEnumeratedValue\" type=\"ifc:IfcPropertyEnumeratedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyEnumeratedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EnumerationValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EnumerationReference\" type=\"ifc:IfcPropertyEnumeration\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyEnumeration\" type=\"ifc:IfcPropertyEnumeration\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyEnumeration\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyListValue\" type=\"ifc:IfcPropertyListValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyListValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyReferenceValue\" type=\"ifc:IfcPropertyReferenceValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyReferenceValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PropertyReference\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySet\" type=\"ifc:IfcPropertySet\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySetDefinition\" type=\"ifc:IfcPropertySetDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySetDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySetTemplate\" type=\"ifc:IfcPropertySetTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplateDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySetTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplateDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertyTemplates\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyTemplate\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertyTemplate\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcPropertySetTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicableEntity\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySingleValue\" type=\"ifc:IfcPropertySingleValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySingleValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"NominalValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTableValue\" type=\"ifc:IfcPropertyTableValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTableValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DefiningValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefinedValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefiningUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefinedUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveInterpolation\" type=\"ifc:IfcCurveInterpolationEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTemplate\" type=\"ifc:IfcPropertyTemplate\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyTemplateDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTemplate\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplateDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTemplateDefinition\" type=\"ifc:IfcPropertyTemplateDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTemplateDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDevice\" type=\"ifc:IfcProtectiveDevice\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceTrippingUnit\" type=\"ifc:IfcProtectiveDeviceTrippingUnit\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceTrippingUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceTrippingUnitType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceTrippingUnitType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceType\" type=\"ifc:IfcProtectiveDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProxy\" type=\"ifc:IfcProxy\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProxy\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:attribute name=\"ProxyType\" type=\"ifc:IfcObjectTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPump\" type=\"ifc:IfcPump\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPump\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPumpType\" type=\"ifc:IfcPumpType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPumpType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityArea\" type=\"ifc:IfcQuantityArea\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"AreaValue\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityCount\" type=\"ifc:IfcQuantityCount\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityCount\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"CountValue\" type=\"ifc:IfcCountMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityLength\" type=\"ifc:IfcQuantityLength\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityLength\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"LengthValue\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantitySet\" type=\"ifc:IfcQuantitySet\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantitySet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityTime\" type=\"ifc:IfcQuantityTime\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"TimeValue\" type=\"ifc:IfcTimeMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityVolume\" type=\"ifc:IfcQuantityVolume\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityVolume\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"VolumeValue\" type=\"ifc:IfcVolumeMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityWeight\" type=\"ifc:IfcQuantityWeight\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityWeight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"WeightValue\" type=\"ifc:IfcMassMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailing\" type=\"ifc:IfcRailing\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailing\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailingType\" type=\"ifc:IfcRailingType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRamp\" type=\"ifc:IfcRamp\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRamp\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampFlight\" type=\"ifc:IfcRampFlight\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampFlight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampFlightType\" type=\"ifc:IfcRampFlightType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampFlightType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampType\" type=\"ifc:IfcRampType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRationalBSplineCurveWithKnots\" type=\"ifc:IfcRationalBSplineCurveWithKnots\" substitutionGroup=\"ifc:IfcBSplineCurveWithKnots\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRationalBSplineCurveWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurveWithKnots\">\n\t\t\t\t<xs:attribute name=\"WeightsData\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRationalBSplineSurfaceWithKnots\" type=\"ifc:IfcRationalBSplineSurfaceWithKnots\" substitutionGroup=\"ifc:IfcBSplineSurfaceWithKnots\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRationalBSplineSurfaceWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineSurfaceWithKnots\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WeightsData\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\" minOccurs=\"4\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcReal-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangleHollowProfileDef\" type=\"ifc:IfcRectangleHollowProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangleHollowProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InnerFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OuterFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangleProfileDef\" type=\"ifc:IfcRectangleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangularPyramid\" type=\"ifc:IfcRectangularPyramid\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangularPyramid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangularTrimmedSurface\" type=\"ifc:IfcRectangularTrimmedSurface\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangularTrimmedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"U1\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"V1\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"U2\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"V2\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Usense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Vsense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRecurrencePattern\" type=\"ifc:IfcRecurrencePattern\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRecurrencePattern\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TimePeriods\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimePeriod\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTimePeriod\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RecurrenceType\" type=\"ifc:IfcRecurrenceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DayComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcDayInMonthNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"WeekdayComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcDayInWeekNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"MonthComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcMonthInYearNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Position\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Interval\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Occurrences\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReference\" type=\"ifc:IfcReference\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerReference\" type=\"ifc:IfcReference\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TypeIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AttributeIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InstanceName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ListPositions\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRegularTimeSeries\" type=\"ifc:IfcRegularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRegularTimeSeries\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeriesValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTimeSeriesValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TimeStep\" type=\"ifc:IfcTimeMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcementBarProperties\" type=\"ifc:IfcReinforcementBarProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcementBarProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:attribute name=\"TotalCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SteelGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EffectiveDepth\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalBarDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarCount\" type=\"ifc:IfcCountMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcementDefinitionProperties\" type=\"ifc:IfcReinforcementDefinitionProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcementDefinitionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReinforcementSectionDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionReinforcementProperties\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSectionReinforcementProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"DefinitionType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingBar\" type=\"ifc:IfcReinforcingBar\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingBar\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingBarTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingBarType\" type=\"ifc:IfcReinforcingBarType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingBarType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BendingParameters\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBendingParameterSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBendingParameterSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingBarTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BendingShapeCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingElement\" type=\"ifc:IfcReinforcingElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"SteelGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingElementType\" type=\"ifc:IfcReinforcingElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingMesh\" type=\"ifc:IfcReinforcingMesh\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingMesh\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"MeshLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingMeshTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingMeshType\" type=\"ifc:IfcReinforcingMeshType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingMeshType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BendingParameters\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBendingParameterSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBendingParameterSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingMeshTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BendingShapeCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAggregates\" type=\"ifc:IfcRelAggregates\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAggregates\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssigns\" type=\"ifc:IfcRelAssigns\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssigns\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RelatedObjectsType\" type=\"ifc:IfcObjectTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToActor\" type=\"ifc:IfcRelAssignsToActor\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToActor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingActor\" type=\"ifc:IfcActor\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ActingRole\" type=\"ifc:IfcActorRole\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToControl\" type=\"ifc:IfcRelAssignsToControl\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToControl\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingControl\" type=\"ifc:IfcControl\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToGroup\" type=\"ifc:IfcRelAssignsToGroup\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingGroup\" type=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToGroupByFactor\" type=\"ifc:IfcRelAssignsToGroupByFactor\" substitutionGroup=\"ifc:IfcRelAssignsToGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToGroupByFactor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToGroup\">\n\t\t\t\t<xs:attribute name=\"Factor\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToProcess\" type=\"ifc:IfcRelAssignsToProcess\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToProcess\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcProcessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"QuantityInProcess\" type=\"ifc:IfcMeasureWithUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToProduct\" type=\"ifc:IfcRelAssignsToProduct\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToProduct\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProduct\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcProductSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToResource\" type=\"ifc:IfcRelAssignsToResource\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingResource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociates\" type=\"ifc:IfcRelAssociates\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociates\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinitionSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDefinitionSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesApproval\" type=\"ifc:IfcRelAssociatesApproval\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesApproval\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesClassification\" type=\"ifc:IfcRelAssociatesClassification\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesClassification\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingClassification\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesConstraint\" type=\"ifc:IfcRelAssociatesConstraint\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesConstraint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\" type=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Intent\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesDocument\" type=\"ifc:IfcRelAssociatesDocument\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesDocument\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesLibrary\" type=\"ifc:IfcRelAssociatesLibrary\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesLibrary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingLibrary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLibrarySelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesMaterial\" type=\"ifc:IfcRelAssociatesMaterial\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesMaterial\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMaterialSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnects\" type=\"ifc:IfcRelConnects\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnects\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsElements\" type=\"ifc:IfcRelConnectsElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RelatingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPathElements\" type=\"ifc:IfcRelConnectsPathElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPathElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\n\t\t\t\t<xs:attribute name=\"RelatingPriorities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"0\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"RelatedPriorities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"0\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"RelatedConnectionType\" type=\"ifc:IfcConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RelatingConnectionType\" type=\"ifc:IfcConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPortToElement\" type=\"ifc:IfcRelConnectsPortToElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPortToElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPorts\" type=\"ifc:IfcRelConnectsPorts\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPorts\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RealizingElement\" type=\"ifc:IfcElement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsStructuralActivity\" type=\"ifc:IfcRelConnectsStructuralActivity\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsStructuralActivity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralActivity\" type=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsStructuralMember\" type=\"ifc:IfcRelConnectsStructuralMember\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsStructuralMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingStructuralMember\" type=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralConnection\" type=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" type=\"ifc:IfcBoundaryCondition\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"AdditionalConditions\" type=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ConditionCoordinateSystem\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SupportedLength\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsWithEccentricity\" type=\"ifc:IfcRelConnectsWithEccentricity\" substitutionGroup=\"ifc:IfcRelConnectsStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsWithEccentricity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConnectionConstraint\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsWithRealizingElements\" type=\"ifc:IfcRelConnectsWithRealizingElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsWithRealizingElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RealizingElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ConnectionType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelContainedInSpatialStructure\" type=\"ifc:IfcRelContainedInSpatialStructure\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelContainedInSpatialStructure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProduct\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelCoversBldgElements\" type=\"ifc:IfcRelCoversBldgElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelCoversBldgElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCovering\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelCoversSpaces\" type=\"ifc:IfcRelCoversSpaces\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelCoversSpaces\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSpace\" type=\"ifc:IfcSpace\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCovering\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDeclares\" type=\"ifc:IfcRelDeclares\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDeclares\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinitionSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDefinitionSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDecomposes\" type=\"ifc:IfcRelDecomposes\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDecomposes\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefines\" type=\"ifc:IfcRelDefines\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefines\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByObject\" type=\"ifc:IfcRelDefinesByObject\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByObject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObject\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByProperties\" type=\"ifc:IfcRelDefinesByProperties\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPropertyDefinition\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPropertySetDefinitionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByTemplate\" type=\"ifc:IfcRelDefinesByTemplate\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedPropertySets\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingTemplate\" type=\"ifc:IfcPropertySetTemplate\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByType\" type=\"ifc:IfcRelDefinesByType\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingType\" type=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelFillsElement\" type=\"ifc:IfcRelFillsElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelFillsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelFlowControlElements\" type=\"ifc:IfcRelFlowControlElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelFlowControlElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedControlElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionControlElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDistributionControlElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingFlowElement\" type=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelInterferesElements\" type=\"ifc:IfcRelInterferesElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelInterferesElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InterferenceGeometry\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"InterferenceType\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ImpliedOrder\" type=\"ifc:logical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelNests\" type=\"ifc:IfcRelNests\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelNests\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelProjectsElement\" type=\"ifc:IfcRelProjectsElement\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelProjectsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedFeatureElement\" type=\"ifc:IfcFeatureElementAddition\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelReferencedInSpatialStructure\" type=\"ifc:IfcRelReferencedInSpatialStructure\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelReferencedInSpatialStructure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProduct\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSequence\" type=\"ifc:IfcRelSequence\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSequence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProcess\" type=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedProcess\" type=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TimeLag\" type=\"ifc:IfcLagTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SequenceType\" type=\"ifc:IfcSequenceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedSequenceType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelServicesBuildings\" type=\"ifc:IfcRelServicesBuildings\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelServicesBuildings\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSystem\" type=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedBuildings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSpatialElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary\" type=\"ifc:IfcRelSpaceBoundary\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSpace\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpaceBoundarySelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PhysicalOrVirtualBoundary\" type=\"ifc:IfcPhysicalOrVirtualEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InternalOrExternalBoundary\" type=\"ifc:IfcInternalOrExternalEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary1stLevel\" type=\"ifc:IfcRelSpaceBoundary1stLevel\" substitutionGroup=\"ifc:IfcRelSpaceBoundary\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary1stLevel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelSpaceBoundary\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentBoundary\" type=\"ifc:IfcRelSpaceBoundary1stLevel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary2ndLevel\" type=\"ifc:IfcRelSpaceBoundary2ndLevel\" substitutionGroup=\"ifc:IfcRelSpaceBoundary1stLevel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary2ndLevel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelSpaceBoundary1stLevel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CorrespondingBoundary\" type=\"ifc:IfcRelSpaceBoundary2ndLevel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelVoidsElement\" type=\"ifc:IfcRelVoidsElement\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelVoidsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedOpeningElement\" type=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelationship\" type=\"ifc:IfcRelationship\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelationship\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReparametrisedCompositeCurveSegment\" type=\"ifc:IfcReparametrisedCompositeCurveSegment\" substitutionGroup=\"ifc:IfcCompositeCurveSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReparametrisedCompositeCurveSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurveSegment\">\n\t\t\t\t<xs:attribute name=\"ParamLength\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentation\" type=\"ifc:IfcRepresentation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContextOfItems\" type=\"ifc:IfcRepresentationContext\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Items\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RepresentationIdentifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RepresentationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationContext\" type=\"ifc:IfcRepresentationContext\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationContext\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"ContextIdentifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ContextType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationItem\" type=\"ifc:IfcRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StyledByItem\" type=\"ifc:IfcStyledItem\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationMap\" type=\"ifc:IfcRepresentationMap\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MappingOrigin\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MappedRepresentation\" type=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResource\" type=\"ifc:IfcResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceApprovalRelationship\" type=\"ifc:IfcResourceApprovalRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceApprovalRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceConstraintRelationship\" type=\"ifc:IfcResourceConstraintRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceConstraintRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\" type=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceLevelRelationship\" type=\"ifc:IfcResourceLevelRelationship\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceLevelRelationship\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceTime\" type=\"ifc:IfcResourceTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"ScheduleWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleContour\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LevelingDelay\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsOverAllocated\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StatusTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Completion\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRevolvedAreaSolid\" type=\"ifc:IfcRevolvedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRevolvedAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcAxis1Placement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Angle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRevolvedAreaSolidTapered\" type=\"ifc:IfcRevolvedAreaSolidTapered\" substitutionGroup=\"ifc:IfcRevolvedAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRevolvedAreaSolidTapered\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRevolvedAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EndSweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRightCircularCone\" type=\"ifc:IfcRightCircularCone\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRightCircularCone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRightCircularCylinder\" type=\"ifc:IfcRightCircularCylinder\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRightCircularCylinder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoof\" type=\"ifc:IfcRoof\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoof\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRoofTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoofType\" type=\"ifc:IfcRoofType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoofType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRoofTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoot\" type=\"ifc:IfcRoot\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoot\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OwnerHistory\" type=\"ifc:IfcOwnerHistory\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"GlobalId\" type=\"ifc:IfcGloballyUniqueId\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoundedRectangleProfileDef\" type=\"ifc:IfcRoundedRectangleProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoundedRectangleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\n\t\t\t\t<xs:attribute name=\"RoundingRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcSIUnit-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:sequence/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSIUnit\" type=\"ifc:IfcSIUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSIUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSIUnit-temp\">\n\t\t\t\t<xs:attribute name=\"Prefix\" type=\"ifc:IfcSIPrefix\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcSIUnitName\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSanitaryTerminal\" type=\"ifc:IfcSanitaryTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSanitaryTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSanitaryTerminalType\" type=\"ifc:IfcSanitaryTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSanitaryTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSchedulingTime\" type=\"ifc:IfcSchedulingTime\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSchedulingTime\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedDataOrigin\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSeamCurve\" type=\"ifc:IfcSeamCurve\" substitutionGroup=\"ifc:IfcSurfaceCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSeamCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionProperties\" type=\"ifc:IfcSectionProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StartProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"EndProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SectionType\" type=\"ifc:IfcSectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionReinforcementProperties\" type=\"ifc:IfcSectionReinforcementProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionReinforcementProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SectionDefinition\" type=\"ifc:IfcSectionProperties\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CrossSectionReinforcementDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReinforcementBarProperties\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcReinforcementBarProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LongitudinalStartPosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalEndPosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransversePosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReinforcementRole\" type=\"ifc:IfcReinforcingBarRoleEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionedSpine\" type=\"ifc:IfcSectionedSpine\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionedSpine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SpineCurve\" type=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CrossSections\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CrossSectionPositions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAxis2Placement3D\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSensor\" type=\"ifc:IfcSensor\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSensor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSensorType\" type=\"ifc:IfcSensorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSensorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShadingDevice\" type=\"ifc:IfcShadingDevice\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShadingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcShadingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShadingDeviceType\" type=\"ifc:IfcShadingDeviceType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShadingDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcShadingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeAspect\" type=\"ifc:IfcShapeAspect\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeAspect\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeRepresentations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeModel\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShapeModel\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProductDefinitional\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeModel\" type=\"ifc:IfcShapeModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeRepresentation\" type=\"ifc:IfcShapeRepresentation\" substitutionGroup=\"ifc:IfcShapeModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShellBasedSurfaceModel\" type=\"ifc:IfcShellBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShellBasedSurfaceModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SbsmBoundary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSimpleProperty\" type=\"ifc:IfcSimpleProperty\" abstract=\"true\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSimpleProperty\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProperty\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSimplePropertyTemplate\" type=\"ifc:IfcSimplePropertyTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSimplePropertyTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Enumerators\" type=\"ifc:IfcPropertyEnumeration\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PrimaryUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondaryUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcSimplePropertyTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PrimaryMeasureType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondaryMeasureType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AccessState\" type=\"ifc:IfcStateEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSite\" type=\"ifc:IfcSite\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSite\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SiteAddress\" type=\"ifc:IfcPostalAddress\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RefLatitude\" type=\"ifc:List-IfcCompoundPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RefLongitude\" type=\"ifc:List-IfcCompoundPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RefElevation\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LandTitleNumber\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlab\" type=\"ifc:IfcSlab\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlab\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlabElementedCase\" type=\"ifc:IfcSlabElementedCase\" substitutionGroup=\"ifc:IfcSlab\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlabElementedCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSlab\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlabStandardCase\" type=\"ifc:IfcSlabStandardCase\" substitutionGroup=\"ifc:IfcSlab\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlabStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSlab\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlabType\" type=\"ifc:IfcSlabType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlabType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlippageConnectionCondition\" type=\"ifc:IfcSlippageConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlippageConnectionCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t<xs:attribute name=\"SlippageX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SlippageY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SlippageZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolarDevice\" type=\"ifc:IfcSolarDevice\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolarDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSolarDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolarDeviceType\" type=\"ifc:IfcSolarDeviceType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolarDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSolarDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolidModel\" type=\"ifc:IfcSolidModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolidModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpace\" type=\"ifc:IfcSpace\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElevationWithFlooring\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceHeater\" type=\"ifc:IfcSpaceHeater\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceHeater\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceHeaterType\" type=\"ifc:IfcSpaceHeaterType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceHeaterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceType\" type=\"ifc:IfcSpaceType\" substitutionGroup=\"ifc:IfcSpatialStructureElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialElement\" type=\"ifc:IfcSpatialElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContainsElements\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelContainedInSpatialStructure\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelContainedInSpatialStructure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencesElements\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelReferencedInSpatialStructure\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelReferencedInSpatialStructure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialElementType\" type=\"ifc:IfcSpatialElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ElementType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialStructureElement\" type=\"ifc:IfcSpatialStructureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialStructureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\">\n\t\t\t\t<xs:attribute name=\"CompositionType\" type=\"ifc:IfcElementCompositionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialStructureElementType\" type=\"ifc:IfcSpatialStructureElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialStructureElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialZone\" type=\"ifc:IfcSpatialZone\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialZone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpatialZoneTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialZoneType\" type=\"ifc:IfcSpatialZoneType\" substitutionGroup=\"ifc:IfcSpatialElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialZoneType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpatialZoneTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSphere\" type=\"ifc:IfcSphere\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSphere\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSphericalSurface\" type=\"ifc:IfcSphericalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSphericalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStackTerminal\" type=\"ifc:IfcStackTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStackTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStackTerminalType\" type=\"ifc:IfcStackTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStackTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStair\" type=\"ifc:IfcStair\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStair\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairFlight\" type=\"ifc:IfcStairFlight\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairFlight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"NumberOfRisers\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NumberOfTreads\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RiserHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TreadLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairFlightType\" type=\"ifc:IfcStairFlightType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairFlightType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairType\" type=\"ifc:IfcStairType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralAction\" type=\"ifc:IfcStructuralAction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralAction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\">\n\t\t\t\t<xs:attribute name=\"DestabilizingLoad\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralActivity\" type=\"ifc:IfcStructuralActivity\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralActivity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedLoad\" type=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"GlobalOrLocal\" type=\"ifc:IfcGlobalOrLocalEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralAnalysisModel\" type=\"ifc:IfcStructuralAnalysisModel\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralAnalysisModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OrientationOf2DPlane\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LoadedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralLoadGroup\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasResults\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralResultGroup\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralResultGroup\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SharedPlacement\" type=\"ifc:IfcObjectPlacement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAnalysisModelTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralConnection\" type=\"ifc:IfcStructuralConnection\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralConnection\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" type=\"ifc:IfcBoundaryCondition\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralConnectionCondition\" type=\"ifc:IfcStructuralConnectionCondition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralConnectionCondition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveAction\" type=\"ifc:IfcStructuralCurveAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\n\t\t\t\t<xs:attribute name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveConnection\" type=\"ifc:IfcStructuralCurveConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveMember\" type=\"ifc:IfcStructuralCurveMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveMemberVarying\" type=\"ifc:IfcStructuralCurveMemberVarying\" substitutionGroup=\"ifc:IfcStructuralCurveMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveMemberVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveReaction\" type=\"ifc:IfcStructuralCurveReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralItem\" type=\"ifc:IfcStructuralItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLinearAction\" type=\"ifc:IfcStructuralLinearAction\" substitutionGroup=\"ifc:IfcStructuralCurveAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLinearAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoad\" type=\"ifc:IfcStructuralLoad\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoad\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadCase\" type=\"ifc:IfcStructuralLoadCase\" substitutionGroup=\"ifc:IfcStructuralLoadGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadGroup\">\n\t\t\t\t<xs:attribute name=\"SelfWeightCoefficients\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcRatioMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadConfiguration\" type=\"ifc:IfcStructuralLoadConfiguration\" substitutionGroup=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadConfiguration\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadOrResult\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralLoadOrResult\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Locations\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\" minOccurs=\"1\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadGroup\" type=\"ifc:IfcStructuralLoadGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLoadGroupTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActionType\" type=\"ifc:IfcActionTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActionSource\" type=\"ifc:IfcActionSourceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Coefficient\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadLinearForce\" type=\"ifc:IfcStructuralLoadLinearForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadLinearForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"LinearForceX\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearForceY\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearForceZ\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentX\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentY\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentZ\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadOrResult\" type=\"ifc:IfcStructuralLoadOrResult\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadOrResult\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadPlanarForce\" type=\"ifc:IfcStructuralLoadPlanarForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadPlanarForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"PlanarForceX\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PlanarForceY\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PlanarForceZ\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacement\" type=\"ifc:IfcStructuralLoadSingleDisplacement\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"DisplacementX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DisplacementY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DisplacementZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRX\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRY\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRZ\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacementDistortion\" type=\"ifc:IfcStructuralLoadSingleDisplacementDistortion\" substitutionGroup=\"ifc:IfcStructuralLoadSingleDisplacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacementDistortion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleDisplacement\">\n\t\t\t\t<xs:attribute name=\"Distortion\" type=\"ifc:IfcCurvatureMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleForce\" type=\"ifc:IfcStructuralLoadSingleForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"ForceX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ForceY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ForceZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentX\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentY\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentZ\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleForceWarping\" type=\"ifc:IfcStructuralLoadSingleForceWarping\" substitutionGroup=\"ifc:IfcStructuralLoadSingleForce\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleForceWarping\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleForce\">\n\t\t\t\t<xs:attribute name=\"WarpingMoment\" type=\"ifc:IfcWarpingMomentMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadStatic\" type=\"ifc:IfcStructuralLoadStatic\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralLoadOrResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadStatic\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadOrResult\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadTemperature\" type=\"ifc:IfcStructuralLoadTemperature\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadTemperature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"DeltaTConstant\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DeltaTY\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DeltaTZ\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralMember\" type=\"ifc:IfcStructuralMember\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralMember\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPlanarAction\" type=\"ifc:IfcStructuralPlanarAction\" substitutionGroup=\"ifc:IfcStructuralSurfaceAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPlanarAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointAction\" type=\"ifc:IfcStructuralPointAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointConnection\" type=\"ifc:IfcStructuralPointConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConditionCoordinateSystem\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointReaction\" type=\"ifc:IfcStructuralPointReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralReaction\" type=\"ifc:IfcStructuralReaction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralReaction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralResultGroup\" type=\"ifc:IfcStructuralResultGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralResultGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ResultForLoadGroup\" type=\"ifc:IfcStructuralLoadGroup\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TheoryType\" type=\"ifc:IfcAnalysisTheoryTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsLinear\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceAction\" type=\"ifc:IfcStructuralSurfaceAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\n\t\t\t\t<xs:attribute name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceConnection\" type=\"ifc:IfcStructuralSurfaceConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceMember\" type=\"ifc:IfcStructuralSurfaceMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceMemberTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceMemberVarying\" type=\"ifc:IfcStructuralSurfaceMemberVarying\" substitutionGroup=\"ifc:IfcStructuralSurfaceMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceMemberVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceReaction\" type=\"ifc:IfcStructuralSurfaceReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyleModel\" type=\"ifc:IfcStyleModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyleModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyledItem\" type=\"ifc:IfcStyledItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyledItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcStyleAssignmentSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStyleAssignmentSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyledRepresentation\" type=\"ifc:IfcStyledRepresentation\" substitutionGroup=\"ifc:IfcStyleModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyledRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStyleModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubContractResource\" type=\"ifc:IfcSubContractResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubContractResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSubContractResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubContractResourceType\" type=\"ifc:IfcSubContractResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubContractResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSubContractResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubedge\" type=\"ifc:IfcSubedge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubedge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentEdge\" type=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurface\" type=\"ifc:IfcSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceCurve\" type=\"ifc:IfcSurfaceCurve\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Curve3D\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"AssociatedGeometry\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPcurve\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPcurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MasterRepresentation\" type=\"ifc:IfcPreferredSurfaceCurveRepresentation\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceCurveSweptAreaSolid\" type=\"ifc:IfcSurfaceCurveSweptAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceCurveSweptAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReferenceSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"StartParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceFeature\" type=\"ifc:IfcSurfaceFeature\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceFeature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSurfaceFeatureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceOfLinearExtrusion\" type=\"ifc:IfcSurfaceOfLinearExtrusion\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceOfLinearExtrusion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceOfRevolution\" type=\"ifc:IfcSurfaceOfRevolution\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceOfRevolution\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisPosition\" type=\"ifc:IfcAxis1Placement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceReinforcementArea\" type=\"ifc:IfcSurfaceReinforcementArea\" substitutionGroup=\"ifc:IfcStructuralLoadOrResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceReinforcementArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadOrResult\">\n\t\t\t\t<xs:attribute name=\"SurfaceReinforcement1\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"SurfaceReinforcement2\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"ShearReinforcement\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyle\" type=\"ifc:IfcSurfaceStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\" maxOccurs=\"5\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceStyleElementSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Side\" type=\"ifc:IfcSurfaceSide\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleLighting\" type=\"ifc:IfcSurfaceStyleLighting\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleLighting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"DiffuseReflectionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TransmissionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReflectanceColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleRefraction\" type=\"ifc:IfcSurfaceStyleRefraction\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleRefraction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"RefractionIndex\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DispersionFactor\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleRendering\" type=\"ifc:IfcSurfaceStyleRendering\" substitutionGroup=\"ifc:IfcSurfaceStyleShading\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleRendering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceStyleShading\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DiffuseColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TransmissionColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReflectionColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SpecularColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SpecularHighlight\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ReflectanceMethod\" type=\"ifc:IfcReflectanceMethodEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleShading\" type=\"ifc:IfcSurfaceStyleShading\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleShading\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SurfaceColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Transparency\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleWithTextures\" type=\"ifc:IfcSurfaceStyleWithTextures\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleWithTextures\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Textures\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceTexture\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceTexture\" type=\"ifc:IfcSurfaceTexture\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceTexture\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextureTransform\" type=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RepeatS\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RepeatT\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Mode\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Parameter\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcIdentifier\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptAreaSolid\" type=\"ifc:IfcSweptAreaSolid\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptAreaSolid\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptDiskSolid\" type=\"ifc:IfcSweptDiskSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptDiskSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InnerRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptDiskSolidPolygonal\" type=\"ifc:IfcSweptDiskSolidPolygonal\" substitutionGroup=\"ifc:IfcSweptDiskSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptDiskSolidPolygonal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptDiskSolid\">\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptSurface\" type=\"ifc:IfcSweptSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SweptCurve\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSwitchingDevice\" type=\"ifc:IfcSwitchingDevice\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSwitchingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSwitchingDeviceType\" type=\"ifc:IfcSwitchingDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSwitchingDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystem\" type=\"ifc:IfcSystem\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystemFurnitureElement\" type=\"ifc:IfcSystemFurnitureElement\" substitutionGroup=\"ifc:IfcFurnishingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystemFurnitureElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSystemFurnitureElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystemFurnitureElementType\" type=\"ifc:IfcSystemFurnitureElementType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystemFurnitureElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSystemFurnitureElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTShapeProfileDef\" type=\"ifc:IfcTShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTable\" type=\"ifc:IfcTable\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTable\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Rows\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableRow\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTableRow\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Columns\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableColumn\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTableColumn\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTableColumn\" type=\"ifc:IfcTableColumn\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTableColumn\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencePath\" type=\"ifc:IfcReference\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTableRow\" type=\"ifc:IfcTableRow\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTableRow\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RowCells\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"IsHeading\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTank\" type=\"ifc:IfcTank\" substitutionGroup=\"ifc:IfcFlowStorageDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTank\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTankType\" type=\"ifc:IfcTankType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTankType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTask\" type=\"ifc:IfcTask\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTask\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TaskTime\" type=\"ifc:IfcTaskTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WorkMethod\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsMilestone\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTaskTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskTime\" type=\"ifc:IfcTaskTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"DurationType\" type=\"ifc:IfcTaskDurationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleDuration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FreeFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TotalFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsCritical\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StatusTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualDuration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingTime\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Completion\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskTimeRecurring\" type=\"ifc:IfcTaskTimeRecurring\" substitutionGroup=\"ifc:IfcTaskTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskTimeRecurring\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTaskTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Recurrence\" type=\"ifc:IfcRecurrencePattern\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskType\" type=\"ifc:IfcTaskType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTaskTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WorkMethod\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTelecomAddress\" type=\"ifc:IfcTelecomAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTelecomAddress\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\n\t\t\t\t<xs:attribute name=\"TelephoneNumbers\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"FacsimileNumbers\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PagerNumber\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectronicMailAddresses\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"WWWHomePageURL\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MessagingIDs\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcURIReference\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendon\" type=\"ifc:IfcTendon\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendon\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionForce\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PreStress\" type=\"ifc:IfcPressureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrictionCoefficient\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AnchorageSlip\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MinCurvatureRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonAnchor\" type=\"ifc:IfcTendonAnchor\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonAnchor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonAnchorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonAnchorType\" type=\"ifc:IfcTendonAnchorType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonAnchorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonAnchorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonType\" type=\"ifc:IfcTendonType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SheathDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTessellatedFaceSet\" type=\"ifc:IfcTessellatedFaceSet\" abstract=\"true\" substitutionGroup=\"ifc:IfcTessellatedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTessellatedFaceSet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Coordinates\" type=\"ifc:IfcCartesianPointList3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"HasColours\" type=\"ifc:IfcIndexedColourMap\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"HasTextures\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIndexedTextureMap\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIndexedTextureMap\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTessellatedItem\" type=\"ifc:IfcTessellatedItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTessellatedItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextLiteral\" type=\"ifc:IfcTextLiteral\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextLiteral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Placement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Literal\" type=\"ifc:IfcPresentableText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Path\" type=\"ifc:IfcTextPath\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextLiteralWithExtent\" type=\"ifc:IfcTextLiteralWithExtent\" substitutionGroup=\"ifc:IfcTextLiteral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextLiteralWithExtent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextLiteral\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Extent\" type=\"ifc:IfcPlanarExtent\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"BoxAlignment\" type=\"ifc:IfcBoxAlignment\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyle\" type=\"ifc:IfcTextStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextCharacterAppearance\" type=\"ifc:IfcTextStyleForDefinedFont\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TextStyle\" type=\"ifc:IfcTextStyleTextModel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TextFontStyle\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTextFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelOrDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleFontModel\" type=\"ifc:IfcTextStyleFontModel\" substitutionGroup=\"ifc:IfcPreDefinedTextFont\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleFontModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedTextFont\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FontFamily\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextFontName-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTextFontName-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FontSize\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"FontStyle\" type=\"ifc:IfcFontStyle\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FontVariant\" type=\"ifc:IfcFontVariant\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FontWeight\" type=\"ifc:IfcFontWeight\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleForDefinedFont\" type=\"ifc:IfcTextStyleForDefinedFont\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleForDefinedFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Colour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BackgroundColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleTextModel\" type=\"ifc:IfcTextStyleTextModel\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleTextModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextIndent\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LetterSpacing\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WordSpacing\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LineHeight\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TextAlign\" type=\"ifc:IfcTextAlignment\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TextDecoration\" type=\"ifc:IfcTextDecoration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TextTransform\" type=\"ifc:IfcTextTransformation\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinate\" type=\"ifc:IfcTextureCoordinate\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinate\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Maps\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceTexture\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinateGenerator\" type=\"ifc:IfcTextureCoordinateGenerator\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinateGenerator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:attribute name=\"Mode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Parameter\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureMap\" type=\"ifc:IfcTextureMap\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Vertices\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextureVertex\" minOccurs=\"3\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTextureVertex\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MappedTo\" type=\"ifc:IfcFace\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureVertex\" type=\"ifc:IfcTextureVertex\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureVertex\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Coordinates\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureVertexList\" type=\"ifc:IfcTextureVertexList\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureVertexList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"TexCoordsList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimePeriod\" type=\"ifc:IfcTimePeriod\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimePeriod\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndTime\" type=\"ifc:IfcTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimeSeries\" type=\"ifc:IfcTimeSeries\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimeSeries\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeSeriesDataType\" type=\"ifc:IfcTimeSeriesDataTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedDataOrigin\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimeSeriesValue\" type=\"ifc:IfcTimeSeriesValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimeSeriesValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTopologicalRepresentationItem\" type=\"ifc:IfcTopologicalRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTopologicalRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTopologyRepresentation\" type=\"ifc:IfcTopologyRepresentation\" substitutionGroup=\"ifc:IfcShapeModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTopologyRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcToroidalSurface\" type=\"ifc:IfcToroidalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcToroidalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"MajorRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MinorRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransformer\" type=\"ifc:IfcTransformer\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransformer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransformerType\" type=\"ifc:IfcTransformerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransformerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportElement\" type=\"ifc:IfcTransportElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportElementType\" type=\"ifc:IfcTransportElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrapeziumProfileDef\" type=\"ifc:IfcTrapeziumProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrapeziumProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"BottomXDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopXDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopXOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTriangulatedFaceSet\" type=\"ifc:IfcTriangulatedFaceSet\" substitutionGroup=\"ifc:IfcTessellatedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTriangulatedFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedFaceSet\">\n\t\t\t\t<xs:attribute name=\"Normals\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Closed\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PnIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrimmedCurve\" type=\"ifc:IfcTrimmedCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrimmedCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Trim1\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Trim2\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SenseAgreement\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MasterRepresentation\" type=\"ifc:IfcTrimmingPreference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTubeBundle\" type=\"ifc:IfcTubeBundle\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTubeBundle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTubeBundleType\" type=\"ifc:IfcTubeBundleType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTubeBundleType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeObject\" type=\"ifc:IfcTypeObject\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeObject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertySets\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ApplicableOccurrence\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeProcess\" type=\"ifc:IfcTypeProcess\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeProcess\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProcessType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeProduct\" type=\"ifc:IfcTypeProduct\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeProduct\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepresentationMaps\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationMap\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeResource\" type=\"ifc:IfcTypeResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ResourceType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUShapeProfileDef\" type=\"ifc:IfcUShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitAssignment\" type=\"ifc:IfcUnitAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Units\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryControlElement\" type=\"ifc:IfcUnitaryControlElement\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryControlElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryControlElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryControlElementType\" type=\"ifc:IfcUnitaryControlElementType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryControlElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryControlElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryEquipment\" type=\"ifc:IfcUnitaryEquipment\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryEquipment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryEquipmentType\" type=\"ifc:IfcUnitaryEquipmentType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryEquipmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcValve\" type=\"ifc:IfcValve\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcValve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcValveType\" type=\"ifc:IfcValveType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcValveType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVector\" type=\"ifc:IfcVector\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVector\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Magnitude\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertex\" type=\"ifc:IfcVertex\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertex\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertexLoop\" type=\"ifc:IfcVertexLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertexLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LoopVertex\" type=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertexPoint\" type=\"ifc:IfcVertexPoint\" substitutionGroup=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertexPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcVertex\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VertexGeometry\" type=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationIsolator\" type=\"ifc:IfcVibrationIsolator\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationIsolator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationIsolatorType\" type=\"ifc:IfcVibrationIsolatorType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationIsolatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVirtualElement\" type=\"ifc:IfcVirtualElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVirtualElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVirtualGridIntersection\" type=\"ifc:IfcVirtualGridIntersection\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVirtualGridIntersection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IntersectingAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" minOccurs=\"2\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OffsetDistances\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVoidingFeature\" type=\"ifc:IfcVoidingFeature\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVoidingFeature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVoidingFeatureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWall\" type=\"ifc:IfcWall\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWall\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallElementedCase\" type=\"ifc:IfcWallElementedCase\" substitutionGroup=\"ifc:IfcWall\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallElementedCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWall\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallStandardCase\" type=\"ifc:IfcWallStandardCase\" substitutionGroup=\"ifc:IfcWall\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWall\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallType\" type=\"ifc:IfcWallType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWasteTerminal\" type=\"ifc:IfcWasteTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWasteTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWasteTerminalType\" type=\"ifc:IfcWasteTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWasteTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindow\" type=\"ifc:IfcWindow\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindow\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWindowTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PartitioningType\" type=\"ifc:IfcWindowTypePartitioningEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPartitioningType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowLiningProperties\" type=\"ifc:IfcWindowLiningProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowLiningProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MullionThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FirstTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FirstMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowPanelProperties\" type=\"ifc:IfcWindowPanelProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowPanelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcWindowPanelOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowStandardCase\" type=\"ifc:IfcWindowStandardCase\" substitutionGroup=\"ifc:IfcWindow\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWindow\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowStyle\" type=\"ifc:IfcWindowStyle\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ConstructionType\" type=\"ifc:IfcWindowStyleConstructionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcWindowStyleOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Sizeable\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowType\" type=\"ifc:IfcWindowType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWindowTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PartitioningType\" type=\"ifc:IfcWindowTypePartitioningEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPartitioningType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkCalendar\" type=\"ifc:IfcWorkCalendar\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkCalendar\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WorkingTimes\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcWorkTime\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcWorkTime\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ExceptionTimes\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcWorkTime\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcWorkTime\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkCalendarTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkControl\" type=\"ifc:IfcWorkControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkControl\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Creators\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPerson\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CreationDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Duration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TotalFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FinishTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkPlan\" type=\"ifc:IfcWorkPlan\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkPlan\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkPlanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkSchedule\" type=\"ifc:IfcWorkSchedule\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkScheduleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkTime\" type=\"ifc:IfcWorkTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RecurrencePattern\" type=\"ifc:IfcRecurrencePattern\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Start\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Finish\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcZShapeProfileDef\" type=\"ifc:IfcZShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcZShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcZone\" type=\"ifc:IfcZone\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcZone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<!-- group declarations (for SELECT data type definitions) -->\n\t<xs:group name=\"IfcActorSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcAppliedValueSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcAxis2Placement\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcBendingParameterSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcBooleanOperand\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHalfSpaceSolid\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTessellatedFaceSet\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcClassificationReferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcClassificationSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcColour\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcColourOrFactor\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCoordinateReferenceSystemSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCoordinateReferenceSystem\"/>\n\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationContext\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCsgSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveFontOrScaledCurveFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontAndScaling\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveOnSurface\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCompositeCurveOnSurface\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPcurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveOrEdgeCurve\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEdgeCurve\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveStyleFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDefinitionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDerivedMeasureValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDocumentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcFillStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedHatchStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleHatching\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTiles\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcGeometricSetSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcGridPlacementDirectionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcHatchLineDistanceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLayeredItem\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLibrarySelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLightDistributionDataSourceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLightIntensityDistribution\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMaterialSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialUsageDefinition\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMeasureValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMetricValueSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTable\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfRotationalSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfTranslationalSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcObjectReferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAddress\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTable\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPointOrVertexPoint\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVertexPoint\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPresentationStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNullStyle-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTextStyle\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProcessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProcess\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeProcess\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProductRepresentationSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProductDefinitionShape\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProductSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProduct\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeProduct\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPropertySetDefinitionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinitionSet-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcResourceObjectSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcActorRole\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\n\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcConversionBasedUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertyAbstraction\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcResourceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcResource\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeResource\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcRotationalStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSegmentIndexSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcArcIndex-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLineIndex-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcShell\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOpenShell\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSimpleValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSizeSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSolidOrShell\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSpaceBoundarySelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternalSpatialElement\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpace\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSpecularHighlightSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcSpecularExponent-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecularRoughness-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcStructuralActivityAssignmentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\n\t\t\t<xs:element ref=\"ifc:IfcStructuralItem\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcStyleAssignmentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPresentationStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPresentationStyleAssignment\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSurfaceOrFaceSurface\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcFaceBasedSurfaceModel\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFaceSurface\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSurfaceStyleElementSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSurfaceStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleLighting\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleRefraction\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleShading\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleWithTextures\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTextFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedTextFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedTextFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTimeOrRatioSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTranslationalStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTrimmingSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcUnit\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDerivedUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcVectorOrDirection\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcWarpingStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<!-- enumeration type declarations (for ENUMERATION data type definitions) -->\n\t<xs:simpleType name=\"IfcActionRequestTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"email\"/>\n\t\t\t<xs:enumeration value=\"fax\"/>\n\t\t\t<xs:enumeration value=\"phone\"/>\n\t\t\t<xs:enumeration value=\"post\"/>\n\t\t\t<xs:enumeration value=\"verbal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActionSourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dead_load_g\"/>\n\t\t\t<xs:enumeration value=\"completion_g1\"/>\n\t\t\t<xs:enumeration value=\"live_load_q\"/>\n\t\t\t<xs:enumeration value=\"snow_s\"/>\n\t\t\t<xs:enumeration value=\"wind_w\"/>\n\t\t\t<xs:enumeration value=\"prestressing_p\"/>\n\t\t\t<xs:enumeration value=\"settlement_u\"/>\n\t\t\t<xs:enumeration value=\"temperature_t\"/>\n\t\t\t<xs:enumeration value=\"earthquake_e\"/>\n\t\t\t<xs:enumeration value=\"fire\"/>\n\t\t\t<xs:enumeration value=\"impulse\"/>\n\t\t\t<xs:enumeration value=\"impact\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"erection\"/>\n\t\t\t<xs:enumeration value=\"propping\"/>\n\t\t\t<xs:enumeration value=\"system_imperfection\"/>\n\t\t\t<xs:enumeration value=\"shrinkage\"/>\n\t\t\t<xs:enumeration value=\"creep\"/>\n\t\t\t<xs:enumeration value=\"lack_of_fit\"/>\n\t\t\t<xs:enumeration value=\"buoyancy\"/>\n\t\t\t<xs:enumeration value=\"ice\"/>\n\t\t\t<xs:enumeration value=\"current\"/>\n\t\t\t<xs:enumeration value=\"wave\"/>\n\t\t\t<xs:enumeration value=\"rain\"/>\n\t\t\t<xs:enumeration value=\"brakes\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"permanent_g\"/>\n\t\t\t<xs:enumeration value=\"variable_q\"/>\n\t\t\t<xs:enumeration value=\"extraordinary_a\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActuatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electricactuator\"/>\n\t\t\t<xs:enumeration value=\"handoperatedactuator\"/>\n\t\t\t<xs:enumeration value=\"hydraulicactuator\"/>\n\t\t\t<xs:enumeration value=\"pneumaticactuator\"/>\n\t\t\t<xs:enumeration value=\"thermostaticactuator\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAddressTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"office\"/>\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"home\"/>\n\t\t\t<xs:enumeration value=\"distributionpoint\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirTerminalBoxTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"constantflow\"/>\n\t\t\t<xs:enumeration value=\"variableflowpressuredependant\"/>\n\t\t\t<xs:enumeration value=\"variableflowpressureindependant\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"diffuser\"/>\n\t\t\t<xs:enumeration value=\"grille\"/>\n\t\t\t<xs:enumeration value=\"louvre\"/>\n\t\t\t<xs:enumeration value=\"register\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirToAirHeatRecoveryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fixedplatecounterflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"fixedplatecrossflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"fixedplateparallelflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"rotarywheel\"/>\n\t\t\t<xs:enumeration value=\"runaroundcoilloop\"/>\n\t\t\t<xs:enumeration value=\"heatpipe\"/>\n\t\t\t<xs:enumeration value=\"twintowerenthalpyrecoveryloops\"/>\n\t\t\t<xs:enumeration value=\"thermosiphonsealedtubeheatexchangers\"/>\n\t\t\t<xs:enumeration value=\"thermosiphoncoiltypeheatexchangers\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAlarmTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bell\"/>\n\t\t\t<xs:enumeration value=\"breakglassbutton\"/>\n\t\t\t<xs:enumeration value=\"light\"/>\n\t\t\t<xs:enumeration value=\"manualpullbox\"/>\n\t\t\t<xs:enumeration value=\"siren\"/>\n\t\t\t<xs:enumeration value=\"whistle\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAnalysisModelTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"in_plane_loading_2d\"/>\n\t\t\t<xs:enumeration value=\"out_plane_loading_2d\"/>\n\t\t\t<xs:enumeration value=\"loading_3d\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAnalysisTheoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"first_order_theory\"/>\n\t\t\t<xs:enumeration value=\"second_order_theory\"/>\n\t\t\t<xs:enumeration value=\"third_order_theory\"/>\n\t\t\t<xs:enumeration value=\"full_nonlinear_theory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcArithmeticOperatorEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"add\"/>\n\t\t\t<xs:enumeration value=\"divide\"/>\n\t\t\t<xs:enumeration value=\"multiply\"/>\n\t\t\t<xs:enumeration value=\"subtract\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAssemblyPlaceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"factory\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAudioVisualApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"amplifier\"/>\n\t\t\t<xs:enumeration value=\"camera\"/>\n\t\t\t<xs:enumeration value=\"display\"/>\n\t\t\t<xs:enumeration value=\"microphone\"/>\n\t\t\t<xs:enumeration value=\"player\"/>\n\t\t\t<xs:enumeration value=\"projector\"/>\n\t\t\t<xs:enumeration value=\"receiver\"/>\n\t\t\t<xs:enumeration value=\"speaker\"/>\n\t\t\t<xs:enumeration value=\"switcher\"/>\n\t\t\t<xs:enumeration value=\"telephone\"/>\n\t\t\t<xs:enumeration value=\"tuner\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBSplineCurveForm\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"polyline_form\"/>\n\t\t\t<xs:enumeration value=\"circular_arc\"/>\n\t\t\t<xs:enumeration value=\"elliptic_arc\"/>\n\t\t\t<xs:enumeration value=\"parabolic_arc\"/>\n\t\t\t<xs:enumeration value=\"hyperbolic_arc\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBSplineSurfaceForm\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plane_surf\"/>\n\t\t\t<xs:enumeration value=\"cylindrical_surf\"/>\n\t\t\t<xs:enumeration value=\"conical_surf\"/>\n\t\t\t<xs:enumeration value=\"spherical_surf\"/>\n\t\t\t<xs:enumeration value=\"toroidal_surf\"/>\n\t\t\t<xs:enumeration value=\"surf_of_revolution\"/>\n\t\t\t<xs:enumeration value=\"ruled_surf\"/>\n\t\t\t<xs:enumeration value=\"generalised_cone\"/>\n\t\t\t<xs:enumeration value=\"quadric_surf\"/>\n\t\t\t<xs:enumeration value=\"surf_of_linear_extrusion\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBeamTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beam\"/>\n\t\t\t<xs:enumeration value=\"joist\"/>\n\t\t\t<xs:enumeration value=\"hollowcore\"/>\n\t\t\t<xs:enumeration value=\"lintel\"/>\n\t\t\t<xs:enumeration value=\"spandrel\"/>\n\t\t\t<xs:enumeration value=\"t_beam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBenchmarkEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"greaterthan\"/>\n\t\t\t<xs:enumeration value=\"greaterthanorequalto\"/>\n\t\t\t<xs:enumeration value=\"lessthan\"/>\n\t\t\t<xs:enumeration value=\"lessthanorequalto\"/>\n\t\t\t<xs:enumeration value=\"equalto\"/>\n\t\t\t<xs:enumeration value=\"notequalto\"/>\n\t\t\t<xs:enumeration value=\"includes\"/>\n\t\t\t<xs:enumeration value=\"notincludes\"/>\n\t\t\t<xs:enumeration value=\"includedin\"/>\n\t\t\t<xs:enumeration value=\"notincludedin\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBoilerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"water\"/>\n\t\t\t<xs:enumeration value=\"steam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBooleanOperator\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"union\"/>\n\t\t\t<xs:enumeration value=\"intersection\"/>\n\t\t\t<xs:enumeration value=\"difference\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingElementPartTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"insulation\"/>\n\t\t\t<xs:enumeration value=\"precastpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingElementProxyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"complex\"/>\n\t\t\t<xs:enumeration value=\"element\"/>\n\t\t\t<xs:enumeration value=\"partial\"/>\n\t\t\t<xs:enumeration value=\"provisionforvoid\"/>\n\t\t\t<xs:enumeration value=\"provisionforspace\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingSystemTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fenestration\"/>\n\t\t\t<xs:enumeration value=\"foundation\"/>\n\t\t\t<xs:enumeration value=\"loadbearing\"/>\n\t\t\t<xs:enumeration value=\"outershell\"/>\n\t\t\t<xs:enumeration value=\"shading\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBurnerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableCarrierFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"cross\"/>\n\t\t\t<xs:enumeration value=\"reducer\"/>\n\t\t\t<xs:enumeration value=\"tee\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableCarrierSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cableladdersegment\"/>\n\t\t\t<xs:enumeration value=\"cabletraysegment\"/>\n\t\t\t<xs:enumeration value=\"cabletrunkingsegment\"/>\n\t\t\t<xs:enumeration value=\"conduitsegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"busbarsegment\"/>\n\t\t\t<xs:enumeration value=\"cablesegment\"/>\n\t\t\t<xs:enumeration value=\"conductorsegment\"/>\n\t\t\t<xs:enumeration value=\"coresegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChangeActionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"nochange\"/>\n\t\t\t<xs:enumeration value=\"modified\"/>\n\t\t\t<xs:enumeration value=\"added\"/>\n\t\t\t<xs:enumeration value=\"deleted\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChillerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aircooled\"/>\n\t\t\t<xs:enumeration value=\"watercooled\"/>\n\t\t\t<xs:enumeration value=\"heatrecovery\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChimneyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoilTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dxcoolingcoil\"/>\n\t\t\t<xs:enumeration value=\"electricheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"gasheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"hydroniccoil\"/>\n\t\t\t<xs:enumeration value=\"steamheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"watercoolingcoil\"/>\n\t\t\t<xs:enumeration value=\"waterheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcColumnTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"column\"/>\n\t\t\t<xs:enumeration value=\"pilaster\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCommunicationsApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"antenna\"/>\n\t\t\t<xs:enumeration value=\"computer\"/>\n\t\t\t<xs:enumeration value=\"fax\"/>\n\t\t\t<xs:enumeration value=\"gateway\"/>\n\t\t\t<xs:enumeration value=\"modem\"/>\n\t\t\t<xs:enumeration value=\"networkappliance\"/>\n\t\t\t<xs:enumeration value=\"networkbridge\"/>\n\t\t\t<xs:enumeration value=\"networkhub\"/>\n\t\t\t<xs:enumeration value=\"printer\"/>\n\t\t\t<xs:enumeration value=\"repeater\"/>\n\t\t\t<xs:enumeration value=\"router\"/>\n\t\t\t<xs:enumeration value=\"scanner\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcComplexPropertyTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"p_complex\"/>\n\t\t\t<xs:enumeration value=\"q_complex\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCompressorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dynamic\"/>\n\t\t\t<xs:enumeration value=\"reciprocating\"/>\n\t\t\t<xs:enumeration value=\"rotary\"/>\n\t\t\t<xs:enumeration value=\"scroll\"/>\n\t\t\t<xs:enumeration value=\"trochoidal\"/>\n\t\t\t<xs:enumeration value=\"singlestage\"/>\n\t\t\t<xs:enumeration value=\"booster\"/>\n\t\t\t<xs:enumeration value=\"opentype\"/>\n\t\t\t<xs:enumeration value=\"hermetic\"/>\n\t\t\t<xs:enumeration value=\"semihermetic\"/>\n\t\t\t<xs:enumeration value=\"weldedshellhermetic\"/>\n\t\t\t<xs:enumeration value=\"rollingpiston\"/>\n\t\t\t<xs:enumeration value=\"rotaryvane\"/>\n\t\t\t<xs:enumeration value=\"singlescrew\"/>\n\t\t\t<xs:enumeration value=\"twinscrew\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCondenserTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aircooled\"/>\n\t\t\t<xs:enumeration value=\"evaporativecooled\"/>\n\t\t\t<xs:enumeration value=\"watercooled\"/>\n\t\t\t<xs:enumeration value=\"watercooledbrazedplate\"/>\n\t\t\t<xs:enumeration value=\"watercooledshellcoil\"/>\n\t\t\t<xs:enumeration value=\"watercooledshelltube\"/>\n\t\t\t<xs:enumeration value=\"watercooledtubeintube\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConnectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"atpath\"/>\n\t\t\t<xs:enumeration value=\"atstart\"/>\n\t\t\t<xs:enumeration value=\"atend\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstraintEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"hard\"/>\n\t\t\t<xs:enumeration value=\"soft\"/>\n\t\t\t<xs:enumeration value=\"advisory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionEquipmentResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"demolishing\"/>\n\t\t\t<xs:enumeration value=\"earthmoving\"/>\n\t\t\t<xs:enumeration value=\"erecting\"/>\n\t\t\t<xs:enumeration value=\"heating\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"paving\"/>\n\t\t\t<xs:enumeration value=\"pumping\"/>\n\t\t\t<xs:enumeration value=\"transporting\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionMaterialResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aggregates\"/>\n\t\t\t<xs:enumeration value=\"concrete\"/>\n\t\t\t<xs:enumeration value=\"drywall\"/>\n\t\t\t<xs:enumeration value=\"fuel\"/>\n\t\t\t<xs:enumeration value=\"gypsum\"/>\n\t\t\t<xs:enumeration value=\"masonry\"/>\n\t\t\t<xs:enumeration value=\"metal\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionProductResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assembly\"/>\n\t\t\t<xs:enumeration value=\"formwork\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcControllerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floating\"/>\n\t\t\t<xs:enumeration value=\"programmable\"/>\n\t\t\t<xs:enumeration value=\"proportional\"/>\n\t\t\t<xs:enumeration value=\"multiposition\"/>\n\t\t\t<xs:enumeration value=\"twoposition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCooledBeamTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"active\"/>\n\t\t\t<xs:enumeration value=\"passive\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoolingTowerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"naturaldraft\"/>\n\t\t\t<xs:enumeration value=\"mechanicalinduceddraft\"/>\n\t\t\t<xs:enumeration value=\"mechanicalforceddraft\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCostItemTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCostScheduleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"budget\"/>\n\t\t\t<xs:enumeration value=\"costplan\"/>\n\t\t\t<xs:enumeration value=\"estimate\"/>\n\t\t\t<xs:enumeration value=\"tender\"/>\n\t\t\t<xs:enumeration value=\"pricedbillofquantities\"/>\n\t\t\t<xs:enumeration value=\"unpricedbillofquantities\"/>\n\t\t\t<xs:enumeration value=\"scheduleofrates\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoveringTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ceiling\"/>\n\t\t\t<xs:enumeration value=\"flooring\"/>\n\t\t\t<xs:enumeration value=\"cladding\"/>\n\t\t\t<xs:enumeration value=\"roofing\"/>\n\t\t\t<xs:enumeration value=\"molding\"/>\n\t\t\t<xs:enumeration value=\"skirtingboard\"/>\n\t\t\t<xs:enumeration value=\"insulation\"/>\n\t\t\t<xs:enumeration value=\"membrane\"/>\n\t\t\t<xs:enumeration value=\"sleeving\"/>\n\t\t\t<xs:enumeration value=\"wrapping\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCrewResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"office\"/>\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurtainWallTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurveInterpolationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"linear\"/>\n\t\t\t<xs:enumeration value=\"log_linear\"/>\n\t\t\t<xs:enumeration value=\"log_log\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDamperTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"backdraftdamper\"/>\n\t\t\t<xs:enumeration value=\"balancingdamper\"/>\n\t\t\t<xs:enumeration value=\"blastdamper\"/>\n\t\t\t<xs:enumeration value=\"controldamper\"/>\n\t\t\t<xs:enumeration value=\"firedamper\"/>\n\t\t\t<xs:enumeration value=\"firesmokedamper\"/>\n\t\t\t<xs:enumeration value=\"fumehoodexhaust\"/>\n\t\t\t<xs:enumeration value=\"gravitydamper\"/>\n\t\t\t<xs:enumeration value=\"gravityreliefdamper\"/>\n\t\t\t<xs:enumeration value=\"reliefdamper\"/>\n\t\t\t<xs:enumeration value=\"smokedamper\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDataOriginEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"measured\"/>\n\t\t\t<xs:enumeration value=\"predicted\"/>\n\t\t\t<xs:enumeration value=\"simulated\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDerivedUnitEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"angularvelocityunit\"/>\n\t\t\t<xs:enumeration value=\"areadensityunit\"/>\n\t\t\t<xs:enumeration value=\"compoundplaneangleunit\"/>\n\t\t\t<xs:enumeration value=\"dynamicviscosityunit\"/>\n\t\t\t<xs:enumeration value=\"heatfluxdensityunit\"/>\n\t\t\t<xs:enumeration value=\"integercountrateunit\"/>\n\t\t\t<xs:enumeration value=\"isothermalmoisturecapacityunit\"/>\n\t\t\t<xs:enumeration value=\"kinematicviscosityunit\"/>\n\t\t\t<xs:enumeration value=\"linearvelocityunit\"/>\n\t\t\t<xs:enumeration value=\"massdensityunit\"/>\n\t\t\t<xs:enumeration value=\"massflowrateunit\"/>\n\t\t\t<xs:enumeration value=\"moisturediffusivityunit\"/>\n\t\t\t<xs:enumeration value=\"molecularweightunit\"/>\n\t\t\t<xs:enumeration value=\"specificheatcapacityunit\"/>\n\t\t\t<xs:enumeration value=\"thermaladmittanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermalconductanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermalresistanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermaltransmittanceunit\"/>\n\t\t\t<xs:enumeration value=\"vaporpermeabilityunit\"/>\n\t\t\t<xs:enumeration value=\"volumetricflowrateunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalfrequencyunit\"/>\n\t\t\t<xs:enumeration value=\"torqueunit\"/>\n\t\t\t<xs:enumeration value=\"momentofinertiaunit\"/>\n\t\t\t<xs:enumeration value=\"linearmomentunit\"/>\n\t\t\t<xs:enumeration value=\"linearforceunit\"/>\n\t\t\t<xs:enumeration value=\"planarforceunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofelasticityunit\"/>\n\t\t\t<xs:enumeration value=\"shearmodulusunit\"/>\n\t\t\t<xs:enumeration value=\"linearstiffnessunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalstiffnessunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"accelerationunit\"/>\n\t\t\t<xs:enumeration value=\"curvatureunit\"/>\n\t\t\t<xs:enumeration value=\"heatingvalueunit\"/>\n\t\t\t<xs:enumeration value=\"ionconcentrationunit\"/>\n\t\t\t<xs:enumeration value=\"luminousintensitydistributionunit\"/>\n\t\t\t<xs:enumeration value=\"massperlengthunit\"/>\n\t\t\t<xs:enumeration value=\"modulusoflinearsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofrotationalsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"phunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalmassunit\"/>\n\t\t\t<xs:enumeration value=\"sectionareaintegralunit\"/>\n\t\t\t<xs:enumeration value=\"sectionmodulusunit\"/>\n\t\t\t<xs:enumeration value=\"soundpowerlevelunit\"/>\n\t\t\t<xs:enumeration value=\"soundpowerunit\"/>\n\t\t\t<xs:enumeration value=\"soundpressurelevelunit\"/>\n\t\t\t<xs:enumeration value=\"soundpressureunit\"/>\n\t\t\t<xs:enumeration value=\"temperaturegradientunit\"/>\n\t\t\t<xs:enumeration value=\"temperaturerateofchangeunit\"/>\n\t\t\t<xs:enumeration value=\"thermalexpansioncoefficientunit\"/>\n\t\t\t<xs:enumeration value=\"warpingconstantunit\"/>\n\t\t\t<xs:enumeration value=\"warpingmomentunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDirectionSenseEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"positive\"/>\n\t\t\t<xs:enumeration value=\"negative\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDiscreteAccessoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchorplate\"/>\n\t\t\t<xs:enumeration value=\"bracket\"/>\n\t\t\t<xs:enumeration value=\"shoe\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionChamberElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"formedduct\"/>\n\t\t\t<xs:enumeration value=\"inspectionchamber\"/>\n\t\t\t<xs:enumeration value=\"inspectionpit\"/>\n\t\t\t<xs:enumeration value=\"manhole\"/>\n\t\t\t<xs:enumeration value=\"meterchamber\"/>\n\t\t\t<xs:enumeration value=\"sump\"/>\n\t\t\t<xs:enumeration value=\"trench\"/>\n\t\t\t<xs:enumeration value=\"valvechamber\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionPortTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cable\"/>\n\t\t\t<xs:enumeration value=\"cablecarrier\"/>\n\t\t\t<xs:enumeration value=\"duct\"/>\n\t\t\t<xs:enumeration value=\"pipe\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionSystemEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airconditioning\"/>\n\t\t\t<xs:enumeration value=\"audiovisual\"/>\n\t\t\t<xs:enumeration value=\"chemical\"/>\n\t\t\t<xs:enumeration value=\"chilledwater\"/>\n\t\t\t<xs:enumeration value=\"communication\"/>\n\t\t\t<xs:enumeration value=\"compressedair\"/>\n\t\t\t<xs:enumeration value=\"condenserwater\"/>\n\t\t\t<xs:enumeration value=\"control\"/>\n\t\t\t<xs:enumeration value=\"conveying\"/>\n\t\t\t<xs:enumeration value=\"data\"/>\n\t\t\t<xs:enumeration value=\"disposal\"/>\n\t\t\t<xs:enumeration value=\"domesticcoldwater\"/>\n\t\t\t<xs:enumeration value=\"domestichotwater\"/>\n\t\t\t<xs:enumeration value=\"drainage\"/>\n\t\t\t<xs:enumeration value=\"earthing\"/>\n\t\t\t<xs:enumeration value=\"electrical\"/>\n\t\t\t<xs:enumeration value=\"electroacoustic\"/>\n\t\t\t<xs:enumeration value=\"exhaust\"/>\n\t\t\t<xs:enumeration value=\"fireprotection\"/>\n\t\t\t<xs:enumeration value=\"fuel\"/>\n\t\t\t<xs:enumeration value=\"gas\"/>\n\t\t\t<xs:enumeration value=\"hazardous\"/>\n\t\t\t<xs:enumeration value=\"heating\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"lightningprotection\"/>\n\t\t\t<xs:enumeration value=\"municipalsolidwaste\"/>\n\t\t\t<xs:enumeration value=\"oil\"/>\n\t\t\t<xs:enumeration value=\"operational\"/>\n\t\t\t<xs:enumeration value=\"powergeneration\"/>\n\t\t\t<xs:enumeration value=\"rainwater\"/>\n\t\t\t<xs:enumeration value=\"refrigeration\"/>\n\t\t\t<xs:enumeration value=\"security\"/>\n\t\t\t<xs:enumeration value=\"sewage\"/>\n\t\t\t<xs:enumeration value=\"signal\"/>\n\t\t\t<xs:enumeration value=\"stormwater\"/>\n\t\t\t<xs:enumeration value=\"telephone\"/>\n\t\t\t<xs:enumeration value=\"tv\"/>\n\t\t\t<xs:enumeration value=\"vacuum\"/>\n\t\t\t<xs:enumeration value=\"vent\"/>\n\t\t\t<xs:enumeration value=\"ventilation\"/>\n\t\t\t<xs:enumeration value=\"wastewater\"/>\n\t\t\t<xs:enumeration value=\"watersupply\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDocumentConfidentialityEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"public\"/>\n\t\t\t<xs:enumeration value=\"restricted\"/>\n\t\t\t<xs:enumeration value=\"confidential\"/>\n\t\t\t<xs:enumeration value=\"personal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDocumentStatusEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"draft\"/>\n\t\t\t<xs:enumeration value=\"finaldraft\"/>\n\t\t\t<xs:enumeration value=\"final\"/>\n\t\t\t<xs:enumeration value=\"revision\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorPanelOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"swinging\"/>\n\t\t\t<xs:enumeration value=\"double_acting\"/>\n\t\t\t<xs:enumeration value=\"sliding\"/>\n\t\t\t<xs:enumeration value=\"folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"fixedpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorPanelPositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"middle\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorStyleConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aluminium\"/>\n\t\t\t<xs:enumeration value=\"high_grade_steel\"/>\n\t\t\t<xs:enumeration value=\"steel\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"aluminium_wood\"/>\n\t\t\t<xs:enumeration value=\"aluminium_plastic\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorStyleOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_swing_left\"/>\n\t\t\t<xs:enumeration value=\"single_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_left\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_right\"/>\n\t\t\t<xs:enumeration value=\"double_swing_left\"/>\n\t\t\t<xs:enumeration value=\"double_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_double_swing\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_left\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_sliding\"/>\n\t\t\t<xs:enumeration value=\"folding_to_left\"/>\n\t\t\t<xs:enumeration value=\"folding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"door\"/>\n\t\t\t<xs:enumeration value=\"gate\"/>\n\t\t\t<xs:enumeration value=\"trapdoor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorTypeOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_swing_left\"/>\n\t\t\t<xs:enumeration value=\"single_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_left\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_right\"/>\n\t\t\t<xs:enumeration value=\"double_swing_left\"/>\n\t\t\t<xs:enumeration value=\"double_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_double_swing\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_left\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_sliding\"/>\n\t\t\t<xs:enumeration value=\"folding_to_left\"/>\n\t\t\t<xs:enumeration value=\"folding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"swing_fixed_left\"/>\n\t\t\t<xs:enumeration value=\"swing_fixed_right\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"obstruction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctSilencerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flatoval\"/>\n\t\t\t<xs:enumeration value=\"rectangular\"/>\n\t\t\t<xs:enumeration value=\"round\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dishwasher\"/>\n\t\t\t<xs:enumeration value=\"electriccooker\"/>\n\t\t\t<xs:enumeration value=\"freestandingelectricheater\"/>\n\t\t\t<xs:enumeration value=\"freestandingfan\"/>\n\t\t\t<xs:enumeration value=\"freestandingwaterheater\"/>\n\t\t\t<xs:enumeration value=\"freestandingwatercooler\"/>\n\t\t\t<xs:enumeration value=\"freezer\"/>\n\t\t\t<xs:enumeration value=\"fridge_freezer\"/>\n\t\t\t<xs:enumeration value=\"handdryer\"/>\n\t\t\t<xs:enumeration value=\"kitchenmachine\"/>\n\t\t\t<xs:enumeration value=\"microwave\"/>\n\t\t\t<xs:enumeration value=\"photocopier\"/>\n\t\t\t<xs:enumeration value=\"refrigerator\"/>\n\t\t\t<xs:enumeration value=\"tumbledryer\"/>\n\t\t\t<xs:enumeration value=\"vendingmachine\"/>\n\t\t\t<xs:enumeration value=\"washingmachine\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricDistributionBoardTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"consumerunit\"/>\n\t\t\t<xs:enumeration value=\"distributionboard\"/>\n\t\t\t<xs:enumeration value=\"motorcontrolcentre\"/>\n\t\t\t<xs:enumeration value=\"switchboard\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricFlowStorageDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"battery\"/>\n\t\t\t<xs:enumeration value=\"capacitorbank\"/>\n\t\t\t<xs:enumeration value=\"harmonicfilter\"/>\n\t\t\t<xs:enumeration value=\"inductorbank\"/>\n\t\t\t<xs:enumeration value=\"ups\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricGeneratorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"chp\"/>\n\t\t\t<xs:enumeration value=\"enginegenerator\"/>\n\t\t\t<xs:enumeration value=\"standalone\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricMotorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dc\"/>\n\t\t\t<xs:enumeration value=\"induction\"/>\n\t\t\t<xs:enumeration value=\"polyphase\"/>\n\t\t\t<xs:enumeration value=\"reluctancesynchronous\"/>\n\t\t\t<xs:enumeration value=\"synchronous\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricTimeControlTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"timeclock\"/>\n\t\t\t<xs:enumeration value=\"timedelay\"/>\n\t\t\t<xs:enumeration value=\"relay\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElementAssemblyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"accessory_assembly\"/>\n\t\t\t<xs:enumeration value=\"arch\"/>\n\t\t\t<xs:enumeration value=\"beam_grid\"/>\n\t\t\t<xs:enumeration value=\"braced_frame\"/>\n\t\t\t<xs:enumeration value=\"girder\"/>\n\t\t\t<xs:enumeration value=\"reinforcement_unit\"/>\n\t\t\t<xs:enumeration value=\"rigid_frame\"/>\n\t\t\t<xs:enumeration value=\"slab_field\"/>\n\t\t\t<xs:enumeration value=\"truss\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElementCompositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"complex\"/>\n\t\t\t<xs:enumeration value=\"element\"/>\n\t\t\t<xs:enumeration value=\"partial\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEngineTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"externalcombustion\"/>\n\t\t\t<xs:enumeration value=\"internalcombustion\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEvaporativeCoolerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directevaporativerandommediaaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativerigidmediaaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativeslingerspackagedaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativepackagedrotaryaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativeairwasher\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativepackageaircooler\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativewetcoil\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativecoolingtowerorcoilcooler\"/>\n\t\t\t<xs:enumeration value=\"indirectdirectcombination\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEvaporatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directexpansion\"/>\n\t\t\t<xs:enumeration value=\"directexpansionshellandtube\"/>\n\t\t\t<xs:enumeration value=\"directexpansiontubeintube\"/>\n\t\t\t<xs:enumeration value=\"directexpansionbrazedplate\"/>\n\t\t\t<xs:enumeration value=\"floodedshellandtube\"/>\n\t\t\t<xs:enumeration value=\"shellandcoil\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEventTriggerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"eventrule\"/>\n\t\t\t<xs:enumeration value=\"eventmessage\"/>\n\t\t\t<xs:enumeration value=\"eventtime\"/>\n\t\t\t<xs:enumeration value=\"eventcomplex\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEventTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"startevent\"/>\n\t\t\t<xs:enumeration value=\"endevent\"/>\n\t\t\t<xs:enumeration value=\"intermediateevent\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcExternalSpatialElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"external_earth\"/>\n\t\t\t<xs:enumeration value=\"external_water\"/>\n\t\t\t<xs:enumeration value=\"external_fire\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFanTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"centrifugalforwardcurved\"/>\n\t\t\t<xs:enumeration value=\"centrifugalradial\"/>\n\t\t\t<xs:enumeration value=\"centrifugalbackwardinclinedcurved\"/>\n\t\t\t<xs:enumeration value=\"centrifugalairfoil\"/>\n\t\t\t<xs:enumeration value=\"tubeaxial\"/>\n\t\t\t<xs:enumeration value=\"vaneaxial\"/>\n\t\t\t<xs:enumeration value=\"propelloraxial\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFastenerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"glue\"/>\n\t\t\t<xs:enumeration value=\"mortar\"/>\n\t\t\t<xs:enumeration value=\"weld\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFilterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airparticlefilter\"/>\n\t\t\t<xs:enumeration value=\"compressedairfilter\"/>\n\t\t\t<xs:enumeration value=\"odorfilter\"/>\n\t\t\t<xs:enumeration value=\"oilfilter\"/>\n\t\t\t<xs:enumeration value=\"strainer\"/>\n\t\t\t<xs:enumeration value=\"waterfilter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFireSuppressionTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"breechinginlet\"/>\n\t\t\t<xs:enumeration value=\"firehydrant\"/>\n\t\t\t<xs:enumeration value=\"hosereel\"/>\n\t\t\t<xs:enumeration value=\"sprinkler\"/>\n\t\t\t<xs:enumeration value=\"sprinklerdeflector\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"source\"/>\n\t\t\t<xs:enumeration value=\"sink\"/>\n\t\t\t<xs:enumeration value=\"sourceandsink\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowInstrumentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pressuregauge\"/>\n\t\t\t<xs:enumeration value=\"thermometer\"/>\n\t\t\t<xs:enumeration value=\"ammeter\"/>\n\t\t\t<xs:enumeration value=\"frequencymeter\"/>\n\t\t\t<xs:enumeration value=\"powerfactormeter\"/>\n\t\t\t<xs:enumeration value=\"phaseanglemeter\"/>\n\t\t\t<xs:enumeration value=\"voltmeter_peak\"/>\n\t\t\t<xs:enumeration value=\"voltmeter_rms\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowMeterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"energymeter\"/>\n\t\t\t<xs:enumeration value=\"gasmeter\"/>\n\t\t\t<xs:enumeration value=\"oilmeter\"/>\n\t\t\t<xs:enumeration value=\"watermeter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFootingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"caisson_foundation\"/>\n\t\t\t<xs:enumeration value=\"footing_beam\"/>\n\t\t\t<xs:enumeration value=\"pad_footing\"/>\n\t\t\t<xs:enumeration value=\"pile_cap\"/>\n\t\t\t<xs:enumeration value=\"strip_footing\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFurnitureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"chair\"/>\n\t\t\t<xs:enumeration value=\"table\"/>\n\t\t\t<xs:enumeration value=\"desk\"/>\n\t\t\t<xs:enumeration value=\"bed\"/>\n\t\t\t<xs:enumeration value=\"filecabinet\"/>\n\t\t\t<xs:enumeration value=\"shelf\"/>\n\t\t\t<xs:enumeration value=\"sofa\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGeographicElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"terrain\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGeometricProjectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"graph_view\"/>\n\t\t\t<xs:enumeration value=\"sketch_view\"/>\n\t\t\t<xs:enumeration value=\"model_view\"/>\n\t\t\t<xs:enumeration value=\"plan_view\"/>\n\t\t\t<xs:enumeration value=\"reflected_plan_view\"/>\n\t\t\t<xs:enumeration value=\"section_view\"/>\n\t\t\t<xs:enumeration value=\"elevation_view\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGlobalOrLocalEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"global_coords\"/>\n\t\t\t<xs:enumeration value=\"local_coords\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGridTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rectangular\"/>\n\t\t\t<xs:enumeration value=\"radial\"/>\n\t\t\t<xs:enumeration value=\"triangular\"/>\n\t\t\t<xs:enumeration value=\"irregular\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatExchangerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plate\"/>\n\t\t\t<xs:enumeration value=\"shellandtube\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHumidifierTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"steaminjection\"/>\n\t\t\t<xs:enumeration value=\"adiabaticairwasher\"/>\n\t\t\t<xs:enumeration value=\"adiabaticpan\"/>\n\t\t\t<xs:enumeration value=\"adiabaticwettedelement\"/>\n\t\t\t<xs:enumeration value=\"adiabaticatomizing\"/>\n\t\t\t<xs:enumeration value=\"adiabaticultrasonic\"/>\n\t\t\t<xs:enumeration value=\"adiabaticrigidmedia\"/>\n\t\t\t<xs:enumeration value=\"adiabaticcompressedairnozzle\"/>\n\t\t\t<xs:enumeration value=\"assistedelectric\"/>\n\t\t\t<xs:enumeration value=\"assistednaturalgas\"/>\n\t\t\t<xs:enumeration value=\"assistedpropane\"/>\n\t\t\t<xs:enumeration value=\"assistedbutane\"/>\n\t\t\t<xs:enumeration value=\"assistedsteam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInterceptorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cyclonic\"/>\n\t\t\t<xs:enumeration value=\"grease\"/>\n\t\t\t<xs:enumeration value=\"oil\"/>\n\t\t\t<xs:enumeration value=\"petrol\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInternalOrExternalEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"internal\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"external_earth\"/>\n\t\t\t<xs:enumeration value=\"external_water\"/>\n\t\t\t<xs:enumeration value=\"external_fire\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInventoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assetinventory\"/>\n\t\t\t<xs:enumeration value=\"spaceinventory\"/>\n\t\t\t<xs:enumeration value=\"furnitureinventory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcJunctionBoxTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"data\"/>\n\t\t\t<xs:enumeration value=\"power\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcKnotType\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"uniform_knots\"/>\n\t\t\t<xs:enumeration value=\"quasi_uniform_knots\"/>\n\t\t\t<xs:enumeration value=\"piecewise_bezier_knots\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLaborResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"administration\"/>\n\t\t\t<xs:enumeration value=\"carpentry\"/>\n\t\t\t<xs:enumeration value=\"cleaning\"/>\n\t\t\t<xs:enumeration value=\"concrete\"/>\n\t\t\t<xs:enumeration value=\"drywall\"/>\n\t\t\t<xs:enumeration value=\"electric\"/>\n\t\t\t<xs:enumeration value=\"finishing\"/>\n\t\t\t<xs:enumeration value=\"flooring\"/>\n\t\t\t<xs:enumeration value=\"general\"/>\n\t\t\t<xs:enumeration value=\"hvac\"/>\n\t\t\t<xs:enumeration value=\"landscaping\"/>\n\t\t\t<xs:enumeration value=\"masonry\"/>\n\t\t\t<xs:enumeration value=\"painting\"/>\n\t\t\t<xs:enumeration value=\"paving\"/>\n\t\t\t<xs:enumeration value=\"plumbing\"/>\n\t\t\t<xs:enumeration value=\"roofing\"/>\n\t\t\t<xs:enumeration value=\"sitegrading\"/>\n\t\t\t<xs:enumeration value=\"steelwork\"/>\n\t\t\t<xs:enumeration value=\"surveying\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLampTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\n\t\t\t<xs:enumeration value=\"halogen\"/>\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"led\"/>\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\n\t\t\t<xs:enumeration value=\"oled\"/>\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLayerSetDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"axis1\"/>\n\t\t\t<xs:enumeration value=\"axis2\"/>\n\t\t\t<xs:enumeration value=\"axis3\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightDistributionCurveEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"type_a\"/>\n\t\t\t<xs:enumeration value=\"type_b\"/>\n\t\t\t<xs:enumeration value=\"type_c\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightEmissionSourceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"lightemittingdiode\"/>\n\t\t\t<xs:enumeration value=\"lowpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"lowvoltagehalogen\"/>\n\t\t\t<xs:enumeration value=\"mainvoltagehalogen\"/>\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightFixtureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pointsource\"/>\n\t\t\t<xs:enumeration value=\"directionsource\"/>\n\t\t\t<xs:enumeration value=\"securitylighting\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLoadGroupTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"load_group\"/>\n\t\t\t<xs:enumeration value=\"load_case\"/>\n\t\t\t<xs:enumeration value=\"load_combination\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLogicalOperatorEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"logicaland\"/>\n\t\t\t<xs:enumeration value=\"logicalor\"/>\n\t\t\t<xs:enumeration value=\"logicalxor\"/>\n\t\t\t<xs:enumeration value=\"logicalnotand\"/>\n\t\t\t<xs:enumeration value=\"logicalnotor\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMechanicalFastenerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchorbolt\"/>\n\t\t\t<xs:enumeration value=\"bolt\"/>\n\t\t\t<xs:enumeration value=\"dowel\"/>\n\t\t\t<xs:enumeration value=\"nail\"/>\n\t\t\t<xs:enumeration value=\"nailplate\"/>\n\t\t\t<xs:enumeration value=\"rivet\"/>\n\t\t\t<xs:enumeration value=\"screw\"/>\n\t\t\t<xs:enumeration value=\"shearconnector\"/>\n\t\t\t<xs:enumeration value=\"staple\"/>\n\t\t\t<xs:enumeration value=\"studshearconnector\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMedicalDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airstation\"/>\n\t\t\t<xs:enumeration value=\"feedairunit\"/>\n\t\t\t<xs:enumeration value=\"oxygengenerator\"/>\n\t\t\t<xs:enumeration value=\"oxygenplant\"/>\n\t\t\t<xs:enumeration value=\"vacuumstation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"brace\"/>\n\t\t\t<xs:enumeration value=\"chord\"/>\n\t\t\t<xs:enumeration value=\"collar\"/>\n\t\t\t<xs:enumeration value=\"member\"/>\n\t\t\t<xs:enumeration value=\"mullion\"/>\n\t\t\t<xs:enumeration value=\"plate\"/>\n\t\t\t<xs:enumeration value=\"post\"/>\n\t\t\t<xs:enumeration value=\"purlin\"/>\n\t\t\t<xs:enumeration value=\"rafter\"/>\n\t\t\t<xs:enumeration value=\"stringer\"/>\n\t\t\t<xs:enumeration value=\"strut\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMotorConnectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beltdrive\"/>\n\t\t\t<xs:enumeration value=\"coupling\"/>\n\t\t\t<xs:enumeration value=\"directdrive\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNullStyle\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"null\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcObjectTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"product\"/>\n\t\t\t<xs:enumeration value=\"process\"/>\n\t\t\t<xs:enumeration value=\"control\"/>\n\t\t\t<xs:enumeration value=\"resource\"/>\n\t\t\t<xs:enumeration value=\"actor\"/>\n\t\t\t<xs:enumeration value=\"group\"/>\n\t\t\t<xs:enumeration value=\"project\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcObjectiveEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"codecompliance\"/>\n\t\t\t<xs:enumeration value=\"codewaiver\"/>\n\t\t\t<xs:enumeration value=\"designintent\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"healthandsafety\"/>\n\t\t\t<xs:enumeration value=\"mergeconflict\"/>\n\t\t\t<xs:enumeration value=\"modelview\"/>\n\t\t\t<xs:enumeration value=\"parameter\"/>\n\t\t\t<xs:enumeration value=\"requirement\"/>\n\t\t\t<xs:enumeration value=\"specification\"/>\n\t\t\t<xs:enumeration value=\"triggercondition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOccupantTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assignee\"/>\n\t\t\t<xs:enumeration value=\"assignor\"/>\n\t\t\t<xs:enumeration value=\"lessee\"/>\n\t\t\t<xs:enumeration value=\"lessor\"/>\n\t\t\t<xs:enumeration value=\"lettingagent\"/>\n\t\t\t<xs:enumeration value=\"owner\"/>\n\t\t\t<xs:enumeration value=\"tenant\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOpeningElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"opening\"/>\n\t\t\t<xs:enumeration value=\"recess\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOutletTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"audiovisualoutlet\"/>\n\t\t\t<xs:enumeration value=\"communicationsoutlet\"/>\n\t\t\t<xs:enumeration value=\"poweroutlet\"/>\n\t\t\t<xs:enumeration value=\"dataoutlet\"/>\n\t\t\t<xs:enumeration value=\"telephoneoutlet\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPerformanceHistoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPermeableCoveringOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"grill\"/>\n\t\t\t<xs:enumeration value=\"louver\"/>\n\t\t\t<xs:enumeration value=\"screen\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPermitTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"access\"/>\n\t\t\t<xs:enumeration value=\"building\"/>\n\t\t\t<xs:enumeration value=\"work\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPhysicalOrVirtualEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"physical\"/>\n\t\t\t<xs:enumeration value=\"virtual\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPileConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cast_in_place\"/>\n\t\t\t<xs:enumeration value=\"composite\"/>\n\t\t\t<xs:enumeration value=\"precast_concrete\"/>\n\t\t\t<xs:enumeration value=\"prefab_steel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPileTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bored\"/>\n\t\t\t<xs:enumeration value=\"driven\"/>\n\t\t\t<xs:enumeration value=\"jetgrouting\"/>\n\t\t\t<xs:enumeration value=\"cohesion\"/>\n\t\t\t<xs:enumeration value=\"friction\"/>\n\t\t\t<xs:enumeration value=\"support\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPipeFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"obstruction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPipeSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"culvert\"/>\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\n\t\t\t<xs:enumeration value=\"gutter\"/>\n\t\t\t<xs:enumeration value=\"spool\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curtain_panel\"/>\n\t\t\t<xs:enumeration value=\"sheet\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPreferredSurfaceCurveRepresentation\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curve3d\"/>\n\t\t\t<xs:enumeration value=\"pcurve_s1\"/>\n\t\t\t<xs:enumeration value=\"pcurve_s2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProcedureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"advice_caution\"/>\n\t\t\t<xs:enumeration value=\"advice_note\"/>\n\t\t\t<xs:enumeration value=\"advice_warning\"/>\n\t\t\t<xs:enumeration value=\"calibration\"/>\n\t\t\t<xs:enumeration value=\"diagnostic\"/>\n\t\t\t<xs:enumeration value=\"shutdown\"/>\n\t\t\t<xs:enumeration value=\"startup\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProfileTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curve\"/>\n\t\t\t<xs:enumeration value=\"area\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectOrderTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"changeorder\"/>\n\t\t\t<xs:enumeration value=\"maintenanceworkorder\"/>\n\t\t\t<xs:enumeration value=\"moveorder\"/>\n\t\t\t<xs:enumeration value=\"purchaseorder\"/>\n\t\t\t<xs:enumeration value=\"workorder\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectedOrTrueLengthEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"projected_length\"/>\n\t\t\t<xs:enumeration value=\"true_length\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectionElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPropertySetTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pset_typedrivenonly\"/>\n\t\t\t<xs:enumeration value=\"pset_typedrivenoverride\"/>\n\t\t\t<xs:enumeration value=\"pset_occurrencedriven\"/>\n\t\t\t<xs:enumeration value=\"pset_performancedriven\"/>\n\t\t\t<xs:enumeration value=\"qto_typedrivenonly\"/>\n\t\t\t<xs:enumeration value=\"qto_typedrivenoverride\"/>\n\t\t\t<xs:enumeration value=\"qto_occurrencedriven\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProtectiveDeviceTrippingUnitTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electronic\"/>\n\t\t\t<xs:enumeration value=\"electromagnetic\"/>\n\t\t\t<xs:enumeration value=\"residualcurrent\"/>\n\t\t\t<xs:enumeration value=\"thermal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProtectiveDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"circuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"earthleakagecircuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"earthingswitch\"/>\n\t\t\t<xs:enumeration value=\"fusedisconnector\"/>\n\t\t\t<xs:enumeration value=\"residualcurrentcircuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"residualcurrentswitch\"/>\n\t\t\t<xs:enumeration value=\"varistor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPumpTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"circulator\"/>\n\t\t\t<xs:enumeration value=\"endsuction\"/>\n\t\t\t<xs:enumeration value=\"splitcase\"/>\n\t\t\t<xs:enumeration value=\"submersiblepump\"/>\n\t\t\t<xs:enumeration value=\"sumppump\"/>\n\t\t\t<xs:enumeration value=\"verticalinline\"/>\n\t\t\t<xs:enumeration value=\"verticalturbine\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRailingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"handrail\"/>\n\t\t\t<xs:enumeration value=\"guardrail\"/>\n\t\t\t<xs:enumeration value=\"balustrade\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRampFlightTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight\"/>\n\t\t\t<xs:enumeration value=\"spiral\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRampTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight_run_ramp\"/>\n\t\t\t<xs:enumeration value=\"two_straight_run_ramp\"/>\n\t\t\t<xs:enumeration value=\"quarter_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"half_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"spiral_ramp\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRecurrenceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"daily\"/>\n\t\t\t<xs:enumeration value=\"weekly\"/>\n\t\t\t<xs:enumeration value=\"monthly_by_day_of_month\"/>\n\t\t\t<xs:enumeration value=\"monthly_by_position\"/>\n\t\t\t<xs:enumeration value=\"by_day_count\"/>\n\t\t\t<xs:enumeration value=\"by_weekday_count\"/>\n\t\t\t<xs:enumeration value=\"yearly_by_day_of_month\"/>\n\t\t\t<xs:enumeration value=\"yearly_by_position\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReflectanceMethodEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blinn\"/>\n\t\t\t<xs:enumeration value=\"flat\"/>\n\t\t\t<xs:enumeration value=\"glass\"/>\n\t\t\t<xs:enumeration value=\"matt\"/>\n\t\t\t<xs:enumeration value=\"metal\"/>\n\t\t\t<xs:enumeration value=\"mirror\"/>\n\t\t\t<xs:enumeration value=\"phong\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"strauss\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarRoleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"main\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"ligature\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"punching\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"ring\"/>\n\t\t\t<xs:enumeration value=\"anchoring\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarSurfaceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plain\"/>\n\t\t\t<xs:enumeration value=\"textured\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchoring\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"ligature\"/>\n\t\t\t<xs:enumeration value=\"main\"/>\n\t\t\t<xs:enumeration value=\"punching\"/>\n\t\t\t<xs:enumeration value=\"ring\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingMeshTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRoleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"supplier\"/>\n\t\t\t<xs:enumeration value=\"manufacturer\"/>\n\t\t\t<xs:enumeration value=\"contractor\"/>\n\t\t\t<xs:enumeration value=\"subcontractor\"/>\n\t\t\t<xs:enumeration value=\"architect\"/>\n\t\t\t<xs:enumeration value=\"structuralengineer\"/>\n\t\t\t<xs:enumeration value=\"costengineer\"/>\n\t\t\t<xs:enumeration value=\"client\"/>\n\t\t\t<xs:enumeration value=\"buildingowner\"/>\n\t\t\t<xs:enumeration value=\"buildingoperator\"/>\n\t\t\t<xs:enumeration value=\"mechanicalengineer\"/>\n\t\t\t<xs:enumeration value=\"electricalengineer\"/>\n\t\t\t<xs:enumeration value=\"projectmanager\"/>\n\t\t\t<xs:enumeration value=\"facilitiesmanager\"/>\n\t\t\t<xs:enumeration value=\"civilengineer\"/>\n\t\t\t<xs:enumeration value=\"commissioningengineer\"/>\n\t\t\t<xs:enumeration value=\"engineer\"/>\n\t\t\t<xs:enumeration value=\"owner\"/>\n\t\t\t<xs:enumeration value=\"consultant\"/>\n\t\t\t<xs:enumeration value=\"constructionmanager\"/>\n\t\t\t<xs:enumeration value=\"fieldconstructionmanager\"/>\n\t\t\t<xs:enumeration value=\"reseller\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRoofTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flat_roof\"/>\n\t\t\t<xs:enumeration value=\"shed_roof\"/>\n\t\t\t<xs:enumeration value=\"gable_roof\"/>\n\t\t\t<xs:enumeration value=\"hip_roof\"/>\n\t\t\t<xs:enumeration value=\"hipped_gable_roof\"/>\n\t\t\t<xs:enumeration value=\"gambrel_roof\"/>\n\t\t\t<xs:enumeration value=\"mansard_roof\"/>\n\t\t\t<xs:enumeration value=\"barrel_roof\"/>\n\t\t\t<xs:enumeration value=\"rainbow_roof\"/>\n\t\t\t<xs:enumeration value=\"butterfly_roof\"/>\n\t\t\t<xs:enumeration value=\"pavilion_roof\"/>\n\t\t\t<xs:enumeration value=\"dome_roof\"/>\n\t\t\t<xs:enumeration value=\"freeform\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSIPrefix\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"exa\"/>\n\t\t\t<xs:enumeration value=\"peta\"/>\n\t\t\t<xs:enumeration value=\"tera\"/>\n\t\t\t<xs:enumeration value=\"giga\"/>\n\t\t\t<xs:enumeration value=\"mega\"/>\n\t\t\t<xs:enumeration value=\"kilo\"/>\n\t\t\t<xs:enumeration value=\"hecto\"/>\n\t\t\t<xs:enumeration value=\"deca\"/>\n\t\t\t<xs:enumeration value=\"deci\"/>\n\t\t\t<xs:enumeration value=\"centi\"/>\n\t\t\t<xs:enumeration value=\"milli\"/>\n\t\t\t<xs:enumeration value=\"micro\"/>\n\t\t\t<xs:enumeration value=\"nano\"/>\n\t\t\t<xs:enumeration value=\"pico\"/>\n\t\t\t<xs:enumeration value=\"femto\"/>\n\t\t\t<xs:enumeration value=\"atto\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSIUnitName\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ampere\"/>\n\t\t\t<xs:enumeration value=\"becquerel\"/>\n\t\t\t<xs:enumeration value=\"candela\"/>\n\t\t\t<xs:enumeration value=\"coulomb\"/>\n\t\t\t<xs:enumeration value=\"cubic_metre\"/>\n\t\t\t<xs:enumeration value=\"degree_celsius\"/>\n\t\t\t<xs:enumeration value=\"farad\"/>\n\t\t\t<xs:enumeration value=\"gram\"/>\n\t\t\t<xs:enumeration value=\"gray\"/>\n\t\t\t<xs:enumeration value=\"henry\"/>\n\t\t\t<xs:enumeration value=\"hertz\"/>\n\t\t\t<xs:enumeration value=\"joule\"/>\n\t\t\t<xs:enumeration value=\"kelvin\"/>\n\t\t\t<xs:enumeration value=\"lumen\"/>\n\t\t\t<xs:enumeration value=\"lux\"/>\n\t\t\t<xs:enumeration value=\"metre\"/>\n\t\t\t<xs:enumeration value=\"mole\"/>\n\t\t\t<xs:enumeration value=\"newton\"/>\n\t\t\t<xs:enumeration value=\"ohm\"/>\n\t\t\t<xs:enumeration value=\"pascal\"/>\n\t\t\t<xs:enumeration value=\"radian\"/>\n\t\t\t<xs:enumeration value=\"second\"/>\n\t\t\t<xs:enumeration value=\"siemens\"/>\n\t\t\t<xs:enumeration value=\"sievert\"/>\n\t\t\t<xs:enumeration value=\"square_metre\"/>\n\t\t\t<xs:enumeration value=\"steradian\"/>\n\t\t\t<xs:enumeration value=\"tesla\"/>\n\t\t\t<xs:enumeration value=\"volt\"/>\n\t\t\t<xs:enumeration value=\"watt\"/>\n\t\t\t<xs:enumeration value=\"weber\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSanitaryTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bath\"/>\n\t\t\t<xs:enumeration value=\"bidet\"/>\n\t\t\t<xs:enumeration value=\"cistern\"/>\n\t\t\t<xs:enumeration value=\"shower\"/>\n\t\t\t<xs:enumeration value=\"sink\"/>\n\t\t\t<xs:enumeration value=\"sanitaryfountain\"/>\n\t\t\t<xs:enumeration value=\"toiletpan\"/>\n\t\t\t<xs:enumeration value=\"urinal\"/>\n\t\t\t<xs:enumeration value=\"washhandbasin\"/>\n\t\t\t<xs:enumeration value=\"wcseat\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"uniform\"/>\n\t\t\t<xs:enumeration value=\"tapered\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSensorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cosensor\"/>\n\t\t\t<xs:enumeration value=\"co2sensor\"/>\n\t\t\t<xs:enumeration value=\"conductancesensor\"/>\n\t\t\t<xs:enumeration value=\"contactsensor\"/>\n\t\t\t<xs:enumeration value=\"firesensor\"/>\n\t\t\t<xs:enumeration value=\"flowsensor\"/>\n\t\t\t<xs:enumeration value=\"frostsensor\"/>\n\t\t\t<xs:enumeration value=\"gassensor\"/>\n\t\t\t<xs:enumeration value=\"heatsensor\"/>\n\t\t\t<xs:enumeration value=\"humiditysensor\"/>\n\t\t\t<xs:enumeration value=\"identifiersensor\"/>\n\t\t\t<xs:enumeration value=\"ionconcentrationsensor\"/>\n\t\t\t<xs:enumeration value=\"levelsensor\"/>\n\t\t\t<xs:enumeration value=\"lightsensor\"/>\n\t\t\t<xs:enumeration value=\"moisturesensor\"/>\n\t\t\t<xs:enumeration value=\"movementsensor\"/>\n\t\t\t<xs:enumeration value=\"phsensor\"/>\n\t\t\t<xs:enumeration value=\"pressuresensor\"/>\n\t\t\t<xs:enumeration value=\"radiationsensor\"/>\n\t\t\t<xs:enumeration value=\"radioactivitysensor\"/>\n\t\t\t<xs:enumeration value=\"smokesensor\"/>\n\t\t\t<xs:enumeration value=\"soundsensor\"/>\n\t\t\t<xs:enumeration value=\"temperaturesensor\"/>\n\t\t\t<xs:enumeration value=\"windsensor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSequenceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"start_start\"/>\n\t\t\t<xs:enumeration value=\"start_finish\"/>\n\t\t\t<xs:enumeration value=\"finish_start\"/>\n\t\t\t<xs:enumeration value=\"finish_finish\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcShadingDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"jalousie\"/>\n\t\t\t<xs:enumeration value=\"shutter\"/>\n\t\t\t<xs:enumeration value=\"awning\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSimplePropertyTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"p_singlevalue\"/>\n\t\t\t<xs:enumeration value=\"p_enumeratedvalue\"/>\n\t\t\t<xs:enumeration value=\"p_boundedvalue\"/>\n\t\t\t<xs:enumeration value=\"p_listvalue\"/>\n\t\t\t<xs:enumeration value=\"p_tablevalue\"/>\n\t\t\t<xs:enumeration value=\"p_referencevalue\"/>\n\t\t\t<xs:enumeration value=\"q_length\"/>\n\t\t\t<xs:enumeration value=\"q_area\"/>\n\t\t\t<xs:enumeration value=\"q_volume\"/>\n\t\t\t<xs:enumeration value=\"q_count\"/>\n\t\t\t<xs:enumeration value=\"q_weight\"/>\n\t\t\t<xs:enumeration value=\"q_time\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSlabTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floor\"/>\n\t\t\t<xs:enumeration value=\"roof\"/>\n\t\t\t<xs:enumeration value=\"landing\"/>\n\t\t\t<xs:enumeration value=\"baseslab\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSolarDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"solarcollector\"/>\n\t\t\t<xs:enumeration value=\"solarpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpaceHeaterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"convector\"/>\n\t\t\t<xs:enumeration value=\"radiator\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpaceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"space\"/>\n\t\t\t<xs:enumeration value=\"parking\"/>\n\t\t\t<xs:enumeration value=\"gfa\"/>\n\t\t\t<xs:enumeration value=\"internal\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpatialZoneTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"construction\"/>\n\t\t\t<xs:enumeration value=\"firesafety\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"occupancy\"/>\n\t\t\t<xs:enumeration value=\"security\"/>\n\t\t\t<xs:enumeration value=\"thermal\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"ventilation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStackTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"birdcage\"/>\n\t\t\t<xs:enumeration value=\"cowl\"/>\n\t\t\t<xs:enumeration value=\"rainwaterhopper\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStairFlightTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight\"/>\n\t\t\t<xs:enumeration value=\"winder\"/>\n\t\t\t<xs:enumeration value=\"spiral\"/>\n\t\t\t<xs:enumeration value=\"curved\"/>\n\t\t\t<xs:enumeration value=\"freeform\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStairTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight_run_stair\"/>\n\t\t\t<xs:enumeration value=\"two_straight_run_stair\"/>\n\t\t\t<xs:enumeration value=\"quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"half_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"half_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"three_quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"three_quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"spiral_stair\"/>\n\t\t\t<xs:enumeration value=\"double_return_stair\"/>\n\t\t\t<xs:enumeration value=\"curved_run_stair\"/>\n\t\t\t<xs:enumeration value=\"two_curved_run_stair\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStateEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"readwrite\"/>\n\t\t\t<xs:enumeration value=\"readonly\"/>\n\t\t\t<xs:enumeration value=\"locked\"/>\n\t\t\t<xs:enumeration value=\"readwritelocked\"/>\n\t\t\t<xs:enumeration value=\"readonlylocked\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralCurveActivityTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"const\"/>\n\t\t\t<xs:enumeration value=\"linear\"/>\n\t\t\t<xs:enumeration value=\"polygonal\"/>\n\t\t\t<xs:enumeration value=\"equidistant\"/>\n\t\t\t<xs:enumeration value=\"sinus\"/>\n\t\t\t<xs:enumeration value=\"parabola\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralCurveMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rigid_joined_member\"/>\n\t\t\t<xs:enumeration value=\"pin_joined_member\"/>\n\t\t\t<xs:enumeration value=\"cable\"/>\n\t\t\t<xs:enumeration value=\"tension_member\"/>\n\t\t\t<xs:enumeration value=\"compression_member\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralSurfaceActivityTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"const\"/>\n\t\t\t<xs:enumeration value=\"bilinear\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"isocontour\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralSurfaceMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bending_element\"/>\n\t\t\t<xs:enumeration value=\"membrane_element\"/>\n\t\t\t<xs:enumeration value=\"shell\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSubContractResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"purchase\"/>\n\t\t\t<xs:enumeration value=\"work\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSurfaceFeatureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"mark\"/>\n\t\t\t<xs:enumeration value=\"tag\"/>\n\t\t\t<xs:enumeration value=\"treatment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSurfaceSide\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"positive\"/>\n\t\t\t<xs:enumeration value=\"negative\"/>\n\t\t\t<xs:enumeration value=\"both\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSwitchingDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"contactor\"/>\n\t\t\t<xs:enumeration value=\"dimmerswitch\"/>\n\t\t\t<xs:enumeration value=\"emergencystop\"/>\n\t\t\t<xs:enumeration value=\"keypad\"/>\n\t\t\t<xs:enumeration value=\"momentaryswitch\"/>\n\t\t\t<xs:enumeration value=\"selectorswitch\"/>\n\t\t\t<xs:enumeration value=\"starter\"/>\n\t\t\t<xs:enumeration value=\"switchdisconnector\"/>\n\t\t\t<xs:enumeration value=\"toggleswitch\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSystemFurnitureElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"panel\"/>\n\t\t\t<xs:enumeration value=\"worksurface\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTankTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"basin\"/>\n\t\t\t<xs:enumeration value=\"breakpressure\"/>\n\t\t\t<xs:enumeration value=\"expansion\"/>\n\t\t\t<xs:enumeration value=\"feedandexpansion\"/>\n\t\t\t<xs:enumeration value=\"pressurevessel\"/>\n\t\t\t<xs:enumeration value=\"storage\"/>\n\t\t\t<xs:enumeration value=\"vessel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTaskDurationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"elapsedtime\"/>\n\t\t\t<xs:enumeration value=\"worktime\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTaskTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"attendance\"/>\n\t\t\t<xs:enumeration value=\"construction\"/>\n\t\t\t<xs:enumeration value=\"demolition\"/>\n\t\t\t<xs:enumeration value=\"dismantle\"/>\n\t\t\t<xs:enumeration value=\"disposal\"/>\n\t\t\t<xs:enumeration value=\"installation\"/>\n\t\t\t<xs:enumeration value=\"logistic\"/>\n\t\t\t<xs:enumeration value=\"maintenance\"/>\n\t\t\t<xs:enumeration value=\"move\"/>\n\t\t\t<xs:enumeration value=\"operation\"/>\n\t\t\t<xs:enumeration value=\"removal\"/>\n\t\t\t<xs:enumeration value=\"renovation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTendonAnchorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"coupler\"/>\n\t\t\t<xs:enumeration value=\"fixed_end\"/>\n\t\t\t<xs:enumeration value=\"tensioning_end\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTendonTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bar\"/>\n\t\t\t<xs:enumeration value=\"coated\"/>\n\t\t\t<xs:enumeration value=\"strand\"/>\n\t\t\t<xs:enumeration value=\"wire\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextPath\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"up\"/>\n\t\t\t<xs:enumeration value=\"down\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeSeriesDataTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"continuous\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"discretebinary\"/>\n\t\t\t<xs:enumeration value=\"piecewisebinary\"/>\n\t\t\t<xs:enumeration value=\"piecewiseconstant\"/>\n\t\t\t<xs:enumeration value=\"piecewisecontinuous\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransformerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"current\"/>\n\t\t\t<xs:enumeration value=\"frequency\"/>\n\t\t\t<xs:enumeration value=\"inverter\"/>\n\t\t\t<xs:enumeration value=\"rectifier\"/>\n\t\t\t<xs:enumeration value=\"voltage\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransitionCode\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"discontinuous\"/>\n\t\t\t<xs:enumeration value=\"continuous\"/>\n\t\t\t<xs:enumeration value=\"contsamegradient\"/>\n\t\t\t<xs:enumeration value=\"contsamegradientsamecurvature\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransportElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"elevator\"/>\n\t\t\t<xs:enumeration value=\"escalator\"/>\n\t\t\t<xs:enumeration value=\"movingwalkway\"/>\n\t\t\t<xs:enumeration value=\"craneway\"/>\n\t\t\t<xs:enumeration value=\"liftinggear\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTrimmingPreference\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cartesian\"/>\n\t\t\t<xs:enumeration value=\"parameter\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTubeBundleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"finned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"absorbeddoseunit\"/>\n\t\t\t<xs:enumeration value=\"amountofsubstanceunit\"/>\n\t\t\t<xs:enumeration value=\"areaunit\"/>\n\t\t\t<xs:enumeration value=\"doseequivalentunit\"/>\n\t\t\t<xs:enumeration value=\"electriccapacitanceunit\"/>\n\t\t\t<xs:enumeration value=\"electricchargeunit\"/>\n\t\t\t<xs:enumeration value=\"electricconductanceunit\"/>\n\t\t\t<xs:enumeration value=\"electriccurrentunit\"/>\n\t\t\t<xs:enumeration value=\"electricresistanceunit\"/>\n\t\t\t<xs:enumeration value=\"electricvoltageunit\"/>\n\t\t\t<xs:enumeration value=\"energyunit\"/>\n\t\t\t<xs:enumeration value=\"forceunit\"/>\n\t\t\t<xs:enumeration value=\"frequencyunit\"/>\n\t\t\t<xs:enumeration value=\"illuminanceunit\"/>\n\t\t\t<xs:enumeration value=\"inductanceunit\"/>\n\t\t\t<xs:enumeration value=\"lengthunit\"/>\n\t\t\t<xs:enumeration value=\"luminousfluxunit\"/>\n\t\t\t<xs:enumeration value=\"luminousintensityunit\"/>\n\t\t\t<xs:enumeration value=\"magneticfluxdensityunit\"/>\n\t\t\t<xs:enumeration value=\"magneticfluxunit\"/>\n\t\t\t<xs:enumeration value=\"massunit\"/>\n\t\t\t<xs:enumeration value=\"planeangleunit\"/>\n\t\t\t<xs:enumeration value=\"powerunit\"/>\n\t\t\t<xs:enumeration value=\"pressureunit\"/>\n\t\t\t<xs:enumeration value=\"radioactivityunit\"/>\n\t\t\t<xs:enumeration value=\"solidangleunit\"/>\n\t\t\t<xs:enumeration value=\"thermodynamictemperatureunit\"/>\n\t\t\t<xs:enumeration value=\"timeunit\"/>\n\t\t\t<xs:enumeration value=\"volumeunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitaryControlElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"alarmpanel\"/>\n\t\t\t<xs:enumeration value=\"controlpanel\"/>\n\t\t\t<xs:enumeration value=\"gasdetectionpanel\"/>\n\t\t\t<xs:enumeration value=\"indicatorpanel\"/>\n\t\t\t<xs:enumeration value=\"mimicpanel\"/>\n\t\t\t<xs:enumeration value=\"humidistat\"/>\n\t\t\t<xs:enumeration value=\"thermostat\"/>\n\t\t\t<xs:enumeration value=\"weatherstation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitaryEquipmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airhandler\"/>\n\t\t\t<xs:enumeration value=\"airconditioningunit\"/>\n\t\t\t<xs:enumeration value=\"dehumidifier\"/>\n\t\t\t<xs:enumeration value=\"splitsystem\"/>\n\t\t\t<xs:enumeration value=\"rooftopunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcValveTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airrelease\"/>\n\t\t\t<xs:enumeration value=\"antivacuum\"/>\n\t\t\t<xs:enumeration value=\"changeover\"/>\n\t\t\t<xs:enumeration value=\"check\"/>\n\t\t\t<xs:enumeration value=\"commissioning\"/>\n\t\t\t<xs:enumeration value=\"diverting\"/>\n\t\t\t<xs:enumeration value=\"drawoffcock\"/>\n\t\t\t<xs:enumeration value=\"doublecheck\"/>\n\t\t\t<xs:enumeration value=\"doubleregulating\"/>\n\t\t\t<xs:enumeration value=\"faucet\"/>\n\t\t\t<xs:enumeration value=\"flushing\"/>\n\t\t\t<xs:enumeration value=\"gascock\"/>\n\t\t\t<xs:enumeration value=\"gastap\"/>\n\t\t\t<xs:enumeration value=\"isolating\"/>\n\t\t\t<xs:enumeration value=\"mixing\"/>\n\t\t\t<xs:enumeration value=\"pressurereducing\"/>\n\t\t\t<xs:enumeration value=\"pressurerelief\"/>\n\t\t\t<xs:enumeration value=\"regulating\"/>\n\t\t\t<xs:enumeration value=\"safetycutoff\"/>\n\t\t\t<xs:enumeration value=\"steamtrap\"/>\n\t\t\t<xs:enumeration value=\"stopcock\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVibrationIsolatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compression\"/>\n\t\t\t<xs:enumeration value=\"spring\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVoidingFeatureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cutout\"/>\n\t\t\t<xs:enumeration value=\"notch\"/>\n\t\t\t<xs:enumeration value=\"hole\"/>\n\t\t\t<xs:enumeration value=\"miter\"/>\n\t\t\t<xs:enumeration value=\"chamfer\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWallTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"movable\"/>\n\t\t\t<xs:enumeration value=\"parapet\"/>\n\t\t\t<xs:enumeration value=\"partitioning\"/>\n\t\t\t<xs:enumeration value=\"plumbingwall\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"solidwall\"/>\n\t\t\t<xs:enumeration value=\"standard\"/>\n\t\t\t<xs:enumeration value=\"polygonal\"/>\n\t\t\t<xs:enumeration value=\"elementedwall\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWasteTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floortrap\"/>\n\t\t\t<xs:enumeration value=\"floorwaste\"/>\n\t\t\t<xs:enumeration value=\"gullysump\"/>\n\t\t\t<xs:enumeration value=\"gullytrap\"/>\n\t\t\t<xs:enumeration value=\"roofdrain\"/>\n\t\t\t<xs:enumeration value=\"wastedisposalunit\"/>\n\t\t\t<xs:enumeration value=\"wastetrap\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowPanelOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"sidehungrighthand\"/>\n\t\t\t<xs:enumeration value=\"sidehunglefthand\"/>\n\t\t\t<xs:enumeration value=\"tiltandturnrighthand\"/>\n\t\t\t<xs:enumeration value=\"tiltandturnlefthand\"/>\n\t\t\t<xs:enumeration value=\"tophung\"/>\n\t\t\t<xs:enumeration value=\"bottomhung\"/>\n\t\t\t<xs:enumeration value=\"pivothorizontal\"/>\n\t\t\t<xs:enumeration value=\"pivotvertical\"/>\n\t\t\t<xs:enumeration value=\"slidinghorizontal\"/>\n\t\t\t<xs:enumeration value=\"slidingvertical\"/>\n\t\t\t<xs:enumeration value=\"removablecasement\"/>\n\t\t\t<xs:enumeration value=\"fixedcasement\"/>\n\t\t\t<xs:enumeration value=\"otheroperation\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowPanelPositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"middle\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"bottom\"/>\n\t\t\t<xs:enumeration value=\"top\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowStyleConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aluminium\"/>\n\t\t\t<xs:enumeration value=\"high_grade_steel\"/>\n\t\t\t<xs:enumeration value=\"steel\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"aluminium_wood\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"other_construction\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowStyleOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_panel\"/>\n\t\t\t<xs:enumeration value=\"double_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"double_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_bottom\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_top\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_left\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_right\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"window\"/>\n\t\t\t<xs:enumeration value=\"skylight\"/>\n\t\t\t<xs:enumeration value=\"lightdome\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowTypePartitioningEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_panel\"/>\n\t\t\t<xs:enumeration value=\"double_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"double_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_bottom\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_top\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_left\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_right\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkCalendarTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"firstshift\"/>\n\t\t\t<xs:enumeration value=\"secondshift\"/>\n\t\t\t<xs:enumeration value=\"thirdshift\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkPlanTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actual\"/>\n\t\t\t<xs:enumeration value=\"baseline\"/>\n\t\t\t<xs:enumeration value=\"planned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkScheduleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actual\"/>\n\t\t\t<xs:enumeration value=\"baseline\"/>\n\t\t\t<xs:enumeration value=\"planned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<!-- simple type declarations (for TYPE defined data type definitions) -->\n\t<xs:simpleType name=\"IfcAbsorbedDoseMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAccelerationMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAmountOfSubstanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAngularVelocityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcArcIndex\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcArcIndex\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcArcIndex\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t<xs:maxLength value=\"3\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAreaDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAreaMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcBinary\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:hexBinary\">\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"IfcBoolean\">\n\t\t<xs:restriction base=\"xs:boolean\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBoxAlignment\">\n\t\t<xs:restriction base=\"ifc:IfcLabel\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCardinalPointReference\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcComplexNumber\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcComplexNumber\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"xs:double\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"array\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcComplexNumber\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"xs:double\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t<xs:maxLength value=\"2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcCompoundPlaneAngleMeasure\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcCompoundPlaneAngleMeasure\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"xs:long\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcCompoundPlaneAngleMeasure\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"xs:long\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t<xs:maxLength value=\"4\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcContextDependentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCountMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurvatureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDate\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDateTime\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDayInMonthNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDayInWeekNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDescriptiveMeasure\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDimensionCount\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoseEquivalentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuration\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDynamicViscosityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricCapacitanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricChargeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricConductanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricCurrentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricResistanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricVoltageMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEnergyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontStyle\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontVariant\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontWeight\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFrequencyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGloballyUniqueId\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:minLength value=\"22\"/>\n\t\t\t<xs:maxLength value=\"22\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatFluxDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatingValueMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIdentifier\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:maxLength value=\"255\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIlluminanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInductanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInteger\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIntegerCountRateMeasure\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIonConcentrationMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIsothermalMoistureCapacityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcKinematicViscosityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLabel\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:maxLength value=\"255\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLanguageId\">\n\t\t<xs:restriction base=\"ifc:IfcIdentifier\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLengthMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcLineIndex\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcLineIndex\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcLineIndex\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearMomentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearStiffnessMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearVelocityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLogical\">\n\t\t<xs:restriction base=\"ifc:logical\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousFluxMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousIntensityDistributionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousIntensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMagneticFluxDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMagneticFluxMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassFlowRateMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassPerLengthMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfElasticityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMoistureDiffusivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMolecularWeightMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMomentOfInertiaMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMonetaryMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMonthInYearNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNonNegativeLengthMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNormalisedRatioMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNumericMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPHMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcParameterValue\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlanarForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlaneAngleMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveInteger\">\n\t\t<xs:restriction base=\"ifc:IfcInteger\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveLengthMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositivePlaneAngleMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcPlaneAngleMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveRatioMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPowerMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPresentableText\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPressureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcPropertySetDefinitionSet\">\n\t\t<xs:sequence>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t</xs:sequence>\n\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t</xs:complexType>\n\t<xs:simpleType name=\"IfcRadioActivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRatioMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReal\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalFrequencyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalMassMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalStiffnessMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionModulusMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionalAreaIntegralMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcShearModulusMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSolidAngleMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPowerLevelMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPowerMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPressureLevelMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPressureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecificHeatCapacityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecularExponent\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecularRoughness\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTemperatureGradientMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTemperatureRateOfChangeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcText\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextAlignment\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextDecoration\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextFontName\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextTransformation\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalAdmittanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalConductivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalExpansionCoefficientMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalResistanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalTransmittanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermodynamicTemperatureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTime\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeStamp\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTorqueMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcURIReference\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVaporPermeabilityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVolumeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVolumetricFlowRateMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWarpingConstantMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWarpingMomentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<!-- base entity and entity attribute declaration (for embeded base schema definitions) -->\n\t<xs:element name=\"Entity\" type=\"ifc:Entity\" abstract=\"true\" nillable=\"true\"/>\n\t<xs:complexType name=\"Entity\" abstract=\"true\">\n\t\t<xs:attribute name=\"href\" type=\"xs:anyURI\" use=\"optional\"/>\n\t\t<xs:attribute name=\"ref\" type=\"xs:IDREF\" use=\"optional\"/>\n\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t</xs:complexType>\n\t<!-- base global attribute declaration (for embeded base schema definitions) -->\n\t<xs:attributeGroup name=\"instanceAttributes\">\n\t\t<xs:attribute name=\"id\" type=\"xs:ID\" use=\"optional\"/>\n\t\t<xs:attribute name=\"path\" type=\"xs:NMTOKENS\" use=\"optional\"/>\n\t\t<xs:attribute name=\"pos\" use=\"optional\">\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:restriction>\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:list itemType=\"xs:integer\"/>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t<xs:minLength value=\"1\"/>\n\t\t\t\t</xs:restriction>\n\t\t\t</xs:simpleType>\n\t\t</xs:attribute>\n\t</xs:attributeGroup>\n\t<xs:attribute name=\"arraySize\">\n\t\t<xs:simpleType>\n\t\t\t<xs:restriction>\n\t\t\t\t<xs:simpleType>\n\t\t\t\t\t<xs:list itemType=\"xs:integer\"/>\n\t\t\t\t</xs:simpleType>\n\t\t\t\t<xs:minLength value=\"1\"/>\n\t\t\t</xs:restriction>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:attribute name=\"itemType\">\n\t\t<xs:simpleType>\n\t\t\t<xs:list itemType=\"xs:QName\"/>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:attribute name=\"cType\">\n\t\t<xs:simpleType>\n\t\t\t<xs:list itemType=\"ifc:aggregateType\"/>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:simpleType name=\"aggregateType\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:enumeration value=\"array\"/>\n\t\t\t<xs:enumeration value=\"list\"/>\n\t\t\t<xs:enumeration value=\"set\"/>\n\t\t\t<xs:enumeration value=\"bag\"/>\n\t\t\t<xs:enumeration value=\"array-unique\"/>\n\t\t\t<xs:enumeration value=\"array-optional\"/>\n\t\t\t<xs:enumeration value=\"array-optional-unique\"/>\n\t\t\t<xs:enumeration value=\"list-unique\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<!-- base global simple type declaration (for embeded base schema definitions) -->\n\t<xs:complexType name=\"hexBinary\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"xs:hexBinary\">\n\t\t\t\t<xs:attribute name=\"extraBits\" type=\"xs:integer\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"logical\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:enumeration value=\"false\"/>\n\t\t\t<xs:enumeration value=\"true\"/>\n\t\t\t<xs:enumeration value=\"unknown\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n    <xs:simpleType name=\"Seq-IfcPositiveInteger\">\n        <xs:restriction>\n            <xs:simpleType>\n                <xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n            </xs:simpleType>\n            <xs:minLength value=\"3\"/>\n        </xs:restriction>\n    </xs:simpleType>\n\t<!-- base global wrapper declaration for atomic simple types (for embeded base schema definitions) -->\n\t<xs:element name=\"IfcAbsorbedDoseMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAbsorbedDoseMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAccelerationMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAccelerationMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAmountOfSubstanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAmountOfSubstanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAngularVelocityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAngularVelocityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcArcIndex-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcArcIndex\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAreaDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAreaMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcBinary-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBinary\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcBoolean-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBoolean\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcComplexNumber-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcComplexNumber\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCompoundPlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCompoundPlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcContextDependentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcContextDependentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCountMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCountMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCurvatureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCurvatureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDate-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDate\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDateTime-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDateTime\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDescriptiveMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDescriptiveMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDoseEquivalentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDoseEquivalentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDuration-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDuration\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDynamicViscosityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDynamicViscosityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricCapacitanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCapacitanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricChargeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricChargeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricConductanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricConductanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricCurrentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricResistanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricResistanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricVoltageMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricVoltageMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcEnergyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcFrequencyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFrequencyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcHeatFluxDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatFluxDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcHeatingValueMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatingValueMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIdentifier-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIdentifier\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIlluminanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIlluminanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcInductanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInductanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcInteger-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInteger\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIntegerCountRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIntegerCountRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIonConcentrationMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIonConcentrationMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIsothermalMoistureCapacityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcKinematicViscosityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcKinematicViscosityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLabel-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLabel\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLineIndex-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLineIndex\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearMomentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearMomentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearStiffnessMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearStiffnessMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearVelocityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearVelocityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLogical-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLogical\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousFluxMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousFluxMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousIntensityDistributionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityDistributionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousIntensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMagneticFluxDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMagneticFluxMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassFlowRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassFlowRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassPerLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassPerLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfElasticityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfElasticityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfLinearSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMoistureDiffusivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMoistureDiffusivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMolecularWeightMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMolecularWeightMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMomentOfInertiaMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMomentOfInertiaMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMonetaryMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMonetaryMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNonNegativeLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNonNegativeLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNormalisedRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNormalisedRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNullStyle-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNullStyle\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNumericMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNumericMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPHMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPHMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcParameterValue-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcParameterValue\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPlanarForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlanarForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveInteger-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveInteger\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositivePlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositivePlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPowerMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPowerMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPressureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPressureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPropertySetDefinitionSet-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:complexContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinitionSet\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:complexContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRadioActivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRadioActivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcReal-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcReal\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalFrequencyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalFrequencyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalMassMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalMassMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalStiffnessMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalStiffnessMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSectionModulusMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionModulusMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSectionalAreaIntegralMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionalAreaIntegralMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcShearModulusMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcShearModulusMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSolidAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSolidAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPowerLevelMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerLevelMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPowerMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPressureLevelMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureLevelMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPressureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecificHeatCapacityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecificHeatCapacityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecularExponent-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularExponent\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecularRoughness-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularRoughness\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTemperatureGradientMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureGradientMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTemperatureRateOfChangeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureRateOfChangeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcText-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcText\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTextFontName-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTextFontName\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalAdmittanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalAdmittanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalConductivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalConductivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalExpansionCoefficientMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalExpansionCoefficientMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalResistanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalResistanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalTransmittanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalTransmittanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermodynamicTemperatureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermodynamicTemperatureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTime-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTime\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTimeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTimeStamp-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeStamp\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTorqueMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTorqueMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVaporPermeabilityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVaporPermeabilityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVolumeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVolumetricFlowRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumetricFlowRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcWarpingConstantMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingConstantMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcWarpingMomentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingMomentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n</xs:schema>\n"
  },
  {
    "path": "Source/RevitIFCTools/IFC4RV.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:ifc=\"http://www.buildingsmart-tech.org/ifc/IFC4/ifc4 rv\" targetNamespace=\"http://www.buildingsmart-tech.org/ifc/IFC4/ifc4 rv\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\" >\n<!-- created with IFCDOC 11.8 at buildingsmart-tech.org -->\n\n<!--\nCopyright by:\nbuildingSMART International Limited, 1996-2020\n\nAny technical documentation made available by buildingSMART International Limited\nis the copyrighted work of buildingSMART International Limited and is owned by the \nbuildingSMART International Limited. It may be photocopied, used in software development, \nor translated into another computer language without prior written consent from \nbuildingSMART International Limited provided that full attribution is given. \nPrior written consent is required if changes are made to the technical specification.\n\nThis material is delivered to you as is and buildingSMART International Limited makes \nno warranty of any kind with regard to it, including, but not limited to, the implied \nwarranties as to its accuracy or fitness for a particular purpose. Any use of the \ntechnical documentation or the information contained therein is at the risk of the user. \nDocumentation may include technical or other inaccuracies or typographical errors. \nbuildingSMART International Limited shall not be liable for errors contained therein or \nfor incidental consequential damages in connection with the furnishing, performance or use \nof the material. The information contained in this document is subject to change without notice.\n-->\n\n\t<!-- root element declaration (for SCHEMA definitions) -->\n\t<xs:element name=\"uos\" type=\"ifc:uos\" abstract=\"true\"/>\n    <xs:simpleType name=\"Seq-anyURI\">\n        <xs:list itemType=\"xs:anyURI\"/>\n    </xs:simpleType>\n\t<xs:complexType name=\"uos\" abstract=\"true\">\n\t\t<xs:sequence>\n\t\t\t<xs:element name=\"header\" minOccurs=\"0\">\n\t\t\t\t<xs:complexType>\n\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t<xs:element name=\"name\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"time_stamp\" type=\"xs:dateTime\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"author\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"organization\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"preprocessor_version\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"originating_system\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"authorization\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"documentation\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t</xs:sequence>\n\t\t\t\t</xs:complexType>\n\t\t\t</xs:element>\n\t\t</xs:sequence>\n\t\t<xs:attribute name=\"id\" type=\"xs:ID\" use=\"optional\"/>\n\t\t<xs:attribute name=\"express\" type=\"ifc:Seq-anyURI\" use=\"optional\"/>\n\t\t<xs:attribute name=\"configuration\" type=\"ifc:Seq-anyURI\" use=\"optional\"/>\n\t</xs:complexType>\n\t<xs:element name=\"ifcXML\" type=\"ifc:ifcXML\" substitutionGroup=\"ifc:uos\"/>\n\t<xs:complexType name=\"ifcXML\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:uos\">\n\t\t\t\t<xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n\t\t\t\t\t<xs:element ref=\"ifc:Entity\"/>\n\t\t\t\t</xs:choice>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<!-- element and complex type declarations (for ENTITY definitions) -->\n\t<xs:element name=\"IfcActionRequest\" type=\"ifc:IfcActionRequest\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActionRequest\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActionRequestTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActor\" type=\"ifc:IfcActor\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TheActor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActorRole\" type=\"ifc:IfcActorRole\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActorRole\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Role\" type=\"ifc:IfcRoleEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedRole\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActuator\" type=\"ifc:IfcActuator\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActuator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActuatorType\" type=\"ifc:IfcActuatorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActuatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAddress\" type=\"ifc:IfcAddress\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAddress\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcAddressTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPurpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedBrep\" type=\"ifc:IfcAdvancedBrep\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedBrep\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedBrepWithVoids\" type=\"ifc:IfcAdvancedBrepWithVoids\" substitutionGroup=\"ifc:IfcAdvancedBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedBrepWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAdvancedBrep\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Voids\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClosedShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedFace\" type=\"ifc:IfcAdvancedFace\" substitutionGroup=\"ifc:IfcFaceSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFaceSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminal\" type=\"ifc:IfcAirTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalBox\" type=\"ifc:IfcAirTerminalBox\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalBoxType\" type=\"ifc:IfcAirTerminalBoxType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalBoxType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalType\" type=\"ifc:IfcAirTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirToAirHeatRecovery\" type=\"ifc:IfcAirToAirHeatRecovery\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirToAirHeatRecovery\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirToAirHeatRecoveryType\" type=\"ifc:IfcAirToAirHeatRecoveryType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirToAirHeatRecoveryType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlarm\" type=\"ifc:IfcAlarm\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlarm\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlarmType\" type=\"ifc:IfcAlarmType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlarmType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotation\" type=\"ifc:IfcAnnotation\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotationFillArea\" type=\"ifc:IfcAnnotationFillArea\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotationFillArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OuterBoundary\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApplication\" type=\"ifc:IfcApplication\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApplication\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ApplicationDeveloper\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Version\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicationFullName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicationIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAppliedValue\" type=\"ifc:IfcAppliedValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAppliedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitBasis\" type=\"ifc:IfcMeasureWithUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Components\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicableDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FixedUntilDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Condition\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ArithmeticOperator\" type=\"ifc:IfcArithmeticOperatorEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApproval\" type=\"ifc:IfcApproval\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApproval\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RequestingApproval\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"GivingApproval\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeOfApproval\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Level\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Qualifier\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApprovalRelationship\" type=\"ifc:IfcApprovalRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApprovalRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedApprovals\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcApproval\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryClosedProfileDef\" type=\"ifc:IfcArbitraryClosedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryClosedProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OuterCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryOpenProfileDef\" type=\"ifc:IfcArbitraryOpenProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryOpenProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Curve\" type=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryProfileDefWithVoids\" type=\"ifc:IfcArbitraryProfileDefWithVoids\" substitutionGroup=\"ifc:IfcArbitraryClosedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryProfileDefWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryClosedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerCurves\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAsset\" type=\"ifc:IfcAsset\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAsset\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OriginalValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"CurrentValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TotalReplacementCost\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Owner\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"User\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResponsiblePerson\" type=\"ifc:IfcPerson\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"DepreciatedValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IncorporationDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAsymmetricIShapeProfileDef\" type=\"ifc:IfcAsymmetricIShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAsymmetricIShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"BottomFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAudioVisualAppliance\" type=\"ifc:IfcAudioVisualAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAudioVisualAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAudioVisualApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAudioVisualApplianceType\" type=\"ifc:IfcAudioVisualApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAudioVisualApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAudioVisualApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis1Placement\" type=\"ifc:IfcAxis1Placement\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis1Placement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis2Placement2D\" type=\"ifc:IfcAxis2Placement2D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis2Placement2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis2Placement3D\" type=\"ifc:IfcAxis2Placement3D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis2Placement3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineCurve\" type=\"ifc:IfcBSplineCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Degree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveForm\" type=\"ifc:IfcBSplineCurveForm\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ClosedCurve\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineCurveWithKnots\" type=\"ifc:IfcBSplineCurveWithKnots\" substitutionGroup=\"ifc:IfcBSplineCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineCurveWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurve\">\n\t\t\t\t<xs:attribute name=\"KnotMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Knots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"KnotSpec\" type=\"ifc:IfcKnotType\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineSurface\" type=\"ifc:IfcBSplineSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"4\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UDegree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VDegree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SurfaceForm\" type=\"ifc:IfcBSplineSurfaceForm\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UClosed\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VClosed\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineSurfaceWithKnots\" type=\"ifc:IfcBSplineSurfaceWithKnots\" substitutionGroup=\"ifc:IfcBSplineSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineSurfaceWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineSurface\">\n\t\t\t\t<xs:attribute name=\"UMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"VMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"UKnots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"VKnots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"KnotSpec\" type=\"ifc:IfcKnotType\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeam\" type=\"ifc:IfcBeam\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeam\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeamStandardCase\" type=\"ifc:IfcBeamStandardCase\" substitutionGroup=\"ifc:IfcBeam\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeamStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBeam\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeamType\" type=\"ifc:IfcBeamType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeamType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBlobTexture\" type=\"ifc:IfcBlobTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBlobTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RasterCode\" type=\"ifc:IfcBinary\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RasterFormat\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBlock\" type=\"ifc:IfcBlock\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBlock\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ZLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoiler\" type=\"ifc:IfcBoiler\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoiler\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoilerType\" type=\"ifc:IfcBoilerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoilerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBooleanClippingResult\" type=\"ifc:IfcBooleanClippingResult\" substitutionGroup=\"ifc:IfcBooleanResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBooleanClippingResult\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBooleanResult\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBooleanResult\" type=\"ifc:IfcBooleanResult\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBooleanResult\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FirstOperand\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondOperand\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Operator\" type=\"ifc:IfcBooleanOperator\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryCondition\" type=\"ifc:IfcBoundaryCondition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryCondition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryCurve\" type=\"ifc:IfcBoundaryCurve\" substitutionGroup=\"ifc:IfcCompositeCurveOnSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurveOnSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryEdgeCondition\" type=\"ifc:IfcBoundaryEdgeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryEdgeCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryFaceCondition\" type=\"ifc:IfcBoundaryFaceCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryFaceCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryNodeCondition\" type=\"ifc:IfcBoundaryNodeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryNodeCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessX\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessY\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessZ\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryNodeConditionWarping\" type=\"ifc:IfcBoundaryNodeConditionWarping\" substitutionGroup=\"ifc:IfcBoundaryNodeCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryNodeConditionWarping\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryNodeCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WarpingStiffness\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcWarpingStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundedCurve\" type=\"ifc:IfcBoundedCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundedCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundedSurface\" type=\"ifc:IfcBoundedSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundedSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundingBox\" type=\"ifc:IfcBoundingBox\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundingBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Corner\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ZDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoxedHalfSpace\" type=\"ifc:IfcBoxedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoxedHalfSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Enclosure\" type=\"ifc:IfcBoundingBox\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuilding\" type=\"ifc:IfcBuilding\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuilding\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BuildingAddress\" type=\"ifc:IfcPostalAddress\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ElevationOfRefHeight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElevationOfTerrain\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElement\" type=\"ifc:IfcBuildingElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementPart\" type=\"ifc:IfcBuildingElementPart\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementPart\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementPartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementPartType\" type=\"ifc:IfcBuildingElementPartType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementPartType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementPartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementProxy\" type=\"ifc:IfcBuildingElementProxy\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementProxy\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementProxyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementProxyType\" type=\"ifc:IfcBuildingElementProxyType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementProxyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementProxyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementType\" type=\"ifc:IfcBuildingElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingStorey\" type=\"ifc:IfcBuildingStorey\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingStorey\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"Elevation\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingSystem\" type=\"ifc:IfcBuildingSystem\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingSystemTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBurner\" type=\"ifc:IfcBurner\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBurner\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBurnerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBurnerType\" type=\"ifc:IfcBurnerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBurnerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBurnerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCShapeProfileDef\" type=\"ifc:IfcCShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Girth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InternalFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierFitting\" type=\"ifc:IfcCableCarrierFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierFittingType\" type=\"ifc:IfcCableCarrierFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierSegment\" type=\"ifc:IfcCableCarrierSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierSegmentType\" type=\"ifc:IfcCableCarrierSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableFitting\" type=\"ifc:IfcCableFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableFittingType\" type=\"ifc:IfcCableFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableSegment\" type=\"ifc:IfcCableSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableSegmentType\" type=\"ifc:IfcCableSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPoint\" type=\"ifc:IfcCartesianPoint\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:attribute name=\"Coordinates\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList\" type=\"ifc:IfcCartesianPointList\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList2D\" type=\"ifc:IfcCartesianPointList2D\" substitutionGroup=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianPointList\">\n\t\t\t\t<xs:attribute name=\"CoordList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList3D\" type=\"ifc:IfcCartesianPointList3D\" substitutionGroup=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianPointList\">\n\t\t\t\t<xs:attribute name=\"CoordList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator\" type=\"ifc:IfcCartesianTransformationOperator\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis1\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Axis2\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LocalOrigin\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Scale\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator2D\" type=\"ifc:IfcCartesianTransformationOperator2D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator2DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator2DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2DnonUniform\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator2D\">\n\t\t\t\t<xs:attribute name=\"Scale2\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator3D\" type=\"ifc:IfcCartesianTransformationOperator3D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis3\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator3DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator3DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3DnonUniform\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator3D\">\n\t\t\t\t<xs:attribute name=\"Scale2\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scale3\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCenterLineProfileDef\" type=\"ifc:IfcCenterLineProfileDef\" substitutionGroup=\"ifc:IfcArbitraryOpenProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCenterLineProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryOpenProfileDef\">\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChiller\" type=\"ifc:IfcChiller\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChiller\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChillerType\" type=\"ifc:IfcChillerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChillerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChimney\" type=\"ifc:IfcChimney\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChimney\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChimneyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChimneyType\" type=\"ifc:IfcChimneyType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChimneyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChimneyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircle\" type=\"ifc:IfcCircle\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircleHollowProfileDef\" type=\"ifc:IfcCircleHollowProfileDef\" substitutionGroup=\"ifc:IfcCircleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircleHollowProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCircleProfileDef\">\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircleProfileDef\" type=\"ifc:IfcCircleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCivilElement\" type=\"ifc:IfcCivilElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCivilElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCivilElementType\" type=\"ifc:IfcCivilElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCivilElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassification\" type=\"ifc:IfcClassification\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassification\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferenceTokens\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasReferences\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationReference\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Source\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Edition\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EditionDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassificationReference\" type=\"ifc:IfcClassificationReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassificationReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasReferences\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationReference\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Sort\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClosedShell\" type=\"ifc:IfcClosedShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClosedShell\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoil\" type=\"ifc:IfcCoil\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoil\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoilType\" type=\"ifc:IfcCoilType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoilType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourRgb\" type=\"ifc:IfcColourRgb\" substitutionGroup=\"ifc:IfcColourSpecification\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourRgb\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcColourSpecification\">\n\t\t\t\t<xs:attribute name=\"Red\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Green\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Blue\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourRgbList\" type=\"ifc:IfcColourRgbList\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourRgbList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"ColourList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcNormalisedRatioMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourSpecification\" type=\"ifc:IfcColourSpecification\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourSpecification\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumn\" type=\"ifc:IfcColumn\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumn\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumnStandardCase\" type=\"ifc:IfcColumnStandardCase\" substitutionGroup=\"ifc:IfcColumn\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumnStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcColumn\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumnType\" type=\"ifc:IfcColumnType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumnType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCommunicationsAppliance\" type=\"ifc:IfcCommunicationsAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCommunicationsAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCommunicationsApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCommunicationsApplianceType\" type=\"ifc:IfcCommunicationsApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCommunicationsApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCommunicationsApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcComplexProperty\" type=\"ifc:IfcComplexProperty\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcComplexProperty\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcComplexPropertyTemplate\" type=\"ifc:IfcComplexPropertyTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcComplexPropertyTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertyTemplates\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyTemplate\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertyTemplate\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcComplexPropertyTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurve\" type=\"ifc:IfcCompositeCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Segments\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCompositeCurveSegment\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCompositeCurveSegment\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurveOnSurface\" type=\"ifc:IfcCompositeCurveOnSurface\" substitutionGroup=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurveOnSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurveSegment\" type=\"ifc:IfcCompositeCurveSegment\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurveSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Transition\" type=\"ifc:IfcTransitionCode\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeProfileDef\" type=\"ifc:IfcCompositeProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Profiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Label\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompressor\" type=\"ifc:IfcCompressor\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompressor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompressorType\" type=\"ifc:IfcCompressorType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompressorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCondenser\" type=\"ifc:IfcCondenser\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCondenser\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCondenserType\" type=\"ifc:IfcCondenserType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCondenserType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConic\" type=\"ifc:IfcConic\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConic\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectedFaceSet\" type=\"ifc:IfcConnectedFaceSet\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectedFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CfsFaces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFace\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFace\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionCurveGeometry\" type=\"ifc:IfcConnectionCurveGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionCurveGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionGeometry\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionPointEccentricity\" type=\"ifc:IfcConnectionPointEccentricity\" substitutionGroup=\"ifc:IfcConnectionPointGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionPointEccentricity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionPointGeometry\">\n\t\t\t\t<xs:attribute name=\"EccentricityInX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EccentricityInY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EccentricityInZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionPointGeometry\" type=\"ifc:IfcConnectionPointGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionPointGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PointOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionSurfaceGeometry\" type=\"ifc:IfcConnectionSurfaceGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionSurfaceGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionVolumeGeometry\" type=\"ifc:IfcConnectionVolumeGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionVolumeGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VolumeOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSolidOrShell\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VolumeOnRelatedElement\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSolidOrShell\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstraint\" type=\"ifc:IfcConstraint\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstraint\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CreatingActor\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstraintGrade\" type=\"ifc:IfcConstraintEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstraintSource\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionEquipmentResource\" type=\"ifc:IfcConstructionEquipmentResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionEquipmentResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionEquipmentResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionEquipmentResourceType\" type=\"ifc:IfcConstructionEquipmentResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionEquipmentResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionEquipmentResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionMaterialResource\" type=\"ifc:IfcConstructionMaterialResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionMaterialResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionMaterialResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionMaterialResourceType\" type=\"ifc:IfcConstructionMaterialResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionMaterialResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionMaterialResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionProductResource\" type=\"ifc:IfcConstructionProductResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionProductResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionProductResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionProductResourceType\" type=\"ifc:IfcConstructionProductResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionProductResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionProductResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionResource\" type=\"ifc:IfcConstructionResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Usage\" type=\"ifc:IfcResourceTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"BaseCosts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseQuantity\" type=\"ifc:IfcPhysicalQuantity\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionResourceType\" type=\"ifc:IfcConstructionResourceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionResourceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseCosts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseQuantity\" type=\"ifc:IfcPhysicalQuantity\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcContext\" type=\"ifc:IfcContext\" abstract=\"true\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcContext\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepresentationContexts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationContext\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitsInContext\" type=\"ifc:IfcUnitAssignment\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"IsDefinedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDefinesByProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDefinesByProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Declares\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDeclares\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDeclares\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ObjectType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Phase\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcContextDependentUnit\" type=\"ifc:IfcContextDependentUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcContextDependentUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcControl\" type=\"ifc:IfcControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcControl\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcController\" type=\"ifc:IfcController\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcController\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcControllerType\" type=\"ifc:IfcControllerType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcControllerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConversionBasedUnit\" type=\"ifc:IfcConversionBasedUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConversionBasedUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConversionFactor\" type=\"ifc:IfcMeasureWithUnit\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConversionBasedUnitWithOffset\" type=\"ifc:IfcConversionBasedUnitWithOffset\" substitutionGroup=\"ifc:IfcConversionBasedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConversionBasedUnitWithOffset\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConversionBasedUnit\">\n\t\t\t\t<xs:attribute name=\"ConversionOffset\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCooledBeam\" type=\"ifc:IfcCooledBeam\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCooledBeam\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCooledBeamType\" type=\"ifc:IfcCooledBeamType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCooledBeamType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoolingTower\" type=\"ifc:IfcCoolingTower\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoolingTower\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoolingTowerType\" type=\"ifc:IfcCoolingTowerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoolingTowerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoordinateOperation\" type=\"ifc:IfcCoordinateOperation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoordinateOperation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TargetCRS\" type=\"ifc:IfcCoordinateReferenceSystem\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoordinateReferenceSystem\" type=\"ifc:IfcCoordinateReferenceSystem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoordinateReferenceSystem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"GeodeticDatum\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VerticalDatum\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostItem\" type=\"ifc:IfcCostItem\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CostValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCostValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CostQuantities\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCostItemTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostSchedule\" type=\"ifc:IfcCostSchedule\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCostScheduleTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SubmittedOn\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UpdateDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostValue\" type=\"ifc:IfcCostValue\" substitutionGroup=\"ifc:IfcAppliedValue\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCovering\" type=\"ifc:IfcCovering\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCovering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoveringType\" type=\"ifc:IfcCoveringType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoveringType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCrewResource\" type=\"ifc:IfcCrewResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCrewResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCrewResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCrewResourceType\" type=\"ifc:IfcCrewResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCrewResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCrewResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCsgPrimitive3D\" type=\"ifc:IfcCsgPrimitive3D\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCsgPrimitive3D\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCsgSolid\" type=\"ifc:IfcCsgSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCsgSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TreeRootExpression\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCsgSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurrencyRelationship\" type=\"ifc:IfcCurrencyRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurrencyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RateSource\" type=\"ifc:IfcLibraryInformation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ExchangeRate\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RateDateTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurtainWall\" type=\"ifc:IfcCurtainWall\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurtainWall\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCurtainWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurtainWallType\" type=\"ifc:IfcCurtainWallType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurtainWallType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCurtainWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurve\" type=\"ifc:IfcCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveBoundedPlane\" type=\"ifc:IfcCurveBoundedPlane\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveBoundedPlane\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcPlane\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"OuterBoundary\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveBoundedSurface\" type=\"ifc:IfcCurveBoundedSurface\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveBoundedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Boundaries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBoundaryCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ImplicitOuter\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyle\" type=\"ifc:IfcCurveStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveFont\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveWidth\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelOrDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFont\" type=\"ifc:IfcCurveStyleFont\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PatternList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontPattern\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurveStyleFontPattern\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFontAndScaling\" type=\"ifc:IfcCurveStyleFontAndScaling\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFontAndScaling\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveFont\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveFontScaling\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFontPattern\" type=\"ifc:IfcCurveStyleFontPattern\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFontPattern\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"VisibleSegmentLength\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InvisibleSegmentLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCylindricalSurface\" type=\"ifc:IfcCylindricalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCylindricalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDamper\" type=\"ifc:IfcDamper\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDamper\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDamperType\" type=\"ifc:IfcDamperType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDamperType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedProfileDef\" type=\"ifc:IfcDerivedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Operator\" type=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Label\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedUnit\" type=\"ifc:IfcDerivedUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDerivedUnitElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDerivedUnitElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UnitType\" type=\"ifc:IfcDerivedUnitEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedUnitElement\" type=\"ifc:IfcDerivedUnitElement\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedUnitElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" type=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Exponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDimensionalExponents\" type=\"ifc:IfcDimensionalExponents\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDimensionalExponents\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"LengthExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MassExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectricCurrentExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThermodynamicTemperatureExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AmountOfSubstanceExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LuminousIntensityExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDirection\" type=\"ifc:IfcDirection\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDirection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:attribute name=\"DirectionRatios\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDiscreteAccessory\" type=\"ifc:IfcDiscreteAccessory\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDiscreteAccessory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDiscreteAccessoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDiscreteAccessoryType\" type=\"ifc:IfcDiscreteAccessoryType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDiscreteAccessoryType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDiscreteAccessoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionChamberElement\" type=\"ifc:IfcDistributionChamberElement\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionChamberElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionChamberElementType\" type=\"ifc:IfcDistributionChamberElementType\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionChamberElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionCircuit\" type=\"ifc:IfcDistributionCircuit\" substitutionGroup=\"ifc:IfcDistributionSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionCircuit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionSystem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionControlElement\" type=\"ifc:IfcDistributionControlElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionControlElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionControlElementType\" type=\"ifc:IfcDistributionControlElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionControlElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionElement\" type=\"ifc:IfcDistributionElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionElementType\" type=\"ifc:IfcDistributionElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionFlowElement\" type=\"ifc:IfcDistributionFlowElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionFlowElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionFlowElementType\" type=\"ifc:IfcDistributionFlowElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionFlowElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionPort\" type=\"ifc:IfcDistributionPort\" substitutionGroup=\"ifc:IfcPort\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionPort\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPort\">\n\t\t\t\t<xs:attribute name=\"FlowDirection\" type=\"ifc:IfcFlowDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionPortTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SystemType\" type=\"ifc:IfcDistributionSystemEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionSystem\" type=\"ifc:IfcDistributionSystem\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionSystemEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentInformation\" type=\"ifc:IfcDocumentInformation\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentInformation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DocumentOwner\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Editors\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IntendedUse\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scope\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Revision\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastRevisionTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectronicFormat\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValidFrom\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValidUntil\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Confidentiality\" type=\"ifc:IfcDocumentConfidentialityEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcDocumentStatusEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentInformationRelationship\" type=\"ifc:IfcDocumentInformationRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentInformationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingDocument\" type=\"ifc:IfcDocumentInformation\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedDocuments\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDocumentInformation\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RelationshipType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentReference\" type=\"ifc:IfcDocumentReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedDocument\" type=\"ifc:IfcDocumentInformation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoor\" type=\"ifc:IfcDoor\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDoorTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorTypeOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedOperationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorLiningProperties\" type=\"ifc:IfcDoorLiningProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorLiningProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CasingThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CasingDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorPanelProperties\" type=\"ifc:IfcDoorPanelProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorPanelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PanelDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelOperation\" type=\"ifc:IfcDoorPanelOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelWidth\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcDoorPanelPositionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorStandardCase\" type=\"ifc:IfcDoorStandardCase\" substitutionGroup=\"ifc:IfcDoor\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDoor\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorStyle\" type=\"ifc:IfcDoorStyle\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorStyleOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstructionType\" type=\"ifc:IfcDoorStyleConstructionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Sizeable\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorType\" type=\"ifc:IfcDoorType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDoorTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorTypeOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedOperationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingPreDefinedColour\" type=\"ifc:IfcDraughtingPreDefinedColour\" substitutionGroup=\"ifc:IfcPreDefinedColour\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedColour\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingPreDefinedCurveFont\" type=\"ifc:IfcDraughtingPreDefinedCurveFont\" substitutionGroup=\"ifc:IfcPreDefinedCurveFont\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedCurveFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctFitting\" type=\"ifc:IfcDuctFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctFittingType\" type=\"ifc:IfcDuctFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSegment\" type=\"ifc:IfcDuctSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSegmentType\" type=\"ifc:IfcDuctSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSilencer\" type=\"ifc:IfcDuctSilencer\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSilencer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSilencerType\" type=\"ifc:IfcDuctSilencerType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSilencerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdge\" type=\"ifc:IfcEdge\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeStart\" type=\"ifc:IfcVertex\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"EdgeEnd\" type=\"ifc:IfcVertex\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdgeCurve\" type=\"ifc:IfcEdgeCurve\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdgeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeGeometry\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdgeLoop\" type=\"ifc:IfcEdgeLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdgeLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricAppliance\" type=\"ifc:IfcElectricAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricApplianceType\" type=\"ifc:IfcElectricApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricDistributionBoard\" type=\"ifc:IfcElectricDistributionBoard\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricDistributionBoard\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricDistributionBoardTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricDistributionBoardType\" type=\"ifc:IfcElectricDistributionBoardType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricDistributionBoardType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricDistributionBoardTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowStorageDevice\" type=\"ifc:IfcElectricFlowStorageDevice\" substitutionGroup=\"ifc:IfcFlowStorageDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowStorageDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowStorageDeviceType\" type=\"ifc:IfcElectricFlowStorageDeviceType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowStorageDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricGenerator\" type=\"ifc:IfcElectricGenerator\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricGenerator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricGeneratorType\" type=\"ifc:IfcElectricGeneratorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricGeneratorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricMotor\" type=\"ifc:IfcElectricMotor\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricMotor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricMotorType\" type=\"ifc:IfcElectricMotorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricMotorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricTimeControl\" type=\"ifc:IfcElectricTimeControl\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricTimeControl\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricTimeControlType\" type=\"ifc:IfcElectricTimeControlType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricTimeControlType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElement\" type=\"ifc:IfcElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProjections\" type=\"ifc:IfcRelProjectsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"HasOpenings\" type=\"ifc:IfcRelVoidsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementAssembly\" type=\"ifc:IfcElementAssembly\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementAssembly\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementAssemblyType\" type=\"ifc:IfcElementAssemblyType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementAssemblyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementComponent\" type=\"ifc:IfcElementComponent\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementComponent\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementComponentType\" type=\"ifc:IfcElementComponentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementComponentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementQuantity\" type=\"ifc:IfcElementQuantity\" substitutionGroup=\"ifc:IfcQuantitySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementQuantity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcQuantitySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Quantities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MethodOfMeasurement\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementType\" type=\"ifc:IfcElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ElementType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementarySurface\" type=\"ifc:IfcElementarySurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementarySurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEllipse\" type=\"ifc:IfcEllipse\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEllipse\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\n\t\t\t\t<xs:attribute name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEllipseProfileDef\" type=\"ifc:IfcEllipseProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEllipseProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEnergyConversionDevice\" type=\"ifc:IfcEnergyConversionDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEnergyConversionDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEnergyConversionDeviceType\" type=\"ifc:IfcEnergyConversionDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEnergyConversionDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEngine\" type=\"ifc:IfcEngine\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEngine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEngineTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEngineType\" type=\"ifc:IfcEngineType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEngineType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEngineTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporativeCooler\" type=\"ifc:IfcEvaporativeCooler\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporativeCooler\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporativeCoolerType\" type=\"ifc:IfcEvaporativeCoolerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporativeCoolerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporator\" type=\"ifc:IfcEvaporator\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporatorType\" type=\"ifc:IfcEvaporatorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvent\" type=\"ifc:IfcEvent\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EventOccurenceTime\" type=\"ifc:IfcEventTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEventTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EventTriggerType\" type=\"ifc:IfcEventTriggerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedEventTriggerType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEventTime\" type=\"ifc:IfcEventTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEventTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"ActualDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEventType\" type=\"ifc:IfcEventType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEventType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEventTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EventTriggerType\" type=\"ifc:IfcEventTriggerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedEventTriggerType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtendedProperties\" type=\"ifc:IfcExtendedProperties\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtendedProperties\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Properties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalInformation\" type=\"ifc:IfcExternalInformation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalInformation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalReference\" type=\"ifc:IfcExternalReference\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalReference\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalReferenceRelationship\" type=\"ifc:IfcExternalReferenceRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalReferenceRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingReference\" type=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalSpatialElement\" type=\"ifc:IfcExternalSpatialElement\" substitutionGroup=\"ifc:IfcExternalSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalSpatialElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcExternalSpatialElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalSpatialStructureElement\" type=\"ifc:IfcExternalSpatialStructureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalSpatialStructureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedHatchStyle\" type=\"ifc:IfcExternallyDefinedHatchStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedHatchStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedSurfaceStyle\" type=\"ifc:IfcExternallyDefinedSurfaceStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedSurfaceStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedTextFont\" type=\"ifc:IfcExternallyDefinedTextFont\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedTextFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtrudedAreaSolid\" type=\"ifc:IfcExtrudedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtrudedAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtrudedAreaSolidTapered\" type=\"ifc:IfcExtrudedAreaSolidTapered\" substitutionGroup=\"ifc:IfcExtrudedAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtrudedAreaSolidTapered\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtrudedAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EndSweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFace\" type=\"ifc:IfcFace\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Bounds\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFaceBound\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFaceBound\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceBasedSurfaceModel\" type=\"ifc:IfcFaceBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceBasedSurfaceModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FbsmFaces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectedFaceSet\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcConnectedFaceSet\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceBound\" type=\"ifc:IfcFaceBound\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceBound\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Bound\" type=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Orientation\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceOuterBound\" type=\"ifc:IfcFaceOuterBound\" substitutionGroup=\"ifc:IfcFaceBound\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceOuterBound\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFaceBound\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceSurface\" type=\"ifc:IfcFaceSurface\" substitutionGroup=\"ifc:IfcFace\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFace\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FaceSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacetedBrep\" type=\"ifc:IfcFacetedBrep\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacetedBrep\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacetedBrepWithVoids\" type=\"ifc:IfcFacetedBrepWithVoids\" substitutionGroup=\"ifc:IfcFacetedBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacetedBrepWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacetedBrep\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Voids\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClosedShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFailureConnectionCondition\" type=\"ifc:IfcFailureConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFailureConnectionCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t<xs:attribute name=\"TensionFailureX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionFailureY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionFailureZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFan\" type=\"ifc:IfcFan\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFan\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFanType\" type=\"ifc:IfcFanType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFanType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFastener\" type=\"ifc:IfcFastener\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFastener\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFastenerType\" type=\"ifc:IfcFastenerType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFastenerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElement\" type=\"ifc:IfcFeatureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElementAddition\" type=\"ifc:IfcFeatureElementAddition\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElementAddition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElementSubtraction\" type=\"ifc:IfcFeatureElementSubtraction\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElementSubtraction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyle\" type=\"ifc:IfcFillAreaStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FillStyles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFillStyleSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelorDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyleHatching\" type=\"ifc:IfcFillAreaStyleHatching\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyleHatching\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HatchLineAppearance\" type=\"ifc:IfcCurveStyle\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"StartOfNextHatchLine\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcHatchLineDistanceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointOfReferenceHatchLine\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PatternStart\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"HatchLineAngle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyleTiles\" type=\"ifc:IfcFillAreaStyleTiles\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyleTiles\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TilingPattern\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\" minOccurs=\"2\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcVector\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Tiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStyledItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStyledItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TilingScale\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFilter\" type=\"ifc:IfcFilter\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFilter\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFilterType\" type=\"ifc:IfcFilterType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFilterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFireSuppressionTerminal\" type=\"ifc:IfcFireSuppressionTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFireSuppressionTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFireSuppressionTerminalType\" type=\"ifc:IfcFireSuppressionTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFireSuppressionTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFixedReferenceSweptAreaSolid\" type=\"ifc:IfcFixedReferenceSweptAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFixedReferenceSweptAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"FixedReference\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"StartParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowController\" type=\"ifc:IfcFlowController\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowController\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowControllerType\" type=\"ifc:IfcFlowControllerType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowControllerType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowFitting\" type=\"ifc:IfcFlowFitting\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowFittingType\" type=\"ifc:IfcFlowFittingType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowFittingType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowInstrument\" type=\"ifc:IfcFlowInstrument\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowInstrument\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowInstrumentType\" type=\"ifc:IfcFlowInstrumentType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowInstrumentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMeter\" type=\"ifc:IfcFlowMeter\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMeter\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMeterType\" type=\"ifc:IfcFlowMeterType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMeterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMovingDevice\" type=\"ifc:IfcFlowMovingDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMovingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMovingDeviceType\" type=\"ifc:IfcFlowMovingDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMovingDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowSegment\" type=\"ifc:IfcFlowSegment\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowSegmentType\" type=\"ifc:IfcFlowSegmentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowSegmentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowStorageDevice\" type=\"ifc:IfcFlowStorageDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowStorageDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowStorageDeviceType\" type=\"ifc:IfcFlowStorageDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowStorageDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTerminal\" type=\"ifc:IfcFlowTerminal\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTerminalType\" type=\"ifc:IfcFlowTerminalType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTerminalType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTreatmentDevice\" type=\"ifc:IfcFlowTreatmentDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTreatmentDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTreatmentDeviceType\" type=\"ifc:IfcFlowTreatmentDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTreatmentDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFooting\" type=\"ifc:IfcFooting\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFooting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFootingType\" type=\"ifc:IfcFootingType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFootingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnishingElement\" type=\"ifc:IfcFurnishingElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnishingElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnishingElementType\" type=\"ifc:IfcFurnishingElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnishingElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurniture\" type=\"ifc:IfcFurniture\" substitutionGroup=\"ifc:IfcFurnishingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurniture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFurnitureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnitureType\" type=\"ifc:IfcFurnitureType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnitureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\n\t\t\t\t<xs:attribute name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFurnitureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeographicElement\" type=\"ifc:IfcGeographicElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeographicElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGeographicElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeographicElementType\" type=\"ifc:IfcGeographicElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeographicElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGeographicElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricCurveSet\" type=\"ifc:IfcGeometricCurveSet\" substitutionGroup=\"ifc:IfcGeometricSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricCurveSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationContext\" type=\"ifc:IfcGeometricRepresentationContext\" substitutionGroup=\"ifc:IfcRepresentationContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationContext\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WorldCoordinateSystem\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TrueNorth\" type=\"ifc:IfcDirection\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"HasSubContexts\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationSubContext\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGeometricRepresentationSubContext\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasCoordinateOperation\" type=\"ifc:IfcCoordinateOperation\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CoordinateSpaceDimension\" type=\"ifc:IfcDimensionCount\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Precision\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationItem\" type=\"ifc:IfcGeometricRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcGeometricRepresentationContext\">\n\t\t\t\t<xs:sequence/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationSubContext\" type=\"ifc:IfcGeometricRepresentationSubContext\" substitutionGroup=\"ifc:IfcGeometricRepresentationContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationSubContext-temp\">\n\t\t\t\t<xs:attribute name=\"TargetScale\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TargetView\" type=\"ifc:IfcGeometricProjectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedTargetView\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricSet\" type=\"ifc:IfcGeometricSet\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGeometricSetSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGrid\" type=\"ifc:IfcGrid\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGrid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WAxes\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGridTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGridAxis\" type=\"ifc:IfcGridAxis\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGridAxis\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"AxisTag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGridPlacement\" type=\"ifc:IfcGridPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGridPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlacementLocation\" type=\"ifc:IfcVirtualGridIntersection\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"PlacementRefDirection\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGridPlacementDirectionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGroup\" type=\"ifc:IfcGroup\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHalfSpaceSolid\" type=\"ifc:IfcHalfSpaceSolid\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHalfSpaceSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"AgreementFlag\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHeatExchanger\" type=\"ifc:IfcHeatExchanger\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHeatExchanger\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHeatExchangerType\" type=\"ifc:IfcHeatExchangerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHeatExchangerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHumidifier\" type=\"ifc:IfcHumidifier\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHumidifier\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHumidifierType\" type=\"ifc:IfcHumidifierType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHumidifierType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIShapeProfileDef\" type=\"ifc:IfcIShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcImageTexture\" type=\"ifc:IfcImageTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcImageTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:attribute name=\"URLReference\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedColourMap\" type=\"ifc:IfcIndexedColourMap\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedColourMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Colours\" type=\"ifc:IfcColourRgbList\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Opacity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ColourIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolyCurve\" type=\"ifc:IfcIndexedPolyCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolyCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Points\" type=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Segments\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSegmentIndexSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSegmentIndexSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolygonalFace\" type=\"ifc:IfcIndexedPolygonalFace\" substitutionGroup=\"ifc:IfcTessellatedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolygonalFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedItem\">\n\t\t\t\t<xs:attribute name=\"CoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolygonalFaceWithVoids\" type=\"ifc:IfcIndexedPolygonalFaceWithVoids\" substitutionGroup=\"ifc:IfcIndexedPolygonalFace\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolygonalFaceWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcIndexedPolygonalFace\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerCoordIndices\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element name=\"Seq-IfcPositiveInteger-wrapper\" type=\"ifc:Seq-IfcPositiveInteger\" maxOccurs=\"unbounded\" />\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedTextureMap\" type=\"ifc:IfcIndexedTextureMap\" abstract=\"true\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedTextureMap\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TexCoords\" type=\"ifc:IfcTextureVertexList\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedTriangleTextureMap\" type=\"ifc:IfcIndexedTriangleTextureMap\" substitutionGroup=\"ifc:IfcIndexedTextureMap\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedTriangleTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcIndexedTextureMap\">\n\t\t\t\t<xs:attribute name=\"TexCoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInterceptor\" type=\"ifc:IfcInterceptor\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInterceptor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInterceptorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInterceptorType\" type=\"ifc:IfcInterceptorType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInterceptorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInterceptorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIntersectionCurve\" type=\"ifc:IfcIntersectionCurve\" substitutionGroup=\"ifc:IfcSurfaceCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIntersectionCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInventory\" type=\"ifc:IfcInventory\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInventory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Jurisdiction\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResponsiblePersons\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPerson\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurrentValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"OriginalValue\" type=\"ifc:IfcCostValue\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInventoryTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastUpdateDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIrregularTimeSeries\" type=\"ifc:IfcIrregularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIrregularTimeSeries\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIrregularTimeSeriesValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIrregularTimeSeriesValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIrregularTimeSeriesValue\" type=\"ifc:IfcIrregularTimeSeriesValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIrregularTimeSeriesValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TimeStamp\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcJunctionBox\" type=\"ifc:IfcJunctionBox\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcJunctionBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcJunctionBoxType\" type=\"ifc:IfcJunctionBoxType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcJunctionBoxType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLShapeProfileDef\" type=\"ifc:IfcLShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LegSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLaborResource\" type=\"ifc:IfcLaborResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLaborResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLaborResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLaborResourceType\" type=\"ifc:IfcLaborResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLaborResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLaborResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLagTime\" type=\"ifc:IfcLagTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLagTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LagValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTimeOrRatioSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"DurationType\" type=\"ifc:IfcTaskDurationEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLamp\" type=\"ifc:IfcLamp\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLamp\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLampType\" type=\"ifc:IfcLampType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLampType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLibraryInformation\" type=\"ifc:IfcLibraryInformation\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLibraryInformation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Publisher\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Version\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VersionDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLibraryReference\" type=\"ifc:IfcLibraryReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLibraryReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedLibrary\" type=\"ifc:IfcLibraryInformation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Language\" type=\"ifc:IfcLanguageId\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightDistributionData\" type=\"ifc:IfcLightDistributionData\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightDistributionData\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"MainPlaneAngle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondaryPlaneAngle\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPlaneAngleMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"LuminousIntensity\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLuminousIntensityDistributionMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightFixture\" type=\"ifc:IfcLightFixture\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightFixture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightFixtureType\" type=\"ifc:IfcLightFixtureType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightFixtureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightIntensityDistribution\" type=\"ifc:IfcLightIntensityDistribution\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightIntensityDistribution\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DistributionData\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLightDistributionData\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLightDistributionData\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LightDistributionCurve\" type=\"ifc:IfcLightDistributionCurveEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSource\" type=\"ifc:IfcLightSource\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LightColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AmbientIntensity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Intensity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceAmbient\" type=\"ifc:IfcLightSourceAmbient\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceAmbient\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceDirectional\" type=\"ifc:IfcLightSourceDirectional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceDirectional\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceGoniometric\" type=\"ifc:IfcLightSourceGoniometric\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceGoniometric\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ColourAppearance\" type=\"ifc:IfcColourRgb\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LightDistributionDataSource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ColourTemperature\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LuminousFlux\" type=\"ifc:IfcLuminousFluxMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LightEmissionSource\" type=\"ifc:IfcLightEmissionSourceEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourcePositional\" type=\"ifc:IfcLightSourcePositional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourcePositional\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstantAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DistanceAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"QuadricAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceSpot\" type=\"ifc:IfcLightSourceSpot\" substitutionGroup=\"ifc:IfcLightSourcePositional\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceSpot\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSourcePositional\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ConcentrationExponent\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SpreadAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BeamWidthAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLine\" type=\"ifc:IfcLine\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Pnt\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Dir\" type=\"ifc:IfcVector\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLocalPlacement\" type=\"ifc:IfcLocalPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLocalPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlacementRelTo\" type=\"ifc:IfcObjectPlacement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RelativePlacement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLoop\" type=\"ifc:IfcLoop\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcManifoldSolidBrep\" type=\"ifc:IfcManifoldSolidBrep\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcManifoldSolidBrep\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Outer\" type=\"ifc:IfcClosedShell\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMapConversion\" type=\"ifc:IfcMapConversion\" substitutionGroup=\"ifc:IfcCoordinateOperation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMapConversion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCoordinateOperation\">\n\t\t\t\t<xs:attribute name=\"Eastings\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Northings\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OrthogonalHeight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"XAxisAbscissa\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"XAxisOrdinate\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scale\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMappedItem\" type=\"ifc:IfcMappedItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMappedItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MappingSource\" type=\"ifc:IfcRepresentationMap\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"MappingTarget\" type=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterial\" type=\"ifc:IfcMaterial\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterial\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasRepresentation\" type=\"ifc:IfcMaterialDefinitionRepresentation\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialClassificationRelationship\" type=\"ifc:IfcMaterialClassificationRelationship\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialClassificationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialClassifications\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ClassifiedMaterial\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialConstituent\" type=\"ifc:IfcMaterialConstituent\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialConstituent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Fraction\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialConstituentSet\" type=\"ifc:IfcMaterialConstituentSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialConstituentSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialConstituents\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialConstituent\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialConstituent\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialDefinition\" type=\"ifc:IfcMaterialDefinition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialDefinitionRepresentation\" type=\"ifc:IfcMaterialDefinitionRepresentation\" substitutionGroup=\"ifc:IfcProductRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialDefinitionRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayer\" type=\"ifc:IfcMaterialLayer\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsVentilated\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerSet\" type=\"ifc:IfcMaterialLayerSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialLayers\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialLayer\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerSetName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerSetUsage\" type=\"ifc:IfcMaterialLayerSetUsage\" substitutionGroup=\"ifc:IfcMaterialUsageDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerSetUsage\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialUsageDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForLayerSet\" type=\"ifc:IfcMaterialLayerSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerSetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DirectionSense\" type=\"ifc:IfcDirectionSenseEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OffsetFromReferenceLine\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReferenceExtent\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerWithOffsets\" type=\"ifc:IfcMaterialLayerWithOffsets\" substitutionGroup=\"ifc:IfcMaterialLayer\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerWithOffsets\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialLayer\">\n\t\t\t\t<xs:attribute name=\"OffsetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OffsetValues\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialList\" type=\"ifc:IfcMaterialList\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Materials\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfile\" type=\"ifc:IfcMaterialProfile\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfile\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Profile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSet\" type=\"ifc:IfcMaterialProfileSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialProfiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialProfile\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialProfile\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CompositeProfile\" type=\"ifc:IfcCompositeProfileDef\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSetUsage\" type=\"ifc:IfcMaterialProfileSetUsage\" substitutionGroup=\"ifc:IfcMaterialUsageDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSetUsage\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialUsageDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForProfileSet\" type=\"ifc:IfcMaterialProfileSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CardinalPoint\" type=\"ifc:IfcCardinalPointReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReferenceExtent\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSetUsageTapering\" type=\"ifc:IfcMaterialProfileSetUsageTapering\" substitutionGroup=\"ifc:IfcMaterialProfileSetUsage\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSetUsageTapering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProfileSetUsage\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForProfileEndSet\" type=\"ifc:IfcMaterialProfileSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CardinalEndPoint\" type=\"ifc:IfcCardinalPointReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileWithOffsets\" type=\"ifc:IfcMaterialProfileWithOffsets\" substitutionGroup=\"ifc:IfcMaterialProfile\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileWithOffsets\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProfile\">\n\t\t\t\t<xs:attribute name=\"OffsetValues\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProperties\" type=\"ifc:IfcMaterialProperties\" substitutionGroup=\"ifc:IfcExtendedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtendedProperties\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialRelationship\" type=\"ifc:IfcMaterialRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedMaterials\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialUsageDefinition\" type=\"ifc:IfcMaterialUsageDefinition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialUsageDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMeasureWithUnit\" type=\"ifc:IfcMeasureWithUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMeasureWithUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ValueComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalFastener\" type=\"ifc:IfcMechanicalFastener\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalFastener\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMechanicalFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalFastenerType\" type=\"ifc:IfcMechanicalFastenerType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalFastenerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMechanicalFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMedicalDevice\" type=\"ifc:IfcMedicalDevice\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMedicalDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMedicalDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMedicalDeviceType\" type=\"ifc:IfcMedicalDeviceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMedicalDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMedicalDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMember\" type=\"ifc:IfcMember\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMemberStandardCase\" type=\"ifc:IfcMemberStandardCase\" substitutionGroup=\"ifc:IfcMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMemberStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMemberType\" type=\"ifc:IfcMemberType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMemberType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMetric\" type=\"ifc:IfcMetric\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMetric\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DataValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencePath\" type=\"ifc:IfcReference\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Benchmark\" type=\"ifc:IfcBenchmarkEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValueSource\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcMirroredProfileDef-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcDerivedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMirroredProfileDef\" type=\"ifc:IfcMirroredProfileDef\" substitutionGroup=\"ifc:IfcDerivedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMirroredProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMirroredProfileDef-temp\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMonetaryUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Currency\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMotorConnection\" type=\"ifc:IfcMotorConnection\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMotorConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMotorConnectionType\" type=\"ifc:IfcMotorConnectionType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMotorConnectionType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcNamedUnit\" type=\"ifc:IfcNamedUnit\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcNamedUnit\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Dimensions\" type=\"ifc:IfcDimensionalExponents\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UnitType\" type=\"ifc:IfcUnitEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObject\" type=\"ifc:IfcObject\" abstract=\"true\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObject\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IsDeclaredBy\" type=\"ifc:IfcRelDefinesByObject\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"IsTypedBy\" type=\"ifc:IfcRelDefinesByType\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"IsDefinedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDefinesByProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDefinesByProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ObjectType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjectDefinition\" type=\"ifc:IfcObjectDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjectDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IsNestedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelNests\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelNests\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"IsDecomposedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelAggregates\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelAggregates\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjectPlacement\" type=\"ifc:IfcObjectPlacement\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjectPlacement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjective\" type=\"ifc:IfcObjective\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjective\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BenchmarkValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcConstraint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LogicalAggregator\" type=\"ifc:IfcLogicalOperatorEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ObjectiveQualifier\" type=\"ifc:IfcObjectiveEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedQualifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOccupant\" type=\"ifc:IfcOccupant\" substitutionGroup=\"ifc:IfcActor\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOccupant\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcActor\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOccupantTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurve2D\" type=\"ifc:IfcOffsetCurve2D\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurve2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Distance\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurve3D\" type=\"ifc:IfcOffsetCurve3D\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurve3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Distance\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpenShell\" type=\"ifc:IfcOpenShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpenShell\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpeningElement\" type=\"ifc:IfcOpeningElement\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpeningElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasFillings\" type=\"ifc:IfcRelFillsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOpeningElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpeningStandardCase\" type=\"ifc:IfcOpeningStandardCase\" substitutionGroup=\"ifc:IfcOpeningElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpeningStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOpeningElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrganization\" type=\"ifc:IfcOrganization\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrganization\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Addresses\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAddress\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrganizationRelationship\" type=\"ifc:IfcOrganizationRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrganizationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingOrganization\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedOrganizations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrganization\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcOrientedEdge-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrientedEdge\" type=\"ifc:IfcOrientedEdge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrientedEdge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOrientedEdge-temp\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeElement\" type=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Orientation\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOuterBoundaryCurve\" type=\"ifc:IfcOuterBoundaryCurve\" substitutionGroup=\"ifc:IfcBoundaryCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOuterBoundaryCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOutlet\" type=\"ifc:IfcOutlet\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOutlet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOutletType\" type=\"ifc:IfcOutletType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOutletType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOwnerHistory\" type=\"ifc:IfcOwnerHistory\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOwnerHistory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OwningUser\" type=\"ifc:IfcPersonAndOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"OwningApplication\" type=\"ifc:IfcApplication\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"LastModifyingUser\" type=\"ifc:IfcPersonAndOrganization\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LastModifyingApplication\" type=\"ifc:IfcApplication\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"State\" type=\"ifc:IfcStateEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ChangeAction\" type=\"ifc:IfcChangeActionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastModifiedDate\" type=\"ifc:IfcTimeStamp\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationDate\" type=\"ifc:IfcTimeStamp\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcParameterizedProfileDef\" type=\"ifc:IfcParameterizedProfileDef\" abstract=\"true\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcParameterizedProfileDef\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement2D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPath\" type=\"ifc:IfcPath\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPath\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPcurve\" type=\"ifc:IfcPcurve\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPcurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReferenceCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPerformanceHistory\" type=\"ifc:IfcPerformanceHistory\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPerformanceHistory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"LifeCyclePhase\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPerformanceHistoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPermeableCoveringProperties\" type=\"ifc:IfcPermeableCoveringProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPermeableCoveringProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcPermeableCoveringOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPermit\" type=\"ifc:IfcPermit\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPermit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPermitTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPerson\" type=\"ifc:IfcPerson\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPerson\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Addresses\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAddress\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FamilyName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"GivenName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MiddleNames\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PrefixTitles\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"SuffixTitles\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPersonAndOrganization\" type=\"ifc:IfcPersonAndOrganization\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPersonAndOrganization\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ThePerson\" type=\"ifc:IfcPerson\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TheOrganization\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Roles\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalComplexQuantity\" type=\"ifc:IfcPhysicalComplexQuantity\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalComplexQuantity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasQuantities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Discrimination\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Quality\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Usage\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalQuantity\" type=\"ifc:IfcPhysicalQuantity\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalQuantity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalSimpleQuantity\" type=\"ifc:IfcPhysicalSimpleQuantity\" abstract=\"true\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalSimpleQuantity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" type=\"ifc:IfcNamedUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPile\" type=\"ifc:IfcPile\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPile\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstructionType\" type=\"ifc:IfcPileConstructionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPileType\" type=\"ifc:IfcPileType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPileType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeFitting\" type=\"ifc:IfcPipeFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeFittingType\" type=\"ifc:IfcPipeFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeSegment\" type=\"ifc:IfcPipeSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeSegmentType\" type=\"ifc:IfcPipeSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPixelTexture\" type=\"ifc:IfcPixelTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPixelTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ColourComponents\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Pixel\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"xs:hexBinary\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlacement\" type=\"ifc:IfcPlacement\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlacement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Location\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlanarBox\" type=\"ifc:IfcPlanarBox\" substitutionGroup=\"ifc:IfcPlanarExtent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlanarBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlanarExtent\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Placement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlanarExtent\" type=\"ifc:IfcPlanarExtent\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlanarExtent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:attribute name=\"SizeInX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SizeInY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlane\" type=\"ifc:IfcPlane\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlane\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlate\" type=\"ifc:IfcPlate\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlateStandardCase\" type=\"ifc:IfcPlateStandardCase\" substitutionGroup=\"ifc:IfcPlate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlateStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlate\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlateType\" type=\"ifc:IfcPlateType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlateType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPoint\" type=\"ifc:IfcPoint\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPoint\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPointOnCurve\" type=\"ifc:IfcPointOnCurve\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPointOnCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PointParameter\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPointOnSurface\" type=\"ifc:IfcPointOnSurface\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPointOnSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PointParameterU\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PointParameterV\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolyLoop\" type=\"ifc:IfcPolyLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolyLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Polygon\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"3\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolygonalBoundedHalfSpace\" type=\"ifc:IfcPolygonalBoundedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolygonalBoundedHalfSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"PolygonalBoundary\" type=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolygonalFaceSet\" type=\"ifc:IfcPolygonalFaceSet\" substitutionGroup=\"ifc:IfcTessellatedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolygonalFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedFaceSet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Faces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIndexedPolygonalFace\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIndexedPolygonalFace\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Closed\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PnIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolyline\" type=\"ifc:IfcPolyline\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolyline\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Points\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPort\" type=\"ifc:IfcPort\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPort\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPostalAddress\" type=\"ifc:IfcPostalAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPostalAddress\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AddressLines\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"InternalLocation\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PostalBox\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Town\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Region\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PostalCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Country\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedColour\" type=\"ifc:IfcPreDefinedColour\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedColour\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedCurveFont\" type=\"ifc:IfcPreDefinedCurveFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedCurveFont\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedItem\" type=\"ifc:IfcPreDefinedItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedProperties\" type=\"ifc:IfcPreDefinedProperties\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedProperties\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedPropertySet\" type=\"ifc:IfcPreDefinedPropertySet\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedPropertySet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedTextFont\" type=\"ifc:IfcPreDefinedTextFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedTextFont\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationItem\" type=\"ifc:IfcPresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationLayerAssignment\" type=\"ifc:IfcPresentationLayerAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationLayerAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AssignedItems\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLayeredItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLayeredItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationLayerWithStyle\" type=\"ifc:IfcPresentationLayerWithStyle\" substitutionGroup=\"ifc:IfcPresentationLayerAssignment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationLayerWithStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationLayerAssignment\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LayerStyles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPresentationStyle\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPresentationStyle\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerOn\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LayerFrozen\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LayerBlocked\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationStyle\" type=\"ifc:IfcPresentationStyle\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationStyle\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationStyleAssignment\" type=\"ifc:IfcPresentationStyleAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationStyleAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPresentationStyleSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPresentationStyleSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcedure\" type=\"ifc:IfcProcedure\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcedure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProcedureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcedureType\" type=\"ifc:IfcProcedureType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcedureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProcedureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcess\" type=\"ifc:IfcProcess\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcess\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProduct\" type=\"ifc:IfcProduct\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProduct\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ObjectPlacement\" type=\"ifc:IfcObjectPlacement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"Representation\" type=\"ifc:IfcProductRepresentation\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProductDefinitionShape\" type=\"ifc:IfcProductDefinitionShape\" substitutionGroup=\"ifc:IfcProductRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProductDefinitionShape\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasShapeAspects\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShapeAspect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProductRepresentation\" type=\"ifc:IfcProductRepresentation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProductRepresentation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Representations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentation\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProfileDef\" type=\"ifc:IfcProfileDef\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ProfileType\" type=\"ifc:IfcProfileTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProfileName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProfileProperties\" type=\"ifc:IfcProfileProperties\" substitutionGroup=\"ifc:IfcExtendedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProfileProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtendedProperties\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProject\" type=\"ifc:IfcProject\" substitutionGroup=\"ifc:IfcContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcContext\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectLibrary\" type=\"ifc:IfcProjectLibrary\" substitutionGroup=\"ifc:IfcContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectLibrary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcContext\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectOrder\" type=\"ifc:IfcProjectOrder\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectOrder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProjectOrderTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectedCRS\" type=\"ifc:IfcProjectedCRS\" substitutionGroup=\"ifc:IfcCoordinateReferenceSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectedCRS\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCoordinateReferenceSystem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MapUnit\" type=\"ifc:IfcNamedUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MapProjection\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MapZone\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectionElement\" type=\"ifc:IfcProjectionElement\" substitutionGroup=\"ifc:IfcFeatureElementAddition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectionElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementAddition\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProjectionElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProperty\" type=\"ifc:IfcProperty\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProperty\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyAbstraction\" type=\"ifc:IfcPropertyAbstraction\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyAbstraction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyBoundedValue\" type=\"ifc:IfcPropertyBoundedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyBoundedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UpperBoundValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LowerBoundValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SetPointValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyDefinition\" type=\"ifc:IfcPropertyDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyDependencyRelationship\" type=\"ifc:IfcPropertyDependencyRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyDependencyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DependingProperty\" type=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"DependantProperty\" type=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyEnumeratedValue\" type=\"ifc:IfcPropertyEnumeratedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyEnumeratedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EnumerationValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EnumerationReference\" type=\"ifc:IfcPropertyEnumeration\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyEnumeration\" type=\"ifc:IfcPropertyEnumeration\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyEnumeration\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyListValue\" type=\"ifc:IfcPropertyListValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyListValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyReferenceValue\" type=\"ifc:IfcPropertyReferenceValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyReferenceValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PropertyReference\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySet\" type=\"ifc:IfcPropertySet\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySetDefinition\" type=\"ifc:IfcPropertySetDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySetDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySetTemplate\" type=\"ifc:IfcPropertySetTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplateDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySetTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplateDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertyTemplates\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyTemplate\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertyTemplate\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcPropertySetTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicableEntity\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySingleValue\" type=\"ifc:IfcPropertySingleValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySingleValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"NominalValue\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTableValue\" type=\"ifc:IfcPropertyTableValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTableValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DefiningValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefinedValues\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefiningUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefinedUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveInterpolation\" type=\"ifc:IfcCurveInterpolationEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTemplate\" type=\"ifc:IfcPropertyTemplate\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyTemplateDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTemplate\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplateDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTemplateDefinition\" type=\"ifc:IfcPropertyTemplateDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTemplateDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDevice\" type=\"ifc:IfcProtectiveDevice\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceTrippingUnit\" type=\"ifc:IfcProtectiveDeviceTrippingUnit\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceTrippingUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceTrippingUnitType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceTrippingUnitType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceType\" type=\"ifc:IfcProtectiveDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProxy\" type=\"ifc:IfcProxy\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProxy\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:attribute name=\"ProxyType\" type=\"ifc:IfcObjectTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPump\" type=\"ifc:IfcPump\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPump\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPumpType\" type=\"ifc:IfcPumpType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPumpType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityArea\" type=\"ifc:IfcQuantityArea\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"AreaValue\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityCount\" type=\"ifc:IfcQuantityCount\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityCount\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"CountValue\" type=\"ifc:IfcCountMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityLength\" type=\"ifc:IfcQuantityLength\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityLength\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"LengthValue\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantitySet\" type=\"ifc:IfcQuantitySet\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantitySet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityTime\" type=\"ifc:IfcQuantityTime\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"TimeValue\" type=\"ifc:IfcTimeMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityVolume\" type=\"ifc:IfcQuantityVolume\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityVolume\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"VolumeValue\" type=\"ifc:IfcVolumeMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityWeight\" type=\"ifc:IfcQuantityWeight\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityWeight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"WeightValue\" type=\"ifc:IfcMassMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailing\" type=\"ifc:IfcRailing\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailing\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailingType\" type=\"ifc:IfcRailingType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRamp\" type=\"ifc:IfcRamp\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRamp\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampFlight\" type=\"ifc:IfcRampFlight\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampFlight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampFlightType\" type=\"ifc:IfcRampFlightType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampFlightType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampType\" type=\"ifc:IfcRampType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRationalBSplineCurveWithKnots\" type=\"ifc:IfcRationalBSplineCurveWithKnots\" substitutionGroup=\"ifc:IfcBSplineCurveWithKnots\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRationalBSplineCurveWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurveWithKnots\">\n\t\t\t\t<xs:attribute name=\"WeightsData\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRationalBSplineSurfaceWithKnots\" type=\"ifc:IfcRationalBSplineSurfaceWithKnots\" substitutionGroup=\"ifc:IfcBSplineSurfaceWithKnots\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRationalBSplineSurfaceWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineSurfaceWithKnots\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WeightsData\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\" minOccurs=\"4\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcReal-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangleHollowProfileDef\" type=\"ifc:IfcRectangleHollowProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangleHollowProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InnerFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OuterFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangleProfileDef\" type=\"ifc:IfcRectangleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangularPyramid\" type=\"ifc:IfcRectangularPyramid\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangularPyramid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangularTrimmedSurface\" type=\"ifc:IfcRectangularTrimmedSurface\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangularTrimmedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"U1\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"V1\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"U2\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"V2\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Usense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Vsense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRecurrencePattern\" type=\"ifc:IfcRecurrencePattern\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRecurrencePattern\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TimePeriods\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimePeriod\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTimePeriod\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RecurrenceType\" type=\"ifc:IfcRecurrenceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DayComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcDayInMonthNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"WeekdayComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcDayInWeekNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"MonthComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcMonthInYearNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Position\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Interval\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Occurrences\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReference\" type=\"ifc:IfcReference\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerReference\" type=\"ifc:IfcReference\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TypeIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AttributeIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InstanceName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ListPositions\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRegularTimeSeries\" type=\"ifc:IfcRegularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRegularTimeSeries\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeriesValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTimeSeriesValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TimeStep\" type=\"ifc:IfcTimeMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcementBarProperties\" type=\"ifc:IfcReinforcementBarProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcementBarProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:attribute name=\"TotalCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SteelGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EffectiveDepth\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalBarDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarCount\" type=\"ifc:IfcCountMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcementDefinitionProperties\" type=\"ifc:IfcReinforcementDefinitionProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcementDefinitionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReinforcementSectionDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionReinforcementProperties\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSectionReinforcementProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"DefinitionType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingBar\" type=\"ifc:IfcReinforcingBar\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingBar\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingBarTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingBarType\" type=\"ifc:IfcReinforcingBarType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingBarType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BendingParameters\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBendingParameterSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBendingParameterSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingBarTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BendingShapeCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingElement\" type=\"ifc:IfcReinforcingElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"SteelGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingElementType\" type=\"ifc:IfcReinforcingElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingMesh\" type=\"ifc:IfcReinforcingMesh\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingMesh\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"MeshLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingMeshTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingMeshType\" type=\"ifc:IfcReinforcingMeshType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingMeshType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BendingParameters\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBendingParameterSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBendingParameterSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingMeshTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BendingShapeCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAggregates\" type=\"ifc:IfcRelAggregates\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAggregates\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssigns\" type=\"ifc:IfcRelAssigns\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssigns\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RelatedObjectsType\" type=\"ifc:IfcObjectTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToActor\" type=\"ifc:IfcRelAssignsToActor\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToActor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingActor\" type=\"ifc:IfcActor\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ActingRole\" type=\"ifc:IfcActorRole\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToControl\" type=\"ifc:IfcRelAssignsToControl\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToControl\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingControl\" type=\"ifc:IfcControl\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToGroup\" type=\"ifc:IfcRelAssignsToGroup\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingGroup\" type=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToGroupByFactor\" type=\"ifc:IfcRelAssignsToGroupByFactor\" substitutionGroup=\"ifc:IfcRelAssignsToGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToGroupByFactor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToGroup\">\n\t\t\t\t<xs:attribute name=\"Factor\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToProcess\" type=\"ifc:IfcRelAssignsToProcess\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToProcess\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcProcessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"QuantityInProcess\" type=\"ifc:IfcMeasureWithUnit\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToProduct\" type=\"ifc:IfcRelAssignsToProduct\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToProduct\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProduct\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcProductSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToResource\" type=\"ifc:IfcRelAssignsToResource\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingResource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociates\" type=\"ifc:IfcRelAssociates\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociates\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinitionSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDefinitionSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesApproval\" type=\"ifc:IfcRelAssociatesApproval\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesApproval\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesClassification\" type=\"ifc:IfcRelAssociatesClassification\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesClassification\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingClassification\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesConstraint\" type=\"ifc:IfcRelAssociatesConstraint\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesConstraint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\" type=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Intent\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesDocument\" type=\"ifc:IfcRelAssociatesDocument\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesDocument\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesLibrary\" type=\"ifc:IfcRelAssociatesLibrary\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesLibrary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingLibrary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLibrarySelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesMaterial\" type=\"ifc:IfcRelAssociatesMaterial\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesMaterial\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMaterialSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnects\" type=\"ifc:IfcRelConnects\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnects\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsElements\" type=\"ifc:IfcRelConnectsElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"RelatingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPathElements\" type=\"ifc:IfcRelConnectsPathElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPathElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\n\t\t\t\t<xs:attribute name=\"RelatingPriorities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"0\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"RelatedPriorities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"0\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"RelatedConnectionType\" type=\"ifc:IfcConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RelatingConnectionType\" type=\"ifc:IfcConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPortToElement\" type=\"ifc:IfcRelConnectsPortToElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPortToElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPorts\" type=\"ifc:IfcRelConnectsPorts\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPorts\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RealizingElement\" type=\"ifc:IfcElement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsStructuralActivity\" type=\"ifc:IfcRelConnectsStructuralActivity\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsStructuralActivity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralActivity\" type=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsStructuralMember\" type=\"ifc:IfcRelConnectsStructuralMember\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsStructuralMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingStructuralMember\" type=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralConnection\" type=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" type=\"ifc:IfcBoundaryCondition\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"AdditionalConditions\" type=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"ConditionCoordinateSystem\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SupportedLength\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsWithEccentricity\" type=\"ifc:IfcRelConnectsWithEccentricity\" substitutionGroup=\"ifc:IfcRelConnectsStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsWithEccentricity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConnectionConstraint\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsWithRealizingElements\" type=\"ifc:IfcRelConnectsWithRealizingElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsWithRealizingElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RealizingElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ConnectionType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelContainedInSpatialStructure\" type=\"ifc:IfcRelContainedInSpatialStructure\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelContainedInSpatialStructure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProduct\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelCoversBldgElements\" type=\"ifc:IfcRelCoversBldgElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelCoversBldgElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCovering\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelCoversSpaces\" type=\"ifc:IfcRelCoversSpaces\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelCoversSpaces\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSpace\" type=\"ifc:IfcSpace\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCovering\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDeclares\" type=\"ifc:IfcRelDeclares\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDeclares\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinitionSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDefinitionSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDecomposes\" type=\"ifc:IfcRelDecomposes\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDecomposes\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefines\" type=\"ifc:IfcRelDefines\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefines\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByObject\" type=\"ifc:IfcRelDefinesByObject\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByObject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObject\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByProperties\" type=\"ifc:IfcRelDefinesByProperties\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPropertyDefinition\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPropertySetDefinitionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByTemplate\" type=\"ifc:IfcRelDefinesByTemplate\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedPropertySets\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingTemplate\" type=\"ifc:IfcPropertySetTemplate\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByType\" type=\"ifc:IfcRelDefinesByType\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingType\" type=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelFillsElement\" type=\"ifc:IfcRelFillsElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelFillsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelFlowControlElements\" type=\"ifc:IfcRelFlowControlElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelFlowControlElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedControlElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionControlElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDistributionControlElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingFlowElement\" type=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelInterferesElements\" type=\"ifc:IfcRelInterferesElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelInterferesElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InterferenceGeometry\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"InterferenceType\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ImpliedOrder\" type=\"ifc:logical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelNests\" type=\"ifc:IfcRelNests\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelNests\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelProjectsElement\" type=\"ifc:IfcRelProjectsElement\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelProjectsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedFeatureElement\" type=\"ifc:IfcFeatureElementAddition\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelReferencedInSpatialStructure\" type=\"ifc:IfcRelReferencedInSpatialStructure\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelReferencedInSpatialStructure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProduct\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSequence\" type=\"ifc:IfcRelSequence\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSequence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProcess\" type=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedProcess\" type=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TimeLag\" type=\"ifc:IfcLagTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SequenceType\" type=\"ifc:IfcSequenceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedSequenceType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelServicesBuildings\" type=\"ifc:IfcRelServicesBuildings\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelServicesBuildings\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSystem\" type=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedBuildings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSpatialElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary\" type=\"ifc:IfcRelSpaceBoundary\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSpace\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpaceBoundarySelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PhysicalOrVirtualBoundary\" type=\"ifc:IfcPhysicalOrVirtualEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InternalOrExternalBoundary\" type=\"ifc:IfcInternalOrExternalEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary1stLevel\" type=\"ifc:IfcRelSpaceBoundary1stLevel\" substitutionGroup=\"ifc:IfcRelSpaceBoundary\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary1stLevel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelSpaceBoundary\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentBoundary\" type=\"ifc:IfcRelSpaceBoundary1stLevel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary2ndLevel\" type=\"ifc:IfcRelSpaceBoundary2ndLevel\" substitutionGroup=\"ifc:IfcRelSpaceBoundary1stLevel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary2ndLevel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelSpaceBoundary1stLevel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CorrespondingBoundary\" type=\"ifc:IfcRelSpaceBoundary2ndLevel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelVoidsElement\" type=\"ifc:IfcRelVoidsElement\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelVoidsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedOpeningElement\" type=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelationship\" type=\"ifc:IfcRelationship\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelationship\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReparametrisedCompositeCurveSegment\" type=\"ifc:IfcReparametrisedCompositeCurveSegment\" substitutionGroup=\"ifc:IfcCompositeCurveSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReparametrisedCompositeCurveSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurveSegment\">\n\t\t\t\t<xs:attribute name=\"ParamLength\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentation\" type=\"ifc:IfcRepresentation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContextOfItems\" type=\"ifc:IfcRepresentationContext\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Items\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RepresentationIdentifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RepresentationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationContext\" type=\"ifc:IfcRepresentationContext\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationContext\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"ContextIdentifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ContextType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationItem\" type=\"ifc:IfcRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StyledByItem\" type=\"ifc:IfcStyledItem\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationMap\" type=\"ifc:IfcRepresentationMap\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MappingOrigin\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MappedRepresentation\" type=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResource\" type=\"ifc:IfcResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceApprovalRelationship\" type=\"ifc:IfcResourceApprovalRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceApprovalRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceConstraintRelationship\" type=\"ifc:IfcResourceConstraintRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceConstraintRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\" type=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceLevelRelationship\" type=\"ifc:IfcResourceLevelRelationship\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceLevelRelationship\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceTime\" type=\"ifc:IfcResourceTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"ScheduleWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleContour\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LevelingDelay\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsOverAllocated\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StatusTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Completion\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRevolvedAreaSolid\" type=\"ifc:IfcRevolvedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRevolvedAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcAxis1Placement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Angle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRevolvedAreaSolidTapered\" type=\"ifc:IfcRevolvedAreaSolidTapered\" substitutionGroup=\"ifc:IfcRevolvedAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRevolvedAreaSolidTapered\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRevolvedAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EndSweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRightCircularCone\" type=\"ifc:IfcRightCircularCone\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRightCircularCone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRightCircularCylinder\" type=\"ifc:IfcRightCircularCylinder\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRightCircularCylinder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoof\" type=\"ifc:IfcRoof\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoof\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRoofTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoofType\" type=\"ifc:IfcRoofType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoofType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRoofTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoot\" type=\"ifc:IfcRoot\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoot\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OwnerHistory\" type=\"ifc:IfcOwnerHistory\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"GlobalId\" type=\"ifc:IfcGloballyUniqueId\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoundedRectangleProfileDef\" type=\"ifc:IfcRoundedRectangleProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoundedRectangleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\n\t\t\t\t<xs:attribute name=\"RoundingRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcSIUnit-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:sequence/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSIUnit\" type=\"ifc:IfcSIUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSIUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSIUnit-temp\">\n\t\t\t\t<xs:attribute name=\"Prefix\" type=\"ifc:IfcSIPrefix\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcSIUnitName\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSanitaryTerminal\" type=\"ifc:IfcSanitaryTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSanitaryTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSanitaryTerminalType\" type=\"ifc:IfcSanitaryTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSanitaryTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSchedulingTime\" type=\"ifc:IfcSchedulingTime\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSchedulingTime\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedDataOrigin\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSeamCurve\" type=\"ifc:IfcSeamCurve\" substitutionGroup=\"ifc:IfcSurfaceCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSeamCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionProperties\" type=\"ifc:IfcSectionProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StartProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"EndProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SectionType\" type=\"ifc:IfcSectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionReinforcementProperties\" type=\"ifc:IfcSectionReinforcementProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionReinforcementProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SectionDefinition\" type=\"ifc:IfcSectionProperties\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CrossSectionReinforcementDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReinforcementBarProperties\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcReinforcementBarProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LongitudinalStartPosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalEndPosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransversePosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReinforcementRole\" type=\"ifc:IfcReinforcingBarRoleEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionedSpine\" type=\"ifc:IfcSectionedSpine\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionedSpine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SpineCurve\" type=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CrossSections\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CrossSectionPositions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAxis2Placement3D\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSensor\" type=\"ifc:IfcSensor\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSensor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSensorType\" type=\"ifc:IfcSensorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSensorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShadingDevice\" type=\"ifc:IfcShadingDevice\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShadingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcShadingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShadingDeviceType\" type=\"ifc:IfcShadingDeviceType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShadingDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcShadingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeAspect\" type=\"ifc:IfcShapeAspect\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeAspect\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeRepresentations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeModel\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShapeModel\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProductDefinitional\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeModel\" type=\"ifc:IfcShapeModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeRepresentation\" type=\"ifc:IfcShapeRepresentation\" substitutionGroup=\"ifc:IfcShapeModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShellBasedSurfaceModel\" type=\"ifc:IfcShellBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShellBasedSurfaceModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SbsmBoundary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSimpleProperty\" type=\"ifc:IfcSimpleProperty\" abstract=\"true\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSimpleProperty\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProperty\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSimplePropertyTemplate\" type=\"ifc:IfcSimplePropertyTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSimplePropertyTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Enumerators\" type=\"ifc:IfcPropertyEnumeration\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"PrimaryUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondaryUnit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcSimplePropertyTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PrimaryMeasureType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondaryMeasureType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AccessState\" type=\"ifc:IfcStateEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSite\" type=\"ifc:IfcSite\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSite\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SiteAddress\" type=\"ifc:IfcPostalAddress\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RefLatitude\" type=\"ifc:List-IfcCompoundPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RefLongitude\" type=\"ifc:List-IfcCompoundPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RefElevation\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LandTitleNumber\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlab\" type=\"ifc:IfcSlab\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlab\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlabElementedCase\" type=\"ifc:IfcSlabElementedCase\" substitutionGroup=\"ifc:IfcSlab\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlabElementedCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSlab\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlabStandardCase\" type=\"ifc:IfcSlabStandardCase\" substitutionGroup=\"ifc:IfcSlab\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlabStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSlab\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlabType\" type=\"ifc:IfcSlabType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlabType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlippageConnectionCondition\" type=\"ifc:IfcSlippageConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlippageConnectionCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t<xs:attribute name=\"SlippageX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SlippageY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SlippageZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolarDevice\" type=\"ifc:IfcSolarDevice\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolarDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSolarDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolarDeviceType\" type=\"ifc:IfcSolarDeviceType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolarDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSolarDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolidModel\" type=\"ifc:IfcSolidModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolidModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpace\" type=\"ifc:IfcSpace\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElevationWithFlooring\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceHeater\" type=\"ifc:IfcSpaceHeater\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceHeater\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceHeaterType\" type=\"ifc:IfcSpaceHeaterType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceHeaterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceType\" type=\"ifc:IfcSpaceType\" substitutionGroup=\"ifc:IfcSpatialStructureElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialElement\" type=\"ifc:IfcSpatialElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContainsElements\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelContainedInSpatialStructure\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelContainedInSpatialStructure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencesElements\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelReferencedInSpatialStructure\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelReferencedInSpatialStructure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialElementType\" type=\"ifc:IfcSpatialElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ElementType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialStructureElement\" type=\"ifc:IfcSpatialStructureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialStructureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\">\n\t\t\t\t<xs:attribute name=\"CompositionType\" type=\"ifc:IfcElementCompositionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialStructureElementType\" type=\"ifc:IfcSpatialStructureElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialStructureElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialZone\" type=\"ifc:IfcSpatialZone\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialZone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpatialZoneTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialZoneType\" type=\"ifc:IfcSpatialZoneType\" substitutionGroup=\"ifc:IfcSpatialElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialZoneType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpatialZoneTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSphere\" type=\"ifc:IfcSphere\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSphere\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSphericalSurface\" type=\"ifc:IfcSphericalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSphericalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStackTerminal\" type=\"ifc:IfcStackTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStackTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStackTerminalType\" type=\"ifc:IfcStackTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStackTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStair\" type=\"ifc:IfcStair\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStair\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairFlight\" type=\"ifc:IfcStairFlight\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairFlight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"NumberOfRisers\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NumberOfTreads\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RiserHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TreadLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairFlightType\" type=\"ifc:IfcStairFlightType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairFlightType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairType\" type=\"ifc:IfcStairType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralAction\" type=\"ifc:IfcStructuralAction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralAction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\">\n\t\t\t\t<xs:attribute name=\"DestabilizingLoad\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralActivity\" type=\"ifc:IfcStructuralActivity\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralActivity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedLoad\" type=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"GlobalOrLocal\" type=\"ifc:IfcGlobalOrLocalEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralAnalysisModel\" type=\"ifc:IfcStructuralAnalysisModel\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralAnalysisModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OrientationOf2DPlane\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"LoadedBy\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralLoadGroup\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasResults\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralResultGroup\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralResultGroup\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SharedPlacement\" type=\"ifc:IfcObjectPlacement\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAnalysisModelTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralConnection\" type=\"ifc:IfcStructuralConnection\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralConnection\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" type=\"ifc:IfcBoundaryCondition\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralConnectionCondition\" type=\"ifc:IfcStructuralConnectionCondition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralConnectionCondition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveAction\" type=\"ifc:IfcStructuralCurveAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\n\t\t\t\t<xs:attribute name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveConnection\" type=\"ifc:IfcStructuralCurveConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveMember\" type=\"ifc:IfcStructuralCurveMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveMemberVarying\" type=\"ifc:IfcStructuralCurveMemberVarying\" substitutionGroup=\"ifc:IfcStructuralCurveMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveMemberVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveReaction\" type=\"ifc:IfcStructuralCurveReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralItem\" type=\"ifc:IfcStructuralItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLinearAction\" type=\"ifc:IfcStructuralLinearAction\" substitutionGroup=\"ifc:IfcStructuralCurveAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLinearAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoad\" type=\"ifc:IfcStructuralLoad\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoad\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadCase\" type=\"ifc:IfcStructuralLoadCase\" substitutionGroup=\"ifc:IfcStructuralLoadGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadGroup\">\n\t\t\t\t<xs:attribute name=\"SelfWeightCoefficients\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcRatioMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadConfiguration\" type=\"ifc:IfcStructuralLoadConfiguration\" substitutionGroup=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadConfiguration\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadOrResult\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralLoadOrResult\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Locations\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\" minOccurs=\"1\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadGroup\" type=\"ifc:IfcStructuralLoadGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLoadGroupTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActionType\" type=\"ifc:IfcActionTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActionSource\" type=\"ifc:IfcActionSourceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Coefficient\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadLinearForce\" type=\"ifc:IfcStructuralLoadLinearForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadLinearForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"LinearForceX\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearForceY\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearForceZ\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentX\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentY\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentZ\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadOrResult\" type=\"ifc:IfcStructuralLoadOrResult\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadOrResult\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadPlanarForce\" type=\"ifc:IfcStructuralLoadPlanarForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadPlanarForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"PlanarForceX\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PlanarForceY\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PlanarForceZ\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacement\" type=\"ifc:IfcStructuralLoadSingleDisplacement\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"DisplacementX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DisplacementY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DisplacementZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRX\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRY\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRZ\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacementDistortion\" type=\"ifc:IfcStructuralLoadSingleDisplacementDistortion\" substitutionGroup=\"ifc:IfcStructuralLoadSingleDisplacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacementDistortion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleDisplacement\">\n\t\t\t\t<xs:attribute name=\"Distortion\" type=\"ifc:IfcCurvatureMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleForce\" type=\"ifc:IfcStructuralLoadSingleForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"ForceX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ForceY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ForceZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentX\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentY\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentZ\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleForceWarping\" type=\"ifc:IfcStructuralLoadSingleForceWarping\" substitutionGroup=\"ifc:IfcStructuralLoadSingleForce\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleForceWarping\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleForce\">\n\t\t\t\t<xs:attribute name=\"WarpingMoment\" type=\"ifc:IfcWarpingMomentMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadStatic\" type=\"ifc:IfcStructuralLoadStatic\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralLoadOrResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadStatic\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadOrResult\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadTemperature\" type=\"ifc:IfcStructuralLoadTemperature\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadTemperature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"DeltaTConstant\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DeltaTY\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DeltaTZ\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralMember\" type=\"ifc:IfcStructuralMember\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralMember\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPlanarAction\" type=\"ifc:IfcStructuralPlanarAction\" substitutionGroup=\"ifc:IfcStructuralSurfaceAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPlanarAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointAction\" type=\"ifc:IfcStructuralPointAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointConnection\" type=\"ifc:IfcStructuralPointConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConditionCoordinateSystem\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointReaction\" type=\"ifc:IfcStructuralPointReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralReaction\" type=\"ifc:IfcStructuralReaction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralReaction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralResultGroup\" type=\"ifc:IfcStructuralResultGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralResultGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ResultForLoadGroup\" type=\"ifc:IfcStructuralLoadGroup\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TheoryType\" type=\"ifc:IfcAnalysisTheoryTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsLinear\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceAction\" type=\"ifc:IfcStructuralSurfaceAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\n\t\t\t\t<xs:attribute name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceConnection\" type=\"ifc:IfcStructuralSurfaceConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceMember\" type=\"ifc:IfcStructuralSurfaceMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceMemberTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceMemberVarying\" type=\"ifc:IfcStructuralSurfaceMemberVarying\" substitutionGroup=\"ifc:IfcStructuralSurfaceMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceMemberVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceReaction\" type=\"ifc:IfcStructuralSurfaceReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyleModel\" type=\"ifc:IfcStyleModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyleModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyledItem\" type=\"ifc:IfcStyledItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyledItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcStyleAssignmentSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStyleAssignmentSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyledRepresentation\" type=\"ifc:IfcStyledRepresentation\" substitutionGroup=\"ifc:IfcStyleModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyledRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStyleModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubContractResource\" type=\"ifc:IfcSubContractResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubContractResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSubContractResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubContractResourceType\" type=\"ifc:IfcSubContractResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubContractResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSubContractResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubedge\" type=\"ifc:IfcSubedge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubedge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentEdge\" type=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurface\" type=\"ifc:IfcSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceCurve\" type=\"ifc:IfcSurfaceCurve\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Curve3D\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"AssociatedGeometry\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPcurve\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPcurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MasterRepresentation\" type=\"ifc:IfcPreferredSurfaceCurveRepresentation\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceCurveSweptAreaSolid\" type=\"ifc:IfcSurfaceCurveSweptAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceCurveSweptAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReferenceSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"StartParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceFeature\" type=\"ifc:IfcSurfaceFeature\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceFeature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSurfaceFeatureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceOfLinearExtrusion\" type=\"ifc:IfcSurfaceOfLinearExtrusion\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceOfLinearExtrusion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceOfRevolution\" type=\"ifc:IfcSurfaceOfRevolution\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceOfRevolution\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisPosition\" type=\"ifc:IfcAxis1Placement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceReinforcementArea\" type=\"ifc:IfcSurfaceReinforcementArea\" substitutionGroup=\"ifc:IfcStructuralLoadOrResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceReinforcementArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadOrResult\">\n\t\t\t\t<xs:attribute name=\"SurfaceReinforcement1\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"SurfaceReinforcement2\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"ShearReinforcement\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyle\" type=\"ifc:IfcSurfaceStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\" maxOccurs=\"5\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceStyleElementSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Side\" type=\"ifc:IfcSurfaceSide\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleLighting\" type=\"ifc:IfcSurfaceStyleLighting\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleLighting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"DiffuseReflectionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TransmissionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReflectanceColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleRefraction\" type=\"ifc:IfcSurfaceStyleRefraction\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleRefraction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"RefractionIndex\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DispersionFactor\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleRendering\" type=\"ifc:IfcSurfaceStyleRendering\" substitutionGroup=\"ifc:IfcSurfaceStyleShading\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleRendering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceStyleShading\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DiffuseColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TransmissionColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReflectionColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SpecularColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SpecularHighlight\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ReflectanceMethod\" type=\"ifc:IfcReflectanceMethodEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleShading\" type=\"ifc:IfcSurfaceStyleShading\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleShading\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SurfaceColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Transparency\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleWithTextures\" type=\"ifc:IfcSurfaceStyleWithTextures\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleWithTextures\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Textures\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceTexture\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceTexture\" type=\"ifc:IfcSurfaceTexture\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceTexture\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextureTransform\" type=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RepeatS\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RepeatT\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Mode\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Parameter\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcIdentifier\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptAreaSolid\" type=\"ifc:IfcSweptAreaSolid\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptAreaSolid\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptDiskSolid\" type=\"ifc:IfcSweptDiskSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptDiskSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InnerRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptDiskSolidPolygonal\" type=\"ifc:IfcSweptDiskSolidPolygonal\" substitutionGroup=\"ifc:IfcSweptDiskSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptDiskSolidPolygonal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptDiskSolid\">\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptSurface\" type=\"ifc:IfcSweptSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SweptCurve\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSwitchingDevice\" type=\"ifc:IfcSwitchingDevice\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSwitchingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSwitchingDeviceType\" type=\"ifc:IfcSwitchingDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSwitchingDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystem\" type=\"ifc:IfcSystem\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystemFurnitureElement\" type=\"ifc:IfcSystemFurnitureElement\" substitutionGroup=\"ifc:IfcFurnishingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystemFurnitureElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSystemFurnitureElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystemFurnitureElementType\" type=\"ifc:IfcSystemFurnitureElementType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystemFurnitureElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSystemFurnitureElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTShapeProfileDef\" type=\"ifc:IfcTShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTable\" type=\"ifc:IfcTable\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTable\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Rows\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableRow\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTableRow\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Columns\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableColumn\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTableColumn\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTableColumn\" type=\"ifc:IfcTableColumn\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTableColumn\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencePath\" type=\"ifc:IfcReference\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTableRow\" type=\"ifc:IfcTableRow\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTableRow\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RowCells\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"IsHeading\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTank\" type=\"ifc:IfcTank\" substitutionGroup=\"ifc:IfcFlowStorageDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTank\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTankType\" type=\"ifc:IfcTankType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTankType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTask\" type=\"ifc:IfcTask\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTask\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TaskTime\" type=\"ifc:IfcTaskTime\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WorkMethod\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsMilestone\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTaskTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskTime\" type=\"ifc:IfcTaskTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"DurationType\" type=\"ifc:IfcTaskDurationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleDuration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FreeFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TotalFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsCritical\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StatusTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualDuration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingTime\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Completion\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskTimeRecurring\" type=\"ifc:IfcTaskTimeRecurring\" substitutionGroup=\"ifc:IfcTaskTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskTimeRecurring\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTaskTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Recurrence\" type=\"ifc:IfcRecurrencePattern\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskType\" type=\"ifc:IfcTaskType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTaskTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WorkMethod\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTelecomAddress\" type=\"ifc:IfcTelecomAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTelecomAddress\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\n\t\t\t\t<xs:attribute name=\"TelephoneNumbers\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"FacsimileNumbers\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PagerNumber\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectronicMailAddresses\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"WWWHomePageURL\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MessagingIDs\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcURIReference\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendon\" type=\"ifc:IfcTendon\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendon\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionForce\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PreStress\" type=\"ifc:IfcPressureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrictionCoefficient\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AnchorageSlip\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MinCurvatureRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonAnchor\" type=\"ifc:IfcTendonAnchor\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonAnchor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonAnchorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonAnchorType\" type=\"ifc:IfcTendonAnchorType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonAnchorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonAnchorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonType\" type=\"ifc:IfcTendonType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SheathDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTessellatedFaceSet\" type=\"ifc:IfcTessellatedFaceSet\" abstract=\"true\" substitutionGroup=\"ifc:IfcTessellatedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTessellatedFaceSet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Coordinates\" type=\"ifc:IfcCartesianPointList3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"HasColours\" type=\"ifc:IfcIndexedColourMap\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"HasTextures\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIndexedTextureMap\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIndexedTextureMap\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTessellatedItem\" type=\"ifc:IfcTessellatedItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTessellatedItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextLiteral\" type=\"ifc:IfcTextLiteral\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextLiteral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Placement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Literal\" type=\"ifc:IfcPresentableText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Path\" type=\"ifc:IfcTextPath\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextLiteralWithExtent\" type=\"ifc:IfcTextLiteralWithExtent\" substitutionGroup=\"ifc:IfcTextLiteral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextLiteralWithExtent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextLiteral\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Extent\" type=\"ifc:IfcPlanarExtent\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"BoxAlignment\" type=\"ifc:IfcBoxAlignment\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyle\" type=\"ifc:IfcTextStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextCharacterAppearance\" type=\"ifc:IfcTextStyleForDefinedFont\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TextStyle\" type=\"ifc:IfcTextStyleTextModel\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t\t<xs:element name=\"TextFontStyle\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTextFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelOrDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleFontModel\" type=\"ifc:IfcTextStyleFontModel\" substitutionGroup=\"ifc:IfcPreDefinedTextFont\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleFontModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedTextFont\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FontFamily\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextFontName-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTextFontName-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FontSize\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"FontStyle\" type=\"ifc:IfcFontStyle\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FontVariant\" type=\"ifc:IfcFontVariant\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FontWeight\" type=\"ifc:IfcFontWeight\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleForDefinedFont\" type=\"ifc:IfcTextStyleForDefinedFont\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleForDefinedFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Colour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BackgroundColour\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleTextModel\" type=\"ifc:IfcTextStyleTextModel\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleTextModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextIndent\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LetterSpacing\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WordSpacing\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LineHeight\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TextAlign\" type=\"ifc:IfcTextAlignment\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TextDecoration\" type=\"ifc:IfcTextDecoration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TextTransform\" type=\"ifc:IfcTextTransformation\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinate\" type=\"ifc:IfcTextureCoordinate\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinate\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Maps\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceTexture\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinateGenerator\" type=\"ifc:IfcTextureCoordinateGenerator\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinateGenerator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:attribute name=\"Mode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Parameter\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureMap\" type=\"ifc:IfcTextureMap\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Vertices\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextureVertex\" minOccurs=\"3\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTextureVertex\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MappedTo\" type=\"ifc:IfcFace\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureVertex\" type=\"ifc:IfcTextureVertex\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureVertex\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Coordinates\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureVertexList\" type=\"ifc:IfcTextureVertexList\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureVertexList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"TexCoordsList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimePeriod\" type=\"ifc:IfcTimePeriod\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimePeriod\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndTime\" type=\"ifc:IfcTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimeSeries\" type=\"ifc:IfcTimeSeries\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimeSeries\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeSeriesDataType\" type=\"ifc:IfcTimeSeriesDataTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedDataOrigin\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimeSeriesValue\" type=\"ifc:IfcTimeSeriesValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimeSeriesValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTopologicalRepresentationItem\" type=\"ifc:IfcTopologicalRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTopologicalRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTopologyRepresentation\" type=\"ifc:IfcTopologyRepresentation\" substitutionGroup=\"ifc:IfcShapeModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTopologyRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcToroidalSurface\" type=\"ifc:IfcToroidalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcToroidalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"MajorRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MinorRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransformer\" type=\"ifc:IfcTransformer\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransformer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransformerType\" type=\"ifc:IfcTransformerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransformerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportElement\" type=\"ifc:IfcTransportElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportElementType\" type=\"ifc:IfcTransportElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrapeziumProfileDef\" type=\"ifc:IfcTrapeziumProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrapeziumProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"BottomXDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopXDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopXOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTriangulatedFaceSet\" type=\"ifc:IfcTriangulatedFaceSet\" substitutionGroup=\"ifc:IfcTessellatedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTriangulatedFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedFaceSet\">\n\t\t\t\t<xs:attribute name=\"Normals\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Closed\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PnIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrimmedCurve\" type=\"ifc:IfcTrimmedCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrimmedCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Trim1\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Trim2\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SenseAgreement\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MasterRepresentation\" type=\"ifc:IfcTrimmingPreference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTubeBundle\" type=\"ifc:IfcTubeBundle\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTubeBundle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTubeBundleType\" type=\"ifc:IfcTubeBundleType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTubeBundleType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeObject\" type=\"ifc:IfcTypeObject\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeObject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertySets\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ApplicableOccurrence\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeProcess\" type=\"ifc:IfcTypeProcess\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeProcess\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProcessType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeProduct\" type=\"ifc:IfcTypeProduct\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeProduct\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepresentationMaps\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationMap\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeResource\" type=\"ifc:IfcTypeResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ResourceType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUShapeProfileDef\" type=\"ifc:IfcUShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitAssignment\" type=\"ifc:IfcUnitAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Units\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryControlElement\" type=\"ifc:IfcUnitaryControlElement\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryControlElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryControlElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryControlElementType\" type=\"ifc:IfcUnitaryControlElementType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryControlElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryControlElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryEquipment\" type=\"ifc:IfcUnitaryEquipment\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryEquipment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryEquipmentType\" type=\"ifc:IfcUnitaryEquipmentType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryEquipmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcValve\" type=\"ifc:IfcValve\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcValve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcValveType\" type=\"ifc:IfcValveType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcValveType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVector\" type=\"ifc:IfcVector\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVector\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Magnitude\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertex\" type=\"ifc:IfcVertex\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertex\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertexLoop\" type=\"ifc:IfcVertexLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertexLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LoopVertex\" type=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertexPoint\" type=\"ifc:IfcVertexPoint\" substitutionGroup=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertexPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcVertex\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VertexGeometry\" type=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationIsolator\" type=\"ifc:IfcVibrationIsolator\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationIsolator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationIsolatorType\" type=\"ifc:IfcVibrationIsolatorType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationIsolatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVirtualElement\" type=\"ifc:IfcVirtualElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVirtualElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVirtualGridIntersection\" type=\"ifc:IfcVirtualGridIntersection\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVirtualGridIntersection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IntersectingAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" minOccurs=\"2\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OffsetDistances\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVoidingFeature\" type=\"ifc:IfcVoidingFeature\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVoidingFeature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVoidingFeatureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWall\" type=\"ifc:IfcWall\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWall\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallElementedCase\" type=\"ifc:IfcWallElementedCase\" substitutionGroup=\"ifc:IfcWall\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallElementedCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWall\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallStandardCase\" type=\"ifc:IfcWallStandardCase\" substitutionGroup=\"ifc:IfcWall\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWall\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallType\" type=\"ifc:IfcWallType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWasteTerminal\" type=\"ifc:IfcWasteTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWasteTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWasteTerminalType\" type=\"ifc:IfcWasteTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWasteTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindow\" type=\"ifc:IfcWindow\" substitutionGroup=\"ifc:IfcBuildingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindow\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElement\">\n\t\t\t\t<xs:attribute name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWindowTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PartitioningType\" type=\"ifc:IfcWindowTypePartitioningEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPartitioningType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowLiningProperties\" type=\"ifc:IfcWindowLiningProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowLiningProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MullionThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FirstTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FirstMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowPanelProperties\" type=\"ifc:IfcWindowPanelProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowPanelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcWindowPanelOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowStandardCase\" type=\"ifc:IfcWindowStandardCase\" substitutionGroup=\"ifc:IfcWindow\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWindow\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowStyle\" type=\"ifc:IfcWindowStyle\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ConstructionType\" type=\"ifc:IfcWindowStyleConstructionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcWindowStyleOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Sizeable\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowType\" type=\"ifc:IfcWindowType\" substitutionGroup=\"ifc:IfcBuildingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuildingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWindowTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PartitioningType\" type=\"ifc:IfcWindowTypePartitioningEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPartitioningType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkCalendar\" type=\"ifc:IfcWorkCalendar\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkCalendar\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WorkingTimes\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcWorkTime\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcWorkTime\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ExceptionTimes\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcWorkTime\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcWorkTime\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkCalendarTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkControl\" type=\"ifc:IfcWorkControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkControl\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Creators\" nillable=\"true\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPerson\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CreationDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Duration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TotalFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FinishTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkPlan\" type=\"ifc:IfcWorkPlan\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkPlan\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkPlanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkSchedule\" type=\"ifc:IfcWorkSchedule\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkScheduleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkTime\" type=\"ifc:IfcWorkTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RecurrencePattern\" type=\"ifc:IfcRecurrencePattern\" nillable=\"true\" minOccurs=\"0\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Start\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Finish\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcZShapeProfileDef\" type=\"ifc:IfcZShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcZShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcZone\" type=\"ifc:IfcZone\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcZone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<!-- group declarations (for SELECT data type definitions) -->\n\t<xs:group name=\"IfcActorSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcAppliedValueSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcAxis2Placement\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcBendingParameterSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcBooleanOperand\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHalfSpaceSolid\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTessellatedFaceSet\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcClassificationReferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcClassificationSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcColour\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcColourOrFactor\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCoordinateReferenceSystemSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCoordinateReferenceSystem\"/>\n\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationContext\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCsgSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveFontOrScaledCurveFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontAndScaling\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveOnSurface\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCompositeCurveOnSurface\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPcurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveOrEdgeCurve\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEdgeCurve\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveStyleFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDefinitionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDerivedMeasureValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDocumentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcFillStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedHatchStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleHatching\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTiles\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcGeometricSetSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcGridPlacementDirectionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcHatchLineDistanceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLayeredItem\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLibrarySelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLightDistributionDataSourceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLightIntensityDistribution\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMaterialSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialUsageDefinition\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMeasureValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMetricValueSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTable\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfRotationalSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfTranslationalSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcObjectReferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAddress\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTable\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPointOrVertexPoint\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVertexPoint\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPresentationStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNullStyle-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTextStyle\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProcessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProcess\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeProcess\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProductRepresentationSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProductDefinitionShape\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProductSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProduct\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeProduct\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPropertySetDefinitionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinitionSet-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcResourceObjectSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcActorRole\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\n\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcConversionBasedUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertyAbstraction\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcResourceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcResource\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeResource\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcRotationalStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSegmentIndexSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcArcIndex-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLineIndex-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcShell\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOpenShell\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSimpleValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSizeSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSolidOrShell\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSpaceBoundarySelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternalSpatialElement\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpace\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSpecularHighlightSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcSpecularExponent-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecularRoughness-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcStructuralActivityAssignmentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\n\t\t\t<xs:element ref=\"ifc:IfcStructuralItem\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcStyleAssignmentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPresentationStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPresentationStyleAssignment\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSurfaceOrFaceSurface\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcFaceBasedSurfaceModel\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFaceSurface\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSurfaceStyleElementSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSurfaceStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleLighting\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleRefraction\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleShading\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleWithTextures\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTextFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedTextFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedTextFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTimeOrRatioSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTranslationalStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTrimmingSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcUnit\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDerivedUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcVectorOrDirection\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcWarpingStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<!-- enumeration type declarations (for ENUMERATION data type definitions) -->\n\t<xs:simpleType name=\"IfcActionRequestTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"email\"/>\n\t\t\t<xs:enumeration value=\"fax\"/>\n\t\t\t<xs:enumeration value=\"phone\"/>\n\t\t\t<xs:enumeration value=\"post\"/>\n\t\t\t<xs:enumeration value=\"verbal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActionSourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dead_load_g\"/>\n\t\t\t<xs:enumeration value=\"completion_g1\"/>\n\t\t\t<xs:enumeration value=\"live_load_q\"/>\n\t\t\t<xs:enumeration value=\"snow_s\"/>\n\t\t\t<xs:enumeration value=\"wind_w\"/>\n\t\t\t<xs:enumeration value=\"prestressing_p\"/>\n\t\t\t<xs:enumeration value=\"settlement_u\"/>\n\t\t\t<xs:enumeration value=\"temperature_t\"/>\n\t\t\t<xs:enumeration value=\"earthquake_e\"/>\n\t\t\t<xs:enumeration value=\"fire\"/>\n\t\t\t<xs:enumeration value=\"impulse\"/>\n\t\t\t<xs:enumeration value=\"impact\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"erection\"/>\n\t\t\t<xs:enumeration value=\"propping\"/>\n\t\t\t<xs:enumeration value=\"system_imperfection\"/>\n\t\t\t<xs:enumeration value=\"shrinkage\"/>\n\t\t\t<xs:enumeration value=\"creep\"/>\n\t\t\t<xs:enumeration value=\"lack_of_fit\"/>\n\t\t\t<xs:enumeration value=\"buoyancy\"/>\n\t\t\t<xs:enumeration value=\"ice\"/>\n\t\t\t<xs:enumeration value=\"current\"/>\n\t\t\t<xs:enumeration value=\"wave\"/>\n\t\t\t<xs:enumeration value=\"rain\"/>\n\t\t\t<xs:enumeration value=\"brakes\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"permanent_g\"/>\n\t\t\t<xs:enumeration value=\"variable_q\"/>\n\t\t\t<xs:enumeration value=\"extraordinary_a\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActuatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electricactuator\"/>\n\t\t\t<xs:enumeration value=\"handoperatedactuator\"/>\n\t\t\t<xs:enumeration value=\"hydraulicactuator\"/>\n\t\t\t<xs:enumeration value=\"pneumaticactuator\"/>\n\t\t\t<xs:enumeration value=\"thermostaticactuator\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAddressTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"office\"/>\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"home\"/>\n\t\t\t<xs:enumeration value=\"distributionpoint\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirTerminalBoxTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"constantflow\"/>\n\t\t\t<xs:enumeration value=\"variableflowpressuredependant\"/>\n\t\t\t<xs:enumeration value=\"variableflowpressureindependant\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"diffuser\"/>\n\t\t\t<xs:enumeration value=\"grille\"/>\n\t\t\t<xs:enumeration value=\"louvre\"/>\n\t\t\t<xs:enumeration value=\"register\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirToAirHeatRecoveryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fixedplatecounterflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"fixedplatecrossflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"fixedplateparallelflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"rotarywheel\"/>\n\t\t\t<xs:enumeration value=\"runaroundcoilloop\"/>\n\t\t\t<xs:enumeration value=\"heatpipe\"/>\n\t\t\t<xs:enumeration value=\"twintowerenthalpyrecoveryloops\"/>\n\t\t\t<xs:enumeration value=\"thermosiphonsealedtubeheatexchangers\"/>\n\t\t\t<xs:enumeration value=\"thermosiphoncoiltypeheatexchangers\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAlarmTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bell\"/>\n\t\t\t<xs:enumeration value=\"breakglassbutton\"/>\n\t\t\t<xs:enumeration value=\"light\"/>\n\t\t\t<xs:enumeration value=\"manualpullbox\"/>\n\t\t\t<xs:enumeration value=\"siren\"/>\n\t\t\t<xs:enumeration value=\"whistle\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAnalysisModelTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"in_plane_loading_2d\"/>\n\t\t\t<xs:enumeration value=\"out_plane_loading_2d\"/>\n\t\t\t<xs:enumeration value=\"loading_3d\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAnalysisTheoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"first_order_theory\"/>\n\t\t\t<xs:enumeration value=\"second_order_theory\"/>\n\t\t\t<xs:enumeration value=\"third_order_theory\"/>\n\t\t\t<xs:enumeration value=\"full_nonlinear_theory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcArithmeticOperatorEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"add\"/>\n\t\t\t<xs:enumeration value=\"divide\"/>\n\t\t\t<xs:enumeration value=\"multiply\"/>\n\t\t\t<xs:enumeration value=\"subtract\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAssemblyPlaceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"factory\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAudioVisualApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"amplifier\"/>\n\t\t\t<xs:enumeration value=\"camera\"/>\n\t\t\t<xs:enumeration value=\"display\"/>\n\t\t\t<xs:enumeration value=\"microphone\"/>\n\t\t\t<xs:enumeration value=\"player\"/>\n\t\t\t<xs:enumeration value=\"projector\"/>\n\t\t\t<xs:enumeration value=\"receiver\"/>\n\t\t\t<xs:enumeration value=\"speaker\"/>\n\t\t\t<xs:enumeration value=\"switcher\"/>\n\t\t\t<xs:enumeration value=\"telephone\"/>\n\t\t\t<xs:enumeration value=\"tuner\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBSplineCurveForm\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"polyline_form\"/>\n\t\t\t<xs:enumeration value=\"circular_arc\"/>\n\t\t\t<xs:enumeration value=\"elliptic_arc\"/>\n\t\t\t<xs:enumeration value=\"parabolic_arc\"/>\n\t\t\t<xs:enumeration value=\"hyperbolic_arc\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBSplineSurfaceForm\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plane_surf\"/>\n\t\t\t<xs:enumeration value=\"cylindrical_surf\"/>\n\t\t\t<xs:enumeration value=\"conical_surf\"/>\n\t\t\t<xs:enumeration value=\"spherical_surf\"/>\n\t\t\t<xs:enumeration value=\"toroidal_surf\"/>\n\t\t\t<xs:enumeration value=\"surf_of_revolution\"/>\n\t\t\t<xs:enumeration value=\"ruled_surf\"/>\n\t\t\t<xs:enumeration value=\"generalised_cone\"/>\n\t\t\t<xs:enumeration value=\"quadric_surf\"/>\n\t\t\t<xs:enumeration value=\"surf_of_linear_extrusion\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBeamTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beam\"/>\n\t\t\t<xs:enumeration value=\"joist\"/>\n\t\t\t<xs:enumeration value=\"hollowcore\"/>\n\t\t\t<xs:enumeration value=\"lintel\"/>\n\t\t\t<xs:enumeration value=\"spandrel\"/>\n\t\t\t<xs:enumeration value=\"t_beam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBenchmarkEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"greaterthan\"/>\n\t\t\t<xs:enumeration value=\"greaterthanorequalto\"/>\n\t\t\t<xs:enumeration value=\"lessthan\"/>\n\t\t\t<xs:enumeration value=\"lessthanorequalto\"/>\n\t\t\t<xs:enumeration value=\"equalto\"/>\n\t\t\t<xs:enumeration value=\"notequalto\"/>\n\t\t\t<xs:enumeration value=\"includes\"/>\n\t\t\t<xs:enumeration value=\"notincludes\"/>\n\t\t\t<xs:enumeration value=\"includedin\"/>\n\t\t\t<xs:enumeration value=\"notincludedin\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBoilerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"water\"/>\n\t\t\t<xs:enumeration value=\"steam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBooleanOperator\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"union\"/>\n\t\t\t<xs:enumeration value=\"intersection\"/>\n\t\t\t<xs:enumeration value=\"difference\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingElementPartTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"insulation\"/>\n\t\t\t<xs:enumeration value=\"precastpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingElementProxyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"complex\"/>\n\t\t\t<xs:enumeration value=\"element\"/>\n\t\t\t<xs:enumeration value=\"partial\"/>\n\t\t\t<xs:enumeration value=\"provisionforvoid\"/>\n\t\t\t<xs:enumeration value=\"provisionforspace\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingSystemTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fenestration\"/>\n\t\t\t<xs:enumeration value=\"foundation\"/>\n\t\t\t<xs:enumeration value=\"loadbearing\"/>\n\t\t\t<xs:enumeration value=\"outershell\"/>\n\t\t\t<xs:enumeration value=\"shading\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBurnerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableCarrierFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"cross\"/>\n\t\t\t<xs:enumeration value=\"reducer\"/>\n\t\t\t<xs:enumeration value=\"tee\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableCarrierSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cableladdersegment\"/>\n\t\t\t<xs:enumeration value=\"cabletraysegment\"/>\n\t\t\t<xs:enumeration value=\"cabletrunkingsegment\"/>\n\t\t\t<xs:enumeration value=\"conduitsegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"busbarsegment\"/>\n\t\t\t<xs:enumeration value=\"cablesegment\"/>\n\t\t\t<xs:enumeration value=\"conductorsegment\"/>\n\t\t\t<xs:enumeration value=\"coresegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChangeActionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"nochange\"/>\n\t\t\t<xs:enumeration value=\"modified\"/>\n\t\t\t<xs:enumeration value=\"added\"/>\n\t\t\t<xs:enumeration value=\"deleted\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChillerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aircooled\"/>\n\t\t\t<xs:enumeration value=\"watercooled\"/>\n\t\t\t<xs:enumeration value=\"heatrecovery\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChimneyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoilTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dxcoolingcoil\"/>\n\t\t\t<xs:enumeration value=\"electricheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"gasheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"hydroniccoil\"/>\n\t\t\t<xs:enumeration value=\"steamheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"watercoolingcoil\"/>\n\t\t\t<xs:enumeration value=\"waterheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcColumnTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"column\"/>\n\t\t\t<xs:enumeration value=\"pilaster\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCommunicationsApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"antenna\"/>\n\t\t\t<xs:enumeration value=\"computer\"/>\n\t\t\t<xs:enumeration value=\"fax\"/>\n\t\t\t<xs:enumeration value=\"gateway\"/>\n\t\t\t<xs:enumeration value=\"modem\"/>\n\t\t\t<xs:enumeration value=\"networkappliance\"/>\n\t\t\t<xs:enumeration value=\"networkbridge\"/>\n\t\t\t<xs:enumeration value=\"networkhub\"/>\n\t\t\t<xs:enumeration value=\"printer\"/>\n\t\t\t<xs:enumeration value=\"repeater\"/>\n\t\t\t<xs:enumeration value=\"router\"/>\n\t\t\t<xs:enumeration value=\"scanner\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcComplexPropertyTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"p_complex\"/>\n\t\t\t<xs:enumeration value=\"q_complex\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCompressorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dynamic\"/>\n\t\t\t<xs:enumeration value=\"reciprocating\"/>\n\t\t\t<xs:enumeration value=\"rotary\"/>\n\t\t\t<xs:enumeration value=\"scroll\"/>\n\t\t\t<xs:enumeration value=\"trochoidal\"/>\n\t\t\t<xs:enumeration value=\"singlestage\"/>\n\t\t\t<xs:enumeration value=\"booster\"/>\n\t\t\t<xs:enumeration value=\"opentype\"/>\n\t\t\t<xs:enumeration value=\"hermetic\"/>\n\t\t\t<xs:enumeration value=\"semihermetic\"/>\n\t\t\t<xs:enumeration value=\"weldedshellhermetic\"/>\n\t\t\t<xs:enumeration value=\"rollingpiston\"/>\n\t\t\t<xs:enumeration value=\"rotaryvane\"/>\n\t\t\t<xs:enumeration value=\"singlescrew\"/>\n\t\t\t<xs:enumeration value=\"twinscrew\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCondenserTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aircooled\"/>\n\t\t\t<xs:enumeration value=\"evaporativecooled\"/>\n\t\t\t<xs:enumeration value=\"watercooled\"/>\n\t\t\t<xs:enumeration value=\"watercooledbrazedplate\"/>\n\t\t\t<xs:enumeration value=\"watercooledshellcoil\"/>\n\t\t\t<xs:enumeration value=\"watercooledshelltube\"/>\n\t\t\t<xs:enumeration value=\"watercooledtubeintube\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConnectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"atpath\"/>\n\t\t\t<xs:enumeration value=\"atstart\"/>\n\t\t\t<xs:enumeration value=\"atend\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstraintEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"hard\"/>\n\t\t\t<xs:enumeration value=\"soft\"/>\n\t\t\t<xs:enumeration value=\"advisory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionEquipmentResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"demolishing\"/>\n\t\t\t<xs:enumeration value=\"earthmoving\"/>\n\t\t\t<xs:enumeration value=\"erecting\"/>\n\t\t\t<xs:enumeration value=\"heating\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"paving\"/>\n\t\t\t<xs:enumeration value=\"pumping\"/>\n\t\t\t<xs:enumeration value=\"transporting\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionMaterialResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aggregates\"/>\n\t\t\t<xs:enumeration value=\"concrete\"/>\n\t\t\t<xs:enumeration value=\"drywall\"/>\n\t\t\t<xs:enumeration value=\"fuel\"/>\n\t\t\t<xs:enumeration value=\"gypsum\"/>\n\t\t\t<xs:enumeration value=\"masonry\"/>\n\t\t\t<xs:enumeration value=\"metal\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionProductResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assembly\"/>\n\t\t\t<xs:enumeration value=\"formwork\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcControllerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floating\"/>\n\t\t\t<xs:enumeration value=\"programmable\"/>\n\t\t\t<xs:enumeration value=\"proportional\"/>\n\t\t\t<xs:enumeration value=\"multiposition\"/>\n\t\t\t<xs:enumeration value=\"twoposition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCooledBeamTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"active\"/>\n\t\t\t<xs:enumeration value=\"passive\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoolingTowerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"naturaldraft\"/>\n\t\t\t<xs:enumeration value=\"mechanicalinduceddraft\"/>\n\t\t\t<xs:enumeration value=\"mechanicalforceddraft\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCostItemTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCostScheduleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"budget\"/>\n\t\t\t<xs:enumeration value=\"costplan\"/>\n\t\t\t<xs:enumeration value=\"estimate\"/>\n\t\t\t<xs:enumeration value=\"tender\"/>\n\t\t\t<xs:enumeration value=\"pricedbillofquantities\"/>\n\t\t\t<xs:enumeration value=\"unpricedbillofquantities\"/>\n\t\t\t<xs:enumeration value=\"scheduleofrates\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoveringTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ceiling\"/>\n\t\t\t<xs:enumeration value=\"flooring\"/>\n\t\t\t<xs:enumeration value=\"cladding\"/>\n\t\t\t<xs:enumeration value=\"roofing\"/>\n\t\t\t<xs:enumeration value=\"molding\"/>\n\t\t\t<xs:enumeration value=\"skirtingboard\"/>\n\t\t\t<xs:enumeration value=\"insulation\"/>\n\t\t\t<xs:enumeration value=\"membrane\"/>\n\t\t\t<xs:enumeration value=\"sleeving\"/>\n\t\t\t<xs:enumeration value=\"wrapping\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCrewResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"office\"/>\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurtainWallTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurveInterpolationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"linear\"/>\n\t\t\t<xs:enumeration value=\"log_linear\"/>\n\t\t\t<xs:enumeration value=\"log_log\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDamperTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"backdraftdamper\"/>\n\t\t\t<xs:enumeration value=\"balancingdamper\"/>\n\t\t\t<xs:enumeration value=\"blastdamper\"/>\n\t\t\t<xs:enumeration value=\"controldamper\"/>\n\t\t\t<xs:enumeration value=\"firedamper\"/>\n\t\t\t<xs:enumeration value=\"firesmokedamper\"/>\n\t\t\t<xs:enumeration value=\"fumehoodexhaust\"/>\n\t\t\t<xs:enumeration value=\"gravitydamper\"/>\n\t\t\t<xs:enumeration value=\"gravityreliefdamper\"/>\n\t\t\t<xs:enumeration value=\"reliefdamper\"/>\n\t\t\t<xs:enumeration value=\"smokedamper\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDataOriginEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"measured\"/>\n\t\t\t<xs:enumeration value=\"predicted\"/>\n\t\t\t<xs:enumeration value=\"simulated\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDerivedUnitEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"angularvelocityunit\"/>\n\t\t\t<xs:enumeration value=\"areadensityunit\"/>\n\t\t\t<xs:enumeration value=\"compoundplaneangleunit\"/>\n\t\t\t<xs:enumeration value=\"dynamicviscosityunit\"/>\n\t\t\t<xs:enumeration value=\"heatfluxdensityunit\"/>\n\t\t\t<xs:enumeration value=\"integercountrateunit\"/>\n\t\t\t<xs:enumeration value=\"isothermalmoisturecapacityunit\"/>\n\t\t\t<xs:enumeration value=\"kinematicviscosityunit\"/>\n\t\t\t<xs:enumeration value=\"linearvelocityunit\"/>\n\t\t\t<xs:enumeration value=\"massdensityunit\"/>\n\t\t\t<xs:enumeration value=\"massflowrateunit\"/>\n\t\t\t<xs:enumeration value=\"moisturediffusivityunit\"/>\n\t\t\t<xs:enumeration value=\"molecularweightunit\"/>\n\t\t\t<xs:enumeration value=\"specificheatcapacityunit\"/>\n\t\t\t<xs:enumeration value=\"thermaladmittanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermalconductanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermalresistanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermaltransmittanceunit\"/>\n\t\t\t<xs:enumeration value=\"vaporpermeabilityunit\"/>\n\t\t\t<xs:enumeration value=\"volumetricflowrateunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalfrequencyunit\"/>\n\t\t\t<xs:enumeration value=\"torqueunit\"/>\n\t\t\t<xs:enumeration value=\"momentofinertiaunit\"/>\n\t\t\t<xs:enumeration value=\"linearmomentunit\"/>\n\t\t\t<xs:enumeration value=\"linearforceunit\"/>\n\t\t\t<xs:enumeration value=\"planarforceunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofelasticityunit\"/>\n\t\t\t<xs:enumeration value=\"shearmodulusunit\"/>\n\t\t\t<xs:enumeration value=\"linearstiffnessunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalstiffnessunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"accelerationunit\"/>\n\t\t\t<xs:enumeration value=\"curvatureunit\"/>\n\t\t\t<xs:enumeration value=\"heatingvalueunit\"/>\n\t\t\t<xs:enumeration value=\"ionconcentrationunit\"/>\n\t\t\t<xs:enumeration value=\"luminousintensitydistributionunit\"/>\n\t\t\t<xs:enumeration value=\"massperlengthunit\"/>\n\t\t\t<xs:enumeration value=\"modulusoflinearsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofrotationalsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"phunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalmassunit\"/>\n\t\t\t<xs:enumeration value=\"sectionareaintegralunit\"/>\n\t\t\t<xs:enumeration value=\"sectionmodulusunit\"/>\n\t\t\t<xs:enumeration value=\"soundpowerlevelunit\"/>\n\t\t\t<xs:enumeration value=\"soundpowerunit\"/>\n\t\t\t<xs:enumeration value=\"soundpressurelevelunit\"/>\n\t\t\t<xs:enumeration value=\"soundpressureunit\"/>\n\t\t\t<xs:enumeration value=\"temperaturegradientunit\"/>\n\t\t\t<xs:enumeration value=\"temperaturerateofchangeunit\"/>\n\t\t\t<xs:enumeration value=\"thermalexpansioncoefficientunit\"/>\n\t\t\t<xs:enumeration value=\"warpingconstantunit\"/>\n\t\t\t<xs:enumeration value=\"warpingmomentunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDirectionSenseEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"positive\"/>\n\t\t\t<xs:enumeration value=\"negative\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDiscreteAccessoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchorplate\"/>\n\t\t\t<xs:enumeration value=\"bracket\"/>\n\t\t\t<xs:enumeration value=\"shoe\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionChamberElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"formedduct\"/>\n\t\t\t<xs:enumeration value=\"inspectionchamber\"/>\n\t\t\t<xs:enumeration value=\"inspectionpit\"/>\n\t\t\t<xs:enumeration value=\"manhole\"/>\n\t\t\t<xs:enumeration value=\"meterchamber\"/>\n\t\t\t<xs:enumeration value=\"sump\"/>\n\t\t\t<xs:enumeration value=\"trench\"/>\n\t\t\t<xs:enumeration value=\"valvechamber\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionPortTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cable\"/>\n\t\t\t<xs:enumeration value=\"cablecarrier\"/>\n\t\t\t<xs:enumeration value=\"duct\"/>\n\t\t\t<xs:enumeration value=\"pipe\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionSystemEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airconditioning\"/>\n\t\t\t<xs:enumeration value=\"audiovisual\"/>\n\t\t\t<xs:enumeration value=\"chemical\"/>\n\t\t\t<xs:enumeration value=\"chilledwater\"/>\n\t\t\t<xs:enumeration value=\"communication\"/>\n\t\t\t<xs:enumeration value=\"compressedair\"/>\n\t\t\t<xs:enumeration value=\"condenserwater\"/>\n\t\t\t<xs:enumeration value=\"control\"/>\n\t\t\t<xs:enumeration value=\"conveying\"/>\n\t\t\t<xs:enumeration value=\"data\"/>\n\t\t\t<xs:enumeration value=\"disposal\"/>\n\t\t\t<xs:enumeration value=\"domesticcoldwater\"/>\n\t\t\t<xs:enumeration value=\"domestichotwater\"/>\n\t\t\t<xs:enumeration value=\"drainage\"/>\n\t\t\t<xs:enumeration value=\"earthing\"/>\n\t\t\t<xs:enumeration value=\"electrical\"/>\n\t\t\t<xs:enumeration value=\"electroacoustic\"/>\n\t\t\t<xs:enumeration value=\"exhaust\"/>\n\t\t\t<xs:enumeration value=\"fireprotection\"/>\n\t\t\t<xs:enumeration value=\"fuel\"/>\n\t\t\t<xs:enumeration value=\"gas\"/>\n\t\t\t<xs:enumeration value=\"hazardous\"/>\n\t\t\t<xs:enumeration value=\"heating\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"lightningprotection\"/>\n\t\t\t<xs:enumeration value=\"municipalsolidwaste\"/>\n\t\t\t<xs:enumeration value=\"oil\"/>\n\t\t\t<xs:enumeration value=\"operational\"/>\n\t\t\t<xs:enumeration value=\"powergeneration\"/>\n\t\t\t<xs:enumeration value=\"rainwater\"/>\n\t\t\t<xs:enumeration value=\"refrigeration\"/>\n\t\t\t<xs:enumeration value=\"security\"/>\n\t\t\t<xs:enumeration value=\"sewage\"/>\n\t\t\t<xs:enumeration value=\"signal\"/>\n\t\t\t<xs:enumeration value=\"stormwater\"/>\n\t\t\t<xs:enumeration value=\"telephone\"/>\n\t\t\t<xs:enumeration value=\"tv\"/>\n\t\t\t<xs:enumeration value=\"vacuum\"/>\n\t\t\t<xs:enumeration value=\"vent\"/>\n\t\t\t<xs:enumeration value=\"ventilation\"/>\n\t\t\t<xs:enumeration value=\"wastewater\"/>\n\t\t\t<xs:enumeration value=\"watersupply\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDocumentConfidentialityEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"public\"/>\n\t\t\t<xs:enumeration value=\"restricted\"/>\n\t\t\t<xs:enumeration value=\"confidential\"/>\n\t\t\t<xs:enumeration value=\"personal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDocumentStatusEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"draft\"/>\n\t\t\t<xs:enumeration value=\"finaldraft\"/>\n\t\t\t<xs:enumeration value=\"final\"/>\n\t\t\t<xs:enumeration value=\"revision\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorPanelOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"swinging\"/>\n\t\t\t<xs:enumeration value=\"double_acting\"/>\n\t\t\t<xs:enumeration value=\"sliding\"/>\n\t\t\t<xs:enumeration value=\"folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"fixedpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorPanelPositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"middle\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorStyleConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aluminium\"/>\n\t\t\t<xs:enumeration value=\"high_grade_steel\"/>\n\t\t\t<xs:enumeration value=\"steel\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"aluminium_wood\"/>\n\t\t\t<xs:enumeration value=\"aluminium_plastic\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorStyleOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_swing_left\"/>\n\t\t\t<xs:enumeration value=\"single_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_left\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_right\"/>\n\t\t\t<xs:enumeration value=\"double_swing_left\"/>\n\t\t\t<xs:enumeration value=\"double_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_double_swing\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_left\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_sliding\"/>\n\t\t\t<xs:enumeration value=\"folding_to_left\"/>\n\t\t\t<xs:enumeration value=\"folding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"door\"/>\n\t\t\t<xs:enumeration value=\"gate\"/>\n\t\t\t<xs:enumeration value=\"trapdoor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorTypeOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_swing_left\"/>\n\t\t\t<xs:enumeration value=\"single_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_left\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_right\"/>\n\t\t\t<xs:enumeration value=\"double_swing_left\"/>\n\t\t\t<xs:enumeration value=\"double_swing_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_double_swing\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_left\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_sliding\"/>\n\t\t\t<xs:enumeration value=\"folding_to_left\"/>\n\t\t\t<xs:enumeration value=\"folding_to_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"swing_fixed_left\"/>\n\t\t\t<xs:enumeration value=\"swing_fixed_right\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"obstruction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctSilencerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flatoval\"/>\n\t\t\t<xs:enumeration value=\"rectangular\"/>\n\t\t\t<xs:enumeration value=\"round\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dishwasher\"/>\n\t\t\t<xs:enumeration value=\"electriccooker\"/>\n\t\t\t<xs:enumeration value=\"freestandingelectricheater\"/>\n\t\t\t<xs:enumeration value=\"freestandingfan\"/>\n\t\t\t<xs:enumeration value=\"freestandingwaterheater\"/>\n\t\t\t<xs:enumeration value=\"freestandingwatercooler\"/>\n\t\t\t<xs:enumeration value=\"freezer\"/>\n\t\t\t<xs:enumeration value=\"fridge_freezer\"/>\n\t\t\t<xs:enumeration value=\"handdryer\"/>\n\t\t\t<xs:enumeration value=\"kitchenmachine\"/>\n\t\t\t<xs:enumeration value=\"microwave\"/>\n\t\t\t<xs:enumeration value=\"photocopier\"/>\n\t\t\t<xs:enumeration value=\"refrigerator\"/>\n\t\t\t<xs:enumeration value=\"tumbledryer\"/>\n\t\t\t<xs:enumeration value=\"vendingmachine\"/>\n\t\t\t<xs:enumeration value=\"washingmachine\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricDistributionBoardTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"consumerunit\"/>\n\t\t\t<xs:enumeration value=\"distributionboard\"/>\n\t\t\t<xs:enumeration value=\"motorcontrolcentre\"/>\n\t\t\t<xs:enumeration value=\"switchboard\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricFlowStorageDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"battery\"/>\n\t\t\t<xs:enumeration value=\"capacitorbank\"/>\n\t\t\t<xs:enumeration value=\"harmonicfilter\"/>\n\t\t\t<xs:enumeration value=\"inductorbank\"/>\n\t\t\t<xs:enumeration value=\"ups\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricGeneratorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"chp\"/>\n\t\t\t<xs:enumeration value=\"enginegenerator\"/>\n\t\t\t<xs:enumeration value=\"standalone\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricMotorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dc\"/>\n\t\t\t<xs:enumeration value=\"induction\"/>\n\t\t\t<xs:enumeration value=\"polyphase\"/>\n\t\t\t<xs:enumeration value=\"reluctancesynchronous\"/>\n\t\t\t<xs:enumeration value=\"synchronous\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricTimeControlTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"timeclock\"/>\n\t\t\t<xs:enumeration value=\"timedelay\"/>\n\t\t\t<xs:enumeration value=\"relay\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElementAssemblyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"accessory_assembly\"/>\n\t\t\t<xs:enumeration value=\"arch\"/>\n\t\t\t<xs:enumeration value=\"beam_grid\"/>\n\t\t\t<xs:enumeration value=\"braced_frame\"/>\n\t\t\t<xs:enumeration value=\"girder\"/>\n\t\t\t<xs:enumeration value=\"reinforcement_unit\"/>\n\t\t\t<xs:enumeration value=\"rigid_frame\"/>\n\t\t\t<xs:enumeration value=\"slab_field\"/>\n\t\t\t<xs:enumeration value=\"truss\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElementCompositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"complex\"/>\n\t\t\t<xs:enumeration value=\"element\"/>\n\t\t\t<xs:enumeration value=\"partial\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEngineTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"externalcombustion\"/>\n\t\t\t<xs:enumeration value=\"internalcombustion\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEvaporativeCoolerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directevaporativerandommediaaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativerigidmediaaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativeslingerspackagedaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativepackagedrotaryaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativeairwasher\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativepackageaircooler\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativewetcoil\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativecoolingtowerorcoilcooler\"/>\n\t\t\t<xs:enumeration value=\"indirectdirectcombination\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEvaporatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directexpansion\"/>\n\t\t\t<xs:enumeration value=\"directexpansionshellandtube\"/>\n\t\t\t<xs:enumeration value=\"directexpansiontubeintube\"/>\n\t\t\t<xs:enumeration value=\"directexpansionbrazedplate\"/>\n\t\t\t<xs:enumeration value=\"floodedshellandtube\"/>\n\t\t\t<xs:enumeration value=\"shellandcoil\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEventTriggerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"eventrule\"/>\n\t\t\t<xs:enumeration value=\"eventmessage\"/>\n\t\t\t<xs:enumeration value=\"eventtime\"/>\n\t\t\t<xs:enumeration value=\"eventcomplex\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEventTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"startevent\"/>\n\t\t\t<xs:enumeration value=\"endevent\"/>\n\t\t\t<xs:enumeration value=\"intermediateevent\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcExternalSpatialElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"external_earth\"/>\n\t\t\t<xs:enumeration value=\"external_water\"/>\n\t\t\t<xs:enumeration value=\"external_fire\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFanTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"centrifugalforwardcurved\"/>\n\t\t\t<xs:enumeration value=\"centrifugalradial\"/>\n\t\t\t<xs:enumeration value=\"centrifugalbackwardinclinedcurved\"/>\n\t\t\t<xs:enumeration value=\"centrifugalairfoil\"/>\n\t\t\t<xs:enumeration value=\"tubeaxial\"/>\n\t\t\t<xs:enumeration value=\"vaneaxial\"/>\n\t\t\t<xs:enumeration value=\"propelloraxial\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFastenerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"glue\"/>\n\t\t\t<xs:enumeration value=\"mortar\"/>\n\t\t\t<xs:enumeration value=\"weld\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFilterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airparticlefilter\"/>\n\t\t\t<xs:enumeration value=\"compressedairfilter\"/>\n\t\t\t<xs:enumeration value=\"odorfilter\"/>\n\t\t\t<xs:enumeration value=\"oilfilter\"/>\n\t\t\t<xs:enumeration value=\"strainer\"/>\n\t\t\t<xs:enumeration value=\"waterfilter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFireSuppressionTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"breechinginlet\"/>\n\t\t\t<xs:enumeration value=\"firehydrant\"/>\n\t\t\t<xs:enumeration value=\"hosereel\"/>\n\t\t\t<xs:enumeration value=\"sprinkler\"/>\n\t\t\t<xs:enumeration value=\"sprinklerdeflector\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"source\"/>\n\t\t\t<xs:enumeration value=\"sink\"/>\n\t\t\t<xs:enumeration value=\"sourceandsink\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowInstrumentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pressuregauge\"/>\n\t\t\t<xs:enumeration value=\"thermometer\"/>\n\t\t\t<xs:enumeration value=\"ammeter\"/>\n\t\t\t<xs:enumeration value=\"frequencymeter\"/>\n\t\t\t<xs:enumeration value=\"powerfactormeter\"/>\n\t\t\t<xs:enumeration value=\"phaseanglemeter\"/>\n\t\t\t<xs:enumeration value=\"voltmeter_peak\"/>\n\t\t\t<xs:enumeration value=\"voltmeter_rms\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowMeterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"energymeter\"/>\n\t\t\t<xs:enumeration value=\"gasmeter\"/>\n\t\t\t<xs:enumeration value=\"oilmeter\"/>\n\t\t\t<xs:enumeration value=\"watermeter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFootingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"caisson_foundation\"/>\n\t\t\t<xs:enumeration value=\"footing_beam\"/>\n\t\t\t<xs:enumeration value=\"pad_footing\"/>\n\t\t\t<xs:enumeration value=\"pile_cap\"/>\n\t\t\t<xs:enumeration value=\"strip_footing\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFurnitureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"chair\"/>\n\t\t\t<xs:enumeration value=\"table\"/>\n\t\t\t<xs:enumeration value=\"desk\"/>\n\t\t\t<xs:enumeration value=\"bed\"/>\n\t\t\t<xs:enumeration value=\"filecabinet\"/>\n\t\t\t<xs:enumeration value=\"shelf\"/>\n\t\t\t<xs:enumeration value=\"sofa\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGeographicElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"terrain\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGeometricProjectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"graph_view\"/>\n\t\t\t<xs:enumeration value=\"sketch_view\"/>\n\t\t\t<xs:enumeration value=\"model_view\"/>\n\t\t\t<xs:enumeration value=\"plan_view\"/>\n\t\t\t<xs:enumeration value=\"reflected_plan_view\"/>\n\t\t\t<xs:enumeration value=\"section_view\"/>\n\t\t\t<xs:enumeration value=\"elevation_view\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGlobalOrLocalEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"global_coords\"/>\n\t\t\t<xs:enumeration value=\"local_coords\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGridTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rectangular\"/>\n\t\t\t<xs:enumeration value=\"radial\"/>\n\t\t\t<xs:enumeration value=\"triangular\"/>\n\t\t\t<xs:enumeration value=\"irregular\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatExchangerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plate\"/>\n\t\t\t<xs:enumeration value=\"shellandtube\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHumidifierTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"steaminjection\"/>\n\t\t\t<xs:enumeration value=\"adiabaticairwasher\"/>\n\t\t\t<xs:enumeration value=\"adiabaticpan\"/>\n\t\t\t<xs:enumeration value=\"adiabaticwettedelement\"/>\n\t\t\t<xs:enumeration value=\"adiabaticatomizing\"/>\n\t\t\t<xs:enumeration value=\"adiabaticultrasonic\"/>\n\t\t\t<xs:enumeration value=\"adiabaticrigidmedia\"/>\n\t\t\t<xs:enumeration value=\"adiabaticcompressedairnozzle\"/>\n\t\t\t<xs:enumeration value=\"assistedelectric\"/>\n\t\t\t<xs:enumeration value=\"assistednaturalgas\"/>\n\t\t\t<xs:enumeration value=\"assistedpropane\"/>\n\t\t\t<xs:enumeration value=\"assistedbutane\"/>\n\t\t\t<xs:enumeration value=\"assistedsteam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInterceptorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cyclonic\"/>\n\t\t\t<xs:enumeration value=\"grease\"/>\n\t\t\t<xs:enumeration value=\"oil\"/>\n\t\t\t<xs:enumeration value=\"petrol\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInternalOrExternalEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"internal\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"external_earth\"/>\n\t\t\t<xs:enumeration value=\"external_water\"/>\n\t\t\t<xs:enumeration value=\"external_fire\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInventoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assetinventory\"/>\n\t\t\t<xs:enumeration value=\"spaceinventory\"/>\n\t\t\t<xs:enumeration value=\"furnitureinventory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcJunctionBoxTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"data\"/>\n\t\t\t<xs:enumeration value=\"power\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcKnotType\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"uniform_knots\"/>\n\t\t\t<xs:enumeration value=\"quasi_uniform_knots\"/>\n\t\t\t<xs:enumeration value=\"piecewise_bezier_knots\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLaborResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"administration\"/>\n\t\t\t<xs:enumeration value=\"carpentry\"/>\n\t\t\t<xs:enumeration value=\"cleaning\"/>\n\t\t\t<xs:enumeration value=\"concrete\"/>\n\t\t\t<xs:enumeration value=\"drywall\"/>\n\t\t\t<xs:enumeration value=\"electric\"/>\n\t\t\t<xs:enumeration value=\"finishing\"/>\n\t\t\t<xs:enumeration value=\"flooring\"/>\n\t\t\t<xs:enumeration value=\"general\"/>\n\t\t\t<xs:enumeration value=\"hvac\"/>\n\t\t\t<xs:enumeration value=\"landscaping\"/>\n\t\t\t<xs:enumeration value=\"masonry\"/>\n\t\t\t<xs:enumeration value=\"painting\"/>\n\t\t\t<xs:enumeration value=\"paving\"/>\n\t\t\t<xs:enumeration value=\"plumbing\"/>\n\t\t\t<xs:enumeration value=\"roofing\"/>\n\t\t\t<xs:enumeration value=\"sitegrading\"/>\n\t\t\t<xs:enumeration value=\"steelwork\"/>\n\t\t\t<xs:enumeration value=\"surveying\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLampTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\n\t\t\t<xs:enumeration value=\"halogen\"/>\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"led\"/>\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\n\t\t\t<xs:enumeration value=\"oled\"/>\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLayerSetDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"axis1\"/>\n\t\t\t<xs:enumeration value=\"axis2\"/>\n\t\t\t<xs:enumeration value=\"axis3\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightDistributionCurveEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"type_a\"/>\n\t\t\t<xs:enumeration value=\"type_b\"/>\n\t\t\t<xs:enumeration value=\"type_c\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightEmissionSourceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"lightemittingdiode\"/>\n\t\t\t<xs:enumeration value=\"lowpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"lowvoltagehalogen\"/>\n\t\t\t<xs:enumeration value=\"mainvoltagehalogen\"/>\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightFixtureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pointsource\"/>\n\t\t\t<xs:enumeration value=\"directionsource\"/>\n\t\t\t<xs:enumeration value=\"securitylighting\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLoadGroupTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"load_group\"/>\n\t\t\t<xs:enumeration value=\"load_case\"/>\n\t\t\t<xs:enumeration value=\"load_combination\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLogicalOperatorEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"logicaland\"/>\n\t\t\t<xs:enumeration value=\"logicalor\"/>\n\t\t\t<xs:enumeration value=\"logicalxor\"/>\n\t\t\t<xs:enumeration value=\"logicalnotand\"/>\n\t\t\t<xs:enumeration value=\"logicalnotor\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMechanicalFastenerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchorbolt\"/>\n\t\t\t<xs:enumeration value=\"bolt\"/>\n\t\t\t<xs:enumeration value=\"dowel\"/>\n\t\t\t<xs:enumeration value=\"nail\"/>\n\t\t\t<xs:enumeration value=\"nailplate\"/>\n\t\t\t<xs:enumeration value=\"rivet\"/>\n\t\t\t<xs:enumeration value=\"screw\"/>\n\t\t\t<xs:enumeration value=\"shearconnector\"/>\n\t\t\t<xs:enumeration value=\"staple\"/>\n\t\t\t<xs:enumeration value=\"studshearconnector\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMedicalDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airstation\"/>\n\t\t\t<xs:enumeration value=\"feedairunit\"/>\n\t\t\t<xs:enumeration value=\"oxygengenerator\"/>\n\t\t\t<xs:enumeration value=\"oxygenplant\"/>\n\t\t\t<xs:enumeration value=\"vacuumstation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"brace\"/>\n\t\t\t<xs:enumeration value=\"chord\"/>\n\t\t\t<xs:enumeration value=\"collar\"/>\n\t\t\t<xs:enumeration value=\"member\"/>\n\t\t\t<xs:enumeration value=\"mullion\"/>\n\t\t\t<xs:enumeration value=\"plate\"/>\n\t\t\t<xs:enumeration value=\"post\"/>\n\t\t\t<xs:enumeration value=\"purlin\"/>\n\t\t\t<xs:enumeration value=\"rafter\"/>\n\t\t\t<xs:enumeration value=\"stringer\"/>\n\t\t\t<xs:enumeration value=\"strut\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMotorConnectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beltdrive\"/>\n\t\t\t<xs:enumeration value=\"coupling\"/>\n\t\t\t<xs:enumeration value=\"directdrive\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNullStyle\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"null\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcObjectTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"product\"/>\n\t\t\t<xs:enumeration value=\"process\"/>\n\t\t\t<xs:enumeration value=\"control\"/>\n\t\t\t<xs:enumeration value=\"resource\"/>\n\t\t\t<xs:enumeration value=\"actor\"/>\n\t\t\t<xs:enumeration value=\"group\"/>\n\t\t\t<xs:enumeration value=\"project\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcObjectiveEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"codecompliance\"/>\n\t\t\t<xs:enumeration value=\"codewaiver\"/>\n\t\t\t<xs:enumeration value=\"designintent\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"healthandsafety\"/>\n\t\t\t<xs:enumeration value=\"mergeconflict\"/>\n\t\t\t<xs:enumeration value=\"modelview\"/>\n\t\t\t<xs:enumeration value=\"parameter\"/>\n\t\t\t<xs:enumeration value=\"requirement\"/>\n\t\t\t<xs:enumeration value=\"specification\"/>\n\t\t\t<xs:enumeration value=\"triggercondition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOccupantTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assignee\"/>\n\t\t\t<xs:enumeration value=\"assignor\"/>\n\t\t\t<xs:enumeration value=\"lessee\"/>\n\t\t\t<xs:enumeration value=\"lessor\"/>\n\t\t\t<xs:enumeration value=\"lettingagent\"/>\n\t\t\t<xs:enumeration value=\"owner\"/>\n\t\t\t<xs:enumeration value=\"tenant\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOpeningElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"opening\"/>\n\t\t\t<xs:enumeration value=\"recess\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOutletTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"audiovisualoutlet\"/>\n\t\t\t<xs:enumeration value=\"communicationsoutlet\"/>\n\t\t\t<xs:enumeration value=\"poweroutlet\"/>\n\t\t\t<xs:enumeration value=\"dataoutlet\"/>\n\t\t\t<xs:enumeration value=\"telephoneoutlet\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPerformanceHistoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPermeableCoveringOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"grill\"/>\n\t\t\t<xs:enumeration value=\"louver\"/>\n\t\t\t<xs:enumeration value=\"screen\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPermitTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"access\"/>\n\t\t\t<xs:enumeration value=\"building\"/>\n\t\t\t<xs:enumeration value=\"work\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPhysicalOrVirtualEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"physical\"/>\n\t\t\t<xs:enumeration value=\"virtual\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPileConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cast_in_place\"/>\n\t\t\t<xs:enumeration value=\"composite\"/>\n\t\t\t<xs:enumeration value=\"precast_concrete\"/>\n\t\t\t<xs:enumeration value=\"prefab_steel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPileTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bored\"/>\n\t\t\t<xs:enumeration value=\"driven\"/>\n\t\t\t<xs:enumeration value=\"jetgrouting\"/>\n\t\t\t<xs:enumeration value=\"cohesion\"/>\n\t\t\t<xs:enumeration value=\"friction\"/>\n\t\t\t<xs:enumeration value=\"support\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPipeFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"obstruction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPipeSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"culvert\"/>\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\n\t\t\t<xs:enumeration value=\"gutter\"/>\n\t\t\t<xs:enumeration value=\"spool\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curtain_panel\"/>\n\t\t\t<xs:enumeration value=\"sheet\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPreferredSurfaceCurveRepresentation\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curve3d\"/>\n\t\t\t<xs:enumeration value=\"pcurve_s1\"/>\n\t\t\t<xs:enumeration value=\"pcurve_s2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProcedureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"advice_caution\"/>\n\t\t\t<xs:enumeration value=\"advice_note\"/>\n\t\t\t<xs:enumeration value=\"advice_warning\"/>\n\t\t\t<xs:enumeration value=\"calibration\"/>\n\t\t\t<xs:enumeration value=\"diagnostic\"/>\n\t\t\t<xs:enumeration value=\"shutdown\"/>\n\t\t\t<xs:enumeration value=\"startup\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProfileTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curve\"/>\n\t\t\t<xs:enumeration value=\"area\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectOrderTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"changeorder\"/>\n\t\t\t<xs:enumeration value=\"maintenanceworkorder\"/>\n\t\t\t<xs:enumeration value=\"moveorder\"/>\n\t\t\t<xs:enumeration value=\"purchaseorder\"/>\n\t\t\t<xs:enumeration value=\"workorder\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectedOrTrueLengthEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"projected_length\"/>\n\t\t\t<xs:enumeration value=\"true_length\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectionElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPropertySetTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pset_typedrivenonly\"/>\n\t\t\t<xs:enumeration value=\"pset_typedrivenoverride\"/>\n\t\t\t<xs:enumeration value=\"pset_occurrencedriven\"/>\n\t\t\t<xs:enumeration value=\"pset_performancedriven\"/>\n\t\t\t<xs:enumeration value=\"qto_typedrivenonly\"/>\n\t\t\t<xs:enumeration value=\"qto_typedrivenoverride\"/>\n\t\t\t<xs:enumeration value=\"qto_occurrencedriven\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProtectiveDeviceTrippingUnitTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electronic\"/>\n\t\t\t<xs:enumeration value=\"electromagnetic\"/>\n\t\t\t<xs:enumeration value=\"residualcurrent\"/>\n\t\t\t<xs:enumeration value=\"thermal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProtectiveDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"circuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"earthleakagecircuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"earthingswitch\"/>\n\t\t\t<xs:enumeration value=\"fusedisconnector\"/>\n\t\t\t<xs:enumeration value=\"residualcurrentcircuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"residualcurrentswitch\"/>\n\t\t\t<xs:enumeration value=\"varistor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPumpTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"circulator\"/>\n\t\t\t<xs:enumeration value=\"endsuction\"/>\n\t\t\t<xs:enumeration value=\"splitcase\"/>\n\t\t\t<xs:enumeration value=\"submersiblepump\"/>\n\t\t\t<xs:enumeration value=\"sumppump\"/>\n\t\t\t<xs:enumeration value=\"verticalinline\"/>\n\t\t\t<xs:enumeration value=\"verticalturbine\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRailingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"handrail\"/>\n\t\t\t<xs:enumeration value=\"guardrail\"/>\n\t\t\t<xs:enumeration value=\"balustrade\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRampFlightTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight\"/>\n\t\t\t<xs:enumeration value=\"spiral\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRampTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight_run_ramp\"/>\n\t\t\t<xs:enumeration value=\"two_straight_run_ramp\"/>\n\t\t\t<xs:enumeration value=\"quarter_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"half_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"spiral_ramp\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRecurrenceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"daily\"/>\n\t\t\t<xs:enumeration value=\"weekly\"/>\n\t\t\t<xs:enumeration value=\"monthly_by_day_of_month\"/>\n\t\t\t<xs:enumeration value=\"monthly_by_position\"/>\n\t\t\t<xs:enumeration value=\"by_day_count\"/>\n\t\t\t<xs:enumeration value=\"by_weekday_count\"/>\n\t\t\t<xs:enumeration value=\"yearly_by_day_of_month\"/>\n\t\t\t<xs:enumeration value=\"yearly_by_position\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReflectanceMethodEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blinn\"/>\n\t\t\t<xs:enumeration value=\"flat\"/>\n\t\t\t<xs:enumeration value=\"glass\"/>\n\t\t\t<xs:enumeration value=\"matt\"/>\n\t\t\t<xs:enumeration value=\"metal\"/>\n\t\t\t<xs:enumeration value=\"mirror\"/>\n\t\t\t<xs:enumeration value=\"phong\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"strauss\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarRoleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"main\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"ligature\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"punching\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"ring\"/>\n\t\t\t<xs:enumeration value=\"anchoring\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarSurfaceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plain\"/>\n\t\t\t<xs:enumeration value=\"textured\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchoring\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"ligature\"/>\n\t\t\t<xs:enumeration value=\"main\"/>\n\t\t\t<xs:enumeration value=\"punching\"/>\n\t\t\t<xs:enumeration value=\"ring\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingMeshTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRoleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"supplier\"/>\n\t\t\t<xs:enumeration value=\"manufacturer\"/>\n\t\t\t<xs:enumeration value=\"contractor\"/>\n\t\t\t<xs:enumeration value=\"subcontractor\"/>\n\t\t\t<xs:enumeration value=\"architect\"/>\n\t\t\t<xs:enumeration value=\"structuralengineer\"/>\n\t\t\t<xs:enumeration value=\"costengineer\"/>\n\t\t\t<xs:enumeration value=\"client\"/>\n\t\t\t<xs:enumeration value=\"buildingowner\"/>\n\t\t\t<xs:enumeration value=\"buildingoperator\"/>\n\t\t\t<xs:enumeration value=\"mechanicalengineer\"/>\n\t\t\t<xs:enumeration value=\"electricalengineer\"/>\n\t\t\t<xs:enumeration value=\"projectmanager\"/>\n\t\t\t<xs:enumeration value=\"facilitiesmanager\"/>\n\t\t\t<xs:enumeration value=\"civilengineer\"/>\n\t\t\t<xs:enumeration value=\"commissioningengineer\"/>\n\t\t\t<xs:enumeration value=\"engineer\"/>\n\t\t\t<xs:enumeration value=\"owner\"/>\n\t\t\t<xs:enumeration value=\"consultant\"/>\n\t\t\t<xs:enumeration value=\"constructionmanager\"/>\n\t\t\t<xs:enumeration value=\"fieldconstructionmanager\"/>\n\t\t\t<xs:enumeration value=\"reseller\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRoofTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flat_roof\"/>\n\t\t\t<xs:enumeration value=\"shed_roof\"/>\n\t\t\t<xs:enumeration value=\"gable_roof\"/>\n\t\t\t<xs:enumeration value=\"hip_roof\"/>\n\t\t\t<xs:enumeration value=\"hipped_gable_roof\"/>\n\t\t\t<xs:enumeration value=\"gambrel_roof\"/>\n\t\t\t<xs:enumeration value=\"mansard_roof\"/>\n\t\t\t<xs:enumeration value=\"barrel_roof\"/>\n\t\t\t<xs:enumeration value=\"rainbow_roof\"/>\n\t\t\t<xs:enumeration value=\"butterfly_roof\"/>\n\t\t\t<xs:enumeration value=\"pavilion_roof\"/>\n\t\t\t<xs:enumeration value=\"dome_roof\"/>\n\t\t\t<xs:enumeration value=\"freeform\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSIPrefix\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"exa\"/>\n\t\t\t<xs:enumeration value=\"peta\"/>\n\t\t\t<xs:enumeration value=\"tera\"/>\n\t\t\t<xs:enumeration value=\"giga\"/>\n\t\t\t<xs:enumeration value=\"mega\"/>\n\t\t\t<xs:enumeration value=\"kilo\"/>\n\t\t\t<xs:enumeration value=\"hecto\"/>\n\t\t\t<xs:enumeration value=\"deca\"/>\n\t\t\t<xs:enumeration value=\"deci\"/>\n\t\t\t<xs:enumeration value=\"centi\"/>\n\t\t\t<xs:enumeration value=\"milli\"/>\n\t\t\t<xs:enumeration value=\"micro\"/>\n\t\t\t<xs:enumeration value=\"nano\"/>\n\t\t\t<xs:enumeration value=\"pico\"/>\n\t\t\t<xs:enumeration value=\"femto\"/>\n\t\t\t<xs:enumeration value=\"atto\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSIUnitName\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ampere\"/>\n\t\t\t<xs:enumeration value=\"becquerel\"/>\n\t\t\t<xs:enumeration value=\"candela\"/>\n\t\t\t<xs:enumeration value=\"coulomb\"/>\n\t\t\t<xs:enumeration value=\"cubic_metre\"/>\n\t\t\t<xs:enumeration value=\"degree_celsius\"/>\n\t\t\t<xs:enumeration value=\"farad\"/>\n\t\t\t<xs:enumeration value=\"gram\"/>\n\t\t\t<xs:enumeration value=\"gray\"/>\n\t\t\t<xs:enumeration value=\"henry\"/>\n\t\t\t<xs:enumeration value=\"hertz\"/>\n\t\t\t<xs:enumeration value=\"joule\"/>\n\t\t\t<xs:enumeration value=\"kelvin\"/>\n\t\t\t<xs:enumeration value=\"lumen\"/>\n\t\t\t<xs:enumeration value=\"lux\"/>\n\t\t\t<xs:enumeration value=\"metre\"/>\n\t\t\t<xs:enumeration value=\"mole\"/>\n\t\t\t<xs:enumeration value=\"newton\"/>\n\t\t\t<xs:enumeration value=\"ohm\"/>\n\t\t\t<xs:enumeration value=\"pascal\"/>\n\t\t\t<xs:enumeration value=\"radian\"/>\n\t\t\t<xs:enumeration value=\"second\"/>\n\t\t\t<xs:enumeration value=\"siemens\"/>\n\t\t\t<xs:enumeration value=\"sievert\"/>\n\t\t\t<xs:enumeration value=\"square_metre\"/>\n\t\t\t<xs:enumeration value=\"steradian\"/>\n\t\t\t<xs:enumeration value=\"tesla\"/>\n\t\t\t<xs:enumeration value=\"volt\"/>\n\t\t\t<xs:enumeration value=\"watt\"/>\n\t\t\t<xs:enumeration value=\"weber\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSanitaryTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bath\"/>\n\t\t\t<xs:enumeration value=\"bidet\"/>\n\t\t\t<xs:enumeration value=\"cistern\"/>\n\t\t\t<xs:enumeration value=\"shower\"/>\n\t\t\t<xs:enumeration value=\"sink\"/>\n\t\t\t<xs:enumeration value=\"sanitaryfountain\"/>\n\t\t\t<xs:enumeration value=\"toiletpan\"/>\n\t\t\t<xs:enumeration value=\"urinal\"/>\n\t\t\t<xs:enumeration value=\"washhandbasin\"/>\n\t\t\t<xs:enumeration value=\"wcseat\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"uniform\"/>\n\t\t\t<xs:enumeration value=\"tapered\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSensorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cosensor\"/>\n\t\t\t<xs:enumeration value=\"co2sensor\"/>\n\t\t\t<xs:enumeration value=\"conductancesensor\"/>\n\t\t\t<xs:enumeration value=\"contactsensor\"/>\n\t\t\t<xs:enumeration value=\"firesensor\"/>\n\t\t\t<xs:enumeration value=\"flowsensor\"/>\n\t\t\t<xs:enumeration value=\"frostsensor\"/>\n\t\t\t<xs:enumeration value=\"gassensor\"/>\n\t\t\t<xs:enumeration value=\"heatsensor\"/>\n\t\t\t<xs:enumeration value=\"humiditysensor\"/>\n\t\t\t<xs:enumeration value=\"identifiersensor\"/>\n\t\t\t<xs:enumeration value=\"ionconcentrationsensor\"/>\n\t\t\t<xs:enumeration value=\"levelsensor\"/>\n\t\t\t<xs:enumeration value=\"lightsensor\"/>\n\t\t\t<xs:enumeration value=\"moisturesensor\"/>\n\t\t\t<xs:enumeration value=\"movementsensor\"/>\n\t\t\t<xs:enumeration value=\"phsensor\"/>\n\t\t\t<xs:enumeration value=\"pressuresensor\"/>\n\t\t\t<xs:enumeration value=\"radiationsensor\"/>\n\t\t\t<xs:enumeration value=\"radioactivitysensor\"/>\n\t\t\t<xs:enumeration value=\"smokesensor\"/>\n\t\t\t<xs:enumeration value=\"soundsensor\"/>\n\t\t\t<xs:enumeration value=\"temperaturesensor\"/>\n\t\t\t<xs:enumeration value=\"windsensor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSequenceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"start_start\"/>\n\t\t\t<xs:enumeration value=\"start_finish\"/>\n\t\t\t<xs:enumeration value=\"finish_start\"/>\n\t\t\t<xs:enumeration value=\"finish_finish\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcShadingDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"jalousie\"/>\n\t\t\t<xs:enumeration value=\"shutter\"/>\n\t\t\t<xs:enumeration value=\"awning\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSimplePropertyTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"p_singlevalue\"/>\n\t\t\t<xs:enumeration value=\"p_enumeratedvalue\"/>\n\t\t\t<xs:enumeration value=\"p_boundedvalue\"/>\n\t\t\t<xs:enumeration value=\"p_listvalue\"/>\n\t\t\t<xs:enumeration value=\"p_tablevalue\"/>\n\t\t\t<xs:enumeration value=\"p_referencevalue\"/>\n\t\t\t<xs:enumeration value=\"q_length\"/>\n\t\t\t<xs:enumeration value=\"q_area\"/>\n\t\t\t<xs:enumeration value=\"q_volume\"/>\n\t\t\t<xs:enumeration value=\"q_count\"/>\n\t\t\t<xs:enumeration value=\"q_weight\"/>\n\t\t\t<xs:enumeration value=\"q_time\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSlabTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floor\"/>\n\t\t\t<xs:enumeration value=\"roof\"/>\n\t\t\t<xs:enumeration value=\"landing\"/>\n\t\t\t<xs:enumeration value=\"baseslab\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSolarDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"solarcollector\"/>\n\t\t\t<xs:enumeration value=\"solarpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpaceHeaterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"convector\"/>\n\t\t\t<xs:enumeration value=\"radiator\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpaceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"space\"/>\n\t\t\t<xs:enumeration value=\"parking\"/>\n\t\t\t<xs:enumeration value=\"gfa\"/>\n\t\t\t<xs:enumeration value=\"internal\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpatialZoneTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"construction\"/>\n\t\t\t<xs:enumeration value=\"firesafety\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"occupancy\"/>\n\t\t\t<xs:enumeration value=\"security\"/>\n\t\t\t<xs:enumeration value=\"thermal\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"ventilation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStackTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"birdcage\"/>\n\t\t\t<xs:enumeration value=\"cowl\"/>\n\t\t\t<xs:enumeration value=\"rainwaterhopper\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStairFlightTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight\"/>\n\t\t\t<xs:enumeration value=\"winder\"/>\n\t\t\t<xs:enumeration value=\"spiral\"/>\n\t\t\t<xs:enumeration value=\"curved\"/>\n\t\t\t<xs:enumeration value=\"freeform\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStairTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"straight_run_stair\"/>\n\t\t\t<xs:enumeration value=\"two_straight_run_stair\"/>\n\t\t\t<xs:enumeration value=\"quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"half_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"half_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"three_quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"three_quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"spiral_stair\"/>\n\t\t\t<xs:enumeration value=\"double_return_stair\"/>\n\t\t\t<xs:enumeration value=\"curved_run_stair\"/>\n\t\t\t<xs:enumeration value=\"two_curved_run_stair\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStateEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"readwrite\"/>\n\t\t\t<xs:enumeration value=\"readonly\"/>\n\t\t\t<xs:enumeration value=\"locked\"/>\n\t\t\t<xs:enumeration value=\"readwritelocked\"/>\n\t\t\t<xs:enumeration value=\"readonlylocked\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralCurveActivityTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"const\"/>\n\t\t\t<xs:enumeration value=\"linear\"/>\n\t\t\t<xs:enumeration value=\"polygonal\"/>\n\t\t\t<xs:enumeration value=\"equidistant\"/>\n\t\t\t<xs:enumeration value=\"sinus\"/>\n\t\t\t<xs:enumeration value=\"parabola\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralCurveMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"rigid_joined_member\"/>\n\t\t\t<xs:enumeration value=\"pin_joined_member\"/>\n\t\t\t<xs:enumeration value=\"cable\"/>\n\t\t\t<xs:enumeration value=\"tension_member\"/>\n\t\t\t<xs:enumeration value=\"compression_member\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralSurfaceActivityTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"const\"/>\n\t\t\t<xs:enumeration value=\"bilinear\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"isocontour\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralSurfaceMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bending_element\"/>\n\t\t\t<xs:enumeration value=\"membrane_element\"/>\n\t\t\t<xs:enumeration value=\"shell\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSubContractResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"purchase\"/>\n\t\t\t<xs:enumeration value=\"work\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSurfaceFeatureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"mark\"/>\n\t\t\t<xs:enumeration value=\"tag\"/>\n\t\t\t<xs:enumeration value=\"treatment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSurfaceSide\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"positive\"/>\n\t\t\t<xs:enumeration value=\"negative\"/>\n\t\t\t<xs:enumeration value=\"both\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSwitchingDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"contactor\"/>\n\t\t\t<xs:enumeration value=\"dimmerswitch\"/>\n\t\t\t<xs:enumeration value=\"emergencystop\"/>\n\t\t\t<xs:enumeration value=\"keypad\"/>\n\t\t\t<xs:enumeration value=\"momentaryswitch\"/>\n\t\t\t<xs:enumeration value=\"selectorswitch\"/>\n\t\t\t<xs:enumeration value=\"starter\"/>\n\t\t\t<xs:enumeration value=\"switchdisconnector\"/>\n\t\t\t<xs:enumeration value=\"toggleswitch\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSystemFurnitureElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"panel\"/>\n\t\t\t<xs:enumeration value=\"worksurface\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTankTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"basin\"/>\n\t\t\t<xs:enumeration value=\"breakpressure\"/>\n\t\t\t<xs:enumeration value=\"expansion\"/>\n\t\t\t<xs:enumeration value=\"feedandexpansion\"/>\n\t\t\t<xs:enumeration value=\"pressurevessel\"/>\n\t\t\t<xs:enumeration value=\"storage\"/>\n\t\t\t<xs:enumeration value=\"vessel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTaskDurationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"elapsedtime\"/>\n\t\t\t<xs:enumeration value=\"worktime\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTaskTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"attendance\"/>\n\t\t\t<xs:enumeration value=\"construction\"/>\n\t\t\t<xs:enumeration value=\"demolition\"/>\n\t\t\t<xs:enumeration value=\"dismantle\"/>\n\t\t\t<xs:enumeration value=\"disposal\"/>\n\t\t\t<xs:enumeration value=\"installation\"/>\n\t\t\t<xs:enumeration value=\"logistic\"/>\n\t\t\t<xs:enumeration value=\"maintenance\"/>\n\t\t\t<xs:enumeration value=\"move\"/>\n\t\t\t<xs:enumeration value=\"operation\"/>\n\t\t\t<xs:enumeration value=\"removal\"/>\n\t\t\t<xs:enumeration value=\"renovation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTendonAnchorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"coupler\"/>\n\t\t\t<xs:enumeration value=\"fixed_end\"/>\n\t\t\t<xs:enumeration value=\"tensioning_end\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTendonTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bar\"/>\n\t\t\t<xs:enumeration value=\"coated\"/>\n\t\t\t<xs:enumeration value=\"strand\"/>\n\t\t\t<xs:enumeration value=\"wire\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextPath\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"up\"/>\n\t\t\t<xs:enumeration value=\"down\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeSeriesDataTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"continuous\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"discretebinary\"/>\n\t\t\t<xs:enumeration value=\"piecewisebinary\"/>\n\t\t\t<xs:enumeration value=\"piecewiseconstant\"/>\n\t\t\t<xs:enumeration value=\"piecewisecontinuous\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransformerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"current\"/>\n\t\t\t<xs:enumeration value=\"frequency\"/>\n\t\t\t<xs:enumeration value=\"inverter\"/>\n\t\t\t<xs:enumeration value=\"rectifier\"/>\n\t\t\t<xs:enumeration value=\"voltage\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransitionCode\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"discontinuous\"/>\n\t\t\t<xs:enumeration value=\"continuous\"/>\n\t\t\t<xs:enumeration value=\"contsamegradient\"/>\n\t\t\t<xs:enumeration value=\"contsamegradientsamecurvature\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransportElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"elevator\"/>\n\t\t\t<xs:enumeration value=\"escalator\"/>\n\t\t\t<xs:enumeration value=\"movingwalkway\"/>\n\t\t\t<xs:enumeration value=\"craneway\"/>\n\t\t\t<xs:enumeration value=\"liftinggear\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTrimmingPreference\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cartesian\"/>\n\t\t\t<xs:enumeration value=\"parameter\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTubeBundleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"finned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"absorbeddoseunit\"/>\n\t\t\t<xs:enumeration value=\"amountofsubstanceunit\"/>\n\t\t\t<xs:enumeration value=\"areaunit\"/>\n\t\t\t<xs:enumeration value=\"doseequivalentunit\"/>\n\t\t\t<xs:enumeration value=\"electriccapacitanceunit\"/>\n\t\t\t<xs:enumeration value=\"electricchargeunit\"/>\n\t\t\t<xs:enumeration value=\"electricconductanceunit\"/>\n\t\t\t<xs:enumeration value=\"electriccurrentunit\"/>\n\t\t\t<xs:enumeration value=\"electricresistanceunit\"/>\n\t\t\t<xs:enumeration value=\"electricvoltageunit\"/>\n\t\t\t<xs:enumeration value=\"energyunit\"/>\n\t\t\t<xs:enumeration value=\"forceunit\"/>\n\t\t\t<xs:enumeration value=\"frequencyunit\"/>\n\t\t\t<xs:enumeration value=\"illuminanceunit\"/>\n\t\t\t<xs:enumeration value=\"inductanceunit\"/>\n\t\t\t<xs:enumeration value=\"lengthunit\"/>\n\t\t\t<xs:enumeration value=\"luminousfluxunit\"/>\n\t\t\t<xs:enumeration value=\"luminousintensityunit\"/>\n\t\t\t<xs:enumeration value=\"magneticfluxdensityunit\"/>\n\t\t\t<xs:enumeration value=\"magneticfluxunit\"/>\n\t\t\t<xs:enumeration value=\"massunit\"/>\n\t\t\t<xs:enumeration value=\"planeangleunit\"/>\n\t\t\t<xs:enumeration value=\"powerunit\"/>\n\t\t\t<xs:enumeration value=\"pressureunit\"/>\n\t\t\t<xs:enumeration value=\"radioactivityunit\"/>\n\t\t\t<xs:enumeration value=\"solidangleunit\"/>\n\t\t\t<xs:enumeration value=\"thermodynamictemperatureunit\"/>\n\t\t\t<xs:enumeration value=\"timeunit\"/>\n\t\t\t<xs:enumeration value=\"volumeunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitaryControlElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"alarmpanel\"/>\n\t\t\t<xs:enumeration value=\"controlpanel\"/>\n\t\t\t<xs:enumeration value=\"gasdetectionpanel\"/>\n\t\t\t<xs:enumeration value=\"indicatorpanel\"/>\n\t\t\t<xs:enumeration value=\"mimicpanel\"/>\n\t\t\t<xs:enumeration value=\"humidistat\"/>\n\t\t\t<xs:enumeration value=\"thermostat\"/>\n\t\t\t<xs:enumeration value=\"weatherstation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitaryEquipmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airhandler\"/>\n\t\t\t<xs:enumeration value=\"airconditioningunit\"/>\n\t\t\t<xs:enumeration value=\"dehumidifier\"/>\n\t\t\t<xs:enumeration value=\"splitsystem\"/>\n\t\t\t<xs:enumeration value=\"rooftopunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcValveTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airrelease\"/>\n\t\t\t<xs:enumeration value=\"antivacuum\"/>\n\t\t\t<xs:enumeration value=\"changeover\"/>\n\t\t\t<xs:enumeration value=\"check\"/>\n\t\t\t<xs:enumeration value=\"commissioning\"/>\n\t\t\t<xs:enumeration value=\"diverting\"/>\n\t\t\t<xs:enumeration value=\"drawoffcock\"/>\n\t\t\t<xs:enumeration value=\"doublecheck\"/>\n\t\t\t<xs:enumeration value=\"doubleregulating\"/>\n\t\t\t<xs:enumeration value=\"faucet\"/>\n\t\t\t<xs:enumeration value=\"flushing\"/>\n\t\t\t<xs:enumeration value=\"gascock\"/>\n\t\t\t<xs:enumeration value=\"gastap\"/>\n\t\t\t<xs:enumeration value=\"isolating\"/>\n\t\t\t<xs:enumeration value=\"mixing\"/>\n\t\t\t<xs:enumeration value=\"pressurereducing\"/>\n\t\t\t<xs:enumeration value=\"pressurerelief\"/>\n\t\t\t<xs:enumeration value=\"regulating\"/>\n\t\t\t<xs:enumeration value=\"safetycutoff\"/>\n\t\t\t<xs:enumeration value=\"steamtrap\"/>\n\t\t\t<xs:enumeration value=\"stopcock\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVibrationIsolatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compression\"/>\n\t\t\t<xs:enumeration value=\"spring\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVoidingFeatureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cutout\"/>\n\t\t\t<xs:enumeration value=\"notch\"/>\n\t\t\t<xs:enumeration value=\"hole\"/>\n\t\t\t<xs:enumeration value=\"miter\"/>\n\t\t\t<xs:enumeration value=\"chamfer\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWallTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"movable\"/>\n\t\t\t<xs:enumeration value=\"parapet\"/>\n\t\t\t<xs:enumeration value=\"partitioning\"/>\n\t\t\t<xs:enumeration value=\"plumbingwall\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"solidwall\"/>\n\t\t\t<xs:enumeration value=\"standard\"/>\n\t\t\t<xs:enumeration value=\"polygonal\"/>\n\t\t\t<xs:enumeration value=\"elementedwall\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWasteTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floortrap\"/>\n\t\t\t<xs:enumeration value=\"floorwaste\"/>\n\t\t\t<xs:enumeration value=\"gullysump\"/>\n\t\t\t<xs:enumeration value=\"gullytrap\"/>\n\t\t\t<xs:enumeration value=\"roofdrain\"/>\n\t\t\t<xs:enumeration value=\"wastedisposalunit\"/>\n\t\t\t<xs:enumeration value=\"wastetrap\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowPanelOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"sidehungrighthand\"/>\n\t\t\t<xs:enumeration value=\"sidehunglefthand\"/>\n\t\t\t<xs:enumeration value=\"tiltandturnrighthand\"/>\n\t\t\t<xs:enumeration value=\"tiltandturnlefthand\"/>\n\t\t\t<xs:enumeration value=\"tophung\"/>\n\t\t\t<xs:enumeration value=\"bottomhung\"/>\n\t\t\t<xs:enumeration value=\"pivothorizontal\"/>\n\t\t\t<xs:enumeration value=\"pivotvertical\"/>\n\t\t\t<xs:enumeration value=\"slidinghorizontal\"/>\n\t\t\t<xs:enumeration value=\"slidingvertical\"/>\n\t\t\t<xs:enumeration value=\"removablecasement\"/>\n\t\t\t<xs:enumeration value=\"fixedcasement\"/>\n\t\t\t<xs:enumeration value=\"otheroperation\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowPanelPositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"middle\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"bottom\"/>\n\t\t\t<xs:enumeration value=\"top\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowStyleConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aluminium\"/>\n\t\t\t<xs:enumeration value=\"high_grade_steel\"/>\n\t\t\t<xs:enumeration value=\"steel\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"aluminium_wood\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"other_construction\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowStyleOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_panel\"/>\n\t\t\t<xs:enumeration value=\"double_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"double_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_bottom\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_top\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_left\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_right\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"window\"/>\n\t\t\t<xs:enumeration value=\"skylight\"/>\n\t\t\t<xs:enumeration value=\"lightdome\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowTypePartitioningEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"single_panel\"/>\n\t\t\t<xs:enumeration value=\"double_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"double_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_bottom\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_top\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_left\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_right\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkCalendarTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"firstshift\"/>\n\t\t\t<xs:enumeration value=\"secondshift\"/>\n\t\t\t<xs:enumeration value=\"thirdshift\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkPlanTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actual\"/>\n\t\t\t<xs:enumeration value=\"baseline\"/>\n\t\t\t<xs:enumeration value=\"planned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkScheduleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actual\"/>\n\t\t\t<xs:enumeration value=\"baseline\"/>\n\t\t\t<xs:enumeration value=\"planned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<!-- simple type declarations (for TYPE defined data type definitions) -->\n\t<xs:simpleType name=\"IfcAbsorbedDoseMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAccelerationMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAmountOfSubstanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAngularVelocityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcArcIndex\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcArcIndex\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcArcIndex\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t<xs:maxLength value=\"3\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAreaDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAreaMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcBinary\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:hexBinary\">\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"IfcBoolean\">\n\t\t<xs:restriction base=\"xs:boolean\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBoxAlignment\">\n\t\t<xs:restriction base=\"ifc:IfcLabel\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCardinalPointReference\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcComplexNumber\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcComplexNumber\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"xs:double\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"array\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcComplexNumber\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"xs:double\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t<xs:maxLength value=\"2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcCompoundPlaneAngleMeasure\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcCompoundPlaneAngleMeasure\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"xs:long\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcCompoundPlaneAngleMeasure\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"xs:long\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t<xs:maxLength value=\"4\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcContextDependentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCountMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurvatureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDate\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDateTime\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDayInMonthNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDayInWeekNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDescriptiveMeasure\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDimensionCount\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoseEquivalentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuration\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDynamicViscosityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricCapacitanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricChargeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricConductanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricCurrentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricResistanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricVoltageMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEnergyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontStyle\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontVariant\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontWeight\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFrequencyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGloballyUniqueId\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:minLength value=\"22\"/>\n\t\t\t<xs:maxLength value=\"22\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatFluxDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatingValueMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIdentifier\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:maxLength value=\"255\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIlluminanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInductanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInteger\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIntegerCountRateMeasure\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIonConcentrationMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIsothermalMoistureCapacityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcKinematicViscosityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLabel\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:maxLength value=\"255\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLanguageId\">\n\t\t<xs:restriction base=\"ifc:IfcIdentifier\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLengthMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcLineIndex\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcLineIndex\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcLineIndex\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearMomentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearStiffnessMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearVelocityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLogical\">\n\t\t<xs:restriction base=\"ifc:logical\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousFluxMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousIntensityDistributionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousIntensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMagneticFluxDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMagneticFluxMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassFlowRateMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassPerLengthMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfElasticityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMoistureDiffusivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMolecularWeightMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMomentOfInertiaMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMonetaryMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMonthInYearNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNonNegativeLengthMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNormalisedRatioMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNumericMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPHMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcParameterValue\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlanarForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlaneAngleMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveInteger\">\n\t\t<xs:restriction base=\"ifc:IfcInteger\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveLengthMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositivePlaneAngleMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcPlaneAngleMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveRatioMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPowerMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPresentableText\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPressureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcPropertySetDefinitionSet\">\n\t\t<xs:sequence>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t</xs:sequence>\n\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t</xs:complexType>\n\t<xs:simpleType name=\"IfcRadioActivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRatioMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReal\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalFrequencyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalMassMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalStiffnessMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionModulusMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionalAreaIntegralMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcShearModulusMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSolidAngleMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPowerLevelMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPowerMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPressureLevelMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPressureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecificHeatCapacityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecularExponent\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecularRoughness\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTemperatureGradientMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTemperatureRateOfChangeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcText\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextAlignment\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextDecoration\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextFontName\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextTransformation\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalAdmittanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalConductivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalExpansionCoefficientMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalResistanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalTransmittanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermodynamicTemperatureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTime\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeStamp\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTorqueMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcURIReference\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVaporPermeabilityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVolumeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVolumetricFlowRateMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWarpingConstantMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWarpingMomentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<!-- base entity and entity attribute declaration (for embeded base schema definitions) -->\n\t<xs:element name=\"Entity\" type=\"ifc:Entity\" abstract=\"true\" nillable=\"true\"/>\n\t<xs:complexType name=\"Entity\" abstract=\"true\">\n\t\t<xs:attribute name=\"href\" type=\"xs:anyURI\" use=\"optional\"/>\n\t\t<xs:attribute name=\"ref\" type=\"xs:IDREF\" use=\"optional\"/>\n\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t</xs:complexType>\n\t<!-- base global attribute declaration (for embeded base schema definitions) -->\n\t<xs:attributeGroup name=\"instanceAttributes\">\n\t\t<xs:attribute name=\"id\" type=\"xs:ID\" use=\"optional\"/>\n\t\t<xs:attribute name=\"path\" type=\"xs:NMTOKENS\" use=\"optional\"/>\n\t\t<xs:attribute name=\"pos\" use=\"optional\">\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:restriction>\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:list itemType=\"xs:integer\"/>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t<xs:minLength value=\"1\"/>\n\t\t\t\t</xs:restriction>\n\t\t\t</xs:simpleType>\n\t\t</xs:attribute>\n\t</xs:attributeGroup>\n\t<xs:attribute name=\"arraySize\">\n\t\t<xs:simpleType>\n\t\t\t<xs:restriction>\n\t\t\t\t<xs:simpleType>\n\t\t\t\t\t<xs:list itemType=\"xs:integer\"/>\n\t\t\t\t</xs:simpleType>\n\t\t\t\t<xs:minLength value=\"1\"/>\n\t\t\t</xs:restriction>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:attribute name=\"itemType\">\n\t\t<xs:simpleType>\n\t\t\t<xs:list itemType=\"xs:QName\"/>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:attribute name=\"cType\">\n\t\t<xs:simpleType>\n\t\t\t<xs:list itemType=\"ifc:aggregateType\"/>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:simpleType name=\"aggregateType\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:enumeration value=\"array\"/>\n\t\t\t<xs:enumeration value=\"list\"/>\n\t\t\t<xs:enumeration value=\"set\"/>\n\t\t\t<xs:enumeration value=\"bag\"/>\n\t\t\t<xs:enumeration value=\"array-unique\"/>\n\t\t\t<xs:enumeration value=\"array-optional\"/>\n\t\t\t<xs:enumeration value=\"array-optional-unique\"/>\n\t\t\t<xs:enumeration value=\"list-unique\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<!-- base global simple type declaration (for embeded base schema definitions) -->\n\t<xs:complexType name=\"hexBinary\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"xs:hexBinary\">\n\t\t\t\t<xs:attribute name=\"extraBits\" type=\"xs:integer\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"logical\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:enumeration value=\"false\"/>\n\t\t\t<xs:enumeration value=\"true\"/>\n\t\t\t<xs:enumeration value=\"unknown\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n    <xs:simpleType name=\"Seq-IfcPositiveInteger\">\n        <xs:restriction>\n            <xs:simpleType>\n                <xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n            </xs:simpleType>\n            <xs:minLength value=\"3\"/>\n        </xs:restriction>\n    </xs:simpleType>\n\t<!-- base global wrapper declaration for atomic simple types (for embeded base schema definitions) -->\n\t<xs:element name=\"IfcAbsorbedDoseMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAbsorbedDoseMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAccelerationMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAccelerationMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAmountOfSubstanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAmountOfSubstanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAngularVelocityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAngularVelocityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcArcIndex-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcArcIndex\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAreaDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAreaMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcBinary-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBinary\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcBoolean-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBoolean\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcComplexNumber-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcComplexNumber\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCompoundPlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCompoundPlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcContextDependentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcContextDependentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCountMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCountMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCurvatureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCurvatureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDate-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDate\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDateTime-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDateTime\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDescriptiveMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDescriptiveMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDoseEquivalentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDoseEquivalentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDuration-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDuration\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDynamicViscosityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDynamicViscosityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricCapacitanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCapacitanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricChargeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricChargeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricConductanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricConductanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricCurrentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricResistanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricResistanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricVoltageMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricVoltageMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcEnergyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcFrequencyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFrequencyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcHeatFluxDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatFluxDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcHeatingValueMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatingValueMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIdentifier-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIdentifier\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIlluminanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIlluminanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcInductanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInductanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcInteger-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInteger\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIntegerCountRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIntegerCountRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIonConcentrationMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIonConcentrationMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIsothermalMoistureCapacityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcKinematicViscosityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcKinematicViscosityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLabel-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLabel\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLineIndex-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLineIndex\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearMomentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearMomentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearStiffnessMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearStiffnessMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearVelocityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearVelocityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLogical-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLogical\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousFluxMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousFluxMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousIntensityDistributionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityDistributionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousIntensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMagneticFluxDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMagneticFluxMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassFlowRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassFlowRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassPerLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassPerLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfElasticityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfElasticityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfLinearSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMoistureDiffusivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMoistureDiffusivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMolecularWeightMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMolecularWeightMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMomentOfInertiaMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMomentOfInertiaMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMonetaryMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMonetaryMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNonNegativeLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNonNegativeLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNormalisedRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNormalisedRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNullStyle-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNullStyle\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNumericMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNumericMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPHMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPHMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcParameterValue-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcParameterValue\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPlanarForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlanarForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveInteger-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveInteger\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositivePlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositivePlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPowerMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPowerMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPressureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPressureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPropertySetDefinitionSet-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:complexContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinitionSet\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:complexContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRadioActivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRadioActivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcReal-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcReal\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalFrequencyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalFrequencyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalMassMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalMassMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalStiffnessMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalStiffnessMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSectionModulusMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionModulusMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSectionalAreaIntegralMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionalAreaIntegralMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcShearModulusMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcShearModulusMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSolidAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSolidAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPowerLevelMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerLevelMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPowerMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPressureLevelMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureLevelMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPressureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecificHeatCapacityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecificHeatCapacityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecularExponent-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularExponent\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecularRoughness-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularRoughness\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTemperatureGradientMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureGradientMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTemperatureRateOfChangeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureRateOfChangeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcText-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcText\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTextFontName-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTextFontName\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalAdmittanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalAdmittanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalConductivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalConductivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalExpansionCoefficientMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalExpansionCoefficientMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalResistanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalResistanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalTransmittanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalTransmittanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermodynamicTemperatureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermodynamicTemperatureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTime-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTime\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTimeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTimeStamp-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeStamp\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTorqueMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTorqueMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVaporPermeabilityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVaporPermeabilityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVolumeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVolumetricFlowRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumetricFlowRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcWarpingConstantMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingConstantMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcWarpingMomentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingMomentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n</xs:schema>\n"
  },
  {
    "path": "Source/RevitIFCTools/IFC4X3_ADD2.exp",
    "content": "SCHEMA IFC4X3_ADD2;\n\nTYPE IfcAbsorbedDoseMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAccelerationMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAmountOfSubstanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAngularVelocityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcArcIndex = LIST [3:3] OF IfcPositiveInteger;\nEND_TYPE;\n\nTYPE IfcAreaDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcAreaMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcBinary = BINARY;\nEND_TYPE;\n\nTYPE IfcBoolean = BOOLEAN;\nEND_TYPE;\n\nTYPE IfcBoxAlignment = IfcLabel;\n WHERE\n\t WR1 : SELF IN ['top-left', 'top-middle', 'top-right', 'middle-left', 'center', 'middle-right', 'bottom-left', 'bottom-middle', 'bottom-right'];\nEND_TYPE;\n\nTYPE IfcCardinalPointReference = INTEGER;\n WHERE\n\t GreaterThanZero : SELF > 0;\nEND_TYPE;\n\nTYPE IfcComplexNumber = ARRAY [1:2] OF REAL;\nEND_TYPE;\n\nTYPE IfcCompoundPlaneAngleMeasure = LIST [3:4] OF INTEGER;\n WHERE\n\t MinutesInRange : ABS(SELF[2]) < 60;\n\t SecondsInRange : ABS(SELF[3]) < 60;\n\t MicrosecondsInRange : (SIZEOF(SELF) = 3) OR (ABS(SELF[4]) < 1000000);\n\t ConsistentSign : ((SELF[1] >= 0) AND (SELF[2] >= 0) AND (SELF[3] >= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] >= 0)))\nOR\n((SELF[1] <= 0) AND (SELF[2] <= 0) AND (SELF[3] <= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] <= 0)));\nEND_TYPE;\n\nTYPE IfcContextDependentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcCountMeasure = INTEGER;\nEND_TYPE;\n\nTYPE IfcCurvatureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcDate = STRING;\nEND_TYPE;\n\nTYPE IfcDateTime = STRING;\nEND_TYPE;\n\nTYPE IfcDayInMonthNumber = INTEGER;\n WHERE\n\t ValidRange : {1 <= SELF <= 31};\nEND_TYPE;\n\nTYPE IfcDayInWeekNumber = INTEGER;\n WHERE\n\t ValidRange : {1 <= SELF <= 7};\nEND_TYPE;\n\nTYPE IfcDescriptiveMeasure = STRING;\nEND_TYPE;\n\nTYPE IfcDimensionCount = INTEGER;\n WHERE\n\t WR1 : { 0 < SELF <= 3 };\nEND_TYPE;\n\nTYPE IfcDoseEquivalentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcDuration = STRING;\nEND_TYPE;\n\nTYPE IfcDynamicViscosityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricCapacitanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricChargeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricConductanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricCurrentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricResistanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcElectricVoltageMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcEnergyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcFontStyle = STRING;\n WHERE\n\t WR1 : SELF IN ['normal','italic','oblique'];\nEND_TYPE;\n\nTYPE IfcFontVariant = STRING;\n WHERE\n\t WR1 : SELF IN ['normal','small-caps'];\nEND_TYPE;\n\nTYPE IfcFontWeight = STRING;\n WHERE\n\t WR1 : SELF IN ['normal','small-caps','100','200','300','400','500','600','700','800','900'];\nEND_TYPE;\n\nTYPE IfcForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcFrequencyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcGloballyUniqueId = STRING(22) FIXED;\nEND_TYPE;\n\nTYPE IfcHeatFluxDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcHeatingValueMeasure = REAL;\n WHERE\n\t WR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcIdentifier = STRING(255);\nEND_TYPE;\n\nTYPE IfcIlluminanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcInductanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcInteger = INTEGER;\nEND_TYPE;\n\nTYPE IfcIntegerCountRateMeasure = INTEGER;\nEND_TYPE;\n\nTYPE IfcIonConcentrationMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcIsothermalMoistureCapacityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcKinematicViscosityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLabel = STRING(255);\nEND_TYPE;\n\nTYPE IfcLanguageId = IfcIdentifier;\nEND_TYPE;\n\nTYPE IfcLengthMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLineIndex = LIST [2:?] OF IfcPositiveInteger;\nEND_TYPE;\n\nTYPE IfcLinearForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearMomentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearStiffnessMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLinearVelocityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLogical = LOGICAL;\nEND_TYPE;\n\nTYPE IfcLuminousFluxMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLuminousIntensityDistributionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcLuminousIntensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMagneticFluxDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMagneticFluxMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassDensityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassFlowRateMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMassPerLengthMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfElasticityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfLinearSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfRotationalSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcModulusOfSubgradeReactionMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMoistureDiffusivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMolecularWeightMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMomentOfInertiaMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMonetaryMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcMonthInYearNumber = INTEGER;\n WHERE\n\t ValidRange : {1 <= SELF <= 12};\nEND_TYPE;\n\nTYPE IfcNonNegativeLengthMeasure = IfcLengthMeasure;\n WHERE\n\t NotNegative : SELF >= 0.;\nEND_TYPE;\n\nTYPE IfcNormalisedRatioMeasure = IfcRatioMeasure;\n WHERE\n\t WR1 : {0.0 <= SELF <= 1.0};\nEND_TYPE;\n\nTYPE IfcNumericMeasure = NUMBER;\nEND_TYPE;\n\nTYPE IfcPHMeasure = REAL;\n WHERE\n\t WR21 : {0.0 <= SELF <= 14.0};\nEND_TYPE;\n\nTYPE IfcParameterValue = REAL;\nEND_TYPE;\n\nTYPE IfcPlanarForceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPlaneAngleMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPositiveInteger = IfcInteger;\n WHERE\n\t WR1 : SELF > 0;\nEND_TYPE;\n\nTYPE IfcPositiveLengthMeasure = IfcLengthMeasure;\n WHERE\n\t WR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcPositivePlaneAngleMeasure = IfcPlaneAngleMeasure;\n WHERE\n\t WR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcPositiveRatioMeasure = IfcRatioMeasure;\n WHERE\n\t WR1 : SELF > 0.;\nEND_TYPE;\n\nTYPE IfcPowerMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPresentableText = STRING;\nEND_TYPE;\n\nTYPE IfcPressureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcPropertySetDefinitionSet = SET [1:?] OF IfcPropertySetDefinition;\nEND_TYPE;\n\nTYPE IfcRadioActivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRatioMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcReal = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalFrequencyMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalMassMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcRotationalStiffnessMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSectionModulusMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSectionalAreaIntegralMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcShearModulusMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSolidAngleMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPowerLevelMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPowerMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPressureLevelMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSoundPressureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSpecificHeatCapacityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcSpecularExponent = REAL;\nEND_TYPE;\n\nTYPE IfcSpecularRoughness = REAL;\n WHERE\n\t WR1 : {0.0 <= SELF <= 1.0};\nEND_TYPE;\n\nTYPE IfcStrippedOptional = BOOLEAN;\nEND_TYPE;\n\nTYPE IfcTemperatureGradientMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcTemperatureRateOfChangeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcText = STRING;\nEND_TYPE;\n\nTYPE IfcTextAlignment = STRING;\n WHERE\n\t WR1 : SELF IN ['left', 'right', 'center', 'justify'];\nEND_TYPE;\n\nTYPE IfcTextDecoration = STRING;\n WHERE\n\t WR1 : SELF IN ['none', 'underline', 'overline', 'line-through', 'blink'];\nEND_TYPE;\n\nTYPE IfcTextFontName = STRING;\nEND_TYPE;\n\nTYPE IfcTextTransformation = STRING;\n WHERE\n\t WR1 : SELF IN ['capitalize', 'uppercase', 'lowercase', 'none'];\nEND_TYPE;\n\nTYPE IfcThermalAdmittanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalConductivityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalExpansionCoefficientMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalResistanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermalTransmittanceMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcThermodynamicTemperatureMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcTime = STRING;\nEND_TYPE;\n\nTYPE IfcTimeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcTimeStamp = INTEGER;\nEND_TYPE;\n\nTYPE IfcTorqueMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcURIReference = STRING;\nEND_TYPE;\n\nTYPE IfcVaporPermeabilityMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcVolumeMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcVolumetricFlowRateMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcWarpingConstantMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcWarpingMomentMeasure = REAL;\nEND_TYPE;\n\nTYPE IfcWellKnownTextLiteral = STRING;\nEND_TYPE;\n\nTYPE IfcActionRequestTypeEnum = ENUMERATION OF\n\t(EMAIL\n\t,FAX\n\t,PHONE\n\t,POST\n\t,VERBAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActionSourceTypeEnum = ENUMERATION OF\n\t(BRAKES\n\t,BUOYANCY\n\t,COMPLETION_G1\n\t,CREEP\n\t,CURRENT\n\t,DEAD_LOAD_G\n\t,EARTHQUAKE_E\n\t,ERECTION\n\t,FIRE\n\t,ICE\n\t,IMPACT\n\t,IMPULSE\n\t,LACK_OF_FIT\n\t,LIVE_LOAD_Q\n\t,PRESTRESSING_P\n\t,PROPPING\n\t,RAIN\n\t,SETTLEMENT_U\n\t,SHRINKAGE\n\t,SNOW_S\n\t,SYSTEM_IMPERFECTION\n\t,TEMPERATURE_T\n\t,TRANSPORT\n\t,WAVE\n\t,WIND_W\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActionTypeEnum = ENUMERATION OF\n\t(EXTRAORDINARY_A\n\t,PERMANENT_G\n\t,VARIABLE_Q\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActuatorTypeEnum = ENUMERATION OF\n\t(ELECTRICACTUATOR\n\t,HANDOPERATEDACTUATOR\n\t,HYDRAULICACTUATOR\n\t,PNEUMATICACTUATOR\n\t,THERMOSTATICACTUATOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAddressTypeEnum = ENUMERATION OF\n\t(DISTRIBUTIONPOINT\n\t,HOME\n\t,OFFICE\n\t,SITE\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcAirTerminalBoxTypeEnum = ENUMERATION OF\n\t(CONSTANTFLOW\n\t,VARIABLEFLOWPRESSUREDEPENDANT\n\t,VARIABLEFLOWPRESSUREINDEPENDANT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAirTerminalTypeEnum = ENUMERATION OF\n\t(DIFFUSER\n\t,GRILLE\n\t,LOUVRE\n\t,REGISTER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAirToAirHeatRecoveryTypeEnum = ENUMERATION OF\n\t(FIXEDPLATECOUNTERFLOWEXCHANGER\n\t,FIXEDPLATECROSSFLOWEXCHANGER\n\t,FIXEDPLATEPARALLELFLOWEXCHANGER\n\t,HEATPIPE\n\t,ROTARYWHEEL\n\t,RUNAROUNDCOILLOOP\n\t,THERMOSIPHONCOILTYPEHEATEXCHANGERS\n\t,THERMOSIPHONSEALEDTUBEHEATEXCHANGERS\n\t,TWINTOWERENTHALPYRECOVERYLOOPS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAlarmTypeEnum = ENUMERATION OF\n\t(BELL\n\t,BREAKGLASSBUTTON\n\t,LIGHT\n\t,MANUALPULLBOX\n\t,RAILWAYCROCODILE\n\t,RAILWAYDETONATOR\n\t,SIREN\n\t,WHISTLE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAlignmentCantSegmentTypeEnum = ENUMERATION OF\n\t(BLOSSCURVE\n\t,CONSTANTCANT\n\t,COSINECURVE\n\t,HELMERTCURVE\n\t,LINEARTRANSITION\n\t,SINECURVE\n\t,VIENNESEBEND);\nEND_TYPE;\n\nTYPE IfcAlignmentHorizontalSegmentTypeEnum = ENUMERATION OF\n\t(BLOSSCURVE\n\t,CIRCULARARC\n\t,CLOTHOID\n\t,COSINECURVE\n\t,CUBIC\n\t,HELMERTCURVE\n\t,LINE\n\t,SINECURVE\n\t,VIENNESEBEND);\nEND_TYPE;\n\nTYPE IfcAlignmentTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAlignmentVerticalSegmentTypeEnum = ENUMERATION OF\n\t(CIRCULARARC\n\t,CLOTHOID\n\t,CONSTANTGRADIENT\n\t,PARABOLICARC);\nEND_TYPE;\n\nTYPE IfcAnalysisModelTypeEnum = ENUMERATION OF\n\t(IN_PLANE_LOADING_2D\n\t,LOADING_3D\n\t,OUT_PLANE_LOADING_2D\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAnalysisTheoryTypeEnum = ENUMERATION OF\n\t(FIRST_ORDER_THEORY\n\t,FULL_NONLINEAR_THEORY\n\t,SECOND_ORDER_THEORY\n\t,THIRD_ORDER_THEORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAnnotationTypeEnum = ENUMERATION OF\n\t(CONTOURLINE\n\t,DIMENSION\n\t,ISOBAR\n\t,ISOLUX\n\t,ISOTHERM\n\t,LEADER\n\t,SURVEY\n\t,SYMBOL\n\t,TEXT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcArithmeticOperatorEnum = ENUMERATION OF\n\t(ADD\n\t,DIVIDE\n\t,MODULO\n\t,MULTIPLY\n\t,SUBTRACT);\nEND_TYPE;\n\nTYPE IfcAssemblyPlaceEnum = ENUMERATION OF\n\t(FACTORY\n\t,SITE\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcAudioVisualApplianceTypeEnum = ENUMERATION OF\n\t(AMPLIFIER\n\t,CAMERA\n\t,COMMUNICATIONTERMINAL\n\t,DISPLAY\n\t,MICROPHONE\n\t,PLAYER\n\t,PROJECTOR\n\t,RECEIVER\n\t,RECORDINGEQUIPMENT\n\t,SPEAKER\n\t,SWITCHER\n\t,TELEPHONE\n\t,TUNER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBSplineCurveForm = ENUMERATION OF\n\t(CIRCULAR_ARC\n\t,ELLIPTIC_ARC\n\t,HYPERBOLIC_ARC\n\t,PARABOLIC_ARC\n\t,POLYLINE_FORM\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcBSplineSurfaceForm = ENUMERATION OF\n\t(CONICAL_SURF\n\t,CYLINDRICAL_SURF\n\t,GENERALISED_CONE\n\t,PLANE_SURF\n\t,QUADRIC_SURF\n\t,RULED_SURF\n\t,SPHERICAL_SURF\n\t,SURF_OF_LINEAR_EXTRUSION\n\t,SURF_OF_REVOLUTION\n\t,TOROIDAL_SURF\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcBeamTypeEnum = ENUMERATION OF\n\t(BEAM\n\t,CORNICE\n\t,DIAPHRAGM\n\t,EDGEBEAM\n\t,GIRDER_SEGMENT\n\t,HATSTONE\n\t,HOLLOWCORE\n\t,JOIST\n\t,LINTEL\n\t,PIERCAP\n\t,SPANDREL\n\t,T_BEAM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBearingTypeEnum = ENUMERATION OF\n\t(CYLINDRICAL\n\t,DISK\n\t,ELASTOMERIC\n\t,GUIDE\n\t,POT\n\t,ROCKER\n\t,ROLLER\n\t,SPHERICAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBenchmarkEnum = ENUMERATION OF\n\t(EQUALTO\n\t,GREATERTHAN\n\t,GREATERTHANOREQUALTO\n\t,INCLUDEDIN\n\t,INCLUDES\n\t,LESSTHAN\n\t,LESSTHANOREQUALTO\n\t,NOTEQUALTO\n\t,NOTINCLUDEDIN\n\t,NOTINCLUDES);\nEND_TYPE;\n\nTYPE IfcBoilerTypeEnum = ENUMERATION OF\n\t(STEAM\n\t,WATER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBooleanOperator = ENUMERATION OF\n\t(DIFFERENCE\n\t,INTERSECTION\n\t,UNION);\nEND_TYPE;\n\nTYPE IfcBridgePartTypeEnum = ENUMERATION OF\n\t(ABUTMENT\n\t,DECK\n\t,DECK_SEGMENT\n\t,FOUNDATION\n\t,PIER\n\t,PIER_SEGMENT\n\t,PYLON\n\t,SUBSTRUCTURE\n\t,SUPERSTRUCTURE\n\t,SURFACESTRUCTURE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBridgeTypeEnum = ENUMERATION OF\n\t(ARCHED\n\t,CABLE_STAYED\n\t,CANTILEVER\n\t,CULVERT\n\t,FRAMEWORK\n\t,GIRDER\n\t,SUSPENSION\n\t,TRUSS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBuildingElementPartTypeEnum = ENUMERATION OF\n\t(APRON\n\t,ARMOURUNIT\n\t,INSULATION\n\t,PRECASTPANEL\n\t,SAFETYCAGE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBuildingElementProxyTypeEnum = ENUMERATION OF\n\t(COMPLEX\n\t,ELEMENT\n\t,PARTIAL\n\t,PROVISIONFORSPACE\n\t,PROVISIONFORVOID\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBuildingSystemTypeEnum = ENUMERATION OF\n\t(FENESTRATION\n\t,FOUNDATION\n\t,LOADBEARING\n\t,OUTERSHELL\n\t,SHADING\n\t,TRANSPORT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBuiltSystemTypeEnum = ENUMERATION OF\n\t(EROSIONPREVENTION\n\t,FENESTRATION\n\t,FOUNDATION\n\t,LOADBEARING\n\t,MOORING\n\t,OUTERSHELL\n\t,PRESTRESSING\n\t,RAILWAYLINE\n\t,RAILWAYTRACK\n\t,REINFORCING\n\t,SHADING\n\t,TRACKCIRCUIT\n\t,TRANSPORT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcBurnerTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableCarrierFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CONNECTOR\n\t,CROSS\n\t,JUNCTION\n\t,REDUCER\n\t,TEE\n\t,TRANSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableCarrierSegmentTypeEnum = ENUMERATION OF\n\t(CABLEBRACKET\n\t,CABLELADDERSEGMENT\n\t,CABLETRAYSEGMENT\n\t,CABLETRUNKINGSEGMENT\n\t,CATENARYWIRE\n\t,CONDUITSEGMENT\n\t,DROPPER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableFittingTypeEnum = ENUMERATION OF\n\t(CONNECTOR\n\t,ENTRY\n\t,EXIT\n\t,FANOUT\n\t,JUNCTION\n\t,TRANSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCableSegmentTypeEnum = ENUMERATION OF\n\t(BUSBARSEGMENT\n\t,CABLESEGMENT\n\t,CONDUCTORSEGMENT\n\t,CONTACTWIRESEGMENT\n\t,CORESEGMENT\n\t,FIBERSEGMENT\n\t,FIBERTUBE\n\t,OPTICALCABLESEGMENT\n\t,STITCHWIRE\n\t,WIREPAIRSEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCaissonFoundationTypeEnum = ENUMERATION OF\n\t(CAISSON\n\t,WELL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcChangeActionEnum = ENUMERATION OF\n\t(ADDED\n\t,DELETED\n\t,MODIFIED\n\t,NOCHANGE\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcChillerTypeEnum = ENUMERATION OF\n\t(AIRCOOLED\n\t,HEATRECOVERY\n\t,WATERCOOLED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcChimneyTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoilTypeEnum = ENUMERATION OF\n\t(DXCOOLINGCOIL\n\t,ELECTRICHEATINGCOIL\n\t,GASHEATINGCOIL\n\t,HYDRONICCOIL\n\t,STEAMHEATINGCOIL\n\t,WATERCOOLINGCOIL\n\t,WATERHEATINGCOIL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcColumnTypeEnum = ENUMERATION OF\n\t(COLUMN\n\t,PIERSTEM\n\t,PIERSTEM_SEGMENT\n\t,PILASTER\n\t,STANDCOLUMN\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCommunicationsApplianceTypeEnum = ENUMERATION OF\n\t(ANTENNA\n\t,AUTOMATON\n\t,COMPUTER\n\t,FAX\n\t,GATEWAY\n\t,INTELLIGENTPERIPHERAL\n\t,IPNETWORKEQUIPMENT\n\t,LINESIDEELECTRONICUNIT\n\t,MODEM\n\t,NETWORKAPPLIANCE\n\t,NETWORKBRIDGE\n\t,NETWORKHUB\n\t,OPTICALLINETERMINAL\n\t,OPTICALNETWORKUNIT\n\t,PRINTER\n\t,RADIOBLOCKCENTER\n\t,REPEATER\n\t,ROUTER\n\t,SCANNER\n\t,TELECOMMAND\n\t,TELEPHONYEXCHANGE\n\t,TRANSITIONCOMPONENT\n\t,TRANSPONDER\n\t,TRANSPORTEQUIPMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcComplexPropertyTemplateTypeEnum = ENUMERATION OF\n\t(P_COMPLEX\n\t,Q_COMPLEX);\nEND_TYPE;\n\nTYPE IfcCompressorTypeEnum = ENUMERATION OF\n\t(BOOSTER\n\t,DYNAMIC\n\t,HERMETIC\n\t,OPENTYPE\n\t,RECIPROCATING\n\t,ROLLINGPISTON\n\t,ROTARY\n\t,ROTARYVANE\n\t,SCROLL\n\t,SEMIHERMETIC\n\t,SINGLESCREW\n\t,SINGLESTAGE\n\t,TROCHOIDAL\n\t,TWINSCREW\n\t,WELDEDSHELLHERMETIC\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCondenserTypeEnum = ENUMERATION OF\n\t(AIRCOOLED\n\t,EVAPORATIVECOOLED\n\t,WATERCOOLED\n\t,WATERCOOLEDBRAZEDPLATE\n\t,WATERCOOLEDSHELLCOIL\n\t,WATERCOOLEDSHELLTUBE\n\t,WATERCOOLEDTUBEINTUBE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConnectionTypeEnum = ENUMERATION OF\n\t(ATEND\n\t,ATPATH\n\t,ATSTART\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConstraintEnum = ENUMERATION OF\n\t(ADVISORY\n\t,HARD\n\t,SOFT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConstructionEquipmentResourceTypeEnum = ENUMERATION OF\n\t(DEMOLISHING\n\t,EARTHMOVING\n\t,ERECTING\n\t,HEATING\n\t,LIGHTING\n\t,PAVING\n\t,PUMPING\n\t,TRANSPORTING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConstructionMaterialResourceTypeEnum = ENUMERATION OF\n\t(AGGREGATES\n\t,CONCRETE\n\t,DRYWALL\n\t,FUEL\n\t,GYPSUM\n\t,MASONRY\n\t,METAL\n\t,PLASTIC\n\t,WOOD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConstructionProductResourceTypeEnum = ENUMERATION OF\n\t(ASSEMBLY\n\t,FORMWORK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcControllerTypeEnum = ENUMERATION OF\n\t(FLOATING\n\t,MULTIPOSITION\n\t,PROGRAMMABLE\n\t,PROPORTIONAL\n\t,TWOPOSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcConveyorSegmentTypeEnum = ENUMERATION OF\n\t(BELTCONVEYOR\n\t,BUCKETCONVEYOR\n\t,CHUTECONVEYOR\n\t,SCREWCONVEYOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCooledBeamTypeEnum = ENUMERATION OF\n\t(ACTIVE\n\t,PASSIVE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoolingTowerTypeEnum = ENUMERATION OF\n\t(MECHANICALFORCEDDRAFT\n\t,MECHANICALINDUCEDDRAFT\n\t,NATURALDRAFT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCostItemTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCostScheduleTypeEnum = ENUMERATION OF\n\t(BUDGET\n\t,COSTPLAN\n\t,ESTIMATE\n\t,PRICEDBILLOFQUANTITIES\n\t,SCHEDULEOFRATES\n\t,TENDER\n\t,UNPRICEDBILLOFQUANTITIES\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCourseTypeEnum = ENUMERATION OF\n\t(ARMOUR\n\t,BALLASTBED\n\t,CORE\n\t,FILTER\n\t,PAVEMENT\n\t,PROTECTION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCoveringTypeEnum = ENUMERATION OF\n\t(CEILING\n\t,CLADDING\n\t,COPING\n\t,FLOORING\n\t,INSULATION\n\t,MEMBRANE\n\t,MOLDING\n\t,ROOFING\n\t,SKIRTINGBOARD\n\t,SLEEVING\n\t,TOPPING\n\t,WRAPPING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCrewResourceTypeEnum = ENUMERATION OF\n\t(OFFICE\n\t,SITE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCurtainWallTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcCurveInterpolationEnum = ENUMERATION OF\n\t(LINEAR\n\t,LOG_LINEAR\n\t,LOG_LOG\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDamperTypeEnum = ENUMERATION OF\n\t(BACKDRAFTDAMPER\n\t,BALANCINGDAMPER\n\t,BLASTDAMPER\n\t,CONTROLDAMPER\n\t,FIREDAMPER\n\t,FIRESMOKEDAMPER\n\t,FUMEHOODEXHAUST\n\t,GRAVITYDAMPER\n\t,GRAVITYRELIEFDAMPER\n\t,RELIEFDAMPER\n\t,SMOKEDAMPER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDataOriginEnum = ENUMERATION OF\n\t(MEASURED\n\t,PREDICTED\n\t,SIMULATED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDerivedUnitEnum = ENUMERATION OF\n\t(ACCELERATIONUNIT\n\t,ANGULARVELOCITYUNIT\n\t,AREADENSITYUNIT\n\t,COMPOUNDPLANEANGLEUNIT\n\t,CURVATUREUNIT\n\t,DYNAMICVISCOSITYUNIT\n\t,HEATFLUXDENSITYUNIT\n\t,HEATINGVALUEUNIT\n\t,INTEGERCOUNTRATEUNIT\n\t,IONCONCENTRATIONUNIT\n\t,ISOTHERMALMOISTURECAPACITYUNIT\n\t,KINEMATICVISCOSITYUNIT\n\t,LINEARFORCEUNIT\n\t,LINEARMOMENTUNIT\n\t,LINEARSTIFFNESSUNIT\n\t,LINEARVELOCITYUNIT\n\t,LUMINOUSINTENSITYDISTRIBUTIONUNIT\n\t,MASSDENSITYUNIT\n\t,MASSFLOWRATEUNIT\n\t,MASSPERLENGTHUNIT\n\t,MODULUSOFELASTICITYUNIT\n\t,MODULUSOFLINEARSUBGRADEREACTIONUNIT\n\t,MODULUSOFROTATIONALSUBGRADEREACTIONUNIT\n\t,MODULUSOFSUBGRADEREACTIONUNIT\n\t,MOISTUREDIFFUSIVITYUNIT\n\t,MOLECULARWEIGHTUNIT\n\t,MOMENTOFINERTIAUNIT\n\t,PHUNIT\n\t,PLANARFORCEUNIT\n\t,ROTATIONALFREQUENCYUNIT\n\t,ROTATIONALMASSUNIT\n\t,ROTATIONALSTIFFNESSUNIT\n\t,SECTIONAREAINTEGRALUNIT\n\t,SECTIONMODULUSUNIT\n\t,SHEARMODULUSUNIT\n\t,SOUNDPOWERLEVELUNIT\n\t,SOUNDPOWERUNIT\n\t,SOUNDPRESSURELEVELUNIT\n\t,SOUNDPRESSUREUNIT\n\t,SPECIFICHEATCAPACITYUNIT\n\t,TEMPERATUREGRADIENTUNIT\n\t,TEMPERATURERATEOFCHANGEUNIT\n\t,THERMALADMITTANCEUNIT\n\t,THERMALCONDUCTANCEUNIT\n\t,THERMALEXPANSIONCOEFFICIENTUNIT\n\t,THERMALRESISTANCEUNIT\n\t,THERMALTRANSMITTANCEUNIT\n\t,TORQUEUNIT\n\t,VAPORPERMEABILITYUNIT\n\t,VOLUMETRICFLOWRATEUNIT\n\t,WARPINGCONSTANTUNIT\n\t,WARPINGMOMENTUNIT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcDirectionSenseEnum = ENUMERATION OF\n\t(NEGATIVE\n\t,POSITIVE);\nEND_TYPE;\n\nTYPE IfcDiscreteAccessoryTypeEnum = ENUMERATION OF\n\t(ANCHORPLATE\n\t,BIRDPROTECTION\n\t,BRACKET\n\t,CABLEARRANGER\n\t,ELASTIC_CUSHION\n\t,EXPANSION_JOINT_DEVICE\n\t,FILLER\n\t,FLASHING\n\t,INSULATOR\n\t,LOCK\n\t,PANEL_STRENGTHENING\n\t,POINTMACHINEMOUNTINGDEVICE\n\t,POINT_MACHINE_LOCKING_DEVICE\n\t,RAILBRACE\n\t,RAILPAD\n\t,RAIL_LUBRICATION\n\t,RAIL_MECHANICAL_EQUIPMENT\n\t,SHOE\n\t,SLIDINGCHAIR\n\t,SOUNDABSORPTION\n\t,TENSIONINGEQUIPMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDistributionBoardTypeEnum = ENUMERATION OF\n\t(CONSUMERUNIT\n\t,DISPATCHINGBOARD\n\t,DISTRIBUTIONBOARD\n\t,DISTRIBUTIONFRAME\n\t,MOTORCONTROLCENTRE\n\t,SWITCHBOARD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDistributionChamberElementTypeEnum = ENUMERATION OF\n\t(FORMEDDUCT\n\t,INSPECTIONCHAMBER\n\t,INSPECTIONPIT\n\t,MANHOLE\n\t,METERCHAMBER\n\t,SUMP\n\t,TRENCH\n\t,VALVECHAMBER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDistributionPortTypeEnum = ENUMERATION OF\n\t(CABLE\n\t,CABLECARRIER\n\t,DUCT\n\t,PIPE\n\t,WIRELESS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDistributionSystemEnum = ENUMERATION OF\n\t(AIRCONDITIONING\n\t,AUDIOVISUAL\n\t,CATENARY_SYSTEM\n\t,CHEMICAL\n\t,CHILLEDWATER\n\t,COMMUNICATION\n\t,COMPRESSEDAIR\n\t,CONDENSERWATER\n\t,CONTROL\n\t,CONVEYING\n\t,DATA\n\t,DISPOSAL\n\t,DOMESTICCOLDWATER\n\t,DOMESTICHOTWATER\n\t,DRAINAGE\n\t,EARTHING\n\t,ELECTRICAL\n\t,ELECTROACOUSTIC\n\t,EXHAUST\n\t,FIREPROTECTION\n\t,FIXEDTRANSMISSIONNETWORK\n\t,FUEL\n\t,GAS\n\t,HAZARDOUS\n\t,HEATING\n\t,LIGHTING\n\t,LIGHTNINGPROTECTION\n\t,MOBILENETWORK\n\t,MONITORINGSYSTEM\n\t,MUNICIPALSOLIDWASTE\n\t,OIL\n\t,OPERATIONAL\n\t,OPERATIONALTELEPHONYSYSTEM\n\t,OVERHEAD_CONTACTLINE_SYSTEM\n\t,POWERGENERATION\n\t,RAINWATER\n\t,REFRIGERATION\n\t,RETURN_CIRCUIT\n\t,SECURITY\n\t,SEWAGE\n\t,SIGNAL\n\t,STORMWATER\n\t,TELEPHONE\n\t,TV\n\t,VACUUM\n\t,VENT\n\t,VENTILATION\n\t,WASTEWATER\n\t,WATERSUPPLY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDocumentConfidentialityEnum = ENUMERATION OF\n\t(CONFIDENTIAL\n\t,PERSONAL\n\t,PUBLIC\n\t,RESTRICTED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDocumentStatusEnum = ENUMERATION OF\n\t(DRAFT\n\t,FINAL\n\t,FINALDRAFT\n\t,REVISION\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorPanelOperationEnum = ENUMERATION OF\n\t(DOUBLE_ACTING\n\t,FIXEDPANEL\n\t,FOLDING\n\t,REVOLVING\n\t,ROLLINGUP\n\t,SLIDING\n\t,SWINGING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorPanelPositionEnum = ENUMERATION OF\n\t(LEFT\n\t,MIDDLE\n\t,RIGHT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorTypeEnum = ENUMERATION OF\n\t(BOOM_BARRIER\n\t,DOOR\n\t,GATE\n\t,TRAPDOOR\n\t,TURNSTILE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDoorTypeOperationEnum = ENUMERATION OF\n\t(DOUBLE_DOOR_DOUBLE_SWING\n\t,DOUBLE_DOOR_FOLDING\n\t,DOUBLE_DOOR_LIFTING_VERTICAL\n\t,DOUBLE_DOOR_SINGLE_SWING\n\t,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT\n\t,DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT\n\t,DOUBLE_DOOR_SLIDING\n\t,DOUBLE_SWING_LEFT\n\t,DOUBLE_SWING_RIGHT\n\t,FOLDING_TO_LEFT\n\t,FOLDING_TO_RIGHT\n\t,LIFTING_HORIZONTAL\n\t,LIFTING_VERTICAL_LEFT\n\t,LIFTING_VERTICAL_RIGHT\n\t,REVOLVING\n\t,REVOLVING_VERTICAL\n\t,ROLLINGUP\n\t,SINGLE_SWING_LEFT\n\t,SINGLE_SWING_RIGHT\n\t,SLIDING_TO_LEFT\n\t,SLIDING_TO_RIGHT\n\t,SWING_FIXED_LEFT\n\t,SWING_FIXED_RIGHT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CONNECTOR\n\t,ENTRY\n\t,EXIT\n\t,JUNCTION\n\t,OBSTRUCTION\n\t,TRANSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctSegmentTypeEnum = ENUMERATION OF\n\t(FLEXIBLESEGMENT\n\t,RIGIDSEGMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcDuctSilencerTypeEnum = ENUMERATION OF\n\t(FLATOVAL\n\t,RECTANGULAR\n\t,ROUND\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEarthworksCutTypeEnum = ENUMERATION OF\n\t(BASE_EXCAVATION\n\t,CUT\n\t,DREDGING\n\t,EXCAVATION\n\t,OVEREXCAVATION\n\t,PAVEMENTMILLING\n\t,STEPEXCAVATION\n\t,TOPSOILREMOVAL\n\t,TRENCH\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEarthworksFillTypeEnum = ENUMERATION OF\n\t(BACKFILL\n\t,COUNTERWEIGHT\n\t,EMBANKMENT\n\t,SLOPEFILL\n\t,SUBGRADE\n\t,SUBGRADEBED\n\t,TRANSITIONSECTION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricApplianceTypeEnum = ENUMERATION OF\n\t(DISHWASHER\n\t,ELECTRICCOOKER\n\t,FREESTANDINGELECTRICHEATER\n\t,FREESTANDINGFAN\n\t,FREESTANDINGWATERCOOLER\n\t,FREESTANDINGWATERHEATER\n\t,FREEZER\n\t,FRIDGE_FREEZER\n\t,HANDDRYER\n\t,KITCHENMACHINE\n\t,MICROWAVE\n\t,PHOTOCOPIER\n\t,REFRIGERATOR\n\t,TUMBLEDRYER\n\t,VENDINGMACHINE\n\t,WASHINGMACHINE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricDistributionBoardTypeEnum = ENUMERATION OF\n\t(CONSUMERUNIT\n\t,DISTRIBUTIONBOARD\n\t,MOTORCONTROLCENTRE\n\t,SWITCHBOARD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricFlowStorageDeviceTypeEnum = ENUMERATION OF\n\t(BATTERY\n\t,CAPACITOR\n\t,CAPACITORBANK\n\t,COMPENSATOR\n\t,HARMONICFILTER\n\t,INDUCTOR\n\t,INDUCTORBANK\n\t,RECHARGER\n\t,UPS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricFlowTreatmentDeviceTypeEnum = ENUMERATION OF\n\t(ELECTRONICFILTER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricGeneratorTypeEnum = ENUMERATION OF\n\t(CHP\n\t,ENGINEGENERATOR\n\t,STANDALONE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricMotorTypeEnum = ENUMERATION OF\n\t(DC\n\t,INDUCTION\n\t,POLYPHASE\n\t,RELUCTANCESYNCHRONOUS\n\t,SYNCHRONOUS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElectricTimeControlTypeEnum = ENUMERATION OF\n\t(RELAY\n\t,TIMECLOCK\n\t,TIMEDELAY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElementAssemblyTypeEnum = ENUMERATION OF\n\t(ABUTMENT\n\t,ACCESSORY_ASSEMBLY\n\t,ARCH\n\t,BEAM_GRID\n\t,BRACED_FRAME\n\t,CROSS_BRACING\n\t,DECK\n\t,DILATATIONPANEL\n\t,ENTRANCEWORKS\n\t,GIRDER\n\t,GRID\n\t,MAST\n\t,PIER\n\t,PYLON\n\t,RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY\n\t,REINFORCEMENT_UNIT\n\t,RIGID_FRAME\n\t,SHELTER\n\t,SIGNALASSEMBLY\n\t,SLAB_FIELD\n\t,SUMPBUSTER\n\t,SUPPORTINGASSEMBLY\n\t,SUSPENSIONASSEMBLY\n\t,TRACKPANEL\n\t,TRACTION_SWITCHING_ASSEMBLY\n\t,TRAFFIC_CALMING_DEVICE\n\t,TRUSS\n\t,TURNOUTPANEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcElementCompositionEnum = ENUMERATION OF\n\t(COMPLEX\n\t,ELEMENT\n\t,PARTIAL);\nEND_TYPE;\n\nTYPE IfcEngineTypeEnum = ENUMERATION OF\n\t(EXTERNALCOMBUSTION\n\t,INTERNALCOMBUSTION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEvaporativeCoolerTypeEnum = ENUMERATION OF\n\t(DIRECTEVAPORATIVEAIRWASHER\n\t,DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER\n\t,DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER\n\t,DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER\n\t,DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER\n\t,INDIRECTDIRECTCOMBINATION\n\t,INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER\n\t,INDIRECTEVAPORATIVEPACKAGEAIRCOOLER\n\t,INDIRECTEVAPORATIVEWETCOIL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEvaporatorTypeEnum = ENUMERATION OF\n\t(DIRECTEXPANSION\n\t,DIRECTEXPANSIONBRAZEDPLATE\n\t,DIRECTEXPANSIONSHELLANDTUBE\n\t,DIRECTEXPANSIONTUBEINTUBE\n\t,FLOODEDSHELLANDTUBE\n\t,SHELLANDCOIL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEventTriggerTypeEnum = ENUMERATION OF\n\t(EVENTCOMPLEX\n\t,EVENTMESSAGE\n\t,EVENTRULE\n\t,EVENTTIME\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcEventTypeEnum = ENUMERATION OF\n\t(ENDEVENT\n\t,INTERMEDIATEEVENT\n\t,STARTEVENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcExternalSpatialElementTypeEnum = ENUMERATION OF\n\t(EXTERNAL\n\t,EXTERNAL_EARTH\n\t,EXTERNAL_FIRE\n\t,EXTERNAL_WATER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFacilityPartCommonTypeEnum = ENUMERATION OF\n\t(ABOVEGROUND\n\t,BELOWGROUND\n\t,JUNCTION\n\t,LEVELCROSSING\n\t,SEGMENT\n\t,SUBSTRUCTURE\n\t,SUPERSTRUCTURE\n\t,TERMINAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFacilityUsageEnum = ENUMERATION OF\n\t(LATERAL\n\t,LONGITUDINAL\n\t,REGION\n\t,VERTICAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFanTypeEnum = ENUMERATION OF\n\t(CENTRIFUGALAIRFOIL\n\t,CENTRIFUGALBACKWARDINCLINEDCURVED\n\t,CENTRIFUGALFORWARDCURVED\n\t,CENTRIFUGALRADIAL\n\t,PROPELLORAXIAL\n\t,TUBEAXIAL\n\t,VANEAXIAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFastenerTypeEnum = ENUMERATION OF\n\t(GLUE\n\t,MORTAR\n\t,WELD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFilterTypeEnum = ENUMERATION OF\n\t(AIRPARTICLEFILTER\n\t,COMPRESSEDAIRFILTER\n\t,ODORFILTER\n\t,OILFILTER\n\t,STRAINER\n\t,WATERFILTER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFireSuppressionTerminalTypeEnum = ENUMERATION OF\n\t(BREECHINGINLET\n\t,FIREHYDRANT\n\t,FIREMONITOR\n\t,HOSEREEL\n\t,SPRINKLER\n\t,SPRINKLERDEFLECTOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowDirectionEnum = ENUMERATION OF\n\t(SINK\n\t,SOURCE\n\t,SOURCEANDSINK\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowInstrumentTypeEnum = ENUMERATION OF\n\t(AMMETER\n\t,COMBINED\n\t,FREQUENCYMETER\n\t,PHASEANGLEMETER\n\t,POWERFACTORMETER\n\t,PRESSUREGAUGE\n\t,THERMOMETER\n\t,VOLTMETER\n\t,VOLTMETER_PEAK\n\t,VOLTMETER_RMS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFlowMeterTypeEnum = ENUMERATION OF\n\t(ENERGYMETER\n\t,GASMETER\n\t,OILMETER\n\t,WATERMETER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFootingTypeEnum = ENUMERATION OF\n\t(CAISSON_FOUNDATION\n\t,FOOTING_BEAM\n\t,PAD_FOOTING\n\t,PILE_CAP\n\t,STRIP_FOOTING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcFurnitureTypeEnum = ENUMERATION OF\n\t(BED\n\t,CHAIR\n\t,DESK\n\t,FILECABINET\n\t,SHELF\n\t,SOFA\n\t,TABLE\n\t,TECHNICALCABINET\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGeographicElementTypeEnum = ENUMERATION OF\n\t(SOIL_BORING_POINT\n\t,TERRAIN\n\t,VEGETATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGeometricProjectionEnum = ENUMERATION OF\n\t(ELEVATION_VIEW\n\t,GRAPH_VIEW\n\t,MODEL_VIEW\n\t,PLAN_VIEW\n\t,REFLECTED_PLAN_VIEW\n\t,SECTION_VIEW\n\t,SKETCH_VIEW\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGeotechnicalStratumTypeEnum = ENUMERATION OF\n\t(SOLID\n\t,VOID\n\t,WATER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcGlobalOrLocalEnum = ENUMERATION OF\n\t(GLOBAL_COORDS\n\t,LOCAL_COORDS);\nEND_TYPE;\n\nTYPE IfcGridTypeEnum = ENUMERATION OF\n\t(IRREGULAR\n\t,RADIAL\n\t,RECTANGULAR\n\t,TRIANGULAR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcHeatExchangerTypeEnum = ENUMERATION OF\n\t(PLATE\n\t,SHELLANDTUBE\n\t,TURNOUTHEATING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcHumidifierTypeEnum = ENUMERATION OF\n\t(ADIABATICAIRWASHER\n\t,ADIABATICATOMIZING\n\t,ADIABATICCOMPRESSEDAIRNOZZLE\n\t,ADIABATICPAN\n\t,ADIABATICRIGIDMEDIA\n\t,ADIABATICULTRASONIC\n\t,ADIABATICWETTEDELEMENT\n\t,ASSISTEDBUTANE\n\t,ASSISTEDELECTRIC\n\t,ASSISTEDNATURALGAS\n\t,ASSISTEDPROPANE\n\t,ASSISTEDSTEAM\n\t,STEAMINJECTION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcImpactProtectionDeviceTypeEnum = ENUMERATION OF\n\t(BUMPER\n\t,CRASHCUSHION\n\t,DAMPINGSYSTEM\n\t,FENDER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcInterceptorTypeEnum = ENUMERATION OF\n\t(CYCLONIC\n\t,GREASE\n\t,OIL\n\t,PETROL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcInternalOrExternalEnum = ENUMERATION OF\n\t(EXTERNAL\n\t,EXTERNAL_EARTH\n\t,EXTERNAL_FIRE\n\t,EXTERNAL_WATER\n\t,INTERNAL\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcInventoryTypeEnum = ENUMERATION OF\n\t(ASSETINVENTORY\n\t,FURNITUREINVENTORY\n\t,SPACEINVENTORY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcJunctionBoxTypeEnum = ENUMERATION OF\n\t(DATA\n\t,POWER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcKerbTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcKnotType = ENUMERATION OF\n\t(PIECEWISE_BEZIER_KNOTS\n\t,QUASI_UNIFORM_KNOTS\n\t,UNIFORM_KNOTS\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcLaborResourceTypeEnum = ENUMERATION OF\n\t(ADMINISTRATION\n\t,CARPENTRY\n\t,CLEANING\n\t,CONCRETE\n\t,DRYWALL\n\t,ELECTRIC\n\t,FINISHING\n\t,FLOORING\n\t,GENERAL\n\t,HVAC\n\t,LANDSCAPING\n\t,MASONRY\n\t,PAINTING\n\t,PAVING\n\t,PLUMBING\n\t,ROOFING\n\t,SITEGRADING\n\t,STEELWORK\n\t,SURVEYING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLampTypeEnum = ENUMERATION OF\n\t(COMPACTFLUORESCENT\n\t,FLUORESCENT\n\t,HALOGEN\n\t,HIGHPRESSUREMERCURY\n\t,HIGHPRESSURESODIUM\n\t,LED\n\t,METALHALIDE\n\t,OLED\n\t,TUNGSTENFILAMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLayerSetDirectionEnum = ENUMERATION OF\n\t(AXIS1\n\t,AXIS2\n\t,AXIS3);\nEND_TYPE;\n\nTYPE IfcLightDistributionCurveEnum = ENUMERATION OF\n\t(TYPE_A\n\t,TYPE_B\n\t,TYPE_C\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLightEmissionSourceEnum = ENUMERATION OF\n\t(COMPACTFLUORESCENT\n\t,FLUORESCENT\n\t,HIGHPRESSUREMERCURY\n\t,HIGHPRESSURESODIUM\n\t,LIGHTEMITTINGDIODE\n\t,LOWPRESSURESODIUM\n\t,LOWVOLTAGEHALOGEN\n\t,MAINVOLTAGEHALOGEN\n\t,METALHALIDE\n\t,TUNGSTENFILAMENT\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLightFixtureTypeEnum = ENUMERATION OF\n\t(DIRECTIONSOURCE\n\t,POINTSOURCE\n\t,SECURITYLIGHTING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLiquidTerminalTypeEnum = ENUMERATION OF\n\t(HOSEREEL\n\t,LOADINGARM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLoadGroupTypeEnum = ENUMERATION OF\n\t(LOAD_CASE\n\t,LOAD_COMBINATION\n\t,LOAD_GROUP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcLogicalOperatorEnum = ENUMERATION OF\n\t(LOGICALAND\n\t,LOGICALNOTAND\n\t,LOGICALNOTOR\n\t,LOGICALOR\n\t,LOGICALXOR);\nEND_TYPE;\n\nTYPE IfcMarineFacilityTypeEnum = ENUMERATION OF\n\t(BARRIERBEACH\n\t,BREAKWATER\n\t,CANAL\n\t,DRYDOCK\n\t,FLOATINGDOCK\n\t,HYDROLIFT\n\t,JETTY\n\t,LAUNCHRECOVERY\n\t,MARINEDEFENCE\n\t,NAVIGATIONALCHANNEL\n\t,PORT\n\t,QUAY\n\t,REVETMENT\n\t,SHIPLIFT\n\t,SHIPLOCK\n\t,SHIPYARD\n\t,SLIPWAY\n\t,WATERWAY\n\t,WATERWAYSHIPLIFT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcMarinePartTypeEnum = ENUMERATION OF\n\t(ABOVEWATERLINE\n\t,ANCHORAGE\n\t,APPROACHCHANNEL\n\t,BELOWWATERLINE\n\t,BERTHINGSTRUCTURE\n\t,CHAMBER\n\t,CILL_LEVEL\n\t,COPELEVEL\n\t,CORE\n\t,CREST\n\t,GATEHEAD\n\t,GUDINGSTRUCTURE\n\t,HIGHWATERLINE\n\t,LANDFIELD\n\t,LEEWARDSIDE\n\t,LOWWATERLINE\n\t,MANUFACTURING\n\t,NAVIGATIONALAREA\n\t,PROTECTION\n\t,SHIPTRANSFER\n\t,STORAGEAREA\n\t,VEHICLESERVICING\n\t,WATERFIELD\n\t,WEATHERSIDE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcMechanicalFastenerTypeEnum = ENUMERATION OF\n\t(ANCHORBOLT\n\t,BOLT\n\t,CHAIN\n\t,COUPLER\n\t,DOWEL\n\t,NAIL\n\t,NAILPLATE\n\t,RAILFASTENING\n\t,RAILJOINT\n\t,RIVET\n\t,ROPE\n\t,SCREW\n\t,SHEARCONNECTOR\n\t,STAPLE\n\t,STUDSHEARCONNECTOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcMedicalDeviceTypeEnum = ENUMERATION OF\n\t(AIRSTATION\n\t,FEEDAIRUNIT\n\t,OXYGENGENERATOR\n\t,OXYGENPLANT\n\t,VACUUMSTATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcMemberTypeEnum = ENUMERATION OF\n\t(ARCH_SEGMENT\n\t,BRACE\n\t,CHORD\n\t,COLLAR\n\t,MEMBER\n\t,MULLION\n\t,PLATE\n\t,POST\n\t,PURLIN\n\t,RAFTER\n\t,STAY_CABLE\n\t,STIFFENING_RIB\n\t,STRINGER\n\t,STRUCTURALCABLE\n\t,STRUT\n\t,STUD\n\t,SUSPENDER\n\t,SUSPENSION_CABLE\n\t,TIEBAR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcMobileTelecommunicationsApplianceTypeEnum = ENUMERATION OF\n\t(ACCESSPOINT\n\t,BASEBANDUNIT\n\t,BASETRANSCEIVERSTATION\n\t,E_UTRAN_NODE_B\n\t,GATEWAY_GPRS_SUPPORT_NODE\n\t,MASTERUNIT\n\t,MOBILESWITCHINGCENTER\n\t,MSCSERVER\n\t,PACKETCONTROLUNIT\n\t,REMOTERADIOUNIT\n\t,REMOTEUNIT\n\t,SERVICE_GPRS_SUPPORT_NODE\n\t,SUBSCRIBERSERVER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcMooringDeviceTypeEnum = ENUMERATION OF\n\t(BOLLARD\n\t,LINETENSIONER\n\t,MAGNETICDEVICE\n\t,MOORINGHOOKS\n\t,VACUUMDEVICE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcMotorConnectionTypeEnum = ENUMERATION OF\n\t(BELTDRIVE\n\t,COUPLING\n\t,DIRECTDRIVE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcNavigationElementTypeEnum = ENUMERATION OF\n\t(BEACON\n\t,BUOY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcObjectiveEnum = ENUMERATION OF\n\t(CODECOMPLIANCE\n\t,CODEWAIVER\n\t,DESIGNINTENT\n\t,EXTERNAL\n\t,HEALTHANDSAFETY\n\t,MERGECONFLICT\n\t,MODELVIEW\n\t,PARAMETER\n\t,REQUIREMENT\n\t,SPECIFICATION\n\t,TRIGGERCONDITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcOccupantTypeEnum = ENUMERATION OF\n\t(ASSIGNEE\n\t,ASSIGNOR\n\t,LESSEE\n\t,LESSOR\n\t,LETTINGAGENT\n\t,OWNER\n\t,TENANT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcOpeningElementTypeEnum = ENUMERATION OF\n\t(OPENING\n\t,RECESS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcOutletTypeEnum = ENUMERATION OF\n\t(AUDIOVISUALOUTLET\n\t,COMMUNICATIONSOUTLET\n\t,DATAOUTLET\n\t,POWEROUTLET\n\t,TELEPHONEOUTLET\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPavementTypeEnum = ENUMERATION OF\n\t(FLEXIBLE\n\t,RIGID\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPerformanceHistoryTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPermeableCoveringOperationEnum = ENUMERATION OF\n\t(GRILL\n\t,LOUVER\n\t,SCREEN\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPermitTypeEnum = ENUMERATION OF\n\t(ACCESS\n\t,BUILDING\n\t,WORK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPhysicalOrVirtualEnum = ENUMERATION OF\n\t(PHYSICAL\n\t,VIRTUAL\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPileConstructionEnum = ENUMERATION OF\n\t(CAST_IN_PLACE\n\t,COMPOSITE\n\t,PRECAST_CONCRETE\n\t,PREFAB_STEEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPileTypeEnum = ENUMERATION OF\n\t(BORED\n\t,COHESION\n\t,DRIVEN\n\t,FRICTION\n\t,JETGROUTING\n\t,SUPPORT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPipeFittingTypeEnum = ENUMERATION OF\n\t(BEND\n\t,CONNECTOR\n\t,ENTRY\n\t,EXIT\n\t,JUNCTION\n\t,OBSTRUCTION\n\t,TRANSITION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPipeSegmentTypeEnum = ENUMERATION OF\n\t(CULVERT\n\t,FLEXIBLESEGMENT\n\t,GUTTER\n\t,RIGIDSEGMENT\n\t,SPOOL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPlateTypeEnum = ENUMERATION OF\n\t(BASE_PLATE\n\t,COVER_PLATE\n\t,CURTAIN_PANEL\n\t,FLANGE_PLATE\n\t,GUSSET_PLATE\n\t,SHEET\n\t,SPLICE_PLATE\n\t,STIFFENER_PLATE\n\t,WEB_PLATE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPreferredSurfaceCurveRepresentation = ENUMERATION OF\n\t(CURVE3D\n\t,PCURVE_S1\n\t,PCURVE_S2);\nEND_TYPE;\n\nTYPE IfcProcedureTypeEnum = ENUMERATION OF\n\t(ADVICE_CAUTION\n\t,ADVICE_NOTE\n\t,ADVICE_WARNING\n\t,CALIBRATION\n\t,DIAGNOSTIC\n\t,SHUTDOWN\n\t,STARTUP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProfileTypeEnum = ENUMERATION OF\n\t(AREA\n\t,CURVE);\nEND_TYPE;\n\nTYPE IfcProjectOrderTypeEnum = ENUMERATION OF\n\t(CHANGEORDER\n\t,MAINTENANCEWORKORDER\n\t,MOVEORDER\n\t,PURCHASEORDER\n\t,WORKORDER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProjectedOrTrueLengthEnum = ENUMERATION OF\n\t(PROJECTED_LENGTH\n\t,TRUE_LENGTH);\nEND_TYPE;\n\nTYPE IfcProjectionElementTypeEnum = ENUMERATION OF\n\t(BLISTER\n\t,DEVIATOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPropertySetTemplateTypeEnum = ENUMERATION OF\n\t(PSET_MATERIALDRIVEN\n\t,PSET_OCCURRENCEDRIVEN\n\t,PSET_PERFORMANCEDRIVEN\n\t,PSET_PROFILEDRIVEN\n\t,PSET_TYPEDRIVENONLY\n\t,PSET_TYPEDRIVENOVERRIDE\n\t,QTO_OCCURRENCEDRIVEN\n\t,QTO_TYPEDRIVENONLY\n\t,QTO_TYPEDRIVENOVERRIDE\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProtectiveDeviceTrippingUnitTypeEnum = ENUMERATION OF\n\t(ELECTROMAGNETIC\n\t,ELECTRONIC\n\t,RESIDUALCURRENT\n\t,THERMAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcProtectiveDeviceTypeEnum = ENUMERATION OF\n\t(ANTI_ARCING_DEVICE\n\t,CIRCUITBREAKER\n\t,EARTHINGSWITCH\n\t,EARTHLEAKAGECIRCUITBREAKER\n\t,FUSEDISCONNECTOR\n\t,RESIDUALCURRENTCIRCUITBREAKER\n\t,RESIDUALCURRENTSWITCH\n\t,SPARKGAP\n\t,VARISTOR\n\t,VOLTAGELIMITER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcPumpTypeEnum = ENUMERATION OF\n\t(CIRCULATOR\n\t,ENDSUCTION\n\t,SPLITCASE\n\t,SUBMERSIBLEPUMP\n\t,SUMPPUMP\n\t,VERTICALINLINE\n\t,VERTICALTURBINE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRailTypeEnum = ENUMERATION OF\n\t(BLADE\n\t,CHECKRAIL\n\t,GUARDRAIL\n\t,RACKRAIL\n\t,RAIL\n\t,STOCKRAIL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRailingTypeEnum = ENUMERATION OF\n\t(BALUSTRADE\n\t,FENCE\n\t,GUARDRAIL\n\t,HANDRAIL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRailwayPartTypeEnum = ENUMERATION OF\n\t(ABOVETRACK\n\t,DILATIONTRACK\n\t,LINESIDE\n\t,LINESIDEPART\n\t,PLAINTRACK\n\t,SUBSTRUCTURE\n\t,TRACK\n\t,TRACKPART\n\t,TURNOUTTRACK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRailwayTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRampFlightTypeEnum = ENUMERATION OF\n\t(SPIRAL\n\t,STRAIGHT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRampTypeEnum = ENUMERATION OF\n\t(HALF_TURN_RAMP\n\t,QUARTER_TURN_RAMP\n\t,SPIRAL_RAMP\n\t,STRAIGHT_RUN_RAMP\n\t,TWO_QUARTER_TURN_RAMP\n\t,TWO_STRAIGHT_RUN_RAMP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRecurrenceTypeEnum = ENUMERATION OF\n\t(BY_DAY_COUNT\n\t,BY_WEEKDAY_COUNT\n\t,DAILY\n\t,MONTHLY_BY_DAY_OF_MONTH\n\t,MONTHLY_BY_POSITION\n\t,WEEKLY\n\t,YEARLY_BY_DAY_OF_MONTH\n\t,YEARLY_BY_POSITION);\nEND_TYPE;\n\nTYPE IfcReferentTypeEnum = ENUMERATION OF\n\t(BOUNDARY\n\t,INTERSECTION\n\t,KILOPOINT\n\t,LANDMARK\n\t,MILEPOINT\n\t,POSITION\n\t,REFERENCEMARKER\n\t,STATION\n\t,SUPERELEVATIONEVENT\n\t,WIDTHEVENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReflectanceMethodEnum = ENUMERATION OF\n\t(BLINN\n\t,FLAT\n\t,GLASS\n\t,MATT\n\t,METAL\n\t,MIRROR\n\t,PHONG\n\t,PHYSICAL\n\t,PLASTIC\n\t,STRAUSS\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReinforcedSoilTypeEnum = ENUMERATION OF\n\t(DYNAMICALLYCOMPACTED\n\t,GROUTED\n\t,REPLACED\n\t,ROLLERCOMPACTED\n\t,SURCHARGEPRELOADED\n\t,VERTICALLYDRAINED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReinforcingBarRoleEnum = ENUMERATION OF\n\t(ANCHORING\n\t,EDGE\n\t,LIGATURE\n\t,MAIN\n\t,PUNCHING\n\t,RING\n\t,SHEAR\n\t,STUD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReinforcingBarSurfaceEnum = ENUMERATION OF\n\t(PLAIN\n\t,TEXTURED);\nEND_TYPE;\n\nTYPE IfcReinforcingBarTypeEnum = ENUMERATION OF\n\t(ANCHORING\n\t,EDGE\n\t,LIGATURE\n\t,MAIN\n\t,PUNCHING\n\t,RING\n\t,SHEAR\n\t,SPACEBAR\n\t,STUD\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcReinforcingMeshTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRoadPartTypeEnum = ENUMERATION OF\n\t(BICYCLECROSSING\n\t,BUS_STOP\n\t,CARRIAGEWAY\n\t,CENTRALISLAND\n\t,CENTRALRESERVE\n\t,HARDSHOULDER\n\t,INTERSECTION\n\t,LAYBY\n\t,PARKINGBAY\n\t,PASSINGBAY\n\t,PEDESTRIAN_CROSSING\n\t,RAILWAYCROSSING\n\t,REFUGEISLAND\n\t,ROADSEGMENT\n\t,ROADSIDE\n\t,ROADSIDEPART\n\t,ROADWAYPLATEAU\n\t,ROUNDABOUT\n\t,SHOULDER\n\t,SIDEWALK\n\t,SOFTSHOULDER\n\t,TOLLPLAZA\n\t,TRAFFICISLAND\n\t,TRAFFICLANE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRoadTypeEnum = ENUMERATION OF\n\t(USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcRoleEnum = ENUMERATION OF\n\t(ARCHITECT\n\t,BUILDINGOPERATOR\n\t,BUILDINGOWNER\n\t,CIVILENGINEER\n\t,CLIENT\n\t,COMMISSIONINGENGINEER\n\t,CONSTRUCTIONMANAGER\n\t,CONSULTANT\n\t,CONTRACTOR\n\t,COSTENGINEER\n\t,ELECTRICALENGINEER\n\t,ENGINEER\n\t,FACILITIESMANAGER\n\t,FIELDCONSTRUCTIONMANAGER\n\t,MANUFACTURER\n\t,MECHANICALENGINEER\n\t,OWNER\n\t,PROJECTMANAGER\n\t,RESELLER\n\t,STRUCTURALENGINEER\n\t,SUBCONTRACTOR\n\t,SUPPLIER\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcRoofTypeEnum = ENUMERATION OF\n\t(BARREL_ROOF\n\t,BUTTERFLY_ROOF\n\t,DOME_ROOF\n\t,FLAT_ROOF\n\t,FREEFORM\n\t,GABLE_ROOF\n\t,GAMBREL_ROOF\n\t,HIPPED_GABLE_ROOF\n\t,HIP_ROOF\n\t,MANSARD_ROOF\n\t,PAVILION_ROOF\n\t,RAINBOW_ROOF\n\t,SHED_ROOF\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSIPrefix = ENUMERATION OF\n\t(ATTO\n\t,CENTI\n\t,DECA\n\t,DECI\n\t,EXA\n\t,FEMTO\n\t,GIGA\n\t,HECTO\n\t,KILO\n\t,MEGA\n\t,MICRO\n\t,MILLI\n\t,NANO\n\t,PETA\n\t,PICO\n\t,TERA);\nEND_TYPE;\n\nTYPE IfcSIUnitName = ENUMERATION OF\n\t(AMPERE\n\t,BECQUEREL\n\t,CANDELA\n\t,COULOMB\n\t,CUBIC_METRE\n\t,DEGREE_CELSIUS\n\t,FARAD\n\t,GRAM\n\t,GRAY\n\t,HENRY\n\t,HERTZ\n\t,JOULE\n\t,KELVIN\n\t,LUMEN\n\t,LUX\n\t,METRE\n\t,MOLE\n\t,NEWTON\n\t,OHM\n\t,PASCAL\n\t,RADIAN\n\t,SECOND\n\t,SIEMENS\n\t,SIEVERT\n\t,SQUARE_METRE\n\t,STERADIAN\n\t,TESLA\n\t,VOLT\n\t,WATT\n\t,WEBER);\nEND_TYPE;\n\nTYPE IfcSanitaryTerminalTypeEnum = ENUMERATION OF\n\t(BATH\n\t,BIDET\n\t,CISTERN\n\t,SANITARYFOUNTAIN\n\t,SHOWER\n\t,SINK\n\t,TOILETPAN\n\t,URINAL\n\t,WASHHANDBASIN\n\t,WCSEAT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSectionTypeEnum = ENUMERATION OF\n\t(TAPERED\n\t,UNIFORM);\nEND_TYPE;\n\nTYPE IfcSensorTypeEnum = ENUMERATION OF\n\t(CO2SENSOR\n\t,CONDUCTANCESENSOR\n\t,CONTACTSENSOR\n\t,COSENSOR\n\t,EARTHQUAKESENSOR\n\t,FIRESENSOR\n\t,FLOWSENSOR\n\t,FOREIGNOBJECTDETECTIONSENSOR\n\t,FROSTSENSOR\n\t,GASSENSOR\n\t,HEATSENSOR\n\t,HUMIDITYSENSOR\n\t,IDENTIFIERSENSOR\n\t,IONCONCENTRATIONSENSOR\n\t,LEVELSENSOR\n\t,LIGHTSENSOR\n\t,MOISTURESENSOR\n\t,MOVEMENTSENSOR\n\t,OBSTACLESENSOR\n\t,PHSENSOR\n\t,PRESSURESENSOR\n\t,RADIATIONSENSOR\n\t,RADIOACTIVITYSENSOR\n\t,RAINSENSOR\n\t,SMOKESENSOR\n\t,SNOWDEPTHSENSOR\n\t,SOUNDSENSOR\n\t,TEMPERATURESENSOR\n\t,TRAINSENSOR\n\t,TURNOUTCLOSURESENSOR\n\t,WHEELSENSOR\n\t,WINDSENSOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSequenceEnum = ENUMERATION OF\n\t(FINISH_FINISH\n\t,FINISH_START\n\t,START_FINISH\n\t,START_START\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcShadingDeviceTypeEnum = ENUMERATION OF\n\t(AWNING\n\t,JALOUSIE\n\t,SHUTTER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSignTypeEnum = ENUMERATION OF\n\t(MARKER\n\t,MIRROR\n\t,PICTORAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSignalTypeEnum = ENUMERATION OF\n\t(AUDIO\n\t,MIXED\n\t,VISUAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSimplePropertyTemplateTypeEnum = ENUMERATION OF\n\t(P_BOUNDEDVALUE\n\t,P_ENUMERATEDVALUE\n\t,P_LISTVALUE\n\t,P_REFERENCEVALUE\n\t,P_SINGLEVALUE\n\t,P_TABLEVALUE\n\t,Q_AREA\n\t,Q_COUNT\n\t,Q_LENGTH\n\t,Q_NUMBER\n\t,Q_TIME\n\t,Q_VOLUME\n\t,Q_WEIGHT);\nEND_TYPE;\n\nTYPE IfcSlabTypeEnum = ENUMERATION OF\n\t(APPROACH_SLAB\n\t,BASESLAB\n\t,FLOOR\n\t,LANDING\n\t,PAVING\n\t,ROOF\n\t,SIDEWALK\n\t,TRACKSLAB\n\t,WEARING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSolarDeviceTypeEnum = ENUMERATION OF\n\t(SOLARCOLLECTOR\n\t,SOLARPANEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSpaceHeaterTypeEnum = ENUMERATION OF\n\t(CONVECTOR\n\t,RADIATOR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSpaceTypeEnum = ENUMERATION OF\n\t(BERTH\n\t,EXTERNAL\n\t,GFA\n\t,INTERNAL\n\t,PARKING\n\t,SPACE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSpatialZoneTypeEnum = ENUMERATION OF\n\t(CONSTRUCTION\n\t,FIRESAFETY\n\t,INTERFERENCE\n\t,LIGHTING\n\t,OCCUPANCY\n\t,RESERVATION\n\t,SECURITY\n\t,THERMAL\n\t,TRANSPORT\n\t,VENTILATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStackTerminalTypeEnum = ENUMERATION OF\n\t(BIRDCAGE\n\t,COWL\n\t,RAINWATERHOPPER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStairFlightTypeEnum = ENUMERATION OF\n\t(CURVED\n\t,FREEFORM\n\t,SPIRAL\n\t,STRAIGHT\n\t,WINDER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStairTypeEnum = ENUMERATION OF\n\t(CURVED_RUN_STAIR\n\t,DOUBLE_RETURN_STAIR\n\t,HALF_TURN_STAIR\n\t,HALF_WINDING_STAIR\n\t,LADDER\n\t,QUARTER_TURN_STAIR\n\t,QUARTER_WINDING_STAIR\n\t,SPIRAL_STAIR\n\t,STRAIGHT_RUN_STAIR\n\t,THREE_QUARTER_TURN_STAIR\n\t,THREE_QUARTER_WINDING_STAIR\n\t,TWO_CURVED_RUN_STAIR\n\t,TWO_QUARTER_TURN_STAIR\n\t,TWO_QUARTER_WINDING_STAIR\n\t,TWO_STRAIGHT_RUN_STAIR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStateEnum = ENUMERATION OF\n\t(LOCKED\n\t,READONLY\n\t,READONLYLOCKED\n\t,READWRITE\n\t,READWRITELOCKED);\nEND_TYPE;\n\nTYPE IfcStructuralCurveActivityTypeEnum = ENUMERATION OF\n\t(CONST\n\t,DISCRETE\n\t,EQUIDISTANT\n\t,LINEAR\n\t,PARABOLA\n\t,POLYGONAL\n\t,SINUS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStructuralCurveMemberTypeEnum = ENUMERATION OF\n\t(CABLE\n\t,COMPRESSION_MEMBER\n\t,PIN_JOINED_MEMBER\n\t,RIGID_JOINED_MEMBER\n\t,TENSION_MEMBER\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStructuralSurfaceActivityTypeEnum = ENUMERATION OF\n\t(BILINEAR\n\t,CONST\n\t,DISCRETE\n\t,ISOCONTOUR\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcStructuralSurfaceMemberTypeEnum = ENUMERATION OF\n\t(BENDING_ELEMENT\n\t,MEMBRANE_ELEMENT\n\t,SHELL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSubContractResourceTypeEnum = ENUMERATION OF\n\t(PURCHASE\n\t,WORK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSurfaceFeatureTypeEnum = ENUMERATION OF\n\t(DEFECT\n\t,HATCHMARKING\n\t,LINEMARKING\n\t,MARK\n\t,NONSKIDSURFACING\n\t,PAVEMENTSURFACEMARKING\n\t,RUMBLESTRIP\n\t,SYMBOLMARKING\n\t,TAG\n\t,TRANSVERSERUMBLESTRIP\n\t,TREATMENT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSurfaceSide = ENUMERATION OF\n\t(BOTH\n\t,NEGATIVE\n\t,POSITIVE);\nEND_TYPE;\n\nTYPE IfcSwitchingDeviceTypeEnum = ENUMERATION OF\n\t(CONTACTOR\n\t,DIMMERSWITCH\n\t,EMERGENCYSTOP\n\t,KEYPAD\n\t,MOMENTARYSWITCH\n\t,RELAY\n\t,SELECTORSWITCH\n\t,STARTER\n\t,START_AND_STOP_EQUIPMENT\n\t,SWITCHDISCONNECTOR\n\t,TOGGLESWITCH\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcSystemFurnitureElementTypeEnum = ENUMERATION OF\n\t(PANEL\n\t,SUBRACK\n\t,WORKSURFACE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTankTypeEnum = ENUMERATION OF\n\t(BASIN\n\t,BREAKPRESSURE\n\t,EXPANSION\n\t,FEEDANDEXPANSION\n\t,OILRETENTIONTRAY\n\t,PRESSUREVESSEL\n\t,STORAGE\n\t,VESSEL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTaskDurationEnum = ENUMERATION OF\n\t(ELAPSEDTIME\n\t,WORKTIME\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTaskTypeEnum = ENUMERATION OF\n\t(ADJUSTMENT\n\t,ATTENDANCE\n\t,CALIBRATION\n\t,CONSTRUCTION\n\t,DEMOLITION\n\t,DISMANTLE\n\t,DISPOSAL\n\t,EMERGENCY\n\t,INSPECTION\n\t,INSTALLATION\n\t,LOGISTIC\n\t,MAINTENANCE\n\t,MOVE\n\t,OPERATION\n\t,REMOVAL\n\t,RENOVATION\n\t,SAFETY\n\t,SHUTDOWN\n\t,STARTUP\n\t,TESTING\n\t,TROUBLESHOOTING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTendonAnchorTypeEnum = ENUMERATION OF\n\t(COUPLER\n\t,FIXED_END\n\t,TENSIONING_END\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTendonConduitTypeEnum = ENUMERATION OF\n\t(COUPLER\n\t,DIABOLO\n\t,DUCT\n\t,GROUTING_DUCT\n\t,TRUMPET\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTendonTypeEnum = ENUMERATION OF\n\t(BAR\n\t,COATED\n\t,STRAND\n\t,WIRE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTextPath = ENUMERATION OF\n\t(DOWN\n\t,LEFT\n\t,RIGHT\n\t,UP);\nEND_TYPE;\n\nTYPE IfcTimeSeriesDataTypeEnum = ENUMERATION OF\n\t(CONTINUOUS\n\t,DISCRETE\n\t,DISCRETEBINARY\n\t,PIECEWISEBINARY\n\t,PIECEWISECONSTANT\n\t,PIECEWISECONTINUOUS\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTrackElementTypeEnum = ENUMERATION OF\n\t(BLOCKINGDEVICE\n\t,DERAILER\n\t,FROG\n\t,HALF_SET_OF_BLADES\n\t,SLEEPER\n\t,SPEEDREGULATOR\n\t,TRACKENDOFALIGNMENT\n\t,VEHICLESTOP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTransformerTypeEnum = ENUMERATION OF\n\t(CHOPPER\n\t,COMBINED\n\t,CURRENT\n\t,FREQUENCY\n\t,INVERTER\n\t,RECTIFIER\n\t,VOLTAGE\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTransitionCode = ENUMERATION OF\n\t(CONTINUOUS\n\t,CONTSAMEGRADIENT\n\t,CONTSAMEGRADIENTSAMECURVATURE\n\t,DISCONTINUOUS);\nEND_TYPE;\n\nTYPE IfcTransportElementTypeEnum = ENUMERATION OF\n\t(CRANEWAY\n\t,ELEVATOR\n\t,ESCALATOR\n\t,HAULINGGEAR\n\t,LIFTINGGEAR\n\t,MOVINGWALKWAY\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcTrimmingPreference = ENUMERATION OF\n\t(CARTESIAN\n\t,PARAMETER\n\t,UNSPECIFIED);\nEND_TYPE;\n\nTYPE IfcTubeBundleTypeEnum = ENUMERATION OF\n\t(FINNED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcUnitEnum = ENUMERATION OF\n\t(ABSORBEDDOSEUNIT\n\t,AMOUNTOFSUBSTANCEUNIT\n\t,AREAUNIT\n\t,DOSEEQUIVALENTUNIT\n\t,ELECTRICCAPACITANCEUNIT\n\t,ELECTRICCHARGEUNIT\n\t,ELECTRICCONDUCTANCEUNIT\n\t,ELECTRICCURRENTUNIT\n\t,ELECTRICRESISTANCEUNIT\n\t,ELECTRICVOLTAGEUNIT\n\t,ENERGYUNIT\n\t,FORCEUNIT\n\t,FREQUENCYUNIT\n\t,ILLUMINANCEUNIT\n\t,INDUCTANCEUNIT\n\t,LENGTHUNIT\n\t,LUMINOUSFLUXUNIT\n\t,LUMINOUSINTENSITYUNIT\n\t,MAGNETICFLUXDENSITYUNIT\n\t,MAGNETICFLUXUNIT\n\t,MASSUNIT\n\t,PLANEANGLEUNIT\n\t,POWERUNIT\n\t,PRESSUREUNIT\n\t,RADIOACTIVITYUNIT\n\t,SOLIDANGLEUNIT\n\t,THERMODYNAMICTEMPERATUREUNIT\n\t,TIMEUNIT\n\t,VOLUMEUNIT\n\t,USERDEFINED);\nEND_TYPE;\n\nTYPE IfcUnitaryControlElementTypeEnum = ENUMERATION OF\n\t(ALARMPANEL\n\t,BASESTATIONCONTROLLER\n\t,COMBINED\n\t,CONTROLPANEL\n\t,GASDETECTIONPANEL\n\t,HUMIDISTAT\n\t,INDICATORPANEL\n\t,MIMICPANEL\n\t,THERMOSTAT\n\t,WEATHERSTATION\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcUnitaryEquipmentTypeEnum = ENUMERATION OF\n\t(AIRCONDITIONINGUNIT\n\t,AIRHANDLER\n\t,DEHUMIDIFIER\n\t,ROOFTOPUNIT\n\t,SPLITSYSTEM\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcValveTypeEnum = ENUMERATION OF\n\t(AIRRELEASE\n\t,ANTIVACUUM\n\t,CHANGEOVER\n\t,CHECK\n\t,COMMISSIONING\n\t,DIVERTING\n\t,DOUBLECHECK\n\t,DOUBLEREGULATING\n\t,DRAWOFFCOCK\n\t,FAUCET\n\t,FLUSHING\n\t,GASCOCK\n\t,GASTAP\n\t,ISOLATING\n\t,MIXING\n\t,PRESSUREREDUCING\n\t,PRESSURERELIEF\n\t,REGULATING\n\t,SAFETYCUTOFF\n\t,STEAMTRAP\n\t,STOPCOCK\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcVehicleTypeEnum = ENUMERATION OF\n\t(CARGO\n\t,ROLLINGSTOCK\n\t,VEHICLE\n\t,VEHICLEAIR\n\t,VEHICLEMARINE\n\t,VEHICLETRACKED\n\t,VEHICLEWHEELED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcVibrationDamperTypeEnum = ENUMERATION OF\n\t(AXIAL_YIELD\n\t,BENDING_YIELD\n\t,FRICTION\n\t,RUBBER\n\t,SHEAR_YIELD\n\t,VISCOUS\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcVibrationIsolatorTypeEnum = ENUMERATION OF\n\t(BASE\n\t,COMPRESSION\n\t,SPRING\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcVirtualElementTypeEnum = ENUMERATION OF\n\t(BOUNDARY\n\t,CLEARANCE\n\t,PROVISIONFORVOID\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcVoidingFeatureTypeEnum = ENUMERATION OF\n\t(CHAMFER\n\t,CUTOUT\n\t,EDGE\n\t,HOLE\n\t,MITER\n\t,NOTCH\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWallTypeEnum = ENUMERATION OF\n\t(ELEMENTEDWALL\n\t,MOVABLE\n\t,PARAPET\n\t,PARTITIONING\n\t,PLUMBINGWALL\n\t,POLYGONAL\n\t,RETAININGWALL\n\t,SHEAR\n\t,SOLIDWALL\n\t,STANDARD\n\t,WAVEWALL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWasteTerminalTypeEnum = ENUMERATION OF\n\t(FLOORTRAP\n\t,FLOORWASTE\n\t,GULLYSUMP\n\t,GULLYTRAP\n\t,ROOFDRAIN\n\t,WASTEDISPOSALUNIT\n\t,WASTETRAP\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowPanelOperationEnum = ENUMERATION OF\n\t(BOTTOMHUNG\n\t,FIXEDCASEMENT\n\t,OTHEROPERATION\n\t,PIVOTHORIZONTAL\n\t,PIVOTVERTICAL\n\t,REMOVABLECASEMENT\n\t,SIDEHUNGLEFTHAND\n\t,SIDEHUNGRIGHTHAND\n\t,SLIDINGHORIZONTAL\n\t,SLIDINGVERTICAL\n\t,TILTANDTURNLEFTHAND\n\t,TILTANDTURNRIGHTHAND\n\t,TOPHUNG\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowPanelPositionEnum = ENUMERATION OF\n\t(BOTTOM\n\t,LEFT\n\t,MIDDLE\n\t,RIGHT\n\t,TOP\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowTypeEnum = ENUMERATION OF\n\t(LIGHTDOME\n\t,SKYLIGHT\n\t,WINDOW\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWindowTypePartitioningEnum = ENUMERATION OF\n\t(DOUBLE_PANEL_HORIZONTAL\n\t,DOUBLE_PANEL_VERTICAL\n\t,SINGLE_PANEL\n\t,TRIPLE_PANEL_BOTTOM\n\t,TRIPLE_PANEL_HORIZONTAL\n\t,TRIPLE_PANEL_LEFT\n\t,TRIPLE_PANEL_RIGHT\n\t,TRIPLE_PANEL_TOP\n\t,TRIPLE_PANEL_VERTICAL\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWorkCalendarTypeEnum = ENUMERATION OF\n\t(FIRSTSHIFT\n\t,SECONDSHIFT\n\t,THIRDSHIFT\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWorkPlanTypeEnum = ENUMERATION OF\n\t(ACTUAL\n\t,BASELINE\n\t,PLANNED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcWorkScheduleTypeEnum = ENUMERATION OF\n\t(ACTUAL\n\t,BASELINE\n\t,PLANNED\n\t,USERDEFINED\n\t,NOTDEFINED);\nEND_TYPE;\n\nTYPE IfcActorSelect = SELECT\n\t(IfcOrganization\n\t,IfcPerson\n\t,IfcPersonAndOrganization);\nEND_TYPE;\n\nTYPE IfcAppliedValueSelect = SELECT\n\t(IfcMeasureWithUnit\n\t,IfcReference\n\t,IfcValue);\nEND_TYPE;\n\nTYPE IfcAxis2Placement = SELECT\n\t(IfcAxis2Placement2D\n\t,IfcAxis2Placement3D);\nEND_TYPE;\n\nTYPE IfcBendingParameterSelect = SELECT\n\t(IfcLengthMeasure\n\t,IfcPlaneAngleMeasure);\nEND_TYPE;\n\nTYPE IfcBooleanOperand = SELECT\n\t(IfcBooleanResult\n\t,IfcCsgPrimitive3D\n\t,IfcHalfSpaceSolid\n\t,IfcSolidModel\n\t,IfcTessellatedFaceSet);\nEND_TYPE;\n\nTYPE IfcClassificationReferenceSelect = SELECT\n\t(IfcClassification\n\t,IfcClassificationReference);\nEND_TYPE;\n\nTYPE IfcClassificationSelect = SELECT\n\t(IfcClassification\n\t,IfcClassificationReference);\nEND_TYPE;\n\nTYPE IfcColour = SELECT\n\t(IfcColourSpecification\n\t,IfcPreDefinedColour);\nEND_TYPE;\n\nTYPE IfcColourOrFactor = SELECT\n\t(IfcColourRgb\n\t,IfcNormalisedRatioMeasure);\nEND_TYPE;\n\nTYPE IfcCoordinateReferenceSystemSelect = SELECT\n\t(IfcCoordinateReferenceSystem\n\t,IfcGeometricRepresentationContext);\nEND_TYPE;\n\nTYPE IfcCsgSelect = SELECT\n\t(IfcBooleanResult\n\t,IfcCsgPrimitive3D);\nEND_TYPE;\n\nTYPE IfcCurveFontOrScaledCurveFontSelect = SELECT\n\t(IfcCurveStyleFontAndScaling\n\t,IfcCurveStyleFontSelect);\nEND_TYPE;\n\nTYPE IfcCurveMeasureSelect = SELECT\n\t(IfcLengthMeasure\n\t,IfcParameterValue);\nEND_TYPE;\n\nTYPE IfcCurveOnSurface = SELECT\n\t(IfcCompositeCurveOnSurface\n\t,IfcPcurve\n\t,IfcSurfaceCurve);\nEND_TYPE;\n\nTYPE IfcCurveOrEdgeCurve = SELECT\n\t(IfcBoundedCurve\n\t,IfcEdgeCurve);\nEND_TYPE;\n\nTYPE IfcCurveStyleFontSelect = SELECT\n\t(IfcCurveStyleFont\n\t,IfcPreDefinedCurveFont);\nEND_TYPE;\n\nTYPE IfcDefinitionSelect = SELECT\n\t(IfcObjectDefinition\n\t,IfcPropertyDefinition);\nEND_TYPE;\n\nTYPE IfcDerivedMeasureValue = SELECT\n\t(IfcAbsorbedDoseMeasure\n\t,IfcAccelerationMeasure\n\t,IfcAngularVelocityMeasure\n\t,IfcAreaDensityMeasure\n\t,IfcCompoundPlaneAngleMeasure\n\t,IfcCurvatureMeasure\n\t,IfcDoseEquivalentMeasure\n\t,IfcDynamicViscosityMeasure\n\t,IfcElectricCapacitanceMeasure\n\t,IfcElectricChargeMeasure\n\t,IfcElectricConductanceMeasure\n\t,IfcElectricResistanceMeasure\n\t,IfcElectricVoltageMeasure\n\t,IfcEnergyMeasure\n\t,IfcForceMeasure\n\t,IfcFrequencyMeasure\n\t,IfcHeatFluxDensityMeasure\n\t,IfcHeatingValueMeasure\n\t,IfcIlluminanceMeasure\n\t,IfcInductanceMeasure\n\t,IfcIntegerCountRateMeasure\n\t,IfcIonConcentrationMeasure\n\t,IfcIsothermalMoistureCapacityMeasure\n\t,IfcKinematicViscosityMeasure\n\t,IfcLinearForceMeasure\n\t,IfcLinearMomentMeasure\n\t,IfcLinearStiffnessMeasure\n\t,IfcLinearVelocityMeasure\n\t,IfcLuminousFluxMeasure\n\t,IfcLuminousIntensityDistributionMeasure\n\t,IfcMagneticFluxDensityMeasure\n\t,IfcMagneticFluxMeasure\n\t,IfcMassDensityMeasure\n\t,IfcMassFlowRateMeasure\n\t,IfcMassPerLengthMeasure\n\t,IfcModulusOfElasticityMeasure\n\t,IfcModulusOfLinearSubgradeReactionMeasure\n\t,IfcModulusOfRotationalSubgradeReactionMeasure\n\t,IfcModulusOfSubgradeReactionMeasure\n\t,IfcMoistureDiffusivityMeasure\n\t,IfcMolecularWeightMeasure\n\t,IfcMomentOfInertiaMeasure\n\t,IfcMonetaryMeasure\n\t,IfcPHMeasure\n\t,IfcPlanarForceMeasure\n\t,IfcPowerMeasure\n\t,IfcPressureMeasure\n\t,IfcRadioActivityMeasure\n\t,IfcRotationalFrequencyMeasure\n\t,IfcRotationalMassMeasure\n\t,IfcRotationalStiffnessMeasure\n\t,IfcSectionModulusMeasure\n\t,IfcSectionalAreaIntegralMeasure\n\t,IfcShearModulusMeasure\n\t,IfcSoundPowerLevelMeasure\n\t,IfcSoundPowerMeasure\n\t,IfcSoundPressureLevelMeasure\n\t,IfcSoundPressureMeasure\n\t,IfcSpecificHeatCapacityMeasure\n\t,IfcTemperatureGradientMeasure\n\t,IfcTemperatureRateOfChangeMeasure\n\t,IfcThermalAdmittanceMeasure\n\t,IfcThermalConductivityMeasure\n\t,IfcThermalExpansionCoefficientMeasure\n\t,IfcThermalResistanceMeasure\n\t,IfcThermalTransmittanceMeasure\n\t,IfcTorqueMeasure\n\t,IfcVaporPermeabilityMeasure\n\t,IfcVolumetricFlowRateMeasure\n\t,IfcWarpingConstantMeasure\n\t,IfcWarpingMomentMeasure);\nEND_TYPE;\n\nTYPE IfcDocumentSelect = SELECT\n\t(IfcDocumentInformation\n\t,IfcDocumentReference);\nEND_TYPE;\n\nTYPE IfcFillStyleSelect = SELECT\n\t(IfcColour\n\t,IfcExternallyDefinedHatchStyle\n\t,IfcFillAreaStyleHatching\n\t,IfcFillAreaStyleTiles);\nEND_TYPE;\n\nTYPE IfcGeometricSetSelect = SELECT\n\t(IfcCurve\n\t,IfcPoint\n\t,IfcSurface);\nEND_TYPE;\n\nTYPE IfcGridPlacementDirectionSelect = SELECT\n\t(IfcDirection\n\t,IfcVirtualGridIntersection);\nEND_TYPE;\n\nTYPE IfcHatchLineDistanceSelect = SELECT\n\t(IfcPositiveLengthMeasure\n\t,IfcVector);\nEND_TYPE;\n\nTYPE IfcInterferenceSelect = SELECT\n\t(IfcElement\n\t,IfcSpatialElement);\nEND_TYPE;\n\nTYPE IfcLayeredItem = SELECT\n\t(IfcRepresentation\n\t,IfcRepresentationItem);\nEND_TYPE;\n\nTYPE IfcLibrarySelect = SELECT\n\t(IfcLibraryInformation\n\t,IfcLibraryReference);\nEND_TYPE;\n\nTYPE IfcLightDistributionDataSourceSelect = SELECT\n\t(IfcExternalReference\n\t,IfcLightIntensityDistribution);\nEND_TYPE;\n\nTYPE IfcMaterialSelect = SELECT\n\t(IfcMaterialDefinition\n\t,IfcMaterialList\n\t,IfcMaterialUsageDefinition);\nEND_TYPE;\n\nTYPE IfcMeasureValue = SELECT\n\t(IfcAmountOfSubstanceMeasure\n\t,IfcAreaMeasure\n\t,IfcComplexNumber\n\t,IfcContextDependentMeasure\n\t,IfcCountMeasure\n\t,IfcDescriptiveMeasure\n\t,IfcElectricCurrentMeasure\n\t,IfcLengthMeasure\n\t,IfcLuminousIntensityMeasure\n\t,IfcMassMeasure\n\t,IfcNonNegativeLengthMeasure\n\t,IfcNormalisedRatioMeasure\n\t,IfcNumericMeasure\n\t,IfcParameterValue\n\t,IfcPlaneAngleMeasure\n\t,IfcPositiveLengthMeasure\n\t,IfcPositivePlaneAngleMeasure\n\t,IfcPositiveRatioMeasure\n\t,IfcRatioMeasure\n\t,IfcSolidAngleMeasure\n\t,IfcThermodynamicTemperatureMeasure\n\t,IfcTimeMeasure\n\t,IfcVolumeMeasure);\nEND_TYPE;\n\nTYPE IfcMetricValueSelect = SELECT\n\t(IfcAppliedValue\n\t,IfcMeasureWithUnit\n\t,IfcReference\n\t,IfcTable\n\t,IfcTimeSeries\n\t,IfcValue);\nEND_TYPE;\n\nTYPE IfcModulusOfRotationalSubgradeReactionSelect = SELECT\n\t(IfcBoolean\n\t,IfcModulusOfRotationalSubgradeReactionMeasure);\nEND_TYPE;\n\nTYPE IfcModulusOfSubgradeReactionSelect = SELECT\n\t(IfcBoolean\n\t,IfcModulusOfSubgradeReactionMeasure);\nEND_TYPE;\n\nTYPE IfcModulusOfTranslationalSubgradeReactionSelect = SELECT\n\t(IfcBoolean\n\t,IfcModulusOfLinearSubgradeReactionMeasure);\nEND_TYPE;\n\nTYPE IfcObjectReferenceSelect = SELECT\n\t(IfcAddress\n\t,IfcAppliedValue\n\t,IfcExternalReference\n\t,IfcMaterialDefinition\n\t,IfcOrganization\n\t,IfcPerson\n\t,IfcPersonAndOrganization\n\t,IfcTable\n\t,IfcTimeSeries);\nEND_TYPE;\n\nTYPE IfcPointOrVertexPoint = SELECT\n\t(IfcPoint\n\t,IfcVertexPoint);\nEND_TYPE;\n\nTYPE IfcProcessSelect = SELECT\n\t(IfcProcess\n\t,IfcTypeProcess);\nEND_TYPE;\n\nTYPE IfcProductRepresentationSelect = SELECT\n\t(IfcProductDefinitionShape\n\t,IfcRepresentationMap);\nEND_TYPE;\n\nTYPE IfcProductSelect = SELECT\n\t(IfcProduct\n\t,IfcTypeProduct);\nEND_TYPE;\n\nTYPE IfcPropertySetDefinitionSelect = SELECT\n\t(IfcPropertySetDefinition\n\t,IfcPropertySetDefinitionSet);\nEND_TYPE;\n\nTYPE IfcResourceObjectSelect = SELECT\n\t(IfcActorRole\n\t,IfcAppliedValue\n\t,IfcApproval\n\t,IfcConstraint\n\t,IfcContextDependentUnit\n\t,IfcConversionBasedUnit\n\t,IfcExternalInformation\n\t,IfcExternalReference\n\t,IfcMaterialDefinition\n\t,IfcOrganization\n\t,IfcPerson\n\t,IfcPersonAndOrganization\n\t,IfcPhysicalQuantity\n\t,IfcProfileDef\n\t,IfcPropertyAbstraction\n\t,IfcShapeAspect\n\t,IfcTimeSeries);\nEND_TYPE;\n\nTYPE IfcResourceSelect = SELECT\n\t(IfcResource\n\t,IfcTypeResource);\nEND_TYPE;\n\nTYPE IfcRotationalStiffnessSelect = SELECT\n\t(IfcBoolean\n\t,IfcRotationalStiffnessMeasure);\nEND_TYPE;\n\nTYPE IfcSegmentIndexSelect = SELECT\n\t(IfcArcIndex\n\t,IfcLineIndex);\nEND_TYPE;\n\nTYPE IfcShell = SELECT\n\t(IfcClosedShell\n\t,IfcOpenShell);\nEND_TYPE;\n\nTYPE IfcSimpleValue = SELECT\n\t(IfcBinary\n\t,IfcBoolean\n\t,IfcDate\n\t,IfcDateTime\n\t,IfcDuration\n\t,IfcIdentifier\n\t,IfcInteger\n\t,IfcLabel\n\t,IfcLogical\n\t,IfcPositiveInteger\n\t,IfcReal\n\t,IfcText\n\t,IfcTime\n\t,IfcTimeStamp\n\t,IfcURIReference);\nEND_TYPE;\n\nTYPE IfcSizeSelect = SELECT\n\t(IfcDescriptiveMeasure\n\t,IfcLengthMeasure\n\t,IfcNormalisedRatioMeasure\n\t,IfcPositiveLengthMeasure\n\t,IfcPositiveRatioMeasure\n\t,IfcRatioMeasure);\nEND_TYPE;\n\nTYPE IfcSolidOrShell = SELECT\n\t(IfcClosedShell\n\t,IfcSolidModel);\nEND_TYPE;\n\nTYPE IfcSpaceBoundarySelect = SELECT\n\t(IfcExternalSpatialElement\n\t,IfcSpace);\nEND_TYPE;\n\nTYPE IfcSpatialReferenceSelect = SELECT\n\t(IfcGroup\n\t,IfcProduct);\nEND_TYPE;\n\nTYPE IfcSpecularHighlightSelect = SELECT\n\t(IfcSpecularExponent\n\t,IfcSpecularRoughness);\nEND_TYPE;\n\nTYPE IfcStructuralActivityAssignmentSelect = SELECT\n\t(IfcElement\n\t,IfcStructuralItem);\nEND_TYPE;\n\nTYPE IfcSurfaceOrFaceSurface = SELECT\n\t(IfcFaceBasedSurfaceModel\n\t,IfcFaceSurface\n\t,IfcSurface);\nEND_TYPE;\n\nTYPE IfcSurfaceStyleElementSelect = SELECT\n\t(IfcExternallyDefinedSurfaceStyle\n\t,IfcSurfaceStyleLighting\n\t,IfcSurfaceStyleRefraction\n\t,IfcSurfaceStyleShading\n\t,IfcSurfaceStyleWithTextures);\nEND_TYPE;\n\nTYPE IfcTextFontSelect = SELECT\n\t(IfcExternallyDefinedTextFont\n\t,IfcPreDefinedTextFont);\nEND_TYPE;\n\nTYPE IfcTimeOrRatioSelect = SELECT\n\t(IfcDuration\n\t,IfcRatioMeasure);\nEND_TYPE;\n\nTYPE IfcTranslationalStiffnessSelect = SELECT\n\t(IfcBoolean\n\t,IfcLinearStiffnessMeasure);\nEND_TYPE;\n\nTYPE IfcTrimmingSelect = SELECT\n\t(IfcCartesianPoint\n\t,IfcParameterValue);\nEND_TYPE;\n\nTYPE IfcUnit = SELECT\n\t(IfcDerivedUnit\n\t,IfcMonetaryUnit\n\t,IfcNamedUnit);\nEND_TYPE;\n\nTYPE IfcValue = SELECT\n\t(IfcDerivedMeasureValue\n\t,IfcMeasureValue\n\t,IfcSimpleValue);\nEND_TYPE;\n\nTYPE IfcVectorOrDirection = SELECT\n\t(IfcDirection\n\t,IfcVector);\nEND_TYPE;\n\nTYPE IfcWarpingStiffnessSelect = SELECT\n\t(IfcBoolean\n\t,IfcWarpingMomentMeasure);\nEND_TYPE;\n\nENTITY IfcActionRequest\n SUBTYPE OF (IfcControl);\n\tPredefinedType : OPTIONAL IfcActionRequestTypeEnum;\n\tStatus : OPTIONAL IfcLabel;\n\tLongDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcActor\n SUPERTYPE OF (ONEOF\n\t(IfcOccupant))\n SUBTYPE OF (IfcObject);\n\tTheActor : IfcActorSelect;\n INVERSE\n\tIsActingUpon : SET [0:?] OF IfcRelAssignsToActor FOR RelatingActor;\nEND_ENTITY;\n\nENTITY IfcActorRole;\n\tRole : IfcRoleEnum;\n\tUserDefinedRole : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tHasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\n WHERE\n\tWR1 : (Role <> IfcRoleEnum.USERDEFINED) OR\n((Role = IfcRoleEnum.USERDEFINED) AND\n  EXISTS(SELF.UserDefinedRole));\nEND_ENTITY;\n\nENTITY IfcActuator\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcActuatorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcActuatorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcActuatorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCACTUATORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcActuatorType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcActuatorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcActuatorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcActuatorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAddress\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPostalAddress\n\t,IfcTelecomAddress));\n\tPurpose : OPTIONAL IfcAddressTypeEnum;\n\tDescription : OPTIONAL IfcText;\n\tUserDefinedPurpose : OPTIONAL IfcLabel;\n INVERSE\n\tOfPerson : SET [0:?] OF IfcPerson FOR Addresses;\n\tOfOrganization : SET [0:?] OF IfcOrganization FOR Addresses;\n WHERE\n\tWR1 : (NOT(EXISTS(Purpose))) OR\n((Purpose <> IfcAddressTypeEnum.USERDEFINED) OR\n((Purpose = IfcAddressTypeEnum.USERDEFINED) AND\n  EXISTS(SELF.UserDefinedPurpose)));\nEND_ENTITY;\n\nENTITY IfcAdvancedBrep\n SUPERTYPE OF (ONEOF\n\t(IfcAdvancedBrepWithVoids))\n SUBTYPE OF (IfcManifoldSolidBrep);\n WHERE\n\tHasAdvancedFaces : SIZEOF(QUERY(Afs <* SELF\\IfcManifoldSolidBrep.Outer.CfsFaces |\n  (NOT ('IFC4X3_ADD2.IFCADVANCEDFACE' IN TYPEOF(Afs)))\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcAdvancedBrepWithVoids\n SUBTYPE OF (IfcAdvancedBrep);\n\tVoids : SET [1:?] OF IfcClosedShell;\n WHERE\n\tVoidsHaveAdvancedFaces : SIZEOF (QUERY (Vsh <* Voids |\n  SIZEOF (QUERY (Afs <* Vsh.CfsFaces |\n  (NOT ('IFC4X3_ADD2.IFCADVANCEDFACE' IN TYPEOF(Afs)))\n  )) = 0\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcAdvancedFace\n SUBTYPE OF (IfcFaceSurface);\n WHERE\n\tApplicableEdgeCurves : SIZEOF(QUERY (ElpFbnds <* \n  QUERY (Bnds <* SELF\\IfcFace.Bounds |\n    'IFC4X3_ADD2.IFCEDGELOOP' IN TYPEOF(Bnds.Bound)) |\n     NOT (SIZEOF (QUERY (Oe <* ElpFbnds.Bound\\IfcEdgeLoop.EdgeList |\n       NOT (SIZEOF (['IFC4X3_ADD2.IFCLINE',\n                     'IFC4X3_ADD2.IFCCONIC',\n                     'IFC4X3_ADD2.IFCPOLYLINE',\n                     'IFC4X3_ADD2.IFCBSPLINECURVE'] *\n         TYPEOF(Oe\\IfcOrientedEdge.EdgeElement\\IfcEdgeCurve.EdgeGeometry)) = 1 )\n  )) = 0\n))) = 0;\n\tApplicableSurface : SIZEOF (\n['IFC4X3_ADD2.IFCELEMENTARYSURFACE',\n 'IFC4X3_ADD2.IFCSWEPTSURFACE',\n 'IFC4X3_ADD2.IFCBSPLINESURFACE'] *\nTYPEOF(SELF\\IfcFaceSurface.FaceSurface)) = 1;\n\tRequiresEdgeCurve : SIZEOF(QUERY (ElpFbnds <* \n  QUERY (Bnds <* SELF\\IfcFace.Bounds |\n    'IFC4X3_ADD2.IFCEDGELOOP' IN TYPEOF(Bnds.Bound)) |\n     NOT (SIZEOF (QUERY (Oe <* ElpFbnds.Bound\\IfcEdgeLoop.EdgeList |\n       NOT('IFC4X3_ADD2.IFCEDGECURVE' IN \n       TYPEOF(Oe\\IfcOrientedEdge.EdgeElement)\n  ))) = 0\n))) = 0;\nEND_ENTITY;\n\nENTITY IfcAirTerminal\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcAirTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcAirTerminalTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcAirTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCAIRTERMINALTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcAirTerminalBox\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcAirTerminalBoxTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcAirTerminalBoxTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcAirTerminalBoxTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCAIRTERMINALBOXTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcAirTerminalBoxType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcAirTerminalBoxTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcAirTerminalBoxTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcAirTerminalBoxTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAirTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcAirTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcAirTerminalTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcAirTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAirToAirHeatRecovery\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcAirToAirHeatRecoveryTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCAIRTOAIRHEATRECOVERYTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcAirToAirHeatRecoveryType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcAirToAirHeatRecoveryTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcAirToAirHeatRecoveryTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAlarm\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcAlarmTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcAlarmTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcAlarmTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCALARMTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcAlarmType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcAlarmTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcAlarmTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcAlarmTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAlignment\n SUBTYPE OF (IfcLinearPositioningElement);\n\tPredefinedType : OPTIONAL IfcAlignmentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcAlignmentCant\n SUBTYPE OF (IfcLinearElement);\n\tRailHeadDistance : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcAlignmentCantSegment\n SUBTYPE OF (IfcAlignmentParameterSegment);\n\tStartDistAlong : IfcLengthMeasure;\n\tHorizontalLength : IfcNonNegativeLengthMeasure;\n\tStartCantLeft : IfcLengthMeasure;\n\tEndCantLeft : OPTIONAL IfcLengthMeasure;\n\tStartCantRight : IfcLengthMeasure;\n\tEndCantRight : OPTIONAL IfcLengthMeasure;\n\tPredefinedType : IfcAlignmentCantSegmentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcAlignmentHorizontal\n SUBTYPE OF (IfcLinearElement);\nEND_ENTITY;\n\nENTITY IfcAlignmentHorizontalSegment\n SUBTYPE OF (IfcAlignmentParameterSegment);\n\tStartPoint : IfcCartesianPoint;\n\tStartDirection : IfcPlaneAngleMeasure;\n\tStartRadiusOfCurvature : IfcLengthMeasure;\n\tEndRadiusOfCurvature : IfcLengthMeasure;\n\tSegmentLength : IfcNonNegativeLengthMeasure;\n\tGravityCenterLineHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : IfcAlignmentHorizontalSegmentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcAlignmentParameterSegment\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAlignmentCantSegment\n\t,IfcAlignmentHorizontalSegment\n\t,IfcAlignmentVerticalSegment));\n\tStartTag : OPTIONAL IfcLabel;\n\tEndTag : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcAlignmentSegment\n SUBTYPE OF (IfcLinearElement);\n\tDesignParameters : IfcAlignmentParameterSegment;\nEND_ENTITY;\n\nENTITY IfcAlignmentVertical\n SUBTYPE OF (IfcLinearElement);\nEND_ENTITY;\n\nENTITY IfcAlignmentVerticalSegment\n SUBTYPE OF (IfcAlignmentParameterSegment);\n\tStartDistAlong : IfcLengthMeasure;\n\tHorizontalLength : IfcNonNegativeLengthMeasure;\n\tStartHeight : IfcLengthMeasure;\n\tStartGradient : IfcRatioMeasure;\n\tEndGradient : IfcRatioMeasure;\n\tRadiusOfCurvature : OPTIONAL IfcLengthMeasure;\n\tPredefinedType : IfcAlignmentVerticalSegmentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcAnnotation\n SUBTYPE OF (IfcProduct);\n\tPredefinedType : OPTIONAL IfcAnnotationTypeEnum;\n INVERSE\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\nEND_ENTITY;\n\nENTITY IfcAnnotationFillArea\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOuterBoundary : IfcCurve;\n\tInnerBoundaries : OPTIONAL SET [1:?] OF IfcCurve;\nEND_ENTITY;\n\nENTITY IfcApplication;\n\tApplicationDeveloper : IfcOrganization;\n\tVersion : IfcLabel;\n\tApplicationFullName : IfcLabel;\n\tApplicationIdentifier : IfcIdentifier;\n UNIQUE\n\tUR1 : ApplicationIdentifier;\n\tUR2 : ApplicationFullName, Version;\nEND_ENTITY;\n\nENTITY IfcAppliedValue\n SUPERTYPE OF (ONEOF\n\t(IfcCostValue));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tAppliedValue : OPTIONAL IfcAppliedValueSelect;\n\tUnitBasis : OPTIONAL IfcMeasureWithUnit;\n\tApplicableDate : OPTIONAL IfcDate;\n\tFixedUntilDate : OPTIONAL IfcDate;\n\tCategory : OPTIONAL IfcLabel;\n\tCondition : OPTIONAL IfcLabel;\n\tArithmeticOperator : OPTIONAL IfcArithmeticOperatorEnum;\n\tComponents : OPTIONAL LIST [1:?] OF IfcAppliedValue;\n INVERSE\n\tHasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcApproval;\n\tIdentifier : OPTIONAL IfcIdentifier;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tTimeOfApproval : OPTIONAL IfcDateTime;\n\tStatus : OPTIONAL IfcLabel;\n\tLevel : OPTIONAL IfcLabel;\n\tQualifier : OPTIONAL IfcText;\n\tRequestingApproval : OPTIONAL IfcActorSelect;\n\tGivingApproval : OPTIONAL IfcActorSelect;\n INVERSE\n\tHasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\n\tApprovedObjects : SET [0:?] OF IfcRelAssociatesApproval FOR RelatingApproval;\n\tApprovedResources : SET [0:?] OF IfcResourceApprovalRelationship FOR RelatingApproval;\n\tIsRelatedWith : SET [0:?] OF IfcApprovalRelationship FOR RelatedApprovals;\n\tRelates : SET [0:?] OF IfcApprovalRelationship FOR RelatingApproval;\n WHERE\n\tHasIdentifierOrName : EXISTS (Identifier) OR EXISTS (Name);\nEND_ENTITY;\n\nENTITY IfcApprovalRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingApproval : IfcApproval;\n\tRelatedApprovals : SET [1:?] OF IfcApproval;\nEND_ENTITY;\n\nENTITY IfcArbitraryClosedProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcArbitraryProfileDefWithVoids))\n SUBTYPE OF (IfcProfileDef);\n\tOuterCurve : IfcCurve;\n WHERE\n\tWR1 : OuterCurve.Dim = 2;\n\tWR2 : NOT('IFC4X3_ADD2.IFCLINE' IN TYPEOF(OuterCurve));\n\tWR3 : NOT('IFC4X3_ADD2.IFCOFFSETCURVE2D' IN TYPEOF(OuterCurve));\nEND_ENTITY;\n\nENTITY IfcArbitraryOpenProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcCenterLineProfileDef))\n SUBTYPE OF (IfcProfileDef);\n\tCurve : IfcBoundedCurve;\n WHERE\n\tWR11 : ('IFC4X3_ADD2.IFCCENTERLINEPROFILEDEF' IN TYPEOF(SELF)) OR \n (SELF\\IfcProfileDef.ProfileType = IfcProfileTypeEnum.CURVE);\n\tWR12 : Curve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcArbitraryProfileDefWithVoids\n SUBTYPE OF (IfcArbitraryClosedProfileDef);\n\tInnerCurves : SET [1:?] OF IfcCurve;\n WHERE\n\tWR1 : SELF\\IfcProfileDef.ProfileType = AREA;\n\tWR2 : SIZEOF(QUERY(temp <* InnerCurves | temp.Dim <> 2)) = 0;\n\tWR3 : SIZEOF(QUERY(temp <* InnerCurves | 'IFC4X3_ADD2.IFCLINE' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcAsset\n SUBTYPE OF (IfcGroup);\n\tIdentification : OPTIONAL IfcIdentifier;\n\tOriginalValue : OPTIONAL IfcCostValue;\n\tCurrentValue : OPTIONAL IfcCostValue;\n\tTotalReplacementCost : OPTIONAL IfcCostValue;\n\tOwner : OPTIONAL IfcActorSelect;\n\tUser : OPTIONAL IfcActorSelect;\n\tResponsiblePerson : OPTIONAL IfcPerson;\n\tIncorporationDate : OPTIONAL IfcDate;\n\tDepreciatedValue : OPTIONAL IfcCostValue;\nEND_ENTITY;\n\nENTITY IfcAsymmetricIShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tBottomFlangeWidth : IfcPositiveLengthMeasure;\n\tOverallDepth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tBottomFlangeThickness : IfcPositiveLengthMeasure;\n\tBottomFlangeFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tTopFlangeWidth : IfcPositiveLengthMeasure;\n\tTopFlangeThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tTopFlangeFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tBottomFlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tBottomFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tTopFlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tTopFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n WHERE\n\tValidBottomFilletRadius : (NOT(EXISTS(BottomFlangeFilletRadius))) OR \n(BottomFlangeFilletRadius <= (BottomFlangeWidth - WebThickness)/2.);\n\tValidFlangeThickness : NOT(EXISTS(TopFlangeThickness)) OR ((BottomFlangeThickness + TopFlangeThickness) < OverallDepth);\n\tValidTopFilletRadius : (NOT(EXISTS(TopFlangeFilletRadius))) OR \n(TopFlangeFilletRadius <= (TopFlangeWidth - WebThickness)/2.);\n\tValidWebThickness : (WebThickness < BottomFlangeWidth) AND (WebThickness < TopFlangeWidth);\nEND_ENTITY;\n\nENTITY IfcAudioVisualAppliance\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcAudioVisualApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcAudioVisualApplianceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcAudioVisualApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCAUDIOVISUALAPPLIANCETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcAudioVisualApplianceType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcAudioVisualApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcAudioVisualApplianceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcAudioVisualApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcAxis1Placement\n SUBTYPE OF (IfcPlacement);\n\tAxis : OPTIONAL IfcDirection;\n DERIVE\n\t Z : IfcDirection := NVL (IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n WHERE\n\tAxisIs3D : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);\n\tLocationIs3D : SELF\\IfcPlacement.Location.Dim = 3;\n\tLocationIsCP : 'IFC4X3_ADD2.IFCCARTESIANPOINT' IN TYPEOF(SELF\\IfcPlacement.Location);\nEND_ENTITY;\n\nENTITY IfcAxis2Placement2D\n SUBTYPE OF (IfcPlacement);\n\tRefDirection : OPTIONAL IfcDirection;\n DERIVE\n\t P : LIST [2:2] OF IfcDirection := IfcBuild2Axes(RefDirection);\n WHERE\n\tLocationIs2D : SELF\\IfcPlacement.Location.Dim = 2;\n\tLocationIsCP : 'IFC4X3_ADD2.IFCCARTESIANPOINT' IN TYPEOF(SELF\\IfcPlacement.Location);\n\tRefDirIs2D : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 2);\nEND_ENTITY;\n\nENTITY IfcAxis2Placement3D\n SUBTYPE OF (IfcPlacement);\n\tAxis : OPTIONAL IfcDirection;\n\tRefDirection : OPTIONAL IfcDirection;\n DERIVE\n\t P : LIST [3:3] OF IfcDirection := IfcBuildAxes(Axis, RefDirection);\n WHERE\n\tAxisAndRefDirProvision : NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection)));\n\tAxisIs3D : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);\n\tAxisToRefDirPosition : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0);\n\tLocationIs3D : SELF\\IfcPlacement.Location.Dim = 3;\n\tLocationIsCP : 'IFC4X3_ADD2.IFCCARTESIANPOINT' IN TYPEOF(SELF\\IfcPlacement.Location);\n\tRefDirIs3D : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 3);\nEND_ENTITY;\n\nENTITY IfcAxis2PlacementLinear\n SUBTYPE OF (IfcPlacement);\n\tAxis : OPTIONAL IfcDirection;\n\tRefDirection : OPTIONAL IfcDirection;\n WHERE\n\tWR1 : 'IFC4X3_ADD2.IFCPOINTBYDISTANCEEXPRESSION' IN TYPEOF(SELF\\IfcPlacement.Location);\n\tWR2 : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0);\nEND_ENTITY;\n\nENTITY IfcBSplineCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBSplineCurveWithKnots))\n SUBTYPE OF (IfcBoundedCurve);\n\tDegree : IfcInteger;\n\tControlPointsList : LIST [2:?] OF IfcCartesianPoint;\n\tCurveForm : IfcBSplineCurveForm;\n\tClosedCurve : IfcLogical;\n\tSelfIntersect : IfcLogical;\n DERIVE\n\t UpperIndexOnControlPoints : IfcInteger := (SIZEOF(ControlPointsList) - 1);\n\t ControlPoints : ARRAY [0:UpperIndexOnControlPoints] OF IfcCartesianPoint := IfcListToArray(ControlPointsList,0,UpperIndexOnControlPoints);\n WHERE\n\tSameDim : SIZEOF(QUERY(Temp <* ControlPointsList |\n  Temp.Dim <> ControlPointsList[1].Dim))\n= 0;\nEND_ENTITY;\n\nENTITY IfcBSplineCurveWithKnots\n SUPERTYPE OF (ONEOF\n\t(IfcRationalBSplineCurveWithKnots))\n SUBTYPE OF (IfcBSplineCurve);\n\tKnotMultiplicities : LIST [2:?] OF IfcInteger;\n\tKnots : LIST [2:?] OF IfcParameterValue;\n\tKnotSpec : IfcKnotType;\n DERIVE\n\t UpperIndexOnKnots : IfcInteger := SIZEOF(Knots);\n WHERE\n\tConsistentBSpline : IfcConstraintsParamBSpline(Degree, UpperIndexOnKnots,\nUpperIndexOnControlPoints, KnotMultiplicities, Knots);\n\tCorrespondingKnotLists : SIZEOF(KnotMultiplicities) = UpperIndexOnKnots;\nEND_ENTITY;\n\nENTITY IfcBSplineSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBSplineSurfaceWithKnots))\n SUBTYPE OF (IfcBoundedSurface);\n\tUDegree : IfcInteger;\n\tVDegree : IfcInteger;\n\tControlPointsList : LIST [2:?] OF LIST [2:?] OF IfcCartesianPoint;\n\tSurfaceForm : IfcBSplineSurfaceForm;\n\tUClosed : IfcLogical;\n\tVClosed : IfcLogical;\n\tSelfIntersect : IfcLogical;\n DERIVE\n\t UUpper : IfcInteger := SIZEOF(ControlPointsList) - 1;\n\t VUpper : IfcInteger := SIZEOF(ControlPointsList[1]) - 1;\n\t ControlPoints : ARRAY [0:UUpper] OF ARRAY [0:VUpper] OF IfcCartesianPoint := IfcMakeArrayOfArray(ControlPointsList,\n0,UUpper,0,VUpper);\nEND_ENTITY;\n\nENTITY IfcBSplineSurfaceWithKnots\n SUPERTYPE OF (ONEOF\n\t(IfcRationalBSplineSurfaceWithKnots))\n SUBTYPE OF (IfcBSplineSurface);\n\tUMultiplicities : LIST [2:?] OF IfcInteger;\n\tVMultiplicities : LIST [2:?] OF IfcInteger;\n\tUKnots : LIST [2:?] OF IfcParameterValue;\n\tVKnots : LIST [2:?] OF IfcParameterValue;\n\tKnotSpec : IfcKnotType;\n DERIVE\n\t KnotVUpper : IfcInteger := SIZEOF(VKnots);\n\t KnotUUpper : IfcInteger := SIZEOF(UKnots);\n WHERE\n\tCorrespondingULists : SIZEOF(UMultiplicities) = KnotUUpper;\n\tCorrespondingVLists : SIZEOF(VMultiplicities) = KnotVUpper;\n\tUDirectionConstraints : IfcConstraintsParamBSpline (\n  SELF\\IfcBSplineSurface.UDegree, KnotUUpper, \n  SELF\\IfcBSplineSurface.UUpper, UMultiplicities, UKnots);\n\tVDirectionConstraints : IfcConstraintsParamBSpline (\n  SELF\\IfcBSplineSurface.VDegree, KnotVUpper, \n  SELF\\IfcBSplineSurface.VUpper, VMultiplicities, VKnots);\nEND_ENTITY;\n\nENTITY IfcBeam\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcBeamTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcBeamTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBeamTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCBEAMTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcBeamType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcBeamTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcBeamTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBeamTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcBearing\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcBearingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcBearingTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBearingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCBEARINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcBearingType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcBearingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcBearingTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBearingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcBlobTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tRasterFormat : IfcIdentifier;\n\tRasterCode : IfcBinary;\n WHERE\n\tRasterCodeByteStream : BLENGTH(RasterCode) MOD 8 = 0;\n\tSupportedRasterFormat : SELF.RasterFormat IN ['BMP', 'JPG', 'GIF', 'PNG'];\nEND_ENTITY;\n\nENTITY IfcBlock\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tXLength : IfcPositiveLengthMeasure;\n\tYLength : IfcPositiveLengthMeasure;\n\tZLength : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcBoiler\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcBoilerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcBoilerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBoilerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCBOILERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcBoilerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcBoilerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcBoilerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBoilerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcBooleanClippingResult\n SUBTYPE OF (IfcBooleanResult);\n WHERE\n\tFirstOperandType : ('IFC4X3_ADD2.IFCSWEPTAREASOLID' IN TYPEOF(FirstOperand)) OR \n('IFC4X3_ADD2.IFCSWEPTDISCSOLID' IN TYPEOF(FirstOperand)) OR \n('IFC4X3_ADD2.IFCBOOLEANCLIPPINGRESULT' IN TYPEOF(FirstOperand));\n\tOperatorType : Operator = DIFFERENCE;\n\tSecondOperandType : ('IFC4X3_ADD2.IFCHALFSPACESOLID' IN TYPEOF(SecondOperand));\nEND_ENTITY;\n\nENTITY IfcBooleanResult\n SUPERTYPE OF (ONEOF\n\t(IfcBooleanClippingResult))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOperator : IfcBooleanOperator;\n\tFirstOperand : IfcBooleanOperand;\n\tSecondOperand : IfcBooleanOperand;\n DERIVE\n\t Dim : IfcDimensionCount := FirstOperand.Dim;\n WHERE\n\tFirstOperandClosed : NOT('IFC4X3_ADD2.IFCTESSELLATEDFACESET' IN TYPEOF(FirstOperand)) OR (EXISTS(FirstOperand.Closed) AND FirstOperand.Closed);\n\tSameDim : FirstOperand.Dim = SecondOperand.Dim;\n\tSecondOperandClosed : NOT('IFC4X3_ADD2.IFCTESSELLATEDFACESET' IN TYPEOF(SecondOperand)) OR (EXISTS(SecondOperand.Closed) AND SecondOperand.Closed);\nEND_ENTITY;\n\nENTITY IfcBorehole\n SUBTYPE OF (IfcGeotechnicalAssembly);\nEND_ENTITY;\n\nENTITY IfcBoundaryCondition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBoundaryEdgeCondition\n\t,IfcBoundaryFaceCondition\n\t,IfcBoundaryNodeCondition));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcBoundaryCurve\n SUPERTYPE OF (ONEOF\n\t(IfcOuterBoundaryCurve))\n SUBTYPE OF (IfcCompositeCurveOnSurface);\n WHERE\n\tIsClosed : SELF\\IfcCompositeCurve.ClosedCurve;\nEND_ENTITY;\n\nENTITY IfcBoundaryEdgeCondition\n SUBTYPE OF (IfcBoundaryCondition);\n\tTranslationalStiffnessByLengthX : OPTIONAL IfcModulusOfTranslationalSubgradeReactionSelect;\n\tTranslationalStiffnessByLengthY : OPTIONAL IfcModulusOfTranslationalSubgradeReactionSelect;\n\tTranslationalStiffnessByLengthZ : OPTIONAL IfcModulusOfTranslationalSubgradeReactionSelect;\n\tRotationalStiffnessByLengthX : OPTIONAL IfcModulusOfRotationalSubgradeReactionSelect;\n\tRotationalStiffnessByLengthY : OPTIONAL IfcModulusOfRotationalSubgradeReactionSelect;\n\tRotationalStiffnessByLengthZ : OPTIONAL IfcModulusOfRotationalSubgradeReactionSelect;\nEND_ENTITY;\n\nENTITY IfcBoundaryFaceCondition\n SUBTYPE OF (IfcBoundaryCondition);\n\tTranslationalStiffnessByAreaX : OPTIONAL IfcModulusOfSubgradeReactionSelect;\n\tTranslationalStiffnessByAreaY : OPTIONAL IfcModulusOfSubgradeReactionSelect;\n\tTranslationalStiffnessByAreaZ : OPTIONAL IfcModulusOfSubgradeReactionSelect;\nEND_ENTITY;\n\nENTITY IfcBoundaryNodeCondition\n SUPERTYPE OF (ONEOF\n\t(IfcBoundaryNodeConditionWarping))\n SUBTYPE OF (IfcBoundaryCondition);\n\tTranslationalStiffnessX : OPTIONAL IfcTranslationalStiffnessSelect;\n\tTranslationalStiffnessY : OPTIONAL IfcTranslationalStiffnessSelect;\n\tTranslationalStiffnessZ : OPTIONAL IfcTranslationalStiffnessSelect;\n\tRotationalStiffnessX : OPTIONAL IfcRotationalStiffnessSelect;\n\tRotationalStiffnessY : OPTIONAL IfcRotationalStiffnessSelect;\n\tRotationalStiffnessZ : OPTIONAL IfcRotationalStiffnessSelect;\nEND_ENTITY;\n\nENTITY IfcBoundaryNodeConditionWarping\n SUBTYPE OF (IfcBoundaryNodeCondition);\n\tWarpingStiffness : OPTIONAL IfcWarpingStiffnessSelect;\nEND_ENTITY;\n\nENTITY IfcBoundedCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBSplineCurve\n\t,IfcCompositeCurve\n\t,IfcIndexedPolyCurve\n\t,IfcPolyline\n\t,IfcTrimmedCurve))\n SUBTYPE OF (IfcCurve);\nEND_ENTITY;\n\nENTITY IfcBoundedSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBSplineSurface\n\t,IfcCurveBoundedPlane\n\t,IfcCurveBoundedSurface\n\t,IfcRectangularTrimmedSurface))\n SUBTYPE OF (IfcSurface);\nEND_ENTITY;\n\nENTITY IfcBoundingBox\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tCorner : IfcCartesianPoint;\n\tXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\n\tZDim : IfcPositiveLengthMeasure;\n DERIVE\n\t Dim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcBoxedHalfSpace\n SUBTYPE OF (IfcHalfSpaceSolid);\n\tEnclosure : IfcBoundingBox;\n WHERE\n\tUnboundedSurface : NOT ('IFC4X3_ADD2.IFCCURVEBOUNDEDPLANE' IN TYPEOF(SELF\\IfcHalfSpaceSolid.BaseSurface));\nEND_ENTITY;\n\nENTITY IfcBridge\n SUBTYPE OF (IfcFacility);\n\tPredefinedType : OPTIONAL IfcBridgeTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcBridgeTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBridgeTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcBridgePart\n SUBTYPE OF (IfcFacilityPart);\n\tPredefinedType : OPTIONAL IfcBridgePartTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcBridgePartTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBridgePartTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcBuilding\n SUBTYPE OF (IfcFacility);\n\tElevationOfRefHeight : OPTIONAL IfcLengthMeasure;\n\tElevationOfTerrain : OPTIONAL IfcLengthMeasure;\n\tBuildingAddress : OPTIONAL IfcPostalAddress;\nEND_ENTITY;\n\nENTITY IfcBuildingElementPart\n SUBTYPE OF (IfcElementComponent);\n\tPredefinedType : OPTIONAL IfcBuildingElementPartTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcBuildingElementPartTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBuildingElementPartTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCBUILDINGELEMENTPARTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcBuildingElementPartType\n SUBTYPE OF (IfcElementComponentType);\n\tPredefinedType : IfcBuildingElementPartTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcBuildingElementPartTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBuildingElementPartTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcBuildingElementProxy\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcBuildingElementProxyTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcBuildingElementProxyTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBuildingElementProxyTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCBUILDINGELEMENTPROXYTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\n\tHasObjectName : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcBuildingElementProxyType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcBuildingElementProxyTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcBuildingElementProxyTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBuildingElementProxyTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcBuildingStorey\n SUBTYPE OF (IfcSpatialStructureElement);\n\tElevation : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcBuildingSystem\n SUBTYPE OF (IfcSystem);\n\tPredefinedType : OPTIONAL IfcBuildingSystemTypeEnum;\n\tLongName : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcBuildingSystemTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBuildingSystemTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcBuiltElement\n SUPERTYPE OF (ONEOF\n\t(IfcBeam\n\t,IfcBearing\n\t,IfcBuildingElementProxy\n\t,IfcChimney\n\t,IfcColumn\n\t,IfcCourse\n\t,IfcCovering\n\t,IfcCurtainWall\n\t,IfcDeepFoundation\n\t,IfcDoor\n\t,IfcEarthworksElement\n\t,IfcFooting\n\t,IfcKerb\n\t,IfcMember\n\t,IfcMooringDevice\n\t,IfcNavigationElement\n\t,IfcPavement\n\t,IfcPlate\n\t,IfcRail\n\t,IfcRailing\n\t,IfcRamp\n\t,IfcRampFlight\n\t,IfcRoof\n\t,IfcShadingDevice\n\t,IfcSlab\n\t,IfcStair\n\t,IfcStairFlight\n\t,IfcTrackElement\n\t,IfcWall\n\t,IfcWindow))\n SUBTYPE OF (IfcElement);\n WHERE\n\tMaxOneMaterialAssociation : SIZEOF (QUERY(temp <* SELF\\IfcObjectDefinition.HasAssociations |\n  'IFC4X3_ADD2.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)\n  )) <= 1;\nEND_ENTITY;\n\nENTITY IfcBuiltElementType\n SUPERTYPE OF (ONEOF\n\t(IfcBeamType\n\t,IfcBearingType\n\t,IfcBuildingElementProxyType\n\t,IfcChimneyType\n\t,IfcColumnType\n\t,IfcCourseType\n\t,IfcCoveringType\n\t,IfcCurtainWallType\n\t,IfcDeepFoundationType\n\t,IfcDoorType\n\t,IfcFootingType\n\t,IfcKerbType\n\t,IfcMemberType\n\t,IfcMooringDeviceType\n\t,IfcNavigationElementType\n\t,IfcPavementType\n\t,IfcPlateType\n\t,IfcRailType\n\t,IfcRailingType\n\t,IfcRampFlightType\n\t,IfcRampType\n\t,IfcRoofType\n\t,IfcShadingDeviceType\n\t,IfcSlabType\n\t,IfcStairFlightType\n\t,IfcStairType\n\t,IfcTrackElementType\n\t,IfcWallType\n\t,IfcWindowType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcBuiltSystem\n SUBTYPE OF (IfcSystem);\n\tPredefinedType : OPTIONAL IfcBuiltSystemTypeEnum;\n\tLongName : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcBuiltSystemTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBuiltSystemTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcBurner\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcBurnerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcBurnerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBurnerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCBURNERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcBurnerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcBurnerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcBurnerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcBurnerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tWidth : IfcPositiveLengthMeasure;\n\tWallThickness : IfcPositiveLengthMeasure;\n\tGirth : IfcPositiveLengthMeasure;\n\tInternalFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n WHERE\n\tValidGirth : Girth < (Depth / 2.);\n\tValidInternalFilletRadius : NOT(EXISTS(InternalFilletRadius)) OR\n((InternalFilletRadius <= Width/2. - WallThickness) AND (InternalFilletRadius <= Depth/2. - WallThickness));\n\tValidWallThickness : (WallThickness < Width/2.) AND (WallThickness < Depth/2.);\nEND_ENTITY;\n\nENTITY IfcCableCarrierFitting\n SUBTYPE OF (IfcFlowFitting);\n\tPredefinedType : OPTIONAL IfcCableCarrierFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcCableCarrierFittingTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCableCarrierFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCABLECARRIERFITTINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCableCarrierFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcCableCarrierFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCableCarrierFittingTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCableCarrierFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCableCarrierSegment\n SUBTYPE OF (IfcFlowSegment);\n\tPredefinedType : OPTIONAL IfcCableCarrierSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcCableCarrierSegmentTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCableCarrierSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCABLECARRIERSEGMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCableCarrierSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcCableCarrierSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCableCarrierSegmentTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCableCarrierSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCableFitting\n SUBTYPE OF (IfcFlowFitting);\n\tPredefinedType : OPTIONAL IfcCableFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcCableFittingTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCableFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCABLEFITTINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCableFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcCableFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCableFittingTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCableFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCableSegment\n SUBTYPE OF (IfcFlowSegment);\n\tPredefinedType : OPTIONAL IfcCableSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcCableSegmentTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCableSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCABLESEGMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCableSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcCableSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCableSegmentTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCableSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCaissonFoundation\n SUBTYPE OF (IfcDeepFoundation);\n\tPredefinedType : OPTIONAL IfcCaissonFoundationTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcCaissonFoundationTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCaissonFoundationTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCAISSONFOUNDATIONTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCaissonFoundationType\n SUBTYPE OF (IfcDeepFoundationType);\n\tPredefinedType : IfcCaissonFoundationTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCaissonFoundationTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCaissonFoundationTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCartesianPoint\n SUBTYPE OF (IfcPoint);\n\tCoordinates : LIST [1:3] OF IfcLengthMeasure;\n WHERE\n\tCP2Dor3D : HIINDEX(Coordinates) >= 2;\nEND_ENTITY;\n\nENTITY IfcCartesianPointList\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCartesianPointList2D\n\t,IfcCartesianPointList3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\t Dim : IfcDimensionCount := IfcPointListDim(SELF);\nEND_ENTITY;\n\nENTITY IfcCartesianPointList2D\n SUBTYPE OF (IfcCartesianPointList);\n\tCoordList : LIST [1:?] OF LIST [2:2] OF IfcLengthMeasure;\n\tTagList : OPTIONAL LIST [1:?] OF IfcLabel;\nEND_ENTITY;\n\nENTITY IfcCartesianPointList3D\n SUBTYPE OF (IfcCartesianPointList);\n\tCoordList : LIST [1:?] OF LIST [3:3] OF IfcLengthMeasure;\n\tTagList : OPTIONAL LIST [1:?] OF IfcLabel;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCartesianTransformationOperator2D\n\t,IfcCartesianTransformationOperator3D))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tAxis1 : OPTIONAL IfcDirection;\n\tAxis2 : OPTIONAL IfcDirection;\n\tLocalOrigin : IfcCartesianPoint;\n\tScale : OPTIONAL IfcReal;\n DERIVE\n\t Scl : IfcReal := NVL(Scale, 1.0);\n\t Dim : IfcDimensionCount := LocalOrigin.Dim;\n WHERE\n\tScaleGreaterZero : Scl > 0.0;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator2D\n SUPERTYPE OF (ONEOF\n\t(IfcCartesianTransformationOperator2DnonUniform))\n SUBTYPE OF (IfcCartesianTransformationOperator);\n DERIVE\n\t U : LIST [2:2] OF IfcDirection := IfcBaseAxis(2,SELF\\IfcCartesianTransformationOperator.Axis1,\nSELF\\IfcCartesianTransformationOperator.Axis2,?);\n WHERE\n\tAxis1Is2D : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis1)) OR \n(SELF\\IfcCartesianTransformationOperator.Axis1.Dim = 2);\n\tAxis2Is2D : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis2)) OR \n(SELF\\IfcCartesianTransformationOperator.Axis2.Dim = 2);\n\tDimEqual2 : SELF\\IfcCartesianTransformationOperator.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator2DnonUniform\n SUBTYPE OF (IfcCartesianTransformationOperator2D);\n\tScale2 : OPTIONAL IfcReal;\n DERIVE\n\t Scl2 : IfcReal := NVL(Scale2, SELF\\IfcCartesianTransformationOperator.Scl);\n WHERE\n\tScale2GreaterZero : Scl2 > 0.0;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator3D\n SUPERTYPE OF (ONEOF\n\t(IfcCartesianTransformationOperator3DnonUniform))\n SUBTYPE OF (IfcCartesianTransformationOperator);\n\tAxis3 : OPTIONAL IfcDirection;\n DERIVE\n\t U : LIST [3:3] OF IfcDirection := IfcBaseAxis(3,SELF\\IfcCartesianTransformationOperator.Axis1,\nSELF\\IfcCartesianTransformationOperator.Axis2,Axis3);\n WHERE\n\tAxis1Is3D : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis1)) OR \n(SELF\\IfcCartesianTransformationOperator.Axis1.Dim = 3);\n\tAxis2Is3D : NOT(EXISTS(SELF\\IfcCartesianTransformationOperator.Axis2)) OR \n(SELF\\IfcCartesianTransformationOperator.Axis2.Dim = 3);\n\tAxis3Is3D : NOT(EXISTS(Axis3)) OR (Axis3.Dim = 3);\n\tDimIs3D : SELF\\IfcCartesianTransformationOperator.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcCartesianTransformationOperator3DnonUniform\n SUBTYPE OF (IfcCartesianTransformationOperator3D);\n\tScale2 : OPTIONAL IfcReal;\n\tScale3 : OPTIONAL IfcReal;\n DERIVE\n\t Scl2 : IfcReal := NVL(Scale2, SELF\\IfcCartesianTransformationOperator.Scl);\n\t Scl3 : IfcReal := NVL(Scale3, SELF\\IfcCartesianTransformationOperator.Scl);\n WHERE\n\tScale2GreaterZero : Scl2 > 0.0;\n\tScale3GreaterZero : Scl3 > 0.0;\nEND_ENTITY;\n\nENTITY IfcCenterLineProfileDef\n SUBTYPE OF (IfcArbitraryOpenProfileDef);\n\tThickness : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcChiller\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcChillerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCHILLERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcChillerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcChillerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcChillerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcChillerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcChimney\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcChimneyTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcChimneyTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcChimneyTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCHIMNEYTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcChimneyType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcChimneyTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcChimneyTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcChimneyTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCircle\n SUBTYPE OF (IfcConic);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCircleHollowProfileDef\n SUBTYPE OF (IfcCircleProfileDef);\n\tWallThickness : IfcPositiveLengthMeasure;\n WHERE\n\tWR1 : WallThickness < SELF\\IfcCircleProfileDef.Radius;\nEND_ENTITY;\n\nENTITY IfcCircleProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcCircleHollowProfileDef))\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCivilElement\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcCivilElementType\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcClassification\n SUBTYPE OF (IfcExternalInformation);\n\tSource : OPTIONAL IfcLabel;\n\tEdition : OPTIONAL IfcLabel;\n\tEditionDate : OPTIONAL IfcDate;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tSpecification : OPTIONAL IfcURIReference;\n\tReferenceTokens : OPTIONAL LIST [1:?] OF IfcIdentifier;\n INVERSE\n\tClassificationForObjects : SET [0:?] OF IfcRelAssociatesClassification FOR RelatingClassification;\n\tHasReferences : SET [0:?] OF IfcClassificationReference FOR ReferencedSource;\nEND_ENTITY;\n\nENTITY IfcClassificationReference\n SUBTYPE OF (IfcExternalReference);\n\tReferencedSource : OPTIONAL IfcClassificationReferenceSelect;\n\tDescription : OPTIONAL IfcText;\n\tSort : OPTIONAL IfcIdentifier;\n INVERSE\n\tClassificationRefForObjects : SET [0:?] OF IfcRelAssociatesClassification FOR RelatingClassification;\n\tHasReferences : SET [0:?] OF IfcClassificationReference FOR ReferencedSource;\nEND_ENTITY;\n\nENTITY IfcClosedShell\n SUBTYPE OF (IfcConnectedFaceSet);\nEND_ENTITY;\n\nENTITY IfcClothoid\n SUBTYPE OF (IfcSpiral);\n\tClothoidConstant : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCoil\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcCoilTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcCoilTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCoilTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCOILTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCoilType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCoilTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCoilTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCoilTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcColourRgb\n SUBTYPE OF (IfcColourSpecification);\n\tRed : IfcNormalisedRatioMeasure;\n\tGreen : IfcNormalisedRatioMeasure;\n\tBlue : IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcColourRgbList\n SUBTYPE OF (IfcPresentationItem);\n\tColourList : LIST [1:?] OF LIST [3:3] OF IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcColourSpecification\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcColourRgb))\n SUBTYPE OF (IfcPresentationItem);\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcColumn\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcColumnTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcColumnTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcColumnTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCOLUMNTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcColumnType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcColumnTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcColumnTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcColumnTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCommunicationsAppliance\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcCommunicationsApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcCommunicationsApplianceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCommunicationsApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCOMMUNICATIONSAPPLIANCETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCommunicationsApplianceType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcCommunicationsApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCommunicationsApplianceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCommunicationsApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcComplexProperty\n SUBTYPE OF (IfcProperty);\n\tUsageName : IfcIdentifier;\n\tHasProperties : SET [1:?] OF IfcProperty;\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* HasProperties | SELF :=: temp)) = 0;\n\tWR22 : IfcUniquePropertyName(HasProperties);\nEND_ENTITY;\n\nENTITY IfcComplexPropertyTemplate\n SUBTYPE OF (IfcPropertyTemplate);\n\tUsageName : OPTIONAL IfcLabel;\n\tTemplateType : OPTIONAL IfcComplexPropertyTemplateTypeEnum;\n\tHasPropertyTemplates : OPTIONAL SET [1:?] OF IfcPropertyTemplate;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(temp <* HasPropertyTemplates | SELF :=: temp)) = 0;\n\tUniquePropertyNames : IfcUniquePropertyTemplateNames(HasPropertyTemplates);\nEND_ENTITY;\n\nENTITY IfcCompositeCurve\n SUPERTYPE OF (ONEOF\n\t(IfcCompositeCurveOnSurface\n\t,IfcGradientCurve\n\t,IfcSegmentedReferenceCurve))\n SUBTYPE OF (IfcBoundedCurve);\n\tSegments : LIST [1:?] OF IfcSegment;\n\tSelfIntersect : IfcLogical;\n DERIVE\n\t NSegments : IfcInteger := SIZEOF(Segments);\n\t ClosedCurve : IfcLogical := Segments[NSegments].Transition <> Discontinuous;\n WHERE\n\tCurveContinuous : ((NOT ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 1)) OR ((ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 0));\n\tSameDim : SIZEOF( QUERY( Temp <* Segments | Temp.Dim <> Segments[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcCompositeCurveOnSurface\n SUPERTYPE OF (ONEOF\n\t(IfcBoundaryCurve))\n SUBTYPE OF (IfcCompositeCurve);\n DERIVE\n\t BasisSurface : SET [0:1] OF IfcSurface := IfcGetBasisSurface(SELF);\n WHERE\n\tSameSurface : SIZEOF(BasisSurface) > 0;\nEND_ENTITY;\n\nENTITY IfcCompositeCurveSegment\n SUPERTYPE OF (ONEOF\n\t(IfcReparametrisedCompositeCurveSegment))\n SUBTYPE OF (IfcSegment);\n\tSameSense : IfcBoolean;\n\tParentCurve : IfcCurve;\n WHERE\n\tParentIsBoundedCurve : ('IFC4X3_ADD2.IFCBOUNDEDCURVE' IN TYPEOF(ParentCurve));\nEND_ENTITY;\n\nENTITY IfcCompositeProfileDef\n SUBTYPE OF (IfcProfileDef);\n\tProfiles : SET [2:?] OF IfcProfileDef;\n\tLabel : OPTIONAL IfcLabel;\n WHERE\n\tInvariantProfileType : SIZEOF(QUERY(temp <* Profiles | temp.ProfileType <> Profiles[1].ProfileType)) = 0;\n\tNoRecursion : SIZEOF(QUERY(temp <* Profiles | 'IFC4X3_ADD2.IFCCOMPOSITEPROFILEDEF' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcCompressor\n SUBTYPE OF (IfcFlowMovingDevice);\n\tPredefinedType : OPTIONAL IfcCompressorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcCompressorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCompressorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCOMPRESSORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCompressorType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcCompressorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCompressorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCompressorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCondenser\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcCondenserTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcCondenserTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCondenserTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCONDENSERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCondenserType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCondenserTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCondenserTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCondenserTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcConic\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCircle\n\t,IfcEllipse))\n SUBTYPE OF (IfcCurve);\n\tPosition : IfcAxis2Placement;\nEND_ENTITY;\n\nENTITY IfcConnectedFaceSet\n SUPERTYPE OF (ONEOF\n\t(IfcClosedShell\n\t,IfcOpenShell))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tCfsFaces : SET [1:?] OF IfcFace;\nEND_ENTITY;\n\nENTITY IfcConnectionCurveGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tCurveOnRelatingElement : IfcCurveOrEdgeCurve;\n\tCurveOnRelatedElement : OPTIONAL IfcCurveOrEdgeCurve;\nEND_ENTITY;\n\nENTITY IfcConnectionGeometry\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConnectionCurveGeometry\n\t,IfcConnectionPointGeometry\n\t,IfcConnectionSurfaceGeometry\n\t,IfcConnectionVolumeGeometry));\nEND_ENTITY;\n\nENTITY IfcConnectionPointEccentricity\n SUBTYPE OF (IfcConnectionPointGeometry);\n\tEccentricityInX : OPTIONAL IfcLengthMeasure;\n\tEccentricityInY : OPTIONAL IfcLengthMeasure;\n\tEccentricityInZ : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcConnectionPointGeometry\n SUPERTYPE OF (ONEOF\n\t(IfcConnectionPointEccentricity))\n SUBTYPE OF (IfcConnectionGeometry);\n\tPointOnRelatingElement : IfcPointOrVertexPoint;\n\tPointOnRelatedElement : OPTIONAL IfcPointOrVertexPoint;\nEND_ENTITY;\n\nENTITY IfcConnectionSurfaceGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tSurfaceOnRelatingElement : IfcSurfaceOrFaceSurface;\n\tSurfaceOnRelatedElement : OPTIONAL IfcSurfaceOrFaceSurface;\nEND_ENTITY;\n\nENTITY IfcConnectionVolumeGeometry\n SUBTYPE OF (IfcConnectionGeometry);\n\tVolumeOnRelatingElement : IfcSolidOrShell;\n\tVolumeOnRelatedElement : OPTIONAL IfcSolidOrShell;\nEND_ENTITY;\n\nENTITY IfcConstraint\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcMetric\n\t,IfcObjective));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tConstraintGrade : IfcConstraintEnum;\n\tConstraintSource : OPTIONAL IfcLabel;\n\tCreatingActor : OPTIONAL IfcActorSelect;\n\tCreationTime : OPTIONAL IfcDateTime;\n\tUserDefinedGrade : OPTIONAL IfcLabel;\n INVERSE\n\tHasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\n\tPropertiesForConstraint : SET [0:?] OF IfcResourceConstraintRelationship FOR RelatingConstraint;\n WHERE\n\tWR11 : (ConstraintGrade <> IfcConstraintEnum.USERDEFINED) OR\n((ConstraintGrade = IfcConstraintEnum.USERDEFINED) AND EXISTS(SELF\\IfcConstraint.UserDefinedGrade));\nEND_ENTITY;\n\nENTITY IfcConstructionEquipmentResource\n SUBTYPE OF (IfcConstructionResource);\n\tPredefinedType : OPTIONAL IfcConstructionEquipmentResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n(PredefinedType <> IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) OR \n((PredefinedType = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcConstructionEquipmentResourceType\n SUBTYPE OF (IfcConstructionResourceType);\n\tPredefinedType : IfcConstructionEquipmentResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcConstructionEquipmentResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeResource.ResourceType));\nEND_ENTITY;\n\nENTITY IfcConstructionMaterialResource\n SUBTYPE OF (IfcConstructionResource);\n\tPredefinedType : OPTIONAL IfcConstructionMaterialResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcConstructionMaterialResourceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcConstructionMaterialResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcConstructionMaterialResourceType\n SUBTYPE OF (IfcConstructionResourceType);\n\tPredefinedType : IfcConstructionMaterialResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcConstructionMaterialResourceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcConstructionMaterialResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeResource.ResourceType));\nEND_ENTITY;\n\nENTITY IfcConstructionProductResource\n SUBTYPE OF (IfcConstructionResource);\n\tPredefinedType : OPTIONAL IfcConstructionProductResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcConstructionProductResourceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcConstructionProductResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcConstructionProductResourceType\n SUBTYPE OF (IfcConstructionResourceType);\n\tPredefinedType : IfcConstructionProductResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcConstructionProductResourceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcConstructionProductResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeResource.ResourceType));\nEND_ENTITY;\n\nENTITY IfcConstructionResource\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConstructionEquipmentResource\n\t,IfcConstructionMaterialResource\n\t,IfcConstructionProductResource\n\t,IfcCrewResource\n\t,IfcLaborResource\n\t,IfcSubContractResource))\n SUBTYPE OF (IfcResource);\n\tUsage : OPTIONAL IfcResourceTime;\n\tBaseCosts : OPTIONAL LIST [1:?] OF IfcAppliedValue;\n\tBaseQuantity : OPTIONAL IfcPhysicalQuantity;\nEND_ENTITY;\n\nENTITY IfcConstructionResourceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConstructionEquipmentResourceType\n\t,IfcConstructionMaterialResourceType\n\t,IfcConstructionProductResourceType\n\t,IfcCrewResourceType\n\t,IfcLaborResourceType\n\t,IfcSubContractResourceType))\n SUBTYPE OF (IfcTypeResource);\n\tBaseCosts : OPTIONAL LIST [1:?] OF IfcAppliedValue;\n\tBaseQuantity : OPTIONAL IfcPhysicalQuantity;\nEND_ENTITY;\n\nENTITY IfcContext\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcProject\n\t,IfcProjectLibrary))\n SUBTYPE OF (IfcObjectDefinition);\n\tObjectType : OPTIONAL IfcLabel;\n\tLongName : OPTIONAL IfcLabel;\n\tPhase : OPTIONAL IfcLabel;\n\tRepresentationContexts : OPTIONAL SET [1:?] OF IfcRepresentationContext;\n\tUnitsInContext : OPTIONAL IfcUnitAssignment;\n INVERSE\n\tIsDefinedBy : SET [0:?] OF IfcRelDefinesByProperties FOR RelatedObjects;\n\tDeclares : SET [0:?] OF IfcRelDeclares FOR RelatingContext;\nEND_ENTITY;\n\nENTITY IfcContextDependentUnit\n SUBTYPE OF (IfcNamedUnit);\n\tName : IfcLabel;\n INVERSE\n\tHasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcControl\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcActionRequest\n\t,IfcCostItem\n\t,IfcCostSchedule\n\t,IfcPerformanceHistory\n\t,IfcPermit\n\t,IfcProjectOrder\n\t,IfcWorkCalendar\n\t,IfcWorkControl))\n SUBTYPE OF (IfcObject);\n\tIdentification : OPTIONAL IfcIdentifier;\n INVERSE\n\tControls : SET [0:?] OF IfcRelAssignsToControl FOR RelatingControl;\nEND_ENTITY;\n\nENTITY IfcController\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcControllerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcControllerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcControllerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCONTROLLERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcControllerType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcControllerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcControllerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcControllerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcConversionBasedUnit\n SUPERTYPE OF (ONEOF\n\t(IfcConversionBasedUnitWithOffset))\n SUBTYPE OF (IfcNamedUnit);\n\tName : IfcLabel;\n\tConversionFactor : IfcMeasureWithUnit;\n INVERSE\n\tHasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcConversionBasedUnitWithOffset\n SUBTYPE OF (IfcConversionBasedUnit);\n\tConversionOffset : IfcReal;\nEND_ENTITY;\n\nENTITY IfcConveyorSegment\n SUBTYPE OF (IfcFlowSegment);\n\tPredefinedType : OPTIONAL IfcConveyorSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcConveyorSegmentTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcConveyorSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCONVEYORSEGMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcConveyorSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcConveyorSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcConveyorSegmentTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcConveyorSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCooledBeam\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcCooledBeamTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcCooledBeamTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCooledBeamTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCOOLEDBEAMTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCooledBeamType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCooledBeamTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCooledBeamTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCooledBeamTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCoolingTower\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcCoolingTowerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcCoolingTowerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCoolingTowerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCOOLINGTOWERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCoolingTowerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcCoolingTowerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCoolingTowerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCoolingTowerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCoordinateOperation\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcMapConversion\n\t,IfcRigidOperation));\n\tSourceCRS : IfcCoordinateReferenceSystemSelect;\n\tTargetCRS : IfcCoordinateReferenceSystem;\nEND_ENTITY;\n\nENTITY IfcCoordinateReferenceSystem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcGeographicCRS\n\t,IfcProjectedCRS));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tGeodeticDatum : OPTIONAL IfcIdentifier;\n INVERSE\n\tHasCoordinateOperation : SET [0:1] OF IfcCoordinateOperation FOR SourceCRS;\n\tWellKnownText : SET [0:1] OF IfcWellKnownText FOR CoordinateReferenceSystem;\n WHERE\n\tNameOrWKT : (HIINDEX(WellKnownText) = 1) OR EXISTS(Name);\nEND_ENTITY;\n\nENTITY IfcCosineSpiral\n SUBTYPE OF (IfcSpiral);\n\tCosineTerm : IfcLengthMeasure;\n\tConstantTerm : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcCostItem\n SUBTYPE OF (IfcControl);\n\tPredefinedType : OPTIONAL IfcCostItemTypeEnum;\n\tCostValues : OPTIONAL LIST [1:?] OF IfcCostValue;\n\tCostQuantities : OPTIONAL LIST [1:?] OF IfcPhysicalQuantity;\nEND_ENTITY;\n\nENTITY IfcCostSchedule\n SUBTYPE OF (IfcControl);\n\tPredefinedType : OPTIONAL IfcCostScheduleTypeEnum;\n\tStatus : OPTIONAL IfcLabel;\n\tSubmittedOn : OPTIONAL IfcDateTime;\n\tUpdateDate : OPTIONAL IfcDateTime;\nEND_ENTITY;\n\nENTITY IfcCostValue\n SUBTYPE OF (IfcAppliedValue);\nEND_ENTITY;\n\nENTITY IfcCourse\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcCourseTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcCourseTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCourseTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCOURSETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCourseType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcCourseTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCourseTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCourseTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCovering\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcCoveringTypeEnum;\n INVERSE\n\tCoversSpaces : SET [0:1] OF IfcRelCoversSpaces FOR RelatedCoverings;\n\tCoversElements : SET [0:1] OF IfcRelCoversBldgElements FOR RelatedCoverings;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcCoveringTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCoveringTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCOVERINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCoveringType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcCoveringTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCoveringTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCoveringTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCrewResource\n SUBTYPE OF (IfcConstructionResource);\n\tPredefinedType : OPTIONAL IfcCrewResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcCrewResourceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcCrewResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcCrewResourceType\n SUBTYPE OF (IfcConstructionResourceType);\n\tPredefinedType : IfcCrewResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCrewResourceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcCrewResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeResource.ResourceType));\nEND_ENTITY;\n\nENTITY IfcCsgPrimitive3D\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBlock\n\t,IfcRectangularPyramid\n\t,IfcRightCircularCone\n\t,IfcRightCircularCylinder\n\t,IfcSphere))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tPosition : IfcAxis2Placement3D;\n DERIVE\n\t Dim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcCsgSolid\n SUBTYPE OF (IfcSolidModel);\n\tTreeRootExpression : IfcCsgSelect;\nEND_ENTITY;\n\nENTITY IfcCurrencyRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingMonetaryUnit : IfcMonetaryUnit;\n\tRelatedMonetaryUnit : IfcMonetaryUnit;\n\tExchangeRate : IfcPositiveRatioMeasure;\n\tRateDateTime : OPTIONAL IfcDateTime;\n\tRateSource : OPTIONAL IfcLibraryInformation;\nEND_ENTITY;\n\nENTITY IfcCurtainWall\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcCurtainWallTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcCurtainWallTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCurtainWallTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCCURTAINWALLTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcCurtainWallType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcCurtainWallTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcCurtainWallTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcCurtainWallTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBoundedCurve\n\t,IfcConic\n\t,IfcLine\n\t,IfcOffsetCurve\n\t,IfcPcurve\n\t,IfcPolynomialCurve\n\t,IfcSpiral\n\t,IfcSurfaceCurve))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\t Dim : IfcDimensionCount := IfcCurveDim(SELF);\nEND_ENTITY;\n\nENTITY IfcCurveBoundedPlane\n SUBTYPE OF (IfcBoundedSurface);\n\tBasisSurface : IfcPlane;\n\tOuterBoundary : IfcCurve;\n\tInnerBoundaries : SET [0:?] OF IfcCurve;\nEND_ENTITY;\n\nENTITY IfcCurveBoundedSurface\n SUBTYPE OF (IfcBoundedSurface);\n\tBasisSurface : IfcSurface;\n\tBoundaries : SET [1:?] OF IfcBoundaryCurve;\n\tImplicitOuter : IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcCurveSegment\n SUBTYPE OF (IfcSegment);\n\tPlacement : IfcPlacement;\n\tSegmentStart : IfcCurveMeasureSelect;\n\tSegmentLength : IfcCurveMeasureSelect;\n\tParentCurve : IfcCurve;\nEND_ENTITY;\n\nENTITY IfcCurveStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tCurveFont : OPTIONAL IfcCurveFontOrScaledCurveFontSelect;\n\tCurveWidth : OPTIONAL IfcSizeSelect;\n\tCurveColour : OPTIONAL IfcColour;\n\tModelOrDraughting : OPTIONAL IfcBoolean;\n WHERE\n\tIdentifiableCurveStyle : EXISTS(CurveFont) OR EXISTS(CurveWidth) OR EXISTS(CurveColour);\n\tMeasureOfWidth : (NOT(EXISTS(CurveWidth))) OR\n('IFC4X3_ADD2.IFCPOSITIVELENGTHMEASURE' IN TYPEOF(CurveWidth)) OR \n (('IFC4X3_ADD2.IFCDESCRIPTIVEMEASURE' IN TYPEOF(CurveWidth)) AND\n (CurveWidth = 'by layer'));\nEND_ENTITY;\n\nENTITY IfcCurveStyleFont\n SUBTYPE OF (IfcPresentationItem);\n\tName : OPTIONAL IfcLabel;\n\tPatternList : LIST [1:?] OF IfcCurveStyleFontPattern;\nEND_ENTITY;\n\nENTITY IfcCurveStyleFontAndScaling\n SUBTYPE OF (IfcPresentationItem);\n\tName : OPTIONAL IfcLabel;\n\tCurveStyleFont : IfcCurveStyleFontSelect;\n\tCurveFontScaling : IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcCurveStyleFontPattern\n SUBTYPE OF (IfcPresentationItem);\n\tVisibleSegmentLength : IfcLengthMeasure;\n\tInvisibleSegmentLength : IfcPositiveLengthMeasure;\n WHERE\n\tVisibleLengthGreaterEqualZero : VisibleSegmentLength >= 0.;\nEND_ENTITY;\n\nENTITY IfcCylindricalSurface\n SUBTYPE OF (IfcElementarySurface);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcDamper\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcDamperTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCDAMPERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDamperType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcDamperTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDamperTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcDamperTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDeepFoundation\n SUPERTYPE OF (ONEOF\n\t(IfcCaissonFoundation\n\t,IfcPile))\n SUBTYPE OF (IfcBuiltElement);\n WHERE\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCDEEPFOUNDATIONTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDeepFoundationType\n SUPERTYPE OF (ONEOF\n\t(IfcCaissonFoundationType\n\t,IfcPileType))\n SUBTYPE OF (IfcBuiltElementType);\nEND_ENTITY;\n\nENTITY IfcDerivedProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcMirroredProfileDef))\n SUBTYPE OF (IfcProfileDef);\n\tParentProfile : IfcProfileDef;\n\tOperator : IfcCartesianTransformationOperator2D;\n\tLabel : OPTIONAL IfcLabel;\n WHERE\n\tInvariantProfileType : SELF\\IfcProfileDef.ProfileType = ParentProfile.ProfileType;\nEND_ENTITY;\n\nENTITY IfcDerivedUnit;\n\tElements : SET [1:?] OF IfcDerivedUnitElement;\n\tUnitType : IfcDerivedUnitEnum;\n\tUserDefinedType : OPTIONAL IfcLabel;\n\tName : OPTIONAL IfcLabel;\n DERIVE\n\t Dimensions : IfcDimensionalExponents := IfcDeriveDimensionalExponents(Elements);\n WHERE\n\tWR1 : (SIZEOF (Elements) > 1) OR ((SIZEOF (Elements) = 1) AND (Elements[1].Exponent <> 1 ));\n\tWR2 : (UnitType <> IfcDerivedUnitEnum.USERDEFINED) OR\n((UnitType = IfcDerivedUnitEnum.USERDEFINED) AND \n (EXISTS(SELF.UserDefinedType)));\nEND_ENTITY;\n\nENTITY IfcDerivedUnitElement;\n\tUnit : IfcNamedUnit;\n\tExponent : INTEGER;\nEND_ENTITY;\n\nENTITY IfcDimensionalExponents;\n\tLengthExponent : INTEGER;\n\tMassExponent : INTEGER;\n\tTimeExponent : INTEGER;\n\tElectricCurrentExponent : INTEGER;\n\tThermodynamicTemperatureExponent : INTEGER;\n\tAmountOfSubstanceExponent : INTEGER;\n\tLuminousIntensityExponent : INTEGER;\nEND_ENTITY;\n\nENTITY IfcDirection\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tDirectionRatios : LIST [2:3] OF IfcReal;\n DERIVE\n\t Dim : IfcDimensionCount := HIINDEX(DirectionRatios);\n WHERE\n\tMagnitudeGreaterZero : SIZEOF(QUERY(Tmp <* DirectionRatios | Tmp <> 0.0)) > 0;\nEND_ENTITY;\n\nENTITY IfcDirectrixCurveSweptAreaSolid\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcFixedReferenceSweptAreaSolid\n\t,IfcSurfaceCurveSweptAreaSolid))\n SUBTYPE OF (IfcSweptAreaSolid);\n\tDirectrix : IfcCurve;\n\tStartParam : OPTIONAL IfcCurveMeasureSelect;\n\tEndParam : OPTIONAL IfcCurveMeasureSelect;\n WHERE\n\tDirectrixBounded : (EXISTS(StartParam) AND EXISTS(EndParam)) OR \n(SIZEOF(['IFC4X3_ADD2.IFCCONIC', 'IFC4X3_ADD2.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1);\nEND_ENTITY;\n\nENTITY IfcDirectrixDerivedReferenceSweptAreaSolid\n SUBTYPE OF (IfcFixedReferenceSweptAreaSolid);\nEND_ENTITY;\n\nENTITY IfcDiscreteAccessory\n SUBTYPE OF (IfcElementComponent);\n\tPredefinedType : OPTIONAL IfcDiscreteAccessoryTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcDiscreteAccessoryTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcDiscreteAccessoryTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCDISCRETEACCESSORYTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDiscreteAccessoryType\n SUBTYPE OF (IfcElementComponentType);\n\tPredefinedType : IfcDiscreteAccessoryTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDiscreteAccessoryTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcDiscreteAccessoryTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDistributionBoard\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcDistributionBoardTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcDistributionBoardTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcDistributionBoardTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCDISTRIBUTIONBOARDTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDistributionBoardType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcDistributionBoardTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDistributionBoardTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcDistributionBoardTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDistributionChamberElement\n SUBTYPE OF (IfcDistributionFlowElement);\n\tPredefinedType : OPTIONAL IfcDistributionChamberElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcDistributionChamberElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcDistributionChamberElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCDISTRIBUTIONCHAMBERELEMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDistributionChamberElementType\n SUBTYPE OF (IfcDistributionFlowElementType);\n\tPredefinedType : IfcDistributionChamberElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDistributionChamberElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcDistributionChamberElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDistributionCircuit\n SUBTYPE OF (IfcDistributionSystem);\nEND_ENTITY;\n\nENTITY IfcDistributionControlElement\n SUPERTYPE OF (ONEOF\n\t(IfcActuator\n\t,IfcAlarm\n\t,IfcController\n\t,IfcFlowInstrument\n\t,IfcProtectiveDeviceTrippingUnit\n\t,IfcSensor\n\t,IfcUnitaryControlElement))\n SUBTYPE OF (IfcDistributionElement);\n INVERSE\n\tAssignedToFlowElement : SET [0:1] OF IfcRelFlowControlElements FOR RelatedControlElements;\nEND_ENTITY;\n\nENTITY IfcDistributionControlElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcActuatorType\n\t,IfcAlarmType\n\t,IfcControllerType\n\t,IfcFlowInstrumentType\n\t,IfcProtectiveDeviceTrippingUnitType\n\t,IfcSensorType\n\t,IfcUnitaryControlElementType))\n SUBTYPE OF (IfcDistributionElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionElement\n SUPERTYPE OF (ONEOF\n\t(IfcDistributionControlElement\n\t,IfcDistributionFlowElement))\n SUBTYPE OF (IfcElement);\n INVERSE\n\tHasPorts : SET [0:?] OF IfcRelConnectsPortToElement FOR RelatedElement;\nEND_ENTITY;\n\nENTITY IfcDistributionElementType\n SUPERTYPE OF (ONEOF\n\t(IfcDistributionControlElementType\n\t,IfcDistributionFlowElementType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionFlowElement\n SUPERTYPE OF (ONEOF\n\t(IfcDistributionChamberElement\n\t,IfcEnergyConversionDevice\n\t,IfcFlowController\n\t,IfcFlowFitting\n\t,IfcFlowMovingDevice\n\t,IfcFlowSegment\n\t,IfcFlowStorageDevice\n\t,IfcFlowTerminal\n\t,IfcFlowTreatmentDevice))\n SUBTYPE OF (IfcDistributionElement);\n INVERSE\n\tHasControlElements : SET [0:1] OF IfcRelFlowControlElements FOR RelatingFlowElement;\nEND_ENTITY;\n\nENTITY IfcDistributionFlowElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDistributionChamberElementType\n\t,IfcEnergyConversionDeviceType\n\t,IfcFlowControllerType\n\t,IfcFlowFittingType\n\t,IfcFlowMovingDeviceType\n\t,IfcFlowSegmentType\n\t,IfcFlowStorageDeviceType\n\t,IfcFlowTerminalType\n\t,IfcFlowTreatmentDeviceType))\n SUBTYPE OF (IfcDistributionElementType);\nEND_ENTITY;\n\nENTITY IfcDistributionPort\n SUBTYPE OF (IfcPort);\n\tFlowDirection : OPTIONAL IfcFlowDirectionEnum;\n\tPredefinedType : OPTIONAL IfcDistributionPortTypeEnum;\n\tSystemType : OPTIONAL IfcDistributionSystemEnum;\nEND_ENTITY;\n\nENTITY IfcDistributionSystem\n SUPERTYPE OF (ONEOF\n\t(IfcDistributionCircuit))\n SUBTYPE OF (IfcSystem);\n\tLongName : OPTIONAL IfcLabel;\n\tPredefinedType : OPTIONAL IfcDistributionSystemEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcDistributionSystemEnum.USERDEFINED) OR\n ((PredefinedType = IfcDistributionSystemEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcDocumentInformation\n SUBTYPE OF (IfcExternalInformation);\n\tIdentification : IfcIdentifier;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tLocation : OPTIONAL IfcURIReference;\n\tPurpose : OPTIONAL IfcText;\n\tIntendedUse : OPTIONAL IfcText;\n\tScope : OPTIONAL IfcText;\n\tRevision : OPTIONAL IfcLabel;\n\tDocumentOwner : OPTIONAL IfcActorSelect;\n\tEditors : OPTIONAL SET [1:?] OF IfcActorSelect;\n\tCreationTime : OPTIONAL IfcDateTime;\n\tLastRevisionTime : OPTIONAL IfcDateTime;\n\tElectronicFormat : OPTIONAL IfcIdentifier;\n\tValidFrom : OPTIONAL IfcDate;\n\tValidUntil : OPTIONAL IfcDate;\n\tConfidentiality : OPTIONAL IfcDocumentConfidentialityEnum;\n\tStatus : OPTIONAL IfcDocumentStatusEnum;\n INVERSE\n\tDocumentInfoForObjects : SET [0:?] OF IfcRelAssociatesDocument FOR RelatingDocument;\n\tHasDocumentReferences : SET [0:?] OF IfcDocumentReference FOR ReferencedDocument;\n\tIsPointedTo : SET [0:?] OF IfcDocumentInformationRelationship FOR RelatedDocuments;\n\tIsPointer : SET [0:1] OF IfcDocumentInformationRelationship FOR RelatingDocument;\nEND_ENTITY;\n\nENTITY IfcDocumentInformationRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingDocument : IfcDocumentInformation;\n\tRelatedDocuments : SET [1:?] OF IfcDocumentInformation;\n\tRelationshipType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcDocumentReference\n SUBTYPE OF (IfcExternalReference);\n\tDescription : OPTIONAL IfcText;\n\tReferencedDocument : OPTIONAL IfcDocumentInformation;\n INVERSE\n\tDocumentRefForObjects : SET [0:?] OF IfcRelAssociatesDocument FOR RelatingDocument;\n WHERE\n\tWR1 : EXISTS(Name) XOR EXISTS(ReferencedDocument);\nEND_ENTITY;\n\nENTITY IfcDoor\n SUBTYPE OF (IfcBuiltElement);\n\tOverallHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tOverallWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : OPTIONAL IfcDoorTypeEnum;\n\tOperationType : OPTIONAL IfcDoorTypeOperationEnum;\n\tUserDefinedOperationType : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcDoorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcDoorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCDOORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDoorLiningProperties\n SUBTYPE OF (IfcPreDefinedPropertySet);\n\tLiningDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tLiningThickness : OPTIONAL IfcNonNegativeLengthMeasure;\n\tThresholdDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tThresholdThickness : OPTIONAL IfcNonNegativeLengthMeasure;\n\tTransomThickness : OPTIONAL IfcNonNegativeLengthMeasure;\n\tTransomOffset : OPTIONAL IfcLengthMeasure;\n\tLiningOffset : OPTIONAL IfcLengthMeasure;\n\tThresholdOffset : OPTIONAL IfcLengthMeasure;\n\tCasingThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tCasingDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n\tLiningToPanelOffsetX : OPTIONAL IfcLengthMeasure;\n\tLiningToPanelOffsetY : OPTIONAL IfcLengthMeasure;\n WHERE\n\tWR31 : NOT(EXISTS(LiningDepth) AND NOT(EXISTS(LiningThickness)));\n\tWR32 : NOT(EXISTS(ThresholdDepth) AND NOT(EXISTS(ThresholdThickness)));\n\tWR33 : (EXISTS(TransomOffset) AND EXISTS(TransomThickness)) XOR\n(NOT(EXISTS(TransomOffset)) AND NOT(EXISTS(TransomThickness)));\n\tWR34 : (EXISTS(CasingDepth) AND EXISTS(CasingThickness)) XOR\n(NOT(EXISTS(CasingDepth)) AND NOT(EXISTS(CasingThickness)));\n\tWR35 : (EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1])) \nAND \n('IFC4X3_ADD2.IFCDOORTYPE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]));\nEND_ENTITY;\n\nENTITY IfcDoorPanelProperties\n SUBTYPE OF (IfcPreDefinedPropertySet);\n\tPanelDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tPanelOperation : IfcDoorPanelOperationEnum;\n\tPanelWidth : OPTIONAL IfcNormalisedRatioMeasure;\n\tPanelPosition : IfcDoorPanelPositionEnum;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n WHERE\n\tApplicableToType : (EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1])) \nAND \n('IFC4X3_ADD2.IFCDOORTYPE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]));\nEND_ENTITY;\n\nENTITY IfcDoorType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcDoorTypeEnum;\n\tOperationType : IfcDoorTypeOperationEnum;\n\tParameterTakesPrecedence : OPTIONAL IfcBoolean;\n\tUserDefinedOperationType : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDoorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcDoorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDraughtingPreDefinedColour\n SUBTYPE OF (IfcPreDefinedColour);\n WHERE\n\tPreDefinedColourNames : SELF\\IfcPreDefinedItem.Name IN ['black','red','green','blue','yellow',\n     'magenta','cyan','white','by layer'];\nEND_ENTITY;\n\nENTITY IfcDraughtingPreDefinedCurveFont\n SUBTYPE OF (IfcPreDefinedCurveFont);\n WHERE\n\tPreDefinedCurveFontNames : SELF\\IfcPredefinedItem.Name IN\n       ['continuous',\n        'chain',\n        'chain double dash',\n        'dashed',\n        'dotted',\n        'by layer'];\nEND_ENTITY;\n\nENTITY IfcDuctFitting\n SUBTYPE OF (IfcFlowFitting);\n\tPredefinedType : OPTIONAL IfcDuctFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCDUCTFITTINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDuctFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcDuctFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDuctFittingTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcDuctFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDuctSegment\n SUBTYPE OF (IfcFlowSegment);\n\tPredefinedType : OPTIONAL IfcDuctSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcDuctSegmentTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcDuctSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCDUCTSEGMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDuctSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcDuctSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDuctSegmentTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcDuctSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcDuctSilencer\n SUBTYPE OF (IfcFlowTreatmentDevice);\n\tPredefinedType : OPTIONAL IfcDuctSilencerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcDuctSilencerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcDuctSilencerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCDUCTSILENCERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcDuctSilencerType\n SUBTYPE OF (IfcFlowTreatmentDeviceType);\n\tPredefinedType : IfcDuctSilencerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcDuctSilencerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcDuctSilencerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcEarthworksCut\n SUBTYPE OF (IfcFeatureElementSubtraction);\n\tPredefinedType : OPTIONAL IfcEarthworksCutTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcEarthworksCutTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcEarthworksCutTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcEarthworksElement\n SUPERTYPE OF (ONEOF\n\t(IfcEarthworksFill\n\t,IfcReinforcedSoil))\n SUBTYPE OF (IfcBuiltElement);\nEND_ENTITY;\n\nENTITY IfcEarthworksFill\n SUBTYPE OF (IfcEarthworksElement);\n\tPredefinedType : OPTIONAL IfcEarthworksFillTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcEarthworksFillTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcEarthworksFillTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcEdge\n SUPERTYPE OF (ONEOF\n\t(IfcEdgeCurve\n\t,IfcOrientedEdge\n\t,IfcSubedge))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tEdgeStart : IfcVertex;\n\tEdgeEnd : IfcVertex;\nEND_ENTITY;\n\nENTITY IfcEdgeCurve\n SUBTYPE OF (IfcEdge);\n\tEdgeGeometry : IfcCurve;\n\tSameSense : IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcEdgeLoop\n SUBTYPE OF (IfcLoop);\n\tEdgeList : LIST [1:?] OF IfcOrientedEdge;\n DERIVE\n\t Ne : IfcInteger := SIZEOF(EdgeList);\n WHERE\n\tIsClosed : (EdgeList[1].EdgeStart) :=: (EdgeList[Ne].EdgeEnd);\n\tIsContinuous : IfcLoopHeadToTail(SELF);\nEND_ENTITY;\n\nENTITY IfcElectricAppliance\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcElectricApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcElectricApplianceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcElectricApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCELECTRICAPPLIANCETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricApplianceType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcElectricApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricApplianceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcElectricApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElectricDistributionBoard\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcElectricDistributionBoardTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcElectricDistributionBoardTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcElectricDistributionBoardTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCELECTRICDISTRIBUTIONBOARDTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricDistributionBoardType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcElectricDistributionBoardTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricDistributionBoardTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcElectricDistributionBoardTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElectricFlowStorageDevice\n SUBTYPE OF (IfcFlowStorageDevice);\n\tPredefinedType : OPTIONAL IfcElectricFlowStorageDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCELECTRICFLOWSTORAGEDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricFlowStorageDeviceType\n SUBTYPE OF (IfcFlowStorageDeviceType);\n\tPredefinedType : IfcElectricFlowStorageDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcElectricFlowStorageDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElectricFlowTreatmentDevice\n SUBTYPE OF (IfcFlowTreatmentDevice);\n\tPredefinedType : OPTIONAL IfcElectricFlowTreatmentDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcElectricFlowTreatmentDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcElectricFlowTreatmentDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCELECTRICFLOWTREATMENTDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricFlowTreatmentDeviceType\n SUBTYPE OF (IfcFlowTreatmentDeviceType);\n\tPredefinedType : IfcElectricFlowTreatmentDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricFlowTreatmentDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcElectricFlowTreatmentDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElectricGenerator\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcElectricGeneratorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcElectricGeneratorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcElectricGeneratorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCELECTRICGENERATORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricGeneratorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcElectricGeneratorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricGeneratorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcElectricGeneratorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElectricMotor\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcElectricMotorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcElectricMotorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcElectricMotorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCELECTRICMOTORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricMotorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcElectricMotorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricMotorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcElectricMotorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElectricTimeControl\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcElectricTimeControlTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcElectricTimeControlTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcElectricTimeControlTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCELECTRICTIMECONTROLTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElectricTimeControlType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcElectricTimeControlTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElectricTimeControlTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcElectricTimeControlTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuiltElement\n\t,IfcCivilElement\n\t,IfcDistributionElement\n\t,IfcElementAssembly\n\t,IfcElementComponent\n\t,IfcFeatureElement\n\t,IfcFurnishingElement\n\t,IfcGeographicElement\n\t,IfcGeotechnicalElement\n\t,IfcTransportationDevice\n\t,IfcVirtualElement))\n SUBTYPE OF (IfcProduct);\n\tTag : OPTIONAL IfcIdentifier;\n INVERSE\n\tFillsVoids : SET [0:1] OF IfcRelFillsElement FOR RelatedBuildingElement;\n\tConnectedTo : SET [0:?] OF IfcRelConnectsElements FOR RelatingElement;\n\tIsInterferedByElements : SET [0:?] OF IfcRelInterferesElements FOR RelatedElement;\n\tInterferesElements : SET [0:?] OF IfcRelInterferesElements FOR RelatingElement;\n\tHasProjections : SET [0:?] OF IfcRelProjectsElement FOR RelatingElement;\n\tHasOpenings : SET [0:?] OF IfcRelVoidsElement FOR RelatingBuildingElement;\n\tIsConnectionRealization : SET [0:?] OF IfcRelConnectsWithRealizingElements FOR RealizingElements;\n\tProvidesBoundaries : SET [0:?] OF IfcRelSpaceBoundary FOR RelatedBuildingElement;\n\tConnectedFrom : SET [0:?] OF IfcRelConnectsElements FOR RelatedElement;\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\n\tHasCoverings : SET [0:?] OF IfcRelCoversBldgElements FOR RelatingBuildingElement;\n\tHasSurfaceFeatures : SET [0:?] OF IfcRelAdheresToElement FOR RelatingElement;\nEND_ENTITY;\n\nENTITY IfcElementAssembly\n SUBTYPE OF (IfcElement);\n\tAssemblyPlace : OPTIONAL IfcAssemblyPlaceEnum;\n\tPredefinedType : OPTIONAL IfcElementAssemblyTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcElementAssemblyTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcElementAssemblyTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCELEMENTASSEMBLYTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcElementAssemblyType\n SUBTYPE OF (IfcElementType);\n\tPredefinedType : IfcElementAssemblyTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcElementAssemblyTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcElementAssemblyTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcElementComponent\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuildingElementPart\n\t,IfcDiscreteAccessory\n\t,IfcFastener\n\t,IfcImpactProtectionDevice\n\t,IfcMechanicalFastener\n\t,IfcReinforcingElement\n\t,IfcSign\n\t,IfcVibrationDamper\n\t,IfcVibrationIsolator))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcElementComponentType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuildingElementPartType\n\t,IfcDiscreteAccessoryType\n\t,IfcFastenerType\n\t,IfcImpactProtectionDeviceType\n\t,IfcMechanicalFastenerType\n\t,IfcReinforcingElementType\n\t,IfcSignType\n\t,IfcVibrationDamperType\n\t,IfcVibrationIsolatorType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcElementQuantity\n SUBTYPE OF (IfcQuantitySet);\n\tMethodOfMeasurement : OPTIONAL IfcLabel;\n\tQuantities : SET [1:?] OF IfcPhysicalQuantity;\n WHERE\n\tUniqueQuantityNames : IfcUniqueQuantityNames(Quantities);\nEND_ENTITY;\n\nENTITY IfcElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuiltElementType\n\t,IfcCivilElementType\n\t,IfcDistributionElementType\n\t,IfcElementAssemblyType\n\t,IfcElementComponentType\n\t,IfcFurnishingElementType\n\t,IfcGeographicElementType\n\t,IfcTransportationDeviceType))\n SUBTYPE OF (IfcTypeProduct);\n\tElementType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcElementarySurface\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCylindricalSurface\n\t,IfcPlane\n\t,IfcSphericalSurface\n\t,IfcToroidalSurface))\n SUBTYPE OF (IfcSurface);\n\tPosition : IfcAxis2Placement3D;\nEND_ENTITY;\n\nENTITY IfcEllipse\n SUBTYPE OF (IfcConic);\n\tSemiAxis1 : IfcPositiveLengthMeasure;\n\tSemiAxis2 : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcEllipseProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tSemiAxis1 : IfcPositiveLengthMeasure;\n\tSemiAxis2 : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcEnergyConversionDevice\n SUPERTYPE OF (ONEOF\n\t(IfcAirToAirHeatRecovery\n\t,IfcBoiler\n\t,IfcBurner\n\t,IfcChiller\n\t,IfcCoil\n\t,IfcCondenser\n\t,IfcCooledBeam\n\t,IfcCoolingTower\n\t,IfcElectricGenerator\n\t,IfcElectricMotor\n\t,IfcEngine\n\t,IfcEvaporativeCooler\n\t,IfcEvaporator\n\t,IfcHeatExchanger\n\t,IfcHumidifier\n\t,IfcMotorConnection\n\t,IfcSolarDevice\n\t,IfcTransformer\n\t,IfcTubeBundle\n\t,IfcUnitaryEquipment))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcEnergyConversionDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAirToAirHeatRecoveryType\n\t,IfcBoilerType\n\t,IfcBurnerType\n\t,IfcChillerType\n\t,IfcCoilType\n\t,IfcCondenserType\n\t,IfcCooledBeamType\n\t,IfcCoolingTowerType\n\t,IfcElectricGeneratorType\n\t,IfcElectricMotorType\n\t,IfcEngineType\n\t,IfcEvaporativeCoolerType\n\t,IfcEvaporatorType\n\t,IfcHeatExchangerType\n\t,IfcHumidifierType\n\t,IfcMotorConnectionType\n\t,IfcSolarDeviceType\n\t,IfcTransformerType\n\t,IfcTubeBundleType\n\t,IfcUnitaryEquipmentType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcEngine\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcEngineTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcEngineTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcEngineTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCENGINETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcEngineType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcEngineTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcEngineTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcEngineTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcEvaporativeCooler\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcEvaporativeCoolerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcEvaporativeCoolerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcEvaporativeCoolerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCEVAPORATIVECOOLERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcEvaporativeCoolerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcEvaporativeCoolerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcEvaporativeCoolerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcEvaporativeCoolerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcEvaporator\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcEvaporatorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcEvaporatorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcEvaporatorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCEVAPORATORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcEvaporatorType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcEvaporatorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcEvaporatorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcEvaporatorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcEvent\n SUBTYPE OF (IfcProcess);\n\tPredefinedType : OPTIONAL IfcEventTypeEnum;\n\tEventTriggerType : OPTIONAL IfcEventTriggerTypeEnum;\n\tUserDefinedEventTriggerType : OPTIONAL IfcLabel;\n\tEventOccurenceTime : OPTIONAL IfcEventTime;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcEventTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEventTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : NOT(EXISTS(EventTriggerType)) OR (EventTriggerType <> IfcEventTriggerTypeEnum.USERDEFINED) OR ((EventTriggerType = IfcEventTriggerTypeEnum.USERDEFINED) AND EXISTS(UserDefinedEventTriggerType));\nEND_ENTITY;\n\nENTITY IfcEventTime\n SUBTYPE OF (IfcSchedulingTime);\n\tActualDate : OPTIONAL IfcDateTime;\n\tEarlyDate : OPTIONAL IfcDateTime;\n\tLateDate : OPTIONAL IfcDateTime;\n\tScheduleDate : OPTIONAL IfcDateTime;\nEND_ENTITY;\n\nENTITY IfcEventType\n SUBTYPE OF (IfcTypeProcess);\n\tPredefinedType : IfcEventTypeEnum;\n\tEventTriggerType : IfcEventTriggerTypeEnum;\n\tUserDefinedEventTriggerType : OPTIONAL IfcLabel;\n WHERE\n\tCorrectEventTriggerType : (EventTriggerType <> IfcEventTriggerTypeEnum.USERDEFINED) OR ((EventTriggerType = IfcEventTriggerTypeEnum.USERDEFINED) AND EXISTS(UserDefinedEventTriggerType)) ;\n\tCorrectPredefinedType : (PredefinedType <> IfcEventTypeEnum.USERDEFINED) OR ((PredefinedType = IfcEventTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeProcess.ProcessType));\nEND_ENTITY;\n\nENTITY IfcExtendedProperties\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcMaterialProperties\n\t,IfcProfileProperties))\n SUBTYPE OF (IfcPropertyAbstraction);\n\tName : OPTIONAL IfcIdentifier;\n\tDescription : OPTIONAL IfcText;\n\tProperties : SET [1:?] OF IfcProperty;\nEND_ENTITY;\n\nENTITY IfcExternalInformation\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcClassification\n\t,IfcDocumentInformation\n\t,IfcLibraryInformation));\nEND_ENTITY;\n\nENTITY IfcExternalReference\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcClassificationReference\n\t,IfcDocumentReference\n\t,IfcExternallyDefinedHatchStyle\n\t,IfcExternallyDefinedSurfaceStyle\n\t,IfcExternallyDefinedTextFont\n\t,IfcLibraryReference));\n\tLocation : OPTIONAL IfcURIReference;\n\tIdentification : OPTIONAL IfcIdentifier;\n\tName : OPTIONAL IfcLabel;\n INVERSE\n\tExternalReferenceForResources : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatingReference;\n WHERE\n\tWR1 : EXISTS(Identification) OR EXISTS(Location) OR EXISTS(Name);\nEND_ENTITY;\n\nENTITY IfcExternalReferenceRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingReference : IfcExternalReference;\n\tRelatedResourceObjects : SET [1:?] OF IfcResourceObjectSelect;\nEND_ENTITY;\n\nENTITY IfcExternalSpatialElement\n SUBTYPE OF (IfcExternalSpatialStructureElement);\n\tPredefinedType : OPTIONAL IfcExternalSpatialElementTypeEnum;\n INVERSE\n\tBoundedBy : SET [0:?] OF IfcRelSpaceBoundary FOR RelatingSpace;\nEND_ENTITY;\n\nENTITY IfcExternalSpatialStructureElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcExternalSpatialElement))\n SUBTYPE OF (IfcSpatialElement);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedHatchStyle\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedSurfaceStyle\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExternallyDefinedTextFont\n SUBTYPE OF (IfcExternalReference);\nEND_ENTITY;\n\nENTITY IfcExtrudedAreaSolid\n SUPERTYPE OF (ONEOF\n\t(IfcExtrudedAreaSolidTapered))\n SUBTYPE OF (IfcSweptAreaSolid);\n\tExtrudedDirection : IfcDirection;\n\tDepth : IfcPositiveLengthMeasure;\n WHERE\n\tValidExtrusionDirection : IfcDotProduct(IfcRepresentationItem() || IfcGeometricRepresentationItem() || IfcDirection([0.0,0.0,1.0]), SELF.ExtrudedDirection) <> 0.0;\nEND_ENTITY;\n\nENTITY IfcExtrudedAreaSolidTapered\n SUBTYPE OF (IfcExtrudedAreaSolid);\n\tEndSweptArea : IfcProfileDef;\n WHERE\n\tCorrectProfileAssignment : IfcTaperedSweptAreaProfiles(SELF\\IfcSweptAreaSolid.SweptArea, SELF.EndSweptArea);\nEND_ENTITY;\n\nENTITY IfcFace\n SUPERTYPE OF (ONEOF\n\t(IfcFaceSurface))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tBounds : SET [1:?] OF IfcFaceBound;\n INVERSE\n\tHasTextureMaps : SET [0:?] OF IfcTextureMap FOR MappedTo;\n WHERE\n\tHasOuterBound : SIZEOF(QUERY(temp <* Bounds | 'IFC4X3_ADD2.IFCFACEOUTERBOUND' IN TYPEOF(temp))) <= 1;\nEND_ENTITY;\n\nENTITY IfcFaceBasedSurfaceModel\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tFbsmFaces : SET [1:?] OF IfcConnectedFaceSet;\n DERIVE\n\t Dim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcFaceBound\n SUPERTYPE OF (ONEOF\n\t(IfcFaceOuterBound))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tBound : IfcLoop;\n\tOrientation : IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcFaceOuterBound\n SUBTYPE OF (IfcFaceBound);\nEND_ENTITY;\n\nENTITY IfcFaceSurface\n SUPERTYPE OF (ONEOF\n\t(IfcAdvancedFace))\n SUBTYPE OF (IfcFace);\n\tFaceSurface : IfcSurface;\n\tSameSense : IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcFacetedBrep\n SUPERTYPE OF (ONEOF\n\t(IfcFacetedBrepWithVoids))\n SUBTYPE OF (IfcManifoldSolidBrep);\nEND_ENTITY;\n\nENTITY IfcFacetedBrepWithVoids\n SUBTYPE OF (IfcFacetedBrep);\n\tVoids : SET [1:?] OF IfcClosedShell;\nEND_ENTITY;\n\nENTITY IfcFacility\n SUPERTYPE OF (ONEOF\n\t(IfcBridge\n\t,IfcBuilding\n\t,IfcMarineFacility\n\t,IfcRailway\n\t,IfcRoad))\n SUBTYPE OF (IfcSpatialStructureElement);\nEND_ENTITY;\n\nENTITY IfcFacilityPart\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBridgePart\n\t,IfcFacilityPartCommon\n\t,IfcMarinePart\n\t,IfcRailwayPart\n\t,IfcRoadPart))\n SUBTYPE OF (IfcSpatialStructureElement);\n\tUsageType : IfcFacilityUsageEnum;\nEND_ENTITY;\n\nENTITY IfcFacilityPartCommon\n SUBTYPE OF (IfcFacilityPart);\n\tPredefinedType : OPTIONAL IfcFacilityPartCommonTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcFacilityPartCommonTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcFacilityPartCommonTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcFailureConnectionCondition\n SUBTYPE OF (IfcStructuralConnectionCondition);\n\tTensionFailureX : OPTIONAL IfcForceMeasure;\n\tTensionFailureY : OPTIONAL IfcForceMeasure;\n\tTensionFailureZ : OPTIONAL IfcForceMeasure;\n\tCompressionFailureX : OPTIONAL IfcForceMeasure;\n\tCompressionFailureY : OPTIONAL IfcForceMeasure;\n\tCompressionFailureZ : OPTIONAL IfcForceMeasure;\nEND_ENTITY;\n\nENTITY IfcFan\n SUBTYPE OF (IfcFlowMovingDevice);\n\tPredefinedType : OPTIONAL IfcFanTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcFanTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcFanTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCFANTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFanType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcFanTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFanTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcFanTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFastener\n SUBTYPE OF (IfcElementComponent);\n\tPredefinedType : OPTIONAL IfcFastenerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcFastenerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcFastenerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCFASTENERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFastenerType\n SUBTYPE OF (IfcElementComponentType);\n\tPredefinedType : IfcFastenerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFastenerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcFastenerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFeatureElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcFeatureElementAddition\n\t,IfcFeatureElementSubtraction\n\t,IfcSurfaceFeature))\n SUBTYPE OF (IfcElement);\n WHERE\n\tNotContained : SIZEOF(ContainedInStructure) = 0;\nEND_ENTITY;\n\nENTITY IfcFeatureElementAddition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcProjectionElement))\n SUBTYPE OF (IfcFeatureElement);\n INVERSE\n\tProjectsElements : IfcRelProjectsElement FOR RelatedFeatureElement;\nEND_ENTITY;\n\nENTITY IfcFeatureElementSubtraction\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcEarthworksCut\n\t,IfcOpeningElement\n\t,IfcVoidingFeature))\n SUBTYPE OF (IfcFeatureElement);\n INVERSE\n\tVoidsElements : IfcRelVoidsElement FOR RelatedOpeningElement;\n WHERE\n\tHasNoSubtraction : SIZEOF(SELF\\IfcElement.HasOpenings) = 0;\n\tIsNotFilling : SIZEOF(SELF\\IfcElement.FillsVoids) = 0;\nEND_ENTITY;\n\nENTITY IfcFillAreaStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tFillStyles : SET [1:?] OF IfcFillStyleSelect;\n\tModelOrDraughting : OPTIONAL IfcBoolean;\n WHERE\n\tConsistentHatchStyleDef : IfcCorrectFillAreaStyle(SELF.FillStyles);\n\tMaxOneColour : SIZEOF(QUERY(Style <* SELF.FillStyles |\n  'IFC4X3_ADD2.IFCCOLOUR' IN\n   TYPEOF(Style)\n  )) <= 1;\n\tMaxOneExtHatchStyle : SIZEOF(QUERY(Style <* SELF.FillStyles |\n  'IFC4X3_ADD2.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN\n   TYPEOF(Style)\n  )) <= 1;\nEND_ENTITY;\n\nENTITY IfcFillAreaStyleHatching\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tHatchLineAppearance : IfcCurveStyle;\n\tStartOfNextHatchLine : IfcHatchLineDistanceSelect;\n\tPointOfReferenceHatchLine : OPTIONAL IfcCartesianPoint;\n\tPatternStart : OPTIONAL IfcCartesianPoint;\n\tHatchLineAngle : IfcPlaneAngleMeasure;\n WHERE\n\tPatternStart2D : NOT(EXISTS(PatternStart)) OR (PatternStart.Dim = 2)\n;\n\tRefHatchLine2D : NOT(EXISTS(PointOfReferenceHatchLine)) OR (PointOfReferenceHatchLine.Dim = 2);\nEND_ENTITY;\n\nENTITY IfcFillAreaStyleTiles\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tTilingPattern : LIST [2:2] OF IfcVector;\n\tTiles : SET [1:?] OF IfcStyledItem;\n\tTilingScale : IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcFilter\n SUBTYPE OF (IfcFlowTreatmentDevice);\n\tPredefinedType : OPTIONAL IfcFilterTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcFilterTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcFilterTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCFILTERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFilterType\n SUBTYPE OF (IfcFlowTreatmentDeviceType);\n\tPredefinedType : IfcFilterTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFilterTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcFilterTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFireSuppressionTerminal\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcFireSuppressionTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcFireSuppressionTerminalTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcFireSuppressionTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCFIRESUPPRESSIONTERMINALTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFireSuppressionTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcFireSuppressionTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFireSuppressionTerminalTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcFireSuppressionTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFixedReferenceSweptAreaSolid\n SUPERTYPE OF (ONEOF\n\t(IfcDirectrixDerivedReferenceSweptAreaSolid))\n SUBTYPE OF (IfcDirectrixCurveSweptAreaSolid);\n\tFixedReference : IfcDirection;\nEND_ENTITY;\n\nENTITY IfcFlowController\n SUPERTYPE OF (ONEOF\n\t(IfcAirTerminalBox\n\t,IfcDamper\n\t,IfcDistributionBoard\n\t,IfcElectricDistributionBoard\n\t,IfcElectricTimeControl\n\t,IfcFlowMeter\n\t,IfcProtectiveDevice\n\t,IfcSwitchingDevice\n\t,IfcValve))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowControllerType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAirTerminalBoxType\n\t,IfcDamperType\n\t,IfcDistributionBoardType\n\t,IfcElectricDistributionBoardType\n\t,IfcElectricTimeControlType\n\t,IfcFlowMeterType\n\t,IfcProtectiveDeviceType\n\t,IfcSwitchingDeviceType\n\t,IfcValveType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowFitting\n SUPERTYPE OF (ONEOF\n\t(IfcCableCarrierFitting\n\t,IfcCableFitting\n\t,IfcDuctFitting\n\t,IfcJunctionBox\n\t,IfcPipeFitting))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowFittingType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCableCarrierFittingType\n\t,IfcCableFittingType\n\t,IfcDuctFittingType\n\t,IfcJunctionBoxType\n\t,IfcPipeFittingType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowInstrument\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcFlowInstrumentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcFlowInstrumentTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcFlowInstrumentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCFLOWINSTRUMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFlowInstrumentType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcFlowInstrumentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFlowInstrumentTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcFlowInstrumentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFlowMeter\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcFlowMeterTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcFlowMeterTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcFlowMeterTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCFLOWMETERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFlowMeterType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcFlowMeterTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFlowMeterTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcFlowMeterTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFlowMovingDevice\n SUPERTYPE OF (ONEOF\n\t(IfcCompressor\n\t,IfcFan\n\t,IfcPump))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowMovingDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCompressorType\n\t,IfcFanType\n\t,IfcPumpType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowSegment\n SUPERTYPE OF (ONEOF\n\t(IfcCableCarrierSegment\n\t,IfcCableSegment\n\t,IfcConveyorSegment\n\t,IfcDuctSegment\n\t,IfcPipeSegment))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowSegmentType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCableCarrierSegmentType\n\t,IfcCableSegmentType\n\t,IfcConveyorSegmentType\n\t,IfcDuctSegmentType\n\t,IfcPipeSegmentType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowStorageDevice\n SUPERTYPE OF (ONEOF\n\t(IfcElectricFlowStorageDevice\n\t,IfcTank))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowStorageDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcElectricFlowStorageDeviceType\n\t,IfcTankType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowTerminal\n SUPERTYPE OF (ONEOF\n\t(IfcAirTerminal\n\t,IfcAudioVisualAppliance\n\t,IfcCommunicationsAppliance\n\t,IfcElectricAppliance\n\t,IfcFireSuppressionTerminal\n\t,IfcLamp\n\t,IfcLightFixture\n\t,IfcLiquidTerminal\n\t,IfcMedicalDevice\n\t,IfcMobileTelecommunicationsAppliance\n\t,IfcOutlet\n\t,IfcSanitaryTerminal\n\t,IfcSignal\n\t,IfcSpaceHeater\n\t,IfcStackTerminal\n\t,IfcWasteTerminal))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowTerminalType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAirTerminalType\n\t,IfcAudioVisualApplianceType\n\t,IfcCommunicationsApplianceType\n\t,IfcElectricApplianceType\n\t,IfcFireSuppressionTerminalType\n\t,IfcLampType\n\t,IfcLightFixtureType\n\t,IfcLiquidTerminalType\n\t,IfcMedicalDeviceType\n\t,IfcMobileTelecommunicationsApplianceType\n\t,IfcOutletType\n\t,IfcSanitaryTerminalType\n\t,IfcSignalType\n\t,IfcSpaceHeaterType\n\t,IfcStackTerminalType\n\t,IfcWasteTerminalType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFlowTreatmentDevice\n SUPERTYPE OF (ONEOF\n\t(IfcDuctSilencer\n\t,IfcElectricFlowTreatmentDevice\n\t,IfcFilter\n\t,IfcInterceptor))\n SUBTYPE OF (IfcDistributionFlowElement);\nEND_ENTITY;\n\nENTITY IfcFlowTreatmentDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDuctSilencerType\n\t,IfcElectricFlowTreatmentDeviceType\n\t,IfcFilterType\n\t,IfcInterceptorType))\n SUBTYPE OF (IfcDistributionFlowElementType);\nEND_ENTITY;\n\nENTITY IfcFooting\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcFootingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCFOOTINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFootingType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcFootingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcFootingTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcFootingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcFurnishingElement\n SUPERTYPE OF (ONEOF\n\t(IfcFurniture\n\t,IfcSystemFurnitureElement))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcFurnishingElementType\n SUPERTYPE OF (ONEOF\n\t(IfcFurnitureType\n\t,IfcSystemFurnitureElementType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcFurniture\n SUBTYPE OF (IfcFurnishingElement);\n\tPredefinedType : OPTIONAL IfcFurnitureTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcFurnitureTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcFurnitureTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCFURNITURETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcFurnitureType\n SUBTYPE OF (IfcFurnishingElementType);\n\tAssemblyPlace : IfcAssemblyPlaceEnum;\n\tPredefinedType : OPTIONAL IfcFurnitureTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcFurnitureTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcFurnitureTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcGeographicCRS\n SUBTYPE OF (IfcCoordinateReferenceSystem);\n\tPrimeMeridian : OPTIONAL IfcIdentifier;\n\tAngleUnit : OPTIONAL IfcNamedUnit;\n\tHeightUnit : OPTIONAL IfcNamedUnit;\n WHERE\n\tAngleUnitIsPlaneAngle : NOT(EXISTS(SELF.AngleUnit)) OR (SELF.AngleUnit.UnitType=IfcUnitEnum.PLANEANGLEUNIT);\n\tHeightUnitIsLength : NOT(EXISTS(SELF.HeightUnit)) OR (SELF.HeightUnit.UnitType=IfcUnitEnum.LENGTHUNIT);\nEND_ENTITY;\n\nENTITY IfcGeographicElement\n SUBTYPE OF (IfcElement);\n\tPredefinedType : OPTIONAL IfcGeographicElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcGeographicElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcGeographicElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCGEOGRAPHICELEMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcGeographicElementType\n SUBTYPE OF (IfcElementType);\n\tPredefinedType : IfcGeographicElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcGeographicElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcGeographicElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcGeometricCurveSet\n SUBTYPE OF (IfcGeometricSet);\n WHERE\n\tNoSurfaces : SIZEOF(QUERY(Temp <* SELF\\IfcGeometricSet.Elements |\n'IFC4X3_ADD2.IFCSURFACE' IN TYPEOF(Temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationContext\n SUPERTYPE OF (ONEOF\n\t(IfcGeometricRepresentationSubContext))\n SUBTYPE OF (IfcRepresentationContext);\n\tCoordinateSpaceDimension : IfcDimensionCount;\n\tPrecision : OPTIONAL IfcReal;\n\tWorldCoordinateSystem : IfcAxis2Placement;\n\tTrueNorth : OPTIONAL IfcDirection;\n INVERSE\n\tHasSubContexts : SET [0:?] OF IfcGeometricRepresentationSubContext FOR ParentContext;\n\tHasCoordinateOperation : SET [0:1] OF IfcCoordinateOperation FOR SourceCRS;\n WHERE\n\tNorth2D : NOT(EXISTS(TrueNorth)) OR (HIINDEX(TrueNorth.DirectionRatios) = 2);\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAnnotationFillArea\n\t,IfcBooleanResult\n\t,IfcBoundingBox\n\t,IfcCartesianPointList\n\t,IfcCartesianTransformationOperator\n\t,IfcCsgPrimitive3D\n\t,IfcCurve\n\t,IfcDirection\n\t,IfcFaceBasedSurfaceModel\n\t,IfcFillAreaStyleHatching\n\t,IfcFillAreaStyleTiles\n\t,IfcGeometricSet\n\t,IfcHalfSpaceSolid\n\t,IfcLightSource\n\t,IfcPlacement\n\t,IfcPlanarExtent\n\t,IfcPoint\n\t,IfcSectionedSpine\n\t,IfcSegment\n\t,IfcShellBasedSurfaceModel\n\t,IfcSolidModel\n\t,IfcSurface\n\t,IfcTessellatedItem\n\t,IfcTextLiteral\n\t,IfcVector))\n SUBTYPE OF (IfcRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcGeometricRepresentationSubContext\n SUBTYPE OF (IfcGeometricRepresentationContext);\n\tParentContext : IfcGeometricRepresentationContext;\n\tTargetScale : OPTIONAL IfcPositiveRatioMeasure;\n\tTargetView : IfcGeometricProjectionEnum;\n\tUserDefinedTargetView : OPTIONAL IfcLabel;\n DERIVE\n\t SELF\\IfcGeometricRepresentationContext.WorldCoordinateSystem : IfcAxis2Placement := ParentContext.WorldCoordinateSystem;\n\t SELF\\IfcGeometricRepresentationContext.CoordinateSpaceDimension : IfcDimensionCount := ParentContext.CoordinateSpaceDimension;\n\t SELF\\IfcGeometricRepresentationContext.TrueNorth : IfcDirection := NVL(ParentContext.TrueNorth, IfcConvertDirectionInto2D(SELF\\IfcGeometricRepresentationContext.WorldCoordinateSystem.P[2]));\n\t SELF\\IfcGeometricRepresentationContext.Precision : IfcReal := NVL(ParentContext.Precision,1.E-5);\n WHERE\n\tNoCoordOperation : SIZEOF(SELF\\IfcGeometricRepresentationContext.HasCoordinateOperation) = 0;\n\tParentNoSub : NOT('IFC4X3_ADD2.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(ParentContext));\n\tUserTargetProvided :  (TargetView <> IfcGeometricProjectionEnum.USERDEFINED) OR \n((TargetView =  IfcGeometricProjectionEnum.USERDEFINED) AND EXISTS(UserDefinedTargetView)) ;\nEND_ENTITY;\n\nENTITY IfcGeometricSet\n SUPERTYPE OF (ONEOF\n\t(IfcGeometricCurveSet))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tElements : SET [1:?] OF IfcGeometricSetSelect;\n DERIVE\n\t Dim : IfcDimensionCount := Elements[1].Dim;\n WHERE\n\tConsistentDim : SIZEOF(QUERY(Temp <* Elements |\n  Temp.Dim <> Elements[1].Dim))\n= 0;\nEND_ENTITY;\n\nENTITY IfcGeomodel\n SUBTYPE OF (IfcGeotechnicalAssembly);\nEND_ENTITY;\n\nENTITY IfcGeoslice\n SUBTYPE OF (IfcGeotechnicalAssembly);\nEND_ENTITY;\n\nENTITY IfcGeotechnicalAssembly\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBorehole\n\t,IfcGeomodel\n\t,IfcGeoslice))\n SUBTYPE OF (IfcGeotechnicalElement);\nEND_ENTITY;\n\nENTITY IfcGeotechnicalElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcGeotechnicalAssembly\n\t,IfcGeotechnicalStratum))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcGeotechnicalStratum\n SUBTYPE OF (IfcGeotechnicalElement);\n\tPredefinedType : OPTIONAL IfcGeotechnicalStratumTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcGeotechnicalStratumTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcGeotechnicalStratumTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcGradientCurve\n SUBTYPE OF (IfcCompositeCurve);\n\tBaseCurve : IfcBoundedCurve;\n\tEndPoint : OPTIONAL IfcPlacement;\nEND_ENTITY;\n\nENTITY IfcGrid\n SUBTYPE OF (IfcPositioningElement);\n\tUAxes : LIST [1:?] OF UNIQUE IfcGridAxis;\n\tVAxes : LIST [1:?] OF UNIQUE IfcGridAxis;\n\tWAxes : OPTIONAL LIST [1:?] OF UNIQUE IfcGridAxis;\n\tPredefinedType : OPTIONAL IfcGridTypeEnum;\nEND_ENTITY;\n\nENTITY IfcGridAxis;\n\tAxisTag : OPTIONAL IfcLabel;\n\tAxisCurve : IfcCurve;\n\tSameSense : IfcBoolean;\n INVERSE\n\tPartOfW : SET [0:1] OF IfcGrid FOR WAxes;\n\tPartOfV : SET [0:1] OF IfcGrid FOR VAxes;\n\tPartOfU : SET [0:1] OF IfcGrid FOR UAxes;\n\tHasIntersections : SET [0:?] OF IfcVirtualGridIntersection FOR IntersectingAxes;\n WHERE\n\tWR1 : AxisCurve.Dim = 2;\n\tWR2 : (SIZEOF(PartOfU) = 1) XOR (SIZEOF(PartOfV) = 1) XOR (SIZEOF(PartOfW) = 1);\nEND_ENTITY;\n\nENTITY IfcGridPlacement\n SUBTYPE OF (IfcObjectPlacement);\n\tPlacementLocation : IfcVirtualGridIntersection;\n\tPlacementRefDirection : OPTIONAL IfcGridPlacementDirectionSelect;\nEND_ENTITY;\n\nENTITY IfcGroup\n SUPERTYPE OF (ONEOF\n\t(IfcAsset\n\t,IfcInventory\n\t,IfcStructuralLoadGroup\n\t,IfcStructuralResultGroup\n\t,IfcSystem))\n SUBTYPE OF (IfcObject);\n INVERSE\n\tIsGroupedBy : SET [0:?] OF IfcRelAssignsToGroup FOR RelatingGroup;\n\tReferencedInStructures : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatedElements;\nEND_ENTITY;\n\nENTITY IfcHalfSpaceSolid\n SUPERTYPE OF (ONEOF\n\t(IfcBoxedHalfSpace\n\t,IfcPolygonalBoundedHalfSpace))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tBaseSurface : IfcSurface;\n\tAgreementFlag : IfcBoolean;\n DERIVE\n\t Dim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcHeatExchanger\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcHeatExchangerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcHeatExchangerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcHeatExchangerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCHEATEXCHANGERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcHeatExchangerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcHeatExchangerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcHeatExchangerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcHeatExchangerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcHumidifier\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcHumidifierTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcHumidifierTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcHumidifierTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCHUMIDIFIERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcHumidifierType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcHumidifierTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcHumidifierTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcHumidifierTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcIShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tOverallWidth : IfcPositiveLengthMeasure;\n\tOverallDepth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tFlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n WHERE\n\tValidFilletRadius : NOT(EXISTS(FilletRadius)) OR\n((FilletRadius <= (OverallWidth - WebThickness)/2.) AND \n (FilletRadius <= (OverallDepth - (2. * FlangeThickness))/2.));\n\tValidFlangeThickness : (2. * FlangeThickness) < OverallDepth;\n\tValidWebThickness : WebThickness < OverallWidth;\nEND_ENTITY;\n\nENTITY IfcImageTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tURLReference : IfcURIReference;\nEND_ENTITY;\n\nENTITY IfcImpactProtectionDevice\n SUBTYPE OF (IfcElementComponent);\n\tPredefinedType : OPTIONAL IfcImpactProtectionDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcImpactProtectionDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcImpactProtectionDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCIMPACTPROTECTIONDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcImpactProtectionDeviceType\n SUBTYPE OF (IfcElementComponentType);\n\tPredefinedType : IfcImpactProtectionDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcImpactProtectionDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcImpactProtectionDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcIndexedColourMap\n SUBTYPE OF (IfcPresentationItem);\n\tMappedTo : IfcTessellatedFaceSet;\n\tOpacity : OPTIONAL IfcNormalisedRatioMeasure;\n\tColours : IfcColourRgbList;\n\tColourIndex : LIST [1:?] OF IfcPositiveInteger;\nEND_ENTITY;\n\nENTITY IfcIndexedPolyCurve\n SUBTYPE OF (IfcBoundedCurve);\n\tPoints : IfcCartesianPointList;\n\tSegments : OPTIONAL LIST [1:?] OF IfcSegmentIndexSelect;\n\tSelfIntersect : OPTIONAL IfcBoolean;\n WHERE\n\tConsecutive : NOT(EXISTS(Segments)) OR IfcConsecutiveSegments(Segments);\nEND_ENTITY;\n\nENTITY IfcIndexedPolygonalFace\n SUPERTYPE OF (ONEOF\n\t(IfcIndexedPolygonalFaceWithVoids))\n SUBTYPE OF (IfcTessellatedItem);\n\tCoordIndex : LIST [3:?] OF IfcPositiveInteger;\n INVERSE\n\tToFaceSet : SET [1:?] OF IfcPolygonalFaceSet FOR Faces;\n\tHasTexCoords : SET [0:1] OF IfcTextureCoordinateIndices FOR TexCoordsOf;\nEND_ENTITY;\n\nENTITY IfcIndexedPolygonalFaceWithVoids\n SUBTYPE OF (IfcIndexedPolygonalFace);\n\tInnerCoordIndices : LIST [1:?] OF LIST [3:?] OF UNIQUE IfcPositiveInteger;\nEND_ENTITY;\n\nENTITY IfcIndexedPolygonalTextureMap\n SUBTYPE OF (IfcIndexedTextureMap);\n\tTexCoordIndices : SET [1:?] OF IfcTextureCoordinateIndices;\nEND_ENTITY;\n\nENTITY IfcIndexedTextureMap\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcIndexedPolygonalTextureMap\n\t,IfcIndexedTriangleTextureMap))\n SUBTYPE OF (IfcTextureCoordinate);\n\tMappedTo : IfcTessellatedFaceSet;\n\tTexCoords : IfcTextureVertexList;\nEND_ENTITY;\n\nENTITY IfcIndexedTriangleTextureMap\n SUBTYPE OF (IfcIndexedTextureMap);\n\tTexCoordIndex : OPTIONAL LIST [1:?] OF LIST [3:3] OF IfcPositiveInteger;\nEND_ENTITY;\n\nENTITY IfcInterceptor\n SUBTYPE OF (IfcFlowTreatmentDevice);\n\tPredefinedType : OPTIONAL IfcInterceptorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcInterceptorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcInterceptorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCINTERCEPTORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcInterceptorType\n SUBTYPE OF (IfcFlowTreatmentDeviceType);\n\tPredefinedType : IfcInterceptorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcInterceptorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcInterceptorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcIntersectionCurve\n SUBTYPE OF (IfcSurfaceCurve);\n WHERE\n\tDistinctSurfaces : IfcAssociatedSurface(SELF\\IfcSurfaceCurve.AssociatedGeometry[1]) <> IfcAssociatedSurface(SELF\\IfcSurfaceCurve.AssociatedGeometry[2]);\n\tTwoPCurves : SIZEOF(SELF\\IfcSurfaceCurve.AssociatedGeometry) = 2;\nEND_ENTITY;\n\nENTITY IfcInventory\n SUBTYPE OF (IfcGroup);\n\tPredefinedType : OPTIONAL IfcInventoryTypeEnum;\n\tJurisdiction : OPTIONAL IfcActorSelect;\n\tResponsiblePersons : OPTIONAL SET [1:?] OF IfcPerson;\n\tLastUpdateDate : OPTIONAL IfcDate;\n\tCurrentValue : OPTIONAL IfcCostValue;\n\tOriginalValue : OPTIONAL IfcCostValue;\nEND_ENTITY;\n\nENTITY IfcIrregularTimeSeries\n SUBTYPE OF (IfcTimeSeries);\n\tValues : LIST [1:?] OF IfcIrregularTimeSeriesValue;\nEND_ENTITY;\n\nENTITY IfcIrregularTimeSeriesValue;\n\tTimeStamp : IfcDateTime;\n\tListValues : LIST [1:?] OF IfcValue;\nEND_ENTITY;\n\nENTITY IfcJunctionBox\n SUBTYPE OF (IfcFlowFitting);\n\tPredefinedType : OPTIONAL IfcJunctionBoxTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcJunctionBoxTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcJunctionBoxTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCJUNCTIONBOXTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcJunctionBoxType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcJunctionBoxTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcJunctionBoxTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcJunctionBoxTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcKerb\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcKerbTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcKerbTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcKerbTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCKERBTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcKerbType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcKerbTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcKerbTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcKerbTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcLShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tLegSlope : OPTIONAL IfcPlaneAngleMeasure;\n WHERE\n\tValidThickness : (Thickness < Depth) AND (NOT(EXISTS(Width)) OR (Thickness < Width));\nEND_ENTITY;\n\nENTITY IfcLaborResource\n SUBTYPE OF (IfcConstructionResource);\n\tPredefinedType : OPTIONAL IfcLaborResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcLaborResourceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcLaborResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcLaborResourceType\n SUBTYPE OF (IfcConstructionResourceType);\n\tPredefinedType : IfcLaborResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcLaborResourceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcLaborResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeResource.ResourceType));\nEND_ENTITY;\n\nENTITY IfcLagTime\n SUBTYPE OF (IfcSchedulingTime);\n\tLagValue : IfcTimeOrRatioSelect;\n\tDurationType : IfcTaskDurationEnum;\nEND_ENTITY;\n\nENTITY IfcLamp\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcLampTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcLampTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcLampTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCLAMPTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcLampType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcLampTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcLampTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcLampTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcLibraryInformation\n SUBTYPE OF (IfcExternalInformation);\n\tName : IfcLabel;\n\tVersion : OPTIONAL IfcLabel;\n\tPublisher : OPTIONAL IfcActorSelect;\n\tVersionDate : OPTIONAL IfcDateTime;\n\tLocation : OPTIONAL IfcURIReference;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tLibraryInfoForObjects : SET [0:?] OF IfcRelAssociatesLibrary FOR RelatingLibrary;\n\tHasLibraryReferences : SET [0:?] OF IfcLibraryReference FOR ReferencedLibrary;\nEND_ENTITY;\n\nENTITY IfcLibraryReference\n SUBTYPE OF (IfcExternalReference);\n\tDescription : OPTIONAL IfcText;\n\tLanguage : OPTIONAL IfcLanguageId;\n\tReferencedLibrary : OPTIONAL IfcLibraryInformation;\n INVERSE\n\tLibraryRefForObjects : SET [0:?] OF IfcRelAssociatesLibrary FOR RelatingLibrary;\nEND_ENTITY;\n\nENTITY IfcLightDistributionData;\n\tMainPlaneAngle : IfcPlaneAngleMeasure;\n\tSecondaryPlaneAngle : LIST [1:?] OF IfcPlaneAngleMeasure;\n\tLuminousIntensity : LIST [1:?] OF IfcLuminousIntensityDistributionMeasure;\nEND_ENTITY;\n\nENTITY IfcLightFixture\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcLightFixtureTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcLightFixtureTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcLightFixtureTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCLIGHTFIXTURETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcLightFixtureType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcLightFixtureTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcLightFixtureTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcLightFixtureTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcLightIntensityDistribution;\n\tLightDistributionCurve : IfcLightDistributionCurveEnum;\n\tDistributionData : LIST [1:?] OF IfcLightDistributionData;\nEND_ENTITY;\n\nENTITY IfcLightSource\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcLightSourceAmbient\n\t,IfcLightSourceDirectional\n\t,IfcLightSourceGoniometric\n\t,IfcLightSourcePositional))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tName : OPTIONAL IfcLabel;\n\tLightColour : IfcColourRgb;\n\tAmbientIntensity : OPTIONAL IfcNormalisedRatioMeasure;\n\tIntensity : OPTIONAL IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcLightSourceAmbient\n SUBTYPE OF (IfcLightSource);\nEND_ENTITY;\n\nENTITY IfcLightSourceDirectional\n SUBTYPE OF (IfcLightSource);\n\tOrientation : IfcDirection;\nEND_ENTITY;\n\nENTITY IfcLightSourceGoniometric\n SUBTYPE OF (IfcLightSource);\n\tPosition : IfcAxis2Placement3D;\n\tColourAppearance : OPTIONAL IfcColourRgb;\n\tColourTemperature : IfcThermodynamicTemperatureMeasure;\n\tLuminousFlux : IfcLuminousFluxMeasure;\n\tLightEmissionSource : IfcLightEmissionSourceEnum;\n\tLightDistributionDataSource : IfcLightDistributionDataSourceSelect;\nEND_ENTITY;\n\nENTITY IfcLightSourcePositional\n SUPERTYPE OF (ONEOF\n\t(IfcLightSourceSpot))\n SUBTYPE OF (IfcLightSource);\n\tPosition : IfcCartesianPoint;\n\tRadius : IfcPositiveLengthMeasure;\n\tConstantAttenuation : IfcReal;\n\tDistanceAttenuation : IfcReal;\n\tQuadricAttenuation : IfcReal;\nEND_ENTITY;\n\nENTITY IfcLightSourceSpot\n SUBTYPE OF (IfcLightSourcePositional);\n\tOrientation : IfcDirection;\n\tConcentrationExponent : OPTIONAL IfcReal;\n\tSpreadAngle : IfcPositivePlaneAngleMeasure;\n\tBeamWidthAngle : IfcPositivePlaneAngleMeasure;\nEND_ENTITY;\n\nENTITY IfcLine\n SUBTYPE OF (IfcCurve);\n\tPnt : IfcCartesianPoint;\n\tDir : IfcVector;\n WHERE\n\tSameDim : Dir.Dim = Pnt.Dim;\nEND_ENTITY;\n\nENTITY IfcLinearElement\n SUPERTYPE OF (ONEOF\n\t(IfcAlignmentCant\n\t,IfcAlignmentHorizontal\n\t,IfcAlignmentSegment\n\t,IfcAlignmentVertical))\n SUBTYPE OF (IfcProduct);\nEND_ENTITY;\n\nENTITY IfcLinearPlacement\n SUBTYPE OF (IfcObjectPlacement);\n\tRelativePlacement : IfcAxis2PlacementLinear;\n\tCartesianPosition : OPTIONAL IfcAxis2Placement3D;\nEND_ENTITY;\n\nENTITY IfcLinearPositioningElement\n SUPERTYPE OF (ONEOF\n\t(IfcAlignment))\n SUBTYPE OF (IfcPositioningElement);\nEND_ENTITY;\n\nENTITY IfcLiquidTerminal\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcLiquidTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcLiquidTerminalTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcLiquidTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCLIQUIDTERMINALTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcLiquidTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcLiquidTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcLiquidTerminalTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcLiquidTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcLocalPlacement\n SUBTYPE OF (IfcObjectPlacement);\n\tRelativePlacement : IfcAxis2Placement;\n WHERE\n\tWR21 : IfcCorrectLocalPlacement(RelativePlacement, PlacementRelTo);\nEND_ENTITY;\n\nENTITY IfcLoop\n SUPERTYPE OF (ONEOF\n\t(IfcEdgeLoop\n\t,IfcPolyLoop\n\t,IfcVertexLoop))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcManifoldSolidBrep\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAdvancedBrep\n\t,IfcFacetedBrep))\n SUBTYPE OF (IfcSolidModel);\n\tOuter : IfcClosedShell;\nEND_ENTITY;\n\nENTITY IfcMapConversion\n SUPERTYPE OF (ONEOF\n\t(IfcMapConversionScaled))\n SUBTYPE OF (IfcCoordinateOperation);\n\tEastings : IfcLengthMeasure;\n\tNorthings : IfcLengthMeasure;\n\tOrthogonalHeight : IfcLengthMeasure;\n\tXAxisAbscissa : OPTIONAL IfcReal;\n\tXAxisOrdinate : OPTIONAL IfcReal;\n\tScale : OPTIONAL IfcReal;\n WHERE\n\tTargetCRSOnlyProjected : 'IFC4X3_ADD2.IFCPROJECTEDCRS' IN TYPEOF(SELF\\IfcCoordinateOperation.TargetCRS);\nEND_ENTITY;\n\nENTITY IfcMapConversionScaled\n SUBTYPE OF (IfcMapConversion);\n\tFactorX : IfcReal;\n\tFactorY : IfcReal;\n\tFactorZ : IfcReal;\nEND_ENTITY;\n\nENTITY IfcMappedItem\n SUBTYPE OF (IfcRepresentationItem);\n\tMappingSource : IfcRepresentationMap;\n\tMappingTarget : IfcCartesianTransformationOperator;\nEND_ENTITY;\n\nENTITY IfcMarineFacility\n SUBTYPE OF (IfcFacility);\n\tPredefinedType : OPTIONAL IfcMarineFacilityTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcMarineFacilityTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcMarineFacilityTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcMarinePart\n SUBTYPE OF (IfcFacilityPart);\n\tPredefinedType : OPTIONAL IfcMarinePartTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcMarinePartTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcMarinePartTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcMaterial\n SUBTYPE OF (IfcMaterialDefinition);\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tCategory : OPTIONAL IfcLabel;\n INVERSE\n\tHasRepresentation : SET [0:1] OF IfcMaterialDefinitionRepresentation FOR RepresentedMaterial;\n\tIsRelatedWith : SET [0:?] OF IfcMaterialRelationship FOR RelatedMaterials;\n\tRelatesTo : SET [0:1] OF IfcMaterialRelationship FOR RelatingMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialClassificationRelationship;\n\tMaterialClassifications : SET [1:?] OF IfcClassificationSelect;\n\tClassifiedMaterial : IfcMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialConstituent\n SUBTYPE OF (IfcMaterialDefinition);\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tMaterial : IfcMaterial;\n\tFraction : OPTIONAL IfcNormalisedRatioMeasure;\n\tCategory : OPTIONAL IfcLabel;\n INVERSE\n\tToMaterialConstituentSet : IfcMaterialConstituentSet FOR MaterialConstituents;\nEND_ENTITY;\n\nENTITY IfcMaterialConstituentSet\n SUBTYPE OF (IfcMaterialDefinition);\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tMaterialConstituents : OPTIONAL SET [1:?] OF IfcMaterialConstituent;\nEND_ENTITY;\n\nENTITY IfcMaterialDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcMaterial\n\t,IfcMaterialConstituent\n\t,IfcMaterialConstituentSet\n\t,IfcMaterialLayer\n\t,IfcMaterialLayerSet\n\t,IfcMaterialProfile\n\t,IfcMaterialProfileSet));\n INVERSE\n\tAssociatedTo : SET [0:?] OF IfcRelAssociatesMaterial FOR RelatingMaterial;\n\tHasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\n\tHasProperties : SET [0:?] OF IfcMaterialProperties FOR Material;\nEND_ENTITY;\n\nENTITY IfcMaterialDefinitionRepresentation\n SUBTYPE OF (IfcProductRepresentation);\n\tRepresentedMaterial : IfcMaterial;\n WHERE\n\tOnlyStyledRepresentations : SIZEOF(QUERY(temp <* Representations | \n  (NOT('IFC4X3_ADD2.IFCSTYLEDREPRESENTATION' IN TYPEOF(temp)))\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcMaterialLayer\n SUPERTYPE OF (ONEOF\n\t(IfcMaterialLayerWithOffsets))\n SUBTYPE OF (IfcMaterialDefinition);\n\tMaterial : OPTIONAL IfcMaterial;\n\tLayerThickness : IfcNonNegativeLengthMeasure;\n\tIsVentilated : OPTIONAL IfcLogical;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tCategory : OPTIONAL IfcLabel;\n\tPriority : OPTIONAL IfcInteger;\n INVERSE\n\tToMaterialLayerSet : IfcMaterialLayerSet FOR MaterialLayers;\n WHERE\n\tNormalizedPriority : NOT(EXISTS(Priority)) OR {0 <= Priority <= 100};\nEND_ENTITY;\n\nENTITY IfcMaterialLayerSet\n SUBTYPE OF (IfcMaterialDefinition);\n\tMaterialLayers : LIST [1:?] OF IfcMaterialLayer;\n\tLayerSetName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n DERIVE\n\t TotalThickness : IfcLengthMeasure := IfcMlsTotalThickness(SELF);\nEND_ENTITY;\n\nENTITY IfcMaterialLayerSetUsage\n SUBTYPE OF (IfcMaterialUsageDefinition);\n\tForLayerSet : IfcMaterialLayerSet;\n\tLayerSetDirection : IfcLayerSetDirectionEnum;\n\tDirectionSense : IfcDirectionSenseEnum;\n\tOffsetFromReferenceLine : IfcLengthMeasure;\n\tReferenceExtent : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMaterialLayerWithOffsets\n SUBTYPE OF (IfcMaterialLayer);\n\tOffsetDirection : IfcLayerSetDirectionEnum;\n\tOffsetValues : ARRAY [1:2] OF IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMaterialList;\n\tMaterials : LIST [1:?] OF IfcMaterial;\nEND_ENTITY;\n\nENTITY IfcMaterialProfile\n SUPERTYPE OF (ONEOF\n\t(IfcMaterialProfileWithOffsets))\n SUBTYPE OF (IfcMaterialDefinition);\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tMaterial : OPTIONAL IfcMaterial;\n\tProfile : IfcProfileDef;\n\tPriority : OPTIONAL IfcInteger;\n\tCategory : OPTIONAL IfcLabel;\n INVERSE\n\tToMaterialProfileSet : IfcMaterialProfileSet FOR MaterialProfiles;\n WHERE\n\tNormalizedPriority : NOT(EXISTS(Priority)) OR {0 <= Priority <= 100};\nEND_ENTITY;\n\nENTITY IfcMaterialProfileSet\n SUBTYPE OF (IfcMaterialDefinition);\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tMaterialProfiles : LIST [1:?] OF IfcMaterialProfile;\n\tCompositeProfile : OPTIONAL IfcCompositeProfileDef;\nEND_ENTITY;\n\nENTITY IfcMaterialProfileSetUsage\n SUPERTYPE OF (ONEOF\n\t(IfcMaterialProfileSetUsageTapering))\n SUBTYPE OF (IfcMaterialUsageDefinition);\n\tForProfileSet : IfcMaterialProfileSet;\n\tCardinalPoint : OPTIONAL IfcCardinalPointReference;\n\tReferenceExtent : OPTIONAL IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMaterialProfileSetUsageTapering\n SUBTYPE OF (IfcMaterialProfileSetUsage);\n\tForProfileEndSet : IfcMaterialProfileSet;\n\tCardinalEndPoint : OPTIONAL IfcCardinalPointReference;\nEND_ENTITY;\n\nENTITY IfcMaterialProfileWithOffsets\n SUBTYPE OF (IfcMaterialProfile);\n\tOffsetValues : ARRAY [1:2] OF IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcMaterialProperties\n SUBTYPE OF (IfcExtendedProperties);\n\tMaterial : IfcMaterialDefinition;\nEND_ENTITY;\n\nENTITY IfcMaterialRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingMaterial : IfcMaterial;\n\tRelatedMaterials : SET [1:?] OF IfcMaterial;\n\tMaterialExpression : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcMaterialUsageDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcMaterialLayerSetUsage\n\t,IfcMaterialProfileSetUsage));\n INVERSE\n\tAssociatedTo : SET [1:?] OF IfcRelAssociatesMaterial FOR RelatingMaterial;\nEND_ENTITY;\n\nENTITY IfcMeasureWithUnit;\n\tValueComponent : IfcValue;\n\tUnitComponent : IfcUnit;\nEND_ENTITY;\n\nENTITY IfcMechanicalFastener\n SUBTYPE OF (IfcElementComponent);\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tNominalLength : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : OPTIONAL IfcMechanicalFastenerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcMechanicalFastenerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcMechanicalFastenerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCMECHANICALFASTENERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcMechanicalFastenerType\n SUBTYPE OF (IfcElementComponentType);\n\tPredefinedType : IfcMechanicalFastenerTypeEnum;\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tNominalLength : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcMechanicalFastenerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcMechanicalFastenerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcMedicalDevice\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcMedicalDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcMedicalDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcMedicalDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCMEDICALDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcMedicalDeviceType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcMedicalDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcMedicalDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcMedicalDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcMember\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcMemberTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcMemberTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcMemberTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCMEMBERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcMemberType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcMemberTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcMemberTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcMemberTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcMetric\n SUBTYPE OF (IfcConstraint);\n\tBenchmark : IfcBenchmarkEnum;\n\tValueSource : OPTIONAL IfcLabel;\n\tDataValue : OPTIONAL IfcMetricValueSelect;\n\tReferencePath : OPTIONAL IfcReference;\nEND_ENTITY;\n\nENTITY IfcMirroredProfileDef\n SUBTYPE OF (IfcDerivedProfileDef);\n DERIVE\n\t SELF\\IfcDerivedProfileDef.Operator : IfcCartesianTransformationOperator2D := \nIfcRepresentationItem() || IfcGeometricRepresentationItem() ||\nIfcCartesianTransformationOperator(\n    -- Axis1\n    IfcRepresentationItem() || IfcGeometricRepresentationItem() ||\n    IfcDirection([-1., 0.]),\n    -- Axis2\n    IfcRepresentationItem() || IfcGeometricRepresentationItem() ||\n    IfcDirection([ 0., 1.]),\n    -- LocalOrigin\n    IfcRepresentationItem() || IfcGeometricRepresentationItem() ||\n    IfcPoint() || IfcCartesianPoint([0., 0.]),\n    -- Scale\n    1.) ||\nIfcCartesianTransformationOperator2D();\nEND_ENTITY;\n\nENTITY IfcMobileTelecommunicationsAppliance\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcMobileTelecommunicationsApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcMobileTelecommunicationsApplianceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcMobileTelecommunicationsApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCMOBILETELECOMMUNICATIONSAPPLIANCETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcMobileTelecommunicationsApplianceType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcMobileTelecommunicationsApplianceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcMobileTelecommunicationsApplianceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcMobileTelecommunicationsApplianceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcMonetaryUnit;\n\tCurrency : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcMooringDevice\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcMooringDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcMooringDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcMooringDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCMOORINGDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcMooringDeviceType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcMooringDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcMooringDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcMooringDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcMotorConnection\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcMotorConnectionTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcMotorConnectionTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcMotorConnectionTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCMOTORCONNECTIONTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcMotorConnectionType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcMotorConnectionTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcMotorConnectionTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcMotorConnectionTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcNamedUnit\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcContextDependentUnit\n\t,IfcConversionBasedUnit\n\t,IfcSIUnit));\n\tDimensions : IfcDimensionalExponents;\n\tUnitType : IfcUnitEnum;\n WHERE\n\tWR1 : IfcCorrectDimensions (SELF.UnitType, SELF.Dimensions);\nEND_ENTITY;\n\nENTITY IfcNavigationElement\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcNavigationElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcNavigationElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcNavigationElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCNAVIGATIONELEMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcNavigationElementType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcNavigationElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcNavigationElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcNavigationElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcObject\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcActor\n\t,IfcControl\n\t,IfcGroup\n\t,IfcProcess\n\t,IfcProduct\n\t,IfcResource))\n SUBTYPE OF (IfcObjectDefinition);\n\tObjectType : OPTIONAL IfcLabel;\n INVERSE\n\tIsDeclaredBy : SET [0:1] OF IfcRelDefinesByObject FOR RelatedObjects;\n\tDeclares : SET [0:?] OF IfcRelDefinesByObject FOR RelatingObject;\n\tIsTypedBy : SET [0:1] OF IfcRelDefinesByType FOR RelatedObjects;\n\tIsDefinedBy : SET [0:?] OF IfcRelDefinesByProperties FOR RelatedObjects;\n WHERE\n\tUniquePropertySetNames : ((SIZEOF(IsDefinedBy) = 0) OR IfcUniqueDefinitionNames(IsDefinedBy));\nEND_ENTITY;\n\nENTITY IfcObjectDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcContext\n\t,IfcObject\n\t,IfcTypeObject))\n SUBTYPE OF (IfcRoot);\n INVERSE\n\tHasAssignments : SET [0:?] OF IfcRelAssigns FOR RelatedObjects;\n\tNests : SET [0:1] OF IfcRelNests FOR RelatedObjects;\n\tIsNestedBy : SET [0:?] OF IfcRelNests FOR RelatingObject;\n\tHasContext : SET [0:1] OF IfcRelDeclares FOR RelatedDefinitions;\n\tIsDecomposedBy : SET [0:?] OF IfcRelAggregates FOR RelatingObject;\n\tDecomposes : SET [0:1] OF IfcRelAggregates FOR RelatedObjects;\n\tHasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects;\nEND_ENTITY;\n\nENTITY IfcObjectPlacement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcGridPlacement\n\t,IfcLinearPlacement\n\t,IfcLocalPlacement));\n\tPlacementRelTo : OPTIONAL IfcObjectPlacement;\n INVERSE\n\tPlacesObject : SET [0:?] OF IfcProduct FOR ObjectPlacement;\n\tReferencedByPlacements : SET [0:?] OF IfcObjectPlacement FOR PlacementRelTo;\nEND_ENTITY;\n\nENTITY IfcObjective\n SUBTYPE OF (IfcConstraint);\n\tBenchmarkValues : OPTIONAL LIST [1:?] OF IfcConstraint;\n\tLogicalAggregator : OPTIONAL IfcLogicalOperatorEnum;\n\tObjectiveQualifier : IfcObjectiveEnum;\n\tUserDefinedQualifier : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : (ObjectiveQualifier <> IfcObjectiveEnum.USERDEFINED) OR\n((ObjectiveQualifier = IfcObjectiveEnum.USERDEFINED) AND EXISTS(SELF\\IfcObjective.UserDefinedQualifier));\nEND_ENTITY;\n\nENTITY IfcOccupant\n SUBTYPE OF (IfcActor);\n\tPredefinedType : OPTIONAL IfcOccupantTypeEnum;\n WHERE\n\tWR31 : NOT(PredefinedType = IfcOccupantTypeEnum.USERDEFINED) \nOR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcOffsetCurve\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcOffsetCurve2D\n\t,IfcOffsetCurve3D\n\t,IfcOffsetCurveByDistances))\n SUBTYPE OF (IfcCurve);\n\tBasisCurve : IfcCurve;\nEND_ENTITY;\n\nENTITY IfcOffsetCurve2D\n SUBTYPE OF (IfcOffsetCurve);\n\tDistance : IfcLengthMeasure;\n\tSelfIntersect : IfcLogical;\n WHERE\n\tDimIs2D : BasisCurve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcOffsetCurve3D\n SUBTYPE OF (IfcOffsetCurve);\n\tDistance : IfcLengthMeasure;\n\tSelfIntersect : IfcLogical;\n\tRefDirection : IfcDirection;\n WHERE\n\tDimIs2D : BasisCurve.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcOffsetCurveByDistances\n SUBTYPE OF (IfcOffsetCurve);\n\tOffsetValues : LIST [1:?] OF IfcPointByDistanceExpression;\n\tTag : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcOpenCrossProfileDef\n SUBTYPE OF (IfcProfileDef);\n\tHorizontalWidths : IfcBoolean;\n\tWidths : LIST [1:?] OF IfcNonNegativeLengthMeasure;\n\tSlopes : LIST [1:?] OF IfcPlaneAngleMeasure;\n\tTags : OPTIONAL LIST [2:?] OF IfcLabel;\n\tOffsetPoint : OPTIONAL IfcCartesianPoint;\n WHERE\n\tCorrectProfileType : SELF\\IfcProfileDef.ProfileType = IfcProfileTypeEnum.CURVE;\n\tCorrespondingSlopeWidths : SIZEOF(Slopes) = SIZEOF(Widths);\n\tCorrespondingTags : (NOT EXISTS (Tags)) OR (SIZEOF(Tags) = (SIZEOF(Slopes) + 1));\nEND_ENTITY;\n\nENTITY IfcOpenShell\n SUBTYPE OF (IfcConnectedFaceSet);\nEND_ENTITY;\n\nENTITY IfcOpeningElement\n SUBTYPE OF (IfcFeatureElementSubtraction);\n\tPredefinedType : OPTIONAL IfcOpeningElementTypeEnum;\n INVERSE\n\tHasFillings : SET [0:?] OF IfcRelFillsElement FOR RelatingOpeningElement;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcOpeningElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcOpeningElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcOrganization;\n\tIdentification : OPTIONAL IfcIdentifier;\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\n\tAddresses : OPTIONAL LIST [1:?] OF IfcAddress;\n INVERSE\n\tIsRelatedBy : SET [0:?] OF IfcOrganizationRelationship FOR RelatedOrganizations;\n\tRelates : SET [0:?] OF IfcOrganizationRelationship FOR RelatingOrganization;\n\tEngages : SET [0:?] OF IfcPersonAndOrganization FOR TheOrganization;\nEND_ENTITY;\n\nENTITY IfcOrganizationRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingOrganization : IfcOrganization;\n\tRelatedOrganizations : SET [1:?] OF IfcOrganization;\nEND_ENTITY;\n\nENTITY IfcOrientedEdge\n SUBTYPE OF (IfcEdge);\n\tEdgeElement : IfcEdge;\n\tOrientation : IfcBoolean;\n DERIVE\n\t SELF\\IfcEdge.EdgeStart : IfcVertex := IfcBooleanChoose \n(Orientation, EdgeElement.EdgeStart, EdgeElement.EdgeEnd);\n\t SELF\\IfcEdge.EdgeEnd : IfcVertex := IfcBooleanChoose \n(Orientation, EdgeElement.EdgeEnd, EdgeElement.EdgeStart);\n WHERE\n\tEdgeElementNotOriented : NOT('IFC4X3_ADD2.IFCORIENTEDEDGE' IN TYPEOF(EdgeElement));\nEND_ENTITY;\n\nENTITY IfcOuterBoundaryCurve\n SUBTYPE OF (IfcBoundaryCurve);\nEND_ENTITY;\n\nENTITY IfcOutlet\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcOutletTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcOutletTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcOutletTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCOUTLETTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcOutletType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcOutletTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcOutletTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcOutletTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcOwnerHistory;\n\tOwningUser : IfcPersonAndOrganization;\n\tOwningApplication : IfcApplication;\n\tState : OPTIONAL IfcStateEnum;\n\tChangeAction : OPTIONAL IfcChangeActionEnum;\n\tLastModifiedDate : OPTIONAL IfcTimeStamp;\n\tLastModifyingUser : OPTIONAL IfcPersonAndOrganization;\n\tLastModifyingApplication : OPTIONAL IfcApplication;\n\tCreationDate : IfcTimeStamp;\n WHERE\n\tCorrectChangeAction : (EXISTS(LastModifiedDate)) OR\n(NOT(EXISTS(LastModifiedDate)) AND NOT(EXISTS(ChangeAction))) OR\n(NOT(EXISTS(LastModifiedDate)) AND EXISTS(ChangeAction) AND ((ChangeAction = IfcChangeActionEnum.NOTDEFINED) OR (ChangeAction = IfcChangeActionEnum.NOCHANGE)));\nEND_ENTITY;\n\nENTITY IfcParameterizedProfileDef\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAsymmetricIShapeProfileDef\n\t,IfcCShapeProfileDef\n\t,IfcCircleProfileDef\n\t,IfcEllipseProfileDef\n\t,IfcIShapeProfileDef\n\t,IfcLShapeProfileDef\n\t,IfcRectangleProfileDef\n\t,IfcTShapeProfileDef\n\t,IfcTrapeziumProfileDef\n\t,IfcUShapeProfileDef\n\t,IfcZShapeProfileDef))\n SUBTYPE OF (IfcProfileDef);\n\tPosition : OPTIONAL IfcAxis2Placement2D;\nEND_ENTITY;\n\nENTITY IfcPath\n SUBTYPE OF (IfcTopologicalRepresentationItem);\n\tEdgeList : LIST [1:?] OF UNIQUE IfcOrientedEdge;\n WHERE\n\tIsContinuous : IfcPathHeadToTail(SELF);\nEND_ENTITY;\n\nENTITY IfcPavement\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcPavementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcPavementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcPavementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCPAVEMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcPavementType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcPavementTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcPavementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcPavementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcPcurve\n SUBTYPE OF (IfcCurve);\n\tBasisSurface : IfcSurface;\n\tReferenceCurve : IfcCurve;\n WHERE\n\tDimIs2D : ReferenceCurve.Dim = 2;\nEND_ENTITY;\n\nENTITY IfcPerformanceHistory\n SUBTYPE OF (IfcControl);\n\tLifeCyclePhase : IfcLabel;\n\tPredefinedType : OPTIONAL IfcPerformanceHistoryTypeEnum;\nEND_ENTITY;\n\nENTITY IfcPermeableCoveringProperties\n SUBTYPE OF (IfcPreDefinedPropertySet);\n\tOperationType : IfcPermeableCoveringOperationEnum;\n\tPanelPosition : IfcWindowPanelPositionEnum;\n\tFrameDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tFrameThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\nEND_ENTITY;\n\nENTITY IfcPermit\n SUBTYPE OF (IfcControl);\n\tPredefinedType : OPTIONAL IfcPermitTypeEnum;\n\tStatus : OPTIONAL IfcLabel;\n\tLongDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcPerson;\n\tIdentification : OPTIONAL IfcIdentifier;\n\tFamilyName : OPTIONAL IfcLabel;\n\tGivenName : OPTIONAL IfcLabel;\n\tMiddleNames : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPrefixTitles : OPTIONAL LIST [1:?] OF IfcLabel;\n\tSuffixTitles : OPTIONAL LIST [1:?] OF IfcLabel;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\n\tAddresses : OPTIONAL LIST [1:?] OF IfcAddress;\n INVERSE\n\tEngagedIn : SET [0:?] OF IfcPersonAndOrganization FOR ThePerson;\n WHERE\n\tIdentifiablePerson : EXISTS(Identification) OR EXISTS(FamilyName) OR EXISTS(GivenName);\n\tValidSetOfNames : NOT EXISTS(MiddleNames) OR EXISTS(FamilyName) OR EXISTS(GivenName);\nEND_ENTITY;\n\nENTITY IfcPersonAndOrganization;\n\tThePerson : IfcPerson;\n\tTheOrganization : IfcOrganization;\n\tRoles : OPTIONAL LIST [1:?] OF IfcActorRole;\nEND_ENTITY;\n\nENTITY IfcPhysicalComplexQuantity\n SUBTYPE OF (IfcPhysicalQuantity);\n\tHasQuantities : SET [1:?] OF IfcPhysicalQuantity;\n\tDiscrimination : IfcLabel;\n\tQuality : OPTIONAL IfcLabel;\n\tUsage : OPTIONAL IfcLabel;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(temp <* HasQuantities | SELF :=: temp)) = 0;\n\tUniqueQuantityNames : IfcUniqueQuantityNames(HasQuantities);\nEND_ENTITY;\n\nENTITY IfcPhysicalQuantity\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPhysicalComplexQuantity\n\t,IfcPhysicalSimpleQuantity));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n INVERSE\n\tHasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\n\tPartOfComplex : SET [0:1] OF IfcPhysicalComplexQuantity FOR HasQuantities;\nEND_ENTITY;\n\nENTITY IfcPhysicalSimpleQuantity\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcQuantityArea\n\t,IfcQuantityCount\n\t,IfcQuantityLength\n\t,IfcQuantityNumber\n\t,IfcQuantityTime\n\t,IfcQuantityVolume\n\t,IfcQuantityWeight))\n SUBTYPE OF (IfcPhysicalQuantity);\n\tUnit : OPTIONAL IfcNamedUnit;\nEND_ENTITY;\n\nENTITY IfcPile\n SUBTYPE OF (IfcDeepFoundation);\n\tPredefinedType : OPTIONAL IfcPileTypeEnum;\n\tConstructionType : OPTIONAL IfcPileConstructionEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCPILETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcPileType\n SUBTYPE OF (IfcDeepFoundationType);\n\tPredefinedType : IfcPileTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcPileTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcPileTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcPipeFitting\n SUBTYPE OF (IfcFlowFitting);\n\tPredefinedType : OPTIONAL IfcPipeFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcPipeFittingTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcPipeFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCPIPEFITTINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcPipeFittingType\n SUBTYPE OF (IfcFlowFittingType);\n\tPredefinedType : IfcPipeFittingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcPipeFittingTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcPipeFittingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcPipeSegment\n SUBTYPE OF (IfcFlowSegment);\n\tPredefinedType : OPTIONAL IfcPipeSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcPipeSegmentTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcPipeSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCPIPESEGMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcPipeSegmentType\n SUBTYPE OF (IfcFlowSegmentType);\n\tPredefinedType : IfcPipeSegmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcPipeSegmentTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcPipeSegmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcPixelTexture\n SUBTYPE OF (IfcSurfaceTexture);\n\tWidth : IfcInteger;\n\tHeight : IfcInteger;\n\tColourComponents : IfcInteger;\n\tPixel : LIST [1:?] OF IfcBinary;\n WHERE\n\tMinPixelInS : Width >= 1;\n\tMinPixelInT : Height >= 1;\n\tNumberOfColours : {1 <= ColourComponents <= 4};\n\tPixelAsByteAndSameLength : SIZEOF(QUERY(temp<* Pixel |\n (BLENGTH(temp) MOD 8 = 0) AND\n (BLENGTH(temp) = BLENGTH(Pixel[1]))\n)) = SIZEOF(Pixel);\n\tSizeOfPixelList : SIZEOF(Pixel) = (Width * Height);\nEND_ENTITY;\n\nENTITY IfcPlacement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAxis1Placement\n\t,IfcAxis2Placement2D\n\t,IfcAxis2Placement3D\n\t,IfcAxis2PlacementLinear))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tLocation : IfcPoint;\n DERIVE\n\t Dim : IfcDimensionCount := Location.Dim;\nEND_ENTITY;\n\nENTITY IfcPlanarBox\n SUBTYPE OF (IfcPlanarExtent);\n\tPlacement : IfcAxis2Placement;\nEND_ENTITY;\n\nENTITY IfcPlanarExtent\n SUPERTYPE OF (ONEOF\n\t(IfcPlanarBox))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSizeInX : IfcLengthMeasure;\n\tSizeInY : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcPlane\n SUBTYPE OF (IfcElementarySurface);\nEND_ENTITY;\n\nENTITY IfcPlate\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcPlateTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcPlateTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcPlateTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCPLATETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcPlateType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcPlateTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcPlateTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcPlateTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcPoint\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCartesianPoint\n\t,IfcPointByDistanceExpression\n\t,IfcPointOnCurve\n\t,IfcPointOnSurface))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\t Dim : IfcDimensionCount := IfcPointDim(SELF);\nEND_ENTITY;\n\nENTITY IfcPointByDistanceExpression\n SUBTYPE OF (IfcPoint);\n\tDistanceAlong : IfcCurveMeasureSelect;\n\tOffsetLateral : OPTIONAL IfcLengthMeasure;\n\tOffsetVertical : OPTIONAL IfcLengthMeasure;\n\tOffsetLongitudinal : OPTIONAL IfcLengthMeasure;\n\tBasisCurve : IfcCurve;\nEND_ENTITY;\n\nENTITY IfcPointOnCurve\n SUBTYPE OF (IfcPoint);\n\tBasisCurve : IfcCurve;\n\tPointParameter : IfcParameterValue;\nEND_ENTITY;\n\nENTITY IfcPointOnSurface\n SUBTYPE OF (IfcPoint);\n\tBasisSurface : IfcSurface;\n\tPointParameterU : IfcParameterValue;\n\tPointParameterV : IfcParameterValue;\nEND_ENTITY;\n\nENTITY IfcPolyLoop\n SUBTYPE OF (IfcLoop);\n\tPolygon : LIST [3:?] OF UNIQUE IfcCartesianPoint;\n WHERE\n\tAllPointsSameDim : SIZEOF(QUERY(Temp <* Polygon | Temp.Dim <> Polygon[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcPolygonalBoundedHalfSpace\n SUBTYPE OF (IfcHalfSpaceSolid);\n\tPosition : IfcAxis2Placement3D;\n\tPolygonalBoundary : IfcBoundedCurve;\n WHERE\n\tBoundaryDim : PolygonalBoundary.Dim = 2;\n\tBoundaryType : SIZEOF(TYPEOF(PolygonalBoundary) * [\n    'IFC4X3_ADD2.IFCPOLYLINE',\n    'IFC4X3_ADD2.IFCCOMPOSITECURVE',\n    'IFC4X3_ADD2.IFCINDEXEDPOLYCURVE'\n  ]) = 1;\nEND_ENTITY;\n\nENTITY IfcPolygonalFaceSet\n SUBTYPE OF (IfcTessellatedFaceSet);\n\tClosed : OPTIONAL IfcBoolean;\n\tFaces : LIST [1:?] OF UNIQUE IfcIndexedPolygonalFace;\n\tPnIndex : OPTIONAL LIST [1:?] OF IfcPositiveInteger;\nEND_ENTITY;\n\nENTITY IfcPolyline\n SUBTYPE OF (IfcBoundedCurve);\n\tPoints : LIST [2:?] OF IfcCartesianPoint;\n WHERE\n\tSameDim : SIZEOF(QUERY(Temp <* Points | Temp.Dim <> Points[1].Dim)) = 0;\nEND_ENTITY;\n\nENTITY IfcPolynomialCurve\n SUBTYPE OF (IfcCurve);\n\tPosition : IfcPlacement;\n\tCoefficientsX : OPTIONAL LIST [2:?] OF IfcReal;\n\tCoefficientsY : OPTIONAL LIST [2:?] OF IfcReal;\n\tCoefficientsZ : OPTIONAL LIST [2:?] OF IfcReal;\n WHERE\n\tCorrectPositionDim : ((Position.Dim=2) AND (NOT EXISTS(CoefficientsZ))) OR (Position.Dim=3);\n\tValidCoefficients : (EXISTS(CoefficientsX) AND EXISTS(CoefficientsY)) OR (EXISTS(CoefficientsX) AND EXISTS(CoefficientsZ)) OR (EXISTS(CoefficientsY) AND EXISTS(CoefficientsZ)) OR (EXISTS(CoefficientsX) AND EXISTS(CoefficientsY) AND EXISTS(CoefficientsZ));\nEND_ENTITY;\n\nENTITY IfcPort\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDistributionPort))\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tContainedIn : SET [0:1] OF IfcRelConnectsPortToElement FOR RelatingPort;\n\tConnectedFrom : SET [0:1] OF IfcRelConnectsPorts FOR RelatedPort;\n\tConnectedTo : SET [0:1] OF IfcRelConnectsPorts FOR RelatingPort;\nEND_ENTITY;\n\nENTITY IfcPositioningElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcGrid\n\t,IfcLinearPositioningElement\n\t,IfcReferent))\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure FOR RelatedElements;\n\tPositions : SET [0:?] OF IfcRelPositions FOR RelatingPositioningElement;\n WHERE\n\tHasPlacement : EXISTS(SELF\\IfcProduct.ObjectPlacement);\nEND_ENTITY;\n\nENTITY IfcPostalAddress\n SUBTYPE OF (IfcAddress);\n\tInternalLocation : OPTIONAL IfcLabel;\n\tAddressLines : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPostalBox : OPTIONAL IfcLabel;\n\tTown : OPTIONAL IfcLabel;\n\tRegion : OPTIONAL IfcLabel;\n\tPostalCode : OPTIONAL IfcLabel;\n\tCountry : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : EXISTS (InternalLocation) OR \nEXISTS (AddressLines) OR\nEXISTS (PostalBox) OR\nEXISTS (PostalCode) OR\nEXISTS (Town) OR \nEXISTS (Region) OR  \nEXISTS (Country);\nEND_ENTITY;\n\nENTITY IfcPreDefinedColour\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDraughtingPreDefinedColour))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPreDefinedCurveFont\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDraughtingPreDefinedCurveFont))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPreDefinedItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPreDefinedColour\n\t,IfcPreDefinedCurveFont\n\t,IfcPreDefinedTextFont))\n SUBTYPE OF (IfcPresentationItem);\n\tName : IfcLabel;\nEND_ENTITY;\n\nENTITY IfcPreDefinedProperties\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcReinforcementBarProperties\n\t,IfcSectionProperties\n\t,IfcSectionReinforcementProperties))\n SUBTYPE OF (IfcPropertyAbstraction);\nEND_ENTITY;\n\nENTITY IfcPreDefinedPropertySet\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDoorLiningProperties\n\t,IfcDoorPanelProperties\n\t,IfcPermeableCoveringProperties\n\t,IfcReinforcementDefinitionProperties\n\t,IfcWindowLiningProperties\n\t,IfcWindowPanelProperties))\n SUBTYPE OF (IfcPropertySetDefinition);\nEND_ENTITY;\n\nENTITY IfcPreDefinedTextFont\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcTextStyleFontModel))\n SUBTYPE OF (IfcPreDefinedItem);\nEND_ENTITY;\n\nENTITY IfcPresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcColourRgbList\n\t,IfcColourSpecification\n\t,IfcCurveStyleFont\n\t,IfcCurveStyleFontAndScaling\n\t,IfcCurveStyleFontPattern\n\t,IfcIndexedColourMap\n\t,IfcPreDefinedItem\n\t,IfcSurfaceStyleLighting\n\t,IfcSurfaceStyleRefraction\n\t,IfcSurfaceStyleShading\n\t,IfcSurfaceStyleWithTextures\n\t,IfcSurfaceTexture\n\t,IfcTextStyleForDefinedFont\n\t,IfcTextStyleTextModel\n\t,IfcTextureCoordinate\n\t,IfcTextureVertex\n\t,IfcTextureVertexList));\nEND_ENTITY;\n\nENTITY IfcPresentationLayerAssignment\n SUPERTYPE OF (ONEOF\n\t(IfcPresentationLayerWithStyle));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tAssignedItems : SET [1:?] OF IfcLayeredItem;\n\tIdentifier : OPTIONAL IfcIdentifier;\n WHERE\n\tApplicableItems : SIZEOF(QUERY(temp <* AssignedItems | (\n  SIZEOF(TYPEOF(temp) * [\n    'IFC4X3_ADD2.IFCSHAPEREPRESENTATION',\n    'IFC4X3_ADD2.IFCGEOMETRICREPRESENTATIONITEM',\n    'IFC4X3_ADD2.IFCMAPPEDITEM']) = 1)\n)) = SIZEOF(AssignedItems);\nEND_ENTITY;\n\nENTITY IfcPresentationLayerWithStyle\n SUBTYPE OF (IfcPresentationLayerAssignment);\n\tLayerOn : IfcLogical;\n\tLayerFrozen : IfcLogical;\n\tLayerBlocked : IfcLogical;\n\tLayerStyles : SET [0:?] OF IfcPresentationStyle;\n WHERE\n\tApplicableOnlyToItems : SIZEOF(QUERY(temp <* AssignedItems | (SIZEOF(TYPEOF(temp) * ['IFC4X3_ADD2.IfcGeometricRepresentationItem','IFC4X3_ADD2.IfcMappedItem']) >= 1))) = SIZEOF(AssignedItems);\nEND_ENTITY;\n\nENTITY IfcPresentationStyle\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCurveStyle\n\t,IfcFillAreaStyle\n\t,IfcSurfaceStyle\n\t,IfcTextStyle));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcProcedure\n SUBTYPE OF (IfcProcess);\n\tPredefinedType : OPTIONAL IfcProcedureTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcProcedureTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcProcedureTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\n\tHasName : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcProcedureType\n SUBTYPE OF (IfcTypeProcess);\n\tPredefinedType : IfcProcedureTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcProcedureTypeEnum.USERDEFINED) OR ((PredefinedType = IfcProcedureTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeProcess.ProcessType));\nEND_ENTITY;\n\nENTITY IfcProcess\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcEvent\n\t,IfcProcedure\n\t,IfcTask))\n SUBTYPE OF (IfcObject);\n\tIdentification : OPTIONAL IfcIdentifier;\n\tLongDescription : OPTIONAL IfcText;\n INVERSE\n\tIsPredecessorTo : SET [0:?] OF IfcRelSequence FOR RelatingProcess;\n\tIsSuccessorFrom : SET [0:?] OF IfcRelSequence FOR RelatedProcess;\n\tOperatesOn : SET [0:?] OF IfcRelAssignsToProcess FOR RelatingProcess;\nEND_ENTITY;\n\nENTITY IfcProduct\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcAnnotation\n\t,IfcElement\n\t,IfcLinearElement\n\t,IfcPort\n\t,IfcPositioningElement\n\t,IfcSpatialElement\n\t,IfcStructuralActivity\n\t,IfcStructuralItem))\n SUBTYPE OF (IfcObject);\n\tObjectPlacement : OPTIONAL IfcObjectPlacement;\n\tRepresentation : OPTIONAL IfcProductRepresentation;\n INVERSE\n\tReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct;\n\tPositionedRelativeTo : SET [0:?] OF IfcRelPositions FOR RelatedProducts;\n\tReferencedInStructures : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatedElements;\n WHERE\n\tPlacementForShapeRepresentation : (EXISTS(Representation) AND EXISTS(ObjectPlacement))\n            OR (EXISTS(Representation) AND \n      (SIZEOF(QUERY(temp <* Representation.Representations | 'IFC4X3_ADD2.IFCSHAPEREPRESENTATION' IN TYPEOF(temp))) = 0))\n            OR (NOT(EXISTS(Representation)));\nEND_ENTITY;\n\nENTITY IfcProductDefinitionShape\n SUBTYPE OF (IfcProductRepresentation);\n INVERSE\n\tShapeOfProduct : SET [1:?] OF IfcProduct FOR Representation;\n\tHasShapeAspects : SET [0:?] OF IfcShapeAspect FOR PartOfProductDefinitionShape;\n WHERE\n\tOnlyShapeModel : SIZEOF(QUERY(temp <* Representations | \n  (NOT('IFC4X3_ADD2.IFCSHAPEMODEL' IN TYPEOF(temp)))\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcProductRepresentation\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcMaterialDefinitionRepresentation\n\t,IfcProductDefinitionShape));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tRepresentations : LIST [1:?] OF IfcRepresentation;\nEND_ENTITY;\n\nENTITY IfcProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcArbitraryClosedProfileDef\n\t,IfcArbitraryOpenProfileDef\n\t,IfcCompositeProfileDef\n\t,IfcDerivedProfileDef\n\t,IfcOpenCrossProfileDef\n\t,IfcParameterizedProfileDef));\n\tProfileType : IfcProfileTypeEnum;\n\tProfileName : OPTIONAL IfcLabel;\n INVERSE\n\tHasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\n\tHasProperties : SET [0:?] OF IfcProfileProperties FOR ProfileDefinition;\nEND_ENTITY;\n\nENTITY IfcProfileProperties\n SUBTYPE OF (IfcExtendedProperties);\n\tProfileDefinition : IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcProject\n SUBTYPE OF (IfcContext);\n WHERE\n\tCorrectContext : NOT(EXISTS(SELF\\IfcContext.RepresentationContexts)) OR\n(SIZEOF(QUERY(Temp <* SELF\\IfcContext.RepresentationContexts |\n 'IFC4X3_ADD2.IFCGEOMETRICREPRESENTATIONSUBCONTEXT' IN TYPEOF(Temp)\n  )) = 0);\n\tHasName : EXISTS(SELF\\IfcRoot.Name);\n\tNoDecomposition : SIZEOF(SELF\\IfcObjectDefinition.Decomposes) = 0;\nEND_ENTITY;\n\nENTITY IfcProjectLibrary\n SUBTYPE OF (IfcContext);\nEND_ENTITY;\n\nENTITY IfcProjectOrder\n SUBTYPE OF (IfcControl);\n\tPredefinedType : OPTIONAL IfcProjectOrderTypeEnum;\n\tStatus : OPTIONAL IfcLabel;\n\tLongDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcProjectedCRS\n SUBTYPE OF (IfcCoordinateReferenceSystem);\n\tVerticalDatum : OPTIONAL IfcIdentifier;\n\tMapProjection : OPTIONAL IfcIdentifier;\n\tMapZone : OPTIONAL IfcIdentifier;\n\tMapUnit : OPTIONAL IfcNamedUnit;\n WHERE\n\tMapUnitIsLength : NOT(EXISTS(SELF.MapUnit)) OR (SELF.MapUnit.UnitType = IfcUnitEnum.LENGTHUNIT);\nEND_ENTITY;\n\nENTITY IfcProjectionElement\n SUBTYPE OF (IfcFeatureElementAddition);\n\tPredefinedType : OPTIONAL IfcProjectionElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcProjectionElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcProjectionElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcProperty\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcComplexProperty\n\t,IfcSimpleProperty))\n SUBTYPE OF (IfcPropertyAbstraction);\n\tName : IfcIdentifier;\n\tSpecification : OPTIONAL IfcText;\n INVERSE\n\tPartOfPset : SET [0:?] OF IfcPropertySet FOR HasProperties;\n\tPropertyForDependance : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependingProperty;\n\tPropertyDependsOn : SET [0:?] OF IfcPropertyDependencyRelationship FOR DependantProperty;\n\tPartOfComplex : SET [0:?] OF IfcComplexProperty FOR HasProperties;\n\tHasConstraints : SET [0:?] OF IfcResourceConstraintRelationship FOR RelatedResourceObjects;\n\tHasApprovals : SET [0:?] OF IfcResourceApprovalRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcPropertyAbstraction\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcExtendedProperties\n\t,IfcPreDefinedProperties\n\t,IfcProperty\n\t,IfcPropertyEnumeration));\n INVERSE\n\tHasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcPropertyBoundedValue\n SUBTYPE OF (IfcSimpleProperty);\n\tUpperBoundValue : OPTIONAL IfcValue;\n\tLowerBoundValue : OPTIONAL IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n\tSetPointValue : OPTIONAL IfcValue;\n WHERE\n\tSameUnitLowerSet : NOT(EXISTS(LowerBoundValue)) OR NOT(EXISTS(SetPointValue)) OR\n(TYPEOF(LowerBoundValue) = TYPEOF(SetPointValue));\n\tSameUnitUpperLower : NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(LowerBoundValue)) OR\n(TYPEOF(UpperBoundValue) = TYPEOF(LowerBoundValue));\n\tSameUnitUpperSet : NOT(EXISTS(UpperBoundValue)) OR NOT(EXISTS(SetPointValue)) OR\n(TYPEOF(UpperBoundValue) = TYPEOF(SetPointValue));\nEND_ENTITY;\n\nENTITY IfcPropertyDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPropertySetDefinition\n\t,IfcPropertyTemplateDefinition))\n SUBTYPE OF (IfcRoot);\n INVERSE\n\tHasContext : SET [0:1] OF IfcRelDeclares FOR RelatedDefinitions;\n\tHasAssociations : SET [0:?] OF IfcRelAssociates FOR RelatedObjects;\nEND_ENTITY;\n\nENTITY IfcPropertyDependencyRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tDependingProperty : IfcProperty;\n\tDependantProperty : IfcProperty;\n\tExpression : OPTIONAL IfcText;\n WHERE\n\tNoSelfReference : DependingProperty :<>: DependantProperty;\nEND_ENTITY;\n\nENTITY IfcPropertyEnumeratedValue\n SUBTYPE OF (IfcSimpleProperty);\n\tEnumerationValues : OPTIONAL LIST [1:?] OF IfcValue;\n\tEnumerationReference : OPTIONAL IfcPropertyEnumeration;\n WHERE\n\tWR21 : NOT(EXISTS(EnumerationReference)) \nOR  NOT(EXISTS(EnumerationValues)) \nOR  (SIZEOF(QUERY(temp <* EnumerationValues |\n    temp IN EnumerationReference.EnumerationValues))\n    = SIZEOF(EnumerationValues));\nEND_ENTITY;\n\nENTITY IfcPropertyEnumeration\n SUBTYPE OF (IfcPropertyAbstraction);\n\tName : IfcLabel;\n\tEnumerationValues : LIST [1:?] OF UNIQUE IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n UNIQUE\n\tUR1 : Name;\n WHERE\n\tWR01 : SIZEOF(QUERY(temp <* SELF.EnumerationValues | \n  NOT(TYPEOF(SELF.EnumerationValues[1]) = TYPEOF(temp))\n  )) = 0;\nEND_ENTITY;\n\nENTITY IfcPropertyListValue\n SUBTYPE OF (IfcSimpleProperty);\n\tListValues : OPTIONAL LIST [1:?] OF IfcValue;\n\tUnit : OPTIONAL IfcUnit;\n WHERE\n\tWR31 : SIZEOF(QUERY(temp <* SELF.ListValues | \n  NOT(TYPEOF(SELF.ListValues[1]) = TYPEOF(temp))\n  )) = 0;\nEND_ENTITY;\n\nENTITY IfcPropertyReferenceValue\n SUBTYPE OF (IfcSimpleProperty);\n\tUsageName : OPTIONAL IfcText;\n\tPropertyReference : OPTIONAL IfcObjectReferenceSelect;\nEND_ENTITY;\n\nENTITY IfcPropertySet\n SUBTYPE OF (IfcPropertySetDefinition);\n\tHasProperties : SET [1:?] OF IfcProperty;\n WHERE\n\tExistsName : EXISTS(SELF\\IfcRoot.Name);\n\tUniquePropertyNames : IfcUniquePropertyName(HasProperties);\nEND_ENTITY;\n\nENTITY IfcPropertySetDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPreDefinedPropertySet\n\t,IfcPropertySet\n\t,IfcQuantitySet))\n SUBTYPE OF (IfcPropertyDefinition);\n INVERSE\n\tDefinesType : SET [0:?] OF IfcTypeObject FOR HasPropertySets;\n\tIsDefinedBy : SET [0:?] OF IfcRelDefinesByTemplate FOR RelatedPropertySets;\n\tDefinesOccurrence : SET [0:?] OF IfcRelDefinesByProperties FOR RelatingPropertyDefinition;\nEND_ENTITY;\n\nENTITY IfcPropertySetTemplate\n SUBTYPE OF (IfcPropertyTemplateDefinition);\n\tTemplateType : OPTIONAL IfcPropertySetTemplateTypeEnum;\n\tApplicableEntity : OPTIONAL IfcIdentifier;\n\tHasPropertyTemplates : SET [1:?] OF IfcPropertyTemplate;\n INVERSE\n\tDefines : SET [0:?] OF IfcRelDefinesByTemplate FOR RelatingTemplate;\n WHERE\n\tExistsName : EXISTS(SELF\\IfcRoot.Name);\n\tUniquePropertyNames : IfcUniquePropertyTemplateNames(HasPropertyTemplates);\nEND_ENTITY;\n\nENTITY IfcPropertySingleValue\n SUBTYPE OF (IfcSimpleProperty);\n\tNominalValue : OPTIONAL IfcValue;\n\tUnit : OPTIONAL IfcUnit;\nEND_ENTITY;\n\nENTITY IfcPropertyTableValue\n SUBTYPE OF (IfcSimpleProperty);\n\tDefiningValues : OPTIONAL LIST [1:?] OF UNIQUE IfcValue;\n\tDefinedValues : OPTIONAL LIST [1:?] OF IfcValue;\n\tExpression : OPTIONAL IfcText;\n\tDefiningUnit : OPTIONAL IfcUnit;\n\tDefinedUnit : OPTIONAL IfcUnit;\n\tCurveInterpolation : OPTIONAL IfcCurveInterpolationEnum;\n WHERE\n\tWR21 : (NOT(EXISTS(DefiningValues)) AND NOT(EXISTS(DefinedValues)))\nOR (SIZEOF(DefiningValues) = SIZEOF(DefinedValues));\n\tWR22 : NOT(EXISTS(DefiningValues)) OR \n(SIZEOF(QUERY(temp <* SELF.DefiningValues | TYPEOF(temp) <> TYPEOF(SELF.DefiningValues[1])\n)) = 0);\n\tWR23 : NOT(EXISTS(DefinedValues)) OR \n(SIZEOF(QUERY(temp <* SELF.DefinedValues | TYPEOF(temp) <> TYPEOF(SELF.DefinedValues[1])\n)) = 0);\nEND_ENTITY;\n\nENTITY IfcPropertyTemplate\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcComplexPropertyTemplate\n\t,IfcSimplePropertyTemplate))\n SUBTYPE OF (IfcPropertyTemplateDefinition);\n INVERSE\n\tPartOfComplexTemplate : SET [0:?] OF IfcComplexPropertyTemplate FOR HasPropertyTemplates;\n\tPartOfPsetTemplate : SET [0:?] OF IfcPropertySetTemplate FOR HasPropertyTemplates;\nEND_ENTITY;\n\nENTITY IfcPropertyTemplateDefinition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPropertySetTemplate\n\t,IfcPropertyTemplate))\n SUBTYPE OF (IfcPropertyDefinition);\nEND_ENTITY;\n\nENTITY IfcProtectiveDevice\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcProtectiveDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcProtectiveDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcProtectiveDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCPROTECTIVEDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcProtectiveDeviceTrippingUnit\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcProtectiveDeviceTrippingUnitTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCPROTECTIVEDEVICETRIPPINGUNITTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcProtectiveDeviceTrippingUnitType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcProtectiveDeviceTrippingUnitTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcProtectiveDeviceTrippingUnitTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcProtectiveDeviceType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcProtectiveDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcProtectiveDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcProtectiveDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcPump\n SUBTYPE OF (IfcFlowMovingDevice);\n\tPredefinedType : OPTIONAL IfcPumpTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcPumpTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcPumpTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCPUMPTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcPumpType\n SUBTYPE OF (IfcFlowMovingDeviceType);\n\tPredefinedType : IfcPumpTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcPumpTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcPumpTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcQuantityArea\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tAreaValue : IfcAreaMeasure;\n\tFormula : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n   (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.AREAUNIT);\n\tWR22 : AreaValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityCount\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tCountValue : IfcCountMeasure;\n\tFormula : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : CountValue >= 0;\nEND_ENTITY;\n\nENTITY IfcQuantityLength\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tLengthValue : IfcLengthMeasure;\n\tFormula : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n   (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.LENGTHUNIT);\n\tWR22 : LengthValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityNumber\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tNumberValue : IfcNumericMeasure;\n\tFormula : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcQuantitySet\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcElementQuantity))\n SUBTYPE OF (IfcPropertySetDefinition);\nEND_ENTITY;\n\nENTITY IfcQuantityTime\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tTimeValue : IfcTimeMeasure;\n\tFormula : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n   (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.TIMEUNIT);\n\tWR22 : TimeValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityVolume\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tVolumeValue : IfcVolumeMeasure;\n\tFormula : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n   (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.VOLUMEUNIT);\n\tWR22 : VolumeValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcQuantityWeight\n SUBTYPE OF (IfcPhysicalSimpleQuantity);\n\tWeightValue : IfcMassMeasure;\n\tFormula : OPTIONAL IfcLabel;\n WHERE\n\tWR21 : NOT(EXISTS(SELF\\IfcPhysicalSimpleQuantity.Unit)) OR\n   (SELF\\IfcPhysicalSimpleQuantity.Unit.UnitType = IfcUnitEnum.MASSUNIT);\n\tWR22 : WeightValue >= 0.;\nEND_ENTITY;\n\nENTITY IfcRail\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcRailTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcRailTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRailTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCRAILTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcRailType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcRailTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcRailTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRailTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcRailing\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcRailingTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcRailingTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRailingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCRAILINGTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcRailingType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcRailingTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcRailingTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRailingTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcRailway\n SUBTYPE OF (IfcFacility);\n\tPredefinedType : OPTIONAL IfcRailwayTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcRailwayTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRailwayTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcRailwayPart\n SUBTYPE OF (IfcFacilityPart);\n\tPredefinedType : OPTIONAL IfcRailwayPartTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcRailwayPartTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRailwayPartTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcRamp\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcRampTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcRampTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRampTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCRAMPTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcRampFlight\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcRampFlightTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcRampFlightTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRampFlightTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCRAMPFLIGHTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcRampFlightType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcRampFlightTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcRampFlightTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRampFlightTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcRampType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcRampTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcRampTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRampTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcRationalBSplineCurveWithKnots\n SUBTYPE OF (IfcBSplineCurveWithKnots);\n\tWeightsData : LIST [2:?] OF IfcReal;\n DERIVE\n\t Weights : ARRAY [0:UpperIndexOnControlPoints] OF IfcReal := IfcListToArray(WeightsData,0,SELF\\IfcBSplineCurve.UpperIndexOnControlPoints);\n WHERE\n\tSameNumOfWeightsAndPoints : SIZEOF(WeightsData) = SIZEOF(SELF\\IfcBSplineCurve.ControlPointsList);\n\tWeightsGreaterZero : IfcCurveWeightsPositive(SELF);\nEND_ENTITY;\n\nENTITY IfcRationalBSplineSurfaceWithKnots\n SUBTYPE OF (IfcBSplineSurfaceWithKnots);\n\tWeightsData : LIST [2:?] OF LIST [2:?] OF IfcReal;\n DERIVE\n\t Weights : ARRAY [0:UUpper] OF ARRAY [0:VUpper] OF IfcReal := IfcMakeArrayOfArray(WeightsData,0,UUpper,0,VUpper);\n WHERE\n\tCorrespondingWeightsDataLists : (SIZEOF(WeightsData) = SIZEOF(SELF\\IfcBSplineSurface.ControlPointsList))\nAND \n(SIZEOF(WeightsData[1]) = SIZEOF(SELF\\IfcBSplineSurface.ControlPointsList[1]));\n\tWeightValuesGreaterZero : IfcSurfaceWeightsPositive(SELF);\nEND_ENTITY;\n\nENTITY IfcRectangleHollowProfileDef\n SUBTYPE OF (IfcRectangleProfileDef);\n\tWallThickness : IfcPositiveLengthMeasure;\n\tInnerFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tOuterFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n WHERE\n\tValidInnerRadius : NOT(EXISTS(InnerFilletRadius)) OR \n((InnerFilletRadius <= (SELF\\IfcRectangleProfileDef.XDim/2. - WallThickness)) AND \n (InnerFilletRadius <= (SELF\\IfcRectangleProfileDef.YDim/2. - WallThickness)))\n;\n\tValidOuterRadius : NOT(EXISTS(OuterFilletRadius)) OR \n((OuterFilletRadius <= (SELF\\IfcRectangleProfileDef.XDim/2.)) AND \n (OuterFilletRadius <= (SELF\\IfcRectangleProfileDef.YDim/2.)));\n\tValidWallThickness : (WallThickness < (SELF\\IfcRectangleProfileDef.XDim/2.)) AND \n(WallThickness < (SELF\\IfcRectangleProfileDef.YDim/2.));\nEND_ENTITY;\n\nENTITY IfcRectangleProfileDef\n SUPERTYPE OF (ONEOF\n\t(IfcRectangleHollowProfileDef\n\t,IfcRoundedRectangleProfileDef))\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRectangularPyramid\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tXLength : IfcPositiveLengthMeasure;\n\tYLength : IfcPositiveLengthMeasure;\n\tHeight : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRectangularTrimmedSurface\n SUBTYPE OF (IfcBoundedSurface);\n\tBasisSurface : IfcSurface;\n\tU1 : IfcParameterValue;\n\tV1 : IfcParameterValue;\n\tU2 : IfcParameterValue;\n\tV2 : IfcParameterValue;\n\tUsense : IfcBoolean;\n\tVsense : IfcBoolean;\n WHERE\n\tU1AndU2Different : U1 <> U2;\n\tUsenseCompatible : (('IFC4X3_ADD2.IFCELEMENTARYSURFACE' IN TYPEOF(BasisSurface)) AND\n         (NOT ('IFC4X3_ADD2.IFCPLANE' IN TYPEOF(BasisSurface)))) OR\n         ('IFC4X3_ADD2.IFCSURFACEOFREVOLUTION' IN TYPEOF(BasisSurface)) OR\n         (Usense = (U2 > U1));\n\tV1AndV2Different : V1 <> V2;\n\tVsenseCompatible : Vsense = (V2 > V1);\nEND_ENTITY;\n\nENTITY IfcRecurrencePattern;\n\tRecurrenceType : IfcRecurrenceTypeEnum;\n\tDayComponent : OPTIONAL SET [1:?] OF IfcDayInMonthNumber;\n\tWeekdayComponent : OPTIONAL SET [1:?] OF IfcDayInWeekNumber;\n\tMonthComponent : OPTIONAL SET [1:?] OF IfcMonthInYearNumber;\n\tPosition : OPTIONAL IfcInteger;\n\tInterval : OPTIONAL IfcInteger;\n\tOccurrences : OPTIONAL IfcInteger;\n\tTimePeriods : OPTIONAL LIST [1:?] OF IfcTimePeriod;\nEND_ENTITY;\n\nENTITY IfcReference;\n\tTypeIdentifier : OPTIONAL IfcIdentifier;\n\tAttributeIdentifier : OPTIONAL IfcIdentifier;\n\tInstanceName : OPTIONAL IfcLabel;\n\tListPositions : OPTIONAL LIST [1:?] OF IfcInteger;\n\tInnerReference : OPTIONAL IfcReference;\nEND_ENTITY;\n\nENTITY IfcReferent\n SUBTYPE OF (IfcPositioningElement);\n\tPredefinedType : OPTIONAL IfcReferentTypeEnum;\nEND_ENTITY;\n\nENTITY IfcRegularTimeSeries\n SUBTYPE OF (IfcTimeSeries);\n\tTimeStep : IfcTimeMeasure;\n\tValues : LIST [1:?] OF IfcTimeSeriesValue;\nEND_ENTITY;\n\nENTITY IfcReinforcedSoil\n SUBTYPE OF (IfcEarthworksElement);\n\tPredefinedType : OPTIONAL IfcReinforcedSoilTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcReinforcedSoilTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcReinforcedSoilTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcReinforcementBarProperties\n SUBTYPE OF (IfcPreDefinedProperties);\n\tTotalCrossSectionArea : IfcAreaMeasure;\n\tSteelGrade : IfcLabel;\n\tBarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;\n\tEffectiveDepth : OPTIONAL IfcLengthMeasure;\n\tNominalBarDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tBarCount : OPTIONAL IfcCountMeasure;\nEND_ENTITY;\n\nENTITY IfcReinforcementDefinitionProperties\n SUBTYPE OF (IfcPreDefinedPropertySet);\n\tDefinitionType : OPTIONAL IfcLabel;\n\tReinforcementSectionDefinitions : LIST [1:?] OF IfcSectionReinforcementProperties;\nEND_ENTITY;\n\nENTITY IfcReinforcingBar\n SUBTYPE OF (IfcReinforcingElement);\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tBarLength : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : OPTIONAL IfcReinforcingBarTypeEnum;\n\tBarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcReinforcingBarTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcReinforcingBarTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCREINFORCINGBARTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcReinforcingBarType\n SUBTYPE OF (IfcReinforcingElementType);\n\tPredefinedType : IfcReinforcingBarTypeEnum;\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tBarLength : OPTIONAL IfcPositiveLengthMeasure;\n\tBarSurface : OPTIONAL IfcReinforcingBarSurfaceEnum;\n\tBendingShapeCode : OPTIONAL IfcLabel;\n\tBendingParameters : OPTIONAL LIST [1:?] OF IfcBendingParameterSelect;\n WHERE\n\tBendingShapeCodeProvided : NOT EXISTS(BendingParameters) OR EXISTS(BendingShapeCode);\n\tCorrectPredefinedType : (PredefinedType <> IfcReinforcingBarTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcReinforcingBarTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcReinforcingElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcReinforcingBar\n\t,IfcReinforcingMesh\n\t,IfcTendon\n\t,IfcTendonAnchor\n\t,IfcTendonConduit))\n SUBTYPE OF (IfcElementComponent);\n\tSteelGrade : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcReinforcingElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcReinforcingBarType\n\t,IfcReinforcingMeshType\n\t,IfcTendonAnchorType\n\t,IfcTendonConduitType\n\t,IfcTendonType))\n SUBTYPE OF (IfcElementComponentType);\nEND_ENTITY;\n\nENTITY IfcReinforcingMesh\n SUBTYPE OF (IfcReinforcingElement);\n\tMeshLength : OPTIONAL IfcPositiveLengthMeasure;\n\tMeshWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tLongitudinalBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tTransverseBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tLongitudinalBarCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tTransverseBarCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tLongitudinalBarSpacing : OPTIONAL IfcPositiveLengthMeasure;\n\tTransverseBarSpacing : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : OPTIONAL IfcReinforcingMeshTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcReinforcingMeshTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcReinforcingMeshTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCREINFORCINGMESHTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcReinforcingMeshType\n SUBTYPE OF (IfcReinforcingElementType);\n\tPredefinedType : IfcReinforcingMeshTypeEnum;\n\tMeshLength : OPTIONAL IfcPositiveLengthMeasure;\n\tMeshWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tLongitudinalBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tTransverseBarNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tLongitudinalBarCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tTransverseBarCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tLongitudinalBarSpacing : OPTIONAL IfcPositiveLengthMeasure;\n\tTransverseBarSpacing : OPTIONAL IfcPositiveLengthMeasure;\n\tBendingShapeCode : OPTIONAL IfcLabel;\n\tBendingParameters : OPTIONAL LIST [1:?] OF IfcBendingParameterSelect;\n WHERE\n\tBendingShapeCodeProvided : NOT EXISTS(BendingParameters) OR EXISTS(BendingShapeCode);\n\tCorrectPredefinedType : (PredefinedType <> IfcReinforcingMeshTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcReinforcingMeshTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcRelAdheresToElement\n SUBTYPE OF (IfcRelDecomposes);\n\tRelatingElement : IfcElement;\n\tRelatedSurfaceFeatures : SET [1:?] OF IfcSurfaceFeature;\nEND_ENTITY;\n\nENTITY IfcRelAggregates\n SUBTYPE OF (IfcRelDecomposes);\n\tRelatingObject : IfcObjectDefinition;\n\tRelatedObjects : SET [1:?] OF IfcObjectDefinition;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* RelatedObjects | RelatingObject :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssigns\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelAssignsToActor\n\t,IfcRelAssignsToControl\n\t,IfcRelAssignsToGroup\n\t,IfcRelAssignsToProcess\n\t,IfcRelAssignsToProduct\n\t,IfcRelAssignsToResource))\n SUBTYPE OF (IfcRelationship);\n\tRelatedObjects : SET [1:?] OF IfcObjectDefinition;\n\tRelatedObjectsType : OPTIONAL IfcStrippedOptional;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToActor\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingActor : IfcActor;\n\tActingRole : OPTIONAL IfcActorRole;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingActor :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToControl\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingControl : IfcControl;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingControl :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToGroup\n SUPERTYPE OF (ONEOF\n\t(IfcRelAssignsToGroupByFactor))\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingGroup : IfcGroup;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingGroup :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToGroupByFactor\n SUBTYPE OF (IfcRelAssignsToGroup);\n\tFactor : IfcRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToProcess\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingProcess : IfcProcessSelect;\n\tQuantityInProcess : OPTIONAL IfcMeasureWithUnit;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingProcess :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToProduct\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingProduct : IfcProductSelect;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingProduct :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssignsToResource\n SUBTYPE OF (IfcRelAssigns);\n\tRelatingResource : IfcResourceSelect;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* SELF\\IfcRelAssigns.RelatedObjects | RelatingResource :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssociates\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelAssociatesApproval\n\t,IfcRelAssociatesClassification\n\t,IfcRelAssociatesConstraint\n\t,IfcRelAssociatesDocument\n\t,IfcRelAssociatesLibrary\n\t,IfcRelAssociatesMaterial\n\t,IfcRelAssociatesProfileDef))\n SUBTYPE OF (IfcRelationship);\n\tRelatedObjects : SET [1:?] OF IfcDefinitionSelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesApproval\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingApproval : IfcApproval;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesClassification\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingClassification : IfcClassificationSelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesConstraint\n SUBTYPE OF (IfcRelAssociates);\n\tIntent : OPTIONAL IfcLabel;\n\tRelatingConstraint : IfcConstraint;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesDocument\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingDocument : IfcDocumentSelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesLibrary\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingLibrary : IfcLibrarySelect;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesMaterial\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingMaterial : IfcMaterialSelect;\n WHERE\n\tAllowedElements : SIZEOF(QUERY(temp <* SELF\\IfcRelAssociates.RelatedObjects | (\n  SIZEOF(TYPEOF(temp) * [   \n    'IFC4X3_ADD2.IFCELEMENT', \n    'IFC4X3_ADD2.IFCELEMENTTYPE',\n    'IFC4X3_ADD2.IFCSTRUCTURALMEMBER',\n    'IFC4X3_ADD2.IFCPORT']) = 0) \n)) = 0;\n\tNoVoidElement : SIZEOF(QUERY(temp <* SELF\\IfcRelAssociates.RelatedObjects | \n  ('IFC4X3_ADD2.IFCFEATUREELEMENTSUBTRACTION' IN TYPEOF(temp)) OR \n  ('IFC4X3_ADD2.IFCVIRTUALELEMENT' IN TYPEOF(temp)) \n)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelAssociatesProfileDef\n SUBTYPE OF (IfcRelAssociates);\n\tRelatingProfileDef : IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcRelConnects\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelConnectsElements\n\t,IfcRelConnectsPortToElement\n\t,IfcRelConnectsPorts\n\t,IfcRelConnectsStructuralActivity\n\t,IfcRelConnectsStructuralMember\n\t,IfcRelContainedInSpatialStructure\n\t,IfcRelCoversBldgElements\n\t,IfcRelCoversSpaces\n\t,IfcRelFillsElement\n\t,IfcRelFlowControlElements\n\t,IfcRelInterferesElements\n\t,IfcRelPositions\n\t,IfcRelReferencedInSpatialStructure\n\t,IfcRelSequence\n\t,IfcRelServicesBuildings\n\t,IfcRelSpaceBoundary))\n SUBTYPE OF (IfcRelationship);\nEND_ENTITY;\n\nENTITY IfcRelConnectsElements\n SUPERTYPE OF (ONEOF\n\t(IfcRelConnectsPathElements\n\t,IfcRelConnectsWithRealizingElements))\n SUBTYPE OF (IfcRelConnects);\n\tConnectionGeometry : OPTIONAL IfcConnectionGeometry;\n\tRelatingElement : IfcElement;\n\tRelatedElement : IfcElement;\n WHERE\n\tNoSelfReference : RelatingElement :<>: RelatedElement;\nEND_ENTITY;\n\nENTITY IfcRelConnectsPathElements\n SUBTYPE OF (IfcRelConnectsElements);\n\tRelatingPriorities : LIST [0:?] OF IfcInteger;\n\tRelatedPriorities : LIST [0:?] OF IfcInteger;\n\tRelatedConnectionType : IfcConnectionTypeEnum;\n\tRelatingConnectionType : IfcConnectionTypeEnum;\n WHERE\n\tNormalizedRelatedPriorities : (SIZEOF(RelatedPriorities) = 0)\nOR\n(SIZEOF (QUERY (temp <* RelatedPriorities\n  | {0 <= temp <= 100}\n  )) = SIZEOF(RelatedPriorities));\n\tNormalizedRelatingPriorities : (SIZEOF(RelatingPriorities) = 0)\nOR\n(SIZEOF (QUERY (temp <* RelatingPriorities\n  | {0 <= temp <= 100}\n  )) = SIZEOF(RelatingPriorities));\nEND_ENTITY;\n\nENTITY IfcRelConnectsPortToElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingPort : IfcPort;\n\tRelatedElement : IfcDistributionElement;\nEND_ENTITY;\n\nENTITY IfcRelConnectsPorts\n SUBTYPE OF (IfcRelConnects);\n\tRelatingPort : IfcPort;\n\tRelatedPort : IfcPort;\n\tRealizingElement : OPTIONAL IfcElement;\n WHERE\n\tNoSelfReference : RelatingPort :<>: RelatedPort;\nEND_ENTITY;\n\nENTITY IfcRelConnectsStructuralActivity\n SUBTYPE OF (IfcRelConnects);\n\tRelatingElement : IfcStructuralActivityAssignmentSelect;\n\tRelatedStructuralActivity : IfcStructuralActivity;\nEND_ENTITY;\n\nENTITY IfcRelConnectsStructuralMember\n SUPERTYPE OF (ONEOF\n\t(IfcRelConnectsWithEccentricity))\n SUBTYPE OF (IfcRelConnects);\n\tRelatingStructuralMember : IfcStructuralMember;\n\tRelatedStructuralConnection : IfcStructuralConnection;\n\tAppliedCondition : OPTIONAL IfcBoundaryCondition;\n\tAdditionalConditions : OPTIONAL IfcStructuralConnectionCondition;\n\tSupportedLength : OPTIONAL IfcLengthMeasure;\n\tConditionCoordinateSystem : OPTIONAL IfcAxis2Placement3D;\nEND_ENTITY;\n\nENTITY IfcRelConnectsWithEccentricity\n SUBTYPE OF (IfcRelConnectsStructuralMember);\n\tConnectionConstraint : IfcConnectionGeometry;\nEND_ENTITY;\n\nENTITY IfcRelConnectsWithRealizingElements\n SUBTYPE OF (IfcRelConnectsElements);\n\tRealizingElements : SET [1:?] OF IfcElement;\n\tConnectionType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcRelContainedInSpatialStructure\n SUBTYPE OF (IfcRelConnects);\n\tRelatedElements : SET [1:?] OF IfcProduct;\n\tRelatingStructure : IfcSpatialElement;\n WHERE\n\tWR31 : SIZEOF(QUERY(temp <* RelatedElements | 'IFC4X3_ADD2.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcRelCoversBldgElements\n SUBTYPE OF (IfcRelConnects);\n\tRelatingBuildingElement : IfcElement;\n\tRelatedCoverings : SET [1:?] OF IfcCovering;\nEND_ENTITY;\n\nENTITY IfcRelCoversSpaces\n SUBTYPE OF (IfcRelConnects);\n\tRelatingSpace : IfcSpace;\n\tRelatedCoverings : SET [1:?] OF IfcCovering;\nEND_ENTITY;\n\nENTITY IfcRelDeclares\n SUBTYPE OF (IfcRelationship);\n\tRelatingContext : IfcContext;\n\tRelatedDefinitions : SET [1:?] OF IfcDefinitionSelect;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* RelatedDefinitions | RelatingContext :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelDecomposes\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelAdheresToElement\n\t,IfcRelAggregates\n\t,IfcRelNests\n\t,IfcRelProjectsElement\n\t,IfcRelVoidsElement))\n SUBTYPE OF (IfcRelationship);\nEND_ENTITY;\n\nENTITY IfcRelDefines\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelDefinesByObject\n\t,IfcRelDefinesByProperties\n\t,IfcRelDefinesByTemplate\n\t,IfcRelDefinesByType))\n SUBTYPE OF (IfcRelationship);\nEND_ENTITY;\n\nENTITY IfcRelDefinesByObject\n SUBTYPE OF (IfcRelDefines);\n\tRelatedObjects : SET [1:?] OF IfcObject;\n\tRelatingObject : IfcObject;\nEND_ENTITY;\n\nENTITY IfcRelDefinesByProperties\n SUBTYPE OF (IfcRelDefines);\n\tRelatedObjects : SET [1:?] OF IfcObjectDefinition;\n\tRelatingPropertyDefinition : IfcPropertySetDefinitionSelect;\n WHERE\n\tNoRelatedTypeObject : SIZEOF(QUERY(Types <* SELF\\IfcRelDefinesByProperties.RelatedObjects |  'IFC4X3_ADD2.IFCTYPEOBJECT' IN TYPEOF(Types))) = 0;\nEND_ENTITY;\n\nENTITY IfcRelDefinesByTemplate\n SUBTYPE OF (IfcRelDefines);\n\tRelatedPropertySets : SET [1:?] OF IfcPropertySetDefinition;\n\tRelatingTemplate : IfcPropertySetTemplate;\nEND_ENTITY;\n\nENTITY IfcRelDefinesByType\n SUBTYPE OF (IfcRelDefines);\n\tRelatedObjects : SET [1:?] OF IfcObject;\n\tRelatingType : IfcTypeObject;\nEND_ENTITY;\n\nENTITY IfcRelFillsElement\n SUBTYPE OF (IfcRelConnects);\n\tRelatingOpeningElement : IfcOpeningElement;\n\tRelatedBuildingElement : IfcElement;\nEND_ENTITY;\n\nENTITY IfcRelFlowControlElements\n SUBTYPE OF (IfcRelConnects);\n\tRelatedControlElements : SET [1:?] OF IfcDistributionControlElement;\n\tRelatingFlowElement : IfcDistributionFlowElement;\nEND_ENTITY;\n\nENTITY IfcRelInterferesElements\n SUBTYPE OF (IfcRelConnects);\n\tRelatingElement : IfcInterferenceSelect;\n\tRelatedElement : IfcInterferenceSelect;\n\tInterferenceGeometry : OPTIONAL IfcConnectionGeometry;\n\tInterferenceType : OPTIONAL IfcIdentifier;\n\tImpliedOrder : IfcLogical;\n\tInterferenceSpace : OPTIONAL IfcSpatialZone;\n WHERE\n\tNoSelfReference : RelatingElement :<>: RelatedElement;\nEND_ENTITY;\n\nENTITY IfcRelNests\n SUBTYPE OF (IfcRelDecomposes);\n\tRelatingObject : IfcObjectDefinition;\n\tRelatedObjects : LIST [1:?] OF IfcObjectDefinition;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(Temp <* RelatedObjects | RelatingObject :=: Temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelPositions\n SUBTYPE OF (IfcRelConnects);\n\tRelatingPositioningElement : IfcPositioningElement;\n\tRelatedProducts : SET [1:?] OF IfcProduct;\n WHERE\n\tNoSelfReference : SIZEOF(QUERY(temp <* RelatedProducts | RelatingPositioningElement :=: temp)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelProjectsElement\n SUBTYPE OF (IfcRelDecomposes);\n\tRelatingElement : IfcElement;\n\tRelatedFeatureElement : IfcFeatureElementAddition;\nEND_ENTITY;\n\nENTITY IfcRelReferencedInSpatialStructure\n SUBTYPE OF (IfcRelConnects);\n\tRelatedElements : SET [1:?] OF IfcSpatialReferenceSelect;\n\tRelatingStructure : IfcSpatialElement;\n WHERE\n\tAllowedRelatedElements : SIZEOF(QUERY(temp <* RelatedElements | ('IFC4X3_ADD2.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF(temp)) AND (NOT ('IFC4X3_ADD2.IFCSPACE' IN TYPEOF(temp)))\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcRelSequence\n SUBTYPE OF (IfcRelConnects);\n\tRelatingProcess : IfcProcess;\n\tRelatedProcess : IfcProcess;\n\tTimeLag : OPTIONAL IfcLagTime;\n\tSequenceType : OPTIONAL IfcSequenceEnum;\n\tUserDefinedSequenceType : OPTIONAL IfcLabel;\n WHERE\n\tAvoidInconsistentSequence : RelatingProcess :<>: RelatedProcess;\n\tCorrectSequenceType : (SequenceType <> IfcSequenceEnum.USERDEFINED) OR ((SequenceType = IfcSequenceEnum.USERDEFINED) AND EXISTS(UserDefinedSequenceType));\nEND_ENTITY;\n\nENTITY IfcRelServicesBuildings\n SUBTYPE OF (IfcRelConnects);\n\tRelatingSystem : IfcSystem;\n\tRelatedBuildings : SET [1:?] OF IfcSpatialElement;\nEND_ENTITY;\n\nENTITY IfcRelSpaceBoundary\n SUPERTYPE OF (ONEOF\n\t(IfcRelSpaceBoundary1stLevel))\n SUBTYPE OF (IfcRelConnects);\n\tRelatingSpace : IfcSpaceBoundarySelect;\n\tRelatedBuildingElement : IfcElement;\n\tConnectionGeometry : OPTIONAL IfcConnectionGeometry;\n\tPhysicalOrVirtualBoundary : IfcPhysicalOrVirtualEnum;\n\tInternalOrExternalBoundary : IfcInternalOrExternalEnum;\n WHERE\n\tCorrectPhysOrVirt : ((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Physical) \n  AND (NOT('IFC4X3_ADD2.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)))) \nOR \n((PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.Virtual) \n  AND (('IFC4X3_ADD2.IFCVIRTUALELEMENT' IN TYPEOF(RelatedBuildingElement)) \n  OR   ('IFC4X3_ADD2.IFCOPENINGELEMENT' IN TYPEOF(RelatedBuildingElement)))) \nOR \n(PhysicalOrVirtualBoundary = IfcPhysicalOrVirtualEnum.NotDefined);\nEND_ENTITY;\n\nENTITY IfcRelSpaceBoundary1stLevel\n SUPERTYPE OF (ONEOF\n\t(IfcRelSpaceBoundary2ndLevel))\n SUBTYPE OF (IfcRelSpaceBoundary);\n\tParentBoundary : OPTIONAL IfcRelSpaceBoundary1stLevel;\n INVERSE\n\tInnerBoundaries : SET [0:?] OF IfcRelSpaceBoundary1stLevel FOR ParentBoundary;\nEND_ENTITY;\n\nENTITY IfcRelSpaceBoundary2ndLevel\n SUBTYPE OF (IfcRelSpaceBoundary1stLevel);\n\tCorrespondingBoundary : OPTIONAL IfcRelSpaceBoundary2ndLevel;\n INVERSE\n\tCorresponds : SET [0:1] OF IfcRelSpaceBoundary2ndLevel FOR CorrespondingBoundary;\nEND_ENTITY;\n\nENTITY IfcRelVoidsElement\n SUBTYPE OF (IfcRelDecomposes);\n\tRelatingBuildingElement : IfcElement;\n\tRelatedOpeningElement : IfcFeatureElementSubtraction;\nEND_ENTITY;\n\nENTITY IfcRelationship\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcRelAssigns\n\t,IfcRelAssociates\n\t,IfcRelConnects\n\t,IfcRelDeclares\n\t,IfcRelDecomposes\n\t,IfcRelDefines))\n SUBTYPE OF (IfcRoot);\nEND_ENTITY;\n\nENTITY IfcReparametrisedCompositeCurveSegment\n SUBTYPE OF (IfcCompositeCurveSegment);\n\tParamLength : IfcParameterValue;\n WHERE\n\tPositiveLengthParameter : ParamLength > 0.0;\nEND_ENTITY;\n\nENTITY IfcRepresentation\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcShapeModel\n\t,IfcStyleModel));\n\tContextOfItems : IfcRepresentationContext;\n\tRepresentationIdentifier : OPTIONAL IfcLabel;\n\tRepresentationType : OPTIONAL IfcLabel;\n\tItems : SET [1:?] OF IfcRepresentationItem;\n INVERSE\n\tRepresentationMap : SET [0:1] OF IfcRepresentationMap FOR MappedRepresentation;\n\tLayerAssignments : SET [0:?] OF IfcPresentationLayerAssignment FOR AssignedItems;\n\tOfProductRepresentation : SET [0:?] OF IfcProductRepresentation FOR Representations;\nEND_ENTITY;\n\nENTITY IfcRepresentationContext\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcGeometricRepresentationContext));\n\tContextIdentifier : OPTIONAL IfcLabel;\n\tContextType : OPTIONAL IfcLabel;\n INVERSE\n\tRepresentationsInContext : SET [0:?] OF IfcRepresentation FOR ContextOfItems;\nEND_ENTITY;\n\nENTITY IfcRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcGeometricRepresentationItem\n\t,IfcMappedItem\n\t,IfcStyledItem\n\t,IfcTopologicalRepresentationItem));\n INVERSE\n\tLayerAssignment : SET [0:1] OF IfcPresentationLayerAssignment FOR AssignedItems;\n\tStyledByItem : SET [0:1] OF IfcStyledItem FOR Item;\nEND_ENTITY;\n\nENTITY IfcRepresentationMap;\n\tMappingOrigin : IfcAxis2Placement;\n\tMappedRepresentation : IfcRepresentation;\n INVERSE\n\tHasShapeAspects : SET [0:?] OF IfcShapeAspect FOR PartOfProductDefinitionShape;\n\tMapUsage : SET [0:?] OF IfcMappedItem FOR MappingSource;\n WHERE\n\tApplicableMappedRepr : 'IFC4X3_ADD2.IFCSHAPEMODEL' IN TYPEOF(MappedRepresentation);\nEND_ENTITY;\n\nENTITY IfcResource\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConstructionResource))\n SUBTYPE OF (IfcObject);\n\tIdentification : OPTIONAL IfcIdentifier;\n\tLongDescription : OPTIONAL IfcText;\n INVERSE\n\tResourceOf : SET [0:?] OF IfcRelAssignsToResource FOR RelatingResource;\nEND_ENTITY;\n\nENTITY IfcResourceApprovalRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatedResourceObjects : SET [1:?] OF IfcResourceObjectSelect;\n\tRelatingApproval : IfcApproval;\nEND_ENTITY;\n\nENTITY IfcResourceConstraintRelationship\n SUBTYPE OF (IfcResourceLevelRelationship);\n\tRelatingConstraint : IfcConstraint;\n\tRelatedResourceObjects : SET [1:?] OF IfcResourceObjectSelect;\nEND_ENTITY;\n\nENTITY IfcResourceLevelRelationship\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcApprovalRelationship\n\t,IfcCurrencyRelationship\n\t,IfcDocumentInformationRelationship\n\t,IfcExternalReferenceRelationship\n\t,IfcMaterialRelationship\n\t,IfcOrganizationRelationship\n\t,IfcPropertyDependencyRelationship\n\t,IfcResourceApprovalRelationship\n\t,IfcResourceConstraintRelationship));\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\nEND_ENTITY;\n\nENTITY IfcResourceTime\n SUBTYPE OF (IfcSchedulingTime);\n\tScheduleWork : OPTIONAL IfcDuration;\n\tScheduleUsage : OPTIONAL IfcPositiveRatioMeasure;\n\tScheduleStart : OPTIONAL IfcDateTime;\n\tScheduleFinish : OPTIONAL IfcDateTime;\n\tScheduleContour : OPTIONAL IfcLabel;\n\tLevelingDelay : OPTIONAL IfcDuration;\n\tIsOverAllocated : OPTIONAL IfcBoolean;\n\tStatusTime : OPTIONAL IfcDateTime;\n\tActualWork : OPTIONAL IfcDuration;\n\tActualUsage : OPTIONAL IfcPositiveRatioMeasure;\n\tActualStart : OPTIONAL IfcDateTime;\n\tActualFinish : OPTIONAL IfcDateTime;\n\tRemainingWork : OPTIONAL IfcDuration;\n\tRemainingUsage : OPTIONAL IfcPositiveRatioMeasure;\n\tCompletion : OPTIONAL IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcRevolvedAreaSolid\n SUPERTYPE OF (ONEOF\n\t(IfcRevolvedAreaSolidTapered))\n SUBTYPE OF (IfcSweptAreaSolid);\n\tAxis : IfcAxis1Placement;\n\tAngle : IfcPlaneAngleMeasure;\n DERIVE\n\t AxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(Axis.Location, \n  IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Axis.Z,1.0));\n WHERE\n\tAxisDirectionInXY : Axis.Z.DirectionRatios[3] = 0.0;\n\tAxisStartInXY : ('IFC4X3_ADD2.IFCCARTESIANPOINT' IN TYPEOF(Axis.Location)) AND (Axis.Location\\IfcCartesianPoint.Coordinates[3] = 0.0);\nEND_ENTITY;\n\nENTITY IfcRevolvedAreaSolidTapered\n SUBTYPE OF (IfcRevolvedAreaSolid);\n\tEndSweptArea : IfcProfileDef;\n WHERE\n\tCorrectProfileAssignment : IfcTaperedSweptAreaProfiles(SELF\\IfcSweptAreaSolid.SweptArea, SELF.EndSweptArea);\nEND_ENTITY;\n\nENTITY IfcRightCircularCone\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tHeight : IfcPositiveLengthMeasure;\n\tBottomRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRightCircularCylinder\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tHeight : IfcPositiveLengthMeasure;\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcRigidOperation\n SUBTYPE OF (IfcCoordinateOperation);\n\tFirstCoordinate : IfcMeasureValue;\n\tSecondCoordinate : IfcMeasureValue;\n\tHeight : OPTIONAL IfcLengthMeasure;\n WHERE\n\tSameCoordinateType : (('IFC4X3_ADD2.IFCLENGTHMEASURE' IN TYPEOF(FirstCoordinate)) AND ('IFC4X3_ADD2.IFCLENGTHMEASURE' IN TYPEOF(SecondCoordinate))) OR (('IFC4X3_ADD2.IFCPLANEANGLEMEASURE' IN TYPEOF(FirstCoordinate)) AND ('IFC4X3_ADD2.IFCPLANEANGLEMEASURE' IN TYPEOF(SecondCoordinate)));\nEND_ENTITY;\n\nENTITY IfcRoad\n SUBTYPE OF (IfcFacility);\n\tPredefinedType : OPTIONAL IfcRoadTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcRoadTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRoadTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcRoadPart\n SUBTYPE OF (IfcFacilityPart);\n\tPredefinedType : OPTIONAL IfcRoadPartTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcRoadPartTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRoadPartTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcRoof\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcRoofTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcRoofTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRoofTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCROOFTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcRoofType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcRoofTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcRoofTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcRoofTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcRoot\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcObjectDefinition\n\t,IfcPropertyDefinition\n\t,IfcRelationship));\n\tGlobalId : IfcGloballyUniqueId;\n\tOwnerHistory : OPTIONAL IfcOwnerHistory;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n UNIQUE\n\tUR1 : GlobalId;\nEND_ENTITY;\n\nENTITY IfcRoundedRectangleProfileDef\n SUBTYPE OF (IfcRectangleProfileDef);\n\tRoundingRadius : IfcPositiveLengthMeasure;\n WHERE\n\tValidRadius : ((RoundingRadius <= (SELF\\IfcRectangleProfileDef.XDim/2.)) AND \n (RoundingRadius <= (SELF\\IfcRectangleProfileDef.YDim/2.)));\nEND_ENTITY;\n\nENTITY IfcSIUnit\n SUBTYPE OF (IfcNamedUnit);\n\tPrefix : OPTIONAL IfcSIPrefix;\n\tName : IfcSIUnitName;\n DERIVE\n\t SELF\\IfcNamedUnit.Dimensions : IfcDimensionalExponents := IfcDimensionsForSIUnit (SELF.Name);\nEND_ENTITY;\n\nENTITY IfcSanitaryTerminal\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcSanitaryTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSanitaryTerminalTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSanitaryTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCSANITARYTERMINALTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSanitaryTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcSanitaryTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSanitaryTerminalTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSanitaryTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSchedulingTime\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcEventTime\n\t,IfcLagTime\n\t,IfcResourceTime\n\t,IfcTaskTime\n\t,IfcWorkTime));\n\tName : OPTIONAL IfcLabel;\n\tDataOrigin : OPTIONAL IfcDataOriginEnum;\n\tUserDefinedDataOrigin : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcSeamCurve\n SUBTYPE OF (IfcSurfaceCurve);\n WHERE\n\tSameSurface : IfcAssociatedSurface(SELF\\IfcSurfaceCurve.AssociatedGeometry[1]) = IfcAssociatedSurface(SELF\\IfcSurfaceCurve.AssociatedGeometry[2]);\n\tTwoPCurves : SIZEOF(SELF\\IfcSurfaceCurve.AssociatedGeometry) = 2;\nEND_ENTITY;\n\nENTITY IfcSecondOrderPolynomialSpiral\n SUBTYPE OF (IfcSpiral);\n\tQuadraticTerm : IfcLengthMeasure;\n\tLinearTerm : OPTIONAL IfcLengthMeasure;\n\tConstantTerm : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcSectionProperties\n SUBTYPE OF (IfcPreDefinedProperties);\n\tSectionType : IfcSectionTypeEnum;\n\tStartProfile : IfcProfileDef;\n\tEndProfile : OPTIONAL IfcProfileDef;\nEND_ENTITY;\n\nENTITY IfcSectionReinforcementProperties\n SUBTYPE OF (IfcPreDefinedProperties);\n\tLongitudinalStartPosition : IfcLengthMeasure;\n\tLongitudinalEndPosition : IfcLengthMeasure;\n\tTransversePosition : OPTIONAL IfcLengthMeasure;\n\tReinforcementRole : IfcReinforcingBarRoleEnum;\n\tSectionDefinition : IfcSectionProperties;\n\tCrossSectionReinforcementDefinitions : SET [1:?] OF IfcReinforcementBarProperties;\nEND_ENTITY;\n\nENTITY IfcSectionedSolid\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcSectionedSolidHorizontal))\n SUBTYPE OF (IfcSolidModel);\n\tDirectrix : IfcCurve;\n\tCrossSections : LIST [2:?] OF IfcProfileDef;\n WHERE\n\tConsistentProfileTypes : SIZEOF(QUERY(temp <* CrossSections | CrossSections[1].ProfileType <> temp.ProfileType)) = 0;\n\tDirectrixIs3D : Directrix.Dim = 3;\n\tSectionsSameType : SIZEOF(QUERY(temp <* CrossSections | TYPEOF(CrossSections[1]) :<>: TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcSectionedSolidHorizontal\n SUBTYPE OF (IfcSectionedSolid);\n\tCrossSectionPositions : LIST [2:?] OF IfcAxis2PlacementLinear;\n WHERE\n\tCorrespondingSectionPositions : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions);\n\tNoLongitudinalOffsets : SIZEOF(QUERY(temp <* CrossSectionPositions | EXISTS(temp.Location.OffsetLongitudinal))) = 0;\nEND_ENTITY;\n\nENTITY IfcSectionedSpine\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSpineCurve : IfcCompositeCurve;\n\tCrossSections : LIST [2:?] OF IfcProfileDef;\n\tCrossSectionPositions : LIST [2:?] OF IfcAxis2Placement3D;\n DERIVE\n\t Dim : IfcDimensionCount := 3;\n WHERE\n\tConsistentProfileTypes : SIZEOF(QUERY(temp <* CrossSections | CrossSections[1].ProfileType <> temp.ProfileType)) = 0;\n\tCorrespondingSectionPositions : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions);\n\tSpineCurveDim : SpineCurve.Dim = 3;\nEND_ENTITY;\n\nENTITY IfcSectionedSurface\n SUBTYPE OF (IfcSurface);\n\tDirectrix : IfcCurve;\n\tCrossSectionPositions : LIST [2:?] OF IfcAxis2PlacementLinear;\n\tCrossSections : LIST [2:?] OF IfcProfileDef;\n WHERE\n\tAreaProfileTypes : SIZEOF(QUERY(temp <* CrossSections | temp.ProfileType = IfcProfileTypeEnum.CURVE)) <> 0;\n\tCorrespondingSectionPositions : SIZEOF(CrossSections) = SIZEOF(CrossSectionPositions);\n\tDirectrixIs3D : Directrix.Dim = 3;\n\tNoOffsets : SIZEOF(QUERY(temp <* CrossSectionPositions | EXISTS(temp.Location.OffsetLateral) OR EXISTS(temp.Location.OffsetVertical) OR EXISTS(temp.Location.OffsetLongitudinal))) = 0;\n\tSectionsSameType : SIZEOF(QUERY(temp <* CrossSections | TYPEOF(CrossSections[1]) :<>: TYPEOF(temp))) = 0;\nEND_ENTITY;\n\nENTITY IfcSegment\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCompositeCurveSegment\n\t,IfcCurveSegment))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tTransition : IfcTransitionCode;\n DERIVE\n\tDim : IfcDimensionCount := IfcSegmentDim(SELF);\n INVERSE\n\tUsingCurves : SET [1:?] OF IfcCompositeCurve FOR Segments;\nEND_ENTITY;\n\nENTITY IfcSegmentedReferenceCurve\n SUBTYPE OF (IfcCompositeCurve);\n\tBaseCurve : IfcBoundedCurve;\n\tEndPoint : OPTIONAL IfcPlacement;\nEND_ENTITY;\n\nENTITY IfcSensor\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcSensorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSensorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSensorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCSENSORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSensorType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcSensorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSensorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSensorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSeventhOrderPolynomialSpiral\n SUBTYPE OF (IfcSpiral);\n\tSepticTerm : IfcLengthMeasure;\n\tSexticTerm : OPTIONAL IfcLengthMeasure;\n\tQuinticTerm : OPTIONAL IfcLengthMeasure;\n\tQuarticTerm : OPTIONAL IfcLengthMeasure;\n\tCubicTerm : OPTIONAL IfcLengthMeasure;\n\tQuadraticTerm : OPTIONAL IfcLengthMeasure;\n\tLinearTerm : OPTIONAL IfcLengthMeasure;\n\tConstantTerm : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcShadingDevice\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcShadingDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcShadingDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcShadingDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCSHADINGDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcShadingDeviceType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcShadingDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcShadingDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcShadingDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcShapeAspect;\n\tShapeRepresentations : LIST [1:?] OF IfcShapeModel;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tProductDefinitional : IfcLogical;\n\tPartOfProductDefinitionShape : OPTIONAL IfcProductRepresentationSelect;\n INVERSE\n\tHasExternalReferences : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcShapeModel\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcShapeRepresentation\n\t,IfcTopologyRepresentation))\n SUBTYPE OF (IfcRepresentation);\n INVERSE\n\tOfShapeAspect : SET [0:1] OF IfcShapeAspect FOR ShapeRepresentations;\n WHERE\n\tWR11 : (SIZEOF(SELF\\IfcRepresentation.OfProductRepresentation) = 1) XOR \n(SIZEOF(SELF\\IfcRepresentation.RepresentationMap) = 1) XOR\n(SIZEOF(OfShapeAspect) = 1);\nEND_ENTITY;\n\nENTITY IfcShapeRepresentation\n SUBTYPE OF (IfcShapeModel);\n WHERE\n\tCorrectContext : 'IFC4X3_ADD2.IFCGEOMETRICREPRESENTATIONCONTEXT' \nIN TYPEOF(SELF\\IfcRepresentation.ContextOfItems);\n\tCorrectItemsForType : IfcShapeRepresentationTypes(SELF\\IfcRepresentation.RepresentationType, SELF\\IfcRepresentation.Items);\n\tHasRepresentationIdentifier : EXISTS(SELF\\IfcRepresentation.RepresentationIdentifier);\n\tHasRepresentationType : EXISTS(SELF\\IfcRepresentation.RepresentationType);\n\tNoTopologicalItem : SIZEOF(QUERY(temp <* Items | \n  ('IFC4X3_ADD2.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))\n    AND (NOT(SIZEOF(\n      ['IFC4X3_ADD2.IFCVERTEXPOINT',\n       'IFC4X3_ADD2.IFCEDGECURVE',\n       'IFC4X3_ADD2.IFCFACESURFACE'] * TYPEOF(temp)) = 1))\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcShellBasedSurfaceModel\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tSbsmBoundary : SET [1:?] OF IfcShell;\n DERIVE\n\t Dim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcSign\n SUBTYPE OF (IfcElementComponent);\n\tPredefinedType : OPTIONAL IfcSignTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSignTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSignTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCSIGNTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSignType\n SUBTYPE OF (IfcElementComponentType);\n\tPredefinedType : IfcSignTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSignTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSignTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSignal\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcSignalTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSignalTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSignalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCSIGNALTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSignalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcSignalTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSignalTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSignalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSimpleProperty\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPropertyBoundedValue\n\t,IfcPropertyEnumeratedValue\n\t,IfcPropertyListValue\n\t,IfcPropertyReferenceValue\n\t,IfcPropertySingleValue\n\t,IfcPropertyTableValue))\n SUBTYPE OF (IfcProperty);\nEND_ENTITY;\n\nENTITY IfcSimplePropertyTemplate\n SUBTYPE OF (IfcPropertyTemplate);\n\tTemplateType : OPTIONAL IfcSimplePropertyTemplateTypeEnum;\n\tPrimaryMeasureType : OPTIONAL IfcLabel;\n\tSecondaryMeasureType : OPTIONAL IfcLabel;\n\tEnumerators : OPTIONAL IfcPropertyEnumeration;\n\tPrimaryUnit : OPTIONAL IfcUnit;\n\tSecondaryUnit : OPTIONAL IfcUnit;\n\tExpression : OPTIONAL IfcLabel;\n\tAccessState : OPTIONAL IfcStateEnum;\nEND_ENTITY;\n\nENTITY IfcSineSpiral\n SUBTYPE OF (IfcSpiral);\n\tSineTerm : IfcLengthMeasure;\n\tLinearTerm : OPTIONAL IfcLengthMeasure;\n\tConstantTerm : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcSite\n SUBTYPE OF (IfcSpatialStructureElement);\n\tRefLatitude : OPTIONAL IfcCompoundPlaneAngleMeasure;\n\tRefLongitude : OPTIONAL IfcCompoundPlaneAngleMeasure;\n\tRefElevation : OPTIONAL IfcLengthMeasure;\n\tLandTitleNumber : OPTIONAL IfcLabel;\n\tSiteAddress : OPTIONAL IfcPostalAddress;\nEND_ENTITY;\n\nENTITY IfcSlab\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcSlabTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSlabTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSlabTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCSLABTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSlabType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcSlabTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSlabTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSlabTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSlippageConnectionCondition\n SUBTYPE OF (IfcStructuralConnectionCondition);\n\tSlippageX : OPTIONAL IfcLengthMeasure;\n\tSlippageY : OPTIONAL IfcLengthMeasure;\n\tSlippageZ : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcSolarDevice\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcSolarDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSolarDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSolarDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCSOLARDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSolarDeviceType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcSolarDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSolarDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSolarDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSolidModel\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcCsgSolid\n\t,IfcManifoldSolidBrep\n\t,IfcSectionedSolid\n\t,IfcSweptAreaSolid\n\t,IfcSweptDiskSolid))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\t Dim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcSpace\n SUBTYPE OF (IfcSpatialStructureElement);\n\tPredefinedType : OPTIONAL IfcSpaceTypeEnum;\n\tElevationWithFlooring : OPTIONAL IfcLengthMeasure;\n INVERSE\n\tHasCoverings : SET [0:?] OF IfcRelCoversSpaces FOR RelatingSpace;\n\tBoundedBy : SET [0:?] OF IfcRelSpaceBoundary FOR RelatingSpace;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSpaceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSpaceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCSPACETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSpaceHeater\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcSpaceHeaterTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSpaceHeaterTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSpaceHeaterTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCSPACEHEATERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSpaceHeaterType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcSpaceHeaterTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSpaceHeaterTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSpaceHeaterTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSpaceType\n SUBTYPE OF (IfcSpatialStructureElementType);\n\tPredefinedType : IfcSpaceTypeEnum;\n\tLongName : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSpaceTypeEnum.USERDEFINED) OR \n((PredefinedType = IfcSpaceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcSpatialElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSpatialElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcExternalSpatialStructureElement\n\t,IfcSpatialStructureElement\n\t,IfcSpatialZone))\n SUBTYPE OF (IfcProduct);\n\tLongName : OPTIONAL IfcLabel;\n INVERSE\n\tContainsElements : SET [0:?] OF IfcRelContainedInSpatialStructure FOR RelatingStructure;\n\tServicedBySystems : SET [0:?] OF IfcRelServicesBuildings FOR RelatedBuildings;\n\tReferencesElements : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatingStructure;\n\tIsInterferedByElements : SET [0:?] OF IfcRelInterferesElements FOR RelatedElement;\n\tInterferesElements : SET [0:?] OF IfcRelInterferesElements FOR RelatingElement;\nEND_ENTITY;\n\nENTITY IfcSpatialElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcSpatialStructureElementType\n\t,IfcSpatialZoneType))\n SUBTYPE OF (IfcTypeProduct);\n\tElementType : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcSpatialStructureElement\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBuildingStorey\n\t,IfcFacility\n\t,IfcFacilityPart\n\t,IfcSite\n\t,IfcSpace))\n SUBTYPE OF (IfcSpatialElement);\n\tCompositionType : OPTIONAL IfcElementCompositionEnum;\n WHERE\n\tWR41 : (HIINDEX(SELF\\IfcObjectDefinition.Decomposes) = 1) \nAND\n('IFC4X3_ADD2.IFCRELAGGREGATES' IN TYPEOF(SELF\\IfcObjectDefinition.Decomposes[1])) \nAND\n(('IFC4X3_ADD2.IFCPROJECT' IN TYPEOF (SELF\\IfcObjectDefinition.Decomposes[1].RelatingObject)) OR\n ('IFC4X3_ADD2.IFCSPATIALSTRUCTUREELEMENT' IN TYPEOF (SELF\\IfcObjectDefinition.Decomposes[1].RelatingObject))\n);\nEND_ENTITY;\n\nENTITY IfcSpatialStructureElementType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcSpaceType))\n SUBTYPE OF (IfcSpatialElementType);\nEND_ENTITY;\n\nENTITY IfcSpatialZone\n SUBTYPE OF (IfcSpatialElement);\n\tPredefinedType : OPTIONAL IfcSpatialZoneTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSpatialZoneTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSpatialZoneTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCSPATIALZONETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSpatialZoneType\n SUBTYPE OF (IfcSpatialElementType);\n\tPredefinedType : IfcSpatialZoneTypeEnum;\n\tLongName : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSpatialZoneTypeEnum.USERDEFINED) OR \n((PredefinedType = IfcSpatialZoneTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcSpatialElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSphere\n SUBTYPE OF (IfcCsgPrimitive3D);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcSphericalSurface\n SUBTYPE OF (IfcElementarySurface);\n\tRadius : IfcPositiveLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcSpiral\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcClothoid\n\t,IfcCosineSpiral\n\t,IfcSecondOrderPolynomialSpiral\n\t,IfcSeventhOrderPolynomialSpiral\n\t,IfcSineSpiral\n\t,IfcThirdOrderPolynomialSpiral))\n SUBTYPE OF (IfcCurve);\n\tPosition : IfcAxis2Placement;\nEND_ENTITY;\n\nENTITY IfcStackTerminal\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcStackTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcStackTerminalTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcStackTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCSTACKTERMINALTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcStackTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcStackTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcStackTerminalTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcStackTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcStair\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcStairTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcStairTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcStairTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCSTAIRTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcStairFlight\n SUBTYPE OF (IfcBuiltElement);\n\tNumberOfRisers : OPTIONAL IfcInteger;\n\tNumberOfTreads : OPTIONAL IfcInteger;\n\tRiserHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tTreadLength : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : OPTIONAL IfcStairFlightTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcStairFlightTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcStairFlightTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCSTAIRFLIGHTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcStairFlightType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcStairFlightTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcStairFlightTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcStairFlightTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcStairType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcStairTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcStairTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcStairTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcStructuralAction\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralCurveAction\n\t,IfcStructuralPointAction\n\t,IfcStructuralSurfaceAction))\n SUBTYPE OF (IfcStructuralActivity);\n\tDestabilizingLoad : OPTIONAL IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcStructuralActivity\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralAction\n\t,IfcStructuralReaction))\n SUBTYPE OF (IfcProduct);\n\tAppliedLoad : IfcStructuralLoad;\n\tGlobalOrLocal : IfcGlobalOrLocalEnum;\n INVERSE\n\tAssignedToStructuralItem : SET [0:1] OF IfcRelConnectsStructuralActivity FOR RelatedStructuralActivity;\nEND_ENTITY;\n\nENTITY IfcStructuralAnalysisModel\n SUBTYPE OF (IfcSystem);\n\tPredefinedType : IfcAnalysisModelTypeEnum;\n\tOrientationOf2DPlane : OPTIONAL IfcAxis2Placement3D;\n\tLoadedBy : OPTIONAL SET [1:?] OF IfcStructuralLoadGroup;\n\tHasResults : OPTIONAL SET [1:?] OF IfcStructuralResultGroup;\n\tSharedPlacement : OPTIONAL IfcObjectPlacement;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcAnalysisModelTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcAnalysisModelTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcStructuralConnection\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralCurveConnection\n\t,IfcStructuralPointConnection\n\t,IfcStructuralSurfaceConnection))\n SUBTYPE OF (IfcStructuralItem);\n\tAppliedCondition : OPTIONAL IfcBoundaryCondition;\n INVERSE\n\tConnectsStructuralMembers : SET [1:?] OF IfcRelConnectsStructuralMember FOR RelatedStructuralConnection;\nEND_ENTITY;\n\nENTITY IfcStructuralConnectionCondition\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcFailureConnectionCondition\n\t,IfcSlippageConnectionCondition));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcStructuralCurveAction\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralLinearAction))\n SUBTYPE OF (IfcStructuralAction);\n\tProjectedOrTrue : OPTIONAL IfcProjectedOrTrueLengthEnum;\n\tPredefinedType : IfcStructuralCurveActivityTypeEnum;\n WHERE\n\tHasObjectType : (PredefinedType <> IfcStructuralCurveActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\n\tProjectedIsGlobal : (NOT EXISTS(ProjectedOrTrue)) OR\n((ProjectedOrTrue <> PROJECTED_LENGTH) OR\n (SELF\\IfcStructuralActivity.GlobalOrLocal = GLOBAL_COORDS));\n\tSuitablePredefinedType : PredefinedType <> IfcStructuralCurveActivityTypeEnum.EQUIDISTANT;\nEND_ENTITY;\n\nENTITY IfcStructuralCurveConnection\n SUBTYPE OF (IfcStructuralConnection);\n\tAxisDirection : IfcDirection;\nEND_ENTITY;\n\nENTITY IfcStructuralCurveMember\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralCurveMemberVarying))\n SUBTYPE OF (IfcStructuralMember);\n\tPredefinedType : IfcStructuralCurveMemberTypeEnum;\n\tAxis : IfcDirection;\n WHERE\n\tHasObjectType : (PredefinedType <> IfcStructuralCurveMemberTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStructuralCurveMemberVarying\n SUBTYPE OF (IfcStructuralCurveMember);\nEND_ENTITY;\n\nENTITY IfcStructuralCurveReaction\n SUBTYPE OF (IfcStructuralReaction);\n\tPredefinedType : IfcStructuralCurveActivityTypeEnum;\n WHERE\n\tHasObjectType : (PredefinedType <> IfcStructuralCurveActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\n\tSuitablePredefinedType : (PredefinedType <> IfcStructuralCurveActivityTypeEnum.SINUS) AND (PredefinedType <> IfcStructuralCurveActivityTypeEnum.PARABOLA);\nEND_ENTITY;\n\nENTITY IfcStructuralItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralConnection\n\t,IfcStructuralMember))\n SUBTYPE OF (IfcProduct);\n INVERSE\n\tAssignedStructuralActivity : SET [0:?] OF IfcRelConnectsStructuralActivity FOR RelatingElement;\nEND_ENTITY;\n\nENTITY IfcStructuralLinearAction\n SUBTYPE OF (IfcStructuralCurveAction);\n WHERE\n\tConstPredefinedType : SELF\\IfcStructuralCurveAction.PredefinedType = IfcStructuralCurveActivityTypeEnum.CONST;\n\tSuitableLoadType : SIZEOF(['IFC4X3_ADD2.IFCSTRUCTURALLOADLINEARFORCE', 'IFC4X3_ADD2.IFCSTRUCTURALLOADTEMPERATURE'] * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralLoad\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadConfiguration\n\t,IfcStructuralLoadOrResult));\n\tName : OPTIONAL IfcLabel;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadCase\n SUBTYPE OF (IfcStructuralLoadGroup);\n\tSelfWeightCoefficients : OPTIONAL LIST [3:3] OF IfcRatioMeasure;\n WHERE\n\tIsLoadCasePredefinedType : SELF\\IfcStructuralLoadGroup.PredefinedType = IfcLoadGroupTypeEnum.LOAD_CASE;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadConfiguration\n SUBTYPE OF (IfcStructuralLoad);\n\tValues : LIST [1:?] OF IfcStructuralLoadOrResult;\n\tLocations : OPTIONAL LIST [1:?] OF UNIQUE LIST [1:2] OF IfcLengthMeasure;\n WHERE\n\tValidListSize : NOT EXISTS(Locations) OR (SIZEOF(Locations) = SIZEOF(Values));\nEND_ENTITY;\n\nENTITY IfcStructuralLoadGroup\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadCase))\n SUBTYPE OF (IfcGroup);\n\tPredefinedType : IfcLoadGroupTypeEnum;\n\tActionType : IfcActionTypeEnum;\n\tActionSource : IfcActionSourceTypeEnum;\n\tCoefficient : OPTIONAL IfcRatioMeasure;\n\tPurpose : OPTIONAL IfcLabel;\n INVERSE\n\tSourceOfResultGroup : SET [0:1] OF IfcStructuralResultGroup FOR ResultForLoadGroup;\n\tLoadGroupFor : SET [0:?] OF IfcStructuralAnalysisModel FOR LoadedBy;\n WHERE\n\tHasObjectType : (\n  (PredefinedType <> IfcLoadGroupTypeEnum.USERDEFINED) AND\n  (ActionType <> IfcActionTypeEnum.USERDEFINED) AND\n  (ActionSource <> IfcActionSourceTypeEnum.USERDEFINED)\n) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStructuralLoadLinearForce\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tLinearForceX : OPTIONAL IfcLinearForceMeasure;\n\tLinearForceY : OPTIONAL IfcLinearForceMeasure;\n\tLinearForceZ : OPTIONAL IfcLinearForceMeasure;\n\tLinearMomentX : OPTIONAL IfcLinearMomentMeasure;\n\tLinearMomentY : OPTIONAL IfcLinearMomentMeasure;\n\tLinearMomentZ : OPTIONAL IfcLinearMomentMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadOrResult\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadStatic\n\t,IfcSurfaceReinforcementArea))\n SUBTYPE OF (IfcStructuralLoad);\nEND_ENTITY;\n\nENTITY IfcStructuralLoadPlanarForce\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tPlanarForceX : OPTIONAL IfcPlanarForceMeasure;\n\tPlanarForceY : OPTIONAL IfcPlanarForceMeasure;\n\tPlanarForceZ : OPTIONAL IfcPlanarForceMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleDisplacement\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadSingleDisplacementDistortion))\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tDisplacementX : OPTIONAL IfcLengthMeasure;\n\tDisplacementY : OPTIONAL IfcLengthMeasure;\n\tDisplacementZ : OPTIONAL IfcLengthMeasure;\n\tRotationalDisplacementRX : OPTIONAL IfcPlaneAngleMeasure;\n\tRotationalDisplacementRY : OPTIONAL IfcPlaneAngleMeasure;\n\tRotationalDisplacementRZ : OPTIONAL IfcPlaneAngleMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleDisplacementDistortion\n SUBTYPE OF (IfcStructuralLoadSingleDisplacement);\n\tDistortion : OPTIONAL IfcCurvatureMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleForce\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadSingleForceWarping))\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tForceX : OPTIONAL IfcForceMeasure;\n\tForceY : OPTIONAL IfcForceMeasure;\n\tForceZ : OPTIONAL IfcForceMeasure;\n\tMomentX : OPTIONAL IfcTorqueMeasure;\n\tMomentY : OPTIONAL IfcTorqueMeasure;\n\tMomentZ : OPTIONAL IfcTorqueMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadSingleForceWarping\n SUBTYPE OF (IfcStructuralLoadSingleForce);\n\tWarpingMoment : OPTIONAL IfcWarpingMomentMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralLoadStatic\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralLoadLinearForce\n\t,IfcStructuralLoadPlanarForce\n\t,IfcStructuralLoadSingleDisplacement\n\t,IfcStructuralLoadSingleForce\n\t,IfcStructuralLoadTemperature))\n SUBTYPE OF (IfcStructuralLoadOrResult);\nEND_ENTITY;\n\nENTITY IfcStructuralLoadTemperature\n SUBTYPE OF (IfcStructuralLoadStatic);\n\tDeltaTConstant : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tDeltaTY : OPTIONAL IfcThermodynamicTemperatureMeasure;\n\tDeltaTZ : OPTIONAL IfcThermodynamicTemperatureMeasure;\nEND_ENTITY;\n\nENTITY IfcStructuralMember\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralCurveMember\n\t,IfcStructuralSurfaceMember))\n SUBTYPE OF (IfcStructuralItem);\n INVERSE\n\tConnectedBy : SET [0:?] OF IfcRelConnectsStructuralMember FOR RelatingStructuralMember;\nEND_ENTITY;\n\nENTITY IfcStructuralPlanarAction\n SUBTYPE OF (IfcStructuralSurfaceAction);\n WHERE\n\tConstPredefinedType : SELF\\IfcStructuralSurfaceAction.PredefinedType = IfcStructuralSurfaceActivityTypeEnum.CONST;\n\tSuitableLoadType : SIZEOF(['IFC4X3_ADD2.IFCSTRUCTURALLOADPLANARFORCE', 'IFC4X3_ADD2.IFCSTRUCTURALLOADTEMPERATURE'] * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralPointAction\n SUBTYPE OF (IfcStructuralAction);\n WHERE\n\tSuitableLoadType : SIZEOF(['IFC4X3_ADD2.IFCSTRUCTURALLOADSINGLEFORCE', 'IFC4X3_ADD2.IFCSTRUCTURALLOADSINGLEDISPLACEMENT'] * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralPointConnection\n SUBTYPE OF (IfcStructuralConnection);\n\tConditionCoordinateSystem : OPTIONAL IfcAxis2Placement3D;\nEND_ENTITY;\n\nENTITY IfcStructuralPointReaction\n SUBTYPE OF (IfcStructuralReaction);\n WHERE\n\tSuitableLoadType : SIZEOF(['IFC4X3_ADD2.IFCSTRUCTURALLOADSINGLEFORCE', 'IFC4X3_ADD2.IFCSTRUCTURALLOADSINGLEDISPLACEMENT'] * TYPEOF(SELF\\IfcStructuralActivity.AppliedLoad)) = 1;\nEND_ENTITY;\n\nENTITY IfcStructuralReaction\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStructuralCurveReaction\n\t,IfcStructuralPointReaction\n\t,IfcStructuralSurfaceReaction))\n SUBTYPE OF (IfcStructuralActivity);\nEND_ENTITY;\n\nENTITY IfcStructuralResultGroup\n SUBTYPE OF (IfcGroup);\n\tTheoryType : IfcAnalysisTheoryTypeEnum;\n\tResultForLoadGroup : OPTIONAL IfcStructuralLoadGroup;\n\tIsLinear : IfcBoolean;\n INVERSE\n\tResultGroupFor : SET [0:1] OF IfcStructuralAnalysisModel FOR HasResults;\n WHERE\n\tHasObjectType : (TheoryType <> IfcAnalysisTheoryTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceAction\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralPlanarAction))\n SUBTYPE OF (IfcStructuralAction);\n\tProjectedOrTrue : OPTIONAL IfcProjectedOrTrueLengthEnum;\n\tPredefinedType : IfcStructuralSurfaceActivityTypeEnum;\n WHERE\n\tHasObjectType : (PredefinedType <> IfcStructuralSurfaceActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\n\tProjectedIsGlobal : (NOT EXISTS(ProjectedOrTrue)) OR\n((ProjectedOrTrue <> PROJECTED_LENGTH) OR\n (SELF\\IfcStructuralActivity.GlobalOrLocal = GLOBAL_COORDS));\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceConnection\n SUBTYPE OF (IfcStructuralConnection);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceMember\n SUPERTYPE OF (ONEOF\n\t(IfcStructuralSurfaceMemberVarying))\n SUBTYPE OF (IfcStructuralMember);\n\tPredefinedType : IfcStructuralSurfaceMemberTypeEnum;\n\tThickness : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tHasObjectType : (PredefinedType <> IfcStructuralSurfaceMemberTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceMemberVarying\n SUBTYPE OF (IfcStructuralSurfaceMember);\nEND_ENTITY;\n\nENTITY IfcStructuralSurfaceReaction\n SUBTYPE OF (IfcStructuralReaction);\n\tPredefinedType : IfcStructuralSurfaceActivityTypeEnum;\n WHERE\n\tHasPredefinedType : (PredefinedType <> IfcStructuralSurfaceActivityTypeEnum.USERDEFINED) OR EXISTS(SELF\\IfcObject.ObjectType);\nEND_ENTITY;\n\nENTITY IfcStyleModel\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcStyledRepresentation))\n SUBTYPE OF (IfcRepresentation);\nEND_ENTITY;\n\nENTITY IfcStyledItem\n SUBTYPE OF (IfcRepresentationItem);\n\tItem : OPTIONAL IfcRepresentationItem;\n\tStyles : SET [1:?] OF IfcPresentationStyle;\n\tName : OPTIONAL IfcLabel;\n WHERE\n\tApplicableItem : NOT('IFC4X3_ADD2.IFCSTYLEDITEM' IN TYPEOF(Item));\nEND_ENTITY;\n\nENTITY IfcStyledRepresentation\n SUBTYPE OF (IfcStyleModel);\n WHERE\n\tOnlyStyledItems : SIZEOF(QUERY(temp <* SELF\\IfcRepresentation.Items | \n  (NOT('IFC4X3_ADD2.IFCSTYLEDITEM' IN TYPEOF(temp)))\n)) = 0;\nEND_ENTITY;\n\nENTITY IfcSubContractResource\n SUBTYPE OF (IfcConstructionResource);\n\tPredefinedType : OPTIONAL IfcSubContractResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR \n (PredefinedType <> IfcSubContractResourceTypeEnum.USERDEFINED) OR \n ((PredefinedType = IfcSubContractResourceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcSubContractResourceType\n SUBTYPE OF (IfcConstructionResourceType);\n\tPredefinedType : IfcSubContractResourceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSubContractResourceTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcSubContractResourceTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeResource.ResourceType));\nEND_ENTITY;\n\nENTITY IfcSubedge\n SUBTYPE OF (IfcEdge);\n\tParentEdge : IfcEdge;\nEND_ENTITY;\n\nENTITY IfcSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBoundedSurface\n\t,IfcElementarySurface\n\t,IfcSectionedSurface\n\t,IfcSweptSurface))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n DERIVE\n\t Dim : IfcDimensionCount := 3;\nEND_ENTITY;\n\nENTITY IfcSurfaceCurve\n SUPERTYPE OF (ONEOF\n\t(IfcIntersectionCurve\n\t,IfcSeamCurve))\n SUBTYPE OF (IfcCurve);\n\tCurve3D : IfcCurve;\n\tAssociatedGeometry : LIST [1:2] OF IfcPcurve;\n\tMasterRepresentation : IfcPreferredSurfaceCurveRepresentation;\n DERIVE\n\t BasisSurface : SET [1:2] OF IfcSurface := IfcGetBasisSurface(SELF);\n WHERE\n\tCurveIs3D : Curve3D.Dim = 3;\n\tCurveIsNotPcurve : NOT ('IFC4X3_ADD2.IFCPCURVE' IN TYPEOF(Curve3D));\nEND_ENTITY;\n\nENTITY IfcSurfaceCurveSweptAreaSolid\n SUBTYPE OF (IfcDirectrixCurveSweptAreaSolid);\n\tReferenceSurface : IfcSurface;\nEND_ENTITY;\n\nENTITY IfcSurfaceFeature\n SUBTYPE OF (IfcFeatureElement);\n\tPredefinedType : OPTIONAL IfcSurfaceFeatureTypeEnum;\n INVERSE\n\tAdheresToElement : IfcRelAdheresToElement FOR RelatedSurfaceFeatures;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSurfaceFeatureTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSurfaceFeatureTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcSurfaceOfLinearExtrusion\n SUBTYPE OF (IfcSweptSurface);\n\tExtrudedDirection : IfcDirection;\n\tDepth : IfcLengthMeasure;\n DERIVE\n\t ExtrusionAxis : IfcVector := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (ExtrudedDirection, Depth);\n WHERE\n\tDepthGreaterZero : Depth > 0.;\nEND_ENTITY;\n\nENTITY IfcSurfaceOfRevolution\n SUBTYPE OF (IfcSweptSurface);\n\tAxisPosition : IfcAxis1Placement;\n DERIVE\n\t AxisLine : IfcLine := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcCurve() || IfcLine(AxisPosition.Location, \n  IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(AxisPosition.Z,1.0));\nEND_ENTITY;\n\nENTITY IfcSurfaceReinforcementArea\n SUBTYPE OF (IfcStructuralLoadOrResult);\n\tSurfaceReinforcement1 : OPTIONAL LIST [2:3] OF IfcLengthMeasure;\n\tSurfaceReinforcement2 : OPTIONAL LIST [2:3] OF IfcLengthMeasure;\n\tShearReinforcement : OPTIONAL IfcRatioMeasure;\n WHERE\n\tNonnegativeArea1 : (NOT EXISTS(SurfaceReinforcement1)) OR (\n    (SurfaceReinforcement1[1] >= 0.) AND\n    (SurfaceReinforcement1[2] >= 0.) AND\n    ((SIZEOF(SurfaceReinforcement1) = 1) OR (SurfaceReinforcement1[1] >= 0.))\n);\n\tNonnegativeArea2 : (NOT EXISTS(SurfaceReinforcement2)) OR (\n    (SurfaceReinforcement2[1] >= 0.) AND\n    (SurfaceReinforcement2[2] >= 0.) AND\n    ((SIZEOF(SurfaceReinforcement2) = 1) OR (SurfaceReinforcement2[1] >= 0.))\n);\n\tNonnegativeArea3 : (NOT EXISTS(ShearReinforcement)) OR (ShearReinforcement >= 0.);\n\tSurfaceAndOrShearAreaSpecified : EXISTS(SurfaceReinforcement1) OR EXISTS(SurfaceReinforcement2) OR EXISTS(ShearReinforcement);\nEND_ENTITY;\n\nENTITY IfcSurfaceStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tSide : IfcSurfaceSide;\n\tStyles : SET [1:5] OF IfcSurfaceStyleElementSelect;\n WHERE\n\tMaxOneExtDefined : SIZEOF(QUERY(Style <* SELF.Styles |\n  'IFC4X3_ADD2.IFCEXTERNALLYDEFINEDSURFACESTYLE' IN\n   TYPEOF(Style)\n  )) <= 1;\n\tMaxOneLighting : SIZEOF(QUERY(Style <* SELF.Styles |\n  'IFC4X3_ADD2.IFCSURFACESTYLELIGHTING' IN\n   TYPEOF(Style)\n  )) <= 1;\n\tMaxOneRefraction : SIZEOF(QUERY(Style <* SELF.Styles |\n  'IFC4X3_ADD2.IFCSURFACESTYLEREFRACTION' IN\n   TYPEOF(Style)\n  )) <= 1;\n\tMaxOneShading : SIZEOF(QUERY(Style <* SELF.Styles |\n  'IFC4X3_ADD2.IFCSURFACESTYLESHADING' IN\n   TYPEOF(Style)\n  )) <= 1;\n\tMaxOneTextures : SIZEOF(QUERY(Style <* SELF.Styles |\n  'IFC4X3_ADD2.IFCSURFACESTYLEWITHTEXTURES' IN\n   TYPEOF(Style)\n  )) <= 1;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleLighting\n SUBTYPE OF (IfcPresentationItem);\n\tDiffuseTransmissionColour : IfcColourRgb;\n\tDiffuseReflectionColour : IfcColourRgb;\n\tTransmissionColour : IfcColourRgb;\n\tReflectanceColour : IfcColourRgb;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleRefraction\n SUBTYPE OF (IfcPresentationItem);\n\tRefractionIndex : OPTIONAL IfcReal;\n\tDispersionFactor : OPTIONAL IfcReal;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleRendering\n SUBTYPE OF (IfcSurfaceStyleShading);\n\tDiffuseColour : OPTIONAL IfcColourOrFactor;\n\tTransmissionColour : OPTIONAL IfcColourOrFactor;\n\tDiffuseTransmissionColour : OPTIONAL IfcColourOrFactor;\n\tReflectionColour : OPTIONAL IfcColourOrFactor;\n\tSpecularColour : OPTIONAL IfcColourOrFactor;\n\tSpecularHighlight : OPTIONAL IfcSpecularHighlightSelect;\n\tReflectanceMethod : IfcReflectanceMethodEnum;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleShading\n SUPERTYPE OF (ONEOF\n\t(IfcSurfaceStyleRendering))\n SUBTYPE OF (IfcPresentationItem);\n\tSurfaceColour : IfcColourRgb;\n\tTransparency : OPTIONAL IfcNormalisedRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcSurfaceStyleWithTextures\n SUBTYPE OF (IfcPresentationItem);\n\tTextures : LIST [1:?] OF IfcSurfaceTexture;\nEND_ENTITY;\n\nENTITY IfcSurfaceTexture\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcBlobTexture\n\t,IfcImageTexture\n\t,IfcPixelTexture))\n SUBTYPE OF (IfcPresentationItem);\n\tRepeatS : IfcBoolean;\n\tRepeatT : IfcBoolean;\n\tMode : OPTIONAL IfcIdentifier;\n\tTextureTransform : OPTIONAL IfcCartesianTransformationOperator2D;\n\tParameter : OPTIONAL LIST [1:?] OF IfcIdentifier;\n INVERSE\n\tIsMappedBy : SET [0:?] OF IfcTextureCoordinate FOR Maps;\n\tUsedInStyles : SET [0:?] OF IfcSurfaceStyleWithTextures FOR Textures;\nEND_ENTITY;\n\nENTITY IfcSweptAreaSolid\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcDirectrixCurveSweptAreaSolid\n\t,IfcExtrudedAreaSolid\n\t,IfcRevolvedAreaSolid))\n SUBTYPE OF (IfcSolidModel);\n\tSweptArea : IfcProfileDef;\n\tPosition : OPTIONAL IfcAxis2Placement3D;\n WHERE\n\tSweptAreaType : SweptArea.ProfileType = IfcProfileTypeEnum.Area;\nEND_ENTITY;\n\nENTITY IfcSweptDiskSolid\n SUPERTYPE OF (ONEOF\n\t(IfcSweptDiskSolidPolygonal))\n SUBTYPE OF (IfcSolidModel);\n\tDirectrix : IfcCurve;\n\tRadius : IfcPositiveLengthMeasure;\n\tInnerRadius : OPTIONAL IfcPositiveLengthMeasure;\n\tStartParam : OPTIONAL IfcParameterValue;\n\tEndParam : OPTIONAL IfcParameterValue;\n WHERE\n\tDirectrixBounded : (EXISTS(StartParam) AND EXISTS(EndParam)) OR \n(SIZEOF(['IFC4X3_ADD2.IFCCONIC', 'IFC4X3_ADD2.IFCBOUNDEDCURVE'] * TYPEOF(Directrix)) = 1);\n\tDirectrixDim : Directrix.Dim = 3;\n\tInnerRadiusSize : (NOT EXISTS(InnerRadius)) OR (Radius > InnerRadius);\nEND_ENTITY;\n\nENTITY IfcSweptDiskSolidPolygonal\n SUBTYPE OF (IfcSweptDiskSolid);\n\tFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n WHERE\n\tCorrectRadii : NOT(EXISTS(FilletRadius)) OR (FilletRadius >= SELF\\IfcSweptDiskSolid.Radius);\n\tDirectrixIsPolyline : ('IFC4X3_ADD2.IFCPOLYLINE' IN TYPEOF(SELF\\IfcSweptDiskSolid.Directrix)) OR\n(('IFC4X3_ADD2.IFCINDEXEDPOLYCURVE' IN TYPEOF(SELF\\IfcSweptDiskSolid.Directrix)) AND NOT(EXISTS(SELF\\IfcSweptDiskSolid.Directrix\\IfcIndexedPolyCurve.Segments)));\nEND_ENTITY;\n\nENTITY IfcSweptSurface\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcSurfaceOfLinearExtrusion\n\t,IfcSurfaceOfRevolution))\n SUBTYPE OF (IfcSurface);\n\tSweptCurve : IfcProfileDef;\n\tPosition : OPTIONAL IfcAxis2Placement3D;\n WHERE\n\tSweptCurveType : SweptCurve.ProfileType = IfcProfileTypeEnum.Curve;\nEND_ENTITY;\n\nENTITY IfcSwitchingDevice\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcSwitchingDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSwitchingDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSwitchingDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCSWITCHINGDEVICETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSwitchingDeviceType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcSwitchingDeviceTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcSwitchingDeviceTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSwitchingDeviceTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcSystem\n SUPERTYPE OF (ONEOF\n\t(IfcBuildingSystem\n\t,IfcBuiltSystem\n\t,IfcDistributionSystem\n\t,IfcStructuralAnalysisModel\n\t,IfcZone))\n SUBTYPE OF (IfcGroup);\n INVERSE\n\tServicesBuildings : SET [0:1] OF IfcRelServicesBuildings FOR RelatingSystem;\n\tServicesFacilities : SET [0:?] OF IfcRelReferencedInSpatialStructure FOR RelatedElements;\nEND_ENTITY;\n\nENTITY IfcSystemFurnitureElement\n SUBTYPE OF (IfcFurnishingElement);\n\tPredefinedType : OPTIONAL IfcSystemFurnitureElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSystemFurnitureElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSystemFurnitureElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCSYSTEMFURNITUREELEMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcSystemFurnitureElementType\n SUBTYPE OF (IfcFurnishingElementType);\n\tPredefinedType : OPTIONAL IfcSystemFurnitureElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcSystemFurnitureElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcSystemFurnitureElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tFlangeEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tWebEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tWebSlope : OPTIONAL IfcPlaneAngleMeasure;\n\tFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n WHERE\n\tValidFlangeThickness : FlangeThickness < Depth;\n\tValidWebThickness : WebThickness < FlangeWidth;\nEND_ENTITY;\n\nENTITY IfcTable;\n\tName : OPTIONAL IfcLabel;\n\tRows : OPTIONAL LIST [1:?] OF IfcTableRow;\n\tColumns : OPTIONAL LIST [1:?] OF IfcTableColumn;\n DERIVE\n\t NumberOfCellsInRow : IfcInteger := HIINDEX(Rows[1].RowCells);\n\t NumberOfHeadings : IfcInteger := SIZEOF(QUERY( Temp <* Rows | Temp.IsHeading));\n\t NumberOfDataRows : IfcInteger := SIZEOF(QUERY( Temp <* Rows | NOT(Temp.IsHeading)));\n WHERE\n\tWR1 : SIZEOF(QUERY( Temp <* Rows | HIINDEX(Temp.RowCells) <> HIINDEX(Rows[1].RowCells))) = 0;\n\tWR2 : { 0 <= NumberOfHeadings <= 1 };\nEND_ENTITY;\n\nENTITY IfcTableColumn;\n\tIdentifier : OPTIONAL IfcIdentifier;\n\tName : OPTIONAL IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tUnit : OPTIONAL IfcUnit;\n\tReferencePath : OPTIONAL IfcReference;\nEND_ENTITY;\n\nENTITY IfcTableRow;\n\tRowCells : OPTIONAL LIST [1:?] OF IfcValue;\n\tIsHeading : OPTIONAL IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcTank\n SUBTYPE OF (IfcFlowStorageDevice);\n\tPredefinedType : OPTIONAL IfcTankTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcTankTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcTankTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCTANKTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTankType\n SUBTYPE OF (IfcFlowStorageDeviceType);\n\tPredefinedType : IfcTankTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTankTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcTankTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTask\n SUBTYPE OF (IfcProcess);\n\tStatus : OPTIONAL IfcLabel;\n\tWorkMethod : OPTIONAL IfcLabel;\n\tIsMilestone : IfcBoolean;\n\tPriority : OPTIONAL IfcInteger;\n\tTaskTime : OPTIONAL IfcTaskTime;\n\tPredefinedType : OPTIONAL IfcTaskTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcTaskTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTaskTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\n\tHasName : EXISTS(SELF\\IfcRoot.Name);\nEND_ENTITY;\n\nENTITY IfcTaskTime\n SUPERTYPE OF (ONEOF\n\t(IfcTaskTimeRecurring))\n SUBTYPE OF (IfcSchedulingTime);\n\tDurationType : OPTIONAL IfcTaskDurationEnum;\n\tScheduleDuration : OPTIONAL IfcDuration;\n\tScheduleStart : OPTIONAL IfcDateTime;\n\tScheduleFinish : OPTIONAL IfcDateTime;\n\tEarlyStart : OPTIONAL IfcDateTime;\n\tEarlyFinish : OPTIONAL IfcDateTime;\n\tLateStart : OPTIONAL IfcDateTime;\n\tLateFinish : OPTIONAL IfcDateTime;\n\tFreeFloat : OPTIONAL IfcDuration;\n\tTotalFloat : OPTIONAL IfcDuration;\n\tIsCritical : OPTIONAL IfcBoolean;\n\tStatusTime : OPTIONAL IfcDateTime;\n\tActualDuration : OPTIONAL IfcDuration;\n\tActualStart : OPTIONAL IfcDateTime;\n\tActualFinish : OPTIONAL IfcDateTime;\n\tRemainingTime : OPTIONAL IfcDuration;\n\tCompletion : OPTIONAL IfcPositiveRatioMeasure;\nEND_ENTITY;\n\nENTITY IfcTaskTimeRecurring\n SUBTYPE OF (IfcTaskTime);\n\tRecurrence : IfcRecurrencePattern;\nEND_ENTITY;\n\nENTITY IfcTaskType\n SUBTYPE OF (IfcTypeProcess);\n\tPredefinedType : IfcTaskTypeEnum;\n\tWorkMethod : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTaskTypeEnum.USERDEFINED) OR ((PredefinedType = IfcTaskTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcTypeProcess.ProcessType));\nEND_ENTITY;\n\nENTITY IfcTelecomAddress\n SUBTYPE OF (IfcAddress);\n\tTelephoneNumbers : OPTIONAL LIST [1:?] OF IfcLabel;\n\tFacsimileNumbers : OPTIONAL LIST [1:?] OF IfcLabel;\n\tPagerNumber : OPTIONAL IfcLabel;\n\tElectronicMailAddresses : OPTIONAL LIST [1:?] OF IfcLabel;\n\tWWWHomePageURL : OPTIONAL IfcURIReference;\n\tMessagingIDs : OPTIONAL LIST [1:?] OF IfcURIReference;\n WHERE\n\tMinimumDataProvided : EXISTS (TelephoneNumbers) OR\nEXISTS (FacsimileNumbers) OR \nEXISTS (PagerNumber) OR\nEXISTS (ElectronicMailAddresses) OR \nEXISTS (WWWHomePageURL) OR\nEXISTS (MessagingIDs);\nEND_ENTITY;\n\nENTITY IfcTendon\n SUBTYPE OF (IfcReinforcingElement);\n\tPredefinedType : OPTIONAL IfcTendonTypeEnum;\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tTensionForce : OPTIONAL IfcForceMeasure;\n\tPreStress : OPTIONAL IfcPressureMeasure;\n\tFrictionCoefficient : OPTIONAL IfcNormalisedRatioMeasure;\n\tAnchorageSlip : OPTIONAL IfcPositiveLengthMeasure;\n\tMinCurvatureRadius : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcTendonTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcTendonTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCTENDONTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTendonAnchor\n SUBTYPE OF (IfcReinforcingElement);\n\tPredefinedType : OPTIONAL IfcTendonAnchorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcTendonAnchorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcTendonAnchorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCTENDONANCHORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTendonAnchorType\n SUBTYPE OF (IfcReinforcingElementType);\n\tPredefinedType : IfcTendonAnchorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTendonAnchorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcTendonAnchorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTendonConduit\n SUBTYPE OF (IfcReinforcingElement);\n\tPredefinedType : OPTIONAL IfcTendonConduitTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcTendonConduitTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcTendonConduitTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCTENDONCONDUITTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTendonConduitType\n SUBTYPE OF (IfcReinforcingElementType);\n\tPredefinedType : IfcTendonConduitTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTendonConduitTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcTendonConduitTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTendonType\n SUBTYPE OF (IfcReinforcingElementType);\n\tPredefinedType : IfcTendonTypeEnum;\n\tNominalDiameter : OPTIONAL IfcPositiveLengthMeasure;\n\tCrossSectionArea : OPTIONAL IfcAreaMeasure;\n\tSheathDiameter : OPTIONAL IfcPositiveLengthMeasure;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTendonTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcTendonTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTessellatedFaceSet\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcPolygonalFaceSet\n\t,IfcTriangulatedFaceSet))\n SUBTYPE OF (IfcTessellatedItem);\n\tCoordinates : IfcCartesianPointList3D;\n DERIVE\n\t Dim : IfcDimensionCount := 3;\n INVERSE\n\tHasColours : SET [0:1] OF IfcIndexedColourMap FOR MappedTo;\n\tHasTextures : SET [0:?] OF IfcIndexedTextureMap FOR MappedTo;\nEND_ENTITY;\n\nENTITY IfcTessellatedItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcIndexedPolygonalFace\n\t,IfcTessellatedFaceSet))\n SUBTYPE OF (IfcGeometricRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcTextLiteral\n SUPERTYPE OF (ONEOF\n\t(IfcTextLiteralWithExtent))\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tLiteral : IfcPresentableText;\n\tPlacement : IfcAxis2Placement;\n\tPath : IfcTextPath;\nEND_ENTITY;\n\nENTITY IfcTextLiteralWithExtent\n SUBTYPE OF (IfcTextLiteral);\n\tExtent : IfcPlanarExtent;\n\tBoxAlignment : IfcBoxAlignment;\n WHERE\n\tWR31 : NOT('IFC4X3_ADD2.IFCPLANARBOX' IN TYPEOF(Extent));\nEND_ENTITY;\n\nENTITY IfcTextStyle\n SUBTYPE OF (IfcPresentationStyle);\n\tTextCharacterAppearance : OPTIONAL IfcTextStyleForDefinedFont;\n\tTextStyle : OPTIONAL IfcTextStyleTextModel;\n\tTextFontStyle : IfcTextFontSelect;\n\tModelOrDraughting : OPTIONAL IfcBoolean;\nEND_ENTITY;\n\nENTITY IfcTextStyleFontModel\n SUBTYPE OF (IfcPreDefinedTextFont);\n\tFontFamily : LIST [1:?] OF IfcTextFontName;\n\tFontStyle : OPTIONAL IfcFontStyle;\n\tFontVariant : OPTIONAL IfcFontVariant;\n\tFontWeight : OPTIONAL IfcFontWeight;\n\tFontSize : IfcSizeSelect;\n WHERE\n\tMeasureOfFontSize : ('IFC4X3_ADD2.IFCLENGTHMEASURE' IN TYPEOF(SELF.FontSize)) AND\n(SELF.FontSize > 0.);\nEND_ENTITY;\n\nENTITY IfcTextStyleForDefinedFont\n SUBTYPE OF (IfcPresentationItem);\n\tColour : IfcColour;\n\tBackgroundColour : OPTIONAL IfcColour;\nEND_ENTITY;\n\nENTITY IfcTextStyleTextModel\n SUBTYPE OF (IfcPresentationItem);\n\tTextIndent : OPTIONAL IfcSizeSelect;\n\tTextAlign : OPTIONAL IfcTextAlignment;\n\tTextDecoration : OPTIONAL IfcTextDecoration;\n\tLetterSpacing : OPTIONAL IfcSizeSelect;\n\tWordSpacing : OPTIONAL IfcSizeSelect;\n\tTextTransform : OPTIONAL IfcTextTransformation;\n\tLineHeight : OPTIONAL IfcSizeSelect;\nEND_ENTITY;\n\nENTITY IfcTextureCoordinate\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcIndexedTextureMap\n\t,IfcTextureCoordinateGenerator\n\t,IfcTextureMap))\n SUBTYPE OF (IfcPresentationItem);\n\tMaps : LIST [1:?] OF IfcSurfaceTexture;\nEND_ENTITY;\n\nENTITY IfcTextureCoordinateGenerator\n SUBTYPE OF (IfcTextureCoordinate);\n\tMode : IfcLabel;\n\tParameter : OPTIONAL LIST [1:?] OF IfcReal;\nEND_ENTITY;\n\nENTITY IfcTextureCoordinateIndices\n SUPERTYPE OF (ONEOF\n\t(IfcTextureCoordinateIndicesWithVoids));\n\tTexCoordIndex : LIST [3:?] OF IfcPositiveInteger;\n\tTexCoordsOf : IfcIndexedPolygonalFace;\n INVERSE\n\tToTexMap : IfcIndexedPolygonalTextureMap FOR TexCoordIndices;\nEND_ENTITY;\n\nENTITY IfcTextureCoordinateIndicesWithVoids\n SUBTYPE OF (IfcTextureCoordinateIndices);\n\tInnerTexCoordIndices : LIST [1:?] OF LIST [3:?] OF UNIQUE IfcPositiveInteger;\nEND_ENTITY;\n\nENTITY IfcTextureMap\n SUBTYPE OF (IfcTextureCoordinate);\n\tVertices : LIST [3:?] OF IfcTextureVertex;\n\tMappedTo : IfcFace;\nEND_ENTITY;\n\nENTITY IfcTextureVertex\n SUBTYPE OF (IfcPresentationItem);\n\tCoordinates : LIST [2:2] OF IfcParameterValue;\nEND_ENTITY;\n\nENTITY IfcTextureVertexList\n SUBTYPE OF (IfcPresentationItem);\n\tTexCoordsList : LIST [1:?] OF LIST [2:2] OF IfcParameterValue;\nEND_ENTITY;\n\nENTITY IfcThirdOrderPolynomialSpiral\n SUBTYPE OF (IfcSpiral);\n\tCubicTerm : IfcLengthMeasure;\n\tQuadraticTerm : OPTIONAL IfcLengthMeasure;\n\tLinearTerm : OPTIONAL IfcLengthMeasure;\n\tConstantTerm : OPTIONAL IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcTimePeriod;\n\tStartTime : IfcTime;\n\tEndTime : IfcTime;\nEND_ENTITY;\n\nENTITY IfcTimeSeries\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcIrregularTimeSeries\n\t,IfcRegularTimeSeries));\n\tName : IfcLabel;\n\tDescription : OPTIONAL IfcText;\n\tStartTime : IfcDateTime;\n\tEndTime : IfcDateTime;\n\tTimeSeriesDataType : IfcTimeSeriesDataTypeEnum;\n\tDataOrigin : IfcDataOriginEnum;\n\tUserDefinedDataOrigin : OPTIONAL IfcLabel;\n\tUnit : OPTIONAL IfcUnit;\n INVERSE\n\tHasExternalReference : SET [1:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;\nEND_ENTITY;\n\nENTITY IfcTimeSeriesValue;\n\tListValues : LIST [1:?] OF IfcValue;\nEND_ENTITY;\n\nENTITY IfcTopologicalRepresentationItem\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConnectedFaceSet\n\t,IfcEdge\n\t,IfcFace\n\t,IfcFaceBound\n\t,IfcLoop\n\t,IfcPath\n\t,IfcVertex))\n SUBTYPE OF (IfcRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcTopologyRepresentation\n SUBTYPE OF (IfcShapeModel);\n WHERE\n\tWR21 : SIZEOF(QUERY(temp <* SELF\\IfcRepresentation.Items | \n  NOT('IFC4X3_ADD2.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))\n)) = 0\n\n;\n\tWR22 : EXISTS(SELF\\IfcRepresentation.RepresentationType);\n\tWR23 : IfcTopologyRepresentationTypes(SELF\\IfcRepresentation.RepresentationType, SELF\\IfcRepresentation.Items);\nEND_ENTITY;\n\nENTITY IfcToroidalSurface\n SUBTYPE OF (IfcElementarySurface);\n\tMajorRadius : IfcPositiveLengthMeasure;\n\tMinorRadius : IfcPositiveLengthMeasure;\n WHERE\n\tMajorLargerMinor : MinorRadius < MajorRadius;\nEND_ENTITY;\n\nENTITY IfcTrackElement\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcTrackElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcTrackElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcTrackElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCTRACKELEMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTrackElementType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcTrackElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTrackElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcTrackElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTransformer\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcTransformerTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcTransformerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcTransformerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCTRANSFORMERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTransformerType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcTransformerTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTransformerTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcTransformerTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTransportElement\n SUBTYPE OF (IfcTransportationDevice);\n\tPredefinedType : OPTIONAL IfcTransportElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcTransportElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcTransportElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCTRANSPORTELEMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTransportElementType\n SUBTYPE OF (IfcTransportationDeviceType);\n\tPredefinedType : IfcTransportElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTransportElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcTransportElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTransportationDevice\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcTransportElement\n\t,IfcVehicle))\n SUBTYPE OF (IfcElement);\nEND_ENTITY;\n\nENTITY IfcTransportationDeviceType\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcTransportElementType\n\t,IfcVehicleType))\n SUBTYPE OF (IfcElementType);\nEND_ENTITY;\n\nENTITY IfcTrapeziumProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tBottomXDim : IfcPositiveLengthMeasure;\n\tTopXDim : IfcPositiveLengthMeasure;\n\tYDim : IfcPositiveLengthMeasure;\n\tTopXOffset : IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcTriangulatedFaceSet\n SUPERTYPE OF (ONEOF\n\t(IfcTriangulatedIrregularNetwork))\n SUBTYPE OF (IfcTessellatedFaceSet);\n\tNormals : OPTIONAL LIST [1:?] OF LIST [3:3] OF IfcParameterValue;\n\tClosed : OPTIONAL IfcBoolean;\n\tCoordIndex : LIST [1:?] OF LIST [3:3] OF IfcPositiveInteger;\n\tPnIndex : OPTIONAL LIST [1:?] OF IfcPositiveInteger;\n DERIVE\n\t NumberOfTriangles : IfcInteger := SIZEOF(CoordIndex);\nEND_ENTITY;\n\nENTITY IfcTriangulatedIrregularNetwork\n SUBTYPE OF (IfcTriangulatedFaceSet);\n\tFlags : LIST [1:?] OF IfcInteger;\n WHERE\n\tNotClosed : SELF\\IfcTriangulatedFaceSet.Closed = FALSE;\nEND_ENTITY;\n\nENTITY IfcTrimmedCurve\n SUBTYPE OF (IfcBoundedCurve);\n\tBasisCurve : IfcCurve;\n\tTrim1 : SET [1:2] OF IfcTrimmingSelect;\n\tTrim2 : SET [1:2] OF IfcTrimmingSelect;\n\tSenseAgreement : IfcBoolean;\n\tMasterRepresentation : IfcTrimmingPreference;\n WHERE\n\tNoTrimOfBoundedCurves : NOT('IFC4X3_ADD2.IFCBOUNDEDCURVE' IN TYPEOF(BasisCurve));\n\tTrim1ValuesConsistent : (HIINDEX(Trim1) = 1) OR (TYPEOF(Trim1[1]) <> TYPEOF(Trim1[2]));\n\tTrim2ValuesConsistent : (HIINDEX(Trim2) = 1) OR (TYPEOF(Trim2[1]) <> TYPEOF(Trim2[2]));\nEND_ENTITY;\n\nENTITY IfcTubeBundle\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcTubeBundleTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcTubeBundleTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcTubeBundleTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCTUBEBUNDLETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcTubeBundleType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcTubeBundleTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcTubeBundleTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcTubeBundleTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcTypeObject\n SUPERTYPE OF (ONEOF\n\t(IfcTypeProcess\n\t,IfcTypeProduct\n\t,IfcTypeResource))\n SUBTYPE OF (IfcObjectDefinition);\n\tApplicableOccurrence : OPTIONAL IfcIdentifier;\n\tHasPropertySets : OPTIONAL SET [1:?] OF IfcPropertySetDefinition;\n INVERSE\n\tTypes : SET [0:1] OF IfcRelDefinesByType FOR RelatingType;\n WHERE\n\tNameRequired : EXISTS(SELF\\IfcRoot.Name);\n\tUniquePropertySetNames : (NOT(EXISTS(HasPropertySets))) OR IfcUniquePropertySetNames(HasPropertySets);\nEND_ENTITY;\n\nENTITY IfcTypeProcess\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcEventType\n\t,IfcProcedureType\n\t,IfcTaskType))\n SUBTYPE OF (IfcTypeObject);\n\tIdentification : OPTIONAL IfcIdentifier;\n\tLongDescription : OPTIONAL IfcText;\n\tProcessType : OPTIONAL IfcLabel;\n INVERSE\n\tOperatesOn : SET [0:?] OF IfcRelAssignsToProcess FOR RelatingProcess;\nEND_ENTITY;\n\nENTITY IfcTypeProduct\n SUPERTYPE OF (ONEOF\n\t(IfcElementType\n\t,IfcSpatialElementType))\n SUBTYPE OF (IfcTypeObject);\n\tRepresentationMaps : OPTIONAL LIST [1:?] OF UNIQUE IfcRepresentationMap;\n\tTag : OPTIONAL IfcLabel;\n INVERSE\n\tReferencedBy : SET [0:?] OF IfcRelAssignsToProduct FOR RelatingProduct;\n WHERE\n\tApplicableOccurrence : NOT(EXISTS(SELF\\IfcTypeObject.Types[1])) OR\n(SIZEOF(QUERY(temp <* SELF\\IfcTypeObject.Types[1].RelatedObjects |\n  NOT('IFC4X3_ADD2.IFCPRODUCT' IN TYPEOF(temp)))\n) = 0);\nEND_ENTITY;\n\nENTITY IfcTypeResource\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcConstructionResourceType))\n SUBTYPE OF (IfcTypeObject);\n\tIdentification : OPTIONAL IfcIdentifier;\n\tLongDescription : OPTIONAL IfcText;\n\tResourceType : OPTIONAL IfcLabel;\n INVERSE\n\tResourceOf : SET [0:?] OF IfcRelAssignsToResource FOR RelatingResource;\nEND_ENTITY;\n\nENTITY IfcUShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tFlangeSlope : OPTIONAL IfcPlaneAngleMeasure;\n WHERE\n\tValidFlangeThickness : FlangeThickness < (Depth / 2.);\n\tValidWebThickness : WebThickness < FlangeWidth;\nEND_ENTITY;\n\nENTITY IfcUnitAssignment;\n\tUnits : SET [1:?] OF IfcUnit;\n WHERE\n\tWR01 : IfcCorrectUnitAssignment(Units);\nEND_ENTITY;\n\nENTITY IfcUnitaryControlElement\n SUBTYPE OF (IfcDistributionControlElement);\n\tPredefinedType : OPTIONAL IfcUnitaryControlElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcUnitaryControlElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcUnitaryControlElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCUNITARYCONTROLELEMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcUnitaryControlElementType\n SUBTYPE OF (IfcDistributionControlElementType);\n\tPredefinedType : IfcUnitaryControlElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcUnitaryControlElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcUnitaryControlElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcUnitaryEquipment\n SUBTYPE OF (IfcEnergyConversionDevice);\n\tPredefinedType : OPTIONAL IfcUnitaryEquipmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcUnitaryEquipmentTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcUnitaryEquipmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCUNITARYEQUIPMENTTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcUnitaryEquipmentType\n SUBTYPE OF (IfcEnergyConversionDeviceType);\n\tPredefinedType : IfcUnitaryEquipmentTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcUnitaryEquipmentTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcUnitaryEquipmentTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcValve\n SUBTYPE OF (IfcFlowController);\n\tPredefinedType : OPTIONAL IfcValveTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcValveTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcValveTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCVALVETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcValveType\n SUBTYPE OF (IfcFlowControllerType);\n\tPredefinedType : IfcValveTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcValveTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcValveTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcVector\n SUBTYPE OF (IfcGeometricRepresentationItem);\n\tOrientation : IfcDirection;\n\tMagnitude : IfcLengthMeasure;\n DERIVE\n\t Dim : IfcDimensionCount := Orientation.Dim;\n WHERE\n\tMagGreaterOrEqualZero : Magnitude >= 0.0;\nEND_ENTITY;\n\nENTITY IfcVehicle\n SUBTYPE OF (IfcTransportationDevice);\n\tPredefinedType : OPTIONAL IfcVehicleTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcVehicleTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcVehicleTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCVEHICLETYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcVehicleType\n SUBTYPE OF (IfcTransportationDeviceType);\n\tPredefinedType : IfcVehicleTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcVehicleTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcVehicleTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcVertex\n SUPERTYPE OF (ONEOF\n\t(IfcVertexPoint))\n SUBTYPE OF (IfcTopologicalRepresentationItem);\nEND_ENTITY;\n\nENTITY IfcVertexLoop\n SUBTYPE OF (IfcLoop);\n\tLoopVertex : IfcVertex;\nEND_ENTITY;\n\nENTITY IfcVertexPoint\n SUBTYPE OF (IfcVertex);\n\tVertexGeometry : IfcPoint;\nEND_ENTITY;\n\nENTITY IfcVibrationDamper\n SUBTYPE OF (IfcElementComponent);\n\tPredefinedType : OPTIONAL IfcVibrationDamperTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcVibrationDamperTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcVibrationDamperTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCVIBRATIONDAMPERTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcVibrationDamperType\n SUBTYPE OF (IfcElementComponentType);\n\tPredefinedType : IfcVibrationDamperTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcVibrationDamperTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcVibrationDamperTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcVibrationIsolator\n SUBTYPE OF (IfcElementComponent);\n\tPredefinedType : OPTIONAL IfcVibrationIsolatorTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcVibrationIsolatorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcVibrationIsolatorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCVIBRATIONISOLATORTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcVibrationIsolatorType\n SUBTYPE OF (IfcElementComponentType);\n\tPredefinedType : IfcVibrationIsolatorTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcVibrationIsolatorTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcVibrationIsolatorTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcVirtualElement\n SUBTYPE OF (IfcElement);\n\tPredefinedType : OPTIONAL IfcVirtualElementTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcVirtualElementTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcVirtualElementTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcVirtualGridIntersection;\n\tIntersectingAxes : LIST [2:2] OF UNIQUE IfcGridAxis;\n\tOffsetDistances : LIST [2:3] OF IfcLengthMeasure;\nEND_ENTITY;\n\nENTITY IfcVoidingFeature\n SUBTYPE OF (IfcFeatureElementSubtraction);\n\tPredefinedType : OPTIONAL IfcVoidingFeatureTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcVoidingFeatureTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcVoidingFeatureTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcWall\n SUPERTYPE OF (ONEOF\n\t(IfcWallStandardCase))\n SUBTYPE OF (IfcBuiltElement);\n\tPredefinedType : OPTIONAL IfcWallTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcWallTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcWallTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCWALLTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcWallStandardCase\n SUBTYPE OF (IfcWall);\n WHERE\n\tHasMaterialLayerSetUsage : SIZEOF (QUERY(temp <* USEDIN(SELF, 'IFC4X3_ADD2.IFCRELASSOCIATES.RELATEDOBJECTS') |\n              ('IFC4X3_ADD2.IFCRELASSOCIATESMATERIAL' IN TYPEOF(temp)) AND\n              ('IFC4X3_ADD2.IFCMATERIALLAYERSETUSAGE' IN TYPEOF(temp.RelatingMaterial))\n              )) = 1;\nEND_ENTITY;\n\nENTITY IfcWallType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcWallTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcWallTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcWallTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcWasteTerminal\n SUBTYPE OF (IfcFlowTerminal);\n\tPredefinedType : OPTIONAL IfcWasteTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcWasteTerminalTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcWasteTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCWASTETERMINALTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcWasteTerminalType\n SUBTYPE OF (IfcFlowTerminalType);\n\tPredefinedType : IfcWasteTerminalTypeEnum;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcWasteTerminalTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcWasteTerminalTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcWellKnownText;\n\tWellKnownText : IfcWellKnownTextLiteral;\n\tCoordinateReferenceSystem : IfcCoordinateReferenceSystem;\nEND_ENTITY;\n\nENTITY IfcWindow\n SUBTYPE OF (IfcBuiltElement);\n\tOverallHeight : OPTIONAL IfcPositiveLengthMeasure;\n\tOverallWidth : OPTIONAL IfcPositiveLengthMeasure;\n\tPredefinedType : OPTIONAL IfcWindowTypeEnum;\n\tPartitioningType : OPTIONAL IfcWindowTypePartitioningEnum;\n\tUserDefinedPartitioningType : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR\n (PredefinedType <> IfcWindowTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcWindowTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcObject.ObjectType));\n\tCorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR\n  ('IFC4X3_ADD2.IFCWINDOWTYPE' IN TYPEOF(SELF\\IfcObject.IsTypedBy[1].RelatingType));\nEND_ENTITY;\n\nENTITY IfcWindowLiningProperties\n SUBTYPE OF (IfcPreDefinedPropertySet);\n\tLiningDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tLiningThickness : OPTIONAL IfcNonNegativeLengthMeasure;\n\tTransomThickness : OPTIONAL IfcNonNegativeLengthMeasure;\n\tMullionThickness : OPTIONAL IfcNonNegativeLengthMeasure;\n\tFirstTransomOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tSecondTransomOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tFirstMullionOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tSecondMullionOffset : OPTIONAL IfcNormalisedRatioMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n\tLiningOffset : OPTIONAL IfcLengthMeasure;\n\tLiningToPanelOffsetX : OPTIONAL IfcLengthMeasure;\n\tLiningToPanelOffsetY : OPTIONAL IfcLengthMeasure;\n WHERE\n\tWR31 : NOT(EXISTS(LiningDepth) AND NOT(EXISTS(LiningThickness)));\n\tWR32 : NOT(NOT(EXISTS(FirstTransomOffset)) AND EXISTS(SecondTransomOffset));\n\tWR33 : NOT(NOT(EXISTS(FirstMullionOffset)) AND EXISTS(SecondMullionOffset));\n\tWR34 : (EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1])) \nAND \n('IFC4X3_ADD2.IFCWINDOWTYPE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]));\nEND_ENTITY;\n\nENTITY IfcWindowPanelProperties\n SUBTYPE OF (IfcPreDefinedPropertySet);\n\tOperationType : IfcWindowPanelOperationEnum;\n\tPanelPosition : IfcWindowPanelPositionEnum;\n\tFrameDepth : OPTIONAL IfcPositiveLengthMeasure;\n\tFrameThickness : OPTIONAL IfcPositiveLengthMeasure;\n\tShapeAspectStyle : OPTIONAL IfcShapeAspect;\n WHERE\n\tApplicableToType : (EXISTS(SELF\\IfcPropertySetDefinition.DefinesType[1])) \nAND \n('IFC4X3_ADD2.IFCWINDOWTYPE' IN TYPEOF(SELF\\IfcPropertySetDefinition.DefinesType[1]));\nEND_ENTITY;\n\nENTITY IfcWindowType\n SUBTYPE OF (IfcBuiltElementType);\n\tPredefinedType : IfcWindowTypeEnum;\n\tPartitioningType : IfcWindowTypePartitioningEnum;\n\tParameterTakesPrecedence : OPTIONAL IfcBoolean;\n\tUserDefinedPartitioningType : OPTIONAL IfcLabel;\n WHERE\n\tCorrectPredefinedType : (PredefinedType <> IfcWindowTypeEnum.USERDEFINED) OR\n ((PredefinedType = IfcWindowTypeEnum.USERDEFINED) AND EXISTS (SELF\\IfcElementType.ElementType));\nEND_ENTITY;\n\nENTITY IfcWorkCalendar\n SUBTYPE OF (IfcControl);\n\tWorkingTimes : OPTIONAL SET [1:?] OF IfcWorkTime;\n\tExceptionTimes : OPTIONAL SET [1:?] OF IfcWorkTime;\n\tPredefinedType : OPTIONAL IfcWorkCalendarTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcWorkCalendarTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcWorkCalendarTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcWorkControl\n ABSTRACT SUPERTYPE OF (ONEOF\n\t(IfcWorkPlan\n\t,IfcWorkSchedule))\n SUBTYPE OF (IfcControl);\n\tCreationDate : IfcDateTime;\n\tCreators : OPTIONAL SET [1:?] OF IfcPerson;\n\tPurpose : OPTIONAL IfcLabel;\n\tDuration : OPTIONAL IfcDuration;\n\tTotalFloat : OPTIONAL IfcDuration;\n\tStartTime : IfcDateTime;\n\tFinishTime : OPTIONAL IfcDateTime;\nEND_ENTITY;\n\nENTITY IfcWorkPlan\n SUBTYPE OF (IfcWorkControl);\n\tPredefinedType : OPTIONAL IfcWorkPlanTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcWorkPlanTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcWorkPlanTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcWorkSchedule\n SUBTYPE OF (IfcWorkControl);\n\tPredefinedType : OPTIONAL IfcWorkScheduleTypeEnum;\n WHERE\n\tCorrectPredefinedType : NOT(EXISTS(PredefinedType)) OR (PredefinedType <> IfcWorkScheduleTypeEnum.USERDEFINED) OR\n((PredefinedType = IfcWorkScheduleTypeEnum.USERDEFINED) AND EXISTS(SELF\\IfcObject.ObjectType));\nEND_ENTITY;\n\nENTITY IfcWorkTime\n SUBTYPE OF (IfcSchedulingTime);\n\tRecurrencePattern : OPTIONAL IfcRecurrencePattern;\n\tStartDate : OPTIONAL IfcDate;\n\tFinishDate : OPTIONAL IfcDate;\nEND_ENTITY;\n\nENTITY IfcZShapeProfileDef\n SUBTYPE OF (IfcParameterizedProfileDef);\n\tDepth : IfcPositiveLengthMeasure;\n\tFlangeWidth : IfcPositiveLengthMeasure;\n\tWebThickness : IfcPositiveLengthMeasure;\n\tFlangeThickness : IfcPositiveLengthMeasure;\n\tFilletRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n\tEdgeRadius : OPTIONAL IfcNonNegativeLengthMeasure;\n WHERE\n\tValidFlangeThickness : FlangeThickness < (Depth / 2.);\nEND_ENTITY;\n\nENTITY IfcZone\n SUBTYPE OF (IfcSystem);\n\tLongName : OPTIONAL IfcLabel;\n WHERE\n\tWR1 : (SIZEOF(SELF\\IfcGroup.IsGroupedBy) = 0) OR\n (SIZEOF (QUERY (temp <* SELF\\IfcGroup.IsGroupedBy[1].RelatedObjects |  \n  NOT(('IFC4X3_ADD2.IFCZONE' IN TYPEOF(temp)) OR \n  ('IFC4X3_ADD2.IFCSPACE' IN TYPEOF(temp)) OR\n  ('IFC4X3_ADD2.IFCSPATIALZONE' IN TYPEOF(temp))\n ))) = 0);\nEND_ENTITY;\n\nFUNCTION IfcAssociatedSurface\n(Arg : IfcPcurve) : IfcSurface;\n\n   LOCAL\n     Surf : IfcSurface;\n   END_LOCAL;\n   \n   Surf := Arg\\IfcPcurve.BasisSurface;\n   \n   RETURN(Surf);\n\nEND_FUNCTION;\n\nFUNCTION IfcBaseAxis\n  (Dim : INTEGER; \n   Axis1, Axis2, Axis3 : IfcDirection) \n    : LIST [2:3] OF IfcDirection;\n\nLOCAL\n  U : LIST [2:3] OF IfcDirection;\n  Factor : REAL;\n  D1, D2 : IfcDirection;\nEND_LOCAL;\n\n  IF (Dim = 3) THEN \n    D1 := NVL(IfcNormalise(Axis3), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n    D2 := IfcFirstProjAxis(D1, Axis1);\n    U  := [D2, IfcSecondProjAxis(D1, D2, Axis2), D1];\n  ELSE\n    IF EXISTS(Axis1) THEN\n      D1 := IfcNormalise(Axis1);\n      U  := [D1, IfcOrthogonalComplement(D1)];\n      IF EXISTS(Axis2) THEN\n        Factor := IfcDotProduct(Axis2, U[2]);\n        IF (Factor < 0.0) THEN\n          U[2].DirectionRatios[1] := -U[2].DirectionRatios[1];\n          U[2].DirectionRatios[2] := -U[2].DirectionRatios[2];\n        END_IF;\n      END_IF;\n    ELSE\n      IF EXISTS(Axis2) THEN\n        D1 := IfcNormalise(Axis2);\n        U  := [IfcOrthogonalComplement(D1), D1];\n        U[1].DirectionRatios[1] := -U[1].DirectionRatios[1];\n        U[1].DirectionRatios[2] := -U[1].DirectionRatios[2];\n        ELSE\n          U := [IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0, 0.0]), \n                IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0, 1.0])];\n      END_IF;\n    END_IF;\n  END_IF;\n  RETURN(U);\n\nEND_FUNCTION;\n\nFUNCTION IfcBooleanChoose\n(B : BOOLEAN ;\n     Choice1, Choice2 : GENERIC : Item) : GENERIC : Item;\n  IF B THEN\n     RETURN (Choice1);\n  ELSE\n     RETURN (Choice2);\n  END_IF;\n\nEND_FUNCTION;\n\nFUNCTION IfcBuild2Axes\n  (RefDirection : IfcDirection)\n    : LIST [2:2] OF IfcDirection;\nLOCAL\n  D : IfcDirection := NVL(IfcNormalise(RefDirection),\n      IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0]));\nEND_LOCAL;\n  RETURN([D, IfcOrthogonalComplement(D)]);\n\nEND_FUNCTION;\n\nFUNCTION IfcBuildAxes\n  (Axis, RefDirection : IfcDirection) \n    : LIST [3:3] OF IfcDirection;\nLOCAL\n  D1, D2 : IfcDirection;\nEND_LOCAL;\n  D1 := NVL(IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));\n  D2 := IfcFirstProjAxis(D1, RefDirection);\n  RETURN ([D2, IfcNormalise(IfcCrossProduct(D1,D2))\\IfcVector.Orientation, D1]);\n\nEND_FUNCTION;\n\nFUNCTION IfcConsecutiveSegments\n  (Segments : LIST [1:?] OF IfcSegmentIndexSelect)\n  : BOOLEAN;\n\n LOCAL\n  Result : BOOLEAN := TRUE;\n END_LOCAL;\n\n  REPEAT i := 1 TO (HIINDEX(Segments)-1);\n    IF Segments[i][HIINDEX(Segments[i])] <> Segments[i+1][1] THEN\n      BEGIN\n        Result := FALSE;\n        ESCAPE;\n      END;\n END_IF;\n  END_REPEAT;\n\n  RETURN (Result);\n\nEND_FUNCTION;\n\nFUNCTION IfcConstraintsParamBSpline\n( Degree, UpKnots, UpCp : INTEGER;\n  KnotMult : LIST OF INTEGER;\n  Knots : LIST OF IfcParameterValue ) \n: BOOLEAN;\n\n\n  LOCAL\n    Result : BOOLEAN := TRUE;\n    K, Sum : INTEGER;\n  END_LOCAL;\n\n  (* Find sum of knot multiplicities. *)\n  Sum := KnotMult[1];\n  REPEAT i := 2 TO UpKnots;\n    Sum := Sum + KnotMult[i];\n  END_REPEAT;\n\n  (* Check limits holding for all B-spline parametrisations *)\n  IF (Degree < 1) OR (UpKnots < 2) OR (UpCp < Degree) OR\n    (Sum <> (Degree + UpCp + 2)) THEN\n    Result := FALSE;\n    RETURN(Result);\n  END_IF;\n\n  K := KnotMult[1];\n  IF (K < 1) OR (K > Degree + 1) THEN\n    Result := FALSE;\n    RETURN(Result);\n  END_IF;\n\n  REPEAT i := 2 TO UpKnots;\n    IF (KnotMult[i] < 1) OR (Knots[i] <= Knots[i-1]) THEN\n      Result := FALSE;\n      RETURN(Result);\n    END_IF;\n    K := KnotMult[i];\n    IF (i < UpKnots) AND (K > Degree) THEN\n      Result := FALSE;\n      RETURN(Result);\n    END_IF;\n    IF (i = UpKnots) AND (K > Degree + 1) THEN\n      Result := FALSE;\n      RETURN(Result);\n    END_IF;\n  END_REPEAT;\n\n  RETURN(Result);\n\nEND_FUNCTION;\n\nFUNCTION IfcConvertDirectionInto2D\n    (Direction : IfcDirection)\n    : IfcDirection;\n \n  LOCAL\n    Direction2D : IfcDirection := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.,1.]);\n  END_LOCAL;\n  \n  Direction2D.DirectionRatios[1] := Direction.DirectionRatios[1];\n  Direction2D.DirectionRatios[2] := Direction.DirectionRatios[2];\n  \n  RETURN (Direction2D);\n\nEND_FUNCTION;\n\nFUNCTION IfcCorrectDimensions\n(m   : IfcUnitEnum; Dim : IfcDimensionalExponents) : LOGICAL;  \nCASE m OF\n  LENGTHUNIT : IF\n    Dim = (IfcDimensionalExponents (1, 0, 0, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  MASSUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 1, 0, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  TIMEUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 1, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ELECTRICCURRENTUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 1, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  THERMODYNAMICTEMPERATUREUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 1, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  AMOUNTOFSUBSTANCEUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 1, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  LUMINOUSINTENSITYUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  PLANEANGLEUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  SOLIDANGLEUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  AREAUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 0, 0, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  VOLUMEUNIT : IF\n    Dim = (IfcDimensionalExponents (3, 0, 0, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n\n  ABSORBEDDOSEUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  RADIOACTIVITYUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ELECTRICCAPACITANCEUNIT : IF\n    Dim = (IfcDimensionalExponents (-2, -1, 4, 2, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  DOSEEQUIVALENTUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 0, -2, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ELECTRICCHARGEUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 1, 1, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ELECTRICCONDUCTANCEUNIT : IF\n    Dim = (IfcDimensionalExponents (-2, -1, 3, 2, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ELECTRICVOLTAGEUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 1, -3, -1, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ELECTRICRESISTANCEUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 1, -3, -2, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ENERGYUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 1, -2, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  FORCEUNIT : IF\n    Dim = (IfcDimensionalExponents (1, 1, -2, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  FREQUENCYUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, -1, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  INDUCTANCEUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 1, -2, -2, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  ILLUMINANCEUNIT : IF\n    Dim = (IfcDimensionalExponents (-2, 0, 0, 0, 0, 0, 1))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  LUMINOUSFLUXUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 0, 0, 0, 0, 0, 1))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  MAGNETICFLUXUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 1, -2, -1, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  MAGNETICFLUXDENSITYUNIT : IF\n    Dim = (IfcDimensionalExponents (0, 1, -2, -1, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  POWERUNIT : IF\n    Dim = (IfcDimensionalExponents (2, 1, -3, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n  PRESSUREUNIT : IF\n    Dim = (IfcDimensionalExponents (-1, 1, -2, 0, 0, 0, 0))\n      THEN RETURN(TRUE);\n      ELSE RETURN(FALSE);\n    END_IF;\n\n  OTHERWISE :\n    RETURN (UNKNOWN);\nEND_CASE;\n\nEND_FUNCTION;\n\nFUNCTION IfcCorrectFillAreaStyle\n  (Styles : SET[1:?] OF IfcFillStyleSelect)\n  :LOGICAL;\n\nLOCAL\n   Hatching : INTEGER := 0;\n   Tiles    : INTEGER := 0;\n   Colour   : INTEGER := 0;\n   External : INTEGER := 0;\nEND_LOCAL;\n\n\nExternal := SIZEOF(QUERY(Style <* Styles |\n  'IFC4X3_ADD2.IFCEXTERNALLYDEFINEDHATCHSTYLE' IN\n   TYPEOF(Style)));\n\nHatching  := SIZEOF(QUERY(Style <* Styles |\n  'IFC4X3_ADD2.IFCFILLAREASTYLEHATCHING' IN\n   TYPEOF(Style)));\n\nTiles     := SIZEOF(QUERY(Style <* Styles |\n  'IFC4X3_ADD2.IFCFILLAREASTYLETILES' IN\n   TYPEOF(Style)));\n\nColour    := SIZEOF(QUERY(Style <* Styles |\n  'IFC4X3_ADD2.IFCCOLOUR' IN\n   TYPEOF(Style)));\n\n\nIF (External > 1) THEN\n  RETURN (FALSE);\nEND_IF;\n\n\nIF ((External = 1) AND ((Hatching > 0) OR (Tiles > 0) OR (Colour > 0))) THEN\n  RETURN (FALSE);\nEND_IF;\n\n\nIF (Colour > 1) THEN\n  RETURN (FALSE);\nEND_IF;\n\nIF ((Hatching > 0) AND (Tiles >0)) THEN\n  RETURN (FALSE);\nEND_IF;\n\nRETURN(TRUE);\n\nEND_FUNCTION;\n\nFUNCTION IfcCorrectLocalPlacement\n  (AxisPlacement:IfcAxis2Placement; \n   RelPlacement : IfcObjectPlacement):LOGICAL;\n\n  IF (EXISTS(RelPlacement)) THEN\n    IF ('IFC4X3_ADD2.IFCGRIDPLACEMENT' IN TYPEOF(RelPlacement)) THEN\n      RETURN(?);\n    END_IF;\n    IF ('IFC4X3_ADD2.IFCLOCALPLACEMENT' IN TYPEOF(RelPlacement)) THEN\n      IF ('IFC4X3_ADD2.IFCAXIS2PLACEMENT2D' IN TYPEOF(AxisPlacement)) THEN\n        RETURN(TRUE);\n      END_IF;\n      IF ('IFC4X3_ADD2.IFCAXIS2PLACEMENT3D' IN TYPEOF(AxisPlacement)) THEN\n        IF (RelPlacement\\IfcLocalPlacement.RelativePlacement.Dim = 3) THEN\n          RETURN(TRUE);\n        ELSE\n          RETURN(FALSE);\n        END_IF;\n      END_IF;\n    END_IF;\n  ELSE\n    RETURN(TRUE);  \n  END_IF;\n  RETURN(?);\n\nEND_FUNCTION;\n\nFUNCTION IfcCorrectUnitAssignment\n  (Units : SET [1:?] OF IfcUnit)\n   : LOGICAL;\n\n  LOCAL\n    NamedUnitNumber    : INTEGER := 0;\n    DerivedUnitNumber  : INTEGER := 0;\n    MonetaryUnitNumber : INTEGER := 0;\n    NamedUnitNames     : SET OF IfcUnitEnum := [];\n    DerivedUnitNames   : SET OF IfcDerivedUnitEnum := [];\n  END_LOCAL;\n\n  NamedUnitNumber    := SIZEOF(QUERY(temp <* Units | ('IFC4X3_ADD2.IFCNAMEDUNIT' IN TYPEOF(temp)) AND NOT(temp\\IfcNamedUnit.UnitType = IfcUnitEnum.USERDEFINED)));\n  DerivedUnitNumber  := SIZEOF(QUERY(temp <* Units | ('IFC4X3_ADD2.IFCDERIVEDUNIT' IN TYPEOF(temp)) AND NOT(temp\\IfcDerivedUnit.UnitType = IfcDerivedUnitEnum.USERDEFINED)));\n  MonetaryUnitNumber := SIZEOF(QUERY(temp <* Units |  'IFC4X3_ADD2.IFCMONETARYUNIT' IN TYPEOF(temp)));\n\n  REPEAT i := 1 TO SIZEOF(Units);\n    IF (('IFC4X3_ADD2.IFCNAMEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i]\\IfcNamedUnit.UnitType = IfcUnitEnum.USERDEFINED)) THEN\n        NamedUnitNames := NamedUnitNames + Units[i]\\IfcNamedUnit.UnitType;\n    END_IF;\n    IF (('IFC4X3_ADD2.IFCDERIVEDUNIT' IN TYPEOF(Units[i])) AND NOT(Units[i]\\IfcDerivedUnit.UnitType = IfcDerivedUnitEnum.USERDEFINED)) THEN\n        DerivedUnitNames := DerivedUnitNames + Units[i]\\IfcDerivedUnit.UnitType;\n    END_IF;\n  END_REPEAT;\n\n  RETURN((SIZEOF(NamedUnitNames) = NamedUnitNumber) AND (SIZEOF(DerivedUnitNames) = DerivedUnitNumber) AND (MonetaryUnitNumber <= 1));\n\nEND_FUNCTION;\n\nFUNCTION IfcCrossProduct\n  (Arg1, Arg2 : IfcDirection) \n    : IfcVector;\nLOCAL\n  Mag : REAL;\n  Res : IfcDirection;\n  V1,V2  : LIST[3:3] OF REAL;\n  Result : IfcVector;\nEND_LOCAL;\n\n  IF (NOT EXISTS (Arg1) OR (Arg1.Dim = 2)) OR (NOT EXISTS (Arg2) OR (Arg2.Dim = 2)) THEN\n    RETURN(?);\n  ELSE\n    BEGIN\n      V1  := IfcNormalise(Arg1)\\IfcDirection.DirectionRatios;\n\n      V2  := IfcNormalise(Arg2)\\IfcDirection.DirectionRatios;\n      Res := IfcRepresentationItem() || IfcGeometricRepresentationItem () \n             || IfcDirection([(V1[2]*V2[3] - V1[3]*V2[2]), (V1[3]*V2[1] - V1[1]*V2[3]), (V1[1]*V2[2] - V1[2]*V2[1])]);\n      Mag := 0.0;\n      REPEAT i := 1 TO 3;\n        Mag := Mag + Res.DirectionRatios[i]*Res.DirectionRatios[i];\n      END_REPEAT;\n      IF (Mag > 0.0) THEN\n        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Res, SQRT(Mag));\n      ELSE\n        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(Arg1, 0.0);\n      END_IF;\n      RETURN(Result);\n    END;\n  END_IF;\n\nEND_FUNCTION;\n\nFUNCTION IfcCurveDim\n(Curve : IfcCurve)\n       : IfcDimensionCount;\n\n  IF ('IFC4X3_ADD2.IFCLINE' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcLine.Pnt.Dim);\n  END_IF;\n  IF ('IFC4X3_ADD2.IFCCONIC' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcConic.Position.Dim);\n  END_IF;\n  IF ('IFC4X3_ADD2.IFCPOLYLINE' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcPolyline.Points[1].Dim);\n  END_IF;\n  IF ('IFC4X3_ADD2.IFCTRIMMEDCURVE' IN TYPEOF(Curve))\n    THEN RETURN(IfcCurveDim(Curve\\IfcTrimmedCurve.BasisCurve));\n  END_IF;\n  IF ('IFC4X3_ADD2.IFCGRADIENTCURVE' IN TYPEOF(Curve))\n    THEN RETURN(3);\n  END_IF;\n  IF ('IFC4X3_ADD2.IFCSEGMENTEDREFERENCECURVE' IN TYPEOF(Curve))\n    THEN RETURN(3);\n  END_IF;\n  IF ('IFC4X3_ADD2.IFCCOMPOSITECURVE' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcCompositeCurve.Segments[1].Dim);\n  END_IF;\n  IF ('IFC4X3_ADD2.IFCBSPLINECURVE' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcBSplineCurve.ControlPointsList[1].Dim);\n  END_IF;\n  IF ('IFC4X3_ADD2.IFCOFFSETCURVE2D' IN TYPEOF(Curve))\n    THEN RETURN(2); \n  END_IF;\n  IF ('IFC4X3_ADD2.IFCOFFSETCURVE3D' IN TYPEOF(Curve))\n    THEN RETURN(3);\n  END_IF;\n  IF ('IFC4X3_ADD2.IFCOFFSETCURVEBYDISTANCES' IN TYPEOF(Curve))\n    THEN RETURN(3);\n  END_IF;\n  IF ('IFC4X3_ADD2.IFCCURVESEGMENT2D' IN TYPEOF(Curve))\n    THEN RETURN(2);\n  END_IF;\n  IF ('IFC4X3_ADD2.IFCPOLYNOMIALCURVE' IN TYPEOF(Curve)) THEN\n    IF ( NOT EXISTS(Curve\\IfcPolynomialCurve.CoefficientsZ) AND (Curve\\IfcPolynomialCurve.Position.Dim = 2 ))\n        THEN RETURN(2);\n    END_IF;\n    RETURN(3);\n  END_IF;\n  IF ('IFC4X3_ADD2.IFCPCURVE' IN TYPEOF(Curve))\n    THEN RETURN(3);\n  END_IF;\n  IF ('IFC4X3_ADD2.IFCINDEXEDPOLYCURVE' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcIndexedPolyCurve.Points.Dim);\n  END_IF;\n  IF ('IFC4X3_ADD2.IFCSPIRAL' IN TYPEOF(Curve))\n    THEN RETURN(Curve\\IfcSpiral.Position.Dim);\n  END_IF;\nRETURN (?);\n\nEND_FUNCTION;\n\nFUNCTION IfcCurveWeightsPositive\n( B: IfcRationalBSplineCurveWithKnots)\n: BOOLEAN;\n\n  LOCAL\n    Result : BOOLEAN := TRUE;\n  END_LOCAL;\n\n  REPEAT i := 0 TO B.UpperIndexOnControlPoints;\n    IF B.Weights[i] <= 0.0  THEN\n      Result := FALSE;\n      RETURN(Result);\n    END_IF;\n  END_REPEAT;\n  RETURN(Result);\n\nEND_FUNCTION;\n\nFUNCTION IfcDeriveDimensionalExponents\n    (UnitElements : SET [1:?] OF IfcDerivedUnitElement)\n    : IfcDimensionalExponents;  \n    LOCAL\n    Result : IfcDimensionalExponents :=\n            IfcDimensionalExponents(0, 0, 0, 0, 0, 0, 0);  \n    END_LOCAL;\n    REPEAT i := LOINDEX(UnitElements) TO HIINDEX(UnitElements);\n        Result.LengthExponent := Result.LengthExponent +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.LengthExponent);\n        Result.MassExponent := Result.MassExponent  +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.MassExponent);\n        Result.TimeExponent := Result.TimeExponent +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.TimeExponent);\n        Result.ElectricCurrentExponent := Result.ElectricCurrentExponent +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.ElectricCurrentExponent);\n        Result.ThermodynamicTemperatureExponent := Result.ThermodynamicTemperatureExponent +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.ThermodynamicTemperatureExponent);\n        Result.AmountOfSubstanceExponent := Result.AmountOfSubstanceExponent +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.AmountOfSubstanceExponent);\n        Result.LuminousIntensityExponent := Result.LuminousIntensityExponent +\n          (UnitElements[i].Exponent *\n           UnitElements[i].Unit.Dimensions.LuminousIntensityExponent);\n    END_REPEAT;  \n    RETURN (Result);\n\nEND_FUNCTION;\n\nFUNCTION IfcDimensionsForSIUnit\n(n : IfcSIUnitName )     : IfcDimensionalExponents;\n  CASE n OF\n    METRE          : RETURN (IfcDimensionalExponents\n                             (1, 0, 0, 0, 0, 0, 0));\n    SQUARE_METRE   : RETURN (IfcDimensionalExponents\n                             (2, 0, 0, 0, 0, 0, 0));\n    CUBIC_METRE    : RETURN (IfcDimensionalExponents\n                             (3, 0, 0, 0, 0, 0, 0));\n    GRAM           : RETURN (IfcDimensionalExponents\n                             (0, 1, 0, 0, 0, 0, 0));\n    SECOND         : RETURN (IfcDimensionalExponents\n                             (0, 0, 1, 0, 0, 0, 0));\n    AMPERE         : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 1, 0, 0, 0));\n    KELVIN         : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 1, 0, 0));\n    MOLE           : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 0, 1, 0));\n    CANDELA        : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 0, 0, 1));\n    RADIAN         : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 0, 0, 0));\n    STERADIAN      : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 0, 0, 0));\n    HERTZ          : RETURN (IfcDimensionalExponents\n                             (0, 0, -1, 0, 0, 0, 0));\n    NEWTON         : RETURN (IfcDimensionalExponents\n                             (1, 1, -2, 0, 0, 0, 0));\n    PASCAL         : RETURN (IfcDimensionalExponents\n                             (-1, 1, -2, 0, 0, 0, 0));\n    JOULE          : RETURN (IfcDimensionalExponents\n                             (2, 1, -2, 0, 0, 0, 0));\n    WATT           : RETURN (IfcDimensionalExponents\n                             (2, 1, -3, 0, 0, 0, 0));\n    COULOMB        : RETURN (IfcDimensionalExponents\n                             (0, 0, 1, 1, 0, 0, 0));\n    VOLT           : RETURN (IfcDimensionalExponents\n                             (2, 1, -3, -1, 0, 0, 0));\n    FARAD          : RETURN (IfcDimensionalExponents\n                             (-2, -1, 4, 2, 0, 0, 0));\n    OHM            : RETURN (IfcDimensionalExponents\n                             (2, 1, -3, -2, 0, 0, 0));\n    SIEMENS        : RETURN (IfcDimensionalExponents\n                             (-2, -1, 3, 2, 0, 0, 0));\n    WEBER          : RETURN (IfcDimensionalExponents\n                             (2, 1, -2, -1, 0, 0, 0));\n    TESLA          : RETURN (IfcDimensionalExponents\n                             (0, 1, -2, -1, 0, 0, 0));\n    HENRY          : RETURN (IfcDimensionalExponents\n                             (2, 1, -2, -2, 0, 0, 0));\n    DEGREE_CELSIUS : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 1, 0, 0));\n    LUMEN          : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 0, 0, 1));\n    LUX            : RETURN (IfcDimensionalExponents\n                             (-2, 0, 0, 0, 0, 0, 1));\n    BECQUEREL      : RETURN (IfcDimensionalExponents\n                             (0, 0, -1, 0, 0, 0, 0));\n    GRAY           : RETURN (IfcDimensionalExponents\n                             (2, 0, -2, 0, 0, 0, 0));\n    SIEVERT        : RETURN (IfcDimensionalExponents\n                             (2, 0, -2, 0, 0, 0, 0));\n    OTHERWISE      : RETURN (IfcDimensionalExponents\n                             (0, 0, 0, 0, 0, 0, 0));\n  END_CASE;\n\nEND_FUNCTION;\n\nFUNCTION IfcDotProduct\n  (Arg1, Arg2 : IfcDirection) \n    : REAL;\nLOCAL\n  Scalar : REAL;\n  Vec1, Vec2 : IfcDirection;\n  Ndim   : INTEGER;\nEND_LOCAL;\n\n  IF NOT EXISTS (Arg1) OR NOT EXISTS (Arg2) THEN\n    Scalar := ?;\n  ELSE\n    IF (Arg1.Dim <> Arg2.Dim) THEN\n      Scalar := ?;\n    ELSE\n      BEGIN\n        Vec1 := IfcNormalise(Arg1);\n        Vec2 := IfcNormalise(Arg2);\n        Ndim := Arg1.Dim;\n        Scalar := 0.0;\n        REPEAT i := 1 TO Ndim;\n          Scalar := Scalar + Vec1.DirectionRatios[i]*Vec2.DirectionRatios[i];\n        END_REPEAT;\n      END;\n    END_IF;\n  END_IF;\n  RETURN (Scalar);\n\nEND_FUNCTION;\n\nFUNCTION IfcFirstProjAxis\n  (ZAxis, Arg : IfcDirection) : IfcDirection;\nLOCAL\n  XAxis : IfcDirection;\n  V     : IfcDirection;\n  Z     : IfcDirection;\n  XVec  : IfcVector;\nEND_LOCAL;\n\n  IF (NOT EXISTS(ZAxis)) THEN\n    RETURN (?) ;\n  ELSE\n    Z := IfcNormalise(ZAxis);\n    IF NOT EXISTS(Arg) THEN\n      IF (Z.DirectionRatios <> [1.0,0.0,0.0]) THEN\n        V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0,0.0]);\n      ELSE\n        V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]);\n      END_IF;\n    ELSE\n      IF (Arg.Dim <> 3) THEN\n        RETURN (?) ;\n      END_IF;\n      IF ((IfcCrossProduct(Arg,Z).Magnitude) = 0.0) THEN\n        RETURN (?);\n      ELSE\n        V := IfcNormalise(Arg);\n      END_IF;\n    END_IF;\n    XVec  := IfcScalarTimesVector(IfcDotProduct(V, Z), Z);\n    XAxis := IfcVectorDifference(V, XVec).Orientation;\n    XAxis := IfcNormalise(XAxis);\n  END_IF;\n  RETURN(XAxis);\n\nEND_FUNCTION;\n\nFUNCTION IfcGetBasisSurface\n(C : IfcCurveOnSurface) : SET[0:2] OF IfcSurface;\n\n  LOCAL\n    Surfs : SET[0:2] OF IfcSurface;\n    N : INTEGER;\n  END_LOCAL;\n\n  Surfs := [];\n  IF 'IFC4X3_ADD2.IFCPCURVE' IN TYPEOF (C) THEN\n    Surfs := [C\\IfcPCurve.BasisSurface];\n  ELSE\n    IF 'IFC4X3_ADD2.IFCSURFACECURVE' IN TYPEOF (C) THEN\n      N := SIZEOF(C\\IfcSurfaceCurve.AssociatedGeometry);\n      REPEAT i := 1 TO N;\n      Surfs := Surfs + IfcAssociatedSurface(C\\IfcSurfaceCurve.AssociatedGeometry[i]);\n      END_REPEAT;\n    END_IF;\n  END_IF;\n  IF 'IFC4X3_ADD2.IFCCOMPOSITECURVEONSURFACE' IN TYPEOF (C) THEN\n\n    (* For an IfcCompositeCurveOnSurface the BasisSurface is the intersection of the BasisSurface of all the segments. *)\n\n    N := SIZEOF(C\\IfcCompositeCurve.Segments);\n    \n    IF ('IFC4X3_ADD2.IFCCURVESEGMENT' IN TYPEOF(C\\IfcCompositeCurve.Segments[1])) THEN\n      Surfs := IfcGetBasisSurface(C\\IfcCompositeCurve.Segments[1]\\IfcCurveSegment.ParentCurve);\n    END_IF;\n    IF ('IFC4X3_ADD2.IFCCOMPOSITECURVESEGMENT' IN TYPEOF(C\\IfcCompositeCurve.Segments[1])) THEN\n      Surfs := IfcGetBasisSurface(C\\IfcCompositeCurve.Segments[1]\\IfcCompositeCurveSegment.ParentCurve);\n    END_IF;\n    \n    IF N > 1 THEN\n      REPEAT i := 2 TO N;       \n        IF ('IFC4X3_ADD2.IFCCURVESEGMENT' IN TYPEOF(C\\IfcCompositeCurve.Segments[i])) THEN\n          Surfs := Surfs * IfcGetBasisSurface(C\\IfcCompositeCurve.Segments[i]\\IfcCurveSegment.ParentCurve);\n        END_IF;\n        IF ('IFC4X3_ADD2.IFCCOMPOSITECURVESEGMENT' IN TYPEOF(C\\IfcCompositeCurve.Segments[i])) THEN\n          Surfs := Surfs * IfcGetBasisSurface(C\\IfcCompositeCurve.Segments[i]\\IfcCompositeCurveSegment.ParentCurve);\n        END_IF;\n      END_REPEAT;\n    END_IF;\n  END_IF;\n  RETURN(Surfs);\n\nEND_FUNCTION;\n\nFUNCTION IfcListToArray\n(Lis : LIST [0:?] OF GENERIC : T;\n       Low,U : INTEGER) : ARRAY OF GENERIC : T;\n   LOCAL\n     N   : INTEGER;\n     Res : ARRAY [Low:U] OF GENERIC : T;\n   END_LOCAL;\n      \n   N := SIZEOF(Lis);\n   IF (N <> (U-Low +1)) THEN\n     RETURN(?);\n   ELSE\n     Res := [Lis[1] : N];\n     REPEAT i := 2 TO N;\n       Res[Low+i-1] := Lis[i];\n     END_REPEAT;\n     RETURN(Res);\n   END_IF;\n\nEND_FUNCTION;\n\nFUNCTION IfcLoopHeadToTail\n(ALoop : IfcEdgeLoop) : LOGICAL;\n   LOCAL\n     N : INTEGER;\n     P : LOGICAL := TRUE;\n   END_LOCAL;\n     \n     N := SIZEOF (ALoop.EdgeList);\n     REPEAT i := 2 TO N;\n       P := P AND (ALoop.EdgeList[i-1].EdgeEnd :=:\n                   ALoop.EdgeList[i].EdgeStart);\n     END_REPEAT;     \n     RETURN (P);\n\nEND_FUNCTION;\n\nFUNCTION IfcMakeArrayOfArray\n(Lis : LIST[1:?] OF LIST [1:?] OF GENERIC : T;\n Low1, U1, Low2, U2 : INTEGER):\nARRAY [Low1:U1] OF ARRAY [Low2:U2] OF GENERIC : T;\n\n  LOCAL\n    Res : ARRAY[Low1:U1] OF ARRAY [Low2:U2] OF GENERIC : T;\n  END_LOCAL;\n\n  (* Check input dimensions for consistency *)\n  IF (U1-Low1+1) <> SIZEOF(Lis) THEN\n    RETURN (?);\n  END_IF;\n  IF (U2 - Low2 + 1 ) <> SIZEOF(Lis[1]) THEN\n    RETURN (?) ;\n  END_IF;\n\n  (* Initialise Res with values from Lis[1] *)\n  Res := [IfcListToArray(Lis[1], Low2, U2) : (U1-Low1 + 1)];\n  REPEAT i := 2 TO HIINDEX(Lis);\n    IF (U2-Low2+1) <> SIZEOF(Lis[i]) THEN\n      RETURN (?);\n    END_IF;\n    Res[Low1+i-1] := IfcListToArray(Lis[i], Low2, U2);\n  END_REPEAT;\n  RETURN (Res);\n\nEND_FUNCTION;\n\nFUNCTION IfcMlsTotalThickness\n(LayerSet : IfcMaterialLayerSet) : IfcLengthMeasure;\n  LOCAL\n    Max : IfcLengthMeasure := LayerSet.MaterialLayers[1].LayerThickness;    \n  END_LOCAL;\n\n  IF SIZEOF(LayerSet.MaterialLayers) > 1 THEN\n    REPEAT i := 2 TO HIINDEX(LayerSet.MaterialLayers);\n       Max := Max + LayerSet.MaterialLayers[i].LayerThickness;\n    END_REPEAT;\n  END_IF;\n  RETURN (Max);\n\nEND_FUNCTION;\n\nFUNCTION IfcNormalise\n  (Arg : IfcVectorOrDirection) \n    : IfcVectorOrDirection;\nLOCAL\n  Ndim : INTEGER;\n  V    : IfcDirection\n         := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]); \n  Vec  : IfcVector \n         := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector (\n            IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.,0.]), 1.);\n  Mag  : REAL;\n  Result : IfcVectorOrDirection\n         := V;\nEND_LOCAL;\n\n  IF NOT EXISTS (Arg) THEN\n    RETURN (?);\n  ELSE\n    IF 'IFC4X3_ADD2.IFCVECTOR' IN TYPEOF(Arg) THEN\n      BEGIN\n        Ndim := Arg\\IfcVector.Dim;\n V.DirectionRatios := Arg\\IfcVector.Orientation.DirectionRatios;\n        Vec.Magnitude := Arg\\IfcVector.Magnitude;\n Vec.Orientation := V;\n        IF Arg\\IfcVector.Magnitude = 0.0 THEN\n          RETURN(?);\n        ELSE\n          Vec.Magnitude := 1.0;\n        END_IF;\n      END;\n    ELSE\n      BEGIN\n        Ndim := Arg\\IfcDirection.Dim;\n        V.DirectionRatios := Arg\\IfcDirection.DirectionRatios;\n      END;\n    END_IF;\n\n    Mag := 0.0;\n      REPEAT i := 1 TO Ndim;\n        Mag := Mag + V.DirectionRatios[i]*V.DirectionRatios[i];\n      END_REPEAT;\n    IF Mag > 0.0 THEN\n      Mag := SQRT(Mag);\n      REPEAT i := 1 TO Ndim;\n        V.DirectionRatios[i] := V.DirectionRatios[i]/Mag;\n      END_REPEAT;\n      IF 'IFC4X3_ADD2.IFCVECTOR' IN TYPEOF(Arg) THEN\n        Vec.Orientation := V;\n        Result := Vec;\n      ELSE\n        Result := V;\n      END_IF;\n    ELSE\n      RETURN(?);\n    END_IF;\n  END_IF;\n  RETURN (Result);\n\nEND_FUNCTION;\n\nFUNCTION IfcOrthogonalComplement\n  (Vec : IfcDirection) \n    : IfcDirection;\nLOCAL\n  Result : IfcDirection ;\nEND_LOCAL;\n  IF NOT EXISTS (Vec) OR (Vec.Dim <> 2) THEN\n    RETURN(?);\n  ELSE\n    Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([-Vec.DirectionRatios[2], Vec.DirectionRatios[1]]);\n    RETURN(Result);\n  END_IF;\n\nEND_FUNCTION;\n\nFUNCTION IfcPathHeadToTail\n(APath : IfcPath) : LOGICAL;\n   LOCAL\n     N : INTEGER := 0;\n     P : LOGICAL := UNKNOWN;\n   END_LOCAL;\n     N := SIZEOF (APath.EdgeList);\n   REPEAT i := 2 TO N;\n      P := P AND (APath.EdgeList[i-1].EdgeEnd :=:\n                  APath.EdgeList[i].EdgeStart);\n   END_REPEAT;\n   RETURN (P);\n\nEND_FUNCTION;\n\nFUNCTION IfcPointDim\n (Point : IfcPoint)\n : IfcDimensionCount;\n\n  IF ('IFC4X3_ADD2.IFCCARTESIANPOINT' IN TYPEOF(Point))\n    THEN RETURN(HIINDEX(Point\\IfcCartesianPoint.Coordinates));\n  END_IF;\n  IF ('IFC4X3_ADD2.IFCPOINTBYDISTANCEEXPRESSION' IN TYPEOF(Point))\n    THEN RETURN(Point\\IfcPointByDistanceExpression.BasisCurve.Dim);\n  END_IF;\n  IF ('IFC4X3_ADD2.IFCPOINTONCURVE' IN TYPEOF(Point))\n    THEN RETURN(Point\\IfcPointOnCurve.BasisCurve.Dim);\n  END_IF;\n  IF ('IFC4X3_ADD2.IFCPOINTONSURFACE' IN TYPEOF(Point))\n    THEN RETURN(Point\\IfcPointOnSurface.BasisSurface.Dim);\n  END_IF;\n  RETURN (?);\n\nEND_FUNCTION;\n\nFUNCTION IfcPointListDim\n(PointList : IfcCartesianPointList)\n           : IfcDimensionCount;\n\n  IF ('IFC4X3_ADD2.IFCCARTESIANPOINTLIST2D' IN TYPEOF(PointList))\n    THEN RETURN(2);\n  END_IF;     \n  IF ('IFC4X3_ADD2.IFCCARTESIANPOINTLIST3D' IN TYPEOF(PointList))\n    THEN RETURN(3);\n  END_IF;     \n  RETURN (?);\n\nEND_FUNCTION;\n\nFUNCTION IfcSameAxis2Placement\n  (ap1, ap2 : IfcAxis2Placement; Epsilon : REAL)\n  : LOGICAL ;\n\n  RETURN (IfcSameDirection(ap1.P[1],ap2.P[1],Epsilon) AND\n          IfcSameDirection(ap1.P[2],ap2.P[2],Epsilon) AND\n          IfcSameCartesianPoint(ap1.Location,ap2.Location,Epsilon));\n\nEND_FUNCTION;\n\nFUNCTION IfcSameCartesianPoint\n (cp1, cp2 : IfcCartesianPoint; Epsilon : REAL)\n : LOGICAL;\n  \n  LOCAL\n    cp1x : REAL := cp1.Coordinates[1];\n    cp1y : REAL := cp1.Coordinates[2];\n    cp1z : REAL := 0;\n    cp2x : REAL := cp2.Coordinates[1];\n    cp2y : REAL := cp2.Coordinates[2];\n    cp2z : REAL := 0;\n  END_LOCAL;\n\n  IF (SIZEOF(cp1.Coordinates) > 2) THEN\n    cp1z := cp1.Coordinates[3];\n  END_IF;\n\n  IF (SIZEOF(cp2.Coordinates) > 2) THEN\n    cp2z := cp2.Coordinates[3];\n  END_IF;\n\n  RETURN (IfcSameValue(cp1x,cp2x,Epsilon) AND\n          IfcSameValue(cp1y,cp2y,Epsilon) AND\n          IfcSameValue(cp1z,cp2z,Epsilon));\n\nEND_FUNCTION;\n\nFUNCTION IfcSameDirection\n (dir1, dir2 : IfcDirection; Epsilon : REAL)\n : LOGICAL;\n  LOCAL\n    dir1x : REAL := dir1.DirectionRatios[1];\n    dir1y : REAL := dir1.DirectionRatios[2];\n    dir1z : REAL := 0;\n    dir2x : REAL := dir2.DirectionRatios[1];\n    dir2y : REAL := dir2.DirectionRatios[2];\n    dir2z : REAL := 0;\n  END_LOCAL;\n\n  IF (SIZEOF(dir1.DirectionRatios) > 2) THEN\n    dir1z := dir1.DirectionRatios[3];\n  END_IF;\n\n  IF (SIZEOF(dir2.DirectionRatios) > 2) THEN\n    dir2z := dir2.DirectionRatios[3];\n  END_IF;\n  \n  RETURN (IfcSameValue(dir1x,dir2x,Epsilon) AND\n          IfcSameValue(dir1y,dir2y,Epsilon) AND\n          IfcSameValue(dir1z,dir2z,Epsilon));\n\nEND_FUNCTION;\n\nFUNCTION IfcSameValidPrecision\n   (Epsilon1, Epsilon2 : REAL) : LOGICAL ;\n  LOCAL\n    ValidEps1, ValidEps2 : REAL;\n    DefaultEps           : REAL := 0.000001;\n    DerivationOfEps      : REAL := 1.001;\n    UpperEps             : REAL := 1.0;\n  END_LOCAL;\n  \n    ValidEps1 := NVL(Epsilon1, DefaultEps);\n    ValidEps2 := NVL(Epsilon2, DefaultEps);\n    RETURN ((0.0 < ValidEps1) AND (ValidEps1 <= (DerivationOfEps * ValidEps2)) AND \n            (ValidEps2 <= (DerivationOfEps * ValidEps1)) AND (ValidEps2 < UpperEps));\n\nEND_FUNCTION;\n\nFUNCTION IfcSameValue\n (Value1, Value2 : REAL; Epsilon : REAL)\n : LOGICAL;\n  LOCAL\n    ValidEps    : REAL;\n    DefaultEps  : REAL := 0.000001;\n  END_LOCAL;\n  \n  ValidEps := NVL(Epsilon, DefaultEps);\n  RETURN ((Value1 + ValidEps > Value2) AND (Value1 < Value2 + ValidEps));\n\nEND_FUNCTION;\n\nFUNCTION IfcScalarTimesVector\n  (Scalar : REAL; Vec : IfcVectorOrDirection)\n    : IfcVector;\nLOCAL\n  V : IfcDirection;\n  Mag : REAL;\n  Result : IfcVector;\nEND_LOCAL;\n\n  IF NOT EXISTS (Scalar) OR NOT EXISTS (Vec) THEN\n    RETURN (?) ;\n  ELSE\n    IF 'IFC4X3_ADD2.IFCVECTOR' IN TYPEOF (Vec) THEN\n      V := Vec\\IfcVector.Orientation;\n      Mag := Scalar * Vec\\IfcVector.Magnitude;\n    ELSE\n      V := Vec;\n      Mag := Scalar;\n    END_IF;\n    IF (Mag < 0.0 ) THEN\n      REPEAT i := 1 TO SIZEOF(V.DirectionRatios);\n        V.DirectionRatios[i] := -V.DirectionRatios[i];\n      END_REPEAT;\n      Mag := -Mag;\n    END_IF;\n    Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector(IfcNormalise(V), Mag);\n  END_IF;\n  RETURN (Result);\n\nEND_FUNCTION;\n\nFUNCTION IfcSecondProjAxis\n  (ZAxis, XAxis, Arg: IfcDirection) \n    : IfcDirection;\nLOCAL\n  YAxis : IfcVector;\n  V     : IfcDirection;\n  Temp  : IfcVector;\nEND_LOCAL;\n\n  IF NOT EXISTS(Arg) THEN\n    V := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,1.0,0.0]);\n  ELSE\n    V := Arg;\n  END_IF;\n  Temp  := IfcScalarTimesVector(IfcDotProduct(V, ZAxis), ZAxis);\n  YAxis := IfcVectorDifference(V, Temp);\n  Temp  := IfcScalarTimesVector(IfcDotProduct(V, XAxis), XAxis);\n  YAxis := IfcVectorDifference(YAxis, Temp);\n  YAxis := IfcNormalise(YAxis);\n  RETURN(YAxis.Orientation);\n\nEND_FUNCTION;\n\nFUNCTION IfcSegmentDim\n (Segment : IfcSegment)\n : IfcDimensionCount;\n\n  IF ('IFC4X3_ADD2.IFCCURVESEGMENT' IN TYPEOF(Segment))\n    THEN RETURN(Segment\\IfcCurveSegment.ParentCurve.Dim);\n  END_IF;\n  IF ('IFC4X3_ADD2.IFCCOMPOSITECURVESEGMENT' IN TYPEOF(Segment))\n    THEN RETURN(Segment\\IfcCompositeCurveSegment.ParentCurve.Dim);\n  END_IF;\n  RETURN (?);\n\nEND_FUNCTION;\n\nFUNCTION IfcShapeRepresentationTypes\n(RepType : IfcLabel; Items : SET OF IfcRepresentationItem) : LOGICAL;\n    \n    LOCAL\n      Count : INTEGER := 0;\n    END_LOCAL;\n\n    CASE RepType OF \n    'Point' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCPOINT' IN TYPEOF(temp))\n                 OR ('IFC4X3_ADD2.IFCCARTESIANPOINTLIST' IN TYPEOF(temp))));\n      END;\n\n    'PointCloud' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCCARTESIANPOINTLIST3D' IN TYPEOF(temp))));\n      END;\n\n    'Curve' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCCURVE' IN TYPEOF(temp))));\n      END;\n\n    'Curve2D' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCCURVE' IN TYPEOF(temp)) \n                 AND (temp\\IfcCurve.Dim = 2)));\n      END;\n\n    'Curve3D' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCCURVE' IN TYPEOF(temp)) \n                 AND (temp\\IfcCurve.Dim = 3)));\n      END;\n\n    'Segment' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCSEGMENT' IN TYPEOF(temp))));\n      END;\n\n    'Surface' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCSURFACE' IN TYPEOF(temp))));\n      END;\n\n    'Surface2D' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCSURFACE' IN TYPEOF(temp)) \n                 AND (temp\\IfcSurface.Dim = 2)));\n      END;\n\n    'Surface3D' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCSURFACE' IN TYPEOF(temp)) \n                 AND (temp\\IfcSurface.Dim = 3)));\n      END;\n\n    'SectionedSurface' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | 'IFC4X3_ADD2.IFCSECTIONEDSURFACE' IN TYPEOF(temp)));\n      END;\n\n    'FillArea' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCANNOTATIONFILLAREA' IN TYPEOF(temp))));\n      END;\n\n    'Text' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCTEXTLITERAL' IN TYPEOF(temp))));\n      END;\n\n    'AdvancedSurface' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | 'IFC4X3_ADD2.IFCBSPLINESURFACE' IN TYPEOF(temp)));\n      END;\n\n    'Annotation2D' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | (\n                  SIZEOF(TYPEOF(temp) * [\n                   'IFC4X3_ADD2.IFCPOINT',\n                   'IFC4X3_ADD2.IFCCURVE',\n                   'IFC4X3_ADD2.IFCGEOMETRICCURVESET',\n                   'IFC4X3_ADD2.IFCANNOTATIONFILLAREA',\n                   'IFC4X3_ADD2.IFCTEXTLITERAL']) = 1)\n                 ));\n      END;\n\n    'GeometricSet' : \n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCGEOMETRICSET' IN TYPEOF(temp))\n                 OR ('IFC4X3_ADD2.IFCPOINT' IN TYPEOF(temp))\n                 OR ('IFC4X3_ADD2.IFCCURVE' IN TYPEOF(temp))\n                 OR ('IFC4X3_ADD2.IFCSURFACE' IN TYPEOF(temp))));\n      END;\n\n    'GeometricCurveSet' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCGEOMETRICCURVESET' IN TYPEOF(temp))\n                 OR ('IFC4X3_ADD2.IFCGEOMETRICSET' IN TYPEOF(temp))\n                 OR ('IFC4X3_ADD2.IFCPOINT' IN TYPEOF(temp))\n                 OR ('IFC4X3_ADD2.IFCCURVE' IN TYPEOF(temp))));\n         REPEAT i:=1 TO HIINDEX(Items);  \n           IF ('IFC4X3_ADD2.IFCGEOMETRICSET' IN TYPEOF(Items[i]))\n           THEN\n             IF (SIZEOF(QUERY(temp <* Items[i]\\IfcGeometricSet.Elements | 'IFC4X3_ADD2.IFCSURFACE' IN TYPEOF(temp))) > 0)\n             THEN\n               Count := Count - 1;\n             END_IF;\n           END_IF;\n         END_REPEAT;\n      END;\n\n    'Tessellation' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | 'IFC4X3_ADD2.IFCTESSELLATEDITEM' IN TYPEOF(temp)));\n      END;\n\n    'SurfaceOrSolidModel' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                   'IFC4X3_ADD2.IFCTESSELLATEDITEM',\n                   'IFC4X3_ADD2.IFCSHELLBASEDSURFACEMODEL',\n                   'IFC4X3_ADD2.IFCFACEBASEDSURFACEMODEL',\n                   'IFC4X3_ADD2.IFCSOLIDMODEL'] * TYPEOF(temp)) >= 1\n                 ));      \n      END;\n\n    'SurfaceModel' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                   'IFC4X3_ADD2.IFCTESSELLATEDITEM',\n                   'IFC4X3_ADD2.IFCSHELLBASEDSURFACEMODEL',\n                   'IFC4X3_ADD2.IFCFACEBASEDSURFACEMODEL'] * TYPEOF(temp)) >= 1\n                 ));      \n      END;\n\n    'SolidModel' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCSOLIDMODEL' IN TYPEOF(temp))));            \n      END;\n\n    'SweptSolid' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | (SIZEOF([\n                   'IFC4X3_ADD2.IFCEXTRUDEDAREASOLID',\n                   'IFC4X3_ADD2.IFCREVOLVEDAREASOLID'] * TYPEOF(temp)) >= 1\n                   ) AND (SIZEOF([\n                   'IFC4X3_ADD2.IFCEXTRUDEDAREASOLIDTAPERED',\n                   'IFC4X3_ADD2.IFCREVOLVEDAREASOLIDTAPERED'] * TYPEOF(temp)) = 0\n                   )\n                 ));                             \n      END;\n\n    'AdvancedSweptSolid' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                   'IFC4X3_ADD2.IFCSWEPTAREASOLID',\n                   'IFC4X3_ADD2.IFCSWEPTDISKSOLID',\n                   'IFC4X3_ADD2.IFCSECTIONEDSOLIDHORIZONTAL'] *  TYPEOF(temp)) >= 1\n                 ));      \n      END;\n\n    'CSG' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                   'IFC4X3_ADD2.IFCBOOLEANRESULT',\n                   'IFC4X3_ADD2.IFCCSGPRIMITIVE3D',\n                   'IFC4X3_ADD2.IFCCSGSOLID'] *  TYPEOF(temp)) >= 1\n                 ));            \n      END;\n\n    'Clipping' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | SIZEOF([\n                   'IFC4X3_ADD2.IFCCSGSOLID',\n                   'IFC4X3_ADD2.IFCBOOLEANCLIPPINGRESULT'] * TYPEOF(temp)) >= 1\n                 )); \n      END;\n\n    'Brep' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCFACETEDBREP' IN TYPEOF(temp))));      \n      END;\n\n    'AdvancedBrep' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCMANIFOLDSOLIDBREP' IN TYPEOF(temp))));      \n      END;\n\n    'BoundingBox' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCBOUNDINGBOX' IN TYPEOF(temp))));\n        IF (SIZEOF(Items) > 1)\n        THEN\n          Count := 0;\n        END_IF;   \n      END;\n\n    'SectionedSpine' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCSECTIONEDSPINE' IN TYPEOF(temp))));      \n      END;\n\n    'LightSource' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCLIGHTSOURCE' IN TYPEOF(temp))));      \n      END;\n\n    'MappedRepresentation' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_ADD2.IFCMAPPEDITEM' IN TYPEOF(temp))));  \n      END;\n\n     OTHERWISE : RETURN(?);\n    END_CASE;\n    RETURN (Count = SIZEOF(Items));\n\nEND_FUNCTION;\n\nFUNCTION IfcSurfaceWeightsPositive\n( B: IfcRationalBSplineSurfaceWithKnots) \n: BOOLEAN; \n\n  LOCAL \n    Result : BOOLEAN := TRUE; \n    Weights : ARRAY [ 0 : B\\IfcBSplineSurface.UUpper ] OF ARRAY [ 0 : B\\IfcBSplineSurface.VUpper ] OF REAL := B.Weights; \n  END_LOCAL; \n\n  REPEAT i := 0 TO B\\IfcBSplineSurface.UUpper; \n    REPEAT j := 0 TO B\\IfcBSplineSurface.VUpper; \n      IF (Weights[i][j] <= 0.0) THEN \n        Result := FALSE; \n        RETURN(Result); \n      END_IF; \n    END_REPEAT; \n  END_REPEAT; \n  RETURN(Result);\n\nEND_FUNCTION;\n\nFUNCTION IfcTaperedSweptAreaProfiles\n(StartArea, EndArea : IfcProfileDef)\n : LOGICAL;\n\nLOCAL\n   Result : LOGICAL := FALSE;\nEND_LOCAL;\n   \nIF ('IFC4X3_ADD2.IFCPARAMETERIZEDPROFILEDEF' IN TYPEOF(StartArea)) THEN\n   IF ('IFC4X3_ADD2.IFCDERIVEDPROFILEDEF' IN TYPEOF(EndArea)) THEN\n      Result := (StartArea :=: EndArea\\IfcDerivedProfileDef.ParentProfile);\n   ELSE\n      Result := (TYPEOF(StartArea) = TYPEOF(EndArea));\n   END_IF;\nELSE\n   IF ('IFC4X3_ADD2.IFCDERIVEDPROFILEDEF' IN TYPEOF(EndArea)) THEN\n      Result := (StartArea :=: EndArea\\IfcDerivedProfileDef.ParentProfile);\n   ELSE\n      Result := FALSE;\n   END_IF;\nEND_IF;\n\nRETURN(Result);\n\nEND_FUNCTION;\n\nFUNCTION IfcTopologyRepresentationTypes\n(RepType : IfcLabel; Items : SET OF IfcRepresentationItem) : LOGICAL;\n    \n    LOCAL\n      Count : INTEGER := 0;\n    END_LOCAL;\n\n    CASE RepType OF \n    'Vertex' :\n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | \n                  ('IFC4X3_ADD2.IFCVERTEX' IN TYPEOF(temp))));\n      END;\n    'Edge' : \n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | \n                  ('IFC4X3_ADD2.IFCEDGE' IN TYPEOF(temp))));\n      END;\n    'Path' : \n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | \n                  ('IFC4X3_ADD2.IFCPATH' IN TYPEOF(temp))));\n      END;\n    'Face' : \n      BEGIN \n        Count := SIZEOF(QUERY(temp <* Items | \n                  ('IFC4X3_ADD2.IFCFACE' IN TYPEOF(temp))));\n      END;\n    'Shell' :\n      BEGIN\n        Count := SIZEOF(QUERY(temp <* Items | \n                  ('IFC4X3_ADD2.IFCOPENSHELL' IN TYPEOF(temp))\n                    OR ('IFC4X3_ADD2.IFCCLOSEDSHELL' IN TYPEOF(temp))));\n      END;\n    'Undefined': RETURN(TRUE);\n     OTHERWISE : RETURN(?);\n    END_CASE;\n    RETURN (Count = SIZEOF(Items));\n\nEND_FUNCTION;\n\nFUNCTION IfcUniqueDefinitionNames\n(Relations : SET [1:?] OF IfcRelDefinesByProperties)\n:LOGICAL;\n\nLOCAL\n  Definition : IfcPropertySetDefinitionSelect;\n  DefinitionSet : IfcPropertySetDefinitionSet;\n  Properties : SET OF IfcPropertySetDefinition := [];\n  Result : LOGICAL;\nEND_LOCAL;\n\nIF SIZEOF(Relations) = 0 THEN\n  RETURN(TRUE);\nEND_IF;\n\nREPEAT i:=1 TO HIINDEX(Relations);\n  Definition := Relations[i].RelatingPropertyDefinition;\n  IF 'IFC4X3_ADD2.IFCPROPERTYSETDEFINITION' IN TYPEOF(Definition) THEN\n    Properties := Properties + Definition;\n  ELSE \n    IF 'IFC4X3_ADD2.IFCPROPERTYSETDEFINITIONSET' IN TYPEOF(Definition) THEN\n      BEGIN\n        DefinitionSet := Definition;\n        REPEAT j:= 1 TO HIINDEX(DefinitionSet);\n          Properties := Properties + DefinitionSet[j];\n        END_REPEAT;\n      END;\n END_IF;\n  END_IF;\nEND_REPEAT;\n\nResult := IfcUniquePropertySetNames(Properties);\nRETURN (Result);\n\nEND_FUNCTION;\n\nFUNCTION IfcUniquePropertyName\n(Properties : SET [1:?] OF IfcProperty)\n :LOGICAL;\n\n LOCAL\n   Names : SET OF IfcIdentifier := [];\n END_LOCAL;\n\n REPEAT i:=1 TO HIINDEX(Properties);\n   Names := Names + Properties[i].Name;\n END_REPEAT;\n\n RETURN (SIZEOF(Names) = SIZEOF(Properties));\n\nEND_FUNCTION;\n\nFUNCTION IfcUniquePropertySetNames\n(Properties : SET [1:?] OF IfcPropertySetDefinition)\n:LOGICAL;\n\nLOCAL\n  Names : SET OF IfcLabel := [];\n  Unnamed : INTEGER := 0;\nEND_LOCAL;\n\nREPEAT i:=1 TO HIINDEX(Properties);\n  IF 'IFC4X3_ADD2.IFCPROPERTYSET' IN TYPEOF(Properties[i]) THEN\n    Names := Names + Properties[i]\\IfcRoot.Name;\n  ELSE\n    Unnamed := Unnamed + 1;\n  END_IF;\nEND_REPEAT;\n\nRETURN (SIZEOF(Names) + Unnamed = SIZEOF(Properties));\n\nEND_FUNCTION;\n\nFUNCTION IfcUniquePropertyTemplateNames\n(Properties : SET [1:?] OF IfcPropertyTemplate)\n:LOGICAL;\n\nLOCAL\n  Names : SET OF IfcLabel := [];\nEND_LOCAL;\n\nREPEAT i:=1 TO HIINDEX(Properties);\n  Names := Names + Properties[i].Name;\nEND_REPEAT;\nRETURN (SIZEOF(Names) = SIZEOF(Properties));\n\nEND_FUNCTION;\n\nFUNCTION IfcUniqueQuantityNames\n(Properties : SET [1:?] OF IfcPhysicalQuantity)\n:LOGICAL;\n\nLOCAL\n  Names : SET OF IfcLabel := [];\nEND_LOCAL;\n\nREPEAT i:=1 TO HIINDEX(Properties);\n  Names := Names + Properties[i].Name;\nEND_REPEAT;\nRETURN (SIZEOF(Names) = SIZEOF(Properties));\n\nEND_FUNCTION;\n\nFUNCTION IfcVectorDifference\n  (Arg1, Arg2 : IfcVectorOrDirection)\n    : IfcVector;\nLOCAL\n  Result : IfcVector;\n  Res, Vec1, Vec2 : IfcDirection;\n  Mag, Mag1, Mag2 : REAL;\n  Ndim : INTEGER;\nEND_LOCAL;\n\n  IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN\n    RETURN (?) ;\n  ELSE\n    BEGIN\n      IF 'IFC4X3_ADD2.IFCVECTOR' IN TYPEOF(Arg1) THEN\n        Mag1 := Arg1\\IfcVector.Magnitude;\n        Vec1 := Arg1\\IfcVector.Orientation;\n      ELSE\n        Mag1 := 1.0;\n        Vec1 := Arg1;\n      END_IF;\n      IF 'IFC4X3_ADD2.IFCVECTOR' IN TYPEOF(Arg2) THEN\n        Mag2 := Arg2\\IfcVector.Magnitude;\n        Vec2 := Arg2\\IfcVector.Orientation;\n      ELSE\n        Mag2 := 1.0;\n        Vec2 := Arg2;\n      END_IF;\n      Vec1 := IfcNormalise (Vec1);\n      Vec2 := IfcNormalise (Vec2);\n      Ndim := SIZEOF(Vec1.DirectionRatios);\n      Mag  := 0.0;\n      Res  := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0:Ndim]);\n\n      REPEAT i := 1 TO Ndim;\n        Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] - Mag2*Vec2.DirectionRatios[i];\n        Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]);\n      END_REPEAT;\n\n      IF (Mag > 0.0 ) THEN\n        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag));\n      ELSE\n        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0);\n      END_IF;\n    END;\n  END_IF;\n  RETURN (Result);\n\nEND_FUNCTION;\n\nFUNCTION IfcVectorSum\n  (Arg1, Arg2 : IfcVectorOrDirection) \n    : IfcVector;\nLOCAL\n  Result : IfcVector;\n  Res, Vec1, Vec2 : IfcDirection;\n  Mag, Mag1, Mag2 : REAL;\n  Ndim : INTEGER;\nEND_LOCAL;\n\n  IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN\n    RETURN (?) ;\n  ELSE\n    BEGIN\n      IF 'IFC4X3_ADD2.IFCVECTOR' IN TYPEOF(Arg1) THEN\n        Mag1 := Arg1\\IfcVector.Magnitude;\n        Vec1 := Arg1\\IfcVector.Orientation;\n      ELSE\n        Mag1 := 1.0;\n        Vec1 := Arg1;\n      END_IF;\n      IF 'IFC4X3_ADD2.IFCVECTOR' IN TYPEOF(Arg2) THEN\n        Mag2 := Arg2\\IfcVector.Magnitude;\n        Vec2 := Arg2\\IfcVector.Orientation;\n      ELSE\n        Mag2 := 1.0;\n        Vec2 := Arg2;\n      END_IF;\n      Vec1 := IfcNormalise (Vec1);\n      Vec2 := IfcNormalise (Vec2);\n      Ndim := SIZEOF(Vec1.DirectionRatios);\n      Mag  := 0.0;\n      Res  := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0:Ndim]);\n\n      REPEAT i := 1 TO Ndim;\n        Res.DirectionRatios[i] := Mag1*Vec1.DirectionRatios[i] + Mag2*Vec2.DirectionRatios[i];\n        Mag := Mag + (Res.DirectionRatios[i]*Res.DirectionRatios[i]);\n      END_REPEAT;\n\n      IF (Mag > 0.0 ) THEN\n        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Res, SQRT(Mag));\n      ELSE\n        Result := IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcVector( Vec1, 0.0);\n      END_IF;\n    END;\n  END_IF;\n  RETURN (Result);\n\nEND_FUNCTION;\n\nRULE IfcRepresentationContextSameWCS FOR\n (IfcGeometricRepresentationContext);\nLOCAL\n  IsDifferent  : LOGICAL := FALSE;\nEND_LOCAL;\n  IF (SIZEOF(IfcGeometricRepresentationContext) > 1)\n  THEN\n    REPEAT i := 2 TO HIINDEX(IfcGeometricRepresentationContext);\n      IF (IfcGeometricRepresentationContext[1].WorldCoordinateSystem :<>: IfcGeometricRepresentationContext[i].WorldCoordinateSystem)\n      THEN\n        IsDifferent := (NOT(IfcSameValidPrecision(IfcGeometricRepresentationContext[1].Precision,\n                                                  IfcGeometricRepresentationContext[i].Precision)))\n                    OR (NOT(IfcSameAxis2Placement(IfcGeometricRepresentationContext[1].WorldCoordinateSystem,\n                                                  IfcGeometricRepresentationContext[i].WorldCoordinateSystem,\n                                                  IfcGeometricRepresentationContext[1].Precision)));\n        IF (IsDifferent = TRUE) THEN\n          ESCAPE;\n        END_IF;\n      END_IF;\n    END_REPEAT;\n  END_IF;\n\n    WHERE\n      WR1 : IsDifferent = FALSE;\nEND_RULE;\n\nRULE IfcSingleProjectInstance FOR\n (IfcProject);\n\n    WHERE\n      WR1 : SIZEOF(IfcProject) <= 1;\nEND_RULE;\n\nEND_SCHEMA;\n"
  },
  {
    "path": "Source/RevitIFCTools/IFC4X3_ADD2.xsd",
    "content": "<?xml version='1.0' encoding='ASCII'?>\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:ifc=\"https://standards.buildingsmart.org/IFC/RELEASE/IFC4/3/ADD2\" targetNamespace=\"https://standards.buildingsmart.org/IFC/RELEASE/IFC4/3/ADD2\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\">\n\t<xs:element name=\"uos\" type=\"ifc:uos\" abstract=\"true\"/>\n\t<xs:simpleType name=\"Seq-anyURI\">\n\t\t<xs:list itemType=\"xs:anyURI\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"uos\" abstract=\"true\">\n\t\t<xs:sequence>\n\t\t\t<xs:element name=\"header\" minOccurs=\"0\">\n\t\t\t\t<xs:complexType>\n\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t<xs:element name=\"name\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"time_stamp\" type=\"xs:dateTime\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"author\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"organization\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"preprocessor_version\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"originating_system\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"authorization\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t\t<xs:element name=\"documentation\" type=\"xs:string\" minOccurs=\"0\"/>\n\t\t\t\t\t</xs:sequence>\n\t\t\t\t</xs:complexType>\n\t\t\t</xs:element>\n\t\t</xs:sequence>\n\t\t<xs:attribute name=\"id\" type=\"xs:ID\" use=\"optional\"/>\n\t\t<xs:attribute name=\"express\" type=\"ifc:Seq-anyURI\" use=\"optional\"/>\n\t\t<xs:attribute name=\"configuration\" type=\"ifc:Seq-anyURI\" use=\"optional\"/>\n\t</xs:complexType>\n\t<xs:element name=\"ifcXML\" type=\"ifc:ifcXML\" substitutionGroup=\"ifc:uos\"/>\n\t<xs:complexType name=\"ifcXML\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:uos\">\n\t\t\t\t<xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n\t\t\t\t\t<xs:element ref=\"ifc:Entity\"/>\n\t\t\t\t</xs:choice>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActionRequest\" type=\"ifc:IfcActionRequest\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActionRequest\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActionRequestTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActor\" type=\"ifc:IfcActor\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TheActor\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActorRole\" type=\"ifc:IfcActorRole\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActorRole\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Role\" type=\"ifc:IfcRoleEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedRole\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActuator\" type=\"ifc:IfcActuator\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActuator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcActuatorType\" type=\"ifc:IfcActuatorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcActuatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcActuatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAddress\" type=\"ifc:IfcAddress\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAddress\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcAddressTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPurpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedBrep\" type=\"ifc:IfcAdvancedBrep\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedBrep\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedBrepWithVoids\" type=\"ifc:IfcAdvancedBrepWithVoids\" substitutionGroup=\"ifc:IfcAdvancedBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedBrepWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAdvancedBrep\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Voids\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClosedShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAdvancedFace\" type=\"ifc:IfcAdvancedFace\" substitutionGroup=\"ifc:IfcFaceSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAdvancedFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFaceSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminal\" type=\"ifc:IfcAirTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalBox\" type=\"ifc:IfcAirTerminalBox\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalBoxType\" type=\"ifc:IfcAirTerminalBoxType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalBoxType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirTerminalType\" type=\"ifc:IfcAirTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirToAirHeatRecovery\" type=\"ifc:IfcAirToAirHeatRecovery\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirToAirHeatRecovery\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAirToAirHeatRecoveryType\" type=\"ifc:IfcAirToAirHeatRecoveryType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAirToAirHeatRecoveryType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAirToAirHeatRecoveryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlarm\" type=\"ifc:IfcAlarm\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlarm\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlarmType\" type=\"ifc:IfcAlarmType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlarmType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlarmTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlignment\" type=\"ifc:IfcAlignment\" substitutionGroup=\"ifc:IfcLinearPositioningElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLinearPositioningElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlignmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlignmentCant\" type=\"ifc:IfcAlignmentCant\" substitutionGroup=\"ifc:IfcLinearElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlignmentCant\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLinearElement\">\n\t\t\t\t<xs:attribute name=\"RailHeadDistance\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlignmentCantSegment\" type=\"ifc:IfcAlignmentCantSegment\" substitutionGroup=\"ifc:IfcAlignmentParameterSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlignmentCantSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAlignmentParameterSegment\">\n\t\t\t\t<xs:attribute name=\"StartDistAlong\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"HorizontalLength\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartCantLeft\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndCantLeft\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartCantRight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndCantRight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlignmentCantSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlignmentHorizontal\" type=\"ifc:IfcAlignmentHorizontal\" substitutionGroup=\"ifc:IfcLinearElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlignmentHorizontal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLinearElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlignmentHorizontalSegment\" type=\"ifc:IfcAlignmentHorizontalSegment\" substitutionGroup=\"ifc:IfcAlignmentParameterSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlignmentHorizontalSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAlignmentParameterSegment\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StartPoint\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"StartDirection\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartRadiusOfCurvature\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndRadiusOfCurvature\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SegmentLength\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"GravityCenterLineHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlignmentHorizontalSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlignmentParameterSegment\" type=\"ifc:IfcAlignmentParameterSegment\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlignmentParameterSegment\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"StartTag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndTag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlignmentSegment\" type=\"ifc:IfcAlignmentSegment\" substitutionGroup=\"ifc:IfcLinearElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlignmentSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLinearElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DesignParameters\" type=\"ifc:IfcAlignmentParameterSegment\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlignmentVertical\" type=\"ifc:IfcAlignmentVertical\" substitutionGroup=\"ifc:IfcLinearElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlignmentVertical\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLinearElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAlignmentVerticalSegment\" type=\"ifc:IfcAlignmentVerticalSegment\" substitutionGroup=\"ifc:IfcAlignmentParameterSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAlignmentVerticalSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAlignmentParameterSegment\">\n\t\t\t\t<xs:attribute name=\"StartDistAlong\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"HorizontalLength\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartHeight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartGradient\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndGradient\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RadiusOfCurvature\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAlignmentVerticalSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotation\" type=\"ifc:IfcAnnotation\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAnnotationTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAnnotationFillArea\" type=\"ifc:IfcAnnotationFillArea\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAnnotationFillArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OuterBoundary\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApplication\" type=\"ifc:IfcApplication\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApplication\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ApplicationDeveloper\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Version\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicationFullName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicationIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAppliedValue\" type=\"ifc:IfcAppliedValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAppliedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedValue\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAppliedValueSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitBasis\" type=\"ifc:IfcMeasureWithUnit\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Components\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicableDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FixedUntilDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Condition\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ArithmeticOperator\" type=\"ifc:IfcArithmeticOperatorEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApproval\" type=\"ifc:IfcApproval\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApproval\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RequestingApproval\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"GivingApproval\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeOfApproval\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Level\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Qualifier\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcApprovalRelationship\" type=\"ifc:IfcApprovalRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcApprovalRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedApprovals\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcApproval\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcApproval\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryClosedProfileDef\" type=\"ifc:IfcArbitraryClosedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryClosedProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OuterCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryOpenProfileDef\" type=\"ifc:IfcArbitraryOpenProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryOpenProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Curve\" type=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcArbitraryProfileDefWithVoids\" type=\"ifc:IfcArbitraryProfileDefWithVoids\" substitutionGroup=\"ifc:IfcArbitraryClosedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcArbitraryProfileDefWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryClosedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerCurves\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAsset\" type=\"ifc:IfcAsset\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAsset\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OriginalValue\" type=\"ifc:IfcCostValue\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CurrentValue\" type=\"ifc:IfcCostValue\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TotalReplacementCost\" type=\"ifc:IfcCostValue\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Owner\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"User\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResponsiblePerson\" type=\"ifc:IfcPerson\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"DepreciatedValue\" type=\"ifc:IfcCostValue\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IncorporationDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAsymmetricIShapeProfileDef\" type=\"ifc:IfcAsymmetricIShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAsymmetricIShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"BottomFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomFlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopFlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAudioVisualAppliance\" type=\"ifc:IfcAudioVisualAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAudioVisualAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAudioVisualApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAudioVisualApplianceType\" type=\"ifc:IfcAudioVisualApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAudioVisualApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAudioVisualApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis1Placement\" type=\"ifc:IfcAxis1Placement\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis1Placement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis2Placement2D\" type=\"ifc:IfcAxis2Placement2D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis2Placement2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis2Placement3D\" type=\"ifc:IfcAxis2Placement3D\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis2Placement3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcAxis2PlacementLinear\" type=\"ifc:IfcAxis2PlacementLinear\" substitutionGroup=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcAxis2PlacementLinear\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineCurve\" type=\"ifc:IfcBSplineCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Degree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveForm\" type=\"ifc:IfcBSplineCurveForm\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ClosedCurve\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineCurveWithKnots\" type=\"ifc:IfcBSplineCurveWithKnots\" substitutionGroup=\"ifc:IfcBSplineCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineCurveWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurve\">\n\t\t\t\t<xs:attribute name=\"KnotMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Knots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"KnotSpec\" type=\"ifc:IfcKnotType\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineSurface\" type=\"ifc:IfcBSplineSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ControlPointsList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"4\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UDegree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VDegree\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SurfaceForm\" type=\"ifc:IfcBSplineSurfaceForm\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UClosed\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VClosed\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBSplineSurfaceWithKnots\" type=\"ifc:IfcBSplineSurfaceWithKnots\" substitutionGroup=\"ifc:IfcBSplineSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBSplineSurfaceWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineSurface\">\n\t\t\t\t<xs:attribute name=\"UMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"VMultiplicities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"UKnots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"VKnots\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"KnotSpec\" type=\"ifc:IfcKnotType\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeam\" type=\"ifc:IfcBeam\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeam\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBeamType\" type=\"ifc:IfcBeamType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBeamType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBearing\" type=\"ifc:IfcBearing\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBearing\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBearingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBearingType\" type=\"ifc:IfcBearingType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBearingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBearingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBlobTexture\" type=\"ifc:IfcBlobTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBlobTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RasterCode\" type=\"ifc:IfcBinary\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RasterFormat\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBlock\" type=\"ifc:IfcBlock\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBlock\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ZLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoiler\" type=\"ifc:IfcBoiler\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoiler\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoilerType\" type=\"ifc:IfcBoilerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoilerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBoilerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBooleanClippingResult\" type=\"ifc:IfcBooleanClippingResult\" substitutionGroup=\"ifc:IfcBooleanResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBooleanClippingResult\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBooleanResult\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBooleanResult\" type=\"ifc:IfcBooleanResult\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBooleanResult\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FirstOperand\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondOperand\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBooleanOperand\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Operator\" type=\"ifc:IfcBooleanOperator\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBorehole\" type=\"ifc:IfcBorehole\" substitutionGroup=\"ifc:IfcGeotechnicalAssembly\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBorehole\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeotechnicalAssembly\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryCondition\" type=\"ifc:IfcBoundaryCondition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryCondition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryCurve\" type=\"ifc:IfcBoundaryCurve\" substitutionGroup=\"ifc:IfcCompositeCurveOnSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurveOnSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryEdgeCondition\" type=\"ifc:IfcBoundaryEdgeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryEdgeCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthX\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthY\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByLengthZ\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfTranslationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthX\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthY\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessByLengthZ\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfRotationalSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryFaceCondition\" type=\"ifc:IfcBoundaryFaceCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryFaceCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaX\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaY\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessByAreaZ\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcModulusOfSubgradeReactionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryNodeCondition\" type=\"ifc:IfcBoundaryNodeCondition\" substitutionGroup=\"ifc:IfcBoundaryCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryNodeCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessX\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessY\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TranslationalStiffnessZ\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTranslationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessX\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessY\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RotationalStiffnessZ\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcRotationalStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundaryNodeConditionWarping\" type=\"ifc:IfcBoundaryNodeConditionWarping\" substitutionGroup=\"ifc:IfcBoundaryNodeCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundaryNodeConditionWarping\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryNodeCondition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WarpingStiffness\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcWarpingStiffnessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundedCurve\" type=\"ifc:IfcBoundedCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundedCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundedSurface\" type=\"ifc:IfcBoundedSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundedSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoundingBox\" type=\"ifc:IfcBoundingBox\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoundingBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Corner\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ZDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBoxedHalfSpace\" type=\"ifc:IfcBoxedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBoxedHalfSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Enclosure\" type=\"ifc:IfcBoundingBox\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBridge\" type=\"ifc:IfcBridge\" substitutionGroup=\"ifc:IfcFacility\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBridge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacility\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBridgeTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBridgePart\" type=\"ifc:IfcBridgePart\" substitutionGroup=\"ifc:IfcFacilityPart\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBridgePart\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacilityPart\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBridgePartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuilding\" type=\"ifc:IfcBuilding\" substitutionGroup=\"ifc:IfcFacility\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuilding\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacility\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BuildingAddress\" type=\"ifc:IfcPostalAddress\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ElevationOfRefHeight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElevationOfTerrain\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementPart\" type=\"ifc:IfcBuildingElementPart\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementPart\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementPartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementPartType\" type=\"ifc:IfcBuildingElementPartType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementPartType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementPartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementProxy\" type=\"ifc:IfcBuildingElementProxy\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementProxy\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementProxyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingElementProxyType\" type=\"ifc:IfcBuildingElementProxyType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingElementProxyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingElementProxyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingStorey\" type=\"ifc:IfcBuildingStorey\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingStorey\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"Elevation\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuildingSystem\" type=\"ifc:IfcBuildingSystem\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuildingSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuildingSystemTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuiltElement\" type=\"ifc:IfcBuiltElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuiltElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuiltElementType\" type=\"ifc:IfcBuiltElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuiltElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBuiltSystem\" type=\"ifc:IfcBuiltSystem\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBuiltSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBuiltSystemTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBurner\" type=\"ifc:IfcBurner\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBurner\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBurnerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcBurnerType\" type=\"ifc:IfcBurnerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcBurnerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcBurnerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCShapeProfileDef\" type=\"ifc:IfcCShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Girth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InternalFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierFitting\" type=\"ifc:IfcCableCarrierFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierFittingType\" type=\"ifc:IfcCableCarrierFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierSegment\" type=\"ifc:IfcCableCarrierSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableCarrierSegmentType\" type=\"ifc:IfcCableCarrierSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableCarrierSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableCarrierSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableFitting\" type=\"ifc:IfcCableFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableFittingType\" type=\"ifc:IfcCableFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableSegment\" type=\"ifc:IfcCableSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCableSegmentType\" type=\"ifc:IfcCableSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCableSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCableSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCaissonFoundation\" type=\"ifc:IfcCaissonFoundation\" substitutionGroup=\"ifc:IfcDeepFoundation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCaissonFoundation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDeepFoundation\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCaissonFoundationTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCaissonFoundationType\" type=\"ifc:IfcCaissonFoundationType\" substitutionGroup=\"ifc:IfcDeepFoundationType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCaissonFoundationType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDeepFoundationType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCaissonFoundationTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPoint\" type=\"ifc:IfcCartesianPoint\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:attribute name=\"Coordinates\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList\" type=\"ifc:IfcCartesianPointList\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList2D\" type=\"ifc:IfcCartesianPointList2D\" substitutionGroup=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianPointList\">\n\t\t\t\t<xs:attribute name=\"CoordList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"TagList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianPointList3D\" type=\"ifc:IfcCartesianPointList3D\" substitutionGroup=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianPointList3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianPointList\">\n\t\t\t\t<xs:attribute name=\"CoordList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"TagList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator\" type=\"ifc:IfcCartesianTransformationOperator\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis1\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Axis2\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"LocalOrigin\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Scale\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator2D\" type=\"ifc:IfcCartesianTransformationOperator2D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator2DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator2DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator2DnonUniform\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator2D\">\n\t\t\t\t<xs:attribute name=\"Scale2\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator3D\" type=\"ifc:IfcCartesianTransformationOperator3D\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis3\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCartesianTransformationOperator3DnonUniform\" type=\"ifc:IfcCartesianTransformationOperator3DnonUniform\" substitutionGroup=\"ifc:IfcCartesianTransformationOperator3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCartesianTransformationOperator3DnonUniform\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCartesianTransformationOperator3D\">\n\t\t\t\t<xs:attribute name=\"Scale2\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scale3\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCenterLineProfileDef\" type=\"ifc:IfcCenterLineProfileDef\" substitutionGroup=\"ifc:IfcArbitraryOpenProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCenterLineProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcArbitraryOpenProfileDef\">\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChiller\" type=\"ifc:IfcChiller\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChiller\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChillerType\" type=\"ifc:IfcChillerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChillerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChillerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChimney\" type=\"ifc:IfcChimney\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChimney\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChimneyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcChimneyType\" type=\"ifc:IfcChimneyType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcChimneyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcChimneyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircle\" type=\"ifc:IfcCircle\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircleHollowProfileDef\" type=\"ifc:IfcCircleHollowProfileDef\" substitutionGroup=\"ifc:IfcCircleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircleHollowProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCircleProfileDef\">\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCircleProfileDef\" type=\"ifc:IfcCircleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCircleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCivilElement\" type=\"ifc:IfcCivilElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCivilElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCivilElementType\" type=\"ifc:IfcCivilElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCivilElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassification\" type=\"ifc:IfcClassification\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassification\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferenceTokens\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasReferences\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationReference\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Source\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Edition\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EditionDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Specification\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClassificationReference\" type=\"ifc:IfcClassificationReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClassificationReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasReferences\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationReference\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Sort\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClosedShell\" type=\"ifc:IfcClosedShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClosedShell\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcClothoid\" type=\"ifc:IfcClothoid\" substitutionGroup=\"ifc:IfcSpiral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcClothoid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpiral\">\n\t\t\t\t<xs:attribute name=\"ClothoidConstant\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoil\" type=\"ifc:IfcCoil\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoil\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoilType\" type=\"ifc:IfcCoilType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoilType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoilTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourRgb\" type=\"ifc:IfcColourRgb\" substitutionGroup=\"ifc:IfcColourSpecification\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourRgb\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcColourSpecification\">\n\t\t\t\t<xs:attribute name=\"Red\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Green\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Blue\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourRgbList\" type=\"ifc:IfcColourRgbList\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourRgbList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"ColourList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcNormalisedRatioMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColourSpecification\" type=\"ifc:IfcColourSpecification\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColourSpecification\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumn\" type=\"ifc:IfcColumn\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumn\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcColumnType\" type=\"ifc:IfcColumnType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcColumnType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcColumnTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCommunicationsAppliance\" type=\"ifc:IfcCommunicationsAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCommunicationsAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCommunicationsApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCommunicationsApplianceType\" type=\"ifc:IfcCommunicationsApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCommunicationsApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCommunicationsApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcComplexProperty\" type=\"ifc:IfcComplexProperty\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcComplexProperty\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcComplexPropertyTemplate\" type=\"ifc:IfcComplexPropertyTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcComplexPropertyTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertyTemplates\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyTemplate\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertyTemplate\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcComplexPropertyTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurve\" type=\"ifc:IfcCompositeCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Segments\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSegment\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSegment\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurveOnSurface\" type=\"ifc:IfcCompositeCurveOnSurface\" substitutionGroup=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurveOnSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeCurveSegment\" type=\"ifc:IfcCompositeCurveSegment\" substitutionGroup=\"ifc:IfcSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeCurveSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSegment\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompositeProfileDef\" type=\"ifc:IfcCompositeProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompositeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Profiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Label\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompressor\" type=\"ifc:IfcCompressor\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompressor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCompressorType\" type=\"ifc:IfcCompressorType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCompressorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCompressorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCondenser\" type=\"ifc:IfcCondenser\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCondenser\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCondenserType\" type=\"ifc:IfcCondenserType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCondenserType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCondenserTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConic\" type=\"ifc:IfcConic\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConic\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectedFaceSet\" type=\"ifc:IfcConnectedFaceSet\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectedFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CfsFaces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFace\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFace\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionCurveGeometry\" type=\"ifc:IfcConnectionCurveGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionCurveGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveOnRelatedElement\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveOrEdgeCurve\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionGeometry\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionPointEccentricity\" type=\"ifc:IfcConnectionPointEccentricity\" substitutionGroup=\"ifc:IfcConnectionPointGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionPointEccentricity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionPointGeometry\">\n\t\t\t\t<xs:attribute name=\"EccentricityInX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EccentricityInY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EccentricityInZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionPointGeometry\" type=\"ifc:IfcConnectionPointGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionPointGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PointOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointOnRelatedElement\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPointOrVertexPoint\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionSurfaceGeometry\" type=\"ifc:IfcConnectionSurfaceGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionSurfaceGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SurfaceOnRelatedElement\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceOrFaceSurface\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConnectionVolumeGeometry\" type=\"ifc:IfcConnectionVolumeGeometry\" substitutionGroup=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConnectionVolumeGeometry\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectionGeometry\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VolumeOnRelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSolidOrShell\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VolumeOnRelatedElement\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSolidOrShell\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstraint\" type=\"ifc:IfcConstraint\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstraint\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CreatingActor\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstraintGrade\" type=\"ifc:IfcConstraintEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstraintSource\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionEquipmentResource\" type=\"ifc:IfcConstructionEquipmentResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionEquipmentResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionEquipmentResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionEquipmentResourceType\" type=\"ifc:IfcConstructionEquipmentResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionEquipmentResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionEquipmentResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionMaterialResource\" type=\"ifc:IfcConstructionMaterialResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionMaterialResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionMaterialResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionMaterialResourceType\" type=\"ifc:IfcConstructionMaterialResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionMaterialResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionMaterialResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionProductResource\" type=\"ifc:IfcConstructionProductResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionProductResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionProductResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionProductResourceType\" type=\"ifc:IfcConstructionProductResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionProductResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConstructionProductResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionResource\" type=\"ifc:IfcConstructionResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Usage\" type=\"ifc:IfcResourceTime\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"BaseCosts\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseQuantity\" type=\"ifc:IfcPhysicalQuantity\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConstructionResourceType\" type=\"ifc:IfcConstructionResourceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConstructionResourceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeResource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseCosts\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAppliedValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BaseQuantity\" type=\"ifc:IfcPhysicalQuantity\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcContext\" type=\"ifc:IfcContext\" abstract=\"true\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcContext\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepresentationContexts\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationContext\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationContext\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitsInContext\" type=\"ifc:IfcUnitAssignment\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"IsDefinedBy\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDefinesByProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDefinesByProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Declares\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDeclares\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDeclares\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ObjectType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Phase\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcContextDependentUnit\" type=\"ifc:IfcContextDependentUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcContextDependentUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcControl\" type=\"ifc:IfcControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcControl\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcController\" type=\"ifc:IfcController\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcController\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcControllerType\" type=\"ifc:IfcControllerType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcControllerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcControllerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConversionBasedUnit\" type=\"ifc:IfcConversionBasedUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConversionBasedUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConversionFactor\" type=\"ifc:IfcMeasureWithUnit\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConversionBasedUnitWithOffset\" type=\"ifc:IfcConversionBasedUnitWithOffset\" substitutionGroup=\"ifc:IfcConversionBasedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConversionBasedUnitWithOffset\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConversionBasedUnit\">\n\t\t\t\t<xs:attribute name=\"ConversionOffset\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConveyorSegment\" type=\"ifc:IfcConveyorSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConveyorSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConveyorSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcConveyorSegmentType\" type=\"ifc:IfcConveyorSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcConveyorSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcConveyorSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCooledBeam\" type=\"ifc:IfcCooledBeam\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCooledBeam\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCooledBeamType\" type=\"ifc:IfcCooledBeamType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCooledBeamType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCooledBeamTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoolingTower\" type=\"ifc:IfcCoolingTower\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoolingTower\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoolingTowerType\" type=\"ifc:IfcCoolingTowerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoolingTowerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoolingTowerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoordinateOperation\" type=\"ifc:IfcCoordinateOperation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoordinateOperation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TargetCRS\" type=\"ifc:IfcCoordinateReferenceSystem\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoordinateReferenceSystem\" type=\"ifc:IfcCoordinateReferenceSystem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoordinateReferenceSystem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"GeodeticDatum\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCosineSpiral\" type=\"ifc:IfcCosineSpiral\" substitutionGroup=\"ifc:IfcSpiral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCosineSpiral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpiral\">\n\t\t\t\t<xs:attribute name=\"CosineTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstantTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostItem\" type=\"ifc:IfcCostItem\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CostValues\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCostValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCostValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CostQuantities\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCostItemTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostSchedule\" type=\"ifc:IfcCostSchedule\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCostScheduleTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SubmittedOn\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UpdateDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCostValue\" type=\"ifc:IfcCostValue\" substitutionGroup=\"ifc:IfcAppliedValue\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCostValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAppliedValue\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCourse\" type=\"ifc:IfcCourse\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCourse\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCourseTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCourseType\" type=\"ifc:IfcCourseType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCourseType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCourseTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCovering\" type=\"ifc:IfcCovering\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCovering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCoveringType\" type=\"ifc:IfcCoveringType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCoveringType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCoveringTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCrewResource\" type=\"ifc:IfcCrewResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCrewResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCrewResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCrewResourceType\" type=\"ifc:IfcCrewResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCrewResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCrewResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCsgPrimitive3D\" type=\"ifc:IfcCsgPrimitive3D\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCsgPrimitive3D\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCsgSolid\" type=\"ifc:IfcCsgSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCsgSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TreeRootExpression\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCsgSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurrencyRelationship\" type=\"ifc:IfcCurrencyRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurrencyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RateSource\" type=\"ifc:IfcLibraryInformation\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ExchangeRate\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RateDateTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurtainWall\" type=\"ifc:IfcCurtainWall\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurtainWall\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCurtainWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurtainWallType\" type=\"ifc:IfcCurtainWallType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurtainWallType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcCurtainWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurve\" type=\"ifc:IfcCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveBoundedPlane\" type=\"ifc:IfcCurveBoundedPlane\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveBoundedPlane\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcPlane\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"OuterBoundary\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InnerBoundaries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurve\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveBoundedSurface\" type=\"ifc:IfcCurveBoundedSurface\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveBoundedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Boundaries\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcBoundaryCurve\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBoundaryCurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ImplicitOuter\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveSegment\" type=\"ifc:IfcCurveSegment\" substitutionGroup=\"ifc:IfcSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSegment\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Placement\" type=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"SegmentStart\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveMeasureSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SegmentLength\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveMeasureSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ParentCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyle\" type=\"ifc:IfcCurveStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveFont\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveFontOrScaledCurveFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveWidth\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurveColour\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelOrDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFont\" type=\"ifc:IfcCurveStyleFont\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PatternList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontPattern\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCurveStyleFontPattern\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFontAndScaling\" type=\"ifc:IfcCurveStyleFontAndScaling\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFontAndScaling\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CurveStyleFont\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveStyleFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveFontScaling\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCurveStyleFontPattern\" type=\"ifc:IfcCurveStyleFontPattern\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCurveStyleFontPattern\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"VisibleSegmentLength\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InvisibleSegmentLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcCylindricalSurface\" type=\"ifc:IfcCylindricalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcCylindricalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDamper\" type=\"ifc:IfcDamper\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDamper\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDamperType\" type=\"ifc:IfcDamperType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDamperType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDamperTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDeepFoundation\" type=\"ifc:IfcDeepFoundation\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDeepFoundation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDeepFoundationType\" type=\"ifc:IfcDeepFoundationType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDeepFoundationType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedProfileDef\" type=\"ifc:IfcDerivedProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Operator\" type=\"ifc:IfcCartesianTransformationOperator2D\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Label\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedUnit\" type=\"ifc:IfcDerivedUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDerivedUnitElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDerivedUnitElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UnitType\" type=\"ifc:IfcDerivedUnitEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDerivedUnitElement\" type=\"ifc:IfcDerivedUnitElement\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDerivedUnitElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" type=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Exponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDimensionalExponents\" type=\"ifc:IfcDimensionalExponents\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDimensionalExponents\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"LengthExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MassExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectricCurrentExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThermodynamicTemperatureExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AmountOfSubstanceExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LuminousIntensityExponent\" type=\"xs:long\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDirection\" type=\"ifc:IfcDirection\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDirection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:attribute name=\"DirectionRatios\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDirectrixCurveSweptAreaSolid\" type=\"ifc:IfcDirectrixCurveSweptAreaSolid\" abstract=\"true\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDirectrixCurveSweptAreaSolid\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"StartParam\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveMeasureSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EndParam\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveMeasureSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDirectrixDerivedReferenceSweptAreaSolid\" type=\"ifc:IfcDirectrixDerivedReferenceSweptAreaSolid\" substitutionGroup=\"ifc:IfcFixedReferenceSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDirectrixDerivedReferenceSweptAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFixedReferenceSweptAreaSolid\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDiscreteAccessory\" type=\"ifc:IfcDiscreteAccessory\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDiscreteAccessory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDiscreteAccessoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDiscreteAccessoryType\" type=\"ifc:IfcDiscreteAccessoryType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDiscreteAccessoryType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDiscreteAccessoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionBoard\" type=\"ifc:IfcDistributionBoard\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionBoard\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionBoardTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionBoardType\" type=\"ifc:IfcDistributionBoardType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionBoardType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionBoardTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionChamberElement\" type=\"ifc:IfcDistributionChamberElement\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionChamberElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionChamberElementType\" type=\"ifc:IfcDistributionChamberElementType\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionChamberElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionChamberElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionCircuit\" type=\"ifc:IfcDistributionCircuit\" substitutionGroup=\"ifc:IfcDistributionSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionCircuit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionSystem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionControlElement\" type=\"ifc:IfcDistributionControlElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionControlElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionControlElementType\" type=\"ifc:IfcDistributionControlElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionControlElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionElement\" type=\"ifc:IfcDistributionElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionElementType\" type=\"ifc:IfcDistributionElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionFlowElement\" type=\"ifc:IfcDistributionFlowElement\" substitutionGroup=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionFlowElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionFlowElementType\" type=\"ifc:IfcDistributionFlowElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionFlowElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionPort\" type=\"ifc:IfcDistributionPort\" substitutionGroup=\"ifc:IfcPort\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionPort\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPort\">\n\t\t\t\t<xs:attribute name=\"FlowDirection\" type=\"ifc:IfcFlowDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionPortTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SystemType\" type=\"ifc:IfcDistributionSystemEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDistributionSystem\" type=\"ifc:IfcDistributionSystem\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDistributionSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDistributionSystemEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentInformation\" type=\"ifc:IfcDocumentInformation\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentInformation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DocumentOwner\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Editors\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IntendedUse\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scope\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Revision\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastRevisionTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectronicFormat\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValidFrom\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValidUntil\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Confidentiality\" type=\"ifc:IfcDocumentConfidentialityEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcDocumentStatusEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentInformationRelationship\" type=\"ifc:IfcDocumentInformationRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentInformationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingDocument\" type=\"ifc:IfcDocumentInformation\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedDocuments\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDocumentInformation\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RelationshipType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDocumentReference\" type=\"ifc:IfcDocumentReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDocumentReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedDocument\" type=\"ifc:IfcDocumentInformation\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoor\" type=\"ifc:IfcDoor\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDoorTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorTypeOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedOperationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorLiningProperties\" type=\"ifc:IfcDoorLiningProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorLiningProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ThresholdOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CasingThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CasingDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorPanelProperties\" type=\"ifc:IfcDoorPanelProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorPanelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PanelDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelOperation\" type=\"ifc:IfcDoorPanelOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelWidth\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcDoorPanelPositionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDoorType\" type=\"ifc:IfcDoorType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDoorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDoorTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcDoorTypeOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedOperationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingPreDefinedColour\" type=\"ifc:IfcDraughtingPreDefinedColour\" substitutionGroup=\"ifc:IfcPreDefinedColour\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedColour\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDraughtingPreDefinedCurveFont\" type=\"ifc:IfcDraughtingPreDefinedCurveFont\" substitutionGroup=\"ifc:IfcPreDefinedCurveFont\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDraughtingPreDefinedCurveFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctFitting\" type=\"ifc:IfcDuctFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctFittingType\" type=\"ifc:IfcDuctFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSegment\" type=\"ifc:IfcDuctSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSegmentType\" type=\"ifc:IfcDuctSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSilencer\" type=\"ifc:IfcDuctSilencer\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSilencer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcDuctSilencerType\" type=\"ifc:IfcDuctSilencerType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcDuctSilencerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcDuctSilencerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEarthworksCut\" type=\"ifc:IfcEarthworksCut\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEarthworksCut\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEarthworksCutTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEarthworksElement\" type=\"ifc:IfcEarthworksElement\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEarthworksElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEarthworksFill\" type=\"ifc:IfcEarthworksFill\" substitutionGroup=\"ifc:IfcEarthworksElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEarthworksFill\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEarthworksElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEarthworksFillTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdge\" type=\"ifc:IfcEdge\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeStart\" type=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"EdgeEnd\" type=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdgeCurve\" type=\"ifc:IfcEdgeCurve\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdgeCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeGeometry\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEdgeLoop\" type=\"ifc:IfcEdgeLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEdgeLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricAppliance\" type=\"ifc:IfcElectricAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricApplianceType\" type=\"ifc:IfcElectricApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricDistributionBoard\" type=\"ifc:IfcElectricDistributionBoard\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricDistributionBoard\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricDistributionBoardTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricDistributionBoardType\" type=\"ifc:IfcElectricDistributionBoardType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricDistributionBoardType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricDistributionBoardTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowStorageDevice\" type=\"ifc:IfcElectricFlowStorageDevice\" substitutionGroup=\"ifc:IfcFlowStorageDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowStorageDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowStorageDeviceType\" type=\"ifc:IfcElectricFlowStorageDeviceType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowStorageDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricFlowStorageDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowTreatmentDevice\" type=\"ifc:IfcElectricFlowTreatmentDevice\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowTreatmentDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricFlowTreatmentDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricFlowTreatmentDeviceType\" type=\"ifc:IfcElectricFlowTreatmentDeviceType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricFlowTreatmentDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricFlowTreatmentDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricGenerator\" type=\"ifc:IfcElectricGenerator\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricGenerator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricGeneratorType\" type=\"ifc:IfcElectricGeneratorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricGeneratorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricGeneratorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricMotor\" type=\"ifc:IfcElectricMotor\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricMotor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricMotorType\" type=\"ifc:IfcElectricMotorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricMotorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricMotorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricTimeControl\" type=\"ifc:IfcElectricTimeControl\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricTimeControl\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElectricTimeControlType\" type=\"ifc:IfcElectricTimeControlType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElectricTimeControlType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElectricTimeControlTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElement\" type=\"ifc:IfcElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProjections\" type=\"ifc:IfcRelProjectsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"?\"/>\n\t\t\t\t\t<xs:element name=\"HasOpenings\" type=\"ifc:IfcRelVoidsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"?\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementAssembly\" type=\"ifc:IfcElementAssembly\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementAssembly\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementAssemblyType\" type=\"ifc:IfcElementAssemblyType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementAssemblyType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcElementAssemblyTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementComponent\" type=\"ifc:IfcElementComponent\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementComponent\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementComponentType\" type=\"ifc:IfcElementComponentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementComponentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementQuantity\" type=\"ifc:IfcElementQuantity\" substitutionGroup=\"ifc:IfcQuantitySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementQuantity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcQuantitySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Quantities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MethodOfMeasurement\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementType\" type=\"ifc:IfcElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ElementType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcElementarySurface\" type=\"ifc:IfcElementarySurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcElementarySurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEllipse\" type=\"ifc:IfcEllipse\" substitutionGroup=\"ifc:IfcConic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEllipse\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConic\">\n\t\t\t\t<xs:attribute name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEllipseProfileDef\" type=\"ifc:IfcEllipseProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEllipseProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"SemiAxis1\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SemiAxis2\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEnergyConversionDevice\" type=\"ifc:IfcEnergyConversionDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEnergyConversionDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEnergyConversionDeviceType\" type=\"ifc:IfcEnergyConversionDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEnergyConversionDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEngine\" type=\"ifc:IfcEngine\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEngine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEngineTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEngineType\" type=\"ifc:IfcEngineType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEngineType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEngineTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporativeCooler\" type=\"ifc:IfcEvaporativeCooler\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporativeCooler\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporativeCoolerType\" type=\"ifc:IfcEvaporativeCoolerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporativeCoolerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporativeCoolerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporator\" type=\"ifc:IfcEvaporator\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvaporatorType\" type=\"ifc:IfcEvaporatorType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvaporatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEvaporatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEvent\" type=\"ifc:IfcEvent\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEvent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EventOccurenceTime\" type=\"ifc:IfcEventTime\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEventTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EventTriggerType\" type=\"ifc:IfcEventTriggerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedEventTriggerType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEventTime\" type=\"ifc:IfcEventTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEventTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"ActualDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcEventType\" type=\"ifc:IfcEventType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcEventType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcEventTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EventTriggerType\" type=\"ifc:IfcEventTriggerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedEventTriggerType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtendedProperties\" type=\"ifc:IfcExtendedProperties\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtendedProperties\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Properties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalInformation\" type=\"ifc:IfcExternalInformation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalInformation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalReference\" type=\"ifc:IfcExternalReference\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalReference\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalReferenceRelationship\" type=\"ifc:IfcExternalReferenceRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalReferenceRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingReference\" type=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalSpatialElement\" type=\"ifc:IfcExternalSpatialElement\" substitutionGroup=\"ifc:IfcExternalSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalSpatialElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcExternalSpatialElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternalSpatialStructureElement\" type=\"ifc:IfcExternalSpatialStructureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternalSpatialStructureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedHatchStyle\" type=\"ifc:IfcExternallyDefinedHatchStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedHatchStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedSurfaceStyle\" type=\"ifc:IfcExternallyDefinedSurfaceStyle\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedSurfaceStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExternallyDefinedTextFont\" type=\"ifc:IfcExternallyDefinedTextFont\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExternallyDefinedTextFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtrudedAreaSolid\" type=\"ifc:IfcExtrudedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtrudedAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcExtrudedAreaSolidTapered\" type=\"ifc:IfcExtrudedAreaSolidTapered\" substitutionGroup=\"ifc:IfcExtrudedAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcExtrudedAreaSolidTapered\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtrudedAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EndSweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFace\" type=\"ifc:IfcFace\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Bounds\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcFaceBound\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFaceBound\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceBasedSurfaceModel\" type=\"ifc:IfcFaceBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceBasedSurfaceModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FbsmFaces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConnectedFaceSet\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcConnectedFaceSet\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceBound\" type=\"ifc:IfcFaceBound\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceBound\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Bound\" type=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Orientation\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceOuterBound\" type=\"ifc:IfcFaceOuterBound\" substitutionGroup=\"ifc:IfcFaceBound\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceOuterBound\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFaceBound\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFaceSurface\" type=\"ifc:IfcFaceSurface\" substitutionGroup=\"ifc:IfcFace\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFaceSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFace\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FaceSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacetedBrep\" type=\"ifc:IfcFacetedBrep\" substitutionGroup=\"ifc:IfcManifoldSolidBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacetedBrep\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcManifoldSolidBrep\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacetedBrepWithVoids\" type=\"ifc:IfcFacetedBrepWithVoids\" substitutionGroup=\"ifc:IfcFacetedBrep\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacetedBrepWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacetedBrep\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Voids\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcClosedShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClosedShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacility\" type=\"ifc:IfcFacility\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacility\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacilityPart\" type=\"ifc:IfcFacilityPart\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacilityPart\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"UsageType\" type=\"ifc:IfcFacilityUsageEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFacilityPartCommon\" type=\"ifc:IfcFacilityPartCommon\" substitutionGroup=\"ifc:IfcFacilityPart\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFacilityPartCommon\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacilityPart\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFacilityPartCommonTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFailureConnectionCondition\" type=\"ifc:IfcFailureConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFailureConnectionCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t<xs:attribute name=\"TensionFailureX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionFailureY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionFailureZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CompressionFailureZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFan\" type=\"ifc:IfcFan\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFan\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFanType\" type=\"ifc:IfcFanType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFanType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFastener\" type=\"ifc:IfcFastener\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFastener\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFastenerType\" type=\"ifc:IfcFastenerType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFastenerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElement\" type=\"ifc:IfcFeatureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElementAddition\" type=\"ifc:IfcFeatureElementAddition\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElementAddition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFeatureElementSubtraction\" type=\"ifc:IfcFeatureElementSubtraction\" abstract=\"true\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFeatureElementSubtraction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyle\" type=\"ifc:IfcFillAreaStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FillStyles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcFillStyleSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcFillStyleSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelOrDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyleHatching\" type=\"ifc:IfcFillAreaStyleHatching\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyleHatching\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HatchLineAppearance\" type=\"ifc:IfcCurveStyle\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"StartOfNextHatchLine\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcHatchLineDistanceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"PointOfReferenceHatchLine\" type=\"ifc:IfcCartesianPoint\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"PatternStart\" type=\"ifc:IfcCartesianPoint\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"HatchLineAngle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFillAreaStyleTiles\" type=\"ifc:IfcFillAreaStyleTiles\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFillAreaStyleTiles\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TilingPattern\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcVector\" minOccurs=\"2\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcVector\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Tiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStyledItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStyledItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TilingScale\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFilter\" type=\"ifc:IfcFilter\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFilter\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFilterType\" type=\"ifc:IfcFilterType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFilterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFilterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFireSuppressionTerminal\" type=\"ifc:IfcFireSuppressionTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFireSuppressionTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFireSuppressionTerminalType\" type=\"ifc:IfcFireSuppressionTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFireSuppressionTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFireSuppressionTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFixedReferenceSweptAreaSolid\" type=\"ifc:IfcFixedReferenceSweptAreaSolid\" substitutionGroup=\"ifc:IfcDirectrixCurveSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFixedReferenceSweptAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDirectrixCurveSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FixedReference\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowController\" type=\"ifc:IfcFlowController\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowController\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowControllerType\" type=\"ifc:IfcFlowControllerType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowControllerType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowFitting\" type=\"ifc:IfcFlowFitting\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowFittingType\" type=\"ifc:IfcFlowFittingType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowFittingType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowInstrument\" type=\"ifc:IfcFlowInstrument\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowInstrument\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowInstrumentType\" type=\"ifc:IfcFlowInstrumentType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowInstrumentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowInstrumentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMeter\" type=\"ifc:IfcFlowMeter\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMeter\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMeterType\" type=\"ifc:IfcFlowMeterType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMeterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFlowMeterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMovingDevice\" type=\"ifc:IfcFlowMovingDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMovingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowMovingDeviceType\" type=\"ifc:IfcFlowMovingDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowMovingDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowSegment\" type=\"ifc:IfcFlowSegment\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowSegmentType\" type=\"ifc:IfcFlowSegmentType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowSegmentType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowStorageDevice\" type=\"ifc:IfcFlowStorageDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowStorageDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowStorageDeviceType\" type=\"ifc:IfcFlowStorageDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowStorageDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTerminal\" type=\"ifc:IfcFlowTerminal\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTerminalType\" type=\"ifc:IfcFlowTerminalType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTerminalType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTreatmentDevice\" type=\"ifc:IfcFlowTreatmentDevice\" substitutionGroup=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTreatmentDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFlowTreatmentDeviceType\" type=\"ifc:IfcFlowTreatmentDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcDistributionFlowElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFlowTreatmentDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionFlowElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFooting\" type=\"ifc:IfcFooting\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFooting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFootingType\" type=\"ifc:IfcFootingType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFootingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFootingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnishingElement\" type=\"ifc:IfcFurnishingElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnishingElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnishingElementType\" type=\"ifc:IfcFurnishingElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnishingElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurniture\" type=\"ifc:IfcFurniture\" substitutionGroup=\"ifc:IfcFurnishingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurniture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFurnitureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcFurnitureType\" type=\"ifc:IfcFurnitureType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcFurnitureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\n\t\t\t\t<xs:attribute name=\"AssemblyPlace\" type=\"ifc:IfcAssemblyPlaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcFurnitureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeographicCRS\" type=\"ifc:IfcGeographicCRS\" substitutionGroup=\"ifc:IfcCoordinateReferenceSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeographicCRS\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCoordinateReferenceSystem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AngleUnit\" type=\"ifc:IfcNamedUnit\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"HeightUnit\" type=\"ifc:IfcNamedUnit\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PrimeMeridian\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeographicElement\" type=\"ifc:IfcGeographicElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeographicElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGeographicElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeographicElementType\" type=\"ifc:IfcGeographicElementType\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeographicElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGeographicElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricCurveSet\" type=\"ifc:IfcGeometricCurveSet\" substitutionGroup=\"ifc:IfcGeometricSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricCurveSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationContext\" type=\"ifc:IfcGeometricRepresentationContext\" substitutionGroup=\"ifc:IfcRepresentationContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationContext\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WorldCoordinateSystem\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TrueNorth\" type=\"ifc:IfcDirection\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"HasSubContexts\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationSubContext\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGeometricRepresentationSubContext\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasCoordinateOperation\" type=\"ifc:IfcCoordinateOperation\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CoordinateSpaceDimension\" type=\"ifc:IfcDimensionCount\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Precision\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationItem\" type=\"ifc:IfcGeometricRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcGeometricRepresentationContext\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasSubContexts\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationSubContext\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGeometricRepresentationSubContext\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasCoordinateOperation\" type=\"ifc:IfcCoordinateOperation\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ContextIdentifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ContextType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricRepresentationSubContext\" type=\"ifc:IfcGeometricRepresentationSubContext\" substitutionGroup=\"ifc:IfcGeometricRepresentationContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricRepresentationSubContext\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationSubContext-temp\">\n\t\t\t\t<xs:attribute name=\"TargetScale\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TargetView\" type=\"ifc:IfcGeometricProjectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedTargetView\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeometricSet\" type=\"ifc:IfcGeometricSet\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeometricSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Elements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGeometricSetSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGeometricSetSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeomodel\" type=\"ifc:IfcGeomodel\" substitutionGroup=\"ifc:IfcGeotechnicalAssembly\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeomodel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeotechnicalAssembly\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeoslice\" type=\"ifc:IfcGeoslice\" substitutionGroup=\"ifc:IfcGeotechnicalAssembly\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeoslice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeotechnicalAssembly\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeotechnicalAssembly\" type=\"ifc:IfcGeotechnicalAssembly\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeotechnicalElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeotechnicalAssembly\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeotechnicalElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeotechnicalElement\" type=\"ifc:IfcGeotechnicalElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeotechnicalElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGeotechnicalStratum\" type=\"ifc:IfcGeotechnicalStratum\" substitutionGroup=\"ifc:IfcGeotechnicalElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGeotechnicalStratum\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeotechnicalElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGeotechnicalStratumTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGradientCurve\" type=\"ifc:IfcGradientCurve\" substitutionGroup=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGradientCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseCurve\" type=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"EndPoint\" type=\"ifc:IfcPlacement\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGrid\" type=\"ifc:IfcGrid\" substitutionGroup=\"ifc:IfcPositioningElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGrid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPositioningElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"VAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WAxes\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcGridTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGridAxis\" type=\"ifc:IfcGridAxis\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGridAxis\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"AxisTag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SameSense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGridPlacement\" type=\"ifc:IfcGridPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGridPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlacementLocation\" type=\"ifc:IfcVirtualGridIntersection\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"PlacementRefDirection\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcGridPlacementDirectionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcGroup\" type=\"ifc:IfcGroup\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHalfSpaceSolid\" type=\"ifc:IfcHalfSpaceSolid\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHalfSpaceSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"AgreementFlag\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHeatExchanger\" type=\"ifc:IfcHeatExchanger\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHeatExchanger\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHeatExchangerType\" type=\"ifc:IfcHeatExchangerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHeatExchangerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHeatExchangerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHumidifier\" type=\"ifc:IfcHumidifier\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHumidifier\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcHumidifierType\" type=\"ifc:IfcHumidifierType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcHumidifierType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcHumidifierTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIShapeProfileDef\" type=\"ifc:IfcIShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcImageTexture\" type=\"ifc:IfcImageTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcImageTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:attribute name=\"URLReference\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcImpactProtectionDevice\" type=\"ifc:IfcImpactProtectionDevice\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcImpactProtectionDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcImpactProtectionDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcImpactProtectionDeviceType\" type=\"ifc:IfcImpactProtectionDeviceType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcImpactProtectionDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcImpactProtectionDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedColourMap\" type=\"ifc:IfcIndexedColourMap\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedColourMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Colours\" type=\"ifc:IfcColourRgbList\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Opacity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ColourIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolyCurve\" type=\"ifc:IfcIndexedPolyCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolyCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Points\" type=\"ifc:IfcCartesianPointList\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Segments\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSegmentIndexSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSegmentIndexSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolygonalFace\" type=\"ifc:IfcIndexedPolygonalFace\" substitutionGroup=\"ifc:IfcTessellatedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolygonalFace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedItem\">\n\t\t\t\t<xs:attribute name=\"CoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolygonalFaceWithVoids\" type=\"ifc:IfcIndexedPolygonalFaceWithVoids\" substitutionGroup=\"ifc:IfcIndexedPolygonalFace\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolygonalFaceWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcIndexedPolygonalFace\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerCoordIndices\" minOccurs=\"0\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element name=\"Seq-IfcPositiveInteger-wrapper\" type=\"ifc:Seq-IfcPositiveInteger\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedPolygonalTextureMap\" type=\"ifc:IfcIndexedPolygonalTextureMap\" substitutionGroup=\"ifc:IfcIndexedTextureMap\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedPolygonalTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcIndexedTextureMap\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TexCoordIndices\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextureCoordinateIndices\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTextureCoordinateIndices\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedTextureMap\" type=\"ifc:IfcIndexedTextureMap\" abstract=\"true\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedTextureMap\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TexCoords\" type=\"ifc:IfcTextureVertexList\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIndexedTriangleTextureMap\" type=\"ifc:IfcIndexedTriangleTextureMap\" substitutionGroup=\"ifc:IfcIndexedTextureMap\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIndexedTriangleTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcIndexedTextureMap\">\n\t\t\t\t<xs:attribute name=\"TexCoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInterceptor\" type=\"ifc:IfcInterceptor\" substitutionGroup=\"ifc:IfcFlowTreatmentDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInterceptor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInterceptorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInterceptorType\" type=\"ifc:IfcInterceptorType\" substitutionGroup=\"ifc:IfcFlowTreatmentDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInterceptorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTreatmentDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInterceptorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIntersectionCurve\" type=\"ifc:IfcIntersectionCurve\" substitutionGroup=\"ifc:IfcSurfaceCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIntersectionCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcInventory\" type=\"ifc:IfcInventory\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcInventory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Jurisdiction\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ResponsiblePersons\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPerson\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CurrentValue\" type=\"ifc:IfcCostValue\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"OriginalValue\" type=\"ifc:IfcCostValue\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcInventoryTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastUpdateDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIrregularTimeSeries\" type=\"ifc:IfcIrregularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIrregularTimeSeries\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIrregularTimeSeriesValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIrregularTimeSeriesValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcIrregularTimeSeriesValue\" type=\"ifc:IfcIrregularTimeSeriesValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcIrregularTimeSeriesValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TimeStamp\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcJunctionBox\" type=\"ifc:IfcJunctionBox\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcJunctionBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcJunctionBoxType\" type=\"ifc:IfcJunctionBoxType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcJunctionBoxType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcJunctionBoxTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcKerb\" type=\"ifc:IfcKerb\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcKerb\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcKerbTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcKerbType\" type=\"ifc:IfcKerbType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcKerbType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcKerbTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLShapeProfileDef\" type=\"ifc:IfcLShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LegSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLaborResource\" type=\"ifc:IfcLaborResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLaborResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLaborResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLaborResourceType\" type=\"ifc:IfcLaborResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLaborResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLaborResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLagTime\" type=\"ifc:IfcLagTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLagTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LagValue\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTimeOrRatioSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"DurationType\" type=\"ifc:IfcTaskDurationEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLamp\" type=\"ifc:IfcLamp\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLamp\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLampType\" type=\"ifc:IfcLampType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLampType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLibraryInformation\" type=\"ifc:IfcLibraryInformation\" substitutionGroup=\"ifc:IfcExternalInformation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLibraryInformation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalInformation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Publisher\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcActorSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Version\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"VersionDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Location\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLibraryReference\" type=\"ifc:IfcLibraryReference\" substitutionGroup=\"ifc:IfcExternalReference\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLibraryReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExternalReference\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferencedLibrary\" type=\"ifc:IfcLibraryInformation\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Language\" type=\"ifc:IfcLanguageId\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightDistributionData\" type=\"ifc:IfcLightDistributionData\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightDistributionData\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"MainPlaneAngle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondaryPlaneAngle\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPlaneAngleMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"LuminousIntensity\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLuminousIntensityDistributionMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightFixture\" type=\"ifc:IfcLightFixture\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightFixture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightFixtureType\" type=\"ifc:IfcLightFixtureType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightFixtureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLightFixtureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightIntensityDistribution\" type=\"ifc:IfcLightIntensityDistribution\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightIntensityDistribution\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DistributionData\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLightDistributionData\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLightDistributionData\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LightDistributionCurve\" type=\"ifc:IfcLightDistributionCurveEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSource\" type=\"ifc:IfcLightSource\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LightColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AmbientIntensity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Intensity\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceAmbient\" type=\"ifc:IfcLightSourceAmbient\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceAmbient\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceDirectional\" type=\"ifc:IfcLightSourceDirectional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceDirectional\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceGoniometric\" type=\"ifc:IfcLightSourceGoniometric\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceGoniometric\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ColourAppearance\" type=\"ifc:IfcColourRgb\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"LightDistributionDataSource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLightDistributionDataSourceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ColourTemperature\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LuminousFlux\" type=\"ifc:IfcLuminousFluxMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LightEmissionSource\" type=\"ifc:IfcLightEmissionSourceEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourcePositional\" type=\"ifc:IfcLightSourcePositional\" substitutionGroup=\"ifc:IfcLightSource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourcePositional\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSource\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstantAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DistanceAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"QuadricAttenuation\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLightSourceSpot\" type=\"ifc:IfcLightSourceSpot\" substitutionGroup=\"ifc:IfcLightSourcePositional\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLightSourceSpot\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLightSourcePositional\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ConcentrationExponent\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SpreadAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BeamWidthAngle\" type=\"ifc:IfcPositivePlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLine\" type=\"ifc:IfcLine\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Pnt\" type=\"ifc:IfcCartesianPoint\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Dir\" type=\"ifc:IfcVector\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLinearElement\" type=\"ifc:IfcLinearElement\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLinearElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLinearPlacement\" type=\"ifc:IfcLinearPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLinearPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelativePlacement\" type=\"ifc:IfcAxis2PlacementLinear\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CartesianPosition\" type=\"ifc:IfcAxis2Placement3D\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLinearPositioningElement\" type=\"ifc:IfcLinearPositioningElement\" substitutionGroup=\"ifc:IfcPositioningElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLinearPositioningElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPositioningElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLiquidTerminal\" type=\"ifc:IfcLiquidTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLiquidTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLiquidTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLiquidTerminalType\" type=\"ifc:IfcLiquidTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLiquidTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLiquidTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLocalPlacement\" type=\"ifc:IfcLocalPlacement\" substitutionGroup=\"ifc:IfcObjectPlacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLocalPlacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectPlacement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelativePlacement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcLoop\" type=\"ifc:IfcLoop\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcManifoldSolidBrep\" type=\"ifc:IfcManifoldSolidBrep\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcManifoldSolidBrep\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Outer\" type=\"ifc:IfcClosedShell\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMapConversion\" type=\"ifc:IfcMapConversion\" substitutionGroup=\"ifc:IfcCoordinateOperation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMapConversion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCoordinateOperation\">\n\t\t\t\t<xs:attribute name=\"Eastings\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Northings\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OrthogonalHeight\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"XAxisAbscissa\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"XAxisOrdinate\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Scale\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMapConversionScaled\" type=\"ifc:IfcMapConversionScaled\" substitutionGroup=\"ifc:IfcMapConversion\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMapConversionScaled\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMapConversion\">\n\t\t\t\t<xs:attribute name=\"FactorX\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FactorY\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FactorZ\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMappedItem\" type=\"ifc:IfcMappedItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMappedItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MappingSource\" type=\"ifc:IfcRepresentationMap\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"MappingTarget\" type=\"ifc:IfcCartesianTransformationOperator\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMarineFacility\" type=\"ifc:IfcMarineFacility\" substitutionGroup=\"ifc:IfcFacility\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMarineFacility\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacility\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMarineFacilityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMarinePart\" type=\"ifc:IfcMarinePart\" substitutionGroup=\"ifc:IfcFacilityPart\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMarinePart\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacilityPart\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMarinePartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterial\" type=\"ifc:IfcMaterial\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterial\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasRepresentation\" type=\"ifc:IfcMaterialDefinitionRepresentation\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialClassificationRelationship\" type=\"ifc:IfcMaterialClassificationRelationship\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialClassificationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialClassifications\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcClassificationSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ClassifiedMaterial\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialConstituent\" type=\"ifc:IfcMaterialConstituent\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialConstituent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Fraction\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialConstituentSet\" type=\"ifc:IfcMaterialConstituentSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialConstituentSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialConstituents\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialConstituent\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialConstituent\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialDefinition\" type=\"ifc:IfcMaterialDefinition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialDefinitionRepresentation\" type=\"ifc:IfcMaterialDefinitionRepresentation\" substitutionGroup=\"ifc:IfcProductRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialDefinitionRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayer\" type=\"ifc:IfcMaterialLayer\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsVentilated\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerSet\" type=\"ifc:IfcMaterialLayerSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialLayers\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialLayer\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialLayer\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerSetName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerSetUsage\" type=\"ifc:IfcMaterialLayerSetUsage\" substitutionGroup=\"ifc:IfcMaterialUsageDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerSetUsage\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialUsageDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForLayerSet\" type=\"ifc:IfcMaterialLayerSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerSetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DirectionSense\" type=\"ifc:IfcDirectionSenseEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OffsetFromReferenceLine\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReferenceExtent\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialLayerWithOffsets\" type=\"ifc:IfcMaterialLayerWithOffsets\" substitutionGroup=\"ifc:IfcMaterialLayer\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialLayerWithOffsets\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialLayer\">\n\t\t\t\t<xs:attribute name=\"OffsetDirection\" type=\"ifc:IfcLayerSetDirectionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OffsetValues\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialList\" type=\"ifc:IfcMaterialList\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Materials\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfile\" type=\"ifc:IfcMaterialProfile\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfile\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Material\" type=\"ifc:IfcMaterial\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Profile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Category\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSet\" type=\"ifc:IfcMaterialProfileSet\" substitutionGroup=\"ifc:IfcMaterialDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MaterialProfiles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterialProfile\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterialProfile\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CompositeProfile\" type=\"ifc:IfcCompositeProfileDef\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSetUsage\" type=\"ifc:IfcMaterialProfileSetUsage\" substitutionGroup=\"ifc:IfcMaterialUsageDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSetUsage\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialUsageDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForProfileSet\" type=\"ifc:IfcMaterialProfileSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CardinalPoint\" type=\"ifc:IfcCardinalPointReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReferenceExtent\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileSetUsageTapering\" type=\"ifc:IfcMaterialProfileSetUsageTapering\" substitutionGroup=\"ifc:IfcMaterialProfileSetUsage\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileSetUsageTapering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProfileSetUsage\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ForProfileEndSet\" type=\"ifc:IfcMaterialProfileSet\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CardinalEndPoint\" type=\"ifc:IfcCardinalPointReference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProfileWithOffsets\" type=\"ifc:IfcMaterialProfileWithOffsets\" substitutionGroup=\"ifc:IfcMaterialProfile\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProfileWithOffsets\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcMaterialProfile\">\n\t\t\t\t<xs:attribute name=\"OffsetValues\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialProperties\" type=\"ifc:IfcMaterialProperties\" substitutionGroup=\"ifc:IfcExtendedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtendedProperties\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialRelationship\" type=\"ifc:IfcMaterialRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\" type=\"ifc:IfcMaterial\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedMaterials\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcMaterial\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcMaterial\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MaterialExpression\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMaterialUsageDefinition\" type=\"ifc:IfcMaterialUsageDefinition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMaterialUsageDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMeasureWithUnit\" type=\"ifc:IfcMeasureWithUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMeasureWithUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ValueComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"UnitComponent\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalFastener\" type=\"ifc:IfcMechanicalFastener\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalFastener\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMechanicalFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMechanicalFastenerType\" type=\"ifc:IfcMechanicalFastenerType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMechanicalFastenerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMechanicalFastenerTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMedicalDevice\" type=\"ifc:IfcMedicalDevice\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMedicalDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMedicalDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMedicalDeviceType\" type=\"ifc:IfcMedicalDeviceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMedicalDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMedicalDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMember\" type=\"ifc:IfcMember\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMemberType\" type=\"ifc:IfcMemberType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMemberType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMetric\" type=\"ifc:IfcMetric\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMetric\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DataValue\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMetricValueSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencePath\" type=\"ifc:IfcReference\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Benchmark\" type=\"ifc:IfcBenchmarkEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ValueSource\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcMirroredProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcDerivedProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ParentProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ProfileType\" type=\"ifc:IfcProfileTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProfileName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Label\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMobileTelecommunicationsAppliance\" type=\"ifc:IfcMobileTelecommunicationsAppliance\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMobileTelecommunicationsAppliance\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMobileTelecommunicationsApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMobileTelecommunicationsApplianceType\" type=\"ifc:IfcMobileTelecommunicationsApplianceType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMobileTelecommunicationsApplianceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMobileTelecommunicationsApplianceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMonetaryUnit\" type=\"ifc:IfcMonetaryUnit\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMonetaryUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Currency\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMooringDevice\" type=\"ifc:IfcMooringDevice\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMooringDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMooringDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMooringDeviceType\" type=\"ifc:IfcMooringDeviceType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMooringDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMooringDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMotorConnection\" type=\"ifc:IfcMotorConnection\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMotorConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcMotorConnectionType\" type=\"ifc:IfcMotorConnectionType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcMotorConnectionType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcMotorConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcNamedUnit\" type=\"ifc:IfcNamedUnit\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcNamedUnit\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Dimensions\" type=\"ifc:IfcDimensionalExponents\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UnitType\" type=\"ifc:IfcUnitEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcNavigationElement\" type=\"ifc:IfcNavigationElement\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcNavigationElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcNavigationElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcNavigationElementType\" type=\"ifc:IfcNavigationElementType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcNavigationElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcNavigationElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObject\" type=\"ifc:IfcObject\" abstract=\"true\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObject\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IsDeclaredBy\" type=\"ifc:IfcRelDefinesByObject\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"IsTypedBy\" type=\"ifc:IfcRelDefinesByType\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"IsDefinedBy\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelDefinesByProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelDefinesByProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ObjectType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjectDefinition\" type=\"ifc:IfcObjectDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjectDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IsNestedBy\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelNests\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelNests\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"IsDecomposedBy\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelAggregates\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelAggregates\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjectPlacement\" type=\"ifc:IfcObjectPlacement\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjectPlacement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PlacementRelTo\" type=\"ifc:IfcObjectPlacement\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcObjective\" type=\"ifc:IfcObjective\" substitutionGroup=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcObjective\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstraint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BenchmarkValues\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcConstraint\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcConstraint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LogicalAggregator\" type=\"ifc:IfcLogicalOperatorEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ObjectiveQualifier\" type=\"ifc:IfcObjectiveEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedQualifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOccupant\" type=\"ifc:IfcOccupant\" substitutionGroup=\"ifc:IfcActor\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOccupant\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcActor\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOccupantTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurve\" type=\"ifc:IfcOffsetCurve\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurve\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurve2D\" type=\"ifc:IfcOffsetCurve2D\" substitutionGroup=\"ifc:IfcOffsetCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurve2D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOffsetCurve\">\n\t\t\t\t<xs:attribute name=\"Distance\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurve3D\" type=\"ifc:IfcOffsetCurve3D\" substitutionGroup=\"ifc:IfcOffsetCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurve3D\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOffsetCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RefDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Distance\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SelfIntersect\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOffsetCurveByDistances\" type=\"ifc:IfcOffsetCurveByDistances\" substitutionGroup=\"ifc:IfcOffsetCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOffsetCurveByDistances\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOffsetCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OffsetValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPointByDistanceExpression\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPointByDistanceExpression\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpenCrossProfileDef\" type=\"ifc:IfcOpenCrossProfileDef\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpenCrossProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OffsetPoint\" type=\"ifc:IfcCartesianPoint\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"HorizontalWidths\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Widths\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcNonNegativeLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Slopes\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPlaneAngleMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Tags\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpenShell\" type=\"ifc:IfcOpenShell\" substitutionGroup=\"ifc:IfcConnectedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpenShell\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConnectedFaceSet\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOpeningElement\" type=\"ifc:IfcOpeningElement\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOpeningElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasFillings\" type=\"ifc:IfcRelFillsElement\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"?\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOpeningElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrganization\" type=\"ifc:IfcOrganization\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrganization\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Roles\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Addresses\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAddress\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrganizationRelationship\" type=\"ifc:IfcOrganizationRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrganizationRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingOrganization\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedOrganizations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrganization\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrganization\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcOrientedEdge-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StyledByItem\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStyledItem\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStyledItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOrientedEdge\" type=\"ifc:IfcOrientedEdge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOrientedEdge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcOrientedEdge-temp\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeElement\" type=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Orientation\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOuterBoundaryCurve\" type=\"ifc:IfcOuterBoundaryCurve\" substitutionGroup=\"ifc:IfcBoundaryCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOuterBoundaryCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundaryCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOutlet\" type=\"ifc:IfcOutlet\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOutlet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOutletType\" type=\"ifc:IfcOutletType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOutletType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcOutletTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcOwnerHistory\" type=\"ifc:IfcOwnerHistory\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcOwnerHistory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OwningUser\" type=\"ifc:IfcPersonAndOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"OwningApplication\" type=\"ifc:IfcApplication\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"LastModifyingUser\" type=\"ifc:IfcPersonAndOrganization\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"LastModifyingApplication\" type=\"ifc:IfcApplication\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"State\" type=\"ifc:IfcStateEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ChangeAction\" type=\"ifc:IfcChangeActionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LastModifiedDate\" type=\"ifc:IfcTimeStamp\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CreationDate\" type=\"ifc:IfcTimeStamp\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcParameterizedProfileDef\" type=\"ifc:IfcParameterizedProfileDef\" abstract=\"true\" substitutionGroup=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcParameterizedProfileDef\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProfileDef\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement2D\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPath\" type=\"ifc:IfcPath\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPath\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EdgeList\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcOrientedEdge\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcOrientedEdge\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPavement\" type=\"ifc:IfcPavement\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPavement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPavementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPavementType\" type=\"ifc:IfcPavementType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPavementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPavementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPcurve\" type=\"ifc:IfcPcurve\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPcurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReferenceCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPerformanceHistory\" type=\"ifc:IfcPerformanceHistory\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPerformanceHistory\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"LifeCyclePhase\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPerformanceHistoryTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPermeableCoveringProperties\" type=\"ifc:IfcPermeableCoveringProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPermeableCoveringProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcPermeableCoveringOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPermit\" type=\"ifc:IfcPermit\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPermit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPermitTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPerson\" type=\"ifc:IfcPerson\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPerson\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Roles\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Addresses\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAddress\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAddress\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FamilyName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"GivenName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MiddleNames\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PrefixTitles\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"SuffixTitles\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPersonAndOrganization\" type=\"ifc:IfcPersonAndOrganization\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPersonAndOrganization\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ThePerson\" type=\"ifc:IfcPerson\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TheOrganization\" type=\"ifc:IfcOrganization\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Roles\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcActorRole\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcActorRole\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalComplexQuantity\" type=\"ifc:IfcPhysicalComplexQuantity\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalComplexQuantity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasQuantities\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Discrimination\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Quality\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Usage\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalQuantity\" type=\"ifc:IfcPhysicalQuantity\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalQuantity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPhysicalSimpleQuantity\" type=\"ifc:IfcPhysicalSimpleQuantity\" abstract=\"true\" substitutionGroup=\"ifc:IfcPhysicalQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPhysicalSimpleQuantity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalQuantity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" type=\"ifc:IfcNamedUnit\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPile\" type=\"ifc:IfcPile\" substitutionGroup=\"ifc:IfcDeepFoundation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPile\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDeepFoundation\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstructionType\" type=\"ifc:IfcPileConstructionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPileType\" type=\"ifc:IfcPileType\" substitutionGroup=\"ifc:IfcDeepFoundationType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPileType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDeepFoundationType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPileTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeFitting\" type=\"ifc:IfcPipeFitting\" substitutionGroup=\"ifc:IfcFlowFitting\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeFitting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFitting\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeFittingType\" type=\"ifc:IfcPipeFittingType\" substitutionGroup=\"ifc:IfcFlowFittingType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeFittingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowFittingType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeFittingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeSegment\" type=\"ifc:IfcPipeSegment\" substitutionGroup=\"ifc:IfcFlowSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegment\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPipeSegmentType\" type=\"ifc:IfcPipeSegmentType\" substitutionGroup=\"ifc:IfcFlowSegmentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPipeSegmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowSegmentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPipeSegmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPixelTexture\" type=\"ifc:IfcPixelTexture\" substitutionGroup=\"ifc:IfcSurfaceTexture\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPixelTexture\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceTexture\">\n\t\t\t\t<xs:attribute name=\"Width\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ColourComponents\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Pixel\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcBinary\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlacement\" type=\"ifc:IfcPlacement\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlacement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Location\" type=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlanarBox\" type=\"ifc:IfcPlanarBox\" substitutionGroup=\"ifc:IfcPlanarExtent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlanarBox\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPlanarExtent\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Placement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlanarExtent\" type=\"ifc:IfcPlanarExtent\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlanarExtent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:attribute name=\"SizeInX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SizeInY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlane\" type=\"ifc:IfcPlane\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlane\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlate\" type=\"ifc:IfcPlate\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPlateType\" type=\"ifc:IfcPlateType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPlateType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPlateTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPoint\" type=\"ifc:IfcPoint\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPoint\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPointByDistanceExpression\" type=\"ifc:IfcPointByDistanceExpression\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPointByDistanceExpression\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DistanceAlong\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcCurveMeasureSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OffsetLateral\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OffsetVertical\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OffsetLongitudinal\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPointOnCurve\" type=\"ifc:IfcPointOnCurve\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPointOnCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PointParameter\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPointOnSurface\" type=\"ifc:IfcPointOnSurface\" substitutionGroup=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPointOnSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPoint\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PointParameterU\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PointParameterV\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolyLoop\" type=\"ifc:IfcPolyLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolyLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Polygon\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"3\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolygonalBoundedHalfSpace\" type=\"ifc:IfcPolygonalBoundedHalfSpace\" substitutionGroup=\"ifc:IfcHalfSpaceSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolygonalBoundedHalfSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcHalfSpaceSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"PolygonalBoundary\" type=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolygonalFaceSet\" type=\"ifc:IfcPolygonalFaceSet\" substitutionGroup=\"ifc:IfcTessellatedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolygonalFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedFaceSet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Faces\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIndexedPolygonalFace\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIndexedPolygonalFace\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Closed\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PnIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolyline\" type=\"ifc:IfcPolyline\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolyline\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Points\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCartesianPoint\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPolynomialCurve\" type=\"ifc:IfcPolynomialCurve\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPolynomialCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcPlacement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CoefficientsX\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"CoefficientsY\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"CoefficientsZ\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPort\" type=\"ifc:IfcPort\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPort\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPositioningElement\" type=\"ifc:IfcPositioningElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPositioningElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPostalAddress\" type=\"ifc:IfcPostalAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPostalAddress\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AddressLines\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"InternalLocation\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PostalBox\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Town\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Region\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PostalCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Country\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedColour\" type=\"ifc:IfcPreDefinedColour\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedColour\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedCurveFont\" type=\"ifc:IfcPreDefinedCurveFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedCurveFont\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedItem\" type=\"ifc:IfcPreDefinedItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedProperties\" type=\"ifc:IfcPreDefinedProperties\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedProperties\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedPropertySet\" type=\"ifc:IfcPreDefinedPropertySet\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedPropertySet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPreDefinedTextFont\" type=\"ifc:IfcPreDefinedTextFont\" abstract=\"true\" substitutionGroup=\"ifc:IfcPreDefinedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPreDefinedTextFont\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationItem\" type=\"ifc:IfcPresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationLayerAssignment\" type=\"ifc:IfcPresentationLayerAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationLayerAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AssignedItems\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLayeredItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLayeredItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationLayerWithStyle\" type=\"ifc:IfcPresentationLayerWithStyle\" substitutionGroup=\"ifc:IfcPresentationLayerAssignment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationLayerWithStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationLayerAssignment\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LayerStyles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPresentationStyle\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPresentationStyle\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LayerOn\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LayerFrozen\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LayerBlocked\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPresentationStyle\" type=\"ifc:IfcPresentationStyle\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPresentationStyle\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcedure\" type=\"ifc:IfcProcedure\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcedure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProcedureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcedureType\" type=\"ifc:IfcProcedureType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcedureType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProcedureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProcess\" type=\"ifc:IfcProcess\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProcess\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProduct\" type=\"ifc:IfcProduct\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProduct\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ObjectPlacement\" type=\"ifc:IfcObjectPlacement\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Representation\" type=\"ifc:IfcProductRepresentation\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProductDefinitionShape\" type=\"ifc:IfcProductDefinitionShape\" substitutionGroup=\"ifc:IfcProductRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProductDefinitionShape\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProductRepresentation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasShapeAspects\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShapeAspect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProductRepresentation\" type=\"ifc:IfcProductRepresentation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProductRepresentation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Representations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentation\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentation\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProfileDef\" type=\"ifc:IfcProfileDef\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileProperties\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ProfileType\" type=\"ifc:IfcProfileTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProfileName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProfileProperties\" type=\"ifc:IfcProfileProperties\" substitutionGroup=\"ifc:IfcExtendedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProfileProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcExtendedProperties\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProject\" type=\"ifc:IfcProject\" substitutionGroup=\"ifc:IfcContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcContext\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectLibrary\" type=\"ifc:IfcProjectLibrary\" substitutionGroup=\"ifc:IfcContext\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectLibrary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcContext\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectOrder\" type=\"ifc:IfcProjectOrder\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectOrder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProjectOrderTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectedCRS\" type=\"ifc:IfcProjectedCRS\" substitutionGroup=\"ifc:IfcCoordinateReferenceSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectedCRS\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCoordinateReferenceSystem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MapUnit\" type=\"ifc:IfcNamedUnit\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"VerticalDatum\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MapProjection\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MapZone\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProjectionElement\" type=\"ifc:IfcProjectionElement\" substitutionGroup=\"ifc:IfcFeatureElementAddition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProjectionElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementAddition\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProjectionElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProperty\" type=\"ifc:IfcProperty\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProperty\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Specification\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyAbstraction\" type=\"ifc:IfcPropertyAbstraction\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyAbstraction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyBoundedValue\" type=\"ifc:IfcPropertyBoundedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyBoundedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"UpperBoundValue\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LowerBoundValue\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SetPointValue\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyDefinition\" type=\"ifc:IfcPropertyDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyDependencyRelationship\" type=\"ifc:IfcPropertyDependencyRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyDependencyRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DependingProperty\" type=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"DependantProperty\" type=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyEnumeratedValue\" type=\"ifc:IfcPropertyEnumeratedValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyEnumeratedValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EnumerationValues\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"EnumerationReference\" type=\"ifc:IfcPropertyEnumeration\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyEnumeration\" type=\"ifc:IfcPropertyEnumeration\" substitutionGroup=\"ifc:IfcPropertyAbstraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyEnumeration\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyAbstraction\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EnumerationValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyListValue\" type=\"ifc:IfcPropertyListValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyListValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyReferenceValue\" type=\"ifc:IfcPropertyReferenceValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyReferenceValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"PropertyReference\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcObjectReferenceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"UsageName\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySet\" type=\"ifc:IfcPropertySet\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasProperties\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProperty\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProperty\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySetDefinition\" type=\"ifc:IfcPropertySetDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySetDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySetTemplate\" type=\"ifc:IfcPropertySetTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplateDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySetTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplateDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertyTemplates\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertyTemplate\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertyTemplate\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcPropertySetTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ApplicableEntity\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertySingleValue\" type=\"ifc:IfcPropertySingleValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertySingleValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"NominalValue\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Unit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTableValue\" type=\"ifc:IfcPropertyTableValue\" substitutionGroup=\"ifc:IfcSimpleProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTableValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSimpleProperty\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DefiningValues\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefinedValues\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefiningUnit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DefinedUnit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CurveInterpolation\" type=\"ifc:IfcCurveInterpolationEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTemplate\" type=\"ifc:IfcPropertyTemplate\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyTemplateDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTemplate\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplateDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPropertyTemplateDefinition\" type=\"ifc:IfcPropertyTemplateDefinition\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertyDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPropertyTemplateDefinition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDevice\" type=\"ifc:IfcProtectiveDevice\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceTrippingUnit\" type=\"ifc:IfcProtectiveDeviceTrippingUnit\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceTrippingUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceTrippingUnitType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceTrippingUnitType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTrippingUnitTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcProtectiveDeviceType\" type=\"ifc:IfcProtectiveDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcProtectiveDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcProtectiveDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPump\" type=\"ifc:IfcPump\" substitutionGroup=\"ifc:IfcFlowMovingDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPump\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcPumpType\" type=\"ifc:IfcPumpType\" substitutionGroup=\"ifc:IfcFlowMovingDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcPumpType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowMovingDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcPumpTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityArea\" type=\"ifc:IfcQuantityArea\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"AreaValue\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityCount\" type=\"ifc:IfcQuantityCount\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityCount\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"CountValue\" type=\"ifc:IfcCountMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityLength\" type=\"ifc:IfcQuantityLength\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityLength\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"LengthValue\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityNumber\" type=\"ifc:IfcQuantityNumber\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityNumber\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"NumberValue\" type=\"ifc:IfcNumericMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantitySet\" type=\"ifc:IfcQuantitySet\" abstract=\"true\" substitutionGroup=\"ifc:IfcPropertySetDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantitySet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinition\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityTime\" type=\"ifc:IfcQuantityTime\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"TimeValue\" type=\"ifc:IfcTimeMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityVolume\" type=\"ifc:IfcQuantityVolume\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityVolume\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"VolumeValue\" type=\"ifc:IfcVolumeMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcQuantityWeight\" type=\"ifc:IfcQuantityWeight\" substitutionGroup=\"ifc:IfcPhysicalSimpleQuantity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcQuantityWeight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPhysicalSimpleQuantity\">\n\t\t\t\t<xs:attribute name=\"WeightValue\" type=\"ifc:IfcMassMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Formula\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRail\" type=\"ifc:IfcRail\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRail\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailType\" type=\"ifc:IfcRailType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailing\" type=\"ifc:IfcRailing\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailing\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailingType\" type=\"ifc:IfcRailingType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailingType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailingTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailway\" type=\"ifc:IfcRailway\" substitutionGroup=\"ifc:IfcFacility\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailway\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacility\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailwayTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRailwayPart\" type=\"ifc:IfcRailwayPart\" substitutionGroup=\"ifc:IfcFacilityPart\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRailwayPart\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacilityPart\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRailwayPartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRamp\" type=\"ifc:IfcRamp\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRamp\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampFlight\" type=\"ifc:IfcRampFlight\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampFlight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampFlightType\" type=\"ifc:IfcRampFlightType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampFlightType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRampType\" type=\"ifc:IfcRampType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRampType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRampTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRationalBSplineCurveWithKnots\" type=\"ifc:IfcRationalBSplineCurveWithKnots\" substitutionGroup=\"ifc:IfcBSplineCurveWithKnots\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRationalBSplineCurveWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineCurveWithKnots\">\n\t\t\t\t<xs:attribute name=\"WeightsData\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRationalBSplineSurfaceWithKnots\" type=\"ifc:IfcRationalBSplineSurfaceWithKnots\" substitutionGroup=\"ifc:IfcBSplineSurfaceWithKnots\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRationalBSplineSurfaceWithKnots\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBSplineSurfaceWithKnots\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WeightsData\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\" minOccurs=\"4\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcReal-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangleHollowProfileDef\" type=\"ifc:IfcRectangleHollowProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangleHollowProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\n\t\t\t\t<xs:attribute name=\"WallThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InnerFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OuterFilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangleProfileDef\" type=\"ifc:IfcRectangleProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"XDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangularPyramid\" type=\"ifc:IfcRectangularPyramid\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangularPyramid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"XLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRectangularTrimmedSurface\" type=\"ifc:IfcRectangularTrimmedSurface\" substitutionGroup=\"ifc:IfcBoundedSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRectangularTrimmedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"U1\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"V1\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"U2\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"V2\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Usense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Vsense\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRecurrencePattern\" type=\"ifc:IfcRecurrencePattern\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRecurrencePattern\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TimePeriods\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimePeriod\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTimePeriod\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RecurrenceType\" type=\"ifc:IfcRecurrenceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DayComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcDayInMonthNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"WeekdayComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcDayInWeekNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"MonthComponent\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcMonthInYearNumber\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Position\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Interval\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Occurrences\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReference\" type=\"ifc:IfcReference\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReference\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"InnerReference\" type=\"ifc:IfcReference\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TypeIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AttributeIdentifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InstanceName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ListPositions\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReferent\" type=\"ifc:IfcReferent\" substitutionGroup=\"ifc:IfcPositioningElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReferent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPositioningElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReferentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRegularTimeSeries\" type=\"ifc:IfcRegularTimeSeries\" substitutionGroup=\"ifc:IfcTimeSeries\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRegularTimeSeries\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTimeSeries\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTimeSeriesValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTimeSeriesValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TimeStep\" type=\"ifc:IfcTimeMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcedSoil\" type=\"ifc:IfcReinforcedSoil\" substitutionGroup=\"ifc:IfcEarthworksElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcedSoil\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEarthworksElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcedSoilTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcementBarProperties\" type=\"ifc:IfcReinforcementBarProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcementBarProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:attribute name=\"TotalCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SteelGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EffectiveDepth\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalBarDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarCount\" type=\"ifc:IfcCountMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcementDefinitionProperties\" type=\"ifc:IfcReinforcementDefinitionProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcementDefinitionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReinforcementSectionDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSectionReinforcementProperties\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSectionReinforcementProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"DefinitionType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingBar\" type=\"ifc:IfcReinforcingBar\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingBar\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingBarTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingBarType\" type=\"ifc:IfcReinforcingBarType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingBarType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BendingParameters\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBendingParameterSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBendingParameterSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingBarTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BarSurface\" type=\"ifc:IfcReinforcingBarSurfaceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BendingShapeCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingElement\" type=\"ifc:IfcReinforcingElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"SteelGrade\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingElementType\" type=\"ifc:IfcReinforcingElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingMesh\" type=\"ifc:IfcReinforcingMesh\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingMesh\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"MeshLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingMeshTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReinforcingMeshType\" type=\"ifc:IfcReinforcingMeshType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReinforcingMeshType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BendingParameters\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcBendingParameterSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcBendingParameterSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcReinforcingMeshTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MeshWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarNominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarCrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransverseBarSpacing\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BendingShapeCode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAdheresToElement\" type=\"ifc:IfcRelAdheresToElement\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAdheresToElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedSurfaceFeatures\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceFeature\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceFeature\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAggregates\" type=\"ifc:IfcRelAggregates\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAggregates\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssigns\" type=\"ifc:IfcRelAssigns\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssigns\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RelatedObjectsType\" type=\"ifc:IfcStrippedOptional\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToActor\" type=\"ifc:IfcRelAssignsToActor\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToActor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingActor\" type=\"ifc:IfcActor\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ActingRole\" type=\"ifc:IfcActorRole\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToControl\" type=\"ifc:IfcRelAssignsToControl\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToControl\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingControl\" type=\"ifc:IfcControl\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToGroup\" type=\"ifc:IfcRelAssignsToGroup\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingGroup\" type=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToGroupByFactor\" type=\"ifc:IfcRelAssignsToGroupByFactor\" substitutionGroup=\"ifc:IfcRelAssignsToGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToGroupByFactor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssignsToGroup\">\n\t\t\t\t<xs:attribute name=\"Factor\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToProcess\" type=\"ifc:IfcRelAssignsToProcess\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToProcess\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProcess\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcProcessSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"QuantityInProcess\" type=\"ifc:IfcMeasureWithUnit\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToProduct\" type=\"ifc:IfcRelAssignsToProduct\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToProduct\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProduct\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcProductSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssignsToResource\" type=\"ifc:IfcRelAssignsToResource\" substitutionGroup=\"ifc:IfcRelAssigns\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssignsToResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssigns\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingResource\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociates\" type=\"ifc:IfcRelAssociates\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociates\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinitionSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDefinitionSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesApproval\" type=\"ifc:IfcRelAssociatesApproval\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesApproval\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesClassification\" type=\"ifc:IfcRelAssociatesClassification\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesClassification\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingClassification\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcClassificationSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesConstraint\" type=\"ifc:IfcRelAssociatesConstraint\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesConstraint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\" type=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Intent\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesDocument\" type=\"ifc:IfcRelAssociatesDocument\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesDocument\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingDocument\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDocumentSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesLibrary\" type=\"ifc:IfcRelAssociatesLibrary\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesLibrary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingLibrary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcLibrarySelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesMaterial\" type=\"ifc:IfcRelAssociatesMaterial\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesMaterial\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingMaterial\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMaterialSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelAssociatesProfileDef\" type=\"ifc:IfcRelAssociatesProfileDef\" substitutionGroup=\"ifc:IfcRelAssociates\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelAssociatesProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelAssociates\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProfileDef\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnects\" type=\"ifc:IfcRelConnects\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnects\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsElements\" type=\"ifc:IfcRelConnectsElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPathElements\" type=\"ifc:IfcRelConnectsPathElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPathElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\n\t\t\t\t<xs:attribute name=\"RelatingPriorities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"0\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"RelatedPriorities\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"0\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"RelatedConnectionType\" type=\"ifc:IfcConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RelatingConnectionType\" type=\"ifc:IfcConnectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPortToElement\" type=\"ifc:IfcRelConnectsPortToElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPortToElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedElement\" type=\"ifc:IfcDistributionElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsPorts\" type=\"ifc:IfcRelConnectsPorts\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsPorts\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedPort\" type=\"ifc:IfcPort\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RealizingElement\" type=\"ifc:IfcElement\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsStructuralActivity\" type=\"ifc:IfcRelConnectsStructuralActivity\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsStructuralActivity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcStructuralActivityAssignmentSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralActivity\" type=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsStructuralMember\" type=\"ifc:IfcRelConnectsStructuralMember\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsStructuralMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingStructuralMember\" type=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedStructuralConnection\" type=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" type=\"ifc:IfcBoundaryCondition\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"AdditionalConditions\" type=\"ifc:IfcStructuralConnectionCondition\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ConditionCoordinateSystem\" type=\"ifc:IfcAxis2Placement3D\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SupportedLength\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsWithEccentricity\" type=\"ifc:IfcRelConnectsWithEccentricity\" substitutionGroup=\"ifc:IfcRelConnectsStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsWithEccentricity\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConnectionConstraint\" type=\"ifc:IfcConnectionGeometry\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelConnectsWithRealizingElements\" type=\"ifc:IfcRelConnectsWithRealizingElements\" substitutionGroup=\"ifc:IfcRelConnectsElements\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelConnectsWithRealizingElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnectsElements\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RealizingElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ConnectionType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelContainedInSpatialStructure\" type=\"ifc:IfcRelContainedInSpatialStructure\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelContainedInSpatialStructure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProduct\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelCoversBldgElements\" type=\"ifc:IfcRelCoversBldgElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelCoversBldgElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCovering\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelCoversSpaces\" type=\"ifc:IfcRelCoversSpaces\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelCoversSpaces\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSpace\" type=\"ifc:IfcSpace\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedCoverings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcCovering\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcCovering\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDeclares\" type=\"ifc:IfcRelDeclares\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDeclares\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcDefinitionSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDefinitionSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDecomposes\" type=\"ifc:IfcRelDecomposes\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDecomposes\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefines\" type=\"ifc:IfcRelDefines\" abstract=\"true\" substitutionGroup=\"ifc:IfcRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefines\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelationship\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByObject\" type=\"ifc:IfcRelDefinesByObject\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByObject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObject\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObject\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByProperties\" type=\"ifc:IfcRelDefinesByProperties\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPropertyDefinition\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcPropertySetDefinitionSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByTemplate\" type=\"ifc:IfcRelDefinesByTemplate\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedPropertySets\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingTemplate\" type=\"ifc:IfcPropertySetTemplate\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelDefinesByType\" type=\"ifc:IfcRelDefinesByType\" substitutionGroup=\"ifc:IfcRelDefines\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelDefinesByType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDefines\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingType\" type=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelFillsElement\" type=\"ifc:IfcRelFillsElement\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelFillsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelFlowControlElements\" type=\"ifc:IfcRelFlowControlElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelFlowControlElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedControlElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcDistributionControlElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcDistributionControlElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingFlowElement\" type=\"ifc:IfcDistributionFlowElement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelInterferesElements\" type=\"ifc:IfcRelInterferesElements\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelInterferesElements\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcInterferenceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedElement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcInterferenceSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"InterferenceGeometry\" type=\"ifc:IfcConnectionGeometry\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"InterferenceSpace\" type=\"ifc:IfcSpatialZone\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"InterferenceType\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ImpliedOrder\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelNests\" type=\"ifc:IfcRelNests\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelNests\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcObjectDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelPositions\" type=\"ifc:IfcRelPositions\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelPositions\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingPositioningElement\" type=\"ifc:IfcPositioningElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedProducts\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProduct\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProduct\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelProjectsElement\" type=\"ifc:IfcRelProjectsElement\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelProjectsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedFeatureElement\" type=\"ifc:IfcFeatureElementAddition\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelReferencedInSpatialStructure\" type=\"ifc:IfcRelReferencedInSpatialStructure\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelReferencedInSpatialStructure\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedElements\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpatialReferenceSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSpatialReferenceSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSequence\" type=\"ifc:IfcRelSequence\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSequence\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingProcess\" type=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedProcess\" type=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TimeLag\" type=\"ifc:IfcLagTime\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SequenceType\" type=\"ifc:IfcSequenceEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedSequenceType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelServicesBuildings\" type=\"ifc:IfcRelServicesBuildings\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelServicesBuildings\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSystem\" type=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedBuildings\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSpatialElement\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSpatialElement\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary\" type=\"ifc:IfcRelSpaceBoundary\" substitutionGroup=\"ifc:IfcRelConnects\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelConnects\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingSpace\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpaceBoundarySelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatedBuildingElement\" type=\"ifc:IfcElement\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ConnectionGeometry\" type=\"ifc:IfcConnectionGeometry\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PhysicalOrVirtualBoundary\" type=\"ifc:IfcPhysicalOrVirtualEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InternalOrExternalBoundary\" type=\"ifc:IfcInternalOrExternalEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary1stLevel\" type=\"ifc:IfcRelSpaceBoundary1stLevel\" substitutionGroup=\"ifc:IfcRelSpaceBoundary\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary1stLevel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelSpaceBoundary\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentBoundary\" type=\"ifc:IfcRelSpaceBoundary1stLevel\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelSpaceBoundary2ndLevel\" type=\"ifc:IfcRelSpaceBoundary2ndLevel\" substitutionGroup=\"ifc:IfcRelSpaceBoundary1stLevel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelSpaceBoundary2ndLevel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelSpaceBoundary1stLevel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CorrespondingBoundary\" type=\"ifc:IfcRelSpaceBoundary2ndLevel\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelVoidsElement\" type=\"ifc:IfcRelVoidsElement\" substitutionGroup=\"ifc:IfcRelDecomposes\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelVoidsElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRelDecomposes\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedOpeningElement\" type=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRelationship\" type=\"ifc:IfcRelationship\" abstract=\"true\" substitutionGroup=\"ifc:IfcRoot\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRelationship\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRoot\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcReparametrisedCompositeCurveSegment\" type=\"ifc:IfcReparametrisedCompositeCurveSegment\" substitutionGroup=\"ifc:IfcCompositeCurveSegment\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcReparametrisedCompositeCurveSegment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurveSegment\">\n\t\t\t\t<xs:attribute name=\"ParamLength\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentation\" type=\"ifc:IfcRepresentation\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentation\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContextOfItems\" type=\"ifc:IfcRepresentationContext\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Items\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationItem\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RepresentationIdentifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RepresentationType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationContext\" type=\"ifc:IfcRepresentationContext\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationContext\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"ContextIdentifier\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ContextType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationItem\" type=\"ifc:IfcRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StyledByItem\" type=\"ifc:IfcStyledItem\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRepresentationMap\" type=\"ifc:IfcRepresentationMap\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRepresentationMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"MappingOrigin\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MappedRepresentation\" type=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResource\" type=\"ifc:IfcResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceApprovalRelationship\" type=\"ifc:IfcResourceApprovalRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceApprovalRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"RelatingApproval\" type=\"ifc:IfcApproval\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceConstraintRelationship\" type=\"ifc:IfcResourceConstraintRelationship\" substitutionGroup=\"ifc:IfcResourceLevelRelationship\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceConstraintRelationship\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcResourceLevelRelationship\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RelatingConstraint\" type=\"ifc:IfcConstraint\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"RelatedResourceObjects\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcResourceObjectSelect\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcResourceObjectSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceLevelRelationship\" type=\"ifc:IfcResourceLevelRelationship\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceLevelRelationship\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcResourceTime\" type=\"ifc:IfcResourceTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcResourceTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"ScheduleWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleContour\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LevelingDelay\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsOverAllocated\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StatusTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingWork\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingUsage\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Completion\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRevolvedAreaSolid\" type=\"ifc:IfcRevolvedAreaSolid\" substitutionGroup=\"ifc:IfcSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRevolvedAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcAxis1Placement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Angle\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRevolvedAreaSolidTapered\" type=\"ifc:IfcRevolvedAreaSolidTapered\" substitutionGroup=\"ifc:IfcRevolvedAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRevolvedAreaSolidTapered\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRevolvedAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"EndSweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRightCircularCone\" type=\"ifc:IfcRightCircularCone\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRightCircularCone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"BottomRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRightCircularCylinder\" type=\"ifc:IfcRightCircularCylinder\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRightCircularCylinder\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRigidOperation\" type=\"ifc:IfcRigidOperation\" substitutionGroup=\"ifc:IfcCoordinateOperation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRigidOperation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCoordinateOperation\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FirstCoordinate\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondCoordinate\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcMeasureValue\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Height\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoad\" type=\"ifc:IfcRoad\" substitutionGroup=\"ifc:IfcFacility\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoad\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacility\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRoadTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoadPart\" type=\"ifc:IfcRoadPart\" substitutionGroup=\"ifc:IfcFacilityPart\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoadPart\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFacilityPart\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRoadPartTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoof\" type=\"ifc:IfcRoof\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoof\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRoofTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoofType\" type=\"ifc:IfcRoofType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoofType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcRoofTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoot\" type=\"ifc:IfcRoot\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoot\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OwnerHistory\" type=\"ifc:IfcOwnerHistory\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"GlobalId\" type=\"ifc:IfcGloballyUniqueId\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcRoundedRectangleProfileDef\" type=\"ifc:IfcRoundedRectangleProfileDef\" substitutionGroup=\"ifc:IfcRectangleProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcRoundedRectangleProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRectangleProfileDef\">\n\t\t\t\t<xs:attribute name=\"RoundingRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:complexType name=\"IfcSIUnit-temp\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:restriction base=\"ifc:IfcNamedUnit\">\n\t\t\t\t<xs:attribute name=\"UnitType\" type=\"ifc:IfcUnitEnum\" use=\"optional\"/>\n\t\t\t</xs:restriction>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSIUnit\" type=\"ifc:IfcSIUnit\" substitutionGroup=\"ifc:IfcNamedUnit\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSIUnit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSIUnit-temp\">\n\t\t\t\t<xs:attribute name=\"Prefix\" type=\"ifc:IfcSIPrefix\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcSIUnitName\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSanitaryTerminal\" type=\"ifc:IfcSanitaryTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSanitaryTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSanitaryTerminalType\" type=\"ifc:IfcSanitaryTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSanitaryTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSanitaryTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSchedulingTime\" type=\"ifc:IfcSchedulingTime\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSchedulingTime\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedDataOrigin\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSeamCurve\" type=\"ifc:IfcSeamCurve\" substitutionGroup=\"ifc:IfcSurfaceCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSeamCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSecondOrderPolynomialSpiral\" type=\"ifc:IfcSecondOrderPolynomialSpiral\" substitutionGroup=\"ifc:IfcSpiral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSecondOrderPolynomialSpiral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpiral\">\n\t\t\t\t<xs:attribute name=\"QuadraticTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstantTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionProperties\" type=\"ifc:IfcSectionProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"StartProfile\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"EndProfile\" type=\"ifc:IfcProfileDef\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SectionType\" type=\"ifc:IfcSectionTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionReinforcementProperties\" type=\"ifc:IfcSectionReinforcementProperties\" substitutionGroup=\"ifc:IfcPreDefinedProperties\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionReinforcementProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedProperties\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SectionDefinition\" type=\"ifc:IfcSectionProperties\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CrossSectionReinforcementDefinitions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcReinforcementBarProperties\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcReinforcementBarProperties\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LongitudinalStartPosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongitudinalEndPosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransversePosition\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ReinforcementRole\" type=\"ifc:IfcReinforcingBarRoleEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionedSolid\" type=\"ifc:IfcSectionedSolid\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionedSolid\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CrossSections\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionedSolidHorizontal\" type=\"ifc:IfcSectionedSolidHorizontal\" substitutionGroup=\"ifc:IfcSectionedSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionedSolidHorizontal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSectionedSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CrossSectionPositions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2PlacementLinear\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAxis2PlacementLinear\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionedSpine\" type=\"ifc:IfcSectionedSpine\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionedSpine\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SpineCurve\" type=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CrossSections\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CrossSectionPositions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAxis2Placement3D\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSectionedSurface\" type=\"ifc:IfcSectionedSurface\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSectionedSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"CrossSectionPositions\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcAxis2PlacementLinear\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcAxis2PlacementLinear\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"CrossSections\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcProfileDef\" minOccurs=\"2\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcProfileDef\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSegment\" type=\"ifc:IfcSegment\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSegment\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:attribute name=\"Transition\" type=\"ifc:IfcTransitionCode\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSegmentedReferenceCurve\" type=\"ifc:IfcSegmentedReferenceCurve\" substitutionGroup=\"ifc:IfcCompositeCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSegmentedReferenceCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCompositeCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BaseCurve\" type=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"EndPoint\" type=\"ifc:IfcPlacement\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSensor\" type=\"ifc:IfcSensor\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSensor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSensorType\" type=\"ifc:IfcSensorType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSensorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSensorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSeventhOrderPolynomialSpiral\" type=\"ifc:IfcSeventhOrderPolynomialSpiral\" substitutionGroup=\"ifc:IfcSpiral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSeventhOrderPolynomialSpiral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpiral\">\n\t\t\t\t<xs:attribute name=\"SepticTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SexticTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"QuinticTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"QuarticTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CubicTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"QuadraticTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstantTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShadingDevice\" type=\"ifc:IfcShadingDevice\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShadingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcShadingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShadingDeviceType\" type=\"ifc:IfcShadingDeviceType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShadingDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcShadingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeAspect\" type=\"ifc:IfcShapeAspect\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeAspect\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeRepresentations\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcShapeModel\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShapeModel\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProductDefinitional\" type=\"ifc:IfcLogical\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeModel\" type=\"ifc:IfcShapeModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShapeRepresentation\" type=\"ifc:IfcShapeRepresentation\" substitutionGroup=\"ifc:IfcShapeModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShapeRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcShellBasedSurfaceModel\" type=\"ifc:IfcShellBasedSurfaceModel\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcShellBasedSurfaceModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SbsmBoundary\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcShell\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcShell\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSign\" type=\"ifc:IfcSign\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSign\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSignTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSignType\" type=\"ifc:IfcSignType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSignType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSignTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSignal\" type=\"ifc:IfcSignal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSignal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSignalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSignalType\" type=\"ifc:IfcSignalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSignalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSignalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSimpleProperty\" type=\"ifc:IfcSimpleProperty\" abstract=\"true\" substitutionGroup=\"ifc:IfcProperty\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSimpleProperty\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProperty\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSimplePropertyTemplate\" type=\"ifc:IfcSimplePropertyTemplate\" substitutionGroup=\"ifc:IfcPropertyTemplate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSimplePropertyTemplate\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPropertyTemplate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Enumerators\" type=\"ifc:IfcPropertyEnumeration\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"PrimaryUnit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SecondaryUnit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TemplateType\" type=\"ifc:IfcSimplePropertyTemplateTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PrimaryMeasureType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondaryMeasureType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Expression\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AccessState\" type=\"ifc:IfcStateEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSineSpiral\" type=\"ifc:IfcSineSpiral\" substitutionGroup=\"ifc:IfcSpiral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSineSpiral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpiral\">\n\t\t\t\t<xs:attribute name=\"SineTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstantTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSite\" type=\"ifc:IfcSite\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSite\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SiteAddress\" type=\"ifc:IfcPostalAddress\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RefLatitude\" type=\"ifc:IfcCompoundPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RefLongitude\" type=\"ifc:IfcCompoundPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RefElevation\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LandTitleNumber\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlab\" type=\"ifc:IfcSlab\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlab\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlabType\" type=\"ifc:IfcSlabType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlabType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSlabTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSlippageConnectionCondition\" type=\"ifc:IfcSlippageConnectionCondition\" substitutionGroup=\"ifc:IfcStructuralConnectionCondition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSlippageConnectionCondition\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnectionCondition\">\n\t\t\t\t<xs:attribute name=\"SlippageX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SlippageY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SlippageZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolarDevice\" type=\"ifc:IfcSolarDevice\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolarDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSolarDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolarDeviceType\" type=\"ifc:IfcSolarDeviceType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolarDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSolarDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSolidModel\" type=\"ifc:IfcSolidModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSolidModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpace\" type=\"ifc:IfcSpace\" substitutionGroup=\"ifc:IfcSpatialStructureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpace\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElevationWithFlooring\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceHeater\" type=\"ifc:IfcSpaceHeater\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceHeater\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceHeaterType\" type=\"ifc:IfcSpaceHeaterType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceHeaterType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceHeaterTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpaceType\" type=\"ifc:IfcSpaceType\" substitutionGroup=\"ifc:IfcSpatialStructureElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpaceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialStructureElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpaceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialElement\" type=\"ifc:IfcSpatialElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ContainsElements\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelContainedInSpatialStructure\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelContainedInSpatialStructure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencesElements\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRelReferencedInSpatialStructure\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRelReferencedInSpatialStructure\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialElementType\" type=\"ifc:IfcSpatialElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProduct\">\n\t\t\t\t<xs:attribute name=\"ElementType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialStructureElement\" type=\"ifc:IfcSpatialStructureElement\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialStructureElement\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\">\n\t\t\t\t<xs:attribute name=\"CompositionType\" type=\"ifc:IfcElementCompositionEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialStructureElementType\" type=\"ifc:IfcSpatialStructureElementType\" abstract=\"true\" substitutionGroup=\"ifc:IfcSpatialElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialStructureElementType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialZone\" type=\"ifc:IfcSpatialZone\" substitutionGroup=\"ifc:IfcSpatialElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialZone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpatialZoneTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpatialZoneType\" type=\"ifc:IfcSpatialZoneType\" substitutionGroup=\"ifc:IfcSpatialElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpatialZoneType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpatialElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSpatialZoneTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSphere\" type=\"ifc:IfcSphere\" substitutionGroup=\"ifc:IfcCsgPrimitive3D\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSphere\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCsgPrimitive3D\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSphericalSurface\" type=\"ifc:IfcSphericalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSphericalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSpiral\" type=\"ifc:IfcSpiral\" abstract=\"true\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSpiral\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Position\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStackTerminal\" type=\"ifc:IfcStackTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStackTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStackTerminalType\" type=\"ifc:IfcStackTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStackTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStackTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStair\" type=\"ifc:IfcStair\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStair\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairFlight\" type=\"ifc:IfcStairFlight\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairFlight\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"NumberOfRisers\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NumberOfTreads\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RiserHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TreadLength\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairFlightType\" type=\"ifc:IfcStairFlightType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairFlightType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairFlightTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStairType\" type=\"ifc:IfcStairType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStairType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStairTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralAction\" type=\"ifc:IfcStructuralAction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralAction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\">\n\t\t\t\t<xs:attribute name=\"DestabilizingLoad\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralActivity\" type=\"ifc:IfcStructuralActivity\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralActivity\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedLoad\" type=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"GlobalOrLocal\" type=\"ifc:IfcGlobalOrLocalEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralAnalysisModel\" type=\"ifc:IfcStructuralAnalysisModel\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralAnalysisModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"OrientationOf2DPlane\" type=\"ifc:IfcAxis2Placement3D\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"LoadedBy\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadGroup\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralLoadGroup\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"HasResults\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralResultGroup\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralResultGroup\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SharedPlacement\" type=\"ifc:IfcObjectPlacement\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcAnalysisModelTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralConnection\" type=\"ifc:IfcStructuralConnection\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralConnection\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AppliedCondition\" type=\"ifc:IfcBoundaryCondition\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralConnectionCondition\" type=\"ifc:IfcStructuralConnectionCondition\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralConnectionCondition\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveAction\" type=\"ifc:IfcStructuralCurveAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\n\t\t\t\t<xs:attribute name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveConnection\" type=\"ifc:IfcStructuralCurveConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveMember\" type=\"ifc:IfcStructuralCurveMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Axis\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveMemberTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveMemberVarying\" type=\"ifc:IfcStructuralCurveMemberVarying\" substitutionGroup=\"ifc:IfcStructuralCurveMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveMemberVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralCurveReaction\" type=\"ifc:IfcStructuralCurveReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralCurveReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralCurveActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralItem\" type=\"ifc:IfcStructuralItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcProduct\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProduct\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLinearAction\" type=\"ifc:IfcStructuralLinearAction\" substitutionGroup=\"ifc:IfcStructuralCurveAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLinearAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralCurveAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoad\" type=\"ifc:IfcStructuralLoad\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoad\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadCase\" type=\"ifc:IfcStructuralLoadCase\" substitutionGroup=\"ifc:IfcStructuralLoadGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadGroup\">\n\t\t\t\t<xs:attribute name=\"SelfWeightCoefficients\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcRatioMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadConfiguration\" type=\"ifc:IfcStructuralLoadConfiguration\" substitutionGroup=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadConfiguration\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Values\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcStructuralLoadOrResult\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcStructuralLoadOrResult\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Locations\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadGroup\" type=\"ifc:IfcStructuralLoadGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcLoadGroupTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActionType\" type=\"ifc:IfcActionTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActionSource\" type=\"ifc:IfcActionSourceTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Coefficient\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadLinearForce\" type=\"ifc:IfcStructuralLoadLinearForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadLinearForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"LinearForceX\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearForceY\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearForceZ\" type=\"ifc:IfcLinearForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentX\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentY\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearMomentZ\" type=\"ifc:IfcLinearMomentMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadOrResult\" type=\"ifc:IfcStructuralLoadOrResult\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralLoad\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadOrResult\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoad\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadPlanarForce\" type=\"ifc:IfcStructuralLoadPlanarForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadPlanarForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"PlanarForceX\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PlanarForceY\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PlanarForceZ\" type=\"ifc:IfcPlanarForceMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacement\" type=\"ifc:IfcStructuralLoadSingleDisplacement\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"DisplacementX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DisplacementY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DisplacementZ\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRX\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRY\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RotationalDisplacementRZ\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleDisplacementDistortion\" type=\"ifc:IfcStructuralLoadSingleDisplacementDistortion\" substitutionGroup=\"ifc:IfcStructuralLoadSingleDisplacement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleDisplacementDistortion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleDisplacement\">\n\t\t\t\t<xs:attribute name=\"Distortion\" type=\"ifc:IfcCurvatureMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleForce\" type=\"ifc:IfcStructuralLoadSingleForce\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleForce\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"ForceX\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ForceY\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ForceZ\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentX\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentY\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MomentZ\" type=\"ifc:IfcTorqueMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadSingleForceWarping\" type=\"ifc:IfcStructuralLoadSingleForceWarping\" substitutionGroup=\"ifc:IfcStructuralLoadSingleForce\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadSingleForceWarping\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadSingleForce\">\n\t\t\t\t<xs:attribute name=\"WarpingMoment\" type=\"ifc:IfcWarpingMomentMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadStatic\" type=\"ifc:IfcStructuralLoadStatic\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralLoadOrResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadStatic\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadOrResult\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralLoadTemperature\" type=\"ifc:IfcStructuralLoadTemperature\" substitutionGroup=\"ifc:IfcStructuralLoadStatic\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralLoadTemperature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadStatic\">\n\t\t\t\t<xs:attribute name=\"DeltaTConstant\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DeltaTY\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DeltaTZ\" type=\"ifc:IfcThermodynamicTemperatureMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralMember\" type=\"ifc:IfcStructuralMember\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralMember\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPlanarAction\" type=\"ifc:IfcStructuralPlanarAction\" substitutionGroup=\"ifc:IfcStructuralSurfaceAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPlanarAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointAction\" type=\"ifc:IfcStructuralPointAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointConnection\" type=\"ifc:IfcStructuralPointConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ConditionCoordinateSystem\" type=\"ifc:IfcAxis2Placement3D\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralPointReaction\" type=\"ifc:IfcStructuralPointReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralPointReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralReaction\" type=\"ifc:IfcStructuralReaction\" abstract=\"true\" substitutionGroup=\"ifc:IfcStructuralActivity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralReaction\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralActivity\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralResultGroup\" type=\"ifc:IfcStructuralResultGroup\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralResultGroup\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ResultForLoadGroup\" type=\"ifc:IfcStructuralLoadGroup\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TheoryType\" type=\"ifc:IfcAnalysisTheoryTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsLinear\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceAction\" type=\"ifc:IfcStructuralSurfaceAction\" substitutionGroup=\"ifc:IfcStructuralAction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceAction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralAction\">\n\t\t\t\t<xs:attribute name=\"ProjectedOrTrue\" type=\"ifc:IfcProjectedOrTrueLengthEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceConnection\" type=\"ifc:IfcStructuralSurfaceConnection\" substitutionGroup=\"ifc:IfcStructuralConnection\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceConnection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralConnection\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceMember\" type=\"ifc:IfcStructuralSurfaceMember\" substitutionGroup=\"ifc:IfcStructuralMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceMember\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralMember\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceMemberTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Thickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceMemberVarying\" type=\"ifc:IfcStructuralSurfaceMemberVarying\" substitutionGroup=\"ifc:IfcStructuralSurfaceMember\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceMemberVarying\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralSurfaceMember\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStructuralSurfaceReaction\" type=\"ifc:IfcStructuralSurfaceReaction\" substitutionGroup=\"ifc:IfcStructuralReaction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStructuralSurfaceReaction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralReaction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcStructuralSurfaceActivityTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyleModel\" type=\"ifc:IfcStyleModel\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentation\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyleModel\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentation\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyledItem\" type=\"ifc:IfcStyledItem\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyledItem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPresentationStyle\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPresentationStyle\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcStyledRepresentation\" type=\"ifc:IfcStyledRepresentation\" substitutionGroup=\"ifc:IfcStyleModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcStyledRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStyleModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubContractResource\" type=\"ifc:IfcSubContractResource\" substitutionGroup=\"ifc:IfcConstructionResource\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubContractResource\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResource\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSubContractResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubContractResourceType\" type=\"ifc:IfcSubContractResourceType\" substitutionGroup=\"ifc:IfcConstructionResourceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubContractResourceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcConstructionResourceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSubContractResourceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSubedge\" type=\"ifc:IfcSubedge\" substitutionGroup=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSubedge\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEdge\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ParentEdge\" type=\"ifc:IfcEdge\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurface\" type=\"ifc:IfcSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceCurve\" type=\"ifc:IfcSurfaceCurve\" substitutionGroup=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Curve3D\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"AssociatedGeometry\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPcurve\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPcurve\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"MasterRepresentation\" type=\"ifc:IfcPreferredSurfaceCurveRepresentation\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceCurveSweptAreaSolid\" type=\"ifc:IfcSurfaceCurveSweptAreaSolid\" substitutionGroup=\"ifc:IfcDirectrixCurveSweptAreaSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceCurveSweptAreaSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDirectrixCurveSweptAreaSolid\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ReferenceSurface\" type=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceFeature\" type=\"ifc:IfcSurfaceFeature\" substitutionGroup=\"ifc:IfcFeatureElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceFeature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSurfaceFeatureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceOfLinearExtrusion\" type=\"ifc:IfcSurfaceOfLinearExtrusion\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceOfLinearExtrusion\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ExtrudedDirection\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceOfRevolution\" type=\"ifc:IfcSurfaceOfRevolution\" substitutionGroup=\"ifc:IfcSweptSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceOfRevolution\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"AxisPosition\" type=\"ifc:IfcAxis1Placement\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceReinforcementArea\" type=\"ifc:IfcSurfaceReinforcementArea\" substitutionGroup=\"ifc:IfcStructuralLoadOrResult\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceReinforcementArea\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcStructuralLoadOrResult\">\n\t\t\t\t<xs:attribute name=\"SurfaceReinforcement1\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"SurfaceReinforcement2\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"ShearReinforcement\" type=\"ifc:IfcRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyle\" type=\"ifc:IfcSurfaceStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Styles\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSurfaceStyleElementSelect\" maxOccurs=\"5\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceStyleElementSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Side\" type=\"ifc:IfcSurfaceSide\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleLighting\" type=\"ifc:IfcSurfaceStyleLighting\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleLighting\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"DiffuseReflectionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TransmissionColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"ReflectanceColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleRefraction\" type=\"ifc:IfcSurfaceStyleRefraction\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleRefraction\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"RefractionIndex\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DispersionFactor\" type=\"ifc:IfcReal\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleRendering\" type=\"ifc:IfcSurfaceStyleRendering\" substitutionGroup=\"ifc:IfcSurfaceStyleShading\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleRendering\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurfaceStyleShading\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"DiffuseColour\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"TransmissionColour\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"DiffuseTransmissionColour\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReflectionColour\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SpecularColour\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColourOrFactor\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"SpecularHighlight\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSpecularHighlightSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ReflectanceMethod\" type=\"ifc:IfcReflectanceMethodEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleShading\" type=\"ifc:IfcSurfaceStyleShading\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleShading\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SurfaceColour\" type=\"ifc:IfcColourRgb\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Transparency\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceStyleWithTextures\" type=\"ifc:IfcSurfaceStyleWithTextures\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceStyleWithTextures\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Textures\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceTexture\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSurfaceTexture\" type=\"ifc:IfcSurfaceTexture\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSurfaceTexture\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextureTransform\" type=\"ifc:IfcCartesianTransformationOperator2D\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"RepeatS\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RepeatT\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Mode\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Parameter\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcIdentifier\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptAreaSolid\" type=\"ifc:IfcSweptAreaSolid\" abstract=\"true\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptAreaSolid\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SweptArea\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptDiskSolid\" type=\"ifc:IfcSweptDiskSolid\" substitutionGroup=\"ifc:IfcSolidModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptDiskSolid\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSolidModel\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Directrix\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Radius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"InnerRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndParam\" type=\"ifc:IfcParameterValue\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptDiskSolidPolygonal\" type=\"ifc:IfcSweptDiskSolidPolygonal\" substitutionGroup=\"ifc:IfcSweptDiskSolid\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptDiskSolidPolygonal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSweptDiskSolid\">\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSweptSurface\" type=\"ifc:IfcSweptSurface\" abstract=\"true\" substitutionGroup=\"ifc:IfcSurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSweptSurface\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSurface\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"SweptCurve\" type=\"ifc:IfcProfileDef\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Position\" type=\"ifc:IfcAxis2Placement3D\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSwitchingDevice\" type=\"ifc:IfcSwitchingDevice\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSwitchingDevice\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSwitchingDeviceType\" type=\"ifc:IfcSwitchingDeviceType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSwitchingDeviceType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSwitchingDeviceTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystem\" type=\"ifc:IfcSystem\" substitutionGroup=\"ifc:IfcGroup\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystem\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGroup\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystemFurnitureElement\" type=\"ifc:IfcSystemFurnitureElement\" substitutionGroup=\"ifc:IfcFurnishingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystemFurnitureElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSystemFurnitureElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcSystemFurnitureElementType\" type=\"ifc:IfcSystemFurnitureElementType\" substitutionGroup=\"ifc:IfcFurnishingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcSystemFurnitureElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFurnishingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcSystemFurnitureElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTShapeProfileDef\" type=\"ifc:IfcTShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebEdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTable\" type=\"ifc:IfcTable\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTable\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Rows\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableRow\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTableRow\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Columns\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTableColumn\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTableColumn\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTableColumn\" type=\"ifc:IfcTableColumn\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTableColumn\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ReferencePath\" type=\"ifc:IfcReference\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Identifier\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTableRow\" type=\"ifc:IfcTableRow\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTableRow\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RowCells\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"IsHeading\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTank\" type=\"ifc:IfcTank\" substitutionGroup=\"ifc:IfcFlowStorageDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTank\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTankType\" type=\"ifc:IfcTankType\" substitutionGroup=\"ifc:IfcFlowStorageDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTankType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowStorageDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTankTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTask\" type=\"ifc:IfcTask\" substitutionGroup=\"ifc:IfcProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTask\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcProcess\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TaskTime\" type=\"ifc:IfcTaskTime\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Status\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WorkMethod\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsMilestone\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Priority\" type=\"ifc:IfcInteger\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTaskTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskTime\" type=\"ifc:IfcTaskTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:attribute name=\"DurationType\" type=\"ifc:IfcTaskDurationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleDuration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ScheduleFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EarlyFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LateFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FreeFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TotalFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"IsCritical\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StatusTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualDuration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualStart\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ActualFinish\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"RemainingTime\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Completion\" type=\"ifc:IfcPositiveRatioMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskTimeRecurring\" type=\"ifc:IfcTaskTimeRecurring\" substitutionGroup=\"ifc:IfcTaskTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskTimeRecurring\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTaskTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Recurrence\" type=\"ifc:IfcRecurrencePattern\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTaskType\" type=\"ifc:IfcTaskType\" substitutionGroup=\"ifc:IfcTypeProcess\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTaskType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeProcess\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTaskTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WorkMethod\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTelecomAddress\" type=\"ifc:IfcTelecomAddress\" substitutionGroup=\"ifc:IfcAddress\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTelecomAddress\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcAddress\">\n\t\t\t\t<xs:attribute name=\"TelephoneNumbers\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"FacsimileNumbers\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PagerNumber\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ElectronicMailAddresses\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLabel\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"WWWHomePageURL\" type=\"ifc:IfcURIReference\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MessagingIDs\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcURIReference\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendon\" type=\"ifc:IfcTendon\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendon\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TensionForce\" type=\"ifc:IfcForceMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PreStress\" type=\"ifc:IfcPressureMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrictionCoefficient\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"AnchorageSlip\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MinCurvatureRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonAnchor\" type=\"ifc:IfcTendonAnchor\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonAnchor\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonAnchorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonAnchorType\" type=\"ifc:IfcTendonAnchorType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonAnchorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonAnchorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonConduit\" type=\"ifc:IfcTendonConduit\" substitutionGroup=\"ifc:IfcReinforcingElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonConduit\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonConduitTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonConduitType\" type=\"ifc:IfcTendonConduitType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonConduitType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonConduitTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTendonType\" type=\"ifc:IfcTendonType\" substitutionGroup=\"ifc:IfcReinforcingElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTendonType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcReinforcingElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTendonTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"NominalDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CrossSectionArea\" type=\"ifc:IfcAreaMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SheathDiameter\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTessellatedFaceSet\" type=\"ifc:IfcTessellatedFaceSet\" abstract=\"true\" substitutionGroup=\"ifc:IfcTessellatedItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTessellatedFaceSet\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Coordinates\" type=\"ifc:IfcCartesianPointList3D\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"HasColours\" type=\"ifc:IfcIndexedColourMap\" nillable=\"true\" minOccurs=\"0\" maxOccurs=\"1\"/>\n\t\t\t\t\t<xs:element name=\"HasTextures\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcIndexedTextureMap\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcIndexedTextureMap\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTessellatedItem\" type=\"ifc:IfcTessellatedItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTessellatedItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextLiteral\" type=\"ifc:IfcTextLiteral\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextLiteral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Placement\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcAxis2Placement\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Literal\" type=\"ifc:IfcPresentableText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Path\" type=\"ifc:IfcTextPath\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextLiteralWithExtent\" type=\"ifc:IfcTextLiteralWithExtent\" substitutionGroup=\"ifc:IfcTextLiteral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextLiteralWithExtent\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextLiteral\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Extent\" type=\"ifc:IfcPlanarExtent\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"BoxAlignment\" type=\"ifc:IfcBoxAlignment\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyle\" type=\"ifc:IfcTextStyle\" substitutionGroup=\"ifc:IfcPresentationStyle\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationStyle\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextCharacterAppearance\" type=\"ifc:IfcTextStyleForDefinedFont\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TextStyle\" type=\"ifc:IfcTextStyleTextModel\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"TextFontStyle\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTextFontSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ModelOrDraughting\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleFontModel\" type=\"ifc:IfcTextStyleFontModel\" substitutionGroup=\"ifc:IfcPreDefinedTextFont\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleFontModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedTextFont\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"FontFamily\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextFontName-wrapper\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTextFontName-wrapper\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"FontSize\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"FontStyle\" type=\"ifc:IfcFontStyle\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FontVariant\" type=\"ifc:IfcFontVariant\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FontWeight\" type=\"ifc:IfcFontWeight\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleForDefinedFont\" type=\"ifc:IfcTextStyleForDefinedFont\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleForDefinedFont\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Colour\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"BackgroundColour\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcColour\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextStyleTextModel\" type=\"ifc:IfcTextStyleTextModel\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextStyleTextModel\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TextIndent\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LetterSpacing\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"WordSpacing\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"LineHeight\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcSizeSelect\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TextAlign\" type=\"ifc:IfcTextAlignment\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TextDecoration\" type=\"ifc:IfcTextDecoration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TextTransform\" type=\"ifc:IfcTextTransformation\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinate\" type=\"ifc:IfcTextureCoordinate\" abstract=\"true\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinate\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Maps\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcSurfaceTexture\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcSurfaceTexture\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinateGenerator\" type=\"ifc:IfcTextureCoordinateGenerator\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinateGenerator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:attribute name=\"Mode\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Parameter\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcReal\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinateIndices\" type=\"ifc:IfcTextureCoordinateIndices\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinateIndices\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"TexCoordsOf\" type=\"ifc:IfcIndexedPolygonalFace\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"TexCoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureCoordinateIndicesWithVoids\" type=\"ifc:IfcTextureCoordinateIndicesWithVoids\" substitutionGroup=\"ifc:IfcTextureCoordinateIndices\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureCoordinateIndicesWithVoids\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinateIndices\">\n\t\t\t\t<xs:attribute name=\"InnerTexCoordIndices\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureMap\" type=\"ifc:IfcTextureMap\" substitutionGroup=\"ifc:IfcTextureCoordinate\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureMap\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTextureCoordinate\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Vertices\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcTextureVertex\" minOccurs=\"3\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTextureVertex\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"MappedTo\" type=\"ifc:IfcFace\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureVertex\" type=\"ifc:IfcTextureVertex\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureVertex\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"Coordinates\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTextureVertexList\" type=\"ifc:IfcTextureVertexList\" substitutionGroup=\"ifc:IfcPresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTextureVertexList\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPresentationItem\">\n\t\t\t\t<xs:attribute name=\"TexCoordsList\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcThirdOrderPolynomialSpiral\" type=\"ifc:IfcThirdOrderPolynomialSpiral\" substitutionGroup=\"ifc:IfcSpiral\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcThirdOrderPolynomialSpiral\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSpiral\">\n\t\t\t\t<xs:attribute name=\"CubicTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"QuadraticTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LinearTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ConstantTerm\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimePeriod\" type=\"ifc:IfcTimePeriod\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimePeriod\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndTime\" type=\"ifc:IfcTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimeSeries\" type=\"ifc:IfcTimeSeries\" abstract=\"true\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimeSeries\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Unit\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Name\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Description\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EndTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TimeSeriesDataType\" type=\"ifc:IfcTimeSeriesDataTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"DataOrigin\" type=\"ifc:IfcDataOriginEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedDataOrigin\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTimeSeriesValue\" type=\"ifc:IfcTimeSeriesValue\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTimeSeriesValue\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ListValues\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcValue\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcValue\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTopologicalRepresentationItem\" type=\"ifc:IfcTopologicalRepresentationItem\" abstract=\"true\" substitutionGroup=\"ifc:IfcRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTopologicalRepresentationItem\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTopologyRepresentation\" type=\"ifc:IfcTopologyRepresentation\" substitutionGroup=\"ifc:IfcShapeModel\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTopologyRepresentation\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcShapeModel\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcToroidalSurface\" type=\"ifc:IfcToroidalSurface\" substitutionGroup=\"ifc:IfcElementarySurface\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcToroidalSurface\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementarySurface\">\n\t\t\t\t<xs:attribute name=\"MajorRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MinorRadius\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrackElement\" type=\"ifc:IfcTrackElement\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrackElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTrackElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrackElementType\" type=\"ifc:IfcTrackElementType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrackElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTrackElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransformer\" type=\"ifc:IfcTransformer\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransformer\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransformerType\" type=\"ifc:IfcTransformerType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransformerType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransformerTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportElement\" type=\"ifc:IfcTransportElement\" substitutionGroup=\"ifc:IfcTransportationDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTransportationDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportElementType\" type=\"ifc:IfcTransportElementType\" substitutionGroup=\"ifc:IfcTransportationDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTransportationDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTransportElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportationDevice\" type=\"ifc:IfcTransportationDevice\" abstract=\"true\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportationDevice\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTransportationDeviceType\" type=\"ifc:IfcTransportationDeviceType\" abstract=\"true\" substitutionGroup=\"ifc:IfcElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTransportationDeviceType\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementType\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrapeziumProfileDef\" type=\"ifc:IfcTrapeziumProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrapeziumProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"BottomXDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopXDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"YDim\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TopXOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTriangulatedFaceSet\" type=\"ifc:IfcTriangulatedFaceSet\" substitutionGroup=\"ifc:IfcTessellatedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTriangulatedFaceSet\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTessellatedFaceSet\">\n\t\t\t\t<xs:attribute name=\"Normals\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcParameterValue\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"Closed\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"CoordIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t\t<xs:attribute name=\"PnIndex\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTriangulatedIrregularNetwork\" type=\"ifc:IfcTriangulatedIrregularNetwork\" substitutionGroup=\"ifc:IfcTriangulatedFaceSet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTriangulatedIrregularNetwork\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTriangulatedFaceSet\">\n\t\t\t\t<xs:attribute name=\"Flags\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcInteger\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTrimmedCurve\" type=\"ifc:IfcTrimmedCurve\" substitutionGroup=\"ifc:IfcBoundedCurve\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTrimmedCurve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBoundedCurve\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"BasisCurve\" type=\"ifc:IfcCurve\" nillable=\"true\"/>\n\t\t\t\t\t<xs:element name=\"Trim1\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"Trim2\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcTrimmingSelect\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcTrimmingSelect\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"SenseAgreement\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MasterRepresentation\" type=\"ifc:IfcTrimmingPreference\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTubeBundle\" type=\"ifc:IfcTubeBundle\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTubeBundle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTubeBundleType\" type=\"ifc:IfcTubeBundleType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTubeBundleType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcTubeBundleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeObject\" type=\"ifc:IfcTypeObject\" substitutionGroup=\"ifc:IfcObjectDefinition\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeObject\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcObjectDefinition\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"HasPropertySets\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"ApplicableOccurrence\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeProcess\" type=\"ifc:IfcTypeProcess\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeProcess\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ProcessType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeProduct\" type=\"ifc:IfcTypeProduct\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeProduct\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RepresentationMaps\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcRepresentationMap\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Tag\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcTypeResource\" type=\"ifc:IfcTypeResource\" abstract=\"true\" substitutionGroup=\"ifc:IfcTypeObject\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcTypeResource\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTypeObject\">\n\t\t\t\t<xs:attribute name=\"Identification\" type=\"ifc:IfcIdentifier\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LongDescription\" type=\"ifc:IfcText\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ResourceType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUShapeProfileDef\" type=\"ifc:IfcUShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeSlope\" type=\"ifc:IfcPlaneAngleMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitAssignment\" type=\"ifc:IfcUnitAssignment\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitAssignment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Units\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:group ref=\"ifc:IfcUnit\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcUnit\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryControlElement\" type=\"ifc:IfcUnitaryControlElement\" substitutionGroup=\"ifc:IfcDistributionControlElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryControlElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryControlElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryControlElementType\" type=\"ifc:IfcUnitaryControlElementType\" substitutionGroup=\"ifc:IfcDistributionControlElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryControlElementType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcDistributionControlElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryControlElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryEquipment\" type=\"ifc:IfcUnitaryEquipment\" substitutionGroup=\"ifc:IfcEnergyConversionDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryEquipment\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcUnitaryEquipmentType\" type=\"ifc:IfcUnitaryEquipmentType\" substitutionGroup=\"ifc:IfcEnergyConversionDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcUnitaryEquipmentType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcEnergyConversionDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcUnitaryEquipmentTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcValve\" type=\"ifc:IfcValve\" substitutionGroup=\"ifc:IfcFlowController\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcValve\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowController\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcValveType\" type=\"ifc:IfcValveType\" substitutionGroup=\"ifc:IfcFlowControllerType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcValveType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowControllerType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcValveTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVector\" type=\"ifc:IfcVector\" substitutionGroup=\"ifc:IfcGeometricRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVector\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcGeometricRepresentationItem\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Orientation\" type=\"ifc:IfcDirection\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"Magnitude\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVehicle\" type=\"ifc:IfcVehicle\" substitutionGroup=\"ifc:IfcTransportationDevice\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVehicle\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTransportationDevice\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVehicleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVehicleType\" type=\"ifc:IfcVehicleType\" substitutionGroup=\"ifc:IfcTransportationDeviceType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVehicleType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTransportationDeviceType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVehicleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertex\" type=\"ifc:IfcVertex\" substitutionGroup=\"ifc:IfcTopologicalRepresentationItem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertex\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcTopologicalRepresentationItem\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertexLoop\" type=\"ifc:IfcVertexLoop\" substitutionGroup=\"ifc:IfcLoop\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertexLoop\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcLoop\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"LoopVertex\" type=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVertexPoint\" type=\"ifc:IfcVertexPoint\" substitutionGroup=\"ifc:IfcVertex\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVertexPoint\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcVertex\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"VertexGeometry\" type=\"ifc:IfcPoint\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationDamper\" type=\"ifc:IfcVibrationDamper\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationDamper\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVibrationDamperTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationDamperType\" type=\"ifc:IfcVibrationDamperType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationDamperType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVibrationDamperTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationIsolator\" type=\"ifc:IfcVibrationIsolator\" substitutionGroup=\"ifc:IfcElementComponent\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationIsolator\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponent\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVibrationIsolatorType\" type=\"ifc:IfcVibrationIsolatorType\" substitutionGroup=\"ifc:IfcElementComponentType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVibrationIsolatorType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElementComponentType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVibrationIsolatorTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVirtualElement\" type=\"ifc:IfcVirtualElement\" substitutionGroup=\"ifc:IfcElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVirtualElement\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVirtualElementTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVirtualGridIntersection\" type=\"ifc:IfcVirtualGridIntersection\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVirtualGridIntersection\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"IntersectingAxes\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcGridAxis\" minOccurs=\"2\" maxOccurs=\"2\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcGridAxis\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list-unique\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OffsetDistances\" use=\"optional\">\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction>\n\t\t\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t\t\t<xs:list itemType=\"ifc:IfcLengthMeasure\"/>\n\t\t\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t\t\t\t\t<xs:maxLength value=\"3\"/>\n\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:attribute>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcVoidingFeature\" type=\"ifc:IfcVoidingFeature\" substitutionGroup=\"ifc:IfcFeatureElementSubtraction\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcVoidingFeature\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFeatureElementSubtraction\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcVoidingFeatureTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWall\" type=\"ifc:IfcWall\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWall\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallStandardCase\" type=\"ifc:IfcWallStandardCase\" substitutionGroup=\"ifc:IfcWall\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallStandardCase\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWall\"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWallType\" type=\"ifc:IfcWallType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWallType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWallTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWasteTerminal\" type=\"ifc:IfcWasteTerminal\" substitutionGroup=\"ifc:IfcFlowTerminal\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWasteTerminal\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminal\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWasteTerminalType\" type=\"ifc:IfcWasteTerminalType\" substitutionGroup=\"ifc:IfcFlowTerminalType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWasteTerminalType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcFlowTerminalType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWasteTerminalTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWellKnownText\" type=\"ifc:IfcWellKnownText\" substitutionGroup=\"ifc:Entity\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWellKnownText\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:Entity\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"CoordinateReferenceSystem\" type=\"ifc:IfcCoordinateReferenceSystem\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"WellKnownText\" type=\"ifc:IfcWellKnownTextLiteral\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindow\" type=\"ifc:IfcWindow\" substitutionGroup=\"ifc:IfcBuiltElement\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindow\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElement\">\n\t\t\t\t<xs:attribute name=\"OverallHeight\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"OverallWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWindowTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PartitioningType\" type=\"ifc:IfcWindowTypePartitioningEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPartitioningType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowLiningProperties\" type=\"ifc:IfcWindowLiningProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowLiningProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"LiningDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TransomThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"MullionThickness\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FirstTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondTransomOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FirstMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"SecondMullionOffset\" type=\"ifc:IfcNormalisedRatioMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningOffset\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetX\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"LiningToPanelOffsetY\" type=\"ifc:IfcLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowPanelProperties\" type=\"ifc:IfcWindowPanelProperties\" substitutionGroup=\"ifc:IfcPreDefinedPropertySet\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowPanelProperties\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcPreDefinedPropertySet\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"ShapeAspectStyle\" type=\"ifc:IfcShapeAspect\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"OperationType\" type=\"ifc:IfcWindowPanelOperationEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PanelPosition\" type=\"ifc:IfcWindowPanelPositionEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameDepth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FrameThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWindowType\" type=\"ifc:IfcWindowType\" substitutionGroup=\"ifc:IfcBuiltElementType\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWindowType\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcBuiltElementType\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWindowTypeEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"PartitioningType\" type=\"ifc:IfcWindowTypePartitioningEnum\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"ParameterTakesPrecedence\" type=\"ifc:IfcBoolean\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"UserDefinedPartitioningType\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkCalendar\" type=\"ifc:IfcWorkCalendar\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkCalendar\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"WorkingTimes\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcWorkTime\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcWorkTime\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t\t<xs:element name=\"ExceptionTimes\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcWorkTime\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcWorkTime\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkCalendarTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkControl\" type=\"ifc:IfcWorkControl\" abstract=\"true\" substitutionGroup=\"ifc:IfcControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkControl\" abstract=\"true\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcControl\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"Creators\" minOccurs=\"0\" nillable=\"true\">\n\t\t\t\t\t\t<xs:complexType>\n\t\t\t\t\t\t\t<xs:sequence>\n\t\t\t\t\t\t\t\t<xs:element ref=\"ifc:IfcPerson\" maxOccurs=\"unbounded\"/>\n\t\t\t\t\t\t\t</xs:sequence>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPerson\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t\t\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t\t\t\t</xs:complexType>\n\t\t\t\t\t</xs:element>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"CreationDate\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Purpose\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"Duration\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"TotalFloat\" type=\"ifc:IfcDuration\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"StartTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FinishTime\" type=\"ifc:IfcDateTime\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkPlan\" type=\"ifc:IfcWorkPlan\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkPlan\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkPlanTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkSchedule\" type=\"ifc:IfcWorkSchedule\" substitutionGroup=\"ifc:IfcWorkControl\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkSchedule\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcWorkControl\">\n\t\t\t\t<xs:attribute name=\"PredefinedType\" type=\"ifc:IfcWorkScheduleTypeEnum\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcWorkTime\" type=\"ifc:IfcWorkTime\" substitutionGroup=\"ifc:IfcSchedulingTime\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcWorkTime\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSchedulingTime\">\n\t\t\t\t<xs:sequence>\n\t\t\t\t\t<xs:element name=\"RecurrencePattern\" type=\"ifc:IfcRecurrencePattern\" minOccurs=\"0\" nillable=\"true\"/>\n\t\t\t\t</xs:sequence>\n\t\t\t\t<xs:attribute name=\"StartDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FinishDate\" type=\"ifc:IfcDate\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcZShapeProfileDef\" type=\"ifc:IfcZShapeProfileDef\" substitutionGroup=\"ifc:IfcParameterizedProfileDef\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcZShapeProfileDef\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcParameterizedProfileDef\">\n\t\t\t\t<xs:attribute name=\"Depth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeWidth\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"WebThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FlangeThickness\" type=\"ifc:IfcPositiveLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"FilletRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t\t<xs:attribute name=\"EdgeRadius\" type=\"ifc:IfcNonNegativeLengthMeasure\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:element name=\"IfcZone\" type=\"ifc:IfcZone\" substitutionGroup=\"ifc:IfcSystem\" nillable=\"true\"/>\n\t<xs:complexType name=\"IfcZone\">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base=\"ifc:IfcSystem\">\n\t\t\t\t<xs:attribute name=\"LongName\" type=\"ifc:IfcLabel\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n\t<xs:group name=\"IfcActorSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcAppliedValueSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcURIReference-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcAxis2Placement\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement2D\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAxis2Placement3D\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcBendingParameterSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcBooleanOperand\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHalfSpaceSolid\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTessellatedFaceSet\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcClassificationReferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcClassificationSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClassification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcClassificationReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcColour\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcColourOrFactor\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourRgb\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCoordinateReferenceSystemSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCoordinateReferenceSystem\"/>\n\t\t\t<xs:element ref=\"ifc:IfcGeometricRepresentationContext\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCsgSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBooleanResult\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCsgPrimitive3D\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveFontOrScaledCurveFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFontAndScaling\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveMeasureSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveOnSurface\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCompositeCurveOnSurface\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPcurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceCurve\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveOrEdgeCurve\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoundedCurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEdgeCurve\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcCurveStyleFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurveStyleFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedCurveFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDefinitionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcObjectDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertyDefinition\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDerivedMeasureValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcDocumentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDocumentInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDocumentReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcFillStyleSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcColourSpecification\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedHatchStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleHatching\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFillAreaStyleTiles\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedColour\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcGeometricSetSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCurve\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcGridPlacementDirectionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVirtualGridIntersection\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcHatchLineDistanceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcInterferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpatialElement\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLayeredItem\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationItem\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLibrarySelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcLibraryInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLibraryReference\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcLightDistributionDataSourceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLightIntensityDistribution\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMaterialSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialList\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialUsageDefinition\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMeasureValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcMetricValueSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMeasureWithUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTable\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcURIReference-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfRotationalSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcModulusOfTranslationalSubgradeReactionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcObjectReferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAddress\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTable\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPointOrVertexPoint\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVertexPoint\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProcessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProcess\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeProcess\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProductRepresentationSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProductDefinitionShape\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRepresentationMap\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcProductSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcProduct\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeProduct\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcPropertySetDefinitionSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinitionSet-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcResourceObjectSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcActorRole\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAppliedValue\"/>\n\t\t\t<xs:element ref=\"ifc:IfcApproval\"/>\n\t\t\t<xs:element ref=\"ifc:IfcConstraint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcConversionBasedUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalInformation\"/>\n\t\t\t<xs:element ref=\"ifc:IfcExternalReference\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMaterialDefinition\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPerson\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPersonAndOrganization\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPhysicalQuantity\"/>\n\t\t\t<xs:element ref=\"ifc:IfcProfileDef\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPropertyAbstraction\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShapeAspect\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeSeries\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcResourceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcResource\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTypeResource\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcRotationalStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSegmentIndexSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcArcIndex-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLineIndex-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcShell\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\n\t\t\t<xs:element ref=\"ifc:IfcOpenShell\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSimpleValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcURIReference-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSizeSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSolidOrShell\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcClosedShell\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidModel\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSpaceBoundarySelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternalSpatialElement\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpace\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSpatialReferenceSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcGroup\"/>\n\t\t\t<xs:element ref=\"ifc:IfcProduct\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSpecularHighlightSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcSpecularExponent-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecularRoughness-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcStructuralActivityAssignmentSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcElement\"/>\n\t\t\t<xs:element ref=\"ifc:IfcStructuralItem\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSurfaceOrFaceSurface\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcFaceBasedSurfaceModel\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFaceSurface\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurface\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcSurfaceStyleElementSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedSurfaceStyle\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleLighting\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleRefraction\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleShading\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSurfaceStyleWithTextures\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTextFontSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcExternallyDefinedTextFont\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPreDefinedTextFont\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTimeOrRatioSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTranslationalStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcTrimmingSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcCartesianPoint\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcUnit\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDerivedUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryUnit\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNamedUnit\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcValue\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcAbsorbedDoseMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAccelerationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAmountOfSubstanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAngularVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcAreaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBinary-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcComplexNumber-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCompoundPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcContextDependentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCountMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcCurvatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDate-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDateTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDescriptiveMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDoseEquivalentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDuration-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcDynamicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCapacitanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricChargeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricConductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricCurrentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcElectricVoltageMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcEnergyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcHeatingValueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIdentifier-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIlluminanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInductanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIntegerCountRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIonConcentrationMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcIsothermalMoistureCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcKinematicViscosityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLabel-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearMomentMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLinearVelocityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLogical-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityDistributionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcLuminousIntensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMagneticFluxMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassDensityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMassPerLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfElasticityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcModulusOfSubgradeReactionMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMoistureDiffusivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMolecularWeightMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMomentOfInertiaMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcMonetaryMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNonNegativeLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNormalisedRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcNumericMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPHMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcParameterValue-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlanarForceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveInteger-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveLengthMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositivePlaneAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPositiveRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRadioActivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRatioMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcReal-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalFrequencyMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalMassMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcRotationalStiffnessMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSectionalAreaIntegralMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcShearModulusMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSolidAngleMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPowerMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureLevelMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSoundPressureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcSpecificHeatCapacityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureGradientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTemperatureRateOfChangeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcText-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalAdmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalConductivityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalExpansionCoefficientMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalResistanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermalTransmittanceMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcThermodynamicTemperatureMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTime-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTimeStamp-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcTorqueMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcURIReference-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVaporPermeabilityMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumeMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVolumetricFlowRateMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingConstantMeasure-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcVectorOrDirection\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcDirection\"/>\n\t\t\t<xs:element ref=\"ifc:IfcVector\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:group name=\"IfcWarpingStiffnessSelect\">\n\t\t<xs:choice>\n\t\t\t<xs:element ref=\"ifc:IfcBoolean-wrapper\"/>\n\t\t\t<xs:element ref=\"ifc:IfcWarpingMomentMeasure-wrapper\"/>\n\t\t</xs:choice>\n\t</xs:group>\n\t<xs:simpleType name=\"IfcActionRequestTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"email\"/>\n\t\t\t<xs:enumeration value=\"fax\"/>\n\t\t\t<xs:enumeration value=\"phone\"/>\n\t\t\t<xs:enumeration value=\"post\"/>\n\t\t\t<xs:enumeration value=\"verbal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActionSourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"brakes\"/>\n\t\t\t<xs:enumeration value=\"buoyancy\"/>\n\t\t\t<xs:enumeration value=\"completion_g1\"/>\n\t\t\t<xs:enumeration value=\"creep\"/>\n\t\t\t<xs:enumeration value=\"current\"/>\n\t\t\t<xs:enumeration value=\"dead_load_g\"/>\n\t\t\t<xs:enumeration value=\"earthquake_e\"/>\n\t\t\t<xs:enumeration value=\"erection\"/>\n\t\t\t<xs:enumeration value=\"fire\"/>\n\t\t\t<xs:enumeration value=\"ice\"/>\n\t\t\t<xs:enumeration value=\"impact\"/>\n\t\t\t<xs:enumeration value=\"impulse\"/>\n\t\t\t<xs:enumeration value=\"lack_of_fit\"/>\n\t\t\t<xs:enumeration value=\"live_load_q\"/>\n\t\t\t<xs:enumeration value=\"prestressing_p\"/>\n\t\t\t<xs:enumeration value=\"propping\"/>\n\t\t\t<xs:enumeration value=\"rain\"/>\n\t\t\t<xs:enumeration value=\"settlement_u\"/>\n\t\t\t<xs:enumeration value=\"shrinkage\"/>\n\t\t\t<xs:enumeration value=\"snow_s\"/>\n\t\t\t<xs:enumeration value=\"system_imperfection\"/>\n\t\t\t<xs:enumeration value=\"temperature_t\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"wave\"/>\n\t\t\t<xs:enumeration value=\"wind_w\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"extraordinary_a\"/>\n\t\t\t<xs:enumeration value=\"permanent_g\"/>\n\t\t\t<xs:enumeration value=\"variable_q\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcActuatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electricactuator\"/>\n\t\t\t<xs:enumeration value=\"handoperatedactuator\"/>\n\t\t\t<xs:enumeration value=\"hydraulicactuator\"/>\n\t\t\t<xs:enumeration value=\"pneumaticactuator\"/>\n\t\t\t<xs:enumeration value=\"thermostaticactuator\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAddressTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"distributionpoint\"/>\n\t\t\t<xs:enumeration value=\"home\"/>\n\t\t\t<xs:enumeration value=\"office\"/>\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirTerminalBoxTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"constantflow\"/>\n\t\t\t<xs:enumeration value=\"variableflowpressuredependant\"/>\n\t\t\t<xs:enumeration value=\"variableflowpressureindependant\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"diffuser\"/>\n\t\t\t<xs:enumeration value=\"grille\"/>\n\t\t\t<xs:enumeration value=\"louvre\"/>\n\t\t\t<xs:enumeration value=\"register\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAirToAirHeatRecoveryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fixedplatecounterflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"fixedplatecrossflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"fixedplateparallelflowexchanger\"/>\n\t\t\t<xs:enumeration value=\"heatpipe\"/>\n\t\t\t<xs:enumeration value=\"rotarywheel\"/>\n\t\t\t<xs:enumeration value=\"runaroundcoilloop\"/>\n\t\t\t<xs:enumeration value=\"thermosiphoncoiltypeheatexchangers\"/>\n\t\t\t<xs:enumeration value=\"thermosiphonsealedtubeheatexchangers\"/>\n\t\t\t<xs:enumeration value=\"twintowerenthalpyrecoveryloops\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAlarmTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bell\"/>\n\t\t\t<xs:enumeration value=\"breakglassbutton\"/>\n\t\t\t<xs:enumeration value=\"light\"/>\n\t\t\t<xs:enumeration value=\"manualpullbox\"/>\n\t\t\t<xs:enumeration value=\"railwaycrocodile\"/>\n\t\t\t<xs:enumeration value=\"railwaydetonator\"/>\n\t\t\t<xs:enumeration value=\"siren\"/>\n\t\t\t<xs:enumeration value=\"whistle\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAlignmentCantSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blosscurve\"/>\n\t\t\t<xs:enumeration value=\"constantcant\"/>\n\t\t\t<xs:enumeration value=\"cosinecurve\"/>\n\t\t\t<xs:enumeration value=\"helmertcurve\"/>\n\t\t\t<xs:enumeration value=\"lineartransition\"/>\n\t\t\t<xs:enumeration value=\"sinecurve\"/>\n\t\t\t<xs:enumeration value=\"viennesebend\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAlignmentHorizontalSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blosscurve\"/>\n\t\t\t<xs:enumeration value=\"circulararc\"/>\n\t\t\t<xs:enumeration value=\"clothoid\"/>\n\t\t\t<xs:enumeration value=\"cosinecurve\"/>\n\t\t\t<xs:enumeration value=\"cubic\"/>\n\t\t\t<xs:enumeration value=\"helmertcurve\"/>\n\t\t\t<xs:enumeration value=\"line\"/>\n\t\t\t<xs:enumeration value=\"sinecurve\"/>\n\t\t\t<xs:enumeration value=\"viennesebend\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAlignmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAlignmentVerticalSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"circulararc\"/>\n\t\t\t<xs:enumeration value=\"clothoid\"/>\n\t\t\t<xs:enumeration value=\"constantgradient\"/>\n\t\t\t<xs:enumeration value=\"parabolicarc\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAnalysisModelTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"in_plane_loading_2d\"/>\n\t\t\t<xs:enumeration value=\"loading_3d\"/>\n\t\t\t<xs:enumeration value=\"out_plane_loading_2d\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAnalysisTheoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"first_order_theory\"/>\n\t\t\t<xs:enumeration value=\"full_nonlinear_theory\"/>\n\t\t\t<xs:enumeration value=\"second_order_theory\"/>\n\t\t\t<xs:enumeration value=\"third_order_theory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAnnotationTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"contourline\"/>\n\t\t\t<xs:enumeration value=\"dimension\"/>\n\t\t\t<xs:enumeration value=\"isobar\"/>\n\t\t\t<xs:enumeration value=\"isolux\"/>\n\t\t\t<xs:enumeration value=\"isotherm\"/>\n\t\t\t<xs:enumeration value=\"leader\"/>\n\t\t\t<xs:enumeration value=\"survey\"/>\n\t\t\t<xs:enumeration value=\"symbol\"/>\n\t\t\t<xs:enumeration value=\"text\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcArithmeticOperatorEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"add\"/>\n\t\t\t<xs:enumeration value=\"divide\"/>\n\t\t\t<xs:enumeration value=\"modulo\"/>\n\t\t\t<xs:enumeration value=\"multiply\"/>\n\t\t\t<xs:enumeration value=\"subtract\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAssemblyPlaceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"factory\"/>\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAudioVisualApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"amplifier\"/>\n\t\t\t<xs:enumeration value=\"camera\"/>\n\t\t\t<xs:enumeration value=\"communicationterminal\"/>\n\t\t\t<xs:enumeration value=\"display\"/>\n\t\t\t<xs:enumeration value=\"microphone\"/>\n\t\t\t<xs:enumeration value=\"player\"/>\n\t\t\t<xs:enumeration value=\"projector\"/>\n\t\t\t<xs:enumeration value=\"receiver\"/>\n\t\t\t<xs:enumeration value=\"recordingequipment\"/>\n\t\t\t<xs:enumeration value=\"speaker\"/>\n\t\t\t<xs:enumeration value=\"switcher\"/>\n\t\t\t<xs:enumeration value=\"telephone\"/>\n\t\t\t<xs:enumeration value=\"tuner\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBSplineCurveForm\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"circular_arc\"/>\n\t\t\t<xs:enumeration value=\"elliptic_arc\"/>\n\t\t\t<xs:enumeration value=\"hyperbolic_arc\"/>\n\t\t\t<xs:enumeration value=\"parabolic_arc\"/>\n\t\t\t<xs:enumeration value=\"polyline_form\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBSplineSurfaceForm\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"conical_surf\"/>\n\t\t\t<xs:enumeration value=\"cylindrical_surf\"/>\n\t\t\t<xs:enumeration value=\"generalised_cone\"/>\n\t\t\t<xs:enumeration value=\"plane_surf\"/>\n\t\t\t<xs:enumeration value=\"quadric_surf\"/>\n\t\t\t<xs:enumeration value=\"ruled_surf\"/>\n\t\t\t<xs:enumeration value=\"spherical_surf\"/>\n\t\t\t<xs:enumeration value=\"surf_of_linear_extrusion\"/>\n\t\t\t<xs:enumeration value=\"surf_of_revolution\"/>\n\t\t\t<xs:enumeration value=\"toroidal_surf\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBeamTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beam\"/>\n\t\t\t<xs:enumeration value=\"cornice\"/>\n\t\t\t<xs:enumeration value=\"diaphragm\"/>\n\t\t\t<xs:enumeration value=\"edgebeam\"/>\n\t\t\t<xs:enumeration value=\"girder_segment\"/>\n\t\t\t<xs:enumeration value=\"hatstone\"/>\n\t\t\t<xs:enumeration value=\"hollowcore\"/>\n\t\t\t<xs:enumeration value=\"joist\"/>\n\t\t\t<xs:enumeration value=\"lintel\"/>\n\t\t\t<xs:enumeration value=\"piercap\"/>\n\t\t\t<xs:enumeration value=\"spandrel\"/>\n\t\t\t<xs:enumeration value=\"t_beam\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBearingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cylindrical\"/>\n\t\t\t<xs:enumeration value=\"disk\"/>\n\t\t\t<xs:enumeration value=\"elastomeric\"/>\n\t\t\t<xs:enumeration value=\"guide\"/>\n\t\t\t<xs:enumeration value=\"pot\"/>\n\t\t\t<xs:enumeration value=\"rocker\"/>\n\t\t\t<xs:enumeration value=\"roller\"/>\n\t\t\t<xs:enumeration value=\"spherical\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBenchmarkEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"equalto\"/>\n\t\t\t<xs:enumeration value=\"greaterthan\"/>\n\t\t\t<xs:enumeration value=\"greaterthanorequalto\"/>\n\t\t\t<xs:enumeration value=\"includedin\"/>\n\t\t\t<xs:enumeration value=\"includes\"/>\n\t\t\t<xs:enumeration value=\"lessthan\"/>\n\t\t\t<xs:enumeration value=\"lessthanorequalto\"/>\n\t\t\t<xs:enumeration value=\"notequalto\"/>\n\t\t\t<xs:enumeration value=\"notincludedin\"/>\n\t\t\t<xs:enumeration value=\"notincludes\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBoilerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"steam\"/>\n\t\t\t<xs:enumeration value=\"water\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBooleanOperator\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"difference\"/>\n\t\t\t<xs:enumeration value=\"intersection\"/>\n\t\t\t<xs:enumeration value=\"union\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBridgePartTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"abutment\"/>\n\t\t\t<xs:enumeration value=\"deck\"/>\n\t\t\t<xs:enumeration value=\"deck_segment\"/>\n\t\t\t<xs:enumeration value=\"foundation\"/>\n\t\t\t<xs:enumeration value=\"pier\"/>\n\t\t\t<xs:enumeration value=\"pier_segment\"/>\n\t\t\t<xs:enumeration value=\"pylon\"/>\n\t\t\t<xs:enumeration value=\"substructure\"/>\n\t\t\t<xs:enumeration value=\"superstructure\"/>\n\t\t\t<xs:enumeration value=\"surfacestructure\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBridgeTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"arched\"/>\n\t\t\t<xs:enumeration value=\"cable_stayed\"/>\n\t\t\t<xs:enumeration value=\"cantilever\"/>\n\t\t\t<xs:enumeration value=\"culvert\"/>\n\t\t\t<xs:enumeration value=\"framework\"/>\n\t\t\t<xs:enumeration value=\"girder\"/>\n\t\t\t<xs:enumeration value=\"suspension\"/>\n\t\t\t<xs:enumeration value=\"truss\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingElementPartTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"apron\"/>\n\t\t\t<xs:enumeration value=\"armourunit\"/>\n\t\t\t<xs:enumeration value=\"insulation\"/>\n\t\t\t<xs:enumeration value=\"precastpanel\"/>\n\t\t\t<xs:enumeration value=\"safetycage\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingElementProxyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"complex\"/>\n\t\t\t<xs:enumeration value=\"element\"/>\n\t\t\t<xs:enumeration value=\"partial\"/>\n\t\t\t<xs:enumeration value=\"provisionforspace\"/>\n\t\t\t<xs:enumeration value=\"provisionforvoid\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuildingSystemTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"fenestration\"/>\n\t\t\t<xs:enumeration value=\"foundation\"/>\n\t\t\t<xs:enumeration value=\"loadbearing\"/>\n\t\t\t<xs:enumeration value=\"outershell\"/>\n\t\t\t<xs:enumeration value=\"shading\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBuiltSystemTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"erosionprevention\"/>\n\t\t\t<xs:enumeration value=\"fenestration\"/>\n\t\t\t<xs:enumeration value=\"foundation\"/>\n\t\t\t<xs:enumeration value=\"loadbearing\"/>\n\t\t\t<xs:enumeration value=\"mooring\"/>\n\t\t\t<xs:enumeration value=\"outershell\"/>\n\t\t\t<xs:enumeration value=\"prestressing\"/>\n\t\t\t<xs:enumeration value=\"railwayline\"/>\n\t\t\t<xs:enumeration value=\"railwaytrack\"/>\n\t\t\t<xs:enumeration value=\"reinforcing\"/>\n\t\t\t<xs:enumeration value=\"shading\"/>\n\t\t\t<xs:enumeration value=\"trackcircuit\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBurnerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableCarrierFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"cross\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"reducer\"/>\n\t\t\t<xs:enumeration value=\"tee\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableCarrierSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cablebracket\"/>\n\t\t\t<xs:enumeration value=\"cableladdersegment\"/>\n\t\t\t<xs:enumeration value=\"cabletraysegment\"/>\n\t\t\t<xs:enumeration value=\"cabletrunkingsegment\"/>\n\t\t\t<xs:enumeration value=\"catenarywire\"/>\n\t\t\t<xs:enumeration value=\"conduitsegment\"/>\n\t\t\t<xs:enumeration value=\"dropper\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"fanout\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCableSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"busbarsegment\"/>\n\t\t\t<xs:enumeration value=\"cablesegment\"/>\n\t\t\t<xs:enumeration value=\"conductorsegment\"/>\n\t\t\t<xs:enumeration value=\"contactwiresegment\"/>\n\t\t\t<xs:enumeration value=\"coresegment\"/>\n\t\t\t<xs:enumeration value=\"fibersegment\"/>\n\t\t\t<xs:enumeration value=\"fibertube\"/>\n\t\t\t<xs:enumeration value=\"opticalcablesegment\"/>\n\t\t\t<xs:enumeration value=\"stitchwire\"/>\n\t\t\t<xs:enumeration value=\"wirepairsegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCaissonFoundationTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"caisson\"/>\n\t\t\t<xs:enumeration value=\"well\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChangeActionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"added\"/>\n\t\t\t<xs:enumeration value=\"deleted\"/>\n\t\t\t<xs:enumeration value=\"modified\"/>\n\t\t\t<xs:enumeration value=\"nochange\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChillerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aircooled\"/>\n\t\t\t<xs:enumeration value=\"heatrecovery\"/>\n\t\t\t<xs:enumeration value=\"watercooled\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcChimneyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoilTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dxcoolingcoil\"/>\n\t\t\t<xs:enumeration value=\"electricheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"gasheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"hydroniccoil\"/>\n\t\t\t<xs:enumeration value=\"steamheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"watercoolingcoil\"/>\n\t\t\t<xs:enumeration value=\"waterheatingcoil\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcColumnTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"column\"/>\n\t\t\t<xs:enumeration value=\"pierstem\"/>\n\t\t\t<xs:enumeration value=\"pierstem_segment\"/>\n\t\t\t<xs:enumeration value=\"pilaster\"/>\n\t\t\t<xs:enumeration value=\"standcolumn\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCommunicationsApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"antenna\"/>\n\t\t\t<xs:enumeration value=\"automaton\"/>\n\t\t\t<xs:enumeration value=\"computer\"/>\n\t\t\t<xs:enumeration value=\"fax\"/>\n\t\t\t<xs:enumeration value=\"gateway\"/>\n\t\t\t<xs:enumeration value=\"intelligentperipheral\"/>\n\t\t\t<xs:enumeration value=\"ipnetworkequipment\"/>\n\t\t\t<xs:enumeration value=\"linesideelectronicunit\"/>\n\t\t\t<xs:enumeration value=\"modem\"/>\n\t\t\t<xs:enumeration value=\"networkappliance\"/>\n\t\t\t<xs:enumeration value=\"networkbridge\"/>\n\t\t\t<xs:enumeration value=\"networkhub\"/>\n\t\t\t<xs:enumeration value=\"opticallineterminal\"/>\n\t\t\t<xs:enumeration value=\"opticalnetworkunit\"/>\n\t\t\t<xs:enumeration value=\"printer\"/>\n\t\t\t<xs:enumeration value=\"radioblockcenter\"/>\n\t\t\t<xs:enumeration value=\"repeater\"/>\n\t\t\t<xs:enumeration value=\"router\"/>\n\t\t\t<xs:enumeration value=\"scanner\"/>\n\t\t\t<xs:enumeration value=\"telecommand\"/>\n\t\t\t<xs:enumeration value=\"telephonyexchange\"/>\n\t\t\t<xs:enumeration value=\"transitioncomponent\"/>\n\t\t\t<xs:enumeration value=\"transponder\"/>\n\t\t\t<xs:enumeration value=\"transportequipment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcComplexPropertyTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"p_complex\"/>\n\t\t\t<xs:enumeration value=\"q_complex\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCompressorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"booster\"/>\n\t\t\t<xs:enumeration value=\"dynamic\"/>\n\t\t\t<xs:enumeration value=\"hermetic\"/>\n\t\t\t<xs:enumeration value=\"opentype\"/>\n\t\t\t<xs:enumeration value=\"reciprocating\"/>\n\t\t\t<xs:enumeration value=\"rollingpiston\"/>\n\t\t\t<xs:enumeration value=\"rotary\"/>\n\t\t\t<xs:enumeration value=\"rotaryvane\"/>\n\t\t\t<xs:enumeration value=\"scroll\"/>\n\t\t\t<xs:enumeration value=\"semihermetic\"/>\n\t\t\t<xs:enumeration value=\"singlescrew\"/>\n\t\t\t<xs:enumeration value=\"singlestage\"/>\n\t\t\t<xs:enumeration value=\"trochoidal\"/>\n\t\t\t<xs:enumeration value=\"twinscrew\"/>\n\t\t\t<xs:enumeration value=\"weldedshellhermetic\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCondenserTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aircooled\"/>\n\t\t\t<xs:enumeration value=\"evaporativecooled\"/>\n\t\t\t<xs:enumeration value=\"watercooled\"/>\n\t\t\t<xs:enumeration value=\"watercooledbrazedplate\"/>\n\t\t\t<xs:enumeration value=\"watercooledshellcoil\"/>\n\t\t\t<xs:enumeration value=\"watercooledshelltube\"/>\n\t\t\t<xs:enumeration value=\"watercooledtubeintube\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConnectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"atend\"/>\n\t\t\t<xs:enumeration value=\"atpath\"/>\n\t\t\t<xs:enumeration value=\"atstart\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstraintEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"advisory\"/>\n\t\t\t<xs:enumeration value=\"hard\"/>\n\t\t\t<xs:enumeration value=\"soft\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionEquipmentResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"demolishing\"/>\n\t\t\t<xs:enumeration value=\"earthmoving\"/>\n\t\t\t<xs:enumeration value=\"erecting\"/>\n\t\t\t<xs:enumeration value=\"heating\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"paving\"/>\n\t\t\t<xs:enumeration value=\"pumping\"/>\n\t\t\t<xs:enumeration value=\"transporting\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionMaterialResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aggregates\"/>\n\t\t\t<xs:enumeration value=\"concrete\"/>\n\t\t\t<xs:enumeration value=\"drywall\"/>\n\t\t\t<xs:enumeration value=\"fuel\"/>\n\t\t\t<xs:enumeration value=\"gypsum\"/>\n\t\t\t<xs:enumeration value=\"masonry\"/>\n\t\t\t<xs:enumeration value=\"metal\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"wood\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConstructionProductResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assembly\"/>\n\t\t\t<xs:enumeration value=\"formwork\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcControllerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floating\"/>\n\t\t\t<xs:enumeration value=\"multiposition\"/>\n\t\t\t<xs:enumeration value=\"programmable\"/>\n\t\t\t<xs:enumeration value=\"proportional\"/>\n\t\t\t<xs:enumeration value=\"twoposition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcConveyorSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beltconveyor\"/>\n\t\t\t<xs:enumeration value=\"bucketconveyor\"/>\n\t\t\t<xs:enumeration value=\"chuteconveyor\"/>\n\t\t\t<xs:enumeration value=\"screwconveyor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCooledBeamTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"active\"/>\n\t\t\t<xs:enumeration value=\"passive\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoolingTowerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"mechanicalforceddraft\"/>\n\t\t\t<xs:enumeration value=\"mechanicalinduceddraft\"/>\n\t\t\t<xs:enumeration value=\"naturaldraft\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCostItemTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCostScheduleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"budget\"/>\n\t\t\t<xs:enumeration value=\"costplan\"/>\n\t\t\t<xs:enumeration value=\"estimate\"/>\n\t\t\t<xs:enumeration value=\"pricedbillofquantities\"/>\n\t\t\t<xs:enumeration value=\"scheduleofrates\"/>\n\t\t\t<xs:enumeration value=\"tender\"/>\n\t\t\t<xs:enumeration value=\"unpricedbillofquantities\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCourseTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"armour\"/>\n\t\t\t<xs:enumeration value=\"ballastbed\"/>\n\t\t\t<xs:enumeration value=\"core\"/>\n\t\t\t<xs:enumeration value=\"filter\"/>\n\t\t\t<xs:enumeration value=\"pavement\"/>\n\t\t\t<xs:enumeration value=\"protection\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCoveringTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ceiling\"/>\n\t\t\t<xs:enumeration value=\"cladding\"/>\n\t\t\t<xs:enumeration value=\"coping\"/>\n\t\t\t<xs:enumeration value=\"flooring\"/>\n\t\t\t<xs:enumeration value=\"insulation\"/>\n\t\t\t<xs:enumeration value=\"membrane\"/>\n\t\t\t<xs:enumeration value=\"molding\"/>\n\t\t\t<xs:enumeration value=\"roofing\"/>\n\t\t\t<xs:enumeration value=\"skirtingboard\"/>\n\t\t\t<xs:enumeration value=\"sleeving\"/>\n\t\t\t<xs:enumeration value=\"topping\"/>\n\t\t\t<xs:enumeration value=\"wrapping\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCrewResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"office\"/>\n\t\t\t<xs:enumeration value=\"site\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurtainWallTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurveInterpolationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"linear\"/>\n\t\t\t<xs:enumeration value=\"log_linear\"/>\n\t\t\t<xs:enumeration value=\"log_log\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDamperTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"backdraftdamper\"/>\n\t\t\t<xs:enumeration value=\"balancingdamper\"/>\n\t\t\t<xs:enumeration value=\"blastdamper\"/>\n\t\t\t<xs:enumeration value=\"controldamper\"/>\n\t\t\t<xs:enumeration value=\"firedamper\"/>\n\t\t\t<xs:enumeration value=\"firesmokedamper\"/>\n\t\t\t<xs:enumeration value=\"fumehoodexhaust\"/>\n\t\t\t<xs:enumeration value=\"gravitydamper\"/>\n\t\t\t<xs:enumeration value=\"gravityreliefdamper\"/>\n\t\t\t<xs:enumeration value=\"reliefdamper\"/>\n\t\t\t<xs:enumeration value=\"smokedamper\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDataOriginEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"measured\"/>\n\t\t\t<xs:enumeration value=\"predicted\"/>\n\t\t\t<xs:enumeration value=\"simulated\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDerivedUnitEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"accelerationunit\"/>\n\t\t\t<xs:enumeration value=\"angularvelocityunit\"/>\n\t\t\t<xs:enumeration value=\"areadensityunit\"/>\n\t\t\t<xs:enumeration value=\"compoundplaneangleunit\"/>\n\t\t\t<xs:enumeration value=\"curvatureunit\"/>\n\t\t\t<xs:enumeration value=\"dynamicviscosityunit\"/>\n\t\t\t<xs:enumeration value=\"heatfluxdensityunit\"/>\n\t\t\t<xs:enumeration value=\"heatingvalueunit\"/>\n\t\t\t<xs:enumeration value=\"integercountrateunit\"/>\n\t\t\t<xs:enumeration value=\"ionconcentrationunit\"/>\n\t\t\t<xs:enumeration value=\"isothermalmoisturecapacityunit\"/>\n\t\t\t<xs:enumeration value=\"kinematicviscosityunit\"/>\n\t\t\t<xs:enumeration value=\"linearforceunit\"/>\n\t\t\t<xs:enumeration value=\"linearmomentunit\"/>\n\t\t\t<xs:enumeration value=\"linearstiffnessunit\"/>\n\t\t\t<xs:enumeration value=\"linearvelocityunit\"/>\n\t\t\t<xs:enumeration value=\"luminousintensitydistributionunit\"/>\n\t\t\t<xs:enumeration value=\"massdensityunit\"/>\n\t\t\t<xs:enumeration value=\"massflowrateunit\"/>\n\t\t\t<xs:enumeration value=\"massperlengthunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofelasticityunit\"/>\n\t\t\t<xs:enumeration value=\"modulusoflinearsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofrotationalsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"modulusofsubgradereactionunit\"/>\n\t\t\t<xs:enumeration value=\"moisturediffusivityunit\"/>\n\t\t\t<xs:enumeration value=\"molecularweightunit\"/>\n\t\t\t<xs:enumeration value=\"momentofinertiaunit\"/>\n\t\t\t<xs:enumeration value=\"phunit\"/>\n\t\t\t<xs:enumeration value=\"planarforceunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalfrequencyunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalmassunit\"/>\n\t\t\t<xs:enumeration value=\"rotationalstiffnessunit\"/>\n\t\t\t<xs:enumeration value=\"sectionareaintegralunit\"/>\n\t\t\t<xs:enumeration value=\"sectionmodulusunit\"/>\n\t\t\t<xs:enumeration value=\"shearmodulusunit\"/>\n\t\t\t<xs:enumeration value=\"soundpowerlevelunit\"/>\n\t\t\t<xs:enumeration value=\"soundpowerunit\"/>\n\t\t\t<xs:enumeration value=\"soundpressurelevelunit\"/>\n\t\t\t<xs:enumeration value=\"soundpressureunit\"/>\n\t\t\t<xs:enumeration value=\"specificheatcapacityunit\"/>\n\t\t\t<xs:enumeration value=\"temperaturegradientunit\"/>\n\t\t\t<xs:enumeration value=\"temperaturerateofchangeunit\"/>\n\t\t\t<xs:enumeration value=\"thermaladmittanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermalconductanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermalexpansioncoefficientunit\"/>\n\t\t\t<xs:enumeration value=\"thermalresistanceunit\"/>\n\t\t\t<xs:enumeration value=\"thermaltransmittanceunit\"/>\n\t\t\t<xs:enumeration value=\"torqueunit\"/>\n\t\t\t<xs:enumeration value=\"vaporpermeabilityunit\"/>\n\t\t\t<xs:enumeration value=\"volumetricflowrateunit\"/>\n\t\t\t<xs:enumeration value=\"warpingconstantunit\"/>\n\t\t\t<xs:enumeration value=\"warpingmomentunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDirectionSenseEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"negative\"/>\n\t\t\t<xs:enumeration value=\"positive\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDiscreteAccessoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchorplate\"/>\n\t\t\t<xs:enumeration value=\"birdprotection\"/>\n\t\t\t<xs:enumeration value=\"bracket\"/>\n\t\t\t<xs:enumeration value=\"cablearranger\"/>\n\t\t\t<xs:enumeration value=\"elastic_cushion\"/>\n\t\t\t<xs:enumeration value=\"expansion_joint_device\"/>\n\t\t\t<xs:enumeration value=\"filler\"/>\n\t\t\t<xs:enumeration value=\"flashing\"/>\n\t\t\t<xs:enumeration value=\"insulator\"/>\n\t\t\t<xs:enumeration value=\"lock\"/>\n\t\t\t<xs:enumeration value=\"panel_strengthening\"/>\n\t\t\t<xs:enumeration value=\"pointmachinemountingdevice\"/>\n\t\t\t<xs:enumeration value=\"point_machine_locking_device\"/>\n\t\t\t<xs:enumeration value=\"railbrace\"/>\n\t\t\t<xs:enumeration value=\"railpad\"/>\n\t\t\t<xs:enumeration value=\"rail_lubrication\"/>\n\t\t\t<xs:enumeration value=\"rail_mechanical_equipment\"/>\n\t\t\t<xs:enumeration value=\"shoe\"/>\n\t\t\t<xs:enumeration value=\"slidingchair\"/>\n\t\t\t<xs:enumeration value=\"soundabsorption\"/>\n\t\t\t<xs:enumeration value=\"tensioningequipment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionBoardTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"consumerunit\"/>\n\t\t\t<xs:enumeration value=\"dispatchingboard\"/>\n\t\t\t<xs:enumeration value=\"distributionboard\"/>\n\t\t\t<xs:enumeration value=\"distributionframe\"/>\n\t\t\t<xs:enumeration value=\"motorcontrolcentre\"/>\n\t\t\t<xs:enumeration value=\"switchboard\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionChamberElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"formedduct\"/>\n\t\t\t<xs:enumeration value=\"inspectionchamber\"/>\n\t\t\t<xs:enumeration value=\"inspectionpit\"/>\n\t\t\t<xs:enumeration value=\"manhole\"/>\n\t\t\t<xs:enumeration value=\"meterchamber\"/>\n\t\t\t<xs:enumeration value=\"sump\"/>\n\t\t\t<xs:enumeration value=\"trench\"/>\n\t\t\t<xs:enumeration value=\"valvechamber\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionPortTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cable\"/>\n\t\t\t<xs:enumeration value=\"cablecarrier\"/>\n\t\t\t<xs:enumeration value=\"duct\"/>\n\t\t\t<xs:enumeration value=\"pipe\"/>\n\t\t\t<xs:enumeration value=\"wireless\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDistributionSystemEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airconditioning\"/>\n\t\t\t<xs:enumeration value=\"audiovisual\"/>\n\t\t\t<xs:enumeration value=\"catenary_system\"/>\n\t\t\t<xs:enumeration value=\"chemical\"/>\n\t\t\t<xs:enumeration value=\"chilledwater\"/>\n\t\t\t<xs:enumeration value=\"communication\"/>\n\t\t\t<xs:enumeration value=\"compressedair\"/>\n\t\t\t<xs:enumeration value=\"condenserwater\"/>\n\t\t\t<xs:enumeration value=\"control\"/>\n\t\t\t<xs:enumeration value=\"conveying\"/>\n\t\t\t<xs:enumeration value=\"data\"/>\n\t\t\t<xs:enumeration value=\"disposal\"/>\n\t\t\t<xs:enumeration value=\"domesticcoldwater\"/>\n\t\t\t<xs:enumeration value=\"domestichotwater\"/>\n\t\t\t<xs:enumeration value=\"drainage\"/>\n\t\t\t<xs:enumeration value=\"earthing\"/>\n\t\t\t<xs:enumeration value=\"electrical\"/>\n\t\t\t<xs:enumeration value=\"electroacoustic\"/>\n\t\t\t<xs:enumeration value=\"exhaust\"/>\n\t\t\t<xs:enumeration value=\"fireprotection\"/>\n\t\t\t<xs:enumeration value=\"fixedtransmissionnetwork\"/>\n\t\t\t<xs:enumeration value=\"fuel\"/>\n\t\t\t<xs:enumeration value=\"gas\"/>\n\t\t\t<xs:enumeration value=\"hazardous\"/>\n\t\t\t<xs:enumeration value=\"heating\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"lightningprotection\"/>\n\t\t\t<xs:enumeration value=\"mobilenetwork\"/>\n\t\t\t<xs:enumeration value=\"monitoringsystem\"/>\n\t\t\t<xs:enumeration value=\"municipalsolidwaste\"/>\n\t\t\t<xs:enumeration value=\"oil\"/>\n\t\t\t<xs:enumeration value=\"operational\"/>\n\t\t\t<xs:enumeration value=\"operationaltelephonysystem\"/>\n\t\t\t<xs:enumeration value=\"overhead_contactline_system\"/>\n\t\t\t<xs:enumeration value=\"powergeneration\"/>\n\t\t\t<xs:enumeration value=\"rainwater\"/>\n\t\t\t<xs:enumeration value=\"refrigeration\"/>\n\t\t\t<xs:enumeration value=\"return_circuit\"/>\n\t\t\t<xs:enumeration value=\"security\"/>\n\t\t\t<xs:enumeration value=\"sewage\"/>\n\t\t\t<xs:enumeration value=\"signal\"/>\n\t\t\t<xs:enumeration value=\"stormwater\"/>\n\t\t\t<xs:enumeration value=\"telephone\"/>\n\t\t\t<xs:enumeration value=\"tv\"/>\n\t\t\t<xs:enumeration value=\"vacuum\"/>\n\t\t\t<xs:enumeration value=\"vent\"/>\n\t\t\t<xs:enumeration value=\"ventilation\"/>\n\t\t\t<xs:enumeration value=\"wastewater\"/>\n\t\t\t<xs:enumeration value=\"watersupply\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDocumentConfidentialityEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"confidential\"/>\n\t\t\t<xs:enumeration value=\"personal\"/>\n\t\t\t<xs:enumeration value=\"public\"/>\n\t\t\t<xs:enumeration value=\"restricted\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDocumentStatusEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"draft\"/>\n\t\t\t<xs:enumeration value=\"final\"/>\n\t\t\t<xs:enumeration value=\"finaldraft\"/>\n\t\t\t<xs:enumeration value=\"revision\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorPanelOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"double_acting\"/>\n\t\t\t<xs:enumeration value=\"fixedpanel\"/>\n\t\t\t<xs:enumeration value=\"folding\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"sliding\"/>\n\t\t\t<xs:enumeration value=\"swinging\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorPanelPositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"middle\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"boom_barrier\"/>\n\t\t\t<xs:enumeration value=\"door\"/>\n\t\t\t<xs:enumeration value=\"gate\"/>\n\t\t\t<xs:enumeration value=\"trapdoor\"/>\n\t\t\t<xs:enumeration value=\"turnstile\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoorTypeOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"double_door_double_swing\"/>\n\t\t\t<xs:enumeration value=\"double_door_folding\"/>\n\t\t\t<xs:enumeration value=\"double_door_lifting_vertical\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_left\"/>\n\t\t\t<xs:enumeration value=\"double_door_single_swing_opposite_right\"/>\n\t\t\t<xs:enumeration value=\"double_door_sliding\"/>\n\t\t\t<xs:enumeration value=\"double_swing_left\"/>\n\t\t\t<xs:enumeration value=\"double_swing_right\"/>\n\t\t\t<xs:enumeration value=\"folding_to_left\"/>\n\t\t\t<xs:enumeration value=\"folding_to_right\"/>\n\t\t\t<xs:enumeration value=\"lifting_horizontal\"/>\n\t\t\t<xs:enumeration value=\"lifting_vertical_left\"/>\n\t\t\t<xs:enumeration value=\"lifting_vertical_right\"/>\n\t\t\t<xs:enumeration value=\"revolving\"/>\n\t\t\t<xs:enumeration value=\"revolving_vertical\"/>\n\t\t\t<xs:enumeration value=\"rollingup\"/>\n\t\t\t<xs:enumeration value=\"single_swing_left\"/>\n\t\t\t<xs:enumeration value=\"single_swing_right\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_left\"/>\n\t\t\t<xs:enumeration value=\"sliding_to_right\"/>\n\t\t\t<xs:enumeration value=\"swing_fixed_left\"/>\n\t\t\t<xs:enumeration value=\"swing_fixed_right\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"obstruction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuctSilencerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flatoval\"/>\n\t\t\t<xs:enumeration value=\"rectangular\"/>\n\t\t\t<xs:enumeration value=\"round\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEarthworksCutTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"base_excavation\"/>\n\t\t\t<xs:enumeration value=\"cut\"/>\n\t\t\t<xs:enumeration value=\"dredging\"/>\n\t\t\t<xs:enumeration value=\"excavation\"/>\n\t\t\t<xs:enumeration value=\"overexcavation\"/>\n\t\t\t<xs:enumeration value=\"pavementmilling\"/>\n\t\t\t<xs:enumeration value=\"stepexcavation\"/>\n\t\t\t<xs:enumeration value=\"topsoilremoval\"/>\n\t\t\t<xs:enumeration value=\"trench\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEarthworksFillTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"backfill\"/>\n\t\t\t<xs:enumeration value=\"counterweight\"/>\n\t\t\t<xs:enumeration value=\"embankment\"/>\n\t\t\t<xs:enumeration value=\"slopefill\"/>\n\t\t\t<xs:enumeration value=\"subgrade\"/>\n\t\t\t<xs:enumeration value=\"subgradebed\"/>\n\t\t\t<xs:enumeration value=\"transitionsection\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dishwasher\"/>\n\t\t\t<xs:enumeration value=\"electriccooker\"/>\n\t\t\t<xs:enumeration value=\"freestandingelectricheater\"/>\n\t\t\t<xs:enumeration value=\"freestandingfan\"/>\n\t\t\t<xs:enumeration value=\"freestandingwatercooler\"/>\n\t\t\t<xs:enumeration value=\"freestandingwaterheater\"/>\n\t\t\t<xs:enumeration value=\"freezer\"/>\n\t\t\t<xs:enumeration value=\"fridge_freezer\"/>\n\t\t\t<xs:enumeration value=\"handdryer\"/>\n\t\t\t<xs:enumeration value=\"kitchenmachine\"/>\n\t\t\t<xs:enumeration value=\"microwave\"/>\n\t\t\t<xs:enumeration value=\"photocopier\"/>\n\t\t\t<xs:enumeration value=\"refrigerator\"/>\n\t\t\t<xs:enumeration value=\"tumbledryer\"/>\n\t\t\t<xs:enumeration value=\"vendingmachine\"/>\n\t\t\t<xs:enumeration value=\"washingmachine\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricDistributionBoardTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"consumerunit\"/>\n\t\t\t<xs:enumeration value=\"distributionboard\"/>\n\t\t\t<xs:enumeration value=\"motorcontrolcentre\"/>\n\t\t\t<xs:enumeration value=\"switchboard\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricFlowStorageDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"battery\"/>\n\t\t\t<xs:enumeration value=\"capacitor\"/>\n\t\t\t<xs:enumeration value=\"capacitorbank\"/>\n\t\t\t<xs:enumeration value=\"compensator\"/>\n\t\t\t<xs:enumeration value=\"harmonicfilter\"/>\n\t\t\t<xs:enumeration value=\"inductor\"/>\n\t\t\t<xs:enumeration value=\"inductorbank\"/>\n\t\t\t<xs:enumeration value=\"recharger\"/>\n\t\t\t<xs:enumeration value=\"ups\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricFlowTreatmentDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electronicfilter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricGeneratorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"chp\"/>\n\t\t\t<xs:enumeration value=\"enginegenerator\"/>\n\t\t\t<xs:enumeration value=\"standalone\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricMotorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dc\"/>\n\t\t\t<xs:enumeration value=\"induction\"/>\n\t\t\t<xs:enumeration value=\"polyphase\"/>\n\t\t\t<xs:enumeration value=\"reluctancesynchronous\"/>\n\t\t\t<xs:enumeration value=\"synchronous\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricTimeControlTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"relay\"/>\n\t\t\t<xs:enumeration value=\"timeclock\"/>\n\t\t\t<xs:enumeration value=\"timedelay\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElementAssemblyTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"abutment\"/>\n\t\t\t<xs:enumeration value=\"accessory_assembly\"/>\n\t\t\t<xs:enumeration value=\"arch\"/>\n\t\t\t<xs:enumeration value=\"beam_grid\"/>\n\t\t\t<xs:enumeration value=\"braced_frame\"/>\n\t\t\t<xs:enumeration value=\"cross_bracing\"/>\n\t\t\t<xs:enumeration value=\"deck\"/>\n\t\t\t<xs:enumeration value=\"dilatationpanel\"/>\n\t\t\t<xs:enumeration value=\"entranceworks\"/>\n\t\t\t<xs:enumeration value=\"girder\"/>\n\t\t\t<xs:enumeration value=\"grid\"/>\n\t\t\t<xs:enumeration value=\"mast\"/>\n\t\t\t<xs:enumeration value=\"pier\"/>\n\t\t\t<xs:enumeration value=\"pylon\"/>\n\t\t\t<xs:enumeration value=\"rail_mechanical_equipment_assembly\"/>\n\t\t\t<xs:enumeration value=\"reinforcement_unit\"/>\n\t\t\t<xs:enumeration value=\"rigid_frame\"/>\n\t\t\t<xs:enumeration value=\"shelter\"/>\n\t\t\t<xs:enumeration value=\"signalassembly\"/>\n\t\t\t<xs:enumeration value=\"slab_field\"/>\n\t\t\t<xs:enumeration value=\"sumpbuster\"/>\n\t\t\t<xs:enumeration value=\"supportingassembly\"/>\n\t\t\t<xs:enumeration value=\"suspensionassembly\"/>\n\t\t\t<xs:enumeration value=\"trackpanel\"/>\n\t\t\t<xs:enumeration value=\"traction_switching_assembly\"/>\n\t\t\t<xs:enumeration value=\"traffic_calming_device\"/>\n\t\t\t<xs:enumeration value=\"truss\"/>\n\t\t\t<xs:enumeration value=\"turnoutpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElementCompositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"complex\"/>\n\t\t\t<xs:enumeration value=\"element\"/>\n\t\t\t<xs:enumeration value=\"partial\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEngineTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"externalcombustion\"/>\n\t\t\t<xs:enumeration value=\"internalcombustion\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEvaporativeCoolerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directevaporativeairwasher\"/>\n\t\t\t<xs:enumeration value=\"directevaporativepackagedrotaryaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativerandommediaaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativerigidmediaaircooler\"/>\n\t\t\t<xs:enumeration value=\"directevaporativeslingerspackagedaircooler\"/>\n\t\t\t<xs:enumeration value=\"indirectdirectcombination\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativecoolingtowerorcoilcooler\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativepackageaircooler\"/>\n\t\t\t<xs:enumeration value=\"indirectevaporativewetcoil\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEvaporatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directexpansion\"/>\n\t\t\t<xs:enumeration value=\"directexpansionbrazedplate\"/>\n\t\t\t<xs:enumeration value=\"directexpansionshellandtube\"/>\n\t\t\t<xs:enumeration value=\"directexpansiontubeintube\"/>\n\t\t\t<xs:enumeration value=\"floodedshellandtube\"/>\n\t\t\t<xs:enumeration value=\"shellandcoil\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEventTriggerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"eventcomplex\"/>\n\t\t\t<xs:enumeration value=\"eventmessage\"/>\n\t\t\t<xs:enumeration value=\"eventrule\"/>\n\t\t\t<xs:enumeration value=\"eventtime\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEventTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"endevent\"/>\n\t\t\t<xs:enumeration value=\"intermediateevent\"/>\n\t\t\t<xs:enumeration value=\"startevent\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcExternalSpatialElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"external_earth\"/>\n\t\t\t<xs:enumeration value=\"external_fire\"/>\n\t\t\t<xs:enumeration value=\"external_water\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFacilityPartCommonTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"aboveground\"/>\n\t\t\t<xs:enumeration value=\"belowground\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"levelcrossing\"/>\n\t\t\t<xs:enumeration value=\"segment\"/>\n\t\t\t<xs:enumeration value=\"substructure\"/>\n\t\t\t<xs:enumeration value=\"superstructure\"/>\n\t\t\t<xs:enumeration value=\"terminal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFacilityUsageEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"lateral\"/>\n\t\t\t<xs:enumeration value=\"longitudinal\"/>\n\t\t\t<xs:enumeration value=\"region\"/>\n\t\t\t<xs:enumeration value=\"vertical\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFanTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"centrifugalairfoil\"/>\n\t\t\t<xs:enumeration value=\"centrifugalbackwardinclinedcurved\"/>\n\t\t\t<xs:enumeration value=\"centrifugalforwardcurved\"/>\n\t\t\t<xs:enumeration value=\"centrifugalradial\"/>\n\t\t\t<xs:enumeration value=\"propelloraxial\"/>\n\t\t\t<xs:enumeration value=\"tubeaxial\"/>\n\t\t\t<xs:enumeration value=\"vaneaxial\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFastenerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"glue\"/>\n\t\t\t<xs:enumeration value=\"mortar\"/>\n\t\t\t<xs:enumeration value=\"weld\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFilterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airparticlefilter\"/>\n\t\t\t<xs:enumeration value=\"compressedairfilter\"/>\n\t\t\t<xs:enumeration value=\"odorfilter\"/>\n\t\t\t<xs:enumeration value=\"oilfilter\"/>\n\t\t\t<xs:enumeration value=\"strainer\"/>\n\t\t\t<xs:enumeration value=\"waterfilter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFireSuppressionTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"breechinginlet\"/>\n\t\t\t<xs:enumeration value=\"firehydrant\"/>\n\t\t\t<xs:enumeration value=\"firemonitor\"/>\n\t\t\t<xs:enumeration value=\"hosereel\"/>\n\t\t\t<xs:enumeration value=\"sprinkler\"/>\n\t\t\t<xs:enumeration value=\"sprinklerdeflector\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"sink\"/>\n\t\t\t<xs:enumeration value=\"source\"/>\n\t\t\t<xs:enumeration value=\"sourceandsink\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowInstrumentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ammeter\"/>\n\t\t\t<xs:enumeration value=\"combined\"/>\n\t\t\t<xs:enumeration value=\"frequencymeter\"/>\n\t\t\t<xs:enumeration value=\"phaseanglemeter\"/>\n\t\t\t<xs:enumeration value=\"powerfactormeter\"/>\n\t\t\t<xs:enumeration value=\"pressuregauge\"/>\n\t\t\t<xs:enumeration value=\"thermometer\"/>\n\t\t\t<xs:enumeration value=\"voltmeter\"/>\n\t\t\t<xs:enumeration value=\"voltmeter_peak\"/>\n\t\t\t<xs:enumeration value=\"voltmeter_rms\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFlowMeterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"energymeter\"/>\n\t\t\t<xs:enumeration value=\"gasmeter\"/>\n\t\t\t<xs:enumeration value=\"oilmeter\"/>\n\t\t\t<xs:enumeration value=\"watermeter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFootingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"caisson_foundation\"/>\n\t\t\t<xs:enumeration value=\"footing_beam\"/>\n\t\t\t<xs:enumeration value=\"pad_footing\"/>\n\t\t\t<xs:enumeration value=\"pile_cap\"/>\n\t\t\t<xs:enumeration value=\"strip_footing\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFurnitureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bed\"/>\n\t\t\t<xs:enumeration value=\"chair\"/>\n\t\t\t<xs:enumeration value=\"desk\"/>\n\t\t\t<xs:enumeration value=\"filecabinet\"/>\n\t\t\t<xs:enumeration value=\"shelf\"/>\n\t\t\t<xs:enumeration value=\"sofa\"/>\n\t\t\t<xs:enumeration value=\"table\"/>\n\t\t\t<xs:enumeration value=\"technicalcabinet\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGeographicElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"soil_boring_point\"/>\n\t\t\t<xs:enumeration value=\"terrain\"/>\n\t\t\t<xs:enumeration value=\"vegetation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGeometricProjectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"elevation_view\"/>\n\t\t\t<xs:enumeration value=\"graph_view\"/>\n\t\t\t<xs:enumeration value=\"model_view\"/>\n\t\t\t<xs:enumeration value=\"plan_view\"/>\n\t\t\t<xs:enumeration value=\"reflected_plan_view\"/>\n\t\t\t<xs:enumeration value=\"section_view\"/>\n\t\t\t<xs:enumeration value=\"sketch_view\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGeotechnicalStratumTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"solid\"/>\n\t\t\t<xs:enumeration value=\"void\"/>\n\t\t\t<xs:enumeration value=\"water\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGlobalOrLocalEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"global_coords\"/>\n\t\t\t<xs:enumeration value=\"local_coords\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGridTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"irregular\"/>\n\t\t\t<xs:enumeration value=\"radial\"/>\n\t\t\t<xs:enumeration value=\"rectangular\"/>\n\t\t\t<xs:enumeration value=\"triangular\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatExchangerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plate\"/>\n\t\t\t<xs:enumeration value=\"shellandtube\"/>\n\t\t\t<xs:enumeration value=\"turnoutheating\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHumidifierTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"adiabaticairwasher\"/>\n\t\t\t<xs:enumeration value=\"adiabaticatomizing\"/>\n\t\t\t<xs:enumeration value=\"adiabaticcompressedairnozzle\"/>\n\t\t\t<xs:enumeration value=\"adiabaticpan\"/>\n\t\t\t<xs:enumeration value=\"adiabaticrigidmedia\"/>\n\t\t\t<xs:enumeration value=\"adiabaticultrasonic\"/>\n\t\t\t<xs:enumeration value=\"adiabaticwettedelement\"/>\n\t\t\t<xs:enumeration value=\"assistedbutane\"/>\n\t\t\t<xs:enumeration value=\"assistedelectric\"/>\n\t\t\t<xs:enumeration value=\"assistednaturalgas\"/>\n\t\t\t<xs:enumeration value=\"assistedpropane\"/>\n\t\t\t<xs:enumeration value=\"assistedsteam\"/>\n\t\t\t<xs:enumeration value=\"steaminjection\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcImpactProtectionDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bumper\"/>\n\t\t\t<xs:enumeration value=\"crashcushion\"/>\n\t\t\t<xs:enumeration value=\"dampingsystem\"/>\n\t\t\t<xs:enumeration value=\"fender\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInterceptorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cyclonic\"/>\n\t\t\t<xs:enumeration value=\"grease\"/>\n\t\t\t<xs:enumeration value=\"oil\"/>\n\t\t\t<xs:enumeration value=\"petrol\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInternalOrExternalEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"external_earth\"/>\n\t\t\t<xs:enumeration value=\"external_fire\"/>\n\t\t\t<xs:enumeration value=\"external_water\"/>\n\t\t\t<xs:enumeration value=\"internal\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInventoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assetinventory\"/>\n\t\t\t<xs:enumeration value=\"furnitureinventory\"/>\n\t\t\t<xs:enumeration value=\"spaceinventory\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcJunctionBoxTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"data\"/>\n\t\t\t<xs:enumeration value=\"power\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcKerbTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcKnotType\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"piecewise_bezier_knots\"/>\n\t\t\t<xs:enumeration value=\"quasi_uniform_knots\"/>\n\t\t\t<xs:enumeration value=\"uniform_knots\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLaborResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"administration\"/>\n\t\t\t<xs:enumeration value=\"carpentry\"/>\n\t\t\t<xs:enumeration value=\"cleaning\"/>\n\t\t\t<xs:enumeration value=\"concrete\"/>\n\t\t\t<xs:enumeration value=\"drywall\"/>\n\t\t\t<xs:enumeration value=\"electric\"/>\n\t\t\t<xs:enumeration value=\"finishing\"/>\n\t\t\t<xs:enumeration value=\"flooring\"/>\n\t\t\t<xs:enumeration value=\"general\"/>\n\t\t\t<xs:enumeration value=\"hvac\"/>\n\t\t\t<xs:enumeration value=\"landscaping\"/>\n\t\t\t<xs:enumeration value=\"masonry\"/>\n\t\t\t<xs:enumeration value=\"painting\"/>\n\t\t\t<xs:enumeration value=\"paving\"/>\n\t\t\t<xs:enumeration value=\"plumbing\"/>\n\t\t\t<xs:enumeration value=\"roofing\"/>\n\t\t\t<xs:enumeration value=\"sitegrading\"/>\n\t\t\t<xs:enumeration value=\"steelwork\"/>\n\t\t\t<xs:enumeration value=\"surveying\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLampTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\n\t\t\t<xs:enumeration value=\"halogen\"/>\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"led\"/>\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\n\t\t\t<xs:enumeration value=\"oled\"/>\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLayerSetDirectionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"axis1\"/>\n\t\t\t<xs:enumeration value=\"axis2\"/>\n\t\t\t<xs:enumeration value=\"axis3\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightDistributionCurveEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"type_a\"/>\n\t\t\t<xs:enumeration value=\"type_b\"/>\n\t\t\t<xs:enumeration value=\"type_c\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightEmissionSourceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"compactfluorescent\"/>\n\t\t\t<xs:enumeration value=\"fluorescent\"/>\n\t\t\t<xs:enumeration value=\"highpressuremercury\"/>\n\t\t\t<xs:enumeration value=\"highpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"lightemittingdiode\"/>\n\t\t\t<xs:enumeration value=\"lowpressuresodium\"/>\n\t\t\t<xs:enumeration value=\"lowvoltagehalogen\"/>\n\t\t\t<xs:enumeration value=\"mainvoltagehalogen\"/>\n\t\t\t<xs:enumeration value=\"metalhalide\"/>\n\t\t\t<xs:enumeration value=\"tungstenfilament\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLightFixtureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"directionsource\"/>\n\t\t\t<xs:enumeration value=\"pointsource\"/>\n\t\t\t<xs:enumeration value=\"securitylighting\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLiquidTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"hosereel\"/>\n\t\t\t<xs:enumeration value=\"loadingarm\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLoadGroupTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"load_case\"/>\n\t\t\t<xs:enumeration value=\"load_combination\"/>\n\t\t\t<xs:enumeration value=\"load_group\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLogicalOperatorEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"logicaland\"/>\n\t\t\t<xs:enumeration value=\"logicalnotand\"/>\n\t\t\t<xs:enumeration value=\"logicalnotor\"/>\n\t\t\t<xs:enumeration value=\"logicalor\"/>\n\t\t\t<xs:enumeration value=\"logicalxor\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMarineFacilityTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"barrierbeach\"/>\n\t\t\t<xs:enumeration value=\"breakwater\"/>\n\t\t\t<xs:enumeration value=\"canal\"/>\n\t\t\t<xs:enumeration value=\"drydock\"/>\n\t\t\t<xs:enumeration value=\"floatingdock\"/>\n\t\t\t<xs:enumeration value=\"hydrolift\"/>\n\t\t\t<xs:enumeration value=\"jetty\"/>\n\t\t\t<xs:enumeration value=\"launchrecovery\"/>\n\t\t\t<xs:enumeration value=\"marinedefence\"/>\n\t\t\t<xs:enumeration value=\"navigationalchannel\"/>\n\t\t\t<xs:enumeration value=\"port\"/>\n\t\t\t<xs:enumeration value=\"quay\"/>\n\t\t\t<xs:enumeration value=\"revetment\"/>\n\t\t\t<xs:enumeration value=\"shiplift\"/>\n\t\t\t<xs:enumeration value=\"shiplock\"/>\n\t\t\t<xs:enumeration value=\"shipyard\"/>\n\t\t\t<xs:enumeration value=\"slipway\"/>\n\t\t\t<xs:enumeration value=\"waterway\"/>\n\t\t\t<xs:enumeration value=\"waterwayshiplift\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMarinePartTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"abovewaterline\"/>\n\t\t\t<xs:enumeration value=\"anchorage\"/>\n\t\t\t<xs:enumeration value=\"approachchannel\"/>\n\t\t\t<xs:enumeration value=\"belowwaterline\"/>\n\t\t\t<xs:enumeration value=\"berthingstructure\"/>\n\t\t\t<xs:enumeration value=\"chamber\"/>\n\t\t\t<xs:enumeration value=\"cill_level\"/>\n\t\t\t<xs:enumeration value=\"copelevel\"/>\n\t\t\t<xs:enumeration value=\"core\"/>\n\t\t\t<xs:enumeration value=\"crest\"/>\n\t\t\t<xs:enumeration value=\"gatehead\"/>\n\t\t\t<xs:enumeration value=\"gudingstructure\"/>\n\t\t\t<xs:enumeration value=\"highwaterline\"/>\n\t\t\t<xs:enumeration value=\"landfield\"/>\n\t\t\t<xs:enumeration value=\"leewardside\"/>\n\t\t\t<xs:enumeration value=\"lowwaterline\"/>\n\t\t\t<xs:enumeration value=\"manufacturing\"/>\n\t\t\t<xs:enumeration value=\"navigationalarea\"/>\n\t\t\t<xs:enumeration value=\"protection\"/>\n\t\t\t<xs:enumeration value=\"shiptransfer\"/>\n\t\t\t<xs:enumeration value=\"storagearea\"/>\n\t\t\t<xs:enumeration value=\"vehicleservicing\"/>\n\t\t\t<xs:enumeration value=\"waterfield\"/>\n\t\t\t<xs:enumeration value=\"weatherside\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMechanicalFastenerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchorbolt\"/>\n\t\t\t<xs:enumeration value=\"bolt\"/>\n\t\t\t<xs:enumeration value=\"chain\"/>\n\t\t\t<xs:enumeration value=\"coupler\"/>\n\t\t\t<xs:enumeration value=\"dowel\"/>\n\t\t\t<xs:enumeration value=\"nail\"/>\n\t\t\t<xs:enumeration value=\"nailplate\"/>\n\t\t\t<xs:enumeration value=\"railfastening\"/>\n\t\t\t<xs:enumeration value=\"railjoint\"/>\n\t\t\t<xs:enumeration value=\"rivet\"/>\n\t\t\t<xs:enumeration value=\"rope\"/>\n\t\t\t<xs:enumeration value=\"screw\"/>\n\t\t\t<xs:enumeration value=\"shearconnector\"/>\n\t\t\t<xs:enumeration value=\"staple\"/>\n\t\t\t<xs:enumeration value=\"studshearconnector\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMedicalDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airstation\"/>\n\t\t\t<xs:enumeration value=\"feedairunit\"/>\n\t\t\t<xs:enumeration value=\"oxygengenerator\"/>\n\t\t\t<xs:enumeration value=\"oxygenplant\"/>\n\t\t\t<xs:enumeration value=\"vacuumstation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"arch_segment\"/>\n\t\t\t<xs:enumeration value=\"brace\"/>\n\t\t\t<xs:enumeration value=\"chord\"/>\n\t\t\t<xs:enumeration value=\"collar\"/>\n\t\t\t<xs:enumeration value=\"member\"/>\n\t\t\t<xs:enumeration value=\"mullion\"/>\n\t\t\t<xs:enumeration value=\"plate\"/>\n\t\t\t<xs:enumeration value=\"post\"/>\n\t\t\t<xs:enumeration value=\"purlin\"/>\n\t\t\t<xs:enumeration value=\"rafter\"/>\n\t\t\t<xs:enumeration value=\"stay_cable\"/>\n\t\t\t<xs:enumeration value=\"stiffening_rib\"/>\n\t\t\t<xs:enumeration value=\"stringer\"/>\n\t\t\t<xs:enumeration value=\"structuralcable\"/>\n\t\t\t<xs:enumeration value=\"strut\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"suspender\"/>\n\t\t\t<xs:enumeration value=\"suspension_cable\"/>\n\t\t\t<xs:enumeration value=\"tiebar\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMobileTelecommunicationsApplianceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"accesspoint\"/>\n\t\t\t<xs:enumeration value=\"basebandunit\"/>\n\t\t\t<xs:enumeration value=\"basetransceiverstation\"/>\n\t\t\t<xs:enumeration value=\"e_utran_node_b\"/>\n\t\t\t<xs:enumeration value=\"gateway_gprs_support_node\"/>\n\t\t\t<xs:enumeration value=\"masterunit\"/>\n\t\t\t<xs:enumeration value=\"mobileswitchingcenter\"/>\n\t\t\t<xs:enumeration value=\"mscserver\"/>\n\t\t\t<xs:enumeration value=\"packetcontrolunit\"/>\n\t\t\t<xs:enumeration value=\"remoteradiounit\"/>\n\t\t\t<xs:enumeration value=\"remoteunit\"/>\n\t\t\t<xs:enumeration value=\"service_gprs_support_node\"/>\n\t\t\t<xs:enumeration value=\"subscriberserver\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMooringDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bollard\"/>\n\t\t\t<xs:enumeration value=\"linetensioner\"/>\n\t\t\t<xs:enumeration value=\"magneticdevice\"/>\n\t\t\t<xs:enumeration value=\"mooringhooks\"/>\n\t\t\t<xs:enumeration value=\"vacuumdevice\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMotorConnectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beltdrive\"/>\n\t\t\t<xs:enumeration value=\"coupling\"/>\n\t\t\t<xs:enumeration value=\"directdrive\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNavigationElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"beacon\"/>\n\t\t\t<xs:enumeration value=\"buoy\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcObjectiveEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"codecompliance\"/>\n\t\t\t<xs:enumeration value=\"codewaiver\"/>\n\t\t\t<xs:enumeration value=\"designintent\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"healthandsafety\"/>\n\t\t\t<xs:enumeration value=\"mergeconflict\"/>\n\t\t\t<xs:enumeration value=\"modelview\"/>\n\t\t\t<xs:enumeration value=\"parameter\"/>\n\t\t\t<xs:enumeration value=\"requirement\"/>\n\t\t\t<xs:enumeration value=\"specification\"/>\n\t\t\t<xs:enumeration value=\"triggercondition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOccupantTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"assignee\"/>\n\t\t\t<xs:enumeration value=\"assignor\"/>\n\t\t\t<xs:enumeration value=\"lessee\"/>\n\t\t\t<xs:enumeration value=\"lessor\"/>\n\t\t\t<xs:enumeration value=\"lettingagent\"/>\n\t\t\t<xs:enumeration value=\"owner\"/>\n\t\t\t<xs:enumeration value=\"tenant\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOpeningElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"opening\"/>\n\t\t\t<xs:enumeration value=\"recess\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcOutletTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"audiovisualoutlet\"/>\n\t\t\t<xs:enumeration value=\"communicationsoutlet\"/>\n\t\t\t<xs:enumeration value=\"dataoutlet\"/>\n\t\t\t<xs:enumeration value=\"poweroutlet\"/>\n\t\t\t<xs:enumeration value=\"telephoneoutlet\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPavementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"flexible\"/>\n\t\t\t<xs:enumeration value=\"rigid\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPerformanceHistoryTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPermeableCoveringOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"grill\"/>\n\t\t\t<xs:enumeration value=\"louver\"/>\n\t\t\t<xs:enumeration value=\"screen\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPermitTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"access\"/>\n\t\t\t<xs:enumeration value=\"building\"/>\n\t\t\t<xs:enumeration value=\"work\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPhysicalOrVirtualEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"physical\"/>\n\t\t\t<xs:enumeration value=\"virtual\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPileConstructionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cast_in_place\"/>\n\t\t\t<xs:enumeration value=\"composite\"/>\n\t\t\t<xs:enumeration value=\"precast_concrete\"/>\n\t\t\t<xs:enumeration value=\"prefab_steel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPileTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bored\"/>\n\t\t\t<xs:enumeration value=\"cohesion\"/>\n\t\t\t<xs:enumeration value=\"driven\"/>\n\t\t\t<xs:enumeration value=\"friction\"/>\n\t\t\t<xs:enumeration value=\"jetgrouting\"/>\n\t\t\t<xs:enumeration value=\"support\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPipeFittingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bend\"/>\n\t\t\t<xs:enumeration value=\"connector\"/>\n\t\t\t<xs:enumeration value=\"entry\"/>\n\t\t\t<xs:enumeration value=\"exit\"/>\n\t\t\t<xs:enumeration value=\"junction\"/>\n\t\t\t<xs:enumeration value=\"obstruction\"/>\n\t\t\t<xs:enumeration value=\"transition\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPipeSegmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"culvert\"/>\n\t\t\t<xs:enumeration value=\"flexiblesegment\"/>\n\t\t\t<xs:enumeration value=\"gutter\"/>\n\t\t\t<xs:enumeration value=\"rigidsegment\"/>\n\t\t\t<xs:enumeration value=\"spool\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"base_plate\"/>\n\t\t\t<xs:enumeration value=\"cover_plate\"/>\n\t\t\t<xs:enumeration value=\"curtain_panel\"/>\n\t\t\t<xs:enumeration value=\"flange_plate\"/>\n\t\t\t<xs:enumeration value=\"gusset_plate\"/>\n\t\t\t<xs:enumeration value=\"sheet\"/>\n\t\t\t<xs:enumeration value=\"splice_plate\"/>\n\t\t\t<xs:enumeration value=\"stiffener_plate\"/>\n\t\t\t<xs:enumeration value=\"web_plate\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPreferredSurfaceCurveRepresentation\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curve3d\"/>\n\t\t\t<xs:enumeration value=\"pcurve_s1\"/>\n\t\t\t<xs:enumeration value=\"pcurve_s2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProcedureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"advice_caution\"/>\n\t\t\t<xs:enumeration value=\"advice_note\"/>\n\t\t\t<xs:enumeration value=\"advice_warning\"/>\n\t\t\t<xs:enumeration value=\"calibration\"/>\n\t\t\t<xs:enumeration value=\"diagnostic\"/>\n\t\t\t<xs:enumeration value=\"shutdown\"/>\n\t\t\t<xs:enumeration value=\"startup\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProfileTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"area\"/>\n\t\t\t<xs:enumeration value=\"curve\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectOrderTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"changeorder\"/>\n\t\t\t<xs:enumeration value=\"maintenanceworkorder\"/>\n\t\t\t<xs:enumeration value=\"moveorder\"/>\n\t\t\t<xs:enumeration value=\"purchaseorder\"/>\n\t\t\t<xs:enumeration value=\"workorder\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectedOrTrueLengthEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"projected_length\"/>\n\t\t\t<xs:enumeration value=\"true_length\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProjectionElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blister\"/>\n\t\t\t<xs:enumeration value=\"deviator\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPropertySetTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"pset_materialdriven\"/>\n\t\t\t<xs:enumeration value=\"pset_occurrencedriven\"/>\n\t\t\t<xs:enumeration value=\"pset_performancedriven\"/>\n\t\t\t<xs:enumeration value=\"pset_profiledriven\"/>\n\t\t\t<xs:enumeration value=\"pset_typedrivenonly\"/>\n\t\t\t<xs:enumeration value=\"pset_typedrivenoverride\"/>\n\t\t\t<xs:enumeration value=\"qto_occurrencedriven\"/>\n\t\t\t<xs:enumeration value=\"qto_typedrivenonly\"/>\n\t\t\t<xs:enumeration value=\"qto_typedrivenoverride\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProtectiveDeviceTrippingUnitTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"electromagnetic\"/>\n\t\t\t<xs:enumeration value=\"electronic\"/>\n\t\t\t<xs:enumeration value=\"residualcurrent\"/>\n\t\t\t<xs:enumeration value=\"thermal\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcProtectiveDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anti_arcing_device\"/>\n\t\t\t<xs:enumeration value=\"circuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"earthingswitch\"/>\n\t\t\t<xs:enumeration value=\"earthleakagecircuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"fusedisconnector\"/>\n\t\t\t<xs:enumeration value=\"residualcurrentcircuitbreaker\"/>\n\t\t\t<xs:enumeration value=\"residualcurrentswitch\"/>\n\t\t\t<xs:enumeration value=\"sparkgap\"/>\n\t\t\t<xs:enumeration value=\"varistor\"/>\n\t\t\t<xs:enumeration value=\"voltagelimiter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPumpTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"circulator\"/>\n\t\t\t<xs:enumeration value=\"endsuction\"/>\n\t\t\t<xs:enumeration value=\"splitcase\"/>\n\t\t\t<xs:enumeration value=\"submersiblepump\"/>\n\t\t\t<xs:enumeration value=\"sumppump\"/>\n\t\t\t<xs:enumeration value=\"verticalinline\"/>\n\t\t\t<xs:enumeration value=\"verticalturbine\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRailTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blade\"/>\n\t\t\t<xs:enumeration value=\"checkrail\"/>\n\t\t\t<xs:enumeration value=\"guardrail\"/>\n\t\t\t<xs:enumeration value=\"rackrail\"/>\n\t\t\t<xs:enumeration value=\"rail\"/>\n\t\t\t<xs:enumeration value=\"stockrail\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRailingTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"balustrade\"/>\n\t\t\t<xs:enumeration value=\"fence\"/>\n\t\t\t<xs:enumeration value=\"guardrail\"/>\n\t\t\t<xs:enumeration value=\"handrail\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRailwayPartTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"abovetrack\"/>\n\t\t\t<xs:enumeration value=\"dilationtrack\"/>\n\t\t\t<xs:enumeration value=\"lineside\"/>\n\t\t\t<xs:enumeration value=\"linesidepart\"/>\n\t\t\t<xs:enumeration value=\"plaintrack\"/>\n\t\t\t<xs:enumeration value=\"substructure\"/>\n\t\t\t<xs:enumeration value=\"track\"/>\n\t\t\t<xs:enumeration value=\"trackpart\"/>\n\t\t\t<xs:enumeration value=\"turnouttrack\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRailwayTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRampFlightTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"spiral\"/>\n\t\t\t<xs:enumeration value=\"straight\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRampTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"half_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"quarter_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"spiral_ramp\"/>\n\t\t\t<xs:enumeration value=\"straight_run_ramp\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_turn_ramp\"/>\n\t\t\t<xs:enumeration value=\"two_straight_run_ramp\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRecurrenceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"by_day_count\"/>\n\t\t\t<xs:enumeration value=\"by_weekday_count\"/>\n\t\t\t<xs:enumeration value=\"daily\"/>\n\t\t\t<xs:enumeration value=\"monthly_by_day_of_month\"/>\n\t\t\t<xs:enumeration value=\"monthly_by_position\"/>\n\t\t\t<xs:enumeration value=\"weekly\"/>\n\t\t\t<xs:enumeration value=\"yearly_by_day_of_month\"/>\n\t\t\t<xs:enumeration value=\"yearly_by_position\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReferentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"boundary\"/>\n\t\t\t<xs:enumeration value=\"intersection\"/>\n\t\t\t<xs:enumeration value=\"kilopoint\"/>\n\t\t\t<xs:enumeration value=\"landmark\"/>\n\t\t\t<xs:enumeration value=\"milepoint\"/>\n\t\t\t<xs:enumeration value=\"position\"/>\n\t\t\t<xs:enumeration value=\"referencemarker\"/>\n\t\t\t<xs:enumeration value=\"station\"/>\n\t\t\t<xs:enumeration value=\"superelevationevent\"/>\n\t\t\t<xs:enumeration value=\"widthevent\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReflectanceMethodEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blinn\"/>\n\t\t\t<xs:enumeration value=\"flat\"/>\n\t\t\t<xs:enumeration value=\"glass\"/>\n\t\t\t<xs:enumeration value=\"matt\"/>\n\t\t\t<xs:enumeration value=\"metal\"/>\n\t\t\t<xs:enumeration value=\"mirror\"/>\n\t\t\t<xs:enumeration value=\"phong\"/>\n\t\t\t<xs:enumeration value=\"physical\"/>\n\t\t\t<xs:enumeration value=\"plastic\"/>\n\t\t\t<xs:enumeration value=\"strauss\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcedSoilTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"dynamicallycompacted\"/>\n\t\t\t<xs:enumeration value=\"grouted\"/>\n\t\t\t<xs:enumeration value=\"replaced\"/>\n\t\t\t<xs:enumeration value=\"rollercompacted\"/>\n\t\t\t<xs:enumeration value=\"surchargepreloaded\"/>\n\t\t\t<xs:enumeration value=\"verticallydrained\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarRoleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchoring\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"ligature\"/>\n\t\t\t<xs:enumeration value=\"main\"/>\n\t\t\t<xs:enumeration value=\"punching\"/>\n\t\t\t<xs:enumeration value=\"ring\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarSurfaceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"plain\"/>\n\t\t\t<xs:enumeration value=\"textured\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingBarTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"anchoring\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"ligature\"/>\n\t\t\t<xs:enumeration value=\"main\"/>\n\t\t\t<xs:enumeration value=\"punching\"/>\n\t\t\t<xs:enumeration value=\"ring\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"spacebar\"/>\n\t\t\t<xs:enumeration value=\"stud\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReinforcingMeshTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRoadPartTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bicyclecrossing\"/>\n\t\t\t<xs:enumeration value=\"bus_stop\"/>\n\t\t\t<xs:enumeration value=\"carriageway\"/>\n\t\t\t<xs:enumeration value=\"centralisland\"/>\n\t\t\t<xs:enumeration value=\"centralreserve\"/>\n\t\t\t<xs:enumeration value=\"hardshoulder\"/>\n\t\t\t<xs:enumeration value=\"intersection\"/>\n\t\t\t<xs:enumeration value=\"layby\"/>\n\t\t\t<xs:enumeration value=\"parkingbay\"/>\n\t\t\t<xs:enumeration value=\"passingbay\"/>\n\t\t\t<xs:enumeration value=\"pedestrian_crossing\"/>\n\t\t\t<xs:enumeration value=\"railwaycrossing\"/>\n\t\t\t<xs:enumeration value=\"refugeisland\"/>\n\t\t\t<xs:enumeration value=\"roadsegment\"/>\n\t\t\t<xs:enumeration value=\"roadside\"/>\n\t\t\t<xs:enumeration value=\"roadsidepart\"/>\n\t\t\t<xs:enumeration value=\"roadwayplateau\"/>\n\t\t\t<xs:enumeration value=\"roundabout\"/>\n\t\t\t<xs:enumeration value=\"shoulder\"/>\n\t\t\t<xs:enumeration value=\"sidewalk\"/>\n\t\t\t<xs:enumeration value=\"softshoulder\"/>\n\t\t\t<xs:enumeration value=\"tollplaza\"/>\n\t\t\t<xs:enumeration value=\"trafficisland\"/>\n\t\t\t<xs:enumeration value=\"trafficlane\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRoadTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRoleEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"architect\"/>\n\t\t\t<xs:enumeration value=\"buildingoperator\"/>\n\t\t\t<xs:enumeration value=\"buildingowner\"/>\n\t\t\t<xs:enumeration value=\"civilengineer\"/>\n\t\t\t<xs:enumeration value=\"client\"/>\n\t\t\t<xs:enumeration value=\"commissioningengineer\"/>\n\t\t\t<xs:enumeration value=\"constructionmanager\"/>\n\t\t\t<xs:enumeration value=\"consultant\"/>\n\t\t\t<xs:enumeration value=\"contractor\"/>\n\t\t\t<xs:enumeration value=\"costengineer\"/>\n\t\t\t<xs:enumeration value=\"electricalengineer\"/>\n\t\t\t<xs:enumeration value=\"engineer\"/>\n\t\t\t<xs:enumeration value=\"facilitiesmanager\"/>\n\t\t\t<xs:enumeration value=\"fieldconstructionmanager\"/>\n\t\t\t<xs:enumeration value=\"manufacturer\"/>\n\t\t\t<xs:enumeration value=\"mechanicalengineer\"/>\n\t\t\t<xs:enumeration value=\"owner\"/>\n\t\t\t<xs:enumeration value=\"projectmanager\"/>\n\t\t\t<xs:enumeration value=\"reseller\"/>\n\t\t\t<xs:enumeration value=\"structuralengineer\"/>\n\t\t\t<xs:enumeration value=\"subcontractor\"/>\n\t\t\t<xs:enumeration value=\"supplier\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRoofTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"barrel_roof\"/>\n\t\t\t<xs:enumeration value=\"butterfly_roof\"/>\n\t\t\t<xs:enumeration value=\"dome_roof\"/>\n\t\t\t<xs:enumeration value=\"flat_roof\"/>\n\t\t\t<xs:enumeration value=\"freeform\"/>\n\t\t\t<xs:enumeration value=\"gable_roof\"/>\n\t\t\t<xs:enumeration value=\"gambrel_roof\"/>\n\t\t\t<xs:enumeration value=\"hipped_gable_roof\"/>\n\t\t\t<xs:enumeration value=\"hip_roof\"/>\n\t\t\t<xs:enumeration value=\"mansard_roof\"/>\n\t\t\t<xs:enumeration value=\"pavilion_roof\"/>\n\t\t\t<xs:enumeration value=\"rainbow_roof\"/>\n\t\t\t<xs:enumeration value=\"shed_roof\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSIPrefix\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"atto\"/>\n\t\t\t<xs:enumeration value=\"centi\"/>\n\t\t\t<xs:enumeration value=\"deca\"/>\n\t\t\t<xs:enumeration value=\"deci\"/>\n\t\t\t<xs:enumeration value=\"exa\"/>\n\t\t\t<xs:enumeration value=\"femto\"/>\n\t\t\t<xs:enumeration value=\"giga\"/>\n\t\t\t<xs:enumeration value=\"hecto\"/>\n\t\t\t<xs:enumeration value=\"kilo\"/>\n\t\t\t<xs:enumeration value=\"mega\"/>\n\t\t\t<xs:enumeration value=\"micro\"/>\n\t\t\t<xs:enumeration value=\"milli\"/>\n\t\t\t<xs:enumeration value=\"nano\"/>\n\t\t\t<xs:enumeration value=\"peta\"/>\n\t\t\t<xs:enumeration value=\"pico\"/>\n\t\t\t<xs:enumeration value=\"tera\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSIUnitName\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"ampere\"/>\n\t\t\t<xs:enumeration value=\"becquerel\"/>\n\t\t\t<xs:enumeration value=\"candela\"/>\n\t\t\t<xs:enumeration value=\"coulomb\"/>\n\t\t\t<xs:enumeration value=\"cubic_metre\"/>\n\t\t\t<xs:enumeration value=\"degree_celsius\"/>\n\t\t\t<xs:enumeration value=\"farad\"/>\n\t\t\t<xs:enumeration value=\"gram\"/>\n\t\t\t<xs:enumeration value=\"gray\"/>\n\t\t\t<xs:enumeration value=\"henry\"/>\n\t\t\t<xs:enumeration value=\"hertz\"/>\n\t\t\t<xs:enumeration value=\"joule\"/>\n\t\t\t<xs:enumeration value=\"kelvin\"/>\n\t\t\t<xs:enumeration value=\"lumen\"/>\n\t\t\t<xs:enumeration value=\"lux\"/>\n\t\t\t<xs:enumeration value=\"metre\"/>\n\t\t\t<xs:enumeration value=\"mole\"/>\n\t\t\t<xs:enumeration value=\"newton\"/>\n\t\t\t<xs:enumeration value=\"ohm\"/>\n\t\t\t<xs:enumeration value=\"pascal\"/>\n\t\t\t<xs:enumeration value=\"radian\"/>\n\t\t\t<xs:enumeration value=\"second\"/>\n\t\t\t<xs:enumeration value=\"siemens\"/>\n\t\t\t<xs:enumeration value=\"sievert\"/>\n\t\t\t<xs:enumeration value=\"square_metre\"/>\n\t\t\t<xs:enumeration value=\"steradian\"/>\n\t\t\t<xs:enumeration value=\"tesla\"/>\n\t\t\t<xs:enumeration value=\"volt\"/>\n\t\t\t<xs:enumeration value=\"watt\"/>\n\t\t\t<xs:enumeration value=\"weber\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSanitaryTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bath\"/>\n\t\t\t<xs:enumeration value=\"bidet\"/>\n\t\t\t<xs:enumeration value=\"cistern\"/>\n\t\t\t<xs:enumeration value=\"sanitaryfountain\"/>\n\t\t\t<xs:enumeration value=\"shower\"/>\n\t\t\t<xs:enumeration value=\"sink\"/>\n\t\t\t<xs:enumeration value=\"toiletpan\"/>\n\t\t\t<xs:enumeration value=\"urinal\"/>\n\t\t\t<xs:enumeration value=\"washhandbasin\"/>\n\t\t\t<xs:enumeration value=\"wcseat\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"tapered\"/>\n\t\t\t<xs:enumeration value=\"uniform\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSensorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"co2sensor\"/>\n\t\t\t<xs:enumeration value=\"conductancesensor\"/>\n\t\t\t<xs:enumeration value=\"contactsensor\"/>\n\t\t\t<xs:enumeration value=\"cosensor\"/>\n\t\t\t<xs:enumeration value=\"earthquakesensor\"/>\n\t\t\t<xs:enumeration value=\"firesensor\"/>\n\t\t\t<xs:enumeration value=\"flowsensor\"/>\n\t\t\t<xs:enumeration value=\"foreignobjectdetectionsensor\"/>\n\t\t\t<xs:enumeration value=\"frostsensor\"/>\n\t\t\t<xs:enumeration value=\"gassensor\"/>\n\t\t\t<xs:enumeration value=\"heatsensor\"/>\n\t\t\t<xs:enumeration value=\"humiditysensor\"/>\n\t\t\t<xs:enumeration value=\"identifiersensor\"/>\n\t\t\t<xs:enumeration value=\"ionconcentrationsensor\"/>\n\t\t\t<xs:enumeration value=\"levelsensor\"/>\n\t\t\t<xs:enumeration value=\"lightsensor\"/>\n\t\t\t<xs:enumeration value=\"moisturesensor\"/>\n\t\t\t<xs:enumeration value=\"movementsensor\"/>\n\t\t\t<xs:enumeration value=\"obstaclesensor\"/>\n\t\t\t<xs:enumeration value=\"phsensor\"/>\n\t\t\t<xs:enumeration value=\"pressuresensor\"/>\n\t\t\t<xs:enumeration value=\"radiationsensor\"/>\n\t\t\t<xs:enumeration value=\"radioactivitysensor\"/>\n\t\t\t<xs:enumeration value=\"rainsensor\"/>\n\t\t\t<xs:enumeration value=\"smokesensor\"/>\n\t\t\t<xs:enumeration value=\"snowdepthsensor\"/>\n\t\t\t<xs:enumeration value=\"soundsensor\"/>\n\t\t\t<xs:enumeration value=\"temperaturesensor\"/>\n\t\t\t<xs:enumeration value=\"trainsensor\"/>\n\t\t\t<xs:enumeration value=\"turnoutclosuresensor\"/>\n\t\t\t<xs:enumeration value=\"wheelsensor\"/>\n\t\t\t<xs:enumeration value=\"windsensor\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSequenceEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"finish_finish\"/>\n\t\t\t<xs:enumeration value=\"finish_start\"/>\n\t\t\t<xs:enumeration value=\"start_finish\"/>\n\t\t\t<xs:enumeration value=\"start_start\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcShadingDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"awning\"/>\n\t\t\t<xs:enumeration value=\"jalousie\"/>\n\t\t\t<xs:enumeration value=\"shutter\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSignTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"marker\"/>\n\t\t\t<xs:enumeration value=\"mirror\"/>\n\t\t\t<xs:enumeration value=\"pictoral\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSignalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"audio\"/>\n\t\t\t<xs:enumeration value=\"mixed\"/>\n\t\t\t<xs:enumeration value=\"visual\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSimplePropertyTemplateTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"p_boundedvalue\"/>\n\t\t\t<xs:enumeration value=\"p_enumeratedvalue\"/>\n\t\t\t<xs:enumeration value=\"p_listvalue\"/>\n\t\t\t<xs:enumeration value=\"p_referencevalue\"/>\n\t\t\t<xs:enumeration value=\"p_singlevalue\"/>\n\t\t\t<xs:enumeration value=\"p_tablevalue\"/>\n\t\t\t<xs:enumeration value=\"q_area\"/>\n\t\t\t<xs:enumeration value=\"q_count\"/>\n\t\t\t<xs:enumeration value=\"q_length\"/>\n\t\t\t<xs:enumeration value=\"q_number\"/>\n\t\t\t<xs:enumeration value=\"q_time\"/>\n\t\t\t<xs:enumeration value=\"q_volume\"/>\n\t\t\t<xs:enumeration value=\"q_weight\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSlabTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"approach_slab\"/>\n\t\t\t<xs:enumeration value=\"baseslab\"/>\n\t\t\t<xs:enumeration value=\"floor\"/>\n\t\t\t<xs:enumeration value=\"landing\"/>\n\t\t\t<xs:enumeration value=\"paving\"/>\n\t\t\t<xs:enumeration value=\"roof\"/>\n\t\t\t<xs:enumeration value=\"sidewalk\"/>\n\t\t\t<xs:enumeration value=\"trackslab\"/>\n\t\t\t<xs:enumeration value=\"wearing\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSolarDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"solarcollector\"/>\n\t\t\t<xs:enumeration value=\"solarpanel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpaceHeaterTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"convector\"/>\n\t\t\t<xs:enumeration value=\"radiator\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpaceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"berth\"/>\n\t\t\t<xs:enumeration value=\"external\"/>\n\t\t\t<xs:enumeration value=\"gfa\"/>\n\t\t\t<xs:enumeration value=\"internal\"/>\n\t\t\t<xs:enumeration value=\"parking\"/>\n\t\t\t<xs:enumeration value=\"space\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpatialZoneTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"construction\"/>\n\t\t\t<xs:enumeration value=\"firesafety\"/>\n\t\t\t<xs:enumeration value=\"interference\"/>\n\t\t\t<xs:enumeration value=\"lighting\"/>\n\t\t\t<xs:enumeration value=\"occupancy\"/>\n\t\t\t<xs:enumeration value=\"reservation\"/>\n\t\t\t<xs:enumeration value=\"security\"/>\n\t\t\t<xs:enumeration value=\"thermal\"/>\n\t\t\t<xs:enumeration value=\"transport\"/>\n\t\t\t<xs:enumeration value=\"ventilation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStackTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"birdcage\"/>\n\t\t\t<xs:enumeration value=\"cowl\"/>\n\t\t\t<xs:enumeration value=\"rainwaterhopper\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStairFlightTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curved\"/>\n\t\t\t<xs:enumeration value=\"freeform\"/>\n\t\t\t<xs:enumeration value=\"spiral\"/>\n\t\t\t<xs:enumeration value=\"straight\"/>\n\t\t\t<xs:enumeration value=\"winder\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStairTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"curved_run_stair\"/>\n\t\t\t<xs:enumeration value=\"double_return_stair\"/>\n\t\t\t<xs:enumeration value=\"half_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"half_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"ladder\"/>\n\t\t\t<xs:enumeration value=\"quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"spiral_stair\"/>\n\t\t\t<xs:enumeration value=\"straight_run_stair\"/>\n\t\t\t<xs:enumeration value=\"three_quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"three_quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"two_curved_run_stair\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_turn_stair\"/>\n\t\t\t<xs:enumeration value=\"two_quarter_winding_stair\"/>\n\t\t\t<xs:enumeration value=\"two_straight_run_stair\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStateEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"locked\"/>\n\t\t\t<xs:enumeration value=\"readonly\"/>\n\t\t\t<xs:enumeration value=\"readonlylocked\"/>\n\t\t\t<xs:enumeration value=\"readwrite\"/>\n\t\t\t<xs:enumeration value=\"readwritelocked\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralCurveActivityTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"const\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"equidistant\"/>\n\t\t\t<xs:enumeration value=\"linear\"/>\n\t\t\t<xs:enumeration value=\"parabola\"/>\n\t\t\t<xs:enumeration value=\"polygonal\"/>\n\t\t\t<xs:enumeration value=\"sinus\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralCurveMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cable\"/>\n\t\t\t<xs:enumeration value=\"compression_member\"/>\n\t\t\t<xs:enumeration value=\"pin_joined_member\"/>\n\t\t\t<xs:enumeration value=\"rigid_joined_member\"/>\n\t\t\t<xs:enumeration value=\"tension_member\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralSurfaceActivityTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bilinear\"/>\n\t\t\t<xs:enumeration value=\"const\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"isocontour\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStructuralSurfaceMemberTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bending_element\"/>\n\t\t\t<xs:enumeration value=\"membrane_element\"/>\n\t\t\t<xs:enumeration value=\"shell\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSubContractResourceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"purchase\"/>\n\t\t\t<xs:enumeration value=\"work\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSurfaceFeatureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"defect\"/>\n\t\t\t<xs:enumeration value=\"hatchmarking\"/>\n\t\t\t<xs:enumeration value=\"linemarking\"/>\n\t\t\t<xs:enumeration value=\"mark\"/>\n\t\t\t<xs:enumeration value=\"nonskidsurfacing\"/>\n\t\t\t<xs:enumeration value=\"pavementsurfacemarking\"/>\n\t\t\t<xs:enumeration value=\"rumblestrip\"/>\n\t\t\t<xs:enumeration value=\"symbolmarking\"/>\n\t\t\t<xs:enumeration value=\"tag\"/>\n\t\t\t<xs:enumeration value=\"transverserumblestrip\"/>\n\t\t\t<xs:enumeration value=\"treatment\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSurfaceSide\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"both\"/>\n\t\t\t<xs:enumeration value=\"negative\"/>\n\t\t\t<xs:enumeration value=\"positive\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSwitchingDeviceTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"contactor\"/>\n\t\t\t<xs:enumeration value=\"dimmerswitch\"/>\n\t\t\t<xs:enumeration value=\"emergencystop\"/>\n\t\t\t<xs:enumeration value=\"keypad\"/>\n\t\t\t<xs:enumeration value=\"momentaryswitch\"/>\n\t\t\t<xs:enumeration value=\"relay\"/>\n\t\t\t<xs:enumeration value=\"selectorswitch\"/>\n\t\t\t<xs:enumeration value=\"starter\"/>\n\t\t\t<xs:enumeration value=\"start_and_stop_equipment\"/>\n\t\t\t<xs:enumeration value=\"switchdisconnector\"/>\n\t\t\t<xs:enumeration value=\"toggleswitch\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSystemFurnitureElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"panel\"/>\n\t\t\t<xs:enumeration value=\"subrack\"/>\n\t\t\t<xs:enumeration value=\"worksurface\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTankTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"basin\"/>\n\t\t\t<xs:enumeration value=\"breakpressure\"/>\n\t\t\t<xs:enumeration value=\"expansion\"/>\n\t\t\t<xs:enumeration value=\"feedandexpansion\"/>\n\t\t\t<xs:enumeration value=\"oilretentiontray\"/>\n\t\t\t<xs:enumeration value=\"pressurevessel\"/>\n\t\t\t<xs:enumeration value=\"storage\"/>\n\t\t\t<xs:enumeration value=\"vessel\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTaskDurationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"elapsedtime\"/>\n\t\t\t<xs:enumeration value=\"worktime\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTaskTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"adjustment\"/>\n\t\t\t<xs:enumeration value=\"attendance\"/>\n\t\t\t<xs:enumeration value=\"calibration\"/>\n\t\t\t<xs:enumeration value=\"construction\"/>\n\t\t\t<xs:enumeration value=\"demolition\"/>\n\t\t\t<xs:enumeration value=\"dismantle\"/>\n\t\t\t<xs:enumeration value=\"disposal\"/>\n\t\t\t<xs:enumeration value=\"emergency\"/>\n\t\t\t<xs:enumeration value=\"inspection\"/>\n\t\t\t<xs:enumeration value=\"installation\"/>\n\t\t\t<xs:enumeration value=\"logistic\"/>\n\t\t\t<xs:enumeration value=\"maintenance\"/>\n\t\t\t<xs:enumeration value=\"move\"/>\n\t\t\t<xs:enumeration value=\"operation\"/>\n\t\t\t<xs:enumeration value=\"removal\"/>\n\t\t\t<xs:enumeration value=\"renovation\"/>\n\t\t\t<xs:enumeration value=\"safety\"/>\n\t\t\t<xs:enumeration value=\"shutdown\"/>\n\t\t\t<xs:enumeration value=\"startup\"/>\n\t\t\t<xs:enumeration value=\"testing\"/>\n\t\t\t<xs:enumeration value=\"troubleshooting\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTendonAnchorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"coupler\"/>\n\t\t\t<xs:enumeration value=\"fixed_end\"/>\n\t\t\t<xs:enumeration value=\"tensioning_end\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTendonConduitTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"coupler\"/>\n\t\t\t<xs:enumeration value=\"diabolo\"/>\n\t\t\t<xs:enumeration value=\"duct\"/>\n\t\t\t<xs:enumeration value=\"grouting_duct\"/>\n\t\t\t<xs:enumeration value=\"trumpet\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTendonTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bar\"/>\n\t\t\t<xs:enumeration value=\"coated\"/>\n\t\t\t<xs:enumeration value=\"strand\"/>\n\t\t\t<xs:enumeration value=\"wire\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextPath\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"down\"/>\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"up\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeSeriesDataTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"continuous\"/>\n\t\t\t<xs:enumeration value=\"discrete\"/>\n\t\t\t<xs:enumeration value=\"discretebinary\"/>\n\t\t\t<xs:enumeration value=\"piecewisebinary\"/>\n\t\t\t<xs:enumeration value=\"piecewiseconstant\"/>\n\t\t\t<xs:enumeration value=\"piecewisecontinuous\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTrackElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"blockingdevice\"/>\n\t\t\t<xs:enumeration value=\"derailer\"/>\n\t\t\t<xs:enumeration value=\"frog\"/>\n\t\t\t<xs:enumeration value=\"half_set_of_blades\"/>\n\t\t\t<xs:enumeration value=\"sleeper\"/>\n\t\t\t<xs:enumeration value=\"speedregulator\"/>\n\t\t\t<xs:enumeration value=\"trackendofalignment\"/>\n\t\t\t<xs:enumeration value=\"vehiclestop\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransformerTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"chopper\"/>\n\t\t\t<xs:enumeration value=\"combined\"/>\n\t\t\t<xs:enumeration value=\"current\"/>\n\t\t\t<xs:enumeration value=\"frequency\"/>\n\t\t\t<xs:enumeration value=\"inverter\"/>\n\t\t\t<xs:enumeration value=\"rectifier\"/>\n\t\t\t<xs:enumeration value=\"voltage\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransitionCode\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"continuous\"/>\n\t\t\t<xs:enumeration value=\"contsamegradient\"/>\n\t\t\t<xs:enumeration value=\"contsamegradientsamecurvature\"/>\n\t\t\t<xs:enumeration value=\"discontinuous\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTransportElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"craneway\"/>\n\t\t\t<xs:enumeration value=\"elevator\"/>\n\t\t\t<xs:enumeration value=\"escalator\"/>\n\t\t\t<xs:enumeration value=\"haulinggear\"/>\n\t\t\t<xs:enumeration value=\"liftinggear\"/>\n\t\t\t<xs:enumeration value=\"movingwalkway\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTrimmingPreference\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cartesian\"/>\n\t\t\t<xs:enumeration value=\"parameter\"/>\n\t\t\t<xs:enumeration value=\"unspecified\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTubeBundleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"finned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"absorbeddoseunit\"/>\n\t\t\t<xs:enumeration value=\"amountofsubstanceunit\"/>\n\t\t\t<xs:enumeration value=\"areaunit\"/>\n\t\t\t<xs:enumeration value=\"doseequivalentunit\"/>\n\t\t\t<xs:enumeration value=\"electriccapacitanceunit\"/>\n\t\t\t<xs:enumeration value=\"electricchargeunit\"/>\n\t\t\t<xs:enumeration value=\"electricconductanceunit\"/>\n\t\t\t<xs:enumeration value=\"electriccurrentunit\"/>\n\t\t\t<xs:enumeration value=\"electricresistanceunit\"/>\n\t\t\t<xs:enumeration value=\"electricvoltageunit\"/>\n\t\t\t<xs:enumeration value=\"energyunit\"/>\n\t\t\t<xs:enumeration value=\"forceunit\"/>\n\t\t\t<xs:enumeration value=\"frequencyunit\"/>\n\t\t\t<xs:enumeration value=\"illuminanceunit\"/>\n\t\t\t<xs:enumeration value=\"inductanceunit\"/>\n\t\t\t<xs:enumeration value=\"lengthunit\"/>\n\t\t\t<xs:enumeration value=\"luminousfluxunit\"/>\n\t\t\t<xs:enumeration value=\"luminousintensityunit\"/>\n\t\t\t<xs:enumeration value=\"magneticfluxdensityunit\"/>\n\t\t\t<xs:enumeration value=\"magneticfluxunit\"/>\n\t\t\t<xs:enumeration value=\"massunit\"/>\n\t\t\t<xs:enumeration value=\"planeangleunit\"/>\n\t\t\t<xs:enumeration value=\"powerunit\"/>\n\t\t\t<xs:enumeration value=\"pressureunit\"/>\n\t\t\t<xs:enumeration value=\"radioactivityunit\"/>\n\t\t\t<xs:enumeration value=\"solidangleunit\"/>\n\t\t\t<xs:enumeration value=\"thermodynamictemperatureunit\"/>\n\t\t\t<xs:enumeration value=\"timeunit\"/>\n\t\t\t<xs:enumeration value=\"volumeunit\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitaryControlElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"alarmpanel\"/>\n\t\t\t<xs:enumeration value=\"basestationcontroller\"/>\n\t\t\t<xs:enumeration value=\"combined\"/>\n\t\t\t<xs:enumeration value=\"controlpanel\"/>\n\t\t\t<xs:enumeration value=\"gasdetectionpanel\"/>\n\t\t\t<xs:enumeration value=\"humidistat\"/>\n\t\t\t<xs:enumeration value=\"indicatorpanel\"/>\n\t\t\t<xs:enumeration value=\"mimicpanel\"/>\n\t\t\t<xs:enumeration value=\"thermostat\"/>\n\t\t\t<xs:enumeration value=\"weatherstation\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcUnitaryEquipmentTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airconditioningunit\"/>\n\t\t\t<xs:enumeration value=\"airhandler\"/>\n\t\t\t<xs:enumeration value=\"dehumidifier\"/>\n\t\t\t<xs:enumeration value=\"rooftopunit\"/>\n\t\t\t<xs:enumeration value=\"splitsystem\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcValveTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"airrelease\"/>\n\t\t\t<xs:enumeration value=\"antivacuum\"/>\n\t\t\t<xs:enumeration value=\"changeover\"/>\n\t\t\t<xs:enumeration value=\"check\"/>\n\t\t\t<xs:enumeration value=\"commissioning\"/>\n\t\t\t<xs:enumeration value=\"diverting\"/>\n\t\t\t<xs:enumeration value=\"doublecheck\"/>\n\t\t\t<xs:enumeration value=\"doubleregulating\"/>\n\t\t\t<xs:enumeration value=\"drawoffcock\"/>\n\t\t\t<xs:enumeration value=\"faucet\"/>\n\t\t\t<xs:enumeration value=\"flushing\"/>\n\t\t\t<xs:enumeration value=\"gascock\"/>\n\t\t\t<xs:enumeration value=\"gastap\"/>\n\t\t\t<xs:enumeration value=\"isolating\"/>\n\t\t\t<xs:enumeration value=\"mixing\"/>\n\t\t\t<xs:enumeration value=\"pressurereducing\"/>\n\t\t\t<xs:enumeration value=\"pressurerelief\"/>\n\t\t\t<xs:enumeration value=\"regulating\"/>\n\t\t\t<xs:enumeration value=\"safetycutoff\"/>\n\t\t\t<xs:enumeration value=\"steamtrap\"/>\n\t\t\t<xs:enumeration value=\"stopcock\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVehicleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"cargo\"/>\n\t\t\t<xs:enumeration value=\"rollingstock\"/>\n\t\t\t<xs:enumeration value=\"vehicle\"/>\n\t\t\t<xs:enumeration value=\"vehicleair\"/>\n\t\t\t<xs:enumeration value=\"vehiclemarine\"/>\n\t\t\t<xs:enumeration value=\"vehicletracked\"/>\n\t\t\t<xs:enumeration value=\"vehiclewheeled\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVibrationDamperTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"axial_yield\"/>\n\t\t\t<xs:enumeration value=\"bending_yield\"/>\n\t\t\t<xs:enumeration value=\"friction\"/>\n\t\t\t<xs:enumeration value=\"rubber\"/>\n\t\t\t<xs:enumeration value=\"shear_yield\"/>\n\t\t\t<xs:enumeration value=\"viscous\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVibrationIsolatorTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"base\"/>\n\t\t\t<xs:enumeration value=\"compression\"/>\n\t\t\t<xs:enumeration value=\"spring\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVirtualElementTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"boundary\"/>\n\t\t\t<xs:enumeration value=\"clearance\"/>\n\t\t\t<xs:enumeration value=\"provisionforvoid\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVoidingFeatureTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"chamfer\"/>\n\t\t\t<xs:enumeration value=\"cutout\"/>\n\t\t\t<xs:enumeration value=\"edge\"/>\n\t\t\t<xs:enumeration value=\"hole\"/>\n\t\t\t<xs:enumeration value=\"miter\"/>\n\t\t\t<xs:enumeration value=\"notch\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWallTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"elementedwall\"/>\n\t\t\t<xs:enumeration value=\"movable\"/>\n\t\t\t<xs:enumeration value=\"parapet\"/>\n\t\t\t<xs:enumeration value=\"partitioning\"/>\n\t\t\t<xs:enumeration value=\"plumbingwall\"/>\n\t\t\t<xs:enumeration value=\"polygonal\"/>\n\t\t\t<xs:enumeration value=\"retainingwall\"/>\n\t\t\t<xs:enumeration value=\"shear\"/>\n\t\t\t<xs:enumeration value=\"solidwall\"/>\n\t\t\t<xs:enumeration value=\"standard\"/>\n\t\t\t<xs:enumeration value=\"wavewall\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWasteTerminalTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"floortrap\"/>\n\t\t\t<xs:enumeration value=\"floorwaste\"/>\n\t\t\t<xs:enumeration value=\"gullysump\"/>\n\t\t\t<xs:enumeration value=\"gullytrap\"/>\n\t\t\t<xs:enumeration value=\"roofdrain\"/>\n\t\t\t<xs:enumeration value=\"wastedisposalunit\"/>\n\t\t\t<xs:enumeration value=\"wastetrap\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowPanelOperationEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bottomhung\"/>\n\t\t\t<xs:enumeration value=\"fixedcasement\"/>\n\t\t\t<xs:enumeration value=\"otheroperation\"/>\n\t\t\t<xs:enumeration value=\"pivothorizontal\"/>\n\t\t\t<xs:enumeration value=\"pivotvertical\"/>\n\t\t\t<xs:enumeration value=\"removablecasement\"/>\n\t\t\t<xs:enumeration value=\"sidehunglefthand\"/>\n\t\t\t<xs:enumeration value=\"sidehungrighthand\"/>\n\t\t\t<xs:enumeration value=\"slidinghorizontal\"/>\n\t\t\t<xs:enumeration value=\"slidingvertical\"/>\n\t\t\t<xs:enumeration value=\"tiltandturnlefthand\"/>\n\t\t\t<xs:enumeration value=\"tiltandturnrighthand\"/>\n\t\t\t<xs:enumeration value=\"tophung\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowPanelPositionEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"bottom\"/>\n\t\t\t<xs:enumeration value=\"left\"/>\n\t\t\t<xs:enumeration value=\"middle\"/>\n\t\t\t<xs:enumeration value=\"right\"/>\n\t\t\t<xs:enumeration value=\"top\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"lightdome\"/>\n\t\t\t<xs:enumeration value=\"skylight\"/>\n\t\t\t<xs:enumeration value=\"window\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWindowTypePartitioningEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"double_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"double_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"single_panel\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_bottom\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_horizontal\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_left\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_right\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_top\"/>\n\t\t\t<xs:enumeration value=\"triple_panel_vertical\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkCalendarTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"firstshift\"/>\n\t\t\t<xs:enumeration value=\"secondshift\"/>\n\t\t\t<xs:enumeration value=\"thirdshift\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkPlanTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actual\"/>\n\t\t\t<xs:enumeration value=\"baseline\"/>\n\t\t\t<xs:enumeration value=\"planned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWorkScheduleTypeEnum\">\n\t\t<xs:restriction base=\"xs:string\">\n\t\t\t<xs:enumeration value=\"actual\"/>\n\t\t\t<xs:enumeration value=\"baseline\"/>\n\t\t\t<xs:enumeration value=\"planned\"/>\n\t\t\t<xs:enumeration value=\"userdefined\"/>\n\t\t\t<xs:enumeration value=\"notdefined\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAbsorbedDoseMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAccelerationMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAmountOfSubstanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAngularVelocityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcArcIndex\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcArcIndex\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcArcIndex\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t<xs:maxLength value=\"3\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAreaDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcAreaMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcBinary\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:hexBinary\"/>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"IfcBoolean\">\n\t\t<xs:restriction base=\"xs:boolean\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcBoxAlignment\">\n\t\t<xs:restriction base=\"ifc:IfcLabel\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCardinalPointReference\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcComplexNumber\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcComplexNumber\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"xs:double\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"array\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcComplexNumber\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"xs:double\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"2\"/>\n\t\t\t<xs:maxLength value=\"2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcCompoundPlaneAngleMeasure\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcCompoundPlaneAngleMeasure\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"xs:long\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcCompoundPlaneAngleMeasure\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"xs:long\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"3\"/>\n\t\t\t<xs:maxLength value=\"4\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcContextDependentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCountMeasure\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcCurvatureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDate\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDateTime\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDayInMonthNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDayInWeekNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDescriptiveMeasure\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDimensionCount\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDoseEquivalentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDuration\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcDynamicViscosityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricCapacitanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricChargeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricConductanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricCurrentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricResistanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcElectricVoltageMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcEnergyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontStyle\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontVariant\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFontWeight\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcFrequencyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcGloballyUniqueId\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:minLength value=\"22\"/>\n\t\t\t<xs:maxLength value=\"22\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatFluxDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcHeatingValueMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIdentifier\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:maxLength value=\"255\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIlluminanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInductanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcInteger\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIntegerCountRateMeasure\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIonConcentrationMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcIsothermalMoistureCapacityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcKinematicViscosityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLabel\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:maxLength value=\"255\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLanguageId\">\n\t\t<xs:restriction base=\"ifc:IfcIdentifier\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLengthMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcLineIndex\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"ifc:List-IfcLineIndex\">\n\t\t\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPositiveInteger\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"list\"/>\n\t\t\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"List-IfcLineIndex\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"2\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearMomentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearStiffnessMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLinearVelocityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLogical\">\n\t\t<xs:restriction base=\"ifc:logical\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousFluxMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousIntensityDistributionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcLuminousIntensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMagneticFluxDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMagneticFluxMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassDensityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassFlowRateMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMassPerLengthMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfElasticityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcModulusOfSubgradeReactionMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMoistureDiffusivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMolecularWeightMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMomentOfInertiaMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMonetaryMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcMonthInYearNumber\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNonNegativeLengthMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNormalisedRatioMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcNumericMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPHMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcParameterValue\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlanarForceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPlaneAngleMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveInteger\">\n\t\t<xs:restriction base=\"ifc:IfcInteger\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveLengthMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcLengthMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositivePlaneAngleMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcPlaneAngleMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPositiveRatioMeasure\">\n\t\t<xs:restriction base=\"ifc:IfcRatioMeasure\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPowerMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPresentableText\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcPressureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:complexType name=\"IfcPropertySetDefinitionSet\">\n\t\t<xs:sequence>\n\t\t\t<xs:element ref=\"ifc:IfcPropertySetDefinition\" maxOccurs=\"unbounded\"/>\n\t\t</xs:sequence>\n\t\t<xs:attribute ref=\"ifc:itemType\" fixed=\"ifc:IfcPropertySetDefinition\"/>\n\t\t<xs:attribute ref=\"ifc:cType\" fixed=\"set\"/>\n\t\t<xs:attribute ref=\"ifc:arraySize\" use=\"optional\"/>\n\t</xs:complexType>\n\t<xs:simpleType name=\"IfcRadioActivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRatioMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcReal\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalFrequencyMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalMassMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcRotationalStiffnessMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionModulusMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSectionalAreaIntegralMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcShearModulusMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSolidAngleMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPowerLevelMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPowerMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPressureLevelMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSoundPressureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecificHeatCapacityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecularExponent\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcSpecularRoughness\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcStrippedOptional\">\n\t\t<xs:restriction base=\"xs:boolean\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTemperatureGradientMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTemperatureRateOfChangeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcText\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextAlignment\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextDecoration\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextFontName\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTextTransformation\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalAdmittanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalConductivityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalExpansionCoefficientMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalResistanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermalTransmittanceMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcThermodynamicTemperatureMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTime\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTimeStamp\">\n\t\t<xs:restriction base=\"xs:long\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcTorqueMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcURIReference\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVaporPermeabilityMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVolumeMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcVolumetricFlowRateMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWarpingConstantMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWarpingMomentMeasure\">\n\t\t<xs:restriction base=\"xs:double\"/>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"IfcWellKnownTextLiteral\">\n\t\t<xs:restriction base=\"xs:normalizedString\"/>\n\t</xs:simpleType>\n\t<xs:element name=\"Entity\" type=\"ifc:Entity\" abstract=\"true\" nillable=\"true\"/>\n\t<xs:complexType name=\"Entity\" abstract=\"true\">\n\t\t<xs:attribute name=\"href\" type=\"xs:anyURI\" use=\"optional\"/>\n\t\t<xs:attribute name=\"ref\" type=\"xs:IDREF\" use=\"optional\"/>\n\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t</xs:complexType>\n\t<xs:attributeGroup name=\"instanceAttributes\">\n\t\t<xs:attribute name=\"id\" type=\"xs:ID\" use=\"optional\"/>\n\t\t<xs:attribute name=\"path\" type=\"xs:NMTOKENS\" use=\"optional\"/>\n\t\t<xs:attribute name=\"pos\" use=\"optional\">\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:restriction>\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:list itemType=\"xs:integer\"/>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t\t<xs:minLength value=\"1\"/>\n\t\t\t\t</xs:restriction>\n\t\t\t</xs:simpleType>\n\t\t</xs:attribute>\n\t</xs:attributeGroup>\n\t<xs:attribute name=\"arraySize\">\n\t\t<xs:simpleType>\n\t\t\t<xs:restriction>\n\t\t\t\t<xs:simpleType>\n\t\t\t\t\t<xs:list itemType=\"xs:integer\"/>\n\t\t\t\t</xs:simpleType>\n\t\t\t\t<xs:minLength value=\"1\"/>\n\t\t\t</xs:restriction>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:attribute name=\"itemType\">\n\t\t<xs:simpleType>\n\t\t\t<xs:list itemType=\"xs:QName\"/>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:attribute name=\"cType\">\n\t\t<xs:simpleType>\n\t\t\t<xs:list itemType=\"ifc:aggregateType\"/>\n\t\t</xs:simpleType>\n\t</xs:attribute>\n\t<xs:simpleType name=\"aggregateType\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:enumeration value=\"array\"/>\n\t\t\t<xs:enumeration value=\"list\"/>\n\t\t\t<xs:enumeration value=\"set\"/>\n\t\t\t<xs:enumeration value=\"bag\"/>\n\t\t\t<xs:enumeration value=\"array-unique\"/>\n\t\t\t<xs:enumeration value=\"array-optional\"/>\n\t\t\t<xs:enumeration value=\"array-optional-unique\"/>\n\t\t\t<xs:enumeration value=\"list-unique\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:complexType name=\"hexBinary\">\n\t\t<xs:simpleContent>\n\t\t\t<xs:extension base=\"xs:hexBinary\">\n\t\t\t\t<xs:attribute name=\"extraBits\" type=\"xs:integer\" use=\"optional\"/>\n\t\t\t</xs:extension>\n\t\t</xs:simpleContent>\n\t</xs:complexType>\n\t<xs:simpleType name=\"logical\">\n\t\t<xs:restriction base=\"xs:normalizedString\">\n\t\t\t<xs:enumeration value=\"false\"/>\n\t\t\t<xs:enumeration value=\"true\"/>\n\t\t\t<xs:enumeration value=\"unknown\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:simpleType name=\"Seq-IfcPositiveInteger\">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list itemType=\"ifc:IfcPositiveInteger\"/>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value=\"3\"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n\t<xs:element name=\"IfcAbsorbedDoseMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAbsorbedDoseMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAccelerationMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAccelerationMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAmountOfSubstanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAmountOfSubstanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAngularVelocityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAngularVelocityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcArcIndex-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcArcIndex\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAreaDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcAreaMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcAreaMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcBinary-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBinary\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcBoolean-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcBoolean\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcComplexNumber-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcComplexNumber\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCompoundPlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCompoundPlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcContextDependentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcContextDependentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCountMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCountMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcCurvatureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcCurvatureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDate-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDate\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDateTime-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDateTime\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDescriptiveMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDescriptiveMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDoseEquivalentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDoseEquivalentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDuration-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDuration\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcDynamicViscosityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcDynamicViscosityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricCapacitanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCapacitanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricChargeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricChargeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricConductanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricConductanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricCurrentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricCurrentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricResistanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricResistanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcElectricVoltageMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcElectricVoltageMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcEnergyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcEnergyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcFrequencyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcFrequencyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcHeatFluxDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatFluxDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcHeatingValueMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcHeatingValueMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIdentifier-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIdentifier\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIlluminanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIlluminanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcInductanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInductanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcInteger-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcInteger\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIntegerCountRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIntegerCountRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIonConcentrationMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIonConcentrationMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcIsothermalMoistureCapacityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcIsothermalMoistureCapacityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcKinematicViscosityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcKinematicViscosityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLabel-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLabel\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLineIndex-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLineIndex\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearMomentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearMomentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearStiffnessMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearStiffnessMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLinearVelocityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLinearVelocityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLogical-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLogical\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousFluxMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousFluxMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousIntensityDistributionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityDistributionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcLuminousIntensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcLuminousIntensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMagneticFluxDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMagneticFluxMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMagneticFluxMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassDensityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassDensityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassFlowRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassFlowRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMassPerLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMassPerLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfElasticityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfElasticityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfLinearSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfLinearSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfRotationalSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfRotationalSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcModulusOfSubgradeReactionMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcModulusOfSubgradeReactionMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMoistureDiffusivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMoistureDiffusivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMolecularWeightMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMolecularWeightMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMomentOfInertiaMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMomentOfInertiaMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcMonetaryMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcMonetaryMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNonNegativeLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNonNegativeLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNormalisedRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNormalisedRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcNumericMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcNumericMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPHMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPHMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcParameterValue-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcParameterValue\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPlanarForceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlanarForceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveInteger-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveInteger\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveLengthMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveLengthMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositivePlaneAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositivePlaneAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPositiveRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPositiveRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPowerMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPowerMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPressureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPressureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcPropertySetDefinitionSet-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:complexContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcPropertySetDefinitionSet\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:complexContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRadioActivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRadioActivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRatioMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRatioMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcReal-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcReal\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalFrequencyMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalFrequencyMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalMassMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalMassMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcRotationalStiffnessMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcRotationalStiffnessMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSectionModulusMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionModulusMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSectionalAreaIntegralMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSectionalAreaIntegralMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcShearModulusMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcShearModulusMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSolidAngleMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSolidAngleMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPowerLevelMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerLevelMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPowerMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPowerMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPressureLevelMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureLevelMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSoundPressureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSoundPressureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecificHeatCapacityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecificHeatCapacityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecularExponent-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularExponent\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcSpecularRoughness-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcSpecularRoughness\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTemperatureGradientMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureGradientMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTemperatureRateOfChangeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTemperatureRateOfChangeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcText-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcText\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTextFontName-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTextFontName\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalAdmittanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalAdmittanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalConductivityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalConductivityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalExpansionCoefficientMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalExpansionCoefficientMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalResistanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalResistanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermalTransmittanceMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermalTransmittanceMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcThermodynamicTemperatureMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcThermodynamicTemperatureMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTime-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTime\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTimeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTimeStamp-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTimeStamp\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcTorqueMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcTorqueMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcURIReference-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcURIReference\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVaporPermeabilityMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVaporPermeabilityMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVolumeMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumeMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcVolumetricFlowRateMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcVolumetricFlowRateMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcWarpingConstantMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingConstantMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n\t<xs:element name=\"IfcWarpingMomentMeasure-wrapper\" nillable=\"true\">\n\t\t<xs:complexType>\n\t\t\t<xs:simpleContent>\n\t\t\t\t<xs:extension base=\"ifc:IfcWarpingMomentMeasure\">\n\t\t\t\t\t<xs:attributeGroup ref=\"ifc:instanceAttributes\"/>\n\t\t\t\t</xs:extension>\n\t\t\t</xs:simpleContent>\n\t\t</xs:complexType>\n\t</xs:element>\n</xs:schema>\n"
  },
  {
    "path": "Source/RevitIFCTools/IFCCertifiedEntitiesAndPSets.json",
    "content": "{\n\t\"IFC2X3CV2\" : {\n\t\t\"Version\" : \"V2.0\",\n\t\t\"EntityList\" : [\n\t\t\t\"IfcActorRole\",\n\t\t\t\"IfcActuatorType\",\n\t\t\t\"IfcAirTerminalBoxType\",\n\t\t\t\"IfcAirTerminalType\",\n\t\t\t\"IfcAirToAirHeatRecoveryType\",\n\t\t\t\"IfcAlarmType\",\n\t\t\t\"IfcApplication\",\n\t\t\t\"IfcArbitraryClosedProfileDef\",\n\t\t\t\"IfcArbitraryOpenProfileDef\",\n\t\t\t\"IfcArbitraryProfileDefWithVoids\",\n\t\t\t\"IfcAsymmetricIShapeProfileDef\",\n\t\t\t\"IfcAxis1Placement\",\n\t\t\t\"IfcAxis2Placement2D\",\n\t\t\t\"IfcAxis2Placement3D\",\n\t\t\t\"IfcBeam\",\n\t\t\t\"IfcBeamType\",\n\t\t\t\"IfcBoilerType\",\n\t\t\t\"IfcBooleanClippingResult\",\n\t\t\t\"IfcBooleanResult\",\n\t\t\t\"IfcBoundingBox\",\n\t\t\t\"IfcBuilding\",\n\t\t\t\"IfcBuildingElementPart\",\n\t\t\t\"IfcBuildingElementProxy\",\n\t\t\t\"IfcBuildingElementProxyType\",\n\t\t\t\"IfcBuildingStorey\",\n\t\t\t\"IfcCableCarrierFittingType\",\n\t\t\t\"IfcCableCarrierSegmentType\",\n\t\t\t\"IfcCableSegmentType\",\n\t\t\t\"IfcCartesianPoint\",\n\t\t\t\"IfcCartesianTransformationOperator2D\",\n\t\t\t\"IfcCartesianTransformationOperator2DnonUniform\",\n\t\t\t\"IfcCartesianTransformationOperator3D\",\n\t\t\t\"IfcCartesianTransformationOperator3DnonUniform\",\n\t\t\t\"IfcCenterLineProfileDef\",\n\t\t\t\"IfcChillerType\",\n\t\t\t\"IfcCircle\",\n\t\t\t\"IfcCircleHollowProfileDef\",\n\t\t\t\"IfcCircleProfileDef\",\n\t\t\t\"IfcClassification\",\n\t\t\t\"IfcClassificationReference\",\n\t\t\t\"IfcClosedShell\",\n\t\t\t\"IfcCoilType\",\n\t\t\t\"IfcColourRgb\",\n\t\t\t\"IfcColumn\",\n\t\t\t\"IfcColumnType\",\n\t\t\t\"IfcComplexProperty\",\n\t\t\t\"IfcCompositeCurve\",\n\t\t\t\"IfcCompositeCurveSegment\",\n\t\t\t\"IfcCompositeProfileDef\",\n\t\t\t\"IfcCompressorType\",\n\t\t\t\"IfcCondenserType\",\n\t\t\t\"IfcConnectedFaceSet\",\n\t\t\t\"IfcContextDependentUnit\",\n\t\t\t\"IfcControllerType\",\n\t\t\t\"IfcConversionBasedUnit\",\n\t\t\t\"IfcCooledBeamType\",\n\t\t\t\"IfcCoolingTowerType\",\n\t\t\t\"IfcCovering\",\n\t\t\t\"IfcCoveringType\",\n\t\t\t\"IfcCShapeProfileDef\",\n\t\t\t\"IfcCurtainWall\",\n\t\t\t\"IfcCurtainWallType\",\n\t\t\t\"IfcCurveStyle\",\n\t\t\t\"IfcDamperType\",\n\t\t\t\"IfcDerivedProfileDef\",\n\t\t\t\"IfcDerivedUnit\",\n\t\t\t\"IfcDerivedUnitElement\",\n\t\t\t\"IfcDimensionalExponents\",\n\t\t\t\"IfcDirection\",\n\t\t\t\"IfcDiscreteAccessory\",\n\t\t\t\"IfcDiscreteAccessoryType\",\n\t\t\t\"IfcDistributionChamberElement\",\n\t\t\t\"IfcDistributionChamberElementType\",\n\t\t\t\"IfcDistributionControlElement\",\n\t\t\t\"IfcDistributionElement\",\n\t\t\t\"IfcDistributionElementType\",\n\t\t\t\"IfcDistributionFlowElement\",\n\t\t\t\"IfcDistributionPort\",\n\t\t\t\"IfcDoor\",\n\t\t\t\"IfcDoorLiningProperties\",\n\t\t\t\"IfcDoorPanelProperties\",\n\t\t\t\"IfcDoorStyle\",\n\t\t\t\"IfcDuctFittingType\",\n\t\t\t\"IfcDuctSegmentType\",\n\t\t\t\"IfcDuctSilencerType\",\n\t\t\t\"IfcElectricalElement\",\n\t\t\t\"IfcElectricApplianceType\",\n\t\t\t\"IfcElectricFlowStorageDeviceType\",\n\t\t\t\"IfcElectricGeneratorType\",\n\t\t\t\"IfcElectricMotorType\",\n\t\t\t\"IfcElectricTimeControlType\",\n\t\t\t\"IfcElementAssembly\",\n\t\t\t\"IfcEllipse\",\n\t\t\t\"IfcEllipseProfileDef\",\n\t\t\t\"IfcEnergyConversionDevice\",\n\t\t\t\"IfcEvaporativeCoolerType\",\n\t\t\t\"IfcEvaporatorType\",\n\t\t\t\"IfcExtrudedAreaSolid\",\n\t\t\t\"IfcFace\",\n\t\t\t\"IfcFaceBasedSurfaceModel\",\n\t\t\t\"IfcFaceBound\",\n\t\t\t\"IfcFaceOuterBound\",\n\t\t\t\"IfcFacetedBrep\",\n\t\t\t\"IfcFanType\",\n\t\t\t\"IfcFastener\",\n\t\t\t\"IfcFastenerType\",\n\t\t\t\"IfcFilterType\",\n\t\t\t\"IfcFireSuppressionTerminalType\",\n\t\t\t\"IfcFlowController\",\n\t\t\t\"IfcFlowFitting\",\n\t\t\t\"IfcFlowInstrumentType\",\n\t\t\t\"IfcFlowMeterType\",\n\t\t\t\"IfcFlowMovingDevice\",\n\t\t\t\"IfcFlowSegment\",\n\t\t\t\"IfcFlowStorageDevice\",\n\t\t\t\"IfcFlowTerminal\",\n\t\t\t\"IfcFlowTreatmentDevice\",\n\t\t\t\"IfcFooting\",\n\t\t\t\"IfcFurnishingElement\",\n\t\t\t\"IfcFurnishingElementType\",\n\t\t\t\"IfcGeometricCurveSet\",\n\t\t\t\"IfcGeometricRepresentationContext\",\n\t\t\t\"IfcGeometricRepresentationSubContext\",\n\t\t\t\"IfcGeometricSet\",\n\t\t\t\"IfcGrid\",\n\t\t\t\"IfcGridAxis\",\n\t\t\t\"IfcGroup\",\n\t\t\t\"IfcHalfSpaceSolid\",\n\t\t\t\"IfcHeatExchangerType\",\n\t\t\t\"IfcHumidifierType\",\n\t\t\t\"IfcIShapeProfileDef\",\n\t\t\t\"IfcJunctionBoxType\",\n\t\t\t\"IfcLampType\",\n\t\t\t\"IfcLightFixtureType\",\n\t\t\t\"IfcLine\",\n\t\t\t\"IfcLocalPlacement\",\n\t\t\t\"IfcLoop\",\n\t\t\t\"IfcLShapeProfileDef\",\n\t\t\t\"IfcMappedItem\",\n\t\t\t\"IfcMaterial\",\n\t\t\t\"IfcMaterialClassificationRelationship\",\n\t\t\t\"IfcMaterialDefinitionRepresentation\",\n\t\t\t\"IfcMaterialLayer\",\n\t\t\t\"IfcMaterialLayerSet\",\n\t\t\t\"IfcMaterialLayerSetUsage\",\n\t\t\t\"IfcMaterialList\",\n\t\t\t\"IfcMeasureWithUnit\",\n\t\t\t\"IfcMechanicalFastener\",\n\t\t\t\"IfcMechanicalFastenerType\",\n\t\t\t\"IfcMember\",\n\t\t\t\"IfcMemberType\",\n\t\t\t\"IfcMotorConnectionType\",\n\t\t\t\"IfcOpeningElement\",\n\t\t\t\"IfcOpenShell\",\n\t\t\t\"IfcOrganization\",\n\t\t\t\"IfcOrganizationRelationship\",\n\t\t\t\"IfcOutletType\",\n\t\t\t\"IfcOwnerHistory\",\n\t\t\t\"IfcPerson\",\n\t\t\t\"IfcPersonAndOrganization\",\n\t\t\t\"IfcPile\",\n\t\t\t\"IfcPipeFittingType\",\n\t\t\t\"IfcPipeSegmentType\",\n\t\t\t\"IfcPlane\",\n\t\t\t\"IfcPlate\",\n\t\t\t\"IfcPlateType\",\n\t\t\t\"IfcPolyline\",\n\t\t\t\"IfcPolyLoop\",\n\t\t\t\"IfcPostalAddress\",\n\t\t\t\"IfcPresentationLayerAssignment\",\n\t\t\t\"IfcPresentationLayerWithStyle\",\n\t\t\t\"IfcPresentationStyleAssignment\",\n\t\t\t\"IfcProductDefinitionShape\",\n\t\t\t\"IfcProject\",\n\t\t\t\"IfcPropertyBoundedValue\",\n\t\t\t\"IfcPropertyEnumeratedValue\",\n\t\t\t\"IfcPropertyEnumeration\",\n\t\t\t\"IfcPropertyListValue\",\n\t\t\t\"IfcPropertySet\",\n\t\t\t\"IfcPropertySingleValue\",\n\t\t\t\"IfcPropertyTableValue\",\n\t\t\t\"IfcProtectiveDeviceType\",\n\t\t\t\"IfcPumpType\",\n\t\t\t\"IfcRailing\",\n\t\t\t\"IfcRailingType\",\n\t\t\t\"IfcRamp\",\n\t\t\t\"IfcRampFlight\",\n\t\t\t\"IfcRampFlightType\",\n\t\t\t\"IfcRectangleHollowProfileDef\",\n\t\t\t\"IfcRectangleProfileDef\",\n\t\t\t\"IfcReinforcingBar\",\n\t\t\t\"IfcReinforcingMesh\",\n\t\t\t\"IfcRelAssignsToGroup\",\n\t\t\t\"IfcRelAssociatesClassification\",\n\t\t\t\"IfcRelAssociatesDocument\",\n\t\t\t\"IfcRelAssociatesMaterial\",\n\t\t\t\"IfcRelConnectsElements\",\n\t\t\t\"IfcRelConnectsPathElements\",\n\t\t\t\"IfcRelConnectsPorts\",\n\t\t\t\"IfcRelConnectsPortToElement\",\n\t\t\t\"IfcRelConnectsWithRealizingElements\",\n\t\t\t\"IfcRelContainedInSpatialStructure\",\n\t\t\t\"IfcRelCoversBldgElements\",\n\t\t\t\"IfcRelDefinesByProperties\",\n\t\t\t\"IfcRelDefinesByType\",\n\t\t\t\"IfcRelFillsElement\",\n\t\t\t\"IfcRelFlowControlElements\",\n\t\t\t\"IfcRelServicesBuildings\",\n\t\t\t\"IfcRelVoidsElement\",\n\t\t\t\"IfcRepresentationMap\",\n\t\t\t\"IfcRevolvedAreaSolid\",\n\t\t\t\"IfcRoof\",\n\t\t\t\"IfcRoundedRectangleProfileDef\",\n\t\t\t\"IfcSanitaryTerminalType\",\n\t\t\t\"IfcSensorType\",\n\t\t\t\"IfcShapeRepresentation\",\n\t\t\t\"IfcSite\",\n\t\t\t\"IfcSIUnit\",\n\t\t\t\"IfcSlab\",\n\t\t\t\"IfcSlabType\",\n\t\t\t\"IfcSpace\",\n\t\t\t\"IfcSpaceType\",\n\t\t\t\"IfcStackTerminalType\",\n\t\t\t\"IfcStair\",\n\t\t\t\"IfcStairFlight\",\n\t\t\t\"IfcStairFlightType\",\n\t\t\t\"IfcStyledItem\",\n\t\t\t\"IfcStyledRepresentation\",\n\t\t\t\"IfcSurfaceCurveSweptAreaSolid\",\n\t\t\t\"IfcSurfaceStyle\",\n\t\t\t\"IfcSurfaceStyleRendering\",\n\t\t\t\"IfcSurfaceStyleShading\",\n\t\t\t\"IfcSweptDiskSolid\",\n\t\t\t\"IfcSwitchingDeviceType\",\n\t\t\t\"IfcSystem\",\n\t\t\t\"IfcTankType\",\n\t\t\t\"IfcTelecomAddress\",\n\t\t\t\"IfcTendon\",\n\t\t\t\"IfcTendonAnchor\",\n\t\t\t\"IfcTransformerType\",\n\t\t\t\"IfcTransportElement\",\n\t\t\t\"IfcTransportElementType\",\n\t\t\t\"IfcTrimmedCurve\",\n\t\t\t\"IfcTShapeProfileDef\",\n\t\t\t\"IfcTubeBundleType\",\n\t\t\t\"IfcTypeProduct\",\n\t\t\t\"IfcUnitaryEquipmentType\",\n\t\t\t\"IfcUnitAssignment\",\n\t\t\t\"IfcUShapeProfileDef\",\n\t\t\t\"IfcValveType\",\n\t\t\t\"IfcVector\",\n\t\t\t\"IfcWall\",\n\t\t\t\"IfcWallStandardCase\",\n\t\t\t\"IfcWallType\",\n\t\t\t\"IfcWasteTerminalType\",\n\t\t\t\"IfcWindow\",\n\t\t\t\"IfcWindowLiningProperties\",\n\t\t\t\"IfcWindowPanelProperties\",\n\t\t\t\"IfcWindowStyle\",\n\t\t\t\"IfcZone\",\n\t\t\t\"IfcZShapeProfileDef\"\n\t\t],\n\t\t\"PropertySetList\" : [\n\t\t\t\"Pset_ActionRequest\",\n\t\t\t\"Pset_ActorCommon\",\n\t\t\t\"Pset_ActuatorTypeCommon\",\n\t\t\t\"Pset_ActuatorTypeElectricActuator\",\n\t\t\t\"Pset_ActuatorTypeHydraulicActuator\",\n\t\t\t\"Pset_ActuatorTypeLinearActuation\",\n\t\t\t\"Pset_ActuatorTypePneumaticActuator\",\n\t\t\t\"Pset_ActuatorTypeRotationalActuation\",\n\t\t\t\"Pset_AirSideSystemInformation\",\n\t\t\t\"Pset_AirTerminalBoxPHistory\",\n\t\t\t\"Pset_AirTerminalBoxTypeCommon\",\n\t\t\t\"Pset_AirTerminalPHistory\",\n\t\t\t\"Pset_AirTerminalTypeCommon\",\n\t\t\t\"Pset_AirTerminalTypeRectangular\",\n\t\t\t\"Pset_AirTerminalTypeRound\",\n\t\t\t\"Pset_AirTerminalTypeSlot\",\n\t\t\t\"Pset_AirTerminalTypeSquare\",\n\t\t\t\"Pset_AirToAirHeatRecoveryPHist\",\n\t\t\t\"Pset_AirToAirHeatRecoveryTypeCommon\",\n\t\t\t\"Pset_AnalogInput\",\n\t\t\t\"Pset_AnalogOutput\",\n\t\t\t\"Pset_Asset\",\n\t\t\t\"Pset_BeamCommon\",\n\t\t\t\"Pset_BinaryInput\",\n\t\t\t\"Pset_BinaryOutput\",\n\t\t\t\"Pset_BoilerPHistory\",\n\t\t\t\"Pset_BoilerTypeCommon\",\n\t\t\t\"Pset_BoilerTypeSteam\",\n\t\t\t\"Pset_BuildingCommon\",\n\t\t\t\"Pset_BuildingElementProxyCommon\",\n\t\t\t\"Pset_BuildingStoreyCommon\",\n\t\t\t\"Pset_BuildingUse\",\n\t\t\t\"Pset_BuildingUseAdjacent\",\n\t\t\t\"Pset_BuildingWaterStorage\",\n\t\t\t\"Pset_CableCarrierSegmentTypeCableLadderSegment\",\n\t\t\t\"Pset_CableCarrierSegmentTypeCableTraySegment\",\n\t\t\t\"Pset_CableCarrierSegmentTypeCableTrunkingSegment\",\n\t\t\t\"Pset_CableCarrierSegmentTypeConduitSegment\",\n\t\t\t\"Pset_CableSegmentTypeCableSegment\",\n\t\t\t\"Pset_CableSegmentTypeConductorSegment\",\n\t\t\t\"Pset_ChillerPHistory\",\n\t\t\t\"Pset_ChillerTypeCommon\",\n\t\t\t\"Pset_CoilPHistory\",\n\t\t\t\"Pset_CoilTypeCommon\",\n\t\t\t\"Pset_CoilTypeHydronic\",\n\t\t\t\"Pset_ColumnCommon\",\n\t\t\t\"Pset_CompressorPHistory\",\n\t\t\t\"Pset_CompressorTypeCommon\",\n\t\t\t\"Pset_ConcreteElementGeneral\",\n\t\t\t\"Pset_ConcreteElementQuantityGeneral\",\n\t\t\t\"Pset_ConcreteElementSurfaceFinishQuantityGeneral\",\n\t\t\t\"Pset_CondenserPHistory\",\n\t\t\t\"Pset_CondenserTypeCommon\",\n\t\t\t\"Pset_ControllerTypeCommon\",\n\t\t\t\"Pset_ControllerTypeProportional\",\n\t\t\t\"Pset_ControllerTypeTwoPosition\",\n\t\t\t\"Pset_CooledBeamPHistory\",\n\t\t\t\"Pset_CooledBeamPHistoryActive\",\n\t\t\t\"Pset_CooledBeamTypeActive\",\n\t\t\t\"Pset_CooledBeamTypeCommon\",\n\t\t\t\"Pset_CoolingTowerPHistory\",\n\t\t\t\"Pset_CoolingTowerTypeCommon\",\n\t\t\t\"Pset_CoveringCeiling\",\n\t\t\t\"Pset_CoveringCommon\",\n\t\t\t\"Pset_CoveringFlooring\",\n\t\t\t\"Pset_CurtainWallCommon\",\n\t\t\t\"Pset_DamperPHistory\",\n\t\t\t\"Pset_DamperTypeCommon\",\n\t\t\t\"Pset_DamperTypeControlDamper\",\n\t\t\t\"Pset_DamperTypeFireDamper\",\n\t\t\t\"Pset_DamperTypeFireSmokeDamper\",\n\t\t\t\"Pset_DamperTypeSmokeDamper\",\n\t\t\t\"Pset_DesignPoint\",\n\t\t\t\"Pset_DiscreteAccessoryAnchorBolt\",\n\t\t\t\"Pset_DiscreteAccessoryColumnShoe\",\n\t\t\t\"Pset_DiscreteAccessoryCornerFixingPlate\",\n\t\t\t\"Pset_DiscreteAccessoryDiagonalTrussConnector\",\n\t\t\t\"Pset_DiscreteAccessoryEdgeFixingPlate\",\n\t\t\t\"Pset_DiscreteAccessoryFixingSocket\",\n\t\t\t\"Pset_DiscreteAccessoryLadderTrussConnector\",\n\t\t\t\"Pset_DiscreteAccessoryStandardFixingPlate\",\n\t\t\t\"Pset_DiscreteAccessoryWireLoop\",\n\t\t\t\"Pset_DistributionChamberElementTypeFormedDuct\",\n\t\t\t\"Pset_DistributionChamberElementTypeInspectionChamber\",\n\t\t\t\"Pset_DistributionChamberElementTypeInspectionPit\",\n\t\t\t\"Pset_DistributionChamberElementTypeManhole\",\n\t\t\t\"Pset_DistributionChamberElementTypeMeterChamber\",\n\t\t\t\"Pset_DistributionChamberElementTypeSump\",\n\t\t\t\"Pset_DistributionChamberElementTypeTrench\",\n\t\t\t\"Pset_DistributionChamberElementTypeValveChamber\",\n\t\t\t\"Pset_DistributionFlowElementCommon\",\n\t\t\t\"Pset_DistributionPortDuct\",\n\t\t\t\"Pset_DistributionPortPipe\",\n\t\t\t\"Pset_DoorCommon\",\n\t\t\t\"Pset_DoorWindowGlazingType\",\n\t\t\t\"Pset_DoorWindowShadingType\",\n\t\t\t\"Pset_DrainageCatchment\",\n\t\t\t\"Pset_DrainageCulvert\",\n\t\t\t\"Pset_DrainageOutfall\",\n\t\t\t\"Pset_DrainageReserve\",\n\t\t\t\"Pset_Draughting\",\n\t\t\t\"Pset_DuctConnection\",\n\t\t\t\"Pset_DuctDesignCriteria\",\n\t\t\t\"Pset_DuctFittingPHistory\",\n\t\t\t\"Pset_DuctFittingTypeCommon\",\n\t\t\t\"Pset_DuctSegmentPHistory\",\n\t\t\t\"Pset_DuctSegmentTypeCommon\",\n\t\t\t\"Pset_DuctSilencerPHistory\",\n\t\t\t\"Pset_DuctSilencerTypeCommon\",\n\t\t\t\"Pset_ElectricalCircuit\",\n\t\t\t\"Pset_ElectricalDeviceCommon\",\n\t\t\t\"Pset_ElectricDistributionPointCommon\",\n\t\t\t\"Pset_ElectricGeneratorTypeCommon\",\n\t\t\t\"Pset_ElectricHeaterTypeElectricalCableHeater\",\n\t\t\t\"Pset_ElectricHeaterTypeElectricalMatHeater\",\n\t\t\t\"Pset_ElectricHeaterTypeElectricalPointHeater\",\n\t\t\t\"Pset_ElectricMotorTypeCommon\",\n\t\t\t\"Pset_ElementShading\",\n\t\t\t\"Pset_EnergyConsumptionPHistoryElectricity\",\n\t\t\t\"Pset_EnergyConsumptionPHistoryFuel\",\n\t\t\t\"Pset_EnergyConsumptionPHistorySteam\",\n\t\t\t\"Pset_EnergyConversionDeviceCoil\",\n\t\t\t\"Pset_EnergyConversionDeviceSpaceHeaterPanel\",\n\t\t\t\"Pset_EnergyConversionDeviceSpaceHeaterSectional\",\n\t\t\t\"Pset_EvaporativeCoolerPHistory\",\n\t\t\t\"Pset_EvaporativeCoolerTypeCommon\",\n\t\t\t\"Pset_EvaporatorPHistory\",\n\t\t\t\"Pset_EvaporatorTypeCommon\",\n\t\t\t\"Pset_FanPHistory\",\n\t\t\t\"Pset_FanTypeCommon\",\n\t\t\t\"Pset_FanTypeSmokeControl\",\n\t\t\t\"Pset_FilterPHistory\",\n\t\t\t\"Pset_FilterTypeAirParticleFilter\",\n\t\t\t\"Pset_FilterTypeCommon\",\n\t\t\t\"Pset_FireRatingProperties\",\n\t\t\t\"Pset_FireSuppressionTerminalTypeBreechingInlet\",\n\t\t\t\"Pset_FireSuppressionTerminalTypeFireHydrant\",\n\t\t\t\"Pset_FireSuppressionTerminalTypeHoseReel\",\n\t\t\t\"Pset_FireSuppressionTerminalTypeSprinkler\",\n\t\t\t\"Pset_FlowControllerDamper\",\n\t\t\t\"Pset_FlowControllerFlowMeter\",\n\t\t\t\"Pset_FlowFittingDuctFitting\",\n\t\t\t\"Pset_FlowFittingPipeFitting\",\n\t\t\t\"Pset_FlowInstrumentTypePressureGauge\",\n\t\t\t\"Pset_FlowInstrumentTypeThermometer\",\n\t\t\t\"Pset_FlowMeterTypeCommon\",\n\t\t\t\"Pset_FlowMeterTypeEnergyMeter\",\n\t\t\t\"Pset_FlowMeterTypeGasMeter\",\n\t\t\t\"Pset_FlowMeterTypeOilMeter\",\n\t\t\t\"Pset_FlowMeterTypeWaterMeter\",\n\t\t\t\"Pset_FlowMovingDeviceCompressor\",\n\t\t\t\"Pset_FlowMovingDeviceFan\",\n\t\t\t\"Pset_FlowMovingDeviceFanCentrifugal\",\n\t\t\t\"Pset_FlowMovingDevicePump\",\n\t\t\t\"Pset_FlowSegmentDuctSegment\",\n\t\t\t\"Pset_FlowSegmentPipeSegment\",\n\t\t\t\"Pset_FlowStorageDeviceTank\",\n\t\t\t\"Pset_FlowTerminalAirTerminal\",\n\t\t\t\"Pset_FurnitureTypeChair\",\n\t\t\t\"Pset_FurnitureTypeCommon\",\n\t\t\t\"Pset_FurnitureTypeDesk\",\n\t\t\t\"Pset_FurnitureTypeFileCabinet\",\n\t\t\t\"Pset_FurnitureTypeTable\",\n\t\t\t\"Pset_GasTerminalPHistory\",\n\t\t\t\"Pset_GasTerminalTypeCommon\",\n\t\t\t\"Pset_GasTerminalTypeGasAppliance\",\n\t\t\t\"Pset_GasTerminalTypeGasBurner\",\n\t\t\t\"Pset_HeatExchangerTypeCommon\",\n\t\t\t\"Pset_HeatExchangerTypePlate\",\n\t\t\t\"Pset_HumidifierPHistory\",\n\t\t\t\"Pset_HumidifierTypeCommon\",\n\t\t\t\"Pset_LampTypeCommon\",\n\t\t\t\"Pset_LightFixtureTypeCommon\",\n\t\t\t\"Pset_LightFixtureTypeExitSign\",\n\t\t\t\"Pset_LightFixtureTypeThermal\",\n\t\t\t\"Pset_ManufacturerOccurrence\",\n\t\t\t\"Pset_ManufacturerTypeInformation\",\n\t\t\t\"Pset_MemberCommon\",\n\t\t\t\"Pset_MultiStateInput\",\n\t\t\t\"Pset_MultiStateOutput\",\n\t\t\t\"Pset_OpeningElementCommon\",\n\t\t\t\"Pset_OutletTypeCommon\",\n\t\t\t\"Pset_OutsideDesignCriteria\",\n\t\t\t\"Pset_PackingInstructions\",\n\t\t\t\"Pset_Permit\",\n\t\t\t\"Pset_PipeConnection\",\n\t\t\t\"Pset_PipeConnectionFlanged\",\n\t\t\t\"Pset_PipeFittingPHistory\",\n\t\t\t\"Pset_PipeFittingTypeCommon\",\n\t\t\t\"Pset_PipeSegmentPHistory\",\n\t\t\t\"Pset_PipeSegmentTypeCommon\",\n\t\t\t\"Pset_PipeSegmentTypeGutter\",\n\t\t\t\"Pset_PlateCommon\",\n\t\t\t\"Pset_PrecastConcreteElementGeneral\",\n\t\t\t\"Pset_ProductRequirements\",\n\t\t\t\"Pset_ProjectCommon\",\n\t\t\t\"Pset_ProjectionElementShadingDevicePHistory\",\n\t\t\t\"Pset_ProjectOrderChangeOrder\",\n\t\t\t\"Pset_ProjectOrderMaintenanceWorkOrder\",\n\t\t\t\"Pset_ProjectOrderMoveOrder\",\n\t\t\t\"Pset_ProjectOrderPurchaseOrder\",\n\t\t\t\"Pset_ProjectOrderWorkOrder\",\n\t\t\t\"Pset_PropertyAgreement\",\n\t\t\t\"Pset_ProtectiveDeviceTypeCircuitBreaker\",\n\t\t\t\"Pset_ProtectiveDeviceTypeCommon\",\n\t\t\t\"Pset_ProtectiveDeviceTypeEarthFailureDevice\",\n\t\t\t\"Pset_ProtectiveDeviceTypeFuseDisconnector\",\n\t\t\t\"Pset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker\",\n\t\t\t\"Pset_ProtectiveDeviceTypeResidualCurrentSwitch\",\n\t\t\t\"Pset_ProtectiveDeviceTypeVaristor\",\n\t\t\t\"Pset_ProvisionForVoid\",\n\t\t\t\"Pset_PumpPHistory\",\n\t\t\t\"Pset_PumpTypeCommon\",\n\t\t\t\"Pset_QuantityTakeOff\",\n\t\t\t\"Pset_RailingCommon\",\n\t\t\t\"Pset_RampCommon\",\n\t\t\t\"Pset_RampFlightCommon\",\n\t\t\t\"Pset_ReinforcementBarCountOfIndependentFooting\",\n\t\t\t\"Pset_ReinforcementBarPitchOfBeam\",\n\t\t\t\"Pset_ReinforcementBarPitchOfColumn\",\n\t\t\t\"Pset_ReinforcementBarPitchOfContinuousFooting\",\n\t\t\t\"Pset_ReinforcementBarPitchOfSlab\",\n\t\t\t\"Pset_ReinforcementBarPitchOfWall\",\n\t\t\t\"Pset_ReinforcingBarBendingsBECCommon\",\n\t\t\t\"Pset_ReinforcingBarBendingsBS8666Common\",\n\t\t\t\"Pset_ReinforcingBarBendingsDIN135610Common\",\n\t\t\t\"Pset_ReinforcingBarBendingsISOCD3766Common\",\n\t\t\t\"Pset_Reliability\",\n\t\t\t\"Pset_Risk\",\n\t\t\t\"Pset_RoofCommon\",\n\t\t\t\"Pset_SanitaryTerminalTypeBath\",\n\t\t\t\"Pset_SanitaryTerminalTypeBidet\",\n\t\t\t\"Pset_SanitaryTerminalTypeCistern\",\n\t\t\t\"Pset_SanitaryTerminalTypeSanitaryFountain\",\n\t\t\t\"Pset_SanitaryTerminalTypeShower\",\n\t\t\t\"Pset_SanitaryTerminalTypeSink\",\n\t\t\t\"Pset_SanitaryTerminalTypeToiletPan\",\n\t\t\t\"Pset_SanitaryTerminalTypeUrinal\",\n\t\t\t\"Pset_SanitaryTerminalTypeWashHandBasin\",\n\t\t\t\"Pset_SanitaryTerminalTypeWCSeat\",\n\t\t\t\"Pset_SensorTypeCO2Sensor\",\n\t\t\t\"Pset_SensorTypeFireSensor\",\n\t\t\t\"Pset_SensorTypeGasSensor\",\n\t\t\t\"Pset_SensorTypeHeatSensor\",\n\t\t\t\"Pset_SensorTypeHumiditySensor\",\n\t\t\t\"Pset_SensorTypeLightSensor\",\n\t\t\t\"Pset_SensorTypeMovementSensor\",\n\t\t\t\"Pset_SensorTypePressureSensor\",\n\t\t\t\"Pset_SensorTypeSmokeSensor\",\n\t\t\t\"Pset_SensorTypeSoundSensor\",\n\t\t\t\"Pset_SensorTypeTemperatureSensor\",\n\t\t\t\"Pset_SiteCommon\",\n\t\t\t\"Pset_SlabCommon\",\n\t\t\t\"Pset_SpaceCommon\",\n\t\t\t\"Pset_SpaceFireSafetyRequirements\",\n\t\t\t\"Pset_SpaceHeaterPHistoryCommon\",\n\t\t\t\"Pset_SpaceHeaterTypeCommon\",\n\t\t\t\"Pset_SpaceHeaterTypeHydronic\",\n\t\t\t\"Pset_SpaceLightingRequirements\",\n\t\t\t\"Pset_SpaceOccupancyRequirements\",\n\t\t\t\"Pset_SpaceParking\",\n\t\t\t\"Pset_SpaceParkingAisle\",\n\t\t\t\"Pset_SpaceProgramCommon\",\n\t\t\t\"Pset_SpaceThermalDesign\",\n\t\t\t\"Pset_SpaceThermalPHistory\",\n\t\t\t\"Pset_SpaceThermalRequirements\",\n\t\t\t\"Pset_StairCommon\",\n\t\t\t\"Pset_StairFlightCommon\",\n\t\t\t\"Pset_SwitchingDeviceTypeCommon\",\n\t\t\t\"Pset_SwitchingDeviceTypeContactor\",\n\t\t\t\"Pset_SwitchingDeviceTypeEmergencyStop\",\n\t\t\t\"Pset_SwitchingDeviceTypeStarter\",\n\t\t\t\"Pset_SwitchingDeviceTypeSwitchDisconnector\",\n\t\t\t\"Pset_SwitchingDeviceTypeToggleSwitch\",\n\t\t\t\"Pset_SystemFurnitureElementTypeCommon\",\n\t\t\t\"Pset_SystemFurnitureElementTypePanel\",\n\t\t\t\"Pset_SystemFurnitureElementTypeWorkSurface\",\n\t\t\t\"Pset_TankTypeCommon\",\n\t\t\t\"Pset_TankTypeExpansion\",\n\t\t\t\"Pset_TankTypePreformed\",\n\t\t\t\"Pset_TankTypePressureVessel\",\n\t\t\t\"Pset_TankTypeSectional\",\n\t\t\t\"Pset_ThermalLoadAggregate\",\n\t\t\t\"Pset_ThermalLoadDesignCriteria\",\n\t\t\t\"Pset_TransformerTypeCommon\",\n\t\t\t\"Pset_TransportElementCommon\",\n\t\t\t\"Pset_TransportElementElevator\",\n\t\t\t\"Pset_TubeBundleTypeCommon\",\n\t\t\t\"Pset_TubeBundleTypeFinned\",\n\t\t\t\"Pset_UnitaryEquipmentTypeAirConditioningUnit\",\n\t\t\t\"Pset_UnitaryEquipmentTypeAirHandler\",\n\t\t\t\"Pset_UtilityConsumption\",\n\t\t\t\"Pset_ValvePHistory\",\n\t\t\t\"Pset_ValveTypeAirRelease\",\n\t\t\t\"Pset_ValveTypeCommon\",\n\t\t\t\"Pset_ValveTypeDrawOffCock\",\n\t\t\t\"Pset_ValveTypeFaucet\",\n\t\t\t\"Pset_ValveTypeFlushing\",\n\t\t\t\"Pset_ValveTypeGasTap\",\n\t\t\t\"Pset_ValveTypeIsolating\",\n\t\t\t\"Pset_ValveTypeMixing\",\n\t\t\t\"Pset_ValveTypePressureReducing\",\n\t\t\t\"Pset_ValveTypePressureRelief\",\n\t\t\t\"Pset_VibrationIsolatorTypeCommon\",\n\t\t\t\"Pset_WallCommon\",\n\t\t\t\"Pset_Warranty\",\n\t\t\t\"Pset_WasteTerminalTypeFloorTrap\",\n\t\t\t\"Pset_WasteTerminalTypeFloorWaste\",\n\t\t\t\"Pset_WasteTerminalTypeGreaseInterceptor\",\n\t\t\t\"Pset_WasteTerminalTypeGullySump\",\n\t\t\t\"Pset_WasteTerminalTypeGullyTrap\",\n\t\t\t\"Pset_WasteTerminalTypeOilInterceptor\",\n\t\t\t\"Pset_WasteTerminalTypePetrolInterceptor\",\n\t\t\t\"Pset_WasteTerminalTypeRoofDrain\",\n\t\t\t\"Pset_WasteTerminalTypeWasteDisposalUnit\",\n\t\t\t\"Pset_WasteTerminalTypeWasteTrap\",\n\t\t\t\"Pset_WindowCommon\",\n\t\t\t\"Pset_ZoneCommon\",\n\t\t\t\"Qto_BeamBaseQuantities\",\n\t\t\t\"Qto_BuildingBaseQuantities\",\n\t\t\t\"Qto_BuildingStoreyBaseQuantities\",\n\t\t\t\"Qto_ColumnBaseQuantities\",\n\t\t\t\"Qto_CoveringBaseQuantities\",\n\t\t\t\"Qto_CurtainWallQuantities\",\n\t\t\t\"Qto_DoorBaseQuantities\",\n\t\t\t\"Qto_OpeningElementBaseQuantities\",\n\t\t\t\"Qto_RailingBaseQuantities\",\n\t\t\t\"Qto_RampFlightBaseQuantities\",\n\t\t\t\"Qto_RoofBaseQuantities\",\n\t\t\t\"Qto_SiteBaseQuantities\",\n\t\t\t\"Qto_SlabBaseQuantities\",\n\t\t\t\"Qto_SpaceBaseQuantities\",\n\t\t\t\"Qto_StairFlightBaseQuantities\",\n\t\t\t\"Qto_WallBaseQuantities\",\n\t\t\t\"Qto_WindowBaseQuantities\"\n\t\t]\n\t},\n\t\"IFC4RV\" : {\n\t\t\"Version\" : \"V1.2\",\n\t\t\"EntityList\" : [\n\t\t\t\"IfcActorRole\",\n\t\t\t\"IfcActuator\",\n\t\t\t\"IfcActuatorType\",\n\t\t\t\"IfcAddress\",\n\t\t\t\"IfcAirTerminal\",\n\t\t\t\"IfcAirTerminalBox\",\n\t\t\t\"IfcAirTerminalBoxType\",\n\t\t\t\"IfcAirTerminalType\",\n\t\t\t\"IfcAirToAirHeatRecovery\",\n\t\t\t\"IfcAirToAirHeatRecoveryType\",\n\t\t\t\"IfcAlarm\",\n\t\t\t\"IfcAlarmType\",\n\t\t\t\"IfcApplication\",\n\t\t\t\"IfcArbitraryClosedProfileDef\",\n\t\t\t\"IfcArbitraryProfileDefWithVoids\",\n\t\t\t\"IfcAudioVisualAppliance\",\n\t\t\t\"IfcAudioVisualApplianceType\",\n\t\t\t\"IfcAxis1Placement\",\n\t\t\t\"IfcAxis2Placement3D\",\n\t\t\t\"IfcBeam\",\n\t\t\t\"IfcBeamType\",\n\t\t\t\"IfcBoiler\",\n\t\t\t\"IfcBoilerType\",\n\t\t\t\"IfcBoundedCurve\",\n\t\t\t\"IfcBoundingBox\",\n\t\t\t\"IfcBuilding\",\n\t\t\t\"IfcBuildingElement\",\n\t\t\t\"IfcBuildingElementPart\",\n\t\t\t\"IfcBuildingElementPartType\",\n\t\t\t\"IfcBuildingElementProxy\",\n\t\t\t\"IfcBuildingElementProxyType\",\n\t\t\t\"IfcBuildingElementType\",\n\t\t\t\"IfcBuildingStorey\",\n\t\t\t\"IfcBuildingSystem\",\n\t\t\t\"IfcBurner\",\n\t\t\t\"IfcBurnerType\",\n\t\t\t\"IfcCableCarrierFitting\",\n\t\t\t\"IfcCableCarrierFittingType\",\n\t\t\t\"IfcCableCarrierSegment\",\n\t\t\t\"IfcCableCarrierSegmentType\",\n\t\t\t\"IfcCableFitting\",\n\t\t\t\"IfcCableFittingType\",\n\t\t\t\"IfcCableSegment\",\n\t\t\t\"IfcCableSegmentType\",\n\t\t\t\"IfcCartesianPoint\",\n\t\t\t\"IfcCartesianPointList\",\n\t\t\t\"IfcCartesianPointList2D\",\n\t\t\t\"IfcCartesianPointList3D\",\n\t\t\t\"IfcCartesianTransformationOperator\",\n\t\t\t\"IfcCartesianTransformationOperator3D\",\n\t\t\t\"IfcCartesianTransformationOperator3DnonUniform\",\n\t\t\t\"IfcChiller\",\n\t\t\t\"IfcChillerType\",\n\t\t\t\"IfcChimney\",\n\t\t\t\"IfcChimneyType\",\n\t\t\t\"IfcCircle\",\n\t\t\t\"IfcCivilElement\",\n\t\t\t\"IfcCivilElementType\",\n\t\t\t\"IfcClassification\",\n\t\t\t\"IfcClassificationReference\",\n\t\t\t\"IfcCoil\",\n\t\t\t\"IfcCoilType\",\n\t\t\t\"IfcColourRgb\",\n\t\t\t\"IfcColourRgbList\",\n\t\t\t\"IfcColourSpecification\",\n\t\t\t\"IfcColumn\",\n\t\t\t\"IfcColumnType\",\n\t\t\t\"IfcCommunicationsAppliance\",\n\t\t\t\"IfcCommunicationsApplianceType\",\n\t\t\t\"IfcComplexProperty\",\n\t\t\t\"IfcCompressor\",\n\t\t\t\"IfcCompressorType\",\n\t\t\t\"IfcCondenser\",\n\t\t\t\"IfcCondenserType\",\n\t\t\t\"IfcConic\",\n\t\t\t\"IfcContext\",\n\t\t\t\"IfcController\",\n\t\t\t\"IfcControllerType\",\n\t\t\t\"IfcConversionBasedUnit\",\n\t\t\t\"IfcConversionBasedUnitWithOffset\",\n\t\t\t\"IfcCooledBeam\",\n\t\t\t\"IfcCooledBeamType\",\n\t\t\t\"IfcCoolingTower\",\n\t\t\t\"IfcCoolingTowerType\",\n\t\t\t\"IfcCoordinateOperation\",\n\t\t\t\"IfcCoordinateReferenceSystem\",\n\t\t\t\"IfcCovering\",\n\t\t\t\"IfcCoveringType\",\n\t\t\t\"IfcCurtainWall\",\n\t\t\t\"IfcCurtainWallType\",\n\t\t\t\"IfcCurve\",\n\t\t\t\"IfcDamper\",\n\t\t\t\"IfcDamperType\",\n\t\t\t\"IfcDerivedUnit\",\n\t\t\t\"IfcDerivedUnitElement\",\n\t\t\t\"IfcDimensionalExponents\",\n\t\t\t\"IfcDirection\",\n\t\t\t\"IfcDiscreteAccessory\",\n\t\t\t\"IfcDiscreteAccessoryType\",\n\t\t\t\"IfcDistributionChamberElement\",\n\t\t\t\"IfcDistributionChamberElementType\",\n\t\t\t\"IfcDistributionCircuit\",\n\t\t\t\"IfcDistributionControlElement\",\n\t\t\t\"IfcDistributionControlElementType\",\n\t\t\t\"IfcDistributionElement\",\n\t\t\t\"IfcDistributionElementType\",\n\t\t\t\"IfcDistributionFlowElement\",\n\t\t\t\"IfcDistributionFlowElementType\",\n\t\t\t\"IfcDistributionPort\",\n\t\t\t\"IfcDistributionSystem\",\n\t\t\t\"IfcDoor\",\n\t\t\t\"IfcDoorLiningProperties\",\n\t\t\t\"IfcDoorPanelProperties\",\n\t\t\t\"IfcDoorType\",\n\t\t\t\"IfcDuctFitting\",\n\t\t\t\"IfcDuctFittingType\",\n\t\t\t\"IfcDuctSegment\",\n\t\t\t\"IfcDuctSegmentType\",\n\t\t\t\"IfcDuctSilencer\",\n\t\t\t\"IfcDuctSilencerType\",\n\t\t\t\"IfcElectricAppliance\",\n\t\t\t\"IfcElectricApplianceType\",\n\t\t\t\"IfcElectricDistributionBoard\",\n\t\t\t\"IfcElectricDistributionBoardType\",\n\t\t\t\"IfcElectricFlowStorageDevice\",\n\t\t\t\"IfcElectricFlowStorageDeviceType\",\n\t\t\t\"IfcElectricGenerator\",\n\t\t\t\"IfcElectricGeneratorType\",\n\t\t\t\"IfcElectricMotor\",\n\t\t\t\"IfcElectricMotorType\",\n\t\t\t\"IfcElectricTimeControl\",\n\t\t\t\"IfcElectricTimeControlType\",\n\t\t\t\"IfcElement\",\n\t\t\t\"IfcElementAssembly\",\n\t\t\t\"IfcElementAssemblyType\",\n\t\t\t\"IfcElementComponent\",\n\t\t\t\"IfcElementComponentType\",\n\t\t\t\"IfcElementQuantity\",\n\t\t\t\"IfcElementType\",\n\t\t\t\"IfcEnergyConversionDevice\",\n\t\t\t\"IfcEnergyConversionDeviceType\",\n\t\t\t\"IfcEngine\",\n\t\t\t\"IfcEngineType\",\n\t\t\t\"IfcEvaporativeCooler\",\n\t\t\t\"IfcEvaporativeCoolerType\",\n\t\t\t\"IfcEvaporator\",\n\t\t\t\"IfcEvaporatorType\",\n\t\t\t\"IfcExtendedProperties\",\n\t\t\t\"IfcExternalInformation\",\n\t\t\t\"IfcExternalReference\",\n\t\t\t\"IfcExtrudedAreaSolid\",\n\t\t\t\"IfcFan\",\n\t\t\t\"IfcFanType\",\n\t\t\t\"IfcFastener\",\n\t\t\t\"IfcFastenerType\",\n\t\t\t\"IfcFeatureElement\",\n\t\t\t\"IfcFeatureElementSubtraction\",\n\t\t\t\"IfcFilter\",\n\t\t\t\"IfcFilterType\",\n\t\t\t\"IfcFireSuppressionTerminal\",\n\t\t\t\"IfcFireSuppressionTerminalType\",\n\t\t\t\"IfcFlowController\",\n\t\t\t\"IfcFlowControllerType\",\n\t\t\t\"IfcFlowFitting\",\n\t\t\t\"IfcFlowFittingType\",\n\t\t\t\"IfcFlowInstrument\",\n\t\t\t\"IfcFlowInstrumentType\",\n\t\t\t\"IfcFlowMeter\",\n\t\t\t\"IfcFlowMeterType\",\n\t\t\t\"IfcFlowMovingDevice\",\n\t\t\t\"IfcFlowMovingDeviceType\",\n\t\t\t\"IfcFlowSegment\",\n\t\t\t\"IfcFlowSegmentType\",\n\t\t\t\"IfcFlowStorageDevice\",\n\t\t\t\"IfcFlowStorageDeviceType\",\n\t\t\t\"IfcFlowTerminal\",\n\t\t\t\"IfcFlowTerminalType\",\n\t\t\t\"IfcFlowTreatmentDevice\",\n\t\t\t\"IfcFlowTreatmentDeviceType\",\n\t\t\t\"IfcFooting\",\n\t\t\t\"IfcFootingType\",\n\t\t\t\"IfcFurnishingElement\",\n\t\t\t\"IfcFurnishingElementType\",\n\t\t\t\"IfcFurniture\",\n\t\t\t\"IfcFurnitureType\",\n\t\t\t\"IfcGeographicElement\",\n\t\t\t\"IfcGeographicElementType\",\n\t\t\t\"IfcGeometricCurveSet\",\n\t\t\t\"IfcGeometricRepresentationContext\",\n\t\t\t\"IfcGeometricRepresentationItem\",\n\t\t\t\"IfcGeometricRepresentationSubContext\",\n\t\t\t\"IfcGeometricSet\",\n\t\t\t\"IfcGrid\",\n\t\t\t\"IfcGridAxis\",\n\t\t\t\"IfcGroup\",\n\t\t\t\"IfcHeatExchanger\",\n\t\t\t\"IfcHeatExchangerType\",\n\t\t\t\"IfcHumidifier\",\n\t\t\t\"IfcHumidifierType\",\n\t\t\t\"IfcIndexedColourMap\",\n\t\t\t\"IfcIndexedPolyCurve\",\n\t\t\t\"IfcIndexedPolygonalFace\",\n\t\t\t\"IfcIndexedPolygonalFaceWithVoids\",\n\t\t\t\"IfcInterceptor\",\n\t\t\t\"IfcInterceptorType\",\n\t\t\t\"IfcJunctionBox\",\n\t\t\t\"IfcJunctionBoxType\",\n\t\t\t\"IfcLamp\",\n\t\t\t\"IfcLampType\",\n\t\t\t\"IfcLightFixture\",\n\t\t\t\"IfcLightFixtureType\",\n\t\t\t\"IfcLine\",\n\t\t\t\"IfcLocalPlacement\",\n\t\t\t\"IfcMapConversion\",\n\t\t\t\"IfcMappedItem\",\n\t\t\t\"IfcMaterial\",\n\t\t\t\"IfcMaterialConstituent\",\n\t\t\t\"IfcMaterialConstituentSet\",\n\t\t\t\"IfcMaterialDefinition\",\n\t\t\t\"IfcMaterialProperties\",\n\t\t\t\"IfcMeasureWithUnit\",\n\t\t\t\"IfcMechanicalFastener\",\n\t\t\t\"IfcMechanicalFastenerType\",\n\t\t\t\"IfcMedicalDevice\",\n\t\t\t\"IfcMedicalDeviceType\",\n\t\t\t\"IfcMember\",\n\t\t\t\"IfcMemberType\",\n\t\t\t\"IfcMonetaryUnit\",\n\t\t\t\"IfcMotorConnection\",\n\t\t\t\"IfcMotorConnectionType\",\n\t\t\t\"IfcNamedUnit\",\n\t\t\t\"IfcObject\",\n\t\t\t\"IfcObjectDefinition\",\n\t\t\t\"IfcObjectPlacement\",\n\t\t\t\"IfcOpeningElement\",\n\t\t\t\"IfcOrganization\",\n\t\t\t\"IfcOutlet\",\n\t\t\t\"IfcOutletType\",\n\t\t\t\"IfcOwnerHistory\",\n\t\t\t\"IfcPerson\",\n\t\t\t\"IfcPersonAndOrganization\",\n\t\t\t\"IfcPhysicalComplexQuantity\",\n\t\t\t\"IfcPhysicalQuantity\",\n\t\t\t\"IfcPhysicalSimpleQuantity\",\n\t\t\t\"IfcPile\",\n\t\t\t\"IfcPileType\",\n\t\t\t\"IfcPipeFitting\",\n\t\t\t\"IfcPipeFittingType\",\n\t\t\t\"IfcPipeSegment\",\n\t\t\t\"IfcPipeSegmentType\",\n\t\t\t\"IfcPlacement\",\n\t\t\t\"IfcPlate\",\n\t\t\t\"IfcPlateType\",\n\t\t\t\"IfcPoint\",\n\t\t\t\"IfcPolygonalFaceSet\",\n\t\t\t\"IfcPort\",\n\t\t\t\"IfcPostalAddress\",\n\t\t\t\"IfcPreDefinedPropertySet\",\n\t\t\t\"IfcPresentationItem\",\n\t\t\t\"IfcPresentationLayerAssignment\",\n\t\t\t\"IfcPresentationStyle\",\n\t\t\t\"IfcProduct\",\n\t\t\t\"IfcProductDefinitionShape\",\n\t\t\t\"IfcProductRepresentation\",\n\t\t\t\"IfcProfileDef\",\n\t\t\t\"IfcProject\",\n\t\t\t\"IfcProjectedCRS\",\n\t\t\t\"IfcProperty\",\n\t\t\t\"IfcPropertyAbstraction\",\n\t\t\t\"IfcPropertyBoundedValue\",\n\t\t\t\"IfcPropertyDefinition\",\n\t\t\t\"IfcPropertyEnumeratedValue\",\n\t\t\t\"IfcPropertyEnumeration\",\n\t\t\t\"IfcPropertyListValue\",\n\t\t\t\"IfcPropertySet\",\n\t\t\t\"IfcPropertySetDefinition\",\n\t\t\t\"IfcPropertySingleValue\",\n\t\t\t\"IfcPropertyTableValue\",\n\t\t\t\"IfcProtectiveDevice\",\n\t\t\t\"IfcProtectiveDeviceTrippingUnit\",\n\t\t\t\"IfcProtectiveDeviceTrippingUnitType\",\n\t\t\t\"IfcProtectiveDeviceType\",\n\t\t\t\"IfcPump\",\n\t\t\t\"IfcPumpType\",\n\t\t\t\"IfcQuantityArea\",\n\t\t\t\"IfcQuantityCount\",\n\t\t\t\"IfcQuantityLength\",\n\t\t\t\"IfcQuantitySet\",\n\t\t\t\"IfcQuantityTime\",\n\t\t\t\"IfcQuantityVolume\",\n\t\t\t\"IfcQuantityWeight\",\n\t\t\t\"IfcRailing\",\n\t\t\t\"IfcRailingType\",\n\t\t\t\"IfcRamp\",\n\t\t\t\"IfcRampFlight\",\n\t\t\t\"IfcRampFlightType\",\n\t\t\t\"IfcRampType\",\n\t\t\t\"IfcReinforcingBar\",\n\t\t\t\"IfcReinforcingBarType\",\n\t\t\t\"IfcReinforcingElement\",\n\t\t\t\"IfcReinforcingElementType\",\n\t\t\t\"IfcReinforcingMesh\",\n\t\t\t\"IfcReinforcingMeshType\",\n\t\t\t\"IfcRelAggregates\",\n\t\t\t\"IfcRelAssigns\",\n\t\t\t\"IfcRelAssignsToGroup\",\n\t\t\t\"IfcRelAssociates\",\n\t\t\t\"IfcRelAssociatesClassification\",\n\t\t\t\"IfcRelAssociatesMaterial\",\n\t\t\t\"IfcRelationship\",\n\t\t\t\"IfcRelConnects\",\n\t\t\t\"IfcRelConnectsPorts\",\n\t\t\t\"IfcRelContainedInSpatialStructure\",\n\t\t\t\"IfcRelDeclares\",\n\t\t\t\"IfcRelDecomposes\",\n\t\t\t\"IfcRelDefines\",\n\t\t\t\"IfcRelDefinesByProperties\",\n\t\t\t\"IfcRelDefinesByType\",\n\t\t\t\"IfcRelFillsElement\",\n\t\t\t\"IfcRelNests\",\n\t\t\t\"IfcRelServicesBuildings\",\n\t\t\t\"IfcRelVoidsElement\",\n\t\t\t\"IfcRepresentation\",\n\t\t\t\"IfcRepresentationContext\",\n\t\t\t\"IfcRepresentationItem\",\n\t\t\t\"IfcRepresentationMap\",\n\t\t\t\"IfcRevolvedAreaSolid\",\n\t\t\t\"IfcRoof\",\n\t\t\t\"IfcRoofType\",\n\t\t\t\"IfcRoot\",\n\t\t\t\"IfcSanitaryTerminal\",\n\t\t\t\"IfcSanitaryTerminalType\",\n\t\t\t\"IfcSensor\",\n\t\t\t\"IfcSensorType\",\n\t\t\t\"IfcShadingDevice\",\n\t\t\t\"IfcShadingDeviceType\",\n\t\t\t\"IfcShapeAspect\",\n\t\t\t\"IfcShapeModel\",\n\t\t\t\"IfcShapeRepresentation\",\n\t\t\t\"IfcSimpleProperty\",\n\t\t\t\"IfcSite\",\n\t\t\t\"IfcSIUnit\",\n\t\t\t\"IfcSlab\",\n\t\t\t\"IfcSlabType\",\n\t\t\t\"IfcSolarDevice\",\n\t\t\t\"IfcSolarDeviceType\",\n\t\t\t\"IfcSolidModel\",\n\t\t\t\"IfcSpace\",\n\t\t\t\"IfcSpaceHeater\",\n\t\t\t\"IfcSpaceHeaterType\",\n\t\t\t\"IfcSpaceType\",\n\t\t\t\"IfcSpatialElement\",\n\t\t\t\"IfcSpatialElementType\",\n\t\t\t\"IfcSpatialStructureElement\",\n\t\t\t\"IfcSpatialStructureElementType\",\n\t\t\t\"IfcSpatialZone\",\n\t\t\t\"IfcSpatialZoneType\",\n\t\t\t\"IfcStackTerminal\",\n\t\t\t\"IfcStackTerminalType\",\n\t\t\t\"IfcStair\",\n\t\t\t\"IfcStairFlight\",\n\t\t\t\"IfcStairFlightType\",\n\t\t\t\"IfcStairType\",\n\t\t\t\"IfcStyledItem\",\n\t\t\t\"IfcSurfaceStyle\",\n\t\t\t\"IfcSurfaceStyleRendering\",\n\t\t\t\"IfcSurfaceStyleShading\",\n\t\t\t\"IfcSweptAreaSolid\",\n\t\t\t\"IfcSweptDiskSolid\",\n\t\t\t\"IfcSwitchingDevice\",\n\t\t\t\"IfcSwitchingDeviceType\",\n\t\t\t\"IfcSystem\",\n\t\t\t\"IfcSystemFurnitureElement\",\n\t\t\t\"IfcSystemFurnitureElementType\",\n\t\t\t\"IfcTank\",\n\t\t\t\"IfcTankType\",\n\t\t\t\"IfcTelecomAddress\",\n\t\t\t\"IfcTendon\",\n\t\t\t\"IfcTendonAnchor\",\n\t\t\t\"IfcTendonAnchorType\",\n\t\t\t\"IfcTendonType\",\n\t\t\t\"IfcTessellatedFaceSet\",\n\t\t\t\"IfcTessellatedItem\",\n\t\t\t\"IfcTransformer\",\n\t\t\t\"IfcTransformerType\",\n\t\t\t\"IfcTransportElement\",\n\t\t\t\"IfcTransportElementType\",\n\t\t\t\"IfcTriangulatedFaceSet\",\n\t\t\t\"IfcTubeBundle\",\n\t\t\t\"IfcTubeBundleType\",\n\t\t\t\"IfcTypeObject\",\n\t\t\t\"IfcTypeProduct\",\n\t\t\t\"IfcUnitaryControlElement\",\n\t\t\t\"IfcUnitaryControlElementType\",\n\t\t\t\"IfcUnitaryEquipment\",\n\t\t\t\"IfcUnitaryEquipmentType\",\n\t\t\t\"IfcUnitAssignment\",\n\t\t\t\"IfcValve\",\n\t\t\t\"IfcValveType\",\n\t\t\t\"IfcVector\",\n\t\t\t\"IfcVibrationIsolator\",\n\t\t\t\"IfcVibrationIsolatorType\",\n\t\t\t\"IfcVoidingFeature\",\n\t\t\t\"IfcWall\",\n\t\t\t\"IfcWallType\",\n\t\t\t\"IfcWasteTerminal\",\n\t\t\t\"IfcWasteTerminalType\",\n\t\t\t\"IfcWindow\",\n\t\t\t\"IfcWindowLiningProperties\",\n\t\t\t\"IfcWindowPanelProperties\",\n\t\t\t\"IfcWindowType\",\n\t\t\t\"IfcZone\"\n\t\t],\n\t\t\"PropertySetList\" : [\n\t\t\t\"Pset_ActuatorTypeCommon\",\n\t\t\t\"Pset_ActuatorTypeLinearActuation\",\n\t\t\t\"Pset_ActuatorTypeRotationalActuation\",\n\t\t\t\"Pset_AirTerminalBoxTypeCommon\",\n\t\t\t\"Pset_AirTerminalOccurrence\",\n\t\t\t\"Pset_AirTerminalTypeCommon\",\n\t\t\t\"Pset_AirToAirHeatRecoveryTypeCommon\",\n\t\t\t\"Pset_AlarmTypeCommon\",\n\t\t\t\"Pset_AudioVisualApplianceTypeCommon\",\n\t\t\t\"Pset_BeamCommon\",\n\t\t\t\"Pset_BoilerTypeCommon\",\n\t\t\t\"Pset_BuildingCommon\",\n\t\t\t\"Pset_BuildingElementProxyCommon\",\n\t\t\t\"Pset_BuildingElementProxyProvisionForVoid\",\n\t\t\t\"Pset_BuildingStoreyCommon\",\n\t\t\t\"Pset_BuildingSystemCommon\",\n\t\t\t\"Pset_BuildingUse\",\n\t\t\t\"Pset_BuildingUseAdjacent\",\n\t\t\t\"Pset_BurnerTypeCommon\",\n\t\t\t\"Pset_CableCarrierFittingTypeCommon\",\n\t\t\t\"Pset_CableCarrierSegmentTypeCommon\",\n\t\t\t\"Pset_CableFittingTypeCommon\",\n\t\t\t\"Pset_CableSegmentOccurrence\",\n\t\t\t\"Pset_CableSegmentTypeCommon\",\n\t\t\t\"Pset_ChillerTypeCommon\",\n\t\t\t\"Pset_ChimneyCommon\",\n\t\t\t\"Pset_CivilElementCommon\",\n\t\t\t\"Pset_CoilOccurrence\",\n\t\t\t\"Pset_CoilTypeCommon\",\n\t\t\t\"Pset_CoilTypeHydronic\",\n\t\t\t\"Pset_ColumnCommon\",\n\t\t\t\"Pset_CommunicationsApplianceTypeCommon\",\n\t\t\t\"Pset_CompressorTypeCommon\",\n\t\t\t\"Pset_CondenserTypeCommon\",\n\t\t\t\"Pset_Condition\",\n\t\t\t\"Pset_ControllerTypeCommon\",\n\t\t\t\"Pset_CooledBeamTypeCommon\",\n\t\t\t\"Pset_CoolingTowerTypeCommon\",\n\t\t\t\"Pset_CoveringCommon\",\n\t\t\t\"Pset_CurtainWallCommon\",\n\t\t\t\"Pset_DamperOccurrence\",\n\t\t\t\"Pset_DamperTypeCommon\",\n\t\t\t\"Pset_DistributionChamberElementCommon\",\n\t\t\t\"Pset_DistributionPortCommon\",\n\t\t\t\"Pset_DistributionSystemCommon\",\n\t\t\t\"Pset_DoorCommon\",\n\t\t\t\"Pset_DuctFittingOccurrence\",\n\t\t\t\"Pset_DuctFittingTypeCommon\",\n\t\t\t\"Pset_DuctSegmentOccurrence\",\n\t\t\t\"Pset_DuctSegmentTypeCommon\",\n\t\t\t\"Pset_DuctSilencerTypeCommon\",\n\t\t\t\"Pset_ElectricalDeviceCommon\",\n\t\t\t\"Pset_ElectricApplianceTypeCommon\",\n\t\t\t\"Pset_ElectricDistributionBoardOccurrence\",\n\t\t\t\"Pset_ElectricDistributionBoardTypeCommon\",\n\t\t\t\"Pset_ElectricFlowStorageDeviceTypeCommon\",\n\t\t\t\"Pset_ElectricGeneratorTypeCommon\",\n\t\t\t\"Pset_ElectricMotorTypeCommon\",\n\t\t\t\"Pset_ElectricTimeControlTypeCommon\",\n\t\t\t\"Pset_ElementAssemblyCommon\",\n\t\t\t\"Pset_EngineTypeCommon\",\n\t\t\t\"Pset_EnvironmentalImpactIndicators\",\n\t\t\t\"Pset_EnvironmentalImpactValues\",\n\t\t\t\"Pset_EvaporativeCoolerTypeCommon\",\n\t\t\t\"Pset_EvaporatorTypeCommon\",\n\t\t\t\"Pset_FanOccurrence\",\n\t\t\t\"Pset_FanTypeCommon\",\n\t\t\t\"Pset_FilterTypeCommon\",\n\t\t\t\"Pset_FireSuppressionTerminalTypeCommon\",\n\t\t\t\"Pset_FlowInstrumentTypeCommon\",\n\t\t\t\"Pset_FlowMeterOccurrence\",\n\t\t\t\"Pset_FlowMeterTypeCommon\",\n\t\t\t\"Pset_FootingCommon\",\n\t\t\t\"Pset_FurnitureTypeCommon\",\n\t\t\t\"Pset_HeatExchangerTypeCommon\",\n\t\t\t\"Pset_HumidifierTypeCommon\",\n\t\t\t\"Pset_InterceptorTypeCommon\",\n\t\t\t\"Pset_JunctionBoxTypeCommon\",\n\t\t\t\"Pset_LampTypeCommon\",\n\t\t\t\"Pset_LandRegistration\",\n\t\t\t\"Pset_LightFixtureTypeCommon\",\n\t\t\t\"Pset_ManufacturerOccurrence\",\n\t\t\t\"Pset_ManufacturerTypeInformation\",\n\t\t\t\"Pset_MaterialCombustion\",\n\t\t\t\"Pset_MaterialCommon\",\n\t\t\t\"Pset_MaterialConcrete\",\n\t\t\t\"Pset_MaterialEnergy\",\n\t\t\t\"Pset_MaterialFuel\",\n\t\t\t\"Pset_MaterialHygroscopic\",\n\t\t\t\"Pset_MaterialMechanical\",\n\t\t\t\"Pset_MaterialOptical\",\n\t\t\t\"Pset_MaterialSteel\",\n\t\t\t\"Pset_MaterialThermal\",\n\t\t\t\"Pset_MaterialWater\",\n\t\t\t\"Pset_MaterialWood\",\n\t\t\t\"Pset_MaterialWoodBasedBeam\",\n\t\t\t\"Pset_MaterialWoodBasedPanel\",\n\t\t\t\"Pset_MechanicalFastenerAnchorBolt\",\n\t\t\t\"Pset_MechanicalFastenerBolt\",\n\t\t\t\"Pset_MechanicalFastenerCommon\",\n\t\t\t\"Pset_MedicalDeviceTypeCommon\",\n\t\t\t\"Pset_MemberCommon\",\n\t\t\t\"Pset_MotorConnectionTypeCommon\",\n\t\t\t\"Pset_OpeningElementCommon\",\n\t\t\t\"Pset_OutletTypeCommon\",\n\t\t\t\"Pset_OutsideDesignCriteria\",\n\t\t\t\"Pset_PileCommon\",\n\t\t\t\"Pset_PipeConnectionFlanged\",\n\t\t\t\"Pset_PipeFittingOccurrence\",\n\t\t\t\"Pset_PipeFittingTypeCommon\",\n\t\t\t\"Pset_PipeSegmentOccurrence\",\n\t\t\t\"Pset_PipeSegmentTypeCommon\",\n\t\t\t\"Pset_PlateCommon\",\n\t\t\t\"Pset_PrecastSlab\",\n\t\t\t\"Pset_PropertyAgreement\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitI2TCurve\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitI2TFuseCurve\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitIPICurve\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection\",\n\t\t\t\"Pset_ProtectiveDeviceOccurrence\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionGCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionICurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionLCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionSCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingUnitTypeCommon\",\n\t\t\t\"Pset_ProtectiveDeviceTypeCommon\",\n\t\t\t\"Pset_PumpOccurrence\",\n\t\t\t\"Pset_PumpTypeCommon\",\n\t\t\t\"Pset_RailingCommon\",\n\t\t\t\"Pset_RampCommon\",\n\t\t\t\"Pset_RampFlightCommon\",\n\t\t\t\"Pset_ReinforcementBarCountOfIndependentFooting\",\n\t\t\t\"Pset_ReinforcementBarPitchOfBeam\",\n\t\t\t\"Pset_ReinforcementBarPitchOfColumn\",\n\t\t\t\"Pset_ReinforcementBarPitchOfContinuousFooting\",\n\t\t\t\"Pset_ReinforcementBarPitchOfSlab\",\n\t\t\t\"Pset_ReinforcementBarPitchOfWall\",\n\t\t\t\"Pset_ReinforcingBarCommon\",\n\t\t\t\"Pset_ReinforcingMeshCommon\",\n\t\t\t\"Pset_RoofCommon\",\n\t\t\t\"Pset_SanitaryTerminalTypeCommon\",\n\t\t\t\"Pset_SensorTypeCommon\",\n\t\t\t\"Pset_ServiceLife\",\n\t\t\t\"Pset_ServiceLifeFactors\",\n\t\t\t\"Pset_ShadingDeviceCommon\",\n\t\t\t\"Pset_SiteCommon\",\n\t\t\t\"Pset_SlabCommon\",\n\t\t\t\"Pset_SolarDeviceTypeCommon\",\n\t\t\t\"Pset_SpaceCommon\",\n\t\t\t\"Pset_SpaceCoveringRequirements\",\n\t\t\t\"Pset_SpaceHeaterTypeCommon\",\n\t\t\t\"Pset_SpaceThermalDesign\",\n\t\t\t\"Pset_SpaceThermalLoad\",\n\t\t\t\"Pset_SpatialZoneCommon\",\n\t\t\t\"Pset_StackTerminalTypeCommon\",\n\t\t\t\"Pset_StairCommon\",\n\t\t\t\"Pset_StairFlightCommon\",\n\t\t\t\"Pset_SwitchingDeviceTypeCommon\",\n\t\t\t\"Pset_SystemFurnitureElementTypeCommon\",\n\t\t\t\"Pset_TankOccurrence\",\n\t\t\t\"Pset_TankTypeCommon\",\n\t\t\t\"Pset_TendonAnchorCommon\",\n\t\t\t\"Pset_TendonCommon\",\n\t\t\t\"Pset_ThermalLoadAggregate\",\n\t\t\t\"Pset_ThermalLoadDesignCriteria\",\n\t\t\t\"Pset_TransformerTypeCommon\",\n\t\t\t\"Pset_TransportElementCommon\",\n\t\t\t\"Pset_TubeBundleTypeCommon\",\n\t\t\t\"Pset_UnitaryControlElementTypeCommon\",\n\t\t\t\"Pset_UnitaryEquipmentTypeCommon\",\n\t\t\t\"Pset_ValveTypeCommon\",\n\t\t\t\"Pset_VibrationIsolatorTypeCommon\",\n\t\t\t\"Pset_WallCommon\",\n\t\t\t\"Pset_Warranty\",\n\t\t\t\"Pset_WasteTerminalTypeCommon\",\n\t\t\t\"Pset_WindowCommon\",\n\t\t\t\"Pset_ZoneCommon\",\n\t\t\t\"Qto_ActuatorBaseQuantities\",\n\t\t\t\"Qto_AirTerminalBaseQuantities\",\n\t\t\t\"Qto_AirTerminalBoxTypeBaseQuantities\",\n\t\t\t\"Qto_AirToAirHeatRecoveryBaseQuantities\",\n\t\t\t\"Qto_AlarmBaseQuantities\",\n\t\t\t\"Qto_AudioVisualApplianceBaseQuantities\",\n\t\t\t\"Qto_BeamBaseQuantities\",\n\t\t\t\"Qto_BoilerBaseQuantities\",\n\t\t\t\"Qto_BuildingBaseQuantities\",\n\t\t\t\"Qto_BuildingElementProxyQuantities\",\n\t\t\t\"Qto_BuildingStoreyBaseQuantities\",\n\t\t\t\"Qto_BurnerBaseQuantities\",\n\t\t\t\"Qto_CableCarrierFittingBaseQuantities\",\n\t\t\t\"Qto_CableCarrierSegmentBaseQuantities\",\n\t\t\t\"Qto_CableFittingBaseQuantities\",\n\t\t\t\"Qto_CableSegmentBaseQuantities\",\n\t\t\t\"Qto_ChillerBaseQuantities\",\n\t\t\t\"Qto_ChimneyBaseQuantities\",\n\t\t\t\"Qto_CoilBaseQuantities\",\n\t\t\t\"Qto_ColumnBaseQuantities\",\n\t\t\t\"Qto_CommunicationsApplianceBaseQuantities\",\n\t\t\t\"Qto_CompressorBaseQuantities\",\n\t\t\t\"Qto_CondenserBaseQuantities\",\n\t\t\t\"Qto_ControllerBaseQuantities\",\n\t\t\t\"Qto_CooledBeamBaseQuantities\",\n\t\t\t\"Qto_CoolingTowerBaseQuantities\",\n\t\t\t\"Qto_CoveringBaseQuantities\",\n\t\t\t\"Qto_CurtainWallQuantities\",\n\t\t\t\"Qto_DamperBaseQuantities\",\n\t\t\t\"Qto_DistributionChamberElementBaseQuantities\",\n\t\t\t\"Qto_DoorBaseQuantities\",\n\t\t\t\"Qto_DuctFittingBaseQuantities\",\n\t\t\t\"Qto_DuctSegmentBaseQuantities\",\n\t\t\t\"Qto_DuctSilencerBaseQuantities\",\n\t\t\t\"Qto_ElectricApplianceBaseQuantities\",\n\t\t\t\"Qto_ElectricDistributionBoardBaseQuantities\",\n\t\t\t\"Qto_ElectricFlowStorageDeviceBaseQuantities\",\n\t\t\t\"Qto_ElectricGeneratorBaseQuantities\",\n\t\t\t\"Qto_ElectricMotorBaseQuantities\",\n\t\t\t\"Qto_ElectricTimeControlBaseQuantities\",\n\t\t\t\"Qto_EvaporativeCoolerBaseQuantities\",\n\t\t\t\"Qto_EvaporatorBaseQuantities\",\n\t\t\t\"Qto_FanBaseQuantities\",\n\t\t\t\"Qto_FilterBaseQuantities\",\n\t\t\t\"Qto_FireSuppressionTerminalBaseQuantities\",\n\t\t\t\"Qto_FlowInstrumentBaseQuantities\",\n\t\t\t\"Qto_FlowMeterBaseQuantities\",\n\t\t\t\"Qto_FootingBaseQuantities\",\n\t\t\t\"Qto_HeatExchangerBaseQuantities\",\n\t\t\t\"Qto_HumidifierBaseQuantities\",\n\t\t\t\"Qto_InterceptorBaseQuantities\",\n\t\t\t\"Qto_JunctionBoxBaseQuantities\",\n\t\t\t\"Qto_LampBaseQuantities\",\n\t\t\t\"Qto_LightFixtureBaseQuantities\",\n\t\t\t\"Qto_MemberBaseQuantities\",\n\t\t\t\"Qto_MotorConnectionBaseQuantities\",\n\t\t\t\"Qto_OpeningElementBaseQuantities\",\n\t\t\t\"Qto_OutletBaseQuantities\",\n\t\t\t\"Qto_PileBaseQuantities\",\n\t\t\t\"Qto_PipeFittingBaseQuantities\",\n\t\t\t\"Qto_PipeSegmentBaseQuantities\",\n\t\t\t\"Qto_PlateBaseQuantities\",\n\t\t\t\"Qto_ProtectiveDeviceBaseQuantities\",\n\t\t\t\"Qto_ProtectiveDeviceTrippingUnitBaseQuantities\",\n\t\t\t\"Qto_PumpBaseQuantities\",\n\t\t\t\"Qto_RailingBaseQuantities\",\n\t\t\t\"Qto_RampFlightBaseQuantities\",\n\t\t\t\"Qto_ReinforcingElementBaseQuantities\",\n\t\t\t\"Qto_RoofBaseQuantities\",\n\t\t\t\"Qto_SanitaryTerminalBaseQuantities\",\n\t\t\t\"Qto_SensorBaseQuantities\",\n\t\t\t\"Qto_SiteBaseQuantities\",\n\t\t\t\"Qto_SlabBaseQuantities\",\n\t\t\t\"Qto_SolarDeviceBaseQuantities\",\n\t\t\t\"Qto_SpaceBaseQuantities\",\n\t\t\t\"Qto_SpaceHeaterBaseQuantities\",\n\t\t\t\"Qto_StackTerminalBaseQuantities\",\n\t\t\t\"Qto_StairFlightBaseQuantities\",\n\t\t\t\"Qto_SwitchingDeviceBaseQuantities\",\n\t\t\t\"Qto_TankBaseQuantities\",\n\t\t\t\"Qto_TransformerBaseQuantities\",\n\t\t\t\"Qto_TubeBundleBaseQuantities\",\n\t\t\t\"Qto_UnitaryControlElementBaseQuantities\",\n\t\t\t\"Qto_UnitaryEquipmentBaseQuantities\",\n\t\t\t\"Qto_ValveBaseQuantities\",\n\t\t\t\"Qto_VibrationIsolatorBaseQuantities\",\n\t\t\t\"Qto_WallBaseQuantities\",\n\t\t\t\"Qto_WasteTerminalBaseQuantities\",\n\t\t\t\"Qto_WindowBaseQuantities\"\n\t\t]\n\t},\n\t\"IFC4DTV\" : {\n\t\t\"Version\" : \"V1.0\",\n\t\t\"EntityList\" : [\n\t\t\t\"IfcActorRole\",\n\t\t\t\"IfcActuator\",\n\t\t\t\"IfcActuatorType\",\n\t\t\t\"IfcAddress\",\n\t\t\t\"IfcAdvancedBrep\",\n\t\t\t\"IfcAdvancedFace\",\n\t\t\t\"IfcAirTerminal\",\n\t\t\t\"IfcAirTerminalBox\",\n\t\t\t\"IfcAirTerminalBoxType\",\n\t\t\t\"IfcAirTerminalType\",\n\t\t\t\"IfcAirToAirHeatRecovery\",\n\t\t\t\"IfcAirToAirHeatRecoveryType\",\n\t\t\t\"IfcAlarm\",\n\t\t\t\"IfcAlarmType\",\n\t\t\t\"IfcApplication\",\n\t\t\t\"IfcArbitraryClosedProfileDef\",\n\t\t\t\"IfcArbitraryOpenProfileDef\",\n\t\t\t\"IfcArbitraryProfileDefWithVoids\",\n\t\t\t\"IfcAsymmetricIShapeProfileDef\",\n\t\t\t\"IfcAudioVisualAppliance\",\n\t\t\t\"IfcAudioVisualApplianceType\",\n\t\t\t\"IfcAxis1Placement\",\n\t\t\t\"IfcAxis2Placement2D\",\n\t\t\t\"IfcAxis2Placement3D\",\n\t\t\t\"IfcBeam\",\n\t\t\t\"IfcBeamStandardCase\",\n\t\t\t\"IfcBeamType\",\n\t\t\t\"IfcBlock\",\n\t\t\t\"IfcBoiler\",\n\t\t\t\"IfcBoilerType\",\n\t\t\t\"IfcBooleanClippingResult\",\n\t\t\t\"IfcBooleanResult\",\n\t\t\t\"IfcBoundedCurve\",\n\t\t\t\"IfcBoundedSurface\",\n\t\t\t\"IfcBSplineCurve\",\n\t\t\t\"IfcBSplineCurveWithKnots\",\n\t\t\t\"IfcBSplineSurface\",\n\t\t\t\"IfcBSplineSurfaceWithKnots\",\n\t\t\t\"IfcBuilding\",\n\t\t\t\"IfcBuildingElement\",\n\t\t\t\"IfcBuildingElementPart\",\n\t\t\t\"IfcBuildingElementPartType\",\n\t\t\t\"IfcBuildingElementProxy\",\n\t\t\t\"IfcBuildingElementProxyType\",\n\t\t\t\"IfcBuildingElementType\",\n\t\t\t\"IfcBuildingStorey\",\n\t\t\t\"IfcBuildingSystem\",\n\t\t\t\"IfcBurner\",\n\t\t\t\"IfcBurnerType\",\n\t\t\t\"IfcCableCarrierFitting\",\n\t\t\t\"IfcCableCarrierFittingType\",\n\t\t\t\"IfcCableCarrierSegment\",\n\t\t\t\"IfcCableCarrierSegmentType\",\n\t\t\t\"IfcCableFitting\",\n\t\t\t\"IfcCableFittingType\",\n\t\t\t\"IfcCableSegment\",\n\t\t\t\"IfcCableSegmentType\",\n\t\t\t\"IfcCartesianPoint\",\n\t\t\t\"IfcCartesianPointList\",\n\t\t\t\"IfcCartesianPointList2D\",\n\t\t\t\"IfcCartesianPointList3D\",\n\t\t\t\"IfcCartesianTransformationOperator\",\n\t\t\t\"IfcCartesianTransformationOperator2D\",\n\t\t\t\"IfcCartesianTransformationOperator2DnonUniform\",\n\t\t\t\"IfcCartesianTransformationOperator3D\",\n\t\t\t\"IfcCartesianTransformationOperator3DnonUniform\",\n\t\t\t\"IfcCenterLineProfileDef\",\n\t\t\t\"IfcChiller\",\n\t\t\t\"IfcChillerType\",\n\t\t\t\"IfcChimney\",\n\t\t\t\"IfcChimneyType\",\n\t\t\t\"IfcCircle\",\n\t\t\t\"IfcCircleHollowProfileDef\",\n\t\t\t\"IfcCircleProfileDef\",\n\t\t\t\"IfcCivilElement\",\n\t\t\t\"IfcCivilElementType\",\n\t\t\t\"IfcClassification\",\n\t\t\t\"IfcClassificationReference\",\n\t\t\t\"IfcClosedShell\",\n\t\t\t\"IfcCoil\",\n\t\t\t\"IfcCoilType\",\n\t\t\t\"IfcColourRgb\",\n\t\t\t\"IfcColourRgbList\",\n\t\t\t\"IfcColourSpecification\",\n\t\t\t\"IfcColumn\",\n\t\t\t\"IfcColumnStandardCase\",\n\t\t\t\"IfcColumnType\",\n\t\t\t\"IfcCommunicationsAppliance\",\n\t\t\t\"IfcCommunicationsApplianceType\",\n\t\t\t\"IfcComplexProperty\",\n\t\t\t\"IfcCompositeProfileDef\",\n\t\t\t\"IfcCompressor\",\n\t\t\t\"IfcCompressorType\",\n\t\t\t\"IfcCondenser\",\n\t\t\t\"IfcCondenserType\",\n\t\t\t\"IfcConic\",\n\t\t\t\"IfcConnectedFaceSet\",\n\t\t\t\"IfcConnectionCurveGeometry\",\n\t\t\t\"IfcConnectionGeometry\",\n\t\t\t\"IfcConnectionVolumeGeometry\",\n\t\t\t\"IfcContext\",\n\t\t\t\"IfcController\",\n\t\t\t\"IfcControllerType\",\n\t\t\t\"IfcConversionBasedUnit\",\n\t\t\t\"IfcConversionBasedUnitWithOffset\",\n\t\t\t\"IfcCooledBeam\",\n\t\t\t\"IfcCooledBeamType\",\n\t\t\t\"IfcCoolingTower\",\n\t\t\t\"IfcCoolingTowerType\",\n\t\t\t\"IfcCoordinateOperation\",\n\t\t\t\"IfcCoordinateReferenceSystem\",\n\t\t\t\"IfcCovering\",\n\t\t\t\"IfcCoveringType\",\n\t\t\t\"IfcCsgPrimitive3D\",\n\t\t\t\"IfcCsgSolid\",\n\t\t\t\"IfcCShapeProfileDef\",\n\t\t\t\"IfcCurtainWall\",\n\t\t\t\"IfcCurtainWallType\",\n\t\t\t\"IfcCurve\",\n\t\t\t\"IfcCurveStyle\",\n\t\t\t\"IfcCurveStyleFont\",\n\t\t\t\"IfcCurveStyleFontPattern\",\n\t\t\t\"IfcDamper\",\n\t\t\t\"IfcDamperType\",\n\t\t\t\"IfcDerivedProfileDef\",\n\t\t\t\"IfcDerivedUnit\",\n\t\t\t\"IfcDerivedUnitElement\",\n\t\t\t\"IfcDimensionalExponents\",\n\t\t\t\"IfcDirection\",\n\t\t\t\"IfcDiscreteAccessory\",\n\t\t\t\"IfcDiscreteAccessoryType\",\n\t\t\t\"IfcDistributionChamberElement\",\n\t\t\t\"IfcDistributionChamberElementType\",\n\t\t\t\"IfcDistributionCircuit\",\n\t\t\t\"IfcDistributionControlElement\",\n\t\t\t\"IfcDistributionControlElementType\",\n\t\t\t\"IfcDistributionElement\",\n\t\t\t\"IfcDistributionElementType\",\n\t\t\t\"IfcDistributionFlowElement\",\n\t\t\t\"IfcDistributionFlowElementType\",\n\t\t\t\"IfcDistributionPort\",\n\t\t\t\"IfcDistributionSystem\",\n\t\t\t\"IfcDocumentReference\",\n\t\t\t\"IfcDoor\",\n\t\t\t\"IfcDoorLiningProperties\",\n\t\t\t\"IfcDoorPanelProperties\",\n\t\t\t\"IfcDoorStandardCase\",\n\t\t\t\"IfcDoorType\",\n\t\t\t\"IfcDuctFitting\",\n\t\t\t\"IfcDuctFittingType\",\n\t\t\t\"IfcDuctSegment\",\n\t\t\t\"IfcDuctSegmentType\",\n\t\t\t\"IfcDuctSilencer\",\n\t\t\t\"IfcDuctSilencerType\",\n\t\t\t\"IfcEdge\",\n\t\t\t\"IfcEdgeCurve\",\n\t\t\t\"IfcEdgeLoop\",\n\t\t\t\"IfcElectricAppliance\",\n\t\t\t\"IfcElectricApplianceType\",\n\t\t\t\"IfcElectricDistributionBoard\",\n\t\t\t\"IfcElectricDistributionBoardType\",\n\t\t\t\"IfcElectricFlowStorageDevice\",\n\t\t\t\"IfcElectricFlowStorageDeviceType\",\n\t\t\t\"IfcElectricGenerator\",\n\t\t\t\"IfcElectricGeneratorType\",\n\t\t\t\"IfcElectricMotor\",\n\t\t\t\"IfcElectricMotorType\",\n\t\t\t\"IfcElectricTimeControl\",\n\t\t\t\"IfcElectricTimeControlType\",\n\t\t\t\"IfcElement\",\n\t\t\t\"IfcElementarySurface\",\n\t\t\t\"IfcElementAssembly\",\n\t\t\t\"IfcElementAssemblyType\",\n\t\t\t\"IfcElementComponent\",\n\t\t\t\"IfcElementComponentType\",\n\t\t\t\"IfcElementQuantity\",\n\t\t\t\"IfcElementType\",\n\t\t\t\"IfcEllipseProfileDef\",\n\t\t\t\"IfcEnergyConversionDevice\",\n\t\t\t\"IfcEnergyConversionDeviceType\",\n\t\t\t\"IfcEngine\",\n\t\t\t\"IfcEngineType\",\n\t\t\t\"IfcEvaporativeCooler\",\n\t\t\t\"IfcEvaporativeCoolerType\",\n\t\t\t\"IfcEvaporator\",\n\t\t\t\"IfcEvaporatorType\",\n\t\t\t\"IfcExtendedProperties\",\n\t\t\t\"IfcExternalInformation\",\n\t\t\t\"IfcExternalReference\",\n\t\t\t\"IfcExtrudedAreaSolid\",\n\t\t\t\"IfcExtrudedAreaSolidTapered\",\n\t\t\t\"IfcFace\",\n\t\t\t\"IfcFaceBasedSurfaceModel\",\n\t\t\t\"IfcFaceBound\",\n\t\t\t\"IfcFaceOuterBound\",\n\t\t\t\"IfcFaceSurface\",\n\t\t\t\"IfcFacetedBrep\",\n\t\t\t\"IfcFan\",\n\t\t\t\"IfcFanType\",\n\t\t\t\"IfcFastener\",\n\t\t\t\"IfcFastenerType\",\n\t\t\t\"IfcFeatureElement\",\n\t\t\t\"IfcFeatureElementAddition\",\n\t\t\t\"IfcFeatureElementSubtraction\",\n\t\t\t\"IfcFillAreaStyle\",\n\t\t\t\"IfcFillAreaStyleHatching\",\n\t\t\t\"IfcFilter\",\n\t\t\t\"IfcFilterType\",\n\t\t\t\"IfcFireSuppressionTerminal\",\n\t\t\t\"IfcFireSuppressionTerminalType\",\n\t\t\t\"IfcFixedReferenceSweptAreaSolid\",\n\t\t\t\"IfcFlowController\",\n\t\t\t\"IfcFlowControllerType\",\n\t\t\t\"IfcFlowFitting\",\n\t\t\t\"IfcFlowFittingType\",\n\t\t\t\"IfcFlowInstrument\",\n\t\t\t\"IfcFlowInstrumentType\",\n\t\t\t\"IfcFlowMeter\",\n\t\t\t\"IfcFlowMeterType\",\n\t\t\t\"IfcFlowMovingDevice\",\n\t\t\t\"IfcFlowMovingDeviceType\",\n\t\t\t\"IfcFlowSegment\",\n\t\t\t\"IfcFlowSegmentType\",\n\t\t\t\"IfcFlowStorageDevice\",\n\t\t\t\"IfcFlowStorageDeviceType\",\n\t\t\t\"IfcFlowTerminal\",\n\t\t\t\"IfcFlowTerminalType\",\n\t\t\t\"IfcFlowTreatmentDevice\",\n\t\t\t\"IfcFlowTreatmentDeviceType\",\n\t\t\t\"IfcFooting\",\n\t\t\t\"IfcFootingType\",\n\t\t\t\"IfcFurnishingElement\",\n\t\t\t\"IfcFurnishingElementType\",\n\t\t\t\"IfcFurniture\",\n\t\t\t\"IfcFurnitureType\",\n\t\t\t\"IfcGeographicElement\",\n\t\t\t\"IfcGeographicElementType\",\n\t\t\t\"IfcGeometricCurveSet\",\n\t\t\t\"IfcGeometricRepresentationContext\",\n\t\t\t\"IfcGeometricRepresentationItem\",\n\t\t\t\"IfcGeometricRepresentationSubContext\",\n\t\t\t\"IfcGeometricSet\",\n\t\t\t\"IfcGrid\",\n\t\t\t\"IfcGridAxis\",\n\t\t\t\"IfcGridPlacement\",\n\t\t\t\"IfcGroup\",\n\t\t\t\"IfcHalfSpaceSolid\",\n\t\t\t\"IfcHeatExchanger\",\n\t\t\t\"IfcHeatExchangerType\",\n\t\t\t\"IfcHumidifier\",\n\t\t\t\"IfcHumidifierType\",\n\t\t\t\"IfcImageTexture\",\n\t\t\t\"IfcIndexedColourMap\",\n\t\t\t\"IfcIndexedPolyCurve\",\n\t\t\t\"IfcIndexedTextureMap\",\n\t\t\t\"IfcIndexedTriangleTextureMap\",\n\t\t\t\"IfcInterceptor\",\n\t\t\t\"IfcInterceptorType\",\n\t\t\t\"IfcIShapeProfileDef\",\n\t\t\t\"IfcJunctionBox\",\n\t\t\t\"IfcJunctionBoxType\",\n\t\t\t\"IfcLamp\",\n\t\t\t\"IfcLampType\",\n\t\t\t\"IfcLibraryInformation\",\n\t\t\t\"IfcLibraryReference\",\n\t\t\t\"IfcLightFixture\",\n\t\t\t\"IfcLightFixtureType\",\n\t\t\t\"IfcLine\",\n\t\t\t\"IfcLocalPlacement\",\n\t\t\t\"IfcLoop\",\n\t\t\t\"IfcLShapeProfileDef\",\n\t\t\t\"IfcManifoldSolidBrep\",\n\t\t\t\"IfcMapConversion\",\n\t\t\t\"IfcMappedItem\",\n\t\t\t\"IfcMaterial\",\n\t\t\t\"IfcMaterialConstituent\",\n\t\t\t\"IfcMaterialConstituentSet\",\n\t\t\t\"IfcMaterialDefinition\",\n\t\t\t\"IfcMaterialDefinitionRepresentation\",\n\t\t\t\"IfcMaterialLayer\",\n\t\t\t\"IfcMaterialLayerSet\",\n\t\t\t\"IfcMaterialLayerSetUsage\",\n\t\t\t\"IfcMaterialLayerWithOffsets\",\n\t\t\t\"IfcMaterialProfile\",\n\t\t\t\"IfcMaterialProfileSet\",\n\t\t\t\"IfcMaterialProfileSetUsage\",\n\t\t\t\"IfcMaterialProfileSetUsageTapering\",\n\t\t\t\"IfcMaterialProfileWithOffsets\",\n\t\t\t\"IfcMaterialProperties\",\n\t\t\t\"IfcMaterialUsageDefinition\",\n\t\t\t\"IfcMeasureWithUnit\",\n\t\t\t\"IfcMechanicalFastener\",\n\t\t\t\"IfcMechanicalFastenerType\",\n\t\t\t\"IfcMedicalDevice\",\n\t\t\t\"IfcMedicalDeviceType\",\n\t\t\t\"IfcMember\",\n\t\t\t\"IfcMemberStandardCase\",\n\t\t\t\"IfcMemberType\",\n\t\t\t\"IfcMonetaryUnit\",\n\t\t\t\"IfcMotorConnection\",\n\t\t\t\"IfcMotorConnectionType\",\n\t\t\t\"IfcNamedUnit\",\n\t\t\t\"IfcObject\",\n\t\t\t\"IfcObjectDefinition\",\n\t\t\t\"IfcObjectPlacement\",\n\t\t\t\"IfcOpeningElement\",\n\t\t\t\"IfcOpeningStandardCase\",\n\t\t\t\"IfcOpenShell\",\n\t\t\t\"IfcOrganization\",\n\t\t\t\"IfcOrientedEdge\",\n\t\t\t\"IfcOutlet\",\n\t\t\t\"IfcOutletType\",\n\t\t\t\"IfcOwnerHistory\",\n\t\t\t\"IfcParameterizedProfileDef\",\n\t\t\t\"IfcPcurve\",\n\t\t\t\"IfcPerson\",\n\t\t\t\"IfcPersonAndOrganization\",\n\t\t\t\"IfcPhysicalComplexQuantity\",\n\t\t\t\"IfcPhysicalQuantity\",\n\t\t\t\"IfcPhysicalSimpleQuantity\",\n\t\t\t\"IfcPile\",\n\t\t\t\"IfcPileType\",\n\t\t\t\"IfcPipeFitting\",\n\t\t\t\"IfcPipeFittingType\",\n\t\t\t\"IfcPipeSegment\",\n\t\t\t\"IfcPipeSegmentType\",\n\t\t\t\"IfcPlacement\",\n\t\t\t\"IfcPlane\",\n\t\t\t\"IfcPlate\",\n\t\t\t\"IfcPlateStandardCase\",\n\t\t\t\"IfcPlateType\",\n\t\t\t\"IfcPoint\",\n\t\t\t\"IfcPolygonalBoundedHalfSpace\",\n\t\t\t\"IfcPolyline\",\n\t\t\t\"IfcPolyLoop\",\n\t\t\t\"IfcPort\",\n\t\t\t\"IfcPostalAddress\",\n\t\t\t\"IfcPreDefinedPropertySet\",\n\t\t\t\"IfcPresentationItem\",\n\t\t\t\"IfcPresentationLayerAssignment\",\n\t\t\t\"IfcPresentationStyle\",\n\t\t\t\"IfcPresentationStyleAssignment\",\n\t\t\t\"IfcProduct\",\n\t\t\t\"IfcProductDefinitionShape\",\n\t\t\t\"IfcProductRepresentation\",\n\t\t\t\"IfcProfileDef\",\n\t\t\t\"IfcProfileProperties\",\n\t\t\t\"IfcProject\",\n\t\t\t\"IfcProjectedCRS\",\n\t\t\t\"IfcProjectionElement\",\n\t\t\t\"IfcProjectLibrary\",\n\t\t\t\"IfcProperty\",\n\t\t\t\"IfcPropertyAbstraction\",\n\t\t\t\"IfcPropertyBoundedValue\",\n\t\t\t\"IfcPropertyDefinition\",\n\t\t\t\"IfcPropertyEnumeratedValue\",\n\t\t\t\"IfcPropertyEnumeration\",\n\t\t\t\"IfcPropertyListValue\",\n\t\t\t\"IfcPropertySet\",\n\t\t\t\"IfcPropertySetDefinition\",\n\t\t\t\"IfcPropertySetTemplate\",\n\t\t\t\"IfcPropertySingleValue\",\n\t\t\t\"IfcPropertyTableValue\",\n\t\t\t\"IfcPropertyTemplate\",\n\t\t\t\"IfcPropertyTemplateDefinition\",\n\t\t\t\"IfcProtectiveDevice\",\n\t\t\t\"IfcProtectiveDeviceTrippingUnit\",\n\t\t\t\"IfcProtectiveDeviceTrippingUnitType\",\n\t\t\t\"IfcProtectiveDeviceType\",\n\t\t\t\"IfcPump\",\n\t\t\t\"IfcPumpType\",\n\t\t\t\"IfcQuantityArea\",\n\t\t\t\"IfcQuantityCount\",\n\t\t\t\"IfcQuantityLength\",\n\t\t\t\"IfcQuantitySet\",\n\t\t\t\"IfcQuantityTime\",\n\t\t\t\"IfcQuantityVolume\",\n\t\t\t\"IfcQuantityWeight\",\n\t\t\t\"IfcRailing\",\n\t\t\t\"IfcRailingType\",\n\t\t\t\"IfcRamp\",\n\t\t\t\"IfcRampFlight\",\n\t\t\t\"IfcRampFlightType\",\n\t\t\t\"IfcRampType\",\n\t\t\t\"IfcRectangleHollowProfileDef\",\n\t\t\t\"IfcRectangleProfileDef\",\n\t\t\t\"IfcRectangularPyramid\",\n\t\t\t\"IfcReinforcingBar\",\n\t\t\t\"IfcReinforcingBarType\",\n\t\t\t\"IfcReinforcingElement\",\n\t\t\t\"IfcReinforcingElementType\",\n\t\t\t\"IfcReinforcingMesh\",\n\t\t\t\"IfcReinforcingMeshType\",\n\t\t\t\"IfcRelAggregates\",\n\t\t\t\"IfcRelAssigns\",\n\t\t\t\"IfcRelAssignsToGroup\",\n\t\t\t\"IfcRelAssociates\",\n\t\t\t\"IfcRelAssociatesClassification\",\n\t\t\t\"IfcRelAssociatesDocument\",\n\t\t\t\"IfcRelAssociatesLibrary\",\n\t\t\t\"IfcRelAssociatesMaterial\",\n\t\t\t\"IfcRelationship\",\n\t\t\t\"IfcRelConnects\",\n\t\t\t\"IfcRelConnectsElements\",\n\t\t\t\"IfcRelConnectsPathElements\",\n\t\t\t\"IfcRelConnectsPorts\",\n\t\t\t\"IfcRelConnectsWithRealizingElements\",\n\t\t\t\"IfcRelContainedInSpatialStructure\",\n\t\t\t\"IfcRelCoversBldgElements\",\n\t\t\t\"IfcRelDeclares\",\n\t\t\t\"IfcRelDecomposes\",\n\t\t\t\"IfcRelDefines\",\n\t\t\t\"IfcRelDefinesByProperties\",\n\t\t\t\"IfcRelDefinesByType\",\n\t\t\t\"IfcRelFillsElement\",\n\t\t\t\"IfcRelFlowControlElements\",\n\t\t\t\"IfcRelInterferesElements\",\n\t\t\t\"IfcRelNests\",\n\t\t\t\"IfcRelProjectsElement\",\n\t\t\t\"IfcRelServicesBuildings\",\n\t\t\t\"IfcRelVoidsElement\",\n\t\t\t\"IfcRepresentation\",\n\t\t\t\"IfcRepresentationContext\",\n\t\t\t\"IfcRepresentationItem\",\n\t\t\t\"IfcRepresentationMap\",\n\t\t\t\"IfcRevolvedAreaSolid\",\n\t\t\t\"IfcRevolvedAreaSolidTapered\",\n\t\t\t\"IfcRightCircularCone\",\n\t\t\t\"IfcRightCircularCylinder\",\n\t\t\t\"IfcRoof\",\n\t\t\t\"IfcRoofType\",\n\t\t\t\"IfcRoot\",\n\t\t\t\"IfcRoundedRectangleProfileDef\",\n\t\t\t\"IfcSanitaryTerminal\",\n\t\t\t\"IfcSanitaryTerminalType\",\n\t\t\t\"IfcSensor\",\n\t\t\t\"IfcSensorType\",\n\t\t\t\"IfcShadingDevice\",\n\t\t\t\"IfcShadingDeviceType\",\n\t\t\t\"IfcShapeModel\",\n\t\t\t\"IfcShapeRepresentation\",\n\t\t\t\"IfcShellBasedSurfaceModel\",\n\t\t\t\"IfcSimpleProperty\",\n\t\t\t\"IfcSimplePropertyTemplate\",\n\t\t\t\"IfcSite\",\n\t\t\t\"IfcSIUnit\",\n\t\t\t\"IfcSlab\",\n\t\t\t\"IfcSlabElementedCase\",\n\t\t\t\"IfcSlabStandardCase\",\n\t\t\t\"IfcSlabType\",\n\t\t\t\"IfcSolarDevice\",\n\t\t\t\"IfcSolarDeviceType\",\n\t\t\t\"IfcSolidModel\",\n\t\t\t\"IfcSpace\",\n\t\t\t\"IfcSpaceHeater\",\n\t\t\t\"IfcSpaceHeaterType\",\n\t\t\t\"IfcSpaceType\",\n\t\t\t\"IfcSpatialElement\",\n\t\t\t\"IfcSpatialElementType\",\n\t\t\t\"IfcSpatialStructureElement\",\n\t\t\t\"IfcSpatialStructureElementType\",\n\t\t\t\"IfcSpatialZone\",\n\t\t\t\"IfcSpatialZoneType\",\n\t\t\t\"IfcSphere\",\n\t\t\t\"IfcStackTerminal\",\n\t\t\t\"IfcStackTerminalType\",\n\t\t\t\"IfcStair\",\n\t\t\t\"IfcStairFlight\",\n\t\t\t\"IfcStairFlightType\",\n\t\t\t\"IfcStairType\",\n\t\t\t\"IfcStyledItem\",\n\t\t\t\"IfcStyledRepresentation\",\n\t\t\t\"IfcStyleModel\",\n\t\t\t\"IfcSurface\",\n\t\t\t\"IfcSurfaceCurveSweptAreaSolid\",\n\t\t\t\"IfcSurfaceOfLinearExtrusion\",\n\t\t\t\"IfcSurfaceOfRevolution\",\n\t\t\t\"IfcSurfaceStyle\",\n\t\t\t\"IfcSurfaceStyleRendering\",\n\t\t\t\"IfcSurfaceStyleShading\",\n\t\t\t\"IfcSurfaceStyleWithTextures\",\n\t\t\t\"IfcSurfaceTexture\",\n\t\t\t\"IfcSweptAreaSolid\",\n\t\t\t\"IfcSweptDiskSolid\",\n\t\t\t\"IfcSweptSurface\",\n\t\t\t\"IfcSwitchingDevice\",\n\t\t\t\"IfcSwitchingDeviceType\",\n\t\t\t\"IfcSystem\",\n\t\t\t\"IfcSystemFurnitureElement\",\n\t\t\t\"IfcSystemFurnitureElementType\",\n\t\t\t\"IfcTank\",\n\t\t\t\"IfcTankType\",\n\t\t\t\"IfcTelecomAddress\",\n\t\t\t\"IfcTendon\",\n\t\t\t\"IfcTendonAnchor\",\n\t\t\t\"IfcTendonAnchorType\",\n\t\t\t\"IfcTendonType\",\n\t\t\t\"IfcTessellatedFaceSet\",\n\t\t\t\"IfcTessellatedItem\",\n\t\t\t\"IfcTextureCoordinate\",\n\t\t\t\"IfcTextureVertexList\",\n\t\t\t\"IfcTopologicalRepresentationItem\",\n\t\t\t\"IfcTransformer\",\n\t\t\t\"IfcTransformerType\",\n\t\t\t\"IfcTransportElement\",\n\t\t\t\"IfcTransportElementType\",\n\t\t\t\"IfcTriangulatedFaceSet\",\n\t\t\t\"IfcTrimmedCurve\",\n\t\t\t\"IfcTShapeProfileDef\",\n\t\t\t\"IfcTubeBundle\",\n\t\t\t\"IfcTubeBundleType\",\n\t\t\t\"IfcTypeObject\",\n\t\t\t\"IfcTypeProduct\",\n\t\t\t\"IfcUnitaryControlElement\",\n\t\t\t\"IfcUnitaryControlElementType\",\n\t\t\t\"IfcUnitaryEquipment\",\n\t\t\t\"IfcUnitaryEquipmentType\",\n\t\t\t\"IfcUnitAssignment\",\n\t\t\t\"IfcUShapeProfileDef\",\n\t\t\t\"IfcValve\",\n\t\t\t\"IfcValveType\",\n\t\t\t\"IfcVector\",\n\t\t\t\"IfcVertex\",\n\t\t\t\"IfcVertexPoint\",\n\t\t\t\"IfcVibrationIsolator\",\n\t\t\t\"IfcVibrationIsolatorType\",\n\t\t\t\"IfcVirtualGridIntersection\",\n\t\t\t\"IfcWall\",\n\t\t\t\"IfcWallElementedCase\",\n\t\t\t\"IfcWallStandardCase\",\n\t\t\t\"IfcWallType\",\n\t\t\t\"IfcWasteTerminal\",\n\t\t\t\"IfcWasteTerminalType\",\n\t\t\t\"IfcWindow\",\n\t\t\t\"IfcWindowLiningProperties\",\n\t\t\t\"IfcWindowPanelProperties\",\n\t\t\t\"IfcWindowStandardCase\",\n\t\t\t\"IfcWindowType\",\n\t\t\t\"IfcZone\",\n\t\t\t\"IfcZShapeProfileDef\"\n\t\t],\n\t\t\"PropertySetList\" : [\n\t\t\t\"Pset_ActuatorTypeCommon\",\n\t\t\t\"Pset_ActuatorTypeLinearActuation\",\n\t\t\t\"Pset_ActuatorTypeRotationalActuation\",\n\t\t\t\"Pset_AirTerminalBoxTypeCommon\",\n\t\t\t\"Pset_AirTerminalOccurrence\",\n\t\t\t\"Pset_AirTerminalTypeCommon\",\n\t\t\t\"Pset_AirToAirHeatRecoveryTypeCommon\",\n\t\t\t\"Pset_AlarmTypeCommon\",\n\t\t\t\"Pset_AudioVisualApplianceTypeCommon\",\n\t\t\t\"Pset_BeamCommon\",\n\t\t\t\"Pset_BoilerTypeCommon\",\n\t\t\t\"Pset_BuildingCommon\",\n\t\t\t\"Pset_BuildingElementProxyCommon\",\n\t\t\t\"Pset_BuildingElementProxyProvisionForVoid\",\n\t\t\t\"Pset_BuildingStoreyCommon\",\n\t\t\t\"Pset_BuildingSystemCommon\",\n\t\t\t\"Pset_BuildingUse\",\n\t\t\t\"Pset_BuildingUseAdjacent\",\n\t\t\t\"Pset_BurnerTypeCommon\",\n\t\t\t\"Pset_CableCarrierFittingTypeCommon\",\n\t\t\t\"Pset_CableCarrierSegmentTypeCommon\",\n\t\t\t\"Pset_CableFittingTypeCommon\",\n\t\t\t\"Pset_CableSegmentOccurrence\",\n\t\t\t\"Pset_CableSegmentTypeCommon\",\n\t\t\t\"Pset_ChillerTypeCommon\",\n\t\t\t\"Pset_ChimneyCommon\",\n\t\t\t\"Pset_CoilOccurrence\",\n\t\t\t\"Pset_CoilTypeCommon\",\n\t\t\t\"Pset_CoilTypeHydronic\",\n\t\t\t\"Pset_ColumnCommon\",\n\t\t\t\"Pset_CommunicationsApplianceTypeCommon\",\n\t\t\t\"Pset_CompressorTypeCommon\",\n\t\t\t\"Pset_CondenserTypeCommon\",\n\t\t\t\"Pset_ControllerTypeCommon\",\n\t\t\t\"Pset_CooledBeamTypeCommon\",\n\t\t\t\"Pset_CoolingTowerTypeCommon\",\n\t\t\t\"Pset_CoveringCommon\",\n\t\t\t\"Pset_CurtainWallCommon\",\n\t\t\t\"Pset_DamperOccurrence\",\n\t\t\t\"Pset_DamperTypeCommon\",\n\t\t\t\"Pset_DistributionChamberElementCommon\",\n\t\t\t\"Pset_DistributionPortCommon\",\n\t\t\t\"Pset_DistributionSystemCommon\",\n\t\t\t\"Pset_DoorCommon\",\n\t\t\t\"Pset_DuctFittingOccurrence\",\n\t\t\t\"Pset_DuctFittingTypeCommon\",\n\t\t\t\"Pset_DuctSegmentOccurrence\",\n\t\t\t\"Pset_DuctSegmentTypeCommon\",\n\t\t\t\"Pset_DuctSilencerTypeCommon\",\n\t\t\t\"Pset_ElectricalDeviceCommon\",\n\t\t\t\"Pset_ElectricApplianceTypeCommon\",\n\t\t\t\"Pset_ElectricDistributionBoardOccurrence\",\n\t\t\t\"Pset_ElectricDistributionBoardTypeCommon\",\n\t\t\t\"Pset_ElectricFlowStorageDeviceTypeCommon\",\n\t\t\t\"Pset_ElectricGeneratorTypeCommon\",\n\t\t\t\"Pset_ElectricMotorTypeCommon\",\n\t\t\t\"Pset_ElectricTimeControlTypeCommon\",\n\t\t\t\"Pset_EngineTypeCommon\",\n\t\t\t\"Pset_EnvironmentalImpactIndicators\",\n\t\t\t\"Pset_EnvironmentalImpactValues\",\n\t\t\t\"Pset_EvaporativeCoolerTypeCommon\",\n\t\t\t\"Pset_EvaporatorTypeCommon\",\n\t\t\t\"Pset_FanOccurrence\",\n\t\t\t\"Pset_FanTypeCommon\",\n\t\t\t\"Pset_FilterTypeCommon\",\n\t\t\t\"Pset_FireSuppressionTerminalTypeCommon\",\n\t\t\t\"Pset_FlowInstrumentTypeCommon\",\n\t\t\t\"Pset_FlowMeterOccurrence\",\n\t\t\t\"Pset_FlowMeterTypeCommon\",\n\t\t\t\"Pset_FootingCommon\",\n\t\t\t\"Pset_FurnitureTypeCommon\",\n\t\t\t\"Pset_HeatExchangerTypeCommon\",\n\t\t\t\"Pset_HumidifierTypeCommon\",\n\t\t\t\"Pset_InterceptorTypeCommon\",\n\t\t\t\"Pset_JunctionBoxTypeCommon\",\n\t\t\t\"Pset_LampTypeCommon\",\n\t\t\t\"Pset_LandRegistration\",\n\t\t\t\"Pset_LightFixtureTypeCommon\",\n\t\t\t\"Pset_ManufacturerOccurrence\",\n\t\t\t\"Pset_ManufacturerTypeInformation\",\n\t\t\t\"Pset_MedicalDeviceTypeCommon\",\n\t\t\t\"Pset_MemberCommon\",\n\t\t\t\"Pset_MotorConnectionTypeCommon\",\n\t\t\t\"Pset_OpeningElementCommon\",\n\t\t\t\"Pset_OutletTypeCommon\",\n\t\t\t\"Pset_OutsideDesignCriteria\",\n\t\t\t\"Pset_PileCommon\",\n\t\t\t\"Pset_PipeConnectionFlanged\",\n\t\t\t\"Pset_PipeFittingOccurrence\",\n\t\t\t\"Pset_PipeFittingTypeCommon\",\n\t\t\t\"Pset_PipeSegmentOccurrence\",\n\t\t\t\"Pset_PipeSegmentTypeCommon\",\n\t\t\t\"Pset_PlateCommon\",\n\t\t\t\"Pset_PrecastSlab\",\n\t\t\t\"Pset_PropertyAgreement\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitI2TCurve\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitI2TFuseCurve\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitIPICurve\",\n\t\t\t\"Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection\",\n\t\t\t\"Pset_ProtectiveDeviceOccurrence\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionGCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionICurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionLCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingFunctionSCurve\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingUnitTimeAdjustment\",\n\t\t\t\"Pset_ProtectiveDeviceTrippingUnitTypeCommon\",\n\t\t\t\"Pset_ProtectiveDeviceTypeCommon\",\n\t\t\t\"Pset_PumpOccurrence\",\n\t\t\t\"Pset_PumpTypeCommon\",\n\t\t\t\"Pset_RailingCommon\",\n\t\t\t\"Pset_RampCommon\",\n\t\t\t\"Pset_RampFlightCommon\",\n\t\t\t\"Pset_ReinforcementBarCountOfIndependentFooting\",\n\t\t\t\"Pset_ReinforcementBarPitchOfBeam\",\n\t\t\t\"Pset_ReinforcementBarPitchOfColumn\",\n\t\t\t\"Pset_ReinforcementBarPitchOfContinuousFooting\",\n\t\t\t\"Pset_ReinforcementBarPitchOfSlab\",\n\t\t\t\"Pset_ReinforcementBarPitchOfWall\",\n\t\t\t\"Pset_RoofCommon\",\n\t\t\t\"Pset_SanitaryTerminalTypeCommon\",\n\t\t\t\"Pset_SensorTypeCommon\",\n\t\t\t\"Pset_ServiceLife\",\n\t\t\t\"Pset_ShadingDeviceCommon\",\n\t\t\t\"Pset_SiteCommon\",\n\t\t\t\"Pset_SlabCommon\",\n\t\t\t\"Pset_SolarDeviceTypeCommon\",\n\t\t\t\"Pset_SpaceCommon\",\n\t\t\t\"Pset_SpaceCoveringRequirements\",\n\t\t\t\"Pset_SpaceHeaterTypeCommon\",\n\t\t\t\"Pset_SpaceThermalDesign\",\n\t\t\t\"Pset_SpaceThermalLoad\",\n\t\t\t\"Pset_StackTerminalTypeCommon\",\n\t\t\t\"Pset_StairCommon\",\n\t\t\t\"Pset_StairFlightCommon\",\n\t\t\t\"Pset_SwitchingDeviceTypeCommon\",\n\t\t\t\"Pset_SystemFurnitureElementTypeCommon\",\n\t\t\t\"Pset_TankOccurrence\",\n\t\t\t\"Pset_TankTypeCommon\",\n\t\t\t\"Pset_ThermalLoadAggregate\",\n\t\t\t\"Pset_ThermalLoadDesignCriteria\",\n\t\t\t\"Pset_TransformerTypeCommon\",\n\t\t\t\"Pset_TransportElementCommon\",\n\t\t\t\"Pset_TubeBundleTypeCommon\",\n\t\t\t\"Pset_UnitaryControlElementTypeCommon\",\n\t\t\t\"Pset_UnitaryEquipmentTypeCommon\",\n\t\t\t\"Pset_ValveTypeCommon\",\n\t\t\t\"Pset_VibrationIsolatorTypeCommon\",\n\t\t\t\"Pset_WallCommon\",\n\t\t\t\"Pset_Warranty\",\n\t\t\t\"Pset_WasteTerminalTypeCommon\",\n\t\t\t\"Pset_WindowCommon\",\n\t\t\t\"Pset_ZoneCommon\",\n\t\t\t\"Qto_ActuatorBaseQuantities\",\n\t\t\t\"Qto_AirTerminalBaseQuantities\",\n\t\t\t\"Qto_AirTerminalBoxTypeBaseQuantities\",\n\t\t\t\"Qto_AirToAirHeatRecoveryBaseQuantities\",\n\t\t\t\"Qto_AlarmBaseQuantities\",\n\t\t\t\"Qto_AudioVisualApplianceBaseQuantities\",\n\t\t\t\"Qto_BeamBaseQuantities\",\n\t\t\t\"Qto_BoilerBaseQuantities\",\n\t\t\t\"Qto_BuildingBaseQuantities\",\n\t\t\t\"Qto_BuildingElementProxyQuantities\",\n\t\t\t\"Qto_BuildingStoreyBaseQuantities\",\n\t\t\t\"Qto_BurnerBaseQuantities\",\n\t\t\t\"Qto_CableCarrierFittingBaseQuantities\",\n\t\t\t\"Qto_CableCarrierSegmentBaseQuantities\",\n\t\t\t\"Qto_CableFittingBaseQuantities\",\n\t\t\t\"Qto_CableSegmentBaseQuantities\",\n\t\t\t\"Qto_ChillerBaseQuantities\",\n\t\t\t\"Qto_ChimneyBaseQuantities\",\n\t\t\t\"Qto_CoilBaseQuantities\",\n\t\t\t\"Qto_ColumnBaseQuantities\",\n\t\t\t\"Qto_CommunicationsApplianceBaseQuantities\",\n\t\t\t\"Qto_CompressorBaseQuantities\",\n\t\t\t\"Qto_CondenserBaseQuantities\",\n\t\t\t\"Qto_ConstructionEquipmentResourceBaseQuantities\",\n\t\t\t\"Qto_ConstructionMaterialResourceBaseQuantities\",\n\t\t\t\"Qto_ControllerBaseQuantities\",\n\t\t\t\"Qto_CooledBeamBaseQuantities\",\n\t\t\t\"Qto_CoolingTowerBaseQuantities\",\n\t\t\t\"Qto_CoveringBaseQuantities\",\n\t\t\t\"Qto_CurtainWallQuantities\",\n\t\t\t\"Qto_DamperBaseQuantities\",\n\t\t\t\"Qto_DistributionChamberElementBaseQuantities\",\n\t\t\t\"Qto_DoorBaseQuantities\",\n\t\t\t\"Qto_DuctFittingBaseQuantities\",\n\t\t\t\"Qto_DuctSegmentBaseQuantities\",\n\t\t\t\"Qto_DuctSilencerBaseQuantities\",\n\t\t\t\"Qto_ElectricApplianceBaseQuantities\",\n\t\t\t\"Qto_ElectricDistributionBoardBaseQuantities\",\n\t\t\t\"Qto_ElectricFlowStorageDeviceBaseQuantities\",\n\t\t\t\"Qto_ElectricGeneratorBaseQuantities\",\n\t\t\t\"Qto_ElectricMotorBaseQuantities\",\n\t\t\t\"Qto_ElectricTimeControlBaseQuantities\",\n\t\t\t\"Qto_EvaporativeCoolerBaseQuantities\",\n\t\t\t\"Qto_EvaporatorBaseQuantities\",\n\t\t\t\"Qto_FanBaseQuantities\",\n\t\t\t\"Qto_FilterBaseQuantities\",\n\t\t\t\"Qto_FireSuppressionTerminalBaseQuantities\",\n\t\t\t\"Qto_FlowInstrumentBaseQuantities\",\n\t\t\t\"Qto_FlowMeterBaseQuantities\",\n\t\t\t\"Qto_FootingBaseQuantities\",\n\t\t\t\"Qto_HeatExchangerBaseQuantities\",\n\t\t\t\"Qto_HumidifierBaseQuantities\",\n\t\t\t\"Qto_InterceptorBaseQuantities\",\n\t\t\t\"Qto_JunctionBoxBaseQuantities\",\n\t\t\t\"Qto_LaborResourceBaseQuantities\",\n\t\t\t\"Qto_LampBaseQuantities\",\n\t\t\t\"Qto_LightFixtureBaseQuantities\",\n\t\t\t\"Qto_MemberBaseQuantities\",\n\t\t\t\"Qto_MotorConnectionBaseQuantities\",\n\t\t\t\"Qto_OpeningElementBaseQuantities\",\n\t\t\t\"Qto_OutletBaseQuantities\",\n\t\t\t\"Qto_PileBaseQuantities\",\n\t\t\t\"Qto_PipeFittingBaseQuantities\",\n\t\t\t\"Qto_PipeSegmentBaseQuantities\",\n\t\t\t\"Qto_PlateBaseQuantities\",\n\t\t\t\"Qto_ProjectionElementBaseQuantities\",\n\t\t\t\"Qto_ProtectiveDeviceBaseQuantities\",\n\t\t\t\"Qto_ProtectiveDeviceTrippingUnitBaseQuantities\",\n\t\t\t\"Qto_PumpBaseQuantities\",\n\t\t\t\"Qto_RailingBaseQuantities\",\n\t\t\t\"Qto_RampFlightBaseQuantities\",\n\t\t\t\"Qto_ReinforcingElementBaseQuantities\",\n\t\t\t\"Qto_RoofBaseQuantities\",\n\t\t\t\"Qto_SanitaryTerminalBaseQuantities\",\n\t\t\t\"Qto_SensorBaseQuantities\",\n\t\t\t\"Qto_SiteBaseQuantities\",\n\t\t\t\"Qto_SlabBaseQuantities\",\n\t\t\t\"Qto_SolarDeviceBaseQuantities\",\n\t\t\t\"Qto_SpaceBaseQuantities\",\n\t\t\t\"Qto_SpaceHeaterBaseQuantities\",\n\t\t\t\"Qto_StackTerminalBaseQuantities\",\n\t\t\t\"Qto_StairFlightBaseQuantities\",\n\t\t\t\"Qto_SwitchingDeviceBaseQuantities\",\n\t\t\t\"Qto_TankBaseQuantities\",\n\t\t\t\"Qto_TransformerBaseQuantities\",\n\t\t\t\"Qto_TubeBundleBaseQuantities\",\n\t\t\t\"Qto_UnitaryControlElementBaseQuantities\",\n\t\t\t\"Qto_UnitaryEquipmentBaseQuantities\",\n\t\t\t\"Qto_ValveBaseQuantities\",\n\t\t\t\"Qto_VibrationIsolatorBaseQuantities\",\n\t\t\t\"Qto_WallBaseQuantities\",\n\t\t\t\"Qto_WasteTerminalBaseQuantities\",\n\t\t\t\"Qto_WindowBaseQuantities\"\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/IFCEntityAndPsetList.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System.Collections.Generic;\nusing System.Runtime.Serialization;\n\nnamespace RevitIFCTools\n{\n   [DataContract]\n   public class IFCEntityInfo\n   {\n      [DataMember]\n      public string Entity { get; set; }\n      [DataMember]\n      public IList<string> PredefinedType { get; set; }\n      [DataMember(Name = \"Applicable PropertySets\")]\n      public IList<string> PropertySets { get; set; }\n\n   }\n\n   [DataContract]\n   public class IFCPropertySetDef\n   {\n      [DataMember(Name = \"Pset Name\")]\n      public string PsetName;\n      [DataMember]\n      public IList<string> Properties { get; set; }\n   }\n\n   /// <summary>\n   /// Valid Entity and Pset list according to MVD definitions\n   /// </summary>\n   [DataContract]\n   public class IFCEntityAndPsetList\n   {\n      /// <summary>\n      /// The MVD version\n      /// </summary>\n      [DataMember]\n      public string Version { get; set; }\n\n      /// <summary>\n      /// Entity list for MVD\n      /// </summary>\n      [DataMember(Name = \"Entity List\")]\n      public HashSet<IFCEntityInfo> EntityList = new HashSet<IFCEntityInfo>();\n\n      [DataMember(Name = \"PropertySet Definition List\")]\n      public HashSet<IFCPropertySetDef> PsetDefList = new HashSet<IFCPropertySetDef>();\n\n      /// <summary>\n      /// Check whether a Pset name is found in the list\n      /// </summary>\n      /// <param name=\"psetName\">Pset name</param>\n      /// <returns>true/false</returns>\n      public bool PsetIsInTheList(string psetName, IFCEntityInfo entityInfo)\n      {\n         // return false if there is no entry\n         if (entityInfo.PropertySets.Count == 0)\n            return false;\n\n         if (entityInfo.PropertySets.Contains(psetName))\n            return true;\n         else\n            return false;\n      }\n\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/IFCEntityListWin.xaml",
    "content": "﻿<Window x:Class=\"RevitIFCTools.IFCEntityListWin\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:local=\"clr-namespace:RevitIFCTools\"\n        mc:Ignorable=\"d\"\n        Title=\"Tool to Generate IFCEntity List/Tree\" Height=\"505.536\" Width=\"494.397\" ResizeMode=\"NoResize\">\n   <Grid ShowGridLines=\"True\">\n      <Grid.RowDefinitions>\n         <RowDefinition Height=\"98*\"/>\n         <RowDefinition Height=\"47*\"/>\n         <RowDefinition Height=\"14*\"/>\n      </Grid.RowDefinitions>\n      <Label x:Name=\"label\" Content=\"Select IFC schema (XML)\" HorizontalAlignment=\"Left\" Margin=\"10,10,0,0\" Width=\"139\" Height=\"27\" VerticalAlignment=\"Top\"/>\n      <ListBox x:Name=\"listBox_schemaList\" Margin=\"17,41,0,0\" SelectionChanged=\"listBox_SelectionChanged\" SelectionMode=\"Multiple\" HorizontalAlignment=\"Left\" Width=\"362\" Height=\"105\" VerticalAlignment=\"Top\"/>\n      <Button x:Name=\"button_browse\" Content=\"Browse ...\" Margin=\"0,169,10,0\" HorizontalAlignment=\"Right\" Width=\"75\" Click=\"button_browse_Click\" Height=\"24\" VerticalAlignment=\"Top\"/>\n      <TextBox x:Name=\"textBox_folderLocation\" TextWrapping=\"Wrap\" Margin=\"17,169,0,0\" HorizontalAlignment=\"Left\" Width=\"362\" Height=\"24\" VerticalAlignment=\"Top\"/>\n      <Label x:Name=\"label1\" Content=\"Folder location:\" HorizontalAlignment=\"Left\" Margin=\"10,145,0,0\" Width=\"92\" Height=\"27\" VerticalAlignment=\"Top\"/>\n      <Button x:Name=\"button_Cancel\" Content=\"Cancel\" Margin=\"0,0,10,12\" Grid.Row=\"2\" Height=\"20\" VerticalAlignment=\"Bottom\" HorizontalAlignment=\"Right\" Width=\"75\" Click=\"button_Cancel_Click\"/>\n      <Button x:Name=\"button_Go\" Content=\"Go\" Margin=\"0,0,90,12\" RenderTransformOrigin=\"0.186,0.596\" Grid.Row=\"2\" HorizontalAlignment=\"Right\" Width=\"75\" Height=\"20\" VerticalAlignment=\"Bottom\" Click=\"button_Go_Click\"/>\n      <Button x:Name=\"button_browseOutputFolder\" Content=\"Browse ...\" Margin=\"0,223,10,0\" HorizontalAlignment=\"Right\" Width=\"75\" Click=\"button_browseOutputFolder_Click\" Height=\"24\" VerticalAlignment=\"Top\"/>\n      <TextBox x:Name=\"textBox_outputFolder\" TextWrapping=\"Wrap\" Margin=\"17,223,0,0\" TextChanged=\"textBox_outputFolder_TextChanged\" HorizontalAlignment=\"Left\" Width=\"362\" Height=\"24\" VerticalAlignment=\"Top\"/>\n      <Label x:Name=\"label1_Copy\" Content=\"Output Folder:\" HorizontalAlignment=\"Left\" Margin=\"10,196,0,0\" Width=\"92\" Height=\"27\" VerticalAlignment=\"Top\"/>\n      <TextBox x:Name=\"textBox_type1\" HorizontalAlignment=\"Left\" Margin=\"11,41,0,0\" Grid.Row=\"1\" TextWrapping=\"Wrap\" Width=\"164\" TextChanged=\"textBox_type1_TextChanged\" Height=\"72\" VerticalAlignment=\"Top\"/>\n      <TextBox x:Name=\"textBox_type2\" Margin=\"274,39,0,0\" Grid.Row=\"1\" TextWrapping=\"Wrap\" TextChanged=\"textBox_type2_TextChanged\" Height=\"74\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" Width=\"147\"/>\n      <CheckBox x:Name=\"checkBox_testResult\" Content=\"True\" Margin=\"426,54,0,0\" Grid.Row=\"1\" IsEnabled=\"False\" Height=\"16\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" Width=\"42\"/>\n      <Button x:Name=\"button_subtypeTest\" Content=\"isSubTypeOf\" Margin=\"180,41,0,0\" Grid.Row=\"1\" Click=\"button_subtypeTest_Click\" HorizontalAlignment=\"Left\" Width=\"89\" Height=\"21\" VerticalAlignment=\"Top\"/>\n      <Button x:Name=\"button_supertypeTest\" Content=\"IsSuperTypeOf\" Margin=\"180,66,0,0\" Grid.Row=\"1\" Click=\"button_supertypeTest_Click\" Height=\"21\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" Width=\"89\"/>\n      <Label x:Name=\"label2\" Content=\"Test (only with a single selection of the schema)\" HorizontalAlignment=\"Left\" Margin=\"9,10,0,0\" Grid.Row=\"1\" Width=\"466\" Height=\"34\" VerticalAlignment=\"Top\"/>\n      <CheckBox x:Name=\"checkBox_outputSchemaEnum\" Content=\"Output indiv. schema enum\" HorizontalAlignment=\"Left\" Margin=\"17,0,0,19\" Width=\"178\" UseLayoutRounding=\"False\" Height=\"16\" VerticalAlignment=\"Bottom\"/>\n      <CheckBox x:Name=\"checkBox_outputSchemaTree\" Content=\"Output indiv. schema tree\" HorizontalAlignment=\"Left\" Margin=\"212,0,0,19\" Width=\"165\" Height=\"15\" VerticalAlignment=\"Bottom\"/>\n      <Button x:Name=\"button_ExportInfoPair\" Content=\"ExportInfoPair\" Margin=\"180,90,0,0\" Grid.Row=\"1\" Click=\"Button_ExportInfoPair_Click\" Height=\"21\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" Width=\"89\"/>\n\n   </Grid>\n</Window>\n"
  },
  {
    "path": "Source/RevitIFCTools/IFCEntityListWin.xaml.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Forms;\nusing System.Runtime.Serialization.Json;\nusing System.IO;\nusing Revit.IFC.Common.Utility;\nusing Revit.IFC.Common.Enums;\nusing Revit.IFC.Export.Utility;\n\nnamespace RevitIFCTools\n{\n   /// <summary>\n   /// Interaction logic for MainWindow.xaml\n   /// </summary>\n   public partial class IFCEntityListWin: Window\n   {\n      SortedSet<string> aggregateEntities;\n      string outputFolder = @\"c:\\temp\";\n      StreamWriter logF;\n\n      public IFCEntityListWin()\n      {\n         InitializeComponent();\n         textBox_outputFolder.Text = outputFolder; // set default\n         button_subtypeTest.IsEnabled = false;\n         button_supertypeTest.IsEnabled = false;\n         button_ExportInfoPair.IsEnabled = false;\n         button_Go.IsEnabled = false;\n      }\n\n      private void button_browse_Click(object sender, RoutedEventArgs e)\n      {\n         var dialog = new FolderBrowserDialog();\n         dialog.RootFolder = Environment.SpecialFolder.MyComputer;\n         dialog.ShowDialog();\n         textBox_folderLocation.Text = dialog.SelectedPath;\n         if (string.IsNullOrEmpty(textBox_folderLocation.Text))\n            return;\n\n         DirectoryInfo dInfo = new DirectoryInfo(dialog.SelectedPath);\n         foreach (FileInfo f in dInfo.GetFiles(\"IFC*.xsd\"))\n         {\n            listBox_schemaList.Items.Add(f.Name);\n         }\n      }\n\n      /// <summary>\n      /// Procees an IFC schema from the IFCXML schema\n      /// </summary>\n      /// <param name=\"f\">IFCXML schema file</param>\n      private void processSchema(FileInfo f)\n      {\n         IfcSchemaEntityTree entityTree = new IfcSchemaEntityTree();\n         ProcessIFCXMLSchema.ProcessIFCSchema(f, ref entityTree);\n\n         string schemaName = f.Name.Replace(\".xsd\", \"\");\n\n         if (checkBox_outputSchemaTree.IsChecked == true)\n         {\n            string treeDump = entityTree.DumpTree();\n            File.WriteAllText(outputFolder + @\"\\entityTree\" + schemaName + \".txt\", treeDump);\n         }\n\n         if (checkBox_outputSchemaEnum.IsChecked == true)\n         {\n            string dictDump = entityTree.DumpEntityDict(schemaName);\n            File.WriteAllText(outputFolder + @\"\\entityEnum\" + schemaName + \".cs\", dictDump);\n         }\n\n         // Add aggregate of the entity list into a set\n         foreach (KeyValuePair<string,IfcSchemaEntityNode> entry in entityTree.IfcEntityDict)\n         {\n            aggregateEntities.Add(entry.Key);\n         }\n      }\n\n      private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n      {\n         if (listBox_schemaList.SelectedItems.Count > 0)\n            button_Go.IsEnabled = true;\n         else\n            button_Go.IsEnabled = false;\n      }\n\n      private void button_Go_Click(object sender, RoutedEventArgs e)\n      {\n         if (listBox_schemaList.SelectedItems.Count == 0)\n            return;\n\n         DirectoryInfo dInfo = new DirectoryInfo(textBox_folderLocation.Text);\n         if (dInfo == null)\n            return;\n\n         if (aggregateEntities == null)\n            aggregateEntities = new SortedSet<string>();\n         aggregateEntities.Clear();\n\n         if (!Directory.Exists(textBox_outputFolder.Text))\n         {\n            textBox_outputFolder.Text = \"\";\n            return;\n         }\n\n         logF = new StreamWriter(Path.Combine(outputFolder, \"entityList.log\"));\n\n         IList<IFCEntityAndPsetList> fxEntityNPsetList = new List<IFCEntityAndPsetList>();\n\n         string jsonFile = outputFolder + @\"\\IFCEntityAndPsetDefs.json\";\n         if (File.Exists(jsonFile))\n            File.Delete(jsonFile);\n         FileStream fs = File.Create(jsonFile);\n         DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(List<IFCEntityAndPsetList>));\n\n         foreach (string fileName in listBox_schemaList.SelectedItems)\n         {\n            FileInfo f = dInfo.GetFiles(fileName).First();\n            //processSchema(f);\n\n            ProcessPsetDefinition procPdef = new ProcessPsetDefinition(logF);\n\n            string schemaName = f.Name.Replace(\".xsd\", \"\");\n            IfcSchemaEntityTree entityTree = IfcSchemaEntityTree.GetEntityDictFor(schemaName, dInfo.FullName);\n            IDictionary<string, IfcSchemaEntityNode> entDict = entityTree.IfcEntityDict;\n            IFCEntityAndPsetList schemaEntities = new IFCEntityAndPsetList();\n            schemaEntities.Version = schemaName;\n            schemaEntities.EntityList = new HashSet<IFCEntityInfo>();\n            schemaEntities.PsetDefList = new HashSet<IFCPropertySetDef>();\n\n            Dictionary<ItemsInPsetQtoDefs, string> keywordsToProcess = PsetOrQto.PsetOrQtoDefItems[PsetOrQtoSetEnum.PROPERTYSET];\n            DirectoryInfo[] psdFolders = new DirectoryInfo(Path.Combine(textBox_folderLocation.Text, schemaName)).GetDirectories(\"psd\", SearchOption.AllDirectories);\n            DirectoryInfo[] underpsdFolders = psdFolders[0].GetDirectories();\n            if (underpsdFolders.Count() > 0)\n            {\n               foreach (DirectoryInfo subDir in psdFolders[0].GetDirectories())\n               {\n                  procPdef.ProcessSchemaPsetDef(schemaName, subDir, keywordsToProcess);\n               }\n            }\n            else\n            {\n               procPdef.ProcessSchemaPsetDef(schemaName, psdFolders[0], keywordsToProcess);\n            }\n\n            keywordsToProcess = PsetOrQto.PsetOrQtoDefItems[PsetOrQtoSetEnum.QTOSET];\n            DirectoryInfo[] qtoFolders = new DirectoryInfo(Path.Combine(textBox_folderLocation.Text, schemaName)).GetDirectories(\"qto\", SearchOption.AllDirectories);\n            if (qtoFolders.Count() == 0)\n               qtoFolders = new DirectoryInfo(Path.Combine(textBox_folderLocation.Text, schemaName)).GetDirectories(\"psd\", SearchOption.AllDirectories);\n\n            if (qtoFolders.Count() > 0)\n            {\n               DirectoryInfo[] underqtoFolders = qtoFolders[0].GetDirectories();\n               if (underqtoFolders.Count() > 0)\n               {\n                  foreach (DirectoryInfo subDir in qtoFolders[0].GetDirectories())\n                  {\n                     procPdef.ProcessSchemaPsetDef(schemaName, subDir, keywordsToProcess);\n                  }\n               }\n               else\n               {\n                  procPdef.ProcessSchemaPsetDef(schemaName, qtoFolders[0], keywordsToProcess);\n               }\n            }\n\n            // Process IFC2x2/IFC2x3 QTO properties\n            procPdef.ProcessPreIfc4QtoSets(schemaName);\n\n            procPdef.ProcessPredefinedPsets(schemaName);\n\n            //Collect information on applicable Psets for Entity\n            IDictionary<string, HashSet<string>> entPsetDict = new Dictionary<string, HashSet<string>>();\n            foreach(KeyValuePair<string, IList<VersionSpecificPropertyDef>> pdefEntry in procPdef.allPDefDict)\n            {\n               foreach(VersionSpecificPropertyDef vPdef in pdefEntry.Value)\n               {\n                  //if (vPdef.IfcVersion.Equals(schemaName, StringComparison.InvariantCultureIgnoreCase))\n                  {\n                     IFCPropertySetDef psetDef = new IFCPropertySetDef();\n                     psetDef.PsetName = vPdef.PropertySetDef.Name;\n                     IList<string> props = new List<string>();\n                     foreach (PropertySet.PsetProperty property in vPdef.PropertySetDef.properties)\n                     {\n                        // New style of property name (prefix with Pset name)\n                        props.Add(psetDef.PsetName + \".\" + property.Name);\n                     }\n                     psetDef.Properties = props;\n                     schemaEntities.PsetDefList.Add(psetDef);\n\n                     // TODO: to check the appl classes either a type or not and check whether the pair (type or without) exists in entDict, if there is add \n                     foreach (string applEntity in vPdef.PropertySetDef.ApplicableClasses)\n                     {\n                        if (entPsetDict.ContainsKey(applEntity))\n                        {\n                           entPsetDict[applEntity].Add(vPdef.PropertySetDef.Name);\n                        }\n                        else\n                        {\n                           entPsetDict.Add(applEntity, new HashSet<string>(){vPdef.PropertySetDef.Name});\n                        }\n\n                        // The Pset will be valid for both the Instance and the Type. Check for that here and add if found\n                        string entOrTypePair;\n                        if (applEntity.Length > 4 && applEntity.EndsWith(\"Type\"))\n                           entOrTypePair = applEntity.Substring(0, applEntity.Length - 4);\n                        else\n                           entOrTypePair = applEntity + \"Type\";\n\n                        if (aggregateEntities.Contains(entOrTypePair))\n                        {\n                           if (entPsetDict.ContainsKey(entOrTypePair))\n                           {\n                              entPsetDict[entOrTypePair].Add(vPdef.PropertySetDef.Name);\n                           }\n                           else\n                           {\n                              entPsetDict.Add(entOrTypePair, new HashSet<string>() { vPdef.PropertySetDef.Name });\n                           }\n                        }\n                     }\n                  }\n               }\n            }\n\n            // For every entity of the schema, collect the list of PredefinedType (obtained from the xsd), and collect all applicable\n            //  Pset Definitions collected above\n            foreach (KeyValuePair<string, IfcSchemaEntityNode> ent in entDict)\n            {\n               IFCEntityInfo entInfo = new IFCEntityInfo();\n\n               // The abstract entity type is not going to be listed here as they can never be created\n               if (ent.Value.isAbstract)\n                  continue;\n\n               // Collect only the IfcProducts or IfcGroup\n               if (!ent.Value.IsSubTypeOf(\"IfcProduct\") && !ent.Value.IsSubTypeOf(\"IfcGroup\", strict:false) && !ent.Value.IsSubTypeOf(\"IfcTypeProduct\"))\n                  continue;\n\n               entInfo.Entity = ent.Key;\n               if (!string.IsNullOrEmpty(ent.Value.PredefinedType))\n               {\n                  if (entityTree.PredefinedTypeEnumDict.ContainsKey(ent.Value.PredefinedType))\n                  {\n                     entInfo.PredefinedType = entityTree.PredefinedTypeEnumDict[ent.Value.PredefinedType];\n                  }\n               }\n               \n               // Get Pset list that is applicable to this entity type\n               if (entPsetDict.ContainsKey(entInfo.Entity))\n               {\n                  entInfo.PropertySets = entPsetDict[entInfo.Entity].ToList();\n               }\n\n               // Collect Pset that is applicable to the supertype of this entity\n               IList<IfcSchemaEntityNode> supertypeList = IfcSchemaEntityTree.FindAllSuperTypes(schemaName, entInfo.Entity, \n                  \"IfcProduct\", \"IfcTypeProduct\", \"IfcGroup\");\n               if (supertypeList != null && supertypeList.Count > 0)\n               {\n                  foreach(IfcSchemaEntityNode superType in supertypeList)\n                  {\n                     if (entPsetDict.ContainsKey(superType.Name))\n                     {\n                        if (entInfo.PropertySets == null)\n                           entInfo.PropertySets = new List<string>();\n\n                        foreach (string pset in entPsetDict[superType.Name])\n                           entInfo.PropertySets.Add(pset);\n                     }\n                  }\n               }\n\n               schemaEntities.EntityList.Add(entInfo);\n            }\n            fxEntityNPsetList.Add(schemaEntities);\n         }\n         ser.WriteObject(fs, fxEntityNPsetList);\n         fs.Close();\n\n         if (aggregateEntities.Count > 0)\n         {\n            string entityList;\n            entityList = \"using System;\"\n                        + \"\\r\\nusing System.Collections.Generic;\"\n                        + \"\\r\\nusing System.Linq;\"\n                        + \"\\r\\nusing System.Text;\"\n                        + \"\\r\\n\"\n                        + \"\\r\\nnamespace Revit.IFC.Common.Enums\"\n                        + \"\\r\\n{\"\n                        + \"\\r\\n   /// <summary>\"\n                        + \"\\r\\n   /// IFC entity types. Combining IFC2x3 and IFC4 (Add2) entities.\"\n                        + \"\\r\\n   /// List of Entities for IFC2x is found in IFC2xEntityType.cs\"\n                        + \"\\r\\n   /// List of Entities for IFC4 is found in IFC4EntityType.cs\"\n                        + \"\\r\\n   /// </summary>\"\n                        + \"\\r\\n   public enum IFCEntityType\"\n                        + \"\\r\\n   {\";\n\n            foreach (string ent in aggregateEntities)\n            {\n               entityList += \"\\r\\n      /// <summary>\"\n                           + \"\\r\\n      /// IFC Entity \" + ent + \" enumeration\"\n                           + \"\\r\\n      /// </summary>\"\n                           + \"\\r\\n      \" + ent + \",\\n\";\n            }\n            entityList += \"\\r\\n      Unknown,\"\n                        + \"\\r\\n      DontExport\"\n                        + \"\\r\\n   }\"\n                        + \"\\r\\n}\";\n            File.WriteAllText(outputFolder + @\"\\IFCEntityType.cs\", entityList);\n         }\n\n         foreach (IFCEntityAndPsetList fxEntityNPset in fxEntityNPsetList)\n         {\n            string entityList;\n            entityList = \"using System;\"\n                        + \"\\r\\nusing System.Collections.Generic;\"\n                        + \"\\r\\nusing System.Linq;\"\n                        + \"\\r\\nusing System.Text;\"\n                        + \"\\r\\n\"\n                        + \"\\r\\nnamespace Revit.IFC.Common.Enums.\" + fxEntityNPset.Version\n                        + \"\\r\\n{\"\n                        + \"\\r\\n   /// <summary>\"\n                        + \"\\r\\n   /// List of Entities for \" + fxEntityNPset.Version\n                        + \"\\r\\n   /// </summary>\"\n                        + \"\\r\\n   public enum EntityType\"\n                        + \"\\r\\n   {\";\n\n            foreach (IFCEntityInfo entInfo in fxEntityNPset.EntityList)\n            {\n               entityList += \"\\r\\n      /// <summary>\"\n                           + \"\\r\\n      /// IFC Entity \" + entInfo.Entity + \" enumeration\"\n                           + \"\\r\\n      /// </summary>\"\n                           + \"\\r\\n      \" + entInfo.Entity + \",\\r\\n\";\n            }\n            entityList += \"\\r\\n      Unknown,\"\n                        + \"\\r\\n      DontExport\"\n                        + \"\\r\\n   }\"\n                        + \"\\r\\n}\";\n            File.WriteAllText(outputFolder + @\"\\\" + fxEntityNPset.Version + \"EntityType.cs\", entityList);\n         }\n\n         // Only allows test when only one schema is selected\n         if (listBox_schemaList.SelectedItems.Count == 1)\n         {\n            button_subtypeTest.IsEnabled = true;\n            button_supertypeTest.IsEnabled = true;\n            button_ExportInfoPair.IsEnabled = true;\n         }\n         else\n         {\n            button_subtypeTest.IsEnabled = false;\n            button_supertypeTest.IsEnabled = false;\n            button_ExportInfoPair.IsEnabled = false;\n         }\n\n         if (logF != null)\n            logF.Close();\n      }\n\n      private void button_Cancel_Click(object sender, RoutedEventArgs e)\n      {\n         if (logF != null)\n            logF.Close();\n         Close();\n      }\n\n      private void button_browseOutputFolder_Click(object sender, RoutedEventArgs e)\n      {\n         var dialog = new FolderBrowserDialog();\n         dialog.RootFolder = Environment.SpecialFolder.MyComputer;\n         dialog.ShowDialog();\n         textBox_outputFolder.Text = dialog.SelectedPath;\n         outputFolder = dialog.SelectedPath;\n      }\n\n      private void button_subtypeTest_Click(object sender, RoutedEventArgs e)\n      {\n         if (listBox_schemaList.SelectedItems.Count == 0 || listBox_schemaList.SelectedItems.Count > 1)\n            return;\n\n         DirectoryInfo dInfo = new DirectoryInfo(textBox_folderLocation.Text);\n         FileInfo f = dInfo.GetFiles(listBox_schemaList.SelectedItem.ToString()).First();\n         string schemaName = f.Name.Replace(\".xsd\", \"\");\n\n         if (string.IsNullOrEmpty(textBox_type1.Text) || string.IsNullOrEmpty(textBox_type2.Text))\n            return;\n\n         bool res = IfcSchemaEntityTree.IsSubTypeOf(schemaName, textBox_type1.Text, textBox_type2.Text);\n         if (res)\n            checkBox_testResult.IsChecked = true;\n         else\n            checkBox_testResult.IsChecked = false;\n      }\n\n      private void button_supertypeTest_Click(object sender, RoutedEventArgs e)\n      {\n         if (listBox_schemaList.SelectedItems.Count == 0 || listBox_schemaList.SelectedItems.Count > 1)\n            return;\n\n         DirectoryInfo dInfo = new DirectoryInfo(textBox_folderLocation.Text);\n         FileInfo f = dInfo.GetFiles(listBox_schemaList.SelectedItem.ToString()).First();\n         string schemaName = f.Name.Replace(\".xsd\", \"\");\n\n         if (string.IsNullOrEmpty(textBox_type1.Text) || string.IsNullOrEmpty(textBox_type2.Text))\n            return;\n\n         bool res = IfcSchemaEntityTree.IsSuperTypeOf(schemaName, textBox_type1.Text, textBox_type2.Text);\n         if (res)\n            checkBox_testResult.IsChecked = true;\n         else\n            checkBox_testResult.IsChecked = false;\n      }\n\n      private void textBox_type1_TextChanged(object sender, TextChangedEventArgs e)\n      {\n         checkBox_testResult.IsChecked = false;\n      }\n\n      private void textBox_type2_TextChanged(object sender, TextChangedEventArgs e)\n      {\n         checkBox_testResult.IsChecked = false;\n      }\n\n      private void textBox_outputFolder_TextChanged(object sender, TextChangedEventArgs e)\n      {\n         outputFolder = textBox_outputFolder.Text;\n      }\n\n      private void Button_ExportInfoPair_Click(object sender, RoutedEventArgs e)\n      {\n         if (string.IsNullOrEmpty(textBox_type1.Text))\n            return;\n\n         string[] info = textBox_type1.Text.Split('.');\n         string entity = info[0];\n         string predefType = null;\n         if (info.Count() > 1)\n            predefType = info[1];\n\n\n         IFCExportInfoPair exportInfo = new IFCExportInfoPair();\n         IFCEntityType entType = IFCEntityType.UnKnown;\n         if (!Enum.TryParse<IFCEntityType>(entity, out entType))\n            return;\n\n         exportInfo.SetByTypeAndPredefinedType(entType, predefType);\n         textBox_type2.Text = \"Instance: \" + exportInfo.ExportInstance + \"\\nType: \" + exportInfo.ExportType \n               + \"\\r\\nPredefinedTpe: \" + exportInfo.PredefinedType;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/IFC_Schemas/.gitattributes",
    "content": "Official[[:space:]]Releases[[:space:]]-[[:space:]]IFC2x2[[:space:]]schema.zip filter=lfs diff=lfs merge=lfs -text\nOfficial[[:space:]]Releases[[:space:]]-[[:space:]]IFC2X3_TC1.zip filter=lfs diff=lfs merge=lfs -text\nOfficial[[:space:]]Releases[[:space:]]-[[:space:]]IFC4.zip filter=lfs diff=lfs merge=lfs -text\nOfficial[[:space:]]Releases[[:space:]]-[[:space:]]IFC4X3_ADD2.zip filter=lfs diff=lfs merge=lfs -text\n"
  },
  {
    "path": "Source/RevitIFCTools/MainWindow.xaml",
    "content": "﻿<Window x:Class=\"RevitIFCTools.MainWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:local=\"clr-namespace:RevitIFCTools\"\n        mc:Ignorable=\"d\"\n        Title=\"Revit IFC Tools\" Height=\"300\" Width=\"522.931\">\n   <Grid>\n      <Grid.RowDefinitions>\n         <RowDefinition Height=\"237*\"/>\n         <RowDefinition Height=\"34*\"/>\n      </Grid.RowDefinitions>\n      <Button x:Name=\"button_GenerateIFCEntityList\" Content=\"Generate IFC EntityList\" Margin=\"10,23,9.8,0\" VerticalAlignment=\"Top\" Height=\"35\" Click=\"button_GenerateIFCEntityList_Click\"/>\n      <Button x:Name=\"button_GeneratePsetDefs\" Content=\"Generate Pset Definitions\" Margin=\"10,63,9.8,0\" VerticalAlignment=\"Top\" Height=\"35\" Click=\"button_GeneratePsetDefs_Click\" />\n      <Button x:Name=\"button_Cancel\" Content=\"Cancel\" Margin=\"0,0,9.8,4.4\" Grid.Row=\"1\" Height=\"19\" VerticalAlignment=\"Bottom\" HorizontalAlignment=\"Right\" Width=\"75\" Click=\"button_Cancel_Click\"/>\n      <Button x:Name=\"button_paramexpr\" Content=\"Test Parameter Expr\" Margin=\"10,103,9.8,0\" VerticalAlignment=\"Top\" Height=\"33\" Click=\"button_paramexpr_Click\"/>\n      <Button x:Name=\"Button_GenGUID\" Content=\"Generate GUID\" HorizontalAlignment=\"Left\" Margin=\"10,174,0,0\" VerticalAlignment=\"Top\" Width=\"102\" Height=\"23\" Click=\"Button_GenGUID_Click\"/>\n      <TextBox x:Name=\"TextBox_GUID\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"117,174,0,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Width=\"301\"/>\n      <Button x:Name=\"Button_switchcase\" Content=\"Switch Case\" Margin=\"0,174,9.6,0\" VerticalAlignment=\"Top\" Height=\"23\" HorizontalAlignment=\"Right\" Width=\"75\" Click=\"Button_switchcase_Click\"/>\n\n   </Grid>\n</Window>\n"
  },
  {
    "path": "Source/RevitIFCTools/MainWindow.xaml.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Windows;\nusing RevitIFCTools.ParameterExpr;\n\nnamespace RevitIFCTools\n{\n   /// <summary>\n   /// Interaction logic for MainWindow.xaml\n   /// </summary>\n   public partial class MainWindow : Window\n   {\n      public MainWindow()\n      {\n         InitializeComponent();\n      }\n\n      private void button_GenerateIFCEntityList_Click(object sender, RoutedEventArgs e)\n      {\n         IFCEntityListWin ifcEntWnd = new IFCEntityListWin();\n         ifcEntWnd.ShowDialog();\n      }\n\n      private void button_GeneratePsetDefs_Click(object sender, RoutedEventArgs e)\n      {\n         GeneratePsetDefWin psetWin = new GeneratePsetDefWin();\n         psetWin.ShowDialog();\n      }\n\n      private void button_Cancel_Click(object sender, RoutedEventArgs e)\n      {\n         Close();\n      }\n\n      private void button_paramexpr_Click(object sender, RoutedEventArgs e)\n      {\n         ExprTester exprTest = new ParameterExpr.ExprTester();\n         exprTest.ShowDialog();\n      }\n\n      bool guid_lowercase = true;\n      private void Button_GenGUID_Click(object sender, RoutedEventArgs e)\n      {\n         Guid newGuid = Guid.NewGuid();\n         TextBox_GUID.Text = newGuid.ToString();\n      }\n\n      private void Button_switchcase_Click(object sender, RoutedEventArgs e)\n      {\n         if (string.IsNullOrEmpty(TextBox_GUID.Text))\n            return;\n\n         if (guid_lowercase)\n         {\n            TextBox_GUID.Text = TextBox_GUID.Text.ToUpper();\n            guid_lowercase = false;\n         }\n         else\n         {\n            TextBox_GUID.Text = TextBox_GUID.Text.ToLower();\n            guid_lowercase = true;\n         }\n      }\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/ParameterExpr/ExprTester.xaml",
    "content": "﻿<Window x:Class=\"RevitIFCTools.ParameterExpr.ExprTester\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:local=\"clr-namespace:RevitIFCTools.ParameterExpr\"\n        mc:Ignorable=\"d\"\n        Title=\"ExprTester\" Height=\"596\" Width=\"816.986\">\n   <Grid>\n      <Grid.RowDefinitions>\n         <RowDefinition Height=\"518*\"/>\n         <RowDefinition Height=\"47*\"/>\n      </Grid.RowDefinitions>\n      <Label x:Name=\"label\" Content=\"Parameter expression:\" HorizontalAlignment=\"Left\" Margin=\"10,10,0,0\" VerticalAlignment=\"Top\" Height=\"30\" Width=\"155\"/>\n      <TextBox x:Name=\"textBox_Expr\" Height=\"23\" Margin=\"10,45,10,0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\"/>\n      <Label x:Name=\"label1\" Content=\"Parser report:\" HorizontalAlignment=\"Left\" Margin=\"10,73,0,0\" VerticalAlignment=\"Top\" Height=\"30\" Width=\"98\"/>\n      <TextBox x:Name=\"textBox_Output\" Margin=\"10,108,10,10\" TextWrapping=\"Wrap\" VerticalScrollBarVisibility=\"Auto\" HorizontalScrollBarVisibility=\"Auto\" ScrollViewer.CanContentScroll=\"True\"/>\n      <Button x:Name=\"button_Parse\" Content=\"Parse\" Margin=\"724,0,10,10\" Grid.Row=\"1\" Height=\"24\" VerticalAlignment=\"Bottom\" Click=\"button_Parse_Click\"/>\n      <Button x:Name=\"button_Close\" Content=\"Close\" Margin=\"644,0,90,10\" Grid.Row=\"1\" Height=\"24\" VerticalAlignment=\"Bottom\" Click=\"button_Close_Click\"/>\n      <Button x:Name=\"button_ClearAll\" Content=\"Clear All\" HorizontalAlignment=\"Left\" Margin=\"10,0,0,10\" Grid.Row=\"1\" VerticalAlignment=\"Bottom\" Width=\"75\" RenderTransformOrigin=\"0.507,0.542\" Height=\"24\" Click=\"button_ClearAll_Click\"/>\n      <Button x:Name=\"button_ClearOutput\" Content=\"Clear Ouput\" HorizontalAlignment=\"Left\" Margin=\"90,0,0,10\" Grid.Row=\"1\" VerticalAlignment=\"Bottom\" Width=\"97\" RenderTransformOrigin=\"0.507,0.542\" Height=\"24\" Click=\"button_ClearOutput_Click\"/>\n\n   </Grid>\n</Window>\n"
  },
  {
    "path": "Source/RevitIFCTools/ParameterExpr/ExprTester.xaml.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System.Windows;\nusing Antlr4.Runtime;\nusing Antlr4.Runtime.Tree;\nusing Revit.IFC.Export.Utility;\n\nnamespace RevitIFCTools.ParameterExpr\n{\n   /// <summary>\n   /// Interaction logic for ExprTester.xaml\n   /// </summary>\n   public partial class ExprTester : Window\n   {\n      public ExprTester()\n      {\n         InitializeComponent();\n      }\n\n      private void button_Parse_Click(object sender, RoutedEventArgs e)\n      {\n         if (string.IsNullOrEmpty(textBox_Expr.Text))\n            return;\n\n         AntlrInputStream input = new AntlrInputStream(textBox_Expr.Text);\n         ParamExprGrammarLexer lexer = new ParamExprGrammarLexer(input);\n         CommonTokenStream tokens = new CommonTokenStream(lexer);\n         ParamExprGrammarParser parser = new ParamExprGrammarParser(tokens);\n         parser.RemoveErrorListeners();\n         Logger.resetStream();\n\n         parser.AddErrorListener(new ParamExprErrorListener());\n\n         //IParseTree tree = parser.start_rule();\n         IParseTree tree = parser.param_expr();\n         ParseTreeWalker walker = new ParseTreeWalker();\n         EvalListener eval = new EvalListener(parser);\n\n         walker.Walk(eval, tree);\n\n         // BIMRL_output.Text = tree.ToStringTree(parser);\n         string toOutput = new string(Logger.getmStreamContent());\n         textBox_Output.Text = tree.ToStringTree(parser) + '\\n' + toOutput;\n      }\n\n      private void button_Close_Click(object sender, RoutedEventArgs e)\n      {\n         Close();\n      }\n\n      private void button_ClearOutput_Click(object sender, RoutedEventArgs e)\n      {\n         textBox_Output.Clear();\n         textBox_Expr.Clear();\n      }\n\n      private void button_ClearAll_Click(object sender, RoutedEventArgs e)\n      {\n         textBox_Output.Clear();\n      }\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/ParameterExpr/Logger.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System.IO;\nusing System.Text;\n\nnamespace RevitIFCTools.ParameterExpr\n{\n   public static class Logger\n   {\n      private static MemoryStream m_mStream = null;\n      public static MemoryStream loggerStream\n      {\n         get\n         {\n            if (m_mStream == null) m_mStream = new MemoryStream();\n            return m_mStream;\n         }\n      }\n\n      public static void resetStream()\n      {\n         if (m_mStream != null)\n         {\n            m_mStream.Dispose();\n            m_mStream = null;\n         }\n      }\n\n      //        public static MemoryStream mStream = new MemoryStream();\n\n      public static void writeLog(string msgText)\n      {\n         if (m_mStream == null) m_mStream = new MemoryStream();\n         UnicodeEncoding uniEncoding = new UnicodeEncoding();\n\n         byte[] msgString = uniEncoding.GetBytes(msgText);\n         m_mStream.Write(msgString, 0, msgString.Length);\n         m_mStream.Flush();\n      }\n\n      public static char[] getmStreamContent()\n      {\n         char[] charArray;\n         UnicodeEncoding uniEncoding = new UnicodeEncoding();\n\n         byte[] byteArray = new byte[m_mStream.Length];\n         int countC = uniEncoding.GetCharCount(byteArray);\n         int countB = (int)m_mStream.Length;\n         m_mStream.Seek(0, SeekOrigin.Begin);\n         m_mStream.Read(byteArray, 0, countB);\n         charArray = new char[countC];\n         uniEncoding.GetDecoder().GetChars(byteArray, 0, countB, charArray, 0);\n\n         return charArray;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/ParameterExpr/ParameterExprParserTest.cs",
    "content": "﻿//\n// BIM IFC export alternate UI library: this library works with Autodesk(R) Revit(R) to provide an alternate user interface for the export of IFC files from Revit.\n// Copyright (C) 2016  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\n\nusing ITerminalNode = Antlr4.Runtime.Tree.ITerminalNode;\nusing ParserRuleContext = Antlr4.Runtime.ParserRuleContext;\nusing Revit.IFC.Export.Utility;\n\nnamespace RevitIFCTools.ParameterExpr\n{\n   class EvalListener : ParamExprGrammarBaseListener\n   {\n      ParamExprGrammarParser parser;\n\n      public EvalListener(ParamExprGrammarParser parser)\n      {\n         this.parser = parser;\n      }\n\n      public string visitMsg\n      {\n         set;\n         get;\n      }\n\n      public override void VisitTerminal(ITerminalNode node)\n      {\n         //visitMsg = \"\\t{get node [Token: \" + this.parser.TokenNames[node.Symbol.Type] + \"] : \" + node.Symbol.Text + \"}\\n\";\n         string nodeName = node.Symbol.ToString();\n         visitMsg = \"\\t{Visiting node: [\" + nodeName + \"]\\n\";\n         Logger.writeLog(visitMsg);\n      }\n\n      public override void EnterEveryRule(ParserRuleContext context)\n      {\n         Logger.writeLog(\"{get rule: \" + this.parser.RuleNames[context.RuleIndex] + \" : \" + context.Start.Text + \"}\\n\");\n      }\n\n      public override void ExitEveryRule(ParserRuleContext context)\n      {\n         Logger.writeLog(\"{end rule: \" + this.parser.RuleNames[context.RuleIndex] + \" : \" + context.Start.Text + \"}\\n\");\n      }\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/ProcessPsetDefinition.cs",
    "content": "//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.RegularExpressions;\nusing System.IO;\nusing System.Xml.Linq;\nusing RevitIFCTools.PropertySet;\n\nnamespace RevitIFCTools\n{\n   public class SharedParameterDef : ICloneable\n   {\n      public string Param { get; set; } = \"PARAM\";\n      public Guid ParamGuid { get; set; }\n      public string Name { get; set; }\n      public string ParamType { get; set; }\n      public string DataCategory { get; set; }\n      public int GroupId { get; set; } = 2;\n      public bool Visibility { get; set; } = true;\n      public string Description { get; set; }\n      public bool UserModifiable { get; set; } = true;\n      public string OwningPset { get; set; } = null;\n\n      public virtual object Clone()\n      {\n         SharedParameterDef clonePar = new SharedParameterDef();\n         clonePar.Param = this.Param;\n         clonePar.ParamGuid = this.ParamGuid;\n         clonePar.Name = this.Name;\n         clonePar.ParamType = this.ParamType;\n         clonePar.DataCategory = this.DataCategory;\n         clonePar.GroupId = this.GroupId;\n         clonePar.Visibility = this.Visibility;\n         clonePar.Description = this.Description;\n         clonePar.UserModifiable = this.UserModifiable;\n         return clonePar;\n      }\n   }\n\n   public class VersionSpecificPropertyDef\n   {\n      public string SchemaFileVersion { get; set; }\n      public string IfcVersion { get; set; }\n      public PsetDefinition PropertySetDef { get; set; }\n   }\n\n   public class ProcessPsetDefinition\n   {\n      // File patterns for property set definitions\n      private const string PSET_HTM_PATTERN = \"Pset_*.htm\";\n      private const string PSET_XML_PATTERN = \"Pset_*.xml\";\n      private const string QTO_HTM_PATTERN = \"Qto_*.htm\";\n      private const string QTO_XML_PATTERN = \"Qto_*.xml\";\n      \n      IDictionary<string, StreamWriter> enumFileDict;\n      IDictionary<string, IList<string>> enumDict;\n      public SortedDictionary<string, IList<VersionSpecificPropertyDef>> allPDefDict { get; private set; } = new SortedDictionary<string, IList<VersionSpecificPropertyDef>>();\n      StreamWriter logF;\n\n      public static SortedDictionary<string, SharedParameterDef> SharedParamFileDict { get; set; } = new SortedDictionary<string, SharedParameterDef>();\n      public static SortedDictionary<string, SharedParameterDef> SharedParamFileTypeDict { get; set; } = new SortedDictionary<string, SharedParameterDef>();\n\n      public ProcessPsetDefinition(StreamWriter logfile)\n      {\n         logF = logfile;\n         enumFileDict = new Dictionary<string, StreamWriter>();\n         enumDict = new Dictionary<string, IList<string>>();\n      }\n\n      void AddPsetDefToDict(string schemaVersionName, PsetDefinition psetD)\n      {\n         if (psetD == null)\n            return;\n\n         VersionSpecificPropertyDef psetDefEntry = new VersionSpecificPropertyDef()\n         {\n            SchemaFileVersion = schemaVersionName,\n            IfcVersion = psetD.IfcVersion,\n            PropertySetDef = psetD\n         };\n\n         if (allPDefDict.ContainsKey(psetD.Name))\n         {\n            // Check if there's already an entry with the same IfcVersion\n            bool alreadyExists = allPDefDict[psetD.Name].Any(x => x.IfcVersion == psetD.IfcVersion);\n            if (!alreadyExists)\n            {\n               allPDefDict[psetD.Name].Add(psetDefEntry);\n            }\n         }\n         else\n         {\n            IList<VersionSpecificPropertyDef> vsPropDefList = new List<VersionSpecificPropertyDef>();\n            vsPropDefList.Add(psetDefEntry);\n            allPDefDict.Add(psetD.Name, vsPropDefList);\n         }\n      }\n\n      void AddPredefinedPsetsToDict(string schemaVersionName)\n      {\n\n      }\n\n      LanguageType checkAliasLanguage(string language)\n      {\n         if (language.Equals(\"en-us\", StringComparison.CurrentCultureIgnoreCase)\n               || language.Equals(\"en\", StringComparison.CurrentCultureIgnoreCase))\n            return LanguageType.English_USA;\n\n         if (language.Equals(\"ja-JP\", StringComparison.CurrentCultureIgnoreCase)\n               || language.Equals(\"ja\", StringComparison.CurrentCultureIgnoreCase))\n            return LanguageType.Japanese;\n\n         if (language.Equals(\"ko-KR\", StringComparison.CurrentCultureIgnoreCase)\n            || language.Equals(\"ko\", StringComparison.CurrentCultureIgnoreCase))\n            return LanguageType.Korean;\n\n         if (language.Equals(\"zh-CN\", StringComparison.CurrentCultureIgnoreCase)\n            || language.Equals(\"zh-SG\", StringComparison.CurrentCultureIgnoreCase)\n            || language.Equals(\"zh-HK\", StringComparison.CurrentCultureIgnoreCase))\n            return LanguageType.Chinese_Simplified;\n\n         if (language.Equals(\"zh-TW\", StringComparison.CurrentCultureIgnoreCase))\n            return LanguageType.Chinese_Traditional;\n\n         if (language.Equals(\"fr-FR\", StringComparison.CurrentCultureIgnoreCase)\n            || language.Equals(\"fr\", StringComparison.CurrentCultureIgnoreCase))\n            return LanguageType.French;\n\n         if (language.Equals(\"de-DE\", StringComparison.CurrentCultureIgnoreCase)\n            || language.Equals(\"de\", StringComparison.CurrentCultureIgnoreCase))\n            return LanguageType.German;\n\n         if (language.Equals(\"es\", StringComparison.CurrentCultureIgnoreCase))\n            return LanguageType.Spanish;\n\n         if (language.Equals(\"it\", StringComparison.CurrentCultureIgnoreCase))\n            return LanguageType.Italian;\n\n         if (language.Equals(\"nl\", StringComparison.CurrentCultureIgnoreCase))\n            return LanguageType.Dutch;\n\n         if (language.Equals(\"ru\", StringComparison.CurrentCultureIgnoreCase))\n            return LanguageType.Russian;\n\n         if (language.Equals(\"cs\", StringComparison.CurrentCultureIgnoreCase))\n            return LanguageType.Czech;\n\n         if (language.Equals(\"pl\", StringComparison.CurrentCultureIgnoreCase))\n            return LanguageType.Polish;\n\n         if (language.Equals(\"hu\", StringComparison.CurrentCultureIgnoreCase))\n            return LanguageType.Hungarian;\n\n         if (language.Equals(\"pt-BR\", StringComparison.CurrentCultureIgnoreCase))\n            return LanguageType.Brazilian_Portuguese;\n\n         return LanguageType.Unknown;\n      }\n\n      void writeEnumFile(string IfcVersion, string schemaVersion, string penumName, IList<string> enumValues, string outputFile)\n      {\n         if (string.IsNullOrEmpty(IfcVersion) || string.IsNullOrEmpty(penumName) || enumValues == null || enumValues.Count == 0)\n            return;\n\n         string version = IfcVersion;\n         if (IfcVersion.Equals(\"IFC4\", StringComparison.CurrentCultureIgnoreCase))\n            version = schemaVersion.ToUpper();\n\n         StreamWriter fileToWrite;\n         if (!enumFileDict.TryGetValue(version, out fileToWrite))\n         {\n            string fileName = Path.Combine(Path.GetDirectoryName(outputFile),\n                                 Path.GetFileNameWithoutExtension(outputFile) + version + \"Enum.cs\");\n            if (File.Exists(fileName))\n               File.Delete(fileName);\n            fileToWrite = new StreamWriter(fileName);\n            enumFileDict.Add(version, fileToWrite);\n\n            fileToWrite.WriteLine(\"using System;\");\n            fileToWrite.WriteLine(\"using System.Collections.Generic;\");\n            fileToWrite.WriteLine(\"using System.Linq;\");\n            fileToWrite.WriteLine(\"using System.Text;\");\n            fileToWrite.WriteLine(\"using System.Threading.Tasks;\");\n            fileToWrite.WriteLine(\"using Autodesk.Revit;\");\n            fileToWrite.WriteLine(\"using Autodesk.Revit.DB;\");\n            fileToWrite.WriteLine(\"using Autodesk.Revit.DB.IFC;\");\n            fileToWrite.WriteLine(\"using Revit.IFC.Export.Exporter.PropertySet;\");\n            fileToWrite.WriteLine(\"using Revit.IFC.Export.Exporter.PropertySet.Calculators;\");\n            fileToWrite.WriteLine(\"using Revit.IFC.Export.Utility;\");\n            fileToWrite.WriteLine(\"using Revit.IFC.Export.Toolkit;\");\n            fileToWrite.WriteLine(\"using Revit.IFC.Common.Enums;\");\n            fileToWrite.WriteLine(\"\");\n            fileToWrite.WriteLine(\"namespace Revit.IFC.Export.Exporter.PropertySet.\" + version);\n            fileToWrite.WriteLine(\"{\");\n            fileToWrite.WriteLine(\"\");\n         }\n\n         // Check for duplicate Penum\n         string key = version + \".\" + penumName;\n         if (!enumDict.ContainsKey(key))\n         {\n            enumDict.Add(key, enumValues);\n         }\n         else\n         {\n            return;  // the enum already in the Dict, i.e. alreadey written, do not write it again\n         }\n\n         fileToWrite.WriteLine(\"\");\n         fileToWrite.WriteLine(\"   public enum \" + penumName + \" {\");\n         foreach (string enumV in enumValues)\n         {\n            string endWith = \",\";\n            if (enumV == enumValues.Last())\n               endWith = \"}\";\n\n            fileToWrite.WriteLine(\"      \" + enumV + endWith);\n         }\n      }\n\n      public void endWriteEnumFile()\n      {\n         foreach (KeyValuePair<string, StreamWriter> enumFile in enumFileDict)\n         {\n            enumFile.Value.WriteLine(\"}\");\n            enumFile.Value.Close();\n         }\n      }\n\n      string HandleInvalidCharacter(string name)\n      {\n         // 1. Check for all number or start with number enum name. Rename with _, and assign number as value for all number\n         string appendValue = \"\";\n         // If the name consists number only, assig the number value to the enum\n         if (Regex.IsMatch(name, @\"^\\d+$\"))\n            appendValue = \" = \" + name;\n\n         // if the enum starts with a number, add prefix to the enum with an underscore\n         if (Regex.IsMatch(name, @\"^\\d\"))\n            name = \"_\" + name + appendValue;\n\n         // check for any illegal character and remove them\n         name = name.Replace(\".\", \"\").Replace(\"-\", \"\");\n         return name;\n      }\n\n      public static string removeInvalidNName(string name)\n      {\n         string[] subNames = name.Split('/', '\\\\', ' ');\n         if (subNames[0].Trim().StartsWith(\"Ifc\", StringComparison.InvariantCultureIgnoreCase))\n            return subNames[0].Trim();  // Only returns the name before '/' if any\n         else\n         {\n            foreach (string entName in subNames)\n               if (entName.Trim().StartsWith(\"Ifc\", StringComparison.InvariantCultureIgnoreCase))\n                  return entName.Trim();\n         }\n         return null;\n      }\n\n      public void processSimpleProperty(StreamWriter outF, string psetName, PsetProperty prop, string propNamePrefix, string IfcVersion, string schemaVersion,\n         string varName, VersionSpecificPropertyDef vSpecPDef, string outputFile)\n      {\n         string propTypeStr = \"PropertyType\";\n         // The original style for the param name (i.e. the same as the Property Name)\n         string propNameToUse = prop.Name;\n         if (!string.IsNullOrEmpty(propNamePrefix))\n            propNameToUse = propNamePrefix + \".\" + propNameToUse;\n         // The new style of parameter name (<Pset name>.<Property name>)\n         string newParamName = propNameToUse;\n         if (vSpecPDef.PropertySetDef.Name.StartsWith(\"Pset\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            newParamName = vSpecPDef.PropertySetDef.Name + \".\" + propNameToUse;\n            outF.WriteLine(\"            ifcPSE = new PropertySetEntry(\\\"{0}\\\", \\\"{1}\\\");\", newParamName, propNameToUse);\n         }\n         else if (vSpecPDef.PropertySetDef.Name.StartsWith(\"Ifc\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            newParamName = vSpecPDef.PropertySetDef.Name + \".\" + propNameToUse;\n            outF.WriteLine(\"            ifcPSE = new PreDefinedPropertySetEntry(\\\"{0}\\\", \\\"{1}\\\");\", newParamName, propNameToUse);\n         }\n         else\n         {\n            newParamName = vSpecPDef.PropertySetDef.Name + \".\" + propNameToUse;\n            propTypeStr = \"QuantityType\";\n            outF.WriteLine(\"            ifcPSE = new QuantityEntry(\\\"{0}\\\", \\\"{1}\\\");\", newParamName, propNameToUse);\n         }\n\n         outF.WriteLine(\"            ifcPSE.PropertyName = \\\"{0}\\\";\", propNameToUse);\n         if (prop.PropertyType != null)\n         {\n            if (prop.PropertyType is PropertyEnumeratedValue)\n            {\n               PropertyEnumeratedValue propEnum = prop.PropertyType as PropertyEnumeratedValue;\n               outF.WriteLine(\"            ifcPSE.{0} = {0}.Label;\", propTypeStr);\n               outF.WriteLine(\"            ifcPSE.PropertyValueType = PropertyValueType.EnumeratedValue;\");\n               outF.WriteLine(\"            ifcPSE.PropertyEnumerationType = typeof(Revit.IFC.Export.Exporter.PropertySet.\" + IfcVersion + \".\" + propEnum.Name + \");\");\n               IList<string> enumItems = new List<string>();\n               foreach (PropertyEnumItem enumItem in propEnum.EnumDef)\n               {\n                  string item = HandleInvalidCharacter(enumItem.EnumItem);\n                  enumItems.Add(item);\n               }\n               writeEnumFile(IfcVersion, schemaVersion, propEnum.Name, enumItems, outputFile);\n            }\n            else if (prop.PropertyType is PropertyReferenceValue)\n            {\n               PropertyReferenceValue propRef = prop.PropertyType as PropertyReferenceValue;\n               outF.WriteLine(\"            ifcPSE.{0} = {0}.{1};\", propTypeStr, propRef.RefEntity.Trim());\n               outF.WriteLine(\"            ifcPSE.PropertyValueType = PropertyValueType.ReferenceValue;\");\n            }\n            else if (prop.PropertyType is PropertyListValue)\n            {\n               PropertyListValue propList = prop.PropertyType as PropertyListValue;\n               if (propList.DataType != null && !propList.DataType.Equals(\"IfcValue\", StringComparison.InvariantCultureIgnoreCase))\n                  outF.WriteLine(\"            ifcPSE.{0} = {0}.{1};\", propTypeStr, propList.DataType.ToString().Replace(\"Ifc\", \"\").Replace(\"Measure\", \"\").Trim());\n               else\n                  outF.WriteLine(\"            ifcPSE.{0} = {0}.Label;\", propTypeStr);    // default to Label if not defined\n\n               outF.WriteLine(\"            ifcPSE.PropertyValueType = PropertyValueType.ListValue;\");\n            }\n            else if (prop.PropertyType is PropertyTableValue)\n            {\n               PropertyTableValue propTab = prop.PropertyType as PropertyTableValue;\n               if (propTab.DefiningValueType != null)\n                  outF.WriteLine(\"            ifcPSE.PropertyArgumentType = {0}.{1};\", propTypeStr, propTab.DefiningValueType.ToString().Replace(\"Ifc\", \"\").Replace(\"Measure\", \"\").Trim());\n               else\n                  outF.WriteLine(\"            ifcPSE.PropertyArgumentType = {0}.Label;\", propTypeStr);    // default to Label if missing\n\n               if (propTab.DefinedValueType != null)\n                  outF.WriteLine(\"            ifcPSE.{0} = {0}.{1};\", propTypeStr, propTab.DefinedValueType.ToString().Replace(\"Ifc\", \"\").Replace(\"Measure\", \"\").Trim());\n               else\n                  outF.WriteLine(\"            ifcPSE.{0} = {0}.Label;\", propTypeStr);    // default to Label if missing\n\n               outF.WriteLine(\"            ifcPSE.PropertyValueType = PropertyValueType.TableValue;\");\n            }\n            else if (prop.PropertyType is PropertyBoundedValue)\n            {\n               PropertyBoundedValue propBound = prop.PropertyType as PropertyBoundedValue;\n               outF.WriteLine(\"            ifcPSE.PropertyValueType = PropertyValueType.BoundedValue;\");\n               if (propBound.DataType != null && !propBound.DataType.Equals(\"IfcValue\", StringComparison.InvariantCultureIgnoreCase))\n                  outF.WriteLine(\"            ifcPSE.{0} = {0}.{1};\", propTypeStr, propBound.DataType.ToString().Replace(\"Ifc\", \"\").Replace(\"Measure\", \"\").Trim());\n               else\n                  outF.WriteLine(\"            ifcPSE.{0} = {0}.Label;\", propTypeStr);    // default to Label if not defined\n            }\n            else\n            {\n               string propType = prop.PropertyType.ToString().Replace(\"Ifc\", \"\").Replace(\"Measure\", \"\").Trim();\n               if (propType.Equals(\"String\", StringComparison.InvariantCultureIgnoreCase))\n                  propType = \"Text\";\n               outF.WriteLine(\"            ifcPSE.{0} = {0}.{1};\", propTypeStr, propType);\n               if (!string.IsNullOrEmpty(prop.PropertyValueType))\n                  outF.WriteLine(\"            ifcPSE.PropertyValueType = {0};\", prop.PropertyValueType);\n            }\n         }\n         else\n         {\n            prop.PropertyType = new PropertySingleValue();\n            // Handle bad cases where datatype is somehow missing in the PSD\n            if (prop.Name.ToLowerInvariant().Contains(\"ratio\")\n               || prop.Name.ToLowerInvariant().Contains(\"length\")\n               || prop.Name.ToLowerInvariant().Contains(\"width\")\n               || prop.Name.ToLowerInvariant().Contains(\"thickness\")\n               || prop.Name.ToLowerInvariant().Contains(\"angle\")\n               || prop.Name.ToLowerInvariant().Contains(\"transmittance\")\n               || prop.Name.ToLowerInvariant().Contains(\"fraction\")\n               || prop.Name.ToLowerInvariant().Contains(\"rate\")\n               || prop.Name.ToLowerInvariant().Contains(\"velocity\")\n               || prop.Name.ToLowerInvariant().Contains(\"speed\")\n               || prop.Name.ToLowerInvariant().Contains(\"capacity\")\n               || prop.Name.ToLowerInvariant().Contains(\"pressure\")\n               || prop.Name.ToLowerInvariant().Contains(\"temperature\")\n               || prop.Name.ToLowerInvariant().Contains(\"power\")\n               || prop.Name.ToLowerInvariant().Contains(\"heatgain\")\n               || prop.Name.ToLowerInvariant().Contains(\"efficiency\")\n               || prop.Name.ToLowerInvariant().Contains(\"resistance\")\n               || prop.Name.ToLowerInvariant().Contains(\"coefficient\")\n               || prop.Name.ToLowerInvariant().Contains(\"measure\"))\n               (prop.PropertyType as PropertySingleValue).DataType = \"IfcReal\";\n            else if (prop.Name.ToLowerInvariant().Contains(\"loadbearing\"))\n               (prop.PropertyType as PropertySingleValue).DataType = \"IfcBoolean\";\n            else if (prop.Name.ToLowerInvariant().Contains(\"reference\"))\n               (prop.PropertyType as PropertySingleValue).DataType = \"IfcIdentifier\";\n            else\n               (prop.PropertyType as PropertySingleValue).DataType = \"IfcLabel\";\n            logF.WriteLine(\"%Warning: \" + prop.Name + \" from \" + vSpecPDef.PropertySetDef.Name + \"(\" + vSpecPDef.SchemaFileVersion + \") is missing PropertyType/datatype. Set to default \"\n                  + (prop.PropertyType as PropertySingleValue).DataType);\n         }\n\n         // Append new definition to the Shared parameter file\n         SharedParameterDef newPar = new SharedParameterDef();\n         newPar.Name = newParamName;\n         newPar.OwningPset = psetName;\n\n         // Use IfdGuid for the GUID if defined\n         Guid pGuid = Guid.Empty;\n         bool hasIfdGuid = false;\n         if (!string.IsNullOrEmpty(prop.IfdGuid))\n         {\n            if (Guid.TryParse(prop.IfdGuid, out pGuid))\n               hasIfdGuid = true;\n         }\n         if (pGuid == Guid.Empty)\n            pGuid = Guid.NewGuid();\n\n         newPar.ParamGuid = pGuid;\n\n         if (prop.PropertyType != null)\n            newPar.Description = prop.PropertyType.ToString().Split(' ', '\\t')[0].Trim();     // Put the original IFC datatype in the description\n         else\n         {\n            logF.WriteLine(\"%Warning: \" + newPar.Name + \" from \" + vSpecPDef.PropertySetDef.Name + \"(\" + vSpecPDef.SchemaFileVersion + \") is missing PropertyType/datatype.\");\n         }\n\n         if (prop.PropertyType is PropertyEnumeratedValue)\n         {\n            newPar.ParamType = \"TEXT\";    // Support only a single enum value (which is most if not all cases known)\n         }\n         else if (prop.PropertyType is PropertyReferenceValue\n            || prop.PropertyType is PropertyBoundedValue\n            || prop.PropertyType is PropertyListValue\n            || prop.PropertyType is PropertyTableValue)\n         {\n            // For all the non-simple value, a TEXT parameter will be created that will contain formatted string\n            newPar.ParamType = \"MULTILINETEXT\";\n            if (prop.PropertyType is PropertyBoundedValue)\n               newPar.Description = \"PropertyBoundedValue\";   // override the default to the type of property datatype\n            else if (prop.PropertyType is PropertyListValue)\n               newPar.Description = \"PropertyListValue\";   // override the default to the type of property datatype\n            else if (prop.PropertyType is PropertyTableValue)\n               newPar.Description = \"PropertyTableValue\";   // override the default to the type of property datatype\n         }\n         else if (prop.PropertyType is PropertySingleValue)\n         {\n            PropertySingleValue propSingle = prop.PropertyType as PropertySingleValue;\n            newPar.Description = propSingle.DataType; // Put the original IFC datatype in the description\n\n            if (propSingle.DataType.Equals(\"IfcPositivePlaneAngleMeasure\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcSolidAngleMeasure\", StringComparison.InvariantCultureIgnoreCase))\n               newPar.ParamType = \"ANGLE\";\n            else if (propSingle.DataType.Equals(\"IfcAreaMeasure\", StringComparison.InvariantCultureIgnoreCase))\n               newPar.ParamType = \"AREA\";\n            else if (propSingle.DataType.Equals(\"IfcMonetaryMeasure\", StringComparison.InvariantCultureIgnoreCase))\n               newPar.ParamType = \"CURRENCY\";\n            else if (propSingle.DataType.Equals(\"IfcPositivePlaneAngleMeasure\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcCardinalPointReference\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcCountMeasure\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcDayInMonthNumber\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcDayInWeekNumber\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcDimensionCount\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcInteger\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcIntegerCountRateMeasure\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcMonthInYearNumber\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcTimeStamp\", StringComparison.InvariantCultureIgnoreCase))\n               newPar.ParamType = \"INTEGER\";\n            else if (propSingle.DataType.Equals(\"IfcLengthMeasure\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcNonNegativeLengthMeasure\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcPositiveLengthMeasure\", StringComparison.InvariantCultureIgnoreCase))\n               newPar.ParamType = \"LENGTH\";\n            else if (propSingle.DataType.Equals(\"IfcMassDensityMeasure\", StringComparison.InvariantCultureIgnoreCase))\n               newPar.ParamType = \"MASS_DENSITY\";\n            else if (propSingle.DataType.Equals(\"IfcArcIndex\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcComplexNumber\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcCompoundPlaneAngleMeasure\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcLineIndex\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcPropertySetDefinitionSet\", StringComparison.InvariantCultureIgnoreCase))\n               newPar.ParamType = \"MULTILINETEXT\";\n            else if (propSingle.DataType.Equals(\"IfcBinary\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcBoxAlignment\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcDate\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcDateTime\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcDescriptiveMeasure\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcDuration\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcFontStyle\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcFontVariant\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcFontWeight\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcGloballyUniqueId\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcIdentifier\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcLabel\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcLanguageId\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcPresentableText\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcText\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcString\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcTextAlignment\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcTextDecoration\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcTextFontName\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcTextTransformation\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcTime\", StringComparison.InvariantCultureIgnoreCase))\n               newPar.ParamType = \"TEXT\";\n            else if (propSingle.DataType.Equals(\"IfcURIReference\", StringComparison.InvariantCultureIgnoreCase))\n               newPar.ParamType = \"URL\";\n            else if (propSingle.DataType.Equals(\"IfcVolumeMeasure\", StringComparison.InvariantCultureIgnoreCase))\n               newPar.ParamType = \"VOLUME\";\n            else if (propSingle.DataType.Equals(\"IfcBoolean\", StringComparison.InvariantCultureIgnoreCase)\n               || propSingle.DataType.Equals(\"IfcLogical\", StringComparison.InvariantCultureIgnoreCase))\n               newPar.ParamType = \"YESNO\";\n            else\n               newPar.ParamType = \"NUMBER\";\n         }\n\n         if (!SharedParamFileDict.ContainsKey(newPar.Name))\n         {\n            SharedParamFileDict.Add(newPar.Name, newPar);\n         }\n         else    // Keep the GUID, but override the details\n         {\n            // If this Property has IfcGuid, use the IfdGuid set in the newPar, otherwise keep the original one\n            if (!hasIfdGuid)\n               newPar.ParamGuid = SharedParamFileDict[newPar.Name].ParamGuid;\n            SharedParamFileDict[newPar.Name] = newPar;     // override the Dict\n         }\n\n         SharedParameterDef newParType = (SharedParameterDef)newPar.Clone();\n         newParType.Name = newParType.Name + \"[Type]\";\n         if (!SharedParamFileTypeDict.ContainsKey(newParType.Name))\n         {\n            SharedParamFileTypeDict.Add(newParType.Name, newParType);\n         }\n         else    // Keep the GUID, but override the details\n         {\n            newParType.ParamGuid = SharedParamFileTypeDict[newParType.Name].ParamGuid;\n            SharedParamFileTypeDict[newParType.Name] = newParType;     // override the Dict\n         }\n\n         if (prop.NameAliases != null)\n         {\n            foreach (NameAlias alias in prop.NameAliases)\n            {\n               LanguageType lang = checkAliasLanguage(alias.lang);\n               outF.WriteLine(\"            ifcPSE.AddLocalizedParameterName(LanguageType.{0}, \\\"{1}\\\");\", lang, alias.Alias);\n            }\n         }\n\n         string calcName = \"Revit.IFC.Export.Exporter.PropertySet.Calculators.\" + prop.Name + \"Calculator\";\n         outF.WriteLine(\"            calcType = System.Reflection.Assembly.GetExecutingAssembly().GetType(\\\"\" + calcName + \"\\\");\");\n         outF.WriteLine(\"            if (calcType != null)\");\n         outF.WriteLine(\"               ifcPSE.PropertyCalculator = (PropertyCalculator) calcType.GetConstructor(Type.EmptyTypes).Invoke(new object[]{});\");\n         outF.WriteLine(\"            {0}.AddEntry(ifcPSE);\", varName);\n         outF.WriteLine(\"\");\n      }\n\n      public static IDictionary<string, SharedParameterDef> processExistingParFile(string parFileName/*, bool isType*/)\n      {\n         IDictionary<string, SharedParameterDef> dictToFill = new Dictionary<string, SharedParameterDef>();\n         //if (isType)\n         //   dictToFill = SharedParamFileTypeDict;\n         //else\n         //   dictToFill = SharedParamFileDict;\n\n         string messageText = null;\n         // Keep original data (for maintaining the GUID) in a dictionary\n         using (StreamReader stSharedParam = File.OpenText(parFileName))\n         {\n            string line;\n            while (!stSharedParam.EndOfStream && (line = stSharedParam.ReadLine()) != null && !string.IsNullOrEmpty(line))\n            {\n               // Copy content to the destination file\n               //destFile.WriteLine(line);\n\n               string[] token = line.Split('\\t');\n               if (token == null || token.Count() == 0)\n                  continue;\n\n               if (!token[0].Equals(\"PARAM\"))\n                  continue;\n\n               SharedParameterDef parDef = new SharedParameterDef();\n               parDef.Param = token[0];\n               try\n               {\n                  parDef.ParamGuid = Guid.Parse(token[1]);\n               }\n               catch\n               {\n                  // Shouldn't be here\n                  continue;\n               }\n\n               if (string.IsNullOrEmpty(token[2]))\n               {\n                  // Shouldn't be here\n                  continue;\n               }\n               parDef.Name = token[2];\n\n               if (token[3] == null)\n                  continue;\n\n               parDef.ParamType = token[3];\n\n               parDef.DataCategory = token[4];\n\n               int grp;\n               if (int.TryParse(token[5], out grp))\n                  parDef.GroupId = grp;\n               else\n                  continue;\n\n               parDef.Visibility = false;\n               if (!string.IsNullOrEmpty(token[6]))\n               {\n                  int vis;\n                  if (int.TryParse(token[6], out vis))\n                     if (vis == 1)\n                        parDef.Visibility = true;\n               }\n\n               if (!string.IsNullOrEmpty(token[7]))\n               {\n                  parDef.Description = token[7];\n               }\n\n               parDef.UserModifiable = false;\n               if (!string.IsNullOrEmpty(token[8]))\n               {\n                  int mod;\n                  if (int.TryParse(token[8], out mod))\n                     if (mod == 1)\n                        parDef.UserModifiable = true;\n               }\n\n               try\n               {\n                  dictToFill.Add(parDef.Name, parDef);\n               }\n               catch (ArgumentException exp)\n               {\n                  messageText += \"\\r\\n\" + parDef.Name + \": \" + exp.Message;\n               }\n            }\n         }\n         return dictToFill;\n      }\n\n      public PsetProperty getPropertyDef(XNamespace ns, XElement pDef, Dictionary<ItemsInPsetQtoDefs, string> psetOrQtoSet)\n      {\n         try\n         {\n            PsetProperty prop = new PsetProperty();\n            if (pDef.Attribute(\"ifdguid\") != null)\n               prop.IfdGuid = pDef.Attribute(\"ifdguid\").Value;\n            prop.Name = pDef.Element(ns + \"Name\").Value;\n            IList<NameAlias> aliases = new List<NameAlias>();\n            XElement nAliasesElem = pDef.Elements(ns + \"NameAliases\").FirstOrDefault();\n            if (nAliasesElem != null)\n            {\n               var nAliases = from el in nAliasesElem.Elements(ns + \"NameAlias\") select el;\n               foreach (XElement alias in nAliases)\n               {\n                  NameAlias nameAlias = new NameAlias();\n                  nameAlias.Alias = alias.Value;\n                  nameAlias.lang = alias.Attribute(\"lang\").Value;\n                  aliases.Add(nameAlias);\n               }\n            }\n            if (aliases.Count > 0)\n               prop.NameAliases = aliases;\n\n            PropertyDataType dataTyp = null;\n            var propType = pDef.Elements(ns + psetOrQtoSet[ItemsInPsetQtoDefs.PropertyOrQtoType]).FirstOrDefault();\n\n            // Process QtoTypeFirst here\n            if (propType.Value.StartsWith(\"Q_\"))\n            {\n               // Quantity type refers to IfcQuantity__ instance that has __Value and Formula. But the Formula seems not really used yet in the standard Qto\n               string qtoType = propType.Value;\n               prop.PropertyType = new PropertySingleValue();\n               if (qtoType.Equals(\"Q_LENGTH\"))\n               {\n                  (prop.PropertyType as PropertySingleValue).DataType = \"IfcLengthMeasure\";\n               }\n               else if (qtoType.Equals(\"Q_AREA\"))\n               {\n                  (prop.PropertyType as PropertySingleValue).DataType = \"IfcAreaMeasure\";\n               }\n               else if (qtoType.Equals(\"Q_VOLUME\"))\n               {\n                  (prop.PropertyType as PropertySingleValue).DataType = \"IfcVolumeMeasure\";\n               }\n               else if (qtoType.Equals(\"Q_COUNT\"))\n               {\n                  (prop.PropertyType as PropertySingleValue).DataType = \"IfcCountMeasure\";\n               }\n               else if (qtoType.Equals(\"Q_TIME\"))\n               {\n                  (prop.PropertyType as PropertySingleValue).DataType = \"IfcTimeMeasure\";\n               }\n               else if (qtoType.Equals(\"Q_WEIGHT\"))\n               {\n                  (prop.PropertyType as PropertySingleValue).DataType = \"IfcMassMeasure\";\n               }\n               else\n               {\n                  //Default\n                  (prop.PropertyType as PropertySingleValue).DataType = \"IfcLabel\";\n               }\n               return prop;\n            }\n\n            XElement propDatType = propType.Elements().FirstOrDefault();\n            if (propDatType == null)\n            {\n               logF.WriteLine(\"%Warning: Missing PropertyType for {0}.{1}\", pDef.Parent.Parent.Element(ns + \"Name\").Value, prop.Name);\n               return prop;\n            }\n\n            if (propDatType.Name.LocalName.Equals(\"TypePropertySingleValue\"))\n            {\n               XElement dataType = propDatType.Element(ns + \"DataType\");\n               PropertySingleValue sv = new PropertySingleValue();\n               if (dataType.Attribute(\"type\") != null)\n               {\n                  sv.DataType = dataType.Attribute(\"type\").Value;\n               }\n               else\n               {\n                  logF.WriteLine(\"%Warning: Missing TypePropertySingleValue for {0}.{1}\", pDef.Parent.Parent.Element(ns + \"Name\").Value, prop.Name);\n                  // Hndle a known issue of missing data type for a specific property\n                  if (prop.Name.Equals(\"Reference\", StringComparison.InvariantCultureIgnoreCase))\n                     sv.DataType = \"IfcIdentifier\";\n                  else\n                     sv.DataType = \"IfcLabel\";     // Set this to default if missing\n               }\n               dataTyp = sv;\n            }\n            else if (propDatType.Name.LocalName.Equals(\"TypePropertyReferenceValue\"))\n            {\n               PropertyReferenceValue rv = new PropertyReferenceValue();\n               // Older versions uses Element DataType!\n               XElement dt = propDatType.Element(ns + \"DataType\");\n               if (dt == null)\n               {\n                  rv.RefEntity = propDatType.Attribute(\"reftype\").Value;\n               }\n               else\n               {\n                  rv.RefEntity = dt.Attribute(\"type\").Value;\n               }\n               dataTyp = rv;\n            }\n            else if (propDatType.Name.LocalName.Equals(\"TypePropertyEnumeratedValue\"))\n            {\n               PropertyEnumeratedValue pev = new PropertyEnumeratedValue();\n               var enumItems = propDatType.Descendants(ns + \"EnumItem\");\n               if (enumItems.Count() > 0)\n               {\n                  pev.Name = propDatType.Element(ns + \"EnumList\").Attribute(\"name\").Value;\n                  pev.EnumDef = new List<PropertyEnumItem>();\n                  foreach (var en in enumItems)\n                  {\n                     string enumItemName = en.Value.ToString();\n                     IEnumerable<XElement> consDef = null;\n                     if (propDatType.Element(ns + \"ConstantList\") != null)\n                     {\n                        consDef = from el in propDatType.Element(ns + \"ConstantList\").Elements(ns + \"ConstantDef\")\n                                  where (el.Element(ns + \"Name\").Value.Equals(enumItemName, StringComparison.CurrentCultureIgnoreCase))\n                                  select el;\n                     }\n\n                     if (propDatType.Element(ns + \"ConstantList\") != null)\n                     {\n                        var consList = propDatType.Element(ns + \"ConstantList\").Elements(ns + \"ConstantDef\");\n                        if (consList != null && consList.Count() != enumItems.Count())\n                        {\n                           logF.WriteLine(\"%Warning: EnumList (\" + enumItems.Count().ToString() + \") is not consistent with the ConstantList (\"\n                              + consList.Count().ToString() + \") for: {0}.{1}\",\n                              pDef.Parent.Parent.Element(ns + \"Name\").Value, prop.Name);\n                        }\n                     }\n\n                     if (consDef != null && consDef.Count() > 0)\n                     {\n                        foreach (var cD in consDef)\n                        {\n                           PropertyEnumItem enumItem = new PropertyEnumItem();\n                           enumItem.EnumItem = cD.Elements(ns + \"Name\").FirstOrDefault().Value;\n                           enumItem.Aliases = new List<NameAlias>();\n                           var eAliases = from el in cD.Elements(ns + \"NameAliases\").FirstOrDefault().Elements(ns + \"NameAlias\") select el;\n                           if (eAliases.Count() > 0)\n                           {\n                              foreach (var aliasItem in eAliases)\n                              {\n                                 NameAlias nal = new NameAlias();\n                                 nal.Alias = aliasItem.Value;\n                                 nal.lang = aliasItem.Attribute(\"lang\").Value;\n                                 enumItem.Aliases.Add(nal);\n                              }\n                           }\n                           pev.EnumDef.Add(enumItem);\n                        }\n                     }\n                     else\n                     {\n                        PropertyEnumItem enumItem = new PropertyEnumItem();\n                        enumItem.EnumItem = enumItemName;\n                        enumItem.Aliases = new List<NameAlias>();\n                        pev.EnumDef.Add(enumItem);\n                     }\n                  }\n               }\n               else\n               {\n                  {\n                     logF.WriteLine(\"%Warning: EnumList {0}.{1} is empty!\", pDef.Parent.Parent.Element(ns + \"Name\").Value, prop.Name);\n                  }\n                  // If EnumList is empty, try to see whether ConstantDef has values. The Enum item name will be taken from the ConstantDef.Name\n                  pev.Name = \"PEnum_\" + prop.Name;\n                  pev.EnumDef = new List<PropertyEnumItem>();\n                  var consDef = from el in propDatType.Element(ns + \"ConstantList\").Elements(ns + \"ConstantDef\")\n                                select el;\n                  if (consDef != null && consDef.Count() > 0)\n                  {\n                     foreach (var cD in consDef)\n                     {\n                        PropertyEnumItem enumItem = new PropertyEnumItem();\n                        enumItem.EnumItem = cD.Elements(ns + \"Name\").FirstOrDefault().Value;\n                        enumItem.Aliases = new List<NameAlias>();\n                        var eAliases = from el in cD.Elements(ns + \"NameAliases\").FirstOrDefault().Elements(ns + \"NameAlias\") select el;\n                        if (eAliases.Count() > 0)\n                           foreach (var aliasItem in eAliases)\n                           {\n                              NameAlias nal = new NameAlias();\n                              nal.Alias = aliasItem.Value;\n                              nal.lang = aliasItem.Attribute(\"lang\").Value;\n                              enumItem.Aliases.Add(nal);\n                           }\n                        pev.EnumDef.Add(enumItem);\n                     }\n                  }\n               }\n               dataTyp = pev;\n            }\n            else if (propDatType.Name.LocalName.Equals(\"TypePropertyBoundedValue\"))\n            {\n               XElement dataType = propDatType.Element(ns + \"DataType\");\n               PropertyBoundedValue bv = new PropertyBoundedValue();\n               bv.DataType = dataType.Attribute(\"type\").Value;\n               dataTyp = bv;\n            }\n            else if (propDatType.Name.LocalName.Equals(\"TypePropertyListValue\"))\n            {\n               XElement dataType = propDatType.Descendants(ns + \"DataType\").FirstOrDefault();\n               PropertyListValue lv = new PropertyListValue();\n               lv.DataType = dataType.Attribute(\"type\").Value;\n               dataTyp = lv;\n            }\n            else if (propDatType.Name.LocalName.Equals(\"TypePropertyTableValue\"))\n            {\n               PropertyTableValue tv = new PropertyTableValue();\n               var tve = propDatType.Element(ns + \"Expression\");\n               if (tve != null)\n                  tv.Expression = tve.Value;\n               XElement el = propDatType.Element(ns + \"DefiningValue\");\n               if (el != null)\n               {\n                  XElement el2 = propDatType.Element(ns + \"DefiningValue\").Element(ns + \"DataType\");\n                  if (el2 != null)\n                     tv.DefiningValueType = el2.Attribute(\"type\").Value;\n               }\n               el = propDatType.Element(ns + \"DefinedValue\");\n               if (el != null)\n               {\n                  XElement el2 = propDatType.Element(ns + \"DefinedValue\").Element(ns + \"DataType\");\n                  if (el2 != null)\n                     tv.DefinedValueType = el2.Attribute(\"type\").Value;\n               }\n               dataTyp = tv;\n            }\n            else if (propDatType.Name.LocalName.Equals(\"TypeComplexProperty\"))\n            {\n               ComplexProperty compProp = new ComplexProperty();\n               if (propDatType.Attribute(\"name\") != null)\n                  compProp.Name = propDatType.Attribute(\"name\").Value;\n               compProp.Properties = new List<PsetProperty>();\n               foreach (XElement cpPropDef in propDatType.Elements(ns + \"PropertyDef\"))\n               {\n                  PsetProperty pr = getPropertyDef(ns, cpPropDef, psetOrQtoSet);\n                  if (pr == null)\n                  {\n                     logF.WriteLine(\"%Error: Mising PropertyType data in complex property {0}.{1}.{2}\", propDatType.Parent.Parent.Element(ns + \"Name\").Value,\n                        prop.Name, cpPropDef.Element(ns + \"Name\").Value);\n                  }\n                  else\n                     compProp.Properties.Add(pr);\n               }\n               dataTyp = compProp;\n            }\n            prop.PropertyType = dataTyp;\n\n            return prop;\n         }\n         catch\n         {\n            return null;\n         }\n      }\n\n      PsetDefinition Process(string schemaVersion, FileInfo PSDfileName, Dictionary<ItemsInPsetQtoDefs, string> psetOrQtoSet)\n      {\n         PsetDefinition pset = new PsetDefinition();\n         XDocument doc = XDocument.Load(PSDfileName.FullName);\n\n         // Older versions of psd uses namespace!\n         var nsInfo = doc.Root.Attributes(\"xmlns\").FirstOrDefault();\n         XNamespace ns = \"\";\n         if (nsInfo != null)\n            ns = nsInfo.Value;\n\n         pset.Name = doc.Elements(ns + psetOrQtoSet[ItemsInPsetQtoDefs.PropertySetOrQtoSetDef].ToString()).Elements(ns + \"Name\").FirstOrDefault().Value;\n         pset.IfcVersion = doc.Elements(ns + psetOrQtoSet[ItemsInPsetQtoDefs.PropertySetOrQtoSetDef].ToString()).Elements(ns + \"IfcVersion\").FirstOrDefault().Attribute(\"version\").Value.Replace(\" \", \"\");\n         if (pset.IfcVersion.StartsWith(\"2\"))\n         {\n            if (pset.IfcVersion.Equals(\"2X\", StringComparison.CurrentCultureIgnoreCase)\n               || pset.IfcVersion.Equals(\"2X2\", StringComparison.CurrentCultureIgnoreCase)\n               || pset.IfcVersion.Equals(\"2.X\", StringComparison.CurrentCultureIgnoreCase))\n               pset.IfcVersion = \"IFC2X2\";  // BUG in the documentation. It ony contains \"2x\" instead of \"2x2\"\n            else if (pset.IfcVersion.StartsWith(\"IFC2X3\", StringComparison.CurrentCultureIgnoreCase))\n               pset.IfcVersion = \"IFC2X3\";\n            else\n               pset.IfcVersion = \"IFC\" + pset.IfcVersion.ToUpper();   // Namespace cannot start with a number. e.g. make sure 2x3 -> IFC2x3\n         }\n         else if (pset.IfcVersion.StartsWith(\"IFC4X3\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            pset.IfcVersion = \"IFC4X3\";\n         }\n         else if (pset.IfcVersion.StartsWith(\"IFC4\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            pset.IfcVersion = pset.IfcVersion.ToUpper();\n         }\n         else\n         {\n            logF.WriteLine(\"Unrecognized IfcVersion: \", pset.IfcVersion);\n         }\n\n         if (doc.Element(ns + psetOrQtoSet[ItemsInPsetQtoDefs.PropertySetOrQtoSetDef].ToString()).Attribute(\"ifdguid\") != null)\n            pset.IfdGuid = doc.Element(ns + psetOrQtoSet[ItemsInPsetQtoDefs.PropertySetOrQtoSetDef].ToString()).Attribute(\"ifdguid\").Value;\n         // Get applicable classes\n         IEnumerable<XElement> applicableClasses = from el in doc.Descendants(ns + \"ClassName\") select el;\n         IList<string> applClassesList = new List<string>();\n         foreach (XElement applClass in applicableClasses)\n         {\n            string className = ProcessPsetDefinition.removeInvalidNName(applClass.Value);\n            if (!string.IsNullOrEmpty(className))\n               applClassesList.Add(className);\n         }\n\n         pset.ApplicableClasses = applClassesList;\n\n         XElement applType = doc.Elements(ns + psetOrQtoSet[ItemsInPsetQtoDefs.PropertySetOrQtoSetDef].ToString()).Elements(ns + \"ApplicableTypeValue\").FirstOrDefault();\n         if (applType != null)\n         {\n            string applicableType = applType.Value;\n            if (!string.IsNullOrEmpty(applicableType) && !applicableType.Equals(\"N/A\", StringComparison.InvariantCultureIgnoreCase))\n            {\n               // Remove \"SELF\\\" in the applicable type\n               if (applicableType.Contains(\"SELF\\\\\"))\n                  applicableType = applicableType.Replace(\"SELF\\\\\", \"\");\n\n               string[] applTypeStr = applicableType.Split('/', '.', '=');\n               pset.ApplicableType = applTypeStr[0];\n               pset.PredefinedType = GetApplicablePredefinedType(applTypeStr);\n\n               // If the applicable type contains more than 1 entry, add them into the applicable classes\n               string[] addClasses = pset.ApplicableType.Split(',');\n               if (addClasses.Count() > 1)\n               {\n                  foreach (string addClass in addClasses)\n                  {\n                     string addClassTr = addClass.TrimStart().TrimEnd();\n                     if (!pset.ApplicableClasses.Contains(addClassTr))\n                        pset.ApplicableClasses.Add(addClassTr);\n                  }\n               }\n            }\n         }\n\n         // Shouldn't be here, but some time the IFC documentation is not good\n         if (pset.ApplicableClasses.Count == 0)\n         {\n            logF.WriteLine(\"%Error - This pset is missing applicable class information: \" + pset.IfcVersion + \" \" + pset.Name);\n            // Special handling of problematic issue\n            #region IFCSpecialHandling\n            if (pset.IfcVersion.Equals(\"IFC4\", StringComparison.InvariantCultureIgnoreCase))\n            {\n               if (pset.Name.Equals(\"Pset_CivilElementCommon\"))\n                  pset.ApplicableClasses.Add(\"IfcCivilElement\");\n               else if (pset.Name.Equals(\"Pset_ElectricFlowStorageDevicePHistory\", StringComparison.InvariantCultureIgnoreCase))\n                  pset.ApplicableClasses.Add(\"IfcElectricFlowStorageDevice\");\n               else if (pset.Name.Equals(\"Pset_ElementAssemblyCommon\", StringComparison.InvariantCultureIgnoreCase))\n                  pset.ApplicableClasses.Add(\"IfcElementAssembly\");\n               else if (pset.Name.Equals(\"Pset_SpatialZoneCommon\", StringComparison.InvariantCultureIgnoreCase))\n                  pset.ApplicableClasses.Add(\"IfcSpatialZone\");\n            }\n            else if (pset.IfcVersion.Equals(\"IFC2X2\", StringComparison.InvariantCultureIgnoreCase))\n            {\n               if (pset.Name.Equals(\"Pset_AnalogInput\"))\n               {\n                  pset.ApplicableClasses.Add(\"IfcDistributionControlElement\");\n               }\n               else if (pset.Name.Equals(\"Pset_AnalogOutput\", StringComparison.InvariantCultureIgnoreCase))\n               {\n                  pset.ApplicableClasses.Add(\"IfcDistributionControlElement\");\n               }\n               else if (pset.Name.Equals(\"Pset_BinaryInput\", StringComparison.InvariantCultureIgnoreCase))\n               {\n                  pset.ApplicableClasses.Add(\"IfcDistributionControlElement\");\n               }\n               else if (pset.Name.Equals(\"Pset_BinaryOutput\", StringComparison.InvariantCultureIgnoreCase))\n               {\n                  pset.ApplicableClasses.Add(\"IfcDistributionControlElement\");\n               }\n               else if (pset.Name.Equals(\"Pset_MultiStateInput\", StringComparison.InvariantCultureIgnoreCase))\n               {\n                  pset.ApplicableClasses.Add(\"IfcDistributionControlElement\");\n               }\n               else if (pset.Name.Equals(\"Pset_MultiStateOutput\", StringComparison.InvariantCultureIgnoreCase))\n               {\n                  pset.ApplicableClasses.Add(\"IfcDistributionControlElement\");\n               }\n               else if (pset.Name.Equals(\"Pset_ElectricalDeviceCommon\", StringComparison.InvariantCultureIgnoreCase))\n               {\n                  pset.ApplicableClasses.Add(\"IfcDistributionElement\");\n               }\n               else if (pset.Name.Equals(\"Pset_DuctConnection\", StringComparison.InvariantCultureIgnoreCase))\n               {\n                  pset.ApplicableClasses.Add(\"IfcDuctSegmentType\");\n                  pset.ApplicableClasses.Add(\"IfcDuctFittingType\");\n               }\n               else if (pset.Name.Equals(\"Pset_DuctDesignCriteria\", StringComparison.InvariantCultureIgnoreCase))\n               {\n                  pset.ApplicableClasses.Add(\"IfcSystem\");\n                  pset.ApplicableClasses.Add(\"IfcDuctSegmentType\");\n                  pset.ApplicableClasses.Add(\"IfcDuctFittingType\");\n               }\n               else if (pset.Name.Equals(\"Pset_PipeConnection\", StringComparison.InvariantCultureIgnoreCase))\n               {\n                  pset.ApplicableClasses.Add(\"IfcPipeSegmentType\");\n                  pset.ApplicableClasses.Add(\"IfcPipeFittingType\");\n               }\n               else if (pset.Name.Equals(\"Pset_PipeConnectionFlanged\", StringComparison.InvariantCultureIgnoreCase))\n               {\n                  pset.ApplicableClasses.Add(\"IfcPipeSegmentType\");\n                  pset.ApplicableClasses.Add(\"IfcPipeFittingType\");\n               }\n               else if (pset.Name.Equals(\"Pset_AirSideSystemInformation\", StringComparison.InvariantCultureIgnoreCase))\n               {\n                  pset.ApplicableClasses.Add(\"IfcSystem\");\n               }\n               else if (pset.Name.Equals(\"Pset_FireRatingProperties\", StringComparison.InvariantCultureIgnoreCase))\n               {\n                  pset.ApplicableClasses.Add(\"IfcElement\");\n                  pset.ApplicableClasses.Add(\"IfcSpatialStructureElement\");\n               }\n               else if (pset.Name.Equals(\"Pset_ThermalLoadAggregate\", StringComparison.InvariantCultureIgnoreCase))\n               {\n                  pset.ApplicableClasses.Add(\"IfcElement\");\n                  pset.ApplicableClasses.Add(\"IfcSpatialStructureElement\");\n                  pset.ApplicableClasses.Add(\"IfcZone\");\n               }\n               else if (pset.Name.Equals(\"Pset_ThermalLoadDesignCriteria\", StringComparison.InvariantCultureIgnoreCase))\n               {\n                  pset.ApplicableClasses.Add(\"IfcElement\");\n                  pset.ApplicableClasses.Add(\"IfcSpatialStructureElement\");\n                  pset.ApplicableClasses.Add(\"IfcZone\");\n                  pset.ApplicableClasses.Add(\"IfcBuilding\");\n               }\n               else if (pset.Name.Equals(\"Pset_ConcreteElementGeneral\", StringComparison.InvariantCultureIgnoreCase))\n               {\n                  pset.ApplicableClasses.Add(\"IfcBuildingElement\");\n               }\n               else if (pset.Name.Equals(\"Pset_ConcreteElementQuantityGeneral\", StringComparison.InvariantCultureIgnoreCase))\n               {\n                  pset.ApplicableClasses.Add(\"IfcBuildingElement\");\n               }\n               else if (pset.Name.Equals(\"Pset_ConcreteElementSurfaceFinishQuantityGeneral\", StringComparison.InvariantCultureIgnoreCase))\n               {\n                  pset.ApplicableClasses.Add(\"IfcBuildingElement\");\n               }\n               else if (pset.Name.Equals(\"Pset_PrecastConcreteElementGeneral\", StringComparison.InvariantCultureIgnoreCase))\n               {\n                  pset.ApplicableClasses.Add(\"IfcBuildingElement\");\n               }\n            }\n            #endregion\n         }\n\n         // If after special handling the pset still has no applicable classes, discard it\n         if (pset.ApplicableClasses.Count == 0)\n         {\n            logF.WriteLine(\"%Warning - Discarding pset with no applicable classes after special handling: \" + pset.IfcVersion + \" \" + pset.Name);\n            return null;\n         }\n\n         HashSet<PsetProperty> propSet = new HashSet<PsetProperty>(new PropertyComparer());\n         //var pDefs = from p in doc.Descendants(ns + psetOrQtoSet[ItemsInPsetQtoDefs.PropertyOrQtoDef].ToString()) select p;\n         XElement psetD = doc.Element(ns + psetOrQtoSet[ItemsInPsetQtoDefs.PropertySetOrQtoSetDef].ToString());\n         XElement propDefs = psetD.Element(ns + psetOrQtoSet[ItemsInPsetQtoDefs.PropertyOrQtoDefs].ToString());\n         var pDefs = from p in propDefs.Elements(ns + psetOrQtoSet[ItemsInPsetQtoDefs.PropertyOrQtoDef].ToString()) select p;\n         foreach (XElement pDef in pDefs)\n         {\n            PsetProperty prop = getPropertyDef(ns, pDef, psetOrQtoSet);\n            SharedParameterDef shPar = new SharedParameterDef();\n            if (prop == null)\n            {\n               logF.WriteLine(\"%Error: Mising PropertyType data for {0}.{1}\", pset.Name, pDef.Element(ns + \"Name\").Value);\n            }\n            else\n            {\n               propSet.Add(prop);\n            }\n         }\n         pset.properties = propSet;\n\n         return pset;\n      }\n\n      private string GetApplicablePredefinedType(string[] applTypeStr)\n      {\n         // Applicable type is a single entity name\n         if (applTypeStr.Count() < 2)\n            return null;\n\n         // Do not fill the predefinedType for IfcMaterial applicable type\n         // For example in ifc4 the applicable type of Pset_MaterialConcrete is 'IfcMaterial/Concrete'\n         // I don't see any reasons to restrict the material properties export for material because:\n         // 1. These properties are exported only if the customer add and fill the corresponding SharedParameter\n         // 2. In fact IfcMaterial's don't have PredefinedType\n         // 3. The Applicable type string was fixed in ifc4x3 schema (removed predefined type name)\n         // 4. In Revit materials can be Basic, Generic or without Type at all if the 'Physical' assert isn't added\n         if (applTypeStr[0].Equals(\"IfcMaterial\", StringComparison.InvariantCultureIgnoreCase))\n            return null;\n\n         return applTypeStr[applTypeStr.Count() - 1].Replace(\"\\\"\", \"\").TrimEnd(',');\n      }\n\n      /// <summary>\n      /// Process HTML files (Pset_*.htm or Qto_*.htm) from lexical folders\n      /// </summary>\n      private void ProcessHtmlFiles(string schemaName, DirectoryInfo psdFolder, Dictionary<ItemsInPsetQtoDefs, string> psetOrQtoSet)\n      {\n         var htmlParser = new HtmlPsetDefinitionParser(logF);\n         string pattern = psetOrQtoSet[ItemsInPsetQtoDefs.PropertySetOrQtoSetDef].Equals(\"PropertySetDef\") \n            ? PSET_HTM_PATTERN : QTO_HTM_PATTERN;\n         \n         foreach (FileInfo file in psdFolder.GetFiles(pattern))\n         {\n            PropertySet.PsetDefinition psetD = htmlParser.ProcessHtmlFile(schemaName, file, psetOrQtoSet);\n            AddPsetDefToDict(schemaName, psetD);\n         }\n      }\n\n      /// <summary>\n      /// Process XML files (Pset_*.xml or Qto_*.xml) from psd folders\n      /// </summary>\n      private void ProcessXmlFiles(string schemaName, DirectoryInfo psdFolder, Dictionary<ItemsInPsetQtoDefs, string> psetOrQtoSet)\n      {\n         string pattern = psetOrQtoSet[ItemsInPsetQtoDefs.PropertySetOrQtoSetDef].Equals(\"PropertySetDef\") \n            ? PSET_XML_PATTERN : QTO_XML_PATTERN;\n         \n         foreach (FileInfo file in psdFolder.GetFiles(pattern))\n         {\n            PropertySet.PsetDefinition psetD = Process(schemaName, file, psetOrQtoSet);\n            AddPsetDefToDict(schemaName, psetD);\n         }\n      }\n\n      public void ProcessSchemaPsetDef(string schemaName, DirectoryInfo psdFolder, Dictionary<ItemsInPsetQtoDefs, string> psetOrQtoSet)\n      {\n         // Check if this is a lexical folder (contains HTML files)\n         bool isLexicalFolder = psdFolder.Name.Equals(\"lexical\", StringComparison.InvariantCultureIgnoreCase);\n         \n         if (isLexicalFolder)\n            ProcessHtmlFiles(schemaName, psdFolder, psetOrQtoSet);\n         else\n            ProcessXmlFiles(schemaName, psdFolder, psetOrQtoSet);\n      }\n\n      public void ProcessPreIfc4QtoSets(string schemaName)\n      {\n         // The QTO set definitions are taken from the web documentation\n         // because they are not represented in the official schema files for IFC2x2 and IFC2x3.\n         if (schemaName.StartsWith(\"IFC2X2\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            AddPsetDefToDict(schemaName, Qto_SiteBaseQuantitiesIFC2x2(schemaName));\n            AddPsetDefToDict(schemaName, Qto_BuildingBaseQuantitiesIFC2x2(schemaName));\n            AddPsetDefToDict(schemaName, Qto_BuildingStoreyBaseQuantitiesIFC2x2(schemaName));\n            AddPsetDefToDict(schemaName, Qto_SpaceBaseQuantitiesIFC2x2(schemaName));\n            AddPsetDefToDict(schemaName, Qto_BeamBaseQuantitiesIFC2x2(schemaName));\n            AddPsetDefToDict(schemaName, Qto_ColumnBaseQuantitiesIFC2x2(schemaName));\n            AddPsetDefToDict(schemaName, Qto_MemberBaseQuantitiesIFC2x2(schemaName));\n            AddPsetDefToDict(schemaName, Qto_CoveringBaseQuantitiesIFC2x2(schemaName));\n            AddPsetDefToDict(schemaName, Qto_OpeningElementBaseQuantitiesIFC2x2(schemaName));\n            AddPsetDefToDict(schemaName, Qto_SlabBaseQuantitiesIFC2x2(schemaName));\n            AddPsetDefToDict(schemaName, Qto_RoofBaseQuantitiesIFC2x2(schemaName));\n            AddPsetDefToDict(schemaName, Qto_WallBaseQuantitiesIFC2x2(schemaName));\n         }\n         else if (schemaName.StartsWith(\"IFC2X3\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            AddPsetDefToDict(schemaName, Qto_SiteBaseQuantitiesIFC2x3(schemaName));\n            AddPsetDefToDict(schemaName, Qto_BuildingBaseQuantitiesIFC2x3(schemaName));\n            AddPsetDefToDict(schemaName, Qto_BuildingStoreyBaseQuantitiesIFC2x3(schemaName));\n            AddPsetDefToDict(schemaName, Qto_SpaceBaseQuantitiesIFC2x3(schemaName));\n            AddPsetDefToDict(schemaName, Qto_BeamBaseQuantitiesIFC2x3(schemaName));\n            AddPsetDefToDict(schemaName, Qto_ColumnBaseQuantitiesIFC2x3(schemaName));\n            AddPsetDefToDict(schemaName, Qto_MemberBaseQuantitiesIFC2x3(schemaName));\n            AddPsetDefToDict(schemaName, Qto_CoveringBaseQuantitiesIFC2x3(schemaName));\n            AddPsetDefToDict(schemaName, Qto_OpeningElementBaseQuantitiesIFC2x3(schemaName));\n            AddPsetDefToDict(schemaName, Qto_ProjectionElementBaseQuantitiesIFC2x3(schemaName));\n            AddPsetDefToDict(schemaName, Qto_SlabBaseQuantitiesIFC2x3(schemaName));\n            AddPsetDefToDict(schemaName, Qto_RoofBaseQuantitiesIFC2x3(schemaName));\n            AddPsetDefToDict(schemaName, Qto_WallBaseQuantitiesIFC2x3(schemaName));\n         }\n      }\n\n      private PsetDefinition Qto_SiteBaseQuantitiesIFC2x2(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_SiteBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcSite\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"SitePerimeter\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"SiteArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_BuildingBaseQuantitiesIFC2x2(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_BuildingBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcBuilding\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"TotalHeight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"SiteCoverage\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossFloorArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetFloorArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_BuildingStoreyBaseQuantitiesIFC2x2(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_BuildingStoreyBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcBuildingStorey\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"TotalHeight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"SiteCoverage\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetFloorArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_SpaceBaseQuantitiesIFC2x2(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_SpaceBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcSpace\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"AverageHeight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"AverageClearHeight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"AverageGrossHeight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"Perimeter\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"Area\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"Volume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_CoveringBaseQuantitiesIFC2x2(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_CoveringBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcCovering\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"CoveredArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_BeamBaseQuantitiesIFC2x2(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_BeamBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcBeam\" };\n         psetD.properties = new HashSet<PsetProperty>();\n         AddQuantitiesForStructuralElement(ref psetD);\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_ColumnBaseQuantitiesIFC2x2(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_ColumnBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcColumn\" };\n         psetD.properties = new HashSet<PsetProperty>();\n         AddQuantitiesForStructuralElement(ref psetD);\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_MemberBaseQuantitiesIFC2x2(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_MemberBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcMember\" };\n         psetD.properties = new HashSet<PsetProperty>();\n         AddQuantitiesForStructuralElement(ref psetD);\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_OpeningElementBaseQuantitiesIFC2x2(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_OpeningElementBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcOpeningElement\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"OpeningArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_WallBaseQuantitiesIFC2x2(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_WallBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcWall\", \"IfcWallStandardCase\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NominalLength\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossFootPrintArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetFootPrintArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossSideAreaLeft\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetSideAreaLeft\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossSideAreaRight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetSideAreaRight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_SlabBaseQuantitiesIFC2x2(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_SlabBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcSlab\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"Perimeter\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"SurfaceArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossWeight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcMassMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetWeight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcMassMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_RoofBaseQuantitiesIFC2x2(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_RoofBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcRoof\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"TotalSurfaceArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_SiteBaseQuantitiesIFC2x3(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_SiteBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcSite\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NominalPerimeter\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NominalArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_BuildingBaseQuantitiesIFC2x3(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_BuildingBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcBuilding\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NominalHeight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NominalArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossFloorArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetFloorArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_BuildingStoreyBaseQuantitiesIFC2x3(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_BuildingStoreyBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcBuildingStorey\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NominalHeight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossFloorArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetFloorArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_SpaceBaseQuantitiesIFC2x3(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_SpaceBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcSpace\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NominalHeight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"ClearHeight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossPerimeter\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetPerimeter\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossFloorArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetFloorArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossCeilingArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetCeilingArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossWallArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetWallArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_CoveringBaseQuantitiesIFC2x3(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_CoveringBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcCovering\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private void AddQuantitiesForStructuralElement(ref PsetDefinition psetD)\n      {\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NominalLength\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"CrossSectionArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"OuterSurfaceArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"TotalSurfaceArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossWeight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcMassMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetWeight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcMassMeasure\" }\n         });\n      }\n\n      private PsetDefinition Qto_BeamBaseQuantitiesIFC2x3(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_BeamBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcBeam\" };\n         psetD.properties = new HashSet<PsetProperty>();\n         AddQuantitiesForStructuralElement(ref psetD);\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_ColumnBaseQuantitiesIFC2x3(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_ColumnBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcColumn\" };\n         psetD.properties = new HashSet<PsetProperty>();\n         AddQuantitiesForStructuralElement(ref psetD);\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_MemberBaseQuantitiesIFC2x3(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_MemberBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcMember\" };\n         psetD.properties = new HashSet<PsetProperty>();\n         AddQuantitiesForStructuralElement(ref psetD);\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_OpeningElementBaseQuantitiesIFC2x3(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_OpeningElementBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcOpeningElement\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NominalArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NominalVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_ProjectionElementBaseQuantitiesIFC2x3(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_ProjectionElementBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcProjectionElement\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NominalArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NominalVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_WallBaseQuantitiesIFC2x3(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_WallBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcWall\", \"IfcWallStandardCase\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NominalLength\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NominalWidth\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NominalHeight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossFootPrintArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetFootPrintArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossSideArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetSideArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossSideAreaLeft\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetSideAreaLeft\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossSideAreaRight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetSideAreaRight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_SlabBaseQuantitiesIFC2x3(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_SlabBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcSlab\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NominalWidth\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"Perimeter\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetVolume\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVolumeMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"GrossWeight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcMassMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"NetWeight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcMassMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition Qto_RoofBaseQuantitiesIFC2x3(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"Qto_RoofBaseQuantities\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcRoof\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"TotalSurfaceArea\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcAreaMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      public void ProcessPredefinedPsets(string schemaName)\n      {\n         AddPsetDefToDict(schemaName, IfcDoorLiningProperties(schemaName));\n         AddPsetDefToDict(schemaName, IfcDoorPanelProperties(schemaName));\n         AddPsetDefToDict(schemaName, IfcPermeableCoveringProperties(schemaName));\n         AddPsetDefToDict(schemaName, IfcReinforcementDefinitionProperties(schemaName));\n         AddPsetDefToDict(schemaName, IfcWindowLiningProperties(schemaName));\n         AddPsetDefToDict(schemaName, IfcWindowPanelProperties(schemaName));\n         if (schemaName.StartsWith(\"ifc2x2\", StringComparison.InvariantCultureIgnoreCase)\n            || schemaName.StartsWith(\"ifc2x3\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            AddPsetDefToDict(schemaName, IfcMechanicalMaterialProperties(schemaName));\n            AddPsetDefToDict(schemaName, IfcMechanicalSteelMaterialProperties(schemaName));\n            AddPsetDefToDict(schemaName, IfcMechanicalConcreteMaterialProperties(schemaName));\n            AddPsetDefToDict(schemaName, IfcThermalMaterialProperties(schemaName));\n            AddPsetDefToDict(schemaName, IfcHygroscopicMaterialProperties(schemaName));\n            AddPsetDefToDict(schemaName, IfcGeneralMaterialProperties(schemaName));\n            AddPsetDefToDict(schemaName, IfcOpticalMaterialProperties(schemaName));\n            AddPsetDefToDict(schemaName, IfcWaterProperties(schemaName));\n            AddPsetDefToDict(schemaName, IfcFuelProperties(schemaName));\n            AddPsetDefToDict(schemaName, IfcProductsOfCombustionProperties(schemaName));\n         }\n      }\n\n      private PsetDefinition IfcDoorLiningProperties(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"IfcDoorLiningProperties\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcDoor\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"LiningDepth\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"ThresholdDepth\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"TransomOffset\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"LiningOffset\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"ThresholdOffset\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"CasingThickness\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"CasingDepth\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         if (schemaName.StartsWith(\"ifc2x2\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            psetD.ApplicableClasses.Add(\"IfcDoorStyle\");\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"LiningThickness\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n            });\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"ThresholdThickness\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n            });\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"TransomThickness\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n            });\n         }\n         else if (schemaName.StartsWith(\"ifc2x3\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            psetD.ApplicableClasses.Add(\"IfcDoorStyle\");\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"LiningThickness\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n            });\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"ThresholdThickness\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n            });\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"TransomThickness\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n            });\n         }\n         else if (schemaName.Equals(\"ifc4\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            psetD.ApplicableClasses.Add(\"IfcDoorType\");\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"LiningThickness\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcNonNegativeLengthMeasure\" }\n            });\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"ThresholdThickness\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcNonNegativeLengthMeasure\" }\n            });\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"TransomThickness\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcNonNegativeLengthMeasure\" }\n            });\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"LiningToPanelOffsetX\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcLengthMeasure\" }\n            });\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"LiningToPanelOffsetY\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcLengthMeasure\" }\n            });\n         }\n\n         return psetD;\n      }\n\n      private PsetDefinition IfcDoorPanelProperties(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"IfcDoorPanelProperties\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcDoor\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"PanelDepth\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"PanelOperation\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcLabel\" },\n            PropertyValueType = \"PropertyValueType.EnumeratedValue\"\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"PanelWidth\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcNormalisedRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"PanelPosition\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcLabel\" }\n         });\n\n         if (schemaName.StartsWith(\"ifc2x2\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            psetD.ApplicableClasses.Add(\"IfcDoorStyle\");\n         }\n         else if (schemaName.StartsWith(\"ifc2x3\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            psetD.ApplicableClasses.Add(\"IfcDoorStyle\");\n         }\n         else if (schemaName.Equals(\"ifc4\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            psetD.ApplicableClasses.Add(\"IfcDoorType\");\n         }\n\n         return psetD;\n      }\n\n      private PsetDefinition IfcPermeableCoveringProperties(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"IfcPermeableCoveringProperties\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcDoor\" };\n         psetD.ApplicableClasses.Add(\"IfcWindow\");\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"OperationType\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcLabel\" },\n            PropertyValueType = \"PropertyValueType.EnumeratedValue\"\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"PanelPosition\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcLabel\" },\n            PropertyValueType = \"PropertyValueType.EnumeratedValue\"\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"FrameDepth\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"FrameThickness\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         if (schemaName.StartsWith(\"ifc2x2\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            psetD.ApplicableClasses.Add(\"IfcDoorStyle\");\n            psetD.ApplicableClasses.Add(\"IfcWindowStyle\");\n         }\n         else if (schemaName.StartsWith(\"ifc2x3\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            psetD.ApplicableClasses.Add(\"IfcDoorStyle\");\n            psetD.ApplicableClasses.Add(\"IfcWindowStyle\");\n         }\n         else if (schemaName.Equals(\"ifc4\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            psetD.ApplicableClasses.Add(\"IfcDoorType\");\n            psetD.ApplicableClasses.Add(\"IfcWindowType\");\n         }\n\n         return psetD;\n      }\n\n      private PsetDefinition IfcReinforcementDefinitionProperties(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"IfcReinforcementDefinitionProperties\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcReinforcingElement\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"DefinitionType\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcLabel\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"ReinforcementSectionDefinitions\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcLabel\" },  // Not the correct one actually since it is actually a class that is not supported here directly\n            PropertyValueType = \"PropertyValueType.ListValue\"\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition IfcWindowLiningProperties(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"IfcWindowLiningProperties\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcWindow\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"LiningDepth\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"FirstTransomOffset\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcNormalisedRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"SecondTransomOffset\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcNormalisedRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"FirstMullionOffset\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcNormalisedRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"SecondMullionOffset\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcNormalisedRatioMeasure\" }\n         });\n\n         if (schemaName.StartsWith(\"ifc2x2\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            psetD.ApplicableClasses.Add(\"IfcWindowStyle\");\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"LiningThickness\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n            });\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"TransomThickness\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n            });\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"MullionThickness\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n            });\n         }\n         else if (schemaName.StartsWith(\"ifc2x3\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            psetD.ApplicableClasses.Add(\"IfcWindowStyle\");\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"LiningThickness\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n            });\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"TransomThickness\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n            });\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"MullionThickness\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n            });\n         }\n         else if (schemaName.Equals(\"ifc4\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            psetD.ApplicableClasses.Add(\"IfcWindowType\");\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"LiningThickness\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcNonNegativeLengthMeasure\" }\n            });\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"TransomThickness\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcNonNegativeLengthMeasure\" }\n            });\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"MullionThickness\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcNonNegativeLengthMeasure\" }\n            });\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"LiningOffset\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcLengthMeasure\" }\n            });\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"LiningToPanelOffsetX\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcLengthMeasure\" }\n            });\n\n            psetD.properties.Add(new PsetProperty()\n            {\n               Name = \"LiningToPanelOffsetY\",\n               PropertyType = new PropertySingleValue() { DataType = \"IfcLengthMeasure\" }\n            });\n         }\n\n         return psetD;\n      }\n\n      private PsetDefinition IfcWindowPanelProperties(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"IfcWindowPanelProperties\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcWindow\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"OperationType\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcLabel\" },\n            PropertyValueType = \"PropertyValueType.EnumeratedValue\"\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"PanelPosition\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcLabel\" },\n            PropertyValueType = \"PropertyValueType.EnumeratedValue\"\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"FrameDepth\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"FrameThickness\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         if (schemaName.StartsWith(\"ifc2x2\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            psetD.ApplicableClasses.Add(\"IfcWindowStyle\");\n         }\n         else if (schemaName.StartsWith(\"ifc2x3\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            psetD.ApplicableClasses.Add(\"IfcWindowStyle\");\n         }\n         else if (schemaName.Equals(\"ifc4\", StringComparison.InvariantCultureIgnoreCase))\n         {\n            psetD.ApplicableClasses.Add(\"IfcWindowType\");\n         }\n\n         return psetD;\n      }\n\n      private PsetDefinition IfcMechanicalMaterialProperties(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"IfcMechanicalMaterialProperties\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcMaterial\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"DynamicViscosity\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcDynamicViscosityMeasure\" },\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"YoungModulus\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcModulusOfElasticityMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"ShearModulus\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcModulusOfElasticityMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"PoissonRatio\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"ThermalExpansionCoefficient\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcThermalExpansionCoefficientMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition IfcMechanicalSteelMaterialProperties(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"IfcMechanicalSteelMaterialProperties\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcMaterial\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"YieldStress\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPressureMeasure\" },\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"UltimateStress\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPressureMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"UltimateStrain\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"HardeningModule\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcModulusOfElasticityMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"ProportionalStress\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPressureMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"PlasticStrain\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"Relaxations\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcRelaxation\" },\n            PropertyValueType = \"PropertyValueType.ListValue\"\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition IfcMechanicalConcreteMaterialProperties(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"IfcMechanicalConcreteMaterialProperties\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcMaterial\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"CompressiveStrength\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPressureMeasure\" },\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"MaxAggregateSize\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveLengthMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"AdmixturesDescription\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcText\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"Workability\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcText\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"ProtectivePoreRatio\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcNormalisedRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"WaterImpermeability\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcText\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition IfcThermalMaterialProperties(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"IfcThermalMaterialProperties\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcMaterial\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"SpecificHeatCapacity\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcSpecificHeatCapacityMeasure\" },\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"BoilingPoint\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcThermodynamicTemperatureMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"FreezingPoint\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcThermodynamicTemperatureMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"ThermalConductivity\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcThermalConductivityMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition IfcHygroscopicMaterialProperties(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"IfcHygroscopicMaterialProperties\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcMaterial\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"UpperVaporResistanceFactor\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveRatioMeasure\" },\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"LowerVaporResistanceFactor\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"IsothermalMoistureCapacity\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcIsothermalMoistureCapacityMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"VaporPermeability\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcVaporPermeabilityMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"MoistureDiffusivity\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcMoistureDiffusivityMeasure\" }\n         });\n\n         return psetD;\n      }\n\n\n      private PsetDefinition IfcGeneralMaterialProperties(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"IfcGeneralMaterialProperties\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcMaterial\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"MolecularWeight\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcMolecularWeightMeasure\" },\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"Porosity\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcNormalisedRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"MassDensity\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcMassDensityMeasure\" }\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition IfcOpticalMaterialProperties(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"IfcOpticalMaterialProperties\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcMaterial\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"VisibleTransmittance\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveRatioMeasure\" },\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"SolarTransmittance\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"ThermalIrTransmittance\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"ThermalIrEmissivityBack\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveRatioMeasure\" },\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"ThermalIrEmissivityFront\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"VisibleReflectanceBack\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"VisibleReflectanceFront\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveRatioMeasure\" },\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"SolarReflectanceFront\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"SolarReflectanceBack\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveRatioMeasure\" }\n         });\n\n         return psetD;\n      }\n\n\n      private PsetDefinition IfcWaterProperties(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"IfcWaterProperties\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcMaterial\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"IsPotable\",\n            PropertyType = new PropertySingleValue() { DataType = \"Boolean\" },\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"Hardness\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcIonConcentrationMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"AlkalinityConcentration\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcIonConcentrationMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"AcidityConcentration\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcIonConcentrationMeasure\" },\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"ImpuritiesContent\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcNormalisedRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"PHLevel\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPHMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"DissolvedSolidsContent\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcNormalisedRatioMeasure\" },\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition IfcFuelProperties(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"IfcFuelProperties\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcMaterial\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"CombustionTemperature\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcThermodynamicTemperatureMeasure\" },\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"CarbonContent\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"LowerHeatingValue\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcHeatingValueMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"HigherHeatingValue\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcHeatingValueMeasure\" },\n         });\n\n         return psetD;\n      }\n\n      private PsetDefinition IfcProductsOfCombustionProperties(string schemaName)\n      {\n         PsetDefinition psetD = new PsetDefinition();\n         psetD.Name = \"IfcProductsOfCombustionProperties\";\n         psetD.IfcVersion = schemaName;\n         psetD.ApplicableClasses = new List<string>() { \"IfcMaterial\" };\n         psetD.properties = new HashSet<PsetProperty>();\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"SpecificHeatCapacity\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcSpecificHeatCapacityMeasure\" },\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"N20Content\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"COContent\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveRatioMeasure\" }\n         });\n\n         psetD.properties.Add(new PsetProperty()\n         {\n            Name = \"CO2Content\",\n            PropertyType = new PropertySingleValue() { DataType = \"IfcPositiveRatioMeasure\" },\n         });\n\n         return psetD;\n      }\n\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/Properties/AssemblyInfo.cs",
    "content": "using System.Reflection;\nusing System.Resources;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Windows;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"RevitIFCTools\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Autodesk\")]\n[assembly: AssemblyProduct(\"RevitIFCTools\")]\n[assembly: AssemblyCopyright(\"Copyright   2012-2026\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n//In order to begin building localizable applications, set \n//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file\n//inside a <PropertyGroup>.  For example, if you are using US english\n//in your source files, set the <UICulture> to en-US.  Then uncomment\n//the NeutralResourceLanguage attribute below.  Update the \"en-US\" in\n//the line below to match the UICulture setting in the project file.\n\n//[assembly: NeutralResourcesLanguage(\"en-US\", UltimateResourceFallbackLocation.Satellite)]\n\n\n[assembly: ThemeInfo(\n    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located\n                                     //(used if a resource is not found in the page, \n                                     // or application resource dictionaries)\n    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located\n                                              //(used if a resource is not found in the page, \n                                              // app, or any theme specific resource dictionaries)\n)]\n\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute(\"windows7.0\")]\n[assembly: AssemblyVersion(\"27.0.1.0\")]\n[assembly: AssemblyFileVersion(\"27.0.1.0\")]\n"
  },
  {
    "path": "Source/RevitIFCTools/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace RevitIFCTools.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"RevitIFCTools.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Source/RevitIFCTools/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace RevitIFCTools.Properties {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"16.5.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n        \n        public static Settings Default {\n            get {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"uri:settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>"
  },
  {
    "path": "Source/RevitIFCTools/PropertySet/ComplexProperty.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System.Collections.Generic;\n\nnamespace RevitIFCTools.PropertySet\n{\n   class ComplexProperty : PropertyDataType\n   {\n      public string Name { get; set; }\n      public IList<PsetProperty> Properties { get; set; }\n      public override string ToString()\n      {\n         string compT = Name;\n         foreach (PsetProperty p in Properties)\n            compT += \"\\r\\n\" + p.ToString();\n         return compT;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/PropertySet/LanguageType.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nnamespace RevitIFCTools.PropertySet\n{\n   enum LanguageType\n   {\n      English_USA,\n      Japanese,\n      Korean,\n      Chinese_Simplified,\n      Chinese_Traditional,\n      French,\n      German,\n      Spanish,\n      Italian,\n      Dutch,\n      Russian,\n      Czech,\n      Polish,\n      Hungarian,\n      Brazilian_Portuguese,\n      Unknown\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/PropertySet/NameAlias.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nnamespace RevitIFCTools.PropertySet\n{\n   public class NameAlias\n   {\n      public string Alias { get; set; }\n      public string lang { get; set; }\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/PropertySet/PropertyBoundedValue.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nnamespace RevitIFCTools.PropertySet\n{\n   class PropertyBoundedValue : PropertyDataType\n   {\n      public string DataType { get; set; }\n      public override string ToString()\n      {\n         return DataType;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/PropertySet/PropertyDataType.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nnamespace RevitIFCTools.PropertySet\n{\n   abstract public class PropertyDataType\n   {\n      public abstract override string ToString();\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/PropertySet/PropertyEnumItem.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System.Collections.Generic;\n\nnamespace RevitIFCTools.PropertySet\n{\n   class PropertyEnumItem\n   {\n      public string EnumItem { get; set; }\n      public IList<NameAlias> Aliases { get; set; }\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/PropertySet/PropertyEnumeratedValue.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System.Collections.Generic;\n\nnamespace RevitIFCTools.PropertySet\n{\n   class PropertyEnumeratedValue : PropertyDataType\n   {\n      public string Name { get; set; }\n      public IList<PropertyEnumItem> EnumDef { get; set; }\n      public override string ToString()\n      {\n         string dt = Name;\n         if (EnumDef != null)\n         {\n            foreach (PropertyEnumItem ei in EnumDef)\n            {\n               dt += \"\\r\\n\\tEnum:\\t\" + ei.EnumItem;\n               foreach (NameAlias na in ei.Aliases)\n               {\n                  dt += \"\\r\\n\\t\\tAliases:\\tlang: \" + na.lang + \" :\\t\" + na.Alias;\n               }\n            }\n         }\n         return dt;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/PropertySet/PropertyListValue.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nnamespace RevitIFCTools.PropertySet\n{\n   class PropertyListValue : PropertyDataType\n   {\n      public string DataType { get; set; }\n      public override string ToString()\n      {\n         return DataType;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/PropertySet/PropertyReferenceValue.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nnamespace RevitIFCTools.PropertySet\n{\n   class PropertyReferenceValue : PropertyDataType\n   {\n      public string RefEntity { get; set; }\n      public override string ToString()\n      {\n         return RefEntity;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/PropertySet/PropertySingleValue.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nnamespace RevitIFCTools.PropertySet\n{\n   class PropertySingleValue : PropertyDataType\n   {\n      public string DataType { get; set; }\n      public override string ToString()\n      {\n         return DataType;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/PropertySet/PropertyTableValue.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nnamespace RevitIFCTools.PropertySet\n{\n   class PropertyTableValue : PropertyDataType\n   {\n      public string Expression { get; set; }\n      public string DefiningValueType { get; set; }\n      public string DefinedValueType { get; set; }\n      public override string ToString()\n      {\n         string tv = \"\";\n         if (!string.IsNullOrEmpty(Expression))\n         {\n            tv += \"Expression:\\t\" + Expression;\n         }\n         tv += \"\\r\\nDefiningValueType:\\t\" + DefiningValueType;\n         tv += \"\\r\\nDefinedValueType:\\t\" + DefinedValueType;\n         return tv;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/PropertySet/PsetDefinition.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace RevitIFCTools.PropertySet\n{\n   public class PropertyComparer : IEqualityComparer<PsetProperty>\n   {\n      public bool Equals(PsetProperty prop1, PsetProperty prop2)\n      {\n         return (prop1.Name.Equals(prop2.Name, StringComparison.InvariantCultureIgnoreCase));\n      }\n\n      public int GetHashCode(PsetProperty prop)\n      {\n         return StringComparer.InvariantCultureIgnoreCase.GetHashCode(prop.Name);\n      }\n   }\n\n   public class PsetDefinition\n   {\n      public string Name { get; set; }\n      private string m_IfcVersion;\n      public string IfcVersion { \n         get\n         {\n            return m_IfcVersion;\n         } \n         set {\n            if (value.StartsWith(\"IFC2X2\", StringComparison.InvariantCultureIgnoreCase))\n               m_IfcVersion = \"IFC2X2\";\n            else if (value.StartsWith(\"IFC2X3\", StringComparison.InvariantCultureIgnoreCase))\n               m_IfcVersion = \"IFC2X3\";\n            else if (value.Equals(\"IFC4\", StringComparison.InvariantCultureIgnoreCase))\n               m_IfcVersion = \"IFC4\";\n            else\n               m_IfcVersion = value;\n         } \n      }\n      public string IfdGuid { get; set; }\n      public IList<string> ApplicableClasses { get; set; }\n      public string ApplicableType { get; set; }\n      public string PredefinedType { get; set; }\n      public HashSet<PsetProperty> properties { get; set; }\n      public override string ToString()\n      {\n         string psetDefStr = \"\";\n         psetDefStr = \"\\r\\nPsetName:\\t\" + Name\n                     + \"\\r\\nIfcVersion:\\t\" + IfcVersion;\n         if (!string.IsNullOrEmpty(IfdGuid))\n            psetDefStr += \"\\r\\nifdguid:\\t\" + IfdGuid;\n         string appCl = \"\";\n         foreach (string cl in ApplicableClasses)\n         {\n            if (!string.IsNullOrEmpty(appCl))\n               appCl += \", \";\n            appCl += cl;\n         }\n         psetDefStr += \"\\r\\nApplicableClasses:\\t(\" + appCl + \")\";\n         psetDefStr += \"\\nProperties:\";\n         foreach (PsetProperty p in properties)\n         {\n            psetDefStr += p.ToString() + \"\\r\\n\";\n         }\n         return psetDefStr;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/PropertySet/PsetProperty.cs",
    "content": "﻿//\n// BIM IFC library: this library works with Autodesk(R) Revit(R) to export IFC files containing model geometry.\n// Copyright (C) 2012  Autodesk, Inc.\n// \n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n//\n\nusing System.Collections.Generic;\n\nnamespace RevitIFCTools.PropertySet\n{\n   public class PsetProperty\n   {\n      public string IfdGuid { get; set; }\n      public string Name { get; set; }\n      public PropertyDataType PropertyType { get; set; }\n      public string PropertyValueType { get; set; }\n      public IList<NameAlias> NameAliases { get; set; }\n      public override string ToString()\n      {\n         string propStr = \"\\r\\n\\tPropertyName:\\t\" + Name;\n         if (!string.IsNullOrEmpty(IfdGuid))\n            propStr += \"\\r\\n\\tIfdGuid:\\t\" + IfdGuid;\n         if (NameAliases != null)\n         {\n            foreach (NameAlias na in NameAliases)\n            {\n               propStr += \"\\r\\n\\t\\tAliases:\\tlang: \" + na.lang + \" :\\t\" + na.Alias;\n            }\n         }\n         if (PropertyType != null)\n            propStr += \"\\r\\n\\tPropertyType:\\t\" + PropertyType.ToString();\n         return propStr;\n      }\n   }\n}\n"
  },
  {
    "path": "Source/RevitIFCTools/RevitIFCTools.csproj",
    "content": "<Project Sdk=\"\">\n  <PropertyGroup>\n    <RootNamespace>RevitIFCTools</RootNamespace>\n    <AssemblyName>RevitIFCTools</AssemblyName>\n    <OutputType>WinExe</OutputType>\n\t<UseWPF>true</UseWPF>\n   <EnableDefaultPageItems>false</EnableDefaultPageItems>\n   <UseWindowsForms>False</UseWindowsForms>\n  </PropertyGroup>\n  <Import Project=\"$(SolutionDir)VSProps\\Revit.CSharp.Sdk.props\" />\n  <ItemGroup>\n    <None Remove=\"App.xaml\" />\n    <None Remove=\"GeneratePsetDefWin.xaml\" />\n    <None Remove=\"IFCEntityListWin.xaml\" />\n    <None Remove=\"MainWindow.xaml\" />\n    <None Remove=\"PropertySet\\ExprTester.xaml\" />\n  </ItemGroup>\n   <ItemGroup>\n      <FrameworkReference Include=\"Microsoft.WindowsDesktop.App\" />\n   </ItemGroup>\n   <ItemGroup>\n    <FrameworkReference Include=\"Microsoft.WindowsDesktop.App.WindowsForms\" />\n  </ItemGroup>\n   <ItemGroup>\n     <ProjectReference Include=\"..\\Revit.IFC.Common\\Revit.IFC.Common.csproj\" />\n     <ProjectReference Include=\"..\\Revit.IFC.Export\\Revit.IFC.Export.csproj\" />\n   </ItemGroup>\n  \n   <ItemGroup>\n         <PackageReference Include=\"Antlr4.Runtime\">\n      <Version>4.6.6</Version>\n    </PackageReference>\n  </ItemGroup>\n   <ItemGroup>\n     <Page Include=\"App.xaml\" />\n     <Page Include=\"GeneratePsetDefWin.xaml\" />\n     <Page Include=\"IFCEntityListWin.xaml\" />\n     <Page Include=\"MainWindow.xaml\" />\n     <Page Include=\"ParameterExpr\\ExprTester.xaml\" />\n   </ItemGroup>\n   <ItemGroup>\n     <Reference Include=\"RevitAPI\">\n       <HintPath>..\\..\\..\\API\\2027\\RevitAPI.dll</HintPath>\n     </Reference>\n   </ItemGroup>\n  <Import Project=\"$(SolutionDir)VSProps\\Revit.CSharp.Sdk.targets\" />\n\n</Project>"
  },
  {
    "path": "Source/RevitIFCTools/RevitIFCToolsEnum.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace RevitIFCTools\n{\n   public enum PsetOrQtoSetEnum\n   {\n      PROPERTYSET,\n      QTOSET,\n      PREDEFINEDPSET,\n      NOTDEFINED\n   }\n\n   public enum ItemsInPsetQtoDefs\n   {\n      PropertySetOrQtoSetDef,\n      PropertyOrQtoDefs,\n      PropertyOrQtoDef,\n      PropertyOrQtoType,\n      PsetOrQtoDefinitionAliases,\n      PsetOrQtoDefinitionAlias\n   }\n\n   public class PsetOrQto\n   {\n      static Dictionary<PsetOrQtoSetEnum, Dictionary<ItemsInPsetQtoDefs, string>> m_psetOrQtoDefItems = new Dictionary<PsetOrQtoSetEnum, Dictionary<ItemsInPsetQtoDefs, string>>();\n\n      public static Dictionary<PsetOrQtoSetEnum, Dictionary<ItemsInPsetQtoDefs, string>> PsetOrQtoDefItems\n      {\n         get\n         {\n            if (m_psetOrQtoDefItems.Count == 0)\n            {\n               // Adding Pset related keywords\n               Dictionary<ItemsInPsetQtoDefs, string> psetItems = new Dictionary<ItemsInPsetQtoDefs, string>();\n               psetItems.Add(ItemsInPsetQtoDefs.PropertySetOrQtoSetDef, \"PropertySetDef\");\n               psetItems.Add(ItemsInPsetQtoDefs.PropertyOrQtoDefs, \"PropertyDefs\");\n               psetItems.Add(ItemsInPsetQtoDefs.PropertyOrQtoDef, \"PropertyDef\");\n               psetItems.Add(ItemsInPsetQtoDefs.PropertyOrQtoType, \"PropertyType\");\n               psetItems.Add(ItemsInPsetQtoDefs.PsetOrQtoDefinitionAliases, \"PsetDefinitionAliases\");\n               psetItems.Add(ItemsInPsetQtoDefs.PsetOrQtoDefinitionAlias, \"PsetDefinitionAlias\");\n               m_psetOrQtoDefItems.Add(PsetOrQtoSetEnum.PROPERTYSET, psetItems);\n\n               // Adding QtoSet related keywords\n               Dictionary<ItemsInPsetQtoDefs, string> qtoSetItems = new Dictionary<ItemsInPsetQtoDefs, string>();\n               qtoSetItems.Add(ItemsInPsetQtoDefs.PropertySetOrQtoSetDef, \"QtoSetDef\");\n               qtoSetItems.Add(ItemsInPsetQtoDefs.PropertyOrQtoDefs, \"QtoDefs\");\n               qtoSetItems.Add(ItemsInPsetQtoDefs.PropertyOrQtoDef, \"QtoDef\");\n               qtoSetItems.Add(ItemsInPsetQtoDefs.PropertyOrQtoType, \"QtoType\");\n               qtoSetItems.Add(ItemsInPsetQtoDefs.PsetOrQtoDefinitionAliases, \"QtoDefinitionAliases\");\n               qtoSetItems.Add(ItemsInPsetQtoDefs.PsetOrQtoDefinitionAlias, \"QtoDefinitionAlias\");\n               m_psetOrQtoDefItems.Add(PsetOrQtoSetEnum.QTOSET, qtoSetItems);\n            }\n            return m_psetOrQtoDefItems;\n         }\n      }\n   } \n}\n"
  },
  {
    "path": "VSProps/Revit.CSharp.Sdk.props",
    "content": "<Project> \n \n  <Import Project=\"Revit.Common.Sdk.props\" />\n  <Import Project=\"Sdk.props\" Sdk=\"Microsoft.NET.Sdk\" />\n    \n</Project> "
  },
  {
    "path": "VSProps/Revit.CSharp.Sdk.targets",
    "content": "<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x64' \">\n    <DefineConstants>TRACE;IFC_OPENSOURCE;$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x64' \">\n    <DefineConstants>TRACE;IFC_OPENSOURCE;$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Slow_Debug|x64' \">\n    <DefineConstants>DEBUG;TRACE;IFC_OPENSOURCE;$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <Import Project=\"Sdk.targets\" Sdk=\"Microsoft.NET.Sdk\" />\n  <Import Project=\"$(SolutionDir)VSProps\\Revit.Common.Sdk.targets\" />\n  <!-- Make sure the projects using this targets file rebuild if this file changes \n       This must come after the import of the common targets -->\n  <PropertyGroup>\n    <MSBuildAllProjects>$(MSBuildAllProjects);$(SolutionDir)VSProps\\Revit.CSharp.Sdk.targets</MSBuildAllProjects>\n  </PropertyGroup>\n</Project>\n"
  },
  {
    "path": "VSProps/Revit.Common.Sdk.props",
    "content": "<Project>\n  <Import Project=\"$(SolutionDir)VSProps\\Revit.NetVersion.props\" />\n  <PropertyGroup>  \n    <Platforms>x64</Platforms>\n\t  <Configurations>Debug;Release;Slow_Debug</Configurations>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x64</Platform>\n    <BaseIntermediateOutputPath>$(SolutionDir)\\Intermediate\\$(Configuration)$(Platform)\\$(MSBuildProjectName)\\</BaseIntermediateOutputPath>\n    <IntermediateOutputPath>$(BaseIntermediateOutputPath)</IntermediateOutputPath>\n\t  <GenerateAssemblyInfo>false</GenerateAssemblyInfo>\n\t  <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>\n\t  <EnableDefaultEmbeddedResourceItems>false</EnableDefaultEmbeddedResourceItems>\n\t  <PlatformTarget>x64</PlatformTarget>\t\n\t  <CopyDebugSymbolFilesFromPackages>true</CopyDebugSymbolFilesFromPackages>\n\t  <CopyDocumentationFilesFromPackages>true</CopyDocumentationFilesFromPackages>\n\t  <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>\n\t  <GenerateDependencyFile>false</GenerateDependencyFile>\n    <SuppressNETCoreSdkPreviewMessage>true</SuppressNETCoreSdkPreviewMessage>\n    <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>\n  </PropertyGroup>\n  \n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x64' \">\n    <PlatformTarget>x64</PlatformTarget>\n    <ThirdPartyVersion>x64\\Release</ThirdPartyVersion>\n    <ThirdPartyRelease>Release</ThirdPartyRelease>\n    <ThirdPartySuffix/>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x64' \">\n    <PlatformTarget>x64</PlatformTarget>\n    <ThirdPartyVersion>x64\\Release</ThirdPartyVersion>\n    <ThirdPartyRelease>Release</ThirdPartyRelease>\n    <ThirdPartySuffix/>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Slow_Debug|x64' \">\n    <PlatformTarget>x64</PlatformTarget>\n    <ThirdPartyVersion>x64\\Debug</ThirdPartyVersion>\n    <ThirdPartyRelease>Debug</ThirdPartyRelease>\n    <ThirdPartySuffix>d</ThirdPartySuffix>\n  </PropertyGroup>\n</Project>\n"
  },
  {
    "path": "VSProps/Revit.Common.Sdk.targets",
    "content": "<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"3.5\">\n\n  <ItemGroup>\n    <Compile Include=\"$(VersionInfo)\">\n      <SubType>Code</SubType>\n    </Compile>\n  </ItemGroup>\n\n  <PropertyGroup>\n    <Platform Condition=\"'$(Platform)'==''\">x64</Platform>\n    <AirMaxVersion>Airmax2016</AirMaxVersion>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>\n    <WarningLevel>4</WarningLevel>\n    <NoWarn>1668</NoWarn>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x64' \">\n    <Optimize>false</Optimize>\n    <ThirdPartyConfig>x64\\Release</ThirdPartyConfig>    \n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x64' \">\n    <Optimize>true</Optimize>\n    <ThirdPartyConfig>x64\\Release</ThirdPartyConfig>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Slow_Debug|x64' \">\n    <Optimize>false</Optimize>\n     <ThirdPartyConfig>x64\\Debug</ThirdPartyConfig>   \n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Platform)' == 'x64' \">\n    <NoWarn>1607</NoWarn>\n  </PropertyGroup>\n  <PropertyGroup>\n    <MSBuildAllProjects>$(MSBuildAllProjects);$(SolutionDir)VSProps\\Revit.Common.Sdk.targets</MSBuildAllProjects>\n  </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "VSProps/Revit.NetVersion.props",
    "content": "<Project>\n    <PropertyGroup Condition=\"'$(MSBuildProjectExtension)' == '.vcxproj'\">\n       <TargetFramework>net10.0</TargetFramework>\n    </PropertyGroup>\n   <PropertyGroup>\n       <TargetFramework Condition=\" '$(TargetFramework)' == '' \">net10.0-windows</TargetFramework>\n   </PropertyGroup>\n</Project>\n"
  },
  {
    "path": "contributing.md",
    "content": "# Contributions\n\nWhile we encourage contributions to the open source, we also want to make sure that we maintain our high quality standards for code that makes it into an official release. If you would be interested in contributing to the open source project, the following steps are necessary:\n\nPlease download and return the Autodesk Individual Open Source Agreement contract _here_ and return it to Angel Velez (angel.velez@autodesk.com).\nSend Angel Velez a pull request so that we can review your changes.\nThe Open Source Steering Committee will meet to approve the proposed update.\nOnce approved, we will integrate your changes. We may make modifications based on any bugs found, or ask for quality-based updates on your contribution.\n"
  }
]